ZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvLmdpdGlnbm9yZSBiL3lvY3RvLXBva3kvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjM1ODMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMjYgQEAKKyoucHljCisqLnB5bworLyoucGF0Y2gKK2J1aWxkKi8KK3B5c2h0YWJsZXMucHkKK3BzdGFnZS8KK3NjcmlwdHMvb2UtZ2l0LXByb3h5LXNvY2tzCitzb3VyY2VzLworbWV0YS0qLworIW1ldGEtc2tlbGV0b24KKyFtZXRhLXNlbGZ0ZXN0Citob2ItaW1hZ2UtKi5iYgorKi5zd3AKKyoub3JpZworKi5yZWoKKyp+CishbWV0YS15b2N0bworIW1ldGEteW9jdG8tYnNwCishbWV0YS15b2N0by1pbXBvcnRlZAorZG9jdW1lbnRhdGlvbi91c2VyLW1hbnVhbC91c2VyLW1hbnVhbC5odG1sCitkb2N1bWVudGF0aW9uL3VzZXItbWFudWFsL3VzZXItbWFudWFsLnBkZgorZG9jdW1lbnRhdGlvbi91c2VyLW1hbnVhbC91c2VyLW1hbnVhbC50Z3oKK3B1bGwtKi8KK2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvYmFja2xvZy50eHQKK2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvbG9nLyoKK2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvLmNhY2hlLyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5Ly50ZW1wbGF0ZWNvbmYgYi95b2N0by1wb2t5Ly50ZW1wbGF0ZWNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY1MGE0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvLnRlbXBsYXRlY29uZgpAQCAtMCwwICsxLDIgQEAKKyMgVGVtcGxhdGUgc2V0dGluZ3MKK1RFTVBMQVRFQ09ORj0ke1RFTVBMQVRFQ09ORjotbWV0YS15b2N0by9jb25mfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9MSUNFTlNFIGIveW9jdG8tcG9reS9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZmE2ZTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L0xJQ0VOU0UKQEAgLTAsMCArMSwxNCBAQAorRGlmZmVyZW50IGNvbXBvbmVudHMgb2YgT3BlbkVtYmVkZGVkIGFyZSB1bmRlciBkaWZmZXJlbnQgbGljZW5zZXMgKGEgbWl4CitvZiBNSVQgYW5kIEdQTHYyKS4gUGxlYXNlIHNlZToKKworbWV0YS9DT1BZSU5HLkdQTHYyIChHUEx2MikKK21ldGEvQ09QWUlORy5NSVQgKE1JVCkKK21ldGEtc2VsZnRlc3QvQ09QWUlORy5NSVQgKE1JVCkKK21ldGEtc2tlbGV0b24vQ09QWUlORy5NSVQgKE1JVCkKKworQWxsIG1ldGFkYXRhIGlzIE1JVCBsaWNlbnNlZCB1bmxlc3Mgb3RoZXJ3aXNlIHN0YXRlZC4gU291cmNlIGNvZGUKK2luY2x1ZGVkIGluIHRyZWUgZm9yIGluZGl2aWR1YWwgcmVjaXBlcyBpcyB1bmRlciB0aGUgTElDRU5TRSBzdGF0ZWQgaW4KK3RoZSBhc3NvY2lhdGVkIHJlY2lwZSAoLmJiIGZpbGUpIHVubGVzcyBvdGhlcndpc2Ugc3RhdGVkLgorCitMaWNlbnNlIGluZm9ybWF0aW9uIGZvciBhbnkgb3RoZXIgZmlsZXMgaXMgZWl0aGVyIGV4cGxpY2l0bHkgc3RhdGVkIAorb3IgZGVmYXVsdHMgdG8gR1BMIHZlcnNpb24gMi4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvUkVBRE1FIGIveW9jdG8tcG9reS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ0OTMwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvUkVBRE1FCkBAIC0wLDAgKzEsNTggQEAKK1Bva3kKKz09PT0KKworUG9reSBpcyBhbiBpbnRlZ3JhdGlvbiBvZiB2YXJpb3VzIGNvbXBvbmVudHMgdG8gZm9ybSBhIGNvbXBsZXRlIHByZXBhY2thZ2VkCitidWlsZCBzeXN0ZW0gYW5kIGRldmVsb3BtZW50IGVudmlyb25tZW50LiBJdCBmZWF0dXJlcyBzdXBwb3J0IGZvciBidWlsZGluZworY3VzdG9taXNlZCBlbWJlZGRlZCBkZXZpY2Ugc3R5bGUgaW1hZ2VzLiBUaGVyZSBhcmUgcmVmZXJlbmNlIGRlbW8gaW1hZ2VzCitmZWF0dXJpbmcgYSBYMTEvTWF0Y2hib3gvR1RLIHRoZW1lZCBVSSBjYWxsZWQgU2F0by4gVGhlIHN5c3RlbSBzdXBwb3J0cworY3Jvc3MtYXJjaGl0ZWN0dXJlIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50IHVzaW5nIFFFTVUgZW11bGF0aW9uIGFuZCBhCitzdGFuZGFsb25lIHRvb2xjaGFpbiBhbmQgU0RLIHdpdGggSURFIGludGVncmF0aW9uLgorCitBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIHRoZSBzcGVjaWZpY3Mgb2YgaGFyZHdhcmUgdGhhdCBQb2t5IHN1cHBvcnRzCitpcyBhdmFpbGFibGUgaW4gUkVBRE1FLmhhcmR3YXJlLiBGdXJ0aGVyIGhhcmR3YXJlIHN1cHBvcnQgY2FuIGVhc2lseSBiZSBhZGRlZAoraW4gdGhlIGZvcm0gb2YgbGF5ZXJzIHdoaWNoIGV4dGVuZCB0aGUgc3lzdGVtcyBjYXBhYmlsaXRpZXMgaW4gYSBtb2R1bGFyIHdheS4KKworQXMgYW4gaW50ZWdyYXRpb24gbGF5ZXIgUG9reSBjb25zaXN0cyBvZiBzZXZlcmFsIHVwc3RyZWFtIHByb2plY3RzIHN1Y2ggYXMgCitCaXRCYWtlLCBPcGVuRW1iZWRkZWQtQ29yZSwgWW9jdG8gZG9jdW1lbnRhdGlvbiBhbmQgdmFyaW91cyBzb3VyY2VzIG9mIGluZm9ybWF0aW9uIAorZS5nLiBmb3IgdGhlIGhhcmR3YXJlIHN1cHBvcnQuIFBva3kgaXMgaW4gdHVybiBhIGNvbXBvbmVudCBvZiB0aGUgWW9jdG8gUHJvamVjdC4KKworVGhlIFlvY3RvIFByb2plY3QgaGFzIGV4dGVuc2l2ZSBkb2N1bWVudGF0aW9uIGFib3V0IHRoZSBzeXN0ZW0gaW5jbHVkaW5nIGEgCityZWZlcmVuY2UgbWFudWFsIHdoaWNoIGNhbiBiZSBmb3VuZCBhdDoKKyAgICBodHRwOi8veW9jdG9wcm9qZWN0Lm9yZy9kb2N1bWVudGF0aW9uCisKK09wZW5FbWJlZGRlZC1Db3JlIGlzIGEgbGF5ZXIgY29udGFpbmluZyB0aGUgY29yZSBtZXRhZGF0YSBmb3IgY3VycmVudCB2ZXJzaW9ucworb2YgT3BlbkVtYmVkZGVkLiBJdCBpcyBkaXN0cm8tbGVzcyAoY2FuIGJ1aWxkIGEgZnVuY3Rpb25hbCBpbWFnZSB3aXRoCitESVNUUk8gPSAibm9kaXN0cm8iKSBhbmQgY29udGFpbnMgb25seSBlbXVsYXRlZCBtYWNoaW5lIHN1cHBvcnQuCisKK0ZvciBpbmZvcm1hdGlvbiBhYm91dCBPcGVuRW1iZWRkZWQsIHNlZSB0aGUgT3BlbkVtYmVkZGVkIHdlYnNpdGU6CisgICAgaHR0cDovL3d3dy5vcGVuZW1iZWRkZWQub3JnLworCitXaGVyZSB0byBTZW5kIFBhdGNoZXMKKz09PT09PT09PT09PT09PT09PT09PQorCitBcyBQb2t5IGlzIGFuIGludGVncmF0aW9uIHJlcG9zaXRvcnkgKGJ1aWx0IHVzaW5nIGEgdG9vbCBjYWxsZWQgY29tYm8tbGF5ZXIpLAorcGF0Y2hlcyBhZ2FpbnN0IHRoZSB2YXJpb3VzIGNvbXBvbmVudHMgc2hvdWxkIGJlIHNlbnQgdG8gdGhlaXIgcmVzcGVjdGl2ZQordXBzdHJlYW1zOgorCitiaXRiYWtlOgorICAgIEdpdCByZXBvc2l0b3J5OiBodHRwOi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZS8KKyAgICBNYWlsaW5nIGxpc3Q6IGJpdGJha2UtZGV2ZWxAbGlzdHMub3BlbmVtYmVkZGVkLm9yZworCitkb2N1bWVudGF0aW9uOgorICAgIEdpdCByZXBvc2l0b3J5OiBodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS95b2N0by1kb2NzLworICAgIE1haWxpbmcgbGlzdDogeW9jdG9AeW9jdG9wcm9qZWN0Lm9yZworCittZXRhLXlvY3RvKC1ic3ApOgorICAgIEdpdCByZXBvc2l0b3J5OiBodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9tZXRhLXlvY3RvKC1ic3ApCisgICAgTWFpbGluZyBsaXN0OiBwb2t5QHlvY3RvcHJvamVjdC5vcmcKKworRXZlcnl0aGluZyBlbHNlIHNob3VsZCBiZSBzZW50IHRvIHRoZSBPcGVuRW1iZWRkZWQgQ29yZSBtYWlsaW5nIGxpc3QuICBJZiBpbgorZG91YnQsIGNoZWNrIHRoZSBvZS1jb3JlIGdpdCByZXBvc2l0b3J5IGZvciB0aGUgY29udGVudCB5b3UgaW50ZW5kIHRvIG1vZGlmeS4KK0JlZm9yZSBzZW5kaW5nLCBiZSBzdXJlIHRoZSBwYXRjaGVzIGFwcGx5IGNsZWFubHkgdG8gdGhlIGN1cnJlbnQgb2UtY29yZSBnaXQKK3JlcG9zaXRvcnkuCisKKyAgICBHaXQgcmVwb3NpdG9yeTogaHR0cDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlLworICAgIE1haWxpbmcgbGlzdDogb3BlbmVtYmVkZGVkLWNvcmVAbGlzdHMub3BlbmVtYmVkZGVkLm9yZworCitOb3RlOiBUaGUgc2NyaXB0cyBkaXJlY3Rvcnkgc2hvdWxkIGJlIHRyZWF0ZWQgd2l0aCBleHRyYSBjYXJlIGFzIGl0IGlzIGEgbWl4IG9mCitvZS1jb3JlIGFuZCBwb2t5LXNwZWNpZmljIGZpbGVzLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9SRUFETUUuaGFyZHdhcmUgYi95b2N0by1wb2t5L1JFQURNRS5oYXJkd2FyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Yzc0YzVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9SRUFETUUuaGFyZHdhcmUKQEAgLTAsMCArMSw1MDAgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUG9reSBIYXJkd2FyZSBSRUFETUUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBmaWxlIGdpdmVzIGRldGFpbHMgYWJvdXQgdXNpbmcgUG9reSB3aXRoIHRoZSByZWZlcmVuY2UgbWFjaGluZXMKK3N1cHBvcnRlZCBvdXQgb2YgdGhlIGJveC4gQSBmdWxsIGxpc3Qgb2Ygc3VwcG9ydGVkIHJlZmVyZW5jZSB0YXJnZXQgbWFjaGluZXMKK2NhbiBiZSBmb3VuZCBieSBsb29raW5nIGluIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3JpZXM6CisKKyAgIG1ldGEvY29uZi9tYWNoaW5lLworICAgbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lLworCitJZiB5b3UgYXJlIGluIGRvdWJ0IGFib3V0IHVzaW5nIFBva3kvT3BlbkVtYmVkZGVkIHdpdGggeW91ciBoYXJkd2FyZSwgY29uc3VsdAordGhlIGRvY3VtZW50YXRpb24gZm9yIHlvdXIgYm9hcmQvZGV2aWNlLgorCitTdXBwb3J0IGZvciBhZGRpdGlvbmFsIGRldmljZXMgaXMgbm9ybWFsbHkgYWRkZWQgYnkgY3JlYXRpbmcgQlNQIGxheWVycyAtIGZvcgorbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIHRoZSBZb2N0byBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MKK0d1aWRlIC0gZG9jdW1lbnRhdGlvbiBzb3VyY2UgaXMgaW4gZG9jdW1lbnRhdGlvbi9ic3BndWlkZSBvciBkb3dubG9hZCB0aGUgUERGCitmcm9tOgorCisgICBodHRwOi8veW9jdG9wcm9qZWN0Lm9yZy9kb2N1bWVudGF0aW9uCisKK1N1cHBvcnQgZm9yIHBoeXNpY2FsIHJlZmVyZW5jZSBoYXJkd2FyZSBoYXMgbm93IGJlZW4gc3BsaXQgb3V0IGludG8gYQorbWV0YS15b2N0by1ic3AgbGF5ZXIgd2hpY2ggY2FuIGJlIHJlbW92ZWQgc2VwYXJhdGVseSBmcm9tIG90aGVyIGxheWVycyBpZiBub3QKK25lZWRlZC4KKworCitRRU1VIEVtdWxhdGlvbiBUYXJnZXRzCis9PT09PT09PT09PT09PT09PT09PT09CisKK1RvIHNpbXBsaWZ5IGRldmVsb3BtZW50LCB0aGUgYnVpbGQgc3lzdGVtIHN1cHBvcnRzIGJ1aWxkaW5nIGltYWdlcyB0bword29yayB3aXRoIHRoZSBRRU1VIGVtdWxhdG9yIGluIHN5c3RlbSBlbXVsYXRpb24gbW9kZS4gU2V2ZXJhbCBhcmNoaXRlY3R1cmVzCithcmUgY3VycmVudGx5IHN1cHBvcnRlZDoKKworICAqIEFSTSAocWVtdWFybSkKKyAgKiB4ODYgKHFlbXV4ODYpCisgICogeDg2LTY0IChxZW11eDg2LTY0KQorICAqIFBvd2VyUEMgKHFlbXVwcGMpCisgICogTUlQUyAocWVtdW1pcHMpCisKK1VzZSBvZiB0aGUgUUVNVSBpbWFnZXMgaXMgY292ZXJlZCBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorVGhlIGFwcHJvcHJpYXRlIE1BQ0hJTkUgdmFyaWFibGUgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgdGFyZ2V0IGlzIGdpdmVuCitpbiBicmFja2V0cy4KKworCitIYXJkd2FyZSBSZWZlcmVuY2UgQm9hcmRzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBmb2xsb3dpbmcgYm9hcmRzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIG1ldGEteW9jdG8tYnNwIGxheWVyOgorCisgICogVGV4YXMgSW5zdHJ1bWVudHMgQmVhZ2xlYm9uZSAoYmVhZ2xlYm9uZSkKKyAgKiBGcmVlc2NhbGUgTVBDODMxNUUtUkRCIChtcGM4MzE1ZS1yZGIpCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgYm9hcmQncyBzZWN0aW9uIGJlbG93LiBUaGUgYXBwcm9wcmlhdGUgTUFDSElORQordmFyaWFibGUgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgYm9hcmQgaXMgZ2l2ZW4gaW4gYnJhY2tldHMuCisKK1JlZmVyZW5jZSBCb2FyZCBNYWludGVuYW5jZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1NlbmQgcHVsbCByZXF1ZXN0cywgcGF0Y2hlcywgY29tbWVudHMgb3IgcXVlc3Rpb25zIGFib3V0IG1ldGEteW9jdG8tYnNwcyB0byBwb2t5QHlvY3RvcHJvamVjdC5vcmcKKworTWFpbnRhaW5lcnM6IEtldmluIEhhbyA8a2V4aW4uaGFvQHdpbmRyaXZlci5jb20+CisgICAgICAgICAgICAgQnJ1Y2UgQXNoZmllbGQgPGJydWNlLmFzaGZpZWxkQHdpbmRyaXZlci5jb20+CisKK0NvbnN1bWVyIERldmljZXMKKz09PT09PT09PT09PT09PT0KKworVGhlIGZvbGxvd2luZyBjb25zdW1lciBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIG1ldGEteW9jdG8tYnNwIGxheWVyOgorCisgICogSW50ZWwgeDg2IGJhc2VkIFBDcyBhbmQgZGV2aWNlcyAoZ2VuZXJpY3g4NikKKyAgKiBVYmlxdWl0aSBOZXR3b3JrcyBFZGdlUm91dGVyIExpdGUgKGVkZ2Vyb3V0ZXIpCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgZGV2aWNlJ3Mgc2VjdGlvbiBiZWxvdy4gVGhlIGFwcHJvcHJpYXRlIE1BQ0hJTkUKK3ZhcmlhYmxlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRldmljZSBpcyBnaXZlbiBpbiBicmFja2V0cy4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpYyBIYXJkd2FyZSBEb2N1bWVudGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK0ludGVsIHg4NiBiYXNlZCBQQ3MgYW5kIGRldmljZXMgKGdlbmVyaWN4ODYpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGdlbmVyaWN4ODYgTUFDSElORSBpcyB0ZXN0ZWQgb24gdGhlIGZvbGxvd2luZyBwbGF0Zm9ybXM6CisKK0ludGVsIFhlb24vQ29yZSBpLVNlcmllczoKKyAgKyBJbnRlbCBSb21sZXkgU2VydmVyOiBTYW5keSBCcmlkZ2UgWGVvbiBwcm9jZXNzb3IsIEM2MDAgUENIIChQYXRzYnVyZyksIChDYW5vZSBQYXNzIENSQikKKyAgKyBJbnRlbCBSb21sZXkgU2VydmVyOiBJdnkgQnJpZGdlIFhlb24gcHJvY2Vzc29yLCBDNjAwIFBDSCAoUGF0c2J1cmcpLCAoSW50ZWwgU0RQIFMyUjMpCisgICsgSW50ZWwgQ3J5c3RhbCBGb3Jlc3QgU2VydmVyOiBTYW5keSBCcmlkZ2UgWGVvbiBwcm9jZXNzb3IsIERIODl4eCBQQ0ggKENhdmUgQ3JlZWspLCAoU3RhcmdvIENSQikKKyAgKyBJbnRlbCBDaGllZiBSaXZlciBNb2JpbGU6IEl2eSBCcmlkZ2UgTW9iaWxlIHByb2Nlc3NvciwgUU03NyBQQ0ggKFBhbnRoZXIgUG9pbnQtTSksIChFbWVyYWxkIExha2UgSUkgQ1JCLCBTYWJpbm8gQ2FueW9uIENSQikKKyAgKyBJbnRlbCBIdXJvbiBSaXZlciBNb2JpbGU6IFNhbmR5IEJyaWRnZSBwcm9jZXNzb3IsIFFNNjcgUENIIChDb3VnYXIgUG9pbnQpLCAoRW1lcmFsZCBMYWtlIENSQiwgRVZPQyBFQzctMTgxN0xOQVIgYm9hcmQpCisgICsgSW50ZWwgQ2FscGVsbGEgUGxhdGZvcm06IENvcmUgaTcgcHJvY2Vzc29yLCBRTTU3IFBDSCAoSWJleCBQZWFrLU0pLCAoUmVkIEZvcnQgQ1JCLCBFbWVyc29uIE1BVFhNIENPUkUtNDExLUIpCisgICsgSW50ZWwgTmVoYWxlbS9XZXN0bWVyZS1FUCBTZXJ2ZXI6IFhlb24gNTZ4eC81NXh4IHByb2Nlc3NvcnMsIDU1MjAgY2hpcHNldCwgSUNIMTBSIElPSCAoODI4MDEpLCAoSGFubGFuIENyZWVrIENSQikKKyAgKyBJbnRlbCBOZWhhbGVtIFdvcmtzdGF0aW9uOiBYZW9uIDU2eHgvNTV4eCBwcm9jZXNzb3JzLCBTeXN0ZW0gU0M1NjUwU0NXUyAoR3JlZW5jaXR5IENSQikKKyAgKyBJbnRlbCBQaWNrZXQgUG9zdCBTZXJ2ZXI6IFhlb24gNTZ4eC81NXh4IHByb2Nlc3NvcnMgKEphc3BlciBGb3Jlc3QpLCAzNDIwIGNoaXBzZXQgKEliZXggUGVhayksIChPc2FnZSBDUkIpCisgICsgSW50ZWwgU3RvcmFnZSBQbGF0Zm9ybTogU2FuZHkgQnJpZGdlIFhlb24gcHJvY2Vzc29yLCBDNjAwIFBDSCAoUGF0c2J1cmcpLCAoT2FrIENyZWVrIENhbnlvbiBDUkIpCisgICsgSW50ZWwgU2hhcmsgQmF5IENsaWVudCBQbGF0Zm9ybTogSGFzd2VsbCBwcm9jZXNzb3IsIEx5bnhQb2ludCBQQ0gsIChXYWxudXQgQ2FueW9uIENSQiwgTGF2YSBDYW55b24gQ1JCLCBCYXNraW5nIFJpZGdlIENSQiwgRmxhdGhlYWQgQ3JlZWsgQ1JCKQorICArIEludGVsIFNoYXJrIEJheSBVbHRyYWJvb2sgUGxhdGZvcm06IEhhc3dlbGwgVUxUIHByb2Nlc3NvciwgTHlueCBQb2ludC1MUCBQQ0gsIChXaGl0ZVRpcCBNb3VudGFpbiAxIENSQikKKworSW50ZWwgQXRvbSBwbGF0Zm9ybXM6CisgICsgSW50ZWwgZW1iZWRkZWQgTWVubG93OiBJbnRlbCBBdG9tIFo1MTAvNTMwIENQVSwgU3lzdGVtIENvbnRyb2xsZXIgSHViIFVTMTVXIChQb3J0d2VsbCBOQU5PLTgwNDQpCisgICsgSW50ZWwgTHVuYSBQaWVyOiBJbnRlbCBBdG9tIE40eHgvRDV4eCBzZXJpZXMgQ1BVIChha2E6IFBpbmV2aWV3LUQgJiAtTSksIDgyODAxSE0gSS9PIEh1YiAoSUNIOE0pLCAoQWR2YW50ZWNoIEFJTUItMjEyLCBNb29uIENyZWVrIENSQikKKyAgKyBJbnRlbCBRdWVlbnMgQmF5IHBsYXRmb3JtOiBJbnRlbCBBdG9tIEU2eHggQ1BVIChha2E6IFR1bm5lbCBDcmVlayksIFRvcGNsaWZmIEVHMjBUIEkvTyBIdWIgKEVtZXJzb24gTklUWC0zMTUsIENyb3duIEJheSBDUkIsIE1pbm5vdyBCb2FyZCkKKyAgKyBJbnRlbCBGaXNoIFJpdmVyIElzbGFuZCBwbGF0Zm9ybTogSW50ZWwgQXRvbSBFNnh4IENQVSAoYWthOiBUdW5uZWwgQ3JlZWspLCBUb3BjbGlmZiBFRzIwVCBJL08gSHViIChLb250cm9uIEtNMk04MDYpCisgICsgSW50ZWwgQ2VkYXIgVHJhaWwgcGxhdGZvcm06IEludGVsIEF0b20gTjIwMDAgJiBEMjAwMCBzZXJpZXMgQ1BVIChha2E6IENlZGFydmlldyksIE5NMTAgRXhwcmVzcyBDaGlwc2V0IChOb3JjbyBraXQgQklTLTY2MzAsIENlZGFyIFJvY2sgQ1JCKQorCithbmQgaXMgbGlrZWx5IHRvIHdvcmsgb24gbWFueSB1bmxpc3RlZCBBdG9tL0NvcmUvWGVvbiBiYXNlZCBkZXZpY2VzLiBUaGUgTUFDSElORQordHlwZSBzdXBwb3J0cyBldGhlcm5ldCwgd2lmaSwgc291bmQsIGFuZCBJbnRlbC92ZXNhIGdyYXBoaWNzIGJ5IGRlZmF1bHQgaW4KK2FkZGl0aW9uIHRvIGNvbW1vbiBQQyBpbnB1dCBkZXZpY2VzLCBidXNzZXMsIGFuZCBzbyBvbi4KKworRGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UsIGl0IGNhbiBib290IGZyb20gYSB0cmFkaXRpb25hbCBoYXJkLWRpc2ssIGEgVVNCIGRldmljZSwKK29yIG92ZXIgdGhlIG5ldHdvcmsuIFdyaXRpbmcgZ2VuZXJhdGVkIGltYWdlcyB0byBwaHlzaWNhbCBtZWRpYSBpcworc3RyYWlnaHRmb3J3YXJkIHdpdGggYSBjYXZlYXQgZm9yIFVTQiBkZXZpY2VzLiBUaGUgZm9sbG93aW5nIGV4YW1wbGVzIGFzc3VtZSB0aGUKK3RhcmdldCBib290IGRldmljZSBpcyAvZGV2L3NkYiwgYmUgc3VyZSB0byB2ZXJpZnkgdGhpcyBhbmQgdXNlIHRoZSBjb3JyZWN0CitkZXZpY2UgYXMgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBhcmUgcnVuIGFzIHJvb3QgYW5kIGFyZSBub3QgcmV2ZXJzYWJsZS4KKworVVNCIERldmljZToKKyAgMS4gQnVpbGQgYSBsaXZlIGltYWdlLiBUaGlzIGltYWdlIHR5cGUgY29uc2lzdHMgb2YgYSBzaW1wbGUgZmlsZXN5c3RlbQorICAgICB3aXRob3V0IGEgcGFydGl0aW9uIHRhYmxlLCB3aGljaCBpcyBzdWl0YWJsZSBmb3IgVVNCIGtleXMsIGFuZCB3aXRoIHRoZQorICAgICBkZWZhdWx0IHNldHVwIGZvciB0aGUgZ2VuZXJpY3g4NiBtYWNoaW5lLCB0aGlzIGltYWdlIHR5cGUgaXMgYnVpbHQKKyAgICAgYXV0b21hdGljYWxseSBmb3IgYW55IGltYWdlIHlvdSBidWlsZC4gRm9yIGV4YW1wbGU6CisKKyAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2UtbWluaW1hbAorCisgIDIuIFVzZSB0aGUgImRkIiB1dGlsaXR5IHRvIHdyaXRlIHRoZSBpbWFnZSB0byB0aGUgcmF3IGJsb2NrIGRldmljZS4gRm9yCisgICAgIGV4YW1wbGU6CisKKyAgICAgIyBkZCBpZj1jb3JlLWltYWdlLW1pbmltYWwtZ2VuZXJpY3g4Ni5oZGRpbWcgb2Y9L2Rldi9zZGIKKworICBJZiB0aGUgZGV2aWNlIGZhaWxzIHRvIGJvb3Qgd2l0aCAiQm9vdCBlcnJvciIgZGlzcGxheWVkLCBvciBhcHBhcmVudGx5CisgIHN0b3BzIGp1c3QgYWZ0ZXIgdGhlIFNZU0xJTlVYIHZlcnNpb24gYmFubmVyLCBpdCBpcyBsaWtlbHkgdGhlIEJJT1MgY2Fubm90CisgIHVuZGVyc3RhbmQgdGhlIHBoeXNpY2FsIGxheW91dCBvZiB0aGUgZGlzayAob3IgcmF0aGVyIGl0IGV4cGVjdHMgYQorICBwYXJ0aWN1bGFyIGxheW91dCBhbmQgY2Fubm90IGhhbmRsZSBhbnl0aGluZyBlbHNlKS4gVGhlcmUgYXJlIHR3byBwb3NzaWJsZQorICBzb2x1dGlvbnMgdG8gdGhpcyBwcm9ibGVtOgorCisgIDEuIENoYW5nZSB0aGUgQklPUyBVU0IgRGV2aWNlIHNldHRpbmcgdG8gSEREIG1vZGUuIFRoZSBsYWJlbCB3aWxsIHZhcnkgYnkKKyAgICAgZGV2aWNlLCBidXQgdGhlIGlkZWEgaXMgdG8gZm9yY2UgQklPUyB0byByZWFkIHRoZSBDeWxpbmRlci9IZWFkL1NlY3RvcgorICAgICBnZW9tZXRyeSBmcm9tIHRoZSBkZXZpY2UuCisKKyAgMi4gV2l0aG91dCBzdWNoIGFuIG9wdGlvbiwgdGhlIEJJT1MgZ2VuZXJhbGx5IGJvb3RzIHRoZSBkZXZpY2UgaW4gVVNCLVpJUAorICAgICBtb2RlLiBUbyB3cml0ZSBhbiBpbWFnZSB0byBhIFVTQiBkZXZpY2UgdGhhdCB3aWxsIGJlIGJvb3RhYmxlIGluCisgICAgIFVTQi1aSVAgbW9kZSwgY2Fycnkgb3V0IHRoZSBmb2xsb3dpbmcgYWN0aW9uczoKKworICAgICBhLiBEZXRlcm1pbmUgdGhlIGdlb21ldHJ5IG9mIHlvdXIgVVNCIGRldmljZSB1c2luZyBmZGlzazoKKworICAgICAjIGZkaXNrIC9kZXYvc2RiCisgICAgIENvbW1hbmQgKG0gZm9yIGhlbHApOiBwCisKKyAgICAgRGlzayAvZGV2L3NkYjogNDAxMSBNQiwgNDAxMTQ5MTMyOCBieXRlcworICAgICAxMjQgaGVhZHMsIDYyIHNlY3RvcnMvdHJhY2ssIDEwMTkgY3lsaW5kZXJzLCB0b3RhbCA3ODM0OTQ0IHNlY3RvcnMKKyAgICAgLi4uCisKKyAgICAgQ29tbWFuZCAobSBmb3IgaGVscCk6IHEKKworICAgICBiLiBDb25maWd1cmUgdGhlIFVTQiBkZXZpY2UgZm9yIFVTQi1aSVAgbW9kZToKKyAgICAgCisgICAgICMgbWtkaXNraW1hZ2UgLTQgL2Rldi9zZGIgMTAxOSAxMjQgNjIKKworICAgICBXaGVyZSAxMDE5LCAxMjQgYW5kIDYyIGFyZSB0aGUgY3lsaW5kZXIsIGhlYWQgYW5kIHNlY3RvcnMvdHJhY2sgY291bnRzCisgICAgIGFzIHJlcG9ydGVkIGJ5IGZkaXNrIChzdWJzdGl0dXRlIHRoZSB2YWx1ZXMgcmVwb3J0ZWQgZm9yIHlvdXIgZGV2aWNlKS4KKyAgICAgV2hlbiB0aGUgb3BlcmF0aW9uIGhhcyBmaW5pc2hlZCBhbmQgdGhlIGFjY2VzcyBMRUQgKGlmIGFueSkgb24gdGhlCisgICAgIGRldmljZSBzdG9wcyBmbGFzaGluZywgcmVtb3ZlIGFuZCByZWluc2VydCB0aGUgZGV2aWNlIHRvIGFsbG93IHRoZQorICAgICBrZXJuZWwgdG8gZGV0ZWN0IHRoZSBuZXcgcGFydGl0aW9uIGxheW91dC4KKworICAgICBjLiBDb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgaW1hZ2UgdG8gdGhlIFVTQi1aSVAgbW9kZSBkZXZpY2U6CisKKyAgICAgIyBta2RpciAvdG1wL2ltYWdlCisgICAgICMgbWtkaXIgL3RtcC91c2JrZXkKKyAgICAgIyBtb3VudCAtbyBsb29wIGNvcmUtaW1hZ2UtbWluaW1hbC1nZW5lcmljeDg2LmhkZGltZyAgL3RtcC9pbWFnZQorICAgICAjIG1vdW50IC9kZXYvc2RiNCAvdG1wL3VzYmtleQorICAgICAjIGNwIC1yZiAvdG1wL2ltYWdlLyogL3RtcC91c2JrZXkKKworICAgICBkLiBJbnN0YWxsIHRoZSBzeXNsaW51eCBib290IGxvYWRlcjoKKworICAgICAjIHN5c2xpbnV4IC9kZXYvc2RiNAorCisgICAgIGUuIFVubW91bnQgZXZlcnl0aGluZzoKKworICAgICAjIHVtb3VudCAvdG1wL2ltYWdlCisgICAgICMgdW1vdW50IC90bXAvdXNia2V5CisKKyAgSW5zdGFsbCB0aGUgYm9vdCBkZXZpY2UgaW4gdGhlIHRhcmdldCBib2FyZCBhbmQgY29uZmlndXJlIHRoZSBCSU9TIHRvIGJvb3QKKyAgZnJvbSBpdC4KKworICBGb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBVU0ItWklQIHNjZW5hcmlvLCBzZWUgdGhlIHN5c2xpbnV4IGRvY3VtZW50YXRpb246CisgIGh0dHA6Ly9naXQua2VybmVsLm9yZy8/cD1ib290L3N5c2xpbnV4L3N5c2xpbnV4LmdpdDthPWJsb2JfcGxhaW47Zj1kb2MvdXNia2V5LnR4dDtoYj1IRUFECisKKworVGV4YXMgSW5zdHJ1bWVudHMgQmVhZ2xlYm9uZSAoYmVhZ2xlYm9uZSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBCZWFnbGVib25lIGlzIGFuIEFSTSBDb3J0ZXgtQTggZGV2ZWxvcG1lbnQgYm9hcmQgd2l0aCBVU0IsIEV0aGVybmV0LCAyRC8zRAorYWNjZWxlcmF0ZWQgZ3JhcGhpY3MsIGF1ZGlvLCBzZXJpYWwsIEpUQUcsIGFuZCBTRC9NTUMuIFRoZSBCbGFjayBhZGRzIGEgZmFzdGVyCitDUFUsIG1vcmUgUkFNLCBlTU1DIGZsYXNoIGFuZCBhIG1pY3JvIEhETUkgcG9ydC4gVGhlIGJlYWdsZWJvbmUgTUFDSElORSBpcwordGVzdGVkIG9uIHRoZSBmb2xsb3dpbmcgcGxhdGZvcm1zOgorCisgIG8gQmVhZ2xlYm9uZSBCbGFjayBBNgorICBvIEJlYWdsZWJvbmUgQTYgKHRoZSBvcmlnaW5hbCAiV2hpdGUiIG1vZGVsKQorCitUaGUgQmVhZ2xlYm9uZSBCbGFjayBoYXMgZU1NQywgd2hpbGUgdGhlIFdoaXRlIGRvZXMgbm90LiBQcmVzc2luZyB0aGUgVVNFUi9CT09UCitidXR0b24gd2hlbiBwb3dlcmluZyBvbiB3aWxsIHRlbXBvcmFyaWx5IGNoYW5nZSB0aGUgYm9vdCBvcmRlci4gQnV0IGZvciB0aGUgc2FrZQorb2Ygc2ltcGxpY2l0eSwgdGhlc2UgaW5zdHJ1Y3Rpb25zIGFzc3VtZSB5b3UgaGF2ZSBlcmFzZWQgdGhlIGVNTUMgb24gdGhlIEJsYWNrLAorc28gaXRzIGJvb3QgYmVoYXZpb3IgbWF0Y2hlcyB0aGF0IG9mIHRoZSBXaGl0ZSBhbmQgYm9vdHMgb2ZmIG9mIFNEIGNhcmQuIFRvIGRvCit0aGlzLCBpc3N1ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGZyb20gdGhlIHUtYm9vdCBwcm9tcHQ6CisKKyAgICAjIG1tYyBkZXYgMQorICAgICMgbW1jIGVyYXNlIDAgNTEyCisKK1RvIGZ1cnRoZXIgdGFpbG9yIHRoZXNlIGluc3RydWN0aW9ucyBmb3IgeW91ciBib2FyZCwgcGxlYXNlIHJlZmVyIHRvIHRoZQorZG9jdW1lbnRhdGlvbiBhdCBodHRwOi8vd3d3LmJlYWdsZWJvYXJkLm9yZy9ib25lIGFuZCBodHRwOi8vd3d3LmJlYWdsZWJvYXJkLm9yZy9ibGFjaworCitGcm9tIGEgTGludXggc3lzdGVtIHdpdGggYWNjZXNzIHRvIHRoZSBpbWFnZSBmaWxlcyBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3RlcHMKK2FzIHJvb3QsIHJlcGxhY2luZyBtbWNibGswKiB3aXRoIHRoZSBTRCBjYXJkIGRldmljZSBvbiB5b3VyIG1hY2hpbmUgKHN1Y2ggYXMgc2RjCitpZiB1c2VkIHZpYSBhIHVzYiBjYXJkIHJlYWRlcik6CisKKyAgMS4gUGFydGl0aW9uIGFuZCBmb3JtYXQgYW4gU0QgY2FyZDoKKyAgICAgIyBmZGlzayAtbHUgL2Rldi9tbWNibGswCisKKyAgICAgRGlzayAvZGV2L21tY2JsazA6IDM5NTEgTUIsIDM5NTEwMzQzNjggYnl0ZXMKKyAgICAgMjU1IGhlYWRzLCA2MyBzZWN0b3JzL3RyYWNrLCA0ODAgY3lsaW5kZXJzLCB0b3RhbCA3NzE2ODY0IHNlY3RvcnMKKyAgICAgVW5pdHMgPSBzZWN0b3JzIG9mIDEgKiA1MTIgPSA1MTIgYnl0ZXMKKworICAgICAgICAgICAgIERldmljZSBCb290ICAgICAgU3RhcnQgICAgICAgICBFbmQgICAgICBCbG9ja3MgIElkIFN5c3RlbQorICAgICAvZGV2L21tY2JsazBwMSAgICogICAgICAgICAgNjMgICAgICAxNDQ1ODQgICAgICAgNzIyNjEgICBjIFdpbjk1IEZBVDMyIChMQkEpCisgICAgIC9kZXYvbW1jYmxrMHAyICAgICAgICAgIDE0NDU4NSAgICAgIDQ2NTg4NCAgICAgIDE2MDY1MCAgODMgTGludXgKKworICAgICAjIG1rZnMudmZhdCAtRiAxNiAtbiAiYm9vdCIgL2Rldi9tbWNibGswcDEKKyAgICAgIyBta2UyZnMgLWogLUwgInJvb3QiIC9kZXYvbW1jYmxrMHAyCisKKyAgVGhlIGZvbGxvd2luZyBhc3N1bWVzIHRoZSBTRCBjYXJkIHBhcnRpdGlvbnMgMSBhbmQgMiBhcmUgbW91bnRlZCBhdAorICAvbWVkaWEvYm9vdCBhbmQgL21lZGlhL3Jvb3QgcmVzcGVjdGl2ZWx5LiBSZW1vdmluZyB0aGUgY2FyZCBhbmQgcmVpbnNlcnRpbmcKKyAgaXQgd2lsbCBkbyBqdXN0IHRoYXQgb24gbW9zdCBtb2Rlcm4gTGludXggZGVza3RvcCBlbnZpcm9ubWVudHMuCisKKyAgVGhlIGZpbGVzIHJlZmVyZW5jZWQgYmVsb3cgYXJlIG1hZGUgYXZhaWxhYmxlIGFmdGVyIHRoZSBidWlsZCBpbgorICBidWlsZC90bXAvZGVwbG95L2ltYWdlcy4KKworICAyLiBJbnN0YWxsIHRoZSBib290IGxvYWRlcnMKKyAgICAgIyBjcCBNTE8tYmVhZ2xlYm9uZSAvbWVkaWEvYm9vdC9NTE8KKyAgICAgIyBjcCB1LWJvb3QtYmVhZ2xlYm9uZS5pbWcgL21lZGlhL2Jvb3QvdS1ib290LmltZworCisgIDMuIEluc3RhbGwgdGhlIHJvb3QgZmlsZXN5c3RlbQorICAgICAjIHRhciB4IC1DIC9tZWRpYS9yb290IC1mIGNvcmUtaW1hZ2UtJElNQUdFX1RZUEUtYmVhZ2xlYm9uZS50YXIuYnoyCisKKyAgNC4gSWYgdXNpbmcgY29yZS1pbWFnZS1iYXNlIG9yIGNvcmUtaW1hZ2Utc2F0byBpbWFnZXMsIHRoZSBTRCBjYXJkIGlzIHJlYWR5CisgICAgIGFuZCByb290ZnMgYWxyZWFkeSBjb250YWlucyB0aGUga2VybmVsLCBtb2R1bGVzIGFuZCBkZXZpY2UgdHJlZSAoRFRCKQorICAgICBmaWxlcyBuZWNlc3NhcnkgdG8gYmUgYm9vdGVkIHdpdGggVS1ib290J3MgZGVmYXVsdCBjb25maWd1cmF0aW9uLCBzbworICAgICBza2lwIGRpcmVjdGx5IHRvIHN0ZXAgOC4KKyAgICAgRm9yIGNvcmUtaW1hZ2UtbWluaW1hbCwgcHJvY2VlZCB0aHJvdWdoIG5leHQgc3RlcHMuCisKKyAgNS4gSWYgdXNpbmcgY29yZS1pbWFnZS1taW5pbWFsIHJvb3RmcywgaW5zdGFsbCB0aGUgbW9kdWxlcworICAgICAjIHRhciB4IC1DIC9tZWRpYS9yb290IC1mIG1vZHVsZXMtYmVhZ2xlYm9uZS50Z3oKKworICA2LiBJZiB1c2luZyBjb3JlLWltYWdlLW1pbmltYWwgcm9vdGZzLCBpbnN0YWxsIHRoZSBrZXJuZWwgekltYWdlIGludG8gL2Jvb3QKKyAgICAgZGlyZWN0b3J5IG9mIHJvb3RmcworICAgICAjIGNwIHpJbWFnZS1iZWFnbGVib25lLmJpbiAvbWVkaWEvcm9vdC9ib290L3pJbWFnZQorCisgIDcuIElmIHVzaW5nIGNvcmUtaW1hZ2UtbWluaW1hbCByb290ZnMsIGFsc28gaW5zdGFsbCBkZXZpY2UgdHJlZSAoRFRCKSBmaWxlcworICAgICBpbnRvIC9ib290IGRpcmVjdG9yeSBvZiByb290ZnMKKyAgICAgIyBjcCB6SW1hZ2UtYW0zMzV4LWJvbmUuZHRiIC9tZWRpYS9yb290L2Jvb3QvYW0zMzV4LWJvbmUuZHRiCisgICAgICMgY3AgekltYWdlLWFtMzM1eC1ib25lYmxhY2suZHRiIC9tZWRpYS9yb290L2Jvb3QvYW0zMzV4LWJvbmVibGFjay5kdGIKKworICA4LiBVbm1vdW50IHRoZSBTRCBwYXJ0aXRpb25zLCBpbnNlcnQgdGhlIFNEIGNhcmQgaW50byB0aGUgQmVhZ2xlYm9uZSwgYW5kCisgICAgIGJvb3QgdGhlIEJlYWdsZWJvbmUKKworCitGcmVlc2NhbGUgTVBDODMxNUUtUkRCIChtcGM4MzE1ZS1yZGIpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBNUEM4MzE1IFBvd2VyUEMgcmVmZXJlbmNlIHBsYXRmb3JtIChNUEM4MzE1RS1SREIpIGlzIGFpbWVkIGF0IGhhcmR3YXJlIGFuZAorc29mdHdhcmUgZGV2ZWxvcG1lbnQgb2YgbmV0d29yayBhdHRhY2hlZCBzdG9yYWdlIChOQVMpIGFuZCBkaWdpdGFsIG1lZGlhIHNlcnZlcgorYXBwbGljYXRpb25zLiBUaGUgTVBDODMxNUUtUkRCIGZlYXR1cmVzIHRoZSBQb3dlclFVSUNDIElJIFBybyBwcm9jZXNzb3IsIHdoaWNoCitpbmNsdWRlcyBhIGJ1aWx0LWluIHNlY3VyaXR5IGFjY2VsZXJhdG9yLgorCisoTm90ZTogeW91IG1heSBmaW5kIGl0IGVhc2llciB0byBvcmRlciBNUEM4MzE1RS1SREJBOyB0aGlzIGFwcGVhcnMgdG8gYmUgdGhlCitzYW1lIGJvYXJkIGluIGFuIGVuY2xvc3VyZSB3aXRoIGFjY2Vzc29yaWVzLiBJbiBhbnkgY2FzZSBpdCBpcyBmdWxseQorY29tcGF0aWJsZSB3aXRoIHRoZSBpbnN0cnVjdGlvbnMgZ2l2ZW4gaGVyZS4pCisKK1NldHVwIGluc3RydWN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSB3aWxsIG5lZWQgdGhlIGZvbGxvd2luZzoKKyogTkZTIHJvb3Qgc2V0dXAgb24geW91ciB3b3Jrc3RhdGlvbgorKiBURlRQIHNlcnZlciBpbnN0YWxsZWQgb24geW91ciB3b3Jrc3RhdGlvbgorKiBTdHJhaWdodC10aHJ1IDktY29uZHVjdG9yIHNlcmlhbCBjYWJsZSAoREI5LCBNL0YpIGNvbm5lY3RlZCBmcm9tIHlvdXIgCisgIFBDIHRvIFVBUlQxCisqIEV0aGVybmV0IGNvbm5lY3RlZCB0byB0aGUgZmlyc3QgZXRoZXJuZXQgcG9ydCBvbiB0aGUgYm9hcmQKKworLS0tIFByZXBhcmF0aW9uIC0tLQorCitOb3RlOiBpZiB5b3UgaGF2ZSBhbHRlcmVkIHlvdXIgYm9hcmQncyBldGhlcm5ldCBNQUMgYWRkcmVzcyhlcykgZnJvbSB0aGUKK2RlZmF1bHRzLCBvciB5b3UgbmVlZCB0byBkbyBzbyBiZWNhdXNlIHlvdSB3YW50IG11bHRpcGxlIGJvYXJkcyBvbiB0aGUgc2FtZQorbmV0d29yaywgdGhlbiB5b3Ugd2lsbCBuZWVkIHRvIGNoYW5nZSB0aGUgdmFsdWVzIGluIHRoZSBkdHMgZmlsZSAocGF0Y2gKK2xpbnV4L2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzE1ZXJkYi5kdHMgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlKS4gSWYKK3lvdSBoYXZlIGxlZnQgdGhlbSBhdCB0aGUgZmFjdG9yeSBkZWZhdWx0IHRoZW4geW91IHNob3VsZG4ndCBuZWVkIHRvIGRvCithbnl0aGluZyBoZXJlLgorCistLS0gQm9vdGluZyBmcm9tIE5GUyByb290IC0tLQorCitMb2FkIHRoZSBrZXJuZWwgYW5kIGR0YiAoZGV2aWNlIHRyZWUgYmxvYiksIGFuZCBib290IHRoZSBzeXN0ZW0gYXMgZm9sbG93czoKKworIDEuIEdldCB0aGUga2VybmVsICh1SW1hZ2UtbXBjODMxNWUtcmRiLmJpbikgYW5kIGR0YiAodUltYWdlLW1wYzgzMTVlLXJkYi5kdGIpCisgICAgZmlsZXMgZnJvbSB0aGUgdG1wL2RlcGxveSBkaXJlY3RvcnksIGFuZCBtYWtlIHRoZW0gYXZhaWxhYmxlIG9uIHlvdXIgVEZUUAorICAgIHNlcnZlci4KKworIDIuIENvbm5lY3QgdGhlIGJvYXJkJ3MgZmlyc3Qgc2VyaWFsIHBvcnQgdG8geW91ciB3b3Jrc3RhdGlvbiBhbmQgdGhlbiBzdGFydCB1cAorICAgIHlvdXIgZmF2b3VyaXRlIHNlcmlhbCB0ZXJtaW5hbCBzbyB0aGF0IHlvdSB3aWxsIGJlIGFibGUgdG8gaW50ZXJhY3Qgd2l0aAorICAgIHRoZSBzZXJpYWwgY29uc29sZS4gSWYgeW91IGRvbid0IGhhdmUgYSBmYXZvdXJpdGUsIHBpY29jb20gaXMgc3VnZ2VzdGVkOgorCisgICQgcGljb2NvbSAvZGV2L3R0eVVTQjAgLWIgMTE1MjAwCisKKyAzLiBQb3dlciB1cCBvciByZXNldCB0aGUgYm9hcmQgYW5kIHByZXNzIGEga2V5IG9uIHRoZSB0ZXJtaW5hbCB3aGVuIHByb21wdGVkCisgICAgdG8gZ2V0IHRvIHRoZSBVLUJvb3QgY29tbWFuZCBsaW5lCisKKyA0LiBTZXQgdXAgdGhlIGVudmlyb25tZW50IGluIFUtQm9vdDoKKworID0+IHNldGVudiBpcGFkZHIgPGJvYXJkIGlwPgorID0+IHNldGVudiBzZXJ2ZXJpcCA8dGZ0cCBzZXJ2ZXIgaXA+CisgPT4gc2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD08bmZzcm9vdCBpcD46PHJvb3RmcyBwYXRoPiBpcD08Ym9hcmQgaXA+OjxzZXJ2ZXIgaXA+OjxnYXRld2F5IGlwPjoyNTUuMjU1LjI1NS4wOm1wYzgzMTVlOmV0aDA6b2ZmIGNvbnNvbGU9dHR5UzAsMTE1MjAwCisKKyA1LiBEb3dubG9hZCB0aGUga2VybmVsIGFuZCBkdGIsIGFuZCBib290OgorCisgPT4gdGZ0cCAxMDAwMDAwIHVJbWFnZS1tcGM4MzE1ZS1yZGIuYmluCisgPT4gdGZ0cCAyMDAwMDAwIHVJbWFnZS1tcGM4MzE1ZS1yZGIuZHRiCisgPT4gYm9vdG0gMTAwMDAwMCAtIDIwMDAwMDAKKworLS0tIEJvb3RpbmcgZnJvbSBKRkZTMiByb290IC0tLQorCisgMS4gRmlyc3QgYm9vdCB0aGUgYm9hcmQgd2l0aCBORlMgcm9vdC4KKworIDIuIEVyYXNlIHRoZSBNVEQgcGFydGl0aW9uIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyByb290OgorCisgICAgJCBmbGFzaF9lcmFzZWFsbCAgL2Rldi9tdGQzCisKKyAzLiBDb3B5IHRoZSBKRkZTMiBpbWFnZSB0byB0aGUgTVREIHBhcnRpdGlvbjoKKworICAgICQgZmxhc2hjcCBjb3JlLWltYWdlLW1pbmltYWwtbXBjODMxNWUtcmRiLmpmZnMyIC9kZXYvbXRkMworCisgNC4gVGhlbiByZWJvb3QgdGhlIGJvYXJkIGFuZCBzZXQgdXAgdGhlIGVudmlyb25tZW50IGluIFUtQm9vdDoKKworICAgID0+IHNldGVudiBib290YXJncyByb290PS9kZXYvbXRkYmxvY2szIHJvb3Rmc3R5cGU9amZmczIgY29uc29sZT10dHlTMCwxMTUyMDAKKworCitVYmlxdWl0aSBOZXR3b3JrcyBFZGdlUm91dGVyIExpdGUgKGVkZ2Vyb3V0ZXIpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBFZGdlUm91dGVyIExpdGUgaXMgcGFydCBvZiB0aGUgRWRnZU1heCBzZXJpZXMuIEl0IGlzIGEgTUlQUzY0IHJvdXRlcgorKGJhc2VkIG9uIHRoZSBDYXZpdW0gT2N0ZW9uIHByb2Nlc3Nvcikgd2l0aCA1MTJNQiBvZiBSQU0sIHdoaWNoIHVzZXMgYW4KK2ludGVybmFsIFVTQiBwZW5kcml2ZSBmb3Igc3RvcmFnZS4KKworU2V0dXAgaW5zdHJ1Y3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IHdpbGwgbmVlZCB0aGUgZm9sbG93aW5nOgorKiBSSjQ1IC0+IHNlcmlhbCAoInJvbGxvdmVyIikgY2FibGUgY29ubmVjdGVkIGZyb20geW91ciBQQyB0byB0aGUgQ09OU09MRQorICBwb3J0IG9uIHRoZSBkZXZpY2UKKyogRXRoZXJuZXQgY29ubmVjdGVkIHRvIHRoZSBmaXJzdCBldGhlcm5ldCBwb3J0IG9uIHRoZSBib2FyZAorCitJZiB1c2luZyBORlMgYXMgcGFydCBvZiB0aGUgc2V0dXAgcHJvY2VzcywgeW91IHdpbGwgYWxzbyBuZWVkOgorKiBORlMgcm9vdCBzZXR1cCBvbiB5b3VyIHdvcmtzdGF0aW9uCisqIFRGVFAgc2VydmVyIGluc3RhbGxlZCBvbiB5b3VyIHdvcmtzdGF0aW9uIChpZiBmZXRjaGluZyB0aGUga2VybmVsIGZyb20KKyAgVEZUUCwgc2VlIGJlbG93KS4KKworLS0tIFByZXBhcmF0aW9uIC0tLQorCitCdWlsZCBhbiBpbWFnZSAoZS5nLiBjb3JlLWltYWdlLW1pbmltYWwpIHVzaW5nICJlZGdlcm91dGVyIiBhcyB0aGUgTUFDSElORS4KK0luIHRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gaXQgaXMgYmFzZWQgb24gY29yZS1pbWFnZS1taW5pbWFsLiBBbm90aGVyIHRhcmdldAorbWF5IGJlIHNpbWlsaWFyIHdpdGggaXQuCisKKy0tLSBCb290aW5nIGZyb20gTkZTIHJvb3QgLyBrZXJuZWwgdmlhIFRGVFAgLS0tCisKK0xvYWQgdGhlIGtlcm5lbCwgYW5kIGJvb3QgdGhlIHN5c3RlbSBhcyBmb2xsb3dzOgorCisgMS4gR2V0IHRoZSBrZXJuZWwgKHZtbGludXgpIGZpbGUgZnJvbSB0aGUgdG1wL2RlcGxveS9pbWFnZXMvZWRnZXJvdXRlcgorICAgIGRpcmVjdG9yeSwgYW5kIG1ha2UgdGhlbSBhdmFpbGFibGUgb24geW91ciBURlRQIHNlcnZlci4KKworIDIuIENvbm5lY3QgdGhlIGJvYXJkJ3MgZmlyc3Qgc2VyaWFsIHBvcnQgdG8geW91ciB3b3Jrc3RhdGlvbiBhbmQgdGhlbiBzdGFydCB1cAorICAgIHlvdXIgZmF2b3VyaXRlIHNlcmlhbCB0ZXJtaW5hbCBzbyB0aGF0IHlvdSB3aWxsIGJlIGFibGUgdG8gaW50ZXJhY3Qgd2l0aAorICAgIHRoZSBzZXJpYWwgY29uc29sZS4gSWYgeW91IGRvbid0IGhhdmUgYSBmYXZvdXJpdGUsIHBpY29jb20gaXMgc3VnZ2VzdGVkOgorCisgICQgcGljb2NvbSAvZGV2L3R0eVMwIC1iIDExNTIwMAorCisgMy4gUG93ZXIgdXAgb3IgcmVzZXQgdGhlIGJvYXJkIGFuZCBwcmVzcyBhIGtleSBvbiB0aGUgdGVybWluYWwgd2hlbiBwcm9tcHRlZAorICAgIHRvIGdldCB0byB0aGUgVS1Cb290IGNvbW1hbmQgbGluZQorCisgNC4gU2V0IHVwIHRoZSBlbnZpcm9ubWVudCBpbiBVLUJvb3Q6CisKKyA9PiBzZXRlbnYgaXBhZGRyIDxib2FyZCBpcD4KKyA9PiBzZXRlbnYgc2VydmVyaXAgPHRmdHAgc2VydmVyIGlwPgorCisgNS4gRG93bmxvYWQgdGhlIGtlcm5lbCBhbmQgYm9vdDoKKworID0+IHRmdHAgdGZ0cCAkbG9hZGFkZHIgdm1saW51eAorID0+IGJvb3RvY3RsaW51eCAkbG9hZGFkZHIgY29yZW1hc2s9MHgzIHJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD08bmZzcm9vdCBpcD46PHJvb3RmcyBwYXRoPiBpcD08Ym9hcmQgaXA+OjxzZXJ2ZXIgaXA+OjxnYXRld2F5IGlwPjo8bmV0bWFzaz46ZWRnZXJvdXRlcjpldGgwOm9mZiBtdGRwYXJ0cz1waHlzX21hcHBlZF9mbGFzaDo1MTJrKGJvb3QwKSw1MTJrKGJvb3QxKSw2NGtAMzA3MmsoZWVwcm9tKQorCistLS0gQm9vdGluZyBmcm9tIFVTQiByb290IC0tLQorCitUbyBib290IGZyb20gdGhlIFVTQiBkaXNrLCB5b3UgZWl0aGVyIG5lZWQgdG8gcmVtb3ZlIGl0IGZyb20gdGhlIGVkZ2Vyb3V0ZXIKK2JveCBhbmQgcG9wdWxhdGUgaXQgZnJvbSBhbm90aGVyIGNvbXB1dGVyLCBvciB1c2UgYSBwcmV2aW91c2x5IGJvb3RlZCBORlMKK2ltYWdlIGFuZCBwb3B1bGF0ZSBmcm9tIHRoZSBlZGdlcm91dGVyIGl0c2VsZi4KKworVHlwZSAxOiBNb3VudGVkIFVTQiBkaXNrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gYm9vdCBmcm9tIHRoZSBVU0IgZGlzayB0aGVyZSBhcmUgdHdvIGF2YWlsYWJsZSBwYXJ0aXRpb25zIG9uIHRoZSBmYWN0b3J5CitVU0Igc3RvcmFnZS4gVGhlIHJlc3Qgb2YgdGhpcyBndWlkZSBhc3N1bWVzIHRoYXQgdGhlc2UgcGFydGl0aW9ucyBhcmUgbGVmdAoraW50YWN0LiBJZiB5b3UgY2hhbmdlIHRoZSBwYXJ0aXRpb24gc2NoZW1lLCB5b3UgbXVzdCB1cGRhdGUgeW91ciBib290IG1ldGhvZAorYXBwcm9wcmlhdGVseS4KKworVGhlIHN0YW5kYXJkIHBhcnRpdGlvbnMgYXJlOgorCisgIC0gMTogdmZhdCBwYXJ0aXRpb24gY29udGFpbmluZyBmYWN0b3J5IGtlcm5lbHMKKyAgLSAyOiBleHQzIHBhcnRpdGlvbiBmb3IgdGhlIHJvb3QgZmlsZXN5c3RlbS4KKworWW91IGNhbiBwbGFjZSB0aGUga2VybmVsIG9uIGVpdGhlciBwYXJ0aXRpb24gMSwgb3IgcGFydGl0aW9uIDIsIGJ1dCB0aGUgcm9vZnMKK211c3QgZ28gb24gcGFydGl0aW9uIDIgKGR1ZSB0byBpdHMgc2l6ZSkuCisKK05vdGU6IElmIHlvdSBwbGFjZSB0aGUga2VybmVsIG9uIHRoZSBleHQzIHBhcnRpdGlvbiwgeW91IG11c3QgcmUtY3JlYXRlIHRoZQorICAgICAgZXh0MyBmaWxlc3lzdGVtLCBzaW5jZSB0aGUgZmFjdG9yeSB1LWJvb3QgY2FuIG9ubHkgaGFuZGxlIDEyOCBieXRlIGlub2RlcyBhbmQKKyAgICAgIGNhbm5vdCByZWFkIHRoZSBwYXJ0aXRpb24gb3RoZXJ3aXNlLgorCitTdGVwczoKKworIDEuIFJlbW92ZSB0aGUgVVNCIGRpc2sgZnJvbSB0aGUgZWRnZXJvdXRlciBhbmQgaW5zZXJ0IGl0IGludG8gYSBjb21wdXRlcgorICAgIHRoYXQgaGFzIGFjY2VzcyB0byB5b3VyIGJ1aWxkIGFydGlmYWN0cy4KKworIDIuIENvcHkgdGhlIGtlcm5lbCBpbWFnZSB0byB0aGUgVVNCIHN0b3JhZ2UgKGFzc3VtaW5nIGRpc2NvdmVyZWQgYXMgJ3NkYicgb24KKyAgICB0aGUgZGV2ZWxvcG1lbnQgbWFjaGluZSk6CisKKyAgICAyYSkgaWYgYm9vdGluZyBmcm9tIHZmYXQKKyAKKyAgICAgICAgIyBtb3VudCAvZGV2L3NkYjEgL21udAorICAgICAgICAjIGNwIHRtcC9kZXBsb3kvaW1hZ2VzL2VkZ2Vyb3V0ZXIvdm1saW51eCAvbW50CisgICAgICAgICMgdW1vdW50IC9tbnQKKworICAgIDJiKSBpZiBib290aW5nIGZyb20gZXh0MworCisgICAgICAgICMgbWtmcy5leHQzIC1JIDEyOCAvZGV2L3NkYjIKKyAgICAgICAgIyBtb3VudCAvZGV2L3NkYjIgL21udAorICAgICAgICAjIG1rZGlyIC9tbnQvYm9vdAorICAgICAgICAjIGNwIHRtcC9kZXBsb3kvaW1hZ2VzL2VkZ2Vyb3V0ZXIvdm1saW51eCAvbW50L2Jvb3QKKyAgICAgICAgIyB1bW91bnQgL21udAorCisgMy4gRXh0cmFjdCB0aGUgcm9vdGZzIHRvIHRoZSBVU0Igc3RvcmFnZSBleHQzIHBhcnRpdGlvbgorCisgICAgICAgICMgbW91bnQgL2Rldi9zZGIyIC9tbnQKKyAgICAgICAgIyB0YXIgLXh2anBmIGNvcmUtaW1hZ2UtbWluaW1hbC1YWFgudGFyLmJ6MiAtQyAvbW50CisgICAgICAgICMgdW1vdW50IC9tbnQKKworIDQuIFJlYm9vdCB0aGUgYm9hcmQgYW5kIHByZXNzIGEga2V5IG9uIHRoZSB0ZXJtaW5hbCB3aGVuIHByb21wdGVkIHRvIGdldCB0byB0aGUgVS1Cb290CisgICAgY29tbWFuZCBsaW5lOgorCisgNS4gTG9hZCB0aGUga2VybmVsIGFuZCBib290OgorCisgICAgNWEpIHZmYXQgYm9vdAorCisgICAgICAgICA9PiBmYXRsb2FkIHVzYiAwOjEgJGxvYWRhZGRyIHZtbGludXgKKworICAgIDViKSBleHQzIGJvb3QKKworICAgICAgICAgPT4gZXh0MmxvYWQgdXNiIDA6MiAkbG9hZGFkZHIgYm9vdC92bWxpbnV4CisgCisgICAgPT4gYm9vdG9jdGxpbnV4ICRsb2FkYWRkciBjb3JlbWFzaz0weDMgcm9vdD0vZGV2L3NkYTIgcncgcm9vdHdhaXQgbXRkcGFydHM9cGh5c19tYXBwZWRfZmxhc2g6NTEyayhib290MCksNTEyayhib290MSksNjRrQDMwNzJrKGVlcHJvbSkKKyAKKworVHlwZSAyOiBORlMKKy0tLS0tLS0tLS0tCisKK05vdGU6IElmIHlvdSBwbGFjZSB0aGUga2VybmVsIG9uIHRoZSBleHQzIHBhcnRpdGlvbiwgeW91IG11c3QgcmUtY3JlYXRlIHRoZQorICAgICAgZXh0MyBmaWxlc3lzdGVtLCBzaW5jZSB0aGUgZmFjdG9yeSB1LWJvb3QgY2FuIG9ubHkgaGFuZGxlIDEyOCBieXRlIGlub2RlcyBhbmQKKyAgICAgIGNhbm5vdCByZWFkIHRoZSBwYXJ0aXRpb24gb3RoZXJ3aXNlLgorCisgICAgICBUaGVzZSBib290IGluc3RydWN0aW9ucyBhc3N1bWUgdGhhdCB5b3UgaGF2ZSByZWNyZWF0ZWQgdGhlIGV4dDMgZmlsZXN5c3RlbSB3aXRoCisgICAgICAxMjggYnl0ZSBpbm9kZXMsIHlvdSBoYXZlIGFuIHVwZGF0ZWQgdWJvb3Qgb3IgeW91IGFyZSBydW5uaW5nIGFuZCBpbWFnZSBjYXBhYmxlCisgICAgICBvZiBtYWtpbmcgdGhlIGZpbGVzeXN0ZW0gb24gdGhlIGJvYXJkIGl0c2VsZi4KKworCisgMS4gQm9vdCBmcm9tIE5GUyByb290CisKKyAyLiBNb3VudCB0aGUgVVNCIGRpc2sgcGFydGl0aW9uIDIgYW5kIHRoZW4gZXh0cmFjdCB0aGUgY29udGVudHMgb2YKKyAgICB0bXAvZGVwbG95L2NvcmUtaW1hZ2UtWFhYWC50YXIuYnoyIGludG8gaXQuCisKKyAgICBCZWZvcmUgc3RhcnRpbmcsIGNvcHkgY29yZS1pbWFnZS1taW5pbWFsLXh4eC50YXIuYnoyIGFuZCB2bWxpbnV4IGludG8KKyAgICByb290ZnMgcGF0aCBvbiB5b3VyIHdvcmtzdGF0aW9uLgorCisgICAgYW5kIHRoZW4sCisgIAorICAgICAgIyBtb3VudCAvZGV2L3NkYTIgL21lZGlhL3NkYTIKKyAgICAgICMgdGFyIC14dmpwZiBjb3JlLWltYWdlLW1pbmltYWwtWFhYLnRhci5iejIgLUMgL21lZGlhL3NkYTIKKyAgICAgICMgY3Agdm1saW51eCAvbWVkaWEvc2RhMi9ib290L3ZtbGludXgKKyAgICAgICMgdW1vdW50IC9tZWRpYS9zZGEyCisgICAgICAjIHJlYm9vdAorCisgMy4gUmVib290IHRoZSBib2FyZCBhbmQgcHJlc3MgYSBrZXkgb24gdGhlIHRlcm1pbmFsIHdoZW4gcHJvbXB0ZWQgdG8gZ2V0IHRvIHRoZSBVLUJvb3QKKyAgICBjb21tYW5kIGxpbmU6CisKKyAgICAjIHJlYm9vdAorCisgNC4gTG9hZCB0aGUga2VybmVsIGFuZCBib290OgorCisgICAgICA9PiBleHQybG9hZCB1c2IgMDoyICRsb2FkYWRkciBib290L3ZtbGludXgKKyAgICAgID0+IGJvb3RvY3RsaW51eCAkbG9hZGFkZHIgY29yZW1hc2s9MHgzIHJvb3Q9L2Rldi9zZGEyIHJ3IHJvb3R3YWl0IG10ZHBhcnRzPXBoeXNfbWFwcGVkX2ZsYXNoOjUxMmsoYm9vdDApLDUxMmsoYm9vdDEpLDY0a0AzMDcyayhlZXByb20pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvQVVUSE9SUyBiL3lvY3RvLXBva3kvYml0YmFrZS9BVVRIT1JTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZmQ3OGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvQVVUSE9SUwpAQCAtMCwwICsxLDEwIEBACitUaW0gQW5zZWxsIDxtaXRocm9AbWl0aGlzLm5ldD4KK1BoaWwgQmx1bmRlbGwgPHBiQGhhbmRoZWxkcy5vcmc+CitTZWIgRnJhbmtlbmd1bCA8c2ViQGZyYW5rZW5ndWwub3JnPgorSG9sZ2VyIEZyZXl0aGVyIDxob2xnZXJAbW9pamktbW9iaWxlLmNvbT4KK01hcmNpbiBKdXN6a2lld2ljeiA8bWFyY2luQGp1c3praWV3aWN6LmNvbS5wbD4KK0NocmlzIExhcnNvbiA8a2VyZ290aEBoYW5kaGVsZHMub3JnPgorVWxyaWNoIEx1Y2thcyA8bHVja2FzQG11c29mdC5kZT4KK01pY2tleSBMYXVlciA8bWlja2V5QFZhbmlsbGUuZGU+CitSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBycHN5cy5uZXQ+CitIb2xnZXIgU2NodXJpZyA8aG9sZ2Vyc2NodXJpZ0BnbXguZGU+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvQ09QWUlORyBiL3lvY3RvLXBva3kvYml0YmFrZS9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MTE5MDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvQ09QWUlORwpAQCAtMCwwICsxLDMzOSBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvQ2hhbmdlTG9nIGIveW9jdG8tcG9reS9iaXRiYWtlL0NoYW5nZUxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWMyYTY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL0NoYW5nZUxvZwpAQCAtMCwwICsxLDMxNyBAQAorQ2hhbmdlcyBpbiBCaXRiYWtlIDEuOS54OgorCS0gQWRkIFBFIChQYWNrYWdlIEVwb2NoKSBzdXBwb3J0IGZyb20gUGhpbGlwcCBaYWJlbCAocEg1KQorCS0gVHJlYXQgcHl0aG9uIGZ1bmN0aW9ucyB0aGUgc2FtZSBhcyBzaGVsbCBmdW5jdGlvbnMgZm9yIGxvZ2dpbmcKKwktIFVzZSBUTVBESVIvYW5vbmZ1bmMgYXMgYSBfX2Fub25mdW5jIHRlbXAgZGlyZWN0b3J5IChUKQorCS0gQ2F0Y2ggdHJ1bmNhdGVkIGNhY2hlIGZpbGUgZXJyb3JzCisJLSBBbGxvdyBvcGVyYXRpb25zIG90aGVyIHRoYW4gYXNzaWdubWVudCBvbiBmbGFnIHZhcmlhYmxlcworCS0gQWRkIGNvZGUgdG8gaGFuZGxlIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzCisJLSBGaXggY2FjaGUgZXJyb3JzIHdoZW4gZ2VuZXJhdGlvbiBkb3RHcmFwaHMKKwktIE1ha2Ugc3VyZSBfX2luaGVyaXRfY2FjaGUgaXMgdXBkYXRlZCBiZWZvcmUgY2FsbGluZyBpbmNsdWRlKCkgKGZyb20gTWljaGFlbCBLcmVsaW4pCisJLSBGaXggYnVnIHdoZW4gdGFyZ2V0IHdhcyBpbiBBU1NVTUVfUFJPVklERUQgKCMyMjM2KQorCS0gUmFpc2UgUGFyc2VFcnJvciBmb3IgZmlsZW5hbWVzIHdpdGggbXVsdGlwbGUgdW5kZXJzY29yZXMgaW5zdGVhZCBvZiBpbmZpbml0ZWx5IGxvb3BpbmcgKCMyMDYyKQorCS0gRml4IGludmFsaWQgcmVnZXhwIGluIEJCTUFTSyBlcnJvciBoYW5kbGluZyAobWlzc2luZyBpbXBvcnQpICgjMTEyNCkKKwktIFByb21vdGUgY2VydGFpbiB3YXJuaW5ncyBmcm9tIGRlYnVnIHRvIG5vdGUgMiBsZXZlbAorCS0gVXBkYXRlIG1hbnVhbAorCS0gQ29ycmVjdGx5IHJlZGlyZWN0IHN0ZGluIHdoZW4gZm9ya2luZworCS0gSWYgcGFyc2luZyBlcnJvcnMgYXJlIGZvdW5kLCBleGl0LCB0b28gbWFueSB1c2VycyBtaXNzIHRoZSBlcnJvcnMKKwktIFJlbW92ZSBzdXByaW91cnMgUFJFRkVSUkVEX1BST1ZJREVSIHdhcm5pbmdzCisJLSBzdm4gZmV0Y2hlcjogQWRkIF9idWlsZHN2bmNvbW1hbmQgZnVuY3Rpb24KKwktIEltcHJvdmUgY2VydGFpbiBlcnJvciBtZXNzYWdlcworCS0gUmV3cml0ZSBzdm4gZmV0Y2hlciB0byBtYWtlIGFkZGluZyBleHRyYSBvcGVyYXRpb25zIGVhc2llciAKKwkgIGFzIHBhcnQgb2YgZnV0dXJlIFNSQ0RBVEU9Im5vdyIgZml4ZXMKKwkgIChyZXF1aXJlcyBuZXcgRkVUQ0hDTURfc3ZuIGRlZmluaXRpb24gaW4gYml0YmFrZS5jb25mKQorCS0gQ2hhbmdlIFNWTkRJUiBsYXlvdXQgdG8gYmUgbW9yZSB1bmlxdWUgKGZpeGVzICMyNjQ0IGFuZCAjMjYyNCkKKwktIEFkZCBDb25maWdQYXJzZWQgRXZlbnQgYWZ0ZXIgY29uZmlndXJhdGlvbiBwYXJzaW5nIGlzIGNvbXBsZXRlCisJLSBBZGQgU1JDUkVWIHN1cHBvcnQgZm9yIHN2biBmZXRjaGVyCisJLSBkYXRhLmVtaXRfdmFyKCkgLSBvbmx5IGNhbGwgZ2V0VmFyIGlmIHdlIG5lZWQgdGhlIHZhcmlhYmxlCisJLSBTdG9wIGdlbmVyYXRpbmcgdGhlIEEgdmFyaWFibGUgKHNlZW1zIHRvIGJlIGxlZ2FjeSBjb2RlKQorCS0gTWFrZSBzdXJlIGludGVydGFzayBkZXBlbmRzIGdldCBwcm9jZXNzZWQgY29ycmVjdGluZyBpbiByZWN1cnNpdmUgZGVwZW5kcworCS0gQWRkIHBuLVBOIHRvIG92ZXJyaWRlcyB3aGVuIGV2YWx1YXRpbmcgUFJFRkVSUkVEX1ZFUlNJT04KKwktIEltcHJvdmUgdGhlIHByb2dyZXNzIGluZGljYXRvciBieSBza2lwcGluZyB0YXNrcyB0aGF0IGhhdmUgCisJICBhbHJlYWR5IHJ1biBiZWZvcmUgc3RhcnRpbmcgdGhlIGJ1aWxkIHJhdGhlciB0aGFuIGR1cmluZyBpdAorCS0gQWRkIHByb2ZpbGluZyBvcHRpb24gKC1QKQorCS0gQWRkIEJCX1NSQ1JFVl9QT0xJQ1kgdmFyaWFibGUgKGNsZWFyIG9yIGNhY2hlKSB0byBjb250cm9sIFNSQ1JFViBjYWNoZQorCS0gQWRkIFNSQ1JFVl9GT1JNQVQgc3VwcG9ydAorCS0gRml4IGxvY2FsIGZldGNoZXIncyBsb2NhbHBhdGggcmV0dXJuIHZhbHVlcworCS0gQXBwbHkgT1ZFUlJJREVTIGJlZm9yZSBwZXJmb3JtaW5nIGltbWVkaWF0ZSBleHBhbnNpb25zCisJLSBBbGxvdyB0aGUgLWIgLWUgb3B0aW9uIGNvbWJpbmF0aW9uIHRvIHRha2UgcmVndWxhciBleHByZXNzaW9ucworCS0gRml4IGhhbmRsaW5nIG9mIHZhcmlhYmxlcyB3aXRoIGV4cGFuc2lvbiBpbiB0aGUgbmFtZSB1c2luZyBfYXBwZW5kL19wcmVwZW5kCisJICBlLmcuIFJSRUNPTU1FTkRTXyR7UE59X2FwcGVuZF94eXogPSAiYWJjIgorCS0gQWRkIHBsYWluIG1lc3NhZ2UgZnVuY3Rpb24gdG8gYmIubXNnCisJLSBTb3J0IHRoZSBsaXN0IG9mIHByb3ZpZGVycyBiZWZvcmUgcHJvY2Vzc2luZyBzbyBkZXBlbmRlbmN5IHByb2JsZW1zIGFyZSAKKwkgIHJlcHJvZHVjaWJsZSByYXRoZXIgdGhhbiBlZmZlY3RpdmVseSByYW5kb20KKwktIEZpeC9pbXByb3ZlIGJpdGJha2UgLXMgb3V0cHV0CisJLSBBZGQgbG9ja2luZyBmb3IgZmV0Y2hlcnMgc28gb25seSBvbmUgdHJpZXMgdG8gZmV0Y2ggYSBnaXZlbiBmaWxlIGF0IGEgZ2l2ZW4gdGltZQorCS0gRml4IGludCgwKS9Ob25lIGNvbmZ1c2lvbiBpbiBydW5xdWV1ZS5weSB3aGljaCBjYXVzZXMgcmFuZG9tIGdhcHMgaW4gZGVwZW5kZW5jeSBjaGFpbnMJICAKKwktIEV4cGFuZCBkYXRhIGluIGFkZHRhc2tzCisJLSBQcmludCB0aGUgbGlzdCBvZiBtaXNzaW5nIERFUEVORFMsUkRFUEVORFMgZm9yIHRoZSAiTm8gYnVpbGRhYmxlIHByb3ZpZGVycyBhdmFpbGFibGUgZm9yIHJlcXVpcmVkLi4uLiIKKwkgIGVycm9yIG1lc3NhZ2UuCisJLSBSZXdvcmsgYWRkX3Rhc2sgdG8gYmUgbW9yZSBlZmZpY2llbnQgKDYlIHNwZWVkdXAsIDclIG51bWJlciBvZiBmdW5jdGlvbiBjYWxscyByZWR1Y3Rpb24pCisJLSBTb3J0IGRpZ3JhcGggb3V0cHV0IHRvIG1ha2UgYnVpbGRzIG1vcmUgcmVwcm9kdWNpYmxlCisJLSBTcGxpdCBleHBhbmRLZXlzIGludG8gdHdvIGZvciBsb29wcyB0byBiZW5lZml0IGZyb20gdGhlIGV4cGFuZF9jYWNoZSAoMTIlIHNwZWVkdXApCisJLSBydW5xdWV1ZS5weTogRml4IGlkZXBlbmRzIGhhbmRsaW5nIHRvIGF2b2lkIGRlcGVuZGVuY3kgZXJyb3JzCisJLSBDbGVhciB0aGUgdGVybWluYWwgVE9TVE9QIGZsYWcgaWYgc2V0IChhbmQgd2FybiB0aGUgdXNlcikKKwktIEZpeCByZWdyZXNzaW9uIGZyb20gcjY1MyBhbmQgbWFrZSBTUkNEQVRFL0NWU0RBVEUgd29yayBmb3IgcGFja2FnZXMgYWdhaW4KKwktIEZpeCBhIGJ1ZyBpbiBiYi5kZWNvZGV1cmwgd2hlcmUgaHR0cDovL3NvbWUud2hlcmUuY29tL3NvbWVmaWxlLnRneiBkZWNvZGVkIHRvIGhvc3Q9IiIgKCMxNTMwKQorCS0gV2FybiBhYm91dCBtYWxmb3JtZWQgUFJFRkVSUkVEX1BST1ZJREVSUyAoIzEwNzIpCisJLSBBZGQgc3VwcG9ydCBmb3IgQkJfTklDRV9MRVZFTCBvcHRpb24gKCMxNjI3KQorCS0gUHN5Y28gaXMgdXNlZCBvbmx5IG9uIHg4NiBhcyB0aGVyZSBpcyBubyBzdXBwb3J0IGZvciBvdGhlciBhcmNoaXRlY3R1cmVzLgorCS0gU29ydCBpbml0aWFsIHByb3ZpZGVycyBsaXN0IGJ5IGRlZmF1bHQgcHJlZmVyZW5jZSAoIzExNDUsICMyMDI0KQorCS0gSW1wcm92ZSBwcm92aWRlciBzb3J0aW5nIHNvIHByZWZlcmVkIHZlcnNpb25zIGhhdmUgcHJlZmVyZW5jZSBvdmVyIGxhdGVzdCB2ZXJzaW9ucyAoIzc2OCkKKwktIERldGVjdCBidWlsZHMgb2YgdGFza3Mgd2l0aCBvdmVybGFwcGluZyBwcm92aWRlcnMgYW5kIHdhcm4gKHdpbGwgYmVjb21lIGEgZmF0YWwgZXJyb3IpICgjMTM1OSkKKwktIEFkZCBNVUxUSV9QUk9WSURFUl9XSElURUxJU1QgdmFyaWFibGUgdG8gYWxsb3cga25vd24gc2FmZSBtdWx0aXBsZSBwcm92aWRlcnMgdG8gYmUgbGlzdGVkCisJLSBIYW5kbGUgcGF0aHMgaW4gc3ZuIGZldGNoZXIgbW9kdWxlIHBhcmFtZXRlcgorCS0gU3VwcG9ydCB0aGUgc3ludGF4ICJleHBvcnQgVkFSSUFCTEUiCisJLSBBZGQgYnpyIGZldGNoZXIKKwktIEFkZCBzdXBwb3J0IGZvciBjbGVhbmluZyBkaXJlY3RvcmllcyBiZWZvcmUgYSB0YXNrIGluIHRoZSBmb3JtOgorCSAgZG9fdGFza25hbWVbY2xlYW5kaXJzXSA9ICJkaXIiCisJLSBienIgZmV0Y2hlciB0d2Vha3MgZnJvbSBSb2JlcnQgU2NodXN0ZXIgKCMyOTEzKQorCS0gQWRkIG1lcmN1cmlhbCAoaGcpIGZldGNoZXIgZnJvbSBSb2JlcnQgU2NodXN0ZXIgKCMyOTEzKQorCS0gRG9uJ3QgYWRkIGR1cGxpY2F0ZXMgdG8gQkJQQVRICisJLSBGaXggcHJlZmVycmVkX3ZlcnNpb24gcmV0dXJuIHZhbHVlcyAocHJvdmlkZXJzLnB5KQorCS0gRml4ICdkZXBlbmRzJyBmbGFnIHNwbGl0dGluZworCS0gRml4IHVuZXhwb3J0IGhhbmRsaW5nICgjMzEzNSkKKwktIEFkZCBiYi5jb3B5ZmlsZSBmdW5jdGlvbiBzaW1pbGFyIHRvIGJiLm1vdmVmaWxlIChhbmQgaW1wcm92ZSBtb3ZlZmlsZSBlcnJvciByZXBvcnRpbmcpCisJLSBBbGxvdyBtdWx0aXBsZSBvcHRpb25zIGZvciBkZXB0YXNrIGZsYWcKKwktIFVzZSBnaXQtZmV0Y2ggaW5zdGVhZCBvZiBnaXQtcHVsbCByZW1vdmluZyBhbnkgbmVlZCBmb3IgbWVyZ2VzIHdoZW4gCisJICBmZXRjaGluZyAod2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgaW5kZXgpLiBGaXhlcyBmZXRjaCBlcnJvcnMuCisJLSBBZGQgQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTIG9wdGlvbiwgc2V0IHRvIDAgdG8gbWFrZSBnaXQgZmV0Y2hlcyAKKwkgIGZhc3RlciBhdCB0aGUgZXhwZW5zZSBvZiBub3QgY3JlYXRpbmcgbWlycm9yIHRhcmJhbGxzLgorCS0gU1JDUkVWIGhhbmRsaW5nIHVwZGF0ZXMsIGltcHJvdmVtZW50cyBhbmQgZml4ZXMgZnJvbSBQb2t5CisJLSBBZGQgYmIudXRpbHMubG9ja2ZpbGUoKSBhbmQgYmIudXRpbHMudW5sb2NrZmlsZSgpIGZyb20gUG9reQorCS0gQWRkIHN1cHBvcnQgZm9yIHRhc2sgc2VsZnN0YW1wIGFuZCBsb2NrZmlsZXMgZmxhZ3MKKwktIERpc2FibGUgdGFzayBudW1iZXIgYWNjZWxlcmF0aW9uIHNpbmNlIGl0IGNhbiBhbGxvdyB0aGUgdGFza3MgdG8gcnVuIAorCSAgb3V0IG9mIHNlcXVlbmNlCisJLSBJbXByb3ZlIHJ1bnF1ZXVlIGNvZGUgY29tbWVudHMKKwktIEFkZCB0YXNrIHNjaGVkdWxlciBhYnN0cmFjdGlvbiBhbmQgc29tZSBleGFtcGxlIHNjaGVkdWxlcnMKKwktIEltcHJvdmUgY2lyY3VsYXIgZGVwZW5kZW5jeSBjaGFpbiBkZWJ1Z2dpbmcgY29kZSBhbmQgdXNlciBmZWVkYmFjaworCS0gRG9uJ3QgZ2l2ZSBhIHN0YWNrdHJhY2UgZm9yIGludmFsaWQgdGFza3MsIGhhdmUgYSB1c2VyIGZyaWVuZGx5IG1lc3NhZ2UgKCMzNDMxKQorCS0gQWRkIHN1cHBvcnQgZm9yICItZSB0YXJnZXQiICgjMzQzMikKKwktIEZpeCBzaGVsbCBzaG93ZGF0YSBjb21tYW5kICgjMzI1OSkKKwktIEZpeCBzaGVsbCBkYXRhIHVwZGF0aW5nIHByb2JsZW1zICgjMTg4MCkKKwktIFByb3Blcmx5IHJhaXNlIGVycm9ycyBmb3IgaW52YWxpZCBzb3VyY2UgVVJJIHByb3RvY29scworCS0gQ2hhbmdlIHRoZSB3Z2V0IGZldGNoZXIgZmFpbHVyZSBoYW5kbGluZyB0byBhdm9pZCBsb2NrZmlsZSBwcm9ibGVtcworCS0gQWRkIHN1cHBvcnQgZm9yIGJyYW5jaGVzIGluIGdpdCBmZXRjaGVyIChPdGF2aW8gU2FsdmFkb3IsIE1pY2hhZWwgTGF1ZXIpCisJLSBNYWtlIHRhc2tkYXRhIGFuZCBydW5xdWV1ZSBlcnJvcnMgbW9yZSB1c2VyIGZyaWVuZGx5CisJLSBBZGQgbm9yZWN1cnNlIGFuZCBmdWxscGF0aCBvcHRpb25zIHRvIGN2cyBmZXRjaGVyCisJLSBGaXggZXhpdCBjb2RlIGZvciBidWlsZCBmYWlsdXJlcyBpbiAtLWNvbnRpbnVlIG1vZGUKKwktIEZpeCBnaXQgYnJhbmNoIHRhZ3MgZmV0Y2hpbmcKKwktIENoYW5nZSBwYXJzZUNvbmZpZ3VyYXRpb25GaWxlIHNvIGl0IHdvcmtzIG9uIHJlYWwgZGF0YSwgbm90IGEgY29weQorCS0gSGFuZGxlICdiYXNlJyBpbmhlcml0IGFuZCBhbGwgb3RoZXIgSU5IRVJJVHMgZnJvbSBwYXJzZUNvbmZpZ3VyYXRpb25GaWxlIAorCSAgaW5zdGVhZCBvZiBCQkhhbmRsZXIKKwktIEZpeCBnZXRWYXJGbGFncyBidWcgaW4gZGF0YV9zbWFydAorCS0gT3B0bWlzZSBjYWNoZSBoYW5kbGluZyBieSBtb3JlIHF1aWNrbHkgZGV0ZWN0aW5nIGFuIGludmFsaWQgY2FjaGUsIG9ubHkgCisJICBzYXZpbmcgdGhlIGNhY2hlIHdoZW4gaXRzIGNoYW5nZWQsIG1vdmluZyB0aGUgY2FjaGUgdmFsaWRpdHkgY2hlY2sgaW50bworCSAgdGhlIHBhcnNpbmcgbG9vcCBhbmQgZmFjdG9yaW5nIHNvbWUgZ2V0VmFyIGNhbGxzIG91dHNpZGUgYSBmb3IgbG9vcAorCS0gQ29va2VyOiBSZW1vdmUgYSBkZWJ1ZyBtZXNzYWdlIGZyb20gdGhlIHBhcnNpbmcgbG9vcCB0byBsb3dlciBvdmVyaGVhZAorCS0gQ29udmVydCBidWlsZC5weSBleGVjX3Rhc2sgdG8gdXNlIGdldFZhckZsYWdzCisJLSBVcGRhdGUgc2hlbGwgdG8gdXNlIGNvb2tlci5idWlsZEZpbGUKKwktIEFkZCBTdGFtcFVwZGF0ZSBldmVudAorCS0gQ29udmVydCAtYiBvcHRpb24gdG8gdXNlIHRhc2tkYXRhL3J1bnF1ZXVlCisJLSBSZW1vdmUgZGlncmFwaCBhbmQgc3dpdGNoIHRvIG5ldyBzdGFtcCBjaGVja2luZyBjb2RlLiBleGVjX3Rhc2sgbm8gbG9uZ2VyCisJICBob25vdXJzIGRlcGVuZGVuY2llcworCS0gTWFrZSBmZXRjaGVyIHRpbWVzdGFtcCB1cGRhdGluZyBub24tZmF0YWwgd2hlbiBwZXJtaXNzaW9ucyBkb24ndCBhbGxvdyAKKwkgIHVwZGF0ZXMKKwktIEFkZCBCQl9TQ0hFRFVMRVIgdmFyaWFibGUvb3B0aW9uICgiY29tcGxldGlvbiIgb3IgInNwZWVkIikgY29udHJvbGxpbmcKKwkgIHRoZSB3YXkgYml0YmFrZSBzY2hlZHVsZXMgdGFza3MKKwktIEFkZCBCQl9TVEFNUF9QT0xJQ1kgdmFyaWFibGUvb3B0aW9uICgicGVyZmlsZSIgb3IgImZ1bGwiKSBjb250cm9sbGluZworCSAgaG93IGV4dGVuc2l2ZWx5IHN0YW1wcyBhcmUgbG9va2VkIGF0IGZvciB2YWxpZGl0eQorCS0gV2hlbiBoYW5kbGluZyBidWlsZCB0YXJnZXQgZmFpbHVyZXMgbWFrZSBzdXJlIGlkZXBlbmRzIGFyZSBjaGVja2VkIGFuZAorCSAgZmFpbGVkIHdoZXJlIG5lZWRlZC4gRml4ZXMgLS1jb250aW51ZSBtb2RlIGNyYXNoZXMuCisJLSBGaXggLWYgKGZvcmNlKSBpbiBjb25qdW5jdGlvbiB3aXRoIC1iCisJLSBGaXggcHJvYmxlbXMgd2l0aCByZWNyZGVwdGFzayBoYW5kbGluZyB3aGVyZSBzb21lIGlkZXBlbmRzIHdlcmVuJ3QgaGFuZGxlZAorCSAgY29ycmVjdGx5LgorCS0gSGFuZGxlIGV4aXQgY29kZXMgY29ycmVjdGx5IChmcm9tIHBINSkKKwktIFdvcmsgYXJvdW5kIHJlZnMvSEVBRCBpc3N1ZXMgd2l0aCBnaXQgb3ZlciBodHRwICgjMzQxMCkKKwktIEFkZCBwcm94eSBzdXBwb3J0IHRvIHRoZSBDVlMgZmV0Y2hlciAoZnJvbSBDeXJpbCBDaGVtcGFyYXRoeSkKKwktIEltcHJvdmUgcnVuZmV0Y2hjbWQgc28gZXJyb3JzIGFyZSBzZWVuIGFuZCB2YXJpb3VzIEdJVCB2YXJpYWJsZXMgYXJlIGV4cG9ydGVkCisJLSBBZGQgYWJpbGl0eSB0byBmZXRjaGVycyB0byBjaGVjayBVUkwgdmFsaWRpdHkgd2l0aG91dCBkb3dubG9hZGluZworCS0gSW1wcm92ZSBydW50aW1lIFBSRUZFUlJFRF9QUk9WSURFUlMgd2FybmluZyBtZXNzYWdlCisJLSBBZGQgQkJfU1RBTVBfV0hJVEVMSVNUIG9wdGlvbiB3aGljaCBjb250YWlucyBhIGxpc3Qgb2Ygc3RhbXBzIHRvIGlnbm9yZSB3aGVuCisJICBjaGVja2luZyBzdGFtcCBkZXBlbmRlbmNpZXMgYW5kIHVzaW5nIGEgQkJfU1RBTVBfUE9MSUNZIG9mICJ3aGl0ZWxpc3QiCisJLSBObyBsb25nZXIgd2VpZ2h0IHByb3ZpZGVycyBvbiB0aGUgYmFzaXMgb2YgYSBwYWNrYWdlIGJlaW5nICJhbHJlYWR5IHN0YWdlZCIuIFRoaXMKKwkgIGxlYWRzIHRvIGJ1aWxkcyBiZWluZyBub24tZGV0ZXJtaW5pc3RpYy4KKwktIEZsdXNoIHN0ZG91dC9zdGRlcnIgYmVmb3JlIGZvcmtpbmcgdG8gZml4IGR1cGxpY2F0ZSBjb25zb2xlIG91dHB1dAorCS0gTWFrZSBzdXJlIHJlY3JkZXBzIHRhc2tzIGluY2x1ZGUgYWxsIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzIG9mIGEgZ2l2ZW4gZm4KKwktIEFkZCBiYi5ydW5xdWV1ZS5jaGVja19zdGFtcF9mbigpIGZvciB1c2UgYnkgcGFja2FnZWQtc3RhZ2luZworCS0gQWRkIFBFUlNJU1RFTlRfRElSIHRvIHN0b3JlIHRoZSBQZXJzaXN0RGF0YSBpbiBhIHBlcnNpc3RlbnQKKwkgIGRpcmVjdG9yeSAhPSB0aGUgY2FjaGUgZGlyLgorCS0gQWRkIG1kNSBhbmQgc2hhMjU2IGNoZWNrc3VtIGdlbmVyYXRpb24gZnVuY3Rpb25zIHRvIHV0aWxzLnB5CisJLSBDb3JyZWN0bHkgaGFuZGxlICctJyBjaGFyYWN0ZXJzIGluIGNsYXNzIG5hbWVzICgjMjk1OCkKKwktIE1ha2Ugc3VyZSBleHBhbmRLZXlzIGhhcyBiZWVuIGNhbGxlZCBvbiB0aGUgZGF0YSBkaWN0aW9uYXJ5IGJlZm9yZSBydW5uaW5nIHRhc2tzCisJLSBDb3JyZWN0bHkgYWRkIGEgdGFzayBvdmVycmlkZSBpbiB0aGUgZm9ybSB0YXNrLVRBU0tOQU1FLgorCS0gUmV2ZXJ0IHRoZSAnLScgY2hhcmFjdGVyIGZpeCBpbiBjbGFzcyBuYW1lcyBzaW5jZSBpdCBicmVha3MgdGhpbmdzCisJLSBXaGVuIGEgcmVnZXhwIGZhaWxzIHRvIGNvbXBpbGUgZm9yIFBBQ0tBR0VTX0RZTkFNSUMsIHByaW50IGEgbW9yZSB1c2VmdWwgZXJyb3IgKCM0NDQ0KQorCS0gQWxsb3cgdG8gY2hlY2tvdXQgQ1ZTIGJ5IERhdGUgYW5kIFRpbWUuIEp1c3QgYWRkIEhIbW0gdG8gdGhlIFNSQ0RBVEUuCisJLSBNb3ZlIHBydW5lZGlyIGZ1bmN0aW9uIHRvIHV0aWxzLnB5IGFuZCBhZGQgZXhwbG9kZV9kZXBfdmVyc2lvbnMgZnVuY3Rpb24KKwktIFJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBTUkNSRVYgPT0gJ0lOVkFMSUQnCisJLSBGaXggaGcgZmV0Y2hlciB1c2VybmFtZS9wYXNzd29yZCBoYW5kbGluZyBhbmQgZml4IGNyYXNoCisJLSBGaXggUEFDS0FHRVNfRFlOQU1JQyBoYW5kbGluZyBvZiBwYWNrYWdlcyB3aXRoICcrKycgaW4gdGhlIG5hbWUKKwktIFJlbmFtZSBfX2RlcGVuZHMgdG8gX19iYXNlX2RlcGVuZHMgYWZ0ZXIgY29uZmlndXJhdGlvbiBwYXJzaW5nIHNvIHdlIGRvbid0CisJICByZWNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgY29uZmlnIGZpbGVzIHRpbWUgYWZ0ZXIgdGltZQorCS0gQWRkIGJldHRlciBlbnZpcm9ubWVudGFsIHZhcmlhYmxlIGhhbmRsaW5nLiBCeSBkZWZhdWx0IGl0IHdpbGwgbm93IG9ubHkgcGFzcyBjZXJ0YWluIAorCSAgd2hpdGVsaXN0ZWQgdmFyaWFibGVzIGludG8gdGhlIGRhdGEgc3RvcmUuIElmIEJCX1BSRVNFUlZFX0VOViBpcyBzZXQgYml0YmFrZSB3aWxsIHVzZQorCSAgYWxsIHZhcmlhYmxlIGZyb20gdGhlIGVudmlyb25tZW50LiBJZiBCQl9FTlZfV0hJVEVMSVNUIGlzIHNldCwgdGhhdCB3aGl0ZWxpc3Qgd2lsbCBiZQorCSAgdXNlZCBpbnN0ZWFkIG9mIHRoZSBpbnRlcm5hbCBiaXRiYWtlIG9uZS4gQWx0ZXJuYXRpdmVseSwgQkJfRU5WX0VYVFJBV0hJVEUgY2FuIGJlIHVzZWQKKwkgIHRvIGV4dGVuZCB0aGUgaW50ZXJuYWwgd2hpdGVsaXN0LgorCS0gUGVyZm9yY2UgZmV0Y2hlciBmaXggdG8gdXNlIGNvbW1hbmRsaW5lIG9wdGlvbnMgaW5zdGVhZCBvZiBiZWluZyBvdmVycmlkZW4gYnkgdGhlIGVudmlyb25tZW50CisJLSBiYi51dGlscy5wcnVuZWRpciBjYW4gY29wZSB3aXRoIHN5bWxpbmtzIHRvIGRpcmVjdG9yaWVlcyB3aXRob3V0IGV4Y2VwdGlvbnMKKwktIHVzZSBAcmV2IHdoZW4gZG9pbmcgYSBzdm4gY2hlY2tvdXQKKwktIEFkZCBvc2MgZmV0Y2hlciAoZnJvbSBKb3NodWEgTG9jayBpbiBQb2t5KQorCS0gV2hlbiBTUkNSRVYgYXV0b3JldmlzaW9uaW5nIGZvciBhIHJlY2lwZSBpcyBpbiB1c2UsIGRvbid0IGNhY2hlIHRoZSByZWNpcGUKKwktIEFkZCB0cnlhbHRjb25maWdzIG9wdGlvbiB0byBjb250cm9sIHdoZXRoZXIgYml0YmFrZSB0cnlzIHVzaW5nIGFsdGVybmF0aXZlIHByb3ZpZGVycworCSAgdG8gZnVsZmlsIGZhaWxlZCBkZXBlbmRlbmNpZXMuIEl0IGRlZmF1bHRzIHRvIG9mZiwgY2hhbmdpbmcgdGhlIGRlZmF1bHQgc2luY2UgdGhpcworCSAgYmVoYXZpb3VyIGNvbmZ1c2VzIG1hbnkgdXNlcnMgYW5kIGlzbid0IG9mdGVuIHVzZWZ1bC4KKwktIEltcHJvdmUgbG9jayBmaWxlIGZ1bmN0aW9uIGVycm9yIGhhbmRsaW5nCisJLSBBZGQgdXNlcm5hbWUgaGFuZGxpbmcgdG8gdGhlIGdpdCBmZXRjaGVyIChSb2JlcnQgQnJhZ2cpCisJLSBBZGQgc3VwcG9ydCBmb3IgSFRUUF9QUk9YWSBhbmQgSFRUUF9QUk9YWV9JR05PUkUgdmFyaWFibGVzIHRvIHRoZSB3Z2V0IGZldGNoZXIKKwktIEV4cG9ydCBtb3JlIHZhcmlhYmxlcyB0byB0aGUgZmV0Y2hlciBjb21tYW5kcyB0byBhbGxvdyBzc2ggY2hlY2tvdXRzIGFuZCBjaGVja291dHMgdGhyb3VnaCAKKwkgIHByb3hpZXMgdG8gd29yayBiZXR0ZXIuIChmcm9tIFBva3kpCisJLSBBbHNvIGFsbG93IHVzZXIgYW5kIHBzd2Qgb3B0aW9ucyBpbiBTUkNfVVJJcyBnbG9iYWxseSAoZnJvbSBQb2t5KQorCS0gSW1wcm92ZSBwcm94eSBoYW5kbGluZyB3aGVuIHVzaW5nIG1pcnJvcnMgKGZyb20gUG9reSkKKwktIEFkZCBiYi51dGlscy5wcnVuZV9zdWZmaXggZnVuY3Rpb24KKwktIEZpeCBoZyBjaGVja291dHMgb2Ygc3BlY2lmaWMgcmV2aXNpb25zIChmcm9tIFBva3kpCisJLSBGaXggd2dldCBmZXRjaGluZyBvZiB1cmxzIHdpdGggcGFyYW1ldGVycyBzcGVjaWZpZWQgKGZyb20gUG9reSkKKwktIEFkZCB1c2VybmFtZSBoYW5kbGluZyB0byBnaXQgZmV0Y2hlciAoZnJvbSBQb2t5KQorCS0gU2V0IEhPTUUgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSB3aGVuIHJ1bm5pbmcgZmV0Y2hlciBjb21tYW5kcyAoZnJvbSBQb2t5KQorCS0gTWFrZSBzdXJlIGFsbG93ZWQgdmFyaWFibGVzIGluaGVyaXRlZCBmcm9tIHRoZSBlbnZpcm9ubWVudCBhcmUgZXhwb3J0ZWQgYWdhaW4gKGZyb20gUG9reSkKKwktIFdoZW4gcnVubmluZyBhIHN0YWdlIHRhc2sgaW4gYmJzaGVsbCwgcnVuIHBvcHVsYXRlX3N0YWdpbmcsIG5vdCB0aGUgc3RhZ2UgdGFzayAoZnJvbSBQb2t5KQorCS0gRml4ICsgY2hhcmFjdGVyIGVzY2FwaW5nIGZyb20gUEFDS0FHRVNfRFlOQU1JQyAodGhhbmtzIE90YXZpbyBTYWx2YWRvcikKKwktIEFkZGl0aW9uIG9mIEJCQ0xBU1NFWFRFTkQgc3VwcG9ydCBmb3IgYWxsb3dpbmcgb25lIHJlY2lwZSB0byBwcm92aWRlIG11bHRpcGxlIHRhcmdldHMgKGZyb20gUG9reSkKKworQ2hhbmdlcyBpbiBCaXRiYWtlIDEuOC4wOgorCS0gUmVsZWFzZSAxLjcueCBhcyBhIHN0YWJsZSBzZXJpZXMKKworQ2hhbmdlcyBpbiBCaXRCYWtlIDEuNy54OgorCS0gTWFqb3IgdXBkYXRlcyBvZiB0aGUgZGVwZW5kZW5jeSBoYW5kbGluZyBhbmQgZXhlY3V0aW9uCisJICBvZiB0YXNrcy4gQ29kZSBmcm9tIGJpbi9iaXRiYWtlIHJlcGxhY2VkIHdpdGggcnVucXVldWUucHkKKwkgIGFuZCB0YXNrZGF0YS5weQorCS0gTmV3IHRhc2sgZXhlY3V0aW9uIGNvZGUgc3VwcG9ydHMgbXVsdGl0aHJlYWRpbmcgd2l0aCBhIHNpbXBsaXN0aWMKKwkgIHRocmVhZGluZyBhbGdvcml0aG0gY29udHJvbGxlZCBieSBCQl9OVU1CRVJfVEhSRUFEUworCS0gQ2hhbmdlIG9mIHRoZSBTVk4gRmV0Y2hlciB0byBrZWVwIHRoZSBjaGVja291dCBhcm91bmQKKwkgIGNvdXJ0c2V5IG9mIFBhdWwgU29rb2xvdnNreSAoIzEzNjcpCisJLSBQQVRIIGZpeCB0byBiYmltYWdlICgjMTEwOCkKKwktIEFsbG93IGRlYnVnIGRvbWFpbnMgdG8gYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kbGluZSAoLWwpCisJLSBBbGxvdyAnaW50ZXJhY3RpdmUnIHRhc2tzCisJLSBMb2dnaW5nIG1lc3NhZ2UgaW1wcm92ZW1lbnRzCisJLSBEcm9wIG5vdyB1bmVlZGVkIEJVSUxEX0FMTF9ERVBTIHZhcmlhYmxlCisJLSBBZGQgc3VwcG9ydCBmb3Igd2lsZGNhcmRzIHRvIC1iIG9wdGlvbgorCS0gTWFqb3Igb3ZlcmhhdWwgb2YgdGhlIGZldGNoZXJzIG1ha2luZyBhIGxhcmdlIGFtb3VudCBvZiBjb2RlIGNvbW1vbgorCSAgaW5jbHVkaW5nIG1pcnJvcmluZyBjb2RlCisJLSBGZXRjaGVycyBub3cgdG91Y2ggbWQ1IHN0YW1wcyB1cG9uIGFjY2VzcyAodG8gc2hvdyBhY3Rpdml0eSkKKwktIEZpeCAtZiBmb3JjZSBvcHRpb24gd2hlbiB1c2VkIHdpdGhvdXQgLWIgKGxvbmcgc3RhbmRpbmcgYnVnKQorCS0gQWRkIGV4cGFuZF9jYWNoZSB0byBkYXRhX2NhY2hlLnB5LCBjYWNoaW5nIGV4cGFuZGVkIGRhdGEgKHNwZWVkdXApCisJLSBBbGxvdyB2ZXJzaW9uIGZpZWxkIGluIERFUEVORFMgKGlnbm9yZWQgZm9yIG5vdykKKwktIEFkZCBhYm9ydCBmbGFnIHN1cHBvcnQgdG8gdGhlIHNoZWxsCisJLSBNYWtlIGluaGVyaXQgZmFpbCBpZiB0aGUgY2xhc3MgZG9lc24ndCBleGlzdCAoIzE0NzgpCisJLSBGaXggZGF0YS5lbWl0X2VudigpIHRvIGV4cGFuZCBrZXluYW1lcyBhcyB3ZWxsIGFzIHZhbHVlcworCS0gQWRkIHNzaCBmZXRjaGVyCisJLSBBZGQgcGVyZm9yY2UgZmV0Y2hlcgorCS0gTWFrZSBQUkVGRVJSRURfUFJPVklERVJfZm9vYmFyIGRlZmF1bHRzIHRvIGZvb2JhciBpZiBhdmFpbGFibGUKKwktIFNoYXJlIHRoZSBwYXJzZXIncyBtdGltZV9jYWNoZSwgcmVkdWNpbmcgdGhlIG51bWJlciBvZiBzdGF0IHN5c2NhbGxzCisJLSBDb21waWxlIGFsbCBhbm9uZnVuY3MgYXQgb25jZSEgCisJICAqKiogQW5vbmZ1bmNzIG11c3Qgbm93IHVzZSBjb21tb24gc3BhY2luZyBmb3JtYXQgKioqCisJLSBNZW1vcmlzZSB0aGUgbGlzdCBvZiBoYW5kbGVycyBpbiBfX0JCSEFORExFUlMgYW5kIHRhc2tzIGluIF9fQkJUQVNLUworCSAgVGhpcyByZW1vdmVzIDIgbWlsbGlvbiBmdW5jdGlvbiBjYWxscyByZXN1bHRpbmcgaW4gYSA1LTEwJSBzcGVlZHVwCisJLSBBZGQgbWFucGFnZQorCS0gVXBkYXRlIGdlbmVyYXRlRG90R3JhcGggdG8gdXNlIHRhc2tEYXRhL3J1blF1ZXVlIGltcHJvdmluZyBhY2N1cmFjeQorCSAgYW5kIGFsc28gYWRkaW5nIGEgdGFzayBkZXBlbmRlbmN5IGdyYXBoCisJLSBGaXgvc3RhbmRhcmRpc2Ugb24gR1BMdjIgbGljZW5jZQorCS0gTW92ZSBtb3N0IGZ1bmN0aW9uYWxpdHkgZnJvbSBiaW4vYml0YmFrZSB0byBjb29rZXIucHkgYW5kIHNwbGl0IGludG8KKwkgIHNlcGFyYXRlIGZ1bmNpdG9ucworCS0gQ1ZTIGZldGNoZXI6IEFkZGVkIHN1cHBvcnQgZm9yIG5vbi1kZWZhdWx0IHBvcnQKKwktIEFkZCBCQklOQ0xVREVMT0dTX0xJTkVTLCB0aGUgbnVtYmVyIG9mIGxpbmVzIHRvIHJlYWQgZnJvbSBhbnkgbG9nZmlsZQorCS0gRHJvcCBzaGViYW5ncyBmcm9tIGxpYi9iYiBzY3JpcHRzCisKK0NoYW5nZXMgaW4gQml0YmFrZSAxLjYuMDoKKwktIEJldHRlciBtc2cgaGFuZGxpbmcKKwktIENPVyBkaWN0IGltcGxlbWVudGF0aW9uIGZyb20gVGltIEFuc2VsbCAobWl0aHJvKSBsZWFkaW5nCisJICB0byBiZXR0ZXIgcGVyZm9ybWFuY2UKKwktIFNwZWVkIHVwIG9mIC1zCisKK0NoYW5nZXMgaW4gQml0YmFrZSAxLjQuNDoKKwktIFNSQ0RBVEUgbm93IGhhbmRsaW5nIGNvdXJ0c2V5IEp1c3RpbiBQYXRyaW4KKwktICMxMDE3IGZpeCB0byB3b3JrIHdpdGggcm1fd29yaworCitDaGFuZ2VzIGluIEJpdEJha2UgMS40LjI6CisJLSBTZW5kIGxvZ3MgdG8gb2UucGFzdGViaW4uY29tIGluc3RlYWQgb2YgcGFzdGViaW4uY29tCisJICBmaXhlcyAjODU2CisJLSBDb3B5IHRoZSBpbnRlcm5hbCBiaXRiYWtlIGRhdGEgYmVmb3JlIGJ1aWxkaW5nIHRoZQorCSAgZGVwZW5kZW5jeSBncmFwaC4gVGhpcyBmaXhlcyBuYW5vIG5vdCBoYXZpbmcgYQorCSAgdmlydHVhbC9saWJjIGRlcGVuZGVuY3kKKwktIEFsbG93IG11bHRpcGxlIFRBUkJBTExfU1RBU0ggZW50cmllcworCS0gQ2FjaGUsIGNoZWNrIGlmIHRoZSBkaXJlY3RvcnkgZXhpc3RzIGJlZm9yZSBjaGFuZ2luZworCSAgaW50byBpdAorCS0gZ2l0IHNwZWVkdXAgY2xvbmluZyBieSBub3QgZG9pbmcgYSBjaGVja291dAorCS0gYWxsb3cgdG8gaGF2ZSBzcGFjZXMgaW4gZmlsZW5hbWVzICguY29uZiwgLmJiLCAuYmJjbGFzcykKKworQ2hhbmdlcyBpbiBCaXRCYWtlIDEuNC4wOgorCS0gRml4IHRvIGNoZWNrIGJvdGggUkRFUEVORFMgYW5kIFJERVBFTkRTXyR7UE59CisJLSBGaXggYSBSREVQRU5EUyBwYXJzaW5nIGJ1ZyBpbiB1dGlsczpleHBsb2RlX2RlcHMoKQorCS0gVXBkYXRlIGdpdCBmZXRjaGVyIGJlaGF2aW91ciB0byBtYXRjaCBnaXQgY2hhbmdlcworCS0gQVNTVU1FX1BST1ZJREVEIGFsbG93ZWQgdG8gaW5jbHVkZSBydW50aW1lIHBhY2thZ2VzCisJLSBnaXQgZmV0Y2hlciBjbGVhbnVwIGFuZCBlZmZpY2VuY3kgaW1wcm92ZW1lbnRzCisJLSBDaGFuZ2UgdGhlIGZvcm1hdCBvZiB0aGUgY2FjaGUKKwktIFVwZGF0ZSB1c2VybWFudWFsIHRvIGRvY3VtZW50IHRoZSBGZXRjaGVycworCS0gTWFqb3IgY2hhbmdlcyB0byBjYWNoaW5nIHdpdGggYSBuZXcgc3RyYXRlZ3kKKwkgIGdpdmluZyBhIG1ham9yIHBlcmZvcm1hbmNlIGluY3JlYXNlIHdoZW4gcmVwYXJzaW5nCisJICB3aXRoIGZldyBkYXRhIGNoYW5nZXMKKworQ2hhbmdlcyBpbiBCaXRCYWtlIDEuMy4zOgorCS0gQ3JlYXRlIGEgbmV3IEZldGNoZXIgbW9kdWxlIHRvIGVhc2UgdGhlCisJICBkZXZlbG9wbWVudCBvZiBuZXcgRmV0Y2hlcnMuCisJICBJc3N1ZSAjNDM4IGZpeGVkIGJ5IHJwdXJkaWVAb3BlbmVkaGFuZC5jb20KKwktIE1ha2UgdGhlIFN1YnZlcnNpb24gZmV0Y2hlciBob25vciB0aGUgU1JDIERhdGUKKwkgIChDVlNEQVRFKS4KKwkgIElzc3VlICM1NTUgZml4ZWQgYnkgY2hyaXNAb3BlbmVkaGFuZC5jb20KKwktIEV4cGFuZCBQUkVGRVJSRURfUFJPVklERVIgcHJvcGVybHkKKwkgIElzc3VlICM0MzYgZml4ZWQgYnkgcnBydWRpZUBvcGVuZWRoYW5kLmNvbQorCS0gVHlwbyBmaXggZm9yIElzc3VlICM1MzEgYnkgUGhpbGlwcCBaYWJlbCBmb3IgdGhlCisJICBCaXRCYWtlIFNoZWxsCisJLSBJbnRyb2R1Y2UgYSBuZXcgc3BlY2lhbCB2YXJpYWJsZSBTUkNEQVRFIGFzCisJICBhIGdlbmVyaWMgbmFtaW5nIHRvIHJlcGxhY2UgQ1ZTREFURS4KKwktIEludHJvZHVjZSBhIG5ldyBrZXl3b3JkICdyZXF1aXJlZCcuIEluIGNvbnRyYXN0CisJICB0byAnaW5jbHVkZScgcGFyc2luZyB3aWxsIGZhaWwgaWYgYSB0byBiZSBpbmNsdWRlZAorCSAgZmlsZSBjYW4gbm90IGJlIGZvdW5kLgorCS0gUmVtb3ZlIGhhcmRjb2Rpbmcgb2YgdGhlIFNUQU1QIGRpcmVjdG9yeS4gUGF0Y2gKKwkgIGNvdXJ0c2V5IHBIaWxpcHAgWmFiZWwKKwktIFRyYWNrIHRoZSBSREVQRU5EUyBvZiBlYWNoIHBhY2thZ2UgKHJwdXJkaWVAb3BlbmVkaGFuZC5jb20pCisJLSBJbnRyb2R1Y2UgQlVJTERfQUxMX0RFUFMgdG8gYnVpbGQgYWxsIFJERVBFTkRTLiBFLmcKKwkgIHRoaXMgaXMgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIE1ldGEgUGFja2FnZXMuCisJICAocnB1cmRpZUBvcGVuZWRoYW5kLmNvbSkuCisKK0NoYW5nZXMgaW4gQml0QmFrZSAxLjMuMjoKKwktIHJlaW50ZWdyYXRpb24gb2YgbWFrZS5weSBpbnRvIEJpdEJha2UKKwktIGJicmVhZCBpcyBnb25lLCB1c2UgYml0YmFrZSAtZQorCS0gbG90cyBvZiBzaGVsbCB1cGRhdGVzIGFuZCBidWdmaXhlcworCS0gSW50cm9kdWN0aW9uIG9mIHRoZSAuPSBhbmQgPS4gb3BlcmF0b3IKKwktIFNvcnQgdmFyaWFibGVzLCBrZXlzIGFuZCBncm91cHMgaW4gYml0ZG9jCisJLSBGaXggcmVncmVzc2lvbiBpbiB0aGUgaGFuZGxpbmcgb2YgQkJDT0xMRUNUSU9OUworCS0gVXBkYXRlIHRoZSBiaXRiYWtlIHVzZXJtYW51YWwKKworQ2hhbmdlcyBpbiBCaXRCYWtlIDEuMy4wOgorCS0gYWRkIGJpdGJha2UgaW50ZXJhY3RpdmUgc2hlbGwgKGJpdGJha2UgLWkpCisJLSByZWZhY3RvciBiaXRiYWtlIHV0aWxpdHkgaW4gT08gc3R5bGUKKwktIGtpbGwgZGVmYXVsdCBhcmd1bWVudHMgaW4gbWV0aG9kcyBpbiB0aGUgYmIuZGF0YSBtb2R1bGUKKwktIGtpbGwgZGVmYXVsdCBhcmd1bWVudHMgaW4gbWV0aG9kcyBpbiB0aGUgYmIuZmV0Y2ggbW9kdWxlCisJLSB0aGUgaHR0cC9odHRwcy9mdHAgZmV0Y2hlciB3aWxsIGZhaWwgaWYgdGhlIHRvIGJlIAorCSAgZG93bmxvYWRlZCBmaWxlIHdhcyBub3QgZm91bmQgaW4gRExfRElSICh0aGlzIGlzIG5lZWRlZAorCSAgdG8gYXZvaWQgdW5wYWNraW5nIHRoZSBzb3VyY2Vmb3JnZSBtaXJyb3IgcGFnZSkKKwktIFN3aXRjaCB0byBhIGNvdyBsaWtlIGRhdGEgaW5zdGFuY2UgZm9yIHBlcnNpc3RlbnQgYW5kIG5vbgorCSAgcGVyc2lzdGluZyBtb2RlIChjYWxsZWQgZGF0YV9zbWFydC5weSkKKwktIENoYW5nZWQgdGhlIGNhbGxiYWNrIG9mIGJiLm1ha2UuY29sbGVjdF9iYmZpbGVzIHRvIGNhcnJ5CisJICBhZGRpdGlvbmFsIHBhcmFtZXRlcnMKKwktIERyYXN0aWNhbGx5IHJlZHVjZWQgdGhlIGFtb3VudCBvZiBuZWVkZWQgUkFNIGJ5IG5vdCBob2xkaW5nCisJICBlYWNoIGRhdGEgaW5zdGFuY2UgaW4gbWVtb3J5IHdoZW4gdXNpbmcgYSBjYWNoZS9wZXJzaXN0ZW50CisJICBzdG9yYWdlCisKK0NoYW5nZXMgaW4gQml0QmFrZSAxLjIuMToKKwlUaGUgMS4yLjEgcmVsZWFzZSBpcyBtZWFudCBhcyBhIGludGVybWVkaWF0ZSByZWxlYXNlIHRvIGxheSB0aGUKKwlncm91bmQgZm9yIG1vcmUgcmFkaWNhbCBjaGFuZ2VzLiBUaGUgbW9zdCBub3RhYmxlIGNoYW5nZXMgYXJlOgorCisJLSBEbyBub3QgaGFyZGNvZGUge30sIHVzZSBiYi5kYXRhLmluaXQoKSBpbnN0ZWFkIGlmIHlvdSB3YW50IHRvCisJICBnZXQgYSBpbnN0YW5jZSBvZiBhIGRhdGEgY2xhc3MKKwktIGJiLmRhdGEuaW5pdCgpIGlzIGEgZmFjdG9yeSBhbmQgdGhlIG9sZCBiYi5kYXRhIG1ldGhvZHMgYXJlIGRlbGVnYXRlcworCS0gRG8gbm90IHVzZSBkZWVwY29weSB1c2UgYmIuZGF0YS5jcmVhdGVDb3B5KCkgaW5zdGVhZC4KKwktIFJlbW92ZWQgZGVmYXVsdCBhcmd1bWVudHMgaW4gYmIuZmV0Y2gKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL0hFQURFUiBiL3lvY3RvLXBva3kvYml0YmFrZS9IRUFERVIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg1OTI1NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9IRUFERVIKQEAgLTAsMCArMSwxOSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyMgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9MSUNFTlNFIGIveW9jdG8tcG9reS9iaXRiYWtlL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUwMTQwYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9MSUNFTlNFCkBAIC0wLDAgKzEsMTAgQEAKK0JpdEJha2UgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4wLiBTZWUgQ09QWUlORyBmb3IgZnVydGhlciBkZXRhaWxzLgorCitUaGUgZm9sbG93aW5nIGV4dGVybmFsIGNvbXBvbmVudHMgYXJlIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb2Z0d2FyZToKKworKiBUaGUgVG9hc3RlciBTaW1wbGUgVUkgYXBwbGljYXRpb24gaXMgYmFzZWQgdXBvbiB0aGUgRGphbmdvIHByb2plY3QgdGVtcGxhdGUsIHRoZSBmaWxlcyBvZiB3aGljaCBhcmUgY292ZXJlZCBieSB0aGUgQlNEIGxpY2Vuc2UgYW5kIGFyZSBjb3B5cmlnaHQgKGMpIERqYW5nbyBTb2Z0d2FyZQorRm91bmRhdGlvbiBhbmQgaW5kaXZpZHVhbCBjb250cmlidXRvcnMuCisKKyogVHdpdHRlciBCb290c3RyYXAgKGluY2x1ZGluZyBHbHlwaGljb25zKSwgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgMi4wLgorCisqIGpRdWVyeSBpcyByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZSBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lM2QxMzhiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlCkBAIC0wLDAgKzEsNTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBQaGlsIEJsdW5kZWxsCisjIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDUgTWljaGFlbCAnTWlja2V5JyBMYXVlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgICAgICAgIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisjIENvcHlyaWdodCAoQykgMjAwNSAgICAgICAgUk9BRCBHbWJICisjIENvcHlyaWdodCAoQykgMjAwNiAgICAgICAgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpYicpKQordHJ5OgorICAgIGltcG9ydCBiYgorZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBleGM6CisgICAgc3lzLmV4aXQoc3RyKGV4YykpCisKK2Zyb20gYmIgaW1wb3J0IGNvb2tlcmRhdGEKK2Zyb20gYmIubWFpbiBpbXBvcnQgYml0YmFrZV9tYWluLCBCaXRCYWtlQ29uZmlnUGFyYW1ldGVycywgQkJNYWluRXhjZXB0aW9uCisKK19fdmVyc2lvbl9fID0gIjEuMjcuMSIKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBpZiBfX3ZlcnNpb25fXyAhPSBiYi5fX3ZlcnNpb25fXzoKKyAgICAgICAgc3lzLmV4aXQoIkJpdGJha2UgY29yZSB2ZXJzaW9uIGFuZCBwcm9ncmFtIHZlcnNpb24gbWlzbWF0Y2ghIikKKyAgICB0cnk6CisgICAgICAgIHN5cy5leGl0KGJpdGJha2VfbWFpbihCaXRCYWtlQ29uZmlnUGFyYW1ldGVycyhzeXMuYXJndiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZXJkYXRhLkNvb2tlckNvbmZpZ3VyYXRpb24oKSkpCisgICAgZXhjZXB0IEJCTWFpbkV4Y2VwdGlvbiBhcyBlcnI6CisgICAgICAgIHN5cy5leGl0KGVycikKKyAgICBleGNlcHQgYmIuQkJIYW5kbGVkRXhjZXB0aW9uOgorICAgICAgICBzeXMuZXhpdCgxKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCisgICAgICAgIHN5cy5leGl0KDEpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2UtZGlmZnNpZ3MgYi95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2UtZGlmZnNpZ3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTk2ZjBiNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1kaWZmc2lncwpAQCAtMCwwICsxLDEzOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgYml0YmFrZS1kaWZmc2lncworIyBCaXRCYWtlIHRhc2sgc2lnbmF0dXJlIGRhdGEgY29tcGFyaXNvbiB1dGlsaXR5CisjCisjIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB3YXJuaW5ncworaW1wb3J0IGZubWF0Y2gKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IGxvZ2dpbmcKKworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKSksICdsaWInKSkKKworaW1wb3J0IGJiLnRpbmZvaWwKK2ltcG9ydCBiYi5zaWdnZW4KKworZGVmIGxvZ2dlcl9jcmVhdGUobmFtZSwgb3V0cHV0PXN5cy5zdGRlcnIpOgorICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKG5hbWUpCisgICAgY29uc29sZSA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihvdXRwdXQpCisgICAgZm9ybWF0ID0gYmIubXNnLkJCTG9nRm9ybWF0dGVyKCIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpCisgICAgaWYgb3V0cHV0LmlzYXR0eSgpOgorICAgICAgICBmb3JtYXQuZW5hYmxlX2NvbG9yKCkKKyAgICBjb25zb2xlLnNldEZvcm1hdHRlcihmb3JtYXQpCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIoY29uc29sZSkKKyAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgIHJldHVybiBsb2dnZXIKKworbG9nZ2VyID0gbG9nZ2VyX2NyZWF0ZSgnYml0YmFrZS1kaWZmc2lncycpCisKK2RlZiBmaW5kX2NvbXBhcmVfdGFzayhiYmhhbmRsZXIsIHBuLCB0YXNrbmFtZSk6CisgICAgIiIiIEZpbmQgdGhlIG1vc3QgcmVjZW50IHNpZ25hdHVyZSBmaWxlcyBmb3IgdGhlIHNwZWNpZmllZCBQTi90YXNrIGFuZCBjb21wYXJlIHRoZW0gIiIiCisKKyAgICBkZWYgZ2V0X2hhc2h2YWwoc2lnaW5mbyk6CisgICAgICAgIGlmIHNpZ2luZm8uZW5kc3dpdGgoJy5zaWdpbmZvJyk6CisgICAgICAgICAgICByZXR1cm4gc2lnaW5mby5ycGFydGl0aW9uKCc6JylbMl0ucGFydGl0aW9uKCdfJylbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzaWdpbmZvLnJwYXJ0aXRpb24oJy4nKVsyXQorCisgICAgaWYgbm90IGhhc2F0dHIoYmIuc2lnZ2VuLCAnZmluZF9zaWdpbmZvJyk6CisgICAgICAgIGxvZ2dlci5lcnJvcignTWV0YWRhdGEgZG9lcyBub3Qgc3VwcG9ydCBmaW5kaW5nIHNpZ25hdHVyZSBkYXRhIGZpbGVzJykKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGlmIG5vdCB0YXNrbmFtZS5zdGFydHN3aXRoKCdkb18nKToKKyAgICAgICAgdGFza25hbWUgPSAnZG9fJXMnICUgdGFza25hbWUKKworICAgIGZpbGVkYXRlcyA9IGJiLnNpZ2dlbi5maW5kX3NpZ2luZm8ocG4sIHRhc2tuYW1lLCBOb25lLCBiYmhhbmRsZXIuY29uZmlnX2RhdGEpCisgICAgbGF0ZXN0ZmlsZXMgPSBzb3J0ZWQoZmlsZWRhdGVzLmtleXMoKSwga2V5PWxhbWJkYSBmOiBmaWxlZGF0ZXNbZl0pWy0zOl0KKyAgICBpZiBub3QgbGF0ZXN0ZmlsZXM6CisgICAgICAgIGxvZ2dlci5lcnJvcignTm8gc2lnZGF0YSBmaWxlcyBmb3VuZCBtYXRjaGluZyAlcyAlcycgJSAocG4sIHRhc2tuYW1lKSkKKyAgICAgICAgc3lzLmV4aXQoMSkKKyAgICBlbGlmIGxlbihsYXRlc3RmaWxlcykgPCAyOgorICAgICAgICBsb2dnZXIuZXJyb3IoJ09ubHkgb25lIG1hdGNoaW5nIHNpZ2RhdGEgZmlsZSBmb3VuZCBmb3IgdGhlIHNwZWNpZmllZCB0YXNrICglcyAlcyknICUgKHBuLCB0YXNrbmFtZSkpCisgICAgICAgIHN5cy5leGl0KDEpCisgICAgZWxzZToKKyAgICAgICAgIyBJdCdzIHBvc3NpYmxlIHRoYXQgbGF0ZXN0ZmlsZXMgY29udGFpbiAzIGVsZW1lbnRzIGFuZCB0aGUgZmlyc3QgdHdvIGhhdmUgdGhlIHNhbWUgaGFzaCB2YWx1ZS4KKyAgICAgICAgIyBJbiB0aGlzIGNhc2UsIHdlIGRlbGV0ZSB0aGUgc2Vjb25kIGVsZW1lbnQuCisgICAgICAgICMgVGhlIGFib3ZlIGNhc2UgaXMgYWN0dWFsbHkgdGhlIG1vc3QgY29tbW9uIG9uZS4gQmVjYXVzZSB3ZSBtYXkgaGF2ZSBzaWdkYXRhIGZpbGUgYW5kIHNpZ2luZm8KKyAgICAgICAgIyBmaWxlIGhhdmluZyB0aGUgc2FtZSBoYXNoIHZhbHVlLiBDb21wYXJpbmcgc3VjaCB0d28gZmlsZXMgbWFrZXMgbm8gc2Vuc2UuCisgICAgICAgIGlmIGxlbihsYXRlc3RmaWxlcykgPT0gMzoKKyAgICAgICAgICAgIGhhc2gwID0gZ2V0X2hhc2h2YWwobGF0ZXN0ZmlsZXNbMF0pCisgICAgICAgICAgICBoYXNoMSA9IGdldF9oYXNodmFsKGxhdGVzdGZpbGVzWzFdKQorICAgICAgICAgICAgaWYgaGFzaDAgPT0gaGFzaDE6CisgICAgICAgICAgICAgICAgbGF0ZXN0ZmlsZXMucG9wKDEpCisKKyAgICAgICAgIyBEZWZpbmUgcmVjdXJzaW9uIGNhbGxiYWNrCisgICAgICAgIGRlZiByZWN1cnNlY2Ioa2V5LCBoYXNoMSwgaGFzaDIpOgorICAgICAgICAgICAgaGFzaGVzID0gW2hhc2gxLCBoYXNoMl0KKyAgICAgICAgICAgIGhhc2hmaWxlcyA9IGJiLnNpZ2dlbi5maW5kX3NpZ2luZm8oa2V5LCBOb25lLCBoYXNoZXMsIGJiaGFuZGxlci5jb25maWdfZGF0YSkKKworICAgICAgICAgICAgcmVjb3V0ID0gW10KKyAgICAgICAgICAgIGlmIGxlbihoYXNoZmlsZXMpID09IDI6CisgICAgICAgICAgICAgICAgb3V0MiA9IGJiLnNpZ2dlbi5jb21wYXJlX3NpZ2ZpbGVzKGhhc2hmaWxlc1toYXNoMV0sIGhhc2hmaWxlc1toYXNoMl0sIHJlY3Vyc2VjYikKKyAgICAgICAgICAgICAgICByZWNvdXQuZXh0ZW5kKGxpc3QoJyAgJyArIGwgZm9yIGwgaW4gb3V0MikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlY291dC5hcHBlbmQoIlVuYWJsZSB0byBmaW5kIG1hdGNoaW5nIHNpZ2RhdGEgZm9yICVzIHdpdGggaGFzaGVzICVzIG9yICVzIiAlIChrZXksIGhhc2gxLCBoYXNoMikpCisKKyAgICAgICAgICAgIHJldHVybiByZWNvdXQKKworICAgICAgICAjIFJlY3Vyc2UgaW50byBzaWduYXR1cmUgY29tcGFyaXNvbgorICAgICAgICBvdXRwdXQgPSBiYi5zaWdnZW4uY29tcGFyZV9zaWdmaWxlcyhsYXRlc3RmaWxlc1swXSwgbGF0ZXN0ZmlsZXNbMV0sIHJlY3Vyc2VjYikKKyAgICAgICAgaWYgb3V0cHV0OgorICAgICAgICAgICAgcHJpbnQgJ1xuJy5qb2luKG91dHB1dCkKKyAgICBzeXMuZXhpdCgwKQorCisKKworcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgIGRlc2NyaXB0aW9uID0gIkNvbXBhcmVzIHNpZ2luZm8vc2lnZGF0YSBmaWxlcyB3cml0dGVuIG91dCBieSBCaXRCYWtlIiwKKyAgICB1c2FnZSA9ICIiIgorICAlcHJvZyAtdCByZWNpcGVuYW1lIHRhc2tuYW1lCisgICVwcm9nIHNpZ2RhdGFmaWxlMSBzaWdkYXRhZmlsZTIKKyAgJXByb2cgc2lnZGF0YWZpbGUxIiIiKQorCitwYXJzZXIuYWRkX29wdGlvbigiLXQiLCAiLS10YXNrIiwKKyAgICAgICAgaGVscCA9ICJmaW5kIHRoZSBzaWduYXR1cmUgZGF0YSBmaWxlcyBmb3IgbGFzdCB0d28gcnVucyBvZiB0aGUgc3BlY2lmaWVkIHRhc2sgYW5kIGNvbXBhcmUgdGhlbSIsCisgICAgICAgIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJ0YXNrYXJncyIsIG5hcmdzPTIsIG1ldGF2YXI9J3JlY2lwZW5hbWUgdGFza25hbWUnKQorCitvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3YpCisKK2lmIG9wdGlvbnMudGFza2FyZ3M6CisgICAgdGluZm9pbCA9IGJiLnRpbmZvaWwuVGluZm9pbCgpCisgICAgdGluZm9pbC5wcmVwYXJlKGNvbmZpZ19vbmx5ID0gVHJ1ZSkKKyAgICBmaW5kX2NvbXBhcmVfdGFzayh0aW5mb2lsLCBvcHRpb25zLnRhc2thcmdzWzBdLCBvcHRpb25zLnRhc2thcmdzWzFdKQorZWxzZToKKyAgICBpZiBsZW4oYXJncykgPT0gMToKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgIGVsc2U6CisgICAgICAgIGltcG9ydCBjUGlja2xlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAyOgorICAgICAgICAgICAgICAgIG91dHB1dCA9IGJiLnNpZ2dlbi5kdW1wX3NpZ2ZpbGUoc3lzLmFyZ3ZbMV0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG91dHB1dCA9IGJiLnNpZ2dlbi5jb21wYXJlX3NpZ2ZpbGVzKHN5cy5hcmd2WzFdLCBzeXMuYXJndlsyXSkKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzdHIoZSkpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBleGNlcHQgY1BpY2tsZS5VbnBpY2tsaW5nRXJyb3IsIEVPRkVycm9yOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdJbnZhbGlkIHNpZ25hdHVyZSBkYXRhIC0gZW5zdXJlIHlvdSBhcmUgc3BlY2lmeWluZyBzaWdkYXRhL3NpZ2luZm8gZmlsZXMnKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICBpZiBvdXRwdXQ6CisgICAgICAgICAgICBwcmludCAnXG4nLmpvaW4ob3V0cHV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLWR1bXBzaWcgYi95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2UtZHVtcHNpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NTZkOTNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLWR1bXBzaWcKQEAgLTAsMCArMSw2NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgYml0YmFrZS1kdW1wc2lnCisjIEJpdEJha2UgdGFzayBzaWduYXR1cmUgZHVtcCB1dGlsaXR5CisjCisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgd2FybmluZ3MKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IGxvZ2dpbmcKKworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKSksICdsaWInKSkKKworaW1wb3J0IGJiLnNpZ2dlbgorCitkZWYgbG9nZ2VyX2NyZWF0ZShuYW1lLCBvdXRwdXQ9c3lzLnN0ZGVycik6CisgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIobmFtZSkKKyAgICBjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKG91dHB1dCkKKyAgICBmb3JtYXQgPSBiYi5tc2cuQkJMb2dGb3JtYXR0ZXIoIiUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIikKKyAgICBpZiBvdXRwdXQuaXNhdHR5KCk6CisgICAgICAgIGZvcm1hdC5lbmFibGVfY29sb3IoKQorICAgIGNvbnNvbGUuc2V0Rm9ybWF0dGVyKGZvcm1hdCkKKyAgICBsb2dnZXIuYWRkSGFuZGxlcihjb25zb2xlKQorICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCisgICAgcmV0dXJuIGxvZ2dlcgorCitsb2dnZXIgPSBsb2dnZXJfY3JlYXRlKCdiaXRiYWtlLWR1bXBzaWcnKQorCitwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoCisgICAgZGVzY3JpcHRpb24gPSAiRHVtcHMgc2lnaW5mby9zaWdkYXRhIGZpbGVzIHdyaXR0ZW4gb3V0IGJ5IEJpdEJha2UiLAorICAgIHVzYWdlID0gIiIiCisgICVwcm9nIHNpZ2RhdGFmaWxlIiIiKQorCitvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3YpCisKK2lmIGxlbihhcmdzKSA9PSAxOgorICAgIHBhcnNlci5wcmludF9oZWxwKCkKK2Vsc2U6CisgICAgaW1wb3J0IGNQaWNrbGUKKyAgICB0cnk6CisgICAgICAgIG91dHB1dCA9IGJiLnNpZ2dlbi5kdW1wX3NpZ2ZpbGUoYXJnc1sxXSkKKyAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGUpKQorICAgICAgICBzeXMuZXhpdCgxKQorICAgIGV4Y2VwdCBjUGlja2xlLlVucGlja2xpbmdFcnJvciwgRU9GRXJyb3I6CisgICAgICAgIGxvZ2dlci5lcnJvcignSW52YWxpZCBzaWduYXR1cmUgZGF0YSAtIGVuc3VyZSB5b3UgYXJlIHNwZWNpZnlpbmcgYSBzaWdkYXRhL3NpZ2luZm8gZmlsZScpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBvdXRwdXQ6CisgICAgICAgIHByaW50ICdcbicuam9pbihvdXRwdXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2UtbGF5ZXJzIGIveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLWxheWVycwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYjEzMDQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLWxheWVycwpAQCAtMCwwICsxLDEwNzIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIFRoaXMgc2NyaXB0IGhhcyBzdWJjb21tYW5kcyB3aGljaCBvcGVyYXRlIGFnYWluc3QgeW91ciBiaXRiYWtlIGxheWVycywgZWl0aGVyCisjIGRpc3BsYXlpbmcgdXNlZnVsIGluZm9ybWF0aW9uLCBvciBhY3RpbmcgYWdhaW5zdCB0aGVtLgorIyBTZWUgdGhlIGhlbHAgb3V0cHV0IGZvciBkZXRhaWxzIG9uIGF2YWlsYWJsZSBjb21tYW5kcy4KKworIyBDb3B5cmlnaHQgKEMpIDIwMTEgTWVudG9yIEdyYXBoaWNzIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgZm5tYXRjaAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IHJlCitpbXBvcnQgaHR0cGxpYiwgdXJscGFyc2UsIGpzb24KK2ltcG9ydCBzdWJwcm9jZXNzCisKK2JpbmRpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKK3RvcGRpciA9IG9zLnBhdGguZGlybmFtZShiaW5kaXIpCitzeXMucGF0aFswOjBdID0gW29zLnBhdGguam9pbih0b3BkaXIsICdsaWInKV0KKworaW1wb3J0IGJiLmNhY2hlCitpbXBvcnQgYmIuY29va2VyCitpbXBvcnQgYmIucHJvdmlkZXJzCitpbXBvcnQgYmIudXRpbHMKK2ltcG9ydCBiYi50aW5mb2lsCisKKworZGVmIGxvZ2dlcl9jcmVhdGUobmFtZSwgb3V0cHV0PXN5cy5zdGRlcnIpOgorICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKG5hbWUpCisgICAgY29uc29sZSA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihvdXRwdXQpCisgICAgZm9ybWF0ID0gYmIubXNnLkJCTG9nRm9ybWF0dGVyKCIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpCisgICAgaWYgb3V0cHV0LmlzYXR0eSgpOgorICAgICAgICBmb3JtYXQuZW5hYmxlX2NvbG9yKCkKKyAgICBjb25zb2xlLnNldEZvcm1hdHRlcihmb3JtYXQpCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIoY29uc29sZSkKKyAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgIHJldHVybiBsb2dnZXIKKworbG9nZ2VyID0gbG9nZ2VyX2NyZWF0ZSgnYml0YmFrZS1sYXllcnMnLCBzeXMuc3Rkb3V0KQorCitjbGFzcyBVc2VyRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2NsYXNzIENvbW1hbmRzKCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmJiaGFuZGxlciA9IE5vbmUKKyAgICAgICAgc2VsZi5iYmxheWVycyA9IFtdCisKKyAgICBkZWYgaW5pdF9iYmhhbmRsZXIoc2VsZiwgY29uZmlnX29ubHkgPSBGYWxzZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLmJiaGFuZGxlcjoKKyAgICAgICAgICAgIHNlbGYuYmJoYW5kbGVyID0gYmIudGluZm9pbC5UaW5mb2lsKHRyYWNraW5nPVRydWUpCisgICAgICAgICAgICBzZWxmLmJibGF5ZXJzID0gKHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLmdldFZhcignQkJMQVlFUlMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICAgICAgc2VsZi5iYmhhbmRsZXIucHJlcGFyZShjb25maWdfb25seSkKKyAgICAgICAgICAgIGxheWVyY29uZnMgPSBzZWxmLmJiaGFuZGxlci5jb25maWdfZGF0YS52YXJoaXN0b3J5LmdldF92YXJpYWJsZV9pdGVtc19maWxlcygnQkJGSUxFX0NPTExFQ1RJT05TJywgc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEpCisgICAgICAgICAgICBzZWxmLmJiZmlsZV9jb2xsZWN0aW9ucyA9IHtsYXllcjogb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShwYXRoKSkgZm9yIGxheWVyLCBwYXRoIGluIGxheWVyY29uZnMuaXRlcml0ZW1zKCl9CisKKworICAgIGRlZiBkb19zaG93X2xheWVycyhzZWxmLCBhcmdzKToKKyAgICAgICAgIiIic2hvdyBjdXJyZW50IGNvbmZpZ3VyZWQgbGF5ZXJzIiIiCisgICAgICAgIHNlbGYuaW5pdF9iYmhhbmRsZXIoY29uZmlnX29ubHkgPSBUcnVlKQorICAgICAgICBsb2dnZXIucGxhaW4oIiVzICAlcyAgJXMiICUgKCJsYXllciIubGp1c3QoMjApLCAicGF0aCIubGp1c3QoNDApLCAicHJpb3JpdHkiKSkKKyAgICAgICAgbG9nZ2VyLnBsYWluKCc9JyAqIDc0KQorICAgICAgICBmb3IgbGF5ZXIsIF8sIHJlZ2V4LCBwcmkgaW4gc2VsZi5iYmhhbmRsZXIuY29va2VyLnJlY2lwZWNhY2hlLmJiZmlsZV9jb25maWdfcHJpb3JpdGllczoKKyAgICAgICAgICAgIGxheWVyZGlyID0gc2VsZi5iYmZpbGVfY29sbGVjdGlvbnMuZ2V0KGxheWVyLCBOb25lKQorICAgICAgICAgICAgbGF5ZXJuYW1lID0gc2VsZi5nZXRfbGF5ZXJfbmFtZShsYXllcmRpcikKKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiJXMgICVzICAlZCIgJSAobGF5ZXJuYW1lLmxqdXN0KDIwKSwgbGF5ZXJkaXIubGp1c3QoNDApLCBwcmkpKQorCisKKyAgICBkZWYgZG9fYWRkX2xheWVyKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJBZGQgYSBsYXllciB0byBiYmxheWVycy5jb25mCisKK0FkZHMgdGhlIHNwZWNpZmllZCBsYXllciB0byBiYmxheWVycy5jb25mCisiIiIKKyAgICAgICAgbGF5ZXJkaXIgPSBvcy5wYXRoLmFic3BhdGgoYXJncy5sYXllcmRpcikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGxheWVyZGlyKToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlNwZWNpZmllZCBsYXllciBkaXJlY3RvcnkgZG9lc24ndCBleGlzdFxuIikKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgbGF5ZXJfY29uZiA9IG9zLnBhdGguam9pbihsYXllcmRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhsYXllcl9jb25mKToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlNwZWNpZmllZCBsYXllciBkaXJlY3RvcnkgZG9lc24ndCBjb250YWluIGEgY29uZi9sYXllci5jb25mIGZpbGVcbiIpCisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIGJibGF5ZXJzX2NvbmYgPSBvcy5wYXRoLmpvaW4oJ2NvbmYnLCAnYmJsYXllcnMuY29uZicpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhiYmxheWVyc19jb25mKToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlVuYWJsZSB0byBmaW5kIGJibGF5ZXJzLmNvbmZcbiIpCisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIChub3RhZGRlZCwgXykgPSBiYi51dGlscy5lZGl0X2JibGF5ZXJzX2NvbmYoYmJsYXllcnNfY29uZiwgbGF5ZXJkaXIsIE5vbmUpCisgICAgICAgIGlmIG5vdGFkZGVkOgorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gbm90YWRkZWQ6CisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiU3BlY2lmaWVkIGxheWVyICVzIGlzIGFscmVhZHkgaW4gQkJMQVlFUlNcbiIgJSBpdGVtKQorCisKKyAgICBkZWYgZG9fcmVtb3ZlX2xheWVyKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJSZW1vdmUgYSBsYXllciBmcm9tIGJibGF5ZXJzLmNvbmYKKworUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGxheWVyIGZyb20gYmJsYXllcnMuY29uZgorIiIiCisgICAgICAgIGJibGF5ZXJzX2NvbmYgPSBvcy5wYXRoLmpvaW4oJ2NvbmYnLCAnYmJsYXllcnMuY29uZicpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhiYmxheWVyc19jb25mKToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlVuYWJsZSB0byBmaW5kIGJibGF5ZXJzLmNvbmZcbiIpCisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIGlmIGFyZ3MubGF5ZXJkaXIuc3RhcnRzd2l0aCgnKicpOgorICAgICAgICAgICAgbGF5ZXJkaXIgPSBhcmdzLmxheWVyZGlyCisgICAgICAgIGVsaWYgbm90ICcvJyBpbiBhcmdzLmxheWVyZGlyOgorICAgICAgICAgICAgbGF5ZXJkaXIgPSAnKi8lcycgJSBhcmdzLmxheWVyZGlyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsYXllcmRpciA9IG9zLnBhdGguYWJzcGF0aChhcmdzLmxheWVyZGlyKQorICAgICAgICAoXywgbm90cmVtb3ZlZCkgPSBiYi51dGlscy5lZGl0X2JibGF5ZXJzX2NvbmYoYmJsYXllcnNfY29uZiwgTm9uZSwgbGF5ZXJkaXIpCisgICAgICAgIGlmIG5vdHJlbW92ZWQ6CisgICAgICAgICAgICBmb3IgaXRlbSBpbiBub3RyZW1vdmVkOgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIk5vIGxheWVycyBtYXRjaGluZyAlcyBmb3VuZCBpbiBCQkxBWUVSU1xuIiAlIGl0ZW0pCisgICAgICAgICAgICByZXR1cm4gMQorCisKKyAgICBkZWYgZ2V0X2pzb25fZGF0YShzZWxmLCBhcGl1cmwpOgorICAgICAgICBwcm94eV9zZXR0aW5ncyA9IG9zLmVudmlyb24uZ2V0KCJodHRwX3Byb3h5IiwgTm9uZSkKKyAgICAgICAgY29ubiA9IE5vbmUKKyAgICAgICAgX3BhcnNlZHVybCA9IHVybHBhcnNlLnVybHBhcnNlKGFwaXVybCkKKyAgICAgICAgcGF0aCA9IF9wYXJzZWR1cmwucGF0aAorICAgICAgICBxdWVyeSA9IF9wYXJzZWR1cmwucXVlcnkKKyAgICAgICAgZGVmIHBhcnNlX3VybCh1cmwpOgorICAgICAgICAgICAgcGFyc2VkdXJsID0gdXJscGFyc2UudXJscGFyc2UodXJsKQorICAgICAgICAgICAgaWYgcGFyc2VkdXJsLm5ldGxvY1swXSA9PSAnWyc6CisgICAgICAgICAgICAgICAgaG9zdCwgcG9ydCA9IHBhcnNlZHVybC5uZXRsb2NbMTpdLnNwbGl0KCddJywgMSkKKyAgICAgICAgICAgICAgICBpZiAnOicgaW4gcG9ydDoKKyAgICAgICAgICAgICAgICAgICAgcG9ydCA9IHBvcnQucnNwbGl0KCc6JywgMSlbMV0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwb3J0ID0gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBwYXJzZWR1cmwubmV0bG9jLmNvdW50KCc6JykgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgKGhvc3QsIHBvcnQpID0gcGFyc2VkdXJsLm5ldGxvYy5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaG9zdCA9IHBhcnNlZHVybC5uZXRsb2MKKyAgICAgICAgICAgICAgICAgICAgcG9ydCA9IE5vbmUKKyAgICAgICAgICAgIHJldHVybiAoaG9zdCwgODAgaWYgcG9ydCBpcyBOb25lIGVsc2UgaW50KHBvcnQpKQorCisgICAgICAgIGlmIHByb3h5X3NldHRpbmdzIGlzIE5vbmU6CisgICAgICAgICAgICBob3N0LCBwb3J0ID0gcGFyc2VfdXJsKGFwaXVybCkKKyAgICAgICAgICAgIGNvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKGhvc3QsIHBvcnQpCisgICAgICAgICAgICBjb25uLnJlcXVlc3QoIkdFVCIsIHBhdGggKyAiPyIgKyBxdWVyeSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGhvc3QsIHBvcnQgPSBwYXJzZV91cmwocHJveHlfc2V0dGluZ3MpCisgICAgICAgICAgICBjb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbihob3N0LCBwb3J0KQorICAgICAgICAgICAgY29ubi5yZXF1ZXN0KCJHRVQiLCBhcGl1cmwpCisKKyAgICAgICAgciA9IGNvbm4uZ2V0cmVzcG9uc2UoKQorICAgICAgICBpZiByLnN0YXR1cyAhPSAyMDA6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byByZWFkICIgKyBwYXRoICsgIjogJWQgJXMiICUgKHIuc3RhdHVzLCByLnJlYXNvbikpCisgICAgICAgIHJldHVybiBqc29uLmxvYWRzKHIucmVhZCgpKQorCisKKyAgICBkZWYgZ2V0X2xheWVyX2RlcHMoc2VsZiwgbGF5ZXJuYW1lLCBsYXllcml0ZW1zLCBsYXllcmJyYW5jaGVzLCBsYXllcmRlcGVuZGVuY2llcywgYnJhbmNobnVtLCBzZWxmbmFtZT1GYWxzZSk6CisgICAgICAgIGRlZiBsYXllcml0ZW1zX2luZm9faWQoaXRlbXNfbmFtZSwgbGF5ZXJpdGVtcyk6CisgICAgICAgICAgICBsaXRlbXNfaWQgPSBOb25lCisgICAgICAgICAgICBmb3IgbGkgaW4gbGF5ZXJpdGVtczoKKyAgICAgICAgICAgICAgICBpZiBsaVsnbmFtZSddID09IGl0ZW1zX25hbWU6CisgICAgICAgICAgICAgICAgICAgIGxpdGVtc19pZCA9IGxpWydpZCddCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICByZXR1cm4gbGl0ZW1zX2lkCisKKyAgICAgICAgZGVmIGxheWVyYnJhbmNoZXNfaW5mbyhpdGVtc19pZCwgbGF5ZXJicmFuY2hlcyk6CisgICAgICAgICAgICBsYnJhbmNoID0ge30KKyAgICAgICAgICAgIGZvciBsYiBpbiBsYXllcmJyYW5jaGVzOgorICAgICAgICAgICAgICAgIGlmIGxiWydsYXllciddID09IGl0ZW1zX2lkIGFuZCBsYlsnYnJhbmNoJ10gPT0gYnJhbmNobnVtOgorICAgICAgICAgICAgICAgICAgICBsYnJhbmNoWydpZCddID0gbGJbJ2lkJ10KKyAgICAgICAgICAgICAgICAgICAgbGJyYW5jaFsndmNzX3N1YmRpciddID0gbGJbJ3Zjc19zdWJkaXInXQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcmV0dXJuIGxicmFuY2gKKworICAgICAgICBkZWYgbGF5ZXJkZXBlbmRlbmNpZXNfaW5mbyhsYl9pZCwgbGF5ZXJkZXBlbmRlbmNpZXMpOgorICAgICAgICAgICAgbGRfZGVwcyA9IFtdCisgICAgICAgICAgICBmb3IgbGQgaW4gbGF5ZXJkZXBlbmRlbmNpZXM6CisgICAgICAgICAgICAgICAgaWYgbGRbJ2xheWVyYnJhbmNoJ10gPT0gbGJfaWQgYW5kIG5vdCBsZFsnZGVwZW5kZW5jeSddIGluIGxkX2RlcHM6CisgICAgICAgICAgICAgICAgICAgIGxkX2RlcHMuYXBwZW5kKGxkWydkZXBlbmRlbmN5J10pCisgICAgICAgICAgICBpZiBub3QgbGRfZGVwczoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlRoZSBkZXBlbmRlbmN5IG9mIGxheWVyRGVwZW5kZW5jaWVzIGlzIG5vdCBmb3VuZC4iKQorICAgICAgICAgICAgcmV0dXJuIGxkX2RlcHMKKworICAgICAgICBkZWYgbGF5ZXJpdGVtc19pbmZvX25hbWVfc3ViZGlyKGl0ZW1zX2lkLCBsYXllcml0ZW1zKToKKyAgICAgICAgICAgIGxpdGVtcyA9IHt9CisgICAgICAgICAgICBmb3IgbGkgaW4gbGF5ZXJpdGVtczoKKyAgICAgICAgICAgICAgICBpZiBsaVsnaWQnXSA9PSBpdGVtc19pZDoKKyAgICAgICAgICAgICAgICAgICAgbGl0ZW1zWyd2Y3NfdXJsJ10gPSBsaVsndmNzX3VybCddCisgICAgICAgICAgICAgICAgICAgIGxpdGVtc1snbmFtZSddID0gbGlbJ25hbWUnXQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcmV0dXJuIGxpdGVtcworCisgICAgICAgIGlmIHNlbGZuYW1lOgorICAgICAgICAgICAgc2VsZmlkID0gbGF5ZXJpdGVtc19pbmZvX2lkKGxheWVybmFtZSwgbGF5ZXJpdGVtcykKKyAgICAgICAgICAgIGxiaW5mbyA9IGxheWVyYnJhbmNoZXNfaW5mbyhzZWxmaWQsIGxheWVyYnJhbmNoZXMpCisgICAgICAgICAgICBpZiBsYmluZm86CisgICAgICAgICAgICAgICAgc2VsZnN1YmRpciA9IGxiaW5mb1sndmNzX3N1YmRpciddCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiJXMgaXMgbm90IGZvdW5kIGluIHRoZSBzcGVjaWZpZWQgYnJhbmNoIiAlIGxheWVybmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGZ1cmwgPSBsYXllcml0ZW1zX2luZm9fbmFtZV9zdWJkaXIoc2VsZmlkLCBsYXllcml0ZW1zKVsndmNzX3VybCddCisgICAgICAgICAgICBpZiBzZWxmdXJsOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmdXJsLCBzZWxmc3ViZGlyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ2Fubm90IGdldCBsYXllciAlcyBnaXQgcmVwbyBhbmQgc3ViZGlyIiAlIGxheWVybmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbGRpY3QgPSB7fQorICAgICAgICBpdGVtc2lkID0gbGF5ZXJpdGVtc19pbmZvX2lkKGxheWVybmFtZSwgbGF5ZXJpdGVtcykKKyAgICAgICAgaWYgbm90IGl0ZW1zaWQ6CisgICAgICAgICAgICByZXR1cm4gbGF5ZXJuYW1lLCBOb25lCisgICAgICAgIGxiaWQgPSBsYXllcmJyYW5jaGVzX2luZm8oaXRlbXNpZCwgbGF5ZXJicmFuY2hlcykKKyAgICAgICAgaWYgbGJpZDoKKyAgICAgICAgICAgIGxiaWQgPSBsYXllcmJyYW5jaGVzX2luZm8oaXRlbXNpZCwgbGF5ZXJicmFuY2hlcylbJ2lkJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiJXMgaXMgbm90IGZvdW5kIGluIHRoZSBzcGVjaWZpZWQgYnJhbmNoIiAlIGxheWVybmFtZSkKKyAgICAgICAgICAgIHJldHVybiBOb25lLCBOb25lCisgICAgICAgIGZvciBkZXBlbmRlbmN5IGluIGxheWVyZGVwZW5kZW5jaWVzX2luZm8obGJpZCwgbGF5ZXJkZXBlbmRlbmNpZXMpOgorICAgICAgICAgICAgbG5hbWUgPSBsYXllcml0ZW1zX2luZm9fbmFtZV9zdWJkaXIoZGVwZW5kZW5jeSwgbGF5ZXJpdGVtcylbJ25hbWUnXQorICAgICAgICAgICAgbHVybCA9IGxheWVyaXRlbXNfaW5mb19uYW1lX3N1YmRpcihkZXBlbmRlbmN5LCBsYXllcml0ZW1zKVsndmNzX3VybCddCisgICAgICAgICAgICBsc3ViZGlyID0gbGF5ZXJicmFuY2hlc19pbmZvKGRlcGVuZGVuY3ksIGxheWVyYnJhbmNoZXMpWyd2Y3Nfc3ViZGlyJ10KKyAgICAgICAgICAgIGxkaWN0W2xuYW1lXSA9IGx1cmwsIGxzdWJkaXIKKyAgICAgICAgcmV0dXJuIE5vbmUsIGxkaWN0CisKKworICAgIGRlZiBnZXRfZmV0Y2hfbGF5ZXIoc2VsZiwgZmV0Y2hkaXIsIHVybCwgc3ViZGlyLCBmZXRjaF9sYXllcik6CisgICAgICAgIGxheWVybmFtZSA9IHNlbGYuZ2V0X2xheWVyX25hbWUodXJsKQorICAgICAgICBpZiBvcy5wYXRoLnNwbGl0ZXh0KGxheWVybmFtZSlbMV0gPT0gJy5naXQnOgorICAgICAgICAgICAgbGF5ZXJuYW1lID0gb3MucGF0aC5zcGxpdGV4dChsYXllcm5hbWUpWzBdCisgICAgICAgIHJlcG9kaXIgPSBvcy5wYXRoLmpvaW4oZmV0Y2hkaXIsIGxheWVybmFtZSkKKyAgICAgICAgbGF5ZXJkaXIgPSBvcy5wYXRoLmpvaW4ocmVwb2Rpciwgc3ViZGlyKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocmVwb2Rpcik6CisgICAgICAgICAgICBpZiBmZXRjaF9sYXllcjoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzdWJwcm9jZXNzLmNhbGwoJ2dpdCBjbG9uZSAlcyAlcycgJSAodXJsLCByZXBvZGlyKSwgc2hlbGwgPSBUcnVlKQorICAgICAgICAgICAgICAgIGlmIHJlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJGYWlsZWQgdG8gZG93bmxvYWQgJXMiICUgdXJsKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXllcm5hbWUsIGxheWVyZGlyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiUmVwb3NpdG9yeSAlcyBuZWVkcyB0byBiZSBmZXRjaGVkIiAlIHVybCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbGF5ZXJuYW1lLCBsYXllcmRpcgorICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKGxheWVyZGlyKToKKyAgICAgICAgICAgIHJldHVybiBsYXllcm5hbWUsIGxheWVyZGlyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIiVzIGlzIG5vdCBpbiAlcyIgJSAodXJsLCBzdWJkaXIpKQorICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorCisKKyAgICBkZWYgZG9fbGF5ZXJpbmRleF9mZXRjaChzZWxmLCBhcmdzKToKKyAgICAgICAgIiIiRmV0Y2hlcyBhIGxheWVyIGZyb20gYSBsYXllciBpbmRleCBhbG9uZyB3aXRoIGl0cyBkZXBlbmRlbnQgbGF5ZXJzLCBhbmQgYWRkcyB0aGVtIHRvIGNvbmYvYmJsYXllcnMuY29uZi4KKyIiIgorICAgICAgICBzZWxmLmluaXRfYmJoYW5kbGVyKGNvbmZpZ19vbmx5ID0gVHJ1ZSkKKyAgICAgICAgYXBpdXJsID0gc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQkxBWUVSU19MQVlFUklOREVYX1VSTCcsIFRydWUpCisgICAgICAgIGlmIG5vdCBhcGl1cmw6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNhbm5vdCBnZXQgQkJMQVlFUlNfTEFZRVJJTkRFWF9VUkwiKQorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGFwaXVybFstMV0gIT0gJy8nOgorICAgICAgICAgICAgICAgIGFwaXVybCArPSAnLycKKyAgICAgICAgICAgIGFwaXVybCArPSAiYXBpLyIKKyAgICAgICAgYXBpbGlua3MgPSBzZWxmLmdldF9qc29uX2RhdGEoYXBpdXJsKQorICAgICAgICBicmFuY2hlcyA9IHNlbGYuZ2V0X2pzb25fZGF0YShhcGlsaW5rc1snYnJhbmNoZXMnXSkKKworICAgICAgICBicmFuY2hudW0gPSAwCisgICAgICAgIGZvciBicmFuY2ggaW4gYnJhbmNoZXM6CisgICAgICAgICAgICBpZiBicmFuY2hbJ25hbWUnXSA9PSBhcmdzLmJyYW5jaDoKKyAgICAgICAgICAgICAgICBicmFuY2hudW0gPSBicmFuY2hbJ2lkJ10KKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBicmFuY2hudW0gPT0gMDoKKyAgICAgICAgICAgIHZhbGlkYnJhbmNoZXMgPSAnLCAnLmpvaW4oW2JyYW5jaFsnbmFtZSddIGZvciBicmFuY2ggaW4gYnJhbmNoZXNdKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdJbnZhbGlkIGxheWVyIGJyYW5jaCBuYW1lICIlcyIuIFZhbGlkIGJyYW5jaGVzOiAlcycgJSAoYXJncy5icmFuY2gsIHZhbGlkYnJhbmNoZXMpKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBpZ25vcmVfbGF5ZXJzID0gW10KKyAgICAgICAgZm9yIGNvbGxlY3Rpb24gaW4gc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQkZJTEVfQ09MTEVDVElPTlMnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgbG5hbWUgPSBzZWxmLmJiaGFuZGxlci5jb25maWdfZGF0YS5nZXRWYXIoJ0JCTEFZRVJTX0xBWUVSSU5ERVhfTkFNRV8lcycgJSBjb2xsZWN0aW9uLCBUcnVlKQorICAgICAgICAgICAgaWYgbG5hbWU6CisgICAgICAgICAgICAgICAgaWdub3JlX2xheWVycy5hcHBlbmQobG5hbWUpCisKKyAgICAgICAgaWYgYXJncy5pZ25vcmU6CisgICAgICAgICAgICBpZ25vcmVfbGF5ZXJzLmV4dGVuZChhcmdzLmlnbm9yZS5zcGxpdCgnLCcpKQorCisgICAgICAgIGxheWVyaXRlbXMgPSBzZWxmLmdldF9qc29uX2RhdGEoYXBpbGlua3NbJ2xheWVySXRlbXMnXSkKKyAgICAgICAgbGF5ZXJicmFuY2hlcyA9IHNlbGYuZ2V0X2pzb25fZGF0YShhcGlsaW5rc1snbGF5ZXJCcmFuY2hlcyddKQorICAgICAgICBsYXllcmRlcGVuZGVuY2llcyA9IHNlbGYuZ2V0X2pzb25fZGF0YShhcGlsaW5rc1snbGF5ZXJEZXBlbmRlbmNpZXMnXSkKKyAgICAgICAgaW52YWx1ZW5hbWVzID0gW10KKyAgICAgICAgcmVwb3VybHMgPSB7fQorICAgICAgICBwcmludGxheWVycyA9IFtdCisgICAgICAgIGRlZiBxdWVyeV9kZXBlbmRlbmNpZXMobGF5ZXJzLCBsYXllcml0ZW1zLCBsYXllcmJyYW5jaGVzLCBsYXllcmRlcGVuZGVuY2llcywgYnJhbmNobnVtKToKKyAgICAgICAgICAgIGRlcHNsYXllciA9IFtdCisgICAgICAgICAgICBmb3IgbGF5ZXJuYW1lIGluIGxheWVyczoKKyAgICAgICAgICAgICAgICBpbnZhbHVlbmFtZSwgbGF5ZXJkaWN0ID0gc2VsZi5nZXRfbGF5ZXJfZGVwcyhsYXllcm5hbWUsIGxheWVyaXRlbXMsIGxheWVyYnJhbmNoZXMsIGxheWVyZGVwZW5kZW5jaWVzLCBicmFuY2hudW0pCisgICAgICAgICAgICAgICAgaWYgbGF5ZXJkaWN0OgorICAgICAgICAgICAgICAgICAgICByZXBvdXJsc1tsYXllcm5hbWVdID0gc2VsZi5nZXRfbGF5ZXJfZGVwcyhsYXllcm5hbWUsIGxheWVyaXRlbXMsIGxheWVyYnJhbmNoZXMsIGxheWVyZGVwZW5kZW5jaWVzLCBicmFuY2hudW0sIHNlbGZuYW1lPVRydWUpCisgICAgICAgICAgICAgICAgICAgIGZvciBsYXllciBpbiBsYXllcmRpY3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGF5ZXIgaW4gaWdub3JlX2xheWVyczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBzbGF5ZXIuYXBwZW5kKGxheWVyKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRsYXllcnMuYXBwZW5kKChsYXllcm5hbWUsIGxheWVyLCBsYXllcmRpY3RbbGF5ZXJdWzBdLCBsYXllcmRpY3RbbGF5ZXJdWzFdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsYXllciBpbiBpZ25vcmVfbGF5ZXJzIGFuZCBub3QgbGF5ZXIgaW4gcmVwb3VybHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3VybHNbbGF5ZXJdID0gKGxheWVyZGljdFtsYXllcl1bMF0sIGxheWVyZGljdFtsYXllcl1bMV0pCisgICAgICAgICAgICAgICAgaWYgaW52YWx1ZW5hbWUgYW5kIG5vdCBpbnZhbHVlbmFtZSBpbiBpbnZhbHVlbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIGludmFsdWVuYW1lcy5hcHBlbmQoaW52YWx1ZW5hbWUpCisgICAgICAgICAgICByZXR1cm4gZGVwc2xheWVyCisKKyAgICAgICAgZGVwc2xheWVycyA9IHF1ZXJ5X2RlcGVuZGVuY2llcyhhcmdzLmxheWVybmFtZSwgbGF5ZXJpdGVtcywgbGF5ZXJicmFuY2hlcywgbGF5ZXJkZXBlbmRlbmNpZXMsIGJyYW5jaG51bSkKKyAgICAgICAgd2hpbGUgZGVwc2xheWVyczoKKyAgICAgICAgICAgIGRlcHNsYXllciA9IHF1ZXJ5X2RlcGVuZGVuY2llcyhkZXBzbGF5ZXJzLCBsYXllcml0ZW1zLCBsYXllcmJyYW5jaGVzLCBsYXllcmRlcGVuZGVuY2llcywgYnJhbmNobnVtKQorICAgICAgICAgICAgZGVwc2xheWVycyA9IGRlcHNsYXllcgorICAgICAgICBpZiBpbnZhbHVlbmFtZXM6CisgICAgICAgICAgICBmb3IgaW52YWx1ZW5hbWUgaW4gaW52YWx1ZW5hbWVzOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignTGF5ZXIgIiVzIiBub3QgZm91bmQgaW4gbGF5ZXIgaW5kZXgnICUgaW52YWx1ZW5hbWUpCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBsb2dnZXIucGxhaW4oIiVzICAlcyAgJXMgICVzIiAlICgiTGF5ZXIiLmxqdXN0KDE5KSwgIlJlcXVpcmVkIGJ5Ii5sanVzdCgxOSksICJHaXQgcmVwb3NpdG9yeSIubGp1c3QoNTQpLCAiU3ViZGlyZWN0b3J5IikpCisgICAgICAgIGxvZ2dlci5wbGFpbignPScgKiAxMTUpCisgICAgICAgIGZvciBsYXllcm5hbWUgaW4gYXJncy5sYXllcm5hbWU6CisgICAgICAgICAgICBsYXllcnVybCA9IHJlcG91cmxzW2xheWVybmFtZV0KKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiJXMgJXMgJXMgJXMiICUgKGxheWVybmFtZS5sanVzdCgyMCksICctJy5sanVzdCgyMCksIGxheWVydXJsWzBdLmxqdXN0KDU1KSwgbGF5ZXJ1cmxbMV0pKQorICAgICAgICBwcmludGVkbGF5ZXJzID0gW10KKyAgICAgICAgZm9yIGxheWVyLCBkZXBlbmRlbmN5LCBnaXRyZXBvLCBzdWJkaXJlY3RvcnkgaW4gcHJpbnRsYXllcnM6CisgICAgICAgICAgICBpZiBkZXBlbmRlbmN5IGluIHByaW50ZWRsYXllcnM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiJXMgJXMgJXMgJXMiICUgKGRlcGVuZGVuY3kubGp1c3QoMjApLCBsYXllci5sanVzdCgyMCksIGdpdHJlcG8ubGp1c3QoNTUpLCBzdWJkaXJlY3RvcnkpKQorICAgICAgICAgICAgcHJpbnRlZGxheWVycy5hcHBlbmQoZGVwZW5kZW5jeSkKKworICAgICAgICBpZiByZXBvdXJsczoKKyAgICAgICAgICAgIGZldGNoZGlyID0gc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQkxBWUVSU19GRVRDSF9ESVInLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IGZldGNoZGlyOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ2Fubm90IGdldCBCQkxBWUVSU19GRVRDSF9ESVIiKQorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmV0Y2hkaXIpOgorICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKGZldGNoZGlyKQorICAgICAgICAgICAgYWRkbGF5ZXJzID0gW10KKyAgICAgICAgICAgIGZvciByZXBvdXJsLCBzdWJkaXIgaW4gcmVwb3VybHMudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgbmFtZSwgbGF5ZXJkaXIgPSBzZWxmLmdldF9mZXRjaF9sYXllcihmZXRjaGRpciwgcmVwb3VybCwgc3ViZGlyLCBub3QgYXJncy5zaG93X29ubHkpCisgICAgICAgICAgICAgICAgaWYgbm90IG5hbWU6CisgICAgICAgICAgICAgICAgICAgICMgRXJyb3IgYWxyZWFkeSBzaG93bgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgICAgIGFkZGxheWVycy5hcHBlbmQoKHN1YmRpciwgbmFtZSwgbGF5ZXJkaXIpKQorICAgICAgICBpZiBub3QgYXJncy5zaG93X29ubHk6CisgICAgICAgICAgICBmb3Igc3ViZGlyLCBuYW1lLCBsYXllcmRpciBpbiBzZXQoYWRkbGF5ZXJzKToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsYXllcmRpcik6CisgICAgICAgICAgICAgICAgICAgIGlmIHN1YmRpcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiQWRkaW5nIGxheWVyIFwiJXNcIiB0byBjb25mL2JibGF5ZXJzLmNvbmYiICUgc3ViZGlyKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCJBZGRpbmcgbGF5ZXIgXCIlc1wiIHRvIGNvbmYvYmJsYXllcnMuY29uZiIgJSBuYW1lKQorICAgICAgICAgICAgICAgICAgICBsb2NhbGFyZ3MgPSBhcmdwYXJzZS5OYW1lc3BhY2UoKQorICAgICAgICAgICAgICAgICAgICBsb2NhbGFyZ3MubGF5ZXJkaXIgPSBsYXllcmRpcgorICAgICAgICAgICAgICAgICAgICBzZWxmLmRvX2FkZF9sYXllcihsb2NhbGFyZ3MpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworCisgICAgZGVmIGRvX2xheWVyaW5kZXhfc2hvd19kZXBlbmRzKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJGaW5kIGxheWVyIGRlcGVuZGVuY2llcyBmcm9tIGxheWVyIGluZGV4LgorIiIiCisgICAgICAgIGFyZ3Muc2hvd19vbmx5ID0gVHJ1ZQorICAgICAgICBhcmdzLmlnbm9yZSA9IFtdCisgICAgICAgIHNlbGYuZG9fbGF5ZXJpbmRleF9mZXRjaChhcmdzKQorCisKKyAgICBkZWYgdmVyc2lvbl9zdHIoc2VsZiwgcGUsIHB2LCBwciA9IE5vbmUpOgorICAgICAgICB2ZXJzdHIgPSAiJXMiICUgcHYKKyAgICAgICAgaWYgcHI6CisgICAgICAgICAgICB2ZXJzdHIgPSAiJXMtJXMiICUgKHZlcnN0ciwgcHIpCisgICAgICAgIGlmIHBlOgorICAgICAgICAgICAgdmVyc3RyID0gIiVzOiVzIiAlIChwZSwgdmVyc3RyKQorICAgICAgICByZXR1cm4gdmVyc3RyCisKKworICAgIGRlZiBkb19zaG93X292ZXJsYXllZChzZWxmLCBhcmdzKToKKyAgICAgICAgIiIibGlzdCBvdmVybGF5ZWQgcmVjaXBlcyAod2hlcmUgdGhlIHNhbWUgcmVjaXBlIGV4aXN0cyBpbiBhbm90aGVyIGxheWVyKQorCitMaXN0cyB0aGUgbmFtZXMgb2Ygb3ZlcmxheWVkIHJlY2lwZXMgYW5kIHRoZSBhdmFpbGFibGUgdmVyc2lvbnMgaW4gZWFjaAorbGF5ZXIsIHdpdGggdGhlIHByZWZlcnJlZCB2ZXJzaW9uIGZpcnN0LiBOb3RlIHRoYXQgc2tpcHBlZCByZWNpcGVzIHRoYXQKK2FyZSBvdmVybGF5ZWQgd2lsbCBhbHNvIGJlIGxpc3RlZCwgd2l0aCBhICIgKHNraXBwZWQpIiBzdWZmaXguCisiIiIKKyAgICAgICAgc2VsZi5pbml0X2JiaGFuZGxlcigpCisKKyAgICAgICAgaXRlbXNfbGlzdGVkID0gc2VsZi5saXN0X3JlY2lwZXMoJ092ZXJsYXllZCByZWNpcGVzJywgTm9uZSwgVHJ1ZSwgYXJncy5zYW1lX3ZlcnNpb24sIGFyZ3MuZmlsZW5hbWVzLCBUcnVlLCBOb25lKQorCisgICAgICAgICMgQ2hlY2sgZm9yIG92ZXJsYXllZCAuYmJjbGFzcyBmaWxlcworICAgICAgICBjbGFzc2VzID0gZGVmYXVsdGRpY3QobGlzdCkKKyAgICAgICAgZm9yIGxheWVyZGlyIGluIHNlbGYuYmJsYXllcnM6CisgICAgICAgICAgICBjbGFzc2RpciA9IG9zLnBhdGguam9pbihsYXllcmRpciwgJ2NsYXNzZXMnKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY2xhc3NkaXIpOgorICAgICAgICAgICAgICAgIGZvciBjbGFzc2ZpbGUgaW4gb3MubGlzdGRpcihjbGFzc2Rpcik6CisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguc3BsaXRleHQoY2xhc3NmaWxlKVsxXSA9PSAnLmJiY2xhc3MnOgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nlc1tjbGFzc2ZpbGVdLmFwcGVuZChjbGFzc2RpcikKKworICAgICAgICAjIExvY2F0aW5nIGNsYXNzZXMgYW5kIG90aGVyIGZpbGVzIGlzIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQgdGhhbiByZWNpcGVzIC0KKyAgICAgICAgIyBsYXllciBwcmlvcml0eSBpcyBub3QgYSBmYWN0b3I7IGluc3RlYWQgQml0QmFrZSB1c2VzIHRoZSBmaXJzdCBtYXRjaGluZworICAgICAgICAjIGZpbGUgaW4gQkJQQVRILCB3aGljaCBpcyBtYW5pcHVsYXRlZCBkaXJlY3RseSBieSBlYWNoIGxheWVyJ3MKKyAgICAgICAgIyBjb25mL2xheWVyLmNvbmYgaW4gdHVybiwgdGh1cyB0aGUgb3JkZXIgb2YgbGF5ZXJzIGluIGJibGF5ZXJzLmNvbmYgaXMgYQorICAgICAgICAjIGZhY3RvciAtIGhvd2V2ZXIsIGVhY2ggbGF5ZXIuY29uZiBpcyBmcmVlIHRvIGVpdGhlciBwcmVwZW5kIG9yIGFwcGVuZCB0bworICAgICAgICAjIEJCUEFUSCAob3IgaW5kZWVkIGRvIGNyYXp5IHN0dWZmIHdpdGggaXQpLiBUaHVzIHRoZSBvcmRlciBpbiBCQlBBVEggbWlnaHQKKyAgICAgICAgIyBub3QgYmUgZXhhY3RseSB0aGUgb3JkZXIgcHJlc2VudCBpbiBiYmxheWVycy5jb25mIGVpdGhlci4KKyAgICAgICAgYmJwYXRoID0gc3RyKHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLmdldFZhcignQkJQQVRIJywgVHJ1ZSkpCisgICAgICAgIG92ZXJsYXllZF9jbGFzc19mb3VuZCA9IEZhbHNlCisgICAgICAgIGZvciAoY2xhc3NmaWxlLCBjbGFzc2RpcnMpIGluIGNsYXNzZXMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGxlbihjbGFzc2RpcnMpID4gMToKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3ZlcmxheWVkX2NsYXNzX2ZvdW5kOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oJz09PSBPdmVybGF5ZWQgY2xhc3NlcyA9PT0nKQorICAgICAgICAgICAgICAgICAgICBvdmVybGF5ZWRfY2xhc3NfZm91bmQgPSBUcnVlCisKKyAgICAgICAgICAgICAgICBtYWluZmlsZSA9IGJiLnV0aWxzLndoaWNoKGJicGF0aCwgb3MucGF0aC5qb2luKCdjbGFzc2VzJywgY2xhc3NmaWxlKSkKKyAgICAgICAgICAgICAgICBpZiBhcmdzLmZpbGVuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCclcycgJSBtYWluZmlsZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIFdlIGVmZmVjdGl2ZWx5IGhhdmUgdG8gZ3Vlc3MgdGhlIGxheWVyIGhlcmUKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCclczonICUgY2xhc3NmaWxlKQorICAgICAgICAgICAgICAgICAgICBtYWlubGF5ZXJuYW1lID0gJz8nCisgICAgICAgICAgICAgICAgICAgIGZvciBsYXllcmRpciBpbiBzZWxmLmJibGF5ZXJzOgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NkaXIgPSBvcy5wYXRoLmpvaW4obGF5ZXJkaXIsICdjbGFzc2VzJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1haW5maWxlLnN0YXJ0c3dpdGgoY2xhc3NkaXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5sYXllcm5hbWUgPSBzZWxmLmdldF9sYXllcl9uYW1lKGxheWVyZGlyKQorICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oJyAgJXMnICUgbWFpbmxheWVybmFtZSkKKyAgICAgICAgICAgICAgICBmb3IgY2xhc3NkaXIgaW4gY2xhc3NkaXJzOgorICAgICAgICAgICAgICAgICAgICBmdWxscGF0aCA9IG9zLnBhdGguam9pbihjbGFzc2RpciwgY2xhc3NmaWxlKQorICAgICAgICAgICAgICAgICAgICBpZiBmdWxscGF0aCAhPSBtYWluZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFyZ3MuZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCcgICVzJyAlIGZ1bGxwYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnICAlcycgJSBzZWxmLmdldF9sYXllcl9uYW1lKG9zLnBhdGguZGlybmFtZShjbGFzc2RpcikpKQorCisgICAgICAgIGlmIG92ZXJsYXllZF9jbGFzc19mb3VuZDoKKyAgICAgICAgICAgIGl0ZW1zX2xpc3RlZCA9IFRydWU7CisKKyAgICAgICAgaWYgbm90IGl0ZW1zX2xpc3RlZDoKKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbignTm8gb3ZlcmxheWVkIGZpbGVzIGZvdW5kLicpCisKKworICAgIGRlZiBkb19zaG93X3JlY2lwZXMoc2VsZiwgYXJncyk6CisgICAgICAgICIiImxpc3QgYXZhaWxhYmxlIHJlY2lwZXMsIHNob3dpbmcgdGhlIGxheWVyIHRoZXkgYXJlIHByb3ZpZGVkIGJ5CisKK0xpc3RzIHRoZSBuYW1lcyBvZiByZWNpcGVzIGFuZCB0aGUgYXZhaWxhYmxlIHZlcnNpb25zIGluIGVhY2gKK2xheWVyLCB3aXRoIHRoZSBwcmVmZXJyZWQgdmVyc2lvbiBmaXJzdC4gT3B0aW9uYWxseSB5b3UgbWF5IHNwZWNpZnkKK3Buc3BlYyB0byBtYXRjaCBhIHNwZWNpZmllZCByZWNpcGUgbmFtZSAoc3VwcG9ydHMgd2lsZGNhcmRzKS4gTm90ZSB0aGF0Citza2lwcGVkIHJlY2lwZXMgd2lsbCBhbHNvIGJlIGxpc3RlZCwgd2l0aCBhICIgKHNraXBwZWQpIiBzdWZmaXguCisiIiIKKyAgICAgICAgc2VsZi5pbml0X2JiaGFuZGxlcigpCisKKyAgICAgICAgaW5oZXJpdGxpc3QgPSBhcmdzLmluaGVyaXRzLnNwbGl0KCcsJykgaWYgYXJncy5pbmhlcml0cyBlbHNlIFtdCisgICAgICAgIGlmIGluaGVyaXRsaXN0IG9yIGFyZ3MucG5zcGVjIG9yIGFyZ3MubXVsdGlwbGU6CisgICAgICAgICAgICB0aXRsZSA9ICdNYXRjaGluZyByZWNpcGVzOicKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRpdGxlID0gJ0F2YWlsYWJsZSByZWNpcGVzOicKKyAgICAgICAgc2VsZi5saXN0X3JlY2lwZXModGl0bGUsIGFyZ3MucG5zcGVjLCBGYWxzZSwgRmFsc2UsIGFyZ3MuZmlsZW5hbWVzLCBhcmdzLm11bHRpcGxlLCBpbmhlcml0bGlzdCkKKworCisgICAgZGVmIGxpc3RfcmVjaXBlcyhzZWxmLCB0aXRsZSwgcG5zcGVjLCBzaG93X292ZXJsYXllZF9vbmx5LCBzaG93X3NhbWVfdmVyX29ubHksIHNob3dfZmlsZW5hbWVzLCBzaG93X211bHRpX3Byb3ZpZGVyX29ubHksIGluaGVyaXRzKToKKyAgICAgICAgaWYgaW5oZXJpdHM6CisgICAgICAgICAgICBiYnBhdGggPSBzdHIoc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKSkKKyAgICAgICAgICAgIGZvciBjbGFzc25hbWUgaW4gaW5oZXJpdHM6CisgICAgICAgICAgICAgICAgY2xhc3NmaWxlID0gJ2NsYXNzZXMvJXMuYmJjbGFzcycgJSBjbGFzc25hbWUKKyAgICAgICAgICAgICAgICBpZiBub3QgYmIudXRpbHMud2hpY2goYmJwYXRoLCBjbGFzc2ZpbGUsIGhpc3Rvcnk9RmFsc2UpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBVc2VyRXJyb3IoJ05vIGNsYXNzIG5hbWVkICVzIGZvdW5kIGluIEJCUEFUSCcgJSBjbGFzc2ZpbGUpCisKKyAgICAgICAgcGtnX3BuID0gc2VsZi5iYmhhbmRsZXIuY29va2VyLnJlY2lwZWNhY2hlLnBrZ19wbgorICAgICAgICAobGF0ZXN0X3ZlcnNpb25zLCBwcmVmZXJyZWRfdmVyc2lvbnMpID0gYmIucHJvdmlkZXJzLmZpbmRQcm92aWRlcnMoc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEsIHNlbGYuYmJoYW5kbGVyLmNvb2tlci5yZWNpcGVjYWNoZSwgcGtnX3BuKQorICAgICAgICBhbGxwcm92aWRlcnMgPSBiYi5wcm92aWRlcnMuYWxsUHJvdmlkZXJzKHNlbGYuYmJoYW5kbGVyLmNvb2tlci5yZWNpcGVjYWNoZSkKKworICAgICAgICAjIEVuc3VyZSB3ZSBsaXN0IHNraXBwZWQgcmVjaXBlcworICAgICAgICAjIFdlIGFyZSBsYXJnZWx5IGd1ZXNzaW5nIGFib3V0IFBOLCBQViBhbmQgdGhlIHByZWZlcnJlZCB2ZXJzaW9uIGhlcmUsCisgICAgICAgICMgYnV0IHdlIGhhdmUgbm8gY2hvaWNlIHNpbmNlIHNraXBwZWQgcmVjaXBlcyBhcmUgbm90IGZ1bGx5IHBhcnNlZAorICAgICAgICBza2lwbGlzdCA9IHNlbGYuYmJoYW5kbGVyLmNvb2tlci5za2lwbGlzdC5rZXlzKCkKKyAgICAgICAgc2tpcGxpc3Quc29ydCgga2V5PWxhbWJkYSBmaWxlaXRlbTogc2VsZi5iYmhhbmRsZXIuY29va2VyLmNvbGxlY3Rpb24uY2FsY19iYmZpbGVfcHJpb3JpdHkoZmlsZWl0ZW0pICkKKyAgICAgICAgc2tpcGxpc3QucmV2ZXJzZSgpCisgICAgICAgIGZvciBmbiBpbiBza2lwbGlzdDoKKyAgICAgICAgICAgIHJlY2lwZV9wYXJ0cyA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShmbikpWzBdLnNwbGl0KCdfJykKKyAgICAgICAgICAgIHAgPSByZWNpcGVfcGFydHNbMF0KKyAgICAgICAgICAgIGlmIGxlbihyZWNpcGVfcGFydHMpID4gMToKKyAgICAgICAgICAgICAgICB2ZXIgPSAoTm9uZSwgcmVjaXBlX3BhcnRzWzFdLCBOb25lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2ZXIgPSAoTm9uZSwgJ3Vua25vd24nLCBOb25lKQorICAgICAgICAgICAgYWxscHJvdmlkZXJzW3BdLmFwcGVuZCgodmVyLCBmbikpCisgICAgICAgICAgICBpZiBub3QgcCBpbiBwa2dfcG46CisgICAgICAgICAgICAgICAgcGtnX3BuW3BdID0gJ2R1bW15JworICAgICAgICAgICAgICAgIHByZWZlcnJlZF92ZXJzaW9uc1twXSA9ICh2ZXIsIGZuKQorCisgICAgICAgIGRlZiBwcmludF9pdGVtKGYsIHBuLCB2ZXIsIGxheWVyLCBpc3ByZWYpOgorICAgICAgICAgICAgaWYgZiBpbiBza2lwbGlzdDoKKyAgICAgICAgICAgICAgICBza2lwcGVkID0gJyAoc2tpcHBlZCknCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNraXBwZWQgPSAnJworICAgICAgICAgICAgaWYgc2hvd19maWxlbmFtZXM6CisgICAgICAgICAgICAgICAgaWYgaXNwcmVmOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIiVzJXMiLCBmLCBza2lwcGVkKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiICAlcyVzIiwgZiwgc2tpcHBlZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgaXNwcmVmOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIiVzOiIsIHBuKQorICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiICAlcyAlcyVzIiwgbGF5ZXIubGp1c3QoMjApLCB2ZXIsIHNraXBwZWQpCisKKyAgICAgICAgZ2xvYmFsX2luaGVyaXQgPSAoc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEuZ2V0VmFyKCdJTkhFUklUJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgY2xzX3JlID0gcmUuY29tcGlsZSgnY2xhc3Nlcy8nKQorCisgICAgICAgIHByZWZmaWxlcyA9IFtdCisgICAgICAgIGl0ZW1zX2xpc3RlZCA9IEZhbHNlCisgICAgICAgIGZvciBwIGluIHNvcnRlZChwa2dfcG4pOgorICAgICAgICAgICAgaWYgcG5zcGVjOgorICAgICAgICAgICAgICAgIGlmIG5vdCBmbm1hdGNoLmZubWF0Y2gocCwgcG5zcGVjKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgbGVuKGFsbHByb3ZpZGVyc1twXSkgPiAxIG9yIG5vdCBzaG93X211bHRpX3Byb3ZpZGVyX29ubHk6CisgICAgICAgICAgICAgICAgcHJlZiA9IHByZWZlcnJlZF92ZXJzaW9uc1twXQorICAgICAgICAgICAgICAgIHJlYWxmbiA9IGJiLmNhY2hlLkNhY2hlLnZpcnR1YWxmbjJyZWFsZm4ocHJlZlsxXSkKKyAgICAgICAgICAgICAgICBwcmVmZmlsZSA9IHJlYWxmblswXQorCisgICAgICAgICAgICAgICAgIyBXZSBvbmx5IGRpc3BsYXkgb25jZSBwZXIgcmVjaXBlLCB3ZSBzaG91bGQgcHJlZmVyIG5vbiBleHRlbmRlZCB2ZXJzaW9ucyBvZiB0aGUKKyAgICAgICAgICAgICAgICAjIHJlY2lwZSBpZiBwcmVzZW50IChzbyBlLmcuIGluIE9wZW5FbWJlZGRlZCwgb3BlbnNzbCByYXRoZXIgdGhhbiBuYXRpdmVzZGstb3BlbnNzbAorICAgICAgICAgICAgICAgICMgd2hpY2ggd291bGQgb3RoZXJ3aXNlIHNvcnQgZmlyc3QpLgorICAgICAgICAgICAgICAgIGlmIHJlYWxmblsxXSBhbmQgcmVhbGZuWzBdIGluIHNlbGYuYmJoYW5kbGVyLmNvb2tlci5yZWNpcGVjYWNoZS5wa2dfZm46CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBpbmhlcml0czoKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hjb3VudCA9IDAKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlX2luaGVyaXRzID0gc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEuaW5oZXJpdHMuZ2V0KHByZWZmaWxlLCBbXSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGNscyBpbiByZWNpcGVfaW5oZXJpdHM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjbHNfcmUubWF0Y2goY2xzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NuYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKGNscykpWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjbGFzc25hbWUgaW4gZ2xvYmFsX2luaGVyaXQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgY2xhc3NuYW1lIGluIGluaGVyaXRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoY291bnQgKz0gMQorICAgICAgICAgICAgICAgICAgICBpZiBtYXRjaGNvdW50ICE9IGxlbihpbmhlcml0cyk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIE5vIG1hdGNoIC0gc2tpcCB0aGlzIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIHByZWZmaWxlIG5vdCBpbiBwcmVmZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIHByZWZsYXllciA9IHNlbGYuZ2V0X2ZpbGVfbGF5ZXIocHJlZmZpbGUpCisgICAgICAgICAgICAgICAgICAgIG11bHRpbGF5ZXIgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBzYW1lX3ZlciA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgcHJvdnMgPSBbXQorICAgICAgICAgICAgICAgICAgICBmb3IgcHJvdiBpbiBhbGxwcm92aWRlcnNbcF06CisgICAgICAgICAgICAgICAgICAgICAgICBwcm92ZmlsZSA9IGJiLmNhY2hlLkNhY2hlLnZpcnR1YWxmbjJyZWFsZm4ocHJvdlsxXSlbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZsYXllciA9IHNlbGYuZ2V0X2ZpbGVfbGF5ZXIocHJvdmZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICBwcm92cy5hcHBlbmQoKHByb3ZmaWxlLCBwcm92bGF5ZXIsIHByb3ZbMF0pKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJvdmxheWVyICE9IHByZWZsYXllcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aWxheWVyID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJvdlswXSAhPSBwcmVmWzBdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbWVfdmVyID0gRmFsc2UKKworICAgICAgICAgICAgICAgICAgICBpZiAobXVsdGlsYXllciBvciBub3Qgc2hvd19vdmVybGF5ZWRfb25seSkgYW5kIChzYW1lX3ZlciBvciBub3Qgc2hvd19zYW1lX3Zlcl9vbmx5KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpdGVtc19saXN0ZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCc9PT0gJXMgPT09JyAlIHRpdGxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zX2xpc3RlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50X2l0ZW0ocHJlZmZpbGUsIHAsIHNlbGYudmVyc2lvbl9zdHIocHJlZlswXVswXSwgcHJlZlswXVsxXSksIHByZWZsYXllciwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocHJvdmZpbGUsIHByb3ZsYXllciwgcHJvdnZlcikgaW4gcHJvdnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJvdmZpbGUgIT0gcHJlZmZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50X2l0ZW0ocHJvdmZpbGUsIHAsIHNlbGYudmVyc2lvbl9zdHIocHJvdnZlclswXSwgcHJvdnZlclsxXSksIHByb3ZsYXllciwgRmFsc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAjIEVuc3VyZSB3ZSBkb24ndCBzaG93IHR3byBlbnRyaWVzIGZvciBCQkNMQVNTRVhURU5EZWQgcmVjaXBlcworICAgICAgICAgICAgICAgICAgICAgICAgcHJlZmZpbGVzLmFwcGVuZChwcmVmZmlsZSkKKworICAgICAgICByZXR1cm4gaXRlbXNfbGlzdGVkCisKKworICAgIGRlZiBkb19mbGF0dGVuKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJmbGF0dGVuIGxheWVyIGNvbmZpZ3VyYXRpb24gaW50byBhIHNlcGFyYXRlIG91dHB1dCBkaXJlY3RvcnkuCisKK1Rha2VzIHRoZSBzcGVjaWZpZWQgbGF5ZXJzIChvciBhbGwgbGF5ZXJzIGluIHRoZSBjdXJyZW50IGxheWVyCitjb25maWd1cmF0aW9uIGlmIG5vbmUgYXJlIHNwZWNpZmllZCkgYW5kIGJ1aWxkcyBhICJmbGF0dGVuZWQiIGRpcmVjdG9yeQorY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgYWxsIGxheWVycywgd2l0aCBhbnkgb3ZlcmxheWVkIHJlY2lwZXMgcmVtb3ZlZAorYW5kIGJiYXBwZW5kcyBhcHBlbmRlZCB0byB0aGUgY29ycmVzcG9uZGluZyByZWNpcGVzLiBOb3RlIHRoYXQgc29tZSBtYW51YWwKK2NsZWFudXAgbWF5IHN0aWxsIGJlIG5lY2Vzc2FyeSBhZnRlcndhcmRzLCBpbiBwYXJ0aWN1bGFyOgorCisqIHdoZXJlIG5vbi1yZWNpcGUgZmlsZXMgKHN1Y2ggYXMgcGF0Y2hlcykgYXJlIG92ZXJ3cml0dGVuICh0aGUgZmxhdHRlbgorICBjb21tYW5kIHdpbGwgc2hvdyBhIHdhcm5pbmcgZm9yIHRoZXNlKQorKiB3aGVyZSBhbnl0aGluZyBiZXlvbmQgdGhlIG5vcm1hbCBsYXllciBzZXR1cCBoYXMgYmVlbiBhZGRlZCB0bworICBsYXllci5jb25mIChvbmx5IHRoZSBsb3dlc3QgcHJpb3JpdHkgbnVtYmVyIGxheWVyJ3MgbGF5ZXIuY29uZiBpcyB1c2VkKQorKiBvdmVycmlkZGVuL2FwcGVuZGVkIGl0ZW1zIGZyb20gYmJhcHBlbmRzIHdpbGwgbmVlZCB0byBiZSB0aWRpZWQgdXAKKyogd2hlbiB0aGUgZmxhdHRlbmVkIGxheWVycyBkbyBub3QgaGF2ZSB0aGUgc2FtZSBkaXJlY3Rvcnkgc3RydWN0dXJlICh0aGUKKyAgZmxhdHRlbiBjb21tYW5kIHNob3VsZCBzaG93IGEgd2FybmluZyB3aGVuIHRoaXMgd2lsbCBjYXVzZSBhIHByb2JsZW0pCisKK1dhcm5pbmc6IGlmIHlvdSBmbGF0dGVuIHNldmVyYWwgbGF5ZXJzIHdoZXJlIGFub3RoZXIgbGF5ZXIgaXMgaW50ZW5kZWQgdG8KK2JlIHVzZWQgImluYmV0d2VlbiIgdGhlbSAoaW4gbGF5ZXIgcHJpb3JpdHkgb3JkZXIpIHN1Y2ggdGhhdCByZWNpcGVzIC8KK2JiYXBwZW5kcyBpbiB0aGUgbGF5ZXJzIGludGVyYWN0LCBhbmQgdGhlbiBhdHRlbXB0IHRvIHVzZSB0aGUgbmV3IG91dHB1dAorbGF5ZXIgdG9nZXRoZXIgd2l0aCB0aGF0IG90aGVyIGxheWVyLCB5b3UgbWF5IG5vIGxvbmdlciBnZXQgdGhlIHNhbWUKK2J1aWxkIHJlc3VsdHMgKGFzIHRoZSBsYXllciBwcmlvcml0eSBvcmRlciBoYXMgZWZmZWN0aXZlbHkgY2hhbmdlZCkuCisiIiIKKyAgICAgICAgaWYgbGVuKGFyZ3MubGF5ZXIpID09IDE6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0lmIHlvdSBzcGVjaWZ5IGxheWVycyB0byBmbGF0dGVuIHlvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3QgdHdvJykKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgb3V0cHV0ZGlyID0gYXJncy5vdXRwdXRkaXIKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3V0cHV0ZGlyKSBhbmQgb3MubGlzdGRpcihvdXRwdXRkaXIpOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdEaXJlY3RvcnkgJXMgZXhpc3RzIGFuZCBpcyBub24tZW1wdHksIHBsZWFzZSBjbGVhciBpdCBvdXQgZmlyc3QnICUgb3V0cHV0ZGlyKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBzZWxmLmluaXRfYmJoYW5kbGVyKCkKKyAgICAgICAgbGF5ZXJzID0gc2VsZi5iYmxheWVycworICAgICAgICBpZiBsZW4oYXJncy5sYXllcikgPiAyOgorICAgICAgICAgICAgbGF5ZXJuYW1lcyA9IGFyZ3MubGF5ZXIKKyAgICAgICAgICAgIGZvdW5kX2xheWVybmFtZXMgPSBbXQorICAgICAgICAgICAgZm91bmRfbGF5ZXJkaXJzID0gW10KKyAgICAgICAgICAgIGZvciBsYXllcmRpciBpbiBsYXllcnM6CisgICAgICAgICAgICAgICAgbGF5ZXJuYW1lID0gc2VsZi5nZXRfbGF5ZXJfbmFtZShsYXllcmRpcikKKyAgICAgICAgICAgICAgICBpZiBsYXllcm5hbWUgaW4gbGF5ZXJuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgZm91bmRfbGF5ZXJkaXJzLmFwcGVuZChsYXllcmRpcikKKyAgICAgICAgICAgICAgICAgICAgZm91bmRfbGF5ZXJuYW1lcy5hcHBlbmQobGF5ZXJuYW1lKQorCisgICAgICAgICAgICBmb3IgbGF5ZXJuYW1lIGluIGxheWVybmFtZXM6CisgICAgICAgICAgICAgICAgaWYgbm90IGxheWVybmFtZSBpbiBmb3VuZF9sYXllcm5hbWVzOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBmaW5kIGxheWVyICVzIGluIGN1cnJlbnQgY29uZmlndXJhdGlvbiwgcGxlYXNlIHJ1biAiJXMgc2hvdy1sYXllcnMiIHRvIGxpc3QgY29uZmlndXJlZCBsYXllcnMnICUgKGxheWVybmFtZSwgb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGxheWVycyA9IGZvdW5kX2xheWVyZGlycworICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGF5ZXJuYW1lcyA9IFtdCisKKyAgICAgICAgIyBFbnN1cmUgYSBzcGVjaWZpZWQgcGF0aCBtYXRjaGVzIG91ciBsaXN0IG9mIGxheWVycworICAgICAgICBkZWYgbGF5ZXJfcGF0aF9tYXRjaChwYXRoKToKKyAgICAgICAgICAgIGZvciBsYXllcmRpciBpbiBsYXllcnM6CisgICAgICAgICAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKG9zLnBhdGguam9pbihsYXllcmRpciwgJycpKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxheWVyZGlyCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGFwcGxpZWRfYXBwZW5kcyA9IFtdCisgICAgICAgIGZvciBsYXllciBpbiBsYXllcnM6CisgICAgICAgICAgICBvdmVybGF5ZWQgPSBbXQorICAgICAgICAgICAgZm9yIGYgaW4gc2VsZi5iYmhhbmRsZXIuY29va2VyLmNvbGxlY3Rpb24ub3ZlcmxheWVkLml0ZXJrZXlzKCk6CisgICAgICAgICAgICAgICAgZm9yIG9mIGluIHNlbGYuYmJoYW5kbGVyLmNvb2tlci5jb2xsZWN0aW9uLm92ZXJsYXllZFtmXToKKyAgICAgICAgICAgICAgICAgICAgaWYgb2Yuc3RhcnRzd2l0aChsYXllcik6CisgICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5ZWQuYXBwZW5kKG9mKQorCisgICAgICAgICAgICBsb2dnZXIucGxhaW4oJ0NvcHlpbmcgZmlsZXMgZnJvbSAlcy4uLicgJSBsYXllciApCisgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhsYXllcik6CisgICAgICAgICAgICAgICAgZm9yIGYxIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICBmMWZ1bGwgPSBvcy5zZXAuam9pbihbcm9vdCwgZjFdKQorICAgICAgICAgICAgICAgICAgICBpZiBmMWZ1bGwgaW4gb3ZlcmxheWVkOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCcgIFNraXBwaW5nIG92ZXJsYXllZCBmaWxlICVzJyAlIGYxZnVsbCApCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGYxKVsxXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXh0ICE9ICcuYmJhcHBlbmQnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkZXN0ID0gZjFmdWxsW2xlbihsYXllcik6XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkZXN0ID0gb3MucGF0aC5ub3JtcGF0aChvcy5zZXAuam9pbihbb3V0cHV0ZGlyLGZkZXN0XSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShmZGVzdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZmRlc3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmMSA9PSAnbGF5ZXIuY29uZicgYW5kIHJvb3QuZW5kc3dpdGgoJy9jb25mJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oJyAgU2tpcHBpbmcgbGF5ZXIgY29uZmlnIGZpbGUgJXMnICUgZjFmdWxsICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybignT3ZlcndyaXRpbmcgZmlsZSAlcycsIGZkZXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLmNvcHlmaWxlKGYxZnVsbCwgZmRlc3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXh0ID09ICcuYmInOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXBwZW5kIGluIHNlbGYuYmJoYW5kbGVyLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoZjFmdWxsKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxheWVyX3BhdGhfbWF0Y2goYXBwZW5kKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oJyAgQXBwbHlpbmcgYXBwZW5kICVzIHRvICVzJyAlIChhcHBlbmQsIGZkZXN0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFwcGx5X2FwcGVuZChhcHBlbmQsIGZkZXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpZWRfYXBwZW5kcy5hcHBlbmQoYXBwZW5kKQorCisgICAgICAgICMgVGFrZSBjYXJlIG9mIHdoZW4gc29tZSBsYXllcnMgYXJlIGV4Y2x1ZGVkIGFuZCB5ZXQgd2UgaGF2ZSBpbmNsdWRlZCBiYmFwcGVuZHMgZm9yIHRob3NlIHJlY2lwZXMKKyAgICAgICAgZm9yIGIgaW4gc2VsZi5iYmhhbmRsZXIuY29va2VyLmNvbGxlY3Rpb24uYmJhcHBlbmRzOgorICAgICAgICAgICAgKHJlY2lwZW5hbWUsIGFwcGVuZG5hbWUpID0gYgorICAgICAgICAgICAgaWYgYXBwZW5kbmFtZSBub3QgaW4gYXBwbGllZF9hcHBlbmRzOgorICAgICAgICAgICAgICAgIGZpcnN0X2FwcGVuZCA9IE5vbmUKKyAgICAgICAgICAgICAgICBsYXllciA9IGxheWVyX3BhdGhfbWF0Y2goYXBwZW5kbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBsYXllcjoKKyAgICAgICAgICAgICAgICAgICAgaWYgZmlyc3RfYXBwZW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hcHBseV9hcHBlbmQoYXBwZW5kbmFtZSwgZmlyc3RfYXBwZW5kKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZmRlc3QgPSBhcHBlbmRuYW1lW2xlbihsYXllcik6XQorICAgICAgICAgICAgICAgICAgICAgICAgZmRlc3QgPSBvcy5wYXRoLm5vcm1wYXRoKG9zLnNlcC5qb2luKFtvdXRwdXRkaXIsZmRlc3RdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZmRlc3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMuY29weWZpbGUoYXBwZW5kbmFtZSwgZmRlc3QpCisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9hcHBlbmQgPSBmZGVzdAorCisgICAgICAgICMgR2V0IHRoZSByZWdleCBmb3IgdGhlIGZpcnN0IGxheWVyIGluIG91ciBsaXN0ICh3aGljaCBpcyB3aGVyZSB0aGUgY29uZi9sYXllci5jb25mIGZpbGUgd2lsbAorICAgICAgICAjIGhhdmUgY29tZSBmcm9tKQorICAgICAgICBmaXJzdF9yZWdleCA9IE5vbmUKKyAgICAgICAgbGF5ZXJkaXIgPSBsYXllcnNbMF0KKyAgICAgICAgZm9yIGxheWVybmFtZSwgcGF0dGVybiwgcmVnZXgsIF8gaW4gc2VsZi5iYmhhbmRsZXIuY29va2VyLnJlY2lwZWNhY2hlLmJiZmlsZV9jb25maWdfcHJpb3JpdGllczoKKyAgICAgICAgICAgIGlmIHJlZ2V4Lm1hdGNoKG9zLnBhdGguam9pbihsYXllcmRpciwgJ3Rlc3QnKSk6CisgICAgICAgICAgICAgICAgZmlyc3RfcmVnZXggPSByZWdleAorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgZmlyc3RfcmVnZXg6CisgICAgICAgICAgICAjIEZpbmQgdGhlIEJCRklMRVMgZW50cmllcyB0aGF0IG1hdGNoICh3aGljaCB3aWxsIGhhdmUgY29tZSBmcm9tIHRoaXMgY29uZi9sYXllci5jb25mIGZpbGUpCisgICAgICAgICAgICBiYmZpbGVzID0gc3RyKHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLmdldFZhcignQkJGSUxFUycsIFRydWUpKS5zcGxpdCgpCisgICAgICAgICAgICBiYmZpbGVzX2xheWVyID0gW10KKyAgICAgICAgICAgIGZvciBpdGVtIGluIGJiZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgZmlyc3RfcmVnZXgubWF0Y2goaXRlbSk6CisgICAgICAgICAgICAgICAgICAgIG5ld3BhdGggPSBvcy5wYXRoLmpvaW4ob3V0cHV0ZGlyLCBpdGVtW2xlbihsYXllcmRpcikrMTpdKQorICAgICAgICAgICAgICAgICAgICBiYmZpbGVzX2xheWVyLmFwcGVuZChuZXdwYXRoKQorCisgICAgICAgICAgICBpZiBiYmZpbGVzX2xheWVyOgorICAgICAgICAgICAgICAgICMgQ2hlY2sgdGhhdCBhbGwgaW1wb3J0YW50IGxheWVyIGZpbGVzIG1hdGNoIEJCRklMRVMKKyAgICAgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhvdXRwdXRkaXIpOgorICAgICAgICAgICAgICAgICAgICBmb3IgZjEgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGYxKVsxXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXh0IGluIFsnLmJiJywgJy5iYmFwcGVuZCddOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYxZnVsbCA9IG9zLnNlcC5qb2luKFtyb290LCBmMV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlfZm91bmQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIGJiZmlsZXNfbGF5ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaChmMWZ1bGwsIGl0ZW0pOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlfZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBlbnRyeV9mb3VuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIkZpbGUgJXMgZG9lcyBub3QgbWF0Y2ggdGhlIGZsYXR0ZW5lZCBsYXllcidzIEJCRklMRVMgc2V0dGluZywgeW91IG1heSBuZWVkIHRvIGVkaXQgY29uZi9sYXllci5jb25mIG9yIG1vdmUgdGhlIGZpbGUgZWxzZXdoZXJlIiAlIGYxZnVsbCkKKworICAgIGRlZiBnZXRfZmlsZV9sYXllcihzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIGxheWVyZGlyID0gc2VsZi5nZXRfZmlsZV9sYXllcmRpcihmaWxlbmFtZSkKKyAgICAgICAgaWYgbGF5ZXJkaXI6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfbGF5ZXJfbmFtZShsYXllcmRpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAnPycKKworICAgIGRlZiBnZXRfZmlsZV9sYXllcmRpcihzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIGxheWVyID0gYmIudXRpbHMuZ2V0X2ZpbGVfbGF5ZXIoZmlsZW5hbWUsIHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhKQorICAgICAgICByZXR1cm4gc2VsZi5iYmZpbGVfY29sbGVjdGlvbnMuZ2V0KGxheWVyLCBOb25lKQorCisgICAgZGVmIHJlbW92ZV9sYXllcl9wcmVmaXgoc2VsZiwgZik6CisgICAgICAgICIiIlJlbW92ZSB0aGUgbGF5ZXJfZGlyIHByZWZpeCwgZS5nLiwgZiA9IC9wYXRoL3RvL2xheWVyX2Rpci9mb28vYmxhaCwgdGhlCisgICAgICAgICAgIHJldHVybiB2YWx1ZSB3aWxsIGJlOiBsYXllcl9kaXIvZm9vL2JsYWgiIiIKKyAgICAgICAgZl9sYXllcmRpciA9IHNlbGYuZ2V0X2ZpbGVfbGF5ZXJkaXIoZikKKyAgICAgICAgaWYgbm90IGZfbGF5ZXJkaXI6CisgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICBwcmVmaXggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGZfbGF5ZXJkaXIpLCAnJykKKyAgICAgICAgcmV0dXJuIGZbbGVuKHByZWZpeCk6XSBpZiBmLnN0YXJ0c3dpdGgocHJlZml4KSBlbHNlIGYKKworICAgIGRlZiBnZXRfbGF5ZXJfbmFtZShzZWxmLCBsYXllcmRpcik6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmJhc2VuYW1lKGxheWVyZGlyLnJzdHJpcChvcy5zZXApKQorCisgICAgZGVmIGFwcGx5X2FwcGVuZChzZWxmLCBhcHBlbmRuYW1lLCByZWNpcGVuYW1lKToKKyAgICAgICAgd2l0aCBvcGVuKGFwcGVuZG5hbWUsICdyJykgYXMgYXBwZW5kZmlsZToKKyAgICAgICAgICAgIHdpdGggb3BlbihyZWNpcGVuYW1lLCAnYScpIGFzIHJlY2lwZWZpbGU6CisgICAgICAgICAgICAgICAgcmVjaXBlZmlsZS53cml0ZSgnXG4nKQorICAgICAgICAgICAgICAgIHJlY2lwZWZpbGUud3JpdGUoJyMjIyMjIGJiYXBwZW5kZWQgZnJvbSAlcyAjIyMjI1xuJyAlIHNlbGYuZ2V0X2ZpbGVfbGF5ZXIoYXBwZW5kbmFtZSkpCisgICAgICAgICAgICAgICAgcmVjaXBlZmlsZS53cml0ZWxpbmVzKGFwcGVuZGZpbGUucmVhZGxpbmVzKCkpCisKKyAgICBkZWYgZG9fc2hvd19hcHBlbmRzKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJsaXN0IGJiYXBwZW5kIGZpbGVzIGFuZCByZWNpcGUgZmlsZXMgdGhleSBhcHBseSB0bworCitMaXN0cyByZWNpcGVzIHdpdGggdGhlIGJiYXBwZW5kcyB0aGF0IGFwcGx5IHRvIHRoZW0gYXMgc3ViaXRlbXMuCisiIiIKKyAgICAgICAgc2VsZi5pbml0X2JiaGFuZGxlcigpCisKKyAgICAgICAgbG9nZ2VyLnBsYWluKCc9PT0gQXBwZW5kZWQgcmVjaXBlcyA9PT0nKQorCisgICAgICAgIHBubGlzdCA9IGxpc3Qoc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEucGtnX3BuLmtleXMoKSkKKyAgICAgICAgcG5saXN0LnNvcnQoKQorICAgICAgICBhcHBlbmRzID0gRmFsc2UKKyAgICAgICAgZm9yIHBuIGluIHBubGlzdDoKKyAgICAgICAgICAgIGlmIHNlbGYuc2hvd19hcHBlbmRzX2Zvcl9wbihwbik6CisgICAgICAgICAgICAgICAgYXBwZW5kcyA9IFRydWUKKworICAgICAgICBpZiBzZWxmLnNob3dfYXBwZW5kc19mb3Jfc2tpcHBlZCgpOgorICAgICAgICAgICAgYXBwZW5kcyA9IFRydWUKKworICAgICAgICBpZiBub3QgYXBwZW5kczoKKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbignTm8gYXBwZW5kIGZpbGVzIGZvdW5kJykKKworICAgIGRlZiBzaG93X2FwcGVuZHNfZm9yX3BuKHNlbGYsIHBuKToKKyAgICAgICAgZmlsZW5hbWVzID0gc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEucGtnX3BuW3BuXQorCisgICAgICAgIGJlc3QgPSBiYi5wcm92aWRlcnMuZmluZEJlc3RQcm92aWRlcihwbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YS5wa2dfcG4pCisgICAgICAgIGJlc3RfZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGJlc3RbM10pCisKKyAgICAgICAgcmV0dXJuIHNlbGYuc2hvd19hcHBlbmRzX291dHB1dChmaWxlbmFtZXMsIGJlc3RfZmlsZW5hbWUpCisKKyAgICBkZWYgc2hvd19hcHBlbmRzX2Zvcl9za2lwcGVkKHNlbGYpOgorICAgICAgICBmaWxlbmFtZXMgPSBbb3MucGF0aC5iYXNlbmFtZShmKQorICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiBzZWxmLmJiaGFuZGxlci5jb29rZXIuc2tpcGxpc3QuaXRlcmtleXMoKV0KKyAgICAgICAgcmV0dXJuIHNlbGYuc2hvd19hcHBlbmRzX291dHB1dChmaWxlbmFtZXMsIE5vbmUsICIgKHNraXBwZWQpIikKKworICAgIGRlZiBzaG93X2FwcGVuZHNfb3V0cHV0KHNlbGYsIGZpbGVuYW1lcywgYmVzdF9maWxlbmFtZSwgbmFtZV9zdWZmaXggPSAnJyk6CisgICAgICAgIGFwcGVuZGVkLCBtaXNzaW5nID0gc2VsZi5nZXRfYXBwZW5kc19mb3JfZmlsZXMoZmlsZW5hbWVzKQorICAgICAgICBpZiBhcHBlbmRlZDoKKyAgICAgICAgICAgIGZvciBiYXNlbmFtZSwgYXBwZW5kcyBpbiBhcHBlbmRlZDoKKyAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oJyVzJXM6JywgYmFzZW5hbWUsIG5hbWVfc3VmZml4KQorICAgICAgICAgICAgICAgIGZvciBhcHBlbmQgaW4gYXBwZW5kczoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCcgICVzJywgYXBwZW5kKQorCisgICAgICAgICAgICBpZiBiZXN0X2ZpbGVuYW1lOgorICAgICAgICAgICAgICAgIGlmIGJlc3RfZmlsZW5hbWUgaW4gbWlzc2luZzoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJyVzOiBtaXNzaW5nIGFwcGVuZCBmb3IgcHJlZmVycmVkIHZlcnNpb24nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXN0X2ZpbGVuYW1lKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGdldF9hcHBlbmRzX2Zvcl9maWxlcyhzZWxmLCBmaWxlbmFtZXMpOgorICAgICAgICBhcHBlbmRlZCwgbm90YXBwZW5kZWQgPSBbXSwgW10KKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgIF8sIGNscyA9IGJiLmNhY2hlLkNhY2hlLnZpcnR1YWxmbjJyZWFsZm4oZmlsZW5hbWUpCisgICAgICAgICAgICBpZiBjbHM6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGZpbGVuYW1lKQorICAgICAgICAgICAgYXBwZW5kcyA9IHNlbGYuYmJoYW5kbGVyLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoYmFzZW5hbWUpCisgICAgICAgICAgICBpZiBhcHBlbmRzOgorICAgICAgICAgICAgICAgIGFwcGVuZGVkLmFwcGVuZCgoYmFzZW5hbWUsIGxpc3QoYXBwZW5kcykpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBub3RhcHBlbmRlZC5hcHBlbmQoYmFzZW5hbWUpCisgICAgICAgIHJldHVybiBhcHBlbmRlZCwgbm90YXBwZW5kZWQKKworICAgIGRlZiBkb19zaG93X2Nyb3NzX2RlcGVuZHMoc2VsZiwgYXJncyk6CisgICAgICAgICIiIlNob3cgZGVwZW5kZW5jaWVzIGJldHdlZW4gcmVjaXBlcyB0aGF0IGNyb3NzIGxheWVyIGJvdW5kYXJpZXMuCisKK0ZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHJlY2lwZXMgdGhhdCBjcm9zcyBsYXllciBib3VuZGFyaWVzLgorCitOT1RFOiAuYmJhcHBlbmQgZmlsZXMgY2FuIGltcGFjdCB0aGUgZGVwZW5kZW5jaWVzLgorIiIiCisgICAgICAgIGlnbm9yZV9sYXllcnMgPSAoYXJncy5pZ25vcmUgb3IgJycpLnNwbGl0KCcsJykKKworICAgICAgICBzZWxmLmluaXRfYmJoYW5kbGVyKCkKKworICAgICAgICBwa2dfZm4gPSBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YS5wa2dfZm4KKyAgICAgICAgYmJwYXRoID0gc3RyKHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLmdldFZhcignQkJQQVRIJywgVHJ1ZSkpCisgICAgICAgIHNlbGYucmVxdWlyZV9yZSA9IHJlLmNvbXBpbGUociJyZXF1aXJlXHMrKC4rKSIpCisgICAgICAgIHNlbGYuaW5jbHVkZV9yZSA9IHJlLmNvbXBpbGUociJpbmNsdWRlXHMrKC4rKSIpCisgICAgICAgIHNlbGYuaW5oZXJpdF9yZSA9IHJlLmNvbXBpbGUociJpbmhlcml0XHMrKC4rKSIpCisKKyAgICAgICAgZ2xvYmFsX2luaGVyaXQgPSAoc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEuZ2V0VmFyKCdJTkhFUklUJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgICAgICAjIFRoZSBiYidzIERFUEVORFMgYW5kIFJERVBFTkRTCisgICAgICAgIGZvciBmIGluIHBrZ19mbjoKKyAgICAgICAgICAgIGYgPSBiYi5jYWNoZS5DYWNoZS52aXJ0dWFsZm4ycmVhbGZuKGYpWzBdCisgICAgICAgICAgICAjIEdldCB0aGUgbGF5ZXJuYW1lIHRoYXQgdGhlIGZpbGUgaXMgaW4KKyAgICAgICAgICAgIGxheWVybmFtZSA9IHNlbGYuZ2V0X2ZpbGVfbGF5ZXIoZikKKworICAgICAgICAgICAgIyBUaGUgREVQRU5EUworICAgICAgICAgICAgZGVwcyA9IHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLmRlcHNbZl0KKyAgICAgICAgICAgIGZvciBwbiBpbiBkZXBzOgorICAgICAgICAgICAgICAgIGlmIHBuIGluIHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLnBrZ19wbjoKKyAgICAgICAgICAgICAgICAgICAgYmVzdCA9IGJiLnByb3ZpZGVycy5maW5kQmVzdFByb3ZpZGVyKHBuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLnBrZ19wbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19jcm9zc19kZXBlbmRzKCJERVBFTkRTIiwgbGF5ZXJuYW1lLCBmLCBiZXN0WzNdLCBhcmdzLmZpbGVuYW1lcywgaWdub3JlX2xheWVycykKKworICAgICAgICAgICAgIyBUaGUgUkRQRU5EUworICAgICAgICAgICAgYWxsX3JkZXBzID0gc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEucnVuZGVwc1tmXS52YWx1ZXMoKQorICAgICAgICAgICAgIyBSZW1vdmUgdGhlIGR1cGxpY2F0ZWQgb3IgbnVsbCBvbmUuCisgICAgICAgICAgICBzb3J0ZWRfcmRlcHMgPSB7fQorICAgICAgICAgICAgIyBUaGUgYWxsX3JkZXBzIGlzIHRoZSBsaXN0IGluIGxpc3QsIHNvIHdlIG5lZWQgdHdvIGZvciBsb29wcworICAgICAgICAgICAgZm9yIGsxIGluIGFsbF9yZGVwczoKKyAgICAgICAgICAgICAgICBmb3IgazIgaW4gazE6CisgICAgICAgICAgICAgICAgICAgIHNvcnRlZF9yZGVwc1trMl0gPSAxCisgICAgICAgICAgICBhbGxfcmRlcHMgPSBzb3J0ZWRfcmRlcHMua2V5cygpCisgICAgICAgICAgICBmb3IgcmRlcCBpbiBhbGxfcmRlcHM6CisgICAgICAgICAgICAgICAgYWxsX3AgPSBiYi5wcm92aWRlcnMuZ2V0UnVudGltZVByb3ZpZGVycyhzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YSwgcmRlcCkKKyAgICAgICAgICAgICAgICBpZiBhbGxfcDoKKyAgICAgICAgICAgICAgICAgICAgaWYgZiBpbiBhbGxfcDoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIHJlY2lwZSBwcm92aWRlcyB0aGlzIG9uZSBpdHNlbGYsIGlnbm9yZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgYmVzdCA9IGJiLnByb3ZpZGVycy5maWx0ZXJQcm92aWRlcnNSdW5UaW1lKGFsbF9wLCByZGVwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YSlbMF1bMF0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19jcm9zc19kZXBlbmRzKCJSREVQRU5EUyIsIGxheWVybmFtZSwgZiwgYmVzdCwgYXJncy5maWxlbmFtZXMsIGlnbm9yZV9sYXllcnMpCisKKyAgICAgICAgICAgICMgVGhlIFJSRUNPTU1FTkRTCisgICAgICAgICAgICBhbGxfcnJlY3MgPSBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YS5ydW5yZWNzW2ZdLnZhbHVlcygpCisgICAgICAgICAgICAjIFJlbW92ZSB0aGUgZHVwbGljYXRlZCBvciBudWxsIG9uZS4KKyAgICAgICAgICAgIHNvcnRlZF9ycmVjcyA9IHt9CisgICAgICAgICAgICAjIFRoZSBhbGxfcnJlY3MgaXMgdGhlIGxpc3QgaW4gbGlzdCwgc28gd2UgbmVlZCB0d28gZm9yIGxvb3BzCisgICAgICAgICAgICBmb3IgazEgaW4gYWxsX3JyZWNzOgorICAgICAgICAgICAgICAgIGZvciBrMiBpbiBrMToKKyAgICAgICAgICAgICAgICAgICAgc29ydGVkX3JyZWNzW2syXSA9IDEKKyAgICAgICAgICAgIGFsbF9ycmVjcyA9IHNvcnRlZF9ycmVjcy5rZXlzKCkKKyAgICAgICAgICAgIGZvciBycmVjIGluIGFsbF9ycmVjczoKKyAgICAgICAgICAgICAgICBhbGxfcCA9IGJiLnByb3ZpZGVycy5nZXRSdW50aW1lUHJvdmlkZXJzKHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLCBycmVjKQorICAgICAgICAgICAgICAgIGlmIGFsbF9wOgorICAgICAgICAgICAgICAgICAgICBpZiBmIGluIGFsbF9wOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGUgcmVjaXBlIHByb3ZpZGVzIHRoaXMgb25lIGl0c2VsZiwgaWdub3JlCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBiZXN0ID0gYmIucHJvdmlkZXJzLmZpbHRlclByb3ZpZGVyc1J1blRpbWUoYWxsX3AsIHJyZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJiaGFuZGxlci5jb25maWdfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhKVswXVswXQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX2Nyb3NzX2RlcGVuZHMoIlJSRUNPTU1FTkRTIiwgbGF5ZXJuYW1lLCBmLCBiZXN0LCBhcmdzLmZpbGVuYW1lcywgaWdub3JlX2xheWVycykKKworICAgICAgICAgICAgIyBUaGUgaW5oZXJpdCBjbGFzcworICAgICAgICAgICAgY2xzX3JlID0gcmUuY29tcGlsZSgnY2xhc3Nlcy8nKQorICAgICAgICAgICAgaWYgZiBpbiBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YS5pbmhlcml0czoKKyAgICAgICAgICAgICAgICBpbmhlcml0cyA9IHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLmluaGVyaXRzW2ZdCisgICAgICAgICAgICAgICAgZm9yIGNscyBpbiBpbmhlcml0czoKKyAgICAgICAgICAgICAgICAgICAgIyBUaGUgaW5oZXJpdHMnIGZvcm1hdCBpcyBbY2xhc3Nlcy9jbHMsIC9wYXRoL3RvL2NsYXNzZXMvY2xzXQorICAgICAgICAgICAgICAgICAgICAjIGlnbm9yZSB0aGUgY2xhc3Nlcy9jbHMuCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjbHNfcmUubWF0Y2goY2xzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShjbHMpKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2xhc3NuYW1lIGluIGdsb2JhbF9pbmhlcml0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0X2xheWVybmFtZSA9IHNlbGYuZ2V0X2ZpbGVfbGF5ZXIoY2xzKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW5oZXJpdF9sYXllcm5hbWUgIT0gbGF5ZXJuYW1lIGFuZCBub3QgaW5oZXJpdF9sYXllcm5hbWUgaW4gaWdub3JlX2xheWVyczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgYXJncy5maWxlbmFtZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZfc2hvcnQgPSBzZWxmLnJlbW92ZV9sYXllcl9wcmVmaXgoZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzID0gc2VsZi5yZW1vdmVfbGF5ZXJfcHJlZml4KGNscykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmX3Nob3J0ID0gZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiJXMgaW5oZXJpdHMgJXMiICUgKGZfc2hvcnQsIGNscykpCisKKyAgICAgICAgICAgICMgVGhlICdyZXF1aXJlL2luY2x1ZGUgeHh4JyBpbiB0aGUgYmIgZmlsZQorICAgICAgICAgICAgcHZfcmUgPSByZS5jb21waWxlKHIiXCR7UFZ9IikKKyAgICAgICAgICAgIHdpdGggb3BlbihmLCAncicpIGFzIGZuZmlsZToKKyAgICAgICAgICAgICAgICBsaW5lID0gZm5maWxlLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICB3aGlsZSBsaW5lOgorICAgICAgICAgICAgICAgICAgICBtLCBrZXl3b3JkID0gc2VsZi5tYXRjaF9yZXF1aXJlX2luY2x1ZGUobGluZSkKKyAgICAgICAgICAgICAgICAgICAgIyBGb3VuZCB0aGUgJ3JlcXVpcmUvaW5jbHVkZSB4eHh4JworICAgICAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICAgICAgbmVlZGVkX2ZpbGUgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgICAgICAgICAjIFJlcGxhY2UgdGhlICR7UFZ9IHdpdGggdGhlIHJlYWwgUFYKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHB2X3JlLnNlYXJjaChuZWVkZWRfZmlsZSkgYW5kIGYgaW4gc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEucGtnX3BlcHZwcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdiA9IHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLnBrZ19wZXB2cHJbZl1bMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkZWRfZmlsZSA9IHJlLnN1YihyIlwke1BWfSIsIHB2LCBuZWVkZWRfZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJpbnRfY3Jvc3NfZmlsZXMoYmJwYXRoLCBrZXl3b3JkLCBsYXllcm5hbWUsIGYsIG5lZWRlZF9maWxlLCBhcmdzLmZpbGVuYW1lcywgaWdub3JlX2xheWVycykKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGZuZmlsZS5yZWFkbGluZSgpCisKKyAgICAgICAgIyBUaGUgInJlcXVpcmUvaW5jbHVkZSB4eHgiIGluIGNvbmYvbWFjaGluZS8qLmNvbmYsIC5pbmMgYW5kIC5iYmNsYXNzCisgICAgICAgIGNvbmZfcmUgPSByZS5jb21waWxlKCIuKi9jb25mL21hY2hpbmUvW15cL10qXC5jb25mJCIpCisgICAgICAgIGluY19yZSA9IHJlLmNvbXBpbGUoIi4qXC5pbmMkIikKKyAgICAgICAgIyBUaGUgImluaGVyaXQgeHh4IiBpbiAuYmJjbGFzcworICAgICAgICBiYmNsYXNzX3JlID0gcmUuY29tcGlsZSgiLipcLmJiY2xhc3MkIikKKyAgICAgICAgZm9yIGxheWVyZGlyIGluIHNlbGYuYmJsYXllcnM6CisgICAgICAgICAgICBsYXllcm5hbWUgPSBzZWxmLmdldF9sYXllcl9uYW1lKGxheWVyZGlyKQorICAgICAgICAgICAgZm9yIGRpcnBhdGgsIGRpcm5hbWVzLCBmaWxlbmFtZXMgaW4gb3Mud2FsayhsYXllcmRpcik6CisgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgICAgICBmID0gb3MucGF0aC5qb2luKGRpcnBhdGgsIG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHMgPSBjb25mX3JlLm1hdGNoKGYpIG9yIGluY19yZS5tYXRjaChmKSBvciBiYmNsYXNzX3JlLm1hdGNoKGYpCisgICAgICAgICAgICAgICAgICAgIGlmIHM6CisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZiwgJ3InKSBhcyBmZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gZmZpbGUucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0sIGtleXdvcmQgPSBzZWxmLm1hdGNoX3JlcXVpcmVfaW5jbHVkZShsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE9ubHkgYmJjbGFzcyBoYXMgdGhlICJpbmhlcml0IHh4eCIgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmJjbGFzcz0iIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbSBhbmQgZi5lbmRzd2l0aCgiLmJiY2xhc3MiKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0sIGtleXdvcmQgPSBzZWxmLm1hdGNoX2luaGVyaXQobGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiY2xhc3M9Ii5iYmNsYXNzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZpbmQgYSAncmVxdWlyZS9pbmNsdWRlIHh4eHgnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByaW50X2Nyb3NzX2ZpbGVzKGJicGF0aCwga2V5d29yZCwgbGF5ZXJuYW1lLCBmLCBtLmdyb3VwKDEpICsgYmJjbGFzcywgYXJncy5maWxlbmFtZXMsIGlnbm9yZV9sYXllcnMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBmZmlsZS5yZWFkbGluZSgpCisKKyAgICBkZWYgcHJpbnRfY3Jvc3NfZmlsZXMoc2VsZiwgYmJwYXRoLCBrZXl3b3JkLCBsYXllcm5hbWUsIGYsIG5lZWRlZF9maWxlbmFtZSwgc2hvd19maWxlbmFtZXMsIGlnbm9yZV9sYXllcnMpOgorICAgICAgICAiIiJQcmludCB0aGUgZGVwZW5kcyB0aGF0IGNyb3NzZXMgYSBsYXllciBib3VuZGFyeSIiIgorICAgICAgICBuZWVkZWRfZmlsZSA9IGJiLnV0aWxzLndoaWNoKGJicGF0aCwgbmVlZGVkX2ZpbGVuYW1lKQorICAgICAgICBpZiBuZWVkZWRfZmlsZToKKyAgICAgICAgICAgICMgV2hpY2ggbGF5ZXIgaXMgdGhpcyBmaWxlIGZyb20KKyAgICAgICAgICAgIG5lZWRlZF9sYXllcm5hbWUgPSBzZWxmLmdldF9maWxlX2xheWVyKG5lZWRlZF9maWxlKQorICAgICAgICAgICAgaWYgbmVlZGVkX2xheWVybmFtZSAhPSBsYXllcm5hbWUgYW5kIG5vdCBuZWVkZWRfbGF5ZXJuYW1lIGluIGlnbm9yZV9sYXllcnM6CisgICAgICAgICAgICAgICAgaWYgbm90IHNob3dfZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgICAgICBmID0gc2VsZi5yZW1vdmVfbGF5ZXJfcHJlZml4KGYpCisgICAgICAgICAgICAgICAgICAgIG5lZWRlZF9maWxlID0gc2VsZi5yZW1vdmVfbGF5ZXJfcHJlZml4KG5lZWRlZF9maWxlKQorICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiJXMgJXMgJXMiICUoZiwga2V5d29yZCwgbmVlZGVkX2ZpbGUpKQorCisgICAgZGVmIG1hdGNoX2luaGVyaXQoc2VsZiwgbGluZSk6CisgICAgICAgICIiIk1hdGNoIHRoZSBpbmhlcml0IHh4eCBsaW5lIiIiCisgICAgICAgIHJldHVybiAoc2VsZi5pbmhlcml0X3JlLm1hdGNoKGxpbmUpLCAiaW5oZXJpdHMiKQorCisgICAgZGVmIG1hdGNoX3JlcXVpcmVfaW5jbHVkZShzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiTWF0Y2ggdGhlIHJlcXVpcmUvaW5jbHVkZSB4eHggbGluZSIiIgorICAgICAgICBtID0gc2VsZi5yZXF1aXJlX3JlLm1hdGNoKGxpbmUpCisgICAgICAgIGtleXdvcmQgPSAicmVxdWlyZXMiCisgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgbSA9IHNlbGYuaW5jbHVkZV9yZS5tYXRjaChsaW5lKQorICAgICAgICAgICAga2V5d29yZCA9ICJpbmNsdWRlcyIKKyAgICAgICAgcmV0dXJuIChtLCBrZXl3b3JkKQorCisgICAgZGVmIGNoZWNrX2Nyb3NzX2RlcGVuZHMoc2VsZiwga2V5d29yZCwgbGF5ZXJuYW1lLCBmLCBuZWVkZWRfZmlsZSwgc2hvd19maWxlbmFtZXMsIGlnbm9yZV9sYXllcnMpOgorICAgICAgICAiIiJQcmludCB0aGUgREVQRU5EUy9SREVQRU5EUyBmaWxlIHRoYXQgY3Jvc3NlcyBhIGxheWVyIGJvdW5kYXJ5IiIiCisgICAgICAgIGJlc3RfcmVhbGZuID0gYmIuY2FjaGUuQ2FjaGUudmlydHVhbGZuMnJlYWxmbihuZWVkZWRfZmlsZSlbMF0KKyAgICAgICAgbmVlZGVkX2xheWVybmFtZSA9IHNlbGYuZ2V0X2ZpbGVfbGF5ZXIoYmVzdF9yZWFsZm4pCisgICAgICAgIGlmIG5lZWRlZF9sYXllcm5hbWUgIT0gbGF5ZXJuYW1lIGFuZCBub3QgbmVlZGVkX2xheWVybmFtZSBpbiBpZ25vcmVfbGF5ZXJzOgorICAgICAgICAgICAgaWYgbm90IHNob3dfZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgIGYgPSBzZWxmLnJlbW92ZV9sYXllcl9wcmVmaXgoZikKKyAgICAgICAgICAgICAgICBiZXN0X3JlYWxmbiA9IHNlbGYucmVtb3ZlX2xheWVyX3ByZWZpeChiZXN0X3JlYWxmbikKKworICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCIlcyAlcyAlcyIgJSAoZiwga2V5d29yZCwgYmVzdF9yZWFsZm4pKQorCisKK2RlZiBtYWluKCk6CisKKyAgICBjbWRzID0gQ29tbWFuZHMoKQorCisgICAgZGVmIGFkZF9jb21tYW5kKGNtZG5hbWUsIGZ1bmN0aW9uLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAjIENvbnZlcnQgZG9jc3RyaW5nIGZvciBmdW5jdGlvbiB0byBoZWxwIChvbmUtbGluZXIgc2hvd24gaW4gbWFpbiAtLWhlbHApIGFuZCBkZXNjcmlwdGlvbiAoc2hvd24gaW4gc3ViY29tbWFuZCAtLWhlbHApCisgICAgICAgIGRvY3NwbGl0ID0gZnVuY3Rpb24uX19kb2NfXy5zcGxpdGxpbmVzKCkKKyAgICAgICAgaGVscCA9IGRvY3NwbGl0WzBdCisgICAgICAgIGlmIGxlbihkb2NzcGxpdCkgPiAxOgorICAgICAgICAgICAgZGVzYyA9ICdcbicuam9pbihkb2NzcGxpdFsxOl0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZXNjID0gaGVscAorICAgICAgICBzdWJwYXJzZXIgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoY21kbmFtZSwgKmFyZ3MsIGhlbHA9aGVscCwgZGVzY3JpcHRpb249ZGVzYywgZm9ybWF0dGVyX2NsYXNzPWFyZ3BhcnNlLlJhd1RleHRIZWxwRm9ybWF0dGVyLCAqKmt3YXJncykKKyAgICAgICAgc3VicGFyc2VyLnNldF9kZWZhdWx0cyhmdW5jPWZ1bmN0aW9uKQorICAgICAgICByZXR1cm4gc3VicGFyc2VyCisKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iQml0QmFrZSBsYXllcnMgdXRpbGl0eSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXBpbG9nPSJVc2UgJShwcm9nKXMgPHN1YmNvbW1hbmQ+IC0taGVscCB0byBnZXQgaGVscCBvbiBhIHNwZWNpZmljIGNvbW1hbmQiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1kJywgJy0tZGVidWcnLCBoZWxwPSdFbmFibGUgZGVidWcgb3V0cHV0JywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcScsICctLXF1aWV0JywgaGVscD0nUHJpbnQgb25seSBlcnJvcnMnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnModGl0bGU9J3N1YmNvbW1hbmRzJywgbWV0YXZhcj0nPHN1YmNvbW1hbmQ+JykKKworICAgIHBhcnNlcl9zaG93X2xheWVycyA9IGFkZF9jb21tYW5kKCdzaG93LWxheWVycycsIGNtZHMuZG9fc2hvd19sYXllcnMpCisKKyAgICBwYXJzZXJfYWRkX2xheWVyID0gYWRkX2NvbW1hbmQoJ2FkZC1sYXllcicsIGNtZHMuZG9fYWRkX2xheWVyKQorICAgIHBhcnNlcl9hZGRfbGF5ZXIuYWRkX2FyZ3VtZW50KCdsYXllcmRpcicsIGhlbHA9J0xheWVyIGRpcmVjdG9yeSB0byBhZGQnKQorCisgICAgcGFyc2VyX3JlbW92ZV9sYXllciA9IGFkZF9jb21tYW5kKCdyZW1vdmUtbGF5ZXInLCBjbWRzLmRvX3JlbW92ZV9sYXllcikKKyAgICBwYXJzZXJfcmVtb3ZlX2xheWVyLmFkZF9hcmd1bWVudCgnbGF5ZXJkaXInLCBoZWxwPSdMYXllciBkaXJlY3RvcnkgdG8gcmVtb3ZlICh3aWxkY2FyZHMgYWxsb3dlZCwgZW5jbG9zZSBpbiBxdW90ZXMgdG8gYXZvaWQgc2hlbGwgZXhwYW5zaW9uKScpCisgICAgcGFyc2VyX3JlbW92ZV9sYXllci5zZXRfZGVmYXVsdHMoZnVuYz1jbWRzLmRvX3JlbW92ZV9sYXllcikKKworICAgIHBhcnNlcl9zaG93X292ZXJsYXllZCA9IGFkZF9jb21tYW5kKCdzaG93LW92ZXJsYXllZCcsIGNtZHMuZG9fc2hvd19vdmVybGF5ZWQpCisgICAgcGFyc2VyX3Nob3dfb3ZlcmxheWVkLmFkZF9hcmd1bWVudCgnLWYnLCAnLS1maWxlbmFtZXMnLCBoZWxwPSdpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGZvcm1hdHRpbmcsIGxpc3QgZmlsZW5hbWVzIG9mIGhpZ2hlciBwcmlvcml0eSByZWNpcGVzIHdpdGggdGhlIG9uZXMgdGhleSBvdmVybGF5IGluZGVudGVkIHVuZGVybmVhdGgnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl9zaG93X292ZXJsYXllZC5hZGRfYXJndW1lbnQoJy1zJywgJy0tc2FtZS12ZXJzaW9uJywgaGVscD0nb25seSBsaXN0IG92ZXJsYXllZCByZWNpcGVzIHdoZXJlIHRoZSB2ZXJzaW9uIGlzIHRoZSBzYW1lJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKworICAgIHBhcnNlcl9zaG93X3JlY2lwZXMgPSBhZGRfY29tbWFuZCgnc2hvdy1yZWNpcGVzJywgY21kcy5kb19zaG93X3JlY2lwZXMpCisgICAgcGFyc2VyX3Nob3dfcmVjaXBlcy5hZGRfYXJndW1lbnQoJy1mJywgJy0tZmlsZW5hbWVzJywgaGVscD0naW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBmb3JtYXR0aW5nLCBsaXN0IGZpbGVuYW1lcyBvZiBoaWdoZXIgcHJpb3JpdHkgcmVjaXBlcyB3aXRoIHRoZSBvbmVzIHRoZXkgb3ZlcmxheSBpbmRlbnRlZCB1bmRlcm5lYXRoJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfc2hvd19yZWNpcGVzLmFkZF9hcmd1bWVudCgnLW0nLCAnLS1tdWx0aXBsZScsIGhlbHA9J29ubHkgbGlzdCB3aGVyZSBtdWx0aXBsZSByZWNpcGVzIChpbiB0aGUgc2FtZSBsYXllciBvciBkaWZmZXJlbnQgbGF5ZXJzKSBleGlzdCBmb3IgdGhlIHNhbWUgcmVjaXBlIG5hbWUnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl9zaG93X3JlY2lwZXMuYWRkX2FyZ3VtZW50KCctaScsICctLWluaGVyaXRzJywgaGVscD0nb25seSBsaXN0IHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBuYW1lZCBjbGFzcycsIG1ldGF2YXI9J0NMQVNTJywgZGVmYXVsdD0nJykKKyAgICBwYXJzZXJfc2hvd19yZWNpcGVzLmFkZF9hcmd1bWVudCgncG5zcGVjJywgbmFyZ3M9Jz8nLCBoZWxwPSdvcHRpb25hbCByZWNpcGUgbmFtZSBzcGVjaWZpY2F0aW9uICh3aWxkY2FyZHMgYWxsb3dlZCwgZW5jbG9zZSBpbiBxdW90ZXMgdG8gYXZvaWQgc2hlbGwgZXhwYW5zaW9uKScpCisKKyAgICBwYXJzZXJfc2hvd19hcHBlbmRzID0gYWRkX2NvbW1hbmQoJ3Nob3ctYXBwZW5kcycsIGNtZHMuZG9fc2hvd19hcHBlbmRzKQorCisgICAgcGFyc2VyX2ZsYXR0ZW4gPSBhZGRfY29tbWFuZCgnZmxhdHRlbicsIGNtZHMuZG9fZmxhdHRlbikKKyAgICBwYXJzZXJfZmxhdHRlbi5hZGRfYXJndW1lbnQoJ2xheWVyJywgbmFyZ3M9JyonLCBoZWxwPSdPcHRpb25hbCBsYXllcihzKSB0byBmbGF0dGVuIChvdGhlcndpc2UgYWxsIGFyZSBmbGF0dGVuZWQpJykKKyAgICBwYXJzZXJfZmxhdHRlbi5hZGRfYXJndW1lbnQoJ291dHB1dGRpcicsIGhlbHA9J091dHB1dCBkaXJlY3RvcnknKQorCisgICAgcGFyc2VyX3Nob3dfY3Jvc3NfZGVwZW5kcyA9IGFkZF9jb21tYW5kKCdzaG93LWNyb3NzLWRlcGVuZHMnLCBjbWRzLmRvX3Nob3dfY3Jvc3NfZGVwZW5kcykKKyAgICBwYXJzZXJfc2hvd19jcm9zc19kZXBlbmRzLmFkZF9hcmd1bWVudCgnLWYnLCAnLS1maWxlbmFtZXMnLCBoZWxwPSdzaG93IGZ1bGwgZmlsZSBwYXRoJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfc2hvd19jcm9zc19kZXBlbmRzLmFkZF9hcmd1bWVudCgnLWknLCAnLS1pZ25vcmUnLCBoZWxwPSdpZ25vcmUgZGVwZW5kZW5jaWVzIG9uIGl0ZW1zIGluIHRoZSBzcGVjaWZpZWQgbGF5ZXIocykgKHNwbGl0IG11bHRpcGxlIGxheWVyIG5hbWVzIHdpdGggY29tbWFzLCBubyBzcGFjZXMpJywgbWV0YXZhcj0nTEFZRVJOQU1FJykKKworICAgIHBhcnNlcl9sYXllcmluZGV4X2ZldGNoID0gYWRkX2NvbW1hbmQoJ2xheWVyaW5kZXgtZmV0Y2gnLCBjbWRzLmRvX2xheWVyaW5kZXhfZmV0Y2gpCisgICAgcGFyc2VyX2xheWVyaW5kZXhfZmV0Y2guYWRkX2FyZ3VtZW50KCctbicsICctLXNob3ctb25seScsIGhlbHA9J3Nob3cgZGVwZW5kZW5jaWVzIGFuZCBkbyBub3RoaW5nIGVsc2UnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl9sYXllcmluZGV4X2ZldGNoLmFkZF9hcmd1bWVudCgnLWInLCAnLS1icmFuY2gnLCBoZWxwPSdicmFuY2ggbmFtZSB0byBmZXRjaCAoZGVmYXVsdCAlKGRlZmF1bHQpcyknLCBkZWZhdWx0PSdtYXN0ZXInKQorICAgIHBhcnNlcl9sYXllcmluZGV4X2ZldGNoLmFkZF9hcmd1bWVudCgnLWknLCAnLS1pZ25vcmUnLCBoZWxwPSdhc3N1bWUgdGhlIHNwZWNpZmllZCBsYXllcnMgZG8gbm90IG5lZWQgdG8gYmUgZmV0Y2hlZC9hZGRlZCAoc2VwYXJhdGUgbXVsdGlwbGUgbGF5ZXJzIHdpdGggY29tbWFzLCBubyBzcGFjZXMpJywgbWV0YXZhcj0nTEFZRVInKQorICAgIHBhcnNlcl9sYXllcmluZGV4X2ZldGNoLmFkZF9hcmd1bWVudCgnbGF5ZXJuYW1lJywgbmFyZ3M9JysnLCBoZWxwPSdsYXllciB0byBmZXRjaCcpCisKKyAgICBwYXJzZXJfbGF5ZXJpbmRleF9zaG93X2RlcGVuZHMgPSBhZGRfY29tbWFuZCgnbGF5ZXJpbmRleC1zaG93LWRlcGVuZHMnLCBjbWRzLmRvX2xheWVyaW5kZXhfc2hvd19kZXBlbmRzKQorICAgIHBhcnNlcl9sYXllcmluZGV4X3Nob3dfZGVwZW5kcy5hZGRfYXJndW1lbnQoJy1iJywgJy0tYnJhbmNoJywgaGVscD0nYnJhbmNoIG5hbWUgdG8gZmV0Y2ggKGRlZmF1bHQgJShkZWZhdWx0KXMpJywgZGVmYXVsdD0nbWFzdGVyJykKKyAgICBwYXJzZXJfbGF5ZXJpbmRleF9zaG93X2RlcGVuZHMuYWRkX2FyZ3VtZW50KCdsYXllcm5hbWUnLCBuYXJncz0nKycsIGhlbHA9J2xheWVyIHRvIHF1ZXJ5JykKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBpZiBhcmdzLmRlYnVnOgorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKyAgICBlbGlmIGFyZ3MucXVpZXQ6CisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkVSUk9SKQorCisgICAgdHJ5OgorICAgICAgICByZXQgPSBhcmdzLmZ1bmMoYXJncykKKyAgICBleGNlcHQgVXNlckVycm9yIGFzIGVycjoKKyAgICAgICAgbG9nZ2VyLmVycm9yKHN0cihlcnIpKQorICAgICAgICByZXQgPSAxCisKKyAgICByZXR1cm4gcmV0CisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0cnk6CisgICAgICAgIHJldCA9IG1haW4oKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJldCA9IDEKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKDUpCisgICAgc3lzLmV4aXQocmV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLXByc2VydiBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1wcnNlcnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYThkN2FjYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1wcnNlcnYKQEAgLTAsMCArMSw1NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMsbG9nZ2luZworaW1wb3J0IG9wdHBhcnNlCisKK3N5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpLCdsaWInKSkKKworaW1wb3J0IHByc2VydgoraW1wb3J0IHByc2Vydi5zZXJ2CisKK19fdmVyc2lvbl9fPSIxLjAuMCIKKworUFJIT1NUX0RFRkFVTFQ9JzAuMC4wLjAnCitQUlBPUlRfREVGQVVMVD04NTg1CisKK2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgICAgICB2ZXJzaW9uPSJCaXRiYWtlIFBSIFNlcnZpY2UgQ29yZSB2ZXJzaW9uICVzLCAlJXByb2cgdmVyc2lvbiAlcyIgJSAocHJzZXJ2Ll9fdmVyc2lvbl9fLCBfX3ZlcnNpb25fXyksCisgICAgICAgIHVzYWdlID0gIiVwcm9nIDwgLS1zdGFydCB8IC0tc3RvcCA+IFtvcHRpb25zXSIpCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWYiLCAiLS1maWxlIiwgaGVscD0iZGF0YWJhc2UgZmlsZW5hbWUoZGVmYXVsdDogcHJzZXJ2LnNxbGl0ZTMpIiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0iZGJmaWxlIiwgdHlwZT0ic3RyaW5nIiwgZGVmYXVsdD0icHJzZXJ2LnNxbGl0ZTMiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbCIsICItLWxvZyIsIGhlbHA9ImxvZyBmaWxlbmFtZShkZWZhdWx0OiBwcnNlcnYubG9nKSIsIGFjdGlvbj0ic3RvcmUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9ImxvZ2ZpbGUiLCB0eXBlPSJzdHJpbmciLCBkZWZhdWx0PSJwcnNlcnYubG9nIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1sb2dsZXZlbCIsIGhlbHA9ImxvZ2dpbmcgbGV2ZWwsIGkuZS4gQ1JJVElDQUwsIEVSUk9SLCBXQVJOSU5HLCBJTkZPLCBERUJVRyIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlIiwgdHlwZT0ic3RyaW5nIiwgZGVzdD0ibG9nbGV2ZWwiLCBkZWZhdWx0ID0gIklORk8iKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLXN0YXJ0IiwgaGVscD0ic3RhcnQgZGFlbW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJzdGFydCIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tc3RvcCIsIGhlbHA9InN0b3AgZGFlbW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJzdG9wIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1ob3N0IiwgaGVscD0iaXAgYWRkcmVzcyB0byBiaW5kIiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0iaG9zdCIsIHR5cGU9InN0cmluZyIsIGRlZmF1bHQ9UFJIT1NUX0RFRkFVTFQpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tcG9ydCIsIGhlbHA9InBvcnQgbnVtYmVyKGRlZmF1bHQ6IDg1ODUpIiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0icG9ydCIsIHR5cGU9ImludCIsIGRlZmF1bHQ9UFJQT1JUX0RFRkFVTFQpCisKKyAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3YpCisgICAgcHJzZXJ2LmluaXRfbG9nZ2VyKG9zLnBhdGguYWJzcGF0aChvcHRpb25zLmxvZ2ZpbGUpLG9wdGlvbnMubG9nbGV2ZWwpCisKKyAgICBpZiBvcHRpb25zLnN0YXJ0OgorICAgICAgICByZXQ9cHJzZXJ2LnNlcnYuc3RhcnRfZGFlbW9uKG9wdGlvbnMuZGJmaWxlLCBvcHRpb25zLmhvc3QsIG9wdGlvbnMucG9ydCxvcy5wYXRoLmFic3BhdGgob3B0aW9ucy5sb2dmaWxlKSkKKyAgICBlbGlmIG9wdGlvbnMuc3RvcDoKKyAgICAgICAgcmV0PXByc2Vydi5zZXJ2LnN0b3BfZGFlbW9uKG9wdGlvbnMuaG9zdCwgb3B0aW9ucy5wb3J0KQorICAgIGVsc2U6CisgICAgICAgIHJldD1wYXJzZXIucHJpbnRfaGVscCgpCisgICAgcmV0dXJuIHJldAorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRyeToKKyAgICAgICAgcmV0ID0gbWFpbigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmV0ID0gMQorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoNSkKKyAgICBzeXMuZXhpdChyZXQpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1zZWxmdGVzdCBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1zZWxmdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NjJlYjFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLXNlbGZ0ZXN0CkBAIC0wLDAgKzEsNTUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cywgbG9nZ2luZworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSksICdsaWInKSkKKworaW1wb3J0IHVuaXR0ZXN0Cit0cnk6CisgICAgaW1wb3J0IGJiCitleGNlcHQgUnVudGltZUVycm9yIGFzIGV4YzoKKyAgICBzeXMuZXhpdChzdHIoZXhjKSkKKworZGVmIHVzYWdlKCk6CisgICAgcHJpbnQoJ3VzYWdlOiBbQkJfU0tJUF9ORVRURVNUUz15ZXNdICVzIFstdl0gW3Rlc3RuYW1lMSBbdGVzdG5hbWUyXS4uLl0nICUgb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkpCisKK3ZlcmJvc2l0eSA9IDEKKwordGVzdHMgPSBzeXMuYXJndlsxOl0KK2lmICctdicgaW4gc3lzLmFyZ3Y6CisgICAgdGVzdHMucmVtb3ZlKCctdicpCisgICAgdmVyYm9zaXR5ID0gMgorCitpZiB0ZXN0czoKKyAgICBpZiAnLS1oZWxwJyBpbiBzeXMuYXJndlsxOl06CisgICAgICAgIHVzYWdlKCkKKyAgICAgICAgc3lzLmV4aXQoMCkKK2Vsc2U6CisgICAgdGVzdHMgPSBbImJiLnRlc3RzLmNvZGVwYXJzZXIiLAorICAgICAgICAgICAgICJiYi50ZXN0cy5jb3ciLAorICAgICAgICAgICAgICJiYi50ZXN0cy5kYXRhIiwKKyAgICAgICAgICAgICAiYmIudGVzdHMuZmV0Y2giLAorICAgICAgICAgICAgICJiYi50ZXN0cy5wYXJzZSIsCisgICAgICAgICAgICAgImJiLnRlc3RzLnV0aWxzIl0KKworZm9yIHQgaW4gdGVzdHM6CisgICAgdCA9ICcuJy5qb2luKHQuc3BsaXQoJy4nKVs6M10pCisgICAgX19pbXBvcnRfXyh0KQorCit1bml0dGVzdC5tYWluKGFyZ3Y9WyJiaXRiYWtlLXNlbGZ0ZXN0Il0gKyB0ZXN0cywgdmVyYm9zaXR5PXZlcmJvc2l0eSkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLXdvcmtlciBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS13b3JrZXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWYxN2I4NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS13b3JrZXIKQEAgLTAsMCArMSw0MzIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB3YXJuaW5ncworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKSksICdsaWInKSkKK2Zyb20gYmIgaW1wb3J0IGZldGNoMgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBiYgoraW1wb3J0IHNlbGVjdAoraW1wb3J0IGVycm5vCitpbXBvcnQgc2lnbmFsCisKKyMgVXNlcnMgc2hvdWxkbid0IGJlIHJ1bm5pbmcgdGhpcyBjb2RlIGRpcmVjdGx5CitpZiBsZW4oc3lzLmFyZ3YpICE9IDIgb3Igbm90IHN5cy5hcmd2WzFdLnN0YXJ0c3dpdGgoImRlY2FmYmFkIik6CisgICAgcHJpbnQoImJpdGJha2Utd29ya2VyIGlzIG1lYW50IGZvciBpbnRlcm5hbCBleGVjdXRpb24gYnkgYml0YmFrZSBpdHNlbGYsIHBsZWFzZSBkb24ndCB1c2UgaXQgc3RhbmRhbG9uZS4iKQorICAgIHN5cy5leGl0KDEpCisKK3Byb2ZpbGluZyA9IEZhbHNlCitpZiBzeXMuYXJndlsxXSA9PSAiZGVjYWZiYWRiYWQiOgorICAgIHByb2ZpbGluZyA9IFRydWUKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBjUHJvZmlsZSBhcyBwcm9maWxlCisgICAgZXhjZXB0OgorICAgICAgICBpbXBvcnQgcHJvZmlsZQorCisjIFVuYnVmZmVyIHN0ZG91dCB0byBhdm9pZCBsb2cgdHJ1bmNhdGlvbiBpbiB0aGUgZXZlbnQKKyMgb2YgYW4gdW5vcmRlcmx5IGV4aXQgYXMgd2VsbCBhcyB0byBwcm92aWRlIHRpbWVseQorIyB1cGRhdGVzIHRvIGxvZyBmaWxlcyBmb3IgdXNlIHdpdGggdGFpbAordHJ5OgorICAgIGlmIHN5cy5zdGRvdXQubmFtZSA9PSAnPHN0ZG91dD4nOgorICAgICAgICBzeXMuc3Rkb3V0ID0gb3MuZmRvcGVuKHN5cy5zdGRvdXQuZmlsZW5vKCksICd3JywgMCkKK2V4Y2VwdDoKKyAgICBwYXNzCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlIikKKwordHJ5OgorICAgIGltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGltcG9ydCBwaWNrbGUKKyAgICBiYi5tc2cubm90ZSgxLCBiYi5tc2cuZG9tYWluLkNhY2hlLCAiSW1wb3J0aW5nIGNQaWNrbGUgZmFpbGVkLiBGYWxsaW5nIGJhY2sgdG8gYSB2ZXJ5IHNsb3cgaW1wbGVtZW50YXRpb24uIikKKworCit3b3JrZXJfcGlwZSA9IHN5cy5zdGRvdXQuZmlsZW5vKCkKK2JiLnV0aWxzLm5vbmJsb2NraW5nZmQod29ya2VyX3BpcGUpCisKK2hhbmRsZXIgPSBiYi5ldmVudC5Mb2dIYW5kbGVyKCkKK2xvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCisKK2lmIDA6CisgICAgIyBDb2RlIHRvIHdyaXRlIG91dCBhIGxvZyBmaWxlIG9mIGFsbCBldmVudHMgcGFzc2luZyB0aHJvdWdoIHRoZSB3b3JrZXIKKyAgICBsb2dmaWxlbmFtZSA9ICIvdG1wL3dvcmtlcmxvZ2ZpbGUiCisgICAgZm9ybWF0X3N0ciA9ICIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIKKyAgICBjb25sb2dmb3JtYXQgPSBiYi5tc2cuQkJMb2dGb3JtYXR0ZXIoZm9ybWF0X3N0cikKKyAgICBjb25zb2xlbG9nID0gbG9nZ2luZy5GaWxlSGFuZGxlcihsb2dmaWxlbmFtZSkKKyAgICBiYi5tc2cuYWRkRGVmYXVsdGxvZ0ZpbHRlcihjb25zb2xlbG9nKQorICAgIGNvbnNvbGVsb2cuc2V0Rm9ybWF0dGVyKGNvbmxvZ2Zvcm1hdCkKKyAgICBsb2dnZXIuYWRkSGFuZGxlcihjb25zb2xlbG9nKQorCit3b3JrZXJfcXVldWUgPSAiIgorCitkZWYgd29ya2VyX2ZpcmUoZXZlbnQsIGQpOgorICAgIGRhdGEgPSAiPGV2ZW50PiIgKyBwaWNrbGUuZHVtcHMoZXZlbnQpICsgIjwvZXZlbnQ+IgorICAgIHdvcmtlcl9maXJlX3ByZXBpY2tsZWQoZGF0YSkKKworZGVmIHdvcmtlcl9maXJlX3ByZXBpY2tsZWQoZXZlbnQpOgorICAgIGdsb2JhbCB3b3JrZXJfcXVldWUKKworICAgIHdvcmtlcl9xdWV1ZSA9IHdvcmtlcl9xdWV1ZSArIGV2ZW50CisgICAgd29ya2VyX2ZsdXNoKCkKKworZGVmIHdvcmtlcl9mbHVzaCgpOgorICAgIGdsb2JhbCB3b3JrZXJfcXVldWUsIHdvcmtlcl9waXBlCisKKyAgICBpZiBub3Qgd29ya2VyX3F1ZXVlOgorICAgICAgICByZXR1cm4KKworICAgIHRyeToKKyAgICAgICAgd3JpdHRlbiA9IG9zLndyaXRlKHdvcmtlcl9waXBlLCB3b3JrZXJfcXVldWUpCisgICAgICAgIHdvcmtlcl9xdWV1ZSA9IHdvcmtlcl9xdWV1ZVt3cml0dGVuOl0KKyAgICBleGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpIGFzIGU6CisgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUFHQUlOIGFuZCBlLmVycm5vICE9IGVycm5vLkVQSVBFOgorICAgICAgICAgICAgcmFpc2UKKworZGVmIHdvcmtlcl9jaGlsZF9maXJlKGV2ZW50LCBkKToKKyAgICBnbG9iYWwgd29ya2VyX3BpcGUKKworICAgIGRhdGEgPSAiPGV2ZW50PiIgKyBwaWNrbGUuZHVtcHMoZXZlbnQpICsgIjwvZXZlbnQ+IgorICAgIHRyeToKKyAgICAgICAgd29ya2VyX3BpcGUud3JpdGUoZGF0YSkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgc2lndGVybV9oYW5kbGVyKE5vbmUsIE5vbmUpCisgICAgICAgIHJhaXNlCisKK2JiLmV2ZW50Lndvcmtlcl9maXJlID0gd29ya2VyX2ZpcmUKKworbGYgPSBOb25lCisjbGYgPSBvcGVuKCIvdG1wL3dvcmtlcmNvbW1hbmRsb2ciLCAidysiKQorZGVmIHdvcmtlcmxvZ193cml0ZShtc2cpOgorICAgIGlmIGxmOgorICAgICAgICBsZi53cml0ZShtc2cpCisgICAgICAgIGxmLmZsdXNoKCkKKworZGVmIHNpZ3Rlcm1faGFuZGxlcihzaWdudW0sIGZyYW1lKToKKyAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJNLCBzaWduYWwuU0lHX0RGTCkKKyAgICBvcy5raWxscGcoMCwgc2lnbmFsLlNJR1RFUk0pCisgICAgc3lzLmV4aXQoKQorCitkZWYgZm9ya19vZmZfdGFzayhjZmcsIGRhdGEsIHdvcmtlcmRhdGEsIGZuLCB0YXNrLCB0YXNrbmFtZSwgYXBwZW5kcywgdGFza2RlcGRhdGEsIHF1aWV0ZXJyb3JzPUZhbHNlKToKKyAgICAjIFdlIG5lZWQgdG8gc2V0dXAgdGhlIGVudmlyb25tZW50IEJFRk9SRSB0aGUgZm9yaywgc2luY2UKKyAgICAjIGEgZm9yaygpIG9yIGV4ZWMqKCkgYWN0aXZhdGVzIFBTRVVETy4uLgorCisgICAgZW52YmFja3VwID0ge30KKyAgICBmYWtlZW52ID0ge30KKyAgICB1bWFzayA9IE5vbmUKKworICAgIHRhc2tkZXAgPSB3b3JrZXJkYXRhWyJ0YXNrZGVwcyJdW2ZuXQorICAgIGlmICd1bWFzaycgaW4gdGFza2RlcCBhbmQgdGFza25hbWUgaW4gdGFza2RlcFsndW1hc2snXToKKyAgICAgICAgIyB1bWFzayBtaWdodCBjb21lIGluIGFzIGEgbnVtYmVyIG9yIHRleHQgc3RyaW5nLi4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIHVtYXNrID0gaW50KHRhc2tkZXBbJ3VtYXNrJ11bdGFza25hbWVdLDgpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgdW1hc2sgPSB0YXNrZGVwWyd1bWFzayddW3Rhc2tuYW1lXQorCisgICAgIyBXZSBjYW4ndCB1c2UgdGhlIGZha2Vyb290IGVudmlyb25tZW50IGluIGEgZHJ5IHJ1biBhcyBpdCBwb3NzaWJseSBoYXNuJ3QgYmVlbiBidWlsdAorICAgIGlmICdmYWtlcm9vdCcgaW4gdGFza2RlcCBhbmQgdGFza25hbWUgaW4gdGFza2RlcFsnZmFrZXJvb3QnXSBhbmQgbm90IGNmZy5kcnlfcnVuOgorICAgICAgICBlbnZ2YXJzID0gKHdvcmtlcmRhdGFbImZha2Vyb290ZW52Il1bZm5dIG9yICIiKS5zcGxpdCgpCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluICh2YXIuc3BsaXQoJz0nKSBmb3IgdmFyIGluIGVudnZhcnMpOgorICAgICAgICAgICAgZW52YmFja3VwW2tleV0gPSBvcy5lbnZpcm9uLmdldChrZXkpCisgICAgICAgICAgICBvcy5lbnZpcm9uW2tleV0gPSB2YWx1ZQorICAgICAgICAgICAgZmFrZWVudltrZXldID0gdmFsdWUKKworICAgICAgICBmYWtlZGlycyA9ICh3b3JrZXJkYXRhWyJmYWtlcm9vdGRpcnMiXVtmbl0gb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgZm9yIHAgaW4gZmFrZWRpcnM6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocCkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICdSdW5uaW5nICVzOiVzIHVuZGVyIGZha2Vyb290LCBmYWtlZGlyczogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgIChmbiwgdGFza25hbWUsICcsICcuam9pbihmYWtlZGlycykpKQorICAgIGVsc2U6CisgICAgICAgIGVudnZhcnMgPSAod29ya2VyZGF0YVsiZmFrZXJvb3Rub2VudiJdW2ZuXSBvciAiIikuc3BsaXQoKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiAodmFyLnNwbGl0KCc9JykgZm9yIHZhciBpbiBlbnZ2YXJzKToKKyAgICAgICAgICAgIGVudmJhY2t1cFtrZXldID0gb3MuZW52aXJvbi5nZXQoa2V5KQorICAgICAgICAgICAgb3MuZW52aXJvbltrZXldID0gdmFsdWUKKyAgICAgICAgICAgIGZha2VlbnZba2V5XSA9IHZhbHVlCisKKyAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKworICAgIHRyeToKKyAgICAgICAgcGlwZWluLCBwaXBlb3V0ID0gb3MucGlwZSgpCisgICAgICAgIHBpcGVpbiA9IG9zLmZkb3BlbihwaXBlaW4sICdyYicsIDQwOTYpCisgICAgICAgIHBpcGVvdXQgPSBvcy5mZG9wZW4ocGlwZW91dCwgJ3diJywgMCkKKyAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgYmIubXNnLmZhdGFsKCJSdW5RdWV1ZSIsICJmb3JrIGZhaWxlZDogJWQgKCVzKSIgJSAoZS5lcnJubywgZS5zdHJlcnJvcikpCisKKyAgICBpZiBwaWQgPT0gMDoKKyAgICAgICAgZGVmIGNoaWxkKCk6CisgICAgICAgICAgICBnbG9iYWwgd29ya2VyX3BpcGUKKyAgICAgICAgICAgIHBpcGVpbi5jbG9zZSgpCisKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIHNpZ3Rlcm1faGFuZGxlcikKKyAgICAgICAgICAgICMgTGV0IFNJR0hVUCBleGl0IGFzIFNJR1RFUk0KKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0hVUCwgc2lndGVybV9oYW5kbGVyKQorICAgICAgICAgICAgYmIudXRpbHMuc2lnbmFsX29uX3BhcmVudF9leGl0KCJTSUdURVJNIikKKworICAgICAgICAgICAgIyBTYXZlIG91dCB0aGUgUElEIHNvIHRoYXQgdGhlIGV2ZW50IGNhbiBpbmNsdWRlIGl0IHRoZQorICAgICAgICAgICAgIyBldmVudHMKKyAgICAgICAgICAgIGJiLmV2ZW50Lndvcmtlcl9waWQgPSBvcy5nZXRwaWQoKQorICAgICAgICAgICAgYmIuZXZlbnQud29ya2VyX2ZpcmUgPSB3b3JrZXJfY2hpbGRfZmlyZQorICAgICAgICAgICAgd29ya2VyX3BpcGUgPSBwaXBlb3V0CisKKyAgICAgICAgICAgICMgTWFrZSB0aGUgY2hpbGQgdGhlIHByb2Nlc3MgZ3JvdXAgbGVhZGVyIGFuZCBlbnN1cmUgbm8KKyAgICAgICAgICAgICMgY2hpbGQgcHJvY2VzcyB3aWxsIGJlIGNvbnRyb2xsZWQgYnkgdGhlIGN1cnJlbnQgdGVybWluYWwKKyAgICAgICAgICAgICMgVGhpcyBlbnN1cmVzIHNpZ25hbHMgc2VudCB0byB0aGUgY29udHJvbGxpbmcgdGVybWluYWwgbGlrZSBDdHJsK0MKKyAgICAgICAgICAgICMgZG9uJ3Qgc3RvcCB0aGUgY2hpbGQgcHJvY2Vzc2VzLgorICAgICAgICAgICAgb3Muc2V0c2lkKCkKKyAgICAgICAgICAgICMgTm8gc3RkaW4KKyAgICAgICAgICAgIG5ld3NpID0gb3Mub3Blbihvcy5kZXZudWxsLCBvcy5PX1JEV1IpCisgICAgICAgICAgICBvcy5kdXAyKG5ld3NpLCBzeXMuc3RkaW4uZmlsZW5vKCkpCisKKyAgICAgICAgICAgIGlmIHVtYXNrOgorICAgICAgICAgICAgICAgIG9zLnVtYXNrKHVtYXNrKQorCisgICAgICAgICAgICBkYXRhLnNldFZhcigiQkJfV09SS0VSQ09OVEVYVCIsICIxIikKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyKCJCQl9UQVNLREVQREFUQSIsIHRhc2tkZXBkYXRhKQorICAgICAgICAgICAgZGF0YS5zZXRWYXIoIkJVSUxETkFNRSIsIHdvcmtlcmRhdGFbImJ1aWxkbmFtZSJdKQorICAgICAgICAgICAgZGF0YS5zZXRWYXIoIkRBVEUiLCB3b3JrZXJkYXRhWyJkYXRlIl0pCisgICAgICAgICAgICBkYXRhLnNldFZhcigiVElNRSIsIHdvcmtlcmRhdGFbInRpbWUiXSkKKyAgICAgICAgICAgIGJiLnBhcnNlLnNpZ2dlbi5zZXRfdGFza2RhdGEod29ya2VyZGF0YVsic2lnZGF0YSJdKQorICAgICAgICAgICAgcmV0ID0gMAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRoZV9kYXRhID0gYmIuY2FjaGUuQ2FjaGUubG9hZERhdGFGdWxsKGZuLCBhcHBlbmRzLCBkYXRhKQorICAgICAgICAgICAgICAgIHRoZV9kYXRhLnNldFZhcignQkJfVEFTS0hBU0gnLCB3b3JrZXJkYXRhWyJydW5xX2hhc2giXVt0YXNrXSkKKworICAgICAgICAgICAgICAgICMgZXhwb3J0ZWRfdmFycygpIHJldHVybnMgYSBnZW5lcmF0b3Igd2hpY2ggKmNhbm5vdCogYmUgcGFzc2VkIHRvIG9zLmVudmlyb24udXBkYXRlKCkgCisgICAgICAgICAgICAgICAgIyBzdWNjZXNzZnVsbHkuIFdlIGFsc28gbmVlZCB0byB1bnNldCBhbnl0aGluZyBmcm9tIHRoZSBlbnZpcm9ubWVudCB3aGljaCBzaG91bGRuJ3QgYmUgdGhlcmUgCisgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGJiLmRhdGEuZXhwb3J0ZWRfdmFycyh0aGVfZGF0YSkKKyAgICAgICAgICAgICAgICBiYi51dGlscy5lbXB0eV9lbnZpcm9ubWVudCgpCisgICAgICAgICAgICAgICAgZm9yIGUsIHYgaW4gZXhwb3J0czoKKyAgICAgICAgICAgICAgICAgICAgb3MuZW52aXJvbltlXSA9IHYKKyAgICAgICAgICAgICAgICBmb3IgZSBpbiBmYWtlZW52OgorICAgICAgICAgICAgICAgICAgICBvcy5lbnZpcm9uW2VdID0gZmFrZWVudltlXQorICAgICAgICAgICAgICAgICAgICB0aGVfZGF0YS5zZXRWYXIoZSwgZmFrZWVudltlXSkKKyAgICAgICAgICAgICAgICAgICAgdGhlX2RhdGEuc2V0VmFyRmxhZyhlLCAnZXhwb3J0JywgIjEiKQorCisgICAgICAgICAgICAgICAgaWYgcXVpZXRlcnJvcnM6CisgICAgICAgICAgICAgICAgICAgIHRoZV9kYXRhLnNldFZhckZsYWcodGFza25hbWUsICJxdWlldGVycm9ycyIsICIxIikKKworICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAgICAgaWYgbm90IHF1aWV0ZXJyb3JzOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuY3JpdGljYWwoc3RyKGV4YykpCisgICAgICAgICAgICAgICAgb3MuX2V4aXQoMSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBjZmcuZHJ5X3J1bjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgICAgICByZXR1cm4gYmIuYnVpbGQuZXhlY190YXNrKGZuLCB0YXNrbmFtZSwgdGhlX2RhdGEsIGNmZy5wcm9maWxlKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIG9zLl9leGl0KDEpCisgICAgICAgIGlmIG5vdCBwcm9maWxpbmc6CisgICAgICAgICAgICBvcy5fZXhpdChjaGlsZCgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJvZm5hbWUgPSAicHJvZmlsZS0lcy5sb2ciICUgKGZuLnJlcGxhY2UoIi8iLCAiLSIpICsgIi0iICsgdGFza25hbWUpCisgICAgICAgICAgICBwcm9mID0gcHJvZmlsZS5Qcm9maWxlKCkKKyAgICAgICAgICAgIHRyeTogCisgICAgICAgICAgICAgICAgcmV0ID0gcHJvZmlsZS5Qcm9maWxlLnJ1bmNhbGwocHJvZiwgY2hpbGQpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHByb2YuZHVtcF9zdGF0cyhwcm9mbmFtZSkKKyAgICAgICAgICAgICAgICBiYi51dGlscy5wcm9jZXNzX3Byb2ZpbGVsb2cocHJvZm5hbWUpCisgICAgICAgICAgICAgICAgb3MuX2V4aXQocmV0KQorICAgIGVsc2U6CisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGVudmJhY2t1cC5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZGVsIG9zLmVudmlyb25ba2V5XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvcy5lbnZpcm9uW2tleV0gPSB2YWx1ZQorCisgICAgcmV0dXJuIHBpZCwgcGlwZWluLCBwaXBlb3V0CisKK2NsYXNzIHJ1blF1ZXVlV29ya2VyUGlwZSgpOgorICAgICIiIgorICAgIEFic3RyYWN0aW9uIGZvciBhIHBpcGUgYmV0d2VlbiBhIHdvcmtlciB0aHJlYWQgYW5kIHRoZSB3b3JrZXIgc2VydmVyCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBpcGVpbiwgcGlwZW91dCk6CisgICAgICAgIHNlbGYuaW5wdXQgPSBwaXBlaW4KKyAgICAgICAgaWYgcGlwZW91dDoKKyAgICAgICAgICAgIHBpcGVvdXQuY2xvc2UoKQorICAgICAgICBiYi51dGlscy5ub25ibG9ja2luZ2ZkKHNlbGYuaW5wdXQpCisgICAgICAgIHNlbGYucXVldWUgPSAiIgorCisgICAgZGVmIHJlYWQoc2VsZik6CisgICAgICAgIHN0YXJ0ID0gbGVuKHNlbGYucXVldWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucXVldWUgPSBzZWxmLnF1ZXVlICsgc2VsZi5pbnB1dC5yZWFkKDEwMjQwMCkKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKSBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FQUdBSU46CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBlbmQgPSBsZW4oc2VsZi5xdWV1ZSkKKyAgICAgICAgaW5kZXggPSBzZWxmLnF1ZXVlLmZpbmQoIjwvZXZlbnQ+IikKKyAgICAgICAgd2hpbGUgaW5kZXggIT0gLTE6CisgICAgICAgICAgICB3b3JrZXJfZmlyZV9wcmVwaWNrbGVkKHNlbGYucXVldWVbOmluZGV4KzhdKQorICAgICAgICAgICAgc2VsZi5xdWV1ZSA9IHNlbGYucXVldWVbaW5kZXgrODpdCisgICAgICAgICAgICBpbmRleCA9IHNlbGYucXVldWUuZmluZCgiPC9ldmVudD4iKQorICAgICAgICByZXR1cm4gKGVuZCA+IHN0YXJ0KQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICB3aGlsZSBzZWxmLnJlYWQoKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGxlbihzZWxmLnF1ZXVlKSA+IDA6CisgICAgICAgICAgICBwcmludCgiV2FybmluZywgd29ya2VyIGNoaWxkIGxlZnQgcGFydGlhbCBtZXNzYWdlOiAlcyIgJSBzZWxmLnF1ZXVlKQorICAgICAgICBzZWxmLmlucHV0LmNsb3NlKCkKKworbm9ybWFsZXhpdCA9IEZhbHNlCisKK2NsYXNzIEJpdGJha2VXb3JrZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGluKToKKyAgICAgICAgc2VsZi5pbnB1dCA9IGRpbgorICAgICAgICBiYi51dGlscy5ub25ibG9ja2luZ2ZkKHNlbGYuaW5wdXQpCisgICAgICAgIHNlbGYucXVldWUgPSAiIgorICAgICAgICBzZWxmLmNvb2tlcmNmZyA9IE5vbmUKKyAgICAgICAgc2VsZi5kYXRhYnVpbGRlciA9IE5vbmUKKyAgICAgICAgc2VsZi5kYXRhID0gTm9uZQorICAgICAgICBzZWxmLmJ1aWxkX3BpZHMgPSB7fQorICAgICAgICBzZWxmLmJ1aWxkX3BpcGVzID0ge30KKyAgICAKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVEVSTSwgc2VsZi5zaWd0ZXJtX2V4Y2VwdGlvbikKKyAgICAgICAgIyBMZXQgU0lHSFVQIGV4aXQgYXMgU0lHVEVSTQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdIVVAsIHNlbGYuc2lndGVybV9leGNlcHRpb24pCisKKyAgICBkZWYgc2lndGVybV9leGNlcHRpb24oc2VsZiwgc2lnbnVtLCBzdGFja2ZyYW1lKToKKyAgICAgICAgaWYgc2lnbnVtID09IHNpZ25hbC5TSUdURVJNOgorICAgICAgICAgICAgYmIud2FybigiV29ya2VyIHJlY2lldmVkIFNJR1RFUk0sIHNodXR0aW5nIGRvd24uLi4iKQorICAgICAgICBlbGlmIHNpZ251bSA9PSBzaWduYWwuU0lHSFVQOgorICAgICAgICAgICAgYmIud2FybigiV29ya2VyIHJlY2lldmVkIFNJR0hVUCwgc2h1dHRpbmcgZG93bi4uLiIpCisgICAgICAgIHNlbGYuaGFuZGxlX2ZpbmlzaG5vdyhOb25lKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJNLCBzaWduYWwuU0lHX0RGTCkKKyAgICAgICAgb3Mua2lsbChvcy5nZXRwaWQoKSwgc2lnbmFsLlNJR1RFUk0pCisKKyAgICBkZWYgc2VydmUoc2VsZik6ICAgICAgICAKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIChyZWFkeSwgXywgXykgPSBzZWxlY3Quc2VsZWN0KFtzZWxmLmlucHV0XSArIFtpLmlucHV0IGZvciBpIGluIHNlbGYuYnVpbGRfcGlwZXMudmFsdWVzKCldLCBbXSAsIFtdLCAxKQorICAgICAgICAgICAgaWYgc2VsZi5pbnB1dCBpbiByZWFkeToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHIgPSBzZWxmLmlucHV0LnJlYWQoKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4ocikgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRU9GIG9uIHBpcGUsIHNlcnZlciBtdXN0IGhhdmUgdGVybWluYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zaWd0ZXJtX2V4Y2VwdGlvbihzaWduYWwuU0lHVEVSTSwgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5xdWV1ZSA9IHNlbGYucXVldWUgKyByCisgICAgICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaWYgbGVuKHNlbGYucXVldWUpOgorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2l0ZW0oImNvb2tlcmNvbmZpZyIsIHNlbGYuaGFuZGxlX2Nvb2tlcmNmZykKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9pdGVtKCJ3b3JrZXJkYXRhIiwgc2VsZi5oYW5kbGVfd29ya2VyZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9pdGVtKCJydW50YXNrIiwgc2VsZi5oYW5kbGVfcnVudGFzaykKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9pdGVtKCJmaW5pc2hub3ciLCBzZWxmLmhhbmRsZV9maW5pc2hub3cpCisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfaXRlbSgicGluZyIsIHNlbGYuaGFuZGxlX3BpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfaXRlbSgicXVpdCIsIHNlbGYuaGFuZGxlX3F1aXQpCisKKyAgICAgICAgICAgIGZvciBwaXBlIGluIHNlbGYuYnVpbGRfcGlwZXM6CisgICAgICAgICAgICAgICAgc2VsZi5idWlsZF9waXBlc1twaXBlXS5yZWFkKCkKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLmJ1aWxkX3BpZHMpOgorICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzc193YWl0cGlkKCkKKyAgICAgICAgICAgIHdvcmtlcl9mbHVzaCgpCisKKworICAgIGRlZiBoYW5kbGVfaXRlbShzZWxmLCBpdGVtLCBmdW5jKToKKyAgICAgICAgaWYgc2VsZi5xdWV1ZS5zdGFydHN3aXRoKCI8IiArIGl0ZW0gKyAiPiIpOgorICAgICAgICAgICAgaW5kZXggPSBzZWxmLnF1ZXVlLmZpbmQoIjwvIiArIGl0ZW0gKyAiPiIpCisgICAgICAgICAgICB3aGlsZSBpbmRleCAhPSAtMToKKyAgICAgICAgICAgICAgICBmdW5jKHNlbGYucXVldWVbKGxlbihpdGVtKSArIDIpOmluZGV4XSkKKyAgICAgICAgICAgICAgICBzZWxmLnF1ZXVlID0gc2VsZi5xdWV1ZVsoaW5kZXggKyBsZW4oaXRlbSkgKyAzKTpdCisgICAgICAgICAgICAgICAgaW5kZXggPSBzZWxmLnF1ZXVlLmZpbmQoIjwvIiArIGl0ZW0gKyAiPiIpCisKKyAgICBkZWYgaGFuZGxlX2Nvb2tlcmNmZyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5jb29rZXJjZmcgPSBwaWNrbGUubG9hZHMoZGF0YSkKKyAgICAgICAgc2VsZi5kYXRhYnVpbGRlciA9IGJiLmNvb2tlcmRhdGEuQ29va2VyRGF0YUJ1aWxkZXIoc2VsZi5jb29rZXJjZmcsIHdvcmtlcj1UcnVlKQorICAgICAgICBzZWxmLmRhdGFidWlsZGVyLnBhcnNlQmFzZUNvbmZpZ3VyYXRpb24oKQorICAgICAgICBzZWxmLmRhdGEgPSBzZWxmLmRhdGFidWlsZGVyLmRhdGEKKworICAgIGRlZiBoYW5kbGVfd29ya2VyZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi53b3JrZXJkYXRhID0gcGlja2xlLmxvYWRzKGRhdGEpCisgICAgICAgIGJiLm1zZy5sb2dnZXJEZWZhdWx0RGVidWdMZXZlbCA9IHNlbGYud29ya2VyZGF0YVsibG9nZGVmYXVsdGRlYnVnIl0KKyAgICAgICAgYmIubXNnLmxvZ2dlckRlZmF1bHRWZXJib3NlID0gc2VsZi53b3JrZXJkYXRhWyJsb2dkZWZhdWx0dmVyYm9zZSJdCisgICAgICAgIGJiLm1zZy5sb2dnZXJWZXJib3NlTG9ncyA9IHNlbGYud29ya2VyZGF0YVsibG9nZGVmYXVsdHZlcmJvc2Vsb2dzIl0KKyAgICAgICAgYmIubXNnLmxvZ2dlckRlZmF1bHREb21haW5zID0gc2VsZi53b3JrZXJkYXRhWyJsb2dkZWZhdWx0ZG9tYWluIl0KKyAgICAgICAgc2VsZi5kYXRhLnNldFZhcigiUFJTRVJWX0hPU1QiLCBzZWxmLndvcmtlcmRhdGFbInByaG9zdCJdKQorCisgICAgZGVmIGhhbmRsZV9waW5nKHNlbGYsIF8pOgorICAgICAgICB3b3JrZXJsb2dfd3JpdGUoIkhhbmRsaW5nIHBpbmdcbiIpCisKKyAgICAgICAgbG9nZ2VyLndhcm4oIlBvbmcgZnJvbSBiaXRiYWtlLXdvcmtlciEiKQorCisgICAgZGVmIGhhbmRsZV9xdWl0KHNlbGYsIGRhdGEpOgorICAgICAgICB3b3JrZXJsb2dfd3JpdGUoIkhhbmRsaW5nIHF1aXRcbiIpCisKKyAgICAgICAgZ2xvYmFsIG5vcm1hbGV4aXQKKyAgICAgICAgbm9ybWFsZXhpdCA9IFRydWUKKyAgICAgICAgc3lzLmV4aXQoMCkKKworICAgIGRlZiBoYW5kbGVfcnVudGFzayhzZWxmLCBkYXRhKToKKyAgICAgICAgZm4sIHRhc2ssIHRhc2tuYW1lLCBxdWlldGVycm9ycywgYXBwZW5kcywgdGFza2RlcGRhdGEgPSBwaWNrbGUubG9hZHMoZGF0YSkKKyAgICAgICAgd29ya2VybG9nX3dyaXRlKCJIYW5kbGluZyBydW50YXNrICVzICVzICVzXG4iICUgKHRhc2ssIGZuLCB0YXNrbmFtZSkpCisKKyAgICAgICAgcGlkLCBwaXBlaW4sIHBpcGVvdXQgPSBmb3JrX29mZl90YXNrKHNlbGYuY29va2VyY2ZnLCBzZWxmLmRhdGEsIHNlbGYud29ya2VyZGF0YSwgZm4sIHRhc2ssIHRhc2tuYW1lLCBhcHBlbmRzLCB0YXNrZGVwZGF0YSwgcXVpZXRlcnJvcnMpCisKKyAgICAgICAgc2VsZi5idWlsZF9waWRzW3BpZF0gPSB0YXNrCisgICAgICAgIHNlbGYuYnVpbGRfcGlwZXNbcGlkXSA9IHJ1blF1ZXVlV29ya2VyUGlwZShwaXBlaW4sIHBpcGVvdXQpCisKKyAgICBkZWYgcHJvY2Vzc193YWl0cGlkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIG5vbmUgaXMgdGhlcmUgYXJlIG5vIHByb2Nlc3NlcyBhd2FpdGluZyByZXN1bHQgY29sbGVjdGlvbiwgb3RoZXJ3aXNlCisgICAgICAgIGNvbGxlY3QgdGhlIHByb2Nlc3MgZXhpdCBjb2RlcyBhbmQgY2xvc2UgdGhlIGluZm9ybWF0aW9uIHBpcGUuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwaWQsIHN0YXR1cyA9IG9zLndhaXRwaWQoLTEsIG9zLldOT0hBTkcpCisgICAgICAgICAgICBpZiBwaWQgPT0gMCBvciBvcy5XSUZTVE9QUEVEKHN0YXR1cyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHdvcmtlcmxvZ193cml0ZSgiRXhpdCBjb2RlIG9mICVzIGZvciBwaWQgJXNcbiIgJSAoc3RhdHVzLCBwaWQpKQorCisgICAgICAgIGlmIG9zLldJRkVYSVRFRChzdGF0dXMpOgorICAgICAgICAgICAgc3RhdHVzID0gb3MuV0VYSVRTVEFUVVMoc3RhdHVzKQorICAgICAgICBlbGlmIG9zLldJRlNJR05BTEVEKHN0YXR1cyk6CisgICAgICAgICAgICAjIFBlciBzaGVsbCBjb252ZW50aW9ucyBmb3IgJD8sIHdoZW4gYSBwcm9jZXNzIGV4aXRzIGR1ZSB0bworICAgICAgICAgICAgIyBhIHNpZ25hbCwgd2UgcmV0dXJuIGFuIGV4aXQgY29kZSBvZiAxMjggKyBTSUdOVU0KKyAgICAgICAgICAgIHN0YXR1cyA9IDEyOCArIG9zLldURVJNU0lHKHN0YXR1cykKKworICAgICAgICB0YXNrID0gc2VsZi5idWlsZF9waWRzW3BpZF0KKyAgICAgICAgZGVsIHNlbGYuYnVpbGRfcGlkc1twaWRdCisKKyAgICAgICAgc2VsZi5idWlsZF9waXBlc1twaWRdLmNsb3NlKCkKKyAgICAgICAgZGVsIHNlbGYuYnVpbGRfcGlwZXNbcGlkXQorCisgICAgICAgIHdvcmtlcl9maXJlX3ByZXBpY2tsZWQoIjxleGl0Y29kZT4iICsgcGlja2xlLmR1bXBzKCh0YXNrLCBzdGF0dXMpKSArICI8L2V4aXRjb2RlPiIpCisKKyAgICBkZWYgaGFuZGxlX2ZpbmlzaG5vdyhzZWxmLCBfKToKKyAgICAgICAgaWYgc2VsZi5idWlsZF9waWRzOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlNlbmRpbmcgU0lHVEVSTSB0byByZW1haW5pbmcgJXMgdGFza3MiLCBsZW4oc2VsZi5idWlsZF9waWRzKSkKKyAgICAgICAgICAgIGZvciBrLCB2IGluIHNlbGYuYnVpbGRfcGlkcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG9zLmtpbGwoLWssIHNpZ25hbC5TSUdURVJNKQorICAgICAgICAgICAgICAgICAgICBvcy53YWl0cGlkKC0xLCAwKQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBmb3IgcGlwZSBpbiBzZWxmLmJ1aWxkX3BpcGVzOgorICAgICAgICAgICAgc2VsZi5idWlsZF9waXBlc1twaXBlXS5yZWFkKCkKKwordHJ5OgorICAgIHdvcmtlciA9IEJpdGJha2VXb3JrZXIoc3lzLnN0ZGluKQorICAgIGlmIG5vdCBwcm9maWxpbmc6CisgICAgICAgIHdvcmtlci5zZXJ2ZSgpCisgICAgZWxzZToKKyAgICAgICAgcHJvZm5hbWUgPSAicHJvZmlsZS13b3JrZXIubG9nIgorICAgICAgICBwcm9mID0gcHJvZmlsZS5Qcm9maWxlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJvZmlsZS5Qcm9maWxlLnJ1bmNhbGwocHJvZiwgd29ya2VyLnNlcnZlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcHJvZi5kdW1wX3N0YXRzKHByb2ZuYW1lKQorICAgICAgICAgICAgYmIudXRpbHMucHJvY2Vzc19wcm9maWxlbG9nKHByb2ZuYW1lKQorZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZToKKyAgICBpZiBub3Qgbm9ybWFsZXhpdDoKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICBzeXMuc3RkZXJyLndyaXRlKHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoc3RyKGUpKQord2hpbGUgbGVuKHdvcmtlcl9xdWV1ZSk6CisgICAgd29ya2VyX2ZsdXNoKCkKK3dvcmtlcmxvZ193cml0ZSgiZXhpdHRpbmciKQorc3lzLmV4aXQoMCkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRkb2MgYi95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGRvYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NzZkODhiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRkb2MKQEAgLTAsMCArMSw1MzEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA1IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3B0cGFyc2UsIG9zLCBzeXMKKworIyBiaXRiYWtlCitzeXMucGF0aC5hcHBlbmQob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnbGliJykpCitpbXBvcnQgYmIKK2ltcG9ydCBiYi5wYXJzZQorZnJvbSAgIHN0cmluZyBpbXBvcnQgc3BsaXQsIGpvaW4KKworX192ZXJzaW9uX18gPSAiMC4wLjIiCisKK2NsYXNzIEhUTUxGb3JtYXR0ZXI6CisgICAgIiIiCisgICAgU2ltcGxlIGNsYXNzIHRvIGhlbHAgdG8gZ2VuZXJhdGUgc29tZSBzb3J0IG9mIEhUTUwgZmlsZXMuIEl0IGlzCisgICAgcXVpdGUgaW5mZXJpb3Igc29sdXRpb24gY29tcGFyZWQgdG8gZG9jYm9vaywgZ3RrZG9jLCBkb3h5Z2VuIGJ1dCBpdAorICAgIHNob3VsZCB3b3JrIGZvciBub3cuCisgICAgV2UndmUgYSBnbG9iYWwgaW50cm9kdWN0aW9uIHNpdGUgKGluZGV4Lmh0bWwpIGFuZCB0aGVuIG9uZSBzaXRlIGZvcgorICAgIHRoZSBsaXN0IG9mIGtleXMgKGFscGhhYmV0aWNhbCBzb3J0ZWQpIGFuZCBvbmUgZm9yIHRoZSBsaXN0IG9mIGdyb3VwcywKKyAgICBvbmUgc2l0ZSBmb3IgZWFjaCBrZXkgd2l0aCBsaW5rcyB0byB0aGUgcmVsYXRpb25zIGFuZCBncm91cHMuCisKKyAgICAgICAgaW5kZXguaHRtbAorICAgICAgICBhbGxfa2V5cy5odG1sCisgICAgICAgIGFsbF9ncm91cHMuaHRtbAorICAgICAgICBncm91cE5BTUUuaHRtbAorICAgICAgICBrZXlOQU1FLmh0bWwKKyAgICAiIiIKKworICAgIGRlZiByZXBsYWNlKHNlbGYsIHRleHQsICpwYWlycyk6CisgICAgICAgICIiIgorICAgICAgICBGcm9tIHB5ZG9jLi4uIGFsbW9zdCBpZGVudGljYWwgYXQgbGVhc3QKKyAgICAgICAgIiIiCisgICAgICAgIHdoaWxlIHBhaXJzOgorICAgICAgICAgICAgKGEsIGIpID0gcGFpcnNbMF0KKyAgICAgICAgICAgIHRleHQgPSBqb2luKHNwbGl0KHRleHQsIGEpLCBiKQorICAgICAgICAgICAgcGFpcnMgPSBwYWlyc1sxOl0KKyAgICAgICAgcmV0dXJuIHRleHQKKyAgICBkZWYgZXNjYXBlKHNlbGYsIHRleHQpOgorICAgICAgICAiIiIKKyAgICAgICAgRXNjYXBlIHN0cmluZyB0byBiZSBjb25mb3JtIEhUTUwKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLnJlcGxhY2UodGV4dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCcmJywgJyZhbXA7JyksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnPCcsICcmbHQ7JyApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnPicsICcmZ3Q7JyApICkKKyAgICBkZWYgY3JlYXRlTmF2aWdhdG9yKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIHRoZSBuYXZnaWF0b3IKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAiIiI8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJnIiBocmVmPSJpbmRleC5odG1sIj5Ib21lPC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJhbGxfZ3JvdXBzLmh0bWwiPkdyb3VwczwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iYWxsX2tleXMuaHRtbCI+S2V5czwvYT48L3RkPgorPC90cj48L3RhYmxlPgorIiIiCisKKyAgICBkZWYgcmVsYXRlZEtleXMoc2VsZiwgaXRlbSk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgSFRNTCB0byBsaW5rIHRvIGZvcmVpZ24ga2V5cworICAgICAgICAiIiIKKworICAgICAgICBpZiBsZW4oaXRlbS5yZWxhdGVkKCkpID09IDA6CisgICAgICAgICAgICByZXR1cm4gIiIKKworICAgICAgICB0eHQgPSAiPHA+PGI+U2VlIGFsc286PC9iPjxicj4iCisgICAgICAgIHR4dHMgPSBbXQorICAgICAgICBmb3IgaXQgaW4gaXRlbS5yZWxhdGVkKCk6CisgICAgICAgICAgICB0eHRzLmFwcGVuZCgiIiI8YSBocmVmPSJrZXklKGl0KXMuaHRtbCI+JShpdClzPC9hPiIiIiAlIHZhcnMoKSApCisKKyAgICAgICAgcmV0dXJuIHR4dCArICIsIi5qb2luKHR4dHMpCisKKyAgICBkZWYgZ3JvdXBzKHNlbGYsIGl0ZW0pOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIEhUTUwgdG8gbGluayB0byByZWxhdGVkIGdyb3VwcworICAgICAgICAiIiIKKworICAgICAgICBpZiBsZW4oaXRlbS5ncm91cHMoKSkgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAiIgorCisKKyAgICAgICAgdHh0ID0gIjxwPjxiPlNlZSBhbHNvOjwvYj48YnI+IgorICAgICAgICB0eHRzID0gW10KKyAgICAgICAgZm9yIGdyb3VwIGluIGl0ZW0uZ3JvdXBzKCk6CisgICAgICAgICAgICB0eHRzLmFwcGVuZCggIiIiPGEgaHJlZj0iZ3JvdXAlcy5odG1sIj4lczwvYT4gIiIiICUgKGdyb3VwLCBncm91cCkgKQorCisgICAgICAgIHJldHVybiB0eHQgKyAiLCIuam9pbih0eHRzKQorCisKKyAgICBkZWYgY3JlYXRlS2V5U2l0ZShzZWxmLCBpdGVtKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBhIHNpdGUgZm9yIGEga2V5LiBJdCBjb250YWlucyB0aGUgaGVhZGVyL25hdmlnYXRvciwgYSBoZWFkaW5nLAorICAgICAgICB0aGUgZGVzY3JpcHRpb24sIGxpbmtzIHRvIHJlbGF0ZWQga2V5cyBhbmQgdG8gdGhlIGdyb3Vwcy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgcmV0dXJuICIiIjwhZG9jdHlwZSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD48aGVhZD48dGl0bGU+S2V5ICVzPC90aXRsZT48L2hlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorJXMKKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+JXM8L3NwYW4+PC9oMj4KKworPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGgyPlN5bm9wc2lzPC9oMj4KKzxwPgorJXMKKzwvcD4KKzwvZGl2PgorCis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8aDI+UmVsYXRlZCBLZXlzPC9oMj4KKzxwPgorJXMKKzwvcD4KKzwvZGl2PgorCis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8aDI+R3JvdXBzPC9oMj4KKzxwPgorJXMKKzwvcD4KKzwvZGl2PgorCisKKzwvYm9keT4KKyIiIiAgICAgJSAoaXRlbS5uYW1lKCksIHNlbGYuY3JlYXRlTmF2aWdhdG9yKCksIGl0ZW0ubmFtZSgpLCAKKyAgICAgICAgICAgc2VsZi5lc2NhcGUoaXRlbS5kZXNjcmlwdGlvbigpKSwgc2VsZi5yZWxhdGVkS2V5cyhpdGVtKSwgc2VsZi5ncm91cHMoaXRlbSkpCisKKyAgICBkZWYgY3JlYXRlR3JvdXBzU2l0ZShzZWxmLCBkb2MpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIHRoZSBHcm91cCBPdmVydmlldyBzaXRlCisgICAgICAgICIiIgorCisgICAgICAgIGdyb3VwcyA9ICIiCisgICAgICAgIHNvcnRlZF9ncm91cHMgPSBzb3J0ZWQoZG9jLmdyb3VwcygpKQorICAgICAgICBmb3IgZ3JvdXAgaW4gc29ydGVkX2dyb3VwczoKKyAgICAgICAgICAgIGdyb3VwcyArPSAiIiI8YSBocmVmPSJncm91cCVzLmh0bWwiPiVzPC9hPjxicj4iIiIgJSAoZ3JvdXAsIGdyb3VwKQorCisgICAgICAgIHJldHVybiAiIiI8IWRvY3R5cGUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+PGhlYWQ+PHRpdGxlPkdyb3VwIG92ZXJ2aWV3PC90aXRsZT48L2hlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorJXMKKzxoMj5BdmFpbGFibGUgR3JvdXBzPC9oMj4KKyVzCis8L2JvZHk+CisiIiIgJSAoc2VsZi5jcmVhdGVOYXZpZ2F0b3IoKSwgZ3JvdXBzKQorCisgICAgZGVmIGNyZWF0ZUluZGV4KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIHRoZSBpbmRleCBmaWxlCisgICAgICAgICIiIgorCisgICAgICAgIHJldHVybiAiIiI8IWRvY3R5cGUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+PGhlYWQ+PHRpdGxlPkJpdGJha2UgRG9jdW1lbnRhdGlvbjwvdGl0bGU+PC9oZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKyVzCis8aDI+RG9jdW1lbnRhdGlvbiBFbnRyYW5jZTwvaDI+Cis8YSBocmVmPSJhbGxfZ3JvdXBzLmh0bWwiPkFsbCBhdmFpbGFibGUgZ3JvdXBzPC9hPjxicj4KKzxhIGhyZWY9ImFsbF9rZXlzLmh0bWwiPkFsbCBhdmFpbGFibGUga2V5czwvYT48YnI+Cis8L2JvZHk+CisiIiIgJSBzZWxmLmNyZWF0ZU5hdmlnYXRvcigpCisKKyAgICBkZWYgY3JlYXRlS2V5c1NpdGUoc2VsZiwgZG9jKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBPdmVydmlldyBvZiBhbGwgYXZpbGFibGUga2V5cworICAgICAgICAiIiIKKyAgICAgICAga2V5cyA9ICIiCisgICAgICAgIHNvcnRlZF9rZXlzID0gc29ydGVkKGRvYy5kb2Nfa2V5cygpKQorICAgICAgICBmb3Iga2V5IGluIHNvcnRlZF9rZXlzOgorICAgICAgICAgICAga2V5cyArPSAiIiI8YSBocmVmPSJrZXklcy5odG1sIj4lczwvYT48YnI+IiIiICUgKGtleSwga2V5KQorCisgICAgICAgIHJldHVybiAiIiI8IWRvY3R5cGUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+PGhlYWQ+PHRpdGxlPktleSBvdmVydmlldzwvdGl0bGU+PC9oZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKyVzCis8aDI+QXZhaWxhYmxlIEtleXM8L2gyPgorJXMKKzwvYm9keT4KKyIiIiAlIChzZWxmLmNyZWF0ZU5hdmlnYXRvcigpLCBrZXlzKQorCisgICAgZGVmIGNyZWF0ZUdyb3VwU2l0ZShzZWxmLCBnciwgaXRlbXMsIF9kZXNjcmlwdGlvbiA9IE5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGEgc2l0ZSBmb3IgYSBncm91cDoKKyAgICAgICAgR3JvdXAgdGhlIG5hbWUgb2YgdGhlIGdyb3VwLCBpdGVtcyBjb250YWluIHRoZSBuYW1lIG9mIHRoZSBrZXlzCisgICAgICAgIGluc2lkZSB0aGlzIGdyb3VwCisgICAgICAgICIiIgorICAgICAgICBncm91cHMgPSAiIgorICAgICAgICBkZXNjcmlwdGlvbiA9ICIiCisKKyAgICAgICAgIyBjcmVhdGUgYSBzZWN0aW9uIHdpdGggdGhlIGdyb3VwIGRlc2NyaXB0aW9ucworICAgICAgICBpZiBfZGVzY3JpcHRpb246CisgICAgICAgICAgICBkZXNjcmlwdGlvbiAgKz0gIjxoMiBEZXNjcmlwdGlvbiBvZiBHcm96cCAlczwvaDI+IiAlIGdyCisgICAgICAgICAgICBkZXNjcmlwdGlvbiAgKz0gX2Rlc2NyaXB0aW9uCisKKyAgICAgICAgaXRlbXMuc29ydChsYW1iZGEgeCwgeTpjbXAoeC5uYW1lKCksIHkubmFtZSgpKSkKKyAgICAgICAgZm9yIGdyb3VwIGluIGl0ZW1zOgorICAgICAgICAgICAgZ3JvdXBzICs9ICIiIjxhIGhyZWY9ImtleSVzLmh0bWwiPiVzPC9hPjxicj4iIiIgJSAoZ3JvdXAubmFtZSgpLCBncm91cC5uYW1lKCkpCisKKyAgICAgICAgcmV0dXJuICIiIjwhZG9jdHlwZSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD48aGVhZD48dGl0bGU+R3JvdXAgJXM8L3RpdGxlPjwvaGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+CislcworJXMKKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxoMj5LZXlzIGluIEdyb3VwICVzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyVzCis8L3ByZT4KKzwvZGl2PgorPC9ib2R5PgorIiIiICUgKGdyLCBzZWxmLmNyZWF0ZU5hdmlnYXRvcigpLCBkZXNjcmlwdGlvbiwgZ3IsIGdyb3VwcykKKworCisKKyAgICBkZWYgY3JlYXRlQ1NTKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIHRoZSBDU1MgZmlsZQorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuICIiIi5zeW5vcHNpcywgLmNsYXNzc3lub3BzaXMKK3sKKyAgYmFja2dyb3VuZDogI2VlZWVlZTsKKyAgYm9yZGVyOiBzb2xpZCAxcHggI2FhYWFhYTsKKyAgcGFkZGluZzogMC41ZW07Cit9CisucHJvZ3JhbWxpc3RpbmcKK3sKKyAgYmFja2dyb3VuZDogI2VlZWVmZjsKKyAgYm9yZGVyOiBzb2xpZCAxcHggI2FhYWFmZjsKKyAgcGFkZGluZzogMC41ZW07Cit9CisudmFyaWFibGVsaXN0Cit7CisgIHBhZGRpbmc6IDRweDsKKyAgbWFyZ2luLWxlZnQ6IDNlbTsKK30KKy52YXJpYWJsZWxpc3QgdGQ6Zmlyc3QtY2hpbGQKK3sKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KK3RhYmxlLm5hdmlnYXRpb24KK3sKKyAgYmFja2dyb3VuZDogI2ZmZWVlZTsKKyAgYm9yZGVyOiBzb2xpZCAxcHggI2ZmYWFhYTsKKyAgbWFyZ2luLXRvcDogMC41ZW07CisgIG1hcmdpbi1ib3R0b206IDAuNWVtOworfQorLm5hdmlnYXRpb24gYQoreworICBjb2xvcjogIzc3MDAwMDsKK30KKy5uYXZpZ2F0aW9uIGE6dmlzaXRlZAoreworICBjb2xvcjogIzU1MDAwMDsKK30KKy5uYXZpZ2F0aW9uIC50aXRsZQoreworICBmb250LXNpemU6IDIwMCU7Cit9CitkaXYucmVmbmFtZWRpdgoreworICBtYXJnaW4tdG9wOiAyZW07Cit9CitkaXYuZ2FsbGVyeS1mbG9hdAoreworICBmbG9hdDogbGVmdDsKKyAgcGFkZGluZzogMTBweDsKK30KK2Rpdi5nYWxsZXJ5LWZsb2F0IGltZworeworICBib3JkZXItc3R5bGU6IG5vbmU7Cit9CitkaXYuZ2FsbGVyeS1zcGFjZXIKK3sKKyAgY2xlYXI6IGJvdGg7Cit9CithCit7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KK2E6aG92ZXIKK3sKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGNvbG9yOiAjRkYwMDAwOworfQorIiIiCisKKworCitjbGFzcyBEb2N1bWVudGF0aW9uSXRlbToKKyAgICAiIiIKKyAgICBBIGNsYXNzIHRvIGhvbGQgaW5mb3JtYXRpb24gYWJvdXQgYSBjb25maWd1cmF0aW9uCisgICAgaXRlbS4gSXQgY29udGFpbnMgdGhlIGtleSBuYW1lLCBkZXNjcmlwdGlvbiwgYSBsaXN0IG9mIHJlbGF0ZWQgbmFtZXMsCisgICAgYW5kIHRoZSBncm91cCB0aGlzIGl0ZW0gaXMgY29udGFpbmVkIGluLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9ncm91cHMgID0gW10KKyAgICAgICAgc2VsZi5fcmVsYXRlZCA9IFtdCisgICAgICAgIHNlbGYuX25hbWUgICAgPSAiIgorICAgICAgICBzZWxmLl9kZXNjICAgID0gIiIKKworICAgIGRlZiBncm91cHMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9ncm91cHMKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorCisgICAgZGVmIGRlc2NyaXB0aW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGVzYworCisgICAgZGVmIHJlbGF0ZWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9yZWxhdGVkCisKKyAgICBkZWYgc2V0TmFtZShzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKworICAgIGRlZiBzZXREZXNjcmlwdGlvbihzZWxmLCBkZXNjKToKKyAgICAgICAgc2VsZi5fZGVzYyA9IGRlc2MKKworICAgIGRlZiBhZGRHcm91cChzZWxmLCBncm91cCk6CisgICAgICAgIHNlbGYuX2dyb3Vwcy5hcHBlbmQoZ3JvdXApCisKKyAgICBkZWYgYWRkUmVsYXRpb24oc2VsZiwgcmVsYXRpb24pOgorICAgICAgICBzZWxmLl9yZWxhdGVkLmFwcGVuZChyZWxhdGlvbikKKworICAgIGRlZiBzb3J0KHNlbGYpOgorICAgICAgICBzZWxmLl9yZWxhdGVkLnNvcnQoKQorICAgICAgICBzZWxmLl9ncm91cHMuc29ydCgpCisKKworY2xhc3MgRG9jdW1lbnRhdGlvbjoKKyAgICAiIiIKKyAgICBIb2xkcyB0aGUgZG9jdW1lbnRhdGlvbi4uLiB3aXRoIG1hcHBpbmdzIGZyb20ga2V5IHRvIGl0ZW1zLi4uCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX19rZXlzICAgPSB7fQorICAgICAgICBzZWxmLl9fZ3JvdXBzID0ge30KKworICAgIGRlZiBpbnNlcnRfZG9jX2l0ZW0oc2VsZiwgaXRlbSk6CisgICAgICAgICIiIgorICAgICAgICBJbnNlcnQgdGhlIERvYyBJdGVtIGludG8gdGhlIGludGVybmFsIGxpc3QKKyAgICAgICAgb2YgcmVwcmVzZW50YXRpb24KKyAgICAgICAgIiIiCisgICAgICAgIGl0ZW0uc29ydCgpCisgICAgICAgIHNlbGYuX19rZXlzW2l0ZW0ubmFtZSgpXSA9IGl0ZW0KKworICAgICAgICBmb3IgZ3JvdXAgaW4gaXRlbS5ncm91cHMoKToKKyAgICAgICAgICAgIGlmIG5vdCBncm91cCBpbiBzZWxmLl9fZ3JvdXBzOgorICAgICAgICAgICAgICAgIHNlbGYuX19ncm91cHNbZ3JvdXBdID0gW10KKyAgICAgICAgICAgIHNlbGYuX19ncm91cHNbZ3JvdXBdLmFwcGVuZChpdGVtKQorICAgICAgICAgICAgc2VsZi5fX2dyb3Vwc1tncm91cF0uc29ydCgpCisKKworICAgIGRlZiBkb2NfaXRlbShzZWxmLCBrZXkpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBEb2N1bWVudGF0aW9uSW5zdGFuY2UgZGVzY3JpYmluZyB0aGUga2V5CisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2tleXNba2V5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGRvY19rZXlzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBkb2N1bWVudGVkIEtFWVMgKG5hbWVzKQorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX19rZXlzLmtleXMoKQorCisgICAgZGVmIGdyb3VwcyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgbmFtZXMgb2YgYXZhaWxhYmxlIGdyb3VwcworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX19ncm91cHMua2V5cygpCisKKyAgICBkZWYgZ3JvdXBfY29udGVudChzZWxmLCBncm91cF9uYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIGxpc3Qgb2Yga2V5cy9uYW1lcyB0aGF0IGFyZSBpbiBhIHNwZWNlZmljCisgICAgICAgIGdyb3VwIG9yIHRoZSBlbXB0eSBsaXN0CisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2dyb3Vwc1tncm91cF9uYW1lXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gW10KKworCitkZWYgcGFyc2VfY21kbGluZShhcmdzKToKKyAgICAiIiIKKyAgICBQYXJzZSB0aGUgQ01EIGxpbmUgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIGEgbi10dXBsZQorICAgICIiIgorCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCB2ZXJzaW9uID0gIkJpdGJha2UgRG9jdW1lbnRhdGlvbiBUb29sIENvcmUgdmVyc2lvbiAlcywgJSVwcm9nIHZlcnNpb24gJXMiICUgKGJiLl9fdmVyc2lvbl9fLCBfX3ZlcnNpb25fXykpCisgICAgdXNhZ2UgID0gIiIiJXByb2cgW29wdGlvbnNdCisKK0NyZWF0ZSBhIHNldCBvZiBodG1sIHBhZ2VzIChkb2N1bWVudGF0aW9uKSBmb3IgYSBiaXRiYWtlLmNvbmYuLi4uCisiIiIKKworICAgICMgQWRkIHRoZSBuZWVkZWQgb3B0aW9ucworICAgIHBhcnNlci5hZGRfb3B0aW9uKCAiLWMiLCAiLS1jb25maWciLCBoZWxwID0gIlVzZSB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gZmlsZSBhcyBzb3VyY2UiLAorICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gImNvbmZpZyIsIGRlZmF1bHQgPSBvcy5wYXRoLmpvaW4oImNvbmYiLCAiZG9jdW1lbnRhdGlvbi5jb25mIikgKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oICItbyIsICItLW91dHB1dCIsIGhlbHAgPSAiT3V0cHV0IGRpcmVjdG9yeSBmb3IgaHRtbCBmaWxlcyIsCisgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsIGRlc3QgPSAib3V0cHV0IiwgZGVmYXVsdCA9ICJodG1sLyIgKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oICItRCIsICAiLS1kZWJ1ZyIsIGhlbHAgPSAiSW5jcmVhc2UgdGhlIGRlYnVnIGxldmVsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gImNvdW50IiwgZGVzdCA9ICJkZWJ1ZyIsIGRlZmF1bHQgPSAwICkKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCAiLXYiLCAiLS12ZXJib3NlIiwgaGVscCA9ICJvdXRwdXQgbW9yZSBjaGl0LWNoYXIgdG8gdGhlIHRlcm1pbmFsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gInZlcmJvc2UiLCBkZWZhdWx0ID0gRmFsc2UgKQorCisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCBzeXMuYXJndiApCisgCisgICAgYmIubXNnLmluaXRfbXNnY29uZmlnKG9wdGlvbnMudmVyYm9zZSwgb3B0aW9ucy5kZWJ1ZykKKworICAgIHJldHVybiBvcHRpb25zLmNvbmZpZywgb3B0aW9ucy5vdXRwdXQKKworZGVmIG1haW4oKToKKyAgICAiIiIKKyAgICBUaGUgbWFpbiBNZXRob2QKKyAgICAiIiIKKworICAgIChjb25maWdfZmlsZSwgb3V0cHV0X2RpcikgPSBwYXJzZV9jbWRsaW5lKCBzeXMuYXJndiApCisKKyAgICAjIHJpZ2h0IHRvIGxldCB1cyBsb2FkIHRoZSBmaWxlIG5vdworICAgIHRyeToKKyAgICAgICAgZG9jdW1lbnRhdGlvbiA9IGJiLnBhcnNlLmhhbmRsZSggY29uZmlnX2ZpbGUsIGJiLmRhdGEuaW5pdCgpICkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgYmIuZmF0YWwoICJVbmFibGUgdG8gb3BlbiAlcyIgJSBjb25maWdfZmlsZSApCisgICAgZXhjZXB0IGJiLnBhcnNlLlBhcnNlRXJyb3I6CisgICAgICAgIGJiLmZhdGFsKCAiVW5hYmxlIHRvIHBhcnNlICVzIiAlIGNvbmZpZ19maWxlICkKKworICAgIGlmIGlzaW5zdGFuY2UoZG9jdW1lbnRhdGlvbiwgZGljdCk6CisgICAgICAgIGRvY3VtZW50YXRpb24gPSBkb2N1bWVudGF0aW9uWyIiXQorCisgICAgIyBBc3N1bWluZyB3ZSd2ZSB0aGUgZmlsZSBsb2FkZWQgbm93LCB3ZSB3aWxsIGluaXRpYWxpemUgdGhlICd0cmVlJworICAgIGRvYyA9IERvY3VtZW50YXRpb24oKQorCisgICAgIyBkZWZpbmVkIHN0YXRlcworICAgIHN0YXRlX2JlZ2luID0gMAorICAgIHN0YXRlX3NlZSAgID0gMQorICAgIHN0YXRlX2dyb3VwID0gMgorCisgICAgZm9yIGtleSBpbiBiYi5kYXRhLmtleXMoZG9jdW1lbnRhdGlvbik6CisgICAgICAgIGRhdGEgICA9IGRvY3VtZW50YXRpb24uZ2V0VmFyRmxhZyhrZXksICJkb2MiKQorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgIyBUaGUgRG9jdW1lbnRhdGlvbiBub3cgc3RhcnRzCisgICAgICAgIGRvY19pbnMgPSBEb2N1bWVudGF0aW9uSXRlbSgpCisgICAgICAgIGRvY19pbnMuc2V0TmFtZShrZXkpCisKKworICAgICAgICB0b2tlbnMgPSBkYXRhLnNwbGl0KCcgJykKKyAgICAgICAgc3RhdGUgPSBzdGF0ZV9iZWdpbgorICAgICAgICBzdHJpbmc9ICIiCisgICAgICAgIGZvciB0b2tlbiBpbiB0b2tlbnM6CisgICAgICAgICAgICB0b2tlbiA9IHRva2VuLnN0cmlwKCcsJykKKworICAgICAgICAgICAgaWYgbm90IHN0YXRlID09IHN0YXRlX3NlZSBhbmQgdG9rZW4gPT0gIkBzZWUiOgorICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVfc2VlCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsaWYgbm90IHN0YXRlID09IHN0YXRlX2dyb3VwIGFuZCB0b2tlbiAgPT0gIkBncm91cCI6CisgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZV9ncm91cAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIHN0YXRlID09IHN0YXRlX2JlZ2luOgorICAgICAgICAgICAgICAgIHN0cmluZyArPSAiICVzIiAlIHRva2VuCisgICAgICAgICAgICBlbGlmIHN0YXRlID09IHN0YXRlX3NlZToKKyAgICAgICAgICAgICAgICBkb2NfaW5zLmFkZFJlbGF0aW9uKHRva2VuKQorICAgICAgICAgICAgZWxpZiBzdGF0ZSA9PSBzdGF0ZV9ncm91cDoKKyAgICAgICAgICAgICAgICBkb2NfaW5zLmFkZEdyb3VwKHRva2VuKQorCisgICAgICAgICMgc2V0IHRoZSBkZXNjcmlwdGlvbgorICAgICAgICBkb2NfaW5zLnNldERlc2NyaXB0aW9uKHN0cmluZykKKyAgICAgICAgZG9jLmluc2VydF9kb2NfaXRlbShkb2NfaW5zKQorCisgICAgIyBsZXQgdXMgY3JlYXRlIHRoZSBIVE1MIG5vdworICAgIGJiLnV0aWxzLm1rZGlyaGllcihvdXRwdXRfZGlyKQorICAgIG9zLmNoZGlyKG91dHB1dF9kaXIpCisKKyAgICAjIExldCB1cyBjcmVhdGUgdGhlIHNpdGVzIG5vdy4gV2UgZG8gaXQgaW4gdGhlIGZvbGxvd2luZyBvcmRlcgorICAgICMgU3RhcnQgd2l0aCB0aGUgaW5kZXguaHRtbC4gSXQgd2lsbCBwb2ludCB0byBzaXRlcyBleHBsYWluaW5nIGFsbAorICAgICMga2V5cyBhbmQgZ3JvdXBzCisgICAgaHRtbF9zbGF2ZSA9IEhUTUxGb3JtYXR0ZXIoKQorCisgICAgZiA9IGZpbGUoJ3N0eWxlLmNzcycsICd3JykKKyAgICBwcmludCA+PiBmLCBodG1sX3NsYXZlLmNyZWF0ZUNTUygpCisKKyAgICBmID0gZmlsZSgnaW5kZXguaHRtbCcsICd3JykKKyAgICBwcmludCA+PiBmLCBodG1sX3NsYXZlLmNyZWF0ZUluZGV4KCkKKworICAgIGYgPSBmaWxlKCdhbGxfZ3JvdXBzLmh0bWwnLCAndycpCisgICAgcHJpbnQgPj4gZiwgaHRtbF9zbGF2ZS5jcmVhdGVHcm91cHNTaXRlKGRvYykKKworICAgIGYgPSBmaWxlKCdhbGxfa2V5cy5odG1sJywgJ3cnKQorICAgIHByaW50ID4+IGYsIGh0bWxfc2xhdmUuY3JlYXRlS2V5c1NpdGUoZG9jKQorCisgICAgIyBub3cgZm9yIGVhY2ggZ3JvdXAgY3JlYXRlIHRoZSBzaXRlCisgICAgZm9yIGdyb3VwIGluIGRvYy5ncm91cHMoKToKKyAgICAgICAgZiA9IGZpbGUoJ2dyb3VwJXMuaHRtbCcgJSBncm91cCwgJ3cnKQorICAgICAgICBwcmludCA+PiBmLCBodG1sX3NsYXZlLmNyZWF0ZUdyb3VwU2l0ZShncm91cCwgZG9jLmdyb3VwX2NvbnRlbnQoZ3JvdXApKQorCisgICAgIyBub3cgZm9yIHRoZSBrZXlzCisgICAgZm9yIGtleSBpbiBkb2MuZG9jX2tleXMoKToKKyAgICAgICAgZiA9IGZpbGUoJ2tleSVzLmh0bWwnICUgZG9jLmRvY19pdGVtKGtleSkubmFtZSgpLCAndycpCisgICAgICAgIHByaW50ID4+IGYsIGh0bWxfc2xhdmUuY3JlYXRlS2V5U2l0ZShkb2MuZG9jX2l0ZW0oa2V5KSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9pbWFnZS13cml0ZXIgYi95b2N0by1wb2t5L2JpdGJha2UvYmluL2ltYWdlLXdyaXRlcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZDcxMTY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9pbWFnZS13cml0ZXIKQEAgLTAsMCArMSwxMjIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIENvcHlyaWdodCAoYykgMjAxMiBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKSwgJ2xpYicpKQordHJ5OgorICAgIGltcG9ydCBiYgorZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBleGM6CisgICAgc3lzLmV4aXQoc3RyKGV4YykpCisKK2ltcG9ydCBndGsKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IHB5Z3RrCisKK2Zyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgSG9iQWx0QnV0dG9uLCBIb2JCdXR0b24KK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNtZXNzYWdlZGlhbG9nIGltcG9ydCBDcnVtYnNNZXNzYWdlRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuZGVwbG95aW1hZ2VkaWFsb2cgaW1wb3J0IERlcGxveUltYWdlRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuaW1hZ2VzZWxlY3Rpb25kaWFsb2cgaW1wb3J0IEltYWdlU2VsZWN0aW9uRGlhbG9nCisKKyMgSSBwdXQgYWxsIHRoZSBmcyBiaXRiYWtlIHN1cHBvcnRlZCBoZXJlLiBOZWVkIG1vcmUgdGVzdC4KK0RFUExPWUFCTEVfSU1BR0VfVFlQRVMgPSBbImpmZnMyIiwgImNyYW1mcyIsICJleHQyIiwgImV4dDMiLCAiZXh0NCIsICJidHJmcyIsICJzcXVhc2hmcyIsICJ1YmkiLCAidm1kayJdCitUaXRsZSA9ICJVU0IgSW1hZ2UgV3JpdGVyIgorCitjbGFzcyBEZXBsb3lXaW5kb3coZ3RrLldpbmRvdyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGltYWdlX3BhdGg9JycpOgorICAgICAgICBzdXBlcihEZXBsb3lXaW5kb3csIHNlbGYpLl9faW5pdF9fKCkKKworICAgICAgICBpZiBsZW4oaW1hZ2VfcGF0aCkgPiAwOgorICAgICAgICAgICAgdmFsaWQgPSBUcnVlCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoaW1hZ2VfcGF0aCk6CisgICAgICAgICAgICAgICAgdmFsaWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGxibCA9ICI8Yj5JbnZhbGlkIGltYWdlIGZpbGUgcGF0aDogJXMuPC9iPlxuUHJlc3MgPGI+U2VsZWN0IEltYWdlPC9iPiB0byBzZWxlY3QgYW4gaW1hZ2UuIiAlIGltYWdlX3BhdGgKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW1hZ2VfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChpbWFnZV9wYXRoKQorICAgICAgICAgICAgICAgIGV4dGVuZF9uYW1lID0gb3MucGF0aC5zcGxpdGV4dChpbWFnZV9wYXRoKVsxXVsxOl0KKyAgICAgICAgICAgICAgICBpZiBleHRlbmRfbmFtZSBub3QgaW4gREVQTE9ZQUJMRV9JTUFHRV9UWVBFUzoKKyAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBsYmwgPSAiPGI+VW5kZXBsb3lhYmxlIGltZ2UgdHlwZTogJXM8L2I+XG5QcmVzcyA8Yj5TZWxlY3QgSW1hZ2U8L2I+IHRvIHNlbGVjdCBhbiBpbWFnZS4iICUgZXh0ZW5kX25hbWUKKworICAgICAgICAgICAgaWYgbm90IHZhbGlkOgorICAgICAgICAgICAgICAgIGltYWdlX3BhdGggPSAnJworICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cgPSBDcnVtYnNNZXNzYWdlRGlhbG9nKHNlbGYsIGxibCwgZ3RrLlNUT0NLX0RJQUxPR19JTkZPKQorICAgICAgICAgICAgICAgIGJ1dHRvbiA9IGNydW1ic19kaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgICAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgICAgICAgICAgY3J1bWJzX2RpYWxvZy5ydW4oKQorICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cuZGVzdHJveSgpCisKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlhbG9nID0gRGVwbG95SW1hZ2VEaWFsb2coVGl0bGUsIGltYWdlX3BhdGgsIHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrLkRJQUxPR19NT0RBTCB8IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZ3RrLkRJQUxPR19OT19TRVBBUkFUT1IsIE5vbmUsIHN0YW5kYWxvbmU9VHJ1ZSkKKyAgICAgICAgY2xvc2VfYnV0dG9uID0gc2VsZi5kZXBsb3lfZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX05PKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGNsb3NlX2J1dHRvbikKKyAgICAgICAgY2xvc2VfYnV0dG9uLmNvbm5lY3QoJ2NsaWNrZWQnLCBndGsubWFpbl9xdWl0KQorCisgICAgICAgIHdyaXRlX2J1dHRvbiA9IHNlbGYuZGVwbG95X2RpYWxvZy5hZGRfYnV0dG9uKCJXcml0ZSBVU0IgaW1hZ2UiLCBndGsuUkVTUE9OU0VfWUVTKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKHdyaXRlX2J1dHRvbikKKworICAgICAgICBzZWxmLmRlcGxveV9kaWFsb2cuY29ubmVjdCgnc2VsZWN0X2ltYWdlX2NsaWNrZWQnLCBzZWxmLnNlbGVjdF9pbWFnZV9jbGlja2VkX2NiKQorICAgICAgICBzZWxmLmRlcGxveV9kaWFsb2cuY29ubmVjdCgnZGVzdHJveScsIGd0ay5tYWluX3F1aXQpCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5kZXBsb3lfZGlhbG9nLnNob3coKQorCisgICAgZGVmIHNlbGVjdF9pbWFnZV9jbGlja2VkX2NiKHNlbGYsIGRpYWxvZyk6CisgICAgICAgIGN3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgIGRpYWxvZyA9IEltYWdlU2VsZWN0aW9uRGlhbG9nKGN3ZCwgREVQTE9ZQUJMRV9JTUFHRV9UWVBFUywgVGl0bGUsIHNlbGYsIGd0ay5GSUxFX0NIT09TRVJfQUNUSU9OX1NBVkUgKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2FuY2VsIiwgZ3RrLlJFU1BPTlNFX05PKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIk9wZW4iLCBndGsuUkVTUE9OU0VfWUVTKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKworICAgICAgICBpZiByZXNwb25zZSA9PSBndGsuUkVTUE9OU0VfWUVTOgorICAgICAgICAgICAgaWYgbm90IGRpYWxvZy5pbWFnZV9uYW1lczoKKyAgICAgICAgICAgICAgICBsYmwgPSAiPGI+Tm8gc2VsZWN0aW9ucyBtYWRlPC9iPlxuQ2xpY2tlZCB0aGUgcmFkaW8gYnV0dG9uIHRvIHNlbGVjdCBhIGltYWdlLiIKKyAgICAgICAgICAgICAgICBjcnVtYnNfZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5TVE9DS19ESUFMT0dfSU5GTykKKyAgICAgICAgICAgICAgICBidXR0b24gPSBjcnVtYnNfZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICAgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cucnVuKCkKKyAgICAgICAgICAgICAgICBjcnVtYnNfZGlhbG9nLmRlc3Ryb3koKQorICAgICAgICAgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgIyBnZXQgdGhlIGZ1bGwgcGF0aCBvZiBpbWFnZQorICAgICAgICAgICAgaW1hZ2VfcGF0aCA9IG9zLnBhdGguam9pbihkaWFsb2cuaW1hZ2VfZm9sZGVyLCBkaWFsb2cuaW1hZ2VfbmFtZXNbMF0pCisgICAgICAgICAgICBzZWxmLmRlcGxveV9kaWFsb2cuc2V0X2ltYWdlX3RleHRfYnVmZmVyKGltYWdlX3BhdGgpCisgICAgICAgICAgICBzZWxmLmRlcGxveV9kaWFsb2cuc2V0X2ltYWdlX3BhdGgoaW1hZ2VfcGF0aCkKKworICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisKK2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgICAgICAgICAgICAgIHVzYWdlID0gIiIiJXByb2cgWy1oXSBbaW1hZ2VfZmlsZV0KKworJXByb2cgd3JpdGVzIGJvb3RhYmxlIGltYWdlcyB0byBVU0IgZGV2aWNlcy4gWW91IGNhbgorcHJvdmlkZSB0aGUgaW1hZ2UgZmlsZSBvbiB0aGUgY29tbWFuZCBsaW5lIG9yIHNlbGVjdCBpdCB1c2luZyB0aGUgR1VJLiIiIikKKworICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhzeXMuYXJndikKKyAgICBpbWFnZV9maWxlID0gYXJnc1sxXSBpZiBsZW4oYXJncykgPiAxIGVsc2UgJycKKyAgICBkdyA9IERlcGxveVdpbmRvdyhpbWFnZV9maWxlKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRyeToKKyAgICAgICAgbWFpbigpCisgICAgICAgIGd0ay5tYWluKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoMykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vdG9hc3RlciBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vdG9hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MTFjZTJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi90b2FzdGVyCkBAIC0wLDAgKzEsMzUyIEBACisjIS9iaW4vc2gKKyMgKGMpIDIwMTMgSW50ZWwgQ29ycC4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKworIyBUaGlzIHNjcmlwdCBjYW4gYmUgcnVuIGluIHR3byBtb2Rlcy4KKworIyBXaGVuIHVzZWQgd2l0aCAic291cmNlIiwgZnJvbSBhIGJ1aWxkIGRpcmVjdG9yeSwKKyMgaXQgZW5hYmxlcyB0b2FzdGVyIGV2ZW50IGxvZ2dpbmcgYW5kIHN0YXJ0cyB0aGUgYml0YmFrZSByZXNpZGVudCBzZXJ2ZXIuCisjIHVzZSBhczogIHNvdXJjZSB0b2FzdGVyIFtzdGFydHxzdG9wXSBbbm93ZWJdIFtub3VpXQorCisjIFdoZW4gaXQgaXMgY2FsbGVkIGFzIGEgc3RhbmQtYWxvbmUgc2NyaXB0LCBpdCBzdGFydHMganVzdCB0aGUKKyMgd2ViIHNlcnZlciwgYW5kIHRoZSBidWlsZGluZyBzaGFsbCBiZSBkb25lIHRocm91Z2ggdGhlIHdlYiBpbnRlcmZhY2UuCisjIEFzIHNjcmlwdCwgaXQgd2lsbCBub3QgcmV0dXJuIHRvIHRoZSBjb21tYW5kIHByb21wdC4gU3RvcCB3aXRoIEN0cmwtQy4KKworIyBIZWxwZXIgZnVuY3Rpb24gdG8ga2lsbCBhIGJhY2tncm91bmQgdG9hc3RlciBkZXZlbG9wbWVudCBzZXJ2ZXIKKword2Vic2VydmVyS2lsbEFsbCgpCit7CisgICAgbG9jYWwgcGlkZmlsZQorICAgIGZvciBwaWRmaWxlIGluICR7QlVJTERESVJ9Ly50b2FzdGVybWFpbi5waWQ7IGRvCisgICAgICAgIGlmIFsgLWYgJHtwaWRmaWxlfSBdOyB0aGVuCisgICAgICAgICAgICBwaWQ9YGNhdCAke3BpZGZpbGV9YAorICAgICAgICAgICAgd2hpbGUga2lsbCAtMCAkcGlkIDI+L2Rldi9udWxsOyBkbworICAgICAgICAgICAgICAgIGtpbGwgLVNJR1RFUk0gLSRwaWQgMj4vZGV2L251bGwKKyAgICAgICAgICAgICAgICBzbGVlcCAxCisgICAgICAgICAgICAgICAgIyBLaWxsIHByb2Nlc3NlcyBpZiB0aGV5IGFyZSBzdGlsbCBydW5uaW5nIC0gbWF5IGhhcHBlbiBpbiBpbnRlcmFjdGl2ZSBzaGVsbHMKKyAgICAgICAgICAgICAgICBwcyBmdXggfCBncmVwICJweXRob24uKm1hbmFnZS5weSBydW5zZXJ2ZXIiIHwgYXdrICd7cHJpbnQgJDJ9JyB8IHhhcmdzIGtpbGwKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIHJtICAke3BpZGZpbGV9CisgICAgICAgIGZpCisgICAgZG9uZQorfQorCit3ZWJzZXJ2ZXJTdGFydEFsbCgpCit7CisgICAgIyBkbyBub3Qgc3RhcnQgaWYgdG9hc3Rlcm1haW4gcG9pbnRzIHRvIGEgdmFsaWQgcHJvY2VzcworICAgIGlmICEgY2F0ICIke0JVSUxERElSfS8udG9hc3Rlcm1haW4ucGlkIiAyPi9kZXYvbnVsbCB8IHhhcmdzIC1Je30ga2lsbCAtMCB7fSA7IHRoZW4KKyAgICAgICAgcmV0dmFsPTEKKyAgICAgICAgcm0gIiR7QlVJTERESVJ9Ly50b2FzdGVybWFpbi5waWQiCisgICAgZmkKKworICAgIHJldHZhbD0wCisgICAgaWYgWyAiJFRPQVNURVJfTUFOQUdFRCIgJz0nICcxJyBdOyB0aGVuCisgICAgICAgIHB5dGhvbiAkQkJCQVNFRElSL2xpYi90b2FzdGVyL21hbmFnZS5weSBzeW5jZGIgfHwgcmV0dmFsPTEKKyAgICBlbHNlCisgICAgICAgIHB5dGhvbiAkQkJCQVNFRElSL2xpYi90b2FzdGVyL21hbmFnZS5weSBzeW5jZGIgLS1ub2lucHV0IHx8IHJldHZhbD0xCisgICAgZmkKKyAgICBweXRob24gJEJCQkFTRURJUi9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbWlncmF0ZSBvcm0gfHwgcmV0dmFsPTIKKyAgICBpZiBbICRyZXR2YWwgLWVxIDEgXTsgdGhlbgorICAgICAgICBlY2hvICJGYWlsZWQgZGIgc3luYywgc3RvcHBpbmcgc3lzdGVtIHN0YXJ0IiAxPiYyCisgICAgZWxpZiBbICRyZXR2YWwgLWVxIDIgXTsgdGhlbgorICAgICAgICBwcmludGYgIlxuRXJyb3Igb24gbWlncmF0aW9uLCB0cnlpbmcgdG8gcmVjb3Zlci4uLiBcbiIKKyAgICAgICAgcHl0aG9uICRCQkJBU0VESVIvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IG1pZ3JhdGUgb3JtIDAwMDFfaW5pdGlhbCAtLWZha2UKKyAgICAgICAgcmV0dmFsPTAKKyAgICAgICAgcHl0aG9uICRCQkJBU0VESVIvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IG1pZ3JhdGUgb3JtIHx8IHJldHZhbD0xCisgICAgZmkKKyAgICBpZiBbICIkVE9BU1RFUl9NQU5BR0VEIiA9ICcxJyBdOyB0aGVuCisgICAgICAgIHB5dGhvbiAkQkJCQVNFRElSL2xpYi90b2FzdGVyL21hbmFnZS5weSBtaWdyYXRlIGJsZGNvbnRyb2wgfHwgcmV0dmFsPTEKKyAgICAgICAgcHl0aG9uICRCQkJBU0VESVIvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGNoZWNrc2V0dGluZ3MgIC0tdHJhY2ViYWNrIHx8IHJldHZhbD0xCisgICAgZmkKKyAgICBpZiBbICRyZXR2YWwgLWVxIDAgXTsgdGhlbgorICAgICAgICBlY2hvICJTdGFydGluZyB3ZWJzZXJ2ZXIuLi4iCisgICAgICAgIHB5dGhvbiAkQkJCQVNFRElSL2xpYi90b2FzdGVyL21hbmFnZS5weSBydW5zZXJ2ZXIgIjAuMC4wLjA6JFdFQl9QT1JUIiA8L2Rldi9udWxsID4+JHtCVUlMRERJUn0vdG9hc3Rlcl93ZWIubG9nIDI+JjEgJiBlY2hvICQhID4ke0JVSUxERElSfS8udG9hc3Rlcm1haW4ucGlkCisgICAgICAgIHNsZWVwIDEKKyAgICAgICAgaWYgISBjYXQgIiR7QlVJTERESVJ9Ly50b2FzdGVybWFpbi5waWQiIHwgeGFyZ3MgLUl7fSBraWxsIC0wIHt9IDsgdGhlbgorICAgICAgICAgICAgcmV0dmFsPTEKKyAgICAgICAgICAgIHJtICIke0JVSUxERElSfS8udG9hc3Rlcm1haW4ucGlkIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBlY2hvICJXZWJzZXJ2ZXIgYWRkcmVzczogIGh0dHA6Ly8wLjAuMC4wOiRXRUJfUE9SVC8iCisgICAgICAgIGZpCisgICAgZmkKKyAgICByZXR1cm4gJHJldHZhbAorfQorCisjIEhlbHBlciBmdW5jdGlvbnMgdG8gYWRkIGEgc3BlY2lhbCBjb25maWd1cmF0aW9uIGZpbGUKKworYWRkdG9Db25maWd1cmF0aW9uKCkKK3sKKyAgICBmaWxlPSQxCisgICAgc2hpZnQKKyAgICBlY2hvICIjQ3JlYXRlZCBieSB0b2FzdGVyIHN0YXJ0IHNjcmlwdCIgPiAke0JVSUxERElSfS9jb25mLyRmaWxlCisgICAgZm9yIHZhciBpbiAiJEAiOyBkbyBlY2hvICR2YXIgPj4gJHtCVUlMRERJUn0vY29uZi8kZmlsZTsgZG9uZQorfQorCitJTlNUT1BTWVNURU09MAorCisjIGRlZmluZSB0aGUgc3RvcCBjb21tYW5kCitzdG9wX3N5c3RlbSgpCit7CisgICAgIyBwcmV2ZW50IHJlZW50cnkKKyAgICBpZiBbICRJTlNUT1BTWVNURU0gLWVxIDEgXTsgdGhlbiByZXR1cm47IGZpCisgICAgSU5TVE9QU1lTVEVNPTEKKyAgICBpZiBbIC1mICR7QlVJTERESVJ9Ly50b2FzdGVydWkucGlkIF07IHRoZW4KKyAgICAgICAga2lsbCBgY2F0ICR7QlVJTERESVJ9Ly50b2FzdGVydWkucGlkYCAyPi9kZXYvbnVsbAorICAgICAgICBybSAke0JVSUxERElSfS8udG9hc3RlcnVpLnBpZAorICAgIGZpCisgICAgQkJTRVJWRVI9MC4wLjAuMDotMSBiaXRiYWtlIC1tCisgICAgdW5zZXQgQkJTRVJWRVIKKyAgICB3ZWJzZXJ2ZXJLaWxsQWxsCisgICAgIyBmb3JjZSBzdG9wIGFueSBtaXNiZWhhdmluZyBiaXRiYWtlIHNlcnZlcgorICAgIGxzb2YgYml0YmFrZS5sb2NrIHwgYXdrICd7cHJpbnQgJDJ9JyB8IGdyZXAgIlswLTldXCsiIHwgeGFyZ3MgLW4xIC1yIGtpbGwKKyAgICB0cmFwIC0gU0lHSFVQCisgICAgI3RyYXAgLSBTSUdDSExECisgICAgSU5TVE9QU1lTVEVNPTAKK30KKworY2hlY2tfcGlkYnlmaWxlKCkgeworICAgIFsgLWUgJDEgXSAmJiBraWxsIC0wIGBjYXQgJDFgIDI+L2Rldi9udWxsCit9CisKKworbm90aWZ5X2NobGRleGl0KCkgeworICAgIGlmIFsgJE5PVE9BU1RFUlVJIC1lcSAwIF07IHRoZW4KKyAgICAgICAgY2hlY2tfcGlkYnlmaWxlICR7QlVJTERESVJ9Ly50b2FzdGVydWkucGlkICYmIHJldHVybgorICAgICAgICBzdG9wX3N5c3RlbQorICAgIGZpCit9CisKKwordmVyaWZ5X3ByZXJlcSgpIHsKKyAgICAjIFZlcmlmeSBwcmVyZXF1aXNpdGVzCisKKyAgICBpZiAhIGVjaG8gImltcG9ydCBkamFuZ287IHByaW50ICgxLCkgPT0gZGphbmdvLlZFUlNJT05bMDoxXSBhbmQgZGphbmdvLlZFUlNJT05bMToyXVswXSBpbiAoNiwpIiB8IHB5dGhvbiAyPi9kZXYvbnVsbCB8IGdyZXAgVHJ1ZSA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgIHByaW50ZiAiVGhpcyBwcm9ncmFtIG5lZWRzIERqYW5nbyAxLjYuIFBsZWFzZSBpbnN0YWxsIHdpdGhcblxucGlwIGluc3RhbGwgZGphbmdvPT0xLjZcbiIKKyAgICAgICAgcmV0dXJuIDIKKyAgICBmaQorCisgICAgaWYgISBlY2hvICJpbXBvcnQgc291dGg7IHByaW50IHJlZHVjZShsYW1iZGEgeCwgeTogMiBpZiB4PT0yIGVsc2UgMCBpZiB4ID09IDAgZWxzZSB5LCBtYXAobGFtYmRhIHg6IDErY21wKHhbMV0teFswXSwwKSwgemlwKFswLDgsNF0sIG1hcChpbnQsc291dGguX192ZXJzaW9uX18uc3BsaXQoXCIuXCIpKSkpKSA+IDAiIHwgcHl0aG9uIDI+L2Rldi9udWxsIHwgZ3JlcCBUcnVlID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgcHJpbnRmICJUaGlzIHByb2dyYW0gbmVlZHMgU291dGggMC44LjQuIFBsZWFzZSBpbnN0YWxsIHdpdGhcblxucGlwIGluc3RhbGwgc291dGg9PTAuOC40XG4iCisgICAgICAgIHJldHVybiAyCisgICAgZmkKKyAgICByZXR1cm4gMAorfQorCisKKyMgcmVhZCBjb21tYW5kIGxpbmUgcGFyYW1ldGVycworaWYgWyAtbiAiJEJBU0hfU09VUkNFIiBdIDsgdGhlbgorICAgIFRPQVNURVI9JHtCQVNIX1NPVVJDRX0KK2VsaWYgWyAtbiAiJFpTSF9OQU1FIiBdIDsgdGhlbgorICAgIFRPQVNURVI9JHsoJSk6LSV4fQorZWxzZQorICAgIFRPQVNURVI9JDAKK2ZpCisKK0JCQkFTRURJUj1gZGlybmFtZSAkVE9BU1RFUmAvLi4KKworUlVOTklORz0wCisKK05PVE9BU1RFUlVJPTAKK1dFQlNFUlZFUj0xCitUT0FTVEVSX0JSQkU9IiIKK1dFQl9QT1JUPSI4MDAwIgorTk9CUk9XU0VSPTAKKworZm9yIHBhcmFtIGluICQqOyBkbworICAgIGNhc2UgJHBhcmFtIGluCisgICAgbm91aSApCisgICAgICAgICAgICBOT1RPQVNURVJVST0xCisgICAgOzsKKyAgICBub3dlYiApCisgICAgICAgICAgICBXRUJTRVJWRVI9MAorICAgIDs7CisgICAgbm9icm93c2VyICkKKyAgICAgICAgICAgIE5PQlJPV1NFUj0xCisgICAgOzsKKyAgICBicmJlPSogKQorICAgICAgICAgICAgVE9BU1RFUl9CUkJFPSQnXG4nIlRPQVNURVJfQlJCRT1cIiIke3BhcmFtIyo9fSJcIiIKKyAgICA7OworICAgIHdlYnBvcnQ9KikKKyAgICAgICAgICAgIFdFQl9QT1JUPSIke3BhcmFtIyo9fSIKKyAgICBlc2FjCitkb25lCisKK1sgLW4gIiR7QkFTSF9TT1VSQ0V9IiBdICYmIFNSQ0ZJTEU9JHtCQVNIX1NPVVJDRX0gfHwgU1JDRklMRT0kXworCitpZiBbIGBiYXNlbmFtZSBcIiQwXCJgID0gYGJhc2VuYW1lIFwiJHtTUkNGSUxFfVwiYCBdOyB0aGVuCisgICAgIyBXZSBhcmUgY2FsbGVkIGFzIHN0YW5kYWxvbmUuIFdlIHJlZnVzZSB0byBydW4gaW4gYSBidWlsZCBlbnZpcm9ubWVudCAtIHdlIG5lZWQgdGhlIGludGVyYWN0aXZlIG1vZGUgZm9yIHRoYXQuCisgICAgIyBTdGFydCBqdXN0IHRoZSB3ZWIgc2VydmVyLCBwb2ludCB0aGUgd2ViIGJyb3dzZXIgdG8gdGhlIGludGVyZmFjZSwgYW5kIHN0YXJ0IGFueSBEamFuZ28gc2VydmljZXMuCisKKyAgICBpZiAhIHZlcmlmeV9wcmVyZXE7IHRoZW4KKyAgICAgICAgZWNobyAiRXJyb3I6IENvdWxkIG5vdCB2ZXJpZnkgdGhhdCB0aGUgbmVlZGVkIGRlcGVuZGVuY2llcyBhcmUgaW5zdGFsbGVkLiBQbGVhc2UgdXNlIHZpcnR1YWxlbnYgYW5kIHBpcCB0byBpbnN0YWxsIGRlcGVuZGVuY2llcyBsaXN0ZWQgaW4gdG9hc3Rlci1yZXF1aXJlbWVudHMudHh0IiAxPiYyCisgICAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBpZiBbIC1uICIkQlVJTERESVIiIF07IHRoZW4KKyAgICAgICAgcHJpbnRmICJFcnJvcjogSXQgbG9va3MgbGlrZSB5b3Ugc291cmNlZCBvZS1pbml0LWJ1aWxkLWVudi4gVG9hc3RlciBjYW5ub3Qgc3RhcnQgaW4gYnVpbGQgbW9kZSBmcm9tIGFuIG9lLWNvcmUgYnVpbGQgZW52aXJvbm1lbnQuXG4gWW91IHNob3VsZCBiZSBzdGFydGluZyBUb2FzdGVyIGZyb20gYSBuZXcgdGVybWluYWwgd2luZG93LiIgMT4mMgorICAgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgIyBEZWZpbmUgYSBmYWtlIGJ1aWxkZGlyIHdoZXJlIG9ubHkgdGhlIHBpZCBmaWxlcyBhcmUgYWN0dWFsbHkgY3JlYXRlZC4gTm8gcmVhbCBidWlsZHMgd2lsbCB0YWtlIHBsYWNlIGhlcmUuCisgICAgQlVJTERESVI9L3RtcC90b2FzdGVyXyQkCisgICAgaWYgWyAtZCAiJEJVSUxERElSIiBdOyB0aGVuCisgICAgICAgIGVjaG8gIlByZXZpb3VzIHRvYXN0ZXIgcnVuIGRpcmVjdG9yeSAkQlVJTERESVIgZm91bmQsIGNvd2FyZGx5IHJlZnVzaW5nIHRvIHN0YXJ0LiBQbGVhc2UgcmVtb3ZlIHRoZSBkaXJlY3Rvcnkgd2hlbiB0aGF0IHRvYXN0ZXIgaW5zdGFuY2UgaXMgb3ZlciIgMj4mMQorICAgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgbWtkaXIgLXAgIiRCVUlMRERJUiIKKworICAgIFJVTk5JTkc9MQorICAgIHRyYXBfY3RybGMoKSB7CisgICAgICAgIGVjaG8gIioqIFN0b3BwaW5nIHN5c3RlbSIKKyAgICAgICAgd2Vic2VydmVyS2lsbEFsbAorICAgICAgICBSVU5OSU5HPTAKKyAgICB9CisKKyAgICBkb19jbGVhbnVwKCkgeworICAgICAgICBmaW5kICIkQlVJTERESVIiIC10eXBlIGYgfCB4YXJncyBybQorICAgICAgICBybWRpciAiJEJVSUxERElSIgorICAgIH0KKyAgICBjbGVhbnVwKCkgeworICAgICAgICBpZiBncmVwIC1pciBlcnJvciAiJEJVSUxERElSIiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICBpZiBncmVwIC1pcm4gIlRoYXQgcG9ydCBpcyBhbHJlYWR5IGluIHVzZSIgIiRCVUlMRERJUiI7IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICJZb3UgY2FuIHVzZSB0aGUgXCJ3ZWJwb3J0PVBPUlROVU1CRVJcIiBwYXJhbWV0ZXIgdG8gc3RhcnQgVG9hc3RlciBvbiBhIGRpZmZlcmVudCBwb3J0IChwb3J0ICRXRUJfUE9SVCBpcyBhbHJlYWR5IGluIHVzZSkiCisgICAgICAgICAgICAgICAgZG9fY2xlYW51cAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByaW50ZiAiXG5FcnJvcnMgZm91bmQgaW4gdGhlIFRvYXN0ZXIgbG9nIGZpbGVzIHByZXNlbnQgaW4gJyRCVUlMRERJUicuIERpcmVjdG9yeSB3aWxsIG5vdCBiZSBjbGVhbmVkLlxuIFBsZWFzZSByZXZpZXcgdGhlIGVycm9ycyBhbmQgbm90aWZ5IHRvYXN0ZXJAeW9jdG9wcm9qZWN0Lm9yZyBvciBzdWJtaXQgYSBidWcgaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1Ub2FzdGVyIgorICAgICAgICAgICAgZmkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZWNobyAiTm8gZXJyb3JzIGZvdW5kLCByZW1vdmluZyB0aGUgcnVuIGRpcmVjdG9yeSAnJEJVSUxERElSJyIKKyAgICAgICAgICAgIGRvX2NsZWFudXAKKyAgICAgICAgZmkKKyAgICB9CisgICAgVE9BU1RFUl9NQU5BR0VEPTEKKyAgICBleHBvcnQgVE9BU1RFUl9NQU5BR0VEPTEKKyAgICBpZiBbICRXRUJTRVJWRVIgLWd0IDAgXSAmJiAhIHdlYnNlcnZlclN0YXJ0QWxsOyB0aGVuCisgICAgICAgIGVjaG8gIkZhaWxlZCB0byBzdGFydCB0aGUgd2ViIHNlcnZlciwgc3RvcHBpbmciIDE+JjIKKyAgICAgICAgY2xlYW51cAorICAgICAgICBleGl0IDEKKyAgICBmaQorICAgIGlmIFsgJFdFQlNFUlZFUiAtZ3QgMCBdICYmIFsgJE5PQlJPV1NFUiAtZXEgMCBdICA7IHRoZW4KKyAgICAgICAgZWNobyAiU3RhcnRpbmcgYnJvd3Nlci4uLiIKKyAgICAgICAgeGRnLW9wZW4gaHR0cDovLzEyNy4wLjAuMTokV0VCX1BPUlQvID4vZGV2L251bGwgMj4mMSAmCisgICAgZmkKKyAgICB0cmFwIHRyYXBfY3RybGMgMgorICAgIGVjaG8gIlRvYXN0ZXIgaXMgbm93IHJ1bm5pbmcuIFlvdSBjYW4gc3RvcCBpdCB3aXRoIEN0cmwtQyIKKyAgICB3aGlsZSBbICRSVU5OSU5HIC1ndCAwIF07IGRvCisgICAgICAgIHB5dGhvbiAkQkJCQVNFRElSL2xpYi90b2FzdGVyL21hbmFnZS5weSBydW5idWlsZHMgMj4mMSB8IHRlZSAtYSAiJEJVSUxERElSL3RvYXN0ZXIubG9nIgorICAgICAgICBzbGVlcCAxCisgICAgZG9uZQorICAgIGNsZWFudXAKKyAgICBlY2hvICIqKioqIEV4aXQiCisgICAgZXhpdCAwCitmaQorCisKK2lmICEgdmVyaWZ5X3ByZXJlcTsgdGhlbgorICAgIGVjaG8gIkVycm9yOiBDb3VsZCBub3QgdmVyaWZ5IHRoYXQgdGhlIG5lZWRlZCBkZXBlbmRlbmNpZXMgYXJlIGluc3RhbGxlZC4gUGxlYXNlIHVzZSB2aXJ0dWFsZW52IGFuZCBwaXAgdG8gaW5zdGFsbCBkZXBlbmRlbmNpZXMgbGlzdGVkIGluIHRvYXN0ZXItcmVxdWlyZW1lbnRzLnR4dCIgMT4mMgorICAgIHJldHVybiAxCitmaQorCisKKyMgV2UgbWFrZSBzdXJlIHdlJ3JlIHJ1bm5pbmcgaW4gdGhlIGN1cnJlbnQgc2hlbGwgYW5kIGluIGEgZ29vZCBlbnZpcm9ubWVudAoraWYgWyAteiAiJEJVSUxERElSIiBdIHx8ICAhIHdoaWNoIGJpdGJha2UgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorICAgIGVjaG8gIkVycm9yOiBCdWlsZCBlbnZpcm9ubWVudCBpcyBub3Qgc2V0dXAgb3IgYml0YmFrZSBpcyBub3QgaW4gcGF0aC4iIDE+JjIKKyAgICByZXR1cm4gMgorZmkKKworCisjIERldGVybWluZSB0aGUgYWN0aW9uLiBJZiBzcGVjaWZpZWQgYnkgYXJndW1lbnRzLCBmaW5lLCBpZiBub3QsIHRvZ2dsZSBpdAoraWYgWyAiJDEiID0gJ3N0YXJ0JyBdIHx8IFsgIiQxIiA9ICdzdG9wJyBdOyB0aGVuCisgICAgQ01EPSIkMSIKK2Vsc2UKKyAgICBpZiBbIC16ICIkQkJTRVJWRVIiIF07IHRoZW4KKyAgICAgICAgQ01EPSJzdGFydCIKKyAgICBlbHNlCisgICAgICAgIENNRD0ic3RvcCIKKyAgICBmaQorZmkKKworZWNobyAiVGhlIHN5c3RlbSB3aWxsICRDTUQuIgorCisjIE1ha2Ugc3VyZSBpdCdzIHNhZmUgdG8gcnVuIGJ5IGNoZWNraW5nIGJpdGJha2UgbG9jaworCitsb2NrPTEKK2lmIFsgLWUgJEJVSUxERElSL2JpdGJha2UubG9jayBdOyB0aGVuCisgICAgcHl0aG9uIC1jICJpbXBvcnQgZmNudGw7IGZjbnRsLmZsb2NrKG9wZW4oXCIkQlVJTERESVIvYml0YmFrZS5sb2NrXCIpLCBmY250bC5MT0NLX0VYfGZjbnRsLkxPQ0tfTkIpIiAyPi9kZXYvbnVsbCB8fCBsb2NrPTAKK2ZpCisKK2lmIFsgJHtDTUR9ID0gJ3N0YXJ0JyBdICYmIFsgJGxvY2sgLWVxIDAgXTsgdGhlbgorICAgIGVjaG8gIkVycm9yOiBiaXRiYWtlIGxvY2sgc3RhdGUgZXJyb3IuIEZpbGUgbG9ja3Mgc2hvdyB0aGF0IHRoZSBzeXN0ZW0gaXMgb24uIiAxPiYyCisgICAgZWNobyAiUGxlYXNlIHdhaXQgZm9yIHRoZSBjdXJyZW50IGJ1aWxkIHRvIGZpbmlzaCwgc3RvcCBhbmQgdGhlbiBzdGFydCB0aGUgc3lzdGVtIGFnYWluLiIgMT4mMgorICAgIHJldHVybiAzCitmaQorCitpZiBbICR7Q01EfSA9ICdzdGFydCcgXSAmJiBbIC1lICRCVUlMRERJUi8udG9hc3Rlcm1haW4ucGlkIF0gJiYga2lsbCAtMCBgY2F0ICRCVUlMRERJUi8udG9hc3Rlcm1haW4ucGlkYDsgdGhlbgorICAgIGVjaG8gIldhcm5pbmc6IGJpdGJha2UgYXBwZWFycyB0byBiZSBkZWFkLCBidXQgdGhlIFRvYXN0ZXIgd2ViIHNlcnZlciBpcyBydW5uaW5nLiBTb21ldGhpbmcgZmlzaHkgaXMgZ29pbmcgb24uIiAxPiYyCisgICAgZWNobyAiQ2xlYW5pbmcgdXAgdGhlIHdlYiBzZXJ2ZXIgdG8gc3RhcnQgZnJvbSBhIGNsZWFuIHNsYXRlLiIKKyAgICB3ZWJzZXJ2ZXJLaWxsQWxsCitmaQorCisKKyMgRXhlY3V0ZSB0aGUgY29tbWFuZHMKKworY2FzZSAkQ01EIGluCisgICAgc3RhcnQgKQorICAgICAgICBzdGFydF9zdWNjZXNzPTEKKyAgICAgICAgYWRkdG9Db25maWd1cmF0aW9uIHRvYXN0ZXIuY29uZiAiSU5IRVJJVCs9XCJ0b2FzdGVyIGJ1aWxkaGlzdG9yeVwiIiAkVE9BU1RFUl9CUkJFCisgICAgICAgIGlmIFsgJFdFQlNFUlZFUiAtZ3QgMCBdICYmICEgd2Vic2VydmVyU3RhcnRBbGw7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIkZhaWxlZCAke0NNRH0uIgorICAgICAgICAgICAgcmV0dXJuIDQKKyAgICAgICAgZmkKKyAgICAgICAgdW5zZXQgQkJTRVJWRVIKKyAgICAgICAgUFJFUkVBRD0iIgorICAgICAgICBpZiBbIC1lICR7QlVJTERESVJ9L2NvbmYvdG9hc3Rlci1wcmUuY29uZiBdOyB0aGVuCisgICAgICAgICAgICBybSAke0JVSUxERElSfS9jb25mL3RvYXN0ZXItcHJlLmNvbmYKKyAgICAgICAgZmkKKyAgICAgICAgYml0YmFrZSAkUFJFUkVBRCAtLXBvc3RyZWFkIGNvbmYvdG9hc3Rlci5jb25mIC0tc2VydmVyLW9ubHkgLXQgeG1scnBjIC1CIDAuMC4wLjA6MAorICAgICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KKyAgICAgICAgICAgIHN0YXJ0X3N1Y2Nlc3M9MAorICAgICAgICAgICAgZWNobyAiQml0YmFrZSBzZXJ2ZXIgc3RhcnQgZmFpbGVkIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBleHBvcnQgQkJTRVJWRVI9MC4wLjAuMDotMQorICAgICAgICAgICAgaWYgWyAkTk9UT0FTVEVSVUkgLWVxIDAgXTsgdGhlbiAgICAgICAgIyB3ZSBzdGFydCB0aGUgVE9BU1RFUlVJIG9ubHkgaWYgbm90IGluaGliaXRlZAorICAgICAgICAgICAgICAgIGJpdGJha2UgLS1vYnNlcnZlLW9ubHkgLXUgdG9hc3RlcnVpID4+JHtCVUlMRERJUn0vdG9hc3Rlcl91aS5sb2cgMj4mMSAmIGVjaG8gJCEgPiR7QlVJTERESVJ9Ly50b2FzdGVydWkucGlkCisgICAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICBpZiBbICRzdGFydF9zdWNjZXNzIC1lcSAxIF07IHRoZW4KKyAgICAgICAgICAgICMgc2V0IGZhaWwgc2FmZSBzdG9wIHN5c3RlbSBvbiB0ZXJtaW5hbCBleGl0CisgICAgICAgICAgICB0cmFwIHN0b3Bfc3lzdGVtIFNJR0hVUAorICAgICAgICAgICAgZWNobyAiU3VjY2Vzc2Z1bCAke0NNRH0uIgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgIyBmYWlsZWQgc3RhcnQsIGRvIHN0b3AKKyAgICAgICAgICAgIHN0b3Bfc3lzdGVtCisgICAgICAgICAgICBlY2hvICJGYWlsZWQgJHtDTUR9LiIKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGZpCisgICAgICAgICMgc3RvcCBzeXN0ZW0gb24gdGVybWluYWwgZXhpdAorICAgICAgICBzZXQgLW8gbW9uaXRvcgorICAgICAgICB0cmFwIHN0b3Bfc3lzdGVtIFNJR0hVUAorICAgICAgICAjdHJhcCBub3RpZnlfY2hsZGV4aXQgU0lHQ0hMRAorICAgIDs7CisgICAgc3RvcCApCisgICAgICAgIHN0b3Bfc3lzdGVtCisgICAgICAgIGVjaG8gIlN1Y2Nlc3NmdWwgJHtDTUR9LiIKKyAgICA7OworZXNhYworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvYmluL3RvYXN0ZXItZXZlbnRyZXBsYXkgYi95b2N0by1wb2t5L2JpdGJha2UvYmluL3RvYXN0ZXItZXZlbnRyZXBsYXkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjE1YTdhZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vdG9hc3Rlci1ldmVudHJlcGxheQpAQCAtMCwwICsxLDE3NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTQgICAgICAgIEFsZXggRGFtaWFuCisjCisjIFRoaXMgZmlsZSByZS11c2VzIGNvZGUgc3ByZWFkIHRocm91Z2hvdXQgb3RoZXIgQml0YmFrZSBzb3VyY2UgZmlsZXMuCisjIEFzIHN1Y2gsIGFsbCBvdGhlciBjb3B5cmlnaHRzIGJlbG9uZyB0byB0aGVpciBvd24gcmlnaHQgaG9sZGVycy4KKyMKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKworIyBUaGlzIGNvbW1hbmQgdGFrZXMgYSBmaWxlbmFtZSBhcyBhIHNpbmdsZSBwYXJhbWV0ZXIuIFRoZSBmaWxlbmFtZSBpcyByZWFkCisjIGFzIGEgYnVpbGQgZXZlbnRsb2csIGFuZCB0aGUgVG9hc3RlclVJIGlzIHVzZWQgdG8gcHJvY2VzcyBldmVudHMgaW4gdGhlIGZpbGUKKyMgYW5kIGxvZyBkYXRhIGluIHRoZSBkYXRhYmFzZQorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMsIGxvZ2dpbmcKKworIyBtYW5nbGUgc3lzcGF0aCB0byBhbGxvdyBlYXN5IGltcG9ydCBvZiBtb2R1bGVzCitzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGliJykpCisKKworaW1wb3J0IGJiLmNvb2tlcgorZnJvbSBiYi51aSBpbXBvcnQgdG9hc3RlcnVpCitpbXBvcnQgc3lzCitpbXBvcnQgbG9nZ2luZworCitpbXBvcnQganNvbiwgcGlja2xlCisKKworY2xhc3MgRmlsZVJlYWRFdmVudHNTZXJ2ZXJDb25uZWN0aW9uKCk6CisgICAgIiIiICBFbXVsYXRlcyBhIGNvbm5lY3Rpb24gdG8gYSBiaXRiYWtlIHNlcnZlciB0aGF0IGZlZWRzCisgICAgICAgIGV2ZW50cyBjb21pbmcgYWN0dWFsbHkgcmVhZCBmcm9tIGEgc2F2ZWQgbG9nIGZpbGUuCisgICAgIiIiCisKKyAgICBjbGFzcyBNb2NrQ29ubmVjdGlvbigpOgorICAgICAgICAiIiIgZmlsbC1pbiBmb3IgdGhlIHByb3h5IHRvIHRoZSBzZXJ2ZXIuIHdlIGp1c3QgcmV0dXJuIGdlbmVyaWMgZGF0YQorICAgICAgICAiIiIKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNjKToKKyAgICAgICAgICAgIHNlbGYuX3NjID0gc2MKKworICAgICAgICBkZWYgcnVuQ29tbWFuZChzZWxmLCBjb21tYW5kQXJyYXkpOgorICAgICAgICAgICAgIiIiIGVtdWxhdGVzIHJ1bm5pbmcgYSBjb21tYW5kIG9uIHRoZSBzZXJ2ZXI7IG9ubHkgcmVhZC1vbmx5IGNvbW1hbmRzIGFyZSBhY2NlcHRlZCAiIiIKKyAgICAgICAgICAgIGNvbW1hbmRfbmFtZSA9IGNvbW1hbmRBcnJheVswXQorCisgICAgICAgICAgICBpZiBjb21tYW5kX25hbWUgPT0gImdldFZhcmlhYmxlIjoKKyAgICAgICAgICAgICAgICBpZiBjb21tYW5kQXJyYXlbMV0gaW4gc2VsZi5fc2MuX3ZhcmlhYmxlczoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChzZWxmLl9zYy5fdmFyaWFibGVzW2NvbW1hbmRBcnJheVsxXV1bJ3YnXSwgTm9uZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gKE5vbmUsICJNaXNzaW5nIHZhcmlhYmxlIikKKworICAgICAgICAgICAgZWxpZiBjb21tYW5kX25hbWUgPT0gImdldEFsbEtleXNXaXRoRmxhZ3MiOgorICAgICAgICAgICAgICAgIGR1bXAgPSB7fQorICAgICAgICAgICAgICAgIGZsYWdsaXN0ID0gY29tbWFuZEFycmF5WzFdCisgICAgICAgICAgICAgICAgZm9yIGsgaW4gc2VsZi5fc2MuX3ZhcmlhYmxlcy5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBrLnN0YXJ0c3dpdGgoIl9fIik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHNlbGYuX3NjLl92YXJpYWJsZXNba11bJ3YnXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBba10gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2JyA6IHYgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGlzdG9yeScgOiBzZWxmLl9zYy5fdmFyaWFibGVzW2tdWydoaXN0b3J5J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBkIGluIGZsYWdsaXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wW2tdW2RdID0gc2VsZi5fc2MuX3ZhcmlhYmxlc1trXVtkXQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludChlKQorICAgICAgICAgICAgICAgIHJldHVybiAoZHVtcCwgTm9uZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDb21tYW5kICVzIG5vdCBpbXBsZW1lbnRlZCIgJSBjb21tYW5kQXJyYXlbMF0pCisKKyAgICAgICAgZGVmIHRlcm1pbmF0ZVNlcnZlcihzZWxmKToKKyAgICAgICAgICAgICIiIiBkbyBub3QgZG8gYW55dGhpbmcgIiIiCisgICAgICAgICAgICBwYXNzCisKKworCisgICAgY2xhc3MgRXZlbnRSZWFkZXIoKToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNjKToKKyAgICAgICAgICAgIHNlbGYuX3NjID0gc2MKKyAgICAgICAgICAgIHNlbGYuZmlyc3RyYWlzZSA9IDAKKworICAgICAgICBkZWYgX2NyZWF0ZV9ldmVudChzZWxmLCBsaW5lKToKKyAgICAgICAgICAgIGRlZiBfaW1wb3J0X2NsYXNzKG5hbWUpOgorICAgICAgICAgICAgICAgIGFzc2VydCBsZW4obmFtZSkgPiAwCisgICAgICAgICAgICAgICAgYXNzZXJ0ICIuIiBpbiBuYW1lLCBuYW1lCisKKyAgICAgICAgICAgICAgICBjb21wb25lbnRzID0gbmFtZS5zdHJpcCgpLnNwbGl0KCIuIikKKyAgICAgICAgICAgICAgICBtb2R1bGVuYW1lID0gIi4iLmpvaW4oY29tcG9uZW50c1s6LTFdKQorICAgICAgICAgICAgICAgIG1vZHVsZWtsYXNzID0gY29tcG9uZW50c1stMV0KKworICAgICAgICAgICAgICAgIG1vZHVsZSA9IF9faW1wb3J0X18obW9kdWxlbmFtZSwgZnJvbWxpc3Q9W3N0cihtb2R1bGVrbGFzcyldKQorICAgICAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKG1vZHVsZSwgbW9kdWxla2xhc3MpCisKKyAgICAgICAgICAgICMgd2UgYnVpbGQgYSB0b2FzdGVyIGV2ZW50IG91dCBvZiBjdXJyZW50IGV2ZW50IGxvZyBsaW5lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZXZlbnRfZGF0YSA9IGpzb24ubG9hZHMobGluZS5zdHJpcCgpKQorICAgICAgICAgICAgICAgIGV2ZW50X2NsYXNzID0gX2ltcG9ydF9jbGFzcyhldmVudF9kYXRhWydjbGFzcyddKQorICAgICAgICAgICAgICAgIGV2ZW50X29iamVjdCA9IHBpY2tsZS5sb2Fkcyhqc29uLmxvYWRzKGV2ZW50X2RhdGFbJ3ZhcnMnXSkpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHByaW50KCJGYWlsZWQgbG9hZGluZyAiLCBsaW5lKQorICAgICAgICAgICAgICAgIHJhaXNlIGUKKworICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXZlbnRfb2JqZWN0LCBldmVudF9jbGFzcyk6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFcnJvciBsb2FkaW5nIG9iamVjdHMgJXMgY2xhc3MgJXMgIiwgZXZlbnRfb2JqZWN0LCBldmVudF9jbGFzcykKKworICAgICAgICAgICAgcmV0dXJuIGV2ZW50X29iamVjdAorCisgICAgICAgIGRlZiB3YWl0RXZlbnQoc2VsZiwgdGltZW91dCk6CisKKyAgICAgICAgICAgIG5leHRsaW5lID0gc2VsZi5fc2MuX2V2ZW50ZmlsZS5yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBsZW4obmV4dGxpbmUpID09IDA6CisgICAgICAgICAgICAgICAgIyB0aGUgYnVpbGQgZGF0YSBlbmRlZCwgd2hpbGUgdG9hc3RlcnVpIHN0aWxsIHdhaXRzIGZvciBldmVudHMuCisgICAgICAgICAgICAgICAgIyB0aGlzIGhhcHBlbnMgd2hlbiB0aGUgc2VydmVyIHdhcyBhYnJ1cHRseSBzdG9wcGVkLCBzbyB3ZSBzaW11bGF0ZSB0aGlzCisgICAgICAgICAgICAgICAgc2VsZi5maXJzdHJhaXNlICs9IDEKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmZpcnN0cmFpc2UgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3NjLmxpbmVubyArPSAxCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY3JlYXRlX2V2ZW50KG5leHRsaW5lKQorCisKKyAgICBkZWYgX3JlYWRWYXJpYWJsZXMoc2VsZiwgdmFyaWFibGVsaW5lKToKKyAgICAgICAgc2VsZi5fdmFyaWFibGVzID0ganNvbi5sb2Fkcyh2YXJpYWJsZWxpbmUuc3RyaXAoKSlbJ2FsbHZhcmlhYmxlcyddCisKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlX25hbWUpOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBGaWxlUmVhZEV2ZW50c1NlcnZlckNvbm5lY3Rpb24uTW9ja0Nvbm5lY3Rpb24oc2VsZikKKyAgICAgICAgc2VsZi5fZXZlbnRmaWxlID0gb3BlbihmaWxlX25hbWUsICJyIikKKworICAgICAgICAjIHdlIGV4cGVjdCB0byBoYXZlIHRoZSB2YXJpYWJsZSBkdW1wIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlsZQorICAgICAgICBzZWxmLmxpbmVubyA9IDEKKyAgICAgICAgc2VsZi5fcmVhZFZhcmlhYmxlcyhzZWxmLl9ldmVudGZpbGUucmVhZGxpbmUoKSkKKworICAgICAgICBzZWxmLmV2ZW50cyA9IEZpbGVSZWFkRXZlbnRzU2VydmVyQ29ubmVjdGlvbi5FdmVudFJlYWRlcihzZWxmKQorCisKKworCisKK2NsYXNzIE1vY2tDb25maWdQYXJhbWV0ZXJzKCk6CisgICAgIiIiIHN0YW5kLWluIGZvciBjb29rZXJkYXRhLkNvbmZpZ1BhcmFtZXRlcnM7IGFzIHdlIGRvbid0IHJlYWxseSBjb25maWcgYSBjb29rZXIsIHRoaXMKKyAgICAgICAgc2VydmVzIGp1c3QgdG8gc3VwcGx5IG5lZWRlZCBpbnRlcmZhY2VzIGZvciB0aGUgdG9hc3RlciB1aSB0byB3b3JrICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5vYnNlcnZlX29ubHkgPSBUcnVlICAgICAgICAgICAgIyB3ZSBjYW4gb25seSByZWFkIGZpbGVzCisKKworIyBydW4gdG9hc3RlciB1aSBvbiBvdXIgbW9jayBiaXRiYWtlIGNsYXNzCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIGlmIGxlbihzeXMuYXJndikgPCAyOgorICAgICAgICBwcmludCgiVXNhZ2U6ICVzIGV2ZW50LmxvZyAiICUgc3lzLmFyZ3ZbMF0pCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBmaWxlX25hbWUgPSBzeXMuYXJndlstMV0KKyAgICBtb2NrX2Nvbm5lY3Rpb24gPSBGaWxlUmVhZEV2ZW50c1NlcnZlckNvbm5lY3Rpb24oZmlsZV9uYW1lKQorICAgIGNvbmZpZ1BhcmFtcyA9IE1vY2tDb25maWdQYXJhbWV0ZXJzKCkKKworICAgICMgcnVuIHRoZSBtYWluIHByb2dyYW0gYW5kIHNldCBleGl0IGNvZGUgdG8gdGhlIHJldHVybmVkIHZhbHVlCisgICAgc3lzLmV4aXQodG9hc3RlcnVpLm1haW4obW9ja19jb25uZWN0aW9uLmNvbm5lY3Rpb24sIG1vY2tfY29ubmVjdGlvbi5ldmVudHMsIGNvbmZpZ1BhcmFtcykpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvY29udHJpYi9SRUFETUUgYi95b2N0by1wb2t5L2JpdGJha2UvY29udHJpYi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVlNTE1NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9jb250cmliL1JFQURNRQpAQCAtMCwwICsxIEBACitUaGlzIGRpcmVjdG9yeSBpcyBmb3IgYWRkaXRpb25hbCBjb250cmlidXRlZCBmaWxlcyB3aGljaCBtYXkgYmUgdXNlZnVsLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2NvbnRyaWIvYmJkZXYuc2ggYi95b2N0by1wb2t5L2JpdGJha2UvY29udHJpYi9iYmRldi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2E3ODUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2NvbnRyaWIvYmJkZXYuc2gKQEAgLTAsMCArMSwzMSBAQAorIyBUaGlzIGlzIGEgc2hlbGwgZnVuY3Rpb24gdG8gYmUgc291cmNlZCBpbnRvIHlvdXIgc2hlbGwgb3IgcGxhY2VkIGluIHlvdXIgLnByb2ZpbGUsCisjIHdoaWNoIG1ha2VzIHNldHRpbmcgdGhpbmdzIHVwIGZvciBCaXRCYWtlIGEgYml0IGVhc2llci4KKyMKKyMgVGhlIGF1dGhvciBkaXNjbGFpbXMgY29weXJpZ2h0IHRvIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYW5kIHBsYWNlcyBpdCBpbiB0aGUKKyMgcHVibGljIGRvbWFpbi4KKworYmJkZXYgKCkgeworCWxvY2FsIEJCRElSIFBLR0RJUiBCVUlMRERJUgorCWlmIHRlc3QgeCIkMSIgPSAieC0taGVscCI7IHRoZW4gZWNobyA+JjIgInN5bnRheDogYmJkZXYgW2JiZGlyIFtwa2dkaXIgW2J1aWxkZGlyXV1dIjsgcmV0dXJuIDE7IGZpCisJaWYgdGVzdCB4IiQxIiA9IHg7IHRoZW4gQkJESVI9YHB3ZGA7IGVsc2UgQkJESVI9JDE7IGZpCisJaWYgdGVzdCB4IiQyIiA9IHg7IHRoZW4gUEtHRElSPWBwd2RgOyBlbHNlIFBLR0RJUj0kMjsgZmkKKwlpZiB0ZXN0IHgiJDMiID0geDsgdGhlbiBCVUlMRERJUj1gcHdkYDsgZWxzZSBCVUlMRERJUj0kMzsgZmkKKworCUJCRElSPWByZWFkbGluayAtZiAkQkJESVJgCisJUEtHRElSPWByZWFkbGluayAtZiAkUEtHRElSYAorCUJVSUxERElSPWByZWFkbGluayAtZiAkQlVJTERESVJgCisJaWYgISAodGVzdCAtZCAkQkJESVIgJiYgdGVzdCAtZCAkUEtHRElSICYmIHRlc3QgLWQgJEJVSUxERElSKTsgdGhlbgorCQllY2hvID4mMiAic3ludGF4OiBiYmRldiBbYmJkaXIgW3BrZ2RpciBbYnVpbGRkaXJdXV0iCisJCXJldHVybiAxCisJZmkKKwkKKwlQQVRIPSRCQkRJUi9iaW46JFBBVEgKKwlCQlBBVEg9JEJCRElSCisJaWYgdGVzdCB4IiRCQkRJUiIgIT0geCIkUEtHRElSIjsgdGhlbgorCQlCQlBBVEg9JFBLR0RJUjokQkJQQVRICisJZmkKKwlpZiB0ZXN0IHgiJFBLR0RJUiIgIT0geCIkQlVJTERESVIiOyB0aGVuCisJCUJCUEFUSD0kQlVJTERESVI6JEJCUEFUSAorCWZpCisJZXhwb3J0IEJCUEFUSAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2NvbnRyaWIvZHVtcF9jYWNoZS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9jb250cmliL2R1bXBfY2FjaGUucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTFmMjMwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9jb250cmliL2R1bXBfY2FjaGUucHkKQEAgLTAsMCArMSw2OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisjCisjIFRoaXMgaXMgdXNlZCBmb3IgZHVtcGluZyB0aGUgYmJfY2FjaGUuZGF0LCB0aGUgb3V0cHV0IGZvcm1hdCBpczoKKyMgcmVjaXBlX3BhdGggUE4gUFYgUEFDS0FHRVMKKyMKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHdhcm5pbmdzCisKKyMgRm9yIGltcG9ydGluZyBiYi5jYWNoZQorc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguam9pbihvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKSksICcuLi9saWInKSkKK2Zyb20gYmIuY2FjaGUgaW1wb3J0IENvcmVSZWNpcGVJbmZvCisKK2ltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQorCitkZWYgbWFpbihhcmd2PU5vbmUpOgorICAgICIiIgorICAgIEdldCB0aGUgbWFwcGluZyBmb3IgdGhlIHRhcmdldCByZWNpcGUuCisgICAgIiIiCisgICAgaWYgbGVuKGFyZ3YpICE9IDE6CisgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgIkVycm9yLCBuZWVkIG9uZSBhcmd1bWVudCEiCisgICAgICAgIHJldHVybiAyCisKKyAgICBjYWNoZWZpbGUgPSBhcmd2WzBdCisKKyAgICB3aXRoIG9wZW4oY2FjaGVmaWxlLCAicmIiKSBhcyBjYWNoZWZpbGU6CisgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuVW5waWNrbGVyKGNhY2hlZmlsZSkKKyAgICAgICAgd2hpbGUgY2FjaGVmaWxlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGtleSA9IHBpY2tsZWQubG9hZCgpCisgICAgICAgICAgICAgICAgdmFsID0gcGlja2xlZC5sb2FkKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsLCBDb3JlUmVjaXBlSW5mbykgYW5kIChub3QgdmFsLnNraXBwZWQpOgorICAgICAgICAgICAgICAgIHBuID0gdmFsLnBuCisgICAgICAgICAgICAgICAgIyBGaWx0ZXIgb3V0IHRoZSBuYXRpdmUgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICBpZiBrZXkuc3RhcnRzd2l0aCgndmlydHVhbDpuYXRpdmU6Jykgb3IgcG4uZW5kc3dpdGgoIi1uYXRpdmUiKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICMgMS4wIGlzIHRoZSBkZWZhdWx0IHZlcnNpb24gZm9yIGEgbm8gUFYgcmVjaXBlLgorICAgICAgICAgICAgICAgIGlmIHZhbC5fX2RpY3RfXy5oYXNfa2V5KCJwdiIpOgorICAgICAgICAgICAgICAgICAgICBwdiA9IHZhbC5wdgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHB2ID0gIjEuMCIKKworICAgICAgICAgICAgICAgIHByaW50KCIlcyAlcyAlcyAlcyIgJSAoa2V5LCBwbiwgcHYsICcgJy5qb2luKHZhbC5wYWNrYWdlcykpKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3ZbMTpdKSkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2NvbnRyaWIvdmltL2Z0ZGV0ZWN0L2JpdGJha2UudmltIGIveW9jdG8tcG9reS9iaXRiYWtlL2NvbnRyaWIvdmltL2Z0ZGV0ZWN0L2JpdGJha2UudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMGY4YWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvY29udHJpYi92aW0vZnRkZXRlY3QvYml0YmFrZS52aW0KQEAgLTAsMCArMSwyNCBAQAorIiBWaW0gZmlsZXR5cGUgZGV0ZWN0aW9uIGZpbGUKKyIgTGFuZ3VhZ2U6ICAgICBCaXRCYWtlCisiIEF1dGhvcjogICAgICAgUmljYXJkbyBTYWx2ZXRpIDxyc2FsdmV0aUByc2FsdmV0aS5uZXQ+CisiIENvcHlyaWdodDogICAgQ29weXJpZ2h0IChDKSAyMDA4ICBSaWNhcmRvIFNhbHZldGkgPHJzYWx2ZXRpQHJzYWx2ZXRpLm5ldD4KKyIgTGljZW5jZTogICAgICBZb3UgbWF5IHJlZGlzdHJpYnV0ZSB0aGlzIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIFZpbSBpdHNlbGYKKyIKKyIgVGhpcyBzZXRzIHVwIHRoZSBzeW50YXggaGlnaGxpZ2h0aW5nIGZvciBCaXRCYWtlIGZpbGVzLCBsaWtlIC5iYiwgLmJiY2xhc3MgYW5kIC5pbmMKKworaWYgJmNvbXBhdGlibGUgfHwgdmVyc2lvbiA8IDYwMAorICAgIGZpbmlzaAorZW5kaWYKKworIiAuYmIsIC5iYmFwcGVuZCBhbmQgLmJiY2xhc3MKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLntiYixiYmFwcGVuZCxiYmNsYXNzfQlzZXQgZmlsZXR5cGU9Yml0YmFrZQorCisiIC5pbmMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmluYwkJc2V0IGZpbGV0eXBlPWJpdGJha2UKKworIiAuY29uZgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouY29uZgorICAgIFwgaWYgKG1hdGNoKGV4cGFuZCgiJTpwOmgiKSwgImNvbmYiKSA+IDApIHwKKyAgICBcICAgICBzZXQgZmlsZXR5cGU9Yml0YmFrZSB8CisgICAgXCBlbmRpZgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvY29udHJpYi92aW0vZnRwbHVnaW4vYml0YmFrZS52aW0gYi95b2N0by1wb2t5L2JpdGJha2UvY29udHJpYi92aW0vZnRwbHVnaW4vYml0YmFrZS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIwZDc1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9jb250cmliL3ZpbS9mdHBsdWdpbi9iaXRiYWtlLnZpbQpAQCAtMCwwICsxLDIgQEAKK3NldCBzdHM9NCBzdz00IGV0CitzZXQgY21zPSMlcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2NvbnRyaWIvdmltL3BsdWdpbi9uZXdiYi52aW0gYi95b2N0by1wb2t5L2JpdGJha2UvY29udHJpYi92aW0vcGx1Z2luL25ld2JiLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NzRlMzM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2NvbnRyaWIvdmltL3BsdWdpbi9uZXdiYi52aW0KQEAgLTAsMCArMSw4NCBAQAorIiBWaW0gcGx1Z2luIGZpbGUKKyIgUHVycG9zZToJQ3JlYXRlIGEgdGVtcGxhdGUgZm9yIG5ldyBiYiBmaWxlcworIiBBdXRob3I6CVJpY2FyZG8gU2FsdmV0aSA8cnNhbHZldGlAZ21haWwuY29tPgorIiBDb3B5cmlnaHQ6CUNvcHlyaWdodCAoQykgMjAwOCBSaWNhcmRvIFNhbHZldGkgPHJzYWx2ZXRpQGdtYWlsLmNvbT4KKyIKKyIgVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSwgc2VlIENPUFlJTkcuTUlUIGluCisiIHRoaXMgc291cmNlIGRpc3RyaWJ1dGlvbiBmb3IgdGhlIHRlcm1zLgorIgorIiBCYXNlZCBvbiB0aGUgZ2VudG9vLXN5bnRheCBwYWNrYWdlCisiCisiIFdpbGwgdHJ5IHRvIHVzZSBnaXQgdG8gZmluZCB0aGUgdXNlciBuYW1lIGFuZCBlbWFpbAorCitpZiAmY29tcGF0aWJsZSB8fCB2OnZlcnNpb24gPCA2MDAKKyAgICBmaW5pc2gKK2VuZGlmCisKK2Z1biEgPFNJRD5HZXRVc2VyTmFtZSgpCisgICAgbGV0IGw6dXNlcl9uYW1lID0gc3lzdGVtKCJnaXQgY29uZmlnIC0tZ2V0IHVzZXIubmFtZSIpCisgICAgaWYgdjpzaGVsbF9lcnJvcgorICAgICAgICByZXR1cm4gIlVua25vd24gVXNlciIKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBzdWJzdGl0dXRlKGw6dXNlcl9uYW1lLCAiXG4iLCAiIiwgIiIpCitlbmRmdW4KKworZnVuISA8U0lEPkdldFVzZXJFbWFpbCgpCisgICAgbGV0IGw6dXNlcl9lbWFpbCA9IHN5c3RlbSgiZ2l0IGNvbmZpZyAtLWdldCB1c2VyLmVtYWlsIikKKyAgICBpZiB2OnNoZWxsX2Vycm9yCisgICAgICAgIHJldHVybiAidW5rbm93QHVzZXIub3JnIgorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGUobDp1c2VyX2VtYWlsLCAiXG4iLCAiIiwgIiIpCitlbmRmdW4KKworZnVuISBCQkhlYWRlcigpCisgICAgbGV0IGw6Y3VycmVudF95ZWFyID0gc3RyZnRpbWUoIiVZIikKKyAgICBsZXQgbDp1c2VyX25hbWUgPSA8U0lEPkdldFVzZXJOYW1lKCkKKyAgICBsZXQgbDp1c2VyX2VtYWlsID0gPFNJRD5HZXRVc2VyRW1haWwoKQorICAgIDAgcHV0ID0nIyBDb3B5cmlnaHQgKEMpICcgLiBsOmN1cnJlbnRfeWVhciAuCisgICAgICAgICAgICAgICAgXCAnICcgLiBsOnVzZXJfbmFtZSAuICcgPCcgLiBsOnVzZXJfZW1haWwgLiAnPicKKyAgICBwdXQgPScjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUIGZvciB0aGUgdGVybXMpJworICAgICQKK2VuZGZ1bgorCitmdW4hIE5ld0JCVGVtcGxhdGUoKQorICAgIGxldCBsOnBhc3RlID0gJnBhc3RlCisgICAgc2V0IG5vcGFzdGUKKyAgICAKKyAgICAiIEdldCB0aGUgaGVhZGVyCisgICAgY2FsbCBCQkhlYWRlcigpCisKKyAgICAiIE5ldyB0aGUgYmIgdGVtcGxhdGUKKyAgICBwdXQgPSdERVNDUklQVElPTiA9IFwiXCInCisgICAgcHV0ID0nSE9NRVBBR0UgPSBcIlwiJworICAgIHB1dCA9J0xJQ0VOU0UgPSBcIlwiJyAKKyAgICBwdXQgPSdTRUNUSU9OID0gXCJcIicKKyAgICBwdXQgPSdERVBFTkRTID0gXCJcIicKKyAgICBwdXQgPScnCisgICAgcHV0ID0nU1JDX1VSSSA9IFwiXCInCisKKyAgICAiIEdvIHRvIHRoZSBmaXJzdCBwbGFjZSB0byBlZGl0CisgICAgMAorICAgIC9eREVTQ1JJUFRJT04gPS8KKyAgICBleGVjICJub3JtYWwgMmZcIiIKKworICAgIGlmIHBhc3RlID09IDEKKyAgICAgICAgc2V0IHBhc3RlCisgICAgZW5kaWYKK2VuZGZ1bgorCitpZiAhZXhpc3RzKCJnOmJiX2NyZWF0ZV9vbl9lbXB0eSIpCisgICAgbGV0IGc6YmJfY3JlYXRlX29uX2VtcHR5ID0gMQorZW5kaWYKKworIiBkaXNhYmxlIGluIGNhc2Ugb2YgdmltZGlmZgoraWYgdjpwcm9nbmFtZSA9fiAidmltZGlmZiIKKyAgICBsZXQgZzpiYl9jcmVhdGVfb25fZW1wdHkgPSAwCitlbmRpZgorCithdWdyb3VwIE5ld0JCCisgICAgYXUgQnVmTmV3RmlsZSAqLmJiCisgICAgICAgICAgICAgICAgXCBpZiBnOmJiX2NyZWF0ZV9vbl9lbXB0eSB8CisgICAgICAgICAgICAgICAgXCAgICBjYWxsIE5ld0JCVGVtcGxhdGUoKSB8CisgICAgICAgICAgICAgICAgXCBlbmRpZgorYXVncm91cCBFTkQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2NvbnRyaWIvdmltL3N5bnRheC9iaXRiYWtlLnZpbSBiL3lvY3RvLXBva3kvYml0YmFrZS9jb250cmliL3ZpbS9zeW50YXgvYml0YmFrZS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI1NWY5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9jb250cmliL3ZpbS9zeW50YXgvYml0YmFrZS52aW0KQEAgLTAsMCArMSwxMjYgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOiAgICAgQml0QmFrZSBiYi9iYmNsYXNzZXMvaW5jCisiIEF1dGhvcjogICAgICAgQ2hyaXMgTGFyc29uIDxrZXJnb3RoQGhhbmRoZWxkcy5vcmc+CisiICAgICAgICAgICAgICAgUmljYXJkbyBTYWx2ZXRpIDxyc2FsdmV0aUByc2FsdmV0aS5uZXQ+CisiIENvcHlyaWdodDogICAgQ29weXJpZ2h0IChDKSAyMDA0ICBDaHJpcyBMYXJzb24gPGtlcmdvdGhAaGFuZGhlbGRzLm9yZz4KKyIgICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDggIFJpY2FyZG8gU2FsdmV0aSA8cnNhbHZldGlAcnNhbHZldGkubmV0PgorIgorIiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLCBzZWUgQ09QWUlORy5NSVQgaW4KKyIgdGhpcyBzb3VyY2UgZGlzdHJpYnV0aW9uIGZvciB0aGUgdGVybXMuCisiCisiIFN5bnRheCBoaWdobGlnaHRpbmcgZm9yIGJiLCBiYmNsYXNzZXMgYW5kIGluYyBmaWxlcy4KKyIKKyIgSXQncyBhbiBlbnRpcmVseSBuZXcgdHlwZSwganVzdCBoYXMgc3BlY2lmaWMgc3ludGF4IGluIHNoZWxsIGFuZCBweXRob24gY29kZQorCitpZiAmY29tcGF0aWJsZSB8fCB2OnZlcnNpb24gPCA2MDAKKyAgICBmaW5pc2gKK2VuZGlmCitpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICAgIGZpbmlzaAorZW5kaWYKKworc3luIGluY2x1ZGUgQHB5dGhvbiBzeW50YXgvcHl0aG9uLnZpbQoraWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgdW5sZXQgYjpjdXJyZW50X3N5bnRheAorZW5kaWYKKworIiBCaXRCYWtlIHN5bnRheAorCisiIE1hdGNoaW5nIGNhc2UKK3N5biBjYXNlIG1hdGNoCisKKyIgSW5kaWNhdGVzIHRoZSBlcnJvciB3aGVuIG5vdGhpbmcgaXMgbWF0Y2hlZAorc3luIG1hdGNoIGJiVW5tYXRjaGVkICAgICAgICAgICAiLiIKKworIiBDb21tZW50cworc3luIGNsdXN0ZXIgYmJDb21tZW50R3JvdXAgICAgICBjb250YWlucz1iYlRvZG8sQFNwZWxsCitzeW4ga2V5d29yZCBiYlRvZG8gICAgICAgICAgICAgIENPTUJBSyBGSVhNRSBUT0RPIFhYWCBjb250YWluZWQKK3N5biBtYXRjaCBiYkNvbW1lbnQgICAgICAgICAgICAgIiMuKiQiIGNvbnRhaW5zPUBiYkNvbW1lbnRHcm91cAorCisiIFN0cmluZyBoZWxwZXJzCitzeW4gbWF0Y2ggYmJRdW90ZSAgICAgICAgICAgICAgICtbJyJdKyBjb250YWluZWQgCitzeW4gbWF0Y2ggYmJEZWxpbWl0ZXIgICAgICAgICAgICJbKCl7fT1dIiBjb250YWluZWQKK3N5biBtYXRjaCBiYkFycmF5QnJhY2tldHMgICAgICAgIltcW1xdXSIgY29udGFpbmVkCisKKyIgQml0QmFrZSBzdHJpbmdzCitzeW4gbWF0Y2ggYmJDb250aW51ZSAgICAgICAgICAgICJcXCQiCitzeW4gcmVnaW9uIGJiU3RyaW5nICAgICAgICAgICAgIG1hdGNoZ3JvdXA9YmJRdW90ZSBzdGFydD0rIisgc2tpcD0rXFwkKyBlbmQ9KyIrIGNvbnRhaW5lZCBjb250YWlucz1iYlRvZG8sYmJDb250aW51ZSxiYlZhckRlcmVmLGJiVmFyUHlWYWx1ZSxAU3BlbGwKK3N5biByZWdpb24gYmJTdHJpbmcgICAgICAgICAgICAgbWF0Y2hncm91cD1iYlF1b3RlIHN0YXJ0PSsnKyBza2lwPStcXCQrIGVuZD0rJysgY29udGFpbmVkIGNvbnRhaW5zPWJiVG9kbyxiYkNvbnRpbnVlLGJiVmFyRGVyZWYsYmJWYXJQeVZhbHVlLEBTcGVsbAorCisiIFZhcnMgZGVmaW5pdGlvbgorc3luIG1hdGNoIGJiRXhwb3J0ICAgICAgICAgICAgIl5leHBvcnQiIG5leHRncm91cD1iYklkZW50aWZpZXIgc2tpcHdoaXRlCitzeW4ga2V5d29yZCBiYkV4cG9ydEZsYWcgICAgICAgIGV4cG9ydCBjb250YWluZWQgbmV4dGdyb3VwPWJiSWRlbnRpZmllciBza2lwd2hpdGUKK3N5biBtYXRjaCBiYklkZW50aWZpZXIgICAgICAgICAgIlthLXpBLVowLTlcLV9cLlwvXCtdXCsiIGRpc3BsYXkgY29udGFpbmVkCitzeW4gbWF0Y2ggYmJWYXJEZXJlZiAgICAgICAgICAgICIke1thLXpBLVowLTlcLV9cLlwvXCtdXCt9IiBjb250YWluZWQKK3N5biBtYXRjaCBiYlZhckVxICAgICAgICAgICAgICAgIlwoOj1cfCs9XHw9K1x8XC49XHw9XC5cfD89XHw/Pz1cfD1cKSIgY29udGFpbmVkIG5leHRncm91cD1iYlZhclZhbHVlCitzeW4gbWF0Y2ggYmJWYXJEZWYgICAgICAgICAgICAgICJeXChleHBvcnRccypcKVw/XChbYS16QS1aMC05XC1fXC5cL1wrXVwrXChfWyR7fWEtekEtWjAtOVwtX1wuXC9cK11cK1wpXD9cKVxzKlwoOj1cfCs9XHw9K1x8XC49XHw9XC5cfD89XHw/Pz1cfD1cKVxAPSIgY29udGFpbnM9YmJFeHBvcnRGbGFnLGJiSWRlbnRpZmllcixiYlZhckRlcmVmIG5leHRncm91cD1iYlZhckVxCitzeW4gbWF0Y2ggYmJWYXJWYWx1ZSAgICAgICAgICAgICIuKiQiIGNvbnRhaW5lZCBjb250YWlucz1iYlN0cmluZyxiYlZhckRlcmVmLGJiVmFyUHlWYWx1ZQorc3luIHJlZ2lvbiBiYlZhclB5VmFsdWUgICAgICAgICBzdGFydD0rJHtAKyBza2lwPStcXCQrIGVuZD0rfSsgY29udGFpbmVkIGNvbnRhaW5zPUBweXRob24KKworIiBWYXJzIG1ldGFkYXRhIGZsYWdzCitzeW4gbWF0Y2ggYmJWYXJGbGFnRGVmICAgICAgICAgICJeXChbYS16QS1aMC05XC1fXC5dXCtcKVwoXFtbYS16QS1aMC05XC1fXC5dXCtcXVwpXEA9IiBjb250YWlucz1iYklkZW50aWZpZXIgbmV4dGdyb3VwPWJiVmFyRmxhZ0ZsYWcKK3N5biByZWdpb24gYmJWYXJGbGFnRmxhZyAgICAgICAgbWF0Y2hncm91cD1iYkFycmF5QnJhY2tldHMgc3RhcnQ9IlxbIiBlbmQ9IlxdXHMqXCg9XHwrPVx8PStcfD89XClcQD0iIGNvbnRhaW5lZCBjb250YWlucz1iYklkZW50aWZpZXIgbmV4dGdyb3VwPWJiVmFyRXEKKworIiBJbmNsdWRlcyBhbmQgcmVxdWlyZXMKK3N5biBrZXl3b3JkIGJiSW5jbHVkZSAgICAgICAgICAgaW5oZXJpdCBpbmNsdWRlIHJlcXVpcmUgY29udGFpbmVkIAorc3luIG1hdGNoIGJiSW5jbHVkZVJlc3QgICAgICAgICAiLiokIiBjb250YWluZWQgY29udGFpbnM9YmJTdHJpbmcsYmJWYXJEZXJlZgorc3luIG1hdGNoIGJiSW5jbHVkZUxpbmUgICAgICAgICAiXlwoaW5oZXJpdFx8aW5jbHVkZVx8cmVxdWlyZVwpXHNcKyIgY29udGFpbnM9YmJJbmNsdWRlIG5leHRncm91cD1iYkluY2x1ZGVSZXN0CisKKyIgQWRkIHRha3MgYW5kIHNpbWlsYXIKK3N5biBrZXl3b3JkIGJiU3RhdGVtZW50ICAgICAgICAgYWRkdGFzayBhZGRoYW5kbGVyIGFmdGVyIGJlZm9yZSBFWFBPUlRfRlVOQ1RJT05TIGNvbnRhaW5lZAorc3luIG1hdGNoIGJiU3RhdGVtZW50UmVzdCAgICAgICAiLiokIiBza2lwd2hpdGUgY29udGFpbmVkIGNvbnRhaW5zPWJiU3RhdGVtZW50CitzeW4gbWF0Y2ggYmJTdGF0ZW1lbnRMaW5lICAgICAgICJeXChhZGR0YXNrXHxhZGRoYW5kbGVyXHxhZnRlclx8YmVmb3JlXHxFWFBPUlRfRlVOQ1RJT05TXClcc1wrIiBjb250YWlucz1iYlN0YXRlbWVudCBuZXh0Z3JvdXA9YmJTdGF0ZW1lbnRSZXN0CisKKyIgT0UgSW1wb3J0YW50IEZ1bmN0aW9ucworc3luIGtleXdvcmQgYmJPRUZ1bmN0aW9ucyAgICAgICBkb19mZXRjaCBkb191bnBhY2sgZG9fcGF0Y2ggZG9fY29uZmlndXJlIGRvX2NvbXBpbGUgZG9fc3RhZ2UgZG9faW5zdGFsbCBkb19wYWNrYWdlIGNvbnRhaW5lZAorCisiIEdlbmVyaWMgRnVuY3Rpb25zCitzeW4gbWF0Y2ggYmJGdW5jdGlvbiAgICAgICAgICAgICJcaFswLTlBLVphLXpfLV0qIiBkaXNwbGF5IGNvbnRhaW5lZCBjb250YWlucz1iYk9FRnVuY3Rpb25zCisKKyIgQml0QmFrZSBzaGVsbCBtZXRhZGF0YQorc3luIGluY2x1ZGUgQHNoZWxsIHN5bnRheC9zaC52aW0KK2lmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIHVubGV0IGI6Y3VycmVudF9zeW50YXgKK2VuZGlmCitzeW4ga2V5d29yZCBiYlNoRmFrZVJvb3RGbGFnICAgIGZha2Vyb290IGNvbnRhaW5lZAorc3luIG1hdGNoIGJiU2hGdW5jRGVmICAgICAgICAgICAiXlwoZmFrZXJvb3RccypcKVw/XChbMC05QS1aYS16XyR7fS1dXCtcKVwocHl0aG9uXClcQDwhXChccyooKVxzKlwpXCh7XClcQD0iIGNvbnRhaW5zPWJiU2hGYWtlUm9vdEZsYWcsYmJGdW5jdGlvbixiYlZhckRlcmVmLGJiRGVsaW1pdGVyIG5leHRncm91cD1iYlNoRnVuY1JlZ2lvbiBza2lwd2hpdGUKK3N5biByZWdpb24gYmJTaEZ1bmNSZWdpb24gICAgICAgbWF0Y2hncm91cD1iYkRlbGltaXRlciBzdGFydD0ie1xzKiQiIGVuZD0iXn1ccyokIiBjb250YWluZWQgY29udGFpbnM9QHNoZWxsCisKKyIgUHl0aG9uIHZhbHVlIGluc2lkZSBzaGVsbCBmdW5jdGlvbnMKK3N5biByZWdpb24gc2hEZXJlZiAgICAgICAgIHN0YXJ0PSske0ArIHNraXA9K1xcJCsgZXhjbHVkZW5sIGVuZD0rfSsgY29udGFpbmVkIGNvbnRhaW5zPUBweXRob24KKworIiBCaXRCYWtlIHB5dGhvbiBtZXRhZGF0YQorc3luIGtleXdvcmQgYmJQeUZsYWcgICAgICAgICAgICBweXRob24gY29udGFpbmVkCitzeW4gbWF0Y2ggYmJQeUZ1bmNEZWYgICAgICAgICAgICJeXChweXRob25cc1wrXClcKFswLTlBLVphLXpfJHt9LV1cK1wpXD9cKFxzKigpXHMqXClcKHtcKVxAPSIgY29udGFpbnM9YmJQeUZsYWcsYmJGdW5jdGlvbixiYlZhckRlcmVmLGJiRGVsaW1pdGVyIG5leHRncm91cD1iYlB5RnVuY1JlZ2lvbiBza2lwd2hpdGUKK3N5biByZWdpb24gYmJQeUZ1bmNSZWdpb24gICAgICAgbWF0Y2hncm91cD1iYkRlbGltaXRlciBzdGFydD0ie1xzKiQiIGVuZD0iXn1ccyokIiBjb250YWluZWQgY29udGFpbnM9QHB5dGhvbgorCisiIEJpdEJha2UgJ2RlZidkIHB5dGhvbiBmdW5jdGlvbnMKK3N5biBrZXl3b3JkIGJiUHlEZWYgICAgICAgICAgICAgZGVmIGNvbnRhaW5lZAorc3luIHJlZ2lvbiBiYlB5RGVmUmVnaW9uICAgICAgICBzdGFydD0nXlwoZGVmXHNcK1wpXChbMC05QS1aYS16Xy1dXCtcKVwoXHMqKC4qKVxzKlwpOlxzKiQnIGVuZD0nXlwoXHNcfCRcKVxAIScgY29udGFpbnM9QHB5dGhvbgorCisiIEhpZ2hsaWdodGluZyBEZWZpbml0aW9ucworaGkgZGVmIGxpbmsgYmJVbm1hdGNoZWQgICAgICAgICBFcnJvcgoraGkgZGVmIGxpbmsgYmJJbmNsdWRlICAgICAgICAgICBJbmNsdWRlCitoaSBkZWYgbGluayBiYlRvZG8gICAgICAgICAgICAgIFRvZG8KK2hpIGRlZiBsaW5rIGJiQ29tbWVudCAgICAgICAgICAgQ29tbWVudAoraGkgZGVmIGxpbmsgYmJRdW90ZSAgICAgICAgICAgICBTdHJpbmcKK2hpIGRlZiBsaW5rIGJiU3RyaW5nICAgICAgICAgICAgU3RyaW5nCitoaSBkZWYgbGluayBiYkRlbGltaXRlciAgICAgICAgIEtleXdvcmQKK2hpIGRlZiBsaW5rIGJiQXJyYXlCcmFja2V0cyAgICAgU3RhdGVtZW50CitoaSBkZWYgbGluayBiYkNvbnRpbnVlICAgICAgICAgIFNwZWNpYWwKK2hpIGRlZiBsaW5rIGJiRXhwb3J0ICAgICAgICAgICAgVHlwZQoraGkgZGVmIGxpbmsgYmJFeHBvcnRGbGFnICAgICAgICBUeXBlCitoaSBkZWYgbGluayBiYklkZW50aWZpZXIJICAgIElkZW50aWZpZXIKK2hpIGRlZiBsaW5rIGJiVmFyRGVyZWYgICAgICAgICAgUHJlUHJvYworaGkgZGVmIGxpbmsgYmJWYXJEZWYgICAgICAgICAgICBJZGVudGlmaWVyCitoaSBkZWYgbGluayBiYlZhclZhbHVlICAgICAgICAgIFN0cmluZworaGkgZGVmIGxpbmsgYmJTaEZha2VSb290RmxhZyAgICBUeXBlCitoaSBkZWYgbGluayBiYkZ1bmN0aW9uICAgICAgICAgIEZ1bmN0aW9uCitoaSBkZWYgbGluayBiYlB5RmxhZyAgICAgICAgICAgIFR5cGUKK2hpIGRlZiBsaW5rIGJiUHlEZWYgICAgICAgICAgICAgU3RhdGVtZW50CitoaSBkZWYgbGluayBiYlN0YXRlbWVudCAgICAgICAgIFN0YXRlbWVudAoraGkgZGVmIGxpbmsgYmJTdGF0ZW1lbnRSZXN0ICAgICBJZGVudGlmaWVyCitoaSBkZWYgbGluayBiYk9FRnVuY3Rpb25zICAgICAgIFNwZWNpYWwKK2hpIGRlZiBsaW5rIGJiVmFyUHlWYWx1ZSAgICAgICAgUHJlUHJvYworCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJiYiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvQ09QWUlORy5HUEwgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL0NPUFlJTkcuR1BMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MTE5MDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL0NPUFlJTkcuR1BMCkBAIC0wLDAgKzEsMzM5IEBACisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvQ09QWUlORy5NSVQgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL0NPUFlJTkcuTUlUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlN2Q1NzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL0NPUFlJTkcuTUlUCkBAIC0wLDAgKzEsMTcgQEAKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAorY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKK1NIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAorREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCitPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IKK1RIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9NYWtlZmlsZSBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MyOGY0YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvTWFrZWZpbGUKQEAgLTAsMCArMSw5MSBAQAorIyBUaGlzIGlzIGEgc2luZ2xlIE1ha2VmaWxlIHRvIGhhbmRsZSBhbGwgZ2VuZXJhdGVkIEJpdEJha2UgZG9jdW1lbnRzLgorIyBUaGUgTWFrZWZpbGUgbmVlZHMgdG8gbGl2ZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkgYW5kIGFsbCBmaWd1cmVzIHVzZWQKKyMgaW4gYW55IG1hbnVhbHMgbXVzdCBiZSAuUE5HIGZpbGVzIGFuZCBsaXZlIGluIHRoZSBpbmRpdmlkdWFsIGJvb2sncyBmaWd1cmVzCisjIGRpcmVjdG9yeS4KKyMKKyMgVGhlIE1ha2VmaWxlIGhhcyB0aGVzZSB0YXJnZXRzOgorIworIyAgICBwZGY6ICAgICAgZ2VuZXJhdGVzIGEgUERGIHZlcnNpb24gb2YgYSBtYW51YWwuCisjICAgIGh0bWw6ICAgICBnZW5lcmF0ZXMgYW4gSFRNTCB2ZXJzaW9uIG9mIGEgbWFudWFsLgorIyAgICB0YXJiYWxsOiAgY3JlYXRlcyBhIHRhcmJhbGwgZm9yIHRoZSBkb2MgZmlsZXMuCisjICAgIHZhbGlkYXRlOiB2YWxpZGF0ZXMKKyMgICAgY2xlYW46ICAgIHJlbW92ZXMgZmlsZXMKKyMKKyMgVGhlIE1ha2VmaWxlIGdlbmVyYXRlcyBhbiBIVE1MIHZlcnNpb24gb2YgZXZlcnkgZG9jdW1lbnQuICBUaGUKKyMgdmFyaWFibGUgRE9DIGluZGljYXRlcyB0aGUgZm9sZGVyIG5hbWUgZm9yIGEgZ2l2ZW4gbWFudWFsLgorIworIyBUbyBidWlsZCBhIG1hbnVhbCwgeW91IG11c3QgaW52b2tlICdtYWtlJyB3aXRoIHRoZSBET0MgYXJndW1lbnQuCisjCisjIEV4YW1wbGVzOgorIworIyAgICAgbWFrZSBET0M9Yml0YmFrZS11c2VyLW1hbnVhbAorIyAgICAgbWFrZSBwZGYgRE9DPWJpdGJha2UtdXNlci1tYW51YWwKKyMKKyMgVGhlIGZpcnN0IGV4YW1wbGUgZ2VuZXJhdGVzIHRoZSBIVE1MIHZlcnNpb24gb2YgdGhlIFVzZXIgTWFudWFsLgorIyBUaGUgc2Vjb25kIGV4YW1wbGUgZ2VuZXJhdGVzIHRoZSBQREYgdmVyc2lvbiBvZiB0aGUgVXNlciBNYW51YWwuCisjCisKK2lmZXEgKCQoRE9DKSxiaXRiYWtlLXVzZXItbWFudWFsKQorWFNMVE9QVFMgPSAtLXN0cmluZ3BhcmFtIGh0bWwuc3R5bGVzaGVldCBiaXRiYWtlLXVzZXItbWFudWFsLXN0eWxlLmNzcyBcCisgICAgICAgICAgIC0tc3RyaW5ncGFyYW0gIGNoYXB0ZXIuYXV0b2xhYmVsIDEgXAorICAgICAgICAgICAtLXN0cmluZ3BhcmFtICBzZWN0aW9uLmF1dG9sYWJlbCAxIFwKKyAgICAgICAgICAgLS1zdHJpbmdwYXJhbSAgc2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwgMSBcCisgICAgICAgICAgIC0teGluY2x1ZGUKK0FMTFBSRVEgPSBodG1sIHRhcmJhbGwKK1RBUkZJTEVTID0gYml0YmFrZS11c2VyLW1hbnVhbC1zdHlsZS5jc3MgYml0YmFrZS11c2VyLW1hbnVhbC5odG1sIGZpZ3VyZXMvYml0YmFrZS10aXRsZS5wbmcKK01BTlVBTFMgPSAkKERPQykvJChET0MpLmh0bWwKK0ZJR1VSRVMgPSBmaWd1cmVzCitTVFlMRVNIRUVUID0gJChET0MpLyouY3NzCisKK2VuZGlmCisKKyMjCisjIFRoZXNlIFVSSSBzaG91bGQgYmUgcmV3cml0dGVuIGJ5IHlvdXIgZGlzdHJpYnV0aW9uJ3MgeG1sIGNhdGFsb2cgdG8KKyMgbWF0Y2ggeW91ciBsb2NhbHkgaW5zdGFsbGVkIFhTTCBzdHlsZXNoZWV0cy4KK1hTTF9CQVNFX1VSSSAgPSBodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvY3VycmVudAorWFNMX1hIVE1MX1VSSSA9ICQoWFNMX0JBU0VfVVJJKS94aHRtbC9kb2Nib29rLnhzbAorCithbGw6ICQoQUxMUFJFUSkKKworcGRmOgoraWZlcSAoJChET0MpLGJpdGJha2UtdXNlci1tYW51YWwpCisJQGVjaG8gIiAiCisJQGVjaG8gIioqKioqKioqKiogQnVpbGRpbmcuIiQoRE9DKQorCUBlY2hvICIgIgorCWNkICQoRE9DKTsgLi4vdG9vbHMvZG9jYm9vay10by1wZGYgJChET0MpLnhtbCAuLi90ZW1wbGF0ZTsgY2QgLi4KK2VuZGlmCisKK2h0bWw6CitpZmVxICgkKERPQyksYml0YmFrZS11c2VyLW1hbnVhbCkKKyMgICAgICAgU2VlIGh0dHA6Ly93d3cuc2FnZWhpbGwubmV0L2RvY2Jvb2t4c2wvSHRtbE91dHB1dC5odG1sCisJQGVjaG8gIiAiCisJQGVjaG8gIioqKioqKioqIEJ1aWxkaW5nICIkKERPQykKKwlAZWNobyAiICIKKwljZCAkKERPQyk7IHhzbHRwcm9jICQoWFNMVE9QVFMpIC1vICQoRE9DKS5odG1sICQoRE9DKS1jdXN0b21pemF0aW9uLnhzbCAkKERPQykueG1sOyBjZCAuLgorZW5kaWYKKwordGFyYmFsbDogaHRtbAorCUBlY2hvICIgIgorCUBlY2hvICIqKioqKioqKiBDcmVhdGluZyBUYXJiYWxsIG9mIGRvY3VtZW50IGZpbGVzIgorCUBlY2hvICIgIgorCWNkICQoRE9DKTsgdGFyIC1jdnpmICQoRE9DKS50Z3ogJChUQVJGSUxFUyk7IGNkIC4uCisKK3ZhbGlkYXRlOgorCWNkICQoRE9DKTsgeG1sbGludCAtLXBvc3R2YWxpZCAtLXhpbmNsdWRlIC0tbm9vdXQgJChET0MpLnhtbDsgY2QgLi4KKworcHVibGlzaDoKKwlAaWYgdGVzdCAtZiAkKERPQykvJChET0MpLmh0bWw7IFwKKwkgIHRoZW4gXAorICAgICAgICAgICAgZWNobyAiICI7IFwKKyAgICAgICAgICAgIGVjaG8gIioqKioqKioqIFB1Ymxpc2hpbmcgIiQoRE9DKSIuaHRtbCI7IFwKKyAgICAgICAgICAgIGVjaG8gIiAiOyBcCisgICAgICAgICAgICBzY3AgLXIgJChNQU5VQUxTKSAkKFNUWUxFU0hFRVQpIGRvY3MueXA6L3Zhci93d3cvd3d3LnlvY3RvcHJvamVjdC5vcmctZG9jcy8kKFZFUikvJChET0MpOyBcCisgICAgICAgICAgICBjZCAkKERPQyk7IHNjcCAtciAkKEZJR1VSRVMpIGRvY3MueXA6L3Zhci93d3cvd3d3LnlvY3RvcHJvamVjdC5vcmctZG9jcy8kKFZFUikvJChET0MpOyBcCisJZWxzZSBcCisgICAgICAgICAgZWNobyAiICI7IFwKKyAgICAgICAgICBlY2hvICQoRE9DKSIuaHRtbCBtaXNzaW5nLiAgR2VuZXJhdGUgdGhlIGZpbGUgZmlyc3QgdGhlbiB0cnkgYWdhaW4uIjsgXAorICAgICAgICAgIGVjaG8gIiAiOyBcCisJZmkKKworY2xlYW46CisJcm0gLXJmICQoTUFOVUFMUyk7IHJtICQoRE9DKS8kKERPQykudGd6OwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9SRUFETUUgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDNjZjhlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9SRUFETUUKQEAgLTAsMCArMSwzOSBAQAorRG9jdW1lbnRhdGlvbgorPT09PT09PT09PT09PQorCitUaGlzIGlzIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0aGUgQml0QmFrZSBkb2N1bWVudGF0aW9uLiAKKworTWFudWFsIE9yZ2FuaXphdGlvbgorPT09PT09PT09PT09PT09PT09PQorCitGb2xkZXJzIGV4aXN0IGZvciBpbmRpdmlkdWFsIG1hbnVhbHMgYXMgZm9sbG93czoKKworKiBiaXRiYWtlLXVzZXItbWFudWFsICAgICAgLSBUaGUgQml0QmFrZSBVc2VyIE1hbnVhbCAKKworRWFjaCBmb2xkZXIgaXMgc2VsZi1jb250YWluZWQgcmVnYXJkaW5nIGNvbnRlbnQgYW5kIGZpZ3VyZXMuCisKK0lmIHlvdSB3YW50IHRvIGZpbmQgSFRNTCB2ZXJzaW9ucyBvZiB0aGUgQml0QmFrZSBtYW51YWxzIG9uIHRoZSB3ZWIsIAorZ28gdG8gaHR0cDovL3d3dy5vcGVuZW1iZWRkZWQub3JnL3dpa2kvRG9jdW1lbnRhdGlvbi4gCisKK01ha2VmaWxlCis9PT09PT09PQorCitUaGUgTWFrZWZpbGUgcHJvY2Vzc2VzIG1hbnVhbCBkaXJlY3RvcmllcyB0byBjcmVhdGUgSFRNTCwgUERGLAordGFyYmFsbHMsIGV0Yy4gIERldGFpbHMgb24gaG93IHRoZSBNYWtlZmlsZSB3b3JrIGFyZSBkb2N1bWVudGVkCitpbnNpZGUgdGhlIE1ha2VmaWxlLiAgU2VlIHRoYXQgZmlsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworVG8gYnVpbGQgYSBtYW51YWwsIHlvdSBydW4gdGhlIG1ha2UgY29tbWFuZCBhbmQgcGFzcyBpdCB0aGUgbmFtZQorb2YgdGhlIGZvbGRlciBjb250YWluaW5nIHRoZSBtYW51YWwncyBjb250ZW50cy4gCitGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21tYW5kIHJ1biBmcm9tIHRoZSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeSAKK2NyZWF0ZXMgYW4gSFRNTCBhbmQgYSBQREYgdmVyc2lvbiBvZiB0aGUgQml0QmFrZSBVc2VyIE1hbnVhbC4KK1RoZSBET0MgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBtYW51YWwgeW91IGFyZSBtYWtpbmc6CisKKyAgICAgJCBtYWtlIERPQz1iaXRiYWtlLXVzZXItbWFudWFsCisKK3RlbXBsYXRlCis9PT09PT09PQorQ29udGFpbnMgdmFyaW91cyB0ZW1wbGF0ZXMsIGZvbnRzLCBhbmQgc29tZSBvbGQgUE5HIGZpbGVzLgorCit0b29scworPT09PT0KK0NvbnRhaW5zIGEgdG9vbCB0byBjb252ZXJ0IHRoZSBEb2NCb29rIGZpbGVzIHRvIFBERiBmb3JtYXQuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbCBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ODVlYTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDI5IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiIHZlcnNpb249IjEuMCI+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9kb2Nib29rLW1pcnJvci9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKzwhLS0KKworICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9wZXJtYWxpbmtzLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvc2VjdGlvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZ2xvc3MtcGVybWFsaW5rcy54c2wiLz4KKworICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSIndXNlci1tYW51YWwtc3R5bGUuY3NzJyIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaGFwdGVyLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJhcHBlbmRpeC5hdXRvbGFiZWwiPkE8L3hzbDpwYXJhbT4KKworPCEtLSAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS50b2MiIHNlbGVjdD0iJ2FydGljbGUgbm9wJyI+PC94c2w6cGFyYW0+ICAtLT4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWV4ZWN1dGlvbi54bWwgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1leGVjdXRpb24ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNTJlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1leGVjdXRpb24ueG1sCkBAIC0wLDAgKzEsOTEyIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIj4KKworPGNoYXB0ZXIgaWQ9ImJpdGJha2UtdXNlci1tYW51YWwtZXhlY3V0aW9uIj4KKyAgICA8dGl0bGU+RXhlY3V0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgcHJpbWFyeSBwdXJwb3NlIGZvciBydW5uaW5nIEJpdEJha2UgaXMgdG8gcHJvZHVjZSBzb21lIGtpbmQKKyAgICAgICAgb2Ygb3V0cHV0IHN1Y2ggYXMgYSBzaW5nbGUgaW5zdGFsbGFibGUgcGFja2FnZSwgYSBrZXJuZWwsIGEgc29mdHdhcmUKKyAgICAgICAgZGV2ZWxvcG1lbnQga2l0LCBvciBldmVuIGEgZnVsbCwgYm9hcmQtc3BlY2lmaWMgYm9vdGFibGUgTGludXggaW1hZ2UsCisgICAgICAgIGNvbXBsZXRlIHdpdGggYm9vdGxvYWRlciwga2VybmVsLCBhbmQgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICBPZiBjb3Vyc2UsIHlvdSBjYW4gZXhlY3V0ZSB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPgorICAgICAgICBjb21tYW5kIHdpdGggb3B0aW9ucyB0aGF0IGNhdXNlIGl0IHRvIGV4ZWN1dGUgc2luZ2xlIHRhc2tzLAorICAgICAgICBjb21waWxlIHNpbmdsZSByZWNpcGUgZmlsZXMsIGNhcHR1cmUgb3IgY2xlYXIgZGF0YSwgb3Igc2ltcGx5CisgICAgICAgIHJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIEJpdEJha2UncyBleGVjdXRpb24gcHJvY2VzcyBmcm9tIHN0YXJ0CisgICAgICAgIHRvIGZpbmlzaCB3aGVuIHlvdSB1c2UgaXQgdG8gY3JlYXRlIGFuIGltYWdlLgorICAgICAgICBUaGUgZXhlY3V0aW9uIHByb2Nlc3MgaXMgbGF1bmNoZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kCisgICAgICAgIGZvcm06CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgQml0QmFrZSBjb21tYW5kIGFuZCBpdHMgb3B0aW9ucywKKyAgICAgICAgc2VlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdiaXRiYWtlLXVzZXItbWFudWFsLWNvbW1hbmQnPlRoZSBCaXRCYWtlIENvbW1hbmQ8L2xpbms+IgorICAgICAgICBzZWN0aW9uLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFByaW9yIHRvIGV4ZWN1dGluZyBCaXRCYWtlLCB5b3Ugc2hvdWxkIHRha2UgYWR2YW50YWdlIG9mIGF2YWlsYWJsZQorICAgICAgICAgICAgICAgIHBhcmFsbGVsIHRocmVhZCBleGVjdXRpb24gb24geW91ciBidWlsZCBob3N0IGJ5IHNldHRpbmcgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX05VTUJFUl9USFJFQURTJz48ZmlsZW5hbWU+QkJfTlVNQkVSX1RIUkVBRFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB5b3VyIHByb2plY3QncyA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIGNvbW1vbiBtZXRob2QgdG8gZGV0ZXJtaW5lIHRoaXMgdmFsdWUgZm9yIHlvdXIgYnVpbGQgaG9zdCBpcyB0byBydW4KKyAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBncmVwIHByb2Nlc3NvciAvcHJvYy9jcHVpbmZvCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgcHJvY2Vzc29ycywgd2hpY2ggdGFrZXMgaW50byAKKyAgICAgICAgICAgICAgICBhY2NvdW50IGh5cGVyLXRocmVhZGluZy4gCisgICAgICAgICAgICAgICAgVGh1cywgYSBxdWFkLWNvcmUgYnVpbGQgaG9zdCB3aXRoIGh5cGVyLXRocmVhZGluZyBtb3N0IGxpa2VseSAKKyAgICAgICAgICAgICAgICBzaG93cyBlaWdodCBwcm9jZXNzb3JzLCB3aGljaCBpcyB0aGUgdmFsdWUgeW91IHdvdWxkIHRoZW4gYXNzaWduIHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCX05VTUJFUl9USFJFQURTPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgcG9zc2libHkgc2ltcGxlciBzb2x1dGlvbiBpcyB0aGF0IHNvbWUgTGludXggZGlzdHJpYnV0aW9ucworICAgICAgICAgICAgICAgIChlLmcuIERlYmlhbiBhbmQgVWJ1bnR1KSBwcm92aWRlIHRoZSA8ZmlsZW5hbWU+bmNwdXM8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3BhcnNpbmctdGhlLWJhc2UtY29uZmlndXJhdGlvbi1tZXRhZGF0YSc+CisgICAgICAgIDx0aXRsZT5QYXJzaW5nIHRoZSBCYXNlIENvbmZpZ3VyYXRpb24gTWV0YWRhdGE8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZpcnN0IHRoaW5nIEJpdEJha2UgZG9lcyBpcyBwYXJzZSBiYXNlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIG1ldGFkYXRhLgorICAgICAgICAgICAgQmFzZSBjb25maWd1cmF0aW9uIG1ldGFkYXRhIGNvbnNpc3RzIG9mIHlvdXIgcHJvamVjdCdzCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUgdG8gZGV0ZXJtaW5lIHdoYXQKKyAgICAgICAgICAgIGxheWVycyBCaXRCYWtlIG5lZWRzIHRvIHJlY29nbml6ZSwgYWxsIG5lY2Vzc2FyeQorICAgICAgICAgICAgPGZpbGVuYW1lPmxheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlcyAob25lIGZyb20gZWFjaCBsYXllciksCisgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlIGRhdGEgaXRzZWxmIGlzIG9mIHZhcmlvdXMgdHlwZXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UmVjaXBlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBEZXRhaWxzIGFib3V0IHBhcnRpY3VsYXIgcGllY2VzIG9mIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNsYXNzIERhdGE6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQW4gYWJzdHJhY3Rpb24gb2YgY29tbW9uIGJ1aWxkIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgIChlLmcuIGhvdyB0byBidWlsZCBhIExpbnV4IGtlcm5lbCkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q29uZmlndXJhdGlvbiBEYXRhOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUtc3BlY2lmaWMgc2V0dGluZ3MsIHBvbGljeSBkZWNpc2lvbnMsCisgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBkYXRhIGFjdHMgYXMgdGhlIGdsdWUgdG8gYmluZCBldmVyeXRoaW5nCisgICAgICAgICAgICAgICAgICAgIHRvZ2V0aGVyLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGVzIGFyZSB1c2VkIHRvCisgICAgICAgICAgICBjb25zdHJ1Y3Qga2V5IHZhcmlhYmxlcyBzdWNoIGFzCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQkZJTEVTJz48ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiBpcyB1c2VkIHRvIHNlYXJjaCBmb3IKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gYW5kIGNsYXNzIGZpbGVzIHVuZGVyIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmNsYXNzZXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZGlyZWN0b3JpZXMsIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5CQkZJTEVTPC9maWxlbmFtZT4gaXMgdXNlZCB0byBsb2NhdGUgYm90aCByZWNpcGUKKyAgICAgICAgICAgIGFuZCByZWNpcGUgYXBwZW5kIGZpbGVzCisgICAgICAgICAgICAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgSWYgdGhlcmUgaXMgbm8gPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLAorICAgICAgICAgICAgaXQgaXMgYXNzdW1lZCB0aGUgdXNlciBoYXMgc2V0IHRoZSA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+IGRpcmVjdGx5IGluIHRoZSBlbnZpcm9ubWVudC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTmV4dCwgdGhlIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGlzIGxvY2F0ZWQKKyAgICAgICAgICAgIHVzaW5nIHRoZSA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gdmFyaWFibGUgdGhhdCB3YXMKKyAgICAgICAgICAgIGp1c3QgY29uc3RydWN0ZWQuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGUgbWF5IGFsc28gaW5jbHVkZSBvdGhlcgorICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcyB1c2luZyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgIDxmaWxlbmFtZT5yZXF1aXJlPC9maWxlbmFtZT4gZGlyZWN0aXZlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUHJpb3IgdG8gcGFyc2luZyBjb25maWd1cmF0aW9uIGZpbGVzLCBCaXRiYWtlIGxvb2tzCisgICAgICAgICAgICBhdCBjZXJ0YWluIHZhcmlhYmxlcywgaW5jbHVkaW5nOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLUJCX0VOVl9XSElURUxJU1QnPjxmaWxlbmFtZT5CQl9FTlZfV0hJVEVMSVNUPC9maWxlbmFtZT48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9QUkVTRVJWRV9FTlYnPjxmaWxlbmFtZT5CQl9QUkVTRVJWRV9FTlY8L2ZpbGVuYW1lPjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLUJCX0VOVl9FWFRSQVdISVRFJz48ZmlsZW5hbWU+QkJfRU5WX0VYVFJBV0hJVEU8L2ZpbGVuYW1lPjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CSVRCQUtFX1VJJz48ZmlsZW5hbWU+QklUQkFLRV9VSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGluZm9ybWF0aW9uIG9uIGhvdyB0byBwYXNzIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbnRvIHRoZSBCaXRCYWtlCisgICAgICAgICAgICBleGVjdXRpb24gZW52aXJvbm1lbnQgaW4gdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncGFzc2luZy1pbmZvcm1hdGlvbi1pbnRvLXRoZS1idWlsZC10YXNrLWVudmlyb25tZW50Jz5QYXNzaW5nIEluZm9ybWF0aW9uIEludG8gdGhlIEJ1aWxkIFRhc2sgRW52aXJvbm1lbnQ8L2xpbms+IiBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgYmFzZSBjb25maWd1cmF0aW9uIG1ldGFkYXRhIGlzIGdsb2JhbAorICAgICAgICAgICAgYW5kIHRoZXJlZm9yZSBhZmZlY3RzIGFsbCByZWNpcGVzIGFuZCB0YXNrcyB0aGF0IGFyZSBleGVjdXRlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBmaXJzdCBzZWFyY2hlcyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBmb3IgYW4KKyAgICAgICAgICAgIG9wdGlvbmFsIDxmaWxlbmFtZT5jb25mL2JibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICBUaGlzIGZpbGUgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBhCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJMQVlFUlMnPjxmaWxlbmFtZT5CQkxBWUVSUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgdGhhdCBpcyBhIHNwYWNlLWRlbGltaXRlZCBsaXN0IG9mICdsYXllcicgZGlyZWN0b3JpZXMuCisgICAgICAgICAgICBSZWNhbGwgdGhhdCBpZiBCaXRCYWtlIGNhbm5vdCBmaW5kIGEgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZmlsZSwgdGhlbiBpdCBpcyBhc3N1bWVkIHRoZSB1c2VyIGhhcyBzZXQgdGhlIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5CQkZJTEVTPC9maWxlbmFtZT4gdmFyaWFibGVzIGRpcmVjdGx5IGluIHRoZSBlbnZpcm9ubWVudC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIGVhY2ggZGlyZWN0b3J5IChsYXllcikgaW4gdGhpcyBsaXN0LCBhIDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZmlsZSBpcyBsb2NhdGVkIGFuZCBwYXJzZWQgd2l0aCB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MQVlFUkRJUic+PGZpbGVuYW1lPkxBWUVSRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBiZWluZyBzZXQgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgbGF5ZXIgd2FzIGZvdW5kLgorICAgICAgICAgICAgVGhlIGlkZWEgaXMgdGhlc2UgZmlsZXMgYXV0b21hdGljYWxseSBzZXQgdXAKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGFuZCBvdGhlciB2YXJpYWJsZXMgY29ycmVjdGx5IGZvciBhIGdpdmVuIGJ1aWxkIGRpcmVjdG9yeS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSB0aGVuIGV4cGVjdHMgdG8gZmluZCB0aGUgPGZpbGVuYW1lPmNvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZpbGUgc29tZXdoZXJlIGluIHRoZSB1c2VyLXNwZWNpZmllZCA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGF0IGNvbmZpZ3VyYXRpb24gZmlsZSBnZW5lcmFsbHkgaGFzIGluY2x1ZGUgZGlyZWN0aXZlcyB0byBwdWxsCisgICAgICAgICAgICBpbiBhbnkgb3RoZXIgbWV0YWRhdGEgc3VjaCBhcyBmaWxlcyBzcGVjaWZpYyB0byB0aGUgYXJjaGl0ZWN0dXJlLAorICAgICAgICAgICAgdGhlIG1hY2hpbmUsIHRoZSBsb2NhbCBlbnZpcm9ubWVudCwgYW5kIHNvIGZvcnRoLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmx5IHZhcmlhYmxlIGRlZmluaXRpb25zIGFuZCBpbmNsdWRlIGRpcmVjdGl2ZXMgYXJlIGFsbG93ZWQKKyAgICAgICAgICAgIGluIEJpdEJha2UgPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICBTb21lIHZhcmlhYmxlcyBkaXJlY3RseSBpbmZsdWVuY2UgQml0QmFrZSdzIGJlaGF2aW9yLgorICAgICAgICAgICAgVGhlc2UgdmFyaWFibGVzIG1pZ2h0IGhhdmUgYmVlbiBzZXQgZnJvbSB0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgICAgIGRlcGVuZGluZyBvbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHByZXZpb3VzbHkKKyAgICAgICAgICAgIG1lbnRpb25lZCBvciBzZXQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtdmFyaWFibGVzLWdsb3MnPlZhcmlhYmxlcyBHbG9zc2FyeTwvbGluaz4iCisgICAgICAgICAgICBjaGFwdGVyIHByZXNlbnRzIGEgZnVsbCBsaXN0IG9mIHZhcmlhYmxlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWZ0ZXIgcGFyc2luZyBjb25maWd1cmF0aW9uIGZpbGVzLCBCaXRCYWtlIHVzZXMgaXRzIHJ1ZGltZW50YXJ5CisgICAgICAgICAgICBpbmhlcml0YW5jZSBtZWNoYW5pc20sIHdoaWNoIGlzIHRocm91Z2ggY2xhc3MgZmlsZXMsIHRvIGluaGVyaXQKKyAgICAgICAgICAgIHNvbWUgc3RhbmRhcmQgY2xhc3Nlcy4KKyAgICAgICAgICAgIEJpdEJha2UgcGFyc2VzIGEgY2xhc3Mgd2hlbiB0aGUgaW5oZXJpdCBkaXJlY3RpdmUgcmVzcG9uc2libGUKKyAgICAgICAgICAgIGZvciBnZXR0aW5nIHRoYXQgY2xhc3MgaXMgZW5jb3VudGVyZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZSBpcyBhbHdheXMgaW5jbHVkZWQuCisgICAgICAgICAgICBPdGhlciBjbGFzc2VzIHRoYXQgYXJlIHNwZWNpZmllZCBpbiB0aGUgY29uZmlndXJhdGlvbiB1c2luZyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTkhFUklUJz48ZmlsZW5hbWU+SU5IRVJJVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgYXJlIGFsc28gaW5jbHVkZWQuCisgICAgICAgICAgICBCaXRCYWtlIHNlYXJjaGVzIGZvciBjbGFzcyBmaWxlcyBpbiBhCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y2xhc3NlczwvZmlsZW5hbWU+IHN1YmRpcmVjdG9yeSB1bmRlcgorICAgICAgICAgICAgdGhlIHBhdGhzIGluIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiBpbiB0aGUgc2FtZSB3YXkgYXMKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgZ29vZCB3YXkgdG8gZ2V0IGFuIGlkZWEgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kCisgICAgICAgICAgICB0aGUgY2xhc3MgZmlsZXMgdXNlZCBpbiB5b3VyIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBpcyB0bworICAgICAgICAgICAgcnVuIHRoZSBmb2xsb3dpbmcgQml0QmFrZSBjb21tYW5kOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWUgPiBteWJiLmxvZworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgRXhhbWluaW5nIHRoZSB0b3Agb2YgdGhlIDxmaWxlbmFtZT5teWJiLmxvZzwvZmlsZW5hbWU+CisgICAgICAgICAgICBzaG93cyB5b3UgdGhlIG1hbnkgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgY2xhc3MgZmlsZXMKKyAgICAgICAgICAgIHVzZWQgaW4geW91ciBleGVjdXRpb24gZW52aXJvbm1lbnQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGJlIGF3YXJlIG9mIGhvdyBCaXRCYWtlIHBhcnNlcyBjdXJseSBicmFjZXMuCisgICAgICAgICAgICAgICAgSWYgYSByZWNpcGUgdXNlcyBhIGNsb3NpbmcgY3VybHkgYnJhY2Ugd2l0aGluIHRoZSBmdW5jdGlvbiBhbmQKKyAgICAgICAgICAgICAgICB0aGUgY2hhcmFjdGVyIGhhcyBubyBsZWFkaW5nIHNwYWNlcywgQml0QmFrZSBwcm9kdWNlcyBhIHBhcnNpbmcKKyAgICAgICAgICAgICAgICBlcnJvci4KKyAgICAgICAgICAgICAgICBJZiB5b3UgdXNlIGEgcGFpciBvZiBjdXJseSBicmFjZXMgaW4gYSBzaGVsbCBmdW5jdGlvbiwgdGhlCisgICAgICAgICAgICAgICAgY2xvc2luZyBjdXJseSBicmFjZSBtdXN0IG5vdCBiZSBsb2NhdGVkIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZQorICAgICAgICAgICAgICAgIHdpdGhvdXQgbGVhZGluZyBzcGFjZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGNhdXNlcyBCaXRCYWtlIHRvIHByb2R1Y2UgYSBwYXJzaW5nCisgICAgICAgICAgICAgICAgZXJyb3I6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBmYWtlcm9vdCBjcmVhdGVfc2hhcigpIHsKKyAgICAgICAgIGNhdCAmbHQ7Jmx0OyAiRU9GIiAmZ3Q7ICR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uc2gKKyAgICAgdXNhZ2UoKQorICAgICB7CisgICAgICAgZWNobyAidGVzdCIKKyAgICAgICAjIyMjIyMgVGhlIGZvbGxvd2luZyAifSIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIGNhdXNlcyBhIHBhcnNpbmcgZXJyb3IgIyMjIyMjCisgICAgIH0KKyAgICAgRU9GCisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgV3JpdGluZyB0aGUgcmVjaXBlIHRoaXMgd2F5IGF2b2lkcyB0aGUgZXJyb3I6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBmYWtlcm9vdCBjcmVhdGVfc2hhcigpIHsKKyAgICAgICAgIGNhdCAmbHQ7Jmx0OyAiRU9GIiAmZ3Q7ICR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uc2gKKyAgICAgdXNhZ2UoKQorICAgICB7CisgICAgICAgZWNobyAidGVzdCIKKyAgICAgICAjIyMjIyNUaGUgZm9sbG93aW5nICJ9IiB3aXRoIGEgbGVhZGluZyBzcGFjZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUgYXZvaWRzIHRoZSBlcnJvciAjIyMjIyMKKyAgICAgIH0KKyAgICAgRU9GCisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbm90ZT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbG9jYXRpbmctYW5kLXBhcnNpbmctcmVjaXBlcyc+CisgICAgICAgIDx0aXRsZT5Mb2NhdGluZyBhbmQgUGFyc2luZyBSZWNpcGVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIER1cmluZyB0aGUgY29uZmlndXJhdGlvbiBwaGFzZSwgQml0QmFrZSB3aWxsIGhhdmUgc2V0CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJGSUxFUyc+PGZpbGVuYW1lPkJCRklMRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICBCaXRCYWtlIG5vdyB1c2VzIGl0IHRvIGNvbnN0cnVjdCBhIGxpc3Qgb2YgcmVjaXBlcyB0byBwYXJzZSwKKyAgICAgICAgICAgIGFsb25nIHdpdGggYW55IGFwcGVuZCBmaWxlcyAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KQorICAgICAgICAgICAgdG8gYXBwbHkuCisgICAgICAgICAgICA8ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+IGlzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YKKyAgICAgICAgICAgIGF2YWlsYWJsZSBmaWxlcyBhbmQgc3VwcG9ydHMgd2lsZGNhcmRzLgorICAgICAgICAgICAgQW4gZXhhbXBsZSB3b3VsZCBiZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJGSUxFUyA9ICIvcGF0aC90by9iYmZpbGVzLyouYmIgL3BhdGgvdG8vYXBwZW5kcy8qLmJiYXBwZW5kIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgQml0QmFrZSBwYXJzZXMgZWFjaCByZWNpcGUgYW5kIGFwcGVuZCBmaWxlIGxvY2F0ZWQKKyAgICAgICAgICAgIHdpdGggPGZpbGVuYW1lPkJCRklMRVM8L2ZpbGVuYW1lPiBhbmQgc3RvcmVzIHRoZSB2YWx1ZXMgb2YKKyAgICAgICAgICAgIHZhcmlvdXMgdmFyaWFibGVzIGludG8gdGhlIGRhdGFzdG9yZS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEFwcGVuZCBmaWxlcyBhcmUgYXBwbGllZCBpbiB0aGUgb3JkZXIgdGhleSBhcmUgZW5jb3VudGVyZWQgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgRm9yIGVhY2ggZmlsZSwgYSBmcmVzaCBjb3B5IG9mIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gaXMKKyAgICAgICAgICAgIG1hZGUsIHRoZW4gdGhlIHJlY2lwZSBpcyBwYXJzZWQgbGluZSBieSBsaW5lLgorICAgICAgICAgICAgQW55IGluaGVyaXQgc3RhdGVtZW50cyBjYXVzZSBCaXRCYWtlIHRvIGZpbmQgYW5kCisgICAgICAgICAgICB0aGVuIHBhcnNlIGNsYXNzIGZpbGVzICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgIHVzaW5nCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBhcyB0aGUgc2VhcmNoIHBhdGguCisgICAgICAgICAgICBGaW5hbGx5LCBCaXRCYWtlIHBhcnNlcyBpbiBvcmRlciBhbnkgYXBwZW5kIGZpbGVzIGZvdW5kIGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmUgY29tbW9uIGNvbnZlbnRpb24gaXMgdG8gdXNlIHRoZSByZWNpcGUgZmlsZW5hbWUgdG8gZGVmaW5lCisgICAgICAgICAgICBwaWVjZXMgb2YgbWV0YWRhdGEuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaW4gPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+IHRoZSByZWNpcGUKKyAgICAgICAgICAgIG5hbWUgYW5kIHZlcnNpb24gYXJlIHVzZWQgdG8gc2V0IHRoZSB2YXJpYWJsZXMKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+IGFuZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBOID0gIiR7QGJiLnBhcnNlLkJCSGFuZGxlci52YXJzX2Zyb21fZmlsZShkLmdldFZhcignRklMRScsIEZhbHNlKSxkKVswXSBvciAnZGVmYXVsdHBrZ25hbWUnfSIKKyAgICAgUFYgPSAiJHtAYmIucGFyc2UuQkJIYW5kbGVyLnZhcnNfZnJvbV9maWxlKGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpLGQpWzFdIG9yICcxLjAnfSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgYSByZWNpcGUgY2FsbGVkICJzb21ldGhpbmdfMS4yLjMuYmIiIHdvdWxkIHNldAorICAgICAgICAgICAgPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4gdG8gInNvbWV0aGluZyIgYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPiB0byAiMS4yLjMiLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCeSB0aGUgdGltZSBwYXJzaW5nIGlzIGNvbXBsZXRlIGZvciBhIHJlY2lwZSwgQml0QmFrZQorICAgICAgICAgICAgaGFzIGEgbGlzdCBvZiB0YXNrcyB0aGF0IHRoZSByZWNpcGUgZGVmaW5lcyBhbmQgYSBzZXQgb2YKKyAgICAgICAgICAgIGRhdGEgY29uc2lzdGluZyBvZiBrZXlzIGFuZCB2YWx1ZXMgYXMgd2VsbCBhcworICAgICAgICAgICAgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGFza3MuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgZG9lcyBub3QgbmVlZCBhbGwgb2YgdGhpcyBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIEl0IG9ubHkgbmVlZHMgYSBzbWFsbCBzdWJzZXQgb2YgdGhlIGluZm9ybWF0aW9uIHRvIG1ha2UKKyAgICAgICAgICAgIGRlY2lzaW9ucyBhYm91dCB0aGUgcmVjaXBlLgorICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBCaXRCYWtlIGNhY2hlcyB0aGUgdmFsdWVzIGluIHdoaWNoIGl0IGlzCisgICAgICAgICAgICBpbnRlcmVzdGVkIGFuZCBkb2VzIG5vdCBzdG9yZSB0aGUgcmVzdCBvZiB0aGUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICBFeHBlcmllbmNlIGhhcyBzaG93biBpdCBpcyBmYXN0ZXIgdG8gcmUtcGFyc2UgdGhlIG1ldGFkYXRhIHRoYW4gdG8KKyAgICAgICAgICAgIHRyeSBhbmQgd3JpdGUgaXQgb3V0IHRvIHRoZSBkaXNrIGFuZCB0aGVuIHJlbG9hZCBpdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlcmUgcG9zc2libGUsIHN1YnNlcXVlbnQgQml0QmFrZSBjb21tYW5kcyByZXVzZSB0aGlzIGNhY2hlIG9mCisgICAgICAgICAgICByZWNpcGUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICBUaGUgdmFsaWRpdHkgb2YgdGhpcyBjYWNoZSBpcyBkZXRlcm1pbmVkIGJ5IGZpcnN0IGNvbXB1dGluZyBhCisgICAgICAgICAgICBjaGVja3N1bSBvZiB0aGUgYmFzZSBjb25maWd1cmF0aW9uIGRhdGEgKHNlZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0hBU0hDT05GSUdfV0hJVEVMSVNUJz48ZmlsZW5hbWU+QkJfSEFTSENPTkZJR19XSElURUxJU1Q8L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICBhbmQgdGhlbiBjaGVja2luZyBpZiB0aGUgY2hlY2tzdW0gbWF0Y2hlcy4KKyAgICAgICAgICAgIElmIHRoYXQgY2hlY2tzdW0gbWF0Y2hlcyB3aGF0IGlzIGluIHRoZSBjYWNoZSBhbmQgdGhlIHJlY2lwZQorICAgICAgICAgICAgYW5kIGNsYXNzIGZpbGVzIGhhdmUgbm90IGNoYW5nZWQsIEJpdGJha2UgaXMgYWJsZSB0byB1c2UKKyAgICAgICAgICAgIHRoZSBjYWNoZS4KKyAgICAgICAgICAgIEJpdEJha2UgdGhlbiByZWxvYWRzIHRoZSBjYWNoZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlY2lwZQorICAgICAgICAgICAgaW5zdGVhZCBvZiByZXBhcnNpbmcgaXQgZnJvbSBzY3JhdGNoLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBSZWNpcGUgZmlsZSBjb2xsZWN0aW9ucyBleGlzdCB0byBhbGxvdyB0aGUgdXNlciB0bworICAgICAgICAgICAgaGF2ZSBtdWx0aXBsZSByZXBvc2l0b3JpZXMgb2YKKyAgICAgICAgICAgIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlcyB0aGF0IGNvbnRhaW4gdGhlIHNhbWUKKyAgICAgICAgICAgIGV4YWN0IHBhY2thZ2UuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgb25lIGNvdWxkIGVhc2lseSB1c2UgdGhlbSB0byBtYWtlIG9uZSdzCisgICAgICAgICAgICBvd24gbG9jYWwgY29weSBvZiBhbiB1cHN0cmVhbSByZXBvc2l0b3J5LCBidXQgd2l0aAorICAgICAgICAgICAgY3VzdG9tIG1vZGlmaWNhdGlvbnMgdGhhdCBvbmUgZG9lcyBub3Qgd2FudCB1cHN0cmVhbS4KKyAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICBCQkZJTEVTID0gIi9zdHVmZi9vcGVuZW1iZWRkZWQvKi8qLmJiIC9zdHVmZi9vcGVuZW1iZWRkZWQubW9kaWZpZWQvKi8qLmJiIgorICAgIEJCRklMRV9DT0xMRUNUSU9OUyA9ICJ1cHN0cmVhbSBsb2NhbCIKKyAgICBCQkZJTEVfUEFUVEVSTl91cHN0cmVhbSA9ICJeL3N0dWZmL29wZW5lbWJlZGRlZC8iCisgICAgQkJGSUxFX1BBVFRFUk5fbG9jYWwgPSAiXi9zdHVmZi9vcGVuZW1iZWRkZWQubW9kaWZpZWQvIgorICAgIEJCRklMRV9QUklPUklUWV91cHN0cmVhbSA9ICI1IgorICAgIEJCRklMRV9QUklPUklUWV9sb2NhbCA9ICIxMCIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBsYXllcnMgbWVjaGFuaXNtIGlzIG5vdyB0aGUgcHJlZmVycmVkIG1ldGhvZCBvZiBjb2xsZWN0aW5nCisgICAgICAgICAgICAgICAgY29kZS4KKyAgICAgICAgICAgICAgICBXaGlsZSB0aGUgY29sbGVjdGlvbnMgY29kZSByZW1haW5zLCBpdHMgbWFpbiB1c2UgaXMgdG8gc2V0IGxheWVyCisgICAgICAgICAgICAgICAgcHJpb3JpdGllcyBhbmQgdG8gZGVhbCB3aXRoIG92ZXJsYXAgKGNvbmZsaWN0cykgYmV0d2VlbiBsYXllcnMuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYmItYml0YmFrZS1wcm92aWRlcnMnPgorICAgICAgICA8dGl0bGU+UHJvdmlkZXJzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzc3VtaW5nIEJpdEJha2UgaGFzIGJlZW4gaW5zdHJ1Y3RlZCB0byBleGVjdXRlIGEgdGFyZ2V0CisgICAgICAgICAgICBhbmQgdGhhdCBhbGwgdGhlIHJlY2lwZSBmaWxlcyBoYXZlIGJlZW4gcGFyc2VkLCBCaXRCYWtlCisgICAgICAgICAgICBzdGFydHMgdG8gZmlndXJlIG91dCBob3cgdG8gYnVpbGQgdGhlIHRhcmdldC4KKyAgICAgICAgICAgIEJpdEJha2UgbG9va3MgdGhyb3VnaCB0aGUgPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4gbGlzdAorICAgICAgICAgICAgZm9yIGVhY2ggb2YgdGhlIHJlY2lwZXMuCisgICAgICAgICAgICBBIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+IGxpc3QgaXMgdGhlIGxpc3Qgb2YgbmFtZXMgYnkgd2hpY2gKKyAgICAgICAgICAgIHRoZSByZWNpcGUgY2FuIGJlIGtub3duLgorICAgICAgICAgICAgRWFjaCByZWNpcGUncyA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPiBsaXN0IGlzIGNyZWF0ZWQKKyAgICAgICAgICAgIGltcGxpY2l0bHkgdGhyb3VnaCB0aGUgcmVjaXBlJ3MKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlCisgICAgICAgICAgICBhbmQgZXhwbGljaXRseSB0aHJvdWdoIHRoZSByZWNpcGUncworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBST1ZJREVTJz48ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlLCB3aGljaCBpcyBvcHRpb25hbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiBhIHJlY2lwZSB1c2VzIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+LCB0aGF0IHJlY2lwZSdzCisgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IGNhbiBiZSBmb3VuZCB1bmRlciBhbiBhbHRlcm5hdGl2ZSBuYW1lIG9yIG5hbWVzIG90aGVyCisgICAgICAgICAgICB0aGFuIHRoZSBpbXBsaWNpdCA8ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPiBuYW1lLgorICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgc3VwcG9zZSBhIHJlY2lwZSBuYW1lZCA8ZmlsZW5hbWU+a2V5Ym9hcmRfMS4wLmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGNvbnRhaW5lZCB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUk9WSURFUyArPSAiZnVsbGtleWJvYXJkIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+IGxpc3QgZm9yIHRoaXMgcmVjaXBlIGJlY29tZXMKKyAgICAgICAgICAgICJrZXlib2FyZCIsIHdoaWNoIGlzIGltcGxpY2l0LCBhbmQgImZ1bGxrZXlib2FyZCIsIHdoaWNoIGlzIGV4cGxpY2l0LgorICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0aGUgZnVuY3Rpb25hbGl0eSBmb3VuZCBpbgorICAgICAgICAgICAgPGZpbGVuYW1lPmtleWJvYXJkXzEuMC5iYjwvZmlsZW5hbWU+IGNhbiBiZSBmb3VuZCB1bmRlciB0d28KKyAgICAgICAgICAgIGRpZmZlcmVudCBuYW1lcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdiYi1iaXRiYWtlLXByZWZlcmVuY2VzJz4KKyAgICAgICAgPHRpdGxlPlByZWZlcmVuY2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPiBsaXN0IGlzIG9ubHkgcGFydCBvZiB0aGUgc29sdXRpb24KKyAgICAgICAgICAgIGZvciBmaWd1cmluZyBvdXQgYSB0YXJnZXQncyByZWNpcGVzLgorICAgICAgICAgICAgQmVjYXVzZSB0YXJnZXRzIG1pZ2h0IGhhdmUgbXVsdGlwbGUgcHJvdmlkZXJzLCBCaXRCYWtlIG5lZWRzCisgICAgICAgICAgICB0byBwcmlvcml0aXplIHByb3ZpZGVycyBieSBkZXRlcm1pbmluZyBwcm92aWRlciBwcmVmZXJlbmNlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBjb21tb24gZXhhbXBsZSBpbiB3aGljaCBhIHRhcmdldCBoYXMgbXVsdGlwbGUgcHJvdmlkZXJzCisgICAgICAgICAgICBpcyAidmlydHVhbC9rZXJuZWwiLCB3aGljaCBpcyBvbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+IGxpc3QgZm9yIGVhY2gga2VybmVsIHJlY2lwZS4KKyAgICAgICAgICAgIEVhY2ggbWFjaGluZSBvZnRlbiBzZWxlY3RzIHRoZSBiZXN0IGtlcm5lbCBwcm92aWRlciBieSB1c2luZyBhCisgICAgICAgICAgICBsaW5lIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZyBpbiB0aGUgbWFjaGluZSBjb25maWd1cmF0aW9uIGZpbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA9ICJsaW51eC15b2N0byIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSBkZWZhdWx0CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFJFRkVSUkVEX1BST1ZJREVSJz48ZmlsZW5hbWU+UFJFRkVSUkVEX1BST1ZJREVSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBpcyB0aGUgcHJvdmlkZXIgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSB0YXJnZXQuCisgICAgICAgICAgICBCaXRiYWtlIGl0ZXJhdGVzIHRocm91Z2ggZWFjaCB0YXJnZXQgaXQgbmVlZHMgdG8gYnVpbGQgYW5kCisgICAgICAgICAgICByZXNvbHZlcyB0aGVtIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgdXNpbmcgdGhpcyBwcm9jZXNzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBVbmRlcnN0YW5kaW5nIGhvdyBwcm92aWRlcnMgYXJlIGNob3NlbiBpcyBtYWRlIGNvbXBsaWNhdGVkIGJ5IHRoZSBmYWN0CisgICAgICAgICAgICB0aGF0IG11bHRpcGxlIHZlcnNpb25zIG1pZ2h0IGV4aXN0IGZvciBhIGdpdmVuIHByb3ZpZGVyLgorICAgICAgICAgICAgQml0QmFrZSBkZWZhdWx0cyB0byB0aGUgaGlnaGVzdCB2ZXJzaW9uIG9mIGEgcHJvdmlkZXIuCisgICAgICAgICAgICBWZXJzaW9uIGNvbXBhcmlzb25zIGFyZSBtYWRlIHVzaW5nIHRoZSBzYW1lIG1ldGhvZCBhcyBEZWJpYW4uCisgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVGRVJSRURfVkVSU0lPTic+PGZpbGVuYW1lPlBSRUZFUlJFRF9WRVJTSU9OPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSB0byBzcGVjaWZ5IGEgcGFydGljdWxhciB2ZXJzaW9uLgorICAgICAgICAgICAgWW91IGNhbiBpbmZsdWVuY2UgdGhlIG9yZGVyIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFRkFVTFRfUFJFRkVSRU5DRSc+PGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIGZpbGVzIGhhdmUgYSBwcmVmZXJlbmNlIG9mICIwIi4KKyAgICAgICAgICAgIFNldHRpbmcgPGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+IHRvICItMSIgbWFrZXMgdGhlCisgICAgICAgICAgICByZWNpcGUgdW5saWtlbHkgdG8gYmUgdXNlZCB1bmxlc3MgaXQgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLgorICAgICAgICAgICAgU2V0dGluZyA8ZmlsZW5hbWU+REVGQVVMVF9QUkVGRVJFTkNFPC9maWxlbmFtZT4gdG8gIjEiIG1ha2VzIGl0CisgICAgICAgICAgICBsaWtlbHkgdGhlIHJlY2lwZSBpcyB1c2VkLgorICAgICAgICAgICAgPGZpbGVuYW1lPlBSRUZFUlJFRF9WRVJTSU9OPC9maWxlbmFtZT4gb3ZlcnJpZGVzIGFueQorICAgICAgICAgICAgPGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+IHNldHRpbmcuCisgICAgICAgICAgICA8ZmlsZW5hbWU+REVGQVVMVF9QUkVGRVJFTkNFPC9maWxlbmFtZT4gaXMgb2Z0ZW4gdXNlZCB0byBtYXJrIG5ld2VyCisgICAgICAgICAgICBhbmQgbW9yZSBleHBlcmltZW50YWwgcmVjaXBlIHZlcnNpb25zIHVudGlsIHRoZXkgaGF2ZSB1bmRlcmdvbmUKKyAgICAgICAgICAgIHN1ZmZpY2llbnQgdGVzdGluZyB0byBiZSBjb25zaWRlcmVkIHN0YWJsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUg4oCcdmVyc2lvbnPigJ0gb2YgYSBnaXZlbiByZWNpcGUsCisgICAgICAgICAgICBCaXRCYWtlIGRlZmF1bHRzIHRvIHNlbGVjdGluZyB0aGUgbW9zdCByZWNlbnQKKyAgICAgICAgICAgIHZlcnNpb24sIHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLgorICAgICAgICAgICAgSWYgdGhlIHJlY2lwZSBpbiBxdWVzdGlvbiBoYXMgYQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFRkFVTFRfUFJFRkVSRU5DRSc+PGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgc2V0IGxvd2VyIHRoYW4gdGhlIG90aGVyIHJlY2lwZXMgKGRlZmF1bHQgaXMgMCksIHRoZW4KKyAgICAgICAgICAgIGl0IHdpbGwgbm90IGJlIHNlbGVjdGVkLgorICAgICAgICAgICAgVGhpcyBhbGxvd3MgdGhlIHBlcnNvbiBvciBwZXJzb25zIG1haW50YWluaW5nCisgICAgICAgICAgICB0aGUgcmVwb3NpdG9yeSBvZiByZWNpcGUgZmlsZXMgdG8gc3BlY2lmeQorICAgICAgICAgICAgdGhlaXIgcHJlZmVyZW5jZSBmb3IgdGhlIGRlZmF1bHQgc2VsZWN0ZWQgdmVyc2lvbi4KKyAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIHVzZXIgY2FuIHNwZWNpZnkgdGhlaXIgcHJlZmVycmVkIHZlcnNpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHRoZSBmaXJzdCByZWNpcGUgaXMgbmFtZWQgPGZpbGVuYW1lPmFfMS4xLmJiPC9maWxlbmFtZT4sIHRoZW4gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZQorICAgICAgICAgICAgd2lsbCBiZSBzZXQgdG8g4oCcYeKAnSwgYW5kIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvIDEuMS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGh1cywgaWYgYSByZWNpcGUgbmFtZWQgPGZpbGVuYW1lPmFfMS4yLmJiPC9maWxlbmFtZT4gZXhpc3RzLCBCaXRCYWtlCisgICAgICAgICAgICB3aWxsIGNob29zZSAxLjIgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSBkZWZpbmUgdGhlIGZvbGxvd2luZyB2YXJpYWJsZSBpbiBhCisgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHRoYXQgQml0QmFrZSBwYXJzZXMsIHlvdQorICAgICAgICAgICAgY2FuIGNoYW5nZSB0aGF0IHByZWZlcmVuY2U6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSRUZFUlJFRF9WRVJTSU9OX2EgPSAiMS4xIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJdCBpcyBjb21tb24gZm9yIGEgcmVjaXBlIHRvIHByb3ZpZGUgdHdvIHZlcnNpb25zIC0tIGEgc3RhYmxlLAorICAgICAgICAgICAgICAgIG51bWJlcmVkIChhbmQgcHJlZmVycmVkKSB2ZXJzaW9uLCBhbmQgYSB2ZXJzaW9uIHRoYXQgaXMKKyAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGNoZWNrZWQgb3V0IGZyb20gYSBzb3VyY2UgY29kZSByZXBvc2l0b3J5IHRoYXQKKyAgICAgICAgICAgICAgICBpcyBjb25zaWRlcmVkIG1vcmUgImJsZWVkaW5nIGVkZ2UiIGJ1dCBjYW4gYmUgc2VsZWN0ZWQgb25seQorICAgICAgICAgICAgICAgIGV4cGxpY2l0bHkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpbiB0aGUgT3BlbkVtYmVkZGVkIGNvZGViYXNlLCB0aGVyZSBpcyBhIHN0YW5kYXJkLAorICAgICAgICAgICAgICAgIHZlcnNpb25lZCByZWNpcGUgZmlsZSBmb3IgQnVzeUJveCwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVzeWJveF8xLjIyLjEuYmI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICBidXQgdGhlcmUgaXMgYWxzbyBhIEdpdC1iYXNlZCB2ZXJzaW9uLAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idXN5Ym94X2dpdC5iYjwvZmlsZW5hbWU+LCB3aGljaCBleHBsaWNpdGx5IGNvbnRhaW5zIHRoZSBsaW5lCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgIERFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgdG8gZW5zdXJlIHRoYXQgdGhlIG51bWJlcmVkLCBzdGFibGUgdmVyc2lvbiBpcyBhbHdheXMgcHJlZmVycmVkCisgICAgICAgICAgICAgICAgdW5sZXNzIHRoZSBkZXZlbG9wZXIgc2VsZWN0cyBvdGhlcndpc2UuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbm90ZT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYmItYml0YmFrZS1kZXBlbmRlbmNpZXMnPgorICAgICAgICA8dGl0bGU+RGVwZW5kZW5jaWVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEVhY2ggdGFyZ2V0IEJpdEJha2UgYnVpbGRzIGNvbnNpc3RzIG9mIG11bHRpcGxlIHRhc2tzIHN1Y2ggYXMKKyAgICAgICAgICAgIDxmaWxlbmFtZT5mZXRjaDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+dW5wYWNrPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+cGF0Y2g8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmNvbmZpZ3VyZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5jb21waWxlPC9maWxlbmFtZT4uCisgICAgICAgICAgICBGb3IgYmVzdCBwZXJmb3JtYW5jZSBvbiBtdWx0aS1jb3JlIHN5c3RlbXMsIEJpdEJha2UgY29uc2lkZXJzIGVhY2gKKyAgICAgICAgICAgIHRhc2sgYXMgYW4gaW5kZXBlbmRlbnQKKyAgICAgICAgICAgIGVudGl0eSB3aXRoIGl0cyBvd24gc2V0IG9mIGRlcGVuZGVuY2llcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkIHRocm91Z2ggc2V2ZXJhbCB2YXJpYWJsZXMuCisgICAgICAgICAgICBZb3UgY2FuIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQgdmFyaWFibGVzIEJpdEJha2UgdXNlcyBpbgorICAgICAgICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9J3JlZi12YXJpYWJsZXMtZ2xvcyc+VmFyaWFibGVzIEdsb3NzYXJ5PC9saW5rPgorICAgICAgICAgICAgbmVhciB0aGUgZW5kIG9mIHRoaXMgbWFudWFsLgorICAgICAgICAgICAgQXQgYSBiYXNpYyBsZXZlbCwgaXQgaXMgc3VmZmljaWVudCB0byBrbm93IHRoYXQgQml0QmFrZSB1c2VzIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L2xpbms+IGFuZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGVzIHdoZW4KKyAgICAgICAgICAgIGNhbGN1bGF0aW5nIGRlcGVuZGVuY2llcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IEJpdEJha2UgaGFuZGxlcyBkZXBlbmRlbmNpZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdkZXBlbmRlbmNpZXMnPkRlcGVuZGVuY2llczwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLWJpdGJha2UtdGFza2xpc3QnPgorICAgICAgICA8dGl0bGU+VGhlIFRhc2sgTGlzdDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCYXNlZCBvbiB0aGUgZ2VuZXJhdGVkIGxpc3Qgb2YgcHJvdmlkZXJzIGFuZCB0aGUgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiwKKyAgICAgICAgICAgIEJpdEJha2UgY2FuIG5vdyBjYWxjdWxhdGUgZXhhY3RseSB3aGF0IHRhc2tzIGl0IG5lZWRzIHRvIHJ1biBhbmQgaW4gd2hhdAorICAgICAgICAgICAgb3JkZXIgaXQgbmVlZHMgdG8gcnVuIHRoZW0uCisgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdleGVjdXRpbmctdGFza3MnPkV4ZWN1dGluZyBUYXNrczwvbGluaz4iIHNlY3Rpb24gaGFzIG1vcmUKKyAgICAgICAgICAgIGluZm9ybWF0aW9uIG9uIGhvdyBCaXRCYWtlIGNob29zZXMgd2hpY2ggdGFzayB0byBleGVjdXRlIG5leHQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBidWlsZCBub3cgc3RhcnRzIHdpdGggQml0QmFrZSBmb3JraW5nIG9mZiB0aHJlYWRzIHVwIHRvIHRoZSBsaW1pdCBzZXQgaW4gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfTlVNQkVSX1RIUkVBRFMnPjxmaWxlbmFtZT5CQl9OVU1CRVJfVEhSRUFEUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICBCaXRCYWtlIGNvbnRpbnVlcyB0byBmb3JrIHRocmVhZHMgYXMgbG9uZyBhcyB0aGVyZSBhcmUgdGFza3MgcmVhZHkgdG8gcnVuLAorICAgICAgICAgICAgdGhvc2UgdGFza3MgaGF2ZSBhbGwgdGhlaXIgZGVwZW5kZW5jaWVzIG1ldCwgYW5kIHRoZSB0aHJlYWQgdGhyZXNob2xkIGhhcyBub3QgYmVlbgorICAgICAgICAgICAgZXhjZWVkZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEl0IGlzIHdvcnRoIG5vdGluZyB0aGF0IHlvdSBjYW4gZ3JlYXRseSBzcGVlZCB1cCB0aGUgYnVpbGQgdGltZSBieSBwcm9wZXJseSBzZXR0aW5nCisgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPkJCX05VTUJFUl9USFJFQURTPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIGVhY2ggdGFzayBjb21wbGV0ZXMsIGEgdGltZXN0YW1wIGlzIHdyaXR0ZW4gdG8gdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1RBTVAnPjxmaWxlbmFtZT5TVEFNUDwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZS4KKyAgICAgICAgICAgIE9uIHN1YnNlcXVlbnQgcnVucywgQml0QmFrZSBsb29rcyBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5IHdpdGhpbgorICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC9zdGFtcHM8L2ZpbGVuYW1lPiBhbmQgZG9lcyBub3QgcmVydW4KKyAgICAgICAgICAgIHRhc2tzIHRoYXQgYXJlIGFscmVhZHkgY29tcGxldGVkIHVubGVzcyBhIHRpbWVzdGFtcCBpcyBmb3VuZCB0byBiZSBpbnZhbGlkLgorICAgICAgICAgICAgQ3VycmVudGx5LCBpbnZhbGlkIHRpbWVzdGFtcHMgYXJlIG9ubHkgY29uc2lkZXJlZCBvbiBhIHBlcgorICAgICAgICAgICAgcmVjaXBlIGZpbGUgYmFzaXMuCisgICAgICAgICAgICBTbywgZm9yIGV4YW1wbGUsIGlmIHRoZSBjb25maWd1cmUgc3RhbXAgaGFzIGEgdGltZXN0YW1wIGdyZWF0ZXIgdGhhbiB0aGUKKyAgICAgICAgICAgIGNvbXBpbGUgdGltZXN0YW1wIGZvciBhIGdpdmVuIHRhcmdldCwgdGhlbiB0aGUgY29tcGlsZSB0YXNrIHdvdWxkIHJlcnVuLgorICAgICAgICAgICAgUnVubmluZyB0aGUgY29tcGlsZSB0YXNrIGFnYWluLCBob3dldmVyLCBoYXMgbm8gZWZmZWN0IG9uIG90aGVyIHByb3ZpZGVycworICAgICAgICAgICAgdGhhdCBkZXBlbmQgb24gdGhhdCB0YXJnZXQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBleGFjdCBmb3JtYXQgb2YgdGhlIHN0YW1wcyBpcyBwYXJ0bHkgY29uZmlndXJhYmxlLgorICAgICAgICAgICAgSW4gbW9kZXJuIHZlcnNpb25zIG9mIEJpdEJha2UsIGEgaGFzaCBpcyBhcHBlbmRlZCB0byB0aGUKKyAgICAgICAgICAgIHN0YW1wIHNvIHRoYXQgaWYgdGhlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcywgdGhlIHN0YW1wIGJlY29tZXMKKyAgICAgICAgICAgIGludmFsaWQgYW5kIHRoZSB0YXNrIGlzIGF1dG9tYXRpY2FsbHkgcmVydW4uCisgICAgICAgICAgICBUaGlzIGhhc2gsIG9yIHNpZ25hdHVyZSB1c2VkLCBpcyBnb3Zlcm5lZCBieSB0aGUgc2lnbmF0dXJlIHBvbGljeQorICAgICAgICAgICAgdGhhdCBpcyBjb25maWd1cmVkIChzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY2hlY2tzdW1zJz5DaGVja3N1bXMgKFNpZ25hdHVyZXMpPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uKS4KKyAgICAgICAgICAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gYXBwZW5kIGV4dHJhIG1ldGFkYXRhIHRvIHRoZSBzdGFtcCB1c2luZworICAgICAgICAgICAgdGhlICJzdGFtcC1leHRyYS1pbmZvIiB0YXNrIGZsYWcuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgT3BlbkVtYmVkZGVkIHVzZXMgdGhpcyBmbGFnIHRvIG1ha2Ugc29tZSB0YXNrcyBtYWNoaW5lLXNwZWNpZmljLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBTb21lIHRhc2tzIGFyZSBtYXJrZWQgYXMgIm5vc3RhbXAiIHRhc2tzLgorICAgICAgICAgICAgTm8gdGltZXN0YW1wIGZpbGUgaXMgY3JlYXRlZCB3aGVuIHRoZXNlIHRhc2tzIGFyZSBydW4uCisgICAgICAgICAgICBDb25zZXF1ZW50bHksICJub3N0YW1wIiB0YXNrcyBhcmUgYWx3YXlzIHJlcnVuLgorICAgICAgICA8L25vdGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0YXNrcywgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Rhc2tzJz5UYXNrczwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nZXhlY3V0aW5nLXRhc2tzJz4KKyAgICAgICAgPHRpdGxlPkV4ZWN1dGluZyBUYXNrczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUYXNrcyBjYW4gYmUgZWl0aGVyIGEgc2hlbGwgdGFzayBvciBhIFB5dGhvbiB0YXNrLgorICAgICAgICAgICAgRm9yIHNoZWxsIHRhc2tzLCBCaXRCYWtlIHdyaXRlcyBhIHNoZWxsIHNjcmlwdCB0bworICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVCc+PGZpbGVuYW1lPlQ8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fS9ydW4uZG9fdGFza25hbWUucGlkPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGFuZCB0aGVuIGV4ZWN1dGVzIHRoZSBzY3JpcHQuCisgICAgICAgICAgICBUaGUgZ2VuZXJhdGVkIHNoZWxsIHNjcmlwdCBjb250YWlucyBhbGwgdGhlIGV4cG9ydGVkIHZhcmlhYmxlcywKKyAgICAgICAgICAgIGFuZCB0aGUgc2hlbGwgZnVuY3Rpb25zIHdpdGggYWxsIHZhcmlhYmxlcyBleHBhbmRlZC4KKyAgICAgICAgICAgIE91dHB1dCBmcm9tIHRoZSBzaGVsbCBzY3JpcHQgZ29lcyB0byB0aGUgZmlsZQorICAgICAgICAgICAgPGZpbGVuYW1lPiR7VH0vbG9nLmRvX3Rhc2tuYW1lLnBpZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgTG9va2luZyBhdCB0aGUgZXhwYW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluIHRoZSBydW4gZmlsZSBhbmQKKyAgICAgICAgICAgIHRoZSBvdXRwdXQgaW4gdGhlIGxvZyBmaWxlcyBpcyBhIHVzZWZ1bCBkZWJ1Z2dpbmcgdGVjaG5pcXVlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgUHl0aG9uIHRhc2tzLCBCaXRCYWtlIGV4ZWN1dGVzIHRoZSB0YXNrIGludGVybmFsbHkgYW5kIGxvZ3MKKyAgICAgICAgICAgIGluZm9ybWF0aW9uIHRvIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbC4KKyAgICAgICAgICAgIEZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXRCYWtlIHdpbGwgd3JpdGUgdGhlIGZ1bmN0aW9ucyB0byBmaWxlcworICAgICAgICAgICAgc2ltaWxhciB0byB0aGUgd2F5IHNoZWxsIHRhc2tzIGFyZSBoYW5kbGVkLgorICAgICAgICAgICAgTG9nZ2luZyB3aWxsIGJlIGhhbmRsZWQgaW4gYSB3YXkgc2ltaWxhciB0byBzaGVsbCB0YXNrcyBhcyB3ZWxsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgb3JkZXIgaW4gd2hpY2ggQml0QmFrZSBydW5zIHRoZSB0YXNrcyBpcyBjb250cm9sbGVkIGJ5IGl0cworICAgICAgICAgICAgdGFzayBzY2hlZHVsZXIuCisgICAgICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBjb25maWd1cmUgdGhlIHNjaGVkdWxlciBhbmQgZGVmaW5lIGN1c3RvbQorICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zIGZvciBzcGVjaWZpYyB1c2UgY2FzZXMuCisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZXNlIHZhcmlhYmxlcyB0aGF0IGNvbnRyb2wgdGhlCisgICAgICAgICAgICBiZWhhdmlvcjoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfU0NIRURVTEVSJz48ZmlsZW5hbWU+QkJfU0NIRURVTEVSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX1NDSEVEVUxFUlMnPjxmaWxlbmFtZT5CQl9TQ0hFRFVMRVJTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBoYXZlIGZ1bmN0aW9ucyBydW4gYmVmb3JlIGFuZCBhZnRlciBhIHRhc2sncyBtYWluCisgICAgICAgICAgICBmdW5jdGlvbi4KKyAgICAgICAgICAgIFRoaXMgaXMgZG9uZSB1c2luZyB0aGUgInByZWZ1bmNzIiBhbmQgInBvc3RmdW5jcyIgZmxhZ3Mgb2YgdGhlIHRhc2sKKyAgICAgICAgICAgIHRoYXQgbGlzdHMgdGhlIGZ1bmN0aW9ucyB0byBydW4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nY2hlY2tzdW1zJz4KKyAgICAgICAgPHRpdGxlPkNoZWNrc3VtcyAoU2lnbmF0dXJlcyk8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBjaGVja3N1bSBpcyBhIHVuaXF1ZSBzaWduYXR1cmUgb2YgYSB0YXNrJ3MgaW5wdXRzLgorICAgICAgICAgICAgVGhlIHNpZ25hdHVyZSBvZiBhIHRhc2sgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgdGFzaworICAgICAgICAgICAgbmVlZHMgdG8gYmUgcnVuLgorICAgICAgICAgICAgQmVjYXVzZSBpdCBpcyBhIGNoYW5nZSBpbiBhIHRhc2sncyBpbnB1dHMgdGhhdCB0cmlnZ2VycyBydW5uaW5nCisgICAgICAgICAgICB0aGUgdGFzaywgQml0QmFrZSBuZWVkcyB0byBkZXRlY3QgYWxsIHRoZSBpbnB1dHMgdG8gYSBnaXZlbiB0YXNrLgorICAgICAgICAgICAgRm9yIHNoZWxsIHRhc2tzLCB0aGlzIHR1cm5zIG91dCB0byBiZSBmYWlybHkgZWFzeSBiZWNhdXNlCisgICAgICAgICAgICBCaXRCYWtlIGdlbmVyYXRlcyBhICJydW4iIHNoZWxsIHNjcmlwdCBmb3IgZWFjaCB0YXNrIGFuZAorICAgICAgICAgICAgaXQgaXMgcG9zc2libGUgdG8gY3JlYXRlIGEgY2hlY2tzdW0gdGhhdCBnaXZlcyB5b3UgYSBnb29kIGlkZWEgb2Ygd2hlbgorICAgICAgICAgICAgdGhlIHRhc2sncyBkYXRhIGNoYW5nZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGNvbXBsaWNhdGUgdGhlIHByb2JsZW0sIHNvbWUgdGhpbmdzIHNob3VsZCBub3QgYmUgaW5jbHVkZWQgaW4KKyAgICAgICAgICAgIHRoZSBjaGVja3N1bS4KKyAgICAgICAgICAgIEZpcnN0LCB0aGVyZSBpcyB0aGUgYWN0dWFsIHNwZWNpZmljIGJ1aWxkIHBhdGggb2YgYSBnaXZlbiB0YXNrIC0KKyAgICAgICAgICAgIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIEl0IGRvZXMgbm90IG1hdHRlciBpZiB0aGUgd29ya2luZyBkaXJlY3RvcnkgY2hhbmdlcyBiZWNhdXNlIGl0IHNob3VsZCBub3QKKyAgICAgICAgICAgIGFmZmVjdCB0aGUgb3V0cHV0IGZvciB0YXJnZXQgcGFja2FnZXMuCisgICAgICAgICAgICBUaGUgc2ltcGxpc3RpYyBhcHByb2FjaCBmb3IgZXhjbHVkaW5nIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBpcyB0byBzZXQKKyAgICAgICAgICAgIGl0IHRvIHNvbWUgZml4ZWQgdmFsdWUgYW5kIGNyZWF0ZSB0aGUgY2hlY2tzdW0gZm9yIHRoZSAicnVuIiBzY3JpcHQuCisgICAgICAgICAgICBCaXRCYWtlIGdvZXMgb25lIHN0ZXAgYmV0dGVyIGFuZCB1c2VzIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0hBU0hCQVNFX1dISVRFTElTVCc+PGZpbGVuYW1lPkJCX0hBU0hCQVNFX1dISVRFTElTVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgdG8gZGVmaW5lIGEgbGlzdCBvZiB2YXJpYWJsZXMgdGhhdCBzaG91bGQgbmV2ZXIgYmUgaW5jbHVkZWQKKyAgICAgICAgICAgIHdoZW4gZ2VuZXJhdGluZyB0aGUgc2lnbmF0dXJlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQW5vdGhlciBwcm9ibGVtIHJlc3VsdHMgZnJvbSB0aGUgInJ1biIgc2NyaXB0cyBjb250YWluaW5nIGZ1bmN0aW9ucyB0aGF0CisgICAgICAgICAgICBtaWdodCBvciBtaWdodCBub3QgZ2V0IGNhbGxlZC4KKyAgICAgICAgICAgIFRoZSBpbmNyZW1lbnRhbCBidWlsZCBzb2x1dGlvbiBjb250YWlucyBjb2RlIHRoYXQgZmlndXJlcyBvdXQgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBiZXR3ZWVuIHNoZWxsIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgIFRoaXMgY29kZSBpcyB1c2VkIHRvIHBydW5lIHRoZSAicnVuIiBzY3JpcHRzIGRvd24gdG8gdGhlIG1pbmltdW0gc2V0LAorICAgICAgICAgICAgdGhlcmVieSBhbGxldmlhdGluZyB0aGlzIHByb2JsZW0gYW5kIG1ha2luZyB0aGUgInJ1biIgc2NyaXB0cyBtdWNoIG1vcmUKKyAgICAgICAgICAgIHJlYWRhYmxlIGFzIGEgYm9udXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNvIGZhciB3ZSBoYXZlIHNvbHV0aW9ucyBmb3Igc2hlbGwgc2NyaXB0cy4KKyAgICAgICAgICAgIFdoYXQgYWJvdXQgUHl0aG9uIHRhc2tzPworICAgICAgICAgICAgVGhlIHNhbWUgYXBwcm9hY2ggYXBwbGllcyBldmVuIHRob3VnaCB0aGVzZSB0YXNrcyBhcmUgbW9yZSBkaWZmaWN1bHQuCisgICAgICAgICAgICBUaGUgcHJvY2VzcyBuZWVkcyB0byBmaWd1cmUgb3V0IHdoYXQgdmFyaWFibGVzIGEgUHl0aG9uIGZ1bmN0aW9uIGFjY2Vzc2VzCisgICAgICAgICAgICBhbmQgd2hhdCBmdW5jdGlvbnMgaXQgY2FsbHMuCisgICAgICAgICAgICBBZ2FpbiwgdGhlIGluY3JlbWVudGFsIGJ1aWxkIHNvbHV0aW9uIGNvbnRhaW5zIGNvZGUgdGhhdCBmaXJzdCBmaWd1cmVzIG91dAorICAgICAgICAgICAgdGhlIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiBkZXBlbmRlbmNpZXMsIGFuZCB0aGVuIGNyZWF0ZXMgYSBjaGVja3N1bSBmb3IgdGhlIGRhdGEKKyAgICAgICAgICAgIHVzZWQgYXMgdGhlIGlucHV0IHRvIHRoZSB0YXNrLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBMaWtlIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBjYXNlLCBzaXR1YXRpb25zIGV4aXN0IHdoZXJlIGRlcGVuZGVuY2llcworICAgICAgICAgICAgc2hvdWxkIGJlIGlnbm9yZWQuCisgICAgICAgICAgICBGb3IgdGhlc2UgY2FzZXMsIHlvdSBjYW4gaW5zdHJ1Y3QgdGhlIGJ1aWxkIHByb2Nlc3MgdG8gaWdub3JlIGEgZGVwZW5kZW5jeQorICAgICAgICAgICAgYnkgdXNpbmcgYSBsaW5lIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRV9BUkNIU1t2YXJkZXBzZXhjbHVkZV0gPSAiTUFDSElORSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBlbnN1cmVzIHRoYXQgdGhlIDxmaWxlbmFtZT5QQUNLQUdFX0FSQ0hTPC9maWxlbmFtZT4gdmFyaWFibGUgZG9lcyBub3QKKyAgICAgICAgICAgIGRlcGVuZCBvbiB0aGUgdmFsdWUgb2YgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPiwgZXZlbiBpZiBpdCBkb2VzIHJlZmVyZW5jZSBpdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRXF1YWxseSwgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHdlIG5lZWQgdG8gYWRkIGRlcGVuZGVuY2llcyBCaXRCYWtlCisgICAgICAgICAgICBpcyBub3QgYWJsZSB0byBmaW5kLgorICAgICAgICAgICAgWW91IGNhbiBhY2NvbXBsaXNoIHRoaXMgYnkgdXNpbmcgYSBsaW5lIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIFBBQ0tBR0VfQVJDSFNbdmFyZGVwc10gPSAiTUFDSElORSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBleHBsaWNpdGx5IGFkZHMgdGhlIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT4gdmFyaWFibGUgYXMgYQorICAgICAgICAgICAgZGVwZW5kZW5jeSBmb3IgPGZpbGVuYW1lPlBBQ0tBR0VfQVJDSFM8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ29uc2lkZXIgYSBjYXNlIHdpdGggaW4tbGluZSBQeXRob24sIGZvciBleGFtcGxlLCB3aGVyZSBCaXRCYWtlIGlzIG5vdAorICAgICAgICAgICAgYWJsZSB0byBmaWd1cmUgb3V0IGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIFdoZW4gcnVubmluZyBpbiBkZWJ1ZyBtb2RlIChpLmUuIHVzaW5nIDxmaWxlbmFtZT4tREREPC9maWxlbmFtZT4pLCBCaXRCYWtlCisgICAgICAgICAgICBwcm9kdWNlcyBvdXRwdXQgd2hlbiBpdCBkaXNjb3ZlcnMgc29tZXRoaW5nIGZvciB3aGljaCBpdCBjYW5ub3QgZmlndXJlIG91dAorICAgICAgICAgICAgZGVwZW5kZW5jaWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaHVzIGZhciwgdGhpcyBzZWN0aW9uIGhhcyBsaW1pdGVkIGRpc2N1c3Npb24gdG8gdGhlIGRpcmVjdCBpbnB1dHMgaW50byBhIHRhc2suCisgICAgICAgICAgICBJbmZvcm1hdGlvbiBiYXNlZCBvbiBkaXJlY3QgaW5wdXRzIGlzIHJlZmVycmVkIHRvIGFzIHRoZSAiYmFzZWhhc2giIGluIHRoZQorICAgICAgICAgICAgY29kZS4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHRoZXJlIGlzIHN0aWxsIHRoZSBxdWVzdGlvbiBvZiBhIHRhc2sncyBpbmRpcmVjdCBpbnB1dHMgLSB0aGUKKyAgICAgICAgICAgIHRoaW5ncyB0aGF0IHdlcmUgYWxyZWFkeSBidWlsdCBhbmQgcHJlc2VudCBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5LgorICAgICAgICAgICAgVGhlIGNoZWNrc3VtIChvciBzaWduYXR1cmUpIGZvciBhIHBhcnRpY3VsYXIgdGFzayBuZWVkcyB0byBhZGQgdGhlIGhhc2hlcworICAgICAgICAgICAgb2YgYWxsIHRoZSB0YXNrcyBvbiB3aGljaCB0aGUgcGFydGljdWxhciB0YXNrIGRlcGVuZHMuCisgICAgICAgICAgICBDaG9vc2luZyB3aGljaCBkZXBlbmRlbmNpZXMgdG8gYWRkIGlzIGEgcG9saWN5IGRlY2lzaW9uLgorICAgICAgICAgICAgSG93ZXZlciwgdGhlIGVmZmVjdCBpcyB0byBnZW5lcmF0ZSBhIG1hc3RlciBjaGVja3N1bSB0aGF0IGNvbWJpbmVzIHRoZSBiYXNlaGFzaAorICAgICAgICAgICAgYW5kIHRoZSBoYXNoZXMgb2YgdGhlIHRhc2sncyBkZXBlbmRlbmNpZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEF0IHRoZSBjb2RlIGxldmVsLCB0aGVyZSBhcmUgYSB2YXJpZXR5IG9mIHdheXMgYm90aCB0aGUgYmFzZWhhc2ggYW5kIHRoZQorICAgICAgICAgICAgZGVwZW5kZW50IHRhc2sgaGFzaGVzIGNhbiBiZSBpbmZsdWVuY2VkLgorICAgICAgICAgICAgV2l0aGluIHRoZSBCaXRCYWtlIGNvbmZpZ3VyYXRpb24gZmlsZSwgd2UgY2FuIGdpdmUgQml0QmFrZSBzb21lIGV4dHJhIGluZm9ybWF0aW9uCisgICAgICAgICAgICB0byBoZWxwIGl0IGNvbnN0cnVjdCB0aGUgYmFzZWhhc2guCisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN0YXRlbWVudCBlZmZlY3RpdmVseSByZXN1bHRzIGluIGEgbGlzdCBvZiBnbG9iYWwgdmFyaWFibGUKKyAgICAgICAgICAgIGRlcGVuZGVuY3kgZXhjbHVkZXMgLSB2YXJpYWJsZXMgbmV2ZXIgaW5jbHVkZWQgaW4gYW55IGNoZWNrc3VtLgorICAgICAgICAgICAgVGhpcyBleGFtcGxlIHVzZXMgdmFyaWFibGVzIGZyb20gT3BlbkVtYmVkZGVkIHRvIGhlbHAgaWxsdXN0cmF0ZQorICAgICAgICAgICAgdGhlIGNvbmNlcHQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0hBU0hCQVNFX1dISVRFTElTVCA/PSAiVE1QRElSIEZJTEUgUEFUSCBQV0QgQkJfVEFTS0hBU0ggQkJQQVRIIERMX0RJUiBcCisgICAgICAgICBTU1RBVEVfRElSIFRISVNESVIgRklMRVNFWFRSQVBBVEhTIEZJTEVfRElSTkFNRSBIT01FIExPR05BTUUgU0hFTEwgVEVSTSBcCisgICAgICAgICBVU0VSIEZJTEVTUEFUSCBTVEFHSU5HX0RJUl9IT1NUIFNUQUdJTkdfRElSX1RBUkdFVCBDT1JFQkFTRSBQUlNFUlZfSE9TVCBcCisgICAgICAgICBQUlNFUlZfRFVNUERJUiBQUlNFUlZfRFVNUEZJTEUgUFJTRVJWX0xPQ0tET1dOIFBBUkFMTEVMX01BS0UgXAorICAgICAgICAgQ0NBQ0hFX0RJUiBFWFRFUk5BTF9UT09MQ0hBSU4gQ0NBQ0hFIENDQUNIRV9ESVNBQkxFIExJQ0VOU0VfUEFUSCBTREtQS0dTVUZGSVgiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgcHJldmlvdXMgZXhhbXBsZSBleGNsdWRlcyB0aGUgd29yayBkaXJlY3RvcnksIHdoaWNoIGlzIHBhcnQgb2YKKyAgICAgICAgICAgIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHJ1bGVzIGZvciBkZWNpZGluZyB3aGljaCBoYXNoZXMgb2YgZGVwZW5kZW50IHRhc2tzIHRvIGluY2x1ZGUgdGhyb3VnaAorICAgICAgICAgICAgZGVwZW5kZW5jeSBjaGFpbnMgYXJlIG1vcmUgY29tcGxleCBhbmQgYXJlIGdlbmVyYWxseSBhY2NvbXBsaXNoZWQgd2l0aCBhCisgICAgICAgICAgICBQeXRob24gZnVuY3Rpb24uCisgICAgICAgICAgICBUaGUgY29kZSBpbiA8ZmlsZW5hbWU+bWV0YS9saWIvb2Uvc3N0YXRlc2lnLnB5PC9maWxlbmFtZT4gc2hvd3MgdHdvIGV4YW1wbGVzCisgICAgICAgICAgICBvZiB0aGlzIGFuZCBhbHNvIGlsbHVzdHJhdGVzIGhvdyB5b3UgY2FuIGluc2VydCB5b3VyIG93biBwb2xpY3kgaW50byB0aGUgc3lzdGVtCisgICAgICAgICAgICBpZiBzbyBkZXNpcmVkLgorICAgICAgICAgICAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHR3byBiYXNpYyBzaWduYXR1cmUgZ2VuZXJhdG9ycyBPcGVuRW1iZWRkZWQgQ29yZQorICAgICAgICAgICAgdXNlczogICJPRUJhc2ljIiBhbmQgIk9FQmFzaWNIYXNoIi4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZXJlIGlzIGEgZHVtbXkgIm5vb3AiIHNpZ25hdHVyZSBoYW5kbGVyIGVuYWJsZWQgaW4gQml0QmFrZS4KKyAgICAgICAgICAgIFRoaXMgbWVhbnMgdGhhdCBiZWhhdmlvciBpcyB1bmNoYW5nZWQgZnJvbSBwcmV2aW91cyB2ZXJzaW9ucy4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5PRS1Db3JlPC9maWxlbmFtZT4gdXNlcyB0aGUgIk9FQmFzaWNIYXNoIiBzaWduYXR1cmUgaGFuZGxlciBieSBkZWZhdWx0CisgICAgICAgICAgICB0aHJvdWdoIHRoaXMgc2V0dGluZyBpbiB0aGUgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX1NJR05BVFVSRV9IQU5ETEVSID89ICJPRUJhc2ljSGFzaCIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSAiT0VCYXNpY0hhc2giIDxmaWxlbmFtZT5CQl9TSUdOQVRVUkVfSEFORExFUjwvZmlsZW5hbWU+IGlzIHRoZSBzYW1lIGFzIHRoZQorICAgICAgICAgICAgIk9FQmFzaWMiIHZlcnNpb24gYnV0IGFkZHMgdGhlIHRhc2sgaGFzaCB0byB0aGUgc3RhbXAgZmlsZXMuCisgICAgICAgICAgICBUaGlzIHJlc3VsdHMgaW4gYW55IG1ldGFkYXRhIGNoYW5nZSB0aGF0IGNoYW5nZXMgdGhlIHRhc2sgaGFzaCwgYXV0b21hdGljYWxseQorICAgICAgICAgICAgY2F1c2luZyB0aGUgdGFzayB0byBiZSBydW4gYWdhaW4uCisgICAgICAgICAgICBUaGlzIHJlbW92ZXMgdGhlIG5lZWQgdG8gYnVtcAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhbHVlcywgYW5kIGNoYW5nZXMgdG8gbWV0YWRhdGEgYXV0b21hdGljYWxseSByaXBwbGUgYWNyb3NzIHRoZSBidWlsZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgaXMgYWxzbyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgZW5kIHJlc3VsdCBvZiB0aGVzZSBzaWduYXR1cmUgZ2VuZXJhdG9ycyBpcyB0bworICAgICAgICAgICAgbWFrZSBzb21lIGRlcGVuZGVuY3kgYW5kIGhhc2ggaW5mb3JtYXRpb24gYXZhaWxhYmxlIHRvIHRoZSBidWlsZC4KKyAgICAgICAgICAgIFRoaXMgaW5mb3JtYXRpb24gaW5jbHVkZXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+QkJfQkFTRUhBU0hfdGFzay08L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+OgorICAgICAgICAgICAgICAgICAgICBUaGUgYmFzZSBoYXNoZXMgZm9yIGVhY2ggdGFzayBpbiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX0JBU0VIQVNIXzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmZpbGVuYW1lPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+OjwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnRhc2tuYW1lPC9yZXBsYWNlYWJsZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSBiYXNlIGhhc2hlcyBmb3IgZWFjaCBkZXBlbmRlbnQgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5CQkhBU0hERVBTXzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmZpbGVuYW1lPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+OjwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnRhc2tuYW1lPC9yZXBsYWNlYWJsZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSB0YXNrIGRlcGVuZGVuY2llcyBmb3IgZWFjaCB0YXNrLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX1RBU0tIQVNIPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSBoYXNoIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyB0YXNrLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJdCBpcyB3b3J0aCBub3RpbmcgdGhhdCBCaXRCYWtlJ3MgIi1TIiBvcHRpb24gbGV0cyB5b3UKKyAgICAgICAgICAgIGRlYnVnIEJpdGJha2UncyBwcm9jZXNzaW5nIG9mIHNpZ25hdHVyZXMuCisgICAgICAgICAgICBUaGUgb3B0aW9ucyBwYXNzZWQgdG8gLVMgYWxsb3cgZGlmZmVyZW50IGRlYnVnZ2luZyBtb2RlcworICAgICAgICAgICAgdG8gYmUgdXNlZCwgZWl0aGVyIHVzaW5nIEJpdEJha2UncyBvd24gZGVidWcgZnVuY3Rpb25zCisgICAgICAgICAgICBvciBwb3NzaWJseSB0aG9zZSBkZWZpbmVkIGluIHRoZSBtZXRhZGF0YS9zaWduYXR1cmUgaGFuZGxlcgorICAgICAgICAgICAgaXRzZWxmLgorICAgICAgICAgICAgVGhlIHNpbXBsZXN0IHBhcmFtZXRlciB0byBwYXNzIGlzICJub25lIiwgd2hpY2ggY2F1c2VzIGEKKyAgICAgICAgICAgIHNldCBvZiBzaWduYXR1cmUgaW5mb3JtYXRpb24gdG8gYmUgd3JpdHRlbiBvdXQgaW50bworICAgICAgICAgICAgPGZpbGVuYW1lPlNUQU1QX0RJUjwvZmlsZW5hbWU+CisgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSB0YXJnZXRzIHNwZWNpZmllZC4KKyAgICAgICAgICAgIFRoZSBvdGhlciBjdXJyZW50bHkgYXZhaWxhYmxlIHBhcmFtZXRlciBpcyAicHJpbnRkaWZmIiwKKyAgICAgICAgICAgIHdoaWNoIGNhdXNlcyBCaXRCYWtlIHRvIHRyeSB0byBlc3RhYmxpc2ggdGhlIGNsb3Nlc3QKKyAgICAgICAgICAgIHNpZ25hdHVyZSBtYXRjaCBpdCBjYW4gKGUuZy4gaW4gdGhlIHNzdGF0ZSBjYWNoZSkgYW5kIHRoZW4KKyAgICAgICAgICAgIHJ1biA8ZmlsZW5hbWU+Yml0YmFrZS1kaWZmc2lnczwvZmlsZW5hbWU+IG92ZXIgdGhlIG1hdGNoZXMKKyAgICAgICAgICAgIHRvIGRldGVybWluZSB0aGUgc3RhbXBzIGFuZCBkZWx0YSB3aGVyZSB0aGVzZSB0d28KKyAgICAgICAgICAgIHN0YW1wIHRyZWVzIGRpdmVyZ2UuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBJdCBpcyBsaWtlbHkgdGhhdCBmdXR1cmUgdmVyc2lvbnMgb2YgQml0QmFrZSB3aWxsCisgICAgICAgICAgICAgICAgcHJvdmlkZSBvdGhlciBzaWduYXR1cmUgaGFuZGxlcnMgdHJpZ2dlcmVkIHRocm91Z2gKKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsICItUyIgcGFyYW1ldGVycy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gY2hlY2tzdW0gbWV0YWRhdGEgaW4gdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndGFzay1jaGVja3N1bXMtYW5kLXNldHNjZW5lJz5UYXNrIENoZWNrc3VtcyBhbmQgU2V0c2NlbmU8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzZXRzY2VuZSc+CisgICAgICAgIDx0aXRsZT5TZXRzY2VuZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgc2V0c2NlbmUgcHJvY2VzcyBlbmFibGVzIEJpdEJha2UgdG8gaGFuZGxlICJwcmUtYnVpbHQiIGFydGlmYWN0cy4KKyAgICAgICAgICAgIFRoZSBhYmlsaXR5IHRvIGhhbmRsZSBhbmQgcmV1c2UgdGhlc2UgYXJ0aWZhY3RzIGFsbG93cyBCaXRCYWtlCisgICAgICAgICAgICB0aGUgbHV4dXJ5IG9mIG5vdCBoYXZpbmcgdG8gYnVpbGQgc29tZXRoaW5nIGZyb20gc2NyYXRjaCBldmVyeSB0aW1lLgorICAgICAgICAgICAgSW5zdGVhZCwgQml0QmFrZSBjYW4gdXNlLCB3aGVuIHBvc3NpYmxlLCBleGlzdGluZyBidWlsZCBhcnRpZmFjdHMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgbmVlZHMgdG8gaGF2ZSByZWxpYWJsZSBkYXRhIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgYW4KKyAgICAgICAgICAgIGFydGlmYWN0IGlzIGNvbXBhdGlibGUuCisgICAgICAgICAgICBTaWduYXR1cmVzLCBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24sIHByb3ZpZGUgYW4gaWRlYWwKKyAgICAgICAgICAgIHdheSBvZiByZXByZXNlbnRpbmcgd2hldGhlciBhbiBhcnRpZmFjdCBpcyBjb21wYXRpYmxlLgorICAgICAgICAgICAgSWYgYSBzaWduYXR1cmUgaXMgdGhlIHNhbWUsIGFuIG9iamVjdCBjYW4gYmUgcmV1c2VkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiBhbiBvYmplY3QgY2FuIGJlIHJldXNlZCwgdGhlIHByb2JsZW0gdGhlbiBiZWNvbWVzIGhvdyB0bworICAgICAgICAgICAgcmVwbGFjZSBhIGdpdmVuIHRhc2sgb3Igc2V0IG9mIHRhc2tzIHdpdGggdGhlIHByZS1idWlsdCBhcnRpZmFjdC4KKyAgICAgICAgICAgIEJpdEJha2Ugc29sdmVzIHRoZSBwcm9ibGVtIHdpdGggdGhlICJzZXRzY2VuZSIgcHJvY2Vzcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiBCaXRCYWtlIGlzIGFza2VkIHRvIGJ1aWxkIGEgZ2l2ZW4gdGFyZ2V0LCBiZWZvcmUgYnVpbGRpbmcgYW55dGhpbmcsCisgICAgICAgICAgICBpdCBmaXJzdCBhc2tzIHdoZXRoZXIgY2FjaGVkIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgYW55IG9mIHRoZQorICAgICAgICAgICAgdGFyZ2V0cyBpdCdzIGJ1aWxkaW5nLCBvciBhbnkgb2YgdGhlIGludGVybWVkaWF0ZSB0YXJnZXRzLgorICAgICAgICAgICAgSWYgY2FjaGVkIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSwgQml0QmFrZSB1c2VzIHRoaXMgaW5mb3JtYXRpb24gaW5zdGVhZCBvZgorICAgICAgICAgICAgcnVubmluZyB0aGUgbWFpbiB0YXNrcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBmaXJzdCBjYWxscyB0aGUgZnVuY3Rpb24gZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9IQVNIQ0hFQ0tfRlVOQ1RJT04nPjxmaWxlbmFtZT5CQl9IQVNIQ0hFQ0tfRlVOQ1RJT048L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIHdpdGggYSBsaXN0IG9mIHRhc2tzIGFuZCBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICBoYXNoZXMgaXQgd2FudHMgdG8gYnVpbGQuCisgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGZhc3QgYW5kIHJldHVybnMgYSBsaXN0CisgICAgICAgICAgICBvZiB0aGUgdGFza3MgZm9yIHdoaWNoIGl0IGJlbGlldmVzIGluIGNhbiBvYnRhaW4gYXJ0aWZhY3RzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBOZXh0LCBmb3IgZWFjaCBvZiB0aGUgdGFza3MgdGhhdCB3ZXJlIHJldHVybmVkIGFzIHBvc3NpYmlsaXRpZXMsCisgICAgICAgICAgICBCaXRCYWtlIGV4ZWN1dGVzIGEgc2V0c2NlbmUgdmVyc2lvbiBvZiB0aGUgdGFzayB0aGF0IHRoZSBwb3NzaWJsZQorICAgICAgICAgICAgYXJ0aWZhY3QgY292ZXJzLgorICAgICAgICAgICAgU2V0c2NlbmUgdmVyc2lvbnMgb2YgYSB0YXNrIGhhdmUgdGhlIHN0cmluZyAiX3NldHNjZW5lIiBhcHBlbmRlZCB0byB0aGUKKyAgICAgICAgICAgIHRhc2sgbmFtZS4KKyAgICAgICAgICAgIFNvLCBmb3IgZXhhbXBsZSwgdGhlIHRhc2sgd2l0aCB0aGUgbmFtZSA8ZmlsZW5hbWU+eHh4PC9maWxlbmFtZT4gaGFzCisgICAgICAgICAgICBhIHNldHNjZW5lIHRhc2sgbmFtZWQgPGZpbGVuYW1lPnh4eF9zZXRzY2VuZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlIHNldHNjZW5lIHZlcnNpb24gb2YgdGhlIHRhc2sgZXhlY3V0ZXMgYW5kIHByb3ZpZGVzIHRoZSBuZWNlc3NhcnkKKyAgICAgICAgICAgIGFydGlmYWN0cyByZXR1cm5pbmcgZWl0aGVyIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgcHJldmlvdXNseSBtZW50aW9uZWQsIGFuIGFydGlmYWN0IGNhbiBjb3ZlciBtb3JlIHRoYW4gb25lIHRhc2suCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaXQgaXMgcG9pbnRsZXNzIHRvIG9idGFpbiBhIGNvbXBpbGVyIGlmIHlvdQorICAgICAgICAgICAgYWxyZWFkeSBoYXZlIHRoZSBjb21waWxlZCBiaW5hcnkuCisgICAgICAgICAgICBUbyBoYW5kbGUgdGhpcywgQml0QmFrZSBjYWxscyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9TRVRTQ0VORV9ERVBWQUxJRCc+PGZpbGVuYW1lPkJCX1NFVFNDRU5FX0RFUFZBTElEPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBmdW5jdGlvbiBmb3IgZWFjaCBzdWNjZXNzZnVsIHNldHNjZW5lIHRhc2sgdG8ga25vdyB3aGV0aGVyIG9yIG5vdCBpdCBuZWVkcworICAgICAgICAgICAgdG8gb2J0YWluIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhhdCB0YXNrLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGaW5hbGx5LCBhZnRlciBhbGwgdGhlIHNldHNjZW5lIHRhc2tzIGhhdmUgZXhlY3V0ZWQsIEJpdEJha2UgY2FsbHMgdGhlCisgICAgICAgICAgICBmdW5jdGlvbiBsaXN0ZWQgaW4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT04nPjxmaWxlbmFtZT5CQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT048L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHdpdGggdGhlIGxpc3Qgb2YgdGFza3MgQml0QmFrZSB0aGlua3MgaGFzIGJlZW4gImNvdmVyZWQiLgorICAgICAgICAgICAgVGhlIG1ldGFkYXRhIGNhbiB0aGVuIGVuc3VyZSB0aGF0IHRoaXMgbGlzdCBpcyBjb3JyZWN0IGFuZCBjYW4KKyAgICAgICAgICAgIGluZm9ybSBCaXRCYWtlIHRoYXQgaXQgd2FudHMgc3BlY2lmaWMgdGFza3MgdG8gYmUgcnVuIHJlZ2FyZGxlc3MKKyAgICAgICAgICAgIG9mIHRoZSBzZXRzY2VuZSByZXN1bHQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIHNldHNjZW5lIG1ldGFkYXRhIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Rhc2stY2hlY2tzdW1zLWFuZC1zZXRzY2VuZSc+VGFzayBDaGVja3N1bXMgYW5kIFNldHNjZW5lPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1mZXRjaGluZy54bWwgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1mZXRjaGluZy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE2OGNmYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWZldGNoaW5nLnhtbApAQCAtMCwwICsxLDc2NSBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCI+CisKKzxjaGFwdGVyPgorPHRpdGxlPkZpbGUgRG93bmxvYWQgU3VwcG9ydDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQml0QmFrZSdzIGZldGNoIG1vZHVsZSBpcyBhIHN0YW5kYWxvbmUgcGllY2Ugb2YgbGlicmFyeSBjb2RlCisgICAgICAgIHRoYXQgZGVhbHMgd2l0aCB0aGUgaW50cmljYWNpZXMgb2YgZG93bmxvYWRpbmcgc291cmNlIGNvZGUKKyAgICAgICAgYW5kIGZpbGVzIGZyb20gcmVtb3RlIHN5c3RlbXMuCisgICAgICAgIEZldGNoaW5nIHNvdXJjZSBjb2RlIGlzIG9uZSBvZiB0aGUgY29ybmVyc3RvbmVzIG9mIGJ1aWxkaW5nIHNvZnR3YXJlLgorICAgICAgICBBcyBzdWNoLCB0aGlzIG1vZHVsZSBmb3JtcyBhbiBpbXBvcnRhbnQgcGFydCBvZiBCaXRCYWtlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgY3VycmVudCBmZXRjaCBtb2R1bGUgaXMgY2FsbGVkICJmZXRjaDIiIGFuZCByZWZlcnMgdG8gdGhlCisgICAgICAgIGZhY3QgdGhhdCBpdCBpcyB0aGUgc2Vjb25kIG1ham9yIHZlcnNpb24gb2YgdGhlIEFQSS4KKyAgICAgICAgVGhlIG9yaWdpbmFsIHZlcnNpb24gaXMgb2Jzb2xldGUgYW5kIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgY29kZWJhc2UuCisgICAgICAgIFRodXMsIGluIGFsbCBjYXNlcywgImZldGNoIiByZWZlcnMgdG8gImZldGNoMiIgaW4gdGhpcworICAgICAgICBtYW51YWwuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3RoZS1kb3dubG9hZC1mZXRjaCc+CisgICAgICAgIDx0aXRsZT5UaGUgRG93bmxvYWQgKEZldGNoKTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIHRha2VzIHNldmVyYWwgc3RlcHMgd2hlbiBmZXRjaGluZyBzb3VyY2UgY29kZSBvciBmaWxlcy4KKyAgICAgICAgICAgIFRoZSBmZXRjaGVyIGNvZGViYXNlIGRlYWxzIHdpdGggdHdvIGRpc3RpbmN0IHByb2Nlc3NlcyBpbiBvcmRlcjoKKyAgICAgICAgICAgIG9idGFpbmluZyB0aGUgZmlsZXMgZnJvbSBzb21ld2hlcmUgKGNhY2hlZCBvciBvdGhlcndpc2UpCisgICAgICAgICAgICBhbmQgdGhlbiB1bnBhY2tpbmcgdGhvc2UgZmlsZXMgaW50byBhIHNwZWNpZmljIGxvY2F0aW9uIGFuZAorICAgICAgICAgICAgcGVyaGFwcyBpbiBhIHNwZWNpZmljIHdheS4KKyAgICAgICAgICAgIEdldHRpbmcgYW5kIHVucGFja2luZyB0aGUgZmlsZXMgaXMgb2Z0ZW4gb3B0aW9uYWxseSBmb2xsb3dlZAorICAgICAgICAgICAgYnkgcGF0Y2hpbmcuCisgICAgICAgICAgICBQYXRjaGluZywgaG93ZXZlciwgaXMgbm90IGNvdmVyZWQgYnkgdGhpcyBtb2R1bGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBjb2RlIHRvIGV4ZWN1dGUgdGhlIGZpcnN0IHBhcnQgb2YgdGhpcyBwcm9jZXNzLCBhIGZldGNoLAorICAgICAgICAgICAgbG9va3Mgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgc3JjX3VyaSA9IChkLmdldFZhcignU1JDX1VSSScsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goc3JjX3VyaSwgZCkKKyAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGlzIGNvZGUgc2V0cyB1cCBhbiBpbnN0YW5jZSBvZiB0aGUgZmV0Y2ggY2xhc3MuCisgICAgICAgICAgICBUaGUgaW5zdGFuY2UgdXNlcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIFVSTHMgZnJvbSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgYW5kIHRoZW4gY2FsbHMgdGhlIDxmaWxlbmFtZT5kb3dubG9hZDwvZmlsZW5hbWU+CisgICAgICAgICAgICBtZXRob2QgdG8gZG93bmxvYWQgdGhlIGZpbGVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgaW5zdGFudGlhdGlvbiBvZiB0aGUgZmV0Y2ggY2xhc3MgaXMgdXN1YWxseSBmb2xsb3dlZCBieToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdGRpciA9IGwuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICAgZmV0Y2hlci51bnBhY2socm9vdGRpcikKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgY29kZSB1bnBhY2tzIHRoZSBkb3dubG9hZGVkIGZpbGVzIHRvIHRoZQorICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IDxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBGb3IgY29udmVuaWVuY2UsIHRoZSBuYW1pbmcgaW4gdGhlc2UgZXhhbXBsZXMgbWF0Y2hlcworICAgICAgICAgICAgICAgIHRoZSB2YXJpYWJsZXMgdXNlZCBieSBPcGVuRW1iZWRkZWQuCisgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gc2VlIHRoZSBhYm92ZSBjb2RlIGluIGFjdGlvbiwgZXhhbWluZQorICAgICAgICAgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgY2xhc3MgZmlsZSA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgdmFyaWFibGVzIGFyZSBub3QgaGFyZGNvZGVkIGludG8gdGhlIGZldGNoZXIsIHNpbmNlIHRob3NlIGZldGNoZXIKKyAgICAgICAgICAgIG1ldGhvZHMgY2FuIGJlIChhbmQgYXJlKSBjYWxsZWQgd2l0aCBkaWZmZXJlbnQgdmFyaWFibGUgbmFtZXMuCisgICAgICAgICAgICBJbiBPcGVuRW1iZWRkZWQgZm9yIGV4YW1wbGUsIHRoZSBzaGFyZWQgc3RhdGUgKHNzdGF0ZSkgY29kZSB1c2VzCisgICAgICAgICAgICB0aGUgZmV0Y2ggbW9kdWxlIHRvIGZldGNoIHRoZSBzc3RhdGUgZmlsZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gdGhlIDxmaWxlbmFtZT5kb3dubG9hZCgpPC9maWxlbmFtZT4gbWV0aG9kIGlzIGNhbGxlZCwKKyAgICAgICAgICAgIEJpdEJha2UgdHJpZXMgdG8gcmVzb2x2ZSB0aGUgVVJMcyBieSBsb29raW5nIGZvciBzb3VyY2UgZmlsZXMKKyAgICAgICAgICAgIGluIGEgc3BlY2lmaWMgc2VhcmNoIG9yZGVyOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlByZS1taXJyb3IgU2l0ZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBmaXJzdCB1c2VzIHByZS1taXJyb3JzIHRvIHRyeSBhbmQgZmluZCBzb3VyY2UgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGxvY2F0aW9ucyBhcmUgZGVmaW5lZCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSRU1JUlJPUlMnPjxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNvdXJjZSBVUkk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSWYgcHJlLW1pcnJvcnMgZmFpbCwgQml0QmFrZSB1c2VzIHRoZSBvcmlnaW5hbCBVUkwgKGUuZyBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1pcnJvciBTaXRlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJZiBmZXRjaCBmYWlsdXJlcyBvY2N1ciwgQml0QmFrZSBuZXh0IHVzZXMgbWlycm9yIGxvY2F0aW9ucyBhcworICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUlSUk9SUyc+PGZpbGVuYW1lPk1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBlYWNoIFVSTCBwYXNzZWQgdG8gdGhlIGZldGNoZXIsIHRoZSBmZXRjaGVyCisgICAgICAgICAgICBjYWxscyB0aGUgc3VibW9kdWxlIHRoYXQgaGFuZGxlcyB0aGF0IHBhcnRpY3VsYXIgVVJMIHR5cGUuCisgICAgICAgICAgICBUaGlzIGJlaGF2aW9yIGNhbiBiZSB0aGUgc291cmNlIG9mIHNvbWUgY29uZnVzaW9uIHdoZW4geW91CisgICAgICAgICAgICBhcmUgcHJvdmlkaW5nIFVSTHMgZm9yIHRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+CisgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgdHdvIFVSTHM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9naXQvcG9reTtwcm90b2NvbD1naXQKKyAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvZ2l0L3Bva3k7cHJvdG9jb2w9aHR0cAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSW4gdGhlIGZvcm1lciBjYXNlLCB0aGUgVVJMIGlzIHBhc3NlZCB0byB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT53Z2V0PC9maWxlbmFtZT4gZmV0Y2hlciwgd2hpY2ggZG9lcyBub3QKKyAgICAgICAgICAgIHVuZGVyc3RhbmQgImdpdCIuCisgICAgICAgICAgICBUaGVyZWZvcmUsIHRoZSBsYXR0ZXIgY2FzZSBpcyB0aGUgY29ycmVjdCBmb3JtIHNpbmNlIHRoZQorICAgICAgICAgICAgR2l0IGZldGNoZXIgZG9lcyBrbm93IGhvdyB0byB1c2UgSFRUUCBhcyBhIHRyYW5zcG9ydC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlcyB0aGF0IHNob3cgY29tbW9ubHkgdXNlZCBtaXJyb3IKKyAgICAgICAgICAgIGRlZmluaXRpb25zOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVNSVJST1JTID89ICJcCisgICAgICAgICBienI6Ly8uKi8uKiAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCisgICAgICAgICBjdnM6Ly8uKi8uKiAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCisgICAgICAgICBnaXQ6Ly8uKi8uKiAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCisgICAgICAgICBoZzovLy4qLy4qICAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCisgICAgICAgICBvc2M6Ly8uKi8uKiAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCisgICAgICAgICBwNDovLy4qLy4qICAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCisgICAgICAgICBzdm46Ly8uKi8uKiAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiIKKworICAgICBNSVJST1JTID0rICJcCisgICAgICAgICBmdHA6Ly8uKi8uKiAgICAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCisgICAgICAgICBodHRwOi8vLiovLiogICAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCisgICAgICAgICBodHRwczovLy4qLy4qICAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEl0IGlzIHVzZWZ1bCB0byBub3RlIHRoYXQgQml0QmFrZSBzdXBwb3J0cworICAgICAgICAgICAgY3Jvc3MtVVJMcy4KKyAgICAgICAgICAgIEl0IGlzIHBvc3NpYmxlIHRvIG1pcnJvciBhIEdpdCByZXBvc2l0b3J5IG9uIGFuIEhUVFAKKyAgICAgICAgICAgIHNlcnZlciBhcyBhIHRhcmJhbGwuCisgICAgICAgICAgICBUaGlzIGlzIHdoYXQgdGhlIDxmaWxlbmFtZT5naXQ6Ly88L2ZpbGVuYW1lPiBtYXBwaW5nIGluCisgICAgICAgICAgICB0aGUgcHJldmlvdXMgZXhhbXBsZSBkb2VzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTaW5jZSBuZXR3b3JrIGFjY2Vzc2VzIGFyZSBzbG93LCBCaXRiYWtlIG1haW50YWlucyBhCisgICAgICAgICAgICBjYWNoZSBvZiBmaWxlcyBkb3dubG9hZGVkIGZyb20gdGhlIG5ldHdvcmsuCisgICAgICAgICAgICBBbnkgc291cmNlIGZpbGVzIHRoYXQgYXJlIG5vdCBsb2NhbCAoaS5lLgorICAgICAgICAgICAgZG93bmxvYWRlZCBmcm9tIHRoZSBJbnRlcm5ldCkgYXJlIHBsYWNlZCBpbnRvIHRoZSBkb3dubG9hZAorICAgICAgICAgICAgZGlyZWN0b3J5LCB3aGljaCBpcyBzcGVjaWZpZWQgYnkgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRmlsZSBpbnRlZ3JpdHkgaXMgb2Yga2V5IGltcG9ydGFuY2UgZm9yIHJlcHJvZHVjaW5nIGJ1aWxkcy4KKyAgICAgICAgICAgIEZvciBub24tbG9jYWwgYXJjaGl2ZSBkb3dubG9hZHMsIHRoZSBmZXRjaGVyIGNvZGUgY2FuIHZlcmlmeQorICAgICAgICAgICAgU0hBLTI1NiBhbmQgTUQ1IGNoZWNrc3VtcyB0byBlbnN1cmUgdGhlIGFyY2hpdmVzIGhhdmUgYmVlbgorICAgICAgICAgICAgZG93bmxvYWRlZCBjb3JyZWN0bHkuCisgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgdGhlc2UgY2hlY2tzdW1zIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiB2YXJpYWJsZSB3aXRoIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAgICAgdmFyZmxhZ3MgYXMgZm9sbG93czoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSVttZDVzdW1dID0gIjxyZXBsYWNlYWJsZT52YWx1ZTwvcmVwbGFjZWFibGU+IgorICAgICBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiPHJlcGxhY2VhYmxlPnZhbHVlPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBZb3UgY2FuIGFsc28gc3BlY2lmeSB0aGUgY2hlY2tzdW1zIGFzIHBhcmFtZXRlcnMgb24gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IGFzIHNob3duIGJlbG93OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImh0dHA6Ly9leGFtcGxlLmNvbS9mb29iYXIudGFyLmJ6MjttZDVzdW09NGE4ZTBmMjM3ZTk2MWZkNzc4NWQxOWQwN2ZkYjk5NGQiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJZiBtdWx0aXBsZSBVUklzIGV4aXN0LCB5b3UgY2FuIHNwZWNpZnkgdGhlIGNoZWNrc3VtcyBlaXRoZXIKKyAgICAgICAgICAgIGRpcmVjdGx5IGFzIGluIHRoZSBwcmV2aW91cyBleGFtcGxlLCBvciB5b3UgY2FuIG5hbWUgdGhlIFVSTHMuCisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN5bnRheCBzaG93cyBob3cgeW91IG5hbWUgdGhlIFVSSXM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiaHR0cDovL2V4YW1wbGUuY29tL2Zvb2Jhci50YXIuYnoyO25hbWU9Zm9vIgorICAgICBTUkNfVVJJW2Zvby5tZDVzdW1dID0gNGE4ZTBmMjM3ZTk2MWZkNzc4NWQxOWQwN2ZkYjk5NGQKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEFmdGVyIGEgZmlsZSBoYXMgYmVlbiBkb3dubG9hZGVkIGFuZCBoYXMgaGFkIGl0cyBjaGVja3N1bSBjaGVja2VkLAorICAgICAgICAgICAgYSAiLmRvbmUiIHN0YW1wIGlzIHBsYWNlZCBpbiA8ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT4uCisgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhpcyBzdGFtcCBkdXJpbmcgc3Vic2VxdWVudCBidWlsZHMgdG8gYXZvaWQKKyAgICAgICAgICAgIGRvd25sb2FkaW5nIG9yIGNvbXBhcmluZyBhIGNoZWNrc3VtIGZvciB0aGUgZmlsZSBhZ2Fpbi4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEl0IGlzIGFzc3VtZWQgdGhhdCBsb2NhbCBzdG9yYWdlIGlzIHNhZmUgZnJvbSBkYXRhIGNvcnJ1cHRpb24uCisgICAgICAgICAgICAgICAgSWYgdGhpcyB3ZXJlIG5vdCB0aGUgY2FzZSwgdGhlcmUgd291bGQgYmUgYmlnZ2VyIGlzc3VlcyB0byB3b3JyeSBhYm91dC4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9TVFJJQ1RfQ0hFQ0tTVU0nPjxmaWxlbmFtZT5CQl9TVFJJQ1RfQ0hFQ0tTVU08L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGlzIHNldCwgYW55IGRvd25sb2FkIHdpdGhvdXQgYSBjaGVja3N1bSB0cmlnZ2VycyBhbgorICAgICAgICAgICAgZXJyb3IgbWVzc2FnZS4KKyAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX05PX05FVFdPUksnPjxmaWxlbmFtZT5CQl9OT19ORVRXT1JLPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBtYWtlIGFueSBhdHRlbXB0ZWQgbmV0d29yayBhY2Nlc3MgYSBmYXRhbAorICAgICAgICAgICAgZXJyb3IsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgY2hlY2tpbmcgdGhhdCBtaXJyb3JzIGFyZSBjb21wbGV0ZQorICAgICAgICAgICAgYXMgd2VsbCBhcyBvdGhlciB0aGluZ3MuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYmItdGhlLXVucGFjayc+CisgICAgICAgIDx0aXRsZT5UaGUgVW5wYWNrPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSB1bnBhY2sgcHJvY2VzcyB1c3VhbGx5IGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIGRvd25sb2FkLgorICAgICAgICAgICAgRm9yIGFsbCBVUkxzIGV4Y2VwdCBHaXQgVVJMcywgQml0QmFrZSB1c2VzIHRoZSBjb21tb24KKyAgICAgICAgICAgIDxmaWxlbmFtZT51bnBhY2s8L2ZpbGVuYW1lPiBtZXRob2QuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgbnVtYmVyIG9mIHBhcmFtZXRlcnMgZXhpc3QgdGhhdCB5b3UgY2FuIHNwZWNpZnkgd2l0aGluIHRoZQorICAgICAgICAgICAgVVJMIHRvIGdvdmVybiB0aGUgYmVoYXZpb3Igb2YgdGhlIHVucGFjayBzdGFnZToKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz51bnBhY2s6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgd2hldGhlciB0aGUgVVJMIGNvbXBvbmVudHMgYXJlIHVucGFja2VkLgorICAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gIjEiLCB3aGljaCBpcyB0aGUgZGVmYXVsdCwgdGhlIGNvbXBvbmVudHMKKyAgICAgICAgICAgICAgICAgICAgYXJlIHVucGFja2VkLgorICAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gIjAiLCB0aGUgdW5wYWNrIHN0YWdlIGxlYXZlcyB0aGUgZmlsZSBhbG9uZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZnVsIHdoZW4geW91IHdhbnQgYW4gYXJjaGl2ZSB0byBiZQorICAgICAgICAgICAgICAgICAgICBjb3BpZWQgaW4gYW5kIG5vdCBiZSB1bnBhY2tlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5kb3M6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQXBwbGllcyB0byA8ZmlsZW5hbWU+LnppcDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmphcjwvZmlsZW5hbWU+IGZpbGVzIGFuZCBzcGVjaWZpZXMgd2hldGhlciB0bworICAgICAgICAgICAgICAgICAgICB1c2UgRE9TIGxpbmUgZW5kaW5nIGNvbnZlcnNpb24gb24gdGV4dCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5iYXNlcGF0aDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdHMgdGhlIHVucGFjayBzdGFnZSB0byBzdHJpcCB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIGZyb20gdGhlIHNvdXJjZSBwYXRoIHdoZW4gdW5wYWNraW5nLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnN1YmRpcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBVbnBhY2tzIHRoZSBzcGVjaWZpYyBVUkwgdG8gdGhlIHNwZWNpZmllZCBzdWJkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIHRoZSByb290IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIFRoZSB1bnBhY2sgY2FsbCBhdXRvbWF0aWNhbGx5IGRlY29tcHJlc3NlcyBhbmQgZXh0cmFjdHMgZmlsZXMKKyAgICAgICAgICAgIHdpdGggIi5aIiwgIi56IiwgIi5neiIsICIueHoiLCAiLnppcCIsICIuamFyIiwgIi5pcGsiLCAiLnJwbSIuCisgICAgICAgICAgICAiLnNycG0iLCAiLmRlYiIgYW5kICIuYnoyIiBleHRlbnNpb25zIGFzIHdlbGwgYXMgdmFyaW91cyBjb21iaW5hdGlvbnMKKyAgICAgICAgICAgIG9mIHRhcmJhbGwgZXh0ZW5zaW9ucy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgbWVudGlvbmVkLCB0aGUgR2l0IGZldGNoZXIgaGFzIGl0cyBvd24gdW5wYWNrIG1ldGhvZCB0aGF0CisgICAgICAgICAgICBpcyBvcHRpbWl6ZWQgdG8gd29yayB3aXRoIEdpdCB0cmVlcy4KKyAgICAgICAgICAgIEJhc2ljYWxseSwgdGhpcyBtZXRob2Qgd29ya3MgYnkgY2xvbmluZyB0aGUgdHJlZSBpbnRvIHRoZSBmaW5hbAorICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgVGhlIHByb2Nlc3MgaXMgY29tcGxldGVkIHVzaW5nIHJlZmVyZW5jZXMgc28gdGhhdCB0aGVyZSBpcworICAgICAgICAgICAgb25seSBvbmUgY2VudHJhbCBjb3B5IG9mIHRoZSBHaXQgbWV0YWRhdGEgbmVlZGVkLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2JiLWZldGNoZXJzJz4KKyAgICAgICAgPHRpdGxlPkZldGNoZXJzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIG1lbnRpb25lZCBlYXJsaWVyLCB0aGUgVVJMIHByZWZpeCBkZXRlcm1pbmVzIHdoaWNoCisgICAgICAgICAgICBmZXRjaGVyIHN1Ym1vZHVsZSBCaXRCYWtlIHVzZXMuCisgICAgICAgICAgICBFYWNoIHN1Ym1vZHVsZSBjYW4gc3VwcG9ydCBkaWZmZXJlbnQgVVJMIHBhcmFtZXRlcnMsCisgICAgICAgICAgICB3aGljaCBhcmUgZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbG9jYWwtZmlsZS1mZXRjaGVyJz4KKyAgICAgICAgICAgIDx0aXRsZT5Mb2NhbCBmaWxlIGZldGNoZXIgKDxmaWxlbmFtZT5maWxlOi8vPC9maWxlbmFtZT4pPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzdWJtb2R1bGUgaGFuZGxlcyBVUkxzIHRoYXQgYmVnaW4gd2l0aAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5maWxlOi8vPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhlIGZpbGVuYW1lIHlvdSBzcGVjaWZ5IHdpdGhpbiB0aGUgVVJMIGNhbiBiZQorICAgICAgICAgICAgICAgIGVpdGhlciBhbiBhYnNvbHV0ZSBvciByZWxhdGl2ZSBwYXRoIHRvIGEgZmlsZS4KKyAgICAgICAgICAgICAgICBJZiB0aGUgZmlsZW5hbWUgaXMgcmVsYXRpdmUsIHRoZSBjb250ZW50cyBvZiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVNQQVRIJz48ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgaXMgdXNlZCBpbiB0aGUgc2FtZSB3YXkKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IGlzIHVzZWQgdG8gZmluZCBleGVjdXRhYmxlcy4KKyAgICAgICAgICAgICAgICBGYWlsaW5nIHRoYXQsCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTRElSJz48ZmlsZW5hbWU+RklMRVNESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBpcyB1c2VkIHRvIGZpbmQgdGhlIGFwcHJvcHJpYXRlIHJlbGF0aXZlIGZpbGUuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU0RJUjwvZmlsZW5hbWU+IGlzIGRlcHJlY2F0ZWQgYW5kIGNhbgorICAgICAgICAgICAgICAgICAgICBiZSByZXBsYWNlZCB3aXRoIDxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSA8ZmlsZW5hbWU+RklMRVNESVI8L2ZpbGVuYW1lPiBpcyBsaWtlbHkgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCwgeW91IHNob3VsZCBub3QgdXNlIHRoaXMgdmFyaWFibGUgaW4gYW55IG5ldyBjb2RlLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICBJZiB0aGUgZmlsZSBjYW5ub3QgYmUgZm91bmQsIGl0IGlzIGFzc3VtZWQgdGhhdCBpdCBpcyBhdmFpbGFibGUgaW4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgYnkgdGhlIHRpbWUgdGhlIDxmaWxlbmFtZT5kb3dubG9hZCgpPC9maWxlbmFtZT4gbWV0aG9kIGlzIGNhbGxlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IHNwZWNpZnkgYSBkaXJlY3RvcnksIHRoZSBlbnRpcmUgZGlyZWN0b3J5IGlzCisgICAgICAgICAgICAgICAgdW5wYWNrZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIGEgY291cGxlIG9mIGV4YW1wbGUgVVJMcywgdGhlIGZpcnN0IHJlbGF0aXZlIGFuZAorICAgICAgICAgICAgICAgIHRoZSBzZWNvbmQgYWJzb2x1dGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImZpbGU6Ly9yZWxhdGl2ZWZpbGUucGF0Y2giCisgICAgIFNSQ19VUkkgPSAiZmlsZTovLy9Vc2Vycy9pY2gvdmVyeV9pbXBvcnRhbnRfc29mdHdhcmUiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2h0dHAtZnRwLWZldGNoZXInPgorICAgICAgICAgICAgPHRpdGxlPkhUVFAvRlRQIHdnZXQgZmV0Y2hlciAoPGZpbGVuYW1lPmh0dHA6Ly88L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmZ0cDovLzwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+aHR0cHM6Ly88L2ZpbGVuYW1lPik8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGZldGNoZXIgb2J0YWlucyBmaWxlcyBmcm9tIHdlYiBhbmQgRlRQIHNlcnZlcnMuCisgICAgICAgICAgICAgICAgSW50ZXJuYWxseSwgdGhlIGZldGNoZXIgdXNlcyB0aGUgd2dldCB1dGlsaXR5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZXhlY3V0YWJsZSBhbmQgcGFyYW1ldGVycyB1c2VkIGFyZSBzcGVjaWZpZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZFVENIQ01EX3dnZXQ8L2ZpbGVuYW1lPiB2YXJpYWJsZSwgd2hpY2ggZGVmYXVsdHMKKyAgICAgICAgICAgICAgICB0byBzZW5zaWJsZSB2YWx1ZXMuCisgICAgICAgICAgICAgICAgVGhlIGZldGNoZXIgc3VwcG9ydHMgYSBwYXJhbWV0ZXIgImRvd25sb2FkZmlsZW5hbWUiIHRoYXQKKyAgICAgICAgICAgICAgICBhbGxvd3MgdGhlIG5hbWUgb2YgdGhlIGRvd25sb2FkZWQgZmlsZSB0byBiZSBzcGVjaWZpZWQuCisgICAgICAgICAgICAgICAgU3BlY2lmeWluZyB0aGUgbmFtZSBvZiB0aGUgZG93bmxvYWRlZCBmaWxlIGlzIHVzZWZ1bAorICAgICAgICAgICAgICAgIGZvciBhdm9pZGluZyBjb2xsaXNpb25zIGluCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURMX0RJUic+PGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHdoZW4gZGVhbGluZyB3aXRoIG11bHRpcGxlIGZpbGVzIHRoYXQgaGF2ZSB0aGUgc2FtZSBuYW1lLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTb21lIGV4YW1wbGUgVVJMcyBhcmUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiaHR0cDovL29lLmhhbmRoZWxkcy5vcmcvbm90X3RoZXJlLmFhYyIKKyAgICAgU1JDX1VSSSA9ICJmdHA6Ly9vZS5oYW5kaGVsZHMub3JnL25vdF90aGVyZV9hc193ZWxsLmFhYyIKKyAgICAgU1JDX1VSSSA9ICJmdHA6Ly95b3VAb2UuaGFuZGhlbGRzLm9yZy9ob21lL3lvdS9zZWNyZXQucGxhbiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgIEJlY2F1c2UgVVJMIHBhcmFtZXRlcnMgYXJlIGRlbGltaXRlZCBieSBzZW1pLWNvbG9ucywgdGhpcyBjYW4KKyAgICAgICAgICAgICAgIGludHJvZHVjZSBhbWJpZ3VpdHkgd2hlbiBwYXJzaW5nIFVSTHMgdGhhdCBhbHNvIGNvbnRhaW4gc2VtaS1jb2xvbnMsCisgICAgICAgICAgICAgICBmb3IgZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiaHR0cDovL2FiYzEyMy5vcmcvZ2l0Lz9wPWdjYy9nY2MuZ2l0O2E9c25hcHNob3Q7aD1hNWRkNDciCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgU3VjaCBVUkxzIHNob3VsZCBzaG91bGQgYmUgbW9kaWZpZWQgYnkgcmVwbGFjaW5nIHNlbWktY29sb25zIHdpdGggJyZhbXA7JyBjaGFyYWN0ZXJzOgorICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImh0dHA6Ly9hYmMxMjMub3JnL2dpdC8/cD1nY2MvZ2NjLmdpdCZhbXA7YT1zbmFwc2hvdCZhbXA7aD1hNWRkNDciCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIG1vc3QgY2FzZXMgdGhpcyBzaG91bGQgd29yay4gVHJlYXRpbmcgc2VtaS1jb2xvbnMgYW5kICcmYW1wOycgaW4gcXVlcmllcworICAgICAgICAgICAgICAgIGlkZW50aWNhbGx5IGlzIHJlY29tbWVuZGVkIGJ5IHRoZSBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtIChXM0MpLgorICAgICAgICAgICAgICAgIE5vdGUgdGhhdCBkdWUgdG8gdGhlIG5hdHVyZSBvZiB0aGUgVVJMLCB5b3UgbWF5IGhhdmUgdG8gc3BlY2lmeSB0aGUgbmFtZQorICAgICAgICAgICAgICAgIG9mIHRoZSBkb3dubG9hZGVkIGZpbGUgYXMgd2VsbDoKKyAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImh0dHA6Ly9hYmMxMjMub3JnL2dpdC8/cD1nY2MvZ2NjLmdpdCZhbXA7YT1zbmFwc2hvdCZhbXA7aD1hNWRkNDc7ZG93bmxvYWRmaWxlbmFtZT1teWZpbGUuYnoyIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjdnMtZmV0Y2hlcic+CisgICAgICAgICAgICA8dGl0bGU+Q1ZTIGZldGNoZXIgKDxmaWxlbmFtZT4oY3ZzOi8vPC9maWxlbmFtZT4pPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzdWJtb2R1bGUgaGFuZGxlcyBjaGVja2luZyBvdXQgZmlsZXMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICBDVlMgdmVyc2lvbiBjb250cm9sIHN5c3RlbS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGNvbmZpZ3VyZSBpdCB1c2luZyBhIG51bWJlciBvZiBkaWZmZXJlbnQgdmFyaWFibGVzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPkZFVENIQ01EX2N2czwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgZXhlY3V0YWJsZSB0byB1c2Ugd2hlbiBydW5uaW5nCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmN2czwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG5hbWUgaXMgdXN1YWxseSAiY3ZzIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5TUkNEQVRFPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkYXRlIHRvIHVzZSB3aGVuIGZldGNoaW5nIHRoZSBDVlMgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgICAgICAgICBBIHNwZWNpYWwgdmFsdWUgb2YgIm5vdyIgY2F1c2VzIHRoZSBjaGVja291dCB0bworICAgICAgICAgICAgICAgICAgICAgICAgYmUgdXBkYXRlZCBvbiBldmVyeSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxsaW5rIGxpbmtlbmQ9J3Zhci1DVlNESVInPjxmaWxlbmFtZT5DVlNESVI8L2ZpbGVuYW1lPjwvbGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB3aGVyZSBhIHRlbXBvcmFyeSBjaGVja291dCBpcyBzYXZlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhdGlvbiBpcyBvZnRlbiA8ZmlsZW5hbWU+RExfRElSL2N2czwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPkNWU19QUk9YWV9IT1NUPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIHRvIHVzZSBhcyBhICJwcm94eT0iIHBhcmFtZXRlciB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jdnM8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPkNWU19QUk9YWV9QT1JUPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwb3J0IG51bWJlciB0byB1c2UgYXMgYSAicHJveHlwb3J0PSIgcGFyYW1ldGVyIHRvCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmN2czwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICBBcyB3ZWxsIGFzIHRoZSBzdGFuZGFyZCB1c2VybmFtZSBhbmQgcGFzc3dvcmQgVVJMIHN5bnRheCwKKyAgICAgICAgICAgICAgICB5b3UgY2FuIGFsc28gY29uZmlndXJlIHRoZSBmZXRjaGVyIHdpdGggdmFyaW91cyBVUkwgcGFyYW1ldGVyczoKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHN1cHBvcnRlZCBwYXJhbWV0ZXJzIGFyZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Im1ldGhvZCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwcm90b2NvbCBvdmVyIHdoaWNoIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIENWUyBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIHByb3RvY29sIGlzICJwc2VydmVyIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmICJtZXRob2QiIGlzIHNldCB0byAiZXh0IiwgQml0QmFrZSBleGFtaW5lcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICJyc2giIHBhcmFtZXRlciBhbmQgc2V0cyA8ZmlsZW5hbWU+Q1ZTX1JTSDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgImRpciIgZm9yIGxvY2FsIGRpcmVjdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Im1vZHVsZSI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbW9kdWxlIHRvIGNoZWNrIG91dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHN1cHBseSB0aGlzIHBhcmFtZXRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJ0YWciOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZXMgd2hpY2ggQ1ZTIFRBRyBzaG91bGQgYmUgdXNlZCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjaGVja291dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBUQUcgaXMgZW1wdHkuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iZGF0ZSI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGRhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiBubyAiZGF0ZSIgaXMgc3BlY2lmaWVkLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNEQVRFJz48ZmlsZW5hbWU+U1JDREFURTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGNvbmZpZ3VyYXRpb24gaXMgdXNlZCB0byBjaGVja291dCBhIHNwZWNpZmljIGRhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lhbCB2YWx1ZSBvZiAibm93IiBjYXVzZXMgdGhlIGNoZWNrb3V0IHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkIG9uIGV2ZXJ5IGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ImxvY2FsZGlyIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlZCB0byByZW5hbWUgdGhlIG1vZHVsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEVmZmVjdGl2ZWx5LCB5b3UgYXJlIHJlbmFtaW5nIHRoZSBvdXRwdXQgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICB0byB3aGljaCB0aGUgbW9kdWxlIGlzIHVucGFja2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGFyZSBmb3JjaW5nIHRoZSBtb2R1bGUgaW50byBhIHNwZWNpYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSByZWxhdGl2ZSB0bworICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNWU0RJUic+PGZpbGVuYW1lPkNWU0RJUjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJyc2giPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgIm1ldGhvZCIgcGFyYW1ldGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InNjbWRhdGEiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBDYXVzZXMgdGhlIENWUyBtZXRhZGF0YSB0byBiZSBtYWludGFpbmVkIGluIHRoZSB0YXJiYWxsCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmV0Y2hlciBjcmVhdGVzIHdoZW4gc2V0IHRvICJrZWVwIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0YXJiYWxsIGlzIGV4cGFuZGVkIGludG8gdGhlIHdvcmsgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIENWUyBtZXRhZGF0YSBpcyByZW1vdmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ImZ1bGxwYXRoIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgd2hldGhlciB0aGUgcmVzdWx0aW5nIGNoZWNrb3V0IGlzIGF0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlIGxldmVsLCB3aGljaCBpcyB0aGUgZGVmYXVsdCwgb3IgaXMgYXQgZGVlcGVyCisgICAgICAgICAgICAgICAgICAgICAgICBwYXRocy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJub3JlY3Vyc2UiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBDYXVzZXMgdGhlIGZldGNoZXIgdG8gb25seSBjaGVja291dCB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgd2l0aCBubyByZWN1cnNlIGludG8gYW55IHN1YmRpcmVjdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InBvcnQiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcG9ydCB0byB3aGljaCB0aGUgQ1ZTIHNlcnZlciBjb25uZWN0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIFNvbWUgZXhhbXBsZSBVUkxzIGFyZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJjdnM6Ly9DVlNST09UO21vZHVsZT1teW1vZHVsZTt0YWc9c29tZS12ZXJzaW9uO21ldGhvZD1leHQiCisgICAgIFNSQ19VUkkgPSAiY3ZzOi8vQ1ZTUk9PVDttb2R1bGU9bXltb2R1bGU7ZGF0ZT0yMDA2MDEyNjtsb2NhbGRpcj11c2V0aGF0IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzdm4tZmV0Y2hlcic+CisgICAgICAgICAgICA8dGl0bGU+U3VidmVyc2lvbiAoU1ZOKSBGZXRjaGVyICg8ZmlsZW5hbWU+c3ZuOi8vPC9maWxlbmFtZT4pPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBmZXRjaGVyIHN1Ym1vZHVsZSBmZXRjaGVzIGNvZGUgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICBTdWJ2ZXJzaW9uIHNvdXJjZSBjb250cm9sIHN5c3RlbS4KKyAgICAgICAgICAgICAgICBUaGUgZXhlY3V0YWJsZSB1c2VkIGlzIHNwZWNpZmllZCBieQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GRVRDSENNRF9zdm48L2ZpbGVuYW1lPiwgd2hpY2ggZGVmYXVsdHMKKyAgICAgICAgICAgICAgICB0byAic3ZuIi4KKyAgICAgICAgICAgICAgICBUaGUgZmV0Y2hlcidzIHRlbXBvcmFyeSB3b3JraW5nIGRpcmVjdG9yeSBpcyBzZXQgYnkKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1ZORElSJz48ZmlsZW5hbWU+U1ZORElSPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIHdoaWNoIGlzIHVzdWFsbHkgPGZpbGVuYW1lPkRMX0RJUi9zdm48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHN1cHBvcnRlZCBwYXJhbWV0ZXJzIGFyZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Im1vZHVsZSI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBzdm4gbW9kdWxlIHRvIGNoZWNrb3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgcHJvdmlkZSB0aGlzIHBhcmFtZXRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdGhpbmsgb2YgdGhpcyBwYXJhbWV0ZXIgYXMgdGhlIHRvcC1sZXZlbAorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IG9mIHRoZSByZXBvc2l0b3J5IGRhdGEgeW91IHdhbnQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4icHJvdG9jb2wiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcHJvdG9jb2wgdG8gdXNlLCB3aGljaCBkZWZhdWx0cyB0byAic3ZuIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIE90aGVyIG9wdGlvbnMgYXJlICJzdm4rc3NoIiBhbmQgInJzaCIuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgInJzaCIsIHRoZSAicnNoIiBwYXJhbWV0ZXIgaXMgYWxzbyB1c2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InJldiI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZXZpc2lvbiBvZiB0aGUgc291cmNlIGNvZGUgdG8gY2hlY2tvdXQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iZGF0ZSI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkYXRlIG9mIHRoZSBzb3VyY2UgY29kZSB0byBjaGVja291dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmljIHJldmlzaW9ucyBhcmUgZ2VuZXJhbGx5IG11Y2ggc2FmZXIgdG8gY2hlY2tvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIGJ5IGRhdGUgYXMgdGhleSBkbyBub3QgaW52b2x2ZSB0aW1lem9uZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIHRoZXkgYXJlIG11Y2ggbW9yZSBkZXRlcm1pbmlzdGljKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJzY21kYXRhIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHRoZSDigJwuc3Zu4oCdIGRpcmVjdG9yaWVzIHRvIGJlIGF2YWlsYWJsZSBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGUtdGltZSB3aGVuIHNldCB0byAia2VlcCIuCisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGVzZSBkaXJlY3RvcmllcyBhcmUgcmVtb3ZlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJ0cmFuc3BvcnR1c2VyIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiByZXF1aXJlZCwgc2V0cyB0aGUgdXNlcm5hbWUgZm9yIHRoZSB0cmFuc3BvcnQuCisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIHBhcmFtZXRlciBpcyBlbXB0eS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0cmFuc3BvcnQgdXNlcm5hbWUgaXMgZGlmZmVyZW50IHRoYW4gdGhlIHVzZXJuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIGluIHRoZSBtYWluIFVSTCwgd2hpY2ggaXMgcGFzc2VkIHRvIHRoZSBzdWJ2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSB0d28gZXhhbXBsZXMgdXNpbmcgc3ZuOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJzdm46Ly9zdm4ub2UuaGFuZGhlbGRzLm9yZy9zdm47bW9kdWxlPXZpcDtwcm90bz1odHRwO3Jldj02NjciCisgICAgIFNSQ19VUkkgPSAic3ZuOi8vc3ZuLm9lLmhhbmRoZWxkcy5vcmcvc3ZuLzttb2R1bGU9b3BpZTtwcm90bz1zdm4rc3NoO2RhdGU9MjAwNjAxMjYiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2dpdC1mZXRjaGVyJz4KKyAgICAgICAgICAgIDx0aXRsZT5HaXQgRmV0Y2hlciAoPGZpbGVuYW1lPmdpdDovLzwvZmlsZW5hbWU+KTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgZmV0Y2hlciBzdWJtb2R1bGUgZmV0Y2hlcyBjb2RlIGZyb20gdGhlIEdpdAorICAgICAgICAgICAgICAgIHNvdXJjZSBjb250cm9sIHN5c3RlbS4KKyAgICAgICAgICAgICAgICBUaGUgZmV0Y2hlciB3b3JrcyBieSBjcmVhdGluZyBhIGJhcmUgY2xvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgcmVtb3RlIGludG8KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItR0lURElSJz48ZmlsZW5hbWU+R0lURElSPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIHdoaWNoIGlzIHVzdWFsbHkgPGZpbGVuYW1lPkRMX0RJUi9naXQyPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhpcyBiYXJlIGNsb25lIGlzIHRoZW4gY2xvbmVkIGludG8gdGhlIHdvcmsgZGlyZWN0b3J5IGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICB1bnBhY2sgc3RhZ2Ugd2hlbiBhIHNwZWNpZmljIHRyZWUgaXMgY2hlY2tlZCBvdXQuCisgICAgICAgICAgICAgICAgVGhpcyBpcyBkb25lIHVzaW5nIGFsdGVybmF0ZXMgYW5kIGJ5IHJlZmVyZW5jZSB0bworICAgICAgICAgICAgICAgIG1pbmltaXplIHRoZSBhbW91bnQgb2YgZHVwbGljYXRlIGRhdGEgb24gdGhlIGRpc2sgYW5kCisgICAgICAgICAgICAgICAgbWFrZSB0aGUgdW5wYWNrIHByb2Nlc3MgZmFzdC4KKyAgICAgICAgICAgICAgICBUaGUgZXhlY3V0YWJsZSB1c2VkIGNhbiBiZSBzZXQgd2l0aAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GRVRDSENNRF9naXQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBmZXRjaGVyIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJwcm90b2NvbCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwcm90b2NvbCB1c2VkIHRvIGZldGNoIHRoZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzICJnaXQiIHdoZW4gYSBob3N0bmFtZSBpcyBzZXQuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiBhIGhvc3RuYW1lIGlzIG5vdCBzZXQsIHRoZSBHaXQgcHJvdG9jb2wgaXMgImZpbGUiLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHVzZSAiaHR0cCIsICJodHRwcyIsICJzc2giIGFuZCAicnN5bmMiLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Im5vY2hlY2tvdXQiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUZWxscyB0aGUgZmV0Y2hlciB0byBub3QgY2hlY2tvdXQgc291cmNlIGNvZGUgd2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgdW5wYWNraW5nIHdoZW4gc2V0IHRvICIxIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNldCB0aGlzIG9wdGlvbiBmb3IgdGhlIFVSTCB3aGVyZSB0aGVyZSBpcyBhIGN1c3RvbQorICAgICAgICAgICAgICAgICAgICAgICAgcm91dGluZSB0byBjaGVja291dCBjb2RlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMgIjAiLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InJlYmFzZWFibGUiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBJbmRpY2F0ZXMgdGhhdCB0aGUgdXBzdHJlYW0gR2l0IHJlcG9zaXRvcnkgY2FuIGJlIHJlYmFzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHNldCB0aGlzIHBhcmFtZXRlciB0byAiMSIgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9ucyBjYW4gYmVjb21lIGRldGFjaGVkIGZyb20gYnJhbmNoZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBzb3VyY2UgbWlycm9yIHRhcmJhbGwgaXMgZG9uZSBwZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uLCB3aGljaCBoYXMgYSBsb3NzIG9mIGVmZmljaWVuY3kuCisgICAgICAgICAgICAgICAgICAgICAgICBSZWJhc2luZyB0aGUgdXBzdHJlYW0gR2l0IHJlcG9zaXRvcnkgY291bGQgY2F1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50IHJldmlzaW9uIHRvIGRpc2FwcGVhciBmcm9tIHRoZSB1cHN0cmVhbSByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gcmVtaW5kcyB0aGUgZmV0Y2hlciB0byBwcmVzZXJ2ZSB0aGUgbG9jYWwgY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhcmVmdWxseSBmb3IgZnV0dXJlIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlciBpcyAiMCIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4ibm9icmFuY2giOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUZWxscyB0aGUgZmV0Y2hlciB0byBub3QgY2hlY2sgdGhlIFNIQSB2YWxpZGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGJyYW5jaCB3aGVuIHNldCB0byAiMSIuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyAiMCIuCisgICAgICAgICAgICAgICAgICAgICAgICBTZXQgdGhpcyBvcHRpb24gZm9yIHRoZSByZWNpcGUgdGhhdCByZWZlcnMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb21taXQgdGhhdCBpcyB2YWxpZCBmb3IgYSB0YWcgaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJyYW5jaC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJiYXJlY2xvbmUiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUZWxscyB0aGUgZmV0Y2hlciB0byBjbG9uZSBhIGJhcmUgY2xvbmUgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSB3aXRob3V0IGNoZWNraW5nIG91dCBhIHdvcmtpbmcgdHJlZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgdGhlIHJhdyBHaXQgbWV0YWRhdGEgaXMgcHJvdmlkZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpbXBsaWVzIHRoZSAibm9jaGVja291dCIgcGFyYW1ldGVyIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iYnJhbmNoIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJyYW5jaChlcykgb2YgdGhlIEdpdCB0cmVlIHRvIGNsb25lLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgdW5zZXQsIHRoaXMgaXMgYXNzdW1lZCB0byBiZSAibWFzdGVyIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgYnJhbmNoIHBhcmFtZXRlcnMgbXVjaCBtYXRjaCB0aGUgbnVtYmVyIG9mCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIHBhcmFtZXRlcnMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4icmV2Ijo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJldmlzaW9uIHRvIHVzZSBmb3IgdGhlIGNoZWNrb3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMgIm1hc3RlciIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4idGFnIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgdGFnIHRvIHVzZSBmb3IgdGhlIGNoZWNrb3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gY29ycmVjdGx5IHJlc29sdmUgdGFncywgQml0QmFrZSBtdXN0IGFjY2VzcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmsuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgdGhhdCByZWFzb24sIHRhZ3MgYXJlIG9mdGVuIG5vdCB1c2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgQXMgZmFyIGFzIEdpdCBpcyBjb25jZXJuZWQsIHRoZSAidGFnIiBwYXJhbWV0ZXIgYmVoYXZlcworICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0aXZlbHkgdGhlIHNhbWUgYXMgdGhlICJyZXYiIHBhcmFtZXRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJzdWJwYXRoIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgTGltaXRzIHRoZSBjaGVja291dCB0byBhIHNwZWNpZmljIHN1YnBhdGggb2YgdGhlIHRyZWUuCisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgd2hvbGUgdHJlZSBpcyBjaGVja2VkIG91dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJkZXN0c3VmZml4Ijo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHBhdGggaW4gd2hpY2ggdG8gcGxhY2UgdGhlIGNoZWNrb3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIHBhdGggaXMgPGZpbGVuYW1lPmdpdC88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgZXhhbXBsZSBVUkxzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJnaXQ6Ly9naXQub2UuaGFuZGhlbGRzLm9yZy9naXQvdmlwLmdpdDt0YWc9dmVyc2lvbi0xIgorICAgICBTUkNfVVJJID0gImdpdDovL2dpdC5vZS5oYW5kaGVsZHMub3JnL2dpdC92aXAuZ2l0O3Byb3RvY29sPWh0dHAiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2dpdHNtLWZldGNoZXInPgorICAgICAgICAgICAgPHRpdGxlPkdpdCBTdWJtb2R1bGUgRmV0Y2hlciAoPGZpbGVuYW1lPmdpdHNtOi8vPC9maWxlbmFtZT4pPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBmZXRjaGVyIHN1Ym1vZHVsZSBpbmhlcml0cyBmcm9tIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dpdC1mZXRjaGVyJz5HaXQgZmV0Y2hlcjwvbGluaz4gYW5kIGV4dGVuZHMKKyAgICAgICAgICAgICAgICB0aGF0IGZldGNoZXIncyBiZWhhdmlvciBieSBmZXRjaGluZyBhIHJlcG9zaXRvcnkncyBzdWJtb2R1bGVzLgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGlzIHBhc3NlZCB0byB0aGUgR2l0IGZldGNoZXIgYXMgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdnaXQtZmV0Y2hlcic+R2l0IEZldGNoZXIgKDxmaWxlbmFtZT5naXQ6Ly88L2ZpbGVuYW1lPik8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIDx0aXRsZT5Ob3RlcyBhbmQgV2FybmluZ3M8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGNsZWFuIGEgcmVjaXBlIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICc8ZmlsZW5hbWU+Z2l0Oi8vPC9maWxlbmFtZT4nIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgJzxmaWxlbmFtZT5naXRzbTovLzwvZmlsZW5hbWU+JyBVUkxzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgR2l0IFN1Ym1vZHVsZXMgZmV0Y2hlciBpcyBub3QgYSBjb21wbGV0ZSBmZXRjaGVyCisgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmZXRjaGVyIGhhcyBrbm93biBpc3N1ZXMgd2hlcmUgaXQgZG9lcyBub3QgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsIHNvdXJjZSBtaXJyb3JpbmcgaW5mcmFzdHJ1Y3R1cmUgcHJvcGVybHkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY2xlYXJjYXNlLWZldGNoZXInPgorICAgICAgICAgICAgPHRpdGxlPkNsZWFyQ2FzZSBGZXRjaGVyICg8ZmlsZW5hbWU+Y2NyYzovLzwvZmlsZW5hbWU+KTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgZmV0Y2hlciBzdWJtb2R1bGUgZmV0Y2hlcyBjb2RlIGZyb20gYQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUmF0aW9uYWxfQ2xlYXJDYXNlJz5DbGVhckNhc2U8L3VsaW5rPgorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHVzZSB0aGlzIGZldGNoZXIsIG1ha2Ugc3VyZSB5b3VyIHJlY2lwZSBoYXMgcHJvcGVyCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNSRVYnPjxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPjwvbGluaz4sIGFuZAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L2xpbms+IHNldHRpbmdzLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiY2NyYzovL2NjLmV4YW1wbGUub3JnL2NjcmM7dm9iPS9leGFtcGxlX3ZvYjttb2R1bGU9L2V4YW1wbGVfbW9kdWxlIgorICAgICBTUkNSRVYgPSAiRVhBTVBMRV9DTEVBUkNBU0VfVEFHIgorICAgICBQViA9ICIke0BkLmdldFZhcigiU1JDUkVWIiwgRmFsc2UpLnJlcGxhY2UoIi8iLCAiKyIpfSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIGZldGNoZXIgdXNlcyB0aGUgPGZpbGVuYW1lPnJjbGVhcnRvb2w8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jbGVhcnRvb2w8L2ZpbGVuYW1lPiByZW1vdGUgY2xpZW50LCBkZXBlbmRpbmcgb24KKyAgICAgICAgICAgICAgICB3aGljaCBvbmUgaXMgYXZhaWxhYmxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIG9wdGlvbnMgZm9yIHRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgc3RhdGVtZW50OgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnZvYjwvZmlsZW5hbWU+PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSwgd2hpY2ggbXVzdCBpbmNsdWRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZGluZyAiLyIgY2hhcmFjdGVyLCBvZiB0aGUgQ2xlYXJDYXNlIFZPQi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGlzIHJlcXVpcmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm1vZHVsZTwvZmlsZW5hbWU+PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbW9kdWxlLCB3aGljaCBtdXN0IGluY2x1ZGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kaW5nICIvIiBjaGFyYWN0ZXIsIGluIHRoZSBzZWxlY3RlZCBWT0IuCisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1vZHVsZTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+dm9iPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zIGFyZSBjb21iaW5lZCB0byBjcmVhdGUgdGhlIDxmaWxlbmFtZT5sb2FkPC9maWxlbmFtZT4gcnVsZSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB2aWV3IGNvbmZpZyBzcGVjLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSA8ZmlsZW5hbWU+dm9iPC9maWxlbmFtZT4gYW5kIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tb2R1bGU8L2ZpbGVuYW1lPiB2YWx1ZXMgZnJvbSB0aGUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgYXQgdGhlIHN0YXJ0IG9mIHRoaXMgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21iaW5pbmcgdGhvc2UgdmFsdWVzIHJlc3VsdHMgaW4gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGxvYWQgL2V4YW1wbGVfdm9iL2V4YW1wbGVfbW9kdWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnByb3RvPC9maWxlbmFtZT48L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwcm90b2NvbCwgd2hpY2ggY2FuIGJlIGVpdGhlciA8ZmlsZW5hbWU+aHR0cDwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aHR0cHM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgZmV0Y2hlciBjcmVhdGVzIGEgY29uZmlndXJhdGlvbiBzcGVjaWZpY2F0aW9uLgorICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRoaXMgc3BlY2lmaWNhdGlvbiB3cml0dGVuIHRvIGFuIGFyZWEgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCwKKyAgICAgICAgICAgICAgICB1c2UgdGhlIDxmaWxlbmFtZT5DQ0FTRV9DVVNUT01fQ09ORklHX1NQRUM8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGluIHlvdXIgcmVjaXBlIHRvIGRlZmluZSB3aGVyZSB0aGUgc3BlY2lmaWNhdGlvbiBpcyB3cml0dGVuLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+IGxvc2VzIGl0cyBmdW5jdGlvbmFsaXR5IGlmIHlvdQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIDxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPiBpcyBzdGlsbCB1c2VkIHRvIGxhYmVsIHRoZQorICAgICAgICAgICAgICAgICAgICBhcmNoaXZlIGFmdGVyIGEgZmV0Y2ggZXZlbiB0aG91Z2ggaXQgZG9lcyBub3QgZGVmaW5lIHdoYXQgaXMKKyAgICAgICAgICAgICAgICAgICAgZmV0Y2hlZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIGEgY291cGxlIG9mIG90aGVyIGJlaGF2aW9ycyB3b3J0aCBtZW50aW9uaW5nOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gdXNpbmcgPGZpbGVuYW1lPmNsZWFydG9vbDwvZmlsZW5hbWU+LCB0aGUgbG9naW4gb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jbGVhcnRvb2w8L2ZpbGVuYW1lPiBpcyBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbG9naW4gcmVxdWlyZSBubyBzcGVjaWFsIHN0ZXBzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIHVzZSA8ZmlsZW5hbWU+cmNsZWFydG9vbDwvZmlsZW5hbWU+IHdpdGggYXV0aGVudGljYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgdXNlcnMsIGFuICJyY2xlYXJ0b29sIGxvZ2luIiBpcyBuZWNlc3NhcnkgYmVmb3JlIHVzaW5nIHRoZSBmZXRjaGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nb3RoZXItZmV0Y2hlcnMnPgorICAgICAgICAgICAgPHRpdGxlPk90aGVyIEZldGNoZXJzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRmV0Y2ggc3VibW9kdWxlcyBhbHNvIGV4aXN0IGZvciB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJhemFhciAoPGZpbGVuYW1lPmJ6cjovLzwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBlcmZvcmNlICg8ZmlsZW5hbWU+cDQ6Ly88L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUcmVlcyB1c2luZyBHaXQgQW5uZXggKDxmaWxlbmFtZT5naXRhbm5leDovLzwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY3VyZSBGVFAgKDxmaWxlbmFtZT5zZnRwOi8vPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjdXJlIFNoZWxsICg8ZmlsZW5hbWU+c3NoOi8vPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgUmVwbyAoPGZpbGVuYW1lPnJlcG86Ly88L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBPU0MgKDxmaWxlbmFtZT5vc2M6Ly88L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBNZXJjdXJpYWwgKDxmaWxlbmFtZT5oZzovLzwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgTm8gZG9jdW1lbnRhdGlvbiBjdXJyZW50bHkgZXhpc3RzIGZvciB0aGVzZSBsZXNzZXIgdXNlZAorICAgICAgICAgICAgICAgIGZldGNoZXIgc3VibW9kdWxlcy4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgbWlnaHQgZmluZCB0aGUgY29kZSBoZWxwZnVsIGFuZCByZWFkYWJsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdhdXRvLXJldmlzaW9ucyc+CisgICAgICAgIDx0aXRsZT5BdXRvIFJldmlzaW9uczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXZSBuZWVkIHRvIGRvY3VtZW50IDxmaWxlbmFtZT5BVVRPUkVWPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDUkVWX0ZPUk1BVDwvZmlsZW5hbWU+IGhlcmUuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1oZWxsby54bWwgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1oZWxsby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM2MjhjZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWhlbGxvLnhtbApAQCAtMCwwICsxLDUwNiBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCI+CisKKzxhcHBlbmRpeCBpZD0naGVsbG8td29ybGQtZXhhbXBsZSc+CisgICAgPHRpdGxlPkhlbGxvIFdvcmxkIEV4YW1wbGU8L3RpdGxlPgorCisgICAgPHNlY3Rpb24gaWQ9J2JpdGJha2UtaGVsbG8td29ybGQnPgorICAgICAgICA8dGl0bGU+Qml0QmFrZSBIZWxsbyBXb3JsZDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgc2ltcGxlc3QgZXhhbXBsZSBjb21tb25seSB1c2VkIHRvIGRlbW9uc3RyYXRlIGFueSBuZXcKKyAgICAgICAgICAgIHByb2dyYW1taW5nIGxhbmd1YWdlIG9yIHRvb2wgaXMgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IZWxsb193b3JsZF9wcm9ncmFtIj5IZWxsbyBXb3JsZDwvdWxpbms+IgorICAgICAgICAgICAgZXhhbXBsZS4KKyAgICAgICAgICAgIFRoaXMgYXBwZW5kaXggZGVtb25zdHJhdGVzLCBpbiB0dXRvcmlhbCBmb3JtLCBIZWxsbworICAgICAgICAgICAgV29ybGQgd2l0aGluIHRoZSBjb250ZXh0IG9mIEJpdEJha2UuCisgICAgICAgICAgICBUaGUgdHV0b3JpYWwgZGVzY3JpYmVzIGhvdyB0byBjcmVhdGUgYSBuZXcgcHJvamVjdAorICAgICAgICAgICAgYW5kIHRoZSBhcHBsaWNhYmxlIG1ldGFkYXRhIGZpbGVzIG5lY2Vzc2FyeSB0byBhbGxvdworICAgICAgICAgICAgQml0QmFrZSB0byBidWlsZCBpdC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdleGFtcGxlLW9idGFpbmluZy1iaXRiYWtlJz4KKyAgICAgICAgPHRpdGxlPk9idGFpbmluZyBCaXRCYWtlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdvYnRhaW5pbmctYml0YmFrZSc+T2J0YWluaW5nIEJpdEJha2U8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIG9idGFpbiBCaXRCYWtlLgorICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSB0aGUgc291cmNlIGNvZGUgb24geW91ciBtYWNoaW5lLCB0aGUgQml0QmFrZSBkaXJlY3RvcnkKKyAgICAgICAgICAgIGFwcGVhcnMgYXMgZm9sbG93czoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBscyAtYWwKKyAgICAgdG90YWwgMTAwCisgICAgIGRyd3hyd3hyLXguIDkgd21hdCB3bWF0ICA0MDk2IEphbiAzMSAxMzo0NCAuCisgICAgIGRyd3hyd3hyLXguIDMgd21hdCB3bWF0ICA0MDk2IEZlYiAgNCAxMDo0NSAuLgorICAgICAtcnctcnctci0tLiAxIHdtYXQgd21hdCAgIDM2NSBOb3YgMjYgMDQ6NTUgQVVUSE9SUworICAgICBkcnd4cnd4ci14LiAyIHdtYXQgd21hdCAgNDA5NiBOb3YgMjYgMDQ6NTUgYmluCisgICAgIGRyd3hyd3hyLXguIDQgd21hdCB3bWF0ICA0MDk2IEphbiAzMSAxMzo0NCBidWlsZAorICAgICAtcnctcnctci0tLiAxIHdtYXQgd21hdCAxNjUwMSBOb3YgMjYgMDQ6NTUgQ2hhbmdlTG9nCisgICAgIGRyd3hyd3hyLXguIDIgd21hdCB3bWF0ICA0MDk2IE5vdiAyNiAwNDo1NSBjbGFzc2VzCisgICAgIGRyd3hyd3hyLXguIDIgd21hdCB3bWF0ICA0MDk2IE5vdiAyNiAwNDo1NSBjb25mCisgICAgIGRyd3hyd3hyLXguIDMgd21hdCB3bWF0ICA0MDk2IE5vdiAyNiAwNDo1NSBjb250cmliCisgICAgIC1ydy1ydy1yLS0uIDEgd21hdCB3bWF0IDE3OTg3IE5vdiAyNiAwNDo1NSBDT1BZSU5HCisgICAgIGRyd3hyd3hyLXguIDMgd21hdCB3bWF0ICA0MDk2IE5vdiAyNiAwNDo1NSBkb2MKKyAgICAgLXJ3LXJ3LXItLS4gMSB3bWF0IHdtYXQgICAgNjkgTm92IDI2IDA0OjU1IC5naXRpZ25vcmUKKyAgICAgLXJ3LXJ3LXItLS4gMSB3bWF0IHdtYXQgICA4NDkgTm92IDI2IDA0OjU1IEhFQURFUgorICAgICBkcnd4cnd4ci14LiA1IHdtYXQgd21hdCAgNDA5NiBKYW4gMzEgMTM6NDQgbGliCisgICAgIC1ydy1ydy1yLS0uIDEgd21hdCB3bWF0ICAgMTk1IE5vdiAyNiAwNDo1NSBNQU5JRkVTVC5pbgorICAgICAtcnd4cnd4ci14LiAxIHdtYXQgd21hdCAgMzE5NSBKYW4gMzEgMTE6NTcgc2V0dXAucHkKKyAgICAgLXJ3LXJ3LXItLS4gMSB3bWF0IHdtYXQgIDI4ODcgTm92IDI2IDA0OjU1IFRPRE8KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXQgdGhpcyBwb2ludCwgeW91IHNob3VsZCBoYXZlIEJpdEJha2UgY2xvbmVkIHRvCisgICAgICAgICAgICBhIGRpcmVjdG9yeSB0aGF0IG1hdGNoZXMgdGhlIHByZXZpb3VzIGxpc3RpbmcgZXhjZXB0IGZvcgorICAgICAgICAgICAgZGF0ZXMgYW5kIHVzZXIgbmFtZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc2V0dGluZy11cC10aGUtYml0YmFrZS1lbnZpcm9ubWVudCc+CisgICAgICAgIDx0aXRsZT5TZXR0aW5nIFVwIHRoZSBCaXRCYWtlIEVudmlyb25tZW50PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZpcnN0LCB5b3UgbmVlZCB0byBiZSBzdXJlIHRoYXQgeW91IGNhbiBydW4gQml0QmFrZS4KKyAgICAgICAgICAgIFNldCB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IHRvIHdoZXJlIHlvdXIgbG9jYWwgQml0QmFrZQorICAgICAgICAgICAgZmlsZXMgYXJlIGFuZCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIC4vYmluL2JpdGJha2UgLS12ZXJzaW9uCisgICAgIEJpdEJha2UgQnVpbGQgVG9vbCBDb3JlIHZlcnNpb24gMS4yMy4wLCBiaXRiYWtlIHZlcnNpb24gMS4yMy4wCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgY29uc29sZSBvdXRwdXQgdGVsbHMgeW91IHdoYXQgdmVyc2lvbiB5b3UgYXJlIHJ1bm5pbmcuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSByZWNvbW1lbmRlZCBtZXRob2QgdG8gcnVuIEJpdEJha2UgaXMgZnJvbSBhIGRpcmVjdG9yeSBvZiB5b3VyCisgICAgICAgICAgICBjaG9pY2UuCisgICAgICAgICAgICBUbyBiZSBhYmxlIHRvIHJ1biBCaXRCYWtlIGZyb20gYW55IGRpcmVjdG9yeSwgeW91IG5lZWQgdG8gYWRkIHRoZQorICAgICAgICAgICAgZXhlY3V0YWJsZSBiaW5hcnkgdG8geW91ciBiaW5hcnkgdG8geW91ciBzaGVsbCdzIGVudmlyb25tZW50CisgICAgICAgICAgICA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgRmlyc3QsIGxvb2sgYXQgeW91ciBjdXJyZW50IDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgIGJ5IGVudGVyaW5nIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZWNobyAkUEFUSAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgTmV4dCwgYWRkIHRoZSBkaXJlY3RvcnkgbG9jYXRpb24gZm9yIHRoZSBCaXRCYWtlIGJpbmFyeSB0byB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4uCisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBhZGRzIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPi9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2JpbjwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICAgICAgdG8gdGhlIGZyb250IG9mIHRoZSA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGV4cG9ydCBQQVRIPS9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2JpbjokUEFUSAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgWW91IHNob3VsZCBub3cgYmUgYWJsZSB0byBlbnRlciB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgY29tbWFuZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgd2hpbGUgd29ya2luZyBmcm9tIGFueSBkaXJlY3RvcnkuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndGhlLWhlbGxvLXdvcmxkLWV4YW1wbGUnPgorICAgICAgICA8dGl0bGU+VGhlIEhlbGxvIFdvcmxkIEV4YW1wbGU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIG92ZXJhbGwgZ29hbCBvZiB0aGlzIGV4ZXJjaXNlIGlzIHRvIGJ1aWxkIGEKKyAgICAgICAgICAgIGNvbXBsZXRlICJIZWxsbyBXb3JsZCIgZXhhbXBsZSB1dGlsaXppbmcgdGFzayBhbmQgbGF5ZXIKKyAgICAgICAgICAgIGNvbmNlcHRzLgorICAgICAgICAgICAgQmVjYXVzZSB0aGlzIGlzIGhvdyBtb2Rlcm4gcHJvamVjdHMgc3VjaCBhcyBPcGVuRW1iZWRkZWQgYW5kCisgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCB1dGlsaXplIEJpdEJha2UsIHRoZSBleGFtcGxlCisgICAgICAgICAgICBwcm92aWRlcyBhbiBleGNlbGxlbnQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcKKyAgICAgICAgICAgIEJpdEJha2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGhlbHAgeW91IHVuZGVyc3RhbmQgaG93IHRvIHVzZSBCaXRCYWtlIHRvIGJ1aWxkIHRhcmdldHMsCisgICAgICAgICAgICB0aGUgZXhhbXBsZSBzdGFydHMgd2l0aCBub3RoaW5nIGJ1dCB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgY29tbWFuZCwgd2hpY2ggY2F1c2VzIEJpdEJha2UgdG8gZmFpbCBhbmQgcmVwb3J0IHByb2JsZW1zLgorICAgICAgICAgICAgVGhlIGV4YW1wbGUgcHJvZ3Jlc3NlcyBieSBhZGRpbmcgcGllY2VzIHRvIHRoZSBidWlsZCB0bworICAgICAgICAgICAgZXZlbnR1YWxseSBjb25jbHVkZSB3aXRoIGEgd29ya2luZywgbWluaW1hbCAiSGVsbG8gV29ybGQiCisgICAgICAgICAgICBleGFtcGxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGlsZSBldmVyeSBhdHRlbXB0IGlzIG1hZGUgdG8gZXhwbGFpbiB3aGF0IGlzIGhhcHBlbmluZyBkdXJpbmcKKyAgICAgICAgICAgIHRoZSBleGFtcGxlLCB0aGUgZGVzY3JpcHRpb25zIGNhbm5vdCBjb3ZlciBldmVyeXRoaW5nLgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGZ1cnRoZXIgaW5mb3JtYXRpb24gdGhyb3VnaG91dCB0aGlzIG1hbnVhbC4KKyAgICAgICAgICAgIEFsc28sIHlvdSBjYW4gYWN0aXZlbHkgcGFydGljaXBhdGUgaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vbGlzdHMub3BlbmVtYmVkZGVkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2JpdGJha2UtZGV2ZWwnPjwvdWxpbms+CisgICAgICAgICAgICBkaXNjdXNzaW9uIG1haWxpbmcgbGlzdCBhYm91dCB0aGUgQml0QmFrZSBidWlsZCB0b29sLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBUaGlzIGV4YW1wbGUgd2FzIGluc3BpcmVkIGJ5IGFuZCBkcmV3IGhlYXZpbHkgZnJvbSB0aGVzZSBzb3VyY2VzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS95b2N0b0B5b2N0b3Byb2plY3Qub3JnL21zZzA5Mzc5Lmh0bWwiPk1haWxpbmcgTGlzdCBwb3N0IC0gVGhlIEJpdEJha2UgZXF1aXZhbGVudCBvZiAiSGVsbG8sIFdvcmxkISI8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly9oYW1iZWRkZWQub3JnL2Jsb2cvMjAxMi8xMS8yNC9mcm9tLWJpdGJha2UtaGVsbG8td29ybGQtdG8tYW4taW1hZ2UvIj5IYW1iZWRkZWQgTGludXggYmxvZyBwb3N0IC0gRnJvbSBCaXRiYWtlIEhlbGxvIFdvcmxkIHRvIGFuIEltYWdlPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9ub3RlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgc3RhdGVkIGVhcmxpZXIsIHRoZSBnb2FsIG9mIHRoaXMgZXhhbXBsZQorICAgICAgICAgICAgaXMgdG8gZXZlbnR1YWxseSBjb21waWxlICJIZWxsbyBXb3JsZCIuCisgICAgICAgICAgICBIb3dldmVyLCBpdCBpcyB1bmtub3duIHdoYXQgQml0QmFrZSBuZWVkcyBhbmQgd2hhdCB5b3UgaGF2ZQorICAgICAgICAgICAgdG8gcHJvdmlkZSBpbiBvcmRlciB0byBhY2hpZXZlIHRoYXQgZ29hbC4KKyAgICAgICAgICAgIFJlY2FsbCB0aGF0IEJpdEJha2UgdXRpbGl6ZXMgdGhyZWUgdHlwZXMgb2YgbWV0YWRhdGEgZmlsZXM6CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdjb25maWd1cmF0aW9uLWZpbGVzJz5Db25maWd1cmF0aW9uIEZpbGVzPC9saW5rPiwKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2NsYXNzZXMnPkNsYXNzZXM8L2xpbms+LCBhbmQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlY2lwZXMnPlJlY2lwZXM8L2xpbms+LgorICAgICAgICAgICAgQnV0IHdoZXJlIGRvIHRoZXkgZ28/CisgICAgICAgICAgICBIb3cgZG9lcyBCaXRCYWtlIGZpbmQgdGhlbT8KKyAgICAgICAgICAgIEJpdEJha2UncyBlcnJvciBtZXNzYWdpbmcgaGVscHMgeW91IGFuc3dlciB0aGVzZSB0eXBlcyBvZiBxdWVzdGlvbnMKKyAgICAgICAgICAgIGFuZCBoZWxwcyB5b3UgYmV0dGVyIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGlzIGdvaW5nIG9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb2xsb3dpbmcgaXMgdGhlIGNvbXBsZXRlICJIZWxsbyBXb3JsZCIgZXhhbXBsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIGEgUHJvamVjdCBEaXJlY3Rvcnk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBGaXJzdCwgc2V0IHVwIGEgZGlyZWN0b3J5IGZvciB0aGUgIkhlbGxvIFdvcmxkIiBwcm9qZWN0LgorICAgICAgICAgICAgICAgIEhlcmUgaXMgaG93IHlvdSBjYW4gZG8gc28gaW4geW91ciBob21lIGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgbWtkaXIgfi9oZWxsbworICAgICAkIGNkIH4vaGVsbG8KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgZGlyZWN0b3J5IHRoYXQgQml0QmFrZSB3aWxsIHVzZSB0byBkbyBhbGwgb2YKKyAgICAgICAgICAgICAgICBpdHMgd29yay4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIGRpcmVjdG9yeSB0byBrZWVwIGFsbCB0aGUgbWV0YWZpbGVzIG5lZWRlZAorICAgICAgICAgICAgICAgIGJ5IEJpdEJha2UuCisgICAgICAgICAgICAgICAgSGF2aW5nIGEgcHJvamVjdCBkaXJlY3RvcnkgaXMgYSBnb29kIHdheSB0byBpc29sYXRlIHlvdXIKKyAgICAgICAgICAgICAgICBwcm9qZWN0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SdW4gQml0YmFrZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQsIHlvdSBoYXZlIG5vdGhpbmcgYnV0IGEgcHJvamVjdCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgUnVuIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgYW5kIHNlZSB3aGF0CisgICAgICAgICAgICAgICAgaXQgZG9lczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZQorICAgICBUaGUgQkJQQVRIIHZhcmlhYmxlIGlzIG5vdCBzZXQgYW5kIGJpdGJha2UgZGlkIG5vdAorICAgICBmaW5kIGEgY29uZi9iYmxheWVycy5jb25mIGZpbGUgaW4gdGhlIGV4cGVjdGVkIGxvY2F0aW9uLgorICAgICBNYXliZSB5b3UgYWNjaWRlbnRhbGx5IGludm9rZWQgYml0YmFrZSBmcm9tIHRoZSB3cm9uZyBkaXJlY3Rvcnk/CisgICAgIERFQlVHOiBSZW1vdmVkIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGZyb20gdGhlIGVudmlyb25tZW50OgorICAgICBHTk9NRV9ERVNLVE9QX1NFU1NJT05fSUQsIFhER19DVVJSRU5UX0RFU0tUT1AsCisgICAgIEdOT01FX0tFWVJJTkdfQ09OVFJPTCwgRElTUExBWSwgU1NIX0FHRU5UX1BJRCwgTEFORywgbm9fcHJveHksCisgICAgIFhER19TRVNTSU9OX1BBVEgsIFhBVVRIT1JJVFksIFNFU1NJT05fTUFOQUdFUiwgU0hMVkwsCisgICAgIE1BTkRBVE9SWV9QQVRILCBDT01QSVpfQ09ORklHX1BST0ZJTEUsIFdJTkRPV0lELCBFRElUT1IsCisgICAgIEdQR19BR0VOVF9JTkZPLCBTU0hfQVVUSF9TT0NLLCBHRE1TRVNTSU9OLCBHTk9NRV9LRVlSSU5HX1BJRCwKKyAgICAgWERHX1NFQVRfUEFUSCwgWERHX0NPTkZJR19ESVJTLCBMRVNTT1BFTiwgREJVU19TRVNTSU9OX0JVU19BRERSRVNTLAorICAgICBfLCBYREdfU0VTU0lPTl9DT09LSUUsIERFU0tUT1BfU0VTU0lPTiwgTEVTU0NMT1NFLCBERUZBVUxUU19QQVRILAorICAgICBVQlVOVFVfTUVOVVBST1hZLCBPTERQV0QsIFhER19EQVRBX0RJUlMsIENPTE9SVEVSTSwgTFNfQ09MT1JTCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBtYWpvcml0eSBvZiB0aGlzIG91dHB1dCBpcyBzcGVjaWZpYyB0byBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICB0aGF0IGFyZSBub3QgZGlyZWN0bHkgcmVsZXZhbnQgdG8gQml0QmFrZS4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGUgdmVyeSBmaXJzdCBtZXNzYWdlIHJlZ2FyZGluZyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gdmFyaWFibGUgYW5kIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2JibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgaXMgcmVsZXZhbnQuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4geW91IHJ1biBCaXRCYWtlLCBpdCBiZWdpbnMgbG9va2luZyBmb3IgbWV0YWRhdGEgZmlsZXMuCisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIHdoYXQgdGVsbHMgQml0QmFrZSB3aGVyZSB0byBsb29rIGZvciB0aG9zZSBmaWxlcy4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gaXMgbm90IHNldCBhbmQgeW91IG5lZWQgdG8gc2V0IGl0LgorICAgICAgICAgICAgICAgIFdpdGhvdXQgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+LCBCaXRiYWtlIGNhbm5vdAorICAgICAgICAgICAgICAgIGZpbmQgYW55IGNvbmZpZ3VyYXRpb24gZmlsZXMgKDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgIG9yIHJlY2lwZSBmaWxlcyAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+KSBhdCBhbGwuCisgICAgICAgICAgICAgICAgQml0QmFrZSBhbHNvIGNhbm5vdCBmaW5kIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZXR0aW5nIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEZvciB0aGlzIGV4YW1wbGUsIHlvdSBjYW4gc2V0IDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGluIHRoZSBzYW1lIG1hbm5lciB0aGF0IHlvdSBzZXQgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGVhcmxpZXIgaW4gdGhlIGFwcGVuZGl4LgorICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgcmVhbGl6ZSwgdGhvdWdoLCB0aGF0IGl0IGlzIG11Y2ggbW9yZSBmbGV4aWJsZSB0byBzZXQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlIHVwIGluIGEgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZpbGUgZm9yIGVhY2ggcHJvamVjdC48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+RnJvbSB5b3VyIHNoZWxsLCBlbnRlciB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHRvIHNldCBhbmQKKyAgICAgICAgICAgICAgICBleHBvcnQgdGhlIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgQkJQQVRIPSI8cmVwbGFjZWFibGU+cHJvamVjdGRpcmVjdG9yeTwvcmVwbGFjZWFibGU+IgorICAgICAkIGV4cG9ydCBCQlBBVEgKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVXNlIHlvdXIgYWN0dWFsIHByb2plY3QgZGlyZWN0b3J5IGluIHRoZSBjb21tYW5kLgorICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGF0IGRpcmVjdG9yeSB0byBmaW5kIHRoZSBtZXRhZGF0YSBpdCBuZWVkcyBmb3IKKyAgICAgICAgICAgICAgICB5b3VyIHByb2plY3QuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gc3BlY2lmeWluZyB5b3VyIHByb2plY3QgZGlyZWN0b3J5LCBkbyBub3QgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICB0aWxkZSAoIn4iKSBjaGFyYWN0ZXIgYXMgQml0QmFrZSBkb2VzIG5vdCBleHBhbmQgdGhhdCBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAgICAgYXMgdGhlIHNoZWxsIHdvdWxkLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UnVuIEJpdGJha2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBOb3cgdGhhdCB5b3UgaGF2ZSA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gZGVmaW5lZCwgcnVuCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCBhZ2FpbjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZQorICAgICBFUlJPUjogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgIEZpbGUgIi9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2xpYi9iYi9jb29rZXJkYXRhLnB5IiwgbGluZSAxNjMsIGluIHdyYXBwZWQKKyAgICAgICAgIHJldHVybiBmdW5jKGZuLCAqYXJncykKKyAgICAgICBGaWxlICIvaG9tZS9zY290dC1sZW5vdm8vYml0YmFrZS9saWIvYmIvY29va2VyZGF0YS5weSIsIGxpbmUgMTczLCBpbiBwYXJzZV9jb25maWdfZmlsZQorICAgICAgICAgcmV0dXJuIGJiLnBhcnNlLmhhbmRsZShmbiwgZGF0YSwgaW5jbHVkZSkKKyAgICAgICBGaWxlICIvaG9tZS9zY290dC1sZW5vdm8vYml0YmFrZS9saWIvYmIvcGFyc2UvX19pbml0X18ucHkiLCBsaW5lIDk5LCBpbiBoYW5kbGUKKyAgICAgICAgIHJldHVybiBoWydoYW5kbGUnXShmbiwgZGF0YSwgaW5jbHVkZSkKKyAgICAgICBGaWxlICIvaG9tZS9zY290dC1sZW5vdm8vYml0YmFrZS9saWIvYmIvcGFyc2UvcGFyc2VfcHkvQ29uZkhhbmRsZXIucHkiLCBsaW5lIDEyMCwgaW4gaGFuZGxlCisgICAgICAgICBhYnNfZm4gPSByZXNvbHZlX2ZpbGUoZm4sIGRhdGEpCisgICAgICAgRmlsZSAiL2hvbWUvc2NvdHQtbGVub3ZvL2JpdGJha2UvbGliL2JiL3BhcnNlL19faW5pdF9fLnB5IiwgbGluZSAxMTcsIGluIHJlc29sdmVfZmlsZQorICAgICAgICAgcmFpc2UgSU9FcnJvcigiZmlsZSAlcyBub3QgZm91bmQgaW4gJXMiICUgKGZuLCBiYnBhdGgpKQorICAgICBJT0Vycm9yOiBmaWxlIGNvbmYvYml0YmFrZS5jb25mIG5vdCBmb3VuZCBpbiAvaG9tZS9zY290dC1sZW5vdm8vaGVsbG8KKworICAgICBFUlJPUjogVW5hYmxlIHRvIHBhcnNlIGNvbmYvYml0YmFrZS5jb25mOiBmaWxlIGNvbmYvYml0YmFrZS5jb25mIG5vdCBmb3VuZCBpbiAvaG9tZS9zY290dC1sZW5vdm8vaGVsbG8KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhpcyBzYW1wbGUgb3V0cHV0IHNob3dzIHRoYXQgQml0QmFrZSBjb3VsZCBub3QgZmluZCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZSBwcm9qZWN0CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBpcyB0aGUgZmlyc3QgdGhpbmcgQml0QmFrZSBtdXN0IGZpbmQgaW4gb3JkZXIKKyAgICAgICAgICAgICAgICB0byBidWlsZCBhIHRhcmdldC4KKyAgICAgICAgICAgICAgICBBbmQsIHNpbmNlIHRoZSBwcm9qZWN0IGRpcmVjdG9yeSBmb3IgdGhpcyBleGFtcGxlIGlzCisgICAgICAgICAgICAgICAgZW1wdHksIHlvdSBuZWVkIHRvIHByb3ZpZGUgYSA8ZmlsZW5hbWU+Y29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0aW5nIDxmaWxlbmFtZT5jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+IGluY2x1ZGVzIGEgbnVtYmVyIG9mCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgQml0QmFrZSB1c2VzIGZvciBtZXRhZGF0YSBhbmQgcmVjaXBlCisgICAgICAgICAgICAgICAgZmlsZXMuCisgICAgICAgICAgICAgICAgRm9yIHRoaXMgZXhhbXBsZSwgeW91IG5lZWQgdG8gY3JlYXRlIHRoZSBmaWxlIGluIHlvdXIgcHJvamVjdCBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBhbmQgZGVmaW5lIHNvbWUga2V5IEJpdEJha2UgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgc2VlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2hhbWJlZGRlZC5vcmcvYmxvZy8yMDEyLzExLzI0L2Zyb20tYml0YmFrZS1oZWxsby13b3JsZC10by1hbi1pbWFnZS8jYW4tb3ZlcnZpZXctb2YtYml0YmFrZWNvbmYnPjwvdWxpbms+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPlVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHRvIGNyZWF0ZSB0aGUgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBpbiB0aGUgcHJvamVjdCBkaXJlY3Rvcnk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIG1rZGlyIGNvbmYKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgRnJvbSB3aXRoaW4gdGhlIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5LCB1c2UKKyAgICAgICAgICAgICAgICBzb21lIGVkaXRvciB0byBjcmVhdGUgdGhlIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHNvIHRoYXQgaXQgY29udGFpbnMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRNUERJUiAgPSAiJHs8bGluayBsaW5rZW5kPSd2YXItVE9QRElSJz5UT1BESVI8L2xpbms+fS90bXAiCisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DQUNIRSc+Q0FDSEU8L2xpbms+ICAgPSAiJHtUTVBESVJ9L2NhY2hlIgorICAgICA8bGluayBsaW5rZW5kPSd2YXItU1RBTVAnPlNUQU1QPC9saW5rPiAgID0gIiR7VE1QRElSfS9zdGFtcHMiCisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UJz5UPC9saW5rPiAgICAgICA9ICIke1RNUERJUn0vd29yayIKKyAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUInPkI8L2xpbms+ICAgICAgID0gIiR7VE1QRElSfSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiB2YXJpYWJsZSBlc3RhYmxpc2hlcyBhIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIHRoYXQgQml0QmFrZSB1c2VzIGZvciBidWlsZCBvdXRwdXQgYW5kIGludGVybWVkaWF0ZSBmaWxlcyAob3RoZXIKKyAgICAgICAgICAgICAgICB0aGFuIHRoZSBjYWNoZWQgaW5mb3JtYXRpb24gdXNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzZXRzY2VuZSc+U2V0c2NlbmU8L2xpbms+IHByb2Nlc3MuCisgICAgICAgICAgICAgICAgSGVyZSwgdGhlIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaXMgc2V0IHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmhlbGxvL3RtcDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5UaXA8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsd2F5cyBzYWZlbHkgZGVsZXRlIHRoZSA8ZmlsZW5hbWU+dG1wPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGluIG9yZGVyIHRvIHJlYnVpbGQgYSBCaXRCYWtlIHRhcmdldC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHByb2Nlc3MgY3JlYXRlcyB0aGUgZGlyZWN0b3J5IGZvciB5b3UKKyAgICAgICAgICAgICAgICAgICAgd2hlbiB5b3UgcnVuIEJpdEJha2UuCisgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBvZiB0aGUgb3RoZXIgdmFyaWFibGVzIGRlZmluZWQgaW4gdGhpcworICAgICAgICAgICAgICAgIGV4YW1wbGUsIGNsaWNrIG9uIHRoZSBsaW5rcyB0byB0YWtlIHlvdSB0byB0aGUgZGVmaW5pdGlvbnMgaW4KKyAgICAgICAgICAgICAgICB0aGUgZ2xvc3NhcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJ1biBCaXRiYWtlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQWZ0ZXIgbWFraW5nIHN1cmUgdGhhdCB0aGUgPGZpbGVuYW1lPmNvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlIGV4aXN0cywgeW91IGNhbiBydW4gdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb21tYW5kIGFnYWluOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyQgYml0YmFrZQorRVJST1I6IFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgRmlsZSAiL2hvbWUvc2NvdHQtbGVub3ZvL2JpdGJha2UvbGliL2JiL2Nvb2tlcmRhdGEucHkiLCBsaW5lIDE2MywgaW4gd3JhcHBlZAorICAgIHJldHVybiBmdW5jKGZuLCAqYXJncykKKyAgRmlsZSAiL2hvbWUvc2NvdHQtbGVub3ZvL2JpdGJha2UvbGliL2JiL2Nvb2tlcmRhdGEucHkiLCBsaW5lIDE3NywgaW4gX2luaGVyaXQKKyAgICBiYi5wYXJzZS5CQkhhbmRsZXIuaW5oZXJpdChiYmNsYXNzLCAiY29uZmlndXJhdGlvbiBJTkhFUklUcyIsIDAsIGRhdGEpCisgIEZpbGUgIi9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9CQkhhbmRsZXIucHkiLCBsaW5lIDkyLCBpbiBpbmhlcml0CisgICAgaW5jbHVkZShmbiwgZmlsZSwgbGluZW5vLCBkLCAiaW5oZXJpdCIpCisgIEZpbGUgIi9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9Db25mSGFuZGxlci5weSIsIGxpbmUgMTAwLCBpbiBpbmNsdWRlCisgICAgcmFpc2UgUGFyc2VFcnJvcigiQ291bGQgbm90ICUoZXJyb3Jfb3V0KXMgZmlsZSAlKGZuKXMiICUgdmFycygpLCBvbGRmbiwgbGluZW5vKQorUGFyc2VFcnJvcjogUGFyc2VFcnJvciBpbiBjb25maWd1cmF0aW9uIElOSEVSSVRzOiBDb3VsZCBub3QgaW5oZXJpdCBmaWxlIGNsYXNzZXMvYmFzZS5iYmNsYXNzCisKK0VSUk9SOiBVbmFibGUgdG8gcGFyc2UgYmFzZTogUGFyc2VFcnJvciBpbiBjb25maWd1cmF0aW9uIElOSEVSSVRzOiBDb3VsZCBub3QgaW5oZXJpdCBmaWxlIGNsYXNzZXMvYmFzZS5iYmNsYXNzCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIHRoZSBzYW1wbGUgb3V0cHV0LCBCaXRCYWtlIGNvdWxkIG5vdCBmaW5kIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jbGFzc2VzL2Jhc2UuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gY3JlYXRlIHRoYXQgZmlsZSBuZXh0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGluZyA8ZmlsZW5hbWU+Y2xhc3Nlcy9iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyBjbGFzcyBmaWxlcyB0byBwcm92aWRlIGNvbW1vbiBjb2RlIGFuZCBmdW5jdGlvbmFsaXR5LgorICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsbHkgcmVxdWlyZWQgY2xhc3MgZm9yIEJpdEJha2UgaXMgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNsYXNzZXMvYmFzZS5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJhc2U8L2ZpbGVuYW1lPiBjbGFzcyBpcyBpbXBsaWNpdGx5IGluaGVyaXRlZCBieQorICAgICAgICAgICAgICAgIGV2ZXJ5IHJlY2lwZS4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIGxvb2tzIGZvciB0aGUgY2xhc3MgaW4gdGhlIDxmaWxlbmFtZT5jbGFzc2VzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgb2YgdGhlIHByb2plY3QgKGkuZSA8ZmlsZW5hbWU+aGVsbG8vY2xhc3NlczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgaW4gdGhpcyBleGFtcGxlKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+Q3JlYXRlIHRoZSA8ZmlsZW5hbWU+Y2xhc3NlczwvZmlsZW5hbWU+IGRpcmVjdG9yeSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCAkSE9NRS9oZWxsbworICAgICAkIG1rZGlyIGNsYXNzZXMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgTW92ZSB0byB0aGUgPGZpbGVuYW1lPmNsYXNzZXM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYW5kIHRoZW4KKyAgICAgICAgICAgICAgICBjcmVhdGUgdGhlIDxmaWxlbmFtZT5iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlIGJ5IGluc2VydGluZworICAgICAgICAgICAgICAgIHRoaXMgc2luZ2xlIGxpbmU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBhZGR0YXNrIGJ1aWxkCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsIHRhc2sgdGhhdCBCaXRCYWtlIHJ1bnMgaXMgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2J1aWxkPC9maWxlbmFtZT4gdGFzay4KKyAgICAgICAgICAgICAgICBUaGlzIGlzIGFsbCB0aGUgZXhhbXBsZSBuZWVkcyBpbiBvcmRlciB0byBidWlsZCB0aGUgcHJvamVjdC4KKyAgICAgICAgICAgICAgICBPZiBjb3Vyc2UsIHRoZSA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4gY2FuIGhhdmUgbXVjaAorICAgICAgICAgICAgICAgIG1vcmUgZGVwZW5kaW5nIG9uIHdoaWNoIGJ1aWxkIGVudmlyb25tZW50cyBCaXRCYWtlIGlzCisgICAgICAgICAgICAgICAgc3VwcG9ydGluZy4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgPGZpbGVuYW1lPmJhc2UuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUsCisgICAgICAgICAgICAgICAgeW91IGNhbiBsb29rIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2hhbWJlZGRlZC5vcmcvYmxvZy8yMDEyLzExLzI0L2Zyb20tYml0YmFrZS1oZWxsby13b3JsZC10by1hbi1pbWFnZS8jdGFza3MnPjwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SdW4gQml0YmFrZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEFmdGVyIG1ha2luZyBzdXJlIHRoYXQgdGhlIDxmaWxlbmFtZT5jbGFzc2VzL2Jhc2UuYmJjbGFzczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZSBleGlzdHMsIHlvdSBjYW4gcnVuIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29tbWFuZCBhZ2FpbjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZQorICAgICBOb3RoaW5nIHRvIGRvLiAgVXNlICdiaXRiYWtlIHdvcmxkJyB0byBidWlsZCBldmVyeXRoaW5nLCBvciBydW4gJ2JpdGJha2UgLS1oZWxwJyBmb3IgdXNhZ2UgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEJpdEJha2UgaXMgZmluYWxseSByZXBvcnRpbmcgbm8gZXJyb3JzLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBjYW4gc2VlIHRoYXQgaXQgcmVhbGx5IGRvZXMgbm90IGhhdmUgYW55dGhpbmcKKyAgICAgICAgICAgICAgICB0byBkby4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBjcmVhdGUgYSByZWNpcGUgdGhhdCBnaXZlcyBCaXRCYWtlIHNvbWV0aGluZyB0byBkby4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRpbmcgYSBMYXllcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFdoaWxlIGl0IGlzIG5vdCByZWFsbHkgbmVjZXNzYXJ5IGZvciBzdWNoIGEgc21hbGwgZXhhbXBsZSwKKyAgICAgICAgICAgICAgICBpdCBpcyBnb29kIHByYWN0aWNlIHRvIGNyZWF0ZSBhIGxheWVyIGluIHdoaWNoIHRvIGtlZXAgeW91cgorICAgICAgICAgICAgICAgIGNvZGUgc2VwYXJhdGUgZnJvbSB0aGUgZ2VuZXJhbCBtZXRhZGF0YSB1c2VkIGJ5IEJpdEJha2UuCisgICAgICAgICAgICAgICAgVGh1cywgdGhpcyBleGFtcGxlIGNyZWF0ZXMgYW5kIHVzZXMgYSBsYXllciBjYWxsZWQgIm15bGF5ZXIiLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBhZGRpbmcgYSBsYXllciBhdAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vaGFtYmVkZGVkLm9yZy9ibG9nLzIwMTIvMTEvMjQvZnJvbS1iaXRiYWtlLWhlbGxvLXdvcmxkLXRvLWFuLWltYWdlLyNhZGRpbmctYW4tZXhhbXBsZS1sYXllcic+PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5NaW5pbWFsbHksIHlvdSBuZWVkIGEgcmVjaXBlIGZpbGUgYW5kIGEgbGF5ZXIgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZpbGUgaW4geW91ciBsYXllci4KKyAgICAgICAgICAgICAgICBUaGUgY29uZmlndXJhdGlvbiBmaWxlIG5lZWRzIHRvIGJlIGluIHRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGluc2lkZSB0aGUgbGF5ZXIuCisgICAgICAgICAgICAgICAgVXNlIHRoZXNlIGNvbW1hbmRzIHRvIHNldCB1cCB0aGUgbGF5ZXIgYW5kIHRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCAkSE9NRQorICAgICAkIG1rZGlyIG15bGF5ZXIKKyAgICAgJCBjZCBteWxheWVyCisgICAgICQgbWtkaXIgY29uZgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBNb3ZlIHRvIHRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBhbmQgY3JlYXRlIGEKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUgdGhhdCBoYXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCUEFUSCAuPSAiOiR7PGxpbmsgbGlua2VuZD0ndmFyLUxBWUVSRElSJz5MQVlFUkRJUjwvbGluaz59IgorCisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQkZJTEVTJz5CQkZJTEVTPC9saW5rPiArPSAiJHtMQVlFUkRJUn0vKi5iYiIKKworICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJGSUxFX0NPTExFQ1RJT05TJz5CQkZJTEVfQ09MTEVDVElPTlM8L2xpbms+ICs9ICJteWxheWVyIgorICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJGSUxFX1BBVFRFUk4nPkJCRklMRV9QQVRURVJOX215bGF5ZXI8L2xpbms+IDo9ICJeJHtMQVlFUkRJUn0vIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlc2UgdmFyaWFibGVzLCBjbGljayB0aGUgbGlua3MKKyAgICAgICAgICAgICAgICB0byBnbyB0byB0aGUgZGVmaW5pdGlvbnMgaW4gdGhlIGdsb3NzYXJ5LjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgbmVlZCB0byBjcmVhdGUgdGhlIHJlY2lwZSBmaWxlIG5leHQuCisgICAgICAgICAgICAgICAgSW5zaWRlIHlvdXIgbGF5ZXIgYXQgdGhlIHRvcC1sZXZlbCwgdXNlIGFuIGVkaXRvciBhbmQgY3JlYXRlCisgICAgICAgICAgICAgICAgYSByZWNpcGUgZmlsZSBuYW1lZCA8ZmlsZW5hbWU+cHJpbnRoZWxsby5iYjwvZmlsZW5hbWU+IHRoYXQKKyAgICAgICAgICAgICAgICBoYXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVNDUklQVElPTic+REVTQ1JJUFRJT048L2xpbms+ID0gIlByaW50cyBIZWxsbyBXb3JsZCIKKyAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBOJz5QTjwvbGluaz4gPSAncHJpbnRoZWxsbycKKyAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBWJz5QVjwvbGluaz4gPSAnMScKKworICAgICBweXRob24gZG9fYnVpbGQoKSB7CisgICAgICAgIGJiLnBsYWluKCIqKioqKioqKioqKioqKioqKioqKiIpOworICAgICAgICBiYi5wbGFpbigiKiAgICAgICAgICAgICAgICAgICoiKTsKKyAgICAgICAgYmIucGxhaW4oIiogIEhlbGxvLCBXb3JsZCEgICAqIik7CisgICAgICAgIGJiLnBsYWluKCIqICAgICAgICAgICAgICAgICAgKiIpOworICAgICAgICBiYi5wbGFpbigiKioqKioqKioqKioqKioqKioqKioiKTsKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgcmVjaXBlIGZpbGUgc2ltcGx5IHByb3ZpZGVzIGEgZGVzY3JpcHRpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgcmVjaXBlLCB0aGUgbmFtZSwgdmVyc2lvbiwgYW5kIHRoZSA8ZmlsZW5hbWU+ZG9fYnVpbGQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRhc2ssIHdoaWNoIHByaW50cyBvdXQgIkhlbGxvIFdvcmxkIiB0byB0aGUgY29uc29sZS4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZSB2YXJpYWJsZXMsIGZvbGxvdyB0aGUgbGlua3MKKyAgICAgICAgICAgICAgICB0byB0aGUgZ2xvc3NhcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJ1biBCaXRiYWtlIFdpdGggYSBUYXJnZXQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBOb3cgdGhhdCBhIEJpdEJha2UgdGFyZ2V0IGV4aXN0cywgcnVuIHRoZSBjb21tYW5kIGFuZCBwcm92aWRlCisgICAgICAgICAgICAgICAgdGhhdCB0YXJnZXQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkICRIT01FL2hlbGxvCisgICAgICQgYml0YmFrZSBwcmludGhlbGxvCisgICAgIEVSUk9SOiBubyByZWNpcGUgZmlsZXMgdG8gYnVpbGQsIGNoZWNrIHlvdXIgQkJQQVRIIGFuZCBCQkZJTEVTPworCisgICAgIFN1bW1hcnk6IFRoZXJlIHdhcyAxIEVSUk9SIG1lc3NhZ2Ugc2hvd24sIHJldHVybmluZyBhIG5vbi16ZXJvIGV4aXQgY29kZS4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgV2UgaGF2ZSBjcmVhdGVkIHRoZSBsYXllciB3aXRoIHRoZSByZWNpcGUgYW5kIHRoZSBsYXllcgorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBidXQgaXQgc3RpbGwgc2VlbXMgdGhhdCBCaXRCYWtlIGNhbm5vdAorICAgICAgICAgICAgICAgIGZpbmQgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIG5lZWRzIGEgPGZpbGVuYW1lPmNvbmYvYmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IHRoYXQKKyAgICAgICAgICAgICAgICBsaXN0cyB0aGUgbGF5ZXJzIGZvciB0aGUgcHJvamVjdC4KKyAgICAgICAgICAgICAgICBXaXRob3V0IHRoaXMgZmlsZSwgQml0QmFrZSBjYW5ub3QgZmluZCB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGluZyA8ZmlsZW5hbWU+Y29uZi9iYmxheWVycy5jb25mPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlIDxmaWxlbmFtZT5jb25mL2JibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgdG8gbG9jYXRlIGxheWVycyBuZWVkZWQgZm9yIHRoZSBwcm9qZWN0LgorICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBtdXN0IHJlc2lkZSBpbiB0aGUgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBvZiB0aGUgcHJvamVjdCAoaS5lLiA8ZmlsZW5hbWU+aGVsbG8vY29uZjwvZmlsZW5hbWU+IGZvciB0aGlzCisgICAgICAgICAgICAgICAgZXhhbXBsZSkuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPlNldCB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IHRvIHRoZSA8ZmlsZW5hbWU+aGVsbG8vY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGFuZCB0aGVuIGNyZWF0ZSB0aGUgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUgc28gdGhhdCBpdCBjb250YWlucyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJMQVlFUlMgPz0gIiBcCisgICAgICAgL2hvbWUvJmx0O3lvdSZndDsvbXlsYXllciBcCisgICAgICAgIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBwcm92aWRlIHlvdXIgb3duIGluZm9ybWF0aW9uIGZvcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b3U8L2ZpbGVuYW1lPiBpbiB0aGUgZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UnVuIEJpdGJha2UgV2l0aCBhIFRhcmdldDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIE5vdyB0aGF0IHlvdSBoYXZlIHN1cHBsaWVkIHRoZSA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZSwgcnVuIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgYW5kIHByb3ZpZGUKKyAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIHByaW50aGVsbG8KKyAgICAgUGFyc2luZyByZWNpcGVzOiAxMDAlIHwjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjfAorICAgICBUaW1lOiAwMDowMDowMAorICAgICBQYXJzaW5nIG9mIDEgLmJiIGZpbGVzIGNvbXBsZXRlICgwIGNhY2hlZCwgMSBwYXJzZWQpLiAxIHRhcmdldHMsIDAgc2tpcHBlZCwgMCBtYXNrZWQsIDAgZXJyb3JzLgorICAgICBOT1RFOiBSZXNvbHZpbmcgYW55IG1pc3NpbmcgdGFzayBxdWV1ZSBkZXBlbmRlbmNpZXMKKyAgICAgTk9URTogUHJlcGFyaW5nIFJ1blF1ZXVlCisgICAgIE5PVEU6IEV4ZWN1dGluZyBSdW5RdWV1ZSBUYXNrcworICAgICAqKioqKioqKioqKioqKioqKioqKgorICAgICAqICAgICAgICAgICAgICAgICAgKgorICAgICAqICBIZWxsbywgV29ybGQhICAgKgorICAgICAqICAgICAgICAgICAgICAgICAgKgorICAgICAqKioqKioqKioqKioqKioqKioqKgorICAgICBOT1RFOiBUYXNrcyBTdW1tYXJ5OiBBdHRlbXB0ZWQgMSB0YXNrcyBvZiB3aGljaCAwIGRpZG4ndCBuZWVkIHRvIGJlIHJlcnVuIGFuZCBhbGwgc3VjY2VlZGVkLgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIGZpbmRzIHRoZSA8ZmlsZW5hbWU+cHJpbnRoZWxsbzwvZmlsZW5hbWU+IHJlY2lwZSBhbmQKKyAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkgcnVucyB0aGUgdGFzay4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgdGhlIGZpcnN0IGV4ZWN1dGlvbiwgcmUtcnVubmluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSBwcmludGhlbGxvPC9maWxlbmFtZT4gYWdhaW4gd2lsbCBub3QKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IGluIGEgQml0QmFrZSBydW4gdGhhdCBwcmludHMgdGhlIHNhbWUgY29uc29sZQorICAgICAgICAgICAgICAgICAgICBvdXRwdXQuCisgICAgICAgICAgICAgICAgICAgIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCB0aGUgZmlyc3QgdGltZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnByaW50aGVsbG8uYmI8L2ZpbGVuYW1lPiByZWNpcGUncworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fYnVpbGQ8L2ZpbGVuYW1lPiB0YXNrIGV4ZWN1dGVzCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWxseSwgQml0QmFrZSB3cml0ZXMgYSBzdGFtcCBmaWxlIGZvciB0aGUgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgVGh1cywgdGhlIG5leHQgdGltZSB5b3UgYXR0ZW1wdCB0byBydW4gdGhlIHRhc2sKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhhdCBzYW1lIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBub3RpY2VzIHRoZSBzdGFtcCBhbmQgdGhlcmVmb3JlIGRldGVybWluZXMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCB0aGUgdGFzayBkb2VzIG5vdCBuZWVkIHRvIGJlIHJlLXJ1bi4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRlbGV0ZSB0aGUgPGZpbGVuYW1lPnRtcDwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICBvciBydW4gPGZpbGVuYW1lPmJpdGJha2UgLWMgY2xlYW4gcHJpbnRoZWxsbzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGVuIHJlLXJ1biB0aGUgYnVpbGQsIHRoZSAiSGVsbG8sIFdvcmxkISIgbWVzc2FnZSB3aWxsCisgICAgICAgICAgICAgICAgICAgIGJlIHByaW50ZWQgYWdhaW4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgIDwvc2VjdGlvbj4KKzwvYXBwZW5kaXg+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1pbnRyby54bWwgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1pbnRyby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE4ODY1NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWludHJvLnhtbApAQCAtMCwwICsxLDY4NSBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiPgorCis8Y2hhcHRlciBpZD0iYml0YmFrZS11c2VyLW1hbnVhbC1pbnRybyI+CisgICAgPHRpdGxlPk92ZXJ2aWV3PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBXZWxjb21lIHRvIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsLgorICAgICAgICBUaGlzIG1hbnVhbCBwcm92aWRlcyBpbmZvcm1hdGlvbiBvbiB0aGUgQml0QmFrZSB0b29sLgorICAgICAgICBUaGUgaW5mb3JtYXRpb24gYXR0ZW1wdHMgdG8gYmUgYXMgaW5kZXBlbmRlbnQgYXMgcG9zc2libGUgcmVnYXJkaW5nCisgICAgICAgIHN5c3RlbXMgdGhhdCB1c2UgQml0QmFrZSwgc3VjaCBhcyBPcGVuRW1iZWRkZWQgYW5kIHRoZQorICAgICAgICBZb2N0byBQcm9qZWN0LgorICAgICAgICBJbiBzb21lIGNhc2VzLCBzY2VuYXJpb3Mgb3IgZXhhbXBsZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mCisgICAgICAgIGEgYnVpbGQgc3lzdGVtIGFyZSB1c2VkIGluIHRoZSBtYW51YWwgdG8gaGVscCB3aXRoIHVuZGVyc3RhbmRpbmcuCisgICAgICAgIEZvciB0aGVzZSBjYXNlcywgdGhlIG1hbnVhbCBjbGVhcmx5IHN0YXRlcyB0aGUgY29udGV4dC4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0iaW50cm8iPgorICAgICAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZ1bmRhbWVudGFsbHksIEJpdEJha2UgaXMgYSBnZW5lcmljIHRhc2sgZXhlY3V0aW9uCisgICAgICAgICAgICBlbmdpbmUgdGhhdCBhbGxvd3Mgc2hlbGwgYW5kIFB5dGhvbiB0YXNrcyB0byBiZSBydW4KKyAgICAgICAgICAgIGVmZmljaWVudGx5IGFuZCBpbiBwYXJhbGxlbCB3aGlsZSB3b3JraW5nIHdpdGhpbgorICAgICAgICAgICAgY29tcGxleCBpbnRlci10YXNrIGRlcGVuZGVuY3kgY29uc3RyYWludHMuCisgICAgICAgICAgICBPbmUgb2YgQml0QmFrZSdzIG1haW4gdXNlcnMsIE9wZW5FbWJlZGRlZCwgdGFrZXMgdGhpcyBjb3JlCisgICAgICAgICAgICBhbmQgYnVpbGRzIGVtYmVkZGVkIExpbnV4IHNvZnR3YXJlIHN0YWNrcyB1c2luZworICAgICAgICAgICAgYSB0YXNrLW9yaWVudGVkIGFwcHJvYWNoLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDb25jZXB0dWFsbHksIEJpdEJha2UgaXMgc2ltaWxhciB0byBHTlUgTWFrZSBpbgorICAgICAgICAgICAgc29tZSByZWdhcmRzIGJ1dCBoYXMgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBleGVjdXRlcyB0YXNrcyBhY2NvcmRpbmcgdG8gcHJvdmlkZWQKKyAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEgdGhhdCBidWlsZHMgdXAgdGhlIHRhc2tzLgorICAgICAgICAgICAgICAgICAgICBNZXRhZGF0YSBpcyBzdG9yZWQgaW4gcmVjaXBlICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgIGFuZCByZWxhdGVkIHJlY2lwZSAiYXBwZW5kIiAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICBmaWxlcywgY29uZmlndXJhdGlvbiAoPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4pIGFuZAorICAgICAgICAgICAgICAgICAgICB1bmRlcmx5aW5nIGluY2x1ZGUgKDxmaWxlbmFtZT4uaW5jPC9maWxlbmFtZT4pIGZpbGVzLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgaW4gY2xhc3MgKDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+KSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1ldGFkYXRhIHByb3ZpZGVzCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2Ugd2l0aCBpbnN0cnVjdGlvbnMgb24gd2hhdCB0YXNrcyB0byBydW4gYW5kCisgICAgICAgICAgICAgICAgICAgIHRoZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aG9zZSB0YXNrcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGluY2x1ZGVzIGEgZmV0Y2hlciBsaWJyYXJ5IGZvciBvYnRhaW5pbmcgc291cmNlCisgICAgICAgICAgICAgICAgICAgIGNvZGUgZnJvbSB2YXJpb3VzIHBsYWNlcyBzdWNoIGFzIGxvY2FsIGZpbGVzLCBzb3VyY2UgY29udHJvbAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW1zLCBvciB3ZWJzaXRlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgaW5zdHJ1Y3Rpb25zIGZvciBlYWNoIHVuaXQgdG8gYmUgYnVpbHQgKGUuZy4gYSBwaWVjZQorICAgICAgICAgICAgICAgICAgICBvZiBzb2Z0d2FyZSkgYXJlIGtub3duIGFzICJyZWNpcGUiIGZpbGVzIGFuZAorICAgICAgICAgICAgICAgICAgICBjb250YWluIGFsbCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVuaXQKKyAgICAgICAgICAgICAgICAgICAgKGRlcGVuZGVuY2llcywgc291cmNlIGZpbGUgbG9jYXRpb25zLCBjaGVja3N1bXMsIGRlc2NyaXB0aW9uCisgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBvbikuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBpbmNsdWRlcyBhIGNsaWVudC9zZXJ2ZXIgYWJzdHJhY3Rpb24gYW5kIGNhbgorICAgICAgICAgICAgICAgICAgICBiZSB1c2VkIGZyb20gYSBjb21tYW5kIGxpbmUgb3IgdXNlZCBhcyBhIHNlcnZpY2Ugb3ZlcgorICAgICAgICAgICAgICAgICAgICBYTUwtUlBDIGFuZCBoYXMgc2V2ZXJhbCBkaWZmZXJlbnQgdXNlciBpbnRlcmZhY2VzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9Imhpc3RvcnktYW5kLWdvYWxzIj4KKyAgICAgICAgPHRpdGxlPkhpc3RvcnkgYW5kIEdvYWxzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2Ugd2FzIG9yaWdpbmFsbHkgYSBwYXJ0IG9mIHRoZSBPcGVuRW1iZWRkZWQgcHJvamVjdC4KKyAgICAgICAgICAgIEl0IHdhcyBpbnNwaXJlZCBieSB0aGUgUG9ydGFnZSBwYWNrYWdlIG1hbmFnZW1lbnQgc3lzdGVtCisgICAgICAgICAgICB1c2VkIGJ5IHRoZSBHZW50b28gTGludXggZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgT24gRGVjZW1iZXIgNywgMjAwNCwgT3BlbkVtYmVkZGVkIHByb2plY3QgdGVhbSBtZW1iZXIKKyAgICAgICAgICAgIENocmlzIExhcnNvbiBzcGxpdCB0aGUgcHJvamVjdCBpbnRvIHR3byBkaXN0aW5jdCBwaWVjZXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CaXRCYWtlLCBhIGdlbmVyaWMgdGFzayBleGVjdXRvcjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5PcGVuRW1iZWRkZWQsIGEgbWV0YWRhdGEgc2V0IHV0aWxpemVkIGJ5CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2U8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgVG9kYXksIEJpdEJha2UgaXMgdGhlIHByaW1hcnkgYmFzaXMgb2YgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vd3d3Lm9wZW5lbWJlZGRlZC5vcmcvIj5PcGVuRW1iZWRkZWQ8L3VsaW5rPgorICAgICAgICAgICAgcHJvamVjdCwgd2hpY2ggaXMgYmVpbmcgdXNlZCB0byBidWlsZCBhbmQgbWFpbnRhaW4gTGludXgKKyAgICAgICAgICAgIGRpc3RyaWJ1dGlvbnMgc3VjaCBhcyB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cuYW5nc3Ryb20tZGlzdHJpYnV0aW9uLm9yZy8nPkFuZ3N0cm9tIERpc3RyaWJ1dGlvbjwvdWxpbms+LAorICAgICAgICAgICAgYW5kIHdoaWNoIGlzIGFsc28gYmVpbmcgdXNlZCBhcyB0aGUgYnVpbGQgdG9vbCBmb3IgTGludXggcHJvamVjdHMKKyAgICAgICAgICAgIHN1Y2ggYXMgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcnPllvY3RvIFByb2plY3Q8L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUHJpb3IgdG8gQml0QmFrZSwgbm8gb3RoZXIgYnVpbGQgdG9vbCBhZGVxdWF0ZWx5IG1ldCB0aGUgbmVlZHMgb2YKKyAgICAgICAgICAgIGFuIGFzcGlyaW5nIGVtYmVkZGVkIExpbnV4IGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgIEFsbCBvZiB0aGUgYnVpbGQgc3lzdGVtcyB1c2VkIGJ5IHRyYWRpdGlvbmFsIGRlc2t0b3AgTGludXgKKyAgICAgICAgICAgIGRpc3RyaWJ1dGlvbnMgbGFja2VkIGltcG9ydGFudCBmdW5jdGlvbmFsaXR5LCBhbmQgbm9uZSBvZiB0aGUKKyAgICAgICAgICAgIGFkIGhvYyBCdWlsZHJvb3QtYmFzZWQgc3lzdGVtcywgcHJldmFsZW50IGluIHRoZQorICAgICAgICAgICAgZW1iZWRkZWQgc3BhY2UsIHdlcmUgc2NhbGFibGUgb3IgbWFpbnRhaW5hYmxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTb21lIGltcG9ydGFudCBvcmlnaW5hbCBnb2FscyBmb3IgQml0QmFrZSB3ZXJlOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhhbmRsZSBjcm9zcy1jb21waWxhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIYW5kbGUgaW50ZXItcGFja2FnZSBkZXBlbmRlbmNpZXMgKGJ1aWxkIHRpbWUgb24KKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgYnVpbGQgdGltZSBvbiBuYXRpdmUKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlLCBhbmQgcnVudGltZSkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3VwcG9ydCBydW5uaW5nIGFueSBudW1iZXIgb2YgdGFza3Mgd2l0aGluIGEgZ2l2ZW4KKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSwgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIGZldGNoaW5nCisgICAgICAgICAgICAgICAgICAgIHVwc3RyZWFtIHNvdXJjZXMsIHVucGFja2luZyB0aGVtLCBwYXRjaGluZyB0aGVtLAorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmluZyB0aGVtLCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmUgTGludXggZGlzdHJpYnV0aW9uIGFnbm9zdGljIGZvciBib3RoIGJ1aWxkIGFuZAorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgc3lzdGVtcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZSBhcmNoaXRlY3R1cmUgYWdub3N0aWMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3VwcG9ydCBtdWx0aXBsZSBidWlsZCBhbmQgdGFyZ2V0IG9wZXJhdGluZyBzeXN0ZW1zCisgICAgICAgICAgICAgICAgICAgIChlLmcuIEN5Z3dpbiwgdGhlIEJTRHMsIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmUgc2VsZiBjb250YWluZWQsIHJhdGhlciB0aGFuIHRpZ2h0bHkKKyAgICAgICAgICAgICAgICAgICAgaW50ZWdyYXRlZCBpbnRvIHRoZSBidWlsZCBtYWNoaW5lJ3Mgcm9vdAorICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhhbmRsZSBjb25kaXRpb25hbCBtZXRhZGF0YSBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW5nIHN5c3RlbSwgZGlzdHJpYnV0aW9uLCBhbmQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZSBlYXN5IHRvIHVzZSB0aGUgdG9vbHMgdG8gc3VwcGx5IGxvY2FsIG1ldGFkYXRhIGFuZCBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICBhZ2FpbnN0IHdoaWNoIHRvIG9wZXJhdGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmUgZWFzeSB0byB1c2UgQml0QmFrZSB0byBjb2xsYWJvcmF0ZSBiZXR3ZWVuIG11bHRpcGxlCisgICAgICAgICAgICAgICAgICAgIHByb2plY3RzIGZvciB0aGVpciBidWlsZHMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkZSBhbiBpbmhlcml0YW5jZSBtZWNoYW5pc20gdG8gc2hhcmUKKyAgICAgICAgICAgICAgICAgICAgY29tbW9uIG1ldGFkYXRhIGJldHdlZW4gbWFueSBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIE92ZXIgdGltZSBpdCBiZWNhbWUgYXBwYXJlbnQgdGhhdCBzb21lIGZ1cnRoZXIgcmVxdWlyZW1lbnRzCisgICAgICAgICAgICB3ZXJlIG5lY2Vzc2FyeToKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIYW5kbGUgdmFyaWFudHMgb2YgYSBiYXNlIHJlY2lwZSAoZS5nLiBuYXRpdmUsIHNkaywKKyAgICAgICAgICAgICAgICAgICAgYW5kIG11bHRpbGliKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGxpdCBtZXRhZGF0YSBpbnRvIGxheWVycyBhbmQgYWxsb3cgbGF5ZXJzCisgICAgICAgICAgICAgICAgICAgIHRvIGVuaGFuY2Ugb3Igb3ZlcnJpZGUgb3RoZXIgbGF5ZXJzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFsbG93IHJlcHJlc2VudGF0aW9uIG9mIGEgZ2l2ZW4gc2V0IG9mIGlucHV0IHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICB0byBhIHRhc2sgYXMgYSBjaGVja3N1bS4KKyAgICAgICAgICAgICAgICAgICAgQmFzZWQgb24gdGhhdCBjaGVja3N1bSwgYWxsb3cgYWNjZWxlcmF0aW9uIG9mIGJ1aWxkcworICAgICAgICAgICAgICAgICAgICB3aXRoIHByZWJ1aWx0IGNvbXBvbmVudHMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICBCaXRCYWtlIHNhdGlzZmllcyBhbGwgdGhlIG9yaWdpbmFsIHJlcXVpcmVtZW50cyBhbmQgbWFueSBtb3JlCisgICAgICAgICAgICB3aXRoIGV4dGVuc2lvbnMgYmVpbmcgbWFkZSB0byB0aGUgYmFzaWMgZnVuY3Rpb25hbGl0eSB0bworICAgICAgICAgICAgcmVmbGVjdCB0aGUgYWRkaXRpb25hbCByZXF1aXJlbWVudHMuCisgICAgICAgICAgICBGbGV4aWJpbGl0eSBhbmQgcG93ZXIgaGF2ZSBhbHdheXMgYmVlbiB0aGUgcHJpb3JpdGllcy4KKyAgICAgICAgICAgIEJpdEJha2UgaXMgaGlnaGx5IGV4dGVuc2libGUgYW5kIHN1cHBvcnRzIGVtYmVkZGVkIFB5dGhvbiBjb2RlIGFuZAorICAgICAgICAgICAgZXhlY3V0aW9uIG9mIGFueSBhcmJpdHJhcnkgdGFza3MuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iQ29uY2VwdHMiPgorICAgICAgICA8dGl0bGU+Q29uY2VwdHM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBpcyBhIHByb2dyYW0gd3JpdHRlbiBpbiB0aGUgUHl0aG9uIGxhbmd1YWdlLgorICAgICAgICAgICAgQXQgdGhlIGhpZ2hlc3QgbGV2ZWwsIEJpdEJha2UgaW50ZXJwcmV0cyBtZXRhZGF0YSwgZGVjaWRlcworICAgICAgICAgICAgd2hhdCB0YXNrcyBhcmUgcmVxdWlyZWQgdG8gcnVuLCBhbmQgZXhlY3V0ZXMgdGhvc2UgdGFza3MuCisgICAgICAgICAgICBTaW1pbGFyIHRvIEdOVSBNYWtlLCBCaXRCYWtlIGNvbnRyb2xzIGhvdyBzb2Z0d2FyZSBpcworICAgICAgICAgICAgYnVpbHQuCisgICAgICAgICAgICBHTlUgTWFrZSBhY2hpZXZlcyBpdHMgY29udHJvbCB0aHJvdWdoICJtYWtlZmlsZXMiLCB3aGlsZQorICAgICAgICAgICAgQml0QmFrZSB1c2VzICJyZWNpcGVzIi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBleHRlbmRzIHRoZSBjYXBhYmlsaXRpZXMgb2YgYSBzaW1wbGUKKyAgICAgICAgICAgIHRvb2wgbGlrZSBHTlUgTWFrZSBieSBhbGxvd2luZyBmb3IgdGhlIGRlZmluaXRpb24gb2YgbXVjaCBtb3JlCisgICAgICAgICAgICBjb21wbGV4IHRhc2tzLCBzdWNoIGFzIGFzc2VtYmxpbmcgZW50aXJlIGVtYmVkZGVkIExpbnV4CisgICAgICAgICAgICBkaXN0cmlidXRpb25zLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgc2VjdGlvbiBpbnRyb2R1Y2VzIHNldmVyYWwgY29uY2VwdHMKKyAgICAgICAgICAgIHRoYXQgc2hvdWxkIGJlIHVuZGVyc3Rvb2QgaW4gb3JkZXIgdG8gYmV0dGVyIGxldmVyYWdlCisgICAgICAgICAgICB0aGUgcG93ZXIgb2YgQml0QmFrZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdyZWNpcGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5SZWNpcGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQml0QmFrZSBSZWNpcGVzLCB3aGljaCBhcmUgZGVub3RlZCBieSB0aGUgZmlsZSBleHRlbnNpb24KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4sIGFyZSB0aGUgbW9zdCBiYXNpYyBtZXRhZGF0YSBmaWxlcy4KKyAgICAgICAgICAgICAgICBUaGVzZSByZWNpcGUgZmlsZXMgcHJvdmlkZSBCaXRCYWtlIHdpdGggdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RGVzY3JpcHRpdmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIChhdXRob3IsIGhvbWVwYWdlLCBsaWNlbnNlLCBhbmQgc28gb24pPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgdmVyc2lvbiBvZiB0aGUgcmVjaXBlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeGlzdGluZyBkZXBlbmRlbmNpZXMgKGJvdGggYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBydW50aW1lIGRlcGVuZGVuY2llcyk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZXJlIHRoZSBzb3VyY2UgY29kZSByZXNpZGVzIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgaG93IHRvIGZldGNoIGl0PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGV0aGVyIHRoZSBzb3VyY2UgY29kZSByZXF1aXJlcworICAgICAgICAgICAgICAgICAgICAgICAgYW55IHBhdGNoZXMsIHdoZXJlIHRvIGZpbmQgdGhlbSwgYW5kIGhvdyB0byBhcHBseQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlbTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SG93IHRvIGNvbmZpZ3VyZSBhbmQgY29tcGlsZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBjb2RlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGVyZSBvbiB0aGUgdGFyZ2V0IG1hY2hpbmUgdG8gaW5zdGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2Ugb3IgcGFja2FnZXMgY3JlYXRlZDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaXRoaW4gdGhlIGNvbnRleHQgb2YgQml0QmFrZSwgb3IgYW55IHByb2plY3QgdXRpbGl6aW5nIEJpdEJha2UKKyAgICAgICAgICAgICAgICBhcyBpdHMgYnVpbGQgc3lzdGVtLCBmaWxlcyB3aXRoIHRoZSA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBleHRlbnNpb24gYXJlIHJlZmVycmVkIHRvIGFzIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoZSB0ZXJtICJwYWNrYWdlIiBpcyBhbHNvIGNvbW1vbmx5IHVzZWQgdG8gZGVzY3JpYmUgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgc2luY2UgdGhlIHNhbWUgd29yZCBpcyB1c2VkIHRvIGRlc2NyaWJlIHBhY2thZ2VkCisgICAgICAgICAgICAgICAgICAgIG91dHB1dCBmcm9tIGEgcHJvamVjdCwgaXQgaXMgYmVzdCB0byBtYWludGFpbiBhIHNpbmdsZQorICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGl2ZSB0ZXJtIC0gInJlY2lwZXMiLgorICAgICAgICAgICAgICAgICAgICBQdXQgYW5vdGhlciB3YXksIGEgc2luZ2xlICJyZWNpcGUiIGZpbGUgaXMgcXVpdGUgY2FwYWJsZQorICAgICAgICAgICAgICAgICAgICBvZiBnZW5lcmF0aW5nIGEgbnVtYmVyIG9mIHJlbGF0ZWQgYnV0IHNlcGFyYXRlbHkgaW5zdGFsbGFibGUKKyAgICAgICAgICAgICAgICAgICAgInBhY2thZ2VzIi4KKyAgICAgICAgICAgICAgICAgICAgSW4gZmFjdCwgdGhhdCBhYmlsaXR5IGlzIGZhaXJseSBjb21tb24uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyYXRpb24tZmlsZXMnPgorICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyYXRpb24gRmlsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uIGZpbGVzLCB3aGljaCBhcmUgZGVub3RlZCBieSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiBleHRlbnNpb24sIGRlZmluZQorICAgICAgICAgICAgICAgIHZhcmlvdXMgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdGhhdCBnb3Zlcm4gdGhlIHByb2plY3QncyBidWlsZAorICAgICAgICAgICAgICAgIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgVGhlc2UgZmlsZXMgZmFsbCBpbnRvIHNldmVyYWwgYXJlYXMgdGhhdCBkZWZpbmUKKyAgICAgICAgICAgICAgICBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICBvcHRpb25zLCBjb21waWxlciB0dW5pbmcgb3B0aW9ucywgZ2VuZXJhbCBjb21tb24KKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB1c2VyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKyAgICAgICAgICAgICAgICBUaGUgbWFpbiBjb25maWd1cmF0aW9uIGZpbGUgaXMgdGhlIHNhbXBsZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcworICAgICAgICAgICAgICAgIGxvY2F0ZWQgd2l0aGluIHRoZSBCaXRCYWtlIHNvdXJjZSB0cmVlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY2xhc3Nlcyc+CisgICAgICAgICAgICA8dGl0bGU+Q2xhc3NlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIENsYXNzIGZpbGVzLCB3aGljaCBhcmUgZGVub3RlZCBieSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPiBleHRlbnNpb24sIGNvbnRhaW4KKyAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiB0aGF0IGlzIHVzZWZ1bCB0byBzaGFyZSBiZXR3ZWVuIG1ldGFkYXRhIGZpbGVzLgorICAgICAgICAgICAgICAgIFRoZSBCaXRCYWtlIHNvdXJjZSB0cmVlIGN1cnJlbnRseSBjb21lcyB3aXRoIG9uZSBjbGFzcyBtZXRhZGF0YSBmaWxlCisgICAgICAgICAgICAgICAgY2FsbGVkIDxmaWxlbmFtZT5iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhpcyBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jbGFzc2VzPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4gY2xhc3MgZmlsZXMgaXMgc3BlY2lhbCBzaW5jZSBpdAorICAgICAgICAgICAgICAgIGlzIGFsd2F5cyBpbmNsdWRlZCBhdXRvbWF0aWNhbGx5IGZvciBhbGwgcmVjaXBlcworICAgICAgICAgICAgICAgIGFuZCBjbGFzc2VzLgorICAgICAgICAgICAgICAgIFRoaXMgY2xhc3MgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHN0YW5kYXJkIGJhc2ljIHRhc2tzIHN1Y2gKKyAgICAgICAgICAgICAgICBhcyBmZXRjaGluZywgdW5wYWNraW5nLCBjb25maWd1cmluZyAoZW1wdHkgYnkgZGVmYXVsdCksCisgICAgICAgICAgICAgICAgY29tcGlsaW5nIChydW5zIGFueSBNYWtlZmlsZSBwcmVzZW50KSwgaW5zdGFsbGluZyAoZW1wdHkgYnkKKyAgICAgICAgICAgICAgICBkZWZhdWx0KSBhbmQgcGFja2FnaW5nIChlbXB0eSBieSBkZWZhdWx0KS4KKyAgICAgICAgICAgICAgICBUaGVzZSB0YXNrcyBhcmUgb2Z0ZW4gb3ZlcnJpZGRlbiBvciBleHRlbmRlZCBieSBvdGhlciBjbGFzc2VzCisgICAgICAgICAgICAgICAgYWRkZWQgZHVyaW5nIHRoZSBwcm9qZWN0IGRldmVsb3BtZW50IHByb2Nlc3MuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbGF5ZXJzJz4KKyAgICAgICAgICAgIDx0aXRsZT5MYXllcnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBMYXllcnMgYWxsb3cgeW91IHRvIGlzb2xhdGUgZGlmZmVyZW50IHR5cGVzIG9mCisgICAgICAgICAgICAgICAgY3VzdG9taXphdGlvbnMgZnJvbSBlYWNoIG90aGVyLgorICAgICAgICAgICAgICAgIFdoaWxlIHlvdSBtaWdodCBmaW5kIGl0IHRlbXB0aW5nIHRvIGtlZXAgZXZlcnl0aGluZyBpbiBvbmUgbGF5ZXIKKyAgICAgICAgICAgICAgICB3aGVuIHdvcmtpbmcgb24gYSBzaW5nbGUgcHJvamVjdCwgdGhlIG1vcmUgbW9kdWxhciB5b3Ugb3JnYW5pemUKKyAgICAgICAgICAgICAgICB5b3VyIG1ldGFkYXRhLCB0aGUgZWFzaWVyIGl0IGlzIHRvIGNvcGUgd2l0aCBmdXR1cmUgY2hhbmdlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gaWxsdXN0cmF0ZSBob3cgeW91IGNhbiB1c2UgbGF5ZXJzIHRvIGtlZXAgdGhpbmdzIG1vZHVsYXIsCisgICAgICAgICAgICAgICAgY29uc2lkZXIgY3VzdG9taXphdGlvbnMgeW91IG1pZ2h0IG1ha2UgdG8gc3VwcG9ydCBhIHNwZWNpZmljIHRhcmdldCBtYWNoaW5lLgorICAgICAgICAgICAgICAgIFRoZXNlIHR5cGVzIG9mIGN1c3RvbWl6YXRpb25zIHR5cGljYWxseSByZXNpZGUgaW4gYSBzcGVjaWFsIGxheWVyLAorICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIGEgZ2VuZXJhbCBsYXllciwgY2FsbGVkIGEgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApCisgICAgICAgICAgICAgICAgTGF5ZXIuCisgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIHRoZSBtYWNoaW5lIGN1c3RvbWl6YXRpb25zIHNob3VsZCBiZSBpc29sYXRlZCBmcm9tCisgICAgICAgICAgICAgICAgcmVjaXBlcyBhbmQgbWV0YWRhdGEgdGhhdCBzdXBwb3J0IGEgbmV3IEdVSSBlbnZpcm9ubWVudCwgZm9yCisgICAgICAgICAgICAgICAgZXhhbXBsZS4KKyAgICAgICAgICAgICAgICBUaGlzIHNpdHVhdGlvbiBnaXZlcyB5b3UgYSBjb3VwbGUgb2YgbGF5ZXJzOiBvbmUgZm9yIHRoZSBtYWNoaW5lCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMgYW5kIG9uZSBmb3IgdGhlIEdVSSBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCwgaG93ZXZlciwgdGhhdCB0aGUgQlNQIGxheWVyIGNhbiBzdGlsbAorICAgICAgICAgICAgICAgIG1ha2UgbWFjaGluZS1zcGVjaWZpYyBhZGRpdGlvbnMgdG8gcmVjaXBlcyB3aXRoaW4KKyAgICAgICAgICAgICAgICB0aGUgR1VJIGVudmlyb25tZW50IGxheWVyIHdpdGhvdXQgcG9sbHV0aW5nIHRoZSBHVUkgbGF5ZXIgaXRzZWxmCisgICAgICAgICAgICAgICAgd2l0aCB0aG9zZSBtYWNoaW5lLXNwZWNpZmljIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgWW91IGNhbiBhY2NvbXBsaXNoIHRoaXMgdGhyb3VnaCBhIHJlY2lwZSB0aGF0IGlzIGEgQml0QmFrZSBhcHBlbmQKKyAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KSBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2FwcGVuZC1iYmFwcGVuZC1maWxlcyc+CisgICAgICAgICAgICA8dGl0bGU+QXBwZW5kIEZpbGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXBwZW5kIGZpbGVzLCB3aGljaCBhcmUgZmlsZXMgdGhhdCBoYXZlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGV4dGVuc2lvbiwgZXh0ZW5kIG9yCisgICAgICAgICAgICAgICAgb3ZlcnJpZGUgaW5mb3JtYXRpb24gaW4gYW4gZXhpc3RpbmcgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgZXhwZWN0cyBldmVyeSBhcHBlbmQgZmlsZSB0byBoYXZlIGEgY29ycmVzcG9uZGluZyByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICBGdXJ0aGVybW9yZSwgdGhlIGFwcGVuZCBmaWxlIGFuZCBjb3JyZXNwb25kaW5nIHJlY2lwZSBmaWxlCisgICAgICAgICAgICAgICAgbXVzdCB1c2UgdGhlIHNhbWUgcm9vdCBmaWxlbmFtZS4KKyAgICAgICAgICAgICAgICBUaGUgZmlsZW5hbWVzIGNhbiBkaWZmZXIgb25seSBpbiB0aGUgZmlsZSB0eXBlIHN1ZmZpeCB1c2VkCisgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPmZvcm1mYWN0b3JfMC4wLmJiPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvcm1mYWN0b3JfMC4wLmJiYXBwZW5kPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbmZvcm1hdGlvbiBpbiBhcHBlbmQgZmlsZXMgZXh0ZW5kcyBvcgorICAgICAgICAgICAgICAgIG92ZXJyaWRlcyB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIHVuZGVybHlpbmcsCisgICAgICAgICAgICAgICAgc2ltaWxhcmx5LW5hbWVkIHJlY2lwZSBmaWxlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiB5b3UgbmFtZSBhbiBhcHBlbmQgZmlsZSwgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgd2lsZGNhcmQgY2hhcmFjdGVyICglKSB0byBhbGxvdyBmb3IgbWF0Y2hpbmcgcmVjaXBlIG5hbWVzLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYXZlIGFuIGFwcGVuZCBmaWxlIG5hbWVkCisgICAgICAgICAgICAgICAgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGJ1c3lib3hfMS4yMS4lLmJiYXBwZW5kCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoYXQgYXBwZW5kIGZpbGUgd291bGQgbWF0Y2ggYW55IDxmaWxlbmFtZT5idXN5Ym94XzEuMjEueC5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmVyc2lvbiBvZiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgIFNvLCB0aGUgYXBwZW5kIGZpbGUgd291bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyByZWNpcGUgbmFtZXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBidXN5Ym94XzEuMjEuMS5iYgorICAgICBidXN5Ym94XzEuMjEuMi5iYgorICAgICBidXN5Ym94XzEuMjEuMy5iYgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJZiB0aGUgPGZpbGVuYW1lPmJ1c3lib3g8L2ZpbGVuYW1lPiByZWNpcGUgd2FzIHVwZGF0ZWQgdG8KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVzeWJveF8xLjMuMC5iYjwvZmlsZW5hbWU+LCB0aGUgYXBwZW5kIG5hbWUgd291bGQgbm90CisgICAgICAgICAgICAgICAgbWF0Y2guCisgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91IG5hbWVkIHRoZSBhcHBlbmQgZmlsZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idXN5Ym94XzEuJS5iYmFwcGVuZDwvZmlsZW5hbWU+LCB0aGVuIHlvdSB3b3VsZCBoYXZlIGEgbWF0Y2guCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIHRoZSBtb3N0IGdlbmVyYWwgY2FzZSwgeW91IGNvdWxkIG5hbWUgdGhlIGFwcGVuZCBmaWxlIHNvbWV0aGluZyBhcworICAgICAgICAgICAgICAgIHNpbXBsZSBhcyA8ZmlsZW5hbWU+YnVzeWJveF8lLmJiYXBwZW5kPC9maWxlbmFtZT4gdG8gYmUgZW50aXJlbHkKKyAgICAgICAgICAgICAgICB2ZXJzaW9uIGluZGVwZW5kZW50LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J29idGFpbmluZy1iaXRiYWtlJz4KKyAgICAgICAgPHRpdGxlPk9idGFpbmluZyBCaXRCYWtlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gb2J0YWluIEJpdEJha2Ugc2V2ZXJhbCBkaWZmZXJlbnQgd2F5czoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DbG9uaW5nIEJpdEJha2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgR2l0IHRvIGNsb25lIHRoZSBCaXRCYWtlIHNvdXJjZSBjb2RlIHJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgaXMgdGhlIHJlY29tbWVuZGVkIG1ldGhvZCBmb3Igb2J0YWluaW5nIEJpdEJha2UuCisgICAgICAgICAgICAgICAgICAgIENsb25pbmcgdGhlIHJlcG9zaXRvcnkgbWFrZXMgaXQgZWFzeSB0byBnZXQgYnVnIGZpeGVzCisgICAgICAgICAgICAgICAgICAgIGFuZCBoYXZlIGFjY2VzcyB0byBzdGFibGUgYnJhbmNoZXMgYW5kIHRoZSBtYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIGNsb25lZCBCaXRCYWtlLCB5b3Ugc2hvdWxkIHVzZQorICAgICAgICAgICAgICAgICAgICB0aGUgbGF0ZXN0IHN0YWJsZQorICAgICAgICAgICAgICAgICAgICBicmFuY2ggZm9yIGRldmVsb3BtZW50IHNpbmNlIHRoZSBtYXN0ZXIgYnJhbmNoIGlzIGZvcgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGRldmVsb3BtZW50IGFuZCBtaWdodCBjb250YWluIGxlc3Mgc3RhYmxlIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IHVzdWFsbHkgbmVlZCBhIHZlcnNpb24gb2YgQml0QmFrZQorICAgICAgICAgICAgICAgICAgICB0aGF0IG1hdGNoZXMgdGhlIG1ldGFkYXRhIHlvdSBhcmUgdXNpbmcuCisgICAgICAgICAgICAgICAgICAgIFRoZSBtZXRhZGF0YSBpcyBnZW5lcmFsbHkgYmFja3dhcmRzIGNvbXBhdGlibGUgYnV0CisgICAgICAgICAgICAgICAgICAgIG5vdCBmb3J3YXJkIGNvbXBhdGlibGUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5IZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBjbG9uZXMgdGhlIEJpdEJha2UgcmVwb3NpdG9yeToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGNsb25lcyB0aGUgQml0QmFrZSBHaXQgcmVwb3NpdG9yeSBpbnRvIGEKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGNhbGxlZCA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuCisgICAgICAgICAgICAgICAgICAgIGRlc2lnbmF0ZSBhIGRpcmVjdG9yeSBhZnRlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBjbG9uZTwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgaWYgeW91IHdhbnQgdG8gY2FsbCB0aGUgbmV3IGRpcmVjdG9yeSBzb21ldGhpbmcKKyAgICAgICAgICAgICAgICAgICAgb3RoZXIgdGhhbiA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBuYW1lcyB0aGUgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmRldjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UgYmJkZXYKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW5zdGFsbGF0aW9uIHVzaW5nIHlvdXIgRGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgICAgIFBhY2thZ2UgTWFuYWdlbWVudCBTeXN0ZW06PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRob2QgaXMgbm90CisgICAgICAgICAgICAgICAgICAgIHJlY29tbWVuZGVkIGJlY2F1c2UgdGhlIEJpdEJha2UgdmVyc2lvbiB0aGF0IGlzCisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkIGJ5IHlvdXIgZGlzdHJpYnV0aW9uLCBpbiBtb3N0IGNhc2VzLAorICAgICAgICAgICAgICAgICAgICBpcyBzZXZlcmFsCisgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VzIGJlaGluZCBhIHNuYXBzaG90IG9mIHRoZSBCaXRCYWtlIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VGFraW5nIGEgc25hcHNob3Qgb2YgQml0QmFrZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBEb3dubG9hZGluZyBhIHNuYXBzaG90IG9mIEJpdEJha2UgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgc291cmNlIGNvZGUgcmVwb3NpdG9yeSBnaXZlcyB5b3UgYWNjZXNzIHRvIGEga25vd24KKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoIG9yIHJlbGVhc2Ugb2YgQml0QmFrZS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgQ2xvbmluZyB0aGUgR2l0IHJlcG9zaXRvcnksIGFzIGRlc2NyaWJlZCBlYXJsaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRoZSBwcmVmZXJyZWQgbWV0aG9kIGZvciBnZXR0aW5nIEJpdEJha2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgQ2xvbmluZyB0aGUgcmVwb3NpdG9yeSBtYWtlcyBpdCBlYXNpZXIgdG8gdXBkYXRlIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hlcyBhcmUgYWRkZWQgdG8gdGhlIHN0YWJsZSBicmFuY2hlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBleGFtcGxlIGRvd25sb2FkcyBhIHNuYXBzaG90IG9mCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgdmVyc2lvbiAxLjE3LjA6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB3Z2V0IGh0dHA6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlL3NuYXBzaG90L2JpdGJha2UtMS4xNy4wLnRhci5negorICAgICAkIHRhciB6eHB2ZiBiaXRiYWtlLTEuMTcuMC50YXIuZ3oKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBBZnRlciBleHRyYWN0aW9uIG9mIHRoZSB0YXJiYWxsIHVzaW5nIHRoZSB0YXIgdXRpbGl0eSwKKyAgICAgICAgICAgICAgICAgICAgeW91IGhhdmUgYSBkaXJlY3RvcnkgZW50aXRsZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UtMS4xNy4wPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNpbmcgdGhlIEJpdEJha2UgdGhhdCBDb21lcyBXaXRoIFlvdXIKKyAgICAgICAgICAgICAgICAgICAgQnVpbGQgQ2hlY2tvdXQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQSBmaW5hbCBwb3NzaWJpbGl0eSBmb3IgZ2V0dGluZyBhIGNvcHkgb2YgQml0QmFrZSBpcyB0aGF0IGl0CisgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgY29tZXMgd2l0aCB5b3VyIGNoZWNrb3V0IG9mIGEgbGFyZ2VyIEJpdGJha2UtYmFzZWQgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtLCBzdWNoIGFzIFBva3kgb3IgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgUmF0aGVyIHRoYW4gbWFudWFsbHkgY2hlY2tpbmcgb3V0IGluZGl2aWR1YWwgbGF5ZXJzIGFuZAorICAgICAgICAgICAgICAgICAgICBnbHVpbmcgdGhlbSB0b2dldGhlciB5b3Vyc2VsZiwgeW91IGNhbiBjaGVjaworICAgICAgICAgICAgICAgICAgICBvdXQgYW4gZW50aXJlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNoZWNrb3V0IHdpbGwgYWxyZWFkeSBpbmNsdWRlIGEgdmVyc2lvbiBvZiBCaXRCYWtlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4gdGhvcm91Z2hseSB0ZXN0ZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjaGVjayBvdXQgYSBwYXJ0aWN1bGFyIEJpdEJha2UtYmFzZWQKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtLCBjb25zdWx0IHRoYXQgYnVpbGQgc3lzdGVtJ3Mgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImJpdGJha2UtdXNlci1tYW51YWwtY29tbWFuZCI+CisgICAgICAgIDx0aXRsZT5UaGUgQml0QmFrZSBDb21tYW5kPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgaXMgdGhlIHByaW1hcnkgaW50ZXJmYWNlCisgICAgICAgICAgICB0byB0aGUgQml0QmFrZSB0b29sLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByZXNlbnRzIHRoZSBCaXRCYWtlIGNvbW1hbmQgc3ludGF4IGFuZCBwcm92aWRlcworICAgICAgICAgICAgc2V2ZXJhbCBleGVjdXRpb24gZXhhbXBsZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNhZ2UtYW5kLXN5bnRheCc+CisgICAgICAgICAgICA8dGl0bGU+VXNhZ2UgYW5kIHN5bnRheDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyB0aGUgdXNhZ2UgYW5kIHN5bnRheCBmb3IgQml0QmFrZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtaAorICAgICBVc2FnZTogYml0YmFrZSBbb3B0aW9uc10gW3JlY2lwZW5hbWUvdGFyZ2V0IC4uLl0KKworICAgICAgICAgRXhlY3V0ZXMgdGhlIHNwZWNpZmllZCB0YXNrIChkZWZhdWx0IGlzICdidWlsZCcpIGZvciBhIGdpdmVuIHNldCBvZiB0YXJnZXQgcmVjaXBlcyAoLmJiIGZpbGVzKS4KKyAgICAgICAgIEl0IGlzIGFzc3VtZWQgdGhlcmUgaXMgYSBjb25mL2JibGF5ZXJzLmNvbmYgYXZhaWxhYmxlIGluIGN3ZCBvciBpbiBCQlBBVEggd2hpY2gKKyAgICAgICAgIHdpbGwgcHJvdmlkZSB0aGUgbGF5ZXIsIEJCRklMRVMgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCisKKyAgICAgT3B0aW9uczoKKyAgICAgICAtLXZlcnNpb24gICAgICAgICAgICAgc2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQKKyAgICAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgIC1iIEJVSUxERklMRSwgLS1idWlsZGZpbGU9QlVJTERGSUxFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGUgdGFza3MgZnJvbSBhIHNwZWNpZmljIC5iYiByZWNpcGUgZGlyZWN0bHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdBUk5JTkc6IERvZXMgbm90IGhhbmRsZSBhbnkgZGVwZW5kZW5jaWVzIGZyb20gb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlcy4KKyAgICAgICAtaywgLS1jb250aW51ZSAgICAgICAgQ29udGludWUgYXMgbXVjaCBhcyBwb3NzaWJsZSBhZnRlciBhbiBlcnJvci4gV2hpbGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCB0aGF0IGZhaWxlZCBhbmQgYW55dGhpbmcgZGVwZW5kaW5nIG9uIGl0IGNhbm5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBidWlsdCwgYXMgbXVjaCBhcyBwb3NzaWJsZSB3aWxsIGJlIGJ1aWx0IGJlZm9yZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wcGluZy4KKyAgICAgICAtYSwgLS10cnlhbHRjb25maWdzICAgQ29udGludWUgd2l0aCBidWlsZHMgYnkgdHJ5aW5nIHRvIHVzZSBhbHRlcm5hdGl2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlcnMgd2hlcmUgcG9zc2libGUuCisgICAgICAgLWYsIC0tZm9yY2UgICAgICAgICAgIEZvcmNlIHRoZSBzcGVjaWZpZWQgdGFyZ2V0cy90YXNrIHRvIHJ1biAoaW52YWxpZGF0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueSBleGlzdGluZyBzdGFtcCBmaWxlKS4KKyAgICAgICAtYyBDTUQsIC0tY21kPUNNRCAgICAgU3BlY2lmeSB0aGUgdGFzayB0byBleGVjdXRlLiBUaGUgZXhhY3Qgb3B0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgZGVwZW5kIG9uIHRoZSBtZXRhZGF0YS4gU29tZSBleGFtcGxlcyBtaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSAnY29tcGlsZScgb3IgJ3BvcHVsYXRlX3N5c3Jvb3QnIG9yICdsaXN0dGFza3MnIG1heQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaXZlIGEgbGlzdCBvZiB0aGUgdGFza3MgYXZhaWxhYmxlLgorICAgICAgIC1DIElOVkFMSURBVEVfU1RBTVAsIC0tY2xlYXItc3RhbXA9SU5WQUxJREFURV9TVEFNUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZhbGlkYXRlIHRoZSBzdGFtcCBmb3IgdGhlIHNwZWNpZmllZCB0YXNrIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBpbGUnIGFuZCB0aGVuIHJ1biB0aGUgZGVmYXVsdCB0YXNrIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIHRhcmdldChzKS4KKyAgICAgICAtciBQUkVGSUxFLCAtLXJlYWQ9UFJFRklMRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkIHRoZSBzcGVjaWZpZWQgZmlsZSBiZWZvcmUgYml0YmFrZS5jb25mLgorICAgICAgIC1SIFBPU1RGSUxFLCAtLXBvc3RyZWFkPVBPU1RGSUxFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWQgdGhlIHNwZWNpZmllZCBmaWxlIGFmdGVyIGJpdGJha2UuY29uZi4KKyAgICAgICAtdiwgLS12ZXJib3NlICAgICAgICAgT3V0cHV0IG1vcmUgbG9nIG1lc3NhZ2UgZGF0YSB0byB0aGUgdGVybWluYWwuCisgICAgICAgLUQsIC0tZGVidWcgICAgICAgICAgIEluY3JlYXNlIHRoZSBkZWJ1ZyBsZXZlbC4gWW91IGNhbiBzcGVjaWZ5IHRoaXMgbW9yZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGFuIG9uY2UuCisgICAgICAgLW4sIC0tZHJ5LXJ1biAgICAgICAgIERvbid0IGV4ZWN1dGUsIGp1c3QgZ28gdGhyb3VnaCB0aGUgbW90aW9ucy4KKyAgICAgICAtUyBTSUdOQVRVUkVfSEFORExFUiwgLS1kdW1wLXNpZ25hdHVyZXM9U0lHTkFUVVJFX0hBTkRMRVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHVtcCBvdXQgdGhlIHNpZ25hdHVyZSBjb25zdHJ1Y3Rpb24gaW5mb3JtYXRpb24sIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm8gdGFzayBleGVjdXRpb24uIFRoZSBTSUdOQVRVUkVfSEFORExFUiBwYXJhbWV0ZXIgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2VkIHRvIHRoZSBoYW5kbGVyLiBUd28gY29tbW9uIHZhbHVlcyBhcmUgbm9uZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRkaWZmIGJ1dCB0aGUgaGFuZGxlciBtYXkgZGVmaW5lIG1vcmUvbGVzcy4gbm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFucyBvbmx5IGR1bXAgdGhlIHNpZ25hdHVyZSwgcHJpbnRkaWZmIG1lYW5zIGNvbXBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGR1bXBlZCBzaWduYXR1cmUgd2l0aCB0aGUgY2FjaGVkIG9uZS4KKyAgICAgICAtcCwgLS1wYXJzZS1vbmx5ICAgICAgUXVpdCBhZnRlciBwYXJzaW5nIHRoZSBCQiByZWNpcGVzLgorICAgICAgIC1zLCAtLXNob3ctdmVyc2lvbnMgICBTaG93IGN1cnJlbnQgYW5kIHByZWZlcnJlZCB2ZXJzaW9ucyBvZiBhbGwgcmVjaXBlcy4KKyAgICAgICAtZSwgLS1lbnZpcm9ubWVudCAgICAgU2hvdyB0aGUgZ2xvYmFsIG9yIHBlci1yZWNpcGUgZW52aXJvbm1lbnQgY29tcGxldGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSB2YXJpYWJsZXMgd2VyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQvY2hhbmdlZC4KKyAgICAgICAtZywgLS1ncmFwaHZpeiAgICAgICAgU2F2ZSBkZXBlbmRlbmN5IHRyZWUgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cyBpbiB0aGUgZG90IHN5bnRheC4KKyAgICAgICAtSSBFWFRSQV9BU1NVTUVfUFJPVklERUQsIC0taWdub3JlLWRlcHM9RVhUUkFfQVNTVU1FX1BST1ZJREVECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc3VtZSB0aGVzZSBkZXBlbmRlbmNpZXMgZG9uJ3QgZXhpc3QgYW5kIGFyZSBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkIChlcXVpdmFsZW50IHRvIEFTU1VNRV9QUk9WSURFRCkuIFVzZWZ1bCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlIGRlcGVuZGVuY3kgZ3JhcGhzIG1vcmUgYXBwZWFsaW5nCisgICAgICAgLWwgREVCVUdfRE9NQUlOUywgLS1sb2ctZG9tYWlucz1ERUJVR19ET01BSU5TCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3cgZGVidWcgbG9nZ2luZyBmb3IgdGhlIHNwZWNpZmllZCBsb2dnaW5nIGRvbWFpbnMKKyAgICAgICAtUCwgLS1wcm9maWxlICAgICAgICAgUHJvZmlsZSB0aGUgY29tbWFuZCBhbmQgc2F2ZSByZXBvcnRzLgorICAgICAgIC11IFVJLCAtLXVpPVVJICAgICAgICBUaGUgdXNlciBpbnRlcmZhY2UgdG8gdXNlIChlLmcuIGtub3R0eSwgaG9iLCBkZXBleHApLgorICAgICAgIC10IFNFUlZFUlRZUEUsIC0tc2VydmVydHlwZT1TRVJWRVJUWVBFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSB3aGljaCBzZXJ2ZXIgdG8gdXNlLCBwcm9jZXNzIG9yIHhtbHJwYy4KKyAgICAgICAtLXRva2VuPVhNTFJQQ1RPS0VOICAgU3BlY2lmeSB0aGUgY29ubmVjdGlvbiB0b2tlbiB0byBiZSB1c2VkIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGluZyB0byBhIHJlbW90ZSBzZXJ2ZXIuCisgICAgICAgLS1yZXZpc2lvbnMtY2hhbmdlZCAgIFNldCB0aGUgZXhpdCBjb2RlIGRlcGVuZGluZyBvbiB3aGV0aGVyIHVwc3RyZWFtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0aW5nIHJldmlzaW9ucyBoYXZlIGNoYW5nZWQgb3Igbm90LgorICAgICAgIC0tc2VydmVyLW9ubHkgICAgICAgICBSdW4gYml0YmFrZSB3aXRob3V0IGEgVUksIG9ubHkgc3RhcnRpbmcgYSBzZXJ2ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvb2tlcikgcHJvY2Vzcy4KKyAgICAgICAtQiBCSU5ELCAtLWJpbmQ9QklORCAgVGhlIG5hbWUvYWRkcmVzcyBmb3IgdGhlIGJpdGJha2Ugc2VydmVyIHRvIGJpbmQgdG8uCisgICAgICAgLS1uby1zZXRzY2VuZSAgICAgICAgIERvIG5vdCBydW4gYW55IHNldHNjZW5lIHRhc2tzLiBzc3RhdGUgd2lsbCBiZSBpZ25vcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBldmVyeXRoaW5nIG5lZWRlZCwgYnVpbHQuCisgICAgICAgLS1yZW1vdGUtc2VydmVyPVJFTU9URV9TRVJWRVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdCB0byB0aGUgc3BlY2lmaWVkIHNlcnZlci4KKyAgICAgICAtbSwgLS1raWxsLXNlcnZlciAgICAgVGVybWluYXRlIHRoZSByZW1vdGUgc2VydmVyLgorICAgICAgIC0tb2JzZXJ2ZS1vbmx5ICAgICAgICBDb25uZWN0IHRvIGEgc2VydmVyIGFzIGFuIG9ic2VydmluZy1vbmx5IGNsaWVudC4KKyAgICAgICAtLXN0YXR1cy1vbmx5ICAgICAgICAgQ2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgcmVtb3RlIGJpdGJha2Ugc2VydmVyLgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdiaXRiYWtlLWV4YW1wbGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5FeGFtcGxlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcmVzZW50cyBzb21lIGV4YW1wbGVzIHNob3dpbmcgaG93IHRvIHVzZSBCaXRCYWtlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nZXhhbXBsZS1leGVjdXRpbmctYS10YXNrLWFnYWluc3QtYS1zaW5nbGUtcmVjaXBlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+RXhlY3V0aW5nIGEgVGFzayBBZ2FpbnN0IGEgU2luZ2xlIFJlY2lwZTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRXhlY3V0aW5nIHRhc2tzIGZvciBhIHNpbmdsZSByZWNpcGUgZmlsZSBpcyByZWxhdGl2ZWx5IHNpbXBsZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNwZWNpZnkgdGhlIGZpbGUgaW4gcXVlc3Rpb24sIGFuZCBCaXRCYWtlIHBhcnNlcworICAgICAgICAgICAgICAgICAgICBpdCBhbmQgZXhlY3V0ZXMgdGhlIHNwZWNpZmllZCB0YXNrLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSB0YXNrLCBCaXRCYWtlIGV4ZWN1dGVzIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgIHRhc2ssIHdoaWNoIGlzICJidWlsZOKAnS4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBvYmV5cyBpbnRlci10YXNrIGRlcGVuZGVuY2llcyB3aGVuIGRvaW5nCisgICAgICAgICAgICAgICAgICAgIHNvLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmQgcnVucyB0aGUgYnVpbGQgdGFzaywgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIGRlZmF1bHQgdGFzaywgb24gdGhlIDxmaWxlbmFtZT5mb29fMS4wLmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1iIGZvb18xLjAuYmIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmQgcnVucyB0aGUgY2xlYW4gdGFzayBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvby5iYjwvZmlsZW5hbWU+IHJlY2lwZSBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtYiBmb28uYmIgLWMgY2xlYW4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSAiLWIiIG9wdGlvbiBleHBsaWNpdGx5IGRvZXMgbm90IGhhbmRsZSByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIE90aGVyIHRoYW4gZm9yIGRlYnVnZ2luZyBwdXJwb3NlcywgaXQgaXMgaW5zdGVhZAorICAgICAgICAgICAgICAgICAgICAgICAgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlIHRoZSBzeW50YXggcHJlc2VudGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nZXhlY3V0aW5nLXRhc2tzLWFnYWluc3QtYS1zZXQtb2YtcmVjaXBlLWZpbGVzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+RXhlY3V0aW5nIFRhc2tzIEFnYWluc3QgYSBTZXQgb2YgUmVjaXBlIEZpbGVzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgYWRkaXRpb25hbCBjb21wbGV4aXRpZXMgaW50cm9kdWNlZAorICAgICAgICAgICAgICAgICAgICB3aGVuIG9uZSB3YW50cyB0byBtYW5hZ2UgbXVsdGlwbGUgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBDbGVhcmx5IHRoZXJlIG5lZWRzIHRvIGJlIGEgd2F5IHRvIHRlbGwgQml0QmFrZSB3aGF0CisgICAgICAgICAgICAgICAgICAgIGZpbGVzIGFyZSBhdmFpbGFibGUgYW5kLCBvZiB0aG9zZSwgd2hpY2ggeW91CisgICAgICAgICAgICAgICAgICAgIHdhbnQgdG8gZXhlY3V0ZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlcmUgYWxzbyBuZWVkcyB0byBiZSBhIHdheSBmb3IgZWFjaCByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgdG8gZXhwcmVzcyBpdHMgZGVwZW5kZW5jaWVzLCBib3RoIGZvciBidWlsZC10aW1lIGFuZAorICAgICAgICAgICAgICAgICAgICBydW50aW1lLgorICAgICAgICAgICAgICAgICAgICBUaGVyZSBtdXN0IGJlIGEgd2F5IGZvciB5b3UgdG8gZXhwcmVzcyByZWNpcGUgcHJlZmVyZW5jZXMKKyAgICAgICAgICAgICAgICAgICAgd2hlbiBtdWx0aXBsZSByZWNpcGVzIHByb3ZpZGUgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSwgb3Igd2hlbgorICAgICAgICAgICAgICAgICAgICB0aGVyZSBhcmUgbXVsdGlwbGUgdmVyc2lvbnMgb2YgYSByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQsIHdoZW4gbm90IHVzaW5nCisgICAgICAgICAgICAgICAgICAgICItLWJ1aWxkZmlsZSIgb3IgIi1iIiBvbmx5IGFjY2VwdHMgYSAiUFJPVklERVMiLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2Fubm90IHByb3ZpZGUgYW55dGhpbmcgZWxzZS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgYSByZWNpcGUgZmlsZSBnZW5lcmFsbHkgIlBST1ZJREVTIiBpdHMKKyAgICAgICAgICAgICAgICAgICAgInBhY2thZ2VuYW1lIiBhcyBzaG93biBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGZvbworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgbmV4dCBleGFtcGxlICJQUk9WSURFUyIgdGhlIHBhY2thZ2UgbmFtZSBhbmQgYWxzbyB1c2VzCisgICAgICAgICAgICAgICAgICAgIHRoZSAiLWMiIG9wdGlvbiB0byB0ZWxsIEJpdEJha2UgdG8ganVzdCBleGVjdXRlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fY2xlYW48L2ZpbGVuYW1lPiB0YXNrOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtYyBjbGVhbiBmb28KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2dlbmVyYXRpbmctZGVwZW5kZW5jeS1ncmFwaHMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5HZW5lcmF0aW5nIERlcGVuZGVuY3kgR3JhcGhzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGlzIGFibGUgdG8gZ2VuZXJhdGUgZGVwZW5kZW5jeSBncmFwaHMgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5kb3Q8L2ZpbGVuYW1lPiBzeW50YXguCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY29udmVydCB0aGVzZSBncmFwaHMgaW50byBpbWFnZXMgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb3Q8L2ZpbGVuYW1lPiB0b29sIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5ncmFwaHZpei5vcmcnPkdyYXBodml6PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IGdlbmVyYXRlIGEgZGVwZW5kZW5jeSBncmFwaCwgQml0QmFrZSB3cml0ZXMgZm91ciBmaWxlcworICAgICAgICAgICAgICAgICAgICB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBhY2thZ2UtZGVwZW5kcy5kb3Q8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3dzIEJpdEJha2UncyBrbm93bGVkZ2Ugb2YgZGVwZW5kZW5jaWVzIGJldHdlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lIHRhcmdldHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wbi1kZXBlbmRzLmRvdDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvd3MgZGVwZW5kZW5jaWVzIGJldHdlZW4gYnVpbGQtdGltZSB0YXJnZXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4gcmVjaXBlcykuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT50YXNrLWRlcGVuZHMuZG90PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaG93cyBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0YXNrcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBuLWJ1aWxkbGlzdDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvd3MgYSBzaW1wbGUgbGlzdCBvZiB0YXJnZXRzIHRoYXQgYXJlIHRvIGJlIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gc3RvcCBkZXBlbmRpbmcgb24gY29tbW9uIGRlcGVuZHMsIHVzZSB0aGUgIi1JIiBkZXBlbmQKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uIGFuZCBCaXRCYWtlIG9taXRzIHRoZW0gZnJvbSB0aGUgZ3JhcGguCisgICAgICAgICAgICAgICAgICAgIExlYXZpbmcgdGhpcyBpbmZvcm1hdGlvbiBvdXQgY2FuIHByb2R1Y2UgbW9yZSByZWFkYWJsZSBncmFwaHMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgd2F5LCB5b3UgY2FuIHJlbW92ZSBmcm9tIHRoZSBncmFwaAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+IGZyb20gaW5oZXJpdGVkIGNsYXNzZXMKKyAgICAgICAgICAgICAgICAgICAgc3VjaCBhcyA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHR3byBleGFtcGxlcyB0aGF0IGNyZWF0ZSBkZXBlbmRlbmN5IGdyYXBocy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNlY29uZCBleGFtcGxlIG9taXRzIGRlcGVuZHMgY29tbW9uIGluIE9wZW5FbWJlZGRlZCBmcm9tCisgICAgICAgICAgICAgICAgICAgIHRoZSBncmFwaDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWcgZm9vCisKKyAgICAgJCBiaXRiYWtlIC1nIC1JIHZpcnR1YWwva2VybmVsIC1JIGVnbGliYyBmb28KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLW1ldGFkYXRhLnhtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLW1ldGFkYXRhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjlkODAwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtbWV0YWRhdGEueG1sCkBAIC0wLDAgKzEsMTgzMCBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCI+CisKKzxjaGFwdGVyIGlkPSJiaXRiYWtlLXVzZXItbWFudWFsLW1ldGFkYXRhIj4KKyAgICA8dGl0bGU+U3ludGF4IGFuZCBPcGVyYXRvcnM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEJpdGJha2UgZmlsZXMgaGF2ZSB0aGVpciBvd24gc3ludGF4LgorICAgICAgICBUaGUgc3ludGF4IGhhcyBzaW1pbGFyaXRpZXMgdG8gc2V2ZXJhbAorICAgICAgICBvdGhlciBsYW5ndWFnZXMgYnV0IGFsc28gaGFzIHNvbWUgdW5pcXVlIGZlYXR1cmVzLgorICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBhdmFpbGFibGUgc3ludGF4IGFuZCBvcGVyYXRvcnMKKyAgICAgICAgYXMgd2VsbCBhcyBwcm92aWRlcyBleGFtcGxlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nYmFzaWMtc3ludGF4Jz4KKyAgICAgICAgPHRpdGxlPkJhc2ljIFN5bnRheDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgc29tZSBiYXNpYyBzeW50YXggZXhhbXBsZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYmFzaWMtdmFyaWFibGUtc2V0dGluZyc+CisgICAgICAgICAgICA8dGl0bGU+QmFzaWMgVmFyaWFibGUgU2V0dGluZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzZXRzIDxmaWxlbmFtZT5WQVJJQUJMRTwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAgICAgInZhbHVlIi4KKyAgICAgICAgICAgICAgICBUaGlzIGFzc2lnbm1lbnQgb2NjdXJzIGltbWVkaWF0ZWx5IGFzIHRoZSBzdGF0ZW1lbnQgaXMgcGFyc2VkLgorICAgICAgICAgICAgICAgIEl0IGlzIGEgImhhcmQiIGFzc2lnbm1lbnQuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBWQVJJQUJMRSA9ICJ2YWx1ZSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQXMgZXhwZWN0ZWQsIGlmIHlvdSBpbmNsdWRlIGxlYWRpbmcgb3IgdHJhaWxpbmcgc3BhY2VzIGFzIHBhcnQgb2YKKyAgICAgICAgICAgICAgICBhbiBhc3NpZ25tZW50LCB0aGUgc3BhY2VzIGFyZSByZXRhaW5lZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFZBUklBQkxFID0gIiB2YWx1ZSIKKyAgICAgVkFSSUFCTEUgPSAidmFsdWUgIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBTZXR0aW5nIDxmaWxlbmFtZT5WQVJJQUJMRTwvZmlsZW5hbWU+IHRvICIiIHNldHMgaXQgdG8gYW4gZW1wdHkgc3RyaW5nLAorICAgICAgICAgICAgICAgIHdoaWxlIHNldHRpbmcgdGhlIHZhcmlhYmxlIHRvICIgIiBzZXRzIGl0IHRvIGEgYmxhbmsgc3BhY2UKKyAgICAgICAgICAgICAgICAoaS5lLiB0aGVzZSBhcmUgbm90IHRoZSBzYW1lIHZhbHVlcykuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBWQVJJQUJMRSA9ICIiCisgICAgIFZBUklBQkxFID0gIiAiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3ZhcmlhYmxlLWV4cGFuc2lvbic+CisgICAgICAgICAgICA8dGl0bGU+VmFyaWFibGUgRXhwYW5zaW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQml0QmFrZSBzdXBwb3J0cyB2YXJpYWJsZXMgcmVmZXJlbmNpbmcgb25lIGFub3RoZXIncworICAgICAgICAgICAgICAgIGNvbnRlbnRzIHVzaW5nIGEgc3ludGF4IHRoYXQgaXMgc2ltaWxhciB0byBzaGVsbCBzY3JpcHRpbmcuCisgICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgdGhhdCByZXN1bHRzIGluIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb250YWluaW5nICJhdmFsIiBhbmQgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPiBldmFsdWF0aW5nIHRvCisgICAgICAgICAgICAgICAgInByZWF2YWxwb3N0IiBiYXNlZCBvbiB0aGF0IGN1cnJlbnQgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQSA9ICJhdmFsIgorICAgICBCID0gInByZSR7QX1wb3N0IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHJlYWxpemUgdGhhdCB3aGVuZXZlciA8ZmlsZW5hbWU+QjwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgcmVmZXJlbmNlZCwgaXRzIGV2YWx1YXRpb24gd2lsbCBkZXBlbmQgb24gdGhlIHN0YXRlIG9mCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBhdCB0aGF0IHRpbWUuCisgICAgICAgICAgICAgICAgVGh1cywgbGF0ZXIgZXZhbHVhdGlvbnMgb2YgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgICAgICAgICBwcmV2aW91cyBleGFtcGxlIGNvdWxkIHJlc3VsdCBpbiBkaWZmZXJlbnQgdmFsdWVzCisgICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NldHRpbmctYS1kZWZhdWx0LXZhbHVlJz4KKyAgICAgICAgICAgIDx0aXRsZT5TZXR0aW5nIGEgZGVmYXVsdCB2YWx1ZSAoPz0pPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlICI/PSIgb3BlcmF0b3IgdG8gYWNoaWV2ZSBhICJzb2Z0ZXIiIGFzc2lnbm1lbnQKKyAgICAgICAgICAgICAgICBmb3IgYSB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBUaGlzIHR5cGUgb2YgYXNzaWdubWVudCBhbGxvd3MgeW91IHRvIGRlZmluZSBhIHZhcmlhYmxlIGlmIGl0CisgICAgICAgICAgICAgICAgaXMgdW5kZWZpbmVkIHdoZW4gdGhlIHN0YXRlbWVudCBpcyBwYXJzZWQsIGJ1dCB0byBsZWF2ZSB0aGUKKyAgICAgICAgICAgICAgICB2YWx1ZSBhbG9uZSBpZiB0aGUgdmFyaWFibGUgaGFzIGEgdmFsdWUuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQSA/PSAiYXZhbCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBpcyBzZXQgYXQgdGhlIHRpbWUgdGhpcyBzdGF0ZW1lbnQgaXMgcGFyc2VkLAorICAgICAgICAgICAgICAgIHRoZSB2YXJpYWJsZSByZXRhaW5zIGl0cyB2YWx1ZS4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGlzIG5vdCBzZXQsCisgICAgICAgICAgICAgICAgdGhlIHZhcmlhYmxlIGlzIHNldCB0byAiYXZhbCIuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgYXNzaWdubWVudCBpcyBpbW1lZGlhdGUuCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgaWYgbXVsdGlwbGUgIj89IiBhc3NpZ25tZW50cworICAgICAgICAgICAgICAgICAgICB0byBhIHNpbmdsZSB2YXJpYWJsZSBleGlzdCwgdGhlIGZpcnN0IG9mIHRob3NlIGVuZHMgdXAgZ2V0dGluZworICAgICAgICAgICAgICAgICAgICB1c2VkLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzZXR0aW5nLWEtd2Vhay1kZWZhdWx0LXZhbHVlJz4KKyAgICAgICAgICAgIDx0aXRsZT5TZXR0aW5nIGEgd2VhayBkZWZhdWx0IHZhbHVlICg/Pz0pPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSXQgaXMgcG9zc2libGUgdG8gdXNlIGEgIndlYWtlciIgYXNzaWdubWVudCB0aGFuIGluIHRoZQorICAgICAgICAgICAgICAgIHByZXZpb3VzIHNlY3Rpb24gYnkgdXNpbmcgdGhlICI/Pz0iIG9wZXJhdG9yLgorICAgICAgICAgICAgICAgIFRoaXMgYXNzaWdubWVudCBiZWhhdmVzIGlkZW50aWNhbCB0byAiPz0iIGV4Y2VwdCB0aGF0IHRoZQorICAgICAgICAgICAgICAgIGFzc2lnbm1lbnQgaXMgbWFkZSBhdCB0aGUgZW5kIG9mIHRoZSBwYXJzaW5nIHByb2Nlc3MgcmF0aGVyCisgICAgICAgICAgICAgICAgdGhhbiBpbW1lZGlhdGVseS4KKyAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHdoZW4gbXVsdGlwbGUgIj8/PSIgYXNzaWdubWVudHMgZXhpc3QsIHRoZSBsYXN0CisgICAgICAgICAgICAgICAgb25lIGlzIHVzZWQuCisgICAgICAgICAgICAgICAgQWxzbywgYW55ICI9IiBvciAiPz0iIGFzc2lnbm1lbnQgd2lsbCBvdmVycmlkZSB0aGUgdmFsdWUgc2V0IHdpdGgKKyAgICAgICAgICAgICAgICAiPz89Ii4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBBID8/PSAic29tZXZhbHVlIgorICAgICBBID8/PSAic29tZW90aGVydmFsdWUiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gaXMgc2V0IGJlZm9yZSB0aGUgYWJvdmUgc3RhdGVtZW50cyBhcmUgcGFyc2VkLAorICAgICAgICAgICAgICAgIHRoZSB2YXJpYWJsZSByZXRhaW5zIGl0cyB2YWx1ZS4KKyAgICAgICAgICAgICAgICBJZiA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGlzIG5vdCBzZXQsCisgICAgICAgICAgICAgICAgdGhlIHZhcmlhYmxlIGlzIHNldCB0byAic29tZW90aGVydmFsdWUiLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBZ2FpbiwgdGhpcyBhc3NpZ25tZW50IGlzIGEgImxhenkiIG9yICJ3ZWFrIiBhc3NpZ25tZW50CisgICAgICAgICAgICAgICAgYmVjYXVzZSBpdCBkb2VzIG5vdCBvY2N1ciB1bnRpbCB0aGUgZW5kCisgICAgICAgICAgICAgICAgb2YgdGhlIHBhcnNpbmcgcHJvY2Vzcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpbW1lZGlhdGUtdmFyaWFibGUtZXhwYW5zaW9uJz4KKyAgICAgICAgICAgIDx0aXRsZT5JbW1lZGlhdGUgdmFyaWFibGUgZXhwYW5zaW9uICg6PSk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgIjo9IiBvcGVyYXRvciByZXN1bHRzIGluIGEgdmFyaWFibGUncworICAgICAgICAgICAgICAgIGNvbnRlbnRzIGJlaW5nIGV4cGFuZGVkIGltbWVkaWF0ZWx5LAorICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIHdoZW4gdGhlIHZhcmlhYmxlIGlzIGFjdHVhbGx5IHVzZWQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBUID0gIjEyMyIKKyAgICAgQSA6PSAiJHtCfSAke0F9IHRlc3QgJHtUfSIKKyAgICAgVCA9ICI0NTYiCisgICAgIEIgPSAiJHtUfSBidmFsIgorICAgICBDID0gImN2YWwiCisgICAgIEMgOj0gIiR7Q31hcHBlbmQiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBjb250YWlucworICAgICAgICAgICAgICAgICJ0ZXN0IDEyMyIgYmVjYXVzZSA8ZmlsZW5hbWU+JHtCfTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0F9PC9maWxlbmFtZT4gYXQgdGhlIHRpbWUgb2YgcGFyc2luZyBhcmUgdW5kZWZpbmVkLAorICAgICAgICAgICAgICAgIHdoaWNoIGxlYXZlcyAidGVzdCAxMjMiLgorICAgICAgICAgICAgICAgIEFuZCwgdGhlIHZhcmlhYmxlIDxmaWxlbmFtZT5DPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb250YWlucyAiY3ZhbGFwcGVuZCIgc2luY2UgPGZpbGVuYW1lPiR7Q308L2ZpbGVuYW1lPiBpbW1lZGlhdGVseQorICAgICAgICAgICAgICAgIGV4cGFuZHMgdG8gImN2YWwiLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2FwcGVuZGluZy1hbmQtcHJlcGVuZGluZyc+CisgICAgICAgICAgICA8dGl0bGU+QXBwZW5kaW5nICgrPSkgYW5kIHByZXBlbmRpbmcgKD0rKSBXaXRoIFNwYWNlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFwcGVuZGluZyBhbmQgcHJlcGVuZGluZyB2YWx1ZXMgaXMgY29tbW9uIGFuZCBjYW4gYmUgYWNjb21wbGlzaGVkCisgICAgICAgICAgICAgICAgdXNpbmcgdGhlICIrPSIgYW5kICI9KyIgb3BlcmF0b3JzLgorICAgICAgICAgICAgICAgIFRoZXNlIG9wZXJhdG9ycyBpbnNlcnQgYSBzcGFjZSBiZXR3ZWVuIHRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAgdmFsdWUgYW5kIHByZXBlbmRlZCBvciBhcHBlbmRlZCB2YWx1ZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlc2Ugb3BlcmF0b3JzIHRha2UgaW1tZWRpYXRlIGVmZmVjdCBkdXJpbmcgcGFyc2luZy4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQiA9ICJidmFsIgorICAgICBCICs9ICJhZGRpdGlvbmFsZGF0YSIKKyAgICAgQyA9ICJjdmFsIgorICAgICBDID0rICJ0ZXN0IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPiBjb250YWlucworICAgICAgICAgICAgICAgICJidmFsIGFkZGl0aW9uYWxkYXRhIiBhbmQgPGZpbGVuYW1lPkM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbnRhaW5zICJ0ZXN0IGN2YWwiLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2FwcGVuZGluZy1hbmQtcHJlcGVuZGluZy13aXRob3V0LXNwYWNlcyc+CisgICAgICAgICAgICA8dGl0bGU+QXBwZW5kaW5nICguPSkgYW5kIFByZXBlbmRpbmcgKD0uKSBXaXRob3V0IFNwYWNlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGFwcGVuZCBvciBwcmVwZW5kIHZhbHVlcyB3aXRob3V0IGFuCisgICAgICAgICAgICAgICAgaW5zZXJ0ZWQgc3BhY2UsIHVzZSB0aGUgIi49IiBhbmQgIj0uIiBvcGVyYXRvcnMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZXNlIG9wZXJhdG9ycyB0YWtlIGltbWVkaWF0ZSBlZmZlY3QgZHVyaW5nIHBhcnNpbmcuCisgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEIgPSAiYnZhbCIKKyAgICAgQiAuPSAiYWRkaXRpb25hbGRhdGEiCisgICAgIEMgPSAiY3ZhbCIKKyAgICAgQyA9LiAidGVzdCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIDxmaWxlbmFtZT5CPC9maWxlbmFtZT4gY29udGFpbnMKKyAgICAgICAgICAgICAgICAiYnZhbGFkZGl0aW9uYWxkYXRhIiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QzwvZmlsZW5hbWU+IGNvbnRhaW5zICJ0ZXN0Y3ZhbCIuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYXBwZW5kaW5nLWFuZC1wcmVwZW5kaW5nLW92ZXJyaWRlLXN0eWxlLXN5bnRheCc+CisgICAgICAgICAgICA8dGl0bGU+QXBwZW5kaW5nIGFuZCBQcmVwZW5kaW5nIChPdmVycmlkZSBTdHlsZSBTeW50YXgpPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGFwcGVuZCBhbmQgcHJlcGVuZCBhIHZhcmlhYmxlJ3MgdmFsdWUKKyAgICAgICAgICAgICAgICB1c2luZyBhbiBvdmVycmlkZSBzdHlsZSBzeW50YXguCisgICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlIHRoaXMgc3ludGF4LCBubyBzcGFjZXMgYXJlIGluc2VydGVkLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGVzZSBvcGVyYXRvcnMgZGlmZmVyIGZyb20gdGhlICI6PSIsICIuPSIsICI9LiIsICIrPSIsIGFuZCAiPSsiCisgICAgICAgICAgICAgICAgb3BlcmF0b3JzIGluIHRoYXQgdGhlaXIgZWZmZWN0cyBhcmUgZGVmZXJyZWQKKyAgICAgICAgICAgICAgICB1bnRpbCBhZnRlciBwYXJzaW5nIGNvbXBsZXRlcyByYXRoZXIgdGhhbiBiZWluZyBpbW1lZGlhdGVseQorICAgICAgICAgICAgICAgIGFwcGxpZWQuCisgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEIgPSAiYnZhbCIKKyAgICAgQl9hcHBlbmQgPSAiIGFkZGl0aW9uYWwgZGF0YSIKKyAgICAgQyA9ICJjdmFsIgorICAgICBDX3ByZXBlbmQgPSAiYWRkaXRpb25hbCBkYXRhICIKKyAgICAgRCA9ICJkdmFsIgorICAgICBEX2FwcGVuZCA9ICJhZGRpdGlvbmFsIGRhdGEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSA8ZmlsZW5hbWU+QjwvZmlsZW5hbWU+IGJlY29tZXMKKyAgICAgICAgICAgICAgICAiYnZhbCBhZGRpdGlvbmFsIGRhdGEiIGFuZCA8ZmlsZW5hbWU+QzwvZmlsZW5hbWU+IGJlY29tZXMKKyAgICAgICAgICAgICAgICAiYWRkaXRpb25hbCBkYXRhIGN2YWwiLgorICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSA8ZmlsZW5hbWU+RDwvZmlsZW5hbWU+IGJlY29tZXMKKyAgICAgICAgICAgICAgICAiZHZhbGFkZGl0aW9uYWwgZGF0YSIuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGNvbnRyb2wgYWxsIHNwYWNpbmcgd2hlbiB5b3UgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICBvdmVycmlkZSBzeW50YXguCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3JlbW92aW5nLW92ZXJyaWRlLXN0eWxlLXN5bnRheCc+CisgICAgICAgICAgICA8dGl0bGU+UmVtb3ZhbCAoT3ZlcnJpZGUgU3R5bGUgU3ludGF4KTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gcmVtb3ZlIHZhbHVlcyBmcm9tIGxpc3RzIHVzaW5nIHRoZSByZW1vdmFsCisgICAgICAgICAgICAgICAgb3ZlcnJpZGUgc3R5bGUgc3ludGF4LgorICAgICAgICAgICAgICAgIFNwZWNpZnlpbmcgYSB2YWx1ZSBmb3IgcmVtb3ZhbCBjYXVzZXMgYWxsIG9jY3VycmVuY2VzIG9mIHRoYXQKKyAgICAgICAgICAgICAgICB2YWx1ZSB0byBiZSByZW1vdmVkIGZyb20gdGhlIHZhcmlhYmxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSB1c2UgdGhpcyBzeW50YXgsIEJpdEJha2UgZXhwZWN0cyBvbmUgb3IgbW9yZSBzdHJpbmdzLgorICAgICAgICAgICAgICAgIFN1cnJvdW5kaW5nIHNwYWNlcyBhcmUgcmVtb3ZlZCBhcyB3ZWxsLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZPTyA9ICIxMjMgNDU2IDc4OSAxMjM0NTYgMTIzIDQ1NiAxMjMgNDU2IgorICAgICBGT09fcmVtb3ZlID0gIjEyMyIKKyAgICAgRk9PX3JlbW92ZSA9ICI0NTYiCisgICAgIEZPTzIgPSAiYWJjIGRlZiBnaGkgYWJjZGVmIGFiYyBkZWYgYWJjIGRlZiIKKyAgICAgRk9PMl9yZW1vdmUgPSAiYWJjIGRlZiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIDxmaWxlbmFtZT5GT088L2ZpbGVuYW1lPiBiZWNvbWVzCisgICAgICAgICAgICAgICAgIjc4OSAxMjM0NTYiIGFuZCA8ZmlsZW5hbWU+Rk9PMjwvZmlsZW5hbWU+IGJlY29tZXMKKyAgICAgICAgICAgICAgICAiZ2hpIGFiY2RlZiIuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndmFyaWFibGUtZmxhZy1zeW50YXgnPgorICAgICAgICAgICAgPHRpdGxlPlZhcmlhYmxlIEZsYWcgU3ludGF4PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVmFyaWFibGUgZmxhZ3MgYXJlIEJpdEJha2UncyBpbXBsZW1lbnRhdGlvbiBvZiB2YXJpYWJsZSBwcm9wZXJ0aWVzCisgICAgICAgICAgICAgICAgb3IgYXR0cmlidXRlcy4KKyAgICAgICAgICAgICAgICBJdCBpcyBhIHdheSBvZiB0YWdnaW5nIGV4dHJhIGluZm9ybWF0aW9uIG9udG8gYSB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgbW9yZSBvdXQgYWJvdXQgdmFyaWFibGUgZmxhZ3MgaW4gZ2VuZXJhbCBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndmFyaWFibGUtZmxhZ3MnPlZhcmlhYmxlIEZsYWdzPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGRlZmluZSwgYXBwZW5kLCBhbmQgcHJlcGVuZCB2YWx1ZXMgdG8gdmFyaWFibGUgZmxhZ3MuCisgICAgICAgICAgICAgICAgQWxsIHRoZSBzdGFuZGFyZCBzeW50YXggb3BlcmF0aW9ucyBwcmV2aW91c2x5IG1lbnRpb25lZCB3b3JrCisgICAgICAgICAgICAgICAgZm9yIHZhcmlhYmxlIGZsYWdzIGV4Y2VwdCBmb3Igb3ZlcnJpZGUgc3R5bGUgc3ludGF4CisgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPl9wcmVwZW5kPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5fYXBwZW5kPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5fcmVtb3ZlPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzIHNob3dpbmcgaG93IHRvIHNldCB2YXJpYWJsZSBmbGFnczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZPT1thXSA9ICJhYmMiCisgICAgIEZPT1tiXSA9ICIxMjMiCisgICAgIEZPT1thXSArPSAiNDU2IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgPGZpbGVuYW1lPkZPTzwvZmlsZW5hbWU+IGhhcyB0d28gZmxhZ3M6CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmE8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgZmxhZ3MgYXJlIGltbWVkaWF0ZWx5IHNldCB0byAiYWJjIiBhbmQgIjEyMyIsIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmE8L2ZpbGVuYW1lPiBmbGFnIGJlY29tZXMgImFiYyA0NTYiLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBObyBuZWVkIGV4aXN0cyB0byBwcmUtZGVmaW5lIHZhcmlhYmxlIGZsYWdzLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gc2ltcGx5IHN0YXJ0IHVzaW5nIHRoZW0uCisgICAgICAgICAgICAgICAgT25lIGV4dHJlbWVseSBjb21tb24gYXBwbGljYXRpb24KKyAgICAgICAgICAgICAgICBpcyB0byBhdHRhY2ggc29tZSBicmllZiBkb2N1bWVudGF0aW9uIHRvIGEgQml0QmFrZSB2YXJpYWJsZSBhcworICAgICAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDQUNIRVtkb2NdID0gIlRoZSBkaXJlY3RvcnkgaG9sZGluZyB0aGUgY2FjaGUgb2YgdGhlIG1ldGFkYXRhLiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0naW5saW5lLXB5dGhvbi12YXJpYWJsZS1leHBhbnNpb24nPgorICAgICAgICAgICAgPHRpdGxlPklubGluZSBQeXRob24gVmFyaWFibGUgRXhwYW5zaW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgaW5saW5lIFB5dGhvbiB2YXJpYWJsZSBleHBhbnNpb24gdG8KKyAgICAgICAgICAgICAgICBzZXQgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERBVEUgPSAiJHtAdGltZS5zdHJmdGltZSgnJVklbSVkJyx0aW1lLmdtdGltZSgpKX0iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSByZXN1bHRzIGluIHRoZSA8ZmlsZW5hbWU+REFURTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgYmVpbmcgc2V0IHRvIHRoZSBjdXJyZW50IGRhdGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFByb2JhYmx5IHRoZSBtb3N0IGNvbW1vbiB1c2Ugb2YgdGhpcyBmZWF0dXJlIGlzIHRvIGV4dHJhY3QKKyAgICAgICAgICAgICAgICB0aGUgdmFsdWUgb2YgdmFyaWFibGVzIGZyb20gQml0QmFrZSdzIGludGVybmFsIGRhdGEgZGljdGlvbmFyeSwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGluZXMgc2VsZWN0IHRoZSB2YWx1ZXMgb2YgYSBwYWNrYWdlIG5hbWUKKyAgICAgICAgICAgICAgICBhbmQgaXRzIHZlcnNpb24gbnVtYmVyLCByZXNwZWN0aXZlbHk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQTiA9ICIke0BiYi5wYXJzZS5CQkhhbmRsZXIudmFyc19mcm9tX2ZpbGUoZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSksZClbMF0gb3IgJ2RlZmF1bHRwa2duYW1lJ30iCisgICAgIFBWID0gIiR7QGJiLnBhcnNlLkJCSGFuZGxlci52YXJzX2Zyb21fZmlsZShkLmdldFZhcignRklMRScsIEZhbHNlKSxkKVsxXSBvciAnMS4wJ30iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Byb3ZpZGluZy1wYXRobmFtZXMnPgorICAgICAgICAgICAgPHRpdGxlPlByb3ZpZGluZyBQYXRobmFtZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIHNwZWNpZnlpbmcgcGF0aG5hbWVzIGZvciB1c2Ugd2l0aCBCaXRCYWtlLAorICAgICAgICAgICAgICAgIGRvIG5vdCB1c2UgdGhlIHRpbGRlICgifiIpIGNoYXJhY3RlciBhcyBhIHNob3J0Y3V0CisgICAgICAgICAgICAgICAgZm9yIHlvdXIgaG9tZSBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgRG9pbmcgc28gbWlnaHQgY2F1c2UgQml0QmFrZSB0byBub3QgcmVjb2duaXplIHRoZQorICAgICAgICAgICAgICAgIHBhdGggc2luY2UgQml0QmFrZSBkb2VzIG5vdCBleHBhbmQgdGhpcyBjaGFyYWN0ZXIgaW4KKyAgICAgICAgICAgICAgICB0aGUgc2FtZSB3YXkgYSBzaGVsbCB3b3VsZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW5zdGVhZCwgcHJvdmlkZSBhIGZ1bGxlciBwYXRoIGFzIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICBleGFtcGxlIGlsbHVzdHJhdGVzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJMQVlFUlMgPz0gIiBcCisgICAgICAgL2hvbWUvc2NvdHQtbGVub3ZvL0xheWVyQSBcCisgICAgICAgIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdjb25kaXRpb25hbC1zeW50YXgtb3ZlcnJpZGVzJz4KKyAgICAgICAgPHRpdGxlPkNvbmRpdGlvbmFsIFN5bnRheCAoT3ZlcnJpZGVzKTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIHVzZXMKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1PVkVSUklERVMnPjxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHRvIGNvbnRyb2wgd2hhdCB2YXJpYWJsZXMgYXJlIG92ZXJyaWRkZW4gYWZ0ZXIgQml0QmFrZQorICAgICAgICAgICAgcGFyc2VzIHJlY2lwZXMgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB5b3UgY2FuIHVzZQorICAgICAgICAgICAgPGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+IGFzIGNvbmRpdGlvbmFsIG1ldGFkYXRhLAorICAgICAgICAgICAgdGFsa3MgYWJvdXQga2V5IGV4cGFuc2lvbiBpbiByZWxhdGlvbnNoaXAgdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiwgYW5kIHByb3ZpZGVzIHNvbWUgZXhhbXBsZXMKKyAgICAgICAgICAgIHRvIGhlbHAgd2l0aCB1bmRlcnN0YW5kaW5nLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbmRpdGlvbmFsLW1ldGFkYXRhJz4KKyAgICAgICAgICAgIDx0aXRsZT5Db25kaXRpb25hbCBNZXRhZGF0YTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiB0byBjb25kaXRpb25hbGx5IHNlbGVjdAorICAgICAgICAgICAgICAgIGEgc3BlY2lmaWMgdmVyc2lvbiBvZiBhIHZhcmlhYmxlIGFuZCB0byBjb25kaXRpb25hbGx5CisgICAgICAgICAgICAgICAgYXBwZW5kIG9yIHByZXBlbmQgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZWxlY3RpbmcgYSBWYXJpYWJsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgYSBjb2xvbi1jaGFyYWN0ZXItc2VwYXJhdGVkIGxpc3QgdGhhdCBjb250YWlucyBpdGVtcworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHdoaWNoIHlvdSB3YW50IHRvIHNhdGlzZnkgY29uZGl0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRodXMsIGlmIHlvdSBoYXZlIGEgdmFyaWFibGUgdGhhdCBpcyBjb25kaXRpb25hbCBvbiDigJxhcm3igJ0sIGFuZCDigJxhcm3igJ0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIGluIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiwgdGhlbiB0aGUg4oCcYXJt4oCdLXNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uIG9mIHRoZSB2YXJpYWJsZSBpcyB1c2VkIHJhdGhlciB0aGFuIHRoZSBub24tY29uZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE9WRVJSSURFUyA9ICJhcmNoaXRlY3R1cmU6b3M6bWFjaGluZSIKKyAgICAgVEVTVCA9ICJkZWZhdWx0IgorICAgICBURVNUX29zID0gIm9zc3BlY2lmaWMiCisgICAgIFRFU1Rfbm9vdmVycmlkZSA9ICJvdGhlcmNvbmR2YWx1ZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgbGlzdHMgdGhyZWUgb3ZlcnJpZGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgImFyY2hpdGVjdHVyZSIsICJvcyIsIGFuZCAibWFjaGluZSIuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgPGZpbGVuYW1lPlRFU1Q8L2ZpbGVuYW1lPiBieSBpdHNlbGYgaGFzIGEgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgb2YgImRlZmF1bHQiLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IHNlbGVjdCB0aGUgb3Mtc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGUgPGZpbGVuYW1lPlRFU1Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYnkgYXBwZW5kaW5nIHRoZSAib3MiIG92ZXJyaWRlIHRvIHRoZSB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS48ZmlsZW5hbWU+VEVTVF9vczwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhpcywgY29uc2lkZXIgYSBwcmFjdGljYWwgZXhhbXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgYXNzdW1lcyBhbiBPcGVuRW1iZWRkZWQgbWV0YWRhdGEtYmFzZWQgTGludXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWwgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaW5lcyBmcm9tIHRoZSByZWNpcGUgZmlsZSBmaXJzdCBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUga2VybmVsIGJyYW5jaCB2YXJpYWJsZSA8ZmlsZW5hbWU+S0JSQU5DSDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYSBkZWZhdWx0IHZhbHVlLCB0aGVuIGNvbmRpdGlvbmFsbHkgb3ZlcnJpZGUgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGJhc2VkIG9uIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGJ1aWxkOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBLQlJBTkNIID0gInN0YW5kYXJkL2Jhc2UiCisgICAgIEtCUkFOQ0hfcWVtdWFybSAgPSAic3RhbmRhcmQvYXJtLXZlcnNhdGlsZS05MjZlanMiCisgICAgIEtCUkFOQ0hfcWVtdW1pcHMgPSAic3RhbmRhcmQvbXRpLW1hbHRhMzIiCisgICAgIEtCUkFOQ0hfcWVtdXBwYyAgPSAic3RhbmRhcmQvcWVtdXBwYyIKKyAgICAgS0JSQU5DSF9xZW11eDg2ICA9ICJzdGFuZGFyZC9jb21tb24tcGMvYmFzZSIKKyAgICAgS0JSQU5DSF9xZW11eDg2LTY0ICA9ICJzdGFuZGFyZC9jb21tb24tcGMtNjQvYmFzZSIKKyAgICAgS0JSQU5DSF9xZW11bWlwczY0ID0gInN0YW5kYXJkL210aS1tYWx0YTY0IgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QXBwZW5kaW5nIGFuZCBQcmVwZW5kaW5nOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGFsc28gc3VwcG9ydHMgYXBwZW5kIGFuZCBwcmVwZW5kIG9wZXJhdGlvbnMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHZhbHVlcyBiYXNlZCBvbiB3aGV0aGVyIGEgc3BlY2lmaWMgaXRlbSBpcworICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVkIGluIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgREVQRU5EUyA9ICJnbGliYyBuY3Vyc2VzIgorICAgICBPVkVSUklERVMgPSAibWFjaGluZTpsb2NhbCIKKyAgICAgREVQRU5EU19hcHBlbmRfbWFjaGluZSA9ICJsaWJtYWQiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4gYmVjb21lcworICAgICAgICAgICAgICAgICAgICAgICAgImdsaWJjIG5jdXJzZXMgbGlibWFkIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWdhaW4sIHVzaW5nIGFuIE9wZW5FbWJlZGRlZCBtZXRhZGF0YS1iYXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbCByZWNpcGUgZmlsZSBhcyBhbiBleGFtcGxlLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgbGluZXMgd2lsbCBjb25kaXRpb25hbGx5IGFwcGVuZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0VSTkVMX0ZFQVRVUkVTPC9maWxlbmFtZT4gdmFyaWFibGUgYmFzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgYXJjaGl0ZWN0dXJlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0tFUk5FTF9FWFRSQV9GRUFUVVJFU30iCisgICAgIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Nj0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCisgICAgIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Ni02ND0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdrZXktZXhwYW5zaW9uJz4KKyAgICAgICAgICAgIDx0aXRsZT5LZXkgRXhwYW5zaW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgS2V5IGV4cGFuc2lvbiBoYXBwZW5zIHdoZW4gdGhlIEJpdEJha2UgZGF0YXN0b3JlIGlzIGZpbmFsaXplZAorICAgICAgICAgICAgICAgIGp1c3QgYmVmb3JlIEJpdEJha2UgZXhwYW5kcyBvdmVycmlkZXMuCisgICAgICAgICAgICAgICAgVG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhpcywgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQSR7Qn0gPSAiWCIKKyAgICAgQiA9ICIyIgorICAgICBBMiA9ICJZIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIGFmdGVyIGFsbCB0aGUgcGFyc2luZyBpcyBjb21wbGV0ZSwgYW5kCisgICAgICAgICAgICAgICAgYmVmb3JlIGFueSBvdmVycmlkZXMgYXJlIGhhbmRsZWQsIEJpdEJha2UgZXhwYW5kcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0J9PC9maWxlbmFtZT4gaW50byAiMiIuCisgICAgICAgICAgICAgICAgVGhpcyBleHBhbnNpb24gY2F1c2VzIDxmaWxlbmFtZT5BMjwvZmlsZW5hbWU+LCB3aGljaCB3YXMKKyAgICAgICAgICAgICAgICBzZXQgdG8gIlkiIGJlZm9yZSB0aGUgZXhwYW5zaW9uLCB0byBiZWNvbWUgIlgiLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3ZhcmlhYmxlLWludGVyYWN0aW9uLXdvcmtlZC1leGFtcGxlcyc+CisgICAgICAgICAgICA8dGl0bGU+RXhhbXBsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEZXNwaXRlIHRoZSBwcmV2aW91cyBleHBsYW5hdGlvbnMgdGhhdCBzaG93IHRoZSBkaWZmZXJlbnQgZm9ybXMgb2YKKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBkZWZpbml0aW9ucywgaXQgY2FuIGJlIGhhcmQgdG8gd29yaworICAgICAgICAgICAgICAgIG91dCBleGFjdGx5IHdoYXQgaGFwcGVucyB3aGVuIHZhcmlhYmxlIG9wZXJhdG9ycywgY29uZGl0aW9uYWwKKyAgICAgICAgICAgICAgICBvdmVycmlkZXMsIGFuZCB1bmNvbmRpdGlvbmFsIG92ZXJyaWRlcyBhcmUgY29tYmluZWQuCisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByZXNlbnRzIHNvbWUgY29tbW9uIHNjZW5hcmlvcyBhbG9uZworICAgICAgICAgICAgICAgIHdpdGggZXhwbGFuYXRpb25zIGZvciB2YXJpYWJsZSBpbnRlcmFjdGlvbnMgdGhhdAorICAgICAgICAgICAgICAgIHR5cGljYWxseSBjb25mdXNlIHVzZXJzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGVyZSBpcyBvZnRlbiBjb25mdXNpb24gY29uY2VybmluZyB0aGUgb3JkZXIgaW4gd2hpY2gKKyAgICAgICAgICAgICAgICBvdmVycmlkZXMgYW5kIHZhcmlvdXMgImFwcGVuZCIgb3BlcmF0b3JzIHRha2UgZWZmZWN0LgorICAgICAgICAgICAgICAgIFJlY2FsbCB0aGF0IGFuIGFwcGVuZCBvciBwcmVwZW5kIG9wZXJhdGlvbiB1c2luZyAiX2FwcGVuZCIKKyAgICAgICAgICAgICAgICBhbmQgIl9wcmVwZW5kIiBkb2VzIG5vdCByZXN1bHQgaW4gYW4gaW1tZWRpYXRlIGFzc2lnbm1lbnQKKyAgICAgICAgICAgICAgICBhcyB3b3VsZCAiKz0iLCAiLj0iLCAiPSsiLCBvciAiPS4iLgorICAgICAgICAgICAgICAgIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE9WRVJSSURFUyA9ICJmb28iCisgICAgIEEgPSAiWiIKKyAgICAgQV9mb29fYXBwZW5kID0gIlgiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZvciB0aGlzIGNhc2UsIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gaXMKKyAgICAgICAgICAgICAgICB1bmNvbmRpdGlvbmFsbHkgc2V0IHRvICJaIiBhbmQgIlgiIGlzCisgICAgICAgICAgICAgICAgdW5jb25kaXRpb25hbGx5IGFuZCBpbW1lZGlhdGVseSBhcHBlbmRlZCB0byB0aGUgdmFyaWFibGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QV9mb288L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIG92ZXJyaWRlcyBoYXZlIG5vdCBiZWVuIGFwcGxpZWQgeWV0LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5BX2ZvbzwvZmlsZW5hbWU+IGlzIHNldCB0byAiWCIgZHVlIHRvIHRoZSBhcHBlbmQKKyAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBzaW1wbHkgZXF1YWxzICJaIi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXBwbHlpbmcgb3ZlcnJpZGVzLCBob3dldmVyLCBjaGFuZ2VzIHRoaW5ncy4KKyAgICAgICAgICAgICAgICBTaW5jZSAiZm9vIiBpcyBsaXN0ZWQgaW4gPGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIHRoZSBjb25kaXRpb25hbCB2YXJpYWJsZSA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGlzIHJlcGxhY2VkCisgICAgICAgICAgICAgICAgd2l0aCB0aGUgImZvbyIgdmVyc2lvbiwgd2hpY2ggaXMgZXF1YWwgdG8gIlgiLgorICAgICAgICAgICAgICAgIFNvIGVmZmVjdGl2ZWx5LCA8ZmlsZW5hbWU+QV9mb288L2ZpbGVuYW1lPiByZXBsYWNlcyA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIG5leHQgZXhhbXBsZSBjaGFuZ2VzIHRoZSBvcmRlciBvZiB0aGUgb3ZlcnJpZGUgYW5kCisgICAgICAgICAgICAgICAgdGhlIGFwcGVuZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE9WRVJSSURFUyA9ICJmb28iCisgICAgIEEgPSAiWiIKKyAgICAgQV9hcHBlbmRfZm9vID0gIlgiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZvciB0aGlzIGNhc2UsIGJlZm9yZSBvdmVycmlkZXMgYXJlIGhhbmRsZWQsCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBpcyBzZXQgdG8gIloiIGFuZCA8ZmlsZW5hbWU+QV9hcHBlbmRfZm9vPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBpcyBzZXQgdG8gIlgiLgorICAgICAgICAgICAgICAgIE9uY2UgdGhlIG92ZXJyaWRlIGZvciAiZm9vIiBpcyBhcHBsaWVkLCBob3dldmVyLAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gZ2V0cyBhcHBlbmRlZCB3aXRoICJYIi4KKyAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gYmVjb21lcyAiWlgiLgorICAgICAgICAgICAgICAgIE5vdGljZSB0aGF0IHNwYWNlcyBhcmUgbm90IGFwcGVuZGVkLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIG5leHQgZXhhbXBsZSBoYXMgdGhlIG9yZGVyIG9mIHRoZSBhcHBlbmRzIGFuZCBvdmVycmlkZXMgcmV2ZXJzZWQKKyAgICAgICAgICAgICAgICBiYWNrIGFzIGluIHRoZSBmaXJzdCBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgT1ZFUlJJREVTID0gImZvbyIKKyAgICAgQSA9ICJZIgorICAgICBBX2Zvb19hcHBlbmQgPSAiWiIKKyAgICAgQV9mb29fYXBwZW5kICs9ICJYIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBGb3IgdGhpcyBjYXNlLCBiZWZvcmUgYW55IG92ZXJyaWRlcyBhcmUgcmVzb2x2ZWQsCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBpcyBzZXQgdG8gIlkiIHVzaW5nIGFuIGltbWVkaWF0ZSBhc3NpZ25tZW50LgorICAgICAgICAgICAgICAgIEFmdGVyIHRoaXMgaW1tZWRpYXRlIGFzc2lnbm1lbnQsIDxmaWxlbmFtZT5BX2ZvbzwvZmlsZW5hbWU+IGlzIHNldAorICAgICAgICAgICAgICAgIHRvICJaIiwgYW5kIHRoZW4gZnVydGhlciBhcHBlbmRlZCB3aXRoCisgICAgICAgICAgICAgICAgIlgiIGxlYXZpbmcgdGhlIHZhcmlhYmxlIHNldCB0byAiWiBYIi4KKyAgICAgICAgICAgICAgICBGaW5hbGx5LCBhcHBseWluZyB0aGUgb3ZlcnJpZGUgZm9yICJmb28iIHJlc3VsdHMgaW4gdGhlIGNvbmRpdGlvbmFsCisgICAgICAgICAgICAgICAgdmFyaWFibGUgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBiZWNvbWluZyAiWiBYIiAoaS5lLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gaXMgcmVwbGFjZWQgd2l0aCA8ZmlsZW5hbWU+QV9mb288L2ZpbGVuYW1lPikuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgZmluYWwgZXhhbXBsZSBtaXhlcyBpbiBzb21lIHZhcnlpbmcgb3BlcmF0b3JzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQSA9ICIxIgorICAgICBBX2FwcGVuZCA9ICIyIgorICAgICBBX2FwcGVuZCA9ICIzIgorICAgICBBICs9ICI0IgorICAgICBBIC49ICI1IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBGb3IgdGhpcyBjYXNlLCB0aGUgdHlwZSBvZiBhcHBlbmQgb3BlcmF0b3JzIGFyZSBhZmZlY3RpbmcgdGhlCisgICAgICAgICAgICAgICAgb3JkZXIgb2YgYXNzaWdubWVudHMgYXMgQml0QmFrZSBwYXNzZXMgdGhyb3VnaCB0aGUgY29kZQorICAgICAgICAgICAgICAgIG11bHRpcGxlIHRpbWVzLgorICAgICAgICAgICAgICAgIEluaXRpYWxseSwgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBpcyBzZXQgdG8gIjEgNDUiIGJlY2F1c2UKKyAgICAgICAgICAgICAgICBvZiB0aGUgdGhyZWUgc3RhdGVtZW50cyB0aGF0IHVzZSBpbW1lZGlhdGUgb3BlcmF0b3JzLgorICAgICAgICAgICAgICAgIEFmdGVyIHRoZXNlIGFzc2lnbm1lbnRzIGFyZSBtYWRlLCBCaXRCYWtlIGFwcGxpZXMgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9hcHBlbmQ8L2ZpbGVuYW1lPiBvcGVyYXRpb25zLgorICAgICAgICAgICAgICAgIFRob3NlIG9wZXJhdGlvbnMgcmVzdWx0IGluIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gYmVjb21pbmcgIjEgNDUyMyIuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc2hhcmluZy1mdW5jdGlvbmFsaXR5Jz4KKyAgICAgICAgPHRpdGxlPlNoYXJpbmcgRnVuY3Rpb25hbGl0eTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIGFsbG93cyBmb3IgbWV0YWRhdGEgc2hhcmluZyB0aHJvdWdoIGluY2x1ZGUgZmlsZXMKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+KSBhbmQgY2xhc3MgZmlsZXMKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGF2ZSBhIHBpZWNlIG9mIGNvbW1vbiBmdW5jdGlvbmFsaXR5CisgICAgICAgICAgICBzdWNoIGFzIGEgdGFzayBkZWZpbml0aW9uIHRoYXQgeW91IHdhbnQgdG8gc2hhcmUgYmV0d2VlbgorICAgICAgICAgICAgbW9yZSB0aGFuIG9uZSByZWNpcGUuCisgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIGNyZWF0aW5nIGEgPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZpbGUgdGhhdCBjb250YWlucyB0aGUgY29tbW9uIGZ1bmN0aW9uYWxpdHkgYW5kIHRoZW4gdXNpbmcKKyAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+aW5oZXJpdDwvZmlsZW5hbWU+IGRpcmVjdGl2ZSBpbiB5b3VyIHJlY2lwZXMgdG8KKyAgICAgICAgICAgIGluaGVyaXQgdGhlIGNsYXNzIHdvdWxkIGJlIGEgY29tbW9uIHdheSB0byBzaGFyZSB0aGUgdGFzay4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByZXNlbnRzIHRoZSBtZWNoYW5pc21zIEJpdEJha2UgcHJvdmlkZXMgdG8KKyAgICAgICAgICAgIGFsbG93IHlvdSB0byBzaGFyZSBmdW5jdGlvbmFsaXR5IGJldHdlZW4gcmVjaXBlcy4KKyAgICAgICAgICAgIFNwZWNpZmljYWxseSwgdGhlIG1lY2hhbmlzbXMgaW5jbHVkZSA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPmluaGVyaXQ8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPklOSEVSSVQ8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+cmVxdWlyZTwvZmlsZW5hbWU+IGRpcmVjdGl2ZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbG9jYXRpbmctaW5jbHVkZS1hbmQtY2xhc3MtZmlsZXMnPgorICAgICAgICAgICAgPHRpdGxlPkxvY2F0aW5nIEluY2x1ZGUgYW5kIENsYXNzIEZpbGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBsb2NhdGUgbmVlZGVkIGluY2x1ZGUgYW5kIGNsYXNzIGZpbGVzLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgYW5hbG9nb3VzIHRvCisgICAgICAgICAgICAgICAgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIG9yZGVyIGZvciBpbmNsdWRlIGFuZCBjbGFzcyBmaWxlcyB0byBiZSBmb3VuZCBieSBCaXRCYWtlLAorICAgICAgICAgICAgICAgIHRoZXkgbmVlZCB0byBiZSBsb2NhdGVkIGluIGEgImNsYXNzZXMiIHN1YmRpcmVjdG9yeSB0aGF0IGNhbgorICAgICAgICAgICAgICAgIGJlIGZvdW5kIGluIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpbmhlcml0LWRpcmVjdGl2ZSc+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmluaGVyaXQ8L2ZpbGVuYW1lPiBEaXJlY3RpdmU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIHdyaXRpbmcgYSByZWNpcGUgb3IgY2xhc3MgZmlsZSwgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluaGVyaXQ8L2ZpbGVuYW1lPiBkaXJlY3RpdmUgdG8gaW5oZXJpdCB0aGUKKyAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IG9mIGEgY2xhc3MgKDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIG9ubHkgc3VwcG9ydHMgdGhpcyBkaXJlY3RpdmUgd2hlbiB1c2VkIHdpdGhpbiByZWNpcGUKKyAgICAgICAgICAgICAgICBhbmQgY2xhc3MgZmlsZXMgKGkuZS4gPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5pbmhlcml0PC9maWxlbmFtZT4gZGlyZWN0aXZlIGlzIGEgcnVkaW1lbnRhcnkKKyAgICAgICAgICAgICAgICBtZWFucyBvZiBzcGVjaWZ5aW5nIHdoYXQgY2xhc3NlcyBvZiBmdW5jdGlvbmFsaXR5IHlvdXIKKyAgICAgICAgICAgICAgICByZWNpcGVzIHJlcXVpcmUuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gZWFzaWx5IGFic3RyYWN0IG91dCB0aGUgdGFza3MgaW52b2x2ZWQgaW4KKyAgICAgICAgICAgICAgICBidWlsZGluZyBhIHBhY2thZ2UgdGhhdCB1c2VzIEF1dG9jb25mIGFuZCBBdXRvbWFrZSBhbmQgcHV0CisgICAgICAgICAgICAgICAgdGhvc2UgdGFza3MgaW50byBhIGNsYXNzIGZpbGUgdGhhdCBjYW4gYmUgdXNlZCBieSB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgeW91ciByZWNpcGVzIGNvdWxkIHVzZSB0aGUgZm9sbG93aW5nIGRpcmVjdGl2ZQorICAgICAgICAgICAgICAgIHRvIGluaGVyaXQgYW4gPGZpbGVuYW1lPmF1dG90b29scy5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICBUaGUgY2xhc3MgZmlsZSB3b3VsZCBjb250YWluIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGZvciB1c2luZworICAgICAgICAgICAgICAgIEF1dG90b29scyB0aGF0IGNvdWxkIGJlIHNoYXJlZCBhY3Jvc3MgcmVjaXBlczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGluaGVyaXQgYXV0b3Rvb2xzCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgQml0QmFrZSB3b3VsZCBzZWFyY2ggZm9yIHRoZSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y2xhc3Nlcy9hdXRvdG9vbHMuYmJjbGFzczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG92ZXJyaWRlIGFueSB2YWx1ZXMgYW5kIGZ1bmN0aW9ucyBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW5oZXJpdGVkIGNsYXNzIHdpdGhpbiB5b3VyIHJlY2lwZSBieSBkb2luZyBzbworICAgICAgICAgICAgICAgICAgICBhZnRlciB0aGUgImluaGVyaXQiIHN0YXRlbWVudC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0naW5jbHVkZS1kaXJlY3RpdmUnPgorICAgICAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4gRGlyZWN0aXZlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQml0QmFrZSB1bmRlcnN0YW5kcyB0aGUgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdGl2ZS4KKyAgICAgICAgICAgICAgICBUaGlzIGRpcmVjdGl2ZSBjYXVzZXMgQml0QmFrZSB0byBwYXJzZSB3aGF0ZXZlciBmaWxlIHlvdSBzcGVjaWZ5LAorICAgICAgICAgICAgICAgIGFuZCB0byBpbnNlcnQgdGhhdCBmaWxlIGF0IHRoYXQgbG9jYXRpb24uCisgICAgICAgICAgICAgICAgVGhlIGRpcmVjdGl2ZSBpcyBtdWNoIGxpa2UgaXRzIGVxdWl2YWxlbnQgaW4gTWFrZSBleGNlcHQKKyAgICAgICAgICAgICAgICB0aGF0IGlmIHRoZSBwYXRoIHNwZWNpZmllZCBvbiB0aGUgaW5jbHVkZSBsaW5lIGlzIGEgcmVsYXRpdmUKKyAgICAgICAgICAgICAgICBwYXRoLCBCaXRCYWtlIGxvY2F0ZXMgdGhlIGZpcnN0IGZpbGUgaXQgY2FuIGZpbmQKKyAgICAgICAgICAgICAgICB3aXRoaW4gPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBzdXBwb3NlIHlvdSBuZWVkZWQgYSByZWNpcGUgdG8gaW5jbHVkZSBzb21lCisgICAgICAgICAgICAgICAgc2VsZi10ZXN0IGRlZmluaXRpb25zOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgaW5jbHVkZSB0ZXN0X2RlZnMuaW5jCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiBkaXJlY3RpdmUgZG9lcyBub3QKKyAgICAgICAgICAgICAgICAgICAgcHJvZHVjZSBhbiBlcnJvciB3aGVuIHRoZSBmaWxlIGNhbm5vdCBiZSBmb3VuZC4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGlmIHRoZSBmaWxlIHlvdQorICAgICAgICAgICAgICAgICAgICBhcmUgaW5jbHVkaW5nIGlzIGV4cGVjdGVkIHRvIGV4aXN0LCB5b3Ugc2hvdWxkIHVzZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZXF1aXJlLWluY2x1c2lvbic+PGZpbGVuYW1lPnJlcXVpcmU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBEb2luZyBzbyBtYWtlcyBzdXJlIHRoYXQgYW4gZXJyb3IgaXMgcHJvZHVjZWQgaWYgdGhlCisgICAgICAgICAgICAgICAgICAgIGZpbGUgY2Fubm90IGJlIGZvdW5kLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdyZXF1aXJlLWluY2x1c2lvbic+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPnJlcXVpcmU8L2ZpbGVuYW1lPiBEaXJlY3RpdmU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIHVuZGVyc3RhbmRzIHRoZSA8ZmlsZW5hbWU+cmVxdWlyZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlLgorICAgICAgICAgICAgICAgIFRoaXMgZGlyZWN0aXZlIGJlaGF2ZXMganVzdCBsaWtlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4gZGlyZWN0aXZlIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0CisgICAgICAgICAgICAgICAgQml0QmFrZSByYWlzZXMgYSBwYXJzaW5nIGVycm9yIGlmIHRoZSBmaWxlIHRvIGJlIGluY2x1ZGVkIGNhbm5vdAorICAgICAgICAgICAgICAgIGJlIGZvdW5kLgorICAgICAgICAgICAgICAgIFRodXMsIGFueSBmaWxlIHlvdSByZXF1aXJlIGlzIGluc2VydGVkIGludG8gdGhlIGZpbGUgdGhhdCBpcworICAgICAgICAgICAgICAgIGJlaW5nIHBhcnNlZCBhdCB0aGUgbG9jYXRpb24gb2YgdGhlIGRpcmVjdGl2ZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU2ltaWxhciB0byBob3cgQml0QmFrZSBoYW5kbGVzCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0naW5jbHVkZS1kaXJlY3RpdmUnPjxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIGlmIHRoZSBwYXRoIHNwZWNpZmllZAorICAgICAgICAgICAgICAgIG9uIHRoZSByZXF1aXJlIGxpbmUgaXMgYSByZWxhdGl2ZSBwYXRoLCBCaXRCYWtlIGxvY2F0ZXMKKyAgICAgICAgICAgICAgICB0aGUgZmlyc3QgZmlsZSBpdCBjYW4gZmluZCB3aXRoaW4gPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYXZlIHR3byB2ZXJzaW9ucyBvZiBhIHJlY2lwZQorICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5mb29fMS4yLjIuYmI8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Zm9vXzIuMC4wLmJiPC9maWxlbmFtZT4pIHdoZXJlCisgICAgICAgICAgICAgICAgZWFjaCB2ZXJzaW9uIGNvbnRhaW5zIHNvbWUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgdGhhdCBjb3VsZCBiZQorICAgICAgICAgICAgICAgIHNoYXJlZC4KKyAgICAgICAgICAgICAgICBZb3UgY291bGQgY3JlYXRlIGFuIGluY2x1ZGUgZmlsZSBuYW1lZCA8ZmlsZW5hbWU+Zm9vLmluYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdGhhdCBjb250YWlucyB0aGUgY29tbW9uIGRlZmluaXRpb25zIG5lZWRlZCB0byBidWlsZCAiZm9vIi4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBiZSBzdXJlIDxmaWxlbmFtZT5mb28uaW5jPC9maWxlbmFtZT4gaXMgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICBzYW1lIGRpcmVjdG9yeSBhcyB5b3VyIHR3byByZWNpcGUgZmlsZXMgYXMgd2VsbC4KKyAgICAgICAgICAgICAgICBPbmNlIHRoZXNlIGNvbmRpdGlvbnMgYXJlIHNldCB1cCwgeW91IGNhbiBzaGFyZSB0aGUgZnVuY3Rpb25hbGl0eQorICAgICAgICAgICAgICAgIHVzaW5nIGEgPGZpbGVuYW1lPnJlcXVpcmU8L2ZpbGVuYW1lPiBkaXJlY3RpdmUgZnJvbSB3aXRoaW4gZWFjaAorICAgICAgICAgICAgICAgIHJlY2lwZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJlcXVpcmUgZm9vLmluYworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpbmhlcml0LWNvbmZpZ3VyYXRpb24tZGlyZWN0aXZlJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+SU5IRVJJVDwvZmlsZW5hbWU+IENvbmZpZ3VyYXRpb24gRGlyZWN0aXZlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiBjcmVhdGluZyBhIGNvbmZpZ3VyYXRpb24gZmlsZSAoPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4pLAorICAgICAgICAgICAgICAgIHlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+SU5IRVJJVDwvZmlsZW5hbWU+IGRpcmVjdGl2ZSB0bworICAgICAgICAgICAgICAgIGluaGVyaXQgYSBjbGFzcy4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIG9ubHkgc3VwcG9ydHMgdGhpcyBkaXJlY3RpdmUgd2hlbiB1c2VkIHdpdGhpbgorICAgICAgICAgICAgICAgIGEgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBzdXBwb3NlIHlvdSBuZWVkZWQgdG8gaW5oZXJpdCBhIGNsYXNzCisgICAgICAgICAgICAgICAgZmlsZSBjYWxsZWQgPGZpbGVuYW1lPmFiYy5iYmNsYXNzPC9maWxlbmFtZT4gZnJvbSBhCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhFUklUICs9ICJhYmMiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoaXMgY29uZmlndXJhdGlvbiBkaXJlY3RpdmUgY2F1c2VzIHRoZSBuYW1lZAorICAgICAgICAgICAgICAgIGNsYXNzIHRvIGJlIGluaGVyaXRlZCBhdCB0aGUgcG9pbnQgb2YgdGhlIGRpcmVjdGl2ZQorICAgICAgICAgICAgICAgIGR1cmluZyBwYXJzaW5nLgorICAgICAgICAgICAgICAgIEFzIHdpdGggdGhlIDxmaWxlbmFtZT5pbmhlcml0PC9maWxlbmFtZT4gZGlyZWN0aXZlLCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlIG11c3QgYmUgbG9jYXRlZCBpbiBhCisgICAgICAgICAgICAgICAgImNsYXNzZXMiIHN1YmRpcmVjdG9yeSBpbiBvbmUgb2YgdGhlIGRpcmVjdG9yaWVzIHNwZWNpZmllZAorICAgICAgICAgICAgICAgIGluIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiBmaWxlcyBhcmUgcGFyc2VkCisgICAgICAgICAgICAgICAgICAgIGZpcnN0IGR1cmluZyBCaXRCYWtlJ3MgZXhlY3V0aW9uLCB1c2luZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU5IRVJJVDwvZmlsZW5hbWU+IHRvIGluaGVyaXQgYSBjbGFzcyBlZmZlY3RpdmVseQorICAgICAgICAgICAgICAgICAgICBpbmhlcml0cyB0aGUgY2xhc3MgZ2xvYmFsbHkgKGkuZS4gZm9yIGFsbCByZWNpcGVzKS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nZnVuY3Rpb25zJz4KKyAgICAgICAgPHRpdGxlPkZ1bmN0aW9uczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyB3aXRoIG1vc3QgbGFuZ3VhZ2VzLCBmdW5jdGlvbnMgYXJlIHRoZSBidWlsZGluZyBibG9ja3MgdGhhdAorICAgICAgICAgICAgYXJlIHVzZWQgdG8gYnVpbGQgdXAgb3BlcmF0aW9ucyBpbnRvIHRhc2tzLgorICAgICAgICAgICAgQml0QmFrZSBzdXBwb3J0cyB0aGVzZSB0eXBlcyBvZiBmdW5jdGlvbnM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2hlbGwgRnVuY3Rpb25zOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9ucyB3cml0dGVuIGluIHNoZWxsIHNjcmlwdCBhbmQgZXhlY3V0ZWQgZWl0aGVyCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IGFzIGZ1bmN0aW9ucywgdGFza3MsIG9yIGJvdGguCisgICAgICAgICAgICAgICAgICAgIFRoZXkgY2FuIGFsc28gYmUgY2FsbGVkIGJ5IG90aGVyIHNoZWxsIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CaXRCYWtlIFN0eWxlIFB5dGhvbiBGdW5jdGlvbnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25zIHdyaXR0ZW4gaW4gUHl0aG9uIGFuZCBleGVjdXRlZCBieSBCaXRCYWtlIG9yIG90aGVyCisgICAgICAgICAgICAgICAgICAgIFB5dGhvbiBmdW5jdGlvbnMgdXNpbmcgPGZpbGVuYW1lPmJiLmJ1aWxkLmV4ZWNfZnVuYygpPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UHl0aG9uIEZ1bmN0aW9uczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbnMgd3JpdHRlbiBpbiBQeXRob24gYW5kIGV4ZWN1dGVkIGJ5IFB5dGhvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Bbm9ueW1vdXMgUHl0aG9uIEZ1bmN0aW9uczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBQeXRob24gZnVuY3Rpb25zIGV4ZWN1dGVkIGF1dG9tYXRpY2FsbHkgZHVyaW5nCisgICAgICAgICAgICAgICAgICAgIHBhcnNpbmcuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICBSZWdhcmRsZXNzIG9mIHRoZSB0eXBlIG9mIGZ1bmN0aW9uLCB5b3UgY2FuIG9ubHkKKyAgICAgICAgICAgIGRlZmluZSB0aGVtIGluIGNsYXNzICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgIGFuZCByZWNpcGUgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+KQorICAgICAgICAgICAgZmlsZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2hlbGwtZnVuY3Rpb25zJz4KKyAgICAgICAgICAgIDx0aXRsZT5TaGVsbCBGdW5jdGlvbnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGdW5jdGlvbnMgd3JpdHRlbiBpbiBzaGVsbCBzY3JpcHQgYW5kIGV4ZWN1dGVkIGVpdGhlcgorICAgICAgICAgICAgICAgIGRpcmVjdGx5IGFzIGZ1bmN0aW9ucywgdGFza3MsIG9yIGJvdGguCisgICAgICAgICAgICAgICAgVGhleSBjYW4gYWxzbyBiZSBjYWxsZWQgYnkgb3RoZXIgc2hlbGwgZnVuY3Rpb25zLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBzaGVsbCBmdW5jdGlvbiBkZWZpbml0aW9uOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgc29tZV9mdW5jdGlvbiAoKSB7CisgICAgICAgICBlY2hvICJIZWxsbyBXb3JsZCIKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSBjcmVhdGUgdGhlc2UgdHlwZXMgb2YgZnVuY3Rpb25zIGluIHlvdXIgcmVjaXBlCisgICAgICAgICAgICAgICAgb3IgY2xhc3MgZmlsZXMsIHlvdSBuZWVkIHRvIGZvbGxvdyB0aGUgc2hlbGwgcHJvZ3JhbW1pbmcKKyAgICAgICAgICAgICAgICBydWxlcy4KKyAgICAgICAgICAgICAgICBUaGUgc2NyaXB0cyBhcmUgZXhlY3V0ZWQgYnkgPGZpbGVuYW1lPi9iaW4vc2g8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICB3aGljaCBtYXkgbm90IGJlIGEgYmFzaCBzaGVsbCBidXQgbWlnaHQgYmUgc29tZXRoaW5nCisgICAgICAgICAgICAgICAgc3VjaCBhcyA8ZmlsZW5hbWU+ZGFzaDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgbm90IHVzZSBCYXNoLXNwZWNpZmljIHNjcmlwdCAoYmFzaGlzbXMpLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2JpdGJha2Utc3R5bGUtcHl0aG9uLWZ1bmN0aW9ucyc+CisgICAgICAgICAgICA8dGl0bGU+Qml0QmFrZSBTdHlsZSBQeXRob24gRnVuY3Rpb25zPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFyZSB3cml0dGVuIGluIFB5dGhvbiBhbmQgZXhlY3V0ZWQgYnkKKyAgICAgICAgICAgICAgICBCaXRCYWtlIG9yIG90aGVyIFB5dGhvbiBmdW5jdGlvbnMgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuYnVpbGQuZXhlY19mdW5jKCk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW4gZXhhbXBsZSBCaXRCYWtlIGZ1bmN0aW9uIGlzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcHl0aG9uIHNvbWVfcHl0aG9uX2Z1bmN0aW9uICgpIHsKKyAgICAgICAgIGQuc2V0VmFyKCJURVhUIiwgIkhlbGxvIFdvcmxkIikKKyAgICAgICAgIHByaW50IGQuZ2V0VmFyKCJURVhUIiwgVHJ1ZSkKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBQeXRob24gImJiIiBhbmQgIm9zIiBtb2R1bGVzIGFyZSBhbHJlYWR5CisgICAgICAgICAgICAgICAgaW1wb3J0ZWQsIHlvdSBkbyBub3QgbmVlZCB0byBpbXBvcnQgdGhlc2UgbW9kdWxlcy4KKyAgICAgICAgICAgICAgICBBbHNvIGluIHRoZXNlIHR5cGVzIG9mIGZ1bmN0aW9ucywgdGhlIGRhdGFzdG9yZSAoImQiKQorICAgICAgICAgICAgICAgIGlzIGEgZ2xvYmFsIHZhcmlhYmxlIGFuZCBpcyBhbHdheXMgYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgIGF2YWlsYWJsZS4KKyAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3B5dGhvbi1mdW5jdGlvbnMnPgorICAgICAgICAgICAgPHRpdGxlPlB5dGhvbiBGdW5jdGlvbnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGVzZSBmdW5jdGlvbnMgYXJlIHdyaXR0ZW4gaW4gUHl0aG9uIGFuZCBhcmUgZXhlY3V0ZWQgYnkKKyAgICAgICAgICAgICAgICBvdGhlciBQeXRob24gY29kZS4KKyAgICAgICAgICAgICAgICBFeGFtcGxlcyBvZiBQeXRob24gZnVuY3Rpb25zIGFyZSB1dGlsaXR5IGZ1bmN0aW9ucworICAgICAgICAgICAgICAgIHRoYXQgeW91IGludGVuZCB0byBjYWxsIGZyb20gaW4tbGluZSBQeXRob24gb3IKKyAgICAgICAgICAgICAgICBmcm9tIHdpdGhpbiBvdGhlciBQeXRob24gZnVuY3Rpb25zLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRlZiBnZXRfZGVwZW5kcyhkKToKKyAgICAgICAgIGlmIGQuZ2V0VmFyKCdTT01FQ09ORElUSU9OJywgVHJ1ZSk6CisgICAgICAgICAgICAgcmV0dXJuICJkZXBlbmRlbmN5d2l0aGNvbmQiCisgICAgICAgICBlbHNlOgorICAgICAgICAgICAgIHJldHVybiAiZGVwZW5kZW5jeSIKKyAgICAgU09NRUNPTkRJVElPTiA9ICIxIgorICAgICBERVBFTkRTID0gIiR7QGdldF9kZXBlbmRzKGQpfSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhpcyB3b3VsZCByZXN1bHQgaW4gPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbnRhaW5pbmcgPGZpbGVuYW1lPmRlcGVuZGVuY3l3aXRoY29uZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIHRoaW5ncyB0byBrbm93IGFib3V0IFB5dGhvbiBmdW5jdGlvbnM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlB5dGhvbiBmdW5jdGlvbnMgY2FuIHRha2UgcGFyYW1ldGVycy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIEJpdEJha2UgZGF0YXN0b3JlIGlzIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBtdXN0IHBhc3MgaXQgaW4gYXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIHRvIHRoZSBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlICJiYiIgYW5kICJvcyIgUHl0aG9uIG1vZHVsZXMgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgbmVlZCB0byBpbXBvcnQgdGhlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2Fub255bW91cy1weXRob24tZnVuY3Rpb25zJz4KKyAgICAgICAgICAgIDx0aXRsZT5Bbm9ueW1vdXMgUHl0aG9uIEZ1bmN0aW9uczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNvbWV0aW1lcyBpdCBpcyB1c2VmdWwgdG8gcnVuIHNvbWUgY29kZSBkdXJpbmcKKyAgICAgICAgICAgICAgICBwYXJzaW5nIHRvIHNldCB2YXJpYWJsZXMgb3IgdG8gcGVyZm9ybSBvdGhlciBvcGVyYXRpb25zCisgICAgICAgICAgICAgICAgcHJvZ3JhbW1hdGljYWxseS4KKyAgICAgICAgICAgICAgICBUbyBkbyB0aGlzLCB5b3UgY2FuIGRlZmluZSBhbiBhbm9ueW1vdXMgUHl0aG9uIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGNvbmRpdGlvbmFsbHkgc2V0cyBhCisgICAgICAgICAgICAgICAgdmFyaWFibGUgYmFzZWQgb24gdGhlIHZhbHVlIG9mIGFub3RoZXIgdmFyaWFibGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgICAgICAgaWYgZC5nZXRWYXIoJ1NPTUVWQVInLCBUcnVlKSA9PSAndmFsdWUnOgorICAgICAgICAgICAgIGQuc2V0VmFyKCdBTk9USEVSVkFSJywgJ3ZhbHVlMicpCisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlICJfX2Fub255bW91cyIgZnVuY3Rpb24gbmFtZSBpcyBvcHRpb25hbCwgc28gdGhlCisgICAgICAgICAgICAgICAgZm9sbG93aW5nIGV4YW1wbGUgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gdGhlIGFib3ZlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcHl0aG9uICgpIHsKKyAgICAgICAgIGlmIGQuZ2V0VmFyKCdTT01FVkFSJywgVHJ1ZSkgPT0gJ3ZhbHVlJzoKKyAgICAgICAgICAgICBkLnNldFZhcignQU5PVEhFUlZBUicsICd2YWx1ZTInKQorICAgICB9CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEJlY2F1c2UgdW5saWtlIG90aGVyIFB5dGhvbiBmdW5jdGlvbnMgYW5vbnltb3VzCisgICAgICAgICAgICAgICAgUHl0aG9uIGZ1bmN0aW9ucyBhcmUgZXhlY3V0ZWQgZHVyaW5nIHBhcnNpbmcsIHRoZQorICAgICAgICAgICAgICAgICJkIiB2YXJpYWJsZSB3aXRoaW4gYW4gYW5vbnltb3VzIFB5dGhvbiBmdW5jdGlvbiByZXByZXNlbnRzCisgICAgICAgICAgICAgICAgdGhlIGRhdGFzdG9yZSBmb3IgdGhlIGVudGlyZSByZWNpcGUuCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgY2FuIHNldCB2YXJpYWJsZSB2YWx1ZXMgaGVyZSBhbmQKKyAgICAgICAgICAgICAgICB0aG9zZSB2YWx1ZXMgY2FuIGJlIHBpY2tlZCB1cCBieSBvdGhlciBmdW5jdGlvbnMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZmxleGlibGUtaW5oZXJpdGFuY2UtZm9yLWNsYXNzLWZ1bmN0aW9ucyc+CisgICAgICAgICAgICA8dGl0bGU+RmxleGlibGUgSW5oZXJpdGFuY2UgZm9yIENsYXNzIEZ1bmN0aW9uczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRocm91Z2ggY29kaW5nIHRlY2huaXF1ZXMgYW5kIHRoZSB1c2Ugb2YKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RVhQT1JUX0ZVTkNUSU9OUzwvZmlsZW5hbWU+LCBCaXRCYWtlIHN1cHBvcnRzCisgICAgICAgICAgICAgICAgZXhwb3J0aW5nIGEgZnVuY3Rpb24gZnJvbSBhIGNsYXNzIHN1Y2ggdGhhdCB0aGUKKyAgICAgICAgICAgICAgICBjbGFzcyBmdW5jdGlvbiBhcHBlYXJzIGFzIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCisgICAgICAgICAgICAgICAgb2YgdGhlIGZ1bmN0aW9uLCBidXQgY2FuIHN0aWxsIGJlIGNhbGxlZCBpZiBhIHJlY2lwZQorICAgICAgICAgICAgICAgIGluaGVyaXRpbmcgdGhlIGNsYXNzIG5lZWRzIHRvIGRlZmluZSBpdHMgb3duIHZlcnNpb24gb2YKKyAgICAgICAgICAgICAgICB0aGUgZnVuY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHVuZGVyc3RhbmQgdGhlIGJlbmVmaXRzIG9mIHRoaXMgZmVhdHVyZSwgY29uc2lkZXIKKyAgICAgICAgICAgICAgICB0aGUgYmFzaWMgc2NlbmFyaW8gd2hlcmUgYSBjbGFzcyBkZWZpbmVzIGEgdGFzayBmdW5jdGlvbgorICAgICAgICAgICAgICAgIGFuZCB5b3VyIHJlY2lwZSBpbmhlcml0cyB0aGUgY2xhc3MuCisgICAgICAgICAgICAgICAgSW4gdGhpcyBiYXNpYyBzY2VuYXJpbywgeW91ciByZWNpcGUgaW5oZXJpdHMgdGhlIHRhc2sKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBhcyBkZWZpbmVkIGluIHRoZSBjbGFzcy4KKyAgICAgICAgICAgICAgICBJZiBkZXNpcmVkLCB5b3VyIHJlY2lwZSBjYW4gYWRkIHRvIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZQorICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGJ5IHVzaW5nIHRoZSAiX3ByZXBlbmQiIG9yICJfYXBwZW5kIiBvcGVyYXRpb25zCisgICAgICAgICAgICAgICAgcmVzcGVjdGl2ZWx5LCBvciBpdCBjYW4gcmVkZWZpbmUgdGhlIGZ1bmN0aW9uIGNvbXBsZXRlbHkuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgaXQgcmVkZWZpbmVzIHRoZSBmdW5jdGlvbiwgdGhlcmUgaXMKKyAgICAgICAgICAgICAgICBubyBtZWFucyAgZm9yIGl0IHRvIGNhbGwgdGhlIGNsYXNzIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5FWFBPUlRfRlVOQ1RJT05TPC9maWxlbmFtZT4gcHJvdmlkZXMgYSBtZWNoYW5pc20KKyAgICAgICAgICAgICAgICB0aGF0IGVuYWJsZXMgdGhlIHJlY2lwZSdzIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uIHRvIGNhbGwKKyAgICAgICAgICAgICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIG1ha2UgdXNlIG9mIHRoaXMgdGVjaG5pcXVlLCB5b3UgbmVlZCB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgdGhpbmdzIGluIHBsYWNlOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjbGFzcyBuZWVkcyB0byBkZWZpbmUgdGhlIGZ1bmN0aW9uIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxyZXBsYWNlYWJsZT5jbGFzc25hbWU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT5fPC9maWxlbmFtZT48cmVwbGFjZWFibGU+ZnVuY3Rpb25uYW1lPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBhIGNsYXNzIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXIuYmJjbGFzczwvZmlsZW5hbWU+IGFuZCBhIGZ1bmN0aW9uIG5hbWVkCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fZm9vPC9maWxlbmFtZT4sIHRoZSBjbGFzcyBtdXN0IGRlZmluZSB0aGUgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGJhcl9kb19mb28KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgY2xhc3MgbmVlZHMgdG8gY29udGFpbiB0aGUgPGZpbGVuYW1lPkVYUE9SVF9GVU5DVElPTlM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEVYUE9SVF9GVU5DVElPTlMgPHJlcGxhY2VhYmxlPmZ1bmN0aW9ubmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgY29udGludWluZyB3aXRoIHRoZSBzYW1lIGV4YW1wbGUsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50IGluIHRoZSA8ZmlsZW5hbWU+YmFyLmJiY2xhc3M8L2ZpbGVuYW1lPiB3b3VsZCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRVhQT1JUX0ZVTkNUSU9OUyBkb19mb28KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBjYWxsIHRoZSBmdW5jdGlvbiBhcHByb3ByaWF0ZWx5IGZyb20gd2l0aGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbnRpbnVpbmcgd2l0aCB0aGUgc2FtZSBleGFtcGxlLCBpZiB5b3VyIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICAgICAgbmVlZHMgdG8gY2FsbCB0aGUgY2xhc3MgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBpdCBzaG91bGQgY2FsbCA8ZmlsZW5hbWU+YmFyX2RvX2ZvbzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgQXNzdW1pbmcgPGZpbGVuYW1lPmRvX2ZvbzwvZmlsZW5hbWU+IHdhcyBhIHNoZWxsIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPkVYUE9SVF9GVU5DVElPTlM8L2ZpbGVuYW1lPiB3YXMgdXNlZCBhcyBhYm92ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByZWNpcGUncyBmdW5jdGlvbiBjb3VsZCBjb25kaXRpb25hbGx5IGNhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkb19mb28oKSB7CisgICAgICAgICAgICAgaWYgWyBzb21lY29uZGl0aW9uIF0gOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICBiYXJfZG9fZm9vCisgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIyBEbyBzb21ldGhpbmcgZWxzZQorICAgICAgICAgICAgIGZpCisgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIGNhbGwgeW91ciBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiBhcyBkZWZpbmVkCisgICAgICAgICAgICAgICAgICAgICAgICBpbiB5b3VyIHJlY2lwZSwgY2FsbCBpdCBhcyA8ZmlsZW5hbWU+ZG9fZm9vPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICBXaXRoIHRoZXNlIGNvbmRpdGlvbnMgbWV0LCB5b3VyIHNpbmdsZSByZWNpcGUKKyAgICAgICAgICAgICAgICBjYW4gZnJlZWx5IGNob29zZSBiZXR3ZWVuIHRoZSBvcmlnaW5hbCBmdW5jdGlvbgorICAgICAgICAgICAgICAgIGFzIGRlZmluZWQgaW4gdGhlIGNsYXNzIGZpbGUgYW5kIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBpbiB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHNldCB1cCB0aGVzZSBjb25kaXRpb25zLCB5b3UgYXJlIGxpbWl0ZWQgdG8gdXNpbmcgb25lIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgb3IgdGhlIG90aGVyLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3Rhc2tzJz4KKyAgICAgICAgPHRpdGxlPlRhc2tzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRhc2tzIGFyZSBCaXRCYWtlIGV4ZWN1dGlvbiB1bml0cyB0aGF0IG9yaWdpbmF0ZSBhcworICAgICAgICAgICAgZnVuY3Rpb25zIGFuZCBtYWtlIHVwIHRoZSBzdGVwcyB0aGF0IEJpdEJha2UgbmVlZHMgdG8gcnVuCisgICAgICAgICAgICBmb3IgZ2l2ZW4gcmVjaXBlLgorICAgICAgICAgICAgVGFza3MgYXJlIG9ubHkgc3VwcG9ydGVkIGluIHJlY2lwZSAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICBvciA8ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+KSBhbmQgY2xhc3MKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikgZmlsZXMuCisgICAgICAgICAgICBCeSBjb252ZW50aW9uLCB0YXNrIG5hbWVzIGJlZ2luIHdpdGggdGhlIHN0cmluZyAiZG9fIi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgdGFzayB0aGF0IHByaW50cyBvdXQgdGhlIGRhdGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHB5dGhvbiBkb19wcmludGRhdGUgKCkgeworICAgICAgICAgaW1wb3J0IHRpbWUKKyAgICAgICAgIHByaW50IHRpbWUuc3RyZnRpbWUoJyVZJW0lZCcsIHRpbWUuZ210aW1lKCkpCisgICAgIH0KKyAgICAgYWRkdGFzayBwcmludGRhdGUgYWZ0ZXIgZG9fZmV0Y2ggYmVmb3JlIGRvX2J1aWxkCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncHJvbW90aW5nLWEtZnVuY3Rpb24tdG8tYS10YXNrJz4KKyAgICAgICAgICAgIDx0aXRsZT5Qcm9tb3RpbmcgYSBGdW5jdGlvbiB0byBhIFRhc2s8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBbnkgZnVuY3Rpb24gY2FuIGJlIHByb21vdGVkIHRvIGEgdGFzayBieSBhcHBseWluZyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YWRkdGFzazwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5hZGR0YXNrPC9maWxlbmFtZT4gY29tbWFuZCBhbHNvIGRlc2NyaWJlcworICAgICAgICAgICAgICAgIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGZ1bmN0aW9uIGZyb20gdGhlIHByZXZpb3VzIHNlY3Rpb24gYnV0IHdpdGggdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFkZHRhc2s8L2ZpbGVuYW1lPiBjb21tYW5kIHByb21vdGluZyBpdCB0byBhIHRhc2sKKyAgICAgICAgICAgICAgICBhbmQgZGVmaW5pbmcgc29tZSBkZXBlbmRlbmNpZXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBweXRob24gZG9fcHJpbnRkYXRlICgpIHsKKyAgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgICBwcmludCB0aW1lLnN0cmZ0aW1lKCclWSVtJWQnLCB0aW1lLmdtdGltZSgpKQorICAgICB9CisgICAgIGFkZHRhc2sgcHJpbnRkYXRlIGFmdGVyIGRvX2ZldGNoIGJlZm9yZSBkb19idWlsZAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJbiB0aGUgZXhhbXBsZSwgdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYW5kIHRoZW4gcHJvbW90ZWQKKyAgICAgICAgICAgICAgICBhcyBhIHRhc2suCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19wcmludGRhdGU8L2ZpbGVuYW1lPiB0YXNrIGJlY29tZXMgYSBkZXBlbmRlbmN5IG9mCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5kb19idWlsZDwvZmlsZW5hbWU+IHRhc2ssIHdoaWNoIGlzIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICBBbmQsIHRoZSA8ZmlsZW5hbWU+ZG9fcHJpbnRkYXRlPC9maWxlbmFtZT4gdGFzayBpcyBkZXBlbmRlbnQgdXBvbgorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPiB0YXNrLgorICAgICAgICAgICAgICAgIEV4ZWN1dGlvbiBvZiB0aGUgPGZpbGVuYW1lPmRvX2J1aWxkPC9maWxlbmFtZT4gdGFzayByZXN1bHRzCisgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5kb19wcmludGRhdGU8L2ZpbGVuYW1lPiB0YXNrIHJ1bm5pbmcgZmlyc3QuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZGVsZXRpbmctYS10YXNrJz4KKyAgICAgICAgICAgIDx0aXRsZT5EZWxldGluZyBhIFRhc2s8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyB3ZWxsIGFzIGJlaW5nIGFibGUgdG8gYWRkIHRhc2tzLCB5b3UgY2FuIGRlbGV0ZSB0aGVtLgorICAgICAgICAgICAgICAgIFNpbXBseSB1c2UgdGhlIDxmaWxlbmFtZT5kZWx0YXNrPC9maWxlbmFtZT4gY29tbWFuZCB0bworICAgICAgICAgICAgICAgIGRlbGV0ZSBhIHRhc2suCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIGRlbGV0ZSB0aGUgZXhhbXBsZSB0YXNrIHVzZWQgaW4gdGhlIHByZXZpb3VzCisgICAgICAgICAgICAgICAgc2VjdGlvbnMsIHlvdSB3b3VsZCB1c2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkZWx0YXNrIHByaW50ZGF0ZQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJZiB5b3UgZGVsZXRlIGEgdGFzayB1c2luZyB0aGUgPGZpbGVuYW1lPmRlbHRhc2s8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbW1hbmQgYW5kIHRoZSB0YXNrIGhhcyBkZXBlbmRlbmNpZXMsIHRoZSBkZXBlbmRlbmNpZXMgYXJlCisgICAgICAgICAgICAgICAgbm90IHJlY29ubmVjdGVkLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYXZlIHRocmVlIHRhc2tzIG5hbWVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2E8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmRvX2I8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2M8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBGdXJ0aGVybW9yZSwgPGZpbGVuYW1lPmRvX2M8L2ZpbGVuYW1lPiBpcyBkZXBlbmRlbnQgb24KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fYjwvZmlsZW5hbWU+LCB3aGljaCBpbiB0dXJuIGlzIGRlcGVuZGVudCBvbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19hPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgR2l2ZW4gdGhpcyBzY2VuYXJpbywgaWYgeW91IHVzZSA8ZmlsZW5hbWU+ZGVsdGFzazwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdG8gZGVsZXRlIDxmaWxlbmFtZT5kb19iPC9maWxlbmFtZT4sIHRoZSBpbXBsaWNpdCBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgcmVsYXRpb25zaGlwIGJldHdlZW4gPGZpbGVuYW1lPmRvX2M8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fYTwvZmlsZW5hbWU+IHRocm91Z2ggPGZpbGVuYW1lPmRvX2I8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIG5vIGxvbmdlciBleGlzdHMsIGFuZCA8ZmlsZW5hbWU+ZG9fYzwvZmlsZW5hbWU+IGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgIGFyZSBub3QgdXBkYXRlZCB0byBpbmNsdWRlIDxmaWxlbmFtZT5kb19hPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGh1cywgPGZpbGVuYW1lPmRvX2M8L2ZpbGVuYW1lPiBpcyBmcmVlIHRvIHJ1biBiZWZvcmUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fYTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCBkZXBlbmRlbmNpZXMgc3VjaCBhcyB0aGVzZSB0byByZW1haW4gaW50YWN0LCB1c2UKKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPm5vZXhlYzwvZmlsZW5hbWU+IHZhcmZsYWcgdG8gZGlzYWJsZSB0aGUgdGFzaworICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgdXNpbmcgdGhlIDxmaWxlbmFtZT5kZWx0YXNrPC9maWxlbmFtZT4gY29tbWFuZCB0bworICAgICAgICAgICAgICAgIGRlbGV0ZSBpdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX2Jbbm9leGVjXSA9ICIxIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwYXNzaW5nLWluZm9ybWF0aW9uLWludG8tdGhlLWJ1aWxkLXRhc2stZW52aXJvbm1lbnQnPgorICAgICAgICAgICAgPHRpdGxlPlBhc3NpbmcgSW5mb3JtYXRpb24gSW50byB0aGUgQnVpbGQgVGFzayBFbnZpcm9ubWVudDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4gcnVubmluZyBhIHRhc2ssIEJpdEJha2UgdGlnaHRseSBjb250cm9scyB0aGUgZXhlY3V0aW9uCisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgb2YgdGhlIGJ1aWxkIHRhc2tzIHRvIG1ha2UKKyAgICAgICAgICAgICAgICBzdXJlIHVud2FudGVkIGNvbnRhbWluYXRpb24gZnJvbSB0aGUgYnVpbGQgbWFjaGluZSBjYW5ub3QKKyAgICAgICAgICAgICAgICBpbmZsdWVuY2UgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgaWYgeW91IGRvIHdhbnQgc29tZXRoaW5nIHRvIGdldCBwYXNzZWQgaW50byB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCB0YXNrIGVudmlyb25tZW50LCB5b3UgbXVzdCB0YWtlIHRoZXNlIHR3byBzdGVwczoKKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRlbGwgQml0QmFrZSB0byBsb2FkIHdoYXQgeW91IHdhbnQgZnJvbSB0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIGRhdGFzdG9yZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZG8gc28gdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9FTlZfRVhUUkFXSElURSc+PGZpbGVuYW1lPkJCX0VOVl9FWFRSQVdISVRFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBhc3N1bWUgeW91IHdhbnQgdG8gcHJldmVudCB0aGUgYnVpbGQgc3lzdGVtIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc2luZyB5b3VyIDxmaWxlbmFtZT4kSE9NRS8uY2NhY2hlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZCB0ZWxscyBCaXRCYWtlIHRvIGxvYWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DQ0FDSEVfRElSPC9maWxlbmFtZT4gZnJvbSB0aGUgZW52aXJvbm1lbnQgaW50bworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRhdGFzdG9yZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZXhwb3J0IEJCX0VOVl9FWFRSQVdISVRFPSIkQkJfRU5WX0VYVFJBV0hJVEUgQ0NBQ0hFX0RJUiIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGVsbCBCaXRCYWtlIHRvIGV4cG9ydCB3aGF0IHlvdSBoYXZlIGxvYWRlZCBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXN0b3JlIHRvIHRoZSB0YXNrIGVudmlyb25tZW50IG9mIGV2ZXJ5IHJ1bm5pbmcgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgICAgIExvYWRpbmcgc29tZXRoaW5nIGZyb20gdGhlIGVudmlyb25tZW50IGludG8gdGhlIGRhdGFzdG9yZQorICAgICAgICAgICAgICAgICAgICAgICAgKHByZXZpb3VzIHN0ZXApIG9ubHkgbWFrZXMgaXQgYXZhaWxhYmxlIGluIHRoZSBkYXRhc3RvcmUuCisgICAgICAgICAgICAgICAgICAgICAgICBUbyBleHBvcnQgaXQgdG8gdGhlIHRhc2sgZW52aXJvbm1lbnQgb2YgZXZlcnkgcnVubmluZyB0YXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgdXNlIGEgY29tbWFuZCBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmcgaW4geW91ciBsb2NhbCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gb3IgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZXhwb3J0IENDQUNIRV9ESVIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgc2lkZSBlZmZlY3Qgb2YgdGhlIHByZXZpb3VzIHN0ZXBzIGlzIHRoYXQgQml0QmFrZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHMgdGhlIHZhcmlhYmxlIGFzIGEgZGVwZW5kZW5jeSBvZiB0aGUgYnVpbGQgcHJvY2VzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoaW5ncyBsaWtlIHRoZSBzZXRzY2VuZSBjaGVja3N1bXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgZG9pbmcgc28gcmVzdWx0cyBpbiB1bm5lY2Vzc2FyeSByZWJ1aWxkcyBvZiB0YXNrcywgeW91IGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaXRlbGlzdCB0aGUgdmFyaWFibGUgc28gdGhhdCB0aGUgc2V0c2NlbmUgY29kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZXMgdGhlIGRlcGVuZGVuY3kgd2hlbiBpdCBjcmVhdGVzIGNoZWNrc3Vtcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTb21ldGltZXMsIGl0IGlzIHVzZWZ1bCB0byBiZSBhYmxlIHRvIG9idGFpbiBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgIGZyb20gdGhlIG9yaWdpbmFsIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICBCaXRiYWtlIHNhdmVzIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgZW52aXJvbm1lbnQgaW50bworICAgICAgICAgICAgICAgIGEgc3BlY2lhbCB2YXJpYWJsZSBuYW1lZAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9PUklHRU5WJz48ZmlsZW5hbWU+QkJfT1JJR0VOVjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5CQl9PUklHRU5WPC9maWxlbmFtZT4gdmFyaWFibGUgcmV0dXJucyBhIGRhdGFzdG9yZQorICAgICAgICAgICAgICAgIG9iamVjdCB0aGF0IGNhbiBiZSBxdWVyaWVkIHVzaW5nIHRoZSBzdGFuZGFyZCBkYXRhc3RvcmUgb3BlcmF0b3JzCisgICAgICAgICAgICAgICAgc3VjaCBhcyA8ZmlsZW5hbWU+Z2V0VmFyKCwgRmFsc2UpPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhlIGRhdGFzdG9yZSBvYmplY3QgaXMgdXNlZnVsLCBmb3IgZXhhbXBsZSwgdG8gZmluZCB0aGUgb3JpZ2luYWwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RElTUExBWTwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG9yaWdlbnYgPSBkLmdldFZhcigiQkJfT1JJR0VOViIsIEZhbHNlKQorICAgICBiYXIgPSBvcmlnZW52LmdldFZhcigiQkFSIiwgRmFsc2UpCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBleGFtcGxlIHJldHVybnMgPGZpbGVuYW1lPkJBUjwvZmlsZW5hbWU+IGZyb20gdGhlIG9yaWdpbmFsCisgICAgICAgICAgICAgICAgZXhlY3V0aW9uIGVudmlyb25tZW50LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCBCaXRCYWtlIGNsZWFucyB0aGUgZW52aXJvbm1lbnQgdG8gaW5jbHVkZSBvbmx5IHRob3NlCisgICAgICAgICAgICAgICAgdGhpbmdzIGV4cG9ydGVkIG9yIGxpc3RlZCBpbiBpdHMgd2hpdGVsaXN0IHRvIGVuc3VyZSB0aGF0IHRoZSBidWlsZAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50IGlzIHJlcHJvZHVjaWJsZSBhbmQgY29uc2lzdGVudC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd2YXJpYWJsZS1mbGFncyc+CisgICAgICAgIDx0aXRsZT5WYXJpYWJsZSBGbGFnczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBWYXJpYWJsZSBmbGFncyAodmFyZmxhZ3MpIGhlbHAgY29udHJvbCBhIHRhc2sncyBmdW5jdGlvbmFsaXR5CisgICAgICAgICAgICBhbmQgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgQml0QmFrZSByZWFkcyBhbmQgd3JpdGVzIHZhcmZsYWdzIHRvIHRoZSBkYXRhc3RvcmUgdXNpbmcgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgY29tbWFuZCBmb3JtczoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPHJlcGxhY2VhYmxlPnZhcmlhYmxlPC9yZXBsYWNlYWJsZT4gPSBkLmdldFZhckZsYWdzKCI8cmVwbGFjZWFibGU+dmFyaWFibGU8L3JlcGxhY2VhYmxlPiIpCisgICAgIHNlbGYuZC5zZXRWYXJGbGFncygiRk9PIiwgeyJmdW5jIjogVHJ1ZX0pCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gd29ya2luZyB3aXRoIHZhcmZsYWdzLCB0aGUgc2FtZSBzeW50YXgsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZgorICAgICAgICAgICAgb3ZlcnJpZGVzLCBhcHBsaWVzLgorICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHlvdSBjYW4gc2V0LCBhcHBlbmQsIGFuZCBwcmVwZW5kIHZhcmZsYWdzIGp1c3QgbGlrZQorICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3ZhcmlhYmxlLWZsYWctc3ludGF4Jz5WYXJpYWJsZSBGbGFnIFN5bnRheDwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGZvciBkZXRhaWxzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIGhhcyBhIGRlZmluZWQgc2V0IG9mIHZhcmZsYWdzIGF2YWlsYWJsZSBmb3IgcmVjaXBlcyBhbmQKKyAgICAgICAgICAgIGNsYXNzZXMuCisgICAgICAgICAgICBUYXNrcyBzdXBwb3J0IGEgbnVtYmVyIG9mIHRoZXNlIGZsYWdzIHdoaWNoIGNvbnRyb2wgdmFyaW91cworICAgICAgICAgICAgZnVuY3Rpb25hbGl0eSBvZiB0aGUgdGFzazoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5jbGVhbmRpcnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRW1wdHkgZGlyZWN0b3JpZXMgdGhhdCBzaG91bGQgY3JlYXRlZCBiZWZvcmUgdGhlIHRhc2sgcnVucy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5kZXBlbmRzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdpbnRlci10YXNrLWRlcGVuZGVuY2llcyc+SW50ZXItVGFzayBEZXBlbmRlbmNpZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmRlcHRhc2s6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgdGFzayBidWlsZC10aW1lIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYnVpbGQtZGVwZW5kZW5jaWVzJz5CdWlsZCBEZXBlbmRlbmNpZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmRpcnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3JpZXMgdGhhdCBzaG91bGQgYmUgY3JlYXRlZCBiZWZvcmUgdGhlIHRhc2sgcnVucy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5sb2NrZmlsZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBvbmUgb3IgbW9yZSBsb2NrZmlsZXMgdG8gbG9jayB3aGlsZSB0aGUgdGFzaworICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZXMuCisgICAgICAgICAgICAgICAgICAgICBPbmx5IG9uZSB0YXNrIG1heSBob2xkIGEgbG9ja2ZpbGUsIGFuZCBhbnkgdGFzayB0aGF0CisgICAgICAgICAgICAgICAgICAgICBhdHRlbXB0cyB0byBsb2NrIGFuIGFscmVhZHkgbG9ja2VkIGZpbGUgd2lsbCBibG9jayB1bnRpbAorICAgICAgICAgICAgICAgICAgICAgdGhlIGxvY2sgaXMgcmVsZWFzZWQuCisgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIHZhcmlhYmxlIGZsYWcgdG8gYWNjb21wbGlzaCBtdXR1YWwKKyAgICAgICAgICAgICAgICAgICAgIGV4Y2x1c2lvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5ub2V4ZWM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTWFya3MgdGhlIHRhc2tzIGFzIGJlaW5nIGVtcHR5IGFuZCBubyBleGVjdXRpb24gcmVxdWlyZWQuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bm9leGVjPC9maWxlbmFtZT4gZmxhZyBjYW4gYmUgdXNlZCB0byBzZXQgdXAKKyAgICAgICAgICAgICAgICAgICAgdGFza3MgYXMgZGVwZW5kZW5jeSBwbGFjZWhvbGRlcnMsIG9yIHRvIGRpc2FibGUgdGFza3MgZGVmaW5lZAorICAgICAgICAgICAgICAgICAgICBlbHNld2hlcmUgdGhhdCBhcmUgbm90IG5lZWRlZCBpbiBhIHBhcnRpY3VsYXIgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPm5vc3RhbXA6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGVsbHMgQml0QmFrZSB0byBub3QgZ2VuZXJhdGUgYSBzdGFtcCBmaWxlIGZvciBhIHRhc2ssCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGltcGxpZXMgdGhlIHRhc2sgc2hvdWxkIGFsd2F5cyBiZSBleGVjdXRlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wb3N0ZnVuY3M6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBhZnRlciB0aGUgY29tcGxldGlvbiBvZiB0aGUgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wcmVmdW5jczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIGJlZm9yZSB0aGUgdGFzayBleGVjdXRlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5yZGVwZW5kczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBDb250cm9scyBpbnRlci10YXNrIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2ludGVyLXRhc2stZGVwZW5kZW5jaWVzJz5JbnRlci1UYXNrIERlcGVuZGVuY2llczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cmRlcHRhc2s6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgdGFzayBydW50aW1lIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdydW50aW1lLWRlcGVuZGVuY2llcyc+UnVudGltZSBEZXBlbmRlbmNpZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnJlY2lkZXB0YXNrOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gc2V0IGluIGNvbmp1bmN0aW9uIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY3JkZXB0YXNrPC9maWxlbmFtZT4sIHNwZWNpZmllcyBhIHRhc2sgdGhhdAorICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgaW5zcGVjdGVkIGZvciBhZGRpdGlvbmFsIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5yZWNyZGVwdGFzazo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBDb250cm9scyB0YXNrIHJlY3Vyc2l2ZSBydW50aW1lIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWN1cnNpdmUtZGVwZW5kZW5jaWVzJz5SZWN1cnNpdmUgRGVwZW5kZW5jaWVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5zdGFtcC1leHRyYS1pbmZvOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEV4dHJhIHN0YW1wIGluZm9ybWF0aW9uIHRvIGFwcGVuZCB0byB0aGUgdGFzaydzIHN0YW1wLgorICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBPcGVuRW1iZWRkZWQgdXNlcyB0aGlzIGZsYWcgdG8gYWxsb3cKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZS1zcGVjaWZpYyB0YXNrcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz51bWFzazo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgdW1hc2sgdG8gcnVuIHRoZSB0YXNrIHVuZGVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTZXZlcmFsIHZhcmZsYWdzIGFyZSB1c2VmdWwgZm9yIGNvbnRyb2xsaW5nIGhvdyBzaWduYXR1cmVzIGFyZQorICAgICAgICAgICAgY2FsY3VsYXRlZCBmb3IgdmFyaWFibGVzLgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBwcm9jZXNzLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY2hlY2tzdW1zJz5DaGVja3N1bXMgKFNpZ25hdHVyZXMpPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dmFyZGVwczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBhZGRpdGlvbmFsCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB0byBhZGQgdG8gYSB2YXJpYWJsZSdzIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHB1cnBvc2VzIG9mIGNhbGN1bGF0aW5nIGl0cyBzaWduYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIEFkZGluZyB2YXJpYWJsZXMgdG8gdGhpcyBsaXN0IGlzIHVzZWZ1bCwgZm9yIGV4YW1wbGUsIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgYSBmdW5jdGlvbiByZWZlcnMgdG8gYSB2YXJpYWJsZSBpbiBhIG1hbm5lciB0aGF0CisgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IGFsbG93IEJpdEJha2UgdG8gYXV0b21hdGljYWxseSBkZXRlcm1pbmUKKyAgICAgICAgICAgICAgICAgICAgdGhhdCB0aGUgdmFyaWFibGUgaXMgcmVmZXJyZWQgdG8uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dmFyZGVwc2V4Y2x1ZGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgdmFyaWFibGVzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gYSB2YXJpYWJsZSdzIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHB1cnBvc2VzIG9mIGNhbGN1bGF0aW5nIGl0cyBzaWduYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dmFyZGVwdmFsdWU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSWYgc2V0LCBpbnN0cnVjdHMgQml0QmFrZSB0byBpZ25vcmUgdGhlIGFjdHVhbAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgYW5kIGluc3RlYWQgdXNlIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgd2hlbiBjYWxjdWxhdGluZyB0aGUgdmFyaWFibGUncyBzaWduYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dmFyZGVwdmFsdWVleGNsdWRlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIHBpcGUtc2VwYXJhdGVkIGxpc3Qgb2Ygc3RyaW5ncyB0byBleGNsdWRlCisgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIHZhcmlhYmxlJ3MgdmFsdWUgd2hlbiBjYWxjdWxhdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUncyBzaWduYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nZXZlbnRzJz4KKyAgICAgICAgPHRpdGxlPkV2ZW50czwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIGFsbG93cyBpbnN0YWxsYXRpb24gb2YgZXZlbnQgaGFuZGxlcnMgd2l0aGluCisgICAgICAgICAgICByZWNpcGUgYW5kIGNsYXNzIGZpbGVzLgorICAgICAgICAgICAgRXZlbnRzIGFyZSB0cmlnZ2VyZWQgYXQgY2VydGFpbiBwb2ludHMgZHVyaW5nIG9wZXJhdGlvbiwKKyAgICAgICAgICAgIHN1Y2ggYXMgdGhlIGJlZ2lubmluZyBvZiBhbiBvcGVyYXRpb24gYWdhaW5zdCBhIGdpdmVuIHJlY2lwZQorICAgICAgICAgICAgKDxmaWxlbmFtZT4qLmJiPC9maWxlbmFtZT4gZmlsZSksIHRoZSBzdGFydCBvZiBhIGdpdmVuIHRhc2ssCisgICAgICAgICAgICB0YXNrIGZhaWx1cmUsIHRhc2sgc3VjY2VzcywgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgVGhlIGludGVudCBpcyB0byBtYWtlIGl0IGVhc3kgdG8gZG8gdGhpbmdzIGxpa2UgZW1haWwKKyAgICAgICAgICAgIG5vdGlmaWNhdGlvbiBvbiBidWlsZCBmYWlsdXJlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBldmVudCBoYW5kbGVyIHRoYXQKKyAgICAgICAgICAgIHByaW50cyB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgYW5kIHRoZSBjb250ZW50IG9mCisgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPkZJTEU8L2ZpbGVuYW1lPiB2YXJpYWJsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgYWRkaGFuZGxlciBteWNsYXNzX2V2ZW50aGFuZGxlcgorICAgICBweXRob24gbXljbGFzc19ldmVudGhhbmRsZXIoKSB7CisgICAgICAgICBmcm9tIGJiLmV2ZW50IGltcG9ydCBnZXROYW1lCisgICAgICAgICBmcm9tIGJiIGltcG9ydCBkYXRhCisgICAgICAgICBwcmludCgiVGhlIG5hbWUgb2YgdGhlIEV2ZW50IGlzICVzIiAlIGdldE5hbWUoZSkpCisgICAgICAgICBwcmludCgiVGhlIGZpbGUgd2UgcnVuIGZvciBpcyAlcyIgJSBkYXRhLmdldFZhcignRklMRScsIGUuZGF0YSwgVHJ1ZSkpCisgICAgIH0KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgZXZlbnQgaGFuZGxlciBnZXRzIGNhbGxlZCBldmVyeSB0aW1lIGFuIGV2ZW50IGlzCisgICAgICAgICAgICB0cmlnZ2VyZWQuCisgICAgICAgICAgICBBIGdsb2JhbCB2YXJpYWJsZSAiPGZpbGVuYW1lPmU8L2ZpbGVuYW1lPiIgaXMgZGVmaW5lZCBhbmQKKyAgICAgICAgICAgICI8ZmlsZW5hbWU+ZS5kYXRhPC9maWxlbmFtZT4iIGNvbnRhaW5zIGFuIGluc3RhbmNlIG9mCisgICAgICAgICAgICAiPGZpbGVuYW1lPmJiLmRhdGE8L2ZpbGVuYW1lPiIuCisgICAgICAgICAgICBXaXRoIHRoZSA8ZmlsZW5hbWU+Z2V0TmFtZShlKTwvZmlsZW5hbWU+IG1ldGhvZCwgb25lIGNhbiBnZXQKKyAgICAgICAgICAgIHRoZSBuYW1lIG9mIHRoZSB0cmlnZ2VyZWQgZXZlbnQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJlY2F1c2UgeW91IHByb2JhYmx5IGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gYSBzdWJzZXQgb2YgZXZlbnRzLAorICAgICAgICAgICAgeW91IHdvdWxkIGxpa2VseSB1c2UgdGhlIDxmaWxlbmFtZT5bZXZlbnRtYXNrXTwvZmlsZW5hbWU+IGZsYWcKKyAgICAgICAgICAgIGZvciB5b3VyIGV2ZW50IGhhbmRsZXIgdG8gYmUgc3VyZSB0aGF0IG9ubHkgY2VydGFpbiBldmVudHMKKyAgICAgICAgICAgIHRyaWdnZXIgdGhlIGhhbmRsZXIuCisgICAgICAgICAgICBHaXZlbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgc3VwcG9zZSB5b3Ugb25seSB3YW50ZWQgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuYnVpbGQuVGFza0ZhaWxlZDwvZmlsZW5hbWU+IGV2ZW50IHRvIHRyaWdnZXIgdGhhdAorICAgICAgICAgICAgZXZlbnQgaGFuZGxlci4KKyAgICAgICAgICAgIFVzZSB0aGUgZmxhZyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBhZGRoYW5kbGVyIG15Y2xhc3NfZXZlbnRoYW5kbGVyCisgICAgIG15Y2xhc3NfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuYnVpbGQuVGFza0ZhaWxlZCIKKyAgICAgcHl0aG9uIG15Y2xhc3NfZXZlbnRoYW5kbGVyKCkgeworICAgICAgICAgZnJvbSBiYi5ldmVudCBpbXBvcnQgZ2V0TmFtZQorICAgICAgICAgZnJvbSBiYiBpbXBvcnQgZGF0YQorICAgICAgICAgcHJpbnQoIlRoZSBuYW1lIG9mIHRoZSBFdmVudCBpcyAlcyIgJSBnZXROYW1lKGUpKQorICAgICAgICAgcHJpbnQoIlRoZSBmaWxlIHdlIHJ1biBmb3IgaXMgJXMiICUgZGF0YS5nZXRWYXIoJ0ZJTEUnLCBlLmRhdGEsIFRydWUpKQorICAgICB9CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIER1cmluZyBhIHN0YW5kYXJkIGJ1aWxkLCB0aGUgZm9sbG93aW5nIGNvbW1vbiBldmVudHMgbWlnaHQgb2NjdXI6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LkNvbmZpZ1BhcnNlZCgpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuUGFyc2VTdGFydGVkKCk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5QYXJzZVByb2dyZXNzKCk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5QYXJzZUNvbXBsZXRlZCgpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuQnVpbGRTdGFydGVkKCk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5idWlsZC5UYXNrU3RhcnRlZCgpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuYnVpbGQuVGFza0ludmFsaWQoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmJ1aWxkLlRhc2tGYWlsZWRTaWxlbnQoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmJ1aWxkLlRhc2tGYWlsZWQoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmJ1aWxkLlRhc2tTdWNjZWVkZWQoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkKCk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5jb29rZXIuQ29va2VyRXhpdCgpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIEhlcmUgaXMgYSBsaXN0IG9mIG90aGVyIGV2ZW50cyB0aGF0IG9jY3VyIGJhc2VkIG9uIHNwZWNpZmljIHJlcXVlc3RzCisgICAgICAgICAgICB0byB0aGUgc2VydmVyOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5UcmVlRGF0YVByZXBhcmF0aW9uU3RhcnRlZCgpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuVHJlZURhdGFQcmVwYXJhdGlvblByb2dyZXNzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuVHJlZURhdGFQcmVwYXJhdGlvbkNvbXBsZXRlZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LkRlcFRyZWVHZW5lcmF0ZWQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5Db3JlQmFzZUZpbGVzRm91bmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5Db25maWdGaWxlUGF0aEZvdW5kPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuRmlsZXNNYXRjaGluZ0ZvdW5kPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuQ29uZmlnRmlsZXNGb3VuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LlRhcmdldHNUcmVlR2VuZXJhdGVkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd2YXJpYW50cy1jbGFzcy1leHRlbnNpb24tbWVjaGFuaXNtJz4KKyAgICAgICAgPHRpdGxlPlZhcmlhbnRzIC0gQ2xhc3MgRXh0ZW5zaW9uIE1lY2hhbmlzbTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIHN1cHBvcnRzIHR3byBmZWF0dXJlcyB0aGF0IGZhY2lsaXRhdGUgY3JlYXRpbmcKKyAgICAgICAgICAgIGZyb20gYSBzaW5nbGUgcmVjaXBlIGZpbGUgbXVsdGlwbGUgaW5jYXJuYXRpb25zIG9mIHRoYXQKKyAgICAgICAgICAgIHJlY2lwZSBmaWxlIHdoZXJlIGFsbCBpbmNhcm5hdGlvbnMgYXJlIGJ1aWxkYWJsZS4KKyAgICAgICAgICAgIFRoZXNlIGZlYXR1cmVzIGFyZSBlbmFibGVkIHRocm91Z2ggdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJDTEFTU0VYVEVORCc+PGZpbGVuYW1lPkJCQ0xBU1NFWFRFTkQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCVkVSU0lPTlMnPjxmaWxlbmFtZT5CQlZFUlNJT05TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBUaGUgbWVjaGFuaXNtIGZvciB0aGlzIGNsYXNzIGV4dGVuc2lvbiBpcyBleHRyZW1lbHkKKyAgICAgICAgICAgICAgICBzcGVjaWZpYyB0byB0aGUgaW1wbGVtZW50YXRpb24uCisgICAgICAgICAgICAgICAgVXN1YWxseSwgdGhlIHJlY2lwZSdzCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBST1ZJREVTJz48ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4sIGFuZAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB3b3VsZCBuZWVkIHRvIGJlIG1vZGlmaWVkIGJ5IHRoZSBleHRlbnNpb24gY2xhc3MuCisgICAgICAgICAgICAgICAgRm9yIHNwZWNpZmljIGV4YW1wbGVzLCBzZWUgdGhlIE9FLUNvcmUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bmF0aXZlPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPm11bHRpbGliPC9maWxlbmFtZT4gY2xhc3Nlcy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+QkJDTEFTU0VYVEVORDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjbGFzc2VzIHVzZWQgdG8gImV4dGVuZCIgdGhlCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBmb3IgZWFjaCB2YXJpYW50LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCByZXN1bHRzIGluIGEgc2Vjb25kIGluY2FybmF0aW9uIG9mIHRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBiZWluZyBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2Vjb25kIGluY2FybmF0aW9uIHdpbGwgaGF2ZSB0aGUgIm5hdGl2ZSIgY2xhc3MgaW5oZXJpdGVkLgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+QkJWRVJTSU9OUzwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgYWxsb3dzIGEgc2luZ2xlIHJlY2lwZSB0byBidWlsZCBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBhCisgICAgICAgICAgICAgICAgICAgIHByb2plY3QgZnJvbSBhIHNpbmdsZSByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHNwZWNpZnkgY29uZGl0aW9uYWwgbWV0YWRhdGEKKyAgICAgICAgICAgICAgICAgICAgKHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItT1ZFUlJJREVTJz48ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG1lY2hhbmlzbSkgZm9yIGEgc2luZ2xlIHZlcnNpb24sIG9yIGFuIG9wdGlvbmFsbHkgbmFtZWQgcmFuZ2Ugb2YgdmVyc2lvbnMuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQlZFUlNJT05TID0gIjEuMCAyLjAgZ2l0IgorICAgICBTUkNfVVJJX2dpdCA9ICJnaXQ6Ly9zb21ldXJsL3NvbWVwYXRoLmdpdCIKKworICAgICBCQlZFUlNJT05TID0gIjEuMC5bMC02XToxLjAuMCsgXCAxLjAuWzctOV06MS4wLjcrIgorICAgICBTUkNfVVJJX2FwcGVuZF8xLjAuNysgPSAiZmlsZTovL3NvbWVfcGF0Y2hfd2hpY2hfdGhlX25ld192ZXJzaW9uc19uZWVkLnBhdGNoO3BhdGNoPTEiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHJhbmdlIGRlZmF1bHRzIHRvIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpbiBPcGVuRW1iZWRkZWQsIHRoZSByZWNpcGUgZmlsZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Zm9vXzEuMC4wKy5iYjwvZmlsZW5hbWU+IGNyZWF0ZXMgYSBkZWZhdWx0IG5hbWUgcmFuZ2UKKyAgICAgICAgICAgICAgICAgICAgb2YgPGZpbGVuYW1lPjEuMC4wKzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIHRoZSByYW5nZSBuYW1lIGlzIG5vdCBvbmx5IHBsYWNlZAorICAgICAgICAgICAgICAgICAgICBpbnRvIG92ZXJyaWRlcywgYnV0IGl0IGlzIGFsc28gbWFkZSBhdmFpbGFibGUgZm9yIHRoZSBtZXRhZGF0YSB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHZhcmlhYmxlIHRoYXQgZGVmaW5lcyB0aGUgYmFzZSByZWNpcGUgdmVyc2lvbnMgZm9yIHVzZSBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+IHNlYXJjaCBwYXRocworICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nZGVwZW5kZW5jaWVzJz4KKyAgICAgICAgPHRpdGxlPkRlcGVuZGVuY2llczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBhbGxvdyBmb3IgZWZmaWNpZW50IG9wZXJhdGlvbiBnaXZlbiBtdWx0aXBsZSBwcm9jZXNzZXMKKyAgICAgICAgICAgIGV4ZWN1dGluZyBpbiBwYXJhbGxlbCwgQml0QmFrZSBoYW5kbGVzIGRlcGVuZGVuY2llcyBhdAorICAgICAgICAgICAgdGhlIHRhc2sgbGV2ZWwuCisgICAgICAgICAgICBCaXRCYWtlIHN1cHBvcnRzIGEgcm9idXN0IG1ldGhvZCB0byBoYW5kbGUgdGhlc2UgZGVwZW5kZW5jaWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHNldmVyYWwgdHlwZXMgb2YgZGVwZW5kZW5jeSBtZWNoYW5pc21zLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RlcGVuZGVuY2llcy1pbnRlcm5hbC10by10aGUtYmItZmlsZSc+CisgICAgICAgICAgICA8dGl0bGU+RGVwZW5kZW5jaWVzIEludGVybmFsIHRvIHRoZSA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gRmlsZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGUgPGZpbGVuYW1lPmFkZHRhc2s8L2ZpbGVuYW1lPiBkaXJlY3RpdmUKKyAgICAgICAgICAgICAgICB0byBtYW5hZ2UgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIGludGVybmFsIHRvIGEgZ2l2ZW4gcmVjaXBlCisgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPmFkZHRhc2s8L2ZpbGVuYW1lPiBkaXJlY3RpdmUgdG8KKyAgICAgICAgICAgICAgICBpbmRpY2F0ZSB3aGVuIGEgdGFzayBpcyBkZXBlbmRlbnQgb24gb3RoZXIgdGFza3Mgb3Igd2hlbgorICAgICAgICAgICAgICAgIG90aGVyIHRhc2tzIGRlcGVuZCBvbiB0aGF0IHJlY2lwZS4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBhZGR0YXNrIHByaW50ZGF0ZSBhZnRlciBkb19mZXRjaCBiZWZvcmUgZG9fYnVpbGQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPnByaW50ZGF0ZTwvZmlsZW5hbWU+IHRhc2sgaXMKKyAgICAgICAgICAgICAgICBkZXBlbmRzIG9uIHRoZSBjb21wbGV0aW9uIG9mIHRoZSA8ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgQW5kLCB0aGUgPGZpbGVuYW1lPmRvX2J1aWxkPC9maWxlbmFtZT4gZGVwZW5kcyBvbiB0aGUgY29tcGxldGlvbgorICAgICAgICAgICAgICAgIG9mIHRoZSA8ZmlsZW5hbWU+cHJpbnRkYXRlPC9maWxlbmFtZT4gdGFzay4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdidWlsZC1kZXBlbmRlbmNpZXMnPgorICAgICAgICAgICAgPHRpdGxlPkJ1aWxkIERlcGVuZGVuY2llczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBtYW5hZ2UgYnVpbGQgdGltZSBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgVGhlICJkZXB0YXNrIiB2YXJmbGFnIGZvciB0YXNrcyBzaWduaWZpZXMgdGhlIHRhc2sgb2YgZWFjaAorICAgICAgICAgICAgICAgIGl0ZW0gbGlzdGVkIGluIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4gdGhhdCBtdXN0CisgICAgICAgICAgICAgICAgY29tcGxldGUgYmVmb3JlIHRoYXQgdGFzayBjYW4gYmUgZXhlY3V0ZWQuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZG9fY29uZmlndXJlW2RlcHRhc2tdID0gImRvX3BvcHVsYXRlX3N5c3Jvb3QiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zeXNyb290PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB0YXNrIG9mIGVhY2ggaXRlbSBpbiA8ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+IG11c3QgY29tcGxldGUgYmVmb3JlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+IGNhbiBleGVjdXRlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3J1bnRpbWUtZGVwZW5kZW5jaWVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5SdW50aW1lIERlcGVuZGVuY2llczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRVMnPjxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPiwgYW5kCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZXMgdG8gbWFuYWdlIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT4gdmFyaWFibGUgbGlzdHMgcnVudGltZQorICAgICAgICAgICAgICAgIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIEVhY2ggb2YgdGhvc2UgcGFja2FnZXMgY2FuIGhhdmUgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT4gcnVudGltZSBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgVGhlICJyZGVwdGFzayIgZmxhZyBmb3IgdGFza3MgaXMgdXNlZCB0byBzaWduaWZ5IHRoZSB0YXNrIG9mIGVhY2gKKyAgICAgICAgICAgICAgICBpdGVtIHJ1bnRpbWUgZGVwZW5kZW5jeSB3aGljaCBtdXN0IGhhdmUgY29tcGxldGVkIGJlZm9yZSB0aGF0CisgICAgICAgICAgICAgICAgdGFzayBjYW4gYmUgZXhlY3V0ZWQuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkb19wYWNrYWdlX3FhW3JkZXB0YXNrXSA9ICJkb19wYWNrYWdlZGF0YSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+ZG9fcGFja2FnZWRhdGE8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRhc2sgb2YgZWFjaCBpdGVtIGluIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IG11c3QgaGF2ZQorICAgICAgICAgICAgICAgIGNvbXBsZXRlZCBiZWZvcmUgPGZpbGVuYW1lPmRvX3BhY2thZ2VfcWE8L2ZpbGVuYW1lPiBjYW4gZXhlY3V0ZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdyZWN1cnNpdmUtZGVwZW5kZW5jaWVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5SZWN1cnNpdmUgRGVwZW5kZW5jaWVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIHRoZSAicmVjcmRlcHRhc2siIGZsYWcgdG8gbWFuYWdlCisgICAgICAgICAgICAgICAgcmVjdXJzaXZlIHRhc2sgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgIEJpdEJha2UgbG9va3MgdGhyb3VnaCB0aGUgYnVpbGQtdGltZSBhbmQgcnVudGltZQorICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcyBvZiB0aGUgY3VycmVudCByZWNpcGUsIGxvb2tzIHRocm91Z2gKKyAgICAgICAgICAgICAgICB0aGUgdGFzaydzIGludGVyLXRhc2sKKyAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMsIGFuZCB0aGVuIGFkZHMgZGVwZW5kZW5jaWVzIGZvciB0aGUKKyAgICAgICAgICAgICAgICBsaXN0ZWQgdGFzay4KKyAgICAgICAgICAgICAgICBPbmNlIEJpdEJha2UgaGFzIGFjY29tcGxpc2hlZCB0aGlzLCBpdCByZWN1cnNpdmVseSB3b3JrcyB0aHJvdWdoCisgICAgICAgICAgICAgICAgdGhlIGRlcGVuZGVuY2llcyBvZiB0aG9zZSB0YXNrcy4KKyAgICAgICAgICAgICAgICBJdGVyYXRpdmUgcGFzc2VzIGNvbnRpbnVlIHVudGlsIGFsbCBkZXBlbmRlbmNpZXMgYXJlIGRpc2NvdmVyZWQKKyAgICAgICAgICAgICAgICBhbmQgYWRkZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBtaWdodCB3YW50IHRvIG5vdCBvbmx5IGhhdmUgQml0QmFrZSBsb29rIGZvcgorICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcyBvZiB0aG9zZSB0YXNrcywgYnV0IGFsc28gaGF2ZSBCaXRCYWtlIGxvb2sKKyAgICAgICAgICAgICAgICBmb3IgYnVpbGQtdGltZSBhbmQgcnVudGltZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGRlcGVuZGVudAorICAgICAgICAgICAgICAgIHRhc2tzIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgSWYgdGhhdCBpcyB0aGUgY2FzZSwgeW91IG5lZWQgdG8gcmVmZXJlbmNlIHRoZSB0YXNrIG5hbWUKKyAgICAgICAgICAgICAgICBpdHNlbGYgaW4gdGhlIHRhc2sgbGlzdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX2FbcmVjcmRlcHRhc2tdID0gImRvX2EgZG9fYiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0naW50ZXItdGFzay1kZXBlbmRlbmNpZXMnPgorICAgICAgICAgICAgPHRpdGxlPkludGVyLVRhc2sgRGVwZW5kZW5jaWVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIHRoZSAiZGVwZW5kcyIgZmxhZyBpbiBhIG1vcmUgZ2VuZXJpYyBmb3JtCisgICAgICAgICAgICAgICAgdG8gbWFuYWdlIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgIFRoaXMgbW9yZSBnZW5lcmljIGZvcm0gYWxsb3dzIGZvciBpbnRlci1kZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgY2hlY2tzIGZvciBzcGVjaWZpYyB0YXNrcyByYXRoZXIgdGhhbiBjaGVja3MgZm9yCisgICAgICAgICAgICAgICAgdGhlIGRhdGEgaW4gPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkb19wYXRjaFtkZXBlbmRzXSA9ICJxdWlsdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPmRvX3BvcHVsYXRlX3N5c3Jvb3Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRhc2sgb2YgdGhlIHRhcmdldCA8ZmlsZW5hbWU+cXVpbHQtbmF0aXZlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBtdXN0IGhhdmUgY29tcGxldGVkIGJlZm9yZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcGF0Y2g8L2ZpbGVuYW1lPiB0YXNrIGNhbiBleGVjdXRlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgInJkZXBlbmRzIiBmbGFnIHdvcmtzIGluIGEgc2ltaWxhciB3YXkgYnV0IHRha2VzIHRhcmdldHMKKyAgICAgICAgICAgICAgICBpbiB0aGUgcnVudGltZSBuYW1lc3BhY2UgaW5zdGVhZCBvZiB0aGUgYnVpbGQtdGltZSBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgbmFtZXNwYWNlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2FjY2Vzc2luZy1kYXRhc3RvcmUtdmFyaWFibGVzLXVzaW5nLXB5dGhvbic+CisgICAgICAgIDx0aXRsZT5BY2Nlc3NpbmcgRGF0YXN0b3JlIFZhcmlhYmxlcyBVc2luZyBQeXRob248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgaXMgb2Z0ZW4gbmVjZXNzYXJ5IHRvIGFjY2VzcyB2YXJpYWJsZXMgaW4gdGhlCisgICAgICAgICAgICBCaXRCYWtlIGRhdGFzdG9yZSB1c2luZyBQeXRob24gZnVuY3Rpb25zLgorICAgICAgICAgICAgVGhlIEJpdGJha2UgZGF0YXN0b3JlIGhhcyBhbiBBUEkgdGhhdCBhbGxvd3MgeW91IHRoaXMKKyAgICAgICAgICAgIGFjY2Vzcy4KKyAgICAgICAgICAgIEhlcmUgaXMgYSBsaXN0IG9mIGF2YWlsYWJsZSBvcGVyYXRpb25zOgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8aW5mb3JtYWx0YWJsZSBmcmFtZT0nbm9uZSc+CisgICAgICAgICAgICAgICAgPHRncm91cCBjb2xzPScyJyBhbGlnbj0nbGVmdCcgY29sc2VwPScxJyByb3dzZXA9JzEnPgorICAgICAgICAgICAgICAgICAgICA8Y29sc3BlYyBjb2xuYW1lPSdjMScgY29sd2lkdGg9JzEqJy8+CisgICAgICAgICAgICAgICAgICAgIDxjb2xzcGVjIGNvbG5hbWU9J2MyJyBjb2x3aWR0aD0nMSonLz4KKyAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxlbXBoYXNpcz5PcGVyYXRpb248L2VtcGhhc2lzPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZW1waGFzaXM+RGVzY3JpcHRpb248L2VtcGhhc2lzPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KKyAgICAgICAgICAgICAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmdldFZhcigiWCIsIGV4cGFuZD1GYWxzZSk8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB2YXJpYWJsZSAiWCIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzaW5nICJleHBhbmQ9VHJ1ZSIgZXhwYW5kcyB0aGUgdmFsdWUuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLnNldFZhcigiWCIsICJ2YWx1ZSIpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+U2V0cyB0aGUgdmFyaWFibGUgIlgiIHRvICJ2YWx1ZSIuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmFwcGVuZFZhcigiWCIsICJ2YWx1ZSIpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+QWRkcyAidmFsdWUiIHRvIHRoZSBlbmQgb2YgdGhlIHZhcmlhYmxlICJYIi48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQucHJlcGVuZFZhcigiWCIsICJ2YWx1ZSIpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+QWRkcyAidmFsdWUiIHRvIHRoZSBzdGFydCBvZiB0aGUgdmFyaWFibGUgIlgiLjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5kZWxWYXIoIlgiKTwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPkRlbGV0ZXMgdGhlIHZhcmlhYmxlICJYIiBmcm9tIHRoZSBkYXRhc3RvcmUuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLnJlbmFtZVZhcigiWCIsICJZIik8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5SZW5hbWVzIHRoZSB2YXJpYWJsZSAiWCIgdG8gIlkiLjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5nZXRWYXJGbGFnKCJYIiwgZmxhZywgZXhwYW5kPUZhbHNlKTwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPkdldHMgdGhlbiBuYW1lZCBmbGFnIGZyb20gdGhlIHZhcmlhYmxlICJYIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcgImV4cGFuZD1UcnVlIiBleHBhbmRzIHRoZSBuYW1lZCBmbGFnLjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5zZXRWYXJGbGFnKCJYIiwgZmxhZywgInZhbHVlIik8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5TZXRzIHRoZSBuYW1lZCBmbGFnIGZvciB2YXJpYWJsZSAiWCIgdG8gInZhbHVlIi48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQuYXBwZW5kVmFyRmxhZygiWCIsIGZsYWcsICJ2YWx1ZSIpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+QXBwZW5kcyAidmFsdWUiIHRvIHRoZSBuYW1lZCBmbGFnIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlICJYIi48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQucHJlcGVuZFZhckZsYWcoIlgiLCBmbGFnLCAidmFsdWUiKTwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPlByZXBlbmRzICJ2YWx1ZSIgdG8gdGhlIG5hbWVkIGZsYWcgb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdmFyaWFibGUgIlgiLjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5kZWxWYXJGbGFnKCJYIiwgZmxhZyk8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5EZWxldGVzIHRoZSBuYW1lZCBmbGFnIG9uIHRoZSB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWCIgZnJvbSB0aGUgZGF0YXN0b3JlLjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5zZXRWYXJGbGFncygiWCIsIGZsYWdzZGljdCk8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5TZXRzIHRoZSBmbGFncyBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5mbGFnc2RpY3QoKTwvZmlsZW5hbWU+IHBhcmFtZXRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNldFZhckZsYWdzPC9maWxlbmFtZT4gZG9lcyBub3QgY2xlYXIgcHJldmlvdXMgZmxhZ3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaW5rIG9mIHRoaXMgb3BlcmF0aW9uIGFzIDxmaWxlbmFtZT5hZGRWYXJGbGFnczwvZmlsZW5hbWU+LjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5nZXRWYXJGbGFncygiWCIpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+UmV0dXJucyBhIDxmaWxlbmFtZT5mbGFnc2RpY3Q8L2ZpbGVuYW1lPiBvZiB0aGUgZmxhZ3MgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB2YXJpYWJsZSAiWCIuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmRlbFZhckZsYWdzKCJYIik8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5EZWxldGVzIGFsbCB0aGUgZmxhZ3MgZm9yIHRoZSB2YXJpYWJsZSAiWCIuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgICAgIDwvdGdyb3VwPgorICAgICAgICAgICAgPC9pbmZvcm1hbHRhYmxlPgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3Rhc2stY2hlY2tzdW1zLWFuZC1zZXRzY2VuZSc+CisgICAgICAgIDx0aXRsZT5UYXNrIENoZWNrc3VtcyBhbmQgU2V0c2NlbmU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSB1c2VzIGNoZWNrc3VtcyAob3Igc2lnbmF0dXJlcykgYWxvbmcgd2l0aCB0aGUgc2V0c2NlbmUKKyAgICAgICAgICAgIHRvIGRldGVybWluZSBpZiBhIHRhc2sgbmVlZHMgdG8gYmUgcnVuLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgcHJvY2Vzcy4KKyAgICAgICAgICAgIFRvIGhlbHAgdW5kZXJzdGFuZCBob3cgQml0QmFrZSBkb2VzIHRoaXMsIHRoZSBzZWN0aW9uIGFzc3VtZXMgYW4KKyAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBtZXRhZGF0YS1iYXNlZCBleGFtcGxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGxpc3QgaXMgYSBwbGFjZSBob2xkZXIgb2YgY29udGVudCBleGlzdGVkIGZyb20gcHJldmlvdXMgd29yaworICAgICAgICAgICAgb24gdGhlIG1hbnVhbC4KKyAgICAgICAgICAgIFNvbWUgb3IgYWxsIG9mIGl0IHByb2JhYmx5IG5lZWRzIGludGVncmF0ZWQgaW50byB0aGUgc3Vic2VjdGlvbnMKKyAgICAgICAgICAgIHRoYXQgbWFrZSB1cCB0aGlzIHNlY3Rpb24uCisgICAgICAgICAgICBGb3Igbm93LCBJIGhhdmUganVzdCBwcm92aWRlZCBhIHNob3J0IGdsb3NzYXJ5LWxpa2UgZGVzY3JpcHRpb24KKyAgICAgICAgICAgIGZvciBlYWNoIHZhcmlhYmxlLgorICAgICAgICAgICAgVWx0aW1hdGVseSwgdGhpcyBsaXN0IGdvZXMgYXdheS4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5TVEFNUDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBUaGUgYmFzZSBwYXRoIHRvIGNyZWF0ZSBzdGFtcCBmaWxlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPlNUQU1QQ0xFQU48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBBZ2FpbiwgdGhlIGJhc2UgcGF0aCB0byBjcmVhdGUgc3RhbXAgZmlsZXMgYnV0IGNhbiB1c2Ugd2lsZGNhcmRzCisgICAgICAgICAgICAgICAgICAgIGZvciBtYXRjaGluZyBhIHJhbmdlIG9mIGZpbGVzIGZvciBjbGVhbiBvcGVyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX1NUQU1QX1dISVRFTElTVDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHN0YW1wIGZpbGVzIHRoYXQgYXJlIGxvb2tlZCBhdCB3aGVuIHRoZSBzdGFtcCBwb2xpY3kKKyAgICAgICAgICAgICAgICAgICAgaXMgIndoaXRlbGlzdCIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+QkJfU1RBTVBfUE9MSUNZPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgbW9kZSBmb3IgY29tcGFyaW5nIHRpbWVzdGFtcHMgb2Ygc3RhbXAgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+QkJfSEFTSENIRUNLX0ZVTkNUSU9OPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBjYWxsIGR1cmluZworICAgICAgICAgICAgICAgICAgICB0aGUgInNldHNjZW5lIiBwYXJ0IG9mIHRoZSB0YXNrJ3MgZXhlY3V0aW9uIGluIG9yZGVyCisgICAgICAgICAgICAgICAgICAgIHRvIHZhbGlkYXRlIHRoZSBsaXN0IG9mIHRhc2sgaGFzaGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX1NFVFNDRU5FX1ZFUklGWV9GVU5DVElPTjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGZ1bmN0aW9uIHRvIGNhbGwgdGhhdCB2ZXJpZmllcyB0aGUgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgICBwbGFubmVkIHRhc2sgZXhlY3V0aW9uIGJlZm9yZSB0aGUgbWFpbiB0YXNrIGV4ZWN1dGlvbgorICAgICAgICAgICAgICAgICAgICBoYXBwZW5zLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX1NFVFNDRU5FX0RFUFZBTElEPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgZnVuY3Rpb24gQml0QmFrZSBjYWxscyB0aGF0IGRldGVybWluZXMKKyAgICAgICAgICAgICAgICAgICAgd2hldGhlciBCaXRCYWtlIHJlcXVpcmVzIGEgc2V0c2NlbmUgZGVwZW5kZW5jeSB0bworICAgICAgICAgICAgICAgICAgICBiZSBtZXQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+QkJfVEFTS0hBU0g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBXaXRoaW4gYW4gZXhlY3V0aW5nIHRhc2ssIHRoaXMgdmFyaWFibGUgaG9sZHMgdGhlIGhhc2gKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHRhc2sgYXMgcmV0dXJuZWQgYnkgdGhlIGN1cnJlbnRseSBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSBnZW5lcmF0b3IuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1yZWYtdmFyaWFibGVzLnhtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLXJlZi12YXJpYWJsZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZTFiOTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1yZWYtdmFyaWFibGVzLnhtbApAQCAtMCwwICsxLDIyNjIgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzwhLS0gRHVtbXkgY2hhcHRlciAtLT4KKzxjaGFwdGVyIGlkPSdyZWYtdmFyaWFibGVzLWdsb3MnPgorCis8dGl0bGU+VmFyaWFibGVzIEdsb3NzYXJ5PC90aXRsZT4KKworPHBhcmE+CisgICAgVGhpcyBjaGFwdGVyIGxpc3RzIGNvbW1vbiB2YXJpYWJsZXMgdXNlZCBieSBCaXRCYWtlIGFuZCBnaXZlcyBhbiBvdmVydmlldworICAgIG9mIHRoZWlyIGZ1bmN0aW9uIGFuZCBjb250ZW50cy4KKzwvcGFyYT4KKworPG5vdGU+CisgICAgRm9sbG93aW5nIGFyZSBzb21lIHBvaW50cyByZWdhcmRpbmcgdGhlIHZhcmlhYmxlcyBsaXN0ZWQgaW4gdGhpcyBnbG9zc2FyeToKKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIHZhcmlhYmxlcyBsaXN0ZWQgaW4gdGhpcyBnbG9zc2FyeQorICAgICAgICAgICAgYXJlIHNwZWNpZmljIHRvIEJpdEJha2UuCisgICAgICAgICAgICBDb25zZXF1ZW50bHksIHRoZSBkZXNjcmlwdGlvbnMgYXJlIGxpbWl0ZWQgdG8gdGhhdCBjb250ZXh0LgorICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BbHNvLCB2YXJpYWJsZXMgZXhpc3QgaW4gb3RoZXIgc3lzdGVtcyB0aGF0IHVzZSBCaXRCYWtlCisgICAgICAgICAgICAoZS5nLiBUaGUgWW9jdG8gUHJvamVjdCBhbmQgT3BlbkVtYmVkZGVkKSB0aGF0IGhhdmUgbmFtZXMgaWRlbnRpY2FsCisgICAgICAgICAgICB0byB0aG9zZSBmb3VuZCBpbiB0aGlzIGdsb3NzYXJ5LgorICAgICAgICAgICAgRm9yIHN1Y2ggY2FzZXMsIHRoZSB2YXJpYWJsZXMgaW4gdGhvc2Ugc3lzdGVtcyBleHRlbmQgdGhlCisgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IG9mIHRoZSB2YXJpYWJsZSBhcyBpdCBpcyBkZXNjcmliZWQgaGVyZSBpbgorICAgICAgICAgICAgdGhpcyBnbG9zc2FyeS4KKyAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RmluYWxseSwgdGhlcmUgYXJlIHZhcmlhYmxlcyBtZW50aW9uZWQgaW4gdGhpcworICAgICAgICAgICAgZ2xvc3NhcnkgdGhhdCBkbyBub3QgYXBwZWFyIGluIHRoZSBCaXRCYWtlIGdsb3NzYXJ5LgorICAgICAgICAgICAgVGhlc2Ugb3RoZXIgdmFyaWFibGVzIGFyZSB2YXJpYWJsZXMgdXNlZCBpbiBzeXN0ZW1zIHRoYXQgdXNlCisgICAgICAgICAgICBCaXRCYWtlLgorICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+Cis8L25vdGU+CisKKzxnbG9zc2FyeSBpZD0ncmVmLXZhcmlhYmxlcy1nbG9zc2FyeSc+CisKKyAgICA8cGFyYT4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQVNTVU1FX1BST1ZJREVEJz5BPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CJz5CPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DQUNIRSc+QzwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVGQVVMVF9QUkVGRVJFTkNFJz5EPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWENMVURFX0ZST01fV09STEQnPkU8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZBS0VST09UJz5GPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1HSVRESVInPkc8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUhHRElSJz5IPC9saW5rPgorPCEtLSAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSUNFQ0NfRElTQUJMRUQnPkk8L2xpbms+IC0tPgorPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS1qJz5KPC9saW5rPiAtLT4KKzwhLS0gICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtBUkNIJz5LPC9saW5rPiAtLT4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTEFZRVJERVBFTkRTJz5MPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NSVJST1JTJz5NPC9saW5rPgorPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS1uJz5OPC9saW5rPiAtLT4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItT1ZFUlJJREVTJz5PPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFUyc+UDwvbGluaz4KKzwhLS0gICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVFNQUtFX1BST0ZJTEVTJz5RPC9saW5rPiAtLT4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPlI8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNFQ1RJT04nPlM8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVQnPlQ8L2xpbms+Cis8IS0tICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VQk9PVF9DT05GSUcnPlU8L2xpbms+IC0tPgorPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS12Jz5WPC9saW5rPiAtLT4KKzwhLS0gICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVdBUk5fUUEnPlc8L2xpbms+IC0tPgorPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS14Jz5YPC9saW5rPiAtLT4KKzwhLS0gICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItZ2xvc3NhcnkteSc+WTwvbGluaz4gLS0+Cis8IS0tICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWdsb3NzYXJ5LXonPlo8L2xpbms+LS0+CisgICAgPC9wYXJhPgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktYSc+PHRpdGxlPkE8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQVNTVU1FX1BST1ZJREVEJz48Z2xvc3N0ZXJtPkFTU1VNRV9QUk9WSURFRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyByZWNpcGUgbmFtZXMKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcykgQml0QmFrZSBkb2VzIG5vdCBhdHRlbXB0IHRvIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICBJbnN0ZWFkLCBCaXRCYWtlIGFzc3VtZXMgdGhlc2UgcmVjaXBlcyBoYXZlIGFscmVhZHkgYmVlbgorICAgICAgICAgICAgICAgICAgICBidWlsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gT3BlbkVtYmVkZGVkIENvcmUsIDxmaWxlbmFtZT5BU1NVTUVfUFJPVklERUQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBtb3N0bHkgc3BlY2lmaWVzIG5hdGl2ZSB0b29scyB0aGF0IHNob3VsZCBub3QgYmUgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgaXMgPGZpbGVuYW1lPmdpdC1uYXRpdmU8L2ZpbGVuYW1lPiwgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgd2hlbiBzcGVjaWZpZWQgYWxsb3dzIGZvciB0aGUgR2l0IGJpbmFyeSBmcm9tIHRoZSBob3N0IHRvCisgICAgICAgICAgICAgICAgICAgIGJlIHVzZWQgcmF0aGVyIHRoYW4gYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdC1uYXRpdmU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1iJz48dGl0bGU+QjwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CJz48Z2xvc3N0ZXJtPkI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBCaXRCYWtlIGV4ZWN1dGVzIGZ1bmN0aW9ucworICAgICAgICAgICAgICAgICAgICBkdXJpbmcgYSByZWNpcGUncyBidWlsZCBwcm9jZXNzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0FMTE9XRURfTkVUV09SS1MnPjxnbG9zc3Rlcm0+QkJfQUxMT1dFRF9ORVRXT1JLUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBzcGFjZS1kZWxpbWl0ZWQgbGlzdCBvZiBob3N0cyB0aGF0IHRoZSBmZXRjaGVyCisgICAgICAgICAgICAgICAgICAgIGlzIGFsbG93ZWQgdG8gdXNlIHRvIG9idGFpbiB0aGUgcmVxdWlyZWQgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgY29uc2lkZXJhdGlvbnMgc3Vycm91bmRpbmcgdGhpcyB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGhvc3QgbGlzdCBpcyBvbmx5IHVzZWQgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfTk9fTkVUV09SSyc+PGZpbGVuYW1lPkJCX05PX05FVFdPUks8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBlaXRoZXIgbm90IHNldCBvciBzZXQgdG8gIjAiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbWl0ZWQgc3VwcG9ydCBmb3Igd2lsZGNhcmQgbWF0Y2hpbmcgYWdhaW5zdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbm5pbmcgb2YgaG9zdCBuYW1lcyBleGlzdHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2V0dGluZyBtYXRjaGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdC5nbnUub3JnPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZ0cC5nbnUub3JnPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb28uZ2l0LmdudS5vcmc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0FMTE9XRURfTkVUV09SS1MgPSAiKi5nbnUub3JnIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaXJyb3JzIG5vdCBpbiB0aGUgaG9zdCBsaXN0IGFyZSBza2lwcGVkIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlZCBpbiBkZWJ1Zy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRlbXB0cyB0byBhY2Nlc3MgbmV0d29ya3Mgbm90IGluIHRoZSBob3N0IGxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXVzZSBhIGZhaWx1cmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICBVc2luZyA8ZmlsZW5hbWU+QkJfQUxMT1dFRF9ORVRXT1JLUzwvZmlsZW5hbWU+IGluCisgICAgICAgICAgICAgICAgICAgIGNvbmp1bmN0aW9uIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSRU1JUlJPUlMnPjxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHZlcnkgdXNlZnVsLgorICAgICAgICAgICAgICAgICAgICBBZGRpbmcgdGhlIGhvc3QgeW91IHdhbnQgdG8gdXNlIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT4gcmVzdWx0cyBpbiB0aGUgc291cmNlIGNvZGUKKyAgICAgICAgICAgICAgICAgICAgYmVpbmcgZmV0Y2hlZCBmcm9tIGFuIGFsbG93ZWQgbG9jYXRpb24gYW5kIGF2b2lkcyByYWlzaW5nCisgICAgICAgICAgICAgICAgICAgIGFuIGVycm9yIHdoZW4gYSBob3N0IHRoYXQgaXMgbm90IGFsbG93ZWQgaXMgaW4gYQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LgorICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGJlY2F1c2UgdGhlIGZldGNoZXIgZG9lcyBub3QgYXR0ZW1wdCB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIGhvc3QgbGlzdGVkIGluIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gYWZ0ZXIgYQorICAgICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsIGZldGNoIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT4gb2NjdXJzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0NPTlNPTEVMT0cnPjxnbG9zc3Rlcm0+QkJfQ09OU09MRUxPRzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhdGggdG8gYSBsb2cgZmlsZSBpbnRvIHdoaWNoIEJpdEJha2UncyB1c2VyCisgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSB3cml0ZXMgb3V0cHV0IGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfQ1VSUkVOVFRBU0snPjxnbG9zc3Rlcm0+QkJfQ1VSUkVOVFRBU0s8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIHRhc2suCisgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIGRvZXMgbm90IGluY2x1ZGUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb188L2ZpbGVuYW1lPiBwcmVmaXguCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfREFOR0xJTkdBUFBFTkRTX1dBUk5PTkxZJz48Z2xvc3N0ZXJtPkJCX0RBTkdMSU5HQVBQRU5EU19XQVJOT05MWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIGhvdyBCaXRCYWtlIGhhbmRsZXMgc2l0dWF0aW9ucyB3aGVyZSBhbiBhcHBlbmQKKyAgICAgICAgICAgICAgICAgICAgZmlsZSAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KSBoYXMgbm8KKyAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyByZWNpcGUgZmlsZSAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb25kaXRpb24gb2Z0ZW4gb2NjdXJzIHdoZW4gbGF5ZXJzIGdldCBvdXQgb2Ygc3luYworICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+b2UtY29yZTwvZmlsZW5hbWU+IGJ1bXBzIGEKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIHZlcnNpb24gYW5kIHRoZSBvbGQgcmVjaXBlIG5vIGxvbmdlciBleGlzdHMgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICBvdGhlciBsYXllciBoYXMgbm90IGJlZW4gdXBkYXRlZCB0byB0aGUgbmV3IHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHJlY2lwZSB5ZXQpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBmYXRhbCBiZWhhdmlvciBpcyBzYWZlc3QgYmVjYXVzZSBpdCBpcworICAgICAgICAgICAgICAgICAgICB0aGUgc2FuZSByZWFjdGlvbiBnaXZlbiBzb21ldGhpbmcgaXMgb3V0IG9mIHN5bmMuCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGltcG9ydGFudCB0byByZWFsaXplIHdoZW4geW91ciBjaGFuZ2VzIGFyZSBubyBsb25nZXIKKyAgICAgICAgICAgICAgICAgICAgYmVpbmcgYXBwbGllZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9ERUZBVUxUX1RBU0snPjxnbG9zc3Rlcm0+QkJfREVGQVVMVF9UQVNLPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHRhc2sgdG8gdXNlIHdoZW4gbm9uZSBpcyBzcGVjaWZpZWQgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgPGZpbGVuYW1lPi1jPC9maWxlbmFtZT4gY29tbWFuZCBsaW5lIG9wdGlvbikuCisgICAgICAgICAgICAgICAgICAgIFRoZSB0YXNrIG5hbWUgc3BlY2lmaWVkIHNob3VsZCBub3QgaW5jbHVkZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvXzwvZmlsZW5hbWU+IHByZWZpeC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9ESVNLTU9OX0RJUlMnPjxnbG9zc3Rlcm0+QkJfRElTS01PTl9ESVJTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIE1vbml0b3JzIGRpc2sgc3BhY2UgYW5kIGF2YWlsYWJsZSBpbm9kZXMgZHVyaW5nIHRoZSBidWlsZAorICAgICAgICAgICAgICAgICAgICBhbmQgYWxsb3dzIHlvdSB0byBjb250cm9sIHRoZSBidWlsZCBiYXNlZCBvbiB0aGVzZQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEaXNrIHNwYWNlIG1vbml0b3JpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzZXR0aW5nIHRoaXMgdmFyaWFibGUsIHVzZSB0aGUgZm9sbG93aW5nIGZvcm06CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfRElTS01PTl9ESVJTID0gIiZsdDthY3Rpb24mZ3Q7LCZsdDtkaXImZ3Q7LCZsdDt0aHJlc2hvbGQmZ3Q7IFsuLi5dIgorCisgICAgIHdoZXJlOgorCisgICAgICAgICZsdDthY3Rpb24mZ3Q7IGlzOgorICAgICAgICAgICBBQk9SVDogICAgIEltbWVkaWF0ZWx5IGFib3J0IHRoZSBidWlsZCB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgYSB0aHJlc2hvbGQgaXMgYnJva2VuLgorICAgICAgICAgICBTVE9QVEFTS1M6IFN0b3AgdGhlIGJ1aWxkIGFmdGVyIHRoZSBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgICBleGVjdXRpbmcgdGFza3MgaGF2ZSBmaW5pc2hlZCB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgYSB0aHJlc2hvbGQgaXMgYnJva2VuLgorICAgICAgICAgICBXQVJOOiAgICAgIElzc3VlIGEgd2FybmluZyBidXQgY29udGludWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgd2hlbiBhIHRocmVzaG9sZCBpcyBicm9rZW4uCisgICAgICAgICAgICAgICAgICAgICAgU3Vic2VxdWVudCB3YXJuaW5ncyBhcmUgaXNzdWVkIGFzCisgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfRElTS01PTl9XQVJOSU5URVJWQUwnPkJCX0RJU0tNT05fV0FSTklOVEVSVkFMPC9saW5rPiB2YXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICB3aGljaCBtdXN0IGJlIGRlZmluZWQuCisKKyAgICAgICAgJmx0O2RpciZndDsgaXM6CisgICAgICAgICAgIEFueSBkaXJlY3RvcnkgeW91IGNob29zZS4gWW91IGNhbiBzcGVjaWZ5IG9uZSBvcgorICAgICAgICAgICBtb3JlIGRpcmVjdG9yaWVzIHRvIG1vbml0b3IgYnkgc2VwYXJhdGluZyB0aGUKKyAgICAgICAgICAgZ3JvdXBpbmdzIHdpdGggYSBzcGFjZS4gIElmIHR3byBkaXJlY3RvcmllcyBhcmUKKyAgICAgICAgICAgb24gdGhlIHNhbWUgZGV2aWNlLCBvbmx5IHRoZSBmaXJzdCBkaXJlY3RvcnkKKyAgICAgICAgICAgaXMgbW9uaXRvcmVkLgorCisgICAgICAgICZsdDt0aHJlc2hvbGQmZ3Q7IGlzOgorICAgICAgICAgICBFaXRoZXIgdGhlIG1pbmltdW0gYXZhaWxhYmxlIGRpc2sgc3BhY2UsCisgICAgICAgICAgIHRoZSBtaW5pbXVtIG51bWJlciBvZiBmcmVlIGlub2Rlcywgb3IKKyAgICAgICAgICAgYm90aC4gIFlvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lLiAgVG8KKyAgICAgICAgICAgb21pdCBvbmUgb3IgdGhlIG90aGVyLCBzaW1wbHkgb21pdCB0aGUgdmFsdWUuCisgICAgICAgICAgIFNwZWNpZnkgdGhlIHRocmVzaG9sZCB1c2luZyBHLCBNLCBLIGZvciBHYnl0ZXMsCisgICAgICAgICAgIE1ieXRlcywgYW5kIEtieXRlcywgcmVzcGVjdGl2ZWx5LiBJZiB5b3UgZG8KKyAgICAgICAgICAgbm90IHNwZWNpZnkgRywgTSwgb3IgSywgS2J5dGVzIGlzIGFzc3VtZWQgYnkKKyAgICAgICAgICAgZGVmYXVsdC4gIERvIG5vdCB1c2UgR0IsIE1CLCBvciBLQi4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0RJU0tNT05fRElSUyA9ICJBQk9SVCwke1RNUERJUn0sMUcsMTAwSyBXQVJOLCR7U1NUQVRFX0RJUn0sMUcsMTAwSyIKKyAgICAgQkJfRElTS01PTl9ESVJTID0gIlNUT1BUQVNLUywke1RNUERJUn0sMUciCisgICAgIEJCX0RJU0tNT05fRElSUyA9ICJBQk9SVCwke1RNUERJUn0sLDEwMEsiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IGV4YW1wbGUgd29ya3Mgb25seSBpZiB5b3UgYWxzbyBzZXQKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTCc+PGZpbGVuYW1lPkJCX0RJU0tNT05fV0FSTklOVEVSVkFMPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgY2F1c2VzIHRoZSBidWlsZCBzeXN0ZW0gdG8gaW1tZWRpYXRlbHkKKyAgICAgICAgICAgICAgICAgICAgYWJvcnQgd2hlbiBlaXRoZXIgdGhlIGRpc2sgc3BhY2UgaW4gPGZpbGVuYW1lPiR7VE1QRElSfTwvZmlsZW5hbWU+IGRyb3BzCisgICAgICAgICAgICAgICAgICAgIGJlbG93IDEgR2J5dGUgb3IgdGhlIGF2YWlsYWJsZSBmcmVlIGlub2RlcyBkcm9wcyBiZWxvdworICAgICAgICAgICAgICAgICAgICAxMDAgS2J5dGVzLgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHR3byBkaXJlY3RvcmllcyBhcmUgcHJvdmlkZWQgd2l0aCB0aGUgdmFyaWFibGUsIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gYWxzbyBpc3N1ZXMgYQorICAgICAgICAgICAgICAgICAgICB3YXJuaW5nIHdoZW4gdGhlIGRpc2sgc3BhY2UgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1NTVEFURV9ESVJ9PC9maWxlbmFtZT4gZGlyZWN0b3J5IGRyb3BzCisgICAgICAgICAgICAgICAgICAgIGJlbG93IDEgR2J5dGUgb3IgdGhlIG51bWJlciBvZiBmcmVlIGlub2RlcyBkcm9wcworICAgICAgICAgICAgICAgICAgICBiZWxvdyAxMDAgS2J5dGVzLgorICAgICAgICAgICAgICAgICAgICBTdWJzZXF1ZW50IHdhcm5pbmdzIGFyZSBpc3N1ZWQgZHVyaW5nIGludGVydmFscyBhcworICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGJ5IHRoZSA8ZmlsZW5hbWU+QkJfRElTS01PTl9XQVJOSU5URVJWQUw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNlY29uZCBleGFtcGxlIHN0b3BzIHRoZSBidWlsZCBhZnRlciBhbGwgY3VycmVudGx5CisgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGluZyB0YXNrcyBjb21wbGV0ZSB3aGVuIHRoZSBtaW5pbXVtIGRpc2sgc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT4ke1RNUERJUn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgZHJvcHMgYmVsb3cgMSBHYnl0ZS4KKyAgICAgICAgICAgICAgICAgICAgTm8gZGlzayBtb25pdG9yaW5nIG9jY3VycyBmb3IgdGhlIGZyZWUgaW5vZGVzIGluIHRoaXMgY2FzZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpbmFsIGV4YW1wbGUgaW1tZWRpYXRlbHkgYWJvcnRzIHRoZSBidWlsZCB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgZnJlZSBpbm9kZXMgaW4gdGhlIDxmaWxlbmFtZT4ke1RNUERJUn08L2ZpbGVuYW1lPiBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgZHJvcHMgYmVsb3cgMTAwIEtieXRlcy4KKyAgICAgICAgICAgICAgICAgICAgTm8gZGlzayBzcGFjZSBtb25pdG9yaW5nIGZvciB0aGUgZGlyZWN0b3J5IGl0c2VsZiBvY2N1cnMKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhpcyBjYXNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0RJU0tNT05fV0FSTklOVEVSVkFMJz48Z2xvc3N0ZXJtPkJCX0RJU0tNT05fV0FSTklOVEVSVkFMPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgdGhlIGRpc2sgc3BhY2UgYW5kIGZyZWUgaW5vZGUgd2FybmluZyBpbnRlcnZhbHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJfRElTS01PTl9XQVJOSU5URVJWQUw8L2ZpbGVuYW1lPiB2YXJpYWJsZSwgeW91IG11c3QKKyAgICAgICAgICAgICAgICAgICAgYWxzbyB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9ESVNLTU9OX0RJUlMnPjxmaWxlbmFtZT5CQl9ESVNLTU9OX0RJUlM8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgYW5kIGRlZmluZSBpdHMgYWN0aW9uIGFzICJXQVJOIi4KKyAgICAgICAgICAgICAgICAgICAgRHVyaW5nIHRoZSBidWlsZCwgc3Vic2VxdWVudCB3YXJuaW5ncyBhcmUgaXNzdWVkIGVhY2ggdGltZQorICAgICAgICAgICAgICAgICAgICBkaXNrIHNwYWNlIG9yIG51bWJlciBvZiBmcmVlIGlub2RlcyBmdXJ0aGVyIHJlZHVjZXMgYnkKKyAgICAgICAgICAgICAgICAgICAgdGhlIHJlc3BlY3RpdmUgaW50ZXJ2YWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3QgcHJvdmlkZSBhIDxmaWxlbmFtZT5CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCB5b3UgZG8gdXNlIDxmaWxlbmFtZT5CQl9ESVNLTU9OX0RJUlM8L2ZpbGVuYW1lPiB3aXRoCisgICAgICAgICAgICAgICAgICAgIHRoZSAiV0FSTiIgYWN0aW9uLCB0aGUgZGlzayBtb25pdG9yaW5nIGludGVydmFsIGRlZmF1bHRzIHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfRElTS01PTl9XQVJOSU5URVJWQUwgPSAiNTBNLDVLIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gc3BlY2lmeWluZyB0aGUgdmFyaWFibGUgaW4geW91ciBjb25maWd1cmF0aW9uIGZpbGUsCisgICAgICAgICAgICAgICAgICAgIHVzZSB0aGUgZm9sbG93aW5nIGZvcm06CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfRElTS01PTl9XQVJOSU5URVJWQUwgPSAiJmx0O2Rpc2tfc3BhY2VfaW50ZXJ2YWwmZ3Q7LCZsdDtkaXNrX2lub2RlX2ludGVydmFsJmd0OyIKKworICAgICB3aGVyZToKKworICAgICAgICAmbHQ7ZGlza19zcGFjZV9pbnRlcnZhbCZndDsgaXM6CisgICAgICAgICAgIEFuIGludGVydmFsIG9mIG1lbW9yeSBleHByZXNzZWQgaW4gZWl0aGVyCisgICAgICAgICAgIEcsIE0sIG9yIEsgZm9yIEdieXRlcywgTWJ5dGVzLCBvciBLYnl0ZXMsCisgICAgICAgICAgIHJlc3BlY3RpdmVseS4gWW91IGNhbm5vdCB1c2UgR0IsIE1CLCBvciBLQi4KKworICAgICAgICAmbHQ7ZGlza19pbm9kZV9pbnRlcnZhbCZndDsgaXM6CisgICAgICAgICAgIEFuIGludGVydmFsIG9mIGZyZWUgaW5vZGVzIGV4cHJlc3NlZCBpbiBlaXRoZXIKKyAgICAgICAgICAgRywgTSwgb3IgSyBmb3IgR2J5dGVzLCBNYnl0ZXMsIG9yIEtieXRlcywKKyAgICAgICAgICAgcmVzcGVjdGl2ZWx5LiBZb3UgY2Fubm90IHVzZSBHQiwgTUIsIG9yIEtCLgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQl9ESVNLTU9OX0RJUlMgPSAiV0FSTiwke1NTVEFURV9ESVJ9LDFHLDEwMEsiCisgICAgIEJCX0RJU0tNT05fV0FSTklOVEVSVkFMID0gIjUwTSw1SyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGVzZSB2YXJpYWJsZXMgY2F1c2UgQml0QmFrZSB0bworICAgICAgICAgICAgICAgICAgICBpc3N1ZSBzdWJzZXF1ZW50IHdhcm5pbmdzIGVhY2ggdGltZSB0aGUgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgICAgIGRpc2sgc3BhY2UgZnVydGhlciByZWR1Y2VzIGJ5IDUwIE1ieXRlcyBvciB0aGUgbnVtYmVyCisgICAgICAgICAgICAgICAgICAgIG9mIGZyZWUgaW5vZGVzIGZ1cnRoZXIgcmVkdWNlcyBieSA1IEtieXRlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7U1NUQVRFX0RJUn08L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIFN1YnNlcXVlbnQgd2FybmluZ3MgYmFzZWQgb24gdGhlIGludGVydmFsIG9jY3VyIGVhY2ggdGltZQorICAgICAgICAgICAgICAgICAgICBhIHJlc3BlY3RpdmUgaW50ZXJ2YWwgaXMgcmVhY2hlZCBiZXlvbmQgdGhlIGluaXRpYWwgd2FybmluZworICAgICAgICAgICAgICAgICAgICAoaS5lLiAxIEdieXRlcyBhbmQgMTAwIEtieXRlcykuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfRU5WX1dISVRFTElTVCc+PGdsb3NzdGVybT5CQl9FTlZfV0hJVEVMSVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgaW50ZXJuYWwgd2hpdGVsaXN0IG9mIHZhcmlhYmxlcyB0byBhbGxvdworICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIGZyb20gdGhlIGV4dGVybmFsIGVudmlyb25tZW50IGludG8gQml0QmFrZSdzCisgICAgICAgICAgICAgICAgICAgIGRhdGFzdG9yZS4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgICAod2hpY2ggaXMgdGhlIGRlZmF1bHQpLCB0aGUgZm9sbG93aW5nIGxpc3QgaXMgdXNlZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX1BSRVNFUlZFX0VOVic+PGZpbGVuYW1lPkJCX1BSRVNFUlZFX0VOVjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0VOVl9XSElURUxJU1QnPjxmaWxlbmFtZT5CQl9FTlZfV0hJVEVMSVNUPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0VOVl9FWFRSQVdISVRFJz48ZmlsZW5hbWU+QkJfRU5WX0VYVFJBV0hJVEU8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3Qgc2V0IHRoaXMgdmFyaWFibGUgaW4gdGhlIGV4dGVybmFsIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgICAgICBpbiBvcmRlciBmb3IgaXQgdG8gd29yay4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0VOVl9FWFRSQVdISVRFJz48Z2xvc3N0ZXJtPkJCX0VOVl9FWFRSQVdISVRFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhbiBhZGRpdGlvbmFsIHNldCBvZiB2YXJpYWJsZXMgdG8gYWxsb3cgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICAod2hpdGVsaXN0KSBmcm9tIHRoZSBleHRlcm5hbCBlbnZpcm9ubWVudCBpbnRvIEJpdEJha2UncworICAgICAgICAgICAgICAgICAgICBkYXRhc3RvcmUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbGlzdCBvZiB2YXJpYWJsZXMgYXJlIG9uIHRvcCBvZiB0aGUgaW50ZXJuYWwgbGlzdAorICAgICAgICAgICAgICAgICAgICBzZXQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0VOVl9XSElURUxJU1QnPjxmaWxlbmFtZT5CQl9FTlZfV0hJVEVMSVNUPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGlzIHZhcmlhYmxlIGluIHRoZSBleHRlcm5hbAorICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgaW4gb3JkZXIgZm9yIGl0IHRvIHdvcmsuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9GRVRDSF9QUkVNSVJST1JPTkxZJz48Z2xvc3N0ZXJtPkJCX0ZFVENIX1BSRU1JUlJPUk9OTFk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzZXQgdG8gIjEiLCBjYXVzZXMgQml0QmFrZSdzIGZldGNoZXIgbW9kdWxlIHRvIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgc2VhcmNoCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2Ugd2lsbCBub3Qgc2VhcmNoIHRoZSBtYWluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUlSUk9SUyc+PGZpbGVuYW1lPk1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfRklMRU5BTUUnPjxnbG9zc3Rlcm0+QkJfRklMRU5BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29udGFpbnMgdGhlIGZpbGVuYW1lIG9mIHRoZSByZWNpcGUgdGhhdCBvd25zIHRoZSBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgcnVubmluZyB0YXNrLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIDxmaWxlbmFtZT5kb19mZXRjaDwvZmlsZW5hbWU+IHRhc2sgdGhhdAorICAgICAgICAgICAgICAgICAgICByZXNpZGVzIGluIHRoZSA8ZmlsZW5hbWU+bXktcmVjaXBlLmJiPC9maWxlbmFtZT4gaXMKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW5nLCB0aGUgPGZpbGVuYW1lPkJCX0ZJTEVOQU1FPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgIi9mb28vcGF0aC9teS1yZWNpcGUuYmIiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyc+PGdsb3NzdGVybT5CQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHRhcmJhbGxzIG9mIHRoZSBHaXQgcmVwb3NpdG9yaWVzLCBpbmNsdWRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIEdpdCBtZXRhZGF0YSwgdG8gYmUgcGxhY2VkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgQW55b25lIHdpc2hpbmcgdG8gY3JlYXRlIGEgc291cmNlIG1pcnJvciB3b3VsZCB3YW50IHRvCisgICAgICAgICAgICAgICAgICAgIGVuYWJsZSB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgY3JlYXRpbmcgYW5kIHBsYWNpbmcgdGFyYmFsbHMgb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlIEdpdCByZXBvc2l0b3JpZXMgaXMgbm90IHRoZSBkZWZhdWx0IGFjdGlvbiBieSBCaXRCYWtlLgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyA9ICIxIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfSEFTSENPTkZJR19XSElURUxJU1QnPjxnbG9zc3Rlcm0+QkJfSEFTSENPTkZJR19XSElURUxJU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgdmFyaWFibGVzIHRoYXQgYXJlIGV4Y2x1ZGVkIGZyb20gYmFzZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGNoZWNrc3VtLCB3aGljaCBpcyB1c2VkIHRvIGRldGVybWluZSBpZiB0aGUgY2FjaGUgY2FuCisgICAgICAgICAgICAgICAgICAgIGJlIHJldXNlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgT25lIG9mIHRoZSB3YXlzIEJpdEJha2UgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHJlLXBhcnNlIHRoZQorICAgICAgICAgICAgICAgICAgICBtYWluIG1ldGFkYXRhIGlzIHRocm91Z2ggY2hlY2tzdW1zIG9mIHRoZSB2YXJpYWJsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGRhdGFzdG9yZSBvZiB0aGUgYmFzZSBjb25maWd1cmF0aW9uIGRhdGEuCisgICAgICAgICAgICAgICAgICAgIFRoZXJlIGFyZSB2YXJpYWJsZXMgdGhhdCB5b3UgdHlwaWNhbGx5IHdhbnQgdG8gZXhjbHVkZSB3aGVuCisgICAgICAgICAgICAgICAgICAgIGNoZWNraW5nIHdoZXRoZXIgb3Igbm90IHRvIHJlLXBhcnNlIGFuZCB0aHVzIHJlYnVpbGQgdGhlCisgICAgICAgICAgICAgICAgICAgIGNhY2hlLgorICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCB5b3Ugd291bGQgdXN1YWxseSBleGNsdWRlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5USU1FPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5EQVRFPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYmVjYXVzZSB0aGVzZSB2YXJpYWJsZXMgYXJlIGFsd2F5cyBjaGFuZ2luZy4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRpZCBub3QgZXhjbHVkZSB0aGVtLCBCaXRCYWtlIHdvdWxkIG5ldmVyIHJldXNlIHRoZQorICAgICAgICAgICAgICAgICAgICBjYWNoZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9IQVNIQkFTRV9XSElURUxJU1QnPjxnbG9zc3Rlcm0+QkJfSEFTSEJBU0VfV0hJVEVMSVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHZhcmlhYmxlcyB0aGF0IGFyZSBleGNsdWRlZCBmcm9tIGNoZWNrc3VtIGFuZAorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5IGRhdGEuCisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlcyB0aGF0IGFyZSBleGNsdWRlZCBjYW4gdGhlcmVmb3JlIGNoYW5nZSB3aXRob3V0CisgICAgICAgICAgICAgICAgICAgIGFmZmVjdGluZyB0aGUgY2hlY2tzdW0gbWVjaGFuaXNtLgorICAgICAgICAgICAgICAgICAgICBBIGNvbW1vbiBleGFtcGxlIHdvdWxkIGJlIHRoZSB2YXJpYWJsZSBmb3IgdGhlIHBhdGggb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlJ3Mgb3V0cHV0IHNob3VsZCBub3QgKGFuZCB1c3VhbGx5IGRvZXMgbm90KSBkZXBlbmQKKyAgICAgICAgICAgICAgICAgICAgb24gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBpdCB3YXMgYnVpbHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfSEFTSENIRUNLX0ZVTkNUSU9OJz48Z2xvc3N0ZXJtPkJCX0hBU0hDSEVDS19GVU5DVElPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGNhbGwgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAic2V0c2NlbmUiIHBhcnQgb2YgdGhlIHRhc2sncyBleGVjdXRpb24gaW4gb3JkZXIgdG8KKyAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGUgdGhlIGxpc3Qgb2YgdGFzayBoYXNoZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBsaXN0IG9mIHNldHNjZW5lIHRhc2tzIHRoYXQgc2hvdWxkCisgICAgICAgICAgICAgICAgICAgIGJlIGV4ZWN1dGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50IGluIHRoZSBleGVjdXRpb24gb2YgdGhlIGNvZGUsIHRoZSBvYmplY3RpdmUKKyAgICAgICAgICAgICAgICAgICAgaXMgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYSBnaXZlbiBzZXRzY2VuZSBmdW5jdGlvbiBpcyBsaWtlbHkKKyAgICAgICAgICAgICAgICAgICAgdG8gd29yayBvciBub3QuCisgICAgICAgICAgICAgICAgICAgIEl0J3MgZWFzaWVyIHRvIGNoZWNrIHRoZSBsaXN0IG9mIHNldHNjZW5lIGZ1bmN0aW9ucyBpbgorICAgICAgICAgICAgICAgICAgICBvbmUgcGFzcyB0aGFuIHRvIGNhbGwgbWFueSBpbmRpdmlkdWFsIHRhc2tzLgorICAgICAgICAgICAgICAgICAgICBUaGUgcmV0dXJuZWQgbGlzdCBuZWVkIG5vdCBiZSBjb21wbGV0ZWx5IGFjY3VyYXRlLgorICAgICAgICAgICAgICAgICAgICBBIGdpdmVuIHNldHNjZW5lIHRhc2sgY2FuIHN0aWxsIGxhdGVyIGZhaWwuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBtb3JlIGFjY3VyYXRlIHRoZSBkYXRhIHJldHVybmVkLCB0aGUgbW9yZQorICAgICAgICAgICAgICAgICAgICBlZmZpY2llbnQgdGhlIGJ1aWxkIHdpbGwgYmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfSU5WQUxJRENPTkYnPjxnbG9zc3Rlcm0+QkJfSU5WQUxJRENPTkY8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q29uZmlnUGFyc2VkPC9maWxlbmFtZT4gZXZlbnQgdG8gdHJpZ2dlcgorICAgICAgICAgICAgICAgICAgICByZS1wYXJzaW5nIHRoZSBiYXNlIG1ldGFkYXRhIChpLmUuIGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlcykuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Q29uZmlnUGFyc2VkPC9maWxlbmFtZT4gZXZlbnQgY2FuIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gdHJpZ2dlciB0aGUgcmUtcGFyc2UuCisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGJlIGNhcmVmdWwgdG8gYXZvaWQgcmVjdXJzaXZlIGxvb3BzIHdpdGggdGhpcworICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0xPR0ZNVCc+PGdsb3NzdGVybT5CQl9MT0dGTVQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBsb2cgZmlsZXMgc2F2ZWQgaW50bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1UJz48ZmlsZW5hbWU+VDwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+QkJfTE9HRk1UPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgaXMgdW5kZWZpbmVkIGFuZCB0aGUgbG9nIGZpbGUgbmFtZXMgZ2V0IGNyZWF0ZWQgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBmb3JtOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGxvZy57dGFza30ue3BpZH0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBmb3JjZSBsb2cgZmlsZXMgdG8gdGFrZSBhIHNwZWNpZmljIG5hbWUsCisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gc2V0IHRoaXMgdmFyaWFibGUgaW4gYSBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfTklDRV9MRVZFTCc+PGdsb3NzdGVybT5CQl9OSUNFX0xFVkVMPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFsbG93cyBCaXRCYWtlIHRvIHJ1biBhdCBhIHNwZWNpZmljIHByaW9yaXR5CisgICAgICAgICAgICAgICAgICAgIChpLmUuIG5pY2UgbGV2ZWwpLgorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0gcGVybWlzc2lvbnMgdXN1YWxseSBtZWFuIHRoYXQgQml0QmFrZSBjYW4gcmVkdWNlIGl0cworICAgICAgICAgICAgICAgICAgICBwcmlvcml0eSBidXQgbm90IHJhaXNlIGl0IGFnYWluLgorICAgICAgICAgICAgICAgICAgICBTZWUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX1RBU0tfTklDRV9MRVZFTCc+PGZpbGVuYW1lPkJCX1RBU0tfTklDRV9MRVZFTDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9OT19ORVRXT1JLJz48Z2xvc3N0ZXJtPkJCX05PX05FVFdPUks8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGlzYWJsZXMgbmV0d29yayBhY2Nlc3MgaW4gdGhlIEJpdEJha2UgZmV0Y2hlciBtb2R1bGVzLgorICAgICAgICAgICAgICAgICAgICBXaXRoIHRoaXMgYWNjZXNzIGRpc2FibGVkLCBhbnkgY29tbWFuZCB0aGF0IGF0dGVtcHRzIHRvCisgICAgICAgICAgICAgICAgICAgIGFjY2VzcyB0aGUgbmV0d29yayBiZWNvbWVzIGFuIGVycm9yLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEaXNhYmxpbmcgbmV0d29yayBhY2Nlc3MgaXMgdXNlZnVsIGZvciB0ZXN0aW5nIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICBtaXJyb3JzLCBydW5uaW5nIGJ1aWxkcyB3aGVuIG5vdCBjb25uZWN0ZWQgdG8gdGhlIEludGVybmV0LAorICAgICAgICAgICAgICAgICAgICBhbmQgd2hlbiBvcGVyYXRpbmcgaW4gY2VydGFpbiBraW5kcyBvZiBmaXJld2FsbAorICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfTlVNQkVSX1RIUkVBRFMnPjxnbG9zc3Rlcm0+QkJfTlVNQkVSX1RIUkVBRFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHRhc2tzIEJpdEJha2Ugc2hvdWxkIHJ1biBpbiBwYXJhbGxlbAorICAgICAgICAgICAgICAgICAgICBhdCBhbnkgb25lIHRpbWUuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0gc3VwcG9ydHMgbXVsdGlwbGUgY29yZXMsCisgICAgICAgICAgICAgICAgICAgIGEgZ29vZCBydWxlIG9mIHRodW1iIGlzIHRvIHNldCB0aGlzIHZhcmlhYmxlIHRvIHR3aWNlIHRoZQorICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgY29yZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfTlVNQkVSX1BBUlNFX1RIUkVBRFMnPjxnbG9zc3Rlcm0+QkJfTlVNQkVSX1BBUlNFX1RIUkVBRFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2V0cyB0aGUgbnVtYmVyIG9mIHRocmVhZHMgQml0QmFrZSB1c2VzIHdoZW4gcGFyc2luZy4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIG51bWJlciBvZiB0aHJlYWRzIGlzIGVxdWFsIHRvIHRoZSBudW1iZXIKKyAgICAgICAgICAgICAgICAgICAgb2YgY29yZXMgb24gdGhlIHN5c3RlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9PUklHRU5WJz48Z2xvc3N0ZXJtPkJCX09SSUdFTlY8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29udGFpbnMgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBleHRlcm5hbCBlbnZpcm9ubWVudCBpbgorICAgICAgICAgICAgICAgICAgICB3aGljaCBCaXRCYWtlIHdhcyBydW4uCisgICAgICAgICAgICAgICAgICAgIFRoZSBjb3B5IGlzIHRha2VuIGJlZm9yZSBhbnkgd2hpdGVsaXN0ZWQgdmFyaWFibGUgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIGFyZSBmaWx0ZXJlZCBpbnRvIEJpdEJha2UncyBkYXRhc3RvcmUuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgdmFyaWFibGUgaXMgYSBkYXRhc3RvcmUgb2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGNhbiBiZSBxdWVyaWVkIHVzaW5nIHRoZSBub3JtYWwgZGF0YXN0b3JlCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfUFJFU0VSVkVfRU5WJz48Z2xvc3N0ZXJtPkJCX1BSRVNFUlZFX0VOVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEaXNhYmxlcyB3aGl0ZWxpc3RpbmcgYW5kIGluc3RlYWQgYWxsb3dzIGFsbCB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCBmcm9tIHRoZSBleHRlcm5hbCBlbnZpcm9ubWVudCBpbnRvIEJpdEJha2UncworICAgICAgICAgICAgICAgICAgICBkYXRhc3RvcmUuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3Qgc2V0IHRoaXMgdmFyaWFibGUgaW4gdGhlIGV4dGVybmFsCisgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBpbiBvcmRlciBmb3IgaXQgdG8gd29yay4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1JVTkZNVCc+PGdsb3NzdGVybT5CQl9SVU5GTVQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBleGVjdXRhYmxlIHNjcmlwdCBmaWxlcworICAgICAgICAgICAgICAgICAgICAoaS5lLiBydW4gZmlsZXMpIHNhdmVkIGludG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVCc+PGZpbGVuYW1lPlQ8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPkJCX1JVTkZNVDwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGlzIHVuZGVmaW5lZCBhbmQgdGhlIHJ1biBmaWxlIG5hbWVzIGdldCBjcmVhdGVkIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgZm9ybToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBydW4ue3Rhc2t9LntwaWR9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gZm9yY2UgcnVuIGZpbGVzIHRvIHRha2UgYSBzcGVjaWZpYyBuYW1lLAorICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIHNldCB0aGlzIHZhcmlhYmxlIGluIGEgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1JVTlRBU0snPjxnbG9zc3Rlcm0+QkJfUlVOVEFTSzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb250YWlucyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyB0YXNrLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgZG9lcyBub3QgaW5jbHVkZSB0aGUgImRvXyIgcHJlZml4LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgdGFzayBpcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fY29uZmlnPC9maWxlbmFtZT4sIHRoZSB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAiY29uZmlnIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9TQ0hFRFVMRVInPjxnbG9zc3Rlcm0+QkJfU0NIRURVTEVSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgdGhlIG5hbWUgb2YgdGhlIHNjaGVkdWxlciB0byB1c2UgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBzY2hlZHVsaW5nIG9mIEJpdEJha2UgdGFza3MuCisgICAgICAgICAgICAgICAgICAgIFRocmVlIG9wdGlvbnMgZXhpc3Q6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmJhc2ljPC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBiYXNpYyBmcmFtZXdvcmsgZnJvbSB3aGljaCBldmVyeXRoaW5nIGRlcml2ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcgdGhpcyBvcHRpb24gY2F1c2VzIHRhc2tzIHRvIGJlIG9yZGVyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljYWxseSBhcyB0aGV5IGFyZSBwYXJzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnNwZWVkPC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGVzIHRhc2tzIGZpcnN0IHRoYXQgaGF2ZSBtb3JlIHRhc2tzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZW0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlICJzcGVlZCIgb3B0aW9uIGlzIHRoZSBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5jb21wbGV0aW9uPC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhdXNlcyB0aGUgc2NoZWR1bGVyIHRvIHRyeSB0byBjb21wbGV0ZSBhIGdpdmVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlIG9uY2UgaXRzIGJ1aWxkIGhhcyBzdGFydGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9TQ0hFRFVMRVJTJz48Z2xvc3N0ZXJtPkJCX1NDSEVEVUxFUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyBjdXN0b20gc2NoZWR1bGVycyB0byBpbXBvcnQuCisgICAgICAgICAgICAgICAgICAgIEN1c3RvbSBzY2hlZHVsZXJzIG5lZWQgdG8gYmUgZGVyaXZlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UnVuUXVldWVTY2hlZHVsZXI8L2ZpbGVuYW1lPiBjbGFzcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIGhvdyB0byBzZWxlY3QgYSBzY2hlZHVsZXIsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX1NDSEVEVUxFUic+PGZpbGVuYW1lPkJCX1NDSEVEVUxFUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9TRVRTQ0VORV9ERVBWQUxJRCc+PGdsb3NzdGVybT5CQl9TRVRTQ0VORV9ERVBWQUxJRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBmdW5jdGlvbiBCaXRCYWtlIGNhbGxzIHRoYXQgZGV0ZXJtaW5lcworICAgICAgICAgICAgICAgICAgICB3aGV0aGVyIEJpdEJha2UgcmVxdWlyZXMgYSBzZXRzY2VuZSBkZXBlbmRlbmN5IHRvIGJlIG1ldC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBydW5uaW5nIGEgc2V0c2NlbmUgdGFzaywgQml0QmFrZSBuZWVkcyB0bworICAgICAgICAgICAgICAgICAgICBrbm93IHdoaWNoIGRlcGVuZGVuY2llcyBvZiB0aGF0IHNldHNjZW5lIHRhc2sgYWxzbyBuZWVkCisgICAgICAgICAgICAgICAgICAgIHRvIGJlIHJ1bi4KKyAgICAgICAgICAgICAgICAgICAgV2hldGhlciBkZXBlbmRlbmNpZXMgYWxzbyBuZWVkIHRvIGJlIHJ1biBpcyBoaWdobHkKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW50IG9uIHRoZSBtZXRhZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBieSB0aGlzIHZhcmlhYmxlIHJldHVybnMgYQorICAgICAgICAgICAgICAgICAgICAiVHJ1ZSIgb3IgIkZhbHNlIiBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZGVwZW5kZW5jeSBuZWVkcworICAgICAgICAgICAgICAgICAgICB0byBiZSBtZXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfU0VUU0NFTkVfVkVSSUZZX0ZVTkNUSU9OJz48Z2xvc3N0ZXJtPkJCX1NFVFNDRU5FX1ZFUklGWV9GVU5DVElPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBmdW5jdGlvbiB0byBjYWxsIHRoYXQgdmVyaWZpZXMgdGhlIGxpc3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgcGxhbm5lZCB0YXNrIGV4ZWN1dGlvbiBiZWZvcmUgdGhlIG1haW4gdGFzayBleGVjdXRpb24KKyAgICAgICAgICAgICAgICAgICAgaGFwcGVucy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIEJpdEJha2UgaGFzIGEgbGlzdCBvZiBzZXRzY2VuZQorICAgICAgICAgICAgICAgICAgICB0YXNrcyB0aGF0IGhhdmUgcnVuIGFuZCBlaXRoZXIgc3VjY2VlZGVkIG9yIGZhaWxlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIGFsbG93cyBmb3IgYSB0YXNrIGxpc3QgY2hlY2sgdG8gc2VlIGlmIHRoZXkKKyAgICAgICAgICAgICAgICAgICAgbWFrZSBzZW5zZS4KKyAgICAgICAgICAgICAgICAgICAgRXZlbiBpZiBCaXRCYWtlIHdhcyBwbGFubmluZyB0byBza2lwIGEgdGFzaywgdGhlCisgICAgICAgICAgICAgICAgICAgIHJldHVybmVkIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBjYW4gZm9yY2UgQml0QmFrZSB0byBydW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIHRhc2ssIHdoaWNoIGlzIG5lY2Vzc2FyeSB1bmRlciBjZXJ0YWluIG1ldGFkYXRhCisgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgY2lyY3Vtc3RhbmNlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9TSUdOQVRVUkVfRVhDTFVERV9GTEFHUyc+PGdsb3NzdGVybT5CQl9TSUdOQVRVUkVfRVhDTFVERV9GTEFHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyB2YXJpYWJsZSBmbGFncyAodmFyZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgIHRoYXQgY2FuIGJlIHNhZmVseSBleGNsdWRlZCBmcm9tIGNoZWNrc3VtCisgICAgICAgICAgICAgICAgICAgIGFuZCBkZXBlbmRlbmN5IGRhdGEgZm9yIGtleXMgaW4gdGhlIGRhdGFzdG9yZS4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBnZW5lcmF0aW5nIGNoZWNrc3VtIG9yIGRlcGVuZGVuY3kgZGF0YSBmb3Iga2V5cyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgZGF0YXN0b3JlLCB0aGUgZmxhZ3Mgc2V0IGFnYWluc3QgdGhhdCBrZXkgYXJlIG5vcm1hbGx5CisgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVkIGluIHRoZSBjaGVja3N1bS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdmFyZmxhZ3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3ZhcmlhYmxlLWZsYWdzJz5WYXJpYWJsZSBGbGFnczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfU0lHTkFUVVJFX0hBTkRMRVInPjxnbG9zc3Rlcm0+QkJfU0lHTkFUVVJFX0hBTkRMRVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgc2lnbmF0dXJlIGhhbmRsZXIgQml0QmFrZSB1c2VzLgorICAgICAgICAgICAgICAgICAgICBUaGUgc2lnbmF0dXJlIGhhbmRsZXIgZGVmaW5lcyB0aGUgd2F5IHN0YW1wIGZpbGVzIGFyZQorICAgICAgICAgICAgICAgICAgICBjcmVhdGVkIGFuZCBoYW5kbGVkLCBpZiBhbmQgaG93IHRoZSBzaWduYXR1cmUgaXMKKyAgICAgICAgICAgICAgICAgICAgaW5jb3Jwb3JhdGVkIGludG8gdGhlIHN0YW1wcywgYW5kIGhvdyB0aGUgc2lnbmF0dXJlCisgICAgICAgICAgICAgICAgICAgIGl0c2VsZiBpcyBnZW5lcmF0ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgbmV3IHNpZ25hdHVyZSBoYW5kbGVyIGNhbiBiZSBhZGRlZCBieSBpbmplY3RpbmcgYSBjbGFzcworICAgICAgICAgICAgICAgICAgICBkZXJpdmVkIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TaWduYXR1cmVHZW5lcmF0b3I8L2ZpbGVuYW1lPiBjbGFzcyBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICBnbG9iYWwgbmFtZXNwYWNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1NSQ1JFVl9QT0xJQ1knPjxnbG9zc3Rlcm0+QkJfU1JDUkVWX1BPTElDWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBiZWhhdmlvciBvZiB0aGUgZmV0Y2hlciB3aGVuIGl0IGludGVyYWN0cyB3aXRoCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBjb250cm9sIHN5c3RlbXMgYW5kIGR5bmFtaWMgc291cmNlIHJldmlzaW9ucy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5CQl9TUkNSRVZfUE9MSUNZPC9maWxlbmFtZT4gdmFyaWFibGUgaXMKKyAgICAgICAgICAgICAgICAgICAgdXNlZnVsIHdoZW4gd29ya2luZyB3aXRob3V0IGEgbmV0d29yay4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGNhbiBiZSBzZXQgdXNpbmcgb25lIG9mIHR3byBwb2xpY2llczoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Y2FjaGU8L2VtcGhhc2lzPiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0YWlucyB0aGUgdmFsdWUgdGhlIHN5c3RlbSBvYnRhaW5lZCBwcmV2aW91c2x5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0aGVyIHRoYW4gcXVlcnlpbmcgdGhlIHNvdXJjZSBjb250cm9sIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggdGltZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Y2xlYXI8L2VtcGhhc2lzPiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUXVlcmllcyB0aGUgc291cmNlIGNvbnRyb2xzIHN5c3RlbSBldmVyeSB0aW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpdGggdGhpcyBwb2xpY3ksIHRoZXJlIGlzIG5vIGNhY2hlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSAiY2xlYXIiIHBvbGljeSBpcyB0aGUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfU1RBTVBfUE9MSUNZJz48Z2xvc3N0ZXJtPkJCX1NUQU1QX1BPTElDWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBtb2RlIHVzZWQgZm9yIGhvdyB0aW1lc3RhbXBzIG9mIHN0YW1wIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIGFyZSBjb21wYXJlZC4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgdGhlIHZhcmlhYmxlIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nIG1vZGVzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wZXJmaWxlPC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVzdGFtcCBjb21wYXJpc29ucyBhcmUgb25seSBtYWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV0d2VlbiB0aW1lc3RhbXBzIG9mIGEgc3BlY2lmaWMgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgdGhlIGRlZmF1bHQgbW9kZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ZnVsbDwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lc3RhbXAgY29tcGFyaXNvbnMgYXJlIG1hZGUgZm9yIGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+d2hpdGVsaXN0PC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkZW50aWNhbCB0byAiZnVsbCIgbW9kZSBleGNlcHQgdGltZXN0YW1wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyaXNvbnMgYXJlIG1hZGUgZm9yIHJlY2lwZXMgbGlzdGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9TVEFNUF9XSElURUxJU1QnPjxmaWxlbmFtZT5CQl9TVEFNUF9XSElURUxJU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgU3RhbXAgcG9saWNpZXMgYXJlIGxhcmdlbHkgb2Jzb2xldGUgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGludHJvZHVjdGlvbiBvZiBzZXRzY2VuZSB0YXNrcy4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1NUQU1QX1dISVRFTElTVCc+PGdsb3NzdGVybT5CQl9TVEFNUF9XSElURUxJU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgZmlsZXMgd2hvc2Ugc3RhbXAgZmlsZSB0aW1lc3RhbXBzIGFyZSBjb21wYXJlZCB3aGVuCisgICAgICAgICAgICAgICAgICAgIHRoZSBzdGFtcCBwb2xpY3kgbW9kZSBpcyBzZXQgdG8gIndoaXRlbGlzdCIuCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBzdGFtcCBwb2xpY2llcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfU1RBTVBfUE9MSUNZJz48ZmlsZW5hbWU+QkJfU1RBTVBfUE9MSUNZPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1NUUklDVF9DSEVDS1NVTSc+PGdsb3NzdGVybT5CQl9TVFJJQ1RfQ0hFQ0tTVU08L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2V0cyBhIG1vcmUgc3RyaWN0IGNoZWNrc3VtIG1lY2hhbmlzbSBmb3Igbm9uLWxvY2FsIFVSTHMuCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgdGhpcyB2YXJpYWJsZSB0byBhIHZhbHVlIGNhdXNlcyBCaXRCYWtlCisgICAgICAgICAgICAgICAgICAgIHRvIHJlcG9ydCBhbiBlcnJvciBpZiBpdCBlbmNvdW50ZXJzIGEgbm9uLWxvY2FsIFVSTAorICAgICAgICAgICAgICAgICAgICB0aGF0IGRvZXMgbm90IGhhdmUgYXQgbGVhc3Qgb25lIGNoZWNrc3VtIHNwZWNpZmllZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9UQVNLX05JQ0VfTEVWRUwnPjxnbG9zc3Rlcm0+QkJfVEFTS19OSUNFX0xFVkVMPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFsbG93cyBzcGVjaWZpYyB0YXNrcyB0byBjaGFuZ2UgdGhlaXIgcHJpb3JpdHkKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gbmljZSBsZXZlbCkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgdmFyaWFibGUgaW4gY29tYmluYXRpb24gd2l0aCB0YXNrCisgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlcyB0byByYWlzZSBvciBsb3dlciBwcmlvcml0aWVzIG9mIHNwZWNpZmljIHRhc2tzLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgb24gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZyc+WW9jdG8gUHJvamVjdDwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGF1dG9idWlsZGVyLCBRRU1VIGVtdWxhdGlvbiBpbiBpbWFnZXMgaXMgZ2l2ZW4gYSBoaWdoZXIKKyAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHkgYXMgY29tcGFyZWQgdG8gYnVpbGQgdGFza3MgdG8gZW5zdXJlIHRoYXQgaW1hZ2VzCisgICAgICAgICAgICAgICAgICAgIGRvIG5vdCBzdWZmZXIgdGltZW91dHMgb24gbG9hZGVkIHN5c3RlbXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfVEFTS0hBU0gnPjxnbG9zc3Rlcm0+QkJfVEFTS0hBU0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2l0aGluIGFuIGV4ZWN1dGluZyB0YXNrLCB0aGlzIHZhcmlhYmxlIGhvbGRzIHRoZSBoYXNoCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSB0YXNrIGFzIHJldHVybmVkIGJ5IHRoZSBjdXJyZW50bHkgZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUgZ2VuZXJhdG9yLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1ZFUkJPU0VfTE9HUyc+PGdsb3NzdGVybT5CQl9WRVJCT1NFX0xPR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgaG93IHZlcmJvc2UgQml0QmFrZSBpcyBkdXJpbmcgYnVpbGRzLgorICAgICAgICAgICAgICAgICAgICBJZiBzZXQsIHNoZWxsIHNjcmlwdHMgZWNobyBjb21tYW5kcyBhbmQgc2hlbGwgc2NyaXB0IG91dHB1dAorICAgICAgICAgICAgICAgICAgICBhcHBlYXJzIG9uIHN0YW5kYXJkIG91dCAoc3Rkb3V0KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9XT1JLRVJDT05URVhUJz48Z2xvc3N0ZXJtPkJCX1dPUktFUkNPTlRFWFQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGlmIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgZXhlY3V0aW5nIGEgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBzZXRzIHRoaXMgdmFyaWFibGUgdG8gIjEiIHdoZW4gYSB0YXNrIGlzCisgICAgICAgICAgICAgICAgICAgIGJlaW5nIGV4ZWN1dGVkLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgaXMgbm90IHNldCB3aGVuIHRoZSB0YXNrIGlzIGluIHNlcnZlciBjb250ZXh0CisgICAgICAgICAgICAgICAgICAgIGR1cmluZyBwYXJzaW5nIG9yIGV2ZW50IGhhbmRsaW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJDTEFTU0VYVEVORCc+PGdsb3NzdGVybT5CQkNMQVNTRVhURU5EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFsbG93cyB5b3UgdG8gZXh0ZW5kIGEgcmVjaXBlIHNvIHRoYXQgaXQgYnVpbGRzIHZhcmlhbnRzCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzb2Z0d2FyZS4KKyAgICAgICAgICAgICAgICAgICAgU29tZSBleGFtcGxlcyBvZiB0aGVzZSB2YXJpYW50cyBmb3IgcmVjaXBlcyBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgQ29yZSBtZXRhZGF0YSBhcmUgIm5hdGl2ZXMiIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnF1aWx0LW5hdGl2ZTwvZmlsZW5hbWU+LCB3aGljaCBpcyBhIGNvcHkgb2YKKyAgICAgICAgICAgICAgICAgICAgUXVpbHQgYnVpbHQgdG8gcnVuIG9uIHRoZSBidWlsZCBzeXN0ZW07ICJjcm9zc2VzIiBzdWNoCisgICAgICAgICAgICAgICAgICAgIGFzIDxmaWxlbmFtZT5nY2MtY3Jvc3M8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgYSBjb21waWxlcgorICAgICAgICAgICAgICAgICAgICBidWlsdCB0byBydW4gb24gdGhlIGJ1aWxkIG1hY2hpbmUgYnV0IHByb2R1Y2VzIGJpbmFyaWVzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgcnVuIG9uIHRoZSB0YXJnZXQgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjsKKyAgICAgICAgICAgICAgICAgICAgIm5hdGl2ZXNkayIsIHdoaWNoIHRhcmdldHMgdGhlIFNESyBtYWNoaW5lIGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjsgYW5kICJtdWxpdGxpYnMiIGluIHRoZSBmb3JtCisgICAgICAgICAgICAgICAgICAgICI8ZmlsZW5hbWU+bXVsdGlsaWI6PC9maWxlbmFtZT48cmVwbGFjZWFibGU+bXVsdGlsaWJfbmFtZTwvcmVwbGFjZWFibGU+Ii4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gYnVpbGQgYSBkaWZmZXJlbnQgdmFyaWFudCBvZiB0aGUgcmVjaXBlIHdpdGggYSBtaW5pbWFsCisgICAgICAgICAgICAgICAgICAgIGFtb3VudCBvZiBjb2RlLCBpdCB1c3VhbGx5IGlzIGFzIHNpbXBsZSBhcyBhZGRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIHlvdXIgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSB0d28gZXhhbXBsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSAibmF0aXZlIiB2YXJpYW50cyBhcmUgZnJvbSB0aGUgT3BlbkVtYmVkZGVkIENvcmUKKyAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJDTEFTU0VYVEVORCA9KyAibmF0aXZlIG5hdGl2ZXNkayIKKyAgICAgQkJDTEFTU0VYVEVORCA9KyAibXVsdGlsaWI6PHJlcGxhY2VhYmxlPm11bHRpbGliX25hbWU8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkRFQlVHJz48Z2xvc3N0ZXJtPkJCREVCVUc8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2V0cyB0aGUgQml0QmFrZSBkZWJ1ZyBvdXRwdXQgbGV2ZWwgdG8gYSBzcGVjaWZpYyB2YWx1ZQorICAgICAgICAgICAgICAgICAgICBhcyBpbmNyZW1lbnRlZCBieSB0aGUgPGZpbGVuYW1lPi1kPC9maWxlbmFtZT4gY29tbWFuZCBsaW5lCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBzZXQgdGhpcyB2YXJpYWJsZSBpbiB0aGUgZXh0ZXJuYWwgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIG9yZGVyIGZvciBpdCB0byB3b3JrLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCRklMRV9DT0xMRUNUSU9OUyc+PGdsb3NzdGVybT5CQkZJTEVfQ09MTEVDVElPTlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5MaXN0cyB0aGUgbmFtZXMgb2YgY29uZmlndXJlZCBsYXllcnMuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIG5hbWVzIGFyZSB1c2VkIHRvIGZpbmQgdGhlIG90aGVyIDxmaWxlbmFtZT5CQkZJTEVfKjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCBlYWNoIGxheWVyIGFwcGVuZHMgaXRzIG5hbWUgdG8gdGhpcyB2YXJpYWJsZSBpbiBpdHMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJGSUxFX1BBVFRFUk4nPjxnbG9zc3Rlcm0+QkJGSUxFX1BBVFRFUk48L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5WYXJpYWJsZSB0aGF0IGV4cGFuZHMgdG8gbWF0Y2ggZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJGSUxFUyc+PGZpbGVuYW1lPkJCRklMRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW4gYSBwYXJ0aWN1bGFyIGxheWVyLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgaW4gdGhlIDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGFuZCBtdXN0CisgICAgICAgICAgICAgICAgICAgIGJlIHN1ZmZpeGVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIHNwZWNpZmljIGxheWVyIChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQkZJTEVfUEFUVEVSTl9lbWVubG93PC9maWxlbmFtZT4pLjwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCRklMRV9QUklPUklUWSc+PGdsb3NzdGVybT5CQkZJTEVfUFJJT1JJVFk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5Bc3NpZ25zIHRoZSBwcmlvcml0eSBmb3IgcmVjaXBlIGZpbGVzIGluIGVhY2ggbGF5ZXIuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPlRoaXMgdmFyaWFibGUgaXMgdXNlZnVsIGluIHNpdHVhdGlvbnMgd2hlcmUgdGhlIHNhbWUgcmVjaXBlIGFwcGVhcnMgaW4KKyAgICAgICAgICAgICAgICAgICAgbW9yZSB0aGFuIG9uZSBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB0aGlzIHZhcmlhYmxlIGFsbG93cyB5b3UgdG8gcHJpb3JpdGl6ZSBhCisgICAgICAgICAgICAgICAgICAgIGxheWVyIGFnYWluc3Qgb3RoZXIgbGF5ZXJzIHRoYXQgY29udGFpbiB0aGUgc2FtZSByZWNpcGUgLSBlZmZlY3RpdmVseQorICAgICAgICAgICAgICAgICAgICBsZXR0aW5nIHlvdSBjb250cm9sIHRoZSBwcmVjZWRlbmNlIGZvciB0aGUgbXVsdGlwbGUgbGF5ZXJzLgorICAgICAgICAgICAgICAgICAgICBUaGUgcHJlY2VkZW5jZSBlc3RhYmxpc2hlZCB0aHJvdWdoIHRoaXMgdmFyaWFibGUgc3RhbmRzIHJlZ2FyZGxlc3Mgb2YgYQorICAgICAgICAgICAgICAgICAgICByZWNpcGUncyB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZSkuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBhIGxheWVyIHRoYXQgaGFzIGEgcmVjaXBlIHdpdGggYSBoaWdoZXIgPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4gdmFsdWUgYnV0IGZvcgorICAgICAgICAgICAgICAgICAgICB3aGljaCB0aGUgPGZpbGVuYW1lPkJCRklMRV9QUklPUklUWTwvZmlsZW5hbWU+IGlzIHNldCB0byBoYXZlIGEgbG93ZXIgcHJlY2VkZW5jZSBzdGlsbCBoYXMgYQorICAgICAgICAgICAgICAgICAgICBsb3dlciBwcmVjZWRlbmNlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5BIGxhcmdlciB2YWx1ZSBmb3IgdGhlIDxmaWxlbmFtZT5CQkZJTEVfUFJJT1JJVFk8L2ZpbGVuYW1lPiB2YXJpYWJsZSByZXN1bHRzIGluIGEgaGlnaGVyCisgICAgICAgICAgICAgICAgICAgIHByZWNlZGVuY2UuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgdmFsdWUgNiBoYXMgYSBoaWdoZXIgcHJlY2VkZW5jZSB0aGFuIHRoZSB2YWx1ZSA1LgorICAgICAgICAgICAgICAgICAgICBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgPGZpbGVuYW1lPkJCRklMRV9QUklPUklUWTwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIHNldCBiYXNlZCBvbiBsYXllcgorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMgKHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1MQVlFUkRFUEVORFMnPkxBWUVSREVQRU5EUzwvbGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgcHJpb3JpdHksIGlmIHVuc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgIGZvciBhIGxheWVyIHdpdGggbm8gZGVwZW5kZW5jaWVzLCBpcyB0aGUgbG93ZXN0IGRlZmluZWQgcHJpb3JpdHkgKyAxCisgICAgICAgICAgICAgICAgICAgIChvciAxIGlmIG5vIHByaW9yaXRpZXMgYXJlIGRlZmluZWQpLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8dGlwPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgY29tbWFuZCA8ZmlsZW5hbWU+Yml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnM8L2ZpbGVuYW1lPiB0byBsaXN0CisgICAgICAgICAgICAgICAgICAgIGFsbCBjb25maWd1cmVkIGxheWVycyBhbG9uZyB3aXRoIHRoZWlyIHByaW9yaXRpZXMuCisgICAgICAgICAgICAgICAgPC90aXA+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkZJTEVTJz48Z2xvc3N0ZXJtPkJCRklMRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5MaXN0IG9mIHJlY2lwZSBmaWxlcyBCaXRCYWtlIHVzZXMgdG8gYnVpbGQgc29mdHdhcmUuPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJJTkNMVURFRCc+PGdsb3NzdGVybT5CQklOQ0xVREVEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbnRhaW5zIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgYWxsIG9mIGFsbCBmaWxlcyB0aGF0CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UncyBwYXJzZXIgaW5jbHVkZWQgZHVyaW5nIHBhcnNpbmcgb2YgdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQklOQ0xVREVMT0dTJz48Z2xvc3N0ZXJtPkJCSU5DTFVERUxPR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgc2V0IHRvIGEgdmFsdWUsIGVuYWJsZXMgcHJpbnRpbmcgdGhlIHRhc2sgbG9nIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0aW5nIGEgZmFpbGVkIHRhc2suCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJJTkNMVURFTE9HU19MSU5FUyc+PGdsb3NzdGVybT5CQklOQ0xVREVMT0dTX0xJTkVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQklOQ0xVREVMT0dTJz48ZmlsZW5hbWU+QkJJTkNMVURFTE9HUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQsIHNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbGluZXMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFzayBsb2cgZmlsZSB0byBwcmludCB3aGVuIHJlcG9ydGluZyBhIGZhaWxlZCB0YXNrLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHNldCA8ZmlsZW5hbWU+QkJJTkNMVURFTE9HU19MSU5FUzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICB0aGUgZW50aXJlIGxvZyBpcyBwcmludGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCTEFZRVJTJz48Z2xvc3N0ZXJtPkJCTEFZRVJTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+TGlzdHMgdGhlIGxheWVycyB0byBlbmFibGUgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBkZWZpbmVkIGluIHRoZSA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZmlsZSBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJMQVlFUlMgPSAiIFwKKyAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEgXAorICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YS15b2N0byBcCisgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhLXlvY3RvLWJzcCBcCisgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhLW15a2VybmVsIFwKKyAgICAgICAiCisKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgZW5hYmxlcyBmb3VyIGxheWVycywgb25lIG9mIHdoaWNoIGlzIGEgY3VzdG9tLCB1c2VyLWRlZmluZWQgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPm1ldGEtbXlrZXJuZWw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkxBWUVSU19GRVRDSF9ESVInPjxnbG9zc3Rlcm0+QkJMQVlFUlNfRkVUQ0hfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNldHMgdGhlIGJhc2UgbG9jYXRpb24gd2hlcmUgbGF5ZXJzIGFyZSBzdG9yZWQuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgbG9jYXRpb24gaXMgc2V0IHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0NPUkVCQVNFfTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNldHRpbmcgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLWxheWVycyBsYXllcmluZGV4LWZldGNoPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIHRlbGxzIDxmaWxlbmFtZT5iaXRiYWtlLWxheWVyczwvZmlsZW5hbWU+IHdoZXJlIHRvIHBsYWNlCisgICAgICAgICAgICAgICAgICAgIHRoZSBmZXRjaGVkIGxheWVycy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQk1BU0snPjxnbG9zc3Rlcm0+QkJNQVNLPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFByZXZlbnRzIEJpdEJha2UgZnJvbSBwcm9jZXNzaW5nIHJlY2lwZXMgYW5kIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICBhcHBlbmQgZmlsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+QkJNQVNLPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgdG8gImhpZGUiIHRoZXNlIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGlnbm9yZXMgYW55IHJlY2lwZSBvciByZWNpcGUgYXBwZW5kIGZpbGVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2ggdGhlIGV4cHJlc3Npb24uCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGFzIGlmIEJpdEJha2UgZG9lcyBub3Qgc2VlIHRoZW0gYXQgYWxsLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIG1hdGNoaW5nIGZpbGVzIGFyZSBub3QgcGFyc2VkIG9yIG90aGVyd2lzZQorICAgICAgICAgICAgICAgICAgICB1c2VkIGJ5IEJpdEJha2UuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgeW91IHByb3ZpZGUgaXMgcGFzc2VkIHRvIFB5dGhvbidzIHJlZ3VsYXIKKyAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiBjb21waWxlci4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGV4cHJlc3Npb24gaXMgY29tcGFyZWQgYWdhaW5zdCB0aGUgZnVsbCBwYXRocyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBjb21wbGV0ZSBzeW50YXggaW5mb3JtYXRpb24sIHNlZSBQeXRob24ncworICAgICAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uIGF0CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvcmVsZWFzZS8yLjMvbGliL3JlLXN5bnRheC5odG1sJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHVzZXMgYSBjb21wbGV0ZSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICAgICAgdG8gdGVsbCBCaXRCYWtlIHRvIGlnbm9yZSBhbGwgcmVjaXBlIGFuZCByZWNpcGUgYXBwZW5kCisgICAgICAgICAgICAgICAgICAgIGZpbGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS10aS9yZWNpcGVzLW1pc2MvPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCTUFTSyA9ICJtZXRhLXRpL3JlY2lwZXMtbWlzYy8iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gbWFzayBvdXQgbXVsdGlwbGUgZGlyZWN0b3JpZXMgb3IgcmVjaXBlcywKKyAgICAgICAgICAgICAgICAgICAgdXNlIHRoZSB2ZXJ0aWNhbCBiYXIgdG8gc2VwYXJhdGUgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgICAgICAgICAgICAgICAgICBmcmFnbWVudHMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbmV4dCBleGFtcGxlIG1hc2tzIG91dCBtdWx0aXBsZSBkaXJlY3RvcmllcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgaW5kaXZpZHVhbCByZWNpcGVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCTUFTSyA9ICJtZXRhLXRpL3JlY2lwZXMtbWlzYy98bWV0YS10aS9yZWNpcGVzLXRpL3BhY2thZ2Vncm91cC8iCisgICAgIEJCTUFTSyAuPSAifC4qbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvIgorICAgICBCQk1BU0sgLj0gInwuKm9wZW5sZGFwIgorICAgICBCQk1BU0sgLj0gInwuKm9wZW5jdiIKKyAgICAgQkJNQVNLIC49ICJ8Lipsem1hIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIE5vdGljZSBob3cgdGhlIHZlcnRpY2FsIGJhciBpcyB1c2VkIHRvIGFwcGVuZCB0aGUgZnJhZ21lbnRzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gc3BlY2lmeWluZyBhIGRpcmVjdG9yeSBuYW1lLCB1c2UgdGhlIHRyYWlsaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBzbGFzaCBjaGFyYWN0ZXIgdG8gZW5zdXJlIHlvdSBtYXRjaCBqdXN0IHRoYXQgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJQQVRIJz48Z2xvc3N0ZXJtPkJCUEFUSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBVc2VkIGJ5IEJpdEJha2UgdG8gbG9jYXRlIGNsYXNzCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikgYW5kIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+KSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBhbmFsb2dvdXMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBydW4gQml0QmFrZSBmcm9tIGEgZGlyZWN0b3J5IG91dHNpZGUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGRpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgeW91IG11c3QgYmUgc3VyZSB0byBzZXQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+IHRvIHBvaW50IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIFNldCB0aGUgdmFyaWFibGUgYXMgeW91IHdvdWxkIGFueSBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBydW4gQml0QmFrZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIEJCUEFUSD0iPHJlcGxhY2VhYmxlPmJ1aWxkX2RpcmVjdG9yeTwvcmVwbGFjZWFibGU+IgorICAgICAkIGV4cG9ydCBCQlBBVEgKKyAgICAgJCBiaXRiYWtlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJTRVJWRVInPjxnbG9zc3Rlcm0+QkJTRVJWRVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBzZXJ2ZXIgdGhhdCBydW5zIG1lbW9yeS1yZXNpZGVudCBCaXRCYWtlLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgaXMgb25seSB1c2VkIHdoZW4geW91IGVtcGxveSBtZW1vcnktcmVzaWRlbnQKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQlZFUlNJT05TJz48Z2xvc3N0ZXJtPkJCVkVSU0lPTlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWxsb3dzIGEgc2luZ2xlIHJlY2lwZSB0byBidWlsZCBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBhCisgICAgICAgICAgICAgICAgICAgIHByb2plY3QgZnJvbSBhIHNpbmdsZSByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGFsc28gYWJsZSB0byBzcGVjaWZ5IGNvbmRpdGlvbmFsIG1ldGFkYXRhCisgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItT1ZFUlJJREVTJz48ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG1lY2hhbmlzbSBmb3IgYSBzaW5nbGUgdmVyc2lvbiBvciBmb3IgYW4gb3B0aW9uYWxseSBuYW1lZAorICAgICAgICAgICAgICAgICAgICByYW5nZSBvZiB2ZXJzaW9ucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gPGZpbGVuYW1lPkJCVkVSU0lPTlM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndmFyaWFudHMtY2xhc3MtZXh0ZW5zaW9uLW1lY2hhbmlzbSc+VmFyaWFudHMgLSBDbGFzcyBFeHRlbnNpb24gTWVjaGFuaXNtPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CSVRCQUtFX1VJJz48Z2xvc3N0ZXJtPkJJVEJBS0VfVUk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVXNlZCB0byBzcGVjaWZ5IHRoZSBVSSBtb2R1bGUgdG8gdXNlIHdoZW4gcnVubmluZyBCaXRCYWtlLgorICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGlzIHZhcmlhYmxlIGlzIGVxdWl2YWxlbnQgdG8gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tdTwvZmlsZW5hbWU+IGNvbW1hbmQtbGluZSBvcHRpb24uCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3Qgc2V0IHRoaXMgdmFyaWFibGUgaW4gdGhlIGV4dGVybmFsIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgICAgICBpbiBvcmRlciBmb3IgaXQgdG8gd29yay4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxETkFNRSc+PGdsb3NzdGVybT5CVUlMRE5BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQSBuYW1lIGFzc2lnbmVkIHRvIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgZGVmYXVsdHMgdG8gYSBkYXRldGltZSBzdGFtcCBvZiB3aGVuIHRoZSBidWlsZCB3YXMKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRlZCBidXQgY2FuIGJlIGRlZmluZWQgYnkgdGhlIG1ldGFkYXRhLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJaUkRJUic+PGdsb3NzdGVybT5CWlJESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBmaWxlcyBjaGVja2VkIG91dCBvZiBhIEJhemFhcgorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gYXJlIHN0b3JlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktYyc+PHRpdGxlPkM8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ0FDSEUnPjxnbG9zc3Rlcm0+Q0FDSEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgQml0QmFrZSB1c2VzIHRvIHN0b3JlIGEgY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIG1ldGFkYXRhIHNvIGl0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyc2VkIGV2ZXJ5CisgICAgICAgICAgICAgICAgICAgIHRpbWUgQml0QmFrZSBpcyBzdGFydGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNWU0RJUic+PGdsb3NzdGVybT5DVlNESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBmaWxlcyBjaGVja2VkIG91dCB1bmRlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgQ1ZTIHN5c3RlbSBhcmUgc3RvcmVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1kJz48dGl0bGU+RDwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERUZBVUxUX1BSRUZFUkVOQ0UnPjxnbG9zc3Rlcm0+REVGQVVMVF9QUkVGRVJFTkNFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIHdlYWsgYmlhcyBmb3IgcmVjaXBlIHNlbGVjdGlvbiBwcmlvcml0eS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtb3N0IGNvbW1vbiB1c2FnZSBvZiB0aGlzIGlzIHZhcmlhYmxlIGlzIHRvIHNldAorICAgICAgICAgICAgICAgICAgICBpdCB0byAiLTEiIHdpdGhpbiBhIHJlY2lwZSBmb3IgYSBkZXZlbG9wbWVudCB2ZXJzaW9uIG9mIGEKKyAgICAgICAgICAgICAgICAgICAgcGllY2Ugb2Ygc29mdHdhcmUuCisgICAgICAgICAgICAgICAgICAgIFVzaW5nIHRoZSB2YXJpYWJsZSBpbiB0aGlzIHdheSBjYXVzZXMgdGhlIHN0YWJsZSB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSByZWNpcGUgdG8gYnVpbGQgYnkgZGVmYXVsdCBpbiB0aGUgYWJzZW5jZSBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBSRUZFUlJFRF9WRVJTSU9OJz5QUkVGRVJSRURfVkVSU0lPTjwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBiZWluZyB1c2VkIHRvIGJ1aWxkIHRoZSBkZXZlbG9wbWVudCB2ZXJzaW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJpYXMgcHJvdmlkZWQgYnkgPGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIHdlYWsgYW5kIGlzIG92ZXJyaWRkZW4gYnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1CQkZJTEVfUFJJT1JJVFknPkJCRklMRV9QUklPUklUWTwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpZiB0aGF0IHZhcmlhYmxlIGlzIGRpZmZlcmVudCBiZXR3ZWVuIHR3byBsYXllcnMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBjb250YWluIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgc2FtZSByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItREVQRU5EUyc+PGdsb3NzdGVybT5ERVBFTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIGEgcmVjaXBlJ3MgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gb3RoZXIgcmVjaXBlIGZpbGVzKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2lkZXIgdGhpcyBzaW1wbGUgZXhhbXBsZSBmb3IgdHdvIHJlY2lwZXMgbmFtZWQgImEiIGFuZAorICAgICAgICAgICAgICAgICAgICAiYiIgdGhhdCBwcm9kdWNlIHNpbWlsYXJseSBuYW1lZCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgYXBwZWFycyBpbiB0aGUgImEiIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBFTkRTID0gImIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSwgdGhlIGRlcGVuZGVuY3kgaXMgc3VjaCB0aGF0IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT4gdGFzayBmb3IgcmVjaXBlICJhIgorICAgICAgICAgICAgICAgICAgICBkZXBlbmRzIG9uIHRoZSA8ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc3lzcm9vdDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgb2YgcmVjaXBlICJiIi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBtZWFucyBhbnl0aGluZyB0aGF0IHJlY2lwZSAiYiIgcHV0cyBpbnRvIHN5c3Jvb3QKKyAgICAgICAgICAgICAgICAgICAgaXMgYXZhaWxhYmxlIHdoZW4gcmVjaXBlICJhIiBpcyBjb25maWd1cmluZyBpdHNlbGYuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBydW50aW1lIGRlcGVuZGVuY2llcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERVNDUklQVElPTic+PGdsb3NzdGVybT5ERVNDUklQVElPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIGxvbmcgZGVzY3JpcHRpb24gZm9yIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRExfRElSJz48Z2xvc3N0ZXJtPkRMX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgY2VudHJhbCBkb3dubG9hZCBkaXJlY3RvcnkgdXNlZCBieSB0aGUgYnVpbGQgcHJvY2VzcyB0bworICAgICAgICAgICAgICAgICAgICBzdG9yZSBkb3dubG9hZHMuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIDxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPiBnZXRzIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIHN1aXRhYmxlIGZvciBtaXJyb3JpbmcgZm9yIGV2ZXJ5dGhpbmcgZXhjZXB0IEdpdAorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRhcmJhbGxzIG9mIEdpdCByZXBvc2l0b3JpZXMsIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyc+PGZpbGVuYW1lPkJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorCisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktZSc+PHRpdGxlPkU8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVhDTFVERV9GUk9NX1dPUkxEJz48Z2xvc3N0ZXJtPkVYQ0xVREVfRlJPTV9XT1JMRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEaXJlY3RzIEJpdEJha2UgdG8gZXhjbHVkZSBhIHJlY2lwZSBmcm9tIHdvcmxkIGJ1aWxkcyAoaS5lLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSB3b3JsZDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgRHVyaW5nIHdvcmxkIGJ1aWxkcywgQml0QmFrZSBsb2NhdGVzLCBwYXJzZXMgYW5kIGJ1aWxkcyBhbGwKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlcyBmb3VuZCBpbiBldmVyeSBsYXllciBleHBvc2VkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gZXhjbHVkZSBhIHJlY2lwZSBmcm9tIGEgd29ybGQgYnVpbGQgdXNpbmcgdGhpcyB2YXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgc2V0IHRoZSB2YXJpYWJsZSB0byAiMSIgaW4gdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgUmVjaXBlcyBhZGRlZCB0byA8ZmlsZW5hbWU+RVhDTFVERV9GUk9NX1dPUkxEPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbWF5IHN0aWxsIGJlIGJ1aWx0IGR1cmluZyBhIHdvcmxkIGJ1aWxkIGluIG9yZGVyIHRvIHNhdGlzZnkKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzIG9mIG90aGVyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgIEFkZGluZyBhIHJlY2lwZSB0byA8ZmlsZW5hbWU+RVhDTFVERV9GUk9NX1dPUkxEPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb25seSBlbnN1cmVzIHRoYXQgdGhlIHJlY2lwZSBpcyBub3QgZXhwbGljaXRseSBhZGRlZAorICAgICAgICAgICAgICAgICAgICB0byB0aGUgbGlzdCBvZiBidWlsZCB0YXJnZXRzIGluIGEgd29ybGQgYnVpbGQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWYnPjx0aXRsZT5GPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZBS0VST09UJz48Z2xvc3N0ZXJtPkZBS0VST09UPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICBDb250YWlucyB0aGUgY29tbWFuZCB0byB1c2Ugd2hlbiBydW5uaW5nIGEgc2hlbGwgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgICBpbiBhIGZha2Vyb290IGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5GQUtFUk9PVDwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIG9ic29sZXRlCisgICAgICAgICAgICAgICAgICAgICBhbmQgaGFzIGJlZW4gcmVwbGFjZWQgYnkgdGhlIG90aGVyCisgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RkFLRVJPT1QqPC9maWxlbmFtZT4gdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZXNlIGVudHJpZXMgaW4gdGhlIGdsb3NzYXJ5IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZBS0VST09UQkFTRUVOVic+PGdsb3NzdGVybT5GQUtFUk9PVEJBU0VFTlY8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgIExpc3RzIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgd2hlbiBleGVjdXRpbmcKKyAgICAgICAgICAgICAgICAgICAgIHRoZSBjb21tYW5kIGRlZmluZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GQUtFUk9PVENNRCc+PGZpbGVuYW1lPkZBS0VST09UQ01EPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICB0aGF0IHN0YXJ0cyB0aGUgYml0YmFrZS13b3JrZXIgcHJvY2VzcworICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGZha2Vyb290IGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZBS0VST09UQ01EJz48Z2xvc3N0ZXJtPkZBS0VST09UQ01EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICBDb250YWlucyB0aGUgY29tbWFuZCB0aGF0IHN0YXJ0cyB0aGUgYml0YmFrZS13b3JrZXIKKyAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MgaW4gdGhlIGZha2Vyb290IGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZBS0VST09URElSUyc+PGdsb3NzdGVybT5GQUtFUk9PVERJUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgIExpc3RzIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZSBiZWZvcmUgcnVubmluZyBhIHRhc2sgaW4KKyAgICAgICAgICAgICAgICAgICAgIHRoZSBmYWtlcm9vdCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1GQUtFUk9PVEVOVic+PGdsb3NzdGVybT5GQUtFUk9PVEVOVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgTGlzdHMgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCB3aGVuIHJ1bm5pbmcgYSB0YXNrCisgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgZmFrZXJvb3QgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgICAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kCisgICAgICAgICAgICAgICAgICAgICB0aGUgZmFrZXJvb3QgZW52aXJvbm1lbnQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GQUtFUk9PVEJBU0VFTlYnPjxmaWxlbmFtZT5GQUtFUk9PVEJBU0VFTlY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZBS0VST09UTk9FTlYnPjxnbG9zc3Rlcm0+RkFLRVJPT1ROT0VOVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgTGlzdHMgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCB3aGVuIHJ1bm5pbmcgYSB0YXNrCisgICAgICAgICAgICAgICAgICAgICB0aGF0IGlzIG5vdCBpbiB0aGUgZmFrZXJvb3QgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgICAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kCisgICAgICAgICAgICAgICAgICAgICB0aGUgZmFrZXJvb3QgZW52aXJvbm1lbnQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GQUtFUk9PVEVOVic+PGZpbGVuYW1lPkZBS0VST09URU5WPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1GRVRDSENNRCc+PGdsb3NzdGVybT5GRVRDSENNRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBjb21tYW5kIHRoZSBCaXRCYWtlIGZldGNoZXIgbW9kdWxlCisgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVzIHdoZW4gcnVubmluZyBmZXRjaCBvcGVyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byB1c2UgYW4gb3ZlcnJpZGUgc3VmZml4IHdoZW4geW91IHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgKGUuZy4gPGZpbGVuYW1lPkZFVENIQ01EX2dpdDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG9yIDxmaWxlbmFtZT5GRVRDSENNRF9zdm48L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRklMRSc+PGdsb3NzdGVybT5GSUxFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyBhdCB0aGUgY3VycmVudCBmaWxlLgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHNldHMgdGhpcyB2YXJpYWJsZSBkdXJpbmcgdGhlIHBhcnNpbmcgcHJvY2VzcworICAgICAgICAgICAgICAgICAgICB0byBpZGVudGlmeSB0aGUgZmlsZSBiZWluZyBwYXJzZWQuCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgYWxzbyBzZXRzIHRoaXMgdmFyaWFibGUgd2hlbiBhIHJlY2lwZSBpcyBiZWluZworICAgICAgICAgICAgICAgICAgICBleGVjdXRlZCB0byBpZGVudGlmeSB0aGUgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRklMRVNESVInPjxnbG9zc3Rlcm0+RklMRVNESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGRpcmVjdG9yaWVzIEJpdEJha2UgdXNlcyB3aGVuIHNlYXJjaGluZyBmb3IKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hlcyBhbmQgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSAibG9jYWwiIGZldGNoZXIgbW9kdWxlIHVzZXMgdGhlc2UgZGlyZWN0b3JpZXMgd2hlbgorICAgICAgICAgICAgICAgICAgICBoYW5kbGluZyA8ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+IFVSTHMgaWYgdGhlIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgd2FzIG5vdCBmb3VuZCB1c2luZworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVNQQVRIJz48ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+RklMRVNESVI8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZCBhbmQgeW91IHNob3VsZCB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPiBpbiBhbGwgbmV3IGNvZGUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1GSUxFU1BBVEgnPjxnbG9zc3Rlcm0+RklMRVNQQVRIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBkaXJlY3RvcmllcyBCaXRCYWtlIHVzZXMgd2hlbiBzZWFyY2hpbmcgZm9yCisgICAgICAgICAgICAgICAgICAgIHBhdGNoZXMgYW5kIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgImxvY2FsIiBmZXRjaGVyIG1vZHVsZSB1c2VzIHRoZXNlIGRpcmVjdG9yaWVzIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgaGFuZGxpbmcgPGZpbGVuYW1lPmZpbGU6Ly88L2ZpbGVuYW1lPiBVUkxzLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgYmVoYXZlcyBsaWtlIGEgc2hlbGwgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIGlzIGEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdGhhdAorICAgICAgICAgICAgICAgICAgICBhcmUgc2VhcmNoZWQgbGVmdC10by1yaWdodCBpbiBvcmRlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1nJz48dGl0bGU+RzwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1HSVRESVInPjxnbG9zc3Rlcm0+R0lURElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggYSBsb2NhbCBjb3B5IG9mIGEgR2l0IHJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgaXMgc3RvcmVkIHdoZW4gaXQgaXMgY2xvbmVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWgnPjx0aXRsZT5IPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUhHRElSJz48Z2xvc3N0ZXJtPkhHRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggZmlsZXMgY2hlY2tlZCBvdXQgb2YgYSBNZXJjdXJpYWwKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIGFyZSBzdG9yZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSE9NRVBBR0UnPjxnbG9zc3Rlcm0+SE9NRVBBR0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5XZWJzaXRlIHdoZXJlIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNvZnR3YXJlIHRoZSByZWNpcGUgaXMgYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgY2FuIGJlIGZvdW5kLjwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1pJz48dGl0bGU+STwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTkhFUklUJz48Z2xvc3N0ZXJtPklOSEVSSVQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHRoZSBuYW1lZCBjbGFzcyB0byBiZSBpbmhlcml0ZWQgYXQKKyAgICAgICAgICAgICAgICAgICAgdGhpcyBwb2ludCBkdXJpbmcgcGFyc2luZy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGlzIG9ubHkgdmFsaWQgaW4gY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCis8IS0tCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktaic+PHRpdGxlPko8L3RpdGxlPgorICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1rJz48dGl0bGU+SzwvdGl0bGU+CisgICAgPC9nbG9zc2Rpdj4KKy0tPgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktbCc+PHRpdGxlPkw8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTEFZRVJERVBFTkRTJz48Z2xvc3N0ZXJtPkxBWUVSREVQRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPkxpc3RzIHRoZSBsYXllcnMsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHVwb24gd2hpY2ggdGhpcyByZWNpcGUgZGVwZW5kcy4KKyAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWxseSwgeW91IGNhbiBzcGVjaWZ5IGEgc3BlY2lmaWMgbGF5ZXIgdmVyc2lvbiBmb3IgYSBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgICAgIGJ5IGFkZGluZyBpdCB0byB0aGUgZW5kIG9mIHRoZSBsYXllciBuYW1lIHdpdGggYSBjb2xvbiwgKGUuZy4gImFub3RoZXJsYXllcjozIgorICAgICAgICAgICAgICAgICAgICB0byBiZSBjb21wYXJlZCBhZ2FpbnN0CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MQVlFUlZFUlNJT04nPjxmaWxlbmFtZT5MQVlFUlZFUlNJT048L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+X2Fub3RoZXJsYXllcjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGluIHRoaXMgY2FzZSkuCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgcHJvZHVjZXMgYW4gZXJyb3IgaWYgYW55IGRlcGVuZGVuY3kgaXMgbWlzc2luZyBvcgorICAgICAgICAgICAgICAgICAgICB0aGUgdmVyc2lvbiBudW1iZXJzIGRvIG5vdCBtYXRjaCBleGFjdGx5IChpZiBzcGVjaWZpZWQpLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IHVzZSB0aGlzIHZhcmlhYmxlIGluIHRoZSA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgYWxzbyB1c2UgdGhlIHNwZWNpZmljIGxheWVyIG5hbWUgYXMgYSBzdWZmaXgKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHZhcmlhYmxlIChlLmcuIDxmaWxlbmFtZT5MQVlFUkRFUEVORFNfbXlsYXllcjwvZmlsZW5hbWU+KS48L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MQVlFUkRJUic+PGdsb3NzdGVybT5MQVlFUkRJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPldoZW4gdXNlZCBpbnNpZGUgdGhlIDxmaWxlbmFtZT5sYXllci5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICBmaWxlLCB0aGlzIHZhcmlhYmxlIHByb3ZpZGVzIHRoZSBwYXRoIG9mIHRoZSBjdXJyZW50IGxheWVyLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIG5vdCBhdmFpbGFibGUgb3V0c2lkZSBvZiA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCByZWZlcmVuY2VzIGFyZSBleHBhbmRlZCBpbW1lZGlhdGVseSB3aGVuIHBhcnNpbmcgb2YgdGhlIGZpbGUgY29tcGxldGVzLjwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUxBWUVSVkVSU0lPTic+PGdsb3NzdGVybT5MQVlFUlZFUlNJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5PcHRpb25hbGx5IHNwZWNpZmllcyB0aGUgdmVyc2lvbiBvZiBhIGxheWVyIGFzIGEgc2luZ2xlIG51bWJlci4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhpcyB2YXJpYWJsZSB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxBWUVSREVQRU5EUyc+PGZpbGVuYW1lPkxBWUVSREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgYW5vdGhlciBsYXllciBpbiBvcmRlciB0byBkZXBlbmQgb24gYSBzcGVjaWZpYyB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBsYXllci48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSB1c2UgdGhpcyB2YXJpYWJsZSBpbiB0aGUgPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGFsc28gdXNlIHRoZSBzcGVjaWZpYyBsYXllciBuYW1lIGFzIGEgc3VmZml4CisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSB2YXJpYWJsZSAoZS5nLiA8ZmlsZW5hbWU+TEFZRVJERVBFTkRTX215bGF5ZXI8L2ZpbGVuYW1lPikuPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTElDRU5TRSc+PGdsb3NzdGVybT5MSUNFTlNFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsaXN0IG9mIHNvdXJjZSBsaWNlbnNlcyBmb3IgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktbSc+PHRpdGxlPk08L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTUlSUk9SUyc+PGdsb3NzdGVybT5NSVJST1JTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhZGRpdGlvbmFsIHBhdGhzIGZyb20gd2hpY2ggQml0QmFrZSBnZXRzIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHRoZSBidWlsZCBzeXN0ZW0gc2VhcmNoZXMgZm9yIHNvdXJjZSBjb2RlLCBpdCBmaXJzdAorICAgICAgICAgICAgICAgICAgICB0cmllcyB0aGUgbG9jYWwgZG93bmxvYWQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBJZiB0aGF0IGxvY2F0aW9uIGZhaWxzLCB0aGUgYnVpbGQgc3lzdGVtIHRyaWVzIGxvY2F0aW9ucworICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgdGhlIHVwc3RyZWFtIHNvdXJjZSwgYW5kIHRoZW4gbG9jYXRpb25zIHNwZWNpZmllZCBieQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TUlSUk9SUzwvZmlsZW5hbWU+IGluIHRoYXQgb3JkZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTVVMVElfUFJPVklERVJfV0hJVEVMSVNUJz48Z2xvc3N0ZXJtPk1VTFRJX1BST1ZJREVSX1dISVRFTElTVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBbGxvd3MgeW91IHRvIHN1cHByZXNzIEJpdEJha2Ugd2FybmluZ3MgY2F1c2VkIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmcgdHdvIHNlcGFyYXRlIHJlY2lwZXMgdGhhdCBwcm92aWRlIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgICAgIG91dHB1dC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0YmFrZSBub3JtYWxseSBpc3N1ZXMgYSB3YXJuaW5nIHdoZW4gYnVpbGRpbmcgdHdvCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCByZWNpcGVzIHdoZXJlIGVhY2ggcHJvdmlkZXMgdGhlIHNhbWUgb3V0cHV0LgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNjZW5hcmlvIGlzIHVzdWFsbHkgc29tZXRoaW5nIHRoZSB1c2VyIGRvZXMgbm90CisgICAgICAgICAgICAgICAgICAgIHdhbnQuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGNhc2VzIGRvIGV4aXN0IHdoZXJlIGl0IG1ha2VzIHNlbnNlLCBwYXJ0aWN1bGFybHkKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT52aXJ0dWFsLyo8L2ZpbGVuYW1lPiBuYW1lc3BhY2UuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgdmFyaWFibGUgdG8gc3VwcHJlc3MgQml0QmFrZSdzIHdhcm5pbmdzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyB1c2UgdGhlIHZhcmlhYmxlLCBsaXN0IHByb3ZpZGVyIG5hbWVzIChlLmcuCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBuYW1lcywgPGZpbGVuYW1lPnZpcnR1YWwva2VybmVsPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworPCEtLQorICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LW4nPjx0aXRsZT5OPC90aXRsZT4KKyAgICA8L2dsb3NzZGl2PgorLS0+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1vJz48dGl0bGU+TzwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1PVkVSUklERVMnPjxnbG9zc3Rlcm0+T1ZFUlJJREVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4gdG8gY29udHJvbAorICAgICAgICAgICAgICAgICAgICB3aGF0IHZhcmlhYmxlcyBhcmUgb3ZlcnJpZGRlbiBhZnRlciBCaXRCYWtlIHBhcnNlcworICAgICAgICAgICAgICAgICAgICByZWNpcGVzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYSBzaW1wbGUgZXhhbXBsZSB0aGF0IHVzZXMgYW4gb3ZlcnJpZGVzCisgICAgICAgICAgICAgICAgICAgIGxpc3QgYmFzZWQgb24gbWFjaGluZSBhcmNoaXRlY3R1cmVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE9WRVJSSURFUyA9ICJhcm06eDg2Om1pcHM6cG93ZXJwYyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjb25kaXRpb25hbC1zeW50YXgtb3ZlcnJpZGVzJz5Db25kaXRpb25hbCBTeW50YXggKE92ZXJyaWRlcyk8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktcCc+PHRpdGxlPlA8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRVMnPjxnbG9zc3Rlcm0+UEFDS0FHRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgbGlzdCBvZiBwYWNrYWdlcyB0aGUgcmVjaXBlIGNyZWF0ZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRVNfRFlOQU1JQyc+PGdsb3NzdGVybT5QQUNLQUdFU19EWU5BTUlDPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgcHJvbWlzZSB0aGF0IHlvdXIgcmVjaXBlIHNhdGlzZmllcyBydW50aW1lIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICBmb3Igb3B0aW9uYWwgbW9kdWxlcyB0aGF0IGFyZSBmb3VuZCBpbiBvdGhlciByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFDS0FHRVNfRFlOQU1JQzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IGFjdHVhbGx5IHNhdGlzZnkgdGhlIGRlcGVuZGVuY2llcywgaXQgb25seSBzdGF0ZXMgdGhhdAorICAgICAgICAgICAgICAgICAgICB0aGV5IHNob3VsZCBiZSBzYXRpc2ZpZWQuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiBhIGhhcmQsIHJ1bnRpbWUgZGVwZW5kZW5jeQorICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICAgICAgICAgIG9mIGFub3RoZXIgcGFja2FnZSBpcyBzYXRpc2ZpZWQgZHVyaW5nIHRoZSBidWlsZAorICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZSA8ZmlsZW5hbWU+UEFDS0FHRVNfRFlOQU1JQzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCBidXQgYSBwYWNrYWdlIHdpdGggdGhlIG1vZHVsZSBuYW1lIGlzIG5ldmVyIGFjdHVhbGx5CisgICAgICAgICAgICAgICAgICAgIHByb2R1Y2VkLCB0aGVuIHRoZSBvdGhlciBwYWNrYWdlIHdpbGwgYmUgYnJva2VuLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBFJz48Z2xvc3N0ZXJtPlBFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBlcG9jaCBvZiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIHZhcmlhYmxlIGlzIHVuc2V0LgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgaXMgdXNlZCB0byBtYWtlIHVwZ3JhZGVzIHBvc3NpYmxlIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb25pbmcgc2NoZW1lIGNoYW5nZXMgaW4gc29tZSBiYWNrd2FyZHMgaW5jb21wYXRpYmxlCisgICAgICAgICAgICAgICAgICAgIHdheS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QRVJTSVNURU5UX0RJUic+PGdsb3NzdGVybT5QRVJTSVNURU5UX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSBCaXRCYWtlIHVzZXMgdG8gc3RvcmUgZGF0YSB0aGF0CisgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBidWlsZHMuCisgICAgICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIHRoZSBkYXRhIHN0b3JlZCBpcyB0aGUgZGF0YSB0aGF0IHVzZXMKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSdzIHBlcnNpc3RlbnQgZGF0YSBBUEkgYW5kIHRoZSBkYXRhIHVzZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIFBSIFNlcnZlciBhbmQgUFIgU2VydmljZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QRic+PGdsb3NzdGVybT5QRjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHJlY2lwZSBvciBwYWNrYWdlIG5hbWUgYW5kIGluY2x1ZGVzIGFsbCB2ZXJzaW9uIGFuZCByZXZpc2lvbgorICAgICAgICAgICAgICAgICAgICBudW1iZXJzIChpLmUuIDxmaWxlbmFtZT5lZ2xpYmMtMi4xMy1yMjArc3ZucjE1NTA4LzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmFzaC00LjItcjEvPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBOJz48Z2xvc3N0ZXJtPlBOPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIHJlY2lwZSBuYW1lLjwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBSJz48Z2xvc3N0ZXJtPlBSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIHJldmlzaW9uIG9mIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBSRUZFUlJFRF9QUk9WSURFUic+PGdsb3NzdGVybT5QUkVGRVJSRURfUFJPVklERVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyB3aGljaCByZWNpcGUgc2hvdWxkIGJlIGdpdmVuIHByZWZlcmVuY2Ugd2hlbgorICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSByZWNpcGVzIHByb3ZpZGUgdGhlIHNhbWUgaXRlbS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBhbHdheXMgc3VmZml4IHRoZSB2YXJpYWJsZSB3aXRoIHRoZSBuYW1lIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCBpdGVtLCBhbmQgeW91IHNob3VsZCBzZXQgaXQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSByZWNpcGUgdG8gd2hpY2ggeW91IHdhbnQgdG8gZ2l2ZSBwcmVjZWRlbmNlLgorICAgICAgICAgICAgICAgICAgICBTb21lIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAibGludXgteW9jdG8iCisgICAgIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIgPSAieHNlcnZlci14Zjg2IgorICAgICBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbCA/PSAibWVzYSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBSRUZFUlJFRF9QUk9WSURFUlMnPjxnbG9zc3Rlcm0+UFJFRkVSUkVEX1BST1ZJREVSUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIHdoaWNoIHJlY2lwZSBzaG91bGQgYmUgZ2l2ZW4gcHJlZmVyZW5jZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgY2FzZXMgd2hlcmUgbXVsdGlwbGUgcmVjaXBlcyBwcm92aWRlIHRoZSBzYW1lIGl0ZW0uCisgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uYWxseSwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBSRUZFUlJFRF9QUk9WSURFUlM8L2ZpbGVuYW1lPiBpcyBpZGVudGljYWwgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSRUZFUlJFRF9QUk9WSURFUic+PGZpbGVuYW1lPlBSRUZFUlJFRF9QUk9WSURFUjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhlIDxmaWxlbmFtZT5QUkVGRVJSRURfUFJPVklERVJTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgbGV0cyB5b3UgZGVmaW5lIHByZWZlcmVuY2VzIGZvciBtdWx0aXBsZQorICAgICAgICAgICAgICAgICAgICBzaXR1YXRpb25zIHVzaW5nIHRoZSBmb2xsb3dpbmcgZm9ybToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVGRVJSRURfUFJPVklERVJTID0gInh4eDp5eXkgYWFhOmJiYiAuLi4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBmb3JtIGlzIGEgY29udmVuaWVudCByZXBsYWNlbWVudCBmb3IgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVGRVJSRURfUFJPVklERVJfeHh4ID0gInl5eSIKKyAgICAgUFJFRkVSUkVEX1BST1ZJREVSX2FhYSA9ICJiYmIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QUkVGRVJSRURfVkVSU0lPTic+PGdsb3NzdGVybT5QUkVGRVJSRURfVkVSU0lPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmVyc2lvbnMgb2YgcmVjaXBlcyBhdmFpbGFibGUsIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZGV0ZXJtaW5lcyB3aGljaCByZWNpcGUgc2hvdWxkIGJlIGdpdmVuIHByZWZlcmVuY2UuCisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGFsd2F5cyBzdWZmaXggdGhlIHZhcmlhYmxlIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHlvdSB3YW50IHRvIHNlbGVjdCwgYW5kIHlvdSBzaG91bGQgc2V0CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFjY29yZGluZ2x5IGZvciBwcmVjZWRlbmNlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgIjxmaWxlbmFtZT4lPC9maWxlbmFtZT4iIGNoYXJhY3RlciBhcyBhCisgICAgICAgICAgICAgICAgICAgIHdpbGRjYXJkIHRvIG1hdGNoIGFueSBudW1iZXIgb2YgY2hhcmFjdGVycywgd2hpY2ggY2FuIGJlCisgICAgICAgICAgICAgICAgICAgIHVzZWZ1bCB3aGVuIHNwZWNpZnlpbmcgdmVyc2lvbnMgdGhhdCBjb250YWluIGxvbmcgcmV2aXNpb24KKyAgICAgICAgICAgICAgICAgICAgbnVtYmVycyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGNoYW5nZS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgdHdvIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSRUZFUlJFRF9WRVJTSU9OX3B5dGhvbiA9ICIyLjcuMyIKKyAgICAgUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8gPSAiMy4xMCUiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QUkVNSVJST1JTJz48Z2xvc3N0ZXJtPlBSRU1JUlJPUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFkZGl0aW9uYWwgcGF0aHMgZnJvbSB3aGljaCBCaXRCYWtlIGdldHMgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlIGJ1aWxkIHN5c3RlbSBzZWFyY2hlcyBmb3Igc291cmNlIGNvZGUsIGl0IGZpcnN0CisgICAgICAgICAgICAgICAgICAgIHRyaWVzIHRoZSBsb2NhbCBkb3dubG9hZCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIElmIHRoYXQgbG9jYXRpb24gZmFpbHMsIHRoZSBidWlsZCBzeXN0ZW0gdHJpZXMgbG9jYXRpb25zCisgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYnkgPGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPiwgdGhlIHVwc3RyZWFtCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgYW5kIHRoZW4gbG9jYXRpb25zIHNwZWNpZmllZCBieQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUlSUk9SUyc+PGZpbGVuYW1lPk1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW4gdGhhdCBvcmRlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCB5b3Ugd291bGQgYWRkIGEgc3BlY2lmaWMgc2VydmVyIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIHRvIGF0dGVtcHQgYmVmb3JlIGFueSBvdGhlcnMgYnkgYWRkaW5nCisgICAgICAgICAgICAgICAgICAgIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgdG8geW91ciBjb25maWd1cmF0aW9uOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSRU1JUlJPUlNfcHJlcGVuZCA9ICJcCisgICAgIGdpdDovLy4qLy4qIGh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9zb3VyY2VzLyBcbiBcCisgICAgIGZ0cDovLy4qLy4qIGh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9zb3VyY2VzLyBcbiBcCisgICAgIGh0dHA6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4gXAorICAgICBodHRwczovLy4qLy4qIGh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9zb3VyY2VzLyBcbiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBjaGFuZ2VzIGNhdXNlIHRoZSBidWlsZCBzeXN0ZW0gdG8gaW50ZXJjZXB0CisgICAgICAgICAgICAgICAgICAgIEdpdCwgRlRQLCBIVFRQLCBhbmQgSFRUUFMgcmVxdWVzdHMgYW5kIGRpcmVjdCB0aGVtIHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+aHR0cDovLzwvZmlsZW5hbWU+IHNvdXJjZXMgbWlycm9yLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSA8ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+IFVSTHMgdG8gcG9pbnQKKyAgICAgICAgICAgICAgICAgICAgdG8gbG9jYWwgZGlyZWN0b3JpZXMgb3IgbmV0d29yayBzaGFyZXMgYXMgd2VsbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QUk9WSURFUyc+PGdsb3NzdGVybT5QUk9WSURFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgYWxpYXNlcyBieSB3aGljaCBhIHBhcnRpY3VsYXIgcmVjaXBlIGNhbiBiZQorICAgICAgICAgICAgICAgICAgICBrbm93bi4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgYSByZWNpcGUncyBvd24KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+UE48L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaXMgaW1wbGljaXRseSBhbHJlYWR5IGluIGl0cyA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBsaXN0LgorICAgICAgICAgICAgICAgICAgICBJZiBhIHJlY2lwZSB1c2VzIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbCBhbGlhc2VzIGFyZSBzeW5vbnltcyBmb3IgdGhlIHJlY2lwZSBhbmQgY2FuCisgICAgICAgICAgICAgICAgICAgIGJlIHVzZWZ1bCBzYXRpc2Z5aW5nIGRlcGVuZGVuY2llcyBvZiBvdGhlciByZWNpcGVzIGR1cmluZworICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQgYXMgc3BlY2lmaWVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+REVQRU5EUzwvbGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+IHN0YXRlbWVudCBmcm9tIGEgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIGZpbGUgPGZpbGVuYW1lPmxpYmF2XzAuOC4xMS5iYjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBST1ZJREVTICs9ICJsaWJwb3N0cHJvYyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4gc3RhdGVtZW50IHJlc3VsdHMgaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlICJsaWJhdiIgcmVjaXBlIGFsc28gYmVpbmcga25vd24gYXMgImxpYnBvc3Rwcm9jIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QUlNFUlZfSE9TVCc+PGdsb3NzdGVybT5QUlNFUlZfSE9TVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgbmV0d29yayBiYXNlZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlIGhvc3QgYW5kIHBvcnQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGhvdyB0aGUgPGZpbGVuYW1lPlBSU0VSVl9IT1NUPC9maWxlbmFtZT4gdmFyaWFibGUgaXMKKyAgICAgICAgICAgICAgICAgICAgc2V0OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSU0VSVl9IT1NUID0gImxvY2FsaG9zdDowIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGUgdmFyaWFibGUgaWYgeW91IHdhbnQgdG8gYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgICAgICBzdGFydCBhIGxvY2FsIFBSIHNlcnZpY2UuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0IDxmaWxlbmFtZT5QUlNFUlZfSE9TVDwvZmlsZW5hbWU+IHRvIG90aGVyCisgICAgICAgICAgICAgICAgICAgIHZhbHVlcyB0byB1c2UgYSByZW1vdGUgUFIgc2VydmljZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QVic+PGdsb3NzdGVybT5QVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPlRoZSB2ZXJzaW9uIG9mIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKzwhLS0KKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1xJz48dGl0bGU+UTwvdGl0bGU+CisgICAgPC9nbG9zc2Rpdj4KKy0tPgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktcic+PHRpdGxlPlI8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUkRFUEVORFMnPjxnbG9zc3Rlcm0+UkRFUEVORFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgYSBwYWNrYWdlJ3MgcnVudGltZSBkZXBlbmRlbmNpZXMgKGkuZS4gb3RoZXIgcGFja2FnZXMpCisgICAgICAgICAgICAgICAgICAgIHRoYXQgbXVzdCBiZSBpbnN0YWxsZWQgaW4gb3JkZXIgZm9yIHRoZSBidWlsdCBwYWNrYWdlIHRvIHJ1bgorICAgICAgICAgICAgICAgICAgICBjb3JyZWN0bHkuCisgICAgICAgICAgICAgICAgICAgIElmIGEgcGFja2FnZSBpbiB0aGlzIGxpc3QgY2Fubm90IGJlIGZvdW5kIGR1cmluZyB0aGUgYnVpbGQsCisgICAgICAgICAgICAgICAgICAgIHlvdSB3aWxsIGdldCBhIGJ1aWxkIGVycm9yLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBhcHBsaWVzCisgICAgICAgICAgICAgICAgICAgIHRvIHBhY2thZ2VzIGJlaW5nIGJ1aWx0LCB5b3Ugc2hvdWxkIGFsd2F5cyB1c2UgdGhlIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGluIGEgZm9ybSB3aXRoIGFuIGF0dGFjaGVkIHBhY2thZ2UgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGFyZSBidWlsZGluZyBhIGRldmVsb3BtZW50IHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBkZXBlbmRzIG9uIHRoZSA8ZmlsZW5hbWU+cGVybDwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgeW91IHdvdWxkIHVzZSB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSREVQRU5EU18ke1BOfS1kZXYgKz0gInBlcmwiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhlIGV4YW1wbGUsIHRoZSBkZXZlbG9wbWVudCBwYWNrYWdlIGRlcGVuZHMgb24KKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5wZXJsPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVGh1cywgdGhlIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGhhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7UE59LWRldjwvZmlsZW5hbWU+IHBhY2thZ2UgbmFtZSBhcyBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBzdXBwb3J0cyBzcGVjaWZ5aW5nIHZlcnNpb25lZCBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgICAgIEFsdGhvdWdoIHRoZSBzeW50YXggdmFyaWVzIGRlcGVuZGluZyBvbiB0aGUgcGFja2FnaW5nCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgQml0QmFrZSBoaWRlcyB0aGVzZSBkaWZmZXJlbmNlcyBmcm9tIHlvdS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgZ2VuZXJhbCBzeW50YXggdG8gc3BlY2lmeSB2ZXJzaW9ucyB3aXRoCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSREVQRU5EU18ke1BOfSA9ICI8cmVwbGFjZWFibGU+cGFja2FnZTwvcmVwbGFjZWFibGU+ICg8cmVwbGFjZWFibGU+b3BlcmF0b3I8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dmVyc2lvbjwvcmVwbGFjZWFibGU+KSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgPGZpbGVuYW1lPm9wZXJhdG9yPC9maWxlbmFtZT4sIHlvdSBjYW4gc3BlY2lmeSB0aGUKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgID0KKyAgICAgJmx0OworICAgICAmZ3Q7CisgICAgICZsdDs9CisgICAgICZndDs9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2V0cyB1cCBhIGRlcGVuZGVuY3kgb24gdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAxLjIgb3IgZ3JlYXRlciBvZiB0aGUgcGFja2FnZSA8ZmlsZW5hbWU+Zm9vPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUkRFUEVORFNfJHtQTn0gPSAiZm9vICg+PSAxLjIpIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBidWlsZC10aW1lIGRlcGVuZGVuY2llcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUlBST1ZJREVTJz48Z2xvc3N0ZXJtPlJQUk9WSURFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgcGFja2FnZSBuYW1lIGFsaWFzZXMgdGhhdCBhIHBhY2thZ2UgYWxzbyBwcm92aWRlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgYWxpYXNlcyBhcmUgdXNlZnVsIGZvciBzYXRpc2Z5aW5nIHJ1bnRpbWUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgIG9mIG90aGVyIHBhY2thZ2VzIGJvdGggZHVyaW5nIHRoZSBidWlsZCBhbmQgb24gdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAoYXMgc3BlY2lmaWVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPlJERVBFTkRTPC9saW5rPjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgQXMgd2l0aCBhbGwgcGFja2FnZS1jb250cm9sbGluZyB2YXJpYWJsZXMsIHlvdSBtdXN0IGFsd2F5cworICAgICAgICAgICAgICAgICAgIHVzZSB0aGUgdmFyaWFibGUgaW4gY29uanVuY3Rpb24gd2l0aCBhIHBhY2thZ2UgbmFtZSBvdmVycmlkZS4KKyAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSUFJPVklERVNfJHtQTn0gPSAid2lkZ2V0LWFiaS0yIgorICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1SUkVDT01NRU5EUyc+PGdsb3NzdGVybT5SUkVDT01NRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgcGFja2FnZXMgdGhhdCBleHRlbmRzIHRoZSB1c2FiaWxpdHkgb2YgYSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIGJlaW5nIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBUaGUgcGFja2FnZSBiZWluZyBidWlsdCBkb2VzIG5vdCBkZXBlbmQgb24gdGhpcyBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGluIG9yZGVyIHRvIHN1Y2Nlc3NmdWxseSBidWlsZCwgYnV0IG5lZWRzIHRoZW0gZm9yCisgICAgICAgICAgICAgICAgICAgIHRoZSBleHRlbmRlZCB1c2FiaWxpdHkuCisgICAgICAgICAgICAgICAgICAgIFRvIHNwZWNpZnkgcnVudGltZSBkZXBlbmRlbmNpZXMgZm9yIHBhY2thZ2VzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPlJERVBFTkRTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHN1cHBvcnRzIHNwZWNpZnlpbmcgdmVyc2lvbmVkIHJlY29tbWVuZHMuCisgICAgICAgICAgICAgICAgICAgIEFsdGhvdWdoIHRoZSBzeW50YXggdmFyaWVzIGRlcGVuZGluZyBvbiB0aGUgcGFja2FnaW5nCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgQml0QmFrZSBoaWRlcyB0aGVzZSBkaWZmZXJlbmNlcyBmcm9tIHlvdS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgZ2VuZXJhbCBzeW50YXggdG8gc3BlY2lmeSB2ZXJzaW9ucyB3aXRoCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPiB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSUkVDT01NRU5EU18ke1BOfSA9ICI8cmVwbGFjZWFibGU+cGFja2FnZTwvcmVwbGFjZWFibGU+ICg8cmVwbGFjZWFibGU+b3BlcmF0b3I8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dmVyc2lvbjwvcmVwbGFjZWFibGU+KSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgPGZpbGVuYW1lPm9wZXJhdG9yPC9maWxlbmFtZT4sIHlvdSBjYW4gc3BlY2lmeSB0aGUKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgID0KKyAgICAgJmx0OworICAgICAmZ3Q7CisgICAgICZsdDs9CisgICAgICZndDs9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2V0cyB1cCBhIHJlY29tbWVuZCBvbiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIDEuMiBvciBncmVhdGVyIG9mIHRoZSBwYWNrYWdlIDxmaWxlbmFtZT5mb288L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSUkVDT01NRU5EU18ke1BOfSA9ICJmb28gKD49IDEuMikiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktcyc+PHRpdGxlPlM8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0VDVElPTic+PGdsb3NzdGVybT5TRUNUSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIHNlY3Rpb24gaW4gd2hpY2ggcGFja2FnZXMgc2hvdWxkIGJlIGNhdGVnb3JpemVkLjwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNSQ19VUkknPjxnbG9zc3Rlcm0+U1JDX1VSSTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgbGlzdCBvZiBzb3VyY2UgZmlsZXMgLSBsb2NhbCBvciByZW1vdGUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgdGVsbHMgQml0QmFrZSB3aGljaCBiaXRzCisgICAgICAgICAgICAgICAgICAgIHRvIHB1bGwgZm9yIHRoZSBidWlsZCBhbmQgaG93IHRvIHB1bGwgdGhlbS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHRoZSByZWNpcGUgb3IgYXBwZW5kIGZpbGUgbmVlZHMgdG8KKyAgICAgICAgICAgICAgICAgICAgZmV0Y2ggYSBzaW5nbGUgdGFyYmFsbCBmcm9tIHRoZSBJbnRlcm5ldCwgdGhlIHJlY2lwZSBvcgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQgZmlsZSB1c2VzIGEgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBlbnRyeSB0aGF0IHNwZWNpZmllcyB0aGF0IHRhcmJhbGwuCisgICAgICAgICAgICAgICAgICAgIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgcmVjaXBlIG9yIGFwcGVuZCBmaWxlIG5lZWRzIHRvCisgICAgICAgICAgICAgICAgICAgIGZldGNoIGEgdGFyYmFsbCBhbmQgaW5jbHVkZSBhIGN1c3RvbSBmaWxlLCB0aGUgcmVjaXBlIG9yCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZCBmaWxlIG5lZWRzIGFuIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBzcGVjaWZpZXMgYWxsIHRob3NlIHNvdXJjZXMuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBmb2xsb3dpbmcgbGlzdCBleHBsYWlucyB0aGUgYXZhaWxhYmxlIFVSSSBwcm90b2NvbHM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5maWxlOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmV0Y2hlcyBmaWxlcywgd2hpY2ggYXJlIHVzdWFsbHkgZmlsZXMgc2hpcHBlZCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1ldGFkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIGxvY2FsIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHBhdGggaXMgcmVsYXRpdmUgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+YnpyOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbSBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmF6YWFyIHJldmlzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdDovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdpdCByZXZpc2lvbiBjb250cm9sIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5vc2M6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gT1NDIChPcGVuU1VTRSBCdWlsZCBzZXJ2aWNlKSByZXZpc2lvbiBjb250cm9sIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5yZXBvOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgcmVwbyAoR2l0KSByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+aHR0cDovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgSW50ZXJuZXQgdXNpbmcgSFRUUC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmh0dHBzOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBJbnRlcm5ldCB1c2luZyBIVFRQUy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmZ0cDovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgSW50ZXJuZXQgdXNpbmcgRlRQLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Y3ZzOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgQ1ZTIHJldmlzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmhnOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgTWVyY3VyaWFsICg8ZmlsZW5hbWU+aGc8L2ZpbGVuYW1lPikgcmV2aXNpb24gY29udHJvbCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cDQ6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBQZXJmb3JjZSAoPGZpbGVuYW1lPnA0PC9maWxlbmFtZT4pIHJldmlzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnNzaDovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHNlY3VyZSBzaGVsbC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnN2bjovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIFN1YnZlcnNpb24gKDxmaWxlbmFtZT5zdm48L2ZpbGVuYW1lPikgcmV2aXNpb24gY29udHJvbCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+SGVyZSBhcmUgc29tZSBhZGRpdGlvbmFsIG9wdGlvbnMgd29ydGggbWVudGlvbmluZzoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnVucGFjazwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBDb250cm9scworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXRoZXIgb3Igbm90IHRvIHVucGFjayB0aGUgZmlsZSBpZiBpdCBpcyBhbiBhcmNoaXZlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGFjdGlvbiBpcyB0byB1bnBhY2sgdGhlIGZpbGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5zdWJkaXI8L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gUGxhY2VzIHRoZSBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yIGV4dHJhY3RzIGl0cyBjb250ZW50cykgaW50byB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBmb3IgdW51c3VhbCB0YXJiYWxscyBvciBvdGhlciBhcmNoaXZlcyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gbm90IGhhdmUgdGhlaXIgZmlsZXMgYWxyZWFkeSBpbiBhIHN1YmRpcmVjdG9yeSB3aXRoaW4gdGhlIGFyY2hpdmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5uYW1lPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IFNwZWNpZmllcyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSB0byBiZSB1c2VkIGZvciBhc3NvY2lhdGlvbiB3aXRoIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gY2hlY2tzdW1zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIGZpbGUgc3BlY2lmaWVkIGluIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kb3dubG9hZGZpbGVuYW1lPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IFNwZWNpZmllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaWxlbmFtZSB1c2VkIHdoZW4gc3RvcmluZyB0aGUgZG93bmxvYWRlZCBmaWxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TUkNEQVRFJz48Z2xvc3N0ZXJtPlNSQ0RBVEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRhdGUgb2YgdGhlIHNvdXJjZSBjb2RlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgYXBwbGllcyBvbmx5IGlmIHRoZSBzb3VyY2Ugd2FzIGZldGNoZWQgZnJvbSBhIFNvdXJjZSBDb2RlIE1hbmFnZXIgKFNDTSkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1JDUkVWJz48Z2xvc3N0ZXJtPlNSQ1JFVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgcmV2aXNpb24gb2YgdGhlIHNvdXJjZSBjb2RlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgYXBwbGllcyBvbmx5IHdoZW4gdXNpbmcgU3VidmVyc2lvbiwgR2l0LCBNZXJjdXJpYWwgYW5kIEJhemFhci4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gYnVpbGQgYSBmaXhlZCByZXZpc2lvbiBhbmQgeW91IHdhbnQKKyAgICAgICAgICAgICAgICAgICAgdG8gYXZvaWQgcGVyZm9ybWluZyBhIHF1ZXJ5IG9uIHRoZSByZW1vdGUgcmVwb3NpdG9yeSBldmVyeSB0aW1lCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgcGFyc2VzIHlvdXIgcmVjaXBlLCB5b3Ugc2hvdWxkIHNwZWNpZnkgYSA8ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT4gdGhhdCBpcyBhCisgICAgICAgICAgICAgICAgICAgIGZ1bGwgcmV2aXNpb24gaWRlbnRpZmllciBhbmQgbm90IGp1c3QgYSB0YWcuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1JDUkVWX0ZPUk1BVCc+PGdsb3NzdGVybT5TUkNSRVZfRk9STUFUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlbHBzIGNvbnN0cnVjdCB2YWxpZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDUkVWJz48ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcyB3aGVuIG11bHRpcGxlIHNvdXJjZSBjb250cm9sbGVkIFVSTHMgYXJlIHVzZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3lzdGVtIG5lZWRzIGhlbHAgY29uc3RydWN0aW5nIHRoZXNlIHZhbHVlcyB1bmRlciB0aGVzZQorICAgICAgICAgICAgICAgICAgICBjaXJjdW1zdGFuY2VzLgorICAgICAgICAgICAgICAgICAgICBFYWNoIGNvbXBvbmVudCBpbiB0aGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyBhc3NpZ25lZCBhIG5hbWUgYW5kIHRoZXNlIGFyZSByZWZlcmVuY2VkCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+U1JDUkVWX0ZPUk1BVDwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBDb25zaWRlciBhbiBleGFtcGxlIHdpdGggVVJMcyBuYW1lZCAibWFjaGluZSIgYW5kICJtZXRhIi4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCA8ZmlsZW5hbWU+U1JDUkVWX0ZPUk1BVDwvZmlsZW5hbWU+IGNvdWxkIGxvb2sKKyAgICAgICAgICAgICAgICAgICAgbGlrZSAibWFjaGluZV9tZXRhIiBhbmQgdGhvc2UgbmFtZXMgd291bGQgaGF2ZSB0aGUgU0NNCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb25zIHN1YnN0aXR1dGVkIGludG8gZWFjaCBwb3NpdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgT25seSBvbmUgPGZpbGVuYW1lPkFVVE9JTkM8L2ZpbGVuYW1lPiBwbGFjZWhvbGRlciBpcyBhZGRlZAorICAgICAgICAgICAgICAgICAgICBhbmQgaWYgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICBBbmQsIHRoaXMgcGxhY2Vob2xkZXIgaXMgcGxhY2VkIGF0IHRoZSBzdGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQgc3RyaW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQU1QJz48Z2xvc3N0ZXJtPlNUQU1QPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgYmFzZSBwYXRoIHVzZWQgdG8gY3JlYXRlIHJlY2lwZSBzdGFtcCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHBhdGggdG8gYW4gYWN0dWFsIHN0YW1wIGZpbGUgaXMgY29uc3RydWN0ZWQgYnkgZXZhbHVhdGluZyB0aGlzCisgICAgICAgICAgICAgICAgICAgIHN0cmluZyBhbmQgdGhlbiBhcHBlbmRpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFNUENMRUFOJz48Z2xvc3N0ZXJtPlNUQU1QQ0xFQU48L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBiYXNlIHBhdGggdXNlZCB0byBjcmVhdGUgcmVjaXBlIHN0YW1wIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBVbmxpa2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFNUCc+PGZpbGVuYW1lPlNUQU1QPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCA8ZmlsZW5hbWU+U1RBTVBDTEVBTjwvZmlsZW5hbWU+IGNhbiBjb250YWluCisgICAgICAgICAgICAgICAgICAgIHdpbGRjYXJkcyB0byBtYXRjaCB0aGUgcmFuZ2Ugb2YgZmlsZXMgYSBjbGVhbiBvcGVyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkIHJlbW92ZS4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIGEgY2xlYW4gb3BlcmF0aW9uIHRvIHJlbW92ZSBhbnkgb3RoZXIgc3RhbXBzCisgICAgICAgICAgICAgICAgICAgIGl0IHNob3VsZCBiZSByZW1vdmluZyB3aGVuIGNyZWF0aW5nIGEgbmV3IHN0YW1wLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNVTU1BUlknPjxnbG9zc3Rlcm0+U1VNTUFSWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIHNob3J0IHN1bW1hcnkgZm9yIHRoZSByZWNpcGUsIHdoaWNoIGlzIDcyIGNoYXJhY3RlcnMgb3IgbGVzcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVk5ESVInPjxnbG9zc3Rlcm0+U1ZORElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggZmlsZXMgY2hlY2tlZCBvdXQgb2YgYSBTdWJ2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBhcmUgc3RvcmVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS10Jz48dGl0bGU+VDwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UJz48Z2xvc3N0ZXJtPlQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5Qb2ludHMgdG8gYSBkaXJlY3Rvcnkgd2VyZSBCaXRCYWtlIHBsYWNlcworICAgICAgICAgICAgICAgICAgICB0ZW1wb3JhcnkgZmlsZXMsIHdoaWNoIGNvbnNpc3QgbW9zdGx5IG9mIHRhc2sgbG9ncyBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2NyaXB0cywgd2hlbiBidWlsZGluZyBhIHBhcnRpY3VsYXIgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRPUERJUic+PGdsb3NzdGVybT5UT1BESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBidWlsZCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgYXV0b21hdGljYWxseSBzZXRzIHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworPCEtLQorICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXUnPjx0aXRsZT5VPC90aXRsZT4KKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktdic+PHRpdGxlPlY8L3RpdGxlPgorICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXcnPjx0aXRsZT5XPC90aXRsZT4KKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnkteCc+PHRpdGxlPlg8L3RpdGxlPgorICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS15Jz48dGl0bGU+WTwvdGl0bGU+CisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXonPjx0aXRsZT5aPC90aXRsZT4KKyAgICA8L2dsb3NzZGl2PgorLS0+CisKKworPC9nbG9zc2FyeT4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtc3R5bGUuY3NzIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtc3R5bGUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZGEyYTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1zdHlsZS5jc3MKQEAgLTAsMCArMSw5ODQgQEAKKy8qCisgICBHZW5lcmljIFhIVE1MIC8gRG9jQm9vayBYSFRNTCBDU1MgU3R5bGVzaGVldC4KKworICAgQnJvd3NlciB3cmFuZ2xpbmcgYW5kIHR5cG9ncmFwaGljIGRlc2lnbiBieQorICAgICAgT3l2aW5kIEtvbGFzIC8gcGlwcGluQGdpbXAub3JnCisKKyAgIEN1c3RvbWlzZWQgZm9yIFBva3kgYnkKKyAgICAgIE1hdHRoZXcgQWxsdW0gLyBtYWxsdW1Aby1oYW5kLmNvbQorCisgICBUaGFua3MgdG86CisgICAgIExpYW0gUi4gRS4gUXVpbgorICAgICBXaWxsaWFtIFNrYWdncworICAgICBKYWt1YiBTdGVpbmVyCisKKyAgIFN0cnVjdHVyZQorICAgLS0tLS0tLS0tCisKKyAgIFRoZSBzdHlsZXNoZWV0IGlzIGRpdmlkZWQgaW50byB0aGUgZm9sbG93aW5nIHNlY3Rpb25zOgorCisgICAgICAgUG9zaXRpb25pbmcKKyAgICAgICAgICBNYXJnaW5zLCBwYWRkaW5ncywgd2lkdGgsIGZvbnQtc2l6ZSwgY2xlYXJpbmcuCisgICAgICAgRGVjb3JhdGlvbnMKKyAgICAgICAgICBCb3JkZXJzLCBzdHlsZQorICAgICAgIENvbG9ycworICAgICAgICAgIENvbG9ycworICAgICAgIEdyYXBoaWNzCisgICAgICAgICAgR3JhcGhpY2FsIGJhY2tncm91bmRzCisgICAgICAgTmFzdHkgSUUgdHdlYWtzCisgICAgICAgICAgV29ya2Fyb3VuZHMgbmVlZGVkIHRvIG1ha2UgaXQgd29yayBpbiBpbnRlcm5ldCBleHBsb3JlciwKKyAgICAgICAgICBjdXJyZW50bHkgbWFrZXMgdGhlIHN0eWxlc2hlZXQgbm9uIHZhbGlkYXRpbmcsIGJ1dCB1cCB1bnRpbAorICAgICAgICAgIHRoaXMgcG9pbnQgaXQgaXMgdmFsaWRhdGluZy4KKyAgICAgICBNb3ppbGxhIGV4dGVuc2lvbnMKKyAgICAgICAgICBUcmFuc3BhcmVuY3kgZm9yIGZvb3RlcgorCSAgUm91bmRlZCBjb3JuZXJzIG9uIGJveGVzCisKKyovCisKKworICAvKioqKioqKioqKioqKioqIC8KKyAvICBQb3NpdGlvbmluZyAgIC8KKy8gKioqKioqKioqKioqKioqLworCitib2R5IHsKKyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIFNhbnMsIHNhbnMtc2VyaWY7CisKKyAgbWluLXdpZHRoOiA2NDBweDsKKyAgd2lkdGg6IDgwJTsKKyAgbWFyZ2luOiAgMGVtIGF1dG87CisgIHBhZGRpbmc6IDJlbSA1ZW0gNWVtIDVlbTsKKyAgY29sb3I6ICMzMzM7Cit9CisKK2gxLGgyLGgzLGg0LGg1LGg2LGg3IHsKKyAgZm9udC1mYW1pbHk6IEFyaWFsLCBTYW5zOworICBjb2xvcjogIzAwNTU3RDsKKyAgY2xlYXI6IGJvdGg7Cit9CisKK2gxIHsKKyAgZm9udC1zaXplOiAyZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAyZW0gMGVtIDBlbSAwZW07Cit9CisKK2gyLnN1YnRpdGxlIHsKKyAgbWFyZ2luOiAwLjEwZW0gMGVtIDMuMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuOGVtOworICBwYWRkaW5nLWxlZnQ6IDIwJTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCitoMiB7CisgIG1hcmdpbjogMmVtIDBlbSAwLjY2ZW0gMGVtOworICBwYWRkaW5nOiAwLjVlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjVlbTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gzLnN1YnRpdGxlIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDIuMTQlOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworaDMgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g0IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEyMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNSB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDYgeworICBtYXJnaW46IDFlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisuYXV0aG9yZ3JvdXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgcGFkZGluZy10b3A6IDI1NnB4OworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvYml0YmFrZS10aXRsZS5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCB0b3A7CisgIG1hcmdpbi10b3A6IC0yNTZweDsKKyAgcGFkZGluZy1yaWdodDogNTBweDsKKyAgbWFyZ2luLWxlZnQ6IDBweDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7CisgIHdpZHRoOiA3NDBweDsKK30KKworaDMuYXV0aG9yIHsKKyAgbWFyZ2luOiAwZW0gMG1lIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zaXplOiAxMDAlOworICBjb2xvcjogIzMzMzsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5hdXRob3IgdHQuZW1haWwgeworICBmb250LXNpemU6IDY2JTsKK30KKworLnRpdGxlcGFnZSBociB7CisgIHdpZHRoOiAwZW07CisgIGNsZWFyOiBib3RoOworfQorCisucmV2aGlzdG9yeSB7CisgIHBhZGRpbmctdG9wOiAyZW07CisgIGNsZWFyOiBib3RoOworfQorCisudG9jLAorLmxpc3Qtb2YtdGFibGVzLAorLmxpc3Qtb2YtZXhhbXBsZXMsCisubGlzdC1vZi1maWd1cmVzIHsKKyAgcGFkZGluZzogMS4zM2VtIDBlbSAyLjVlbSAwZW07CisgIGNvbG9yOiAjMDA1NTdEOworfQorCisudG9jIHAsCisubGlzdC1vZi10YWJsZXMgcCwKKy5saXN0LW9mLWZpZ3VyZXMgcCwKKy5saXN0LW9mLWV4YW1wbGVzIHAgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMC4zZW07CisgIG1hcmdpbjogMS41ZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgcCBiLAorLmxpc3Qtb2YtdGFibGVzIHAgYiwKKy5saXN0LW9mLWZpZ3VyZXMgcCBiLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCBieworICBmb250LXNpemU6IDEwMC4wJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy50b2MgZGwsCisubGlzdC1vZi10YWJsZXMgZGwsCisubGlzdC1vZi1maWd1cmVzIGRsLAorLmxpc3Qtb2YtZXhhbXBsZXMgZGwgeworICBtYXJnaW46IDBlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZHQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGRkIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAyLjZlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuZ2xvc3NhcnkgZGwsCitkaXYudmFyaWFibGVsaXN0IGRsIHsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgd2lkdGg6IDIwZW07CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCisudmFyaWFibGVsaXN0IGRsIGR0IHsKKyAgbWFyZ2luLXRvcDogMC41ZW07Cit9CisKKy5nbG9zc2FyeSBkbCBkZCwKKy52YXJpYWJsZWxpc3QgZGwgZGQgeworICBtYXJnaW4tdG9wOiAtMWVtOworICBtYXJnaW4tbGVmdDogMjUuNWVtOworfQorCisuZ2xvc3NhcnkgZGQgcCwKKy52YXJpYWJsZWxpc3QgZGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKK2RpdiBwLmNvcHlyaWdodCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK2Rpdi5sZWdhbG5vdGljZSBwLmxlZ2Fsbm90aWNlLXRpdGxlIHsKKyAgbWFyZ2luLWJvdHRvbTogMGVtOworfQorCitwIHsKKyAgbGluZS1oZWlnaHQ6IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisKK30KKworZGwgeworICBwYWRkaW5nLXRvcDogMGVtOworfQorCitociB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCisKKy5tZWRpYW9iamVjdCwKKy5tZWRpYW9iamVjdGNvIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCitpbWcgeworICBib3JkZXI6IG5vbmU7Cit9CisKK3VsIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMS41ZW07Cit9CisKK3VsIGxpIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCit1bCBsaSBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKwordGFibGUgeworICB3aWR0aCA6MTAwJTsKK30KKwordGggeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3RkIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCitwIGFbaWRdIHsKKyAgbWFyZ2luOiAwcHg7CisgIHBhZGRpbmc6IDBweDsKKyAgZGlzcGxheTogaW5saW5lOworICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOworfQorCithIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGNvbG9yOiAjNDQ0OworfQorCitwcmUgeworICAgIG92ZXJmbG93OiBhdXRvOworfQorCithOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIC8qZm9udC13ZWlnaHQ6IGJvbGQ7Ki8KK30KKworLyogVGhpcyBzdHlsZSBkZWZpbmVzIGhvdyB0aGUgcGVybWFsaW5rIGNoYXJhY3RlcgorICAgYXBwZWFycyBieSBpdHNlbGYgYW5kIHdoZW4gaG92ZXJlZCBvdmVyIHdpdGgKKyAgIHRoZSBtb3VzZS4gKi8KKworW2FsdD0nUGVybWFsaW5rJ10geyBjb2xvcjogI2VlZTsgfQorW2FsdD0nUGVybWFsaW5rJ106aG92ZXIgeyBjb2xvcjogYmxhY2s7IH0KKworCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUgeworICBtYXJnaW46IDFlbSAwZW07CisgIHBhZGRpbmc6IDFlbTsKKyAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOworfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWxleGFtcGxlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbHRhYmxlIHAudGl0bGUgYiwKK2Rpdi5maWd1cmUgcC50aXRsZSBiLAorZGl2LmV4YW1wbGUgcC50aXRsZSBiLAorZGl2LnRhYmxlIHAudGl0bGUgYnsKKyAgICBwYWRkaW5nLXRvcDogMGVtOworICAgIG1hcmdpbi10b3A6IDBlbTsKKyAgICBmb250LXNpemU6IDEwMCU7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKK30KKworLm1lZGlhb2JqZWN0IC5jYXB0aW9uLAorLm1lZGlhb2JqZWN0IC5jYXB0aW9uIHAgIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZy10b3A6IDAuNWVtOworICBwYWRkaW5nLWJvdHRvbTogMC41ZW07Cit9CisKKy5lcGlncmFwaCB7CisgIHBhZGRpbmctbGVmdDogNTUlOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKy5lcGlncmFwaCBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmVwaWdyYXBoIC5xdW90ZSB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKy5lcGlncmFwaCAuYXR0cmlidXRpb24geworICBmb250LXN0eWxlOiBub3JtYWw7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitzcGFuLmFwcGxpY2F0aW9uIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCisucHJvZ3JhbWxpc3RpbmcgeworICBmb250LWZhbWlseTogbW9ub3NwYWNlOworICBmb250LXNpemU6IDgwJTsKKyAgd2hpdGUtc3BhY2U6IHByZTsKKyAgbWFyZ2luOiAxLjMzZW0gMGVtOworICBwYWRkaW5nOiAxLjMzZW07Cit9CisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBtYXJnaW4tdG9wOiAxZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKKworfQorCisvKiBmb3JjZSBmdWxsIHdpZHRoIG9mIHRhYmxlIHdpdGhpbiBkaXYgKi8KKy50aXAgdGFibGUsCisud2FybmluZyB0YWJsZSwKKy5jYXV0aW9uIHRhYmxlLAorLm5vdGUgdGFibGUgeworICBib3JkZXI6IG5vbmU7CisgIHdpZHRoOiAxMDAlOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBwYWRkaW5nOiAwLjhlbSAwLjBlbSAwLjBlbSAwLjBlbTsKKyAgbWFyZ2luIDogMGVtIDBlbSAwZW0gMGVtOworfQorCisudGlwIHAsCisud2FybmluZyBwLAorLmNhdXRpb24gcCwKKy5ub3RlIHAgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMC41ZW07CisgIHBhZGRpbmctcmlnaHQ6IDFlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmFjcm9ueW0geworICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICBwYWRkaW5nOiAwLjA5ZW0gMC4zZW07CisgIG1hcmdpbjogMGVtOworfQorCisuaXRlbWl6ZWRsaXN0IGxpIHsKKyAgY2xlYXI6IG5vbmU7Cit9CisKKy5maWxlbmFtZSB7CisgIGZvbnQtc2l6ZTogbWVkaXVtOworICBmb250LWZhbWlseTogQ291cmllciwgbW9ub3NwYWNlOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGxlZnQ6IDBlbTsKKyAgdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2RmOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAgbGVmdDogMGVtOworICBib3R0b206IDBlbTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworZGl2Lm5hdmhlYWRlciB0ZCwKK2Rpdi5uYXZmb290ZXIgdGQgeworICBmb250LXNpemU6IDY2JTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0aCB7CisgIC8qZm9udC1mYW1pbHk6IEdlb3JnaWEsIFRpbWVzLCBzZXJpZjsqLworICAvKmZvbnQtc2l6ZTogeC1sYXJnZTsqLworICBmb250LXNpemU6IDgwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci1ib3R0b206IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYSwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYSB7CisgIGNvbG9yOiAjNzc3OworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKKy8qIG5vcm1hbCB0ZXh0IGluIHRoZSBmb290ZXIgKi8KK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgeworICBjb2xvcjogYmxhY2s7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTp2aXNpdGVkLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOnZpc2l0ZWQgeworICBjb2xvcjogIzQ0NDsKK30KKworCisvKiBsaW5rcyBpbiBoZWFkZXIgYW5kIGZvb3RlciAqLworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOmhvdmVyLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBjb2xvcjogIzMzYTsKK30KKworZGl2Lm5hdmhlYWRlciBociwKK2Rpdi5uYXZmb290ZXIgaHIgeworICBkaXNwbGF5OiBub25lOworfQorCisKKy5xYW5kYXNldCB0ci5xdWVzdGlvbiB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnFhbmRhc2V0IHRyLmFuc3dlciB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKy5hbnN3ZXIgdGQgeworICBwYWRkaW5nLWJvdHRvbTogMS41ZW07Cit9CisKKy5lbXBoYXNpcyB7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisKKyAgLyoqKioqKioqKioqKiogLworIC8gZGVjb3JhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKi8KKworLnRpdGxlcGFnZSB7Cit9CisKKy5wYXJ0IC50aXRsZSB7Cit9CisKKy5zdWJ0aXRsZSB7CisgICAgYm9yZGVyOiBub25lOworfQorCisvKgoraDEgeworICBib3JkZXI6IG5vbmU7Cit9CisKK2gyIHsKKyAgYm9yZGVyLXRvcDogc29saWQgMC4yZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDMgeworICBib3JkZXItdG9wOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDQgeworICBib3JkZXI6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNSB7CisgIGJvcmRlcjogMGVtOworfQorKi8KKworLnByb2dyYW1saXN0aW5nIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisucXVlc3Rpb24gdGQgeworICBib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7Cit9CisKKy5hbnN3ZXIgeworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZDsKK30KKworICAvKioqKioqKioqIC8KKyAvICBjb2xvcnMgIC8KKy8gKioqKioqKioqLworCitib2R5IHsKKyAgY29sb3I6ICMzMzM7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorCithIHsKKyAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cit9CisKK2E6aG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVkZWRlOworfQorCisKK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3LAoraDggeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKK30KKworaHIgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKKworLnRpcCwgLndhcm5pbmcsIC5jYXV0aW9uLCAubm90ZSB7CisgIGJvcmRlci1jb2xvcjogI2ZmZjsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjsKK30KKworCisud2FybmluZyB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLnRpcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5ub3RlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgY29sb3I6ICMwNDQ7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworcHJlLnByb2dyYW1saXN0aW5nIHsKKyAgY29sb3I6IGJsYWNrOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworICBib3JkZXItY29sb3I6ICNhYWE7CisgIGJvcmRlci13aWR0aDogMnB4OworfQorCisuZ3VpbWVudSwKKy5ndWlsYWJlbCwKKy5ndWltZW51aXRlbSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgYm9yZGVyLWNvbG9yOiAjOTk5OworfQorCisKK2Rpdi5uYXZoZWFkZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKK2Rpdi5uYXZmb290ZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKKyAgLyoqKioqKioqKioqIC8KKyAvICBncmFwaGljcyAgLworLyAqKioqKioqKioqKi8KKworLyoKK2JvZHkgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ib2R5X2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisubmF2aGVhZGVyLAorLm5vdGUsCisudGlwIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvbm90ZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLndhcm5pbmcsCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL3dhcm5pbmdfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5maWd1cmUsCisuaW5mb3JtYWxmaWd1cmUsCisuZXhhbXBsZSwKKy5pbmZvcm1hbGV4YW1wbGUsCisudGFibGUsCisuaW5mb3JtYWx0YWJsZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2ZpZ3VyZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworKi8KK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3eworfQorCisvKgorRXhhbXBsZSBvZiBob3cgdG8gc3RpY2sgYW4gaW1hZ2UgYXMgcGFydCBvZiB0aGUgdGl0bGUuCisKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy93aGl0ZS1vbi1ibGFjay5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7Cit9CisqLworCitkaXYucHJlZmFjZSAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5jb2xvcGhvbiAudGl0bGUsCitkaXYuY2hhcHRlciAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7Cit9CisKK2Rpdi5zZWN0aW9uIGRpdi5zZWN0aW9uIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LnNlY3QyIC50aXRsZXBhZ2UgLnRpdGxlIHsKKyAgICBiYWNrZ3JvdW5kOiBub25lOworfQorCisKK2gxLnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIGhlaWdodDogMjU2cHg7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47Cit9CisKK2gyLnN1YnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47CisgIHdpZHRoOiAwcHg7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyAgcGlwcGluLmdpbXAub3JnIHNwZWNpZmljIGFsdGVyYXRpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgY29sb3I6ICM3Nzc7CisgIGZvbnQtc2l6ZTogODAlOworICBwYWRkaW5nOiAwOworICBtYXJnaW46IDA7CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdG9wOiAwcHg7CisgIGxlZnQ6IDBweDsKKyAgd2lkdGg6IDEwMCU7CisgIGhlaWdodDogNTBweDsKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2hlYWRpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKKyAgYm9yZGVyOiBub25lOworfQorCitkaXYuaGVhZGluZyBhIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyOiBub25lOworICBjb2xvcjogI2RkZDsKKyAgZm9udC1zaXplOiA4MCU7CisgIHRleHQtYWxpZ246cmlnaHQ7CisKKyAgd2lkdGg6IDEwMCU7CisgIHBhZGRpbmctdG9wOiAxMHB4OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGJvdHRvbTogMHB4OworICBsZWZ0OiAwcHg7CisKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2Zvb3RpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7Cit9CisqLworCisKKworICAvKioqKioqKioqKioqKioqKioqIC8KKyAvICBuYXN0eSBpZSB0d2Vha3MgIC8KKy8gKioqKioqKioqKioqKioqKioqLworCisvKgorZGl2LmhlYWRpbmcsIGRpdi5uYXZoZWFkZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKK30KKworZGl2LmZvb3RpbmcsIGRpdi5uYXZmb290ZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKKyAgbWFyZ2luLWxlZnQ6ZXhwcmVzc2lvbigiLTVlbSIpOworfQorYm9keSB7CisgIHBhZGRpbmc6ZXhwcmVzc2lvbigiNGVtIDVlbSAwZW0gNWVtIik7Cit9CisqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8KKyAvIG1vemlsbGEgdmVuZG9yIHNwZWNpZmljIGNzcyBleHRlbnNpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIC1tb3otb3BhY2l0eTogMC44ZW07Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSwKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuNWVtOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuM2VtOworfQorKi8KKwordGFibGUgdHIgdGQgdGFibGUgdHIgdGQgeworICBkaXNwbGF5OiBub25lOworfQorCisKK2hyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKwordGFibGUgeworICBib3JkZXI6IDBlbTsKK30KKworIC5waG90byB7CisgIGZsb2F0OiByaWdodDsKKyAgbWFyZ2luLWxlZnQ6ICAgMS41ZW07CisgIG1hcmdpbi1ib3R0b206IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisgIG1heC13aWR0aDogICAgICAxN2VtOworICBib3JkZXI6ICAgICAxcHggc29saWQgZ3JheTsKKyAgcGFkZGluZzogICAgM3B4OworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKyAuc2VwZXJhdG9yIHsKKyAgIHBhZGRpbmctdG9wOiAyZW07CisgICBjbGVhcjogYm90aDsKKyAgfQorCisgICN2YWxpZGF0b3JzIHsKKyAgICAgIG1hcmdpbi10b3A6IDVlbTsKKyAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgY29sb3I6ICM3Nzc7CisgIH0KKyAgQG1lZGlhIHByaW50IHsKKyAgICAgIGJvZHkgeworICAgICAgICAgIGZvbnQtc2l6ZTogOHB0OworICAgICAgfQorICAgICAgLm5vcHJpbnQgeworICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CisgICAgICB9CisgIH0KKworCisudGlwLAorLm5vdGUgeworICAgYmFja2dyb3VuZDogI2YwZjBmMjsKKyAgIGNvbG9yOiAjMzMzOworICAgcGFkZGluZzogMjBweDsKKyAgIG1hcmdpbjogMjBweDsKK30KKworLnRpcCBoMywKKy5ub3RlIGgzIHsKKyAgIHBhZGRpbmc6IDBlbTsKKyAgIG1hcmdpbjogMGVtOworICAgZm9udC1zaXplOiAyZW07CisgICBmb250LXdlaWdodDogYm9sZDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisudGlwIGEsCisubm90ZSBhIHsKKyAgIGNvbG9yOiAjMzMzOworICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy5mb290bm90ZSB7CisgICBmb250LXNpemU6IHNtYWxsOworICAgY29sb3I6ICMzMzM7Cit9CisKKy8qIENoYW5nZXMgdGhlIGFubm91bmNlbWVudCB0ZXh0ICovCisudGlwIGgzLAorLndhcm5pbmcgaDMsCisuY2F1dGlvbiBoMywKKy5ub3RlIGgzIHsKKyAgIGZvbnQtc2l6ZTpsYXJnZTsKKyAgIGNvbG9yOiAjMDA1NTdEOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwueG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZmY5MzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC54bWwKQEAgLTAsMCArMSw4OCBAQAorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCI+CisKKzxib29rIGlkPSdiaXRiYWtlLXVzZXItbWFudWFsJyBsYW5nPSdlbicKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiCisgICAgICAgIHhtbG5zPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayIKKyAgICAgICAgPgorICAgIDxib29raW5mbz4KKworICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICA8aW1hZ2VvYmplY3Q+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSdmaWd1cmVzL2JpdGJha2UtdGl0bGUucG5nJworICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9J1NWRycKKyAgICAgICAgICAgICAgICAgICAgYWxpZ249J2xlZnQnIHNjYWxlZml0PScxJyB3aWR0aD0nMTAwJScvPgorICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgICAgPC9tZWRpYW9iamVjdD4KKworICAgICAgICA8dGl0bGU+CisgICAgICAgICAgICBCaXRCYWtlIFVzZXIgTWFudWFsCisgICAgICAgIDwvdGl0bGU+CisKKyAgICAgICAgPGF1dGhvcmdyb3VwPgorICAgICAgICAgICAgPGF1dGhvcj4KKyAgICAgICAgICAgICAgICA8Zmlyc3RuYW1lPlJpY2hhcmQgUHVyZGllLCBDaHJpcyBMYXJzb24sIGFuZCA8L2ZpcnN0bmFtZT4gPHN1cm5hbWU+UGhpbCBCbHVuZGVsbDwvc3VybmFtZT4KKyAgICAgICAgICAgICAgICA8YWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxvcmduYW1lPkJpdEJha2UgQ29tbXVuaXR5PC9vcmduYW1lPgorICAgICAgICAgICAgICAgIDwvYWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgPGVtYWlsPmJpdGJha2UtZGV2ZWxAbGlzdHMub3BlbmVtYmVkZGVkLm9yZzwvZW1haWw+CisgICAgICAgICAgICA8L2F1dGhvcj4KKyAgICAgICAgPC9hdXRob3Jncm91cD4KKworPCEtLQorIyBBZGQgaW4gc29tZSByZXZpc2lvbiBoaXN0b3J5IGlmIHdlIHdhbnQgaXQgaGVyZS4KKyAgICAgICAgPHJldmhpc3Rvcnk+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj54Lng8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5kZCBtb250aCB5ZWFyPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+U29tZSByZWxldmVudCBjb21tZW50PC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+eC54PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+ZGQgbW9udGggeWVhcjwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlNvbWUgcmVsZXZlbnQgY29tbWVudDwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPngueDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPmRkIG1vbnRoIHllYXI8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5Tb21lIHJlbGV2ZW50IGNvbW1lbnQ8L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj54Lng8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5kZCBtb250aCB5ZWFyPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+U29tZSByZWxldmVudCBjb21tZW50PC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgIDwvcmV2aGlzdG9yeT4KKy0tPgorCisgICAgICAgIDxjb3B5cmlnaHQ+CisgICAgICAgICAgICA8eWVhcj4yMDA0LTIwMTU8L3llYXI+CisgICAgICAgICAgICA8aG9sZGVyPlJpY2hhcmQgUHVyZGllPC9ob2xkZXI+CisgICAgICAgICAgICA8aG9sZGVyPkNocmlzIExhcnNvbjwvaG9sZGVyPgorICAgICAgICAgICAgPGhvbGRlcj5hbmQgUGhpbCBCbHVuZGVsbDwvaG9sZGVyPgorICAgICAgICA8L2NvcHlyaWdodD4KKworICAgICAgICA8bGVnYWxub3RpY2U+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gTGljZW5zZS4KKyAgICAgICAgICAgICAgICBUbyB2aWV3IGEgY29weSBvZiB0aGlzIGxpY2Vuc2UsIHZpc2l0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMi41LyI+aHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMi41LzwvdWxpbms+CisgICAgICAgICAgICAgICAgb3Igc2VuZCBhIGxldHRlciB0byBDcmVhdGl2ZSBDb21tb25zLCA0NDQgQ2FzdHJvIFN0cmVldCwKKyAgICAgICAgICAgICAgICBTdWl0ZSA5MDAsIE1vdW50YWluIFZpZXcsIENhbGlmb3JuaWEgOTQwNDEsIFVTQS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9sZWdhbG5vdGljZT4KKyAgICA8L2Jvb2tpbmZvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iYml0YmFrZS11c2VyLW1hbnVhbC1pbnRyby54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImJpdGJha2UtdXNlci1tYW51YWwtZXhlY3V0aW9uLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iYml0YmFrZS11c2VyLW1hbnVhbC1tZXRhZGF0YS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImJpdGJha2UtdXNlci1tYW51YWwtZmV0Y2hpbmcueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJiaXRiYWtlLXVzZXItbWFudWFsLXJlZi12YXJpYWJsZXMueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJiaXRiYWtlLXVzZXItbWFudWFsLWhlbGxvLnhtbCIvPgorCis8L2Jvb2s+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvZmlndXJlcy9iaXRiYWtlLXRpdGxlLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9maWd1cmVzL2JpdGJha2UtdGl0bGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMjkwMTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvZmlndXJlcy9iaXRiYWtlLXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvaHRtbC5jc3MgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvaHRtbC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVlZGZkMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9odG1sLmNzcwpAQCAtMCwwICsxLDI4MSBAQAorLyogRmV1aWxsZSBkZSBzdHlsZSBEb2NCb29rIGR1IHByb2pldCBUcmFkdWMub3JnICAgICAgICAgICAgICAgICovCisvKiBEb2NCb29rIENTUyBzdHlsZXNoZWV0IG9mIHRoZSBUcmFkdWMub3JnIHByb2plY3QgICAgICAgICAgICAgKi8KKworLyogKGMpIEplYW4tUGhpbGlwcGUgR3XpcmFyZCAtIDE0IGFv+3QgMjAwNCAgICAgICAgICAgICAgICAgICAgICovCisvKiAoYykgSmVhbi1QaGlsaXBwZSBHdelyYXJkIC0gMTQgQXVndXN0IDIwMDQgICAgICAgICAgICAgICAgICAgKi8KKworLyogQ2V0dGUgZmV1aWxsZSBkZSBzdHlsZSBlc3QgbGlicmUsIHZvdXMgcG91dmV6IGxhICAgICAgICAgICAgICovCisvKiByZWRpc3RyaWJ1ZXIgZXQgbGEgbW9kaWZpZXIgc2Vsb24gbGVzIHRlcm1lcyBkZSBsYSBMaWNlbmNlICAgKi8KKy8qIEFydCBMaWJyZS4gVm91cyB0cm91dmVyZXogdW4gZXhlbXBsYWlyZSBkZSBjZXR0ZSBMaWNlbmNlIHN1ciAqLworLyogaHR0cDovL3RpZ3JlcmF5ZS5vcmcvUGV0aXQtZ3VpZGUtZHUtdHJhZHVjdGV1ci5odG1sI2xpY2VuY2UtYXJ0LWxpYnJlICovCisKKy8qIFRoaXMgd29yayBvZiBhcnQgaXMgZnJlZSwgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yICAgICAqLworLyogbW9kaWZ5IGl0IGFjY29yZGluZyB0byB0ZXJtcyBvZiB0aGUgRnJlZSBBcnQgbGljZW5zZS4gWW91ICAgICovCisvKiB3aWxsIGZpbmQgYSBzcGVjaW1lbiBvZiB0aGlzIGxpY2Vuc2Ugb24gdGhlIENvcHlsZWZ0ICAgICAgICAgKi8KKy8qIEF0dGl0dWRlIHdlYiBzaXRlOiBodHRwOi8vYXJ0bGlicmUub3JnIGFzIHdlbGwgYXMgb24gb3RoZXIgICAqLworLyogc2l0ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBGcmVuY2ggdmVyc2lvbiBvZiB0aGlzIGxpY2VuY2UgYXMgc2hvd24gKi8KKy8qIG9uIGh0dHA6Ly90aWdyZXJheWUub3JnL1BldGl0LWd1aWRlLWR1LXRyYWR1Y3RldXIuaHRtbCNsaWNlbmNlLWFydC1saWJyZSAqLworLyogaXMgb25seSBvZmZpY2lhbCBsaWNlbmNlIG9mIHRoaXMgZG9jdW1lbnQuIFRoZSBFbmdsaXNoICAgICAgICovCisvKiBpcyBvbmx5IHByb3ZpZGVkIHRvIGhlbHAgeW91IHVuZGVyc3RhbmQgdGhpcyBsaWNlbmNlLiAgICAgICAgKi8KKworLyogTGEgZGVybmnocmUgdmVyc2lvbiBkZSBjZXR0ZSBmZXVpbGxlIGRlIHN0eWxlIGVzdCB0b3Vqb3VycyAgICovCisvKiBkaXNwb25pYmxlIHN1cqA6IGh0dHA6Ly90aWdyZXJheWUub3JnL3N0eWxlLmNzcyAgICAgICAgICAgICAgKi8KKy8qIEVsbGUgZXN0IOlnYWxlbWVudCBkaXNwb25pYmxlIHN1cqA6ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogaHR0cDovL3d3dy50cmFkdWMub3JnL2RvY3MvSE9XVE8vbGVjdHVyZS9zdHlsZS5jc3MgICAgICAgICAgICovCisKKy8qIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIHN0eWxlc2hlZXQgaXMgYXZhaWxhYmxlIGZyb206ICAgICAqLworLyogaHR0cDovL3RpZ3JlcmF5ZS5vcmcvc3R5bGUuY3NzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSBvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGh0dHA6Ly93d3cudHJhZHVjLm9yZy9kb2NzL0hPV1RPL2xlY3R1cmUvc3R5bGUuY3NzICAgICAgICAgICAqLworCisvKiBOJ2jpc2l0ZXogcGFzIOAgZW52b3llciB2b3MgY29tbWVudGFpcmVzIGV0IGNvcnJlY3Rpb25zIOAgICAgKi8KKy8qIEplYW4tUGhpbGlwcGUgR3XpcmFyZCA8amVhbi1waGlsaXBwZS5ndWVyYXJkQHRpZ3JlcmF5ZS5vcmc+ICAqLworCisvKiBQbGVhc2Ugc2VuZCBmZWVkYmFjayBhbmQgYnVnIHJlcG9ydHMgdG8gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEplYW4tUGhpbGlwcGUgR3XpcmFyZCA8amVhbi1waGlsaXBwZS5ndWVyYXJkQHRpZ3JlcmF5ZS5vcmc+ICAqLworCisvKiAkSWQ6IHN0eWxlLmNzcyx2IDEuMTQgMjAwNC8wOS8xMCAyMDoxMjowOSBmZXZyaWVyIEV4cCBmZXZyaWVyICQgKi8KKworLyogUHLpc2VudGF0aW9uIGfpbulyYWxlIGR1IGRvY3VtZW50ICovCisvKiBPdmVyYWxsIGRvY3VtZW50IHByZXNlbnRhdGlvbiAqLworCitib2R5IHsKKyAgICAvKgorICAgIGZvbnQtZmFtaWx5OiBBcG9sbGluZSwgIlVSVyBQYWxsYWRpbyBMIiwgR2FyYW1vbmQsIGpHYXJhbW9uZCwKKyAgICAgICAgICAgICAgICAgIkJpdHN0cmVhbSBDeWJlcmJpdCIsICJQYWxhdGlubyBMaW5vdHlwZSIsIHNlcmlmOworICAgICAqLworICAgIG1hcmdpbjogNyU7CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Cit9CisKKy8qIFRhaWxsZSBkdSB0ZXh0ZSAqLworLyogVGV4dCBzaXplICovCisKKyogeyBmb250LXNpemU6IDEwMCU7IH0KKworLyogR2VzdGlvbiBkZXMgdGV4dGVzIG1pcyBlbiByZWxpZWYgaW1icmlxdelzICovCisvKiBFbWJlZGRlZCBlbXBoYXNpcyAqLworCitlbSB7IGZvbnQtc3R5bGU6IGl0YWxpYzsgfQorZW0gZW0geyBmb250LXN0eWxlOiBub3JtYWw7IH0KK2VtIGVtIGVtIHsgZm9udC1zdHlsZTogaXRhbGljOyB9CisKKy8qIFRpdHJlcyAqLworLyogVGl0bGVzICovCisKK2gxIHsgZm9udC1zaXplOiAyMDAlOyBmb250LXdlaWdodDogOTAwOyB9CitoMiB7IGZvbnQtc2l6ZTogMTYwJTsgZm9udC13ZWlnaHQ6IDkwMDsgfQoraDMgeyBmb250LXNpemU6IDEzMCU7IGZvbnQtd2VpZ2h0OiBib2xkOyB9CitoNCB7IGZvbnQtc2l6ZTogMTE1JTsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KK2g1IHsgZm9udC1zaXplOiAxMDglOyBmb250LXdlaWdodDogYm9sZDsgfQoraDYgeyAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOyB9CisKKy8qIE5vbSBkZSBmYW1pbGxlIGVuIHBldGl0ZXMgbWFqdXNjdWxlcyAodW5pcXVlbWVudCBlbiBmcmFu52FpcykgKi8KKy8qIExhc3QgbmFtZXMgaW4gc21hbGwgY2FwcyAoZm9yIEZyZW5jaCBvbmx5KSAqLworCisqW2NsYXNzfj0ic3VybmFtZSJdOmxhbmcoZnIpIHsgZm9udC12YXJpYW50OiBzbWFsbC1jYXBzOyB9CisKKy8qIEJsb2NzIGRlIGNpdGF0aW9uICovCisvKiBRdW90YXRpb24gYmxvY3MgKi8KKworZGl2W2NsYXNzfj0iYmxvY2txdW90ZSJdIHsKKyAgYm9yZGVyOiBzb2xpZCAycHggI0FBQTsKKyAgcGFkZGluZzogNXB4OworICBtYXJnaW46IDVweDsKK30KKworZGl2W2NsYXNzfj0iYmxvY2txdW90ZSJdID4gdGFibGUgeworICBib3JkZXI6IG5vbmU7Cit9CisKKy8qIEJsb2NzIGxpdOlyYXV4oDogZm9uZCBncmlzIGNsYWlyICovCisvKiBMaXRlcmFsIGJsb2NzOiBsaWdodCBncmF5IGJhY2tncm91bmQgKi8KKworKltjbGFzc349ImxpdGVyYWxsYXlvdXQiXSB7CisgIGJhY2tncm91bmQ6ICNmMGYwZjA7CisgIHBhZGRpbmc6IDVweDsKKyAgbWFyZ2luOiA1cHg7Cit9CisKKy8qIFByb2dyYW1tZXMgZXQgY2FwdHVyZXMgdGV4dGWgOiBmb25kIGJsZXUgY2xhaXIgKi8KKy8qIExpc3RpbmcgYW5kIHRleHQgc2NyZWVuIHNuYXBzaG90czogbGlnaHQgYmx1ZSBiYWNrZ3JvdW5kICovCisKKypbY2xhc3N+PSJwcm9ncmFtbGlzdGluZyJdLCAqW2NsYXNzfj0ic2NyZWVuIl0geworICBiYWNrZ3JvdW5kOiAjZjBmMGZmOworICBwYWRkaW5nOiA1cHg7CisgIG1hcmdpbjogNXB4OworfQorCisvKiBMZXMgdGV4dGVzIOAgcmVtcGxhY2VyIHNvbnQgc3VybGlnbulzIGVuIHZlcnQgcOJsZSAqLworLyogUmVwbGFjZWFibGUgdGV4dCBpbiBoaWdobGlnaHRlZCBpbiBwYWxlIGdyZWVuICovCisKKypbY2xhc3N+PSJyZXBsYWNlYWJsZSJdIHsgCisgICAgYmFja2dyb3VuZC1jb2xvcjogIzk4ZmI5ODsKKyAgICBmb250LXN0eWxlOiBub3JtYWw7IH0KKworLyogVGFibGVzoDogZm9uZHMgZ3JpcyBjbGFpciAmIGJvcmRzIHNpbXBsZXMgKi8KKy8qIFRhYmxlczogbGlnaHQgZ3JheSBiYWNrZ3JvdW5kIGFuZCBzb2xpZCBib3JkZXJzICovCisKKypbY2xhc3N+PSJ0YWJsZSJdICpbY2xhc3N+PSJ0aXRsZSJdIHsgd2lkdGg6MTAwJTsgYm9yZGVyOiAwcHg7IH0KKwordGFibGUgeworICAgIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7CisgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKKyAgICBwYWRkaW5nOiAycHg7CisgICAgbWFyZ2luOiA1cHg7Cit9CisKKy8qIExpc3RlcyBzaW1wbGVzIGVuIHN0eWxlIHRhYmxlICovCisvKiBTaW1wbGVzIGxpc3RzIGluIHRhYmxlIHByZXNlbnRhdGlvbiAqLworCit0YWJsZVtjbGFzc349InNpbXBsZWxpc3QiXSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDsKKyAgICBtYXJnaW46IDVweDsKKyAgICBib3JkZXI6IHNvbGlkIDFweCAjQUFBOworfQorCit0YWJsZVtjbGFzc349InNpbXBsZWxpc3QiXSB0ZCB7CisgICAgYm9yZGVyOiBzb2xpZCAxcHggI0FBQTsKK30KKworLyogTGVzIHRhYmxlcyAqLworLyogVGFibGVzICovCisKKypbY2xhc3N+PSJ0YWJsZSJdIHRhYmxlIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjBGMEYwOworICAgIGJvcmRlcjogc29saWQgMXB4ICNBQUE7Cit9CisqW2NsYXNzfj0iaW5mb3JtYWx0YWJsZSJdIHRhYmxlIHsgYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDsgfQorCit0aCx0ZCB7CisgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgIHRleHQtYWxpZ246IGxlZnQ7CisgICAgcGFkZGluZzogMC4xZW0gMC4zZW07CisgICAgZW1wdHktY2VsbHM6IHNob3c7IAorfQorCisvKiBBbGlnbmVtZW50IGRlcyBjb2xvbm5lcyAqLworLyogQ29sdW5tcyBhbGlnbm1lbnQgKi8KKwordGRbYWxpZ249Y2VudGVyXSAsICB0aFthbGlnbj1jZW50ZXJdICB7IHRleHQtYWxpZ246IGNlbnRlcjsgfQordGRbYWxpZ249cmlnaHRdICwgICB0aFthbGlnbj1yaWdodF0gICB7IHRleHQtYWxpZ246IHJpZ2h0OyB9Cit0ZFthbGlnbj1sZWZ0XSAsICAgIHRoW2FsaWduPWxlZnRdICAgIHsgdGV4dC1hbGlnbjogbGVmdDsgfQordGRbYWxpZ249anVzdGlmeV0gLCB0aFthbGlnbj1qdXN0aWZ5XSB7IHRleHQtYWxpZ246IGp1c3RpZnk7IH0KKworLyogUGFzIGRlIG1hcmdlIGF1dG91ciBkZXMgaW1hZ2VzICovCisvKiBObyBpbnNpZGUgbWFyZ2lucyBmb3IgaW1hZ2VzICovCisKK2ltZyB7IGJvcmRlcjogMDsgfQorCisvKiBMZXMgbGllbnMgbmUgc29udCBwYXMgc291bGlnbulzICovCisvKiBObyB1bmRlcmxpbmVzIGZvciBsaW5rcyAqLworCis6bGluayAsIDp2aXNpdGVkICwgOmFjdGl2ZSB7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQorCisvKiBQcnVkZW5jZaA6IGNhZHJlIGphdW5lIGV0IGZvbmQgamF1bmUgY2xhaXIgKi8KKy8qIENhdXRpb246IHllbGxvdyBib3JkZXIgYW5kIGxpZ2h0IHllbGxvdyBiYWNrZ3JvdW5kICovCisKKypbY2xhc3N+PSJjYXV0aW9uIl0geworICAgIGJvcmRlcjogc29saWQgMnB4IHllbGxvdzsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmUwOworICAgIHBhZGRpbmc6IDFlbSA2cHggMWVtIDsKKyAgICBtYXJnaW46IDVweDsKK30KKworKltjbGFzc349ImNhdXRpb24iXSB0aCB7CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZQorfQorCisqW2NsYXNzfj0iY2F1dGlvbiJdIHRhYmxlIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmUwOworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyogTm90ZSBpbXBvcnRhbnRloDogY2FkcmUgamF1bmUgZXQgZm9uZCBqYXVuZSBjbGFpciAqLworLyogSW1wb3J0YW50OiB5ZWxsb3cgYm9yZGVyIGFuZCBsaWdodCB5ZWxsb3cgYmFja2dyb3VuZCAqLworCisqW2NsYXNzfj0iaW1wb3J0YW50Il0geworICAgIGJvcmRlcjogc29saWQgMnB4IHllbGxvdzsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmUwOworICAgIHBhZGRpbmc6IDFlbSA2cHggMWVtOworICAgIG1hcmdpbjogNXB4OworfQorCisqW2NsYXNzfj0iaW1wb3J0YW50Il0gdGggeworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGUKK30KKworKltjbGFzc349ImltcG9ydGFudCJdIHRhYmxlICB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZlMDsKKyAgICBib3JkZXI6IG5vbmU7Cit9CisKKy8qIE1pc2UgZW4g6XZpZGVuY2WgOiB0ZXh0ZSBs6WfocmVtZW50IHBsdXMgZ3JhbmQgKi8KKy8qIEhpZ2hsaWdodHM6IHNsaWdodGx5IGxhcmdlciB0ZXh0cyAqLworCisqW2NsYXNzfj0iaGlnaGxpZ2h0cyJdIHsKKyAgICBmb250LXNpemU6ICAxMTAlOworfQorCisvKiBOb3RloDogY2FkcmUgYmxldSBldCBmb25kIGJsZXUgY2xhaXIgKi8KKy8qIE5vdGVzOiBibHVlIGJvcmRlciBhbmQgbGlnaHQgYmx1ZSBiYWNrZ3JvdW5kICovCisKKypbY2xhc3N+PSJub3RlIl0gICB7CisgICAgYm9yZGVyOiBzb2xpZCAycHggIzcwOTlDNTsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGZmOworICAgIHBhZGRpbmc6IDFlbSA2cHggMWVtIDsKKyAgICBtYXJnaW46IDVweDsKK30KKworKltjbGFzc349Im5vdGUiXSB0aCB7CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZQorfQorCisqW2NsYXNzfj0ibm90ZSJdIHRhYmxlIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGZmOworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyogQXN0dWNloDogY2FkcmUgdmVydCBldCBmb25kIHZlcnQgY2xhaXIgKi8KKy8qIFRpcDogZ3JlZW4gYm9yZGVyIGFuZCBsaWdodCBncmVlbiBiYWNrZ3JvdW5kICovCisKKypbY2xhc3N+PSJ0aXAiXSB7CisgICAgYm9yZGVyOiBzb2xpZCAycHggIzAwZmYwMDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmZmZmOworICAgIHBhZGRpbmc6IDFlbSA2cHggMWVtIDsKKyAgICBtYXJnaW46IDVweDsKK30KKworKltjbGFzc349InRpcCJdIHRoIHsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworfQorCisqW2NsYXNzfj0idGlwIl0gdGFibGUgeworICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGZmZmY7CisgICAgYm9yZGVyOiBub25lOworfQorCisvKiBBdmVydGlzc2VtZW50oDogY2FkcmUgcm91Z2UgZXQgZm9uZCByb3VnZSBjbGFpciAqLworLyogV2FybmluZzogcmVkIGJvcmRlciBhbmQgbGlnaHQgcmVkIGJhY2tncm91bmQgKi8KKworKltjbGFzc349Indhcm5pbmciXSB7CisgICAgYm9yZGVyOiBzb2xpZCAycHggI2ZmMDAwMDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmMGYwOyAKKyAgICBwYWRkaW5nOiAxZW0gNnB4IDFlbSA7CisgICAgbWFyZ2luOiA1cHg7Cit9CisKKypbY2xhc3N+PSJ3YXJuaW5nIl0gdGggeworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cit9CisgICAgICAgICAgICAgICAgICAgIAorCisqW2NsYXNzfj0id2FybmluZyJdIHRhYmxlIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmMGYwOworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyogRmluICovCisvKiBUaGUgRW5kICovCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS4xIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZjOGQ5NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS4xCkBAIC0wLDAgKzEsMTQyIEBACisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhleSwgRU1BQ1M6IC0qLSBucm9mZiAtKi0KKy5cIiBGaXJzdCBwYXJhbWV0ZXIsIE5BTUUsIHNob3VsZCBiZSBhbGwgY2FwcworLlwiIFNlY29uZCBwYXJhbWV0ZXIsIFNFQ1RJT04sIHNob3VsZCBiZSAxLTgsIG1heWJlIHcvIHN1YnNlY3Rpb24KKy5cIiBvdGhlciBwYXJhbWV0ZXJzIGFyZSBhbGxvd2VkOiBzZWUgbWFuKDcpLCBtYW4oMSkKKy5USCBCSVRCQUtFIDEgIk5vdmVtYmVyIDE5LCAyMDA2IgorLlwiIFBsZWFzZSBhZGp1c3QgdGhpcyBkYXRlIHdoZW5ldmVyIHJldmlzaW5nIHRoZSBtYW5wYWdlLgorLlwiCisuXCIgU29tZSByb2ZmIG1hY3JvcywgZm9yIHJlZmVyZW5jZToKKy5cIiAubmggICAgICAgIGRpc2FibGUgaHlwaGVuYXRpb24KKy5cIiAuaHkgICAgICAgIGVuYWJsZSBoeXBoZW5hdGlvbgorLlwiIC5hZCBsICAgICAgbGVmdCBqdXN0aWZ5CisuXCIgLmFkIGIgICAgICBqdXN0aWZ5IHRvIGJvdGggbGVmdCBhbmQgcmlnaHQgbWFyZ2lucworLlwiIC5uZiAgICAgICAgZGlzYWJsZSBmaWxsaW5nCisuXCIgLmZpICAgICAgICBlbmFibGUgZmlsbGluZworLlwiIC5iciAgICAgICAgaW5zZXJ0IGxpbmUgYnJlYWsKKy5cIiAuc3AgPG4+ICAgIGluc2VydCBuKzEgZW1wdHkgbGluZXMKKy5cIiBmb3IgbWFucGFnZS1zcGVjaWZpYyBtYWNyb3MsIHNlZSBtYW4oNykKKy5TSCBOQU1FCitCaXRCYWtlIFwtIHNpbXBsZSB0b29sIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRhc2tzCisuU0ggU1lOT1BTSVMKKy5CIGJpdGJha2UKKy5SSSBbIG9wdGlvbnMgXSAiIHBhY2thZ2VuYW1lcyIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGlzIG1hbnVhbCBwYWdlIGRvY3VtZW50cyBicmllZmx5IHRoZQorLkIgYml0YmFrZQorY29tbWFuZC4KKy5QUAorLlwiIFRlWCB1c2VycyBtYXkgYmUgbW9yZSBjb21mb3J0YWJsZSB3aXRoIHRoZSBcZkI8d2hhdGV2ZXI+XGZQIGFuZAorLlwiIFxmSTx3aGF0ZXZlcj5cZlAgZXNjYXBlIHNlcXVlbmNlcyB0byBpbnZvZGUgYm9sZCBmYWNlIGFuZCBpdGFsaWNzLCAKKy5cIiByZXNwZWN0aXZlbHkuCitcZkJiaXRiYWtlXGZQIGlzIGEgcHJvZ3JhbSB0aGF0IGV4ZWN1dGVzIHRoZSBzcGVjaWZpZWQgdGFzayAoZGVmYXVsdCBpcyAnYnVpbGQnKQorZm9yIGEgZ2l2ZW4gc2V0IG9mIEJpdEJha2UgZmlsZXMuCisuYnIKK0l0IGV4cGVjdHMgdGhhdCBCQkZJTEVTIGlzIGRlZmluZWQsIHdoaWNoIGlzIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgZmlsZXMgdG8KK2JlIGV4ZWN1dGVkLiBCQkZJTEVTIGRvZXMgc3VwcG9ydCB3aWxkY2FyZHMuCisuYnIKK0RlZmF1bHQgQkJGSUxFUyBhcmUgdGhlIC5iYiBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisuU0ggT1BUSU9OUworVGhpcyBwcm9ncmFtIGZvbGxvdyB0aGUgdXN1YWwgR05VIGNvbW1hbmQgbGluZSBzeW50YXgsIHdpdGggbG9uZworb3B0aW9ucyBzdGFydGluZyB3aXRoIHR3byBkYXNoZXMgKGAtJykuCisuVFAKKy5CIFwtaCwgXC1cLWhlbHAKK1Nob3cgc3VtbWFyeSBvZiBvcHRpb25zLgorLlRQCisuQiBcLVwtdmVyc2lvbgorU2hvdyB2ZXJzaW9uIG9mIHByb2dyYW0uCisuVFAKKy5CIFwtYkJVSUxERklMRSwgXC1cLWJ1aWxkZmlsZT1CVUlMREZJTEUKK2V4ZWN1dGUgdGhlIHRhc2sgYWdhaW5zdCB0aGlzIC5iYiBmaWxlLCByYXRoZXIgdGhhbiBhIHBhY2thZ2UgZnJvbSBCQkZJTEVTLgorLlRQCisuQiBcLWssIFwtXC1jb250aW51ZQorY29udGludWUgYXMgbXVjaCBhcyBwb3NzaWJsZSBhZnRlciBhbiBlcnJvci4gV2hpbGUgdGhlIHRhcmdldCB0aGF0IGZhaWxlZCwgYW5kCit0aG9zZSB0aGF0IGRlcGVuZCBvbiBpdCwgY2Fubm90IGJlIHJlbWFkZSwgdGhlIG90aGVyIGRlcGVuZGVuY2llcyBvZiB0aGVzZQordGFyZ2V0cyBjYW4gYmUgcHJvY2Vzc2VkIGFsbCB0aGUgc2FtZS4KKy5UUAorLkIgXC1hLCBcLVwtdHJ5YWx0Y29uZmlncworY29udGludWUgd2l0aCBidWlsZHMgYnkgdHJ5aW5nIHRvIHVzZSBhbHRlcm5hdGl2ZSBwcm92aWRlcnMgd2hlcmUgcG9zc2libGUuCisuVFAKKy5CIFwtZiwgXC1cLWZvcmNlCitmb3JjZSBydW4gb2Ygc3BlY2lmaWVkIGNtZCwgcmVnYXJkbGVzcyBvZiBzdGFtcCBzdGF0dXMKKy5UUAorLkIgXC1pLCBcLVwtaW50ZXJhY3RpdmUKK2Ryb3AgaW50byB0aGUgaW50ZXJhY3RpdmUgbW9kZSBhbHNvIGNhbGxlZCB0aGUgQml0QmFrZSBzaGVsbC4KKy5UUAorLkIgXC1jQ01ELCBcLVwtY21kPUNNRAorU3BlY2lmeSB0YXNrIHRvIGV4ZWN1dGUuIE5vdGUgdGhhdCB0aGlzIG9ubHkgZXhlY3V0ZXMgdGhlIHNwZWNpZmllZCB0YXNrIGZvcgordGhlIHByb3ZpZGVlIGFuZCB0aGUgcGFja2FnZXMgaXQgZGVwZW5kcyBvbiwgaS5lLiAnY29tcGlsZScgZG9lcyBub3QgaW1wbGljaXRseQorY2FsbCBzdGFnZSBmb3IgdGhlIGRlcGVuZGVuY2llcyAoSU9XOiB1c2Ugb25seSBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcpLgorRGVwZW5kaW5nIG9uIHRoZSBiYXNlLmJiY2xhc3MgYSBsaXN0dGFza3MgdGFzayBpcyBkZWZpbmVkIGFuZCB3aWxsIHNob3cKK2F2YWlsYWJsZSB0YXNrcy4KKy5UUAorLkIgXC1yRklMRSwgXC1cLXJlYWQ9RklMRSAKK3JlYWQgdGhlIHNwZWNpZmllZCBmaWxlIGJlZm9yZSBiaXRiYWtlLmNvbmYKKy5UUAorLkIgXC12LCBcLVwtdmVyYm9zZQorb3V0cHV0IG1vcmUgY2hpdC1jaGF0IHRvIHRoZSB0ZXJtaW5hbAorLlRQCisuQiBcLUQsIFwtXC1kZWJ1ZworSW5jcmVhc2UgdGhlIGRlYnVnIGxldmVsLiBZb3UgY2FuIHNwZWNpZnkgdGhpcyBtb3JlIHRoYW4gb25jZS4KKy5UUAorLkIgXC1uLCBcLVwtZHJ5LXJ1bgorZG9uJ3QgZXhlY3V0ZSwganVzdCBnbyB0aHJvdWdoIHRoZSBtb3Rpb25zCisuVFAKKy5CIFwtcCwgXC1cLXBhcnNlLW9ubHkKK3F1aXQgYWZ0ZXIgcGFyc2luZyB0aGUgQkIgZmlsZXMgKGRldmVsb3BlcnMgb25seSkKKy5UUAorLkIgXC1zLCBcLVwtc2hvdy12ZXJzaW9ucworc2hvdyBjdXJyZW50IGFuZCBwcmVmZXJyZWQgdmVyc2lvbnMgb2YgYWxsIHBhY2thZ2VzCisuVFAKKy5CIFwtZSwgXC1cLWVudmlyb25tZW50CitzaG93IHRoZSBnbG9iYWwgb3IgcGVyLXJlY2lwZSBlbnZpcm9ubWVudCAodGhpcyBpcyB3aGF0IHVzZWQgdG8gYmUgYmJyZWFkKQorLlRQCisuQiBcLWcsIFwtXC1ncmFwaHZpegorZW1pdCB0aGUgZGVwZW5kZW5jeSB0cmVlcyBvZiB0aGUgc3BlY2lmaWVkIHBhY2thZ2VzIGluIHRoZSBkb3Qgc3ludGF4CisuVFAKKy5CIFwtSUlHTk9SRURcX0RPVFxfREVQUywgXC1cLWlnbm9yZS1kZXBzPUlHTk9SRURfRE9UX0RFUFMKK1N0b3AgcHJvY2Vzc2luZyBhdCB0aGUgZ2l2ZW4gbGlzdCBvZiBkZXBlbmRlbmNpZXMgd2hlbiBnZW5lcmF0aW5nIGRlcGVuZGVuY3kKK2dyYXBocy4gVGhpcyBjYW4gaGVscCB0byBtYWtlIHRoZSBncmFwaCBtb3JlIGFwcGVhbGluZworLlRQCisuQiBcLWxERUJVR19ET01BSU5TLCBcLVwtbG9nLWRvbWFpbnM9REVCVUdfRE9NQUlOUworU2hvdyBkZWJ1ZyBsb2dnaW5nIGZvciB0aGUgc3BlY2lmaWVkIGxvZ2dpbmcgZG9tYWlucworLlRQCisuQiBcLVAsIFwtXC1wcm9maWxlCitwcm9maWxlIHRoZSBjb21tYW5kIGFuZCBwcmludCBhIHJlcG9ydAorLlRQCisuQiBcLXVVSSwgXC1cLXVpPVVJCitVc2VyIGludGVyZmFjZSB0byB1c2UuIEN1cnJlbnRseSwgaG9iLCBkZXBleHAsIGdvZ2dsZSBvciBuY3Vyc2VzIGNhbiBiZSBzcGVjaWZpZWQgYXMgVUkuCisuVFAKKy5CIFwtdFNFUlZFUlRZUEUsIFwtXC1zZXJ2ZXJ0eXBlPVNFUlZFUlRZUEUKK0Nob29zZSB3aGljaCBzZXJ2ZXIgdG8gdXNlLCBub25lLCBwcm9jZXNzIG9yIHhtbHJwYy4KKy5UUAorLkIgXC1cLXJldmlzaW9ucy1jaGFuZ2VkCitTZXQgdGhlIGV4aXQgY29kZSBkZXBlbmRpbmcgb24gd2hldGhlciB1cHN0cmVhbSBmbG9hdGluZyByZXZpc2lvbnMgaGF2ZSBjaGFuZ2VkIG9yIG5vdC4KKy5UUAorLkIgXC1cLXNlcnZlci1vbmx5CitSdW4gYml0YmFrZSB3aXRob3V0IFVJLCAgdGhlIGZyb250ZW5kIGNhbiBjb25uZWN0IHdpdGggYml0YmFrZSBzZXJ2ZXIgaXRzZWxmLgorLlRQCisuQiBcLUJCSU5ELCBcLVwtYmluZD1CSU5ECitUaGUgbmFtZS9hZGRyZXNzIGZvciB0aGUgYml0YmFrZSBzZXJ2ZXIgdG8gYmluZCB0by4KKy5UUAorLkIgXC1cLW5vXC1zZXRzY2VuZQorRG8gbm90IHJ1biBhbnkgc2V0c2NlbmUgdGFza3MsIGZvcmNlcyBidWlsZHMuCisKKy5TSCBFTlZJUk9OTUVOVCBWQVJJQUJMRVMKK2JpdGJha2UgdXNlcyB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBjb250cm9sIGl0cworb3BlcmF0aW9uOgorLlRQCisuQiBCSVRCQUtFX1VJCitUaGUgYml0YmFrZSB1c2VyIGludGVyZmFjZTsgb3ZlcnJpZGRlbiBieSB0aGUgXGZCLXVcZlAgY29tbWFuZGxpbmUgb3B0aW9uLgorCisuU0ggQVVUSE9SUworQml0QmFrZSB3YXMgd3JpdHRlbiBieSAKK1BoaWwgQmx1bmRlbGwsCitIb2xnZXIgRnJleXRoZXIsCitDaHJpcyBMYXJzb24sCitNaWNrZXkgTGF1ZXIsCitSaWNoYXJkIFB1cmRpZSwKK0hvbGdlciBTY2h1cmlnCisuUFAKK1RoaXMgbWFudWFsIHBhZ2Ugd2FzIHdyaXR0ZW4gYnkgTWFyY2luIEp1c3praWV3aWN6IDxtYXJjaW5AaHJ3Lm9uZS5wbD4KK2ZvciB0aGUgRGViaWFuIHByb2plY3QgKGJ1dCBtYXkgYmUgdXNlZCBieSBvdGhlcnMpLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9wb2t5LmVudCBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvcG9reS5lbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAzMmUxNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvcG9reS5lbnQKQEAgLTAsMCArMSw1OSBAQAorPCFFTlRJVFkgRElTVFJPICIxLjQiPgorPCFFTlRJVFkgRElTVFJPX05BTUUgInRiZCI+Cis8IUVOVElUWSBZT0NUT19ET0NfVkVSU0lPTiAiMS40Ij4KKzwhRU5USVRZIFBPS1lWRVJTSU9OICI4LjAiPgorPCFFTlRJVFkgWU9DVE9fUE9LWSAicG9reS0mRElTVFJPX05BTUU7LSZQT0tZVkVSU0lPTjsiPgorPCFFTlRJVFkgQ09QWVJJR0hUX1lFQVIgIjIwMTAtMjAxMyI+Cis8IUVOVElUWSBZT0NUT19ETF9VUkwgImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZyI+Cis8IUVOVElUWSBZT0NUT19IT01FX1VSTCAiaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnIj4KKzwhRU5USVRZIFlPQ1RPX0xJU1RTX1VSTCAiaHR0cDovL2xpc3RzLnlvY3RvcHJvamVjdC5vcmciPgorPCFFTlRJVFkgWU9DVE9fQlVHWklMTEFfVVJMICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZyI+Cis8IUVOVElUWSBZT0NUT19XSUtJX1VSTCAiaHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmciPgorPCFFTlRJVFkgWU9DVE9fQUJfVVJMICJodHRwOi8vYXV0b2J1aWxkZXIueW9jdG9wcm9qZWN0Lm9yZyI+Cis8IUVOVElUWSBZT0NUT19HSVRfVVJMICJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmciPgorPCFFTlRJVFkgWU9DVE9fQURUUkVQT19VUkwgImh0dHA6Ly9hZHRyZXBvLnlvY3RvcHJvamVjdC5vcmciPgorPCFFTlRJVFkgT0VfSE9NRV9VUkwgImh0dHA6Ly93d3cub3BlbmVtYmVkZGVkLm9yZyI+Cis8IUVOVElUWSBPRV9MSVNUU19VUkwgImh0dHA6Ly9saXN0cy5saW51eHRvZ28ub3JnL2NnaS1iaW4vbWFpbG1hbiI+Cis8IUVOVElUWSBPRV9ET0NTX1VSTCAiaHR0cDovL2RvY3Mub3BlbmVtYmVkZGVkLm9yZyI+Cis8IUVOVElUWSBPSF9IT01FX1VSTCAiaHR0cDovL28taGFuZC5jb20iPgorPCFFTlRJVFkgQklUQkFLRV9IT01FX1VSTCAiaHR0cDovL2RldmVsb3Blci5iZXJsaW9zLmRlL3Byb2plY3RzL2JpdGJha2UvIj4KKzwhRU5USVRZIEVDTElQU0VfTUFJTl9VUkwgImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZG93bmxvYWRzIj4KKzwhRU5USVRZIEVDTElQU0VfRExfVVJMICJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmciPgorPCFFTlRJVFkgRUNMSVBTRV9ETF9QTFVHSU5fVVJMICImWU9DVE9fRExfVVJMOy9yZWxlYXNlcy9lY2xpcHNlLXBsdWdpbi8mRElTVFJPOyI+Cis8IUVOVElUWSBFQ0xJUFNFX1VQREFURVNfVVJMICImRUNMSVBTRV9ETF9VUkw7L3RtL3VwZGF0ZXMvMy4zIj4KKzwhRU5USVRZIEVDTElQU0VfSU5ESUdPX1VSTCAiJkVDTElQU0VfRExfVVJMOy9yZWxlYXNlcy9pbmRpZ28iPgorPCFFTlRJVFkgRUNMSVBTRV9KVU5PX1VSTCAiJkVDTElQU0VfRExfVVJMOy9yZWxlYXNlcy9qdW5vIj4KKzwhRU5USVRZIEVDTElQU0VfSU5ESUdPX0NEVF9VUkwgIiZFQ0xJUFNFX0RMX1VSTDt0b29scy9jZHQvcmVsZWFzZXMvaW5kaWdvIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfVVJMICImWU9DVE9fSE9NRV9VUkw7L2RvY3MiPgorPCFFTlRJVFkgWU9DVE9fU09VUkNFU19VUkwgIiZZT0NUT19IT01FX1VSTDsvc291cmNlcy8iPgorPCFFTlRJVFkgWU9DVE9fQUJfUE9SVF9VUkwgIiZZT0NUT19BQl9VUkw7OjgwMTAiPgorPCFFTlRJVFkgWU9DVE9fQUJfTklHSFRMWV9VUkwgIiZZT0NUT19BQl9VUkw7L25pZ2h0bHkvIj4KKzwhRU5USVRZIFlPQ1RPX1BPS1lfVVJMICImWU9DVE9fRExfVVJMOy9yZWxlYXNlcy9wb2t5LyI+Cis8IUVOVElUWSBZT0NUT19SRUxFQVNFX0RMX1VSTCAiJllPQ1RPX0RMX1VSTDsvcmVsZWFzZXMveW9jdG8veW9jdG8tJkRJU1RSTzsiPgorPCFFTlRJVFkgWU9DVE9fVE9PTENIQUlOX0RMX1VSTCAiJllPQ1RPX1JFTEVBU0VfRExfVVJMOy90b29sY2hhaW4vIj4KKzwhRU5USVRZIFlPQ1RPX0VDTElQU0VfRExfVVJMICImWU9DVE9fUkVMRUFTRV9ETF9VUkw7L2VjbGlwc2UtcGx1Z2luL2luZGlnbzsiPgorPCFFTlRJVFkgWU9DVE9fQURUSU5TVEFMTEVSX0RMX1VSTCAiJllPQ1RPX1JFTEVBU0VfRExfVVJMOy9hZHRfaW5zdGFsbGVyIj4KKzwhRU5USVRZIFlPQ1RPX1BPS1lfRExfVVJMICImWU9DVE9fUkVMRUFTRV9ETF9VUkw7LyZZT0NUT19QT0tZOy50YXIuYnoyIj4KKzwhRU5USVRZIFlPQ1RPX01BQ0hJTkVTX0RMX1VSTCAiJllPQ1RPX1JFTEVBU0VfRExfVVJMOy9tYWNoaW5lcyI+Cis8IUVOVElUWSBZT0NUT19RRU1VX0RMX1VSTCAiJllPQ1RPX01BQ0hJTkVTX0RMX1VSTDsvcWVtdSI+Cis8IUVOVElUWSBZT0NUT19QWVRIT04taTY4Nl9ETF9VUkwgIiZZT0NUT19ETF9VUkw7L3JlbGVhc2VzL21pc2NzdXBwb3J0L3B5dGhvbi1uYXRpdmVzZGstc3RhbmRhbG9uZS1pNjg2LnRhci5iejIiPgorPCFFTlRJVFkgWU9DVE9fUFlUSE9OLXg4Nl82NF9ETF9VUkwgIiZZT0NUT19ETF9VUkw7L3JlbGVhc2VzL21pc2NzdXBwb3J0L3B5dGhvbi1uYXRpdmVzZGstc3RhbmRhbG9uZS14ODZfNjQudGFyLmJ6MiI+Cis8IUVOVElUWSBZT0NUT19ET0NTX1FTX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L3lvY3RvLXByb2plY3QtcXMveW9jdG8tcHJvamVjdC1xcy5odG1sIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfQURUX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L2FkdC1tYW51YWwvYWR0LW1hbnVhbC5odG1sIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfUkVGX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfQlNQX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L2JzcC1ndWlkZS9ic3AtZ3VpZGUuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19ET0NTX0RFVl9VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy9kZXYtbWFudWFsL2Rldi1tYW51YWwuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19ET0NTX0tFUk5FTF9VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy9rZXJuZWwtbWFudWFsL2tlcm5lbC1tYW51YWwuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19BRFRQQVRIX0RJUiAiL29wdC9wb2t5LyZESVNUUk87Ij4KKzwhRU5USVRZIFlPQ1RPX1BPS1lfVEFSQkFMTCAiJllPQ1RPX1BPS1k7LnRhci5iejIiPgorPCFFTlRJVFkgT0VfSU5JVF9QQVRIICImWU9DVE9fUE9LWTsvb2UtaW5pdC1idWlsZC1lbnYiPgorPCFFTlRJVFkgT0VfSU5JVF9GSUxFICJvZS1pbml0LWJ1aWxkLWVudiI+Cis8IUVOVElUWSBVQlVOVFVfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUwgImdhd2sgd2dldCBnaXQtY29yZSBkaWZmc3RhdCB1bnppcCB0ZXhpbmZvIFwKKyAgICAgYnVpbGQtZXNzZW50aWFsIGNocnBhdGgiPgorPCFFTlRJVFkgRkVET1JBX0hPU1RfUEFDS0FHRVNfRVNTRU5USUFMICJnYXdrIG1ha2Ugd2dldCB0YXIgYnppcDIgZ3ppcCBweXRob24gdW56aXAgcGVybCBwYXRjaCBcCisgICAgIGRpZmZ1dGlscyBkaWZmc3RhdCBnaXQgY3BwIGdjYyBnY2MtYysrIGVnbGliYy1kZXZlbCB0ZXhpbmZvIGNocnBhdGggXAorICAgICBjY2FjaGUiPgorPCFFTlRJVFkgT1BFTlNVU0VfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUwgInB5dGhvbiBnY2MgZ2NjLWMrKyBnaXQgY2hycGF0aCBtYWtlIHdnZXQgcHl0aG9uLXhtbCBcCisgICAgIGRpZmZzdGF0IHRleGluZm8gcHl0aG9uLWN1cnNlcyI+Cis8IUVOVElUWSBDRU5UT1NfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUwgImdhd2sgbWFrZSB3Z2V0IHRhciBiemlwMiBnemlwIHB5dGhvbiB1bnppcCBwZXJsIHBhdGNoIFwKKyAgICAgZGlmZnV0aWxzIGRpZmZzdGF0IGdpdCBjcHAgZ2NjIGdjYy1jKysgZ2xpYmMtZGV2ZWwgdGV4aW5mbyBjaHJwYXRoIj4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvVmVyYS50dGYgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmEudHRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4Y2Q2YjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmEudHRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvVmVyYS54bWwgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjODIwNDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmEueG1sCkBAIC0wLDAgKzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PGZvbnQtbWV0cmljcyB0eXBlPSJUWVBFMCI+PGZvbnQtbmFtZT5CaXRzdHJlYW1WZXJhU2FuczwvZm9udC1uYW1lPjxlbWJlZC8+PGNhcC1oZWlnaHQ+NzI5PC9jYXAtaGVpZ2h0Pjx4LWhlaWdodD41NDY8L3gtaGVpZ2h0Pjxhc2NlbmRlcj45Mjg8L2FzY2VuZGVyPjxkZXNjZW5kZXI+LTIzNTwvZGVzY2VuZGVyPjxiYm94PjxsZWZ0Pi0xODM8L2xlZnQ+PGJvdHRvbT4tMjM1PC9ib3R0b20+PHJpZ2h0PjEyODc8L3JpZ2h0Pjx0b3A+OTI4PC90b3A+PC9iYm94PjxmbGFncz4zMjwvZmxhZ3M+PHN0ZW12PjA8L3N0ZW12PjxpdGFsaWNhbmdsZT4wPC9pdGFsaWNhbmdsZT48c3VidHlwZT5UWVBFMDwvc3VidHlwZT48bXVsdGlieXRlLWV4dHJhcz48Y2lkLXR5cGU+Q0lERm9udFR5cGUyPC9jaWQtdHlwZT48ZGVmYXVsdC13aWR0aD4wPC9kZWZhdWx0LXdpZHRoPjxiZnJhbmdlcz48YmYgZ2k9IjMiIHVlPSIxMjYiIHVzPSIzMiIvPjxiZiBnaT0iMTcyIiB1ZT0iMTYwIiB1cz0iMTYwIi8+PGJmIGdpPSIxNjMiIHVlPSIxNjEiIHVzPSIxNjEiLz48YmYgZ2k9IjEzMiIgdWU9IjE2MyIgdXM9IjE2MiIvPjxiZiBnaT0iMTg5IiB1ZT0iMTY0IiB1cz0iMTY0Ii8+PGJmIGdpPSIxNTAiIHVlPSIxNjUiIHVzPSIxNjUiLz48YmYgZ2k9IjIzMSIgdWU9IjE2NiIgdXM9IjE2NiIvPjxiZiBnaT0iMTM0IiB1ZT0iMTY3IiB1cz0iMTY3Ii8+PGJmIGdpPSIxNDIiIHVlPSIxNjgiIHVzPSIxNjgiLz48YmYgZ2k9IjEzOSIgdWU9IjE2OSIgdXM9IjE2OSIvPjxiZiBnaT0iMTU3IiB1ZT0iMTcwIiB1cz0iMTcwIi8+PGJmIGdpPSIxNjkiIHVlPSIxNzEiIHVzPSIxNzEiLz48YmYgZ2k9IjE2NCIgdWU9IjE3MiIgdXM9IjE3MiIvPjxiZiBnaT0iMjU2IiB1ZT0iMTczIiB1cz0iMTczIi8+PGJmIGdpPSIxMzgiIHVlPSIxNzQiIHVzPSIxNzQiLz48YmYgZ2k9IjIxNyIgdWU9IjE3NSIgdXM9IjE3NSIvPjxiZiBnaT0iMTMxIiB1ZT0iMTc2IiB1cz0iMTc2Ii8+PGJmIGdpPSIxNDciIHVlPSIxNzciIHVzPSIxNzciLz48YmYgZ2k9IjI0MSIgdWU9IjE3OSIgdXM9IjE3OCIvPjxiZiBnaT0iMTQxIiB1ZT0iMTgwIiB1cz0iMTgwIi8+PGJmIGdpPSIxNTEiIHVlPSIxODEiIHVzPSIxODEiLz48YmYgZ2k9IjEzNiIgdWU9IjE4MiIgdXM9IjE4MiIvPjxiZiBnaT0iMTk1IiB1ZT0iMTgzIiB1cz0iMTgzIi8+PGJmIGdpPSIyMjEiIHVlPSIxODQiIHVzPSIxODQiLz48YmYgZ2k9IjI0MCIgdWU9IjE4NSIgdXM9IjE4NSIvPjxiZiBnaT0iMTU4IiB1ZT0iMTg2IiB1cz0iMTg2Ii8+PGJmIGdpPSIxNzAiIHVlPSIxODciIHVzPSIxODciLz48YmYgZ2k9IjI0MyIgdWU9IjE5MCIgdXM9IjE4OCIvPjxiZiBnaT0iMTYyIiB1ZT0iMTkxIiB1cz0iMTkxIi8+PGJmIGdpPSIxNzMiIHVlPSIxOTIiIHVzPSIxOTIiLz48YmYgZ2k9IjIwMSIgdWU9IjE5MyIgdXM9IjE5MyIvPjxiZiBnaT0iMTk5IiB1ZT0iMTk0IiB1cz0iMTk0Ii8+PGJmIGdpPSIxNzQiIHVlPSIxOTUiIHVzPSIxOTUiLz48YmYgZ2k9Ijk4IiB1ZT0iMTk3IiB1cz0iMTk2Ii8+PGJmIGdpPSIxNDQiIHVlPSIxOTgiIHVzPSIxOTgiLz48YmYgZ2k9IjEwMCIgdWU9IjE5OSIgdXM9IjE5OSIvPjxiZiBnaT0iMjAzIiB1ZT0iMjAwIiB1cz0iMjAwIi8+PGJmIGdpPSIxMDEiIHVlPSIyMDEiIHVzPSIyMDEiLz48YmYgZ2k9IjIwMCIgdWU9IjIwMiIgdXM9IjIwMiIvPjxiZiBnaT0iMjAyIiB1ZT0iMjAzIiB1cz0iMjAzIi8+PGJmIGdpPSIyMDciIHVlPSIyMDQiIHVzPSIyMDQiLz48YmYgZ2k9IjIwNCIgdWU9IjIwNyIgdXM9IjIwNSIvPjxiZiBnaT0iMjMyIiB1ZT0iMjA4IiB1cz0iMjA4Ii8+PGJmIGdpPSIxMDIiIHVlPSIyMDkiIHVzPSIyMDkiLz48YmYgZ2k9IjIxMCIgdWU9IjIxMCIgdXM9IjIxMCIvPjxiZiBnaT0iMjA4IiB1ZT0iMjEyIiB1cz0iMjExIi8+PGJmIGdpPSIxNzUiIHVlPSIyMTMiIHVzPSIyMTMiLz48YmYgZ2k9IjEwMyIgdWU9IjIxNCIgdXM9IjIxNCIvPjxiZiBnaT0iMjM5IiB1ZT0iMjE1IiB1cz0iMjE1Ii8+PGJmIGdpPSIxNDUiIHVlPSIyMTYiIHVzPSIyMTYiLz48YmYgZ2k9IjIxMyIgdWU9IjIxNyIgdXM9IjIxNyIvPjxiZiBnaT0iMjExIiB1ZT0iMjE5IiB1cz0iMjE4Ii8+PGJmIGdpPSIxMDQiIHVlPSIyMjAiIHVzPSIyMjAiLz48YmYgZ2k9IjIzNCIgdWU9IjIyMSIgdXM9IjIyMSIvPjxiZiBnaT0iMjM2IiB1ZT0iMjIyIiB1cz0iMjIyIi8+PGJmIGdpPSIxMzciIHVlPSIyMjMiIHVzPSIyMjMiLz48YmYgZ2k9IjEwNiIgdWU9IjIyNCIgdXM9IjIyNCIvPjxiZiBnaT0iMTA1IiB1ZT0iMjI1IiB1cz0iMjI1Ii8+PGJmIGdpPSIxMDciIHVlPSIyMjYiIHVzPSIyMjYiLz48YmYgZ2k9IjEwOSIgdWU9IjIyNyIgdXM9IjIyNyIvPjxiZiBnaT0iMTA4IiB1ZT0iMjI4IiB1cz0iMjI4Ii8+PGJmIGdpPSIxMTAiIHVlPSIyMjkiIHVzPSIyMjkiLz48YmYgZ2k9IjE2MCIgdWU9IjIzMCIgdXM9IjIzMCIvPjxiZiBnaT0iMTExIiB1ZT0iMjMxIiB1cz0iMjMxIi8+PGJmIGdpPSIxMTMiIHVlPSIyMzIiIHVzPSIyMzIiLz48YmYgZ2k9IjExMiIgdWU9IjIzMyIgdXM9IjIzMyIvPjxiZiBnaT0iMTE0IiB1ZT0iMjM1IiB1cz0iMjM0Ii8+PGJmIGdpPSIxMTciIHVlPSIyMzYiIHVzPSIyMzYiLz48YmYgZ2k9IjExNiIgdWU9IjIzNyIgdXM9IjIzNyIvPjxiZiBnaT0iMTE4IiB1ZT0iMjM5IiB1cz0iMjM4Ii8+PGJmIGdpPSIyMzMiIHVlPSIyNDAiIHVzPSIyNDAiLz48YmYgZ2k9IjEyMCIgdWU9IjI0MSIgdXM9IjI0MSIvPjxiZiBnaT0iMTIyIiB1ZT0iMjQyIiB1cz0iMjQyIi8+PGJmIGdpPSIxMjEiIHVlPSIyNDMiIHVzPSIyNDMiLz48YmYgZ2k9IjEyMyIgdWU9IjI0NCIgdXM9IjI0NCIvPjxiZiBnaT0iMTI1IiB1ZT0iMjQ1IiB1cz0iMjQ1Ii8+PGJmIGdpPSIxMjQiIHVlPSIyNDYiIHVzPSIyNDYiLz48YmYgZ2k9IjE4NCIgdWU9IjI0NyIgdXM9IjI0NyIvPjxiZiBnaT0iMTYxIiB1ZT0iMjQ4IiB1cz0iMjQ4Ii8+PGJmIGdpPSIxMjciIHVlPSIyNDkiIHVzPSIyNDkiLz48YmYgZ2k9IjEyNiIgdWU9IjI1MCIgdXM9IjI1MCIvPjxiZiBnaT0iMTI4IiB1ZT0iMjUyIiB1cz0iMjUxIi8+PGJmIGdpPSIyMzUiIHVlPSIyNTMiIHVzPSIyNTMiLz48YmYgZ2k9IjIzNyIgdWU9IjI1NCIgdXM9IjI1NCIvPjxiZiBnaT0iMTg2IiB1ZT0iMjU1IiB1cz0iMjU1Ii8+PGJmIGdpPSIyNTEiIHVlPSIyNjMiIHVzPSIyNjIiLz48YmYgZ2k9IjI1MyIgdWU9IjI2OSIgdXM9IjI2OCIvPjxiZiBnaT0iMCIgdWU9IjI3MCIgdXM9IjI3MCIvPjxiZiBnaT0iMCIgdWU9IjI3MSIgdXM9IjI3MSIvPjxiZiBnaT0iMCIgdWU9IjI3MiIgdXM9IjI3MiIvPjxiZiBnaT0iMjU1IiB1ZT0iMjczIiB1cz0iMjczIi8+PGJmIGdpPSIyNDYiIHVlPSIyODciIHVzPSIyODYiLz48YmYgZ2k9IjI0OCIgdWU9IjMwNCIgdXM9IjMwNCIvPjxiZiBnaT0iMjE0IiB1ZT0iMzA1IiB1cz0iMzA1Ii8+PGJmIGdpPSIyMjUiIHVlPSIzMjIiIHVzPSIzMjEiLz48YmYgZ2k9IjE3NiIgdWU9IjMzOSIgdXM9IjMzOCIvPjxiZiBnaT0iMjQ5IiB1ZT0iMzUxIiB1cz0iMzUwIi8+PGJmIGdpPSIyMjciIHVlPSIzNTMiIHVzPSIzNTIiLz48YmYgZ2k9IjE4NyIgdWU9IjM3NiIgdXM9IjM3NiIvPjxiZiBnaT0iMjI5IiB1ZT0iMzgyIiB1cz0iMzgxIi8+PGJmIGdpPSIxNjYiIHVlPSI0MDIiIHVzPSI0MDIiLz48YmYgZ2k9IjIxNSIgdWU9IjcxMCIgdXM9IjcxMCIvPjxiZiBnaT0iMjI0IiB1ZT0iNzExIiB1cz0iNzExIi8+PGJmIGdpPSIyMTgiIHVlPSI3MzAiIHVzPSI3MjgiLz48YmYgZ2k9IjIyMyIgdWU9IjczMSIgdXM9IjczMSIvPjxiZiBnaT0iMjE2IiB1ZT0iNzMyIiB1cz0iNzMyIi8+PGJmIGdpPSIyMjIiIHVlPSI3MzMiIHVzPSI3MzMiLz48YmYgZ2k9IjE1OSIgdWU9IjkzNyIgdXM9IjkzNyIvPjxiZiBnaT0iMTU1IiB1ZT0iOTYwIiB1cz0iOTYwIi8+PGJmIGdpPSIxNzgiIHVlPSI4MjEyIiB1cz0iODIxMSIvPjxiZiBnaT0iMCIgdWU9IjgyMTMiIHVzPSI4MjEzIi8+PGJmIGdpPSIwIiB1ZT0iODIxNCIgdXM9IjgyMTQiLz48YmYgZ2k9IjAiIHVlPSI4MjE1IiB1cz0iODIxNSIvPjxiZiBnaT0iMTgyIiB1ZT0iODIxNyIgdXM9IjgyMTYiLz48YmYgZ2k9IjE5NiIgdWU9IjgyMTgiIHVzPSI4MjE4Ii8+PGJmIGdpPSIwIiB1ZT0iODIxOSIgdXM9IjgyMTkiLz48YmYgZ2k9IjE4MCIgdWU9IjgyMjEiIHVzPSI4MjIwIi8+PGJmIGdpPSIxOTciIHVlPSI4MjIyIiB1cz0iODIyMiIvPjxiZiBnaT0iMCIgdWU9IjgyMjMiIHVzPSI4MjIzIi8+PGJmIGdpPSIxMzAiIHVlPSI4MjI0IiB1cz0iODIyNCIvPjxiZiBnaT0iMTk0IiB1ZT0iODIyNSIgdXM9IjgyMjUiLz48YmYgZ2k9IjEzNSIgdWU9IjgyMjYiIHVzPSI4MjI2Ii8+PGJmIGdpPSIwIiB1ZT0iODIyNyIgdXM9IjgyMjciLz48YmYgZ2k9IjAiIHVlPSI4MjI4IiB1cz0iODIyOCIvPjxiZiBnaT0iMCIgdWU9IjgyMjkiIHVzPSI4MjI5Ii8+PGJmIGdpPSIxNzEiIHVlPSI4MjMwIiB1cz0iODIzMCIvPjxiZiBnaT0iMTk4IiB1ZT0iODI0MCIgdXM9IjgyNDAiLz48YmYgZ2k9IjE5MCIgdWU9IjgyNTAiIHVzPSI4MjQ5Ii8+PGJmIGdpPSIyNTgiIHVlPSI4MzY0IiB1cz0iODM2NCIvPjxiZiBnaT0iMTQwIiB1ZT0iODQ4MiIgdXM9Ijg0ODIiLz48YmYgZ2k9IjE1MiIgdWU9Ijg3MDYiIHVzPSI4NzA2Ii8+PGJmIGdpPSIwIiB1ZT0iODcwNyIgdXM9Ijg3MDciLz48YmYgZ2k9IjAiIHVlPSI4NzA4IiB1cz0iODcwOCIvPjxiZiBnaT0iMCIgdWU9Ijg3MDkiIHVzPSI4NzA5Ii8+PGJmIGdpPSIxNjgiIHVlPSI4NzEwIiB1cz0iODcxMCIvPjxiZiBnaT0iMTU0IiB1ZT0iODcxOSIgdXM9Ijg3MTkiLz48YmYgZ2k9IjAiIHVlPSI4NzIwIiB1cz0iODcyMCIvPjxiZiBnaT0iMTUzIiB1ZT0iODcyMSIgdXM9Ijg3MjEiLz48YmYgZ2k9IjIzOCIgdWU9Ijg3MjIiIHVzPSI4NzIyIi8+PGJmIGdpPSIwIiB1ZT0iODcyMyIgdXM9Ijg3MjMiLz48YmYgZ2k9IjAiIHVlPSI4NzI0IiB1cz0iODcyNCIvPjxiZiBnaT0iMTg4IiB1ZT0iODcyNSIgdXM9Ijg3MjUiLz48YmYgZ2k9IjAiIHVlPSI4NzI2IiB1cz0iODcyNiIvPjxiZiBnaT0iMCIgdWU9Ijg3MjciIHVzPSI4NzI3Ii8+PGJmIGdpPSIwIiB1ZT0iODcyOCIgdXM9Ijg3MjgiLz48YmYgZ2k9IjI1NyIgdWU9Ijg3MjkiIHVzPSI4NzI5Ii8+PGJmIGdpPSIxNjUiIHVlPSI4NzMwIiB1cz0iODczMCIvPjxiZiBnaT0iMCIgdWU9Ijg3MzEiIHVzPSI4NzMxIi8+PGJmIGdpPSIwIiB1ZT0iODczMiIgdXM9Ijg3MzIiLz48YmYgZ2k9IjAiIHVlPSI4NzMzIiB1cz0iODczMyIvPjxiZiBnaT0iMTQ2IiB1ZT0iODczNCIgdXM9Ijg3MzQiLz48YmYgZ2k9IjE1NiIgdWU9Ijg3NDciIHVzPSI4NzQ3Ii8+PGJmIGdpPSIxNjciIHVlPSI4Nzc2IiB1cz0iODc3NiIvPjxiZiBnaT0iMTQzIiB1ZT0iODgwMCIgdXM9Ijg4MDAiLz48YmYgZ2k9IjAiIHVlPSI4ODAxIiB1cz0iODgwMSIvPjxiZiBnaT0iMCIgdWU9Ijg4MDIiIHVzPSI4ODAyIi8+PGJmIGdpPSIwIiB1ZT0iODgwMyIgdXM9Ijg4MDMiLz48YmYgZ2k9IjE0OCIgdWU9Ijg4MDUiIHVzPSI4ODA0Ii8+PGJmIGdpPSIxODUiIHVlPSI5Njc0IiB1cz0iOTY3NCIvPjxiZiBnaT0iMTkyIiB1ZT0iNjQyNTgiIHVzPSI2NDI1NyIvPjxiZiBnaT0iMCIgdWU9IjY1NTM1IiB1cz0iNjU1MzUiLz48L2JmcmFuZ2VzPjxjaWQtd2lkdGhzIHN0YXJ0LWluZGV4PSIwIj48d3ggdz0iNjAwIi8+PHd4IHc9IjAiLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjMxNyIvPjx3eCB3PSI0MDAiLz48d3ggdz0iNDU5Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI2MzYiLz48d3ggdz0iOTUwIi8+PHd4IHc9Ijc3OSIvPjx3eCB3PSIyNzQiLz48d3ggdz0iMzkwIi8+PHd4IHc9IjM5MCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iODM3Ii8+PHd4IHc9IjMxNyIvPjx3eCB3PSIzNjAiLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjMzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iMzM2Ii8+PHd4IHc9IjMzNiIvPjx3eCB3PSI4MzciLz48d3ggdz0iODM3Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI1MzAiLz48d3ggdz0iMTAwMCIvPjx3eCB3PSI2ODQiLz48d3ggdz0iNjg2Ii8+PHd4IHc9IjY5OCIvPjx3eCB3PSI3NzAiLz48d3ggdz0iNjMxIi8+PHd4IHc9IjU3NSIvPjx3eCB3PSI3NzQiLz48d3ggdz0iNzUxIi8+PHd4IHc9IjI5NCIvPjx3eCB3PSIyOTQiLz48d3ggdz0iNjU1Ii8+PHd4IHc9IjU1NyIvPjx3eCB3PSI4NjIiLz48d3ggdz0iNzQ4Ii8+PHd4IHc9Ijc4NyIvPjx3eCB3PSI2MDMiLz48d3ggdz0iNzg3Ii8+PHd4IHc9IjY5NCIvPjx3eCB3PSI2MzQiLz48d3ggdz0iNjEwIi8+PHd4IHc9IjczMSIvPjx3eCB3PSI2ODQiLz48d3ggdz0iOTg4Ii8+PHd4IHc9IjY4NSIvPjx3eCB3PSI2MTAiLz48d3ggdz0iNjg1Ii8+PHd4IHc9IjM5MCIvPjx3eCB3PSIzMzYiLz48d3ggdz0iMzkwIi8+PHd4IHc9IjgzNyIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjYxMiIvPjx3eCB3PSI2MzQiLz48d3ggdz0iNTQ5Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSI2MTUiLz48d3ggdz0iMzUyIi8+PHd4IHc9IjYzNCIvPjx3eCB3PSI2MzMiLz48d3ggdz0iMjc3Ii8+PHd4IHc9IjI3NyIvPjx3eCB3PSI1NzkiLz48d3ggdz0iMjc3Ii8+PHd4IHc9Ijk3NCIvPjx3eCB3PSI2MzMiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYzNCIvPjx3eCB3PSI2MzQiLz48d3ggdz0iNDExIi8+PHd4IHc9IjUyMCIvPjx3eCB3PSIzOTIiLz48d3ggdz0iNjMzIi8+PHd4IHc9IjU5MSIvPjx3eCB3PSI4MTciLz48d3ggdz0iNTkxIi8+PHd4IHc9IjU5MSIvPjx3eCB3PSI1MjQiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjMzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iODM3Ii8+PHd4IHc9IjY4NCIvPjx3eCB3PSI2ODQiLz48d3ggdz0iNjk4Ii8+PHd4IHc9IjYzMSIvPjx3eCB3PSI3NDgiLz48d3ggdz0iNzg3Ii8+PHd4IHc9IjczMSIvPjx3eCB3PSI2MTIiLz48d3ggdz0iNjEyIi8+PHd4IHc9IjYxMiIvPjx3eCB3PSI2MTIiLz48d3ggdz0iNjEyIi8+PHd4IHc9IjYxMiIvPjx3eCB3PSI1NDkiLz48d3ggdz0iNjE1Ii8+PHd4IHc9IjYxNSIvPjx3eCB3PSI2MTUiLz48d3ggdz0iNjE1Ii8+PHd4IHc9IjI3NyIvPjx3eCB3PSIyNzciLz48d3ggdz0iMjc3Ii8+PHd4IHc9IjI3NyIvPjx3eCB3PSI2MzMiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYxMSIvPjx3eCB3PSI2MTEiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYxMSIvPjx3eCB3PSI2MzMiLz48d3ggdz0iNjMzIi8+PHd4IHc9IjYzMyIvPjx3eCB3PSI2MzMiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1ODkiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYyOSIvPjx3eCB3PSIxMDAwIi8+PHd4IHc9IjEwMDAiLz48d3ggdz0iMTAwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjgzNyIvPjx3eCB3PSI5NzQiLz48d3ggdz0iNzg3Ii8+PHd4IHc9IjgzMyIvPjx3eCB3PSI4MzciLz48d3ggdz0iODM3Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjUxNyIvPjx3eCB3PSI2NzMiLz48d3ggdz0iNzU2Ii8+PHd4IHc9IjU4OCIvPjx3eCB3PSI1MjAiLz48d3ggdz0iNDcxIi8+PHd4IHc9IjQ3MSIvPjx3eCB3PSI3NjQiLz48d3ggdz0iOTgxIi8+PHd4IHc9IjYxMSIvPjx3eCB3PSI1MzAiLz48d3ggdz0iNDAwIi8+PHd4IHc9IjgzNyIvPjx3eCB3PSI2MzciLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI2NjgiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYxMSIvPjx3eCB3PSIxMDAwIi8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2ODQiLz48d3ggdz0iNjg0Ii8+PHd4IHc9Ijc4NyIvPjx3eCB3PSIxMDY5Ii8+PHd4IHc9IjEwMjIiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjEwMDAiLz48d3ggdz0iNTE4Ii8+PHd4IHc9IjUxOCIvPjx3eCB3PSIzMTciLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI0OTQiLz48d3ggdz0iNTkxIi8+PHd4IHc9IjYxMCIvPjx3eCB3PSIxNjYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjM5OSIvPjx3eCB3PSIzOTkiLz48d3ggdz0iNjI5Ii8+PHd4IHc9IjYyOSIvPjx3eCB3PSI1MDAiLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjMxNyIvPjx3eCB3PSI1MTgiLz48d3ggdz0iMTM0MSIvPjx3eCB3PSI2ODQiLz48d3ggdz0iNjMxIi8+PHd4IHc9IjY4NCIvPjx3eCB3PSI2MzEiLz48d3ggdz0iNjMxIi8+PHd4IHc9IjI5NCIvPjx3eCB3PSIyOTQiLz48d3ggdz0iMjk0Ii8+PHd4IHc9IjI5NCIvPjx3eCB3PSI3ODciLz48d3ggdz0iNzg3Ii8+PHd4IHc9Ijc4NyIvPjx3eCB3PSI3MzEiLz48d3ggdz0iNzMxIi8+PHd4IHc9IjczMSIvPjx3eCB3PSIyNzciLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjU2MiIvPjx3eCB3PSIyODQiLz48d3ggdz0iNjM0Ii8+PHd4IHc9IjUyMCIvPjx3eCB3PSI2ODUiLz48d3ggdz0iNTI0Ii8+PHd4IHc9IjMzNiIvPjx3eCB3PSI3NzQiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYxMCIvPjx3eCB3PSI1OTEiLz48d3ggdz0iNjA0Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSI4MzciLz48d3ggdz0iODM3Ii8+PHd4IHc9IjQwMCIvPjx3eCB3PSI0MDAiLz48d3ggdz0iNDAwIi8+PHd4IHc9Ijk2OSIvPjx3eCB3PSI5NjkiLz48d3ggdz0iOTY5Ii8+PHd4IHc9Ijc3NCIvPjx3eCB3PSI2MzQiLz48d3ggdz0iMjk0Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSI1MjAiLz48d3ggdz0iNjk4Ii8+PHd4IHc9IjU0OSIvPjx3eCB3PSI2OTgiLz48d3ggdz0iNTQ5Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSIzNjAiLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI0MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjwvY2lkLXdpZHRocz48L211bHRpYnl0ZS1leHRyYXM+PGtlcm5pbmcga3B4MT0iMjQ2Ij48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIzNSI+PHBhaXIga2Vybj0iLTE0MiIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNDYiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNDMiPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTYiPjxwYWlyIGtlcm49IjM2IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMTE4IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTExOCIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSIzNiIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iMzYiIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTExOCIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSI1NSIga3B4Mj0iNDUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMjYiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjM3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTEyIj48cGFpciBrZXJuPSItMTciIGtweDI9IjkxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjEyMyI+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjkxIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjUxIj48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIxMyI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjYxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIwOCI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE4NyI+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xMTgiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTEwOSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDgiLz48cGFpciBrZXJuPSItNzciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTIwMiIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMTMiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTQ0Ij48cGFpciBrZXJuPSItNDAiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTkiPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMTUiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNzMiPjxwYWlyIGtlcm49IjMxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI0MSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU0Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iODUiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSI2OCIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iNzYiLz48cGFpciBrZXJuPSItMTYwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xODMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI0OSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMjQiPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI5MSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTgxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE2OSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOSIvPjxwYWlyIGtlcm49IjczIiBrcHgyPSIxNDQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQ1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjAxIj48cGFpciBrZXJuPSItMTciIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iMjciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTEyMyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcxIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNjAiPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0yMDIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDkiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iODUiPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMjU0Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4MCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iNzAiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjExMSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iOTEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgxIi8+PHBhaXIga2Vybj0iNDEiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTUxIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijc0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI2MSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMzQiPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0yMDIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDkiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTAwIj48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjEyMiI+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjkxIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNDciPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEwNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjIxMyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMjAyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIyMTEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0yNjIiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMjEyIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTEwOSIga3B4Mj0iNTciLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI1NiIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMTAiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1OCI+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iODUiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjEwOCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMjEiIGtweDI9Ijc2Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyOCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxMDkiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjExMCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjgyIj48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iOTEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxODYiPjxwYWlyIGtlcm49Ii0xNDIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTQ2IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE3NSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIwOSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjEwMyI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjgxIj48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iOTgiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTIzIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzEiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTgiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMTIiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMjkiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMzgiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTIxIj48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iOTEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1NyI+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTg2IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTA2Ii8+PHBhaXIga2Vybj0iLTgxIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iNzYiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMzciPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjI3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDkiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTIwIj48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjQ5Ij48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9Ijk4Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIyNyI+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSI5OCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1MSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODYiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEwOCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgxIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI3NiIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTU1IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xNjAiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjgiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExMCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTA0Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNzIiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTk5Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iMjciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTEyMyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcxIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTQiPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iOTgiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTgwIj48cGFpciBrZXJuPSItMzUiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI0MyIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0xODgiIGtweDI9IjE0NCIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iNTkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjczIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI0MSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI4NSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI0NyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjM3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMjAiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjUxIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI1MyIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTM3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMzMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIzOSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMjM2Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI0NSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI0NiIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1MyI+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMDciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMjkiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI2OCIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItNDAiIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTA5Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMzciPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMzMiPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyNTMiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjExIj48cGFpciBrZXJuPSItMTciIGtweDI9IjIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNzgiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMzAiIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjUyIj48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTI1Ij48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iOTEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI0MiI+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxNzAiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQ1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODkiLz48cGFpciBrZXJuPSItODYiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIzNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjExNSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI5MCI+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTEwNCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjM2Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iMjciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTEyMyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcxIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTUiPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0xNTUiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9Ijg2Ii8+PHBhaXIga2Vybj0iLTE1MSIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSI3MCIvPjxwYWlyIGtlcm49Ii0xNDYiIGtweDI9Ijg1Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMTA5IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0xNTUiIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjI1MCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xMTgiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjIyOCIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjI1NCIvPjxwYWlyIGtlcm49Ii0xNTEiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTE1MSIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTE1MSIga3B4Mj0iMTI3Ii8+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI3NiIvPjxwYWlyIGtlcm49Ii0xNTEiIGtweDI9IjEyOCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iMTA5Ii8+PHBhaXIga2Vybj0iLTE1NSIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMTQiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTAiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI5MSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTE1Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjM5Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMzYiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyOSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI0NSI+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE3MyI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xMjMiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjU0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI0MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTExIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iODkiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE5NyI+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNDMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTE4MyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTQ0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjQxIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9Ijg1Ii8+PHBhaXIga2Vybj0iLTE4MyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE4MyIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNDciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMTIzIiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI4MSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0xODMiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIzNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI1MSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjUzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMzciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIzMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI0MiIvPjxwYWlyIGtlcm49Ii05NSIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjM5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMzYiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iNDUiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI0NiIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iOTIiPjxwYWlyIGtlcm49Ii0xNDIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTQ2IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9Ijg5Ij48cGFpciBrZXJuPSItNzciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNDYiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMTA0IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMjEzIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjkiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIyMTIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMTA0Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIyMTEiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwOCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSI1NiIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxNzQiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTIzIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzEiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTgiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1NiI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjYxIi8+PC9rZXJuaW5nPjwvZm9udC1tZXRyaWNzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvVmVyYU1vQmQudHRmIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9WZXJhTW9CZC50dGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlNjU0NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvVmVyYU1vQmQudHRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvVmVyYU1vQmQueG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9WZXJhTW9CZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIzMzEwNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvVmVyYU1vQmQueG1sCkBAIC0wLDAgKzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PGZvbnQtbWV0cmljcyBtZXRyaWNzLXZlcnNpb249IjIiIHR5cGU9IlRZUEUwIj48Zm9udC1uYW1lPkJpdHN0cmVhbVZlcmFTYW5zTW9uby1Cb2xkPC9mb250LW5hbWU+PGZ1bGwtbmFtZT5CaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm8gQm9sZDwvZnVsbC1uYW1lPjxmYW1pbHktbmFtZT5CaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm88L2ZhbWlseS1uYW1lPjxlbWJlZC8+PGNhcC1oZWlnaHQ+NzI5PC9jYXAtaGVpZ2h0Pjx4LWhlaWdodD41NDY8L3gtaGVpZ2h0Pjxhc2NlbmRlcj43NTk8L2FzY2VuZGVyPjxkZXNjZW5kZXI+LTI0MDwvZGVzY2VuZGVyPjxiYm94PjxsZWZ0Pi0xOTwvbGVmdD48Ym90dG9tPi0yMzU8L2JvdHRvbT48cmlnaHQ+NjA1PC9yaWdodD48dG9wPjkyODwvdG9wPjwvYmJveD48ZmxhZ3M+MzQ8L2ZsYWdzPjxzdGVtdj4wPC9zdGVtdj48aXRhbGljYW5nbGU+MDwvaXRhbGljYW5nbGU+PHN1YnR5cGU+VFlQRTA8L3N1YnR5cGU+PG11bHRpYnl0ZS1leHRyYXM+PGNpZC10eXBlPkNJREZvbnRUeXBlMjwvY2lkLXR5cGU+PGRlZmF1bHQtd2lkdGg+MDwvZGVmYXVsdC13aWR0aD48YmZyYW5nZXM+PGJmIGdpPSIzIiB1ZT0iMTI2IiB1cz0iMzIiLz48YmYgZ2k9IjE3MiIgdWU9IjE2MCIgdXM9IjE2MCIvPjxiZiBnaT0iMTYzIiB1ZT0iMTYxIiB1cz0iMTYxIi8+PGJmIGdpPSIxMzIiIHVlPSIxNjMiIHVzPSIxNjIiLz48YmYgZ2k9IjE4OSIgdWU9IjE2NCIgdXM9IjE2NCIvPjxiZiBnaT0iMTUwIiB1ZT0iMTY1IiB1cz0iMTY1Ii8+PGJmIGdpPSIyMzEiIHVlPSIxNjYiIHVzPSIxNjYiLz48YmYgZ2k9IjEzNCIgdWU9IjE2NyIgdXM9IjE2NyIvPjxiZiBnaT0iMTQyIiB1ZT0iMTY4IiB1cz0iMTY4Ii8+PGJmIGdpPSIxMzkiIHVlPSIxNjkiIHVzPSIxNjkiLz48YmYgZ2k9IjE1NyIgdWU9IjE3MCIgdXM9IjE3MCIvPjxiZiBnaT0iMTY5IiB1ZT0iMTcxIiB1cz0iMTcxIi8+PGJmIGdpPSIxNjQiIHVlPSIxNzIiIHVzPSIxNzIiLz48YmYgZ2k9IjI1NiIgdWU9IjE3MyIgdXM9IjE3MyIvPjxiZiBnaT0iMTM4IiB1ZT0iMTc0IiB1cz0iMTc0Ii8+PGJmIGdpPSIyMTciIHVlPSIxNzUiIHVzPSIxNzUiLz48YmYgZ2k9IjEzMSIgdWU9IjE3NiIgdXM9IjE3NiIvPjxiZiBnaT0iMTQ3IiB1ZT0iMTc3IiB1cz0iMTc3Ii8+PGJmIGdpPSIyNDEiIHVlPSIxNzkiIHVzPSIxNzgiLz48YmYgZ2k9IjE0MSIgdWU9IjE4MCIgdXM9IjE4MCIvPjxiZiBnaT0iMTUxIiB1ZT0iMTgxIiB1cz0iMTgxIi8+PGJmIGdpPSIxMzYiIHVlPSIxODIiIHVzPSIxODIiLz48YmYgZ2k9IjE5NSIgdWU9IjE4MyIgdXM9IjE4MyIvPjxiZiBnaT0iMjIxIiB1ZT0iMTg0IiB1cz0iMTg0Ii8+PGJmIGdpPSIyNDAiIHVlPSIxODUiIHVzPSIxODUiLz48YmYgZ2k9IjE1OCIgdWU9IjE4NiIgdXM9IjE4NiIvPjxiZiBnaT0iMTcwIiB1ZT0iMTg3IiB1cz0iMTg3Ii8+PGJmIGdpPSIyNDMiIHVlPSIxOTAiIHVzPSIxODgiLz48YmYgZ2k9IjE2MiIgdWU9IjE5MSIgdXM9IjE5MSIvPjxiZiBnaT0iMTczIiB1ZT0iMTkyIiB1cz0iMTkyIi8+PGJmIGdpPSIyMDEiIHVlPSIxOTMiIHVzPSIxOTMiLz48YmYgZ2k9IjE5OSIgdWU9IjE5NCIgdXM9IjE5NCIvPjxiZiBnaT0iMTc0IiB1ZT0iMTk1IiB1cz0iMTk1Ii8+PGJmIGdpPSI5OCIgdWU9IjE5NyIgdXM9IjE5NiIvPjxiZiBnaT0iMTQ0IiB1ZT0iMTk4IiB1cz0iMTk4Ii8+PGJmIGdpPSIxMDAiIHVlPSIxOTkiIHVzPSIxOTkiLz48YmYgZ2k9IjIwMyIgdWU9IjIwMCIgdXM9IjIwMCIvPjxiZiBnaT0iMTAxIiB1ZT0iMjAxIiB1cz0iMjAxIi8+PGJmIGdpPSIyMDAiIHVlPSIyMDIiIHVzPSIyMDIiLz48YmYgZ2k9IjIwMiIgdWU9IjIwMyIgdXM9IjIwMyIvPjxiZiBnaT0iMjA3IiB1ZT0iMjA0IiB1cz0iMjA0Ii8+PGJmIGdpPSIyMDQiIHVlPSIyMDciIHVzPSIyMDUiLz48YmYgZ2k9IjIzMiIgdWU9IjIwOCIgdXM9IjIwOCIvPjxiZiBnaT0iMTAyIiB1ZT0iMjA5IiB1cz0iMjA5Ii8+PGJmIGdpPSIyMTAiIHVlPSIyMTAiIHVzPSIyMTAiLz48YmYgZ2k9IjIwOCIgdWU9IjIxMiIgdXM9IjIxMSIvPjxiZiBnaT0iMTc1IiB1ZT0iMjEzIiB1cz0iMjEzIi8+PGJmIGdpPSIxMDMiIHVlPSIyMTQiIHVzPSIyMTQiLz48YmYgZ2k9IjIzOSIgdWU9IjIxNSIgdXM9IjIxNSIvPjxiZiBnaT0iMTQ1IiB1ZT0iMjE2IiB1cz0iMjE2Ii8+PGJmIGdpPSIyMTMiIHVlPSIyMTciIHVzPSIyMTciLz48YmYgZ2k9IjIxMSIgdWU9IjIxOSIgdXM9IjIxOCIvPjxiZiBnaT0iMTA0IiB1ZT0iMjIwIiB1cz0iMjIwIi8+PGJmIGdpPSIyMzQiIHVlPSIyMjEiIHVzPSIyMjEiLz48YmYgZ2k9IjIzNiIgdWU9IjIyMiIgdXM9IjIyMiIvPjxiZiBnaT0iMTM3IiB1ZT0iMjIzIiB1cz0iMjIzIi8+PGJmIGdpPSIxMDYiIHVlPSIyMjQiIHVzPSIyMjQiLz48YmYgZ2k9IjEwNSIgdWU9IjIyNSIgdXM9IjIyNSIvPjxiZiBnaT0iMTA3IiB1ZT0iMjI2IiB1cz0iMjI2Ii8+PGJmIGdpPSIxMDkiIHVlPSIyMjciIHVzPSIyMjciLz48YmYgZ2k9IjEwOCIgdWU9IjIyOCIgdXM9IjIyOCIvPjxiZiBnaT0iMTEwIiB1ZT0iMjI5IiB1cz0iMjI5Ii8+PGJmIGdpPSIxNjAiIHVlPSIyMzAiIHVzPSIyMzAiLz48YmYgZ2k9IjExMSIgdWU9IjIzMSIgdXM9IjIzMSIvPjxiZiBnaT0iMTEzIiB1ZT0iMjMyIiB1cz0iMjMyIi8+PGJmIGdpPSIxMTIiIHVlPSIyMzMiIHVzPSIyMzMiLz48YmYgZ2k9IjExNCIgdWU9IjIzNSIgdXM9IjIzNCIvPjxiZiBnaT0iMTE3IiB1ZT0iMjM2IiB1cz0iMjM2Ii8+PGJmIGdpPSIxMTYiIHVlPSIyMzciIHVzPSIyMzciLz48YmYgZ2k9IjExOCIgdWU9IjIzOSIgdXM9IjIzOCIvPjxiZiBnaT0iMjMzIiB1ZT0iMjQwIiB1cz0iMjQwIi8+PGJmIGdpPSIxMjAiIHVlPSIyNDEiIHVzPSIyNDEiLz48YmYgZ2k9IjEyMiIgdWU9IjI0MiIgdXM9IjI0MiIvPjxiZiBnaT0iMTIxIiB1ZT0iMjQzIiB1cz0iMjQzIi8+PGJmIGdpPSIxMjMiIHVlPSIyNDQiIHVzPSIyNDQiLz48YmYgZ2k9IjEyNSIgdWU9IjI0NSIgdXM9IjI0NSIvPjxiZiBnaT0iMTI0IiB1ZT0iMjQ2IiB1cz0iMjQ2Ii8+PGJmIGdpPSIxODQiIHVlPSIyNDciIHVzPSIyNDciLz48YmYgZ2k9IjE2MSIgdWU9IjI0OCIgdXM9IjI0OCIvPjxiZiBnaT0iMTI3IiB1ZT0iMjQ5IiB1cz0iMjQ5Ii8+PGJmIGdpPSIxMjYiIHVlPSIyNTAiIHVzPSIyNTAiLz48YmYgZ2k9IjEyOCIgdWU9IjI1MiIgdXM9IjI1MSIvPjxiZiBnaT0iMjM1IiB1ZT0iMjUzIiB1cz0iMjUzIi8+PGJmIGdpPSIyMzciIHVlPSIyNTQiIHVzPSIyNTQiLz48YmYgZ2k9IjE4NiIgdWU9IjI1NSIgdXM9IjI1NSIvPjxiZiBnaT0iMjUxIiB1ZT0iMjYzIiB1cz0iMjYyIi8+PGJmIGdpPSIyNTMiIHVlPSIyNjkiIHVzPSIyNjgiLz48YmYgZ2k9IjAiIHVlPSIyNzAiIHVzPSIyNzAiLz48YmYgZ2k9IjAiIHVlPSIyNzEiIHVzPSIyNzEiLz48YmYgZ2k9IjAiIHVlPSIyNzIiIHVzPSIyNzIiLz48YmYgZ2k9IjI1NSIgdWU9IjI3MyIgdXM9IjI3MyIvPjxiZiBnaT0iMjQ2IiB1ZT0iMjg3IiB1cz0iMjg2Ii8+PGJmIGdpPSIyNDgiIHVlPSIzMDQiIHVzPSIzMDQiLz48YmYgZ2k9IjIxNCIgdWU9IjMwNSIgdXM9IjMwNSIvPjxiZiBnaT0iMjI1IiB1ZT0iMzIyIiB1cz0iMzIxIi8+PGJmIGdpPSIxNzYiIHVlPSIzMzkiIHVzPSIzMzgiLz48YmYgZ2k9IjI0OSIgdWU9IjM1MSIgdXM9IjM1MCIvPjxiZiBnaT0iMjI3IiB1ZT0iMzUzIiB1cz0iMzUyIi8+PGJmIGdpPSIxODciIHVlPSIzNzYiIHVzPSIzNzYiLz48YmYgZ2k9IjIyOSIgdWU9IjM4MiIgdXM9IjM4MSIvPjxiZiBnaT0iMTY2IiB1ZT0iNDAyIiB1cz0iNDAyIi8+PGJmIGdpPSIyMTUiIHVlPSI3MTAiIHVzPSI3MTAiLz48YmYgZ2k9IjIyNCIgdWU9IjcxMSIgdXM9IjcxMSIvPjxiZiBnaT0iMjE4IiB1ZT0iNzMwIiB1cz0iNzI4Ii8+PGJmIGdpPSIyMjMiIHVlPSI3MzEiIHVzPSI3MzEiLz48YmYgZ2k9IjIxNiIgdWU9IjczMiIgdXM9IjczMiIvPjxiZiBnaT0iMjIyIiB1ZT0iNzMzIiB1cz0iNzMzIi8+PGJmIGdpPSIxNTkiIHVlPSI5MzciIHVzPSI5MzciLz48YmYgZ2k9IjE1NSIgdWU9Ijk2MCIgdXM9Ijk2MCIvPjxiZiBnaT0iMTc4IiB1ZT0iODIxMiIgdXM9IjgyMTEiLz48YmYgZ2k9IjAiIHVlPSI4MjEzIiB1cz0iODIxMyIvPjxiZiBnaT0iMCIgdWU9IjgyMTQiIHVzPSI4MjE0Ii8+PGJmIGdpPSIwIiB1ZT0iODIxNSIgdXM9IjgyMTUiLz48YmYgZ2k9IjE4MiIgdWU9IjgyMTciIHVzPSI4MjE2Ii8+PGJmIGdpPSIxOTYiIHVlPSI4MjE4IiB1cz0iODIxOCIvPjxiZiBnaT0iMCIgdWU9IjgyMTkiIHVzPSI4MjE5Ii8+PGJmIGdpPSIxODAiIHVlPSI4MjIxIiB1cz0iODIyMCIvPjxiZiBnaT0iMTk3IiB1ZT0iODIyMiIgdXM9IjgyMjIiLz48YmYgZ2k9IjAiIHVlPSI4MjIzIiB1cz0iODIyMyIvPjxiZiBnaT0iMTMwIiB1ZT0iODIyNCIgdXM9IjgyMjQiLz48YmYgZ2k9IjE5NCIgdWU9IjgyMjUiIHVzPSI4MjI1Ii8+PGJmIGdpPSIxMzUiIHVlPSI4MjI2IiB1cz0iODIyNiIvPjxiZiBnaT0iMCIgdWU9IjgyMjciIHVzPSI4MjI3Ii8+PGJmIGdpPSIwIiB1ZT0iODIyOCIgdXM9IjgyMjgiLz48YmYgZ2k9IjAiIHVlPSI4MjI5IiB1cz0iODIyOSIvPjxiZiBnaT0iMTcxIiB1ZT0iODIzMCIgdXM9IjgyMzAiLz48YmYgZ2k9IjE5OCIgdWU9IjgyNDAiIHVzPSI4MjQwIi8+PGJmIGdpPSIxOTAiIHVlPSI4MjUwIiB1cz0iODI0OSIvPjxiZiBnaT0iMjU4IiB1ZT0iODM2NCIgdXM9IjgzNjQiLz48YmYgZ2k9IjE0MCIgdWU9Ijg0ODIiIHVzPSI4NDgyIi8+PGJmIGdpPSIxNTIiIHVlPSI4NzA2IiB1cz0iODcwNiIvPjxiZiBnaT0iMCIgdWU9Ijg3MDciIHVzPSI4NzA3Ii8+PGJmIGdpPSIwIiB1ZT0iODcwOCIgdXM9Ijg3MDgiLz48YmYgZ2k9IjAiIHVlPSI4NzA5IiB1cz0iODcwOSIvPjxiZiBnaT0iMTY4IiB1ZT0iODcxMCIgdXM9Ijg3MTAiLz48YmYgZ2k9IjE1NCIgdWU9Ijg3MTkiIHVzPSI4NzE5Ii8+PGJmIGdpPSIwIiB1ZT0iODcyMCIgdXM9Ijg3MjAiLz48YmYgZ2k9IjE1MyIgdWU9Ijg3MjEiIHVzPSI4NzIxIi8+PGJmIGdpPSIyMzgiIHVlPSI4NzIyIiB1cz0iODcyMiIvPjxiZiBnaT0iMCIgdWU9Ijg3MjMiIHVzPSI4NzIzIi8+PGJmIGdpPSIwIiB1ZT0iODcyNCIgdXM9Ijg3MjQiLz48YmYgZ2k9IjE4OCIgdWU9Ijg3MjUiIHVzPSI4NzI1Ii8+PGJmIGdpPSIwIiB1ZT0iODcyNiIgdXM9Ijg3MjYiLz48YmYgZ2k9IjAiIHVlPSI4NzI3IiB1cz0iODcyNyIvPjxiZiBnaT0iMCIgdWU9Ijg3MjgiIHVzPSI4NzI4Ii8+PGJmIGdpPSIyNTciIHVlPSI4NzI5IiB1cz0iODcyOSIvPjxiZiBnaT0iMTY1IiB1ZT0iODczMCIgdXM9Ijg3MzAiLz48YmYgZ2k9IjAiIHVlPSI4NzMxIiB1cz0iODczMSIvPjxiZiBnaT0iMCIgdWU9Ijg3MzIiIHVzPSI4NzMyIi8+PGJmIGdpPSIwIiB1ZT0iODczMyIgdXM9Ijg3MzMiLz48YmYgZ2k9IjE0NiIgdWU9Ijg3MzQiIHVzPSI4NzM0Ii8+PGJmIGdpPSIxNTYiIHVlPSI4NzQ3IiB1cz0iODc0NyIvPjxiZiBnaT0iMTY3IiB1ZT0iODc3NiIgdXM9Ijg3NzYiLz48YmYgZ2k9IjE0MyIgdWU9Ijg4MDAiIHVzPSI4ODAwIi8+PGJmIGdpPSIwIiB1ZT0iODgwMSIgdXM9Ijg4MDEiLz48YmYgZ2k9IjAiIHVlPSI4ODAyIiB1cz0iODgwMiIvPjxiZiBnaT0iMCIgdWU9Ijg4MDMiIHVzPSI4ODAzIi8+PGJmIGdpPSIxNDgiIHVlPSI4ODA1IiB1cz0iODgwNCIvPjxiZiBnaT0iMTg1IiB1ZT0iOTY3NCIgdXM9Ijk2NzQiLz48YmYgZ2k9IjE5MiIgdWU9IjY0MjU4IiB1cz0iNjQyNTciLz48YmYgZ2k9IjAiIHVlPSI2NTUzNSIgdXM9IjY1NTM1Ii8+PC9iZnJhbmdlcz48Y2lkLXdpZHRocyBzdGFydC1pbmRleD0iMCI+PHd4IHc9IjYwMiIvPjx3eCB3PSIwIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PC9jaWQtd2lkdGhzPjwvbXVsdGlieXRlLWV4dHJhcz48L2ZvbnQtbWV0cmljcz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmFNb25vLnR0ZiBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvVmVyYU1vbm8udHRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzOWYwYjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmFNb25vLnR0ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmFNb25vLnhtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvVmVyYU1vbm8ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMGE4NjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmFNb25vLnhtbApAQCAtMCwwICsxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pjxmb250LW1ldHJpY3MgbWV0cmljcy12ZXJzaW9uPSIyIiB0eXBlPSJUWVBFMCI+PGZvbnQtbmFtZT5CaXRzdHJlYW1WZXJhU2Fuc01vbm8tUm9tYW48L2ZvbnQtbmFtZT48ZnVsbC1uYW1lPkJpdHN0cmVhbSBWZXJhIFNhbnMgTW9ubzwvZnVsbC1uYW1lPjxmYW1pbHktbmFtZT5CaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm88L2ZhbWlseS1uYW1lPjxlbWJlZC8+PGNhcC1oZWlnaHQ+NzI5PC9jYXAtaGVpZ2h0Pjx4LWhlaWdodD41NDY8L3gtaGVpZ2h0Pjxhc2NlbmRlcj43NTk8L2FzY2VuZGVyPjxkZXNjZW5kZXI+LTI0MDwvZGVzY2VuZGVyPjxiYm94PjxsZWZ0Pi00PC9sZWZ0Pjxib3R0b20+LTIzNTwvYm90dG9tPjxyaWdodD42MDU8L3JpZ2h0Pjx0b3A+OTI4PC90b3A+PC9iYm94PjxmbGFncz4zNDwvZmxhZ3M+PHN0ZW12PjA8L3N0ZW12PjxpdGFsaWNhbmdsZT4wPC9pdGFsaWNhbmdsZT48c3VidHlwZT5UWVBFMDwvc3VidHlwZT48bXVsdGlieXRlLWV4dHJhcz48Y2lkLXR5cGU+Q0lERm9udFR5cGUyPC9jaWQtdHlwZT48ZGVmYXVsdC13aWR0aD4wPC9kZWZhdWx0LXdpZHRoPjxiZnJhbmdlcz48YmYgZ2k9IjMiIHVlPSIxMjYiIHVzPSIzMiIvPjxiZiBnaT0iMTcyIiB1ZT0iMTYwIiB1cz0iMTYwIi8+PGJmIGdpPSIxNjMiIHVlPSIxNjEiIHVzPSIxNjEiLz48YmYgZ2k9IjEzMiIgdWU9IjE2MyIgdXM9IjE2MiIvPjxiZiBnaT0iMTg5IiB1ZT0iMTY0IiB1cz0iMTY0Ii8+PGJmIGdpPSIxNTAiIHVlPSIxNjUiIHVzPSIxNjUiLz48YmYgZ2k9IjIzMSIgdWU9IjE2NiIgdXM9IjE2NiIvPjxiZiBnaT0iMTM0IiB1ZT0iMTY3IiB1cz0iMTY3Ii8+PGJmIGdpPSIxNDIiIHVlPSIxNjgiIHVzPSIxNjgiLz48YmYgZ2k9IjEzOSIgdWU9IjE2OSIgdXM9IjE2OSIvPjxiZiBnaT0iMTU3IiB1ZT0iMTcwIiB1cz0iMTcwIi8+PGJmIGdpPSIxNjkiIHVlPSIxNzEiIHVzPSIxNzEiLz48YmYgZ2k9IjE2NCIgdWU9IjE3MiIgdXM9IjE3MiIvPjxiZiBnaT0iMjU2IiB1ZT0iMTczIiB1cz0iMTczIi8+PGJmIGdpPSIxMzgiIHVlPSIxNzQiIHVzPSIxNzQiLz48YmYgZ2k9IjIxNyIgdWU9IjE3NSIgdXM9IjE3NSIvPjxiZiBnaT0iMTMxIiB1ZT0iMTc2IiB1cz0iMTc2Ii8+PGJmIGdpPSIxNDciIHVlPSIxNzciIHVzPSIxNzciLz48YmYgZ2k9IjI0MSIgdWU9IjE3OSIgdXM9IjE3OCIvPjxiZiBnaT0iMTQxIiB1ZT0iMTgwIiB1cz0iMTgwIi8+PGJmIGdpPSIxNTEiIHVlPSIxODEiIHVzPSIxODEiLz48YmYgZ2k9IjEzNiIgdWU9IjE4MiIgdXM9IjE4MiIvPjxiZiBnaT0iMTk1IiB1ZT0iMTgzIiB1cz0iMTgzIi8+PGJmIGdpPSIyMjEiIHVlPSIxODQiIHVzPSIxODQiLz48YmYgZ2k9IjI0MCIgdWU9IjE4NSIgdXM9IjE4NSIvPjxiZiBnaT0iMTU4IiB1ZT0iMTg2IiB1cz0iMTg2Ii8+PGJmIGdpPSIxNzAiIHVlPSIxODciIHVzPSIxODciLz48YmYgZ2k9IjI0MyIgdWU9IjE5MCIgdXM9IjE4OCIvPjxiZiBnaT0iMTYyIiB1ZT0iMTkxIiB1cz0iMTkxIi8+PGJmIGdpPSIxNzMiIHVlPSIxOTIiIHVzPSIxOTIiLz48YmYgZ2k9IjIwMSIgdWU9IjE5MyIgdXM9IjE5MyIvPjxiZiBnaT0iMTk5IiB1ZT0iMTk0IiB1cz0iMTk0Ii8+PGJmIGdpPSIxNzQiIHVlPSIxOTUiIHVzPSIxOTUiLz48YmYgZ2k9Ijk4IiB1ZT0iMTk3IiB1cz0iMTk2Ii8+PGJmIGdpPSIxNDQiIHVlPSIxOTgiIHVzPSIxOTgiLz48YmYgZ2k9IjEwMCIgdWU9IjE5OSIgdXM9IjE5OSIvPjxiZiBnaT0iMjAzIiB1ZT0iMjAwIiB1cz0iMjAwIi8+PGJmIGdpPSIxMDEiIHVlPSIyMDEiIHVzPSIyMDEiLz48YmYgZ2k9IjIwMCIgdWU9IjIwMiIgdXM9IjIwMiIvPjxiZiBnaT0iMjAyIiB1ZT0iMjAzIiB1cz0iMjAzIi8+PGJmIGdpPSIyMDciIHVlPSIyMDQiIHVzPSIyMDQiLz48YmYgZ2k9IjIwNCIgdWU9IjIwNyIgdXM9IjIwNSIvPjxiZiBnaT0iMjMyIiB1ZT0iMjA4IiB1cz0iMjA4Ii8+PGJmIGdpPSIxMDIiIHVlPSIyMDkiIHVzPSIyMDkiLz48YmYgZ2k9IjIxMCIgdWU9IjIxMCIgdXM9IjIxMCIvPjxiZiBnaT0iMjA4IiB1ZT0iMjEyIiB1cz0iMjExIi8+PGJmIGdpPSIxNzUiIHVlPSIyMTMiIHVzPSIyMTMiLz48YmYgZ2k9IjEwMyIgdWU9IjIxNCIgdXM9IjIxNCIvPjxiZiBnaT0iMjM5IiB1ZT0iMjE1IiB1cz0iMjE1Ii8+PGJmIGdpPSIxNDUiIHVlPSIyMTYiIHVzPSIyMTYiLz48YmYgZ2k9IjIxMyIgdWU9IjIxNyIgdXM9IjIxNyIvPjxiZiBnaT0iMjExIiB1ZT0iMjE5IiB1cz0iMjE4Ii8+PGJmIGdpPSIxMDQiIHVlPSIyMjAiIHVzPSIyMjAiLz48YmYgZ2k9IjIzNCIgdWU9IjIyMSIgdXM9IjIyMSIvPjxiZiBnaT0iMjM2IiB1ZT0iMjIyIiB1cz0iMjIyIi8+PGJmIGdpPSIxMzciIHVlPSIyMjMiIHVzPSIyMjMiLz48YmYgZ2k9IjEwNiIgdWU9IjIyNCIgdXM9IjIyNCIvPjxiZiBnaT0iMTA1IiB1ZT0iMjI1IiB1cz0iMjI1Ii8+PGJmIGdpPSIxMDciIHVlPSIyMjYiIHVzPSIyMjYiLz48YmYgZ2k9IjEwOSIgdWU9IjIyNyIgdXM9IjIyNyIvPjxiZiBnaT0iMTA4IiB1ZT0iMjI4IiB1cz0iMjI4Ii8+PGJmIGdpPSIxMTAiIHVlPSIyMjkiIHVzPSIyMjkiLz48YmYgZ2k9IjE2MCIgdWU9IjIzMCIgdXM9IjIzMCIvPjxiZiBnaT0iMTExIiB1ZT0iMjMxIiB1cz0iMjMxIi8+PGJmIGdpPSIxMTMiIHVlPSIyMzIiIHVzPSIyMzIiLz48YmYgZ2k9IjExMiIgdWU9IjIzMyIgdXM9IjIzMyIvPjxiZiBnaT0iMTE0IiB1ZT0iMjM1IiB1cz0iMjM0Ii8+PGJmIGdpPSIxMTciIHVlPSIyMzYiIHVzPSIyMzYiLz48YmYgZ2k9IjExNiIgdWU9IjIzNyIgdXM9IjIzNyIvPjxiZiBnaT0iMTE4IiB1ZT0iMjM5IiB1cz0iMjM4Ii8+PGJmIGdpPSIyMzMiIHVlPSIyNDAiIHVzPSIyNDAiLz48YmYgZ2k9IjEyMCIgdWU9IjI0MSIgdXM9IjI0MSIvPjxiZiBnaT0iMTIyIiB1ZT0iMjQyIiB1cz0iMjQyIi8+PGJmIGdpPSIxMjEiIHVlPSIyNDMiIHVzPSIyNDMiLz48YmYgZ2k9IjEyMyIgdWU9IjI0NCIgdXM9IjI0NCIvPjxiZiBnaT0iMTI1IiB1ZT0iMjQ1IiB1cz0iMjQ1Ii8+PGJmIGdpPSIxMjQiIHVlPSIyNDYiIHVzPSIyNDYiLz48YmYgZ2k9IjE4NCIgdWU9IjI0NyIgdXM9IjI0NyIvPjxiZiBnaT0iMTYxIiB1ZT0iMjQ4IiB1cz0iMjQ4Ii8+PGJmIGdpPSIxMjciIHVlPSIyNDkiIHVzPSIyNDkiLz48YmYgZ2k9IjEyNiIgdWU9IjI1MCIgdXM9IjI1MCIvPjxiZiBnaT0iMTI4IiB1ZT0iMjUyIiB1cz0iMjUxIi8+PGJmIGdpPSIyMzUiIHVlPSIyNTMiIHVzPSIyNTMiLz48YmYgZ2k9IjIzNyIgdWU9IjI1NCIgdXM9IjI1NCIvPjxiZiBnaT0iMTg2IiB1ZT0iMjU1IiB1cz0iMjU1Ii8+PGJmIGdpPSIyNTEiIHVlPSIyNjMiIHVzPSIyNjIiLz48YmYgZ2k9IjI1MyIgdWU9IjI2OSIgdXM9IjI2OCIvPjxiZiBnaT0iMCIgdWU9IjI3MCIgdXM9IjI3MCIvPjxiZiBnaT0iMCIgdWU9IjI3MSIgdXM9IjI3MSIvPjxiZiBnaT0iMCIgdWU9IjI3MiIgdXM9IjI3MiIvPjxiZiBnaT0iMjU1IiB1ZT0iMjczIiB1cz0iMjczIi8+PGJmIGdpPSIyNDYiIHVlPSIyODciIHVzPSIyODYiLz48YmYgZ2k9IjI0OCIgdWU9IjMwNCIgdXM9IjMwNCIvPjxiZiBnaT0iMjE0IiB1ZT0iMzA1IiB1cz0iMzA1Ii8+PGJmIGdpPSIyMjUiIHVlPSIzMjIiIHVzPSIzMjEiLz48YmYgZ2k9IjE3NiIgdWU9IjMzOSIgdXM9IjMzOCIvPjxiZiBnaT0iMjQ5IiB1ZT0iMzUxIiB1cz0iMzUwIi8+PGJmIGdpPSIyMjciIHVlPSIzNTMiIHVzPSIzNTIiLz48YmYgZ2k9IjE4NyIgdWU9IjM3NiIgdXM9IjM3NiIvPjxiZiBnaT0iMjI5IiB1ZT0iMzgyIiB1cz0iMzgxIi8+PGJmIGdpPSIxNjYiIHVlPSI0MDIiIHVzPSI0MDIiLz48YmYgZ2k9IjIxNSIgdWU9IjcxMCIgdXM9IjcxMCIvPjxiZiBnaT0iMjI0IiB1ZT0iNzExIiB1cz0iNzExIi8+PGJmIGdpPSIyMTgiIHVlPSI3MzAiIHVzPSI3MjgiLz48YmYgZ2k9IjIyMyIgdWU9IjczMSIgdXM9IjczMSIvPjxiZiBnaT0iMjE2IiB1ZT0iNzMyIiB1cz0iNzMyIi8+PGJmIGdpPSIyMjIiIHVlPSI3MzMiIHVzPSI3MzMiLz48YmYgZ2k9IjE1OSIgdWU9IjkzNyIgdXM9IjkzNyIvPjxiZiBnaT0iMTU1IiB1ZT0iOTYwIiB1cz0iOTYwIi8+PGJmIGdpPSIxNzgiIHVlPSI4MjEyIiB1cz0iODIxMSIvPjxiZiBnaT0iMCIgdWU9IjgyMTMiIHVzPSI4MjEzIi8+PGJmIGdpPSIwIiB1ZT0iODIxNCIgdXM9IjgyMTQiLz48YmYgZ2k9IjAiIHVlPSI4MjE1IiB1cz0iODIxNSIvPjxiZiBnaT0iMTgyIiB1ZT0iODIxNyIgdXM9IjgyMTYiLz48YmYgZ2k9IjE5NiIgdWU9IjgyMTgiIHVzPSI4MjE4Ii8+PGJmIGdpPSIwIiB1ZT0iODIxOSIgdXM9IjgyMTkiLz48YmYgZ2k9IjE4MCIgdWU9IjgyMjEiIHVzPSI4MjIwIi8+PGJmIGdpPSIxOTciIHVlPSI4MjIyIiB1cz0iODIyMiIvPjxiZiBnaT0iMCIgdWU9IjgyMjMiIHVzPSI4MjIzIi8+PGJmIGdpPSIxMzAiIHVlPSI4MjI0IiB1cz0iODIyNCIvPjxiZiBnaT0iMTk0IiB1ZT0iODIyNSIgdXM9IjgyMjUiLz48YmYgZ2k9IjEzNSIgdWU9IjgyMjYiIHVzPSI4MjI2Ii8+PGJmIGdpPSIwIiB1ZT0iODIyNyIgdXM9IjgyMjciLz48YmYgZ2k9IjAiIHVlPSI4MjI4IiB1cz0iODIyOCIvPjxiZiBnaT0iMCIgdWU9IjgyMjkiIHVzPSI4MjI5Ii8+PGJmIGdpPSIxNzEiIHVlPSI4MjMwIiB1cz0iODIzMCIvPjxiZiBnaT0iMTk4IiB1ZT0iODI0MCIgdXM9IjgyNDAiLz48YmYgZ2k9IjE5MCIgdWU9IjgyNTAiIHVzPSI4MjQ5Ii8+PGJmIGdpPSIyNTgiIHVlPSI4MzY0IiB1cz0iODM2NCIvPjxiZiBnaT0iMTQwIiB1ZT0iODQ4MiIgdXM9Ijg0ODIiLz48YmYgZ2k9IjE1MiIgdWU9Ijg3MDYiIHVzPSI4NzA2Ii8+PGJmIGdpPSIwIiB1ZT0iODcwNyIgdXM9Ijg3MDciLz48YmYgZ2k9IjAiIHVlPSI4NzA4IiB1cz0iODcwOCIvPjxiZiBnaT0iMCIgdWU9Ijg3MDkiIHVzPSI4NzA5Ii8+PGJmIGdpPSIxNjgiIHVlPSI4NzEwIiB1cz0iODcxMCIvPjxiZiBnaT0iMTU0IiB1ZT0iODcxOSIgdXM9Ijg3MTkiLz48YmYgZ2k9IjAiIHVlPSI4NzIwIiB1cz0iODcyMCIvPjxiZiBnaT0iMTUzIiB1ZT0iODcyMSIgdXM9Ijg3MjEiLz48YmYgZ2k9IjIzOCIgdWU9Ijg3MjIiIHVzPSI4NzIyIi8+PGJmIGdpPSIwIiB1ZT0iODcyMyIgdXM9Ijg3MjMiLz48YmYgZ2k9IjAiIHVlPSI4NzI0IiB1cz0iODcyNCIvPjxiZiBnaT0iMTg4IiB1ZT0iODcyNSIgdXM9Ijg3MjUiLz48YmYgZ2k9IjAiIHVlPSI4NzI2IiB1cz0iODcyNiIvPjxiZiBnaT0iMCIgdWU9Ijg3MjciIHVzPSI4NzI3Ii8+PGJmIGdpPSIwIiB1ZT0iODcyOCIgdXM9Ijg3MjgiLz48YmYgZ2k9IjI1NyIgdWU9Ijg3MjkiIHVzPSI4NzI5Ii8+PGJmIGdpPSIxNjUiIHVlPSI4NzMwIiB1cz0iODczMCIvPjxiZiBnaT0iMCIgdWU9Ijg3MzEiIHVzPSI4NzMxIi8+PGJmIGdpPSIwIiB1ZT0iODczMiIgdXM9Ijg3MzIiLz48YmYgZ2k9IjAiIHVlPSI4NzMzIiB1cz0iODczMyIvPjxiZiBnaT0iMTQ2IiB1ZT0iODczNCIgdXM9Ijg3MzQiLz48YmYgZ2k9IjE1NiIgdWU9Ijg3NDciIHVzPSI4NzQ3Ii8+PGJmIGdpPSIxNjciIHVlPSI4Nzc2IiB1cz0iODc3NiIvPjxiZiBnaT0iMTQzIiB1ZT0iODgwMCIgdXM9Ijg4MDAiLz48YmYgZ2k9IjAiIHVlPSI4ODAxIiB1cz0iODgwMSIvPjxiZiBnaT0iMCIgdWU9Ijg4MDIiIHVzPSI4ODAyIi8+PGJmIGdpPSIwIiB1ZT0iODgwMyIgdXM9Ijg4MDMiLz48YmYgZ2k9IjE0OCIgdWU9Ijg4MDUiIHVzPSI4ODA0Ii8+PGJmIGdpPSIxODUiIHVlPSI5Njc0IiB1cz0iOTY3NCIvPjxiZiBnaT0iMTkyIiB1ZT0iNjQyNTgiIHVzPSI2NDI1NyIvPjxiZiBnaT0iMCIgdWU9IjY1NTM1IiB1cz0iNjU1MzUiLz48L2JmcmFuZ2VzPjxjaWQtd2lkdGhzIHN0YXJ0LWluZGV4PSIwIj48d3ggdz0iNjAyIi8+PHd4IHc9IjAiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48L2NpZC13aWR0aHM+PC9tdWx0aWJ5dGUtZXh0cmFzPjwvZm9udC1tZXRyaWNzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvY29tcG9uZW50LnRpdGxlLnhzbCBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvY29tcG9uZW50LnRpdGxlLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWVmMDQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9jb21wb25lbnQudGl0bGUueHNsCkBAIC0wLDAgKzEsMzkgQEAKKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiCisgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorICB4bWxuczpkPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayIKKyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisgIGV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzPSJkIj4KKyAgCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0iY29tcG9uZW50LnRpdGxlIj4KKyAgICA8eHNsOnBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iLiIvPgorICAgIAorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0ibGV2ZWwiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJhbmNlc3Rvcjo6ZDpzZWN0aW9uIj4KKyAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoYW5jZXN0b3I6OmQ6c2VjdGlvbikrMSIvPgorICAgICAgICA8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iYW5jZXN0b3I6OmQ6c2VjdDUiPjY8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iYW5jZXN0b3I6OmQ6c2VjdDQiPjU8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iYW5jZXN0b3I6OmQ6c2VjdDMiPjQ8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iYW5jZXN0b3I6OmQ6c2VjdDIiPjM8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iYW5jZXN0b3I6OmQ6c2VjdDEiPjI8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJoeyRsZXZlbCsxfSIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKyAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj50aXRsZTwveHNsOmF0dHJpYnV0ZT4KKyAgICAgIDx4c2w6aWYgdGVzdD0iJGdlbmVyYXRlLmlkLmF0dHJpYnV0ZXMgPSAwIj4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFuY2hvciI+CisgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iJG5vZGUiLz4KKyAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iY29uZGl0aW9uYWwiIHNlbGVjdD0iMCIvPgorICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgPC94c2w6aWY+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IiRub2RlIiBtb2RlPSJvYmplY3QudGl0bGUubWFya3VwIj4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImFsbG93LWFuY2hvcnMiIHNlbGVjdD0iMSIvPgorICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBlcm1hbGluayI+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9IiRub2RlIi8+CisgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgIDwveHNsOmVsZW1lbnQ+CisgIDwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvZGItcGRmLnhzbCBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvZGItcGRmLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGQwNjVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9kYi1wZGYueHNsCkBAIC0wLDAgKzEsNjQgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIgdmVyc2lvbj0iMS4wIj4KKyAgCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC9jdXJyZW50L2ZvL2RvY2Jvb2sueHNsIiAvPgorCisgIDwhLS0gY2hlY2sgcHJvamVjdC1wbGFuLnNoIGZvciBob3cgdGhpcyBpcyBnZW5lcmF0ZWQsIG5lZWRlZCB0byB0d2VhayAKKyAgICAgICB0aGUgY292ZXIgcGFnZSAgICAgCisgICAgLS0+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIvdG1wL3RpdGxlcGFnZS54c2wiLz4gCisKKyAgPCEtLSBUbyBmb3JjZSBhIHBhZ2UgYnJlYWsgaW4gZG9jdW1lbnQsIGkuZSBwZXIgc2VjdGlvbiBhZGQgYSAKKyAgICAgIDw/aGFyZC1wYWdlYnJlYWs/PiB0YWcuCisgIC0tPgorIDx4c2w6dGVtcGxhdGUgbWF0Y2g9InByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24oJ2hhcmQtcGFnZWJyZWFrJykiPgorICAgPGZvOmJsb2NrIGJyZWFrLWJlZm9yZT0ncGFnZScgLz4KKyA8L3hzbDp0ZW1wbGF0ZT4KKworICA8IS0tRml4IGZvciBkZWZ1YWx0IGluZGVudCBnZXR0aW5nIFRPQyBhbGwgd2llcmQuLgorICAgICAgU2VlIGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vbWwvZG9jYm9vay1hcHBzLzIwMDUtcTEvbXNnMDA0NTUuaHRtbCAKKyAgICAgIEZJWE1FOiBtdXN0IGJlIGEgYmV0dGVyIGZpeAorICAgIC0tPgorICA8eHNsOnBhcmFtIG5hbWU9ImJvZHkuc3RhcnQuaW5kZW50IiBzZWxlY3Q9IicwJyIvPgorICA8IS0tPHhzbDpwYXJhbSBuYW1lPSJ0aXRsZS5tYXJnaW4ubGVmdCIgc2VsZWN0PSInMCciLz4tLT4KKworICA8IS0tIHN0b3AgbG9uZy1pc2ggaGVhZGVyIHRpdGxlcyBnZXR0aW5nIHdyYXBwZWQgLS0+CisgIDx4c2w6cGFyYW0gbmFtZT0iaGVhZGVyLmNvbHVtbi53aWR0aHMiPjEgMTAgMTwveHNsOnBhcmFtPgorCisgIDwhLS0gY3VzdG9taXNlIGhlYWRlcnMgYW5kIGZvb3RlcnMgYSBsaXR0bGUgLS0+IAorCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0iaGVhZC5zZXAucnVsZSI+CisgICA8eHNsOmlmIHRlc3Q9IiRoZWFkZXIucnVsZSAhPSAwIj4KKyAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iYm9yZGVyLWJvdHRvbS13aWR0aCI+MC41cHQ8L3hzbDphdHRyaWJ1dGU+CisgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImJvcmRlci1ib3R0b20tc3R5bGUiPnNvbGlkPC94c2w6YXR0cmlidXRlPgorICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJib3JkZXItYm90dG9tLWNvbG9yIj4jY2NjY2NjPC94c2w6YXR0cmlidXRlPgorICAgPC94c2w6aWY+CisgIDwveHNsOnRlbXBsYXRlPgorCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0iZm9vdC5zZXAucnVsZSI+CisgICAgPHhzbDppZiB0ZXN0PSIkZm9vdGVyLnJ1bGUgIT0gMCI+CisgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImJvcmRlci10b3Atd2lkdGgiPjAuNXB0PC94c2w6YXR0cmlidXRlPgorICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJib3JkZXItdG9wLXN0eWxlIj5zb2xpZDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iYm9yZGVyLXRvcC1jb2xvciI+I2NjY2NjYzwveHNsOmF0dHJpYnV0ZT4KKyAgICA8L3hzbDppZj4KKyAgPC94c2w6dGVtcGxhdGU+CisKKyAgPHhzbDphdHRyaWJ1dGUtc2V0IG5hbWU9ImhlYWRlci5jb250ZW50LnByb3BlcnRpZXMiPgorICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNvbG9yIj4jY2NjY2NjPC94c2w6YXR0cmlidXRlPgorICA8L3hzbDphdHRyaWJ1dGUtc2V0PgorCisgIDx4c2w6YXR0cmlidXRlLXNldCBuYW1lPSJmb290ZXIuY29udGVudC5wcm9wZXJ0aWVzIj4KKyAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjb2xvciI+I2NjY2NjYzwveHNsOmF0dHJpYnV0ZT4KKyAgPC94c2w6YXR0cmlidXRlLXNldD4KKworIAorICA8IS0tIGdlbmVyYWwgc2V0dGluZ3MgLS0+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJmb3AxLmV4dGVuc2lvbnMiIHNlbGVjdD0iMSI+PC94c2w6cGFyYW0+CisgIDx4c2w6cGFyYW0gbmFtZT0icGFwZXIudHlwZSIgc2VsZWN0PSInQTQnIj48L3hzbDpwYXJhbT4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmF1dG9sYWJlbCIgc2VsZWN0PSIxIj48L3hzbDpwYXJhbT4KKyAgPHhzbDpwYXJhbSBuYW1lPSJib2R5LmZvbnQuZmFtaWx5IiBzZWxlY3Q9Iid2ZXJhc2FucyciPjwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9InRpdGxlLmZvbnQuZmFtaWx5IiBzZWxlY3Q9Iid2ZXJhc2FucyciPjwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9Im1vbm9zcGFjZS5mb250LmZhbWlseSIgc2VsZWN0PSIndmVyYW1vbm8nIj48L3hzbDpwYXJhbT4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvZGl2aXNpb24udGl0bGUueHNsIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9kaXZpc2lvbi50aXRsZS54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM4NDNiYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvZGl2aXNpb24udGl0bGUueHNsCkBAIC0wLDAgKzEsMjUgQEAKKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiCisgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorICB4bWxuczpkPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayIKKyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisgIGV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzPSJkIj4KKyAgCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0iZGl2aXNpb24udGl0bGUiPgorICAgIDx4c2w6cGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSIuIi8+CisgICAgCisgICAgPGgxPgorICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPnRpdGxlPC94c2w6YXR0cmlidXRlPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFuY2hvciI+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9IiRub2RlIi8+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJjb25kaXRpb25hbCIgc2VsZWN0PSIwIi8+CisgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIkbm9kZSIgbW9kZT0ib2JqZWN0LnRpdGxlLm1hcmt1cCI+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJhbGxvdy1hbmNob3JzIiBzZWxlY3Q9IjEiLz4KKyAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwZXJtYWxpbmsiPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSIkbm9kZSIvPgorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8L2gxPgorICA8L3hzbDp0ZW1wbGF0ZT4KKzwveHNsOnN0eWxlc2hlZXQ+CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvZHJhZnQucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9kcmFmdC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMwNTFhOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvZHJhZnQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvZm9wLWNvbmZpZy54bWwgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL2ZvcC1jb25maWcueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5Y2M1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL2ZvcC1jb25maWcueG1sCkBAIC0wLDAgKzEsNTggQEAKKzxmb3AgdmVyc2lvbj0iMS4wIj4KKworICA8IS0tIFN0cmljdCB1c2VyIGNvbmZpZ3VyYXRpb24gLS0+CisgIDxzdHJpY3QtY29uZmlndXJhdGlvbj50cnVlPC9zdHJpY3QtY29uZmlndXJhdGlvbj4KKworICA8IS0tIFN0cmljdCBGTyB2YWxpZGF0aW9uIC0tPgorICA8c3RyaWN0LXZhbGlkYXRpb24+dHJ1ZTwvc3RyaWN0LXZhbGlkYXRpb24+CisKKyAgIDwhLS0KKyAgICBTZXQgdGhlIGJhc2VEaXIgc28gY29tbW9uL29wZW5lZGhhbmQuc3ZnIHJlZmVyZW5jZXMgaW4gcGxhbnMgc3RpbGwKKyAgICB3b3JrIG9rLiBOb3RlLCByZWxhdGl2ZSBmaWxlIHJlZmVyZW5jZXMgdG8gY3VycmVudCBkaXIgc2hvdWxkIHN0aWxsIHdvcmsuCisgICAgLS0+CQorICA8YmFzZT4uLi90ZW1wbGF0ZTwvYmFzZT4KKyAgPGZvbnQtYmFzZT4uLi90ZW1wbGF0ZTwvZm9udC1iYXNlPgorIAorICA8IS0tIFNvdXJjZSByZXNvbHV0aW9uIGluIGRwaSAoZG90cy9waXhlbHMgcGVyIGluY2gpIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICAgICBzaXplIG9mIHBpeGVscyBpbiBTVkcgYW5kIGJpdG1hcCBpbWFnZXMsIGRlZmF1bHQ6IDcyZHBpIC0tPgorICA8IS0tIDxzb3VyY2UtcmVzb2x1dGlvbj43Mjwvc291cmNlLXJlc29sdXRpb24+IC0tPgorICA8IS0tIFRhcmdldCByZXNvbHV0aW9uIGluIGRwaSAoZG90cy9waXhlbHMgcGVyIGluY2gpIGZvciBzcGVjaWZ5aW5nIHRoZQorICAgICAgIHRhcmdldCByZXNvbHV0aW9uIGZvciBnZW5lcmF0ZWQgYml0bWFwcywgZGVmYXVsdDogNzJkcGkgLS0+CisgIDwhLS0gPHRhcmdldC1yZXNvbHV0aW9uPjcyPC90YXJnZXQtcmVzb2x1dGlvbj4gLS0+CisgCisgIDwhLS0gZGVmYXVsdCBwYWdlLWhlaWdodCBhbmQgcGFnZS13aWR0aCwgaW4gY2FzZQorICAgICAgIHZhbHVlIGlzIHNwZWNpZmllZCBhcyBhdXRvIC0tPgorICA8ZGVmYXVsdC1wYWdlLXNldHRpbmdzIGhlaWdodD0iMTFpbiIgd2lkdGg9IjguMjZpbiIvPiAKKyAKKyAgPCEtLSA8dXNlLWNhY2hlPmZhbHNlPC91c2UtY2FjaGU+IC0tPgorIAorICA8cmVuZGVyZXJzPgorICAgIDxyZW5kZXJlciBtaW1lPSJhcHBsaWNhdGlvbi9wZGYiPgorICAgICAgPGZvbnRzPgorICAgICAgICA8Zm9udCAgbWV0cmljcy1maWxlPSJWZXJhTW9uby54bWwiCisgICAgICAgICAgICAgICBrZXJuaW5nPSJ5ZXMiIAorICAgICAgICAgICAgICAgZW1iZWQtdXJsPSJWZXJhTW9uby50dGYiPgorICAgICAgICAgIDxmb250LXRyaXBsZXQgbmFtZT0idmVyYW1vbm8iIHN0eWxlPSJub3JtYWwiIHdlaWdodD0ibm9ybWFsIi8+CisgICAgICAgIDwvZm9udD4KKworICAgICAgICA8Zm9udCAgbWV0cmljcy1maWxlPSJWZXJhTW9CZC54bWwiCisgICAgICAgICAgICAgICBrZXJuaW5nPSJ5ZXMiIAorICAgICAgICAgICAgICAgZW1iZWQtdXJsPSJWZXJhTW9CZC50dGYiPgorICAgICAgICAgIDxmb250LXRyaXBsZXQgbmFtZT0idmVyYW1vbm8iIHN0eWxlPSJub3JtYWwiIHdlaWdodD0iYm9sZCIvPgorICAgICAgICA8L2ZvbnQ+CisKKyAgICAgICAgPGZvbnQgIG1ldHJpY3MtZmlsZT0iVmVyYS54bWwiCisgICAgICAgICAgICAgICBrZXJuaW5nPSJ5ZXMiIAorICAgICAgICAgICAgICAgZW1iZWQtdXJsPSJWZXJhLnR0ZiI+CisgICAgICAgICAgPGZvbnQtdHJpcGxldCBuYW1lPSJ2ZXJhc2FucyIgc3R5bGU9Im5vcm1hbCIgd2VpZ2h0PSJub3JtYWwiLz4KKyAgICAgICAgICA8Zm9udC10cmlwbGV0IG5hbWU9InZlcmFzYW5zIiBzdHlsZT0ibm9ybWFsIiB3ZWlnaHQ9ImJvbGQiLz4KKyAgICAgICAgICA8Zm9udC10cmlwbGV0IG5hbWU9InZlcmFzYW5zIiBzdHlsZT0iaXRhbGljIiB3ZWlnaHQ9Im5vcm1hbCIvPgorICAgICAgICAgIDxmb250LXRyaXBsZXQgbmFtZT0idmVyYXNhbnMiIHN0eWxlPSJpdGFsaWMiIHdlaWdodD0iYm9sZCIvPgorICAgICAgICA8L2ZvbnQ+CisgICAgICAgIAorICAgICAgICA8YXV0by1kZXRlY3QvPgorICAgICAgPC9mb250cz4KKyAgICA8L3JlbmRlcmVyPgorICA8L3JlbmRlcmVycz4KKzwvZm9wPgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL2Zvcm1hbC5vYmplY3QuaGVhZGluZy54c2wgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL2Zvcm1hbC5vYmplY3QuaGVhZGluZy54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYzOTAwZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbApAQCAtMCwwICsxLDIxIEBACis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAgeG1sbnM6ZD0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgorICBleGNsdWRlLXJlc3VsdC1wcmVmaXhlcz0iZCI+CisgIAorICA8eHNsOnRlbXBsYXRlIG5hbWU9ImZvcm1hbC5vYmplY3QuaGVhZGluZyI+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJvYmplY3QiIHNlbGVjdD0iLiIvPgorICAgIDx4c2w6cGFyYW0gbmFtZT0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIkb2JqZWN0IiBtb2RlPSJvYmplY3QudGl0bGUubWFya3VwIj4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImFsbG93LWFuY2hvcnMiIHNlbGVjdD0iMSIvPgorICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICAgIDwveHNsOnBhcmFtPgorICAgIDxwIGNsYXNzPSJ0aXRsZSI+CisgICAgICA8Yj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdGl0bGUiLz48L2I+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGVybWFsaW5rIj4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iJG9iamVjdCIvPgorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8L3A+CisgIDwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL2dsb3NzLXBlcm1hbGlua3MueHNsIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9nbG9zcy1wZXJtYWxpbmtzLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmY1ODExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9nbG9zcy1wZXJtYWxpbmtzLnhzbApAQCAtMCwwICsxLDE0IEBACis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIg0KKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iDQorICB4bWxuczpkPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayINCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4NCisNCisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Imdsb3NzZW50cnkvZ2xvc3N0ZXJtIj4NCisgICAgPHhzbDphcHBseS1pbXBvcnRzLz4NCisgICAgPHhzbDppZiB0ZXN0PSIkZ2VuZXJhdGUucGVybWFsaW5rICE9IDAiPg0KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwZXJtYWxpbmsiPg0KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iLi4iLz4NCisgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPg0KKyAgICA8L3hzbDppZj4NCisgIDwveHNsOnRlbXBsYXRlPg0KKzwveHNsOnN0eWxlc2hlZXQ+DQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9wZXJtYWxpbmtzLnhzbCBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvcGVybWFsaW5rcy54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJhMWMxNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvcGVybWFsaW5rcy54c2wKQEAgLTAsMCArMSwyNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS5wZXJtYWxpbmsiIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9InBlcm1hbGluay50ZXh0Ij7CtjwveHNsOnBhcmFtPgorCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0icGVybWFsaW5rIj4KKyAgICA8eHNsOnBhcmFtIG5hbWU9Im5vZGUiLz4KKworICAgIDx4c2w6aWYgdGVzdD0iJGdlbmVyYXRlLnBlcm1hbGluayAhPSAnMCciPgorICAgICAgPHNwYW4gY2xhc3M9InBlcm1hbGluayI+CisgICAgICAgIDxhIGFsdD0iUGVybWFsaW5rIiB0aXRsZT0iUGVybWFsaW5rIj4KKyAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJocmVmIj4KKyAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJocmVmLnRhcmdldCI+CisgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJvYmplY3QiICBzZWxlY3Q9IiRub2RlIi8+CisgICAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8eHNsOmNvcHktb2Ygc2VsZWN0PSIkcGVybWFsaW5rLnRleHQiLz4KKyAgICAgICAgPC9hPgorICAgICAgPC9zcGFuPgorICAgIDwveHNsOmlmPgorICA8L3hzbDp0ZW1wbGF0ZT4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL3NlY3Rpb24udGl0bGUueHNsIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9zZWN0aW9uLnRpdGxlLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzZmZjlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9zZWN0aW9uLnRpdGxlLnhzbApAQCAtMCwwICsxLDU1IEBACis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAgeG1sbnM6ZD0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBleGNsdWRlLXJlc3VsdC1wcmVmaXhlcz0iZCI+CisKKyAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLnRpdGxlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InNlY3Rpb24iCisgICAgICBzZWxlY3Q9IihhbmNlc3Rvcjo6c2VjdGlvbiB8CisgICAgICAgICAgICAgICBhbmNlc3Rvcjo6c2ltcGxlc2VjdHwKKyAgICAgICAgICAgICAgIGFuY2VzdG9yOjpzZWN0MXwKKyAgICAgICAgICAgICAgIGFuY2VzdG9yOjpzZWN0MnwKKyAgICAgICAgICAgICAgIGFuY2VzdG9yOjpzZWN0M3wKKyAgICAgICAgICAgICAgIGFuY2VzdG9yOjpzZWN0NHwKKyAgICAgICAgICAgICAgIGFuY2VzdG9yOjpzZWN0NSlbbGFzdCgpXSIvPgorCisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZW5kZXJhcyI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRzZWN0aW9uL0ByZW5kZXJhcyA9ICdzZWN0MSciPjE8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iJHNlY3Rpb24vQHJlbmRlcmFzID0gJ3NlY3QyJyI+MjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkc2VjdGlvbi9AcmVuZGVyYXMgPSAnc2VjdDMnIj4zPC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRzZWN0aW9uL0ByZW5kZXJhcyA9ICdzZWN0NCciPjQ8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iJHNlY3Rpb24vQHJlbmRlcmFzID0gJ3NlY3Q1JyI+NTwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSInJyIvPjwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKworICAgIDx4c2w6dmFyaWFibGUgbmFtZT0ibGV2ZWwiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkcmVuZGVyYXMgIT0gJyciPgorICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmVuZGVyYXMiLz4KKyAgICAgICAgPC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+CisgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Rpb24ubGV2ZWwiPgorICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iJHNlY3Rpb24iLz4KKyAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgICA8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisKKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdGlvbi5oZWFkaW5nIj4KKyAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzZWN0aW9uIiBzZWxlY3Q9IiRzZWN0aW9uIi8+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibGV2ZWwiIHNlbGVjdD0iJGxldmVsIi8+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0idGl0bGUiPgorICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IiRzZWN0aW9uIiBtb2RlPSJvYmplY3QudGl0bGUubWFya3VwIj4KKyAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iYWxsb3ctYW5jaG9ycyIgc2VsZWN0PSIxIi8+CisgICAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgICAgICAgPHhzbDppZiB0ZXN0PSIkbGV2ZWwgJmd0OyAwIj4KKyAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGVybWFsaW5rIj4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9IiRzZWN0aW9uIi8+CisgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgICAgPC94c2w6aWY+CisgICAgICA8L3hzbDp3aXRoLXBhcmFtPgorICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgIDwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvdGl0bGVwYWdlLnRlbXBsYXRlcy54bWwgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL3RpdGxlcGFnZS50ZW1wbGF0ZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZWMxMWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL3RpdGxlcGFnZS50ZW1wbGF0ZXMueG1sCkBAIC0wLDAgKzEsMTI1OSBAQAorPCFET0NUWVBFIHQ6dGVtcGxhdGVzIFsKKzwhRU5USVRZIGhzaXplMCAiMTBwdCI+Cis8IUVOVElUWSBoc2l6ZTEgIjEycHQiPgorPCFFTlRJVFkgaHNpemUyICIxNC40cHQiPgorPCFFTlRJVFkgaHNpemUzICIxNy4yOHB0Ij4KKzwhRU5USVRZIGhzaXplNCAiMjAuNzM2cHQiPgorPCFFTlRJVFkgaHNpemU1ICIyNC44ODMycHQiPgorPCFFTlRJVFkgaHNpemUwc3BhY2UgIjcuNXB0Ij4gPCEtLSAwLjc1ICogaHNpemUwIC0tPgorPCFFTlRJVFkgaHNpemUxc3BhY2UgIjlwdCI+IDwhLS0gMC43NSAqIGhzaXplMSAtLT4KKzwhRU5USVRZIGhzaXplMnNwYWNlICIxMC44cHQiPiA8IS0tIDAuNzUgKiBoc2l6ZTIgLS0+Cis8IUVOVElUWSBoc2l6ZTNzcGFjZSAiMTIuOTZwdCI+IDwhLS0gMC43NSAqIGhzaXplMyAtLT4KKzwhRU5USVRZIGhzaXplNHNwYWNlICIxNS41NTJwdCI+IDwhLS0gMC43NSAqIGhzaXplNCAtLT4KKzwhRU5USVRZIGhzaXplNXNwYWNlICIxOC42NjI0cHQiPiA8IS0tIDAuNzUgKiBoc2l6ZTUgLS0+CitdPgorPHQ6dGVtcGxhdGVzIHhtbG5zOnQ9Imh0dHA6Ly9ud2Fsc2guY29tL2RvY2Jvb2sveHNsL3RlbXBsYXRlLzEuMCIKKwkgICAgIHhtbG5zOnBhcmFtPSJodHRwOi8vbndhbHNoLmNvbS9kb2Nib29rL3hzbC90ZW1wbGF0ZS8xLjAvcGFyYW0iCisgICAgICAgICAgICAgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIKKyAgICAgICAgICAgICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+CisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgJElkOiB0aXRsZXBhZ2UudGVtcGxhdGVzLnhtbCx2IDEuMjMgMjAwMy8xMi8xNiAwMDozMDo0OSBib2JzdGF5dG9uIEV4cCAkCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERvY0Jvb2sgWFNMIFN0eWxlc2hlZXQgZGlzdHJpYnV0aW9uLgorICAgICBTZWUgLi4vUkVBRE1FIG9yIGh0dHA6Ly9kb2Nib29rLnNmLm5ldC8gZm9yIGNvcHlyaWdodAorICAgICBhbmQgb3RoZXIgaW5mb3JtYXRpb24uCisKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImFydGljbGUiIHQ6d3JhcHBlcj0iZm86YmxvY2siCisgICAgICAgICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iPgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iCisgICAgICAgICAgICAgdGV4dC1hbGlnbj0iY2VudGVyIj4KKworICAgIDxtZWRpYW9iamVjdC8+CisKKyAgICA8dGl0bGUgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmFydGljbGVbMV0iCisJICAga2VlcC13aXRoLW5leHQ9ImFsd2F5cyIKKwkgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisKKyAgICA8c3VidGl0bGUgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6YXJ0aWNsZVsxXSIKKwkgICBrZWVwLXdpdGgtbmV4dD0iYWx3YXlzIgorCSAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgZm9udC13ZWlnaHQ9ImJvbGQiCisgICAgICAgc3BhY2UtYWZ0ZXI9IjAuOGVtIi8+CisKKyAgICA8Y29ycGF1dGhvciBzcGFjZS1iZWZvcmU9IjAuNWVtIgorICAgICAgICAgICAgICAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiLz4KKyAgICA8YXV0aG9yZ3JvdXAgc3BhY2UtYmVmb3JlPSIwLjVlbSIKKyAgICAgICAgICAgICAgICAgZm9udC1zaXplPSImaHNpemUyOyIvPgorICAgIDxhdXRob3Igc3BhY2UtYmVmb3JlPSIwLjVlbSIKKyAgICAgICAgICAgIGZvbnQtc2l6ZT0iJmhzaXplMjsiCisgICAgICAgICAgICBzcGFjZS1hZnRlcj0iMC44ZW0iLz4KKworICAgIDxlbWFpbCBmb250LXNpemU9IiZoc2l6ZTI7Ii8+CisKKyAgICA8b3RoZXJjcmVkaXQgc3BhY2UtYmVmb3JlPSIwLjVlbSIvPgorICAgIDxyZWxlYXNlaW5mbyBzcGFjZS1iZWZvcmU9IjAuNWVtIi8+CisgICAgPGNvcHlyaWdodCBzcGFjZS1iZWZvcmU9IjAuNWVtIi8+CisgICAgPGxlZ2Fsbm90aWNlIHRleHQtYWxpZ249InN0YXJ0IgorICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdD0iMC41aW4iCisgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodD0iMC41aW4iCisgICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5PSJ7JGJvZHkuZm9udHNldH0iLz4KKyAgICA8cHViZGF0ZSBzcGFjZS1iZWZvcmU9IjAuNWVtIi8+CisJPHBhcmE+PC9wYXJhPgorICAgIDxyZXZpc2lvbiBzcGFjZS1iZWZvcmU9IjAuNWVtIi8+CisgICAgPHJldmhpc3Rvcnkgc3BhY2UtYmVmb3JlPSIwLjVlbSIvPgorICAgIDxhYnN0cmFjdCBzcGFjZS1iZWZvcmU9IjAuNWVtIgorCSAgICAgIHRleHQtYWxpZ249InN0YXJ0IgorCSAgICAgIG1hcmdpbi1sZWZ0PSIwLjVpbiIKKyAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0PSIwLjVpbiIKKyAgICAgICAgICAgICAgZm9udC1mYW1pbHk9InskYm9keS5mb250c2V0fSIvPgorCisgICAgPHBhcmE+PC9wYXJhPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InNldCIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJkaXZpc2lvbi50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OnNldFsxXSIKKwkgICAgIHRleHQtYWxpZ249ImNlbnRlciIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBzcGFjZS1iZWZvcmU9IiZoc2l6ZTVzcGFjZTsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICAgdGV4dC1hbGlnbj0iY2VudGVyIi8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJib29rIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKworICAgICAgPG1lZGlhb2JqZWN0Lz4KKworPCEtLQorCisjIElmIHlvdSBsZWF2ZSB0aGlzIGJsb2NrIG9mIGNvZGUgaW4gdGhlbiB0aGUgdGV4dCB0aXRsZSBpbiB0aGUKKyMgPHRpdGxlPkJpdEJha2UgVXNlciBNYW51YWw8L3RpdGxlPiBzdGF0ZW1lbnQgb2YgdGhlCisjIGJpdGJha2UtdXNlci1tYW51YWwueG1sIGZpbGUgaXMgcmVuZGVyZWQgb24gdGhlIHRpdGxlIHBhZ2UgYmVsb3cgdGhlCisjIGltYWdlLiAgQ29tbWVudGluZyBpdCBvdXQgZ2V0cyBpdCBvdXQgb2YgdGhlcmUgeWV0IGFsbG93cyBpdAorIyB0byBiZSByZXRhaW5lZCBpbiB0aGUgdGFiIHRleHQgZm9yIHRoZSBIVE1MIHZlcnNpb24gb2YgdGhlCisjIG1hbnVhbC4KKworICAgICAgPHRpdGxlCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJkaXZpc2lvbi50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmJvb2tbMV0iCisJICAgICB0ZXh0LWFsaWduPSJjZW50ZXIiCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgc3BhY2UtYmVmb3JlPSImaHNpemU1c3BhY2U7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorLS0+CisgICAgICA8c3VidGl0bGUKKwkJdGV4dC1hbGlnbj0iY2VudGVyIgorCQlmb250LXNpemU9IiZoc2l6ZTQ7IgorCQlzcGFjZS1iZWZvcmU9IiZoc2l6ZTRzcGFjZTsiCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgICA8Y29ycGF1dGhvciBmb250LXNpemU9IiZoc2l6ZTM7IgorCQkgIGtlZXAtd2l0aC1uZXh0PSJhbHdheXMiCisJCSAgc3BhY2UtYmVmb3JlPSIyaW4iLz4KKyAgICAgIDxhdXRob3Jncm91cCBzcGFjZS1iZWZvcmU9IjJpbiIvPgorICAgICAgPGF1dGhvciBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgICAgIHNwYWNlLWJlZm9yZT0iJmhzaXplMnNwYWNlOyIKKwkgICAgICBrZWVwLXdpdGgtbmV4dD0iYWx3YXlzIi8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorPCEtLQorIyBJZiB5b3UgbGVhdmUgdGhpcyBibG9jayBvZiBjb2RlIGluIHRoZW4gdGhlIHRleHQgdGl0bGUgaW4gdGhlCisjIDx0aXRsZT5CaXRCYWtlIFVzZXIgTWFudWFsPC90aXRsZT4gc3RhdGVtZW50IG9mIHRoZQorIyBiaXRiYWtlLXVzZXItbWFudWFsLnhtbCBmaWxlIGlzIHJlbmRlcmVkIG9uIHRoZSB0aXRsZSBwYWdlIGJlbG93IHRoZQorIyBpbWFnZS4gIENvbW1lbnRpbmcgaXQgb3V0IGdldHMgaXQgb3V0IG9mIHRoZXJlIHlldCBhbGxvd3MgaXQKKyMgdG8gYmUgcmV0YWluZWQgaW4gdGhlIHRhYiB0ZXh0IGZvciB0aGUgSFRNTCB2ZXJzaW9uIG9mIHRoZQorIyBtYW51YWwuCisKKyAgICAgIDx0aXRsZQorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iYm9vay52ZXJzby50aXRsZSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplMjsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CistLT4KKyAgICAgIDxjb3JwYXV0aG9yLz4KKyAgICAgIDxhdXRob3Jncm91cCB0Om5hbWVkLXRlbXBsYXRlPSJ2ZXJzby5hdXRob3Jncm91cCIvPgorICAgICAgPGF1dGhvci8+CisgICAgICA8b3RoZXJjcmVkaXQvPgorICAgICAgPHB1YmRhdGUgc3BhY2UtYmVmb3JlPSIxZW0iLz4KKyAgICAgIDxjb3B5cmlnaHQvPgorICAgICAgPGFic3RyYWN0Lz4KKyAgICAgIDxsZWdhbG5vdGljZSBmb250LXNpemU9IjhwdCIvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICAgIDxmbzpibG9jayBicmVhay1hZnRlcj0icGFnZSIvPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgICAgPGZvOmJsb2NrIGJyZWFrLWFmdGVyPSJwYWdlIi8+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0icGFydCIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJkaXZpc2lvbi50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OnBhcnRbMV0iCisJICAgICB0ZXh0LWFsaWduPSJjZW50ZXIiCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgc3BhY2UtYmVmb3JlPSImaHNpemU1c3BhY2U7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIHRleHQtYWxpZ249ImNlbnRlciIKKwkgICAgICBmb250LXNpemU9IiZoc2l6ZTQ7IgorCSAgICAgIHNwYWNlLWJlZm9yZT0iJmhzaXplNHNwYWNlOyIKKwkgICAgICBmb250LXdlaWdodD0nYm9sZCcKKwkgICAgICBmb250LXN0eWxlPSdpdGFsaWMnCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJwYXJ0aW50cm8iIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICB0ZXh0LWFsaWduPSJjZW50ZXIiCisJICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICBzcGFjZS1iZWZvcmU9IjFlbSIKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIHRleHQtYWxpZ249ImNlbnRlciIKKwkgICAgICBmb250LXNpemU9IiZoc2l6ZTI7IgorCSAgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgIGZvbnQtc3R5bGU9Iml0YWxpYyIKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InJlZmVyZW5jZSIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJkaXZpc2lvbi50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OnJlZmVyZW5jZVsxXSIKKwkgICAgIHRleHQtYWxpZ249ImNlbnRlciIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBzcGFjZS1iZWZvcmU9IiZoc2l6ZTVzcGFjZTsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICAgdGV4dC1hbGlnbj0iY2VudGVyIi8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0icmVmc3lub3BzaXNkaXYiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InJlZnNlY3Rpb24iIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InJlZnNlY3QxIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJyZWZzZWN0MiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0icmVmc2VjdDMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iZGVkaWNhdGlvbiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpkZWRpY2F0aW9uWzFdIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJwcmVmYWNlIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OnByZWZhY2VbMV0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgICA8Y29ycGF1dGhvci8+CisgICAgICA8YXV0aG9yZ3JvdXAvPgorICAgICAgPGF1dGhvci8+CisgICAgICA8b3RoZXJjcmVkaXQvPgorICAgICAgPHJlbGVhc2VpbmZvLz4KKyAgICAgIDxjb3B5cmlnaHQvPgorICAgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICAgIDxwdWJkYXRlLz4KKyAgICAgIDxyZXZpc2lvbi8+CisgICAgICA8cmV2aGlzdG9yeS8+CisgICAgICA8YWJzdHJhY3QvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJjaGFwdGVyIiB0OndyYXBwZXI9ImZvOmJsb2NrIgorICAgICAgICAgICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSI+CisgICAgICA8dGl0bGUgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6Y2hhcHRlclsxXSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorCisgICAgICA8c3VidGl0bGUgc3BhY2UtYmVmb3JlPSIwLjVlbSIKKwkJZm9udC1zdHlsZT0iaXRhbGljIgorCQlmb250LXNpemU9IiZoc2l6ZTI7IgorCQlmb250LXdlaWdodD0iYm9sZCIvPgorCisgICAgICA8Y29ycGF1dGhvciAgc3BhY2UtYmVmb3JlPSIwLjVlbSIKKwkgICAgICAgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKyAgICAgICAgICAgICAgICAgICBmb250LXNpemU9IiZoc2l6ZTI7Ii8+CisKKyAgICAgIDxhdXRob3Jncm91cCBzcGFjZS1iZWZvcmU9IjAuNWVtIgorCSAgICAgICAgICAgc3BhY2UtYWZ0ZXI9IjAuNWVtIgorICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZT0iJmhzaXplMjsiLz4KKworICAgICAgPGF1dGhvciAgICAgIHNwYWNlLWJlZm9yZT0iMC41ZW0iCisJICAgICAgICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisgICAgICAgICAgICAgICAgICAgZm9udC1zaXplPSImaHNpemUyOyIvPgorCisgICAgICA8b3RoZXJjcmVkaXQvPgorICAgICAgPHJlbGVhc2VpbmZvLz4KKyAgICAgIDxjb3B5cmlnaHQvPgorICAgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICAgIDxwdWJkYXRlLz4KKyAgICAgIDxyZXZpc2lvbi8+CisgICAgICA8cmV2aGlzdG9yeS8+CisgICAgICA8YWJzdHJhY3QvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJhcHBlbmRpeCIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmFwcGVuZGl4WzFdIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgICAgPGNvcnBhdXRob3IvPgorICAgICAgPGF1dGhvcmdyb3VwLz4KKyAgICAgIDxhdXRob3IvPgorICAgICAgPG90aGVyY3JlZGl0Lz4KKyAgICAgIDxyZWxlYXNlaW5mby8+CisgICAgICA8Y29weXJpZ2h0Lz4KKyAgICAgIDxsZWdhbG5vdGljZS8+CisgICAgICA8cHViZGF0ZS8+CisgICAgICA8cmV2aXNpb24vPgorICAgICAgPHJldmhpc3RvcnkvPgorICAgICAgPGFic3RyYWN0Lz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InNlY3Rpb24iIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InNlY3QxIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8Y29ycGF1dGhvci8+CisgICAgPGF1dGhvcmdyb3VwLz4KKyAgICA8YXV0aG9yLz4KKyAgICA8b3RoZXJjcmVkaXQvPgorICAgIDxyZWxlYXNlaW5mby8+CisgICAgPGNvcHlyaWdodC8+CisgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICA8cHViZGF0ZS8+CisgICAgPHJldmlzaW9uLz4KKyAgICA8cmV2aGlzdG9yeS8+CisgICAgPGFic3RyYWN0Lz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJzZWN0MiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ic2VjdDMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InNlY3Q0IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8Y29ycGF1dGhvci8+CisgICAgPGF1dGhvcmdyb3VwLz4KKyAgICA8YXV0aG9yLz4KKyAgICA8b3RoZXJjcmVkaXQvPgorICAgIDxyZWxlYXNlaW5mby8+CisgICAgPGNvcHlyaWdodC8+CisgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICA8cHViZGF0ZS8+CisgICAgPHJldmlzaW9uLz4KKyAgICA8cmV2aGlzdG9yeS8+CisgICAgPGFic3RyYWN0Lz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJzZWN0NSIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ic2ltcGxlc2VjdCIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJiaWJsaW9ncmFwaHkiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6YmlibGlvZ3JhcGh5WzFdIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJiaWJsaW9kaXYiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmJpYmxpb2RpdlsxXSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNDsiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iZ2xvc3NhcnkiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6Z2xvc3NhcnlbMV0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9Imdsb3NzZGl2IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZSB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpnbG9zc2RpdlsxXSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNDsiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iaW5kZXgiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6aW5kZXhbMV0iCisgICAgICAgICAgICAgcGFyYW06cGFnZXdpZGU9IjEiCisJICAgICBtYXJnaW4tbGVmdD0iMHB0IgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8IS0tIFRoZSBpbmRleGRpdi50aXRsZSB0ZW1wbGF0ZSBpcyB1c2VkIHNvIHRoYXQgbWFudWFsIGFuZCAtLT4KKyAgPCEtLSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBpbmRleGRpdiB0aXRsZXMgZ2V0IHRoZSBzYW1lIC0tPgorICA8IS0tIGZvcm1hdHRpbmcuIC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImluZGV4ZGl2IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZSB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iaW5kZXhkaXYudGl0bGUiCisJICAgICBwYXJhbTp0aXRsZT0idGl0bGUiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJzZXRpbmRleCIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpzZXRpbmRleFsxXSIKKyAgICAgICAgICAgICBwYXJhbTpwYWdld2lkZT0iMSIKKwkgICAgIG1hcmdpbi1sZWZ0PSIwcHQiCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImNvbG9waG9uIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmNvbG9waG9uWzFdIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJ0YWJsZS5vZi5jb250ZW50cyIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJnZW50ZXh0IgorCSAgICAgcGFyYW06a2V5PSInVGFibGVvZkNvbnRlbnRzJyIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWluaW11bT0iMWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5vcHRpbXVtPSIxLjVlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWF4aW11bT0iMmVtIgorCSAgICAgc3BhY2UtYWZ0ZXI9IjAuNWVtIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemUzOyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ibGlzdC5vZi50YWJsZXMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZ2VudGV4dCIKKwkgICAgIHBhcmFtOmtleT0iJ0xpc3RvZlRhYmxlcyciCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1pbmltdW09IjFlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUub3B0aW11bT0iMS41ZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1heGltdW09IjJlbSIKKwkgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9Imxpc3Qub2YuZmlndXJlcyIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJnZW50ZXh0IgorCSAgICAgcGFyYW06a2V5PSInTGlzdG9mRmlndXJlcyciCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1pbmltdW09IjFlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUub3B0aW11bT0iMS41ZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1heGltdW09IjJlbSIKKwkgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9Imxpc3Qub2YuZXhhbXBsZXMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZ2VudGV4dCIKKwkgICAgIHBhcmFtOmtleT0iJ0xpc3RvZkV4YW1wbGVzJyIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWluaW11bT0iMWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5vcHRpbXVtPSIxLjVlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWF4aW11bT0iMmVtIgorCSAgICAgc3BhY2UtYWZ0ZXI9IjAuNWVtIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemUzOyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ibGlzdC5vZi5lcXVhdGlvbnMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZ2VudGV4dCIKKwkgICAgIHBhcmFtOmtleT0iJ0xpc3RvZkVxdWF0aW9ucyciCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1pbmltdW09IjFlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUub3B0aW11bT0iMS41ZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1heGltdW09IjJlbSIKKwkgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9Imxpc3Qub2YucHJvY2VkdXJlcyIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJnZW50ZXh0IgorCSAgICAgcGFyYW06a2V5PSInTGlzdG9mUHJvY2VkdXJlcyciCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1pbmltdW09IjFlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUub3B0aW11bT0iMS41ZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1heGltdW09IjJlbSIKKwkgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9Imxpc3Qub2YudW5rbm93bnMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZ2VudGV4dCIKKwkgICAgIHBhcmFtOmtleT0iJ0xpc3RvZlVua25vd24nIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5taW5pbXVtPSIxZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm9wdGltdW09IjEuNWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5tYXhpbXVtPSIyZW0iCisJICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworPC90OnRlbXBsYXRlcz4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdG9vbHMvZG9jYm9vay10by1wZGYgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3Rvb2xzL2RvY2Jvb2stdG8tcGRmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU1OGRlZDllCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90b29scy9kb2Nib29rLXRvLXBkZgpAQCAtMCwwICsxLDUxIEBACisjIS9iaW4vc2gKKwkKK2lmIFsgLXogIiQxIiAtbyAteiAiJDIiIF07IHRoZW4KKyAgIGVjaG8gInVzYWdlOiBbLXZdICQwIDxkb2Nib29rIGZpbGU+IDx0ZW1wbGF0ZWRpcj4iCisgICBlY2hvCisgICBlY2hvICIqTk9URSogeW91IG5lZWQgeHNsdHByb2MsIGZvcCBhbmQgbndhbHNoIGRvY2Jvb2sgc3R5bGVzaGVldHMiIAorICAgZWNobyAiICAgICAgIGluc3RhbGxlZCBmb3IgdGhpcyB0byB3b3JrISIKKyAgIGVjaG8KKyAgIGV4aXQgMAorZmkKKworRk89YGVjaG8gJDEgfCBzZWQgcy8ueG1sLy5mby9gIHx8IGV4aXQgMQorUERGPWBlY2hvICQxIHwgc2VkIHMvLnhtbC8ucGRmL2AgfHwgZXhpdCAxCitURU1QTEFURURJUj0kMgorCisjIworIyBUaGVzZSBVUkkgc2hvdWxkIGJlIHJld3JpdHRlbiBieSB5b3VyIGRpc3RyaWJ1dGlvbidzIHhtbCBjYXRhbG9nIHRvCisjIG1hdGNoIHlvdXIgbG9jYWx5IGluc3RhbGxlZCBYU0wgc3R5bGVzaGVldHMuCitYU0xfQkFTRV9VUkk9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC9jdXJyZW50IgorCisjIENyZWF0ZXMgYSB0ZW1wb3JhcnkgWFNMIHN0eWxlc2hlZXQgYmFzZWQgb24gdGl0bGVwYWdlLnhzbAoreHNsdHByb2MgLW8gL3RtcC90aXRsZXBhZ2UueHNsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgLS14aW5jbHVkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICRYU0xfQkFTRV9VUkkvdGVtcGxhdGUvdGl0bGVwYWdlLnhzbCBcCisgICAgICAgICAkVEVNUExBVEVESVIvdGl0bGVwYWdlLnRlbXBsYXRlcy54bWwgfHwgZXhpdCAxCisKKyMgQ3JlYXRlcyB0aGUgZmlsZSBuZWVkZWQgZm9yIEZPUAoreHNsdHByb2MgLS14aW5jbHVkZSAgICAgICAgICAgICAgICAgICAgXAorCSAtLXN0cmluZ3BhcmFtIGh5cGhlbmF0ZSBmYWxzZSBcCisJIC0tc3RyaW5ncGFyYW0gZm9ybWFsLnRpdGxlLnBsYWNlbWVudCAiZmlndXJlIGFmdGVyIiBcCisJIC0tc3RyaW5ncGFyYW0gdWxpbmsuc2hvdyAxIFwKKyAgICAgICAgIC0tc3RyaW5ncGFyYW0gIGJvZHkuZm9udC5tYXN0ZXIgIDkgXAorICAgICAgICAgLS1zdHJpbmdwYXJhbSAgdGl0bGUuZm9udC5tYXN0ZXIgIDExIFwKKyAgICAgICAgIC0tc3RyaW5ncGFyYW0gZHJhZnQud2F0ZXJtYXJrLmltYWdlICIkVEVNUExBVEVESVIvZHJhZnQucG5nIiBcCisgICAgICAgICAtLXN0cmluZ3BhcmFtICBjaGFwdGVyLmF1dG9sYWJlbCAxIFwKKyAgICAgICAgIC0tc3RyaW5ncGFyYW0gIGFwcGVuZGl4LmF1dG9sYWJlbCBBIFwKKyAgICAgICAgIC0tc3RyaW5ncGFyYW0gIHNlY3Rpb24uYXV0b2xhYmVsIDEgXAorICAgICAgICAgLS1zdHJpbmdwYXJhbSAgc2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwgMSBcCisgICAgICAgICAtLW91dHB1dCAkRk8gICAgICAgICAgICAgICBcCisgICAgICAgICAkVEVNUExBVEVESVIvZGItcGRmLnhzbCAgICBcCisJICQxICAgICAgICAgICAgICAgICB8fCBleGl0IDEKKworIyBJbnZva2VzIHRoZSBKYXZhIHZlcnNpb24gb2YgRk9QLiAgVXNlcyB0aGUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGZpbGUgY29tbW9uL2ZvcC1jb25maWcueG1sCitmb3AgLWMgJFRFTVBMQVRFRElSL2ZvcC1jb25maWcueG1sIC1mbyAkRk8gLXBkZiAkUERGICAgICAgIHx8IGV4aXQgMQorCitybSAtZiAkRk8KK3JtIC1mICAvdG1wL3RpdGxlcGFnZS54c2wKKworZWNobworZWNobyAiICMjIyMgU3VjY2VzcyEgJFBERiByZWFkeS4gIyMjIyIKK2VjaG8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvQ09XLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9DT1cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxN2VjMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvQ09XLnB5CkBAIC0wLDAgKzEsMzIzIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBUaGlzIGlzIGEgY29weSBvbiB3cml0ZSBkaWN0aW9uYXJ5IGFuZCBzZXQgd2hpY2ggYWJ1c2VzIGNsYXNzZXMgdG8gdHJ5IGFuZCBiZSBuaWNlIGFuZCBmYXN0LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYgVGltIEFtc2VsbAorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyNQbGVhc2UgTm90ZToKKyMgQmUgY2FyZWZ1bCB3aGVuIHVzaW5nIG11dGFibGUgdHlwZXMgKGllIERpY3QgYW5kIExpc3RzKSAtIG9wZXJhdGlvbnMgaW52b2x2aW5nIHRoZXNlIGFyZSBTTE9XLgorIyBBc3NpZ24gYSBmaWxlIHRvIF9fd2Fybl9fIHRvIGdldCB3YXJuaW5ncyBhYm91dCBzbG93IG9wZXJhdGlvbnMuCisjCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KK2ltcG9ydCBjb3B5CitpbXBvcnQgdHlwZXMKK0ltbXV0YWJsZVR5cGVzID0gKAorICAgIHR5cGVzLk5vbmVUeXBlLAorICAgIGJvb2wsCisgICAgY29tcGxleCwKKyAgICBmbG9hdCwKKyAgICBpbnQsCisgICAgbG9uZywKKyAgICB0dXBsZSwKKyAgICBmcm96ZW5zZXQsCisgICAgYmFzZXN0cmluZworKQorCitNVVRBQkxFID0gIl9fbXV0YWJsZV9fIgorCitjbGFzcyBDT1dNZXRhKHR5cGUpOgorICAgIHBhc3MKKworY2xhc3MgQ09XRGljdE1ldGEoQ09XTWV0YSk6CisgICAgX193YXJuX18gPSBGYWxzZQorICAgIF9faGFzbXV0YWJsZV9fID0gRmFsc2UKKyAgICBfX21hcmtlcl9fID0gdHVwbGUoKQorCisgICAgZGVmIF9fc3RyX18oY2xzKToKKyAgICAgICAgIyBGSVhNRTogSSBoYXZlIG1hZ2ljIG51bWJlcnMhCisgICAgICAgIHJldHVybiAiPENPV0RpY3QgTGV2ZWw6ICVpIEN1cnJlbnQgS2V5czogJWk+IiAlIChjbHMuX19jb3VudF9fLCBsZW4oY2xzLl9fZGljdF9fKSAtIDMpCisgICAgX19yZXByX18gPSBfX3N0cl9fCisKKyAgICBkZWYgY293KGNscyk6CisgICAgICAgIGNsYXNzIEMoY2xzKToKKyAgICAgICAgICAgIF9fY291bnRfXyA9IGNscy5fX2NvdW50X18gKyAxCisgICAgICAgIHJldHVybiBDCisgICAgY29weSA9IGNvdworICAgIF9fY2FsbF9fID0gY293CisKKyAgICBkZWYgX19zZXRpdGVtX18oY2xzLCBrZXksIHZhbHVlKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIEltbXV0YWJsZVR5cGVzKToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBDT1dNZXRhKToKKyAgICAgICAgICAgICAgICBjbHMuX19oYXNtdXRhYmxlX18gPSBUcnVlCisgICAgICAgICAgICBrZXkgKz0gTVVUQUJMRQorICAgICAgICBzZXRhdHRyKGNscywga2V5LCB2YWx1ZSkKKworICAgIGRlZiBfX2dldG11dGFibGVfXyhjbHMsIGtleSwgcmVhZG9ubHk9RmFsc2UpOgorICAgICAgICBua2V5ID0ga2V5ICsgTVVUQUJMRQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gY2xzLl9fZGljdF9fW25rZXldCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB2YWx1ZSA9IGdldGF0dHIoY2xzLCBua2V5KQorICAgICAgICBpZiByZWFkb25seToKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgICAgIGlmIG5vdCBjbHMuX193YXJuX18gaXMgRmFsc2UgYW5kIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBDT1dNZXRhKToKKyAgICAgICAgICAgIHByaW50KCJXYXJuaW5nOiBEb2luZyBhIGNvcHkgYmVjYXVzZSAlcyBpcyBhIG11dGFibGUgdHlwZS4iICUga2V5LCBmaWxlPWNscy5fX3dhcm5fXykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5jb3B5KCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGU6CisgICAgICAgICAgICB2YWx1ZSA9IGNvcHkuY29weSh2YWx1ZSkKKyAgICAgICAgc2V0YXR0cihjbHMsIG5rZXksIHZhbHVlKQorICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIF9fZ2V0bWFya2VyX18gPSBbXQorICAgIGRlZiBfX2dldHJlYWRvbmx5X18oY2xzLCBrZXksIGRlZmF1bHQ9X19nZXRtYXJrZXJfXyk6CisgICAgICAgICIiIlwKKyAgICAgICAgR2V0IGEgdmFsdWUgKGV2ZW4gaWYgbXV0YWJsZSkgd2hpY2ggeW91IHByb21pc2Ugbm90IHRvIGNoYW5nZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBjbHMuX19nZXRpdGVtX18oa2V5LCBkZWZhdWx0LCBUcnVlKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKGNscywga2V5LCBkZWZhdWx0PV9fZ2V0bWFya2VyX18sIHJlYWRvbmx5PUZhbHNlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cihjbHMsIGtleSkKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGNscy5fX2dldG11dGFibGVfXyhrZXksIHJlYWRvbmx5KQorCisgICAgICAgICAgICAjIFRoaXMgaXMgZm9yIHZhbHVlcyB3aGljaCBoYXZlIGJlZW4gZGVsZXRlZAorICAgICAgICAgICAgaWYgdmFsdWUgaXMgY2xzLl9fbWFya2VyX186CisgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoImtleSAlcyBkb2VzIG5vdCBleGlzdC4iICUga2V5KQorCisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBub3QgZGVmYXVsdCBpcyBjbHMuX19nZXRtYXJrZXJfXzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorCisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcihzdHIoZSkpCisKKyAgICBkZWYgX19kZWxpdGVtX18oY2xzLCBrZXkpOgorICAgICAgICBjbHMuX19zZXRpdGVtX18oa2V5LCBjbHMuX19tYXJrZXJfXykKKworICAgIGRlZiBfX3JldmVydGl0ZW1fXyhjbHMsIGtleSk6CisgICAgICAgIGlmIG5vdCBjbHMuX19kaWN0X18uaGFzX2tleShrZXkpOgorICAgICAgICAgICAga2V5ICs9IE1VVEFCTEUKKyAgICAgICAgZGVsYXR0cihjbHMsIGtleSkKKworICAgIGRlZiBfX2NvbnRhaW5zX18oY2xzLCBrZXkpOgorICAgICAgICByZXR1cm4gY2xzLmhhc19rZXkoa2V5KQorCisgICAgZGVmIGhhc19rZXkoY2xzLCBrZXkpOgorICAgICAgICB2YWx1ZSA9IGNscy5fX2dldHJlYWRvbmx5X18oa2V5LCBjbHMuX19tYXJrZXJfXykKKyAgICAgICAgaWYgdmFsdWUgaXMgY2xzLl9fbWFya2VyX186CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBpdGVyKGNscywgdHlwZSwgcmVhZG9ubHk9RmFsc2UpOgorICAgICAgICBmb3Iga2V5IGluIGRpcihjbHMpOgorICAgICAgICAgICAgaWYga2V5LnN0YXJ0c3dpdGgoIl9fIik6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYga2V5LmVuZHN3aXRoKE1VVEFCTEUpOgorICAgICAgICAgICAgICAgIGtleSA9IGtleVs6LWxlbihNVVRBQkxFKV0KKworICAgICAgICAgICAgaWYgdHlwZSA9PSAia2V5cyI6CisgICAgICAgICAgICAgICAgeWllbGQga2V5CisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiByZWFkb25seToKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjbHMuX19nZXRyZWFkb25seV9fKGtleSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNsc1trZXldCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgdHlwZSA9PSAidmFsdWVzIjoKKyAgICAgICAgICAgICAgICB5aWVsZCB2YWx1ZQorICAgICAgICAgICAgaWYgdHlwZSA9PSAiaXRlbXMiOgorICAgICAgICAgICAgICAgIHlpZWxkIChrZXksIHZhbHVlKQorICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uKCkKKworICAgIGRlZiBpdGVya2V5cyhjbHMpOgorICAgICAgICByZXR1cm4gY2xzLml0ZXIoImtleXMiKQorICAgIGRlZiBpdGVydmFsdWVzKGNscywgcmVhZG9ubHk9RmFsc2UpOgorICAgICAgICBpZiBub3QgY2xzLl9fd2Fybl9fIGlzIEZhbHNlIGFuZCBjbHMuX19oYXNtdXRhYmxlX18gYW5kIHJlYWRvbmx5IGlzIEZhbHNlOgorICAgICAgICAgICAgcHJpbnQoIldhcm5pbmc6IElmIHlvdSBhcm4ndCBnb2luZyB0byBjaGFuZ2UgYW55IG9mIHRoZSB2YWx1ZXMgY2FsbCB3aXRoIFRydWUuIiwgZmlsZT1jbHMuX193YXJuX18pCisgICAgICAgIHJldHVybiBjbHMuaXRlcigidmFsdWVzIiwgcmVhZG9ubHkpCisgICAgZGVmIGl0ZXJpdGVtcyhjbHMsIHJlYWRvbmx5PUZhbHNlKToKKyAgICAgICAgaWYgbm90IGNscy5fX3dhcm5fXyBpcyBGYWxzZSBhbmQgY2xzLl9faGFzbXV0YWJsZV9fIGFuZCByZWFkb25seSBpcyBGYWxzZToKKyAgICAgICAgICAgIHByaW50KCJXYXJuaW5nOiBJZiB5b3UgYXJuJ3QgZ29pbmcgdG8gY2hhbmdlIGFueSBvZiB0aGUgdmFsdWVzIGNhbGwgd2l0aCBUcnVlLiIsIGZpbGU9Y2xzLl9fd2Fybl9fKQorICAgICAgICByZXR1cm4gY2xzLml0ZXIoIml0ZW1zIiwgcmVhZG9ubHkpCisKK2NsYXNzIENPV1NldE1ldGEoQ09XRGljdE1ldGEpOgorICAgIGRlZiBfX3N0cl9fKGNscyk6CisgICAgICAgICMgRklYTUU6IEkgaGF2ZSBtYWdpYyBudW1iZXJzIQorICAgICAgICByZXR1cm4gIjxDT1dTZXQgTGV2ZWw6ICVpIEN1cnJlbnQgS2V5czogJWk+IiAlIChjbHMuX19jb3VudF9fLCBsZW4oY2xzLl9fZGljdF9fKSAtMykKKyAgICBfX3JlcHJfXyA9IF9fc3RyX18KKworICAgIGRlZiBjb3coY2xzKToKKyAgICAgICAgY2xhc3MgQyhjbHMpOgorICAgICAgICAgICAgX19jb3VudF9fID0gY2xzLl9fY291bnRfXyArIDEKKyAgICAgICAgcmV0dXJuIEMKKworICAgIGRlZiBhZGQoY2xzLCB2YWx1ZSk6CisgICAgICAgIENPV0RpY3RNZXRhLl9fc2V0aXRlbV9fKGNscywgcmVwcihoYXNoKHZhbHVlKSksIHZhbHVlKQorCisgICAgZGVmIHJlbW92ZShjbHMsIHZhbHVlKToKKyAgICAgICAgQ09XRGljdE1ldGEuX19kZWxpdGVtX18oY2xzLCByZXByKGhhc2godmFsdWUpKSkKKworICAgIGRlZiBfX2luX18oY2xzLCB2YWx1ZSk6CisgICAgICAgIHJldHVybiBDT1dEaWN0TWV0YS5oYXNfa2V5KHJlcHIoaGFzaCh2YWx1ZSkpKQorCisgICAgZGVmIGl0ZXJrZXlzKGNscyk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigic2V0cyBkb24ndCBoYXZlIGtleXMiKQorCisgICAgZGVmIGl0ZXJpdGVtcyhjbHMpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoInNldHMgZG9uJ3QgaGF2ZSAnaXRlbXMnIikKKworIyBUaGVzZSBhcmUgdGhlIGFjdHVhbCBjbGFzc2VzIHlvdSB1c2UhCitjbGFzcyBDT1dEaWN0QmFzZShvYmplY3QpOgorICAgIF9fbWV0YWNsYXNzX18gPSBDT1dEaWN0TWV0YQorICAgIF9fY291bnRfXyA9IDAKKworY2xhc3MgQ09XU2V0QmFzZShvYmplY3QpOgorICAgIF9fbWV0YWNsYXNzX18gPSBDT1dTZXRNZXRhCisgICAgX19jb3VudF9fID0gMAorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIGltcG9ydCBzeXMKKyAgICBDT1dEaWN0QmFzZS5fX3dhcm5fXyA9IHN5cy5zdGRlcnIKKyAgICBhID0gQ09XRGljdEJhc2UoKQorICAgIHByaW50KCJhIiwgYSkKKworICAgIGFbJ2EnXSA9ICdhJworICAgIGFbJ2InXSA9ICdiJworICAgIGFbJ2RpY3QnXSA9IHt9CisKKyAgICBiID0gYS5jb3B5KCkKKyAgICBwcmludCgiYiIsIGIpCisgICAgYlsnYyddID0gJ2InCisKKyAgICBwcmludCgpCisKKyAgICBwcmludCgiYSIsIGEpCisgICAgZm9yIHggaW4gYS5pdGVyaXRlbXMoKToKKyAgICAgICAgcHJpbnQoeCkKKyAgICBwcmludCgiLS0iKQorICAgIHByaW50KCJiIiwgYikKKyAgICBmb3IgeCBpbiBiLml0ZXJpdGVtcygpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCkKKworICAgIGJbJ2RpY3QnXVsnYSddID0gJ2InCisgICAgYlsnYSddID0gJ2MnCisKKyAgICBwcmludCgiYSIsIGEpCisgICAgZm9yIHggaW4gYS5pdGVyaXRlbXMoKToKKyAgICAgICAgcHJpbnQoeCkKKyAgICBwcmludCgiLS0iKQorICAgIHByaW50KCJiIiwgYikKKyAgICBmb3IgeCBpbiBiLml0ZXJpdGVtcygpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCkKKworICAgIHRyeToKKyAgICAgICAgYlsnZGljdDInXQorICAgIGV4Y2VwdCBLZXlFcnJvciBhcyBlOgorICAgICAgICBwcmludCgiT2theSEiKQorCisgICAgYVsnc2V0J10gPSBDT1dTZXRCYXNlKCkKKyAgICBhWydzZXQnXS5hZGQoIm8xIikKKyAgICBhWydzZXQnXS5hZGQoIm8xIikKKyAgICBhWydzZXQnXS5hZGQoIm8yIikKKworICAgIHByaW50KCJhIiwgYSkKKyAgICBmb3IgeCBpbiBhWydzZXQnXS5pdGVydmFsdWVzKCk6CisgICAgICAgIHByaW50KHgpCisgICAgcHJpbnQoIi0tIikKKyAgICBwcmludCgiYiIsIGIpCisgICAgZm9yIHggaW4gYlsnc2V0J10uaXRlcnZhbHVlcygpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCkKKworICAgIGJbJ3NldCddLmFkZCgnbzMnKQorCisgICAgcHJpbnQoImEiLCBhKQorICAgIGZvciB4IGluIGFbJ3NldCddLml0ZXJ2YWx1ZXMoKToKKyAgICAgICAgcHJpbnQoeCkKKyAgICBwcmludCgiLS0iKQorICAgIHByaW50KCJiIiwgYikKKyAgICBmb3IgeCBpbiBiWydzZXQnXS5pdGVydmFsdWVzKCk6CisgICAgICAgIHByaW50KHgpCisgICAgcHJpbnQoKQorCisgICAgYVsnc2V0MiddID0gc2V0KCkKKyAgICBhWydzZXQyJ10uYWRkKCJvMSIpCisgICAgYVsnc2V0MiddLmFkZCgibzEiKQorICAgIGFbJ3NldDInXS5hZGQoIm8yIikKKworICAgIHByaW50KCJhIiwgYSkKKyAgICBmb3IgeCBpbiBhLml0ZXJpdGVtcygpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCItLSIpCisgICAgcHJpbnQoImIiLCBiKQorICAgIGZvciB4IGluIGIuaXRlcml0ZW1zKHJlYWRvbmx5PVRydWUpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCkKKworICAgIGRlbCBiWydiJ10KKyAgICB0cnk6CisgICAgICAgIHByaW50KGJbJ2InXSkKKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHByaW50KCJZYXkhIGRlbGV0ZWQga2V5IHJhaXNlcyBlcnJvciIpCisKKyAgICBpZiBiLmhhc19rZXkoJ2InKToKKyAgICAgICAgcHJpbnQoIkJvbyEiKQorICAgIGVsc2U6CisgICAgICAgIHByaW50KCJZYXkgLSBoYXNfa2V5IHdpdGggZGVsZXRlIHdvcmtzISIpCisKKyAgICBwcmludCgiYSIsIGEpCisgICAgZm9yIHggaW4gYS5pdGVyaXRlbXMoKToKKyAgICAgICAgcHJpbnQoeCkKKyAgICBwcmludCgiLS0iKQorICAgIHByaW50KCJiIiwgYikKKyAgICBmb3IgeCBpbiBiLml0ZXJpdGVtcyhyZWFkb25seT1UcnVlKToKKyAgICAgICAgcHJpbnQoeCkKKyAgICBwcmludCgpCisKKyAgICBiLl9fcmV2ZXJ0aXRlbV9fKCdiJykKKworICAgIHByaW50KCJhIiwgYSkKKyAgICBmb3IgeCBpbiBhLml0ZXJpdGVtcygpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCItLSIpCisgICAgcHJpbnQoImIiLCBiKQorICAgIGZvciB4IGluIGIuaXRlcml0ZW1zKHJlYWRvbmx5PVRydWUpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCkKKworICAgIGIuX19yZXZlcnRpdGVtX18oJ2RpY3QnKQorICAgIHByaW50KCJhIiwgYSkKKyAgICBmb3IgeCBpbiBhLml0ZXJpdGVtcygpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCItLSIpCisgICAgcHJpbnQoImIiLCBiKQorICAgIGZvciB4IGluIGIuaXRlcml0ZW1zKHJlYWRvbmx5PVRydWUpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNzk0NmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTQyIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIEJ1aWxkIFN5c3RlbSBQeXRob24gTGlicmFyeQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDMgIEhvbGdlciBTY2h1cmlnCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjCisjIEJhc2VkIG9uIEdlbnRvbydzIHBvcnRhZ2UucHkuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitfX3ZlcnNpb25fXyA9ICIxLjI3LjEiCisKK2ltcG9ydCBzeXMKK2lmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNywgMyk6CisgICAgcmFpc2UgUnVudGltZUVycm9yKCJTb3JyeSwgcHl0aG9uIDIuNy4zIG9yIGxhdGVyIGlzIHJlcXVpcmVkIGZvciB0aGlzIHZlcnNpb24gb2YgYml0YmFrZSIpCisKKworY2xhc3MgQkJIYW5kbGVkRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgIiIiCisgICAgVGhlIGJpZyBkaWxlbW1hIGZvciBnZW5lcmljIGJpdGJha2UgY29kZSBpcyB3aGF0IGluZm9ybWF0aW9uIHRvIGdpdmUgdGhlIHVzZXIKKyAgICB3aGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMuIEFueSBleGNlcHRpb24gaW5oZXJpdGluZyB0aGlzIGJhc2UgZXhjZXB0aW9uIGNsYXNzCisgICAgaGFzIGFscmVhZHkgcHJvdmlkZWQgaW5mb3JtYXRpb24gdG8gdGhlIHVzZXIgdmlhIHNvbWUgJ2ZpcmVkJyBtZXNzYWdlIHR5cGUgc3VjaCBhcworICAgIGFuIGV4cGxpY2l0bHkgZmlyZWQgZXZlbnQgdXNpbmcgYmIuZmlyZSwgb3IgYSBiYi5lcnJvciBtZXNzYWdlLiBJZiBiaXRiYWtlIAorICAgIGVuY291bnRlcnMgYW4gZXhjZXB0aW9uIGRlcml2ZWQgZnJvbSB0aGlzIGNsYXNzLCBubyBiYWNrdHJhY2Ugb3Igb3RoZXIgaW5mb3JtYXRpb24gCisgICAgd2lsbCBiZSBnaXZlbiB0byB0aGUgdXNlciwgaXRzIGFzc3VtZWQgdGhlIGVhcmxpZXIgZXZlbnQgcHJvdmlkZWQgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uLgorICAgICIiIgorICAgIHBhc3MKKworaW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworCisKK2NsYXNzIE51bGxIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CisgICAgZGVmIGVtaXQoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgcGFzcworCitMb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlckNsYXNzKCkKK2NsYXNzIEJCTG9nZ2VyKExvZ2dlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBuYW1lLnNwbGl0KCIuIilbMF0gPT0gIkJpdEJha2UiOgorICAgICAgICAgICAgc2VsZi5kZWJ1ZyA9IHNlbGYuYmJkZWJ1ZworICAgICAgICBMb2dnZXIuX19pbml0X18oc2VsZiwgbmFtZSkKKworICAgIGRlZiBiYmRlYnVnKHNlbGYsIGxldmVsLCBtc2csICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBzZWxmLmxvZyhsb2dnaW5nLkRFQlVHIC0gbGV2ZWwgKyAxLCBtc2csICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBwbGFpbihzZWxmLCBtc2csICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBzZWxmLmxvZyhsb2dnaW5nLklORk8gKyAxLCBtc2csICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiB2ZXJib3NlKHNlbGYsIG1zZywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYubG9nKGxvZ2dpbmcuSU5GTyAtIDEsIG1zZywgKmFyZ3MsICoqa3dhcmdzKQorCitsb2dnaW5nLnJhaXNlRXhjZXB0aW9ucyA9IEZhbHNlCitsb2dnaW5nLnNldExvZ2dlckNsYXNzKEJCTG9nZ2VyKQorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZSIpCitsb2dnZXIuYWRkSGFuZGxlcihOdWxsSGFuZGxlcigpKQorbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcgLSAyKQorCisjIFRoaXMgaGFzIHRvIGJlIGltcG9ydGVkIGFmdGVyIHRoZSBzZXRMb2dnZXJDbGFzcywgYXMgdGhlIGltcG9ydCBvZiBiYi5tc2cKKyMgY2FuIHJlc3VsdCBpbiBjb25zdHJ1Y3Rpb24gb2YgdGhlIHZhcmlvdXMgbG9nZ2Vycy4KK2ltcG9ydCBiYi5tc2cKKworZnJvbSBiYiBpbXBvcnQgZmV0Y2gyIGFzIGZldGNoCitzeXMubW9kdWxlc1snYmIuZmV0Y2gnXSA9IHN5cy5tb2R1bGVzWydiYi5mZXRjaDInXQorCisjIE1lc3NhZ2luZyBjb252ZW5pZW5jZSBmdW5jdGlvbnMKK2RlZiBwbGFpbigqYXJncyk6CisgICAgbG9nZ2VyLnBsYWluKCcnLmpvaW4oYXJncykpCisKK2RlZiBkZWJ1ZyhsdmwsICphcmdzKToKKyAgICBpZiBpc2luc3RhbmNlKGx2bCwgYmFzZXN0cmluZyk6CisgICAgICAgIGxvZ2dlci53YXJuKCJQYXNzZWQgaW52YWxpZCBkZWJ1ZyBsZXZlbCAnJXMnIHRvIGJiLmRlYnVnIiwgbHZsKQorICAgICAgICBhcmdzID0gKGx2bCwpICsgYXJncworICAgICAgICBsdmwgPSAxCisgICAgbG9nZ2VyLmRlYnVnKGx2bCwgJycuam9pbihhcmdzKSkKKworZGVmIG5vdGUoKmFyZ3MpOgorICAgIGxvZ2dlci5pbmZvKCcnLmpvaW4oYXJncykpCisKK2RlZiB3YXJuKCphcmdzKToKKyAgICBsb2dnZXIud2FybignJy5qb2luKGFyZ3MpKQorCitkZWYgZXJyb3IoKmFyZ3MsICoqa3dhcmdzKToKKyAgICBsb2dnZXIuZXJyb3IoJycuam9pbihhcmdzKSwgZXh0cmE9a3dhcmdzKQorCitkZWYgZmF0YWwoKmFyZ3MsICoqa3dhcmdzKToKKyAgICBsb2dnZXIuY3JpdGljYWwoJycuam9pbihhcmdzKSwgZXh0cmE9a3dhcmdzKQorICAgIHJhaXNlIEJCSGFuZGxlZEV4Y2VwdGlvbigpCisKK2RlZiBkZXByZWNhdGVkKGZ1bmMsIG5hbWU9Tm9uZSwgYWR2aWNlPSIiKToKKyAgICAiIiJUaGlzIGlzIGEgZGVjb3JhdG9yIHdoaWNoIGNhbiBiZSB1c2VkIHRvIG1hcmsgZnVuY3Rpb25zCisgICAgYXMgZGVwcmVjYXRlZC4gSXQgd2lsbCByZXN1bHQgaW4gYSB3YXJuaW5nIGJlaW5nIGVtaXR0ZWQKKyAgICB3aGVuIHRoZSBmdW5jdGlvbiBpcyB1c2VkLiIiIgorICAgIGltcG9ydCB3YXJuaW5ncworCisgICAgaWYgYWR2aWNlOgorICAgICAgICBhZHZpY2UgPSAiOiAlcyIgJSBhZHZpY2UKKyAgICBpZiBuYW1lIGlzIE5vbmU6CisgICAgICAgIG5hbWUgPSBmdW5jLl9fbmFtZV9fCisKKyAgICBkZWYgbmV3RnVuYygqYXJncywgKiprd2FyZ3MpOgorICAgICAgICB3YXJuaW5ncy53YXJuKCJDYWxsIHRvIGRlcHJlY2F0ZWQgZnVuY3Rpb24gJXMlcy4iICUgKG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWR2aWNlKSwKKyAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgc3RhY2tsZXZlbD0yKQorICAgICAgICByZXR1cm4gZnVuYygqYXJncywgKiprd2FyZ3MpCisgICAgbmV3RnVuYy5fX25hbWVfXyA9IGZ1bmMuX19uYW1lX18KKyAgICBuZXdGdW5jLl9fZG9jX18gPSBmdW5jLl9fZG9jX18KKyAgICBuZXdGdW5jLl9fZGljdF9fLnVwZGF0ZShmdW5jLl9fZGljdF9fKQorICAgIHJldHVybiBuZXdGdW5jCisKKyMgRm9yIGNvbXBhdGliaWxpdHkKK2RlZiBkZXByZWNhdGVfaW1wb3J0KGN1cnJlbnQsIG1vZHVsZW5hbWUsIGZyb21saXN0LCByZW5hbWVzID0gTm9uZSk6CisgICAgIiIiSW1wb3J0IG9iamVjdHMgZnJvbSBvbmUgbW9kdWxlIGludG8gYW5vdGhlciwgd3JhcHBpbmcgdGhlbSB3aXRoIGEgRGVwcmVjYXRpb25XYXJuaW5nIiIiCisgICAgaW1wb3J0IHN5cworCisgICAgbW9kdWxlID0gX19pbXBvcnRfXyhtb2R1bGVuYW1lLCBmcm9tbGlzdCA9IGZyb21saXN0KQorICAgIGZvciBwb3NpdGlvbiwgb2JqbmFtZSBpbiBlbnVtZXJhdGUoZnJvbWxpc3QpOgorICAgICAgICBvYmogPSBnZXRhdHRyKG1vZHVsZSwgb2JqbmFtZSkKKyAgICAgICAgbmV3b2JqID0gZGVwcmVjYXRlZChvYmosICJ7MH0uezF9Ii5mb3JtYXQoY3VycmVudCwgb2JqbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsZWFzZSB1c2UgezB9LnsxfSBpbnN0ZWFkIi5mb3JtYXQobW9kdWxlbmFtZSwgb2JqbmFtZSkpCisgICAgICAgIGlmIHJlbmFtZXM6CisgICAgICAgICAgICBuZXduYW1lID0gcmVuYW1lc1twb3NpdGlvbl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5ld25hbWUgPSBvYmpuYW1lCisKKyAgICAgICAgc2V0YXR0cihzeXMubW9kdWxlc1tjdXJyZW50XSwgbmV3bmFtZSwgbmV3b2JqKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2J1aWxkLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9idWlsZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDhjMzk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9idWlsZC5weQpAQCAtMCwwICsxLDc3MCBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSAnQnVpbGQnIGltcGxlbWVudGF0aW9uCisjCisjIENvcmUgY29kZSBmb3IgZnVuY3Rpb24gZXhlY3V0aW9uIGFuZCB0YXNrIGhhbmRsaW5nIGluIHRoZQorIyBCaXRCYWtlIGJ1aWxkIHRvb2xzLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIENocmlzIExhcnNvbgorIworIyBCYXNlZCBvbiBHZW50b28ncyBwb3J0YWdlLnB5LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgQmFzZWQgb24gZnVuY3Rpb25zIGZyb20gdGhlIGJhc2UgYmIgbW9kdWxlLCBDb3B5cmlnaHQgMjAwMyBIb2xnZXIgU2NodXJpZworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc2hsZXgKK2ltcG9ydCBnbG9iCitpbXBvcnQgdGltZQoraW1wb3J0IHN0YXQKK2ltcG9ydCBiYgoraW1wb3J0IGJiLm1zZworaW1wb3J0IGJiLnByb2Nlc3MKK2Zyb20gY29udGV4dGxpYiBpbXBvcnQgbmVzdGVkCitmcm9tIGJiIGltcG9ydCBldmVudCwgdXRpbHMKKworYmJsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZScpCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZS5CdWlsZCcpCisKK05VTEwgPSBvcGVuKG9zLmRldm51bGwsICdyKycpCisKK19fbXRpbWVfY2FjaGUgPSB7fQorCitkZWYgY2FjaGVkX210aW1lX25vZXJyb3IoZik6CisgICAgaWYgZiBub3QgaW4gX19tdGltZV9jYWNoZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX19tdGltZV9jYWNoZVtmXSA9IG9zLnN0YXQoZilbc3RhdC5TVF9NVElNRV0KKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gMAorICAgIHJldHVybiBfX210aW1lX2NhY2hlW2ZdCisKK2RlZiByZXNldF9jYWNoZSgpOgorICAgIGdsb2JhbCBfX210aW1lX2NhY2hlCisgICAgX19tdGltZV9jYWNoZSA9IHt9CisKKyMgV2hlbiB3ZSBleGVjdXRlIGEgUHl0aG9uIGZ1bmN0aW9uLCB3ZSdkIGxpa2UgY2VydGFpbiB0aGluZ3MKKyMgaW4gYWxsIG5hbWVzcGFjZXMsIGhlbmNlIHdlIGFkZCB0aGVtIHRvIF9fYnVpbHRpbnNfXy4KKyMgSWYgd2UgZG8gbm90IGRvIHRoaXMgYW5kIHVzZSB0aGUgZXhlYyBnbG9iYWxzLCB0aGV5IHdpbGwKKyMgbm90IGJlIGF2YWlsYWJsZSB0byBzdWJmdW5jdGlvbnMuCitfX2J1aWx0aW5zX19bJ2JiJ10gPSBiYgorX19idWlsdGluc19fWydvcyddID0gb3MKKworY2xhc3MgRnVuY0ZhaWxlZChFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lID0gTm9uZSwgbG9nZmlsZSA9IE5vbmUpOgorICAgICAgICBzZWxmLmxvZ2ZpbGUgPSBsb2dmaWxlCisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgaWYgbmFtZToKKyAgICAgICAgICAgIHNlbGYubXNnID0gJ0Z1bmN0aW9uIGZhaWxlZDogJXMnICUgbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5tc2cgPSAiRnVuY3Rpb24gZmFpbGVkIgorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYubG9nZmlsZSBhbmQgb3MucGF0aC5leGlzdHMoc2VsZi5sb2dmaWxlKToKKyAgICAgICAgICAgIG1zZyA9ICgiJXMgKGxvZyBmaWxlIGlzIGxvY2F0ZWQgYXQgJXMpIiAlCisgICAgICAgICAgICAgICAgICAgKHNlbGYubXNnLCBzZWxmLmxvZ2ZpbGUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnID0gc2VsZi5tc2cKKyAgICAgICAgcmV0dXJuIG1zZworCitjbGFzcyBUYXNrQmFzZShldmVudC5FdmVudCk6CisgICAgIiIiQmFzZSBjbGFzcyBmb3IgdGFzayBldmVudHMiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0LCBsb2dmaWxlLCBkKToKKyAgICAgICAgc2VsZi5fdGFzayA9IHQKKyAgICAgICAgc2VsZi5fcGFja2FnZSA9IGQuZ2V0VmFyKCJQRiIsIFRydWUpCisgICAgICAgIHNlbGYudGFza2ZpbGUgPSBkLmdldFZhcigiRklMRSIsIFRydWUpCisgICAgICAgIHNlbGYudGFza25hbWUgPSBzZWxmLl90YXNrCisgICAgICAgIHNlbGYubG9nZmlsZSA9IGxvZ2ZpbGUKKyAgICAgICAgc2VsZi50aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgZXZlbnQuRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fbWVzc2FnZSA9ICJyZWNpcGUgJXM6IHRhc2sgJXM6ICVzIiAlIChkLmdldFZhcigiUEYiLCBUcnVlKSwgdCwgc2VsZi5nZXREaXNwbGF5TmFtZSgpKQorCisgICAgZGVmIGdldFRhc2soc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90YXNrCisKKyAgICBkZWYgc2V0VGFzayhzZWxmLCB0YXNrKToKKyAgICAgICAgc2VsZi5fdGFzayA9IHRhc2sKKworICAgIGRlZiBnZXREaXNwbGF5TmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIGJiLmV2ZW50LmdldE5hbWUoc2VsZilbNDpdCisKKyAgICB0YXNrID0gcHJvcGVydHkoZ2V0VGFzaywgc2V0VGFzaywgTm9uZSwgInRhc2sgcHJvcGVydHkiKQorCitjbGFzcyBUYXNrU3RhcnRlZChUYXNrQmFzZSk6CisgICAgIiIiVGFzayBleGVjdXRpb24gc3RhcnRlZCIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0LCBsb2dmaWxlLCB0YXNrZmxhZ3MsIGQpOgorICAgICAgICBzdXBlcihUYXNrU3RhcnRlZCwgc2VsZikuX19pbml0X18odCwgbG9nZmlsZSwgZCkKKyAgICAgICAgc2VsZi50YXNrZmxhZ3MgPSB0YXNrZmxhZ3MKKworY2xhc3MgVGFza1N1Y2NlZWRlZChUYXNrQmFzZSk6CisgICAgIiIiVGFzayBleGVjdXRpb24gY29tcGxldGVkIiIiCisKK2NsYXNzIFRhc2tGYWlsZWQoVGFza0Jhc2UpOgorICAgICIiIlRhc2sgZXhlY3V0aW9uIGZhaWxlZCIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhc2ssIGxvZ2ZpbGUsIG1ldGFkYXRhLCBlcnJwcmludGVkID0gRmFsc2UpOgorICAgICAgICBzZWxmLmVycnByaW50ZWQgPSBlcnJwcmludGVkCisgICAgICAgIHN1cGVyKFRhc2tGYWlsZWQsIHNlbGYpLl9faW5pdF9fKHRhc2ssIGxvZ2ZpbGUsIG1ldGFkYXRhKQorCitjbGFzcyBUYXNrRmFpbGVkU2lsZW50KFRhc2tCYXNlKToKKyAgICAiIiJUYXNrIGV4ZWN1dGlvbiBmYWlsZWQgKHNpbGVudGx5KSIiIgorICAgIGRlZiBnZXREaXNwbGF5TmFtZShzZWxmKToKKyAgICAgICAgIyBEb24ndCBuZWVkIHRvIHRlbGwgdGhlIHVzZXIgaXQgd2FzIHNpbGVudAorICAgICAgICByZXR1cm4gIkZhaWxlZCIKKworY2xhc3MgVGFza0ludmFsaWQoVGFza0Jhc2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhc2ssIG1ldGFkYXRhKToKKyAgICAgICAgc3VwZXIoVGFza0ludmFsaWQsIHNlbGYpLl9faW5pdF9fKHRhc2ssIE5vbmUsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLl9tZXNzYWdlID0gIk5vIHN1Y2ggdGFzayAnJXMnIiAlIHRhc2sKKworCitjbGFzcyBMb2dUZWUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9nZ2VyLCBvdXRmaWxlKToKKyAgICAgICAgc2VsZi5vdXRmaWxlID0gb3V0ZmlsZQorICAgICAgICBzZWxmLmxvZ2dlciA9IGxvZ2dlcgorICAgICAgICBzZWxmLm5hbWUgPSBzZWxmLm91dGZpbGUubmFtZQorCisgICAgZGVmIHdyaXRlKHNlbGYsIHN0cmluZyk6CisgICAgICAgIHNlbGYubG9nZ2VyLnBsYWluKHN0cmluZykKKyAgICAgICAgc2VsZi5vdXRmaWxlLndyaXRlKHN0cmluZykKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHNlbGYub3V0ZmlsZS5fX2VudGVyX18oKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICpleGNpbmZvKToKKyAgICAgICAgc2VsZi5vdXRmaWxlLl9fZXhpdF9fKCpleGNpbmZvKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxMb2dUZWUgezB9PicuZm9ybWF0KHNlbGYubmFtZSkKKyAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgIHNlbGYub3V0ZmlsZS5mbHVzaCgpCisKK2RlZiBleGVjX2Z1bmMoZnVuYywgZCwgZGlycyA9IE5vbmUpOgorICAgICIiIkV4ZWN1dGUgYSBCQiAnZnVuY3Rpb24nIiIiCisKKyAgICBib2R5ID0gZC5nZXRWYXIoZnVuYywgRmFsc2UpCisgICAgaWYgbm90IGJvZHk6CisgICAgICAgIGlmIGJvZHkgaXMgTm9uZToKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCJGdW5jdGlvbiAlcyBkb2Vzbid0IGV4aXN0IiwgZnVuYykKKyAgICAgICAgcmV0dXJuCisKKyAgICBmbGFncyA9IGQuZ2V0VmFyRmxhZ3MoZnVuYykKKyAgICBjbGVhbmRpcnMgPSBmbGFncy5nZXQoJ2NsZWFuZGlycycpCisgICAgaWYgY2xlYW5kaXJzOgorICAgICAgICBmb3IgY2RpciBpbiBkLmV4cGFuZChjbGVhbmRpcnMpLnNwbGl0KCk6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoY2RpciwgVHJ1ZSkKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihjZGlyKQorCisgICAgaWYgZGlycyBpcyBOb25lOgorICAgICAgICBkaXJzID0gZmxhZ3MuZ2V0KCdkaXJzJykKKyAgICAgICAgaWYgZGlyczoKKyAgICAgICAgICAgIGRpcnMgPSBkLmV4cGFuZChkaXJzKS5zcGxpdCgpCisKKyAgICBpZiBkaXJzOgorICAgICAgICBmb3IgYWRpciBpbiBkaXJzOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGFkaXIpCisgICAgICAgIGFkaXIgPSBkaXJzWy0xXQorICAgIGVsc2U6CisgICAgICAgIGFkaXIgPSBkLmdldFZhcignQicsIFRydWUpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihhZGlyKQorCisgICAgaXNweXRob24gPSBmbGFncy5nZXQoJ3B5dGhvbicpCisKKyAgICBsb2NrZmxhZyA9IGZsYWdzLmdldCgnbG9ja2ZpbGVzJykKKyAgICBpZiBsb2NrZmxhZzoKKyAgICAgICAgbG9ja2ZpbGVzID0gW2YgZm9yIGYgaW4gZC5leHBhbmQobG9ja2ZsYWcpLnNwbGl0KCldCisgICAgZWxzZToKKyAgICAgICAgbG9ja2ZpbGVzID0gTm9uZQorCisgICAgdGVtcGRpciA9IGQuZ2V0VmFyKCdUJywgVHJ1ZSkKKworICAgICMgb3IgZnVuYyBhbGxvd3MgaXRlbXMgdG8gYmUgZXhlY3V0ZWQgb3V0c2lkZSBvZiB0aGUgbm9ybWFsCisgICAgIyB0YXNrIHNldCwgc3VjaCBhcyBidWlsZGhpc3RvcnkKKyAgICB0YXNrID0gZC5nZXRWYXIoJ0JCX1JVTlRBU0snLCBUcnVlKSBvciBmdW5jCisgICAgaWYgdGFzayA9PSBmdW5jOgorICAgICAgICB0YXNrZnVuYyA9IHRhc2sKKyAgICBlbHNlOgorICAgICAgICB0YXNrZnVuYyA9ICIlcy4lcyIgJSAodGFzaywgZnVuYykKKworICAgIHJ1bmZtdCA9IGQuZ2V0VmFyKCdCQl9SVU5GTVQnLCBUcnVlKSBvciAicnVuLntmdW5jfS57cGlkfSIKKyAgICBydW5mbiA9IHJ1bmZtdC5mb3JtYXQodGFza2Z1bmM9dGFza2Z1bmMsIHRhc2s9dGFzaywgZnVuYz1mdW5jLCBwaWQ9b3MuZ2V0cGlkKCkpCisgICAgcnVuZmlsZSA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCBydW5mbikKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKHJ1bmZpbGUpKQorCisgICAgIyBTZXR1cCB0aGUgY291cnRlc3kgbGluayB0byB0aGUgcnVuZm4sIG9ubHkgZm9yIHRhc2tzCisgICAgIyB3ZSBjcmVhdGUgdGhlIGxpbmsgJ2p1c3QnIGJlZm9yZSB0aGUgcnVuIHNjcmlwdCBpcyBjcmVhdGVkCisgICAgIyBpZiB3ZSBjcmVhdGUgaXQgYWZ0ZXIsIGFuZCBpZiB0aGUgcnVuIHNjcmlwdCBmYWlscywgdGhlbiB0aGUKKyAgICAjIGxpbmsgd29uJ3QgYmUgY3JlYXRlZCBhcyBhbiBleGNlcHRpb24gd291bGQgYmUgZmlyZWQuCisgICAgaWYgdGFzayA9PSBmdW5jOgorICAgICAgICBydW5saW5rID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdydW4uezB9Jy5mb3JtYXQodGFzaykpCisgICAgICAgIGlmIHJ1bmxpbms6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUocnVubGluaykKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsocnVuZm4sIHJ1bmxpbmspCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICB3aXRoIGJiLnV0aWxzLmZpbGVzbG9ja2VkKGxvY2tmaWxlcyk6CisgICAgICAgIGlmIGlzcHl0aG9uOgorICAgICAgICAgICAgZXhlY19mdW5jX3B5dGhvbihmdW5jLCBkLCBydW5maWxlLCBjd2Q9YWRpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4ZWNfZnVuY19zaGVsbChmdW5jLCBkLCBydW5maWxlLCBjd2Q9YWRpcikKKworX2Z1bmN0aW9uZm10ID0gIiIiCitkZWYge2Z1bmN0aW9ufShkKToKK3tib2R5fQorCit7ZnVuY3Rpb259KGQpCisiIiIKK2xvZ2Zvcm1hdHRlciA9IGJiLm1zZy5CQkxvZ0Zvcm1hdHRlcigiJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiKQorZGVmIGV4ZWNfZnVuY19weXRob24oZnVuYywgZCwgcnVuZmlsZSwgY3dkPU5vbmUpOgorICAgICIiIkV4ZWN1dGUgYSBweXRob24gQkIgJ2Z1bmN0aW9uJyIiIgorCisgICAgYmJmaWxlID0gZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKQorICAgIGNvZGUgPSBfZnVuY3Rpb25mbXQuZm9ybWF0KGZ1bmN0aW9uPWZ1bmMsIGJvZHk9ZC5nZXRWYXIoZnVuYywgVHJ1ZSkpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShydW5maWxlKSkKKyAgICB3aXRoIG9wZW4ocnVuZmlsZSwgJ3cnKSBhcyBzY3JpcHQ6CisgICAgICAgIGJiLmRhdGEuZW1pdF9mdW5jX3B5dGhvbihmdW5jLCBzY3JpcHQsIGQpCisKKyAgICBpZiBjd2Q6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9sZGRpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgb2xkZGlyID0gTm9uZQorICAgICAgICBvcy5jaGRpcihjd2QpCisKKyAgICBiYi5kZWJ1ZygyLCAiRXhlY3V0aW5nIHB5dGhvbiBmdW5jdGlvbiAlcyIgJSBmdW5jKQorCisgICAgdHJ5OgorICAgICAgICBjb21wID0gdXRpbHMuYmV0dGVyX2NvbXBpbGUoY29kZSwgZnVuYywgYmJmaWxlKQorICAgICAgICB1dGlscy5iZXR0ZXJfZXhlYyhjb21wLCB7ImQiOiBkfSwgY29kZSwgYmJmaWxlKQorICAgIGV4Y2VwdCAoYmIucGFyc2UuU2tpcFJlY2lwZSwgYmIuYnVpbGQuRnVuY0ZhaWxlZCk6CisgICAgICAgIHJhaXNlCisgICAgZXhjZXB0OgorICAgICAgICByYWlzZSBGdW5jRmFpbGVkKGZ1bmMsIE5vbmUpCisgICAgZmluYWxseToKKyAgICAgICAgYmIuZGVidWcoMiwgIlB5dGhvbiBmdW5jdGlvbiAlcyBmaW5pc2hlZCIgJSBmdW5jKQorCisgICAgICAgIGlmIGN3ZCBhbmQgb2xkZGlyOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLmNoZGlyKG9sZGRpcikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworZGVmIHNoZWxsX3RyYXBfY29kZSgpOgorICAgIHJldHVybiAnJycjIS9iaW4vc2hcbgorIyBFbWl0IGEgdXNlZnVsIGRpYWdub3N0aWMgaWYgc29tZXRoaW5nIGZhaWxzOgorYmJfZXhpdF9oYW5kbGVyKCkgeworICAgIHJldD0kPworICAgIGNhc2UgJHJldCBpbgorICAgIDApICA7OworICAgICopICBjYXNlICRCQVNIX1ZFUlNJT04gaW4KKyAgICAgICAgIiIpICAgZWNobyAiV0FSTklORzogZXhpdCBjb2RlICRyZXQgZnJvbSBhIHNoZWxsIGNvbW1hbmQuIjs7CisgICAgICAgICopICAgIGVjaG8gIldBUk5JTkc6ICR7QkFTSF9TT1VSQ0VbMF19OiR7QkFTSF9MSU5FTk9bMF19IGV4aXQgJHJldCBmcm9tCisgIFwiJEJBU0hfQ09NTUFORFwiIjs7CisgICAgICAgIGVzYWMKKyAgICAgICAgZXhpdCAkcmV0CisgICAgZXNhYworfQordHJhcCAnYmJfZXhpdF9oYW5kbGVyJyAwCitzZXQgLWUKKycnJworCitkZWYgZXhlY19mdW5jX3NoZWxsKGZ1bmMsIGQsIHJ1bmZpbGUsIGN3ZD1Ob25lKToKKyAgICAiIiJFeGVjdXRlIGEgc2hlbGwgZnVuY3Rpb24gZnJvbSB0aGUgbWV0YWRhdGEKKworICAgIE5vdGUgb24gZGlyZWN0b3J5IGJlaGF2aW9yLiAgVGhlICdkaXJzJyB2YXJmbGFnIHNob3VsZCBjb250YWluIGEgbGlzdAorICAgIG9mIHRoZSBkaXJlY3RvcmllcyB5b3UgbmVlZCBjcmVhdGVkIHByaW9yIHRvIGV4ZWN1dGlvbi4gIFRoZSBsYXN0CisgICAgaXRlbSBpbiB0aGUgbGlzdCBpcyB3aGVyZSB3ZSB3aWxsIGNoZGlyL2NkIHRvLgorICAgICIiIgorCisgICAgIyBEb24ndCBsZXQgdGhlIGVtaXR0ZWQgc2hlbGwgc2NyaXB0IG92ZXJyaWRlIFBXRAorICAgIGQuZGVsVmFyRmxhZygnUFdEJywgJ2V4cG9ydCcpCisKKyAgICB3aXRoIG9wZW4ocnVuZmlsZSwgJ3cnKSBhcyBzY3JpcHQ6CisgICAgICAgIHNjcmlwdC53cml0ZShzaGVsbF90cmFwX2NvZGUoKSkKKworICAgICAgICBiYi5kYXRhLmVtaXRfZnVuYyhmdW5jLCBzY3JpcHQsIGQpCisKKyAgICAgICAgaWYgYmIubXNnLmxvZ2dlclZlcmJvc2VMb2dzOgorICAgICAgICAgICAgc2NyaXB0LndyaXRlKCJzZXQgLXhcbiIpCisgICAgICAgIGlmIGN3ZDoKKyAgICAgICAgICAgIHNjcmlwdC53cml0ZSgiY2QgJyVzJ1xuIiAlIGN3ZCkKKyAgICAgICAgc2NyaXB0LndyaXRlKCIlc1xuIiAlIGZ1bmMpCisgICAgICAgIHNjcmlwdC53cml0ZSgnJycKKyMgY2xlYW51cAorcmV0PSQ/Cit0cmFwICcnIDAKK2V4aXQgJHJldAorJycnKQorCisgICAgb3MuY2htb2QocnVuZmlsZSwgMDc3NSkKKworICAgIGNtZCA9IHJ1bmZpbGUKKyAgICBpZiBkLmdldFZhckZsYWcoZnVuYywgJ2Zha2Vyb290Jyk6CisgICAgICAgIGZha2Vyb290Y21kID0gZC5nZXRWYXIoJ0ZBS0VST09UJywgVHJ1ZSkKKyAgICAgICAgaWYgZmFrZXJvb3RjbWQ6CisgICAgICAgICAgICBjbWQgPSBbZmFrZXJvb3RjbWQsIHJ1bmZpbGVdCisKKyAgICBpZiBiYi5tc2cubG9nZ2VyRGVmYXVsdFZlcmJvc2U6CisgICAgICAgIGxvZ2ZpbGUgPSBMb2dUZWUobG9nZ2VyLCBzeXMuc3Rkb3V0KQorICAgIGVsc2U6CisgICAgICAgIGxvZ2ZpbGUgPSBzeXMuc3Rkb3V0CisKKyAgICBkZWYgcmVhZGZpZm8oZGF0YSk6CisgICAgICAgIGxpbmVzID0gZGF0YS5zcGxpdCgnXDAnKQorICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIHNwbGl0dmFsID0gbGluZS5zcGxpdCgnICcsIDEpCisgICAgICAgICAgICBjbWQgPSBzcGxpdHZhbFswXQorICAgICAgICAgICAgaWYgbGVuKHNwbGl0dmFsKSA+IDE6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBzcGxpdHZhbFsxXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICcnCisgICAgICAgICAgICBpZiBjbWQgPT0gJ2JicGxhaW4nOgorICAgICAgICAgICAgICAgIGJiLnBsYWluKHZhbHVlKQorICAgICAgICAgICAgZWxpZiBjbWQgPT0gJ2Jibm90ZSc6CisgICAgICAgICAgICAgICAgYmIubm90ZSh2YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgY21kID09ICdiYndhcm4nOgorICAgICAgICAgICAgICAgIGJiLndhcm4odmFsdWUpCisgICAgICAgICAgICBlbGlmIGNtZCA9PSAnYmJlcnJvcic6CisgICAgICAgICAgICAgICAgYmIuZXJyb3IodmFsdWUpCisgICAgICAgICAgICBlbGlmIGNtZCA9PSAnYmJmYXRhbCc6CisgICAgICAgICAgICAgICAgIyBUaGUgY2FsbGVyIHdpbGwgY2FsbCBleGl0IHRoZW1zZWx2ZXMsIHNvIGJiLmVycm9yKCkgaXMKKyAgICAgICAgICAgICAgICAjIHdoYXQgd2Ugd2FudCBoZXJlIHJhdGhlciB0aGFuIGJiLmZhdGFsKCkKKyAgICAgICAgICAgICAgICBiYi5lcnJvcih2YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgY21kID09ICdiYmZhdGFsX2xvZyc6CisgICAgICAgICAgICAgICAgYmIuZXJyb3IodmFsdWUsIGZvcmNlbG9nPVRydWUpCisgICAgICAgICAgICBlbGlmIGNtZCA9PSAnYmJkZWJ1Zyc6CisgICAgICAgICAgICAgICAgc3BsaXR2YWwgPSB2YWx1ZS5zcGxpdCgnICcsIDEpCisgICAgICAgICAgICAgICAgbGV2ZWwgPSBpbnQoc3BsaXR2YWxbMF0pCisgICAgICAgICAgICAgICAgdmFsdWUgPSBzcGxpdHZhbFsxXQorICAgICAgICAgICAgICAgIGJiLmRlYnVnKGxldmVsLCB2YWx1ZSkKKworICAgIHRlbXBkaXIgPSBkLmdldFZhcignVCcsIFRydWUpCisgICAgZmlmb3BhdGggPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ2ZpZm8uJXMnICUgb3MuZ2V0cGlkKCkpCisgICAgaWYgb3MucGF0aC5leGlzdHMoZmlmb3BhdGgpOgorICAgICAgICBvcy51bmxpbmsoZmlmb3BhdGgpCisgICAgb3MubWtmaWZvKGZpZm9wYXRoKQorICAgIHdpdGggb3BlbihmaWZvcGF0aCwgJ3IrJykgYXMgZmlmbzoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIuZGVidWcoMiwgIkV4ZWN1dGluZyBzaGVsbCBmdW5jdGlvbiAlcyIgJSBmdW5jKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG9zLmRldm51bGwsICdyKycpIGFzIHN0ZGluOgorICAgICAgICAgICAgICAgICAgICBiYi5wcm9jZXNzLnJ1bihjbWQsIHNoZWxsPUZhbHNlLCBzdGRpbj1zdGRpbiwgbG9nPWxvZ2ZpbGUsIGV4dHJhZmlsZXM9WyhmaWZvLHJlYWRmaWZvKV0pCisgICAgICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5DbWRFcnJvcjoKKyAgICAgICAgICAgICAgICBsb2dmbiA9IGQuZ2V0VmFyKCdCQl9MT0dGSUxFJywgVHJ1ZSkKKyAgICAgICAgICAgICAgICByYWlzZSBGdW5jRmFpbGVkKGZ1bmMsIGxvZ2ZuKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MudW5saW5rKGZpZm9wYXRoKQorCisgICAgYmIuZGVidWcoMiwgIlNoZWxsIGZ1bmN0aW9uICVzIGZpbmlzaGVkIiAlIGZ1bmMpCisKK2RlZiBfdGFza19kYXRhKGZuLCB0YXNrLCBkKToKKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdCQl9GSUxFTkFNRScsIGZuKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0JCX0NVUlJFTlRUQVNLJywgdGFza1szOl0pCisgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgJ3Rhc2stJXM6JXMnICUKKyAgICAgICAgICAgICAgICAgICAgICh0YXNrWzM6XS5yZXBsYWNlKCdfJywgJy0nKSwgZC5nZXRWYXIoJ09WRVJSSURFUycsIEZhbHNlKSkpCisgICAgbG9jYWxkYXRhLmZpbmFsaXplKCkKKyAgICBiYi5kYXRhLmV4cGFuZEtleXMobG9jYWxkYXRhKQorICAgIHJldHVybiBsb2NhbGRhdGEKKworZGVmIF9leGVjX3Rhc2soZm4sIHRhc2ssIGQsIHF1aWV0ZXJyKToKKyAgICAiIiJFeGVjdXRlIGEgQkIgJ3Rhc2snCisKKyAgICBFeGVjdXRpb24gb2YgYSB0YXNrIGludm9sdmVzIGEgYml0IG1vcmUgc2V0dXAgdGhhbiBleGVjdXRpbmcgYSBmdW5jdGlvbiwKKyAgICBydW5uaW5nIGl0IHdpdGggaXRzIG93biBsb2NhbCBtZXRhZGF0YSwgYW5kIHdpdGggc29tZSB1c2VmdWwgdmFyaWFibGVzIHNldC4KKyAgICAiIiIKKyAgICBpZiBub3QgZC5nZXRWYXJGbGFnKHRhc2ssICd0YXNrJyk6CisgICAgICAgIGV2ZW50LmZpcmUoVGFza0ludmFsaWQodGFzaywgZCksIGQpCisgICAgICAgIGxvZ2dlci5lcnJvcigiTm8gc3VjaCB0YXNrOiAlcyIgJSB0YXNrKQorICAgICAgICByZXR1cm4gMQorCisgICAgbG9nZ2VyLmRlYnVnKDEsICJFeGVjdXRpbmcgdGFzayAlcyIsIHRhc2spCisKKyAgICBsb2NhbGRhdGEgPSBfdGFza19kYXRhKGZuLCB0YXNrLCBkKQorICAgIHRlbXBkaXIgPSBsb2NhbGRhdGEuZ2V0VmFyKCdUJywgVHJ1ZSkKKyAgICBpZiBub3QgdGVtcGRpcjoKKyAgICAgICAgYmIuZmF0YWwoIlQgdmFyaWFibGUgbm90IHNldCwgdW5hYmxlIHRvIGJ1aWxkIikKKworICAgICMgQ2hhbmdlIG5pY2UgbGV2ZWwgaWYgd2UncmUgYXNrZWQgdG8KKyAgICBuaWNlID0gbG9jYWxkYXRhLmdldFZhcigiQkJfVEFTS19OSUNFX0xFVkVMIiwgVHJ1ZSkKKyAgICBpZiBuaWNlOgorICAgICAgICBjdXJuaWNlID0gb3MubmljZSgwKQorICAgICAgICBuaWNlID0gaW50KG5pY2UpIC0gY3VybmljZQorICAgICAgICBuZXduaWNlID0gb3MubmljZShuaWNlKQorICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJlbmljZSB0byAlcyAiICUgbmV3bmljZSkKKworICAgIGJiLnV0aWxzLm1rZGlyaGllcih0ZW1wZGlyKQorCisgICAgIyBEZXRlcm1pbmUgdGhlIGxvZ2ZpbGUgdG8gZ2VuZXJhdGUKKyAgICBsb2dmbXQgPSBsb2NhbGRhdGEuZ2V0VmFyKCdCQl9MT0dGTVQnLCBUcnVlKSBvciAnbG9nLnt0YXNrfS57cGlkfScKKyAgICBsb2diYXNlID0gbG9nZm10LmZvcm1hdCh0YXNrPXRhc2ssIHBpZD1vcy5nZXRwaWQoKSkKKworICAgICMgRG9jdW1lbnQgdGhlIG9yZGVyIG9mIHRoZSB0YXNrcy4uLgorICAgIGxvZ29yZGVyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdsb2cudGFza19vcmRlcicpCisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4obG9nb3JkZXIsICdhJykgYXMgbG9nb3JkZXJmaWxlOgorICAgICAgICAgICAgbG9nb3JkZXJmaWxlLndyaXRlKCd7MH0gKHsxfSk6IHsyfVxuJy5mb3JtYXQodGFzaywgb3MuZ2V0cGlkKCksIGxvZ2Jhc2UpKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCJPcGVuaW5nIGxvZyBmaWxlICclcyciLCBsb2dvcmRlcikKKyAgICAgICAgcGFzcworCisgICAgIyBTZXR1cCB0aGUgY291cnRlc3kgbGluayB0byB0aGUgbG9nZm4KKyAgICBsb2dsaW5rID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdsb2cuezB9Jy5mb3JtYXQodGFzaykpCisgICAgbG9nZm4gPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgbG9nYmFzZSkKKyAgICBpZiBsb2dsaW5rOgorICAgICAgICBiYi51dGlscy5yZW1vdmUobG9nbGluaykKKworICAgICAgICB0cnk6CisgICAgICAgICAgIG9zLnN5bWxpbmsobG9nYmFzZSwgbG9nbGluaykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgIHBhc3MKKworICAgIHByZWZ1bmNzID0gbG9jYWxkYXRhLmdldFZhckZsYWcodGFzaywgJ3ByZWZ1bmNzJywgZXhwYW5kPVRydWUpCisgICAgcG9zdGZ1bmNzID0gbG9jYWxkYXRhLmdldFZhckZsYWcodGFzaywgJ3Bvc3RmdW5jcycsIGV4cGFuZD1UcnVlKQorCisgICAgY2xhc3MgRXJyb3JDaGVja0hhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi50cmlnZ2VyZWQgPSBGYWxzZQorICAgICAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fKHNlbGYsIGxvZ2dpbmcuRVJST1IpCisgICAgICAgIGRlZiBlbWl0KHNlbGYsIHJlY29yZCk6CisgICAgICAgICAgICBpZiBnZXRhdHRyKHJlY29yZCwgJ2ZvcmNlbG9nJywgRmFsc2UpOgorICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcmVkID0gRmFsc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyZWQgPSBUcnVlCisKKyAgICAjIEhhbmRsZSBsb2dmaWxlcworICAgIHNpID0gb3BlbignL2Rldi9udWxsJywgJ3InKQorICAgIHRyeToKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShsb2dmbikpCisgICAgICAgIGxvZ2ZpbGUgPSBvcGVuKGxvZ2ZuLCAndycpCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIGxvZ2dlci5leGNlcHRpb24oIk9wZW5pbmcgbG9nIGZpbGUgJyVzJyIsIGxvZ2ZuKQorICAgICAgICBwYXNzCisKKyAgICAjIER1cCB0aGUgZXhpc3RpbmcgZmRzIHNvIHdlIGRvbnQgbG9zZSB0aGVtCisgICAgb3NpID0gW29zLmR1cChzeXMuc3RkaW4uZmlsZW5vKCkpLCBzeXMuc3RkaW4uZmlsZW5vKCldCisgICAgb3NvID0gW29zLmR1cChzeXMuc3Rkb3V0LmZpbGVubygpKSwgc3lzLnN0ZG91dC5maWxlbm8oKV0KKyAgICBvc2UgPSBbb3MuZHVwKHN5cy5zdGRlcnIuZmlsZW5vKCkpLCBzeXMuc3RkZXJyLmZpbGVubygpXQorCisgICAgIyBSZXBsYWNlIHRob3NlIGZkcyB3aXRoIG91ciBvd24KKyAgICBvcy5kdXAyKHNpLmZpbGVubygpLCBvc2lbMV0pCisgICAgb3MuZHVwMihsb2dmaWxlLmZpbGVubygpLCBvc29bMV0pCisgICAgb3MuZHVwMihsb2dmaWxlLmZpbGVubygpLCBvc2VbMV0pCisKKyAgICAjIEVuc3VyZSBQeXRob24gbG9nZ2luZyBnb2VzIHRvIHRoZSBsb2dmaWxlCisgICAgaGFuZGxlciA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihsb2dmaWxlKQorICAgIGhhbmRsZXIuc2V0Rm9ybWF0dGVyKGxvZ2Zvcm1hdHRlcikKKyAgICAjIEFsd2F5cyBlbmFibGUgZnVsbCBkZWJ1ZyBvdXRwdXQgaW50byB0YXNrIGxvZ2ZpbGVzCisgICAgaGFuZGxlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHIC0gMikKKyAgICBiYmxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCisKKyAgICBlcnJjaGsgPSBFcnJvckNoZWNrSGFuZGxlcigpCisgICAgYmJsb2dnZXIuYWRkSGFuZGxlcihlcnJjaGspCisKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdCQl9MT0dGSUxFJywgbG9nZm4pCisgICAgbG9jYWxkYXRhLnNldFZhcignQkJfUlVOVEFTSycsIHRhc2spCisKKyAgICBmbGFncyA9IGxvY2FsZGF0YS5nZXRWYXJGbGFncyh0YXNrKQorCisgICAgZXZlbnQuZmlyZShUYXNrU3RhcnRlZCh0YXNrLCBsb2dmbiwgZmxhZ3MsIGxvY2FsZGF0YSksIGxvY2FsZGF0YSkKKyAgICB0cnk6CisgICAgICAgIGZvciBmdW5jIGluIChwcmVmdW5jcyBvciAnJykuc3BsaXQoKToKKyAgICAgICAgICAgIGV4ZWNfZnVuYyhmdW5jLCBsb2NhbGRhdGEpCisgICAgICAgIGV4ZWNfZnVuYyh0YXNrLCBsb2NhbGRhdGEpCisgICAgICAgIGZvciBmdW5jIGluIChwb3N0ZnVuY3Mgb3IgJycpLnNwbGl0KCk6CisgICAgICAgICAgICBleGVjX2Z1bmMoZnVuYywgbG9jYWxkYXRhKQorICAgIGV4Y2VwdCBGdW5jRmFpbGVkIGFzIGV4YzoKKyAgICAgICAgaWYgcXVpZXRlcnI6CisgICAgICAgICAgICBldmVudC5maXJlKFRhc2tGYWlsZWRTaWxlbnQodGFzaywgbG9nZm4sIGxvY2FsZGF0YSksIGxvY2FsZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVycnByaW50ZWQgPSBlcnJjaGsudHJpZ2dlcmVkCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGV4YykpCisgICAgICAgICAgICBldmVudC5maXJlKFRhc2tGYWlsZWQodGFzaywgbG9nZm4sIGxvY2FsZGF0YSwgZXJycHJpbnRlZCksIGxvY2FsZGF0YSkKKyAgICAgICAgcmV0dXJuIDEKKyAgICBmaW5hbGx5OgorICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisKKyAgICAgICAgYmJsb2dnZXIucmVtb3ZlSGFuZGxlcihoYW5kbGVyKQorCisgICAgICAgICMgUmVzdG9yZSB0aGUgYmFja3VwIGZkcworICAgICAgICBvcy5kdXAyKG9zaVswXSwgb3NpWzFdKQorICAgICAgICBvcy5kdXAyKG9zb1swXSwgb3NvWzFdKQorICAgICAgICBvcy5kdXAyKG9zZVswXSwgb3NlWzFdKQorCisgICAgICAgICMgQ2xvc2UgdGhlIGJhY2t1cCBmZHMKKyAgICAgICAgb3MuY2xvc2Uob3NpWzBdKQorICAgICAgICBvcy5jbG9zZShvc29bMF0pCisgICAgICAgIG9zLmNsb3NlKG9zZVswXSkKKyAgICAgICAgc2kuY2xvc2UoKQorCisgICAgICAgIGxvZ2ZpbGUuY2xvc2UoKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsb2dmbikgYW5kIG9zLnBhdGguZ2V0c2l6ZShsb2dmbikgPT0gMDoKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiWmVybyBzaXplIGxvZ2ZuICVzLCByZW1vdmluZyIsIGxvZ2ZuKQorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKGxvZ2ZuKQorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKGxvZ2xpbmspCisgICAgZXZlbnQuZmlyZShUYXNrU3VjY2VlZGVkKHRhc2ssIGxvZ2ZuLCBsb2NhbGRhdGEpLCBsb2NhbGRhdGEpCisKKyAgICBpZiBub3QgbG9jYWxkYXRhLmdldFZhckZsYWcodGFzaywgJ25vc3RhbXAnKSBhbmQgbm90IGxvY2FsZGF0YS5nZXRWYXJGbGFnKHRhc2ssICdzZWxmc3RhbXAnKToKKyAgICAgICAgbWFrZV9zdGFtcCh0YXNrLCBsb2NhbGRhdGEpCisKKyAgICByZXR1cm4gMAorCitkZWYgZXhlY190YXNrKGZuLCB0YXNrLCBkLCBwcm9maWxlID0gRmFsc2UpOgorICAgIHRyeToKKyAgICAgICAgcXVpZXRlcnIgPSBGYWxzZQorICAgICAgICBpZiBkLmdldFZhckZsYWcodGFzaywgInF1aWV0ZXJyb3JzIikgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBxdWlldGVyciA9IFRydWUKKworICAgICAgICBpZiBwcm9maWxlOgorICAgICAgICAgICAgcHJvZm5hbWUgPSAicHJvZmlsZS0lcy5sb2ciICUgKGQuZ2V0VmFyKCJQTiIsIFRydWUpICsgIi0iICsgdGFzaykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbXBvcnQgY1Byb2ZpbGUgYXMgcHJvZmlsZQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGltcG9ydCBwcm9maWxlCisgICAgICAgICAgICBwcm9mID0gcHJvZmlsZS5Qcm9maWxlKCkKKyAgICAgICAgICAgIHJldCA9IHByb2ZpbGUuUHJvZmlsZS5ydW5jYWxsKHByb2YsIF9leGVjX3Rhc2ssIGZuLCB0YXNrLCBkLCBxdWlldGVycikKKyAgICAgICAgICAgIHByb2YuZHVtcF9zdGF0cyhwcm9mbmFtZSkKKyAgICAgICAgICAgIGJiLnV0aWxzLnByb2Nlc3NfcHJvZmlsZWxvZyhwcm9mbmFtZSkKKworICAgICAgICAgICAgcmV0dXJuIHJldAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIF9leGVjX3Rhc2soZm4sIHRhc2ssIGQsIHF1aWV0ZXJyKQorCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgZnJvbSB0cmFjZWJhY2sgaW1wb3J0IGZvcm1hdF9leGMKKyAgICAgICAgaWYgbm90IHF1aWV0ZXJyOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJCdWlsZCBvZiAlcyBmYWlsZWQiICUgKHRhc2spKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGZvcm1hdF9leGMoKSkKKyAgICAgICAgICAgIGZhaWxlZGV2ZW50ID0gVGFza0ZhaWxlZCh0YXNrLCBOb25lLCBkLCBUcnVlKQorICAgICAgICAgICAgZXZlbnQuZmlyZShmYWlsZWRldmVudCwgZCkKKyAgICAgICAgcmV0dXJuIDEKKworZGVmIHN0YW1wX2ludGVybmFsKHRhc2tuYW1lLCBkLCBmaWxlX25hbWUsIGJhc2Vvbmx5PUZhbHNlKToKKyAgICAiIiIKKyAgICBJbnRlcm5hbCBzdGFtcCBoZWxwZXIgZnVuY3Rpb24KKyAgICBNYWtlcyBzdXJlIHRoZSBzdGFtcCBkaXJlY3RvcnkgZXhpc3RzCisgICAgUmV0dXJucyB0aGUgc3RhbXAgcGF0aCtmaWxlbmFtZQorCisgICAgSW4gdGhlIGJpdGJha2UgY29yZSwgZCBjYW4gYmUgYSBDYWNoZURhdGEgYW5kIGZpbGVfbmFtZSB3aWxsIGJlIHNldC4KKyAgICBXaGVuIGNhbGxlZCBpbiB0YXNrIGNvbnRleHQsIGQgd2lsbCBiZSBhIGRhdGEgc3RvcmUsIGZpbGVfbmFtZSB3aWxsIG5vdCBiZSBzZXQKKyAgICAiIiIKKyAgICB0YXNrZmxhZ25hbWUgPSB0YXNrbmFtZQorICAgIGlmIHRhc2tuYW1lLmVuZHN3aXRoKCJfc2V0c2NlbmUiKSBhbmQgdGFza25hbWUgIT0gImRvX3NldHNjZW5lIjoKKyAgICAgICAgdGFza2ZsYWduYW1lID0gdGFza25hbWUucmVwbGFjZSgiX3NldHNjZW5lIiwgIiIpCisKKyAgICBpZiBmaWxlX25hbWU6CisgICAgICAgIHN0YW1wID0gZC5zdGFtcF9iYXNlW2ZpbGVfbmFtZV0uZ2V0KHRhc2tmbGFnbmFtZSkgb3IgZC5zdGFtcFtmaWxlX25hbWVdCisgICAgICAgIGV4dHJhaW5mbyA9IGQuc3RhbXBfZXh0cmFpbmZvW2ZpbGVfbmFtZV0uZ2V0KHRhc2tmbGFnbmFtZSkgb3IgIiIKKyAgICBlbHNlOgorICAgICAgICBzdGFtcCA9IGQuZ2V0VmFyRmxhZyh0YXNrZmxhZ25hbWUsICdzdGFtcC1iYXNlJywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ1NUQU1QJywgVHJ1ZSkKKyAgICAgICAgZmlsZV9uYW1lID0gZC5nZXRWYXIoJ0JCX0ZJTEVOQU1FJywgVHJ1ZSkKKyAgICAgICAgZXh0cmFpbmZvID0gZC5nZXRWYXJGbGFnKHRhc2tmbGFnbmFtZSwgJ3N0YW1wLWV4dHJhLWluZm8nLCBUcnVlKSBvciAiIgorCisgICAgaWYgYmFzZW9ubHk6CisgICAgICAgIHJldHVybiBzdGFtcAorCisgICAgaWYgbm90IHN0YW1wOgorICAgICAgICByZXR1cm4KKworICAgIHN0YW1wID0gYmIucGFyc2Uuc2lnZ2VuLnN0YW1wZmlsZShzdGFtcCwgZmlsZV9uYW1lLCB0YXNrbmFtZSwgZXh0cmFpbmZvKQorCisgICAgc3RhbXBkaXIgPSBvcy5wYXRoLmRpcm5hbWUoc3RhbXApCisgICAgaWYgY2FjaGVkX210aW1lX25vZXJyb3Ioc3RhbXBkaXIpID09IDA6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzdGFtcGRpcikKKworICAgIHJldHVybiBzdGFtcAorCitkZWYgc3RhbXBfY2xlYW5tYXNrX2ludGVybmFsKHRhc2tuYW1lLCBkLCBmaWxlX25hbWUpOgorICAgICIiIgorICAgIEludGVybmFsIHN0YW1wIGhlbHBlciBmdW5jdGlvbiB0byBnZW5lcmF0ZSBzdGFtcCBjbGVhbmluZyBtYXNrCisgICAgUmV0dXJucyB0aGUgc3RhbXAgcGF0aCtmaWxlbmFtZQorCisgICAgSW4gdGhlIGJpdGJha2UgY29yZSwgZCBjYW4gYmUgYSBDYWNoZURhdGEgYW5kIGZpbGVfbmFtZSB3aWxsIGJlIHNldC4KKyAgICBXaGVuIGNhbGxlZCBpbiB0YXNrIGNvbnRleHQsIGQgd2lsbCBiZSBhIGRhdGEgc3RvcmUsIGZpbGVfbmFtZSB3aWxsIG5vdCBiZSBzZXQKKyAgICAiIiIKKyAgICB0YXNrZmxhZ25hbWUgPSB0YXNrbmFtZQorICAgIGlmIHRhc2tuYW1lLmVuZHN3aXRoKCJfc2V0c2NlbmUiKSBhbmQgdGFza25hbWUgIT0gImRvX3NldHNjZW5lIjoKKyAgICAgICAgdGFza2ZsYWduYW1lID0gdGFza25hbWUucmVwbGFjZSgiX3NldHNjZW5lIiwgIiIpCisKKyAgICBpZiBmaWxlX25hbWU6CisgICAgICAgIHN0YW1wID0gZC5zdGFtcF9iYXNlX2NsZWFuW2ZpbGVfbmFtZV0uZ2V0KHRhc2tmbGFnbmFtZSkgb3IgZC5zdGFtcGNsZWFuW2ZpbGVfbmFtZV0KKyAgICAgICAgZXh0cmFpbmZvID0gZC5zdGFtcF9leHRyYWluZm9bZmlsZV9uYW1lXS5nZXQodGFza2ZsYWduYW1lKSBvciAiIgorICAgIGVsc2U6CisgICAgICAgIHN0YW1wID0gZC5nZXRWYXJGbGFnKHRhc2tmbGFnbmFtZSwgJ3N0YW1wLWJhc2UtY2xlYW4nLCBUcnVlKSBvciBkLmdldFZhcignU1RBTVBDTEVBTicsIFRydWUpCisgICAgICAgIGZpbGVfbmFtZSA9IGQuZ2V0VmFyKCdCQl9GSUxFTkFNRScsIFRydWUpCisgICAgICAgIGV4dHJhaW5mbyA9IGQuZ2V0VmFyRmxhZyh0YXNrZmxhZ25hbWUsICdzdGFtcC1leHRyYS1pbmZvJywgVHJ1ZSkgb3IgIiIKKworICAgIGlmIG5vdCBzdGFtcDoKKyAgICAgICAgcmV0dXJuIFtdCisKKyAgICBjbGVhbm1hc2sgPSBiYi5wYXJzZS5zaWdnZW4uc3RhbXBjbGVhbm1hc2soc3RhbXAsIGZpbGVfbmFtZSwgdGFza25hbWUsIGV4dHJhaW5mbykKKworICAgIHJldHVybiBbY2xlYW5tYXNrLCBjbGVhbm1hc2sucmVwbGFjZSh0YXNrZmxhZ25hbWUsIHRhc2tmbGFnbmFtZSArICJfc2V0c2NlbmUiKV0KKworZGVmIG1ha2Vfc3RhbXAodGFzaywgZCwgZmlsZV9uYW1lID0gTm9uZSk6CisgICAgIiIiCisgICAgQ3JlYXRlcy91cGRhdGVzIGEgc3RhbXAgZm9yIGEgZ2l2ZW4gdGFzaworICAgIChkIGNhbiBiZSBhIGRhdGEgZGljdCBvciBkYXRhQ2FjaGUpCisgICAgIiIiCisgICAgY2xlYW5tYXNrID0gc3RhbXBfY2xlYW5tYXNrX2ludGVybmFsKHRhc2ssIGQsIGZpbGVfbmFtZSkKKyAgICBmb3IgbWFzayBpbiBjbGVhbm1hc2s6CisgICAgICAgIGZvciBuYW1lIGluIGdsb2IuZ2xvYihtYXNrKToKKyAgICAgICAgICAgICMgUHJlc2VydmUgc2lnZGF0YSBmaWxlcyBpbiB0aGUgc3RhbXBzIGRpcmVjdG9yeQorICAgICAgICAgICAgaWYgInNpZ2RhdGEiIGluIG5hbWU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICMgUHJlc2VydmUgdGFpbnQgZmlsZXMgaW4gdGhlIHN0YW1wcyBkaXJlY3RvcnkKKyAgICAgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJy50YWludCcpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKworICAgIHN0YW1wID0gc3RhbXBfaW50ZXJuYWwodGFzaywgZCwgZmlsZV9uYW1lKQorICAgICMgUmVtb3ZlIHRoZSBmaWxlIGFuZCByZWNyZWF0ZSB0byBmb3JjZSB0aW1lc3RhbXAKKyAgICAjIGNoYW5nZSBvbiBicm9rZW4gTkZTIGZpbGVzeXN0ZW1zCisgICAgaWYgc3RhbXA6CisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzdGFtcCkKKyAgICAgICAgb3BlbihzdGFtcCwgInciKS5jbG9zZSgpCisKKyAgICAjIElmIHdlJ3JlIGluIHRhc2sgY29udGV4dCwgd3JpdGUgb3V0IGEgc2lnbmF0dXJlIGZpbGUgZm9yIGVhY2ggdGFzaworICAgICMgYXMgaXQgY29tcGxldGVzCisgICAgaWYgbm90IHRhc2suZW5kc3dpdGgoIl9zZXRzY2VuZSIpIGFuZCB0YXNrICE9ICJkb19zZXRzY2VuZSIgYW5kIG5vdCBmaWxlX25hbWU6CisgICAgICAgIHN0YW1wYmFzZSA9IHN0YW1wX2ludGVybmFsKHRhc2ssIGQsIE5vbmUsIFRydWUpCisgICAgICAgIGZpbGVfbmFtZSA9IGQuZ2V0VmFyKCdCQl9GSUxFTkFNRScsIFRydWUpCisgICAgICAgIGJiLnBhcnNlLnNpZ2dlbi5kdW1wX3NpZ3Rhc2soZmlsZV9uYW1lLCB0YXNrLCBzdGFtcGJhc2UsIFRydWUpCisKK2RlZiBkZWxfc3RhbXAodGFzaywgZCwgZmlsZV9uYW1lID0gTm9uZSk6CisgICAgIiIiCisgICAgUmVtb3ZlcyBhIHN0YW1wIGZvciBhIGdpdmVuIHRhc2sKKyAgICAoZCBjYW4gYmUgYSBkYXRhIGRpY3Qgb3IgZGF0YUNhY2hlKQorICAgICIiIgorICAgIHN0YW1wID0gc3RhbXBfaW50ZXJuYWwodGFzaywgZCwgZmlsZV9uYW1lKQorICAgIGJiLnV0aWxzLnJlbW92ZShzdGFtcCkKKworZGVmIHdyaXRlX3RhaW50KHRhc2ssIGQsIGZpbGVfbmFtZSA9IE5vbmUpOgorICAgICIiIgorICAgIENyZWF0ZXMgYSAidGFpbnQiIGZpbGUgd2hpY2ggd2lsbCBmb3JjZSB0aGUgc3BlY2lmaWVkIHRhc2sgYW5kIGl0cworICAgIGRlcGVuZGVudHMgdG8gYmUgcmUtcnVuIHRoZSBuZXh0IHRpbWUgYnkgaW5mbHVlbmNpbmcgdGhlIHZhbHVlIG9mIGl0cworICAgIHRhc2toYXNoLgorICAgIChkIGNhbiBiZSBhIGRhdGEgZGljdCBvciBkYXRhQ2FjaGUpCisgICAgIiIiCisgICAgaW1wb3J0IHV1aWQKKyAgICBpZiBmaWxlX25hbWU6CisgICAgICAgIHRhaW50Zm4gPSBkLnN0YW1wW2ZpbGVfbmFtZV0gKyAnLicgKyB0YXNrICsgJy50YWludCcKKyAgICBlbHNlOgorICAgICAgICB0YWludGZuID0gZC5nZXRWYXIoJ1NUQU1QJywgVHJ1ZSkgKyAnLicgKyB0YXNrICsgJy50YWludCcKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKHRhaW50Zm4pKQorICAgICMgVGhlIHNwZWNpZmljIGNvbnRlbnQgb2YgdGhlIHRhaW50IGZpbGUgaXMgbm90IHJlYWxseSBpbXBvcnRhbnQsCisgICAgIyB3ZSBqdXN0IG5lZWQgaXQgdG8gYmUgcmFuZG9tLCBzbyBhIHJhbmRvbSBVVUlEIGlzIHVzZWQKKyAgICB3aXRoIG9wZW4odGFpbnRmbiwgJ3cnKSBhcyB0YWludGY6CisgICAgICAgIHRhaW50Zi53cml0ZShzdHIodXVpZC51dWlkNCgpKSkKKworZGVmIHN0YW1wZmlsZSh0YXNrbmFtZSwgZCwgZmlsZV9uYW1lID0gTm9uZSk6CisgICAgIiIiCisgICAgUmV0dXJuIHRoZSBzdGFtcCBmb3IgYSBnaXZlbiB0YXNrCisgICAgKGQgY2FuIGJlIGEgZGF0YSBkaWN0IG9yIGRhdGFDYWNoZSkKKyAgICAiIiIKKyAgICByZXR1cm4gc3RhbXBfaW50ZXJuYWwodGFza25hbWUsIGQsIGZpbGVfbmFtZSkKKworZGVmIGFkZF90YXNrcyh0YXNrbGlzdCwgZCk6CisgICAgdGFza19kZXBzID0gZC5nZXRWYXIoJ190YXNrX2RlcHMnLCBGYWxzZSkKKyAgICBpZiBub3QgdGFza19kZXBzOgorICAgICAgICB0YXNrX2RlcHMgPSB7fQorICAgIGlmIG5vdCAndGFza3MnIGluIHRhc2tfZGVwczoKKyAgICAgICAgdGFza19kZXBzWyd0YXNrcyddID0gW10KKyAgICBpZiBub3QgJ3BhcmVudHMnIGluIHRhc2tfZGVwczoKKyAgICAgICAgdGFza19kZXBzWydwYXJlbnRzJ10gPSB7fQorCisgICAgZm9yIHRhc2sgaW4gdGFza2xpc3Q6CisgICAgICAgIHRhc2sgPSBkLmV4cGFuZCh0YXNrKQorCisgICAgICAgIGQuc2V0VmFyRmxhZyh0YXNrLCAndGFzaycsIDEpCisKKyAgICAgICAgaWYgbm90IHRhc2sgaW4gdGFza19kZXBzWyd0YXNrcyddOgorICAgICAgICAgICAgdGFza19kZXBzWyd0YXNrcyddLmFwcGVuZCh0YXNrKQorCisgICAgICAgIGZsYWdzID0gZC5nZXRWYXJGbGFncyh0YXNrKQorICAgICAgICBkZWYgZ2V0VGFzayhuYW1lKToKKyAgICAgICAgICAgIGlmIG5vdCBuYW1lIGluIHRhc2tfZGVwczoKKyAgICAgICAgICAgICAgICB0YXNrX2RlcHNbbmFtZV0gPSB7fQorICAgICAgICAgICAgaWYgbmFtZSBpbiBmbGFnczoKKyAgICAgICAgICAgICAgICBkZXB0YXNrID0gZC5leHBhbmQoZmxhZ3NbbmFtZV0pCisgICAgICAgICAgICAgICAgdGFza19kZXBzW25hbWVdW3Rhc2tdID0gZGVwdGFzaworICAgICAgICBnZXRUYXNrKCdkZXBlbmRzJykKKyAgICAgICAgZ2V0VGFzaygncmRlcGVuZHMnKQorICAgICAgICBnZXRUYXNrKCdkZXB0YXNrJykKKyAgICAgICAgZ2V0VGFzaygncmRlcHRhc2snKQorICAgICAgICBnZXRUYXNrKCdyZWNyZGVwdGFzaycpCisgICAgICAgIGdldFRhc2soJ3JlY2lkZXB0YXNrJykKKyAgICAgICAgZ2V0VGFzaygnbm9zdGFtcCcpCisgICAgICAgIGdldFRhc2soJ2Zha2Vyb290JykKKyAgICAgICAgZ2V0VGFzaygnbm9leGVjJykKKyAgICAgICAgZ2V0VGFzaygndW1hc2snKQorICAgICAgICB0YXNrX2RlcHNbJ3BhcmVudHMnXVt0YXNrXSA9IFtdCisgICAgICAgIGlmICdkZXBzJyBpbiBmbGFnczoKKyAgICAgICAgICAgIGZvciBkZXAgaW4gZmxhZ3NbJ2RlcHMnXToKKyAgICAgICAgICAgICAgICBkZXAgPSBkLmV4cGFuZChkZXApCisgICAgICAgICAgICAgICAgdGFza19kZXBzWydwYXJlbnRzJ11bdGFza10uYXBwZW5kKGRlcCkKKworICAgICMgZG9uJ3QgYXNzdW1lIGhvbGRpbmcgYSByZWZlcmVuY2UKKyAgICBkLnNldFZhcignX3Rhc2tfZGVwcycsIHRhc2tfZGVwcykKKworZGVmIGFkZHRhc2sodGFzaywgYmVmb3JlLCBhZnRlciwgZCk6CisgICAgaWYgdGFza1s6M10gIT0gImRvXyI6CisgICAgICAgIHRhc2sgPSAiZG9fIiArIHRhc2sKKworICAgIGQuc2V0VmFyRmxhZyh0YXNrLCAidGFzayIsIDEpCisgICAgYmJ0YXNrcyA9IGQuZ2V0VmFyKCdfX0JCVEFTS1MnLCBGYWxzZSkgb3IgW10KKyAgICBpZiB0YXNrIG5vdCBpbiBiYnRhc2tzOgorICAgICAgICBiYnRhc2tzLmFwcGVuZCh0YXNrKQorICAgIGQuc2V0VmFyKCdfX0JCVEFTS1MnLCBiYnRhc2tzKQorCisgICAgZXhpc3RpbmcgPSBkLmdldFZhckZsYWcodGFzaywgImRlcHMiKSBvciBbXQorICAgIGlmIGFmdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAjIHNldCB1cCBkZXBzIGZvciBmdW5jdGlvbgorICAgICAgICBmb3IgZW50cnkgaW4gYWZ0ZXIuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIGVudHJ5IG5vdCBpbiBleGlzdGluZzoKKyAgICAgICAgICAgICAgICBleGlzdGluZy5hcHBlbmQoZW50cnkpCisgICAgZC5zZXRWYXJGbGFnKHRhc2ssICJkZXBzIiwgZXhpc3RpbmcpCisgICAgaWYgYmVmb3JlIGlzIG5vdCBOb25lOgorICAgICAgICAjIHNldCB1cCB0aGluZ3MgdGhhdCBkZXBlbmQgb24gdGhpcyBmdW5jCisgICAgICAgIGZvciBlbnRyeSBpbiBiZWZvcmUuc3BsaXQoKToKKyAgICAgICAgICAgIGV4aXN0aW5nID0gZC5nZXRWYXJGbGFnKGVudHJ5LCAiZGVwcyIpIG9yIFtdCisgICAgICAgICAgICBpZiB0YXNrIG5vdCBpbiBleGlzdGluZzoKKyAgICAgICAgICAgICAgICBkLnNldFZhckZsYWcoZW50cnksICJkZXBzIiwgW3Rhc2tdICsgZXhpc3RpbmcpCisKK2RlZiBkZWx0YXNrKHRhc2ssIGQpOgorICAgIGlmIHRhc2tbOjNdICE9ICJkb18iOgorICAgICAgICB0YXNrID0gImRvXyIgKyB0YXNrCisKKyAgICBiYnRhc2tzID0gZC5nZXRWYXIoJ19fQkJUQVNLUycsIEZhbHNlKSBvciBbXQorICAgIGlmIHRhc2sgaW4gYmJ0YXNrczoKKyAgICAgICAgYmJ0YXNrcy5yZW1vdmUodGFzaykKKyAgICAgICAgZC5zZXRWYXIoJ19fQkJUQVNLUycsIGJidGFza3MpCisKKyAgICBkLmRlbFZhckZsYWcodGFzaywgJ2RlcHMnKQorICAgIGZvciBiYnRhc2sgaW4gZC5nZXRWYXIoJ19fQkJUQVNLUycsIEZhbHNlKSBvciBbXToKKyAgICAgICAgZGVwcyA9IGQuZ2V0VmFyRmxhZyhiYnRhc2ssICdkZXBzJykgb3IgW10KKyAgICAgICAgaWYgdGFzayBpbiBkZXBzOgorICAgICAgICAgICAgZGVwcy5yZW1vdmUodGFzaykKKyAgICAgICAgICAgIGQuc2V0VmFyRmxhZyhiYnRhc2ssICdkZXBzJywgZGVwcykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY2FjaGUucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2NhY2hlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNGQ2NjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2NhY2hlLnB5CkBAIC0wLDAgKzEsODM3IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIENhY2hlIGltcGxlbWVudGF0aW9uCisjCisjIENhY2hpbmcgb2YgYml0YmFrZSB2YXJpYWJsZXMgYmVmb3JlIHRhc2sgZXhlY3V0aW9uCisKKyMgQ29weXJpZ2h0IChDKSAyMDA2ICAgICAgICBSaWNoYXJkIFB1cmRpZQorIyBDb3B5cmlnaHQgKEMpIDIwMTIgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisKKyMgYnV0IHNtYWxsIHNlY3Rpb25zIGJhc2VkIG9uIGNvZGUgZnJvbSBiaW4vYml0YmFrZToKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBQaGlsIEJsdW5kZWxsCisjIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDUgTWljaGFlbCAnTWlja2V5JyBMYXVlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgICAgICAgIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisjIENvcHlyaWdodCAoQykgMjAwNSAgICAgICAgUk9BRCBHbWJICisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CitpbXBvcnQgYmIudXRpbHMKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuQ2FjaGUiKQorCit0cnk6CisgICAgaW1wb3J0IGNQaWNrbGUgYXMgcGlja2xlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgaW1wb3J0IHBpY2tsZQorICAgIGxvZ2dlci5pbmZvKCJJbXBvcnRpbmcgY1BpY2tsZSBmYWlsZWQuICIKKyAgICAgICAgICAgICAgICAiRmFsbGluZyBiYWNrIHRvIGEgdmVyeSBzbG93IGltcGxlbWVudGF0aW9uLiIpCisKK19fY2FjaGVfdmVyc2lvbl9fID0gIjE0OCIKKworZGVmIGdldENhY2hlRmlsZShwYXRoLCBmaWxlbmFtZSwgZGF0YV9oYXNoKToKKyAgICByZXR1cm4gb3MucGF0aC5qb2luKHBhdGgsIGZpbGVuYW1lICsgIi4iICsgZGF0YV9oYXNoKQorCisjIFJlY2lwZUluZm9Db21tb24gZGVmaW5lcyBjb21tb24gZGF0YSByZXRyaWV2aW5nIG1ldGhvZHMKKyMgZnJvbSBtZXRhIGRhdGEgZm9yIGNhY2hlcy4gQ29yZVJlY2lwZUluZm8gYXMgd2VsbCBhcyBvdGhlcgorIyBFeHRyYSBSZWNpcGVJbmZvIG5lZWRzIHRvIGluaGVyaXQgdGhpcyBjbGFzcworY2xhc3MgUmVjaXBlSW5mb0NvbW1vbihvYmplY3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGxpc3R2YXIoY2xzLCB2YXIsIG1ldGFkYXRhKToKKyAgICAgICAgcmV0dXJuIGNscy5nZXR2YXIodmFyLCBtZXRhZGF0YSkuc3BsaXQoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGludHZhcihjbHMsIHZhciwgbWV0YWRhdGEpOgorICAgICAgICByZXR1cm4gaW50KGNscy5nZXR2YXIodmFyLCBtZXRhZGF0YSkgb3IgMCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkZXB2YXIoY2xzLCB2YXIsIG1ldGFkYXRhKToKKyAgICAgICAgcmV0dXJuIGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhjbHMuZ2V0dmFyKHZhciwgbWV0YWRhdGEpKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHBrZ3ZhcihjbHMsIHZhciwgcGFja2FnZXMsIG1ldGFkYXRhKToKKyAgICAgICAgcmV0dXJuIGRpY3QoKHBrZywgY2xzLmRlcHZhcigiJXNfJXMiICUgKHZhciwgcGtnKSwgbWV0YWRhdGEpKQorICAgICAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRhc2t2YXIoY2xzLCB2YXIsIHRhc2tzLCBtZXRhZGF0YSk6CisgICAgICAgIHJldHVybiBkaWN0KCh0YXNrLCBjbHMuZ2V0dmFyKCIlc190YXNrLSVzIiAlICh2YXIsIHRhc2spLCBtZXRhZGF0YSkpCisgICAgICAgICAgICAgICAgICAgIGZvciB0YXNrIGluIHRhc2tzKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZsYWdsaXN0KGNscywgZmxhZywgdmFybGlzdCwgbWV0YWRhdGEsIHNxdWFzaD1GYWxzZSk6CisgICAgICAgIG91dF9kaWN0ID0gZGljdCgodmFyLCBtZXRhZGF0YS5nZXRWYXJGbGFnKHZhciwgZmxhZywgVHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgIGZvciB2YXIgaW4gdmFybGlzdCkKKyAgICAgICAgaWYgc3F1YXNoOgorICAgICAgICAgICAgcmV0dXJuIGRpY3QoKGssdikgZm9yIChrLHYpIGluIG91dF9kaWN0Lml0ZXJpdGVtcygpIGlmIHYpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gb3V0X2RpY3QKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBnZXR2YXIoY2xzLCB2YXIsIG1ldGFkYXRhKToKKyAgICAgICAgcmV0dXJuIG1ldGFkYXRhLmdldFZhcih2YXIsIFRydWUpIG9yICcnCisKKworY2xhc3MgQ29yZVJlY2lwZUluZm8oUmVjaXBlSW5mb0NvbW1vbik6CisgICAgX19zbG90c19fID0gKCkKKworICAgIGNhY2hlZmlsZSA9ICJiYl9jYWNoZS5kYXQiICAgCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIG1ldGFkYXRhKTogICAgICAKKyAgICAgICAgc2VsZi5maWxlX2RlcGVuZHMgPSBtZXRhZGF0YS5nZXRWYXIoJ19fZGVwZW5kcycsIEZhbHNlKQorICAgICAgICBzZWxmLnRpbWVzdGFtcCA9IGJiLnBhcnNlLmNhY2hlZF9tdGltZShmaWxlbmFtZSkKKyAgICAgICAgc2VsZi52YXJpYW50cyA9IHNlbGYubGlzdHZhcignX19WQVJJQU5UUycsIG1ldGFkYXRhKSArIFsnJ10KKyAgICAgICAgc2VsZi5hcHBlbmRzID0gc2VsZi5saXN0dmFyKCdfX0JCQVBQRU5EJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYubm9jYWNoZSA9IHNlbGYuZ2V0dmFyKCdfX0JCX0RPTlRfQ0FDSEUnLCBtZXRhZGF0YSkKKworICAgICAgICBzZWxmLnNraXByZWFzb24gPSBzZWxmLmdldHZhcignX19TS0lQUEVEJywgbWV0YWRhdGEpCisgICAgICAgIGlmIHNlbGYuc2tpcHJlYXNvbjoKKyAgICAgICAgICAgIHNlbGYucG4gPSBzZWxmLmdldHZhcignUE4nLCBtZXRhZGF0YSkgb3IgYmIucGFyc2UuQkJIYW5kbGVyLnZhcnNfZnJvbV9maWxlKGZpbGVuYW1lLG1ldGFkYXRhKVswXQorICAgICAgICAgICAgc2VsZi5za2lwcGVkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5wcm92aWRlcyAgPSBzZWxmLmRlcHZhcignUFJPVklERVMnLCBtZXRhZGF0YSkKKyAgICAgICAgICAgIHNlbGYucnByb3ZpZGVzID0gc2VsZi5kZXB2YXIoJ1JQUk9WSURFUycsIG1ldGFkYXRhKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi50YXNrcyA9IG1ldGFkYXRhLmdldFZhcignX19CQlRBU0tTJywgRmFsc2UpCisKKyAgICAgICAgc2VsZi5wbiA9IHNlbGYuZ2V0dmFyKCdQTicsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLnBhY2thZ2VzID0gc2VsZi5saXN0dmFyKCdQQUNLQUdFUycsIG1ldGFkYXRhKQorICAgICAgICBpZiBub3Qgc2VsZi5wbiBpbiBzZWxmLnBhY2thZ2VzOgorICAgICAgICAgICAgc2VsZi5wYWNrYWdlcy5hcHBlbmQoc2VsZi5wbikKKworICAgICAgICBzZWxmLmJhc2V0YXNraGFzaGVzID0gc2VsZi50YXNrdmFyKCdCQl9CQVNFSEFTSCcsIHNlbGYudGFza3MsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLmhhc2hmaWxlbmFtZSA9IHNlbGYuZ2V0dmFyKCdCQl9IQVNIRklMRU5BTUUnLCBtZXRhZGF0YSkKKworICAgICAgICBzZWxmLnRhc2tfZGVwcyA9IG1ldGFkYXRhLmdldFZhcignX3Rhc2tfZGVwcycsIEZhbHNlKSBvciB7J3Rhc2tzJzogW10sICdwYXJlbnRzJzoge319CisKKyAgICAgICAgc2VsZi5za2lwcGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5wZSA9IHNlbGYuZ2V0dmFyKCdQRScsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLnB2ID0gc2VsZi5nZXR2YXIoJ1BWJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYucHIgPSBzZWxmLmdldHZhcignUFInLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5kZWZhdWx0cHJlZiA9IHNlbGYuaW50dmFyKCdERUZBVUxUX1BSRUZFUkVOQ0UnLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5ub3Rfd29ybGQgPSBzZWxmLmdldHZhcignRVhDTFVERV9GUk9NX1dPUkxEJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYuc3RhbXAgPSBzZWxmLmdldHZhcignU1RBTVAnLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5zdGFtcGNsZWFuID0gc2VsZi5nZXR2YXIoJ1NUQU1QQ0xFQU4nLCBtZXRhZGF0YSkgICAgICAgIAorICAgICAgICBzZWxmLnN0YW1wX2Jhc2UgPSBzZWxmLmZsYWdsaXN0KCdzdGFtcC1iYXNlJywgc2VsZi50YXNrcywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYuc3RhbXBfYmFzZV9jbGVhbiA9IHNlbGYuZmxhZ2xpc3QoJ3N0YW1wLWJhc2UtY2xlYW4nLCBzZWxmLnRhc2tzLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5zdGFtcF9leHRyYWluZm8gPSBzZWxmLmZsYWdsaXN0KCdzdGFtcC1leHRyYS1pbmZvJywgc2VsZi50YXNrcywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYuZmlsZV9jaGVja3N1bXMgPSBzZWxmLmZsYWdsaXN0KCdmaWxlLWNoZWNrc3VtcycsIHNlbGYudGFza3MsIG1ldGFkYXRhLCBUcnVlKQorICAgICAgICBzZWxmLnBhY2thZ2VzX2R5bmFtaWMgPSBzZWxmLmxpc3R2YXIoJ1BBQ0tBR0VTX0RZTkFNSUMnLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5kZXBlbmRzICAgICAgICAgID0gc2VsZi5kZXB2YXIoJ0RFUEVORFMnLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5wcm92aWRlcyAgICAgICAgID0gc2VsZi5kZXB2YXIoJ1BST1ZJREVTJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYucmRlcGVuZHMgICAgICAgICA9IHNlbGYuZGVwdmFyKCdSREVQRU5EUycsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLnJwcm92aWRlcyAgICAgICAgPSBzZWxmLmRlcHZhcignUlBST1ZJREVTJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYucnJlY29tbWVuZHMgICAgICA9IHNlbGYuZGVwdmFyKCdSUkVDT01NRU5EUycsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLnJwcm92aWRlc19wa2cgICAgPSBzZWxmLnBrZ3ZhcignUlBST1ZJREVTJywgc2VsZi5wYWNrYWdlcywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYucmRlcGVuZHNfcGtnICAgICA9IHNlbGYucGtndmFyKCdSREVQRU5EUycsIHNlbGYucGFja2FnZXMsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLnJyZWNvbW1lbmRzX3BrZyAgPSBzZWxmLnBrZ3ZhcignUlJFQ09NTUVORFMnLCBzZWxmLnBhY2thZ2VzLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5pbmhlcml0cyAgICAgICAgID0gc2VsZi5nZXR2YXIoJ19faW5oZXJpdF9jYWNoZScsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLmZha2Vyb290ZW52ICAgICAgPSBzZWxmLmdldHZhcignRkFLRVJPT1RFTlYnLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5mYWtlcm9vdGRpcnMgICAgID0gc2VsZi5nZXR2YXIoJ0ZBS0VST09URElSUycsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLmZha2Vyb290bm9lbnYgICAgPSBzZWxmLmdldHZhcignRkFLRVJPT1ROT0VOVicsIG1ldGFkYXRhKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGluaXRfY2FjaGVEYXRhKGNscywgY2FjaGVkYXRhKToKKyAgICAgICAgIyBDYWNoZURhdGEgaW4gQ29yZSBSZWNpcGVJbmZvIENsYXNzCisgICAgICAgIGNhY2hlZGF0YS50YXNrX2RlcHMgPSB7fQorICAgICAgICBjYWNoZWRhdGEucGtnX2ZuID0ge30KKyAgICAgICAgY2FjaGVkYXRhLnBrZ19wbiA9IGRlZmF1bHRkaWN0KGxpc3QpCisgICAgICAgIGNhY2hlZGF0YS5wa2dfcGVwdnByID0ge30KKyAgICAgICAgY2FjaGVkYXRhLnBrZ19kcCA9IHt9CisKKyAgICAgICAgY2FjaGVkYXRhLnN0YW1wID0ge30KKyAgICAgICAgY2FjaGVkYXRhLnN0YW1wY2xlYW4gPSB7fQorICAgICAgICBjYWNoZWRhdGEuc3RhbXBfYmFzZSA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5zdGFtcF9iYXNlX2NsZWFuID0ge30KKyAgICAgICAgY2FjaGVkYXRhLnN0YW1wX2V4dHJhaW5mbyA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5maWxlX2NoZWNrc3VtcyA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5mbl9wcm92aWRlcyA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5wbl9wcm92aWRlcyA9IGRlZmF1bHRkaWN0KGxpc3QpCisgICAgICAgIGNhY2hlZGF0YS5hbGxfZGVwZW5kcyA9IFtdCisKKyAgICAgICAgY2FjaGVkYXRhLmRlcHMgPSBkZWZhdWx0ZGljdChsaXN0KQorICAgICAgICBjYWNoZWRhdGEucGFja2FnZXMgPSBkZWZhdWx0ZGljdChsaXN0KQorICAgICAgICBjYWNoZWRhdGEucHJvdmlkZXJzID0gZGVmYXVsdGRpY3QobGlzdCkKKyAgICAgICAgY2FjaGVkYXRhLnJwcm92aWRlcnMgPSBkZWZhdWx0ZGljdChsaXN0KQorICAgICAgICBjYWNoZWRhdGEucGFja2FnZXNfZHluYW1pYyA9IGRlZmF1bHRkaWN0KGxpc3QpCisKKyAgICAgICAgY2FjaGVkYXRhLnJ1bmRlcHMgPSBkZWZhdWx0ZGljdChsYW1iZGE6IGRlZmF1bHRkaWN0KGxpc3QpKQorICAgICAgICBjYWNoZWRhdGEucnVucmVjcyA9IGRlZmF1bHRkaWN0KGxhbWJkYTogZGVmYXVsdGRpY3QobGlzdCkpCisgICAgICAgIGNhY2hlZGF0YS5wb3NzaWJsZV93b3JsZCA9IFtdCisgICAgICAgIGNhY2hlZGF0YS51bml2ZXJzZV90YXJnZXQgPSBbXQorICAgICAgICBjYWNoZWRhdGEuaGFzaGZuID0ge30KKworICAgICAgICBjYWNoZWRhdGEuYmFzZXRhc2toYXNoID0ge30KKyAgICAgICAgY2FjaGVkYXRhLmluaGVyaXRzID0ge30KKyAgICAgICAgY2FjaGVkYXRhLmZha2Vyb290ZW52ID0ge30KKyAgICAgICAgY2FjaGVkYXRhLmZha2Vyb290bm9lbnYgPSB7fQorICAgICAgICBjYWNoZWRhdGEuZmFrZXJvb3RkaXJzID0ge30KKworICAgIGRlZiBhZGRfY2FjaGVEYXRhKHNlbGYsIGNhY2hlZGF0YSwgZm4pOgorICAgICAgICBjYWNoZWRhdGEudGFza19kZXBzW2ZuXSA9IHNlbGYudGFza19kZXBzCisgICAgICAgIGNhY2hlZGF0YS5wa2dfZm5bZm5dID0gc2VsZi5wbgorICAgICAgICBjYWNoZWRhdGEucGtnX3BuW3NlbGYucG5dLmFwcGVuZChmbikKKyAgICAgICAgY2FjaGVkYXRhLnBrZ19wZXB2cHJbZm5dID0gKHNlbGYucGUsIHNlbGYucHYsIHNlbGYucHIpCisgICAgICAgIGNhY2hlZGF0YS5wa2dfZHBbZm5dID0gc2VsZi5kZWZhdWx0cHJlZgorICAgICAgICBjYWNoZWRhdGEuc3RhbXBbZm5dID0gc2VsZi5zdGFtcAorICAgICAgICBjYWNoZWRhdGEuc3RhbXBjbGVhbltmbl0gPSBzZWxmLnN0YW1wY2xlYW4KKyAgICAgICAgY2FjaGVkYXRhLnN0YW1wX2Jhc2VbZm5dID0gc2VsZi5zdGFtcF9iYXNlCisgICAgICAgIGNhY2hlZGF0YS5zdGFtcF9iYXNlX2NsZWFuW2ZuXSA9IHNlbGYuc3RhbXBfYmFzZV9jbGVhbgorICAgICAgICBjYWNoZWRhdGEuc3RhbXBfZXh0cmFpbmZvW2ZuXSA9IHNlbGYuc3RhbXBfZXh0cmFpbmZvCisgICAgICAgIGNhY2hlZGF0YS5maWxlX2NoZWNrc3Vtc1tmbl0gPSBzZWxmLmZpbGVfY2hlY2tzdW1zCisKKyAgICAgICAgcHJvdmlkZXMgPSBbc2VsZi5wbl0KKyAgICAgICAgZm9yIHByb3ZpZGUgaW4gc2VsZi5wcm92aWRlczoKKyAgICAgICAgICAgIGlmIHByb3ZpZGUgbm90IGluIHByb3ZpZGVzOgorICAgICAgICAgICAgICAgIHByb3ZpZGVzLmFwcGVuZChwcm92aWRlKQorICAgICAgICBjYWNoZWRhdGEuZm5fcHJvdmlkZXNbZm5dID0gcHJvdmlkZXMKKworICAgICAgICBmb3IgcHJvdmlkZSBpbiBwcm92aWRlczoKKyAgICAgICAgICAgIGNhY2hlZGF0YS5wcm92aWRlcnNbcHJvdmlkZV0uYXBwZW5kKGZuKQorICAgICAgICAgICAgaWYgcHJvdmlkZSBub3QgaW4gY2FjaGVkYXRhLnBuX3Byb3ZpZGVzW3NlbGYucG5dOgorICAgICAgICAgICAgICAgIGNhY2hlZGF0YS5wbl9wcm92aWRlc1tzZWxmLnBuXS5hcHBlbmQocHJvdmlkZSkKKworICAgICAgICBmb3IgZGVwIGluIHNlbGYuZGVwZW5kczoKKyAgICAgICAgICAgIGlmIGRlcCBub3QgaW4gY2FjaGVkYXRhLmRlcHNbZm5dOgorICAgICAgICAgICAgICAgIGNhY2hlZGF0YS5kZXBzW2ZuXS5hcHBlbmQoZGVwKQorICAgICAgICAgICAgaWYgZGVwIG5vdCBpbiBjYWNoZWRhdGEuYWxsX2RlcGVuZHM6CisgICAgICAgICAgICAgICAgY2FjaGVkYXRhLmFsbF9kZXBlbmRzLmFwcGVuZChkZXApCisKKyAgICAgICAgcnByb3ZpZGVzID0gc2VsZi5ycHJvdmlkZXMKKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gc2VsZi5wYWNrYWdlczoKKyAgICAgICAgICAgIGNhY2hlZGF0YS5wYWNrYWdlc1twYWNrYWdlXS5hcHBlbmQoZm4pCisgICAgICAgICAgICBycHJvdmlkZXMgKz0gc2VsZi5ycHJvdmlkZXNfcGtnW3BhY2thZ2VdCisKKyAgICAgICAgZm9yIHJwcm92aWRlIGluIHJwcm92aWRlczoKKyAgICAgICAgICAgIGNhY2hlZGF0YS5ycHJvdmlkZXJzW3Jwcm92aWRlXS5hcHBlbmQoZm4pCisKKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gc2VsZi5wYWNrYWdlc19keW5hbWljOgorICAgICAgICAgICAgY2FjaGVkYXRhLnBhY2thZ2VzX2R5bmFtaWNbcGFja2FnZV0uYXBwZW5kKGZuKQorCisgICAgICAgICMgQnVpbGQgaGFzaCBvZiBydW50aW1lIGRlcGVuZHMgYW5kIHJlY29tbWVuZHMKKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gc2VsZi5wYWNrYWdlcyArIFtzZWxmLnBuXToKKyAgICAgICAgICAgIGNhY2hlZGF0YS5ydW5kZXBzW2ZuXVtwYWNrYWdlXSA9IGxpc3Qoc2VsZi5yZGVwZW5kcykgKyBzZWxmLnJkZXBlbmRzX3BrZ1twYWNrYWdlXQorICAgICAgICAgICAgY2FjaGVkYXRhLnJ1bnJlY3NbZm5dW3BhY2thZ2VdID0gbGlzdChzZWxmLnJyZWNvbW1lbmRzKSArIHNlbGYucnJlY29tbWVuZHNfcGtnW3BhY2thZ2VdCisKKyAgICAgICAgIyBDb2xsZWN0IGZpbGVzIHdlIG1heSBuZWVkIGZvciBwb3NzaWJsZSB3b3JsZC1kZXAKKyAgICAgICAgIyBjYWxjdWxhdGlvbnMKKyAgICAgICAgaWYgc2VsZi5ub3Rfd29ybGQ6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIkVYQ0xVREUgRlJPTSBXT1JMRDogJXMiLCBmbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNhY2hlZGF0YS5wb3NzaWJsZV93b3JsZC5hcHBlbmQoZm4pCisKKyAgICAgICAgIyBjcmVhdGUgYSBjb2xsZWN0aW9uIG9mIGFsbCB0YXJnZXRzIGZvciBzYW5pdHkgY2hlY2tpbmcKKyAgICAgICAgIyB0YXNrcywgc3VjaCBhcyB1cHN0cmVhbSB2ZXJzaW9ucywgbGljZW5zZSwgYW5kIHRvb2xzIGZvcgorICAgICAgICAjIHRhc2sgYW5kIGltYWdlIGNyZWF0aW9uLgorICAgICAgICBjYWNoZWRhdGEudW5pdmVyc2VfdGFyZ2V0LmFwcGVuZChzZWxmLnBuKQorCisgICAgICAgIGNhY2hlZGF0YS5oYXNoZm5bZm5dID0gc2VsZi5oYXNoZmlsZW5hbWUKKyAgICAgICAgZm9yIHRhc2ssIHRhc2toYXNoIGluIHNlbGYuYmFzZXRhc2toYXNoZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZGVudGlmaWVyID0gJyVzLiVzJyAlIChmbiwgdGFzaykKKyAgICAgICAgICAgIGNhY2hlZGF0YS5iYXNldGFza2hhc2hbaWRlbnRpZmllcl0gPSB0YXNraGFzaAorCisgICAgICAgIGNhY2hlZGF0YS5pbmhlcml0c1tmbl0gPSBzZWxmLmluaGVyaXRzCisgICAgICAgIGNhY2hlZGF0YS5mYWtlcm9vdGVudltmbl0gPSBzZWxmLmZha2Vyb290ZW52CisgICAgICAgIGNhY2hlZGF0YS5mYWtlcm9vdG5vZW52W2ZuXSA9IHNlbGYuZmFrZXJvb3Rub2VudgorICAgICAgICBjYWNoZWRhdGEuZmFrZXJvb3RkaXJzW2ZuXSA9IHNlbGYuZmFrZXJvb3RkaXJzCisKKworCitjbGFzcyBDYWNoZShvYmplY3QpOgorICAgICIiIgorICAgIEJpdEJha2UgQ2FjaGUgaW1wbGVtZW50YXRpb24KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhLCBkYXRhX2hhc2gsIGNhY2hlc19hcnJheSk6CisgICAgICAgICMgUGFzcyBjYWNoZXNfYXJyYXkgaW5mb3JtYXRpb24gaW50byBDYWNoZSBDb25zdHJ1Y3RvcgorICAgICAgICAjIEl0IHdpbGwgYmUgdXNlZCBsYXRlciBmb3IgZGVjaWRpbmcgd2hldGhlciB3ZSAKKyAgICAgICAgIyBuZWVkIGV4dHJhIGNhY2hlIGZpbGUgZHVtcC9sb2FkIHN1cHBvcnQgCisgICAgICAgIHNlbGYuY2FjaGVzX2FycmF5ID0gY2FjaGVzX2FycmF5CisgICAgICAgIHNlbGYuY2FjaGVkaXIgPSBkYXRhLmdldFZhcigiQ0FDSEUiLCBUcnVlKQorICAgICAgICBzZWxmLmNsZWFuID0gc2V0KCkKKyAgICAgICAgc2VsZi5jaGVja2VkID0gc2V0KCkKKyAgICAgICAgc2VsZi5kZXBlbmRzX2NhY2hlID0ge30KKyAgICAgICAgc2VsZi5kYXRhID0gTm9uZQorICAgICAgICBzZWxmLmRhdGFfZm4gPSBOb25lCisgICAgICAgIHNlbGYuY2FjaGVjbGVhbiA9IFRydWUKKyAgICAgICAgc2VsZi5kYXRhX2hhc2ggPSBkYXRhX2hhc2gKKworICAgICAgICBpZiBzZWxmLmNhY2hlZGlyIGluIFtOb25lLCAnJ106CisgICAgICAgICAgICBzZWxmLmhhc19jYWNoZSA9IEZhbHNlCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiTm90IHVzaW5nIGEgY2FjaGUuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJTZXQgQ0FDSEUgPSA8ZGlyZWN0b3J5PiB0byBlbmFibGUuIikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuaGFzX2NhY2hlID0gVHJ1ZQorICAgICAgICBzZWxmLmNhY2hlZmlsZSA9IGdldENhY2hlRmlsZShzZWxmLmNhY2hlZGlyLCAiYmJfY2FjaGUuZGF0Iiwgc2VsZi5kYXRhX2hhc2gpCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJVc2luZyBjYWNoZSBpbiAnJXMnIiwgc2VsZi5jYWNoZWRpcikKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuY2FjaGVkaXIpCisKKyAgICAgICAgY2FjaGVfb2sgPSBUcnVlCisgICAgICAgIGlmIHNlbGYuY2FjaGVzX2FycmF5OgorICAgICAgICAgICAgZm9yIGNhY2hlX2NsYXNzIGluIHNlbGYuY2FjaGVzX2FycmF5OgorICAgICAgICAgICAgICAgIGlmIHR5cGUoY2FjaGVfY2xhc3MpIGlzIHR5cGUgYW5kIGlzc3ViY2xhc3MoY2FjaGVfY2xhc3MsIFJlY2lwZUluZm9Db21tb24pOgorICAgICAgICAgICAgICAgICAgICBjYWNoZWZpbGUgPSBnZXRDYWNoZUZpbGUoc2VsZi5jYWNoZWRpciwgY2FjaGVfY2xhc3MuY2FjaGVmaWxlLCBzZWxmLmRhdGFfaGFzaCkKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVfb2sgPSBjYWNoZV9vayBhbmQgb3MucGF0aC5leGlzdHMoY2FjaGVmaWxlKQorICAgICAgICAgICAgICAgICAgICBjYWNoZV9jbGFzcy5pbml0X2NhY2hlRGF0YShzZWxmKQorICAgICAgICBpZiBjYWNoZV9vazoKKyAgICAgICAgICAgIHNlbGYubG9hZF9jYWNoZWZpbGUoKQorICAgICAgICBlbGlmIG9zLnBhdGguaXNmaWxlKHNlbGYuY2FjaGVmaWxlKToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJPdXQgb2YgZGF0ZSBjYWNoZSBmb3VuZCwgcmVidWlsZGluZy4uLiIpCisKKyAgICBkZWYgbG9hZF9jYWNoZWZpbGUoc2VsZik6CisgICAgICAgICMgRmlyc3RseSwgdXNpbmcgY29yZSBjYWNoZSBmaWxlIGluZm9ybWF0aW9uIGZvcgorICAgICAgICAjIHZhbGlkIGNoZWNraW5nCisgICAgICAgIHdpdGggb3BlbihzZWxmLmNhY2hlZmlsZSwgInJiIikgYXMgY2FjaGVmaWxlOgorICAgICAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5VbnBpY2tsZXIoY2FjaGVmaWxlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNhY2hlX3ZlciA9IHBpY2tsZWQubG9hZCgpCisgICAgICAgICAgICAgICAgYml0YmFrZV92ZXIgPSBwaWNrbGVkLmxvYWQoKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnSW52YWxpZCBjYWNoZSwgcmVidWlsZGluZy4uLicpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGlmIGNhY2hlX3ZlciAhPSBfX2NhY2hlX3ZlcnNpb25fXzoKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnQ2FjaGUgdmVyc2lvbiBtaXNtYXRjaCwgcmVidWlsZGluZy4uLicpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbGlmIGJpdGJha2VfdmVyICE9IGJiLl9fdmVyc2lvbl9fOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdCaXRiYWtlIHZlcnNpb24gbWlzbWF0Y2gsIHJlYnVpbGRpbmcuLi4nKQorICAgICAgICAgICAgICAgIHJldHVybgorCisKKyAgICAgICAgY2FjaGVzaXplID0gMAorICAgICAgICBwcmV2aW91c19wcm9ncmVzcyA9IDAKKyAgICAgICAgcHJldmlvdXNfcGVyY2VudCA9IDAKKworICAgICAgICAjIENhbGN1bGF0ZSB0aGUgY29ycmVjdCBjYWNoZXNpemUgb2YgYWxsIHRob3NlIGNhY2hlIGZpbGVzCisgICAgICAgIGZvciBjYWNoZV9jbGFzcyBpbiBzZWxmLmNhY2hlc19hcnJheToKKyAgICAgICAgICAgIGlmIHR5cGUoY2FjaGVfY2xhc3MpIGlzIHR5cGUgYW5kIGlzc3ViY2xhc3MoY2FjaGVfY2xhc3MsIFJlY2lwZUluZm9Db21tb24pOgorICAgICAgICAgICAgICAgIGNhY2hlZmlsZSA9IGdldENhY2hlRmlsZShzZWxmLmNhY2hlZGlyLCBjYWNoZV9jbGFzcy5jYWNoZWZpbGUsIHNlbGYuZGF0YV9oYXNoKQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihjYWNoZWZpbGUsICJyYiIpIGFzIGNhY2hlZmlsZToKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVzaXplICs9IG9zLmZzdGF0KGNhY2hlZmlsZS5maWxlbm8oKSkuc3Rfc2l6ZQorCisgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQ2FjaGVMb2FkU3RhcnRlZChjYWNoZXNpemUpLCBzZWxmLmRhdGEpCisgICAgICAgIAorICAgICAgICBmb3IgY2FjaGVfY2xhc3MgaW4gc2VsZi5jYWNoZXNfYXJyYXk6CisgICAgICAgICAgICBpZiB0eXBlKGNhY2hlX2NsYXNzKSBpcyB0eXBlIGFuZCBpc3N1YmNsYXNzKGNhY2hlX2NsYXNzLCBSZWNpcGVJbmZvQ29tbW9uKToKKyAgICAgICAgICAgICAgICBjYWNoZWZpbGUgPSBnZXRDYWNoZUZpbGUoc2VsZi5jYWNoZWRpciwgY2FjaGVfY2xhc3MuY2FjaGVmaWxlLCBzZWxmLmRhdGFfaGFzaCkKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oY2FjaGVmaWxlLCAicmIiKSBhcyBjYWNoZWZpbGU6CisgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuVW5waWNrbGVyKGNhY2hlZmlsZSkgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB3aGlsZSBjYWNoZWZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gcGlja2xlZC5sb2FkKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBpY2tsZWQubG9hZCgpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlcGVuZHNfY2FjaGUuaGFzX2tleShrZXkpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVwZW5kc19jYWNoZVtrZXldLmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZXBlbmRzX2NhY2hlW2tleV0gPSBbdmFsdWVdCisgICAgICAgICAgICAgICAgICAgICAgICAjIG9ubHkgZmlyZSBldmVudHMgb24gZXZlbiBwZXJjZW50YWdlIGJvdW5kYXJpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfcHJvZ3Jlc3MgPSBjYWNoZWZpbGUudGVsbCgpICsgcHJldmlvdXNfcHJvZ3Jlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfcGVyY2VudCA9IDEwMCAqIGN1cnJlbnRfcHJvZ3Jlc3MgLyBjYWNoZXNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGN1cnJlbnRfcGVyY2VudCA+IHByZXZpb3VzX3BlcmNlbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNfcGVyY2VudCA9IGN1cnJlbnRfcGVyY2VudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQ2FjaGVMb2FkUHJvZ3Jlc3MoY3VycmVudF9wcm9ncmVzcywgY2FjaGVzaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF0YSkKKworICAgICAgICAgICAgICAgICAgICBwcmV2aW91c19wcm9ncmVzcyArPSBjdXJyZW50X3Byb2dyZXNzCisKKyAgICAgICAgIyBOb3RlOiBkZXBlbmRzIGNhY2hlIG51bWJlciBpcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXJzaW5nIGZpbGUgbnVtYmVycy4KKyAgICAgICAgIyBUaGUgc2FtZSBmaWxlIGhhcyBzZXZlcmFsIGNhY2hlcywgc3RpbGwgcmVnYXJkZWQgYXMgb25lIGl0ZW0gaW4gdGhlIGNhY2hlCisgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQ2FjaGVMb2FkQ29tcGxldGVkKGNhY2hlc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHNlbGYuZGVwZW5kc19jYWNoZSkpLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF0YSkKKworICAgIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdmlydHVhbGZuMnJlYWxmbih2aXJ0dWFsZm4pOgorICAgICAgICAiIiIKKyAgICAgICAgQ29udmVydCBhIHZpcnR1YWwgZmlsZSBuYW1lIHRvIGEgcmVhbCBvbmUgKyB0aGUgYXNzb2NpYXRlZCBzdWJjbGFzcyBrZXl3b3JkCisgICAgICAgICIiIgorCisgICAgICAgIGZuID0gdmlydHVhbGZuCisgICAgICAgIGNscyA9ICIiCisgICAgICAgIGlmIHZpcnR1YWxmbi5zdGFydHN3aXRoKCd2aXJ0dWFsOicpOgorICAgICAgICAgICAgZWxlbXMgPSB2aXJ0dWFsZm4uc3BsaXQoJzonKQorICAgICAgICAgICAgY2xzID0gIjoiLmpvaW4oZWxlbXNbMTotMV0pCisgICAgICAgICAgICBmbiA9IGVsZW1zWy0xXQorICAgICAgICByZXR1cm4gKGZuLCBjbHMpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHJlYWxmbjJ2aXJ0dWFsKHJlYWxmbiwgY2xzKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbnZlcnQgYSByZWFsIGZpbGVuYW1lICsgdGhlIGFzc29jaWF0ZWQgc3ViY2xhc3Mga2V5d29yZCB0byBhIHZpcnR1YWwgZmlsZW5hbWUKKyAgICAgICAgIiIiCisgICAgICAgIGlmIGNscyA9PSAiIjoKKyAgICAgICAgICAgIHJldHVybiByZWFsZm4KKyAgICAgICAgcmV0dXJuICJ2aXJ0dWFsOiIgKyBjbHMgKyAiOiIgKyByZWFsZm4KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBsb2FkRGF0YUZ1bGwoY2xzLCB2aXJ0dWFsZm4sIGFwcGVuZHMsIGNmZ0RhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgY29tcGxldGUgc2V0IG9mIGRhdGEgZm9yIGZuLgorICAgICAgICBUbyBkbyB0aGlzLCB3ZSBuZWVkIHRvIHBhcnNlIHRoZSBmaWxlLgorICAgICAgICAiIiIKKworICAgICAgICAoZm4sIHZpcnR1YWwpID0gY2xzLnZpcnR1YWxmbjJyZWFsZm4odmlydHVhbGZuKQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiUGFyc2luZyAlcyAoZnVsbCkiLCBmbikKKworICAgICAgICBjZmdEYXRhLnNldFZhcigiX19PTkxZRklOQUxJU0UiLCB2aXJ0dWFsIG9yICJkZWZhdWx0IikKKyAgICAgICAgYmJfZGF0YSA9IGNscy5sb2FkX2JiZmlsZShmbiwgYXBwZW5kcywgY2ZnRGF0YSkKKyAgICAgICAgcmV0dXJuIGJiX2RhdGFbdmlydHVhbF0KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwYXJzZShjbHMsIGZpbGVuYW1lLCBhcHBlbmRzLCBjb25maWdkYXRhLCBjYWNoZXNfYXJyYXkpOgorICAgICAgICAiIiJQYXJzZSB0aGUgc3BlY2lmaWVkIGZpbGVuYW1lLCByZXR1cm5pbmcgdGhlIHJlY2lwZSBpbmZvcm1hdGlvbiIiIgorICAgICAgICBpbmZvcyA9IFtdCisgICAgICAgIGRhdGFzdG9yZXMgPSBjbHMubG9hZF9iYmZpbGUoZmlsZW5hbWUsIGFwcGVuZHMsIGNvbmZpZ2RhdGEpCisgICAgICAgIGRlcGVuZHMgPSBbXQorICAgICAgICBmb3IgdmFyaWFudCwgZGF0YSBpbiBzb3J0ZWQoZGF0YXN0b3Jlcy5pdGVyaXRlbXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT1sYW1iZGEgaTogaVswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2U9VHJ1ZSk6CisgICAgICAgICAgICB2aXJ0dWFsZm4gPSBjbHMucmVhbGZuMnZpcnR1YWwoZmlsZW5hbWUsIHZhcmlhbnQpCisgICAgICAgICAgICBkZXBlbmRzID0gZGVwZW5kcyArIChkYXRhLmdldFZhcigiX19kZXBlbmRzIiwgRmFsc2UpIG9yIFtdKQorICAgICAgICAgICAgaWYgZGVwZW5kcyBhbmQgbm90IHZhcmlhbnQ6CisgICAgICAgICAgICAgICAgZGF0YS5zZXRWYXIoIl9fZGVwZW5kcyIsIGRlcGVuZHMpCisKKyAgICAgICAgICAgIGluZm9fYXJyYXkgPSBbXQorICAgICAgICAgICAgZm9yIGNhY2hlX2NsYXNzIGluIGNhY2hlc19hcnJheToKKyAgICAgICAgICAgICAgICBpZiB0eXBlKGNhY2hlX2NsYXNzKSBpcyB0eXBlIGFuZCBpc3N1YmNsYXNzKGNhY2hlX2NsYXNzLCBSZWNpcGVJbmZvQ29tbW9uKToKKyAgICAgICAgICAgICAgICAgICAgaW5mbyA9IGNhY2hlX2NsYXNzKGZpbGVuYW1lLCBkYXRhKQorICAgICAgICAgICAgICAgICAgICBpbmZvX2FycmF5LmFwcGVuZChpbmZvKQorICAgICAgICAgICAgaW5mb3MuYXBwZW5kKCh2aXJ0dWFsZm4sIGluZm9fYXJyYXkpKQorCisgICAgICAgIHJldHVybiBpbmZvcworCisgICAgZGVmIGxvYWQoc2VsZiwgZmlsZW5hbWUsIGFwcGVuZHMsIGNvbmZpZ2RhdGEpOgorICAgICAgICAiIiJPYnRhaW4gdGhlIHJlY2lwZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBmaWxlbmFtZSwKKyAgICAgICAgdXNpbmcgY2FjaGVkIHZhbHVlcyBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBwYXJzaW5nLgorCisgICAgICAgIE5vdGUgdGhhdCBpZiBpdCBkb2VzIHBhcnNlIHRvIG9idGFpbiB0aGUgaW5mbywgaXQgd2lsbCBub3QKKyAgICAgICAgYXV0b21hdGljYWxseSBhZGQgdGhlIGluZm9ybWF0aW9uIHRvIHRoZSBjYWNoZSBvciB0byB5b3VyCisgICAgICAgIENhY2hlRGF0YS4gIFVzZSB0aGUgYWRkIG9yIGFkZF9pbmZvIG1ldGhvZCB0byBkbyBzbyBhZnRlcgorICAgICAgICBydW5uaW5nIHRoaXMsIG9yIHVzZSBsb2FkRGF0YSBpbnN0ZWFkLiIiIgorICAgICAgICBjYWNoZWQgPSBzZWxmLmNhY2hlVmFsaWQoZmlsZW5hbWUsIGFwcGVuZHMpCisgICAgICAgIGlmIGNhY2hlZDoKKyAgICAgICAgICAgIGluZm9zID0gW10KKyAgICAgICAgICAgICMgaW5mb19hcnJheSBpdGVtIGlzIGEgbGlzdCBvZiBbQ29yZVJlY2lwZUluZm8sIFhYWFJlY2lwZUluZm9dCisgICAgICAgICAgICBpbmZvX2FycmF5ID0gc2VsZi5kZXBlbmRzX2NhY2hlW2ZpbGVuYW1lXQorICAgICAgICAgICAgZm9yIHZhcmlhbnQgaW4gaW5mb19hcnJheVswXS52YXJpYW50czoKKyAgICAgICAgICAgICAgICB2aXJ0dWFsZm4gPSBzZWxmLnJlYWxmbjJ2aXJ0dWFsKGZpbGVuYW1lLCB2YXJpYW50KQorICAgICAgICAgICAgICAgIGluZm9zLmFwcGVuZCgodmlydHVhbGZuLCBzZWxmLmRlcGVuZHNfY2FjaGVbdmlydHVhbGZuXSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlBhcnNpbmcgJXMiLCBmaWxlbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcnNlKGZpbGVuYW1lLCBhcHBlbmRzLCBjb25maWdkYXRhLCBzZWxmLmNhY2hlc19hcnJheSkKKworICAgICAgICByZXR1cm4gY2FjaGVkLCBpbmZvcworCisgICAgZGVmIGxvYWREYXRhKHNlbGYsIGZuLCBhcHBlbmRzLCBjZmdEYXRhLCBjYWNoZURhdGEpOgorICAgICAgICAiIiJMb2FkIHRoZSByZWNpcGUgaW5mbyBmb3IgdGhlIHNwZWNpZmllZCBmaWxlbmFtZSwKKyAgICAgICAgcGFyc2luZyBhbmQgYWRkaW5nIHRvIHRoZSBjYWNoZSBpZiBuZWNlc3NhcnksIGFuZCBhZGRpbmcKKyAgICAgICAgdGhlIHJlY2lwZSBpbmZvcm1hdGlvbiB0byB0aGUgc3VwcGxpZWQgQ2FjaGVEYXRhIGluc3RhbmNlLiIiIgorICAgICAgICBza2lwcGVkLCB2aXJ0dWFscyA9IDAsIDAKKworICAgICAgICBjYWNoZWQsIGluZm9zID0gc2VsZi5sb2FkKGZuLCBhcHBlbmRzLCBjZmdEYXRhKQorICAgICAgICBmb3IgdmlydHVhbGZuLCBpbmZvX2FycmF5IGluIGluZm9zOgorICAgICAgICAgICAgaWYgaW5mb19hcnJheVswXS5za2lwcGVkOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiU2tpcHBpbmcgJXM6ICVzIiwgdmlydHVhbGZuLCBpbmZvX2FycmF5WzBdLnNraXByZWFzb24pCisgICAgICAgICAgICAgICAgc2tpcHBlZCArPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYWRkX2luZm8odmlydHVhbGZuLCBpbmZvX2FycmF5LCBjYWNoZURhdGEsIG5vdCBjYWNoZWQpCisgICAgICAgICAgICAgICAgdmlydHVhbHMgKz0gMQorCisgICAgICAgIHJldHVybiBjYWNoZWQsIHNraXBwZWQsIHZpcnR1YWxzCisKKyAgICBkZWYgY2FjaGVWYWxpZChzZWxmLCBmbiwgYXBwZW5kcyk6CisgICAgICAgICIiIgorICAgICAgICBJcyB0aGUgY2FjaGUgdmFsaWQgZm9yIGZuPworICAgICAgICBGYXN0IHZlcnNpb24sIG5vIHRpbWVzdGFtcHMgY2hlY2tlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGZuIG5vdCBpbiBzZWxmLmNoZWNrZWQ6CisgICAgICAgICAgICBzZWxmLmNhY2hlVmFsaWRVcGRhdGUoZm4sIGFwcGVuZHMpCisKKyAgICAgICAgIyBJcyBjYWNoZSBlbmFibGVkPworICAgICAgICBpZiBub3Qgc2VsZi5oYXNfY2FjaGU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgZm4gaW4gc2VsZi5jbGVhbjoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGNhY2hlVmFsaWRVcGRhdGUoc2VsZiwgZm4sIGFwcGVuZHMpOgorICAgICAgICAiIiIKKyAgICAgICAgSXMgdGhlIGNhY2hlIHZhbGlkIGZvciBmbj8KKyAgICAgICAgTWFrZSB0aG9yb3VnaCAoc2xvd2VyKSBjaGVja3MgaW5jbHVkaW5nIHRpbWVzdGFtcHMuCisgICAgICAgICIiIgorICAgICAgICAjIElzIGNhY2hlIGVuYWJsZWQ/CisgICAgICAgIGlmIG5vdCBzZWxmLmhhc19jYWNoZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHNlbGYuY2hlY2tlZC5hZGQoZm4pCisKKyAgICAgICAgIyBGaWxlIGlzbid0IGluIGRlcGVuZHNfY2FjaGUKKyAgICAgICAgaWYgbm90IGZuIGluIHNlbGYuZGVwZW5kc19jYWNoZToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiQ2FjaGU6ICVzIGlzIG5vdCBjYWNoZWQiLCBmbikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIG10aW1lID0gYmIucGFyc2UuY2FjaGVkX210aW1lX25vZXJyb3IoZm4pCisKKyAgICAgICAgIyBDaGVjayBmaWxlIHN0aWxsIGV4aXN0cworICAgICAgICBpZiBtdGltZSA9PSAwOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJDYWNoZTogJXMgbm8gbG9uZ2VyIGV4aXN0cyIsIGZuKQorICAgICAgICAgICAgc2VsZi5yZW1vdmUoZm4pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpbmZvX2FycmF5ID0gc2VsZi5kZXBlbmRzX2NhY2hlW2ZuXQorICAgICAgICAjIENoZWNrIHRoZSBmaWxlJ3MgdGltZXN0YW1wCisgICAgICAgIGlmIG10aW1lICE9IGluZm9fYXJyYXlbMF0udGltZXN0YW1wOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJDYWNoZTogJXMgY2hhbmdlZCIsIGZuKQorICAgICAgICAgICAgc2VsZi5yZW1vdmUoZm4pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAjIENoZWNrIGRlcGVuZGVuY2llcyBhcmUgc3RpbGwgdmFsaWQKKyAgICAgICAgZGVwZW5kcyA9IGluZm9fYXJyYXlbMF0uZmlsZV9kZXBlbmRzCisgICAgICAgIGlmIGRlcGVuZHM6CisgICAgICAgICAgICBmb3IgZiwgb2xkX210aW1lIGluIGRlcGVuZHM6CisgICAgICAgICAgICAgICAgZm10aW1lID0gYmIucGFyc2UuY2FjaGVkX210aW1lX25vZXJyb3IoZikKKyAgICAgICAgICAgICAgICAjIENoZWNrIGlmIGZpbGUgc3RpbGwgZXhpc3RzCisgICAgICAgICAgICAgICAgaWYgb2xkX210aW1lICE9IDAgYW5kIGZtdGltZSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkNhY2hlOiAlcydzIGRlcGVuZGVuY3kgJXMgd2FzIHJlbW92ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4sIGYpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlKGZuKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAgICAgICAgIGlmIChmbXRpbWUgIT0gb2xkX210aW1lKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJDYWNoZTogJXMncyBkZXBlbmRlbmN5ICVzIGNoYW5nZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4sIGYpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlKGZuKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBoYXNhdHRyKGluZm9fYXJyYXlbMF0sICdmaWxlX2NoZWNrc3VtcycpOgorICAgICAgICAgICAgZm9yIF8sIGZsIGluIGluZm9fYXJyYXlbMF0uZmlsZV9jaGVja3N1bXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBmbC5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBpZiAiKiIgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGYsIGV4aXN0ID0gZi5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgICAgIGlmIChleGlzdCA9PSAiVHJ1ZSIgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyhmKSkgb3IgKGV4aXN0ID09ICJGYWxzZSIgYW5kIG9zLnBhdGguZXhpc3RzKGYpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiQ2FjaGU6ICVzJ3MgZmlsZSBjaGVja3N1bSBsaXN0IGZpbGUgJXMgY2hhbmdlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4sIGYpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZShmbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIGFwcGVuZHMgIT0gaW5mb19hcnJheVswXS5hcHBlbmRzOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJDYWNoZTogYXBwZW5kcyBmb3IgJXMgY2hhbmdlZCIsIGZuKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICIlcyB0byAlcyIgJSAoc3RyKGFwcGVuZHMpLCBzdHIoaW5mb19hcnJheVswXS5hcHBlbmRzKSkpCisgICAgICAgICAgICBzZWxmLnJlbW92ZShmbikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGludmFsaWQgPSBGYWxzZQorICAgICAgICBmb3IgY2xzIGluIGluZm9fYXJyYXlbMF0udmFyaWFudHM6CisgICAgICAgICAgICB2aXJ0dWFsZm4gPSBzZWxmLnJlYWxmbjJ2aXJ0dWFsKGZuLCBjbHMpCisgICAgICAgICAgICBzZWxmLmNsZWFuLmFkZCh2aXJ0dWFsZm4pCisgICAgICAgICAgICBpZiB2aXJ0dWFsZm4gbm90IGluIHNlbGYuZGVwZW5kc19jYWNoZToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkNhY2hlOiAlcyBpcyBub3QgY2FjaGVkIiwgdmlydHVhbGZuKQorICAgICAgICAgICAgICAgIGludmFsaWQgPSBUcnVlCisKKyAgICAgICAgIyBJZiBhbnkgb25lIG9mIHRoZSB2YXJpYW50cyBpcyBub3QgcHJlc2VudCwgbWFyayBhcyBpbnZhbGlkIGZvciBhbGwKKyAgICAgICAgaWYgaW52YWxpZDoKKyAgICAgICAgICAgIGZvciBjbHMgaW4gaW5mb19hcnJheVswXS52YXJpYW50czoKKyAgICAgICAgICAgICAgICB2aXJ0dWFsZm4gPSBzZWxmLnJlYWxmbjJ2aXJ0dWFsKGZuLCBjbHMpCisgICAgICAgICAgICAgICAgaWYgdmlydHVhbGZuIGluIHNlbGYuY2xlYW46CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiQ2FjaGU6IFJlbW92aW5nICVzIGZyb20gY2FjaGUiLCB2aXJ0dWFsZm4pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xlYW4ucmVtb3ZlKHZpcnR1YWxmbikKKyAgICAgICAgICAgIGlmIGZuIGluIHNlbGYuY2xlYW46CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJDYWNoZTogTWFya2luZyAlcyBhcyBub3QgY2xlYW4iLCBmbikKKyAgICAgICAgICAgICAgICBzZWxmLmNsZWFuLnJlbW92ZShmbikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHNlbGYuY2xlYW4uYWRkKGZuKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHJlbW92ZShzZWxmLCBmbik6CisgICAgICAgICIiIgorICAgICAgICBSZW1vdmUgYSBmbiBmcm9tIHRoZSBjYWNoZQorICAgICAgICBDYWxsZWQgZnJvbSB0aGUgcGFyc2VyIGluIGVycm9yIGNhc2VzCisgICAgICAgICIiIgorICAgICAgICBpZiBmbiBpbiBzZWxmLmRlcGVuZHNfY2FjaGU6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJlbW92aW5nICVzIGZyb20gY2FjaGUiLCBmbikKKyAgICAgICAgICAgIGRlbCBzZWxmLmRlcGVuZHNfY2FjaGVbZm5dCisgICAgICAgIGlmIGZuIGluIHNlbGYuY2xlYW46CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIk1hcmtpbmcgJXMgYXMgdW5jbGVhbiIsIGZuKQorICAgICAgICAgICAgc2VsZi5jbGVhbi5yZW1vdmUoZm4pCisKKyAgICBkZWYgc3luYyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFNhdmUgdGhlIGNhY2hlCisgICAgICAgIENhbGxlZCBmcm9tIHRoZSBwYXJzZXIgd2hlbiBjb21wbGV0ZSAob3IgZXhpdGluZykKKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgbm90IHNlbGYuaGFzX2NhY2hlOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5jYWNoZWNsZWFuOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJDYWNoZSBpcyBjbGVhbiwgbm90IHNhdmluZy4iKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZmlsZV9kaWN0ID0ge30KKyAgICAgICAgcGlja2xlcl9kaWN0ID0ge30KKyAgICAgICAgZm9yIGNhY2hlX2NsYXNzIGluIHNlbGYuY2FjaGVzX2FycmF5OgorICAgICAgICAgICAgaWYgdHlwZShjYWNoZV9jbGFzcykgaXMgdHlwZSBhbmQgaXNzdWJjbGFzcyhjYWNoZV9jbGFzcywgUmVjaXBlSW5mb0NvbW1vbik6CisgICAgICAgICAgICAgICAgY2FjaGVfY2xhc3NfbmFtZSA9IGNhY2hlX2NsYXNzLl9fbmFtZV9fCisgICAgICAgICAgICAgICAgY2FjaGVmaWxlID0gZ2V0Q2FjaGVGaWxlKHNlbGYuY2FjaGVkaXIsIGNhY2hlX2NsYXNzLmNhY2hlZmlsZSwgc2VsZi5kYXRhX2hhc2gpCisgICAgICAgICAgICAgICAgZmlsZV9kaWN0W2NhY2hlX2NsYXNzX25hbWVdID0gb3BlbihjYWNoZWZpbGUsICJ3YiIpCisgICAgICAgICAgICAgICAgcGlja2xlcl9kaWN0W2NhY2hlX2NsYXNzX25hbWVdID0gIHBpY2tsZS5QaWNrbGVyKGZpbGVfZGljdFtjYWNoZV9jbGFzc19uYW1lXSwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wpCisgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHBpY2tsZXJfZGljdFsnQ29yZVJlY2lwZUluZm8nXS5kdW1wKF9fY2FjaGVfdmVyc2lvbl9fKQorICAgICAgICBwaWNrbGVyX2RpY3RbJ0NvcmVSZWNpcGVJbmZvJ10uZHVtcChiYi5fX3ZlcnNpb25fXykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3Iga2V5LCBpbmZvX2FycmF5IGluIHNlbGYuZGVwZW5kc19jYWNoZS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBmb3IgaW5mbyBpbiBpbmZvX2FycmF5OgorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGluZm8sIFJlY2lwZUluZm9Db21tb24pOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVfY2xhc3NfbmFtZSA9IGluZm8uX19jbGFzc19fLl9fbmFtZV9fCisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVyX2RpY3RbY2FjaGVfY2xhc3NfbmFtZV0uZHVtcChrZXkpCisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVyX2RpY3RbY2FjaGVfY2xhc3NfbmFtZV0uZHVtcChpbmZvKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZm9yIGNhY2hlX2NsYXNzIGluIHNlbGYuY2FjaGVzX2FycmF5OgorICAgICAgICAgICAgICAgIGlmIHR5cGUoY2FjaGVfY2xhc3MpIGlzIHR5cGUgYW5kIGlzc3ViY2xhc3MoY2FjaGVfY2xhc3MsIFJlY2lwZUluZm9Db21tb24pOgorICAgICAgICAgICAgICAgICAgICBjYWNoZV9jbGFzc19uYW1lID0gY2FjaGVfY2xhc3MuX19uYW1lX18KKyAgICAgICAgICAgICAgICAgICAgZmlsZV9kaWN0W2NhY2hlX2NsYXNzX25hbWVdLmNsb3NlKCkKKworICAgICAgICBkZWwgc2VsZi5kZXBlbmRzX2NhY2hlCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG10aW1lKGNhY2hlZmlsZSk6CisgICAgICAgIHJldHVybiBiYi5wYXJzZS5jYWNoZWRfbXRpbWVfbm9lcnJvcihjYWNoZWZpbGUpCisKKyAgICBkZWYgYWRkX2luZm8oc2VsZiwgZmlsZW5hbWUsIGluZm9fYXJyYXksIGNhY2hlRGF0YSwgcGFyc2VkPU5vbmUsIHdhdGNoZXI9Tm9uZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoaW5mb19hcnJheVswXSwgQ29yZVJlY2lwZUluZm8pIGFuZCAobm90IGluZm9fYXJyYXlbMF0uc2tpcHBlZCk6CisgICAgICAgICAgICBjYWNoZURhdGEuYWRkX2Zyb21fcmVjaXBlaW5mbyhmaWxlbmFtZSwgaW5mb19hcnJheSkKKworICAgICAgICAgICAgaWYgd2F0Y2hlcjoKKyAgICAgICAgICAgICAgICB3YXRjaGVyKGluZm9fYXJyYXlbMF0uZmlsZV9kZXBlbmRzKQorCisgICAgICAgIGlmIG5vdCBzZWxmLmhhc19jYWNoZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIChpbmZvX2FycmF5WzBdLnNraXBwZWQgb3IgJ1NSQ1JFVklOQUNUSU9OJyBub3QgaW4gaW5mb19hcnJheVswXS5wdikgYW5kIG5vdCBpbmZvX2FycmF5WzBdLm5vY2FjaGU6CisgICAgICAgICAgICBpZiBwYXJzZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5jYWNoZWNsZWFuID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuZGVwZW5kc19jYWNoZVtmaWxlbmFtZV0gPSBpbmZvX2FycmF5CisKKyAgICBkZWYgYWRkKHNlbGYsIGZpbGVfbmFtZSwgZGF0YSwgY2FjaGVEYXRhLCBwYXJzZWQ9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBTYXZlIGRhdGEgd2UgbmVlZCBpbnRvIHRoZSBjYWNoZQorICAgICAgICAiIiIKKworICAgICAgICByZWFsZm4gPSBzZWxmLnZpcnR1YWxmbjJyZWFsZm4oZmlsZV9uYW1lKVswXQorCisgICAgICAgIGluZm9fYXJyYXkgPSBbXQorICAgICAgICBmb3IgY2FjaGVfY2xhc3MgaW4gc2VsZi5jYWNoZXNfYXJyYXk6CisgICAgICAgICAgICBpZiB0eXBlKGNhY2hlX2NsYXNzKSBpcyB0eXBlIGFuZCBpc3N1YmNsYXNzKGNhY2hlX2NsYXNzLCBSZWNpcGVJbmZvQ29tbW9uKToKKyAgICAgICAgICAgICAgICBpbmZvX2FycmF5LmFwcGVuZChjYWNoZV9jbGFzcyhyZWFsZm4sIGRhdGEpKQorICAgICAgICBzZWxmLmFkZF9pbmZvKGZpbGVfbmFtZSwgaW5mb19hcnJheSwgY2FjaGVEYXRhLCBwYXJzZWQpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGxvYWRfYmJmaWxlKGJiZmlsZSwgYXBwZW5kcywgY29uZmlnKToKKyAgICAgICAgIiIiCisgICAgICAgIExvYWQgYW5kIHBhcnNlIG9uZSAuYmIgYnVpbGQgZmlsZQorICAgICAgICBSZXR1cm4gdGhlIGRhdGEgYW5kIHdoZXRoZXIgcGFyc2luZyByZXN1bHRlZCBpbiB0aGUgZmlsZSBiZWluZyBza2lwcGVkCisgICAgICAgICIiIgorICAgICAgICBjaGRpcl9iYWNrID0gRmFsc2UKKworICAgICAgICBmcm9tIGJiIGltcG9ydCBwYXJzZQorCisgICAgICAgICMgZXhwYW5kIHRtcGRpciB0byBpbmNsdWRlIHRoaXMgdG9wZGlyCisgICAgICAgIGNvbmZpZy5zZXRWYXIoJ1RNUERJUicsIGNvbmZpZy5nZXRWYXIoJ1RNUERJUicsIFRydWUpIG9yICIiKQorICAgICAgICBiYmZpbGVfbG9jID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShiYmZpbGUpKQorICAgICAgICBvbGRwYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLmdldGN3ZCgpKQorICAgICAgICBwYXJzZS5jYWNoZWRfbXRpbWVfbm9lcnJvcihiYmZpbGVfbG9jKQorICAgICAgICBiYl9kYXRhID0gY29uZmlnLmNyZWF0ZUNvcHkoKQorICAgICAgICAjIFRoZSBDb25mSGFuZGxlciBmaXJzdCBsb29rcyBpZiB0aGVyZSBpcyBhIFRPUERJUiBhbmQgaWYgbm90CisgICAgICAgICMgdGhlbiBpdCB3b3VsZCBjYWxsIGdldGN3ZCgpLgorICAgICAgICAjIFByZXZpb3VzbHksIHdlIGNoZGlyKCllZCB0byBiYmZpbGVfbG9jLCBjYWxsZWQgdGhlIGhhbmRsZXIKKyAgICAgICAgIyBhbmQgZmluYWxseSBjaGRpcigpZWQgYmFjaywgYSBjb3VwbGUgb2YgdGhvdXNhbmQgdGltZXMuIFdlIG5vdworICAgICAgICAjIGp1c3QgZmlsbCBpbiBUT1BESVIgdG8gcG9pbnQgdG8gYmJmaWxlX2xvYyBpZiB0aGVyZSBpcyBubyBUT1BESVIgeWV0LgorICAgICAgICBpZiBub3QgYmJfZGF0YS5nZXRWYXIoJ1RPUERJUicsIEZhbHNlKToKKyAgICAgICAgICAgIGNoZGlyX2JhY2sgPSBUcnVlCisgICAgICAgICAgICBiYl9kYXRhLnNldFZhcignVE9QRElSJywgYmJmaWxlX2xvYykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgYXBwZW5kczoKKyAgICAgICAgICAgICAgICBiYl9kYXRhLnNldFZhcignX19CQkFQUEVORCcsICIgIi5qb2luKGFwcGVuZHMpKQorICAgICAgICAgICAgYmJfZGF0YSA9IHBhcnNlLmhhbmRsZShiYmZpbGUsIGJiX2RhdGEpCisgICAgICAgICAgICBpZiBjaGRpcl9iYWNrOgorICAgICAgICAgICAgICAgIG9zLmNoZGlyKG9sZHBhdGgpCisgICAgICAgICAgICByZXR1cm4gYmJfZGF0YQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBpZiBjaGRpcl9iYWNrOgorICAgICAgICAgICAgICAgIG9zLmNoZGlyKG9sZHBhdGgpCisgICAgICAgICAgICByYWlzZQorCisKK2RlZiBpbml0KGNvb2tlcik6CisgICAgIiIiCisgICAgVGhlIE9iamVjdGl2ZTogQ2FjaGUgdGhlIG1pbmltdW0gYW1vdW50IG9mIGRhdGEgcG9zc2libGUgeWV0IGdldCB0byB0aGUKKyAgICBzdGFnZSBvZiBidWlsZGluZyBwYWNrYWdlcyAoaS5lLiB0cnlCdWlsZCkgd2l0aG91dCByZXBhcnNpbmcgYW55IC5iYiBmaWxlcy4KKworICAgIFRvIGRvIHRoaXMsIHdlIGludGVyY2VwdCBnZXRWYXIgY2FsbHMgYW5kIG9ubHkgY2FjaGUgdGhlIHZhcmlhYmxlcyB3ZSBzZWUKKyAgICBiZWluZyBhY2Nlc3NlZC4gV2UgcmVseSBvbiB0aGUgY2FjaGUgZ2V0VmFyIGNhbGxzIGJlaW5nIG1hZGUgZm9yIGFsbAorICAgIHZhcmlhYmxlcyBiaXRiYWtlIG1pZ2h0IG5lZWQgdG8gdXNlIHRvIHJlYWNoIHRoaXMgc3RhZ2UuIEZvciBlYWNoIGNhY2hlZAorICAgIGZpbGUgd2UgbmVlZCB0byB0cmFjazoKKworICAgICogSXRzIG10aW1lCisgICAgKiBUaGUgbXRpbWVzIG9mIGFsbCBpdHMgZGVwZW5kZW5jaWVzCisgICAgKiBXaGV0aGVyIGl0IGNhdXNlZCBhIHBhcnNlLlNraXBSZWNpcGUgZXhjZXB0aW9uCisKKyAgICBGaWxlcyBjYXVzaW5nIHBhcnNpbmcgZXJyb3JzIGFyZSBldmljdGVkIGZyb20gdGhlIGNhY2hlLgorCisgICAgIiIiCisgICAgcmV0dXJuIENhY2hlKGNvb2tlci5jb25maWd1cmF0aW9uLmRhdGEsIGNvb2tlci5jb25maWd1cmF0aW9uLmRhdGFfaGFzaCkKKworCitjbGFzcyBDYWNoZURhdGEob2JqZWN0KToKKyAgICAiIiIKKyAgICBUaGUgZGF0YSBzdHJ1Y3R1cmVzIHdlIGNvbXBpbGUgZnJvbSB0aGUgY2FjaGVkIGRhdGEKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjYWNoZXNfYXJyYXkpOgorICAgICAgICBzZWxmLmNhY2hlc19hcnJheSA9IGNhY2hlc19hcnJheQorICAgICAgICBmb3IgY2FjaGVfY2xhc3MgaW4gc2VsZi5jYWNoZXNfYXJyYXk6CisgICAgICAgICAgICBpZiB0eXBlKGNhY2hlX2NsYXNzKSBpcyB0eXBlIGFuZCBpc3N1YmNsYXNzKGNhY2hlX2NsYXNzLCBSZWNpcGVJbmZvQ29tbW9uKToKKyAgICAgICAgICAgICAgICBjYWNoZV9jbGFzcy5pbml0X2NhY2hlRGF0YShzZWxmKSAgICAgICAgCisKKyAgICAgICAgIyBEaXJlY3QgY2FjaGUgdmFyaWFibGVzCisgICAgICAgIHNlbGYudGFza19xdWV1ZXMgPSB7fQorICAgICAgICBzZWxmLnByZWZlcnJlZCA9IHt9CisgICAgICAgIHNlbGYudGFza3MgPSB7fQorICAgICAgICAjIEluZGlyZWN0IENhY2hlIHZhcmlhYmxlcyAoc2V0IGVsc2V3aGVyZSkKKyAgICAgICAgc2VsZi5pZ25vcmVkX2RlcGVuZGVuY2llcyA9IFtdCisgICAgICAgIHNlbGYud29ybGRfdGFyZ2V0ID0gc2V0KCkKKyAgICAgICAgc2VsZi5iYmZpbGVfcHJpb3JpdHkgPSB7fQorCisgICAgZGVmIGFkZF9mcm9tX3JlY2lwZWluZm8oc2VsZiwgZm4sIGluZm9fYXJyYXkpOgorICAgICAgICBmb3IgaW5mbyBpbiBpbmZvX2FycmF5OgorICAgICAgICAgICAgaW5mby5hZGRfY2FjaGVEYXRhKHNlbGYsIGZuKQorCitjbGFzcyBNdWx0aVByb2Nlc3NDYWNoZShvYmplY3QpOgorICAgICIiIgorICAgIEJpdEJha2UgbXVsdGktcHJvY2VzcyBjYWNoZSBpbXBsZW1lbnRhdGlvbgorCisgICAgVXNlZCBieSB0aGUgY29kZXBhcnNlciAmIGZpbGUgY2hlY2tzdW0gY2FjaGVzCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuY2FjaGVmaWxlID0gTm9uZQorICAgICAgICBzZWxmLmNhY2hlZGF0YSA9IHNlbGYuY3JlYXRlX2NhY2hlZGF0YSgpCisgICAgICAgIHNlbGYuY2FjaGVkYXRhX2V4dHJhcyA9IHNlbGYuY3JlYXRlX2NhY2hlZGF0YSgpCisKKyAgICBkZWYgaW5pdF9jYWNoZShzZWxmLCBkKToKKyAgICAgICAgY2FjaGVkaXIgPSAoZC5nZXRWYXIoIlBFUlNJU1RFTlRfRElSIiwgVHJ1ZSkgb3IKKyAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoIkNBQ0hFIiwgVHJ1ZSkpCisgICAgICAgIGlmIGNhY2hlZGlyIGluIFtOb25lLCAnJ106CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGNhY2hlZGlyKQorICAgICAgICBzZWxmLmNhY2hlZmlsZSA9IG9zLnBhdGguam9pbihjYWNoZWRpciwgc2VsZi5fX2NsYXNzX18uY2FjaGVfZmlsZV9uYW1lKQorICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlVzaW5nIGNhY2hlIGluICclcyciLCBzZWxmLmNhY2hlZmlsZSkKKworICAgICAgICBnbGYgPSBiYi51dGlscy5sb2NrZmlsZShzZWxmLmNhY2hlZmlsZSArICIubG9jayIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuY2FjaGVmaWxlLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIHAgPSBwaWNrbGUuVW5waWNrbGVyKGYpCisgICAgICAgICAgICAgICAgZGF0YSwgdmVyc2lvbiA9IHAubG9hZCgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUoZ2xmKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShnbGYpCisKKyAgICAgICAgaWYgdmVyc2lvbiAhPSBzZWxmLl9fY2xhc3NfXy5DQUNIRV9WRVJTSU9OOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5jYWNoZWRhdGEgPSBkYXRhCisKKyAgICBkZWYgY3JlYXRlX2NhY2hlZGF0YShzZWxmKToKKyAgICAgICAgZGF0YSA9IFt7fV0KKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiBzYXZlX2V4dHJhcyhzZWxmLCBkKToKKyAgICAgICAgaWYgbm90IHNlbGYuY2FjaGVmaWxlOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZ2xmID0gYmIudXRpbHMubG9ja2ZpbGUoc2VsZi5jYWNoZWZpbGUgKyAiLmxvY2siLCBzaGFyZWQ9VHJ1ZSkKKworICAgICAgICBpID0gb3MuZ2V0cGlkKCkKKyAgICAgICAgbGYgPSBOb25lCisgICAgICAgIHdoaWxlIG5vdCBsZjoKKyAgICAgICAgICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUoc2VsZi5jYWNoZWZpbGUgKyAiLmxvY2suIiArIHN0cihpKSwgcmV0cnk9RmFsc2UpCisgICAgICAgICAgICBpZiBub3QgbGYgb3Igb3MucGF0aC5leGlzdHMoc2VsZi5jYWNoZWZpbGUgKyAiLSIgKyBzdHIoaSkpOgorICAgICAgICAgICAgICAgIGlmIGxmOgorICAgICAgICAgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgICAgICAgICBsZiA9IE5vbmUKKyAgICAgICAgICAgICAgICBpID0gaSArIDEKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5jYWNoZWZpbGUgKyAiLSIgKyBzdHIoaSksICJ3YiIpIGFzIGY6CisgICAgICAgICAgICAgICAgcCA9IHBpY2tsZS5QaWNrbGVyKGYsIC0xKQorICAgICAgICAgICAgICAgIHAuZHVtcChbc2VsZi5jYWNoZWRhdGFfZXh0cmFzLCBzZWxmLl9fY2xhc3NfXy5DQUNIRV9WRVJTSU9OXSkKKworICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGdsZikKKworICAgIGRlZiBtZXJnZV9kYXRhKHNlbGYsIHNvdXJjZSwgZGVzdCk6CisgICAgICAgIGZvciBqIGluIHJhbmdlKDAsbGVuKGRlc3QpKToKKyAgICAgICAgICAgIGZvciBoIGluIHNvdXJjZVtqXToKKyAgICAgICAgICAgICAgICBpZiBoIG5vdCBpbiBkZXN0W2pdOgorICAgICAgICAgICAgICAgICAgICBkZXN0W2pdW2hdID0gc291cmNlW2pdW2hdCisKKyAgICBkZWYgc2F2ZV9tZXJnZShzZWxmLCBkKToKKyAgICAgICAgaWYgbm90IHNlbGYuY2FjaGVmaWxlOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZ2xmID0gYmIudXRpbHMubG9ja2ZpbGUoc2VsZi5jYWNoZWZpbGUgKyAiLmxvY2siKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmNhY2hlZGF0YQorCisgICAgICAgIGZvciBmIGluIFt5IGZvciB5IGluIG9zLmxpc3RkaXIob3MucGF0aC5kaXJuYW1lKHNlbGYuY2FjaGVmaWxlKSkgaWYgeS5zdGFydHN3aXRoKG9zLnBhdGguYmFzZW5hbWUoc2VsZi5jYWNoZWZpbGUpICsgJy0nKV06CisgICAgICAgICAgICBmID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzZWxmLmNhY2hlZmlsZSksIGYpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGYsICJyYiIpIGFzIGZkOgorICAgICAgICAgICAgICAgICAgICBwID0gcGlja2xlLlVucGlja2xlcihmZCkKKyAgICAgICAgICAgICAgICAgICAgZXh0cmFkYXRhLCB2ZXJzaW9uID0gcC5sb2FkKCkKKyAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgRU9GRXJyb3IpOgorICAgICAgICAgICAgICAgIG9zLnVubGluayhmKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIHZlcnNpb24gIT0gc2VsZi5fX2NsYXNzX18uQ0FDSEVfVkVSU0lPTjoKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoZikKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBzZWxmLm1lcmdlX2RhdGEoZXh0cmFkYXRhLCBkYXRhKQorICAgICAgICAgICAgb3MudW5saW5rKGYpCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuY2FjaGVmaWxlLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgcCA9IHBpY2tsZS5QaWNrbGVyKGYsIC0xKQorICAgICAgICAgICAgcC5kdW1wKFtkYXRhLCBzZWxmLl9fY2xhc3NfXy5DQUNIRV9WRVJTSU9OXSkKKworICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGdsZikKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jYWNoZV9leHRyYS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY2FjaGVfZXh0cmEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNmNDk1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY2FjaGVfZXh0cmEucHkKQEAgLTAsMCArMSw3NSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgRXh0cmEgUmVjaXBlSW5mbyB3aWxsIGJlIGFsbCBkZWZpbmVkIGluIHRoaXMgZmlsZS4gQ3VycmVudGx5LAorIyBPbmx5IEhvYiAoSW1hZ2UgQ3JlYXRvcikgUmVxdWVzdHMgc29tZSBleHRyYSBmaWVsZHMuIFNvCisjIEhvYlJlY2lwZUluZm8gaXMgZGVmaW5lZC4gSXQncyBuYW1lZCBIb2JSZWNpcGVJbmZvIGJlY2F1c2UgaXQKKyMgaXMgaW50cm9kdWNlZCBieSAnaG9iJy4gVXNlcnMgY291bGQgYWxzbyBpbnRyb2R1Y2Ugb3RoZXIKKyMgUmVjaXBlSW5mbyBvciBzaW1wbHkgdXNlIHRob3NlIGFscmVhZHkgZGVmaW5lZCBSZWNpcGVJbmZvLgorIyBJbiB0aGUgZm9sbG93aW5nIHBhdGNoLCB0aGlzIG5ld2x5IGRlZmluZWQgbmV3IGV4dHJhIFJlY2lwZUluZm8KKyMgd2lsbCBiZSBkeW5hbWljYWxseSBsb2FkZWQgYW5kIHVzZWQgZm9yIGxvYWRpbmcvc2F2aW5nIHRoZSBleHRyYQorIyBjYWNoZSBmaWVsZHMgIAorCisjIENvcHlyaWdodCAoQykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gYmIuY2FjaGUgaW1wb3J0IFJlY2lwZUluZm9Db21tb24KKworY2xhc3MgSG9iUmVjaXBlSW5mbyhSZWNpcGVJbmZvQ29tbW9uKToKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgY2xhc3NuYW1lID0gIkhvYlJlY2lwZUluZm8iCisgICAgIyBwbGVhc2Ugb3ZlcnJpZGUgdGhpcyBtZW1iZXIgd2l0aCB0aGUgY29ycmVjdCBkYXRhIGNhY2hlIGZpbGUKKyAgICAjIHN1Y2ggYXMgKGJiX2NhY2hlLmRhdCwgYmJfZXh0cmFjYWNoZV9ob2IuZGF0KSAKKyAgICBjYWNoZWZpbGUgPSAiYmJfZXh0cmFjYWNoZV8iICsgY2xhc3NuYW1lICsiLmRhdCIgICAgICAgIAorCisgICAgIyBvdmVycmlkZSB0aGlzIG1lbWJlciB3aXRoIHRoZSBsaXN0IG9mIGV4dHJhIGNhY2hlIGZpZWxkcworICAgICMgdGhhdCB0aGlzIGNsYXNzIHdpbGwgcHJvdmlkZQorICAgIGNhY2hlZmllbGRzID0gWydzdW1tYXJ5JywgJ2xpY2Vuc2UnLCAnc2VjdGlvbicsCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nLCAnaG9tZXBhZ2UnLCAnYnVndHJhY2tlcicsCisgICAgICAgICAgICAncHJldmlzaW9uJywgJ2ZpbGVzX2luZm8nXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBtZXRhZGF0YSk6CisKKyAgICAgICAgc2VsZi5zdW1tYXJ5ID0gc2VsZi5nZXR2YXIoJ1NVTU1BUlknLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5saWNlbnNlID0gc2VsZi5nZXR2YXIoJ0xJQ0VOU0UnLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5zZWN0aW9uID0gc2VsZi5nZXR2YXIoJ1NFQ1RJT04nLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IHNlbGYuZ2V0dmFyKCdERVNDUklQVElPTicsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLmhvbWVwYWdlID0gc2VsZi5nZXR2YXIoJ0hPTUVQQUdFJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYuYnVndHJhY2tlciA9IHNlbGYuZ2V0dmFyKCdCVUdUUkFDS0VSJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYucHJldmlzaW9uID0gc2VsZi5nZXR2YXIoJ1BSJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYuZmlsZXNfaW5mbyA9IHNlbGYuZ2V0dmFyKCdGSUxFU19JTkZPJywgbWV0YWRhdGEpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgaW5pdF9jYWNoZURhdGEoY2xzLCBjYWNoZWRhdGEpOgorICAgICAgICAjIENhY2hlRGF0YSBpbiBIb2IgUmVjaXBlSW5mbyBDbGFzcworICAgICAgICBjYWNoZWRhdGEuc3VtbWFyeSA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5saWNlbnNlID0ge30KKyAgICAgICAgY2FjaGVkYXRhLnNlY3Rpb24gPSB7fQorICAgICAgICBjYWNoZWRhdGEuZGVzY3JpcHRpb24gPSB7fQorICAgICAgICBjYWNoZWRhdGEuaG9tZXBhZ2UgPSB7fQorICAgICAgICBjYWNoZWRhdGEuYnVndHJhY2tlciA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5wcmV2aXNpb24gPSB7fQorICAgICAgICBjYWNoZWRhdGEuZmlsZXNfaW5mbyA9IHt9CisKKyAgICBkZWYgYWRkX2NhY2hlRGF0YShzZWxmLCBjYWNoZWRhdGEsIGZuKToKKyAgICAgICAgY2FjaGVkYXRhLnN1bW1hcnlbZm5dID0gc2VsZi5zdW1tYXJ5CisgICAgICAgIGNhY2hlZGF0YS5saWNlbnNlW2ZuXSA9IHNlbGYubGljZW5zZQorICAgICAgICBjYWNoZWRhdGEuc2VjdGlvbltmbl0gPSBzZWxmLnNlY3Rpb24KKyAgICAgICAgY2FjaGVkYXRhLmRlc2NyaXB0aW9uW2ZuXSA9IHNlbGYuZGVzY3JpcHRpb24KKyAgICAgICAgY2FjaGVkYXRhLmhvbWVwYWdlW2ZuXSA9IHNlbGYuaG9tZXBhZ2UKKyAgICAgICAgY2FjaGVkYXRhLmJ1Z3RyYWNrZXJbZm5dID0gc2VsZi5idWd0cmFja2VyCisgICAgICAgIGNhY2hlZGF0YS5wcmV2aXNpb25bZm5dID0gc2VsZi5wcmV2aXNpb24KKyAgICAgICAgY2FjaGVkYXRhLmZpbGVzX2luZm9bZm5dID0gc2VsZi5maWxlc19pbmZvCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2NoZWNrc3VtLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jaGVja3N1bS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTRmZjBiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jaGVja3N1bS5weQpAQCAtMCwwICsxLDkwIEBACisjIExvY2FsIGZpbGUgY2hlY2tzdW0gY2FjaGUgaW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzdGF0CitpbXBvcnQgYmIudXRpbHMKK2ltcG9ydCBsb2dnaW5nCitmcm9tIGJiLmNhY2hlIGltcG9ydCBNdWx0aVByb2Nlc3NDYWNoZQorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5DYWNoZSIpCisKK3RyeToKKyAgICBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgcGlja2xlCisgICAgbG9nZ2VyLmluZm8oIkltcG9ydGluZyBjUGlja2xlIGZhaWxlZC4gIgorICAgICAgICAgICAgICAgICJGYWxsaW5nIGJhY2sgdG8gYSB2ZXJ5IHNsb3cgaW1wbGVtZW50YXRpb24uIikKKworCisjIG10aW1lIGNhY2hlIChub24tcGVyc2lzdGVudCkKKyMgYmFzZWQgdXBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGZpbGVzIGRvIG5vdCBjaGFuZ2UgZHVyaW5nIGJpdGJha2UgcnVuCitjbGFzcyBGaWxlTXRpbWVDYWNoZShvYmplY3QpOgorICAgIGNhY2hlID0ge30KKworICAgIGRlZiBjYWNoZWRfbXRpbWUoc2VsZiwgZik6CisgICAgICAgIGlmIGYgbm90IGluIHNlbGYuY2FjaGU6CisgICAgICAgICAgICBzZWxmLmNhY2hlW2ZdID0gb3Muc3RhdChmKVtzdGF0LlNUX01USU1FXQorICAgICAgICByZXR1cm4gc2VsZi5jYWNoZVtmXQorCisgICAgZGVmIGNhY2hlZF9tdGltZV9ub2Vycm9yKHNlbGYsIGYpOgorICAgICAgICBpZiBmIG5vdCBpbiBzZWxmLmNhY2hlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuY2FjaGVbZl0gPSBvcy5zdGF0KGYpW3N0YXQuU1RfTVRJTUVdCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICByZXR1cm4gc2VsZi5jYWNoZVtmXQorCisgICAgZGVmIHVwZGF0ZV9tdGltZShzZWxmLCBmKToKKyAgICAgICAgc2VsZi5jYWNoZVtmXSA9IG9zLnN0YXQoZilbc3RhdC5TVF9NVElNRV0KKyAgICAgICAgcmV0dXJuIHNlbGYuY2FjaGVbZl0KKworICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgc2VsZi5jYWNoZS5jbGVhcigpCisKKyMgQ2hlY2tzdW0gKyBtdGltZSBjYWNoZSAocGVyc2lzdGVudCkKK2NsYXNzIEZpbGVDaGVja3N1bUNhY2hlKE11bHRpUHJvY2Vzc0NhY2hlKToKKyAgICBjYWNoZV9maWxlX25hbWUgPSAibG9jYWxfZmlsZV9jaGVja3N1bV9jYWNoZS5kYXQiCisgICAgQ0FDSEVfVkVSU0lPTiA9IDEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5tdGltZV9jYWNoZSA9IEZpbGVNdGltZUNhY2hlKCkKKyAgICAgICAgTXVsdGlQcm9jZXNzQ2FjaGUuX19pbml0X18oc2VsZikKKworICAgIGRlZiBnZXRfY2hlY2tzdW0oc2VsZiwgZik6CisgICAgICAgIGVudHJ5ID0gc2VsZi5jYWNoZWRhdGFbMF0uZ2V0KGYpCisgICAgICAgIGNtdGltZSA9IHNlbGYubXRpbWVfY2FjaGUuY2FjaGVkX210aW1lKGYpCisgICAgICAgIGlmIGVudHJ5OgorICAgICAgICAgICAgKG10aW1lLCBoYXNodmFsKSA9IGVudHJ5CisgICAgICAgICAgICBpZiBjbXRpbWUgPT0gbXRpbWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGhhc2h2YWwKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYmIuZGVidWcoMiwgImZpbGUgJXMgY2hhbmdlZCBtdGltZSwgcmVjb21wdXRlIGNoZWNrc3VtIiAlIGYpCisKKyAgICAgICAgaGFzaHZhbCA9IGJiLnV0aWxzLm1kNV9maWxlKGYpCisgICAgICAgIHNlbGYuY2FjaGVkYXRhX2V4dHJhc1swXVtmXSA9IChjbXRpbWUsIGhhc2h2YWwpCisgICAgICAgIHJldHVybiBoYXNodmFsCisKKyAgICBkZWYgbWVyZ2VfZGF0YShzZWxmLCBzb3VyY2UsIGRlc3QpOgorICAgICAgICBmb3IgaCBpbiBzb3VyY2VbMF06CisgICAgICAgICAgICBpZiBoIGluIGRlc3Q6CisgICAgICAgICAgICAgICAgKHNtdGltZSwgXykgPSBzb3VyY2VbMF1baF0KKyAgICAgICAgICAgICAgICAoZG10aW1lLCBfKSA9IGRlc3RbMF1baF0KKyAgICAgICAgICAgICAgICBpZiBzbXRpbWUgPiBkbXRpbWU6CisgICAgICAgICAgICAgICAgICAgIGRlc3RbMF1baF0gPSBzb3VyY2VbMF1baF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVzdFswXVtoXSA9IHNvdXJjZVswXVtoXQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jb2RlcGFyc2VyLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jb2RlcGFyc2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYTNhZjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2NvZGVwYXJzZXIucHkKQEAgLTAsMCArMSw0MTQgQEAKK2ltcG9ydCBhc3QKK2ltcG9ydCBjb2RlZ2VuCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBiYi51dGlscywgYmIuZGF0YQorZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNoYWluCitmcm9tIHB5c2ggaW1wb3J0IHB5c2h5YWNjLCBweXNobGV4LCBzaGVycm9ycworZnJvbSBiYi5jYWNoZSBpbXBvcnQgTXVsdGlQcm9jZXNzQ2FjaGUKKworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZS5Db2RlUGFyc2VyJykKKwordHJ5OgorICAgIGltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGltcG9ydCBwaWNrbGUKKyAgICBsb2dnZXIuaW5mbygnSW1wb3J0aW5nIGNQaWNrbGUgZmFpbGVkLiAgRmFsbGluZyBiYWNrIHRvIGEgdmVyeSBzbG93IGltcGxlbWVudGF0aW9uLicpCisKKworZGVmIGNoZWNrX2luZGVudChjb2Rlc3RyKToKKyAgICAiIiJJZiB0aGUgY29kZSBpcyBpbmRlbnRlZCwgYWRkIGEgdG9wIGxldmVsIHBpZWNlIG9mIGNvZGUgdG8gJ3JlbW92ZScgdGhlIGluZGVudGF0aW9uIiIiCisKKyAgICBpID0gMAorICAgIHdoaWxlIGNvZGVzdHJbaV0gaW4gWyJcbiIsICJcdCIsICIgIl06CisgICAgICAgIGkgPSBpICsgMQorCisgICAgaWYgaSA9PSAwOgorICAgICAgICByZXR1cm4gY29kZXN0cgorCisgICAgaWYgY29kZXN0cltpLTFdID09ICJcdCIgb3IgY29kZXN0cltpLTFdID09ICIgIjoKKyAgICAgICAgcmV0dXJuICJpZiAxOlxuIiArIGNvZGVzdHIKKworICAgIHJldHVybiBjb2Rlc3RyCisKKworIyBCYXNpY2FsbHkgcGlja2xlLCBpbiBweXRob24gMi43LjMgYXQgbGVhc3QsIGRvZXMgYmFkbHkgd2l0aCBkYXRhIGR1cGxpY2F0aW9uIAorIyB1cG9uIHBpY2tsaW5nIGFuZCB1bnBpY2tsaW5nLiBDb21iaW5lIHRoaXMgd2l0aCBkdXBsaWNhdGUgb2JqZWN0cyBhbmQgdGhpbmdzCisjIGFyZSBhIG1lc3MuCisjCisjIFdoZW4gdGhlIHNldHMgYXJlIG9yaWdpbmFsbHkgY3JlYXRlZCwgcHl0aG9uIGNhbGxzIGludGVybigpIG9uIHRoZSBzZXQga2V5cworIyB3aGljaCBzaWduaWZpY2FudGx5IGltcHJvdmVzIG1lbW9yeSB1c2FnZS4gU2FkbHkgdGhlIHBpY2tsZS91bnBpY2tsZSBwcm9jZXNzCisjIGRvZXNuJ3QgY2FsbCBpbnRlcm4oKSBvbiB0aGUga2V5cyBhbmQgcmVzdWx0cyBpbiB0aGUgc2FtZSBzdHJpbmdzIGJlaW5nIGR1cGxpY2F0ZWQKKyMgaW4gbWVtb3J5LiBUaGlzIGFsc28gbWVhbnMgcGlja2xlIHdpbGwgc2F2ZSB0aGUgc2FtZSBzdHJpbmcgbXVsdGlwbGUgdGltZXMgaW4KKyMgdGhlIGNhY2hlIGZpbGUuCisjCisjIEJ5IGhhdmluZyBzaGVsbCBhbmQgcHl0aG9uIGNhY2hlbGluZSBvYmplY3RzIHdpdGggc2V0c3RhdGUvZ2V0c3RhdGUsIHdlIGZvcmNlCisjIHRoZSBvYmplY3QgY3JlYXRpb24gdGhyb3VnaCBvdXIgb3duIHJvdXRpbmUgd2hlcmUgd2UgY2FuIGNhbGwgaW50ZXJuICh2aWEgaW50ZXJuU2V0KS4KKyMKKyMgV2UgYWxzbyB1c2UgaGFzaGFibGUgZnJvemVuc2V0cyBhbmQgZW5zdXJlIHdlIHVzZSByZWZlcmVuY2VzIHRvIHRoZXNlIHNvIHRoYXQKKyMgZHVwbGljYXRlcyBjYW4gYmUgcmVtb3ZlZCwgYm90aCBpbiBtZW1vcnkgYW5kIGluIHRoZSByZXN1bHRpbmcgcGlja2xlZCBkYXRhLgorIworIyBCeSBwbGF5aW5nIHRoZXNlIGdhbWVzLCB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUgZmlsZSBzaHJpbmtzIGRyYW1hdGljYWxseQorIyBtZWFuaW5nIGZhc3RlciBsb2FkIHRpbWVzIGFuZCB0aGUgcmVsb2FkZWQgY2FjaGUgZmlsZXMgYWxzbyBjb25zdW1lIG11Y2ggbGVzcworIyBtZW1vcnkuIFNtYWxsZXIgY2FjaGUgZmlsZXMsIGZhc3RlciBsb2FkIHRpbWVzIGFuZCBsb3dlciBtZW1vcnkgdXNhZ2UgaXMgZ29vZC4KKyMKKyMgQSBjdXN0b20gZ2V0c3RhdGUvc2V0c3RhdGUgdXNpbmcgdHVwbGVzIGlzIGFjdHVhbGx5IHdvcnRoIDE1JSBjYWNoZXNpemUgYnkKKyMgYXZvaWRpbmcgZHVwbGljYXRpb24gb2YgdGhlIGF0dHJpYnV0ZSBuYW1lcyEKKworY2xhc3MgU2V0Q2FjaGUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuc2V0Y2FjaGUgPSB7fQorCisgICAgZGVmIGludGVyblNldChzZWxmLCBpdGVtcyk6CisgICAgICAgIAorICAgICAgICBuZXcgPSBbXQorICAgICAgICBmb3IgaSBpbiBpdGVtczoKKyAgICAgICAgICAgIG5ldy5hcHBlbmQoaW50ZXJuKGkpKQorICAgICAgICBzID0gZnJvemVuc2V0KG5ldykKKyAgICAgICAgaWYgaGFzaChzKSBpbiBzZWxmLnNldGNhY2hlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0Y2FjaGVbaGFzaChzKV0KKyAgICAgICAgc2VsZi5zZXRjYWNoZVtoYXNoKHMpXSA9IHMKKyAgICAgICAgcmV0dXJuIHMKKworY29kZWNhY2hlID0gU2V0Q2FjaGUoKQorCitjbGFzcyBweXRob25DYWNoZUxpbmUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVmcywgZXhlY3MsIGNvbnRhaW5zKToKKyAgICAgICAgc2VsZi5yZWZzID0gY29kZWNhY2hlLmludGVyblNldChyZWZzKQorICAgICAgICBzZWxmLmV4ZWNzID0gY29kZWNhY2hlLmludGVyblNldChleGVjcykKKyAgICAgICAgc2VsZi5jb250YWlucyA9IHt9CisgICAgICAgIGZvciBjIGluIGNvbnRhaW5zOgorICAgICAgICAgICAgc2VsZi5jb250YWluc1tjXSA9IGNvZGVjYWNoZS5pbnRlcm5TZXQoY29udGFpbnNbY10pCisKKyAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYucmVmcywgc2VsZi5leGVjcywgc2VsZi5jb250YWlucykKKworICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgorICAgICAgICAocmVmcywgZXhlY3MsIGNvbnRhaW5zKSA9IHN0YXRlCisgICAgICAgIHNlbGYuX19pbml0X18ocmVmcywgZXhlY3MsIGNvbnRhaW5zKQorICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgbCA9IChoYXNoKHNlbGYucmVmcyksIGhhc2goc2VsZi5leGVjcykpCisgICAgICAgIGZvciBjIGluIHNvcnRlZChzZWxmLmNvbnRhaW5zLmtleXMoKSk6CisgICAgICAgICAgICBsID0gbCArIChjLCBoYXNoKHNlbGYuY29udGFpbnNbY10pKQorICAgICAgICByZXR1cm4gaGFzaChsKQorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIgIi5qb2luKFtzdHIoc2VsZi5yZWZzKSwgc3RyKHNlbGYuZXhlY3MpLCBzdHIoc2VsZi5jb250YWlucyldKSAKKworCitjbGFzcyBzaGVsbENhY2hlTGluZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGVjcyk6CisgICAgICAgIHNlbGYuZXhlY3MgPSBjb2RlY2FjaGUuaW50ZXJuU2V0KGV4ZWNzKQorCisgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIChzZWxmLmV4ZWNzKQorCisgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBzdGF0ZSk6CisgICAgICAgIChleGVjcykgPSBzdGF0ZQorICAgICAgICBzZWxmLl9faW5pdF9fKGV4ZWNzKQorICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5leGVjcykKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiBzdHIoc2VsZi5leGVjcykKKworY2xhc3MgQ29kZVBhcnNlckNhY2hlKE11bHRpUHJvY2Vzc0NhY2hlKToKKyAgICBjYWNoZV9maWxlX25hbWUgPSAiYmJfY29kZXBhcnNlci5kYXQiCisgICAgQ0FDSEVfVkVSU0lPTiA9IDcKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgTXVsdGlQcm9jZXNzQ2FjaGUuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5weXRob25jYWNoZSA9IHNlbGYuY2FjaGVkYXRhWzBdCisgICAgICAgIHNlbGYuc2hlbGxjYWNoZSA9IHNlbGYuY2FjaGVkYXRhWzFdCisgICAgICAgIHNlbGYucHl0aG9uY2FjaGVleHRyYXMgPSBzZWxmLmNhY2hlZGF0YV9leHRyYXNbMF0KKyAgICAgICAgc2VsZi5zaGVsbGNhY2hlZXh0cmFzID0gc2VsZi5jYWNoZWRhdGFfZXh0cmFzWzFdCisKKyAgICAgICAgIyBUbyBhdm9pZCBkdXBsaWNhdGlvbiBpbiB0aGUgY29kZXBhcnNlciBjYWNoZSwga2VlcAorICAgICAgICAjIGEgbG9va3VwIG9mIGhhc2hlcyBvZiBvYmplY3RzIHdlIGFscmVhZHkgaGF2ZQorICAgICAgICBzZWxmLnB5dGhvbmNhY2hlbGluZXMgPSB7fQorICAgICAgICBzZWxmLnNoZWxsY2FjaGVsaW5lcyA9IHt9CisKKyAgICBkZWYgbmV3UHl0aG9uQ2FjaGVMaW5lKHNlbGYsIHJlZnMsIGV4ZWNzLCBjb250YWlucyk6CisgICAgICAgIGNhY2hlbGluZSA9IHB5dGhvbkNhY2hlTGluZShyZWZzLCBleGVjcywgY29udGFpbnMpCisgICAgICAgIGggPSBoYXNoKGNhY2hlbGluZSkKKyAgICAgICAgaWYgaCBpbiBzZWxmLnB5dGhvbmNhY2hlbGluZXM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5weXRob25jYWNoZWxpbmVzW2hdCisgICAgICAgIHNlbGYucHl0aG9uY2FjaGVsaW5lc1toXSA9IGNhY2hlbGluZQorICAgICAgICByZXR1cm4gY2FjaGVsaW5lCisKKyAgICBkZWYgbmV3U2hlbGxDYWNoZUxpbmUoc2VsZiwgZXhlY3MpOgorICAgICAgICBjYWNoZWxpbmUgPSBzaGVsbENhY2hlTGluZShleGVjcykKKyAgICAgICAgaCA9IGhhc2goY2FjaGVsaW5lKQorICAgICAgICBpZiBoIGluIHNlbGYuc2hlbGxjYWNoZWxpbmVzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2hlbGxjYWNoZWxpbmVzW2hdCisgICAgICAgIHNlbGYuc2hlbGxjYWNoZWxpbmVzW2hdID0gY2FjaGVsaW5lCisgICAgICAgIHJldHVybiBjYWNoZWxpbmUKKworICAgIGRlZiBpbml0X2NhY2hlKHNlbGYsIGQpOgorICAgICAgICBNdWx0aVByb2Nlc3NDYWNoZS5pbml0X2NhY2hlKHNlbGYsIGQpCisKKyAgICAgICAgIyBjYWNoZWRhdGEgZ2V0cyByZS1hc3NpZ25lZCBpbiB0aGUgcGFyZW50CisgICAgICAgIHNlbGYucHl0aG9uY2FjaGUgPSBzZWxmLmNhY2hlZGF0YVswXQorICAgICAgICBzZWxmLnNoZWxsY2FjaGUgPSBzZWxmLmNhY2hlZGF0YVsxXQorCisgICAgZGVmIGNyZWF0ZV9jYWNoZWRhdGEoc2VsZik6CisgICAgICAgIGRhdGEgPSBbe30sIHt9XQorICAgICAgICByZXR1cm4gZGF0YQorCitjb2RlcGFyc2VyY2FjaGUgPSBDb2RlUGFyc2VyQ2FjaGUoKQorCitkZWYgcGFyc2VyX2NhY2hlX2luaXQoZCk6CisgICAgY29kZXBhcnNlcmNhY2hlLmluaXRfY2FjaGUoZCkKKworZGVmIHBhcnNlcl9jYWNoZV9zYXZlKGQpOgorICAgIGNvZGVwYXJzZXJjYWNoZS5zYXZlX2V4dHJhcyhkKQorCitkZWYgcGFyc2VyX2NhY2hlX3NhdmVtZXJnZShkKToKKyAgICBjb2RlcGFyc2VyY2FjaGUuc2F2ZV9tZXJnZShkKQorCitMb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlckNsYXNzKCkKK2NsYXNzIEJ1ZmZlcmVkTG9nZ2VyKExvZ2dlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGxldmVsPTAsIHRhcmdldD1Ob25lKToKKyAgICAgICAgTG9nZ2VyLl9faW5pdF9fKHNlbGYsIG5hbWUpCisgICAgICAgIHNlbGYuc2V0TGV2ZWwobGV2ZWwpCisgICAgICAgIHNlbGYuYnVmZmVyID0gW10KKyAgICAgICAgc2VsZi50YXJnZXQgPSB0YXJnZXQKKworICAgIGRlZiBoYW5kbGUoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgc2VsZi5idWZmZXIuYXBwZW5kKHJlY29yZCkKKworICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgZm9yIHJlY29yZCBpbiBzZWxmLmJ1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYudGFyZ2V0LmhhbmRsZShyZWNvcmQpCisgICAgICAgIHNlbGYuYnVmZmVyID0gW10KKworY2xhc3MgUHl0aG9uUGFyc2VyKCk6CisgICAgZ2V0dmFycyA9ICgiLmdldFZhciIsICIuYXBwZW5kVmFyIiwgIi5wcmVwZW5kVmFyIikKKyAgICBjb250YWluc2Z1bmNzID0gKCJiYi51dGlscy5jb250YWlucyIsICJiYXNlX2NvbnRhaW5zIiwgImJiLnV0aWxzLmNvbnRhaW5zX2FueSIpCisgICAgZXhlY2Z1bmNzID0gKCJiYi5idWlsZC5leGVjX2Z1bmMiLCAiYmIuYnVpbGQuZXhlY190YXNrIikKKworICAgIGRlZiB3YXJuKHNlbGYsIGZ1bmMsIGFyZyk6CisgICAgICAgICIiIldhcm4gYWJvdXQgY2FsbHMgb2YgYml0YmFrZSBBUElzIHdoaWNoIHBhc3MgYSBub24tbGl0ZXJhbAorICAgICAgICBhcmd1bWVudCBmb3IgdGhlIHZhcmlhYmxlIG5hbWUsIGFzIHdlJ3JlIG5vdCBhYmxlIHRvIHRyYWNrIHN1Y2gKKyAgICAgICAgYSByZWZlcmVuY2UuCisgICAgICAgICIiIgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1bmNzdHIgPSBjb2RlZ2VuLnRvX3NvdXJjZShmdW5jKQorICAgICAgICAgICAgYXJnc3RyID0gY29kZWdlbi50b19zb3VyY2UoYXJnKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgc2VsZi5sb2cuZGVidWcoMiwgJ0ZhaWxlZCB0byBjb252ZXJ0IGZ1bmN0aW9uIGFuZCBhcmd1bWVudCB0byBzb3VyY2UgZm9ybScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmxvZy5kZWJ1ZygxLCBzZWxmLnVuaGFuZGxlZF9tZXNzYWdlICUgKGZ1bmNzdHIsIGFyZ3N0cikpCisKKyAgICBkZWYgdmlzaXRfQ2FsbChzZWxmLCBub2RlKToKKyAgICAgICAgbmFtZSA9IHNlbGYuY2FsbGVkX25vZGVfbmFtZShub2RlLmZ1bmMpCisgICAgICAgIGlmIG5hbWUgYW5kIG5hbWUuZW5kc3dpdGgoc2VsZi5nZXR2YXJzKSBvciBuYW1lIGluIHNlbGYuY29udGFpbnNmdW5jczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZS5hcmdzWzBdLCBhc3QuU3RyKToKKyAgICAgICAgICAgICAgICB2YXJuYW1lID0gbm9kZS5hcmdzWzBdLnMKKyAgICAgICAgICAgICAgICBpZiBuYW1lIGluIHNlbGYuY29udGFpbnNmdW5jcyBhbmQgaXNpbnN0YW5jZShub2RlLmFyZ3NbMV0sIGFzdC5TdHIpOgorICAgICAgICAgICAgICAgICAgICBpZiB2YXJuYW1lIG5vdCBpbiBzZWxmLmNvbnRhaW5zOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb250YWluc1t2YXJuYW1lXSA9IHNldCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29udGFpbnNbdmFybmFtZV0uYWRkKG5vZGUuYXJnc1sxXS5zKQorICAgICAgICAgICAgICAgIGVsc2U6ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlZmVyZW5jZXMuYWRkKG5vZGUuYXJnc1swXS5zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLndhcm4obm9kZS5mdW5jLCBub2RlLmFyZ3NbMF0pCisgICAgICAgIGVsaWYgbmFtZSBpbiBzZWxmLmV4ZWNmdW5jczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZS5hcmdzWzBdLCBhc3QuU3RyKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhcl9leGVjcy5hZGQobm9kZS5hcmdzWzBdLnMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYud2Fybihub2RlLmZ1bmMsIG5vZGUuYXJnc1swXSkKKyAgICAgICAgZWxpZiBuYW1lIGFuZCBpc2luc3RhbmNlKG5vZGUuZnVuYywgKGFzdC5OYW1lLCBhc3QuQXR0cmlidXRlKSk6CisgICAgICAgICAgICBzZWxmLmV4ZWNzLmFkZChuYW1lKQorCisgICAgZGVmIGNhbGxlZF9ub2RlX25hbWUoc2VsZiwgbm9kZSk6CisgICAgICAgICIiIkdpdmVuIGEgY2FsbGVkIG5vZGUsIHJldHVybiBpdHMgb3JpZ2luYWwgc3RyaW5nIGZvcm0iIiIKKyAgICAgICAgY29tcG9uZW50cyA9IFtdCisgICAgICAgIHdoaWxlIG5vZGU6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG5vZGUsIGFzdC5BdHRyaWJ1dGUpOgorICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXBwZW5kKG5vZGUuYXR0cikKKyAgICAgICAgICAgICAgICBub2RlID0gbm9kZS52YWx1ZQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIGFzdC5OYW1lKToKKyAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFwcGVuZChub2RlLmlkKQorICAgICAgICAgICAgICAgIHJldHVybiAnLicuam9pbihyZXZlcnNlZChjb21wb25lbnRzKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBsb2cpOgorICAgICAgICBzZWxmLnZhcl9leGVjcyA9IHNldCgpCisgICAgICAgIHNlbGYuY29udGFpbnMgPSB7fQorICAgICAgICBzZWxmLmV4ZWNzID0gc2V0KCkKKyAgICAgICAgc2VsZi5yZWZlcmVuY2VzID0gc2V0KCkKKyAgICAgICAgc2VsZi5sb2cgPSBCdWZmZXJlZExvZ2dlcignQml0QmFrZS5EYXRhLlB5dGhvblBhcnNlcicsIGxvZ2dpbmcuREVCVUcsIGxvZykKKworICAgICAgICBzZWxmLnVuaGFuZGxlZF9tZXNzYWdlID0gImluIGNhbGwgb2YgJXMsIGFyZ3VtZW50ICclcycgaXMgbm90IGEgc3RyaW5nIGxpdGVyYWwiCisgICAgICAgIHNlbGYudW5oYW5kbGVkX21lc3NhZ2UgPSAid2hpbGUgcGFyc2luZyAlcywgJXMiICUgKG5hbWUsIHNlbGYudW5oYW5kbGVkX21lc3NhZ2UpCisKKyAgICBkZWYgcGFyc2VfcHl0aG9uKHNlbGYsIG5vZGUpOgorICAgICAgICBpZiBub3Qgbm9kZSBvciBub3Qgbm9kZS5zdHJpcCgpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaCA9IGhhc2goc3RyKG5vZGUpKQorCisgICAgICAgIGlmIGggaW4gY29kZXBhcnNlcmNhY2hlLnB5dGhvbmNhY2hlOgorICAgICAgICAgICAgc2VsZi5yZWZlcmVuY2VzID0gc2V0KGNvZGVwYXJzZXJjYWNoZS5weXRob25jYWNoZVtoXS5yZWZzKQorICAgICAgICAgICAgc2VsZi5leGVjcyA9IHNldChjb2RlcGFyc2VyY2FjaGUucHl0aG9uY2FjaGVbaF0uZXhlY3MpCisgICAgICAgICAgICBzZWxmLmNvbnRhaW5zID0ge30KKyAgICAgICAgICAgIGZvciBpIGluIGNvZGVwYXJzZXJjYWNoZS5weXRob25jYWNoZVtoXS5jb250YWluczoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnRhaW5zW2ldID0gc2V0KGNvZGVwYXJzZXJjYWNoZS5weXRob25jYWNoZVtoXS5jb250YWluc1tpXSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIGggaW4gY29kZXBhcnNlcmNhY2hlLnB5dGhvbmNhY2hlZXh0cmFzOgorICAgICAgICAgICAgc2VsZi5yZWZlcmVuY2VzID0gc2V0KGNvZGVwYXJzZXJjYWNoZS5weXRob25jYWNoZWV4dHJhc1toXS5yZWZzKQorICAgICAgICAgICAgc2VsZi5leGVjcyA9IHNldChjb2RlcGFyc2VyY2FjaGUucHl0aG9uY2FjaGVleHRyYXNbaF0uZXhlY3MpCisgICAgICAgICAgICBzZWxmLmNvbnRhaW5zID0ge30KKyAgICAgICAgICAgIGZvciBpIGluIGNvZGVwYXJzZXJjYWNoZS5weXRob25jYWNoZWV4dHJhc1toXS5jb250YWluczoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnRhaW5zW2ldID0gc2V0KGNvZGVwYXJzZXJjYWNoZS5weXRob25jYWNoZWV4dHJhc1toXS5jb250YWluc1tpXSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGNvZGUgPSBjb21waWxlKGNoZWNrX2luZGVudChzdHIobm9kZSkpLCAiPHN0cmluZz4iLCAiZXhlYyIsCisgICAgICAgICAgICAgICAgICAgICAgIGFzdC5QeUNGX09OTFlfQVNUKQorCisgICAgICAgIGZvciBuIGluIGFzdC53YWxrKGNvZGUpOgorICAgICAgICAgICAgaWYgbi5fX2NsYXNzX18uX19uYW1lX18gPT0gIkNhbGwiOgorICAgICAgICAgICAgICAgIHNlbGYudmlzaXRfQ2FsbChuKQorCisgICAgICAgIHNlbGYuZXhlY3MudXBkYXRlKHNlbGYudmFyX2V4ZWNzKQorCisgICAgICAgIGNvZGVwYXJzZXJjYWNoZS5weXRob25jYWNoZWV4dHJhc1toXSA9IGNvZGVwYXJzZXJjYWNoZS5uZXdQeXRob25DYWNoZUxpbmUoc2VsZi5yZWZlcmVuY2VzLCBzZWxmLmV4ZWNzLCBzZWxmLmNvbnRhaW5zKQorCitjbGFzcyBTaGVsbFBhcnNlcigpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBsb2cpOgorICAgICAgICBzZWxmLmZ1bmNkZWZzID0gc2V0KCkKKyAgICAgICAgc2VsZi5hbGxleGVjcyA9IHNldCgpCisgICAgICAgIHNlbGYuZXhlY3MgPSBzZXQoKQorICAgICAgICBzZWxmLmxvZyA9IEJ1ZmZlcmVkTG9nZ2VyKCdCaXRCYWtlLkRhdGEuJXMnICUgbmFtZSwgbG9nZ2luZy5ERUJVRywgbG9nKQorICAgICAgICBzZWxmLnVuaGFuZGxlZF90ZW1wbGF0ZSA9ICJ1bmFibGUgdG8gaGFuZGxlIG5vbi1saXRlcmFsIGNvbW1hbmQgJyVzJyIKKyAgICAgICAgc2VsZi51bmhhbmRsZWRfdGVtcGxhdGUgPSAid2hpbGUgcGFyc2luZyAlcywgJXMiICUgKG5hbWUsIHNlbGYudW5oYW5kbGVkX3RlbXBsYXRlKQorCisgICAgZGVmIHBhcnNlX3NoZWxsKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIiIiUGFyc2UgdGhlIHN1cHBsaWVkIHNoZWxsIGNvZGUgaW4gYSBzdHJpbmcsIHJldHVybmluZyB0aGUgZXh0ZXJuYWwKKyAgICAgICAgY29tbWFuZHMgaXQgZXhlY3V0ZXMuCisgICAgICAgICIiIgorCisgICAgICAgIGggPSBoYXNoKHN0cih2YWx1ZSkpCisKKyAgICAgICAgaWYgaCBpbiBjb2RlcGFyc2VyY2FjaGUuc2hlbGxjYWNoZToKKyAgICAgICAgICAgIHNlbGYuZXhlY3MgPSBzZXQoY29kZXBhcnNlcmNhY2hlLnNoZWxsY2FjaGVbaF0uZXhlY3MpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5leGVjcworCisgICAgICAgIGlmIGggaW4gY29kZXBhcnNlcmNhY2hlLnNoZWxsY2FjaGVleHRyYXM6CisgICAgICAgICAgICBzZWxmLmV4ZWNzID0gc2V0KGNvZGVwYXJzZXJjYWNoZS5zaGVsbGNhY2hlZXh0cmFzW2hdLmV4ZWNzKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZXhlY3MKKworICAgICAgICBzZWxmLl9wYXJzZV9zaGVsbCh2YWx1ZSkKKyAgICAgICAgc2VsZi5leGVjcyA9IHNldChjbWQgZm9yIGNtZCBpbiBzZWxmLmFsbGV4ZWNzIGlmIGNtZCBub3QgaW4gc2VsZi5mdW5jZGVmcykKKworICAgICAgICBjb2RlcGFyc2VyY2FjaGUuc2hlbGxjYWNoZWV4dHJhc1toXSA9IGNvZGVwYXJzZXJjYWNoZS5uZXdTaGVsbENhY2hlTGluZShzZWxmLmV4ZWNzKQorCisgICAgICAgIHJldHVybiBzZWxmLmV4ZWNzCisKKyAgICBkZWYgX3BhcnNlX3NoZWxsKHNlbGYsIHZhbHVlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdG9rZW5zLCBfID0gcHlzaHlhY2MucGFyc2UodmFsdWUsIGVvZj1UcnVlLCBkZWJ1Zz1GYWxzZSkKKyAgICAgICAgZXhjZXB0IHB5c2hsZXguTmVlZE1vcmU6CisgICAgICAgICAgICByYWlzZSBzaGVycm9ycy5TaGVsbFN5bnRheEVycm9yKCJVbmV4cGVjdGVkIEVPRiIpCisKKyAgICAgICAgZm9yIHRva2VuIGluIHRva2VuczoKKyAgICAgICAgICAgIHNlbGYucHJvY2Vzc190b2tlbnModG9rZW4pCisKKyAgICBkZWYgcHJvY2Vzc190b2tlbnMoc2VsZiwgdG9rZW5zKToKKyAgICAgICAgIiIiUHJvY2VzcyBhIHN1cHBsaWVkIHBvcnRpb24gb2YgdGhlIHN5bnRheCB0cmVlIGFzIHJldHVybmVkIGJ5CisgICAgICAgIHB5c2h5YWNjLnBhcnNlLgorICAgICAgICAiIiIKKworICAgICAgICBkZWYgZnVuY3Rpb25fZGVmaW5pdGlvbih2YWx1ZSk6CisgICAgICAgICAgICBzZWxmLmZ1bmNkZWZzLmFkZCh2YWx1ZS5uYW1lKQorICAgICAgICAgICAgcmV0dXJuIFt2YWx1ZS5ib2R5XSwgTm9uZQorCisgICAgICAgIGRlZiBjYXNlX2NsYXVzZSh2YWx1ZSk6CisgICAgICAgICAgICAjIEVsZW1lbnQgMCBvZiBlYWNoIGl0ZW0gaW4gdGhlIGNhc2UgaXMgdGhlIGxpc3Qgb2YgcGF0dGVybnMsIGFuZAorICAgICAgICAgICAgIyBFbGVtZW50IDEgb2YgZWFjaCBpdGVtIGluIHRoZSBjYXNlIGlzIHRoZSBsaXN0IG9mIGNvbW1hbmRzIHRvIGJlCisgICAgICAgICAgICAjIGV4ZWN1dGVkIHdoZW4gdGhhdCBwYXR0ZXJuIG1hdGNoZXMuCisgICAgICAgICAgICB3b3JkcyA9IGNoYWluKCpbaXRlbVswXSBmb3IgaXRlbSBpbiB2YWx1ZS5pdGVtc10pCisgICAgICAgICAgICBjbWRzICA9IGNoYWluKCpbaXRlbVsxXSBmb3IgaXRlbSBpbiB2YWx1ZS5pdGVtc10pCisgICAgICAgICAgICByZXR1cm4gY21kcywgd29yZHMKKworICAgICAgICBkZWYgaWZfY2xhdXNlKHZhbHVlKToKKyAgICAgICAgICAgIG1haW4gPSBjaGFpbih2YWx1ZS5jb25kLCB2YWx1ZS5pZl9jbWRzKQorICAgICAgICAgICAgcmVzdCA9IHZhbHVlLmVsc2VfY21kcworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShyZXN0LCB0dXBsZSkgYW5kIHJlc3RbMF0gPT0gImVsaWYiOgorICAgICAgICAgICAgICAgIHJldHVybiBjaGFpbihtYWluLCBpZl9jbGF1c2UocmVzdFsxXSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjaGFpbihtYWluLCByZXN0KQorCisgICAgICAgIGRlZiBzaW1wbGVfY29tbWFuZCh2YWx1ZSk6CisgICAgICAgICAgICByZXR1cm4gTm9uZSwgY2hhaW4odmFsdWUud29yZHMsIChhc3NpZ25bMV0gZm9yIGFzc2lnbiBpbiB2YWx1ZS5hc3NpZ25zKSkKKworICAgICAgICB0b2tlbl9oYW5kbGVycyA9IHsKKyAgICAgICAgICAgICJhbmRfb3IiOiBsYW1iZGEgeDogKCh4LmxlZnQsIHgucmlnaHQpLCBOb25lKSwKKyAgICAgICAgICAgICJhc3luYyI6IGxhbWJkYSB4OiAoW3hdLCBOb25lKSwKKyAgICAgICAgICAgICJicmFjZV9ncm91cCI6IGxhbWJkYSB4OiAoeC5jbWRzLCBOb25lKSwKKyAgICAgICAgICAgICJmb3JfY2xhdXNlIjogbGFtYmRhIHg6ICh4LmNtZHMsIHguaXRlbXMpLAorICAgICAgICAgICAgImZ1bmN0aW9uX2RlZmluaXRpb24iOiBmdW5jdGlvbl9kZWZpbml0aW9uLAorICAgICAgICAgICAgImlmX2NsYXVzZSI6IGxhbWJkYSB4OiAoaWZfY2xhdXNlKHgpLCBOb25lKSwKKyAgICAgICAgICAgICJwaXBlbGluZSI6IGxhbWJkYSB4OiAoeC5jb21tYW5kcywgTm9uZSksCisgICAgICAgICAgICAicmVkaXJlY3RfbGlzdCI6IGxhbWJkYSB4OiAoW3guY21kXSwgTm9uZSksCisgICAgICAgICAgICAic3Vic2hlbGwiOiBsYW1iZGEgeDogKHguY21kcywgTm9uZSksCisgICAgICAgICAgICAid2hpbGVfY2xhdXNlIjogbGFtYmRhIHg6IChjaGFpbih4LmNvbmRpdGlvbiwgeC5jbWRzKSwgTm9uZSksCisgICAgICAgICAgICAidW50aWxfY2xhdXNlIjogbGFtYmRhIHg6IChjaGFpbih4LmNvbmRpdGlvbiwgeC5jbWRzKSwgTm9uZSksCisgICAgICAgICAgICAic2ltcGxlX2NvbW1hbmQiOiBzaW1wbGVfY29tbWFuZCwKKyAgICAgICAgICAgICJjYXNlX2NsYXVzZSI6IGNhc2VfY2xhdXNlLAorICAgICAgICB9CisKKyAgICAgICAgZm9yIHRva2VuIGluIHRva2VuczoKKyAgICAgICAgICAgIG5hbWUsIHZhbHVlID0gdG9rZW4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtb3JlX3Rva2Vucywgd29yZHMgPSB0b2tlbl9oYW5kbGVyc1tuYW1lXSh2YWx1ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJVbnN1cHBvcnRlZCB0b2tlbiB0eXBlICIgKyBuYW1lKQorCisgICAgICAgICAgICBpZiBtb3JlX3Rva2VuczoKKyAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NfdG9rZW5zKG1vcmVfdG9rZW5zKQorCisgICAgICAgICAgICBpZiB3b3JkczoKKyAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3Nfd29yZHMod29yZHMpCisKKyAgICBkZWYgcHJvY2Vzc193b3JkcyhzZWxmLCB3b3Jkcyk6CisgICAgICAgICIiIlByb2Nlc3MgYSBzZXQgb2YgJ3dvcmRzJyBpbiBweXNoeWFjYyBwYXJsYW5jZSwgd2hpY2ggaW5jbHVkZXMKKyAgICAgICAgZXh0cmFjdGlvbiBvZiBleGVjdXRlZCBjb21tYW5kcyBmcm9tICQoKSBibG9ja3MsIGFzIHdlbGwgYXMgZ3JhYmJpbmcKKyAgICAgICAgdGhlIGNvbW1hbmQgbmFtZSBhcmd1bWVudC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgd29yZHMgPSBsaXN0KHdvcmRzKQorICAgICAgICBmb3Igd29yZCBpbiBsaXN0KHdvcmRzKToKKyAgICAgICAgICAgIHd0cmVlID0gcHlzaGxleC5tYWtlX3dvcmR0cmVlKHdvcmRbMV0pCisgICAgICAgICAgICBmb3IgcGFydCBpbiB3dHJlZToKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShwYXJ0LCBsaXN0KToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIHBhcnRbMF0gaW4gKCdgJywgJyQoJyk6CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBweXNobGV4LndvcmR0cmVlX2FzX3N0cmluZyhwYXJ0WzE6LTFdKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9zaGVsbChjb21tYW5kKQorCisgICAgICAgICAgICAgICAgICAgIGlmIHdvcmRbMF0gaW4gKCJjbWRfbmFtZSIsICJjbWRfd29yZCIpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgd29yZCBpbiB3b3JkczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jkcy5yZW1vdmUod29yZCkKKworICAgICAgICB1c2V0b2tlbiA9IEZhbHNlCisgICAgICAgIGZvciB3b3JkIGluIHdvcmRzOgorICAgICAgICAgICAgaWYgd29yZFswXSBpbiAoImNtZF9uYW1lIiwgImNtZF93b3JkIikgb3IgXAorICAgICAgICAgICAgICAgKHVzZXRva2VuIGFuZCB3b3JkWzBdID09ICJUT0tFTiIpOgorICAgICAgICAgICAgICAgIGlmICI9IiBpbiB3b3JkWzFdOgorICAgICAgICAgICAgICAgICAgICB1c2V0b2tlbiA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGNtZCA9IHdvcmRbMV0KKyAgICAgICAgICAgICAgICBpZiBjbWQuc3RhcnRzd2l0aCgiJCIpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5kZWJ1ZygxLCBzZWxmLnVuaGFuZGxlZF90ZW1wbGF0ZSAlIGNtZCkKKyAgICAgICAgICAgICAgICBlbGlmIGNtZCA9PSAiZXZhbCI6CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSAiICIuam9pbih3b3JkIGZvciBfLCB3b3JkIGluIHdvcmRzWzE6XSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2Vfc2hlbGwoY29tbWFuZCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFsbGV4ZWNzLmFkZChjbWQpCisgICAgICAgICAgICAgICAgYnJlYWsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29tbWFuZC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29tbWFuZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOThjMWQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jb21tYW5kLnB5CkBAIC0wLDAgKzEsNDYzIEBACisiIiIKK0JpdEJha2UgJ0NvbW1hbmQnIG1vZHVsZQorCitQcm92aWRlIGFuIGludGVyZmFjZSB0byBpbnRlcmFjdCB3aXRoIHRoZSBiaXRiYWtlIHNlcnZlciB0aHJvdWdoICdjb21tYW5kcycKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDA3ICBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIiIiCitUaGUgYml0YmFrZSBzZXJ2ZXIgdGFrZXMgJ2NvbW1hbmRzJyBmcm9tIGl0cyBVSS9jb21tYW5kbGluZS4KK0NvbW1hbmRzIGFyZSBlaXRoZXIgc3luY2hyb25vdXMgb3IgYXN5bmNocm9ub3VzLgorQXN5bmMgY29tbWFuZHMgcmV0dXJuIGRhdGEgdG8gdGhlIGNsaWVudCBpbiB0aGUgZm9ybSBvZiBldmVudHMuCitTeW5jIGNvbW1hbmRzIG11c3Qgb25seSByZXR1cm4gZGF0YSB0aHJvdWdoIHRoZSBmdW5jdGlvbiByZXR1cm4gdmFsdWUKK2FuZCBtdXN0IG5vdCB0cmlnZ2VyIGV2ZW50cywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseS4KK0NvbW1hbmRzIGFyZSBxdWV1ZWQgaW4gYSBDb21tYW5kUXVldWUKKyIiIgorCitpbXBvcnQgYmIuZXZlbnQKK2ltcG9ydCBiYi5jb29rZXIKKworY2xhc3MgQ29tbWFuZENvbXBsZXRlZChiYi5ldmVudC5FdmVudCk6CisgICAgcGFzcworCitjbGFzcyBDb21tYW5kRXhpdChiYi5ldmVudC5FdmVudCk6CisgICAgZGVmICBfX2luaXRfXyhzZWxmLCBleGl0Y29kZSk6CisgICAgICAgIGJiLmV2ZW50LkV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuZXhpdGNvZGUgPSBpbnQoZXhpdGNvZGUpCisKK2NsYXNzIENvbW1hbmRGYWlsZWQoQ29tbWFuZEV4aXQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgc2VsZi5lcnJvciA9IG1lc3NhZ2UKKyAgICAgICAgQ29tbWFuZEV4aXQuX19pbml0X18oc2VsZiwgMSkKKworY2xhc3MgQ29tbWFuZEVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitjbGFzcyBDb21tYW5kOgorICAgICIiIgorICAgIEEgcXVldWUgb2YgYXN5bmNocm9ub3VzIGNvbW1hbmRzIGZvciBiaXRiYWtlCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvb2tlcik6CisgICAgICAgIHNlbGYuY29va2VyID0gY29va2VyCisgICAgICAgIHNlbGYuY21kc19zeW5jID0gQ29tbWFuZHNTeW5jKCkKKyAgICAgICAgc2VsZi5jbWRzX2FzeW5jID0gQ29tbWFuZHNBc3luYygpCisKKyAgICAgICAgIyBGSVhNRSBBZGQgbG9jayBmb3IgdGhpcworICAgICAgICBzZWxmLmN1cnJlbnRBc3luY0NvbW1hbmQgPSBOb25lCisKKyAgICBkZWYgcnVuQ29tbWFuZChzZWxmLCBjb21tYW5kbGluZSwgcm9fb25seSA9IEZhbHNlKToKKyAgICAgICAgY29tbWFuZCA9IGNvbW1hbmRsaW5lLnBvcCgwKQorICAgICAgICBpZiBoYXNhdHRyKENvbW1hbmRzU3luYywgY29tbWFuZCk6CisgICAgICAgICAgICAjIENhbiBydW4gc3luY2hyb25vdXMgY29tbWFuZHMgc3RyYWlnaHQgYXdheQorICAgICAgICAgICAgY29tbWFuZF9tZXRob2QgPSBnZXRhdHRyKHNlbGYuY21kc19zeW5jLCBjb21tYW5kKQorICAgICAgICAgICAgaWYgcm9fb25seToKKyAgICAgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihjb21tYW5kX21ldGhvZCwgJ3JlYWRvbmx5Jykgb3IgRmFsc2UgPT0gZ2V0YXR0cihjb21tYW5kX21ldGhvZCwgJ3JlYWRvbmx5Jyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lLCAiTm90IGFibGUgdG8gZXhlY3V0ZSBub3QgcmVhZG9ubHkgY29tbWFuZHMgaW4gcmVhZG9ubHkgbW9kZSIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBnZXRhdHRyKGNvbW1hbmRfbWV0aG9kLCAnbmVlZGNvbmZpZycsIEZhbHNlKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb29rZXIudXBkYXRlQ2FjaGVTeW5jKCkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21tYW5kX21ldGhvZChzZWxmLCBjb21tYW5kbGluZSkKKyAgICAgICAgICAgIGV4Y2VwdCBDb21tYW5kRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lLCBleGMuYXJnc1swXQorICAgICAgICAgICAgZXhjZXB0IChFeGNlcHRpb24sIFN5c3RlbUV4aXQpOgorICAgICAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZSwgdHJhY2ViYWNrLmZvcm1hdF9leGMoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LCBOb25lCisgICAgICAgIGlmIHNlbGYuY3VycmVudEFzeW5jQ29tbWFuZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lLCAiQnVzeSAoJXMgaW4gcHJvZ3Jlc3MpIiAlIHNlbGYuY3VycmVudEFzeW5jQ29tbWFuZFswXQorICAgICAgICBpZiBjb21tYW5kIG5vdCBpbiBDb21tYW5kc0FzeW5jLl9fZGljdF9fOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUsICJObyBzdWNoIGNvbW1hbmQiCisgICAgICAgIHNlbGYuY3VycmVudEFzeW5jQ29tbWFuZCA9IChjb21tYW5kLCBjb21tYW5kbGluZSkKKyAgICAgICAgc2VsZi5jb29rZXIuY29uZmlndXJhdGlvbi5zZXJ2ZXJfcmVnaXN0ZXJfaWRsZWNhbGxiYWNrKHNlbGYuY29va2VyLnJ1bkNvbW1hbmRzLCBzZWxmLmNvb2tlcikKKyAgICAgICAgcmV0dXJuIFRydWUsIE5vbmUKKworICAgIGRlZiBydW5Bc3luY0NvbW1hbmQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYuY29va2VyLnN0YXRlIGluIChiYi5jb29rZXIuc3RhdGUuZXJyb3IsIGJiLmNvb2tlci5zdGF0ZS5zaHV0ZG93biwgYmIuY29va2VyLnN0YXRlLmZvcmNlc2h1dGRvd24pOgorICAgICAgICAgICAgICAgICMgdXBkYXRlQ2FjaGUgd2lsbCB0cmlnZ2VyIGEgc2h1dGRvd24gb2YgdGhlIHBhcnNlcgorICAgICAgICAgICAgICAgICMgYW5kIHRoZW4gcmFpc2UgQkJIYW5kbGVkRXhjZXB0aW9uIHRyaWdnZXJpbmcgYW4gZXhpdAorICAgICAgICAgICAgICAgIHNlbGYuY29va2VyLnVwZGF0ZUNhY2hlKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGlmIHNlbGYuY3VycmVudEFzeW5jQ29tbWFuZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAoY29tbWFuZCwgb3B0aW9ucykgPSBzZWxmLmN1cnJlbnRBc3luY0NvbW1hbmQKKyAgICAgICAgICAgICAgICBjb21tYW5kbWV0aG9kID0gZ2V0YXR0cihDb21tYW5kc0FzeW5jLCBjb21tYW5kKQorICAgICAgICAgICAgICAgIG5lZWRjYWNoZSA9IGdldGF0dHIoIGNvbW1hbmRtZXRob2QsICJuZWVkY2FjaGUiICkKKyAgICAgICAgICAgICAgICBpZiBuZWVkY2FjaGUgYW5kIHNlbGYuY29va2VyLnN0YXRlICE9IGJiLmNvb2tlci5zdGF0ZS5ydW5uaW5nOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvb2tlci51cGRhdGVDYWNoZSgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZG1ldGhvZChzZWxmLmNtZHNfYXN5bmMsIHNlbGYsIG9wdGlvbnMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0IGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuZmluaXNoQXN5bmNDb21tYW5kKCJJbnRlcnJ1cHRlZCIpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQgYXMgZXhjOgorICAgICAgICAgICAgYXJnID0gZXhjLmFyZ3NbMF0KKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJnLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgICAgICBzZWxmLmZpbmlzaEFzeW5jQ29tbWFuZChhcmcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmluaXNoQXN5bmNDb21tYW5kKCJFeGl0ZWQgd2l0aCAlcyIgJSBhcmcpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV4YywgYmIuQkJIYW5kbGVkRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICBzZWxmLmZpbmlzaEFzeW5jQ29tbWFuZCgiIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5maW5pc2hBc3luY0NvbW1hbmQodHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGZpbmlzaEFzeW5jQ29tbWFuZChzZWxmLCBtc2c9Tm9uZSwgY29kZT1Ob25lKToKKyAgICAgICAgaWYgbXNnIG9yIG1zZyA9PSAiIjoKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoQ29tbWFuZEZhaWxlZChtc2cpLCBzZWxmLmNvb2tlci5leHBhbmRlZF9kYXRhKQorICAgICAgICBlbGlmIGNvZGU6CisgICAgICAgICAgICBiYi5ldmVudC5maXJlKENvbW1hbmRFeGl0KGNvZGUpLCBzZWxmLmNvb2tlci5leHBhbmRlZF9kYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShDb21tYW5kQ29tcGxldGVkKCksIHNlbGYuY29va2VyLmV4cGFuZGVkX2RhdGEpCisgICAgICAgIHNlbGYuY3VycmVudEFzeW5jQ29tbWFuZCA9IE5vbmUKKyAgICAgICAgc2VsZi5jb29rZXIuZmluaXNoY29tbWFuZCgpCisKK2NsYXNzIENvbW1hbmRzU3luYzoKKyAgICAiIiIKKyAgICBBIGNsYXNzIG9mIHN5bmNocm9ub3VzIGNvbW1hbmRzCisgICAgVGhlc2Ugc2hvdWxkIHJ1biBxdWlja2x5IHNvIGFzIG5vdCB0byBodXJ0IGludGVyYWN0aXZlIHBlcmZvcm1hbmNlLgorICAgIFRoZXNlIG11c3Qgbm90IGluZmx1ZW5jZSBhbnkgcnVubmluZyBzeW5jaHJvbm91cyBjb21tYW5kLgorICAgICIiIgorCisgICAgZGVmIHN0YXRlU2h1dGRvd24oc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIFRyaWdnZXIgY29va2VyICdzaHV0ZG93bicgbW9kZQorICAgICAgICAiIiIKKyAgICAgICAgY29tbWFuZC5jb29rZXIuc2h1dGRvd24oRmFsc2UpCisKKyAgICBkZWYgc3RhdGVGb3JjZVNodXRkb3duKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBTdG9wIHRoZSBjb29rZXIKKyAgICAgICAgIiIiCisgICAgICAgIGNvbW1hbmQuY29va2VyLnNodXRkb3duKFRydWUpCisKKyAgICBkZWYgZ2V0QWxsS2V5c1dpdGhGbGFncyhzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyBhIGR1bXAgb2YgdGhlIGdsb2JhbCBzdGF0ZS4gQ2FsbCB3aXRoCisgICAgICAgIHZhcmlhYmxlIGZsYWdzIHRvIGJlIHJldHJpZXZlZCBhcyBwYXJhbXMuCisgICAgICAgICIiIgorICAgICAgICBmbGFnbGlzdCA9IHBhcmFtc1swXQorICAgICAgICByZXR1cm4gY29tbWFuZC5jb29rZXIuZ2V0QWxsS2V5c1dpdGhGbGFncyhmbGFnbGlzdCkKKyAgICBnZXRBbGxLZXlzV2l0aEZsYWdzLnJlYWRvbmx5ID0gVHJ1ZQorCisgICAgZGVmIGdldFZhcmlhYmxlKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBSZWFkIHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlIGZyb20gZGF0YQorICAgICAgICAiIiIKKyAgICAgICAgdmFybmFtZSA9IHBhcmFtc1swXQorICAgICAgICBleHBhbmQgPSBUcnVlCisgICAgICAgIGlmIGxlbihwYXJhbXMpID4gMToKKyAgICAgICAgICAgIGV4cGFuZCA9IChwYXJhbXNbMV0gPT0gIlRydWUiKQorCisgICAgICAgIHJldHVybiBjb21tYW5kLmNvb2tlci5kYXRhLmdldFZhcih2YXJuYW1lLCBleHBhbmQpCisgICAgZ2V0VmFyaWFibGUucmVhZG9ubHkgPSBUcnVlCisKKyAgICBkZWYgc2V0VmFyaWFibGUoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIFNldCB0aGUgdmFsdWUgb2YgdmFyaWFibGUgaW4gZGF0YQorICAgICAgICAiIiIKKyAgICAgICAgdmFybmFtZSA9IHBhcmFtc1swXQorICAgICAgICB2YWx1ZSA9IHN0cihwYXJhbXNbMV0pCisgICAgICAgIGNvbW1hbmQuY29va2VyLmRhdGEuc2V0VmFyKHZhcm5hbWUsIHZhbHVlKQorCisgICAgZGVmIHNldENvbmZpZyhzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgU2V0IHRoZSB2YWx1ZSBvZiB2YXJpYWJsZSBpbiBjb25maWd1cmF0aW9uCisgICAgICAgICIiIgorICAgICAgICB2YXJuYW1lID0gcGFyYW1zWzBdCisgICAgICAgIHZhbHVlID0gc3RyKHBhcmFtc1sxXSkKKyAgICAgICAgc2V0YXR0cihjb21tYW5kLmNvb2tlci5jb25maWd1cmF0aW9uLCB2YXJuYW1lLCB2YWx1ZSkKKworICAgIGRlZiBlbmFibGVEYXRhVHJhY2tpbmcoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIEVuYWJsZSBoaXN0b3J5IHRyYWNraW5nIGZvciB2YXJpYWJsZXMKKyAgICAgICAgIiIiCisgICAgICAgIGNvbW1hbmQuY29va2VyLmVuYWJsZURhdGFUcmFja2luZygpCisKKyAgICBkZWYgZGlzYWJsZURhdGFUcmFja2luZyhzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgRGlzYWJsZSBoaXN0b3J5IHRyYWNraW5nIGZvciB2YXJpYWJsZXMKKyAgICAgICAgIiIiCisgICAgICAgIGNvbW1hbmQuY29va2VyLmRpc2FibGVEYXRhVHJhY2tpbmcoKQorCisgICAgZGVmIHNldFByZVBvc3RDb25mRmlsZXMoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgcHJlZmlsZXMgPSBwYXJhbXNbMF0uc3BsaXQoKQorICAgICAgICBwb3N0ZmlsZXMgPSBwYXJhbXNbMV0uc3BsaXQoKQorICAgICAgICBjb21tYW5kLmNvb2tlci5jb25maWd1cmF0aW9uLnByZWZpbGUgPSBwcmVmaWxlcworICAgICAgICBjb21tYW5kLmNvb2tlci5jb25maWd1cmF0aW9uLnBvc3RmaWxlID0gcG9zdGZpbGVzCisgICAgc2V0UHJlUG9zdENvbmZGaWxlcy5uZWVkY29uZmlnID0gRmFsc2UKKworICAgIGRlZiBnZXRDcHVDb3VudChzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgR2V0IHRoZSBDUFUgY291bnQgb24gdGhlIGJpdGJha2Ugc2VydmVyCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gYmIudXRpbHMuY3B1X2NvdW50KCkKKyAgICBnZXRDcHVDb3VudC5yZWFkb25seSA9IFRydWUKKyAgICBnZXRDcHVDb3VudC5uZWVkY29uZmlnID0gRmFsc2UKKworICAgIGRlZiBtYXRjaEZpbGUoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgZk1hdGNoID0gcGFyYW1zWzBdCisgICAgICAgIHJldHVybiBjb21tYW5kLmNvb2tlci5tYXRjaEZpbGUoZk1hdGNoKQorICAgIG1hdGNoRmlsZS5uZWVkY29uZmlnID0gRmFsc2UKKworICAgIGRlZiBnZW5lcmF0ZU5ld0ltYWdlKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgIGltYWdlID0gcGFyYW1zWzBdCisgICAgICAgIGJhc2VfaW1hZ2UgPSBwYXJhbXNbMV0KKyAgICAgICAgcGFja2FnZV9xdWV1ZSA9IHBhcmFtc1syXQorICAgICAgICB0aW1lc3RhbXAgPSBwYXJhbXNbM10KKyAgICAgICAgZGVzY3JpcHRpb24gPSBwYXJhbXNbNF0KKyAgICAgICAgcmV0dXJuIGNvbW1hbmQuY29va2VyLmdlbmVyYXRlTmV3SW1hZ2UoaW1hZ2UsIGJhc2VfaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX3F1ZXVlLCB0aW1lc3RhbXAsIGRlc2NyaXB0aW9uKQorCisgICAgZGVmIGVuc3VyZURpcihzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICBkaXJlY3RvcnkgPSBwYXJhbXNbMF0KKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGRpcmVjdG9yeSkKKyAgICBlbnN1cmVEaXIubmVlZGNvbmZpZyA9IEZhbHNlCisKKyAgICBkZWYgc2V0VmFyRmlsZShzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgU2F2ZSBhIHZhcmlhYmxlIGluIGEgZmlsZTsgdXNlZCBmb3Igc2F2aW5nIGluIGEgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgICIiIgorICAgICAgICB2YXIgPSBwYXJhbXNbMF0KKyAgICAgICAgdmFsID0gcGFyYW1zWzFdCisgICAgICAgIGRlZmF1bHRfZmlsZSA9IHBhcmFtc1syXQorICAgICAgICBvcCA9IHBhcmFtc1szXQorICAgICAgICBjb21tYW5kLmNvb2tlci5tb2RpZnlDb25maWd1cmF0aW9uVmFyKHZhciwgdmFsLCBkZWZhdWx0X2ZpbGUsIG9wKQorICAgIHNldFZhckZpbGUubmVlZGNvbmZpZyA9IEZhbHNlCisKKyAgICBkZWYgcmVtb3ZlVmFyRmlsZShzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVtb3ZlIGEgdmFyaWFibGUgZGVjbGFyYXRpb24gZnJvbSBhIGZpbGUKKyAgICAgICAgIiIiCisgICAgICAgIHZhciA9IHBhcmFtc1swXQorICAgICAgICBjb21tYW5kLmNvb2tlci5yZW1vdmVDb25maWd1cmF0aW9uVmFyKHZhcikKKyAgICByZW1vdmVWYXJGaWxlLm5lZWRjb25maWcgPSBGYWxzZQorCisgICAgZGVmIGNyZWF0ZUNvbmZpZ0ZpbGUoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBhbiBleHRyYSBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgIiIiCisgICAgICAgIG5hbWUgPSBwYXJhbXNbMF0KKyAgICAgICAgY29tbWFuZC5jb29rZXIuY3JlYXRlQ29uZmlnRmlsZShuYW1lKQorICAgIGNyZWF0ZUNvbmZpZ0ZpbGUubmVlZGNvbmZpZyA9IEZhbHNlCisKKyAgICBkZWYgc2V0RXZlbnRNYXNrKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgIGhhbmRsZXJOdW0gPSBwYXJhbXNbMF0KKyAgICAgICAgbGxldmVsID0gcGFyYW1zWzFdCisgICAgICAgIGRlYnVnX2RvbWFpbnMgPSBwYXJhbXNbMl0KKyAgICAgICAgbWFzayA9IHBhcmFtc1szXQorICAgICAgICByZXR1cm4gYmIuZXZlbnQuc2V0X1VJSG1hc2soaGFuZGxlck51bSwgbGxldmVsLCBkZWJ1Z19kb21haW5zLCBtYXNrKQorICAgIHNldEV2ZW50TWFzay5uZWVkY29uZmlnID0gRmFsc2UKKworICAgIGRlZiBzZXRGZWF0dXJlcyhzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgU2V0IHRoZSBjb29rZXIgZmVhdHVyZXMgdG8gaW5jbHVkZSB0aGUgcGFzc2VkIGxpc3Qgb2YgZmVhdHVyZXMKKyAgICAgICAgIiIiCisgICAgICAgIGZlYXR1cmVzID0gcGFyYW1zWzBdCisgICAgICAgIGNvbW1hbmQuY29va2VyLnNldEZlYXR1cmVzKGZlYXR1cmVzKQorICAgIHNldEZlYXR1cmVzLm5lZWRjb25maWcgPSBGYWxzZQorICAgICMgYWx0aG91Z2ggd2UgY2hhbmdlIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgY29va2VyLCB0aGlzIGlzIHRyYW5zcGFyZW50IHNpbmNlCisgICAgIyB3ZSBhbHdheXMgdGFrZSBhbmQgbGVhdmUgdGhlIGNvb2tlciBpbiBzdGF0ZS5pbml0aWFsCisgICAgc2V0RmVhdHVyZXMucmVhZG9ubHkgPSBUcnVlCisKKyAgICBkZWYgdXBkYXRlQ29uZmlnKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgIG9wdGlvbnMgPSBwYXJhbXNbMF0KKyAgICAgICAgZW52aXJvbm1lbnQgPSBwYXJhbXNbMV0KKyAgICAgICAgY29tbWFuZC5jb29rZXIudXBkYXRlQ29uZmlnT3B0cyhvcHRpb25zLCBlbnZpcm9ubWVudCkKKyAgICB1cGRhdGVDb25maWcubmVlZGNvbmZpZyA9IEZhbHNlCisKK2NsYXNzIENvbW1hbmRzQXN5bmM6CisgICAgIiIiCisgICAgQSBjbGFzcyBvZiBhc3luY2hyb25vdXMgY29tbWFuZHMKKyAgICBUaGVzZSBmdW5jdGlvbnMgY29tbXVuaWNhdGUgdmlhIGdlbmVyYXRlZCBldmVudHMuCisgICAgQW55IGZ1bmN0aW9uIHRoYXQgcmVxdWlyZXMgbWV0YWRhdGEgcGFyc2luZyBzaG91bGQgYmUgaGVyZS4KKyAgICAiIiIKKworICAgIGRlZiBidWlsZEZpbGUoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIEJ1aWxkIGEgc2luZ2xlIHNwZWNpZmllZCAuYmIgZmlsZQorICAgICAgICAiIiIKKyAgICAgICAgYmZpbGUgPSBwYXJhbXNbMF0KKyAgICAgICAgdGFzayA9IHBhcmFtc1sxXQorCisgICAgICAgIGNvbW1hbmQuY29va2VyLmJ1aWxkRmlsZShiZmlsZSwgdGFzaykKKyAgICBidWlsZEZpbGUubmVlZGNhY2hlID0gRmFsc2UKKworICAgIGRlZiBidWlsZFRhcmdldHMoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIEJ1aWxkIGEgc2V0IG9mIHRhcmdldHMKKyAgICAgICAgIiIiCisgICAgICAgIHBrZ3NfdG9fYnVpbGQgPSBwYXJhbXNbMF0KKyAgICAgICAgdGFzayA9IHBhcmFtc1sxXQorCisgICAgICAgIGNvbW1hbmQuY29va2VyLmJ1aWxkVGFyZ2V0cyhwa2dzX3RvX2J1aWxkLCB0YXNrKQorICAgIGJ1aWxkVGFyZ2V0cy5uZWVkY2FjaGUgPSBUcnVlCisKKyAgICBkZWYgZ2VuZXJhdGVEZXBUcmVlRXZlbnQoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIEdlbmVyYXRlIGFuIGV2ZW50IGNvbnRhaW5pbmcgdGhlIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24KKyAgICAgICAgIiIiCisgICAgICAgIHBrZ3NfdG9fYnVpbGQgPSBwYXJhbXNbMF0KKyAgICAgICAgdGFzayA9IHBhcmFtc1sxXQorCisgICAgICAgIGNvbW1hbmQuY29va2VyLmdlbmVyYXRlRGVwVHJlZUV2ZW50KHBrZ3NfdG9fYnVpbGQsIHRhc2spCisgICAgICAgIGNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKCkKKyAgICBnZW5lcmF0ZURlcFRyZWVFdmVudC5uZWVkY2FjaGUgPSBUcnVlCisKKyAgICBkZWYgZ2VuZXJhdGVEb3RHcmFwaChzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgRHVtcCBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIHRvIGRpc2sgYXMgLmRvdCBmaWxlcworICAgICAgICAiIiIKKyAgICAgICAgcGtnc190b19idWlsZCA9IHBhcmFtc1swXQorICAgICAgICB0YXNrID0gcGFyYW1zWzFdCisKKyAgICAgICAgY29tbWFuZC5jb29rZXIuZ2VuZXJhdGVEb3RHcmFwaEZpbGVzKHBrZ3NfdG9fYnVpbGQsIHRhc2spCisgICAgICAgIGNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKCkKKyAgICBnZW5lcmF0ZURvdEdyYXBoLm5lZWRjYWNoZSA9IFRydWUKKworICAgIGRlZiBnZW5lcmF0ZVRhcmdldHNUcmVlKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBHZW5lcmF0ZSBhIHRyZWUgb2YgYnVpbGRhYmxlIHRhcmdldHMuCisgICAgICAgIElmIGtsYXNzIGlzIHByb3ZpZGVkIGVuc3VyZSBhbGwgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlIGNsYXNzIGFyZQorICAgICAgICBpbmNsdWRlZCBpbiB0aGUgcGFja2FnZSBsaXN0LgorICAgICAgICBJZiBwa2dfbGlzdCBwcm92aWRlZCB1c2UgdGhhdCBsaXN0IChwbHVzIGFueSBleHRyYXMgYnJvdWdodCBpbiBieQorICAgICAgICBrbGFzcykgcmF0aGVyIHRoYW4gZ2VuZXJhdGluZyBhIHRyZWUgZm9yIGFsbCBwYWNrYWdlcy4KKyAgICAgICAgIiIiCisgICAgICAgIGtsYXNzID0gcGFyYW1zWzBdCisgICAgICAgIHBrZ19saXN0ID0gcGFyYW1zWzFdCisKKyAgICAgICAgY29tbWFuZC5jb29rZXIuZ2VuZXJhdGVUYXJnZXRzVHJlZShrbGFzcywgcGtnX2xpc3QpCisgICAgICAgIGNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKCkKKyAgICBnZW5lcmF0ZVRhcmdldHNUcmVlLm5lZWRjYWNoZSA9IFRydWUKKworICAgIGRlZiBmaW5kQ29yZUJhc2VGaWxlcyhzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgRmluZCBjZXJ0YWluIGZpbGVzIGluIENPUkVCQVNFIGRpcmVjdG9yeS4gaS5lLiBMYXllcnMKKyAgICAgICAgIiIiCisgICAgICAgIHN1YmRpciA9IHBhcmFtc1swXQorICAgICAgICBmaWxlbmFtZSA9IHBhcmFtc1sxXQorCisgICAgICAgIGNvbW1hbmQuY29va2VyLmZpbmRDb3JlQmFzZUZpbGVzKHN1YmRpciwgZmlsZW5hbWUpCisgICAgICAgIGNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKCkKKyAgICBmaW5kQ29yZUJhc2VGaWxlcy5uZWVkY2FjaGUgPSBGYWxzZQorCisgICAgZGVmIGZpbmRDb25maWdGaWxlcyhzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgRmluZCBjb25maWcgZmlsZXMgd2hpY2ggcHJvdmlkZSBhcHByb3ByaWF0ZSB2YWx1ZXMKKyAgICAgICAgZm9yIHRoZSBwYXNzZWQgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gaS5lLiBNQUNISU5FCisgICAgICAgICIiIgorICAgICAgICB2YXJuYW1lID0gcGFyYW1zWzBdCisKKyAgICAgICAgY29tbWFuZC5jb29rZXIuZmluZENvbmZpZ0ZpbGVzKHZhcm5hbWUpCisgICAgICAgIGNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKCkKKyAgICBmaW5kQ29uZmlnRmlsZXMubmVlZGNhY2hlID0gRmFsc2UKKworICAgIGRlZiBmaW5kRmlsZXNNYXRjaGluZ0luRGlyKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBGaW5kIGltcGxlbWVudGF0aW9uIGZpbGVzIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgcGF0dGVybgorICAgICAgICBpbiB0aGUgcmVxdWVzdGVkIHN1YmRpcmVjdG9yeSBvZiBhIEJCUEFUSAorICAgICAgICAiIiIKKyAgICAgICAgcGF0dGVybiA9IHBhcmFtc1swXQorICAgICAgICBkaXJlY3RvcnkgPSBwYXJhbXNbMV0KKworICAgICAgICBjb21tYW5kLmNvb2tlci5maW5kRmlsZXNNYXRjaGluZ0luRGlyKHBhdHRlcm4sIGRpcmVjdG9yeSkKKyAgICAgICAgY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQoKQorICAgIGZpbmRGaWxlc01hdGNoaW5nSW5EaXIubmVlZGNhY2hlID0gRmFsc2UKKworICAgIGRlZiBmaW5kQ29uZmlnRmlsZVBhdGgoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgdGhlIHBhdGggb2YgdGhlIHJlcXVlc3RlZCBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgIiIiCisgICAgICAgIGNvbmZpZ2ZpbGUgPSBwYXJhbXNbMF0KKworICAgICAgICBjb21tYW5kLmNvb2tlci5maW5kQ29uZmlnRmlsZVBhdGgoY29uZmlnZmlsZSkKKyAgICAgICAgY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQoKQorICAgIGZpbmRDb25maWdGaWxlUGF0aC5uZWVkY2FjaGUgPSBGYWxzZQorCisgICAgZGVmIHNob3dWZXJzaW9ucyhzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgU2hvdyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHZlcnNpb25zCisgICAgICAgICIiIgorICAgICAgICBjb21tYW5kLmNvb2tlci5zaG93VmVyc2lvbnMoKQorICAgICAgICBjb21tYW5kLmZpbmlzaEFzeW5jQ29tbWFuZCgpCisgICAgc2hvd1ZlcnNpb25zLm5lZWRjYWNoZSA9IFRydWUKKworICAgIGRlZiBzaG93RW52aXJvbm1lbnRUYXJnZXQoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIFByaW50IHRoZSBlbnZpcm9ubWVudCBvZiBhIHRhcmdldCByZWNpcGUKKyAgICAgICAgKG5lZWRzIHRoZSBjYWNoZSB0byB3b3JrIG91dCB3aGljaCByZWNpcGUgdG8gdXNlKQorICAgICAgICAiIiIKKyAgICAgICAgcGtnID0gcGFyYW1zWzBdCisKKyAgICAgICAgY29tbWFuZC5jb29rZXIuc2hvd0Vudmlyb25tZW50KE5vbmUsIHBrZykKKyAgICAgICAgY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQoKQorICAgIHNob3dFbnZpcm9ubWVudFRhcmdldC5uZWVkY2FjaGUgPSBUcnVlCisKKyAgICBkZWYgc2hvd0Vudmlyb25tZW50KHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBQcmludCB0aGUgc3RhbmRhcmQgZW52aXJvbm1lbnQKKyAgICAgICAgb3IgaWYgc3BlY2lmaWVkIHRoZSBlbnZpcm9ubWVudCBmb3IgYSBzcGVjaWZpZWQgcmVjaXBlCisgICAgICAgICIiIgorICAgICAgICBiZmlsZSA9IHBhcmFtc1swXQorCisgICAgICAgIGNvbW1hbmQuY29va2VyLnNob3dFbnZpcm9ubWVudChiZmlsZSkKKyAgICAgICAgY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQoKQorICAgIHNob3dFbnZpcm9ubWVudC5uZWVkY2FjaGUgPSBGYWxzZQorCisgICAgZGVmIHBhcnNlRmlsZXMoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIFBhcnNlIHRoZSAuYmIgZmlsZXMKKyAgICAgICAgIiIiCisgICAgICAgIGNvbW1hbmQuY29va2VyLnVwZGF0ZUNhY2hlKCkKKyAgICAgICAgY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQoKQorICAgIHBhcnNlRmlsZXMubmVlZGNhY2hlID0gVHJ1ZQorCisgICAgZGVmIGNvbXBhcmVSZXZpc2lvbnMoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIFBhcnNlIHRoZSAuYmIgZmlsZXMKKyAgICAgICAgIiIiCisgICAgICAgIGlmIGJiLmZldGNoLmZldGNoZXJfY29tcGFyZV9yZXZpc2lvbnMoY29tbWFuZC5jb29rZXIuZGF0YSk6CisgICAgICAgICAgICBjb21tYW5kLmZpbmlzaEFzeW5jQ29tbWFuZChjb2RlPTEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb21tYW5kLmZpbmlzaEFzeW5jQ29tbWFuZCgpCisgICAgY29tcGFyZVJldmlzaW9ucy5uZWVkY2FjaGUgPSBUcnVlCisKKyAgICBkZWYgdHJpZ2dlckV2ZW50KHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBUcmlnZ2VyIGEgY2VydGFpbiBldmVudAorICAgICAgICAiIiIKKyAgICAgICAgZXZlbnQgPSBwYXJhbXNbMF0KKyAgICAgICAgYmIuZXZlbnQuZmlyZShldmFsKGV2ZW50KSwgY29tbWFuZC5jb29rZXIuZGF0YSkKKyAgICAgICAgY29tbWFuZC5jdXJyZW50QXN5bmNDb21tYW5kID0gTm9uZQorICAgIHRyaWdnZXJFdmVudC5uZWVkY2FjaGUgPSBGYWxzZQorCisgICAgZGVmIHJlc2V0Q29va2VyKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBSZXNldCB0aGUgY29va2VyIHRvIGl0cyBpbml0aWFsIHN0YXRlLCB0aHVzIGZvcmNpbmcgYSByZXBhcnNlIGZvcgorICAgICAgICBhbnkgYXN5bmMgY29tbWFuZCB0aGF0IGhhcyB0aGUgbmVlZGNhY2hlIHByb3BlcnR5IHNldCB0byBUcnVlCisgICAgICAgICIiIgorICAgICAgICBjb21tYW5kLmNvb2tlci5yZXNldCgpCisgICAgICAgIGNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKCkKKyAgICByZXNldENvb2tlci5uZWVkY2FjaGUgPSBGYWxzZQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2NvbXBhdC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29tcGF0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMTkyM2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2NvbXBhdC5weQpAQCAtMCwwICsxLDYgQEAKKyIiIkNvZGUgcHVsbGVkIGZyb20gZnV0dXJlIHB5dGhvbiB2ZXJzaW9ucywgaGVyZSBmb3IgY29tcGF0aWJpbGl0eSIiIgorCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBNdXRhYmxlTWFwcGluZywgS2V5c1ZpZXcsIFZhbHVlc1ZpZXcsIEl0ZW1zVmlldywgT3JkZXJlZERpY3QKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCB0b3RhbF9vcmRlcmluZworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29va2VyLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jb29rZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBkN2Q1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29va2VyLnB5CkBAIC0wLDAgKzEsMjEzOSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIENocmlzIExhcnNvbgorIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIFBoaWwgQmx1bmRlbGwKKyMgQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNSBNaWNoYWVsICdNaWNrZXknIExhdWVyCisjIENvcHlyaWdodCAoQykgMjAwNSAgICAgICAgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA1ICAgICAgICBST0FEIEdtYkgKKyMgQ29weXJpZ2h0IChDKSAyMDA2IC0gMjAwNyBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoraW1wb3J0IHN5cywgb3MsIGdsb2IsIG9zLnBhdGgsIHJlLCB0aW1lCitpbXBvcnQgYXRleGl0CitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG11bHRpcHJvY2Vzc2luZworaW1wb3J0IHNyZV9jb25zdGFudHMKK2ltcG9ydCB0aHJlYWRpbmcKK2Zyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworZnJvbSBjb250ZXh0bGliIGltcG9ydCBjbG9zaW5nCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgd3JhcHMKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CitpbXBvcnQgYmIsIGJiLmV4Y2VwdGlvbnMsIGJiLmNvbW1hbmQKK2Zyb20gYmIgaW1wb3J0IHV0aWxzLCBkYXRhLCBwYXJzZSwgZXZlbnQsIGNhY2hlLCBwcm92aWRlcnMsIHRhc2tkYXRhLCBydW5xdWV1ZSwgYnVpbGQKK2ltcG9ydCBRdWV1ZQoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBlcnJubworaW1wb3J0IHByc2Vydi5zZXJ2CitpbXBvcnQgcHlpbm90aWZ5CisKK2xvZ2dlciAgICAgID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UiKQorY29sbGVjdGxvZyAgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5Db2xsZWN0aW9uIikKK2J1aWxkbG9nICAgID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuQnVpbGQiKQorcGFyc2Vsb2cgICAgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5QYXJzaW5nIikKK3Byb3ZpZGVybG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuUHJvdmlkZXIiKQorCitjbGFzcyBOb1NwZWNpZmljTWF0Y2goYmIuQkJIYW5kbGVkRXhjZXB0aW9uKToKKyAgICAiIiIKKyAgICBFeGNlcHRpb24gcmFpc2VkIHdoZW4gbm8gb3IgbXVsdGlwbGUgZmlsZSBtYXRjaGVzIGFyZSBmb3VuZAorICAgICIiIgorCitjbGFzcyBOb3RoaW5nVG9CdWlsZChFeGNlcHRpb24pOgorICAgICIiIgorICAgIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGJ1aWxkCisgICAgIiIiCisKK2NsYXNzIENvbGxlY3Rpb25FcnJvcihiYi5CQkhhbmRsZWRFeGNlcHRpb24pOgorICAgICIiIgorICAgIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiBsYXllciBjb25maWd1cmF0aW9uIGlzIGluY29ycmVjdAorICAgICIiIgorCitjbGFzcyBzdGF0ZToKKyAgICBpbml0aWFsLCBwYXJzaW5nLCBydW5uaW5nLCBzaHV0ZG93biwgZm9yY2VzaHV0ZG93biwgc3RvcHBlZCwgZXJyb3IgPSByYW5nZSg3KQorCisKK2NsYXNzIFNraXBwZWRQYWNrYWdlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbmZvID0gTm9uZSwgcmVhc29uID0gTm9uZSk6CisgICAgICAgIHNlbGYucG4gPSBOb25lCisgICAgICAgIHNlbGYuc2tpcHJlYXNvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5wcm92aWRlcyA9IE5vbmUKKyAgICAgICAgc2VsZi5ycHJvdmlkZXMgPSBOb25lCisKKyAgICAgICAgaWYgaW5mbzoKKyAgICAgICAgICAgIHNlbGYucG4gPSBpbmZvLnBuCisgICAgICAgICAgICBzZWxmLnNraXByZWFzb24gPSBpbmZvLnNraXByZWFzb24KKyAgICAgICAgICAgIHNlbGYucHJvdmlkZXMgPSBpbmZvLnByb3ZpZGVzCisgICAgICAgICAgICBzZWxmLnJwcm92aWRlcyA9IGluZm8ucnByb3ZpZGVzCisgICAgICAgIGVsaWYgcmVhc29uOgorICAgICAgICAgICAgc2VsZi5za2lwcmVhc29uID0gcmVhc29uCisKKworY2xhc3MgQ29va2VyRmVhdHVyZXMob2JqZWN0KToKKyAgICBfZmVhdHVyZV9saXN0ID0gW0hPQl9FWFRSQV9DQUNIRVMsIFNFTkRfREVQRU5EU19UUkVFLCBCQVNFREFUQVNUT1JFX1RSQUNLSU5HLCBTRU5EX1NBTklUWUVWRU5UU10gPSByYW5nZSg0KQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9mZWF0dXJlcz1zZXQoKQorCisgICAgZGVmIHNldEZlYXR1cmUoc2VsZiwgZik6CisgICAgICAgICMgdmFsaWRhdGUgd2UgZ290IGEgcmVxdWVzdCBmb3IgYSBmZWF0dXJlIHdlIHN1cHBvcnQKKyAgICAgICAgaWYgZiBub3QgaW4gQ29va2VyRmVhdHVyZXMuX2ZlYXR1cmVfbGlzdDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9mZWF0dXJlcy5hZGQoZikKKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgZik6CisgICAgICAgIHJldHVybiBmIGluIHNlbGYuX2ZlYXR1cmVzCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9mZWF0dXJlcy5fX2l0ZXJfXygpCisKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZlYXR1cmVzLm5leHQoKQorCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IworIyBCQkNvb2tlcgorIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0jCitjbGFzcyBCQkNvb2tlcjoKKyAgICAiIiIKKyAgICBNYW5hZ2VzIG9uZSBiaXRiYWtlIGJ1aWxkIHJ1bgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZ3VyYXRpb24sIGZlYXR1cmVTZXQ9Tm9uZSk6CisgICAgICAgIHNlbGYucmVjaXBlY2FjaGUgPSBOb25lCisgICAgICAgIHNlbGYuc2tpcGxpc3QgPSB7fQorICAgICAgICBzZWxmLmZlYXR1cmVzZXQgPSBDb29rZXJGZWF0dXJlcygpCisgICAgICAgIGlmIGZlYXR1cmVTZXQ6CisgICAgICAgICAgICBmb3IgZiBpbiBmZWF0dXJlU2V0OgorICAgICAgICAgICAgICAgIHNlbGYuZmVhdHVyZXNldC5zZXRGZWF0dXJlKGYpCisKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbgorCisgICAgICAgIHNlbGYuY29uZmlnd2F0Y2hlciA9IHB5aW5vdGlmeS5XYXRjaE1hbmFnZXIoKQorICAgICAgICBzZWxmLmNvbmZpZ3dhdGNoZXIuYmJzZWVuID0gW10KKyAgICAgICAgc2VsZi5jb25maWd3YXRjaGVyLmJid2F0Y2hlZGZpbGVzID0gW10KKyAgICAgICAgc2VsZi5jb25maWdub3RpZmllciA9IHB5aW5vdGlmeS5Ob3RpZmllcihzZWxmLmNvbmZpZ3dhdGNoZXIsIHNlbGYuY29uZmlnX25vdGlmaWNhdGlvbnMpCisgICAgICAgIHNlbGYud2F0Y2htYXNrID0gcHlpbm90aWZ5LklOX0NMT1NFX1dSSVRFIHwgcHlpbm90aWZ5LklOX0NSRUFURSB8IHB5aW5vdGlmeS5JTl9ERUxFVEUgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgcHlpbm90aWZ5LklOX0RFTEVURV9TRUxGIHwgcHlpbm90aWZ5LklOX01PRElGWSB8IHB5aW5vdGlmeS5JTl9NT1ZFX1NFTEYgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgcHlpbm90aWZ5LklOX01PVkVEX0ZST00gfCBweWlub3RpZnkuSU5fTU9WRURfVE8gCisgICAgICAgIHNlbGYud2F0Y2hlciA9IHB5aW5vdGlmeS5XYXRjaE1hbmFnZXIoKQorICAgICAgICBzZWxmLndhdGNoZXIuYmJzZWVuID0gW10KKyAgICAgICAgc2VsZi53YXRjaGVyLmJid2F0Y2hlZGZpbGVzID0gW10KKyAgICAgICAgc2VsZi5ub3RpZmllciA9IHB5aW5vdGlmeS5Ob3RpZmllcihzZWxmLndhdGNoZXIsIHNlbGYubm90aWZpY2F0aW9ucykKKworCisgICAgICAgIHNlbGYuaW5pdENvbmZpZ3VyYXRpb25EYXRhKCkKKworICAgICAgICBzZWxmLmlub3RpZnlfbW9kaWZpZWRfZmlsZXMgPSBbXQorCisgICAgICAgIGRlZiBfcHJvY2Vzc19pbm90aWZ5X3VwZGF0ZXMoc2VydmVyLCBub3RpZmllcl9saXN0LCBhYm9ydCk6CisgICAgICAgICAgICBmb3IgbiBpbiBub3RpZmllcl9saXN0OgorICAgICAgICAgICAgICAgIGlmIG4uY2hlY2tfZXZlbnRzKHRpbWVvdXQ9MCk6CisgICAgICAgICAgICAgICAgICAgICMgcmVhZCBub3RpZmllZCBldmVudHMgYW5kIGVucWV1ZSB0aGVtCisgICAgICAgICAgICAgICAgICAgIG4ucmVhZF9ldmVudHMoKQorICAgICAgICAgICAgICAgICAgICBuLnByb2Nlc3NfZXZlbnRzKCkKKyAgICAgICAgICAgIHJldHVybiAxLjAKKworICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc2VydmVyX3JlZ2lzdGVyX2lkbGVjYWxsYmFjayhfcHJvY2Vzc19pbm90aWZ5X3VwZGF0ZXMsIFtzZWxmLmNvbmZpZ25vdGlmaWVyLCBzZWxmLm5vdGlmaWVyXSkKKworICAgICAgICBzZWxmLmJhc2Vjb25maWdfdmFsaWQgPSBUcnVlCisgICAgICAgIHNlbGYucGFyc2VjYWNoZV92YWxpZCA9IEZhbHNlCisKKyAgICAgICAgIyBUYWtlIGEgbG9jayBzbyBvbmx5IG9uZSBjb3B5IG9mIGJpdGJha2UgY2FuIHJ1biBhZ2FpbnN0IGEgZ2l2ZW4gYnVpbGQKKyAgICAgICAgIyBkaXJlY3RvcnkgYXQgYSB0aW1lCisgICAgICAgIGlmIG5vdCBzZWxmLmxvY2tCaXRiYWtlKCk6CisgICAgICAgICAgICBiYi5mYXRhbCgiT25seSBvbmUgY29weSBvZiBiaXRiYWtlIHNob3VsZCBiZSBydW4gYWdhaW5zdCBhIGJ1aWxkIGRpcmVjdG9yeSIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYubG9jay5zZWVrKDApCisgICAgICAgICAgICBzZWxmLmxvY2sudHJ1bmNhdGUoKQorICAgICAgICAgICAgaWYgbGVuKGNvbmZpZ3VyYXRpb24uaW50ZXJmYWNlKSA+PSAyOgorICAgICAgICAgICAgICAgIHNlbGYubG9jay53cml0ZSgiJXM6JXNcbiIgJSAoY29uZmlndXJhdGlvbi5pbnRlcmZhY2VbMF0sIGNvbmZpZ3VyYXRpb24uaW50ZXJmYWNlWzFdKSk7CisgICAgICAgICAgICBzZWxmLmxvY2suZmx1c2goKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBUT1NUT1AgbXVzdCBub3QgYmUgc2V0IG9yIG91ciBjaGlsZHJlbiB3aWxsIGhhbmcgd2hlbiB0aGV5IG91dHB1dAorICAgICAgICBmZCA9IHN5cy5zdGRvdXQuZmlsZW5vKCkKKyAgICAgICAgaWYgb3MuaXNhdHR5KGZkKToKKyAgICAgICAgICAgIGltcG9ydCB0ZXJtaW9zCisgICAgICAgICAgICB0Y2F0dHIgPSB0ZXJtaW9zLnRjZ2V0YXR0cihmZCkKKyAgICAgICAgICAgIGlmIHRjYXR0clszXSAmIHRlcm1pb3MuVE9TVE9QOgorICAgICAgICAgICAgICAgIGJ1aWxkbG9nLmluZm8oIlRoZSB0ZXJtaW5hbCBoYWQgdGhlIFRPU1RPUCBiaXQgc2V0LCBjbGVhcmluZy4uLiIpCisgICAgICAgICAgICAgICAgdGNhdHRyWzNdID0gdGNhdHRyWzNdICYgfnRlcm1pb3MuVE9TVE9QCisgICAgICAgICAgICAgICAgdGVybWlvcy50Y3NldGF0dHIoZmQsIHRlcm1pb3MuVENTQU5PVywgdGNhdHRyKQorCisgICAgICAgIHNlbGYuY29tbWFuZCA9IGJiLmNvbW1hbmQuQ29tbWFuZChzZWxmKQorICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUuaW5pdGlhbAorCisgICAgICAgIHNlbGYucGFyc2VyID0gTm9uZQorCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIHNlbGYuc2lndGVybV9leGNlcHRpb24pCisgICAgICAgICMgTGV0IFNJR0hVUCBleGl0IGFzIFNJR1RFUk0KKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSFVQLCBzZWxmLnNpZ3Rlcm1fZXhjZXB0aW9uKQorCisgICAgZGVmIGNvbmZpZ19ub3RpZmljYXRpb25zKHNlbGYsIGV2ZW50KToKKyAgICAgICAgaWYgbm90IGV2ZW50LnBhdGhuYW1lIGluIHNlbGYuY29uZmlnd2F0Y2hlci5iYndhdGNoZWRmaWxlczoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBub3QgZXZlbnQucGF0aCBpbiBzZWxmLmlub3RpZnlfbW9kaWZpZWRfZmlsZXM6CisgICAgICAgICAgICBzZWxmLmlub3RpZnlfbW9kaWZpZWRfZmlsZXMuYXBwZW5kKGV2ZW50LnBhdGgpCisgICAgICAgIHNlbGYuYmFzZWNvbmZpZ192YWxpZCA9IEZhbHNlCisKKyAgICBkZWYgbm90aWZpY2F0aW9ucyhzZWxmLCBldmVudCk6CisgICAgICAgIGlmIG5vdCBldmVudC5wYXRoIGluIHNlbGYuaW5vdGlmeV9tb2RpZmllZF9maWxlczoKKyAgICAgICAgICAgIHNlbGYuaW5vdGlmeV9tb2RpZmllZF9maWxlcy5hcHBlbmQoZXZlbnQucGF0aCkKKyAgICAgICAgc2VsZi5wYXJzZWNhY2hlX3ZhbGlkID0gRmFsc2UKKworICAgIGRlZiBhZGRfZmlsZXdhdGNoKHNlbGYsIGRlcHMsIHdhdGNoZXI9Tm9uZSk6CisgICAgICAgIGlmIG5vdCB3YXRjaGVyOgorICAgICAgICAgICAgd2F0Y2hlciA9IHNlbGYud2F0Y2hlcgorICAgICAgICBmb3IgaSBpbiBkZXBzOgorICAgICAgICAgICAgd2F0Y2hlci5iYndhdGNoZWRmaWxlcy5hcHBlbmQoaVswXSkKKyAgICAgICAgICAgIGYgPSBvcy5wYXRoLmRpcm5hbWUoaVswXSkKKyAgICAgICAgICAgIGlmIGYgaW4gd2F0Y2hlci5iYnNlZW46CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHdhdGNoZXIuYmJzZWVuLmFwcGVuZChmKQorICAgICAgICAgICAgd2F0Y2h0YXJnZXQgPSBOb25lCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICMgV2UgdHJ5IGFuZCBhZGQgd2F0Y2hlcyBmb3IgZmlsZXMgdGhhdCBkb24ndCBleGlzdCBidXQgaWYgdGhleSBkaWQsIHdvdWxkIGluZmx1ZW5jZQorICAgICAgICAgICAgICAgICMgdGhlIHBhcnNlci4gVGhlIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlc2UgZmlsZXMgbWF5IG5vdCBleGlzdCwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIAorICAgICAgICAgICAgICAgICMgdG8gd2F0Y2ggYW55IHBhcmVudCB0aGF0IGRvZXMgZXhpc3QgZm9yIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB3YXRjaGVyLmFkZF93YXRjaChmLCBzZWxmLndhdGNobWFzaywgcXVpZXQ9RmFsc2UpCisgICAgICAgICAgICAgICAgICAgIGlmIHdhdGNodGFyZ2V0OgorICAgICAgICAgICAgICAgICAgICAgICAgd2F0Y2hlci5iYndhdGNoZWRmaWxlcy5hcHBlbmQod2F0Y2h0YXJnZXQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZXhjZXB0IHB5aW5vdGlmeS5XYXRjaE1hbmFnZXJFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBpZiAnRU5PRU5UJyBpbiBzdHIoZSk6CisgICAgICAgICAgICAgICAgICAgICAgICB3YXRjaHRhcmdldCA9IGYKKyAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBvcy5wYXRoLmRpcm5hbWUoZikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGYgaW4gd2F0Y2hlci5iYnNlZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdhdGNoZXIuYmJzZWVuLmFwcGVuZChmKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgaWYgJ0VOT1NQQycgaW4gc3RyKGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXJsb2cuZXJyb3IoIk5vIHNwYWNlIGxlZnQgb24gZGV2aWNlIG9yIGV4Y2VlZHMgZnMuaW5vdGlmeS5tYXhfdXNlcl93YXRjaGVzPyIpCisgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlcmxvZy5lcnJvcigiVG8gY2hlY2sgbWF4X3VzZXJfd2F0Y2hlczogc3lzY3RsIC1uIGZzLmlub3RpZnkubWF4X3VzZXJfd2F0Y2hlcy4iKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXJsb2cuZXJyb3IoIlRvIG1vZGlmeSBtYXhfdXNlcl93YXRjaGVzOiBzeXNjdGwgLW4gLXcgZnMuaW5vdGlmeS5tYXhfdXNlcl93YXRjaGVzPTx2YWx1ZT4uIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVybG9nLmVycm9yKCJSb290IHByaXZpbGVnZSBpcyByZXF1aXJlZCB0byBtb2RpZnkgbWF4X3VzZXJfd2F0Y2hlcy4iKQorICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIHNpZ3Rlcm1fZXhjZXB0aW9uKHNlbGYsIHNpZ251bSwgc3RhY2tmcmFtZSk6CisgICAgICAgIGlmIHNpZ251bSA9PSBzaWduYWwuU0lHVEVSTToKKyAgICAgICAgICAgIGJiLndhcm4oIkNvb2tlciByZWNpZXZlZCBTSUdURVJNLCBzaHV0dGluZyBkb3duLi4uIikKKyAgICAgICAgZWxpZiBzaWdudW0gPT0gc2lnbmFsLlNJR0hVUDoKKyAgICAgICAgICAgIGJiLndhcm4oIkNvb2tlciByZWNpZXZlZCBTSUdIVVAsIHNodXR0aW5nIGRvd24uLi4iKQorICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUuZm9yY2VzaHV0ZG93bgorCisgICAgZGVmIHNldEZlYXR1cmVzKHNlbGYsIGZlYXR1cmVzKToKKyAgICAgICAgIyB3ZSBvbmx5IGFjY2VwdCBhIG5ldyBmZWF0dXJlIHNldCBpZiB3ZSdyZSBpbiBzdGF0ZSBpbml0aWFsLCBzbyB3ZSBjYW4gcmVzZXQgd2l0aG91dCBwcm9ibGVtcworICAgICAgICBpZiBub3Qgc2VsZi5zdGF0ZSBpbiBbc3RhdGUuaW5pdGlhbCwgc3RhdGUuc2h1dGRvd24sIHN0YXRlLmZvcmNlc2h1dGRvd24sIHN0YXRlLnN0b3BwZWQsIHN0YXRlLmVycm9yXToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiSWxsZWdhbCBzdGF0ZSBmb3IgZmVhdHVyZSBzZXQgY2hhbmdlIikKKyAgICAgICAgb3JpZ2luYWxfZmVhdHVyZXNldCA9IGxpc3Qoc2VsZi5mZWF0dXJlc2V0KQorICAgICAgICBmb3IgZmVhdHVyZSBpbiBmZWF0dXJlczoKKyAgICAgICAgICAgIHNlbGYuZmVhdHVyZXNldC5zZXRGZWF0dXJlKGZlYXR1cmUpCisgICAgICAgIGJiLmRlYnVnKDEsICJGZWF0dXJlcyBzZXQgJXMgKHdhcyAlcykiICUgKG9yaWdpbmFsX2ZlYXR1cmVzZXQsIGxpc3Qoc2VsZi5mZWF0dXJlc2V0KSkpCisgICAgICAgIGlmIChvcmlnaW5hbF9mZWF0dXJlc2V0ICE9IGxpc3Qoc2VsZi5mZWF0dXJlc2V0KSkgYW5kIHNlbGYuc3RhdGUgIT0gc3RhdGUuZXJyb3I6CisgICAgICAgICAgICBzZWxmLnJlc2V0KCkKKworICAgIGRlZiBpbml0Q29uZmlndXJhdGlvbkRhdGEoc2VsZik6CisKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHN0YXRlLmluaXRpYWwKKyAgICAgICAgc2VsZi5jYWNoZXNfYXJyYXkgPSBbXQorCisgICAgICAgIGlmIENvb2tlckZlYXR1cmVzLkJBU0VEQVRBU1RPUkVfVFJBQ0tJTkcgaW4gc2VsZi5mZWF0dXJlc2V0OgorICAgICAgICAgICAgc2VsZi5lbmFibGVEYXRhVHJhY2tpbmcoKQorCisgICAgICAgIGFsbF9leHRyYV9jYWNoZV9uYW1lcyA9IFtdCisgICAgICAgICMgV2UgaGFyZGNvZGUgYWxsIGtub3duIGNhY2hlIHR5cGVzIGluIGEgc2luZ2xlIHBsYWNlLCBoZXJlLgorICAgICAgICBpZiBDb29rZXJGZWF0dXJlcy5IT0JfRVhUUkFfQ0FDSEVTIGluIHNlbGYuZmVhdHVyZXNldDoKKyAgICAgICAgICAgIGFsbF9leHRyYV9jYWNoZV9uYW1lcy5hcHBlbmQoImJiLmNhY2hlX2V4dHJhOkhvYlJlY2lwZUluZm8iKQorCisgICAgICAgIGNhY2hlc19uYW1lX2FycmF5ID0gWydiYi5jYWNoZTpDb3JlUmVjaXBlSW5mbyddICsgYWxsX2V4dHJhX2NhY2hlX25hbWVzCisKKyAgICAgICAgIyBBdCBsZWFzdCBDb3JlUmVjaXBlSW5mbyB3aWxsIGJlIGxvYWRlZCwgc28gY2FjaGVzX2FycmF5IHdpbGwgbmV2ZXIgYmUgZW1wdHkhCisgICAgICAgICMgVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQsIG5vIGZ1cnRoZXIgY2hlY2sgbmVlZGVkIQorICAgICAgICBmb3IgdmFyIGluIGNhY2hlc19uYW1lX2FycmF5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZV9uYW1lLCBjYWNoZV9uYW1lID0gdmFyLnNwbGl0KCc6JykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKG1vZHVsZV9uYW1lLCBmcm9tbGlzdD0oY2FjaGVfbmFtZSwpKQorICAgICAgICAgICAgICAgIHNlbGYuY2FjaGVzX2FycmF5LmFwcGVuZChnZXRhdHRyKG1vZHVsZSwgY2FjaGVfbmFtZSkpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGxvZ2dlci5jcml0aWNhbCgiVW5hYmxlIHRvIGltcG9ydCBleHRyYSBSZWNpcGVJbmZvICclcycgZnJvbSAnJXMnOiAlcyIgJSAoY2FjaGVfbmFtZSwgbW9kdWxlX25hbWUsIGV4YykpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoIkZBVEFMOiBGYWlsZWQgdG8gaW1wb3J0IGV4dHJhIGNhY2hlIGNsYXNzICclcycuIiAlIGNhY2hlX25hbWUpCisKKyAgICAgICAgc2VsZi5kYXRhYnVpbGRlciA9IGJiLmNvb2tlcmRhdGEuQ29va2VyRGF0YUJ1aWxkZXIoc2VsZi5jb25maWd1cmF0aW9uLCBGYWxzZSkKKyAgICAgICAgc2VsZi5kYXRhYnVpbGRlci5wYXJzZUJhc2VDb25maWd1cmF0aW9uKCkKKyAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5kYXRhYnVpbGRlci5kYXRhCisgICAgICAgIHNlbGYuZGF0YV9oYXNoID0gc2VsZi5kYXRhYnVpbGRlci5kYXRhX2hhc2gKKworCisgICAgICAgICMgd2UgbG9nIGFsbCBldmVudHMgdG8gYSBmaWxlIGlmIHNvIGRpcmVjdGVkCisgICAgICAgIGlmIHNlbGYuY29uZmlndXJhdGlvbi53cml0ZWV2ZW50bG9nOgorICAgICAgICAgICAgaW1wb3J0IGpzb24sIHBpY2tsZQorICAgICAgICAgICAgREVGQVVMVF9FVkVOVEZJTEUgPSBzZWxmLmNvbmZpZ3VyYXRpb24ud3JpdGVldmVudGxvZworICAgICAgICAgICAgY2xhc3MgRXZlbnRMb2dXcml0ZUhhbmRsZXIoKToKKworICAgICAgICAgICAgICAgIGNsYXNzIEV2ZW50V3JpdGVyKCk6CisgICAgICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb29rZXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlX2luaXRlZCA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29va2VyID0gY29va2VyCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV2ZW50X3F1ZXVlID0gW10KKworICAgICAgICAgICAgICAgICAgICBkZWYgaW5pdF9maWxlKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGVsZXRlIHRoZSBvbGQgbG9nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKERFRkFVTFRfRVZFTlRGSUxFKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgICAgICAgICAgICAgIyB3cml0ZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKERFRkFVTFRfRVZFTlRGSUxFLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiJXNcbiIgJSBqc29uLmR1bXBzKHsgImFsbHZhcmlhYmxlcyIgOiBzZWxmLmNvb2tlci5nZXRBbGxLZXlzV2l0aEZsYWdzKFsiZG9jIiwgImZ1bmMiXSl9KSkKKworICAgICAgICAgICAgICAgICAgICBkZWYgd3JpdGVfZXZlbnQoc2VsZiwgZXZlbnQpOgorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKERFRkFVTFRfRVZFTlRGSUxFLCAiYSIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCIlc1xuIiAlIGpzb24uZHVtcHMoeyJjbGFzcyI6ZXZlbnQuX19tb2R1bGVfXyArICIuIiArIGV2ZW50Ll9fY2xhc3NfXy5fX25hbWVfXywgInZhcnMiOmpzb24uZHVtcHMocGlja2xlLmR1bXBzKGV2ZW50KSkgfSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGUsIHRyYWNlYmFjay5mb3JtYXRfZXhjKGUpKQorCisKKyAgICAgICAgICAgICAgICAgICAgZGVmIHNlbmQoc2VsZiwgZXZlbnQpOgorICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfY2xhc3MgPSBldmVudC5fX21vZHVsZV9fICsgIi4iICsgZXZlbnQuX19jbGFzc19fLl9fbmFtZV9fCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgaW5pdCBvbiBiYi5ldmVudC5CdWlsZFN0YXJ0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZmlsZV9pbml0ZWQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAgZXZlbnRfY2xhc3MgPT0gImJiLmV2ZW50LkJ1aWxkU3RhcnRlZCI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdF9maWxlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlX2luaXRlZCA9IFRydWUKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdyaXRlIHBlbmRpbmcgZXZlbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBlIGluIHNlbGYuZXZlbnRfcXVldWU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2V2ZW50KGUpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbHNvIHdyaXRlIHRoZSBjdXJyZW50IGV2ZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfZXZlbnQoZXZlbnQpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHF1ZXVlIGFsbCBldmVudHMgdW50aWwgdGhlIGZpbGUgaXMgaW5pdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXZlbnRfcXVldWUuYXBwZW5kKGV2ZW50KQorCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2UgaGF2ZSB0aGUgZmlsZSwganVzdCB3cml0ZSB0aGUgZXZlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2V2ZW50KGV2ZW50KQorCisgICAgICAgICAgICAgICAgIyBzZXQgb3VyIGhhbmRsZXIncyBldmVudCBwcm9jZXNzb3IKKyAgICAgICAgICAgICAgICBldmVudCA9IEV2ZW50V3JpdGVyKHNlbGYpICAgICAgICMgc2VsZiBpcyB0aGUgY29va2VyIGhlcmUKKworCisgICAgICAgICAgICAjIHNldCB1cCBjb29rZXIgZmVhdHVyZXMgZm9yIHRoaXMgbW9jayBVSSBoYW5kbGVyCisKKyAgICAgICAgICAgICMgd2UgbmVlZCB0byB3cml0ZSB0aGUgZGVwZW5kZW5jeSB0cmVlIGluIHRoZSBsb2cKKyAgICAgICAgICAgIHNlbGYuZmVhdHVyZXNldC5zZXRGZWF0dXJlKENvb2tlckZlYXR1cmVzLlNFTkRfREVQRU5EU19UUkVFKQorICAgICAgICAgICAgIyByZWdpc3RlciB0aGUgbG9nIGZpbGUgd3JpdGVyIGFzIFVJIEhhbmRsZXIKKyAgICAgICAgICAgIGJiLmV2ZW50LnJlZ2lzdGVyX1VJSGhhbmRsZXIoRXZlbnRMb2dXcml0ZUhhbmRsZXIoKSkKKworCisgICAgICAgICMKKyAgICAgICAgIyBDb3B5IG9mIHRoZSBkYXRhIHN0b3JlIHdoaWNoIGhhcyBiZWVuIGV4cGFuZGVkLgorICAgICAgICAjIFVzZWQgZm9yIGZpcmluZyBldmVudHMgYW5kIGFjY2Vzc2luZyB2YXJpYWJsZXMgd2hlcmUgZXhwYW5zaW9uIG5lZWRzIHRvIGJlIGFjY291bnRlZCBmb3IKKyAgICAgICAgIworICAgICAgICBzZWxmLmV4cGFuZGVkX2RhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoc2VsZi5kYXRhKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKHNlbGYuZXhwYW5kZWRfZGF0YSkKKyAgICAgICAgYmIucGFyc2UuaW5pdF9wYXJzZXIoc2VsZi5leHBhbmRlZF9kYXRhKQorCisgICAgICAgIGlmIENvb2tlckZlYXR1cmVzLkJBU0VEQVRBU1RPUkVfVFJBQ0tJTkcgaW4gc2VsZi5mZWF0dXJlc2V0OgorICAgICAgICAgICAgc2VsZi5kaXNhYmxlRGF0YVRyYWNraW5nKCkKKworICAgICAgICBzZWxmLmRhdGEucmVuYW1lVmFyKCJfX2RlcGVuZHMiLCAiX19iYXNlX2RlcGVuZHMiKQorICAgICAgICBzZWxmLmFkZF9maWxld2F0Y2goc2VsZi5kYXRhLmdldFZhcigiX19iYXNlX2RlcGVuZHMiLCBGYWxzZSksIHNlbGYuY29uZmlnd2F0Y2hlcikKKworCisgICAgZGVmIGVuYWJsZURhdGFUcmFja2luZyhzZWxmKToKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnRyYWNraW5nID0gVHJ1ZQorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICJkYXRhIik6CisgICAgICAgICAgICBzZWxmLmRhdGEuZW5hYmxlVHJhY2tpbmcoKQorCisgICAgZGVmIGRpc2FibGVEYXRhVHJhY2tpbmcoc2VsZik6CisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi50cmFja2luZyA9IEZhbHNlCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgImRhdGEiKToKKyAgICAgICAgICAgIHNlbGYuZGF0YS5kaXNhYmxlVHJhY2tpbmcoKQorCisgICAgZGVmIG1vZGlmeUNvbmZpZ3VyYXRpb25WYXIoc2VsZiwgdmFyLCB2YWwsIGRlZmF1bHRfZmlsZSwgb3ApOgorICAgICAgICBpZiBvcCA9PSAiYXBwZW5kIjoKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kQ29uZmlndXJhdGlvblZhcih2YXIsIHZhbCwgZGVmYXVsdF9maWxlKQorICAgICAgICBlbGlmIG9wID09ICJzZXQiOgorICAgICAgICAgICAgc2VsZi5zYXZlQ29uZmlndXJhdGlvblZhcih2YXIsIHZhbCwgZGVmYXVsdF9maWxlLCAiPSIpCisgICAgICAgIGVsaWYgb3AgPT0gImVhcmx5QXNzaWduIjoKKyAgICAgICAgICAgIHNlbGYuc2F2ZUNvbmZpZ3VyYXRpb25WYXIodmFyLCB2YWwsIGRlZmF1bHRfZmlsZSwgIj89IikKKworCisgICAgZGVmIGFwcGVuZENvbmZpZ3VyYXRpb25WYXIoc2VsZiwgdmFyLCB2YWwsIGRlZmF1bHRfZmlsZSk6CisgICAgICAgICNhZGQgYXBwZW5kIHZhciBvcGVyYXRpb24gdG8gdGhlIGVuZCBvZiBkZWZhdWx0X2ZpbGUKKyAgICAgICAgZGVmYXVsdF9maWxlID0gYmIuY29va2VyZGF0YS5maW5kQ29uZmlnRmlsZShkZWZhdWx0X2ZpbGUsIHNlbGYuZGF0YSkKKworICAgICAgICB0b3RhbCA9ICIjYWRkZWQgYnkgaG9iIgorICAgICAgICB0b3RhbCArPSAiXG4lcyArPSBcIiVzXCJcbiIgJSAodmFyLCB2YWwpCisKKyAgICAgICAgd2l0aCBvcGVuKGRlZmF1bHRfZmlsZSwgJ2EnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSh0b3RhbCkKKworICAgICAgICAjYWRkIHRvIGhpc3RvcnkKKyAgICAgICAgbG9naW5mbyA9IHsib3AiOiJhcHBlbmQiLCAiZmlsZSI6ZGVmYXVsdF9maWxlLCAibGluZSI6dG90YWwuY291bnQoIlxuIil9CisgICAgICAgIHNlbGYuZGF0YS5hcHBlbmRWYXIodmFyLCB2YWwsICoqbG9naW5mbykKKworICAgIGRlZiBzYXZlQ29uZmlndXJhdGlvblZhcihzZWxmLCB2YXIsIHZhbCwgZGVmYXVsdF9maWxlLCBvcCk6CisKKyAgICAgICAgcmVwbGFjZWQgPSBGYWxzZQorICAgICAgICAjZG8gbm90IHNhdmUgaWYgbm90aGluZyBjaGFuZ2VkCisgICAgICAgIGlmIHN0cih2YWwpID09IHNlbGYuZGF0YS5nZXRWYXIodmFyLCBGYWxzZSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBjb25mX2ZpbGVzID0gc2VsZi5kYXRhLnZhcmhpc3RvcnkuZ2V0X3ZhcmlhYmxlX2ZpbGVzKHZhcikKKworICAgICAgICAjZm9ybWF0IHRoZSB2YWx1ZSB3aGVuIGl0IGlzIGEgbGlzdAorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbCwgbGlzdCk6CisgICAgICAgICAgICBsaXN0dmFsID0gIiIKKyAgICAgICAgICAgIGZvciB2YWx1ZSBpbiB2YWw6CisgICAgICAgICAgICAgICAgbGlzdHZhbCArPSAiJXMgICAiICUgdmFsdWUKKyAgICAgICAgICAgIHZhbCA9IGxpc3R2YWwKKworICAgICAgICB0b3BkaXIgPSBzZWxmLmRhdGEuZ2V0VmFyKCJUT1BESVIiLCBGYWxzZSkKKworICAgICAgICAjY29tbWVudCBvciByZXBsYWNlIG9wZXJhdGlvbnMgbWFkZSBvbiB2YXIKKyAgICAgICAgZm9yIGNvbmZfZmlsZSBpbiBjb25mX2ZpbGVzOgorICAgICAgICAgICAgaWYgdG9wZGlyIGluIGNvbmZfZmlsZToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oY29uZl9maWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzID0gZi5yZWFkbGluZXMoKQorCisgICAgICAgICAgICAgICAgbGluZXMgPSBzZWxmLmRhdGEudmFyaGlzdG9yeS5nZXRfdmFyaWFibGVfbGluZXModmFyLCBjb25mX2ZpbGUpCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgICAgIHRvdGFsID0gIiIKKyAgICAgICAgICAgICAgICAgICAgaSA9IDAKKyAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gY29udGVudHM6CisgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBjCisgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSArIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGk9PWludChsaW5lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfaW5kZXggPSBsZW4odG90YWwpCisgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gdG90YWwucmZpbmQodmFyLCAwLCBlbmRfaW5kZXgpCisKKyAgICAgICAgICAgICAgICAgICAgYmVnaW5fbGluZSA9IHRvdGFsLmNvdW50KCJcbiIsMCxpbmRleCkKKyAgICAgICAgICAgICAgICAgICAgZW5kX2xpbmUgPSBpbnQobGluZSkKKworICAgICAgICAgICAgICAgICAgICAjY2hlY2sgaWYgdGhlIHZhcmlhYmxlIHdhcyBzYXZlZCBiZWZvcmUgaW4gdGhlIHNhbWUgd2F5CisgICAgICAgICAgICAgICAgICAgICNpZiB0cnVlIGl0IHJlcGxhY2UgdGhlIHBsYWNlIHdoZXJlIHRoZSB2YXJpYWJsZSB3YXMgZGVjbGFyZWQKKyAgICAgICAgICAgICAgICAgICAgI2Vsc2UgaXQgY29tbWVudHMgaXQKKyAgICAgICAgICAgICAgICAgICAgaWYgY29udGVudHNbYmVnaW5fbGluZS0xXT09ICIjYWRkZWQgYnkgaG9iXG4iOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHNbYmVnaW5fbGluZV0gPSAiJXMgJXMgXCIlc1wiXG4iICUgKHZhciwgb3AsIHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGlpIGluIHJhbmdlKGJlZ2luX2xpbmUsIGVuZF9saW5lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50c1tpaV0gPSAiIyIgKyBjb250ZW50c1tpaV0KKworICAgICAgICAgICAgICAgIHdpdGggb3Blbihjb25mX2ZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZWxpbmVzKGNvbnRlbnRzKQorCisgICAgICAgIGlmIHJlcGxhY2VkID09IEZhbHNlOgorICAgICAgICAgICAgI3JlbW92ZSB2YXIgZnJvbSBoaXN0b3J5CisgICAgICAgICAgICBzZWxmLmRhdGEudmFyaGlzdG9yeS5kZWxfdmFyX2hpc3RvcnkodmFyKQorCisgICAgICAgICAgICAjYWRkIHZhciB0byB0aGUgZW5kIG9mIGRlZmF1bHRfZmlsZQorICAgICAgICAgICAgZGVmYXVsdF9maWxlID0gYmIuY29va2VyZGF0YS5maW5kQ29uZmlnRmlsZShkZWZhdWx0X2ZpbGUsIHNlbGYuZGF0YSkKKworICAgICAgICAgICAgI2FkZCB0aGUgdmFyaWFibGUgb24gYSBzaW5nbGUgbGluZSwgdG8gYmUgZWFzeSB0byByZXBsYWNlIHRoZSBzZWNvbmQgdGltZQorICAgICAgICAgICAgdG90YWwgPSAiXG4jYWRkZWQgYnkgaG9iIgorICAgICAgICAgICAgdG90YWwgKz0gIlxuJXMgJXMgXCIlc1wiXG4iICUgKHZhciwgb3AsIHZhbCkKKworICAgICAgICAgICAgd2l0aCBvcGVuKGRlZmF1bHRfZmlsZSwgJ2EnKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUodG90YWwpCisKKyAgICAgICAgICAgICNhZGQgdG8gaGlzdG9yeQorICAgICAgICAgICAgbG9naW5mbyA9IHsib3AiOiJzZXQiLCAiZmlsZSI6ZGVmYXVsdF9maWxlLCAibGluZSI6dG90YWwuY291bnQoIlxuIil9CisgICAgICAgICAgICBzZWxmLmRhdGEuc2V0VmFyKHZhciwgdmFsLCAqKmxvZ2luZm8pCisKKyAgICBkZWYgcmVtb3ZlQ29uZmlndXJhdGlvblZhcihzZWxmLCB2YXIpOgorICAgICAgICBjb25mX2ZpbGVzID0gc2VsZi5kYXRhLnZhcmhpc3RvcnkuZ2V0X3ZhcmlhYmxlX2ZpbGVzKHZhcikKKyAgICAgICAgdG9wZGlyID0gc2VsZi5kYXRhLmdldFZhcigiVE9QRElSIiwgRmFsc2UpCisKKyAgICAgICAgZm9yIGNvbmZfZmlsZSBpbiBjb25mX2ZpbGVzOgorICAgICAgICAgICAgaWYgdG9wZGlyIGluIGNvbmZfZmlsZToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oY29uZl9maWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzID0gZi5yZWFkbGluZXMoKQorCisgICAgICAgICAgICAgICAgbGluZXMgPSBzZWxmLmRhdGEudmFyaGlzdG9yeS5nZXRfdmFyaWFibGVfbGluZXModmFyLCBjb25mX2ZpbGUpCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgICAgIHRvdGFsID0gIiIKKyAgICAgICAgICAgICAgICAgICAgaSA9IDAKKyAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gY29udGVudHM6CisgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBjCisgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSArIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGk9PWludChsaW5lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfaW5kZXggPSBsZW4odG90YWwpCisgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gdG90YWwucmZpbmQodmFyLCAwLCBlbmRfaW5kZXgpCisKKyAgICAgICAgICAgICAgICAgICAgYmVnaW5fbGluZSA9IHRvdGFsLmNvdW50KCJcbiIsMCxpbmRleCkKKworICAgICAgICAgICAgICAgICAgICAjY2hlY2sgaWYgdGhlIHZhcmlhYmxlIHdhcyBzYXZlZCBiZWZvcmUgaW4gdGhlIHNhbWUgd2F5CisgICAgICAgICAgICAgICAgICAgIGlmIGNvbnRlbnRzW2JlZ2luX2xpbmUtMV09PSAiI2FkZGVkIGJ5IGhvYlxuIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzW2JlZ2luX2xpbmUtMV0gPSBjb250ZW50c1tiZWdpbl9saW5lXSA9ICJcbiIKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzW2JlZ2luX2xpbmVdID0gIlxuIgorICAgICAgICAgICAgICAgICAgICAjcmVtb3ZlIHZhciBmcm9tIGhpc3RvcnkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXRhLnZhcmhpc3RvcnkuZGVsX3Zhcl9oaXN0b3J5KHZhciwgY29uZl9maWxlLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICAjcmVtb3ZlIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF0YS5kZWxWYXIodmFyKQorCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGNvbmZfZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlbGluZXMoY29udGVudHMpCisKKyAgICBkZWYgY3JlYXRlQ29uZmlnRmlsZShzZWxmLCBuYW1lKToKKyAgICAgICAgcGF0aCA9IG9zLmdldGN3ZCgpCisgICAgICAgIGNvbmZwYXRoID0gb3MucGF0aC5qb2luKHBhdGgsICJjb25mIiwgbmFtZSkKKyAgICAgICAgb3Blbihjb25mcGF0aCwgJ3cnKS5jbG9zZSgpCisKKyAgICBkZWYgcGFyc2VDb25maWd1cmF0aW9uKHNlbGYpOgorICAgICAgICAjIFNldCBsb2cgZmlsZSB2ZXJib3NpdHkKKyAgICAgICAgdmVyYm9zZWxvZ3MgPSBiYi51dGlscy50b19ib29sZWFuKHNlbGYuZGF0YS5nZXRWYXIoIkJCX1ZFUkJPU0VfTE9HUyIsIEZhbHNlKSkKKyAgICAgICAgaWYgdmVyYm9zZWxvZ3M6CisgICAgICAgICAgICBiYi5tc2cubG9nZ2VyVmVyYm9zZUxvZ3MgPSBUcnVlCisKKyAgICAgICAgIyBDaGFuZ2UgbmljZSBsZXZlbCBpZiB3ZSdyZSBhc2tlZCB0bworICAgICAgICBuaWNlID0gc2VsZi5kYXRhLmdldFZhcigiQkJfTklDRV9MRVZFTCIsIFRydWUpCisgICAgICAgIGlmIG5pY2U6CisgICAgICAgICAgICBjdXJuaWNlID0gb3MubmljZSgwKQorICAgICAgICAgICAgbmljZSA9IGludChuaWNlKSAtIGN1cm5pY2UKKyAgICAgICAgICAgIGJ1aWxkbG9nLnZlcmJvc2UoIlJlbmljZSB0byAlcyAiICUgb3MubmljZShuaWNlKSkKKworICAgICAgICBpZiBzZWxmLnJlY2lwZWNhY2hlOgorICAgICAgICAgICAgZGVsIHNlbGYucmVjaXBlY2FjaGUKKyAgICAgICAgc2VsZi5yZWNpcGVjYWNoZSA9IGJiLmNhY2hlLkNhY2hlRGF0YShzZWxmLmNhY2hlc19hcnJheSkKKworICAgICAgICBzZWxmLmhhbmRsZUNvbGxlY3Rpb25zKCBzZWxmLmRhdGEuZ2V0VmFyKCJCQkZJTEVfQ09MTEVDVElPTlMiLCBUcnVlKSApCisKKyAgICBkZWYgdXBkYXRlQ29uZmlnT3B0cyhzZWxmLCBvcHRpb25zLCBlbnZpcm9ubWVudCk6CisgICAgICAgIGNsZWFuID0gVHJ1ZQorICAgICAgICBmb3IgbyBpbiBvcHRpb25zOgorICAgICAgICAgICAgaWYgbyBpbiBbJ3ByZWZpbGUnLCAncG9zdGZpbGUnXToKKyAgICAgICAgICAgICAgICBjbGVhbiA9IEZhbHNlCisgICAgICAgICAgICBzZXRhdHRyKHNlbGYuY29uZmlndXJhdGlvbiwgbywgb3B0aW9uc1tvXSkKKyAgICAgICAgZm9yIGsgaW4gYmIudXRpbHMuYXBwcm92ZWRfdmFyaWFibGVzKCk6CisgICAgICAgICAgICBpZiBrIGluIGVudmlyb25tZW50IGFuZCBrIG5vdCBpbiBzZWxmLmNvbmZpZ3VyYXRpb24uZW52OgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiVXBkYXRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGUgJXMgdG8gJXMiICUgKGssIGVudmlyb25tZW50W2tdKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uZW52W2tdID0gZW52aXJvbm1lbnRba10KKyAgICAgICAgICAgICAgICBjbGVhbiA9IEZhbHNlCisgICAgICAgICAgICBpZiBrIGluIHNlbGYuY29uZmlndXJhdGlvbi5lbnYgYW5kIGsgbm90IGluIGVudmlyb25tZW50OgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiVXBkYXRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGUgJXMgKGRlbGV0ZWQpIiAlIChrKSkKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5jb25maWd1cmF0aW9uLmVudltrXQorICAgICAgICAgICAgICAgIGNsZWFuID0gRmFsc2UKKyAgICAgICAgICAgIGlmIGsgbm90IGluIHNlbGYuY29uZmlndXJhdGlvbi5lbnYgYW5kIGsgbm90IGluIGVudmlyb25tZW50OgorICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZW52aXJvbm1lbnRba10gIT0gc2VsZi5jb25maWd1cmF0aW9uLmVudltrXToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlVwZGF0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlICVzIHRvICVzIiAlIChrLCBlbnZpcm9ubWVudFtrXSkpCisgICAgICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmVudltrXSA9IGVudmlyb25tZW50W2tdCisgICAgICAgICAgICAgICAgY2xlYW4gPSBGYWxzZQorICAgICAgICBpZiBub3QgY2xlYW46CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIkJhc2UgZW52aXJvbm1lbnQgY2hhbmdlLCB0cmlnZ2VyaW5nIHJlcGFyc2UiKQorICAgICAgICAgICAgc2VsZi5iYXNlY29uZmlnX3ZhbGlkID0gRmFsc2UgICAgICAgIAorICAgICAgICAgICAgc2VsZi5yZXNldCgpCisKKyAgICBkZWYgcnVuQ29tbWFuZHMoc2VsZiwgc2VydmVyLCBkYXRhLCBhYm9ydCk6CisgICAgICAgICIiIgorICAgICAgICBSdW4gYW55IHF1ZXVlZCBhc3luY2hyb25vdXMgY29tbWFuZAorICAgICAgICBUaGlzIGlzIGRvbmUgYnkgdGhlIGlkbGUgaGFuZGxlciBzbyBpdCBydW5zIGluIHRydWUgY29udGV4dCByYXRoZXIgdGhhbgorICAgICAgICB0aWVkIHRvIGFueSBVSS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgcmV0dXJuIHNlbGYuY29tbWFuZC5ydW5Bc3luY0NvbW1hbmQoKQorCisgICAgZGVmIHNob3dWZXJzaW9ucyhzZWxmKToKKworICAgICAgICBwa2dfcG4gPSBzZWxmLnJlY2lwZWNhY2hlLnBrZ19wbgorICAgICAgICAobGF0ZXN0X3ZlcnNpb25zLCBwcmVmZXJyZWRfdmVyc2lvbnMpID0gYmIucHJvdmlkZXJzLmZpbmRQcm92aWRlcnMoc2VsZi5kYXRhLCBzZWxmLnJlY2lwZWNhY2hlLCBwa2dfcG4pCisKKyAgICAgICAgbG9nZ2VyLnBsYWluKCIlLTM1cyAlMjVzICUyNXMiLCAiUmVjaXBlIE5hbWUiLCAiTGF0ZXN0IFZlcnNpb24iLCAiUHJlZmVycmVkIFZlcnNpb24iKQorICAgICAgICBsb2dnZXIucGxhaW4oIiUtMzVzICUyNXMgJTI1c1xuIiwgIj09PT09PT09PT09IiwgIj09PT09PT09PT09PT09IiwgIj09PT09PT09PT09PT09PT09IikKKworICAgICAgICBmb3IgcCBpbiBzb3J0ZWQocGtnX3BuKToKKyAgICAgICAgICAgIHByZWYgPSBwcmVmZXJyZWRfdmVyc2lvbnNbcF0KKyAgICAgICAgICAgIGxhdGVzdCA9IGxhdGVzdF92ZXJzaW9uc1twXQorCisgICAgICAgICAgICBwcmVmc3RyID0gcHJlZlswXVswXSArICI6IiArIHByZWZbMF1bMV0gKyAnLScgKyBwcmVmWzBdWzJdCisgICAgICAgICAgICBsYXRlc3RzdHIgPSBsYXRlc3RbMF1bMF0gKyAiOiIgKyBsYXRlc3RbMF1bMV0gKyAiLSIgKyBsYXRlc3RbMF1bMl0KKworICAgICAgICAgICAgaWYgcHJlZiA9PSBsYXRlc3Q6CisgICAgICAgICAgICAgICAgcHJlZnN0ciA9ICIiCisKKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiJS0zNXMgJTI1cyAlMjVzIiwgcCwgbGF0ZXN0c3RyLCBwcmVmc3RyKQorCisgICAgZGVmIHNob3dFbnZpcm9ubWVudChzZWxmLCBidWlsZGZpbGU9Tm9uZSwgcGtnc190b19idWlsZD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIFNob3cgdGhlIG91dGVyIG9yIHBlci1yZWNpcGUgZW52aXJvbm1lbnQKKyAgICAgICAgIiIiCisgICAgICAgIGZuID0gTm9uZQorICAgICAgICBlbnZkYXRhID0gTm9uZQorICAgICAgICBpZiBub3QgcGtnc190b19idWlsZDoKKyAgICAgICAgICAgIHBrZ3NfdG9fYnVpbGQgPSBbXQorCisgICAgICAgIGlmIGJ1aWxkZmlsZToKKyAgICAgICAgICAgICMgUGFyc2UgdGhlIGNvbmZpZ3VyYXRpb24gaGVyZS4gV2UgbmVlZCB0byBkbyBpdCBleHBsaWNpdGx5IGhlcmUgc2luY2UKKyAgICAgICAgICAgICMgdGhpcyBzaG93RW52aXJvbm1lbnQoKSBjb2RlIHBhdGggZG9lc24ndCB1c2UgdGhlIGNhY2hlCisgICAgICAgICAgICBzZWxmLnBhcnNlQ29uZmlndXJhdGlvbigpCisKKyAgICAgICAgICAgIGZuLCBjbHMgPSBiYi5jYWNoZS5DYWNoZS52aXJ0dWFsZm4ycmVhbGZuKGJ1aWxkZmlsZSkKKyAgICAgICAgICAgIGZuID0gc2VsZi5tYXRjaEZpbGUoZm4pCisgICAgICAgICAgICBmbiA9IGJiLmNhY2hlLkNhY2hlLnJlYWxmbjJ2aXJ0dWFsKGZuLCBjbHMpCisgICAgICAgIGVsaWYgbGVuKHBrZ3NfdG9fYnVpbGQpID09IDE6CisgICAgICAgICAgICBpZ25vcmUgPSBzZWxmLmV4cGFuZGVkX2RhdGEuZ2V0VmFyKCJBU1NVTUVfUFJPVklERUQiLCBUcnVlKSBvciAiIgorICAgICAgICAgICAgaWYgcGtnc190b19idWlsZFswXSBpbiBzZXQoaWdub3JlLnNwbGl0KCkpOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCIlcyBpcyBpbiBBU1NVTUVfUFJPVklERUQiICUgcGtnc190b19idWlsZFswXSkKKworICAgICAgICAgICAgdGFza2RhdGEsIHJ1bmxpc3QsIHBrZ3NfdG9fYnVpbGQgPSBzZWxmLmJ1aWxkVGFza0RhdGEocGtnc190b19idWlsZCwgTm9uZSwgc2VsZi5jb25maWd1cmF0aW9uLmFib3J0LCBhbGxvd2luY29tcGxldGU9VHJ1ZSkKKworICAgICAgICAgICAgdGFyZ2V0aWQgPSB0YXNrZGF0YS5nZXRidWlsZF9pZChwa2dzX3RvX2J1aWxkWzBdKQorICAgICAgICAgICAgZm5pZCA9IHRhc2tkYXRhLmJ1aWxkX3RhcmdldHNbdGFyZ2V0aWRdWzBdCisgICAgICAgICAgICBmbiA9IHRhc2tkYXRhLmZuX2luZGV4W2ZuaWRdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbnZkYXRhID0gc2VsZi5kYXRhCisKKyAgICAgICAgaWYgZm46CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZW52ZGF0YSA9IGJiLmNhY2hlLkNhY2hlLmxvYWREYXRhRnVsbChmbiwgc2VsZi5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoZm4pLCBzZWxmLmRhdGEpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgcGFyc2Vsb2cuZXhjZXB0aW9uKCJVbmFibGUgdG8gcmVhZCAlcyIsIGZuKQorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgIyBEaXNwbGF5IGhpc3RvcnkKKyAgICAgICAgd2l0aCBjbG9zaW5nKFN0cmluZ0lPKCkpIGFzIGVudjoKKyAgICAgICAgICAgIHNlbGYuZGF0YS5pbmNoaXN0b3J5LmVtaXQoZW52KQorICAgICAgICAgICAgbG9nZ2VyLnBsYWluKGVudi5nZXR2YWx1ZSgpKQorCisgICAgICAgICMgZW1pdCB2YXJpYWJsZXMgYW5kIHNoZWxsIGZ1bmN0aW9ucworICAgICAgICBkYXRhLnVwZGF0ZV9kYXRhKGVudmRhdGEpCisgICAgICAgIHdpdGggY2xvc2luZyhTdHJpbmdJTygpKSBhcyBlbnY6CisgICAgICAgICAgICBkYXRhLmVtaXRfZW52KGVudiwgZW52ZGF0YSwgVHJ1ZSkKKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbihlbnYuZ2V0dmFsdWUoKSkKKworICAgICAgICAjIGVtaXQgdGhlIG1ldGFkYXRhIHdoaWNoIGlzbnQgdmFsaWQgc2hlbGwKKyAgICAgICAgZGF0YS5leHBhbmRLZXlzKGVudmRhdGEpCisgICAgICAgIGZvciBlIGluIGVudmRhdGEua2V5cygpOgorICAgICAgICAgICAgaWYgZGF0YS5nZXRWYXJGbGFnKCBlLCAncHl0aG9uJywgZW52ZGF0YSApOgorICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiXG5weXRob24gJXMgKCkge1xuJXN9XG4iLCBlLCBlbnZkYXRhLmdldFZhcihlLCBUcnVlKSkKKworCisgICAgZGVmIGJ1aWxkVGFza0RhdGEoc2VsZiwgcGtnc190b19idWlsZCwgdGFzaywgYWJvcnQsIGFsbG93aW5jb21wbGV0ZT1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlIGEgcnVucXVldWUgYW5kIHRhc2tkYXRhIG9iamVjdCBmb3IgaXRlcmF0aW9uIG92ZXIgcGtnc190b19idWlsZAorICAgICAgICAiIiIKKyAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5UcmVlRGF0YVByZXBhcmF0aW9uU3RhcnRlZCgpLCBzZWxmLmRhdGEpCisKKyAgICAgICAgIyBBIHRhc2sgb2YgTm9uZSBtZWFucyB1c2UgdGhlIGRlZmF1bHQgdGFzaworICAgICAgICBpZiB0YXNrIGlzIE5vbmU6CisgICAgICAgICAgICB0YXNrID0gc2VsZi5jb25maWd1cmF0aW9uLmNtZAorCisgICAgICAgIGZ1bGx0YXJnZXRsaXN0ID0gc2VsZi5jaGVja1BhY2thZ2VzKHBrZ3NfdG9fYnVpbGQpCisKKyAgICAgICAgbG9jYWxkYXRhID0gZGF0YS5jcmVhdGVDb3B5KHNlbGYuZGF0YSkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIGJiLmRhdGEuZXhwYW5kS2V5cyhsb2NhbGRhdGEpCisgICAgICAgIHRhc2tkYXRhID0gYmIudGFza2RhdGEuVGFza0RhdGEoYWJvcnQsIHNraXBsaXN0PXNlbGYuc2tpcGxpc3QsIGFsbG93aW5jb21wbGV0ZT1hbGxvd2luY29tcGxldGUpCisKKyAgICAgICAgY3VycmVudCA9IDAKKyAgICAgICAgcnVubGlzdCA9IFtdCisgICAgICAgIGZvciBrIGluIGZ1bGx0YXJnZXRsaXN0OgorICAgICAgICAgICAga3Rhc2sgPSB0YXNrCisgICAgICAgICAgICBpZiAiOmRvXyIgaW4gazoKKyAgICAgICAgICAgICAgICBrMiA9IGsuc3BsaXQoIjpkb18iKQorICAgICAgICAgICAgICAgIGsgPSBrMlswXQorICAgICAgICAgICAgICAgIGt0YXNrID0gazJbMV0KKyAgICAgICAgICAgIHRhc2tkYXRhLmFkZF9wcm92aWRlcihsb2NhbGRhdGEsIHNlbGYucmVjaXBlY2FjaGUsIGspCisgICAgICAgICAgICBjdXJyZW50ICs9IDEKKyAgICAgICAgICAgIGlmIG5vdCBrdGFzay5zdGFydHN3aXRoKCJkb18iKToKKyAgICAgICAgICAgICAgICBrdGFzayA9ICJkb18lcyIgJSBrdGFzaworICAgICAgICAgICAgcnVubGlzdC5hcHBlbmQoW2ssIGt0YXNrXSkKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuVHJlZURhdGFQcmVwYXJhdGlvblByb2dyZXNzKGN1cnJlbnQsIGxlbihmdWxsdGFyZ2V0bGlzdCkpLCBzZWxmLmRhdGEpCisgICAgICAgIHRhc2tkYXRhLmFkZF91bnJlc29sdmVkKGxvY2FsZGF0YSwgc2VsZi5yZWNpcGVjYWNoZSkKKyAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5UcmVlRGF0YVByZXBhcmF0aW9uQ29tcGxldGVkKGxlbihmdWxsdGFyZ2V0bGlzdCkpLCBzZWxmLmRhdGEpCisgICAgICAgIHJldHVybiB0YXNrZGF0YSwgcnVubGlzdCwgZnVsbHRhcmdldGxpc3QKKworICAgIGRlZiBwcmVwYXJlVHJlZURhdGEoc2VsZiwgcGtnc190b19idWlsZCwgdGFzayk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlIGEgcnVucXVldWUgYW5kIHRhc2tkYXRhIG9iamVjdCBmb3IgaXRlcmF0aW9uIG92ZXIgcGtnc190b19idWlsZAorICAgICAgICAiIiIKKworICAgICAgICAjIFdlIHNldCBhYm9ydCB0byBGYWxzZSBoZXJlIHRvIHByZXZlbnQgdW5idWlsZGFibGUgdGFyZ2V0cyByYWlzaW5nCisgICAgICAgICMgYW4gZXhjZXB0aW9uIHdoZW4gd2UncmUganVzdCBnZW5lcmF0aW5nIGRhdGEKKyAgICAgICAgdGFza2RhdGEsIHJ1bmxpc3QsIHBrZ3NfdG9fYnVpbGQgPSBzZWxmLmJ1aWxkVGFza0RhdGEocGtnc190b19idWlsZCwgdGFzaywgRmFsc2UsIGFsbG93aW5jb21wbGV0ZT1UcnVlKQorCisgICAgICAgIHJldHVybiBydW5saXN0LCB0YXNrZGF0YQorCisgICAgIyMjIyMjIyMgV0FSTklORyA6IHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgY2FjaGVfZXh0cmEgdG8gYmUgZW5hYmxlZCAjIyMjIyMjIworCisgICAgZGVmIGdlbmVyYXRlVGFza0RlcFRyZWVEYXRhKHNlbGYsIHBrZ3NfdG9fYnVpbGQsIHRhc2spOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGEgZGVwZW5kZW5jeSBncmFwaCBvZiBwa2dzX3RvX2J1aWxkIGluY2x1ZGluZyByZXZlcnNlIGRlcGVuZGVuY3kKKyAgICAgICAgaW5mb3JtYXRpb24uCisgICAgICAgICIiIgorICAgICAgICBydW5saXN0LCB0YXNrZGF0YSA9IHNlbGYucHJlcGFyZVRyZWVEYXRhKHBrZ3NfdG9fYnVpbGQsIHRhc2spCisgICAgICAgIHJxID0gYmIucnVucXVldWUuUnVuUXVldWUoc2VsZiwgc2VsZi5kYXRhLCBzZWxmLnJlY2lwZWNhY2hlLCB0YXNrZGF0YSwgcnVubGlzdCkKKyAgICAgICAgcnEucnFkYXRhLnByZXBhcmUoKQorICAgICAgICByZXR1cm4gc2VsZi5idWlsZERlcGVuZFRyZWUocnEsIHRhc2tkYXRhKQorCisKKyAgICBkZWYgYnVpbGREZXBlbmRUcmVlKHNlbGYsIHJxLCB0YXNrZGF0YSk6CisgICAgICAgIHNlZW5fZm5pZHMgPSBbXQorICAgICAgICBkZXBlbmRfdHJlZSA9IHt9CisgICAgICAgIGRlcGVuZF90cmVlWyJkZXBlbmRzIl0gPSB7fQorICAgICAgICBkZXBlbmRfdHJlZVsidGRlcGVuZHMiXSA9IHt9CisgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdID0ge30KKyAgICAgICAgZGVwZW5kX3RyZWVbInJkZXBlbmRzLXBuIl0gPSB7fQorICAgICAgICBkZXBlbmRfdHJlZVsicGFja2FnZXMiXSA9IHt9CisgICAgICAgIGRlcGVuZF90cmVlWyJyZGVwZW5kcy1wa2ciXSA9IHt9CisgICAgICAgIGRlcGVuZF90cmVlWyJycmVjcy1wa2ciXSA9IHt9CisgICAgICAgIGRlcGVuZF90cmVlWyJsYXllci1wcmlvcml0aWVzIl0gPSBzZWxmLnJlY2lwZWNhY2hlLmJiZmlsZV9jb25maWdfcHJpb3JpdGllcworCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4ocnEucnFkYXRhLnJ1bnFfZm5pZCkpOgorICAgICAgICAgICAgdGFza25hbWUgPSBycS5ycWRhdGEucnVucV90YXNrW3Rhc2tdCisgICAgICAgICAgICBmbmlkID0gcnEucnFkYXRhLnJ1bnFfZm5pZFt0YXNrXQorICAgICAgICAgICAgZm4gPSB0YXNrZGF0YS5mbl9pbmRleFtmbmlkXQorICAgICAgICAgICAgcG4gPSBzZWxmLnJlY2lwZWNhY2hlLnBrZ19mbltmbl0KKyAgICAgICAgICAgIHZlcnNpb24gID0gIiVzOiVzLSVzIiAlIHNlbGYucmVjaXBlY2FjaGUucGtnX3BlcHZwcltmbl0KKyAgICAgICAgICAgIGlmIHBuIG5vdCBpbiBkZXBlbmRfdHJlZVsicG4iXToKKyAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicG4iXVtwbl0gPSB7fQorICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdW3BuXVsiZmlsZW5hbWUiXSA9IGZuCisgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBuIl1bcG5dWyJ2ZXJzaW9uIl0gPSB2ZXJzaW9uCisgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBuIl1bcG5dWyJpbmhlcml0cyJdID0gc2VsZi5yZWNpcGVjYWNoZS5pbmhlcml0cy5nZXQoZm4sIE5vbmUpCisKKyAgICAgICAgICAgICAgICAjIGlmIHdlIGhhdmUgZXh0cmEgY2FjaGVzLCBsaXN0IGFsbCBhdHRyaWJ1dGVzIHRoZXkgYnJpbmcgaW4KKyAgICAgICAgICAgICAgICBleHRyYV9pbmZvID0gW10KKyAgICAgICAgICAgICAgICBmb3IgY2FjaGVfY2xhc3MgaW4gc2VsZi5jYWNoZXNfYXJyYXk6CisgICAgICAgICAgICAgICAgICAgIGlmIHR5cGUoY2FjaGVfY2xhc3MpIGlzIHR5cGUgYW5kIGlzc3ViY2xhc3MoY2FjaGVfY2xhc3MsIGJiLmNhY2hlLlJlY2lwZUluZm9Db21tb24pIGFuZCBoYXNhdHRyKGNhY2hlX2NsYXNzLCAnY2FjaGVmaWVsZHMnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZmllbGRzID0gZ2V0YXR0cihjYWNoZV9jbGFzcywgJ2NhY2hlZmllbGRzJywgW10pCisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9pbmZvID0gZXh0cmFfaW5mbyArIGNhY2hlZmllbGRzCisKKyAgICAgICAgICAgICAgICAjIGZvciBhbGwgYXR0cmlidXRlcyBzdG9yZWQsIGFkZCB0aGVtIHRvIHRoZSBkZXBlbmRlbmN5IHRyZWUKKyAgICAgICAgICAgICAgICBmb3IgZWkgaW4gZXh0cmFfaW5mbzoKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBuIl1bcG5dW2VpXSA9IHZhcnMoc2VsZi5yZWNpcGVjYWNoZSlbZWldW2ZuXQorCisKKyAgICAgICAgICAgIGZvciBkZXAgaW4gcnEucnFkYXRhLnJ1bnFfZGVwZW5kc1t0YXNrXToKKyAgICAgICAgICAgICAgICBkZXBmbiA9IHRhc2tkYXRhLmZuX2luZGV4W3JxLnJxZGF0YS5ydW5xX2ZuaWRbZGVwXV0KKyAgICAgICAgICAgICAgICBkZXBwbiA9IHNlbGYucmVjaXBlY2FjaGUucGtnX2ZuW2RlcGZuXQorICAgICAgICAgICAgICAgIGRvdG5hbWUgPSAiJXMuJXMiICUgKHBuLCBycS5ycWRhdGEucnVucV90YXNrW3Rhc2tdKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkb3RuYW1lIGluIGRlcGVuZF90cmVlWyJ0ZGVwZW5kcyJdOgorICAgICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsidGRlcGVuZHMiXVtkb3RuYW1lXSA9IFtdCisgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInRkZXBlbmRzIl1bZG90bmFtZV0uYXBwZW5kKCIlcy4lcyIgJSAoZGVwcG4sIHJxLnJxZGF0YS5ydW5xX3Rhc2tbZGVwXSkpCisgICAgICAgICAgICBpZiBmbmlkIG5vdCBpbiBzZWVuX2ZuaWRzOgorICAgICAgICAgICAgICAgIHNlZW5fZm5pZHMuYXBwZW5kKGZuaWQpCisgICAgICAgICAgICAgICAgcGFja2FnZXMgPSBbXQorCisgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbImRlcGVuZHMiXVtwbl0gPSBbXQorICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gdGFza2RhdGEuZGVwaWRzW2ZuaWRdOgorICAgICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsiZGVwZW5kcyJdW3BuXS5hcHBlbmQodGFza2RhdGEuYnVpbGRfbmFtZXNfaW5kZXhbZGVwXSkKKworICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJyZGVwZW5kcy1wbiJdW3BuXSA9IFtdCisgICAgICAgICAgICAgICAgZm9yIHJkZXAgaW4gdGFza2RhdGEucmRlcGlkc1tmbmlkXToKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInJkZXBlbmRzLXBuIl1bcG5dLmFwcGVuZCh0YXNrZGF0YS5ydW5fbmFtZXNfaW5kZXhbcmRlcF0pCisKKyAgICAgICAgICAgICAgICByZGVwZW5kcyA9IHNlbGYucmVjaXBlY2FjaGUucnVuZGVwc1tmbl0KKyAgICAgICAgICAgICAgICBmb3IgcGFja2FnZSBpbiByZGVwZW5kczoKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInJkZXBlbmRzLXBrZyJdW3BhY2thZ2VdID0gW10KKyAgICAgICAgICAgICAgICAgICAgZm9yIHJkZXBlbmQgaW4gcmRlcGVuZHNbcGFja2FnZV06CisgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicmRlcGVuZHMtcGtnIl1bcGFja2FnZV0uYXBwZW5kKHJkZXBlbmQpCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLmFwcGVuZChwYWNrYWdlKQorCisgICAgICAgICAgICAgICAgcnJlY3MgPSBzZWxmLnJlY2lwZWNhY2hlLnJ1bnJlY3NbZm5dCisgICAgICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gcnJlY3M6CisgICAgICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJycmVjcy1wa2ciXVtwYWNrYWdlXSA9IFtdCisgICAgICAgICAgICAgICAgICAgIGZvciByZGVwZW5kIGluIHJyZWNzW3BhY2thZ2VdOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInJyZWNzLXBrZyJdW3BhY2thZ2VdLmFwcGVuZChyZGVwZW5kKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcGFja2FnZSBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLmFwcGVuZChwYWNrYWdlKQorCisgICAgICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIHBhY2thZ2Ugbm90IGluIGRlcGVuZF90cmVlWyJwYWNrYWdlcyJdOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBhY2thZ2VzIl1bcGFja2FnZV0gPSB7fQorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBhY2thZ2VzIl1bcGFja2FnZV1bInBuIl0gPSBwbgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBhY2thZ2VzIl1bcGFja2FnZV1bImZpbGVuYW1lIl0gPSBmbgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBhY2thZ2VzIl1bcGFja2FnZV1bInZlcnNpb24iXSA9IHZlcnNpb24KKworICAgICAgICByZXR1cm4gZGVwZW5kX3RyZWUKKworICAgICMjIyMjIyMjIFdBUk5JTkcgOiB0aGlzIGZ1bmN0aW9uIHJlcXVpcmVzIGNhY2hlX2V4dHJhIHRvIGJlIGVuYWJsZWQgIyMjIyMjIyMKKyAgICBkZWYgZ2VuZXJhdGVQa2dEZXBUcmVlRGF0YShzZWxmLCBwa2dzX3RvX2J1aWxkLCB0YXNrKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBhIGRlcGVuZGVuY3kgdHJlZSBvZiBwa2dzX3RvX2J1aWxkLCByZXR1cm5pbmcgdGhlIGRhdGEuCisgICAgICAgICIiIgorICAgICAgICBfLCB0YXNrZGF0YSA9IHNlbGYucHJlcGFyZVRyZWVEYXRhKHBrZ3NfdG9fYnVpbGQsIHRhc2spCisgICAgICAgIHRhc2tzX2ZuaWQgPSBbXQorICAgICAgICBpZiBsZW4odGFza2RhdGEudGFza3NfbmFtZSkgIT0gMDoKKyAgICAgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4odGFza2RhdGEudGFza3NfbmFtZSkpOgorICAgICAgICAgICAgICAgIHRhc2tzX2ZuaWQuYXBwZW5kKHRhc2tkYXRhLnRhc2tzX2ZuaWRbdGFza10pCisKKyAgICAgICAgc2Vlbl9mbmlkcyA9IFtdCisgICAgICAgIGRlcGVuZF90cmVlID0ge30KKyAgICAgICAgZGVwZW5kX3RyZWVbImRlcGVuZHMiXSA9IHt9CisgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdID0ge30KKyAgICAgICAgZGVwZW5kX3RyZWVbInJkZXBlbmRzLXBuIl0gPSB7fQorICAgICAgICBkZXBlbmRfdHJlZVsicmRlcGVuZHMtcGtnIl0gPSB7fQorICAgICAgICBkZXBlbmRfdHJlZVsicnJlY3MtcGtnIl0gPSB7fQorCisgICAgICAgICMgaWYgd2UgaGF2ZSBleHRyYSBjYWNoZXMsIGxpc3QgYWxsIGF0dHJpYnV0ZXMgdGhleSBicmluZyBpbgorICAgICAgICBleHRyYV9pbmZvID0gW10KKyAgICAgICAgZm9yIGNhY2hlX2NsYXNzIGluIHNlbGYuY2FjaGVzX2FycmF5OgorICAgICAgICAgICAgaWYgdHlwZShjYWNoZV9jbGFzcykgaXMgdHlwZSBhbmQgaXNzdWJjbGFzcyhjYWNoZV9jbGFzcywgYmIuY2FjaGUuUmVjaXBlSW5mb0NvbW1vbikgYW5kIGhhc2F0dHIoY2FjaGVfY2xhc3MsICdjYWNoZWZpZWxkcycpOgorICAgICAgICAgICAgICAgIGNhY2hlZmllbGRzID0gZ2V0YXR0cihjYWNoZV9jbGFzcywgJ2NhY2hlZmllbGRzJywgW10pCisgICAgICAgICAgICAgICAgZXh0cmFfaW5mbyA9IGV4dHJhX2luZm8gKyBjYWNoZWZpZWxkcworCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4odGFza3NfZm5pZCkpOgorICAgICAgICAgICAgZm5pZCA9IHRhc2tzX2ZuaWRbdGFza10KKyAgICAgICAgICAgIGZuID0gdGFza2RhdGEuZm5faW5kZXhbZm5pZF0KKyAgICAgICAgICAgIHBuID0gc2VsZi5yZWNpcGVjYWNoZS5wa2dfZm5bZm5dCisKKyAgICAgICAgICAgIGlmIHBuIG5vdCBpbiBkZXBlbmRfdHJlZVsicG4iXToKKyAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicG4iXVtwbl0gPSB7fQorICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdW3BuXVsiZmlsZW5hbWUiXSA9IGZuCisgICAgICAgICAgICAgICAgdmVyc2lvbiAgPSAiJXM6JXMtJXMiICUgc2VsZi5yZWNpcGVjYWNoZS5wa2dfcGVwdnByW2ZuXQorICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdW3BuXVsidmVyc2lvbiJdID0gdmVyc2lvbgorICAgICAgICAgICAgICAgIHJkZXBlbmRzID0gc2VsZi5yZWNpcGVjYWNoZS5ydW5kZXBzW2ZuXQorICAgICAgICAgICAgICAgIHJyZWNzID0gc2VsZi5yZWNpcGVjYWNoZS5ydW5yZWNzW2ZuXQorICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdW3BuXVsiaW5oZXJpdHMiXSA9IHNlbGYucmVjaXBlY2FjaGUuaW5oZXJpdHMuZ2V0KGZuLCBOb25lKQorCisgICAgICAgICAgICAgICAgIyBmb3IgYWxsIGV4dHJhIGF0dHJpYnV0ZXMgc3RvcmVkLCBhZGQgdGhlbSB0byB0aGUgZGVwZW5kZW5jeSB0cmVlCisgICAgICAgICAgICAgICAgZm9yIGVpIGluIGV4dHJhX2luZm86CisgICAgICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdW3BuXVtlaV0gPSB2YXJzKHNlbGYucmVjaXBlY2FjaGUpW2VpXVtmbl0KKworICAgICAgICAgICAgaWYgZm5pZCBub3QgaW4gc2Vlbl9mbmlkczoKKyAgICAgICAgICAgICAgICBzZWVuX2ZuaWRzLmFwcGVuZChmbmlkKQorCisgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbImRlcGVuZHMiXVtwbl0gPSBbXQorICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gdGFza2RhdGEuZGVwaWRzW2ZuaWRdOgorICAgICAgICAgICAgICAgICAgICBpdGVtID0gdGFza2RhdGEuYnVpbGRfbmFtZXNfaW5kZXhbZGVwXQorICAgICAgICAgICAgICAgICAgICBwbl9wcm92aWRlciA9ICIiCisgICAgICAgICAgICAgICAgICAgIHRhcmdldGlkID0gdGFza2RhdGEuZ2V0YnVpbGRfaWQoaXRlbSkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGFyZ2V0aWQgaW4gdGFza2RhdGEuYnVpbGRfdGFyZ2V0cyBhbmQgdGFza2RhdGEuYnVpbGRfdGFyZ2V0c1t0YXJnZXRpZF06CisgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IHRhc2tkYXRhLmJ1aWxkX3RhcmdldHNbdGFyZ2V0aWRdWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBmbl9wcm92aWRlciA9IHRhc2tkYXRhLmZuX2luZGV4W2lkXQorICAgICAgICAgICAgICAgICAgICAgICAgcG5fcHJvdmlkZXIgPSBzZWxmLnJlY2lwZWNhY2hlLnBrZ19mbltmbl9wcm92aWRlcl0KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBuX3Byb3ZpZGVyID0gaXRlbQorICAgICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsiZGVwZW5kcyJdW3BuXS5hcHBlbmQocG5fcHJvdmlkZXIpCisKKyAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicmRlcGVuZHMtcG4iXVtwbl0gPSBbXQorICAgICAgICAgICAgICAgIGZvciByZGVwIGluIHRhc2tkYXRhLnJkZXBpZHNbZm5pZF06CisgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSB0YXNrZGF0YS5ydW5fbmFtZXNfaW5kZXhbcmRlcF0KKyAgICAgICAgICAgICAgICAgICAgcG5fcnByb3ZpZGVyID0gIiIKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0aWQgPSB0YXNrZGF0YS5nZXRydW5faWQoaXRlbSkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGFyZ2V0aWQgaW4gdGFza2RhdGEucnVuX3RhcmdldHMgYW5kIHRhc2tkYXRhLnJ1bl90YXJnZXRzW3RhcmdldGlkXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gdGFza2RhdGEucnVuX3RhcmdldHNbdGFyZ2V0aWRdWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBmbl9ycHJvdmlkZXIgPSB0YXNrZGF0YS5mbl9pbmRleFtpZF0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBuX3Jwcm92aWRlciA9IHNlbGYucmVjaXBlY2FjaGUucGtnX2ZuW2ZuX3Jwcm92aWRlcl0KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBuX3Jwcm92aWRlciA9IGl0ZW0KKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInJkZXBlbmRzLXBuIl1bcG5dLmFwcGVuZChwbl9ycHJvdmlkZXIpCisKKyAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicmRlcGVuZHMtcGtnIl0udXBkYXRlKHJkZXBlbmRzKQorICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJycmVjcy1wa2ciXS51cGRhdGUocnJlY3MpCisKKyAgICAgICAgcmV0dXJuIGRlcGVuZF90cmVlCisKKyAgICBkZWYgZ2VuZXJhdGVEZXBUcmVlRXZlbnQoc2VsZiwgcGtnc190b19idWlsZCwgdGFzayk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgYSB0YXNrIGRlcGVuZGVuY3kgZ3JhcGggb2YgcGtnc190b19idWlsZC4KKyAgICAgICAgR2VuZXJhdGUgYW4gZXZlbnQgd2l0aCB0aGUgcmVzdWx0CisgICAgICAgICIiIgorICAgICAgICBkZXBncmFwaCA9IHNlbGYuZ2VuZXJhdGVUYXNrRGVwVHJlZURhdGEocGtnc190b19idWlsZCwgdGFzaykKKyAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5EZXBUcmVlR2VuZXJhdGVkKGRlcGdyYXBoKSwgc2VsZi5kYXRhKQorCisgICAgZGVmIGdlbmVyYXRlRG90R3JhcGhGaWxlcyhzZWxmLCBwa2dzX3RvX2J1aWxkLCB0YXNrKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBhIHRhc2sgZGVwZW5kZW5jeSBncmFwaCBvZiBwa2dzX3RvX2J1aWxkLgorICAgICAgICBTYXZlIHRoZSByZXN1bHQgdG8gYSBzZXQgb2YgLmRvdCBmaWxlcy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZGVwZ3JhcGggPSBzZWxmLmdlbmVyYXRlVGFza0RlcFRyZWVEYXRhKHBrZ3NfdG9fYnVpbGQsIHRhc2spCisKKyAgICAgICAgIyBQcmludHMgYSBmbGF0dGVuZWQgZm9ybSBvZiBwYWNrYWdlLWRlcGVuZHMgYmVsb3cgd2hlcmUgc3VicGFja2FnZXMgb2YgYSBwYWNrYWdlIGFyZSBtZXJnZWQgaW50byB0aGUgbWFpbiBwbgorICAgICAgICBkZXBlbmRzX2ZpbGUgPSBmaWxlKCdwbi1kZXBlbmRzLmRvdCcsICd3JyApCisgICAgICAgIGJ1aWxkbGlzdF9maWxlID0gZmlsZSgncG4tYnVpbGRsaXN0JywgJ3cnICkKKyAgICAgICAgcHJpbnQoImRpZ3JhcGggZGVwZW5kcyB7IiwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgIGZvciBwbiBpbiBkZXBncmFwaFsicG4iXToKKyAgICAgICAgICAgIGZuID0gZGVwZ3JhcGhbInBuIl1bcG5dWyJmaWxlbmFtZSJdCisgICAgICAgICAgICB2ZXJzaW9uID0gZGVwZ3JhcGhbInBuIl1bcG5dWyJ2ZXJzaW9uIl0KKyAgICAgICAgICAgIHByaW50KCciJXMiIFtsYWJlbD0iJXMgJXNcXG4lcyJdJyAlIChwbiwgcG4sIHZlcnNpb24sIGZuKSwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgICAgICBwcmludCgiJXMiICUgcG4sIGZpbGU9YnVpbGRsaXN0X2ZpbGUpCisgICAgICAgIGJ1aWxkbGlzdF9maWxlLmNsb3NlKCkKKyAgICAgICAgbG9nZ2VyLmluZm8oIlBOIGJ1aWxkIGxpc3Qgc2F2ZWQgdG8gJ3BuLWJ1aWxkbGlzdCciKQorICAgICAgICBmb3IgcG4gaW4gZGVwZ3JhcGhbImRlcGVuZHMiXToKKyAgICAgICAgICAgIGZvciBkZXBlbmQgaW4gZGVwZ3JhcGhbImRlcGVuZHMiXVtwbl06CisgICAgICAgICAgICAgICAgcHJpbnQoJyIlcyIgLT4gIiVzIicgJSAocG4sIGRlcGVuZCksIGZpbGU9ZGVwZW5kc19maWxlKQorICAgICAgICBmb3IgcG4gaW4gZGVwZ3JhcGhbInJkZXBlbmRzLXBuIl06CisgICAgICAgICAgICBmb3IgcmRlcGVuZCBpbiBkZXBncmFwaFsicmRlcGVuZHMtcG4iXVtwbl06CisgICAgICAgICAgICAgICAgcHJpbnQoJyIlcyIgLT4gIiVzIiBbc3R5bGU9ZGFzaGVkXScgJSAocG4sIHJkZXBlbmQpLCBmaWxlPWRlcGVuZHNfZmlsZSkKKyAgICAgICAgcHJpbnQoIn0iLCBmaWxlPWRlcGVuZHNfZmlsZSkKKyAgICAgICAgbG9nZ2VyLmluZm8oIlBOIGRlcGVuZGVuY2llcyBzYXZlZCB0byAncG4tZGVwZW5kcy5kb3QnIikKKworICAgICAgICBkZXBlbmRzX2ZpbGUgPSBmaWxlKCdwYWNrYWdlLWRlcGVuZHMuZG90JywgJ3cnICkKKyAgICAgICAgcHJpbnQoImRpZ3JhcGggZGVwZW5kcyB7IiwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgIGZvciBwYWNrYWdlIGluIGRlcGdyYXBoWyJwYWNrYWdlcyJdOgorICAgICAgICAgICAgcG4gPSBkZXBncmFwaFsicGFja2FnZXMiXVtwYWNrYWdlXVsicG4iXQorICAgICAgICAgICAgZm4gPSBkZXBncmFwaFsicGFja2FnZXMiXVtwYWNrYWdlXVsiZmlsZW5hbWUiXQorICAgICAgICAgICAgdmVyc2lvbiA9IGRlcGdyYXBoWyJwYWNrYWdlcyJdW3BhY2thZ2VdWyJ2ZXJzaW9uIl0KKyAgICAgICAgICAgIGlmIHBhY2thZ2UgPT0gcG46CisgICAgICAgICAgICAgICAgcHJpbnQoJyIlcyIgW2xhYmVsPSIlcyAlc1xcbiVzIl0nICUgKHBuLCBwbiwgdmVyc2lvbiwgZm4pLCBmaWxlPWRlcGVuZHNfZmlsZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoJyIlcyIgW2xhYmVsPSIlcyglcykgJXNcXG4lcyJdJyAlIChwYWNrYWdlLCBwYWNrYWdlLCBwbiwgdmVyc2lvbiwgZm4pLCBmaWxlPWRlcGVuZHNfZmlsZSkKKyAgICAgICAgICAgIGZvciBkZXBlbmQgaW4gZGVwZ3JhcGhbImRlcGVuZHMiXVtwbl06CisgICAgICAgICAgICAgICAgcHJpbnQoJyIlcyIgLT4gIiVzIicgJSAocGFja2FnZSwgZGVwZW5kKSwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgIGZvciBwYWNrYWdlIGluIGRlcGdyYXBoWyJyZGVwZW5kcy1wa2ciXToKKyAgICAgICAgICAgIGZvciByZGVwZW5kIGluIGRlcGdyYXBoWyJyZGVwZW5kcy1wa2ciXVtwYWNrYWdlXToKKyAgICAgICAgICAgICAgICBwcmludCgnIiVzIiAtPiAiJXMiIFtzdHlsZT1kYXNoZWRdJyAlIChwYWNrYWdlLCByZGVwZW5kKSwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgIGZvciBwYWNrYWdlIGluIGRlcGdyYXBoWyJycmVjcy1wa2ciXToKKyAgICAgICAgICAgIGZvciByZGVwZW5kIGluIGRlcGdyYXBoWyJycmVjcy1wa2ciXVtwYWNrYWdlXToKKyAgICAgICAgICAgICAgICBwcmludCgnIiVzIiAtPiAiJXMiIFtzdHlsZT1kYXNoZWRdJyAlIChwYWNrYWdlLCByZGVwZW5kKSwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgIHByaW50KCJ9IiwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgIGxvZ2dlci5pbmZvKCJQYWNrYWdlIGRlcGVuZGVuY2llcyBzYXZlZCB0byAncGFja2FnZS1kZXBlbmRzLmRvdCciKQorCisgICAgICAgIHRkZXBlbmRzX2ZpbGUgPSBmaWxlKCd0YXNrLWRlcGVuZHMuZG90JywgJ3cnICkKKyAgICAgICAgcHJpbnQoImRpZ3JhcGggZGVwZW5kcyB7IiwgZmlsZT10ZGVwZW5kc19maWxlKQorICAgICAgICBmb3IgdGFzayBpbiBkZXBncmFwaFsidGRlcGVuZHMiXToKKyAgICAgICAgICAgIChwbiwgdGFza25hbWUpID0gdGFzay5yc3BsaXQoIi4iLCAxKQorICAgICAgICAgICAgZm4gPSBkZXBncmFwaFsicG4iXVtwbl1bImZpbGVuYW1lIl0KKyAgICAgICAgICAgIHZlcnNpb24gPSBkZXBncmFwaFsicG4iXVtwbl1bInZlcnNpb24iXQorICAgICAgICAgICAgcHJpbnQoJyIlcy4lcyIgW2xhYmVsPSIlcyAlc1xcbiVzXFxuJXMiXScgJSAocG4sIHRhc2tuYW1lLCBwbiwgdGFza25hbWUsIHZlcnNpb24sIGZuKSwgZmlsZT10ZGVwZW5kc19maWxlKQorICAgICAgICAgICAgZm9yIGRlcCBpbiBkZXBncmFwaFsidGRlcGVuZHMiXVt0YXNrXToKKyAgICAgICAgICAgICAgICBwcmludCgnIiVzIiAtPiAiJXMiJyAlICh0YXNrLCBkZXApLCBmaWxlPXRkZXBlbmRzX2ZpbGUpCisgICAgICAgIHByaW50KCJ9IiwgZmlsZT10ZGVwZW5kc19maWxlKQorICAgICAgICBsb2dnZXIuaW5mbygiVGFzayBkZXBlbmRlbmNpZXMgc2F2ZWQgdG8gJ3Rhc2stZGVwZW5kcy5kb3QnIikKKworICAgIGRlZiBzaG93X2FwcGVuZHNfd2l0aF9ub19yZWNpcGVzKHNlbGYpOgorICAgICAgICAjIERldGVybWluZSB3aGljaCBiYmFwcGVuZHMgaGF2ZW4ndCBiZWVuIGFwcGxpZWQKKworICAgICAgICAjIEZpcnN0IGdldCBsaXN0IG9mIHJlY2lwZXMsIGluY2x1ZGluZyBza2lwcGVkCisgICAgICAgIHJlY2lwZWZucyA9IHNlbGYucmVjaXBlY2FjaGUucGtnX2ZuLmtleXMoKQorICAgICAgICByZWNpcGVmbnMuZXh0ZW5kKHNlbGYuc2tpcGxpc3Qua2V5cygpKQorCisgICAgICAgICMgV29yayBvdXQgbGlzdCBvZiBiYmFwcGVuZHMgdGhhdCBoYXZlIGJlZW4gYXBwbGllZAorICAgICAgICBhcHBsaWVkX2FwcGVuZHMgPSBbXQorICAgICAgICBmb3IgZm4gaW4gcmVjaXBlZm5zOgorICAgICAgICAgICAgYXBwbGllZF9hcHBlbmRzLmV4dGVuZChzZWxmLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhmbikpCisKKyAgICAgICAgYXBwZW5kc193aXRob3V0X3JlY2lwZXMgPSBbXQorICAgICAgICBmb3IgXywgYXBwZW5kZm4gaW4gc2VsZi5jb2xsZWN0aW9uLmJiYXBwZW5kczoKKyAgICAgICAgICAgIGlmIG5vdCBhcHBlbmRmbiBpbiBhcHBsaWVkX2FwcGVuZHM6CisgICAgICAgICAgICAgICAgYXBwZW5kc193aXRob3V0X3JlY2lwZXMuYXBwZW5kKGFwcGVuZGZuKQorCisgICAgICAgIGlmIGFwcGVuZHNfd2l0aG91dF9yZWNpcGVzOgorICAgICAgICAgICAgbXNnID0gJ05vIHJlY2lwZXMgYXZhaWxhYmxlIGZvcjpcbiAgJXMnICUgJ1xuICAnLmpvaW4oYXBwZW5kc193aXRob3V0X3JlY2lwZXMpCisgICAgICAgICAgICB3YXJuX29ubHkgPSBzZWxmLmRhdGEuZ2V0VmFyKCJCQl9EQU5HTElOR0FQUEVORFNfV0FSTk9OTFkiLCBcCisgICAgICAgICAgICAgICAgIEZhbHNlKSBvciAibm8iCisgICAgICAgICAgICBpZiB3YXJuX29ubHkubG93ZXIoKSBpbiAoIjEiLCAieWVzIiwgInRydWUiKToKKyAgICAgICAgICAgICAgICBiYi53YXJuKG1zZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwobXNnKQorCisgICAgZGVmIGhhbmRsZVByZWZQcm92aWRlcnMoc2VsZik6CisKKyAgICAgICAgbG9jYWxkYXRhID0gZGF0YS5jcmVhdGVDb3B5KHNlbGYuZGF0YSkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIGJiLmRhdGEuZXhwYW5kS2V5cyhsb2NhbGRhdGEpCisKKyAgICAgICAgIyBIYW5kbGUgUFJFRkVSUkVEX1BST1ZJREVSUworICAgICAgICBmb3IgcCBpbiAobG9jYWxkYXRhLmdldFZhcignUFJFRkVSUkVEX1BST1ZJREVSUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIChwcm92aWRlZSwgcHJvdmlkZXIpID0gcC5zcGxpdCgnOicpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcHJvdmlkZXJsb2cuY3JpdGljYWwoIk1hbGZvcm1lZCBvcHRpb24gaW4gUFJFRkVSUkVEX1BST1ZJREVSUyB2YXJpYWJsZTogJXMiICUgcCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgcHJvdmlkZWUgaW4gc2VsZi5yZWNpcGVjYWNoZS5wcmVmZXJyZWQgYW5kIHNlbGYucmVjaXBlY2FjaGUucHJlZmVycmVkW3Byb3ZpZGVlXSAhPSBwcm92aWRlcjoKKyAgICAgICAgICAgICAgICBwcm92aWRlcmxvZy5lcnJvcigiY29uZmxpY3RpbmcgcHJlZmVyZW5jZXMgZm9yICVzOiBib3RoICVzIGFuZCAlcyBzcGVjaWZpZWQiLCBwcm92aWRlZSwgcHJvdmlkZXIsIHNlbGYucmVjaXBlY2FjaGUucHJlZmVycmVkW3Byb3ZpZGVlXSkKKyAgICAgICAgICAgIHNlbGYucmVjaXBlY2FjaGUucHJlZmVycmVkW3Byb3ZpZGVlXSA9IHByb3ZpZGVyCisKKyAgICBkZWYgZmluZENvcmVCYXNlRmlsZXMoc2VsZiwgc3ViZGlyLCBjb25maWdmaWxlKToKKyAgICAgICAgY29yZWJhc2UgPSBzZWxmLmRhdGEuZ2V0VmFyKCdDT1JFQkFTRScsIFRydWUpIG9yICIiCisgICAgICAgIHBhdGhzID0gW10KKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoY29yZWJhc2UgKyAnLycgKyBzdWJkaXIpOgorICAgICAgICAgICAgZm9yIGQgaW4gZGlyczoKKyAgICAgICAgICAgICAgICBjb25maWdmaWxlcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBkLCBjb25maWdmaWxlKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNvbmZpZ2ZpbGVwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgcGF0aHMuYXBwZW5kKG9zLnBhdGguam9pbihyb290LCBkKSkKKworICAgICAgICBpZiBwYXRoczoKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQ29yZUJhc2VGaWxlc0ZvdW5kKHBhdGhzKSwgc2VsZi5kYXRhKQorCisgICAgZGVmIGZpbmRDb25maWdGaWxlUGF0aChzZWxmLCBjb25maWdmaWxlKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgdGhlIGxvY2F0aW9uIG9uIGRpc2sgb2YgY29uZmlnZmlsZSBhbmQgaWYgaXQgZXhpc3RzIGFuZCB3YXMgcGFyc2VkIGJ5IEJpdEJha2UKKyAgICAgICAgZW1pdCB0aGUgQ29uZmlnRmlsZVBhdGhGb3VuZCBldmVudCB3aXRoIHRoZSBwYXRoIHRvIHRoZSBmaWxlLgorICAgICAgICAiIiIKKyAgICAgICAgcGF0aCA9IGJiLmNvb2tlcmRhdGEuZmluZENvbmZpZ0ZpbGUoY29uZmlnZmlsZSwgc2VsZi5kYXRhKQorICAgICAgICBpZiBub3QgcGF0aDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgR2VuZXJhdGUgYSBsaXN0IG9mIHBhcnNlZCBjb25maWd1cmF0aW9uIGZpbGVzIGJ5IHNlYXJjaGluZyB0aGUgZmlsZXMKKyAgICAgICAgIyBsaXN0ZWQgaW4gdGhlIF9fZGVwZW5kcyBhbmQgX19iYXNlX2RlcGVuZHMgdmFyaWFibGVzIHdpdGggYSAuY29uZiBzdWZmaXguCisgICAgICAgIGNvbmZmaWxlcyA9IFtdCisgICAgICAgIGRlcF9maWxlcyA9IHNlbGYuZGF0YS5nZXRWYXIoJ19fYmFzZV9kZXBlbmRzJywgRmFsc2UpIG9yIFtdCisgICAgICAgIGRlcF9maWxlcyA9IGRlcF9maWxlcyArIChzZWxmLmRhdGEuZ2V0VmFyKCdfX2RlcGVuZHMnLCBGYWxzZSkgb3IgW10pCisKKyAgICAgICAgZm9yIGYgaW4gZGVwX2ZpbGVzOgorICAgICAgICAgICAgaWYgZlswXS5lbmRzd2l0aCgiLmNvbmYiKToKKyAgICAgICAgICAgICAgICBjb25mZmlsZXMuYXBwZW5kKGZbMF0pCisKKyAgICAgICAgXywgY29uZiwgY29uZmZpbGUgPSBwYXRoLnJwYXJ0aXRpb24oImNvbmYvIikKKyAgICAgICAgbWF0Y2ggPSBvcy5wYXRoLmpvaW4oY29uZiwgY29uZmZpbGUpCisgICAgICAgICMgVHJ5IGFuZCBmaW5kIG1hdGNoZXMgZm9yIGNvbmYvY29uZmZpbGVuYW1lLmNvbmYgYXMgd2UgZG9uJ3QgYWx3YXlzCisgICAgICAgICMgaGF2ZSB0aGUgZnVsbCBwYXRoIHRvIHRoZSBmaWxlLgorICAgICAgICBmb3IgY2ZnIGluIGNvbmZmaWxlczoKKyAgICAgICAgICAgIGlmIGNmZy5lbmRzd2l0aChtYXRjaCk6CisgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Db25maWdGaWxlUGF0aEZvdW5kKHBhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXRhKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBkZWYgZmluZEZpbGVzTWF0Y2hpbmdJbkRpcihzZWxmLCBmaWxlcGF0dGVybiwgZGlyZWN0b3J5KToKKyAgICAgICAgIiIiCisgICAgICAgIFNlYXJjaGVzIGZvciBmaWxlcyBtYXRjaGluZyB0aGUgcmVnZXggJ3BhdHRlcm4nIHdoaWNoIGFyZSBjaGlsZHJlbiBvZgorICAgICAgICAnZGlyZWN0b3J5JyBpbiBlYWNoIEJCUEFUSC4gaS5lLiB0byBmaW5kIGFsbCByb290ZnMgcGFja2FnZSBjbGFzc2VzIGF2YWlsYWJsZQorICAgICAgICB0byBCaXRCYWtlIG9uZSBjb3VsZCBjYWxsIGZpbmRGaWxlc01hdGNoaW5nSW5EaXIoc2VsZiwgJ3Jvb3Rmc18nLCAnY2xhc3NlcycpCisgICAgICAgIG9yIHRvIGZpbmQgYWxsIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlcyBvbmUgY291bGQgY2FsbDoKKyAgICAgICAgZmluZEZpbGVzTWF0Y2hpbmdJbkRpcihzZWxmLCAnY29uZi9tYWNoaW5lcycsICdjb25mJykKKyAgICAgICAgIiIiCisKKyAgICAgICAgbWF0Y2hlcyA9IFtdCisgICAgICAgIHAgPSByZS5jb21waWxlKHJlLmVzY2FwZShmaWxlcGF0dGVybikpCisgICAgICAgIGJicGF0aHMgPSBzZWxmLmRhdGEuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKS5zcGxpdCgnOicpCisgICAgICAgIGZvciBwYXRoIGluIGJicGF0aHM6CisgICAgICAgICAgICBkaXJwYXRoID0gb3MucGF0aC5qb2luKHBhdGgsIGRpcmVjdG9yeSkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRpcnBhdGgpOgorICAgICAgICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGRpcnBhdGgpOgorICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHAuc2VhcmNoKGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKGYpCisKKyAgICAgICAgaWYgbWF0Y2hlczoKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuRmlsZXNNYXRjaGluZ0ZvdW5kKGZpbGVwYXR0ZXJuLCBtYXRjaGVzKSwgc2VsZi5kYXRhKQorCisgICAgZGVmIGZpbmRDb25maWdGaWxlcyhzZWxmLCB2YXJuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgY29uZmlnIGZpbGVzIHdoaWNoIGFyZSBhcHByb3ByaWF0ZSB2YWx1ZXMgZm9yIHZhcm5hbWUuCisgICAgICAgIGkuZS4gTUFDSElORSwgRElTVFJPCisgICAgICAgICIiIgorICAgICAgICBwb3NzaWJsZSA9IFtdCisgICAgICAgIHZhciA9IHZhcm5hbWUubG93ZXIoKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmRhdGEKKyAgICAgICAgIyBpdGVyYXRlIGNvbmZpZ3MKKyAgICAgICAgYmJwYXRocyA9IGRhdGEuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKS5zcGxpdCgnOicpCisgICAgICAgIGZvciBwYXRoIGluIGJicGF0aHM6CisgICAgICAgICAgICBjb25mcGF0aCA9IG9zLnBhdGguam9pbihwYXRoLCAiY29uZiIsIHZhcikKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNvbmZwYXRoKToKKyAgICAgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhjb25mcGF0aCk6CisgICAgICAgICAgICAgICAgICAgICMgZ2V0IGFsbCBjaGlsZCBmaWxlcywgdGhlc2UgYXJlIGFwcHJvcHJpYXRlIHZhbHVlcworICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbCwgc2VwLCBlbmQgPSBmLnJwYXJ0aXRpb24oJy4nKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZW5kID09ICdjb25mJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZS5hcHBlbmQodmFsKQorCisgICAgICAgIGlmIHBvc3NpYmxlOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Db25maWdGaWxlc0ZvdW5kKHZhciwgcG9zc2libGUpLCBzZWxmLmRhdGEpCisKKyAgICBkZWYgZmluZEluaGVyaXRzQ2xhc3Moc2VsZiwga2xhc3MpOgorICAgICAgICAiIiIKKyAgICAgICAgRmluZCBhbGwgcmVjaXBlcyB3aGljaCBpbmhlcml0IHRoZSBzcGVjaWZpZWQgY2xhc3MKKyAgICAgICAgIiIiCisgICAgICAgIHBrZ19saXN0ID0gW10KKworICAgICAgICBmb3IgcGZuIGluIHNlbGYucmVjaXBlY2FjaGUucGtnX2ZuOgorICAgICAgICAgICAgaW5oZXJpdHMgPSBzZWxmLnJlY2lwZWNhY2hlLmluaGVyaXRzLmdldChwZm4sIE5vbmUpCisgICAgICAgICAgICBpZiBpbmhlcml0cyBhbmQgaW5oZXJpdHMuY291bnQoa2xhc3MpID4gMDoKKyAgICAgICAgICAgICAgICBwa2dfbGlzdC5hcHBlbmQoc2VsZi5yZWNpcGVjYWNoZS5wa2dfZm5bcGZuXSkKKworICAgICAgICByZXR1cm4gcGtnX2xpc3QKKworICAgIGRlZiBnZW5lcmF0ZVRhcmdldHNUcmVlKHNlbGYsIGtsYXNzPU5vbmUsIHBrZ3M9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBHZW5lcmF0ZSBhIGRlcGVuZGVuY3kgdHJlZSBvZiBidWlsZGFibGUgdGFyZ2V0cworICAgICAgICBHZW5lcmF0ZSBhbiBldmVudCB3aXRoIHRoZSByZXN1bHQKKyAgICAgICAgIiIiCisgICAgICAgICMgaWYgdGhlIGNhbGxlciBoYXNuJ3Qgc3BlY2lmaWVkIGEgcGtncyBsaXN0IGRlZmF1bHQgdG8gdW5pdmVyc2UKKyAgICAgICAgaWYgbm90IHBrZ3M6CisgICAgICAgICAgICBwa2dzID0gWyd1bml2ZXJzZSddCisgICAgICAgICMgaWYgaW5oZXJpdGVkX2NsYXNzIHBhc3NlZCBlbnN1cmUgYWxsIHJlY2lwZXMgd2hpY2ggaW5oZXJpdCB0aGUKKyAgICAgICAgIyBzcGVjaWZpZWQgY2xhc3MgYXJlIGluY2x1ZGVkIGluIHBrZ3MKKyAgICAgICAgaWYga2xhc3M6CisgICAgICAgICAgICBleHRyYV9wa2dzID0gc2VsZi5maW5kSW5oZXJpdHNDbGFzcyhrbGFzcykKKyAgICAgICAgICAgIHBrZ3MgPSBwa2dzICsgZXh0cmFfcGtncworCisgICAgICAgICMgZ2VuZXJhdGUgYSBkZXBlbmRlbmN5IHRyZWUgZm9yIGFsbCBvdXIgcGFja2FnZXMKKyAgICAgICAgdHJlZSA9IHNlbGYuZ2VuZXJhdGVQa2dEZXBUcmVlRGF0YShwa2dzLCAnYnVpbGQnKQorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LlRhcmdldHNUcmVlR2VuZXJhdGVkKHRyZWUpLCBzZWxmLmRhdGEpCisKKyAgICBkZWYgYnVpbGRXb3JsZFRhcmdldExpc3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICAgQnVpbGQgcGFja2FnZSBsaXN0IGZvciAiYml0YmFrZSB3b3JsZCIKKyAgICAgICAgIiIiCisgICAgICAgIHBhcnNlbG9nLmRlYnVnKDEsICJjb2xsYXRpbmcgcGFja2FnZXMgZm9yIFwid29ybGRcIiIpCisgICAgICAgIGZvciBmIGluIHNlbGYucmVjaXBlY2FjaGUucG9zc2libGVfd29ybGQ6CisgICAgICAgICAgICB0ZXJtaW5hbCA9IFRydWUKKyAgICAgICAgICAgIHBuID0gc2VsZi5yZWNpcGVjYWNoZS5wa2dfZm5bZl0KKworICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5yZWNpcGVjYWNoZS5wbl9wcm92aWRlc1twbl06CisgICAgICAgICAgICAgICAgaWYgcC5zdGFydHN3aXRoKCd2aXJ0dWFsLycpOgorICAgICAgICAgICAgICAgICAgICBwYXJzZWxvZy5kZWJ1ZygyLCAiV29ybGQgYnVpbGQgc2tpcHBpbmcgJXMgZHVlIHRvICVzIHByb3ZpZGVyIHN0YXJ0aW5nIHdpdGggdmlydHVhbC8iLCBmLCBwKQorICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZm9yIHBmIGluIHNlbGYucmVjaXBlY2FjaGUucHJvdmlkZXJzW3BdOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnJlY2lwZWNhY2hlLnBrZ19mbltwZl0gIT0gcG46CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWxvZy5kZWJ1ZygyLCAiV29ybGQgYnVpbGQgc2tpcHBpbmcgJXMgZHVlIHRvIGJvdGggdXMgYW5kICVzIHByb3ZpZGluZyAlcyIsIGYsIHBmLCBwKQorICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYWwgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIHRlcm1pbmFsOgorICAgICAgICAgICAgICAgIHNlbGYucmVjaXBlY2FjaGUud29ybGRfdGFyZ2V0LmFkZChwbikKKworICAgIGRlZiBpbnRlcmFjdGl2ZU1vZGUoIHNlbGYgKToKKyAgICAgICAgIiIiRHJvcCBvZmYgaW50byBhIHNoZWxsIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gYmIgaW1wb3J0IHNoZWxsCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHBhcnNlbG9nLmV4Y2VwdGlvbigiSW50ZXJhY3RpdmUgbW9kZSBub3QgYXZhaWxhYmxlIikKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzaGVsbC5zdGFydCggc2VsZiApCisKKworICAgIGRlZiBoYW5kbGVDb2xsZWN0aW9ucyggc2VsZiwgY29sbGVjdGlvbnMgKToKKyAgICAgICAgIiIiSGFuZGxlIGNvbGxlY3Rpb25zIiIiCisgICAgICAgIGVycm9ycyA9IEZhbHNlCisgICAgICAgIHNlbGYucmVjaXBlY2FjaGUuYmJmaWxlX2NvbmZpZ19wcmlvcml0aWVzID0gW10KKyAgICAgICAgaWYgY29sbGVjdGlvbnM6CisgICAgICAgICAgICBjb2xsZWN0aW9uX3ByaW9yaXRpZXMgPSB7fQorICAgICAgICAgICAgY29sbGVjdGlvbl9kZXBlbmRzID0ge30KKyAgICAgICAgICAgIGNvbGxlY3Rpb25fbGlzdCA9IGNvbGxlY3Rpb25zLnNwbGl0KCkKKyAgICAgICAgICAgIG1pbl9wcmlvID0gMAorICAgICAgICAgICAgZm9yIGMgaW4gY29sbGVjdGlvbl9saXN0OgorICAgICAgICAgICAgICAgICMgR2V0IGNvbGxlY3Rpb24gcHJpb3JpdHkgaWYgZGVmaW5lZCBleHBsaWNpdGx5CisgICAgICAgICAgICAgICAgcHJpb3JpdHkgPSBzZWxmLmRhdGEuZ2V0VmFyKCJCQkZJTEVfUFJJT1JJVFlfJXMiICUgYywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiBwcmlvcml0eToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbyA9IGludChwcmlvcml0eSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWxvZy5lcnJvcigiaW52YWxpZCB2YWx1ZSBmb3IgQkJGSUxFX1BSSU9SSVRZXyVzOiBcIiVzXCIiLCBjLCBwcmlvcml0eSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgaWYgbWluX3ByaW8gPT0gMCBvciBwcmlvIDwgbWluX3ByaW86CisgICAgICAgICAgICAgICAgICAgICAgICBtaW5fcHJpbyA9IHByaW8KKyAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbl9wcmlvcml0aWVzW2NdID0gcHJpbworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25fcHJpb3JpdGllc1tjXSA9IE5vbmUKKworICAgICAgICAgICAgICAgICMgQ2hlY2sgZGVwZW5kZW5jaWVzIGFuZCBzdG9yZSBpbmZvcm1hdGlvbiBmb3IgcHJpb3JpdHkgY2FsY3VsYXRpb24KKyAgICAgICAgICAgICAgICBkZXBzID0gc2VsZi5kYXRhLmdldFZhcigiTEFZRVJERVBFTkRTXyVzIiAlIGMsIFRydWUpCisgICAgICAgICAgICAgICAgaWYgZGVwczoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwbGlzdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihkZXBzKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgYmIudXRpbHMuVmVyc2lvblN0cmluZ0V4Y2VwdGlvbiBhcyB2c2U6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgnRXJyb3IgcGFyc2luZyBMQVlFUkRFUEVORFNfJXM6ICVzJyAlIChjLCBzdHIodnNlKSkpCisgICAgICAgICAgICAgICAgICAgIGZvciBkZXAsIG9wbGlzdCBpbiBkZXBsaXN0Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGVwIGluIGNvbGxlY3Rpb25fbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igb3BzdHIgaW4gb3BsaXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcnZlciA9IHNlbGYuZGF0YS5nZXRWYXIoIkxBWUVSVkVSU0lPTl8lcyIgJSBkZXAsIFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcCwgZGVwdmVyKSA9IG9wc3RyLnNwbGl0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGF5ZXJ2ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gYmIudXRpbHMudmVyY21wX3N0cmluZ19vcChsYXllcnZlciwgZGVwdmVyLCBvcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBiYi51dGlscy5WZXJzaW9uU3RyaW5nRXhjZXB0aW9uIGFzIHZzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgnRXJyb3IgcGFyc2luZyBMQVlFUkRFUEVORFNfJXM6ICVzJyAlIChjLCBzdHIodnNlKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlbG9nLmVycm9yKCJMYXllciAnJXMnIGRlcGVuZHMgb24gdmVyc2lvbiAlcyBvZiBsYXllciAnJXMnLCBidXQgdmVyc2lvbiAlcyBpcyBjdXJyZW50bHkgZW5hYmxlZCBpbiB5b3VyIGNvbmZpZ3VyYXRpb24uIENoZWNrIHRoYXQgeW91IGFyZSB1c2luZyB0aGUgY29ycmVjdCBtYXRjaGluZyB2ZXJzaW9ucy9icmFuY2hlcyBvZiB0aGVzZSB0d28gbGF5ZXJzLiIsIGMsIG9wc3RyLCBkZXAsIGxheWVydmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlbG9nLmVycm9yKCJMYXllciAnJXMnIGRlcGVuZHMgb24gdmVyc2lvbiAlcyBvZiBsYXllciAnJXMnLCB3aGljaCBleGlzdHMgaW4geW91ciBjb25maWd1cmF0aW9uIGJ1dCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbi4gQ2hlY2sgdGhhdCB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IG1hdGNoaW5nIHZlcnNpb25zL2JyYW5jaGVzIG9mIHRoZXNlIHR3byBsYXllcnMuIiwgYywgb3BzdHIsIGRlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2Vsb2cuZXJyb3IoIkxheWVyICclcycgZGVwZW5kcyBvbiBsYXllciAnJXMnLCBidXQgdGhpcyBsYXllciBpcyBub3QgZW5hYmxlZCBpbiB5b3VyIGNvbmZpZ3VyYXRpb24iLCBjLCBkZXApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uX2RlcGVuZHNbY10gPSBkZXBsaXN0LmtleXMoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25fZGVwZW5kc1tjXSA9IFtdCisKKyAgICAgICAgICAgICMgUmVjdXJzaXZlbHkgd29yayBvdXQgY29sbGVjdGlvbiBwcmlvcml0aWVzIGJhc2VkIG9uIGRlcGVuZGVuY2llcworICAgICAgICAgICAgZGVmIGNhbGNfbGF5ZXJfcHJpb3JpdHkoY29sbGVjdGlvbik6CisgICAgICAgICAgICAgICAgaWYgbm90IGNvbGxlY3Rpb25fcHJpb3JpdGllc1tjb2xsZWN0aW9uXToKKyAgICAgICAgICAgICAgICAgICAgbWF4X2RlcHByaW8gPSBtaW5fcHJpbworICAgICAgICAgICAgICAgICAgICBmb3IgZGVwIGluIGNvbGxlY3Rpb25fZGVwZW5kc1tjb2xsZWN0aW9uXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGNfbGF5ZXJfcHJpb3JpdHkoZGVwKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVwcHJpbyA9IGNvbGxlY3Rpb25fcHJpb3JpdGllc1tkZXBdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkZXBwcmlvID4gbWF4X2RlcHByaW86CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2RlcHByaW8gPSBkZXBwcmlvCisgICAgICAgICAgICAgICAgICAgIG1heF9kZXBwcmlvICs9IDEKKyAgICAgICAgICAgICAgICAgICAgcGFyc2Vsb2cuZGVidWcoMSwgIkNhbGN1bGF0ZWQgcHJpb3JpdHkgb2YgbGF5ZXIgJXMgYXMgJWQiLCBjb2xsZWN0aW9uLCBtYXhfZGVwcHJpbykKKyAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbl9wcmlvcml0aWVzW2NvbGxlY3Rpb25dID0gbWF4X2RlcHByaW8KKworICAgICAgICAgICAgIyBDYWxjdWxhdGUgYWxsIGxheWVyIHByaW9yaXRpZXMgdXNpbmcgY2FsY19sYXllcl9wcmlvcml0eSBhbmQgc3RvcmUgaW4gYmJmaWxlX2NvbmZpZ19wcmlvcml0aWVzCisgICAgICAgICAgICBmb3IgYyBpbiBjb2xsZWN0aW9uX2xpc3Q6CisgICAgICAgICAgICAgICAgY2FsY19sYXllcl9wcmlvcml0eShjKQorICAgICAgICAgICAgICAgIHJlZ2V4ID0gc2VsZi5kYXRhLmdldFZhcigiQkJGSUxFX1BBVFRFUk5fJXMiICUgYywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiByZWdleCA9PSBOb25lOgorICAgICAgICAgICAgICAgICAgICBwYXJzZWxvZy5lcnJvcigiQkJGSUxFX1BBVFRFUk5fJXMgbm90IGRlZmluZWQiICUgYykKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgY3JlID0gcmUuY29tcGlsZShyZWdleCkKKyAgICAgICAgICAgICAgICBleGNlcHQgcmUuZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhcnNlbG9nLmVycm9yKCJCQkZJTEVfUEFUVEVSTl8lcyBcIiVzXCIgaXMgbm90IGEgdmFsaWQgcmVndWxhciBleHByZXNzaW9uIiwgYywgcmVnZXgpCisgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzZWxmLnJlY2lwZWNhY2hlLmJiZmlsZV9jb25maWdfcHJpb3JpdGllcy5hcHBlbmQoKGMsIHJlZ2V4LCBjcmUsIGNvbGxlY3Rpb25fcHJpb3JpdGllc1tjXSkpCisgICAgICAgIGlmIGVycm9yczoKKyAgICAgICAgICAgICMgV2UndmUgYWxyZWFkeSBwcmludGVkIHRoZSBhY3R1YWwgZXJyb3IocykKKyAgICAgICAgICAgIHJhaXNlIENvbGxlY3Rpb25FcnJvcigiRXJyb3JzIGR1cmluZyBwYXJzaW5nIGxheWVyIGNvbmZpZ3VyYXRpb24iKQorCisgICAgZGVmIGJ1aWxkU2V0VmFycyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFNldHVwIGFueSB2YXJpYWJsZXMgbmVlZGVkIGJlZm9yZSBzdGFydGluZyBhIGJ1aWxkCisgICAgICAgICIiIgorICAgICAgICB0ID0gdGltZS5nbXRpbWUoKSAKKyAgICAgICAgaWYgbm90IHNlbGYuZGF0YS5nZXRWYXIoIkJVSUxETkFNRSIsIEZhbHNlKToKKyAgICAgICAgICAgIHNlbGYuZGF0YS5zZXRWYXIoIkJVSUxETkFNRSIsICIke0RBVEV9JHtUSU1FfSIpCisgICAgICAgIHNlbGYuZGF0YS5zZXRWYXIoIkJVSUxEU1RBUlQiLCB0aW1lLnN0cmZ0aW1lKCclbS8lZC8lWSAlSDolTTolUycsIHQpKQorICAgICAgICBzZWxmLmRhdGEuc2V0VmFyKCJEQVRFIiwgdGltZS5zdHJmdGltZSgnJVklbSVkJywgdCkpCisgICAgICAgIHNlbGYuZGF0YS5zZXRWYXIoIlRJTUUiLCB0aW1lLnN0cmZ0aW1lKCclSCVNJVMnLCB0KSkKKworICAgIGRlZiBtYXRjaEZpbGVzKHNlbGYsIGJmKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgdGhlIC5iYiBmaWxlcyB3aGljaCBtYXRjaCB0aGUgZXhwcmVzc2lvbiBpbiAnYnVpbGRmaWxlJy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGJmLnN0YXJ0c3dpdGgoIi8iKSBvciBiZi5zdGFydHN3aXRoKCIuLi8iKToKKyAgICAgICAgICAgIGJmID0gb3MucGF0aC5hYnNwYXRoKGJmKQorCisgICAgICAgIHNlbGYuY29sbGVjdGlvbiA9IENvb2tlckNvbGxlY3RGaWxlcyhzZWxmLnJlY2lwZWNhY2hlLmJiZmlsZV9jb25maWdfcHJpb3JpdGllcykKKyAgICAgICAgZmlsZWxpc3QsIG1hc2tlZCA9IHNlbGYuY29sbGVjdGlvbi5jb2xsZWN0X2JiZmlsZXMoc2VsZi5kYXRhLCBzZWxmLmV4cGFuZGVkX2RhdGEpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnN0YXQoYmYpCisgICAgICAgICAgICBiZiA9IG9zLnBhdGguYWJzcGF0aChiZikKKyAgICAgICAgICAgIHJldHVybiBbYmZdCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcmVnZXhwID0gcmUuY29tcGlsZShiZikKKyAgICAgICAgICAgIG1hdGNoZXMgPSBbXQorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZWxpc3Q6CisgICAgICAgICAgICAgICAgaWYgcmVnZXhwLnNlYXJjaChmKSBhbmQgb3MucGF0aC5pc2ZpbGUoZik6CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKGYpCisgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcworCisgICAgZGVmIG1hdGNoRmlsZShzZWxmLCBidWlsZGZpbGUpOgorICAgICAgICAiIiIKKyAgICAgICAgRmluZCB0aGUgLmJiIGZpbGUgd2hpY2ggbWF0Y2hlcyB0aGUgZXhwcmVzc2lvbiBpbiAnYnVpbGRmaWxlJy4KKyAgICAgICAgUmFpc2UgYW4gZXJyb3IgaWYgbXVsdGlwbGUgZmlsZXMKKyAgICAgICAgIiIiCisgICAgICAgIG1hdGNoZXMgPSBzZWxmLm1hdGNoRmlsZXMoYnVpbGRmaWxlKQorICAgICAgICBpZiBsZW4obWF0Y2hlcykgIT0gMToKKyAgICAgICAgICAgIGlmIG1hdGNoZXM6CisgICAgICAgICAgICAgICAgbXNnID0gIlVuYWJsZSB0byBtYXRjaCAnJXMnIHRvIGEgc3BlY2lmaWMgcmVjaXBlIGZpbGUgLSAlcyBtYXRjaGVzIGZvdW5kOiIgJSAoYnVpbGRmaWxlLCBsZW4obWF0Y2hlcykpCisgICAgICAgICAgICAgICAgaWYgbWF0Y2hlczoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gbWF0Y2hlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyArPSAiXG4gICAgJXMiICUgZgorICAgICAgICAgICAgICAgIHBhcnNlbG9nLmVycm9yKG1zZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFyc2Vsb2cuZXJyb3IoIlVuYWJsZSB0byBmaW5kIGFueSByZWNpcGUgZmlsZSBtYXRjaGluZyAnJXMnIiAlIGJ1aWxkZmlsZSkKKyAgICAgICAgICAgIHJhaXNlIE5vU3BlY2lmaWNNYXRjaAorICAgICAgICByZXR1cm4gbWF0Y2hlc1swXQorCisgICAgZGVmIGJ1aWxkRmlsZShzZWxmLCBidWlsZGZpbGUsIHRhc2spOgorICAgICAgICAiIiIKKyAgICAgICAgQnVpbGQgdGhlIGZpbGUgbWF0Y2hpbmcgcmVnZXhwIGJ1aWxkZmlsZQorICAgICAgICAiIiIKKworICAgICAgICAjIFRvbyBtYW55IHBlb3BsZSB1c2UgLWIgYmVjYXVzZSB0aGV5IHRoaW5rIGl0J3MgaG93IHlvdSBub3JtYWxseQorICAgICAgICAjIHNwZWNpZnkgYSB0YXJnZXQgdG8gYmUgYnVpbHQsIHNvIHNob3cgYSB3YXJuaW5nCisgICAgICAgIGJiLndhcm4oIkJ1aWxkZmlsZSBzcGVjaWZpZWQsIGRlcGVuZGVuY2llcyB3aWxsIG5vdCBiZSBoYW5kbGVkLiBJZiB0aGlzIGlzIG5vdCB3aGF0IHlvdSB3YW50LCBkbyBub3QgdXNlIC1iIC8gLS1idWlsZGZpbGUuIikKKworICAgICAgICAjIFBhcnNlIHRoZSBjb25maWd1cmF0aW9uIGhlcmUuIFdlIG5lZWQgdG8gZG8gaXQgZXhwbGljaXRseSBoZXJlIHNpbmNlCisgICAgICAgICMgYnVpbGRGaWxlKCkgZG9lc24ndCB1c2UgdGhlIGNhY2hlCisgICAgICAgIHNlbGYucGFyc2VDb25maWd1cmF0aW9uKCkKKworICAgICAgICAjIElmIHdlIGFyZSB0b2xkIHRvIGRvIHRoZSBOb25lIHRhc2sgdGhlbiBxdWVyeSB0aGUgZGVmYXVsdCB0YXNrCisgICAgICAgIGlmICh0YXNrID09IE5vbmUpOgorICAgICAgICAgICAgdGFzayA9IHNlbGYuY29uZmlndXJhdGlvbi5jbWQKKworICAgICAgICBmbiwgY2xzID0gYmIuY2FjaGUuQ2FjaGUudmlydHVhbGZuMnJlYWxmbihidWlsZGZpbGUpCisgICAgICAgIGZuID0gc2VsZi5tYXRjaEZpbGUoZm4pCisKKyAgICAgICAgc2VsZi5idWlsZFNldFZhcnMoKQorCisgICAgICAgIGluZm9zID0gYmIuY2FjaGUuQ2FjaGUucGFyc2UoZm4sIHNlbGYuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGZuKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNhY2hlc19hcnJheSkKKyAgICAgICAgaW5mb3MgPSBkaWN0KGluZm9zKQorCisgICAgICAgIGZuID0gYmIuY2FjaGUuQ2FjaGUucmVhbGZuMnZpcnR1YWwoZm4sIGNscykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW5mb19hcnJheSA9IGluZm9zW2ZuXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBiYi5mYXRhbCgiJXMgZG9lcyBub3QgZXhpc3QiICUgZm4pCisKKyAgICAgICAgaWYgaW5mb19hcnJheVswXS5za2lwcGVkOgorICAgICAgICAgICAgYmIuZmF0YWwoIiVzIHdhcyBza2lwcGVkOiAlcyIgJSAoZm4sIGluZm9fYXJyYXlbMF0uc2tpcHJlYXNvbikpCisKKyAgICAgICAgc2VsZi5yZWNpcGVjYWNoZS5hZGRfZnJvbV9yZWNpcGVpbmZvKGZuLCBpbmZvX2FycmF5KQorCisgICAgICAgICMgVHdlYWsgc29tZSB2YXJpYWJsZXMKKyAgICAgICAgaXRlbSA9IGluZm9fYXJyYXlbMF0ucG4KKyAgICAgICAgc2VsZi5yZWNpcGVjYWNoZS5pZ25vcmVkX2RlcGVuZGVuY2llcyA9IHNldCgpCisgICAgICAgIHNlbGYucmVjaXBlY2FjaGUuYmJmaWxlX3ByaW9yaXR5W2ZuXSA9IDEKKworICAgICAgICAjIFJlbW92ZSBleHRlcm5hbCBkZXBlbmRlbmNpZXMKKyAgICAgICAgc2VsZi5yZWNpcGVjYWNoZS50YXNrX2RlcHNbZm5dWydkZXBlbmRzJ10gPSB7fQorICAgICAgICBzZWxmLnJlY2lwZWNhY2hlLmRlcHNbZm5dID0gW10KKyAgICAgICAgc2VsZi5yZWNpcGVjYWNoZS5ydW5kZXBzW2ZuXSA9IFtdCisgICAgICAgIHNlbGYucmVjaXBlY2FjaGUucnVucmVjc1tmbl0gPSBbXQorCisgICAgICAgICMgSW52YWxpZGF0ZSB0YXNrIGZvciB0YXJnZXQgaWYgZm9yY2UgbW9kZSBhY3RpdmUKKyAgICAgICAgaWYgc2VsZi5jb25maWd1cmF0aW9uLmZvcmNlOgorICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoIkludmFsaWRhdGUgdGFzayAlcywgJXMiLCB0YXNrLCBmbikKKyAgICAgICAgICAgIGlmIG5vdCB0YXNrLnN0YXJ0c3dpdGgoImRvXyIpOgorICAgICAgICAgICAgICAgIHRhc2sgPSAiZG9fJXMiICUgdGFzaworICAgICAgICAgICAgYmIucGFyc2Uuc2lnZ2VuLmludmFsaWRhdGVfdGFzayh0YXNrLCBzZWxmLnJlY2lwZWNhY2hlLCBmbikKKworICAgICAgICAjIFNldHVwIHRhc2tkYXRhIHN0cnVjdHVyZQorICAgICAgICB0YXNrZGF0YSA9IGJiLnRhc2tkYXRhLlRhc2tEYXRhKHNlbGYuY29uZmlndXJhdGlvbi5hYm9ydCkKKyAgICAgICAgdGFza2RhdGEuYWRkX3Byb3ZpZGVyKHNlbGYuZGF0YSwgc2VsZi5yZWNpcGVjYWNoZSwgaXRlbSkKKworICAgICAgICBidWlsZG5hbWUgPSBzZWxmLmRhdGEuZ2V0VmFyKCJCVUlMRE5BTUUiLCBUcnVlKQorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LkJ1aWxkU3RhcnRlZChidWlsZG5hbWUsIFtpdGVtXSksIHNlbGYuZXhwYW5kZWRfZGF0YSkKKworICAgICAgICAjIEV4ZWN1dGUgdGhlIHJ1bnF1ZXVlCisgICAgICAgIGlmIG5vdCB0YXNrLnN0YXJ0c3dpdGgoImRvXyIpOgorICAgICAgICAgICAgdGFzayA9ICJkb18lcyIgJSB0YXNrCisgICAgICAgIHJ1bmxpc3QgPSBbW2l0ZW0sIHRhc2tdXQorCisgICAgICAgIHJxID0gYmIucnVucXVldWUuUnVuUXVldWUoc2VsZiwgc2VsZi5kYXRhLCBzZWxmLnJlY2lwZWNhY2hlLCB0YXNrZGF0YSwgcnVubGlzdCkKKworICAgICAgICBkZWYgYnVpbGRGaWxlSWRsZShzZXJ2ZXIsIHJxLCBhYm9ydCk6CisKKyAgICAgICAgICAgIG1zZyA9IE5vbmUKKyAgICAgICAgICAgIGludGVycnVwdGVkID0gMAorICAgICAgICAgICAgaWYgYWJvcnQgb3Igc2VsZi5zdGF0ZSA9PSBzdGF0ZS5mb3JjZXNodXRkb3duOgorICAgICAgICAgICAgICAgIHJxLmZpbmlzaF9ydW5xdWV1ZShUcnVlKQorICAgICAgICAgICAgICAgIG1zZyA9ICJGb3JjZWQgc2h1dGRvd24iCisgICAgICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSAyCisgICAgICAgICAgICBlbGlmIHNlbGYuc3RhdGUgPT0gc3RhdGUuc2h1dGRvd246CisgICAgICAgICAgICAgICAgcnEuZmluaXNoX3J1bnF1ZXVlKEZhbHNlKQorICAgICAgICAgICAgICAgIG1zZyA9ICJTdG9wcGVkIGJ1aWxkIgorICAgICAgICAgICAgICAgIGludGVycnVwdGVkID0gMQorICAgICAgICAgICAgZmFpbHVyZXMgPSAwCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dmFsID0gcnEuZXhlY3V0ZV9ydW5xdWV1ZSgpCisgICAgICAgICAgICBleGNlcHQgcnVucXVldWUuVGFza0ZhaWx1cmUgYXMgZXhjOgorICAgICAgICAgICAgICAgIGZhaWx1cmVzICs9IGxlbihleGMuYXJncykKKyAgICAgICAgICAgICAgICByZXR2YWwgPSBGYWxzZQorICAgICAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQgYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQoKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICAgICBpZiBub3QgcmV0dmFsOgorICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQobGVuKHJxLnJxZGF0YS5ydW5xX2ZuaWQpLCBidWlsZG5hbWUsIGl0ZW0sIGZhaWx1cmVzLCBpbnRlcnJ1cHRlZCksIHNlbGYuZXhwYW5kZWRfZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKG1zZykKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGlmIHJldHZhbCBpcyBUcnVlOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICByZXR1cm4gcmV0dmFsCisKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNlcnZlcl9yZWdpc3Rlcl9pZGxlY2FsbGJhY2soYnVpbGRGaWxlSWRsZSwgcnEpCisKKyAgICBkZWYgYnVpbGRUYXJnZXRzKHNlbGYsIHRhcmdldHMsIHRhc2spOgorICAgICAgICAiIiIKKyAgICAgICAgQXR0ZW1wdCB0byBidWlsZCB0aGUgdGFyZ2V0cyBzcGVjaWZpZWQKKyAgICAgICAgIiIiCisKKyAgICAgICAgZGVmIGJ1aWxkVGFyZ2V0c0lkbGUoc2VydmVyLCBycSwgYWJvcnQpOgorICAgICAgICAgICAgbXNnID0gTm9uZQorICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSAwCisgICAgICAgICAgICBpZiBhYm9ydCBvciBzZWxmLnN0YXRlID09IHN0YXRlLmZvcmNlc2h1dGRvd246CisgICAgICAgICAgICAgICAgcnEuZmluaXNoX3J1bnF1ZXVlKFRydWUpCisgICAgICAgICAgICAgICAgbXNnID0gIkZvcmNlZCBzaHV0ZG93biIKKyAgICAgICAgICAgICAgICBpbnRlcnJ1cHRlZCA9IDIKKyAgICAgICAgICAgIGVsaWYgc2VsZi5zdGF0ZSA9PSBzdGF0ZS5zaHV0ZG93bjoKKyAgICAgICAgICAgICAgICBycS5maW5pc2hfcnVucXVldWUoRmFsc2UpCisgICAgICAgICAgICAgICAgbXNnID0gIlN0b3BwZWQgYnVpbGQiCisgICAgICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSAxCisgICAgICAgICAgICBmYWlsdXJlcyA9IDAKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR2YWwgPSBycS5leGVjdXRlX3J1bnF1ZXVlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBydW5xdWV1ZS5UYXNrRmFpbHVyZSBhcyBleGM6CisgICAgICAgICAgICAgICAgZmFpbHVyZXMgKz0gbGVuKGV4Yy5hcmdzKQorICAgICAgICAgICAgICAgIHJldHZhbCA9IEZhbHNlCisgICAgICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5jb21tYW5kLmZpbmlzaEFzeW5jQ29tbWFuZCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgICAgIGlmIG5vdCByZXR2YWw6CisgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5CdWlsZENvbXBsZXRlZChsZW4ocnEucnFkYXRhLnJ1bnFfZm5pZCksIGJ1aWxkbmFtZSwgdGFyZ2V0cywgZmFpbHVyZXMsIGludGVycnVwdGVkKSwgc2VsZi5kYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQobXNnKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgaWYgcmV0dmFsIGlzIFRydWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIHJldHVybiByZXR2YWwKKworICAgICAgICBidWlsZC5yZXNldF9jYWNoZSgpCisgICAgICAgIHNlbGYuYnVpbGRTZXRWYXJzKCkKKworICAgICAgICB0YXNrZGF0YSwgcnVubGlzdCwgZnVsbHRhcmdldGxpc3QgPSBzZWxmLmJ1aWxkVGFza0RhdGEodGFyZ2V0cywgdGFzaywgc2VsZi5jb25maWd1cmF0aW9uLmFib3J0KQorCisgICAgICAgIGJ1aWxkbmFtZSA9IHNlbGYuZGF0YS5nZXRWYXIoIkJVSUxETkFNRSIsIEZhbHNlKQorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LkJ1aWxkU3RhcnRlZChidWlsZG5hbWUsIGZ1bGx0YXJnZXRsaXN0KSwgc2VsZi5kYXRhKQorCisgICAgICAgIHJxID0gYmIucnVucXVldWUuUnVuUXVldWUoc2VsZiwgc2VsZi5kYXRhLCBzZWxmLnJlY2lwZWNhY2hlLCB0YXNrZGF0YSwgcnVubGlzdCkKKyAgICAgICAgaWYgJ3VuaXZlcnNlJyBpbiB0YXJnZXRzOgorICAgICAgICAgICAgcnEucnFkYXRhLndhcm5fbXVsdGlfYmIgPSBUcnVlCisKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNlcnZlcl9yZWdpc3Rlcl9pZGxlY2FsbGJhY2soYnVpbGRUYXJnZXRzSWRsZSwgcnEpCisKKworICAgIGRlZiBnZXRBbGxLZXlzV2l0aEZsYWdzKHNlbGYsIGZsYWdsaXN0KToKKyAgICAgICAgZHVtcCA9IHt9CisgICAgICAgIGZvciBrIGluIHNlbGYuZGF0YS5rZXlzKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdiA9IHNlbGYuZGF0YS5nZXRWYXIoaywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiBub3Qgay5zdGFydHN3aXRoKCJfXyIpIGFuZCBub3QgaXNpbnN0YW5jZSh2LCBiYi5kYXRhX3NtYXJ0LkRhdGFTbWFydCk6CisgICAgICAgICAgICAgICAgICAgIGR1bXBba10gPSB7CisgICAgJ3YnIDogdiAsCisgICAgJ2hpc3RvcnknIDogc2VsZi5kYXRhLnZhcmhpc3RvcnkudmFyaWFibGUoayksCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9yIGQgaW4gZmxhZ2xpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBkdW1wW2tdW2RdID0gc2VsZi5kYXRhLmdldFZhckZsYWcoaywgZCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBwcmludChlKQorICAgICAgICByZXR1cm4gZHVtcAorCisKKyAgICBkZWYgZ2VuZXJhdGVOZXdJbWFnZShzZWxmLCBpbWFnZSwgYmFzZV9pbWFnZSwgcGFja2FnZV9xdWV1ZSwgdGltZXN0YW1wLCBkZXNjcmlwdGlvbik6CisgICAgICAgICcnJworICAgICAgICBDcmVhdGUgYSBuZXcgaW1hZ2Ugd2l0aCBhICJyZXF1aXJlIi8iaW5oZXJpdCIgYmFzZV9pbWFnZSBzdGF0ZW1lbnQKKyAgICAgICAgJycnCisgICAgICAgIGlmIHRpbWVzdGFtcDoKKyAgICAgICAgICAgIGltYWdlX25hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KGltYWdlKVswXQorICAgICAgICAgICAgdGltZXN0ciA9IHRpbWUuc3RyZnRpbWUoIi0lWSVtJWQtJUglTSVTIikKKyAgICAgICAgICAgIGRlc3QgPSBpbWFnZV9uYW1lICsgc3RyKHRpbWVzdHIpICsgIi5iYiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG5vdCBpbWFnZS5lbmRzd2l0aCgiLmJiIik6CisgICAgICAgICAgICAgICAgZGVzdCA9IGltYWdlICsgIi5iYiIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVzdCA9IGltYWdlCisKKyAgICAgICAgYmFzZW5hbWUgPSBGYWxzZQorICAgICAgICBpZiBiYXNlX2ltYWdlOgorICAgICAgICAgICAgd2l0aCBvcGVuKGJhc2VfaW1hZ2UsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICByZXF1aXJlX2xpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBwID0gcmUuY29tcGlsZSgiSU1BR0VfQkFTRU5BTUUgKj0iKQorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGlmIHAuc2VhcmNoKGxpbmUpOgorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZW5hbWUgPSBUcnVlCisKKyAgICAgICAgd2l0aCBvcGVuKGRlc3QsICJ3IikgYXMgaW1hZ2VmaWxlOgorICAgICAgICAgICAgaWYgYmFzZV9pbWFnZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGltYWdlZmlsZS53cml0ZSgiaW5oZXJpdCBjb3JlLWltYWdlXG4iKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0b3BkaXIgPSBzZWxmLmRhdGEuZ2V0VmFyKCJUT1BESVIiLCBGYWxzZSkKKyAgICAgICAgICAgICAgICBpZiB0b3BkaXIgaW4gYmFzZV9pbWFnZToKKyAgICAgICAgICAgICAgICAgICAgYmFzZV9pbWFnZSA9IHJlcXVpcmVfbGluZS5zcGxpdCgpWzFdCisgICAgICAgICAgICAgICAgaW1hZ2VmaWxlLndyaXRlKCJyZXF1aXJlICIgKyBiYXNlX2ltYWdlICsgIlxuIikKKyAgICAgICAgICAgIGltYWdlX2luc3RhbGwgPSAiSU1BR0VfSU5TVEFMTCA9IFwiIgorICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZV9xdWV1ZToKKyAgICAgICAgICAgICAgICBpbWFnZV9pbnN0YWxsICs9IHN0cihwYWNrYWdlKSArICIgIgorICAgICAgICAgICAgaW1hZ2VfaW5zdGFsbCArPSAiXCJcbiIKKyAgICAgICAgICAgIGltYWdlZmlsZS53cml0ZShpbWFnZV9pbnN0YWxsKQorCisgICAgICAgICAgICBkZXNjcmlwdGlvbl92YXIgPSAiREVTQ1JJUFRJT04gPSBcIiIgKyBkZXNjcmlwdGlvbiArICJcIlxuIgorICAgICAgICAgICAgaW1hZ2VmaWxlLndyaXRlKGRlc2NyaXB0aW9uX3ZhcikKKworICAgICAgICAgICAgaWYgYmFzZW5hbWU6CisgICAgICAgICAgICAgICAgIyBJZiB0aGlzIGlzIG92ZXJ3cml0dGVuIGluIGEgaW5oZXJpdGVkIGltYWdlLCByZXNldCBpdCB0byBkZWZhdWx0CisgICAgICAgICAgICAgICAgaW1hZ2VfYmFzZW5hbWUgPSAiSU1BR0VfQkFTRU5BTUUgPSBcIiR7UE59XCJcbiIKKyAgICAgICAgICAgICAgICBpbWFnZWZpbGUud3JpdGUoaW1hZ2VfYmFzZW5hbWUpCisKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHN0YXRlLmluaXRpYWwKKyAgICAgICAgaWYgdGltZXN0YW1wOgorICAgICAgICAgICAgcmV0dXJuIHRpbWVzdHIKKworICAgIGRlZiB1cGRhdGVDYWNoZVN5bmMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuc3RhdGUgPT0gc3RhdGUucnVubmluZzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgcmVsb2FkIGZpbGVzIGZvciB3aGljaCB3ZSBnb3Qgbm90aWZpY2F0aW9ucworICAgICAgICBmb3IgcCBpbiBzZWxmLmlub3RpZnlfbW9kaWZpZWRfZmlsZXM6CisgICAgICAgICAgICBiYi5wYXJzZS51cGRhdGVfY2FjaGUocCkKKyAgICAgICAgc2VsZi5pbm90aWZ5X21vZGlmaWVkX2ZpbGVzID0gW10KKworICAgICAgICBpZiBub3Qgc2VsZi5iYXNlY29uZmlnX3ZhbGlkOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSZWxvYWRpbmcgYmFzZSBjb25maWd1cmF0aW9uIGRhdGEiKQorICAgICAgICAgICAgc2VsZi5pbml0Q29uZmlndXJhdGlvbkRhdGEoKQorICAgICAgICAgICAgc2VsZi5iYXNlY29uZmlnX3ZhbGlkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5wYXJzZWNhY2hlX3ZhbGlkID0gRmFsc2UKKworICAgICMgVGhpcyBpcyBjYWxsZWQgZm9yIGFsbCBhc3luYyBjb21tYW5kcyB3aGVuIHNlbGYuc3RhdGUgIT0gcnVubmluZworICAgIGRlZiB1cGRhdGVDYWNoZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zdGF0ZSA9PSBzdGF0ZS5ydW5uaW5nOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5zdGF0ZSBpbiAoc3RhdGUuc2h1dGRvd24sIHN0YXRlLmZvcmNlc2h1dGRvd24sIHN0YXRlLmVycm9yKToKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5wYXJzZXIsICdzaHV0ZG93bicpOgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VyLnNodXRkb3duKGNsZWFuPUZhbHNlLCBmb3JjZSA9IFRydWUpCisgICAgICAgICAgICByYWlzZSBiYi5CQkhhbmRsZWRFeGNlcHRpb24oKQorCisgICAgICAgIGlmIHNlbGYuc3RhdGUgIT0gc3RhdGUucGFyc2luZzoKKyAgICAgICAgICAgIHNlbGYudXBkYXRlQ2FjaGVTeW5jKCkKKworICAgICAgICBpZiBzZWxmLnN0YXRlICE9IHN0YXRlLnBhcnNpbmcgYW5kIG5vdCBzZWxmLnBhcnNlY2FjaGVfdmFsaWQ6CisgICAgICAgICAgICBzZWxmLnBhcnNlQ29uZmlndXJhdGlvbiAoKQorICAgICAgICAgICAgaWYgQ29va2VyRmVhdHVyZXMuU0VORF9TQU5JVFlFVkVOVFMgaW4gc2VsZi5mZWF0dXJlc2V0OgorICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuU2FuaXR5Q2hlY2soRmFsc2UpLCBzZWxmLmRhdGEpCisKKyAgICAgICAgICAgIGlnbm9yZSA9IHNlbGYuZXhwYW5kZWRfZGF0YS5nZXRWYXIoIkFTU1VNRV9QUk9WSURFRCIsIFRydWUpIG9yICIiCisgICAgICAgICAgICBzZWxmLnJlY2lwZWNhY2hlLmlnbm9yZWRfZGVwZW5kZW5jaWVzID0gc2V0KGlnbm9yZS5zcGxpdCgpKQorCisgICAgICAgICAgICBmb3IgZGVwIGluIHNlbGYuY29uZmlndXJhdGlvbi5leHRyYV9hc3N1bWVfcHJvdmlkZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5yZWNpcGVjYWNoZS5pZ25vcmVkX2RlcGVuZGVuY2llcy5hZGQoZGVwKQorCisgICAgICAgICAgICBzZWxmLmNvbGxlY3Rpb24gPSBDb29rZXJDb2xsZWN0RmlsZXMoc2VsZi5yZWNpcGVjYWNoZS5iYmZpbGVfY29uZmlnX3ByaW9yaXRpZXMpCisgICAgICAgICAgICAoZmlsZWxpc3QsIG1hc2tlZCkgPSBzZWxmLmNvbGxlY3Rpb24uY29sbGVjdF9iYmZpbGVzKHNlbGYuZGF0YSwgc2VsZi5leHBhbmRlZF9kYXRhKQorCisgICAgICAgICAgICBzZWxmLnBhcnNlciA9IENvb2tlclBhcnNlcihzZWxmLCBmaWxlbGlzdCwgbWFza2VkKQorICAgICAgICAgICAgc2VsZi5wYXJzZWNhY2hlX3ZhbGlkID0gVHJ1ZQorCisgICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZS5wYXJzaW5nCisKKyAgICAgICAgaWYgbm90IHNlbGYucGFyc2VyLnBhcnNlX25leHQoKToKKyAgICAgICAgICAgIGNvbGxlY3Rsb2cuZGVidWcoMSwgInBhcnNpbmcgY29tcGxldGUiKQorICAgICAgICAgICAgaWYgc2VsZi5wYXJzZXIuZXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIuQkJIYW5kbGVkRXhjZXB0aW9uKCkKKyAgICAgICAgICAgIHNlbGYuc2hvd19hcHBlbmRzX3dpdGhfbm9fcmVjaXBlcygpCisgICAgICAgICAgICBzZWxmLmhhbmRsZVByZWZQcm92aWRlcnMoKQorICAgICAgICAgICAgc2VsZi5yZWNpcGVjYWNoZS5iYmZpbGVfcHJpb3JpdHkgPSBzZWxmLmNvbGxlY3Rpb24uY29sbGVjdGlvbl9wcmlvcml0aWVzKHNlbGYucmVjaXBlY2FjaGUucGtnX2ZuLCBzZWxmLmRhdGEpCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUucnVubmluZworCisgICAgICAgICAgICAjIFNlbmQgYW4gZXZlbnQgbGlzdGluZyBhbGwgc3RhbXBzIHJlYWNoYWJsZSBhZnRlciBwYXJzaW5nCisgICAgICAgICAgICAjIHdoaWNoIHRoZSBtZXRhZGF0YSBtYXkgdXNlIHRvIGNsZWFuIHVwIHN0YWxlIGRhdGEKKyAgICAgICAgICAgIGV2ZW50ID0gYmIuZXZlbnQuUmVhY2hhYmxlU3RhbXBzKHNlbGYucmVjaXBlY2FjaGUuc3RhbXApCisgICAgICAgICAgICBiYi5ldmVudC5maXJlKGV2ZW50LCBzZWxmLmV4cGFuZGVkX2RhdGEpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgY2hlY2tQYWNrYWdlcyhzZWxmLCBwa2dzX3RvX2J1aWxkKToKKworICAgICAgICAjIFJldHVybiBhIGNvcHksIGRvbid0IG1vZGlmeSB0aGUgb3JpZ2luYWwKKyAgICAgICAgcGtnc190b19idWlsZCA9IHBrZ3NfdG9fYnVpbGRbOl0KKworICAgICAgICBpZiBsZW4ocGtnc190b19idWlsZCkgPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE5vdGhpbmdUb0J1aWxkCisKKyAgICAgICAgaWdub3JlID0gKHNlbGYuZXhwYW5kZWRfZGF0YS5nZXRWYXIoIkFTU1VNRV9QUk9WSURFRCIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIGZvciBwa2cgaW4gcGtnc190b19idWlsZDoKKyAgICAgICAgICAgIGlmIHBrZyBpbiBpZ25vcmU6CisgICAgICAgICAgICAgICAgcGFyc2Vsb2cud2FybigiRXhwbGljaXQgdGFyZ2V0IFwiJXNcIiBpcyBpbiBBU1NVTUVfUFJPVklERUQsIGlnbm9yaW5nIiAlIHBrZykKKworICAgICAgICBpZiAnd29ybGQnIGluIHBrZ3NfdG9fYnVpbGQ6CisgICAgICAgICAgICBzZWxmLmJ1aWxkV29ybGRUYXJnZXRMaXN0KCkKKyAgICAgICAgICAgIHBrZ3NfdG9fYnVpbGQucmVtb3ZlKCd3b3JsZCcpCisgICAgICAgICAgICBmb3IgdCBpbiBzZWxmLnJlY2lwZWNhY2hlLndvcmxkX3RhcmdldDoKKyAgICAgICAgICAgICAgICBwa2dzX3RvX2J1aWxkLmFwcGVuZCh0KQorCisgICAgICAgIGlmICd1bml2ZXJzZScgaW4gcGtnc190b19idWlsZDoKKyAgICAgICAgICAgIHBhcnNlbG9nLndhcm4oIlRoZSBcInVuaXZlcnNlXCIgdGFyZ2V0IGlzIG9ubHkgaW50ZW5kZWQgZm9yIHRlc3RpbmcgYW5kIG1heSBwcm9kdWNlIGVycm9ycy4iKQorICAgICAgICAgICAgcGFyc2Vsb2cuZGVidWcoMSwgImNvbGxhdGluZyBwYWNrYWdlcyBmb3IgXCJ1bml2ZXJzZVwiIikKKyAgICAgICAgICAgIHBrZ3NfdG9fYnVpbGQucmVtb3ZlKCd1bml2ZXJzZScpCisgICAgICAgICAgICBmb3IgdCBpbiBzZWxmLnJlY2lwZWNhY2hlLnVuaXZlcnNlX3RhcmdldDoKKyAgICAgICAgICAgICAgICBwa2dzX3RvX2J1aWxkLmFwcGVuZCh0KQorCisgICAgICAgIHJldHVybiBwa2dzX3RvX2J1aWxkCisKKworCisKKyAgICBkZWYgcHJlX3NlcnZlKHNlbGYpOgorICAgICAgICAjIEVtcHR5IHRoZSBlbnZpcm9ubWVudC4gVGhlIGVudmlyb25tZW50IHdpbGwgYmUgcG9wdWxhdGVkIGFzCisgICAgICAgICMgbmVjZXNzYXJ5IGZyb20gdGhlIGRhdGEgc3RvcmUuCisgICAgICAgICNiYi51dGlscy5lbXB0eV9lbnZpcm9ubWVudCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucHJob3N0ID0gcHJzZXJ2LnNlcnYuYXV0b19zdGFydChzZWxmLmRhdGEpCisgICAgICAgIGV4Y2VwdCBwcnNlcnYuc2Vydi5QUlNlcnZpY2VDb25maWdFcnJvcjoKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoQ29va2VyRXhpdCgpLCBzZWxmLmV4cGFuZGVkX2RhdGEpCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUuZXJyb3IKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgcG9zdF9zZXJ2ZShzZWxmKToKKyAgICAgICAgcHJzZXJ2LnNlcnYuYXV0b19zaHV0ZG93bihzZWxmLmRhdGEpCisgICAgICAgIGJiLmV2ZW50LmZpcmUoQ29va2VyRXhpdCgpLCBzZWxmLmV4cGFuZGVkX2RhdGEpCisgICAgICAgIGxvY2tmaWxlID0gc2VsZi5sb2NrLm5hbWUKKyAgICAgICAgc2VsZi5sb2NrLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb2NrID0gTm9uZQorCisgICAgICAgIHdoaWxlIG5vdCBzZWxmLmxvY2s6CisgICAgICAgICAgICB3aXRoIGJiLnV0aWxzLnRpbWVvdXQoMyk6CisgICAgICAgICAgICAgICAgc2VsZi5sb2NrID0gYmIudXRpbHMubG9ja2ZpbGUobG9ja2ZpbGUsIHNoYXJlZD1GYWxzZSwgcmV0cnk9RmFsc2UsIGJsb2NrPVRydWUpCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYubG9jazoKKyAgICAgICAgICAgICAgICAgICAgIyBTb21lIHN5c3RlbXMgbWF5IG5vdCBoYXZlIGxzb2YgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgICAgIHByb2NzID0gTm9uZQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9jcyA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsibHNvZiIsICctdycsIGxvY2tmaWxlXSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgaWYgcHJvY3MgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRmFsbCBiYWNrIHRvIGZ1c2VyIGlmIGxzb2YgaXMgdW5hdmFpbGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jcyA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsiZnVzZXIiLCAnLXYnLCBsb2NrZmlsZV0sIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gIkRlbGF5aW5nIHNodXRkb3duIGR1ZSB0byBhY3RpdmUgcHJvY2Vzc2VzIHdoaWNoIGFwcGVhciB0byBiZSBob2xkaW5nIGJpdGJha2UubG9jayIKKyAgICAgICAgICAgICAgICAgICAgaWYgcHJvY3M6CisgICAgICAgICAgICAgICAgICAgICAgICBtc2cgKz0gIjpcbiVzIiAlIHN0cihwcm9jcykKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQobXNnKQorCisKKyAgICBkZWYgc2h1dGRvd24oc2VsZiwgZm9yY2UgPSBGYWxzZSk6CisgICAgICAgIGlmIGZvcmNlOgorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHN0YXRlLmZvcmNlc2h1dGRvd24KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZS5zaHV0ZG93bgorCisgICAgZGVmIGZpbmlzaGNvbW1hbmQoc2VsZik6CisgICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZS5pbml0aWFsCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYuaW5pdENvbmZpZ3VyYXRpb25EYXRhKCkKKworICAgIGRlZiBsb2NrQml0YmFrZShzZWxmKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ2xvY2snKToKKyAgICAgICAgICAgIHNlbGYubG9jayA9IE5vbmUKKyAgICAgICAgICAgIGlmIHNlbGYuZGF0YToKKyAgICAgICAgICAgICAgICBsb2NrZmlsZSA9IHNlbGYuZGF0YS5leHBhbmQoIiR7VE9QRElSfS9iaXRiYWtlLmxvY2siKQorICAgICAgICAgICAgICAgIGlmIGxvY2tmaWxlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvY2sgPSBiYi51dGlscy5sb2NrZmlsZShsb2NrZmlsZSwgRmFsc2UsIEZhbHNlKQorICAgICAgICByZXR1cm4gc2VsZi5sb2NrCisKKyAgICBkZWYgdW5sb2NrQml0YmFrZShzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnbG9jaycpIGFuZCBzZWxmLmxvY2s6CisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKHNlbGYubG9jaykKKworZGVmIHNlcnZlcl9tYWluKGNvb2tlciwgZnVuYywgKmFyZ3MpOgorICAgIGNvb2tlci5wcmVfc2VydmUoKQorCisgICAgaWYgY29va2VyLmNvbmZpZ3VyYXRpb24ucHJvZmlsZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IGNQcm9maWxlIGFzIHByb2ZpbGUKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgaW1wb3J0IHByb2ZpbGUKKyAgICAgICAgcHJvZiA9IHByb2ZpbGUuUHJvZmlsZSgpCisKKyAgICAgICAgcmV0ID0gcHJvZmlsZS5Qcm9maWxlLnJ1bmNhbGwocHJvZiwgZnVuYywgKmFyZ3MpCisKKyAgICAgICAgcHJvZi5kdW1wX3N0YXRzKCJwcm9maWxlLmxvZyIpCisgICAgICAgIGJiLnV0aWxzLnByb2Nlc3NfcHJvZmlsZWxvZygicHJvZmlsZS5sb2ciKQorICAgICAgICBwcmludCgiUmF3IHByb2ZpbGluZyBpbmZvcm1hdGlvbiBzYXZlZCB0byBwcm9maWxlLmxvZyBhbmQgcHJvY2Vzc2VkIHN0YXRpc3RpY3MgdG8gcHJvZmlsZS5sb2cucHJvY2Vzc2VkIikKKworICAgIGVsc2U6CisgICAgICAgIHJldCA9IGZ1bmMoKmFyZ3MpCisKKyAgICBjb29rZXIucG9zdF9zZXJ2ZSgpCisKKyAgICByZXR1cm4gcmV0CisKK2NsYXNzIENvb2tlckV4aXQoYmIuZXZlbnQuRXZlbnQpOgorICAgICIiIgorICAgIE5vdGlmeSBjbGllbnRzIG9mIHRoZSBDb29rZXIgc2h1dGRvd24KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgYmIuZXZlbnQuRXZlbnQuX19pbml0X18oc2VsZikKKworCitjbGFzcyBDb29rZXJDb2xsZWN0RmlsZXMob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJpb3JpdGllcyk6CisgICAgICAgIHNlbGYuYmJhcHBlbmRzID0gW10KKyAgICAgICAgc2VsZi5iYmZpbGVfY29uZmlnX3ByaW9yaXRpZXMgPSBwcmlvcml0aWVzCisKKyAgICBkZWYgY2FsY19iYmZpbGVfcHJpb3JpdHkoIHNlbGYsIGZpbGVuYW1lLCBtYXRjaGVkID0gTm9uZSApOgorICAgICAgICBmb3IgXywgXywgcmVnZXgsIHByaSBpbiBzZWxmLmJiZmlsZV9jb25maWdfcHJpb3JpdGllczoKKyAgICAgICAgICAgIGlmIHJlZ2V4Lm1hdGNoKGZpbGVuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBtYXRjaGVkICE9IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZWdleCBpbiBtYXRjaGVkOgorICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5hZGQocmVnZXgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHByaQorICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIGdldF9iYmZpbGVzKHNlbGYpOgorICAgICAgICAiIiJHZXQgbGlzdCBvZiBkZWZhdWx0IC5iYiBmaWxlcyBieSByZWFkaW5nIG91dCB0aGUgY3VycmVudCBkaXJlY3RvcnkiIiIKKyAgICAgICAgcGF0aCA9IG9zLmdldGN3ZCgpCisgICAgICAgIGNvbnRlbnRzID0gb3MubGlzdGRpcihwYXRoKQorICAgICAgICBiYmZpbGVzID0gW10KKyAgICAgICAgZm9yIGYgaW4gY29udGVudHM6CisgICAgICAgICAgICBpZiBmLmVuZHN3aXRoKCIuYmIiKToKKyAgICAgICAgICAgICAgICBiYmZpbGVzLmFwcGVuZChvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHBhdGgsIGYpKSkKKyAgICAgICAgcmV0dXJuIGJiZmlsZXMKKworICAgIGRlZiBmaW5kX2JiZmlsZXMoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIkZpbmQgYWxsIHRoZSAuYmIgYW5kIC5iYmFwcGVuZCBmaWxlcyBpbiBhIGRpcmVjdG9yeSIiIgorICAgICAgICBmb3VuZCA9IFtdCisgICAgICAgIGZvciBkaXIsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocGF0aCk6CisgICAgICAgICAgICBmb3IgaWdub3JlZCBpbiAoJ1NDQ1MnLCAnQ1ZTJywgJy5zdm4nKToKKyAgICAgICAgICAgICAgICBpZiBpZ25vcmVkIGluIGRpcnM6CisgICAgICAgICAgICAgICAgICAgIGRpcnMucmVtb3ZlKGlnbm9yZWQpCisgICAgICAgICAgICBmb3VuZCArPSBbb3MucGF0aC5qb2luKGRpciwgZikgZm9yIGYgaW4gZmlsZXMgaWYgKGYuZW5kc3dpdGgoWycuYmInLCAnLmJiYXBwZW5kJ10pKV0KKworICAgICAgICByZXR1cm4gZm91bmQKKworICAgIGRlZiBjb2xsZWN0X2JiZmlsZXMoc2VsZiwgY29uZmlnLCBldmVudGRhdGEpOgorICAgICAgICAiIiJDb2xsZWN0IGFsbCBhdmFpbGFibGUgLmJiIGJ1aWxkIGZpbGVzIiIiCisgICAgICAgIG1hc2tlZCA9IDAKKworICAgICAgICBjb2xsZWN0bG9nLmRlYnVnKDEsICJjb2xsZWN0aW5nIC5iYiBmaWxlcyIpCisKKyAgICAgICAgZmlsZXMgPSAoY29uZmlnLmdldFZhciggIkJCRklMRVMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBjb25maWcuc2V0VmFyKCJCQkZJTEVTIiwgIiAiLmpvaW4oZmlsZXMpKQorCisgICAgICAgICMgU29ydCBmaWxlcyBieSBwcmlvcml0eQorICAgICAgICBmaWxlcy5zb3J0KCBrZXk9bGFtYmRhIGZpbGVpdGVtOiBzZWxmLmNhbGNfYmJmaWxlX3ByaW9yaXR5KGZpbGVpdGVtKSApCisKKyAgICAgICAgaWYgbm90IGxlbihmaWxlcyk6CisgICAgICAgICAgICBmaWxlcyA9IHNlbGYuZ2V0X2JiZmlsZXMoKQorCisgICAgICAgIGlmIG5vdCBsZW4oZmlsZXMpOgorICAgICAgICAgICAgY29sbGVjdGxvZy5lcnJvcigibm8gcmVjaXBlIGZpbGVzIHRvIGJ1aWxkLCBjaGVjayB5b3VyIEJCUEFUSCBhbmQgQkJGSUxFUz8iKQorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShDb29rZXJFeGl0KCksIGV2ZW50ZGF0YSkKKworICAgICAgICAjIENhbid0IHVzZSBzZXQgaGVyZSBhcyBvcmRlciBpcyBpbXBvcnRhbnQKKyAgICAgICAgbmV3ZmlsZXMgPSBbXQorICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZik6CisgICAgICAgICAgICAgICAgZGlyZmlsZXMgPSBzZWxmLmZpbmRfYmJmaWxlcyhmKQorICAgICAgICAgICAgICAgIGZvciBnIGluIGRpcmZpbGVzOgorICAgICAgICAgICAgICAgICAgICBpZiBnIG5vdCBpbiBuZXdmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld2ZpbGVzLmFwcGVuZChnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBnbG9iYmVkID0gZ2xvYi5nbG9iKGYpCisgICAgICAgICAgICAgICAgaWYgbm90IGdsb2JiZWQgYW5kIG9zLnBhdGguZXhpc3RzKGYpOgorICAgICAgICAgICAgICAgICAgICBnbG9iYmVkID0gW2ZdCisgICAgICAgICAgICAgICAgZm9yIGcgaW4gZ2xvYmJlZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgZyBub3QgaW4gbmV3ZmlsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdmaWxlcy5hcHBlbmQoZykKKworICAgICAgICBiYm1hc2sgPSBjb25maWcuZ2V0VmFyKCdCQk1BU0snLCBUcnVlKQorCisgICAgICAgIGlmIGJibWFzazoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBiYm1hc2tfY29tcGlsZWQgPSByZS5jb21waWxlKGJibWFzaykKKyAgICAgICAgICAgIGV4Y2VwdCBzcmVfY29uc3RhbnRzLmVycm9yOgorICAgICAgICAgICAgICAgIGNvbGxlY3Rsb2cuY3JpdGljYWwoIkJCTUFTSyBpcyBub3QgYSB2YWxpZCByZWd1bGFyIGV4cHJlc3Npb24sIGlnbm9yaW5nLiIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3QobmV3ZmlsZXMpLCAwCisKKyAgICAgICAgYmJmaWxlcyA9IFtdCisgICAgICAgIGJiYXBwZW5kID0gW10KKyAgICAgICAgZm9yIGYgaW4gbmV3ZmlsZXM6CisgICAgICAgICAgICBpZiBiYm1hc2sgYW5kIGJibWFza19jb21waWxlZC5zZWFyY2goZik6CisgICAgICAgICAgICAgICAgY29sbGVjdGxvZy5kZWJ1ZygxLCAic2tpcHBpbmcgbWFza2VkIGZpbGUgJXMiLCBmKQorICAgICAgICAgICAgICAgIG1hc2tlZCArPSAxCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGYuZW5kc3dpdGgoJy5iYicpOgorICAgICAgICAgICAgICAgIGJiZmlsZXMuYXBwZW5kKGYpCisgICAgICAgICAgICBlbGlmIGYuZW5kc3dpdGgoJy5iYmFwcGVuZCcpOgorICAgICAgICAgICAgICAgIGJiYXBwZW5kLmFwcGVuZChmKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjb2xsZWN0bG9nLmRlYnVnKDEsICJza2lwcGluZyAlczogdW5rbm93biBmaWxlIGV4dGVuc2lvbiIsIGYpCisKKyAgICAgICAgIyBCdWlsZCBhIGxpc3Qgb2YgLmJiYXBwZW5kIGZpbGVzIGZvciBlYWNoIC5iYiBmaWxlCisgICAgICAgIGZvciBmIGluIGJiYXBwZW5kOgorICAgICAgICAgICAgYmFzZSA9IG9zLnBhdGguYmFzZW5hbWUoZikucmVwbGFjZSgnLmJiYXBwZW5kJywgJy5iYicpCisgICAgICAgICAgICBzZWxmLmJiYXBwZW5kcy5hcHBlbmQoKGJhc2UsIGYpKQorCisgICAgICAgICMgRmluZCBvdmVybGF5ZWQgcmVjaXBlcworICAgICAgICAjIGJiZmlsZXMgd2lsbCBiZSBpbiBwcmlvcml0eSBvcmRlciB3aGljaCBtYWtlcyB0aGlzIGVhc3kKKyAgICAgICAgYmJmaWxlX3NlZW4gPSBkaWN0KCkKKyAgICAgICAgc2VsZi5vdmVybGF5ZWQgPSBkZWZhdWx0ZGljdChsaXN0KQorICAgICAgICBmb3IgZiBpbiByZXZlcnNlZChiYmZpbGVzKToKKyAgICAgICAgICAgIGJhc2UgPSBvcy5wYXRoLmJhc2VuYW1lKGYpCisgICAgICAgICAgICBpZiBiYXNlIG5vdCBpbiBiYmZpbGVfc2VlbjoKKyAgICAgICAgICAgICAgICBiYmZpbGVfc2VlbltiYXNlXSA9IGYKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdG9wZmlsZSA9IGJiZmlsZV9zZWVuW2Jhc2VdCisgICAgICAgICAgICAgICAgc2VsZi5vdmVybGF5ZWRbdG9wZmlsZV0uYXBwZW5kKGYpCisKKyAgICAgICAgcmV0dXJuIChiYmZpbGVzLCBtYXNrZWQpCisKKyAgICBkZWYgZ2V0X2ZpbGVfYXBwZW5kcyhzZWxmLCBmbik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIGEgbGlzdCBvZiAuYmJhcHBlbmQgZmlsZXMgdG8gYXBwbHkgdG8gZm4KKyAgICAgICAgIiIiCisgICAgICAgIGZpbGVsaXN0ID0gW10KKyAgICAgICAgZiA9IG9zLnBhdGguYmFzZW5hbWUoZm4pCisgICAgICAgIGZvciBiIGluIHNlbGYuYmJhcHBlbmRzOgorICAgICAgICAgICAgKGJiYXBwZW5kLCBmaWxlbmFtZSkgPSBiCisgICAgICAgICAgICBpZiAoYmJhcHBlbmQgPT0gZikgb3IgKCclJyBpbiBiYmFwcGVuZCBhbmQgYmJhcHBlbmQuc3RhcnRzd2l0aChmWzpiYmFwcGVuZC5pbmRleCgnJScpXSkpOgorICAgICAgICAgICAgICAgIGZpbGVsaXN0LmFwcGVuZChmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIGZpbGVsaXN0CisKKyAgICBkZWYgY29sbGVjdGlvbl9wcmlvcml0aWVzKHNlbGYsIHBrZ2ZucywgZCk6CisKKyAgICAgICAgcHJpb3JpdGllcyA9IHt9CisKKyAgICAgICAgIyBDYWxjdWxhdGUgcHJpb3JpdGllcyBmb3IgZWFjaCBmaWxlCisgICAgICAgIG1hdGNoZWQgPSBzZXQoKQorICAgICAgICBmb3IgcCBpbiBwa2dmbnM6CisgICAgICAgICAgICByZWFsZm4sIGNscyA9IGJiLmNhY2hlLkNhY2hlLnZpcnR1YWxmbjJyZWFsZm4ocCkKKyAgICAgICAgICAgIHByaW9yaXRpZXNbcF0gPSBzZWxmLmNhbGNfYmJmaWxlX3ByaW9yaXR5KHJlYWxmbiwgbWF0Y2hlZCkKKworICAgICAgICAjIERvbid0IHNob3cgdGhlIHdhcm5pbmcgaWYgdGhlIEJCRklMRV9QQVRURVJOIGRpZCBtYXRjaCAuYmJhcHBlbmQgZmlsZXMKKyAgICAgICAgdW5tYXRjaGVkID0gc2V0KCkKKyAgICAgICAgZm9yIF8sIF8sIHJlZ2V4LCBwcmkgaW4gc2VsZi5iYmZpbGVfY29uZmlnX3ByaW9yaXRpZXM6CisgICAgICAgICAgICBpZiBub3QgcmVnZXggaW4gbWF0Y2hlZDoKKyAgICAgICAgICAgICAgICB1bm1hdGNoZWQuYWRkKHJlZ2V4KQorCisgICAgICAgIGRlZiBmaW5kbWF0Y2gocmVnZXgpOgorICAgICAgICAgICAgZm9yIGIgaW4gc2VsZi5iYmFwcGVuZHM6CisgICAgICAgICAgICAgICAgKGJiZmlsZSwgYXBwZW5kKSA9IGIKKyAgICAgICAgICAgICAgICBpZiByZWdleC5tYXRjaChhcHBlbmQpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgZm9yIHVubWF0Y2ggaW4gdW5tYXRjaGVkLmNvcHkoKToKKyAgICAgICAgICAgIGlmIGZpbmRtYXRjaCh1bm1hdGNoKToKKyAgICAgICAgICAgICAgICB1bm1hdGNoZWQucmVtb3ZlKHVubWF0Y2gpCisKKyAgICAgICAgZm9yIGNvbGxlY3Rpb24sIHBhdHRlcm4sIHJlZ2V4LCBfIGluIHNlbGYuYmJmaWxlX2NvbmZpZ19wcmlvcml0aWVzOgorICAgICAgICAgICAgaWYgcmVnZXggaW4gdW5tYXRjaGVkOgorICAgICAgICAgICAgICAgIGlmIGQuZ2V0VmFyKCdCQkZJTEVfUEFUVEVSTl9JR05PUkVfRU1QVFlfJXMnICUgY29sbGVjdGlvbiwgVHJ1ZSkgIT0gJzEnOgorICAgICAgICAgICAgICAgICAgICBjb2xsZWN0bG9nLndhcm4oIk5vIGJiIGZpbGVzIG1hdGNoZWQgQkJGSUxFX1BBVFRFUk5fJXMgJyVzJyIgJSAoY29sbGVjdGlvbiwgcGF0dGVybikpCisKKyAgICAgICAgcmV0dXJuIHByaW9yaXRpZXMKKworY2xhc3MgUGFyc2luZ0ZhaWx1cmUoRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVhbGV4Y2VwdGlvbiwgcmVjaXBlKToKKyAgICAgICAgc2VsZi5yZWFsZXhjZXB0aW9uID0gcmVhbGV4Y2VwdGlvbgorICAgICAgICBzZWxmLnJlY2lwZSA9IHJlY2lwZQorICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgcmVhbGV4Y2VwdGlvbiwgcmVjaXBlKQorCitjbGFzcyBGZWVkZXIobXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqb2JzLCB0b19wYXJzZXJzLCBxdWl0KToKKyAgICAgICAgc2VsZi5xdWl0ID0gcXVpdAorICAgICAgICBzZWxmLmpvYnMgPSBqb2JzCisgICAgICAgIHNlbGYudG9fcGFyc2VycyA9IHRvX3BhcnNlcnMKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MuX19pbml0X18oc2VsZikKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcXVpdCA9IHNlbGYucXVpdC5nZXRfbm93YWl0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHF1aXQgPT0gJ2NhbmNlbCc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYudG9fcGFyc2Vycy5jYW5jZWxfam9pbl90aHJlYWQoKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBqb2IgPSBzZWxmLmpvYnMucG9wKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnRvX3BhcnNlcnMucHV0KGpvYiwgdGltZW91dD0wLjUpCisgICAgICAgICAgICBleGNlcHQgUXVldWUuRnVsbDoKKyAgICAgICAgICAgICAgICBzZWxmLmpvYnMuaW5zZXJ0KDAsIGpvYikKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCitjbGFzcyBQYXJzZXIobXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqb2JzLCByZXN1bHRzLCBxdWl0LCBpbml0LCBwcm9maWxlKToKKyAgICAgICAgc2VsZi5qb2JzID0gam9icworICAgICAgICBzZWxmLnJlc3VsdHMgPSByZXN1bHRzCisgICAgICAgIHNlbGYucXVpdCA9IHF1aXQKKyAgICAgICAgc2VsZi5pbml0ID0gaW5pdAorICAgICAgICBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmNvbnRleHQgPSBiYi51dGlscy5nZXRfY29udGV4dCgpLmNvcHkoKQorICAgICAgICBzZWxmLmhhbmRsZXJzID0gYmIuZXZlbnQuZ2V0X2NsYXNzX2hhbmRsZXJzKCkuY29weSgpCisgICAgICAgIHNlbGYucHJvZmlsZSA9IHByb2ZpbGUKKworICAgIGRlZiBydW4oc2VsZik6CisKKyAgICAgICAgaWYgbm90IHNlbGYucHJvZmlsZToKKyAgICAgICAgICAgIHNlbGYucmVhbHJ1bigpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgY1Byb2ZpbGUgYXMgcHJvZmlsZQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBpbXBvcnQgcHJvZmlsZQorICAgICAgICBwcm9mID0gcHJvZmlsZS5Qcm9maWxlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJvZmlsZS5Qcm9maWxlLnJ1bmNhbGwocHJvZiwgc2VsZi5yZWFscnVuKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgbG9nZmlsZSA9ICJwcm9maWxlLXBhcnNlLSVzLmxvZyIgJSBtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzKCkubmFtZQorICAgICAgICAgICAgcHJvZi5kdW1wX3N0YXRzKGxvZ2ZpbGUpCisKKyAgICBkZWYgcmVhbHJ1bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pbml0OgorICAgICAgICAgICAgc2VsZi5pbml0KCkKKworICAgICAgICBwZW5kaW5nID0gW10KKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnF1aXQuZ2V0X25vd2FpdCgpCisgICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdHMuY2FuY2VsX2pvaW5fdGhyZWFkKCkKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBwZW5kaW5nOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBlbmRpbmcucG9wKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBqb2IgPSBzZWxmLmpvYnMuZ2V0KHRpbWVvdXQ9MC4yNSkKKyAgICAgICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBqb2IgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLnBhcnNlKCpqb2IpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdHMucHV0KHJlc3VsdCwgdGltZW91dD0wLjI1KQorICAgICAgICAgICAgZXhjZXB0IFF1ZXVlLkZ1bGw6CisgICAgICAgICAgICAgICAgcGVuZGluZy5hcHBlbmQocmVzdWx0KQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGZpbGVuYW1lLCBhcHBlbmRzLCBjYWNoZXNfYXJyYXkpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFJlc2V0IG91ciBlbnZpcm9ubWVudCBhbmQgaGFuZGxlcnMgdG8gdGhlIG9yaWdpbmFsIHNldHRpbmdzCisgICAgICAgICAgICBiYi51dGlscy5zZXRfY29udGV4dChzZWxmLmNvbnRleHQuY29weSgpKQorICAgICAgICAgICAgYmIuZXZlbnQuc2V0X2NsYXNzX2hhbmRsZXJzKHNlbGYuaGFuZGxlcnMuY29weSgpKQorICAgICAgICAgICAgcmV0dXJuIFRydWUsIGJiLmNhY2hlLkNhY2hlLnBhcnNlKGZpbGVuYW1lLCBhcHBlbmRzLCBzZWxmLmNmZywgY2FjaGVzX2FycmF5KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHRiID0gc3lzLmV4Y19pbmZvKClbMl0KKyAgICAgICAgICAgIGV4Yy5yZWNpcGUgPSBmaWxlbmFtZQorICAgICAgICAgICAgZXhjLnRyYWNlYmFjayA9IGxpc3QoYmIuZXhjZXB0aW9ucy5leHRyYWN0X3RyYWNlYmFjayh0YiwgY29udGV4dD0zKSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlLCBleGMKKyAgICAgICAgIyBOZWVkIHRvIHR1cm4gQmFzZUV4Y2VwdGlvbnMgaW50byBFeGNlcHRpb25zIGhlcmUgc28gd2UgZ3JhY2VmdWxseSBzaHV0ZG93bgorICAgICAgICAjIGFuZCBmb3IgZXhhbXBsZSBhIHdvcmtlciB0aHJlYWQgZG9lc24ndCBqdXN0IGV4aXQgb24gaXRzIG93biBpbiByZXNwb25zZSB0bworICAgICAgICAjIGEgU3lzdGVtRXhpdCBldmVudCBmb3IgZXhhbXBsZS4KKyAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgcmV0dXJuIFRydWUsIFBhcnNpbmdGYWlsdXJlKGV4YywgZmlsZW5hbWUpCisKK2NsYXNzIENvb2tlclBhcnNlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb29rZXIsIGZpbGVsaXN0LCBtYXNrZWQpOgorICAgICAgICBzZWxmLmZpbGVsaXN0ID0gZmlsZWxpc3QKKyAgICAgICAgc2VsZi5jb29rZXIgPSBjb29rZXIKKyAgICAgICAgc2VsZi5jZmdkYXRhID0gY29va2VyLmRhdGEKKyAgICAgICAgc2VsZi5jZmdoYXNoID0gY29va2VyLmRhdGFfaGFzaAorCisgICAgICAgICMgQWNjb3VudGluZyBzdGF0aXN0aWNzCisgICAgICAgIHNlbGYucGFyc2VkID0gMAorICAgICAgICBzZWxmLmNhY2hlZCA9IDAKKyAgICAgICAgc2VsZi5lcnJvciA9IDAKKyAgICAgICAgc2VsZi5tYXNrZWQgPSBtYXNrZWQKKworICAgICAgICBzZWxmLnNraXBwZWQgPSAwCisgICAgICAgIHNlbGYudmlydHVhbHMgPSAwCisgICAgICAgIHNlbGYudG90YWwgPSBsZW4oZmlsZWxpc3QpCisKKyAgICAgICAgc2VsZi5jdXJyZW50ID0gMAorICAgICAgICBzZWxmLm51bV9wcm9jZXNzZXMgPSBpbnQoc2VsZi5jZmdkYXRhLmdldFZhcigiQkJfTlVNQkVSX1BBUlNFX1RIUkVBRFMiLCBUcnVlKSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpKQorICAgICAgICBzZWxmLnByb2Nlc3NfbmFtZXMgPSBbXQorCisgICAgICAgIHNlbGYuYmJfY2FjaGUgPSBiYi5jYWNoZS5DYWNoZShzZWxmLmNmZ2RhdGEsIHNlbGYuY2ZnaGFzaCwgY29va2VyLmNhY2hlc19hcnJheSkKKyAgICAgICAgc2VsZi5mcm9tY2FjaGUgPSBbXQorICAgICAgICBzZWxmLndpbGxwYXJzZSA9IFtdCisgICAgICAgIGZvciBmaWxlbmFtZSBpbiBzZWxmLmZpbGVsaXN0OgorICAgICAgICAgICAgYXBwZW5kcyA9IHNlbGYuY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhmaWxlbmFtZSkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmJiX2NhY2hlLmNhY2hlVmFsaWQoZmlsZW5hbWUsIGFwcGVuZHMpOgorICAgICAgICAgICAgICAgIHNlbGYud2lsbHBhcnNlLmFwcGVuZCgoZmlsZW5hbWUsIGFwcGVuZHMsIGNvb2tlci5jYWNoZXNfYXJyYXkpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZyb21jYWNoZS5hcHBlbmQoKGZpbGVuYW1lLCBhcHBlbmRzKSkKKyAgICAgICAgc2VsZi50b3BhcnNlID0gc2VsZi50b3RhbCAtIGxlbihzZWxmLmZyb21jYWNoZSkKKyAgICAgICAgc2VsZi5wcm9ncmVzc19jaHVuayA9IG1heChzZWxmLnRvcGFyc2UgLyAxMDAsIDEpCisKKyAgICAgICAgc2VsZi5zdGFydCgpCisgICAgICAgIHNlbGYuaGF2ZXNodXRkb3duID0gRmFsc2UKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgc2VsZi5yZXN1bHRzID0gc2VsZi5sb2FkX2NhY2hlZCgpCisgICAgICAgIHNlbGYucHJvY2Vzc2VzID0gW10KKyAgICAgICAgaWYgc2VsZi50b3BhcnNlOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5QYXJzZVN0YXJ0ZWQoc2VsZi50b3BhcnNlKSwgc2VsZi5jZmdkYXRhKQorICAgICAgICAgICAgZGVmIGluaXQoKToKKyAgICAgICAgICAgICAgICBQYXJzZXIuY2ZnID0gc2VsZi5jZmdkYXRhCisgICAgICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnV0aWwuRmluYWxpemUoTm9uZSwgYmIuY29kZXBhcnNlci5wYXJzZXJfY2FjaGVfc2F2ZSwgYXJncz0oc2VsZi5jZmdkYXRhLCksIGV4aXRwcmlvcml0eT0xKQorICAgICAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy51dGlsLkZpbmFsaXplKE5vbmUsIGJiLmZldGNoLmZldGNoZXJfcGFyc2Vfc2F2ZSwgYXJncz0oc2VsZi5jZmdkYXRhLCksIGV4aXRwcmlvcml0eT0xKQorCisgICAgICAgICAgICBzZWxmLmZlZWRlcl9xdWl0ID0gbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKG1heHNpemU9MSkKKyAgICAgICAgICAgIHNlbGYucGFyc2VyX3F1aXQgPSBtdWx0aXByb2Nlc3NpbmcuUXVldWUobWF4c2l6ZT1zZWxmLm51bV9wcm9jZXNzZXMpCisgICAgICAgICAgICBzZWxmLmpvYnMgPSBtdWx0aXByb2Nlc3NpbmcuUXVldWUobWF4c2l6ZT1zZWxmLm51bV9wcm9jZXNzZXMpCisgICAgICAgICAgICBzZWxmLnJlc3VsdF9xdWV1ZSA9IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCisgICAgICAgICAgICBzZWxmLmZlZWRlciA9IEZlZWRlcihzZWxmLndpbGxwYXJzZSwgc2VsZi5qb2JzLCBzZWxmLmZlZWRlcl9xdWl0KQorICAgICAgICAgICAgc2VsZi5mZWVkZXIuc3RhcnQoKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgc2VsZi5udW1fcHJvY2Vzc2VzKToKKyAgICAgICAgICAgICAgICBwYXJzZXIgPSBQYXJzZXIoc2VsZi5qb2JzLCBzZWxmLnJlc3VsdF9xdWV1ZSwgc2VsZi5wYXJzZXJfcXVpdCwgaW5pdCwgc2VsZi5jb29rZXIuY29uZmlndXJhdGlvbi5wcm9maWxlKQorICAgICAgICAgICAgICAgIHBhcnNlci5zdGFydCgpCisgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzX25hbWVzLmFwcGVuZChwYXJzZXIubmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3Nlcy5hcHBlbmQocGFyc2VyKQorCisgICAgICAgICAgICBzZWxmLnJlc3VsdHMgPSBpdGVydG9vbHMuY2hhaW4oc2VsZi5yZXN1bHRzLCBzZWxmLnBhcnNlX2dlbmVyYXRvcigpKQorCisgICAgZGVmIHNodXRkb3duKHNlbGYsIGNsZWFuPVRydWUsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IHNlbGYudG9wYXJzZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzZWxmLmhhdmVzaHV0ZG93bjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmhhdmVzaHV0ZG93biA9IFRydWUKKworICAgICAgICBpZiBjbGVhbjoKKyAgICAgICAgICAgIGV2ZW50ID0gYmIuZXZlbnQuUGFyc2VDb21wbGV0ZWQoc2VsZi5jYWNoZWQsIHNlbGYucGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBwZWQsIHNlbGYubWFza2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnZpcnR1YWxzLCBzZWxmLmVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRvdGFsKQorCisgICAgICAgICAgICBiYi5ldmVudC5maXJlKGV2ZW50LCBzZWxmLmNmZ2RhdGEpCisgICAgICAgICAgICBzZWxmLmZlZWRlcl9xdWl0LnB1dChOb25lKQorICAgICAgICAgICAgZm9yIHByb2Nlc3MgaW4gc2VsZi5wcm9jZXNzZXM6CisgICAgICAgICAgICAgICAgc2VsZi5qb2JzLnB1dChOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mZWVkZXJfcXVpdC5wdXQoJ2NhbmNlbCcpCisKKyAgICAgICAgICAgIHNlbGYucGFyc2VyX3F1aXQuY2FuY2VsX2pvaW5fdGhyZWFkKCkKKyAgICAgICAgICAgIGZvciBwcm9jZXNzIGluIHNlbGYucHJvY2Vzc2VzOgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VyX3F1aXQucHV0KE5vbmUpCisKKyAgICAgICAgICAgIHNlbGYuam9icy5jYW5jZWxfam9pbl90aHJlYWQoKQorCisgICAgICAgIGZvciBwcm9jZXNzIGluIHNlbGYucHJvY2Vzc2VzOgorICAgICAgICAgICAgaWYgZm9yY2U6CisgICAgICAgICAgICAgICAgcHJvY2Vzcy5qb2luKC4xKQorICAgICAgICAgICAgICAgIHByb2Nlc3MudGVybWluYXRlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJvY2Vzcy5qb2luKCkKKyAgICAgICAgc2VsZi5mZWVkZXIuam9pbigpCisKKyAgICAgICAgc3luYyA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuYmJfY2FjaGUuc3luYykKKyAgICAgICAgc3luYy5zdGFydCgpCisgICAgICAgIG11bHRpcHJvY2Vzc2luZy51dGlsLkZpbmFsaXplKE5vbmUsIHN5bmMuam9pbiwgZXhpdHByaW9yaXR5PS0xMDApCisgICAgICAgIGJiLmNvZGVwYXJzZXIucGFyc2VyX2NhY2hlX3NhdmVtZXJnZShzZWxmLmNvb2tlci5kYXRhKQorICAgICAgICBiYi5mZXRjaC5mZXRjaGVyX3BhcnNlX2RvbmUoc2VsZi5jb29rZXIuZGF0YSkKKyAgICAgICAgaWYgc2VsZi5jb29rZXIuY29uZmlndXJhdGlvbi5wcm9maWxlOgorICAgICAgICAgICAgcHJvZmlsZXMgPSBbXQorICAgICAgICAgICAgZm9yIGkgaW4gc2VsZi5wcm9jZXNzX25hbWVzOgorICAgICAgICAgICAgICAgIGxvZ2ZpbGUgPSAicHJvZmlsZS1wYXJzZS0lcy5sb2ciICUgaQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGxvZ2ZpbGUpOgorICAgICAgICAgICAgICAgICAgICBwcm9maWxlcy5hcHBlbmQobG9nZmlsZSkKKworICAgICAgICAgICAgcG91dCA9ICJwcm9maWxlLXBhcnNlLmxvZy5wcm9jZXNzZWQiCisgICAgICAgICAgICBiYi51dGlscy5wcm9jZXNzX3Byb2ZpbGVsb2cocHJvZmlsZXMsIHBvdXQgPSBwb3V0KQorICAgICAgICAgICAgcHJpbnQoIlByb2Nlc3NlZCBwYXJzaW5nIHN0YXRpc3RpY3Mgc2F2ZWQgdG8gJXMiICUgKHBvdXQpKQorCisgICAgZGVmIGxvYWRfY2FjaGVkKHNlbGYpOgorICAgICAgICBmb3IgZmlsZW5hbWUsIGFwcGVuZHMgaW4gc2VsZi5mcm9tY2FjaGU6CisgICAgICAgICAgICBjYWNoZWQsIGluZm9zID0gc2VsZi5iYl9jYWNoZS5sb2FkKGZpbGVuYW1lLCBhcHBlbmRzLCBzZWxmLmNmZ2RhdGEpCisgICAgICAgICAgICB5aWVsZCBub3QgY2FjaGVkLCBpbmZvcworCisgICAgZGVmIHBhcnNlX2dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGlmIHNlbGYucGFyc2VkID49IHNlbGYudG9wYXJzZToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5yZXN1bHRfcXVldWUuZ2V0KHRpbWVvdXQ9MC4yNSkKKyAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhbHVlID0gcmVzdWx0WzFdCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgQmFzZUV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHZhbHVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgcmVzdWx0CisKKyAgICBkZWYgcGFyc2VfbmV4dChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgcGFyc2VkID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXJzZWQsIHJlc3VsdCA9IHNlbGYucmVzdWx0cy5uZXh0KCkKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICBzZWxmLnNodXRkb3duKCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBleGNlcHQgYmIuQkJIYW5kbGVkRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuZXJyb3IgKz0gMQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgcmVjaXBlOiAlcycgJSBleGMucmVjaXBlKQorICAgICAgICAgICAgc2VsZi5zaHV0ZG93bihjbGVhbj1GYWxzZSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBleGNlcHQgUGFyc2luZ0ZhaWx1cmUgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5lcnJvciArPSAxCisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBwYXJzZSAlczogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgIChleGMucmVjaXBlLCBiYi5leGNlcHRpb25zLnRvX3N0cmluZyhleGMucmVhbGV4Y2VwdGlvbikpKQorICAgICAgICAgICAgc2VsZi5zaHV0ZG93bihjbGVhbj1GYWxzZSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBleGNlcHQgYmIucGFyc2UuUGFyc2VFcnJvciBhcyBleGM6CisgICAgICAgICAgICBzZWxmLmVycm9yICs9IDEKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzdHIoZXhjKSkKKyAgICAgICAgICAgIHNlbGYuc2h1dGRvd24oY2xlYW49RmFsc2UpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IGJiLmRhdGFfc21hcnQuRXhwYW5zaW9uRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5lcnJvciArPSAxCisgICAgICAgICAgICBfLCB2YWx1ZSwgXyA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0V4cGFuc2lvbkVycm9yIGR1cmluZyBwYXJzaW5nICVzOiAlcycsIHZhbHVlLnJlY2lwZSwgc3RyKGV4YykpCisgICAgICAgICAgICBzZWxmLnNodXRkb3duKGNsZWFuPUZhbHNlKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBleGM6CisgICAgICAgICAgICBzZWxmLmVycm9yICs9IDEKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHBhcnNlICVzJywgZXhjLnJlY2lwZSkKKyAgICAgICAgICAgIHNlbGYuc2h1dGRvd24oY2xlYW49RmFsc2UpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLmVycm9yICs9IDEKKyAgICAgICAgICAgIGV0eXBlLCB2YWx1ZSwgdGIgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgaWYgaGFzYXR0cih2YWx1ZSwgInJlY2lwZSIpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHBhcnNlICVzJywgdmFsdWUucmVjaXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y19pbmZvPShldHlwZSwgdmFsdWUsIGV4Yy50cmFjZWJhY2spKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIE1vc3QgbGlrZWx5LCBhbiBleGNlcHRpb24gb2NjdXJyZWQgZHVyaW5nIHJhaXNpbmcgYW4gZXhjZXB0aW9uCisgICAgICAgICAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignRXhjZXB0aW9uIGR1cmluZyBwYXJzZTogJXMnICUgdHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKKyAgICAgICAgICAgIHNlbGYuc2h1dGRvd24oY2xlYW49RmFsc2UpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBzZWxmLmN1cnJlbnQgKz0gMQorICAgICAgICBzZWxmLnZpcnR1YWxzICs9IGxlbihyZXN1bHQpCisgICAgICAgIGlmIHBhcnNlZDoKKyAgICAgICAgICAgIHNlbGYucGFyc2VkICs9IDEKKyAgICAgICAgICAgIGlmIHNlbGYucGFyc2VkICUgc2VsZi5wcm9ncmVzc19jaHVuayA9PSAwOgorICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuUGFyc2VQcm9ncmVzcyhzZWxmLnBhcnNlZCwgc2VsZi50b3BhcnNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2ZnZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY2FjaGVkICs9IDEKKworICAgICAgICBmb3IgdmlydHVhbGZuLCBpbmZvX2FycmF5IGluIHJlc3VsdDoKKyAgICAgICAgICAgIGlmIGluZm9fYXJyYXlbMF0uc2tpcHBlZDoKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBwZWQgKz0gMQorICAgICAgICAgICAgICAgIHNlbGYuY29va2VyLnNraXBsaXN0W3ZpcnR1YWxmbl0gPSBTa2lwcGVkUGFja2FnZShpbmZvX2FycmF5WzBdKQorICAgICAgICAgICAgc2VsZi5iYl9jYWNoZS5hZGRfaW5mbyh2aXJ0dWFsZm4sIGluZm9fYXJyYXksIHNlbGYuY29va2VyLnJlY2lwZWNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZD1wYXJzZWQsIHdhdGNoZXIgPSBzZWxmLmNvb2tlci5hZGRfZmlsZXdhdGNoKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHJlcGFyc2Uoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICBpbmZvcyA9IHNlbGYuYmJfY2FjaGUucGFyc2UoZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoZmlsZW5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jZmdkYXRhLCBzZWxmLmNvb2tlci5jYWNoZXNfYXJyYXkpCisgICAgICAgIGZvciB2Zm4sIGluZm9fYXJyYXkgaW4gaW5mb3M6CisgICAgICAgICAgICBzZWxmLmNvb2tlci5yZWNpcGVjYWNoZS5hZGRfZnJvbV9yZWNpcGVpbmZvKHZmbiwgaW5mb19hcnJheSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29va2VyZGF0YS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29va2VyZGF0YS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTljMjgzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jb29rZXJkYXRhLnB5CkBAIC0wLDAgKzEsMzM2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgUGhpbCBCbHVuZGVsbAorIyBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA1IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA1ICAgICAgICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgICAgICAgIFJPQUQgR21iSAorIyBDb3B5cmlnaHQgKEMpIDIwMDYgICAgICAgIFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MsIHN5cworZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGJiCitmcm9tIGJiIGltcG9ydCBkYXRhCitpbXBvcnQgYmIucGFyc2UKKworbG9nZ2VyICAgICAgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZSIpCitwYXJzZWxvZyAgICA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlLlBhcnNpbmciKQorCitjbGFzcyBDb25maWdQYXJhbWV0ZXJzKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFyZ3Y9c3lzLmFyZ3YpOgorICAgICAgICBzZWxmLm9wdGlvbnMsIHRhcmdldHMgPSBzZWxmLnBhcnNlQ29tbWFuZExpbmUoYXJndikKKyAgICAgICAgc2VsZi5lbnZpcm9ubWVudCA9IHNlbGYucGFyc2VFbnZpcm9ubWVudCgpCisKKyAgICAgICAgc2VsZi5vcHRpb25zLnBrZ3NfdG9fYnVpbGQgPSB0YXJnZXRzIG9yIFtdCisKKyAgICAgICAgc2VsZi5vcHRpb25zLnRyYWNraW5nID0gRmFsc2UKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLm9wdGlvbnMsICJzaG93X2Vudmlyb25tZW50IikgYW5kIHNlbGYub3B0aW9ucy5zaG93X2Vudmlyb25tZW50OgorICAgICAgICAgICAgc2VsZi5vcHRpb25zLnRyYWNraW5nID0gVHJ1ZQorCisgICAgICAgIGZvciBrZXksIHZhbCBpbiBzZWxmLm9wdGlvbnMuX19kaWN0X18uaXRlbXMoKToKKyAgICAgICAgICAgIHNldGF0dHIoc2VsZiwga2V5LCB2YWwpCisKKyAgICBkZWYgcGFyc2VDb21tYW5kTGluZShzZWxmLCBhcmd2PXN5cy5hcmd2KToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDYWxsZXIgbXVzdCBpbXBsZW1lbnQgY29tbWFuZGxpbmUgb3B0aW9uIHBhcnNpbmciKQorCisgICAgZGVmIHBhcnNlRW52aXJvbm1lbnQoc2VsZik6CisgICAgICAgIHJldHVybiBvcy5lbnZpcm9uLmNvcHkoKQorCisgICAgZGVmIHVwZGF0ZUZyb21TZXJ2ZXIoc2VsZiwgc2VydmVyKToKKyAgICAgICAgaWYgbm90IHNlbGYub3B0aW9ucy5jbWQ6CisgICAgICAgICAgICBkZWZhdWx0dGFzaywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCX0RFRkFVTFRfVEFTSyJdKQorICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmFibGUgdG8gZ2V0IHRoZSB2YWx1ZSBvZiBCQl9ERUZBVUxUX1RBU0sgZnJvbSB0aGUgc2VydmVyOiAlcyIgJSBlcnJvcikKKyAgICAgICAgICAgIHNlbGYub3B0aW9ucy5jbWQgPSBkZWZhdWx0dGFzayBvciAiYnVpbGQiCisgICAgICAgIF8sIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJzZXRDb25maWciLCAiY21kIiwgc2VsZi5vcHRpb25zLmNtZF0pCisgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmFibGUgdG8gc2V0IGNvbmZpZ3VyYXRpb24gb3B0aW9uICdjbWQnIG9uIHRoZSBzZXJ2ZXI6ICVzIiAlIGVycm9yKQorCisgICAgICAgIGlmIG5vdCBzZWxmLm9wdGlvbnMucGtnc190b19idWlsZDoKKyAgICAgICAgICAgIGJicGtncywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCUEtHUyJdKQorICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmFibGUgdG8gZ2V0IHRoZSB2YWx1ZSBvZiBCQlBLR1MgZnJvbSB0aGUgc2VydmVyOiAlcyIgJSBlcnJvcikKKyAgICAgICAgICAgIGlmIGJicGtnczoKKyAgICAgICAgICAgICAgICBzZWxmLm9wdGlvbnMucGtnc190b19idWlsZC5leHRlbmQoYmJwa2dzLnNwbGl0KCkpCisKKyAgICBkZWYgdXBkYXRlVG9TZXJ2ZXIoc2VsZiwgc2VydmVyLCBlbnZpcm9ubWVudCk6CisgICAgICAgIG9wdGlvbnMgPSB7fQorICAgICAgICBmb3IgbyBpbiBbImFib3J0IiwgInRyeWFsdGNvbmZpZ3MiLCAiZm9yY2UiLCAiaW52YWxpZGF0ZV9zdGFtcCIsIAorICAgICAgICAgICAgICAgICAgInZlcmJvc2UiLCAiZGVidWciLCAiZHJ5X3J1biIsICJkdW1wX3NpZ25hdHVyZXMiLCAKKyAgICAgICAgICAgICAgICAgICJkZWJ1Z19kb21haW5zIiwgImV4dHJhX2Fzc3VtZV9wcm92aWRlZCIsICJwcm9maWxlIiwKKyAgICAgICAgICAgICAgICAgICJwcmVmaWxlIiwgInBvc3RmaWxlIl06CisgICAgICAgICAgICBvcHRpb25zW29dID0gZ2V0YXR0cihzZWxmLm9wdGlvbnMsIG8pCisKKyAgICAgICAgcmV0LCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsidXBkYXRlQ29uZmlnIiwgb3B0aW9ucywgZW52aXJvbm1lbnRdKQorICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVuYWJsZSB0byB1cGRhdGUgdGhlIHNlcnZlciBjb25maWd1cmF0aW9uIHdpdGggbG9jYWwgcGFyYW1ldGVyczogJXMiICUgZXJyb3IpCisKKyAgICBkZWYgcGFyc2VBY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFBhcnNlIGFueSBjb21tYW5kbGluZSBpbnRvIGFjdGlvbnMKKyAgICAgICAgYWN0aW9uID0geydhY3Rpb24nOk5vbmUsICdtc2cnOk5vbmV9CisgICAgICAgIGlmIHNlbGYub3B0aW9ucy5zaG93X2Vudmlyb25tZW50OgorICAgICAgICAgICAgaWYgJ3dvcmxkJyBpbiBzZWxmLm9wdGlvbnMucGtnc190b19idWlsZDoKKyAgICAgICAgICAgICAgICBhY3Rpb25bJ21zZyddID0gIid3b3JsZCcgaXMgbm90IGEgdmFsaWQgdGFyZ2V0IGZvciAtLWVudmlyb25tZW50LiIKKyAgICAgICAgICAgIGVsaWYgJ3VuaXZlcnNlJyBpbiBzZWxmLm9wdGlvbnMucGtnc190b19idWlsZDoKKyAgICAgICAgICAgICAgICBhY3Rpb25bJ21zZyddID0gIid1bml2ZXJzZScgaXMgbm90IGEgdmFsaWQgdGFyZ2V0IGZvciAtLWVudmlyb25tZW50LiIKKyAgICAgICAgICAgIGVsaWYgbGVuKHNlbGYub3B0aW9ucy5wa2dzX3RvX2J1aWxkKSA+IDE6CisgICAgICAgICAgICAgICAgYWN0aW9uWydtc2cnXSA9ICJPbmx5IG9uZSB0YXJnZXQgY2FuIGJlIHVzZWQgd2l0aCB0aGUgLS1lbnZpcm9ubWVudCBvcHRpb24uIgorICAgICAgICAgICAgZWxpZiBzZWxmLm9wdGlvbnMuYnVpbGRmaWxlIGFuZCBsZW4oc2VsZi5vcHRpb25zLnBrZ3NfdG9fYnVpbGQpID4gMDoKKyAgICAgICAgICAgICAgICBhY3Rpb25bJ21zZyddID0gIk5vIHRhcmdldCBzaG91bGQgYmUgdXNlZCB3aXRoIHRoZSAtLWVudmlyb25tZW50IGFuZCAtLWJ1aWxkZmlsZSBvcHRpb25zLiIKKyAgICAgICAgICAgIGVsaWYgbGVuKHNlbGYub3B0aW9ucy5wa2dzX3RvX2J1aWxkKSA+IDA6CisgICAgICAgICAgICAgICAgYWN0aW9uWydhY3Rpb24nXSA9IFsic2hvd0Vudmlyb25tZW50VGFyZ2V0Iiwgc2VsZi5vcHRpb25zLnBrZ3NfdG9fYnVpbGRdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFjdGlvblsnYWN0aW9uJ10gPSBbInNob3dFbnZpcm9ubWVudCIsIHNlbGYub3B0aW9ucy5idWlsZGZpbGVdCisgICAgICAgIGVsaWYgc2VsZi5vcHRpb25zLmJ1aWxkZmlsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGFjdGlvblsnYWN0aW9uJ10gPSBbImJ1aWxkRmlsZSIsIHNlbGYub3B0aW9ucy5idWlsZGZpbGUsIHNlbGYub3B0aW9ucy5jbWRdCisgICAgICAgIGVsaWYgc2VsZi5vcHRpb25zLnJldmlzaW9uc19jaGFuZ2VkOgorICAgICAgICAgICAgYWN0aW9uWydhY3Rpb24nXSA9IFsiY29tcGFyZVJldmlzaW9ucyJdCisgICAgICAgIGVsaWYgc2VsZi5vcHRpb25zLnNob3dfdmVyc2lvbnM6CisgICAgICAgICAgICBhY3Rpb25bJ2FjdGlvbiddID0gWyJzaG93VmVyc2lvbnMiXQorICAgICAgICBlbGlmIHNlbGYub3B0aW9ucy5wYXJzZV9vbmx5OgorICAgICAgICAgICAgYWN0aW9uWydhY3Rpb24nXSA9IFsicGFyc2VGaWxlcyJdCisgICAgICAgIGVsaWYgc2VsZi5vcHRpb25zLmRvdF9ncmFwaDoKKyAgICAgICAgICAgIGlmIHNlbGYub3B0aW9ucy5wa2dzX3RvX2J1aWxkOgorICAgICAgICAgICAgICAgIGFjdGlvblsnYWN0aW9uJ10gPSBbImdlbmVyYXRlRG90R3JhcGgiLCBzZWxmLm9wdGlvbnMucGtnc190b19idWlsZCwgc2VsZi5vcHRpb25zLmNtZF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYWN0aW9uWydtc2cnXSA9ICJQbGVhc2Ugc3BlY2lmeSBhIHBhY2thZ2UgbmFtZSBmb3IgZGVwZW5kZW5jeSBncmFwaCBnZW5lcmF0aW9uLiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNlbGYub3B0aW9ucy5wa2dzX3RvX2J1aWxkOgorICAgICAgICAgICAgICAgIGFjdGlvblsnYWN0aW9uJ10gPSBbImJ1aWxkVGFyZ2V0cyIsIHNlbGYub3B0aW9ucy5wa2dzX3RvX2J1aWxkLCBzZWxmLm9wdGlvbnMuY21kXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjYWN0aW9uWydtc2cnXSA9ICJOb3RoaW5nIHRvIGRvLiAgVXNlICdiaXRiYWtlIHdvcmxkJyB0byBidWlsZCBldmVyeXRoaW5nLCBvciBydW4gJ2JpdGJha2UgLS1oZWxwJyBmb3IgdXNhZ2UgaW5mb3JtYXRpb24uIgorICAgICAgICAgICAgICAgIGFjdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5vcHRpb25zLmluaXRpYWxhY3Rpb24gPSBhY3Rpb24KKyAgICAgICAgcmV0dXJuIGFjdGlvbgorCitjbGFzcyBDb29rZXJDb25maWd1cmF0aW9uKG9iamVjdCk6CisgICAgIiIiCisgICAgTWFuYWdlcyBidWlsZCBvcHRpb25zIGFuZCBjb25maWd1cmF0aW9ucyBmb3Igb25lIHJ1bgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmRlYnVnX2RvbWFpbnMgPSBbXQorICAgICAgICBzZWxmLmV4dHJhX2Fzc3VtZV9wcm92aWRlZCA9IFtdCisgICAgICAgIHNlbGYucHJlZmlsZSA9IFtdCisgICAgICAgIHNlbGYucG9zdGZpbGUgPSBbXQorICAgICAgICBzZWxmLmRlYnVnID0gMAorICAgICAgICBzZWxmLmNtZCA9IE5vbmUKKyAgICAgICAgc2VsZi5hYm9ydCA9IFRydWUKKyAgICAgICAgc2VsZi5mb3JjZSA9IEZhbHNlCisgICAgICAgIHNlbGYucHJvZmlsZSA9IEZhbHNlCisgICAgICAgIHNlbGYubm9zZXRzY2VuZSA9IEZhbHNlCisgICAgICAgIHNlbGYuaW52YWxpZGF0ZV9zdGFtcCA9IEZhbHNlCisgICAgICAgIHNlbGYuZHVtcF9zaWduYXR1cmVzID0gW10KKyAgICAgICAgc2VsZi5kcnlfcnVuID0gRmFsc2UKKyAgICAgICAgc2VsZi50cmFja2luZyA9IEZhbHNlCisgICAgICAgIHNlbGYuaW50ZXJmYWNlID0gW10KKyAgICAgICAgc2VsZi53cml0ZWV2ZW50bG9nID0gRmFsc2UKKworICAgICAgICBzZWxmLmVudiA9IHt9CisKKyAgICBkZWYgc2V0Q29uZmlnUGFyYW1ldGVycyhzZWxmLCBwYXJhbWV0ZXJzKToKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9fZGljdF9fLmtleXMoKToKKyAgICAgICAgICAgIGlmIGtleSBpbiBwYXJhbWV0ZXJzLm9wdGlvbnMuX19kaWN0X186CisgICAgICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBrZXksIHBhcmFtZXRlcnMub3B0aW9ucy5fX2RpY3RfX1trZXldKQorICAgICAgICBzZWxmLmVudiA9IHBhcmFtZXRlcnMuZW52aXJvbm1lbnQuY29weSgpCisgICAgICAgIHNlbGYudHJhY2tpbmcgPSBwYXJhbWV0ZXJzLnRyYWNraW5nCisKKyAgICBkZWYgc2V0U2VydmVyUmVnSWRsZUNhbGxiYWNrKHNlbGYsIHNyY2IpOgorICAgICAgICBzZWxmLnNlcnZlcl9yZWdpc3Rlcl9pZGxlY2FsbGJhY2sgPSBzcmNiCisKKyAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICBzdGF0ZSA9IHt9CisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5fX2RpY3RfXy5rZXlzKCk6CisgICAgICAgICAgICBpZiBrZXkgPT0gInNlcnZlcl9yZWdpc3Rlcl9pZGxlY2FsbGJhY2siOgorICAgICAgICAgICAgICAgIHN0YXRlW2tleV0gPSBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN0YXRlW2tleV0gPSBnZXRhdHRyKHNlbGYsIGtleSkKKyAgICAgICAgcmV0dXJuIHN0YXRlCisKKyAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsc3RhdGUpOgorICAgICAgICBmb3IgayBpbiBzdGF0ZToKKyAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgaywgc3RhdGVba10pIAorCisKK2RlZiBjYXRjaF9wYXJzZV9lcnJvcihmdW5jKToKKyAgICAiIiJFeGNlcHRpb24gaGFuZGxpbmcgYml0cyBmb3Igb3VyIHBhcnNpbmciIiIKKyAgICBAd3JhcHMoZnVuYykKKyAgICBkZWYgd3JhcHBlZChmbiwgKmFyZ3MpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gZnVuYyhmbiwgKmFyZ3MpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgICAgIHBhcnNlbG9nLmNyaXRpY2FsKHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisgICAgICAgICAgICBwYXJzZWxvZy5jcml0aWNhbCgiVW5hYmxlIHRvIHBhcnNlICVzOiAlcyIgJSAoZm4sIGV4YykpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBleGNlcHQgKGJiLnBhcnNlLlBhcnNlRXJyb3IsIGJiLmRhdGFfc21hcnQuRXhwYW5zaW9uRXJyb3IpIGFzIGV4YzoKKyAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKworICAgICAgICAgICAgYmJkaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pICsgb3Muc2VwCisgICAgICAgICAgICBleGNfY2xhc3MsIGV4YywgdGIgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgZm9yIHRiIGluIGl0ZXIobGFtYmRhOiB0Yi50Yl9uZXh0LCBOb25lKToKKyAgICAgICAgICAgICAgICAjIFNraXAgZnJhbWVzIGluIGJpdGJha2UgaXRzZWxmLCB3ZSBvbmx5IHdhbnQgdGhlIG1ldGFkYXRhCisgICAgICAgICAgICAgICAgZm4sIF8sIF8sIF8gPSB0cmFjZWJhY2suZXh0cmFjdF90Yih0YiwgMSlbMF0KKyAgICAgICAgICAgICAgICBpZiBub3QgZm4uc3RhcnRzd2l0aChiYmRpcik6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBwYXJzZWxvZy5jcml0aWNhbCgiVW5hYmxlIHRvIHBhcnNlICVzIiwgZm4sIGV4Y19pbmZvPShleGNfY2xhc3MsIGV4YywgdGIpKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICByZXR1cm4gd3JhcHBlZAorCitAY2F0Y2hfcGFyc2VfZXJyb3IKK2RlZiBwYXJzZV9jb25maWdfZmlsZShmbiwgZGF0YSwgaW5jbHVkZT1UcnVlKToKKyAgICByZXR1cm4gYmIucGFyc2UuaGFuZGxlKGZuLCBkYXRhLCBpbmNsdWRlKQorCitAY2F0Y2hfcGFyc2VfZXJyb3IKK2RlZiBfaW5oZXJpdChiYmNsYXNzLCBkYXRhKToKKyAgICBiYi5wYXJzZS5CQkhhbmRsZXIuaW5oZXJpdChiYmNsYXNzLCAiY29uZmlndXJhdGlvbiBJTkhFUklUcyIsIDAsIGRhdGEpCisgICAgcmV0dXJuIGRhdGEKKworZGVmIGZpbmRDb25maWdGaWxlKGNvbmZpZ2ZpbGUsIGRhdGEpOgorICAgIHNlYXJjaCA9IFtdCisgICAgYmJwYXRoID0gZGF0YS5nZXRWYXIoIkJCUEFUSCIsIFRydWUpCisgICAgaWYgYmJwYXRoOgorICAgICAgICBmb3IgaSBpbiBiYnBhdGguc3BsaXQoIjoiKToKKyAgICAgICAgICAgIHNlYXJjaC5hcHBlbmQob3MucGF0aC5qb2luKGksICJjb25mIiwgY29uZmlnZmlsZSkpCisgICAgcGF0aCA9IG9zLmdldGN3ZCgpCisgICAgd2hpbGUgcGF0aCAhPSAiLyI6CisgICAgICAgIHNlYXJjaC5hcHBlbmQob3MucGF0aC5qb2luKHBhdGgsICJjb25mIiwgY29uZmlnZmlsZSkpCisgICAgICAgIHBhdGgsIF8gPSBvcy5wYXRoLnNwbGl0KHBhdGgpCisKKyAgICBmb3IgaSBpbiBzZWFyY2g6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGkpOgorICAgICAgICAgICAgcmV0dXJuIGkKKworICAgIHJldHVybiBOb25lCisKK2NsYXNzIENvb2tlckRhdGFCdWlsZGVyKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29va2VyY2ZnLCB3b3JrZXIgPSBGYWxzZSk6CisKKyAgICAgICAgc2VsZi5wcmVmaWxlcyA9IGNvb2tlcmNmZy5wcmVmaWxlCisgICAgICAgIHNlbGYucG9zdGZpbGVzID0gY29va2VyY2ZnLnBvc3RmaWxlCisgICAgICAgIHNlbGYudHJhY2tpbmcgPSBjb29rZXJjZmcudHJhY2tpbmcKKworICAgICAgICBiYi51dGlscy5zZXRfY29udGV4dChiYi51dGlscy5jbGVhbl9jb250ZXh0KCkpCisgICAgICAgIGJiLmV2ZW50LnNldF9jbGFzc19oYW5kbGVycyhiYi5ldmVudC5jbGVhbl9jbGFzc19oYW5kbGVycygpKQorICAgICAgICBzZWxmLmRhdGEgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBpZiBzZWxmLnRyYWNraW5nOgorICAgICAgICAgICAgc2VsZi5kYXRhLmVuYWJsZVRyYWNraW5nKCkKKworICAgICAgICAjIEtlZXAgYSBkYXRhc3RvcmUgb2YgdGhlIGluaXRpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCB0aGVpcgorICAgICAgICAjIHZhbHVlcyBmcm9tIHdoZW4gQml0QmFrZSB3YXMgbGF1bmNoZWQgdG8gZW5hYmxlIGNoaWxkIHByb2Nlc3NlcworICAgICAgICAjIHRvIHVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2hpY2ggaGF2ZSBiZWVuIGNsZWFuZWQgZnJvbSB0aGUKKyAgICAgICAgIyBCaXRCYWtlIHByb2Nlc3NlcyBlbnYKKyAgICAgICAgc2VsZi5zYXZlZGVudiA9IGJiLmRhdGEuaW5pdCgpCisgICAgICAgIGZvciBrIGluIGNvb2tlcmNmZy5lbnY6CisgICAgICAgICAgICBzZWxmLnNhdmVkZW52LnNldFZhcihrLCBjb29rZXJjZmcuZW52W2tdKQorCisgICAgICAgIGZpbHRlcmVkX2tleXMgPSBiYi51dGlscy5hcHByb3ZlZF92YXJpYWJsZXMoKQorICAgICAgICBiYi5kYXRhLmluaGVyaXRGcm9tT1Moc2VsZi5kYXRhLCBzZWxmLnNhdmVkZW52LCBmaWx0ZXJlZF9rZXlzKQorICAgICAgICBzZWxmLmRhdGEuc2V0VmFyKCJCQl9PUklHRU5WIiwgc2VsZi5zYXZlZGVudikKKyAgICAgICAgCisgICAgICAgIGlmIHdvcmtlcjoKKyAgICAgICAgICAgIHNlbGYuZGF0YS5zZXRWYXIoIkJCX1dPUktFUkNPTlRFWFQiLCAiMSIpCisKKyAgICBkZWYgcGFyc2VCYXNlQ29uZmlndXJhdGlvbihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5wYXJzZUNvbmZpZ3VyYXRpb25GaWxlcyhzZWxmLnByZWZpbGVzLCBzZWxmLnBvc3RmaWxlcykKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgcmFpc2UgYmIuQkJIYW5kbGVkRXhjZXB0aW9uCisgICAgICAgIGV4Y2VwdCBiYi5kYXRhX3NtYXJ0LkV4cGFuc2lvbkVycm9yIGFzIGU6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGUpKQorICAgICAgICAgICAgcmFpc2UgYmIuQkJIYW5kbGVkRXhjZXB0aW9uCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCJFcnJvciBwYXJzaW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMiKQorICAgICAgICAgICAgcmFpc2UgYmIuQkJIYW5kbGVkRXhjZXB0aW9uCisKKyAgICBkZWYgX2ZpbmRMYXllckNvbmYoc2VsZiwgZGF0YSk6CisgICAgICAgIHJldHVybiBmaW5kQ29uZmlnRmlsZSgiYmJsYXllcnMuY29uZiIsIGRhdGEpCisKKyAgICBkZWYgcGFyc2VDb25maWd1cmF0aW9uRmlsZXMoc2VsZiwgcHJlZmlsZXMsIHBvc3RmaWxlcyk6CisgICAgICAgIGRhdGEgPSBzZWxmLmRhdGEKKyAgICAgICAgYmIucGFyc2UuaW5pdF9wYXJzZXIoZGF0YSkKKworICAgICAgICAjIFBhcnNlIGZpbGVzIGZvciBsb2FkaW5nICpiZWZvcmUqIGJpdGJha2UuY29uZiBhbmQgYW55IGluY2x1ZGVzCisgICAgICAgIGZvciBmIGluIHByZWZpbGVzOgorICAgICAgICAgICAgZGF0YSA9IHBhcnNlX2NvbmZpZ19maWxlKGYsIGRhdGEpCisKKyAgICAgICAgbGF5ZXJjb25mID0gc2VsZi5fZmluZExheWVyQ29uZihkYXRhKQorICAgICAgICBpZiBsYXllcmNvbmY6CisgICAgICAgICAgICBwYXJzZWxvZy5kZWJ1ZygyLCAiRm91bmQgYmJsYXllcnMuY29uZiAoJXMpIiwgbGF5ZXJjb25mKQorICAgICAgICAgICAgIyBCeSBkZWZpbml0aW9uIGJibGF5ZXJzLmNvbmYgaXMgaW4gY29uZi8gb2YgVE9QRElSLgorICAgICAgICAgICAgIyBXZSBtYXkgaGF2ZSBiZWVuIGNhbGxlZCB3aXRoIGN3ZCBzb21ld2hlcmUgZWxzZSBzbyByZXNldCBUT1BESVIKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyKCJUT1BESVIiLCBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKGxheWVyY29uZikpKQorICAgICAgICAgICAgZGF0YSA9IHBhcnNlX2NvbmZpZ19maWxlKGxheWVyY29uZiwgZGF0YSkKKworICAgICAgICAgICAgbGF5ZXJzID0gKGRhdGEuZ2V0VmFyKCdCQkxBWUVSUycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisKKyAgICAgICAgICAgIGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZGF0YSkKKyAgICAgICAgICAgIGFwcHJvdmVkID0gYmIudXRpbHMuYXBwcm92ZWRfdmFyaWFibGVzKCkKKyAgICAgICAgICAgIGZvciBsYXllciBpbiBsYXllcnM6CisgICAgICAgICAgICAgICAgcGFyc2Vsb2cuZGVidWcoMiwgIkFkZGluZyBsYXllciAlcyIsIGxheWVyKQorICAgICAgICAgICAgICAgIGlmICdIT01FJyBpbiBhcHByb3ZlZCBhbmQgJ34nIGluIGxheWVyOgorICAgICAgICAgICAgICAgICAgICBsYXllciA9IG9zLnBhdGguZXhwYW5kdXNlcihsYXllcikKKyAgICAgICAgICAgICAgICBkYXRhLnNldFZhcignTEFZRVJESVInLCBsYXllcikKKyAgICAgICAgICAgICAgICBkYXRhID0gcGFyc2VfY29uZmlnX2ZpbGUob3MucGF0aC5qb2luKGxheWVyLCAiY29uZiIsICJsYXllci5jb25mIiksIGRhdGEpCisgICAgICAgICAgICAgICAgZGF0YS5leHBhbmRWYXJyZWYoJ0xBWUVSRElSJykKKworICAgICAgICAgICAgZGF0YS5kZWxWYXIoJ0xBWUVSRElSJykKKworICAgICAgICBpZiBub3QgZGF0YS5nZXRWYXIoIkJCUEFUSCIsIFRydWUpOgorICAgICAgICAgICAgbXNnID0gIlRoZSBCQlBBVEggdmFyaWFibGUgaXMgbm90IHNldCIKKyAgICAgICAgICAgIGlmIG5vdCBsYXllcmNvbmY6CisgICAgICAgICAgICAgICAgbXNnICs9ICgiIGFuZCBiaXRiYWtlIGRpZCBub3QgZmluZCBhIGNvbmYvYmJsYXllcnMuY29uZiBmaWxlIGluIgorICAgICAgICAgICAgICAgICAgICAgICAgIiB0aGUgZXhwZWN0ZWQgbG9jYXRpb24uXG5NYXliZSB5b3UgYWNjaWRlbnRhbGx5IgorICAgICAgICAgICAgICAgICAgICAgICAgIiBpbnZva2VkIGJpdGJha2UgZnJvbSB0aGUgd3JvbmcgZGlyZWN0b3J5PyIpCisgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KG1zZykKKworICAgICAgICBkYXRhID0gcGFyc2VfY29uZmlnX2ZpbGUob3MucGF0aC5qb2luKCJjb25mIiwgImJpdGJha2UuY29uZiIpLCBkYXRhKQorCisgICAgICAgICMgUGFyc2UgZmlsZXMgZm9yIGxvYWRpbmcgKmFmdGVyKiBiaXRiYWtlLmNvbmYgYW5kIGFueSBpbmNsdWRlcworICAgICAgICBmb3IgcCBpbiBwb3N0ZmlsZXM6CisgICAgICAgICAgICBkYXRhID0gcGFyc2VfY29uZmlnX2ZpbGUocCwgZGF0YSkKKworICAgICAgICAjIEhhbmRsZSBhbnkgSU5IRVJJVHMgYW5kIGluaGVyaXQgdGhlIGJhc2UgY2xhc3MKKyAgICAgICAgYmJjbGFzc2VzICA9IFsiYmFzZSJdICsgKGRhdGEuZ2V0VmFyKCdJTkhFUklUJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgZm9yIGJiY2xhc3MgaW4gYmJjbGFzc2VzOgorICAgICAgICAgICAgZGF0YSA9IF9pbmhlcml0KGJiY2xhc3MsIGRhdGEpCisKKyAgICAgICAgIyBOb21hbGx5IHdlIG9ubHkgcmVnaXN0ZXIgZXZlbnQgaGFuZGxlcnMgYXQgdGhlIGVuZCBvZiBwYXJzaW5nIC5iYiBmaWxlcworICAgICAgICAjIFdlIHJlZ2lzdGVyIGFueSBoYW5kbGVycyB3ZSd2ZSBmb3VuZCBzbyBmYXIgaGVyZS4uLgorICAgICAgICBmb3IgdmFyIGluIGRhdGEuZ2V0VmFyKCdfX0JCSEFORExFUlMnLCBGYWxzZSkgb3IgW106CisgICAgICAgICAgICBiYi5ldmVudC5yZWdpc3Rlcih2YXIsIGRhdGEuZ2V0VmFyKHZhciwgRmFsc2UpLCAgKGRhdGEuZ2V0VmFyRmxhZyh2YXIsICJldmVudG1hc2siLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKworICAgICAgICBpZiBkYXRhLmdldFZhcigiQkJfV09SS0VSQ09OVEVYVCIsIEZhbHNlKSBpcyBOb25lOgorICAgICAgICAgICAgYmIuZmV0Y2guZmV0Y2hlcl9pbml0KGRhdGEpCisgICAgICAgIGJiLmNvZGVwYXJzZXIucGFyc2VyX2NhY2hlX2luaXQoZGF0YSkKKyAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Db25maWdQYXJzZWQoKSwgZGF0YSkKKworICAgICAgICBpZiBkYXRhLmdldFZhcigiQkJfSU5WQUxJRENPTkYiLCBGYWxzZSkgaXMgVHJ1ZToKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyKCJCQl9JTlZBTElEQ09ORiIsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5wYXJzZUNvbmZpZ3VyYXRpb25GaWxlcyhzZWxmLnByZWZpbGVzLCBzZWxmLnBvc3RmaWxlcykKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGJiLnBhcnNlLmluaXRfcGFyc2VyKGRhdGEpCisgICAgICAgIGRhdGEuc2V0VmFyKCdCQklOQ0xVREVEJyxiYi5wYXJzZS5nZXRfZmlsZV9kZXBlbmRzKGRhdGEpKQorICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCisgICAgICAgIHNlbGYuZGF0YV9oYXNoID0gZGF0YS5nZXRfaGFzaCgpCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2RhZW1vbml6ZS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZGFlbW9uaXplLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NmE2MTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2RhZW1vbml6ZS5weQpAQCAtMCwwICsxLDE5MyBAQAorIiIiCitQeXRob24gRGFlbW9uaXppbmcgaGVscGVyCisKK0NvbmZpZ3VyYWJsZSBkYWVtb24gYmVoYXZpb3JzOgorCisgICAgMS4pIFRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHNldCB0byB0aGUgIi8iIGRpcmVjdG9yeS4KKyAgICAyLikgVGhlIGN1cnJlbnQgZmlsZSBjcmVhdGlvbiBtb2RlIG1hc2sgc2V0IHRvIDAuCisgICAgMy4pIENsb3NlIGFsbCBvcGVuIGZpbGVzICgxMDI0KS4gCisgICAgNC4pIFJlZGlyZWN0IHN0YW5kYXJkIEkvTyBzdHJlYW1zIHRvICIvZGV2L251bGwiLgorCitBIGZhaWxlZCBjYWxsIHRvIGZvcmsoKSBub3cgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKworUmVmZXJlbmNlczoKKyAgICAxKSBBZHZhbmNlZCBQcm9ncmFtbWluZyBpbiB0aGUgVW5peCBFbnZpcm9ubWVudDogVy4gUmljaGFyZCBTdGV2ZW5zCisJaHR0cDovL3d3dy5hcHVlYm9vay5jb20vYXB1ZTNlLmh0bWwKKyAgICAyKSBUaGUgTGludXggUHJvZ3JhbW1pbmcgSW50ZXJmYWNlOiBNaWNoYWVsIEtlcnJpc2sKKwlodHRwOi8vbWFuNy5vcmcvdGxwaS9pbmRleC5odG1sCisgICAgMykgVW5peCBQcm9ncmFtbWluZyBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9uczoKKwlodHRwOi8vd3d3LmZhcXMub3JnL2ZhcXMvdW5peC1mYXEvcHJvZ3JhbW1lci9mYXEvCisKK01vZGlmaWVkIHRvIGFsbG93IGEgZnVuY3Rpb24gdG8gYmUgZGFlbW9uaXplZCBhbmQgcmV0dXJuIGZvciAKK2JpdGJha2UgdXNlIGJ5IFJpY2hhcmQgUHVyZGllCisiIiIKKworX19hdXRob3JfXyA9ICJDaGFkIEouIFNjaHJvZWRlciIKK19fY29weXJpZ2h0X18gPSAiQ29weXJpZ2h0IChDKSAyMDA1IENoYWQgSi4gU2Nocm9lZGVyIgorX192ZXJzaW9uX18gPSAiMC4yIgorCisjIFN0YW5kYXJkIFB5dGhvbiBtb2R1bGVzLgoraW1wb3J0IG9zICAgICAgICAgICAgICAgICAgICAjIE1pc2NlbGxhbmVvdXMgT1MgaW50ZXJmYWNlcy4KK2ltcG9ydCBzeXMgICAgICAgICAgICAgICAgICAgIyBTeXN0ZW0tc3BlY2lmaWMgcGFyYW1ldGVycyBhbmQgZnVuY3Rpb25zLgorCisjIERlZmF1bHQgZGFlbW9uIHBhcmFtZXRlcnMuCisjIEZpbGUgbW9kZSBjcmVhdGlvbiBtYXNrIG9mIHRoZSBkYWVtb24uCisjIEZvciBCaXRCYWtlJ3MgY2hpbGRyZW4sIHdlIGRvIHdhbnQgdG8gaW5oZXJpdCB0aGUgcGFyZW50IHVtYXNrLgorVU1BU0sgPSBOb25lCisKKyMgRGVmYXVsdCBtYXhpbXVtIGZvciB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBmaWxlIGRlc2NyaXB0b3JzLgorTUFYRkQgPSAxMDI0CisKKyMgVGhlIHN0YW5kYXJkIEkvTyBmaWxlIGRlc2NyaXB0b3JzIGFyZSByZWRpcmVjdGVkIHRvIC9kZXYvbnVsbCBieSBkZWZhdWx0LgoraWYgKGhhc2F0dHIob3MsICJkZXZudWxsIikpOgorICAgIFJFRElSRUNUX1RPID0gb3MuZGV2bnVsbAorZWxzZToKKyAgICBSRURJUkVDVF9UTyA9ICIvZGV2L251bGwiCisKK2RlZiBjcmVhdGVEYWVtb24oZnVuY3Rpb24sIGxvZ2ZpbGUpOgorICAgICIiIgorICAgIERldGFjaCBhIHByb2Nlc3MgZnJvbSB0aGUgY29udHJvbGxpbmcgdGVybWluYWwgYW5kIHJ1biBpdCBpbiB0aGUKKyAgICBiYWNrZ3JvdW5kIGFzIGEgZGFlbW9uLCByZXR1cm5pbmcgY29udHJvbCB0byB0aGUgY2FsbGVyLgorICAgICIiIgorCisgICAgdHJ5OgorICAgICAgICAjIEZvcmsgYSBjaGlsZCBwcm9jZXNzIHNvIHRoZSBwYXJlbnQgY2FuIGV4aXQuICBUaGlzIHJldHVybnMgY29udHJvbCB0bworICAgICAgICAjIHRoZSBjb21tYW5kLWxpbmUgb3Igc2hlbGwuICBJdCBhbHNvIGd1YXJhbnRlZXMgdGhhdCB0aGUgY2hpbGQgd2lsbCBub3QKKyAgICAgICAgIyBiZSBhIHByb2Nlc3MgZ3JvdXAgbGVhZGVyLCBzaW5jZSB0aGUgY2hpbGQgcmVjZWl2ZXMgYSBuZXcgcHJvY2VzcyBJRAorICAgICAgICAjIGFuZCBpbmhlcml0cyB0aGUgcGFyZW50J3MgcHJvY2VzcyBncm91cCBJRC4gIFRoaXMgc3RlcCBpcyByZXF1aXJlZAorICAgICAgICAjIHRvIGluc3VyZSB0aGF0IHRoZSBuZXh0IGNhbGwgdG8gb3Muc2V0c2lkIGlzIHN1Y2Nlc3NmdWwuCisgICAgICAgIHBpZCA9IG9zLmZvcmsoKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiJXMgWyVkXSIgJSAoZS5zdHJlcnJvciwgZS5lcnJubykpCisKKyAgICBpZiAocGlkID09IDApOiAgICAgICMgVGhlIGZpcnN0IGNoaWxkLgorICAgICAgICAjIFRvIGJlY29tZSB0aGUgc2Vzc2lvbiBsZWFkZXIgb2YgdGhpcyBuZXcgc2Vzc2lvbiBhbmQgdGhlIHByb2Nlc3MgZ3JvdXAKKyAgICAgICAgIyBsZWFkZXIgb2YgdGhlIG5ldyBwcm9jZXNzIGdyb3VwLCB3ZSBjYWxsIG9zLnNldHNpZCgpLiAgVGhlIHByb2Nlc3MgaXMKKyAgICAgICAgIyBhbHNvIGd1YXJhbnRlZWQgbm90IHRvIGhhdmUgYSBjb250cm9sbGluZyB0ZXJtaW5hbC4KKyAgICAgICAgb3Muc2V0c2lkKCkKKworICAgICAgICAjIElzIGlnbm9yaW5nIFNJR0hVUCBuZWNlc3Nhcnk/CisgICAgICAgICMKKyAgICAgICAgIyBJdCdzIG9mdGVuIHN1Z2dlc3RlZCB0aGF0IHRoZSBTSUdIVVAgc2lnbmFsIHNob3VsZCBiZSBpZ25vcmVkIGJlZm9yZQorICAgICAgICAjIHRoZSBzZWNvbmQgZm9yayB0byBhdm9pZCBwcmVtYXR1cmUgdGVybWluYXRpb24gb2YgdGhlIHByb2Nlc3MuICBUaGUKKyAgICAgICAgIyByZWFzb24gaXMgdGhhdCB3aGVuIHRoZSBmaXJzdCBjaGlsZCB0ZXJtaW5hdGVzLCBhbGwgcHJvY2Vzc2VzLCBlLmcuCisgICAgICAgICMgdGhlIHNlY29uZCBjaGlsZCwgaW4gdGhlIG9ycGhhbmVkIGdyb3VwIHdpbGwgYmUgc2VudCBhIFNJR0hVUC4KKyAgICAgICAgIworICAgICAgICAjICJIb3dldmVyLCBhcyBwYXJ0IG9mIHRoZSBzZXNzaW9uIG1hbmFnZW1lbnQgc3lzdGVtLCB0aGVyZSBhcmUgZXhhY3RseQorICAgICAgICAjIHR3byBjYXNlcyB3aGVyZSBTSUdIVVAgaXMgc2VudCBvbiB0aGUgZGVhdGggb2YgYSBwcm9jZXNzOgorICAgICAgICAjCisgICAgICAgICMgICAgMSkgV2hlbiB0aGUgcHJvY2VzcyB0aGF0IGRpZXMgaXMgdGhlIHNlc3Npb24gbGVhZGVyIG9mIGEgc2Vzc2lvbiB0aGF0CisgICAgICAgICMgICAgICAgIGlzIGF0dGFjaGVkIHRvIGEgdGVybWluYWwgZGV2aWNlLCBTSUdIVVAgaXMgc2VudCB0byBhbGwgcHJvY2Vzc2VzCisgICAgICAgICMgICAgICAgIGluIHRoZSBmb3JlZ3JvdW5kIHByb2Nlc3MgZ3JvdXAgb2YgdGhhdCB0ZXJtaW5hbCBkZXZpY2UuCisgICAgICAgICMgICAgMikgV2hlbiB0aGUgZGVhdGggb2YgYSBwcm9jZXNzIGNhdXNlcyBhIHByb2Nlc3MgZ3JvdXAgdG8gYmVjb21lCisgICAgICAgICMgICAgICAgIG9ycGhhbmVkLCBhbmQgb25lIG9yIG1vcmUgcHJvY2Vzc2VzIGluIHRoZSBvcnBoYW5lZCBncm91cCBhcmUKKyAgICAgICAgIyAgICAgICAgc3RvcHBlZCwgdGhlbiBTSUdIVVAgYW5kIFNJR0NPTlQgYXJlIHNlbnQgdG8gYWxsIG1lbWJlcnMgb2YgdGhlCisgICAgICAgICMgICAgICAgIG9ycGhhbmVkIGdyb3VwLiIgWzJdCisgICAgICAgICMKKyAgICAgICAgIyBUaGUgZmlyc3QgY2FzZSBjYW4gYmUgaWdub3JlZCBzaW5jZSB0aGUgY2hpbGQgaXMgZ3VhcmFudGVlZCBub3QgdG8gaGF2ZQorICAgICAgICAjIGEgY29udHJvbGxpbmcgdGVybWluYWwuICBUaGUgc2Vjb25kIGNhc2UgaXNuJ3Qgc28gZWFzeSB0byBkaXNtaXNzLgorICAgICAgICAjIFRoZSBwcm9jZXNzIGdyb3VwIGlzIG9ycGhhbmVkIHdoZW4gdGhlIGZpcnN0IGNoaWxkIHRlcm1pbmF0ZXMgYW5kCisgICAgICAgICMgUE9TSVguMSByZXF1aXJlcyB0aGF0IGV2ZXJ5IFNUT1BQRUQgcHJvY2VzcyBpbiBhbiBvcnBoYW5lZCBwcm9jZXNzCisgICAgICAgICMgZ3JvdXAgYmUgc2VudCBhIFNJR0hVUCBzaWduYWwgZm9sbG93ZWQgYnkgYSBTSUdDT05UIHNpZ25hbC4gIFNpbmNlIHRoZQorICAgICAgICAjIHNlY29uZCBjaGlsZCBpcyBub3QgU1RPUFBFRCB0aG91Z2gsIHdlIGNhbiBzYWZlbHkgZm9yZWdvIGlnbm9yaW5nIHRoZQorICAgICAgICAjIFNJR0hVUCBzaWduYWwuICBJbiBhbnkgY2FzZSwgdGhlcmUgYXJlIG5vIGlsbC1lZmZlY3RzIGlmIGl0IGlzIGlnbm9yZWQuCisgICAgICAgICMKKyAgICAgICAgIyBpbXBvcnQgc2lnbmFsICAgICAgICAgICAgICAjIFNldCBoYW5kbGVycyBmb3IgYXN5bmNocm9ub3VzIGV2ZW50cy4KKyAgICAgICAgIyBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdIVVAsIHNpZ25hbC5TSUdfSUdOKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgRm9yayBhIHNlY29uZCBjaGlsZCBhbmQgZXhpdCBpbW1lZGlhdGVseSB0byBwcmV2ZW50IHpvbWJpZXMuICBUaGlzCisgICAgICAgICAgICAjIGNhdXNlcyB0aGUgc2Vjb25kIGNoaWxkIHByb2Nlc3MgdG8gYmUgb3JwaGFuZWQsIG1ha2luZyB0aGUgaW5pdAorICAgICAgICAgICAgIyBwcm9jZXNzIHJlc3BvbnNpYmxlIGZvciBpdHMgY2xlYW51cC4gIEFuZCwgc2luY2UgdGhlIGZpcnN0IGNoaWxkIGlzCisgICAgICAgICAgICAjIGEgc2Vzc2lvbiBsZWFkZXIgd2l0aG91dCBhIGNvbnRyb2xsaW5nIHRlcm1pbmFsLCBpdCdzIHBvc3NpYmxlIGZvcgorICAgICAgICAgICAgIyBpdCB0byBhY3F1aXJlIG9uZSBieSBvcGVuaW5nIGEgdGVybWluYWwgaW4gdGhlIGZ1dHVyZSAoU3lzdGVtIFYtCisgICAgICAgICAgICAjIGJhc2VkIHN5c3RlbXMpLiAgVGhpcyBzZWNvbmQgZm9yayBndWFyYW50ZWVzIHRoYXQgdGhlIGNoaWxkIGlzIG5vCisgICAgICAgICAgICAjIGxvbmdlciBhIHNlc3Npb24gbGVhZGVyLCBwcmV2ZW50aW5nIHRoZSBkYWVtb24gZnJvbSBldmVyIGFjcXVpcmluZworICAgICAgICAgICAgIyBhIGNvbnRyb2xsaW5nIHRlcm1pbmFsLgorICAgICAgICAgICAgcGlkID0gb3MuZm9yaygpICAgICAjIEZvcmsgYSBzZWNvbmQgY2hpbGQuCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIiVzIFslZF0iICUgKGUuc3RyZXJyb3IsIGUuZXJybm8pKQorCisgICAgICAgIGlmIChwaWQgPT0gMCk6ICAjIFRoZSBzZWNvbmQgY2hpbGQuCisgICAgICAgICAgICAjIFdlIHByb2JhYmx5IGRvbid0IHdhbnQgdGhlIGZpbGUgbW9kZSBjcmVhdGlvbiBtYXNrIGluaGVyaXRlZCBmcm9tCisgICAgICAgICAgICAjIHRoZSBwYXJlbnQsIHNvIHdlIGdpdmUgdGhlIGNoaWxkIGNvbXBsZXRlIGNvbnRyb2wgb3ZlciBwZXJtaXNzaW9ucy4KKyAgICAgICAgICAgIGlmIFVNQVNLIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIG9zLnVtYXNrKFVNQVNLKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBQYXJlbnQgKHRoZSBmaXJzdCBjaGlsZCkgb2YgdGhlIHNlY29uZCBjaGlsZC4KKyAgICAgICAgICAgIG9zLl9leGl0KDApCisgICAgZWxzZToKKyAgICAgICAgIyBleGl0KCkgb3IgX2V4aXQoKT8KKyAgICAgICAgIyBfZXhpdCBpcyBsaWtlIGV4aXQoKSwgYnV0IGl0IGRvZXNuJ3QgY2FsbCBhbnkgZnVuY3Rpb25zIHJlZ2lzdGVyZWQKKyAgICAgICAgIyB3aXRoIGF0ZXhpdCAoYW5kIG9uX2V4aXQpIG9yIGFueSByZWdpc3RlcmVkIHNpZ25hbCBoYW5kbGVycy4gIEl0IGFsc28KKyAgICAgICAgIyBjbG9zZXMgYW55IG9wZW4gZmlsZSBkZXNjcmlwdG9ycy4gIFVzaW5nIGV4aXQoKSBtYXkgY2F1c2UgYWxsIHN0ZGlvCisgICAgICAgICMgc3RyZWFtcyB0byBiZSBmbHVzaGVkIHR3aWNlIGFuZCBhbnkgdGVtcG9yYXJ5IGZpbGVzIG1heSBiZSB1bmV4cGVjdGVkbHkKKyAgICAgICAgIyByZW1vdmVkLiAgSXQncyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdGhhdCBjaGlsZCBicmFuY2hlcyBvZiBhIGZvcmsoKQorICAgICAgICAjIGFuZCB0aGUgcGFyZW50IGJyYW5jaChlcykgb2YgYSBkYWVtb24gdXNlIF9leGl0KCkuCisgICAgICAgIHJldHVybgorCisgICAgIyBDbG9zZSBhbGwgb3BlbiBmaWxlIGRlc2NyaXB0b3JzLiAgVGhpcyBwcmV2ZW50cyB0aGUgY2hpbGQgZnJvbSBrZWVwaW5nCisgICAgIyBvcGVuIGFueSBmaWxlIGRlc2NyaXB0b3JzIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQuICBUaGVyZSBpcyBhIHZhcmlldHkKKyAgICAjIG9mIG1ldGhvZHMgdG8gYWNjb21wbGlzaCB0aGlzIHRhc2suICBUaHJlZSBhcmUgbGlzdGVkIGJlbG93LgorICAgICMKKyAgICAjIFRyeSB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIFNDX09QRU5fTUFYLCB0byBvYnRhaW4gdGhlIG1heGltdW0KKyAgICAjIG51bWJlciBvZiBvcGVuIGZpbGUgZGVzY3JpcHRvcnMgdG8gY2xvc2UuICBJZiBpdCBkb2Vzbid0IGV4aXN0LCB1c2UKKyAgICAjIHRoZSBkZWZhdWx0IHZhbHVlIChjb25maWd1cmFibGUpLgorICAgICMKKyAgICAjIHRyeToKKyAgICAjICAgICBtYXhmZCA9IG9zLnN5c2NvbmYoIlNDX09QRU5fTUFYIikKKyAgICAjIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICMgICAgIG1heGZkID0gTUFYRkQKKyAgICAjCisgICAgIyBPUgorICAgICMKKyAgICAjIGlmIChvcy5zeXNjb25mX25hbWVzLmhhc19rZXkoIlNDX09QRU5fTUFYIikpOgorICAgICMgICAgIG1heGZkID0gb3Muc3lzY29uZigiU0NfT1BFTl9NQVgiKQorICAgICMgZWxzZToKKyAgICAjICAgICBtYXhmZCA9IE1BWEZECisgICAgIworICAgICMgT1IKKyAgICAjCisgICAgIyBVc2UgdGhlIGdldHJsaW1pdCBtZXRob2QgdG8gcmV0cmlldmUgdGhlIG1heGltdW0gZmlsZSBkZXNjcmlwdG9yIG51bWJlcgorICAgICMgdGhhdCBjYW4gYmUgb3BlbmVkIGJ5IHRoaXMgcHJvY2Vzcy4gIElmIHRoZXJlIGlzIG5vIGxpbWl0IG9uIHRoZQorICAgICMgcmVzb3VyY2UsIHVzZSB0aGUgZGVmYXVsdCB2YWx1ZS4KKyAgICAjCisgICAgaW1wb3J0IHJlc291cmNlICAgICAgICAgICAgICMgUmVzb3VyY2UgdXNhZ2UgaW5mb3JtYXRpb24uCisgICAgbWF4ZmQgPSByZXNvdXJjZS5nZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX05PRklMRSlbMV0KKyAgICBpZiAobWF4ZmQgPT0gcmVzb3VyY2UuUkxJTV9JTkZJTklUWSk6CisgICAgICAgIG1heGZkID0gTUFYRkQKKyAgCisgICAgIyBJdGVyYXRlIHRocm91Z2ggYW5kIGNsb3NlIGFsbCBmaWxlIGRlc2NyaXB0b3JzLgorIyAgICBmb3IgZmQgaW4gcmFuZ2UoMCwgbWF4ZmQpOgorIyAgICAgICAgdHJ5OgorIyAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorIyAgICAgICAgZXhjZXB0IE9TRXJyb3I6ICAgICAgICAjIEVSUk9SLCBmZCB3YXNuJ3Qgb3BlbiB0byBiZWdpbiB3aXRoIChpZ25vcmVkKQorIyAgICAgICAgICAgIHBhc3MKKworICAgICMgUmVkaXJlY3QgdGhlIHN0YW5kYXJkIEkvTyBmaWxlIGRlc2NyaXB0b3JzIHRvIHRoZSBzcGVjaWZpZWQgZmlsZS4gIFNpbmNlCisgICAgIyB0aGUgZGFlbW9uIGhhcyBubyBjb250cm9sbGluZyB0ZXJtaW5hbCwgbW9zdCBkYWVtb25zIHJlZGlyZWN0IHN0ZGluLAorICAgICMgc3Rkb3V0LCBhbmQgc3RkZXJyIHRvIC9kZXYvbnVsbC4gIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHNpZGUtZWZmZWN0cworICAgICMgZnJvbSByZWFkcyBhbmQgd3JpdGVzIHRvIHRoZSBzdGFuZGFyZCBJL08gZmlsZSBkZXNjcmlwdG9ycy4KKworICAgICMgVGhpcyBjYWxsIHRvIG9wZW4gaXMgZ3VhcmFudGVlZCB0byByZXR1cm4gdGhlIGxvd2VzdCBmaWxlIGRlc2NyaXB0b3IsCisgICAgIyB3aGljaCB3aWxsIGJlIDAgKHN0ZGluKSwgc2luY2UgaXQgd2FzIGNsb3NlZCBhYm92ZS4KKyMgICAgb3Mub3BlbihSRURJUkVDVF9UTywgb3MuT19SRFdSKSAgICAjIHN0YW5kYXJkIGlucHV0ICgwKQorCisgICAgIyBEdXBsaWNhdGUgc3RhbmRhcmQgaW5wdXQgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBzdGFuZGFyZCBlcnJvci4KKyMgICAgb3MuZHVwMigwLCAxKSAgICAgICAgICAgICAgICAgICAgICAjIHN0YW5kYXJkIG91dHB1dCAoMSkKKyMgICAgb3MuZHVwMigwLCAyKSAgICAgICAgICAgICAgICAgICAgICAjIHN0YW5kYXJkIGVycm9yICgyKQorCisKKyAgICBzaSA9IGZpbGUoJy9kZXYvbnVsbCcsICdyJykKKyAgICBzbyA9IGZpbGUobG9nZmlsZSwgJ3cnKQorICAgIHNlID0gc28KKworCisgICAgIyBSZXBsYWNlIHRob3NlIGZkcyB3aXRoIG91ciBvd24KKyAgICBvcy5kdXAyKHNpLmZpbGVubygpLCBzeXMuc3RkaW4uZmlsZW5vKCkpCisgICAgb3MuZHVwMihzby5maWxlbm8oKSwgc3lzLnN0ZG91dC5maWxlbm8oKSkKKyAgICBvcy5kdXAyKHNlLmZpbGVubygpLCBzeXMuc3RkZXJyLmZpbGVubygpKQorCisgICAgZnVuY3Rpb24oKQorCisgICAgb3MuX2V4aXQoMCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZGF0YS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZGF0YS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjQxNWE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9kYXRhLnB5CkBAIC0wLDAgKzEsNDQ2IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdEYXRhJyBpbXBsZW1lbnRhdGlvbnMKKworRnVuY3Rpb25zIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBkYXRhIHN0cnVjdHVyZSB1c2VkIGJ5IHRoZQorQml0QmFrZSBidWlsZCB0b29scy4KKworVGhlIGV4cGFuZEtleXMgYW5kIHVwZGF0ZV9kYXRhIGFyZSB0aGUgbW9zdCBleHBlbnNpdmUKK29wZXJhdGlvbnMuIEF0IG5pZ2h0IHRoZSBjb29raWUgbW9uc3RlciBjYW1lIGJ5IGFuZAorc3VnZ2VzdGVkICdnaXZlIG1lIGNvb2tpZXMgb24gc2V0dGluZyB0aGUgdmFyaWFibGVzIGFuZAordGhpbmdzIHdpbGwgd29yayBvdXQnLiBUYWtpbmcgdGhpcyBzdWdnZXN0aW9uIGludG8gYWNjb3VudAorYXBwbHlpbmcgdGhlIHNraWxscyBmcm9tIHRoZSBub3QgeWV0IHBhc3NlZCAnRW50d3VyZiB1bmQKK0FuYWx5c2Ugdm9uIEFsZ29yaXRobWVuJyBsZWN0dXJlIGFuZCB0aGUgY29va2llCittb25zdGVyIHNlZW1zIHRvIGJlIHJpZ2h0LiBXZSB3aWxsIHRyYWNrIHNldFZhciBtb3JlIGNhcmVmdWxseQordG8gaGF2ZSBmYXN0ZXIgdXBkYXRlX2RhdGEgYW5kIGV4cGFuZEtleXMgb3BlcmF0aW9ucy4KKworVGhpcyBpcyBhIHRyYWRlLW9mZiBiZXR3ZWVuIHNwZWVkIGFuZCBtZW1vcnkgYWdhaW4gYnV0Cit0aGUgc3BlZWQgaXMgbW9yZSBjcml0aWNhbCBoZXJlLgorIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgQ29weXJpZ2h0IChDKSAyMDA1ICAgICAgICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgQmFzZWQgb24gZnVuY3Rpb25zIGZyb20gdGhlIGJhc2UgYmIgbW9kdWxlLCBDb3B5cmlnaHQgMjAwMyBIb2xnZXIgU2NodXJpZworCitpbXBvcnQgc3lzLCBvcywgcmUKK2lmIHN5cy5hcmd2WzBdWy01Ol0gPT0gInB5ZG9jIjoKKyAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShzeXMuYXJndlsxXSkpCitlbHNlOgorICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKSkKK3N5cy5wYXRoLmluc2VydCgwLCBwYXRoKQorZnJvbSBpdGVydG9vbHMgaW1wb3J0IGdyb3VwYnkKKworZnJvbSBiYiBpbXBvcnQgZGF0YV9zbWFydAorZnJvbSBiYiBpbXBvcnQgY29kZXBhcnNlcgoraW1wb3J0IGJiCisKK2xvZ2dlciA9IGRhdGFfc21hcnQubG9nZ2VyCitfZGljdF90eXBlID0gZGF0YV9zbWFydC5EYXRhU21hcnQKKworZGVmIGluaXQoKToKKyAgICAiIiJSZXR1cm4gYSBuZXcgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgQml0YmFrZSBkYXRhIiIiCisgICAgcmV0dXJuIF9kaWN0X3R5cGUoKQorCitkZWYgaW5pdF9kYihwYXJlbnQgPSBOb25lKToKKyAgICAiIiJSZXR1cm4gYSBuZXcgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgQml0YmFrZSBkYXRhLAorICAgIG9wdGlvbmFsbHkgYmFzZWQgb24gYW4gZXhpc3Rpbmcgb2JqZWN0IiIiCisgICAgaWYgcGFyZW50IGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gcGFyZW50LmNyZWF0ZUNvcHkoKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBfZGljdF90eXBlKCkKKworZGVmIGNyZWF0ZUNvcHkoc291cmNlKToKKyAgICAiIiJMaW5rIHRoZSBzb3VyY2Ugc2V0IHRvIHRoZSBkZXN0aW5hdGlvbgorICAgIElmIG9uZSBkb2VzIG5vdCBmaW5kIHRoZSB2YWx1ZSBpbiB0aGUgZGVzdGluYXRpb24gc2V0LAorICAgIHNlYXJjaCB3aWxsIGdvIG9uIHRvIHRoZSBzb3VyY2Ugc2V0IHRvIGdldCB0aGUgdmFsdWUuCisgICAgVmFsdWUgZnJvbSBzb3VyY2UgYXJlIGNvcHktb24td3JpdGUuIGkuZS4gYW55IHRyeSB0bworICAgIG1vZGlmeSBvbmUgb2YgdGhlbSB3aWxsIGVuZCB1cCBwdXR0aW5nIHRoZSBtb2RpZmllZCB2YWx1ZQorICAgIGluIHRoZSBkZXN0aW5hdGlvbiBzZXQuCisgICAgIiIiCisgICAgcmV0dXJuIHNvdXJjZS5jcmVhdGVDb3B5KCkKKworZGVmIGluaXRWYXIodmFyLCBkKToKKyAgICAiIiJOb24tZGVzdHJ1Y3RpdmUgdmFyIGluaXQgZm9yIGRhdGEgc3RydWN0dXJlIiIiCisgICAgZC5pbml0VmFyKHZhcikKKworCitkZWYgc2V0VmFyKHZhciwgdmFsdWUsIGQpOgorICAgICIiIlNldCBhIHZhcmlhYmxlIHRvIGEgZ2l2ZW4gdmFsdWUiIiIKKyAgICBkLnNldFZhcih2YXIsIHZhbHVlKQorCisKK2RlZiBnZXRWYXIodmFyLCBkLCBleHAgPSBGYWxzZSk6CisgICAgIiIiR2V0cyB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZSIiIgorICAgIHJldHVybiBkLmdldFZhcih2YXIsIGV4cCkKKworCitkZWYgcmVuYW1lVmFyKGtleSwgbmV3a2V5LCBkKToKKyAgICAiIiJSZW5hbWVzIGEgdmFyaWFibGUgZnJvbSBrZXkgdG8gbmV3a2V5IiIiCisgICAgZC5yZW5hbWVWYXIoa2V5LCBuZXdrZXkpCisKK2RlZiBkZWxWYXIodmFyLCBkKToKKyAgICAiIiJSZW1vdmVzIGEgdmFyaWFibGUgZnJvbSB0aGUgZGF0YSBzZXQiIiIKKyAgICBkLmRlbFZhcih2YXIpCisKK2RlZiBhcHBlbmRWYXIodmFyLCB2YWx1ZSwgZCk6CisgICAgIiIiQXBwZW5kIGFkZGl0aW9uYWwgdmFsdWUgdG8gYSB2YXJpYWJsZSIiIgorICAgIGQuYXBwZW5kVmFyKHZhciwgdmFsdWUpCisKK2RlZiBzZXRWYXJGbGFnKHZhciwgZmxhZywgZmxhZ3ZhbHVlLCBkKToKKyAgICAiIiJTZXQgYSBmbGFnIGZvciBhIGdpdmVuIHZhcmlhYmxlIHRvIGEgZ2l2ZW4gdmFsdWUiIiIKKyAgICBkLnNldFZhckZsYWcodmFyLCBmbGFnLCBmbGFndmFsdWUpCisKK2RlZiBnZXRWYXJGbGFnKHZhciwgZmxhZywgZCk6CisgICAgIiIiR2V0cyBnaXZlbiBmbGFnIGZyb20gZ2l2ZW4gdmFyIiIiCisgICAgcmV0dXJuIGQuZ2V0VmFyRmxhZyh2YXIsIGZsYWcpCisKK2RlZiBkZWxWYXJGbGFnKHZhciwgZmxhZywgZCk6CisgICAgIiIiUmVtb3ZlcyBhIGdpdmVuIGZsYWcgZnJvbSB0aGUgdmFyaWFibGUncyBmbGFncyIiIgorICAgIGQuZGVsVmFyRmxhZyh2YXIsIGZsYWcpCisKK2RlZiBzZXRWYXJGbGFncyh2YXIsIGZsYWdzLCBkKToKKyAgICAiIiJTZXQgdGhlIGZsYWdzIGZvciBhIGdpdmVuIHZhcmlhYmxlCisKKyAgICBOb3RlOgorICAgICAgICBzZXRWYXJGbGFncyB3aWxsIG5vdCBjbGVhciBwcmV2aW91cworICAgICAgICBmbGFncy4gVGhpbmsgb2YgdGhpcyBtZXRob2QgYXMKKyAgICAgICAgYWRkVmFyRmxhZ3MKKyAgICAiIiIKKyAgICBkLnNldFZhckZsYWdzKHZhciwgZmxhZ3MpCisKK2RlZiBnZXRWYXJGbGFncyh2YXIsIGQpOgorICAgICIiIkdldHMgYSB2YXJpYWJsZSdzIGZsYWdzIiIiCisgICAgcmV0dXJuIGQuZ2V0VmFyRmxhZ3ModmFyKQorCitkZWYgZGVsVmFyRmxhZ3ModmFyLCBkKToKKyAgICAiIiJSZW1vdmVzIGEgdmFyaWFibGUncyBmbGFncyIiIgorICAgIGQuZGVsVmFyRmxhZ3ModmFyKQorCitkZWYga2V5cyhkKToKKyAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIGtleXMgaW4gZCIiIgorICAgIHJldHVybiBkLmtleXMoKQorCisKK19fZXhwYW5kX3Zhcl9yZWdleHBfXyA9IHJlLmNvbXBpbGUociJcJHtbXnt9XSt9IikKK19fZXhwYW5kX3B5dGhvbl9yZWdleHBfXyA9IHJlLmNvbXBpbGUociJcJHtALis/fSIpCisKK2RlZiBleHBhbmQocywgZCwgdmFybmFtZSA9IE5vbmUpOgorICAgICIiIlZhcmlhYmxlIGV4cGFuc2lvbiB1c2luZyB0aGUgZGF0YSBzdG9yZSIiIgorICAgIHJldHVybiBkLmV4cGFuZChzLCB2YXJuYW1lKQorCitkZWYgZXhwYW5kS2V5cyhhbHRlcmRhdGEsIHJlYWRkYXRhID0gTm9uZSk6CisgICAgaWYgcmVhZGRhdGEgPT0gTm9uZToKKyAgICAgICAgcmVhZGRhdGEgPSBhbHRlcmRhdGEKKworICAgIHRvZG9saXN0ID0ge30KKyAgICBmb3Iga2V5IGluIGFsdGVyZGF0YToKKyAgICAgICAgaWYgbm90ICckeycgaW4ga2V5OgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBla2V5ID0gZXhwYW5kKGtleSwgcmVhZGRhdGEpCisgICAgICAgIGlmIGtleSA9PSBla2V5OgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdG9kb2xpc3Rba2V5XSA9IGVrZXkKKworICAgICMgVGhlc2UgdHdvIGZvciBsb29wcyBhcmUgc3BsaXQgZm9yIHBlcmZvcm1hbmNlIHRvIG1heGltaXNlIHRoZQorICAgICMgdXNlZnVsbmVzcyBvZiB0aGUgZXhwYW5kIGNhY2hlCisgICAgZm9yIGtleSBpbiBzb3J0ZWQodG9kb2xpc3QpOgorICAgICAgICBla2V5ID0gdG9kb2xpc3Rba2V5XQorICAgICAgICBuZXd2YWwgPSBhbHRlcmRhdGEuZ2V0VmFyKGVrZXksIEZhbHNlKQorICAgICAgICBpZiBuZXd2YWwgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB2YWwgPSBhbHRlcmRhdGEuZ2V0VmFyKGtleSwgRmFsc2UpCisgICAgICAgICAgICBpZiB2YWwgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgYmIud2FybigiVmFyaWFibGUga2V5ICVzICglcykgcmVwbGFjZXMgb3JpZ2luYWwga2V5ICVzICglcykuIiAlIChrZXksIHZhbCwgZWtleSwgbmV3dmFsKSkKKyAgICAgICAgYWx0ZXJkYXRhLnJlbmFtZVZhcihrZXksIGVrZXkpCisKK2RlZiBpbmhlcml0RnJvbU9TKGQsIHNhdmVkZW52LCBwZXJtaXR0ZWQpOgorICAgICIiIkluaGVyaXQgdmFyaWFibGVzIGZyb20gdGhlIGluaXRpYWwgZW52aXJvbm1lbnQuIiIiCisgICAgZXhwb3J0bGlzdCA9IGJiLnV0aWxzLnByZXNlcnZlZF9lbnZ2YXJzX2V4cG9ydGVkKCkKKyAgICBmb3IgcyBpbiBzYXZlZGVudi5rZXlzKCk6CisgICAgICAgIGlmIHMgaW4gcGVybWl0dGVkOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGQuc2V0VmFyKHMsIHNhdmVkZW52LmdldFZhcihzLCBUcnVlKSwgb3AgPSAnZnJvbSBlbnYnKQorICAgICAgICAgICAgICAgIGlmIHMgaW4gZXhwb3J0bGlzdDoKKyAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXJGbGFnKHMsICJleHBvcnQiLCBUcnVlLCBvcCA9ICdhdXRvIGVudiBleHBvcnQnKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKK2RlZiBlbWl0X3Zhcih2YXIsIG89c3lzLl9fc3Rkb3V0X18sIGQgPSBpbml0KCksIGFsbD1GYWxzZSk6CisgICAgIiIiRW1pdCBhIHZhcmlhYmxlIHRvIGJlIHNvdXJjZWQgYnkgYSBzaGVsbC4iIiIKKyAgICBpZiBkLmdldFZhckZsYWcodmFyLCAicHl0aG9uIik6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZXhwb3J0ID0gZC5nZXRWYXJGbGFnKHZhciwgImV4cG9ydCIpCisgICAgdW5leHBvcnQgPSBkLmdldFZhckZsYWcodmFyLCAidW5leHBvcnQiKQorICAgIGZ1bmMgPSBkLmdldFZhckZsYWcodmFyLCAiZnVuYyIpCisgICAgaWYgbm90IGFsbCBhbmQgbm90IGV4cG9ydCBhbmQgbm90IHVuZXhwb3J0IGFuZCBub3QgZnVuYzoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICB0cnk6CisgICAgICAgIGlmIGFsbDoKKyAgICAgICAgICAgIG92YWwgPSBkLmdldFZhcih2YXIsIEZhbHNlKQorICAgICAgICB2YWwgPSBkLmdldFZhcih2YXIsIFRydWUpCisgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgYmIuYnVpbGQuRnVuY0ZhaWxlZCk6CisgICAgICAgIHJhaXNlCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgIG8ud3JpdGUoJyMgZXhwYW5zaW9uIG9mICVzIHRocmV3ICVzOiAlc1xuJyAlICh2YXIsIGV4Yy5fX2NsYXNzX18uX19uYW1lX18sIHN0cihleGMpKSkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBhbGw6CisgICAgICAgIGQudmFyaGlzdG9yeS5lbWl0KHZhciwgb3ZhbCwgdmFsLCBvLCBkKQorCisgICAgaWYgKHZhci5maW5kKCItIikgIT0gLTEgb3IgdmFyLmZpbmQoIi4iKSAhPSAtMSBvciB2YXIuZmluZCgneycpICE9IC0xIG9yIHZhci5maW5kKCd9JykgIT0gLTEgb3IgdmFyLmZpbmQoJysnKSAhPSAtMSkgYW5kIG5vdCBhbGw6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgdmFyRXhwYW5kZWQgPSBkLmV4cGFuZCh2YXIpCisKKyAgICBpZiB1bmV4cG9ydDoKKyAgICAgICAgby53cml0ZSgndW5zZXQgJXNcbicgJSB2YXJFeHBhbmRlZCkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiB2YWwgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICB2YWwgPSBzdHIodmFsKQorCisgICAgaWYgdmFyRXhwYW5kZWQuc3RhcnRzd2l0aCgiQkFTSF9GVU5DXyIpOgorICAgICAgICB2YXJFeHBhbmRlZCA9IHZhckV4cGFuZGVkWzEwOi0yXQorICAgICAgICB2YWwgPSB2YWxbMzpdICMgU3RyaXAgb2ZmICIoKSAiCisgICAgICAgIG8ud3JpdGUoIiVzKCkgJXNcbiIgJSAodmFyRXhwYW5kZWQsIHZhbCkpCisgICAgICAgIG8ud3JpdGUoImV4cG9ydCAtZiAlc1xuIiAlICh2YXJFeHBhbmRlZCkpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBpZiBmdW5jOgorICAgICAgICAjIE5PVEU6IHNob3VsZCBwcm9iYWJseSBjaGVjayBmb3IgdW5iYWxhbmNlZCB7fSB3aXRoaW4gdGhlIHZhcgorICAgICAgICBvLndyaXRlKCIlcygpIHtcbiVzXG59XG4iICUgKHZhckV4cGFuZGVkLCB2YWwpKQorICAgICAgICByZXR1cm4gMQorCisgICAgaWYgZXhwb3J0OgorICAgICAgICBvLndyaXRlKCdleHBvcnQgJykKKworICAgICMgaWYgd2UncmUgZ29pbmcgdG8gb3V0cHV0IHRoaXMgd2l0aGluIGRvdWJsZXF1b3RlcywKKyAgICAjIHRvIGEgc2hlbGwsIHdlIG5lZWQgdG8gZXNjYXBlIHRoZSBxdW90ZXMgaW4gdGhlIHZhcgorICAgIGFsdGVyID0gcmUuc3ViKCciJywgJ1xcIicsIHZhbCkKKyAgICBhbHRlciA9IHJlLnN1YignXG4nLCAnIFxcXG4nLCBhbHRlcikKKyAgICBhbHRlciA9IHJlLnN1YignXFwkJywgJ1xcXFwkJywgYWx0ZXIpCisgICAgby53cml0ZSgnJXM9IiVzIlxuJyAlICh2YXJFeHBhbmRlZCwgYWx0ZXIpKQorICAgIHJldHVybiBGYWxzZQorCitkZWYgZW1pdF9lbnYobz1zeXMuX19zdGRvdXRfXywgZCA9IGluaXQoKSwgYWxsPUZhbHNlKToKKyAgICAiIiJFbWl0cyBhbGwgaXRlbXMgaW4gdGhlIGRhdGEgc3RvcmUgaW4gYSBmb3JtYXQgc3VjaCB0aGF0IGl0IGNhbiBiZSBzb3VyY2VkIGJ5IGEgc2hlbGwuIiIiCisKKyAgICBpc2Z1bmMgPSBsYW1iZGEga2V5OiBib29sKGQuZ2V0VmFyRmxhZyhrZXksICJmdW5jIikpCisgICAga2V5cyA9IHNvcnRlZCgoa2V5IGZvciBrZXkgaW4gZC5rZXlzKCkgaWYgbm90IGtleS5zdGFydHN3aXRoKCJfXyIpKSwga2V5PWlzZnVuYykKKyAgICBncm91cGVkID0gZ3JvdXBieShrZXlzLCBpc2Z1bmMpCisgICAgZm9yIGlzZnVuYywga2V5cyBpbiBncm91cGVkOgorICAgICAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgICAgICBlbWl0X3ZhcihrZXksIG8sIGQsIGFsbCBhbmQgbm90IGlzZnVuYykgYW5kIG8ud3JpdGUoJ1xuJykKKworZGVmIGV4cG9ydGVkX2tleXMoZCk6CisgICAgcmV0dXJuIChrZXkgZm9yIGtleSBpbiBkLmtleXMoKSBpZiBub3Qga2V5LnN0YXJ0c3dpdGgoJ19fJykgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyRmxhZyhrZXksICdleHBvcnQnKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGQuZ2V0VmFyRmxhZyhrZXksICd1bmV4cG9ydCcpKQorCitkZWYgZXhwb3J0ZWRfdmFycyhkKToKKyAgICBmb3Iga2V5IGluIGV4cG9ydGVkX2tleXMoZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlID0gZC5nZXRWYXIoa2V5LCBUcnVlKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgeWllbGQga2V5LCBzdHIodmFsdWUpCisKK2RlZiBlbWl0X2Z1bmMoZnVuYywgbz1zeXMuX19zdGRvdXRfXywgZCA9IGluaXQoKSk6CisgICAgIiIiRW1pdHMgYWxsIGl0ZW1zIGluIHRoZSBkYXRhIHN0b3JlIGluIGEgZm9ybWF0IHN1Y2ggdGhhdCBpdCBjYW4gYmUgc291cmNlZCBieSBhIHNoZWxsLiIiIgorCisgICAga2V5cyA9IChrZXkgZm9yIGtleSBpbiBkLmtleXMoKSBpZiBub3Qga2V5LnN0YXJ0c3dpdGgoIl9fIikgYW5kIG5vdCBkLmdldFZhckZsYWcoa2V5LCAiZnVuYyIpKQorICAgIGZvciBrZXkgaW4ga2V5czoKKyAgICAgICAgZW1pdF92YXIoa2V5LCBvLCBkLCBGYWxzZSkKKworICAgIG8ud3JpdGUoJ1xuJykKKyAgICBlbWl0X3ZhcihmdW5jLCBvLCBkLCBGYWxzZSkgYW5kIG8ud3JpdGUoJ1xuJykKKyAgICBuZXdkZXBzID0gYmIuY29kZXBhcnNlci5TaGVsbFBhcnNlcihmdW5jLCBsb2dnZXIpLnBhcnNlX3NoZWxsKGQuZ2V0VmFyKGZ1bmMsIFRydWUpKQorICAgIG5ld2RlcHMgfD0gc2V0KChkLmdldFZhckZsYWcoZnVuYywgInZhcmRlcHMiLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKyAgICBzZWVuID0gc2V0KCkKKyAgICB3aGlsZSBuZXdkZXBzOgorICAgICAgICBkZXBzID0gbmV3ZGVwcworICAgICAgICBzZWVuIHw9IGRlcHMKKyAgICAgICAgbmV3ZGVwcyA9IHNldCgpCisgICAgICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgICAgIGlmIGQuZ2V0VmFyRmxhZyhkZXAsICJmdW5jIikgYW5kIG5vdCBkLmdldFZhckZsYWcoZGVwLCAicHl0aG9uIik6CisgICAgICAgICAgICAgICBlbWl0X3ZhcihkZXAsIG8sIGQsIEZhbHNlKSBhbmQgby53cml0ZSgnXG4nKQorICAgICAgICAgICAgICAgbmV3ZGVwcyB8PSAgYmIuY29kZXBhcnNlci5TaGVsbFBhcnNlcihkZXAsIGxvZ2dlcikucGFyc2Vfc2hlbGwoZC5nZXRWYXIoZGVwLCBUcnVlKSkKKyAgICAgICAgICAgICAgIG5ld2RlcHMgfD0gc2V0KChkLmdldFZhckZsYWcoZGVwLCAidmFyZGVwcyIsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgICAgICBuZXdkZXBzIC09IHNlZW4KKworX2Z1bmN0aW9uZm10ID0gIiIiCitkZWYge2Z1bmN0aW9ufShkKToKK3tib2R5fSIiIgorCitkZWYgZW1pdF9mdW5jX3B5dGhvbihmdW5jLCBvPXN5cy5fX3N0ZG91dF9fLCBkID0gaW5pdCgpKToKKyAgICAiIiJFbWl0cyBhbGwgaXRlbXMgaW4gdGhlIGRhdGEgc3RvcmUgaW4gYSBmb3JtYXQgc3VjaCB0aGF0IGl0IGNhbiBiZSBzb3VyY2VkIGJ5IGEgc2hlbGwuIiIiCisKKyAgICBkZWYgd3JpdGVfZnVuYyhmdW5jLCBvLCBjYWxsID0gRmFsc2UpOgorICAgICAgICBib2R5ID0gZC5nZXRWYXIoZnVuYywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IGJvZHkuc3RhcnRzd2l0aCgiZGVmIik6CisgICAgICAgICAgICBib2R5ID0gX2Z1bmN0aW9uZm10LmZvcm1hdChmdW5jdGlvbj1mdW5jLCBib2R5PWJvZHkpCisKKyAgICAgICAgby53cml0ZShib2R5LnN0cmlwKCkgKyAiXG5cbiIpCisgICAgICAgIGlmIGNhbGw6CisgICAgICAgICAgICBvLndyaXRlKGZ1bmMgKyAiKGQpIiArICJcblxuIikKKworICAgIHdyaXRlX2Z1bmMoZnVuYywgbywgVHJ1ZSkKKyAgICBwcCA9IGJiLmNvZGVwYXJzZXIuUHl0aG9uUGFyc2VyKGZ1bmMsIGxvZ2dlcikKKyAgICBwcC5wYXJzZV9weXRob24oZC5nZXRWYXIoZnVuYywgVHJ1ZSkpCisgICAgbmV3ZGVwcyA9IHBwLmV4ZWNzCisgICAgbmV3ZGVwcyB8PSBzZXQoKGQuZ2V0VmFyRmxhZyhmdW5jLCAidmFyZGVwcyIsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgIHNlZW4gPSBzZXQoKQorICAgIHdoaWxlIG5ld2RlcHM6CisgICAgICAgIGRlcHMgPSBuZXdkZXBzCisgICAgICAgIHNlZW4gfD0gZGVwcworICAgICAgICBuZXdkZXBzID0gc2V0KCkKKyAgICAgICAgZm9yIGRlcCBpbiBkZXBzOgorICAgICAgICAgICAgaWYgZC5nZXRWYXJGbGFnKGRlcCwgImZ1bmMiKSBhbmQgZC5nZXRWYXJGbGFnKGRlcCwgInB5dGhvbiIpOgorICAgICAgICAgICAgICAgd3JpdGVfZnVuYyhkZXAsIG8pCisgICAgICAgICAgICAgICBwcCA9IGJiLmNvZGVwYXJzZXIuUHl0aG9uUGFyc2VyKGRlcCwgbG9nZ2VyKQorICAgICAgICAgICAgICAgcHAucGFyc2VfcHl0aG9uKGQuZ2V0VmFyKGRlcCwgVHJ1ZSkpCisgICAgICAgICAgICAgICBuZXdkZXBzIHw9IHBwLmV4ZWNzCisgICAgICAgICAgICAgICBuZXdkZXBzIHw9IHNldCgoZC5nZXRWYXJGbGFnKGRlcCwgInZhcmRlcHMiLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKyAgICAgICAgbmV3ZGVwcyAtPSBzZWVuCisKK2RlZiB1cGRhdGVfZGF0YShkKToKKyAgICAiIiJQZXJmb3JtcyBmaW5hbCBzdGVwcyB1cG9uIHRoZSBkYXRhc3RvcmUsIGluY2x1ZGluZyBhcHBsaWNhdGlvbiBvZiBvdmVycmlkZXMiIiIKKyAgICBkLmZpbmFsaXplKHBhcmVudCA9IFRydWUpCisKK2RlZiBidWlsZF9kZXBlbmRlbmNpZXMoa2V5LCBrZXlzLCBzaGVsbGRlcHMsIHZhcmZsYWdzZXhjbCwgZCk6CisgICAgZGVwcyA9IHNldCgpCisgICAgdHJ5OgorICAgICAgICBpZiBrZXlbLTFdID09ICddJzoKKyAgICAgICAgICAgIHZmID0ga2V5WzotMV0uc3BsaXQoJ1snKQorICAgICAgICAgICAgdmFsdWUgPSBkLmdldFZhckZsYWcodmZbMF0sIHZmWzFdLCBGYWxzZSkKKyAgICAgICAgICAgIHBhcnNlciA9IGQuZXhwYW5kV2l0aFJlZnModmFsdWUsIGtleSkKKyAgICAgICAgICAgIGRlcHMgfD0gcGFyc2VyLnJlZmVyZW5jZXMKKyAgICAgICAgICAgIGRlcHMgPSBkZXBzIHwgKGtleXMgJiBwYXJzZXIuZXhlY3MpCisgICAgICAgICAgICByZXR1cm4gZGVwcywgdmFsdWUKKyAgICAgICAgdmFyZmxhZ3MgPSBkLmdldFZhckZsYWdzKGtleSwgWyJ2YXJkZXBzIiwgInZhcmRlcHZhbHVlIiwgInZhcmRlcHNleGNsdWRlIiwgInZhcmRlcHZhbHVlZXhjbHVkZSIsICJwb3N0ZnVuY3MiLCAicHJlZnVuY3MiXSkgb3Ige30KKyAgICAgICAgdmFyZGVwcyA9IHZhcmZsYWdzLmdldCgidmFyZGVwcyIpCisgICAgICAgIHZhbHVlID0gZC5nZXRWYXIoa2V5LCBGYWxzZSkKKworICAgICAgICBkZWYgaGFuZGxlX2NvbnRhaW5zKHZhbHVlLCBjb250YWlucywgZCk6CisgICAgICAgICAgICBuZXd2YWx1ZSA9ICIiCisgICAgICAgICAgICBmb3IgayBpbiBzb3J0ZWQoY29udGFpbnMpOgorICAgICAgICAgICAgICAgIGwgPSAoZC5nZXRWYXIoaywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBmb3Igd29yZCBpbiBzb3J0ZWQoY29udGFpbnNba10pOgorICAgICAgICAgICAgICAgICAgICBpZiB3b3JkIGluIGw6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXd2YWx1ZSArPSAiXG4lc3slc30gPSBTZXQiICUgIChrLCB3b3JkKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3dmFsdWUgKz0gIlxuJXN7JXN9ID0gVW5zZXQiICUgIChrLCB3b3JkKQorICAgICAgICAgICAgaWYgbm90IG5ld3ZhbHVlOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZQorICAgICAgICAgICAgaWYgbm90IHZhbHVlOgorICAgICAgICAgICAgICAgIHJldHVybiBuZXd2YWx1ZQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlICsgbmV3dmFsdWUKKworICAgICAgICBpZiAidmFyZGVwdmFsdWUiIGluIHZhcmZsYWdzOgorICAgICAgICAgICB2YWx1ZSA9IHZhcmZsYWdzLmdldCgidmFyZGVwdmFsdWUiKQorICAgICAgICBlbGlmIHZhcmZsYWdzLmdldCgiZnVuYyIpOgorICAgICAgICAgICAgaWYgdmFyZmxhZ3MuZ2V0KCJweXRob24iKToKKyAgICAgICAgICAgICAgICBwYXJzZWR2YXIgPSBkLmV4cGFuZFdpdGhSZWZzKHZhbHVlLCBrZXkpCisgICAgICAgICAgICAgICAgcGFyc2VyID0gYmIuY29kZXBhcnNlci5QeXRob25QYXJzZXIoa2V5LCBsb2dnZXIpCisgICAgICAgICAgICAgICAgaWYgcGFyc2VkdmFyLnZhbHVlIGFuZCAiXHQiIGluIHBhcnNlZHZhci52YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlZhcmlhYmxlICVzIGNvbnRhaW5zIHRhYnMsIHBsZWFzZSByZW1vdmUgdGhlc2UgKCVzKSIgJSAoa2V5LCBkLmdldFZhcigiRklMRSIsIFRydWUpKSkKKyAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfcHl0aG9uKHBhcnNlZHZhci52YWx1ZSkKKyAgICAgICAgICAgICAgICBkZXBzID0gZGVwcyB8IHBhcnNlci5yZWZlcmVuY2VzCisgICAgICAgICAgICAgICAgdmFsdWUgPSBoYW5kbGVfY29udGFpbnModmFsdWUsIHBhcnNlci5jb250YWlucywgZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFyc2VkdmFyID0gZC5leHBhbmRXaXRoUmVmcyh2YWx1ZSwga2V5KQorICAgICAgICAgICAgICAgIHBhcnNlciA9IGJiLmNvZGVwYXJzZXIuU2hlbGxQYXJzZXIoa2V5LCBsb2dnZXIpCisgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX3NoZWxsKHBhcnNlZHZhci52YWx1ZSkKKyAgICAgICAgICAgICAgICBkZXBzID0gZGVwcyB8IHNoZWxsZGVwcworICAgICAgICAgICAgaWYgdmFyZGVwcyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHBhcnNlci5sb2cuZmx1c2goKQorICAgICAgICAgICAgaWYgInByZWZ1bmNzIiBpbiB2YXJmbGFnczoKKyAgICAgICAgICAgICAgICBkZXBzID0gZGVwcyB8IHNldCh2YXJmbGFnc1sicHJlZnVuY3MiXS5zcGxpdCgpKQorICAgICAgICAgICAgaWYgInBvc3RmdW5jcyIgaW4gdmFyZmxhZ3M6CisgICAgICAgICAgICAgICAgZGVwcyA9IGRlcHMgfCBzZXQodmFyZmxhZ3NbInBvc3RmdW5jcyJdLnNwbGl0KCkpCisgICAgICAgICAgICBkZXBzID0gZGVwcyB8IHBhcnNlZHZhci5yZWZlcmVuY2VzCisgICAgICAgICAgICBkZXBzID0gZGVwcyB8IChrZXlzICYgcGFyc2VyLmV4ZWNzKSB8IChrZXlzICYgcGFyc2VkdmFyLmV4ZWNzKQorICAgICAgICAgICAgdmFsdWUgPSBoYW5kbGVfY29udGFpbnModmFsdWUsIHBhcnNlZHZhci5jb250YWlucywgZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcnNlciA9IGQuZXhwYW5kV2l0aFJlZnModmFsdWUsIGtleSkKKyAgICAgICAgICAgIGRlcHMgfD0gcGFyc2VyLnJlZmVyZW5jZXMKKyAgICAgICAgICAgIGRlcHMgPSBkZXBzIHwgKGtleXMgJiBwYXJzZXIuZXhlY3MpCisgICAgICAgICAgICB2YWx1ZSA9IGhhbmRsZV9jb250YWlucyh2YWx1ZSwgcGFyc2VyLmNvbnRhaW5zLCBkKQorCisgICAgICAgIGlmICJ2YXJkZXB2YWx1ZWV4Y2x1ZGUiIGluIHZhcmZsYWdzOgorICAgICAgICAgICAgZXhjbHVkZSA9IHZhcmZsYWdzLmdldCgidmFyZGVwdmFsdWVleGNsdWRlIikKKyAgICAgICAgICAgIGZvciBleGNsIGluIGV4Y2x1ZGUuc3BsaXQoJ3wnKToKKyAgICAgICAgICAgICAgICBpZiBleGNsOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoZXhjbCwgJycpCisKKyAgICAgICAgIyBBZGQgdmFyZmxhZ3MsIGFzc3VtaW5nIGFuIGV4Y2x1c2lvbiBsaXN0IGlzIHNldAorICAgICAgICBpZiB2YXJmbGFnc2V4Y2w6CisgICAgICAgICAgICB2YXJmZGVwcyA9IFtdCisgICAgICAgICAgICBmb3IgZiBpbiB2YXJmbGFnczoKKyAgICAgICAgICAgICAgICBpZiBmIG5vdCBpbiB2YXJmbGFnc2V4Y2w6CisgICAgICAgICAgICAgICAgICAgIHZhcmZkZXBzLmFwcGVuZCgnJXNbJXNdJyAlIChrZXksIGYpKQorICAgICAgICAgICAgaWYgdmFyZmRlcHM6CisgICAgICAgICAgICAgICAgZGVwcyB8PSBzZXQodmFyZmRlcHMpCisKKyAgICAgICAgZGVwcyB8PSBzZXQoKHZhcmRlcHMgb3IgIiIpLnNwbGl0KCkpCisgICAgICAgIGRlcHMgLT0gc2V0KHZhcmZsYWdzLmdldCgidmFyZGVwc2V4Y2x1ZGUiLCAiIikuc3BsaXQoKSkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIHJhaXNlIGJiLmRhdGFfc21hcnQuRXhwYW5zaW9uRXJyb3Ioa2V5LCBOb25lLCBlKQorICAgIHJldHVybiBkZXBzLCB2YWx1ZQorICAgICNiYi5ub3RlKCJWYXJpYWJsZSAlcyByZWZlcmVuY2VzICVzIGFuZCBjYWxscyAlcyIgJSAoa2V5LCBzdHIoZGVwcyksIHN0cihleGVjcykpKQorICAgICNkLnNldFZhckZsYWcoa2V5LCAidmFyZGVwcyIsIGRlcHMpCisKK2RlZiBnZW5lcmF0ZV9kZXBlbmRlbmNpZXMoZCk6CisKKyAgICBrZXlzID0gc2V0KGtleSBmb3Iga2V5IGluIGQgaWYgbm90IGtleS5zdGFydHN3aXRoKCJfXyIpKQorICAgIHNoZWxsZGVwcyA9IHNldChrZXkgZm9yIGtleSBpbiBkLmdldFZhcigiX19leHBvcnRsaXN0IiwgRmFsc2UpIGlmIGQuZ2V0VmFyRmxhZyhrZXksICJleHBvcnQiKSBhbmQgbm90IGQuZ2V0VmFyRmxhZyhrZXksICJ1bmV4cG9ydCIpKQorICAgIHZhcmZsYWdzZXhjbCA9IGQuZ2V0VmFyKCdCQl9TSUdOQVRVUkVfRVhDTFVERV9GTEFHUycsIFRydWUpCisKKyAgICBkZXBzID0ge30KKyAgICB2YWx1ZXMgPSB7fQorCisgICAgdGFza2xpc3QgPSBkLmdldFZhcignX19CQlRBU0tTJywgRmFsc2UpIG9yIFtdCisgICAgZm9yIHRhc2sgaW4gdGFza2xpc3Q6CisgICAgICAgIGRlcHNbdGFza10sIHZhbHVlc1t0YXNrXSA9IGJ1aWxkX2RlcGVuZGVuY2llcyh0YXNrLCBrZXlzLCBzaGVsbGRlcHMsIHZhcmZsYWdzZXhjbCwgZCkKKyAgICAgICAgbmV3ZGVwcyA9IGRlcHNbdGFza10KKyAgICAgICAgc2VlbiA9IHNldCgpCisgICAgICAgIHdoaWxlIG5ld2RlcHM6CisgICAgICAgICAgICBuZXh0ZGVwcyA9IG5ld2RlcHMKKyAgICAgICAgICAgIHNlZW4gfD0gbmV4dGRlcHMKKyAgICAgICAgICAgIG5ld2RlcHMgPSBzZXQoKQorICAgICAgICAgICAgZm9yIGRlcCBpbiBuZXh0ZGVwczoKKyAgICAgICAgICAgICAgICBpZiBkZXAgbm90IGluIGRlcHM6CisgICAgICAgICAgICAgICAgICAgIGRlcHNbZGVwXSwgdmFsdWVzW2RlcF0gPSBidWlsZF9kZXBlbmRlbmNpZXMoZGVwLCBrZXlzLCBzaGVsbGRlcHMsIHZhcmZsYWdzZXhjbCwgZCkKKyAgICAgICAgICAgICAgICBuZXdkZXBzIHw9ICBkZXBzW2RlcF0KKyAgICAgICAgICAgIG5ld2RlcHMgLT0gc2VlbgorICAgICAgICAjcHJpbnQgIkZvciAlczogJXMiICUgKHRhc2ssIHN0cihkZXBzW3Rhc2tdKSkKKyAgICByZXR1cm4gdGFza2xpc3QsIGRlcHMsIHZhbHVlcworCitkZWYgaW5oZXJpdHNfY2xhc3Moa2xhc3MsIGQpOgorICAgIHZhbCA9IGQuZ2V0VmFyKCdfX2luaGVyaXRfY2FjaGUnLCBGYWxzZSkgb3IgW10KKyAgICBuZWVkbGUgPSBvcy5wYXRoLmpvaW4oJ2NsYXNzZXMnLCAnJXMuYmJjbGFzcycgJSBrbGFzcykKKyAgICBmb3IgdiBpbiB2YWw6CisgICAgICAgIGlmIHYuZW5kc3dpdGgobmVlZGxlKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2RhdGFfc21hcnQucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2RhdGFfc21hcnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzliNGVkOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZGF0YV9zbWFydC5weQpAQCAtMCwwICsxLDk0MiBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0QmFrZSBTbWFydCBEaWN0aW9uYXJ5IEltcGxlbWVudGF0aW9uCisKK0Z1bmN0aW9ucyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGF0YSBzdHJ1Y3R1cmUgdXNlZCBieSB0aGUKK0JpdEJha2UgYnVpbGQgdG9vbHMuCisKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSAgU2ViIEZyYW5rZW5ndWwKKyMgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2ICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgICAgICAgIFVsaSBMdWNrYXMKKyMgQ29weXJpZ2h0IChDKSAyMDA1ICAgICAgICBST0FEIEdtYkgKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjIEJhc2VkIG9uIGZ1bmN0aW9ucyBmcm9tIHRoZSBiYXNlIGJiIG1vZHVsZSwgQ29weXJpZ2h0IDIwMDMgSG9sZ2VyIFNjaHVyaWcKKworaW1wb3J0IGNvcHksIHJlLCBzeXMsIHRyYWNlYmFjaworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgTXV0YWJsZU1hcHBpbmcKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgaGFzaGxpYgoraW1wb3J0IGJiLCBiYi5jb2RlcGFyc2VyCitmcm9tIGJiICAgaW1wb3J0IHV0aWxzCitmcm9tIGJiLkNPVyAgaW1wb3J0IENPV0RpY3RCYXNlCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlLkRhdGEiKQorCitfX3NldHZhcl9rZXl3b3JkX18gPSBbIl9hcHBlbmQiLCAiX3ByZXBlbmQiLCAiX3JlbW92ZSJdCitfX3NldHZhcl9yZWdleHBfXyA9IHJlLmNvbXBpbGUoJyg/UDxiYXNlPi4qPykoP1A8a2V5d29yZD5fYXBwZW5kfF9wcmVwZW5kfF9yZW1vdmUpKF8oP1A8YWRkPi4qKSk/JCcpCitfX2V4cGFuZF92YXJfcmVnZXhwX18gPSByZS5jb21waWxlKHIiXCR7W157fUBcblx0IF0rfSIpCitfX2V4cGFuZF9weXRob25fcmVnZXhwX18gPSByZS5jb21waWxlKHIiXCR7QC4rP30iKQorCitkZWYgaW5mZXJfY2FsbGVyX2RldGFpbHMobG9naW5mbywgcGFyZW50ID0gRmFsc2UsIHZhcnZhbCA9IFRydWUpOgorICAgICIiIlNhdmUgdGhlIGNhbGxlciB0aGUgdHJvdWJsZSBvZiBzcGVjaWZ5aW5nIGV2ZXJ5dGhpbmcuIiIiCisgICAgIyBTYXZlIGVmZm9ydC4KKyAgICBpZiAnaWdub3JlJyBpbiBsb2dpbmZvIGFuZCBsb2dpbmZvWydpZ25vcmUnXToKKyAgICAgICAgcmV0dXJuCisgICAgIyBJZiBub3RoaW5nIHdhcyBwcm92aWRlZCwgbWFyayB0aGlzIGFzIHBvc3NpYmx5IHVubmVlZGVkLgorICAgIGlmIG5vdCBsb2dpbmZvOgorICAgICAgICBsb2dpbmZvWydpZ25vcmUnXSA9IFRydWUKKyAgICAgICAgcmV0dXJuCisgICAgIyBJbmZlciBjYWxsZXIncyBsaWtlbHkgdmFsdWVzIGZvciB2YXJpYWJsZSAodmFyKSBhbmQgdmFsdWUgKHZhbHVlKSwgCisgICAgIyB0byByZWR1Y2UgY2x1dHRlciBpbiB0aGUgcmVzdCBvZiB0aGUgY29kZS4KKyAgICBhYm92ZSA9IE5vbmUKKyAgICBkZWYgc2V0X2Fib3ZlKCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgdGIgPSBzeXMuZXhjX2luZm8oKVsyXQorICAgICAgICAgICAgaWYgcGFyZW50OgorICAgICAgICAgICAgICAgIHJldHVybiB0Yi50Yl9mcmFtZS5mX2JhY2suZl9iYWNrLmZfYmFjaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdGIudGJfZnJhbWUuZl9iYWNrLmZfYmFjaworCisgICAgaWYgdmFydmFsIGFuZCAoJ3ZhcmlhYmxlJyBub3QgaW4gbG9naW5mbyBvciAnZGV0YWlsJyBub3QgaW4gbG9naW5mbyk6CisgICAgICAgIGlmIG5vdCBhYm92ZToKKyAgICAgICAgICAgIGFib3ZlID0gc2V0X2Fib3ZlKCkKKyAgICAgICAgbGNscyA9IGFib3ZlLmZfbG9jYWxzLml0ZW1zKCkKKyAgICAgICAgZm9yIGssIHYgaW4gbGNsczoKKyAgICAgICAgICAgIGlmIGsgPT0gJ3ZhbHVlJyBhbmQgJ2RldGFpbCcgbm90IGluIGxvZ2luZm86CisgICAgICAgICAgICAgICAgbG9naW5mb1snZGV0YWlsJ10gPSB2CisgICAgICAgICAgICBpZiBrID09ICd2YXInIGFuZCAndmFyaWFibGUnIG5vdCBpbiBsb2dpbmZvOgorICAgICAgICAgICAgICAgIGxvZ2luZm9bJ3ZhcmlhYmxlJ10gPSB2CisgICAgIyBJbmZlciBmaWxlL2xpbmUvZnVuY3Rpb24gZnJvbSB0cmFjZWJhY2sKKyAgICAjIERvbid0IHVzZSB0cmFjZWJhY2suZXh0cmFjdF9zdGFjaygpIHNpbmNlIGl0IGZpbGxzIHRoZSBsaW5lIGNvbnRlbnRzIHdoaWNoCisgICAgIyB3ZSBkb24ndCBuZWVkIGFuZCB0aGF0IGhpdHMgc3RhdCBzeXNjYWxscworICAgIGlmICdmaWxlJyBub3QgaW4gbG9naW5mbzoKKyAgICAgICAgaWYgbm90IGFib3ZlOgorICAgICAgICAgICAgYWJvdmUgPSBzZXRfYWJvdmUoKQorICAgICAgICBmID0gYWJvdmUuZl9iYWNrCisgICAgICAgIGxpbmUgPSBmLmZfbGluZW5vCisgICAgICAgIGZpbGUgPSBmLmZfY29kZS5jb19maWxlbmFtZQorICAgICAgICBmdW5jID0gZi5mX2NvZGUuY29fbmFtZQorICAgICAgICBsb2dpbmZvWydmaWxlJ10gPSBmaWxlCisgICAgICAgIGxvZ2luZm9bJ2xpbmUnXSA9IGxpbmUKKyAgICAgICAgaWYgZnVuYyBub3QgaW4gbG9naW5mbzoKKyAgICAgICAgICAgIGxvZ2luZm9bJ2Z1bmMnXSA9IGZ1bmMKKworY2xhc3MgVmFyaWFibGVQYXJzZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFybmFtZSwgZCwgdmFsID0gTm9uZSk6CisgICAgICAgIHNlbGYudmFybmFtZSA9IHZhcm5hbWUKKyAgICAgICAgc2VsZi5kID0gZAorICAgICAgICBzZWxmLnZhbHVlID0gdmFsCisKKyAgICAgICAgc2VsZi5yZWZlcmVuY2VzID0gc2V0KCkKKyAgICAgICAgc2VsZi5leGVjcyA9IHNldCgpCisgICAgICAgIHNlbGYuY29udGFpbnMgPSB7fQorCisgICAgZGVmIHZhcl9zdWIoc2VsZiwgbWF0Y2gpOgorICAgICAgICAgICAga2V5ID0gbWF0Y2guZ3JvdXAoKVsyOi0xXQorICAgICAgICAgICAgaWYgc2VsZi52YXJuYW1lIGFuZCBrZXk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi52YXJuYW1lID09IGtleToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJ2YXJpYWJsZSAlcyByZWZlcmVuY2VzIGl0c2VsZiEiICUgc2VsZi52YXJuYW1lKQorICAgICAgICAgICAgaWYga2V5IGluIHNlbGYuZC5leHBhbmRfY2FjaGU6CisgICAgICAgICAgICAgICAgdmFycGFyc2UgPSBzZWxmLmQuZXhwYW5kX2NhY2hlW2tleV0KKyAgICAgICAgICAgICAgICB2YXIgPSB2YXJwYXJzZS52YWx1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2YXIgPSBzZWxmLmQuZ2V0VmFyRmxhZyhrZXksICJfY29udGVudCIsIFRydWUpCisgICAgICAgICAgICBzZWxmLnJlZmVyZW5jZXMuYWRkKGtleSkKKyAgICAgICAgICAgIGlmIHZhciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgpCisKKyAgICBkZWYgcHl0aG9uX3N1YihzZWxmLCBtYXRjaCk6CisgICAgICAgICAgICBjb2RlID0gbWF0Y2guZ3JvdXAoKVszOi0xXQorICAgICAgICAgICAgY29kZW9iaiA9IGNvbXBpbGUoY29kZS5zdHJpcCgpLCBzZWxmLnZhcm5hbWUgb3IgIjxleHBhbnNpb24+IiwgImV2YWwiKQorCisgICAgICAgICAgICBwYXJzZXIgPSBiYi5jb2RlcGFyc2VyLlB5dGhvblBhcnNlcihzZWxmLnZhcm5hbWUsIGxvZ2dlcikKKyAgICAgICAgICAgIHBhcnNlci5wYXJzZV9weXRob24oY29kZSkKKyAgICAgICAgICAgIGlmIHNlbGYudmFybmFtZToKKyAgICAgICAgICAgICAgICB2YXJkZXBzID0gc2VsZi5kLmdldFZhckZsYWcoc2VsZi52YXJuYW1lLCAidmFyZGVwcyIsIFRydWUpCisgICAgICAgICAgICAgICAgaWYgdmFyZGVwcyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBwYXJzZXIubG9nLmZsdXNoKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFyc2VyLmxvZy5mbHVzaCgpCisgICAgICAgICAgICBzZWxmLnJlZmVyZW5jZXMgfD0gcGFyc2VyLnJlZmVyZW5jZXMKKyAgICAgICAgICAgIHNlbGYuZXhlY3MgfD0gcGFyc2VyLmV4ZWNzCisKKyAgICAgICAgICAgIGZvciBrIGluIHBhcnNlci5jb250YWluczoKKyAgICAgICAgICAgICAgICBpZiBrIG5vdCBpbiBzZWxmLmNvbnRhaW5zOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbnRhaW5zW2tdID0gcGFyc2VyLmNvbnRhaW5zW2tdLmNvcHkoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29udGFpbnNba10udXBkYXRlKHBhcnNlci5jb250YWluc1trXSkKKyAgICAgICAgICAgIHZhbHVlID0gdXRpbHMuYmV0dGVyX2V2YWwoY29kZW9iaiwgRGF0YUNvbnRleHQoc2VsZi5kKSkKKyAgICAgICAgICAgIHJldHVybiBzdHIodmFsdWUpCisKKworY2xhc3MgRGF0YUNvbnRleHQoZGljdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGFkYXRhLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYubWV0YWRhdGEgPSBtZXRhZGF0YQorICAgICAgICBkaWN0Ll9faW5pdF9fKHNlbGYsICoqa3dhcmdzKQorICAgICAgICBzZWxmWydkJ10gPSBtZXRhZGF0YQorCisgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtleSk6CisgICAgICAgIHZhbHVlID0gc2VsZi5tZXRhZGF0YS5nZXRWYXIoa2V5LCBUcnVlKQorICAgICAgICBpZiB2YWx1ZSBpcyBOb25lIG9yIHNlbGYubWV0YWRhdGEuZ2V0VmFyRmxhZyhrZXksICdmdW5jJyk6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcihrZXkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKworY2xhc3MgRXhwYW5zaW9uRXJyb3IoRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFybmFtZSwgZXhwcmVzc2lvbiwgZXhjZXB0aW9uKToKKyAgICAgICAgc2VsZi5leHByZXNzaW9uID0gZXhwcmVzc2lvbgorICAgICAgICBzZWxmLnZhcmlhYmxlbmFtZSA9IHZhcm5hbWUKKyAgICAgICAgc2VsZi5leGNlcHRpb24gPSBleGNlcHRpb24KKyAgICAgICAgaWYgdmFybmFtZToKKyAgICAgICAgICAgIGlmIGV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgc2VsZi5tc2cgPSAiRmFpbHVyZSBleHBhbmRpbmcgdmFyaWFibGUgJXMsIGV4cHJlc3Npb24gd2FzICVzIHdoaWNoIHRyaWdnZXJlZCBleGNlcHRpb24gJXM6ICVzIiAlICh2YXJuYW1lLCBleHByZXNzaW9uLCB0eXBlKGV4Y2VwdGlvbikuX19uYW1lX18sIGV4Y2VwdGlvbikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5tc2cgPSAiRmFpbHVyZSBleHBhbmRpbmcgdmFyaWFibGUgJXM6ICVzOiAlcyIgJSAodmFybmFtZSwgdHlwZShleGNlcHRpb24pLl9fbmFtZV9fLCBleGNlcHRpb24pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLm1zZyA9ICJGYWlsdXJlIGV4cGFuZGluZyBleHByZXNzaW9uICVzIHdoaWNoIHRyaWdnZXJlZCBleGNlcHRpb24gJXM6ICVzIiAlIChleHByZXNzaW9uLCB0eXBlKGV4Y2VwdGlvbikuX19uYW1lX18sIGV4Y2VwdGlvbikKKyAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIHNlbGYubXNnKQorICAgICAgICBzZWxmLmFyZ3MgPSAodmFybmFtZSwgZXhwcmVzc2lvbiwgZXhjZXB0aW9uKQorICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5tc2cKKworY2xhc3MgSW5jbHVkZUhpc3Rvcnkob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50ID0gTm9uZSwgZmlsZW5hbWUgPSAnW1RPUCBMRVZFTF0nKToKKyAgICAgICAgc2VsZi5wYXJlbnQgPSBwYXJlbnQKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYuY2hpbGRyZW4gPSBbXQorICAgICAgICBzZWxmLmN1cnJlbnQgPSBzZWxmCisKKyAgICBkZWYgY29weShzZWxmKToKKyAgICAgICAgbmV3ID0gSW5jbHVkZUhpc3Rvcnkoc2VsZi5wYXJlbnQsIHNlbGYuZmlsZW5hbWUpCisgICAgICAgIGZvciBjIGluIHNlbGYuY2hpbGRyZW46CisgICAgICAgICAgICBuZXcuY2hpbGRyZW4uYXBwZW5kKGMpCisgICAgICAgIHJldHVybiBuZXcKKworICAgIGRlZiBpbmNsdWRlKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgbmV3ZmlsZSA9IEluY2x1ZGVIaXN0b3J5KHNlbGYuY3VycmVudCwgZmlsZW5hbWUpCisgICAgICAgIHNlbGYuY3VycmVudC5jaGlsZHJlbi5hcHBlbmQobmV3ZmlsZSkKKyAgICAgICAgc2VsZi5jdXJyZW50ID0gbmV3ZmlsZQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGEsIGIsIGMpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnQucGFyZW50OgorICAgICAgICAgICAgc2VsZi5jdXJyZW50ID0gc2VsZi5jdXJyZW50LnBhcmVudAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIud2FybigiSW5jbHVkZSBsb2c6IFRyaWVkIHRvIGZpbmlzaCAnJXMnIGF0IHRvcCBsZXZlbC4iICUgZmlsZW5hbWUpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGVtaXQoc2VsZiwgbywgbGV2ZWwgPSAwKToKKyAgICAgICAgIiIiRW1pdCBhbiBpbmNsdWRlIGhpc3RvcnkgZmlsZSwgYW5kIGl0cyBjaGlsZHJlbi4iIiIKKyAgICAgICAgaWYgbGV2ZWw6CisgICAgICAgICAgICBzcGFjZXMgPSAiICAiICogKGxldmVsIC0gMSkKKyAgICAgICAgICAgIG8ud3JpdGUoIiMgJXMlcyIgJSAoc3BhY2VzLCBzZWxmLmZpbGVuYW1lKSkKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLmNoaWxkcmVuKSA+IDA6CisgICAgICAgICAgICAgICAgby53cml0ZSgiIGluY2x1ZGVzOiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvLndyaXRlKCIjXG4jIElOQ0xVREUgSElTVE9SWTpcbiMiKQorICAgICAgICBsZXZlbCA9IGxldmVsICsgMQorICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5jaGlsZHJlbjoKKyAgICAgICAgICAgIG8ud3JpdGUoIlxuIikKKyAgICAgICAgICAgIGNoaWxkLmVtaXQobywgbGV2ZWwpCisKK2NsYXNzIFZhcmlhYmxlSGlzdG9yeShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhcm9vdCk6CisgICAgICAgIHNlbGYuZGF0YXJvb3QgPSBkYXRhcm9vdAorICAgICAgICBzZWxmLnZhcmlhYmxlcyA9IENPV0RpY3RCYXNlLmNvcHkoKQorCisgICAgZGVmIGNvcHkoc2VsZik6CisgICAgICAgIG5ldyA9IFZhcmlhYmxlSGlzdG9yeShzZWxmLmRhdGFyb290KQorICAgICAgICBuZXcudmFyaWFibGVzID0gc2VsZi52YXJpYWJsZXMuY29weSgpCisgICAgICAgIHJldHVybiBuZXcKKworICAgIGRlZiByZWNvcmQoc2VsZiwgKmt3b25seSwgKipsb2dpbmZvKToKKyAgICAgICAgaWYgbm90IHNlbGYuZGF0YXJvb3QuX3RyYWNraW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIGxlbihrd29ubHkpID4gMDoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgorICAgICAgICBpbmZlcl9jYWxsZXJfZGV0YWlscyhsb2dpbmZvLCBwYXJlbnQgPSBUcnVlKQorICAgICAgICBpZiAnaWdub3JlJyBpbiBsb2dpbmZvIGFuZCBsb2dpbmZvWydpZ25vcmUnXToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiAnb3AnIG5vdCBpbiBsb2dpbmZvIG9yIG5vdCBsb2dpbmZvWydvcCddOgorICAgICAgICAgICAgbG9naW5mb1snb3AnXSA9ICdzZXQnCisgICAgICAgIGlmICdkZXRhaWwnIGluIGxvZ2luZm86CisgICAgICAgICAgICBsb2dpbmZvWydkZXRhaWwnXSA9IHN0cihsb2dpbmZvWydkZXRhaWwnXSkKKyAgICAgICAgaWYgJ3ZhcmlhYmxlJyBub3QgaW4gbG9naW5mbyBvciAnZmlsZScgbm90IGluIGxvZ2luZm86CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJyZWNvcmQoKSBtaXNzaW5nIHZhcmlhYmxlIG9yIGZpbGUuIikKKyAgICAgICAgdmFyID0gbG9naW5mb1sndmFyaWFibGUnXQorCisgICAgICAgIGlmIHZhciBub3QgaW4gc2VsZi52YXJpYWJsZXM6CisgICAgICAgICAgICBzZWxmLnZhcmlhYmxlc1t2YXJdID0gW10KKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi52YXJpYWJsZXNbdmFyXSwgbGlzdCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgJ25vZHVwcycgaW4gbG9naW5mbyBhbmQgbG9naW5mbyBpbiBzZWxmLnZhcmlhYmxlc1t2YXJdOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYudmFyaWFibGVzW3Zhcl0uYXBwZW5kKGxvZ2luZm8uY29weSgpKQorCisgICAgZGVmIHZhcmlhYmxlKHNlbGYsIHZhcik6CisgICAgICAgIGlmIHZhciBpbiBzZWxmLnZhcmlhYmxlczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnZhcmlhYmxlc1t2YXJdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gW10KKworICAgIGRlZiBlbWl0KHNlbGYsIHZhciwgb3ZhbCwgdmFsLCBvLCBkKToKKyAgICAgICAgaGlzdG9yeSA9IHNlbGYudmFyaWFibGUodmFyKQorCisgICAgICAgICMgQXBwZW5kIG92ZXJyaWRlIGhpc3RvcnkKKyAgICAgICAgaWYgdmFyIGluIGQub3ZlcnJpZGVkYXRhOgorICAgICAgICAgICAgZm9yIChyLCBvdmVycmlkZSkgaW4gZC5vdmVycmlkZWRhdGFbdmFyXToKKyAgICAgICAgICAgICAgICBmb3IgZXZlbnQgaW4gc2VsZi52YXJpYWJsZShyKToKKyAgICAgICAgICAgICAgICAgICAgbG9naW5mbyA9IGV2ZW50LmNvcHkoKQorICAgICAgICAgICAgICAgICAgICBpZiAnZmxhZycgaW4gbG9naW5mbyBhbmQgbm90IGxvZ2luZm9bJ2ZsYWcnXS5zdGFydHN3aXRoKCJfIik6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBsb2dpbmZvWyd2YXJpYWJsZSddID0gdmFyCisgICAgICAgICAgICAgICAgICAgIGxvZ2luZm9bJ29wJ10gPSAnb3ZlcnJpZGVbJXNdOiVzJyAlIChvdmVycmlkZSwgbG9naW5mb1snb3AnXSkKKyAgICAgICAgICAgICAgICAgICAgaGlzdG9yeS5hcHBlbmQobG9naW5mbykKKworICAgICAgICBjb21tZW50VmFsID0gcmUuc3ViKCdcbicsICdcbiMnLCBzdHIob3ZhbCkpCisgICAgICAgIGlmIGhpc3Rvcnk6CisgICAgICAgICAgICBpZiBsZW4oaGlzdG9yeSkgPT0gMToKKyAgICAgICAgICAgICAgICBvLndyaXRlKCIjXG4jICQlc1xuIiAlIHZhcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgby53cml0ZSgiI1xuIyAkJXMgWyVkIG9wZXJhdGlvbnNdXG4iICUgKHZhciwgbGVuKGhpc3RvcnkpKSkKKyAgICAgICAgICAgIGZvciBldmVudCBpbiBoaXN0b3J5OgorICAgICAgICAgICAgICAgICMgby53cml0ZSgiIyAlc1xuIiAlIHN0cihldmVudCkpCisgICAgICAgICAgICAgICAgaWYgJ2Z1bmMnIGluIGV2ZW50OgorICAgICAgICAgICAgICAgICAgICAjIElmIHdlIGhhdmUgYSBmdW5jdGlvbiBsaXN0ZWQsIHRoaXMgaXMgaW50ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgIyBjb2RlLCBub3QgYW4gb3BlcmF0aW9uIGluIGEgY29uZmlnIGZpbGUsIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyBmdWxsIHBhdGggaXMgZGlzdHJhY3RpbmcuCisgICAgICAgICAgICAgICAgICAgIGV2ZW50WydmaWxlJ10gPSByZS5zdWIoJy4qLycsICcnLCBldmVudFsnZmlsZSddKQorICAgICAgICAgICAgICAgICAgICBkaXNwbGF5X2Z1bmMgPSAnIFslc10nICUgZXZlbnRbJ2Z1bmMnXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlfZnVuYyA9ICcnCisgICAgICAgICAgICAgICAgaWYgJ2ZsYWcnIGluIGV2ZW50OgorICAgICAgICAgICAgICAgICAgICBmbGFnID0gJ1slc10gJyAlIChldmVudFsnZmxhZyddKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZsYWcgPSAnJworICAgICAgICAgICAgICAgIG8ud3JpdGUoIiMgICAlcyAlczolcyVzXG4jICAgICAlc1wiJXNcIlxuIiAlIChldmVudFsnb3AnXSwgZXZlbnRbJ2ZpbGUnXSwgZXZlbnRbJ2xpbmUnXSwgZGlzcGxheV9mdW5jLCBmbGFnLCByZS5zdWIoJ1xuJywgJ1xuIyAgICAgJywgZXZlbnRbJ2RldGFpbCddKSkpCisgICAgICAgICAgICBpZiBsZW4oaGlzdG9yeSkgPiAxOgorICAgICAgICAgICAgICAgIG8ud3JpdGUoIiMgcHJlLWV4cGFuc2lvbiB2YWx1ZTpcbiIpCisgICAgICAgICAgICAgICAgby53cml0ZSgnIyAgICIlcyJcbicgJSAoY29tbWVudFZhbCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvLndyaXRlKCIjXG4jICQlc1xuIyAgIFtubyBoaXN0b3J5IHJlY29yZGVkXVxuI1xuIiAlIHZhcikKKyAgICAgICAgICAgIG8ud3JpdGUoJyMgICAiJXMiXG4nICUgKGNvbW1lbnRWYWwpKQorCisgICAgZGVmIGdldF92YXJpYWJsZV9maWxlcyhzZWxmLCB2YXIpOgorICAgICAgICAiIiJHZXQgdGhlIGZpbGVzIHdoZXJlIG9wZXJhdGlvbnMgYXJlIG1hZGUgb24gYSB2YXJpYWJsZSIiIgorICAgICAgICB2YXJfaGlzdG9yeSA9IHNlbGYudmFyaWFibGUodmFyKQorICAgICAgICBmaWxlcyA9IFtdCisgICAgICAgIGZvciBldmVudCBpbiB2YXJfaGlzdG9yeToKKyAgICAgICAgICAgIGZpbGVzLmFwcGVuZChldmVudFsnZmlsZSddKQorICAgICAgICByZXR1cm4gZmlsZXMKKworICAgIGRlZiBnZXRfdmFyaWFibGVfbGluZXMoc2VsZiwgdmFyLCBmKToKKyAgICAgICAgIiIiR2V0IHRoZSBsaW5lIHdoZXJlIGEgb3BlcmF0aW9uIGlzIG1hZGUgb24gYSB2YXJpYWJsZSBpbiBmaWxlIGYiIiIKKyAgICAgICAgdmFyX2hpc3RvcnkgPSBzZWxmLnZhcmlhYmxlKHZhcikKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3IgZXZlbnQgaW4gdmFyX2hpc3Rvcnk6CisgICAgICAgICAgICBpZiBmPT0gZXZlbnRbJ2ZpbGUnXToKKyAgICAgICAgICAgICAgICBsaW5lID0gZXZlbnRbJ2xpbmUnXQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICByZXR1cm4gbGluZXMKKworICAgIGRlZiBnZXRfdmFyaWFibGVfaXRlbXNfZmlsZXMoc2VsZiwgdmFyLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIFVzZSB2YXJpYWJsZSBoaXN0b3J5IHRvIG1hcCBpdGVtcyBhZGRlZCB0byBhIGxpc3QgdmFyaWFibGUgYW5kCisgICAgICAgIHRoZSBmaWxlcyBpbiB3aGljaCB0aGV5IHdlcmUgYWRkZWQuCisgICAgICAgICIiIgorICAgICAgICBoaXN0b3J5ID0gc2VsZi52YXJpYWJsZSh2YXIpCisgICAgICAgIGZpbmFsaXRlbXMgPSAoZC5nZXRWYXIodmFyLCBUcnVlKSBvciAnJykuc3BsaXQoKQorICAgICAgICBmaWxlbWFwID0ge30KKyAgICAgICAgaXNzZXQgPSBGYWxzZQorICAgICAgICBmb3IgZXZlbnQgaW4gaGlzdG9yeToKKyAgICAgICAgICAgIGlmICdmbGFnJyBpbiBldmVudDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZXZlbnRbJ29wJ10gPT0gJ19yZW1vdmUnOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc3NldCBhbmQgZXZlbnRbJ29wJ10gPT0gJ3NldD8nOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpc3NldCA9IFRydWUKKyAgICAgICAgICAgIGl0ZW1zID0gZC5leHBhbmQoZXZlbnRbJ2RldGFpbCddKS5zcGxpdCgpCisgICAgICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKKyAgICAgICAgICAgICAgICAjIFRoaXMgaXMgYSBsaXR0bGUgY3J1ZGUgYnV0IGlzIGJlbHQtYW5kLWJyYWNlcyB0byBhdm9pZCB1cworICAgICAgICAgICAgICAgICMgaGF2aW5nIHRvIGhhbmRsZSBldmVyeSBwb3NzaWJsZSBvcGVyYXRpb24gdHlwZSBzcGVjaWZpY2FsbHkKKyAgICAgICAgICAgICAgICBpZiBpdGVtIGluIGZpbmFsaXRlbXMgYW5kIG5vdCBpdGVtIGluIGZpbGVtYXA6CisgICAgICAgICAgICAgICAgICAgIGZpbGVtYXBbaXRlbV0gPSBldmVudFsnZmlsZSddCisgICAgICAgIHJldHVybiBmaWxlbWFwCisKKyAgICBkZWYgZGVsX3Zhcl9oaXN0b3J5KHNlbGYsIHZhciwgZj1Ob25lLCBsaW5lPU5vbmUpOgorICAgICAgICAiIiJJZiBmaWxlIGYgYW5kIGxpbmUgYXJlIG5vdCBnaXZlbiwgdGhlIGVudGlyZSBoaXN0b3J5IG9mIHZhciBpcyBkZWxldGVkIiIiCisgICAgICAgIGlmIHZhciBpbiBzZWxmLnZhcmlhYmxlczoKKyAgICAgICAgICAgIGlmIGYgYW5kIGxpbmU6CisgICAgICAgICAgICAgICAgc2VsZi52YXJpYWJsZXNbdmFyXSA9IFsgeCBmb3IgeCBpbiBzZWxmLnZhcmlhYmxlc1t2YXJdIGlmIHhbJ2ZpbGUnXSE9ZiBhbmQgeFsnbGluZSddIT1saW5lXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnZhcmlhYmxlc1t2YXJdID0gW10KKworY2xhc3MgRGF0YVNtYXJ0KE11dGFibGVNYXBwaW5nKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuZGljdCA9IHt9CisKKyAgICAgICAgc2VsZi5pbmNoaXN0b3J5ID0gSW5jbHVkZUhpc3RvcnkoKQorICAgICAgICBzZWxmLnZhcmhpc3RvcnkgPSBWYXJpYWJsZUhpc3Rvcnkoc2VsZikKKyAgICAgICAgc2VsZi5fdHJhY2tpbmcgPSBGYWxzZQorCisgICAgICAgIHNlbGYuZXhwYW5kX2NhY2hlID0ge30KKworICAgICAgICAjIGNvb2tpZSBtb25zdGVyIHRyaWJ1dGUKKyAgICAgICAgIyBOZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgd3JpdGVzIHRvIG92ZXJyaWRlZGF0YSBhcworICAgICAgICAjIGl0cyBvbmx5IGEgc2hhbGxvdyBjb3B5LCBjb3VsZCBpbmZsdWVuY2Ugb3RoZXIgZGF0YSBzdG9yZQorICAgICAgICAjIGNvcGllcyEKKyAgICAgICAgc2VsZi5vdmVycmlkZWRhdGEgPSB7fQorICAgICAgICBzZWxmLm92ZXJyaWRlcyA9IE5vbmUKKyAgICAgICAgc2VsZi5vdmVycmlkZXZhcnMgPSBzZXQoWyJPVkVSUklERVMiLCAiRklMRSJdKQorICAgICAgICBzZWxmLmlub3ZlcnJpZGUgPSBGYWxzZQorCisgICAgZGVmIGVuYWJsZVRyYWNraW5nKHNlbGYpOgorICAgICAgICBzZWxmLl90cmFja2luZyA9IFRydWUKKworICAgIGRlZiBkaXNhYmxlVHJhY2tpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX3RyYWNraW5nID0gRmFsc2UKKworICAgIGRlZiBleHBhbmRXaXRoUmVmcyhzZWxmLCBzLCB2YXJuYW1lKToKKworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBiYXNlc3RyaW5nKTogIyBzYW5pdHkgY2hlY2sKKyAgICAgICAgICAgIHJldHVybiBWYXJpYWJsZVBhcnNlKHZhcm5hbWUsIHNlbGYsIHMpCisKKyAgICAgICAgaWYgdmFybmFtZSBhbmQgdmFybmFtZSBpbiBzZWxmLmV4cGFuZF9jYWNoZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmV4cGFuZF9jYWNoZVt2YXJuYW1lXQorCisgICAgICAgIHZhcnBhcnNlID0gVmFyaWFibGVQYXJzZSh2YXJuYW1lLCBzZWxmKQorCisgICAgICAgIHdoaWxlIHMuZmluZCgnJHsnKSAhPSAtMToKKyAgICAgICAgICAgIG9sZHMgPSBzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcyA9IF9fZXhwYW5kX3Zhcl9yZWdleHBfXy5zdWIodmFycGFyc2UudmFyX3N1YiwgcykKKyAgICAgICAgICAgICAgICBzID0gX19leHBhbmRfcHl0aG9uX3JlZ2V4cF9fLnN1Yih2YXJwYXJzZS5weXRob25fc3ViLCBzKQorICAgICAgICAgICAgICAgIGlmIHMgPT0gb2xkczoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBFeHBhbnNpb25FcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IGJiLnBhcnNlLlNraXBSZWNpcGU6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIGV4Y19jbGFzcywgZXhjLCB0YiA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICAgICAgcmFpc2UgRXhwYW5zaW9uRXJyb3IsIEV4cGFuc2lvbkVycm9yKHZhcm5hbWUsIHMsIGV4YyksIHRiCisKKyAgICAgICAgdmFycGFyc2UudmFsdWUgPSBzCisKKyAgICAgICAgaWYgdmFybmFtZToKKyAgICAgICAgICAgIHNlbGYuZXhwYW5kX2NhY2hlW3Zhcm5hbWVdID0gdmFycGFyc2UKKworICAgICAgICByZXR1cm4gdmFycGFyc2UKKworICAgIGRlZiBleHBhbmQoc2VsZiwgcywgdmFybmFtZSA9IE5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5leHBhbmRXaXRoUmVmcyhzLCB2YXJuYW1lKS52YWx1ZQorCisgICAgZGVmIGZpbmFsaXplKHNlbGYsIHBhcmVudCA9IEZhbHNlKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgaW50ZXJuYWxfZmluYWxpemUoc2VsZiwgcGFyZW50ID0gRmFsc2UpOgorICAgICAgICAiIiJQZXJmb3JtcyBmaW5hbCBzdGVwcyB1cG9uIHRoZSBkYXRhc3RvcmUsIGluY2x1ZGluZyBhcHBsaWNhdGlvbiBvZiBvdmVycmlkZXMiIiIKKyAgICAgICAgc2VsZi5vdmVycmlkZXMgPSBOb25lCisKKyAgICBkZWYgbmVlZF9vdmVycmlkZXMoc2VsZik6CisgICAgICAgIGlmIHNlbGYub3ZlcnJpZGVzIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLmlub3ZlcnJpZGU6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzZWxmLmlub3ZlcnJpZGUgPSBUcnVlCisgICAgICAgICAgICAjIENhbiBlbmQgdXAgaGVyZSByZWN1cnNpdmVseSBzbyBzZXR1cCBkdW1teSB2YWx1ZXMKKyAgICAgICAgICAgIHNlbGYub3ZlcnJpZGVzID0gW10KKyAgICAgICAgICAgIHNlbGYub3ZlcnJpZGVzc2V0ID0gc2V0KCkKKyAgICAgICAgICAgIHNlbGYub3ZlcnJpZGVzID0gKHNlbGYuZ2V0VmFyKCJPVkVSUklERVMiLCBUcnVlKSBvciAiIikuc3BsaXQoIjoiKSBvciBbXQorICAgICAgICAgICAgc2VsZi5vdmVycmlkZXNzZXQgPSBzZXQoc2VsZi5vdmVycmlkZXMpCisgICAgICAgICAgICBzZWxmLmlub3ZlcnJpZGUgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5leHBhbmRfY2FjaGUgPSB7fQorCisgICAgZGVmIGluaXRWYXIoc2VsZiwgdmFyKToKKyAgICAgICAgc2VsZi5leHBhbmRfY2FjaGUgPSB7fQorICAgICAgICBpZiBub3QgdmFyIGluIHNlbGYuZGljdDoKKyAgICAgICAgICAgIHNlbGYuZGljdFt2YXJdID0ge30KKworICAgIGRlZiBfZmluZFZhcihzZWxmLCB2YXIpOgorICAgICAgICBkZXN0ID0gc2VsZi5kaWN0CisgICAgICAgIHdoaWxlIGRlc3Q6CisgICAgICAgICAgICBpZiB2YXIgaW4gZGVzdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVzdFt2YXJdCisKKyAgICAgICAgICAgIGlmICJfZGF0YSIgbm90IGluIGRlc3Q6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGRlc3QgPSBkZXN0WyJfZGF0YSJdCisKKyAgICBkZWYgX21ha2VTaGFkb3dDb3B5KHNlbGYsIHZhcik6CisgICAgICAgIGlmIHZhciBpbiBzZWxmLmRpY3Q6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBsb2NhbF92YXIgPSBzZWxmLl9maW5kVmFyKHZhcikKKworICAgICAgICBpZiBsb2NhbF92YXI6CisgICAgICAgICAgICBzZWxmLmRpY3RbdmFyXSA9IGNvcHkuY29weShsb2NhbF92YXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmluaXRWYXIodmFyKQorCisKKyAgICBkZWYgc2V0VmFyKHNlbGYsIHZhciwgdmFsdWUsICoqbG9naW5mbyk6CisgICAgICAgICNwcmludCgidmFyPSIgKyBzdHIodmFyKSArICIgIHZhbD0iICsgc3RyKHZhbHVlKSkKKyAgICAgICAgcGFyc2luZz1GYWxzZQorICAgICAgICBpZiAncGFyc2luZycgaW4gbG9naW5mbzoKKyAgICAgICAgICAgIHBhcnNpbmc9VHJ1ZQorCisgICAgICAgIGlmICdvcCcgbm90IGluIGxvZ2luZm86CisgICAgICAgICAgICBsb2dpbmZvWydvcCddID0gInNldCIKKyAgICAgICAgc2VsZi5leHBhbmRfY2FjaGUgPSB7fQorICAgICAgICBtYXRjaCAgPSBfX3NldHZhcl9yZWdleHBfXy5tYXRjaCh2YXIpCisgICAgICAgIGlmIG1hdGNoIGFuZCBtYXRjaC5ncm91cCgia2V5d29yZCIpIGluIF9fc2V0dmFyX2tleXdvcmRfXzoKKyAgICAgICAgICAgIGJhc2UgPSBtYXRjaC5ncm91cCgnYmFzZScpCisgICAgICAgICAgICBrZXl3b3JkID0gbWF0Y2guZ3JvdXAoImtleXdvcmQiKQorICAgICAgICAgICAgb3ZlcnJpZGUgPSBtYXRjaC5ncm91cCgnYWRkJykKKyAgICAgICAgICAgIGwgPSBzZWxmLmdldFZhckZsYWcoYmFzZSwga2V5d29yZCkgb3IgW10KKyAgICAgICAgICAgIGwuYXBwZW5kKFt2YWx1ZSwgb3ZlcnJpZGVdKQorICAgICAgICAgICAgc2VsZi5zZXRWYXJGbGFnKGJhc2UsIGtleXdvcmQsIGwsIGlnbm9yZT1UcnVlKQorICAgICAgICAgICAgIyBBbmQgY2F1c2UgdGhhdCB0byBiZSByZWNvcmRlZDoKKyAgICAgICAgICAgIGxvZ2luZm9bJ2RldGFpbCddID0gdmFsdWUKKyAgICAgICAgICAgIGxvZ2luZm9bJ3ZhcmlhYmxlJ10gPSBiYXNlCisgICAgICAgICAgICBpZiBvdmVycmlkZToKKyAgICAgICAgICAgICAgICBsb2dpbmZvWydvcCddID0gJyVzWyVzXScgJSAoa2V5d29yZCwgb3ZlcnJpZGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2luZm9bJ29wJ10gPSBrZXl3b3JkCisgICAgICAgICAgICBzZWxmLnZhcmhpc3RvcnkucmVjb3JkKCoqbG9naW5mbykKKyAgICAgICAgICAgICMgdG9kbyBtYWtlIHN1cmUga2V5d29yZCBpcyBub3QgX19kb2NfXyBvciBfX21vZHVsZV9fCisgICAgICAgICAgICAjIHBheSB0aGUgY29va2llIG1vbnN0ZXIKKworICAgICAgICAgICAgIyBtb3JlIGNvb2tpZXMgZm9yIHRoZSBjb29raWUgbW9uc3RlcgorICAgICAgICAgICAgaWYgJ18nIGluIHZhcjoKKyAgICAgICAgICAgICAgICBzZWxmLl9zZXR2YXJfdXBkYXRlX292ZXJyaWRlcyhiYXNlLCAqKmxvZ2luZm8pCisKKworICAgICAgICAgICAgaWYgYmFzZSBpbiBzZWxmLm92ZXJyaWRldmFyczoKKyAgICAgICAgICAgICAgICBzZWxmLm92ZXJyaWRldmFycy51cGRhdGUoc2VsZi5leHBhbmRXaXRoUmVmcyh2YWx1ZSwgdmFyKS5yZWZlcmVuY2VzKQorICAgICAgICAgICAgICAgIHNlbGYuaW50ZXJuYWxfZmluYWxpemUoVHJ1ZSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCB2YXIgaW4gc2VsZi5kaWN0OgorICAgICAgICAgICAgc2VsZi5fbWFrZVNoYWRvd0NvcHkodmFyKQorCisgICAgICAgIGlmIG5vdCBwYXJzaW5nOgorICAgICAgICAgICAgaWYgIl9hcHBlbmQiIGluIHNlbGYuZGljdFt2YXJdOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLmRpY3RbdmFyXVsiX2FwcGVuZCJdCisgICAgICAgICAgICBpZiAiX3ByZXBlbmQiIGluIHNlbGYuZGljdFt2YXJdOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLmRpY3RbdmFyXVsiX3ByZXBlbmQiXQorICAgICAgICAgICAgaWYgdmFyIGluIHNlbGYub3ZlcnJpZGVkYXRhOgorICAgICAgICAgICAgICAgIGFjdGl2ZSA9IFtdCisgICAgICAgICAgICAgICAgc2VsZi5uZWVkX292ZXJyaWRlcygpCisgICAgICAgICAgICAgICAgZm9yIChyLCBvKSBpbiBzZWxmLm92ZXJyaWRlZGF0YVt2YXJdOgorICAgICAgICAgICAgICAgICAgICBpZiBvIGluIHNlbGYub3ZlcnJpZGVzc2V0OgorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlLmFwcGVuZChyKQorICAgICAgICAgICAgICAgICAgICBlbGlmICJfIiBpbiBvOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2V0KG8uc3BsaXQoIl8iKSkuaXNzdWJzZXQoc2VsZi5vdmVycmlkZXNzZXQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZS5hcHBlbmQocikKKyAgICAgICAgICAgICAgICBmb3IgYSBpbiBhY3RpdmU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVsVmFyKGEpCisgICAgICAgICAgICAgICAgZGVsIHNlbGYub3ZlcnJpZGVkYXRhW3Zhcl0KKworICAgICAgICAjIG1vcmUgY29va2llcyBmb3IgdGhlIGNvb2tpZSBtb25zdGVyCisgICAgICAgIGlmICdfJyBpbiB2YXI6CisgICAgICAgICAgICBzZWxmLl9zZXR2YXJfdXBkYXRlX292ZXJyaWRlcyh2YXIsICoqbG9naW5mbykKKworICAgICAgICAjIHNldHRpbmcgdmFyCisgICAgICAgIHNlbGYuZGljdFt2YXJdWyJfY29udGVudCJdID0gdmFsdWUKKyAgICAgICAgc2VsZi52YXJoaXN0b3J5LnJlY29yZCgqKmxvZ2luZm8pCisKKyAgICAgICAgaWYgdmFyIGluIHNlbGYub3ZlcnJpZGV2YXJzOgorICAgICAgICAgICAgc2VsZi5vdmVycmlkZXZhcnMudXBkYXRlKHNlbGYuZXhwYW5kV2l0aFJlZnModmFsdWUsIHZhcikucmVmZXJlbmNlcykKKyAgICAgICAgICAgIHNlbGYuaW50ZXJuYWxfZmluYWxpemUoVHJ1ZSkKKworICAgIGRlZiBfc2V0dmFyX3VwZGF0ZV9vdmVycmlkZXMoc2VsZiwgdmFyLCAqKmxvZ2luZm8pOgorICAgICAgICAjIGFrYSBwYXkgdGhlIGNvb2tpZSBtb25zdGVyCisgICAgICAgIG92ZXJyaWRlID0gdmFyW3Zhci5yZmluZCgnXycpKzE6XQorICAgICAgICBzaG9ydHZhciA9IHZhcls6dmFyLnJmaW5kKCdfJyldCisgICAgICAgIHdoaWxlIG92ZXJyaWRlOgorICAgICAgICAgICAgaWYgc2hvcnR2YXIgbm90IGluIHNlbGYub3ZlcnJpZGVkYXRhOgorICAgICAgICAgICAgICAgIHNlbGYub3ZlcnJpZGVkYXRhW3Nob3J0dmFyXSA9IFtdCisgICAgICAgICAgICBpZiBbdmFyLCBvdmVycmlkZV0gbm90IGluIHNlbGYub3ZlcnJpZGVkYXRhW3Nob3J0dmFyXToKKyAgICAgICAgICAgICAgICAjIEZvcmNlIENvVyBieSByZWNyZWF0aW5nIHRoZSBsaXN0IGZpcnN0CisgICAgICAgICAgICAgICAgc2VsZi5vdmVycmlkZWRhdGFbc2hvcnR2YXJdID0gbGlzdChzZWxmLm92ZXJyaWRlZGF0YVtzaG9ydHZhcl0pCisgICAgICAgICAgICAgICAgc2VsZi5vdmVycmlkZWRhdGFbc2hvcnR2YXJdLmFwcGVuZChbdmFyLCBvdmVycmlkZV0pCisgICAgICAgICAgICBvdmVycmlkZSA9IE5vbmUKKyAgICAgICAgICAgIGlmICJfIiBpbiBzaG9ydHZhcjoKKyAgICAgICAgICAgICAgICBvdmVycmlkZSA9IHZhcltzaG9ydHZhci5yZmluZCgnXycpKzE6XQorICAgICAgICAgICAgICAgIHNob3J0dmFyID0gdmFyWzpzaG9ydHZhci5yZmluZCgnXycpXQorICAgICAgICAgICAgICAgIGlmIGxlbihzaG9ydHZhcikgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGUgPSBOb25lCisKKyAgICBkZWYgZ2V0VmFyKHNlbGYsIHZhciwgZXhwYW5kPUZhbHNlLCBub3dlYWtkZWZhdWx0PUZhbHNlLCBwYXJzaW5nPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0VmFyRmxhZyh2YXIsICJfY29udGVudCIsIGV4cGFuZCwgbm93ZWFrZGVmYXVsdCwgcGFyc2luZykKKworICAgIGRlZiByZW5hbWVWYXIoc2VsZiwga2V5LCBuZXdrZXksICoqbG9naW5mbyk6CisgICAgICAgICIiIgorICAgICAgICBSZW5hbWUgdGhlIHZhcmlhYmxlIGtleSB0byBuZXdrZXkKKyAgICAgICAgIiIiCisgICAgICAgIHZhbCA9IHNlbGYuZ2V0VmFyKGtleSwgMCwgcGFyc2luZz1UcnVlKQorICAgICAgICBpZiB2YWwgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBsb2dpbmZvWyd2YXJpYWJsZSddID0gbmV3a2V5CisgICAgICAgICAgICBsb2dpbmZvWydvcCddID0gJ3JlbmFtZSBmcm9tICVzJyAlIGtleQorICAgICAgICAgICAgbG9naW5mb1snZGV0YWlsJ10gPSB2YWwKKyAgICAgICAgICAgIHNlbGYudmFyaGlzdG9yeS5yZWNvcmQoKipsb2dpbmZvKQorICAgICAgICAgICAgc2VsZi5zZXRWYXIobmV3a2V5LCB2YWwsIGlnbm9yZT1UcnVlLCBwYXJzaW5nPVRydWUpCisKKyAgICAgICAgZm9yIGkgaW4gKF9fc2V0dmFyX2tleXdvcmRfXyk6CisgICAgICAgICAgICBzcmMgPSBzZWxmLmdldFZhckZsYWcoa2V5LCBpKQorICAgICAgICAgICAgaWYgc3JjIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZGVzdCA9IHNlbGYuZ2V0VmFyRmxhZyhuZXdrZXksIGkpIG9yIFtdCisgICAgICAgICAgICBkZXN0LmV4dGVuZChzcmMpCisgICAgICAgICAgICBzZWxmLnNldFZhckZsYWcobmV3a2V5LCBpLCBkZXN0LCBpZ25vcmU9VHJ1ZSkKKworICAgICAgICBpZiBrZXkgaW4gc2VsZi5vdmVycmlkZWRhdGE6CisgICAgICAgICAgICBzZWxmLm92ZXJyaWRlZGF0YVtuZXdrZXldID0gW10KKyAgICAgICAgICAgIGZvciAodiwgbykgaW4gc2VsZi5vdmVycmlkZWRhdGFba2V5XToKKyAgICAgICAgICAgICAgICBzZWxmLm92ZXJyaWRlZGF0YVtuZXdrZXldLmFwcGVuZChbdi5yZXBsYWNlKGtleSwgbmV3a2V5KSwgb10pCisgICAgICAgICAgICAgICAgc2VsZi5yZW5hbWVWYXIodiwgdi5yZXBsYWNlKGtleSwgbmV3a2V5KSkKKworICAgICAgICBpZiAnXycgaW4gbmV3a2V5IGFuZCB2YWwgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3NldHZhcl91cGRhdGVfb3ZlcnJpZGVzKG5ld2tleSwgKipsb2dpbmZvKQorCisgICAgICAgIGxvZ2luZm9bJ3ZhcmlhYmxlJ10gPSBrZXkKKyAgICAgICAgbG9naW5mb1snb3AnXSA9ICdyZW5hbWUgKHRvKScKKyAgICAgICAgbG9naW5mb1snZGV0YWlsJ10gPSBuZXdrZXkKKyAgICAgICAgc2VsZi52YXJoaXN0b3J5LnJlY29yZCgqKmxvZ2luZm8pCisgICAgICAgIHNlbGYuZGVsVmFyKGtleSwgaWdub3JlPVRydWUpCisKKyAgICBkZWYgYXBwZW5kVmFyKHNlbGYsIHZhciwgdmFsdWUsICoqbG9naW5mbyk6CisgICAgICAgIGxvZ2luZm9bJ29wJ10gPSAnYXBwZW5kJworICAgICAgICBzZWxmLnZhcmhpc3RvcnkucmVjb3JkKCoqbG9naW5mbykKKyAgICAgICAgc2VsZi5zZXRWYXIodmFyICsgIl9hcHBlbmQiLCB2YWx1ZSwgaWdub3JlPVRydWUsIHBhcnNpbmc9VHJ1ZSkKKworICAgIGRlZiBwcmVwZW5kVmFyKHNlbGYsIHZhciwgdmFsdWUsICoqbG9naW5mbyk6CisgICAgICAgIGxvZ2luZm9bJ29wJ10gPSAncHJlcGVuZCcKKyAgICAgICAgc2VsZi52YXJoaXN0b3J5LnJlY29yZCgqKmxvZ2luZm8pCisgICAgICAgIHNlbGYuc2V0VmFyKHZhciArICJfcHJlcGVuZCIsIHZhbHVlLCBpZ25vcmU9VHJ1ZSwgcGFyc2luZz1UcnVlKQorCisgICAgZGVmIGRlbFZhcihzZWxmLCB2YXIsICoqbG9naW5mbyk6CisgICAgICAgIGxvZ2luZm9bJ2RldGFpbCddID0gIiIKKyAgICAgICAgbG9naW5mb1snb3AnXSA9ICdkZWwnCisgICAgICAgIHNlbGYudmFyaGlzdG9yeS5yZWNvcmQoKipsb2dpbmZvKQorICAgICAgICBzZWxmLmV4cGFuZF9jYWNoZSA9IHt9CisgICAgICAgIHNlbGYuZGljdFt2YXJdID0ge30KKyAgICAgICAgaWYgdmFyIGluIHNlbGYub3ZlcnJpZGVkYXRhOgorICAgICAgICAgICAgZGVsIHNlbGYub3ZlcnJpZGVkYXRhW3Zhcl0KKyAgICAgICAgaWYgJ18nIGluIHZhcjoKKyAgICAgICAgICAgIG92ZXJyaWRlID0gdmFyW3Zhci5yZmluZCgnXycpKzE6XQorICAgICAgICAgICAgc2hvcnR2YXIgPSB2YXJbOnZhci5yZmluZCgnXycpXQorICAgICAgICAgICAgd2hpbGUgb3ZlcnJpZGU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpZiBzaG9ydHZhciBpbiBzZWxmLm92ZXJyaWRlZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRm9yY2UgQ29XIGJ5IHJlY3JlYXRpbmcgdGhlIGxpc3QgZmlyc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub3ZlcnJpZGVkYXRhW3Nob3J0dmFyXSA9IGxpc3Qoc2VsZi5vdmVycmlkZWRhdGFbc2hvcnR2YXJdKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vdmVycmlkZWRhdGFbc2hvcnR2YXJdLnJlbW92ZShbdmFyLCBvdmVycmlkZV0pCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIG92ZXJyaWRlID0gTm9uZQorICAgICAgICAgICAgICAgIGlmICJfIiBpbiBzaG9ydHZhcjoKKyAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGUgPSB2YXJbc2hvcnR2YXIucmZpbmQoJ18nKSsxOl0KKyAgICAgICAgICAgICAgICAgICAgc2hvcnR2YXIgPSB2YXJbOnNob3J0dmFyLnJmaW5kKCdfJyldCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihzaG9ydHZhcikgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZSA9IE5vbmUKKworICAgIGRlZiBzZXRWYXJGbGFnKHNlbGYsIHZhciwgZmxhZywgdmFsdWUsICoqbG9naW5mbyk6CisgICAgICAgIHNlbGYuZXhwYW5kX2NhY2hlID0ge30KKyAgICAgICAgaWYgJ29wJyBub3QgaW4gbG9naW5mbzoKKyAgICAgICAgICAgIGxvZ2luZm9bJ29wJ10gPSAic2V0IgorICAgICAgICBsb2dpbmZvWydmbGFnJ10gPSBmbGFnCisgICAgICAgIHNlbGYudmFyaGlzdG9yeS5yZWNvcmQoKipsb2dpbmZvKQorICAgICAgICBpZiBub3QgdmFyIGluIHNlbGYuZGljdDoKKyAgICAgICAgICAgIHNlbGYuX21ha2VTaGFkb3dDb3B5KHZhcikKKyAgICAgICAgc2VsZi5kaWN0W3Zhcl1bZmxhZ10gPSB2YWx1ZQorCisgICAgICAgIGlmIGZsYWcgPT0gIl9kZWZhdWx0dmFsIiBhbmQgJ18nIGluIHZhcjoKKyAgICAgICAgICAgIHNlbGYuX3NldHZhcl91cGRhdGVfb3ZlcnJpZGVzKHZhciwgKipsb2dpbmZvKQorCisgICAgICAgIGlmIGZsYWcgPT0gInVuZXhwb3J0IiBvciBmbGFnID09ICJleHBvcnQiOgorICAgICAgICAgICAgaWYgbm90ICJfX2V4cG9ydGxpc3QiIGluIHNlbGYuZGljdDoKKyAgICAgICAgICAgICAgICBzZWxmLl9tYWtlU2hhZG93Q29weSgiX19leHBvcnRsaXN0IikKKyAgICAgICAgICAgIGlmIG5vdCAiX2NvbnRlbnQiIGluIHNlbGYuZGljdFsiX19leHBvcnRsaXN0Il06CisgICAgICAgICAgICAgICAgc2VsZi5kaWN0WyJfX2V4cG9ydGxpc3QiXVsiX2NvbnRlbnQiXSA9IHNldCgpCisgICAgICAgICAgICBzZWxmLmRpY3RbIl9fZXhwb3J0bGlzdCJdWyJfY29udGVudCJdLmFkZCh2YXIpCisKKyAgICBkZWYgZ2V0VmFyRmxhZyhzZWxmLCB2YXIsIGZsYWcsIGV4cGFuZD1GYWxzZSwgbm93ZWFrZGVmYXVsdD1GYWxzZSwgcGFyc2luZz1GYWxzZSk6CisgICAgICAgIGxvY2FsX3ZhciA9IHNlbGYuX2ZpbmRWYXIodmFyKQorICAgICAgICB2YWx1ZSA9IE5vbmUKKyAgICAgICAgaWYgZmxhZyA9PSAiX2NvbnRlbnQiIGFuZCB2YXIgaW4gc2VsZi5vdmVycmlkZWRhdGEgYW5kIG5vdCBwYXJzaW5nOgorICAgICAgICAgICAgbWF0Y2ggPSBGYWxzZQorICAgICAgICAgICAgYWN0aXZlID0ge30KKyAgICAgICAgICAgIHNlbGYubmVlZF9vdmVycmlkZXMoKQorICAgICAgICAgICAgZm9yIChyLCBvKSBpbiBzZWxmLm92ZXJyaWRlZGF0YVt2YXJdOgorICAgICAgICAgICAgICAgICMgV2hhdCBhYm91dCBkb3VibGUgb3ZlcnJpZGVzIGJvdGggd2l0aCAiXyIgaW4gdGhlIG5hbWU/CisgICAgICAgICAgICAgICAgaWYgbyBpbiBzZWxmLm92ZXJyaWRlc3NldDoKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlW29dID0gcgorICAgICAgICAgICAgICAgIGVsaWYgIl8iIGluIG86CisgICAgICAgICAgICAgICAgICAgIGlmIHNldChvLnNwbGl0KCJfIikpLmlzc3Vic2V0KHNlbGYub3ZlcnJpZGVzc2V0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVtvXSA9IHIKKworICAgICAgICAgICAgbW9kID0gVHJ1ZQorICAgICAgICAgICAgd2hpbGUgbW9kOgorICAgICAgICAgICAgICAgIG1vZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgZm9yIG8gaW4gc2VsZi5vdmVycmlkZXM6CisgICAgICAgICAgICAgICAgICAgIGZvciBhIGluIGFjdGl2ZS5jb3B5KCk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBhLmVuZHN3aXRoKCJfIiArIG8pOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBhY3RpdmVbYV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgYWN0aXZlW2FdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlW2EucmVwbGFjZSgiXyIgKyBvLCAiIildID0gdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgYSA9PSBvOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gYWN0aXZlW2FdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGFjdGl2ZVthXQorICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxmLmdldFZhcihtYXRjaCkKKworICAgICAgICBpZiBsb2NhbF92YXIgaXMgbm90IE5vbmUgYW5kIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBmbGFnIGluIGxvY2FsX3ZhcjoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvcHkuY29weShsb2NhbF92YXJbZmxhZ10pCisgICAgICAgICAgICBlbGlmIGZsYWcgPT0gIl9jb250ZW50IiBhbmQgIl9kZWZhdWx0dmFsIiBpbiBsb2NhbF92YXIgYW5kIG5vdCBub3dlYWtkZWZhdWx0OgorICAgICAgICAgICAgICAgIHZhbHVlID0gY29weS5jb3B5KGxvY2FsX3ZhclsiX2RlZmF1bHR2YWwiXSkKKworCisgICAgICAgIGlmIGZsYWcgPT0gIl9jb250ZW50IiBhbmQgbG9jYWxfdmFyIGlzIG5vdCBOb25lIGFuZCAiX2FwcGVuZCIgaW4gbG9jYWxfdmFyIGFuZCBub3QgcGFyc2luZzoKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICIiCisgICAgICAgICAgICBzZWxmLm5lZWRfb3ZlcnJpZGVzKCkKKyAgICAgICAgICAgIGZvciAociwgbykgaW4gbG9jYWxfdmFyWyJfYXBwZW5kIl06CisgICAgICAgICAgICAgICAgbWF0Y2ggPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgbzoKKyAgICAgICAgICAgICAgICAgICAgZm9yIG8yIGluIG8uc3BsaXQoIl8iKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvMiBpbiBzZWxmLm92ZXJyaWRlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IEZhbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICsgcgorCisgICAgICAgIGlmIGZsYWcgPT0gIl9jb250ZW50IiBhbmQgbG9jYWxfdmFyIGlzIG5vdCBOb25lIGFuZCAiX3ByZXBlbmQiIGluIGxvY2FsX3ZhciBhbmQgbm90IHBhcnNpbmc6CisgICAgICAgICAgICBpZiBub3QgdmFsdWU6CisgICAgICAgICAgICAgICAgdmFsdWUgPSAiIgorICAgICAgICAgICAgc2VsZi5uZWVkX292ZXJyaWRlcygpCisgICAgICAgICAgICBmb3IgKHIsIG8pIGluIGxvY2FsX3ZhclsiX3ByZXBlbmQiXToKKworICAgICAgICAgICAgICAgIG1hdGNoID0gVHJ1ZQorICAgICAgICAgICAgICAgIGlmIG86CisgICAgICAgICAgICAgICAgICAgIGZvciBvMiBpbiBvLnNwbGl0KCJfIik6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbzIgaW4gc2VsZi5vdmVycmlkZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBGYWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSByICsgdmFsdWUKKworICAgICAgICBpZiBleHBhbmQgYW5kIHZhbHVlOgorICAgICAgICAgICAgIyBPbmx5IGdldHZhciAoZmxhZyA9PSBfY29udGVudCkgaGl0cyB0aGUgZXhwYW5kIGNhY2hlCisgICAgICAgICAgICBjYWNoZW5hbWUgPSBOb25lCisgICAgICAgICAgICBpZiBmbGFnID09ICJfY29udGVudCI6CisgICAgICAgICAgICAgICAgY2FjaGVuYW1lID0gdmFyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNhY2hlbmFtZSA9IHZhciArICJbIiArIGZsYWcgKyAiXSIKKyAgICAgICAgICAgIHZhbHVlID0gc2VsZi5leHBhbmQodmFsdWUsIGNhY2hlbmFtZSkKKworICAgICAgICBpZiB2YWx1ZSBhbmQgZmxhZyA9PSAiX2NvbnRlbnQiIGFuZCBsb2NhbF92YXIgaXMgbm90IE5vbmUgYW5kICJfcmVtb3ZlIiBpbiBsb2NhbF92YXI6CisgICAgICAgICAgICByZW1vdmVzID0gW10KKyAgICAgICAgICAgIHNlbGYubmVlZF9vdmVycmlkZXMoKQorICAgICAgICAgICAgZm9yIChyLCBvKSBpbiBsb2NhbF92YXJbIl9yZW1vdmUiXToKKyAgICAgICAgICAgICAgICBtYXRjaCA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBvOgorICAgICAgICAgICAgICAgICAgICBmb3IgbzIgaW4gby5zcGxpdCgiXyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG8yIGluIHNlbGYub3ZlcnJpZGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gRmFsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZXMuZXh0ZW5kKHNlbGYuZXhwYW5kKHIpLnNwbGl0KCkpCisKKyAgICAgICAgICAgIGZpbHRlcmVkID0gZmlsdGVyKGxhbWJkYSB2OiB2IG5vdCBpbiByZW1vdmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuc3BsaXQoKSkKKyAgICAgICAgICAgIHZhbHVlID0gIiAiLmpvaW4oZmlsdGVyZWQpCisgICAgICAgICAgICBpZiBleHBhbmQgYW5kIHZhciBpbiBzZWxmLmV4cGFuZF9jYWNoZToKKyAgICAgICAgICAgICAgICAgIyBXZSBuZWVkIHRvIGVuc3VyZSB0aGUgZXhwYW5kIGNhY2hlIGhhcyB0aGUgY29ycmVjdCB2YWx1ZQorICAgICAgICAgICAgICAgICAjIGZsYWcgPT0gIl9jb250ZW50IiBoZXJlCisgICAgICAgICAgICAgICAgc2VsZi5leHBhbmRfY2FjaGVbdmFyXS52YWx1ZSA9IHZhbHVlCisgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIGRlbFZhckZsYWcoc2VsZiwgdmFyLCBmbGFnLCAqKmxvZ2luZm8pOgorICAgICAgICBzZWxmLmV4cGFuZF9jYWNoZSA9IHt9CisgICAgICAgIGxvY2FsX3ZhciA9IHNlbGYuX2ZpbmRWYXIodmFyKQorICAgICAgICBpZiBub3QgbG9jYWxfdmFyOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIG5vdCB2YXIgaW4gc2VsZi5kaWN0OgorICAgICAgICAgICAgc2VsZi5fbWFrZVNoYWRvd0NvcHkodmFyKQorCisgICAgICAgIGlmIHZhciBpbiBzZWxmLmRpY3QgYW5kIGZsYWcgaW4gc2VsZi5kaWN0W3Zhcl06CisgICAgICAgICAgICBsb2dpbmZvWydkZXRhaWwnXSA9ICIiCisgICAgICAgICAgICBsb2dpbmZvWydvcCddID0gJ2RlbEZsYWcnCisgICAgICAgICAgICBsb2dpbmZvWydmbGFnJ10gPSBmbGFnCisgICAgICAgICAgICBzZWxmLnZhcmhpc3RvcnkucmVjb3JkKCoqbG9naW5mbykKKworICAgICAgICAgICAgZGVsIHNlbGYuZGljdFt2YXJdW2ZsYWddCisKKyAgICBkZWYgYXBwZW5kVmFyRmxhZyhzZWxmLCB2YXIsIGZsYWcsIHZhbHVlLCAqKmxvZ2luZm8pOgorICAgICAgICBsb2dpbmZvWydvcCddID0gJ2FwcGVuZCcKKyAgICAgICAgbG9naW5mb1snZmxhZyddID0gZmxhZworICAgICAgICBzZWxmLnZhcmhpc3RvcnkucmVjb3JkKCoqbG9naW5mbykKKyAgICAgICAgbmV3dmFsdWUgPSAoc2VsZi5nZXRWYXJGbGFnKHZhciwgZmxhZywgRmFsc2UpIG9yICIiKSArIHZhbHVlCisgICAgICAgIHNlbGYuc2V0VmFyRmxhZyh2YXIsIGZsYWcsIG5ld3ZhbHVlLCBpZ25vcmU9VHJ1ZSkKKworICAgIGRlZiBwcmVwZW5kVmFyRmxhZyhzZWxmLCB2YXIsIGZsYWcsIHZhbHVlLCAqKmxvZ2luZm8pOgorICAgICAgICBsb2dpbmZvWydvcCddID0gJ3ByZXBlbmQnCisgICAgICAgIGxvZ2luZm9bJ2ZsYWcnXSA9IGZsYWcKKyAgICAgICAgc2VsZi52YXJoaXN0b3J5LnJlY29yZCgqKmxvZ2luZm8pCisgICAgICAgIG5ld3ZhbHVlID0gdmFsdWUgKyAoc2VsZi5nZXRWYXJGbGFnKHZhciwgZmxhZywgRmFsc2UpIG9yICIiKQorICAgICAgICBzZWxmLnNldFZhckZsYWcodmFyLCBmbGFnLCBuZXd2YWx1ZSwgaWdub3JlPVRydWUpCisKKyAgICBkZWYgc2V0VmFyRmxhZ3Moc2VsZiwgdmFyLCBmbGFncywgKipsb2dpbmZvKToKKyAgICAgICAgc2VsZi5leHBhbmRfY2FjaGUgPSB7fQorICAgICAgICBpbmZlcl9jYWxsZXJfZGV0YWlscyhsb2dpbmZvKQorICAgICAgICBpZiBub3QgdmFyIGluIHNlbGYuZGljdDoKKyAgICAgICAgICAgIHNlbGYuX21ha2VTaGFkb3dDb3B5KHZhcikKKworICAgICAgICBmb3IgaSBpbiBmbGFnczoKKyAgICAgICAgICAgIGlmIGkgPT0gIl9jb250ZW50IjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbG9naW5mb1snZmxhZyddID0gaQorICAgICAgICAgICAgbG9naW5mb1snZGV0YWlsJ10gPSBmbGFnc1tpXQorICAgICAgICAgICAgc2VsZi52YXJoaXN0b3J5LnJlY29yZCgqKmxvZ2luZm8pCisgICAgICAgICAgICBzZWxmLmRpY3RbdmFyXVtpXSA9IGZsYWdzW2ldCisKKyAgICBkZWYgZ2V0VmFyRmxhZ3Moc2VsZiwgdmFyLCBleHBhbmQgPSBGYWxzZSwgaW50ZXJuYWxmbGFncz1GYWxzZSk6CisgICAgICAgIGxvY2FsX3ZhciA9IHNlbGYuX2ZpbmRWYXIodmFyKQorICAgICAgICBmbGFncyA9IHt9CisKKyAgICAgICAgaWYgbG9jYWxfdmFyOgorICAgICAgICAgICAgZm9yIGkgaW4gbG9jYWxfdmFyOgorICAgICAgICAgICAgICAgIGlmIGkuc3RhcnRzd2l0aCgiXyIpIGFuZCBub3QgaW50ZXJuYWxmbGFnczoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBmbGFnc1tpXSA9IGxvY2FsX3ZhcltpXQorICAgICAgICAgICAgICAgIGlmIGV4cGFuZCBhbmQgaSBpbiBleHBhbmQ6CisgICAgICAgICAgICAgICAgICAgIGZsYWdzW2ldID0gc2VsZi5leHBhbmQoZmxhZ3NbaV0sIHZhciArICJbIiArIGkgKyAiXSIpCisgICAgICAgIGlmIGxlbihmbGFncykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBmbGFncworCisKKyAgICBkZWYgZGVsVmFyRmxhZ3Moc2VsZiwgdmFyLCAqKmxvZ2luZm8pOgorICAgICAgICBzZWxmLmV4cGFuZF9jYWNoZSA9IHt9CisgICAgICAgIGlmIG5vdCB2YXIgaW4gc2VsZi5kaWN0OgorICAgICAgICAgICAgc2VsZi5fbWFrZVNoYWRvd0NvcHkodmFyKQorCisgICAgICAgIGlmIHZhciBpbiBzZWxmLmRpY3Q6CisgICAgICAgICAgICBjb250ZW50ID0gTm9uZQorCisgICAgICAgICAgICBsb2dpbmZvWydvcCddID0gJ2RlbGV0ZSBmbGFncycKKyAgICAgICAgICAgIHNlbGYudmFyaGlzdG9yeS5yZWNvcmQoKipsb2dpbmZvKQorCisgICAgICAgICAgICAjIHRyeSB0byBzYXZlIHRoZSBjb250ZW50CisgICAgICAgICAgICBpZiAiX2NvbnRlbnQiIGluIHNlbGYuZGljdFt2YXJdOgorICAgICAgICAgICAgICAgIGNvbnRlbnQgID0gc2VsZi5kaWN0W3Zhcl1bIl9jb250ZW50Il0KKyAgICAgICAgICAgICAgICBzZWxmLmRpY3RbdmFyXSAgICAgICAgICAgID0ge30KKyAgICAgICAgICAgICAgICBzZWxmLmRpY3RbdmFyXVsiX2NvbnRlbnQiXSA9IGNvbnRlbnQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVsIHNlbGYuZGljdFt2YXJdCisKKyAgICBkZWYgY3JlYXRlQ29weShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBhIGNvcHkgb2Ygc2VsZiBieSBzZXR0aW5nIF9kYXRhIHRvIHNlbGYKKyAgICAgICAgIiIiCisgICAgICAgICMgd2UgcmVhbGx5IHdhbnQgdGhpcyB0byBiZSBhIERhdGFTbWFydC4uLgorICAgICAgICBkYXRhID0gRGF0YVNtYXJ0KCkKKyAgICAgICAgZGF0YS5kaWN0WyJfZGF0YSJdID0gc2VsZi5kaWN0CisgICAgICAgIGRhdGEudmFyaGlzdG9yeSA9IHNlbGYudmFyaGlzdG9yeS5jb3B5KCkKKyAgICAgICAgZGF0YS52YXJoaXN0b3J5LmRhdGFzbWFydCA9IGRhdGEKKyAgICAgICAgZGF0YS5pbmNoaXN0b3J5ID0gc2VsZi5pbmNoaXN0b3J5LmNvcHkoKQorCisgICAgICAgIGRhdGEuX3RyYWNraW5nID0gc2VsZi5fdHJhY2tpbmcKKworICAgICAgICBkYXRhLm92ZXJyaWRlcyA9IE5vbmUKKyAgICAgICAgZGF0YS5vdmVycmlkZXZhcnMgPSBjb3B5LmNvcHkoc2VsZi5vdmVycmlkZXZhcnMpCisgICAgICAgICMgU2hvdWxkIHJlYWxseSBiZSBhIGRlZXBjb3B5IGJ1dCBoYXMgaGVhdnkgb3ZlcmhlYWQuCisgICAgICAgICMgSW5zdGVhZCwgd2UncmUgY2FyZWZ1bCB3aXRoIHdyaXRlcy4KKyAgICAgICAgZGF0YS5vdmVycmlkZWRhdGEgPSBjb3B5LmNvcHkoc2VsZi5vdmVycmlkZWRhdGEpCisKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiBleHBhbmRWYXJyZWYoc2VsZiwgdmFyaWFibGUsIHBhcmVudHM9RmFsc2UpOgorICAgICAgICAiIiJGaW5kIGFsbCByZWZlcmVuY2VzIHRvIHZhcmlhYmxlIGluIHRoZSBkYXRhIGFuZCBleHBhbmQgaXQKKyAgICAgICAgICAgaW4gcGxhY2UsIG9wdGlvbmFsbHkgZGVzY2VuZGluZyB0byBwYXJlbnQgZGF0YXN0b3Jlcy4iIiIKKworICAgICAgICBpZiBwYXJlbnRzOgorICAgICAgICAgICAga2V5cyA9IGl0ZXIoc2VsZikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGtleXMgPSBzZWxmLmxvY2Fsa2V5cygpCisKKyAgICAgICAgcmVmID0gJyR7JXN9JyAlIHZhcmlhYmxlCisgICAgICAgIHZhbHVlID0gc2VsZi5nZXRWYXIodmFyaWFibGUsIEZhbHNlKQorICAgICAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgICAgICByZWZlcnJlcnZhbHVlID0gc2VsZi5nZXRWYXIoa2V5LCBGYWxzZSkKKyAgICAgICAgICAgIGlmIHJlZmVycmVydmFsdWUgYW5kIHJlZiBpbiByZWZlcnJlcnZhbHVlOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0VmFyKGtleSwgcmVmZXJyZXJ2YWx1ZS5yZXBsYWNlKHJlZiwgdmFsdWUpKQorCisgICAgZGVmIGxvY2Fsa2V5cyhzZWxmKToKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLmRpY3Q6CisgICAgICAgICAgICBpZiBrZXkgIT0gJ19kYXRhJzoKKyAgICAgICAgICAgICAgICB5aWVsZCBrZXkKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgZGVsZXRlZCA9IHNldCgpCisgICAgICAgIG92ZXJyaWRlcyA9IHNldCgpCisgICAgICAgIGRlZiBrZXlsaXN0KGQpOiAgICAgICAgCisgICAgICAgICAgICBrbGlzdCA9IHNldCgpCisgICAgICAgICAgICBmb3Iga2V5IGluIGQ6CisgICAgICAgICAgICAgICAgaWYga2V5ID09ICJfZGF0YSI6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYga2V5IGluIGRlbGV0ZWQ6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYga2V5IGluIG92ZXJyaWRlczoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBub3QgZFtrZXldOgorICAgICAgICAgICAgICAgICAgICBkZWxldGVkLmFkZChrZXkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAga2xpc3QuYWRkKGtleSkKKworICAgICAgICAgICAgaWYgIl9kYXRhIiBpbiBkOgorICAgICAgICAgICAgICAgIGtsaXN0IHw9IGtleWxpc3QoZFsiX2RhdGEiXSkKKworICAgICAgICAgICAgcmV0dXJuIGtsaXN0CisKKyAgICAgICAgc2VsZi5uZWVkX292ZXJyaWRlcygpCisgICAgICAgIGZvciB2YXIgaW4gc2VsZi5vdmVycmlkZWRhdGE6CisgICAgICAgICAgICBmb3IgKHIsIG8pIGluIHNlbGYub3ZlcnJpZGVkYXRhW3Zhcl06CisgICAgICAgICAgICAgICAgaWYgbyBpbiBzZWxmLm92ZXJyaWRlc3NldDoKKyAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVzLmFkZCh2YXIpCisgICAgICAgICAgICAgICAgZWxpZiAiXyIgaW4gbzoKKyAgICAgICAgICAgICAgICAgICAgaWYgc2V0KG8uc3BsaXQoIl8iKSkuaXNzdWJzZXQoc2VsZi5vdmVycmlkZXNzZXQpOgorICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVzLmFkZCh2YXIpCisKKyAgICAgICAgZm9yIGsgaW4ga2V5bGlzdChzZWxmLmRpY3QpOgorICAgICAgICAgICAgIHlpZWxkIGsKKworICAgICAgICBmb3IgayBpbiBvdmVycmlkZXM6CisgICAgICAgICAgICAgeWllbGQgaworCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oZnJvemVuc2V0KHNlbGYpKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGl0ZW0pOgorICAgICAgICB2YWx1ZSA9IHNlbGYuZ2V0VmFyKGl0ZW0sIEZhbHNlKQorICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoaXRlbSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIHZhciwgdmFsdWUpOgorICAgICAgICBzZWxmLnNldFZhcih2YXIsIHZhbHVlKQorCisgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIHZhcik6CisgICAgICAgIHNlbGYuZGVsVmFyKHZhcikKKworICAgIGRlZiBnZXRfaGFzaChzZWxmKToKKyAgICAgICAgZGF0YSA9IHt9CisgICAgICAgIGQgPSBzZWxmLmNyZWF0ZUNvcHkoKQorICAgICAgICBiYi5kYXRhLmV4cGFuZEtleXMoZCkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShkKQorCisgICAgICAgIGNvbmZpZ193aGl0ZWxpc3QgPSBzZXQoKGQuZ2V0VmFyKCJCQl9IQVNIQ09ORklHX1dISVRFTElTVCIsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgICAgICBrZXlzID0gc2V0KGtleSBmb3Iga2V5IGluIGl0ZXIoZCkgaWYgbm90IGtleS5zdGFydHN3aXRoKCJfXyIpKQorICAgICAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgICAgICBpZiBrZXkgaW4gY29uZmlnX3doaXRlbGlzdDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICB2YWx1ZSA9IGQuZ2V0VmFyKGtleSwgRmFsc2UpIG9yICIiCisgICAgICAgICAgICBkYXRhLnVwZGF0ZSh7a2V5OnZhbHVlfSkKKworICAgICAgICAgICAgdmFyZmxhZ3MgPSBkLmdldFZhckZsYWdzKGtleSwgaW50ZXJuYWxmbGFncyA9IFRydWUpCisgICAgICAgICAgICBpZiBub3QgdmFyZmxhZ3M6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZvciBmIGluIHZhcmZsYWdzOgorICAgICAgICAgICAgICAgIGlmIGYgPT0gIl9jb250ZW50IjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBkYXRhLnVwZGF0ZSh7JyVzWyVzXScgJSAoa2V5LCBmKTp2YXJmbGFnc1tmXX0pCisKKyAgICAgICAgZm9yIGtleSBpbiBbIl9fQkJUQVNLUyIsICJfX0JCQU5PTkZVTkNTIiwgIl9fQkJIQU5ETEVSUyJdOgorICAgICAgICAgICAgYmJfbGlzdCA9IGQuZ2V0VmFyKGtleSwgRmFsc2UpIG9yIFtdCisgICAgICAgICAgICBiYl9saXN0LnNvcnQoKQorICAgICAgICAgICAgZGF0YS51cGRhdGUoe2tleTpzdHIoYmJfbGlzdCl9KQorCisgICAgICAgICAgICBpZiBrZXkgPT0gIl9fQkJBTk9ORlVOQ1MiOgorICAgICAgICAgICAgICAgIGZvciBpIGluIGJiX2xpc3Q6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZC5nZXRWYXIoaSwgVHJ1ZSkgb3IgIiIKKyAgICAgICAgICAgICAgICAgICAgZGF0YS51cGRhdGUoe2k6dmFsdWV9KQorCisgICAgICAgIGRhdGFfc3RyID0gc3RyKFsoaywgZGF0YVtrXSkgZm9yIGsgaW4gc29ydGVkKGRhdGEua2V5cygpKV0pCisgICAgICAgIHJldHVybiBoYXNobGliLm1kNShkYXRhX3N0cikuaGV4ZGlnZXN0KCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZXZlbnQucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2V2ZW50LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NmJjNDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2V2ZW50LnB5CkBAIC0wLDAgKzEsNjY4IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdFdmVudCcgaW1wbGVtZW50YXRpb24KKworQ2xhc3NlcyBhbmQgZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgJ2V2ZW50cycgaW4gdGhlCitCaXRCYWtlIGJ1aWxkIHRvb2xzLgorIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBvcywgc3lzCitpbXBvcnQgd2FybmluZ3MKK3RyeToKKyAgICBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgcGlja2xlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGF0ZXhpdAoraW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IGJiLnV0aWxzCitpbXBvcnQgYmIuY29tcGF0CitpbXBvcnQgYmIuZXhjZXB0aW9ucworCisjIFRoaXMgaXMgdGhlIHBpZCBmb3Igd2hpY2ggd2Ugc2hvdWxkIGdlbmVyYXRlIHRoZSBldmVudC4gVGhpcyBpcyBzZXQgd2hlbgorIyB0aGUgcnVucXVldWUgZm9ya3Mgb2ZmLgord29ya2VyX3BpZCA9IDAKK3dvcmtlcl9maXJlID0gTm9uZQorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZS5FdmVudCcpCisKK2NsYXNzIEV2ZW50KG9iamVjdCk6CisgICAgIiIiQmFzZSBjbGFzcyBmb3IgZXZlbnRzIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYucGlkID0gd29ya2VyX3BpZAorCitSZWdpc3RlcmVkICAgICAgICA9IDEwCitBbHJlYWR5UmVnaXN0ZXJlZCA9IDE0CisKK2RlZiBnZXRfY2xhc3NfaGFuZGxlcnMoKToKKyAgICByZXR1cm4gX2hhbmRsZXJzCisKK2RlZiBzZXRfY2xhc3NfaGFuZGxlcnMoaCk6CisgICAgZ2xvYmFsIF9oYW5kbGVycworICAgIF9oYW5kbGVycyA9IGgKKworZGVmIGNsZWFuX2NsYXNzX2hhbmRsZXJzKCk6CisgICAgcmV0dXJuIGJiLmNvbXBhdC5PcmRlcmVkRGljdCgpCisKKyMgSW50ZXJuYWwKK19oYW5kbGVycyA9IGNsZWFuX2NsYXNzX2hhbmRsZXJzKCkKK191aV9oYW5kbGVycyA9IHt9CitfdWlfbG9nZmlsdGVycyA9IHt9CitfdWlfaGFuZGxlcl9zZXEgPSAwCitfZXZlbnRfaGFuZGxlcl9tYXAgPSB7fQorX2NhdGNoYWxsX2hhbmRsZXJzID0ge30KK19ldmVudGZpbHRlciA9IE5vbmUKK191aXJlYWR5ID0gRmFsc2UKKworZGVmIGV4ZWN1dGVfaGFuZGxlcihuYW1lLCBoYW5kbGVyLCBldmVudCwgZCk6CisgICAgZXZlbnQuZGF0YSA9IGQKKyAgICBhZGRlZGQgPSBGYWxzZQorICAgIGlmICdkJyBub3QgaW4gX19idWlsdGluc19fOgorICAgICAgICBfX2J1aWx0aW5zX19bJ2QnXSA9IGQKKyAgICAgICAgYWRkZWRkID0gVHJ1ZQorICAgIHRyeToKKyAgICAgICAgcmV0ID0gaGFuZGxlcihldmVudCkKKyAgICBleGNlcHQgKGJiLnBhcnNlLlNraXBSZWNpcGUsIGJiLkJCSGFuZGxlZEV4Y2VwdGlvbik6CisgICAgICAgIHJhaXNlCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgZXR5cGUsIHZhbHVlLCB0YiA9IHN5cy5leGNfaW5mbygpCisgICAgICAgIGxvZ2dlci5lcnJvcigiRXhlY3V0aW9uIG9mIGV2ZW50IGhhbmRsZXIgJyVzJyBmYWlsZWQiICUgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y19pbmZvPShldHlwZSwgdmFsdWUsIHRiLnRiX25leHQpKQorICAgICAgICByYWlzZQorICAgIGV4Y2VwdCBTeXN0ZW1FeGl0IGFzIGV4YzoKKyAgICAgICAgaWYgZXhjLmNvZGUgIT0gMDoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiRXhlY3V0aW9uIG9mIGV2ZW50IGhhbmRsZXIgJyVzJyBmYWlsZWQiICUgbmFtZSkKKyAgICAgICAgcmFpc2UKKyAgICBmaW5hbGx5OgorICAgICAgICBkZWwgZXZlbnQuZGF0YQorICAgICAgICBpZiBhZGRlZGQ6CisgICAgICAgICAgICBkZWwgX19idWlsdGluc19fWydkJ10KKworZGVmIGZpcmVfY2xhc3NfaGFuZGxlcnMoZXZlbnQsIGQpOgorICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGxvZ2dpbmcuTG9nUmVjb3JkKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBlaWQgPSBzdHIoZXZlbnQuX19jbGFzc19fKVs4Oi0yXQorICAgIGV2dF9obWFwID0gX2V2ZW50X2hhbmRsZXJfbWFwLmdldChlaWQsIHt9KQorICAgIGZvciBuYW1lLCBoYW5kbGVyIGluIF9oYW5kbGVycy5pdGVyaXRlbXMoKToKKyAgICAgICAgaWYgbmFtZSBpbiBfY2F0Y2hhbGxfaGFuZGxlcnMgb3IgbmFtZSBpbiBldnRfaG1hcDoKKyAgICAgICAgICAgIGlmIF9ldmVudGZpbHRlcjoKKyAgICAgICAgICAgICAgICBpZiBub3QgX2V2ZW50ZmlsdGVyKG5hbWUsIGhhbmRsZXIsIGV2ZW50LCBkKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGV4ZWN1dGVfaGFuZGxlcihuYW1lLCBoYW5kbGVyLCBldmVudCwgZCkKKwordWlfcXVldWUgPSBbXQorQGF0ZXhpdC5yZWdpc3RlcgorZGVmIHByaW50X3VpX3F1ZXVlKCk6CisgICAgIiIiSWYgd2UncmUgZXhpdGluZyBiZWZvcmUgYSBVSSBoYXMgYmVlbiBzcGF3bmVkLCBkaXNwbGF5IGFueSBxdWV1ZWQKKyAgICBMb2dSZWNvcmRzIHRvIHRoZSBjb25zb2xlLiIiIgorICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlIikKKyAgICBpZiBub3QgX3VpcmVhZHk6CisgICAgICAgIGZyb20gYmIubXNnIGltcG9ydCBCQkxvZ0Zvcm1hdHRlcgorICAgICAgICBjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN5cy5zdGRvdXQpCisgICAgICAgIGNvbnNvbGUuc2V0Rm9ybWF0dGVyKEJCTG9nRm9ybWF0dGVyKCIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpKQorICAgICAgICBsb2dnZXIuaGFuZGxlcnMgPSBbY29uc29sZV0KKworICAgICAgICAjIEZpcnN0IGNoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGFueSBwcm9wZXIgbWVzc2FnZXMKKyAgICAgICAgbXNncHJpbnQgPSBGYWxzZQorICAgICAgICBmb3IgZXZlbnQgaW4gdWlfcXVldWU6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBsb2dnaW5nLkxvZ1JlY29yZCk6CisgICAgICAgICAgICAgICAgaWYgZXZlbnQubGV2ZWxubyA+IGxvZ2dpbmcuREVCVUc6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5oYW5kbGUoZXZlbnQpCisgICAgICAgICAgICAgICAgICAgIG1zZ3ByaW50ID0gVHJ1ZQorICAgICAgICBpZiBtc2dwcmludDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgTm9wZSwgc28ganVzdCBwcmludCBhbGwgb2YgdGhlIG1lc3NhZ2VzIHdlIGhhdmUgKGluY2x1ZGluZyBkZWJ1ZyBtZXNzYWdlcykKKyAgICAgICAgZm9yIGV2ZW50IGluIHVpX3F1ZXVlOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgbG9nZ2luZy5Mb2dSZWNvcmQpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5oYW5kbGUoZXZlbnQpCisKK2RlZiBmaXJlX3VpX2hhbmRsZXJzKGV2ZW50LCBkKToKKyAgICBpZiBub3QgX3VpcmVhZHk6CisgICAgICAgICMgTm8gVUkgaGFuZGxlcnMgcmVnaXN0ZXJlZCB5ZXQsIHF1ZXVlIHVwIHRoZSBtZXNzYWdlcworICAgICAgICB1aV9xdWV1ZS5hcHBlbmQoZXZlbnQpCisgICAgICAgIHJldHVybgorCisgICAgZXJyb3JzID0gW10KKyAgICBmb3IgaCBpbiBfdWlfaGFuZGxlcnM6CisgICAgICAgICNwcmludCAiU2VuZGluZyBldmVudCAlcyIgJSBldmVudAorICAgICAgICB0cnk6CisgICAgICAgICAgICAgaWYgbm90IF91aV9sb2dmaWx0ZXJzW2hdLmZpbHRlcihldmVudCk6CisgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgIyBXZSB1c2UgcGlja2xlIGhlcmUgc2luY2UgaXQgYmV0dGVyIGhhbmRsZXMgb2JqZWN0IGluc3RhbmNlcworICAgICAgICAgICAgICMgd2hpY2ggeG1scnBjJ3MgbWFyc2hhbGxlciBkb2VzIG5vdC4gRXZlbnRzICptdXN0KiBiZSBzZXJpYWxpemFibGUKKyAgICAgICAgICAgICAjIGJ5IHBpY2tsZS4KKyAgICAgICAgICAgICBpZiBoYXNhdHRyKF91aV9oYW5kbGVyc1toXS5ldmVudCwgInNlbmRwaWNrbGUiKToKKyAgICAgICAgICAgICAgICBfdWlfaGFuZGxlcnNbaF0uZXZlbnQuc2VuZHBpY2tsZSgocGlja2xlLmR1bXBzKGV2ZW50KSkpCisgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfdWlfaGFuZGxlcnNbaF0uZXZlbnQuc2VuZChldmVudCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZXJyb3JzLmFwcGVuZChoKQorICAgIGZvciBoIGluIGVycm9yczoKKyAgICAgICAgZGVsIF91aV9oYW5kbGVyc1toXQorCitkZWYgZmlyZShldmVudCwgZCk6CisgICAgIiIiRmlyZSBvZmYgYW4gRXZlbnQiIiIKKworICAgICMgV2UgY2FuIGZpcmUgY2xhc3MgaGFuZGxlcnMgaW4gdGhlIHdvcmtlciBwcm9jZXNzIGNvbnRleHQgYW5kIHRoaXMgaXMKKyAgICAjIGRlc2lyZWQgc28gdGhleSBnZXQgdGhlIHRhc2sgYmFzZWQgZGF0YXN0b3JlLgorICAgICMgVUkgaGFuZGxlcnMgbmVlZCB0byBiZSBmaXJlZCBpbiB0aGUgc2VydmVyIGNvbnRleHQgc28gd2UgZGVmZXIgdGhpcy4gVGhleQorICAgICMgZG9uJ3QgaGF2ZSBhIGRhdGFzdG9yZSBzbyB0aGUgZGF0YXN0b3JlIGNvbnRleHQgaXNuJ3QgYSBwcm9ibGVtLgorCisgICAgZmlyZV9jbGFzc19oYW5kbGVycyhldmVudCwgZCkKKyAgICBpZiB3b3JrZXJfZmlyZToKKyAgICAgICAgd29ya2VyX2ZpcmUoZXZlbnQsIGQpCisgICAgZWxzZToKKyAgICAgICAgZmlyZV91aV9oYW5kbGVycyhldmVudCwgZCkKKworZGVmIGZpcmVfZnJvbV93b3JrZXIoZXZlbnQsIGQpOgorICAgIGZpcmVfdWlfaGFuZGxlcnMoZXZlbnQsIGQpCisKK25vb3AgPSBsYW1iZGEgXzogTm9uZQorZGVmIHJlZ2lzdGVyKG5hbWUsIGhhbmRsZXIsIG1hc2s9Tm9uZSk6CisgICAgIiIiUmVnaXN0ZXIgYW4gRXZlbnQgaGFuZGxlciIiIgorCisgICAgIyBhbHJlYWR5IHJlZ2lzdGVyZWQKKyAgICBpZiBuYW1lIGluIF9oYW5kbGVyczoKKyAgICAgICAgcmV0dXJuIEFscmVhZHlSZWdpc3RlcmVkCisKKyAgICBpZiBoYW5kbGVyIGlzIG5vdCBOb25lOgorICAgICAgICAjIGhhbmRsZSBzdHJpbmcgY29udGFpbmluZyBweXRob24gY29kZQorICAgICAgICBpZiBpc2luc3RhbmNlKGhhbmRsZXIsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgdG1wID0gImRlZiAlcyhlKTpcbiVzIiAlIChuYW1lLCBoYW5kbGVyKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKHRtcCwgIiVzKGUpIiAlIG5hbWUsICJleGVjIikKKyAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byByZWdpc3RlciBldmVudCBoYW5kbGVyICclcyc6XG4lcyIsIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLmpvaW4odHJhY2ViYWNrLmZvcm1hdF9leGMobGltaXQ9MCkpKQorICAgICAgICAgICAgICAgIF9oYW5kbGVyc1tuYW1lXSA9IG5vb3AKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVudiA9IHt9CisgICAgICAgICAgICBiYi51dGlscy5iZXR0ZXJfZXhlYyhjb2RlLCBlbnYpCisgICAgICAgICAgICBmdW5jID0gYmIudXRpbHMuYmV0dGVyX2V2YWwobmFtZSwgZW52KQorICAgICAgICAgICAgX2hhbmRsZXJzW25hbWVdID0gZnVuYworICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2hhbmRsZXJzW25hbWVdID0gaGFuZGxlcgorCisgICAgICAgIGlmIG5vdCBtYXNrIG9yICcqJyBpbiBtYXNrOgorICAgICAgICAgICAgX2NhdGNoYWxsX2hhbmRsZXJzW25hbWVdID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIG0gaW4gbWFzazoKKyAgICAgICAgICAgICAgICBpZiBfZXZlbnRfaGFuZGxlcl9tYXAuZ2V0KG0sIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIF9ldmVudF9oYW5kbGVyX21hcFttXSA9IHt9CisgICAgICAgICAgICAgICAgX2V2ZW50X2hhbmRsZXJfbWFwW21dW25hbWVdID0gVHJ1ZQorCisgICAgICAgIHJldHVybiBSZWdpc3RlcmVkCisKK2RlZiByZW1vdmUobmFtZSwgaGFuZGxlcik6CisgICAgIiIiUmVtb3ZlIGFuIEV2ZW50IGhhbmRsZXIiIiIKKyAgICBfaGFuZGxlcnMucG9wKG5hbWUpCisKK2RlZiBzZXRfZXZlbnRmaWx0ZXIoZnVuYyk6CisgICAgZ2xvYmFsIF9ldmVudGZpbHRlcgorICAgIF9ldmVudGZpbHRlciA9IGZ1bmMKKworZGVmIHJlZ2lzdGVyX1VJSGhhbmRsZXIoaGFuZGxlciwgbWFpbnVpPUZhbHNlKToKKyAgICBpZiBtYWludWk6CisgICAgICAgIGdsb2JhbCBfdWlyZWFkeQorICAgICAgICBfdWlyZWFkeSA9IFRydWUKKyAgICBiYi5ldmVudC5fdWlfaGFuZGxlcl9zZXEgPSBiYi5ldmVudC5fdWlfaGFuZGxlcl9zZXEgKyAxCisgICAgX3VpX2hhbmRsZXJzW191aV9oYW5kbGVyX3NlcV0gPSBoYW5kbGVyCisgICAgbGV2ZWwsIGRlYnVnX2RvbWFpbnMgPSBiYi5tc2cuY29uc3RydWN0TG9nT3B0aW9ucygpCisgICAgX3VpX2xvZ2ZpbHRlcnNbX3VpX2hhbmRsZXJfc2VxXSA9IFVJRXZlbnRGaWx0ZXIobGV2ZWwsIGRlYnVnX2RvbWFpbnMpCisgICAgcmV0dXJuIF91aV9oYW5kbGVyX3NlcQorCitkZWYgdW5yZWdpc3Rlcl9VSUhoYW5kbGVyKGhhbmRsZXJOdW0pOgorICAgIGlmIGhhbmRsZXJOdW0gaW4gX3VpX2hhbmRsZXJzOgorICAgICAgICBkZWwgX3VpX2hhbmRsZXJzW2hhbmRsZXJOdW1dCisgICAgcmV0dXJuCisKKyMgQ2xhc3MgdG8gYWxsb3cgZmlsdGVyaW5nIG9mIGV2ZW50cyBhbmQgc3BlY2lmaWMgZmlsdGVyaW5nIG9mIExvZ1JlY29yZHMgKmJlZm9yZSogd2UgcHV0IHRoZW0gb3ZlciB0aGUgSVBDCitjbGFzcyBVSUV2ZW50RmlsdGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxldmVsLCBkZWJ1Z19kb21haW5zKToKKyAgICAgICAgc2VsZi51cGRhdGUoTm9uZSwgbGV2ZWwsIGRlYnVnX2RvbWFpbnMpCisKKyAgICBkZWYgdXBkYXRlKHNlbGYsIGV2ZW50bWFzaywgbGV2ZWwsIGRlYnVnX2RvbWFpbnMpOgorICAgICAgICBzZWxmLmV2ZW50bWFzayA9IGV2ZW50bWFzaworICAgICAgICBzZWxmLnN0ZGxldmVsID0gbGV2ZWwKKyAgICAgICAgc2VsZi5kZWJ1Z19kb21haW5zID0gZGVidWdfZG9tYWlucworCisgICAgZGVmIGZpbHRlcihzZWxmLCBldmVudCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGxvZ2dpbmcuTG9nUmVjb3JkKToKKyAgICAgICAgICAgIGlmIGV2ZW50LmxldmVsbm8gPj0gc2VsZi5zdGRsZXZlbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgaWYgZXZlbnQubmFtZSBpbiBzZWxmLmRlYnVnX2RvbWFpbnMgYW5kIGV2ZW50LmxldmVsbm8gPj0gc2VsZi5kZWJ1Z19kb21haW5zW2V2ZW50Lm5hbWVdOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWlkID0gc3RyKGV2ZW50Ll9fY2xhc3NfXylbODotMl0KKyAgICAgICAgaWYgc2VsZi5ldmVudG1hc2sgYW5kIGVpZCBub3QgaW4gc2VsZi5ldmVudG1hc2s6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworZGVmIHNldF9VSUhtYXNrKGhhbmRsZXJOdW0sIGxldmVsLCBkZWJ1Z19kb21haW5zLCBtYXNrKToKKyAgICBpZiBub3QgaGFuZGxlck51bSBpbiBfdWlfaGFuZGxlcnM6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGlmICcqJyBpbiBtYXNrOgorICAgICAgICBfdWlfbG9nZmlsdGVyc1toYW5kbGVyTnVtXS51cGRhdGUoTm9uZSwgbGV2ZWwsIGRlYnVnX2RvbWFpbnMpCisgICAgZWxzZToKKyAgICAgICAgX3VpX2xvZ2ZpbHRlcnNbaGFuZGxlck51bV0udXBkYXRlKG1hc2ssIGxldmVsLCBkZWJ1Z19kb21haW5zKQorICAgIHJldHVybiBUcnVlCisKK2RlZiBnZXROYW1lKGUpOgorICAgICIiIlJldHVybnMgdGhlIG5hbWUgb2YgYSBjbGFzcyBvciBjbGFzcyBpbnN0YW5jZSIiIgorICAgIGlmIGdldGF0dHIoZSwgIl9fbmFtZV9fIiwgTm9uZSkgPT0gTm9uZToKKyAgICAgICAgcmV0dXJuIGUuX19jbGFzc19fLl9fbmFtZV9fCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGUuX19uYW1lX18KKworY2xhc3MgT3BlcmF0aW9uU3RhcnRlZChFdmVudCk6CisgICAgIiIiQW4gb3BlcmF0aW9uIGhhcyBiZWd1biIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2cgPSAiT3BlcmF0aW9uIFN0YXJ0ZWQiKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5tc2cgPSBtc2cKKworY2xhc3MgT3BlcmF0aW9uQ29tcGxldGVkKEV2ZW50KToKKyAgICAiIiJBbiBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZCIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0b3RhbCwgbXNnID0gIk9wZXJhdGlvbiBDb21wbGV0ZWQiKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi50b3RhbCA9IHRvdGFsCisgICAgICAgIHNlbGYubXNnID0gbXNnCisKK2NsYXNzIE9wZXJhdGlvblByb2dyZXNzKEV2ZW50KToKKyAgICAiIiJBbiBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY3VycmVudCwgdG90YWwsIG1zZyA9ICJPcGVyYXRpb24gaW4gUHJvZ3Jlc3MiKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5jdXJyZW50ID0gY3VycmVudAorICAgICAgICBzZWxmLnRvdGFsID0gdG90YWwKKyAgICAgICAgc2VsZi5tc2cgPSBtc2cgKyAiOiAlcy8lcyIgJSAoY3VycmVudCwgdG90YWwpOworCitjbGFzcyBDb25maWdQYXJzZWQoRXZlbnQpOgorICAgICIiIkNvbmZpZ3VyYXRpb24gUGFyc2luZyBDb21wbGV0ZSIiIgorCitjbGFzcyBSZWNpcGVFdmVudChFdmVudCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZuKToKKyAgICAgICAgc2VsZi5mbiA9IGZuCisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisKK2NsYXNzIFJlY2lwZVByZUZpbmFsaXNlKFJlY2lwZUV2ZW50KToKKyAgICAiIiIgUmVjaXBlIFBhcnNpbmcgQ29tcGxldGUgYnV0IG5vdCB5ZXQgZmluaWFsaXNlZCIiIgorCitjbGFzcyBSZWNpcGVQYXJzZWQoUmVjaXBlRXZlbnQpOgorICAgICIiIiBSZWNpcGUgUGFyc2luZyBDb21wbGV0ZSAiIiIKKworY2xhc3MgU3RhbXBVcGRhdGUoRXZlbnQpOgorICAgICIiIlRyaWdnZXIgZm9yIGFueSBhZGp1c3RtZW50IG9mIHRoZSBzdGFtcCBmaWxlcyB0byBoYXBwZW4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXJnZXRzLCBzdGFtcGZucyk6CisgICAgICAgIHNlbGYuX3RhcmdldHMgPSB0YXJnZXRzCisgICAgICAgIHNlbGYuX3N0YW1wZm5zID0gc3RhbXBmbnMKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKworICAgIGRlZiBnZXRTdGFtcFByZWZpeChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N0YW1wZm5zCisKKyAgICBkZWYgZ2V0VGFyZ2V0cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RhcmdldHMKKworICAgIHN0YW1wUHJlZml4ID0gcHJvcGVydHkoZ2V0U3RhbXBQcmVmaXgpCisgICAgdGFyZ2V0cyA9IHByb3BlcnR5KGdldFRhcmdldHMpCisKK2NsYXNzIEJ1aWxkQmFzZShFdmVudCk6CisgICAgIiIiQmFzZSBjbGFzcyBmb3IgYmJtYWtlIHJ1biBldmVudHMiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuLCBwLCBmYWlsdXJlcyA9IDApOgorICAgICAgICBzZWxmLl9uYW1lID0gbgorICAgICAgICBzZWxmLl9wa2dzID0gcAorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9mYWlsdXJlcyA9IGZhaWx1cmVzCisKKyAgICBkZWYgZ2V0UGtncyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BrZ3MKKworICAgIGRlZiBzZXRQa2dzKHNlbGYsIHBrZ3MpOgorICAgICAgICBzZWxmLl9wa2dzID0gcGtncworCisgICAgZGVmIGdldE5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCisKKyAgICBkZWYgc2V0TmFtZShzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKworICAgIGRlZiBnZXRDZmcoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmRhdGEKKworICAgIGRlZiBzZXRDZmcoc2VsZiwgY2ZnKToKKyAgICAgICAgc2VsZi5kYXRhID0gY2ZnCisKKyAgICBkZWYgZ2V0RmFpbHVyZXMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBmYWlsZWQgcGFja2FnZXMKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9mYWlsdXJlcworCisgICAgcGtncyA9IHByb3BlcnR5KGdldFBrZ3MsIHNldFBrZ3MsIE5vbmUsICJwa2dzIHByb3BlcnR5IikKKyAgICBuYW1lID0gcHJvcGVydHkoZ2V0TmFtZSwgc2V0TmFtZSwgTm9uZSwgIm5hbWUgcHJvcGVydHkiKQorICAgIGNmZyA9IHByb3BlcnR5KGdldENmZywgc2V0Q2ZnLCBOb25lLCAiY2ZnIHByb3BlcnR5IikKKworCisKKworCitjbGFzcyBCdWlsZFN0YXJ0ZWQoQnVpbGRCYXNlLCBPcGVyYXRpb25TdGFydGVkKToKKyAgICAiIiJiYm1ha2UgYnVpbGQgcnVuIHN0YXJ0ZWQiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbiwgcCwgZmFpbHVyZXMgPSAwKToKKyAgICAgICAgT3BlcmF0aW9uU3RhcnRlZC5fX2luaXRfXyhzZWxmLCAiQnVpbGRpbmcgU3RhcnRlZCIpCisgICAgICAgIEJ1aWxkQmFzZS5fX2luaXRfXyhzZWxmLCBuLCBwLCBmYWlsdXJlcykKKworY2xhc3MgQnVpbGRDb21wbGV0ZWQoQnVpbGRCYXNlLCBPcGVyYXRpb25Db21wbGV0ZWQpOgorICAgICIiImJibWFrZSBidWlsZCBydW4gY29tcGxldGVkIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRvdGFsLCBuLCBwLCBmYWlsdXJlcz0wLCBpbnRlcnJ1cHRlZD0wKToKKyAgICAgICAgaWYgbm90IGZhaWx1cmVzOgorICAgICAgICAgICAgT3BlcmF0aW9uQ29tcGxldGVkLl9faW5pdF9fKHNlbGYsIHRvdGFsLCAiQnVpbGRpbmcgU3VjY2VlZGVkIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIE9wZXJhdGlvbkNvbXBsZXRlZC5fX2luaXRfXyhzZWxmLCB0b3RhbCwgIkJ1aWxkaW5nIEZhaWxlZCIpCisgICAgICAgIHNlbGYuX2ludGVycnVwdGVkID0gaW50ZXJydXB0ZWQKKyAgICAgICAgQnVpbGRCYXNlLl9faW5pdF9fKHNlbGYsIG4sIHAsIGZhaWx1cmVzKQorCitjbGFzcyBEaXNrRnVsbChFdmVudCk6CisgICAgIiIiRGlzayBmdWxsIGNhc2UgYnVpbGQgYWJvcnRlZCIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZXYsIHR5cGUsIGZyZWVzcGFjZSwgbW91bnRwb2ludCk6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX2RldiA9IGRldgorICAgICAgICBzZWxmLl90eXBlID0gdHlwZQorICAgICAgICBzZWxmLl9mcmVlID0gZnJlZXNwYWNlCisgICAgICAgIHNlbGYuX21vdW50cG9pbnQgPSBtb3VudHBvaW50CisKK2NsYXNzIE5vUHJvdmlkZXIoRXZlbnQpOgorICAgICIiIk5vIFByb3ZpZGVyIGZvciBhbiBFdmVudCIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGl0ZW0sIHJ1bnRpbWU9RmFsc2UsIGRlcGVuZGVlcz1Ob25lLCByZWFzb25zPU5vbmUsIGNsb3NlX21hdGNoZXM9Tm9uZSk6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX2l0ZW0gPSBpdGVtCisgICAgICAgIHNlbGYuX3J1bnRpbWUgPSBydW50aW1lCisgICAgICAgIHNlbGYuX2RlcGVuZGVlcyA9IGRlcGVuZGVlcworICAgICAgICBzZWxmLl9yZWFzb25zID0gcmVhc29ucworICAgICAgICBzZWxmLl9jbG9zZV9tYXRjaGVzID0gY2xvc2VfbWF0Y2hlcworCisgICAgZGVmIGdldEl0ZW0oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9pdGVtCisKKyAgICBkZWYgaXNSdW50aW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcnVudGltZQorCitjbGFzcyBNdWx0aXBsZVByb3ZpZGVycyhFdmVudCk6CisgICAgIiIiTXVsdGlwbGUgUHJvdmlkZXJzIiIiCisKKyAgICBkZWYgIF9faW5pdF9fKHNlbGYsIGl0ZW0sIGNhbmRpZGF0ZXMsIHJ1bnRpbWUgPSBGYWxzZSk6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX2l0ZW0gPSBpdGVtCisgICAgICAgIHNlbGYuX2NhbmRpZGF0ZXMgPSBjYW5kaWRhdGVzCisgICAgICAgIHNlbGYuX2lzX3J1bnRpbWUgPSBydW50aW1lCisKKyAgICBkZWYgaXNSdW50aW1lKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgSXMgdGhpcyBhIHJ1bnRpbWUgaXNzdWU/CisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5faXNfcnVudGltZQorCisgICAgZGVmIGdldEl0ZW0oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgbmFtZSBmb3IgdGhlIHRvIGJlIGJ1aWxkIGl0ZW0KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9pdGVtCisKKyAgICBkZWYgZ2V0Q2FuZGlkYXRlcyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEdldCB0aGUgcG9zc2libGUgQ2FuZGlkYXRlcyBmb3IgYSBQUk9WSURFUi4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9jYW5kaWRhdGVzCisKK2NsYXNzIFBhcnNlU3RhcnRlZChPcGVyYXRpb25TdGFydGVkKToKKyAgICAiIiJSZWNpcGUgcGFyc2luZyBmb3IgdGhlIHJ1bnF1ZXVlIGhhcyBiZWd1biIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0b3RhbCk6CisgICAgICAgIE9wZXJhdGlvblN0YXJ0ZWQuX19pbml0X18oc2VsZiwgIlJlY2lwZSBwYXJzaW5nIFN0YXJ0ZWQiKQorICAgICAgICBzZWxmLnRvdGFsID0gdG90YWwKKworY2xhc3MgUGFyc2VDb21wbGV0ZWQoT3BlcmF0aW9uQ29tcGxldGVkKToKKyAgICAiIiJSZWNpcGUgcGFyc2luZyBmb3IgdGhlIHJ1bnF1ZXVlIGhhcyBjb21wbGV0ZWQiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2FjaGVkLCBwYXJzZWQsIHNraXBwZWQsIG1hc2tlZCwgdmlydHVhbHMsIGVycm9ycywgdG90YWwpOgorICAgICAgICBPcGVyYXRpb25Db21wbGV0ZWQuX19pbml0X18oc2VsZiwgdG90YWwsICJSZWNpcGUgcGFyc2luZyBDb21wbGV0ZWQiKQorICAgICAgICBzZWxmLmNhY2hlZCA9IGNhY2hlZAorICAgICAgICBzZWxmLnBhcnNlZCA9IHBhcnNlZAorICAgICAgICBzZWxmLnNraXBwZWQgPSBza2lwcGVkCisgICAgICAgIHNlbGYudmlydHVhbHMgPSB2aXJ0dWFscworICAgICAgICBzZWxmLm1hc2tlZCA9IG1hc2tlZAorICAgICAgICBzZWxmLmVycm9ycyA9IGVycm9ycworICAgICAgICBzZWxmLnNvZmFyID0gY2FjaGVkICsgcGFyc2VkCisKK2NsYXNzIFBhcnNlUHJvZ3Jlc3MoT3BlcmF0aW9uUHJvZ3Jlc3MpOgorICAgICIiIlJlY2lwZSBwYXJzaW5nIHByb2dyZXNzIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGN1cnJlbnQsIHRvdGFsKToKKyAgICAgICAgT3BlcmF0aW9uUHJvZ3Jlc3MuX19pbml0X18oc2VsZiwgY3VycmVudCwgdG90YWwsICJSZWNpcGUgcGFyc2luZyIpCisKKworY2xhc3MgQ2FjaGVMb2FkU3RhcnRlZChPcGVyYXRpb25TdGFydGVkKToKKyAgICAiIiJMb2FkaW5nIG9mIHRoZSBkZXBlbmRlbmN5IGNhY2hlIGhhcyBiZWd1biIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0b3RhbCk6CisgICAgICAgIE9wZXJhdGlvblN0YXJ0ZWQuX19pbml0X18oc2VsZiwgIkxvYWRpbmcgY2FjaGUgU3RhcnRlZCIpCisgICAgICAgIHNlbGYudG90YWwgPSB0b3RhbAorCitjbGFzcyBDYWNoZUxvYWRQcm9ncmVzcyhPcGVyYXRpb25Qcm9ncmVzcyk6CisgICAgIiIiQ2FjaGUgbG9hZGluZyBwcm9ncmVzcyIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjdXJyZW50LCB0b3RhbCk6CisgICAgICAgIE9wZXJhdGlvblByb2dyZXNzLl9faW5pdF9fKHNlbGYsIGN1cnJlbnQsIHRvdGFsLCAiTG9hZGluZyBjYWNoZSIpCisKK2NsYXNzIENhY2hlTG9hZENvbXBsZXRlZChPcGVyYXRpb25Db21wbGV0ZWQpOgorICAgICIiIkNhY2hlIGxvYWRpbmcgaXMgY29tcGxldGUiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdG90YWwsIG51bV9lbnRyaWVzKToKKyAgICAgICAgT3BlcmF0aW9uQ29tcGxldGVkLl9faW5pdF9fKHNlbGYsIHRvdGFsLCAiTG9hZGluZyBjYWNoZSBDb21wbGV0ZWQiKQorICAgICAgICBzZWxmLm51bV9lbnRyaWVzID0gbnVtX2VudHJpZXMKKworY2xhc3MgVHJlZURhdGFQcmVwYXJhdGlvblN0YXJ0ZWQoT3BlcmF0aW9uU3RhcnRlZCk6CisgICAgIiIiVHJlZSBkYXRhIHByZXBhcmF0aW9uIHN0YXJ0ZWQiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIE9wZXJhdGlvblN0YXJ0ZWQuX19pbml0X18oc2VsZiwgIlByZXBhcmluZyB0cmVlIGRhdGEgU3RhcnRlZCIpCisKK2NsYXNzIFRyZWVEYXRhUHJlcGFyYXRpb25Qcm9ncmVzcyhPcGVyYXRpb25Qcm9ncmVzcyk6CisgICAgIiIiVHJlZSBkYXRhIHByZXBhcmF0aW9uIGlzIGluIHByb2dyZXNzIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGN1cnJlbnQsIHRvdGFsKToKKyAgICAgICAgT3BlcmF0aW9uUHJvZ3Jlc3MuX19pbml0X18oc2VsZiwgY3VycmVudCwgdG90YWwsICJQcmVwYXJpbmcgdHJlZSBkYXRhIikKKworY2xhc3MgVHJlZURhdGFQcmVwYXJhdGlvbkNvbXBsZXRlZChPcGVyYXRpb25Db21wbGV0ZWQpOgorICAgICIiIlRyZWUgZGF0YSBwcmVwYXJhdGlvbiBjb21wbGV0ZWQiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdG90YWwpOgorICAgICAgICBPcGVyYXRpb25Db21wbGV0ZWQuX19pbml0X18oc2VsZiwgdG90YWwsICJQcmVwYXJpbmcgdHJlZSBkYXRhIENvbXBsZXRlZCIpCisKK2NsYXNzIERlcFRyZWVHZW5lcmF0ZWQoRXZlbnQpOgorICAgICIiIgorICAgIEV2ZW50IHdoZW4gYSBkZXBlbmRlbmN5IHRyZWUgaGFzIGJlZW4gZ2VuZXJhdGVkCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGVwZ3JhcGgpOgorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9kZXBncmFwaCA9IGRlcGdyYXBoCisKK2NsYXNzIFRhcmdldHNUcmVlR2VuZXJhdGVkKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB3aGVuIGEgc2V0IG9mIGJ1aWxkYWJsZSB0YXJnZXRzIGhhcyBiZWVuIGdlbmVyYXRlZAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCk6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX21vZGVsID0gbW9kZWwKKworY2xhc3MgUmVhY2hhYmxlU3RhbXBzKEV2ZW50KToKKyAgICAiIiIKKyAgICBBbiBldmVudCBsaXN0aW5nIGFsbCBzdGFtcHMgcmVhY2hhYmxlIGFmdGVyIHBhcnNpbmcKKyAgICB3aGljaCB0aGUgbWV0YWRhdGEgbWF5IHVzZSB0byBjbGVhbiB1cCBzdGFsZSBkYXRhCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhbXBzKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5zdGFtcHMgPSBzdGFtcHMKKworY2xhc3MgRmlsZXNNYXRjaGluZ0ZvdW5kKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB3aGVuIGEgbGlzdCBvZiBmaWxlcyBtYXRjaGluZyB0aGUgc3VwcGxpZWQgcGF0dGVybiBoYXMKKyAgICBiZWVuIGdlbmVyYXRlZAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXR0ZXJuLCBtYXRjaGVzKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fcGF0dGVybiA9IHBhdHRlcm4KKyAgICAgICAgc2VsZi5fbWF0Y2hlcyA9IG1hdGNoZXMKKworY2xhc3MgQ29yZUJhc2VGaWxlc0ZvdW5kKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB3aGVuIGEgbGlzdCBvZiBhcHByb3ByaWF0ZSBjb25maWcgZmlsZXMgaGFzIGJlZW4gZ2VuZXJhdGVkCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGhzKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fcGF0aHMgPSBwYXRocworCitjbGFzcyBDb25maWdGaWxlc0ZvdW5kKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB3aGVuIGEgbGlzdCBvZiBhcHByb3ByaWF0ZSBjb25maWcgZmlsZXMgaGFzIGJlZW4gZ2VuZXJhdGVkCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhcmlhYmxlLCB2YWx1ZXMpOgorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl92YXJpYWJsZSA9IHZhcmlhYmxlCisgICAgICAgIHNlbGYuX3ZhbHVlcyA9IHZhbHVlcworCitjbGFzcyBDb25maWdGaWxlUGF0aEZvdW5kKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB3aGVuIGEgcGF0aCBmb3IgYSBjb25maWcgZmlsZSBoYXMgYmVlbiBmb3VuZAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fcGF0aCA9IHBhdGgKKworY2xhc3MgTXNnQmFzZShFdmVudCk6CisgICAgIiIiQmFzZSBjbGFzcyBmb3IgbWVzc2FnZXMiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2cpOgorICAgICAgICBzZWxmLl9tZXNzYWdlID0gbXNnCisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisKK2NsYXNzIE1zZ0RlYnVnKE1zZ0Jhc2UpOgorICAgICIiIkRlYnVnIE1lc3NhZ2UiIiIKKworY2xhc3MgTXNnTm90ZShNc2dCYXNlKToKKyAgICAiIiJOb3RlIE1lc3NhZ2UiIiIKKworY2xhc3MgTXNnV2FybihNc2dCYXNlKToKKyAgICAiIiJXYXJuaW5nIE1lc3NhZ2UiIiIKKworY2xhc3MgTXNnRXJyb3IoTXNnQmFzZSk6CisgICAgIiIiRXJyb3IgTWVzc2FnZSIiIgorCitjbGFzcyBNc2dGYXRhbChNc2dCYXNlKToKKyAgICAiIiJGYXRhbCBNZXNzYWdlIiIiCisKK2NsYXNzIE1zZ1BsYWluKE1zZ0Jhc2UpOgorICAgICIiIkdlbmVyYWwgb3V0cHV0IiIiCisKK2NsYXNzIExvZ0V4ZWNUVFkoRXZlbnQpOgorICAgICIiIlNlbmQgZXZlbnQgY29udGFpbmluZyBwcm9ncmFtIHRvIHNwYXduIG9uIHR0eSBvZiB0aGUgbG9nZ2VyIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZywgcHJvZywgc2xlZXBfZGVsYXksIHJldHJpZXMpOgorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLm1zZyA9IG1zZworICAgICAgICBzZWxmLnByb2cgPSBwcm9nCisgICAgICAgIHNlbGYuc2xlZXBfZGVsYXkgPSBzbGVlcF9kZWxheQorICAgICAgICBzZWxmLnJldHJpZXMgPSByZXRyaWVzCisKK2NsYXNzIExvZ0hhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKKyAgICAiIiJEaXNwYXRjaCBsb2dnaW5nIG1lc3NhZ2VzIGFzIGJpdGJha2UgZXZlbnRzIiIiCisKKyAgICBkZWYgZW1pdChzZWxmLCByZWNvcmQpOgorICAgICAgICBpZiByZWNvcmQuZXhjX2luZm86CisgICAgICAgICAgICBldHlwZSwgdmFsdWUsIHRiID0gcmVjb3JkLmV4Y19pbmZvCisgICAgICAgICAgICBpZiBoYXNhdHRyKHRiLCAndGJfbmV4dCcpOgorICAgICAgICAgICAgICAgIHRiID0gbGlzdChiYi5leGNlcHRpb25zLmV4dHJhY3RfdHJhY2ViYWNrKHRiLCBjb250ZXh0PTMpKQorICAgICAgICAgICAgcmVjb3JkLmJiX2V4Y19pbmZvID0gKGV0eXBlLCB2YWx1ZSwgdGIpCisgICAgICAgICAgICByZWNvcmQuZXhjX2luZm8gPSBOb25lCisgICAgICAgIGZpcmUocmVjb3JkLCBOb25lKQorCisgICAgZGVmIGZpbHRlcihzZWxmLCByZWNvcmQpOgorICAgICAgICByZWNvcmQudGFza3BpZCA9IHdvcmtlcl9waWQKKyAgICAgICAgcmV0dXJuIFRydWUKKworY2xhc3MgUmVxdWVzdFBhY2thZ2VJbmZvKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB0byByZXF1ZXN0IHBhY2thZ2UgaW5mb3JtYXRpb24KKyAgICAiIiIKKworY2xhc3MgUGFja2FnZUluZm8oRXZlbnQpOgorICAgICIiIgorICAgIFBhY2thZ2UgaW5mb3JtYXRpb24gZm9yIEdVSQorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwa2dpbmZvbGlzdCk6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX3BrZ2luZm9saXN0ID0gcGtnaW5mb2xpc3QKKworY2xhc3MgTWV0YWRhdGFFdmVudChFdmVudCk6CisgICAgIiIiCisgICAgR2VuZXJpYyBldmVudCB0aGF0IHRhcmdldCBmb3IgT0UtQ29yZSBjbGFzc2VzCisgICAgdG8gcmVwb3J0IGluZm9ybWF0aW9uIGR1cmluZyBhc3luY2hyb3VzIGV4ZWN1dGlvbgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBldmVudHR5cGUsIGV2ZW50ZGF0YSk6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYudHlwZSA9IGV2ZW50dHlwZQorICAgICAgICBzZWxmLl9sb2NhbGRhdGEgPSBldmVudGRhdGEKKworY2xhc3MgU2FuaXR5Q2hlY2soRXZlbnQpOgorICAgICIiIgorICAgIEV2ZW50IHRvIHJ1biBzYW5pdHkgY2hlY2tzLCBlaXRoZXIgcmFpc2UgZXJyb3JzIG9yIGdlbmVyYXRlIGV2ZW50cyBhcyByZXR1cm4gc3RhdHVzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBnZW5lcmF0ZWV2ZW50cyA9IFRydWUpOgorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmdlbmVyYXRlZXZlbnRzID0gZ2VuZXJhdGVldmVudHMKKworY2xhc3MgU2FuaXR5Q2hlY2tQYXNzZWQoRXZlbnQpOgorICAgICIiIgorICAgIEV2ZW50IHRvIGluZGljYXRlIHNhbml0eSBjaGVjayBoYXMgcGFzc2VkCisgICAgIiIiCisKK2NsYXNzIFNhbml0eUNoZWNrRmFpbGVkKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB0byBpbmRpY2F0ZSBzYW5pdHkgY2hlY2sgaGFzIGZhaWxlZAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2csIG5ldHdvcmtfZXJyb3I9RmFsc2UpOgorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9tc2cgPSBtc2cKKyAgICAgICAgc2VsZi5fbmV0d29ya19lcnJvciA9IG5ldHdvcmtfZXJyb3IKKworY2xhc3MgTmV0d29ya1Rlc3QoRXZlbnQpOgorICAgICIiIgorICAgIEV2ZW50IHRvIHJ1biBuZXR3b3JrIGNvbm5lY3Rpdml0eSB0ZXN0cywgZWl0aGVyIHJhaXNlIGVycm9ycyBvciBnZW5lcmF0ZSBldmVudHMgYXMgcmV0dXJuIHN0YXR1cy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZ2VuZXJhdGVldmVudHMgPSBUcnVlKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5nZW5lcmF0ZWV2ZW50cyA9IGdlbmVyYXRlZXZlbnRzCisKK2NsYXNzIE5ldHdvcmtUZXN0UGFzc2VkKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB0byBpbmRpY2F0ZSBuZXR3b3JrIHRlc3QgaGFzIHBhc3NlZAorICAgICIiIgorCitjbGFzcyBOZXR3b3JrVGVzdEZhaWxlZChFdmVudCk6CisgICAgIiIiCisgICAgRXZlbnQgdG8gaW5kaWNhdGUgbmV0d29yayB0ZXN0IGhhcyBmYWlsZWQKKyAgICAiIiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9leGNlcHRpb25zLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9leGNlcHRpb25zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxODJjOGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2V4Y2VwdGlvbnMucHkKQEAgLTAsMCArMSw5MSBAQAorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgYmIubmFtZWR0dXBsZV93aXRoX2FiYworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQorCisKK2NsYXNzIFRyYWNlYmFja0VudHJ5KG5hbWVkdHVwbGUuYWJjKToKKyAgICAiIiJQaWNrbGVhYmxlIHJlcHJlc2VudGF0aW9uIG9mIGEgdHJhY2ViYWNrIGVudHJ5IiIiCisgICAgX2ZpZWxkcyA9ICdmaWxlbmFtZSBsaW5lbm8gZnVuY3Rpb24gYXJncyBjb2RlX2NvbnRleHQgaW5kZXgnCisgICAgX2hlYWRlciA9ICcgIEZpbGUgInswLmZpbGVuYW1lfSIsIGxpbmUgezAubGluZW5vfSwgaW4gezAuZnVuY3Rpb259ezAuYXJnc30nCisKKyAgICBkZWYgZm9ybWF0KHNlbGYsIGZvcm1hdHRlcj1Ob25lKToKKyAgICAgICAgaWYgbm90IHNlbGYuY29kZV9jb250ZXh0OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2hlYWRlci5mb3JtYXQoc2VsZikgKyAnXG4nCisKKyAgICAgICAgZm9ybWF0dGVkID0gW3NlbGYuX2hlYWRlci5mb3JtYXQoc2VsZikgKyAnOlxuJ10KKworICAgICAgICBmb3IgbGluZWluZGV4LCBsaW5lIGluIGVudW1lcmF0ZShzZWxmLmNvZGVfY29udGV4dCk6CisgICAgICAgICAgICBpZiBmb3JtYXR0ZXI6CisgICAgICAgICAgICAgICAgbGluZSA9IGZvcm1hdHRlcihsaW5lKQorCisgICAgICAgICAgICBpZiBsaW5laW5kZXggPT0gc2VsZi5pbmRleDoKKyAgICAgICAgICAgICAgICBmb3JtYXR0ZWQuYXBwZW5kKCcgICAgPiVzJyAlIGxpbmUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZvcm1hdHRlZC5hcHBlbmQoJyAgICAgJXMnICUgbGluZSkKKyAgICAgICAgcmV0dXJuIGZvcm1hdHRlZAorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAnJy5qb2luKHNlbGYuZm9ybWF0KCkpCisKK2RlZiBfZ2V0X2ZyYW1lX2FyZ3MoZnJhbWUpOgorICAgICIiIkdldCB0aGUgZm9ybWF0dGVkIGFyZ3VtZW50cyBhbmQgY2xhc3MgKGlmIGF2YWlsYWJsZSkgZm9yIGEgZnJhbWUiIiIKKyAgICBhcmdpbmZvID0gaW5zcGVjdC5nZXRhcmd2YWx1ZXMoZnJhbWUpCisKKyAgICB0cnk6CisgICAgICAgIGlmIG5vdCBhcmdpbmZvLmFyZ3M6CisgICAgICAgICAgICByZXR1cm4gJycsIE5vbmUKKyAgICAjIFRoZXJlIGhhdmUgYmVlbiByZXBvcnRzIGZyb20gdGhlIGZpZWxkIG9mIHB5dGhvbiAyLjYgd2hpY2ggZG9lc24ndCAKKyAgICAjIHJldHVybiBhIG5hbWVkdHVwbGUgaGVyZSBidXQgc2ltcGx5IGEgdHVwbGUgc28gZmFsbGJhY2sgZ3JhY2VmdWxseSBpZgorICAgICMgYXJncyBpc24ndCBwcmVzZW50LgorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcmV0dXJuICcnLCBOb25lCisKKyAgICBmaXJzdGFyZyA9IGFyZ2luZm8uYXJnc1swXQorICAgIGlmIGZpcnN0YXJnID09ICdzZWxmJzoKKyAgICAgICAgc2VsZiA9IGFyZ2luZm8ubG9jYWxzWydzZWxmJ10KKyAgICAgICAgY2xzID0gc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKworICAgICAgICBhcmdpbmZvLmFyZ3MucG9wKDApCisgICAgICAgIGRlbCBhcmdpbmZvLmxvY2Fsc1snc2VsZiddCisgICAgZWxzZToKKyAgICAgICAgY2xzID0gTm9uZQorCisgICAgZm9ybWF0dGVkID0gaW5zcGVjdC5mb3JtYXRhcmd2YWx1ZXMoKmFyZ2luZm8pCisgICAgcmV0dXJuIGZvcm1hdHRlZCwgY2xzCisKK2RlZiBleHRyYWN0X3RyYWNlYmFjayh0YiwgY29udGV4dD0xKToKKyAgICBmcmFtZXMgPSBpbnNwZWN0LmdldGlubmVyZnJhbWVzKHRiLCBjb250ZXh0KQorICAgIGZvciBmcmFtZSwgZmlsZW5hbWUsIGxpbmVubywgZnVuY3Rpb24sIGNvZGVfY29udGV4dCwgaW5kZXggaW4gZnJhbWVzOgorICAgICAgICBmb3JtYXR0ZWRfYXJncywgY2xzID0gX2dldF9mcmFtZV9hcmdzKGZyYW1lKQorICAgICAgICBpZiBjbHM6CisgICAgICAgICAgICBmdW5jdGlvbiA9ICclcy4lcycgJSAoY2xzLCBmdW5jdGlvbikKKyAgICAgICAgeWllbGQgVHJhY2ViYWNrRW50cnkoZmlsZW5hbWUsIGxpbmVubywgZnVuY3Rpb24sIGZvcm1hdHRlZF9hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2NvbnRleHQsIGluZGV4KQorCitkZWYgZm9ybWF0X2V4dHJhY3RlZChleHRyYWN0ZWQsIGZvcm1hdHRlcj1Ob25lLCBsaW1pdD1Ob25lKToKKyAgICBpZiBsaW1pdDoKKyAgICAgICAgZXh0cmFjdGVkID0gZXh0cmFjdGVkWy1saW1pdDpdCisKKyAgICBmb3JtYXR0ZWQgPSBbXQorICAgIGZvciB0cmFjZWJhY2tpbmZvIGluIGV4dHJhY3RlZDoKKyAgICAgICAgZm9ybWF0dGVkLmV4dGVuZCh0cmFjZWJhY2tpbmZvLmZvcm1hdChmb3JtYXR0ZXIpKQorICAgIHJldHVybiBmb3JtYXR0ZWQKKworCitkZWYgZm9ybWF0X2V4Y2VwdGlvbihldHlwZSwgdmFsdWUsIHRiLCBjb250ZXh0PTEsIGxpbWl0PU5vbmUsIGZvcm1hdHRlcj1Ob25lKToKKyAgICBmb3JtYXR0ZWQgPSBbJ1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiddCisKKyAgICBpZiBoYXNhdHRyKHRiLCAndGJfbmV4dCcpOgorICAgICAgICB0YiA9IGV4dHJhY3RfdHJhY2ViYWNrKHRiLCBjb250ZXh0KQorCisgICAgZm9ybWF0dGVkLmV4dGVuZChmb3JtYXRfZXh0cmFjdGVkKHRiLCBmb3JtYXR0ZXIsIGxpbWl0KSkKKyAgICBmb3JtYXR0ZWQuZXh0ZW5kKHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkoZXR5cGUsIHZhbHVlKSkKKyAgICByZXR1cm4gZm9ybWF0dGVkCisKK2RlZiB0b19zdHJpbmcoZXhjKToKKyAgICBpZiBpc2luc3RhbmNlKGV4YywgU3lzdGVtRXhpdCk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGV4Yy5jb2RlLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIHJldHVybiAnRXhpdGVkIHdpdGggIiVkIicgJSBleGMuY29kZQorICAgIHJldHVybiBzdHIoZXhjKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDUzYjYzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvX19pbml0X18ucHkKQEAgLTAsMCArMSwxNzg3IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdGZXRjaCcgaW1wbGVtZW50YXRpb25zCisKK0NsYXNzZXMgZm9yIG9idGFpbmluZyB1cHN0cmVhbSBzb3VyY2VzIGZvciB0aGUKK0JpdEJha2UgYnVpbGQgdG9vbHMuCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIENocmlzIExhcnNvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBCYXNlZCBvbiBmdW5jdGlvbnMgZnJvbSB0aGUgYmFzZSBiYiBtb2R1bGUsIENvcHlyaWdodCAyMDAzIEhvbGdlciBTY2h1cmlnCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Citmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCitpbXBvcnQgb3MsIHJlCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgZ2xvYgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCB1cmxsaWIKK2ltcG9ydCB1cmxwYXJzZQoraW1wb3J0IG9wZXJhdG9yCitpbXBvcnQgYmIucGVyc2lzdF9kYXRhLCBiYi51dGlscworaW1wb3J0IGJiLmNoZWNrc3VtCitmcm9tIGJiIGltcG9ydCBkYXRhCitpbXBvcnQgYmIucHJvY2VzcworaW1wb3J0IHN1YnByb2Nlc3MKKworX192ZXJzaW9uX18gPSAiMiIKK19jaGVja3N1bV9jYWNoZSA9IGJiLmNoZWNrc3VtLkZpbGVDaGVja3N1bUNhY2hlKCkKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuRmV0Y2hlciIpCisKK3RyeToKKyAgICBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgcGlja2xlCisgICAgbG9nZ2VyLmluZm8oIkltcG9ydGluZyBjUGlja2xlIGZhaWxlZC4gIgorICAgICAgICAgICAgICAgICJGYWxsaW5nIGJhY2sgdG8gYSB2ZXJ5IHNsb3cgaW1wbGVtZW50YXRpb24uIikKKworY2xhc3MgQkJGZXRjaEV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICIiIkNsYXNzIGFsbCBmZXRjaCBleGNlcHRpb25zIGluaGVyaXQgZnJvbSIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgIHNlbGYubXNnID0gbWVzc2FnZQorICAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIG1lc3NhZ2UpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgIHJldHVybiBzZWxmLm1zZworCitjbGFzcyBVbnRydXN0ZWRVcmwoQkJGZXRjaEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGVuY291bnRlcmluZyBhIGhvc3Qgbm90IGxpc3RlZCBpbiBCQl9BTExPV0VEX05FVFdPUktTIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybCwgbWVzc2FnZT0nJyk6CisgICAgICAgIGlmIG1lc3NhZ2U6CisgICAgICAgICAgICBtc2cgPSBtZXNzYWdlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtc2cgPSAiVGhlIFVSTDogJyVzJyBpcyBub3QgdHJ1c3RlZCBhbmQgY2Fubm90IGJlIHVzZWQiICUgdXJsCisgICAgICAgIHNlbGYudXJsID0gdXJsCisgICAgICAgIEJCRmV0Y2hFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbXNnKQorICAgICAgICBzZWxmLmFyZ3MgPSAodXJsLCkKKworY2xhc3MgTWFsZm9ybWVkVXJsKEJCRmV0Y2hFeGNlcHRpb24pOgorICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiBlbmNvdW50ZXJpbmcgYW4gaW52YWxpZCB1cmwiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsLCBtZXNzYWdlPScnKToKKyAgICAgICAgIGlmIG1lc3NhZ2U6CisgICAgICAgICAgICAgbXNnID0gbWVzc2FnZQorICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICBtc2cgPSAiVGhlIFVSTDogJyVzJyBpcyBpbnZhbGlkIGFuZCBjYW5ub3QgYmUgaW50ZXJwcmV0ZWQiICUgdXJsCisgICAgICAgICBzZWxmLnVybCA9IHVybAorICAgICAgICAgQkJGZXRjaEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBtc2cpCisgICAgICAgICBzZWxmLmFyZ3MgPSAodXJsLCkKKworY2xhc3MgRmV0Y2hFcnJvcihCQkZldGNoRXhjZXB0aW9uKToKKyAgICAiIiJHZW5lcmFsIGZldGNoZXIgZXhjZXB0aW9uIHdoZW4gc29tZXRoaW5nIGhhcHBlbnMgaW5jb3JyZWN0bHkiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWVzc2FnZSwgdXJsID0gTm9uZSk6CisgICAgICAgICBpZiB1cmw6CisgICAgICAgICAgICBtc2cgPSAiRmV0Y2hlciBmYWlsdXJlIGZvciBVUkw6ICclcycuICVzIiAlICh1cmwsIG1lc3NhZ2UpCisgICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnID0gIkZldGNoZXIgZmFpbHVyZTogJXMiICUgbWVzc2FnZQorICAgICAgICAgc2VsZi51cmwgPSB1cmwKKyAgICAgICAgIEJCRmV0Y2hFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbXNnKQorICAgICAgICAgc2VsZi5hcmdzID0gKG1lc3NhZ2UsIHVybCkKKworY2xhc3MgQ2hlY2tzdW1FcnJvcihGZXRjaEVycm9yKToKKyAgICAiIiJFeGNlcHRpb24gd2hlbiBtaXNtYXRjaGVkIGNoZWNrc3VtIGVuY291bnRlcmVkIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2UsIHVybCA9IE5vbmUsIGNoZWNrc3VtID0gTm9uZSk6CisgICAgICAgIHNlbGYuY2hlY2tzdW0gPSBjaGVja3N1bQorICAgICAgICBGZXRjaEVycm9yLl9faW5pdF9fKHNlbGYsIG1lc3NhZ2UsIHVybCkKKworY2xhc3MgTm9DaGVja3N1bUVycm9yKEZldGNoRXJyb3IpOgorICAgICIiIkV4Y2VwdGlvbiB3aGVuIG5vIGNoZWNrc3VtIGlzIHNwZWNpZmllZCwgYnV0IEJCX1NUUklDVF9DSEVDS1NVTSBpcyBzZXQiIiIKKworY2xhc3MgVW5wYWNrRXJyb3IoQkJGZXRjaEV4Y2VwdGlvbik6CisgICAgIiIiR2VuZXJhbCBmZXRjaGVyIGV4Y2VwdGlvbiB3aGVuIHNvbWV0aGluZyBoYXBwZW5zIGluY29ycmVjdGx5IHdoZW4gdW5wYWNraW5nIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2UsIHVybCk6CisgICAgICAgICBtc2cgPSAiVW5wYWNrIGZhaWx1cmUgZm9yIFVSTDogJyVzJy4gJXMiICUgKHVybCwgbWVzc2FnZSkKKyAgICAgICAgIHNlbGYudXJsID0gdXJsCisgICAgICAgICBCQkZldGNoRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIG1zZykKKyAgICAgICAgIHNlbGYuYXJncyA9IChtZXNzYWdlLCB1cmwpCisKK2NsYXNzIE5vTWV0aG9kRXJyb3IoQkJGZXRjaEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB3aGVuIHRoZXJlIGlzIG5vIG1ldGhvZCB0byBvYnRhaW4gYSBzdXBwbGllZCB1cmwgb3Igc2V0IG9mIHVybHMiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsKToKKyAgICAgICAgIG1zZyA9ICJDb3VsZCBub3QgZmluZCBhIGZldGNoZXIgd2hpY2ggc3VwcG9ydHMgdGhlIFVSTDogJyVzJyIgJSB1cmwKKyAgICAgICAgIHNlbGYudXJsID0gdXJsCisgICAgICAgICBCQkZldGNoRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIG1zZykKKyAgICAgICAgIHNlbGYuYXJncyA9ICh1cmwsKQorCitjbGFzcyBNaXNzaW5nUGFyYW1ldGVyRXJyb3IoQkJGZXRjaEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGEgZmV0Y2ggbWV0aG9kIGlzIG1pc3NpbmcgYSBjcml0aWNhbCBwYXJhbWV0ZXIgaW4gdGhlIHVybCIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtaXNzaW5nLCB1cmwpOgorICAgICAgICAgbXNnID0gIlVSTDogJyVzJyBpcyBtaXNzaW5nIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXIgJyVzJyIgJSAodXJsLCBtaXNzaW5nKQorICAgICAgICAgc2VsZi51cmwgPSB1cmwKKyAgICAgICAgIHNlbGYubWlzc2luZyA9IG1pc3NpbmcKKyAgICAgICAgIEJCRmV0Y2hFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbXNnKQorICAgICAgICAgc2VsZi5hcmdzID0gKG1pc3NpbmcsIHVybCkKKworY2xhc3MgUGFyYW1ldGVyRXJyb3IoQkJGZXRjaEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGEgdXJsIGNhbm5vdCBiZSBwcm9jY2Vzc2VkIGR1ZSB0byBpbnZhbGlkIHBhcmFtZXRlcnMuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2UsIHVybCk6CisgICAgICAgICBtc2cgPSAiVVJMOiAnJXMnIGhhcyBpbnZhbGlkIHBhcmFtZXRlcnMuICVzIiAlICh1cmwsIG1lc3NhZ2UpCisgICAgICAgICBzZWxmLnVybCA9IHVybAorICAgICAgICAgQkJGZXRjaEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBtc2cpCisgICAgICAgICBzZWxmLmFyZ3MgPSAobWVzc2FnZSwgdXJsKQorCitjbGFzcyBOZXR3b3JrQWNjZXNzKEJCRmV0Y2hFeGNlcHRpb24pOgorICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiBuZXR3b3JrIGFjY2VzcyBpcyBkaXNhYmxlZCBidXQgaXQgaXMgcmVxdWlyZWQuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybCwgY21kKToKKyAgICAgICAgIG1zZyA9ICJOZXR3b3JrIGFjY2VzcyBkaXNhYmxlZCB0aHJvdWdoIEJCX05PX05FVFdPUksgKG9yIHNldCBpbmRpcmVjdGx5IGR1ZSB0byB1c2Ugb2YgQkJfRkVUQ0hfUFJFTUlSUk9ST05MWSkgYnV0IGFjY2VzcyByZXF1ZXN0ZWQgd2l0aCBjb21tYW5kICVzIChmb3IgdXJsICVzKSIgJSAoY21kLCB1cmwpCisgICAgICAgICBzZWxmLnVybCA9IHVybAorICAgICAgICAgc2VsZi5jbWQgPSBjbWQKKyAgICAgICAgIEJCRmV0Y2hFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbXNnKQorICAgICAgICAgc2VsZi5hcmdzID0gKHVybCwgY21kKQorCitjbGFzcyBOb25Mb2NhbE1ldGhvZChFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYpCisKKworY2xhc3MgVVJJKG9iamVjdCk6CisgICAgIiIiCisgICAgQSBjbGFzcyByZXByZXNlbnRpbmcgYSBnZW5lcmljIFVSSSwgd2l0aCBtZXRob2RzIGZvcgorICAgIGFjY2Vzc2luZyB0aGUgVVJJIGNvbXBvbmVudHMsIGFuZCBzdHJpbmdpZmllcyB0byB0aGUKKyAgICBVUkkuCisKKyAgICBJdCBpcyBjb25zdHJ1Y3RlZCBieSBjYWxsaW5nIGl0IHdpdGggYSBVUkksIG9yIHNldHRpbmcKKyAgICB0aGUgYXR0cmlidXRlcyBtYW51YWxseToKKworICAgICB1cmkgPSBVUkkoImh0dHA6Ly9leGFtcGxlLmNvbS8iKQorCisgICAgIHVyaSA9IFVSSSgpCisgICAgIHVyaS5zY2hlbWUgPSAnaHR0cCcKKyAgICAgdXJpLmhvc3RuYW1lID0gJ2V4YW1wbGUuY29tJworICAgICB1cmkucGF0aCA9ICcvJworCisgICAgSXQgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKKworICAgICAgKiBzY2hlbWUgKHJlYWQvd3JpdGUpCisgICAgICAqIHVzZXJpbmZvIChhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbikgKHJlYWQvd3JpdGUpCisgICAgICAgICogdXNlcm5hbWUgKHJlYWQvd3JpdGUpCisgICAgICAgICogcGFzc3dvcmQgKHJlYWQvd3JpdGUpCisKKyAgICAgICAgTm90ZSwgcGFzc3dvcmQgaXMgZGVwcmVjYXRlZCBhcyBvZiBSRkMgMzk4Ni4KKworICAgICAgKiBob3N0bmFtZSAocmVhZC93cml0ZSkKKyAgICAgICogcG9ydCAocmVhZC93cml0ZSkKKyAgICAgICogaG9zdHBvcnQgKHJlYWQgb25seSkKKyAgICAgICAgImhvc3RuYW1lOnBvcnQiLCBpZiBib3RoIGFyZSBzZXQsIG90aGVyd2lzZSBqdXN0ICJob3N0bmFtZSIKKyAgICAgICogcGF0aCAocmVhZC93cml0ZSkKKyAgICAgICogcGF0aF9xdW90ZWQgKHJlYWQvd3JpdGUpCisgICAgICAgIEEgVVJJIHF1b3RlZCB2ZXJzaW9uIG9mIHBhdGgKKyAgICAgICogcGFyYW1zIChkaWN0KSAocmVhZC93cml0ZSkKKyAgICAgICogcXVlcnkgKGRpY3QpIChyZWFkL3dyaXRlKQorICAgICAgKiByZWxhdGl2ZSAoYm9vbCkgKHJlYWQgb25seSkKKyAgICAgICAgVHJ1ZSBpZiB0aGlzIGlzIGEgInJlbGF0aXZlIFVSSSIsIChlLmcuIGZpbGU6Zm9vLmRpZmYpCisKKyAgICBJdCBzdHJpbmdpZmllcyB0byB0aGUgVVJJIGl0c2VsZi4KKworICAgIFNvbWUgbm90ZXMgYWJvdXQgcmVsYXRpdmUgVVJJczogd2hpbGUgaXQncyBzcGVjaWZpZWQgdGhhdAorICAgIGEgVVJJIGJlZ2lubmluZyB3aXRoIDxzY2hlbWU+Oi8vIHNob3VsZCBlaXRoZXIgYmUgZGlyZWN0bHkKKyAgICBmb2xsb3dlZCBieSBhIGhvc3RuYW1lIG9yIGEgLywgdGhlIG9sZCBVUkkgaGFuZGxpbmcgb2YgdGhlCisgICAgZmV0Y2gyIGxpYnJhcnkgZGlkIG5vdCBjb21mb3JtIHRvIHRoaXMuIFRoZXJlZm9yZSwgdGhpcyBVUkkKKyAgICBjbGFzcyBoYXMgc29tZSBrbHVkZ2VzIHRvIG1ha2Ugc3VyZSB0aGF0IFVSSXMgYXJlIHBhcnNlZCBpbgorICAgIGEgd2F5IGNvbWZvcm1pbmcgdG8gYml0YmFrZSdzIGN1cnJlbnQgdXNhZ2UuIFRoaXMgVVJJIGNsYXNzCisgICAgc3VwcG9ydHMgdGhlIGZvbGxvd2luZzoKKworICAgICBmaWxlOnJlbGF0aXZlL3BhdGguZGlmZiAoSUVURiBjb21wbGlhbnQpCisgICAgIGdpdDpyZWxhdGl2ZS9wYXRoLmdpdCAoSUVURiBjb21wbGlhbnQpCisgICAgIGdpdDovLy9hYnNvbHV0ZS9wYXRoLmdpdCAoSUVURiBjb21wbGlhbnQpCisgICAgIGZpbGU6Ly8vYWJzb2x1dGUvcGF0aC5kaWZmIChJRVRGIGNvbXBsaWFudCkKKworICAgICBmaWxlOi8vcmVsYXRpdmUvcGF0aC5kaWZmIChub3QgSUVURiBjb21wbGlhbnQpCisKKyAgICBCdXQgaXQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZm9sbG93aW5nOgorCisgICAgIGZpbGU6Ly9ob3N0bmFtZS9hYnNvbHV0ZS9wYXRoLmRpZmYgKHdvdWxkIGJlIElFVEYgY29tcGxpYW50KQorCisgICAgTm90ZSB0aGF0IHRoZSBsYXN0IGNhc2Ugb25seSBhcHBsaWVzIHRvIGEgbGlzdCBvZgorICAgICJ3aGl0ZWxpc3RlZCIgc2NoZW1lcyAoY3VycmVudGx5IG9ubHkgZmlsZTovLyksIHRoYXQgcmVxdWlyZXMKKyAgICBpdHMgVVJJcyB0byBub3QgaGF2ZSBhIG5ldHdvcmsgbG9jYXRpb24uCisgICAgIiIiCisKKyAgICBfcmVsYXRpdmVfc2NoZW1lcyA9IFsnZmlsZScsICdnaXQnXQorICAgIF9uZXRsb2NfZm9yYmlkZGVuID0gWydmaWxlJ10KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmk9Tm9uZSk6CisgICAgICAgIHNlbGYuc2NoZW1lID0gJycKKyAgICAgICAgc2VsZi51c2VyaW5mbyA9ICcnCisgICAgICAgIHNlbGYuaG9zdG5hbWUgPSAnJworICAgICAgICBzZWxmLnBvcnQgPSBOb25lCisgICAgICAgIHNlbGYuX3BhdGggPSAnJworICAgICAgICBzZWxmLnBhcmFtcyA9IHt9CisgICAgICAgIHNlbGYucXVlcnkgPSB7fQorICAgICAgICBzZWxmLnJlbGF0aXZlID0gRmFsc2UKKworICAgICAgICBpZiBub3QgdXJpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBXZSBoaWphY2sgdGhlIFVSTCBwYXJhbWV0ZXJzLCBzaW5jZSB0aGUgd2F5IGJpdGJha2UgdXNlcworICAgICAgICAjIHRoZW0gYXJlIG5vdCBxdWl0ZSBSRkMgY29tcGxpYW50LgorICAgICAgICB1cmksIHBhcmFtX3N0ciA9ICh1cmkuc3BsaXQoIjsiLCAxKSArIFtOb25lXSlbOjJdCisKKyAgICAgICAgdXJscCA9IHVybHBhcnNlLnVybHBhcnNlKHVyaSkKKyAgICAgICAgc2VsZi5zY2hlbWUgPSB1cmxwLnNjaGVtZQorCisgICAgICAgIHJlcGFyc2UgPSAwCisKKyAgICAgICAgIyBDb2VyY2UgdXJscGFyc2UgdG8gbWFrZSBVUkkgc2NoZW1lIHVzZSBuZXRsb2MKKyAgICAgICAgaWYgbm90IHNlbGYuc2NoZW1lIGluIHVybHBhcnNlLnVzZXNfbmV0bG9jOgorICAgICAgICAgICAgdXJscGFyc2UudXNlc19wYXJhbXMuYXBwZW5kKHNlbGYuc2NoZW1lKQorICAgICAgICAgICAgcmVwYXJzZSA9IDEKKworICAgICAgICAjIE1ha2UgdXJscGFyc2UgaGFwcHkoL2llcikgYnkgY29udmVydGluZyBsb2NhbCByZXNvdXJjZXMKKyAgICAgICAgIyB0byBSRkMgY29tcGxpYW50IFVSTCBmb3JtYXQuIEUuZy46CisgICAgICAgICMgICBmaWxlOi8vZm9vLmRpZmYgLT4gZmlsZTpmb28uZGlmZgorICAgICAgICBpZiB1cmxwLnNjaGVtZSBpbiBzZWxmLl9uZXRsb2NfZm9yYmlkZGVuOgorICAgICAgICAgICAgdXJpID0gcmUuc3ViKCIoPzw9OikvLyg/IS8pIiwgIiIsIHVyaSwgMSkKKyAgICAgICAgICAgIHJlcGFyc2UgPSAxCisKKyAgICAgICAgaWYgcmVwYXJzZToKKyAgICAgICAgICAgIHVybHAgPSB1cmxwYXJzZS51cmxwYXJzZSh1cmkpCisKKyAgICAgICAgIyBJZGVudGlmeSBpZiB0aGUgVVJJIGlzIHJlbGF0aXZlIG9yIG5vdAorICAgICAgICBpZiB1cmxwLnNjaGVtZSBpbiBzZWxmLl9yZWxhdGl2ZV9zY2hlbWVzIGFuZCBcCisgICAgICAgICAgIHJlLmNvbXBpbGUoIl5cdys6KD8hLy8pIikubWF0Y2godXJpKToKKyAgICAgICAgICAgIHNlbGYucmVsYXRpdmUgPSBUcnVlCisKKyAgICAgICAgaWYgbm90IHNlbGYucmVsYXRpdmU6CisgICAgICAgICAgICBzZWxmLmhvc3RuYW1lID0gdXJscC5ob3N0bmFtZSBvciAnJworICAgICAgICAgICAgc2VsZi5wb3J0ID0gdXJscC5wb3J0CisKKyAgICAgICAgICAgIHNlbGYudXNlcmluZm8gKz0gdXJscC51c2VybmFtZSBvciAnJworCisgICAgICAgICAgICBpZiB1cmxwLnBhc3N3b3JkOgorICAgICAgICAgICAgICAgIHNlbGYudXNlcmluZm8gKz0gJzolcycgJSB1cmxwLnBhc3N3b3JkCisKKyAgICAgICAgc2VsZi5wYXRoID0gdXJsbGliLnVucXVvdGUodXJscC5wYXRoKQorCisgICAgICAgIGlmIHBhcmFtX3N0cjoKKyAgICAgICAgICAgIHNlbGYucGFyYW1zID0gc2VsZi5fcGFyYW1fc3RyX3NwbGl0KHBhcmFtX3N0ciwgIjsiKQorICAgICAgICBpZiB1cmxwLnF1ZXJ5OgorICAgICAgICAgICAgc2VsZi5xdWVyeSA9IHNlbGYuX3BhcmFtX3N0cl9zcGxpdCh1cmxwLnF1ZXJ5LCAiJiIpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgdXNlcmluZm8gPSBzZWxmLnVzZXJpbmZvCisgICAgICAgIGlmIHVzZXJpbmZvOgorICAgICAgICAgICAgdXNlcmluZm8gKz0gJ0AnCisKKyAgICAgICAgcmV0dXJuICIlczolcyVzJXMlcyVzJXMiICUgKAorICAgICAgICAgICAgc2VsZi5zY2hlbWUsCisgICAgICAgICAgICAnJyBpZiBzZWxmLnJlbGF0aXZlIGVsc2UgJy8vJywKKyAgICAgICAgICAgIHVzZXJpbmZvLAorICAgICAgICAgICAgc2VsZi5ob3N0cG9ydCwKKyAgICAgICAgICAgIHNlbGYucGF0aF9xdW90ZWQsCisgICAgICAgICAgICBzZWxmLl9xdWVyeV9zdHIoKSwKKyAgICAgICAgICAgIHNlbGYuX3BhcmFtX3N0cigpKQorCisgICAgZGVmIF9wYXJhbV9zdHIoc2VsZik6CisgICAgICAgIHJldHVybiAoCisgICAgICAgICAgICAnJy5qb2luKFsnOycsIHNlbGYuX3BhcmFtX3N0cl9qb2luKHNlbGYucGFyYW1zLCAiOyIpXSkKKyAgICAgICAgICAgIGlmIHNlbGYucGFyYW1zIGVsc2UgJycpCisKKyAgICBkZWYgX3F1ZXJ5X3N0cihzZWxmKToKKyAgICAgICAgcmV0dXJuICgKKyAgICAgICAgICAgICcnLmpvaW4oWyc/Jywgc2VsZi5fcGFyYW1fc3RyX2pvaW4oc2VsZi5xdWVyeSwgIiYiKV0pCisgICAgICAgICAgICBpZiBzZWxmLnF1ZXJ5IGVsc2UgJycpCisKKyAgICBkZWYgX3BhcmFtX3N0cl9zcGxpdChzZWxmLCBzdHJpbmcsIGVsbWRlbGltLCBrdmRlbGltPSI9Iik6CisgICAgICAgIHJldCA9IHt9CisgICAgICAgIGZvciBrLCB2IGluIFt4LnNwbGl0KGt2ZGVsaW0sIDEpIGZvciB4IGluIHN0cmluZy5zcGxpdChlbG1kZWxpbSldOgorICAgICAgICAgICAgcmV0W2tdID0gdgorICAgICAgICByZXR1cm4gcmV0CisKKyAgICBkZWYgX3BhcmFtX3N0cl9qb2luKHNlbGYsIGRpY3RfLCBlbG1kZWxpbSwga3ZkZWxpbT0iPSIpOgorICAgICAgICByZXR1cm4gZWxtZGVsaW0uam9pbihba3ZkZWxpbS5qb2luKFtrLCB2XSkgZm9yIGssIHYgaW4gZGljdF8uaXRlbXMoKV0pCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaG9zdHBvcnQoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLnBvcnQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5ob3N0bmFtZQorICAgICAgICByZXR1cm4gIiVzOiVkIiAlIChzZWxmLmhvc3RuYW1lLCBzZWxmLnBvcnQpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGF0aF9xdW90ZWQoc2VsZik6CisgICAgICAgIHJldHVybiB1cmxsaWIucXVvdGUoc2VsZi5wYXRoKQorCisgICAgQHBhdGhfcXVvdGVkLnNldHRlcgorICAgIGRlZiBwYXRoX3F1b3RlZChzZWxmLCBwYXRoKToKKyAgICAgICAgc2VsZi5wYXRoID0gdXJsbGliLnVucXVvdGUocGF0aCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwYXRoKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcGF0aAorCisgICAgQHBhdGguc2V0dGVyCisgICAgZGVmIHBhdGgoc2VsZiwgcGF0aCk6CisgICAgICAgIHNlbGYuX3BhdGggPSBwYXRoCisKKyAgICAgICAgaWYgcmUuY29tcGlsZSgiXi8iKS5tYXRjaChwYXRoKToKKyAgICAgICAgICAgIHNlbGYucmVsYXRpdmUgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5yZWxhdGl2ZSA9IFRydWUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB1c2VybmFtZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi51c2VyaW5mbzoKKyAgICAgICAgICAgIHJldHVybiAoc2VsZi51c2VyaW5mby5zcGxpdCgiOiIsIDEpKVswXQorICAgICAgICByZXR1cm4gJycKKworICAgIEB1c2VybmFtZS5zZXR0ZXIKKyAgICBkZWYgdXNlcm5hbWUoc2VsZiwgdXNlcm5hbWUpOgorICAgICAgICBwYXNzd29yZCA9IHNlbGYucGFzc3dvcmQKKyAgICAgICAgc2VsZi51c2VyaW5mbyA9IHVzZXJuYW1lCisgICAgICAgIGlmIHBhc3N3b3JkOgorICAgICAgICAgICAgc2VsZi51c2VyaW5mbyArPSAiOiVzIiAlIHBhc3N3b3JkCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGFzc3dvcmQoc2VsZik6CisgICAgICAgIGlmIHNlbGYudXNlcmluZm8gYW5kICI6IiBpbiBzZWxmLnVzZXJpbmZvOgorICAgICAgICAgICAgcmV0dXJuIChzZWxmLnVzZXJpbmZvLnNwbGl0KCI6IiwgMSkpWzFdCisgICAgICAgIHJldHVybiAnJworCisgICAgQHBhc3N3b3JkLnNldHRlcgorICAgIGRlZiBwYXNzd29yZChzZWxmLCBwYXNzd29yZCk6CisgICAgICAgIHNlbGYudXNlcmluZm8gPSAiJXM6JXMiICUgKHNlbGYudXNlcm5hbWUsIHBhc3N3b3JkKQorCitkZWYgZGVjb2RldXJsKHVybCk6CisgICAgIiIiRGVjb2RlcyBhbiBVUkwgaW50byB0aGUgdG9rZW5zIChzY2hlbWUsIG5ldHdvcmsgbG9jYXRpb24sIHBhdGgsCisgICAgdXNlciwgcGFzc3dvcmQsIHBhcmFtZXRlcnMpLgorICAgICIiIgorCisgICAgbSA9IHJlLmNvbXBpbGUoJyg/UDx0eXBlPlteOl0qKTovLygoP1A8dXNlcj5bXi9dKylAKT8oP1A8bG9jYXRpb24+W147XSspKDsoP1A8cGFybT4uKikpPycpLm1hdGNoKHVybCkKKyAgICBpZiBub3QgbToKKyAgICAgICAgcmFpc2UgTWFsZm9ybWVkVXJsKHVybCkKKworICAgIHR5cGUgPSBtLmdyb3VwKCd0eXBlJykKKyAgICBsb2NhdGlvbiA9IG0uZ3JvdXAoJ2xvY2F0aW9uJykKKyAgICBpZiBub3QgbG9jYXRpb246CisgICAgICAgIHJhaXNlIE1hbGZvcm1lZFVybCh1cmwpCisgICAgdXNlciA9IG0uZ3JvdXAoJ3VzZXInKQorICAgIHBhcm0gPSBtLmdyb3VwKCdwYXJtJykKKworICAgIGxvY2lkeCA9IGxvY2F0aW9uLmZpbmQoJy8nKQorICAgIGlmIGxvY2lkeCAhPSAtMSBhbmQgdHlwZS5sb3dlcigpICE9ICdmaWxlJzoKKyAgICAgICAgaG9zdCA9IGxvY2F0aW9uWzpsb2NpZHhdCisgICAgICAgIHBhdGggPSBsb2NhdGlvbltsb2NpZHg6XQorICAgIGVsc2U6CisgICAgICAgIGhvc3QgPSAiIgorICAgICAgICBwYXRoID0gbG9jYXRpb24KKyAgICBpZiB1c2VyOgorICAgICAgICBtID0gcmUuY29tcGlsZSgnKD9QPHVzZXI+W146XSspKDo/KD9QPHBzd2Q+LiopKScpLm1hdGNoKHVzZXIpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICB1c2VyID0gbS5ncm91cCgndXNlcicpCisgICAgICAgICAgICBwc3dkID0gbS5ncm91cCgncHN3ZCcpCisgICAgZWxzZToKKyAgICAgICAgdXNlciA9ICcnCisgICAgICAgIHBzd2QgPSAnJworCisgICAgcCA9IHt9CisgICAgaWYgcGFybToKKyAgICAgICAgZm9yIHMgaW4gcGFybS5zcGxpdCgnOycpOgorICAgICAgICAgICAgaWYgczoKKyAgICAgICAgICAgICAgICBpZiBub3QgJz0nIGluIHM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE1hbGZvcm1lZFVybCh1cmwsICJUaGUgVVJMOiAnJXMnIGlzIGludmFsaWQ6IHBhcmFtZXRlciAlcyBkb2VzIG5vdCBzcGVjaWZ5IGEgdmFsdWUgKG1pc3NpbmcgJz0nKSIgJSAodXJsLCBzKSkKKyAgICAgICAgICAgICAgICBzMSwgczIgPSBzLnNwbGl0KCc9JykKKyAgICAgICAgICAgICAgICBwW3MxXSA9IHMyCisKKyAgICByZXR1cm4gdHlwZSwgaG9zdCwgdXJsbGliLnVucXVvdGUocGF0aCksIHVzZXIsIHBzd2QsIHAKKworZGVmIGVuY29kZXVybChkZWNvZGVkKToKKyAgICAiIiJFbmNvZGVzIGEgVVJMIGZyb20gdG9rZW5zIChzY2hlbWUsIG5ldHdvcmsgbG9jYXRpb24sIHBhdGgsCisgICAgdXNlciwgcGFzc3dvcmQsIHBhcmFtZXRlcnMpLgorICAgICIiIgorCisgICAgdHlwZSwgaG9zdCwgcGF0aCwgdXNlciwgcHN3ZCwgcCA9IGRlY29kZWQKKworICAgIGlmIG5vdCBwYXRoOgorICAgICAgICByYWlzZSBNaXNzaW5nUGFyYW1ldGVyRXJyb3IoJ3BhdGgnLCAiZW5jb2RlZCBmcm9tIHRoZSBkYXRhICVzIiAlIHN0cihkZWNvZGVkKSkKKyAgICBpZiBub3QgdHlwZToKKyAgICAgICAgcmFpc2UgTWlzc2luZ1BhcmFtZXRlckVycm9yKCd0eXBlJywgImVuY29kZWQgZnJvbSB0aGUgZGF0YSAlcyIgJSBzdHIoZGVjb2RlZCkpCisgICAgdXJsID0gJyVzOi8vJyAlIHR5cGUKKyAgICBpZiB1c2VyIGFuZCB0eXBlICE9ICJmaWxlIjoKKyAgICAgICAgdXJsICs9ICIlcyIgJSB1c2VyCisgICAgICAgIGlmIHBzd2Q6CisgICAgICAgICAgICB1cmwgKz0gIjolcyIgJSBwc3dkCisgICAgICAgIHVybCArPSAiQCIKKyAgICBpZiBob3N0IGFuZCB0eXBlICE9ICJmaWxlIjoKKyAgICAgICAgdXJsICs9ICIlcyIgJSBob3N0CisgICAgIyBTdGFuZGFyZGlzZSBwYXRoIHRvIGVuc3VyZSBjb21wYXJpc29ucyB3b3JrCisgICAgd2hpbGUgJy8vJyBpbiBwYXRoOgorICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKCIvLyIsICIvIikKKyAgICB1cmwgKz0gIiVzIiAlIHVybGxpYi5xdW90ZShwYXRoKQorICAgIGlmIHA6CisgICAgICAgIGZvciBwYXJtIGluIHA6CisgICAgICAgICAgICB1cmwgKz0gIjslcz0lcyIgJSAocGFybSwgcFtwYXJtXSkKKworICAgIHJldHVybiB1cmwKKworZGVmIHVyaV9yZXBsYWNlKHVkLCB1cmlfZmluZCwgdXJpX3JlcGxhY2UsIHJlcGxhY2VtZW50cywgZCk6CisgICAgaWYgbm90IHVkLnVybCBvciBub3QgdXJpX2ZpbmQgb3Igbm90IHVyaV9yZXBsYWNlOgorICAgICAgICBsb2dnZXIuZXJyb3IoInVyaV9yZXBsYWNlOiBwYXNzZWQgYW4gdW5kZWZpbmVkIHZhbHVlLCBub3QgcmVwbGFjaW5nIikKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICB1cmlfZGVjb2RlZCA9IGxpc3QoZGVjb2RldXJsKHVkLnVybCkpCisgICAgdXJpX2ZpbmRfZGVjb2RlZCA9IGxpc3QoZGVjb2RldXJsKHVyaV9maW5kKSkKKyAgICB1cmlfcmVwbGFjZV9kZWNvZGVkID0gbGlzdChkZWNvZGV1cmwodXJpX3JlcGxhY2UpKQorICAgIGxvZ2dlci5kZWJ1ZygyLCAiRm9yIHVybCAlcyBjb21wYXJpbmcgJXMgdG8gJXMiICUgKHVyaV9kZWNvZGVkLCB1cmlfZmluZF9kZWNvZGVkLCB1cmlfcmVwbGFjZV9kZWNvZGVkKSkKKyAgICByZXN1bHRfZGVjb2RlZCA9IFsnJywgJycsICcnLCAnJywgJycsIHt9XQorICAgIGZvciBsb2MsIGkgaW4gZW51bWVyYXRlKHVyaV9maW5kX2RlY29kZWQpOgorICAgICAgICByZXN1bHRfZGVjb2RlZFtsb2NdID0gdXJpX2RlY29kZWRbbG9jXQorICAgICAgICByZWdleHAgPSBpCisgICAgICAgIGlmIGxvYyA9PSAwIGFuZCByZWdleHAgYW5kIG5vdCByZWdleHAuZW5kc3dpdGgoIiQiKToKKyAgICAgICAgICAgICMgTGVhdmluZyB0aGUgdHlwZSB1bmFuY2hvcmVkIGNhbiBtZWFuICJodHRwcyIgbWF0Y2hpbmcgImZpbGUiIGNhbiBiZWNvbWUgImZpbGVzIgorICAgICAgICAgICAgIyB3aGljaCBpcyBjbGVhcmx5IHVuZGVzaXJhYmxlLgorICAgICAgICAgICAgcmVnZXhwICs9ICIkIgorICAgICAgICBpZiBsb2MgPT0gNToKKyAgICAgICAgICAgICMgSGFuZGxlIFVSTCBwYXJhbWV0ZXJzCisgICAgICAgICAgICBpZiBpOgorICAgICAgICAgICAgICAgICMgQW55IHNwZWNpZmllZCBVUkwgcGFyYW1ldGVycyBtdXN0IG1hdGNoCisgICAgICAgICAgICAgICAgZm9yIGsgaW4gdXJpX3JlcGxhY2VfZGVjb2RlZFtsb2NdOgorICAgICAgICAgICAgICAgICAgICBpZiB1cmlfZGVjb2RlZFtsb2NdW2tdICE9IHVyaV9yZXBsYWNlX2RlY29kZWRbbG9jXVtrXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICAjIE92ZXJ3cml0ZSBhbnkgc3BlY2lmaWVkIHJlcGxhY2VtZW50IHBhcmFtZXRlcnMKKyAgICAgICAgICAgIGZvciBrIGluIHVyaV9yZXBsYWNlX2RlY29kZWRbbG9jXToKKyAgICAgICAgICAgICAgICBmb3IgbCBpbiByZXBsYWNlbWVudHM6CisgICAgICAgICAgICAgICAgICAgIHVyaV9yZXBsYWNlX2RlY29kZWRbbG9jXVtrXSA9IHVyaV9yZXBsYWNlX2RlY29kZWRbbG9jXVtrXS5yZXBsYWNlKGwsIHJlcGxhY2VtZW50c1tsXSkKKyAgICAgICAgICAgICAgICByZXN1bHRfZGVjb2RlZFtsb2NdW2tdID0gdXJpX3JlcGxhY2VfZGVjb2RlZFtsb2NdW2tdCisgICAgICAgIGVsaWYgKHJlLm1hdGNoKHJlZ2V4cCwgdXJpX2RlY29kZWRbbG9jXSkpOgorICAgICAgICAgICAgaWYgbm90IHVyaV9yZXBsYWNlX2RlY29kZWRbbG9jXToKKyAgICAgICAgICAgICAgICByZXN1bHRfZGVjb2RlZFtsb2NdID0gIiIgICAgCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZvciBrIGluIHJlcGxhY2VtZW50czoKKyAgICAgICAgICAgICAgICAgICAgdXJpX3JlcGxhY2VfZGVjb2RlZFtsb2NdID0gdXJpX3JlcGxhY2VfZGVjb2RlZFtsb2NdLnJlcGxhY2UoaywgcmVwbGFjZW1lbnRzW2tdKQorICAgICAgICAgICAgICAgICNiYi5ub3RlKCIlcyAlcyAlcyIgJSAocmVnZXhwLCB1cmlfcmVwbGFjZV9kZWNvZGVkW2xvY10sIHVyaV9kZWNvZGVkW2xvY10pKQorICAgICAgICAgICAgICAgIHJlc3VsdF9kZWNvZGVkW2xvY10gPSByZS5zdWIocmVnZXhwLCB1cmlfcmVwbGFjZV9kZWNvZGVkW2xvY10sIHVyaV9kZWNvZGVkW2xvY10pCisgICAgICAgICAgICBpZiBsb2MgPT0gMjoKKyAgICAgICAgICAgICAgICAjIEhhbmRsZSBwYXRoIG1hbmlwdWxhdGlvbnMKKyAgICAgICAgICAgICAgICBiYXNlbmFtZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiB1cmlfZGVjb2RlZFswXSAhPSB1cmlfcmVwbGFjZV9kZWNvZGVkWzBdIGFuZCB1ZC5taXJyb3J0YXJiYWxsOgorICAgICAgICAgICAgICAgICAgICAjIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHVybCB0eXBlcyBkaWZmZXIsIG11c3QgYmUgYSBtaXJyb3J0YXJiYWxsIG1hcHBpbmcKKyAgICAgICAgICAgICAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHVkLm1pcnJvcnRhcmJhbGwpCisgICAgICAgICAgICAgICAgICAgICMgS2lsbCBwYXJhbWV0ZXJzLCB0aGV5IG1ha2Ugbm8gc2Vuc2UgZm9yIG1pcnJvciB0YXJiYWxscworICAgICAgICAgICAgICAgICAgICB1cmlfZGVjb2RlZFs1XSA9IHt9CisgICAgICAgICAgICAgICAgZWxpZiB1ZC5sb2NhbHBhdGggYW5kIHVkLm1ldGhvZC5zdXBwb3J0c19jaGVja3N1bSh1ZCk6CisgICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZSh1ZC5sb2NhbHBhdGgpCisgICAgICAgICAgICAgICAgaWYgYmFzZW5hbWUgYW5kIG5vdCByZXN1bHRfZGVjb2RlZFtsb2NdLmVuZHN3aXRoKGJhc2VuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2RlY29kZWRbbG9jXSA9IG9zLnBhdGguam9pbihyZXN1bHRfZGVjb2RlZFtsb2NdLCBiYXNlbmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgcmVzdWx0ID0gZW5jb2RldXJsKHJlc3VsdF9kZWNvZGVkKQorICAgIGlmIHJlc3VsdCA9PSB1ZC51cmw6CisgICAgICAgIHJldHVybiBOb25lCisgICAgbG9nZ2VyLmRlYnVnKDIsICJGb3IgdXJsICVzIHJldHVybmluZyAlcyIgJSAodWQudXJsLCByZXN1bHQpKQorICAgIHJldHVybiByZXN1bHQKKworbWV0aG9kcyA9IFtdCit1cmxkYXRhX2NhY2hlID0ge30KK3NhdmVkX2hlYWRyZXZzID0ge30KKworZGVmIGZldGNoZXJfaW5pdChkKToKKyAgICAiIiIKKyAgICBDYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgZmV0Y2hlcnMgb25jZSB0aGUgY29uZmlndXJhdGlvbiBkYXRhIGlzIGtub3duLgorICAgIENhbGxzIGJlZm9yZSB0aGlzIG11c3Qgbm90IGhpdCB0aGUgY2FjaGUuCisgICAgIiIiCisgICAgIyBXaGVuIHRvIGRyb3AgU0NNIGhlYWQgcmV2aXNpb25zIGNvbnRyb2xsZWQgYnkgdXNlciBwb2xpY3kKKyAgICBzcmNyZXZfcG9saWN5ID0gZC5nZXRWYXIoJ0JCX1NSQ1JFVl9QT0xJQ1knLCBUcnVlKSBvciAiY2xlYXIiCisgICAgaWYgc3JjcmV2X3BvbGljeSA9PSAiY2FjaGUiOgorICAgICAgICBsb2dnZXIuZGVidWcoMSwgIktlZXBpbmcgU1JDUkVWIGNhY2hlIGR1ZSB0byBjYWNoZSBwb2xpY3kgb2Y6ICVzIiwgc3JjcmV2X3BvbGljeSkKKyAgICBlbGlmIHNyY3Jldl9wb2xpY3kgPT0gImNsZWFyIjoKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJDbGVhcmluZyBTUkNSRVYgY2FjaGUgZHVlIHRvIGNhY2hlIHBvbGljeSBvZjogJXMiLCBzcmNyZXZfcG9saWN5KQorICAgICAgICByZXZzID0gYmIucGVyc2lzdF9kYXRhLnBlcnNpc3QoJ0JCX1VSSV9IRUFEUkVWUycsIGQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLmZldGNoMi5zYXZlZF9oZWFkcmV2cyA9IHJldnMuaXRlbXMoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldnMuY2xlYXIoKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIkludmFsaWQgU1JDUkVWIGNhY2hlIHBvbGljeSBvZjogJXMiICUgc3JjcmV2X3BvbGljeSkKKworICAgIF9jaGVja3N1bV9jYWNoZS5pbml0X2NhY2hlKGQpCisKKyAgICBmb3IgbSBpbiBtZXRob2RzOgorICAgICAgICBpZiBoYXNhdHRyKG0sICJpbml0Iik6CisgICAgICAgICAgICBtLmluaXQoZCkKKworZGVmIGZldGNoZXJfcGFyc2Vfc2F2ZShkKToKKyAgICBfY2hlY2tzdW1fY2FjaGUuc2F2ZV9leHRyYXMoZCkKKworZGVmIGZldGNoZXJfcGFyc2VfZG9uZShkKToKKyAgICBfY2hlY2tzdW1fY2FjaGUuc2F2ZV9tZXJnZShkKQorCitkZWYgZmV0Y2hlcl9jb21wYXJlX3JldmlzaW9ucyhkKToKKyAgICAiIiIKKyAgICBDb21wYXJlIHRoZSByZXZpc2lvbnMgaW4gdGhlIHBlcnNpc3RhbnQgY2FjaGUgd2l0aCBjdXJyZW50IHZhbHVlcyBhbmQKKyAgICByZXR1cm4gdHJ1ZS9mYWxzZSBvbiB3aGV0aGVyIHRoZXkndmUgY2hhbmdlZC4KKyAgICAiIiIKKworICAgIGRhdGEgPSBiYi5wZXJzaXN0X2RhdGEucGVyc2lzdCgnQkJfVVJJX0hFQURSRVZTJywgZCkuaXRlbXMoKQorICAgIGRhdGEyID0gYmIuZmV0Y2gyLnNhdmVkX2hlYWRyZXZzCisKKyAgICBjaGFuZ2VkID0gRmFsc2UKKyAgICBmb3Iga2V5IGluIGRhdGE6CisgICAgICAgIGlmIGtleSBub3QgaW4gZGF0YTIgb3IgZGF0YTJba2V5XSAhPSBkYXRhW2tleV06CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIiVzIGNoYW5nZWQiLCBrZXkpCisgICAgICAgICAgICBjaGFuZ2VkID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiJXMgZGlkIG5vdCBjaGFuZ2UiLCBrZXkpCisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBtaXJyb3JfZnJvbV9zdHJpbmcoZGF0YSk6CisgICAgcmV0dXJuIFsgaS5zcGxpdCgpIGZvciBpIGluIChkYXRhIG9yICIiKS5yZXBsYWNlKCdcXG4nLCdcbicpLnNwbGl0KCdcbicpIGlmIGkgXQorCitkZWYgdmVyaWZ5X2NoZWNrc3VtKHVkLCBkLCBwcmVjb21wdXRlZD17fSk6CisgICAgIiIiCisgICAgdmVyaWZ5IHRoZSBNRDUgYW5kIFNIQTI1NiBjaGVja3N1bSBmb3IgZG93bmxvYWRlZCBzcmMKKworICAgIFJhaXNlcyBhIEZldGNoRXJyb3IgaWYgb25lIG9yIGJvdGggb2YgdGhlIFNSQ19VUkkgY2hlY2tzdW1zIGRvIG5vdCBtYXRjaAorICAgIHRoZSBkb3dubG9hZGVkIGZpbGUsIG9yIGlmIEJCX1NUUklDVF9DSEVDS1NVTSBpcyBzZXQgYW5kIHRoZXJlIGFyZSBubworICAgIGNoZWNrc3VtcyBzcGVjaWZpZWQuCisKKyAgICBSZXR1cm5zIGEgZGljdCBvZiBjaGVja3N1bXMgdGhhdCBjYW4gYmUgc3RvcmVkIGluIGEgZG9uZSBzdGFtcCBmaWxlIGFuZAorICAgIHBhc3NlZCBpbiBhcyBwcmVjb21wdXRlZCBwYXJhbWV0ZXIgaW4gYSBsYXRlciBjYWxsIHRvIGF2b2lkIHJlLWNvbXB1dGluZworICAgIHRoZSBjaGVja3N1bXMgZnJvbSB0aGUgZmlsZS4gVGhpcyBhbGxvd3MgdmVyaWZ5aW5nIHRoZSBjaGVja3N1bXMgb2YgdGhlCisgICAgZmlsZSBhZ2FpbnN0IHRob3NlIGluIHRoZSByZWNpcGUgZWFjaCB0aW1lLCByYXRoZXIgdGhhbiBvbmx5IGFmdGVyCisgICAgZG93bmxvYWRpbmcuIFNlZSBodHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1NzEuCisgICAgIiIiCisKKyAgICBfTUQ1X0tFWSA9ICJtZDUiCisgICAgX1NIQTI1Nl9LRVkgPSAic2hhMjU2IgorCisgICAgaWYgdWQuaWdub3JlX2NoZWNrc3VtcyBvciBub3QgdWQubWV0aG9kLnN1cHBvcnRzX2NoZWNrc3VtKHVkKToKKyAgICAgICAgcmV0dXJuIHt9CisKKyAgICBpZiBfTUQ1X0tFWSBpbiBwcmVjb21wdXRlZDoKKyAgICAgICAgbWQ1ZGF0YSA9IHByZWNvbXB1dGVkW19NRDVfS0VZXQorICAgIGVsc2U6CisgICAgICAgIG1kNWRhdGEgPSBiYi51dGlscy5tZDVfZmlsZSh1ZC5sb2NhbHBhdGgpCisKKyAgICBpZiBfU0hBMjU2X0tFWSBpbiBwcmVjb21wdXRlZDoKKyAgICAgICAgc2hhMjU2ZGF0YSA9IHByZWNvbXB1dGVkW19TSEEyNTZfS0VZXQorICAgIGVsc2U6CisgICAgICAgIHNoYTI1NmRhdGEgPSBiYi51dGlscy5zaGEyNTZfZmlsZSh1ZC5sb2NhbHBhdGgpCisKKyAgICBpZiB1ZC5tZXRob2QucmVjb21tZW5kc19jaGVja3N1bSh1ZCk6CisgICAgICAgICMgSWYgc3RyaWN0IGNoZWNraW5nIGVuYWJsZWQgYW5kIG5laXRoZXIgc3VtIGRlZmluZWQsIHJhaXNlIGVycm9yCisgICAgICAgIHN0cmljdCA9IGQuZ2V0VmFyKCJCQl9TVFJJQ1RfQ0hFQ0tTVU0iLCBUcnVlKSBvciAiMCIKKyAgICAgICAgaWYgKHN0cmljdCA9PSAiMSIpIGFuZCBub3QgKHVkLm1kNV9leHBlY3RlZCBvciB1ZC5zaGEyNTZfZXhwZWN0ZWQpOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdObyBjaGVja3N1bSBzcGVjaWZpZWQgZm9yICVzLCBwbGVhc2UgYWRkIGF0IGxlYXN0IG9uZSB0byB0aGUgcmVjaXBlOlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSVslc10gPSAiJXMiXG5TUkNfVVJJWyVzXSA9ICIlcyInICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVkLmxvY2FscGF0aCwgdWQubWQ1X25hbWUsIG1kNWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZC5zaGEyNTZfbmFtZSwgc2hhMjU2ZGF0YSkpCisgICAgICAgICAgICByYWlzZSBOb0NoZWNrc3VtRXJyb3IoJ01pc3NpbmcgU1JDX1VSSSBjaGVja3N1bScsIHVkLnVybCkKKworICAgICAgICAjIExvZyBtaXNzaW5nIHN1bXMgc28gdXNlciBjYW4gbW9yZSBlYXNpbHkgYWRkIHRoZW0KKyAgICAgICAgaWYgbm90IHVkLm1kNV9leHBlY3RlZDoKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCdNaXNzaW5nIG1kNSBTUkNfVVJJIGNoZWNrc3VtIGZvciAlcywgY29uc2lkZXIgYWRkaW5nIHRvIHRoZSByZWNpcGU6XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSVslc10gPSAiJXMiJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHVkLmxvY2FscGF0aCwgdWQubWQ1X25hbWUsIG1kNWRhdGEpCisKKyAgICAgICAgaWYgbm90IHVkLnNoYTI1Nl9leHBlY3RlZDoKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCdNaXNzaW5nIHNoYTI1NiBTUkNfVVJJIGNoZWNrc3VtIGZvciAlcywgY29uc2lkZXIgYWRkaW5nIHRvIHRoZSByZWNpcGU6XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSVslc10gPSAiJXMiJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHVkLmxvY2FscGF0aCwgdWQuc2hhMjU2X25hbWUsIHNoYTI1NmRhdGEpCisKKyAgICBtZDVtaXNtYXRjaCA9IEZhbHNlCisgICAgc2hhMjU2bWlzbWF0Y2ggPSBGYWxzZQorCisgICAgaWYgdWQubWQ1X2V4cGVjdGVkICE9IG1kNWRhdGE6CisgICAgICAgIG1kNW1pc21hdGNoID0gVHJ1ZQorCisgICAgaWYgdWQuc2hhMjU2X2V4cGVjdGVkICE9IHNoYTI1NmRhdGE6CisgICAgICAgIHNoYTI1Nm1pc21hdGNoID0gVHJ1ZQorCisgICAgIyBXZSB3YW50IHRvIGFsZXJ0IHRoZSB1c2VyIGlmIGEgY2hlY2tzdW0gaXMgZGVmaW5lZCBpbiB0aGUgcmVjaXBlIGJ1dAorICAgICMgaXQgZG9lcyBub3QgbWF0Y2guCisgICAgbXNnID0gIiIKKyAgICBtaXNtYXRjaCA9IEZhbHNlCisgICAgaWYgbWQ1bWlzbWF0Y2ggYW5kIHVkLm1kNV9leHBlY3RlZDoKKyAgICAgICAgbXNnID0gbXNnICsgIlxuRmlsZTogJyVzJyBoYXMgJXMgY2hlY2tzdW0gJXMgd2hlbiAlcyB3YXMgZXhwZWN0ZWQiICUgKHVkLmxvY2FscGF0aCwgJ21kNScsIG1kNWRhdGEsIHVkLm1kNV9leHBlY3RlZCkKKyAgICAgICAgbWlzbWF0Y2ggPSBUcnVlOworCisgICAgaWYgc2hhMjU2bWlzbWF0Y2ggYW5kIHVkLnNoYTI1Nl9leHBlY3RlZDoKKyAgICAgICAgbXNnID0gbXNnICsgIlxuRmlsZTogJyVzJyBoYXMgJXMgY2hlY2tzdW0gJXMgd2hlbiAlcyB3YXMgZXhwZWN0ZWQiICUgKHVkLmxvY2FscGF0aCwgJ3NoYTI1NicsIHNoYTI1NmRhdGEsIHVkLnNoYTI1Nl9leHBlY3RlZCkKKyAgICAgICAgbWlzbWF0Y2ggPSBUcnVlOworCisgICAgaWYgbWlzbWF0Y2g6CisgICAgICAgIG1zZyA9IG1zZyArICdcbklmIHRoaXMgY2hhbmdlIGlzIGV4cGVjdGVkIChlLmcuIHlvdSBoYXZlIHVwZ3JhZGVkIHRvIGEgbmV3IHZlcnNpb24gd2l0aG91dCB1cGRhdGluZyB0aGUgY2hlY2tzdW1zKSB0aGVuIHlvdSBjYW4gdXNlIHRoZXNlIGxpbmVzIHdpdGhpbiB0aGUgcmVjaXBlOlxuU1JDX1VSSVslc10gPSAiJXMiXG5TUkNfVVJJWyVzXSA9ICIlcyJcbk90aGVyd2lzZSB5b3Ugc2hvdWxkIHJldHJ5IHRoZSBkb3dubG9hZCBhbmQvb3IgY2hlY2sgd2l0aCB1cHN0cmVhbSB0byBkZXRlcm1pbmUgaWYgdGhlIGZpbGUgaGFzIGJlY29tZSBjb3JydXB0ZWQgb3Igb3RoZXJ3aXNlIHVuZXhwZWN0ZWRseSBtb2RpZmllZC5cbicgJSAodWQubWQ1X25hbWUsIG1kNWRhdGEsIHVkLnNoYTI1Nl9uYW1lLCBzaGEyNTZkYXRhKQorCisgICAgaWYgbGVuKG1zZyk6CisgICAgICAgIHJhaXNlIENoZWNrc3VtRXJyb3IoJ0NoZWNrc3VtIG1pc21hdGNoISVzJyAlIG1zZywgdWQudXJsLCBtZDVkYXRhKQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgX01ENV9LRVk6IG1kNWRhdGEsCisgICAgICAgIF9TSEEyNTZfS0VZOiBzaGEyNTZkYXRhCisgICAgfQorCisKK2RlZiB2ZXJpZnlfZG9uZXN0YW1wKHVkLCBkLCBvcmlndWQ9Tm9uZSk6CisgICAgIiIiCisgICAgQ2hlY2sgd2hldGhlciB0aGUgZG9uZSBzdGFtcCBmaWxlIGhhcyB0aGUgcmlnaHQgY2hlY2tzdW1zIChpZiB0aGUgZmV0Y2gKKyAgICBtZXRob2Qgc3VwcG9ydHMgdGhlbSkuIElmIGl0IGRvZXNuJ3QsIGRlbGV0ZSB0aGUgZG9uZSBzdGFtcCBhbmQgZm9yY2UKKyAgICBhIHJlLWRvd25sb2FkLgorCisgICAgUmV0dXJucyBUcnVlLCBpZiB0aGUgZG9uZXN0YW1wIGV4aXN0cyBhbmQgaXMgdmFsaWQsIEZhbHNlIG90aGVyd2lzZS4gV2hlbgorICAgIHJldHVybmluZyBGYWxzZSwgYW55IGV4aXN0aW5nIGRvbmUgc3RhbXBzIGFyZSByZW1vdmVkLgorICAgICIiIgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh1ZC5kb25lc3RhbXApOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmIChub3QgdWQubWV0aG9kLnN1cHBvcnRzX2NoZWNrc3VtKHVkKSBvcgorICAgICAgICAob3JpZ3VkIGFuZCBub3Qgb3JpZ3VkLm1ldGhvZC5zdXBwb3J0c19jaGVja3N1bShvcmlndWQpKSk6CisgICAgICAgICMgZG9uZSBzdGFtcCBleGlzdHMsIGNoZWNrc3VtcyBub3Qgc3VwcG9ydGVkOyBhc3N1bWUgdGhlIGxvY2FsIGZpbGUgaXMKKyAgICAgICAgIyBjdXJyZW50CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModWQubG9jYWxwYXRoKToKKyAgICAgICAgIyBkb25lIHN0YW1wIGV4aXN0cywgYnV0IHRoZSBkb3dubG9hZGVkIGZpbGUgZG9lcyBub3Q7IHRoZSBkb25lIHN0YW1wCisgICAgICAgICMgbXVzdCBiZSBpbmNvcnJlY3QsIHJlLXRyaWdnZXIgdGhlIGRvd25sb2FkCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh1ZC5kb25lc3RhbXApCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgcHJlY29tcHV0ZWRfY2hlY2tzdW1zID0ge30KKyAgICAjIE9ubHkgcmUtdXNlIHRoZSBwcmVjb21wdXRlZCBjaGVja3N1bXMgaWYgdGhlIGRvbmVzdGFtcCBpcyBuZXdlciB0aGFuIHRoZQorICAgICMgZmlsZS4gRG8gbm90IHJlbHkgb24gdGhlIG10aW1lIG9mIGRpcmVjdG9yaWVzLCB0aG91Z2guIElmIHVkLmxvY2FscGF0aCBpcworICAgICMgYSBkaXJlY3RvcnksIHRoZXJlIHdpbGwgcHJvYmFibHkgbm90IGJlIGFueSBjaGVja3N1bXMgYW55d2F5LgorICAgIGlmIChvcy5wYXRoLmlzZGlyKHVkLmxvY2FscGF0aCkgb3IKKyAgICAgICAgICAgIG9zLnBhdGguZ2V0bXRpbWUodWQubG9jYWxwYXRoKSA8IG9zLnBhdGguZ2V0bXRpbWUodWQuZG9uZXN0YW1wKSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3Blbih1ZC5kb25lc3RhbXAsICJyYiIpIGFzIGNhY2hlZmlsZToKKyAgICAgICAgICAgICAgICBwaWNrbGVkID0gcGlja2xlLlVucGlja2xlcihjYWNoZWZpbGUpCisgICAgICAgICAgICAgICAgcHJlY29tcHV0ZWRfY2hlY2tzdW1zLnVwZGF0ZShwaWNrbGVkLmxvYWQoKSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgIyBBdm9pZCB0aGUgd2FybmluZ3Mgb24gdGhlIHVwZ3JhZGUgcGF0aCBmcm9tIGVtdHB5IGRvbmUgc3RhbXAKKyAgICAgICAgICAgICMgZmlsZXMgdG8gdGhvc2UgY29udGFpbmluZyB0aGUgY2hlY2tzdW1zLgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZSwgRU9GRXJyb3IpOgorICAgICAgICAgICAgICAgICMgSWdub3JlIGVycm9ycywgdGhleSBhcmVuJ3QgZmF0YWwKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiQ291bGRuJ3QgbG9hZCBjaGVja3N1bXMgZnJvbSBkb25lc3RhbXAgJXM6ICVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKG1zZzogJXMpIiAlICh1ZC5kb25lc3RhbXAsIHR5cGUoZSkuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKGUpKSkKKworICAgIHRyeToKKyAgICAgICAgY2hlY2tzdW1zID0gdmVyaWZ5X2NoZWNrc3VtKHVkLCBkLCBwcmVjb21wdXRlZF9jaGVja3N1bXMpCisgICAgICAgICMgSWYgdGhlIGNhY2hlIGZpbGUgZGlkIG5vdCBoYXZlIHRoZSBjaGVja3N1bXMsIGNvbXB1dGUgYW5kIHN0b3JlIHRoZW0KKyAgICAgICAgIyBhcyBhbiB1cGdyYWRlIHBhdGggZnJvbSB0aGUgcHJldmlvdXMgZG9uZSBzdGFtcCBmaWxlIGZvcm1hdC4KKyAgICAgICAgaWYgY2hlY2tzdW1zICE9IHByZWNvbXB1dGVkX2NoZWNrc3VtczoKKyAgICAgICAgICAgIHdpdGggb3Blbih1ZC5kb25lc3RhbXAsICJ3YiIpIGFzIGNhY2hlZmlsZToKKyAgICAgICAgICAgICAgICBwID0gcGlja2xlLlBpY2tsZXIoY2FjaGVmaWxlLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCkKKyAgICAgICAgICAgICAgICBwLmR1bXAoY2hlY2tzdW1zKQorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGV4Y2VwdCBDaGVja3N1bUVycm9yIGFzIGU6CisgICAgICAgICMgQ2hlY2tzdW1zIGZhaWxlZCB0byB2ZXJpZnksIHRyaWdnZXIgcmUtZG93bmxvYWQgYW5kIHJlbW92ZSB0aGUKKyAgICAgICAgIyBpbmNvcnJlY3Qgc3RhbXAgZmlsZS4KKyAgICAgICAgbG9nZ2VyLndhcm4oIkNoZWNrc3VtIG1pc21hdGNoIGZvciBsb2NhbCBmaWxlICVzXG4iCisgICAgICAgICAgICAgICAgICAgICJDbGVhbmluZyBhbmQgdHJ5aW5nIGFnYWluLiIgJSB1ZC5sb2NhbHBhdGgpCisgICAgICAgIHJlbmFtZV9iYWRfY2hlY2tzdW0odWQsIGUuY2hlY2tzdW0pCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh1ZC5kb25lc3RhbXApCisgICAgcmV0dXJuIEZhbHNlCisKKworZGVmIHVwZGF0ZV9zdGFtcCh1ZCwgZCk6CisgICAgIiIiCisgICAgICAgIGRvbmVzdGFtcCBpcyBmaWxlIHN0YW1wIGluZGljYXRpbmcgdGhlIHdob2xlIGZldGNoaW5nIGlzIGRvbmUKKyAgICAgICAgdGhpcyBmdW5jdGlvbiB1cGRhdGUgdGhlIHN0YW1wIGFmdGVyIHZlcmlmeWluZyB0aGUgY2hlY2tzdW0KKyAgICAiIiIKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyh1ZC5kb25lc3RhbXApOgorICAgICAgICAjIFRvdWNoIHRoZSBkb25lIHN0YW1wIGZpbGUgdG8gc2hvdyBhY3RpdmUgdXNlIG9mIHRoZSBkb3dubG9hZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy51dGltZSh1ZC5kb25lc3RhbXAsIE5vbmUpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICMgRXJyb3JzIGFyZW4ndCBmYXRhbCBoZXJlCisgICAgICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgY2hlY2tzdW1zID0gdmVyaWZ5X2NoZWNrc3VtKHVkLCBkKQorICAgICAgICAjIFN0b3JlIHRoZSBjaGVja3N1bXMgZm9yIGxhdGVyIHJlLXZlcmlmaWNhdGlvbiBhZ2FpbnN0IHRoZSByZWNpcGUKKyAgICAgICAgd2l0aCBvcGVuKHVkLmRvbmVzdGFtcCwgIndiIikgYXMgY2FjaGVmaWxlOgorICAgICAgICAgICAgcCA9IHBpY2tsZS5QaWNrbGVyKGNhY2hlZmlsZSwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wpCisgICAgICAgICAgICBwLmR1bXAoY2hlY2tzdW1zKQorCitkZWYgc3VicHJvY2Vzc19zZXR1cCgpOgorICAgICMgUHl0aG9uIGluc3RhbGxzIGEgU0lHUElQRSBoYW5kbGVyIGJ5IGRlZmF1bHQuIFRoaXMgaXMgdXN1YWxseSBub3Qgd2hhdAorICAgICMgbm9uLVB5dGhvbiBzdWJwcm9jZXNzZXMgZXhwZWN0LgorICAgICMgU0lHUElQRSBlcnJvcnMgYXJlIGtub3duIGlzc3VlcyB3aXRoIGd6aXAvYmFzaAorICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1BJUEUsIHNpZ25hbC5TSUdfREZMKQorCitkZWYgZ2V0X2F1dG9yZXYoZCk6CisgICAgIyAgb25seSBub3QgY2FjaGUgc3JjIHJldiBpbiBhdXRvcmV2IGNhc2UKKyAgICBpZiBkLmdldFZhcignQkJfU1JDUkVWX1BPTElDWScsIFRydWUpICE9ICJjYWNoZSI6CisgICAgICAgIGQuc2V0VmFyKCdfX0JCX0RPTlRfQ0FDSEUnLCAnMScpCisgICAgcmV0dXJuICJBVVRPSU5DIgorCitkZWYgZ2V0X3NyY3JldihkLCBtZXRob2RfbmFtZT0nc29ydGFibGVfcmV2aXNpb24nKToKKyAgICAiIiIKKyAgICBSZXR1cm4gdGhlIHJldnNpb24gc3RyaW5nLCB1c3VhbGx5IGZvciB1c2UgaW4gdGhlIHZlcnNpb24gc3RyaW5nIChQVikgb2YgdGhlIGN1cnJlbnQgcGFja2FnZQorICAgIE1vc3QgcGFja2FnZXMgdXN1YWxseSBvbmx5IGhhdmUgb25lIFNDTSBzbyB3ZSBqdXN0IHBhc3Mgb24gdGhlIGNhbGwuCisgICAgSW4gdGhlIG11bHRpIFNDTSBjYXNlLCB3ZSBidWlsZCBhIHZhbHVlIGJhc2VkIG9uIFNSQ1JFVl9GT1JNQVQgd2hpY2ggbXVzdAorICAgIGhhdmUgYmVlbiBzZXQuCisKKyAgICBUaGUgaWRlYSBoZXJlIGlzIHRoYXQgd2UgcHV0IHRoZSBzdHJpbmcgIkFVVE9JTkMrIiBpbnRvIHJldHVybiB2YWx1ZSBpZiB0aGUgcmV2aXNpb25zIGFyZSBub3QgCisgICAgaW5jcmVtZW50YWwsIG90aGVyIGNvZGUgaXMgdGhlbiByZXNwb25zaWJsZSBmb3IgdHVybmluZyB0aGF0IGludG8gYW4gaW5jcmVhc2luZyB2YWx1ZSAoaWYgbmVlZGVkKQorCisgICAgQSBtZXRob2RfbmFtZSBjYW4gYmUgc3VwcGxpZWQgdG8gcmV0cmlldmUgYW4gYWx0ZXJuYXRpdmVseSBmb3JtYXR0ZWQgcmV2aXNpb24gZnJvbSBhIGZldGNoZXIsIGlmCisgICAgdGhhdCBmZXRjaGVyIHByb3ZpZGVzIGEgbWV0aG9kIHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIHRoZSBzYW1lIHNpZ25hdHVyZSBhcyBzb3J0YWJsZV9yZXZpc2lvbi4KKyAgICAiIiIKKworICAgIHNjbXMgPSBbXQorICAgIGZldGNoZXIgPSBGZXRjaChkLmdldFZhcignU1JDX1VSSScsIFRydWUpLnNwbGl0KCksIGQpCisgICAgdXJsZGF0YSA9IGZldGNoZXIudWQKKyAgICBmb3IgdSBpbiB1cmxkYXRhOgorICAgICAgICBpZiB1cmxkYXRhW3VdLm1ldGhvZC5zdXBwb3J0c19zcmNyZXYoKToKKyAgICAgICAgICAgIHNjbXMuYXBwZW5kKHUpCisKKyAgICBpZiBsZW4oc2NtcykgPT0gMDoKKyAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiU1JDUkVWIHdhcyB1c2VkIHlldCBubyB2YWxpZCBTQ00gd2FzIGZvdW5kIGluIFNSQ19VUkkiKQorCisgICAgaWYgbGVuKHNjbXMpID09IDEgYW5kIGxlbih1cmxkYXRhW3NjbXNbMF1dLm5hbWVzKSA9PSAxOgorICAgICAgICBhdXRvaW5jLCByZXYgPSBnZXRhdHRyKHVybGRhdGFbc2Ntc1swXV0ubWV0aG9kLCBtZXRob2RfbmFtZSkodXJsZGF0YVtzY21zWzBdXSwgZCwgdXJsZGF0YVtzY21zWzBdXS5uYW1lc1swXSkKKyAgICAgICAgaWYgbGVuKHJldikgPiAxMDoKKyAgICAgICAgICAgIHJldiA9IHJldls6MTBdCisgICAgICAgIGlmIGF1dG9pbmM6CisgICAgICAgICAgICByZXR1cm4gIkFVVE9JTkMrIiArIHJldgorICAgICAgICByZXR1cm4gcmV2CisKKyAgICAjCisgICAgIyBNdXRpcGxlIFNDTXMgYXJlIGluIFNSQ19VUkkgc28gd2UgcmVzb3J0IHRvIFNSQ1JFVl9GT1JNQVQKKyAgICAjCisgICAgZm9ybWF0ID0gZC5nZXRWYXIoJ1NSQ1JFVl9GT1JNQVQnLCBUcnVlKQorICAgIGlmIG5vdCBmb3JtYXQ6CisgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIlRoZSBTUkNSRVZfRk9STUFUIHZhcmlhYmxlIG11c3QgYmUgc2V0IHdoZW4gbXVsdGlwbGUgU0NNcyBhcmUgdXNlZC4iKQorCisgICAgc2VlbmF1dG9pbmMgPSBGYWxzZQorICAgIGZvciBzY20gaW4gc2NtczoKKyAgICAgICAgdWQgPSB1cmxkYXRhW3NjbV0KKyAgICAgICAgZm9yIG5hbWUgaW4gdWQubmFtZXM6CisgICAgICAgICAgICBhdXRvaW5jLCByZXYgPSBnZXRhdHRyKHVkLm1ldGhvZCwgbWV0aG9kX25hbWUpKHVkLCBkLCBuYW1lKQorICAgICAgICAgICAgc2VlbmF1dG9pbmMgPSBzZWVuYXV0b2luYyBvciBhdXRvaW5jCisgICAgICAgICAgICBpZiBsZW4ocmV2KSA+IDEwOgorICAgICAgICAgICAgICAgIHJldiA9IHJldls6MTBdCisgICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShuYW1lLCByZXYpCisgICAgaWYgc2VlbmF1dG9pbmM6CisgICAgICAgZm9ybWF0ID0gIkFVVE9JTkMrIiArIGZvcm1hdAorCisgICAgcmV0dXJuIGZvcm1hdAorCitkZWYgbG9jYWxwYXRoKHVybCwgZCk6CisgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChbdXJsXSwgZCkKKyAgICByZXR1cm4gZmV0Y2hlci5sb2NhbHBhdGgodXJsKQorCitkZWYgcnVuZmV0Y2hjbWQoY21kLCBkLCBxdWlldD1GYWxzZSwgY2xlYW51cD1Ob25lKToKKyAgICAiIiIKKyAgICBSdW4gY21kIHJldHVybmluZyB0aGUgY29tbWFuZCBvdXRwdXQKKyAgICBSYWlzZSBhbiBlcnJvciBpZiBpbnRlcnJ1cHRlZCBvciBjbWQgZmFpbHMKKyAgICBPcHRpb25hbGx5IGVjaG8gY29tbWFuZCBvdXRwdXQgdG8gc3Rkb3V0CisgICAgT3B0aW9uYWxseSByZW1vdmUgdGhlIGZpbGVzL2RpcmVjdG9yaWVzIGxpc3RlZCBpbiBjbGVhbnVwIHVwb24gZmFpbHVyZQorICAgICIiIgorCisgICAgIyBOZWVkIHRvIGV4cG9ydCBQQVRIIGFzIGJpbmFyeSBjb3VsZCBiZSBpbiBtZXRhZGF0YSBwYXRocworICAgICMgcmF0aGVyIHRoYW4gaG9zdCBwcm92aWRlZAorICAgICMgQWxzbyBpbmNsdWRlIHNvbWUgb3RoZXIgdmFyaWFibGVzLgorICAgICMgRklYTUU6IFNob3VsZCByZWFsbHkgaW5jbHVkZSBhbGwgZXhwb3J0IHZhcmFpYWJsZXM/CisgICAgZXhwb3J0dmFycyA9IFsnSE9NRScsICdQQVRIJywKKyAgICAgICAgICAgICAgICAgICdIVFRQX1BST1hZJywgJ2h0dHBfcHJveHknLAorICAgICAgICAgICAgICAgICAgJ0hUVFBTX1BST1hZJywgJ2h0dHBzX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICdGVFBfUFJPWFknLCAnZnRwX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICdGVFBTX1BST1hZJywgJ2Z0cHNfcHJveHknLAorICAgICAgICAgICAgICAgICAgJ05PX1BST1hZJywgJ25vX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICdBTExfUFJPWFknLCAnYWxsX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICdHSVRfUFJPWFlfQ09NTUFORCcsCisgICAgICAgICAgICAgICAgICAnR0lUX1NTTF9DQUlORk8nLAorICAgICAgICAgICAgICAgICAgJ0dJVF9TTUFSVF9IVFRQJywKKyAgICAgICAgICAgICAgICAgICdTU0hfQVVUSF9TT0NLJywgJ1NTSF9BR0VOVF9QSUQnLAorICAgICAgICAgICAgICAgICAgJ1NPQ0tTNV9VU0VSJywgJ1NPQ0tTNV9QQVNTV0QnXQorCisgICAgaWYgbm90IGNsZWFudXA6CisgICAgICAgIGNsZWFudXAgPSBbXQorCisgICAgZm9yIHZhciBpbiBleHBvcnR2YXJzOgorICAgICAgICB2YWwgPSBkLmdldFZhcih2YXIsIFRydWUpCisgICAgICAgIGlmIHZhbDoKKyAgICAgICAgICAgIGNtZCA9ICdleHBvcnQgJyArIHZhciArICc9XCIlc1wiOyAlcycgJSAodmFsLCBjbWQpCisKKyAgICBsb2dnZXIuZGVidWcoMSwgIlJ1bm5pbmcgJXMiLCBjbWQpCisKKyAgICBzdWNjZXNzID0gRmFsc2UKKyAgICBlcnJvcl9tZXNzYWdlID0gIiIKKworICAgIHRyeToKKyAgICAgICAgKG91dHB1dCwgZXJyb3JzKSA9IGJiLnByb2Nlc3MucnVuKGNtZCwgc2hlbGw9VHJ1ZSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc3VjY2VzcyA9IFRydWUKKyAgICBleGNlcHQgYmIucHJvY2Vzcy5Ob3RGb3VuZEVycm9yIGFzIGU6CisgICAgICAgIGVycm9yX21lc3NhZ2UgPSAiRmV0Y2ggY29tbWFuZCAlcyIgJSAoZS5jb21tYW5kKQorICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGU6CisgICAgICAgIGlmIGUuc3Rkb3V0OgorICAgICAgICAgICAgb3V0cHV0ID0gIm91dHB1dDpcbiVzXG4lcyIgJSAoZS5zdGRvdXQsIGUuc3RkZXJyKQorICAgICAgICBlbGlmIGUuc3RkZXJyOgorICAgICAgICAgICAgb3V0cHV0ID0gIm91dHB1dDpcbiVzIiAlIGUuc3RkZXJyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdXRwdXQgPSAibm8gb3V0cHV0IgorICAgICAgICBlcnJvcl9tZXNzYWdlID0gIkZldGNoIGNvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVzLCAlcyIgJSAoZS5leGl0Y29kZSwgb3V0cHV0KQorICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkNtZEVycm9yIGFzIGU6CisgICAgICAgIGVycm9yX21lc3NhZ2UgPSAiRmV0Y2ggY29tbWFuZCAlcyBjb3VsZCBub3QgYmUgcnVuOlxuJXMiICUgKGUuY29tbWFuZCwgZS5tc2cpCisgICAgaWYgbm90IHN1Y2Nlc3M6CisgICAgICAgIGZvciBmIGluIGNsZWFudXA6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKGYsIFRydWUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcihlcnJvcl9tZXNzYWdlKQorCisgICAgcmV0dXJuIG91dHB1dAorCitkZWYgY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgaW5mbyA9ICIiLCB1cmwgPSBOb25lKToKKyAgICAiIiIKKyAgICBsb2cgcmVtb3RlIG5ldHdvcmsgYWNjZXNzLCBhbmQgZXJyb3IgaWYgQkJfTk9fTkVUV09SSyBpcyBzZXQKKyAgICAiIiIKKyAgICBpZiBkLmdldFZhcigiQkJfTk9fTkVUV09SSyIsIFRydWUpID09ICIxIjoKKyAgICAgICAgcmFpc2UgTmV0d29ya0FjY2Vzcyh1cmwsIGluZm8pCisgICAgZWxzZToKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJGZXRjaGVyIGFjY2Vzc2VkIHRoZSBuZXR3b3JrIHdpdGggdGhlIGNvbW1hbmQgJXMiICUgaW5mbykKKworZGVmIGJ1aWxkX21pcnJvcnVyaXMob3JpZ3VkLCBtaXJyb3JzLCBsZCk6CisgICAgdXJpcyA9IFtdCisgICAgdWRzID0gW10KKworICAgIHJlcGxhY2VtZW50cyA9IHt9CisgICAgcmVwbGFjZW1lbnRzWyJUWVBFIl0gPSBvcmlndWQudHlwZQorICAgIHJlcGxhY2VtZW50c1siSE9TVCJdID0gb3JpZ3VkLmhvc3QKKyAgICByZXBsYWNlbWVudHNbIlBBVEgiXSA9IG9yaWd1ZC5wYXRoCisgICAgcmVwbGFjZW1lbnRzWyJCQVNFTkFNRSJdID0gb3JpZ3VkLnBhdGguc3BsaXQoIi8iKVstMV0KKyAgICByZXBsYWNlbWVudHNbIk1JUlJPUk5BTUUiXSA9IG9yaWd1ZC5ob3N0LnJlcGxhY2UoJzonLCcuJykgKyBvcmlndWQucGF0aC5yZXBsYWNlKCcvJywgJy4nKS5yZXBsYWNlKCcqJywgJy4nKQorCisgICAgZGVmIGFkZHVyaSh1ZCwgdXJpcywgdWRzKToKKyAgICAgICAgZm9yIGxpbmUgaW4gbWlycm9yczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAoZmluZCwgcmVwbGFjZSkgPSBsaW5lCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbmV3dXJpID0gdXJpX3JlcGxhY2UodWQsIGZpbmQsIHJlcGxhY2UsIHJlcGxhY2VtZW50cywgbGQpCisgICAgICAgICAgICBpZiBub3QgbmV3dXJpIG9yIG5ld3VyaSBpbiB1cmlzIG9yIG5ld3VyaSA9PSBvcmlndWQudXJsOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIG5vdCB0cnVzdGVkX25ldHdvcmsobGQsIG5ld3VyaSk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJNaXJyb3IgJXMgbm90IGluIHRoZSBsaXN0IG9mIHRydXN0ZWQgbmV0d29ya3MsIHNraXBwaW5nIiAlICAobmV3dXJpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbmV3dWQgPSBGZXRjaERhdGEobmV3dXJpLCBsZCkKKyAgICAgICAgICAgICAgICBuZXd1ZC5zZXR1cF9sb2NhbHBhdGgobGQpCisgICAgICAgICAgICBleGNlcHQgYmIuZmV0Y2gyLkJCRmV0Y2hFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIk1pcnJvciBmZXRjaCBmYWlsdXJlIGZvciB1cmwgJXMgKG9yaWdpbmFsIHVybDogJXMpIiAlIChuZXd1cmksIG9yaWd1ZC51cmwpKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCBzdHIoZSkpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAjIHNldHVwX2xvY2FscGF0aCBvZiBmaWxlOi8vIHVybHMgbWF5IGZhaWwsIHdlIHNob3VsZCBzdGlsbCBzZWUgCisgICAgICAgICAgICAgICAgICAgICMgaWYgbWlycm9ycyBvZiB0aGUgdXJsIGV4aXN0CisgICAgICAgICAgICAgICAgICAgIGFkZHVyaShuZXd1ZCwgdXJpcywgdWRzKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBVbmJvdW5kTG9jYWxFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGNvbnRpbnVlICAgCisgICAgICAgICAgICB1cmlzLmFwcGVuZChuZXd1cmkpCisgICAgICAgICAgICB1ZHMuYXBwZW5kKG5ld3VkKQorCisgICAgICAgICAgICBhZGR1cmkobmV3dWQsIHVyaXMsIHVkcykKKworICAgIGFkZHVyaShvcmlndWQsIHVyaXMsIHVkcykKKworICAgIHJldHVybiB1cmlzLCB1ZHMKKworZGVmIHJlbmFtZV9iYWRfY2hlY2tzdW0odWQsIHN1ZmZpeCk6CisgICAgIiIiCisgICAgUmVuYW1lcyBmaWxlcyB0byBoYXZlIHN1ZmZpeCBmcm9tIHBhcmFtZXRlcgorICAgICIiIgorCisgICAgaWYgdWQubG9jYWxwYXRoIGlzIE5vbmU6CisgICAgICAgIHJldHVybgorCisgICAgbmV3X2xvY2FscGF0aCA9ICIlc19iYWQtY2hlY2tzdW1fJXMiICUgKHVkLmxvY2FscGF0aCwgc3VmZml4KQorICAgIGJiLndhcm4oIlJlbmFtaW5nICVzIHRvICVzIiAlICh1ZC5sb2NhbHBhdGgsIG5ld19sb2NhbHBhdGgpKQorICAgIGJiLnV0aWxzLm1vdmVmaWxlKHVkLmxvY2FscGF0aCwgbmV3X2xvY2FscGF0aCkKKworCitkZWYgdHJ5X21pcnJvcl91cmwoZmV0Y2gsIG9yaWd1ZCwgdWQsIGxkLCBjaGVjayA9IEZhbHNlKToKKyAgICAjIFJldHVybiBvZiBOb25lIG9yIGEgdmFsdWUgbWVhbnMgd2UncmUgZmluaXNoZWQKKyAgICAjIEZhbHNlIG1lYW5zIHRyeSBhbm90aGVyIHVybAorICAgIHRyeToKKyAgICAgICAgaWYgY2hlY2s6CisgICAgICAgICAgICBmb3VuZCA9IHVkLm1ldGhvZC5jaGVja3N0YXR1cyhmZXRjaCwgdWQsIGxkKQorICAgICAgICAgICAgaWYgZm91bmQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBvcy5jaGRpcihsZC5nZXRWYXIoIkRMX0RJUiIsIFRydWUpKQorCisgICAgICAgIGlmIG5vdCB2ZXJpZnlfZG9uZXN0YW1wKHVkLCBsZCwgb3JpZ3VkKSBvciB1ZC5tZXRob2QubmVlZF91cGRhdGUodWQsIGxkKToKKyAgICAgICAgICAgIHVkLm1ldGhvZC5kb3dubG9hZCh1ZCwgbGQpCisgICAgICAgICAgICBpZiBoYXNhdHRyKHVkLm1ldGhvZCwiYnVpbGRfbWlycm9yX2RhdGEiKToKKyAgICAgICAgICAgICAgICB1ZC5tZXRob2QuYnVpbGRfbWlycm9yX2RhdGEodWQsIGxkKQorCisgICAgICAgIGlmIG5vdCB1ZC5sb2NhbHBhdGggb3Igbm90IG9zLnBhdGguZXhpc3RzKHVkLmxvY2FscGF0aCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiB1ZC5sb2NhbHBhdGggPT0gb3JpZ3VkLmxvY2FscGF0aDoKKyAgICAgICAgICAgIHJldHVybiB1ZC5sb2NhbHBhdGgKKworICAgICAgICAjIFdlIG1heSBiZSBvYnRhaW5pbmcgYSBtaXJyb3IgdGFyYmFsbCB3aGljaCBuZWVkcyBmdXJ0aGVyIHByb2Nlc3NpbmcgYnkgdGhlIHJlYWwgZmV0Y2hlcgorICAgICAgICAjIElmIHRoYXQgdGFyYmFsbCBpcyBhIGxvY2FsIGZpbGU6Ly8gd2UgbmVlZCB0byBwcm92aWRlIGEgc3ltbGluayB0byBpdAorICAgICAgICBkbGRpciA9IGxkLmdldFZhcigiRExfRElSIiwgVHJ1ZSkKKyAgICAgICAgaWYgb3JpZ3VkLm1pcnJvcnRhcmJhbGwgYW5kIG9zLnBhdGguYmFzZW5hbWUodWQubG9jYWxwYXRoKSA9PSBvcy5wYXRoLmJhc2VuYW1lKG9yaWd1ZC5taXJyb3J0YXJiYWxsKSBcCisgICAgICAgICAgICAgICAgYW5kIG9zLnBhdGguYmFzZW5hbWUodWQubG9jYWxwYXRoKSAhPSBvcy5wYXRoLmJhc2VuYW1lKG9yaWd1ZC5sb2NhbHBhdGgpOgorICAgICAgICAgICAgIyBDcmVhdGUgZG9uZXN0YW1wIGluIG9sZCBmb3JtYXQgdG8gYXZvaWQgdHJpZ2dlcmluZyBhIHJlLWRvd25sb2FkCisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKHVkLmRvbmVzdGFtcCkpCisgICAgICAgICAgICBvcGVuKHVkLmRvbmVzdGFtcCwgJ3cnKS5jbG9zZSgpCisgICAgICAgICAgICBkZXN0ID0gb3MucGF0aC5qb2luKGRsZGlyLCBvcy5wYXRoLmJhc2VuYW1lKHVkLmxvY2FscGF0aCkpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGVzdCk6CisgICAgICAgICAgICAgICAgb3Muc3ltbGluayh1ZC5sb2NhbHBhdGgsIGRlc3QpCisgICAgICAgICAgICBpZiBub3QgdmVyaWZ5X2RvbmVzdGFtcChvcmlndWQsIGxkKSBvciBvcmlndWQubWV0aG9kLm5lZWRfdXBkYXRlKG9yaWd1ZCwgbGQpOgorICAgICAgICAgICAgICAgIG9yaWd1ZC5tZXRob2QuZG93bmxvYWQob3JpZ3VkLCBsZCkKKyAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKG9yaWd1ZC5tZXRob2QsImJ1aWxkX21pcnJvcl9kYXRhIik6CisgICAgICAgICAgICAgICAgICAgIG9yaWd1ZC5tZXRob2QuYnVpbGRfbWlycm9yX2RhdGEob3JpZ3VkLCBsZCkKKyAgICAgICAgICAgIHJldHVybiB1ZC5sb2NhbHBhdGgKKyAgICAgICAgIyBPdGhlcndpc2UgdGhlIHJlc3VsdCBpcyBhIGxvY2FsIGZpbGU6Ly8gYW5kIHdlIHN5bWxpbmsgdG8gaXQKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9yaWd1ZC5sb2NhbHBhdGgpOgorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsob3JpZ3VkLmxvY2FscGF0aCk6CisgICAgICAgICAgICAgICAgIyBCcm9rZW4gc3ltYm9saWMgbGluaworICAgICAgICAgICAgICAgIG9zLnVubGluayhvcmlndWQubG9jYWxwYXRoKQorCisgICAgICAgICAgICBvcy5zeW1saW5rKHVkLmxvY2FscGF0aCwgb3JpZ3VkLmxvY2FscGF0aCkKKyAgICAgICAgdXBkYXRlX3N0YW1wKG9yaWd1ZCwgbGQpCisgICAgICAgIHJldHVybiB1ZC5sb2NhbHBhdGgKKworICAgIGV4Y2VwdCBiYi5mZXRjaDIuTmV0d29ya0FjY2VzczoKKyAgICAgICAgcmFpc2UKKworICAgIGV4Y2VwdCBiYi5mZXRjaDIuQkJGZXRjaEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBpZiBpc2luc3RhbmNlKGUsIENoZWNrc3VtRXJyb3IpOgorICAgICAgICAgICAgbG9nZ2VyLndhcm4oIk1pcnJvciBjaGVja3N1bSBmYWlsdXJlIGZvciB1cmwgJXMgKG9yaWdpbmFsIHVybDogJXMpXG5DbGVhbmluZyBhbmQgdHJ5aW5nIGFnYWluLiIgJSAodWQudXJsLCBvcmlndWQudXJsKSkKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKHN0cihlKSkKKyAgICAgICAgICAgIHJlbmFtZV9iYWRfY2hlY2tzdW0odWQsIGUuY2hlY2tzdW0pCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShlLCBOb0NoZWNrc3VtRXJyb3IpOgorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiTWlycm9yIGZldGNoIGZhaWx1cmUgZm9yIHVybCAlcyAob3JpZ2luYWwgdXJsOiAlcykiICUgKHVkLnVybCwgb3JpZ3VkLnVybCkpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgc3RyKGUpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB1ZC5tZXRob2QuY2xlYW4odWQsIGxkKQorICAgICAgICBleGNlcHQgVW5ib3VuZExvY2FsRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiBGYWxzZQorCitkZWYgdHJ5X21pcnJvcnMoZmV0Y2gsIGQsIG9yaWd1ZCwgbWlycm9ycywgY2hlY2sgPSBGYWxzZSk6CisgICAgIiIiCisgICAgVHJ5IHRvIHVzZSBhIG1pcnJvcmVkIHZlcnNpb24gb2YgdGhlIHNvdXJjZXMuCisgICAgVGhpcyBtZXRob2Qgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNhbGxlZCBiZWZvcmUgdGhlIGZldGNoZXJzIGdvLgorCisgICAgZCBJcyBhIGJiLmRhdGEgaW5zdGFuY2UKKyAgICB1cmkgaXMgdGhlIG9yaWdpbmFsIHVyaSB3ZSdyZSB0cnlpbmcgdG8gZG93bmxvYWQKKyAgICBtaXJyb3JzIGlzIHRoZSBsaXN0IG9mIG1pcnJvcnMgd2UncmUgZ29pbmcgdG8gdHJ5CisgICAgIiIiCisgICAgbGQgPSBkLmNyZWF0ZUNvcHkoKQorCisgICAgdXJpcywgdWRzID0gYnVpbGRfbWlycm9ydXJpcyhvcmlndWQsIG1pcnJvcnMsIGxkKQorCisgICAgZm9yIGluZGV4LCB1cmkgaW4gZW51bWVyYXRlKHVyaXMpOgorICAgICAgICByZXQgPSB0cnlfbWlycm9yX3VybChmZXRjaCwgb3JpZ3VkLCB1ZHNbaW5kZXhdLCBsZCwgY2hlY2spCisgICAgICAgIGlmIHJldCAhPSBGYWxzZToKKyAgICAgICAgICAgIHJldHVybiByZXQKKyAgICByZXR1cm4gTm9uZQorCitkZWYgdHJ1c3RlZF9uZXR3b3JrKGQsIHVybCk6CisgICAgIiIiCisgICAgVXNlIGEgdHJ1c3RlZCB1cmwgZHVyaW5nIGRvd25sb2FkIGlmIG5ldHdvcmtpbmcgaXMgZW5hYmxlZCBhbmQKKyAgICBCQl9BTExPV0VEX05FVFdPUktTIGlzIHNldCBnbG9iYWxseSBvciBmb3IgYSBzcGVjaWZpYyByZWNpcGUuCisgICAgTm90ZTogbW9kaWZpZXMgU1JDX1VSSSAmIG1pcnJvcnMuCisgICAgIiIiCisgICAgaWYgZC5nZXRWYXIoJ0JCX05PX05FVFdPUksnLCBUcnVlKSA9PSAiMSI6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBwa2duYW1lID0gZC5leHBhbmQoZC5nZXRWYXIoJ1BOJywgRmFsc2UpKQorICAgIHRydXN0ZWRfaG9zdHMgPSBkLmdldFZhckZsYWcoJ0JCX0FMTE9XRURfTkVUV09SS1MnLCBwa2duYW1lKQorCisgICAgaWYgbm90IHRydXN0ZWRfaG9zdHM6CisgICAgICAgIHRydXN0ZWRfaG9zdHMgPSBkLmdldFZhcignQkJfQUxMT1dFRF9ORVRXT1JLUycsIFRydWUpCisKKyAgICAjIE5vdCBlbmFibGVkLgorICAgIGlmIG5vdCB0cnVzdGVkX2hvc3RzOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgc2NoZW1lLCBuZXR3b3JrLCBwYXRoLCB1c2VyLCBwYXNzd2QsIHBhcmFtID0gZGVjb2RldXJsKHVybCkKKworICAgIGlmIG5vdCBuZXR3b3JrOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgbmV0d29yayA9IG5ldHdvcmsubG93ZXIoKQorCisgICAgZm9yIGhvc3QgaW4gdHJ1c3RlZF9ob3N0cy5zcGxpdCgiICIpOgorICAgICAgICBob3N0ID0gaG9zdC5sb3dlcigpCisgICAgICAgIGlmIGhvc3Quc3RhcnRzd2l0aCgiKi4iKSBhbmQgKCIuIiArIG5ldHdvcmspLmVuZHN3aXRoKGhvc3RbMTpdKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGlmIGhvc3QgPT0gbmV0d29yazoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICByZXR1cm4gRmFsc2UKKworZGVmIHNyY3Jldl9pbnRlcm5hbF9oZWxwZXIodWQsIGQsIG5hbWUpOgorICAgICIiIgorICAgIFJldHVybjoKKyAgICAgICAgYSkgYSBzb3VyY2UgcmV2aXNpb24gaWYgc3BlY2lmaWVkCisgICAgICAgIGIpIGxhdGVzdCByZXZpc2lvbiBpZiBTUkNSRVY9IkFVVE9JTkMiCisgICAgICAgIGMpIE5vbmUgaWYgbm90IHNwZWNpZmllZAorICAgICIiIgorCisgICAgc3JjcmV2ID0gTm9uZQorICAgIHBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICBhdHRlbXB0cyA9IFtdCisgICAgaWYgbmFtZSAhPSAnJyBhbmQgcG46CisgICAgICAgIGF0dGVtcHRzLmFwcGVuZCgiU1JDUkVWXyVzX3BuLSVzIiAlIChuYW1lLCBwbikpCisgICAgaWYgbmFtZSAhPSAnJzoKKyAgICAgICAgYXR0ZW1wdHMuYXBwZW5kKCJTUkNSRVZfJXMiICUgbmFtZSkKKyAgICBpZiBwbjoKKyAgICAgICAgYXR0ZW1wdHMuYXBwZW5kKCJTUkNSRVZfcG4tJXMiICUgcG4pCisgICAgYXR0ZW1wdHMuYXBwZW5kKCJTUkNSRVYiKQorCisgICAgZm9yIGEgaW4gYXR0ZW1wdHM6CisgICAgICAgIHNyY3JldiA9IGQuZ2V0VmFyKGEsIFRydWUpICAgICAgICAgICAgICAKKyAgICAgICAgaWYgc3JjcmV2IGFuZCBzcmNyZXYgIT0gIklOVkFMSUQiOgorICAgICAgICAgICAgYnJlYWsKKworICAgIGlmICdyZXYnIGluIHVkLnBhcm0gYW5kICd0YWcnIGluIHVkLnBhcm06CisgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIlBsZWFzZSBzcGVjaWZ5IGEgO3Jldj0gcGFyYW1ldGVyIG9yIGEgO3RhZz0gcGFyYW1ldGVyIGluIHRoZSB1cmwgJXMgYnV0IG5vdCBib3RoLiIgJSAodWQudXJsKSkKKworICAgIGlmICdyZXYnIGluIHVkLnBhcm0gb3IgJ3RhZycgaW4gdWQucGFybToKKyAgICAgICAgaWYgJ3JldicgaW4gdWQucGFybToKKyAgICAgICAgICAgIHBhcm1yZXYgPSB1ZC5wYXJtWydyZXYnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFybXJldiA9IHVkLnBhcm1bJ3RhZyddCisgICAgICAgIGlmIHNyY3JldiA9PSAiSU5WQUxJRCIgb3Igbm90IHNyY3JldjoKKyAgICAgICAgICAgIHJldHVybiBwYXJtcmV2CisgICAgICAgIGlmIHNyY3JldiAhPSBwYXJtcmV2OgorICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiQ29uZmxpY3RpbmcgcmV2aXNpb25zICglcyBmcm9tIFNSQ1JFViBhbmQgJXMgZnJvbSB0aGUgdXJsKSBmb3VuZCwgcGxlYXNlIHNwY2lmeSBvbmUgdmFsaWQgdmFsdWUiICUgKHNyY3JldiwgcGFybXJldikpCisgICAgICAgIHJldHVybiBwYXJtcmV2CisKKyAgICBpZiBzcmNyZXYgPT0gIklOVkFMSUQiIG9yIG5vdCBzcmNyZXY6CisgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIlBsZWFzZSBzZXQgYSB2YWxpZCBTUkNSRVYgZm9yIHVybCAlcyAocG9zc2libGUga2V5IG5hbWVzIGFyZSAlcywgb3IgdXNlIGEgO3Jldj1YIFVSTCBwYXJhbWV0ZXIpIiAlIChzdHIoYXR0ZW1wdHMpLCB1ZC51cmwpLCB1ZC51cmwpCisgICAgaWYgc3JjcmV2ID09ICJBVVRPSU5DIjoKKyAgICAgICAgc3JjcmV2ID0gdWQubWV0aG9kLmxhdGVzdF9yZXZpc2lvbih1ZCwgZCwgbmFtZSkKKworICAgIHJldHVybiBzcmNyZXYKKworZGVmIGdldF9jaGVja3N1bV9maWxlX2xpc3QoZCk6CisgICAgIiIiIEdldCBhIGxpc3Qgb2YgZmlsZXMgY2hlY2tzdW0gaW4gU1JDX1VSSQorCisgICAgUmV0dXJucyB0aGUgcmVzb2x2ZWQgbG9jYWwgcGF0aHMgb2YgYWxsIGxvY2FsIGZpbGUgZW50cmllcyBpbgorICAgIFNSQ19VUkkgYXMgYSBzcGFjZS1zZXBhcmF0ZWQgc3RyaW5nCisgICAgIiIiCisgICAgZmV0Y2ggPSBGZXRjaChbXSwgZCwgY2FjaGUgPSBGYWxzZSwgbG9jYWxvbmx5ID0gVHJ1ZSkKKworICAgIGRsX2RpciA9IGQuZ2V0VmFyKCdETF9ESVInLCBUcnVlKQorICAgIGZpbGVsaXN0ID0gW10KKyAgICBmb3IgdSBpbiBmZXRjaC51cmxzOgorICAgICAgICB1ZCA9IGZldGNoLnVkW3VdCisKKyAgICAgICAgaWYgdWQgYW5kIGlzaW5zdGFuY2UodWQubWV0aG9kLCBsb2NhbC5Mb2NhbCk6CisgICAgICAgICAgICBwYXRocyA9IHVkLm1ldGhvZC5sb2NhbHBhdGhzKHVkLCBkKQorICAgICAgICAgICAgZm9yIGYgaW4gcGF0aHM6CisgICAgICAgICAgICAgICAgcHRoID0gdWQuZGVjb2RlZHVybAorICAgICAgICAgICAgICAgIGlmICcqJyBpbiBwdGg6CisgICAgICAgICAgICAgICAgICAgIGYgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5hYnNwYXRoKGYpLCBwdGgpCisgICAgICAgICAgICAgICAgaWYgZi5zdGFydHN3aXRoKGRsX2Rpcik6CisgICAgICAgICAgICAgICAgICAgICMgVGhlIGxvY2FsIGZldGNoZXIncyBiZWhhdmlvdXIgaXMgdG8gcmV0dXJuIGEgcGF0aCB1bmRlciBETF9ESVIgaWYgaXQgY291bGRuJ3QgZmluZCB0aGUgZmlsZSBhbnl3aGVyZSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybigiR2V0dGluZyBjaGVja3N1bSBmb3IgJXMgU1JDX1VSSSBlbnRyeSAlczogZmlsZSBub3QgZm91bmQgZXhjZXB0IGluIERMX0RJUiIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIG9zLnBhdGguYmFzZW5hbWUoZikpKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybigiVW5hYmxlIHRvIGdldCBjaGVja3N1bSBmb3IgJXMgU1JDX1VSSSBlbnRyeSAlczogZmlsZSBjb3VsZCBub3QgYmUgZm91bmQiICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBvcy5wYXRoLmJhc2VuYW1lKGYpKSkKKyAgICAgICAgICAgICAgICBmaWxlbGlzdC5hcHBlbmQoZiArICI6IiArIHN0cihvcy5wYXRoLmV4aXN0cyhmKSkpCisKKyAgICByZXR1cm4gIiAiLmpvaW4oZmlsZWxpc3QpCisKK2RlZiBnZXRfZmlsZV9jaGVja3N1bXMoZmlsZWxpc3QsIHBuKToKKyAgICAiIiJHZXQgYSBsaXN0IG9mIHRoZSBjaGVja3N1bXMgZm9yIGEgbGlzdCBvZiBsb2NhbCBmaWxlcworCisgICAgUmV0dXJucyB0aGUgY2hlY2tzdW1zIGZvciBhIGxpc3Qgb2YgbG9jYWwgZmlsZXMsIGNhY2hpbmcgdGhlIHJlc3VsdHMgYXMKKyAgICBpdCBwcm9jZWVkcworCisgICAgIiIiCisKKyAgICBkZWYgY2hlY2tzdW1fZmlsZShmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2hlY2tzdW0gPSBfY2hlY2tzdW1fY2FjaGUuZ2V0X2NoZWNrc3VtKGYpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi53YXJuKCJVbmFibGUgdG8gZ2V0IGNoZWNrc3VtIGZvciAlcyBTUkNfVVJJIGVudHJ5ICVzOiAlcyIgJSAocG4sIG9zLnBhdGguYmFzZW5hbWUoZiksIGUpKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIGNoZWNrc3VtCisKKyAgICBkZWYgY2hlY2tzdW1fZGlyKHB0aCk6CisgICAgICAgICMgSGFuZGxlIGRpcmVjdG9yaWVzIHJlY3Vyc2l2ZWx5CisgICAgICAgIGRpcmNoZWNrc3VtcyA9IFtdCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHB0aCk6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBmdWxscHRoID0gb3MucGF0aC5qb2luKHJvb3QsIG5hbWUpCisgICAgICAgICAgICAgICAgY2hlY2tzdW0gPSBjaGVja3N1bV9maWxlKGZ1bGxwdGgpCisgICAgICAgICAgICAgICAgaWYgY2hlY2tzdW06CisgICAgICAgICAgICAgICAgICAgIGRpcmNoZWNrc3Vtcy5hcHBlbmQoKGZ1bGxwdGgsIGNoZWNrc3VtKSkKKyAgICAgICAgcmV0dXJuIGRpcmNoZWNrc3VtcworCisgICAgY2hlY2tzdW1zID0gW10KKyAgICBmb3IgcHRoIGluIGZpbGVsaXN0LnNwbGl0KCk6CisgICAgICAgIGV4aXN0ID0gcHRoLnNwbGl0KCI6IilbMV0KKyAgICAgICAgaWYgZXhpc3QgPT0gIkZhbHNlIjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHB0aCA9IHB0aC5zcGxpdCgiOiIpWzBdCisgICAgICAgIGlmICcqJyBpbiBwdGg6CisgICAgICAgICAgICAjIEhhbmRsZSBnbG9icworICAgICAgICAgICAgZm9yIGYgaW4gZ2xvYi5nbG9iKHB0aCk6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmKToKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tzdW1zLmV4dGVuZChjaGVja3N1bV9kaXIoZikpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tzdW0gPSBjaGVja3N1bV9maWxlKGYpCisgICAgICAgICAgICAgICAgICAgIGNoZWNrc3Vtcy5hcHBlbmQoKGYsIGNoZWNrc3VtKSkKKyAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKHB0aCk6CisgICAgICAgICAgICBjaGVja3N1bXMuZXh0ZW5kKGNoZWNrc3VtX2RpcihwdGgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2hlY2tzdW0gPSBjaGVja3N1bV9maWxlKHB0aCkKKyAgICAgICAgICAgIGNoZWNrc3Vtcy5hcHBlbmQoKHB0aCwgY2hlY2tzdW0pKQorCisgICAgY2hlY2tzdW1zLnNvcnQoa2V5PW9wZXJhdG9yLml0ZW1nZXR0ZXIoMSkpCisgICAgcmV0dXJuIGNoZWNrc3VtcworCisKK2NsYXNzIEZldGNoRGF0YShvYmplY3QpOgorICAgICIiIgorICAgIEEgY2xhc3Mgd2hpY2ggcmVwcmVzZW50cyB0aGUgZmV0Y2hlciBzdGF0ZSBmb3IgYSBnaXZlbiBVUkkuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybCwgZCwgbG9jYWxvbmx5ID0gRmFsc2UpOgorICAgICAgICAjIGxvY2FscGF0aCBpcyB0aGUgbG9jYXRpb24gb2YgYSBkb3dubG9hZGVkIHJlc3VsdC4gSWYgbm90IHNldCwgdGhlIGZpbGUgaXMgbG9jYWwuCisgICAgICAgIHNlbGYuZG9uZXN0YW1wID0gTm9uZQorICAgICAgICBzZWxmLmxvY2FsZmlsZSA9ICIiCisgICAgICAgIHNlbGYubG9jYWxwYXRoID0gTm9uZQorICAgICAgICBzZWxmLmxvY2tmaWxlID0gTm9uZQorICAgICAgICBzZWxmLm1pcnJvcnRhcmJhbGwgPSBOb25lCisgICAgICAgIHNlbGYuYmFzZW5hbWUgPSBOb25lCisgICAgICAgIHNlbGYuYmFzZXBhdGggPSBOb25lCisgICAgICAgIChzZWxmLnR5cGUsIHNlbGYuaG9zdCwgc2VsZi5wYXRoLCBzZWxmLnVzZXIsIHNlbGYucHN3ZCwgc2VsZi5wYXJtKSA9IGRlY29kZXVybChkYXRhLmV4cGFuZCh1cmwsIGQpKQorICAgICAgICBzZWxmLmRhdGUgPSBzZWxmLmdldFNSQ0RhdGUoZCkKKyAgICAgICAgc2VsZi51cmwgPSB1cmwKKyAgICAgICAgaWYgbm90IHNlbGYudXNlciBhbmQgInVzZXIiIGluIHNlbGYucGFybToKKyAgICAgICAgICAgIHNlbGYudXNlciA9IHNlbGYucGFybVsidXNlciJdCisgICAgICAgIGlmIG5vdCBzZWxmLnBzd2QgYW5kICJwc3dkIiBpbiBzZWxmLnBhcm06CisgICAgICAgICAgICBzZWxmLnBzd2QgPSBzZWxmLnBhcm1bInBzd2QiXQorICAgICAgICBzZWxmLnNldHVwID0gRmFsc2UKKworICAgICAgICBpZiAibmFtZSIgaW4gc2VsZi5wYXJtOgorICAgICAgICAgICAgc2VsZi5tZDVfbmFtZSA9ICIlcy5tZDVzdW0iICUgc2VsZi5wYXJtWyJuYW1lIl0KKyAgICAgICAgICAgIHNlbGYuc2hhMjU2X25hbWUgPSAiJXMuc2hhMjU2c3VtIiAlIHNlbGYucGFybVsibmFtZSJdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLm1kNV9uYW1lID0gIm1kNXN1bSIKKyAgICAgICAgICAgIHNlbGYuc2hhMjU2X25hbWUgPSAic2hhMjU2c3VtIgorICAgICAgICBpZiBzZWxmLm1kNV9uYW1lIGluIHNlbGYucGFybToKKyAgICAgICAgICAgIHNlbGYubWQ1X2V4cGVjdGVkID0gc2VsZi5wYXJtW3NlbGYubWQ1X25hbWVdCisgICAgICAgIGVsaWYgc2VsZi50eXBlIG5vdCBpbiBbImh0dHAiLCAiaHR0cHMiLCAiZnRwIiwgImZ0cHMiLCAic2Z0cCJdOgorICAgICAgICAgICAgc2VsZi5tZDVfZXhwZWN0ZWQgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLm1kNV9leHBlY3RlZCA9IGQuZ2V0VmFyRmxhZygiU1JDX1VSSSIsIHNlbGYubWQ1X25hbWUpCisgICAgICAgIGlmIHNlbGYuc2hhMjU2X25hbWUgaW4gc2VsZi5wYXJtOgorICAgICAgICAgICAgc2VsZi5zaGEyNTZfZXhwZWN0ZWQgPSBzZWxmLnBhcm1bc2VsZi5zaGEyNTZfbmFtZV0KKyAgICAgICAgZWxpZiBzZWxmLnR5cGUgbm90IGluIFsiaHR0cCIsICJodHRwcyIsICJmdHAiLCAiZnRwcyIsICJzZnRwIl06CisgICAgICAgICAgICBzZWxmLnNoYTI1Nl9leHBlY3RlZCA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2hhMjU2X2V4cGVjdGVkID0gZC5nZXRWYXJGbGFnKCJTUkNfVVJJIiwgc2VsZi5zaGEyNTZfbmFtZSkKKyAgICAgICAgc2VsZi5pZ25vcmVfY2hlY2tzdW1zID0gRmFsc2UKKworICAgICAgICBzZWxmLm5hbWVzID0gc2VsZi5wYXJtLmdldCgibmFtZSIsJ2RlZmF1bHQnKS5zcGxpdCgnLCcpCisKKyAgICAgICAgc2VsZi5tZXRob2QgPSBOb25lCisgICAgICAgIGZvciBtIGluIG1ldGhvZHM6CisgICAgICAgICAgICBpZiBtLnN1cHBvcnRzKHNlbGYsIGQpOgorICAgICAgICAgICAgICAgIHNlbGYubWV0aG9kID0gbQorICAgICAgICAgICAgICAgIGJyZWFrICAgICAgICAgICAgICAgIAorCisgICAgICAgIGlmIG5vdCBzZWxmLm1ldGhvZDoKKyAgICAgICAgICAgIHJhaXNlIE5vTWV0aG9kRXJyb3IodXJsKQorCisgICAgICAgIGlmIGxvY2Fsb25seSBhbmQgbm90IGlzaW5zdGFuY2Uoc2VsZi5tZXRob2QsIGxvY2FsLkxvY2FsKToKKyAgICAgICAgICAgIHJhaXNlIE5vbkxvY2FsTWV0aG9kKCkKKworICAgICAgICBpZiBzZWxmLnBhcm0uZ2V0KCJwcm90byIsIE5vbmUpIGFuZCAicHJvdG9jb2wiIG5vdCBpbiBzZWxmLnBhcm06CisgICAgICAgICAgICBsb2dnZXIud2FybignQ29uc2lkZXIgdXBkYXRpbmcgJXMgcmVjaXBlIHRvIHVzZSAicHJvdG9jb2wiIG5vdCAicHJvdG8iIGluIFNSQ19VUkkuJywgZC5nZXRWYXIoJ1BOJywgVHJ1ZSkpCisgICAgICAgICAgICBzZWxmLnBhcm1bInByb3RvY29sIl0gPSBzZWxmLnBhcm0uZ2V0KCJwcm90byIsIE5vbmUpCisKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLm1ldGhvZCwgInVybGRhdGFfaW5pdCIpOgorICAgICAgICAgICAgc2VsZi5tZXRob2QudXJsZGF0YV9pbml0KHNlbGYsIGQpCisKKyAgICAgICAgaWYgImxvY2FscGF0aCIgaW4gc2VsZi5wYXJtOgorICAgICAgICAgICAgIyBpZiB1c2VyIHNldHMgbG9jYWxwYXRoIGZvciBmaWxlLCB1c2UgaXQgaW5zdGVhZC4KKyAgICAgICAgICAgIHNlbGYubG9jYWxwYXRoID0gc2VsZi5wYXJtWyJsb2NhbHBhdGgiXQorICAgICAgICAgICAgc2VsZi5iYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc2VsZi5sb2NhbHBhdGgpCisgICAgICAgIGVsaWYgc2VsZi5sb2NhbGZpbGU6CisgICAgICAgICAgICBzZWxmLmxvY2FscGF0aCA9IHNlbGYubWV0aG9kLmxvY2FscGF0aChzZWxmLCBkKQorCisgICAgICAgIGRsZGlyID0gZC5nZXRWYXIoIkRMX0RJUiIsIFRydWUpCisgICAgICAgICMgTm90ZTogLmRvbmUgYW5kIC5sb2NrIGZpbGVzIHNob3VsZCBhbHdheXMgYmUgaW4gRExfRElSIHdoZXJlYXMgbG9jYWxwYXRoIG1heSBub3QgYmUuCisgICAgICAgIGlmIHNlbGYubG9jYWxwYXRoIGFuZCBzZWxmLmxvY2FscGF0aC5zdGFydHN3aXRoKGRsZGlyKToKKyAgICAgICAgICAgIGJhc2VwYXRoID0gc2VsZi5sb2NhbHBhdGgKKyAgICAgICAgZWxpZiBzZWxmLmxvY2FscGF0aDoKKyAgICAgICAgICAgIGJhc2VwYXRoID0gZGxkaXIgKyBvcy5zZXAgKyBvcy5wYXRoLmJhc2VuYW1lKHNlbGYubG9jYWxwYXRoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmFzZXBhdGggPSBkbGRpciArIG9zLnNlcCArIChzZWxmLmJhc2VwYXRoIG9yIHNlbGYuYmFzZW5hbWUpCisgICAgICAgIHNlbGYuZG9uZXN0YW1wID0gYmFzZXBhdGggKyAnLmRvbmUnCisgICAgICAgIHNlbGYubG9ja2ZpbGUgPSBiYXNlcGF0aCArICcubG9jaycKKworICAgIGRlZiBzZXR1cF9yZXZpc29ucyhzZWxmLCBkKToKKyAgICAgICAgc2VsZi5yZXZpc2lvbnMgPSB7fQorICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLm5hbWVzOgorICAgICAgICAgICAgc2VsZi5yZXZpc2lvbnNbbmFtZV0gPSBzcmNyZXZfaW50ZXJuYWxfaGVscGVyKHNlbGYsIGQsIG5hbWUpCisKKyAgICAgICAgIyBhZGQgY29tcGF0aWJpbGl0eSBjb2RlIGZvciBub24gbmFtZSBzcGVjaWZpZWQgY2FzZQorICAgICAgICBpZiBsZW4oc2VsZi5uYW1lcykgPT0gMToKKyAgICAgICAgICAgIHNlbGYucmV2aXNpb24gPSBzZWxmLnJldmlzaW9uc1tzZWxmLm5hbWVzWzBdXQorCisgICAgZGVmIHNldHVwX2xvY2FscGF0aChzZWxmLCBkKToKKyAgICAgICAgaWYgbm90IHNlbGYubG9jYWxwYXRoOgorICAgICAgICAgICAgc2VsZi5sb2NhbHBhdGggPSBzZWxmLm1ldGhvZC5sb2NhbHBhdGgoc2VsZiwgZCkKKworICAgIGRlZiBnZXRTUkNEYXRlKHNlbGYsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBTUkMgRGF0ZSBmb3IgdGhlIGNvbXBvbmVudAorCisgICAgICAgIGQgdGhlIGJiLmRhdGEgbW9kdWxlCisgICAgICAgICIiIgorICAgICAgICBpZiAic3JjZGF0ZSIgaW4gc2VsZi5wYXJtOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFybVsnc3JjZGF0ZSddCisKKyAgICAgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorCisgICAgICAgIGlmIHBuOgorICAgICAgICAgICAgcmV0dXJuIGQuZ2V0VmFyKCJTUkNEQVRFXyVzIiAlIHBuLCBUcnVlKSBvciBkLmdldFZhcigiU1JDREFURSIsIFRydWUpIG9yIGQuZ2V0VmFyKCJEQVRFIiwgVHJ1ZSkKKworICAgICAgICByZXR1cm4gZC5nZXRWYXIoIlNSQ0RBVEUiLCBUcnVlKSBvciBkLmdldFZhcigiREFURSIsIFRydWUpCisKK2NsYXNzIEZldGNoTWV0aG9kKG9iamVjdCk6CisgICAgIiIiQmFzZSBjbGFzcyBmb3IgJ2ZldGNoJ2luZyBkYXRhIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXJscz1Ob25lKToKKyAgICAgICAgc2VsZi51cmxzID0gW10KKworICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1cmxkYXRhLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRvIHNlZSBpZiB0aGlzIGZldGNoIGNsYXNzIHN1cHBvcnRzIGEgZ2l2ZW4gdXJsLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGRlZiBsb2NhbHBhdGgoc2VsZiwgdXJsZGF0YSwgZCk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIGxvY2FsIGZpbGVuYW1lIG9mIGEgZ2l2ZW4gdXJsIGFzc3VtaW5nIGEgc3VjY2Vzc2Z1bCBmZXRjaC4KKyAgICAgICAgQ2FuIGFsc28gc2V0dXAgdmFyaWFibGVzIGluIHVybGRhdGEgZm9yIHVzZSBpbiBnbyAoc2F2aW5nIGNvZGUgZHVwbGljYXRpb24KKyAgICAgICAgYW5kIGR1cGxpY2F0ZSBjb2RlIGV4ZWN1dGlvbikKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oZGF0YS5nZXRWYXIoIkRMX0RJUiIsIGQsIFRydWUpLCB1cmxkYXRhLmxvY2FsZmlsZSkKKworICAgIGRlZiBzdXBwb3J0c19jaGVja3N1bShzZWxmLCB1cmxkYXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIElzIGxvY2FscGF0aCBzb21ldGhpbmcgdGhhdCBjYW4gYmUgcmVwcmVzZW50ZWQgYnkgYSBjaGVja3N1bT8KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBXZSBjYW5ub3QgY29tcHV0ZSBjaGVja3N1bXMgZm9yIGRpcmVjdG9yaWVzCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIodXJsZGF0YS5sb2NhbHBhdGgpID09IFRydWU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgdXJsZGF0YS5sb2NhbHBhdGguZmluZCgiKiIpICE9IC0xOgorICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgcmVjb21tZW5kc19jaGVja3N1bShzZWxmLCB1cmxkYXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIElzIHRoZSBiYWNrZW5kIG9uIHdoZXJlIGNoZWNrc3VtbWluZyBpcyByZWNvbW1lbmRlZCAoc2hvdWxkIHdhcm5pbmdzIAorICAgICAgICBiZSBkaXNwbGF5ZWQgaWYgdGhlcmUgaXMgbm8gY2hlY2tzdW0pPworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX3N0cmlwX2xlYWRpbmdfc2xhc2hlcyhzZWxmLCByZWxwYXRoKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlbW92ZSBsZWFkaW5nIHNsYXNoIGFzIG9zLnBhdGguam9pbiBjYW4ndCBjb3BlCisgICAgICAgICIiIgorICAgICAgICB3aGlsZSBvcy5wYXRoLmlzYWJzKHJlbHBhdGgpOgorICAgICAgICAgICAgcmVscGF0aCA9IHJlbHBhdGhbMTpdCisgICAgICAgIHJldHVybiByZWxwYXRoCisKKyAgICBkZWYgc2V0VXJscyhzZWxmLCB1cmxzKToKKyAgICAgICAgc2VsZi5fX3VybHMgPSB1cmxzCisKKyAgICBkZWYgZ2V0VXJscyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX191cmxzCisKKyAgICB1cmxzID0gcHJvcGVydHkoZ2V0VXJscywgc2V0VXJscywgTm9uZSwgIlVybHMgcHJvcGVydHkiKQorCisgICAgZGVmIG5lZWRfdXBkYXRlKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIEZvcmNlIGEgZmV0Y2gsIGV2ZW4gaWYgbG9jYWxwYXRoIGV4aXN0cz8KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHVkLmxvY2FscGF0aCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBzdXBwb3J0c19zcmNyZXYoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgZmV0Y2hlciBzdXBwb3J0cyBhdXRvIHNvdXJjZSByZXZpc2lvbnMgKFNSQ1JFVikKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVybGRhdGEsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgRmV0Y2ggdXJscworICAgICAgICBBc3N1bWVzIGxvY2FscGF0aCB3YXMgY2FsbGVkIGZpcnN0CisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb01ldGhvZEVycm9yKHVybCkKKworICAgIGRlZiB1bnBhY2soc2VsZiwgdXJsZGF0YSwgcm9vdGRpciwgZGF0YSk6CisgICAgICAgIGl0ZXJhdGUgPSBGYWxzZQorICAgICAgICBmaWxlID0gdXJsZGF0YS5sb2NhbHBhdGgKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB1bnBhY2sgPSBiYi51dGlscy50b19ib29sZWFuKHVybGRhdGEucGFybS5nZXQoJ3VucGFjaycpLCBUcnVlKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBleGM6CisgICAgICAgICAgICBiYi5mYXRhbCgiSW52YWxpZCB2YWx1ZSBmb3IgJ3VucGFjaycgcGFyYW1ldGVyIGZvciAlczogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgIChmaWxlLCB1cmxkYXRhLnBhcm0uZ2V0KCd1bnBhY2snKSkpCisKKyAgICAgICAgYmFzZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmaWxlKQorICAgICAgICBpZiBleHQgaW4gWycuZ3onLCAnLmJ6MicsICcuWicsICcueHonLCAnLmx6J106CisgICAgICAgICAgICBlZmlsZSA9IG9zLnBhdGguam9pbihyb290ZGlyLCBvcy5wYXRoLmJhc2VuYW1lKGJhc2UpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZWZpbGUgPSBmaWxlCisgICAgICAgIGNtZCA9IE5vbmUKKworICAgICAgICBpZiB1bnBhY2s6CisgICAgICAgICAgICBpZiBmaWxlLmVuZHN3aXRoKCcudGFyJyk6CisgICAgICAgICAgICAgICAgY21kID0gJ3RhciB4IC0tbm8tc2FtZS1vd25lciAtZiAlcycgJSBmaWxlCisgICAgICAgICAgICBlbGlmIGZpbGUuZW5kc3dpdGgoJy50Z3onKSBvciBmaWxlLmVuZHN3aXRoKCcudGFyLmd6Jykgb3IgZmlsZS5lbmRzd2l0aCgnLnRhci5aJyk6CisgICAgICAgICAgICAgICAgY21kID0gJ3RhciB4eiAtLW5vLXNhbWUtb3duZXIgLWYgJXMnICUgZmlsZQorICAgICAgICAgICAgZWxpZiBmaWxlLmVuZHN3aXRoKCcudGJ6Jykgb3IgZmlsZS5lbmRzd2l0aCgnLnRiejInKSBvciBmaWxlLmVuZHN3aXRoKCcudGFyLmJ6MicpOgorICAgICAgICAgICAgICAgIGNtZCA9ICdiemlwMiAtZGMgJXMgfCB0YXIgeCAtLW5vLXNhbWUtb3duZXIgLWYgLScgJSBmaWxlCisgICAgICAgICAgICBlbGlmIGZpbGUuZW5kc3dpdGgoJy5neicpIG9yIGZpbGUuZW5kc3dpdGgoJy5aJykgb3IgZmlsZS5lbmRzd2l0aCgnLnonKToKKyAgICAgICAgICAgICAgICBjbWQgPSAnZ3ppcCAtZGMgJXMgPiAlcycgJSAoZmlsZSwgZWZpbGUpCisgICAgICAgICAgICBlbGlmIGZpbGUuZW5kc3dpdGgoJy5iejInKToKKyAgICAgICAgICAgICAgICBjbWQgPSAnYnppcDIgLWRjICVzID4gJXMnICUgKGZpbGUsIGVmaWxlKQorICAgICAgICAgICAgZWxpZiBmaWxlLmVuZHN3aXRoKCcudGFyLnh6Jyk6CisgICAgICAgICAgICAgICAgY21kID0gJ3h6IC1kYyAlcyB8IHRhciB4IC0tbm8tc2FtZS1vd25lciAtZiAtJyAlIGZpbGUKKyAgICAgICAgICAgIGVsaWYgZmlsZS5lbmRzd2l0aCgnLnh6Jyk6CisgICAgICAgICAgICAgICAgY21kID0gJ3h6IC1kYyAlcyA+ICVzJyAlIChmaWxlLCBlZmlsZSkKKyAgICAgICAgICAgIGVsaWYgZmlsZS5lbmRzd2l0aCgnLnRhci5seicpOgorICAgICAgICAgICAgICAgIGNtZCA9ICdsemlwIC1kYyAlcyB8IHRhciB4IC0tbm8tc2FtZS1vd25lciAtZiAtJyAlIGZpbGUKKyAgICAgICAgICAgIGVsaWYgZmlsZS5lbmRzd2l0aCgnLmx6Jyk6CisgICAgICAgICAgICAgICAgY21kID0gJ2x6aXAgLWRjICVzID4gJXMnICUgKGZpbGUsIGVmaWxlKQorICAgICAgICAgICAgZWxpZiBmaWxlLmVuZHN3aXRoKCcuemlwJykgb3IgZmlsZS5lbmRzd2l0aCgnLmphcicpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZG9zID0gYmIudXRpbHMudG9fYm9vbGVhbih1cmxkYXRhLnBhcm0uZ2V0KCdkb3MnKSwgRmFsc2UpCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgiSW52YWxpZCB2YWx1ZSBmb3IgJ2RvcycgcGFyYW1ldGVyIGZvciAlczogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGUsIHVybGRhdGEucGFybS5nZXQoJ2RvcycpKSkKKyAgICAgICAgICAgICAgICBjbWQgPSAndW56aXAgLXEgLW8nCisgICAgICAgICAgICAgICAgaWYgZG9zOgorICAgICAgICAgICAgICAgICAgICBjbWQgPSAnJXMgLWEnICUgY21kCisgICAgICAgICAgICAgICAgY21kID0gIiVzICclcyciICUgKGNtZCwgZmlsZSkKKyAgICAgICAgICAgIGVsaWYgZmlsZS5lbmRzd2l0aCgnLnJwbScpIG9yIGZpbGUuZW5kc3dpdGgoJy5zcnBtJyk6CisgICAgICAgICAgICAgICAgaWYgJ2V4dHJhY3QnIGluIHVybGRhdGEucGFybToKKyAgICAgICAgICAgICAgICAgICAgdW5wYWNrX2ZpbGUgPSB1cmxkYXRhLnBhcm0uZ2V0KCdleHRyYWN0JykKKyAgICAgICAgICAgICAgICAgICAgY21kID0gJ3JwbTJjcGlvLnNoICVzIHwgY3BpbyAtaWQgJXMnICUgKGZpbGUsIHVucGFja19maWxlKQorICAgICAgICAgICAgICAgICAgICBpdGVyYXRlID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBpdGVyYXRlX2ZpbGUgPSB1bnBhY2tfZmlsZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNtZCA9ICdycG0yY3Bpby5zaCAlcyB8IGNwaW8gLWlkJyAlIChmaWxlKQorICAgICAgICAgICAgZWxpZiBmaWxlLmVuZHN3aXRoKCcuZGViJykgb3IgZmlsZS5lbmRzd2l0aCgnLmlwaycpOgorICAgICAgICAgICAgICAgIGNtZCA9ICdhciAtcCAlcyBkYXRhLnRhci5neiB8IHpjYXQgfCB0YXIgLS1uby1zYW1lLW93bmVyIC14cGYgLScgJSBmaWxlCisKKyAgICAgICAgaWYgbm90IHVucGFjayBvciBub3QgY21kOgorICAgICAgICAgICAgIyBJZiBmaWxlID09IGRlc3QsIHRoZW4gYXZvaWQgYW55IGNvcGllcywgYXMgd2UgYWxyZWFkeSBwdXQgdGhlIGZpbGUgaW50byBkZXN0IQorICAgICAgICAgICAgZGVzdCA9IG9zLnBhdGguam9pbihyb290ZGlyLCBvcy5wYXRoLmJhc2VuYW1lKGZpbGUpKQorICAgICAgICAgICAgaWYgKGZpbGUgIT0gZGVzdCkgYW5kIG5vdCAob3MucGF0aC5leGlzdHMoZGVzdCkgYW5kIG9zLnBhdGguc2FtZWZpbGUoZmlsZSwgZGVzdCkpOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZmlsZSk6CisgICAgICAgICAgICAgICAgICAgICMgSWYgZm9yIGV4YW1wbGUgd2UncmUgYXNrZWQgdG8gY29weSBmaWxlOi8vZm9vL2Jhciwgd2UgbmVlZCB0byB1bnBhY2sgdGhlIHJlc3VsdCBpbnRvIGZvby9iYXIKKyAgICAgICAgICAgICAgICAgICAgYmFzZXBhdGggPSBnZXRhdHRyKHVybGRhdGEsICJiYXNlcGF0aCIsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIGRlc3RkaXIgPSAiLiIKKyAgICAgICAgICAgICAgICAgICAgaWYgYmFzZXBhdGggYW5kIGJhc2VwYXRoLmVuZHN3aXRoKCIvIik6CisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlcGF0aCA9IGJhc2VwYXRoLnJzdHJpcCgiLyIpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgYmFzZXBhdGg6CisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlcGF0aCA9IG9zLnBhdGguZGlybmFtZShiYXNlcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgaWYgYmFzZXBhdGggYW5kIGJhc2VwYXRoLmZpbmQoIi8iKSAhPSAtMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RkaXIgPSBiYXNlcGF0aFs6YmFzZXBhdGgucmZpbmQoJy8nKV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RkaXIgPSBkZXN0ZGlyLnN0cmlwKCcvJykKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVzdGRpciAhPSAiLiIgYW5kIG5vdCBvcy5hY2Nlc3MoIiVzLyVzIiAlIChyb290ZGlyLCBkZXN0ZGlyKSwgb3MuRl9PSyk6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy5tYWtlZGlycygiJXMvJXMiICUgKHJvb3RkaXIsIGRlc3RkaXIpKQorICAgICAgICAgICAgICAgICAgICBjbWQgPSAnY3AgLWZwUFIgJXMgJXMvJXMvJyAlIChmaWxlLCByb290ZGlyLCBkZXN0ZGlyKQorICAgICAgICAgICAgICAgICAgICAjY21kID0gJ3RhciAtY2YgLSAtQyAiJWQiIC1wcyAuIHwgdGFyIC14ZiAtIC1DICIlcy8lcy8iJyAlIChmaWxlLCByb290ZGlyLCBkZXN0ZGlyKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgVGhlICJkZXN0ZGlyIiBoYW5kbGluZyB3YXMgc3BlY2lmaWNhbGx5IGRvbmUgZm9yIEZJTEVTUEFUSAorICAgICAgICAgICAgICAgICAgICAjIGl0ZW1zLiAgU28sIG9ubHkgZG8gc28gZm9yIGZpbGU6Ly8gZW50cmllcy4KKyAgICAgICAgICAgICAgICAgICAgaWYgdXJsZGF0YS50eXBlID09ICJmaWxlIiBhbmQgdXJsZGF0YS5wYXRoLmZpbmQoIi8iKSAhPSAtMToKKyAgICAgICAgICAgICAgICAgICAgICAgZGVzdGRpciA9IHVybGRhdGEucGF0aC5yc3BsaXQoIi8iLCAxKVswXQorICAgICAgICAgICAgICAgICAgICAgICBpZiB1cmxkYXRhLnBhcm0uZ2V0KCdzdWJkaXInKSAhPSBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ZGlyID0gdXJsZGF0YS5wYXJtLmdldCgnc3ViZGlyJykgKyAiLyIgKyBkZXN0ZGlyCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgIGlmIHVybGRhdGEucGFybS5nZXQoJ3N1YmRpcicpICE9IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RkaXIgPSB1cmxkYXRhLnBhcm0uZ2V0KCdzdWJkaXInKQorICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ZGlyID0gIi4iCisgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcigiJXMvJXMiICUgKHJvb3RkaXIsIGRlc3RkaXIpKQorICAgICAgICAgICAgICAgICAgICBjbWQgPSAnY3AgLWYgJXMgJXMvJXMvJyAlIChmaWxlLCByb290ZGlyLCBkZXN0ZGlyKQorCisgICAgICAgIGlmIG5vdCBjbWQ6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIENoYW5nZSB0byBzdWJkaXIgYmVmb3JlIGV4ZWN1dGluZyBjb21tYW5kCisgICAgICAgIHNhdmVfY3dkID0gb3MuZ2V0Y3dkKCk7CisgICAgICAgIG9zLmNoZGlyKHJvb3RkaXIpCisgICAgICAgIGlmICdzdWJkaXInIGluIHVybGRhdGEucGFybToKKyAgICAgICAgICAgIG5ld2RpciA9ICgiJXMvJXMiICUgKHJvb3RkaXIsIHVybGRhdGEucGFybS5nZXQoJ3N1YmRpcicpKSkKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihuZXdkaXIpCisgICAgICAgICAgICBvcy5jaGRpcihuZXdkaXIpCisKKyAgICAgICAgcGF0aCA9IGRhdGEuZ2V0VmFyKCdQQVRIJywgVHJ1ZSkKKyAgICAgICAgaWYgcGF0aDoKKyAgICAgICAgICAgIGNtZCA9ICJQQVRIPVwiJXNcIiAlcyIgJSAocGF0aCwgY21kKQorICAgICAgICBiYi5ub3RlKCJVbnBhY2tpbmcgJXMgdG8gJXMvIiAlIChmaWxlLCBvcy5nZXRjd2QoKSkpCisgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbChjbWQsIHByZWV4ZWNfZm49c3VicHJvY2Vzc19zZXR1cCwgc2hlbGw9VHJ1ZSkKKworICAgICAgICBvcy5jaGRpcihzYXZlX2N3ZCkKKworICAgICAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFVucGFja0Vycm9yKCJVbnBhY2sgY29tbWFuZCAlcyBmYWlsZWQgd2l0aCByZXR1cm4gdmFsdWUgJXMiICUgKGNtZCwgcmV0KSwgdXJsZGF0YS51cmwpCisKKyAgICAgICAgaWYgaXRlcmF0ZSBpcyBUcnVlOgorICAgICAgICAgICAgaXRlcmF0ZV91cmxkYXRhID0gdXJsZGF0YQorICAgICAgICAgICAgaXRlcmF0ZV91cmxkYXRhLmxvY2FscGF0aCA9ICIlcy8lcyIgJSAocm9vdGRpciwgaXRlcmF0ZV9maWxlKQorICAgICAgICAgICAgc2VsZi51bnBhY2sodXJsZGF0YSwgcm9vdGRpciwgZGF0YSkKKworICAgICAgICByZXR1cm4KKworICAgIGRlZiBjbGVhbihzZWxmLCB1cmxkYXRhLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENsZWFuIGFueSBleGlzdGluZyBmdWxsIG9yIHBhcnRpYWwgZG93bmxvYWQKKyAgICAgICAgIiIiCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh1cmxkYXRhLmxvY2FscGF0aCkKKworICAgIGRlZiB0cnlfcHJlbWlycm9yKHNlbGYsIHVybGRhdGEsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgU2hvdWxkIHByZW1pcnJvcnMgYmUgdXNlZD8KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgY2hlY2tzdGF0dXMoc2VsZiwgZmV0Y2gsIHVybGRhdGEsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgdGhlIHN0YXR1cyBvZiBhIFVSTAorICAgICAgICBBc3N1bWVzIGxvY2FscGF0aCB3YXMgY2FsbGVkIGZpcnN0CisgICAgICAgICIiIgorICAgICAgICBsb2dnZXIuaW5mbygiVVJMICVzIGNvdWxkIG5vdCBiZSBjaGVja2VkIGZvciBzdGF0dXMgc2luY2Ugbm8gbWV0aG9kIGV4aXN0cy4iLCB1cmwpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgbGF0ZXN0X3JldmlzaW9uKHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIExvb2sgaW4gdGhlIGNhY2hlIGZvciB0aGUgbGF0ZXN0IHJldmlzaW9uLCBpZiBub3QgcHJlc2VudCBhc2sgdGhlIFNDTS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICJfbGF0ZXN0X3JldmlzaW9uIik6CisgICAgICAgICAgICByYWlzZSBQYXJhbWV0ZXJFcnJvcigiVGhlIGZldGNoZXIgZm9yIHRoaXMgVVJMIGRvZXMgbm90IHN1cHBvcnQgX2xhdGVzdF9yZXZpc2lvbiIsIHVybCkKKworICAgICAgICByZXZzID0gYmIucGVyc2lzdF9kYXRhLnBlcnNpc3QoJ0JCX1VSSV9IRUFEUkVWUycsIGQpCisgICAgICAgIGtleSA9IHNlbGYuZ2VuZXJhdGVfcmV2aXNpb25fa2V5KHVkLCBkLCBuYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gcmV2c1trZXldCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldnNba2V5XSA9IHJldiA9IHNlbGYuX2xhdGVzdF9yZXZpc2lvbih1ZCwgZCwgbmFtZSkKKyAgICAgICAgICAgIHJldHVybiByZXYKKworICAgIGRlZiBzb3J0YWJsZV9yZXZpc2lvbihzZWxmLCB1ZCwgZCwgbmFtZSk6CisgICAgICAgIGxhdGVzdF9yZXYgPSBzZWxmLl9idWlsZF9yZXZpc2lvbih1ZCwgZCwgbmFtZSkKKyAgICAgICAgcmV0dXJuIFRydWUsIHN0cihsYXRlc3RfcmV2KQorCisgICAgZGVmIGdlbmVyYXRlX3JldmlzaW9uX2tleShzZWxmLCB1ZCwgZCwgbmFtZSk6CisgICAgICAgIGtleSA9IHNlbGYuX3JldmlzaW9uX2tleSh1ZCwgZCwgbmFtZSkKKyAgICAgICAgcmV0dXJuICIlcy0lcyIgJSAoa2V5LCBkLmdldFZhcigiUE4iLCBUcnVlKSBvciAiIikKKworY2xhc3MgRmV0Y2gob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXJscywgZCwgY2FjaGUgPSBUcnVlLCBsb2NhbG9ubHkgPSBGYWxzZSwgY29ubmVjdGlvbl9jYWNoZSA9IE5vbmUpOgorICAgICAgICBpZiBsb2NhbG9ubHkgYW5kIGNhY2hlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJiYi5mZXRjaDIuRmV0Y2guX19pbml0X186IGNhbm5vdCBzZXQgY2FjaGUgYW5kIGxvY2Fsb25seSBhdCBzYW1lIHRpbWUiKQorCisgICAgICAgIGlmIGxlbih1cmxzKSA9PSAwOgorICAgICAgICAgICAgdXJscyA9IGQuZ2V0VmFyKCJTUkNfVVJJIiwgVHJ1ZSkuc3BsaXQoKQorICAgICAgICBzZWxmLnVybHMgPSB1cmxzCisgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgc2VsZi51ZCA9IHt9CisgICAgICAgIHNlbGYuY29ubmVjdGlvbl9jYWNoZSA9IGNvbm5lY3Rpb25fY2FjaGUKKworICAgICAgICBmbiA9IGQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkKKyAgICAgICAgaWYgY2FjaGUgYW5kIGZuIGFuZCBmbiBpbiB1cmxkYXRhX2NhY2hlOgorICAgICAgICAgICAgc2VsZi51ZCA9IHVybGRhdGFfY2FjaGVbZm5dCisKKyAgICAgICAgZm9yIHVybCBpbiB1cmxzOgorICAgICAgICAgICAgaWYgdXJsIG5vdCBpbiBzZWxmLnVkOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi51ZFt1cmxdID0gRmV0Y2hEYXRhKHVybCwgZCwgbG9jYWxvbmx5KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBOb25Mb2NhbE1ldGhvZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgbG9jYWxvbmx5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi51ZFt1cmxdID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGlmIGZuIGFuZCBjYWNoZToKKyAgICAgICAgICAgIHVybGRhdGFfY2FjaGVbZm5dID0gc2VsZi51ZAorCisgICAgZGVmIGxvY2FscGF0aChzZWxmLCB1cmwpOgorICAgICAgICBpZiB1cmwgbm90IGluIHNlbGYudXJsczoKKyAgICAgICAgICAgIHNlbGYudWRbdXJsXSA9IEZldGNoRGF0YSh1cmwsIHNlbGYuZCkKKworICAgICAgICBzZWxmLnVkW3VybF0uc2V0dXBfbG9jYWxwYXRoKHNlbGYuZCkKKyAgICAgICAgcmV0dXJuIHNlbGYuZC5leHBhbmQoc2VsZi51ZFt1cmxdLmxvY2FscGF0aCkKKworICAgIGRlZiBsb2NhbHBhdGhzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgbG9jYWwgZmlsZW5hbWVzLCBhc3N1bWluZyBzdWNjZXNzZnVsIGZldGNoCisgICAgICAgICIiIgorICAgICAgICBsb2NhbCA9IFtdCisKKyAgICAgICAgZm9yIHUgaW4gc2VsZi51cmxzOgorICAgICAgICAgICAgdWQgPSBzZWxmLnVkW3VdCisgICAgICAgICAgICB1ZC5zZXR1cF9sb2NhbHBhdGgoc2VsZi5kKQorICAgICAgICAgICAgbG9jYWwuYXBwZW5kKHVkLmxvY2FscGF0aCkKKworICAgICAgICByZXR1cm4gbG9jYWwKKworICAgIGRlZiBkb3dubG9hZChzZWxmLCB1cmxzPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgRmV0Y2ggYWxsIHVybHMKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCB1cmxzOgorICAgICAgICAgICAgdXJscyA9IHNlbGYudXJscworCisgICAgICAgIG5ldHdvcmsgPSBzZWxmLmQuZ2V0VmFyKCJCQl9OT19ORVRXT1JLIiwgVHJ1ZSkKKyAgICAgICAgcHJlbWlycm9yb25seSA9IChzZWxmLmQuZ2V0VmFyKCJCQl9GRVRDSF9QUkVNSVJST1JPTkxZIiwgVHJ1ZSkgPT0gIjEiKQorCisgICAgICAgIGZvciB1IGluIHVybHM6CisgICAgICAgICAgICB1ZCA9IHNlbGYudWRbdV0KKyAgICAgICAgICAgIHVkLnNldHVwX2xvY2FscGF0aChzZWxmLmQpCisgICAgICAgICAgICBtID0gdWQubWV0aG9kCisgICAgICAgICAgICBsb2NhbHBhdGggPSAiIgorCisgICAgICAgICAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKHVkLmxvY2tmaWxlKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiQkJfTk9fTkVUV09SSyIsIG5ldHdvcmspCisgCisgICAgICAgICAgICAgICAgaWYgdmVyaWZ5X2RvbmVzdGFtcCh1ZCwgc2VsZi5kKSBhbmQgbm90IG0ubmVlZF91cGRhdGUodWQsIHNlbGYuZCk6CisgICAgICAgICAgICAgICAgICAgIGxvY2FscGF0aCA9IHVkLmxvY2FscGF0aAorICAgICAgICAgICAgICAgIGVsaWYgbS50cnlfcHJlbWlycm9yKHVkLCBzZWxmLmQpOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlRyeWluZyBQUkVNSVJST1JTIikKKyAgICAgICAgICAgICAgICAgICAgbWlycm9ycyA9IG1pcnJvcl9mcm9tX3N0cmluZyhzZWxmLmQuZ2V0VmFyKCdQUkVNSVJST1JTJywgVHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgIGxvY2FscGF0aCA9IHRyeV9taXJyb3JzKHNlbGYsIHNlbGYuZCwgdWQsIG1pcnJvcnMsIEZhbHNlKQorCisgICAgICAgICAgICAgICAgaWYgcHJlbWlycm9yb25seToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiQkJfTk9fTkVUV09SSyIsICIxIikKKworICAgICAgICAgICAgICAgIG9zLmNoZGlyKHNlbGYuZC5nZXRWYXIoIkRMX0RJUiIsIFRydWUpKQorCisgICAgICAgICAgICAgICAgZmlyc3RlcnIgPSBOb25lCisgICAgICAgICAgICAgICAgdmVyaWZpZWRfc3RhbXAgPSB2ZXJpZnlfZG9uZXN0YW1wKHVkLCBzZWxmLmQpCisgICAgICAgICAgICAgICAgaWYgbm90IGxvY2FscGF0aCBhbmQgKG5vdCB2ZXJpZmllZF9zdGFtcCBvciBtLm5lZWRfdXBkYXRlKHVkLCBzZWxmLmQpKToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHRydXN0ZWRfbmV0d29yayhzZWxmLmQsIHVkLnVybCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVW50cnVzdGVkVXJsKHVkLnVybCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiVHJ5aW5nIFVwc3RyZWFtIikKKyAgICAgICAgICAgICAgICAgICAgICAgIG0uZG93bmxvYWQodWQsIHNlbGYuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIobSwgImJ1aWxkX21pcnJvcl9kYXRhIik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5idWlsZF9taXJyb3JfZGF0YSh1ZCwgc2VsZi5kKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxwYXRoID0gdWQubG9jYWxwYXRoCisgICAgICAgICAgICAgICAgICAgICAgICAjIGVhcmx5IGNoZWNrc3VtIHZlcmlmeSwgc28gdGhhdCBpZiBjaGVja3N1bSBtaXNtYXRjaGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgIyBmZXRjaGVyIHN0aWxsIGhhdmUgY2hhbmNlIHRvIGZldGNoIGZyb20gbWlycm9yCisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVfc3RhbXAodWQsIHNlbGYuZCkKKworICAgICAgICAgICAgICAgICAgICBleGNlcHQgYmIuZmV0Y2gyLk5ldHdvcmtBY2Nlc3M6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBCQkZldGNoRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGUsIENoZWNrc3VtRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJDaGVja3N1bSBmYWlsdXJlIGVuY291bnRlcmVkIHdpdGggZG93bmxvYWQgb2YgJXMgLSB3aWxsIGF0dGVtcHQgb3RoZXIgc291cmNlcyBpZiBhdmFpbGFibGUiICUgdSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgc3RyKGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmFtZV9iYWRfY2hlY2tzdW0odWQsIGUuY2hlY2tzdW0pCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZSwgTm9DaGVja3N1bUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybignRmFpbGVkIHRvIGZldGNoIFVSTCAlcywgYXR0ZW1wdGluZyBNSVJST1JTIGlmIGF2YWlsYWJsZScgJSB1KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCBzdHIoZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdGVyciA9IGUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgUmVtb3ZlIGFueSBpbmNvbXBsZXRlIGZldGNoCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgdmVyaWZpZWRfc3RhbXA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5jbGVhbih1ZCwgc2VsZi5kKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJUcnlpbmcgTUlSUk9SUyIpCisgICAgICAgICAgICAgICAgICAgICAgICBtaXJyb3JzID0gbWlycm9yX2Zyb21fc3RyaW5nKHNlbGYuZC5nZXRWYXIoJ01JUlJPUlMnLCBUcnVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FscGF0aCA9IHRyeV9taXJyb3JzKHNlbGYsIHNlbGYuZCwgdWQsIG1pcnJvcnMpCisKKyAgICAgICAgICAgICAgICBpZiBub3QgbG9jYWxwYXRoIG9yICgobm90IG9zLnBhdGguZXhpc3RzKGxvY2FscGF0aCkpIGFuZCBsb2NhbHBhdGguZmluZCgiKiIpID09IC0xKToKKyAgICAgICAgICAgICAgICAgICAgaWYgZmlyc3RlcnI6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGZpcnN0ZXJyKSkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiVW5hYmxlIHRvIGZldGNoIFVSTCBmcm9tIGFueSBzb3VyY2UuIiwgdSkKKworICAgICAgICAgICAgICAgIHVwZGF0ZV9zdGFtcCh1ZCwgc2VsZi5kKQorCisgICAgICAgICAgICBleGNlcHQgQkJGZXRjaEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZSwgQ2hlY2tzdW1FcnJvcik6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ2hlY2tzdW0gZmFpbHVyZSBmZXRjaGluZyAlcyIgJSB1KQorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKworICAgIGRlZiBjaGVja3N0YXR1cyhzZWxmLCB1cmxzPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgYWxsIHVybHMgZXhpc3QgdXBzdHJlYW0KKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgbm90IHVybHM6CisgICAgICAgICAgICB1cmxzID0gc2VsZi51cmxzCisKKyAgICAgICAgZm9yIHUgaW4gdXJsczoKKyAgICAgICAgICAgIHVkID0gc2VsZi51ZFt1XQorICAgICAgICAgICAgdWQuc2V0dXBfbG9jYWxwYXRoKHNlbGYuZCkKKyAgICAgICAgICAgIG0gPSB1ZC5tZXRob2QKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiVGVzdGluZyBVUkwgJXMiLCB1KQorICAgICAgICAgICAgIyBGaXJzdCB0cnkgY2hlY2tpbmcgdXJpLCB1LCBmcm9tIFBSRU1JUlJPUlMKKyAgICAgICAgICAgIG1pcnJvcnMgPSBtaXJyb3JfZnJvbV9zdHJpbmcoc2VsZi5kLmdldFZhcignUFJFTUlSUk9SUycsIFRydWUpKQorICAgICAgICAgICAgcmV0ID0gdHJ5X21pcnJvcnMoc2VsZiwgc2VsZi5kLCB1ZCwgbWlycm9ycywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCByZXQ6CisgICAgICAgICAgICAgICAgIyBOZXh0IHRyeSBjaGVja2luZyBmcm9tIHRoZSBvcmlnaW5hbCB1cmksIHUKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJldCA9IG0uY2hlY2tzdGF0dXMoc2VsZiwgdWQsIHNlbGYuZCkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICMgRmluYWxseSwgdHJ5IGNoZWNraW5nIHVyaSwgdSwgZnJvbSBNSVJST1JTCisgICAgICAgICAgICAgICAgICAgIG1pcnJvcnMgPSBtaXJyb3JfZnJvbV9zdHJpbmcoc2VsZi5kLmdldFZhcignTUlSUk9SUycsIFRydWUpKQorICAgICAgICAgICAgICAgICAgICByZXQgPSB0cnlfbWlycm9ycyhzZWxmLCBzZWxmLmQsIHVkLCBtaXJyb3JzLCBUcnVlKQorCisgICAgICAgICAgICBpZiBub3QgcmV0OgorICAgICAgICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIlVSTCAlcyBkb2Vzbid0IHdvcmsiICUgdSwgdSkKKworICAgIGRlZiB1bnBhY2soc2VsZiwgcm9vdCwgdXJscz1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIGFsbCB1cmxzIGV4aXN0IHVwc3RyZWFtCisgICAgICAgICIiIgorCisgICAgICAgIGlmIG5vdCB1cmxzOgorICAgICAgICAgICAgdXJscyA9IHNlbGYudXJscworCisgICAgICAgIGZvciB1IGluIHVybHM6CisgICAgICAgICAgICB1ZCA9IHNlbGYudWRbdV0KKyAgICAgICAgICAgIHVkLnNldHVwX2xvY2FscGF0aChzZWxmLmQpCisKKyAgICAgICAgICAgIGlmIHNlbGYuZC5leHBhbmQoc2VsZi5sb2NhbHBhdGgpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgdWQubG9ja2ZpbGU6CisgICAgICAgICAgICAgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZSh1ZC5sb2NrZmlsZSkKKworICAgICAgICAgICAgdWQubWV0aG9kLnVucGFjayh1ZCwgcm9vdCwgc2VsZi5kKQorCisgICAgICAgICAgICBpZiB1ZC5sb2NrZmlsZToKKyAgICAgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorCisgICAgZGVmIGNsZWFuKHNlbGYsIHVybHM9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBDbGVhbiBmaWxlcyB0aGF0IHRoZSBmZXRjaGVyIGdldHMgb3IgcGxhY2VzCisgICAgICAgICIiIgorCisgICAgICAgIGlmIG5vdCB1cmxzOgorICAgICAgICAgICAgdXJscyA9IHNlbGYudXJscworCisgICAgICAgIGZvciB1cmwgaW4gdXJsczoKKyAgICAgICAgICAgIGlmIHVybCBub3QgaW4gc2VsZi51ZDoKKyAgICAgICAgICAgICAgICBzZWxmLnVkW3VybF0gPSBGZXRjaERhdGEodXJsLCBkKQorICAgICAgICAgICAgdWQgPSBzZWxmLnVkW3VybF0KKyAgICAgICAgICAgIHVkLnNldHVwX2xvY2FscGF0aChzZWxmLmQpCisKKyAgICAgICAgICAgIGlmIG5vdCB1ZC5sb2NhbGZpbGUgYW5kIHVkLmxvY2FscGF0aCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIHVkLmxvY2tmaWxlOgorICAgICAgICAgICAgICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUodWQubG9ja2ZpbGUpCisKKyAgICAgICAgICAgIHVkLm1ldGhvZC5jbGVhbih1ZCwgc2VsZi5kKQorICAgICAgICAgICAgaWYgdWQuZG9uZXN0YW1wOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh1ZC5kb25lc3RhbXApCisKKyAgICAgICAgICAgIGlmIHVkLmxvY2tmaWxlOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisKK2NsYXNzIEZldGNoQ29ubmVjdGlvbkNhY2hlKG9iamVjdCk6CisgICAgIiIiCisgICAgICAgIEEgY2xhc3Mgd2hpY2ggcmVwcmVzZW50cyBhbiBjb250YWluZXIgZm9yIHNvY2tldCBjb25uZWN0aW9ucy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuY2FjaGUgPSB7fQorCisgICAgZGVmIGdldF9jb25uZWN0aW9uX25hbWUoc2VsZiwgaG9zdCwgcG9ydCk6CisgICAgICAgIHJldHVybiBob3N0ICsgJzonICsgc3RyKHBvcnQpCisKKyAgICBkZWYgYWRkX2Nvbm5lY3Rpb24oc2VsZiwgaG9zdCwgcG9ydCwgY29ubmVjdGlvbik6CisgICAgICAgIGNuID0gc2VsZi5nZXRfY29ubmVjdGlvbl9uYW1lKGhvc3QsIHBvcnQpCisKKyAgICAgICAgaWYgY24gbm90IGluIHNlbGYuY2FjaGU6CisgICAgICAgICAgICBzZWxmLmNhY2hlW2NuXSA9IGNvbm5lY3Rpb24KKworICAgIGRlZiBnZXRfY29ubmVjdGlvbihzZWxmLCBob3N0LCBwb3J0KToKKyAgICAgICAgY29ubmVjdGlvbiA9IE5vbmUKKworICAgICAgICBjbiA9IHNlbGYuZ2V0X2Nvbm5lY3Rpb25fbmFtZShob3N0LCBwb3J0KQorICAgICAgICBpZiBjbiBpbiBzZWxmLmNhY2hlOgorICAgICAgICAgICAgY29ubmVjdGlvbiA9IHNlbGYuY2FjaGVbY25dCisKKyAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb24KKworICAgIGRlZiByZW1vdmVfY29ubmVjdGlvbihzZWxmLCBob3N0LCBwb3J0KToKKyAgICAgICAgY24gPSBzZWxmLmdldF9jb25uZWN0aW9uX25hbWUoaG9zdCwgcG9ydCkKKyAgICAgICAgaWYgY24gaW4gc2VsZi5jYWNoZToKKyAgICAgICAgICAgIHNlbGYuY2FjaGVbY25dLmNsb3NlKCkKKyAgICAgICAgICAgIGRlbCBzZWxmLmNhY2hlW2NuXQorCisgICAgZGVmIGNsb3NlX2Nvbm5lY3Rpb25zKHNlbGYpOgorICAgICAgICBmb3IgY24gaW4gc2VsZi5jYWNoZS5rZXlzKCk6CisgICAgICAgICAgICBzZWxmLmNhY2hlW2NuXS5jbG9zZSgpCisgICAgICAgICAgICBkZWwgc2VsZi5jYWNoZVtjbl0KKworZnJvbSAuIGltcG9ydCBjdnMKK2Zyb20gLiBpbXBvcnQgZ2l0Citmcm9tIC4gaW1wb3J0IGdpdHNtCitmcm9tIC4gaW1wb3J0IGdpdGFubmV4Citmcm9tIC4gaW1wb3J0IGxvY2FsCitmcm9tIC4gaW1wb3J0IHN2bgorZnJvbSAuIGltcG9ydCB3Z2V0Citmcm9tIC4gaW1wb3J0IHNzaAorZnJvbSAuIGltcG9ydCBzZnRwCitmcm9tIC4gaW1wb3J0IHBlcmZvcmNlCitmcm9tIC4gaW1wb3J0IGJ6cgorZnJvbSAuIGltcG9ydCBoZworZnJvbSAuIGltcG9ydCBvc2MKK2Zyb20gLiBpbXBvcnQgcmVwbworZnJvbSAuIGltcG9ydCBjbGVhcmNhc2UKKworbWV0aG9kcy5hcHBlbmQobG9jYWwuTG9jYWwoKSkKK21ldGhvZHMuYXBwZW5kKHdnZXQuV2dldCgpKQorbWV0aG9kcy5hcHBlbmQoc3ZuLlN2bigpKQorbWV0aG9kcy5hcHBlbmQoZ2l0LkdpdCgpKQorbWV0aG9kcy5hcHBlbmQoZ2l0c20uR2l0U00oKSkKK21ldGhvZHMuYXBwZW5kKGdpdGFubmV4LkdpdEFOTkVYKCkpCittZXRob2RzLmFwcGVuZChjdnMuQ3ZzKCkpCittZXRob2RzLmFwcGVuZChzc2guU1NIKCkpCittZXRob2RzLmFwcGVuZChzZnRwLlNGVFAoKSkKK21ldGhvZHMuYXBwZW5kKHBlcmZvcmNlLlBlcmZvcmNlKCkpCittZXRob2RzLmFwcGVuZChienIuQnpyKCkpCittZXRob2RzLmFwcGVuZChoZy5IZygpKQorbWV0aG9kcy5hcHBlbmQob3NjLk9zYygpKQorbWV0aG9kcy5hcHBlbmQocmVwby5SZXBvKCkpCittZXRob2RzLmFwcGVuZChjbGVhcmNhc2UuQ2xlYXJDYXNlKCkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9ienIucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9ienIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNlOWFjNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2J6ci5weQpAQCAtMCwwICsxLDE0MyBAQAorIiIiCitCaXRCYWtlICdGZXRjaCcgaW1wbGVtZW50YXRpb24gZm9yIGJ6ci4KKworIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDA3IFJvc3MgQnVydG9uCisjIENvcHlyaWdodCAoQykgMjAwNyBSaWNoYXJkIFB1cmRpZQorIworIyAgIENsYXNzZXMgZm9yIG9idGFpbmluZyB1cHN0cmVhbSBzb3VyY2VzIGZvciB0aGUKKyMgICBCaXRCYWtlIGJ1aWxkIHRvb2xzLgorIyAgIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYmIKK2Zyb20gYmIgaW1wb3J0IGRhdGEKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBGZXRjaE1ldGhvZAorZnJvbSBiYi5mZXRjaDIgaW1wb3J0IEZldGNoRXJyb3IKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAorZnJvbSBiYi5mZXRjaDIgaW1wb3J0IGxvZ2dlcgorCitjbGFzcyBCenIoRmV0Y2hNZXRob2QpOgorICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1ZCwgZCk6CisgICAgICAgIHJldHVybiB1ZC50eXBlIGluIFsnYnpyJ10KKworICAgIGRlZiB1cmxkYXRhX2luaXQoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgaW5pdCBienIgc3BlY2lmaWMgdmFyaWFibGUgd2l0aGluIHVybCBkYXRhCisgICAgICAgICIiIgorICAgICAgICAjIENyZWF0ZSBwYXRocyB0byBienIgY2hlY2tvdXRzCisgICAgICAgIHJlbHBhdGggPSBzZWxmLl9zdHJpcF9sZWFkaW5nX3NsYXNoZXModWQucGF0aCkKKyAgICAgICAgdWQucGtnZGlyID0gb3MucGF0aC5qb2luKGRhdGEuZXhwYW5kKCcke0JaUkRJUn0nLCBkKSwgdWQuaG9zdCwgcmVscGF0aCkKKworICAgICAgICB1ZC5zZXR1cF9yZXZpc29ucyhkKQorCisgICAgICAgIGlmIG5vdCB1ZC5yZXZpc2lvbjoKKyAgICAgICAgICAgIHVkLnJldmlzaW9uID0gc2VsZi5sYXRlc3RfcmV2aXNpb24odWQsIGQpCisKKyAgICAgICAgdWQubG9jYWxmaWxlID0gZGF0YS5leHBhbmQoJ2J6cl8lc18lc18lcy50YXIuZ3onICUgKHVkLmhvc3QsIHVkLnBhdGgucmVwbGFjZSgnLycsICcuJyksIHVkLnJldmlzaW9uKSwgZCkKKworICAgIGRlZiBfYnVpbGRienJjb21tYW5kKHNlbGYsIHVkLCBkLCBjb21tYW5kKToKKyAgICAgICAgIiIiCisgICAgICAgIEJ1aWxkIHVwIGFuIGJ6ciBjb21tYW5kbGluZSBiYXNlZCBvbiB1ZAorICAgICAgICBjb21tYW5kIGlzICJmZXRjaCIsICJ1cGRhdGUiLCAicmV2bm8iCisgICAgICAgICIiIgorCisgICAgICAgIGJhc2VjbWQgPSBkYXRhLmV4cGFuZCgnJHtGRVRDSENNRF9ienJ9JywgZCkKKworICAgICAgICBwcm90byA9ICB1ZC5wYXJtLmdldCgncHJvdG9jb2wnLCAnaHR0cCcpCisKKyAgICAgICAgYnpycm9vdCA9IHVkLmhvc3QgKyB1ZC5wYXRoCisKKyAgICAgICAgb3B0aW9ucyA9IFtdCisKKyAgICAgICAgaWYgY29tbWFuZCA9PSAicmV2bm8iOgorICAgICAgICAgICAgYnpyY21kID0gIiVzIHJldm5vICVzICVzOi8vJXMiICUgKGJhc2VjbWQsICIgIi5qb2luKG9wdGlvbnMpLCBwcm90bywgYnpycm9vdCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHVkLnJldmlzaW9uOgorICAgICAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItciAlcyIgJSB1ZC5yZXZpc2lvbikKKworICAgICAgICAgICAgaWYgY29tbWFuZCA9PSAiZmV0Y2giOgorICAgICAgICAgICAgICAgIGJ6cmNtZCA9ICIlcyBicmFuY2ggJXMgJXM6Ly8lcyIgJSAoYmFzZWNtZCwgIiAiLmpvaW4ob3B0aW9ucyksIHByb3RvLCBienJyb290KQorICAgICAgICAgICAgZWxpZiBjb21tYW5kID09ICJ1cGRhdGUiOgorICAgICAgICAgICAgICAgIGJ6cmNtZCA9ICIlcyBwdWxsICVzIC0tb3ZlcndyaXRlIiAlIChiYXNlY21kLCAiICIuam9pbihvcHRpb25zKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiSW52YWxpZCBienIgY29tbWFuZCAlcyIgJSBjb21tYW5kLCB1ZC51cmwpCisKKyAgICAgICAgcmV0dXJuIGJ6cmNtZAorCisgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiRmV0Y2ggdXJsIiIiCisKKyAgICAgICAgaWYgb3MuYWNjZXNzKG9zLnBhdGguam9pbih1ZC5wa2dkaXIsIG9zLnBhdGguYmFzZW5hbWUodWQucGtnZGlyKSwgJy5ienInKSwgb3MuUl9PSyk6CisgICAgICAgICAgICBienJjbWQgPSBzZWxmLl9idWlsZGJ6cmNvbW1hbmQodWQsIGQsICJ1cGRhdGUiKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJCWlIgVXBkYXRlICVzIiwgdWQudXJsKQorICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIGJ6cmNtZCwgdWQudXJsKQorICAgICAgICAgICAgb3MuY2hkaXIob3MucGF0aC5qb2luICh1ZC5wa2dkaXIsIG9zLnBhdGguYmFzZW5hbWUodWQucGF0aCkpKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoYnpyY21kLCBkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKG9zLnBhdGguam9pbih1ZC5wa2dkaXIsIG9zLnBhdGguYmFzZW5hbWUodWQucGtnZGlyKSksIFRydWUpCisgICAgICAgICAgICBienJjbWQgPSBzZWxmLl9idWlsZGJ6cmNvbW1hbmQodWQsIGQsICJmZXRjaCIpCisgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgYnpyY21kLCB1ZC51cmwpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIkJaUiBDaGVja291dCAlcyIsIHVkLnVybCkKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih1ZC5wa2dkaXIpCisgICAgICAgICAgICBvcy5jaGRpcih1ZC5wa2dkaXIpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJ1bm5pbmcgJXMiLCBienJjbWQpCisgICAgICAgICAgICBydW5mZXRjaGNtZChienJjbWQsIGQpCisKKyAgICAgICAgb3MuY2hkaXIodWQucGtnZGlyKQorCisgICAgICAgIHNjbWRhdGEgPSB1ZC5wYXJtLmdldCgic2NtZGF0YSIsICIiKQorICAgICAgICBpZiBzY21kYXRhID09ICJrZWVwIjoKKyAgICAgICAgICAgIHRhcl9mbGFncyA9ICIiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0YXJfZmxhZ3MgPSAiLS1leGNsdWRlICcuYnpyJyAtLWV4Y2x1ZGUgJy5ienJ0YWdzJyIKKworICAgICAgICAjIHRhciB0aGVtIHVwIHRvIGEgZGVmaW5lZCBmaWxlbmFtZQorICAgICAgICBydW5mZXRjaGNtZCgidGFyICVzIC1jemYgJXMgJXMiICUgKHRhcl9mbGFncywgdWQubG9jYWxwYXRoLCBvcy5wYXRoLmJhc2VuYW1lKHVkLnBrZ2RpcikpLCBkLCBjbGVhbnVwID0gW3VkLmxvY2FscGF0aF0pCisKKyAgICBkZWYgc3VwcG9ydHNfc3JjcmV2KHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9yZXZpc2lvbl9rZXkoc2VsZiwgdWQsIGQsIG5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgdW5pcXVlIGtleSBmb3IgdGhlIHVybAorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuICJienI6IiArIHVkLnBrZ2RpcgorCisgICAgZGVmIF9sYXRlc3RfcmV2aXNpb24oc2VsZiwgdWQsIGQsIG5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBsYXRlc3QgdXBzdHJlYW0gcmV2aXNpb24gbnVtYmVyCisgICAgICAgICIiIgorICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkJaUiBmZXRjaGVyIGhpdHRpbmcgbmV0d29yayBmb3IgJXMiLCB1ZC51cmwpCisKKyAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIHNlbGYuX2J1aWxkYnpyY29tbWFuZCh1ZCwgZCwgInJldm5vIiksIHVkLnVybCkKKworICAgICAgICBvdXRwdXQgPSBydW5mZXRjaGNtZChzZWxmLl9idWlsZGJ6cmNvbW1hbmQodWQsIGQsICJyZXZubyIpLCBkLCBUcnVlKQorCisgICAgICAgIHJldHVybiBvdXRwdXQuc3RyaXAoKQorCisgICAgZGVmIHNvcnRhYmxlX3JldmlzaW9uKHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIHNvcnRhYmxlIHJldmlzaW9uIG51bWJlciB3aGljaCBpbiBvdXIgY2FzZSBpcyB0aGUgcmV2aXNpb24gbnVtYmVyCisgICAgICAgICIiIgorCisgICAgICAgIHJldHVybiBGYWxzZSwgc2VsZi5fYnVpbGRfcmV2aXNpb24odWQsIGQpCisKKyAgICBkZWYgX2J1aWxkX3JldmlzaW9uKHNlbGYsIHVkLCBkKToKKyAgICAgICAgcmV0dXJuIHVkLnJldmlzaW9uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9jbGVhcmNhc2UucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9jbGVhcmNhc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE4M2U3YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2NsZWFyY2FzZS5weQpAQCAtMCwwICsxLDI2MyBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0QmFrZSAnRmV0Y2gnIGNsZWFyY2FzZSBpbXBsZW1lbnRhdGlvbgorCitUaGUgY2xlYXJjYXNlIGZldGNoZXIgaXMgdXNlZCB0byByZXRyaWV2ZSBmaWxlcyBmcm9tIGEgQ2xlYXJDYXNlIHJlcG9zaXRvcnkuCisKK1VzYWdlIGluIHRoZSByZWNpcGU6CisKKyAgICBTUkNfVVJJID0gImNjcmM6Ly9jYy5leGFtcGxlLm9yZy9jY3JjO3ZvYj0vZXhhbXBsZV92b2I7bW9kdWxlPS9leGFtcGxlX21vZHVsZSIKKyAgICBTUkNSRVYgPSAiRVhBTVBMRV9DTEVBUkNBU0VfVEFHIgorICAgIFBWID0gIiR7QGQuZ2V0VmFyKCJTUkNSRVYiLCBGYWxzZSkucmVwbGFjZSgiLyIsICIrIil9IgorCitUaGUgZmV0Y2hlciB1c2VzIHRoZSByY2xlYXJ0b29sIG9yIGNsZWFydG9vbCByZW1vdGUgY2xpZW50LCBkZXBlbmRpbmcgb24gd2hpY2ggb25lIGlzIGF2YWlsYWJsZS4KKworU3VwcG9ydGVkIFNSQ19VUkkgb3B0aW9ucyBhcmU6CisKKy0gdm9iCisgICAgKHJlcXVpcmVkKSBUaGUgbmFtZSBvZiB0aGUgY2xlYXJjYXNlIFZPQiAod2l0aCBwcmVwZW5kaW5nICIvIikKKworLSBtb2R1bGUKKyAgICBUaGUgbW9kdWxlIGluIHRoZSBzZWxlY3RlZCBWT0IgKHdpdGggcHJlcGVuZGluZyAiLyIpCisKKyAgICBUaGUgbW9kdWxlIGFuZCB2b2IgcGFyYW1ldGVycyBhcmUgY29tYmluZWQgdG8gY3JlYXRlCisgICAgdGhlIGZvbGxvd2luZyBsb2FkIHJ1bGUgaW4gdGhlIHZpZXcgY29uZmlnIHNwZWM6CisgICAgICAgICAgICAgICAgbG9hZCA8dm9iPjxtb2R1bGU+CisKKy0gcHJvdG8KKyAgICBodHRwIG9yIGh0dHBzCisKK1JlbGF0ZWQgdmFyaWFibGVzOgorCisgICAgQ0NBU0VfQ1VTVE9NX0NPTkZJR19TUEVDCisgICAgICAgICAgICBXcml0ZSBhIGNvbmZpZyBzcGVjIHRvIHRoaXMgdmFyaWFibGUgaW4geW91ciByZWNpcGUgdG8gdXNlIGl0IGluc3RlYWQKKyAgICAgICAgICAgIG9mIHRoZSBkZWZhdWx0IGNvbmZpZyBzcGVjIGdlbmVyYXRlZCBieSB0aGlzIGZldGNoZXIuCisgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBTUkNSRVYgbG9zZXMgaXRzIGZ1bmN0aW9uYWxpdHkgaWYgeW91IHNwZWNpZnkKKyAgICAgICAgICAgIHRoaXMgdmFyaWFibGUuIFNSQ1JFViBpcyBzdGlsbCB1c2VkIHRvIGxhYmVsIHRoZSBhcmNoaXZlIGFmdGVyIGEgZmV0Y2gsCisgICAgICAgICAgICBidXQgaXQgZG9lc24ndCBkZWZpbmUgd2hhdCdzIGZldGNoZWQuCisKK1VzZXIgY3JlZGVudGlhbHM6CisgICAgY2xlYXJ0b29sOgorICAgICAgICAgICAgVGhlIGxvZ2luIG9mIGNsZWFydG9vbCBpcyBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0uIE5vIHNwZWNpYWwgc3RlcHMgbmVlZGVkLgorCisgICAgcmNsZWFydG9vbDoKKyAgICAgICAgICAgIEluIG9yZGVyIHRvIHVzZSByY2xlYXJ0b29sIHdpdGggYXV0aGVudGljYXRlZCB1c2VycyBhbiBgcmNsZWFydG9vbCBsb2dpbmAgaXMKKyAgICAgICAgICAgIG5lY2Vzc2FyeSBiZWZvcmUgdXNpbmcgdGhlIGZldGNoZXIuCisiIiIKKyMgQ29weXJpZ2h0IChDKSAyMDE0IFNpZW1lbnMgQUcKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHNodXRpbAoraW1wb3J0IGJiCitmcm9tICAgYmIgaW1wb3J0IGRhdGEKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IEZldGNoTWV0aG9kCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBGZXRjaEVycm9yCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgbG9nZ2VyCitmcm9tICAgZGlzdHV0aWxzIGltcG9ydCBzcGF3bgorCitjbGFzcyBDbGVhckNhc2UoRmV0Y2hNZXRob2QpOgorICAgICIiIkNsYXNzIHRvIGZldGNoIHVybHMgdmlhICdjbGVhcmNhc2UnIiIiCisgICAgZGVmIGluaXQoc2VsZiwgZCk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0byBzZWUgaWYgYSBnaXZlbiB1cmwgY2FuIGJlIGZldGNoZWQgd2l0aCBDbGVhcmNhc2UuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gdWQudHlwZSBpbiBbJ2NjcmMnXQorCisgICAgZGVmIGRlYnVnKHNlbGYsIG1zZyk6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiQ2xlYXJDYXNlOiAlcyIsIG1zZykKKworICAgIGRlZiB1cmxkYXRhX2luaXQoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgaW5pdCBDbGVhckNhc2Ugc3BlY2lmaWMgdmFyaWFibGUgd2l0aGluIHVybCBkYXRhCisgICAgICAgICIiIgorICAgICAgICB1ZC5wcm90byA9ICJodHRwcyIKKyAgICAgICAgaWYgJ3Byb3RvY29sJyBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgdWQucHJvdG8gPSB1ZC5wYXJtWydwcm90b2NvbCddCisgICAgICAgIGlmIG5vdCB1ZC5wcm90byBpbiAoJ2h0dHAnLCAnaHR0cHMnKToKKyAgICAgICAgICAgIHJhaXNlIGZldGNoMi5QYXJhbWV0ZXJFcnJvcigiSW52YWxpZCBwcm90b2NvbCB0eXBlIiwgdWQudXJsKQorCisgICAgICAgIHVkLnZvYiA9ICcnCisgICAgICAgIGlmICd2b2InIGluIHVkLnBhcm06CisgICAgICAgICAgICB1ZC52b2IgPSB1ZC5wYXJtWyd2b2InXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnID0gdWQudXJsKyI6IHZvYiBtdXN0IGJlIGRlZmluZWQgc28gdGhlIGZldGNoZXIga25vd3Mgd2hhdCB0byBnZXQuIgorICAgICAgICAgICAgcmFpc2UgTWlzc2luZ1BhcmFtZXRlckVycm9yKCd2b2InLCBtc2cpCisKKyAgICAgICAgaWYgJ21vZHVsZScgaW4gdWQucGFybToKKyAgICAgICAgICAgIHVkLm1vZHVsZSA9IHVkLnBhcm1bJ21vZHVsZSddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1ZC5tb2R1bGUgPSAiIgorCisgICAgICAgIHVkLmJhc2VjbWQgPSBkLmdldFZhcigiRkVUQ0hDTURfY2NyYyIsIFRydWUpIG9yIHNwYXduLmZpbmRfZXhlY3V0YWJsZSgiY2xlYXJ0b29sIikgb3Igc3Bhd24uZmluZF9leGVjdXRhYmxlKCJyY2xlYXJ0b29sIikKKworICAgICAgICBpZiBkYXRhLmdldFZhcigiU1JDUkVWIiwgZCwgVHJ1ZSkgPT0gIklOVkFMSUQiOgorICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIlNldCBhIHZhbGlkIFNSQ1JFViBmb3IgdGhlIGNsZWFyY2FzZSBmZXRjaGVyIGluIHlvdXIgcmVjaXBlLCBlLmcuIFNSQ1JFViA9IFwiL21haW4vTEFURVNUXCIgb3IgYW55IG90aGVyIGxhYmVsIG9mIHlvdXIgY2hvaWNlLiIpCisKKyAgICAgICAgdWQubGFiZWwgPSBkLmdldFZhcigiU1JDUkVWIiwgRmFsc2UpCisgICAgICAgIHVkLmN1c3RvbXNwZWMgPSBkLmdldFZhcigiQ0NBU0VfQ1VTVE9NX0NPTkZJR19TUEVDIiwgVHJ1ZSkKKworICAgICAgICB1ZC5zZXJ2ZXIgICAgID0gIiVzOi8vJXMlcyIgJSAodWQucHJvdG8sIHVkLmhvc3QsIHVkLnBhdGgpCisKKyAgICAgICAgdWQuaWRlbnRpZmllciA9ICJjbGVhcmNhc2UtJXMlcy0lcyIgJSAoIHVkLnZvYi5yZXBsYWNlKCIvIiwgIiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWQubW9kdWxlLnJlcGxhY2UoIi8iLCAiLiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWQubGFiZWwucmVwbGFjZSgiLyIsICIuIikpCisKKyAgICAgICAgdWQudmlld25hbWUgICAgICAgICA9ICIlcy12aWV3JXMiICUgKHVkLmlkZW50aWZpZXIsIGQuZ2V0VmFyKCJEQVRFVElNRSIsIGQsIFRydWUpKQorICAgICAgICB1ZC5jc25hbWUgICAgICAgICAgID0gIiVzLWNvbmZpZy1zcGVjIiAlICh1ZC5pZGVudGlmaWVyKQorICAgICAgICB1ZC5jY2FzZWRpciAgICAgICAgID0gb3MucGF0aC5qb2luKGRhdGEuZ2V0VmFyKCJETF9ESVIiLCBkLCBUcnVlKSwgdWQudHlwZSkKKyAgICAgICAgdWQudmlld2RpciAgICAgICAgICA9IG9zLnBhdGguam9pbih1ZC5jY2FzZWRpciwgdWQudmlld25hbWUpCisgICAgICAgIHVkLmNvbmZpZ3NwZWNmaWxlICAgPSBvcy5wYXRoLmpvaW4odWQuY2Nhc2VkaXIsIHVkLmNzbmFtZSkKKyAgICAgICAgdWQubG9jYWxmaWxlICAgICAgICA9ICIlcy50YXIuZ3oiICUgKHVkLmlkZW50aWZpZXIpCisKKyAgICAgICAgc2VsZi5kZWJ1ZygiaG9zdCAgICAgICAgICAgID0gJXMiICUgdWQuaG9zdCkKKyAgICAgICAgc2VsZi5kZWJ1ZygicGF0aCAgICAgICAgICAgID0gJXMiICUgdWQucGF0aCkKKyAgICAgICAgc2VsZi5kZWJ1Zygic2VydmVyICAgICAgICAgID0gJXMiICUgdWQuc2VydmVyKQorICAgICAgICBzZWxmLmRlYnVnKCJwcm90byAgICAgICAgICAgPSAlcyIgJSB1ZC5wcm90bykKKyAgICAgICAgc2VsZi5kZWJ1ZygidHlwZSAgICAgICAgICAgID0gJXMiICUgdWQudHlwZSkKKyAgICAgICAgc2VsZi5kZWJ1Zygidm9iICAgICAgICAgICAgID0gJXMiICUgdWQudm9iKQorICAgICAgICBzZWxmLmRlYnVnKCJtb2R1bGUgICAgICAgICAgPSAlcyIgJSB1ZC5tb2R1bGUpCisgICAgICAgIHNlbGYuZGVidWcoImJhc2VjbWQgICAgICAgICA9ICVzIiAlIHVkLmJhc2VjbWQpCisgICAgICAgIHNlbGYuZGVidWcoImxhYmVsICAgICAgICAgICA9ICVzIiAlIHVkLmxhYmVsKQorICAgICAgICBzZWxmLmRlYnVnKCJjY2FzZWRpciAgICAgICAgPSAlcyIgJSB1ZC5jY2FzZWRpcikKKyAgICAgICAgc2VsZi5kZWJ1Zygidmlld2RpciAgICAgICAgID0gJXMiICUgdWQudmlld2RpcikKKyAgICAgICAgc2VsZi5kZWJ1Zygidmlld25hbWUgICAgICAgID0gJXMiICUgdWQudmlld25hbWUpCisgICAgICAgIHNlbGYuZGVidWcoImNvbmZpZ3NwZWNmaWxlICA9ICVzIiAlIHVkLmNvbmZpZ3NwZWNmaWxlKQorICAgICAgICBzZWxmLmRlYnVnKCJsb2NhbGZpbGUgICAgICAgPSAlcyIgJSB1ZC5sb2NhbGZpbGUpCisKKyAgICAgICAgdWQubG9jYWxmaWxlID0gb3MucGF0aC5qb2luKGRhdGEuZ2V0VmFyKCJETF9ESVIiLCBkLCBUcnVlKSwgdWQubG9jYWxmaWxlKQorCisgICAgZGVmIF9idWlsZF9jY2FzZV9jb21tYW5kKHNlbGYsIHVkLCBjb21tYW5kKToKKyAgICAgICAgIiIiCisgICAgICAgIEJ1aWxkIHVwIGEgY29tbWFuZGxpbmUgYmFzZWQgb24gdWQKKyAgICAgICAgY29tbWFuZCBpczogbWt2aWV3LCBzZXRjcywgcm12aWV3CisgICAgICAgICIiIgorICAgICAgICBvcHRpb25zID0gW10KKworICAgICAgICBpZiAicmNsZWFydG9vbCIgaW4gdWQuYmFzZWNtZDoKKyAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItc2VydmVyICVzIiAlIHVkLnNlcnZlcikKKworICAgICAgICBiYXNlY21kID0gIiVzICVzIiAlICh1ZC5iYXNlY21kLCBjb21tYW5kKQorCisgICAgICAgIGlmIGNvbW1hbmQgaXMgJ21rdmlldyc6CisgICAgICAgICAgICBpZiBub3QgInJjbGVhcnRvb2wiIGluIHVkLmJhc2VjbWQ6CisgICAgICAgICAgICAgICAgIyBDbGVhcnRvb2wgbmVlZHMgYSAtc25hcHNob3QgdmlldworICAgICAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItc25hcHNob3QiKQorICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQoIi10YWcgJXMiICUgdWQudmlld25hbWUpCisgICAgICAgICAgICBvcHRpb25zLmFwcGVuZCh1ZC52aWV3ZGlyKQorCisgICAgICAgIGVsaWYgY29tbWFuZCBpcyAncm12aWV3JzoKKyAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItZm9yY2UiKQorICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQoIiVzIiAlIHVkLnZpZXdkaXIpCisKKyAgICAgICAgZWxpZiBjb21tYW5kIGlzICdzZXRjcyc6CisgICAgICAgICAgICBvcHRpb25zLmFwcGVuZCgiLW92ZXJ3cml0ZSIpCisgICAgICAgICAgICBvcHRpb25zLmFwcGVuZCh1ZC5jb25maWdzcGVjZmlsZSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiSW52YWxpZCBjY2FzZSBjb21tYW5kICVzIiAlIGNvbW1hbmQpCisKKyAgICAgICAgY2Nhc2VjbWQgPSAiJXMgJXMiICUgKGJhc2VjbWQsICIgIi5qb2luKG9wdGlvbnMpKQorICAgICAgICBzZWxmLmRlYnVnKCJjY2FzZWNtZCA9ICVzIiAlIGNjYXNlY21kKQorICAgICAgICByZXR1cm4gY2Nhc2VjbWQKKworICAgIGRlZiBfd3JpdGVfY29uZmlnc3BlYyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgY29uZmlnIHNwZWMgZmlsZSAodWQuY29uZmlnc3BlY2ZpbGUpIGZvciBjY2FzZSB2aWV3CisgICAgICAgICIiIgorICAgICAgICBjb25maWdfc3BlYyA9ICIiCisgICAgICAgIGN1c3RvbV9jb25maWdfc3BlYyA9IGQuZ2V0VmFyKCJDQ0FTRV9DVVNUT01fQ09ORklHX1NQRUMiLCBkKQorICAgICAgICBpZiBjdXN0b21fY29uZmlnX3NwZWMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBjdXN0b21fY29uZmlnX3NwZWMuc3BsaXQoIlxcbiIpOgorICAgICAgICAgICAgICAgIGNvbmZpZ19zcGVjICs9IGxpbmUrIlxuIgorICAgICAgICAgICAgYmIud2FybigiQSBjdXN0b20gY29uZmlnIHNwZWMgaGFzIGJlZW4gc2V0LCBTUkNSRVYgaXMgb25seSByZWxldmFudCBmb3IgdGhlIHRhcmJhbGwgbmFtZS4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29uZmlnX3NwZWMgKz0gImVsZW1lbnQgKiBDSEVDS0VET1VUXG4iCisgICAgICAgICAgICBjb25maWdfc3BlYyArPSAiZWxlbWVudCAqICVzXG4iICUgdWQubGFiZWwKKyAgICAgICAgICAgIGNvbmZpZ19zcGVjICs9ICJsb2FkICVzJXNcbiIgJSAodWQudm9iLCB1ZC5tb2R1bGUpCisKKyAgICAgICAgbG9nZ2VyLmluZm8oIlVzaW5nIGNvbmZpZyBzcGVjOiBcbiVzIiAlIGNvbmZpZ19zcGVjKQorCisgICAgICAgIHdpdGggb3Blbih1ZC5jb25maWdzcGVjZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShjb25maWdfc3BlYykKKworICAgIGRlZiBfcmVtb3ZlX3ZpZXcoc2VsZiwgdWQsIGQpOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh1ZC52aWV3ZGlyKToKKyAgICAgICAgICAgIG9zLmNoZGlyKHVkLmNjYXNlZGlyKQorICAgICAgICAgICAgY21kID0gc2VsZi5fYnVpbGRfY2Nhc2VfY29tbWFuZCh1ZCwgJ3JtdmlldycpOworICAgICAgICAgICAgbG9nZ2VyLmluZm8oImNsZWFuaW5nIHVwIFtWT0I9JXMgbGFiZWw9JXMgdmlldz0lc10iLCB1ZC52b2IsIHVkLmxhYmVsLCB1ZC52aWV3bmFtZSkKKyAgICAgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBjbWQsIHVkLnVybCkKKyAgICAgICAgICAgIG91dHB1dCA9IHJ1bmZldGNoY21kKGNtZCwgZCkKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJybXZpZXcgb3V0cHV0OiAlcyIsIG91dHB1dCkKKworICAgIGRlZiBuZWVkX3VwZGF0ZShzZWxmLCB1ZCwgZCk6CisgICAgICAgIGlmICgiTEFURVNUIiBpbiB1ZC5sYWJlbCkgb3IgKHVkLmN1c3RvbXNwZWMgYW5kICJMQVRFU1QiIGluIHVkLmN1c3RvbXNwZWMpOgorICAgICAgICAgICAgdWQuaWRlbnRpZmllciArPSAiLSVzIiAlIGQuZ2V0VmFyKCJEQVRFVElNRSIsZCwgVHJ1ZSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHVkLmxvY2FscGF0aCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBzdXBwb3J0c19zcmNyZXYoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgc29ydGFibGVfcmV2aXNpb24oc2VsZiwgdWQsIGQsIG5hbWUpOgorICAgICAgICByZXR1cm4gRmFsc2UsIHVkLmlkZW50aWZpZXIKKworICAgIGRlZiBkb3dubG9hZChzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIkZldGNoIHVybCIiIgorCisgICAgICAgICMgTWFrZSBhIGZyZXNoIHZpZXcKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHVkLmNjYXNlZGlyKQorICAgICAgICBzZWxmLl93cml0ZV9jb25maWdzcGVjKHVkLCBkKQorICAgICAgICBjbWQgPSBzZWxmLl9idWlsZF9jY2FzZV9jb21tYW5kKHVkLCAnbWt2aWV3JykKKyAgICAgICAgbG9nZ2VyLmluZm8oImNyZWF0aW5nIHZpZXcgW1ZPQj0lcyBsYWJlbD0lcyB2aWV3PSVzXSIsIHVkLnZvYiwgdWQubGFiZWwsIHVkLnZpZXduYW1lKQorICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgY21kLCB1ZC51cmwpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKGNtZCwgZCkKKyAgICAgICAgZXhjZXB0IEZldGNoRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmICJDUkNMSTIwMDhFIiBpbiBlLm1zZzoKKyAgICAgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCIlc1xuJXNcbiIgJSAoZS5tc2csICJDYWxsIGByY2xlYXJ0b29sIGxvZ2luYCBpbiB5b3VyIGNvbnNvbGUgdG8gYXV0aGVudGljYXRlIHRvIHRoZSBjbGVhcmNhc2Ugc2VydmVyIGJlZm9yZSBydW5uaW5nIGJpdGJha2UuIikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIGUKKworICAgICAgICAjIFNldCBjb25maWdzcGVjOiBTZXR0aW5nIHRoZSBjb25maWdzcGVjIGVmZmVjdGl2ZWx5IGZldGNoZXMgdGhlIGZpbGVzIGFzIGRlZmluZWQgaW4gdGhlIGNvbmZpZ3NwZWMKKyAgICAgICAgb3MuY2hkaXIodWQudmlld2RpcikKKyAgICAgICAgY21kID0gc2VsZi5fYnVpbGRfY2Nhc2VfY29tbWFuZCh1ZCwgJ3NldGNzJyk7CisgICAgICAgIGxvZ2dlci5pbmZvKCJmZXRjaGluZyBkYXRhIFtWT0I9JXMgbGFiZWw9JXMgdmlldz0lc10iLCB1ZC52b2IsIHVkLmxhYmVsLCB1ZC52aWV3bmFtZSkKKyAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIGNtZCwgdWQudXJsKQorICAgICAgICBvdXRwdXQgPSBydW5mZXRjaGNtZChjbWQsIGQpCisgICAgICAgIGxvZ2dlci5pbmZvKCIlcyIsIG91dHB1dCkKKworICAgICAgICAjIENvcHkgdGhlIGNvbmZpZ3NwZWMgdG8gdGhlIHZpZXdkaXIgc28gd2UgaGF2ZSBpdCBpbiBvdXIgc291cmNlIHRhcmJhbGwgbGF0ZXIKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHVkLmNvbmZpZ3NwZWNmaWxlLCBvcy5wYXRoLmpvaW4odWQudmlld2RpciwgdWQuY3NuYW1lKSkKKworICAgICAgICAjIENsZWFuIGNsZWFyY2FzZSBtZXRhLWRhdGEgYmVmb3JlIHRhcgorCisgICAgICAgIHJ1bmZldGNoY21kKCd0YXIgLWN6ZiAiJXMiIC4nICUgKHVkLmxvY2FscGF0aCksIGQsIGNsZWFudXAgPSBbdWQubG9jYWxwYXRoXSkKKworICAgICAgICAjIENsZWFuIHVwIHNvIHdlIGNhbiBjcmVhdGUgYSBuZXcgdmlldyBuZXh0IHRpbWUKKyAgICAgICAgc2VsZi5jbGVhbih1ZCwgZCk7CisKKyAgICBkZWYgY2xlYW4oc2VsZiwgdWQsIGQpOgorICAgICAgICBzZWxmLl9yZW1vdmVfdmlldyh1ZCwgZCkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHVkLmNvbmZpZ3NwZWNmaWxlKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvY3ZzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvY3ZzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyN2Q5NmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9jdnMucHkKQEAgLTAsMCArMSwxNzEgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgJ0ZldGNoJyBpbXBsZW1lbnRhdGlvbnMKKworQ2xhc3NlcyBmb3Igb2J0YWluaW5nIHVwc3RyZWFtIHNvdXJjZXMgZm9yIHRoZQorQml0QmFrZSBidWlsZCB0b29scy4KKworIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjQmFzZWQgb24gZnVuY3Rpb25zIGZyb20gdGhlIGJhc2UgYmIgbW9kdWxlLCBDb3B5cmlnaHQgMjAwMyBIb2xnZXIgU2NodXJpZworIworCitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYmIKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBGZXRjaE1ldGhvZCwgRmV0Y2hFcnJvciwgTWlzc2luZ1BhcmFtZXRlckVycm9yLCBsb2dnZXIKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAorCitjbGFzcyBDdnMoRmV0Y2hNZXRob2QpOgorICAgICIiIgorICAgIENsYXNzIHRvIGZldGNoIGEgbW9kdWxlIG9yIG1vZHVsZXMgZnJvbSBjdnMgcmVwb3NpdG9yaWVzCisgICAgIiIiCisgICAgZGVmIHN1cHBvcnRzKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRvIHNlZSBpZiBhIGdpdmVuIHVybCBjYW4gYmUgZmV0Y2hlZCB3aXRoIGN2cy4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiB1ZC50eXBlIGluIFsnY3ZzJ10KKworICAgIGRlZiB1cmxkYXRhX2luaXQoc2VsZiwgdWQsIGQpOgorICAgICAgICBpZiBub3QgIm1vZHVsZSIgaW4gdWQucGFybToKKyAgICAgICAgICAgIHJhaXNlIE1pc3NpbmdQYXJhbWV0ZXJFcnJvcigibW9kdWxlIiwgdWQudXJsKQorICAgICAgICB1ZC5tb2R1bGUgPSB1ZC5wYXJtWyJtb2R1bGUiXQorCisgICAgICAgIHVkLnRhZyA9IHVkLnBhcm0uZ2V0KCd0YWcnLCAiIikKKworICAgICAgICAjIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGRhdGUgaW4gY2VydGFpbiBjYXNlcworICAgICAgICBpZiAnZGF0ZScgaW4gdWQucGFybToKKyAgICAgICAgICAgIHVkLmRhdGUgPSB1ZC5wYXJtWydkYXRlJ10KKyAgICAgICAgZWxpZiB1ZC50YWc6CisgICAgICAgICAgICB1ZC5kYXRlID0gIiIKKworICAgICAgICBub3JlY3Vyc2UgPSAnJworICAgICAgICBpZiAnbm9yZWN1cnNlJyBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgbm9yZWN1cnNlID0gJ19ub3JlY3Vyc2UnCisKKyAgICAgICAgZnVsbHBhdGggPSAnJworICAgICAgICBpZiAnZnVsbHBhdGgnIGluIHVkLnBhcm06CisgICAgICAgICAgICBmdWxscGF0aCA9ICdfZnVsbHBhdGgnCisKKyAgICAgICAgdWQubG9jYWxmaWxlID0gYmIuZGF0YS5leHBhbmQoJyVzXyVzXyVzXyVzJXMlcy50YXIuZ3onICUgKHVkLm1vZHVsZS5yZXBsYWNlKCcvJywgJy4nKSwgdWQuaG9zdCwgdWQudGFnLCB1ZC5kYXRlLCBub3JlY3Vyc2UsIGZ1bGxwYXRoKSwgZCkKKworICAgIGRlZiBuZWVkX3VwZGF0ZShzZWxmLCB1ZCwgZCk6CisgICAgICAgIGlmICh1ZC5kYXRlID09ICJub3ciKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh1ZC5sb2NhbHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgZG93bmxvYWQoc2VsZiwgdWQsIGQpOgorCisgICAgICAgIG1ldGhvZCA9IHVkLnBhcm0uZ2V0KCdtZXRob2QnLCAncHNlcnZlcicpCisgICAgICAgIGxvY2FsZGlyID0gdWQucGFybS5nZXQoJ2xvY2FsZGlyJywgdWQubW9kdWxlKQorICAgICAgICBjdnNfcG9ydCA9IHVkLnBhcm0uZ2V0KCdwb3J0JywgJycpCisKKyAgICAgICAgY3ZzX3JzaCA9IE5vbmUKKyAgICAgICAgaWYgbWV0aG9kID09ICJleHQiOgorICAgICAgICAgICAgaWYgInJzaCIgaW4gdWQucGFybToKKyAgICAgICAgICAgICAgICBjdnNfcnNoID0gdWQucGFybVsicnNoIl0KKworICAgICAgICBpZiBtZXRob2QgPT0gImRpciI6CisgICAgICAgICAgICBjdnNyb290ID0gdWQucGF0aAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY3Zzcm9vdCA9ICI6IiArIG1ldGhvZAorICAgICAgICAgICAgY3ZzcHJveHlob3N0ID0gZC5nZXRWYXIoJ0NWU19QUk9YWV9IT1NUJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGN2c3Byb3h5aG9zdDoKKyAgICAgICAgICAgICAgICBjdnNyb290ICs9ICI7cHJveHk9IiArIGN2c3Byb3h5aG9zdAorICAgICAgICAgICAgY3ZzcHJveHlwb3J0ID0gZC5nZXRWYXIoJ0NWU19QUk9YWV9QT1JUJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGN2c3Byb3h5cG9ydDoKKyAgICAgICAgICAgICAgICBjdnNyb290ICs9ICI7cHJveHlwb3J0PSIgKyBjdnNwcm94eXBvcnQKKyAgICAgICAgICAgIGN2c3Jvb3QgKz0gIjoiICsgdWQudXNlcgorICAgICAgICAgICAgaWYgdWQucHN3ZDoKKyAgICAgICAgICAgICAgICBjdnNyb290ICs9ICI6IiArIHVkLnBzd2QKKyAgICAgICAgICAgIGN2c3Jvb3QgKz0gIkAiICsgdWQuaG9zdCArICI6IiArIGN2c19wb3J0ICsgdWQucGF0aAorCisgICAgICAgIG9wdGlvbnMgPSBbXQorICAgICAgICBpZiAnbm9yZWN1cnNlJyBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQoIi1sIikKKyAgICAgICAgaWYgdWQuZGF0ZToKKyAgICAgICAgICAgICMgdHJlYXQgWVlZWU1NRERISE1NIHNwZWNpYWxseSBmb3IgQ1ZTCisgICAgICAgICAgICBpZiBsZW4odWQuZGF0ZSkgPT0gMTI6CisgICAgICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQoIi1EIFwiJXMgJXM6JXMgVVRDXCIiICUgKHVkLmRhdGVbMDo4XSwgdWQuZGF0ZVs4OjEwXSwgdWQuZGF0ZVsxMDoxMl0pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvcHRpb25zLmFwcGVuZCgiLUQgXCIlcyBVVENcIiIgJSB1ZC5kYXRlKQorICAgICAgICBpZiB1ZC50YWc6CisgICAgICAgICAgICBvcHRpb25zLmFwcGVuZCgiLXIgJXMiICUgdWQudGFnKQorCisgICAgICAgIGN2c2Jhc2VjbWQgPSBkLmdldFZhcigiRkVUQ0hDTURfY3ZzIiwgVHJ1ZSkKKyAgICAgICAgY3ZzY21kID0gY3ZzYmFzZWNtZCArICIgJy1kIiArIGN2c3Jvb3QgKyAiJyBjbyAiICsgIiAiLmpvaW4ob3B0aW9ucykgKyAiICIgKyB1ZC5tb2R1bGUKKyAgICAgICAgY3ZzdXBkYXRlY21kID0gY3ZzYmFzZWNtZCArICIgJy1kIiArIGN2c3Jvb3QgKyAiJyB1cGRhdGUgLWQgLVAgIiArICIgIi5qb2luKG9wdGlvbnMpCisKKyAgICAgICAgaWYgY3ZzX3JzaDoKKyAgICAgICAgICAgIGN2c2NtZCA9ICJDVlNfUlNIPVwiJXNcIiAlcyIgJSAoY3ZzX3JzaCwgY3ZzY21kKQorICAgICAgICAgICAgY3ZzdXBkYXRlY21kID0gIkNWU19SU0g9XCIlc1wiICVzIiAlIChjdnNfcnNoLCBjdnN1cGRhdGVjbWQpCisKKyAgICAgICAgIyBjcmVhdGUgbW9kdWxlIGRpcmVjdG9yeQorICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkZldGNoOiBjaGVja2luZyBmb3IgbW9kdWxlIGRpcmVjdG9yeSIpCisgICAgICAgIHBrZyA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgIHBrZ2RpciA9IG9zLnBhdGguam9pbihkLmdldFZhcignQ1ZTRElSJywgVHJ1ZSksIHBrZykKKyAgICAgICAgbW9kZGlyID0gb3MucGF0aC5qb2luKHBrZ2RpciwgbG9jYWxkaXIpCisgICAgICAgIGlmIG9zLmFjY2Vzcyhvcy5wYXRoLmpvaW4obW9kZGlyLCAnQ1ZTJyksIG9zLlJfT0spOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlVwZGF0ZSAiICsgdWQudXJsKQorICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIGN2c3VwZGF0ZWNtZCwgdWQudXJsKQorICAgICAgICAgICAgIyB1cGRhdGUgc291cmNlcyB0aGVyZQorICAgICAgICAgICAgb3MuY2hkaXIobW9kZGlyKQorICAgICAgICAgICAgY21kID0gY3ZzdXBkYXRlY21kCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiRmV0Y2ggIiArIHVkLnVybCkKKyAgICAgICAgICAgICMgY2hlY2sgb3V0IHNvdXJjZXMgdGhlcmUKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihwa2dkaXIpCisgICAgICAgICAgICBvcy5jaGRpcihwa2dkaXIpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJ1bm5pbmcgJXMiLCBjdnNjbWQpCisgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgY3ZzY21kLCB1ZC51cmwpCisgICAgICAgICAgICBjbWQgPSBjdnNjbWQKKworICAgICAgICBydW5mZXRjaGNtZChjbWQsIGQsIGNsZWFudXAgPSBbbW9kZGlyXSkKKworICAgICAgICBpZiBub3Qgb3MuYWNjZXNzKG1vZGRpciwgb3MuUl9PSyk6CisgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJEaXJlY3RvcnkgJXMgd2FzIG5vdCByZWFkYWJsZSBkZXNwaXRlIHN1Y2Vzc2Z1bCBmZXRjaD8hIiAlIG1vZGRpciwgdWQudXJsKQorCisgICAgICAgIHNjbWRhdGEgPSB1ZC5wYXJtLmdldCgic2NtZGF0YSIsICIiKQorICAgICAgICBpZiBzY21kYXRhID09ICJrZWVwIjoKKyAgICAgICAgICAgIHRhcl9mbGFncyA9ICIiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0YXJfZmxhZ3MgPSAiLS1leGNsdWRlICdDVlMnIgorCisgICAgICAgICMgdGFyIHRoZW0gdXAgdG8gYSBkZWZpbmVkIGZpbGVuYW1lCisgICAgICAgIGlmICdmdWxscGF0aCcgaW4gdWQucGFybToKKyAgICAgICAgICAgIG9zLmNoZGlyKHBrZ2RpcikKKyAgICAgICAgICAgIGNtZCA9ICJ0YXIgJXMgLWN6ZiAlcyAlcyIgJSAodGFyX2ZsYWdzLCB1ZC5sb2NhbHBhdGgsIGxvY2FsZGlyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MuY2hkaXIobW9kZGlyKQorICAgICAgICAgICAgb3MuY2hkaXIoJy4uJykKKyAgICAgICAgICAgIGNtZCA9ICJ0YXIgJXMgLWN6ZiAlcyAlcyIgJSAodGFyX2ZsYWdzLCB1ZC5sb2NhbHBhdGgsIG9zLnBhdGguYmFzZW5hbWUobW9kZGlyKSkKKworICAgICAgICBydW5mZXRjaGNtZChjbWQsIGQsIGNsZWFudXAgPSBbdWQubG9jYWxwYXRoXSkKKworICAgIGRlZiBjbGVhbihzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIiBDbGVhbiBDVlMgRmlsZXMgYW5kIHRhcmJhbGxzICIiIgorCisgICAgICAgIHBrZyA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgIHBrZ2RpciA9IG9zLnBhdGguam9pbihkLmdldFZhcigiQ1ZTRElSIiwgVHJ1ZSksIHBrZykKKworICAgICAgICBiYi51dGlscy5yZW1vdmUocGtnZGlyLCBUcnVlKQorICAgICAgICBiYi51dGlscy5yZW1vdmUodWQubG9jYWxwYXRoKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9naXQucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9naXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA2NThmZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2dpdC5weQpAQCAtMCwwICsxLDQ0NyBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0QmFrZSAnRmV0Y2gnIGdpdCBpbXBsZW1lbnRhdGlvbgorCitnaXQgZmV0Y2hlciBzdXBwb3J0IHRoZSBTUkNfVVJJIHdpdGggZm9ybWF0IG9mOgorU1JDX1VSSSA9ICJnaXQ6Ly9zb21lLmhvc3Qvc29tZXBhdGg7T3B0aW9uQT14eHg7T3B0aW9uQj14eHg7Li4uIgorCitTdXBwb3J0ZWQgU1JDX1VSSSBvcHRpb25zIGFyZToKKworLSBicmFuY2gKKyAgIFRoZSBnaXQgYnJhbmNoIHRvIHJldHJpZXZlIGZyb20uIFRoZSBkZWZhdWx0IGlzICJtYXN0ZXIiCisKKyAgIFRoaXMgb3B0aW9uIGFsc28gc3VwcG9ydHMgbXVsdGlwbGUgYnJhbmNoIGZldGNoaW5nLCB3aXRoIGJyYW5jaGVzCisgICBzZXBhcmF0ZWQgYnkgY29tbWFzLiAgSW4gbXVsdGlwbGUgYnJhbmNoZXMgY2FzZSwgdGhlIG5hbWUgb3B0aW9uCisgICBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIG5hbWVzIHRvIG1hdGNoIHRoZSBicmFuY2hlcywgd2hpY2ggaXMKKyAgIHVzZWQgdG8gc3BlY2lmeSB0aGUgU1JDX1JFViBmb3IgdGhlIGJyYW5jaAorICAgZS5nOgorICAgU1JDX1VSST0iZ2l0Oi8vc29tZS5ob3N0L3NvbWVwYXRoO2JyYW5jaD1icmFuY2hYLGJyYW5jaFk7bmFtZT1uYW1lWCxuYW1lWSIKKyAgIFNSQ1JFVl9uYW1lWCA9ICJ4eHh4eHh4eHh4eHh4eHh4eHh4eCIKKyAgIFNSQ1JFVl9uYW1lWSA9ICJZWVlZWVlZWVlZWVlZWVlZWVlZWSIKKworLSB0YWcKKyAgICBUaGUgZ2l0IHRhZyB0byByZXRyaWV2ZS4gVGhlIGRlZmF1bHQgaXMgIm1hc3RlciIKKworLSBwcm90b2NvbAorICAgVGhlIG1ldGhvZCB0byB1c2UgdG8gYWNjZXNzIHRoZSByZXBvc2l0b3J5LiBDb21tb24gb3B0aW9ucyBhcmUgImdpdCIsCisgICAiaHR0cCIsICJodHRwcyIsICJmaWxlIiwgInNzaCIgYW5kICJyc3luYyIuIFRoZSBkZWZhdWx0IGlzICJnaXQiLgorCistIHJlYmFzZWFibGUKKyAgIHJlYmFzZWFibGUgaW5kaWNhdGVzIHRoYXQgdGhlIHVwc3RyZWFtIGdpdCByZXBvIG1heSByZWJhc2UgaW4gdGhlIGZ1dHVyZSwKKyAgIGFuZCBjdXJyZW50IHJldmlzaW9uIG1heSBkaXNhcHBlYXIgZnJvbSB1cHN0cmVhbSByZXBvLiBUaGlzIG9wdGlvbiB3aWxsCisgICByZW1pbmQgZmV0Y2hlciB0byBwcmVzZXJ2ZSBsb2NhbCBjYWNoZSBjYXJlZnVsbHkgZm9yIGZ1dHVyZSB1c2UuCisgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAiMCIsIHNldCByZWJhc2VhYmxlPTEgZm9yIHJlYmFzZWFibGUgZ2l0IHJlcG8uCisKKy0gbm9jaGVja291dAorICAgRG9uJ3QgY2hlY2tvdXQgc291cmNlIGNvZGUgd2hlbiB1bnBhY2tpbmcuIHNldCB0aGlzIG9wdGlvbiBmb3IgdGhlIHJlY2lwZQorICAgd2hvIGhhcyBpdHMgb3duIHJvdXRpbmUgdG8gY2hlY2tvdXQgY29kZS4KKyAgIFRoZSBkZWZhdWx0IGlzICIwIiwgc2V0IG5vY2hlY2tvdXQ9MSBpZiBuZWVkZWQuCisKKy0gYmFyZWNsb25lCisgICBDcmVhdGUgYSBiYXJlIGNsb25lIG9mIHRoZSBzb3VyY2UgY29kZSBhbmQgZG9uJ3QgY2hlY2tvdXQgdGhlIHNvdXJjZSBjb2RlCisgICB3aGVuIHVucGFja2luZy4gU2V0IHRoaXMgb3B0aW9uIGZvciB0aGUgcmVjaXBlIHdobyBoYXMgaXRzIG93biByb3V0aW5lIHRvCisgICBjaGVja291dCBjb2RlIGFuZCB0cmFja2luZyBicmFuY2ggcmVxdWlyZW1lbnRzLgorICAgVGhlIGRlZmF1bHQgaXMgIjAiLCBzZXQgYmFyZWNsb25lPTEgaWYgbmVlZGVkLgorCistIG5vYnJhbmNoCisgICBEb24ndCBjaGVjayB0aGUgU0hBIHZhbGlkYXRpb24gZm9yIGJyYW5jaC4gc2V0IHRoaXMgb3B0aW9uIGZvciB0aGUgcmVjaXBlCisgICByZWZlcnJpbmcgdG8gY29tbWl0IHdoaWNoIGlzIHZhbGlkIGluIHRhZyBpbnN0ZWFkIG9mIGJyYW5jaC4KKyAgIFRoZSBkZWZhdWx0IGlzICIwIiwgc2V0IG5vYnJhbmNoPTEgaWYgbmVlZGVkLgorCisiIiIKKworI0NvcHlyaWdodCAoQykgMjAwNSBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBiYgorZnJvbSAgIGJiICAgIGltcG9ydCBkYXRhCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBGZXRjaE1ldGhvZAorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgcnVuZmV0Y2hjbWQKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IGxvZ2dlcgorCitjbGFzcyBHaXQoRmV0Y2hNZXRob2QpOgorICAgICIiIkNsYXNzIHRvIGZldGNoIGEgbW9kdWxlIG9yIG1vZHVsZXMgZnJvbSBnaXQgcmVwb3NpdG9yaWVzIiIiCisgICAgZGVmIGluaXQoc2VsZiwgZCk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0byBzZWUgaWYgYSBnaXZlbiB1cmwgY2FuIGJlIGZldGNoZWQgd2l0aCBnaXQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gdWQudHlwZSBpbiBbJ2dpdCddCisKKyAgICBkZWYgc3VwcG9ydHNfY2hlY2tzdW0oc2VsZiwgdXJsZGF0YSk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHVybGRhdGFfaW5pdChzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBpbml0IGdpdCBzcGVjaWZpYyB2YXJpYWJsZSB3aXRoaW4gdXJsIGRhdGEKKyAgICAgICAgc28gdGhhdCB0aGUgZ2l0IG1ldGhvZCBsaWtlIGxhdGVzdF9yZXZpc2lvbigpIGNhbiB3b3JrCisgICAgICAgICIiIgorICAgICAgICBpZiAncHJvdG9jb2wnIGluIHVkLnBhcm06CisgICAgICAgICAgICB1ZC5wcm90byA9IHVkLnBhcm1bJ3Byb3RvY29sJ10KKyAgICAgICAgZWxpZiBub3QgdWQuaG9zdDoKKyAgICAgICAgICAgIHVkLnByb3RvID0gJ2ZpbGUnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1ZC5wcm90byA9ICJnaXQiCisKKyAgICAgICAgaWYgbm90IHVkLnByb3RvIGluICgnZ2l0JywgJ2ZpbGUnLCAnc3NoJywgJ2h0dHAnLCAnaHR0cHMnLCAncnN5bmMnKToKKyAgICAgICAgICAgIHJhaXNlIGJiLmZldGNoMi5QYXJhbWV0ZXJFcnJvcigiSW52YWxpZCBwcm90b2NvbCB0eXBlIiwgdWQudXJsKQorCisgICAgICAgIHVkLm5vY2hlY2tvdXQgPSB1ZC5wYXJtLmdldCgibm9jaGVja291dCIsIjAiKSA9PSAiMSIKKworICAgICAgICB1ZC5yZWJhc2VhYmxlID0gdWQucGFybS5nZXQoInJlYmFzZWFibGUiLCIwIikgPT0gIjEiCisKKyAgICAgICAgdWQubm9icmFuY2ggPSB1ZC5wYXJtLmdldCgibm9icmFuY2giLCIwIikgPT0gIjEiCisKKyAgICAgICAgIyBiYXJlY2xvbmUgaW1wbGllcyBub2NoZWNrb3V0CisgICAgICAgIHVkLmJhcmVjbG9uZSA9IHVkLnBhcm0uZ2V0KCJiYXJlY2xvbmUiLCIwIikgPT0gIjEiCisgICAgICAgIGlmIHVkLmJhcmVjbG9uZToKKyAgICAgICAgICAgIHVkLm5vY2hlY2tvdXQgPSAxCisgIAorICAgICAgICB1ZC51bnJlc29sdmVkcmV2ID0ge30KKyAgICAgICAgYnJhbmNoZXMgPSB1ZC5wYXJtLmdldCgiYnJhbmNoIiwgIm1hc3RlciIpLnNwbGl0KCcsJykKKyAgICAgICAgaWYgbGVuKGJyYW5jaGVzKSAhPSBsZW4odWQubmFtZXMpOgorICAgICAgICAgICAgcmFpc2UgYmIuZmV0Y2gyLlBhcmFtZXRlckVycm9yKCJUaGUgbnVtYmVyIG9mIG5hbWUgYW5kIGJyYW5jaCBwYXJhbWV0ZXJzIGlzIG5vdCBiYWxhbmNlZCIsIHVkLnVybCkKKyAgICAgICAgdWQuYnJhbmNoZXMgPSB7fQorICAgICAgICBmb3IgbmFtZSBpbiB1ZC5uYW1lczoKKyAgICAgICAgICAgIGJyYW5jaCA9IGJyYW5jaGVzW3VkLm5hbWVzLmluZGV4KG5hbWUpXQorICAgICAgICAgICAgdWQuYnJhbmNoZXNbbmFtZV0gPSBicmFuY2gKKyAgICAgICAgICAgIHVkLnVucmVzb2x2ZWRyZXZbbmFtZV0gPSBicmFuY2gKKworICAgICAgICB1ZC5iYXNlY21kID0gZGF0YS5nZXRWYXIoIkZFVENIQ01EX2dpdCIsIGQsIFRydWUpIG9yICJnaXQgLWMgY29yZS5mc3luY29iamVjdGZpbGVzPTAiCisKKyAgICAgICAgdWQud3JpdGVfdGFyYmFsbHMgPSAoKGRhdGEuZ2V0VmFyKCJCQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMiLCBkLCBUcnVlKSBvciAiMCIpICE9ICIwIikgb3IgdWQucmViYXNlYWJsZQorCisgICAgICAgIHVkLnNldHVwX3Jldmlzb25zKGQpCisKKyAgICAgICAgZm9yIG5hbWUgaW4gdWQubmFtZXM6CisgICAgICAgICAgICAjIEVuc3VyZSBhbnl0aGluZyB0aGF0IGRvZXNuJ3QgbG9vayBsaWtlIGEgc2hhMjU2IGNoZWNrc3VtL3JldmlzaW9uIGlzIHRyYW5zbGF0ZWQgaW50byBvbmUKKyAgICAgICAgICAgIGlmIG5vdCB1ZC5yZXZpc2lvbnNbbmFtZV0gb3IgbGVuKHVkLnJldmlzaW9uc1tuYW1lXSkgIT0gNDAgIG9yIChGYWxzZSBpbiBbYyBpbiAiYWJjZGVmMDEyMzQ1Njc4OSIgZm9yIGMgaW4gdWQucmV2aXNpb25zW25hbWVdXSk6CisgICAgICAgICAgICAgICAgaWYgdWQucmV2aXNpb25zW25hbWVdOgorICAgICAgICAgICAgICAgICAgICB1ZC51bnJlc29sdmVkcmV2W25hbWVdID0gdWQucmV2aXNpb25zW25hbWVdCisgICAgICAgICAgICAgICAgdWQucmV2aXNpb25zW25hbWVdID0gc2VsZi5sYXRlc3RfcmV2aXNpb24odWQsIGQsIG5hbWUpCisKKyAgICAgICAgZ2l0c3JjbmFtZSA9ICclcyVzJyAlICh1ZC5ob3N0LnJlcGxhY2UoJzonLCAnLicpLCB1ZC5wYXRoLnJlcGxhY2UoJy8nLCAnLicpLnJlcGxhY2UoJyonLCAnLicpKQorICAgICAgICBpZiBnaXRzcmNuYW1lLnN0YXJ0c3dpdGgoJy4nKToKKyAgICAgICAgICAgIGdpdHNyY25hbWUgPSBnaXRzcmNuYW1lWzE6XQorCisgICAgICAgICMgZm9yIHJlYmFzZWFibGUgZ2l0IHJlcG8sIGl0IGlzIG5lY2Vzc2FyeSB0byBrZWVwIG1pcnJvciB0YXIgYmFsbAorICAgICAgICAjIHBlciByZXZpc2lvbiwgc28gdGhhdCBldmVuIHRoZSByZXZpc2lvbiBkaXNhcHBlYXJzIGZyb20gdGhlCisgICAgICAgICMgdXBzdHJlYW0gcmVwbyBpbiB0aGUgZnV0dXJlLCB0aGUgbWlycm9yIHdpbGwgcmVtYWluIGludGFjdCBhbmQgc3RpbGwKKyAgICAgICAgIyBjb250YWlucyB0aGUgcmV2aXNpb24KKyAgICAgICAgaWYgdWQucmViYXNlYWJsZToKKyAgICAgICAgICAgIGZvciBuYW1lIGluIHVkLm5hbWVzOgorICAgICAgICAgICAgICAgIGdpdHNyY25hbWUgPSBnaXRzcmNuYW1lICsgJ18nICsgdWQucmV2aXNpb25zW25hbWVdCisgICAgICAgIHVkLm1pcnJvcnRhcmJhbGwgPSAnZ2l0Ml8lcy50YXIuZ3onICUgKGdpdHNyY25hbWUpCisgICAgICAgIHVkLmZ1bGxtaXJyb3IgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoIkRMX0RJUiIsIFRydWUpLCB1ZC5taXJyb3J0YXJiYWxsKQorICAgICAgICBnaXRkaXIgPSBkLmdldFZhcigiR0lURElSIiwgVHJ1ZSkgb3IgKGQuZ2V0VmFyKCJETF9ESVIiLCBUcnVlKSArICIvZ2l0Mi8iKQorICAgICAgICB1ZC5jbG9uZWRpciA9IG9zLnBhdGguam9pbihnaXRkaXIsIGdpdHNyY25hbWUpCisKKyAgICAgICAgdWQubG9jYWxmaWxlID0gdWQuY2xvbmVkaXIKKworICAgIGRlZiBsb2NhbHBhdGgoc2VsZiwgdWQsIGQpOgorICAgICAgICByZXR1cm4gdWQuY2xvbmVkaXIKKworICAgIGRlZiBuZWVkX3VwZGF0ZShzZWxmLCB1ZCwgZCk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh1ZC5jbG9uZWRpcik6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBvcy5jaGRpcih1ZC5jbG9uZWRpcikKKyAgICAgICAgZm9yIG5hbWUgaW4gdWQubmFtZXM6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY29udGFpbnNfcmVmKHVkLCBkLCBuYW1lKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiB1ZC53cml0ZV90YXJiYWxscyBhbmQgbm90IG9zLnBhdGguZXhpc3RzKHVkLmZ1bGxtaXJyb3IpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgdHJ5X3ByZW1pcnJvcihzZWxmLCB1ZCwgZCk6CisgICAgICAgICMgSWYgd2UgZG9uJ3QgZG8gdGhpcywgdXBkYXRpbmcgYW4gZXhpc3RpbmcgY2hlY2tvdXQgd2l0aCBvbmx5IHByZW1pcnJvcnMKKyAgICAgICAgIyBpcyBub3QgcG9zc2libGUKKyAgICAgICAgaWYgZC5nZXRWYXIoIkJCX0ZFVENIX1BSRU1JUlJPUk9OTFkiLCBUcnVlKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHVkLmNsb25lZGlyKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiRmV0Y2ggdXJsIiIiCisKKyAgICAgICAgdWQucmVwb2NoYW5nZWQgPSBub3Qgb3MucGF0aC5leGlzdHModWQuZnVsbG1pcnJvcikKKworICAgICAgICAjIElmIHRoZSBjaGVja291dCBkb2Vzbid0IGV4aXN0IGFuZCB0aGUgbWlycm9yIHRhcmJhbGwgZG9lcywgZXh0cmFjdCBpdAorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModWQuY2xvbmVkaXIpIGFuZCBvcy5wYXRoLmV4aXN0cyh1ZC5mdWxsbWlycm9yKToKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih1ZC5jbG9uZWRpcikKKyAgICAgICAgICAgIG9zLmNoZGlyKHVkLmNsb25lZGlyKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAteHpmICVzIiAlICh1ZC5mdWxsbWlycm9yKSwgZCkKKworICAgICAgICByZXBvdXJsID0gc2VsZi5fZ2V0X3JlcG9fdXJsKHVkKQorCisgICAgICAgICMgSWYgdGhlIHJlcG8gc3RpbGwgZG9lc24ndCBleGlzdCwgZmFsbGJhY2sgdG8gY2xvbmluZyBpdAorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModWQuY2xvbmVkaXIpOgorICAgICAgICAgICAgIyBXZSBkbyB0aGlzIHNpbmNlIGdpdCB3aWxsIHVzZSBhICItbCIgb3B0aW9uIGF1dG9tYXRpY2FsbHkgZm9yIGxvY2FsIHVybHMgd2hlcmUgcG9zc2libGUKKyAgICAgICAgICAgIGlmIHJlcG91cmwuc3RhcnRzd2l0aCgiZmlsZTovLyIpOgorICAgICAgICAgICAgICAgIHJlcG91cmwgPSByZXBvdXJsWzc6XQorICAgICAgICAgICAgY2xvbmVfY21kID0gIiVzIGNsb25lIC0tYmFyZSAtLW1pcnJvciAlcyAlcyIgJSAodWQuYmFzZWNtZCwgcmVwb3VybCwgdWQuY2xvbmVkaXIpCisgICAgICAgICAgICBpZiB1ZC5wcm90by5sb3dlcigpICE9ICdmaWxlJzoKKyAgICAgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgY2xvbmVfY21kKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoY2xvbmVfY21kLCBkKQorCisgICAgICAgIG9zLmNoZGlyKHVkLmNsb25lZGlyKQorICAgICAgICAjIFVwZGF0ZSB0aGUgY2hlY2tvdXQgaWYgbmVlZGVkCisgICAgICAgIG5lZWR1cGRhdGUgPSBGYWxzZQorICAgICAgICBmb3IgbmFtZSBpbiB1ZC5uYW1lczoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jb250YWluc19yZWYodWQsIGQsIG5hbWUpOgorICAgICAgICAgICAgICAgIG5lZWR1cGRhdGUgPSBUcnVlCisgICAgICAgIGlmIG5lZWR1cGRhdGU6CisgICAgICAgICAgICB0cnk6IAorICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyByZW1vdGUgcm0gb3JpZ2luIiAlIHVkLmJhc2VjbWQsIGQpIAorICAgICAgICAgICAgZXhjZXB0IGJiLmZldGNoMi5GZXRjaEVycm9yOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiTm8gT3JpZ2luIikKKworICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIHJlbW90ZSBhZGQgLS1taXJyb3I9ZmV0Y2ggb3JpZ2luICVzIiAlICh1ZC5iYXNlY21kLCByZXBvdXJsKSwgZCkKKyAgICAgICAgICAgIGZldGNoX2NtZCA9ICIlcyBmZXRjaCAtZiAtLXBydW5lICVzIHJlZnMvKjpyZWZzLyoiICUgKHVkLmJhc2VjbWQsIHJlcG91cmwpCisgICAgICAgICAgICBpZiB1ZC5wcm90by5sb3dlcigpICE9ICdmaWxlJzoKKyAgICAgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgZmV0Y2hfY21kLCB1ZC51cmwpCisgICAgICAgICAgICBydW5mZXRjaGNtZChmZXRjaF9jbWQsIGQpCisgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgcHJ1bmUtcGFja2VkIiAlIHVkLmJhc2VjbWQsIGQpCisgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgcGFjay1yZWR1bmRhbnQgLS1hbGwgfCB4YXJncyAtciBybSIgJSB1ZC5iYXNlY21kLCBkKQorICAgICAgICAgICAgdWQucmVwb2NoYW5nZWQgPSBUcnVlCisgICAgICAgIG9zLmNoZGlyKHVkLmNsb25lZGlyKQorICAgICAgICBmb3IgbmFtZSBpbiB1ZC5uYW1lczoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jb250YWluc19yZWYodWQsIGQsIG5hbWUpOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmZldGNoMi5GZXRjaEVycm9yKCJVbmFibGUgdG8gZmluZCByZXZpc2lvbiAlcyBpbiBicmFuY2ggJXMgZXZlbiBmcm9tIHVwc3RyZWFtIiAlICh1ZC5yZXZpc2lvbnNbbmFtZV0sIHVkLmJyYW5jaGVzW25hbWVdKSkKKworICAgIGRlZiBidWlsZF9taXJyb3JfZGF0YShzZWxmLCB1ZCwgZCk6CisgICAgICAgICMgR2VuZXJhdGUgYSBtaXJyb3IgdGFyYmFsbCBpZiBuZWVkZWQKKyAgICAgICAgaWYgdWQud3JpdGVfdGFyYmFsbHMgYW5kICh1ZC5yZXBvY2hhbmdlZCBvciBub3Qgb3MucGF0aC5leGlzdHModWQuZnVsbG1pcnJvcikpOgorICAgICAgICAgICAgIyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBzeW1saW5rIHBvaW50cyB0byByZWFkLW9ubHkgZmlsZXN5c3RlbSB3aXRoIFBSRU1JUlJPUgorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsodWQuZnVsbG1pcnJvcik6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKHVkLmZ1bGxtaXJyb3IpCisKKyAgICAgICAgICAgIG9zLmNoZGlyKHVkLmNsb25lZGlyKQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkNyZWF0aW5nIHRhcmJhbGwgb2YgZ2l0IHJlcG9zaXRvcnkiKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAtY3pmICVzICVzIiAlICh1ZC5mdWxsbWlycm9yLCBvcy5wYXRoLmpvaW4oIi4iKSApLCBkKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoInRvdWNoICVzLmRvbmUiICUgKHVkLmZ1bGxtaXJyb3IpLCBkKQorCisgICAgZGVmIHVucGFjayhzZWxmLCB1ZCwgZGVzdGRpciwgZCk6CisgICAgICAgICIiIiB1bnBhY2sgdGhlIGRvd25sb2FkZWQgc3JjIHRvIGRlc3RkaXIiIiIKKworICAgICAgICBzdWJkaXIgPSB1ZC5wYXJtLmdldCgic3VicGF0aCIsICIiKQorICAgICAgICBpZiBzdWJkaXIgIT0gIiI6CisgICAgICAgICAgICByZWFkcGF0aHNwZWMgPSAiOiVzIiAlIChzdWJkaXIpCisgICAgICAgICAgICBkZWZfZGVzdHN1ZmZpeCA9ICIlcy8iICUgb3MucGF0aC5iYXNlbmFtZShzdWJkaXIucnN0cmlwKCcvJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZWFkcGF0aHNwZWMgPSAiIgorICAgICAgICAgICAgZGVmX2Rlc3RzdWZmaXggPSAiZ2l0LyIKKworICAgICAgICBkZXN0c3VmZml4ID0gdWQucGFybS5nZXQoImRlc3RzdWZmaXgiLCBkZWZfZGVzdHN1ZmZpeCkKKyAgICAgICAgZGVzdGRpciA9IHVkLmRlc3RkaXIgPSBvcy5wYXRoLmpvaW4oZGVzdGRpciwgZGVzdHN1ZmZpeCkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZGVzdGRpcik6CisgICAgICAgICAgICBiYi51dGlscy5wcnVuZWRpcihkZXN0ZGlyKQorCisgICAgICAgIGNsb25lZmxhZ3MgPSAiLXMgLW4iCisgICAgICAgIGlmIHVkLmJhcmVjbG9uZToKKyAgICAgICAgICAgIGNsb25lZmxhZ3MgKz0gIiAtLW1pcnJvciIKKworICAgICAgICAjIFZlcnNpb25zIG9mIGdpdCBwcmlvciB0byAxLjcuOS4yIGhhdmUgaXNzdWVzIHdoZXJlIGZvby5naXQgYW5kIGZvbyBnZXQgY29uZnVzZWQKKyAgICAgICAgIyBhbmQgeW91IGVuZCB1cCB3aXRoIHNvbWUgaG9ycmlibGUgdW5pb24gb2YgdGhlIHR3byB3aGVuIHlvdSBhdHRlbXB0IHRvIGNsb25lIGl0CisgICAgICAgICMgVGhlIGxlYXN0IGludmFzaXZlIHdvcmthcm91bmQgc2VlbXMgdG8gYmUgYSBzeW1saW5rIHRvIHRoZSByZWFsIGRpcmVjdG9yeSB0bworICAgICAgICAjIGZvb2wgZ2l0IGludG8gaWdub3JpbmcgYW55IC5naXQgdmVyc2lvbiB0aGF0IG1heSBhbHNvIGJlIHByZXNlbnQuCisgICAgICAgICMKKyAgICAgICAgIyBUaGUgaXNzdWUgaXMgZml4ZWQgaW4gbW9yZSByZWNlbnQgdmVyc2lvbnMgb2YgZ2l0IHNvIHdlIGNhbiBkcm9wIHRoaXMgaGFjayBpbiBmdXR1cmUKKyAgICAgICAgIyB3aGVuIHRoYXQgdmVyc2lvbiBiZWNvbWVzIGNvbW1vbiBlbm91Z2guCisgICAgICAgIGNsb25lZGlyID0gdWQuY2xvbmVkaXIKKyAgICAgICAgaWYgbm90IHVkLnBhdGguZW5kc3dpdGgoIi5naXQiKToKKyAgICAgICAgICAgIGluZGlyZWN0aW9uZGlyID0gZGVzdGRpcls6LTFdICsgIi5pbmRpcmVjdGlvbnN5bWxpbmsiCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhpbmRpcmVjdGlvbmRpcik6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGluZGlyZWN0aW9uZGlyKQorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShpbmRpcmVjdGlvbmRpcikpCisgICAgICAgICAgICBvcy5zeW1saW5rKHVkLmNsb25lZGlyLCBpbmRpcmVjdGlvbmRpcikKKyAgICAgICAgICAgIGNsb25lZGlyID0gaW5kaXJlY3Rpb25kaXIKKworICAgICAgICBydW5mZXRjaGNtZCgiJXMgY2xvbmUgJXMgJXMvICVzIiAlICh1ZC5iYXNlY21kLCBjbG9uZWZsYWdzLCBjbG9uZWRpciwgZGVzdGRpciksIGQpCisgICAgICAgIG9zLmNoZGlyKGRlc3RkaXIpCisgICAgICAgIHJlcG91cmwgPSBzZWxmLl9nZXRfcmVwb191cmwodWQpCisgICAgICAgIHJ1bmZldGNoY21kKCIlcyByZW1vdGUgc2V0LXVybCBvcmlnaW4gJXMiICUgKHVkLmJhc2VjbWQsIHJlcG91cmwpLCBkKQorICAgICAgICBpZiBub3QgdWQubm9jaGVja291dDoKKyAgICAgICAgICAgIGlmIHN1YmRpciAhPSAiIjoKKyAgICAgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgcmVhZC10cmVlICVzJXMiICUgKHVkLmJhc2VjbWQsIHVkLnJldmlzaW9uc1t1ZC5uYW1lc1swXV0sIHJlYWRwYXRoc3BlYyksIGQpCisgICAgICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIGNoZWNrb3V0LWluZGV4IC1xIC1mIC1hIiAlIHVkLmJhc2VjbWQsIGQpCisgICAgICAgICAgICBlbGlmIG5vdCB1ZC5ub2JyYW5jaDoKKyAgICAgICAgICAgICAgICBicmFuY2huYW1lID0gIHVkLmJyYW5jaGVzW3VkLm5hbWVzWzBdXQorICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBjaGVja291dCAtQiAlcyAlcyIgJSAodWQuYmFzZWNtZCwgYnJhbmNobmFtZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkLnJldmlzaW9uc1t1ZC5uYW1lc1swXV0pLCBkKQorICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBicmFuY2ggLS1zZXQtdXBzdHJlYW0gJXMgb3JpZ2luLyVzIiAlICh1ZC5iYXNlY21kLCBicmFuY2huYW1lLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNobmFtZSksIGQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBjaGVja291dCAlcyIgJSAodWQuYmFzZWNtZCwgdWQucmV2aXNpb25zW3VkLm5hbWVzWzBdXSksIGQpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBjbGVhbihzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIiBjbGVhbiB0aGUgZ2l0IGRpcmVjdG9yeSAiIiIKKworICAgICAgICBiYi51dGlscy5yZW1vdmUodWQubG9jYWxwYXRoLCBUcnVlKQorICAgICAgICBiYi51dGlscy5yZW1vdmUodWQuZnVsbG1pcnJvcikKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHVkLmZ1bGxtaXJyb3IgKyAiLmRvbmUiKQorCisgICAgZGVmIHN1cHBvcnRzX3NyY3JldihzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfY29udGFpbnNfcmVmKHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgY21kID0gIiIKKyAgICAgICAgaWYgdWQubm9icmFuY2g6CisgICAgICAgICAgICBjbWQgPSAiJXMgbG9nIC0tcHJldHR5PW9uZWxpbmUgLW4gMSAlcyAtLSAyPiAvZGV2L251bGwgfCB3YyAtbCIgJSAoCisgICAgICAgICAgICAgICAgdWQuYmFzZWNtZCwgdWQucmV2aXNpb25zW25hbWVdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY21kID0gICIlcyBicmFuY2ggLS1jb250YWlucyAlcyAtLWxpc3QgJXMgMj4gL2Rldi9udWxsIHwgd2MgLWwiICUgKAorICAgICAgICAgICAgICAgIHVkLmJhc2VjbWQsIHVkLnJldmlzaW9uc1tuYW1lXSwgdWQuYnJhbmNoZXNbbmFtZV0pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dHB1dCA9IHJ1bmZldGNoY21kKGNtZCwgZCwgcXVpZXQ9VHJ1ZSkKKyAgICAgICAgZXhjZXB0IGJiLmZldGNoMi5GZXRjaEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIGxlbihvdXRwdXQuc3BsaXQoKSkgPiAxOgorICAgICAgICAgICAgcmFpc2UgYmIuZmV0Y2gyLkZldGNoRXJyb3IoIlRoZSBjb21tYW5kICclcycgZ2F2ZSBvdXRwdXQgd2l0aCBtb3JlIHRoZW4gMSBsaW5lIHVuZXhwZWN0ZWRseSwgb3V0cHV0OiAnJXMnIiAlIChjbWQsIG91dHB1dCkpCisgICAgICAgIHJldHVybiBvdXRwdXQuc3BsaXQoKVswXSAhPSAiMCIKKworICAgIGRlZiBfZ2V0X3JlcG9fdXJsKHNlbGYsIHVkKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgcmVwb3NpdG9yeSBVUkwKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHVkLnVzZXI6CisgICAgICAgICAgICB1c2VybmFtZSA9IHVkLnVzZXIgKyAnQCcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVzZXJuYW1lID0gIiIKKyAgICAgICAgcmV0dXJuICIlczovLyVzJXMlcyIgJSAodWQucHJvdG8sIHVzZXJuYW1lLCB1ZC5ob3N0LCB1ZC5wYXRoKQorCisgICAgZGVmIF9yZXZpc2lvbl9rZXkoc2VsZiwgdWQsIGQsIG5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgdW5pcXVlIGtleSBmb3IgdGhlIHVybAorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuICJnaXQ6IiArIHVkLmhvc3QgKyB1ZC5wYXRoLnJlcGxhY2UoJy8nLCAnLicpICsgdWQudW5yZXNvbHZlZHJldltuYW1lXQorCisgICAgZGVmIF9sc3JlbW90ZShzZWxmLCB1ZCwgZCwgc2VhcmNoKToKKyAgICAgICAgIiIiCisgICAgICAgIFJ1biBnaXQgbHMtcmVtb3RlIHdpdGggdGhlIHNwZWNpZmllZCBzZWFyY2ggc3RyaW5nCisgICAgICAgICIiIgorICAgICAgICByZXBvdXJsID0gc2VsZi5fZ2V0X3JlcG9fdXJsKHVkKQorICAgICAgICBjbWQgPSAiJXMgbHMtcmVtb3RlICVzICVzIiAlIFwKKyAgICAgICAgICAgICAgKHVkLmJhc2VjbWQsIHJlcG91cmwsIHNlYXJjaCkKKyAgICAgICAgaWYgdWQucHJvdG8ubG93ZXIoKSAhPSAnZmlsZSc6CisgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgY21kKQorICAgICAgICBvdXRwdXQgPSBydW5mZXRjaGNtZChjbWQsIGQsIFRydWUpCisgICAgICAgIGlmIG5vdCBvdXRwdXQ6CisgICAgICAgICAgICByYWlzZSBiYi5mZXRjaDIuRmV0Y2hFcnJvcigiVGhlIGNvbW1hbmQgJXMgZ2F2ZSBlbXB0eSBvdXRwdXQgdW5leHBlY3RlZGx5IiAlIGNtZCwgdWQudXJsKQorICAgICAgICByZXR1cm4gb3V0cHV0CisKKyAgICBkZWYgX2xhdGVzdF9yZXZpc2lvbihzZWxmLCB1ZCwgZCwgbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBDb21wdXRlIHRoZSBIRUFEIHJldmlzaW9uIGZvciB0aGUgdXJsCisgICAgICAgICIiIgorICAgICAgICBvdXRwdXQgPSBzZWxmLl9sc3JlbW90ZSh1ZCwgZCwgIiIpCisgICAgICAgICMgVGFncyBvZiB0aGUgZm9ybSBee30gbWF5IG5vdCB3b3JrLCBuZWVkIHRvIGZhbGxiYWNrIHRvIG90aGVyIGZvcm0KKyAgICAgICAgaWYgdWQudW5yZXNvbHZlZHJldltuYW1lXVs6NV0gPT0gInJlZnMvIjoKKyAgICAgICAgICAgIGhlYWQgPSB1ZC51bnJlc29sdmVkcmV2W25hbWVdCisgICAgICAgICAgICB0YWcgPSB1ZC51bnJlc29sdmVkcmV2W25hbWVdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBoZWFkID0gInJlZnMvaGVhZHMvJXMiICUgdWQudW5yZXNvbHZlZHJldltuYW1lXQorICAgICAgICAgICAgdGFnID0gInJlZnMvdGFncy8lcyIgJSB1ZC51bnJlc29sdmVkcmV2W25hbWVdCisgICAgICAgIGZvciBzIGluIFtoZWFkLCB0YWcgKyAiXnt9IiwgdGFnXToKKyAgICAgICAgICAgIGZvciBsIGluIG91dHB1dC5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICBpZiBzIGluIGw6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsLnNwbGl0KClbMF0KKyAgICAgICAgcmFpc2UgYmIuZmV0Y2gyLkZldGNoRXJyb3IoIlVuYWJsZSB0byByZXNvbHZlICclcycgaW4gdXBzdHJlYW0gZ2l0IHJlcG9zaXRvcnkgaW4gZ2l0IGxzLXJlbW90ZSBvdXRwdXQgZm9yICVzIiAlIFwKKyAgICAgICAgICAgICh1ZC51bnJlc29sdmVkcmV2W25hbWVdLCB1ZC5ob3N0K3VkLnBhdGgpKQorCisgICAgZGVmIGxhdGVzdF92ZXJzaW9uc3RyaW5nKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbXB1dGUgdGhlIGxhdGVzdCByZWxlYXNlIG5hbWUgbGlrZSAieC55LngiIGluICJ4LnkueCtnaXRIQVNIIgorICAgICAgICBieSBzZWFyY2hpbmcgdGhyb3VnaCB0aGUgdGFncyBvdXRwdXQgb2YgbHMtcmVtb3RlLCBjb21wYXJpbmcKKyAgICAgICAgdmVyc2lvbnMgYW5kIHJldHVybmluZyB0aGUgaGlnaGVzdCBtYXRjaC4KKyAgICAgICAgIiIiCisgICAgICAgIHB1cHZlciA9ICgnJywgJycpCisKKyAgICAgICAgdGFncmVnZXggPSByZS5jb21waWxlKGQuZ2V0VmFyKCdHSVRUQUdSRUdFWCcsIFRydWUpIG9yICIoP1A8cHZlcj4oWzAtOV1bXC58X10/KSspIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0cHV0ID0gc2VsZi5fbHNyZW1vdGUodWQsIGQsICJyZWZzL3RhZ3MvKiIpCisgICAgICAgIGV4Y2VwdCBiYi5mZXRjaDIuRmV0Y2hFcnJvciBvciBiYi5mZXRjaDIuTmV0d29ya0FjY2VzczoKKyAgICAgICAgICAgIHJldHVybiBwdXB2ZXIKKworICAgICAgICB2ZXJzdHJpbmcgPSAiIgorICAgICAgICByZXZpc2lvbiA9ICIiCisgICAgICAgIGZvciBsaW5lIGluIG91dHB1dC5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIHRhZ19oZWFkID0gbGluZS5zcGxpdCgiLyIpWy0xXQorICAgICAgICAgICAgIyBJZ25vcmUgbm9uLXJlbGVhc2VkIGJyYW5jaGVzCisgICAgICAgICAgICBtID0gcmUuc2VhcmNoKCIoYWxwaGF8YmV0YXxyY3xmaW5hbCkrIiwgdGFnX2hlYWQpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgc2VhcmNoIGZvciB2ZXJzaW9uIGluIHRoZSBsaW5lCisgICAgICAgICAgICB0YWcgPSB0YWdyZWdleC5zZWFyY2godGFnX2hlYWQpCisgICAgICAgICAgICBpZiB0YWcgPT0gTm9uZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICB0YWcgPSB0YWcuZ3JvdXAoJ3B2ZXInKQorICAgICAgICAgICAgdGFnID0gdGFnLnJlcGxhY2UoIl8iLCAiLiIpCisKKyAgICAgICAgICAgIGlmIHZlcnN0cmluZyBhbmQgYmIudXRpbHMudmVyY21wKCgiMCIsIHRhZywgIiIpLCAoIjAiLCB2ZXJzdHJpbmcsICIiKSkgPCAwOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHZlcnN0cmluZyA9IHRhZworICAgICAgICAgICAgcmV2aXNpb24gPSBsaW5lLnNwbGl0KClbMF0KKyAgICAgICAgICAgIHB1cHZlciA9ICh2ZXJzdHJpbmcsIHJldmlzaW9uKQorCisgICAgICAgIHJldHVybiBwdXB2ZXIKKworICAgIGRlZiBfYnVpbGRfcmV2aXNpb24oc2VsZiwgdWQsIGQsIG5hbWUpOgorICAgICAgICByZXR1cm4gdWQucmV2aXNpb25zW25hbWVdCisKKyAgICBkZWYgZ2l0cGtndl9yZXZpc2lvbihzZWxmLCB1ZCwgZCwgbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBzb3J0YWJsZSByZXZpc2lvbiBudW1iZXIgYnkgY291bnRpbmcgY29tbWl0cyBpbiB0aGUgaGlzdG9yeQorICAgICAgICBCYXNlZCBvbiBnaXRwa2d2LmJibGFzcyBpbiBtZXRhLW9wZW5lbWJlZGRlZAorICAgICAgICAiIiIKKyAgICAgICAgcmV2ID0gc2VsZi5fYnVpbGRfcmV2aXNpb24odWQsIGQsIG5hbWUpCisgICAgICAgIGxvY2FscGF0aCA9IHVkLmxvY2FscGF0aAorICAgICAgICByZXZfZmlsZSA9IG9zLnBhdGguam9pbihsb2NhbHBhdGgsICJvZS1naXRwa2d2XyIgKyByZXYpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhsb2NhbHBhdGgpOgorICAgICAgICAgICAgY29tbWl0cyA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhyZXZfZmlsZSkgb3Igbm90IG9zLnBhdGguZ2V0c2l6ZShyZXZfZmlsZSk6CisgICAgICAgICAgICAgICAgZnJvbSBwaXBlcyBpbXBvcnQgcXVvdGUKKyAgICAgICAgICAgICAgICBjb21taXRzID0gYmIuZmV0Y2gyLnJ1bmZldGNoY21kKAorICAgICAgICAgICAgICAgICAgICAgICAgImdpdCByZXYtbGlzdCAlcyAtLSB8IHdjIC1sIiAlIChxdW90ZShyZXYpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGQsIHF1aWV0PVRydWUpLnN0cmlwKCkubHN0cmlwKCcwJykKKyAgICAgICAgICAgICAgICBpZiBjb21taXRzOgorICAgICAgICAgICAgICAgICAgICBvcGVuKHJldl9maWxlLCAidyIpLndyaXRlKCIlZFxuIiAlIGludChjb21taXRzKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY29tbWl0cyA9IG9wZW4ocmV2X2ZpbGUsICJyIikucmVhZGxpbmUoMTI4KS5zdHJpcCgpCisgICAgICAgIGlmIGNvbW1pdHM6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UsICIlcyslcyIgJSAoY29tbWl0cywgcmV2Wzo3XSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlLCBzdHIocmV2KQorCisgICAgZGVmIGNoZWNrc3RhdHVzKHNlbGYsIGZldGNoLCB1ZCwgZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2xzcmVtb3RlKHVkLCBkLCAiIikKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGV4Y2VwdCBGZXRjaEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9naXRhbm5leC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2dpdGFubmV4LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMzc4OTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9naXRhbm5leC5weQpAQCAtMCwwICsxLDc2IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdGZXRjaCcgZ2l0IGFubmV4IGltcGxlbWVudGF0aW9uCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMTQgT3RhdmlvIFNhbHZhZG9yCisjIENvcHlyaWdodCAoQykgMjAxNCBPLlMuIFN5c3RlbXMgU29mdHdhcmUgTFREQS4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBvcworaW1wb3J0IGJiCitmcm9tICAgYmIgaW1wb3J0IGRhdGEKK2Zyb20gICBiYi5mZXRjaDIuZ2l0IGltcG9ydCBHaXQKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IHJ1bmZldGNoY21kCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBsb2dnZXIKKworY2xhc3MgR2l0QU5ORVgoR2l0KToKKyAgICBkZWYgc3VwcG9ydHMoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgdG8gc2VlIGlmIGEgZ2l2ZW4gdXJsIGNhbiBiZSBmZXRjaGVkIHdpdGggZ2l0LgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHVkLnR5cGUgaW4gWydnaXRhbm5leCddCisKKyAgICBkZWYgdXNlc19hbm5leChzZWxmLCB1ZCwgZCk6CisgICAgICAgIGZvciBuYW1lIGluIHVkLm5hbWVzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyByZXYtbGlzdCBnaXQtYW5uZXgiICUgKHVkLmJhc2VjbWQpLCBkLCBxdWlldD1UcnVlKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBleGNlcHQgYmIuZmV0Y2guRmV0Y2hFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgdXBkYXRlX2FubmV4KHNlbGYsIHVkLCBkKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIGFubmV4IGdldCAtLWFsbCIgJSAodWQuYmFzZWNtZCksIGQsIHF1aWV0PVRydWUpCisgICAgICAgIGV4Y2VwdCBiYi5mZXRjaC5GZXRjaEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJ1bmZldGNoY21kKCJjaG1vZCB1K3cgLVIgJXMvYW5uZXgiICUgKHVkLmNsb25lZGlyKSwgZCwgcXVpZXQ9VHJ1ZSkKKworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVkLCBkKToKKyAgICAgICAgR2l0LmRvd25sb2FkKHNlbGYsIHVkLCBkKQorCisgICAgICAgIG9zLmNoZGlyKHVkLmNsb25lZGlyKQorICAgICAgICBhbm5leCA9IHNlbGYudXNlc19hbm5leCh1ZCwgZCkKKyAgICAgICAgaWYgYW5uZXg6CisgICAgICAgICAgICBzZWxmLnVwZGF0ZV9hbm5leCh1ZCwgZCkKKworICAgIGRlZiB1bnBhY2soc2VsZiwgdWQsIGRlc3RkaXIsIGQpOgorICAgICAgICBHaXQudW5wYWNrKHNlbGYsIHVkLCBkZXN0ZGlyLCBkKQorCisgICAgICAgIG9zLmNoZGlyKHVkLmRlc3RkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBhbm5leCBzeW5jIiAlICh1ZC5iYXNlY21kKSwgZCkKKyAgICAgICAgZXhjZXB0IGJiLmZldGNoLkZldGNoRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgYW5uZXggPSBzZWxmLnVzZXNfYW5uZXgodWQsIGQpCisgICAgICAgIGlmIGFubmV4OgorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIGFubmV4IGdldCIgJSAodWQuYmFzZWNtZCksIGQpCisgICAgICAgICAgICBydW5mZXRjaGNtZCgiY2htb2QgdSt3IC1SICVzLy5naXQvYW5uZXgiICUgKHVkLmRlc3RkaXIpLCBkLCBxdWlldD1UcnVlKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvZ2l0c20ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9naXRzbS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzkyZTQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvZ2l0c20ucHkKQEAgLTAsMCArMSwxMzcgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgJ0ZldGNoJyBnaXQgc3VibW9kdWxlcyBpbXBsZW1lbnRhdGlvbgorCitJbmhlcml0cyBmcm9tIGFuZCBleHRlbmRzIHRoZSBHaXQgZmV0Y2hlciB0byByZXRyaWV2ZSBzdWJtb2R1bGVzIG9mIGEgZ2l0IHJlcG9zaXRvcnkKK2FmdGVyIGNsb25pbmcuCisKK1NSQ19VUkkgPSAiZ2l0c206Ly88c2VlIEdpdCBmZXRjaGVyIGZvciBzeW50YXg+IgorCitTZWUgdGhlIEdpdCBmZXRjaGVyLCBnaXQ6Ly8sIGZvciB1c2FnZSBkb2N1bWVudGF0aW9uLgorCitOT1RFOiBTd2l0Y2hpbmcgYSBTUkNfVVJJIGZyb20gImdpdDovLyIgdG8gImdpdHNtOi8vIiByZXF1aXJlcyBhIGNsZWFuIG9mIHlvdXIgcmVjaXBlLgorCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMTMgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBvcworaW1wb3J0IGJiCitmcm9tICAgYmIgICAgaW1wb3J0IGRhdGEKK2Zyb20gICBiYi5mZXRjaDIuZ2l0IGltcG9ydCBHaXQKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IHJ1bmZldGNoY21kCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBsb2dnZXIKKworY2xhc3MgR2l0U00oR2l0KToKKyAgICBkZWYgc3VwcG9ydHMoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgdG8gc2VlIGlmIGEgZ2l2ZW4gdXJsIGNhbiBiZSBmZXRjaGVkIHdpdGggZ2l0LgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHVkLnR5cGUgaW4gWydnaXRzbSddCisKKyAgICBkZWYgdXNlc19zdWJtb2R1bGVzKHNlbGYsIHVkLCBkKToKKyAgICAgICAgZm9yIG5hbWUgaW4gdWQubmFtZXM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIHNob3cgJXM6LmdpdG1vZHVsZXMiICUgKHVkLmJhc2VjbWQsIHVkLnJldmlzaW9uc1tuYW1lXSksIGQsIHF1aWV0PVRydWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGV4Y2VwdCBiYi5mZXRjaC5GZXRjaEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX3NldF9yZWxhdGl2ZV9wYXRocyhzZWxmLCByZXBvcGF0aCk6CisgICAgICAgICIiIgorICAgICAgICBGaXggc3VibW9kdWxlIHBhdGhzIHRvIGJlIHJlbGF0aXZlIGluc3RlYWQgb2YgYWJzb2x1dGUsCisgICAgICAgIHNvIHRoYXQgd2hlbiB3ZSBtb3ZlIHRoZSByZXBvIGl0IGRvZXNuJ3QgYnJlYWsKKyAgICAgICAgKEluIEdpdCAxLjcuMTArIHRoaXMgaXMgZG9uZSBhdXRvbWF0aWNhbGx5KQorICAgICAgICAiIiIKKyAgICAgICAgc3VibW9kdWxlcyA9IFtdCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ocmVwb3BhdGgsICcuZ2l0bW9kdWxlcycpLCAncicpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnW3N1Ym1vZHVsZScpOgorICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGVzLmFwcGVuZChsaW5lLnNwbGl0KCciJylbMV0pCisKKyAgICAgICAgZm9yIG1vZHVsZSBpbiBzdWJtb2R1bGVzOgorICAgICAgICAgICAgcmVwb19jb25mID0gb3MucGF0aC5qb2luKHJlcG9wYXRoLCBtb2R1bGUsICcuZ2l0JykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHJlcG9fY29uZik6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHJlcG9fY29uZiwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICAgICBuZXdwYXRoID0gJycKKyAgICAgICAgICAgICAgICBmb3IgaSwgbGluZSBpbiBlbnVtZXJhdGUobGluZXMpOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ2dpdGRpcjonKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9sZHBhdGggPSBsaW5lLnNwbGl0KCc6ICcpWy0xXS5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgb2xkcGF0aC5zdGFydHN3aXRoKCcvJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3cGF0aCA9ICcuLi8nICogKG1vZHVsZS5jb3VudCgnLycpICsgMSkgKyAnLmdpdC9tb2R1bGVzLycgKyBtb2R1bGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lc1tpXSA9ICdnaXRkaXI6ICVzXG4nICUgbmV3cGF0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgbmV3cGF0aDoKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHJlcG9fY29uZiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShsaW5lKQorCisgICAgICAgICAgICByZXBvX2NvbmYyID0gb3MucGF0aC5qb2luKHJlcG9wYXRoLCAnLmdpdCcsICdtb2R1bGVzJywgbW9kdWxlLCAnY29uZmlnJykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHJlcG9fY29uZjIpOgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihyZXBvX2NvbmYyLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgIG5ld3BhdGggPSAnJworICAgICAgICAgICAgICAgIGZvciBpLCBsaW5lIGluIGVudW1lcmF0ZShsaW5lcyk6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUubHN0cmlwKCkuc3RhcnRzd2l0aCgnd29ya3RyZWUgPSAnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9sZHBhdGggPSBsaW5lLnNwbGl0KCcgPSAnKVstMV0ucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9sZHBhdGguc3RhcnRzd2l0aCgnLycpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BhdGggPSAnLi4vJyAqIChtb2R1bGUuY291bnQoJy8nKSArIDMpICsgbW9kdWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNbaV0gPSAnXHR3b3JrdHJlZSA9ICVzXG4nICUgbmV3cGF0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgbmV3cGF0aDoKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHJlcG9fY29uZjIsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUobGluZSkKKworICAgIGRlZiB1cGRhdGVfc3VibW9kdWxlcyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICMgV2UgaGF2ZSB0byBjb252ZXJ0IGJhcmUgLT4gZnVsbCByZXBvLCBkbyB0aGUgc3VibW9kdWxlIGJpdCwgdGhlbiBjb252ZXJ0IGJhY2sKKyAgICAgICAgdG1wY2xvbmVkaXIgPSB1ZC5jbG9uZWRpciArICIudG1wIgorICAgICAgICBnaXRkaXIgPSB0bXBjbG9uZWRpciArIG9zLnNlcCArICIuZ2l0IgorICAgICAgICBiYi51dGlscy5yZW1vdmUodG1wY2xvbmVkaXIsIFRydWUpCisgICAgICAgIG9zLm1rZGlyKHRtcGNsb25lZGlyKQorICAgICAgICBvcy5yZW5hbWUodWQuY2xvbmVkaXIsIGdpdGRpcikKKyAgICAgICAgcnVuZmV0Y2hjbWQoInNlZCAiICsgZ2l0ZGlyICsgIi9jb25maWcgLWkgLWUgJ3MvYmFyZS4qPS4qdHJ1ZS9iYXJlID0gZmFsc2UvJyIsIGQpCisgICAgICAgIG9zLmNoZGlyKHRtcGNsb25lZGlyKQorICAgICAgICBydW5mZXRjaGNtZCh1ZC5iYXNlY21kICsgIiByZXNldCAtLWhhcmQiLCBkKQorICAgICAgICBydW5mZXRjaGNtZCh1ZC5iYXNlY21kICsgIiBjaGVja291dCAiICsgdWQucmV2aXNpb25zW3VkLm5hbWVzWzBdXSwgZCkKKyAgICAgICAgcnVuZmV0Y2hjbWQodWQuYmFzZWNtZCArICIgc3VibW9kdWxlIGluaXQiLCBkKQorICAgICAgICBydW5mZXRjaGNtZCh1ZC5iYXNlY21kICsgIiBzdWJtb2R1bGUgdXBkYXRlIiwgZCkKKyAgICAgICAgc2VsZi5fc2V0X3JlbGF0aXZlX3BhdGhzKHRtcGNsb25lZGlyKQorICAgICAgICBydW5mZXRjaGNtZCgic2VkICIgKyBnaXRkaXIgKyAiL2NvbmZpZyAtaSAtZSAncy9iYXJlLio9LipmYWxzZS9iYXJlID0gdHJ1ZS8nIiwgZCkKKyAgICAgICAgb3MucmVuYW1lKGdpdGRpciwgdWQuY2xvbmVkaXIsKQorICAgICAgICBiYi51dGlscy5yZW1vdmUodG1wY2xvbmVkaXIsIFRydWUpCisKKyAgICBkZWYgZG93bmxvYWQoc2VsZiwgdWQsIGQpOgorICAgICAgICBHaXQuZG93bmxvYWQoc2VsZiwgdWQsIGQpCisKKyAgICAgICAgb3MuY2hkaXIodWQuY2xvbmVkaXIpCisgICAgICAgIHN1Ym1vZHVsZXMgPSBzZWxmLnVzZXNfc3VibW9kdWxlcyh1ZCwgZCkKKyAgICAgICAgaWYgc3VibW9kdWxlczoKKyAgICAgICAgICAgIHNlbGYudXBkYXRlX3N1Ym1vZHVsZXModWQsIGQpCisKKyAgICBkZWYgdW5wYWNrKHNlbGYsIHVkLCBkZXN0ZGlyLCBkKToKKyAgICAgICAgR2l0LnVucGFjayhzZWxmLCB1ZCwgZGVzdGRpciwgZCkKKyAgICAgICAgCisgICAgICAgIG9zLmNoZGlyKHVkLmRlc3RkaXIpCisgICAgICAgIHN1Ym1vZHVsZXMgPSBzZWxmLnVzZXNfc3VibW9kdWxlcyh1ZCwgZCkKKyAgICAgICAgaWYgc3VibW9kdWxlczoKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCJjcCAtciAiICsgdWQuY2xvbmVkaXIgKyAiL21vZHVsZXMgIiArIHVkLmRlc3RkaXIgKyAiLy5naXQvIiwgZCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKHVkLmJhc2VjbWQgKyAiIHN1Ym1vZHVsZSBpbml0IiwgZCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKHVkLmJhc2VjbWQgKyAiIHN1Ym1vZHVsZSB1cGRhdGUiLCBkKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9oZy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2hnLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5Nzg2MzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9oZy5weQpAQCAtMCwwICsxLDI3NSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0QmFrZSAnRmV0Y2gnIGltcGxlbWVudGF0aW9uIGZvciBtZXJjdXJpYWwgRFJDUyAoaGcpLgorCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIENocmlzIExhcnNvbgorIyBDb3B5cmlnaHQgKEMpIDIwMDQgICAgICAgIE1hcmNpbiBKdXN6a2lld2ljegorIyBDb3B5cmlnaHQgKEMpIDIwMDcgICAgICAgIFJvYmVydCBTY2h1c3RlcgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgQmFzZWQgb24gZnVuY3Rpb25zIGZyb20gdGhlIGJhc2UgYmIgbW9kdWxlLCBDb3B5cmlnaHQgMjAwMyBIb2xnZXIgU2NodXJpZworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYmIKK2Zyb20gYmIgaW1wb3J0IGRhdGEKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBGZXRjaE1ldGhvZAorZnJvbSBiYi5mZXRjaDIgaW1wb3J0IEZldGNoRXJyb3IKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBNaXNzaW5nUGFyYW1ldGVyRXJyb3IKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAorZnJvbSBiYi5mZXRjaDIgaW1wb3J0IGxvZ2dlcgorCitjbGFzcyBIZyhGZXRjaE1ldGhvZCk6CisgICAgIiIiQ2xhc3MgdG8gZmV0Y2ggZnJvbSBtZXJjdXJpYWwgcmVwb3NpdG9yaWVzIiIiCisgICAgZGVmIHN1cHBvcnRzKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRvIHNlZSBpZiBhIGdpdmVuIHVybCBjYW4gYmUgZmV0Y2hlZCB3aXRoIG1lcmN1cmlhbC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiB1ZC50eXBlIGluIFsnaGcnXQorCisgICAgZGVmIHN1cHBvcnRzX2NoZWNrc3VtKHNlbGYsIHVybGRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgRG9uJ3QgcmVxdWlyZSBjaGVja3N1bXMgZm9yIGxvY2FsIGFyY2hpdmVzIGNyZWF0ZWQgZnJvbQorICAgICAgICByZXBvc2l0b3J5IGNoZWNrb3V0cy4KKyAgICAgICAgIiIiIAorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiB1cmxkYXRhX2luaXQoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgaW5pdCBoZyBzcGVjaWZpYyB2YXJpYWJsZSB3aXRoaW4gdXJsIGRhdGEKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCAibW9kdWxlIiBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgcmFpc2UgTWlzc2luZ1BhcmFtZXRlckVycm9yKCdtb2R1bGUnLCB1ZC51cmwpCisKKyAgICAgICAgdWQubW9kdWxlID0gdWQucGFybVsibW9kdWxlIl0KKworICAgICAgICBpZiAncHJvdG9jb2wnIGluIHVkLnBhcm06CisgICAgICAgICAgICB1ZC5wcm90byA9IHVkLnBhcm1bJ3Byb3RvY29sJ10KKyAgICAgICAgZWxpZiBub3QgdWQuaG9zdDoKKyAgICAgICAgICAgIHVkLnByb3RvID0gJ2ZpbGUnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1ZC5wcm90byA9ICJoZyIKKworICAgICAgICB1ZC5zZXR1cF9yZXZpc29ucyhkKQorCisgICAgICAgIGlmICdyZXYnIGluIHVkLnBhcm06CisgICAgICAgICAgICB1ZC5yZXZpc2lvbiA9IHVkLnBhcm1bJ3JldiddCisgICAgICAgIGVsaWYgbm90IHVkLnJldmlzaW9uOgorICAgICAgICAgICAgdWQucmV2aXNpb24gPSBzZWxmLmxhdGVzdF9yZXZpc2lvbih1ZCwgZCkKKworICAgICAgICAjIENyZWF0ZSBwYXRocyB0byBtZXJjdXJpYWwgY2hlY2tvdXRzCisgICAgICAgIGhnc3JjbmFtZSA9ICclc18lc18lcycgJSAodWQubW9kdWxlLnJlcGxhY2UoJy8nLCAnLicpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWQuaG9zdCwgdWQucGF0aC5yZXBsYWNlKCcvJywgJy4nKSkKKyAgICAgICAgdWQubWlycm9ydGFyYmFsbCA9ICdoZ18lcy50YXIuZ3onICUgaGdzcmNuYW1lCisgICAgICAgIHVkLmZ1bGxtaXJyb3IgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoIkRMX0RJUiIsIFRydWUpLCB1ZC5taXJyb3J0YXJiYWxsKQorCisgICAgICAgIGhnZGlyID0gZC5nZXRWYXIoIkhHRElSIiwgVHJ1ZSkgb3IgKGQuZ2V0VmFyKCJETF9ESVIiLCBUcnVlKSArICIvaGcvIikKKyAgICAgICAgdWQucGtnZGlyID0gb3MucGF0aC5qb2luKGhnZGlyLCBoZ3NyY25hbWUpCisgICAgICAgIHVkLm1vZGRpciA9IG9zLnBhdGguam9pbih1ZC5wa2dkaXIsIHVkLm1vZHVsZSkKKyAgICAgICAgdWQubG9jYWxmaWxlID0gdWQubW9kZGlyCisgICAgICAgIHVkLmJhc2VjbWQgPSBkYXRhLmdldFZhcigiRkVUQ0hDTURfaGciLCBkLCBUcnVlKSBvciAiL3Vzci9iaW4vZW52IGhnIgorCisgICAgICAgIHVkLndyaXRlX3RhcmJhbGxzID0gZC5nZXRWYXIoIkJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyIsIFRydWUpCisKKyAgICBkZWYgbmVlZF91cGRhdGUoc2VsZiwgdWQsIGQpOgorICAgICAgICByZXZUYWcgPSB1ZC5wYXJtLmdldCgncmV2JywgJ3RpcCcpCisgICAgICAgIGlmIHJldlRhZyA9PSAidGlwIjoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh1ZC5sb2NhbHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgdHJ5X3ByZW1pcnJvcihzZWxmLCB1ZCwgZCk6CisgICAgICAgICMgSWYgd2UgZG9uJ3QgZG8gdGhpcywgdXBkYXRpbmcgYW4gZXhpc3RpbmcgY2hlY2tvdXQgd2l0aCBvbmx5IHByZW1pcnJvcnMKKyAgICAgICAgIyBpcyBub3QgcG9zc2libGUKKyAgICAgICAgaWYgZC5nZXRWYXIoIkJCX0ZFVENIX1BSRU1JUlJPUk9OTFkiLCBUcnVlKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHVkLm1vZGRpcik6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfYnVpbGRoZ2NvbW1hbmQoc2VsZiwgdWQsIGQsIGNvbW1hbmQpOgorICAgICAgICAiIiIKKyAgICAgICAgQnVpbGQgdXAgYW4gaGcgY29tbWFuZGxpbmUgYmFzZWQgb24gdWQKKyAgICAgICAgY29tbWFuZCBpcyAiZmV0Y2giLCAidXBkYXRlIiwgImluZm8iCisgICAgICAgICIiIgorCisgICAgICAgIHByb3RvID0gdWQucGFybS5nZXQoJ3Byb3RvY29sJywgJ2h0dHAnKQorCisgICAgICAgIGhvc3QgPSB1ZC5ob3N0CisgICAgICAgIGlmIHByb3RvID09ICJmaWxlIjoKKyAgICAgICAgICAgIGhvc3QgPSAiLyIKKyAgICAgICAgICAgIHVkLmhvc3QgPSAibG9jYWxob3N0IgorCisgICAgICAgIGlmIG5vdCB1ZC51c2VyOgorICAgICAgICAgICAgaGdyb290ID0gaG9zdCArIHVkLnBhdGgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHVkLnBzd2Q6CisgICAgICAgICAgICAgICAgaGdyb290ID0gdWQudXNlciArICI6IiArIHVkLnBzd2QgKyAiQCIgKyBob3N0ICsgdWQucGF0aAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBoZ3Jvb3QgPSB1ZC51c2VyICsgIkAiICsgaG9zdCArIHVkLnBhdGgKKworICAgICAgICBpZiBjb21tYW5kID09ICJpbmZvIjoKKyAgICAgICAgICAgIHJldHVybiAiJXMgaWRlbnRpZnkgLWkgJXM6Ly8lcy8lcyIgJSAodWQuYmFzZWNtZCwgcHJvdG8sIGhncm9vdCwgdWQubW9kdWxlKQorCisgICAgICAgIG9wdGlvbnMgPSBbXTsKKworICAgICAgICAjIERvbid0IHNwZWNpZnkgcmV2aXNpb24gZm9yIHRoZSBmZXRjaDsgY2xvbmUgdGhlIGVudGlyZSByZXBvLgorICAgICAgICAjIFRoaXMgYXZvaWRzIGFuIGlzc3VlIGlmIHRoZSBzcGVjaWZpZWQgcmV2aXNpb24gaXMgYSB0YWcsIGJlY2F1c2UKKyAgICAgICAgIyB0aGUgdGFnIGFjdHVhbGx5IGV4aXN0cyBpbiB0aGUgc3BlY2lmaWVkIHJldmlzaW9uICsgMSwgc28gaXQgd29uJ3QKKyAgICAgICAgIyBiZSBhdmFpbGFibGUgd2hlbiB1c2VkIGluIGFueSBzdWNjZXNzaXZlIGNvbW1hbmRzLgorICAgICAgICBpZiB1ZC5yZXZpc2lvbiBhbmQgY29tbWFuZCAhPSAiZmV0Y2giOgorICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQoIi1yICVzIiAlIHVkLnJldmlzaW9uKQorCisgICAgICAgIGlmIGNvbW1hbmQgPT0gImZldGNoIjoKKyAgICAgICAgICAgIGlmIHVkLnVzZXIgYW5kIHVkLnBzd2Q6CisgICAgICAgICAgICAgICAgY21kID0gIiVzIC0tY29uZmlnIGF1dGguZGVmYXVsdC5wcmVmaXg9KiAtLWNvbmZpZyBhdXRoLmRlZmF1bHQudXNlcm5hbWU9JXMgLS1jb25maWcgYXV0aC5kZWZhdWx0LnBhc3N3b3JkPSVzIC0tY29uZmlnIFwiYXV0aC5kZWZhdWx0LnNjaGVtZXM9JXNcIiBjbG9uZSAlcyAlczovLyVzLyVzICVzIiAlICh1ZC5iYXNlY21kLCB1ZC51c2VyLCB1ZC5wc3dkLCBwcm90bywgIiAiLmpvaW4ob3B0aW9ucyksIHByb3RvLCBoZ3Jvb3QsIHVkLm1vZHVsZSwgdWQubW9kdWxlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjbWQgPSAiJXMgY2xvbmUgJXMgJXM6Ly8lcy8lcyAlcyIgJSAodWQuYmFzZWNtZCwgIiAiLmpvaW4ob3B0aW9ucyksIHByb3RvLCBoZ3Jvb3QsIHVkLm1vZHVsZSwgdWQubW9kdWxlKQorICAgICAgICBlbGlmIGNvbW1hbmQgPT0gInB1bGwiOgorICAgICAgICAgICAgIyBkbyBub3QgcGFzcyBvcHRpb25zIGxpc3Q7IGxpbWl0aW5nIHB1bGwgdG8gcmV2IGNhdXNlcyB0aGUgbG9jYWwKKyAgICAgICAgICAgICMgcmVwbyBub3QgdG8gY29udGFpbiBpdCBhbmQgaW1tZWRpYXRlbHkgZm9sbG93aW5nICJ1cGRhdGUiIGNvbW1hbmQKKyAgICAgICAgICAgICMgd2lsbCBjcmFzaAorICAgICAgICAgICAgaWYgdWQudXNlciBhbmQgdWQucHN3ZDoKKyAgICAgICAgICAgICAgICBjbWQgPSAiJXMgLS1jb25maWcgYXV0aC5kZWZhdWx0LnByZWZpeD0qIC0tY29uZmlnIGF1dGguZGVmYXVsdC51c2VybmFtZT0lcyAtLWNvbmZpZyBhdXRoLmRlZmF1bHQucGFzc3dvcmQ9JXMgLS1jb25maWcgXCJhdXRoLmRlZmF1bHQuc2NoZW1lcz0lc1wiIHB1bGwiICUgKHVkLmJhc2VjbWQsIHVkLnVzZXIsIHVkLnBzd2QsIHByb3RvKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjbWQgPSAiJXMgcHVsbCIgJSAodWQuYmFzZWNtZCkKKyAgICAgICAgZWxpZiBjb21tYW5kID09ICJ1cGRhdGUiOgorICAgICAgICAgICAgaWYgdWQudXNlciBhbmQgdWQucHN3ZDoKKyAgICAgICAgICAgICAgICBjbWQgPSAiJXMgLS1jb25maWcgYXV0aC5kZWZhdWx0LnByZWZpeD0qIC0tY29uZmlnIGF1dGguZGVmYXVsdC51c2VybmFtZT0lcyAtLWNvbmZpZyBhdXRoLmRlZmF1bHQucGFzc3dvcmQ9JXMgLS1jb25maWcgXCJhdXRoLmRlZmF1bHQuc2NoZW1lcz0lc1wiIHVwZGF0ZSAtQyAlcyIgJSAodWQuYmFzZWNtZCwgdWQudXNlciwgdWQucHN3ZCwgcHJvdG8sICIgIi5qb2luKG9wdGlvbnMpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjbWQgPSAiJXMgdXBkYXRlIC1DICVzIiAlICh1ZC5iYXNlY21kLCAiICIuam9pbihvcHRpb25zKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIkludmFsaWQgaGcgY29tbWFuZCAlcyIgJSBjb21tYW5kLCB1ZC51cmwpCisKKyAgICAgICAgcmV0dXJuIGNtZAorCisgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiRmV0Y2ggdXJsIiIiCisKKyAgICAgICAgdWQucmVwb2NoYW5nZWQgPSBub3Qgb3MucGF0aC5leGlzdHModWQuZnVsbG1pcnJvcikKKworICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkZldGNoOiBjaGVja2luZyBmb3IgbW9kdWxlIGRpcmVjdG9yeSAnIiArIHVkLm1vZGRpciArICInIikKKworICAgICAgICAjIElmIHRoZSBjaGVja291dCBkb2Vzbid0IGV4aXN0IGFuZCB0aGUgbWlycm9yIHRhcmJhbGwgZG9lcywgZXh0cmFjdCBpdAorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModWQucGtnZGlyKSBhbmQgb3MucGF0aC5leGlzdHModWQuZnVsbG1pcnJvcik6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodWQucGtnZGlyKQorICAgICAgICAgICAgb3MuY2hkaXIodWQucGtnZGlyKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAteHpmICVzIiAlICh1ZC5mdWxsbWlycm9yKSwgZCkKKworICAgICAgICBpZiBvcy5hY2Nlc3Mob3MucGF0aC5qb2luKHVkLm1vZGRpciwgJy5oZycpLCBvcy5SX09LKToKKyAgICAgICAgICAgICMgRm91bmQgdGhlIHNvdXJjZSwgY2hlY2sgd2hldGhlciBuZWVkIHB1bGwKKyAgICAgICAgICAgIHVwZGF0ZWNtZCA9IHNlbGYuX2J1aWxkaGdjb21tYW5kKHVkLCBkLCAidXBkYXRlIikKKyAgICAgICAgICAgIG9zLmNoZGlyKHVkLm1vZGRpcikKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiUnVubmluZyAlcyIsIHVwZGF0ZWNtZCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBydW5mZXRjaGNtZCh1cGRhdGVjbWQsIGQpCisgICAgICAgICAgICBleGNlcHQgYmIuZmV0Y2gyLkZldGNoRXJyb3I6CisgICAgICAgICAgICAgICAgIyBSdW5ubmluZyBwdWxsIGluIHRoZSByZXBvCisgICAgICAgICAgICAgICAgcHVsbGNtZCA9IHNlbGYuX2J1aWxkaGdjb21tYW5kKHVkLCBkLCAicHVsbCIpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlB1bGxpbmcgIiArIHVkLnVybCkKKyAgICAgICAgICAgICAgICAjIHVwZGF0ZSBzb3VyY2VzIHRoZXJlCisgICAgICAgICAgICAgICAgb3MuY2hkaXIodWQubW9kZGlyKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiUnVubmluZyAlcyIsIHB1bGxjbWQpCisgICAgICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIHB1bGxjbWQsIHVkLnVybCkKKyAgICAgICAgICAgICAgICBydW5mZXRjaGNtZChwdWxsY21kLCBkKQorICAgICAgICAgICAgICAgIHVkLnJlcG9jaGFuZ2VkID0gVHJ1ZQorCisgICAgICAgICMgTm8gc291cmNlIGZvdW5kLCBjbG9uZSBpdC4KKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHVkLm1vZGRpcik6CisgICAgICAgICAgICBmZXRjaGNtZCA9IHNlbGYuX2J1aWxkaGdjb21tYW5kKHVkLCBkLCAiZmV0Y2giKQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkZldGNoICIgKyB1ZC51cmwpCisgICAgICAgICAgICAjIGNoZWNrIG91dCBzb3VyY2VzIHRoZXJlCisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodWQucGtnZGlyKQorICAgICAgICAgICAgb3MuY2hkaXIodWQucGtnZGlyKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSdW5uaW5nICVzIiwgZmV0Y2hjbWQpCisgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgZmV0Y2hjbWQsIHVkLnVybCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKGZldGNoY21kLCBkKQorCisgICAgICAgICMgRXZlbiB3aGVuIHdlIGNsb25lIChmZXRjaCksIHdlIHN0aWxsIG5lZWQgdG8gdXBkYXRlIGFzIGhnJ3MgY2xvbmUKKyAgICAgICAgIyB3b24ndCBjaGVja291dCB0aGUgc3BlY2lmaWVkIHJldmlzaW9uIGlmIGl0cyBvbiBhIGJyYW5jaAorICAgICAgICB1cGRhdGVjbWQgPSBzZWxmLl9idWlsZGhnY29tbWFuZCh1ZCwgZCwgInVwZGF0ZSIpCisgICAgICAgIG9zLmNoZGlyKHVkLm1vZGRpcikKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSdW5uaW5nICVzIiwgdXBkYXRlY21kKQorICAgICAgICBydW5mZXRjaGNtZCh1cGRhdGVjbWQsIGQpCisKKyAgICBkZWYgY2xlYW4oc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIgQ2xlYW4gdGhlIGhnIGRpciAiIiIKKworICAgICAgICBiYi51dGlscy5yZW1vdmUodWQubG9jYWxwYXRoLCBUcnVlKQorICAgICAgICBiYi51dGlscy5yZW1vdmUodWQuZnVsbG1pcnJvcikKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHVkLmZ1bGxtaXJyb3IgKyAiLmRvbmUiKQorCisgICAgZGVmIHN1cHBvcnRzX3NyY3JldihzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfbGF0ZXN0X3JldmlzaW9uKHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbXB1dGUgdGlwIHJldmlzaW9uIGZvciB0aGUgdXJsCisgICAgICAgICIiIgorICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgc2VsZi5fYnVpbGRoZ2NvbW1hbmQodWQsIGQsICJpbmZvIikpCisgICAgICAgIG91dHB1dCA9IHJ1bmZldGNoY21kKHNlbGYuX2J1aWxkaGdjb21tYW5kKHVkLCBkLCAiaW5mbyIpLCBkKQorICAgICAgICByZXR1cm4gb3V0cHV0LnN0cmlwKCkKKworICAgIGRlZiBfYnVpbGRfcmV2aXNpb24oc2VsZiwgdWQsIGQsIG5hbWUpOgorICAgICAgICByZXR1cm4gdWQucmV2aXNpb24KKworICAgIGRlZiBfcmV2aXNpb25fa2V5KHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIHVuaXF1ZSBrZXkgZm9yIHRoZSB1cmwKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAiaGc6IiArIHVkLm1vZGRpcgorCisgICAgZGVmIGJ1aWxkX21pcnJvcl9kYXRhKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIyBHZW5lcmF0ZSBhIG1pcnJvciB0YXJiYWxsIGlmIG5lZWRlZAorICAgICAgICBpZiB1ZC53cml0ZV90YXJiYWxscyA9PSAiMSIgYW5kICh1ZC5yZXBvY2hhbmdlZCBvciBub3Qgb3MucGF0aC5leGlzdHModWQuZnVsbG1pcnJvcikpOgorICAgICAgICAgICAgIyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBzeW1saW5rIHBvaW50cyB0byByZWFkLW9ubHkgZmlsZXN5c3RlbSB3aXRoIFBSRU1JUlJPUgorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsodWQuZnVsbG1pcnJvcik6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKHVkLmZ1bGxtaXJyb3IpCisKKyAgICAgICAgICAgIG9zLmNoZGlyKHVkLnBrZ2RpcikKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDcmVhdGluZyB0YXJiYWxsIG9mIGhnIHJlcG9zaXRvcnkiKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAtY3pmICVzICVzIiAlICh1ZC5mdWxsbWlycm9yLCB1ZC5tb2R1bGUpLCBkKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoInRvdWNoICVzLmRvbmUiICUgKHVkLmZ1bGxtaXJyb3IpLCBkKQorCisgICAgZGVmIGxvY2FscGF0aChzZWxmLCB1ZCwgZCk6CisgICAgICAgIHJldHVybiB1ZC5wa2dkaXIKKworICAgIGRlZiB1bnBhY2soc2VsZiwgdWQsIGRlc3RkaXIsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgTWFrZSBhIGxvY2FsIGNsb25lIG9yIGV4cG9ydCBmb3IgdGhlIHVybAorICAgICAgICAiIiIKKworICAgICAgICByZXZmbGFnID0gIi1yICVzIiAlIHVkLnJldmlzaW9uCisgICAgICAgIHN1YmRpciA9IHVkLnBhcm0uZ2V0KCJkZXN0c3VmZml4IiwgdWQubW9kdWxlKQorICAgICAgICBjb2RpciA9ICIlcy8lcyIgJSAoZGVzdGRpciwgc3ViZGlyKQorCisgICAgICAgIHNjbWRhdGEgPSB1ZC5wYXJtLmdldCgic2NtZGF0YSIsICIiKQorICAgICAgICBpZiBzY21kYXRhICE9ICJub2tlZXAiOgorICAgICAgICAgICAgaWYgbm90IG9zLmFjY2Vzcyhvcy5wYXRoLmpvaW4oY29kaXIsICcuaGcnKSwgb3MuUl9PSyk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJVbnBhY2s6IGNyZWF0aW5nIG5ldyBoZyByZXBvc2l0b3J5IGluICciICsgY29kaXIgKyAiJyIpCisgICAgICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIGluaXQgJXMiICUgKHVkLmJhc2VjbWQsIGNvZGlyKSwgZCkKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiVW5wYWNrOiB1cGRhdGluZyBzb3VyY2UgaW4gJyIgKyBjb2RpciArICInIikKKyAgICAgICAgICAgIG9zLmNoZGlyKGNvZGlyKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIHB1bGwgJXMiICUgKHVkLmJhc2VjbWQsIHVkLm1vZGRpciksIGQpCisgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgdXAgLUMgJXMiICUgKHVkLmJhc2VjbWQsIHJldmZsYWcpLCBkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJVbnBhY2s6IGV4dHJhY3Rpbmcgc291cmNlIHRvICciICsgY29kaXIgKyAiJyIpCisgICAgICAgICAgICBvcy5jaGRpcih1ZC5tb2RkaXIpCisgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgYXJjaGl2ZSAtdCBmaWxlcyAlcyAlcyIgJSAodWQuYmFzZWNtZCwgcmV2ZmxhZywgY29kaXIpLCBkKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvbG9jYWwucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9sb2NhbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDkyMWY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvbG9jYWwucHkKQEAgLTAsMCArMSwxMjggQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgJ0ZldGNoJyBpbXBsZW1lbnRhdGlvbnMKKworQ2xhc3NlcyBmb3Igb2J0YWluaW5nIHVwc3RyZWFtIHNvdXJjZXMgZm9yIHRoZQorQml0QmFrZSBidWlsZCB0b29scy4KKworIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIEJhc2VkIG9uIGZ1bmN0aW9ucyBmcm9tIHRoZSBiYXNlIGJiIG1vZHVsZSwgQ29weXJpZ2h0IDIwMDMgSG9sZ2VyIFNjaHVyaWcKKworaW1wb3J0IG9zCitpbXBvcnQgdXJsbGliCitpbXBvcnQgYmIKK2ltcG9ydCBiYi51dGlscworZnJvbSAgIGJiIGltcG9ydCBkYXRhCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBGZXRjaE1ldGhvZCwgRmV0Y2hFcnJvcgorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgbG9nZ2VyCisKK2NsYXNzIExvY2FsKEZldGNoTWV0aG9kKToKKyAgICBkZWYgc3VwcG9ydHMoc2VsZiwgdXJsZGF0YSwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0byBzZWUgaWYgYSBnaXZlbiB1cmwgcmVwcmVzZW50cyBhIGxvY2FsIGZldGNoLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHVybGRhdGEudHlwZSBpbiBbJ2ZpbGUnXQorCisgICAgZGVmIHVybGRhdGFfaW5pdChzZWxmLCB1ZCwgZCk6CisgICAgICAgICMgV2UgZG9uJ3Qgc2V0IGxvY2FsZmlsZSBhcyBmb3IgdGhpcyBmZXRjaGVyIHRoZSBmaWxlIGlzIGFscmVhZHkgbG9jYWwhCisgICAgICAgIHVkLmRlY29kZWR1cmwgPSB1cmxsaWIudW5xdW90ZSh1ZC51cmwuc3BsaXQoIjovLyIpWzFdLnNwbGl0KCI7IilbMF0pCisgICAgICAgIHVkLmJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZSh1ZC5kZWNvZGVkdXJsKQorICAgICAgICB1ZC5iYXNlcGF0aCA9IHVkLmRlY29kZWR1cmwKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgbG9jYWxwYXRoKHNlbGYsIHVybGRhdGEsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBsb2NhbCBmaWxlbmFtZSBvZiBhIGdpdmVuIHVybCBhc3N1bWluZyBhIHN1Y2Nlc3NmdWwgZmV0Y2guCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5sb2NhbHBhdGhzKHVybGRhdGEsIGQpWy0xXQorCisgICAgZGVmIGxvY2FscGF0aHMoc2VsZiwgdXJsZGF0YSwgZCk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIGxvY2FsIGZpbGVuYW1lIG9mIGEgZ2l2ZW4gdXJsIGFzc3VtaW5nIGEgc3VjY2Vzc2Z1bCBmZXRjaC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlYXJjaGVkID0gW10KKyAgICAgICAgcGF0aCA9IHVybGRhdGEuZGVjb2RlZHVybAorICAgICAgICBuZXdwYXRoID0gcGF0aAorICAgICAgICBpZiBwYXRoWzBdID09ICIvIjoKKyAgICAgICAgICAgIHJldHVybiBbcGF0aF0KKyAgICAgICAgZmlsZXNwYXRoID0gZGF0YS5nZXRWYXIoJ0ZJTEVTUEFUSCcsIGQsIFRydWUpCisgICAgICAgIGlmIGZpbGVzcGF0aDoKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiU2VhcmNoaW5nIGZvciAlcyBpbiBwYXRoczpcbiAgICAlcyIgJSAocGF0aCwgIlxuICAgICIuam9pbihmaWxlc3BhdGguc3BsaXQoIjoiKSkpKQorICAgICAgICAgICAgbmV3cGF0aCwgaGlzdCA9IGJiLnV0aWxzLndoaWNoKGZpbGVzcGF0aCwgcGF0aCwgaGlzdG9yeT1UcnVlKQorICAgICAgICAgICAgc2VhcmNoZWQuZXh0ZW5kKGhpc3QpCisgICAgICAgIGlmIG5vdCBuZXdwYXRoOgorICAgICAgICAgICAgZmlsZXNkaXIgPSBkYXRhLmdldFZhcignRklMRVNESVInLCBkLCBUcnVlKQorICAgICAgICAgICAgaWYgZmlsZXNkaXI6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJTZWFyY2hpbmcgZm9yICVzIGluIHBhdGg6ICVzIiAlIChwYXRoLCBmaWxlc2RpcikpCisgICAgICAgICAgICAgICAgbmV3cGF0aCA9IG9zLnBhdGguam9pbihmaWxlc2RpciwgcGF0aCkKKyAgICAgICAgICAgICAgICBzZWFyY2hlZC5hcHBlbmQobmV3cGF0aCkKKyAgICAgICAgaWYgKG5vdCBuZXdwYXRoIG9yIG5vdCBvcy5wYXRoLmV4aXN0cyhuZXdwYXRoKSkgYW5kIHBhdGguZmluZCgiKiIpICE9IC0xOgorICAgICAgICAgICAgIyBGb3IgZXhwcmVzc2lvbnMgdXNpbmcgJyonLCBiZXN0IHdlIGNhbiBkbyBpcyB0YWtlIHRoZSBmaXJzdCBkaXJlY3RvcnkgaW4gRklMRVNQQVRIIHRoYXQgZXhpc3RzCisgICAgICAgICAgICBuZXdwYXRoLCBoaXN0ID0gYmIudXRpbHMud2hpY2goZmlsZXNwYXRoLCAiLiIsIGhpc3Rvcnk9VHJ1ZSkKKyAgICAgICAgICAgIHNlYXJjaGVkLmV4dGVuZChoaXN0KQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJTZWFyY2hpbmcgZm9yICVzIGluIHBhdGg6ICVzIiAlIChwYXRoLCBuZXdwYXRoKSkKKyAgICAgICAgICAgIHJldHVybiBzZWFyY2hlZAorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobmV3cGF0aCk6CisgICAgICAgICAgICBkbGRpcmZpbGUgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoIkRMX0RJUiIsIFRydWUpLCBwYXRoKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJEZWZhdWx0aW5nIHRvICVzIGZvciAlcyIgJSAoZGxkaXJmaWxlLCBwYXRoKSkKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZGxkaXJmaWxlKSkKKyAgICAgICAgICAgIHNlYXJjaGVkLmFwcGVuZChkbGRpcmZpbGUpCisgICAgICAgICAgICByZXR1cm4gc2VhcmNoZWQKKyAgICAgICAgcmV0dXJuIHNlYXJjaGVkCisKKyAgICBkZWYgbmVlZF91cGRhdGUoc2VsZiwgdWQsIGQpOgorICAgICAgICBpZiB1ZC51cmwuZmluZCgiKiIpICE9IC0xOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHVkLmxvY2FscGF0aCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBkb3dubG9hZChzZWxmLCB1cmxkYXRhLCBkKToKKyAgICAgICAgIiIiRmV0Y2ggdXJscyAobm8tb3AgZm9yIExvY2FsIG1ldGhvZCkiIiIKKyAgICAgICAgIyBubyBuZWVkIHRvIGZldGNoIGxvY2FsIGZpbGVzLCB3ZSdsbCBkZWFsIHdpdGggdGhlbSBpbiBwbGFjZS4KKyAgICAgICAgaWYgc2VsZi5zdXBwb3J0c19jaGVja3N1bSh1cmxkYXRhKSBhbmQgbm90IG9zLnBhdGguZXhpc3RzKHVybGRhdGEubG9jYWxwYXRoKToKKyAgICAgICAgICAgIGxvY2F0aW9ucyA9IFtdCisgICAgICAgICAgICBmaWxlc3BhdGggPSBkYXRhLmdldFZhcignRklMRVNQQVRIJywgZCwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGZpbGVzcGF0aDoKKyAgICAgICAgICAgICAgICBsb2NhdGlvbnMgPSBmaWxlc3BhdGguc3BsaXQoIjoiKQorICAgICAgICAgICAgZmlsZXNkaXIgPSBkYXRhLmdldFZhcignRklMRVNESVInLCBkLCBUcnVlKQorICAgICAgICAgICAgaWYgZmlsZXNkaXI6CisgICAgICAgICAgICAgICAgbG9jYXRpb25zLmFwcGVuZChmaWxlc2RpcikKKyAgICAgICAgICAgIGxvY2F0aW9ucy5hcHBlbmQoZC5nZXRWYXIoIkRMX0RJUiIsIFRydWUpKQorCisgICAgICAgICAgICBtc2cgPSAiVW5hYmxlIHRvIGZpbmQgZmlsZSAiICsgdXJsZGF0YS51cmwgKyAiIGFueXdoZXJlLiBUaGUgcGF0aHMgdGhhdCB3ZXJlIHNlYXJjaGVkIHdlcmU6XG4gICAgIiArICJcbiAgICAiLmpvaW4obG9jYXRpb25zKQorICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcihtc2cpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBjaGVja3N0YXR1cyhzZWxmLCBmZXRjaCwgdXJsZGF0YSwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0aGUgc3RhdHVzIG9mIHRoZSB1cmwKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHVybGRhdGEubG9jYWxwYXRoLmZpbmQoIioiKSAhPSAtMToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJVUkwgJXMgbG9va3MgbGlrZSBhIGdsb2IgYW5kIHdhcyB0aGVyZWZvcmUgbm90IGNoZWNrZWQuIiwgdXJsZGF0YS51cmwpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh1cmxkYXRhLmxvY2FscGF0aCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBjbGVhbihzZWxmLCB1cmxkYXRhLCBkKToKKyAgICAgICAgcmV0dXJuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL29zYy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL29zYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDg3Nzk2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvb3NjLnB5CkBAIC0wLDAgKzEsMTM1IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRiYWtlICJGZXRjaCIgaW1wbGVtZW50YXRpb24gZm9yIG9zYyAoT3BlbnN1c2UgYnVpbGQgc2VydmljZSBjbGllbnQpLgorQmFzZWQgb24gdGhlIHN2biAiRmV0Y2giIGltcGxlbWVudGF0aW9uLgorCisiIiIKKworaW1wb3J0ICBvcworaW1wb3J0ICBzeXMKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgIGJiCitmcm9tICAgIGJiICAgICAgIGltcG9ydCBkYXRhCitmcm9tICAgIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hNZXRob2QKK2Zyb20gICAgYmIuZmV0Y2gyIGltcG9ydCBGZXRjaEVycm9yCitmcm9tICAgIGJiLmZldGNoMiBpbXBvcnQgTWlzc2luZ1BhcmFtZXRlckVycm9yCitmcm9tICAgIGJiLmZldGNoMiBpbXBvcnQgcnVuZmV0Y2hjbWQKKworY2xhc3MgT3NjKEZldGNoTWV0aG9kKToKKyAgICAiIiJDbGFzcyB0byBmZXRjaCBhIG1vZHVsZSBvciBtb2R1bGVzIGZyb20gT3BlbnN1c2UgYnVpbGQgc2VydmVyCisgICAgICAgcmVwb3NpdG9yaWVzLiIiIgorCisgICAgZGVmIHN1cHBvcnRzKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRvIHNlZSBpZiBhIGdpdmVuIHVybCBjYW4gYmUgZmV0Y2hlZCB3aXRoIG9zYy4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiB1ZC50eXBlIGluIFsnb3NjJ10KKworICAgIGRlZiB1cmxkYXRhX2luaXQoc2VsZiwgdWQsIGQpOgorICAgICAgICBpZiBub3QgIm1vZHVsZSIgaW4gdWQucGFybToKKyAgICAgICAgICAgIHJhaXNlIE1pc3NpbmdQYXJhbWV0ZXJFcnJvcignbW9kdWxlJywgdWQudXJsKQorCisgICAgICAgIHVkLm1vZHVsZSA9IHVkLnBhcm1bIm1vZHVsZSJdCisKKyAgICAgICAgIyBDcmVhdGUgcGF0aHMgdG8gb3NjIGNoZWNrb3V0cworICAgICAgICByZWxwYXRoID0gc2VsZi5fc3RyaXBfbGVhZGluZ19zbGFzaGVzKHVkLnBhdGgpCisgICAgICAgIHVkLnBrZ2RpciA9IG9zLnBhdGguam9pbihkYXRhLmV4cGFuZCgnJHtPU0NESVJ9JywgZCksIHVkLmhvc3QpCisgICAgICAgIHVkLm1vZGRpciA9IG9zLnBhdGguam9pbih1ZC5wa2dkaXIsIHJlbHBhdGgsIHVkLm1vZHVsZSkKKworICAgICAgICBpZiAncmV2JyBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgdWQucmV2aXNpb24gPSB1ZC5wYXJtWydyZXYnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHYgPSBkYXRhLmdldFZhcigiUFYiLCBkLCAwKQorICAgICAgICAgICAgcmV2ID0gYmIuZmV0Y2gyLnNyY3Jldl9pbnRlcm5hbF9oZWxwZXIodWQsIGQpCisgICAgICAgICAgICBpZiByZXYgYW5kIHJldiAhPSBUcnVlOgorICAgICAgICAgICAgICAgIHVkLnJldmlzaW9uID0gcmV2CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHVkLnJldmlzaW9uID0gIiIKKworICAgICAgICB1ZC5sb2NhbGZpbGUgPSBkYXRhLmV4cGFuZCgnJXNfJXNfJXMudGFyLmd6JyAlICh1ZC5tb2R1bGUucmVwbGFjZSgnLycsICcuJyksIHVkLnBhdGgucmVwbGFjZSgnLycsICcuJyksIHVkLnJldmlzaW9uKSwgZCkKKworICAgIGRlZiBfYnVpbGRvc2Njb21tYW5kKHNlbGYsIHVkLCBkLCBjb21tYW5kKToKKyAgICAgICAgIiIiCisgICAgICAgIEJ1aWxkIHVwIGFuIG9jcyBjb21tYW5kbGluZSBiYXNlZCBvbiB1ZAorICAgICAgICBjb21tYW5kIGlzICJmZXRjaCIsICJ1cGRhdGUiLCAiaW5mbyIKKyAgICAgICAgIiIiCisKKyAgICAgICAgYmFzZWNtZCA9IGRhdGEuZXhwYW5kKCcke0ZFVENIQ01EX29zY30nLCBkKQorCisgICAgICAgIHByb3RvID0gdWQucGFybS5nZXQoJ3Byb3RvY29sJywgJ29jcycpCisKKyAgICAgICAgb3B0aW9ucyA9IFtdCisKKyAgICAgICAgY29uZmlnID0gIi1jICVzIiAlIHNlbGYuZ2VuZXJhdGVfY29uZmlnKHVkLCBkKQorCisgICAgICAgIGlmIHVkLnJldmlzaW9uOgorICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQoIi1yICVzIiAlIHVkLnJldmlzaW9uKQorCisgICAgICAgIGNvcm9vdCA9IHNlbGYuX3N0cmlwX2xlYWRpbmdfc2xhc2hlcyh1ZC5wYXRoKQorCisgICAgICAgIGlmIGNvbW1hbmQgPT0gImZldGNoIjoKKyAgICAgICAgICAgIG9zY2NtZCA9ICIlcyAlcyBjbyAlcy8lcyAlcyIgJSAoYmFzZWNtZCwgY29uZmlnLCBjb3Jvb3QsIHVkLm1vZHVsZSwgIiAiLmpvaW4ob3B0aW9ucykpCisgICAgICAgIGVsaWYgY29tbWFuZCA9PSAidXBkYXRlIjoKKyAgICAgICAgICAgIG9zY2NtZCA9ICIlcyAlcyB1cCAlcyIgJSAoYmFzZWNtZCwgY29uZmlnLCAiICIuam9pbihvcHRpb25zKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIkludmFsaWQgb3NjIGNvbW1hbmQgJXMiICUgY29tbWFuZCwgdWQudXJsKQorCisgICAgICAgIHJldHVybiBvc2NjbWQKKworICAgIGRlZiBkb3dubG9hZChzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBGZXRjaCB1cmwKKyAgICAgICAgIiIiCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJGZXRjaDogY2hlY2tpbmcgZm9yIG1vZHVsZSBkaXJlY3RvcnkgJyIgKyB1ZC5tb2RkaXIgKyAiJyIpCisKKyAgICAgICAgaWYgb3MuYWNjZXNzKG9zLnBhdGguam9pbihkYXRhLmV4cGFuZCgnJHtPU0NESVJ9JywgZCksIHVkLnBhdGgsIHVkLm1vZHVsZSksIG9zLlJfT0spOgorICAgICAgICAgICAgb3NjdXBkYXRlY21kID0gc2VsZi5fYnVpbGRvc2Njb21tYW5kKHVkLCBkLCAidXBkYXRlIikKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJVcGRhdGUgIisgdWQudXJsKQorICAgICAgICAgICAgIyB1cGRhdGUgc291cmNlcyB0aGVyZQorICAgICAgICAgICAgb3MuY2hkaXIodWQubW9kZGlyKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSdW5uaW5nICVzIiwgb3NjdXBkYXRlY21kKQorICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIG9zY3VwZGF0ZWNtZCwgdWQudXJsKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQob3NjdXBkYXRlY21kLCBkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3NjZmV0Y2hjbWQgPSBzZWxmLl9idWlsZG9zY2NvbW1hbmQodWQsIGQsICJmZXRjaCIpCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiRmV0Y2ggIiArIHVkLnVybCkKKyAgICAgICAgICAgICMgY2hlY2sgb3V0IHNvdXJjZXMgdGhlcmUKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih1ZC5wa2dkaXIpCisgICAgICAgICAgICBvcy5jaGRpcih1ZC5wa2dkaXIpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJ1bm5pbmcgJXMiLCBvc2NmZXRjaGNtZCkKKyAgICAgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBvc2NmZXRjaGNtZCwgdWQudXJsKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQob3NjZmV0Y2hjbWQsIGQpCisKKyAgICAgICAgb3MuY2hkaXIob3MucGF0aC5qb2luKHVkLnBrZ2RpciArIHVkLnBhdGgpKQorICAgICAgICAjIHRhciB0aGVtIHVwIHRvIGEgZGVmaW5lZCBmaWxlbmFtZQorICAgICAgICBydW5mZXRjaGNtZCgidGFyIC1jemYgJXMgJXMiICUgKHVkLmxvY2FscGF0aCwgdWQubW9kdWxlKSwgZCwgY2xlYW51cCA9IFt1ZC5sb2NhbHBhdGhdKQorCisgICAgZGVmIHN1cHBvcnRzX3NyY3JldihzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgZ2VuZXJhdGVfY29uZmlnKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIEdlbmVyYXRlIGEgLm9zY3JjIHRvIGJlIHVzZWQgZm9yIHRoaXMgcnVuLgorICAgICAgICAiIiIKKworICAgICAgICBjb25maWdfcGF0aCA9IG9zLnBhdGguam9pbihkYXRhLmV4cGFuZCgnJHtPU0NESVJ9JywgZCksICJvc2NyYyIpCisgICAgICAgIGlmIChvcy5wYXRoLmV4aXN0cyhjb25maWdfcGF0aCkpOgorICAgICAgICAgICAgb3MucmVtb3ZlKGNvbmZpZ19wYXRoKQorCisgICAgICAgIGYgPSBvcGVuKGNvbmZpZ19wYXRoLCAndycpCisgICAgICAgIGYud3JpdGUoIltnZW5lcmFsXVxuIikKKyAgICAgICAgZi53cml0ZSgiYXBpc3J2ID0gJXNcbiIgJSB1ZC5ob3N0KQorICAgICAgICBmLndyaXRlKCJzY2hlbWUgPSBodHRwXG4iKQorICAgICAgICBmLndyaXRlKCJzdS13cmFwcGVyID0gc3UgLWNcbiIpCisgICAgICAgIGYud3JpdGUoImJ1aWxkLXJvb3QgPSAlc1xuIiAlIGRhdGEuZXhwYW5kKCcke1dPUktESVJ9JywgZCkpCisgICAgICAgIGYud3JpdGUoInVybGxpc3QgPSBodHRwOi8vbW9ibGluLW9icy5qZi5pbnRlbC5jb206ODg4OC9idWlsZC8lKHByb2plY3Qpcy8lKHJlcG9zaXRvcnkpcy8lKGJ1aWxkYXJjaClzLzpmdWxsLyUobmFtZSlzLnJwbVxuIikKKyAgICAgICAgZi53cml0ZSgiZXh0cmEtcGtncyA9IGd6aXBcbiIpCisgICAgICAgIGYud3JpdGUoIlxuIikKKyAgICAgICAgZi53cml0ZSgiWyVzXVxuIiAlIHVkLmhvc3QpCisgICAgICAgIGYud3JpdGUoInVzZXIgPSAlc1xuIiAlIHVkLnBhcm1bInVzZXIiXSkKKyAgICAgICAgZi53cml0ZSgicGFzcyA9ICVzXG4iICUgdWQucGFybVsicHN3ZCJdKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICByZXR1cm4gY29uZmlnX3BhdGgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3BlcmZvcmNlLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvcGVyZm9yY2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ExMGM3YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3BlcmZvcmNlLnB5CkBAIC0wLDAgKzEsMTg3IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdGZXRjaCcgaW1wbGVtZW50YXRpb25zCisKK0NsYXNzZXMgZm9yIG9idGFpbmluZyB1cHN0cmVhbSBzb3VyY2VzIGZvciB0aGUKK0JpdEJha2UgYnVpbGQgdG9vbHMuCisKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBCYXNlZCBvbiBmdW5jdGlvbnMgZnJvbSB0aGUgYmFzZSBiYiBtb2R1bGUsIENvcHlyaWdodCAyMDAzIEhvbGdlciBTY2h1cmlnCisKK2Zyb20gZnV0dXJlX2J1aWx0aW5zIGltcG9ydCB6aXAKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYmIKK2Zyb20gICBiYiBpbXBvcnQgZGF0YQorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hNZXRob2QKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IEZldGNoRXJyb3IKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IGxvZ2dlcgorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgcnVuZmV0Y2hjbWQKKworY2xhc3MgUGVyZm9yY2UoRmV0Y2hNZXRob2QpOgorICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1ZCwgZCk6CisgICAgICAgIHJldHVybiB1ZC50eXBlIGluIFsncDQnXQorCisgICAgZGVmIGRvcGFyc2UodXJsLCBkKToKKyAgICAgICAgcGFybSA9IHt9CisgICAgICAgIHBhdGggPSB1cmwuc3BsaXQoIjovLyIpWzFdCisgICAgICAgIGRlbGltID0gcGF0aC5maW5kKCJAIik7CisgICAgICAgIGlmIGRlbGltICE9IC0xOgorICAgICAgICAgICAgKHVzZXIsIHBzd2QsIGhvc3QsIHBvcnQpID0gcGF0aC5zcGxpdCgnQCcpWzBdLnNwbGl0KCI6IikKKyAgICAgICAgICAgIHBhdGggPSBwYXRoLnNwbGl0KCdAJylbMV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIChob3N0LCBwb3J0KSA9IGQuZ2V0VmFyKCdQNFBPUlQnLCBGYWxzZSkuc3BsaXQoJzonKQorICAgICAgICAgICAgdXNlciA9ICIiCisgICAgICAgICAgICBwc3dkID0gIiIKKworICAgICAgICBpZiBwYXRoLmZpbmQoIjsiKSAhPSAtMToKKyAgICAgICAgICAgIGtleXM9W10KKyAgICAgICAgICAgIHZhbHVlcz1bXQorICAgICAgICAgICAgcGxpc3QgPSBwYXRoLnNwbGl0KCc7JykKKyAgICAgICAgICAgIGZvciBpdGVtIGluIHBsaXN0OgorICAgICAgICAgICAgICAgIGlmIGl0ZW0uY291bnQoJz0nKToKKyAgICAgICAgICAgICAgICAgICAgKGtleSwgdmFsdWUpID0gaXRlbS5zcGxpdCgnPScpCisgICAgICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKGtleSkKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCh2YWx1ZSkKKworICAgICAgICAgICAgcGFybSA9IGRpY3QoemlwKGtleXMsIHZhbHVlcykpCisgICAgICAgIHBhdGggPSAiLy8iICsgcGF0aC5zcGxpdCgnOycpWzBdCisgICAgICAgIGhvc3QgKz0gIjolcyIgJSAocG9ydCkKKyAgICAgICAgcGFybVsiY3NldCJdID0gUGVyZm9yY2UuZ2V0Y3NldChkLCBwYXRoLCBob3N0LCB1c2VyLCBwc3dkLCBwYXJtKQorCisgICAgICAgIHJldHVybiBob3N0LCBwYXRoLCB1c2VyLCBwc3dkLCBwYXJtCisgICAgZG9wYXJzZSA9IHN0YXRpY21ldGhvZChkb3BhcnNlKQorCisgICAgZGVmIGdldGNzZXQoZCwgZGVwb3QsIGhvc3QsIHVzZXIsIHBzd2QsIHBhcm0pOgorICAgICAgICBwNG9wdCA9ICIiCisgICAgICAgIGlmICJjc2V0IiBpbiBwYXJtOgorICAgICAgICAgICAgcmV0dXJuIHBhcm1bImNzZXQiXTsKKyAgICAgICAgaWYgdXNlcjoKKyAgICAgICAgICAgIHA0b3B0ICs9ICIgLXUgJXMiICUgKHVzZXIpCisgICAgICAgIGlmIHBzd2Q6CisgICAgICAgICAgICBwNG9wdCArPSAiIC1QICVzIiAlIChwc3dkKQorICAgICAgICBpZiBob3N0OgorICAgICAgICAgICAgcDRvcHQgKz0gIiAtcCAlcyIgJSAoaG9zdCkKKworICAgICAgICBwNGRhdGUgPSBkLmdldFZhcigiUDREQVRFIiwgVHJ1ZSkKKyAgICAgICAgaWYgInJldmlzaW9uIiBpbiBwYXJtOgorICAgICAgICAgICAgZGVwb3QgKz0gIiMlcyIgJSAocGFybVsicmV2aXNpb24iXSkKKyAgICAgICAgZWxpZiAibGFiZWwiIGluIHBhcm06CisgICAgICAgICAgICBkZXBvdCArPSAiQCVzIiAlIChwYXJtWyJsYWJlbCJdKQorICAgICAgICBlbGlmIHA0ZGF0ZToKKyAgICAgICAgICAgIGRlcG90ICs9ICJAJXMiICUgKHA0ZGF0ZSkKKworICAgICAgICBwNGNtZCA9IGQuZ2V0VmFyKCdGRVRDSENNRF9wNCcsIFRydWUpIG9yICJwNCIKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSdW5uaW5nICVzJXMgY2hhbmdlcyAtbSAxICVzIiwgcDRjbWQsIHA0b3B0LCBkZXBvdCkKKyAgICAgICAgcDRmaWxlLCBlcnJvcnMgPSBiYi5wcm9jZXNzLnJ1bigiJXMlcyBjaGFuZ2VzIC1tIDEgJXMiICUgKHA0Y21kLCBwNG9wdCwgZGVwb3QpKQorICAgICAgICBjc2V0ID0gcDRmaWxlLnN0cmlwKCkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSRUFEICVzIiwgY3NldCkKKyAgICAgICAgaWYgbm90IGNzZXQ6CisgICAgICAgICAgICByZXR1cm4gLTEKKworICAgICAgICByZXR1cm4gY3NldC5zcGxpdCgnICcpWzFdCisgICAgZ2V0Y3NldCA9IHN0YXRpY21ldGhvZChnZXRjc2V0KQorCisgICAgZGVmIHVybGRhdGFfaW5pdChzZWxmLCB1ZCwgZCk6CisgICAgICAgIChob3N0LCBwYXRoLCB1c2VyLCBwc3dkLCBwYXJtKSA9IFBlcmZvcmNlLmRvcGFyc2UodWQudXJsLCBkKQorCisgICAgICAgIGJhc2VfcGF0aCA9IHBhdGgucmVwbGFjZSgnLy4uLicsICcnKQorICAgICAgICBiYXNlX3BhdGggPSBzZWxmLl9zdHJpcF9sZWFkaW5nX3NsYXNoZXMoYmFzZV9wYXRoKQorICAgICAgICAKKyAgICAgICAgaWYgImxhYmVsIiBpbiBwYXJtOgorICAgICAgICAgICAgdmVyc2lvbiA9IHBhcm1bImxhYmVsIl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZlcnNpb24gPSBQZXJmb3JjZS5nZXRjc2V0KGQsIHBhdGgsIGhvc3QsIHVzZXIsIHBzd2QsIHBhcm0pCisKKyAgICAgICAgdWQubG9jYWxmaWxlID0gZGF0YS5leHBhbmQoJyVzKyVzKyVzLnRhci5neicgJSAoaG9zdCwgYmFzZV9wYXRoLnJlcGxhY2UoJy8nLCAnLicpLCB2ZXJzaW9uKSwgZCkKKworICAgIGRlZiBkb3dubG9hZChzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBGZXRjaCB1cmxzCisgICAgICAgICIiIgorCisgICAgICAgIChob3N0LCBkZXBvdCwgdXNlciwgcHN3ZCwgcGFybSkgPSBQZXJmb3JjZS5kb3BhcnNlKHVkLnVybCwgZCkKKworICAgICAgICBpZiBkZXBvdC5maW5kKCcvLi4uJykgIT0gLTE6CisgICAgICAgICAgICBwYXRoID0gZGVwb3RbOmRlcG90LmZpbmQoJy8uLi4nKV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhdGggPSBkZXBvdFs6ZGVwb3QucmZpbmQoJy8nKV0KKworICAgICAgICBtb2R1bGUgPSBwYXJtLmdldCgnbW9kdWxlJywgb3MucGF0aC5iYXNlbmFtZShwYXRoKSkKKworICAgICAgICAjIEdldCB0aGUgcDQgY29tbWFuZAorICAgICAgICBwNG9wdCA9ICIiCisgICAgICAgIGlmIHVzZXI6CisgICAgICAgICAgICBwNG9wdCArPSAiIC11ICVzIiAlICh1c2VyKQorCisgICAgICAgIGlmIHBzd2Q6CisgICAgICAgICAgICBwNG9wdCArPSAiIC1QICVzIiAlIChwc3dkKQorCisgICAgICAgIGlmIGhvc3Q6CisgICAgICAgICAgICBwNG9wdCArPSAiIC1wICVzIiAlIChob3N0KQorCisgICAgICAgIHA0Y21kID0gZC5nZXRWYXIoJ0ZFVENIQ01EX3A0JywgVHJ1ZSkgb3IgInA0IgorCisgICAgICAgICMgY3JlYXRlIHRlbXAgZGlyZWN0b3J5CisgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiRmV0Y2g6IGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkiKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZC5leHBhbmQoJyR7V09SS0RJUn0nKSkKKyAgICAgICAgbWt0ZW1wID0gZC5nZXRWYXIoIkZFVENIQ01EX3A0bWt0ZW1wIiwgVHJ1ZSkgb3IgZC5leHBhbmQoIm1rdGVtcCAtZCAtcSAnJHtXT1JLRElSfS9vZXA0LlhYWFhYWCciKQorICAgICAgICB0bXBmaWxlLCBlcnJvcnMgPSBiYi5wcm9jZXNzLnJ1bihta3RlbXApCisgICAgICAgIHRtcGZpbGUgPSB0bXBmaWxlLnN0cmlwKCkKKyAgICAgICAgaWYgbm90IHRtcGZpbGU6CisgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJGZXRjaDogdW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5Li4gbWFrZSBzdXJlICdta3RlbXAnIGlzIGluIHRoZSBQQVRILiIsIHVkLnVybCkKKworICAgICAgICBpZiAibGFiZWwiIGluIHBhcm06CisgICAgICAgICAgICBkZXBvdCA9ICIlc0AlcyIgJSAoZGVwb3QsIHBhcm1bImxhYmVsIl0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjc2V0ID0gUGVyZm9yY2UuZ2V0Y3NldChkLCBkZXBvdCwgaG9zdCwgdXNlciwgcHN3ZCwgcGFybSkKKyAgICAgICAgICAgIGRlcG90ID0gIiVzQCVzIiAlIChkZXBvdCwgY3NldCkKKworICAgICAgICBvcy5jaGRpcih0bXBmaWxlKQorICAgICAgICBsb2dnZXIuaW5mbygiRmV0Y2ggIiArIHVkLnVybCkKKyAgICAgICAgbG9nZ2VyLmluZm8oIiVzJXMgZmlsZXMgJXMiLCBwNGNtZCwgcDRvcHQsIGRlcG90KQorICAgICAgICBwNGZpbGUsIGVycm9ycyA9IGJiLnByb2Nlc3MucnVuKCIlcyVzIGZpbGVzICVzIiAlIChwNGNtZCwgcDRvcHQsIGRlcG90KSkKKyAgICAgICAgcDRmaWxlID0gW2YucnN0cmlwKCkgZm9yIGYgaW4gcDRmaWxlLnNwbGl0bGluZXMoKV0KKworICAgICAgICBpZiBub3QgcDRmaWxlOgorICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiRmV0Y2g6IHVuYWJsZSB0byBnZXQgdGhlIFA0IGZpbGVzIGZyb20gJXMiICUgZGVwb3QsIHVkLnVybCkKKworICAgICAgICBjb3VudCA9IDAKKworICAgICAgICBmb3IgZmlsZSBpbiBwNGZpbGU6CisgICAgICAgICAgICBsaXN0ID0gZmlsZS5zcGxpdCgpCisKKyAgICAgICAgICAgIGlmIGxpc3RbMl0gPT0gImRlbGV0ZSI6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZGVzdCA9IGxpc3RbMF1bbGVuKHBhdGgpKzE6XQorICAgICAgICAgICAgd2hlcmUgPSBkZXN0LmZpbmQoIiMiKQorCisgICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoIiVzJXMgcHJpbnQgLW8gJXMvJXMgJXMiICUgKHA0Y21kLCBwNG9wdCwgbW9kdWxlLCBkZXN0Wzp3aGVyZV0sIGxpc3RbMF0pLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgY291bnQgPSBjb3VudCArIDEKKworICAgICAgICBpZiBjb3VudCA9PSAwOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCkKKyAgICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIkZldGNoOiBObyBmaWxlcyBnYXRoZXJlZCBmcm9tIHRoZSBQNCBmZXRjaCIsIHVkLnVybCkKKworICAgICAgICBydW5mZXRjaGNtZCgidGFyIC1jemYgJXMgJXMiICUgKHVkLmxvY2FscGF0aCwgbW9kdWxlKSwgZCwgY2xlYW51cCA9IFt1ZC5sb2NhbHBhdGhdKQorICAgICAgICAjIGNsZWFudXAKKyAgICAgICAgYmIudXRpbHMucHJ1bmVkaXIodG1wZmlsZSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3JlcG8ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9yZXBvLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNjc4ZWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9yZXBvLnB5CkBAIC0wLDAgKzEsOTggQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgIkZldGNoIiByZXBvIChnaXQpIGltcGxlbWVudGF0aW9uCisKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwOSBUb20gUmluaSA8dHJpbmlAZW1iZWRkZWRhbGxleS5jb20+CisjCisjIEJhc2VkIG9uIGdpdC5weSB3aGljaCBpczoKKyNDb3B5cmlnaHQgKEMpIDIwMDUgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBvcworaW1wb3J0IGJiCitmcm9tICAgYmIgICAgaW1wb3J0IGRhdGEKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IEZldGNoTWV0aG9kCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAorCitjbGFzcyBSZXBvKEZldGNoTWV0aG9kKToKKyAgICAiIiJDbGFzcyB0byBmZXRjaCBhIG1vZHVsZSBvciBtb2R1bGVzIGZyb20gcmVwbyAoZ2l0KSByZXBvc2l0b3JpZXMiIiIKKyAgICBkZWYgc3VwcG9ydHMoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgdG8gc2VlIGlmIGEgZ2l2ZW4gdXJsIGNhbiBiZSBmZXRjaGVkIHdpdGggcmVwby4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiB1ZC50eXBlIGluIFsicmVwbyJdCisKKyAgICBkZWYgdXJsZGF0YV9pbml0KHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIFdlIGRvbiJ0IGNhcmUgYWJvdXQgdGhlIGdpdCByZXYgb2YgdGhlIG1hbmlmZXN0cyByZXBvc2l0b3J5LCBidXQKKyAgICAgICAgd2UgZG8gY2FyZSBhYm91dCB0aGUgbWFuaWZlc3QgdG8gdXNlLiAgVGhlIGRlZmF1bHQgaXMgImRlZmF1bHQiLgorICAgICAgICBXZSBhbHNvIGNhcmUgYWJvdXQgdGhlIGJyYW5jaCBvciB0YWcgdG8gYmUgdXNlZC4gIFRoZSBkZWZhdWx0IGlzCisgICAgICAgICJtYXN0ZXIiLgorICAgICAgICAiIiIKKworICAgICAgICB1ZC5wcm90byA9IHVkLnBhcm0uZ2V0KCdwcm90b2NvbCcsICdnaXQnKQorICAgICAgICB1ZC5icmFuY2ggPSB1ZC5wYXJtLmdldCgnYnJhbmNoJywgJ21hc3RlcicpCisgICAgICAgIHVkLm1hbmlmZXN0ID0gdWQucGFybS5nZXQoJ21hbmlmZXN0JywgJ2RlZmF1bHQueG1sJykKKyAgICAgICAgaWYgbm90IHVkLm1hbmlmZXN0LmVuZHN3aXRoKCcueG1sJyk6CisgICAgICAgICAgICB1ZC5tYW5pZmVzdCArPSAnLnhtbCcKKworICAgICAgICB1ZC5sb2NhbGZpbGUgPSBkYXRhLmV4cGFuZCgicmVwb18lcyVzXyVzXyVzLnRhci5neiIgJSAodWQuaG9zdCwgdWQucGF0aC5yZXBsYWNlKCIvIiwgIi4iKSwgdWQubWFuaWZlc3QsIHVkLmJyYW5jaCksIGQpCisKKyAgICBkZWYgZG93bmxvYWQoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiJGZXRjaCB1cmwiIiIKKworICAgICAgICBpZiBvcy5hY2Nlc3Mob3MucGF0aC5qb2luKGRhdGEuZ2V0VmFyKCJETF9ESVIiLCBkLCBUcnVlKSwgdWQubG9jYWxmaWxlKSwgb3MuUl9PSyk6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIiVzIGFscmVhZHkgZXhpc3RzIChvciB3YXMgc3Rhc2hlZCkuIFNraXBwaW5nIHJlcG8gaW5pdCAvIHN5bmMuIiwgdWQubG9jYWxwYXRoKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZ2l0c3JjbmFtZSA9ICIlcyVzIiAlICh1ZC5ob3N0LCB1ZC5wYXRoLnJlcGxhY2UoIi8iLCAiLiIpKQorICAgICAgICByZXBvZGlyID0gZGF0YS5nZXRWYXIoIlJFUE9ESVIiLCBkLCBUcnVlKSBvciBvcy5wYXRoLmpvaW4oZGF0YS5nZXRWYXIoIkRMX0RJUiIsIGQsIFRydWUpLCAicmVwbyIpCisgICAgICAgIGNvZGlyID0gb3MucGF0aC5qb2luKHJlcG9kaXIsIGdpdHNyY25hbWUsIHVkLm1hbmlmZXN0KQorCisgICAgICAgIGlmIHVkLnVzZXI6CisgICAgICAgICAgICB1c2VybmFtZSA9IHVkLnVzZXIgKyAiQCIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVzZXJuYW1lID0gIiIKKworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKGNvZGlyLCAicmVwbyIpKQorICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmpvaW4oY29kaXIsICJyZXBvIikpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oY29kaXIsICJyZXBvIiwgIi5yZXBvIikpOgorICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsICJyZXBvIGluaXQgLW0gJXMgLWIgJXMgLXUgJXM6Ly8lcyVzJXMiICUgKHVkLm1hbmlmZXN0LCB1ZC5icmFuY2gsIHVkLnByb3RvLCB1c2VybmFtZSwgdWQuaG9zdCwgdWQucGF0aCksIHVkLnVybCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCJyZXBvIGluaXQgLW0gJXMgLWIgJXMgLXUgJXM6Ly8lcyVzJXMiICUgKHVkLm1hbmlmZXN0LCB1ZC5icmFuY2gsIHVkLnByb3RvLCB1c2VybmFtZSwgdWQuaG9zdCwgdWQucGF0aCksIGQpCisKKyAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsICJyZXBvIHN5bmMgJXMiICUgdWQudXJsLCB1ZC51cmwpCisgICAgICAgIHJ1bmZldGNoY21kKCJyZXBvIHN5bmMiLCBkKQorICAgICAgICBvcy5jaGRpcihjb2RpcikKKworICAgICAgICBzY21kYXRhID0gdWQucGFybS5nZXQoInNjbWRhdGEiLCAiIikKKyAgICAgICAgaWYgc2NtZGF0YSA9PSAia2VlcCI6CisgICAgICAgICAgICB0YXJfZmxhZ3MgPSAiIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGFyX2ZsYWdzID0gIi0tZXhjbHVkZSAnLnJlcG8nIC0tZXhjbHVkZSAnLmdpdCciCisKKyAgICAgICAgIyBDcmVhdGUgYSBjYWNoZQorICAgICAgICBydW5mZXRjaGNtZCgidGFyICVzIC1jemYgJXMgJXMiICUgKHRhcl9mbGFncywgdWQubG9jYWxwYXRoLCBvcy5wYXRoLmpvaW4oIi4iLCAiKiIpICksIGQpCisKKyAgICBkZWYgc3VwcG9ydHNfc3JjcmV2KHNlbGYpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfYnVpbGRfcmV2aXNpb24oc2VsZiwgdWQsIGQpOgorICAgICAgICByZXR1cm4gdWQubWFuaWZlc3QKKworICAgIGRlZiBfd2FudF9zb3J0YWJsZV9yZXZpc2lvbihzZWxmLCB1ZCwgZCk6CisgICAgICAgIHJldHVybiBGYWxzZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvc2Z0cC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3NmdHAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IyZjc1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3NmdHAucHkKQEAgLTAsMCArMSwxMjkgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgU0ZUUCBGZXRjaCBpbXBsZW1lbnRhdGlvbgorCitDbGFzcyBmb3IgZmV0Y2hpbmcgZmlsZXMgdmlhIFNGVFAuIEl0IHRyaWVzIHRvIGFkaGVyZSB0byB0aGUgKG5vdworZXhwaXJlZCkgSUVURiBJbnRlcm5ldCBEcmFmdCBmb3IgIlVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKQorU2NoZW1lIGZvciBTZWN1cmUgRmlsZSBUcmFuc2ZlciBQcm90b2NvbCAoU0ZUUCkgYW5kIFNlY3VyZSBTaGVsbAorKFNTSCkiIChTRUNTSCBVUkkpLgorCitJdCB1c2VzIFNGVFAgKGFzIHRvIGFkaGVyZSB0byB0aGUgU0VDU0ggVVJJIHNwZWNpZmljYXRpb24pLiBJdCBvbmx5CitzdXBwb3J0cyBrZXkgYmFzZWQgYXV0aGVudGljYXRpb24sIG5vdCBwYXNzd29yZC4gVGhpcyBjbGFzcywgdW5saWtlCit0aGUgU1NIIGZldGNoZXIsIGRvZXMgbm90IHN1cHBvcnQgZmV0Y2hpbmcgYSBkaXJlY3RvcnkgdHJlZSBmcm9tIHRoZQorcmVtb3RlLgorCisgIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtc2Vjc2gtc2NwLXNmdHAtc3NoLXVyaS0wNAorICBodHRwczovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy91cmktc2NoZW1lcy9wcm92L3NmdHAKKyAgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtc2Vjc2gtZmlsZXhmZXItMTMKKworUGxlYXNlIG5vdGUgdGhhdCAnLycgaXMgdXNlZCBhcyBob3N0IHBhdGggc2VwZXJhdG9yLCBhbmQgbm90ICI6IgorYXMgeW91IG1heSBiZSB1c2VkIHRvIGZyb20gdGhlIHNjcC9zZnRwIGNvbW1hbmRzLiBZb3UgY2FuIHVzZSBhCit+ICh0aWxkZSkgdG8gc3BlY2lmeSBhIHBhdGggcmVsYXRpdmUgdG8geW91ciBob21lIGRpcmVjdG9yeS4KKyhUaGUgL351c2VyLyBzeW50YXgsIGZvciBzcGVjeWZpbmcgYSBwYXRoIHJlbGF0aXZlIHRvIGFub3RoZXIKK3VzZXIncyBob21lIGRpcmVjdG9yeSBpcyBub3Qgc3VwcG9ydGVkLikgTm90ZSB0aGF0IHRoZSB0aWxkZSBtdXN0CitzdGlsbCBmb2xsb3cgdGhlIGhvc3QgcGF0aCBzZXBlcmF0b3IgKCIvIikuIFNlZSBleGFtcGVscyBiZWxvdy4KKworRXhhbXBsZSBTUkNfVVJJczoKKworU1JDX1VSSSA9ICJzZnRwOi8vaG9zdC5leGFtcGxlLmNvbS9kaXIvcGF0aC5maWxlLnR4dCIKKworQSBwYXRoIHJlbGF0aXZlIHRvIHlvdXIgaG9tZSBkaXJlY3RvcnkuCisKK1NSQ19VUkkgPSAic2Z0cDovL2hvc3QuZXhhbXBsZS5jb20vfi9kaXIvcGF0aC5maWxlLnR4dCIKKworWW91IGNhbiBhbHNvIHNwZWNpZnkgYSB1c2VybmFtZSAoc3BlY3lmaW5nIHBhc3N3b3JkIGluIHRoZQorVVJJIGlzIG5vdCBzdXBwb3J0ZWQsIHVzZSBTU0gga2V5cyB0byBhdXRoZW50aWNhdGUpOgorCitTUkNfVVJJID0gInNmdHA6Ly91c2VyQGhvc3QuZXhhbXBsZS5jb20vZGlyL3BhdGguZmlsZS50eHQiCisKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAxMywgT2xvZiBKb2hhbnNzb24gPG9sb2Yuam9oYW5zc29uQGF4aXMuY29tPgorIworIyBCYXNlZCBpbiBwYXJ0IG9uIGJiLmZldGNoMi53Z2V0OgorIyAgICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIENocmlzIExhcnNvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgQmFzZWQgb24gZnVuY3Rpb25zIGZyb20gdGhlIGJhc2UgYmIgbW9kdWxlLCBDb3B5cmlnaHQgMjAwMyBIb2xnZXIgU2NodXJpZworCitpbXBvcnQgb3MKK2ltcG9ydCBiYgoraW1wb3J0IHVybGxpYgoraW1wb3J0IGNvbW1hbmRzCitmcm9tIGJiIGltcG9ydCBkYXRhCitmcm9tIGJiLmZldGNoMiBpbXBvcnQgVVJJCitmcm9tIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hNZXRob2QKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAorCisKK2NsYXNzIFNGVFAoRmV0Y2hNZXRob2QpOgorICAgICIiIkNsYXNzIHRvIGZldGNoIHVybHMgdmlhICdzZnRwJyIiIgorCisgICAgZGVmIHN1cHBvcnRzKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRvIHNlZSBpZiBhIGdpdmVuIHVybCBjYW4gYmUgZmV0Y2hlZCB3aXRoIHNmdHAuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gdWQudHlwZSBpbiBbJ3NmdHAnXQorCisgICAgZGVmIHJlY29tbWVuZHNfY2hlY2tzdW0oc2VsZiwgdXJsZGF0YSk6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgdXJsZGF0YV9pbml0KHNlbGYsIHVkLCBkKToKKyAgICAgICAgaWYgJ3Byb3RvY29sJyBpbiB1ZC5wYXJtIGFuZCB1ZC5wYXJtWydwcm90b2NvbCddID09ICdnaXQnOgorICAgICAgICAgICAgcmFpc2UgYmIuZmV0Y2gyLlBhcmFtZXRlckVycm9yKAorICAgICAgICAgICAgICAgICJJbnZhbGlkIHByb3RvY29sIC0gaWYgeW91IHdpc2ggdG8gZmV0Y2ggZnJvbSBhICIgKworICAgICAgICAgICAgICAgICJnaXQgcmVwb3NpdG9yeSB1c2luZyBzc2gsIHlvdSBuZWVkIHRvIHVzZSB0aGUgIiArCisgICAgICAgICAgICAgICAgImdpdDovLyBwcmVmaXggd2l0aCBwcm90b2NvbD1zc2giLCB1ZC51cmwpCisKKyAgICAgICAgaWYgJ2Rvd25sb2FkZmlsZW5hbWUnIGluIHVkLnBhcm06CisgICAgICAgICAgICB1ZC5iYXNlbmFtZSA9IHVkLnBhcm1bJ2Rvd25sb2FkZmlsZW5hbWUnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdWQuYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHVkLnBhdGgpCisKKyAgICAgICAgdWQubG9jYWxmaWxlID0gZGF0YS5leHBhbmQodXJsbGliLnVucXVvdGUodWQuYmFzZW5hbWUpLCBkKQorCisgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiRmV0Y2ggdXJscyIiIgorCisgICAgICAgIHVybG8gPSBVUkkodWQudXJsKQorICAgICAgICBiYXNlY21kID0gJ3NmdHAgLW9CYXRjaE1vZGU9eWVzJworICAgICAgICBwb3J0ID0gJycKKyAgICAgICAgaWYgdXJsby5wb3J0OgorICAgICAgICAgICAgcG9ydCA9ICctUCAlZCcgJSB1cmxvLnBvcnQKKyAgICAgICAgICAgIHVybG8ucG9ydCA9IE5vbmUKKworICAgICAgICBkbGRpciA9IGRhdGEuZ2V0VmFyKCdETF9ESVInLCBkLCBUcnVlKQorICAgICAgICBscGF0aCA9IG9zLnBhdGguam9pbihkbGRpciwgdWQubG9jYWxmaWxlKQorCisgICAgICAgIHVzZXIgPSAnJworICAgICAgICBpZiB1cmxvLnVzZXJpbmZvOgorICAgICAgICAgICAgdXNlciA9IHVybG8udXNlcmluZm8gKyAnQCcKKworICAgICAgICBwYXRoID0gdXJsby5wYXRoCisKKyAgICAgICAgIyBTdXBvcHJ0IFVSSXMgcmVsYXRpdmUgdG8gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSwgd2l0aAorICAgICAgICAjIHRoZSB0aWxkZSBzeW50YXguIChFLmcuIDxzZnRwOi8vZXhhbXBsZS5jb20vfi9mb28uZGlmZj4pLgorICAgICAgICBpZiBwYXRoWzozXSA9PSAnL34vJzoKKyAgICAgICAgICAgIHBhdGggPSBwYXRoWzM6XQorCisgICAgICAgIHJlbW90ZSA9ICclcyVzOiVzJyAlICh1c2VyLCB1cmxvLmhvc3RuYW1lLCBwYXRoKQorCisgICAgICAgIGNtZCA9ICclcyAlcyAlcyAlcycgJSAoYmFzZWNtZCwgcG9ydCwgY29tbWFuZHMubWthcmcocmVtb3RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kcy5ta2FyZyhscGF0aCkpCisKKyAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIGNtZCwgdWQudXJsKQorICAgICAgICBydW5mZXRjaGNtZChjbWQsIGQpCisgICAgICAgIHJldHVybiBUcnVlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9zc2gucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9zc2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM1NTc4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3NzaC5weQpAQCAtMCwwICsxLDEyOCBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKycnJworQml0QmFrZSAnRmV0Y2gnIGltcGxlbWVudGF0aW9ucworCitUaGlzIGltcGxlbWVudGF0aW9uIGlzIGZvciBTZWN1cmUgU2hlbGwgKFNTSCksIGFuZCBhdHRlbXB0cyB0byBjb21wbHkgd2l0aCB0aGUKK0lFVEYgc2Vjc2ggaW50ZXJuZXQgZHJhZnQ6CisgICAgaHR0cDovL3Rvb2xzLmlldGYub3JnL3dnL3NlY3NoL2RyYWZ0LWlldGYtc2Vjc2gtc2NwLXNmdHAtc3NoLXVyaS8KKworICAgIEN1cnJlbnRseSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBzZnRwIHBhcmFtZXRlcnMsIGFzIHRoaXMgdXNlcyBzY3AKKyAgICBBbHNvIGRvZXMgbm90IHN1cHBvcnQgdGhlICdmaW5nZXJwcmludCcgY29ubmVjdGlvbiBwYXJhbWV0ZXIuCisKKyAgICBQbGVhc2Ugbm90ZSB0aGF0ICcvJyBpcyB1c2VkIGFzIGhvc3QsIHBhdGggc2VwYXJhdG9yIG5vdCAnOicgYXMgeW91IG1heSAKKyAgICBiZSB1c2VkIHRvLCBhbHNvICd+JyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHVzZXIgSE9NRSwgYnV0IGFnYWluIGFmdGVyICcvJworICAgIAorICAgIEV4YW1wbGUgU1JDX1VSSToKKyAgICBTUkNfVVJJID0gInNzaDovL3VzZXJAaG9zdC5leGFtcGxlLmNvbS9kaXIvcGF0aC9maWxlLnR4dCIKKyAgICBTUkNfVVJJID0gInNzaDovL3VzZXJAaG9zdC5leGFtcGxlLmNvbS9+L2ZpbGUudHh0IgorJycnCisKKyMgQ29weXJpZ2h0IChDKSAyMDA2ICBPcGVuZWRIYW5kIEx0ZC4KKyMKKyMKKyMgQmFzZWQgaW4gcGFydCBvbiBzdmsucHk6CisjICAgIENvcHlyaWdodCAoQykgMjAwNiBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorIyAgICBCYXNlZCBvbiBzdm4ucHk6CisjICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIENocmlzIExhcnNvbgorIyAgICAgICAgQmFzZWQgb24gZnVuY3Rpb25zIGZyb20gdGhlIGJhc2UgYmIgbW9kdWxlOgorIyAgICAgICAgICAgIENvcHlyaWdodCAyMDAzIEhvbGdlciBTY2h1cmlnCisjCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgcmUsIG9zCitmcm9tICAgYmIgaW1wb3J0IGRhdGEKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IEZldGNoTWV0aG9kCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBGZXRjaEVycm9yCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBsb2dnZXIKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IHJ1bmZldGNoY21kCisKKworX19wYXR0ZXJuX18gPSByZS5jb21waWxlKHInJycKKyBccyogICAgICAgICAgICAgICAgICMgU2tpcCBsZWFkaW5nIHdoaXRlc3BhY2UKKyBzc2g6Ly8gICAgICAgICAgICAgICMgc2NoZW1lCisgKCAgICAgICAgICAgICAgICAgICAjIE9wdGlvbmFsIHVzZXJuYW1lL3Bhc3N3b3JkIGJsb2NrCisgICg/UDx1c2VyPlxTKykgICAgICAjIHVzZXJuYW1lCisgICg6KD9QPHBhc3M+XFMrKSk/ICAjIGNvbG9uIGZvbGxvd2VkIGJ5IHRoZSBwYXNzd29yZCAob3B0aW9uYWwpCisgKT8KKyAoP1A8Y3BhcmFtPig7W147XSspKik/ICAjIGNvbm5lY3Rpb24gcGFyYW1ldGVycyBibG9jayAob3B0aW9uYWwpCisgQAorICg/UDxob3N0PlxTKz8pICAgICAgICAgICMgbm9uLWdyZWVkeSBtYXRjaCBvZiB0aGUgaG9zdAorICg6KD9QPHBvcnQ+WzAtOV0rKSk/ICAgICMgY29sb24gZm9sbG93ZWQgYnkgdGhlIHBvcnQgKG9wdGlvbmFsKQorIC8KKyAoP1A8cGF0aD5bXjtdKykgICAgICAgICAjIHBhdGggb24gdGhlIHJlbW90ZSBzeXN0ZW0sIG1heSBiZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAjIGFuZCBtYXkgaW5jbHVkZSB0aGUgdXNlIG9mICd+JyB0byByZWZlcmVuY2UgdGhlIHJlbW90ZSBob21lCisgICAgICAgICAgICAgICAgICAgICAgICAgIyBkaXJlY3RvcnkKKyAoP1A8c3BhcmFtPig7W147XSspKik/ICAjIHBhcmFtZXRlcnMgYmxvY2sgKG9wdGlvbmFsKQorICQKKycnJywgcmUuVkVSQk9TRSkKKworY2xhc3MgU1NIKEZldGNoTWV0aG9kKToKKyAgICAnJydDbGFzcyB0byBmZXRjaCBhIG1vZHVsZSBvciBtb2R1bGVzIHZpYSBTZWN1cmUgU2hlbGwnJycKKworICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1cmxkYXRhLCBkKToKKyAgICAgICAgcmV0dXJuIF9fcGF0dGVybl9fLm1hdGNoKHVybGRhdGEudXJsKSAhPSBOb25lCisKKyAgICBkZWYgc3VwcG9ydHNfY2hlY2tzdW0oc2VsZiwgdXJsZGF0YSk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHVybGRhdGFfaW5pdChzZWxmLCB1cmxkYXRhLCBkKToKKyAgICAgICAgaWYgJ3Byb3RvY29sJyBpbiB1cmxkYXRhLnBhcm0gYW5kIHVybGRhdGEucGFybVsncHJvdG9jb2wnXSA9PSAnZ2l0JzoKKyAgICAgICAgICAgIHJhaXNlIGJiLmZldGNoMi5QYXJhbWV0ZXJFcnJvcigKKyAgICAgICAgICAgICAgICAiSW52YWxpZCBwcm90b2NvbCAtIGlmIHlvdSB3aXNoIHRvIGZldGNoIGZyb20gYSBnaXQgIiArCisgICAgICAgICAgICAgICAgInJlcG9zaXRvcnkgdXNpbmcgc3NoLCB5b3UgbmVlZCB0byB1c2UgIiArCisgICAgICAgICAgICAgICAgImdpdDovLyBwcmVmaXggd2l0aCBwcm90b2NvbD1zc2giLCB1cmxkYXRhLnVybCkKKyAgICAgICAgbSA9IF9fcGF0dGVybl9fLm1hdGNoKHVybGRhdGEudXJsKQorICAgICAgICBwYXRoID0gbS5ncm91cCgncGF0aCcpCisgICAgICAgIGhvc3QgPSBtLmdyb3VwKCdob3N0JykKKyAgICAgICAgdXJsZGF0YS5sb2NhbHBhdGggPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0RMX0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUob3MucGF0aC5ub3JtcGF0aChwYXRoKSkpCisKKyAgICBkZWYgZG93bmxvYWQoc2VsZiwgdXJsZGF0YSwgZCk6CisgICAgICAgIGRsZGlyID0gZC5nZXRWYXIoJ0RMX0RJUicsIFRydWUpCisKKyAgICAgICAgbSA9IF9fcGF0dGVybl9fLm1hdGNoKHVybGRhdGEudXJsKQorICAgICAgICBwYXRoID0gbS5ncm91cCgncGF0aCcpCisgICAgICAgIGhvc3QgPSBtLmdyb3VwKCdob3N0JykKKyAgICAgICAgcG9ydCA9IG0uZ3JvdXAoJ3BvcnQnKQorICAgICAgICB1c2VyID0gbS5ncm91cCgndXNlcicpCisgICAgICAgIHBhc3N3b3JkID0gbS5ncm91cCgncGFzcycpCisKKyAgICAgICAgaWYgcG9ydDoKKyAgICAgICAgICAgIHBvcnRhcmcgPSAnLVAgJXMnICUgcG9ydAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcG9ydGFyZyA9ICcnCisKKyAgICAgICAgaWYgdXNlcjoKKyAgICAgICAgICAgIGZyID0gdXNlcgorICAgICAgICAgICAgaWYgcGFzc3dvcmQ6CisgICAgICAgICAgICAgICAgZnIgKz0gJzolcycgJSBwYXNzd29yZAorICAgICAgICAgICAgZnIgKz0gJ0AlcycgJSBob3N0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmciA9IGhvc3QKKyAgICAgICAgZnIgKz0gJzolcycgJSBwYXRoCisKKworICAgICAgICBpbXBvcnQgY29tbWFuZHMKKyAgICAgICAgY21kID0gJ3NjcCAtQiAtciAlcyAlcyAlcy8nICUgKAorICAgICAgICAgICAgcG9ydGFyZywKKyAgICAgICAgICAgIGNvbW1hbmRzLm1rYXJnKGZyKSwKKyAgICAgICAgICAgIGNvbW1hbmRzLm1rYXJnKGRsZGlyKQorICAgICAgICApCisKKyAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIGNtZCwgdXJsZGF0YS51cmwpCisKKyAgICAgICAgcnVuZmV0Y2hjbWQoY21kLCBkKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9zdm4ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9zdm4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTczM2MyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3N2bi5weQpAQCAtMCwwICsxLDE5MiBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0QmFrZSAnRmV0Y2gnIGltcGxlbWVudGF0aW9uIGZvciBzdm4uCisKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjIENvcHlyaWdodCAoQykgMjAwNCAgICAgICAgTWFyY2luIEp1c3praWV3aWN6CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBCYXNlZCBvbiBmdW5jdGlvbnMgZnJvbSB0aGUgYmFzZSBiYiBtb2R1bGUsIENvcHlyaWdodCAyMDAzIEhvbGdlciBTY2h1cmlnCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBiYgoraW1wb3J0IHJlCitmcm9tICAgYmIgaW1wb3J0IGRhdGEKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IEZldGNoTWV0aG9kCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBGZXRjaEVycm9yCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBNaXNzaW5nUGFyYW1ldGVyRXJyb3IKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IHJ1bmZldGNoY21kCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBsb2dnZXIKKworY2xhc3MgU3ZuKEZldGNoTWV0aG9kKToKKyAgICAiIiJDbGFzcyB0byBmZXRjaCBhIG1vZHVsZSBvciBtb2R1bGVzIGZyb20gc3ZuIHJlcG9zaXRvcmllcyIiIgorICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0byBzZWUgaWYgYSBnaXZlbiB1cmwgY2FuIGJlIGZldGNoZWQgd2l0aCBzdm4uCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gdWQudHlwZSBpbiBbJ3N2biddCisKKyAgICBkZWYgdXJsZGF0YV9pbml0KHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIGluaXQgc3ZuIHNwZWNpZmljIHZhcmlhYmxlIHdpdGhpbiB1cmwgZGF0YQorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90ICJtb2R1bGUiIGluIHVkLnBhcm06CisgICAgICAgICAgICByYWlzZSBNaXNzaW5nUGFyYW1ldGVyRXJyb3IoJ21vZHVsZScsIHVkLnVybCkKKworICAgICAgICB1ZC5iYXNlY21kID0gZC5nZXRWYXIoJ0ZFVENIQ01EX3N2bicsIFRydWUpCisKKyAgICAgICAgdWQubW9kdWxlID0gdWQucGFybVsibW9kdWxlIl0KKworICAgICAgICAjIENyZWF0ZSBwYXRocyB0byBzdm4gY2hlY2tvdXRzCisgICAgICAgIHJlbHBhdGggPSBzZWxmLl9zdHJpcF9sZWFkaW5nX3NsYXNoZXModWQucGF0aCkKKyAgICAgICAgdWQucGtnZGlyID0gb3MucGF0aC5qb2luKGRhdGEuZXhwYW5kKCcke1NWTkRJUn0nLCBkKSwgdWQuaG9zdCwgcmVscGF0aCkKKyAgICAgICAgdWQubW9kZGlyID0gb3MucGF0aC5qb2luKHVkLnBrZ2RpciwgdWQubW9kdWxlKQorCisgICAgICAgIHVkLnNldHVwX3Jldmlzb25zKGQpCisKKyAgICAgICAgaWYgJ3JldicgaW4gdWQucGFybToKKyAgICAgICAgICAgIHVkLnJldmlzaW9uID0gdWQucGFybVsncmV2J10KKworICAgICAgICB1ZC5sb2NhbGZpbGUgPSBkYXRhLmV4cGFuZCgnJXNfJXNfJXNfJXNfLnRhci5neicgJSAodWQubW9kdWxlLnJlcGxhY2UoJy8nLCAnLicpLCB1ZC5ob3N0LCB1ZC5wYXRoLnJlcGxhY2UoJy8nLCAnLicpLCB1ZC5yZXZpc2lvbiksIGQpCisKKyAgICBkZWYgX2J1aWxkc3ZuY29tbWFuZChzZWxmLCB1ZCwgZCwgY29tbWFuZCk6CisgICAgICAgICIiIgorICAgICAgICBCdWlsZCB1cCBhbiBzdm4gY29tbWFuZGxpbmUgYmFzZWQgb24gdWQKKyAgICAgICAgY29tbWFuZCBpcyAiZmV0Y2giLCAidXBkYXRlIiwgImluZm8iCisgICAgICAgICIiIgorCisgICAgICAgIHByb3RvID0gdWQucGFybS5nZXQoJ3Byb3RvY29sJywgJ3N2bicpCisKKyAgICAgICAgc3ZuX3JzaCA9IE5vbmUKKyAgICAgICAgaWYgcHJvdG8gPT0gInN2bitzc2giIGFuZCAicnNoIiBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgc3ZuX3JzaCA9IHVkLnBhcm1bInJzaCJdCisKKyAgICAgICAgc3Zucm9vdCA9IHVkLmhvc3QgKyB1ZC5wYXRoCisKKyAgICAgICAgb3B0aW9ucyA9IFtdCisKKyAgICAgICAgb3B0aW9ucy5hcHBlbmQoIi0tbm8tYXV0aC1jYWNoZSIpCisKKyAgICAgICAgaWYgdWQudXNlcjoKKyAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItLXVzZXJuYW1lICVzIiAlIHVkLnVzZXIpCisKKyAgICAgICAgaWYgdWQucHN3ZDoKKyAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItLXBhc3N3b3JkICVzIiAlIHVkLnBzd2QpCisKKyAgICAgICAgaWYgY29tbWFuZCA9PSAiaW5mbyI6CisgICAgICAgICAgICBzdm5jbWQgPSAiJXMgaW5mbyAlcyAlczovLyVzLyVzLyIgJSAodWQuYmFzZWNtZCwgIiAiLmpvaW4ob3B0aW9ucyksIHByb3RvLCBzdm5yb290LCB1ZC5tb2R1bGUpCisgICAgICAgIGVsaWYgY29tbWFuZCA9PSAibG9nMSI6CisgICAgICAgICAgICBzdm5jbWQgPSAiJXMgbG9nIC0tbGltaXQgMSAlcyAlczovLyVzLyVzLyIgJSAodWQuYmFzZWNtZCwgIiAiLmpvaW4ob3B0aW9ucyksIHByb3RvLCBzdm5yb290LCB1ZC5tb2R1bGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdWZmaXggPSAiIgorICAgICAgICAgICAgaWYgdWQucmV2aXNpb246CisgICAgICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQoIi1yICVzIiAlIHVkLnJldmlzaW9uKQorICAgICAgICAgICAgICAgIHN1ZmZpeCA9ICJAJXMiICUgKHVkLnJldmlzaW9uKQorCisgICAgICAgICAgICBpZiBjb21tYW5kID09ICJmZXRjaCI6CisgICAgICAgICAgICAgICAgdHJhbnNwb3J0dXNlciA9IHVkLnBhcm0uZ2V0KCJ0cmFuc3BvcnR1c2VyIiwgIiIpCisgICAgICAgICAgICAgICAgc3ZuY21kID0gIiVzIGNvICVzICVzOi8vJXMlcy8lcyVzICVzIiAlICh1ZC5iYXNlY21kLCAiICIuam9pbihvcHRpb25zKSwgcHJvdG8sIHRyYW5zcG9ydHVzZXIsIHN2bnJvb3QsIHVkLm1vZHVsZSwgc3VmZml4LCB1ZC5tb2R1bGUpCisgICAgICAgICAgICBlbGlmIGNvbW1hbmQgPT0gInVwZGF0ZSI6CisgICAgICAgICAgICAgICAgc3ZuY21kID0gIiVzIHVwZGF0ZSAlcyIgJSAodWQuYmFzZWNtZCwgIiAiLmpvaW4ob3B0aW9ucykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIkludmFsaWQgc3ZuIGNvbW1hbmQgJXMiICUgY29tbWFuZCwgdWQudXJsKQorCisgICAgICAgIGlmIHN2bl9yc2g6CisgICAgICAgICAgICBzdm5jbWQgPSAic3ZuX1JTSD1cIiVzXCIgJXMiICUgKHN2bl9yc2gsIHN2bmNtZCkKKworICAgICAgICByZXR1cm4gc3ZuY21kCisKKyAgICBkZWYgZG93bmxvYWQoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiJGZXRjaCB1cmwiIiIKKworICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkZldGNoOiBjaGVja2luZyBmb3IgbW9kdWxlIGRpcmVjdG9yeSAnIiArIHVkLm1vZGRpciArICInIikKKworICAgICAgICBpZiBvcy5hY2Nlc3Mob3MucGF0aC5qb2luKHVkLm1vZGRpciwgJy5zdm4nKSwgb3MuUl9PSyk6CisgICAgICAgICAgICBzdm51cGRhdGVjbWQgPSBzZWxmLl9idWlsZHN2bmNvbW1hbmQodWQsIGQsICJ1cGRhdGUiKQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlVwZGF0ZSAiICsgdWQudXJsKQorICAgICAgICAgICAgIyB1cGRhdGUgc291cmNlcyB0aGVyZQorICAgICAgICAgICAgb3MuY2hkaXIodWQubW9kZGlyKQorICAgICAgICAgICAgIyBXZSBuZWVkIHRvIGF0dGVtcHQgdG8gcnVuIHN2biB1cGdyYWRlIGZpcnN0IGluIGNhc2UgaXRzIGFuIG9sZGVyIHdvcmtpbmcgZm9ybWF0CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcnVuZmV0Y2hjbWQodWQuYmFzZWNtZCArICIgdXBncmFkZSIsIGQpCisgICAgICAgICAgICBleGNlcHQgRmV0Y2hFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJ1bm5pbmcgJXMiLCBzdm51cGRhdGVjbWQpCisgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgc3ZudXBkYXRlY21kLCB1ZC51cmwpCisgICAgICAgICAgICBydW5mZXRjaGNtZChzdm51cGRhdGVjbWQsIGQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdm5mZXRjaGNtZCA9IHNlbGYuX2J1aWxkc3ZuY29tbWFuZCh1ZCwgZCwgImZldGNoIikKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJGZXRjaCAiICsgdWQudXJsKQorICAgICAgICAgICAgIyBjaGVjayBvdXQgc291cmNlcyB0aGVyZQorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHVkLnBrZ2RpcikKKyAgICAgICAgICAgIG9zLmNoZGlyKHVkLnBrZ2RpcikKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiUnVubmluZyAlcyIsIHN2bmZldGNoY21kKQorICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIHN2bmZldGNoY21kLCB1ZC51cmwpCisgICAgICAgICAgICBydW5mZXRjaGNtZChzdm5mZXRjaGNtZCwgZCkKKworICAgICAgICBzY21kYXRhID0gdWQucGFybS5nZXQoInNjbWRhdGEiLCAiIikKKyAgICAgICAgaWYgc2NtZGF0YSA9PSAia2VlcCI6CisgICAgICAgICAgICB0YXJfZmxhZ3MgPSAiIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGFyX2ZsYWdzID0gIi0tZXhjbHVkZSAnLnN2biciCisKKyAgICAgICAgb3MuY2hkaXIodWQucGtnZGlyKQorICAgICAgICAjIHRhciB0aGVtIHVwIHRvIGEgZGVmaW5lZCBmaWxlbmFtZQorICAgICAgICBydW5mZXRjaGNtZCgidGFyICVzIC1jemYgJXMgJXMiICUgKHRhcl9mbGFncywgdWQubG9jYWxwYXRoLCB1ZC5tb2R1bGUpLCBkLCBjbGVhbnVwID0gW3VkLmxvY2FscGF0aF0pCisKKyAgICBkZWYgY2xlYW4oc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIgQ2xlYW4gU1ZOIHNwZWNpZmljIGZpbGVzIGFuZCBkaXJzICIiIgorCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh1ZC5sb2NhbHBhdGgpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh1ZC5tb2RkaXIsIFRydWUpCisgICAgICAgIAorCisgICAgZGVmIHN1cHBvcnRzX3NyY3JldihzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfcmV2aXNpb25fa2V5KHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIHVuaXF1ZSBrZXkgZm9yIHRoZSB1cmwKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAic3ZuOiIgKyB1ZC5tb2RkaXIKKworICAgIGRlZiBfbGF0ZXN0X3JldmlzaW9uKHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgbGF0ZXN0IHVwc3RyZWFtIHJldmlzaW9uIG51bWJlcgorICAgICAgICAiIiIKKyAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIHNlbGYuX2J1aWxkc3ZuY29tbWFuZCh1ZCwgZCwgImxvZzEiKSkKKworICAgICAgICBvdXRwdXQgPSBydW5mZXRjaGNtZCgiTEFORz1DIExDX0FMTD1DICIgKyBzZWxmLl9idWlsZHN2bmNvbW1hbmQodWQsIGQsICJsb2cxIiksIGQsIFRydWUpCisKKyAgICAgICAgIyBza2lwIHRoZSBmaXJzdCBsaW5lLCBhcyBwZXIgb3V0cHV0IG9mIHN2biBsb2cKKyAgICAgICAgIyB0aGVuIHdlIGV4cGVjdCB0aGUgcmV2aXNpb24gb24gdGhlIDJuZCBsaW5lCisgICAgICAgIHJldmlzaW9uID0gcmUuc2VhcmNoKCdecihbMC05XSopJywgb3V0cHV0LnNwbGl0bGluZXMoKVsxXSkuZ3JvdXAoMSkKKworICAgICAgICByZXR1cm4gcmV2aXNpb24KKworICAgIGRlZiBzb3J0YWJsZV9yZXZpc2lvbihzZWxmLCB1ZCwgZCwgbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBzb3J0YWJsZSByZXZpc2lvbiBudW1iZXIgd2hpY2ggaW4gb3VyIGNhc2UgaXMgdGhlIHJldmlzaW9uIG51bWJlcgorICAgICAgICAiIiIKKworICAgICAgICByZXR1cm4gRmFsc2UsIHNlbGYuX2J1aWxkX3JldmlzaW9uKHVkLCBkKQorCisgICAgZGVmIF9idWlsZF9yZXZpc2lvbihzZWxmLCB1ZCwgZCk6CisgICAgICAgIHJldHVybiB1ZC5yZXZpc2lvbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvd2dldC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3dnZXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQyYTg5NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3dnZXQucHkKQEAgLTAsMCArMSw1NDEgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgJ0ZldGNoJyBpbXBsZW1lbnRhdGlvbnMKKworQ2xhc3NlcyBmb3Igb2J0YWluaW5nIHVwc3RyZWFtIHNvdXJjZXMgZm9yIHRoZQorQml0QmFrZSBidWlsZCB0b29scy4KKworIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIEJhc2VkIG9uIGZ1bmN0aW9ucyBmcm9tIHRoZSBiYXNlIGJiIG1vZHVsZSwgQ29weXJpZ2h0IDIwMDMgSG9sZ2VyIFNjaHVyaWcKKworaW1wb3J0IHJlCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYmIKK2ltcG9ydCB1cmxsaWIKK2Zyb20gICBiYiBpbXBvcnQgZGF0YQorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hNZXRob2QKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IEZldGNoRXJyb3IKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IGxvZ2dlcgorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgcnVuZmV0Y2hjbWQKK2Zyb20gICBiczQgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKKworY2xhc3MgV2dldChGZXRjaE1ldGhvZCk6CisgICAgIiIiQ2xhc3MgdG8gZmV0Y2ggdXJscyB2aWEgJ3dnZXQnIiIiCisgICAgZGVmIHN1cHBvcnRzKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRvIHNlZSBpZiBhIGdpdmVuIHVybCBjYW4gYmUgZmV0Y2hlZCB3aXRoIHdnZXQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gdWQudHlwZSBpbiBbJ2h0dHAnLCAnaHR0cHMnLCAnZnRwJ10KKworICAgIGRlZiByZWNvbW1lbmRzX2NoZWNrc3VtKHNlbGYsIHVybGRhdGEpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHVybGRhdGFfaW5pdChzZWxmLCB1ZCwgZCk6CisgICAgICAgIGlmICdwcm90b2NvbCcgaW4gdWQucGFybToKKyAgICAgICAgICAgIGlmIHVkLnBhcm1bJ3Byb3RvY29sJ10gPT0gJ2dpdCc6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIuZmV0Y2gyLlBhcmFtZXRlckVycm9yKCJJbnZhbGlkIHByb3RvY29sIC0gaWYgeW91IHdpc2ggdG8gZmV0Y2ggZnJvbSBhIGdpdCByZXBvc2l0b3J5IHVzaW5nIGh0dHAsIHlvdSBuZWVkIHRvIGluc3RlYWQgdXNlIHRoZSBnaXQ6Ly8gcHJlZml4IHdpdGggcHJvdG9jb2w9aHR0cCIsIHVkLnVybCkKKworICAgICAgICBpZiAnZG93bmxvYWRmaWxlbmFtZScgaW4gdWQucGFybToKKyAgICAgICAgICAgIHVkLmJhc2VuYW1lID0gdWQucGFybVsnZG93bmxvYWRmaWxlbmFtZSddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1ZC5iYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUodWQucGF0aCkKKworICAgICAgICB1ZC5sb2NhbGZpbGUgPSBkYXRhLmV4cGFuZCh1cmxsaWIudW5xdW90ZSh1ZC5iYXNlbmFtZSksIGQpCisKKyAgICAgICAgc2VsZi5iYXNlY21kID0gZC5nZXRWYXIoIkZFVENIQ01EX3dnZXQiLCBUcnVlKSBvciAiL3Vzci9iaW4vZW52IHdnZXQgLXQgMiAtVCAzMCAtbnYgLS1wYXNzaXZlLWZ0cCAtLW5vLWNoZWNrLWNlcnRpZmljYXRlIgorCisgICAgZGVmIF9ydW53Z2V0KHNlbGYsIHVkLCBkLCBjb21tYW5kLCBxdWlldCk6CisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJGZXRjaGluZyAlcyB1c2luZyBjb21tYW5kICclcyciICUgKHVkLnVybCwgY29tbWFuZCkpCisgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBjb21tYW5kKQorICAgICAgICBydW5mZXRjaGNtZChjb21tYW5kLCBkLCBxdWlldCkKKworICAgIGRlZiBkb3dubG9hZChzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIkZldGNoIHVybHMiIiIKKworICAgICAgICBmZXRjaGNtZCA9IHNlbGYuYmFzZWNtZAorCisgICAgICAgIGlmICdkb3dubG9hZGZpbGVuYW1lJyBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgZGxkaXIgPSBkLmdldFZhcigiRExfRElSIiwgVHJ1ZSkKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZGxkaXIgKyBvcy5zZXAgKyB1ZC5sb2NhbGZpbGUpKQorICAgICAgICAgICAgZmV0Y2hjbWQgKz0gIiAtTyAiICsgZGxkaXIgKyBvcy5zZXAgKyB1ZC5sb2NhbGZpbGUKKworICAgICAgICB1cmkgPSB1ZC51cmwuc3BsaXQoIjsiKVswXQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh1ZC5sb2NhbHBhdGgpOgorICAgICAgICAgICAgIyBmaWxlIGV4aXN0cywgYnV0IHdlIGRpZG50IGNvbXBsZXRlIGl0Li4gdHJ5aW5nIGFnYWluLi4KKyAgICAgICAgICAgIGZldGNoY21kICs9IGQuZXhwYW5kKCIgLWMgLVAgJHtETF9ESVJ9ICclcyciICUgdXJpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmV0Y2hjbWQgKz0gZC5leHBhbmQoIiAtUCAke0RMX0RJUn0gJyVzJyIgJSB1cmkpCisKKyAgICAgICAgc2VsZi5fcnVud2dldCh1ZCwgZCwgZmV0Y2hjbWQsIEZhbHNlKQorCisgICAgICAgICMgU2FuaXR5IGNoZWNrIHNpbmNlIHdnZXQgY2FuIHByZXRlbmQgaXQgc3VjY2VlZCB3aGVuIGl0IGRpZG4ndAorICAgICAgICAjIEFsc28sIHRoaXMgdXNlZCB0byBoYXBwZW4gaWYgc291cmNlZm9yZ2Ugc2VudCB1cyB0byB0aGUgbWlycm9yIHBhZ2UKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHVkLmxvY2FscGF0aCk6CisgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJUaGUgZmV0Y2ggY29tbWFuZCByZXR1cm5lZCBzdWNjZXNzIGZvciB1cmwgJXMgYnV0ICVzIGRvZXNuJ3QgZXhpc3Q/ISIgJSAodXJpLCB1ZC5sb2NhbHBhdGgpLCB1cmkpCisKKyAgICAgICAgaWYgb3MucGF0aC5nZXRzaXplKHVkLmxvY2FscGF0aCkgPT0gMDoKKyAgICAgICAgICAgIG9zLnJlbW92ZSh1ZC5sb2NhbHBhdGgpCisgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJUaGUgZmV0Y2ggb2YgJXMgcmVzdWx0ZWQgaW4gYSB6ZXJvIHNpemUgZmlsZT8hIERlbGV0aW5nIGFuZCBmYWlsaW5nIHNpbmNlIHRoaXMgaXNuJ3QgcmlnaHQuIiAlICh1cmkpLCB1cmkpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBjaGVja3N0YXR1cyhzZWxmLCBmZXRjaCwgdWQsIGQpOgorICAgICAgICBpbXBvcnQgdXJsbGliMiwgc29ja2V0LCBodHRwbGliCisgICAgICAgIGZyb20gdXJsbGliIGltcG9ydCBhZGRpbmZvdXJsCisgICAgICAgIGZyb20gYmIuZmV0Y2gyIGltcG9ydCBGZXRjaENvbm5lY3Rpb25DYWNoZQorCisgICAgICAgIGNsYXNzIEhUVFBDb25uZWN0aW9uQ2FjaGUoaHR0cGxpYi5IVFRQQ29ubmVjdGlvbik6CisgICAgICAgICAgICBpZiBmZXRjaC5jb25uZWN0aW9uX2NhY2hlOgorICAgICAgICAgICAgICAgIGRlZiBjb25uZWN0KHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAiIiJDb25uZWN0IHRvIHRoZSBob3N0IGFuZCBwb3J0IHNwZWNpZmllZCBpbiBfX2luaXRfXy4iIiIKKworICAgICAgICAgICAgICAgICAgICBzb2NrID0gZmV0Y2guY29ubmVjdGlvbl9jYWNoZS5nZXRfY29ubmVjdGlvbihzZWxmLmhvc3QsIHNlbGYucG9ydCkKKyAgICAgICAgICAgICAgICAgICAgaWYgc29jazoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNvY2sKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoc2VsZi5ob3N0LCBzZWxmLnBvcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW1lb3V0LCBzZWxmLnNvdXJjZV9hZGRyZXNzKQorICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2guY29ubmVjdGlvbl9jYWNoZS5hZGRfY29ubmVjdGlvbihzZWxmLmhvc3QsIHNlbGYucG9ydCwgc2VsZi5zb2NrKQorCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3R1bm5lbF9ob3N0OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdHVubmVsKCkKKworICAgICAgICBjbGFzcyBDYWNoZUhUVFBIYW5kbGVyKHVybGxpYjIuSFRUUEhhbmRsZXIpOgorICAgICAgICAgICAgZGVmIGh0dHBfb3BlbihzZWxmLCByZXEpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmRvX29wZW4oSFRUUENvbm5lY3Rpb25DYWNoZSwgcmVxKQorCisgICAgICAgICAgICBkZWYgZG9fb3BlbihzZWxmLCBodHRwX2NsYXNzLCByZXEpOgorICAgICAgICAgICAgICAgICIiIlJldHVybiBhbiBhZGRpbmZvdXJsIG9iamVjdCBmb3IgdGhlIHJlcXVlc3QsIHVzaW5nIGh0dHBfY2xhc3MuCisKKyAgICAgICAgICAgICAgICBodHRwX2NsYXNzIG11c3QgaW1wbGVtZW50IHRoZSBIVFRQQ29ubmVjdGlvbiBBUEkgZnJvbSBodHRwbGliLgorICAgICAgICAgICAgICAgIFRoZSBhZGRpbmZvdXJsIHJldHVybiB2YWx1ZSBpcyBhIGZpbGUtbGlrZSBvYmplY3QuICBJdCBhbHNvCisgICAgICAgICAgICAgICAgaGFzIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXMgaW5jbHVkaW5nOgorICAgICAgICAgICAgICAgICAgICAtIGluZm8oKTogcmV0dXJuIGEgbWltZXRvb2xzLk1lc3NhZ2Ugb2JqZWN0IGZvciB0aGUgaGVhZGVycworICAgICAgICAgICAgICAgICAgICAtIGdldHVybCgpOiByZXR1cm4gdGhlIG9yaWdpbmFsIHJlcXVlc3QgVVJMCisgICAgICAgICAgICAgICAgICAgIC0gY29kZTogSFRUUCBzdGF0dXMgY29kZQorICAgICAgICAgICAgICAgICIiIgorICAgICAgICAgICAgICAgIGhvc3QgPSByZXEuZ2V0X2hvc3QoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBob3N0OgorICAgICAgICAgICAgICAgICAgICByYWlzZSB1cmxsbGliMi5VUkxFcnJvcignbm8gaG9zdCBnaXZlbicpCisKKyAgICAgICAgICAgICAgICBoID0gaHR0cF9jbGFzcyhob3N0LCB0aW1lb3V0PXJlcS50aW1lb3V0KSAjIHdpbGwgcGFyc2UgaG9zdDpwb3J0CisgICAgICAgICAgICAgICAgaC5zZXRfZGVidWdsZXZlbChzZWxmLl9kZWJ1Z2xldmVsKQorCisgICAgICAgICAgICAgICAgaGVhZGVycyA9IGRpY3QocmVxLnVucmVkaXJlY3RlZF9oZHJzKQorICAgICAgICAgICAgICAgIGhlYWRlcnMudXBkYXRlKGRpY3QoKGssIHYpIGZvciBrLCB2IGluIHJlcS5oZWFkZXJzLml0ZW1zKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBrIG5vdCBpbiBoZWFkZXJzKSkKKworICAgICAgICAgICAgICAgICMgV2Ugd2FudCB0byBtYWtlIGFuIEhUVFAvMS4xIHJlcXVlc3QsIGJ1dCB0aGUgYWRkaW5mb3VybAorICAgICAgICAgICAgICAgICMgY2xhc3MgaXNuJ3QgcHJlcGFyZWQgdG8gZGVhbCB3aXRoIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uLgorICAgICAgICAgICAgICAgICMgSXQgd2lsbCB0cnkgdG8gcmVhZCBhbGwgcmVtYWluaW5nIGRhdGEgZnJvbSB0aGUgc29ja2V0LAorICAgICAgICAgICAgICAgICMgd2hpY2ggd2lsbCBibG9jayB3aGlsZSB0aGUgc2VydmVyIHdhaXRzIGZvciB0aGUgbmV4dCByZXF1ZXN0LgorICAgICAgICAgICAgICAgICMgU28gbWFrZSBzdXJlIHRoZSBjb25uZWN0aW9uIGdldHMgY2xvc2VkIGFmdGVyIHRoZSAob25seSkKKyAgICAgICAgICAgICAgICAjIHJlcXVlc3QuCisKKyAgICAgICAgICAgICAgICAjIERvbid0IGNsb3NlIGNvbm5lY3Rpb24gd2hlbiBjb25uZWN0aW9uX2NhY2hlIGlzIGVuYWJsZWQsCisgICAgICAgICAgICAgICAgaWYgZmV0Y2guY29ubmVjdGlvbl9jYWNoZSBpcyBOb25lOiAKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1siQ29ubmVjdGlvbiJdID0gImNsb3NlIgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbIkNvbm5lY3Rpb24iXSA9ICJLZWVwLUFsaXZlIiAjIFdvcmtzIGZvciBIVFRQLzEuMAorCisgICAgICAgICAgICAgICAgaGVhZGVycyA9IGRpY3QoCisgICAgICAgICAgICAgICAgICAgIChuYW1lLnRpdGxlKCksIHZhbCkgZm9yIG5hbWUsIHZhbCBpbiBoZWFkZXJzLml0ZW1zKCkpCisKKyAgICAgICAgICAgICAgICBpZiByZXEuX3R1bm5lbF9ob3N0OgorICAgICAgICAgICAgICAgICAgICB0dW5uZWxfaGVhZGVycyA9IHt9CisgICAgICAgICAgICAgICAgICAgIHByb3h5X2F1dGhfaGRyID0gIlByb3h5LUF1dGhvcml6YXRpb24iCisgICAgICAgICAgICAgICAgICAgIGlmIHByb3h5X2F1dGhfaGRyIGluIGhlYWRlcnM6CisgICAgICAgICAgICAgICAgICAgICAgICB0dW5uZWxfaGVhZGVyc1twcm94eV9hdXRoX2hkcl0gPSBoZWFkZXJzW3Byb3h5X2F1dGhfaGRyXQorICAgICAgICAgICAgICAgICAgICAgICAgIyBQcm94eS1BdXRob3JpemF0aW9uIHNob3VsZCBub3QgYmUgc2VudCB0byBvcmlnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICMgc2VydmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGhlYWRlcnNbcHJveHlfYXV0aF9oZHJdCisgICAgICAgICAgICAgICAgICAgIGguc2V0X3R1bm5lbChyZXEuX3R1bm5lbF9ob3N0LCBoZWFkZXJzPXR1bm5lbF9oZWFkZXJzKQorCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBoLnJlcXVlc3QocmVxLmdldF9tZXRob2QoKSwgcmVxLmdldF9zZWxlY3RvcigpLCByZXEuZGF0YSwgaGVhZGVycykKKyAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBlcnI6ICMgWFhYIHdoYXQgZXJyb3I/CisgICAgICAgICAgICAgICAgICAgICMgRG9uJ3QgY2xvc2UgY29ubmVjdGlvbiB3aGVuIGNhY2hlIGlzIGVuYWJsZWQuCisgICAgICAgICAgICAgICAgICAgIGlmIGZldGNoLmNvbm5lY3Rpb25fY2FjaGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGguY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICByYWlzZSB1cmxsaWIyLlVSTEVycm9yKGVycikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICByID0gaC5nZXRyZXNwb25zZShidWZmZXJpbmc9VHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjogIyBidWZmZXJpbmcga3cgbm90IHN1cHBvcnRlZAorICAgICAgICAgICAgICAgICAgICAgICAgciA9IGguZ2V0cmVzcG9uc2UoKQorCisgICAgICAgICAgICAgICAgIyBQaWNrIGFwYXJ0IHRoZSBIVFRQUmVzcG9uc2Ugb2JqZWN0IHRvIGdldCB0aGUgYWRkaW5mb3VybAorICAgICAgICAgICAgICAgICMgb2JqZWN0IGluaXRpYWxpemVkIHByb3Blcmx5LgorCisgICAgICAgICAgICAgICAgIyBXcmFwIHRoZSBIVFRQUmVzcG9uc2Ugb2JqZWN0IGluIHNvY2tldCdzIGZpbGUgb2JqZWN0IGFkYXB0ZXIKKyAgICAgICAgICAgICAgICAjIGZvciBXaW5kb3dzLiAgVGhhdCBhZGFwdGVyIGNhbGxzIHJlY3YoKSwgc28gZGVsZWdhdGUgcmVjdigpCisgICAgICAgICAgICAgICAgIyB0byByZWFkKCkuICBUaGlzIHdlaXJkIHdyYXBwaW5nIGFsbG93cyB0aGUgcmV0dXJuZWQgb2JqZWN0IHRvCisgICAgICAgICAgICAgICAgIyBoYXZlIHJlYWRsaW5lKCkgYW5kIHJlYWRsaW5lcygpIG1ldGhvZHMuCisKKyAgICAgICAgICAgICAgICAjIFhYWCBJdCBtaWdodCBiZSBiZXR0ZXIgdG8gZXh0cmFjdCB0aGUgcmVhZCBidWZmZXJpbmcgY29kZQorICAgICAgICAgICAgICAgICMgb3V0IG9mIHNvY2tldC5fZmlsZW9iamVjdCgpIGFuZCBpbnRvIGEgYmFzZSBjbGFzcy4KKyAgICAgICAgICAgICAgICByLnJlY3YgPSByLnJlYWQKKworICAgICAgICAgICAgICAgICMgbm8gZGF0YSwganVzdCBoYXZlIHRvIHJlYWQKKyAgICAgICAgICAgICAgICByLnJlYWQoKQorICAgICAgICAgICAgICAgIGNsYXNzIGZwX2R1bW15KG9iamVjdCk6CisgICAgICAgICAgICAgICAgICAgIGRlZiByZWFkKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAgICAgICAgICAgICAgIGRlZiByZWFkbGluZShzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICAgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICByZXNwID0gYWRkaW5mb3VybChmcF9kdW1teSgpLCByLm1zZywgcmVxLmdldF9mdWxsX3VybCgpKQorICAgICAgICAgICAgICAgIHJlc3AuY29kZSA9IHIuc3RhdHVzCisgICAgICAgICAgICAgICAgcmVzcC5tc2cgPSByLnJlYXNvbgorCisgICAgICAgICAgICAgICAgIyBDbG9zZSBjb25uZWN0aW9uIHdoZW4gc2VydmVyIHJlcXVlc3QgaXQuCisgICAgICAgICAgICAgICAgaWYgZmV0Y2guY29ubmVjdGlvbl9jYWNoZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgaWYgJ0Nvbm5lY3Rpb24nIGluIHIubXNnIGFuZCByLm1zZ1snQ29ubmVjdGlvbiddID09ICdjbG9zZSc6CisgICAgICAgICAgICAgICAgICAgICAgICBmZXRjaC5jb25uZWN0aW9uX2NhY2hlLnJlbW92ZV9jb25uZWN0aW9uKGguaG9zdCwgaC5wb3J0KQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3AKKworICAgICAgICBkZWYgZXhwb3J0X3Byb3hpZXMoZCk6CisgICAgICAgICAgICB2YXJpYWJsZXMgPSBbJ2h0dHBfcHJveHknLCAnSFRUUF9QUk9YWScsICdodHRwc19wcm94eScsICdIVFRQU19QUk9YWScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Z0cF9wcm94eScsICdGVFBfUFJPWFknLCAnbm9fcHJveHknLCAnTk9fUFJPWFknXQorICAgICAgICAgICAgZXhwb3J0ZWQgPSBGYWxzZQorCisgICAgICAgICAgICBmb3IgdiBpbiB2YXJpYWJsZXM6CisgICAgICAgICAgICAgICAgaWYgdiBpbiBvcy5lbnZpcm9uLmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdl9wcm94eSA9IGQuZ2V0VmFyKHYsIFRydWUpCisgICAgICAgICAgICAgICAgICAgIGlmIHZfcHJveHkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy5lbnZpcm9uW3ZdID0gdl9wcm94eQorICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZWQgPSBUcnVlCisKKyAgICAgICAgICAgIHJldHVybiBleHBvcnRlZAorCisgICAgICAgIGRlZiBoZWFkX21ldGhvZChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiAiSEVBRCIKKworICAgICAgICBleHBvcnRlZF9wcm94aWVzID0gZXhwb3J0X3Byb3hpZXMoZCkKKworICAgICAgICAjIFhYWDogU2luY2UgUHl0aG9uIDIuNy45IHNzbCBjZXJ0IHZhbGlkYXRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0CisgICAgICAgICMgc2VlIFBFUC0wNDc2LCB0aGlzIGNhdXNlcyB2ZXJpZmljYXRpb24gZXJyb3JzIG9uIHNvbWUgaHR0cHMgc2VydmVycworICAgICAgICAjIHNvIGRpc2FibGUgYnkgZGVmYXVsdC4KKyAgICAgICAgaW1wb3J0IHNzbAorICAgICAgICBzc2xfY29udGV4dCA9IE5vbmUKKyAgICAgICAgaWYgaGFzYXR0cihzc2wsICdfY3JlYXRlX3VudmVyaWZpZWRfY29udGV4dCcpOgorICAgICAgICAgICAgc3NsX2NvbnRleHQgPSBzc2wuX2NyZWF0ZV91bnZlcmlmaWVkX2NvbnRleHQoKQorCisgICAgICAgIGlmIGV4cG9ydGVkX3Byb3hpZXMgPT0gVHJ1ZSBhbmQgc3NsX2NvbnRleHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBvcGVuZXIgPSB1cmxsaWIyLmJ1aWxkX29wZW5lcih1cmxsaWIyLlByb3h5SGFuZGxlciwgQ2FjaGVIVFRQSGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgdXJsbGliMi5IVFRQU0hhbmRsZXIoY29udGV4dD1zc2xfY29udGV4dCkpCisgICAgICAgIGVsaWYgZXhwb3J0ZWRfcHJveGllcyA9PSBGYWxzZSBhbmQgc3NsX2NvbnRleHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBvcGVuZXIgPSB1cmxsaWIyLmJ1aWxkX29wZW5lcihDYWNoZUhUVFBIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICB1cmxsaWIyLkhUVFBTSGFuZGxlcihjb250ZXh0PXNzbF9jb250ZXh0KSkKKyAgICAgICAgZWxpZiBleHBvcnRlZF9wcm94aWVzID09IFRydWUgYW5kIHNzbF9jb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICBvcGVuZXIgPSB1cmxsaWIyLmJ1aWxkX29wZW5lcih1cmxsaWIyLlByb3h5SGFuZGxlciwgQ2FjaGVIVFRQSGFuZGxlcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9wZW5lciA9IHVybGxpYjIuYnVpbGRfb3BlbmVyKENhY2hlSFRUUEhhbmRsZXIpCisKKyAgICAgICAgdXJsbGliMi5SZXF1ZXN0LmdldF9tZXRob2QgPSBoZWFkX21ldGhvZAorICAgICAgICB1cmxsaWIyLmluc3RhbGxfb3BlbmVyKG9wZW5lcikKKworICAgICAgICB1cmkgPSB1ZC51cmwuc3BsaXQoIjsiKVswXQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHVybGxpYjIudXJsb3Blbih1cmkpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9wYXJzZV9wYXRoKHNlbGYsIHJlZ2V4LCBzKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgYW5kIGdyb3VwIG5hbWUsIHZlcnNpb24gYW5kIGFyY2hpdmUgdHlwZSBpbiB0aGUgZ2l2ZW4gc3RyaW5nIHMKKyAgICAgICAgIiIiCisKKyAgICAgICAgbSA9IHJlZ2V4LnNlYXJjaChzKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgcG5hbWUgPSAnJworICAgICAgICAgICAgcHZlciA9ICcnCisgICAgICAgICAgICBwdHlwZSA9ICcnCisKKyAgICAgICAgICAgIG1kaWN0ID0gbS5ncm91cGRpY3QoKQorICAgICAgICAgICAgaWYgJ25hbWUnIGluIG1kaWN0LmtleXMoKToKKyAgICAgICAgICAgICAgICBwbmFtZSA9IG1kaWN0WyduYW1lJ10KKyAgICAgICAgICAgIGlmICdwdmVyJyBpbiBtZGljdC5rZXlzKCk6CisgICAgICAgICAgICAgICAgcHZlciA9IG1kaWN0WydwdmVyJ10KKyAgICAgICAgICAgIGlmICd0eXBlJyBpbiBtZGljdC5rZXlzKCk6CisgICAgICAgICAgICAgICAgcHR5cGUgPSBtZGljdFsndHlwZSddCisKKyAgICAgICAgICAgIGJiLmRlYnVnKDMsICJfcGFyc2VfcGF0aDogJXMsICVzLCAlcyIgJSAocG5hbWUsIHB2ZXIsIHB0eXBlKSkKKworICAgICAgICAgICAgcmV0dXJuIChwbmFtZSwgcHZlciwgcHR5cGUpCisKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfbW9kZWxhdGVfdmVyc2lvbihzZWxmLCB2ZXJzaW9uKToKKyAgICAgICAgaWYgdmVyc2lvblswXSBpbiBbJy4nLCAnLSddOgorICAgICAgICAgICAgaWYgdmVyc2lvblsxXS5pc2RpZ2l0KCk6CisgICAgICAgICAgICAgICAgdmVyc2lvbiA9IHZlcnNpb25bMV0gKyB2ZXJzaW9uWzBdICsgdmVyc2lvblsyOmxlbih2ZXJzaW9uKV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdmVyc2lvbiA9IHZlcnNpb25bMTpsZW4odmVyc2lvbildCisKKyAgICAgICAgdmVyc2lvbiA9IHJlLnN1YignLScsICcuJywgdmVyc2lvbikKKyAgICAgICAgdmVyc2lvbiA9IHJlLnN1YignXycsICcuJywgdmVyc2lvbikKKyAgICAgICAgdmVyc2lvbiA9IHJlLnN1YignKHJjKSsnLCAnLjEwMDAuJywgdmVyc2lvbikKKyAgICAgICAgdmVyc2lvbiA9IHJlLnN1YignKGJldGEpKycsICcuMTAwLicsIHZlcnNpb24pCisgICAgICAgIHZlcnNpb24gPSByZS5zdWIoJyhhbHBoYSkrJywgJy4xMC4nLCB2ZXJzaW9uKQorICAgICAgICBpZiB2ZXJzaW9uWzBdID09ICd2JzoKKyAgICAgICAgICAgIHZlcnNpb24gPSB2ZXJzaW9uWzE6bGVuKHZlcnNpb24pXQorICAgICAgICByZXR1cm4gdmVyc2lvbgorCisgICAgZGVmIF92ZXJjbXAoc2VsZiwgb2xkLCBuZXcpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgd2hldGhlciAnbmV3JyBpcyBuZXdlciB0aGFuICdvbGQnIHZlcnNpb24uIFdlIHVzZSBleGlzdGluZyB2ZXJjbXAoKSBmb3IgdGhlCisgICAgICAgIHB1cnBvc2UuIFBFIGlzIGNsZWFyZWQgaW4gY29tcGFyaXNvbiBhcyBpdCdzIG5vdCBmb3IgYnVpbGQsIGFuZCBQUiBpcyBjbGVhcmVkIHRvbworICAgICAgICBmb3Igc2ltcGxpY2l0eSBhcyBpdCdzIHNvbWVob3cgZGlmZmljdWx0IHRvIGdldCBmcm9tIHZhcmlvdXMgdXBzdHJlYW0gZm9ybWF0CisgICAgICAgICIiIgorCisgICAgICAgIChvbGRwbiwgb2xkcHYsIG9sZHN1ZmZpeCkgPSBvbGQKKyAgICAgICAgKG5ld3BuLCBuZXdwdiwgbmV3c3VmZml4KSA9IG5ldworCisgICAgICAgICIiIgorICAgICAgICBDaGVjayBmb3IgYSBuZXcgc3VmZml4IHR5cGUgdGhhdCB3ZSBoYXZlIG5ldmVyIGhlYXJkIG9mIGJlZm9yZQorICAgICAgICAiIiIKKyAgICAgICAgaWYgKG5ld3N1ZmZpeCk6CisgICAgICAgICAgICBtID0gc2VsZi5zdWZmaXhfcmVnZXhfY29tcC5zZWFyY2gobmV3c3VmZml4KQorICAgICAgICAgICAgaWYgbm90IG06CisgICAgICAgICAgICAgICAgYmIud2FybigiJXMgaGFzIGEgcG9zc2libGUgdW5rbm93biBzdWZmaXg6ICVzIiAlIChuZXdwbiwgbmV3c3VmZml4KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAiIiIKKyAgICAgICAgTm90IG91ciBwYWNrYWdlIHNvIGlnbm9yZSBpdAorICAgICAgICAiIiIKKyAgICAgICAgaWYgb2xkcG4gIT0gbmV3cG46CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBvbGRwdiA9IHNlbGYuX21vZGVsYXRlX3ZlcnNpb24ob2xkcHYpCisgICAgICAgIG5ld3B2ID0gc2VsZi5fbW9kZWxhdGVfdmVyc2lvbihuZXdwdikKKworICAgICAgICByZXR1cm4gYmIudXRpbHMudmVyY21wKCgiMCIsIG9sZHB2LCAiIiksICgiMCIsIG5ld3B2LCAiIikpCisKKyAgICBkZWYgX2ZldGNoX2luZGV4KHNlbGYsIHVyaSwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgUnVuIGZldGNoIGNoZWNrc3RhdHVzIHRvIGdldCBkaXJlY3RvcnkgaW5mb3JtYXRpb24KKyAgICAgICAgIiIiCisgICAgICAgIGYgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKQorCisgICAgICAgIGFnZW50ID0gIk1vemlsbGEvNS4wIChYMTE7IFU7IExpbnV4IGk2ODY7IGVuLVVTOyBydjoxLjkuMi4xMikgR2Vja28vMjAxMDEwMjcgVWJ1bnR1LzkuMTAgKGthcm1pYykgRmlyZWZveC8zLjYuMTIiCisgICAgICAgIGZldGNoY21kID0gc2VsZi5iYXNlY21kCisgICAgICAgIGZldGNoY21kICs9ICIgLU8gIiArIGYubmFtZSArICIgLS11c2VyLWFnZW50PSciICsgYWdlbnQgKyAiJyAnIiArIHVyaSArICInIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9ydW53Z2V0KHVkLCBkLCBmZXRjaGNtZCwgVHJ1ZSkKKyAgICAgICAgICAgIGZldGNocmVzdWx0ID0gZi5yZWFkKCkKKyAgICAgICAgZXhjZXB0IGJiLmZldGNoMi5CQkZldGNoRXhjZXB0aW9uOgorICAgICAgICAgICAgZmV0Y2hyZXN1bHQgPSAiIgorCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICByZXR1cm4gZmV0Y2hyZXN1bHQKKworICAgIGRlZiBfY2hlY2tfbGF0ZXN0X3ZlcnNpb24oc2VsZiwgdXJsLCBwYWNrYWdlLCBwYWNrYWdlX3JlZ2V4LCBjdXJyZW50X3ZlcnNpb24sIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgYSBwYWNrYWdlIGluc2lkZSBhIGdpdmVuIGRpcmVjdG9yeSBwYXRoCisgICAgICAgIElmIGVycm9yIG9yIG5vIHZlcnNpb24sIHJldHVybiAiIgorICAgICAgICAiIiIKKyAgICAgICAgdmFsaWQgPSAwCisgICAgICAgIHZlcnNpb24gPSBbJycsICcnLCAnJ10KKworICAgICAgICBiYi5kZWJ1ZygzLCAiVmVyc2lvblVSTDogJXMiICUgKHVybCkpCisgICAgICAgIHNvdXAgPSBCZWF1dGlmdWxTb3VwKHNlbGYuX2ZldGNoX2luZGV4KHVybCwgdWQsIGQpKQorICAgICAgICBpZiBub3Qgc291cDoKKyAgICAgICAgICAgIGJiLmRlYnVnKDMsICIqKiogJXMgTk8gU09VUCIgJSAodXJsKSkKKyAgICAgICAgICAgIHJldHVybiAiIgorCisgICAgICAgIGZvciBsaW5lIGluIHNvdXAuZmluZF9hbGwoJ2EnLCBocmVmPVRydWUpOgorICAgICAgICAgICAgYmIuZGVidWcoMywgImxpbmVbJ2hyZWYnXSA9ICclcyciICUgKGxpbmVbJ2hyZWYnXSkpCisgICAgICAgICAgICBiYi5kZWJ1ZygzLCAibGluZSA9ICclcyciICUgKHN0cihsaW5lKSkpCisKKyAgICAgICAgICAgIG5ld3ZlciA9IHNlbGYuX3BhcnNlX3BhdGgocGFja2FnZV9yZWdleCwgbGluZVsnaHJlZiddKQorICAgICAgICAgICAgaWYgbm90IG5ld3ZlcjoKKyAgICAgICAgICAgICAgICBuZXd2ZXIgPSBzZWxmLl9wYXJzZV9wYXRoKHBhY2thZ2VfcmVnZXgsIHN0cihsaW5lKSkKKworICAgICAgICAgICAgaWYgbmV3dmVyOgorICAgICAgICAgICAgICAgIGJiLmRlYnVnKDMsICJVcHN0cmVhbSB2ZXJzaW9uIGZvdW5kOiAlcyIgJSBuZXd2ZXJbMV0pCisgICAgICAgICAgICAgICAgaWYgdmFsaWQgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IG5ld3ZlcgorICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IDEKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYuX3ZlcmNtcCh2ZXJzaW9uLCBuZXd2ZXIpIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IG5ld3ZlcgorICAgICAgICAgICAgICAgIAorICAgICAgICBwdXB2ZXIgPSByZS5zdWIoJ18nLCAnLicsIHZlcnNpb25bMV0pCisKKyAgICAgICAgYmIuZGVidWcoMywgIioqKiAlcyAtPiBVcHN0cmVhbVZlcnNpb24gPSAlcyAoQ3VycmVudFZlcnNpb24gPSAlcykiICUKKyAgICAgICAgICAgICAgICAocGFja2FnZSwgcHVwdmVyIG9yICJOL0EiLCBjdXJyZW50X3ZlcnNpb25bMV0pKQorCisgICAgICAgIGlmIHZhbGlkOgorICAgICAgICAgICAgcmV0dXJuIHB1cHZlcgorCisgICAgICAgIHJldHVybiAiIgorCisgICAgZGVmIF9jaGVja19sYXRlc3RfdmVyc2lvbl9ieV9kaXIoc2VsZiwgZGlydmVyLCBwYWNrYWdlLCBwYWNrYWdlX3JlZ2V4LAorICAgICAgICAgICAgY3VycmVudF92ZXJzaW9uLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICAgICAgU2NhbiBldmVyeSBkaXJlY3RvcnkgaW4gb3JkZXIgdG8gZ2V0IHVwc3RyZWFtIHZlcnNpb24uCisgICAgICAgICIiIgorICAgICAgICB2ZXJzaW9uX2RpciA9IFsnJywgJycsICcnXQorICAgICAgICB2ZXJzaW9uID0gWycnLCAnJywgJyddCisKKyAgICAgICAgZGlydmVyX3JlZ2V4ID0gcmUuY29tcGlsZSgiKFxEKikoKFxkK1tcLlwtX10pKyhcZCspKSIpCisgICAgICAgIHMgPSBkaXJ2ZXJfcmVnZXguc2VhcmNoKGRpcnZlcikKKyAgICAgICAgaWYgczoKKyAgICAgICAgICAgIHZlcnNpb25fZGlyWzFdID0gcy5ncm91cCgyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmVyc2lvbl9kaXJbMV0gPSBkaXJ2ZXIKKworICAgICAgICBkaXJzX3VyaSA9IGJiLmZldGNoLmVuY29kZXVybChbdWQudHlwZSwgdWQuaG9zdCwKKyAgICAgICAgICAgICAgICB1ZC5wYXRoLnNwbGl0KGRpcnZlcilbMF0sIHVkLnVzZXIsIHVkLnBzd2QsIHt9XSkKKyAgICAgICAgYmIuZGVidWcoMywgIkRpclVSTDogJXMsICVzIiAlIChkaXJzX3VyaSwgcGFja2FnZSkpCisKKyAgICAgICAgc291cCA9IEJlYXV0aWZ1bFNvdXAoc2VsZi5fZmV0Y2hfaW5kZXgoZGlyc191cmksIHVkLCBkKSkKKyAgICAgICAgaWYgbm90IHNvdXA6CisgICAgICAgICAgICByZXR1cm4gdmVyc2lvblsxXQorCisgICAgICAgIGZvciBsaW5lIGluIHNvdXAuZmluZF9hbGwoJ2EnLCBocmVmPVRydWUpOgorICAgICAgICAgICAgcyA9IGRpcnZlcl9yZWdleC5zZWFyY2gobGluZVsnaHJlZiddLnN0cmlwKCIvIikpCisgICAgICAgICAgICBpZiBzOgorICAgICAgICAgICAgICAgIHZlcnNpb25fZGlyX25ldyA9IFsnJywgcy5ncm91cCgyKSwgJyddCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fdmVyY21wKHZlcnNpb25fZGlyLCB2ZXJzaW9uX2Rpcl9uZXcpIDw9IDA6CisgICAgICAgICAgICAgICAgICAgIGRpcnZlcl9uZXcgPSBzLmdyb3VwKDEpICsgcy5ncm91cCgyKQorICAgICAgICAgICAgICAgICAgICBwYXRoID0gdWQucGF0aC5yZXBsYWNlKGRpcnZlciwgZGlydmVyX25ldywgVHJ1ZSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KHBhY2thZ2UpWzBdCisgICAgICAgICAgICAgICAgICAgIHVyaSA9IGJiLmZldGNoLmVuY29kZXVybChbdWQudHlwZSwgdWQuaG9zdCwgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVkLnVzZXIsIHVkLnBzd2QsIHt9XSkKKworICAgICAgICAgICAgICAgICAgICBwdXB2ZXIgPSBzZWxmLl9jaGVja19sYXRlc3RfdmVyc2lvbih1cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSwgcGFja2FnZV9yZWdleCwgY3VycmVudF92ZXJzaW9uLCB1ZCwgZCkKKyAgICAgICAgICAgICAgICAgICAgaWYgcHVwdmVyOgorICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvblsxXSA9IHB1cHZlcgorCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb25fZGlyID0gdmVyc2lvbl9kaXJfbmV3CisKKyAgICAgICAgcmV0dXJuIHZlcnNpb25bMV0KKworICAgIGRlZiBfaW5pdF9yZWdleGVzKHNlbGYsIHBhY2thZ2UsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIE1hdGNoIGFzIG1hbnkgcGF0dGVybnMgYXMgcG9zc2libGUgc3VjaCBhczoKKyAgICAgICAgICAgICAgICBnbm9tZS1jb21tb24tMi4yMC4wLnRhci5neiAobW9zdCBjb21tb24gZm9ybWF0KQorICAgICAgICAgICAgICAgIGd0aystMi45MC4xLnRhci5negorICAgICAgICAgICAgICAgIHhmODYtaW5wdXQtc3luYXB0aWNzLTEyLjYuOS50YXIuZ3oKKyAgICAgICAgICAgICAgICBkcmkycHJvdG8tMi4zLnRhci5negorICAgICAgICAgICAgICAgIGJsa3Rvb2xfNC5vcmlnLnRhci5negorICAgICAgICAgICAgICAgIGxpYmlkM3RhZy0wLjE1LjFiLnRhci5negorICAgICAgICAgICAgICAgIHVuemlwNTUyLnRhci5negorICAgICAgICAgICAgICAgIGljdTRjLTNfNi1zcmMudGd6CisgICAgICAgICAgICAgICAgZ2VuZXh0MmZzXzEuMy5vcmlnLnRhci5negorICAgICAgICAgICAgICAgIGdzdC1mbHVlbmRvLW1wMworICAgICAgICAiIiIKKyAgICAgICAgIyBtYXRjaCBtb3N0IHBhdHRlcm5zIHdoaWNoIHVzZXMgIi0iIGFzIHNlcGFyYXRvciB0byB2ZXJzaW9uIGRpZ2l0cworICAgICAgICBwbl9wcmVmaXgxID0gIlthLXpBLVpdW2EtekEtWjAtOV0qKFstX11bYS16QS1aXVx3KykqXCs/Wy1fXSIKKyAgICAgICAgIyBhIGxvb3NlIHBhdHRlcm4gc3VjaCBhcyBmb3IgdW56aXA1NTIudGFyLmd6CisgICAgICAgIHBuX3ByZWZpeDIgPSAiW2EtekEtWl0rIgorICAgICAgICAjIGEgbG9vc2UgcGF0dGVybiBzdWNoIGFzIGZvciA4MDMyNS1xdWlja3ktMC40LnRhci5negorICAgICAgICBwbl9wcmVmaXgzID0gIlswLTldK1stXT9bYS16QS1aXSsiCisgICAgICAgICMgU2F2ZSB0aGUgUGFja2FnZSBOYW1lIChwbikgUmVnZXggZm9yIHVzZSBsYXRlcgorICAgICAgICBwbl9yZWdleCA9ICIoJXN8JXN8JXMpIiAlIChwbl9wcmVmaXgxLCBwbl9wcmVmaXgyLCBwbl9wcmVmaXgzKQorCisgICAgICAgICMgbWF0Y2ggdmVyc2lvbgorICAgICAgICBwdmVyX3JlZ2V4ID0gIigoW0EtWl0qXGQrW2EtekEtWl0qW1wuXC1fXSopKykiCisKKyAgICAgICAgIyBtYXRjaCBhcmNoCisgICAgICAgIHBhcmNoX3JlZ2V4ID0gIi1zb3VyY2V8X2FsbF8iCisKKyAgICAgICAgIyBzcmMucnBtIGV4dGVuc2lvbiB3YXMgYWRkZWQgb25seSBmb3IgcnBtIHBhY2thZ2UuIENhbiBiZSByZW1vdmVkIGlmIHRoZSBycG0KKyAgICAgICAgIyBwYWNrYWdlZCB3aWxsIGFsd2F5cyBiZSBjb25zaWRlcmVkIGFzIGhhdmluZyB0byBiZSBtYW51YWxseSB1cGdyYWRlZAorICAgICAgICBwc3VmZml4X3JlZ2V4ID0gIih0YXJcLmd6fHRnenx0YXJcLmJ6Mnx6aXB8eHp8cnBtfGJ6MnxvcmlnXC50YXJcLmd6fHRhclwueHp8c3JjXC50YXJcLmd6fHNyY1wudGd6fHN2bnJcZCtcLnRhclwuYnoyfHN0YWJsZVwudGFyXC5nenxzcmNcLnJwbSkiCisKKyAgICAgICAgIyBtYXRjaCBuYW1lLCB2ZXJzaW9uIGFuZCBhcmNoaXZlIHR5cGUgb2YgYSBwYWNrYWdlCisgICAgICAgIHBhY2thZ2VfcmVnZXhfY29tcCA9IHJlLmNvbXBpbGUoIig/UDxuYW1lPiVzP1wuP3Y/KSg/UDxwdmVyPiVzKSg/UDxhcmNoPiVzKT9bXC4tXSg/UDx0eXBlPiVzJCkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocG5fcmVnZXgsIHB2ZXJfcmVnZXgsIHBhcmNoX3JlZ2V4LCBwc3VmZml4X3JlZ2V4KSkKKyAgICAgICAgc2VsZi5zdWZmaXhfcmVnZXhfY29tcCA9IHJlLmNvbXBpbGUocHN1ZmZpeF9yZWdleCkKKworICAgICAgICAjIGNvbXBpbGUgcmVnZXgsIGNhbiBiZSBzcGVjaWZpYyBieSBwYWNrYWdlIG9yIGdlbmVyaWMgcmVnZXgKKyAgICAgICAgcG5fcmVnZXggPSBkLmdldFZhcignUkVHRVgnLCBUcnVlKQorICAgICAgICBpZiBwbl9yZWdleDoKKyAgICAgICAgICAgIHBhY2thZ2VfY3VzdG9tX3JlZ2V4X2NvbXAgPSByZS5jb21waWxlKHBuX3JlZ2V4KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmVyc2lvbiA9IHNlbGYuX3BhcnNlX3BhdGgocGFja2FnZV9yZWdleF9jb21wLCBwYWNrYWdlKQorICAgICAgICAgICAgaWYgdmVyc2lvbjoKKyAgICAgICAgICAgICAgICBwYWNrYWdlX2N1c3RvbV9yZWdleF9jb21wID0gcmUuY29tcGlsZSgKKyAgICAgICAgICAgICAgICAgICAgIig/UDxuYW1lPiVzKSg/UDxwdmVyPiVzKSg/UDxhcmNoPiVzKT9bXC4tXSg/UDx0eXBlPiVzKSIgJQorICAgICAgICAgICAgICAgICAgICAocmUuZXNjYXBlKHZlcnNpb25bMF0pLCBwdmVyX3JlZ2V4LCBwYXJjaF9yZWdleCwgcHN1ZmZpeF9yZWdleCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhY2thZ2VfY3VzdG9tX3JlZ2V4X2NvbXAgPSBOb25lCisKKyAgICAgICAgcmV0dXJuIHBhY2thZ2VfY3VzdG9tX3JlZ2V4X2NvbXAKKworICAgIGRlZiBsYXRlc3RfdmVyc2lvbnN0cmluZyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBNYW5pcHVsYXRlIHRoZSBVUkwgYW5kIHRyeSB0byBvYnRhaW4gdGhlIGxhdGVzdCBwYWNrYWdlIHZlcnNpb24KKworICAgICAgICBzYW5pdHkgY2hlY2sgdG8gZW5zdXJlIHNhbWUgbmFtZSBhbmQgdHlwZS4KKyAgICAgICAgIiIiCisgICAgICAgIHBhY2thZ2UgPSB1ZC5wYXRoLnNwbGl0KCIvIilbLTFdCisgICAgICAgIGN1cnJlbnRfdmVyc2lvbiA9IFsnJywgZC5nZXRWYXIoJ1BWJywgVHJ1ZSksICcnXQorCisgICAgICAgICIiInBvc3NpYmxlIHRvIGhhdmUgbm8gdmVyc2lvbiBpbiBwa2cgbmFtZSwgc3VjaCBhcyBzcGVjdHJ1bS1mdyIiIgorICAgICAgICBpZiBub3QgcmUuc2VhcmNoKCJcZCsiLCBwYWNrYWdlKToKKyAgICAgICAgICAgIGN1cnJlbnRfdmVyc2lvblsxXSA9IHJlLnN1YignXycsICcuJywgY3VycmVudF92ZXJzaW9uWzFdKQorICAgICAgICAgICAgY3VycmVudF92ZXJzaW9uWzFdID0gcmUuc3ViKCctJywgJy4nLCBjdXJyZW50X3ZlcnNpb25bMV0pCisgICAgICAgICAgICByZXR1cm4gKGN1cnJlbnRfdmVyc2lvblsxXSwgJycpCisKKyAgICAgICAgcGFja2FnZV9yZWdleCA9IHNlbGYuX2luaXRfcmVnZXhlcyhwYWNrYWdlLCB1ZCwgZCkKKyAgICAgICAgaWYgcGFja2FnZV9yZWdleCBpcyBOb25lOgorICAgICAgICAgICAgYmIud2FybigibGF0ZXN0X3ZlcnNpb25zdHJpbmc6IHBhY2thZ2UgJXMgZG9uJ3QgbWF0Y2ggcGF0dGVybiIgJSAocGFja2FnZSkpCisgICAgICAgICAgICByZXR1cm4gKCcnLCAnJykKKyAgICAgICAgYmIuZGVidWcoMywgImxhdGVzdF92ZXJzaW9uc3RyaW5nLCByZWdleDogJXMiICUgKHBhY2thZ2VfcmVnZXgucGF0dGVybikpCisKKyAgICAgICAgdXJpID0gIiIKKyAgICAgICAgcmVnZXhfdXJpID0gZC5nZXRWYXIoIlJFR0VYX1VSSSIsIFRydWUpCisgICAgICAgIGlmIG5vdCByZWdleF91cmk6CisgICAgICAgICAgICBwYXRoID0gdWQucGF0aC5zcGxpdChwYWNrYWdlKVswXQorCisgICAgICAgICAgICAjIHNlYXJjaCBmb3IgdmVyc2lvbiBtYXRjaGVzIG9uIGZvbGRlcnMgaW5zaWRlIHRoZSBwYXRoLCBsaWtlOgorICAgICAgICAgICAgIyAiNS43IiBpbiBodHRwOi8vZG93bmxvYWQuZ25vbWUub3JnL3NvdXJjZXMvJHtQTn0vNS43LyR7UE59LSR7UFZ9LnRhci5negorICAgICAgICAgICAgZGlydmVyX3JlZ2V4ID0gcmUuY29tcGlsZSgiKD9QPGRpcnZlcj5bXi9dKihcZCtcLikqXGQrKFstX11yXGQrKSopLyIpCisgICAgICAgICAgICBtID0gZGlydmVyX3JlZ2V4LnNlYXJjaChwYXRoKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgICAgICAgICAgZGlydmVyID0gbS5ncm91cCgnZGlydmVyJykKKworICAgICAgICAgICAgICAgIGRpcnZlcl9wbl9yZWdleCA9IHJlLmNvbXBpbGUoIiVzXGQ/IiAlIChyZS5lc2NhcGUocG4pKSkKKyAgICAgICAgICAgICAgICBpZiBub3QgZGlydmVyX3BuX3JlZ2V4LnNlYXJjaChkaXJ2ZXIpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHNlbGYuX2NoZWNrX2xhdGVzdF92ZXJzaW9uX2J5X2RpcihkaXJ2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLCBwYWNrYWdlX3JlZ2V4LCBjdXJyZW50X3ZlcnNpb24sIHVkLCBkKSwgJycpCisKKyAgICAgICAgICAgIHVyaSA9IGJiLmZldGNoLmVuY29kZXVybChbdWQudHlwZSwgdWQuaG9zdCwgcGF0aCwgdWQudXNlciwgdWQucHN3ZCwge31dKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdXJpID0gcmVnZXhfdXJpCisKKyAgICAgICAgcmV0dXJuIChzZWxmLl9jaGVja19sYXRlc3RfdmVyc2lvbih1cmksIHBhY2thZ2UsIHBhY2thZ2VfcmVnZXgsCisgICAgICAgICAgICAgICAgY3VycmVudF92ZXJzaW9uLCB1ZCwgZCksICcnKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9tYWluLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9tYWluLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg3NjJmNzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL21haW4ucHkKQEAgLTAsMCArMSw0MjcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBQaGlsIEJsdW5kZWxsCisjIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDUgTWljaGFlbCAnTWlja2V5JyBMYXVlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgICAgICAgIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisjIENvcHlyaWdodCAoQykgMjAwNSAgICAgICAgUk9BRCBHbWJICisjIENvcHlyaWdodCAoQykgMjAwNiAgICAgICAgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IHdhcm5pbmdzCisKK2ltcG9ydCBiYgorZnJvbSBiYiBpbXBvcnQgZXZlbnQKK2ltcG9ydCBiYi5tc2cKK2Zyb20gYmIgaW1wb3J0IGNvb2tlcgorZnJvbSBiYiBpbXBvcnQgdWkKK2Zyb20gYmIgaW1wb3J0IHNlcnZlcgorZnJvbSBiYiBpbXBvcnQgY29va2VyZGF0YQorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZSIpCisKK2NsYXNzIEJCTWFpbkV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgIHBhc3MKKworZGVmIHByZXNlbnRfb3B0aW9ucyhvcHRpb25saXN0KToKKyAgICBpZiBsZW4ob3B0aW9ubGlzdCkgPiAxOgorICAgICAgICByZXR1cm4gJyBvciAnLmpvaW4oWycsICcuam9pbihvcHRpb25saXN0WzotMV0pLCBvcHRpb25saXN0Wy0xXV0pCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIG9wdGlvbmxpc3RbMF0KKworY2xhc3MgQml0YmFrZUhlbHBGb3JtYXR0ZXIob3B0cGFyc2UuSW5kZW50ZWRIZWxwRm9ybWF0dGVyKToKKyAgICBkZWYgZm9ybWF0X29wdGlvbihzZWxmLCBvcHRpb24pOgorICAgICAgICAjIFdlIG5lZWQgdG8gZG8gdGhpcyBoZXJlIHJhdGhlciB0aGFuIGluIHRoZSB0ZXh0IHdlIHN1cHBseSB0bworICAgICAgICAjIGFkZF9vcHRpb24oKSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gY2FsbCBsaXN0X2V4dGVuc2lvbl9tb2R1bGVzKCkKKyAgICAgICAgIyBvbiBldmVyeSBleGVjdXRpb24gKHNpbmNlIGl0IGltcG9ydHMgYWxsIG9mIHRoZSBtb2R1bGVzKQorICAgICAgICAjIE5vdGUgYWxzbyB0aGF0IHdlIG1vZGlmeSBvcHRpb24uaGVscCByYXRoZXIgdGhhbiB0aGUgcmV0dXJuZWQgdGV4dAorICAgICAgICAjIC0gdGhpcyBpcyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcmUtZm9ybWF0IHRoZSB0ZXh0IG91cnNlbHZlcworICAgICAgICBpZiBvcHRpb24uZGVzdCA9PSAndWknOgorICAgICAgICAgICAgdmFsaWRfdWlzID0gbGlzdF9leHRlbnNpb25fbW9kdWxlcyhiYi51aSwgJ21haW4nKQorICAgICAgICAgICAgb3B0aW9uLmhlbHAgPSBvcHRpb24uaGVscC5yZXBsYWNlKCdAQ0hPSUNFU0AnLCBwcmVzZW50X29wdGlvbnModmFsaWRfdWlzKSkKKyAgICAgICAgZWxpZiBvcHRpb24uZGVzdCA9PSAnc2VydmVydHlwZSc6CisgICAgICAgICAgICB2YWxpZF9zZXJ2ZXJfdHlwZXMgPSBsaXN0X2V4dGVuc2lvbl9tb2R1bGVzKGJiLnNlcnZlciwgJ0JpdEJha2VTZXJ2ZXInKQorICAgICAgICAgICAgb3B0aW9uLmhlbHAgPSBvcHRpb24uaGVscC5yZXBsYWNlKCdAQ0hPSUNFU0AnLCBwcmVzZW50X29wdGlvbnModmFsaWRfc2VydmVyX3R5cGVzKSkKKworICAgICAgICByZXR1cm4gb3B0cGFyc2UuSW5kZW50ZWRIZWxwRm9ybWF0dGVyLmZvcm1hdF9vcHRpb24oc2VsZiwgb3B0aW9uKQorCitkZWYgbGlzdF9leHRlbnNpb25fbW9kdWxlcyhwa2csIGNoZWNrYXR0cik6CisgICAgIiIiCisgICAgTGlzdHMgZXh0ZW5zaW9uIG1vZHVsZXMgaW4gYSBzcGVjaWZpYyBQeXRob24gcGFja2FnZQorICAgIChlLmcuIFVJcywgc2VydmVycykuIE5PVEU6IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGltcG9ydCBhbGwgb2YgdGhlCisgICAgc3VibW9kdWxlcyBvZiB0aGUgc3BlY2lmaWVkIG1vZHVsZSBpbiBvcmRlciB0byBjaGVjayBmb3IgdGhlIHNwZWNpZmllZAorICAgIGF0dHJpYnV0ZTsgdGhpcyBjYW4gaGF2ZSB1bnVzdWFsIHNpZGUtZWZmZWN0cy4gQXMgYSByZXN1bHQsIHRoaXMgc2hvdWxkCisgICAgb25seSBiZSBjYWxsZWQgd2hlbiBkaXNwbGF5aW5nIGhlbHAgdGV4dCBvciBlcnJvciBtZXNzYWdlcy4KKyAgICBQYXJhbWV0ZXJzOgorICAgICAgICBwa2c6IHByZXZpb3VzbHkgaW1wb3J0ZWQgUHl0aG9uIHBhY2thZ2UgdG8gbGlzdAorICAgICAgICBjaGVja2F0dHI6IGF0dHJpYnV0ZSB0byBsb29rIGZvciBpbiBtb2R1bGUgdG8gZGV0ZXJtaW5lIGlmIGl0J3MgdmFsaWQKKyAgICAgICAgICAgIGFzIHRoZSB0eXBlIG9mIGV4dGVuc2lvbiB5b3UgYXJlIGxvb2tpbmcgZm9yCisgICAgIiIiCisgICAgaW1wb3J0IHBrZ3V0aWwKKyAgICBwa2dkaXIgPSBvcy5wYXRoLmRpcm5hbWUocGtnLl9fZmlsZV9fKQorCisgICAgbW9kdWxlcyA9IFtdCisgICAgZm9yIF8sIG1vZHVsZW5hbWUsIF8gaW4gcGtndXRpbC5pdGVyX21vZHVsZXMoW3BrZ2Rpcl0pOgorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihwa2dkaXIsIG1vZHVsZW5hbWUpKToKKyAgICAgICAgICAgICMgaWdub3JlIGRpcmVjdG9yaWVzCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKHBrZy5fX25hbWVfXywgZnJvbWxpc3Q9W21vZHVsZW5hbWVdKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAjIElmIHdlIGNhbid0IGltcG9ydCBpdCwgaXQncyBub3QgdmFsaWQKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIG1vZHVsZV9pZiA9IGdldGF0dHIobW9kdWxlLCBtb2R1bGVuYW1lKQorICAgICAgICBpZiBnZXRhdHRyKG1vZHVsZV9pZiwgJ2hpZGRlbl9leHRlbnNpb24nLCBGYWxzZSk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBub3QgY2hlY2thdHRyIG9yIGhhc2F0dHIobW9kdWxlX2lmLCBjaGVja2F0dHIpOgorICAgICAgICAgICAgbW9kdWxlcy5hcHBlbmQobW9kdWxlbmFtZSkKKyAgICByZXR1cm4gbW9kdWxlcworCitkZWYgaW1wb3J0X2V4dGVuc2lvbl9tb2R1bGUocGtnLCBtb2R1bGVuYW1lLCBjaGVja2F0dHIpOgorICAgIHRyeToKKyAgICAgICAgIyBEeW5hbWljYWxseSBsb2FkIHRoZSBVSSBiYXNlZCBvbiB0aGUgdWkgbmFtZS4gQWx0aG91Z2ggd2UKKyAgICAgICAgIyBzdWdnZXN0IGEgZml4ZWQgc2V0IHRoaXMgYWxsb3dzIHlvdSB0byBoYXZlIGZsZXhpYmlsaXR5IGluIHdoaWNoCisgICAgICAgICMgb25lcyBhcmUgYXZhaWxhYmxlLgorICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKHBrZy5fX25hbWVfXywgZnJvbWxpc3QgPSBbbW9kdWxlbmFtZV0pCisgICAgICAgIHJldHVybiBnZXRhdHRyKG1vZHVsZSwgbW9kdWxlbmFtZSkKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHJhaXNlIEJCTWFpbkV4Y2VwdGlvbignRkFUQUw6IFVuYWJsZSB0byBpbXBvcnQgZXh0ZW5zaW9uIG1vZHVsZSAiJXMiIGZyb20gJXMuIFZhbGlkIGV4dGVuc2lvbiBtb2R1bGVzOiAlcycgJSAobW9kdWxlbmFtZSwgcGtnLl9fbmFtZV9fLCBwcmVzZW50X29wdGlvbnMobGlzdF9leHRlbnNpb25fbW9kdWxlcyhwa2csIGNoZWNrYXR0cikpKSkKKworCisjIERpc3BsYXkgYml0YmFrZS9PRSB3YXJuaW5ncyB2aWEgdGhlIEJpdEJha2UuV2FybmluZ3MgbG9nZ2VyLCBpZ25vcmluZyBvdGhlcnMiIiIKK3dhcm5sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5XYXJuaW5ncyIpCitfd2FybmluZ3Nfc2hvd3dhcm5pbmcgPSB3YXJuaW5ncy5zaG93d2FybmluZworZGVmIF9zaG93d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubywgZmlsZT1Ob25lLCBsaW5lPU5vbmUpOgorICAgIGlmIGZpbGUgaXMgbm90IE5vbmU6CisgICAgICAgIGlmIF93YXJuaW5nc19zaG93d2FybmluZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF93YXJuaW5nc19zaG93d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubywgZmlsZSwgbGluZSkKKyAgICBlbHNlOgorICAgICAgICBzID0gd2FybmluZ3MuZm9ybWF0d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubykKKyAgICAgICAgd2FybmxvZy53YXJuKHMpCisKK3dhcm5pbmdzLnNob3d3YXJuaW5nID0gX3Nob3d3YXJuaW5nCit3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIikKK3dhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJkZWZhdWx0IiwgbW9kdWxlPSIoPHN0cmluZz4kfChvZXxiYilcLikiKQord2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsIGNhdGVnb3J5PVBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCit3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgY2F0ZWdvcnk9SW1wb3J0V2FybmluZykKK3dhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCBjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcsIG1vZHVsZT0iPHN0cmluZz4kIikKK3dhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCBtZXNzYWdlPSJXaXRoLXN0YXRlbWVudHMgbm93IGRpcmVjdGx5IHN1cHBvcnQgbXVsdGlwbGUgY29udGV4dCBtYW5hZ2VycyIpCisKK2NsYXNzIEJpdEJha2VDb25maWdQYXJhbWV0ZXJzKGNvb2tlcmRhdGEuQ29uZmlnUGFyYW1ldGVycyk6CisKKyAgICBkZWYgcGFyc2VDb21tYW5kTGluZShzZWxmLCBhcmd2PXN5cy5hcmd2KToKKyAgICAgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgICAgICAgICAgZm9ybWF0dGVyID0gQml0YmFrZUhlbHBGb3JtYXR0ZXIoKSwKKyAgICAgICAgICAgIHZlcnNpb24gPSAiQml0QmFrZSBCdWlsZCBUb29sIENvcmUgdmVyc2lvbiAlcyIgJSBiYi5fX3ZlcnNpb25fXywKKyAgICAgICAgICAgIHVzYWdlID0gIiIiJXByb2cgW29wdGlvbnNdIFtyZWNpcGVuYW1lL3RhcmdldCByZWNpcGU6ZG9fdGFzayAuLi5dCisKKyAgICBFeGVjdXRlcyB0aGUgc3BlY2lmaWVkIHRhc2sgKGRlZmF1bHQgaXMgJ2J1aWxkJykgZm9yIGEgZ2l2ZW4gc2V0IG9mIHRhcmdldCByZWNpcGVzICguYmIgZmlsZXMpLgorICAgIEl0IGlzIGFzc3VtZWQgdGhlcmUgaXMgYSBjb25mL2JibGF5ZXJzLmNvbmYgYXZhaWxhYmxlIGluIGN3ZCBvciBpbiBCQlBBVEggd2hpY2gKKyAgICB3aWxsIHByb3ZpZGUgdGhlIGxheWVyLCBCQkZJTEVTIGFuZCBvdGhlciBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLiIiIikKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLWIiLCAiLS1idWlsZGZpbGUiLCBoZWxwID0gIkV4ZWN1dGUgdGFza3MgZnJvbSBhIHNwZWNpZmljIC5iYiByZWNpcGUgZGlyZWN0bHkuIFdBUk5JTkc6IERvZXMgbm90IGhhbmRsZSBhbnkgZGVwZW5kZW5jaWVzIGZyb20gb3RoZXIgcmVjaXBlcy4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsIGRlc3QgPSAiYnVpbGRmaWxlIiwgZGVmYXVsdCA9IE5vbmUpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1rIiwgIi0tY29udGludWUiLCBoZWxwID0gIkNvbnRpbnVlIGFzIG11Y2ggYXMgcG9zc2libGUgYWZ0ZXIgYW4gZXJyb3IuIFdoaWxlIHRoZSB0YXJnZXQgdGhhdCBmYWlsZWQgYW5kIGFueXRoaW5nIGRlcGVuZGluZyBvbiBpdCBjYW5ub3QgYmUgYnVpbHQsIGFzIG11Y2ggYXMgcG9zc2libGUgd2lsbCBiZSBidWlsdCBiZWZvcmUgc3RvcHBpbmcuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfZmFsc2UiLCBkZXN0ID0gImFib3J0IiwgZGVmYXVsdCA9IFRydWUpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1hIiwgIi0tdHJ5YWx0Y29uZmlncyIsIGhlbHAgPSAiQ29udGludWUgd2l0aCBidWlsZHMgYnkgdHJ5aW5nIHRvIHVzZSBhbHRlcm5hdGl2ZSBwcm92aWRlcnMgd2hlcmUgcG9zc2libGUuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAidHJ5YWx0Y29uZmlncyIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLWYiLCAiLS1mb3JjZSIsIGhlbHAgPSAiRm9yY2UgdGhlIHNwZWNpZmllZCB0YXJnZXRzL3Rhc2sgdG8gcnVuIChpbnZhbGlkYXRpbmcgYW55IGV4aXN0aW5nIHN0YW1wIGZpbGUpLiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gImZvcmNlIiwgZGVmYXVsdCA9IEZhbHNlKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYyIsICItLWNtZCIsIGhlbHAgPSAiU3BlY2lmeSB0aGUgdGFzayB0byBleGVjdXRlLiBUaGUgZXhhY3Qgb3B0aW9ucyBhdmFpbGFibGUgZGVwZW5kIG9uIHRoZSBtZXRhZGF0YS4gU29tZSBleGFtcGxlcyBtaWdodCBiZSAnY29tcGlsZScgb3IgJ3BvcHVsYXRlX3N5c3Jvb3QnIG9yICdsaXN0dGFza3MnIG1heSBnaXZlIGEgbGlzdCBvZiB0aGUgdGFza3MgYXZhaWxhYmxlLiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlIiwgZGVzdCA9ICJjbWQiKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItQyIsICItLWNsZWFyLXN0YW1wIiwgaGVscCA9ICJJbnZhbGlkYXRlIHRoZSBzdGFtcCBmb3IgdGhlIHNwZWNpZmllZCB0YXNrIHN1Y2ggYXMgJ2NvbXBpbGUnIGFuZCB0aGVuIHJ1biB0aGUgZGVmYXVsdCB0YXNrIGZvciB0aGUgc3BlY2lmaWVkIHRhcmdldChzKS4iLAorICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gImludmFsaWRhdGVfc3RhbXAiKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItciIsICItLXJlYWQiLCBoZWxwID0gIlJlYWQgdGhlIHNwZWNpZmllZCBmaWxlIGJlZm9yZSBiaXRiYWtlLmNvbmYuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAiYXBwZW5kIiwgZGVzdCA9ICJwcmVmaWxlIiwgZGVmYXVsdCA9IFtdKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItUiIsICItLXBvc3RyZWFkIiwgaGVscCA9ICJSZWFkIHRoZSBzcGVjaWZpZWQgZmlsZSBhZnRlciBiaXRiYWtlLmNvbmYuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gImFwcGVuZCIsIGRlc3QgPSAicG9zdGZpbGUiLCBkZWZhdWx0ID0gW10pCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi12IiwgIi0tdmVyYm9zZSIsIGhlbHAgPSAiT3V0cHV0IG1vcmUgbG9nIG1lc3NhZ2UgZGF0YSB0byB0aGUgdGVybWluYWwuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAidmVyYm9zZSIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLUQiLCAiLS1kZWJ1ZyIsIGhlbHAgPSAiSW5jcmVhc2UgdGhlIGRlYnVnIGxldmVsLiBZb3UgY2FuIHNwZWNpZnkgdGhpcyBtb3JlIHRoYW4gb25jZS4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJjb3VudCIsIGRlc3Q9ImRlYnVnIiwgZGVmYXVsdCA9IDApCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1uIiwgIi0tZHJ5LXJ1biIsIGhlbHAgPSAiRG9uJ3QgZXhlY3V0ZSwganVzdCBnbyB0aHJvdWdoIHRoZSBtb3Rpb25zLiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gImRyeV9ydW4iLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1TIiwgIi0tZHVtcC1zaWduYXR1cmVzIiwgaGVscCA9ICJEdW1wIG91dCB0aGUgc2lnbmF0dXJlIGNvbnN0cnVjdGlvbiBpbmZvcm1hdGlvbiwgd2l0aCBubyB0YXNrIGV4ZWN1dGlvbi4gVGhlIFNJR05BVFVSRV9IQU5ETEVSIHBhcmFtZXRlciBpcyBwYXNzZWQgdG8gdGhlIGhhbmRsZXIuIFR3byBjb21tb24gdmFsdWVzIGFyZSBub25lIGFuZCBwcmludGRpZmYgYnV0IHRoZSBoYW5kbGVyIG1heSBkZWZpbmUgbW9yZS9sZXNzLiBub25lIG1lYW5zIG9ubHkgZHVtcCB0aGUgc2lnbmF0dXJlLCBwcmludGRpZmYgbWVhbnMgY29tcGFyZSB0aGUgZHVtcGVkIHNpZ25hdHVyZSB3aXRoIHRoZSBjYWNoZWQgb25lLiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gImFwcGVuZCIsIGRlc3QgPSAiZHVtcF9zaWduYXR1cmVzIiwgZGVmYXVsdCA9IFtdLCBtZXRhdmFyPSJTSUdOQVRVUkVfSEFORExFUiIpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1wIiwgIi0tcGFyc2Utb25seSIsIGhlbHAgPSAiUXVpdCBhZnRlciBwYXJzaW5nIHRoZSBCQiByZWNpcGVzLiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gInBhcnNlX29ubHkiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1zIiwgIi0tc2hvdy12ZXJzaW9ucyIsIGhlbHAgPSAiU2hvdyBjdXJyZW50IGFuZCBwcmVmZXJyZWQgdmVyc2lvbnMgb2YgYWxsIHJlY2lwZXMuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAic2hvd192ZXJzaW9ucyIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLWUiLCAiLS1lbnZpcm9ubWVudCIsIGhlbHAgPSAiU2hvdyB0aGUgZ2xvYmFsIG9yIHBlci1yZWNpcGUgZW52aXJvbm1lbnQgY29tcGxldGUgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSB2YXJpYWJsZXMgd2VyZSBzZXQvY2hhbmdlZC4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJzaG93X2Vudmlyb25tZW50IiwgZGVmYXVsdCA9IEZhbHNlKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItZyIsICItLWdyYXBodml6IiwgaGVscCA9ICJTYXZlIGRlcGVuZGVuY3kgdHJlZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCB0YXJnZXRzIGluIHRoZSBkb3Qgc3ludGF4LiIsCisgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJkb3RfZ3JhcGgiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1JIiwgIi0taWdub3JlLWRlcHMiLCBoZWxwID0gIiIiQXNzdW1lIHRoZXNlIGRlcGVuZGVuY2llcyBkb24ndCBleGlzdCBhbmQgYXJlIGFscmVhZHkgcHJvdmlkZWQgKGVxdWl2YWxlbnQgdG8gQVNTVU1FX1BST1ZJREVEKS4gVXNlZnVsIHRvIG1ha2UgZGVwZW5kZW5jeSBncmFwaHMgbW9yZSBhcHBlYWxpbmciIiIsCisgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJhcHBlbmQiLCBkZXN0ID0gImV4dHJhX2Fzc3VtZV9wcm92aWRlZCIsIGRlZmF1bHQgPSBbXSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLWwiLCAiLS1sb2ctZG9tYWlucyIsIGhlbHAgPSAiIiJTaG93IGRlYnVnIGxvZ2dpbmcgZm9yIHRoZSBzcGVjaWZpZWQgbG9nZ2luZyBkb21haW5zIiIiLAorICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAiYXBwZW5kIiwgZGVzdCA9ICJkZWJ1Z19kb21haW5zIiwgZGVmYXVsdCA9IFtdKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItUCIsICItLXByb2ZpbGUiLCBoZWxwID0gIlByb2ZpbGUgdGhlIGNvbW1hbmQgYW5kIHNhdmUgcmVwb3J0cy4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJwcm9maWxlIiwgZGVmYXVsdCA9IEZhbHNlKQorCisgICAgICAgIGVudl91aSA9IG9zLmVudmlyb24uZ2V0KCdCSVRCQUtFX1VJJywgTm9uZSkKKyAgICAgICAgZGVmYXVsdF91aSA9IGVudl91aSBvciAna25vdHR5JworICAgICAgICAjIEBDSE9JQ0VTQCBpcyBzdWJzdGl0dXRlZCBvdXQgYnkgQml0YmFrZUhlbHBGb3JtYXR0ZXIgYWJvdmUKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi11IiwgIi0tdWkiLCBoZWxwID0gIlRoZSB1c2VyIGludGVyZmFjZSB0byB1c2UgKEBDSE9JQ0VTQCAtIGRlZmF1bHQgJWRlZmF1bHQpLiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9InVpIiwgZGVmYXVsdD1kZWZhdWx0X3VpKQorCisgICAgICAgICMgQENIT0lDRVNAIGlzIHN1YnN0aXR1dGVkIG91dCBieSBCaXRiYWtlSGVscEZvcm1hdHRlciBhYm92ZQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLXQiLCAiLS1zZXJ2ZXJ0eXBlIiwgaGVscCA9ICJDaG9vc2Ugd2hpY2ggc2VydmVyIHR5cGUgdG8gdXNlIChAQ0hPSUNFU0AgLSBkZWZhdWx0ICVkZWZhdWx0KS4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsIGRlc3QgPSAic2VydmVydHlwZSIsIGRlZmF1bHQgPSAicHJvY2VzcyIpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXRva2VuIiwgaGVscCA9ICJTcGVjaWZ5IHRoZSBjb25uZWN0aW9uIHRva2VuIHRvIGJlIHVzZWQgd2hlbiBjb25uZWN0aW5nIHRvIGEgcmVtb3RlIHNlcnZlci4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsIGRlc3QgPSAieG1scnBjdG9rZW4iKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1yZXZpc2lvbnMtY2hhbmdlZCIsIGhlbHAgPSAiU2V0IHRoZSBleGl0IGNvZGUgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdXBzdHJlYW0gZmxvYXRpbmcgcmV2aXNpb25zIGhhdmUgY2hhbmdlZCBvciBub3QuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAicmV2aXNpb25zX2NoYW5nZWQiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXNlcnZlci1vbmx5IiwgaGVscCA9ICJSdW4gYml0YmFrZSB3aXRob3V0IGEgVUksIG9ubHkgc3RhcnRpbmcgYSBzZXJ2ZXIgKGNvb2tlcikgcHJvY2Vzcy4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJzZXJ2ZXJfb25seSIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLUIiLCAiLS1iaW5kIiwgaGVscCA9ICJUaGUgbmFtZS9hZGRyZXNzIGZvciB0aGUgYml0YmFrZSBzZXJ2ZXIgdG8gYmluZCB0by4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsIGRlc3QgPSAiYmluZCIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tbm8tc2V0c2NlbmUiLCBoZWxwID0gIkRvIG5vdCBydW4gYW55IHNldHNjZW5lIHRhc2tzLiBzc3RhdGUgd2lsbCBiZSBpZ25vcmVkIGFuZCBldmVyeXRoaW5nIG5lZWRlZCwgYnVpbHQuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAibm9zZXRzY2VuZSIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tcmVtb3RlLXNlcnZlciIsIGhlbHAgPSAiQ29ubmVjdCB0byB0aGUgc3BlY2lmaWVkIHNlcnZlci4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsIGRlc3QgPSAicmVtb3RlX3NlcnZlciIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLW0iLCAiLS1raWxsLXNlcnZlciIsIGhlbHAgPSAiVGVybWluYXRlIHRoZSByZW1vdGUgc2VydmVyLiIsCisgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJraWxsX3NlcnZlciIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tb2JzZXJ2ZS1vbmx5IiwgaGVscCA9ICJDb25uZWN0IHRvIGEgc2VydmVyIGFzIGFuIG9ic2VydmluZy1vbmx5IGNsaWVudC4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJvYnNlcnZlX29ubHkiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXN0YXR1cy1vbmx5IiwgaGVscCA9ICJDaGVjayB0aGUgc3RhdHVzIG9mIHRoZSByZW1vdGUgYml0YmFrZSBzZXJ2ZXIuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAic3RhdHVzX29ubHkiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi13IiwgIi0td3JpdGUtbG9nIiwgaGVscCA9ICJXcml0ZXMgdGhlIGV2ZW50IGxvZyBvZiB0aGUgYnVpbGQgdG8gYSBiaXRiYWtlIGV2ZW50IGpzb24gZmlsZS4gVXNlICcnIChlbXB0eSBzdHJpbmcpIHRvIGFzc2lnbiB0aGUgbmFtZSBhdXRvbWF0aWNhbGx5LiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlIiwgZGVzdCA9ICJ3cml0ZWV2ZW50bG9nIikKKworICAgICAgICBvcHRpb25zLCB0YXJnZXRzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndikKKworICAgICAgICAjIHNvbWUgZW52aXJvbm1lbnRhbCB2YXJpYWJsZXMgc2V0IGFsc28gY29uZmlndXJhdGlvbiBvcHRpb25zCisgICAgICAgIGlmICJCQlNFUlZFUiIgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgICAgIG9wdGlvbnMuc2VydmVydHlwZSA9ICJ4bWxycGMiCisgICAgICAgICAgICBvcHRpb25zLnJlbW90ZV9zZXJ2ZXIgPSBvcy5lbnZpcm9uWyJCQlNFUlZFUiJdCisKKyAgICAgICAgaWYgIkJCVE9LRU4iIGluIG9zLmVudmlyb246CisgICAgICAgICAgICBvcHRpb25zLnhtbHJwY3Rva2VuID0gb3MuZW52aXJvblsiQkJUT0tFTiJdCisKKyAgICAgICAgaWYgIkJCRVZFTlRMT0ciIGlzIG9zLmVudmlyb246CisgICAgICAgICAgICBvcHRpb25zLndyaXRlZXZlbnRsb2cgPSBvcy5lbnZpcm9uWyJCQkVWRU5UTE9HIl0KKworICAgICAgICAjIGZpbGwgaW4gcHJvcGVyIGxvZyBuYW1lIGlmIG5vdCBzdXBwbGllZAorICAgICAgICBpZiBvcHRpb25zLndyaXRlZXZlbnRsb2cgaXMgbm90IE5vbmUgYW5kIGxlbihvcHRpb25zLndyaXRlZXZlbnRsb2cpID09IDA6CisgICAgICAgICAgICBpbXBvcnQgZGF0ZXRpbWUKKyAgICAgICAgICAgIG9wdGlvbnMud3JpdGVldmVudGxvZyA9ICJiaXRiYWtlX2V2ZW50bG9nXyVzLmpzb24iICUgZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkuc3RyZnRpbWUoIiVZJW0lZCVIJU0lUyIpCisKKyAgICAgICAgIyBpZiBCQlNFUlZFUiBzYXlzIHRvIGF1dG9kZXRlY3QsIGxldCdzIGRvIHRoYXQKKyAgICAgICAgaWYgb3B0aW9ucy5yZW1vdGVfc2VydmVyOgorICAgICAgICAgICAgW2hvc3QsIHBvcnRdID0gb3B0aW9ucy5yZW1vdGVfc2VydmVyLnNwbGl0KCI6IiwgMikKKyAgICAgICAgICAgIHBvcnQgPSBpbnQocG9ydCkKKyAgICAgICAgICAgICMgdXNlIGF1dG9tYXRpYyBwb3J0IGlmIHBvcnQgc2V0IHRvIC0xLCBtZWFucyByZWFkIGl0IGZyb20KKyAgICAgICAgICAgICMgdGhlIGJpdGJha2UubG9jayBmaWxlOyB0aGlzIGlzIGEgYml0IHRyaWNreSwgYnV0IHdlIGFsd2F5cyBleHBlY3QKKyAgICAgICAgICAgICMgdG8gYmUgaW4gdGhlIGJhc2Ugb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeSBpZiB3ZSBuZWVkIHRvIGhhdmUgYQorICAgICAgICAgICAgIyBjaGFuY2UgdG8gc3RhcnQgdGhlIHNlcnZlciBsYXRlciwgYW55d2F5CisgICAgICAgICAgICBpZiBwb3J0ID09IC0xOgorICAgICAgICAgICAgICAgIGxvY2tfbG9jYXRpb24gPSAiLi9iaXRiYWtlLmxvY2siCisgICAgICAgICAgICAgICAgIyB3ZSB0cnkgdG8gcmVhZCB0aGUgYWRkcmVzcyBhdCBhbGwgdGltZXM7IGlmIHRoZSBzZXJ2ZXIgaXMgbm90IHN0YXJ0ZWQsCisgICAgICAgICAgICAgICAgIyB3ZSdsbCB0cnkgdG8gc3RhcnQgaXQgYWZ0ZXIgdGhlIGZpcnN0IGNvbm5lY3QgZmFpbHMsIGJlbG93CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBsZiA9IG9wZW4obG9ja19sb2NhdGlvbiwgJ3InKQorICAgICAgICAgICAgICAgICAgICByZW1vdGVkZWYgPSBsZi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgICAgIFtob3N0LCBwb3J0XSA9IHJlbW90ZWRlZi5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgICAgIHBvcnQgPSBpbnQocG9ydCkKKyAgICAgICAgICAgICAgICAgICAgbGYuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnJlbW90ZV9zZXJ2ZXIgPSByZW1vdGVkZWYKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEJCTWFpbkV4Y2VwdGlvbigiRmFpbGVkIHRvIHJlYWQgYml0YmFrZS5sb2NrICglcyksIGludmFsaWQgcG9ydCIgJSBzdHIoZSkpCisKKyAgICAgICAgcmV0dXJuIG9wdGlvbnMsIHRhcmdldHNbMTpdCisKKworZGVmIHN0YXJ0X3NlcnZlcihzZXJ2ZXJtb2R1bGUsIGNvbmZpZ1BhcmFtcywgY29uZmlndXJhdGlvbiwgZmVhdHVyZXMpOgorICAgIHNlcnZlciA9IHNlcnZlcm1vZHVsZS5CaXRCYWtlU2VydmVyKCkKKyAgICBpZiBjb25maWdQYXJhbXMuYmluZDoKKyAgICAgICAgKGhvc3QsIHBvcnQpID0gY29uZmlnUGFyYW1zLmJpbmQuc3BsaXQoJzonKQorICAgICAgICBzZXJ2ZXIuaW5pdFNlcnZlcigoaG9zdCwgaW50KHBvcnQpKSkKKyAgICAgICAgY29uZmlndXJhdGlvbi5pbnRlcmZhY2UgPSBbIHNlcnZlci5zZXJ2ZXJJbXBsLmhvc3QsIHNlcnZlci5zZXJ2ZXJJbXBsLnBvcnQgXQorICAgIGVsc2U6CisgICAgICAgIHNlcnZlci5pbml0U2VydmVyKCkKKyAgICAgICAgY29uZmlndXJhdGlvbi5pbnRlcmZhY2UgPSBbXQorCisgICAgdHJ5OgorICAgICAgICBjb25maWd1cmF0aW9uLnNldFNlcnZlclJlZ0lkbGVDYWxsYmFjayhzZXJ2ZXIuZ2V0U2VydmVySWRsZUNCKCkpCisKKyAgICAgICAgY29va2VyID0gYmIuY29va2VyLkJCQ29va2VyKGNvbmZpZ3VyYXRpb24sIGZlYXR1cmVzKQorCisgICAgICAgIHNlcnZlci5hZGRjb29rZXIoY29va2VyKQorICAgICAgICBzZXJ2ZXIuc2F2ZUNvbm5lY3Rpb25EZXRhaWxzKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIGV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgd2hpbGUgaGFzYXR0cihzZXJ2ZXIsICJldmVudF9xdWV1ZSIpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGltcG9ydCBxdWV1ZQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIGltcG9ydCBRdWV1ZSBhcyBxdWV1ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV2ZW50ID0gc2VydmVyLmV2ZW50X3F1ZXVlLmdldChibG9jaz1GYWxzZSkKKyAgICAgICAgICAgIGV4Y2VwdCAocXVldWUuRW1wdHksIElPRXJyb3IpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBsb2dnaW5nLkxvZ1JlY29yZCk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmhhbmRsZShldmVudCkKKyAgICAgICAgcmFpc2UgZXhjX2luZm9bMV0sIE5vbmUsIGV4Y19pbmZvWzJdCisgICAgc2VydmVyLmRldGFjaCgpCisgICAgY29va2VyLmxvY2suY2xvc2UoKQorICAgIHJldHVybiBzZXJ2ZXIKKworCitkZWYgYml0YmFrZV9tYWluKGNvbmZpZ1BhcmFtcywgY29uZmlndXJhdGlvbik6CisKKyAgICAjIFB5dGhvbiBtdWx0aXByb2Nlc3NpbmcgcmVxdWlyZXMgL2Rldi9zaG0gb24gTGludXgKKyAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnbGludXgnKSBhbmQgbm90IG9zLmFjY2VzcygnL2Rldi9zaG0nLCBvcy5XX09LIHwgb3MuWF9PSyk6CisgICAgICAgIHJhaXNlIEJCTWFpbkV4Y2VwdGlvbigiRkFUQUw6IC9kZXYvc2htIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCB3cml0YWJsZSIpCisKKyAgICAjIFVuYnVmZmVyIHN0ZG91dCB0byBhdm9pZCBsb2cgdHJ1bmNhdGlvbiBpbiB0aGUgZXZlbnQKKyAgICAjIG9mIGFuIHVub3JkZXJseSBleGl0IGFzIHdlbGwgYXMgdG8gcHJvdmlkZSB0aW1lbHkKKyAgICAjIHVwZGF0ZXMgdG8gbG9nIGZpbGVzIGZvciB1c2Ugd2l0aCB0YWlsCisgICAgdHJ5OgorICAgICAgICBpZiBzeXMuc3Rkb3V0Lm5hbWUgPT0gJzxzdGRvdXQ+JzoKKyAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBvcy5mZG9wZW4oc3lzLnN0ZG91dC5maWxlbm8oKSwgJ3cnLCAwKQorICAgIGV4Y2VwdDoKKyAgICAgICAgcGFzcworCisKKyAgICBjb25maWd1cmF0aW9uLnNldENvbmZpZ1BhcmFtZXRlcnMoY29uZmlnUGFyYW1zKQorCisgICAgdWlfbW9kdWxlID0gaW1wb3J0X2V4dGVuc2lvbl9tb2R1bGUoYmIudWksIGNvbmZpZ1BhcmFtcy51aSwgJ21haW4nKQorICAgIHNlcnZlcm1vZHVsZSA9IGltcG9ydF9leHRlbnNpb25fbW9kdWxlKGJiLnNlcnZlciwgY29uZmlnUGFyYW1zLnNlcnZlcnR5cGUsICdCaXRCYWtlU2VydmVyJykKKworICAgIGlmIGNvbmZpZ1BhcmFtcy5zZXJ2ZXJfb25seToKKyAgICAgICAgaWYgY29uZmlnUGFyYW1zLnNlcnZlcnR5cGUgIT0gInhtbHJwYyI6CisgICAgICAgICAgICByYWlzZSBCQk1haW5FeGNlcHRpb24oIkZBVEFMOiBJZiAnLS1zZXJ2ZXItb25seScgaXMgZGVmaW5lZCwgd2UgbXVzdCBzZXQgdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VydmVydHlwZSBhcyAneG1scnBjJy5cbiIpCisgICAgICAgIGlmIG5vdCBjb25maWdQYXJhbXMuYmluZDoKKyAgICAgICAgICAgIHJhaXNlIEJCTWFpbkV4Y2VwdGlvbigiRkFUQUw6IFRoZSAnLS1zZXJ2ZXItb25seScgb3B0aW9uIHJlcXVpcmVzIGEgbmFtZS9hZGRyZXNzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG8gYmluZCB0byB3aXRoIHRoZSAtQiBvcHRpb24uXG4iKQorICAgICAgICBpZiBjb25maWdQYXJhbXMucmVtb3RlX3NlcnZlcjoKKyAgICAgICAgICAgIHJhaXNlIEJCTWFpbkV4Y2VwdGlvbigiRkFUQUw6IFRoZSAnLS1zZXJ2ZXItb25seScgb3B0aW9uIGNvbmZsaWN0cyB3aXRoICVzLlxuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ0aGUgQkJTRVJWRVIgZW52aXJvbm1lbnQgdmFyaWFibGUiIGlmICJCQlNFUlZFUiIgaW4gb3MuZW52aXJvbiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgInRoZSAnLS1yZW1vdGUtc2VydmVyJyBvcHRpb24iICkpCisKKyAgICBpZiBjb25maWdQYXJhbXMuYmluZCBhbmQgY29uZmlnUGFyYW1zLnNlcnZlcnR5cGUgIT0gInhtbHJwYyI6CisgICAgICAgIHJhaXNlIEJCTWFpbkV4Y2VwdGlvbigiRkFUQUw6IElmICctQicgb3IgJy0tYmluZCcgaXMgZGVmaW5lZCwgd2UgbXVzdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0IHRoZSBzZXJ2ZXJ0eXBlIGFzICd4bWxycGMnLlxuIikKKworICAgIGlmIGNvbmZpZ1BhcmFtcy5yZW1vdGVfc2VydmVyIGFuZCBjb25maWdQYXJhbXMuc2VydmVydHlwZSAhPSAieG1scnBjIjoKKyAgICAgICAgcmFpc2UgQkJNYWluRXhjZXB0aW9uKCJGQVRBTDogSWYgJy0tcmVtb3RlLXNlcnZlcicgaXMgZGVmaW5lZCwgd2UgbXVzdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0IHRoZSBzZXJ2ZXJ0eXBlIGFzICd4bWxycGMnLlxuIikKKworICAgIGlmIGNvbmZpZ1BhcmFtcy5vYnNlcnZlX29ubHkgYW5kIChub3QgY29uZmlnUGFyYW1zLnJlbW90ZV9zZXJ2ZXIgb3IgY29uZmlnUGFyYW1zLmJpbmQpOgorICAgICAgICByYWlzZSBCQk1haW5FeGNlcHRpb24oIkZBVEFMOiAnLS1vYnNlcnZlLW9ubHknIGNhbiBvbmx5IGJlIHVzZWQgYnkgVUkgY2xpZW50cyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29ubmVjdGluZyB0byBhIHNlcnZlci5cbiIpCisKKyAgICBpZiBjb25maWdQYXJhbXMua2lsbF9zZXJ2ZXIgYW5kIG5vdCBjb25maWdQYXJhbXMucmVtb3RlX3NlcnZlcjoKKyAgICAgICAgcmFpc2UgQkJNYWluRXhjZXB0aW9uKCJGQVRBTDogJy0ta2lsbC1zZXJ2ZXInIGNhbiBvbmx5IGJlIHVzZWQgdG8gdGVybWluYXRlIGEgcmVtb3RlIHNlcnZlciIpCisKKyAgICBpZiAiQkJERUJVRyIgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgbGV2ZWwgPSBpbnQob3MuZW52aXJvblsiQkJERUJVRyJdKQorICAgICAgICBpZiBsZXZlbCA+IGNvbmZpZ3VyYXRpb24uZGVidWc6CisgICAgICAgICAgICBjb25maWd1cmF0aW9uLmRlYnVnID0gbGV2ZWwKKworICAgIGJiLm1zZy5pbml0X21zZ2NvbmZpZyhjb25maWdQYXJhbXMudmVyYm9zZSwgY29uZmlndXJhdGlvbi5kZWJ1ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLmRlYnVnX2RvbWFpbnMpCisKKyAgICAjIEVuc3VyZSBsb2dnaW5nIG1lc3NhZ2VzIGdldCBzZW50IHRvIHRoZSBVSSBhcyBldmVudHMKKyAgICBoYW5kbGVyID0gYmIuZXZlbnQuTG9nSGFuZGxlcigpCisgICAgaWYgbm90IGNvbmZpZ1BhcmFtcy5zdGF0dXNfb25seToKKyAgICAgICAgIyBJbiBzdGF0dXMgb25seSBtb2RlIHRoZXJlIGFyZSBubyBsb2dzIGFuZCBubyBVSQorICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihoYW5kbGVyKQorCisgICAgIyBDbGVhciBhd2F5IGFueSBzcHVyaW91cyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2hpbGUgd2Ugc3Rva2UgdXAgdGhlIGNvb2tlcgorICAgIGNsZWFuZWR2YXJzID0gYmIudXRpbHMuY2xlYW5fZW52aXJvbm1lbnQoKQorCisgICAgZmVhdHVyZXNldCA9IFtdCisgICAgaWYgbm90IGNvbmZpZ1BhcmFtcy5zZXJ2ZXJfb25seToKKyAgICAgICAgIyBDb2xsZWN0IHRoZSBmZWF0dXJlIHNldCBmb3IgdGhlIFVJCisgICAgICAgIGZlYXR1cmVzZXQgPSBnZXRhdHRyKHVpX21vZHVsZSwgImZlYXR1cmVTZXQiLCBbXSkKKworICAgIGlmIG5vdCBjb25maWdQYXJhbXMucmVtb3RlX3NlcnZlcjoKKyAgICAgICAgIyB3ZSBzdGFydCBhIHNlcnZlciB3aXRoIGEgZ2l2ZW4gY29uZmlndXJhdGlvbgorICAgICAgICBzZXJ2ZXIgPSBzdGFydF9zZXJ2ZXIoc2VydmVybW9kdWxlLCBjb25maWdQYXJhbXMsIGNvbmZpZ3VyYXRpb24sIGZlYXR1cmVzZXQpCisgICAgICAgIGJiLmV2ZW50LnVpX3F1ZXVlID0gW10KKyAgICBlbHNlOgorICAgICAgICAjIHdlIHN0YXJ0IGEgc3R1YiBzZXJ2ZXIgdGhhdCBpcyBhY3R1YWxseSBhIFhNTFJQQ2xpZW50IHRoYXQgY29ubmVjdHMgdG8gYSByZWFsIHNlcnZlcgorICAgICAgICBzZXJ2ZXIgPSBzZXJ2ZXJtb2R1bGUuQml0QmFrZVhNTFJQQ0NsaWVudChjb25maWdQYXJhbXMub2JzZXJ2ZV9vbmx5LCBjb25maWdQYXJhbXMueG1scnBjdG9rZW4pCisgICAgICAgIHNlcnZlci5zYXZlQ29ubmVjdGlvbkRldGFpbHMoY29uZmlnUGFyYW1zLnJlbW90ZV9zZXJ2ZXIpCisKKworICAgIGlmIG5vdCBjb25maWdQYXJhbXMuc2VydmVyX29ubHk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlcnZlcl9jb25uZWN0aW9uID0gc2VydmVyLmVzdGFibGlzaENvbm5lY3Rpb24oZmVhdHVyZXNldCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkNvdWxkIG5vdCBjb25uZWN0IHRvIHNlcnZlciAlczogJXMiICUgKGNvbmZpZ1BhcmFtcy5yZW1vdGVfc2VydmVyLCBzdHIoZSkpKQorCisgICAgICAgICMgUmVzdG9yZSB0aGUgZW52aXJvbm1lbnQgaW4gY2FzZSB0aGUgVUkgbmVlZHMgaXQKKyAgICAgICAgZm9yIGsgaW4gY2xlYW5lZHZhcnM6CisgICAgICAgICAgICBvcy5lbnZpcm9uW2tdID0gY2xlYW5lZHZhcnNba10KKworICAgICAgICBsb2dnZXIucmVtb3ZlSGFuZGxlcihoYW5kbGVyKQorCisKKyAgICAgICAgaWYgY29uZmlnUGFyYW1zLnN0YXR1c19vbmx5OgorICAgICAgICAgICAgc2VydmVyX2Nvbm5lY3Rpb24udGVybWluYXRlKCkKKyAgICAgICAgICAgIHJldHVybiAwCisKKyAgICAgICAgaWYgY29uZmlnUGFyYW1zLmtpbGxfc2VydmVyOgorICAgICAgICAgICAgc2VydmVyX2Nvbm5lY3Rpb24uY29ubmVjdGlvbi50ZXJtaW5hdGVTZXJ2ZXIoKQorICAgICAgICAgICAgYmIuZXZlbnQudWlfcXVldWUgPSBbXQorICAgICAgICAgICAgcmV0dXJuIDAKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gdWlfbW9kdWxlLm1haW4oc2VydmVyX2Nvbm5lY3Rpb24uY29ubmVjdGlvbiwgc2VydmVyX2Nvbm5lY3Rpb24uZXZlbnRzLCBjb25maWdQYXJhbXMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBiYi5ldmVudC51aV9xdWV1ZSA9IFtdCisgICAgICAgICAgICBzZXJ2ZXJfY29ubmVjdGlvbi50ZXJtaW5hdGUoKQorICAgIGVsc2U6CisgICAgICAgIHByaW50KCJCaXRiYWtlIHNlcnZlciBhZGRyZXNzOiAlcywgc2VydmVyIHBvcnQ6ICVzIiAlIChzZXJ2ZXIuc2VydmVySW1wbC5ob3N0LCBzZXJ2ZXIuc2VydmVySW1wbC5wb3J0KSkKKyAgICAgICAgcmV0dXJuIDAKKworICAgIHJldHVybiAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL21ldGhvZHBvb2wucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL21ldGhvZHBvb2wucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYyZTlmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvbWV0aG9kcG9vbC5weQpAQCAtMCwwICsxLDI5IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIworIyBDb3B5cmlnaHQgKEMpICAgICAgIDIwMDYgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gYmIudXRpbHMgaW1wb3J0IGJldHRlcl9jb21waWxlLCBiZXR0ZXJfZXhlYworCitkZWYgaW5zZXJ0X21ldGhvZChtb2R1bGVuYW1lLCBjb2RlLCBmbik6CisgICAgIiIiCisgICAgQWRkIGNvZGUgb2YgYSBtb2R1bGUgc2hvdWxkIGJlIGFkZGVkLiBUaGUgbWV0aG9kcworICAgIHdpbGwgYmUgc2ltcGx5IGFkZGVkLCBubyBjaGVja2luZyB3aWxsIGJlIGRvbmUKKyAgICAiIiIKKyAgICBjb21wID0gYmV0dGVyX2NvbXBpbGUoY29kZSwgbW9kdWxlbmFtZSwgZm4gKQorICAgIGJldHRlcl9leGVjKGNvbXAsIE5vbmUsIGNvZGUsIGZuKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL21vbml0b3JkaXNrLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9tb25pdG9yZGlzay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjY1MjNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9tb25pdG9yZGlzay5weQpAQCAtMCwwICsxLDI2MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgUm9iZXJ0IFlhbmcKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBvcywgbG9nZ2luZywgcmUsIHN5cworaW1wb3J0IGJiCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5Nb25pdG9yIikKKworZGVmIHByaW50RXJyKGluZm8pOgorICAgIGxvZ2dlci5lcnJvcigiJXNcbiAgICAgICBEaXNrIHNwYWNlIG1vbml0b3Igd2lsbCBOT1QgYmUgZW5hYmxlZCIgJSBpbmZvKQorCitkZWYgY29udmVydEdNSyh1bml0KToKKworICAgICIiIiBDb252ZXJ0IHRoZSBzcGFjZSB1bml0IEcsIE0sIEssIHRoZSB1bml0IGlzIGNhc2UtaW5zZW5zaXRpdmUgIiIiCisKKyAgICB1bml0RyA9IHJlLm1hdGNoKCcoWzEtOV1bMC05XSopW2dHXVxzPyQnLCB1bml0KQorICAgIGlmIHVuaXRHOgorICAgICAgICByZXR1cm4gaW50KHVuaXRHLmdyb3VwKDEpKSAqICgxMDI0ICoqIDMpCisgICAgdW5pdE0gPSByZS5tYXRjaCgnKFsxLTldWzAtOV0qKVttTV1ccz8kJywgdW5pdCkKKyAgICBpZiB1bml0TToKKyAgICAgICAgcmV0dXJuIGludCh1bml0TS5ncm91cCgxKSkgKiAoMTAyNCAqKiAyKQorICAgIHVuaXRLID0gcmUubWF0Y2goJyhbMS05XVswLTldKilba0tdXHM/JCcsIHVuaXQpCisgICAgaWYgdW5pdEs6CisgICAgICAgIHJldHVybiBpbnQodW5pdEsuZ3JvdXAoMSkpICogMTAyNAorICAgIHVuaXROID0gcmUubWF0Y2goJyhbMS05XVswLTldKilccz8kJywgdW5pdCkKKyAgICBpZiB1bml0TjoKKyAgICAgICAgcmV0dXJuIGludCh1bml0Ti5ncm91cCgxKSkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gTm9uZQorCitkZWYgZ2V0TW91bnRlZERldihwYXRoKToKKworICAgICIiIiBHZXQgdGhlIGRldmljZSBtb3VudGVkIGF0IHRoZSBwYXRoLCB1c2VzIC9wcm9jL21vdW50cyAiIiIKKworICAgICMgR2V0IHRoZSBtb3VudCBwb2ludCBvZiB0aGUgZmlsZXN5c3RlbSBjb250YWluaW5nIHBhdGgKKyAgICAjIHN0X2RldiBpcyB0aGUgSUQgb2YgZGV2aWNlIGNvbnRhaW5pbmcgZmlsZQorICAgIHBhcmVudERldiA9IG9zLnN0YXQocGF0aCkuc3RfZGV2CisgICAgY3VycmVudERldiA9IHBhcmVudERldgorICAgICMgV2hlbiB0aGUgY3VycmVudCBkaXJlY3RvcnkncyBkZXZpY2UgaXMgZGlmZmVyZW50IGZyb20gdGhlCisgICAgIyBwYXJlbnQncywgdGhlbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgYSBtb3VudCBwb2ludAorICAgIHdoaWxlIHBhcmVudERldiA9PSBjdXJyZW50RGV2OgorICAgICAgICBtb3VudFBvaW50ID0gcGF0aAorICAgICAgICAjIFVzZSBkaXJuYW1lIHRvIGdldCB0aGUgcGFyZW50J3MgZGlyZWN0b3J5CisgICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUocGF0aCkKKyAgICAgICAgIyBSZWFjaCB0aGUgIi8iCisgICAgICAgIGlmIHBhdGggPT0gbW91bnRQb2ludDoKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHBhcmVudERldj0gb3Muc3RhdChwYXRoKS5zdF9kZXYKKworICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKCIvcHJvYy9tb3VudHMiLCAiciIpIGFzIGlmcDoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGlmcDoKKyAgICAgICAgICAgICAgICBwcm9jTGluZXMgPSBsaW5lLnJzdHJpcCgnXG4nKS5zcGxpdCgpCisgICAgICAgICAgICAgICAgaWYgcHJvY0xpbmVzWzFdID09IG1vdW50UG9pbnQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9jTGluZXNbMF0KKyAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgcGFzcworICAgIHJldHVybiBOb25lCisKK2RlZiBnZXREaXNrRGF0YShCQkRpcnMsIGNvbmZpZ3VyYXRpb24pOgorCisgICAgIiIiUHJlcGFyZSBkaXNrIGRhdGEgZm9yIGRpc2sgc3BhY2UgbW9uaXRvciIiIgorCisgICAgIyBTYXZlIHRoZSBkZXZpY2UgSURzLCBuZWVkIHRoZSBJRCB0byBiZSB1bmlxdWUgKHRoZSBkaWN0aW9uYXJ5J3Mga2V5IGlzCisgICAgIyB1bmlxdWUpLCBzbyB0aGF0IHdoZW4gbW9yZSB0aGFuIG9uZSBkaXJlY3RvcnkgaXMgbG9jYXRlZCBvbiB0aGUgc2FtZQorICAgICMgZGV2aWNlLCB3ZSBqdXN0IG1vbml0b3IgaXQgb25jZQorICAgIGRldkRpY3QgPSB7fQorICAgIGZvciBwYXRoU3BhY2VJbm9kZSBpbiBCQkRpcnMuc3BsaXQoKToKKyAgICAgICAgIyBUaGUgaW5wdXQgZm9ybWF0IGlzOiAiZGlyLHNwYWNlLGlub2RlIiwgZGlyIGlzIGEgbXVzdCwgc3BhY2UKKyAgICAgICAgIyBhbmQgaW5vZGUgYXJlIG9wdGlvbmFsCisgICAgICAgIHBhdGhTcGFjZUlub2RlUmUgPSByZS5tYXRjaCgnKFteLF0qKSwoW14sXSopLChbXixdKiksPyguKiknLCBwYXRoU3BhY2VJbm9kZSkKKyAgICAgICAgaWYgbm90IHBhdGhTcGFjZUlub2RlUmU6CisgICAgICAgICAgICBwcmludEVycigiSW52YWxpZCB2YWx1ZSBpbiBCQl9ESVNLTU9OX0RJUlM6ICVzIiAlIHBhdGhTcGFjZUlub2RlKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBhY3Rpb24gPSBwYXRoU3BhY2VJbm9kZVJlLmdyb3VwKDEpCisgICAgICAgIGlmIGFjdGlvbiBub3QgaW4gKCJBQk9SVCIsICJTVE9QVEFTS1MiLCAiV0FSTiIpOgorICAgICAgICAgICAgcHJpbnRFcnIoIlVua25vd24gZGlzayBzcGFjZSBtb25pdG9yIGFjdGlvbjogJXMiICUgYWN0aW9uKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBwYXRoID0gb3MucGF0aC5yZWFscGF0aChwYXRoU3BhY2VJbm9kZVJlLmdyb3VwKDIpKQorICAgICAgICBpZiBub3QgcGF0aDoKKyAgICAgICAgICAgIHByaW50RXJyKCJJbnZhbGlkIHBhdGggdmFsdWUgaW4gQkJfRElTS01PTl9ESVJTOiAlcyIgJSBwYXRoU3BhY2VJbm9kZSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgIyBUaGUgZGlzayBzcGFjZSBvciBpbm9kZSBpcyBvcHRpb25hbCwgYnV0IGl0IHNob3VsZCBoYXZlIGEgY29ycmVjdAorICAgICAgICAjIHZhbHVlIG9uY2UgaXQgaXMgc3BlY2lmaWVkCisgICAgICAgIG1pblNwYWNlID0gcGF0aFNwYWNlSW5vZGVSZS5ncm91cCgzKQorICAgICAgICBpZiBtaW5TcGFjZToKKyAgICAgICAgICAgIG1pblNwYWNlID0gY29udmVydEdNSyhtaW5TcGFjZSkKKyAgICAgICAgICAgIGlmIG5vdCBtaW5TcGFjZToKKyAgICAgICAgICAgICAgICBwcmludEVycigiSW52YWxpZCBkaXNrIHNwYWNlIHZhbHVlIGluIEJCX0RJU0tNT05fRElSUzogJXMiICUgcGF0aFNwYWNlSW5vZGVSZS5ncm91cCgzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBOb25lIG1lYW5zIHRoYXQgaXQgaXMgbm90IHNwZWNpZmllZAorICAgICAgICAgICAgbWluU3BhY2UgPSBOb25lCisKKyAgICAgICAgbWluSW5vZGUgPSBwYXRoU3BhY2VJbm9kZVJlLmdyb3VwKDQpCisgICAgICAgIGlmIG1pbklub2RlOgorICAgICAgICAgICAgbWluSW5vZGUgPSBjb252ZXJ0R01LKG1pbklub2RlKQorICAgICAgICAgICAgaWYgbm90IG1pbklub2RlOgorICAgICAgICAgICAgICAgIHByaW50RXJyKCJJbnZhbGlkIGlub2RlIHZhbHVlIGluIEJCX0RJU0tNT05fRElSUzogJXMiICUgcGF0aFNwYWNlSW5vZGVSZS5ncm91cCg0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBOb25lIG1lYW5zIHRoYXQgaXQgaXMgbm90IHNwZWNpZmllZAorICAgICAgICAgICAgbWluSW5vZGUgPSBOb25lCisKKyAgICAgICAgaWYgbWluU3BhY2UgaXMgTm9uZSBhbmQgbWluSW5vZGUgaXMgTm9uZToKKyAgICAgICAgICAgIHByaW50RXJyKCJObyBkaXNrIHNwYWNlIG9yIGlub2RlIHZhbHVlIGluIGZvdW5kIEJCX0RJU0tNT05fRElSUzogJXMiICUgcGF0aFNwYWNlSW5vZGUpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAjIG1rZGlyIGZvciB0aGUgZGlyZWN0b3J5IHNpbmNlIGl0IG1heSBub3QgZXhpc3QsIGZvciBleGFtcGxlIHRoZQorICAgICAgICAjIERMX0RJUiBtYXkgbm90IGV4aXN0IGF0IHRoZSB2ZXJ5IGJlZ2lubmluZworICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocGF0aCkKKyAgICAgICAgZGV2ID0gZ2V0TW91bnRlZERldihwYXRoKQorICAgICAgICAjIFVzZSBwYXRoL2FjdGlvbiBhcyB0aGUga2V5CisgICAgICAgIGRldkRpY3Rbb3MucGF0aC5qb2luKHBhdGgsIGFjdGlvbildID0gW2RldiwgbWluU3BhY2UsIG1pbklub2RlXQorCisgICAgcmV0dXJuIGRldkRpY3QKKworZGVmIGdldEludGVydmFsKGNvbmZpZ3VyYXRpb24pOgorCisgICAgIiIiIEdldCB0aGUgZGlzayBzcGFjZSBpbnRlcnZhbCAiIiIKKworICAgICMgVGhlIGRlZmF1bHQgdmFsdWUgaXMgNTBNIGFuZCA1Sy4KKyAgICBzcGFjZURlZmF1bHQgPSA1MCAqIDEwMjQgKiAxMDI0CisgICAgaW5vZGVEZWZhdWx0ID0gNSAqIDEwMjQKKworICAgIGludGVydmFsID0gY29uZmlndXJhdGlvbi5nZXRWYXIoIkJCX0RJU0tNT05fV0FSTklOVEVSVkFMIiwgVHJ1ZSkKKyAgICBpZiBub3QgaW50ZXJ2YWw6CisgICAgICAgIHJldHVybiBzcGFjZURlZmF1bHQsIGlub2RlRGVmYXVsdAorICAgIGVsc2U6CisgICAgICAgICMgVGhlIGRpc2sgc3BhY2Ugb3IgaW5vZGUgaW50ZXJ2YWwgaXMgb3B0aW9uYWwsIGJ1dCBpdCBzaG91bGQKKyAgICAgICAgIyBoYXZlIGEgY29ycmVjdCB2YWx1ZSBvbmNlIGl0IGlzIHNwZWNpZmllZAorICAgICAgICBpbnRlcnZhbFJlID0gcmUubWF0Y2goJyhbXixdKiksP1xzKiguKiknLCBpbnRlcnZhbCkKKyAgICAgICAgaWYgaW50ZXJ2YWxSZToKKyAgICAgICAgICAgIGludGVydmFsU3BhY2UgPSBpbnRlcnZhbFJlLmdyb3VwKDEpCisgICAgICAgICAgICBpZiBpbnRlcnZhbFNwYWNlOgorICAgICAgICAgICAgICAgIGludGVydmFsU3BhY2UgPSBjb252ZXJ0R01LKGludGVydmFsU3BhY2UpCisgICAgICAgICAgICAgICAgaWYgbm90IGludGVydmFsU3BhY2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50RXJyKCJJbnZhbGlkIGRpc2sgc3BhY2UgaW50ZXJ2YWwgdmFsdWUgaW4gQkJfRElTS01PTl9XQVJOSU5URVJWQUw6ICVzIiAlIGludGVydmFsUmUuZ3JvdXAoMSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lLCBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGludGVydmFsU3BhY2UgPSBzcGFjZURlZmF1bHQKKyAgICAgICAgICAgIGludGVydmFsSW5vZGUgPSBpbnRlcnZhbFJlLmdyb3VwKDIpCisgICAgICAgICAgICBpZiBpbnRlcnZhbElub2RlOgorICAgICAgICAgICAgICAgIGludGVydmFsSW5vZGUgPSBjb252ZXJ0R01LKGludGVydmFsSW5vZGUpCisgICAgICAgICAgICAgICAgaWYgbm90IGludGVydmFsSW5vZGU6CisgICAgICAgICAgICAgICAgICAgIHByaW50RXJyKCJJbnZhbGlkIGRpc2sgaW5vZGUgaW50ZXJ2YWwgdmFsdWUgaW4gQkJfRElTS01PTl9XQVJOSU5URVJWQUw6ICVzIiAlIGludGVydmFsUmUuZ3JvdXAoMikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lLCBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGludGVydmFsSW5vZGUgPSBpbm9kZURlZmF1bHQKKyAgICAgICAgICAgIHJldHVybiBpbnRlcnZhbFNwYWNlLCBpbnRlcnZhbElub2RlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludEVycigiSW52YWxpZCBpbnRlcnZhbCB2YWx1ZSBpbiBCQl9ESVNLTU9OX1dBUk5JTlRFUlZBTDogJXMiICUgaW50ZXJ2YWwpCisgICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorCitjbGFzcyBkaXNrTW9uaXRvcjoKKworICAgICIiIlByZXBhcmUgdGhlIGRpc2sgc3BhY2UgbW9uaXRvciBkYXRhIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlndXJhdGlvbik6CisKKyAgICAgICAgc2VsZi5lbmFibGVNb25pdG9yID0gRmFsc2UKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbgorCisgICAgICAgIEJCRGlycyA9IGNvbmZpZ3VyYXRpb24uZ2V0VmFyKCJCQl9ESVNLTU9OX0RJUlMiLCBUcnVlKSBvciBOb25lCisgICAgICAgIGlmIEJCRGlyczoKKyAgICAgICAgICAgIHNlbGYuZGV2RGljdCA9IGdldERpc2tEYXRhKEJCRGlycywgY29uZmlndXJhdGlvbikKKyAgICAgICAgICAgIGlmIHNlbGYuZGV2RGljdDoKKyAgICAgICAgICAgICAgICBzZWxmLnNwYWNlSW50ZXJ2YWwsIHNlbGYuaW5vZGVJbnRlcnZhbCA9IGdldEludGVydmFsKGNvbmZpZ3VyYXRpb24pCisgICAgICAgICAgICAgICAgaWYgc2VsZi5zcGFjZUludGVydmFsIGFuZCBzZWxmLmlub2RlSW50ZXJ2YWw6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZW5hYmxlTW9uaXRvciA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgIyBUaGVzZSBhcmUgZm9yIHNhdmluZyB0aGUgcHJldmlvdXMgZGlzayBmcmVlIHNwYWNlIGFuZCBpbm9kZSwgd2UKKyAgICAgICAgICAgICAgICAgICAgIyB1c2UgdGhlbSB0byBhdm9pZCBwcmludGluZyB0b28gbWFueSB3YXJuaW5nIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgICAgIHNlbGYucHJlRnJlZVMgPSB7fQorICAgICAgICAgICAgICAgICAgICBzZWxmLnByZUZyZWVJID0ge30KKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGZvciBTVE9QVEFTS1MgYW5kIEFCT1JULCB0byBhdm9pZCBwcmludGluZyB0aGUgbWVzc2FnZQorICAgICAgICAgICAgICAgICAgICAjIHJlcGVhdGVkbHkgd2hpbGUgd2FpdGluZyBmb3IgdGhlIHRhc2tzIHRvIGZpbmlzaAorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZWQgPSB7fQorICAgICAgICAgICAgICAgICAgICBmb3IgayBpbiBzZWxmLmRldkRpY3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByZUZyZWVTW2tdID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcmVGcmVlSVtrXSA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tlZFtrXSA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuc3BhY2VJbnRlcnZhbCBpcyBOb25lIGFuZCBzZWxmLmlub2RlSW50ZXJ2YWwgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZW5hYmxlTW9uaXRvciA9IEZhbHNlCisKKyAgICBkZWYgY2hlY2soc2VsZiwgcnEpOgorCisgICAgICAgICIiIiBUYWtlIGFjdGlvbiBmb3IgdGhlIG1vbml0b3IgIiIiCisKKyAgICAgICAgaWYgc2VsZi5lbmFibGVNb25pdG9yOgorICAgICAgICAgICAgZm9yIGsgaW4gc2VsZi5kZXZEaWN0OgorICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUoaykKKyAgICAgICAgICAgICAgICBhY3Rpb24gPSBvcy5wYXRoLmJhc2VuYW1lKGspCisgICAgICAgICAgICAgICAgZGV2ID0gc2VsZi5kZXZEaWN0W2tdWzBdCisgICAgICAgICAgICAgICAgbWluU3BhY2UgPSBzZWxmLmRldkRpY3Rba11bMV0KKyAgICAgICAgICAgICAgICBtaW5Jbm9kZSA9IHNlbGYuZGV2RGljdFtrXVsyXQorCisgICAgICAgICAgICAgICAgc3QgPSBvcy5zdGF0dmZzKHBhdGgpCisKKyAgICAgICAgICAgICAgICAjIFRoZSBmcmVlIHNwYWNlLCBmbG9hdCBwb2ludCBudW1iZXIKKyAgICAgICAgICAgICAgICBmcmVlU3BhY2UgPSBzdC5mX2JhdmFpbCAqIHN0LmZfZnJzaXplCisKKyAgICAgICAgICAgICAgICBpZiBtaW5TcGFjZSBhbmQgZnJlZVNwYWNlIDwgbWluU3BhY2U6CisgICAgICAgICAgICAgICAgICAgICMgQWx3YXlzIHNob3cgd2FybmluZywgdGhlIHNlbGYuY2hlY2tlZCB3b3VsZCBhbHdheXMgYmUgRmFsc2UgaWYgdGhlIGFjdGlvbiBpcyBXQVJOCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYucHJlRnJlZVNba10gPT0gMCBvciBzZWxmLnByZUZyZWVTW2tdIC0gZnJlZVNwYWNlID4gc2VsZi5zcGFjZUludGVydmFsIGFuZCBub3Qgc2VsZi5jaGVja2VkW2tdOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlRoZSBmcmVlIHNwYWNlIG9mICVzICglcykgaXMgcnVubmluZyBsb3cgKCUuM2ZHQiBsZWZ0KSIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRoLCBkZXYsIGZyZWVTcGFjZSAvIDEwMjQgLyAxMDI0IC8gMTAyNC4wKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJlRnJlZVNba10gPSBmcmVlU3BhY2UKKworICAgICAgICAgICAgICAgICAgICBpZiBhY3Rpb24gPT0gIlNUT1BUQVNLUyIgYW5kIG5vdCBzZWxmLmNoZWNrZWRba106CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIk5vIG5ldyB0YXNrcyBjYW4gYmUgZXhlY3V0ZWQgc2luY2UgdGhlIGRpc2sgc3BhY2UgbW9uaXRvciBhY3Rpb24gaXMgXCJTVE9QVEFTS1NcIiEiKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VkW2tdID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgcnEuZmluaXNoX3J1bnF1ZXVlKEZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5EaXNrRnVsbChkZXYsICdkaXNrJywgZnJlZVNwYWNlLCBwYXRoKSwgc2VsZi5jb25maWd1cmF0aW9uKQorICAgICAgICAgICAgICAgICAgICBlbGlmIGFjdGlvbiA9PSAiQUJPUlQiIGFuZCBub3Qgc2VsZi5jaGVja2VkW2tdOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJJbW1lZGlhdGVseSBhYm9ydCBzaW5jZSB0aGUgZGlzayBzcGFjZSBtb25pdG9yIGFjdGlvbiBpcyBcIkFCT1JUXCIhIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tlZFtrXSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJxLmZpbmlzaF9ydW5xdWV1ZShUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5EaXNrRnVsbChkZXYsICdkaXNrJywgZnJlZVNwYWNlLCBwYXRoKSwgc2VsZi5jb25maWd1cmF0aW9uKQorCisgICAgICAgICAgICAgICAgIyBUaGUgZnJlZSBpbm9kZXMsIGZsb2F0IHBvaW50IG51bWJlcgorICAgICAgICAgICAgICAgIGZyZWVJbm9kZSA9IHN0LmZfZmF2YWlsCisKKyAgICAgICAgICAgICAgICBpZiBtaW5Jbm9kZSBhbmQgZnJlZUlub2RlIDwgbWluSW5vZGU6CisgICAgICAgICAgICAgICAgICAgICMgU29tZSBmaWxlc3lzdGVtcyB1c2UgZHluYW1pYyBpbm9kZXMgc28gY2FuJ3QgcnVuIG91dAorICAgICAgICAgICAgICAgICAgICAjIChlLmcuIGJ0cmZzKS4gVGhpcyBpcyByZXBvcnRlZCBieSB0aGUgaW5vZGUgY291bnQgYmVpbmcgMC4KKyAgICAgICAgICAgICAgICAgICAgaWYgc3QuZl9maWxlcyA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZXZEaWN0W2tdWzJdID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgIyBBbHdheXMgc2hvdyB3YXJuaW5nLCB0aGUgc2VsZi5jaGVja2VkIHdvdWxkIGFsd2F5cyBiZSBGYWxzZSBpZiB0aGUgYWN0aW9uIGlzIFdBUk4KKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5wcmVGcmVlSVtrXSA9PSAwIG9yIHNlbGYucHJlRnJlZUlba10gLSBmcmVlSW5vZGUgPiBzZWxmLmlub2RlSW50ZXJ2YWwgYW5kIG5vdCBzZWxmLmNoZWNrZWRba106CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiVGhlIGZyZWUgaW5vZGUgb2YgJXMgKCVzKSBpcyBydW5uaW5nIGxvdyAoJS4zZksgbGVmdCkiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0aCwgZGV2LCBmcmVlSW5vZGUgLyAxMDI0LjApKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcmVGcmVlSVtrXSA9IGZyZWVJbm9kZQorCisgICAgICAgICAgICAgICAgICAgIGlmIGFjdGlvbiAgPT0gIlNUT1BUQVNLUyIgYW5kIG5vdCBzZWxmLmNoZWNrZWRba106CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIk5vIG5ldyB0YXNrcyBjYW4gYmUgZXhlY3V0ZWQgc2luY2UgdGhlIGRpc2sgc3BhY2UgbW9uaXRvciBhY3Rpb24gaXMgXCJTVE9QVEFTS1NcIiEiKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VkW2tdID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgcnEuZmluaXNoX3J1bnF1ZXVlKEZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5EaXNrRnVsbChkZXYsICdpbm9kZScsIGZyZWVJbm9kZSwgcGF0aCksIHNlbGYuY29uZmlndXJhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBhY3Rpb24gID09ICJBQk9SVCIgYW5kIG5vdCBzZWxmLmNoZWNrZWRba106CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkltbWVkaWF0ZWx5IGFib3J0IHNpbmNlIHRoZSBkaXNrIHNwYWNlIG1vbml0b3IgYWN0aW9uIGlzIFwiQUJPUlRcIiEiKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VkW2tdID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgcnEuZmluaXNoX3J1bnF1ZXVlKFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LkRpc2tGdWxsKGRldiwgJ2lub2RlJywgZnJlZUlub2RlLCBwYXRoKSwgc2VsZi5jb25maWd1cmF0aW9uKQorICAgICAgICByZXR1cm4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvbXNnLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9tc2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg2YjVhZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvbXNnLnB5CkBAIC0wLDAgKzEsMTk5IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdtc2cnIGltcGxlbWVudGF0aW9uCisKK01lc3NhZ2UgaGFuZGxpbmcgaW5mcmFzdHJ1Y3R1cmUgZm9yIGJpdGJha2UKKworIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDA2ICAgICAgICBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHN5cworaW1wb3J0IGNvcHkKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgY29sbGVjdGlvbnMKK2Zyb20gaXRlcnRvb2xzIGltcG9ydCBncm91cGJ5CitpbXBvcnQgd2FybmluZ3MKK2ltcG9ydCBiYgoraW1wb3J0IGJiLmV2ZW50CisKK2NsYXNzIEJCTG9nRm9ybWF0dGVyKGxvZ2dpbmcuRm9ybWF0dGVyKToKKyAgICAiIiJGb3JtYXR0ZXIgd2hpY2ggZW5zdXJlcyB0aGF0IG91ciAncGxhaW4nIG1lc3NhZ2VzIChsb2dnaW5nLklORk8gKyAxKSBhcmUgdXNlZCBhcyBpcyIiIgorCisgICAgREVCVUczID0gbG9nZ2luZy5ERUJVRyAtIDIKKyAgICBERUJVRzIgPSBsb2dnaW5nLkRFQlVHIC0gMQorICAgIERFQlVHID0gbG9nZ2luZy5ERUJVRworICAgIFZFUkJPU0UgPSBsb2dnaW5nLklORk8gLSAxCisgICAgTk9URSA9IGxvZ2dpbmcuSU5GTworICAgIFBMQUlOID0gbG9nZ2luZy5JTkZPICsgMQorICAgIEVSUk9SID0gbG9nZ2luZy5FUlJPUgorICAgIFdBUk5JTkcgPSBsb2dnaW5nLldBUk5JTkcKKyAgICBDUklUSUNBTCA9IGxvZ2dpbmcuQ1JJVElDQUwKKworICAgIGxldmVsbmFtZXMgPSB7CisgICAgICAgIERFQlVHMyAgIDogJ0RFQlVHJywKKyAgICAgICAgREVCVUcyICAgOiAnREVCVUcnLAorICAgICAgICBERUJVRyAgIDogJ0RFQlVHJywKKyAgICAgICAgVkVSQk9TRTogJ05PVEUnLAorICAgICAgICBOT1RFICAgIDogJ05PVEUnLAorICAgICAgICBQTEFJTiAgOiAnJywKKyAgICAgICAgV0FSTklORyA6ICdXQVJOSU5HJywKKyAgICAgICAgRVJST1IgICA6ICdFUlJPUicsCisgICAgICAgIENSSVRJQ0FMOiAnRVJST1InLAorICAgIH0KKworICAgIGNvbG9yX2VuYWJsZWQgPSBGYWxzZQorICAgIEJBU0VDT0xPUiwgQkxBQ0ssIFJFRCwgR1JFRU4sIFlFTExPVywgQkxVRSwgTUFHRU5UQSwgQ1lBTiwgV0hJVEUgPSByYW5nZSgyOSwzOCkKKworICAgIENPTE9SUyA9IHsKKyAgICAgICAgREVCVUczICA6IENZQU4sCisgICAgICAgIERFQlVHMiAgOiBDWUFOLAorICAgICAgICBERUJVRyAgIDogQ1lBTiwKKyAgICAgICAgVkVSQk9TRSA6IEJBU0VDT0xPUiwKKyAgICAgICAgTk9URSAgICA6IEJBU0VDT0xPUiwKKyAgICAgICAgUExBSU4gICA6IEJBU0VDT0xPUiwKKyAgICAgICAgV0FSTklORyA6IFlFTExPVywKKyAgICAgICAgRVJST1IgICA6IFJFRCwKKyAgICAgICAgQ1JJVElDQUw6IFJFRCwKKyAgICB9CisKKyAgICBCTEQgPSAnXDAzM1sxOyVkbScKKyAgICBTVEQgPSAnXDAzM1slZG0nCisgICAgUlNUID0gJ1wwMzNbMG0nCisKKyAgICBkZWYgZ2V0TGV2ZWxOYW1lKHNlbGYsIGxldmVsbm8pOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5sZXZlbG5hbWVzW2xldmVsbm9dCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHNlbGYubGV2ZWxuYW1lc1tsZXZlbG5vXSA9IHZhbHVlID0gJ0xldmVsICVkJyAlIGxldmVsbm8KKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIGZvcm1hdChzZWxmLCByZWNvcmQpOgorICAgICAgICByZWNvcmQubGV2ZWxuYW1lID0gc2VsZi5nZXRMZXZlbE5hbWUocmVjb3JkLmxldmVsbm8pCisgICAgICAgIGlmIHJlY29yZC5sZXZlbG5vID09IHNlbGYuUExBSU46CisgICAgICAgICAgICBtc2cgPSByZWNvcmQuZ2V0TWVzc2FnZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLmNvbG9yX2VuYWJsZWQ6CisgICAgICAgICAgICAgICAgcmVjb3JkID0gc2VsZi5jb2xvcml6ZShyZWNvcmQpCisgICAgICAgICAgICBtc2cgPSBsb2dnaW5nLkZvcm1hdHRlci5mb3JtYXQoc2VsZiwgcmVjb3JkKQorCisgICAgICAgIGlmIGhhc2F0dHIocmVjb3JkLCAnYmJfZXhjX2luZm8nKToKKyAgICAgICAgICAgIGV0eXBlLCB2YWx1ZSwgdGIgPSByZWNvcmQuYmJfZXhjX2luZm8KKyAgICAgICAgICAgIGZvcm1hdHRlZCA9IGJiLmV4Y2VwdGlvbnMuZm9ybWF0X2V4Y2VwdGlvbihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdD01KQorICAgICAgICAgICAgbXNnICs9ICdcbicgKyAnJy5qb2luKGZvcm1hdHRlZCkKKyAgICAgICAgcmV0dXJuIG1zZworCisgICAgZGVmIGNvbG9yaXplKHNlbGYsIHJlY29yZCk6CisgICAgICAgIGNvbG9yID0gc2VsZi5DT0xPUlNbcmVjb3JkLmxldmVsbm9dCisgICAgICAgIGlmIHNlbGYuY29sb3JfZW5hYmxlZCBhbmQgY29sb3IgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZWNvcmQgPSBjb3B5LmNvcHkocmVjb3JkKQorICAgICAgICAgICAgcmVjb3JkLmxldmVsbmFtZSA9ICIiLmpvaW4oW3NlbGYuQkxEICUgY29sb3IsIHJlY29yZC5sZXZlbG5hbWUsIHNlbGYuUlNUXSkKKyAgICAgICAgICAgIHJlY29yZC5tc2cgPSAiIi5qb2luKFtzZWxmLlNURCAlIGNvbG9yLCByZWNvcmQubXNnLCBzZWxmLlJTVF0pCisgICAgICAgIHJldHVybiByZWNvcmQKKworICAgIGRlZiBlbmFibGVfY29sb3Ioc2VsZik6CisgICAgICAgIHNlbGYuY29sb3JfZW5hYmxlZCA9IFRydWUKKworY2xhc3MgQkJMb2dGaWx0ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaGFuZGxlciwgbGV2ZWwsIGRlYnVnX2RvbWFpbnMpOgorICAgICAgICBzZWxmLnN0ZGxldmVsID0gbGV2ZWwKKyAgICAgICAgc2VsZi5kZWJ1Z19kb21haW5zID0gZGVidWdfZG9tYWlucworICAgICAgICBsb2dsZXZlbCA9IGxldmVsCisgICAgICAgIGZvciBkb21haW4gaW4gZGVidWdfZG9tYWluczoKKyAgICAgICAgICAgIGlmIGRlYnVnX2RvbWFpbnNbZG9tYWluXSA8IGxvZ2xldmVsOgorICAgICAgICAgICAgICAgIGxvZ2xldmVsID0gZGVidWdfZG9tYWluc1tkb21haW5dCisgICAgICAgIGhhbmRsZXIuc2V0TGV2ZWwobG9nbGV2ZWwpCisgICAgICAgIGhhbmRsZXIuYWRkRmlsdGVyKHNlbGYpCisKKyAgICBkZWYgZmlsdGVyKHNlbGYsIHJlY29yZCk6CisgICAgICAgIGlmIHJlY29yZC5sZXZlbG5vID49IHNlbGYuc3RkbGV2ZWw6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiByZWNvcmQubmFtZSBpbiBzZWxmLmRlYnVnX2RvbWFpbnMgYW5kIHJlY29yZC5sZXZlbG5vID49IHNlbGYuZGVidWdfZG9tYWluc1tyZWNvcmQubmFtZV06CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworY2xhc3MgQkJMb2dGaWx0ZXJTdGRFcnIoQkJMb2dGaWx0ZXIpOgorICAgIGRlZiBmaWx0ZXIoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgaWYgbm90IEJCTG9nRmlsdGVyLmZpbHRlcihzZWxmLCByZWNvcmQpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIHJlY29yZC5sZXZlbG5vID49IGxvZ2dpbmcuRVJST1I6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworY2xhc3MgQkJMb2dGaWx0ZXJTdGRPdXQoQkJMb2dGaWx0ZXIpOgorICAgIGRlZiBmaWx0ZXIoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgaWYgbm90IEJCTG9nRmlsdGVyLmZpbHRlcihzZWxmLCByZWNvcmQpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIHJlY29yZC5sZXZlbG5vIDwgbG9nZ2luZy5FUlJPUjoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisjIE1lc3NhZ2UgY29udHJvbCBmdW5jdGlvbnMKKyMKKworbG9nZ2VyRGVmYXVsdERlYnVnTGV2ZWwgPSAwCitsb2dnZXJEZWZhdWx0VmVyYm9zZSA9IEZhbHNlCitsb2dnZXJWZXJib3NlTG9ncyA9IEZhbHNlCitsb2dnZXJEZWZhdWx0RG9tYWlucyA9IFtdCisKK2RlZiBpbml0X21zZ2NvbmZpZyh2ZXJib3NlLCBkZWJ1ZywgZGVidWdfZG9tYWlucz1Ob25lKToKKyAgICAiIiIKKyAgICBTZXQgZGVmYXVsdCB2ZXJib3NpdHkgYW5kIGRlYnVnIGxldmVscyBjb25maWcgdGhlIGxvZ2dlcgorICAgICIiIgorICAgIGJiLm1zZy5sb2dnZXJEZWZhdWx0RGVidWdMZXZlbCA9IGRlYnVnCisgICAgYmIubXNnLmxvZ2dlckRlZmF1bHRWZXJib3NlID0gdmVyYm9zZQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIGJiLm1zZy5sb2dnZXJWZXJib3NlTG9ncyA9IFRydWUKKyAgICBpZiBkZWJ1Z19kb21haW5zOgorICAgICAgICBiYi5tc2cubG9nZ2VyRGVmYXVsdERvbWFpbnMgPSBkZWJ1Z19kb21haW5zCisgICAgZWxzZToKKyAgICAgICAgYmIubXNnLmxvZ2dlckRlZmF1bHREb21haW5zID0gW10KKworZGVmIGNvbnN0cnVjdExvZ09wdGlvbnMoKToKKyAgICBkZWJ1ZyA9IGxvZ2dlckRlZmF1bHREZWJ1Z0xldmVsCisgICAgdmVyYm9zZSA9IGxvZ2dlckRlZmF1bHRWZXJib3NlCisgICAgZG9tYWlucyA9IGxvZ2dlckRlZmF1bHREb21haW5zCisKKyAgICBpZiBkZWJ1ZzoKKyAgICAgICAgbGV2ZWwgPSBCQkxvZ0Zvcm1hdHRlci5ERUJVRyAtIGRlYnVnICsgMQorICAgIGVsaWYgdmVyYm9zZToKKyAgICAgICAgbGV2ZWwgPSBCQkxvZ0Zvcm1hdHRlci5WRVJCT1NFCisgICAgZWxzZToKKyAgICAgICAgbGV2ZWwgPSBCQkxvZ0Zvcm1hdHRlci5OT1RFCisKKyAgICBkZWJ1Z19kb21haW5zID0ge30KKyAgICBmb3IgKGRvbWFpbmFyZywgaXRlcmF0b3IpIGluIGdyb3VwYnkoZG9tYWlucyk6CisgICAgICAgIGRsZXZlbCA9IGxlbih0dXBsZShpdGVyYXRvcikpCisgICAgICAgIGRlYnVnX2RvbWFpbnNbIkJpdEJha2UuJXMiICUgZG9tYWluYXJnXSA9IGxvZ2dpbmcuREVCVUcgLSBkbGV2ZWwgKyAxCisgICAgcmV0dXJuIGxldmVsLCBkZWJ1Z19kb21haW5zCisKK2RlZiBhZGREZWZhdWx0bG9nRmlsdGVyKGhhbmRsZXIsIGNscyA9IEJCTG9nRmlsdGVyKToKKyAgICBsZXZlbCwgZGVidWdfZG9tYWlucyA9IGNvbnN0cnVjdExvZ09wdGlvbnMoKQorCisgICAgY2xzKGhhbmRsZXIsIGxldmVsLCBkZWJ1Z19kb21haW5zKQorCisjCisjIE1lc3NhZ2UgaGFuZGxpbmcgZnVuY3Rpb25zCisjCisKK2RlZiBmYXRhbChtc2dkb21haW4sIG1zZyk6CisgICAgaWYgbXNnZG9tYWluOgorICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS4lcyIgJSBtc2dkb21haW4pCisgICAgZWxzZToKKyAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UiKQorICAgIGxvZ2dlci5jcml0aWNhbChtc2cpCisgICAgc3lzLmV4aXQoMSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvbmFtZWR0dXBsZV93aXRoX2FiYy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvbmFtZWR0dXBsZV93aXRoX2FiYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmYyZmM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9uYW1lZHR1cGxlX3dpdGhfYWJjLnB5CkBAIC0wLDAgKzEsMjU1IEBACisjIGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzU3NzYyOS1uYW1lZHR1cGxlYWJjLWFic3RyYWN0LWJhc2UtY2xhc3MtbWl4LWluLWZvci1uYW1lZC8KKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKGMpIDIwMTEgSmFuIEthbGlzemV3c2tpICh6dW8pLiBBdmFpbGFibGUgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLgorCisiIiIKK25hbWVkdHVwbGVfd2l0aF9hYmMucHk6CisqIG5hbWVkIHR1cGxlIG1peC1pbiArIEFCQyAoYWJzdHJhY3QgYmFzZSBjbGFzcykgcmVjaXBlLAorKiB3b3JrcyB1bmRlciBQeXRob24gMi42LCAyLjcgYXMgd2VsbCBhcyAzLnguCisKK0ltcG9ydCB0aGlzIG1vZHVsZSB0byBwYXRjaCBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKCkgZmFjdG9yeSBmdW5jdGlvbgorLS0gZW5yaWNoaW5nIGl0IHdpdGggdGhlICdhYmMnIGF0dHJpYnV0ZSAoYW4gYWJzdHJhY3QgYmFzZSBjbGFzcyArIG1peC1pbgorZm9yIG5hbWVkIHR1cGxlcykgYW5kIGRlY29yYXRpbmcgaXQgd2l0aCBhIHdyYXBwZXIgdGhhdCByZWdpc3RlcnMgZWFjaAorbmV3bHkgY3JlYXRlZCBuYW1lZCB0dXBsZSBhcyBhIHN1YmNsYXNzIG9mIG5hbWVkdHVwbGUuYWJjLgorCitIb3cgdG8gaW1wb3J0OgorICAgIGltcG9ydCBjb2xsZWN0aW9ucywgbmFtZWR0dXBsZV93aXRoX2FiYworb3I6CisgICAgaW1wb3J0IG5hbWVkdHVwbGVfd2l0aF9hYmMKKyAgICBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCisgICAgIyBeIGluIHRoaXMgdmFyaWFudCB5b3UgbXVzdCBpbXBvcnQgbmFtZWR0dXBsZSBmdW5jdGlvbgorICAgICMgICAqYWZ0ZXIqIGltcG9ydGluZyBuYW1lZHR1cGxlX3dpdGhfYWJjIG1vZHVsZQorb3Igc2ltcGx5OgorICAgIGZyb20gbmFtZWR0dXBsZV93aXRoX2FiYyBpbXBvcnQgbmFtZWR0dXBsZQorCitTaW1wbGUgdXNhZ2UgZXhhbXBsZToKKyAgICBjbGFzcyBDcmVkZW50aWFscyhuYW1lZHR1cGxlLmFiYyk6CisgICAgICAgIF9maWVsZHMgPSAndXNlcm5hbWUgcGFzc3dvcmQnCisgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuICgnezAuX19jbGFzc19fLl9fbmFtZV9ffScKKyAgICAgICAgICAgICAgICAgICAgJyh1c2VybmFtZT17MC51c2VybmFtZX0sIHBhc3N3b3JkPS4uLiknLmZvcm1hdChzZWxmKSkKKyAgICBwcmludChDcmVkZW50aWFscygiYWxpY2UiLCAiQWxpY2UncyBwYXNzd29yZCIpKQorCitGb3IgbW9yZSBhZHZhbmNlZCBleGFtcGxlcyAtLSBzZWUgYmVsb3cgdGhlICJpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOiIuCisiIiIKKworaW1wb3J0IGNvbGxlY3Rpb25zCitmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3Rwcm9wZXJ0eQorZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCitmcm9tIHN5cyBpbXBvcnQgdmVyc2lvbl9pbmZvCisKK19fYWxsX18gPSAoJ25hbWVkdHVwbGUnLCkKK19uYW1lZHR1cGxlID0gY29sbGVjdGlvbnMubmFtZWR0dXBsZQorCisKK2NsYXNzIF9OYW1lZFR1cGxlQUJDTWV0YShBQkNNZXRhKToKKyAgICAnJydUaGUgbWV0YWNsYXNzIGZvciB0aGUgYWJzdHJhY3QgYmFzZSBjbGFzcyArIG1peC1pbiBmb3IgbmFtZWQgdHVwbGVzLicnJworICAgIGRlZiBfX25ld19fKG1jbHMsIG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UpOgorICAgICAgICBmaWVsZHMgPSBuYW1lc3BhY2UuZ2V0KCdfZmllbGRzJykKKyAgICAgICAgZm9yIGJhc2UgaW4gYmFzZXM6CisgICAgICAgICAgICBpZiBmaWVsZHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGZpZWxkcyA9IGdldGF0dHIoYmFzZSwgJ19maWVsZHMnLCBOb25lKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShmaWVsZHMsIGFic3RyYWN0cHJvcGVydHkpOgorICAgICAgICAgICAgYmFzZXR1cGxlID0gX25hbWVkdHVwbGUobmFtZSwgZmllbGRzKQorICAgICAgICAgICAgYmFzZXMgPSAoYmFzZXR1cGxlLCkgKyBiYXNlcworICAgICAgICAgICAgbmFtZXNwYWNlLnBvcCgnX2ZpZWxkcycsIE5vbmUpCisgICAgICAgICAgICBuYW1lc3BhY2Uuc2V0ZGVmYXVsdCgnX19kb2NfXycsIGJhc2V0dXBsZS5fX2RvY19fKQorICAgICAgICAgICAgbmFtZXNwYWNlLnNldGRlZmF1bHQoJ19fc2xvdHNfXycsICgpKQorICAgICAgICByZXR1cm4gQUJDTWV0YS5fX25ld19fKG1jbHMsIG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UpCisKKworZXhlYygKKyAgICAjIFB5dGhvbiAyLnggbWV0YWNsYXNzIGRlY2xhcmF0aW9uIHN5bnRheAorICAgICIiImNsYXNzIF9OYW1lZFR1cGxlQUJDKG9iamVjdCk6CisgICAgICAgICcnJ1RoZSBhYnN0cmFjdCBiYXNlIGNsYXNzICsgbWl4LWluIGZvciBuYW1lZCB0dXBsZXMuJycnCisgICAgICAgIF9fbWV0YWNsYXNzX18gPSBfTmFtZWRUdXBsZUFCQ01ldGEKKyAgICAgICAgX2ZpZWxkcyA9IGFic3RyYWN0cHJvcGVydHkoKSIiIiBpZiB2ZXJzaW9uX2luZm9bMF0gPCAzIGVsc2UKKyAgICAjIFB5dGhvbiAzLnggbWV0YWNsYXNzIGRlY2xhcmF0aW9uIHN5bnRheAorICAgICIiImNsYXNzIF9OYW1lZFR1cGxlQUJDKG1ldGFjbGFzcz1fTmFtZWRUdXBsZUFCQ01ldGEpOgorICAgICAgICAnJydUaGUgYWJzdHJhY3QgYmFzZSBjbGFzcyArIG1peC1pbiBmb3IgbmFtZWQgdHVwbGVzLicnJworICAgICAgICBfZmllbGRzID0gYWJzdHJhY3Rwcm9wZXJ0eSgpIiIiCispCisKKworX25hbWVkdHVwbGUuYWJjID0gX05hbWVkVHVwbGVBQkMKKyNfTmFtZWRUdXBsZUFCQy5yZWdpc3Rlcih0eXBlKHZlcnNpb25faW5mbykpICAjIChhbmQgc2ltaWxhciwgaW4gdGhlIGZ1dHVyZS4uLikKKworQHdyYXBzKF9uYW1lZHR1cGxlKQorZGVmIG5hbWVkdHVwbGUoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAnJydOYW1lZCB0dXBsZSBmYWN0b3J5IHdpdGggbmFtZWR0dXBsZS5hYmMgc3ViY2xhc3MgcmVnaXN0cmF0aW9uLicnJworICAgIGNscyA9IF9uYW1lZHR1cGxlKCphcmdzLCAqKmt3YXJncykKKyAgICBfTmFtZWRUdXBsZUFCQy5yZWdpc3RlcihjbHMpCisgICAgcmV0dXJuIGNscworCitjb2xsZWN0aW9ucy5uYW1lZHR1cGxlID0gbmFtZWR0dXBsZQorCisKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorCisgICAgJycnRXhhbXBsZXMgYW5kIGV4cGxhbmF0aW9ucycnJworCisgICAgIyBTaW1wbGUgdXNhZ2UKKworICAgIGNsYXNzIE15UmVjb3JkKG5hbWVkdHVwbGUuYWJjKToKKyAgICAgICAgX2ZpZWxkcyA9ICd4IHkgeicgICMgc3VjaCBmb3JtIHdpbGwgYmUgdHJhbnNmb3JtZWQgaW50byAoJ3gnLCAneScsICd6JykKKyAgICAgICAgZGVmIF9teV9jdXN0b21fbWV0aG9kKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5fYXNkaWN0KCkuaXRlbXMoKSkKKyAgICAjICh0aGUgJ19maWVsZHMnIGF0dHJpYnV0ZSBiZWxvbmdzIHRvIHRoZSBuYW1lZCB0dXBsZSBwdWJsaWMgQVBJIGFueXdheSkKKworICAgIHJlYyA9IE15UmVjb3JkKDEsIDIsIDMpCisgICAgcHJpbnQocmVjKQorICAgIHByaW50KHJlYy5fbXlfY3VzdG9tX21ldGhvZCgpKQorICAgIHByaW50KHJlYy5fcmVwbGFjZSh5PTIyMikpCisgICAgcHJpbnQocmVjLl9yZXBsYWNlKHk9MjIyKS5fbXlfY3VzdG9tX21ldGhvZCgpKQorCisgICAgIyBDdXN0b20gYWJzdHJhY3QgY2xhc3Nlcy4uLgorCisgICAgY2xhc3MgTXlBYnN0cmFjdFJlY29yZChuYW1lZHR1cGxlLmFiYyk6CisgICAgICAgIGRlZiBfbXlfY3VzdG9tX21ldGhvZChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBsaXN0KHNlbGYuX2FzZGljdCgpLml0ZW1zKCkpCisKKyAgICB0cnk6CisgICAgICAgIE15QWJzdHJhY3RSZWNvcmQoKSAgIyAoYWJzdHJhY3QgY2xhc3NlcyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkKQorICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZXhjOgorICAgICAgICBwcmludChleGMpCisKKyAgICBjbGFzcyBBbm90aGVyQWJzdHJhY3RSZWNvcmQoTXlBYnN0cmFjdFJlY29yZCk6CisgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuICc8PDx7MH0+Pj4nLmZvcm1hdChzdXBlcihBbm90aGVyQWJzdHJhY3RSZWNvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYpLl9fc3RyX18oKSkKKworICAgICMgLi4uYW5kIHRoZWlyIG5vbi1hYnN0cmFjdCBzdWJjbGFzc2VzCisKKyAgICBjbGFzcyBNeVJlY29yZDIoTXlBYnN0cmFjdFJlY29yZCk6CisgICAgICAgIF9maWVsZHMgPSAnYSwgYicKKworICAgIGNsYXNzIE15UmVjb3JkMyhBbm90aGVyQWJzdHJhY3RSZWNvcmQpOgorICAgICAgICBfZmllbGRzID0gJ3AnLCAncScsICdyJworCisgICAgcmVjMiA9IE15UmVjb3JkMignZm9vJywgJ2JhcicpCisgICAgcHJpbnQocmVjMikKKyAgICBwcmludChyZWMyLl9teV9jdXN0b21fbWV0aG9kKCkpCisgICAgcHJpbnQocmVjMi5fcmVwbGFjZShiPTIyMikpCisgICAgcHJpbnQocmVjMi5fcmVwbGFjZShiPTIyMikuX215X2N1c3RvbV9tZXRob2QoKSkKKworICAgIHJlYzMgPSBNeVJlY29yZDMoJ2ZvbycsICdiYXInLCAnYmF6JykKKyAgICBwcmludChyZWMzKQorICAgIHByaW50KHJlYzMuX215X2N1c3RvbV9tZXRob2QoKSkKKyAgICBwcmludChyZWMzLl9yZXBsYWNlKHE9MjIyKSkKKyAgICBwcmludChyZWMzLl9yZXBsYWNlKHE9MjIyKS5fbXlfY3VzdG9tX21ldGhvZCgpKQorCisgICAjIFlvdSBjYW4gYWxzbyBzdWJjbGFzcyBub24tYWJzdHJhY3Qgb25lcy4uLgorCisgICAgY2xhc3MgTXlSZWNvcmQzMyhNeVJlY29yZDMpOgorICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiAnPCB7MCFyfSwgLi4uLCB7MCFyfSA+Jy5mb3JtYXQoc2VsZi5wLCBzZWxmLnIpCisKKyAgICByZWMzMyA9IE15UmVjb3JkMzMoJ2ZvbycsICdiYXInLCAnYmF6JykKKyAgICBwcmludChyZWMzMykKKyAgICBwcmludChyZWMzMy5fbXlfY3VzdG9tX21ldGhvZCgpKQorICAgIHByaW50KHJlYzMzLl9yZXBsYWNlKHE9MjIyKSkKKyAgICBwcmludChyZWMzMy5fcmVwbGFjZShxPTIyMikuX215X2N1c3RvbV9tZXRob2QoKSkKKworICAgICMgLi4uYW5kIGV2ZW4gb3ZlcnJpZGUgdGhlIG1hZ2ljICdfZmllbGRzJyBhdHRyaWJ1dGUgYWdhaW4KKworICAgIGNsYXNzIE15UmVjb3JkMzQ1KE15UmVjb3JkMyk6CisgICAgICAgIF9maWVsZHMgPSAnZSBmIGcgaCBpIGogaycKKworICAgIHJlYzM0NSA9IE15UmVjb3JkMzQ1KDEsIDIsIDMsIDQsIDMsIDIsIDEpCisgICAgcHJpbnQocmVjMzQ1KQorICAgIHByaW50KHJlYzM0NS5fbXlfY3VzdG9tX21ldGhvZCgpKQorICAgIHByaW50KHJlYzM0NS5fcmVwbGFjZShmPTIyMikpCisgICAgcHJpbnQocmVjMzQ1Ll9yZXBsYWNlKGY9MjIyKS5fbXlfY3VzdG9tX21ldGhvZCgpKQorCisgICAgIyBNaXhpbmctaW4gc29tZSBvdGhlciBjbGFzc2VzIGlzIGFsc28gcG9zc2libGU6CisKKyAgICBjbGFzcyBNeU1peEluKG9iamVjdCk6CisgICAgICAgIGRlZiBtZXRob2Qoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gIk15TWl4SW4ubWV0aG9kKCkgY2FsbGVkIgorICAgICAgICBkZWYgX215X2N1c3RvbV9tZXRob2Qoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gIk15TWl4SW4uX215X2N1c3RvbV9tZXRob2QoKSBjYWxsZWQiCisgICAgICAgIGRlZiBjb3VudChzZWxmLCBpdGVtKToKKyAgICAgICAgICAgIHJldHVybiAiTXlNaXhJbi5jb3VudCh7MH0pIGNhbGxlZCIuZm9ybWF0KGl0ZW0pCisgICAgICAgIGRlZiBfYXNkaWN0KHNlbGYpOiAgIyAoY2Fubm90IG92ZXJyaWRlIGEgbmFtZWR0dXBsZSBtZXRob2QsIHNlZSBiZWxvdykKKyAgICAgICAgICAgIHJldHVybiAiTXlNaXhJbi5fYXNkaWN0KCkgY2FsbGVkIgorCisgICAgY2xhc3MgTXlSZWNvcmQ0KE15UmVjb3JkMzMsIE15TWl4SW4pOiAgIyBtaXgtaW4gb24gdGhlIHJpZ2h0CisgICAgICAgIF9maWVsZHMgPSAnaiBrIGwgeCcKKworICAgIGNsYXNzIE15UmVjb3JkNShNeU1peEluLCBNeVJlY29yZDMzKTogICMgbWl4LWluIG9uIHRoZSBsZWZ0CisgICAgICAgIF9maWVsZHMgPSAnaiBrIGwgeCB5JworCisgICAgcmVjNCA9IE15UmVjb3JkNCgxLCAyLCAzLCAyKQorICAgIHByaW50KHJlYzQpCisgICAgcHJpbnQocmVjNC5tZXRob2QoKSkKKyAgICBwcmludChyZWM0Ll9teV9jdXN0b21fbWV0aG9kKCkpICAjIE15UmVjb3JkMzMncworICAgIHByaW50KHJlYzQuY291bnQoMikpICAjIHR1cGxlJ3MKKyAgICBwcmludChyZWM0Ll9yZXBsYWNlKGs9MjIyKSkKKyAgICBwcmludChyZWM0Ll9yZXBsYWNlKGs9MjIyKS5tZXRob2QoKSkKKyAgICBwcmludChyZWM0Ll9yZXBsYWNlKGs9MjIyKS5fbXlfY3VzdG9tX21ldGhvZCgpKSAgIyBNeVJlY29yZDMzJ3MKKyAgICBwcmludChyZWM0Ll9yZXBsYWNlKGs9MjIyKS5jb3VudCg4KSkgICMgdHVwbGUncworCisgICAgcmVjNSA9IE15UmVjb3JkNSgxLCAyLCAzLCAyLCAxKQorICAgIHByaW50KHJlYzUpCisgICAgcHJpbnQocmVjNS5tZXRob2QoKSkKKyAgICBwcmludChyZWM1Ll9teV9jdXN0b21fbWV0aG9kKCkpICAjIE15TWl4SW4ncworICAgIHByaW50KHJlYzUuY291bnQoMikpICAjIE15TWl4SW4ncworICAgIHByaW50KHJlYzUuX3JlcGxhY2Uoaz0yMjIpKQorICAgIHByaW50KHJlYzUuX3JlcGxhY2Uoaz0yMjIpLm1ldGhvZCgpKQorICAgIHByaW50KHJlYzUuX3JlcGxhY2Uoaz0yMjIpLl9teV9jdXN0b21fbWV0aG9kKCkpICAjIE15TWl4SW4ncworICAgIHByaW50KHJlYzUuX3JlcGxhY2Uoaz0yMjIpLmNvdW50KDIpKSAgIyBNeU1peEluJ3MKKworICAgICMgTm90ZSB0aGF0IGJlaGF2aW9yOiB0aGUgc3RhbmRhcmQgbmFtZWR0dXBsZSBtZXRob2RzIGNhbm5vdCBiZQorICAgICMgb3ZlcnJpZGRlbiBieSBhIGZvcmVpZ24gbWl4LWluIC0tIGV2ZW4gaWYgdGhlIG1peC1pbiBpcyBkZWNsYXJlZAorICAgICMgYXMgdGhlIGxlZnRtb3N0IGJhc2UgY2xhc3MgKGJ1dCwgb2J2aW91c2x5LCB5b3UgY2FuIG92ZXJyaWRlIHRoZW0KKyAgICAjIGluIHRoZSBkZWZpbmVkIGNsYXNzIG9yIGl0cyBzdWJjbGFzc2VzKToKKworICAgIHByaW50KHJlYzQuX2FzZGljdCgpKSAgIyAocmV0dXJucyBhIGRpY3QsIG5vdCAiTXlNaXhJbi5fYXNkaWN0KCkgY2FsbGVkIikKKyAgICBwcmludChyZWM1Ll9hc2RpY3QoKSkgICMgKHJldHVybnMgYSBkaWN0LCBub3QgIk15TWl4SW4uX2FzZGljdCgpIGNhbGxlZCIpCisKKyAgICBjbGFzcyBNeVJlY29yZDYoTXlSZWNvcmQzMyk6CisgICAgICAgIF9maWVsZHMgPSAnaiBrIGwgeCB5IHonCisgICAgICAgIGRlZiBfYXNkaWN0KHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuICJNeVJlY29yZDYuX2FzZGljdCgpIGNhbGxlZCIKKyAgICByZWM2ID0gTXlSZWNvcmQ2KDEsIDIsIDMsIDEsIDIsIDMpCisgICAgcHJpbnQocmVjNi5fYXNkaWN0KCkpICAjICh0aGlzIHJldHVybnMgIk15UmVjb3JkNi5fYXNkaWN0KCkgY2FsbGVkIikKKworICAgICMgQWxsIHRoYXQgcmVjb3JkIGNsYXNzZXMgYXJlIHJlYWwgc3ViY2xhc3NlcyBvZiBuYW1lZHR1cGxlLmFiYzoKKworICAgIGFzc2VydCBpc3N1YmNsYXNzKE15UmVjb3JkLCBuYW1lZHR1cGxlLmFiYykKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhNeUFic3RyYWN0UmVjb3JkLCBuYW1lZHR1cGxlLmFiYykKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhBbm90aGVyQWJzdHJhY3RSZWNvcmQsIG5hbWVkdHVwbGUuYWJjKQorICAgIGFzc2VydCBpc3N1YmNsYXNzKE15UmVjb3JkMiwgbmFtZWR0dXBsZS5hYmMpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlSZWNvcmQzLCBuYW1lZHR1cGxlLmFiYykKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhNeVJlY29yZDMzLCBuYW1lZHR1cGxlLmFiYykKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhNeVJlY29yZDM0NSwgbmFtZWR0dXBsZS5hYmMpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlSZWNvcmQ0LCBuYW1lZHR1cGxlLmFiYykKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhNeVJlY29yZDUsIG5hbWVkdHVwbGUuYWJjKQorICAgIGFzc2VydCBpc3N1YmNsYXNzKE15UmVjb3JkNiwgbmFtZWR0dXBsZS5hYmMpCisKKyAgICAjIC4uLmJ1dCBhYnN0cmFjdCBvbmVzIGFyZSBub3Qgc3ViY2xhc3NlcyBvZiB0dXBsZQorICAgICMgKGFuZCB0aGlzIGlzIHdoYXQgeW91IHByb2JhYmx5IHdhbnQpOgorCisgICAgYXNzZXJ0IG5vdCBpc3N1YmNsYXNzKE15QWJzdHJhY3RSZWNvcmQsIHR1cGxlKQorICAgIGFzc2VydCBub3QgaXNzdWJjbGFzcyhBbm90aGVyQWJzdHJhY3RSZWNvcmQsIHR1cGxlKQorCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlSZWNvcmQsIHR1cGxlKQorICAgIGFzc2VydCBpc3N1YmNsYXNzKE15UmVjb3JkMiwgdHVwbGUpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlSZWNvcmQzLCB0dXBsZSkKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhNeVJlY29yZDMzLCB0dXBsZSkKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhNeVJlY29yZDM0NSwgdHVwbGUpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlSZWNvcmQ0LCB0dXBsZSkKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhNeVJlY29yZDUsIHR1cGxlKQorICAgIGFzc2VydCBpc3N1YmNsYXNzKE15UmVjb3JkNiwgdHVwbGUpCisKKyAgICAjIE5hbWVkIHR1cGxlIGNsYXNzZXMgY3JlYXRlZCB3aXRoIG5hbWVkdHVwbGUoKSBmYWN0b3J5IGZ1bmN0aW9uCisgICAgIyAoaW4gdGhlICJ0cmFkaXRpb25hbCIgd2F5KSBhcmUgcmVnaXN0ZXJlZCBhcyAidmlydHVhbCIgc3ViY2xhc3NlcworICAgICMgb2YgbmFtZWR0dXBsZS5hYmM6CisKKyAgICBNeVR1cGxlID0gbmFtZWR0dXBsZSgnTXlUdXBsZScsICdhIGIgYycpCisgICAgbXQgPSBNeVR1cGxlKDEsIDIsIDMpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlUdXBsZSwgbmFtZWR0dXBsZS5hYmMpCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UobXQsIG5hbWVkdHVwbGUuYWJjKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wYXJzZS9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdlYzcxZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvX19pbml0X18ucHkKQEAgLTAsMCArMSwxNzAgQEAKKyIiIgorQml0QmFrZSBQYXJzZXJzCisKK0ZpbGUgcGFyc2VycyBmb3IgdGhlIEJpdEJha2UgYnVpbGQgdG9vbHMuCisKKyIiIgorCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBQaGlsIEJsdW5kZWxsCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBCYXNlZCBvbiBmdW5jdGlvbnMgZnJvbSB0aGUgYmFzZSBiYiBtb2R1bGUsIENvcHlyaWdodCAyMDAzIEhvbGdlciBTY2h1cmlnCisKK2hhbmRsZXJzID0gW10KKworaW1wb3J0IGVycm5vCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc3RhdAoraW1wb3J0IGJiCitpbXBvcnQgYmIudXRpbHMKK2ltcG9ydCBiYi5zaWdnZW4KKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuUGFyc2luZyIpCisKK2NsYXNzIFBhcnNlRXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJFeGNlcHRpb24gcmFpc2VkIHdoZW4gcGFyc2luZyBmYWlscyIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2csIGZpbGVuYW1lLCBsaW5lbm89MCk6CisgICAgICAgIHNlbGYubXNnID0gbXNnCisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQorICAgICAgICBzZWxmLmxpbmVubyA9IGxpbmVubworICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbXNnLCBmaWxlbmFtZSwgbGluZW5vKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYubGluZW5vOgorICAgICAgICAgICAgcmV0dXJuICJQYXJzZUVycm9yIGF0ICVzOiVkOiAlcyIgJSAoc2VsZi5maWxlbmFtZSwgc2VsZi5saW5lbm8sIHNlbGYubXNnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICJQYXJzZUVycm9yIGluICVzOiAlcyIgJSAoc2VsZi5maWxlbmFtZSwgc2VsZi5tc2cpCisKK2NsYXNzIFNraXBSZWNpcGUoRXhjZXB0aW9uKToKKyAgICAiIiJFeGNlcHRpb24gcmFpc2VkIHRvIHNraXAgdGhpcyByZWNpcGUiIiIKKworY2xhc3MgU2tpcFBhY2thZ2UoU2tpcFJlY2lwZSk6CisgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB0byBza2lwIHRoaXMgcmVjaXBlICh1c2UgU2tpcFJlY2lwZSBpbiBuZXcgY29kZSkiIiIKKworX19tdGltZV9jYWNoZSA9IHt9CitkZWYgY2FjaGVkX210aW1lKGYpOgorICAgIGlmIGYgbm90IGluIF9fbXRpbWVfY2FjaGU6CisgICAgICAgIF9fbXRpbWVfY2FjaGVbZl0gPSBvcy5zdGF0KGYpW3N0YXQuU1RfTVRJTUVdCisgICAgcmV0dXJuIF9fbXRpbWVfY2FjaGVbZl0KKworZGVmIGNhY2hlZF9tdGltZV9ub2Vycm9yKGYpOgorICAgIGlmIGYgbm90IGluIF9fbXRpbWVfY2FjaGU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9fbXRpbWVfY2FjaGVbZl0gPSBvcy5zdGF0KGYpW3N0YXQuU1RfTVRJTUVdCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICByZXR1cm4gX19tdGltZV9jYWNoZVtmXQorCitkZWYgdXBkYXRlX210aW1lKGYpOgorICAgIHRyeToKKyAgICAgICAgX19tdGltZV9jYWNoZVtmXSA9IG9zLnN0YXQoZilbc3RhdC5TVF9NVElNRV0KKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgaWYgZiBpbiBfX210aW1lX2NhY2hlOgorICAgICAgICAgICAgZGVsIF9fbXRpbWVfY2FjaGVbZl0KKyAgICAgICAgcmV0dXJuIDAKKyAgICByZXR1cm4gX19tdGltZV9jYWNoZVtmXQorCitkZWYgdXBkYXRlX2NhY2hlKGYpOgorICAgIGlmIGYgaW4gX19tdGltZV9jYWNoZToKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJVcGRhdGluZyBtdGltZSBjYWNoZSBmb3IgJXMiICUgZikKKyAgICAgICAgdXBkYXRlX210aW1lKGYpCisKK2RlZiBtYXJrX2RlcGVuZGVuY3koZCwgZik6CisgICAgaWYgZi5zdGFydHN3aXRoKCcuLycpOgorICAgICAgICBmID0gIiVzLyVzIiAlIChvcy5nZXRjd2QoKSwgZlsyOl0pCisgICAgZGVwcyA9IChkLmdldFZhcignX19kZXBlbmRzJywgRmFsc2UpIG9yIFtdKQorICAgIHMgPSAoZiwgY2FjaGVkX210aW1lX25vZXJyb3IoZikpCisgICAgaWYgcyBub3QgaW4gZGVwczoKKyAgICAgICAgZGVwcy5hcHBlbmQocykKKyAgICAgICAgZC5zZXRWYXIoJ19fZGVwZW5kcycsIGRlcHMpCisKK2RlZiBjaGVja19kZXBlbmRlbmN5KGQsIGYpOgorICAgIHMgPSAoZiwgY2FjaGVkX210aW1lX25vZXJyb3IoZikpCisgICAgZGVwcyA9IChkLmdldFZhcignX19kZXBlbmRzJywgRmFsc2UpIG9yIFtdKQorICAgIHJldHVybiBzIGluIGRlcHMKKyAgIAorZGVmIHN1cHBvcnRzKGZuLCBkYXRhKToKKyAgICAiIiJSZXR1cm5zIHRydWUgaWYgd2UgaGF2ZSBhIGhhbmRsZXIgZm9yIHRoaXMgZmlsZSwgZmFsc2Ugb3RoZXJ3aXNlIiIiCisgICAgZm9yIGggaW4gaGFuZGxlcnM6CisgICAgICAgIGlmIGhbJ3N1cHBvcnRzJ10oZm4sIGRhdGEpOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICByZXR1cm4gMAorCitkZWYgaGFuZGxlKGZuLCBkYXRhLCBpbmNsdWRlID0gMCk6CisgICAgIiIiQ2FsbCB0aGUgaGFuZGxlciB0aGF0IGlzIGFwcHJvcHJpYXRlIGZvciB0aGlzIGZpbGUiIiIKKyAgICBmb3IgaCBpbiBoYW5kbGVyczoKKyAgICAgICAgaWYgaFsnc3VwcG9ydHMnXShmbiwgZGF0YSk6CisgICAgICAgICAgICB3aXRoIGRhdGEuaW5jaGlzdG9yeS5pbmNsdWRlKGZuKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaFsnaGFuZGxlJ10oZm4sIGRhdGEsIGluY2x1ZGUpCisgICAgcmFpc2UgUGFyc2VFcnJvcigibm90IGEgQml0QmFrZSBmaWxlIiwgZm4pCisKK2RlZiBpbml0KGZuLCBkYXRhKToKKyAgICBmb3IgaCBpbiBoYW5kbGVyczoKKyAgICAgICAgaWYgaFsnc3VwcG9ydHMnXShmbik6CisgICAgICAgICAgICByZXR1cm4gaFsnaW5pdCddKGRhdGEpCisKK2RlZiBpbml0X3BhcnNlcihkKToKKyAgICBiYi5wYXJzZS5zaWdnZW4gPSBiYi5zaWdnZW4uaW5pdChkKQorCitkZWYgcmVzb2x2ZV9maWxlKGZuLCBkKToKKyAgICBpZiBub3Qgb3MucGF0aC5pc2Ficyhmbik6CisgICAgICAgIGJicGF0aCA9IGQuZ2V0VmFyKCJCQlBBVEgiLCBUcnVlKQorICAgICAgICBuZXdmbiwgYXR0ZW1wdHMgPSBiYi51dGlscy53aGljaChiYnBhdGgsIGZuLCBoaXN0b3J5PVRydWUpCisgICAgICAgIGZvciBhZiBpbiBhdHRlbXB0czoKKyAgICAgICAgICAgIG1hcmtfZGVwZW5kZW5jeShkLCBhZikKKyAgICAgICAgaWYgbm90IG5ld2ZuOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJuby5FTk9FTlQsICJmaWxlICVzIG5vdCBmb3VuZCBpbiAlcyIgJSAoZm4sIGJicGF0aCkpCisgICAgICAgIGZuID0gbmV3Zm4KKworICAgIG1hcmtfZGVwZW5kZW5jeShkLCBmbikKKyAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoZm4pOgorICAgICAgICByYWlzZSBJT0Vycm9yKGVycm5vLkVOT0VOVCwgImZpbGUgJXMgbm90IGZvdW5kIiAlIGZuKQorCisgICAgcmV0dXJuIGZuCisKKyMgVXNlZCBieSBPcGVuRW1iZWRkZWQgbWV0YWRhdGEKK19fcGtnc3BsaXRfY2FjaGVfXz17fQorZGVmIHZhcnNfZnJvbV9maWxlKG15cGtnLCBkKToKKyAgICBpZiBub3QgbXlwa2cgb3Igbm90IG15cGtnLmVuZHN3aXRoKCgiLmJiIiwgIi5iYmFwcGVuZCIpKToKKyAgICAgICAgcmV0dXJuIChOb25lLCBOb25lLCBOb25lKQorICAgIGlmIG15cGtnIGluIF9fcGtnc3BsaXRfY2FjaGVfXzoKKyAgICAgICAgcmV0dXJuIF9fcGtnc3BsaXRfY2FjaGVfX1tteXBrZ10KKworICAgIG15ZmlsZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShteXBrZykpCisgICAgcGFydHMgPSBteWZpbGVbMF0uc3BsaXQoJ18nKQorICAgIF9fcGtnc3BsaXRfY2FjaGVfX1tteXBrZ10gPSBwYXJ0cworICAgIGlmIGxlbihwYXJ0cykgPiAzOgorICAgICAgICByYWlzZSBQYXJzZUVycm9yKCJVbmFibGUgdG8gZ2VuZXJhdGUgZGVmYXVsdCB2YXJpYWJsZXMgZnJvbSBmaWxlbmFtZSAodG9vIG1hbnkgdW5kZXJzY29yZXMpIiwgbXlwa2cpCisgICAgZXhwID0gMyAtIGxlbihwYXJ0cykKKyAgICB0bXBsaXN0ID0gW10KKyAgICB3aGlsZSBleHAgIT0gMDoKKyAgICAgICAgZXhwIC09IDEKKyAgICAgICAgdG1wbGlzdC5hcHBlbmQoTm9uZSkKKyAgICBwYXJ0cy5leHRlbmQodG1wbGlzdCkKKyAgICByZXR1cm4gcGFydHMKKworZGVmIGdldF9maWxlX2RlcGVuZHMoZCk6CisgICAgJycnUmV0dXJuIHRoZSBkZXBlbmRlbnQgZmlsZXMnJycKKyAgICBkZXBfZmlsZXMgPSBbXQorICAgIGRlcGVuZHMgPSBkLmdldFZhcignX19iYXNlX2RlcGVuZHMnLCBUcnVlKSBvciBbXQorICAgIGRlcGVuZHMgPSBkZXBlbmRzICsgKGQuZ2V0VmFyKCdfX2RlcGVuZHMnLCBUcnVlKSBvciBbXSkKKyAgICBmb3IgKGZuLCBfKSBpbiBkZXBlbmRzOgorICAgICAgICBkZXBfZmlsZXMuYXBwZW5kKG9zLnBhdGguYWJzcGF0aChmbikpCisgICAgcmV0dXJuICIgIi5qb2luKGRlcF9maWxlcykKKworZnJvbSBiYi5wYXJzZS5wYXJzZV9weSBpbXBvcnQgX192ZXJzaW9uX18sIENvbmZIYW5kbGVyLCBCQkhhbmRsZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvYXN0LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wYXJzZS9hc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFkYjE4MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvYXN0LnB5CkBAIC0wLDAgKzEsNDgxIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCisgQWJzdHJhY3RTeW50YXhUcmVlIGNsYXNzZXMgZm9yIHRoZSBCaXRiYWtlIGxhbmd1YWdlCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgQ2hyaXMgTGFyc29uCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCBQaGlsIEJsdW5kZWxsCisjIENvcHlyaWdodCAoQykgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAorZnJvbSBmdXR1cmVfYnVpbHRpbnMgaW1wb3J0IGZpbHRlcgoraW1wb3J0IHJlCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGJiCitpbXBvcnQgaXRlcnRvb2xzCitmcm9tIGJiIGltcG9ydCBtZXRob2Rwb29sCitmcm9tIGJiLnBhcnNlIGltcG9ydCBsb2dnZXIKKworX2JidmVyc2lvbnNfcmUgPSByZS5jb21waWxlKHIiXFsoP1A8ZnJvbT5bMC05XSspLSg/UDx0bz5bMC05XSspXF0iKQorCitjbGFzcyBTdGF0ZW1lbnRHcm91cChsaXN0KToKKyAgICBkZWYgZXZhbChzZWxmLCBkYXRhKToKKyAgICAgICAgZm9yIHN0YXRlbWVudCBpbiBzZWxmOgorICAgICAgICAgICAgc3RhdGVtZW50LmV2YWwoZGF0YSkKKworY2xhc3MgQXN0Tm9kZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vKToKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYubGluZW5vID0gbGluZW5vCisKK2NsYXNzIEluY2x1ZGVOb2RlKEFzdE5vZGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vLCB3aGF0X2ZpbGUsIGZvcmNlKToKKyAgICAgICAgQXN0Tm9kZS5fX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vKQorICAgICAgICBzZWxmLndoYXRfZmlsZSA9IHdoYXRfZmlsZQorICAgICAgICBzZWxmLmZvcmNlID0gZm9yY2UKKworICAgIGRlZiBldmFsKHNlbGYsIGRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgSW5jbHVkZSB0aGUgZmlsZSBhbmQgZXZhbHVhdGUgdGhlIHN0YXRlbWVudHMKKyAgICAgICAgIiIiCisgICAgICAgIHMgPSBkYXRhLmV4cGFuZChzZWxmLndoYXRfZmlsZSkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJDT05GICVzOiVzOiBpbmNsdWRpbmcgJXMiLCBzZWxmLmZpbGVuYW1lLCBzZWxmLmxpbmVubywgcykKKworICAgICAgICAjIFRPRE86IENhY2hlIHRob3NlIGluY2x1ZGVzLi4uIG1heWJlIG5vdCBoZXJlIHRob3VnaAorICAgICAgICBpZiBzZWxmLmZvcmNlOgorICAgICAgICAgICAgYmIucGFyc2UuQ29uZkhhbmRsZXIuaW5jbHVkZShzZWxmLmZpbGVuYW1lLCBzLCBzZWxmLmxpbmVubywgZGF0YSwgImluY2x1ZGUgcmVxdWlyZWQiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIucGFyc2UuQ29uZkhhbmRsZXIuaW5jbHVkZShzZWxmLmZpbGVuYW1lLCBzLCBzZWxmLmxpbmVubywgZGF0YSwgRmFsc2UpCisKK2NsYXNzIEV4cG9ydE5vZGUoQXN0Tm9kZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8sIHZhcik6CisgICAgICAgIEFzdE5vZGUuX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubykKKyAgICAgICAgc2VsZi52YXIgPSB2YXIKKworICAgIGRlZiBldmFsKHNlbGYsIGRhdGEpOgorICAgICAgICBkYXRhLnNldFZhckZsYWcoc2VsZi52YXIsICJleHBvcnQiLCAxLCBvcCA9ICdleHBvcnRlZCcpCisKK2NsYXNzIERhdGFOb2RlKEFzdE5vZGUpOgorICAgICIiIgorICAgIFZhcmlvdXMgZGF0YSByZWxhdGVkIHVwZGF0ZXMuIEZvciB0aGUgc2FrZSBvZiBzYW5pdHkKKyAgICB3ZSBoYXZlIG9uZSBjbGFzcyBkb2luZyBhbGwgdGhpcy4gVGhpcyBtZWFucyB0aGF0IGFsbAorICAgIHRoaXMgbmVlZCB0byBiZSByZS1ldmFsdWF0ZWQuLi4gd2UgbWlnaHQgYmUgYWJsZSB0byBkbworICAgIHRoYXQgZmFzdGVyIHdpdGggbXVsdGlwbGUgY2xhc3Nlcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubywgZ3JvdXBkKToKKyAgICAgICAgQXN0Tm9kZS5fX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vKQorICAgICAgICBzZWxmLmdyb3VwZCA9IGdyb3VwZAorCisgICAgZGVmIGdldEZ1bmMoc2VsZiwga2V5LCBkYXRhKToKKyAgICAgICAgaWYgJ2ZsYWcnIGluIHNlbGYuZ3JvdXBkIGFuZCBzZWxmLmdyb3VwZFsnZmxhZyddICE9IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gZGF0YS5nZXRWYXJGbGFnKGtleSwgc2VsZi5ncm91cGRbJ2ZsYWcnXSwgbm93ZWFrZGVmYXVsdD1UcnVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGRhdGEuZ2V0VmFyKGtleSwgRmFsc2UsIG5vd2Vha2RlZmF1bHQ9VHJ1ZSwgcGFyc2luZz1UcnVlKQorCisgICAgZGVmIGV2YWwoc2VsZiwgZGF0YSk6CisgICAgICAgIGdyb3VwZCA9IHNlbGYuZ3JvdXBkCisgICAgICAgIGtleSA9IGdyb3VwZFsidmFyIl0KKyAgICAgICAgbG9naW5mbyA9IHsKKyAgICAgICAgICAgICd2YXJpYWJsZSc6IGtleSwKKyAgICAgICAgICAgICdmaWxlJzogc2VsZi5maWxlbmFtZSwKKyAgICAgICAgICAgICdsaW5lJzogc2VsZi5saW5lbm8sCisgICAgICAgIH0KKyAgICAgICAgaWYgImV4cCIgaW4gZ3JvdXBkIGFuZCBncm91cGRbImV4cCJdICE9IE5vbmU6CisgICAgICAgICAgICBkYXRhLnNldFZhckZsYWcoa2V5LCAiZXhwb3J0IiwgMSwgb3AgPSAnZXhwb3J0ZWQnLCAqKmxvZ2luZm8pCisKKyAgICAgICAgb3AgPSAic2V0IgorICAgICAgICBpZiAicXVlcyIgaW4gZ3JvdXBkIGFuZCBncm91cGRbInF1ZXMiXSAhPSBOb25lOgorICAgICAgICAgICAgdmFsID0gc2VsZi5nZXRGdW5jKGtleSwgZGF0YSkKKyAgICAgICAgICAgIG9wID0gInNldD8iCisgICAgICAgICAgICBpZiB2YWwgPT0gTm9uZToKKyAgICAgICAgICAgICAgICB2YWwgPSBncm91cGRbInZhbHVlIl0KKyAgICAgICAgZWxpZiAiY29sb24iIGluIGdyb3VwZCBhbmQgZ3JvdXBkWyJjb2xvbiJdICE9IE5vbmU6CisgICAgICAgICAgICBlID0gZGF0YS5jcmVhdGVDb3B5KCkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoZSkKKyAgICAgICAgICAgIG9wID0gImltbWVkaWF0ZSIKKyAgICAgICAgICAgIHZhbCA9IGUuZXhwYW5kKGdyb3VwZFsidmFsdWUiXSwga2V5ICsgIls6PV0iKQorICAgICAgICBlbGlmICJhcHBlbmQiIGluIGdyb3VwZCBhbmQgZ3JvdXBkWyJhcHBlbmQiXSAhPSBOb25lOgorICAgICAgICAgICAgb3AgPSAiYXBwZW5kIgorICAgICAgICAgICAgdmFsID0gIiVzICVzIiAlICgoc2VsZi5nZXRGdW5jKGtleSwgZGF0YSkgb3IgIiIpLCBncm91cGRbInZhbHVlIl0pCisgICAgICAgIGVsaWYgInByZXBlbmQiIGluIGdyb3VwZCBhbmQgZ3JvdXBkWyJwcmVwZW5kIl0gIT0gTm9uZToKKyAgICAgICAgICAgIG9wID0gInByZXBlbmQiCisgICAgICAgICAgICB2YWwgPSAiJXMgJXMiICUgKGdyb3VwZFsidmFsdWUiXSwgKHNlbGYuZ2V0RnVuYyhrZXksIGRhdGEpIG9yICIiKSkKKyAgICAgICAgZWxpZiAicG9zdGRvdCIgaW4gZ3JvdXBkIGFuZCBncm91cGRbInBvc3Rkb3QiXSAhPSBOb25lOgorICAgICAgICAgICAgb3AgPSAicG9zdGRvdCIKKyAgICAgICAgICAgIHZhbCA9ICIlcyVzIiAlICgoc2VsZi5nZXRGdW5jKGtleSwgZGF0YSkgb3IgIiIpLCBncm91cGRbInZhbHVlIl0pCisgICAgICAgIGVsaWYgInByZWRvdCIgaW4gZ3JvdXBkIGFuZCBncm91cGRbInByZWRvdCJdICE9IE5vbmU6CisgICAgICAgICAgICBvcCA9ICJwcmVkb3QiCisgICAgICAgICAgICB2YWwgPSAiJXMlcyIgJSAoZ3JvdXBkWyJ2YWx1ZSJdLCAoc2VsZi5nZXRGdW5jKGtleSwgZGF0YSkgb3IgIiIpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmFsID0gZ3JvdXBkWyJ2YWx1ZSJdCisKKyAgICAgICAgZmxhZyA9IE5vbmUKKyAgICAgICAgaWYgJ2ZsYWcnIGluIGdyb3VwZCBhbmQgZ3JvdXBkWydmbGFnJ10gIT0gTm9uZToKKyAgICAgICAgICAgIGZsYWcgPSBncm91cGRbJ2ZsYWcnXQorICAgICAgICBlbGlmIGdyb3VwZFsibGF6eXF1ZXMiXToKKyAgICAgICAgICAgIGZsYWcgPSAiX2RlZmF1bHR2YWwiCisKKyAgICAgICAgbG9naW5mb1snb3AnXSA9IG9wCisgICAgICAgIGxvZ2luZm9bJ2RldGFpbCddID0gZ3JvdXBkWyJ2YWx1ZSJdCisKKyAgICAgICAgaWYgZmxhZzoKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhrZXksIGZsYWcsIHZhbCwgKipsb2dpbmZvKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGF0YS5zZXRWYXIoa2V5LCB2YWwsIHBhcnNpbmc9VHJ1ZSwgKipsb2dpbmZvKQorCitjbGFzcyBNZXRob2ROb2RlKEFzdE5vZGUpOgorICAgIHRyX3RibCA9IHN0cmluZy5tYWtldHJhbnMoJy8uKy1AJSYnLCAnX19fX19fXycpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubywgZnVuY19uYW1lLCBib2R5KToKKyAgICAgICAgQXN0Tm9kZS5fX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vKQorICAgICAgICBzZWxmLmZ1bmNfbmFtZSA9IGZ1bmNfbmFtZQorICAgICAgICBzZWxmLmJvZHkgPSBib2R5CisKKyAgICBkZWYgZXZhbChzZWxmLCBkYXRhKToKKyAgICAgICAgdGV4dCA9ICdcbicuam9pbihzZWxmLmJvZHkpCisgICAgICAgIGlmIHNlbGYuZnVuY19uYW1lID09ICJfX2Fub255bW91cyI6CisgICAgICAgICAgICBmdW5jbmFtZSA9ICgiX19hbm9uXyVzXyVzIiAlIChzZWxmLmxpbmVubywgc2VsZi5maWxlbmFtZS50cmFuc2xhdGUoTWV0aG9kTm9kZS50cl90YmwpKSkKKyAgICAgICAgICAgIHRleHQgPSAiZGVmICVzKGQpOlxuIiAlIChmdW5jbmFtZSkgKyB0ZXh0CisgICAgICAgICAgICBiYi5tZXRob2Rwb29sLmluc2VydF9tZXRob2QoZnVuY25hbWUsIHRleHQsIHNlbGYuZmlsZW5hbWUpCisgICAgICAgICAgICBhbm9uZnVuY3MgPSBkYXRhLmdldFZhcignX19CQkFOT05GVU5DUycsIEZhbHNlKSBvciBbXQorICAgICAgICAgICAgYW5vbmZ1bmNzLmFwcGVuZChmdW5jbmFtZSkKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyKCdfX0JCQU5PTkZVTkNTJywgYW5vbmZ1bmNzKQorICAgICAgICAgICAgZGF0YS5zZXRWYXIoZnVuY25hbWUsIHRleHQsIHBhcnNpbmc9VHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhzZWxmLmZ1bmNfbmFtZSwgImZ1bmMiLCAxKQorICAgICAgICAgICAgZGF0YS5zZXRWYXIoc2VsZi5mdW5jX25hbWUsIHRleHQsIHBhcnNpbmc9VHJ1ZSkKKworY2xhc3MgUHl0aG9uTWV0aG9kTm9kZShBc3ROb2RlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubywgZnVuY3Rpb24sIG1vZHVsZW5hbWUsIGJvZHkpOgorICAgICAgICBBc3ROb2RlLl9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8pCisgICAgICAgIHNlbGYuZnVuY3Rpb24gPSBmdW5jdGlvbgorICAgICAgICBzZWxmLm1vZHVsZW5hbWUgPSBtb2R1bGVuYW1lCisgICAgICAgIHNlbGYuYm9keSA9IGJvZHkKKworICAgIGRlZiBldmFsKHNlbGYsIGRhdGEpOgorICAgICAgICAjIE5vdGUgd2Ugd2lsbCBhZGQgcm9vdCB0byBwYXJzZWRtZXRob2RzIGFmdGVyIGhhdmluZyBwYXJzZQorICAgICAgICAjICd0aGlzJyBmaWxlLiBUaGlzIG1lYW5zIHdlIHdpbGwgbm90IHBhcnNlIG1ldGhvZHMgZnJvbQorICAgICAgICAjIGJiIGNsYXNzZXMgdHdpY2UKKyAgICAgICAgdGV4dCA9ICdcbicuam9pbihzZWxmLmJvZHkpCisgICAgICAgIGJiLm1ldGhvZHBvb2wuaW5zZXJ0X21ldGhvZChzZWxmLm1vZHVsZW5hbWUsIHRleHQsIHNlbGYuZmlsZW5hbWUpCisgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhzZWxmLmZ1bmN0aW9uLCAiZnVuYyIsIDEpCisgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhzZWxmLmZ1bmN0aW9uLCAicHl0aG9uIiwgMSkKKyAgICAgICAgZGF0YS5zZXRWYXIoc2VsZi5mdW5jdGlvbiwgdGV4dCwgcGFyc2luZz1UcnVlKQorCitjbGFzcyBNZXRob2RGbGFnc05vZGUoQXN0Tm9kZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8sIGtleSwgbSk6CisgICAgICAgIEFzdE5vZGUuX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubykKKyAgICAgICAgc2VsZi5rZXkgPSBrZXkKKyAgICAgICAgc2VsZi5tID0gbQorCisgICAgZGVmIGV2YWwoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIGRhdGEuZ2V0VmFyKHNlbGYua2V5LCBGYWxzZSk6CisgICAgICAgICAgICAjIGNsZWFuIHVwIG9sZCB2ZXJzaW9uIG9mIHRoaXMgcGllY2Ugb2YgbWV0YWRhdGEsIGFzIGl0cworICAgICAgICAgICAgIyBmbGFncyBjb3VsZCBjYXVzZSBwcm9ibGVtcworICAgICAgICAgICAgZGF0YS5zZXRWYXJGbGFnKHNlbGYua2V5LCAncHl0aG9uJywgTm9uZSkKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhzZWxmLmtleSwgJ2Zha2Vyb290JywgTm9uZSkKKyAgICAgICAgaWYgc2VsZi5tLmdyb3VwKCJweSIpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZGF0YS5zZXRWYXJGbGFnKHNlbGYua2V5LCAicHl0aG9uIiwgIjEiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGF0YS5kZWxWYXJGbGFnKHNlbGYua2V5LCAicHl0aG9uIikKKyAgICAgICAgaWYgc2VsZi5tLmdyb3VwKCJmciIpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZGF0YS5zZXRWYXJGbGFnKHNlbGYua2V5LCAiZmFrZXJvb3QiLCAiMSIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkYXRhLmRlbFZhckZsYWcoc2VsZi5rZXksICJmYWtlcm9vdCIpCisKK2NsYXNzIEV4cG9ydEZ1bmNzTm9kZShBc3ROb2RlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubywgZm5zLCBjbGFzc25hbWUpOgorICAgICAgICBBc3ROb2RlLl9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8pCisgICAgICAgIHNlbGYubiA9IGZucy5zcGxpdCgpCisgICAgICAgIHNlbGYuY2xhc3NuYW1lID0gY2xhc3NuYW1lCisKKyAgICBkZWYgZXZhbChzZWxmLCBkYXRhKToKKworICAgICAgICBmb3IgZnVuYyBpbiBzZWxmLm46CisgICAgICAgICAgICBjYWxsZWRmdW5jID0gc2VsZi5jbGFzc25hbWUgKyAiXyIgKyBmdW5jCisKKyAgICAgICAgICAgIGlmIGRhdGEuZ2V0VmFyKGZ1bmMsIEZhbHNlKSBhbmQgbm90IGRhdGEuZ2V0VmFyRmxhZyhmdW5jLCAnZXhwb3J0X2Z1bmMnKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBkYXRhLmdldFZhcihmdW5jLCBGYWxzZSk6CisgICAgICAgICAgICAgICAgZGF0YS5zZXRWYXJGbGFnKGZ1bmMsICdweXRob24nLCBOb25lKQorICAgICAgICAgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhmdW5jLCAnZnVuYycsIE5vbmUpCisKKyAgICAgICAgICAgIGZvciBmbGFnIGluIFsgImZ1bmMiLCAicHl0aG9uIiBdOgorICAgICAgICAgICAgICAgIGlmIGRhdGEuZ2V0VmFyRmxhZyhjYWxsZWRmdW5jLCBmbGFnKToKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5zZXRWYXJGbGFnKGZ1bmMsIGZsYWcsIGRhdGEuZ2V0VmFyRmxhZyhjYWxsZWRmdW5jLCBmbGFnKSkKKyAgICAgICAgICAgIGZvciBmbGFnIGluIFsgImRpcnMiIF06CisgICAgICAgICAgICAgICAgaWYgZGF0YS5nZXRWYXJGbGFnKGZ1bmMsIGZsYWcpOgorICAgICAgICAgICAgICAgICAgICBkYXRhLnNldFZhckZsYWcoY2FsbGVkZnVuYywgZmxhZywgZGF0YS5nZXRWYXJGbGFnKGZ1bmMsIGZsYWcpKQorCisgICAgICAgICAgICBpZiBkYXRhLmdldFZhckZsYWcoY2FsbGVkZnVuYywgInB5dGhvbiIpOgorICAgICAgICAgICAgICAgIGRhdGEuc2V0VmFyKGZ1bmMsICIgICAgYmIuYnVpbGQuZXhlY19mdW5jKCciICsgY2FsbGVkZnVuYyArICInLCBkKVxuIiwgcGFyc2luZz1UcnVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiAiLSIgaW4gc2VsZi5jbGFzc25hbWU6CisgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoIlRoZSBjbGFzc25hbWUgJXMgY29udGFpbnMgYSBkYXNoIGNoYXJhY3RlciBhbmQgaXMgY2FsbGluZyBhbiBzaCBmdW5jdGlvbiAlcyB1c2luZyBFWFBPUlRfRlVOQ1RJT05TLiBTaW5jZSBhIGRhc2ggaXMgaWxsZWdhbCBpbiBzaCBmdW5jdGlvbiBuYW1lcywgdGhpcyBjYW5ub3Qgd29yaywgcGxlYXNlIHJlbmFtZSB0aGUgY2xhc3Mgb3IgZG9uJ3QgdXNlIEVYUE9SVF9GVU5DVElPTlMuIiAlIChzZWxmLmNsYXNzbmFtZSwgY2FsbGVkZnVuYykpCisgICAgICAgICAgICAgICAgZGF0YS5zZXRWYXIoZnVuYywgIiAgICAiICsgY2FsbGVkZnVuYyArICJcbiIsIHBhcnNpbmc9VHJ1ZSkKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhmdW5jLCAnZXhwb3J0X2Z1bmMnLCAnMScpCisKK2NsYXNzIEFkZFRhc2tOb2RlKEFzdE5vZGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vLCBmdW5jLCBiZWZvcmUsIGFmdGVyKToKKyAgICAgICAgQXN0Tm9kZS5fX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vKQorICAgICAgICBzZWxmLmZ1bmMgPSBmdW5jCisgICAgICAgIHNlbGYuYmVmb3JlID0gYmVmb3JlCisgICAgICAgIHNlbGYuYWZ0ZXIgPSBhZnRlcgorCisgICAgZGVmIGV2YWwoc2VsZiwgZGF0YSk6CisgICAgICAgIGJiLmJ1aWxkLmFkZHRhc2soc2VsZi5mdW5jLCBzZWxmLmJlZm9yZSwgc2VsZi5hZnRlciwgZGF0YSkKKworY2xhc3MgRGVsVGFza05vZGUoQXN0Tm9kZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8sIGZ1bmMpOgorICAgICAgICBBc3ROb2RlLl9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8pCisgICAgICAgIHNlbGYuZnVuYyA9IGZ1bmMKKworICAgIGRlZiBldmFsKHNlbGYsIGRhdGEpOgorICAgICAgICBiYi5idWlsZC5kZWx0YXNrKHNlbGYuZnVuYywgZGF0YSkKKworY2xhc3MgQkJIYW5kbGVyTm9kZShBc3ROb2RlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubywgZm5zKToKKyAgICAgICAgQXN0Tm9kZS5fX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vKQorICAgICAgICBzZWxmLmhzID0gZm5zLnNwbGl0KCkKKworICAgIGRlZiBldmFsKHNlbGYsIGRhdGEpOgorICAgICAgICBiYmhhbmRzID0gZGF0YS5nZXRWYXIoJ19fQkJIQU5ETEVSUycsIEZhbHNlKSBvciBbXQorICAgICAgICBmb3IgaCBpbiBzZWxmLmhzOgorICAgICAgICAgICAgYmJoYW5kcy5hcHBlbmQoaCkKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhoLCAiaGFuZGxlciIsIDEpCisgICAgICAgIGRhdGEuc2V0VmFyKCdfX0JCSEFORExFUlMnLCBiYmhhbmRzKQorCitjbGFzcyBJbmhlcml0Tm9kZShBc3ROb2RlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubywgY2xhc3Nlcyk6CisgICAgICAgIEFzdE5vZGUuX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubykKKyAgICAgICAgc2VsZi5jbGFzc2VzID0gY2xhc3NlcworCisgICAgZGVmIGV2YWwoc2VsZiwgZGF0YSk6CisgICAgICAgIGJiLnBhcnNlLkJCSGFuZGxlci5pbmhlcml0KHNlbGYuY2xhc3Nlcywgc2VsZi5maWxlbmFtZSwgc2VsZi5saW5lbm8sIGRhdGEpCisKK2RlZiBoYW5kbGVJbmNsdWRlKHN0YXRlbWVudHMsIGZpbGVuYW1lLCBsaW5lbm8sIG0sIGZvcmNlKToKKyAgICBzdGF0ZW1lbnRzLmFwcGVuZChJbmNsdWRlTm9kZShmaWxlbmFtZSwgbGluZW5vLCBtLmdyb3VwKDEpLCBmb3JjZSkpCisKK2RlZiBoYW5kbGVFeHBvcnQoc3RhdGVtZW50cywgZmlsZW5hbWUsIGxpbmVubywgbSk6CisgICAgc3RhdGVtZW50cy5hcHBlbmQoRXhwb3J0Tm9kZShmaWxlbmFtZSwgbGluZW5vLCBtLmdyb3VwKDEpKSkKKworZGVmIGhhbmRsZURhdGEoc3RhdGVtZW50cywgZmlsZW5hbWUsIGxpbmVubywgZ3JvdXBkKToKKyAgICBzdGF0ZW1lbnRzLmFwcGVuZChEYXRhTm9kZShmaWxlbmFtZSwgbGluZW5vLCBncm91cGQpKQorCitkZWYgaGFuZGxlTWV0aG9kKHN0YXRlbWVudHMsIGZpbGVuYW1lLCBsaW5lbm8sIGZ1bmNfbmFtZSwgYm9keSk6CisgICAgc3RhdGVtZW50cy5hcHBlbmQoTWV0aG9kTm9kZShmaWxlbmFtZSwgbGluZW5vLCBmdW5jX25hbWUsIGJvZHkpKQorCitkZWYgaGFuZGxlUHl0aG9uTWV0aG9kKHN0YXRlbWVudHMsIGZpbGVuYW1lLCBsaW5lbm8sIGZ1bmNuYW1lLCBtb2R1bGVuYW1lLCBib2R5KToKKyAgICBzdGF0ZW1lbnRzLmFwcGVuZChQeXRob25NZXRob2ROb2RlKGZpbGVuYW1lLCBsaW5lbm8sIGZ1bmNuYW1lLCBtb2R1bGVuYW1lLCBib2R5KSkKKworZGVmIGhhbmRsZU1ldGhvZEZsYWdzKHN0YXRlbWVudHMsIGZpbGVuYW1lLCBsaW5lbm8sIGtleSwgbSk6CisgICAgc3RhdGVtZW50cy5hcHBlbmQoTWV0aG9kRmxhZ3NOb2RlKGZpbGVuYW1lLCBsaW5lbm8sIGtleSwgbSkpCisKK2RlZiBoYW5kbGVFeHBvcnRGdW5jcyhzdGF0ZW1lbnRzLCBmaWxlbmFtZSwgbGluZW5vLCBtLCBjbGFzc25hbWUpOgorICAgIHN0YXRlbWVudHMuYXBwZW5kKEV4cG9ydEZ1bmNzTm9kZShmaWxlbmFtZSwgbGluZW5vLCBtLmdyb3VwKDEpLCBjbGFzc25hbWUpKQorCitkZWYgaGFuZGxlQWRkVGFzayhzdGF0ZW1lbnRzLCBmaWxlbmFtZSwgbGluZW5vLCBtKToKKyAgICBmdW5jID0gbS5ncm91cCgiZnVuYyIpCisgICAgYmVmb3JlID0gbS5ncm91cCgiYmVmb3JlIikKKyAgICBhZnRlciA9IG0uZ3JvdXAoImFmdGVyIikKKyAgICBpZiBmdW5jIGlzIE5vbmU6CisgICAgICAgIHJldHVybgorCisgICAgc3RhdGVtZW50cy5hcHBlbmQoQWRkVGFza05vZGUoZmlsZW5hbWUsIGxpbmVubywgZnVuYywgYmVmb3JlLCBhZnRlcikpCisKK2RlZiBoYW5kbGVEZWxUYXNrKHN0YXRlbWVudHMsIGZpbGVuYW1lLCBsaW5lbm8sIG0pOgorICAgIGZ1bmMgPSBtLmdyb3VwKCJmdW5jIikKKyAgICBpZiBmdW5jIGlzIE5vbmU6CisgICAgICAgIHJldHVybgorCisgICAgc3RhdGVtZW50cy5hcHBlbmQoRGVsVGFza05vZGUoZmlsZW5hbWUsIGxpbmVubywgZnVuYykpCisKK2RlZiBoYW5kbGVCQkhhbmRsZXJzKHN0YXRlbWVudHMsIGZpbGVuYW1lLCBsaW5lbm8sIG0pOgorICAgIHN0YXRlbWVudHMuYXBwZW5kKEJCSGFuZGxlck5vZGUoZmlsZW5hbWUsIGxpbmVubywgbS5ncm91cCgxKSkpCisKK2RlZiBoYW5kbGVJbmhlcml0KHN0YXRlbWVudHMsIGZpbGVuYW1lLCBsaW5lbm8sIG0pOgorICAgIGNsYXNzZXMgPSBtLmdyb3VwKDEpCisgICAgc3RhdGVtZW50cy5hcHBlbmQoSW5oZXJpdE5vZGUoZmlsZW5hbWUsIGxpbmVubywgY2xhc3NlcykpCisKK2RlZiBmaW5hbGl6ZShmbiwgZCwgdmFyaWFudCA9IE5vbmUpOgorICAgIGFsbF9oYW5kbGVycyA9IHt9CisgICAgZm9yIHZhciBpbiBkLmdldFZhcignX19CQkhBTkRMRVJTJywgRmFsc2UpIG9yIFtdOgorICAgICAgICAjIHRyeSB0byBhZGQgdGhlIGhhbmRsZXIKKyAgICAgICAgYmIuZXZlbnQucmVnaXN0ZXIodmFyLCBkLmdldFZhcih2YXIsIEZhbHNlKSwgKGQuZ2V0VmFyRmxhZyh2YXIsICJldmVudG1hc2siLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKworICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuUmVjaXBlUHJlRmluYWxpc2UoZm4pLCBkKQorCisgICAgYmIuZGF0YS5leHBhbmRLZXlzKGQpCisgICAgYmIuZGF0YS51cGRhdGVfZGF0YShkKQorICAgIGNvZGUgPSBbXQorICAgIGZvciBmdW5jbmFtZSBpbiBkLmdldFZhcigiX19CQkFOT05GVU5DUyIsIEZhbHNlKSBvciBbXToKKyAgICAgICAgY29kZS5hcHBlbmQoIiVzKGQpIiAlIGZ1bmNuYW1lKQorICAgIGJiLnV0aWxzLmJldHRlcl9leGVjKCJcbiIuam9pbihjb2RlKSwgeyJkIjogZH0pCisgICAgYmIuZGF0YS51cGRhdGVfZGF0YShkKQorCisgICAgdGFza2xpc3QgPSBkLmdldFZhcignX19CQlRBU0tTJywgRmFsc2UpIG9yIFtdCisgICAgYmIuYnVpbGQuYWRkX3Rhc2tzKHRhc2tsaXN0LCBkKQorCisgICAgYmIucGFyc2Uuc2lnZ2VuLmZpbmFsaXNlKGZuLCBkLCB2YXJpYW50KQorCisgICAgZC5zZXRWYXIoJ0JCSU5DTFVERUQnLCBiYi5wYXJzZS5nZXRfZmlsZV9kZXBlbmRzKGQpKQorCisgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5SZWNpcGVQYXJzZWQoZm4pLCBkKQorCitkZWYgX2NyZWF0ZV92YXJpYW50cyhkYXRhc3RvcmVzLCBuYW1lcywgZnVuY3Rpb24sIG9ubHlmaW5hbGlzZSk6CisgICAgZGVmIGNyZWF0ZV92YXJpYW50KG5hbWUsIG9yaWdfZCwgYXJnID0gTm9uZSk6CisgICAgICAgIGlmIG9ubHlmaW5hbGlzZSBhbmQgbmFtZSBub3QgaW4gb25seWZpbmFsaXNlOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIG5ld19kID0gYmIuZGF0YS5jcmVhdGVDb3B5KG9yaWdfZCkKKyAgICAgICAgZnVuY3Rpb24oYXJnIG9yIG5hbWUsIG5ld19kKQorICAgICAgICBkYXRhc3RvcmVzW25hbWVdID0gbmV3X2QKKworICAgIGZvciB2YXJpYW50LCB2YXJpYW50X2QgaW4gZGF0YXN0b3Jlcy5pdGVtcygpOgorICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgIGlmIG5vdCB2YXJpYW50OgorICAgICAgICAgICAgICAgICMgQmFzZWQgb24gbWFpbiByZWNpcGUKKyAgICAgICAgICAgICAgICBjcmVhdGVfdmFyaWFudChuYW1lLCB2YXJpYW50X2QpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNyZWF0ZV92YXJpYW50KCIlcy0lcyIgJSAodmFyaWFudCwgbmFtZSksIHZhcmlhbnRfZCwgbmFtZSkKKworZGVmIF9leHBhbmRfdmVyc2lvbnModmVyc2lvbnMpOgorICAgIGRlZiBleHBhbmRfb25lKHZlcnNpb24sIHN0YXJ0LCBlbmQpOgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc3RhcnQsIGVuZCArIDEpOgorICAgICAgICAgICAgdmVyID0gX2JidmVyc2lvbnNfcmUuc3ViKHN0cihpKSwgdmVyc2lvbiwgMSkKKyAgICAgICAgICAgIHlpZWxkIHZlcgorCisgICAgdmVyc2lvbnMgPSBpdGVyKHZlcnNpb25zKQorICAgIHdoaWxlIFRydWU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZlcnNpb24gPSBuZXh0KHZlcnNpb25zKQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgcmFuZ2VfdmVyID0gX2JidmVyc2lvbnNfcmUuc2VhcmNoKHZlcnNpb24pCisgICAgICAgIGlmIG5vdCByYW5nZV92ZXI6CisgICAgICAgICAgICB5aWVsZCB2ZXJzaW9uCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuZXd2ZXJzaW9ucyA9IGV4cGFuZF9vbmUodmVyc2lvbiwgaW50KHJhbmdlX3Zlci5ncm91cCgiZnJvbSIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQocmFuZ2VfdmVyLmdyb3VwKCJ0byIpKSkKKyAgICAgICAgICAgIHZlcnNpb25zID0gaXRlcnRvb2xzLmNoYWluKG5ld3ZlcnNpb25zLCB2ZXJzaW9ucykKKworZGVmIG11bHRpX2ZpbmFsaXplKGZuLCBkKToKKyAgICBhcHBlbmRzID0gKGQuZ2V0VmFyKCJfX0JCQVBQRU5EIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBmb3IgYXBwZW5kIGluIGFwcGVuZHM6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiQXBwZW5kaW5nIC5iYmFwcGVuZCBmaWxlICVzIHRvICVzIiwgYXBwZW5kLCBmbikKKyAgICAgICAgYmIucGFyc2UuQkJIYW5kbGVyLmhhbmRsZShhcHBlbmQsIGQsIFRydWUpCisKKyAgICBvbmx5ZmluYWxpc2UgPSBkLmdldFZhcigiX19PTkxZRklOQUxJU0UiLCBGYWxzZSkKKworICAgIHNhZmVfZCA9IGQKKyAgICBkID0gYmIuZGF0YS5jcmVhdGVDb3B5KHNhZmVfZCkKKyAgICB0cnk6CisgICAgICAgIGZpbmFsaXplKGZuLCBkKQorICAgIGV4Y2VwdCBiYi5wYXJzZS5Ta2lwUmVjaXBlIGFzIGU6CisgICAgICAgIGQuc2V0VmFyKCJfX1NLSVBQRUQiLCBlLmFyZ3NbMF0pCisgICAgZGF0YXN0b3JlcyA9IHsiIjogc2FmZV9kfQorCisgICAgdmVyc2lvbnMgPSAoZC5nZXRWYXIoIkJCVkVSU0lPTlMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGlmIHZlcnNpb25zOgorICAgICAgICBwdiA9IG9yaWdfcHYgPSBkLmdldFZhcigiUFYiLCBUcnVlKQorICAgICAgICBiYXNldmVyc2lvbnMgPSB7fQorCisgICAgICAgIGRlZiB2ZXJmdW5jKHZlciwgZCwgcHZfZCA9IE5vbmUpOgorICAgICAgICAgICAgaWYgcHZfZCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHB2X2QgPSBkCisKKyAgICAgICAgICAgIG92ZXJyaWRlcyA9IGQuZ2V0VmFyKCJPVkVSUklERVMiLCBUcnVlKS5zcGxpdCgiOiIpCisgICAgICAgICAgICBwdl9kLnNldFZhcigiUFYiLCB2ZXIpCisgICAgICAgICAgICBvdmVycmlkZXMuYXBwZW5kKHZlcikKKyAgICAgICAgICAgIGJwdiA9IGJhc2V2ZXJzaW9ucy5nZXQodmVyKSBvciBvcmlnX3B2CisgICAgICAgICAgICBwdl9kLnNldFZhcigiQlBWIiwgYnB2KQorICAgICAgICAgICAgb3ZlcnJpZGVzLmFwcGVuZChicHYpCisgICAgICAgICAgICBkLnNldFZhcigiT1ZFUlJJREVTIiwgIjoiLmpvaW4ob3ZlcnJpZGVzKSkKKworICAgICAgICB2ZXJzaW9ucyA9IGxpc3QoX2V4cGFuZF92ZXJzaW9ucyh2ZXJzaW9ucykpCisgICAgICAgIGZvciBwb3MsIHZlcnNpb24gaW4gZW51bWVyYXRlKGxpc3QodmVyc2lvbnMpKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwdiwgYnB2ID0gdmVyc2lvbi5zcGxpdCgiOiIsIDIpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZlcnNpb25zW3Bvc10gPSBwdgorICAgICAgICAgICAgICAgIGJhc2V2ZXJzaW9uc1twdl0gPSBicHYKKworICAgICAgICBpZiBwdiBpbiB2ZXJzaW9ucyBhbmQgbm90IGJhc2V2ZXJzaW9ucy5nZXQocHYpOgorICAgICAgICAgICAgdmVyc2lvbnMucmVtb3ZlKHB2KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHYgPSB2ZXJzaW9ucy5wb3AoKQorCisgICAgICAgICAgICAjIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugb3VyIGV4aXN0aW5nIG1haW4gZGF0YXN0b3JlCisgICAgICAgICAgICAjIGhhcyBhbHJlYWR5IGJlZW4gZmluYWxpemVkIHdpdGggdGhlIG9sZCBQViwgd2UgbmVlZCBvbmUKKyAgICAgICAgICAgICMgdGhhdCdzIGJlZW4gZmluYWxpemVkIHdpdGggdGhlIG5ldyBQVi4KKyAgICAgICAgICAgIGQgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoc2FmZV9kKQorICAgICAgICAgICAgdmVyZnVuYyhwdiwgZCwgc2FmZV9kKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZpbmFsaXplKGZuLCBkKQorICAgICAgICAgICAgZXhjZXB0IGJiLnBhcnNlLlNraXBSZWNpcGUgYXMgZToKKyAgICAgICAgICAgICAgICBkLnNldFZhcigiX19TS0lQUEVEIiwgZS5hcmdzWzBdKQorCisgICAgICAgIF9jcmVhdGVfdmFyaWFudHMoZGF0YXN0b3JlcywgdmVyc2lvbnMsIHZlcmZ1bmMsIG9ubHlmaW5hbGlzZSkKKworICAgIGV4dGVuZGVkID0gZC5nZXRWYXIoIkJCQ0xBU1NFWFRFTkQiLCBUcnVlKSBvciAiIgorICAgIGlmIGV4dGVuZGVkOgorICAgICAgICAjIHRoZSBmb2xsb3dpbmcgaXMgdG8gc3VwcG9ydCBiYmV4dGVuZHMgd2l0aCBhcmd1bWVudHMsIGZvciBlLmcuIG11bHRpbGliCisgICAgICAgICMgYW4gZXhhbXBsZSBpcyBhcyBmb2xsb3dzOgorICAgICAgICAjICAgQkJDTEFTU0VYVEVORCA9ICJtdWx0aWxpYjpsaWIzMiIKKyAgICAgICAgIyBpdCB3aWxsIGNyZWF0ZSBmb28tbGliMzIsIGluaGVyaXRpbmcgbXVsdGlsaWIuYmJjbGFzcyBhbmQgc2V0CisgICAgICAgICMgQkJFWFRFTkRDVVJSIHRvICJtdWx0aWxpYiIgYW5kIEJCRVhURU5EVkFSSUFOVCB0byAibGliMzIiCisgICAgICAgIGV4dGVuZGVkbWFwID0ge30KKyAgICAgICAgdmFyaWFudG1hcCA9IHt9CisKKyAgICAgICAgZm9yIGV4dCBpbiBleHRlbmRlZC5zcGxpdCgpOgorICAgICAgICAgICAgZWV4dCA9IGV4dC5zcGxpdCgnOicsIDIpCisgICAgICAgICAgICBpZiBsZW4oZWV4dCkgPiAxOgorICAgICAgICAgICAgICAgIGV4dGVuZGVkbWFwW2V4dF0gPSBlZXh0WzBdCisgICAgICAgICAgICAgICAgdmFyaWFudG1hcFtleHRdID0gZWV4dFsxXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBleHRlbmRlZG1hcFtleHRdID0gZXh0CisKKyAgICAgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgICAgICBkZWYgZXh0ZW5kZnVuYyhuYW1lLCBkKToKKyAgICAgICAgICAgIGlmIG5hbWUgIT0gZXh0ZW5kZWRtYXBbbmFtZV06CisgICAgICAgICAgICAgICAgZC5zZXRWYXIoIkJCRVhURU5EQ1VSUiIsIGV4dGVuZGVkbWFwW25hbWVdKQorICAgICAgICAgICAgICAgIGQuc2V0VmFyKCJCQkVYVEVORFZBUklBTlQiLCB2YXJpYW50bWFwW25hbWVdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkLnNldFZhcigiUE4iLCAiJXMtJXMiICUgKHBuLCBuYW1lKSkKKyAgICAgICAgICAgIGJiLnBhcnNlLkJCSGFuZGxlci5pbmhlcml0KGV4dGVuZGVkbWFwW25hbWVdLCBmbiwgMCwgZCkKKworICAgICAgICBzYWZlX2Quc2V0VmFyKCJCQkNMQVNTRVhURU5EIiwgZXh0ZW5kZWQpCisgICAgICAgIF9jcmVhdGVfdmFyaWFudHMoZGF0YXN0b3JlcywgZXh0ZW5kZWRtYXAua2V5cygpLCBleHRlbmRmdW5jLCBvbmx5ZmluYWxpc2UpCisKKyAgICBmb3IgdmFyaWFudCwgdmFyaWFudF9kIGluIGRhdGFzdG9yZXMuaXRlcml0ZW1zKCk6CisgICAgICAgIGlmIHZhcmlhbnQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgbm90IG9ubHlmaW5hbGlzZSBvciB2YXJpYW50IGluIG9ubHlmaW5hbGlzZToKKyAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoZm4sIHZhcmlhbnRfZCwgdmFyaWFudCkKKyAgICAgICAgICAgIGV4Y2VwdCBiYi5wYXJzZS5Ta2lwUmVjaXBlIGFzIGU6CisgICAgICAgICAgICAgICAgdmFyaWFudF9kLnNldFZhcigiX19TS0lQUEVEIiwgZS5hcmdzWzBdKQorCisgICAgaWYgbGVuKGRhdGFzdG9yZXMpID4gMToKKyAgICAgICAgdmFyaWFudHMgPSBmaWx0ZXIoTm9uZSwgZGF0YXN0b3Jlcy5pdGVya2V5cygpKQorICAgICAgICBzYWZlX2Quc2V0VmFyKCJfX1ZBUklBTlRTIiwgIiAiLmpvaW4odmFyaWFudHMpKQorCisgICAgZGF0YXN0b3Jlc1siIl0gPSBkCisgICAgcmV0dXJuIGRhdGFzdG9yZXMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvcGFyc2VfcHkvQkJIYW5kbGVyLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9CQkhhbmRsZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMwOTdiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvcGFyc2VfcHkvQkJIYW5kbGVyLnB5CkBAIC0wLDAgKzEsMjY1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKKyAgIGNsYXNzIGZvciBoYW5kbGluZyAuYmIgZmlsZXMKKworICAgUmVhZHMgYSAuYmIgZmlsZSBhbmQgb2J0YWlucyBpdHMgbWV0YWRhdGEKKworIiIiCisKKworIyAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgUGhpbCBCbHVuZGVsbAorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKK2ltcG9ydCByZSwgYmIsIG9zCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGJiLmJ1aWxkLCBiYi51dGlscworZnJvbSBiYiBpbXBvcnQgZGF0YQorCitmcm9tIC4gaW1wb3J0IENvbmZIYW5kbGVyCitmcm9tIC4uIGltcG9ydCByZXNvbHZlX2ZpbGUsIGFzdCwgbG9nZ2VyLCBQYXJzZUVycm9yCitmcm9tIC5Db25mSGFuZGxlciBpbXBvcnQgaW5jbHVkZSwgaW5pdAorCisjIEZvciBjb21wYXRpYmlsaXR5CitiYi5kZXByZWNhdGVfaW1wb3J0KF9fbmFtZV9fLCAiYmIucGFyc2UiLCBbInZhcnNfZnJvbV9maWxlIl0pCisKK19fZnVuY19zdGFydF9yZWdleHBfXyAgICA9IHJlLmNvbXBpbGUoIHIiKCgoP1A8cHk+cHl0aG9uKXwoP1A8ZnI+ZmFrZXJvb3QpKVxzKikqKD9QPGZ1bmM+W1x3XC5cLVwrXHtcfVwkXSspP1xzKlwoXHMqXClccyp7JCIgKQorX19pbmhlcml0X3JlZ2V4cF9fICAgICAgID0gcmUuY29tcGlsZSggciJpbmhlcml0XHMrKC4rKSIgKQorX19leHBvcnRfZnVuY19yZWdleHBfXyAgID0gcmUuY29tcGlsZSggciJFWFBPUlRfRlVOQ1RJT05TXHMrKC4rKSIgKQorX19hZGR0YXNrX3JlZ2V4cF9fICAgICAgID0gcmUuY29tcGlsZSgiYWRkdGFza1xzKyg/UDxmdW5jPlx3KylccyooKGJlZm9yZVxzKig/UDxiZWZvcmU+KCguKig/PWFmdGVyKSl8KC4qKSkpKXwoYWZ0ZXJccyooP1A8YWZ0ZXI+KCguKig/PWJlZm9yZSkpfCguKikpKSkpKiIpCitfX2RlbHRhc2tfcmVnZXhwX18gICAgICAgPSByZS5jb21waWxlKCJkZWx0YXNrXHMrKD9QPGZ1bmM+XHcrKSIpCitfX2FkZGhhbmRsZXJfcmVnZXhwX18gICAgPSByZS5jb21waWxlKCByImFkZGhhbmRsZXJccysoLispIiApCitfX2RlZl9yZWdleHBfXyAgICAgICAgICAgPSByZS5jb21waWxlKCByImRlZlxzKyhcdyspLio6IiApCitfX3B5dGhvbl9mdW5jX3JlZ2V4cF9fICAgPSByZS5jb21waWxlKCByIihccysuKil8KF4kKSIgKQorCisKK19faW5mdW5jX18gPSBbXQorX19pbnB5dGhvbl9fID0gRmFsc2UKK19fYm9keV9fICAgPSBbXQorX19jbGFzc25hbWVfXyA9ICIiCisKK2NhY2hlZF9zdGF0ZW1lbnRzID0ge30KKworIyBXZSBuZWVkIHRvIGluZGljYXRlIEVPRiB0byB0aGUgZmVlZGVyLiBUaGlzIGNvZGUgaXMgc28gbWVzc3kgdGhhdAorIyBmYWN0b3JpbmcgaXQgb3V0IHRvIGEgY2xvc2VfcGFyc2VfZmlsZSBtZXRob2QgaXMgb3V0IG9mIHF1ZXN0aW9uLgorIyBXZSB3aWxsIHVzZSB0aGUgSU5fUFlUSE9OX0VPRiBhcyBhbiBpbmRpY2F0b3IgdG8ganVzdCBjbG9zZSB0aGUgbWV0aG9kCisjCisjIFRoZSB0d28gcGFydHMgdXNpbmcgaXQgYXJlIHRpZ2h0bHkgaW50ZWdyYXRlZCBhbnl3YXkKK0lOX1BZVEhPTl9FT0YgPSAtOTk5OTk5OTk5OTk5OQorCisKKworZGVmIHN1cHBvcnRzKGZuLCBkKToKKyAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBmbiBoYXMgYSBzdXBwb3J0ZWQgZXh0ZW5zaW9uIiIiCisgICAgcmV0dXJuIG9zLnBhdGguc3BsaXRleHQoZm4pWy0xXSBpbiBbIi5iYiIsICIuYmJjbGFzcyIsICIuaW5jIl0KKworZGVmIGluaGVyaXQoZmlsZXMsIGZuLCBsaW5lbm8sIGQpOgorICAgIF9faW5oZXJpdF9jYWNoZSA9IGQuZ2V0VmFyKCdfX2luaGVyaXRfY2FjaGUnLCBGYWxzZSkgb3IgW10KKyAgICBmaWxlcyA9IGQuZXhwYW5kKGZpbGVzKS5zcGxpdCgpCisgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGZpbGUpIGFuZCBub3QgZmlsZS5lbmRzd2l0aCgiLmJiY2xhc3MiKToKKyAgICAgICAgICAgIGZpbGUgPSBvcy5wYXRoLmpvaW4oJ2NsYXNzZXMnLCAnJXMuYmJjbGFzcycgJSBmaWxlKQorCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGZpbGUpOgorICAgICAgICAgICAgYmJwYXRoID0gZC5nZXRWYXIoIkJCUEFUSCIsIFRydWUpCisgICAgICAgICAgICBhYnNfZm4sIGF0dGVtcHRzID0gYmIudXRpbHMud2hpY2goYmJwYXRoLCBmaWxlLCBoaXN0b3J5PVRydWUpCisgICAgICAgICAgICBmb3IgYWYgaW4gYXR0ZW1wdHM6CisgICAgICAgICAgICAgICAgaWYgYWYgIT0gYWJzX2ZuOgorICAgICAgICAgICAgICAgICAgICBiYi5wYXJzZS5tYXJrX2RlcGVuZGVuY3koZCwgYWYpCisgICAgICAgICAgICBpZiBhYnNfZm46CisgICAgICAgICAgICAgICAgZmlsZSA9IGFic19mbgorCisgICAgICAgIGlmIG5vdCBmaWxlIGluIF9faW5oZXJpdF9jYWNoZToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiSW5oZXJpdGluZyAlcyAoZnJvbSAlczolZCkiICUgKGZpbGUsIGZuLCBsaW5lbm8pKQorICAgICAgICAgICAgX19pbmhlcml0X2NhY2hlLmFwcGVuZCggZmlsZSApCisgICAgICAgICAgICBkLnNldFZhcignX19pbmhlcml0X2NhY2hlJywgX19pbmhlcml0X2NhY2hlKQorICAgICAgICAgICAgaW5jbHVkZShmbiwgZmlsZSwgbGluZW5vLCBkLCAiaW5oZXJpdCIpCisgICAgICAgICAgICBfX2luaGVyaXRfY2FjaGUgPSBkLmdldFZhcignX19pbmhlcml0X2NhY2hlJywgRmFsc2UpIG9yIFtdCisKK2RlZiBnZXRfc3RhdGVtZW50cyhmaWxlbmFtZSwgYWJzb2x1dGVfZmlsZW5hbWUsIGJhc2VfbmFtZSk6CisgICAgZ2xvYmFsIGNhY2hlZF9zdGF0ZW1lbnRzCisKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBjYWNoZWRfc3RhdGVtZW50c1thYnNvbHV0ZV9maWxlbmFtZV0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIGZpbGUgPSBvcGVuKGFic29sdXRlX2ZpbGVuYW1lLCAncicpCisgICAgICAgIHN0YXRlbWVudHMgPSBhc3QuU3RhdGVtZW50R3JvdXAoKQorCisgICAgICAgIGxpbmVubyA9IDAKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGxpbmVubyA9IGxpbmVubyArIDEKKyAgICAgICAgICAgIHMgPSBmaWxlLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGlmIG5vdCBzOiBicmVhaworICAgICAgICAgICAgcyA9IHMucnN0cmlwKCkKKyAgICAgICAgICAgIGZlZWRlcihsaW5lbm8sIHMsIGZpbGVuYW1lLCBiYXNlX25hbWUsIHN0YXRlbWVudHMpCisgICAgICAgIGZpbGUuY2xvc2UoKQorICAgICAgICBpZiBfX2lucHl0aG9uX186CisgICAgICAgICAgICAjIGFkZCBhIGJsYW5rIGxpbmUgdG8gY2xvc2Ugb3V0IGFueSBweXRob24gZGVmaW5pdGlvbgorICAgICAgICAgICAgZmVlZGVyKElOX1BZVEhPTl9FT0YsICIiLCBmaWxlbmFtZSwgYmFzZV9uYW1lLCBzdGF0ZW1lbnRzKQorCisgICAgICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCIuYmJjbGFzcyIpIG9yIGZpbGVuYW1lLmVuZHN3aXRoKCIuaW5jIik6CisgICAgICAgICAgICBjYWNoZWRfc3RhdGVtZW50c1thYnNvbHV0ZV9maWxlbmFtZV0gPSBzdGF0ZW1lbnRzCisgICAgICAgIHJldHVybiBzdGF0ZW1lbnRzCisKK2RlZiBoYW5kbGUoZm4sIGQsIGluY2x1ZGUpOgorICAgIGdsb2JhbCBfX2Z1bmNfc3RhcnRfcmVnZXhwX18sIF9faW5oZXJpdF9yZWdleHBfXywgX19leHBvcnRfZnVuY19yZWdleHBfXywgX19hZGR0YXNrX3JlZ2V4cF9fLCBfX2FkZGhhbmRsZXJfcmVnZXhwX18sIF9faW5mdW5jX18sIF9fYm9keV9fLCBfX3Jlc2lkdWVfXywgX19jbGFzc25hbWVfXworICAgIF9fYm9keV9fID0gW10KKyAgICBfX2luZnVuY19fID0gW10KKyAgICBfX2NsYXNzbmFtZV9fID0gIiIKKyAgICBfX3Jlc2lkdWVfXyA9IFtdCisKKyAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGZuKQorICAgIChyb290LCBleHQpID0gb3MucGF0aC5zcGxpdGV4dChiYXNlX25hbWUpCisgICAgaW5pdChkKQorCisgICAgaWYgZXh0ID09ICIuYmJjbGFzcyI6CisgICAgICAgIF9fY2xhc3NuYW1lX18gPSByb290CisgICAgICAgIF9faW5oZXJpdF9jYWNoZSA9IGQuZ2V0VmFyKCdfX2luaGVyaXRfY2FjaGUnLCBGYWxzZSkgb3IgW10KKyAgICAgICAgaWYgbm90IGZuIGluIF9faW5oZXJpdF9jYWNoZToKKyAgICAgICAgICAgIF9faW5oZXJpdF9jYWNoZS5hcHBlbmQoZm4pCisgICAgICAgICAgICBkLnNldFZhcignX19pbmhlcml0X2NhY2hlJywgX19pbmhlcml0X2NhY2hlKQorCisgICAgaWYgaW5jbHVkZSAhPSAwOgorICAgICAgICBvbGRmaWxlID0gZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSkKKyAgICBlbHNlOgorICAgICAgICBvbGRmaWxlID0gTm9uZQorCisgICAgYWJzX2ZuID0gcmVzb2x2ZV9maWxlKGZuLCBkKQorCisgICAgaWYgaW5jbHVkZToKKyAgICAgICAgYmIucGFyc2UubWFya19kZXBlbmRlbmN5KGQsIGFic19mbikKKworICAgICMgYWN0dWFsIGxvYWRpbmcKKyAgICBzdGF0ZW1lbnRzID0gZ2V0X3N0YXRlbWVudHMoZm4sIGFic19mbiwgYmFzZV9uYW1lKQorCisgICAgIyBET05FIFdJVEggUEFSU0lORy4uLiB0aW1lIHRvIGV2YWx1YXRlCisgICAgaWYgZXh0ICE9ICIuYmJjbGFzcyIgYW5kIGFic19mbiAhPSBvbGRmaWxlOgorICAgICAgICBkLnNldFZhcignRklMRScsIGFic19mbikKKworICAgIHRyeToKKyAgICAgICAgc3RhdGVtZW50cy5ldmFsKGQpCisgICAgZXhjZXB0IGJiLnBhcnNlLlNraXBSZWNpcGU6CisgICAgICAgIGJiLmRhdGEuc2V0VmFyKCJfX1NLSVBQRUQiLCBUcnVlLCBkKQorICAgICAgICBpZiBpbmNsdWRlID09IDA6CisgICAgICAgICAgICByZXR1cm4geyAiIiA6IGQgfQorCisgICAgaWYgX19pbmZ1bmNfXzoKKyAgICAgICAgcmFpc2UgUGFyc2VFcnJvcigiU2hlbGwgZnVuY3Rpb24gJXMgaXMgbmV2ZXIgY2xvc2VkIiAlIF9faW5mdW5jX19bMF0sIF9faW5mdW5jX19bMV0sIF9faW5mdW5jX19bMl0pCisgICAgaWYgX19yZXNpZHVlX186CisgICAgICAgIHJhaXNlIFBhcnNlRXJyb3IoIkxlZnRvdmVyIHVucGFyc2VkIChpbmNvbXBsZXRlPykgZGF0YSAlcyBmcm9tICVzIiAlIF9fcmVzaWR1ZV9fLCBmbikKKworICAgIGlmIGV4dCAhPSAiLmJiY2xhc3MiIGFuZCBpbmNsdWRlID09IDA6CisgICAgICAgIHJldHVybiBhc3QubXVsdGlfZmluYWxpemUoZm4sIGQpCisKKyAgICBpZiBleHQgIT0gIi5iYmNsYXNzIiBhbmQgb2xkZmlsZSBhbmQgYWJzX2ZuICE9IG9sZGZpbGU6CisgICAgICAgIGQuc2V0VmFyKCJGSUxFIiwgb2xkZmlsZSkKKworICAgIHJldHVybiBkCisKK2RlZiBmZWVkZXIobGluZW5vLCBzLCBmbiwgcm9vdCwgc3RhdGVtZW50cyk6CisgICAgZ2xvYmFsIF9fZnVuY19zdGFydF9yZWdleHBfXywgX19pbmhlcml0X3JlZ2V4cF9fLCBfX2V4cG9ydF9mdW5jX3JlZ2V4cF9fLCBfX2FkZHRhc2tfcmVnZXhwX18sIF9fYWRkaGFuZGxlcl9yZWdleHBfXywgX19kZWZfcmVnZXhwX18sIF9fcHl0aG9uX2Z1bmNfcmVnZXhwX18sIF9faW5weXRob25fXywgX19pbmZ1bmNfXywgX19ib2R5X18sIGJiLCBfX3Jlc2lkdWVfXywgX19jbGFzc25hbWVfXworICAgIGlmIF9faW5mdW5jX186CisgICAgICAgIGlmIHMgPT0gJ30nOgorICAgICAgICAgICAgX19ib2R5X18uYXBwZW5kKCcnKQorICAgICAgICAgICAgYXN0LmhhbmRsZU1ldGhvZChzdGF0ZW1lbnRzLCBmbiwgbGluZW5vLCBfX2luZnVuY19fWzBdLCBfX2JvZHlfXykKKyAgICAgICAgICAgIF9faW5mdW5jX18gPSBbXQorICAgICAgICAgICAgX19ib2R5X18gPSBbXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX19ib2R5X18uYXBwZW5kKHMpCisgICAgICAgIHJldHVybgorCisgICAgaWYgX19pbnB5dGhvbl9fOgorICAgICAgICBtID0gX19weXRob25fZnVuY19yZWdleHBfXy5tYXRjaChzKQorICAgICAgICBpZiBtIGFuZCBsaW5lbm8gIT0gSU5fUFlUSE9OX0VPRjoKKyAgICAgICAgICAgIF9fYm9keV9fLmFwcGVuZChzKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3QuaGFuZGxlUHl0aG9uTWV0aG9kKHN0YXRlbWVudHMsIGZuLCBsaW5lbm8sIF9faW5weXRob25fXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdCwgX19ib2R5X18pCisgICAgICAgICAgICBfX2JvZHlfXyA9IFtdCisgICAgICAgICAgICBfX2lucHl0aG9uX18gPSBGYWxzZQorCisgICAgICAgICAgICBpZiBsaW5lbm8gPT0gSU5fUFlUSE9OX0VPRjoKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgIGlmIHMgYW5kIHNbMF0gPT0gJyMnOgorICAgICAgICBpZiBsZW4oX19yZXNpZHVlX18pICE9IDAgYW5kIF9fcmVzaWR1ZV9fWzBdWzBdICE9ICIjIjoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJUaGVyZSBpcyBhIGNvbW1lbnQgb24gbGluZSAlcyBvZiBmaWxlICVzICglcykgd2hpY2ggaXMgaW4gdGhlIG1pZGRsZSBvZiBhIG11bHRpbGluZSBleHByZXNzaW9uLlxuQml0YmFrZSB1c2VkIHRvIGlnbm9yZSB0aGVzZSBidXQgbm8gbG9uZ2VyIGRvZXMgc28sIHBsZWFzZSBmaXggeW91ciBtZXRhZGF0YSBhcyBlcnJvcnMgYXJlIGxpa2VseSBhcyBhIHJlc3VsdCBvZiB0aGlzIGNoYW5nZS4iICUgKGxpbmVubywgZm4sIHMpKQorCisgICAgaWYgbGVuKF9fcmVzaWR1ZV9fKSAhPSAwIGFuZCBfX3Jlc2lkdWVfX1swXVswXSA9PSAiIyIgYW5kIChub3QgcyBvciBzWzBdICE9ICIjIik6CisgICAgICAgIGJiLmZhdGFsKCJUaGVyZSBpcyBhIGNvbmZ1c2luZyBtdWx0aWxpbmUsIHBhcnRpYWxseSBjb21tZW50ZWQgZXhwcmVzc2lvbiBvbiBsaW5lICVzIG9mIGZpbGUgJXMgKCVzKS5cblBsZWFzZSBjbGFyaWZ5IHdoZXRoZXIgdGhpcyBpcyBhbGwgYSBjb21tZW50IG9yIHNob3VsZCBiZSBwYXJzZWQuIiAlIChsaW5lbm8sIGZuLCBzKSkKKworICAgIGlmIHMgYW5kIHNbLTFdID09ICdcXCc6CisgICAgICAgIF9fcmVzaWR1ZV9fLmFwcGVuZChzWzotMV0pCisgICAgICAgIHJldHVybgorCisgICAgcyA9ICIiLmpvaW4oX19yZXNpZHVlX18pICsgcworICAgIF9fcmVzaWR1ZV9fID0gW10KKworICAgICMgU2tpcCBlbXB0eSBsaW5lcworICAgIGlmIHMgPT0gJyc6CisgICAgICAgIHJldHVybiAgIAorCisgICAgIyBTa2lwIGNvbW1lbnRzCisgICAgaWYgc1swXSA9PSAnIyc6CisgICAgICAgIHJldHVybgorCisgICAgbSA9IF9fZnVuY19zdGFydF9yZWdleHBfXy5tYXRjaChzKQorICAgIGlmIG06CisgICAgICAgIF9faW5mdW5jX18gPSBbbS5ncm91cCgiZnVuYyIpIG9yICJfX2Fub255bW91cyIsIGZuLCBsaW5lbm9dCisgICAgICAgIGFzdC5oYW5kbGVNZXRob2RGbGFncyhzdGF0ZW1lbnRzLCBmbiwgbGluZW5vLCBfX2luZnVuY19fWzBdLCBtKQorICAgICAgICByZXR1cm4KKworICAgIG0gPSBfX2RlZl9yZWdleHBfXy5tYXRjaChzKQorICAgIGlmIG06CisgICAgICAgIF9fYm9keV9fLmFwcGVuZChzKQorICAgICAgICBfX2lucHl0aG9uX18gPSBtLmdyb3VwKDEpCisKKyAgICAgICAgcmV0dXJuCisKKyAgICBtID0gX19leHBvcnRfZnVuY19yZWdleHBfXy5tYXRjaChzKQorICAgIGlmIG06CisgICAgICAgIGFzdC5oYW5kbGVFeHBvcnRGdW5jcyhzdGF0ZW1lbnRzLCBmbiwgbGluZW5vLCBtLCBfX2NsYXNzbmFtZV9fKQorICAgICAgICByZXR1cm4KKworICAgIG0gPSBfX2FkZHRhc2tfcmVnZXhwX18ubWF0Y2gocykKKyAgICBpZiBtOgorICAgICAgICBhc3QuaGFuZGxlQWRkVGFzayhzdGF0ZW1lbnRzLCBmbiwgbGluZW5vLCBtKQorICAgICAgICByZXR1cm4KKworICAgIG0gPSBfX2RlbHRhc2tfcmVnZXhwX18ubWF0Y2gocykKKyAgICBpZiBtOgorICAgICAgICBhc3QuaGFuZGxlRGVsVGFzayhzdGF0ZW1lbnRzLCBmbiwgbGluZW5vLCBtKQorICAgICAgICByZXR1cm4KKworICAgIG0gPSBfX2FkZGhhbmRsZXJfcmVnZXhwX18ubWF0Y2gocykKKyAgICBpZiBtOgorICAgICAgICBhc3QuaGFuZGxlQkJIYW5kbGVycyhzdGF0ZW1lbnRzLCBmbiwgbGluZW5vLCBtKQorICAgICAgICByZXR1cm4KKworICAgIG0gPSBfX2luaGVyaXRfcmVnZXhwX18ubWF0Y2gocykKKyAgICBpZiBtOgorICAgICAgICBhc3QuaGFuZGxlSW5oZXJpdChzdGF0ZW1lbnRzLCBmbiwgbGluZW5vLCBtKQorICAgICAgICByZXR1cm4KKworICAgIHJldHVybiBDb25mSGFuZGxlci5mZWVkZXIobGluZW5vLCBzLCBmbiwgc3RhdGVtZW50cykKKworIyBBZGQgdXMgdG8gdGhlIGhhbmRsZXJzIGxpc3QKK2Zyb20gLi4gaW1wb3J0IGhhbmRsZXJzCitoYW5kbGVycy5hcHBlbmQoeydzdXBwb3J0cyc6IHN1cHBvcnRzLCAnaGFuZGxlJzogaGFuZGxlLCAnaW5pdCc6IGluaXR9KQorZGVsIGhhbmRsZXJzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BhcnNlL3BhcnNlX3B5L0NvbmZIYW5kbGVyLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9Db25mSGFuZGxlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmQ3NWIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9Db25mSGFuZGxlci5weQpAQCAtMCwwICsxLDE5MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCisgICBjbGFzcyBmb3IgaGFuZGxpbmcgY29uZmlndXJhdGlvbiBkYXRhIGZpbGVzCisKKyAgIFJlYWRzIGEgLmNvbmYgZmlsZSBhbmQgb2J0YWlucyBpdHMgbWV0YWRhdGEKKworIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBQaGlsIEJsdW5kZWxsCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCByZQoraW1wb3J0IG9zCitpbXBvcnQgYmIudXRpbHMKK2Zyb20gYmIucGFyc2UgaW1wb3J0IFBhcnNlRXJyb3IsIHJlc29sdmVfZmlsZSwgYXN0LCBsb2dnZXIsIGhhbmRsZQorCitfX2NvbmZpZ19yZWdleHBfXyAgPSByZS5jb21waWxlKCByIiIiCisgICAgXgorICAgICg/UDxleHA+ZXhwb3J0XHMqKT8KKyAgICAoP1A8dmFyPlthLXpBLVowLTlcLX5fKy4ke30vXSs/KQorICAgIChcWyg/UDxmbGFnPlthLXpBLVowLTlcLV8rLl0rKVxdKT8KKworICAgIFxzKiAoCisgICAgICAgICg/UDxjb2xvbj46PSkgfAorICAgICAgICAoP1A8bGF6eXF1ZXM+XD9cPz0pIHwKKyAgICAgICAgKD9QPHF1ZXM+XD89KSB8CisgICAgICAgICg/UDxhcHBlbmQ+XCs9KSB8CisgICAgICAgICg/UDxwcmVwZW5kPj1cKykgfAorICAgICAgICAoP1A8cHJlZG90Pj1cLikgfAorICAgICAgICAoP1A8cG9zdGRvdD5cLj0pIHwKKyAgICAgICAgPQorICAgICkgXHMqCisKKyAgICAoPyEnW14nXSonW14nXSonJCkKKyAgICAoPyFcIlteXCJdKlwiW15cIl0qXCIkKQorICAgICg/UDxhcG8+WydcIl0pCisgICAgKD9QPHZhbHVlPi4qKQorICAgICg/UD1hcG8pCisgICAgJAorICAgICIiIiwgcmUuWCkKK19faW5jbHVkZV9yZWdleHBfXyA9IHJlLmNvbXBpbGUoIHIiaW5jbHVkZVxzKyguKykiICkKK19fcmVxdWlyZV9yZWdleHBfXyA9IHJlLmNvbXBpbGUoIHIicmVxdWlyZVxzKyguKykiICkKK19fZXhwb3J0X3JlZ2V4cF9fID0gcmUuY29tcGlsZSggciJleHBvcnRccysoW2EtekEtWjAtOVwtXysuJHt9L10rKSQiICkKKworZGVmIGluaXQoZGF0YSk6CisgICAgdG9wZGlyID0gZGF0YS5nZXRWYXIoJ1RPUERJUicsIEZhbHNlKQorICAgIGlmIG5vdCB0b3BkaXI6CisgICAgICAgIGRhdGEuc2V0VmFyKCdUT1BESVInLCBvcy5nZXRjd2QoKSkKKworCitkZWYgc3VwcG9ydHMoZm4sIGQpOgorICAgIHJldHVybiBmblstNTpdID09ICIuY29uZiIKKworZGVmIGluY2x1ZGUocGFyZW50Zm4sIGZuLCBsaW5lbm8sIGRhdGEsIGVycm9yX291dCk6CisgICAgIiIiCisgICAgZXJyb3Jfb3V0OiBBIHN0cmluZyBpbmRpY2F0aW5nIHRoZSB2ZXJiIChlLmcuICJpbmNsdWRlIiwgImluaGVyaXQiKSB0byBiZQorICAgIHVzZWQgaW4gYSBQYXJzZUVycm9yIHRoYXQgd2lsbCBiZSByYWlzZWQgaWYgdGhlIGZpbGUgdG8gYmUgaW5jbHVkZWQgY291bGQKKyAgICBub3QgYmUgaW5jbHVkZWQuIFNwZWNpZnkgRmFsc2UgdG8gYXZvaWQgcmFpc2luZyBhbiBlcnJvciBpbiB0aGlzIGNhc2UuCisgICAgIiIiCisgICAgaWYgcGFyZW50Zm4gPT0gZm46ICMgcHJldmVudCBpbmZpbml0ZSByZWN1cnNpb24KKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGZuID0gZGF0YS5leHBhbmQoZm4pCisgICAgcGFyZW50Zm4gPSBkYXRhLmV4cGFuZChwYXJlbnRmbikKKworICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGZuKToKKyAgICAgICAgZG5hbWUgPSBvcy5wYXRoLmRpcm5hbWUocGFyZW50Zm4pCisgICAgICAgIGJicGF0aCA9ICIlczolcyIgJSAoZG5hbWUsIGRhdGEuZ2V0VmFyKCJCQlBBVEgiLCBUcnVlKSkKKyAgICAgICAgYWJzX2ZuLCBhdHRlbXB0cyA9IGJiLnV0aWxzLndoaWNoKGJicGF0aCwgZm4sIGhpc3Rvcnk9VHJ1ZSkKKyAgICAgICAgaWYgYWJzX2ZuIGFuZCBiYi5wYXJzZS5jaGVja19kZXBlbmRlbmN5KGRhdGEsIGFic19mbik6CisgICAgICAgICAgICBsb2dnZXIud2FybigiRHVwbGljYXRlIGluY2x1c2lvbiBmb3IgJXMgaW4gJXMiICUgKGFic19mbiwgZGF0YS5nZXRWYXIoJ0ZJTEUnLCBUcnVlKSkpCisgICAgICAgIGZvciBhZiBpbiBhdHRlbXB0czoKKyAgICAgICAgICAgIGJiLnBhcnNlLm1hcmtfZGVwZW5kZW5jeShkYXRhLCBhZikKKyAgICAgICAgaWYgYWJzX2ZuOgorICAgICAgICAgICAgZm4gPSBhYnNfZm4KKyAgICBlbGlmIGJiLnBhcnNlLmNoZWNrX2RlcGVuZGVuY3koZGF0YSwgZm4pOgorICAgICAgICBsb2dnZXIud2FybigiRHVwbGljYXRlIGluY2x1c2lvbiBmb3IgJXMgaW4gJXMiICUgKGZuLCBkYXRhLmdldFZhcignRklMRScsIFRydWUpKSkKKworICAgIHRyeToKKyAgICAgICAgYmIucGFyc2UuaGFuZGxlKGZuLCBkYXRhLCBUcnVlKQorICAgIGV4Y2VwdCAoSU9FcnJvciwgT1NFcnJvcikgYXMgZXhjOgorICAgICAgICBpZiBleGMuZXJybm8gPT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgaWYgZXJyb3Jfb3V0OgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3IoIkNvdWxkIG5vdCAlcyBmaWxlICVzIiAlIChlcnJvcl9vdXQsIGZuKSwgcGFyZW50Zm4sIGxpbmVubykKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiQ09ORiBmaWxlICclcycgbm90IGZvdW5kIiwgZm4pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBlcnJvcl9vdXQ6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFcnJvcigiQ291bGQgbm90ICVzIGZpbGUgJXM6ICVzIiAlIChlcnJvcl9vdXQsIGZuLCBleGMuc3RyZXJyb3IpLCBwYXJlbnRmbiwgbGluZW5vKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUVycm9yKCJFcnJvciBwYXJzaW5nICVzOiAlcyIgJSAoZm4sIGV4Yy5zdHJlcnJvciksIHBhcmVudGZuLCBsaW5lbm8pCisKKyMgV2UgaGF2ZSBhbiBpc3N1ZSB3aGVyZSBhIFVJIG1pZ2h0IHdhbnQgdG8gZW5mb3JjZSBwYXJ0aWN1bGFyIHNldHRpbmdzIHN1Y2ggYXMKKyMgYW4gZW1wdHkgRElTVFJPIHZhcmlhYmxlLiBJZiBjb25maWd1cmF0aW9uIGZpbGVzIGRvIHNvbWV0aGluZyBsaWtlIGFzc2lnbmluZworIyBhIHdlYWsgZGVmYXVsdCwgaXQgdHVybnMgb3V0IHRvIGJlIHZlcnkgZGlmZmljdWx0IHRvIGZpbHRlciBvdXQgdGhlc2UgY2hhbmdlcywKKyMgcGFydGljdWxhcmx5IHdoZW4gdGhlIHdlYWsgZGVmYXVsdCBtaWdodCBhcHBlYXIgaGFsZiB3YXkgdGhvdWdoIHBhcnNpbmcgYSBjaGFpbiAKKyMgb2YgY29uZmlndXJhdGlvbiBmaWxlcy4gV2UgdGhlcmVmb3JlIGxldCB0aGUgVUlzIGhvb2sgaW50byBjb25maWd1cmF0aW9uIGZpbGUKKyMgcGFyc2luZy4gVGhpcyB0dXJucyBvdXQgdG8gYmUgYSBoYXJkIHByb2JsZW0gdG8gc29sdmUgYW55IG90aGVyIHdheS4KK2NvbmZGaWx0ZXJzID0gW10KKworZGVmIGhhbmRsZShmbiwgZGF0YSwgaW5jbHVkZSk6CisgICAgaW5pdChkYXRhKQorCisgICAgaWYgaW5jbHVkZSA9PSAwOgorICAgICAgICBvbGRmaWxlID0gTm9uZQorICAgIGVsc2U6CisgICAgICAgIG9sZGZpbGUgPSBkYXRhLmdldFZhcignRklMRScsIEZhbHNlKQorCisgICAgYWJzX2ZuID0gcmVzb2x2ZV9maWxlKGZuLCBkYXRhKQorICAgIGYgPSBvcGVuKGFic19mbiwgJ3InKQorCisgICAgaWYgaW5jbHVkZToKKyAgICAgICAgYmIucGFyc2UubWFya19kZXBlbmRlbmN5KGRhdGEsIGFic19mbikKKworICAgIHN0YXRlbWVudHMgPSBhc3QuU3RhdGVtZW50R3JvdXAoKQorICAgIGxpbmVubyA9IDAKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBsaW5lbm8gPSBsaW5lbm8gKyAxCisgICAgICAgIHMgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgaWYgbm90IHM6CisgICAgICAgICAgICBicmVhaworICAgICAgICB3ID0gcy5zdHJpcCgpCisgICAgICAgICMgc2tpcCBlbXB0eSBsaW5lcworICAgICAgICBpZiBub3QgdzoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHMgPSBzLnJzdHJpcCgpCisgICAgICAgIHdoaWxlIHNbLTFdID09ICdcXCc6CisgICAgICAgICAgICBzMiA9IGYucmVhZGxpbmUoKS5zdHJpcCgpCisgICAgICAgICAgICBsaW5lbm8gPSBsaW5lbm8gKyAxCisgICAgICAgICAgICBpZiAobm90IHMyIG9yIHMyIGFuZCBzMlswXSAhPSAiIyIpIGFuZCBzWzBdID09ICIjIiA6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIlRoZXJlIGlzIGEgY29uZnVzaW5nIG11bHRpbGluZSwgcGFydGlhbGx5IGNvbW1lbnRlZCBleHByZXNzaW9uIG9uIGxpbmUgJXMgb2YgZmlsZSAlcyAoJXMpLlxuUGxlYXNlIGNsYXJpZnkgd2hldGhlciB0aGlzIGlzIGFsbCBhIGNvbW1lbnQgb3Igc2hvdWxkIGJlIHBhcnNlZC4iICUgKGxpbmVubywgZm4sIHMpKQorICAgICAgICAgICAgcyA9IHNbOi0xXSArIHMyCisgICAgICAgICMgc2tpcCBjb21tZW50cworICAgICAgICBpZiBzWzBdID09ICcjJzoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGZlZWRlcihsaW5lbm8sIHMsIGFic19mbiwgc3RhdGVtZW50cykKKworICAgICMgRE9ORSBXSVRIIFBBUlNJTkcuLi4gdGltZSB0byBldmFsdWF0ZQorICAgIGRhdGEuc2V0VmFyKCdGSUxFJywgYWJzX2ZuKQorICAgIHN0YXRlbWVudHMuZXZhbChkYXRhKQorICAgIGlmIG9sZGZpbGU6CisgICAgICAgIGRhdGEuc2V0VmFyKCdGSUxFJywgb2xkZmlsZSkKKworICAgIGYuY2xvc2UoKQorCisgICAgZm9yIGYgaW4gY29uZkZpbHRlcnM6CisgICAgICAgIGYoZm4sIGRhdGEpCisKKyAgICByZXR1cm4gZGF0YQorCitkZWYgZmVlZGVyKGxpbmVubywgcywgZm4sIHN0YXRlbWVudHMpOgorICAgIG0gPSBfX2NvbmZpZ19yZWdleHBfXy5tYXRjaChzKQorICAgIGlmIG06CisgICAgICAgIGdyb3VwZCA9IG0uZ3JvdXBkaWN0KCkKKyAgICAgICAgYXN0LmhhbmRsZURhdGEoc3RhdGVtZW50cywgZm4sIGxpbmVubywgZ3JvdXBkKQorICAgICAgICByZXR1cm4KKworICAgIG0gPSBfX2luY2x1ZGVfcmVnZXhwX18ubWF0Y2gocykKKyAgICBpZiBtOgorICAgICAgICBhc3QuaGFuZGxlSW5jbHVkZShzdGF0ZW1lbnRzLCBmbiwgbGluZW5vLCBtLCBGYWxzZSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBtID0gX19yZXF1aXJlX3JlZ2V4cF9fLm1hdGNoKHMpCisgICAgaWYgbToKKyAgICAgICAgYXN0LmhhbmRsZUluY2x1ZGUoc3RhdGVtZW50cywgZm4sIGxpbmVubywgbSwgVHJ1ZSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBtID0gX19leHBvcnRfcmVnZXhwX18ubWF0Y2gocykKKyAgICBpZiBtOgorICAgICAgICBhc3QuaGFuZGxlRXhwb3J0KHN0YXRlbWVudHMsIGZuLCBsaW5lbm8sIG0pCisgICAgICAgIHJldHVybgorCisgICAgcmFpc2UgUGFyc2VFcnJvcigidW5wYXJzZWQgbGluZTogJyVzJyIgJSBzLCBmbiwgbGluZW5vKTsKKworIyBBZGQgdXMgdG8gdGhlIGhhbmRsZXJzIGxpc3QKK2Zyb20gYmIucGFyc2UgaW1wb3J0IGhhbmRsZXJzCitoYW5kbGVycy5hcHBlbmQoeydzdXBwb3J0cyc6IHN1cHBvcnRzLCAnaGFuZGxlJzogaGFuZGxlLCAnaW5pdCc6IGluaXR9KQorZGVsIGhhbmRsZXJzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BhcnNlL3BhcnNlX3B5L19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTY1OGQwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9fX2luaXRfXy5weQpAQCAtMCwwICsxLDMzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgUGFyc2VycworCitGaWxlIHBhcnNlcnMgZm9yIHRoZSBCaXRCYWtlIGJ1aWxkIHRvb2xzLgorCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIENocmlzIExhcnNvbgorIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIFBoaWwgQmx1bmRlbGwKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIEJhc2VkIG9uIGZ1bmN0aW9ucyBmcm9tIHRoZSBiYXNlIGJiIG1vZHVsZSwgQ29weXJpZ2h0IDIwMDMgSG9sZ2VyIFNjaHVyaWcKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKK2Zyb20gLiBpbXBvcnQgQ29uZkhhbmRsZXIKK2Zyb20gLiBpbXBvcnQgQkJIYW5kbGVyCisKK19fdmVyc2lvbl9fID0gJzEuMCcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGVyc2lzdF9kYXRhLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wZXJzaXN0X2RhdGEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc5NWJjOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGVyc2lzdF9kYXRhLnB5CkBAIC0wLDAgKzEsMjE3IEBACisiIiJCaXRCYWtlIFBlcnNpc3RlbnQgRGF0YSBTdG9yZQorCitVc2VkIHRvIHN0b3JlIGRhdGEgaW4gYSBjZW50cmFsIGxvY2F0aW9uIHN1Y2ggdGhhdCBvdGhlciB0aHJlYWRzL3Rhc2tzIGNhbgorYWNjZXNzIHRoZW0gYXQgc29tZSBmdXR1cmUgZGF0ZS4gIEFjdHMgYXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCBzcWxpdGUsCitjdXJyZW50bHksIHByb3ZpZGluZyBhIGtleS92YWx1ZSBzdG9yZSBhY2Nlc3NlZCBieSAnZG9tYWluJy4KKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwNyAgICAgICAgUmljaGFyZCBQdXJkaWUKKyMgQ29weXJpZ2h0IChDKSAyMDEwICAgICAgICBDaHJpcyBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBzeXMKK2ltcG9ydCB3YXJuaW5ncworZnJvbSBiYi5jb21wYXQgaW1wb3J0IHRvdGFsX29yZGVyaW5nCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBNYXBwaW5nCisKK3RyeToKKyAgICBpbXBvcnQgc3FsaXRlMworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gcHlzcWxpdGUyIGltcG9ydCBkYmFwaTIgYXMgc3FsaXRlMworCitzcWx2ZXJzaW9uID0gc3FsaXRlMy5zcWxpdGVfdmVyc2lvbl9pbmZvCitpZiBzcWx2ZXJzaW9uWzBdIDwgMyBvciAoc3FsdmVyc2lvblswXSA9PSAzIGFuZCBzcWx2ZXJzaW9uWzFdIDwgMyk6CisgICAgcmFpc2UgRXhjZXB0aW9uKCJzcWxpdGUzIHZlcnNpb24gMy4zLjAgb3IgbGF0ZXIgaXMgcmVxdWlyZWQuIikKKworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5QZXJzaXN0RGF0YSIpCitpZiBoYXNhdHRyKHNxbGl0ZTMsICdlbmFibGVfc2hhcmVkX2NhY2hlJyk6CisgICAgdHJ5OgorICAgICAgICBzcWxpdGUzLmVuYWJsZV9zaGFyZWRfY2FjaGUoVHJ1ZSkKKyAgICBleGNlcHQgc3FsaXRlMy5PcGVyYXRpb25hbEVycm9yOgorICAgICAgICBwYXNzCisKKworQHRvdGFsX29yZGVyaW5nCitjbGFzcyBTUUxUYWJsZShjb2xsZWN0aW9ucy5NdXRhYmxlTWFwcGluZyk6CisgICAgIiIiT2JqZWN0IHJlcHJlc2VudGluZyBhIHRhYmxlL2RvbWFpbiBpbiB0aGUgZGF0YWJhc2UiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2FjaGVmaWxlLCB0YWJsZSk6CisgICAgICAgIHNlbGYuY2FjaGVmaWxlID0gY2FjaGVmaWxlCisgICAgICAgIHNlbGYudGFibGUgPSB0YWJsZQorICAgICAgICBzZWxmLmN1cnNvciA9IGNvbm5lY3Qoc2VsZi5jYWNoZWZpbGUpCisKKyAgICAgICAgc2VsZi5fZXhlY3V0ZSgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgJXMoa2V5IFRFWFQsIHZhbHVlIFRFWFQpOyIKKyAgICAgICAgICAgICAgICAgICAgICAlIHRhYmxlKQorCisgICAgZGVmIF9leGVjdXRlKHNlbGYsICpxdWVyeSk6CisgICAgICAgICIiIkV4ZWN1dGUgYSBxdWVyeSwgd2FpdGluZyB0byBhY3F1aXJlIGEgbG9jayBpZiBuZWNlc3NhcnkiIiIKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY3Vyc29yLmV4ZWN1dGUoKnF1ZXJ5KQorICAgICAgICAgICAgZXhjZXB0IHNxbGl0ZTMuT3BlcmF0aW9uYWxFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgaWYgJ2RhdGFiYXNlIGlzIGxvY2tlZCcgaW4gc3RyKGV4YykgYW5kIGNvdW50IDwgNTAwOgorICAgICAgICAgICAgICAgICAgICBjb3VudCA9IGNvdW50ICsgMQorICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnNvci5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY3Vyc29yID0gY29ubmVjdChzZWxmLmNhY2hlZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5jdXJzb3IuX19lbnRlcl9fKCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjaW5mbyk6CisgICAgICAgIHNlbGYuY3Vyc29yLl9fZXhpdF9fKCpleGNpbmZvKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIGRhdGEgPSBzZWxmLl9leGVjdXRlKCJTRUxFQ1QgKiBmcm9tICVzIHdoZXJlIGtleT0/OyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLCBba2V5XSkKKyAgICAgICAgZm9yIHJvdyBpbiBkYXRhOgorICAgICAgICAgICAgcmV0dXJuIHJvd1sxXQorICAgICAgICByYWlzZSBLZXlFcnJvcihrZXkpCisKKyAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgaWYga2V5IG5vdCBpbiBzZWxmOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3Ioa2V5KQorICAgICAgICBzZWxmLl9leGVjdXRlKCJERUxFVEUgZnJvbSAlcyB3aGVyZSBrZXk9PzsiICUgc2VsZi50YWJsZSwgW2tleV0pCisKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGtleSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ09ubHkgc3RyaW5nIGtleXMgYXJlIHN1cHBvcnRlZCcpCisgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdPbmx5IHN0cmluZyB2YWx1ZXMgYXJlIHN1cHBvcnRlZCcpCisKKyAgICAgICAgZGF0YSA9IHNlbGYuX2V4ZWN1dGUoIlNFTEVDVCAqIGZyb20gJXMgd2hlcmUga2V5PT87IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGFibGUsIFtrZXldKQorICAgICAgICBleGlzdHMgPSBsZW4obGlzdChkYXRhKSkKKyAgICAgICAgaWYgZXhpc3RzOgorICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZSgiVVBEQVRFICVzIFNFVCB2YWx1ZT0/IFdIRVJFIGtleT0/OyIgJSBzZWxmLnRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWUsIGtleV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9leGVjdXRlKCJJTlNFUlQgaW50byAlcyhrZXksIHZhbHVlKSB2YWx1ZXMgKD8sID8pOyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLCBba2V5LCB2YWx1ZV0pCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBrZXkgaW4gc2V0KHNlbGYpCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgZGF0YSA9IHNlbGYuX2V4ZWN1dGUoIlNFTEVDVCBDT1VOVChrZXkpIEZST00gJXM7IiAlIHNlbGYudGFibGUpCisgICAgICAgIGZvciByb3cgaW4gZGF0YToKKyAgICAgICAgICAgIHJldHVybiByb3dbMF0KKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgZGF0YSA9IHNlbGYuX2V4ZWN1dGUoIlNFTEVDVCBrZXkgRlJPTSAlczsiICUgc2VsZi50YWJsZSkKKyAgICAgICAgcmV0dXJuIChyb3dbMF0gZm9yIHJvdyBpbiBkYXRhKQorCisgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBNYXBwaW5nKToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkCisKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmKSA8IGxlbihvdGhlcikKKworICAgIGRlZiBnZXRfYnlfcGF0dGVybihzZWxmLCBwYXR0ZXJuKToKKyAgICAgICAgZGF0YSA9IHNlbGYuX2V4ZWN1dGUoIlNFTEVDVCAqIEZST00gJXMgV0hFUkUga2V5IExJS0UgPzsiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YWJsZSwgW3BhdHRlcm5dKQorICAgICAgICByZXR1cm4gW3Jvd1sxXSBmb3Igcm93IGluIGRhdGFdCisKKyAgICBkZWYgdmFsdWVzKHNlbGYpOgorICAgICAgICByZXR1cm4gbGlzdChzZWxmLml0ZXJ2YWx1ZXMoKSkKKworICAgIGRlZiBpdGVydmFsdWVzKHNlbGYpOgorICAgICAgICBkYXRhID0gc2VsZi5fZXhlY3V0ZSgiU0VMRUNUIHZhbHVlIEZST00gJXM7IiAlIHNlbGYudGFibGUpCisgICAgICAgIHJldHVybiAocm93WzBdIGZvciByb3cgaW4gZGF0YSkKKworICAgIGRlZiBpdGVtcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5pdGVyaXRlbXMoKSkKKworICAgIGRlZiBpdGVyaXRlbXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9leGVjdXRlKCJTRUxFQ1QgKiBGUk9NICVzOyIgJSBzZWxmLnRhYmxlKQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICBzZWxmLl9leGVjdXRlKCJERUxFVEUgRlJPTSAlczsiICUgc2VsZi50YWJsZSkKKworICAgIGRlZiBoYXNfa2V5KHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBrZXkgaW4gc2VsZgorCisKK2NsYXNzIFBlcnNpc3REYXRhKG9iamVjdCk6CisgICAgIiIiRGVwcmVjYXRlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgYml0YmFrZSBwZXJzaXN0ZW50IGRhdGEgc3RvcmUiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisgICAgICAgIHdhcm5pbmdzLndhcm4oIlVzZSBvZiBQZXJzaXN0RGF0YSBpcyBkZXByZWNhdGVkLiAgUGxlYXNlIHVzZSAiCisgICAgICAgICAgICAgICAgICAgICAgInBlcnNpc3QoZG9tYWluLCBkKSBpbnN0ZWFkLiIsCisgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk9RGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgIHN0YWNrbGV2ZWw9MikKKworICAgICAgICBzZWxmLmRhdGEgPSBwZXJzaXN0KGQpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiVXNpbmcgJyVzJyBhcyB0aGUgcGVyc2lzdGVudCBkYXRhIGNhY2hlIiwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF0YS5maWxlbmFtZSkKKworICAgIGRlZiBhZGREb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgIiIiCisgICAgICAgIEFkZCBhIGRvbWFpbiAocGVuZGluZyBkZXByZWNhdGlvbikKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLmRhdGFbZG9tYWluXQorCisgICAgZGVmIGRlbERvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICAiIiIKKyAgICAgICAgUmVtb3ZlcyBhIGRvbWFpbiBhbmQgYWxsIHRoZSBkYXRhIGl0IGNvbnRhaW5zCisgICAgICAgICIiIgorICAgICAgICBkZWwgc2VsZi5kYXRhW2RvbWFpbl0KKworICAgIGRlZiBnZXRLZXlWYWx1ZXMoc2VsZiwgZG9tYWluKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIGxpc3Qgb2Yga2V5ICsgdmFsdWUgcGFpcnMgZm9yIGEgZG9tYWluCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5kYXRhW2RvbWFpbl0uaXRlbXMoKQorCisgICAgZGVmIGdldFZhbHVlKHNlbGYsIGRvbWFpbiwga2V5KToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgdmFsdWUgb2YgYSBrZXkgZm9yIGEgZG9tYWluCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5kYXRhW2RvbWFpbl1ba2V5XQorCisgICAgZGVmIHNldFZhbHVlKHNlbGYsIGRvbWFpbiwga2V5LCB2YWx1ZSk6CisgICAgICAgICIiIgorICAgICAgICBTZXRzIHRoZSB2YWx1ZSBvZiBhIGtleSBmb3IgYSBkb21haW4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuZGF0YVtkb21haW5dW2tleV0gPSB2YWx1ZQorCisgICAgZGVmIGRlbFZhbHVlKHNlbGYsIGRvbWFpbiwga2V5KToKKyAgICAgICAgIiIiCisgICAgICAgIERlbGV0ZXMgYSBrZXkvdmFsdWUgcGFpcgorICAgICAgICAiIiIKKyAgICAgICAgZGVsIHNlbGYuZGF0YVtkb21haW5dW2tleV0KKworZGVmIGNvbm5lY3QoZGF0YWJhc2UpOgorICAgIGNvbm5lY3Rpb24gPSBzcWxpdGUzLmNvbm5lY3QoZGF0YWJhc2UsIHRpbWVvdXQ9NSwgaXNvbGF0aW9uX2xldmVsPU5vbmUpCisgICAgY29ubmVjdGlvbi5leGVjdXRlKCJwcmFnbWEgc3luY2hyb25vdXMgPSBvZmY7IikKKyAgICByZXR1cm4gY29ubmVjdGlvbgorCitkZWYgcGVyc2lzdChkb21haW4sIGQpOgorICAgICIiIkNvbnZlbmllbmNlIGZhY3RvcnkgZm9yIFNRTFRhYmxlIG9iamVjdHMgYmFzZWQgdXBvbiBtZXRhZGF0YSIiIgorICAgIGltcG9ydCBiYi51dGlscworICAgIGNhY2hlZGlyID0gKGQuZ2V0VmFyKCJQRVJTSVNURU5UX0RJUiIsIFRydWUpIG9yCisgICAgICAgICAgICAgICAgZC5nZXRWYXIoIkNBQ0hFIiwgVHJ1ZSkpCisgICAgaWYgbm90IGNhY2hlZGlyOgorICAgICAgICBsb2dnZXIuY3JpdGljYWwoIlBsZWFzZSBzZXQgdGhlICdQRVJTSVNURU5UX0RJUicgb3IgJ0NBQ0hFJyB2YXJpYWJsZSIpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoY2FjaGVkaXIpCisgICAgY2FjaGVmaWxlID0gb3MucGF0aC5qb2luKGNhY2hlZGlyLCAiYmJfcGVyc2lzdF9kYXRhLnNxbGl0ZTMiKQorICAgIHJldHVybiBTUUxUYWJsZShjYWNoZWZpbGUsIGRvbWFpbikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHJvY2Vzcy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHJvY2Vzcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzA3ZjJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wcm9jZXNzLnB5CkBAIC0wLDAgKzEsMTU2IEBACitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBlcnJubworaW1wb3J0IHNlbGVjdAorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZS5Qcm9jZXNzJykKKworZGVmIHN1YnByb2Nlc3Nfc2V0dXAoKToKKyAgICAjIFB5dGhvbiBpbnN0YWxscyBhIFNJR1BJUEUgaGFuZGxlciBieSBkZWZhdWx0LiBUaGlzIGlzIHVzdWFsbHkgbm90IHdoYXQKKyAgICAjIG5vbi1QeXRob24gc3VicHJvY2Vzc2VzIGV4cGVjdC4KKyAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdQSVBFLCBzaWduYWwuU0lHX0RGTCkKKworY2xhc3MgQ21kRXJyb3IoUnVudGltZUVycm9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZCwgbXNnPU5vbmUpOgorICAgICAgICBzZWxmLmNvbW1hbmQgPSBjb21tYW5kCisgICAgICAgIHNlbGYubXNnID0gbXNnCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi5jb21tYW5kLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIGNtZCA9IHN1YnByb2Nlc3MubGlzdDJjbWRsaW5lKHNlbGYuY29tbWFuZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNtZCA9IHNlbGYuY29tbWFuZAorCisgICAgICAgIG1zZyA9ICJFeGVjdXRpb24gb2YgJyVzJyBmYWlsZWQiICUgY21kCisgICAgICAgIGlmIHNlbGYubXNnOgorICAgICAgICAgICAgbXNnICs9ICc6ICVzJyAlIHNlbGYubXNnCisgICAgICAgIHJldHVybiBtc2cKKworY2xhc3MgTm90Rm91bmRFcnJvcihDbWRFcnJvcik6CisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBDbWRFcnJvci5fX3N0cl9fKHNlbGYpICsgIjogY29tbWFuZCBub3QgZm91bmQiCisKK2NsYXNzIEV4ZWN1dGlvbkVycm9yKENtZEVycm9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZCwgZXhpdGNvZGUsIHN0ZG91dCA9IE5vbmUsIHN0ZGVyciA9IE5vbmUpOgorICAgICAgICBDbWRFcnJvci5fX2luaXRfXyhzZWxmLCBjb21tYW5kKQorICAgICAgICBzZWxmLmV4aXRjb2RlID0gZXhpdGNvZGUKKyAgICAgICAgc2VsZi5zdGRvdXQgPSBzdGRvdXQKKyAgICAgICAgc2VsZi5zdGRlcnIgPSBzdGRlcnIKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICBtZXNzYWdlID0gIiIKKyAgICAgICAgaWYgc2VsZi5zdGRlcnI6CisgICAgICAgICAgICBtZXNzYWdlICs9IHNlbGYuc3RkZXJyCisgICAgICAgIGlmIHNlbGYuc3Rkb3V0OgorICAgICAgICAgICAgbWVzc2FnZSArPSBzZWxmLnN0ZG91dAorICAgICAgICBpZiBtZXNzYWdlOgorICAgICAgICAgICAgbWVzc2FnZSA9ICI6XG4iICsgbWVzc2FnZQorICAgICAgICByZXR1cm4gKENtZEVycm9yLl9fc3RyX18oc2VsZikgKworICAgICAgICAgICAgICAgICIgd2l0aCBleGl0IGNvZGUgJXMiICUgc2VsZi5leGl0Y29kZSArIG1lc3NhZ2UpCisKK2NsYXNzIFBvcGVuKHN1YnByb2Nlc3MuUG9wZW4pOgorICAgIGRlZmF1bHRzID0geworICAgICAgICAiY2xvc2VfZmRzIjogVHJ1ZSwKKyAgICAgICAgInByZWV4ZWNfZm4iOiBzdWJwcm9jZXNzX3NldHVwLAorICAgICAgICAic3Rkb3V0Ijogc3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAic3RkZXJyIjogc3VicHJvY2Vzcy5TVERPVVQsCisgICAgICAgICJzdGRpbiI6IHN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgInNoZWxsIjogRmFsc2UsCisgICAgfQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIG9wdGlvbnMgPSBkaWN0KHNlbGYuZGVmYXVsdHMpCisgICAgICAgIG9wdGlvbnMudXBkYXRlKGt3YXJncykKKyAgICAgICAgc3VicHJvY2Vzcy5Qb3Blbi5fX2luaXRfXyhzZWxmLCAqYXJncywgKipvcHRpb25zKQorCitkZWYgX2xvZ2dlZF9jb21tdW5pY2F0ZShwaXBlLCBsb2csIGlucHV0LCBleHRyYWZpbGVzKToKKyAgICBpZiBwaXBlLnN0ZGluOgorICAgICAgICBpZiBpbnB1dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHBpcGUuc3RkaW4ud3JpdGUoaW5wdXQpCisgICAgICAgIHBpcGUuc3RkaW4uY2xvc2UoKQorCisgICAgb3V0ZGF0YSwgZXJyZGF0YSA9IFtdLCBbXQorICAgIHJpbiA9IFtdCisKKyAgICBpZiBwaXBlLnN0ZG91dCBpcyBub3QgTm9uZToKKyAgICAgICAgYmIudXRpbHMubm9uYmxvY2tpbmdmZChwaXBlLnN0ZG91dC5maWxlbm8oKSkKKyAgICAgICAgcmluLmFwcGVuZChwaXBlLnN0ZG91dCkKKyAgICBpZiBwaXBlLnN0ZGVyciBpcyBub3QgTm9uZToKKyAgICAgICAgYmIudXRpbHMubm9uYmxvY2tpbmdmZChwaXBlLnN0ZGVyci5maWxlbm8oKSkKKyAgICAgICAgcmluLmFwcGVuZChwaXBlLnN0ZGVycikKKyAgICBmb3IgZm9iaiwgXyBpbiBleHRyYWZpbGVzOgorICAgICAgICBiYi51dGlscy5ub25ibG9ja2luZ2ZkKGZvYmouZmlsZW5vKCkpCisgICAgICAgIHJpbi5hcHBlbmQoZm9iaikKKworICAgIGRlZiByZWFkZXh0cmFzKHNlbGVjdGVkKToKKyAgICAgICAgZm9yIGZvYmosIGZ1bmMgaW4gZXh0cmFmaWxlczoKKyAgICAgICAgICAgIGlmIGZvYmogaW4gc2VsZWN0ZWQ6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gZm9iai5yZWFkKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgIGlmIGVyci5lcnJubyA9PSBlcnJuby5FQUdBSU4gb3IgZXJyLmVycm5vID09IGVycm5vLkVXT1VMREJMT0NLOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiBkYXRhIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBmdW5jKGRhdGEpCisKKyAgICB0cnk6CisgICAgICAgIHdoaWxlIHBpcGUucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICBybGlzdCA9IHJpbgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHIsdyxlID0gc2VsZWN0LnNlbGVjdCAocmxpc3QsIFtdLCBbXSwgMSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FSU5UUjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICAgICAgaWYgcGlwZS5zdGRvdXQgaW4gcjoKKyAgICAgICAgICAgICAgICBkYXRhID0gcGlwZS5zdGRvdXQucmVhZCgpCisgICAgICAgICAgICAgICAgaWYgZGF0YSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgb3V0ZGF0YS5hcHBlbmQoZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgbG9nLndyaXRlKGRhdGEpCisKKyAgICAgICAgICAgIGlmIHBpcGUuc3RkZXJyIGluIHI6CisgICAgICAgICAgICAgICAgZGF0YSA9IHBpcGUuc3RkZXJyLnJlYWQoKQorICAgICAgICAgICAgICAgIGlmIGRhdGEgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGVycmRhdGEuYXBwZW5kKGRhdGEpCisgICAgICAgICAgICAgICAgICAgIGxvZy53cml0ZShkYXRhKQorCisgICAgICAgICAgICByZWFkZXh0cmFzKHIpCisKKyAgICBmaW5hbGx5OiAgICAKKyAgICAgICAgbG9nLmZsdXNoKCkKKworICAgIHJlYWRleHRyYXMoW2ZvYmogZm9yIGZvYmosIF8gaW4gZXh0cmFmaWxlc10pCisKKyAgICBpZiBwaXBlLnN0ZG91dCBpcyBub3QgTm9uZToKKyAgICAgICAgcGlwZS5zdGRvdXQuY2xvc2UoKQorICAgIGlmIHBpcGUuc3RkZXJyIGlzIG5vdCBOb25lOgorICAgICAgICBwaXBlLnN0ZGVyci5jbG9zZSgpCisgICAgcmV0dXJuICcnLmpvaW4ob3V0ZGF0YSksICcnLmpvaW4oZXJyZGF0YSkKKworZGVmIHJ1bihjbWQsIGlucHV0PU5vbmUsIGxvZz1Ob25lLCBleHRyYWZpbGVzPU5vbmUsICoqb3B0aW9ucyk6CisgICAgIiIiQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gcnVuIGEgY29tbWFuZCBhbmQgcmV0dXJuIGl0cyBvdXRwdXQsIHJhaXNpbmcgYW4KKyAgICBleGNlcHRpb24gd2hlbiB0aGUgY29tbWFuZCBmYWlscyIiIgorCisgICAgaWYgbm90IGV4dHJhZmlsZXM6CisgICAgICAgIGV4dHJhZmlsZXMgPSBbXQorCisgICAgaWYgaXNpbnN0YW5jZShjbWQsIGJhc2VzdHJpbmcpIGFuZCBub3QgInNoZWxsIiBpbiBvcHRpb25zOgorICAgICAgICBvcHRpb25zWyJzaGVsbCJdID0gVHJ1ZQorCisgICAgdHJ5OgorICAgICAgICBwaXBlID0gUG9wZW4oY21kLCAqKm9wdGlvbnMpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICBpZiBleGMuZXJybm8gPT0gMjoKKyAgICAgICAgICAgIHJhaXNlIE5vdEZvdW5kRXJyb3IoY21kKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgQ21kRXJyb3IoY21kLCBleGMpCisKKyAgICBpZiBsb2c6CisgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gX2xvZ2dlZF9jb21tdW5pY2F0ZShwaXBlLCBsb2csIGlucHV0LCBleHRyYWZpbGVzKQorICAgIGVsc2U6CisgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcGlwZS5jb21tdW5pY2F0ZShpbnB1dCkKKworICAgIGlmIHBpcGUucmV0dXJuY29kZSAhPSAwOgorICAgICAgICByYWlzZSBFeGVjdXRpb25FcnJvcihjbWQsIHBpcGUucmV0dXJuY29kZSwgc3Rkb3V0LCBzdGRlcnIpCisgICAgcmV0dXJuIHN0ZG91dCwgc3RkZXJyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Byb3ZpZGVycy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHJvdmlkZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzN2UxZmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Byb3ZpZGVycy5weQpAQCAtMCwwICsxLDM4MSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBQaGlsIEJsdW5kZWxsCisjIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDUgTWljaGFlbCAnTWlja2V5JyBMYXVlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgICAgICAgIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisjIENvcHlyaWdodCAoQykgMjAwNSAgICAgICAgUk9BRCBHbWJICisjIENvcHlyaWdodCAoQykgMjAwNiAgICAgICAgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCByZQoraW1wb3J0IGxvZ2dpbmcKK2Zyb20gYmIgaW1wb3J0IGRhdGEsIHV0aWxzCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAoraW1wb3J0IGJiCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlLlByb3ZpZGVyIikKKworY2xhc3MgTm9Qcm92aWRlcihiYi5CQkhhbmRsZWRFeGNlcHRpb24pOgorICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiBubyBwcm92aWRlciBvZiBhIGJ1aWxkIGRlcGVuZGVuY3kgY2FuIGJlIGZvdW5kIiIiCisKK2NsYXNzIE5vUlByb3ZpZGVyKGJiLkJCSGFuZGxlZEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB3aGVuIG5vIHByb3ZpZGVyIG9mIGEgcnVudGltZSBkZXBlbmRlbmN5IGNhbiBiZSBmb3VuZCIiIgorCitjbGFzcyBNdWx0aXBsZVJQcm92aWRlcihiYi5CQkhhbmRsZWRFeGNlcHRpb24pOgorICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiBtdWx0aXBsZSBwcm92aWRlcnMgb2YgYSBydW50aW1lIGRlcGVuZGVuY3kgY2FuIGJlIGZvdW5kIiIiCisKK2RlZiBmaW5kUHJvdmlkZXJzKGNmZ0RhdGEsIGRhdGFDYWNoZSwgcGtnX3BuID0gTm9uZSk6CisgICAgIiIiCisgICAgQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gZ2V0IGxhdGVzdCBhbmQgcHJlZmVycmVkIHByb3ZpZGVycyBpbiBwa2dfcG4KKyAgICAiIiIKKworICAgIGlmIG5vdCBwa2dfcG46CisgICAgICAgIHBrZ19wbiA9IGRhdGFDYWNoZS5wa2dfcG4KKworICAgICMgTmVlZCB0byBlbnN1cmUgZGF0YSBzdG9yZSBpcyBleHBhbmRlZAorICAgIGxvY2FsZGF0YSA9IGRhdGEuY3JlYXRlQ29weShjZmdEYXRhKQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgIGJiLmRhdGEuZXhwYW5kS2V5cyhsb2NhbGRhdGEpCisKKyAgICBwcmVmZXJyZWRfdmVyc2lvbnMgPSB7fQorICAgIGxhdGVzdF92ZXJzaW9ucyA9IHt9CisKKyAgICBmb3IgcG4gaW4gcGtnX3BuOgorICAgICAgICAobGFzdF92ZXIsIGxhc3RfZmlsZSwgcHJlZl92ZXIsIHByZWZfZmlsZSkgPSBmaW5kQmVzdFByb3ZpZGVyKHBuLCBsb2NhbGRhdGEsIGRhdGFDYWNoZSwgcGtnX3BuKQorICAgICAgICBwcmVmZXJyZWRfdmVyc2lvbnNbcG5dID0gKHByZWZfdmVyLCBwcmVmX2ZpbGUpCisgICAgICAgIGxhdGVzdF92ZXJzaW9uc1twbl0gPSAobGFzdF92ZXIsIGxhc3RfZmlsZSkKKworICAgIHJldHVybiAobGF0ZXN0X3ZlcnNpb25zLCBwcmVmZXJyZWRfdmVyc2lvbnMpCisKKworZGVmIGFsbFByb3ZpZGVycyhkYXRhQ2FjaGUpOgorICAgICIiIgorICAgIEZpbmQgYWxsIHByb3ZpZGVycyBmb3IgZWFjaCBwbgorICAgICIiIgorICAgIGFsbF9wcm92aWRlcnMgPSBkZWZhdWx0ZGljdChsaXN0KQorICAgIGZvciAoZm4sIHBuKSBpbiBkYXRhQ2FjaGUucGtnX2ZuLml0ZW1zKCk6CisgICAgICAgIHZlciA9IGRhdGFDYWNoZS5wa2dfcGVwdnByW2ZuXQorICAgICAgICBhbGxfcHJvdmlkZXJzW3BuXS5hcHBlbmQoKHZlciwgZm4pKQorICAgIHJldHVybiBhbGxfcHJvdmlkZXJzCisKKworZGVmIHNvcnRQcmlvcml0aWVzKHBuLCBkYXRhQ2FjaGUsIHBrZ19wbiA9IE5vbmUpOgorICAgICIiIgorICAgIFJlb3JkZXIgcGtnX3BuIGJ5IGZpbGUgcHJpb3JpdHkgYW5kIGRlZmF1bHQgcHJlZmVyZW5jZQorICAgICIiIgorCisgICAgaWYgbm90IHBrZ19wbjoKKyAgICAgICAgcGtnX3BuID0gZGF0YUNhY2hlLnBrZ19wbgorCisgICAgZmlsZXMgPSBwa2dfcG5bcG5dCisgICAgcHJpb3JpdGllcyA9IHt9CisgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgIHByaW9yaXR5ID0gZGF0YUNhY2hlLmJiZmlsZV9wcmlvcml0eVtmXQorICAgICAgICBwcmVmZXJlbmNlID0gZGF0YUNhY2hlLnBrZ19kcFtmXQorICAgICAgICBpZiBwcmlvcml0eSBub3QgaW4gcHJpb3JpdGllczoKKyAgICAgICAgICAgIHByaW9yaXRpZXNbcHJpb3JpdHldID0ge30KKyAgICAgICAgaWYgcHJlZmVyZW5jZSBub3QgaW4gcHJpb3JpdGllc1twcmlvcml0eV06CisgICAgICAgICAgICBwcmlvcml0aWVzW3ByaW9yaXR5XVtwcmVmZXJlbmNlXSA9IFtdCisgICAgICAgIHByaW9yaXRpZXNbcHJpb3JpdHldW3ByZWZlcmVuY2VdLmFwcGVuZChmKQorICAgIHRtcF9wbiA9IFtdCisgICAgZm9yIHByaSBpbiBzb3J0ZWQocHJpb3JpdGllcyk6CisgICAgICAgIHRtcF9wcmVmID0gW10KKyAgICAgICAgZm9yIHByZWYgaW4gc29ydGVkKHByaW9yaXRpZXNbcHJpXSk6CisgICAgICAgICAgICB0bXBfcHJlZi5leHRlbmQocHJpb3JpdGllc1twcmldW3ByZWZdKQorICAgICAgICB0bXBfcG4gPSBbdG1wX3ByZWZdICsgdG1wX3BuCisKKyAgICByZXR1cm4gdG1wX3BuCisKK2RlZiBwcmVmZXJyZWRWZXJzaW9uTWF0Y2gocGUsIHB2LCBwciwgcHJlZmVycmVkX2UsIHByZWZlcnJlZF92LCBwcmVmZXJyZWRfcik6CisgICAgIiIiCisgICAgQ2hlY2sgaWYgdGhlIHZlcnNpb24gcGUscHYscHIgaXMgdGhlIHByZWZlcnJlZCBvbmUuCisgICAgSWYgdGhlcmUgaXMgcHJlZmVycmVkIHZlcnNpb24gZGVmaW5lZCBhbmQgZW5kcyB3aXRoICclJywgdGhlbiBwdiBoYXMgdG8gc3RhcnQgd2l0aCB0aGF0IHZlcnNpb24gYWZ0ZXIgcmVtb3ZpbmcgdGhlICclJworICAgICIiIgorICAgIGlmIChwciA9PSBwcmVmZXJyZWRfciBvciBwcmVmZXJyZWRfciA9PSBOb25lKToKKyAgICAgICAgaWYgKHBlID09IHByZWZlcnJlZF9lIG9yIHByZWZlcnJlZF9lID09IE5vbmUpOgorICAgICAgICAgICAgaWYgcHJlZmVycmVkX3YgPT0gcHY6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGlmIHByZWZlcnJlZF92ICE9IE5vbmUgYW5kIHByZWZlcnJlZF92LmVuZHN3aXRoKCclJykgYW5kIHB2LnN0YXJ0c3dpdGgocHJlZmVycmVkX3ZbOmxlbihwcmVmZXJyZWRfdiktMV0pOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBmaW5kUHJlZmVycmVkUHJvdmlkZXIocG4sIGNmZ0RhdGEsIGRhdGFDYWNoZSwgcGtnX3BuID0gTm9uZSwgaXRlbSA9IE5vbmUpOgorICAgICIiIgorICAgIEZpbmQgdGhlIGZpcnN0IHByb3ZpZGVyIGluIHBrZ19wbiB3aXRoIGEgUFJFRkVSUkVEX1ZFUlNJT04gc2V0LgorICAgICIiIgorCisgICAgcHJlZmVycmVkX2ZpbGUgPSBOb25lCisgICAgcHJlZmVycmVkX3ZlciA9IE5vbmUKKworICAgIGxvY2FsZGF0YSA9IGRhdGEuY3JlYXRlQ29weShjZmdEYXRhKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICIlczpwbi0lczolcyIgJSAoZGF0YS5nZXRWYXIoJ09WRVJSSURFUycsIGxvY2FsZGF0YSksIHBuLCBwbikpCisgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICBwcmVmZXJyZWRfdiA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BSRUZFUlJFRF9WRVJTSU9OJywgVHJ1ZSkKKyAgICBpZiBwcmVmZXJyZWRfdjoKKyAgICAgICAgbSA9IHJlLm1hdGNoKCcoXGQrOikqKC4qKShfLiopKicsIHByZWZlcnJlZF92KQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgaWYgbS5ncm91cCgxKToKKyAgICAgICAgICAgICAgICBwcmVmZXJyZWRfZSA9IG0uZ3JvdXAoMSlbOi0xXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmVmZXJyZWRfZSA9IE5vbmUKKyAgICAgICAgICAgIHByZWZlcnJlZF92ID0gbS5ncm91cCgyKQorICAgICAgICAgICAgaWYgbS5ncm91cCgzKToKKyAgICAgICAgICAgICAgICBwcmVmZXJyZWRfciA9IG0uZ3JvdXAoMylbMTpdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByZWZlcnJlZF9yID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJlZmVycmVkX2UgPSBOb25lCisgICAgICAgICAgICBwcmVmZXJyZWRfciA9IE5vbmUKKworICAgICAgICBmb3IgZmlsZV9zZXQgaW4gcGtnX3BuOgorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZV9zZXQ6CisgICAgICAgICAgICAgICAgcGUsIHB2LCBwciA9IGRhdGFDYWNoZS5wa2dfcGVwdnByW2ZdCisgICAgICAgICAgICAgICAgaWYgcHJlZmVycmVkVmVyc2lvbk1hdGNoKHBlLCBwdiwgcHIsIHByZWZlcnJlZF9lLCBwcmVmZXJyZWRfdiwgcHJlZmVycmVkX3IpOgorICAgICAgICAgICAgICAgICAgICBwcmVmZXJyZWRfZmlsZSA9IGYKKyAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkX3ZlciA9IChwZSwgcHYsIHByKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgcHJlZmVycmVkX2ZpbGU6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIHByZWZlcnJlZF9yOgorICAgICAgICAgICAgcHZfc3RyID0gJyVzLSVzJyAlIChwcmVmZXJyZWRfdiwgcHJlZmVycmVkX3IpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwdl9zdHIgPSBwcmVmZXJyZWRfdgorICAgICAgICBpZiBub3QgKHByZWZlcnJlZF9lIGlzIE5vbmUpOgorICAgICAgICAgICAgcHZfc3RyID0gJyVzOiVzJyAlIChwcmVmZXJyZWRfZSwgcHZfc3RyKQorICAgICAgICBpdGVtc3RyID0gIiIKKyAgICAgICAgaWYgaXRlbToKKyAgICAgICAgICAgIGl0ZW1zdHIgPSAiIChmb3IgaXRlbSAlcykiICUgaXRlbQorICAgICAgICBpZiBwcmVmZXJyZWRfZmlsZSBpcyBOb25lOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oInByZWZlcnJlZCB2ZXJzaW9uICVzIG9mICVzIG5vdCBhdmFpbGFibGUlcyIsIHB2X3N0ciwgcG4sIGl0ZW1zdHIpCisgICAgICAgICAgICBhdmFpbGFibGVfdmVycyA9IFtdCisgICAgICAgICAgICBmb3IgZmlsZV9zZXQgaW4gcGtnX3BuOgorICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVfc2V0OgorICAgICAgICAgICAgICAgICAgICBwZSwgcHYsIHByID0gZGF0YUNhY2hlLnBrZ19wZXB2cHJbZl0KKyAgICAgICAgICAgICAgICAgICAgdmVyX3N0ciA9IHB2CisgICAgICAgICAgICAgICAgICAgIGlmIHBlOgorICAgICAgICAgICAgICAgICAgICAgICAgdmVyX3N0ciA9ICIlczolcyIgJSAocGUsIHZlcl9zdHIpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCB2ZXJfc3RyIGluIGF2YWlsYWJsZV92ZXJzOgorICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlX3ZlcnMuYXBwZW5kKHZlcl9zdHIpCisgICAgICAgICAgICBpZiBhdmFpbGFibGVfdmVyczoKKyAgICAgICAgICAgICAgICBhdmFpbGFibGVfdmVycy5zb3J0KCkKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygidmVyc2lvbnMgb2YgJXMgYXZhaWxhYmxlOiAlcyIsIHBuLCAnICcuam9pbihhdmFpbGFibGVfdmVycykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgInNlbGVjdGluZyAlcyBhcyBQUkVGRVJSRURfVkVSU0lPTiAlcyBvZiBwYWNrYWdlICVzJXMiLCBwcmVmZXJyZWRfZmlsZSwgcHZfc3RyLCBwbiwgaXRlbXN0cikKKworICAgIHJldHVybiAocHJlZmVycmVkX3ZlciwgcHJlZmVycmVkX2ZpbGUpCisKKworZGVmIGZpbmRMYXRlc3RQcm92aWRlcihwbiwgY2ZnRGF0YSwgZGF0YUNhY2hlLCBmaWxlX3NldCk6CisgICAgIiIiCisgICAgUmV0dXJuIHRoZSBoaWdoZXN0IHZlcnNpb24gb2YgdGhlIHByb3ZpZGVycyBpbiBmaWxlX3NldC4KKyAgICBUYWtlIGRlZmF1bHQgcHJlZmVyZW5jZXMgaW50byBhY2NvdW50LgorICAgICIiIgorICAgIGxhdGVzdCA9IE5vbmUKKyAgICBsYXRlc3RfcCA9IDAKKyAgICBsYXRlc3RfZiA9IE5vbmUKKyAgICBmb3IgZmlsZV9uYW1lIGluIGZpbGVfc2V0OgorICAgICAgICBwZSwgcHYsIHByID0gZGF0YUNhY2hlLnBrZ19wZXB2cHJbZmlsZV9uYW1lXQorICAgICAgICBkcCA9IGRhdGFDYWNoZS5wa2dfZHBbZmlsZV9uYW1lXQorCisgICAgICAgIGlmIChsYXRlc3QgaXMgTm9uZSkgb3IgKChsYXRlc3RfcCA9PSBkcCkgYW5kICh1dGlscy52ZXJjbXAobGF0ZXN0LCAocGUsIHB2LCBwcikpIDwgMCkpIG9yIChkcCA+IGxhdGVzdF9wKToKKyAgICAgICAgICAgIGxhdGVzdCA9IChwZSwgcHYsIHByKQorICAgICAgICAgICAgbGF0ZXN0X2YgPSBmaWxlX25hbWUKKyAgICAgICAgICAgIGxhdGVzdF9wID0gZHAKKworICAgIHJldHVybiAobGF0ZXN0LCBsYXRlc3RfZikKKworCitkZWYgZmluZEJlc3RQcm92aWRlcihwbiwgY2ZnRGF0YSwgZGF0YUNhY2hlLCBwa2dfcG4gPSBOb25lLCBpdGVtID0gTm9uZSk6CisgICAgIiIiCisgICAgSWYgdGhlcmUgaXMgYSBQUkVGRVJSRURfVkVSU0lPTiwgZmluZCB0aGUgaGlnaGVzdC1wcmlvcml0eSBiYmZpbGUKKyAgICBwcm92aWRpbmcgdGhhdCB2ZXJzaW9uLiAgSWYgbm90LCBmaW5kIHRoZSBsYXRlc3QgdmVyc2lvbiBwcm92aWRlZCBieQorICAgIGFuIGJiZmlsZSBpbiB0aGUgaGlnaGVzdC1wcmlvcml0eSBzZXQuCisgICAgIiIiCisKKyAgICBzb3J0cGtnX3BuID0gc29ydFByaW9yaXRpZXMocG4sIGRhdGFDYWNoZSwgcGtnX3BuKQorICAgICMgRmluZCB0aGUgaGlnaGVzdCBwcmlvcml0eSBwcm92aWRlciB3aXRoIGEgUFJFRkVSUkVEX1ZFUlNJT04gc2V0CisgICAgKHByZWZlcnJlZF92ZXIsIHByZWZlcnJlZF9maWxlKSA9IGZpbmRQcmVmZXJyZWRQcm92aWRlcihwbiwgY2ZnRGF0YSwgZGF0YUNhY2hlLCBzb3J0cGtnX3BuLCBpdGVtKQorICAgICMgRmluZCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcHJvdmlkZXIKKyAgICAobGF0ZXN0LCBsYXRlc3RfZikgPSBmaW5kTGF0ZXN0UHJvdmlkZXIocG4sIGNmZ0RhdGEsIGRhdGFDYWNoZSwgc29ydHBrZ19wblswXSkKKworICAgIGlmIHByZWZlcnJlZF9maWxlIGlzIE5vbmU6CisgICAgICAgIHByZWZlcnJlZF9maWxlID0gbGF0ZXN0X2YKKyAgICAgICAgcHJlZmVycmVkX3ZlciA9IGxhdGVzdAorCisgICAgcmV0dXJuIChsYXRlc3QsIGxhdGVzdF9mLCBwcmVmZXJyZWRfdmVyLCBwcmVmZXJyZWRfZmlsZSkKKworCitkZWYgX2ZpbHRlclByb3ZpZGVycyhwcm92aWRlcnMsIGl0ZW0sIGNmZ0RhdGEsIGRhdGFDYWNoZSk6CisgICAgIiIiCisgICAgVGFrZSBhIGxpc3Qgb2YgcHJvdmlkZXJzIGFuZCBmaWx0ZXIvcmVvcmRlciBhY2NvcmRpbmcgdG8gdGhlCisgICAgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCBwcmV2aW91cyBidWlsZCByZXN1bHRzCisgICAgIiIiCisgICAgZWxpZ2libGUgPSBbXQorICAgIHByZWZlcnJlZF92ZXJzaW9ucyA9IHt9CisgICAgc29ydHBrZ19wbiA9IHt9CisKKyAgICAjIFRoZSBvcmRlciBvZiBwcm92aWRlcnMgZGVwZW5kcyBvbiB0aGUgb3JkZXIgb2YgdGhlIGZpbGVzIG9uIHRoZSBkaXNrCisgICAgIyB1cCB0byBoZXJlLiBTb3J0IHBrZ19wbiB0byBtYWtlIGRlcGVuZGVuY3kgaXNzdWVzIHJlcHJvZHVjaWJsZSByYXRoZXIKKyAgICAjIHRoYW4gZWZmZWN0aXZlbHkgcmFuZG9tLgorICAgIHByb3ZpZGVycy5zb3J0KCkKKworICAgICMgQ29sbGF0ZSBwcm92aWRlcnMgYnkgUE4KKyAgICBwa2dfcG4gPSB7fQorICAgIGZvciBwIGluIHByb3ZpZGVyczoKKyAgICAgICAgcG4gPSBkYXRhQ2FjaGUucGtnX2ZuW3BdCisgICAgICAgIGlmIHBuIG5vdCBpbiBwa2dfcG46CisgICAgICAgICAgICBwa2dfcG5bcG5dID0gW10KKyAgICAgICAgcGtnX3BuW3BuXS5hcHBlbmQocCkKKworICAgIGxvZ2dlci5kZWJ1ZygxLCAicHJvdmlkZXJzIGZvciAlcyBhcmU6ICVzIiwgaXRlbSwgcGtnX3BuLmtleXMoKSkKKworICAgICMgRmlyc3QgYWRkIFBSRUZFUlJFRF9WRVJTSU9OUworICAgIGZvciBwbiBpbiBwa2dfcG46CisgICAgICAgIHNvcnRwa2dfcG5bcG5dID0gc29ydFByaW9yaXRpZXMocG4sIGRhdGFDYWNoZSwgcGtnX3BuKQorICAgICAgICBwcmVmZXJyZWRfdmVyc2lvbnNbcG5dID0gZmluZFByZWZlcnJlZFByb3ZpZGVyKHBuLCBjZmdEYXRhLCBkYXRhQ2FjaGUsIHNvcnRwa2dfcG5bcG5dLCBpdGVtKQorICAgICAgICBpZiBwcmVmZXJyZWRfdmVyc2lvbnNbcG5dWzFdOgorICAgICAgICAgICAgZWxpZ2libGUuYXBwZW5kKHByZWZlcnJlZF92ZXJzaW9uc1twbl1bMV0pCisKKyAgICAjIE5vdyBhZGQgbGF0ZXN0IHZlcnNpb25zCisgICAgZm9yIHBuIGluIHNvcnRwa2dfcG46CisgICAgICAgIGlmIHBuIGluIHByZWZlcnJlZF92ZXJzaW9ucyBhbmQgcHJlZmVycmVkX3ZlcnNpb25zW3BuXVsxXToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHByZWZlcnJlZF92ZXJzaW9uc1twbl0gPSBmaW5kTGF0ZXN0UHJvdmlkZXIocG4sIGNmZ0RhdGEsIGRhdGFDYWNoZSwgc29ydHBrZ19wbltwbl1bMF0pCisgICAgICAgIGVsaWdpYmxlLmFwcGVuZChwcmVmZXJyZWRfdmVyc2lvbnNbcG5dWzFdKQorCisgICAgaWYgbGVuKGVsaWdpYmxlKSA9PSAwOgorICAgICAgICBsb2dnZXIuZXJyb3IoIm5vIGVsaWdpYmxlIHByb3ZpZGVycyBmb3IgJXMiLCBpdGVtKQorICAgICAgICByZXR1cm4gMAorCisgICAgIyBJZiBwbiA9PSBpdGVtLCBnaXZlIGl0IGEgc2xpZ2h0IGRlZmF1bHQgcHJlZmVyZW5jZQorICAgICMgVGhpcyBtZWFucyBQUkVGRVJSRURfUFJPVklERVJfZm9vYmFyIGRlZmF1bHRzIHRvIGZvb2JhciBpZiBhdmFpbGFibGUKKyAgICBmb3IgcCBpbiBwcm92aWRlcnM6CisgICAgICAgIHBuID0gZGF0YUNhY2hlLnBrZ19mbltwXQorICAgICAgICBpZiBwbiAhPSBpdGVtOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgKG5ld3ZlcnMsIGZuKSA9IHByZWZlcnJlZF92ZXJzaW9uc1twbl0KKyAgICAgICAgaWYgbm90IGZuIGluIGVsaWdpYmxlOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZWxpZ2libGUucmVtb3ZlKGZuKQorICAgICAgICBlbGlnaWJsZSA9IFtmbl0gKyBlbGlnaWJsZQorCisgICAgcmV0dXJuIGVsaWdpYmxlCisKKworZGVmIGZpbHRlclByb3ZpZGVycyhwcm92aWRlcnMsIGl0ZW0sIGNmZ0RhdGEsIGRhdGFDYWNoZSk6CisgICAgIiIiCisgICAgVGFrZSBhIGxpc3Qgb2YgcHJvdmlkZXJzIGFuZCBmaWx0ZXIvcmVvcmRlciBhY2NvcmRpbmcgdG8gdGhlCisgICAgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCBwcmV2aW91cyBidWlsZCByZXN1bHRzCisgICAgVGFrZXMgYSAibm9ybWFsIiB0YXJnZXQgaXRlbQorICAgICIiIgorCisgICAgZWxpZ2libGUgPSBfZmlsdGVyUHJvdmlkZXJzKHByb3ZpZGVycywgaXRlbSwgY2ZnRGF0YSwgZGF0YUNhY2hlKQorCisgICAgcHJlZmVydmFyID0gY2ZnRGF0YS5nZXRWYXIoJ1BSRUZFUlJFRF9QUk9WSURFUl8lcycgJSBpdGVtLCBUcnVlKQorICAgIGlmIHByZWZlcnZhcjoKKyAgICAgICAgZGF0YUNhY2hlLnByZWZlcnJlZFtpdGVtXSA9IHByZWZlcnZhcgorCisgICAgZm91bmRVbmlxdWUgPSBGYWxzZQorICAgIGlmIGl0ZW0gaW4gZGF0YUNhY2hlLnByZWZlcnJlZDoKKyAgICAgICAgZm9yIHAgaW4gZWxpZ2libGU6CisgICAgICAgICAgICBwbiA9IGRhdGFDYWNoZS5wa2dfZm5bcF0KKyAgICAgICAgICAgIGlmIGRhdGFDYWNoZS5wcmVmZXJyZWRbaXRlbV0gPT0gcG46CisgICAgICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoInNlbGVjdGluZyAlcyB0byBzYXRpc2Z5ICVzIGR1ZSB0byBQUkVGRVJSRURfUFJPVklERVJTIiwgcG4sIGl0ZW0pCisgICAgICAgICAgICAgICAgZWxpZ2libGUucmVtb3ZlKHApCisgICAgICAgICAgICAgICAgZWxpZ2libGUgPSBbcF0gKyBlbGlnaWJsZQorICAgICAgICAgICAgICAgIGZvdW5kVW5pcXVlID0gVHJ1ZQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBsb2dnZXIuZGVidWcoMSwgInNvcnRlZCBwcm92aWRlcnMgZm9yICVzIGFyZTogJXMiLCBpdGVtLCBlbGlnaWJsZSkKKworICAgIHJldHVybiBlbGlnaWJsZSwgZm91bmRVbmlxdWUKKworZGVmIGZpbHRlclByb3ZpZGVyc1J1blRpbWUocHJvdmlkZXJzLCBpdGVtLCBjZmdEYXRhLCBkYXRhQ2FjaGUpOgorICAgICIiIgorICAgIFRha2UgYSBsaXN0IG9mIHByb3ZpZGVycyBhbmQgZmlsdGVyL3Jlb3JkZXIgYWNjb3JkaW5nIHRvIHRoZQorICAgIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgcHJldmlvdXMgYnVpbGQgcmVzdWx0cworICAgIFRha2VzIGEgInJ1bnRpbWUiIHRhcmdldCBpdGVtCisgICAgIiIiCisKKyAgICBlbGlnaWJsZSA9IF9maWx0ZXJQcm92aWRlcnMocHJvdmlkZXJzLCBpdGVtLCBjZmdEYXRhLCBkYXRhQ2FjaGUpCisKKyAgICAjIFNob3VsZCB1c2UgZGF0YUNhY2hlLnByZWZlcnJlZCBoZXJlPworICAgIHByZWZlcnJlZCA9IFtdCisgICAgcHJlZmVycmVkX3ZhcnMgPSBbXQorICAgIHBucyA9IHt9CisgICAgZm9yIHAgaW4gZWxpZ2libGU6CisgICAgICAgIHBuc1tkYXRhQ2FjaGUucGtnX2ZuW3BdXSA9IHAKKyAgICBmb3IgcCBpbiBlbGlnaWJsZToKKyAgICAgICAgcG4gPSBkYXRhQ2FjaGUucGtnX2ZuW3BdCisgICAgICAgIHByb3ZpZGVzID0gZGF0YUNhY2hlLnBuX3Byb3ZpZGVzW3BuXQorICAgICAgICBmb3IgcHJvdmlkZSBpbiBwcm92aWRlczoKKyAgICAgICAgICAgIHByZWZlcnZhciA9IGNmZ0RhdGEuZ2V0VmFyKCdQUkVGRVJSRURfUFJPVklERVJfJXMnICUgcHJvdmlkZSwgVHJ1ZSkKKyAgICAgICAgICAgICNsb2dnZXIuZGVidWcoMSwgImNoZWNraW5nIFBSRUZFUlJFRF9QUk9WSURFUl8lcyAodmFsdWUgJXMpIGFnYWluc3QgJXMiLCBwcm92aWRlLCBwcmVmZXJ2YXIsIHBucy5rZXlzKCkpCisgICAgICAgICAgICBpZiBwcmVmZXJ2YXIgaW4gcG5zIGFuZCBwbnNbcHJlZmVydmFyXSBub3QgaW4gcHJlZmVycmVkOgorICAgICAgICAgICAgICAgIHZhciA9ICJQUkVGRVJSRURfUFJPVklERVJfJXMgPSAlcyIgJSAocHJvdmlkZSwgcHJlZmVydmFyKQorICAgICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKCJzZWxlY3RpbmcgJXMgdG8gc2F0aXNmeSBydW50aW1lICVzIGR1ZSB0byAlcyIsIHByZWZlcnZhciwgaXRlbSwgdmFyKQorICAgICAgICAgICAgICAgIHByZWZlcnJlZF92YXJzLmFwcGVuZCh2YXIpCisgICAgICAgICAgICAgICAgcHJlZiA9IHBuc1twcmVmZXJ2YXJdCisgICAgICAgICAgICAgICAgZWxpZ2libGUucmVtb3ZlKHByZWYpCisgICAgICAgICAgICAgICAgZWxpZ2libGUgPSBbcHJlZl0gKyBlbGlnaWJsZQorICAgICAgICAgICAgICAgIHByZWZlcnJlZC5hcHBlbmQocHJlZikKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgbnVtYmVyUHJlZmVycmVkID0gbGVuKHByZWZlcnJlZCkKKworICAgIGlmIG51bWJlclByZWZlcnJlZCA+IDE6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVHJ5aW5nIHRvIHJlc29sdmUgcnVudGltZSBkZXBlbmRlbmN5ICVzIHJlc3VsdGVkIGluIGNvbmZsaWN0aW5nIFBSRUZFUlJFRF9QUk9WSURFUiBlbnRyaWVzIGJlaW5nIGZvdW5kLlxuVGhlIHByb3ZpZGVycyBmb3VuZCB3ZXJlOiAlc1xuVGhlIFBSRUZFUlJFRF9QUk9WSURFUiBlbnRyaWVzIHJlc3VsdGluZyBpbiB0aGlzIGNvbmZsaWN0IHdlcmU6ICVzIiwgaXRlbSwgcHJlZmVycmVkLCBwcmVmZXJyZWRfdmFycykKKworICAgIGxvZ2dlci5kZWJ1ZygxLCAic29ydGVkIHJ1bnRpbWUgcHJvdmlkZXJzIGZvciAlcyBhcmU6ICVzIiwgaXRlbSwgZWxpZ2libGUpCisKKyAgICByZXR1cm4gZWxpZ2libGUsIG51bWJlclByZWZlcnJlZAorCityZWdleHBfY2FjaGUgPSB7fQorCitkZWYgZ2V0UnVudGltZVByb3ZpZGVycyhkYXRhQ2FjaGUsIHJkZXBlbmQpOgorICAgICIiIgorICAgIFJldHVybiBhbnkgcHJvdmlkZXJzIG9mIHJ1bnRpbWUgZGVwZW5kZW5jeQorICAgICIiIgorICAgIHJwcm92aWRlcnMgPSBbXQorCisgICAgaWYgcmRlcGVuZCBpbiBkYXRhQ2FjaGUucnByb3ZpZGVyczoKKyAgICAgICAgcnByb3ZpZGVycyArPSBkYXRhQ2FjaGUucnByb3ZpZGVyc1tyZGVwZW5kXQorCisgICAgaWYgcmRlcGVuZCBpbiBkYXRhQ2FjaGUucGFja2FnZXM6CisgICAgICAgIHJwcm92aWRlcnMgKz0gZGF0YUNhY2hlLnBhY2thZ2VzW3JkZXBlbmRdCisKKyAgICBpZiBycHJvdmlkZXJzOgorICAgICAgICByZXR1cm4gcnByb3ZpZGVycworCisgICAgIyBPbmx5IHNlYXJjaCBkeW5hbWljIHBhY2thZ2VzIGlmIHdlIGNhbid0IGZpbmQgYW55dGhpbmcgaW4gb3RoZXIgdmFyaWFibGVzCisgICAgZm9yIHBhdHRlcm4gaW4gZGF0YUNhY2hlLnBhY2thZ2VzX2R5bmFtaWM6CisgICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoJysnLCAiXCsiKQorICAgICAgICBpZiBwYXR0ZXJuIGluIHJlZ2V4cF9jYWNoZToKKyAgICAgICAgICAgIHJlZ2V4cCA9IHJlZ2V4cF9jYWNoZVtwYXR0ZXJuXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlZ2V4cCA9IHJlLmNvbXBpbGUocGF0dGVybikKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkVycm9yIHBhcnNpbmcgcmVndWxhciBleHByZXNzaW9uICclcyciLCBwYXR0ZXJuKQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICByZWdleHBfY2FjaGVbcGF0dGVybl0gPSByZWdleHAKKyAgICAgICAgaWYgcmVnZXhwLm1hdGNoKHJkZXBlbmQpOgorICAgICAgICAgICAgcnByb3ZpZGVycyArPSBkYXRhQ2FjaGUucGFja2FnZXNfZHluYW1pY1twYXR0ZXJuXQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJBc3N1bWluZyAlcyBpcyBhIGR5bmFtaWMgcGFja2FnZSwgYnV0IGl0IG1heSBub3QgZXhpc3QiICUgcmRlcGVuZCkKKworICAgIHJldHVybiBycHJvdmlkZXJzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL2J1aWx0aW4ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvYnVpbHRpbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzQ4ZTRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL2J1aWx0aW4ucHkKQEAgLTAsMCArMSw3MTAgQEAKKyMgYnVpbHRpbi5weSAtIGJ1aWx0aW5zIGFuZCB1dGlsaXRpZXMgZGVmaW5pdGlvbnMgZm9yIHB5c2guCisjCisjIENvcHlyaWdodCAyMDA3IFBhdHJpY2sgTWV6YXJkCisjCisjIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMKKyMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKworIiIiQnVpbHRpbiBhbmQgaW50ZXJuYWwgdXRpbGl0aWVzIGltcGxlbWVudGF0aW9ucy4KKworLSBCZXdhcmUgbm90IHRvIHVzZSBweXRob24gaW50ZXJwcmV0ZXIgZW52aXJvbm1lbnQgYXMgaWYgaXQgd2VyZSB0aGUgc2hlbGwKK2Vudmlyb25tZW50LiBGb3IgaW5zdGFuY2UsIGNvbW1hbmRzIHdvcmtpbmcgZGlyZWN0b3J5IG11c3QgYmUgZXhwbGljaXRlbHkgaGFuZGxlZAordGhyb3VnaCBlbnZbJ1BXRCddIGluc3RlYWQgb2YgcmVseWluZyBvbiBweXRob24gd29ya2luZyBkaXJlY3RvcnkuCisiIiIKK2ltcG9ydCBlcnJubworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCisKK2RlZiBoYXNfc3VicHJvY2Vzc19idWcoKToKKyAgICByZXR1cm4gZ2V0YXR0cihzdWJwcm9jZXNzLCAnbGlzdDJjbWRsaW5lJykgYW5kIFwKKyAgICAgICAoICAgIHN1YnByb2Nlc3MubGlzdDJjbWRsaW5lKFsnJ10pID09ICcnIG9yIFwKKyAgICAgICAgICAgIHN1YnByb2Nlc3MubGlzdDJjbWRsaW5lKFsnZm9vfGJhciddKSA9PSAnZm9vfGJhcicpCisgICAgICAgICAgICAKKyMgRGV0ZWN0IHB5dGhvbiBidWcgMTYzNDM0MzogInN1YnByb2Nlc3Mgc3dhbGxvd3MgZW1wdHkgYXJndW1lbnRzIHVuZGVyIHdpbjMyIgorIyA8aHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyL2luZGV4LnBocD9mdW5jPWRldGFpbCZhaWQ9MTYzNDM0MyZncm91cF9pZD01NDcwJmF0aWQ9MTA1NDcwPgorIyBBbHNvIGRldGVjdDogIlsgMTcxMDgwMiBdIHN1YnByb2Nlc3MgbXVzdCBlc2NhcGUgcmVkaXJlY3Rpb24gY2hhcmFjdGVycyB1bmRlciB3aW4zMiIKKyMgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci9pbmRleC5waHA/ZnVuYz1kZXRhaWwmYWlkPTE3MTA4MDImZ3JvdXBfaWQ9NTQ3MCZhdGlkPTEwNTQ3MD4KK2lmIGhhc19zdWJwcm9jZXNzX2J1ZygpOgorICAgIGltcG9ydCBzdWJwcm9jZXNzX2ZpeAorICAgIHN1YnByb2Nlc3MubGlzdDJjbWRsaW5lID0gc3VicHJvY2Vzc19maXgubGlzdDJjbWRsaW5lCisKK2Zyb20gc2hlcnJvcnMgaW1wb3J0ICoKKworY2xhc3MgTm9uRXhpdGluZ1BhcnNlcihvcHRwYXJzZS5PcHRpb25QYXJzZXIpOgorICAgICIiIk9wdGlvblBhcnNlciBkZWZhdWx0IGJlaGF2aW91ciB1cG9uIGVycm9yIGlzIHRvIHByaW50IHRoZSBlcnJvciBtZXNzYWdlIGFuZAorICAgIGV4aXQuIFJhaXNlIGEgdXRpbGl0eSBlcnJvciBpbnN0ZWFkLgorICAgICIiIgorICAgIGRlZiBlcnJvcihzZWxmLCBtc2cpOgorICAgICAgICByYWlzZSBVdGlsaXR5RXJyb3IobXNnKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIHNldCBzcGVjaWFsIGJ1aWx0aW4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKK09QVF9TRVQgPSBOb25FeGl0aW5nUGFyc2VyKHVzYWdlPSJzZXQgLSBzZXQgb3IgdW5zZXQgb3B0aW9ucyBhbmQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIikKK09QVF9TRVQuYWRkX29wdGlvbiggJy1mJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0naGFzX2YnLCBkZWZhdWx0PUZhbHNlLAorICAgIGhlbHA9J1RoZSBzaGVsbCBzaGFsbCBkaXNhYmxlIHBhdGhuYW1lIGV4cGFuc2lvbi4nKQorT1BUX1NFVC5hZGRfb3B0aW9uKCctZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2hhc19lJywgZGVmYXVsdD1GYWxzZSwKKyAgICBoZWxwPSIiIldoZW4gdGhpcyBvcHRpb24gaXMgb24sIGlmIGEgc2ltcGxlIGNvbW1hbmQgZmFpbHMgZm9yIGFueSBvZiB0aGUgXAorICAgIHJlYXNvbnMgbGlzdGVkIGluIENvbnNlcXVlbmNlcyBvZiBTaGVsbCBFcnJvcnMgb3IgcmV0dXJucyBhbiBleGl0IHN0YXR1cyBcCisgICAgdmFsdWUgPjAsIGFuZCBpcyBub3QgcGFydCBvZiB0aGUgY29tcG91bmQgbGlzdCBmb2xsb3dpbmcgYSB3aGlsZSwgdW50aWwsIFwKKyAgICBvciBpZiBrZXl3b3JkLCBhbmQgaXMgbm90IGEgcGFydCBvZiBhbiBBTkQgb3IgT1IgbGlzdCwgYW5kIGlzIG5vdCBhIFwKKyAgICBwaXBlbGluZSBwcmVjZWRlZCBieSB0aGUgISByZXNlcnZlZCB3b3JkLCB0aGVuIHRoZSBzaGVsbCBzaGFsbCBpbW1lZGlhdGVseSBcCisgICAgZXhpdC4iIiIpCitPUFRfU0VULmFkZF9vcHRpb24oJy14JywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0naGFzX3gnLCBkZWZhdWx0PUZhbHNlLAorICAgIGhlbHA9IiIiVGhlIHNoZWxsIHNoYWxsIHdyaXRlIHRvIHN0YW5kYXJkIGVycm9yIGEgdHJhY2UgZm9yIGVhY2ggY29tbWFuZCBcCisgICAgYWZ0ZXIgaXQgZXhwYW5kcyB0aGUgY29tbWFuZCBhbmQgYmVmb3JlIGl0IGV4ZWN1dGVzIGl0LiBJdCBpcyB1bnNwZWNpZmllZCBcCisgICAgd2hldGhlciB0aGUgY29tbWFuZCB0aGF0IHR1cm5zIHRyYWNpbmcgb2ZmIGlzIHRyYWNlZC4iIiIpCisKK2RlZiBidWlsdGluX3NldChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorCisgICAgb3B0aW9uLCBhcmdzID0gT1BUX1NFVC5wYXJzZV9hcmdzKGFyZ3MpCisgICAgZW52ID0gaW50ZXJwLmdldF9lbnYoKQorICAgIAorICAgIGlmIG9wdGlvbi5oYXNfZjoKKyAgICAgICAgZW52LnNldF9vcHQoJy1mJykKKyAgICBpZiBvcHRpb24uaGFzX2U6CisgICAgICAgIGVudi5zZXRfb3B0KCctZScpCisgICAgaWYgb3B0aW9uLmhhc194OgorICAgICAgICBlbnYuc2V0X29wdCgnLXgnKQorICAgIHJldHVybiAwCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIHNoaWZ0IHNwZWNpYWwgYnVpbHRpbgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorZGVmIGJ1aWx0aW5fc2hpZnQobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICAgICAgCisgICAgcGFyYW1zID0gaW50ZXJwLmdldF9lbnYoKS5nZXRfcG9zaXRpb25hbF9hcmdzKCkKKyAgICBpZiBhcmdzOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBuID0gaW50KGFyZ3NbMF0pCisgICAgICAgICAgICBpZiBuID4gbGVuKHBhcmFtcyk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICBlbHNlOgorICAgICAgICBuID0gMQorICAgICAgICAKKyAgICBwYXJhbXNbOm5dID0gW10KKyAgICBpbnRlcnAuZ2V0X2VudigpLnNldF9wb3NpdGlvbmFsX2FyZ3MocGFyYW1zKQorICAgIHJldHVybiAwCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIGV4cG9ydCBzcGVjaWFsIGJ1aWx0aW4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKK09QVF9FWFBPUlQgPSBOb25FeGl0aW5nUGFyc2VyKHVzYWdlPSJzZXQgLSBzZXQgb3IgdW5zZXQgb3B0aW9ucyBhbmQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIikKK09QVF9FWFBPUlQuYWRkX29wdGlvbignLXAnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdoYXNfcCcsIGRlZmF1bHQ9RmFsc2UpCisKK2RlZiBidWlsdGluX2V4cG9ydChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgICAgICAKKyAgICBvcHRpb24sIGFyZ3MgPSBPUFRfRVhQT1JULnBhcnNlX2FyZ3MoYXJncykKKyAgICBpZiBvcHRpb24uaGFzX3A6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorICAgIAorICAgIGZvciBhcmcgaW4gYXJnczoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmFtZSwgdmFsdWUgPSBhcmcuc3BsaXQoJz0nLCAxKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIG5hbWUsIHZhbHVlID0gYXJnLCBOb25lCisgICAgICAgIGVudiA9IGludGVycC5nZXRfZW52KCkuZXhwb3J0KG5hbWUsIHZhbHVlKQorICAgIAorICAgIHJldHVybiAwCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIHJldHVybiBzcGVjaWFsIGJ1aWx0aW4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKK2RlZiBidWlsdGluX3JldHVybihuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgIHJlcyA9IDAKKyAgICBpZiBhcmdzOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXMgPSBpbnQoYXJnc1swXSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICByZXMgPSAwCisgICAgICAgIGlmIG5vdCAwPD1yZXM8PTI1NToKKyAgICAgICAgICAgIHJlcyA9IDAKKyAgICAgICAgICAgIAorICAgICMgQlVHOiBzaG91bGQgYmUgbGFzdCBleGVjdXRlZCBjb21tYW5kIGV4aXQgY29kZSAgICAgICAgCisgICAgcmFpc2UgUmV0dXJuU2lnbmFsKHJlcykKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyB0cmFwIHNwZWNpYWwgYnVpbHRpbgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorZGVmIGJ1aWx0aW5fdHJhcChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgIGlmIGxlbihhcmdzKSA8IDI6CisgICAgICAgIHN0ZGVyci53cml0ZSgndHJhcDogdXNhZ2U6IHRyYXAgW1thcmddIHNpZ25hbF9zcGVjIC4uLl1cbicpCisgICAgICAgIHJldHVybiAyCisKKyAgICBhY3Rpb24gPSBhcmdzWzBdCisgICAgZm9yIHNpZyBpbiBhcmdzWzE6XToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZW52LnRyYXBzW3NpZ10gPSBhY3Rpb24KKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgc3RkZXJyLndyaXRlKCd0cmFwOiAlc1xuJyAlIHN0cihlKSkKKyAgICByZXR1cm4gMAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIHVuc2V0IHNwZWNpYWwgYnVpbHRpbgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK09QVF9VTlNFVCA9IE5vbkV4aXRpbmdQYXJzZXIoInVuc2V0IC0gdW5zZXQgdmFsdWVzIGFuZCBhdHRyaWJ1dGVzIG9mIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zIikKK09QVF9VTlNFVC5hZGRfb3B0aW9uKCAnLWYnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdoYXNfZicsIGRlZmF1bHQ9RmFsc2UpCitPUFRfVU5TRVQuYWRkX29wdGlvbiggJy12JywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0naGFzX3YnLCBkZWZhdWx0PUZhbHNlKQorCitkZWYgYnVpbHRpbl91bnNldChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgICAgICAKKyAgICBvcHRpb24sIGFyZ3MgPSBPUFRfVU5TRVQucGFyc2VfYXJncyhhcmdzKQorICAgIAorICAgIHN0YXR1cyA9IDAKKyAgICBlbnYgPSBpbnRlcnAuZ2V0X2VudigpCisgICAgZm9yIGFyZyBpbiBhcmdzOiAgICAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgb3B0aW9uLmhhc19mOgorICAgICAgICAgICAgICAgIGVudi5yZW1vdmVfZnVuY3Rpb24oYXJnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkZWwgZW52W2FyZ10KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgVmFyQXNzaWdubWVudEVycm9yOgorICAgICAgICAgICAgc3RhdHVzID0gMQorICAgICAgICAgICAgCisgICAgcmV0dXJuIHN0YXR1cworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIHdhaXQgc3BlY2lhbCBidWlsdGluCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCitkZWYgYnVpbHRpbl93YWl0KG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisKKyAgICByZXR1cm4gaW50ZXJwLndhaXQoW2ludChhcmcpIGZvciBhcmcgaW4gYXJnc10pCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgY2F0IHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkZWYgdXRpbGl0eV9jYXQobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKworICAgIGlmIG5vdCBhcmdzOgorICAgICAgICBhcmdzID0gWyctJ10KKworICAgIHN0YXR1cyA9IDAKKyAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAgICAgIGlmIGFyZyA9PSAnLSc6CisgICAgICAgICAgICBkYXRhID0gc3RkaW4ucmVhZCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGVudlsnUFdEJ10sIGFyZykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmID0gZmlsZShwYXRoLCAncmInKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIHN0YXR1cyA9IDEKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBzdGRvdXQud3JpdGUoZGF0YSkKKyAgICAgICAgc3Rkb3V0LmZsdXNoKCkKKyAgICByZXR1cm4gc3RhdHVzCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIGNkIHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKK09QVF9DRCA9IE5vbkV4aXRpbmdQYXJzZXIoImNkIC0gY2hhbmdlIHRoZSB3b3JraW5nIGRpcmVjdG9yeSIpCisKK2RlZiB1dGlsaXR5X2NkKG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisKKyAgICBvcHRpb24sIGFyZ3MgPSBPUFRfQ0QucGFyc2VfYXJncyhhcmdzKQorICAgIGVudiA9IGludGVycC5nZXRfZW52KCkKKyAgICAKKyAgICBkaXJlY3RvcnkgPSBOb25lCisgICAgcHJpbnRkaXIgPSBGYWxzZQorICAgIGlmIG5vdCBhcmdzOgorICAgICAgICBob21lID0gZW52LmdldCgnSE9NRScpCisgICAgICAgIGlmIGhvbWU6CisgICAgICAgICAgICAjIFVuc3BlY2lmaWVkLCBkbyBub3RoaW5nCisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGlyZWN0b3J5ID0gaG9tZQorICAgIGVsaWYgbGVuKGFyZ3MpPT0xOgorICAgICAgICBkaXJlY3RvcnkgPSBhcmdzWzBdCisgICAgICAgIGlmIGRpcmVjdG9yeT09Jy0nOgorICAgICAgICAgICAgaWYgJ09MRFBXRCcgbm90IGluIGVudjoKKyAgICAgICAgICAgICAgICByYWlzZSBVdGlsaXR5RXJyb3IoIk9MRFBXRCBub3Qgc2V0IikKKyAgICAgICAgICAgIHByaW50ZGlyID0gVHJ1ZQorICAgICAgICAgICAgZGlyZWN0b3J5ID0gZW52WydPTERQV0QnXQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFV0aWxpdHlFcnJvcigidG9vIG1hbnkgYXJndW1lbnRzIikKKyAgICAgICAgICAgIAorICAgIGN1cnBhdGggPSBOb25lCisgICAgIyBBYnNvbHV0ZSBkaXJlY3RvcmllcyB3aWxsIGJlIGhhbmRsZWQgY29ycmVjdGx5IGJ5IHRoZSBvcy5wYXRoLmpvaW4gY2FsbC4KKyAgICBpZiBub3QgZGlyZWN0b3J5LnN0YXJ0c3dpdGgoJy4nKSBhbmQgbm90IGRpcmVjdG9yeS5zdGFydHN3aXRoKCcuLicpOgorICAgICAgICBjZHBhdGhzID0gZW52LmdldCgnQ0RQQVRIJywgJy4nKS5zcGxpdCgnOycpCisgICAgICAgIGZvciBjZHBhdGggaW4gY2RwYXRoczoKKyAgICAgICAgICAgIHAgPSBvcy5wYXRoLmpvaW4oY2RwYXRoLCBkaXJlY3RvcnkpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHApOgorICAgICAgICAgICAgICAgIGN1cnBhdGggPSBwCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAKKyAgICBpZiBjdXJwYXRoIGlzIE5vbmU6CisgICAgICAgIGN1cnBhdGggPSBkaXJlY3RvcnkKKyAgICBjdXJwYXRoID0gb3MucGF0aC5qb2luKGVudlsnUFdEJ10sIGRpcmVjdG9yeSkKKworICAgIGVudlsnT0xEUFdEJ10gPSBlbnZbJ1BXRCddCisgICAgZW52WydQV0QnXSA9IGN1cnBhdGgKKyAgICBpZiBwcmludGRpcjoKKyAgICAgICAgc3Rkb3V0LndyaXRlKCclc1xuJyAlIGN1cnBhdGgpCisgICAgcmV0dXJuIDAKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBjb2xvbiB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCitkZWYgdXRpbGl0eV9jb2xvbihuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgIHJldHVybiAwCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIGVjaG8gdXRpbGl0eQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorZGVmIHV0aWxpdHlfZWNobyhuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgICAgICAKKyAgICAjIEVjaG8gb25seSB0YWtlcyBhcmd1bWVudHMsIG5vIG9wdGlvbnMuIFVzZSBwcmludGYgaWYgeW91IG5lZWQgZmFuY3kgc3R1ZmYuCisgICAgb3V0cHV0ID0gJyAnLmpvaW4oYXJncykgKyAnXG4nCisgICAgc3Rkb3V0LndyaXRlKG91dHB1dCkKKyAgICBzdGRvdXQuZmx1c2goKQorICAgIHJldHVybiAwCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIGVncmVwIHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGVncmVwIGlzIHVzdWFsbHkgYSBzaGVsbCBzY3JpcHQuCisjIFVuZm9ydHVuYXRlbHksIHB5c2ggZG9lcyBub3Qgc3VwcG9ydCBzaGVsbCBzY3JpcHRzICp3aXRoIGFyZ3VtZW50cyogcmlnaHQgbm93LAorIyBzbyB0aGUgcmVkaXJlY3Rpb24gaXMgaW1wbGVtZW50ZWQgaGVyZSwgYXNzdW1pbmcgZ3JlcCBpcyBhdmFpbGFibGUuCitkZWYgdXRpbGl0eV9lZ3JlcChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgICAgICAKKyAgICByZXR1cm4gcnVuX2NvbW1hbmQoJ2dyZXAnLCBbJy1FJ10gKyBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgCisgICAgICAgIHN0ZGVyciwgZGVidWdmbGFncykKKyAgICAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgZW52IHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKK2RlZiB1dGlsaXR5X2VudihuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgIAorICAgIGlmIGFyZ3MgYW5kIGFyZ3NbMF09PSctaSc6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ2VudjogLWkgb3B0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCcpCisgICAgCisgICAgaSA9IDAKKyAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAgICAgIGlmICc9JyBub3QgaW4gYXJnOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgIyBVcGRhdGUgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQKKyAgICAgICAgbmFtZSwgdmFsdWUgPSBhcmcuc3BsaXQoJz0nLCAxKQorICAgICAgICBlbnZbbmFtZV0gPSB2YWx1ZQorICAgICAgICBpICs9IDEKKyAgICAgICAgCisgICAgaWYgYXJnc1tpOl06CisgICAgICAgICMgRmluZCB0aGVuIGV4ZWN1dGUgdGhlIHNwZWNpZmllZCBpbnRlcnByZXRlcgorICAgICAgICB1dGlsaXR5ID0gZW52LmZpbmRfaW5fcGF0aChhcmdzW2ldKQorICAgICAgICBpZiBub3QgdXRpbGl0eToKKyAgICAgICAgICAgIHJldHVybiAxMjcKKyAgICAgICAgYXJnc1tpOmkrMV0gPSB1dGlsaXR5CisgICAgICAgIG5hbWUgPSBhcmdzW2ldCisgICAgICAgIGFyZ3MgPSBhcmdzW2krMTpdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBydW5fY29tbWFuZChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCAKKyAgICAgICAgICAgICAgICBkZWJ1Z2ZsYWdzKQorICAgICAgICBleGNlcHQgVXRpbGl0eUVycm9yOgorICAgICAgICAgICAgc3RkZXJyLndyaXRlKCdlbnY6IGZhaWxlZCB0byBleGVjdXRlICVzJyAlICcgJy5qb2luKFtuYW1lXSthcmdzKSkKKyAgICAgICAgICAgIHJldHVybiAxMjYgICAgICAgICAgICAKKyAgICBlbHNlOgorICAgICAgICBmb3IgcGFpciBpbiBlbnYuZ2V0X3ZhcmlhYmxlcygpLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgc3Rkb3V0LndyaXRlKCclcz0lc1xuJyAlIHBhaXIpCisgICAgcmV0dXJuIDAKKyAgICAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgZXhpdCB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGVmIHV0aWxpdHlfZXhpdChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgICAgICAKKyAgICByZXMgPSBOb25lCisgICAgaWYgYXJnczoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzID0gaW50KGFyZ3NbMF0pCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcmVzID0gTm9uZQorICAgICAgICBpZiBub3QgMDw9cmVzPD0yNTU6CisgICAgICAgICAgICByZXMgPSBOb25lCisgICAgICAgICAgICAKKyAgICBpZiByZXMgaXMgTm9uZToKKyAgICAgICAgIyBCVUc6IHNob3VsZCBiZSBsYXN0IGV4ZWN1dGVkIGNvbW1hbmQgZXhpdCBjb2RlCisgICAgICAgIHJlcyA9IDAKKyAgICAgICAgCisgICAgcmFpc2UgRXhpdFNpZ25hbChyZXMpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgZmdyZXAgdXRpbGl0eQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgc2VlIGVncmVwCitkZWYgdXRpbGl0eV9mZ3JlcChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgICAgICAKKyAgICByZXR1cm4gcnVuX2NvbW1hbmQoJ2dyZXAnLCBbJy1GJ10gKyBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgCisgICAgICAgIHN0ZGVyciwgZGVidWdmbGFncykKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBndW56aXAgdXRpbGl0eQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgc2VlIGVncmVwCitkZWYgdXRpbGl0eV9ndW56aXAobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICAgICAgCisgICAgcmV0dXJuIHJ1bl9jb21tYW5kKCdnemlwJywgWyctZCddICsgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIAorICAgICAgICBzdGRlcnIsIGRlYnVnZmxhZ3MpCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIGtpbGwgdXRpbGl0eQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RlZiB1dGlsaXR5X2tpbGwobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICAgICAgCisgICAgZm9yIGFyZyBpbiBhcmdzOgorICAgICAgICBwaWQgPSBpbnQoYXJnKQorICAgICAgICBzdGF0dXMgPSBzdWJwcm9jZXNzLmNhbGwoWydwc2tpbGwnLCAnL1QnLCBzdHIocGlkKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICMgcHNraWxsIGlzIGFzeW5jaHJvbm91cywgaGVuY2UgdGhlIHN0dXBpZCBwb2xsaW5nIGxvb3AKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsncHNsaXN0Jywgc3RyKHBpZCldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgICAgICBvdXRwdXQgPSBwLmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgICAgIGlmICgncHJvY2VzcyAlZCB3YXMgbm90JyAlIHBpZCkgaW4gb3V0cHV0OgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgcmV0dXJuIHN0YXR1cworICAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBta2RpciB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorT1BUX01LRElSID0gTm9uRXhpdGluZ1BhcnNlcigibWtkaXIgLSBtYWtlIGRpcmVjdG9yaWVzLiIpCitPUFRfTUtESVIuYWRkX29wdGlvbignLXAnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdoYXNfcCcsIGRlZmF1bHQ9RmFsc2UpCisKK2RlZiB1dGlsaXR5X21rZGlyKG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisgICAgICAgIAorICAgICMgVE9ETzogaW1wbGVtZW50IHVtYXNrCisgICAgIyBUT0RPOiBpbXBsZW1lbnQgcHJvcGVyIHV0aWxpdHkgZXJyb3IgcmVwb3J0CisgICAgb3B0aW9uLCBhcmdzID0gT1BUX01LRElSLnBhcnNlX2FyZ3MoYXJncykKKyAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oZW52WydQV0QnXSwgYXJnKQorICAgICAgICBpZiBvcHRpb24uaGFzX3A6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMocGF0aCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGVsc2U6ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBvcy5ta2RpcihwYXRoKQorICAgIHJldHVybiAwCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgbmV0c3RhdCB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGVmIHV0aWxpdHlfbmV0c3RhdChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICAjIERvIHlvdSByZWFsbHkgZXhwZWN0IG1lIHRvIGltcGxlbWVudCBuZXRzdGF0ID8KKyAgICAjIFRoaXMgZW1wdHkgZm9ybSBpcyBlbm91Z2ggZm9yIE1lcmN1cmlhbCB0ZXN0cyBzaW5jZSBpdCdzCisgICAgIyBzdXBwb3NlZCB0byBnZW5lcmF0ZSBub3RoaW5nIHVwb24gc3VjY2Vzcy4gRmFraW5nIHRoaXMgdGVzdAorICAgICMgaXMgbm90IGEgYmlnIGRlYWwgZWl0aGVyLgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisgICAgcmV0dXJuIDAKKyAgICAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgcHdkIHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKK09QVF9QV0QgPSBOb25FeGl0aW5nUGFyc2VyKCJwd2QgLSByZXR1cm4gd29ya2luZyBkaXJlY3RvcnkgbmFtZSIpCitPUFRfUFdELmFkZF9vcHRpb24oJy1MJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0naGFzX0wnLCBkZWZhdWx0PVRydWUsCisgICAgaGVscD0iIiJJZiB0aGUgUFdEIGVudmlyb25tZW50IHZhcmlhYmxlIGNvbnRhaW5zIGFuIGFic29sdXRlIHBhdGhuYW1lIG9mIFwKKyAgICB0aGUgY3VycmVudCBkaXJlY3RvcnkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBmaWxlbmFtZXMgZG90IG9yIGRvdC1kb3QsIFwKKyAgICBwd2Qgc2hhbGwgd3JpdGUgdGhpcyBwYXRobmFtZSB0byBzdGFuZGFyZCBvdXRwdXQuIE90aGVyd2lzZSwgdGhlIC1MIG9wdGlvbiBcCisgICAgc2hhbGwgYmVoYXZlIGFzIHRoZSAtUCBvcHRpb24uIiIiKQorT1BUX1BXRC5hZGRfb3B0aW9uKCctUCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2hhc19MJywgZGVmYXVsdD1GYWxzZSwKKyAgICBoZWxwPSIiIlRoZSBhYnNvbHV0ZSBwYXRobmFtZSB3cml0dGVuIHNoYWxsIG5vdCBjb250YWluIGZpbGVuYW1lcyB0aGF0LCBpbiBcCisgICAgdGhlIGNvbnRleHQgb2YgdGhlIHBhdGhuYW1lLCByZWZlciB0byBmaWxlcyBvZiB0eXBlIHN5bWJvbGljIGxpbmsuIiIiKQorCitkZWYgdXRpbGl0eV9wd2QobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKworICAgIG9wdGlvbiwgYXJncyA9IE9QVF9QV0QucGFyc2VfYXJncyhhcmdzKSAgICAgICAgCisgICAgc3Rkb3V0LndyaXRlKCclc1xuJyAlIGVudlsnUFdEJ10pCisgICAgcmV0dXJuIDAKKyAgICAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgcHJpbnRmIHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSRV9VTkVTQ0FQRSA9IHJlLmNvbXBpbGUocicoXFx4W2EtekEtWjAtOV17Mn18XFxbMC03XXsxLDN9fFxcLiknKQorCitkZWYgdXRpbGl0eV9wcmludGYobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICAgICAgCisgICAgZGVmIHJlcGxhY2UobSk6CisgICAgICAgIGFzc2VydCBtLmdyb3VwKCkKKyAgICAgICAgZyA9IG0uZ3JvdXAoKVsxOl0KKyAgICAgICAgaWYgZy5zdGFydHN3aXRoKCd4Jyk6CisgICAgICAgICAgICByZXR1cm4gY2hyKGludChnWzE6XSwgMTYpKQorICAgICAgICBpZiBsZW4oZykgPD0gMyBhbmQgbGVuKFtjIGZvciBjIGluIGcgaWYgYyBpbiAnMDEyMzQ1NjcnXSkgPT0gbGVuKGcpOgorICAgICAgICAgICAgIyBZYXksIGFuIG9jdGFsIG51bWJlcgorICAgICAgICAgICAgcmV0dXJuIGNocihpbnQoZywgOCkpCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAnYSc6ICdcYScsCisgICAgICAgICAgICAnYic6ICdcYicsCisgICAgICAgICAgICAnZic6ICdcZicsCisgICAgICAgICAgICAnbic6ICdcbicsCisgICAgICAgICAgICAncic6ICdccicsCisgICAgICAgICAgICAndCc6ICdcdCcsCisgICAgICAgICAgICAndic6ICdcdicsCisgICAgICAgICAgICAnXFwnOiAnXFwnLAorICAgICAgICB9LmdldChnKQorICAgICAgICAKKyAgICAjIENvbnZlcnQgZXNjYXBlIHNlcXVlbmNlcworICAgIGZvcm1hdCA9IHJlLnN1YihSRV9VTkVTQ0FQRSwgcmVwbGFjZSwgYXJnc1swXSkKKyAgICBzdGRvdXQud3JpdGUoZm9ybWF0ICUgdHVwbGUoYXJnc1sxOl0pKQorICAgIHJldHVybiAwCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIHRydWUgdXRpbGl0eQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RlZiB1dGlsaXR5X3RydWUobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICByZXR1cm4gMAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIHNlZCB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUkVfU0VEID0gcmUuY29tcGlsZShyJ15zKC4pLipcMVthLXpBLVpdKiQnKQorCisjIGN5Z3dpbiBzZWQgZmFpbHMgd2l0aCBzb21lIGV4cHJlc3Npb25zIHdoZW4gdGhleSBkbyBub3QgZW5kIHdpdGggYSBzaW5nbGUgc3BhY2UuCisjIHNlZSB1bml0IHRlc3RzIGZvciBkZXRhaWxzLiBJbnRlcmVzdGluZ2x5LCB0aGUgc2FtZSBleHByZXNzaW9ucyB3b3JrcyBwZXJmZWN0bHkKKyMgaW4gY3lnd2luIHNoZWxsLgorZGVmIHV0aWxpdHlfc2VkKG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisgICAgICAgIAorICAgICMgU2NhbiBwYXR0ZXJuIGFyZ3VtZW50cyBhbmQgYXBwZW5kIGEgc3BhY2UgaWYgbmVjZXNzYXJ5CisgICAgZm9yIGkgaW4geHJhbmdlKGxlbihhcmdzKSk6CisgICAgICAgIGlmIG5vdCBSRV9TRUQuc2VhcmNoKGFyZ3NbaV0pOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgYXJnc1tpXSA9IGFyZ3NbaV0gKyAnICcKKworICAgIHJldHVybiBydW5fY29tbWFuZChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgCisgICAgICAgIHN0ZGVyciwgZGVidWdmbGFncykKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBzbGVlcCB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGVmIHV0aWxpdHlfc2xlZXAobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICB0aW1lLnNsZWVwKGludChhcmdzWzBdKSkKKyAgICByZXR1cm4gMAorICAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBzb3J0IHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitPUFRfU09SVCA9IE5vbkV4aXRpbmdQYXJzZXIoInNvcnQgLSBzb3J0LCBtZXJnZSwgb3Igc2VxdWVuY2UgY2hlY2sgdGV4dCBmaWxlcyIpCisKK2RlZiB1dGlsaXR5X3NvcnQobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisKKyAgICBkZWYgc29ydChwYXRoKToKKyAgICAgICAgaWYgcGF0aCA9PSAnLSc6CisgICAgICAgICAgICBsaW5lcyA9IHN0ZGluLnJlYWRsaW5lcygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZiA9IGZpbGUocGF0aCkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBzdGRlcnIud3JpdGUoc3RyKGUpICsgJ1xuJykKKyAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAKKyAgICAgICAgaWYgbGluZXMgYW5kIGxpbmVzWy0xXVstMV0hPSdcbic6CisgICAgICAgICAgICBsaW5lc1stMV0gPSBsaW5lc1stMV0gKyAnXG4nCisgICAgICAgIHJldHVybiBsaW5lcworICAgIAorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisgICAgICAgIAorICAgIG9wdGlvbiwgYXJncyA9IE9QVF9TT1JULnBhcnNlX2FyZ3MoYXJncykKKyAgICBhbGxsaW5lcyA9IFtdCisgICAgCisgICAgaWYgbGVuKGFyZ3MpPD0wOgorICAgICAgICBhcmdzICs9IFsnLSddCisgICAgICAgIAorICAgICMgTG9hZCBhbGwgZmlsZXMgbGluZXMKKyAgICBjdXJkaXIgPSBvcy5nZXRjd2QoKQorICAgIHRyeToKKyAgICAgICAgb3MuY2hkaXIoZW52WydQV0QnXSkKKyAgICAgICAgZm9yIHBhdGggaW4gYXJnczoKKyAgICAgICAgICAgIGFsbGxpbmVzICs9IHNvcnQocGF0aCkKKyAgICBmaW5hbGx5OgorICAgICAgICBvcy5jaGRpcihjdXJkaXIpCisgICAgICAgICAgICAKKyAgICBhbGxsaW5lcy5zb3J0KCkKKyAgICBmb3IgbGluZSBpbiBhbGxsaW5lczoKKyAgICAgICAgc3Rkb3V0LndyaXRlKGxpbmUpCisgICAgcmV0dXJuIDAKKyAgICAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGhnIHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2hnY29tbWFuZHMgPSBbCisgICAgJ2FkZCcsCisgICAgJ2FkZHJlbW92ZScsCisgICAgJ2NvbW1pdCcsICdjaScsCisgICAgJ2RlYnVncmVuYW1lJywKKyAgICAnZGVidWd3YWxrJywKKyAgICAnZmFsYWJhbGEnLCAjIER1bW15IGNvbW1hbmQgdXNlZCBpbiBhIG1lcmN1cmlhbCB0ZXN0CisgICAgJ2luY29taW5nJywKKyAgICAnbG9jYXRlJywKKyAgICAncHVsbCcsCisgICAgJ3B1c2gnLAorICAgICdxaW5pdCcsCisgICAgJ3JlbW92ZScsICdybScsCisgICAgJ3JlbmFtZScsICdtdicsCisgICAgJ3JldmVydCcsICAgIAorICAgICdzaG93Y29uZmlnJywKKyAgICAnc3RhdHVzJywgJ3N0JywKKyAgICAnc3RyaXAnLAorICAgIF0KKworZGVmIHJld3JpdGVzbGFzaGVzKG5hbWUsIGFyZ3MpOgorICAgICMgU2V2ZXJhbCBoZyBjb21tYW5kcyBvdXRwdXQgZmlsZSBwYXRocywgcmV3cml0ZSB0aGUgc2VwYXJhdG9ycworICAgIGlmIGxlbihhcmdzKSA+IDEgYW5kIG5hbWUubG93ZXIoKS5lbmRzd2l0aCgncHl0aG9uJykgXAorICAgICAgIGFuZCBhcmdzWzBdLmVuZHN3aXRoKCdoZycpOgorICAgICAgICBmb3IgY21kIGluIGhnY29tbWFuZHM6CisgICAgICAgICAgICBpZiBjbWQgaW4gYXJnc1sxOl06CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIAorICAgICMgc3ZuIG91dHB1dCBjb250YWlucyBtYW55IHBhdGhzIHdpdGggT1Mgc3BlY2lmaWMgc2VwYXJhdG9ycy4KKyAgICAjIE5vcm1hbGl6ZSB0aGVzZSB0byB1bml4IHBhdGhzLgorICAgIGJhc2UgPSBvcy5wYXRoLmJhc2VuYW1lKG5hbWUpCisgICAgaWYgYmFzZS5zdGFydHN3aXRoKCdzdm4nKToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICAKKyAgICByZXR1cm4gRmFsc2UKKworZGVmIHJld3JpdGVoZyhvdXRwdXQpOgorICAgIGlmIG5vdCBvdXRwdXQ6CisgICAgICAgIHJldHVybiBvdXRwdXQKKyAgICAjIFJld3JpdGUgb3Mgc3BlY2lmaWMgbWVzc2FnZXMKKyAgICBvdXRwdXQgPSBvdXRwdXQucmVwbGFjZSgnOiBUaGUgc3lzdGVtIGNhbm5vdCBmaW5kIHRoZSBmaWxlIHNwZWNpZmllZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScpCisgICAgb3V0cHV0ID0gcmUuc3ViKCc6IEFjY2VzcyBpcyBkZW5pZWQuKiQnLCAnOiBQZXJtaXNzaW9uIGRlbmllZCcsIG91dHB1dCkKKyAgICBvdXRwdXQgPSBvdXRwdXQucmVwbGFjZSgnOiBObyBjb25uZWN0aW9uIGNvdWxkIGJlIG1hZGUgYmVjYXVzZSB0aGUgdGFyZ2V0IG1hY2hpbmUgYWN0aXZlbHkgcmVmdXNlZCBpdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogQ29ubmVjdGlvbiByZWZ1c2VkJykKKyAgICByZXR1cm4gb3V0cHV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKK2RlZiBydW5fY29tbWFuZChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwKKyAgICAgICAgICAgICAgICBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgICMgRXhlY3V0ZSB0aGUgY29tbWFuZAorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisKKyAgICBoZ2JpbiA9IGludGVycC5vcHRpb25zKCkuaGdiaW5hcnkKKyAgICBpc2hnID0gaGdiaW4gYW5kICgnaGcnIGluIG5hbWUgb3IgYXJncyBhbmQgJ2hnJyBpbiBhcmdzWzBdKQorICAgIHVuaXhvdXRwdXQgPSAnY3lnd2luJyBpbiBuYW1lIG9yIGlzaGcKKyAgICAKKyAgICBleGVjX2VudiA9IGVudi5nZXRfdmFyaWFibGVzKCkgICAgICAgIAorICAgIHRyeToKKyAgICAgICAgIyBCVUc6IGNvbXBhcmluZyBmaWxlIGRlc2NyaXB0b3IgaXMgY2xlYXJseSBub3QgYSByZWxpYWJsZSB3YXkgdG8gdGVsbAorICAgICAgICAjIHdoZXRoZXIgdGhleSBwb2ludCBvbiB0aGUgc2FtZSB1bmRlcmx5aW5nIG9iamVjdC4gQnV0IGluIHB5c2ggbGltaXRlZAorICAgICAgICAjIHNjb3BlIHRoaXMgaXMgdXN1YWxseSByaWdodCwgd2UgZG8gbm90IGV4cGVjdCBjb21wbGljYXRlZCByZWRpcmVjdGlvbnMKKyAgICAgICAgIyBiZXNpZGVzIHVzdWFsIDI+JjEuCisgICAgICAgICMgU3RpbGwgdGhlcmUgaXMgb25lIGNhc2Ugd2UgaGF2ZSBidXQgY2Fubm90IGRlYWwgd2l0aCBpcyB3aGVuIHN0ZG91dAorICAgICAgICAjIGFuZCBzdGRlcnIgYXJlIHJlZGlyZWN0ZWQgKmJ5IHB5c2ggY2FsbGVyKi4gVGhpcyB0aGUgcmVhc29uIGZvciB0aGUKKyAgICAgICAgIyAtLXJlZGlyZWN0IHB5c2goKSBvcHRpb24uCisgICAgICAgICMgTm93LCB3ZSB3YW50IHRvIGtub3cgdGhleSBhcmUgdGhlIHNhbWUgYmVjYXVzZSB3ZSBzb21ldGltZXMgbmVlZCB0byAKKyAgICAgICAgIyB0cmFuc2Zvcm0gdGhlIGNvbW1hbmQgb3V0cHV0LCBtb3N0bHkgcmVtb3ZlIENSLUxGIHRvIGVuc3VyZSB0aGF0CisgICAgICAgICMgY29tbWFuZCBvdXRwdXQgaXMgdW5peC1saWtlLiBDeWd3aW4gdXRpbGllcyBhcmUgYSBzcGVjaWFsIGNhc2UgYmVjYXVzZQorICAgICAgICAjIHRoZXkgZXhwbGljaXRlbHkgc2V0IHRoZWlyIG91dHB1dCBzdHJlYW1zIHRvIGJpbmFyeSBtb2RlLCBzbyB3ZSBoYXZlCisgICAgICAgICMgbm90aGluZyB0byBkby4gRm9yIGFsbCBvdGhlcnMgY29tbWFuZHMsIHdlIGhhdmUgdG8gZ3Vlc3Mgd2hldGhlciB0aGV5CisgICAgICAgICMgYXJlIHNlbmRpbmcgdGV4dCBkYXRhLCBpbiB3aGljaCBjYXNlIHRoZSB0cmFuc2Zvcm1hdGlvbiBtdXN0IGJlIGRvbmUuCisgICAgICAgICMgQWdhaW4sIHRoZSBOVUwgY2hhcmFjdGVyIHRlc3QgaXMgdW5yZWxpYWJsZSBidXQgc2hvdWxkIGJlIGVub3VnaCBmb3IKKyAgICAgICAgIyBoZyB0ZXN0cy4KKyAgICAgICAgcmVkaXJlY3RlZCA9IHN0ZG91dC5maWxlbm8oKT09c3RkZXJyLmZpbGVubygpCisgICAgICAgIGlmIG5vdCByZWRpcmVjdGVkOgorICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW25hbWVdICsgYXJncywgY3dkPWVudlsnUFdEJ10sIGVudj1leGVjX2VudiwgCisgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN0ZGluLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW25hbWVdICsgYXJncywgY3dkPWVudlsnUFdEJ10sIGVudj1leGVjX2VudiwgCisgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN0ZGluLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgZXhjZXB0IFdpbmRvd3NFcnJvciBhcyBlOgorICAgICAgICByYWlzZSBVdGlsaXR5RXJyb3Ioc3RyKGUpKQorCisgICAgaWYgbm90IHVuaXhvdXRwdXQ6CisgICAgICAgIGRlZiBlbmNvZGUocyk6CisgICAgICAgICAgICBpZiAnXDAnIGluIHM6CisgICAgICAgICAgICAgICAgcmV0dXJuIHMKKyAgICAgICAgICAgIHJldHVybiBzLnJlcGxhY2UoJ1xyXG4nLCAnXG4nKQorICAgIGVsc2U6CisgICAgICAgIGVuY29kZSA9IGxhbWJkYSBzOiBzCisKKyAgICBpZiByZXdyaXRlc2xhc2hlcyhuYW1lLCBhcmdzKToKKyAgICAgICAgZW5jb2RlMV8gPSBlbmNvZGUKKyAgICAgICAgZGVmIGVuY29kZShzKToKKyAgICAgICAgICAgIHMgPSBlbmNvZGUxXyhzKQorICAgICAgICAgICAgcyA9IHMucmVwbGFjZSgnXFxcXCcsICdcXCcpCisgICAgICAgICAgICBzID0gcy5yZXBsYWNlKCdcXCcsICcvJykKKyAgICAgICAgICAgIHJldHVybiBzCisKKyAgICBpZiBpc2hnOgorICAgICAgICBlbmNvZGUyXyA9IGVuY29kZQorICAgICAgICBkZWYgZW5jb2RlKHMpOgorICAgICAgICAgICAgcmV0dXJuIHJld3JpdGVoZyhlbmNvZGUyXyhzKSkKKyAgICAKKyAgICBzdGRvdXQud3JpdGUoZW5jb2RlKG91dCkpCisgICAgaWYgbm90IHJlZGlyZWN0ZWQ6CisgICAgICAgIHN0ZGVyci53cml0ZShlbmNvZGUoZXJyKSkKKyAgICByZXR1cm4gcC5yZXR1cm5jb2RlCisgICAgICAgICAgICAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9pbnRlcnAucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvaW50ZXJwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZDhjOTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvaW50ZXJwLnB5CkBAIC0wLDAgKzEsMTM2NyBAQAorIyBpbnRlcnAucHkgLSBzaGVsbCBpbnRlcnByZXRlciBmb3IgcHlzaC4KKyMKKyMgQ29weXJpZ2h0IDIwMDcgUGF0cmljayBNZXphcmQKKyMKKyMgVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcworIyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorCisiIiJJbXBsZW1lbnQgdGhlIHNoZWxsIGludGVycHJldGVyLgorCitNb3N0IHJlZmVyZW5jZXMgYXJlIG1hZGUgdG8gIlRoZSBPcGVuIEdyb3VwIEJhc2UgU3BlY2lmaWNhdGlvbnMgSXNzdWUgNiIuCis8aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L3V0aWxpdGllcy94Y3VfY2hhcDAyLmh0bWw+CisiIiIKKyMgVE9ETzogZG9jdW1lbnQgdGhlIGZhY3QgaW5wdXQgc3RyZWFtcyBtdXN0IGltcGxlbWVudCBmaWxlbm8oKSBzbyBQb3BlbiB3aWxsIHdvcmsgY29ycmVjdGx5LgorIyBpdCByZXF1aXJlcyBub24tc3RkaW4gc3RyZWFtIHRvIGJlIGltcGxlbWVudGVkIGFzIGZpbGVzLiBTdGlsbCB0byBiZSB0ZXN0ZWQuLi4KKyMgRE9DOiBwYXRoc2VwIGlzIHVzZWQgaW4gUEFUSCBpbnN0ZWFkIG9mICc6Jy4gQ2xlYXJseSwgdGhlcmUgYXJlIHBhdGggc3ludGF4IGlzc3VlcyBoZXJlLgorIyBUT0RPOiBzdG9wIGNvbW1hbmQgZXhlY3V0aW9uIHVwb24gZXJyb3IuCisjIFRPRE86IHNvcnQgb3V0IHRoZSBmaWxlbmFtZS9pb19udW1iZXIgbWVzcy4gSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHVzZSBmaWxlbmFtZXMgb25seS4KKyMgVE9ETzogcmV2aWV3IHN1YnNoZWxsIGltcGxlbWVudGF0aW9uCisjIFRPRE86IHRlc3QgZW52aXJvbm1lbnQgY2xvbmluZyBmb3Igbm9uLXNwZWNpYWwgYnVpbHRpbnMKKyMgVE9ETzogc2V0IC14IHNob3VsZCBub3QgcmVidWlsZCBjb21tYW5kcyBmcm9tIHRva2VucywgYXNzaWdubWVudHMvcmVkaXJlY3Rpb25zIGFyZSBsb3N0CisjIFRPRE86IHVuaXQgdGVzdCBmb3IgdmFyaWFibGUgYXNzaWdubWVudAorIyBUT0RPOiB0ZXN0IGVycm9yIG1hbmFnZW1lbnQgd3J0IGVycm9yIHR5cGUvdXRpbGl0eSB0eXBlCisjIFRPRE86IHRlc3QgZm9yIGJpbmFyeSBvdXRwdXQgZXZlcnl3aGVyZQorIyBCVUc6IGRlYnVnLXBhcnNpbmcgZG9lcyBub3QgcGFzcyBsb2cgZmlsZSB0byBQTFkuIE1heWJlIGEgUExZIHVwZ3JhZGUgaXMgbmVjZXNzYXJ5LgoraW1wb3J0IGJhc2U2NAoraW1wb3J0IGNQaWNrbGUgYXMgcGlja2xlCitpbXBvcnQgZXJybm8KK2ltcG9ydCBnbG9iCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQorCit0cnk6CisgICAgcyA9IHNldCgpCisgICAgZGVsIHMKK2V4Y2VwdCBOYW1lRXJyb3I6CisgICAgZnJvbSBTZXQgaW1wb3J0IFNldCBhcyBzZXQKKworaW1wb3J0IGJ1aWx0aW4KK2Zyb20gc2hlcnJvcnMgaW1wb3J0ICoKK2ltcG9ydCBweXNobGV4CitpbXBvcnQgcHlzaHlhY2MKKworZGVmIG1hcHBlbmQoZnVuYywgKmFyZ3MsICoqa2FyZ3MpOgorICAgICIiIkxpa2UgbWFwIGJ1dCBhc3N1bWUgZnVuYyByZXR1cm5zIGEgbGlzdC4gUmV0dXJuZWQgbGlzdHMgYXJlIG1lcmdlZCBpbnRvCisgICAgYSBzaW5nbGUgb25lLgorICAgICIiIgorICAgIHJldHVybiByZWR1Y2UobGFtYmRhIGEsYjogYStiLCBtYXAoZnVuYywgKmFyZ3MsICoqa2FyZ3MpLCBbXSkKKworY2xhc3MgRmlsZVdyYXBwZXI6CisgICAgIiIiRmlsZSBvYmplY3Qgd3JhcHBlciB0byBlYXNlIGRlYnVnZ2luZy4KKyAgICAKKyAgICBBbGxvdyBtb2RlIGNoZWNraW5nIGFuZCBpbXBsZW1lbnQgZmlsZSBkdXBsaWNhdGlvbiB0aHJvdWdoIGEgc2ltcGxlIAorICAgIHJlZmVyZW5jZSBjb3VudGluZyBzY2hlbWUuIE5vdCBzdXJlIHRoZSBsYXR0ZXIgaXMgcmVhbGx5IHVzZWZ1bCBzaW5jZQorICAgIG9ubHkgcmVhbCBmaWxlIGRlc2NyaXB0b3JzIGNhbiBiZSB1c2VkLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlLCBmaWxlLCBjbG9zZT1UcnVlKToKKyAgICAgICAgaWYgbW9kZSBub3QgaW4gKCdyJywgJ3cnLCAnYScpOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignaW52YWxpZCBtb2RlOiAlcycgJSBtb2RlKQorICAgICAgICBzZWxmLl9tb2RlID0gbW9kZQorICAgICAgICBzZWxmLl9jbG9zZSA9IGNsb3NlCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZmlsZSwgRmlsZVdyYXBwZXIpOgorICAgICAgICAgICAgaWYgZmlsZS5fcmVmY291bnRbMF0gPD0gMDoKKyAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKDAsICdFcnJvcicpCisgICAgICAgICAgICBzZWxmLl9yZWZjb3VudCA9IGZpbGUuX3JlZmNvdW50CisgICAgICAgICAgICBzZWxmLl9yZWZjb3VudFswXSArPSAxCisgICAgICAgICAgICBzZWxmLl9maWxlID0gZmlsZS5fZmlsZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcmVmY291bnQgPSBbMV0KKyAgICAgICAgICAgIHNlbGYuX2ZpbGUgPSBmaWxlCisgICAgICAgIAorICAgIGRlZiBkdXAoc2VsZik6CisgICAgICAgIHJldHVybiBGaWxlV3JhcHBlcihzZWxmLl9tb2RlLCBzZWxmLCBzZWxmLl9jbG9zZSkKKyAgICAgICAgCisgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAgIiIiZmlsZW5vKCkgc2hvdWxkIGJlIG9ubHkgbmVjZXNzYXJ5IGZvciBpbnB1dCBzdHJlYW1zLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZS5maWxlbm8oKQorICAgICAgICAKKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPS0xKToKKyAgICAgICAgaWYgc2VsZi5fbW9kZSE9J3InOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigwLCAnRXJyb3InKQorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZS5yZWFkKHNpemUpCisgICAgICAgIAorICAgIGRlZiByZWFkbGluZXMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGUucmVhZGxpbmVzKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgCisgICAgZGVmIHdyaXRlKHNlbGYsIHMpOgorICAgICAgICBpZiBzZWxmLl9tb2RlIG5vdCBpbiAoJ3cnLCAnYScpOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigwLCAnRXJyb3InKQorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZS53cml0ZShzKQorICAgICAgICAKKyAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgIHNlbGYuX2ZpbGUuZmx1c2goKQorICAgICAgICAKKyAgICBkZWYgY2xvc2Uoc2VsZik6ICAgICAgICAKKyAgICAgICAgaWYgbm90IHNlbGYuX3JlZmNvdW50OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGFzc2VydCAgc2VsZi5fcmVmY291bnRbMF0gPiAwCisgICAgICAgIAorICAgICAgICBzZWxmLl9yZWZjb3VudFswXSAtPSAxICAgIAorICAgICAgICBpZiBzZWxmLl9yZWZjb3VudFswXSA9PSAwOgorICAgICAgICAgICAgc2VsZi5fbW9kZSA9ICdjJworICAgICAgICAgICAgaWYgc2VsZi5fY2xvc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZmlsZS5jbG9zZSgpCisgICAgICAgIHNlbGYuX3JlZmNvdW50ID0gTm9uZQorICAgICAgICAgICAgICAgIAorICAgIGRlZiBtb2RlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbW9kZQorCisgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBuYW1lID09ICduYW1lJzoKKyAgICAgICAgICAgIHNlbGYubmFtZSA9IGdldGF0dHIoc2VsZi5fZmlsZSwgbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKG5hbWUpCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIAorZGVmIHdpbjMyX29wZW5fZGV2bnVsbChtb2RlKToKKyAgICByZXR1cm4gb3BlbignTlVMJywgbW9kZSkKKyAgICAKKyAgICAgICAgCitjbGFzcyBSZWRpcmVjdGlvbnM6CisgICAgIiIiU3RvcmVzIG9wZW4gZmlsZXMgYW5kIHRoZWlyIG1hcHBpbmcgdG8gcHNldWRvLXNoIGZpbGUgZGVzY3JpcHRvci4KKyAgICAiIiIKKyAgICAjIEJVRzogcmVkaXJlY3Rpb25zIGFyZSBub3QgaGFuZGxlZCBjb3JyZWN0bHk6IDE+JjMgMj4mMyAzPiY0IGRvZXMgCisgICAgIyBub3QgbWFrZSAxIHRvIHJlZGlyZWN0IHRvIDQKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lKToKKyAgICAgICAgc2VsZi5fZGVzY3JpcHRvcnMgPSB7fQorICAgICAgICBpZiBzdGRpbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2FkZF9kZXNjcmlwdG9yKDAsIHN0ZGluKQorICAgICAgICBpZiBzdGRvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9hZGRfZGVzY3JpcHRvcigxLCBzdGRvdXQpCisgICAgICAgIGlmIHN0ZGVyciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2FkZF9kZXNjcmlwdG9yKDIsIHN0ZGVycikKKyAgICAgICAgICAgIAorICAgIGRlZiBhZGRfaGVyZV9kb2N1bWVudChzZWxmLCBpbnRlcnAsIG5hbWUsIGNvbnRlbnQsIGlvX251bWJlcj1Ob25lKToKKyAgICAgICAgaWYgaW9fbnVtYmVyIGlzIE5vbmU6CisgICAgICAgICAgICBpb19udW1iZXIgPSAwCisgICAgICAgICAgICAKKyAgICAgICAgaWYgbmFtZT09cHlzaGxleC51bnF1b3RlX3dvcmR0cmVlKG5hbWUpOgorICAgICAgICAgICAgY29udGVudCA9IGludGVycC5leHBhbmRfaGVyZV9kb2N1bWVudCgoJ1RPS0VOJywgY29udGVudCkpCisgICAgCisgICAgICAgICMgV3JpdGUgZG9jdW1lbnQgY29udGVudCBpbiBhIHRlbXBvcmFyeSBmaWxlCisgICAgICAgIHRtcCA9IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0bXAud3JpdGUoY29udGVudCkKKyAgICAgICAgICAgIHRtcC5mbHVzaCgpCisgICAgICAgICAgICB0bXAuc2VlaygwKQorICAgICAgICAgICAgc2VsZi5fYWRkX2Rlc2NyaXB0b3IoaW9fbnVtYmVyLCBGaWxlV3JhcHBlcigncicsIHRtcCkpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHRtcC5jbG9zZSgpCisgICAgICAgICAgICByYWlzZSAgICAgICAgICAgICAgICAKKyAgICAgICAgCisgICAgZGVmIGFkZChzZWxmLCBpbnRlcnAsIG9wLCBmaWxlbmFtZSwgaW9fbnVtYmVyPU5vbmUpOgorICAgICAgICBpZiBvcCBub3QgaW4gKCc8JywgJz4nLCAnPnwnLCAnPj4nLCAnPiYnKToKKyAgICAgICAgICAgICMgVE9ETzogYWRkIGRlc2NyaXB0b3IgZHVwbGljYXRpb24gYW5kIGhlcmVfZG9jdW1lbnRzICAgICAgCisgICAgICAgICAgICByYWlzZSBSZWRpcmVjdGlvbkVycm9yKCdVbnN1cHBvcnRlZCByZWRpcmVjdGlvbiBvcGVyYXRvciAiJXMiJyAlIG9wKQorICAgICAgICAgICAgCisgICAgICAgIGlmIGlvX251bWJlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlvX251bWJlciA9IGludChpb19udW1iZXIpCisgICAgICAgICAgICAKKyAgICAgICAgaWYgKG9wID09ICc+JicgYW5kIGZpbGVuYW1lLmlzZGlnaXQoKSkgb3IgZmlsZW5hbWU9PSctJzoKKyAgICAgICAgICAgICMgTm8gZXhwYW5zaW9uIGZvciBmaWxlIGRlc2NyaXB0b3JzLCBxdW90ZSB0aGVtIGlmIHlvdSB3YW50IGEgZmlsZW5hbWUKKyAgICAgICAgICAgIGZ1bGxuYW1lID0gZmlsZW5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lLnN0YXJ0c3dpdGgoJy8nKToKKyAgICAgICAgICAgICAgICAjIFRPRE86IHdpbjMyIGtsdWRnZQorICAgICAgICAgICAgICAgIGlmIGZpbGVuYW1lPT0nL2Rldi9udWxsJzoKKyAgICAgICAgICAgICAgICAgICAgZnVsbG5hbWUgPSAnTlVMJworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgVE9ETzogaGFuZGxlIGFic29sdXRlIHBhdGhuYW1lcywgdGhleSBhcmUgdW5saWtlbHkgdG8gZXhpc3Qgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICMgY3VycmVudCBwbGF0Zm9ybSAod2luMzIgZm9yIGluc3RhbmNlKS4KKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZ1bGxuYW1lID0gaW50ZXJwLmV4cGFuZF9yZWRpcmVjdGlvbigoJ1RPS0VOJywgZmlsZW5hbWUpKQorICAgICAgICAgICAgICAgIGlmIG5vdCBmdWxsbmFtZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUmVkaXJlY3Rpb25FcnJvcignJXM6IGFtYmlndW91cyByZWRpcmVjdCcgJSBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICAjIEJ1aWxkIGFic29sdXRlIHBhdGggYmFzZWQgb24gUFdECisgICAgICAgICAgICAgICAgZnVsbG5hbWUgPSBvcy5wYXRoLmpvaW4oaW50ZXJwLmdldF9lbnYoKVsnUFdEJ10sIGZ1bGxuYW1lKQorICAgICAgICAgICAgCisgICAgICAgIGlmIG9wPT0nPCc6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fYWRkX2lucHV0X3JlZGlyZWN0aW9uKGludGVycCwgZnVsbG5hbWUsIGlvX251bWJlcikKKyAgICAgICAgZWxpZiBvcCBpbiAoJz4nLCAnPnwnKToKKyAgICAgICAgICAgIGNsb2JiZXIgPSAoJz58Jz09b3ApCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fYWRkX291dHB1dF9yZWRpcmVjdGlvbihpbnRlcnAsIGZ1bGxuYW1lLCBpb19udW1iZXIsIGNsb2JiZXIpCisgICAgICAgIGVsaWYgb3A9PSc+Pic6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fYWRkX291dHB1dF9hcHBlbmRpbmcoaW50ZXJwLCBmdWxsbmFtZSwgaW9fbnVtYmVyKQorICAgICAgICBlbGlmIG9wPT0nPiYnOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2R1cF9vdXRwdXRfZGVzY3JpcHRvcihmdWxsbmFtZSwgaW9fbnVtYmVyKQorICAgICAgICAKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2Rlc2NyaXB0b3JzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIGRlc2MgaW4gc2VsZi5fZGVzY3JpcHRvcnMuaXRlcnZhbHVlcygpOgorICAgICAgICAgICAgICAgIGRlc2MuZmx1c2goKQorICAgICAgICAgICAgICAgIGRlc2MuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fZGVzY3JpcHRvcnMgPSBOb25lCisgICAgICAgICAgICAKKyAgICBkZWYgc3RkaW4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kZXNjcmlwdG9yc1swXQorICAgICAgICAgIAorICAgIGRlZiBzdGRvdXQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kZXNjcmlwdG9yc1sxXSAKKyAgICAgICAgCisgICAgZGVmIHN0ZGVycihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Rlc2NyaXB0b3JzWzJdIAorICAgICAgICAgICAgCisgICAgZGVmIGNsb25lKHNlbGYpOgorICAgICAgICBjbG9uZSA9IFJlZGlyZWN0aW9ucygpCisgICAgICAgIGZvciBkZXNjLCBmaWxlb2JqIGluIHNlbGYuX2Rlc2NyaXB0b3JzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgY2xvbmUuX2Rlc2NyaXB0b3JzW2Rlc2NdID0gZmlsZW9iai5kdXAoKQorICAgICAgICByZXR1cm4gY2xvbmUKKyAgICAgICAgICAgCisgICAgZGVmIF9hZGRfb3V0cHV0X3JlZGlyZWN0aW9uKHNlbGYsIGludGVycCwgZmlsZW5hbWUsIGlvX251bWJlciwgY2xvYmJlcik6ICAgIAorICAgICAgICBpZiBpb19udW1iZXIgaXMgTm9uZToKKyAgICAgICAgICAgICMgaW9fbnVtYmVyIGRlZmF1bHQgdG8gc3RhbmRhcmQgb3V0cHV0CisgICAgICAgICAgICBpb19udW1iZXIgPSAxCisgICAgICAgIAorICAgICAgICBpZiBub3QgY2xvYmJlciBhbmQgaW50ZXJwLmdldF9lbnYoKS5oYXNfb3B0KCctQycpIGFuZCBvcy5wYXRoLmlzZmlsZShmaWxlbmFtZSk6CisgICAgICAgICAgICAjIEZpbGUgYWxyZWFkeSBleGlzdCBpbiBuby1jbG9iYmVyIG1vZGUsIGJhaWwgb3V0CisgICAgICAgICAgICByYWlzZSBSZWRpcmVjdGlvbkVycm9yKCdGaWxlICIlcyIgYWxyZWFkeSBleGlzdHMnICUgZmlsZW5hbWUpCisgICAgICAgICAgICAKKyAgICAgICAgIyBPcGVuIGFuZCByZWdpc3RlcgorICAgICAgICBzZWxmLl9hZGRfZmlsZV9kZXNjcmlwdG9yKGlvX251bWJlciwgZmlsZW5hbWUsICd3JykKKyAgICAgICAgCisgICAgZGVmIF9hZGRfb3V0cHV0X2FwcGVuZGluZyhzZWxmLCBpbnRlcnAsIGZpbGVuYW1lLCBpb19udW1iZXIpOiAgICAKKyAgICAgICAgaWYgaW9fbnVtYmVyIGlzIE5vbmU6CisgICAgICAgICAgICBpb19udW1iZXIgPSAxCisgICAgICAgIHNlbGYuX2FkZF9maWxlX2Rlc2NyaXB0b3IoaW9fbnVtYmVyLCBmaWxlbmFtZSwgJ2EnKQorICAgICAgICAgICAgCisgICAgZGVmIF9hZGRfaW5wdXRfcmVkaXJlY3Rpb24oc2VsZiwgaW50ZXJwLCBmaWxlbmFtZSwgaW9fbnVtYmVyKToKKyAgICAgICAgaWYgaW9fbnVtYmVyIGlzIE5vbmU6CisgICAgICAgICAgICBpb19udW1iZXIgPSAwCisgICAgICAgIHNlbGYuX2FkZF9maWxlX2Rlc2NyaXB0b3IoaW9fbnVtYmVyLCBmaWxlbmFtZSwgJ3InKQorICAgICAgICAKKyAgICBkZWYgX2FkZF9maWxlX2Rlc2NyaXB0b3Ioc2VsZiwgaW9fbnVtYmVyLCBmaWxlbmFtZSwgbW9kZSk6ICAgIAorICAgICAgICB0cnk6ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiBmaWxlbmFtZS5zdGFydHN3aXRoKCcvJyk6CisgICAgICAgICAgICAgICAgaWYgZmlsZW5hbWU9PScvZGV2L251bGwnOgorICAgICAgICAgICAgICAgICAgICBmID0gd2luMzJfb3Blbl9kZXZudWxsKG1vZGUrJ2InKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgVE9ETzogaGFuZGxlIGFic29sdXRlIHBhdGhuYW1lcywgdGhleSBhcmUgdW5saWtlbHkgdG8gZXhpc3Qgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICMgY3VycmVudCBwbGF0Zm9ybSAod2luMzIgZm9yIGluc3RhbmNlKS4KKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignY2Fubm90IG9wZW4gYWJzb2x1dGUgcGF0aCAlcycgJSByZXByKGZpbGVuYW1lKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZiA9IGZpbGUoZmlsZW5hbWUsIG1vZGUrJ2InKQorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgcmFpc2UgUmVkaXJlY3Rpb25FcnJvcihzdHIoZSkpCisgICAgICAgICAgICAKKyAgICAgICAgd3JhcHBlciA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd3JhcHBlciA9IEZpbGVXcmFwcGVyKG1vZGUsIGYpCisgICAgICAgICAgICBmID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fYWRkX2Rlc2NyaXB0b3IoaW9fbnVtYmVyLCB3cmFwcGVyKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBpZiBmOiBmLmNsb3NlKCkKKyAgICAgICAgICAgIGlmIHdyYXBwZXI6IHdyYXBwZXIuY2xvc2UoKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIAorICAgIGRlZiBfZHVwX291dHB1dF9kZXNjcmlwdG9yKHNlbGYsIHNvdXJjZV9mZCwgZGVzdF9mZCk6CisgICAgICAgIGlmIHNvdXJjZV9mZCBpcyBOb25lOgorICAgICAgICAgICAgc291cmNlX2ZkID0gMQorICAgICAgICBzZWxmLl9kdXBfZmlsZV9kZXNjcmlwdG9yKHNvdXJjZV9mZCwgZGVzdF9mZCwgJ3cnKQorICAgICAgICAgICAgCisgICAgZGVmIF9kdXBfZmlsZV9kZXNjcmlwdG9yKHNlbGYsIHNvdXJjZV9mZCwgZGVzdF9mZCwgbW9kZSk6CisgICAgICAgIHNvdXJjZV9mZCA9IGludChzb3VyY2VfZmQpCisgICAgICAgIGlmIHNvdXJjZV9mZCBub3QgaW4gc2VsZi5fZGVzY3JpcHRvcnM6CisgICAgICAgICAgICByYWlzZSBSZWRpcmVjdGlvbkVycm9yKCciJXMiIGlzIG5vdCBhIHZhbGlkIGZpbGUgZGVzY3JpcHRvcicgJSBzdHIoc291cmNlX2ZkKSkKKyAgICAgICAgc291cmNlID0gc2VsZi5fZGVzY3JpcHRvcnNbc291cmNlX2ZkXQorICAgICAgICAKKyAgICAgICAgaWYgc291cmNlLm1vZGUoKSE9bW9kZToKKyAgICAgICAgICAgIHJhaXNlIFJlZGlyZWN0aW9uRXJyb3IoJ0Rlc2NyaXB0b3IgJXMgY2Fubm90IGJlIGR1cGxpY2F0ZWQgaW4gbW9kZSAiJXMiJyAlIChzdHIoc291cmNlKSwgbW9kZSkpCisgICAgICAgIAorICAgICAgICBpZiBkZXN0X2ZkPT0nLSc6CisgICAgICAgICAgICAjIENsb3NlIHRoZSBzb3VyY2UgZGVzY3JpcHRvcgorICAgICAgICAgICAgZGVsIHNlbGYuX2Rlc2NyaXB0b3JzW3NvdXJjZV9mZF0KKyAgICAgICAgICAgIHNvdXJjZS5jbG9zZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZXN0X2ZkID0gaW50KGRlc3RfZmQpCisgICAgICAgICAgICBpZiBkZXN0X2ZkIG5vdCBpbiBzZWxmLl9kZXNjcmlwdG9yczoKKyAgICAgICAgICAgICAgICByYWlzZSBSZWRpcmVjdGlvbkVycm9yKCdDYW5ub3QgcmVwbGFjZSBmaWxlIGRlc2NyaXB0b3IgJXMnICUgc3RyKGRlc3RfZmQpKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVzdCA9IHNlbGYuX2Rlc2NyaXB0b3JzW2Rlc3RfZmRdCisgICAgICAgICAgICBpZiBkZXN0Lm1vZGUoKSE9bW9kZToKKyAgICAgICAgICAgICAgICByYWlzZSBSZWRpcmVjdGlvbkVycm9yKCdEZXNjcmlwdG9yICVzIGNhbm5vdCBiZSBjYW5ub3QgYmUgcmVkaXJlY3RlZCBpbiBtb2RlICIlcyInICUgKHN0cihkZXN0KSwgbW9kZSkpCisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNlbGYuX2Rlc2NyaXB0b3JzW2Rlc3RfZmRdID0gc291cmNlLmR1cCgpCisgICAgICAgICAgICBkZXN0LmNsb3NlKCkgICAgICAgIAorICAgICAgICAgICAgCisgICAgZGVmIF9hZGRfZGVzY3JpcHRvcihzZWxmLCBpb19udW1iZXIsIGZpbGUpOgorICAgICAgICBpb19udW1iZXIgPSBpbnQoaW9fbnVtYmVyKQorICAgICAgICAKKyAgICAgICAgaWYgaW9fbnVtYmVyIGluIHNlbGYuX2Rlc2NyaXB0b3JzOgorICAgICAgICAgICAgIyBDbG9zZSB0aGUgY3VycmVudCBkZXNjcmlwdG9yCisgICAgICAgICAgICBkID0gc2VsZi5fZGVzY3JpcHRvcnNbaW9fbnVtYmVyXQorICAgICAgICAgICAgZGVsIHNlbGYuX2Rlc2NyaXB0b3JzW2lvX251bWJlcl0KKyAgICAgICAgICAgIGQuY2xvc2UoKQorICAgICAgICAgICAgCisgICAgICAgIHNlbGYuX2Rlc2NyaXB0b3JzW2lvX251bWJlcl0gPSBmaWxlCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgbmFtZXMgPSBbKCclZD0lcicgJSAoaywgZ2V0YXR0cih2LCAnbmFtZScsIE5vbmUpKSkgZm9yIGssdgorICAgICAgICAgICAgICAgICBpbiBzZWxmLl9kZXNjcmlwdG9ycy5pdGVyaXRlbXMoKV0KKyAgICAgICAgbmFtZXMgPSAnLCcuam9pbihuYW1lcykKKyAgICAgICAgcmV0dXJuICdSZWRpcmVjdGlvbnMoJXMpJyAlIG5hbWVzCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgCitkZWYgY3lnd2luX3RvX3dpbmRvd3NfcGF0aChwYXRoKToKKyAgICAiIiJUdXJuIC9jeWdkcml2ZS9jL2ZvbyBpbnRvIGM6L2Zvbywgb3IgcmV0dXJuIHBhdGggaWYgaXQKKyAgICBpcyBub3QgYSBjeWd3aW4gcGF0aC4KKyAgICAiIiIKKyAgICBpZiBub3QgcGF0aC5zdGFydHN3aXRoKCcvY3lnZHJpdmUvJyk6CisgICAgICAgIHJldHVybiBwYXRoCisgICAgcGF0aCA9IHBhdGhbbGVuKCcvY3lnZHJpdmUvJyk6XQorICAgIHBhdGggPSBwYXRoWzoxXSArICc6JyArIHBhdGhbMTpdCisgICAgcmV0dXJuIHBhdGgKKyAgICAKK2RlZiB3aW4zMl90b191bml4X3BhdGgocGF0aCk6CisgICAgaWYgcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgnXFwnLCAnLycpCisgICAgcmV0dXJuIHBhdGggICAgCisgICAgCitfUkVfU0hFQkFORyA9IHJlLmNvbXBpbGUocideXCMhXHM/KFteXHNdKykoPzpccyhbXlxzXSspKT8nKQorX1NIRUJBTkdfQ01EUyA9IHsKKyAgICAnL3Vzci9iaW4vZW52JzogJ2VudicsCisgICAgJy9iaW4vc2gnOiAncHlzaCcsCisgICAgJ3B5dGhvbic6ICdweXRob24nLAorfQorICAgIAorZGVmIHJlc29sdmVfc2hlYmFuZyhwYXRoLCBpZ25vcmVzaGVsbD1GYWxzZSk6CisgICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBhcmd1bWVudHMgYXMgc2hlYmFuZyBpbnRlcnByZXRlciBjYWxsIG9yIGFuIGVtcHR5IGxpc3QKKyAgICBpZiBwYXRoIGRvZXMgbm90IHJlZmVyIHRvIGFuIGV4ZWN1dGFibGUgc2NyaXB0LgorICAgIFNlZSA8aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL2F1c3Rpbi9kb2NzL2F1c3Rpbl81MXIyLnR4dD4uCisgICAgCisgICAgaWdub3Jlc2hlbGwgLSBzZXQgdG8gVHJ1ZSB0byBpZ25vcmUgc2ggc2hlYmFuZ3MuIFJldHVybiBhbiBlbXB0eSBsaXN0IGluc3RlYWQuCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICBmID0gZmlsZShwYXRoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIEF0IG1vc3QgODAgY2hhcmFjdGVycyBpbiB0aGUgZmlyc3QgbGluZQorICAgICAgICAgICAgaGVhZGVyID0gZi5yZWFkKDgwKS5zcGxpdGxpbmVzKClbMF0KKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgCisgICAgICAgIG0gPSBfUkVfU0hFQkFORy5zZWFyY2goaGVhZGVyKQorICAgICAgICBpZiBub3QgbToKKyAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBjbWQsIGFyZyA9IG0uZ3JvdXAoMSwyKQorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShjbWQpOgorICAgICAgICAgICAgIyBLZWVwIHRoaXMgb25lLCB0aGUgaGcgc2NyaXB0IGZvciBpbnN0YW5jZSBjb250YWlucyBhIHdlaXJkIHdpbmRvd3MKKyAgICAgICAgICAgICMgc2hlYmFuZyByZWZlcmVuY2luZyB0aGUgY3VycmVudCBweXRob24gaW5zdGFsbC4KKyAgICAgICAgICAgIGNtZGZpbGUgPSBvcy5wYXRoLmJhc2VuYW1lKGNtZCkubG93ZXIoKQorICAgICAgICAgICAgaWYgY21kZmlsZSA9PSAncHl0aG9uLmV4ZSc6CisgICAgICAgICAgICAgICAgY21kID0gJ3B5dGhvbicKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxpZiBjbWQgbm90IGluIF9TSEVCQU5HX0NNRFM6CisgICAgICAgICAgICByYWlzZSBDb21tYW5kTm90Rm91bmQoJ1Vua25vd24gaW50ZXJwcmV0ZXIgIiVzIiByZWZlcmVuY2VkIGluICdcCisgICAgICAgICAgICAgICAgJ3NoZWJhbmcnICUgaGVhZGVyKQorICAgICAgICBjbWQgPSBfU0hFQkFOR19DTURTLmdldChjbWQpCisgICAgICAgIGlmIGNtZCBpcyBOb25lIG9yIChpZ25vcmVzaGVsbCBhbmQgY21kID09ICdweXNoJyk6CisgICAgICAgICAgICByZXR1cm4gW10KKyAgICAgICAgaWYgYXJnIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gW2NtZCwgd2luMzJfdG9fdW5peF9wYXRoKHBhdGgpXQorICAgICAgICByZXR1cm4gW2NtZCwgYXJnLCB3aW4zMl90b191bml4X3BhdGgocGF0aCldCisgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgaWYgIGUuZXJybm8hPWVycm5vLkVOT0VOVCBhbmQgXAorICAgICAgICAgICAgKGUuZXJybm8hPWVycm5vLkVQRVJNIGFuZCBub3Qgb3MucGF0aC5pc2RpcihwYXRoKSk6ICMgT3BlbmluZyBhIGRpcmVjdG9yeSByYWlzZXMgRVBFUk0KKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiBbXQorICAgICAgICAKK2RlZiB3aW4zMl9maW5kX2luX3BhdGgobmFtZSwgcGF0aCk6CisgICAgaWYgaXNpbnN0YW5jZShwYXRoLCBzdHIpOgorICAgICAgICBwYXRoID0gcGF0aC5zcGxpdChvcy5wYXRoc2VwKQorICAgICAgICAKKyAgICBleHRzID0gb3MuZW52aXJvbi5nZXQoJ1BBVEhFWFQnLCAnJykubG93ZXIoKS5zcGxpdChvcy5wYXRoc2VwKQorICAgIGZvciBwIGluIHBhdGg6CisgICAgICAgIHBfbmFtZSA9IG9zLnBhdGguam9pbihwLCBuYW1lKQorICAgICAgICAKKyAgICAgICAgcHJlZml4ID0gcmVzb2x2ZV9zaGViYW5nKHBfbmFtZSkKKyAgICAgICAgaWYgcHJlZml4OgorICAgICAgICAgICAgcmV0dXJuIHByZWZpeAorICAgICAgICAgICAgCisgICAgICAgIGZvciBleHQgaW4gZXh0czogICAgCisgICAgICAgICAgICBwX25hbWVfZXh0ID0gcF9uYW1lICsgZXh0CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwX25hbWVfZXh0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gW3dpbjMyX3RvX3VuaXhfcGF0aChwX25hbWVfZXh0KV0KKyAgICByZXR1cm4gW10KKworY2xhc3MgVHJhcHMoZGljdCk6CisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICBpZiBrZXkgbm90IGluICgnRVhJVCcsKToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorICAgICAgICBzdXBlcihUcmFwcywgc2VsZikuX19zZXRpdGVtX18oa2V5LCB2YWx1ZSkKKworIyBJRlMgd2hpdGUgc3BhY2VzIGNoYXJhY3RlciBjbGFzcworX0lGU19XSElURVNQQUNFUyA9ICgnICcsICdcdCcsICdcbicpCisKK2NsYXNzIEVudmlyb25tZW50OgorICAgICIiIkVudmlyb25tZW50IGhvbGRzIGVudmlyb25tZW50IHZhcmlhYmxlcywgZXhwb3J0IHRhYmxlLCBmdW5jdGlvbiAKKyAgICBkZWZpbml0aW9ucyBhbmQgd2hhdGV2ZXIgaXMgZGVmaW5lZCBpbiAyLjEyICJTaGVsbCBFeGVjdXRpb24gRW52aXJvbm1lbnQiLAorICAgIHJlZGlyZWN0aW9uIGV4Y2VwdGVkLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwd2QpOgorICAgICAgICBzZWxmLl9vcHQgPSBzZXQoKSAgICAgICAjU2hlbGwgb3B0aW9ucworICAgICAgICAKKyAgICAgICAgc2VsZi5fZnVuY3Rpb25zID0ge30gICAgICAgIAorICAgICAgICBzZWxmLl9lbnYgPSB7Jz8nOiAnMCcsICcjJzogJzAnfQorICAgICAgICBzZWxmLl9leHBvcnRlZCA9IHNldChbCisgICAgICAgICAgICAnSE9NRScsICdJRlMnLCAnUEFUSCcKKyAgICAgICAgXSkKKyAgICAgICAgCisgICAgICAgICMgU2V0IGVudmlyb25tZW50IHZhcnMgd2l0aCBzaWRlLWVmZmVjdHMKKyAgICAgICAgc2VsZi5faWZzX3dzID0gTm9uZSAgICAgIyBTZXQgb2YgSUZTIHdoaXRlc3BhY2UgY2hhcmFjdGVycworICAgICAgICBzZWxmLl9pZnNfcmUgPSBOb25lICAgICAjIFJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIHNwbGl0IGJldHdlZW4gd29yZHMgdXNpbmcgSUZTIGNsYXNzZXMKKyAgICAgICAgc2VsZlsnSUZTJ10gPSAnJy5qb2luKF9JRlNfV0hJVEVTUEFDRVMpICNEZWZhdWx0IGVudmlyb25tZW50IHZhbHVlcworICAgICAgICBzZWxmWydQV0QnXSA9IHB3ZAorICAgICAgICBzZWxmLnRyYXBzID0gVHJhcHMoKQorICAgICAgICAKKyAgICBkZWYgY2xvbmUoc2VsZiwgc3Vic2hlbGw9RmFsc2UpOgorICAgICAgICBlbnYgPSBFbnZpcm9ubWVudChzZWxmWydQV0QnXSkKKyAgICAgICAgZW52Ll9vcHQgPSBzZXQoc2VsZi5fb3B0KQorICAgICAgICBmb3Igayx2IGluIHNlbGYuZ2V0X3ZhcmlhYmxlcygpLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgayBpbiBzZWxmLl9leHBvcnRlZDoKKyAgICAgICAgICAgICAgICBlbnYuZXhwb3J0KGssdikKKyAgICAgICAgICAgIGVsaWYgc3Vic2hlbGw6CisgICAgICAgICAgICAgICAgZW52W2tdID0gdgorICAgICAgICAgICAgICAgIAorICAgICAgICBpZiBzdWJzaGVsbDoKKyAgICAgICAgICAgIGVudi5fZnVuY3Rpb25zID0gZGljdChzZWxmLl9mdW5jdGlvbnMpCisgICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuIGVudiAgICAgICAgCisgICAgICAgIAorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICBpZiBrZXkgaW4gKCdAJywgJyonLCAnLScsICckJyk6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCclcyBpcyBub3QgaW1wbGVtZW50ZWQnICUgcmVwcihrZXkpKQorICAgICAgICByZXR1cm4gc2VsZi5fZW52W2tleV0KKyAgICAgICAgCisgICAgZGVmIGdldChzZWxmLCBrZXksIGRlZnZhbD1Ob25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGZba2V5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gZGVmdmFsCisgICAgICAgIAorICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgaWYga2V5PT0nSUZTJzoKKyAgICAgICAgICAgICMgVXBkYXRlIHRoZSB3aGl0ZXNwYWNlL25vbi13aGl0ZXNwYWNlIGNsYXNzZXMKKyAgICAgICAgICAgIHNlbGYuX3VwZGF0ZV9pZnModmFsdWUpCisgICAgICAgIGVsaWYga2V5PT0nUFdEJzoKKyAgICAgICAgICAgIHB3ZCA9IG9zLnBhdGguYWJzcGF0aCh2YWx1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHB3ZCk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFyQXNzaWdubWVudEVycm9yKCdJbnZhbGlkIGRpcmVjdG9yeSAlcycgJSB2YWx1ZSkKKyAgICAgICAgICAgIHZhbHVlID0gcHdkCisgICAgICAgIGVsaWYga2V5IGluICgnPycsICchJyk6CisgICAgICAgICAgICB2YWx1ZSA9IHN0cihpbnQodmFsdWUpKQorICAgICAgICBzZWxmLl9lbnZba2V5XSA9IHZhbHVlCisgICAgICAgIAorICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICBpZiBrZXkgaW4gKCdJRlMnLCAnUFdEJywgJz8nKToKKyAgICAgICAgICAgIHJhaXNlIFZhckFzc2lnbm1lbnRFcnJvcignJXMgY2Fubm90IGJlIHVuc2V0JyAlIGtleSkKKyAgICAgICAgZGVsIHNlbGYuX2VudltrZXldCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGl0ZW0pOgorICAgICAgICByZXR1cm4gaXRlbSBpbiBzZWxmLl9lbnYKKyAgICAgICAgCisgICAgZGVmIHNldF9wb3NpdGlvbmFsX2FyZ3Moc2VsZiwgYXJncyk6CisgICAgICAgICIiIlNldCB0aGUgY29udGVudCBvZiAnYXJncycgYXMgcG9zaXRpb25hbCBhcmd1bWVudCBmcm9tIDEgdG8gbGVuKGFyZ3MpLgorICAgICAgICBSZXR1cm4gcHJldmlvdXMgYXJndW1lbnQgYXMgYSBsaXN0IG9mIHN0cmluZ3MuCisgICAgICAgICIiIgorICAgICAgICAjIFNhdmUgYW5kIHJlbW92ZSBwcmV2aW91cyBhcmd1bWVudHMKKyAgICAgICAgcHJldmFyZ3MgPSBbXSAgICAgICAgCisgICAgICAgIGZvciBpIGluIHhyYW5nZShpbnQoc2VsZi5fZW52WycjJ10pKToKKyAgICAgICAgICAgIGkgPSBzdHIoaSsxKQorICAgICAgICAgICAgcHJldmFyZ3MuYXBwZW5kKHNlbGYuX2VudltpXSkKKyAgICAgICAgICAgIGRlbCBzZWxmLl9lbnZbaV0KKyAgICAgICAgc2VsZi5fZW52WycjJ10gPSAnMCcKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgI1NldCBuZXcgb25lcworICAgICAgICBmb3IgaSxhcmcgaW4gZW51bWVyYXRlKGFyZ3MpOgorICAgICAgICAgICAgc2VsZi5fZW52W3N0cihpKzEpXSA9IHN0cihhcmcpCisgICAgICAgIHNlbGYuX2VudlsnIyddID0gc3RyKGxlbihhcmdzKSkKKyAgICAgICAgCisgICAgICAgIHJldHVybiBwcmV2YXJncworICAgICAgICAKKyAgICBkZWYgZ2V0X3Bvc2l0aW9uYWxfYXJncyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFtzZWxmLl9lbnZbc3RyKGkrMSldIGZvciBpIGluIHhyYW5nZShpbnQoc2VsZi5fZW52WycjJ10pKV0KKyAgICAgICAgCisgICAgZGVmIGdldF92YXJpYWJsZXMoc2VsZik6CisgICAgICAgIHJldHVybiBkaWN0KHNlbGYuX2VudikKKyAgICAgICAgCisgICAgZGVmIGV4cG9ydChzZWxmLCBrZXksIHZhbHVlPU5vbmUpOgorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGZba2V5XSA9IHZhbHVlCisgICAgICAgIHNlbGYuX2V4cG9ydGVkLmFkZChrZXkpCisgICAgICAgIAorICAgIGRlZiBnZXRfZXhwb3J0ZWQoc2VsZik6CisgICAgICAgIHJldHVybiBbKGssc2VsZi5fZW52LmdldChrKSkgZm9yIGsgaW4gc2VsZi5fZXhwb3J0ZWRdCisgICAgICAgICAgICAKKyAgICBkZWYgc3BsaXRfZmllbGRzKHNlbGYsIHdvcmQpOgorICAgICAgICBpZiBub3Qgc2VsZi5faWZzX3dzIG9yIG5vdCB3b3JkOgorICAgICAgICAgICAgcmV0dXJuIFt3b3JkXQorICAgICAgICByZXR1cm4gcmUuc3BsaXQoc2VsZi5faWZzX3JlLCB3b3JkKQorICAgCisgICAgZGVmIF91cGRhdGVfaWZzKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIiIiVXBkYXRlIHRoZSBzcGxpdF9maWVsZHMgcmVsYXRlZCB2YXJpYWJsZXMgd2hlbiBJRlMgY2hhcmFjdGVyIHNldCBpcworICAgICAgICBjaGFuZ2VkLgorICAgICAgICAiIiIKKyAgICAgICAgIyBUT0RPOiBoYW5kbGUgTlVMTCBJRlMKKyAgICAgICAgCisgICAgICAgICMgU2VwYXJhdGUgY2hhcmFjdGVycyBpbiB3aGl0ZXNwYWNlIGFuZCBub24td2hpdGVzcGFjZQorICAgICAgICBjaGFycyA9IHNldCh2YWx1ZSkKKyAgICAgICAgd3MgPSBbYyBmb3IgYyBpbiBjaGFycyBpZiBjIGluIF9JRlNfV0hJVEVTUEFDRVNdCisgICAgICAgIG53cyA9IFtjIGZvciBjIGluIGNoYXJzIGlmIGMgbm90IGluIF9JRlNfV0hJVEVTUEFDRVNdCisgICAgICAgIAorICAgICAgICAjIEtlZXAgd2hpdGVzcGFjZXMgaW4gYSBzdHJpbmcgZm9yIGxlZnQgYW5kIHJpZ2h0IHN0cmlwcGluZworICAgICAgICBzZWxmLl9pZnNfd3MgPSAnJy5qb2luKHdzKQorICAgICAgICAKKyAgICAgICAgIyBCdWlsZCBhIHJlZ2V4cCB0byBzcGxpdCBmaWVsZHMKKyAgICAgICAgdHJhaWxpbmcgPSAnWycgKyAnJy5qb2luKFtyZS5lc2NhcGUoYykgZm9yIGMgaW4gd3NdKSArICddJworICAgICAgICBpZiBud3M6CisgICAgICAgICAgICAjIEZpcnN0LCB0aGUgc2luZ2xlIG5vbi13aGl0ZXNwYWNlIG9jY3VyZW5jZS4KKyAgICAgICAgICAgIG53cyA9ICdbJyArICcnLmpvaW4oW3JlLmVzY2FwZShjKSBmb3IgYyBpbiBud3NdKSArICddJworICAgICAgICAgICAgbndzID0gJyg/OicgKyB0cmFpbGluZyArICcqJyArIG53cyArIHRyYWlsaW5nICsgJyonICsgJ3wnICsgdHJhaWxpbmcgKyAnKyknCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFRoZW4gbWl4IGFsbCBwYXJ0cyB3aXRoIHF1YW50aWZpZXJzCisgICAgICAgICAgICBud3MgPSB0cmFpbGluZyArICcrJworICAgICAgICBzZWxmLl9pZnNfcmUgPSByZS5jb21waWxlKG53cykKKyAgICAgICAKKyAgICBkZWYgaGFzX29wdChzZWxmLCBvcHQsIHZhbD1Ob25lKToKKyAgICAgICAgcmV0dXJuIChvcHQsIHZhbCkgaW4gc2VsZi5fb3B0CisgICAgICAgIAorICAgIGRlZiBzZXRfb3B0KHNlbGYsIG9wdCwgdmFsPU5vbmUpOgorICAgICAgICBzZWxmLl9vcHQuYWRkKChvcHQsIHZhbCkpCisgICAgICAgIAorICAgIGRlZiBmaW5kX2luX3BhdGgoc2VsZiwgbmFtZSwgcHdkPUZhbHNlKToKKyAgICAgICAgcGF0aCA9IHNlbGYuX2Vudi5nZXQoJ1BBVEgnLCAnJykuc3BsaXQob3MucGF0aHNlcCkKKyAgICAgICAgaWYgcHdkOgorICAgICAgICAgICAgcGF0aFs6MF0gPSBbc2VsZlsnUFdEJ11dCisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKKyAgICAgICAgICAgIHJldHVybiB3aW4zMl9maW5kX2luX3BhdGgobmFtZSwgc2VsZi5fZW52LmdldCgnUEFUSCcsICcnKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorICAgICAgICAgICAgCisgICAgZGVmIGRlZmluZV9mdW5jdGlvbihzZWxmLCBuYW1lLCBib2R5KToKKyAgICAgICAgaWYgbm90IGlzX25hbWUobmFtZSk6CisgICAgICAgICAgICByYWlzZSBTaGVsbFN5bnRheEVycm9yKCclcyBpcyBub3QgYSB2YWxpZCBmdW5jdGlvbiBuYW1lJyAlIHJlcHIobmFtZSkpCisgICAgICAgIHNlbGYuX2Z1bmN0aW9uc1tuYW1lXSA9IGJvZHkKKyAgICAgICAgCisgICAgZGVmIHJlbW92ZV9mdW5jdGlvbihzZWxmLCBuYW1lKToKKyAgICAgICAgZGVsIHNlbGYuX2Z1bmN0aW9uc1tuYW1lXQorICAgICAgICAKKyAgICBkZWYgaXNfZnVuY3Rpb24oc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBuYW1lIGluIHNlbGYuX2Z1bmN0aW9ucworICAgICAgICAKKyAgICBkZWYgZ2V0X2Z1bmN0aW9uKHNlbGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5fZnVuY3Rpb25zLmdldChuYW1lKQorICAgICAgICAKKyAgICAgICAKK25hbWVfY2hhcnNldCA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OV8nCituYW1lX2NoYXJzZXQgPSBkaWN0KHppcChuYW1lX2NoYXJzZXQsbmFtZV9jaGFyc2V0KSkKKyAgICAgICAgICAgCitkZWYgbWF0Y2hfbmFtZShzKToKKyAgICAiIiJSZXR1cm4gdGhlIGxlbmd0aCBpbiBjaGFyYWN0ZXJzIG9mIHRoZSBsb25nZXN0IHByZWZpeCBtYWRlIG9mIG5hbWUKKyAgICBhbGxvd2VkIGNoYXJhY3RlcnMgaW4gcy4KKyAgICAiIiIKKyAgICBmb3IgaSxjIGluIGVudW1lcmF0ZShzKToKKyAgICAgICAgaWYgYyBub3QgaW4gbmFtZV9jaGFyc2V0OgorICAgICAgICAgICAgcmV0dXJuIHNbOmldCisgICAgcmV0dXJuIHMKKyAgICAKK2RlZiBpc19uYW1lKHMpOgorICAgIHJldHVybiBsZW4oW2MgZm9yIGMgaW4gcyBpZiBjIG5vdCBpbiBuYW1lX2NoYXJzZXRdKTw9MAorICAgIAorZGVmIGlzX3NwZWNpYWxfcGFyYW0oYyk6CisgICAgcmV0dXJuIGxlbihjKT09MSBhbmQgYyBpbiAoJ0AnLCcqJywnIycsJz8nLCctJywnJCcsJyEnLCcwJykKKyAgICAKK2RlZiB1dGlsaXR5X25vdF9pbXBsZW1lbnRlZChuYW1lLCAqYXJncywgKiprd2FyZ3MpOgorICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJyVzIHV0aWxpdHkgaXMgbm90IGltcGxlbWVudGVkJyAlIG5hbWUpCisgICAgCisKK2NsYXNzIFV0aWxpdHk6CisgICAgIiIiRGVmaW5lIHV0aWxpdGllcyBwcm9wZXJ0aWVzOgorICAgIGZ1bmMgLS0gdXRpbGl0eSBjYWxsYWJsZS4gU2VlIGJ1aWx0aW4gbW9kdWxlIGZvciB1dGlsaXR5IHNhbXBsZXMuCisgICAgaXNfc3BlY2lhbCAtLSBzZWUgWENVIDIuOC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnVuYywgaXNfc3BlY2lhbD0wKToKKyAgICAgICAgc2VsZi5mdW5jID0gZnVuYworICAgICAgICBzZWxmLmlzX3NwZWNpYWwgPSBib29sKGlzX3NwZWNpYWwpCisKKworZGVmIGVuY29kZWFyZ3MoYXJncyk6CisgICAgZGVmIGVuY29kZWFyZyhzKToKKyAgICAgICAgbGluZXMgPSBiYXNlNjQuZW5jb2Rlc3RyaW5nKHMpCisgICAgICAgIGxpbmVzID0gW2wuc3BsaXRsaW5lcygpWzBdIGZvciBsIGluIGxpbmVzXQorICAgICAgICByZXR1cm4gJycuam9pbihsaW5lcykKKworICAgIHMgPSBwaWNrbGUuZHVtcHMoYXJncykKKyAgICByZXR1cm4gZW5jb2RlYXJnKHMpCisKK2RlZiBkZWNvZGVhcmdzKHMpOgorICAgIHMgPSBiYXNlNjQuZGVjb2Rlc3RyaW5nKHMpCisgICAgcmV0dXJuIHBpY2tsZS5sb2FkcyhzKQorICAgIAorCitjbGFzcyBHbG9iRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2NsYXNzIE9wdGlvbnM6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAjIFRydWUgaWYgTWVyY3VyaWFsIG9wZXJhdGVzIHdpdGggYmluYXJ5IHN0cmVhbXMKKyAgICAgICAgc2VsZi5oZ2JpbmFyeSA9IFRydWUKKworY2xhc3MgSW50ZXJwcmV0ZXI6CisgICAgIyBJbXBsZW1lbnRhdGlvbiBpcyB2ZXJ5IGJhc2ljOiB0aGUgZXhlY3V0ZSgpIG1ldGhvZCBqdXN0IG1ha2VzIGEgREZTIG9uIHRoZQorICAgICMgQVNUIGFuZCBleGVjdXRlIG5vZGVzIG9uZSBieSBvbmUuIE5vZGVzIGFyZSB0dXBsZSAobmFtZSxvYmopIHdoZXJlIG5hbWUKKyAgICAjIGlzIGEgc3RyaW5nIGlkZW50aWZpZXIgYW5kIG9iaiB0aGUgQVNUIGVsZW1lbnQgcmV0dXJuZWQgYnkgdGhlIHBhcnNlci4KKyAgICAjCisgICAgIyBIYW5kbGVyIGFyZSBuYW1lZCBhZnRlciB0aGUgbm9kZSBpZGVudGlmaWVycy4KKyAgICAjIFRPRE86IGNoZWNrIG5vZGUgbmFtZXMgYW5kIHJlbW92ZSB0aGUgc3dpdGNoIGluIGV4ZWN1dGUgd2l0aCBzb21lCisgICAgIyBkeW5hbWljIGdldGF0dHIoKSBjYWxsIHRvIGZpbmQgbm9kZSBoYW5kbGVycy4KKyAgICAiIiJTaGVsbCBpbnRlcnByZXRlci4KKyAgICAKKyAgICBUaGUgZm9sbG93aW5nIGRlYnVnZ2luZyBmbGFncyBjYW4gYmUgcGFzc2VkOgorICAgIGRlYnVnLXBhcnNpbmcgLSBlbmFibGUgUExZIGRlYnVnZ2luZy4KKyAgICBkZWJ1Zy10cmVlIC0gcHJpbnQgdGhlIGdlbmVyYXRlZCBBU1QuCisgICAgZGVidWctY21kIC0gdHJhY2UgY29tbWFuZCBleGVjdXRpb24gYmVmb3JlIHdvcmQgZXhwYW5zaW9uLCBwbHVzIGV4aXQgc3RhdHVzLgorICAgIGRlYnVnLXV0aWxpdHkgLSB0cmFjZSB1dGlsaXR5IGV4ZWN1dGlvbi4KKyAgICAiIiIKKyAgICAKKyAgICAjIExpc3Qgc3VwcG9ydGVkIGNvbW1hbmRzLgorICAgIENPTU1BTkRTID0geworICAgICAgICAnY2F0JzogICAgICAgVXRpbGl0eShidWlsdGluLnV0aWxpdHlfY2F0LCksCisgICAgICAgICdjZCc6ICAgICAgIFV0aWxpdHkoYnVpbHRpbi51dGlsaXR5X2NkLCksCisgICAgICAgICc6JzogICAgICAgIFV0aWxpdHkoYnVpbHRpbi51dGlsaXR5X2NvbG9uLCksCisgICAgICAgICdlY2hvJzogICAgIFV0aWxpdHkoYnVpbHRpbi51dGlsaXR5X2VjaG8pLAorICAgICAgICAnZW52JzogICAgICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9lbnYpLAorICAgICAgICAnZXhpdCc6ICAgICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9leGl0KSwKKyAgICAgICAgJ2V4cG9ydCc6ICAgVXRpbGl0eShidWlsdGluLmJ1aWx0aW5fZXhwb3J0LCAgICAgaXNfc3BlY2lhbD0xKSwKKyAgICAgICAgJ2VncmVwJzogICAgVXRpbGl0eShidWlsdGluLnV0aWxpdHlfZWdyZXApLAorICAgICAgICAnZmdyZXAnOiAgICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9mZ3JlcCksCisgICAgICAgICdndW56aXAnOiAgIFV0aWxpdHkoYnVpbHRpbi51dGlsaXR5X2d1bnppcCksCisgICAgICAgICdraWxsJzogICAgIFV0aWxpdHkoYnVpbHRpbi51dGlsaXR5X2tpbGwpLAorICAgICAgICAnbWtkaXInOiAgICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9ta2RpciksCisgICAgICAgICduZXRzdGF0JzogIFV0aWxpdHkoYnVpbHRpbi51dGlsaXR5X25ldHN0YXQpLAorICAgICAgICAncHJpbnRmJzogICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9wcmludGYpLAorICAgICAgICAncHdkJzogICAgICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9wd2QpLAorICAgICAgICAncmV0dXJuJzogICBVdGlsaXR5KGJ1aWx0aW4uYnVpbHRpbl9yZXR1cm4sICAgICBpc19zcGVjaWFsPTEpLAorICAgICAgICAnc2VkJzogICAgICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9zZWQsKSwKKyAgICAgICAgJ3NldCc6ICAgICAgVXRpbGl0eShidWlsdGluLmJ1aWx0aW5fc2V0LCksCisgICAgICAgICdzaGlmdCc6ICAgIFV0aWxpdHkoYnVpbHRpbi5idWlsdGluX3NoaWZ0LCksCisgICAgICAgICdzbGVlcCc6ICAgIFV0aWxpdHkoYnVpbHRpbi51dGlsaXR5X3NsZWVwLCksCisgICAgICAgICdzb3J0JzogICAgIFV0aWxpdHkoYnVpbHRpbi51dGlsaXR5X3NvcnQsKSwKKyAgICAgICAgJ3RyYXAnOiAgICAgVXRpbGl0eShidWlsdGluLmJ1aWx0aW5fdHJhcCwgICAgICAgaXNfc3BlY2lhbD0xKSwKKyAgICAgICAgJ3RydWUnOiAgICAgVXRpbGl0eShidWlsdGluLnV0aWxpdHlfdHJ1ZSksCisgICAgICAgICd1bnNldCc6ICAgIFV0aWxpdHkoYnVpbHRpbi5idWlsdGluX3Vuc2V0LCAgICAgIGlzX3NwZWNpYWw9MSksCisgICAgICAgICd3YWl0JzogICAgIFV0aWxpdHkoYnVpbHRpbi5idWlsdGluX3dhaXQsICAgICAgIGlzX3NwZWNpYWw9MSksCisgICAgfQorICAgIAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwd2QsIGRlYnVnZmxhZ3MgPSBbXSwgZW52PU5vbmUsIHJlZGlycz1Ob25lLCBzdGRpbj1Ob25lLAorICAgICAgICAgICAgICAgICBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUsIG9wdHM9T3B0aW9ucygpKToKKyAgICAgICAgc2VsZi5fZW52ID0gZW52CisgICAgICAgIGlmIHNlbGYuX2VudiBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fZW52ID0gRW52aXJvbm1lbnQocHdkKQorICAgICAgICBzZWxmLl9jaGlsZHJlbiA9IHt9CisgICAgICAgICAgICAKKyAgICAgICAgc2VsZi5fcmVkaXJzID0gcmVkaXJzCisgICAgICAgIHNlbGYuX2Nsb3NlX3JlZGlycyA9IEZhbHNlCisgICAgICAgIAorICAgICAgICBpZiBzZWxmLl9yZWRpcnMgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHN0ZGluIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc3RkaW4gPSBzeXMuc3RkaW4KKyAgICAgICAgICAgIGlmIHN0ZG91dCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHN0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgICAgIGlmIHN0ZGVyciBpcyBOb25lOgorICAgICAgICAgICAgICAgIHN0ZGVyciA9IHN5cy5zdGRlcnIKKyAgICAgICAgICAgIHN0ZGluID0gRmlsZVdyYXBwZXIoJ3InLCBzdGRpbiwgRmFsc2UpCisgICAgICAgICAgICBzdGRvdXQgPSBGaWxlV3JhcHBlcigndycsIHN0ZG91dCwgRmFsc2UpCisgICAgICAgICAgICBzdGRlcnIgPSBGaWxlV3JhcHBlcigndycsIHN0ZGVyciwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLl9yZWRpcnMgPSBSZWRpcmVjdGlvbnMoc3RkaW4sIHN0ZG91dCwgc3RkZXJyKQorICAgICAgICAgICAgc2VsZi5fY2xvc2VfcmVkaXJzID0gVHJ1ZQorICAgICAgICAgICAgCisgICAgICAgIHNlbGYuX2RlYnVnZmxhZ3MgPSBsaXN0KGRlYnVnZmxhZ3MpCisgICAgICAgIHNlbGYuX2xvZ2ZpbGUgPSBzeXMuc3RkZXJyCisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRzCisgICAgICAgIAorICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIiIiTXVzdCBiZSBjYWxsZWQgd2hlbiB0aGUgaW50ZXJwcmV0ZXIgaXMgbm8gbG9uZ2VyIHVzZWQuIiIiCisgICAgICAgIHNjcmlwdCA9IHNlbGYuX2Vudi50cmFwcy5nZXQoJ0VYSVQnKQorICAgICAgICBpZiBzY3JpcHQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5leGVjdXRlX3NjcmlwdChzY3JpcHQ9c2NyaXB0KQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBpZiBzZWxmLl9yZWRpcnMgaXMgbm90IE5vbmUgYW5kIHNlbGYuX2Nsb3NlX3JlZGlyczoKKyAgICAgICAgICAgIHNlbGYuX3JlZGlycy5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9yZWRpcnMgPSBOb25lCisgICAgICAgICAgICAKKyAgICBkZWYgbG9nKHNlbGYsIHMpOgorICAgICAgICBzZWxmLl9sb2dmaWxlLndyaXRlKHMpCisgICAgICAgIHNlbGYuX2xvZ2ZpbGUuZmx1c2goKQorICAgICAgICAgICAgCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBzZWxmLl9lbnZba2V5XQorICAgICAgICAKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX2VudltrZXldID0gdmFsdWUKKworICAgIGRlZiBvcHRpb25zKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fb3B0aW9ucworCisgICAgZGVmIHJlZGlyZWN0KHNlbGYsIHJlZGlycywgaW9zKToKKyAgICAgICAgZGVmIGFkZF9yZWRpcihpbyk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGlvLCBweXNoeWFjYy5JT1JlZGlyZWN0KToKKyAgICAgICAgICAgICAgICByZWRpcnMuYWRkKHNlbGYsIGlvLm9wLCBpby5maWxlbmFtZSwgaW8uaW9fbnVtYmVyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZWRpcnMuYWRkX2hlcmVfZG9jdW1lbnQoc2VsZiwgaW8ubmFtZSwgaW8uY29udGVudCwgaW8uaW9fbnVtYmVyKQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgbWFwKGFkZF9yZWRpciwgaW9zKQorICAgICAgICByZXR1cm4gcmVkaXJzCisgICAgICAgICAgICAKKyAgICBkZWYgZXhlY3V0ZV9zY3JpcHQoc2VsZiwgc2NyaXB0PU5vbmUsIGFzdD1Ob25lLCBzb3VyY2VkPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRwYXRoPU5vbmUpOgorICAgICAgICAiIiJJZiBzY3JpcHQgaXMgbm90IE5vbmUsIHBhcnNlIHRoZSBpbnB1dC4gT3RoZXJ3aXNlIHRha2VzIHRoZSBzdXBwbGllZAorICAgICAgICBBU1QuIFRoZW4gZXhlY3V0ZSB0aGUgQVNULgorICAgICAgICBSZXR1cm4gdGhlIHNjcmlwdCBleGl0IHN0YXR1cy4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNjcmlwdHBhdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5fZW52WycwJ10gPSBvcy5wYXRoLmFic3BhdGgoc2NyaXB0cGF0aCkKKworICAgICAgICAgICAgaWYgc2NyaXB0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGRlYnVnX3BhcnNpbmcgPSAoJ2RlYnVnLXBhcnNpbmcnIGluIHNlbGYuX2RlYnVnZmxhZ3MpICAgIAorICAgICAgICAgICAgICAgIGNtZHMsIHNjcmlwdCA9IHB5c2h5YWNjLnBhcnNlKHNjcmlwdCwgVHJ1ZSwgZGVidWdfcGFyc2luZykKKyAgICAgICAgICAgICAgICBpZiAnZGVidWctdHJlZScgaW4gc2VsZi5fZGVidWdmbGFnczoKKyAgICAgICAgICAgICAgICAgICAgcHlzaHlhY2MucHJpbnRfY29tbWFuZHMoY21kcywgc2VsZi5fbG9nZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9nZmlsZS5mbHVzaCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNtZHMsIHNjcmlwdCA9IGFzdCwgJycgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBzdGF0dXMgPSAwCisgICAgICAgICAgICBmb3IgY21kIGluIGNtZHM6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLmV4ZWN1dGUoY21kKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGl0U2lnbmFsIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGlmIHNvdXJjZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBpbnQoZS5hcmdzWzBdKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzCisgICAgICAgICAgICAgICAgZXhjZXB0IFNoZWxsRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2VudlsnPyddID0gMQorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBzZWxmLl9kZWJ1Z2ZsYWdzIG9yICdkZWJ1Zy1jbWQnIGluIHNlbGYuX2RlYnVnZmxhZ3M6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nKCdyZXR1cm5jb2RlICcgKyBzdHIoc3RhdHVzKSsgJ1xuJykKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXMKKyAgICAgICAgZXhjZXB0IENvbW1hbmROb3RGb3VuZCBhcyBlOgorICAgICAgICAgICAgcHJpbnQgPj5zZWxmLl9yZWRpcnMuc3RkZXJyLCBzdHIoZSkKKyAgICAgICAgICAgIHNlbGYuX3JlZGlycy5zdGRlcnIuZmx1c2goKQorICAgICAgICAgICAgIyBDb21tYW5kIG5vdCBmb3VuZCBieSBub24taW50ZXJhY3RpdmUgc2hlbGwKKyAgICAgICAgICAgICMgcmV0dXJuIDEyNworICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0IFJlZGlyZWN0aW9uRXJyb3IgYXMgZToKKyAgICAgICAgICAgICMgVE9ETzogc2hvdWxkIGJlIGhhbmRsZWQgZGVwZW5kaW5nIG9uIHRoZSB1dGlsaXR5IHN0YXR1cworICAgICAgICAgICAgcHJpbnQgPj5zZWxmLl9yZWRpcnMuc3RkZXJyLCBzdHIoZSkKKyAgICAgICAgICAgIHNlbGYuX3JlZGlycy5zdGRlcnIuZmx1c2goKQorICAgICAgICAgICAgIyBDb21tYW5kIG5vdCBmb3VuZCBieSBub24taW50ZXJhY3RpdmUgc2hlbGwKKyAgICAgICAgICAgICMgcmV0dXJuIDEyNworICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBkb3Rjb21tYW5kKHNlbGYsIGVudiwgYXJncyk6CisgICAgICAgIGlmIGxlbihhcmdzKSA8IDE6CisgICAgICAgICAgICByYWlzZSBTaGVsbEVycm9yKCcuIGV4cGVjdHMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50JykKKyAgICAgICAgcGF0aCA9IGFyZ3NbMF0KKyAgICAgICAgaWYgJy8nIG5vdCBpbiBwYXRoOgorICAgICAgICAgICAgZm91bmQgPSBlbnYuZmluZF9pbl9wYXRoKGFyZ3NbMF0sIFRydWUpCisgICAgICAgICAgICBpZiBmb3VuZDoKKyAgICAgICAgICAgICAgICBwYXRoID0gZm91bmRbMF0KKyAgICAgICAgc2NyaXB0ID0gZmlsZShwYXRoKS5yZWFkKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuZXhlY3V0ZV9zY3JpcHQoc2NyaXB0PXNjcmlwdCwgc291cmNlZD1UcnVlKQorCisgICAgZGVmIGV4ZWN1dGUoc2VsZiwgdG9rZW4sIHJlZGlycz1Ob25lKToKKyAgICAgICAgIiIiRXhlY3V0ZSBhbmQgQVNUIHN1YnRyZWUgd2l0aCBzdXBwbGllZCByZWRpcmVjdGlvbnMgb3ZlcnJpZGluZyBkZWZhdWx0CisgICAgICAgIGludGVycHJldGVyIG9uZXMuCisgICAgICAgIFJldHVybiB0aGUgZXhpdCBzdGF0dXMuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgdG9rZW46CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgCisgICAgICAgIGlmIHJlZGlycyBpcyBOb25lOgorICAgICAgICAgICAgcmVkaXJzID0gc2VsZi5fcmVkaXJzCisgICAgICAgICAgICAKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0b2tlbiwgbGlzdCk6CisgICAgICAgICAgICAjIENvbW1hbmRzIHNlcXVlbmNlCisgICAgICAgICAgICByZXMgPSAwCisgICAgICAgICAgICBmb3IgdCBpbiB0b2tlbjoKKyAgICAgICAgICAgICAgICByZXMgPSBzZWxmLmV4ZWN1dGUodCwgcmVkaXJzKQorICAgICAgICAgICAgcmV0dXJuIHJlcworCisgICAgICAgIHR5cGUsIHZhbHVlID0gdG9rZW4KKyAgICAgICAgc3RhdHVzID0gMAorICAgICAgICBpZiB0eXBlPT0nc2ltcGxlX2NvbW1hbmQnOgorICAgICAgICAgICAgcmVkaXJzX2NvcHkgPSByZWRpcnMuY2xvbmUoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgVE9ETzogZGVmaW5lIGFuZCBoYW5kbGUgY29tbWFuZCByZXR1cm4gdmFsdWVzCisgICAgICAgICAgICAgICAgIyBUT0RPOiBpbXBsZW1lbnQgc2V0IC1lCisgICAgICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5fZXhlY3V0ZV9zaW1wbGVfY29tbWFuZCh2YWx1ZSwgcmVkaXJzX2NvcHkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHJlZGlyc19jb3B5LmNsb3NlKCkKKyAgICAgICAgZWxpZiB0eXBlPT0ncGlwZWxpbmUnOgorICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5fZXhlY3V0ZV9waXBlbGluZSh2YWx1ZSwgcmVkaXJzKQorICAgICAgICBlbGlmIHR5cGU9PSdhbmRfb3InOgorICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5fZXhlY3V0ZV9hbmRfb3IodmFsdWUsIHJlZGlycykKKyAgICAgICAgZWxpZiB0eXBlPT0nZm9yX2NsYXVzZSc6CisgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLl9leGVjdXRlX2Zvcl9jbGF1c2UodmFsdWUsIHJlZGlycykKKyAgICAgICAgZWxpZiB0eXBlPT0nd2hpbGVfY2xhdXNlJzoKKyAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuX2V4ZWN1dGVfd2hpbGVfY2xhdXNlKHZhbHVlLCByZWRpcnMpCisgICAgICAgIGVsaWYgdHlwZT09J2Z1bmN0aW9uX2RlZmluaXRpb24nOgorICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5fZXhlY3V0ZV9mdW5jdGlvbl9kZWZpbml0aW9uKHZhbHVlLCByZWRpcnMpCisgICAgICAgIGVsaWYgdHlwZT09J2JyYWNlX2dyb3VwJzoKKyAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuX2V4ZWN1dGVfYnJhY2VfZ3JvdXAodmFsdWUsIHJlZGlycykKKyAgICAgICAgZWxpZiB0eXBlPT0naWZfY2xhdXNlJzoKKyAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuX2V4ZWN1dGVfaWZfY2xhdXNlKHZhbHVlLCByZWRpcnMpCisgICAgICAgIGVsaWYgdHlwZT09J3N1YnNoZWxsJzoKKyAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuc3Vic2hlbGwoYXN0PXZhbHVlLmNtZHMsIHJlZGlycz1yZWRpcnMpCisgICAgICAgIGVsaWYgdHlwZT09J2FzeW5jJzoKKyAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuX2FzeW5jbGlzdCh2YWx1ZSkKKyAgICAgICAgZWxpZiB0eXBlPT0ncmVkaXJlY3RfbGlzdCc6CisgICAgICAgICAgICByZWRpcnNfY29weSA9IHNlbGYucmVkaXJlY3QocmVkaXJzLmNsb25lKCksIHZhbHVlLnJlZGlycykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLmV4ZWN1dGUodmFsdWUuY21kLCByZWRpcnNfY29weSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcmVkaXJzX2NvcHkuY2xvc2UoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignVW5zdXBwb3J0ZWQgdG9rZW4gdHlwZSAnICsgdHlwZSkKKworICAgICAgICBpZiBzdGF0dXMgPCAwOgorICAgICAgICAgICAgc3RhdHVzID0gMjU1CisgICAgICAgIHJldHVybiBzdGF0dXMKKyAgICAgICAgICAgIAorICAgIGRlZiBfZXhlY3V0ZV9pZl9jbGF1c2Uoc2VsZiwgaWZfY2xhdXNlLCByZWRpcnMpOgorICAgICAgICBjb25kX3N0YXR1cyA9IHNlbGYuZXhlY3V0ZShpZl9jbGF1c2UuY29uZCwgcmVkaXJzKQorICAgICAgICBpZiBjb25kX3N0YXR1cz09MDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmV4ZWN1dGUoaWZfY2xhdXNlLmlmX2NtZHMsIHJlZGlycykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmV4ZWN1dGUoaWZfY2xhdXNlLmVsc2VfY21kcywgcmVkaXJzKQorICAgICAgCisgICAgZGVmIF9leGVjdXRlX2JyYWNlX2dyb3VwKHNlbGYsIGdyb3VwLCByZWRpcnMpOgorICAgICAgICBzdGF0dXMgPSAwCisgICAgICAgIGZvciBjbWQgaW4gZ3JvdXAuY21kczoKKyAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuZXhlY3V0ZShjbWQsIHJlZGlycykKKyAgICAgICAgcmV0dXJuIHN0YXR1cworICAgICAgICAgICAgCisgICAgZGVmIF9leGVjdXRlX2Z1bmN0aW9uX2RlZmluaXRpb24oc2VsZiwgZnVuZGVmLCByZWRpcnMpOgorICAgICAgICBzZWxmLl9lbnYuZGVmaW5lX2Z1bmN0aW9uKGZ1bmRlZi5uYW1lLCBmdW5kZWYuYm9keSkKKyAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgIAorICAgIGRlZiBfZXhlY3V0ZV93aGlsZV9jbGF1c2Uoc2VsZiwgd2hpbGVfY2xhdXNlLCByZWRpcnMpOgorICAgICAgICBzdGF0dXMgPSAwCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBjb25kX3N0YXR1cyA9IDAKKyAgICAgICAgICAgIGZvciBjb25kIGluIHdoaWxlX2NsYXVzZS5jb25kaXRpb246CisgICAgICAgICAgICAgICAgY29uZF9zdGF0dXMgPSBzZWxmLmV4ZWN1dGUoY29uZCwgcmVkaXJzKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgY29uZF9zdGF0dXM6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciBjbWQgaW4gd2hpbGVfY2xhdXNlLmNtZHM6CisgICAgICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5leGVjdXRlKGNtZCwgcmVkaXJzKQorICAgICAgICAgICAgICAgIAorICAgICAgICByZXR1cm4gc3RhdHVzCisgICAgICAgICAgICAKKyAgICBkZWYgX2V4ZWN1dGVfZm9yX2NsYXVzZShzZWxmLCBmb3JfY2xhdXNlLCByZWRpcnMpOgorICAgICAgICBpZiBub3QgaXNfbmFtZShmb3JfY2xhdXNlLm5hbWUpOgorICAgICAgICAgICAgcmFpc2UgU2hlbGxTeW50YXhFcnJvcignJXMgaXMgbm90IGEgdmFsaWQgbmFtZScgJSByZXByKGZvcl9jbGF1c2UubmFtZSkpCisgICAgICAgIGl0ZW1zID0gbWFwcGVuZChzZWxmLmV4cGFuZF90b2tlbiwgZm9yX2NsYXVzZS5pdGVtcykKKyAgICAgICAgCisgICAgICAgIHN0YXR1cyA9IDAgICAgCisgICAgICAgIGZvciBpdGVtIGluIGl0ZW1zOgorICAgICAgICAgICAgc2VsZi5fZW52W2Zvcl9jbGF1c2UubmFtZV0gPSBpdGVtCisgICAgICAgICAgICBmb3IgY21kIGluIGZvcl9jbGF1c2UuY21kczoKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLmV4ZWN1dGUoY21kLCByZWRpcnMpCisgICAgICAgIHJldHVybiBzdGF0dXMKKyAgICAgICAgICAgIAorICAgIGRlZiBfZXhlY3V0ZV9hbmRfb3Ioc2VsZiwgb3JfYW5kLCByZWRpcnMpOgorICAgICAgICByZXMgPSBzZWxmLmV4ZWN1dGUob3JfYW5kLmxlZnQsIHJlZGlycykgICAgICAgIAorICAgICAgICBpZiAob3JfYW5kLm9wPT0nJiYnIGFuZCByZXM9PTApIG9yIChvcl9hbmQub3AhPScmJicgYW5kIHJlcyE9MCk6CisgICAgICAgICAgICByZXMgPSBzZWxmLmV4ZWN1dGUob3JfYW5kLnJpZ2h0LCByZWRpcnMpCisgICAgICAgIHJldHVybiByZXMKKyAgICAgICAgICAgIAorICAgIGRlZiBfZXhlY3V0ZV9waXBlbGluZShzZWxmLCBwaXBlbGluZSwgcmVkaXJzKTogICAgICAgICAgICAKKyAgICAgICAgaWYgbGVuKHBpcGVsaW5lLmNvbW1hbmRzKT09MToKKyAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuZXhlY3V0ZShwaXBlbGluZS5jb21tYW5kc1swXSwgcmVkaXJzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBFeGVjdXRlIGFsbCBjb21tYW5kcyBvbmUgYWZ0ZXIgdGhlIG90aGVyCisgICAgICAgICAgICBzdGF0dXMgPSAwCisgICAgICAgICAgICBpbnBhdGgsIG91dHBhdGggPSBOb25lLCBOb25lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBDb21tYW5kcyBpbnB1dHMgYW5kIG91dHB1dHMgY2Fubm90IHJlYWxseSBiZSBwbHVnZ2VkIGFzIGRvbmUKKyAgICAgICAgICAgICAgICAjIGJ5IGEgcmVhbCBzaGVsbC4gUnVuIGNvbW1hbmRzIHNlcXVlbnRpYWxseSBhbmQgY2hhaW4gdGhlaXIKKyAgICAgICAgICAgICAgICAjIGlucHV0L291dHB1dCB0aHJvdWdodCB0ZW1wb3JhcnkgZmlsZXMuCisgICAgICAgICAgICAgICAgdG1wZmQsIGlucGF0aCA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHRtcGZkKQorICAgICAgICAgICAgICAgIHRtcGZkLCBvdXRwYXRoID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgICAgICAgICAgb3MuY2xvc2UodG1wZmQpCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaW5wYXRoID0gd2luMzJfdG9fdW5peF9wYXRoKGlucGF0aCkKKyAgICAgICAgICAgICAgICBvdXRwYXRoID0gd2luMzJfdG9fdW5peF9wYXRoKG91dHBhdGgpCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIGksIGNtZCBpbiBlbnVtZXJhdGUocGlwZWxpbmUuY29tbWFuZHMpOgorICAgICAgICAgICAgICAgICAgICBjYWxsX3JlZGlycyA9IHJlZGlycy5jbG9uZSgpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGkhPTA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbF9yZWRpcnMuYWRkKHNlbGYsICc8JywgaW5wYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaSE9bGVuKHBpcGVsaW5lLmNvbW1hbmRzKS0xOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxfcmVkaXJzLmFkZChzZWxmLCAnPicsIG91dHBhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuZXhlY3V0ZShjbWQsIGNhbGxfcmVkaXJzKQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAjIENoYWluIGlucHV0cy9vdXRwdXRzCisgICAgICAgICAgICAgICAgICAgICAgICBpbnBhdGgsIG91dHBhdGggPSBvdXRwYXRoLCBpbnBhdGgKKyAgICAgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxfcmVkaXJzLmNsb3NlKCkgICAgICAgICAgICAKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgaWYgaW5wYXRoOiBvcy5yZW1vdmUoaW5wYXRoKQorICAgICAgICAgICAgICAgIGlmIG91dHBhdGg6IG9zLnJlbW92ZShvdXRwYXRoKQorICAgICAgICAKKyAgICAgICAgaWYgcGlwZWxpbmUucmV2ZXJzZV9zdGF0dXM6CisgICAgICAgICAgICBzdGF0dXMgPSBpbnQobm90IHN0YXR1cykKKyAgICAgICAgc2VsZi5fZW52Wyc/J10gPSBzdGF0dXMKKyAgICAgICAgcmV0dXJuIHN0YXR1cworICAgICAgICAKKyAgICBkZWYgX2V4ZWN1dGVfZnVuY3Rpb24oc2VsZiwgbmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgKm90aGVycyk6CisgICAgICAgIGFzc2VydCBpbnRlcnAgaXMgc2VsZgorICAgICAgICAKKyAgICAgICAgZnVuYyA9IGVudi5nZXRfZnVuY3Rpb24obmFtZSkKKyAgICAgICAgI1NldCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMKKyAgICAgICAgcHJldmFyZ3MgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByZXZhcmdzID0gZW52LnNldF9wb3NpdGlvbmFsX2FyZ3MoYXJncykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZWRpcnMgPSBSZWRpcmVjdGlvbnMoc3RkaW4uZHVwKCksIHN0ZG91dC5kdXAoKSwgc3RkZXJyLmR1cCgpKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5leGVjdXRlKGZ1bmMsIHJlZGlycykKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICByZWRpcnMuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IFJldHVyblNpZ25hbCBhcyBlOgorICAgICAgICAgICAgICAgIHN0YXR1cyA9IGludChlLmFyZ3NbMF0pCisgICAgICAgICAgICAgICAgZW52Wyc/J10gPSBzdGF0dXMKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXMKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICNSZXNldCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMKKyAgICAgICAgICAgIGlmIHByZXZhcmdzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGVudi5zZXRfcG9zaXRpb25hbF9hcmdzKHByZXZhcmdzKQorICAgICAgICAgICAgICAgIAorICAgIGRlZiBfZXhlY3V0ZV9zaW1wbGVfY29tbWFuZChzZWxmLCB0b2tlbiwgcmVkaXJzKToKKyAgICAgICAgIiIiQ2FuIHJhaXNlIFJldHVyblNpZ25hbCB3aGVuIHJldHVybiBidWlsdGluIGlzIGNhbGxlZCwgRXhpdFNpZ25hbCB3aGVuCisgICAgICAgIGV4aXQgaXMgY2FsbGVkLCBhbmQgb3RoZXIgc2hlbGwgZXhjZXB0aW9ucyB1cG9uIGJ1aWx0aW4gZmFpbHVyZXMuCisgICAgICAgICIiIgorICAgICAgICBkZWJ1Z19jb21tYW5kID0gJ2RlYnVnLWNtZCcgaW4gc2VsZi5fZGVidWdmbGFncworICAgICAgICBpZiBkZWJ1Z19jb21tYW5kOgorICAgICAgICAgICAgc2VsZi5sb2coJ3dvcmQnICsgcmVwcih0b2tlbi53b3JkcykgKyAnXG4nKQorICAgICAgICAgICAgc2VsZi5sb2coJ2Fzc2lnbnMnICsgcmVwcih0b2tlbi5hc3NpZ25zKSArICdcbicpCisgICAgICAgICAgICBzZWxmLmxvZygncmVkaXJzJyArIHJlcHIodG9rZW4ucmVkaXJzKSArICdcbicpCisgICAgICAgIAorICAgICAgICBpc19zcGVjaWFsID0gTm9uZQorICAgICAgICBlbnYgPSBzZWxmLl9lbnYKKyAgICAgICAgCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgV29yZCBleHBhbnNpb24KKyAgICAgICAgICAgIGFyZ3MgPSBbXQorICAgICAgICAgICAgZm9yIHdvcmQgaW4gdG9rZW4ud29yZHM6ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGFyZ3MgKz0gc2VsZi5leHBhbmRfdG9rZW4od29yZCkKKyAgICAgICAgICAgICAgICBpZiBpc19zcGVjaWFsIGlzIE5vbmUgYW5kIGFyZ3M6CisgICAgICAgICAgICAgICAgICAgIGlzX3NwZWNpYWwgPSBlbnYuaXNfZnVuY3Rpb24oYXJnc1swXSkgb3IgXAorICAgICAgICAgICAgICAgICAgICAgICAgKGFyZ3NbMF0gaW4gc2VsZi5DT01NQU5EUyBhbmQgc2VsZi5DT01NQU5EU1thcmdzWzBdXS5pc19zcGVjaWFsKQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiBkZWJ1Z19jb21tYW5kOgorICAgICAgICAgICAgICAgIHNlbGYubG9nKCdfZXhlY3V0ZV9zaW1wbGVfY29tbWFuZCcgKyBzdHIoYXJncykgKyAnXG4nKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgbm90IGFyZ3M6CisgICAgICAgICAgICAgICAgIyBSZWRpcmVjdGlvbnMgaGFwcGVuIGlzIGEgc3Vic2hlbGwKKyAgICAgICAgICAgICAgICByZWRpcnMgPSByZWRpcnMuY2xvbmUoKQorICAgICAgICAgICAgZWxpZiBub3QgaXNfc3BlY2lhbDoKKyAgICAgICAgICAgICAgICBlbnYgPSBzZWxmLl9lbnYuY2xvbmUoKQorICAgICAgICAgICAgCisgICAgICAgICAgICAjIFJlZGlyZWN0aW9ucworICAgICAgICAgICAgc2VsZi5yZWRpcmVjdChyZWRpcnMsIHRva2VuLnJlZGlycykKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICMgVmFyaWFibGVzIGFzc2lnbm1lbnRzCisgICAgICAgICAgICByZXMgPSAwCisgICAgICAgICAgICBmb3IgdHlwZSwoayx2KSBpbiB0b2tlbi5hc3NpZ25zOgorICAgICAgICAgICAgICAgIHN0YXR1cywgZXhwYW5kZWQgPSBzZWxmLmV4cGFuZF92YXJpYWJsZSgoayx2KSkKKyAgICAgICAgICAgICAgICBpZiBzdGF0dXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJlcyA9IHN0YXR1cworICAgICAgICAgICAgICAgIGlmIGFyZ3M6CisgICAgICAgICAgICAgICAgICAgIGVudi5leHBvcnQoaywgZXhwYW5kZWQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZW52W2tdID0gZXhwYW5kZWQKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIGFyZ3MgYW5kIGFyZ3NbMF0gaW4gKCcuJywgJ3NvdXJjZScpOgorICAgICAgICAgICAgICAgIHJlcyA9IHNlbGYuZG90Y29tbWFuZChlbnYsIGFyZ3NbMTpdKQorICAgICAgICAgICAgZWxpZiBhcmdzOgorICAgICAgICAgICAgICAgIGlmIGFyZ3NbMF0gaW4gc2VsZi5DT01NQU5EUzoKKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9IHNlbGYuQ09NTUFORFNbYXJnc1swXV0KKyAgICAgICAgICAgICAgICBlbGlmIGVudi5pc19mdW5jdGlvbihhcmdzWzBdKToKKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9IFV0aWxpdHkoc2VsZi5fZXhlY3V0ZV9mdW5jdGlvbiwgaXNfc3BlY2lhbD1UcnVlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCAnLycgaW4gYXJnc1swXS5yZXBsYWNlKCdcXCcsICcvJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSBlbnYuZmluZF9pbl9wYXRoKGFyZ3NbMF0pCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgY21kOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVE9ETzogdGVzdCBlcnJvciBjb2RlIG9uIHVua25vd24gY29tbWFuZCA9PiAxMjcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBDb21tYW5kTm90Rm91bmQoJ1Vua25vd24gY29tbWFuZDogIiVzIicgJSBhcmdzWzBdKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBIYW5kbGUgY29tbWFuZHMgbGlrZSAnL2N5Z2RyaXZlL2MvZm9vLmJhdCcKKyAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9IGN5Z3dpbl90b193aW5kb3dzX3BhdGgoYXJnc1swXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhjbWQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIENvbW1hbmROb3RGb3VuZCgnJXM6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknICUgYXJnc1swXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNoZWJhbmcgPSByZXNvbHZlX3NoZWJhbmcoY21kKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2hlYmFuZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSBzaGViYW5nCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9IFtjbWRdCisgICAgICAgICAgICAgICAgICAgIGFyZ3NbMDoxXSA9IGNtZAorICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gVXRpbGl0eShidWlsdGluLnJ1bl9jb21tYW5kKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICMgQ29tbWFuZCBleGVjdXRpb24KKyAgICAgICAgICAgICAgICBpZiAnZGVidWctY21kJyBpbiBzZWxmLl9kZWJ1Z2ZsYWdzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZygncmVkaXJlY3Rpb25zICcgKyBzdHIocmVkaXJzKSArICdcbicpCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlcyA9IGNvbW1hbmQuZnVuYyhhcmdzWzBdLCBhcmdzWzE6XSwgc2VsZiwgZW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcnMuc3RkaW4oKSwgcmVkaXJzLnN0ZG91dCgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJzLnN0ZGVycigpLCBzZWxmLl9kZWJ1Z2ZsYWdzKQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiBzZWxmLl9lbnYuaGFzX29wdCgnLXgnKToKKyAgICAgICAgICAgICAgICAjIFRyYWNlIGNvbW1hbmQgZXhlY3V0aW9uIGluIHNoZWxsIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgIyBCVUc6IHdvdWxkIGJlIGhhcmQgdG8gcmVwcm9kdWNlIGEgcmVhbCBzaGVsbCBiZWhhdmlvdXIgc2luY2UKKyAgICAgICAgICAgICAgICAjIHRoZSBBU1QgaXMgbm90IGFubm90YXRlZCB3aXRoIHNvdXJjZSBsaW5lcy90b2tlbnMuCisgICAgICAgICAgICAgICAgc2VsZi5fcmVkaXJzLnN0ZG91dCgpLndyaXRlKCcgJy5qb2luKGFyZ3MpKQorICAgICAgICAgICAgICAgIAorICAgICAgICBleGNlcHQgUmV0dXJuU2lnbmFsOgorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0IFNoZWxsRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGlzX3NwZWNpYWwgb3IgaXNpbnN0YW5jZShlLCAoRXhpdFNpZ25hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hlbGxTeW50YXhFcnJvciwgRXhwYW5zaW9uRXJyb3IpKToKKyAgICAgICAgICAgICAgICByYWlzZSBlCisgICAgICAgICAgICBzZWxmLl9yZWRpcnMuc3RkZXJyKCkud3JpdGUoc3RyKGUpKydcbicpCisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIHJldHVybiByZXMKKworICAgIGRlZiBleHBhbmRfdG9rZW4oc2VsZiwgd29yZCk6CisgICAgICAgICIiIkV4cGFuZCBhIHdvcmQgYXMgc3BlY2lmaWVkIGluIFsyLjYgV29yZCBFeHBhbnNpb25zXS4gUmV0dXJuIHRoZSBsaXN0CisgICAgICAgIG9mIGV4cGFuZGVkIHdvcmRzLgorICAgICAgICAiIiIKKyAgICAgICAgc3RhdHVzLCB3dHJlZXMgPSBzZWxmLl9leHBhbmRfd29yZCh3b3JkKQorICAgICAgICByZXR1cm4gbWFwKHB5c2hsZXgud29yZHRyZWVfYXNfc3RyaW5nLCB3dHJlZXMpCisgICAgICAgIAorICAgIGRlZiBleHBhbmRfdmFyaWFibGUoc2VsZiwgd29yZCk6CisgICAgICAgICIiIlJldHVybiBhIHN0YXR1cyBjb2RlIChvciBOb25lIGlmIG5vIGNvbW1hbmQgZXhwYW5zaW9uIG9jY3VycmVkKQorICAgICAgICBhbmQgYSBzaW5nbGUgd29yZC4KKyAgICAgICAgIiIiCisgICAgICAgIHN0YXR1cywgd3RyZWVzID0gc2VsZi5fZXhwYW5kX3dvcmQod29yZCwgcGF0aG5hbWU9RmFsc2UsIHNwbGl0PUZhbHNlKQorICAgICAgICB3b3JkcyA9IG1hcChweXNobGV4LndvcmR0cmVlX2FzX3N0cmluZywgd3RyZWVzKQorICAgICAgICBhc3NlcnQgbGVuKHdvcmRzKT09MQorICAgICAgICByZXR1cm4gc3RhdHVzLCB3b3Jkc1swXQorICAgICAgICAKKyAgICBkZWYgZXhwYW5kX2hlcmVfZG9jdW1lbnQoc2VsZiwgd29yZCk6CisgICAgICAgICIiIlJldHVybiB0aGUgZXhwYW5kZWQgZG9jdW1lbnQgYXMgYSBzaW5nbGUgd29yZC4gVGhlIGhlcmUgZG9jdW1lbnQgaXMgCisgICAgICAgIGFzc3VtZWQgdG8gYmUgdW5xdW90ZWQuCisgICAgICAgICIiIgorICAgICAgICBzdGF0dXMsIHd0cmVlcyA9IHNlbGYuX2V4cGFuZF93b3JkKHdvcmQsIHBhdGhuYW1lPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0PUZhbHNlLCBoZXJlX2RvY3VtZW50PVRydWUpCisgICAgICAgIHdvcmRzID0gbWFwKHB5c2hsZXgud29yZHRyZWVfYXNfc3RyaW5nLCB3dHJlZXMpCisgICAgICAgIGFzc2VydCBsZW4od29yZHMpPT0xCisgICAgICAgIHJldHVybiB3b3Jkc1swXQorICAgICAgICAKKyAgICBkZWYgZXhwYW5kX3JlZGlyZWN0aW9uKHNlbGYsIHdvcmQpOgorICAgICAgICAiIiJSZXR1cm4gYSBzaW5nbGUgd29yZC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZXhwYW5kX3ZhcmlhYmxlKHdvcmQpWzFdCisgICAgICAgIAorICAgIGRlZiBnZXRfZW52KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZW52CisgICAgICAgIAorICAgIGRlZiBfZXhwYW5kX3dvcmQoc2VsZiwgdG9rZW4sIHBhdGhuYW1lPVRydWUsIHNwbGl0PVRydWUsIGhlcmVfZG9jdW1lbnQ9RmFsc2UpOgorICAgICAgICB3dHJlZSA9IHB5c2hsZXgubWFrZV93b3JkdHJlZSh0b2tlblsxXSwgaGVyZV9kb2N1bWVudD1oZXJlX2RvY3VtZW50KQorICAgICAgICAKKyAgICAgICAgIyBUT0RPOiBpbXBsZW1lbnQgdGlsZGUgZXhwYW5zaW9uCisgICAgICAgIGRlZiBleHBhbmQod3RyZWUpOgorICAgICAgICAgICAgIiIiUmV0dXJuIGEgcHNldWRvIHdvcmR0cmVlOiB0aGUgdHJlZSBvciBpdHMgc3ViZWxlbWVudHMgY2FuIGJlIGVtcHR5CisgICAgICAgICAgICBsaXN0cyB3aGVuIG5vIHZhbHVlIHJlc3VsdCBmcm9tIHRoZSBleHBhbnNpb24uCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIHN0YXR1cyA9IE5vbmUKKyAgICAgICAgICAgIGZvciBwYXJ0IGluIHd0cmVlOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhcnQsIGxpc3QpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIHBhcnRbMF1pbiAoIiciLCAnXFwnKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBlbGlmIHBhcnRbMF0gaW4gKCdgJywgJyQoJyk6CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cywgcmVzdWx0ID0gc2VsZi5fZXhwYW5kX2NvbW1hbmQocGFydCkKKyAgICAgICAgICAgICAgICAgICAgcGFydFs6XSA9IHJlc3VsdAorICAgICAgICAgICAgICAgIGVsaWYgcGFydFswXSBpbiAoJyQnLCAnJHsnKToKKyAgICAgICAgICAgICAgICAgICAgcGFydFs6XSA9IHNlbGYuX2V4cGFuZF9wYXJhbWV0ZXIocGFydCwgd3RyZWVbMF09PSciJywgc3BsaXQpCisgICAgICAgICAgICAgICAgZWxpZiBwYXJ0WzBdIGluICgnJywgJyInKToKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCByZXN1bHQgPSBleHBhbmQocGFydCkKKyAgICAgICAgICAgICAgICAgICAgcGFydFs6XSA9IHJlc3VsdAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJyVzIGV4cGFuc2lvbiBpcyBub3QgaW1wbGVtZW50ZWQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBwYXJ0WzBdKQorICAgICAgICAgICAgIyBbXSBpcyByZXR1cm5lZCB3aGVuIGFuIGV4cGFuc2lvbiByZXN1bHQgaW4gbm8tZmllbGQsCisgICAgICAgICAgICAjIGxpa2UgYW4gZW1wdHkgJEAKKyAgICAgICAgICAgIHd0cmVlID0gW3AgZm9yIHAgaW4gd3RyZWUgaWYgcCAhPSBbXV0KKyAgICAgICAgICAgIGlmIGxlbih3dHJlZSkgPCAzOgorICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXMsIFtdCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzLCB3dHJlZQorICAgICAgICAKKyAgICAgICAgc3RhdHVzLCB3dHJlZSA9IGV4cGFuZCh3dHJlZSkKKyAgICAgICAgaWYgbGVuKHd0cmVlKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIHN0YXR1cywgd3RyZWUKKyAgICAgICAgd3RyZWUgPSBweXNobGV4Lm5vcm1hbGl6ZV93b3JkdHJlZSh3dHJlZSkKKyAgICAgICAgCisgICAgICAgIGlmIHNwbGl0OgorICAgICAgICAgICAgd3RyZWVzID0gc2VsZi5fc3BsaXRfZmllbGRzKHd0cmVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd3RyZWVzID0gW3d0cmVlXQorICAgICAgICAKKyAgICAgICAgaWYgcGF0aG5hbWU6CisgICAgICAgICAgICB3dHJlZXMgPSBtYXBwZW5kKHNlbGYuX2V4cGFuZF9wYXRobmFtZSwgd3RyZWVzKQorICAgICAgICAKKyAgICAgICAgd3RyZWVzID0gbWFwKHNlbGYuX3JlbW92ZV9xdW90ZXMsIHd0cmVlcykKKyAgICAgICAgcmV0dXJuIHN0YXR1cywgd3RyZWVzCisgICAgICAgIAorICAgIGRlZiBfZXhwYW5kX2NvbW1hbmQoc2VsZiwgd3RyZWUpOgorICAgICAgICAjIEJVRzogdGhlcmUgaXMgc29tZXRoaW5nIHRvIGRvIHdpdGggYmFja3NsYXNoZXMgYW5kIHF1b3RlZAorICAgICAgICAjIGNoYXJhY3RlcnMgaGVyZQorICAgICAgICBjb21tYW5kID0gcHlzaGxleC53b3JkdHJlZV9hc19zdHJpbmcod3RyZWVbMTotMV0pCisgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gc2VsZi5zdWJzaGVsbF9vdXRwdXQoY29tbWFuZCkKKyAgICAgICAgcmV0dXJuIHN0YXR1cywgWycnLCBvdXRwdXQsICcnXQorICAgICAgICAKKyAgICBkZWYgX2V4cGFuZF9wYXJhbWV0ZXIoc2VsZiwgd3RyZWUsIHF1b3RlZD1GYWxzZSwgc3BsaXQ9RmFsc2UpOgorICAgICAgICAiIiJSZXR1cm4gYSB2YWxpZCB3dHJlZSBvciBhbiBlbXB0eSBsaXN0IHdoZW4gbm8gcGFyYW1ldGVyIHJlc3VsdHMuIiIiCisgICAgICAgICMgR2V0IHRoZSBwYXJhbWV0ZXIgbmFtZQorICAgICAgICAjIFRPRE86IGltcGxlbWVudCB3ZWlyZCBleHBhbnNpb24gcnVsZXMgd2l0aCAnOicKKyAgICAgICAgbmFtZSA9IHB5c2hsZXgud29yZHRyZWVfYXNfc3RyaW5nKHd0cmVlWzE6LTFdKQorICAgICAgICBpZiBub3QgaXNfbmFtZShuYW1lKSBhbmQgbm90IGlzX3NwZWNpYWxfcGFyYW0obmFtZSk6CisgICAgICAgICAgICByYWlzZSBFeHBhbnNpb25FcnJvcignQmFkIHN1YnN0aXR1dGlvbiAiJXMiJyAlIG5hbWUpCisgICAgICAgICMgVE9ETzogaW1wbGVtZW50IHNwZWNpYWwgcGFyYW1ldGVycworICAgICAgICBpZiBuYW1lIGluICgnQCcsICcqJyk6CisgICAgICAgICAgICBhcmdzID0gc2VsZi5fZW52LmdldF9wb3NpdGlvbmFsX2FyZ3MoKQorICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgICAgICBpZiBsZW4oYXJncyk8MjoKKyAgICAgICAgICAgICAgICByZXR1cm4gWycnLCAnJy5qb2luKGFyZ3MpLCAnJ10KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHNlcCA9IHNlbGYuX2Vudi5nZXQoJ0lGUycsICcnKVs6MV0KKyAgICAgICAgICAgIGlmIHNwbGl0IGFuZCBxdW90ZWQgYW5kIG5hbWU9PSdAJzoKKyAgICAgICAgICAgICAgICAjIEludHJvZHVjZSBhIG5ldyB0b2tlbiB0byB0ZWxsIHRoZSBjYWxsZXIgdGhhdCB0aGVzZSBwYXJhbWV0ZXJzCisgICAgICAgICAgICAgICAgIyBjYXVzZSBhIHNwbGl0IGFzIHNwZWNpZmllZCBpbiAyLjUuMgorICAgICAgICAgICAgICAgIHJldHVybiBbJ0AnXSArIGFyZ3MgKyBbJyddCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBbJycsIHNlcC5qb2luKGFyZ3MpLCAnJ10gICAgICAgICAgICAgICAgCisgICAgICAgIAorICAgICAgICByZXR1cm4gWycnLCBzZWxmLl9lbnYuZ2V0KG5hbWUsICcnKSwgJyddCisgICAgICAgIAorICAgIGRlZiBfc3BsaXRfZmllbGRzKHNlbGYsIHd0cmVlKToKKyAgICAgICAgZGVmIGlzX2VtcHR5KHNwbGl0KToKKyAgICAgICAgICAgIHJldHVybiBzcGxpdD09WycnLCAnJywgJyddCisgICAgICAgICAgICAKKyAgICAgICAgZGVmIHNwbGl0X3Bvc2l0aW9uYWwocXVvdGVkKToKKyAgICAgICAgICAgICMgUmV0dXJuIGEgbGlzdCBvZiB3dHJlZSBzcGxpdCBhY2NvcmRpbmcgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHJ1bGVzLgorICAgICAgICAgICAgIyBBbGwgcmVtYWluaW5nICdAJyBncm91cHMgYXJlIHJlbW92ZWQuCisgICAgICAgICAgICBhc3NlcnQgcXVvdGVkWzBdPT0nIicKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3BsaXRzID0gW1tdXQorICAgICAgICAgICAgZm9yIHBhcnQgaW4gcXVvdGVkOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhcnQsIGxpc3QpIG9yIHBhcnRbMF0hPSdAJzoKKyAgICAgICAgICAgICAgICAgICAgc3BsaXRzWy0xXS5hcHBlbmQocGFydCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIEVtcHR5IG9yIHNpbmdsZSBhcmd1bWVudCBsaXN0IHdlcmUgZGVhbHQgd2l0aCBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBsZW4ocGFydCk+MworICAgICAgICAgICAgICAgICAgICAjIEZpcnN0IGFyZ3VtZW50IG11c3Qgam9pbiB3aXRoIHRoZSBiZWdpbm5pbmcgcGFydCBvZiB0aGUgb3JpZ2luYWwgd29yZAorICAgICAgICAgICAgICAgICAgICBzcGxpdHNbLTFdLmFwcGVuZChwYXJ0WzFdKQorICAgICAgICAgICAgICAgICAgICAjIENyZWF0ZSBkb3VibGUtcXVvdGVzIGV4cHJlc3Npb25zIGZvciBldmVyeSBhcmd1bWVudCBhZnRlciB0aGUgZmlyc3QKKyAgICAgICAgICAgICAgICAgICAgZm9yIGFyZyBpbiBwYXJ0WzI6LTFdOgorICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXRzWy0xXS5hcHBlbmQoJyInKQorICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXRzLmFwcGVuZChbJyInLCBhcmddKQorICAgICAgICAgICAgcmV0dXJuIHNwbGl0cworICAgICAgICAKKyAgICAgICAgIyBBdCB0aGlzIHBvaW50LCBhbGwgZXhwYW5zaW9ucyBidXQgcGF0aG5hbWVzIGhhdmUgb2NjdXJlZC4gT25seSBxdW90ZWQKKyAgICAgICAgIyBhbmQgcG9zaXRpb25hbCBzZXF1ZW5jZXMgcmVtYWluLiBUaHVzLCBhbGwgY2FuZGlkYXRlcyBmb3IgZmllbGQgc3BsaXR0aW5nIAorICAgICAgICAjIGFyZSBpbiB0aGUgdHJlZSByb290LCBvciBhcmUgcG9zaXRpb25hbCBzcGxpdHMgKCdAJykgYW5kIGxpZSBpbiByb290CisgICAgICAgICMgY2hpbGRyZW4uCisgICAgICAgIGlmIG5vdCB3dHJlZSBvciB3dHJlZVswXSBub3QgaW4gKCcnLCAnIicpOgorICAgICAgICAgICAgIyBUaGUgd2hvbGUgdG9rZW4gaXMgcXVvdGVkIG9yIGVtcHR5LCBub3RoaW5nIHRvIHNwbGl0CisgICAgICAgICAgICByZXR1cm4gW3d0cmVlXQorICAgICAgICAgICAgCisgICAgICAgIGlmIHd0cmVlWzBdPT0nIic6CisgICAgICAgICAgICB3dHJlZSA9IFsnJywgd3RyZWUsICcnXQorICAgICAgICAKKyAgICAgICAgcmVzdWx0ID0gW1snJywgJyddXQorICAgICAgICBmb3IgcGFydCBpbiB3dHJlZVsxOi0xXToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFydCwgbGlzdCk6CisgICAgICAgICAgICAgICAgaWYgcGFydFswXT09JyInOgorICAgICAgICAgICAgICAgICAgICBzcGxpdHMgPSBzcGxpdF9wb3NpdGlvbmFsKHBhcnQpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihzcGxpdHMpPD0xOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wy0xXSArPSBbcGFydCwgJyddCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFRlcm1pbmF0ZSB0aGUgY3VycmVudCBzcGxpdAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wy0xXSArPSBbc3BsaXRzWzBdLCAnJ10KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzcGxpdHNbMTotMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICMgQ3JlYXRlIGEgbmV3IHNwbGl0CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gW1snJywgc3BsaXRzWy0xXSwgJyddXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFstMV0gKz0gW3BhcnQsICcnXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzcGxpdHMgPSBzZWxmLl9lbnYuc3BsaXRfZmllbGRzKHBhcnQpCisgICAgICAgICAgICAgICAgaWYgbGVuKHNwbGl0cyk8PTE6CisgICAgICAgICAgICAgICAgICAgICMgTm8gc3BsaXQKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wy0xXVstMV0gKz0gcGFydAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgVGVybWluYXRlIHRoZSBjdXJyZW50IHJlc3VsdGluZyBwYXJ0IGFuZCBjcmVhdGUgYSBuZXcgb25lCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFstMV1bLTFdICs9IHNwbGl0c1swXQorICAgICAgICAgICAgICAgICAgICByZXN1bHRbLTFdLmFwcGVuZCgnJykKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFtbJycsIHIsICcnXSBmb3IgciBpbiBzcGxpdHNbMTotMV1dCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBbWycnLCBzcGxpdHNbLTFdXV0KKyAgICAgICAgcmVzdWx0Wy0xXS5hcHBlbmQoJycpCisgICAgICAgIAorICAgICAgICAjIExlYWRpbmcgYW5kIHRyYWlsaW5nIGVtcHR5IGdyb3VwcyBjb21lIGZyb20gbGVhZGluZy90cmFpbGluZyBibGFua3MKKyAgICAgICAgaWYgcmVzdWx0IGFuZCBpc19lbXB0eShyZXN1bHRbLTFdKToKKyAgICAgICAgICAgIHJlc3VsdFstMTpdID0gW10KKyAgICAgICAgaWYgcmVzdWx0IGFuZCBpc19lbXB0eShyZXN1bHRbMF0pOgorICAgICAgICAgICAgcmVzdWx0WzoxXSA9IFtdCisgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgCisgICAgZGVmIF9leHBhbmRfcGF0aG5hbWUoc2VsZiwgd3RyZWUpOgorICAgICAgICAiIiJTZWUgWzIuNi42IFBhdGhuYW1lIEV4cGFuc2lvbl0uIiIiCisgICAgICAgIGlmIHNlbGYuX2Vudi5oYXNfb3B0KCctZicpOgorICAgICAgICAgICAgcmV0dXJuIFt3dHJlZV0KKyAgICAgICAgCisgICAgICAgICMgQWxsIGV4cGFuc2lvbnMgaGF2ZSBiZWVuIHBlcmZvcm1lZCwgb25seSBxdW90ZWQgc2VxdWVuY2VzIHNob3VsZCByZW1haW4KKyAgICAgICAgIyBpbiB0aGUgdHJlZS4gR2VuZXJhdGUgdGhlIHBhdHRlcm4gYnkgZm9sZGluZyB0aGUgdHJlZSwgZXNjYXBpbmcgc3BlY2lhbAorICAgICAgICAjIGNoYXJhY3RlcnMgd2hlbiBhcHBlYXIgcXVvdGVkCisgICAgICAgIHNwZWNpYWxfY2hhcnMgPSAnKj9bXScKKyAgICAgICAgCisgICAgICAgIGRlZiBtYWtlX3BhdHRlcm4od3RyZWUpOgorICAgICAgICAgICAgc3VicGF0dGVybiA9IFtdCisgICAgICAgICAgICBmb3IgcGFydCBpbiB3dHJlZVsxOi0xXToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcnQsIGxpc3QpOgorICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gbWFrZV9wYXR0ZXJuKHBhcnQpCisgICAgICAgICAgICAgICAgZWxpZiB3dHJlZVswXSE9Jyc6CisgICAgICAgICAgICAgICAgICAgIGZvciBjIGluIHBhcnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAjIE1ldGEtY2hhcmFjdGVycyBjYW5ub3QgYmUgcXVvdGVkCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjIGluIHNwZWNpYWxfY2hhcnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgR2xvYkVycm9yKCkKKyAgICAgICAgICAgICAgICBzdWJwYXR0ZXJuLmFwcGVuZChwYXJ0KQorICAgICAgICAgICAgcmV0dXJuICcnLmpvaW4oc3VicGF0dGVybikKKyAgICAgICAgICAgIAorICAgICAgICBkZWYgcHdkX2dsb2IocGF0dGVybik6CisgICAgICAgICAgICBjd2QgPSBvcy5nZXRjd2QoKQorICAgICAgICAgICAgb3MuY2hkaXIoc2VsZi5fZW52WydQV0QnXSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2xvYi5nbG9iKHBhdHRlcm4pIAorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5jaGRpcihjd2QpICAgIAorICAgICAgICAgICAgCisgICAgICAgICNUT0RPOiBjaGVjayB3b3JraW5nIGRpcmVjdG9yeSBpc3N1ZXMgaGVyZSB3cnQgcmVsYXRpdmUgcGF0dGVybnMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGF0dGVybiA9IG1ha2VfcGF0dGVybih3dHJlZSkKKyAgICAgICAgICAgIHBhdGhzID0gcHdkX2dsb2IocGF0dGVybikKKyAgICAgICAgZXhjZXB0IEdsb2JFcnJvcjoKKyAgICAgICAgICAgICMgQlVHOiBNZXRhLWNoYXJhY3RlcnMgd2VyZSBmb3VuZCBpbiBxdW90ZWQgc2VxdWVuY2VzLiBUaGUgc2hvdWxkIAorICAgICAgICAgICAgIyBoYXZlIGJlZW4gdXNlZCBsaXRlcmFsbHkgYnV0IHRoaXMgaXMgdW5zdXBwb3J0ZWQgaW4gY3VycmVudCBnbG9iIG1vZHVsZS4KKyAgICAgICAgICAgICMgSW5zdGVhZCB3ZSBjb25zaWRlciB0aGUgd2hvbGUgdHJlZSBtdXN0IGJlIHVzZWQgbGl0ZXJhbGx5IGFuZAorICAgICAgICAgICAgIyB0aGVyZWZvcmUgdGhlcmUgaXMgbm8gcG9pbnQgaW4gZ2xvYmJpbmcuIFRoaXMgaXMgd3Jvbmcgd2hlbiBtZXRhCisgICAgICAgICAgICAjIGNoYXJhY3RlcnMgYXJlIG1peGVkIHdpdGggcXVvdGVkIG1ldGEgaW4gdGhlIHNhbWUgcGF0dGVybiBsaWtlOgorICAgICAgICAgICAgIyA8IGZvbyoicHkqIiA+CisgICAgICAgICAgICBwYXRocyA9IFtdCisgICAgICAgICAgICAKKyAgICAgICAgaWYgbm90IHBhdGhzOgorICAgICAgICAgICAgcmV0dXJuIFt3dHJlZV0KKyAgICAgICAgcmV0dXJuIFtbJycsIHBhdGgsICcnXSBmb3IgcGF0aCBpbiBwYXRoc10KKyAgICAgICAgCisgICAgZGVmIF9yZW1vdmVfcXVvdGVzKHNlbGYsIHd0cmVlKToKKyAgICAgICAgIiIiU2VlIFsyLjYuNyBRdW90ZSBSZW1vdmFsXS4iIiIKKyAgICAgICAgCisgICAgICAgIGRlZiB1bnF1b3RlKHd0cmVlKToKKyAgICAgICAgICAgIHVucXVvdGVkID0gW10KKyAgICAgICAgICAgIGZvciBwYXJ0IGluIHd0cmVlWzE6LTFdOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFydCwgbGlzdCk6CisgICAgICAgICAgICAgICAgICAgIHBhcnQgPSB1bnF1b3RlKHBhcnQpCisgICAgICAgICAgICAgICAgdW5xdW90ZWQuYXBwZW5kKHBhcnQpCisgICAgICAgICAgICByZXR1cm4gJycuam9pbih1bnF1b3RlZCkKKyAgICAgICAgICAgIAorICAgICAgICByZXR1cm4gWycnLCB1bnF1b3RlKHd0cmVlKSwgJyddCisgICAgICAgIAorICAgIGRlZiBzdWJzaGVsbChzZWxmLCBzY3JpcHQ9Tm9uZSwgYXN0PU5vbmUsIHJlZGlycz1Ob25lKToKKyAgICAgICAgIiIiRXhlY3V0ZSB0aGUgc2NyaXB0IG9yIEFTVCBpbiBhIHN1YnNoZWxsLCB3aXRoIGluaGVyaXRlZCByZWRpcmVjdGlvbnMKKyAgICAgICAgaWYgcmVkaXJzIGlzIG5vdCBOb25lLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgcmVkaXJzOgorICAgICAgICAgICAgc3ViX3JlZGlycyA9IHJlZGlycworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3ViX3JlZGlycyA9IHJlZGlycy5jbG9uZSgpCisgICAgICAgIAorICAgICAgICBzdWJzaGVsbCA9IE5vbmUgICAgCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1YnNoZWxsID0gSW50ZXJwcmV0ZXIoTm9uZSwgc2VsZi5fZGVidWdmbGFncywgc2VsZi5fZW52LmNsb25lKFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJfcmVkaXJzLCBvcHRzPXNlbGYuX29wdGlvbnMpCisgICAgICAgICAgICByZXR1cm4gc3Vic2hlbGwuZXhlY3V0ZV9zY3JpcHQoc2NyaXB0LCBhc3QpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBub3QgcmVkaXJzOiBzdWJfcmVkaXJzLmNsb3NlKCkKKyAgICAgICAgICAgIGlmIHN1YnNoZWxsOiBzdWJzaGVsbC5jbG9zZSgpCisgICAgICAgIAorICAgIGRlZiBzdWJzaGVsbF9vdXRwdXQoc2VsZiwgc2NyaXB0KToKKyAgICAgICAgIiIiRXhlY3V0ZSB0aGUgc2NyaXB0IGluIGEgc3Vic2hlbGwgYW5kIHJldHVybiB0aGUgY2FwdHVyZWQgb3V0cHV0LiIiIiAgICAgICAgCisgICAgICAgICMgQ3JlYXRlIHRlbXBvcmFyeSBmaWxlIHRvIGNhcHR1cmUgc3Vic2hlbGwgb3V0cHV0CisgICAgICAgIHRtcGZkLCB0bXBwYXRoID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRtcGZpbGUgPSBvcy5mZG9wZW4odG1wZmQsICd3YicpCisgICAgICAgICAgICBzdGRvdXQgPSBGaWxlV3JhcHBlcigndycsIHRtcGZpbGUpCisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlZGlycyA9IFJlZGlyZWN0aW9ucyhzZWxmLl9yZWRpcnMuc3RkaW4oKS5kdXAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVkaXJzLnN0ZGVycigpLmR1cCgpKSAgICAgICAgICAgIAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuc3Vic2hlbGwoc2NyaXB0PXNjcmlwdCwgcmVkaXJzPXJlZGlycykKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcmVkaXJzLmNsb3NlKCkKKyAgICAgICAgICAgICAgICByZWRpcnMgPSBOb25lCisgICAgICAgICAgICAKKyAgICAgICAgICAgICMgRXh0cmFjdCBzdWJzaGVsbCBzdGFuZGFyZCBvdXRwdXQKKyAgICAgICAgICAgIHRtcGZpbGUgPSBvcGVuKHRtcHBhdGgsICdyYicpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3V0cHV0ID0gdG1wZmlsZS5yZWFkKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzLCBvdXRwdXQucnN0cmlwKCdcbicpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHRtcGZpbGUuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVtb3ZlKHRtcHBhdGgpCisKKyAgICBkZWYgX2FzeW5jbGlzdChzZWxmLCBjbWQpOgorICAgICAgICBhcmdzID0gKHNlbGYuX2Vudi5nZXRfdmFyaWFibGVzKCksIGNtZCkKKyAgICAgICAgYXJnID0gZW5jb2RlYXJncyhhcmdzKQorICAgICAgICBhc3NlcnQgbGVuKGFyZ3MpIDwgMzAqMTAyNAorICAgICAgICBjbWQgPSBbJ3B5c2guYmF0JywgJy0tYXN0JywgJy1jJywgYXJnXQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIGN3ZD1zZWxmLl9lbnZbJ1BXRCddKQorICAgICAgICBzZWxmLl9jaGlsZHJlbltwLnBpZF0gPSBwCisgICAgICAgIHNlbGYuX2VudlsnISddID0gcC5waWQKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGRlZiB3YWl0KHNlbGYsIHBpZHM9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBwaWRzOgorICAgICAgICAgICAgcGlkcyA9IHNlbGYuX2NoaWxkcmVuLmtleXMoKQorCisgICAgICAgIHN0YXR1cyA9IDEyNworICAgICAgICBmb3IgcGlkIGluIHBpZHM6CisgICAgICAgICAgICBpZiBwaWQgbm90IGluIHNlbGYuX2NoaWxkcmVuOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBwID0gc2VsZi5fY2hpbGRyZW4ucG9wKHBpZCkKKyAgICAgICAgICAgIHN0YXR1cyA9IHAud2FpdCgpCisKKyAgICAgICAgcmV0dXJuIHN0YXR1cworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvbHNwcm9mLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL2xzcHJvZi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTgzMWMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL2xzcHJvZi5weQpAQCAtMCwwICsxLDExNiBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgc3lzCitmcm9tIF9sc3Byb2YgaW1wb3J0IFByb2ZpbGVyLCBwcm9maWxlcl9lbnRyeQorCitfX2FsbF9fID0gWydwcm9maWxlJywgJ1N0YXRzJ10KKworZGVmIHByb2ZpbGUoZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgIiIiWFhYIGRvY3N0cmluZyIiIgorICAgIHAgPSBQcm9maWxlcigpCisgICAgcC5lbmFibGUoc3ViY2FsbHM9VHJ1ZSwgYnVpbHRpbnM9VHJ1ZSkKKyAgICB0cnk6CisgICAgICAgIGYoKmFyZ3MsICoqa3dkcykKKyAgICBmaW5hbGx5OgorICAgICAgICBwLmRpc2FibGUoKQorICAgIHJldHVybiBTdGF0cyhwLmdldHN0YXRzKCkpCisKKworY2xhc3MgU3RhdHMob2JqZWN0KToKKyAgICAiIiJYWFggZG9jc3RyaW5nIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKKworICAgIGRlZiBzb3J0KHNlbGYsIGNyaXQ9ImlubGluZXRpbWUiKToKKyAgICAgICAgIiIiWFhYIGRvY3N0cmluZyIiIgorICAgICAgICBpZiBjcml0IG5vdCBpbiBwcm9maWxlcl9lbnRyeS5fX2RpY3RfXzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbid0IHNvcnQgYnkgJXMiICUgY3JpdCkKKyAgICAgICAgc2VsZi5kYXRhLnNvcnQobGFtYmRhIGIsIGE6IGNtcChnZXRhdHRyKGEsIGNyaXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGF0dHIoYiwgY3JpdCkpKQorICAgICAgICBmb3IgZSBpbiBzZWxmLmRhdGE6CisgICAgICAgICAgICBpZiBlLmNhbGxzOgorICAgICAgICAgICAgICAgIGUuY2FsbHMuc29ydChsYW1iZGEgYiwgYTogY21wKGdldGF0dHIoYSwgY3JpdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0YXR0cihiLCBjcml0KSkpCisKKyAgICBkZWYgcHByaW50KHNlbGYsIHRvcD1Ob25lLCBmaWxlPU5vbmUsIGxpbWl0PU5vbmUsIGNsaW1pdD1Ob25lKToKKyAgICAgICAgIiIiWFhYIGRvY3N0cmluZyIiIgorICAgICAgICBpZiBmaWxlIGlzIE5vbmU6CisgICAgICAgICAgICBmaWxlID0gc3lzLnN0ZG91dAorICAgICAgICBkID0gc2VsZi5kYXRhCisgICAgICAgIGlmIHRvcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGQgPSBkWzp0b3BdCisgICAgICAgIGNvbHMgPSAiJSAxMnMgJTEycyAlMTEuNGYgJTExLjRmICAgJXNcbiIKKyAgICAgICAgaGNvbHMgPSAiJSAxMnMgJTEycyAlMTJzICUxMnMgJXNcbiIKKyAgICAgICAgY29sczIgPSAiKyUxMnMgJTEycyAlMTEuNGYgJTExLjRmICsgICVzXG4iCisgICAgICAgIGZpbGUud3JpdGUoaGNvbHMgJSAoIkNhbGxDb3VudCIsICJSZWN1cnNpdmUiLCAiVG90YWwobXMpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5saW5lKG1zKSIsICJtb2R1bGU6bGluZW5vKGZ1bmN0aW9uKSIpKQorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgZm9yIGUgaW4gZDoKKyAgICAgICAgICAgIGZpbGUud3JpdGUoY29scyAlIChlLmNhbGxjb3VudCwgZS5yZWNjYWxsY291bnQsIGUudG90YWx0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuaW5saW5ldGltZSwgbGFiZWwoZS5jb2RlKSkpCisgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgICAgICBpZiBsaW1pdCBpcyBub3QgTm9uZSBhbmQgY291bnQgPT0gbGltaXQ6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBjY291bnQgPSAwCisgICAgICAgICAgICBpZiBlLmNhbGxzOgorICAgICAgICAgICAgICAgIGZvciBzZSBpbiBlLmNhbGxzOgorICAgICAgICAgICAgICAgICAgICBmaWxlLndyaXRlKGNvbHMgJSAoIislcyIgJSBzZS5jYWxsY291bnQsIHNlLnJlY2NhbGxjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlLnRvdGFsdGltZSwgc2UuaW5saW5ldGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIrJXMiICUgbGFiZWwoc2UuY29kZSkpKQorICAgICAgICAgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgICAgICAgICAgICAgIGNjb3VudCArPSAxCisgICAgICAgICAgICAgICAgICAgIGlmIGxpbWl0IGlzIG5vdCBOb25lIGFuZCBjb3VudCA9PSBsaW1pdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICBpZiBjbGltaXQgaXMgbm90IE5vbmUgYW5kIGNjb3VudCA9PSBjbGltaXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgZGVmIGZyZWV6ZShzZWxmKToKKyAgICAgICAgIiIiUmVwbGFjZSBhbGwgcmVmZXJlbmNlcyB0byBjb2RlIG9iamVjdHMgd2l0aCBzdHJpbmcKKyAgICAgICAgZGVzY3JpcHRpb25zOyB0aGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHBpY2tsZSB0aGUgaW5zdGFuY2UuIiIiCisKKyAgICAgICAgIyB0aGlzIGNvZGUgaXMgcHJvYmFibHkgcmF0aGVyIGlja2llciB0aGFuIGl0IG5lZWRzIHRvIGJlIQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oc2VsZi5kYXRhKSk6CisgICAgICAgICAgICBlID0gc2VsZi5kYXRhW2ldCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlLmNvZGUsIHN0cik6CisgICAgICAgICAgICAgICAgc2VsZi5kYXRhW2ldID0gdHlwZShlKSgobGFiZWwoZS5jb2RlKSwpICsgZVsxOl0pCisgICAgICAgICAgICBpZiBlLmNhbGxzOgorICAgICAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKGxlbihlLmNhbGxzKSk6CisgICAgICAgICAgICAgICAgICAgIHNlID0gZS5jYWxsc1tqXQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZS5jb2RlLCBzdHIpOgorICAgICAgICAgICAgICAgICAgICAgICAgZS5jYWxsc1tqXSA9IHR5cGUoc2UpKChsYWJlbChzZS5jb2RlKSwpICsgc2VbMTpdKQorCitfZm4ybW9kID0ge30KKworZGVmIGxhYmVsKGNvZGUpOgorICAgIGlmIGlzaW5zdGFuY2UoY29kZSwgc3RyKToKKyAgICAgICAgcmV0dXJuIGNvZGUKKyAgICB0cnk6CisgICAgICAgIG1uYW1lID0gX2ZuMm1vZFtjb2RlLmNvX2ZpbGVuYW1lXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgZm9yIGssIHYgaW4gc3lzLm1vZHVsZXMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHYgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIodiwgJ19fZmlsZV9fJyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHYuX19maWxlX18sIHN0cik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHYuX19maWxlX18uc3RhcnRzd2l0aChjb2RlLmNvX2ZpbGVuYW1lKToKKyAgICAgICAgICAgICAgICBtbmFtZSA9IF9mbjJtb2RbY29kZS5jb19maWxlbmFtZV0gPSBrCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1uYW1lID0gX2ZuMm1vZFtjb2RlLmNvX2ZpbGVuYW1lXSA9ICc8JXM+JyVjb2RlLmNvX2ZpbGVuYW1lCisKKyAgICByZXR1cm4gJyVzOiVkKCVzKScgJSAobW5hbWUsIGNvZGUuY29fZmlyc3RsaW5lbm8sIGNvZGUuY29fbmFtZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGltcG9ydCBvcworICAgIHN5cy5hcmd2ID0gc3lzLmFyZ3ZbMTpdCisgICAgaWYgbm90IHN5cy5hcmd2OgorICAgICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAidXNhZ2U6IGxzcHJvZi5weSA8c2NyaXB0PiA8YXJndW1lbnRzLi4uPiIKKyAgICAgICAgc3lzLmV4aXQoMikKKyAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSkpKQorICAgIHN0YXRzID0gcHJvZmlsZShleGVjZmlsZSwgc3lzLmFyZ3ZbMF0sIGdsb2JhbHMoKSwgbG9jYWxzKCkpCisgICAgc3RhdHMuc29ydCgpCisgICAgc3RhdHMucHByaW50KCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9weXNoLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL3B5c2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRlNjE0NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9weXNoLnB5CkBAIC0wLDAgKzEsMTY3IEBACisjIHB5c2gucHkgLSBjb21tYW5kIHByb2Nlc3NpbmcgZm9yIHB5c2guCisjCisjIENvcHlyaWdodCAyMDA3IFBhdHJpY2sgTWV6YXJkCisjCisjIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMKKyMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworaW1wb3J0IGludGVycAorCitTSF9PUFQgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIocHJvZz0ncHlzaCcsIHVzYWdlPSIlcHJvZyBbT1BUSU9OU10iLCB2ZXJzaW9uPScwLjEnKQorU0hfT1BULmFkZF9vcHRpb24oJy1jJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0nY29tbWFuZF9zdHJpbmcnLCBkZWZhdWx0PU5vbmUsIAorICAgIGhlbHA9J0Egc3RyaW5nIHRoYXQgc2hhbGwgYmUgaW50ZXJwcmV0ZWQgYnkgdGhlIHNoZWxsIGFzIG9uZSBvciBtb3JlIGNvbW1hbmRzJykKK1NIX09QVC5hZGRfb3B0aW9uKCctLXJlZGlyZWN0LXRvJywgZGVzdD0ncmVkaXJlY3RfdG8nLCBkZWZhdWx0PU5vbmUsIAorICAgIGhlbHA9J1JlZGlyZWN0IHNjcmlwdCBjb21tYW5kcyBzdGRvdXQgYW5kIHN0ZGVyciB0byB0aGUgc3BlY2lmaWVkIGZpbGUnKQorIyBTZWUgdXRpbGl0eV9jb21tYW5kIGluIGJ1aWx0aW4ucHkgYWJvdXQgdGhlIHJlYXNvbiBmb3IgdGhpcyBmbGFnLgorU0hfT1BULmFkZF9vcHRpb24oJy0tcmVkaXJlY3RlZCcsIGRlc3Q9J3JlZGlyZWN0ZWQnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLCAKKyAgICBoZWxwPSdUZWxsIHRoZSBpbnRlcnByZXRlciB0aGF0IHN0ZG91dCBhbmQgc3RkZXJyIGFyZSBhY3R1YWxseSB0aGUgc2FtZSBvYmplY3RzLCB3aGljaCBpcyByZWFsbHkgc3Rkb3V0JykKK1NIX09QVC5hZGRfb3B0aW9uKCctLWRlYnVnLXBhcnNpbmcnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdkZWJ1Z19wYXJzaW5nJywgZGVmYXVsdD1GYWxzZSwgCisgICAgaGVscD0nVHJhY2UgUExZIGV4ZWN1dGlvbicpCitTSF9PUFQuYWRkX29wdGlvbignLS1kZWJ1Zy10cmVlJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0nZGVidWdfdHJlZScsIGRlZmF1bHQ9RmFsc2UsIAorICAgIGhlbHA9J0Rpc3BsYXkgdGhlIGdlbmVyYXRlZCBzeW50YXggdHJlZS4nKQorU0hfT1BULmFkZF9vcHRpb24oJy0tZGVidWctY21kJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0nZGVidWdfY21kJywgZGVmYXVsdD1GYWxzZSwgCisgICAgaGVscD0nVHJhY2UgY29tbWFuZCBleGVjdXRpb24gYmVmb3JlIHBhcmFtZXRlcnMgZXhwYW5zaW9uIGFuZCBleGl0IHN0YXR1cy4nKQorU0hfT1BULmFkZF9vcHRpb24oJy0tZGVidWctdXRpbGl0eScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2RlYnVnX3V0aWxpdHknLCBkZWZhdWx0PUZhbHNlLCAKKyAgICBoZWxwPSdUcmFjZSB1dGlsaXR5IGNhbGxzLCBhZnRlciBwYXJhbWV0ZXJzIGV4cGFuc2lvbnMnKQorU0hfT1BULmFkZF9vcHRpb24oJy0tYXN0JywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0nYXN0JywgZGVmYXVsdD1GYWxzZSwKKyAgICBoZWxwPSdFbmNvZGVkIGNvbW1hbmRzIHRvIGV4ZWN1dGUgaW4gYSBzdWJwcm9jZXNzJykKK1NIX09QVC5hZGRfb3B0aW9uKCctLXByb2ZpbGUnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgIGhlbHA9J1Byb2ZpbGUgcHlzaCBydW4nKQorICAgIAorICAgIAorZGVmIHNwbGl0X2FyZ3MoYXJncyk6CisgICAgIyBTZXBhcmF0ZSBzaGVsbCBhcmd1bWVudHMgZnJvbSBjb21tYW5kIG9uZXMKKyAgICAjIEp1c3Qgc3RvcCBhdCB0aGUgZmlyc3QgYXJndW1lbnQgbm90IHN0YXJ0aW5nIHdpdGggYSBkYXNoLiBJIGtub3csIHRoaXMgaXMgY29tcGxldGVseSBicm9rZW4sCisgICAgIyBpdCBpZ25vcmVzIGZpbGVzIHN0YXJ0aW5nIHdpdGggYSBkYXNoIG9yIG1heSB0YWtlIG9wdGlvbiB2YWx1ZXMgZm9yIGNvbW1hbmQgZmlsZS4gVGhpcyBpcyBub3QKKyAgICAjIHN1cHBvc2VkIHRvIGhhcHBlbiBmb3Igbm93CisgICAgY29tbWFuZF9pbmRleCA9IGxlbihhcmdzKQorICAgIGZvciBpLGFyZyBpbiBlbnVtZXJhdGUoYXJncyk6CisgICAgICAgIGlmIG5vdCBhcmcuc3RhcnRzd2l0aCgnLScpOgorICAgICAgICAgICAgY29tbWFuZF9pbmRleCA9IGkKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAKKyAgICByZXR1cm4gYXJnc1s6Y29tbWFuZF9pbmRleF0sIGFyZ3NbY29tbWFuZF9pbmRleDpdCisKKworZGVmIGZpeGVudihlbnYpOgorICAgIHBhdGggPSBlbnYuZ2V0KCdQQVRIJykKKyAgICBpZiBwYXRoIGlzIG5vdCBOb25lOgorICAgICAgICBwYXJ0cyA9IHBhdGguc3BsaXQob3MucGF0aHNlcCkKKyAgICAgICAgIyBSZW1vdmUgV2luZG93cyB1dGlsaXRpZXMgZnJvbSBQQVRILCB0aGV5IGFyZSB1c2VsZXNzIGF0IGJlc3QgYW5kCisgICAgICAgICMgc29tZSBvZiB0aGVtIChmaW5kKSBtYXkgYmUgY29uZnVzZWQgd2l0aCBvdGhlciB1dGlsaXRpZXMuCisgICAgICAgIHBhcnRzID0gW3AgZm9yIHAgaW4gcGFydHMgaWYgJ3N5c3RlbTMyJyBub3QgaW4gcC5sb3dlcigpXQorICAgICAgICBlbnZbJ1BBVEgnXSA9IG9zLnBhdGhzZXAuam9pbihwYXJ0cykKKyAgICBpZiBlbnYuZ2V0KCdIT01FJykgaXMgTm9uZToKKyAgICAgICAgIyBTZXZlcmFsIHV0aWxpdGllcywgaW5jbHVkaW5nIGN2c3BzLCBjYW5ub3Qgd29yayB3aXRob3V0CisgICAgICAgICMgYSBkZWZpbmVkIEhPTUUgZGlyZWN0b3J5LgorICAgICAgICBlbnZbJ0hPTUUnXSA9IG9zLnBhdGguZXhwYW5kdXNlcignficpCisgICAgcmV0dXJuIGVudgorCitkZWYgX3NoKGN3ZCwgc2hhcmdzLCBjbWRhcmdzLCBvcHRpb25zLCBkZWJ1Z2ZsYWdzPU5vbmUsIGVudj1Ob25lKToKKyAgICBpZiBvcy5lbnZpcm9uLmdldCgnUFlTSF9URVhUJykgIT0gJzEnOgorICAgICAgICBpbXBvcnQgbXN2Y3J0CisgICAgICAgIGZvciBmcCBpbiAoc3lzLnN0ZGluLCBzeXMuc3Rkb3V0LCBzeXMuc3RkZXJyKToKKyAgICAgICAgICAgIG1zdmNydC5zZXRtb2RlKGZwLmZpbGVubygpLCBvcy5PX0JJTkFSWSkKKworICAgIGhnYmluID0gb3MuZW52aXJvbi5nZXQoJ1BZU0hfSEdURVhUJykgIT0gJzEnCisgICAgCisgICAgaWYgZGVidWdmbGFncyBpcyBOb25lOgorICAgICAgICBkZWJ1Z2ZsYWdzID0gW10KKyAgICAgICAgaWYgb3B0aW9ucy5kZWJ1Z19wYXJzaW5nOiAgICBkZWJ1Z2ZsYWdzLmFwcGVuZCgnZGVidWctcGFyc2luZycpCisgICAgICAgIGlmIG9wdGlvbnMuZGVidWdfdXRpbGl0eTogICAgZGVidWdmbGFncy5hcHBlbmQoJ2RlYnVnLXV0aWxpdHknKQorICAgICAgICBpZiBvcHRpb25zLmRlYnVnX2NtZDogICAgICAgIGRlYnVnZmxhZ3MuYXBwZW5kKCdkZWJ1Zy1jbWQnKQorICAgICAgICBpZiBvcHRpb25zLmRlYnVnX3RyZWU6ICAgICAgIGRlYnVnZmxhZ3MuYXBwZW5kKCdkZWJ1Zy10cmVlJykKKyAgICAKKyAgICBpZiBlbnYgaXMgTm9uZToKKyAgICAgICAgZW52ID0gZml4ZW52KGRpY3Qob3MuZW52aXJvbikpCisgICAgaWYgY3dkIGlzIE5vbmU6CisgICAgICAgIGN3ZCA9IG9zLmdldGN3ZCgpCisKKyAgICBpZiBub3QgY21kYXJnczoKKyAgICAgICAgIyBOb3RoaW5nIHRvIGRvCisgICAgICAgIHJldHVybiAwCisKKyAgICBhc3QgPSBOb25lCisgICAgY29tbWFuZF9maWxlID0gTm9uZQorICAgIGlmIG9wdGlvbnMuY29tbWFuZF9zdHJpbmc6CisgICAgICAgIGlucHV0ID0gY21kYXJnc1swXQorICAgICAgICBpZiBub3Qgb3B0aW9ucy5hc3Q6CisgICAgICAgICAgICBpbnB1dCArPSAnXG4nCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcmdzLCBpbnB1dCA9IGludGVycC5kZWNvZGVhcmdzKGlucHV0KSwgTm9uZQorICAgICAgICAgICAgZW52LCBhc3QgPSBhcmdzCisgICAgICAgICAgICBjd2QgPSBlbnYuZ2V0KCdQV0QnLCBjd2QpCisgICAgZWxzZToKKyAgICAgICAgY29tbWFuZF9maWxlID0gY21kYXJnc1swXQorICAgICAgICBhcmd1bWVudHMgPSBjbWRhcmdzWzE6XQorCisgICAgICAgIHByZWZpeCA9IGludGVycC5yZXNvbHZlX3NoZWJhbmcoY29tbWFuZF9maWxlLCBpZ25vcmVzaGVsbD1UcnVlKQorICAgICAgICBpZiBwcmVmaXg6CisgICAgICAgICAgICBpbnB1dCA9ICcgJy5qb2luKHByZWZpeCArIFtjb21tYW5kX2ZpbGVdICsgYXJndW1lbnRzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBSZWFkIGNvbW1hbmRzIGZyb20gZmlsZQorICAgICAgICAgICAgZiA9IGZpbGUoY29tbWFuZF9maWxlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgVHJhaWxpbmcgbmV3bGluZSB0byBoZWxwIHRoZSBwYXJzZXIKKyAgICAgICAgICAgICAgICBpbnB1dCA9IGYucmVhZCgpICsgJ1xuJworICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAKKyAgICByZWRpcmVjdCA9IE5vbmUKKyAgICB0cnk6CisgICAgICAgIGlmIG9wdGlvbnMucmVkaXJlY3RlZDoKKyAgICAgICAgICAgIHN0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgICAgIHN0ZGVyciA9IHN0ZG91dAorICAgICAgICBlbGlmIG9wdGlvbnMucmVkaXJlY3RfdG86CisgICAgICAgICAgICByZWRpcmVjdCA9IG9wZW4ob3B0aW9ucy5yZWRpcmVjdF90bywgJ3diJykKKyAgICAgICAgICAgIHN0ZG91dCA9IHJlZGlyZWN0CisgICAgICAgICAgICBzdGRlcnIgPSByZWRpcmVjdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICAgICAgc3RkZXJyID0gc3lzLnN0ZGVycgorICAgICAgICAgICAgCisgICAgICAgICMgVE9ETzogc2V0IGFyZ3VtZW50cyB0byBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgICAgICAgb3B0cyA9IGludGVycC5PcHRpb25zKCkKKyAgICAgICAgb3B0cy5oZ2JpbmFyeSA9IGhnYmluCisgICAgICAgIGlwID0gaW50ZXJwLkludGVycHJldGVyKGN3ZCwgZGVidWdmbGFncywgc3Rkb3V0PXN0ZG91dCwgc3RkZXJyPXN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz1vcHRzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIEV4cG9ydCBnaXZlbiBlbnZpcm9ubWVudCBpbiBzaGVsbCBvYmplY3QKKyAgICAgICAgICAgIGZvciBrLHYgaW4gZW52Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGlwLmdldF9lbnYoKS5leHBvcnQoayx2KQorICAgICAgICAgICAgcmV0dXJuIGlwLmV4ZWN1dGVfc2NyaXB0KGlucHV0LCBhc3QsIHNjcmlwdHBhdGg9Y29tbWFuZF9maWxlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaXAuY2xvc2UoKQorICAgIGZpbmFsbHk6CisgICAgICAgIGlmIHJlZGlyZWN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmVkaXJlY3QuY2xvc2UoKQorCitkZWYgc2goY3dkPU5vbmUsIGFyZ3M9Tm9uZSwgZGVidWdmbGFncz1Ob25lLCBlbnY9Tm9uZSk6CisgICAgaWYgYXJncyBpcyBOb25lOgorICAgICAgICBhcmdzID0gc3lzLmFyZ3ZbMTpdCisgICAgc2hhcmdzLCBjbWRhcmdzID0gc3BsaXRfYXJncyhhcmdzKQorICAgIG9wdGlvbnMsIHNoYXJncyA9IFNIX09QVC5wYXJzZV9hcmdzKHNoYXJncykKKworICAgIGlmIG9wdGlvbnMucHJvZmlsZToKKyAgICAgICAgaW1wb3J0IGxzcHJvZgorICAgICAgICBwID0gbHNwcm9mLlByb2ZpbGVyKCkKKyAgICAgICAgcC5lbmFibGUoc3ViY2FsbHM9VHJ1ZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIF9zaChjd2QsIHNoYXJncywgY21kYXJncywgb3B0aW9ucywgZGVidWdmbGFncywgZW52KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcC5kaXNhYmxlKCkKKyAgICAgICAgICAgIHN0YXRzID0gbHNwcm9mLlN0YXRzKHAuZ2V0c3RhdHMoKSkKKyAgICAgICAgICAgIHN0YXRzLnNvcnQoKQorICAgICAgICAgICAgc3RhdHMucHByaW50KHRvcD0xMCwgZmlsZT1zeXMuc3RkZXJyLCBjbGltaXQ9NSkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gX3NoKGN3ZCwgc2hhcmdzLCBjbWRhcmdzLCBvcHRpb25zLCBkZWJ1Z2ZsYWdzLCBlbnYpCisgICAgICAgICAgICAKK2RlZiBtYWluKCk6CisgICAgc3lzLmV4aXQoc2goKSkKKworaWYgX19uYW1lX189PSdfX21haW5fXyc6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvcHlzaGxleC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9weXNobGV4LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMDEyMzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvcHlzaGxleC5weQpAQCAtMCwwICsxLDg4OCBAQAorIyBweXNobGV4LnB5IC0gUExZIGNvbXBhdGlibGUgbGV4ZXIgZm9yIHB5c2guCisjCisjIENvcHlyaWdodCAyMDA3IFBhdHJpY2sgTWV6YXJkCisjCisjIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMKKyMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKworIyBUT0RPOgorIyAtIHJldmlldyBhbGwgImNoYXIgaW4gJ2FiYyciIHNuaXBwZXRzOiB0aGUgZW1wdHkgc3RyaW5nIGNhbiBiZSBtYXRjaGVkCisjIC0gdGVzdCBsaW5lIGNvbnRpbnVhdGlvbnMgd2l0aGluIHF1b3RlZC9leHBhbnNpb24gc3RyaW5ncworIyAtIGVvZiBpcyBidWdneSB3cnQgc3VibGV4ZXJzCisjIC0gdGhlIGxleGVyIGNhbm5vdCByZWFsbHkgd29yayBpbiBwdWxsIG1vZGUgYXMgaXQgd291bGQgYmUgcmVxdWlyZWQgdG8gcnVuCisjIFBMWSBpbiBwdWxsIG1vZGUuIEl0IHdhcyBkZXNpZ25lZCB0byB3b3JrIGluY3JlbWVudGFsbHkgYW5kIGl0IHdvdWxkIG5vdCBiZQorIyB0aGF0IGhhcmQgdG8gZW5hYmxlIHB1bGwgbW9kZS4KK2ltcG9ydCByZQordHJ5OgorICAgIHMgPSBzZXQoKQorICAgIGRlbCBzCitleGNlcHQgTmFtZUVycm9yOgorICAgIGZyb20gU2V0IGltcG9ydCBTZXQgYXMgc2V0CisKK2Zyb20gcGx5IGltcG9ydCBsZXgKK2Zyb20gc2hlcnJvcnMgaW1wb3J0ICoKKworY2xhc3MgTmVlZE1vcmUoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2RlZiBpc19ibGFuayhjKToKKyAgICByZXR1cm4gYyBpbiAoJyAnLCAnXHQnKQorICAgIAorX1JFX0RJR0lUUyA9IHJlLmNvbXBpbGUocideXGQrJCcpCisKK2RlZiBhcmVfZGlnaXRzKHMpOgorICAgIHJldHVybiBfUkVfRElHSVRTLnNlYXJjaChzKSBpcyBub3QgTm9uZQorCitfT1BFUkFUT1JTID0gZGljdChbCisgICAgKCcmJicsICdBTkRfSUYnKSwKKyAgICAoJ3x8JywgJ09SX0lGJyksCisgICAgKCc7OycsICdEU0VNSScpLAorICAgICgnPDwnLCAnRExFU1MnKSwKKyAgICAoJz4+JywgJ0RHUkVBVCcpLAorICAgICgnPCYnLCAnTEVTU0FORCcpLAorICAgICgnPiYnLCAnR1JFQVRBTkQnKSwKKyAgICAoJzw+JywgJ0xFU1NHUkVBVCcpLAorICAgICgnPDwtJywgJ0RMRVNTREFTSCcpLAorICAgICgnPnwnLCAnQ0xPQkJFUicpLAorICAgICgnJicsICdBTVAnKSwKKyAgICAoJzsnLCAnQ09NTUEnKSwKKyAgICAoJzwnLCAnTEVTUycpLAorICAgICgnPicsICdHUkVBVEVSJyksCisgICAgKCcoJywgJ0xQQVJFTlMnKSwKKyAgICAoJyknLCAnUlBBUkVOUycpLAorXSkKKworI01ha2UgYSBmdW5jdGlvbiB0byBzaWxlbmNlIHB5Y2hlY2tlciAiTG9jYWwgdmFyaWFibGUgc2hhZG93cyBnbG9iYWwiCitkZWYgbWFrZV9wYXJ0aWFsX29wcygpOgorICAgIHBhcnRpYWxzID0ge30KKyAgICBmb3IgayBpbiBfT1BFUkFUT1JTOgorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4oaykrMSk6CisgICAgICAgICAgICBwYXJ0aWFsc1trWzppXV0gPSBOb25lCisgICAgcmV0dXJuIHBhcnRpYWxzICAKKworX1BBUlRJQUxfT1BFUkFUT1JTID0gbWFrZV9wYXJ0aWFsX29wcygpICAgIAorICAgICAgICAKK2RlZiBpc19wYXJ0aWFsX29wKHMpOgorICAgICIiIlJldHVybiBUcnVlIGlmIHMgbWF0Y2hlcyBhIG5vbi1lbXB0eSBzdWJwYXJ0IG9mIGFuIG9wZXJhdG9yIHN0YXJ0aW5nCisgICAgYXQgaXRzIGZpcnN0IGNoYXJhY3Rlci4KKyAgICAiIiIKKyAgICByZXR1cm4gcyBpbiBfUEFSVElBTF9PUEVSQVRPUlMKKyAgICAKK2RlZiBpc19vcChzKToKKyAgICAiIiJJZiBzIG1hdGNoZXMgYW4gb3BlcmF0b3IsIHJldHVybnMgdGhlIG9wZXJhdG9yIGlkZW50aWZpZXIuIFJldHVybiBOb25lCisgICAgb3RoZXJ3aXNlLgorICAgICIiIgorICAgIHJldHVybiBfT1BFUkFUT1JTLmdldChzKQorCitfUkVTRVJWRURTID0gZGljdChbCisgICAgKCdpZicsICdJZicpLAorICAgICgndGhlbicsICdUaGVuJyksCisgICAgKCdlbHNlJywgJ0Vsc2UnKSwKKyAgICAoJ2VsaWYnLCAnRWxpZicpLAorICAgICgnZmknLCAnRmknKSwKKyAgICAoJ2RvJywgJ0RvJyksCisgICAgKCdkb25lJywgJ0RvbmUnKSwKKyAgICAoJ2Nhc2UnLCAnQ2FzZScpLAorICAgICgnZXNhYycsICdFc2FjJyksCisgICAgKCd3aGlsZScsICdXaGlsZScpLAorICAgICgndW50aWwnLCAnVW50aWwnKSwKKyAgICAoJ2ZvcicsICdGb3InKSwKKyAgICAoJ3snLCAnTGJyYWNlJyksCisgICAgKCd9JywgJ1JicmFjZScpLAorICAgICgnIScsICdCYW5nJyksCisgICAgKCdpbicsICdJbicpLAorICAgICgnfCcsICdQSVBFJyksCitdKQorICAgIAorZGVmIGdldF9yZXNlcnZlZChzKToKKyAgICByZXR1cm4gX1JFU0VSVkVEUy5nZXQocykKKyAgICAKK19SRV9OQU1FID0gcmUuY29tcGlsZShyJ15bMC05YS16QS1aX10rJCcpCisKK2RlZiBpc19uYW1lKHMpOgorICAgIHJldHVybiBfUkVfTkFNRS5zZWFyY2gocykgaXMgbm90IE5vbmUKKworZGVmIGZpbmRfY2hhcnMoc2VxLCBjaGFycyk6CisgICAgZm9yIGksdiBpbiBlbnVtZXJhdGUoc2VxKToKKyAgICAgICAgaWYgdiBpbiBjaGFyczoKKyAgICAgICAgICAgIHJldHVybiBpLHYKKyAgICByZXR1cm4gLTEsIE5vbmUKKworY2xhc3MgV29yZExleGVyOgorICAgICIiIldvcmRMZXhlciBwYXJzZSBxdW90ZWQgb3IgZXhwYW5zaW9uIGV4cHJlc3Npb25zIGFuZCByZXR1cm4gYW4gZXhwcmVzc2lvbgorICAgIHRyZWUuIFRoZSBpbnB1dCBzdHJpbmcgY2FuIGJlIGFueSB3ZWxsIGZvcm1lZCBzZXF1ZW5jZSBiZWdpbm5pbmcgd2l0aCBxdW90aW5nCisgICAgb3IgZXhwYW5zaW9uIGNoYXJhY3Rlci4gRW1iZWRkZWQgZXhwcmVzc2lvbnMgYXJlIGhhbmRsZWQgcmVjdXJzaXZlbHkuIFRoZQorICAgIHJlc3VsdGluZyB0cmVlIGlzIG1hZGUgb2YgbGlzdHMgYW5kIHN0cmluZ3MuIExpc3RzIHJlcHJlc2VudCBxdW90ZWQgb3IKKyAgICBleHBhbnNpb24gZXhwcmVzc2lvbnMuIEVhY2ggbGlzdCBmaXJzdCBlbGVtZW50IGlzIHRoZSBvcGVuaW5nIHNlcGFyYXRvciwKKyAgICB0aGUgbGFzdCBvbmUgdGhlIGNsb3Npbmcgc2VwYXJhdG9yLiBJbi1iZXR3ZWVuIGNhbiBiZSBhbnkgbnVtYmVyIG9mIHN0cmluZ3MKKyAgICBvciBsaXN0cyBmb3Igc3ViLWV4cHJlc3Npb25zLiBOb24gcXVvdGVkL2V4cGFuc2lvbiBleHByZXNzaW9uIGNhbiB3cml0dGVuIGFzCisgICAgc3RyaW5ncyBvciBhcyBsaXN0cyB3aXRoIGVtcHR5IHN0cmluZ3MgYXMgc3RhcnRpbmcgYW5kIGVuZGluZyBkZWxpbWl0ZXJzLgorICAgICIiIgorCisgICAgTkFNRV9DSEFSU0VUID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5XycKKyAgICBOQU1FX0NIQVJTRVQgPSBkaWN0KHppcChOQU1FX0NIQVJTRVQsIE5BTUVfQ0hBUlNFVCkpCisgICAgCisgICAgU1BFQ0lBTF9DSEFSU0VUID0gJ0AqIz8tJCEwJworICAgIAorICAgICNDaGFyYWN0ZXJzIHdoaWNoIGNhbiBiZSBlc2NhcGVkIGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgZGVsaW1pdGVycworICAgIEVTQ0FQQUJMRSA9IHsKKyAgICAgICAgJ2AnOiBzZXQoWyckJywgJ1xcJywgJ2AnXSksCisgICAgICAgICciJzogc2V0KFsnJCcsICdcXCcsICdgJywgJyInXSksCisgICAgICAgICInIjogc2V0KCksCisgICAgfQorICAgICAgICAKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaGVyZWRvYyA9IEZhbHNlKToKKyAgICAgICAgIyBfYnVmZmVyIGlzIHRoZSB1bnByb2Nlc3NlZCBpbnB1dCBjaGFyYWN0ZXJzIGJ1ZmZlcgorICAgICAgICBzZWxmLl9idWZmZXIgPSBbXQorICAgICAgICAjIF9zdGFjayBpcyBlbXB0eSBvciBjb250YWlucyBhIHF1b3RlZCBsaXN0IGJlaW5nIHByb2Nlc3NlZAorICAgICAgICAjICh0aGlzIGlzIHRoZSBERlMgcGF0aCB0byB0aGUgcXVvdGVkIGV4cHJlc3Npb24gYmVpbmcgZXZhbHVhdGVkKS4KKyAgICAgICAgc2VsZi5fc3RhY2sgPSBbXQorICAgICAgICBzZWxmLl9lc2NhcGFibGUgPSBOb25lCisgICAgICAgICMgVHJ1ZSB3aGVuIHBhcnNpbmcgdW5xdW90ZWQgaGVyZSBkb2N1bWVudHMKKyAgICAgICAgc2VsZi5faGVyZWRvYyA9IGhlcmVkb2MKKyAgICAgICAgCisgICAgZGVmIGFkZChzZWxmLCBkYXRhLCBlb2Y9RmFsc2UpOgorICAgICAgICAiIiJGZWVkIHRoZSBsZXhlciB3aXRoIG1vcmUgZGF0YS4gSWYgdGhlIHF1b3RlZCBleHByZXNzaW9uIGNhbiBiZQorICAgICAgICBkZWxpbWl0ZWQsIHJldHVybiBhIHR1cGxlIChleHByLCByZW1haW5pbmcpIGNvbnRhaW5pbmcgdGhlIGV4cHJlc3Npb24KKyAgICAgICAgdHJlZSBhbmQgdGhlIHVuY29uc3VtZWQgZGF0YS4KKyAgICAgICAgT3RoZXJ3aXNlLCByYWlzZSBOZWVkTW9yZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2J1ZmZlciArPSBsaXN0KGRhdGEpCisgICAgICAgIHNlbGYuX3BhcnNlKGVvZikKKyAgICAgICAgCisgICAgICAgIHJlc3VsdCA9IHNlbGYuX3N0YWNrWzBdCisgICAgICAgIHJlbWFpbmluZyA9ICcnLmpvaW4oc2VsZi5fYnVmZmVyKQorICAgICAgICBzZWxmLl9zdGFjayA9IFtdCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IFtdCisgICAgICAgIHJldHVybiByZXN1bHQsIHJlbWFpbmluZworICAgICAgICAKKyAgICBkZWYgX2lzX2VzY2FwYWJsZShzZWxmLCBjLCBkZWxpbT1Ob25lKToKKyAgICAgICAgaWYgZGVsaW0gaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYuX2hlcmVkb2M6CisgICAgICAgICAgICAgICAgIyBCYWNrc2xhc2hlcyB3b3JrcyBhcyBpZiB0aGV5IHdlcmUgZG91YmxlIHF1b3RlZCBpbiB1bnF1b3RlZAorICAgICAgICAgICAgICAgICMgaGVyZS1kb2N1bWVudHMKKyAgICAgICAgICAgICAgICBkZWxpbSA9ICciJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBsZW4oc2VsZi5fc3RhY2spPD0xOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgICAgIGRlbGltID0gc2VsZi5fc3RhY2tbLTJdWzBdCisgICAgICAgICAgICAKKyAgICAgICAgZXNjYXBhYmxlcyA9IHNlbGYuRVNDQVBBQkxFLmdldChkZWxpbSwgTm9uZSkKKyAgICAgICAgcmV0dXJuIGVzY2FwYWJsZXMgaXMgTm9uZSBvciBjIGluIGVzY2FwYWJsZXMKKyAgICAgICAgCisgICAgZGVmIF9wYXJzZV9zcXVvdGUoc2VsZiwgYnVmLCByZXN1bHQsIGVvZik6CisgICAgICAgIGlmIG5vdCBidWY6CisgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBvcyA9IGJ1Zi5pbmRleCgiJyIpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgTmVlZE1vcmUoKQorICAgICAgICByZXN1bHRbLTFdICs9ICcnLmpvaW4oYnVmWzpwb3NdKQorICAgICAgICByZXN1bHQgKz0gWyInIl0KKyAgICAgICAgcmV0dXJuIHBvcysxLCBUcnVlCisgICAgICAgIAorICAgIGRlZiBfcGFyc2VfYnF1b3RlKHNlbGYsIGJ1ZiwgcmVzdWx0LCBlb2YpOgorICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgcmFpc2UgTmVlZE1vcmUoKQorICAgICAgICAgICAgCisgICAgICAgIGlmIGJ1ZlswXT09J1xuJzoKKyAgICAgICAgICAgICNSZW1vdmUgbGluZSBjb250aW51YXRpb25zCisgICAgICAgICAgICByZXN1bHRbOl0gPSBbJycsICcnLCAnJ10KKyAgICAgICAgZWxpZiBzZWxmLl9pc19lc2NhcGFibGUoYnVmWzBdKToKKyAgICAgICAgICAgIHJlc3VsdFstMV0gKz0gYnVmWzBdCisgICAgICAgICAgICByZXN1bHQgKz0gWycnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgI0tlZXAgYXMgc3VjaAorICAgICAgICAgICAgcmVzdWx0WzpdID0gWycnLCAnXFwnK2J1ZlswXSwgJyddCisgICAgICAgIAorICAgICAgICByZXR1cm4gMSwgVHJ1ZQorICAgICAgICAKKyAgICBkZWYgX3BhcnNlX2RxdW90ZShzZWxmLCBidWYsIHJlc3VsdCwgZW9mKToKKyAgICAgICAgaWYgbm90IGJ1ZjoKKyAgICAgICAgICAgIHJhaXNlIE5lZWRNb3JlKCkKKyAgICAgICAgcG9zLCBzZXAgPSBmaW5kX2NoYXJzKGJ1ZiwgJyRcXGAiJykKKyAgICAgICAgaWYgcG9zPT0tMToKKyAgICAgICAgICAgIHJhaXNlIE5lZWRNb3JlKCkKKyAgICAgICAgICAgIAorICAgICAgICByZXN1bHRbLTFdICs9ICcnLmpvaW4oYnVmWzpwb3NdKQorICAgICAgICBpZiBzZXA9PSciJzoKKyAgICAgICAgICAgIHJlc3VsdCArPSBbJyInXQorICAgICAgICAgICAgcmV0dXJuIHBvcysxLCBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjS2VlcCBldmVyeXRoaW5nIHVudGlsIHRoZSBzZXBhcmF0b3IgYW5kIGRlZmVyIHByb2Nlc3NpbmcKKyAgICAgICAgICAgIHJldHVybiBwb3MsIEZhbHNlCisgICAgICAgICAgICAKKyAgICBkZWYgX3BhcnNlX2NvbW1hbmQoc2VsZiwgYnVmLCByZXN1bHQsIGVvZik6CisgICAgICAgIGlmIG5vdCBidWY6CisgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisKKyAgICAgICAgY2hhcnMgPSAnJFxcYCJcJycKKyAgICAgICAgaWYgcmVzdWx0WzBdID09ICckKCc6CisgICAgICAgICAgICBjaGFycyArPSAnKScKKyAgICAgICAgcG9zLCBzZXAgPSBmaW5kX2NoYXJzKGJ1ZiwgY2hhcnMpCisgICAgICAgIGlmIHBvcyA9PSAtMToKKyAgICAgICAgICAgIHJhaXNlIE5lZWRNb3JlKCkKKyAgICAgICAgICAgIAorICAgICAgICByZXN1bHRbLTFdICs9ICcnLmpvaW4oYnVmWzpwb3NdKQorICAgICAgICBpZiAocmVzdWx0WzBdPT0nJCgnIGFuZCBzZXA9PScpJykgb3IgKHJlc3VsdFswXT09J2AnIGFuZCBzZXA9PSdgJyk6CisgICAgICAgICAgICByZXN1bHQgKz0gW3NlcF0KKyAgICAgICAgICAgIHJldHVybiBwb3MrMSwgVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHBvcywgRmFsc2UKKyAgICAgICAgICAgIAorICAgIGRlZiBfcGFyc2VfcGFyYW1ldGVyKHNlbGYsIGJ1ZiwgcmVzdWx0LCBlb2YpOgorICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgcmFpc2UgTmVlZE1vcmUoKQorICAgICAgICAgICAgCisgICAgICAgIHBvcywgc2VwID0gZmluZF9jaGFycyhidWYsICckXFxgIlwnfScpCisgICAgICAgIGlmIHBvcz09LTE6CisgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisgICAgICAgICAgICAKKyAgICAgICAgcmVzdWx0Wy0xXSArPSAnJy5qb2luKGJ1Zls6cG9zXSkKKyAgICAgICAgaWYgc2VwPT0nfSc6CisgICAgICAgICAgICByZXN1bHQgKz0gW3NlcF0KKyAgICAgICAgICAgIHJldHVybiBwb3MrMSwgVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHBvcywgRmFsc2UKKyAgICAgICAgICAgIAorICAgIGRlZiBfcGFyc2VfZG9sbGFyKHNlbGYsIGJ1ZiwgcmVzdWx0LCBlb2YpOgorICAgICAgICBzZXAgPSByZXN1bHRbMF0KKyAgICAgICAgaWYgc2VwPT0nJCc6ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgICAgICNUT0RPOiBoYW5kbGUgZW1wdHkgJAorICAgICAgICAgICAgICAgIHJhaXNlIE5lZWRNb3JlKCkKKyAgICAgICAgICAgIGlmIGJ1ZlswXT09JygnOgorICAgICAgICAgICAgICAgIGlmIGxlbihidWYpPT0xOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIGJ1ZlsxXT09JygnOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRbMF0gPSAnJCgoJworICAgICAgICAgICAgICAgICAgICBidWZbOjJdID0gW10KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRbMF0gPSAnJCgnCisgICAgICAgICAgICAgICAgICAgIGJ1Zls6MV0gPSBbXQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZWxpZiBidWZbMF09PSd7JzoKKyAgICAgICAgICAgICAgICByZXN1bHRbMF0gPSAnJHsnCisgICAgICAgICAgICAgICAgYnVmWzoxXSA9IFtdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGJ1ZlswXSBpbiBzZWxmLlNQRUNJQUxfQ0hBUlNFVDoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wy0xXSA9IGJ1ZlswXQorICAgICAgICAgICAgICAgICAgICByZWFkID0gMQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZvciByZWFkLGMgaW4gZW51bWVyYXRlKGJ1Zik6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjIG5vdCBpbiBzZWxmLk5BTUVfQ0hBUlNFVDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGVvZjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisgICAgICAgICAgICAgICAgICAgICAgICByZWFkICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICByZXN1bHRbLTFdICs9ICcnLmpvaW4oYnVmWzA6cmVhZF0pCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIG5vdCByZXN1bHRbLTFdOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRbOl0gPSBbJycsIHJlc3VsdFswXSwgJyddCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFsnJ10gCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWQsVHJ1ZQorICAgICAgICAKKyAgICAgICAgc2VwID0gcmVzdWx0WzBdICAgIAorICAgICAgICBpZiBzZXA9PSckKCc6CisgICAgICAgICAgICBwYXJzZWZ1bmMgPSBzZWxmLl9wYXJzZV9jb21tYW5kCisgICAgICAgIGVsaWYgc2VwPT0nJHsnOgorICAgICAgICAgICAgcGFyc2VmdW5jID0gc2VsZi5fcGFyc2VfcGFyYW1ldGVyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKHNlcCkKKyAgICAgICAgICAgIAorICAgICAgICBwb3MsIGNsb3NlZCA9IHBhcnNlZnVuYyhidWYsIHJlc3VsdCwgZW9mKQorICAgICAgICByZXR1cm4gcG9zLCBjbG9zZWQKKworICAgIGRlZiBfcGFyc2Uoc2VsZiwgZW9mKToKKyAgICAgICAgYnVmID0gc2VsZi5fYnVmZmVyCisgICAgICAgIHN0YWNrID0gc2VsZi5fc3RhY2sKKyAgICAgICAgcmVjdXJzZSA9IEZhbHNlCisgICAgCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBpZiBub3Qgc3RhY2sgb3IgcmVjdXJzZToKKyAgICAgICAgICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisgICAgICAgICAgICAgICAgaWYgYnVmWzBdIG5vdCBpbiAoJyJcXGAkXCcnKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU2hlbGxTeW50YXhFcnJvcignSW52YWxpZCBxdW90ZWQgc3RyaW5nIHNlcXVlbmNlJykKKyAgICAgICAgICAgICAgICBzdGFjay5hcHBlbmQoW2J1ZlswXSwgJyddKQorICAgICAgICAgICAgICAgIGJ1Zls6MV0gPSBbXQorICAgICAgICAgICAgICAgIHJlY3Vyc2UgPSBGYWxzZQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgcmVzdWx0ID0gc3RhY2tbLTFdCisgICAgICAgICAgICBpZiByZXN1bHRbMF09PSInIjoKKyAgICAgICAgICAgICAgICBwYXJzZWZ1bmMgPSBzZWxmLl9wYXJzZV9zcXVvdGUKKyAgICAgICAgICAgIGVsaWYgcmVzdWx0WzBdPT0nXFwnOgorICAgICAgICAgICAgICAgIHBhcnNlZnVuYyA9IHNlbGYuX3BhcnNlX2JxdW90ZQorICAgICAgICAgICAgZWxpZiByZXN1bHRbMF09PSciJzoKKyAgICAgICAgICAgICAgICBwYXJzZWZ1bmMgPSBzZWxmLl9wYXJzZV9kcXVvdGUKKyAgICAgICAgICAgIGVsaWYgcmVzdWx0WzBdPT0nYCc6CisgICAgICAgICAgICAgICAgcGFyc2VmdW5jID0gc2VsZi5fcGFyc2VfY29tbWFuZAorICAgICAgICAgICAgZWxpZiByZXN1bHRbMF1bMF09PSckJzoKKyAgICAgICAgICAgICAgICBwYXJzZWZ1bmMgPSBzZWxmLl9wYXJzZV9kb2xsYXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICByZWFkLCBjbG9zZWQgPSBwYXJzZWZ1bmMoYnVmLCByZXN1bHQsIGVvZikKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGJ1Zls6cmVhZF0gPSBbXQorICAgICAgICAgICAgaWYgY2xvc2VkOgorICAgICAgICAgICAgICAgIGlmIGxlbihzdGFjayk+MToKKyAgICAgICAgICAgICAgICAgICAgI01lcmdlIGluIHBhcmVudCBleHByZXNzaW9uCisgICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IHN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgIHN0YWNrWy0xXSArPSBbcGFyc2VkXQorICAgICAgICAgICAgICAgICAgICBzdGFja1stMV0gKz0gWycnXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlY3Vyc2UgPSBUcnVlCisKK2RlZiBub3JtYWxpemVfd29yZHRyZWUod3RyZWUpOgorICAgICIiIkZvbGQgYmFjayBldmVyeSBsaXRlcmFsIHNlcXVlbmNlIChkZWxpbWl0ZWQgd2l0aCBlbXB0eSBzdHJpbmdzKSBpbnRvCisgICAgcGFyZW50IHNlcXVlbmNlLgorICAgICIiIgorICAgIGRlZiBub3JtYWxpemUod3RyZWUpOgorICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICBmb3IgcGFydCBpbiB3dHJlZVsxOi0xXToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFydCwgbGlzdCk6CisgICAgICAgICAgICAgICAgcGFydCA9IG5vcm1hbGl6ZShwYXJ0KQorICAgICAgICAgICAgICAgIGlmIHBhcnRbMF09PScnOgorICAgICAgICAgICAgICAgICAgICAjTW92ZSB0aGUgcGFydCBjb250ZW50IGJhY2sgYXQgY3VycmVudCBsZXZlbAorICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gcGFydFsxOi0xXQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxpZiBub3QgcGFydDoKKyAgICAgICAgICAgICAgICAjUmVtb3ZlIGVtcHR5IHN0cmluZ3MKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwYXJ0KQorICAgICAgICBpZiBub3QgcmVzdWx0OgorICAgICAgICAgICAgcmVzdWx0ID0gWycnXSAgICAKKyAgICAgICAgcmV0dXJuIFt3dHJlZVswXV0gKyByZXN1bHQgKyBbd3RyZWVbLTFdXQorICAgICAgICAgICAgICAgIAorICAgIHJldHVybiBub3JtYWxpemUod3RyZWUpCisgICAgCisgICAgICAgICAgICAgICAgCitkZWYgbWFrZV93b3JkdHJlZSh0b2tlbiwgaGVyZV9kb2N1bWVudD1GYWxzZSk6CisgICAgIiIiUGFyc2UgYSBkZWxpbWl0ZWQgdG9rZW4gYW5kIHJldHVybiBhIHRyZWUgc2ltaWxhciB0byB0aGUgb25lcyByZXR1cm5lZCBieQorICAgIFdvcmRMZXhlci4gdG9rZW4gbWF5IGNvbnRhaW4gYW55IGNvbWJpbmF0aW9ucyBvZiBleHBhbnNpb24vcXVvdGVkIGZpZWxkcyBhbmQKKyAgICBub24tb25lcy4KKyAgICAiIiIgICAgCisgICAgdHJlZSA9IFsnJ10KKyAgICByZW1haW5pbmcgPSB0b2tlbgorICAgIGRlbGltaXRlcnMgPSAnXFwkYCcKKyAgICBpZiBub3QgaGVyZV9kb2N1bWVudDoKKyAgICAgICAgZGVsaW1pdGVycyArPSAnXCciJworICAgIAorICAgIHdoaWxlIDE6CisgICAgICAgIHBvcywgc2VwID0gZmluZF9jaGFycyhyZW1haW5pbmcsIGRlbGltaXRlcnMpCisgICAgICAgIGlmIHBvcz09LTE6CisgICAgICAgICAgICB0cmVlICs9IFtyZW1haW5pbmcsICcnXQorICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZV93b3JkdHJlZSh0cmVlKQorICAgICAgICB0cmVlLmFwcGVuZChyZW1haW5pbmdbOnBvc10pCisgICAgICAgIHJlbWFpbmluZyA9IHJlbWFpbmluZ1twb3M6XQorICAgICAgICAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0LCByZW1haW5pbmcgPSBXb3JkTGV4ZXIoaGVyZWRvYyA9IGhlcmVfZG9jdW1lbnQpLmFkZChyZW1haW5pbmcsIFRydWUpCisgICAgICAgIGV4Y2VwdCBOZWVkTW9yZToKKyAgICAgICAgICAgIHJhaXNlIFNoZWxsU3ludGF4RXJyb3IoJ0ludmFsaWQgdG9rZW4gIiVzIicpCisgICAgICAgIHRyZWUuYXBwZW5kKHJlc3VsdCkKKyAgICAgICAgCisgICAgICAgICAgICAgICAgCitkZWYgd29yZHRyZWVfYXNfc3RyaW5nKHd0cmVlKToKKyAgICAiIiJSZXdyaXRlIGFuIGV4cHJlc3Npb24gdHJlZSBnZW5lcmF0ZWQgYnkgbWFrZV93b3JkdHJlZSBhcyBzdHJpbmcuIiIiCisgICAgZGVmIHZpc2l0KG5vZGUsIG91dHB1dCk6CisgICAgICAgIGZvciBjaGlsZCBpbiBub2RlOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjaGlsZCwgbGlzdCk6CisgICAgICAgICAgICAgICAgdmlzaXQoY2hpbGQsIG91dHB1dCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChjaGlsZCkKKyAgICAKKyAgICBvdXRwdXQgPSBbXQorICAgIHZpc2l0KHd0cmVlLCBvdXRwdXQpCisgICAgcmV0dXJuICcnLmpvaW4ob3V0cHV0KQorICAgIAorICAgIAorZGVmIHVucXVvdGVfd29yZHRyZWUod3RyZWUpOgorICAgICIiIkZvbGQgdGhlIHdvcmQgdHJlZSB3aGlsZSByZW1vdmluZyBxdW90ZXMgZXZlcnl3aGVyZS4gT3RoZXIgZXhwYW5zaW9uCisgICAgc2VxdWVuY2VzIGFyZSBqb2luZWQgYXMgc3VjaC4KKyAgICAiIiIKKyAgICBkZWYgdW5xdW90ZSh3dHJlZSk6CisgICAgICAgIHVucXVvdGVkID0gW10KKyAgICAgICAgaWYgd3RyZWVbMF0gaW4gKCcnLCAiJyIsICciJywgJ1xcJyk6CisgICAgICAgICAgICB3dHJlZSA9IHd0cmVlWzE6LTFdCisgICAgICAgICAgICAKKyAgICAgICAgZm9yIHBhcnQgaW4gd3RyZWU6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcnQsIGxpc3QpOgorICAgICAgICAgICAgICAgIHBhcnQgPSB1bnF1b3RlKHBhcnQpCisgICAgICAgICAgICB1bnF1b3RlZC5hcHBlbmQocGFydCkKKyAgICAgICAgcmV0dXJuICcnLmpvaW4odW5xdW90ZWQpCisgICAgICAgICAgICAKKyAgICByZXR1cm4gdW5xdW90ZSh3dHJlZSkKKyAgICAKKyAgICAKK2NsYXNzIEhlcmVEb2NMZXhlcjoKKyAgICAiIiJIZXJlRG9jTGV4ZXIgZGVsaW1pdHMgd2hhdGV2ZXIgY29tZXMgZnJvbSB0aGUgaGVyZS1kb2N1bWVudCBzdGFydGluZyBuZXdsaW5lCisgICAgbm90IGluY2x1ZGVkIHRvIHRoZSBjbG9zaW5nIGRlbGltaXRlciBsaW5lIGluY2x1ZGVkLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcCwgZGVsaW0pOgorICAgICAgICBhc3NlcnQgb3AgaW4gKCc8PCcsICc8PC0nKQorICAgICAgICBpZiBub3QgZGVsaW06CisgICAgICAgICAgICByYWlzZSBTaGVsbFN5bnRheEVycm9yKCdpbnZhbGlkIGhlcmUgZG9jdW1lbnQgZGVsaW1pdGVyICVzJyAlIHN0cihkZWxpbSkpCisgICAgICAgICAgICAKKyAgICAgICAgc2VsZi5fb3AgPSBvcAorICAgICAgICBzZWxmLl9kZWxpbSA9IGRlbGltCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IFtdCisgICAgICAgIHNlbGYuX3Rva2VuID0gW10KKyAgICAgICAgCisgICAgZGVmIGFkZChzZWxmLCBkYXRhLCBlb2YpOgorICAgICAgICAiIiJJZiB0aGUgaGVyZS1kb2N1bWVudCB3YXMgZGVsaW1pdGVkLCByZXR1cm4gYSB0dXBsZSAoY29udGVudCwgcmVtYWluaW5nKS4KKyAgICAgICAgUmFpc2UgTmVlZE1vcmUoKSBvdGhlcndpc2UuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9idWZmZXIgKz0gbGlzdChkYXRhKQorICAgICAgICBzZWxmLl9wYXJzZShlb2YpCisgICAgICAgIHRva2VuID0gJycuam9pbihzZWxmLl90b2tlbikKKyAgICAgICAgcmVtYWluaW5nID0gJycuam9pbihzZWxmLl9idWZmZXIpCisgICAgICAgIHNlbGYuX3Rva2VuLCBzZWxmLl9yZW1haW5pbmcgPSBbXSwgW10KKyAgICAgICAgcmV0dXJuIHRva2VuLCByZW1haW5pbmcKKyAgICAKKyAgICBkZWYgX3BhcnNlKHNlbGYsIGVvZik6CisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAjTG9vayBmb3IgZmlyc3QgdW5lc2NhcGVkIG5ld2xpbmUuIFF1b3RlcyBtYXkgYmUgaWdub3JlZAorICAgICAgICAgICAgZXNjYXBlZCA9IEZhbHNlCisgICAgICAgICAgICBmb3IgaSxjIGluIGVudW1lcmF0ZShzZWxmLl9idWZmZXIpOgorICAgICAgICAgICAgICAgIGlmIGVzY2FwZWQ6CisgICAgICAgICAgICAgICAgICAgIGVzY2FwZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGVsaWYgYz09J1xcJzoKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBlbGlmIGM9PSdcbic6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGkgPSAtMQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIGk9PS0xIG9yIHNlbGYuX2J1ZmZlcltpXSE9J1xuJzoKKyAgICAgICAgICAgICAgICBpZiBub3QgZW9mOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisgICAgICAgICAgICAgICAgI05vIG1vcmUgZGF0YSwgbWF5YmUgdGhlIGxhc3QgbGluZSBpcyBjbG9zaW5nIGRlbGltaXRlcgorICAgICAgICAgICAgICAgIGxpbmUgPSAnJy5qb2luKHNlbGYuX2J1ZmZlcikKKyAgICAgICAgICAgICAgICBlb2wgPSAnJworICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlcls6XSA9IFtdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxpbmUgPSAnJy5qb2luKHNlbGYuX2J1ZmZlcls6aV0pCisgICAgICAgICAgICAgICAgZW9sID0gc2VsZi5fYnVmZmVyW2ldCisgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyWzppKzFdID0gW10KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgc2VsZi5fb3A9PSc8PC0nOgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLmxzdHJpcCgnXHQnKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgbGluZT09c2VsZi5fZGVsaW06CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHNlbGYuX3Rva2VuICs9IFtsaW5lLCBlb2xdCisgICAgICAgICAgICBpZiBpPT0tMToKKyAgICAgICAgICAgICAgICBicmVhaworICAgIAorY2xhc3MgVG9rZW46CisgICAgI1RPRE86IGNoZWNrIHRoaXMgaXMgc3RpbGwgaW4gdXNlCisgICAgT1BFUkFUT1IgPSAnT1BFUkFUT1InCisgICAgV09SRCA9ICdXT1JEJworICAgIAorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi52YWx1ZSA9ICcnCisgICAgICAgIHNlbGYudHlwZSA9IE5vbmUKKyAgICAgICAgCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICNCZWhhdmUgbGlrZSBhIHR3byBlbGVtZW50cyB0dXBsZQorICAgICAgICBpZiBrZXk9PTA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi50eXBlCisgICAgICAgIGlmIGtleT09MToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisgICAgICAgIHJhaXNlIEluZGV4RXJyb3Ioa2V5KQorICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAKK2NsYXNzIEhlcmVEb2M6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wLCBuYW1lPU5vbmUpOgorICAgICAgICBzZWxmLm9wID0gb3AKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLnBlbmRpbmdzID0gW10KKyAgICAgICAgICAgICAgIAorVEtfQ09NTUEgICAgICAgID0gJ0NPTU1BJworVEtfQU1QRVJTQU5EICAgID0gJ0FNUCcKK1RLX09QICAgICAgICAgICA9ICdPUCcKK1RLX1RPS0VOICAgICAgICA9ICdUT0tFTicKK1RLX0NPTU1FTlQgICAgICA9ICdDT01NRU5UJworVEtfTkVXTElORSAgICAgID0gJ05FV0xJTkUnIAorVEtfSU9OVU1CRVIgICAgID0gJ0lPX05VTUJFUicKK1RLX0FTU0lHTk1FTlQgICA9ICdBU1NJR05NRU5UX1dPUkQnCitUS19IRVJFTkFNRSAgICAgPSAnSEVSRU5BTUUnCisKK2NsYXNzIExleGVyOgorICAgICIiIk1haW4gbGV4ZXIuCisgICAgCisgICAgQ2FsbCBhZGQoKSB1bnRpbCB0aGUgc2NyaXB0IEFTVCBpcyByZXR1cm5lZC4KKyAgICAiIiIKKyAgICAjIEhlcmUtZG9jdW1lbnQgaGFuZGxpbmcgbWFrZXMgdGhlIHdob2xlIHRoaW5nIG1vcmUgY29tcGxleCBiZWNhdXNlIHRoZXkgYmFzaWNhbGx5CisgICAgIyBmb3JjZSB0b2tlbnMgdG8gYmUgcmVvcmRlcmVkOiBoZXJlLWNvbnRlbnQgbXVzdCBjb21lIHJpZ2h0IGFmdGVyIHRoZSBvcGVyYXRvcgorICAgICMgYW5kIHRoZSBoZXJlLWRvY3VtZW50IG5hbWUsIHdoaWxlIHNvbWUgb3RoZXIgdG9rZW5zIG1pZ2h0IGJlIGZvbGxvd2luZyB0aGUKKyAgICAjIGhlcmUtZG9jdW1lbnQgZXhwcmVzc2lvbiBvbiB0aGUgc2FtZSBsaW5lLgorICAgICMKKyAgICAjIFNvLCBoZXJlLWRvYyBzdGF0ZXMgYXJlIGJhc2ljYWxseToKKyAgICAjICAgKnNlbGYuX3N0YXRlPT1TVF9OT1JNQUwKKyAgICAjICAgICAgIC0gc2VsZi5faGVyZWRvYy5vcCBpcyBOb25lOiBubyBoZXJlLWRvY3VtZW50CisgICAgIyAgICAgICAtIHNlbGYuX2hlcmVkb2Mub3AgaXMgbm90IE5vbmUgYnV0IG5hbWUgaXM6IGhlcmUtZG9jdW1lbnQgb3BlcmF0b3IgbWF0Y2hlZCwKKyAgICAjICAgICAgICAgICB3YWl0aW5nIGZvciB0aGUgZG9jdW1lbnQgbmFtZS9kZWxpbWl0ZXIKKyAgICAjICAgICAgIC0gc2VsZi5faGVyZWRvYy5vcCBhbmQgbmFtZSBhcmUgbm90IE5vbmU6IGhlcmUtZG9jdW1lbnQgaXMgcmVhZHksIGZvbGxvd2luZworICAgICMgICAgICAgICAgIHRva2VucyBhcmUgYmVpbmcgc3RvcmVkIGFuZCB3aWxsIGJlIHB1c2hlZCBhZ2FpbiB3aGVuIHRoZSBkb2N1bWVudCBpcworICAgICMgICAgICAgICAgIGNvbXBsZXRlbHkgcGFyc2VkLgorICAgICMgICAqc2VsZi5fc3RhdGU9PVNUX0hFUkVET0MKKyAgICAjICAgICAgIC0gVGhlIGhlcmUtZG9jdW1lbnQgaXMgYmVpbmcgZGVsaW1pdGVkIGJ5IHNlbGYuX2hlcmVsZXhlci4gT25jZSBpdCBpcyBkb25lCisgICAgIyAgICAgICAgICAgdGhlIGNvbnRlbnQgaXMgcHVzaGVkIGluIGZyb250IG9mIHRoZSBwZW5kaW5nIHRva2VuIGxpc3QgdGhlbiBhbGwgdGhlc2UKKyAgICAjICAgICAgICAgICB0b2tlbnMgYXJlIHB1c2hlZCBvbmNlIGFnYWluLgorICAgIFNUX05PUk1BTCAgICAgICA9ICdTVF9OT1JNQUwnCisgICAgU1RfT1AgICAgICAgICAgID0gJ1NUX09QJworICAgIFNUX0JBQ0tTTEFTSCAgICA9ICdTVF9CQUNLU0xBU0gnCisgICAgU1RfUVVPVEVEICAgICAgID0gJ1NUX1FVT1RFRCcKKyAgICBTVF9DT01NRU5UICAgICAgPSAnU1RfQ09NTUVOVCcKKyAgICBTVF9IRVJFRE9DICAgICAgPSAnU1RfSEVSRURPQycKKyAgICAKKyAgICAjTWF0Y2ggZW5kIG9mIGJhY2txdW90ZSBzdHJpbmdzCisgICAgUkVfQkFDS1FVT1RFX0VORCA9IHJlLmNvbXBpbGUocicoPzwhXFwpKGApJykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnRfc3RhdGUgPSBOb25lKToKKyAgICAgICAgc2VsZi5faW5wdXQgPSBbXQorICAgICAgICBzZWxmLl9wb3MgPSAwCisgICAgICAgIAorICAgICAgICBzZWxmLl90b2tlbiA9ICcnCisgICAgICAgIHNlbGYuX3R5cGUgPSBUS19UT0tFTgorICAgICAgICAKKyAgICAgICAgc2VsZi5fc3RhdGUgPSBzZWxmLlNUX05PUk1BTAorICAgICAgICBzZWxmLl9wYXJlbnRfc3RhdGUgPSBwYXJlbnRfc3RhdGUKKyAgICAgICAgc2VsZi5fd29yZGxleGVyID0gTm9uZQorICAgICAgICAKKyAgICAgICAgc2VsZi5faGVyZWRvYyA9IEhlcmVEb2MoTm9uZSkKKyAgICAgICAgc2VsZi5faGVyZWxleGVyID0gTm9uZQorICAgICAgICAKKyAgICAgICAgIyMjIEZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSBub3QgdXNlZCBmb3IgZGVsaW1pdGluZyB0b2tlbiBhbmQgY2FuIHNhZmVseQorICAgICAgICAjIyMgYmUgY2hhbmdlZCBhZnRlciBoZXJlLWRvY3VtZW50IGRldGVjdGlvbiAoc2VlIF9wdXNoX3Rva2UpCisgICAgICAgIAorICAgICAgICAjIENvdW50IHRoZSBudW1iZXIgb2YgdG9rZW5zIGZvbGxvd2luZyBhICdGb3InIHJlc2VydmVkIHdvcmQuIE5lZWRlZCB0bworICAgICAgICAjIHJldHVybiBhbiAnSW4nIHJlc2VydmVkIHdvcmQgaWYgaXQgY29tZXMgaW4gdGhpcmQgcGxhY2UuCisgICAgICAgIHNlbGYuX2Zvcl9jb3VudCA9IE5vbmUKKyAgICAgICAgCisgICAgZGVmIGFkZChzZWxmLCBkYXRhLCBlb2Y9RmFsc2UpOgorICAgICAgICAiIiJGZWVkIHRoZSBsZXhlciB3aXRoIGRhdGEuCisgICAgICAgIAorICAgICAgICBXaGVuIGVvZiBpcyBzZXQgdG8gVHJ1ZSwgcmV0dXJucyB1bmNvbnN1bWVkIGRhdGEgb3IgcmFpc2UgaWYgdGhlIGxleGVyCisgICAgICAgIGlzIGluIHRoZSBtaWRkbGUgb2YgYSBkZWxpbWl0aW5nIG9wZXJhdGlvbi4KKyAgICAgICAgUmFpc2UgTmVlZE1vcmUgb3RoZXJ3aXNlLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5faW5wdXQgKz0gbGlzdChkYXRhKQorICAgICAgICBzZWxmLl9wYXJzZShlb2YpCisgICAgICAgIHNlbGYuX2lucHV0WzpzZWxmLl9wb3NdID0gW10KKyAgICAgICAgcmV0dXJuICcnLmpvaW4oc2VsZi5faW5wdXQpCisgICAgICAgIAorICAgIGRlZiBfcGFyc2Uoc2VsZiwgZW9mKTogICAgICAgICAgICAKKyAgICAgICAgd2hpbGUgc2VsZi5fc3RhdGU6CisgICAgICAgICAgICBpZiBzZWxmLl9wb3M+PWxlbihzZWxmLl9pbnB1dCk6CisgICAgICAgICAgICAgICAgaWYgbm90IGVvZjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgTmVlZE1vcmUoKQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5fc3RhdGUgbm90IGluIChzZWxmLlNUX09QLCBzZWxmLlNUX1FVT1RFRCwgc2VsZi5TVF9IRVJFRE9DKToKKyAgICAgICAgICAgICAgICAgICAgI0RlbGltaXQgdGhlIGN1cnJlbnQgdG9rZW4gYW5kIGxlYXZlIGNsZWFubHkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcHVzaF90b2tlbignJykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjTGV0IHRoZSBzdWJsZXhlciBoYW5kbGUgdGhlIGVvZiB0aGVtc2VsdmVzCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIHNlbGYuX3N0YXRlPT1zZWxmLlNUX05PUk1BTDoKKyAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9ub3JtYWwoKQorICAgICAgICAgICAgZWxpZiBzZWxmLl9zdGF0ZT09c2VsZi5TVF9DT01NRU5UOgorICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlX2NvbW1lbnQoKQorICAgICAgICAgICAgZWxpZiBzZWxmLl9zdGF0ZT09c2VsZi5TVF9PUDoKKyAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9vcChlb2YpCisgICAgICAgICAgICBlbGlmIHNlbGYuX3N0YXRlPT1zZWxmLlNUX1FVT1RFRDoKKyAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9xdW90ZWQoZW9mKQorICAgICAgICAgICAgZWxpZiBzZWxmLl9zdGF0ZT09c2VsZi5TVF9IRVJFRE9DOgorICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlX2hlcmVkb2MoZW9mKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICJVbmtub3duIHN0YXRlICIgKyBzdHIoc2VsZi5fc3RhdGUpCisgICAgICAgICAgICAgICAgCisgICAgICAgIGlmIHNlbGYuX2hlcmVkb2Mub3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBTaGVsbFN5bnRheEVycm9yKCdtaXNzaW5nIGhlcmUtZG9jdW1lbnQgZGVsaW1pdGVyJykKKyAgICAgICAgICAgICAgICAKKyAgICBkZWYgX3BhcnNlX25vcm1hbChzZWxmKToKKyAgICAgICAgYyA9IHNlbGYuX2lucHV0W3NlbGYuX3Bvc10KKyAgICAgICAgaWYgYz09J1xuJzoKKyAgICAgICAgICAgIHNlbGYuX3B1c2hfdG9rZW4oYykKKyAgICAgICAgICAgIHNlbGYuX3Rva2VuID0gYworICAgICAgICAgICAgc2VsZi5fdHlwZSA9IFRLX05FV0xJTkUKKyAgICAgICAgICAgIHNlbGYuX3B1c2hfdG9rZW4oJycpCisgICAgICAgICAgICBzZWxmLl9wb3MgKz0gMQorICAgICAgICBlbGlmIGMgaW4gKCdcXCcsICdcJycsICciJywgJ2AnLCAnJCcpOgorICAgICAgICAgICAgc2VsZi5fc3RhdGUgPSBzZWxmLlNUX1FVT1RFRAorICAgICAgICBlbGlmIGlzX3BhcnRpYWxfb3AoYyk6CisgICAgICAgICAgICBzZWxmLl9wdXNoX3Rva2VuKGMpCisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNlbGYuX3R5cGUgPSBUS19PUAorICAgICAgICAgICAgc2VsZi5fdG9rZW4gKz0gYworICAgICAgICAgICAgc2VsZi5fcG9zICs9IDEKKyAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gc2VsZi5TVF9PUAorICAgICAgICBlbGlmIGlzX2JsYW5rKGMpOgorICAgICAgICAgICAgc2VsZi5fcHVzaF90b2tlbihjKQorICAgICAgICAgICAgCisgICAgICAgICAgICAjRGlzY2FyZCBibGFua3MKKyAgICAgICAgICAgIHNlbGYuX3BvcyArPSAxCisgICAgICAgIGVsaWYgc2VsZi5fdG9rZW46CisgICAgICAgICAgICBzZWxmLl90b2tlbiArPSBjCisgICAgICAgICAgICBzZWxmLl9wb3MgKz0gMQorICAgICAgICBlbGlmIGM9PScjJzoKKyAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gc2VsZi5TVF9DT01NRU5UCisgICAgICAgICAgICBzZWxmLl90eXBlID0gVEtfQ09NTUVOVAorICAgICAgICAgICAgc2VsZi5fcG9zICs9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3BvcyArPSAxCisgICAgICAgICAgICBzZWxmLl90b2tlbiArPSBjICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgIGRlZiBfcGFyc2Vfb3Aoc2VsZiwgZW9mKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX3Rva2VuCisgICAgICAgIAorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgaWYgc2VsZi5fcG9zPj1sZW4oc2VsZi5faW5wdXQpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBlb2Y6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE5lZWRNb3JlKCkKKyAgICAgICAgICAgICAgICBjID0gJycKKyAgICAgICAgICAgIGVsc2U6ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGMgPSBzZWxmLl9pbnB1dFtzZWxmLl9wb3NdCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBvcCA9IHNlbGYuX3Rva2VuICsgYworICAgICAgICAgICAgaWYgYyBhbmQgaXNfcGFydGlhbF9vcChvcCk6CisgICAgICAgICAgICAgICAgI1N0aWxsIHBhcnNpbmcgYW4gb3BlcmF0b3IKKyAgICAgICAgICAgICAgICBzZWxmLl90b2tlbiA9IG9wCisgICAgICAgICAgICAgICAgc2VsZi5fcG9zICs9IDEKKyAgICAgICAgICAgIGVsc2U6ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgI0VuZCBvZiBvcGVyYXRvcgorICAgICAgICAgICAgICAgIHNlbGYuX3B1c2hfdG9rZW4oYykgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gc2VsZi5TVF9OT1JNQUwKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIAorICAgIGRlZiBfcGFyc2VfY29tbWVudChzZWxmKToKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIGlmIHNlbGYuX3Bvcz49bGVuKHNlbGYuX2lucHV0KToKKyAgICAgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjID0gc2VsZi5faW5wdXRbc2VsZi5fcG9zXQorICAgICAgICAgICAgaWYgYz09J1xuJzoKKyAgICAgICAgICAgICAgICAjRW5kIG9mIGNvbW1lbnQsIGRvIG5vdCBjb25zdW1lIHRoZSBlbmQgb2YgbGluZQorICAgICAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gc2VsZi5TVF9OT1JNQUwKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl90b2tlbiArPSBjCisgICAgICAgICAgICAgICAgc2VsZi5fcG9zICs9IDEKKyAgICAgICAgICAgICAgICAKKyAgICBkZWYgX3BhcnNlX3F1b3RlZChzZWxmLCBlb2YpOgorICAgICAgICAiIiJQcmVjb25kaXRpb246IHRoZSBzdGFydGluZyBiYWNrcXVvdGUvZG9sbGFyIGlzIHN0aWxsIGluIHRoZSBpbnB1dCBxdWV1ZS4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX3dvcmRsZXhlcjoKKyAgICAgICAgICAgIHNlbGYuX3dvcmRsZXhlciA9IFdvcmRMZXhlcigpCisgICAgICAgIAorICAgICAgICBpZiBzZWxmLl9wb3M8bGVuKHNlbGYuX2lucHV0KToKKyAgICAgICAgICAgICAjVHJhbnNmZXIgaW5wdXQgcXVldWUgY2hhcmFjdGVyIGludG8gdGhlIHN1YnBhcnNlcgorICAgICAgICAgICAgaW5wdXQgPSBzZWxmLl9pbnB1dFtzZWxmLl9wb3M6XQorICAgICAgICAgICAgc2VsZi5fcG9zICs9IGxlbihpbnB1dCkKKyAgICAgICAgICAgIAorICAgICAgICB3dHJlZSwgcmVtYWluaW5nID0gc2VsZi5fd29yZGxleGVyLmFkZChpbnB1dCwgZW9mKQorICAgICAgICBzZWxmLl93b3JkbGV4ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX3Rva2VuICs9IHdvcmR0cmVlX2FzX3N0cmluZyh3dHJlZSkKKyAgICAgICAgCisgICAgICAgICNQdXQgdW5wYXJzZWQgY2hhcmFjdGVyIGJhY2sgaW4gdGhlIGlucHV0IHF1ZXVlCisgICAgICAgIGlmIHJlbWFpbmluZzoKKyAgICAgICAgICAgIHNlbGYuX2lucHV0W3NlbGYuX3BvczpzZWxmLl9wb3NdID0gbGlzdChyZW1haW5pbmcpICAgICAgICAgIAorICAgICAgICBzZWxmLl9zdGF0ZSA9IHNlbGYuU1RfTk9STUFMCisgICAgICAgIAorICAgIGRlZiBfcGFyc2VfaGVyZWRvYyhzZWxmLCBlb2YpOgorICAgICAgICBhc3NlcnQgbm90IHNlbGYuX3Rva2VuCisgICAgICAgIAorICAgICAgICBpZiBzZWxmLl9oZXJlbGV4ZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2hlcmVsZXhlciA9IEhlcmVEb2NMZXhlcihzZWxmLl9oZXJlZG9jLm9wLCBzZWxmLl9oZXJlZG9jLm5hbWUpCisgICAgICAgIAorICAgICAgICBpZiBzZWxmLl9wb3M8bGVuKHNlbGYuX2lucHV0KToKKyAgICAgICAgICAgICAjVHJhbnNmZXIgaW5wdXQgcXVldWUgY2hhcmFjdGVyIGludG8gdGhlIHN1YnBhcnNlcgorICAgICAgICAgICAgaW5wdXQgPSBzZWxmLl9pbnB1dFtzZWxmLl9wb3M6XQorICAgICAgICAgICAgc2VsZi5fcG9zICs9IGxlbihpbnB1dCkKKyAgICAgICAgCisgICAgICAgIHNlbGYuX3Rva2VuLCByZW1haW5pbmcgPSBzZWxmLl9oZXJlbGV4ZXIuYWRkKGlucHV0LCBlb2YpCisgICAgICAgIAorICAgICAgICAjUmVzZXQgaGVyZS1kb2N1bWVudCBzdGF0ZQorICAgICAgICBzZWxmLl9oZXJlbGV4ZXIgPSBOb25lCisgICAgICAgIGhlcmVkb2MsIHNlbGYuX2hlcmVkb2MgPSBzZWxmLl9oZXJlZG9jLCBIZXJlRG9jKE5vbmUpCisgICAgICAgIGlmIHJlbWFpbmluZzoKKyAgICAgICAgICAgIHNlbGYuX2lucHV0W3NlbGYuX3BvczpzZWxmLl9wb3NdID0gbGlzdChyZW1haW5pbmcpCisgICAgICAgIHNlbGYuX3N0YXRlID0gc2VsZi5TVF9OT1JNQUwKKyAgICAgICAgCisgICAgICAgICNQdXNoIHBlbmRpbmcgdG9rZW5zCisgICAgICAgIGhlcmVkb2MucGVuZGluZ3NbOjBdID0gWyhzZWxmLl90b2tlbiwgc2VsZi5fdHlwZSwgaGVyZWRvYy5uYW1lKV0KKyAgICAgICAgZm9yIHRva2VuLCB0eXBlLCBkZWxpbSBpbiBoZXJlZG9jLnBlbmRpbmdzOgorICAgICAgICAgICAgc2VsZi5fdG9rZW4gPSB0b2tlbgorICAgICAgICAgICAgc2VsZi5fdHlwZSA9IHR5cGUKKyAgICAgICAgICAgIHNlbGYuX3B1c2hfdG9rZW4oZGVsaW0pCisgICAgICAgICAgICAgICAgICAgICAKKyAgICBkZWYgX3B1c2hfdG9rZW4oc2VsZiwgZGVsaW0pOgorICAgICAgICBpZiBub3Qgc2VsZi5fdG9rZW46CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgCisgICAgICAgIGlmIHNlbGYuX2hlcmVkb2Mub3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLl9oZXJlZG9jLm5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjSGVyZS1kb2N1bWVudCBuYW1lCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fdHlwZSE9VEtfVE9LRU46CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFNoZWxsU3ludGF4RXJyb3IoImV4cGVjdGluZyBoZXJlLWRvY3VtZW50IG5hbWUsIGdvdCAnJXMnIiAlIHNlbGYuX3Rva2VuKQorICAgICAgICAgICAgICAgIHNlbGYuX2hlcmVkb2MubmFtZSA9IHVucXVvdGVfd29yZHRyZWUobWFrZV93b3JkdHJlZShzZWxmLl90b2tlbikpCisgICAgICAgICAgICAgICAgc2VsZi5fdHlwZSA9IFRLX0hFUkVOQU1FCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICNDYXB0dXJlIGFsbCB0b2tlbnMgdW50aWwgdGhlIG5ld2xpbmUgc3RhcnRpbmcgdGhlIGhlcmUtZG9jdW1lbnQKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl90eXBlPT1US19ORVdMSU5FOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgc2VsZi5fc3RhdGU9PXNlbGYuU1RfTk9STUFMCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gc2VsZi5TVF9IRVJFRE9DICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYuX2hlcmVkb2MucGVuZGluZ3MuYXBwZW5kKChzZWxmLl90b2tlbiwgc2VsZi5fdHlwZSwgZGVsaW0pKSAgICAKKyAgICAgICAgICAgICAgICBzZWxmLl90b2tlbiA9ICcnCisgICAgICAgICAgICAgICAgc2VsZi5fdHlwZSA9IFRLX1RPS0VOCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgIyBCRVdBUkU6IGRvIG5vdCBjaGFuZ2UgcGFyc2VyIHN0YXRlIGZyb20gaGVyZSB0byB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbjoKKyAgICAgICAgIyB3aGVuIHBhcnNpbmcgYmV0d2VlbiBhbiBoZXJlLWRvY3VtZW50IG9wZXJhdG9yIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUKKyAgICAgICAgIyB0b2tlbnMgYXJlIHN0b3JlZCBpbiBzZWxmLl9oZXJlZG9jLnBlbmRpbmdzLiBUaGVyZWZvcmUsIHRoZXkgd2lsbCBub3QKKyAgICAgICAgIyByZWFjaCB0aGUgc2VjdGlvbiBiZWxvdy4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICNDaGVjayBvcGVyYXRvcnMKKyAgICAgICAgaWYgc2VsZi5fdHlwZT09VEtfT1A6CisgICAgICAgICAgICAjRmFsc2UgcG9zaXRpdmUgYmVjYXVzZSBvZiBwYXJ0aWFsIG9wIG1hdGNoaW5nCisgICAgICAgICAgICBvcCA9IGlzX29wKHNlbGYuX3Rva2VuKQorICAgICAgICAgICAgaWYgbm90IG9wOgorICAgICAgICAgICAgICAgIHNlbGYuX3R5cGUgPSBUS19UT0tFTgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjTWFwIHRvIHRoZSBzcGVjaWZpYyBvcGVyYXRvcgorICAgICAgICAgICAgICAgIHNlbGYuX3R5cGUgPSBvcAorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3Rva2VuIGluICgnPDwnLCAnPDwtJyk6CisgICAgICAgICAgICAgICAgICAgICNEb25lIGhlcmUgcmF0aGVyIHRoYW4gaW4gX3BhcnNlX29wIGJlY2F1c2UgdGhlcmUgaXMgbm8gbmVlZAorICAgICAgICAgICAgICAgICAgICAjdG8gY2hhbmdlIHRoZSBwYXJzZXIgc3RhdGUgc2luY2Ugd2UgYXJlIHN0aWxsIHdhaXRpbmcgZm9yCisgICAgICAgICAgICAgICAgICAgICN0aGUgaGVyZS1kb2N1bWVudCBuYW1lCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2hlcmVkb2Mub3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBTaGVsbFN5bnRheEVycm9yKCJzeW50YXggZXJyb3IgbmVhciB0b2tlbiAnJXMnIiAlIHNlbGYuX3Rva2VuKQorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgc2VsZi5faGVyZWRvYy5vcCBpcyBOb25lCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hlcmVkb2Mub3AgPSBzZWxmLl90b2tlbgorICAgICAgICAgICAgICAgIAorICAgICAgICBpZiBzZWxmLl90eXBlPT1US19UT0tFTjogICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICc9JyBpbiBzZWxmLl90b2tlbiBhbmQgbm90IGRlbGltOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3Rva2VuLnN0YXJ0c3dpdGgoJz0nKToKKyAgICAgICAgICAgICAgICAgICAgI1Rva2VuIGlzIGEgV09SRC4uLiBhIFRPS0VOIHRoYXQgaXMuCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwcmV2ID0gc2VsZi5fdG9rZW5bOnNlbGYuX3Rva2VuLmZpbmQoJz0nKV0KKyAgICAgICAgICAgICAgICAgICAgaWYgaXNfbmFtZShwcmV2KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3R5cGUgPSBUS19BU1NJR05NRU5UCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAjSnVzdCBhIHRva2VuICh1bnNwZWNpZmllZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgPSBnZXRfcmVzZXJ2ZWQoc2VsZi5fdG9rZW4pCisgICAgICAgICAgICAgICAgaWYgcmVzZXJ2ZWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIHJlc2VydmVkPT0nSW4nIGFuZCBzZWxmLl9mb3JfY291bnQhPTI6CisgICAgICAgICAgICAgICAgICAgICAgICAjU29ycnksIG5vdCBhIHJlc2VydmVkIHdvcmQgYWZ0ZXIgYWxsCisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90eXBlID0gcmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlc2VydmVkIGluICgnRm9yJywgJ0Nhc2UnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9mb3JfY291bnQgPSAwICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBlbGlmIGFyZV9kaWdpdHMoc2VsZi5fdG9rZW4pIGFuZCBkZWxpbSBpbiAoJzwnLCAnPicpOgorICAgICAgICAgICAgICAgICAgICAjRGV0ZWN0IElPX05VTUJFUgorICAgICAgICAgICAgICAgICAgICBzZWxmLl90eXBlID0gVEtfSU9OVU1CRVIKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYuX3Rva2VuPT0nOyc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3R5cGUgPSBUS19DT01NQQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5fdG9rZW49PScmJzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fdHlwZSA9IFRLX0FNUEVSU0FORAorICAgICAgICBlbGlmIHNlbGYuX3R5cGU9PVRLX0NPTU1FTlQ6CisgICAgICAgICAgICAjQ29tbWVudHMgYXJlIG5vdCBwYXJ0IG9mIHNoIGdyYW1tYXIsIGlnbm9yZSB0aGVtCisgICAgICAgICAgICBzZWxmLl90b2tlbiA9ICcnCisgICAgICAgICAgICBzZWxmLl90eXBlID0gVEtfVE9LRU4KKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIAorICAgICAgICBpZiBzZWxmLl9mb3JfY291bnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjVHJhY2sgdG9rZW4gY291bnQgaW4gJ0ZvcicgZXhwcmVzc2lvbiB0byBkZXRlY3QgJ0luJyByZXNlcnZlZCB3b3Jkcy4KKyAgICAgICAgICAgICNDYW4gb25seSBiZSBpbiB0aGlyZCBwb3NpdGlvbiwgbm8gbmVlZCB0byBnbyBiZXlvbmQKKyAgICAgICAgICAgIHNlbGYuX2Zvcl9jb3VudCArPSAxCisgICAgICAgICAgICBpZiBzZWxmLl9mb3JfY291bnQ9PTM6CisgICAgICAgICAgICAgICAgc2VsZi5fZm9yX2NvdW50ID0gTm9uZQorICAgICAgICAgICAgICAgIAorICAgICAgICBzZWxmLm9uX3Rva2VuKChzZWxmLl90b2tlbiwgc2VsZi5fdHlwZSkpCisgICAgICAgIHNlbGYuX3Rva2VuID0gJycKKyAgICAgICAgc2VsZi5fdHlwZSA9IFRLX1RPS0VOCisgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBkZWYgb25fdG9rZW4oc2VsZiwgdG9rZW4pOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgICAgICAgICAgIAorCit0b2tlbnMgPSBbCisgICAgVEtfVE9LRU4sCisjIFRvIHNpbGVuY2UgeWFjYyB1bnVzZWQgdG9rZW4gd2FybmluZ3MKKyMgICAgVEtfQ09NTUVOVCwKKyAgICBUS19ORVdMSU5FLAorICAgIFRLX0lPTlVNQkVSLAorICAgIFRLX0FTU0lHTk1FTlQsCisgICAgVEtfSEVSRU5BTUUsCitdICAgICAgICAgICAgCisKKyNBZGQgc3BlY2lmaWMgb3BlcmF0b3JzCit0b2tlbnMgKz0gX09QRVJBVE9SUy52YWx1ZXMoKQorI0FkZCByZXNlcnZlZCB3b3JkcwordG9rZW5zICs9IF9SRVNFUlZFRFMudmFsdWVzKCkKKyAgICAgICAgICAgIAorY2xhc3MgUExZTGV4ZXIoTGV4ZXIpOgorICAgICIiIkJyaWRnZSBMZXhlciBhbmQgUExZIGxleGVyIGludGVyZmFjZS4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIExleGVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX3Rva2VucyA9IFtdCisgICAgICAgIHNlbGYuX2N1cnJlbnQgPSAwCisgICAgICAgIHNlbGYubGluZW5vID0gMAorCisgICAgZGVmIG9uX3Rva2VuKHNlbGYsIHRva2VuKToKKyAgICAgICAgdmFsdWUsIHR5cGUgPSB0b2tlbgorCisgICAgICAgIHNlbGYubGluZW5vID0gMAorICAgICAgICB0ID0gbGV4LkxleFRva2VuKCkKKyAgICAgICAgdC52YWx1ZSA9IHZhbHVlCisgICAgICAgIHQudHlwZSA9IHR5cGUKKyAgICAgICAgdC5sZXhlciA9IHNlbGYKKyAgICAgICAgdC5sZXhwb3MgPSAwCisgICAgICAgIHQubGluZW5vID0gMAorICAgICAgICAKKyAgICAgICAgc2VsZi5fdG9rZW5zLmFwcGVuZCh0KQorICAgICAgICAKKyAgICBkZWYgaXNfZW1wdHkoc2VsZik6CisgICAgICAgIHJldHVybiBub3QgYm9vbChzZWxmLl90b2tlbnMpCisgICAgICAgIAorICAgICNQTFkgY29tcGxpYW50IGludGVyZmFjZQorICAgIGRlZiB0b2tlbihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY3VycmVudD49bGVuKHNlbGYuX3Rva2Vucyk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICB0ID0gc2VsZi5fdG9rZW5zW3NlbGYuX2N1cnJlbnRdCisgICAgICAgIHNlbGYuX2N1cnJlbnQgKz0gMQorICAgICAgICByZXR1cm4gdCAgICAgIAorICAgICAgICAKKyAgICAgICAgCitkZWYgZ2V0X3Rva2VucyhzKToKKyAgICAiIiJQYXJzZSB0aGUgaW5wdXQgc3RyaW5nIGFuZCByZXR1cm4gYSB0dXBsZSAodG9rZW5zLCB1bnByb2Nlc3NlZCkgd2hlcmUKKyAgICB0b2tlbnMgaXMgYSBsaXN0IG9mIHBhcnNlZCB0b2tlbnMgYW5kIHVucHJvY2Vzc2VkIGlzIHRoZSBwYXJ0IG9mIHRoZSBpbnB1dAorICAgIHN0cmluZyBsZWZ0IHVudG91Y2hlZCBieSB0aGUgbGV4ZXIuCisgICAgIiIiCisgICAgbGV4ZXIgPSBQTFlMZXhlcigpCisgICAgdW50b3VjaGVkID0gbGV4ZXIuYWRkKHMsIFRydWUpIAorICAgIHRva2VucyA9IFtdCisgICAgd2hpbGUgMToKKyAgICAgICAgdG9rZW4gPSBsZXhlci50b2tlbigpCisgICAgICAgIGlmIHRva2VuIGlzIE5vbmU6CisgICAgICAgICAgICBicmVhaworICAgICAgICB0b2tlbnMuYXBwZW5kKHRva2VuKQorICAgICAgICAKKyAgICB0b2tlbnMgPSBbKHQudmFsdWUsIHQudHlwZSkgZm9yIHQgaW4gdG9rZW5zXQorICAgIHJldHVybiB0b2tlbnMsIHVudG91Y2hlZCAgICAgICAgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvcHlzaHlhY2MucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvcHlzaHlhY2MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThlODBhYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9weXNoeWFjYy5weQpAQCAtMCwwICsxLDc3OSBAQAorIyBweXNoeWFjYy5weSAtIFBMWSBncmFtbWFyIGRlZmluaXRpb24gZm9yIHB5c2gKKyMKKyMgQ29weXJpZ2h0IDIwMDcgUGF0cmljayBNZXphcmQKKyMKKyMgVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcworIyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorCisiIiJQTFkgZ3JhbW1hciBmaWxlLgorIiIiCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHN5cworCitpbXBvcnQgcHlzaGxleAordG9rZW5zID0gcHlzaGxleC50b2tlbnMKKworZnJvbSBwbHkgaW1wb3J0IHlhY2MKK2ltcG9ydCBzaGVycm9ycworICAgIAorY2xhc3MgSU9SZWRpcmVjdDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3AsIGZpbGVuYW1lLCBpb19udW1iZXI9Tm9uZSk6CisgICAgICAgIHNlbGYub3AgPSBvcAorICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKKyAgICAgICAgc2VsZi5pb19udW1iZXIgPSBpb19udW1iZXIKKyAgICAgICAgCitjbGFzcyBIZXJlRG9jdW1lbnQ6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wLCBuYW1lLCBjb250ZW50LCBpb19udW1iZXI9Tm9uZSk6CisgICAgICAgIHNlbGYub3AgPSBvcAorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuY29udGVudCA9IGNvbnRlbnQKKyAgICAgICAgc2VsZi5pb19udW1iZXIgPSBpb19udW1iZXIKKworZGVmIG1ha2VfaW9fcmVkaXJlY3QocCk6CisgICAgIiIiTWFrZSBhbiBJT1JlZGlyZWN0IGluc3RhbmNlIGZyb20gdGhlIGlucHV0ICdpb19yZWRpcmVjdCcgcHJvZHVjdGlvbi4iIiIKKyAgICBuYW1lLCBpb19udW1iZXIsIGlvX3RhcmdldCA9IHAKKyAgICBhc3NlcnQgbmFtZT09J2lvX3JlZGlyZWN0JworICAgIAorICAgIGlmIGlvX3RhcmdldFswXT09J2lvX2ZpbGUnOgorICAgICAgICBpb190eXBlLCBpb19vcCwgaW9fZmlsZSA9IGlvX3RhcmdldAorICAgICAgICByZXR1cm4gSU9SZWRpcmVjdChpb19vcCwgaW9fZmlsZSwgaW9fbnVtYmVyKQorICAgIGVsaWYgaW9fdGFyZ2V0WzBdPT0naW9faGVyZSc6CisgICAgICAgIGlvX3R5cGUsIGlvX29wLCBpb19uYW1lLCBpb19jb250ZW50ID0gaW9fdGFyZ2V0CisgICAgICAgIHJldHVybiBIZXJlRG9jdW1lbnQoaW9fb3AsIGlvX25hbWUsIGlvX2NvbnRlbnQsIGlvX251bWJlcikKKyAgICBlbHNlOgorICAgICAgICBhc3NlcnQgRmFsc2UsICJJbnZhbGlkIElPIHJlZGlyZWN0aW9uIHRva2VuICVzIiAlIHJlcHIoaW9fdHlwZSkKKyAgICAgICAgCitjbGFzcyBTaW1wbGVDb21tYW5kOgorICAgICIiIgorICAgIGFzc2lnbnMgY29udGFpbnMgKG5hbWUsIHZhbHVlKSBwYWlycy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd29yZHMsIHJlZGlycywgYXNzaWducyk6CisgICAgICAgIHNlbGYud29yZHMgPSBsaXN0KHdvcmRzKQorICAgICAgICBzZWxmLnJlZGlycyA9IGxpc3QocmVkaXJzKQorICAgICAgICBzZWxmLmFzc2lnbnMgPSBsaXN0KGFzc2lnbnMpCisKK2NsYXNzIFBpcGVsaW5lOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21tYW5kcywgcmV2ZXJzZV9zdGF0dXM9RmFsc2UpOgorICAgICAgICBzZWxmLmNvbW1hbmRzID0gbGlzdChjb21tYW5kcykKKyAgICAgICAgYXNzZXJ0IHNlbGYuY29tbWFuZHMgICAgI0dyYW1tYXIgZm9yYmlkcyB0aGlzCisgICAgICAgIHNlbGYucmV2ZXJzZV9zdGF0dXMgPSByZXZlcnNlX3N0YXR1cworICAgICAgICAKK2NsYXNzIEFuZE9yOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcCwgbGVmdCwgcmlnaHQpOgorICAgICAgICBzZWxmLm9wID0gc3RyKG9wKQorICAgICAgICBzZWxmLmxlZnQgPSBsZWZ0CisgICAgICAgIHNlbGYucmlnaHQgPSByaWdodAorICAgICAgICAKK2NsYXNzIEZvckxvb3A6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGl0ZW1zLCBjbWRzKToKKyAgICAgICAgc2VsZi5uYW1lID0gc3RyKG5hbWUpCisgICAgICAgIHNlbGYuaXRlbXMgPSBsaXN0KGl0ZW1zKQorICAgICAgICBzZWxmLmNtZHMgPSBsaXN0KGNtZHMpCisgICAgICAgIAorY2xhc3MgV2hpbGVMb29wOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25kaXRpb24sIGNtZHMpOgorICAgICAgICBzZWxmLmNvbmRpdGlvbiA9IGxpc3QoY29uZGl0aW9uKQorICAgICAgICBzZWxmLmNtZHMgPSBsaXN0KGNtZHMpCisgICAgICAgIAorY2xhc3MgVW50aWxMb29wOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25kaXRpb24sIGNtZHMpOgorICAgICAgICBzZWxmLmNvbmRpdGlvbiA9IGxpc3QoY29uZGl0aW9uKQorICAgICAgICBzZWxmLmNtZHMgPSBsaXN0KGNtZHMpCisKK2NsYXNzIEZ1bkRlZjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgYm9keSk6CisgICAgICAgIHNlbGYubmFtZSA9IHN0cihuYW1lKQorICAgICAgICBzZWxmLmJvZHkgPSBib2R5CisgICAgICAgIAorY2xhc3MgQnJhY2VHcm91cDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY21kcyk6CisgICAgICAgIHNlbGYuY21kcyA9IGxpc3QoY21kcykKKyAgICAgICAgCitjbGFzcyBJZkNvbmQ6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmQsIGlmX2NtZHMsIGVsc2VfY21kcyk6CisgICAgICAgIHNlbGYuY29uZCA9IGxpc3QoY29uZCkKKyAgICAgICAgc2VsZi5pZl9jbWRzID0gaWZfY21kcworICAgICAgICBzZWxmLmVsc2VfY21kcyA9IGVsc2VfY21kcworCitjbGFzcyBDYXNlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBpdGVtcyk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5pdGVtcyA9IGl0ZW1zCisgICAgICAgIAorY2xhc3MgU3ViU2hlbGw6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNtZHMpOgorICAgICAgICBzZWxmLmNtZHMgPSBjbWRzCisKK2NsYXNzIFJlZGlyZWN0TGlzdDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY21kLCByZWRpcnMpOgorICAgICAgICBzZWxmLmNtZCA9IGNtZAorICAgICAgICBzZWxmLnJlZGlycyA9IGxpc3QocmVkaXJzKQorICAgICAgICAKK2RlZiBnZXRfcHJvZHVjdGlvbihwcm9kdWN0aW9ucywgcHR5cGUpOgorICAgICIiInByb2R1Y3Rpb25zIG11c3QgYmUgYSBsaXN0IG9mIHByb2R1Y3Rpb24gdHVwbGVzIGxpa2UgKG5hbWUsIG9iaikgd2hlcmUKKyAgICBuYW1lIGlzIHRoZSBwcm9kdWN0aW9uIHN0cmluZyBpZGVudGlmaWVyLgorICAgIFJldHVybiB0aGUgZmlyc3QgcHJvZHVjdGlvbiBuYW1lZCAncHR5cGUnLiBSYWlzZSBLZXlFcnJvciBpZiBOb25lIGNhbiBiZQorICAgIGZvdW5kLgorICAgICIiIgorICAgIGZvciBwcm9kdWN0aW9uIGluIHByb2R1Y3Rpb25zOgorICAgICAgICBpZiBwcm9kdWN0aW9uIGlzIG5vdCBOb25lIGFuZCBwcm9kdWN0aW9uWzBdPT1wdHlwZToKKyAgICAgICAgICAgIHJldHVybiBwcm9kdWN0aW9uCisgICAgcmFpc2UgS2V5RXJyb3IocHR5cGUpCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQTFkgZ3JhbW1hciBkZWZpbml0aW9uCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgcF9tdWx0aXBsZV9jb21tYW5kcyhwKToKKyAgICAiIiJtdWx0aXBsZV9jb21tYW5kcyA6IG5ld2xpbmVfc2VxdWVuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvbXBsZXRlX2NvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICB8IG11bHRpcGxlX2NvbW1hbmRzIGNvbXBsZXRlX2NvbW1hbmQiIiIKKyAgICBpZiBsZW4ocCk9PTI6CisgICAgICAgIGlmIHBbMV0gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBwWzBdID0gW3BbMV1dCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwWzBdID0gW10KKyAgICBlbHNlOgorICAgICAgICBwWzBdID0gcFsxXSArIFtwWzJdXQorCitkZWYgcF9jb21wbGV0ZV9jb21tYW5kKHApOgorICAgICIiImNvbXBsZXRlX2NvbW1hbmQgOiBsaXN0IHNlcGFyYXRvcgorICAgICAgICAgICAgICAgICAgICAgICAgfCBsaXN0IiIiCisgICAgaWYgbGVuKHApPT0zIGFuZCBwWzJdIGFuZCBwWzJdWzFdID09ICcmJzoKKyAgICAgICAgcFswXSA9ICgnYXN5bmMnLCBwWzFdKQorICAgIGVsc2U6CisgICAgICAgIHBbMF0gPSBwWzFdCisgICAgICAgICAgICAgICAgIAorZGVmIHBfbGlzdChwKToKKyAgICAiIiJsaXN0IDogbGlzdCBzZXBhcmF0b3Jfb3AgYW5kX29yCisgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIGFuZF9vciIiIgorICAgIGlmIGxlbihwKT09MjoKKyAgICAgICAgcFswXSA9IFtwWzFdXQorICAgIGVsc2U6CisgICAgICAgICNpZiBwWzJdIT0nOyc6CisgICAgICAgICMgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignQU5ELU9SIGxpc3QgYXN5bmNocm9ub3VzIGV4ZWN1dGlvbiBpcyBub3QgaW1wbGVtZW50ZWQnKQorICAgICAgICBwWzBdID0gcFsxXSArIFtwWzNdXQorICAgICAgIAorZGVmIHBfYW5kX29yKHApOgorICAgICIiImFuZF9vciA6IHBpcGVsaW5lCisgICAgICAgICAgICAgIHwgYW5kX29yIEFORF9JRiBsaW5lYnJlYWsgcGlwZWxpbmUKKyAgICAgICAgICAgICAgfCBhbmRfb3IgT1JfSUYgIGxpbmVicmVhayBwaXBlbGluZSIiIgorICAgIGlmIGxlbihwKT09MjoKKyAgICAgICAgcFswXSA9IHBbMV0KKyAgICBlbHNlOgorICAgICAgICBwWzBdID0gKCdhbmRfb3InLCBBbmRPcihwWzJdLCBwWzFdLCBwWzRdKSkKKyAgICAgICAgCitkZWYgcF9tYXliZV9iYW5nX3dvcmQocCk6CisgICAgIiIibWF5YmVfYmFuZ193b3JkIDogQmFuZyIiIgorICAgIHBbMF0gPSAoJ21heWJlX2Jhbmdfd29yZCcsIHBbMV0pCisgICAgICAgICAgICAKK2RlZiBwX3BpcGVsaW5lKHApOgorICAgICIiInBpcGVsaW5lIDogcGlwZV9zZXF1ZW5jZQorICAgICAgICAgICAgICAgIHwgYmFuZ193b3JkIHBpcGVfc2VxdWVuY2UiIiIKKyAgICBpZiBsZW4ocCk9PTM6CisgICAgICAgIHBbMF0gPSAoJ3BpcGVsaW5lJywgUGlwZWxpbmUocFsyXVsxOl0sIFRydWUpKQorICAgIGVsc2U6CisgICAgICAgIHBbMF0gPSAoJ3BpcGVsaW5lJywgUGlwZWxpbmUocFsxXVsxOl0pKQorCitkZWYgcF9waXBlX3NlcXVlbmNlKHApOgorICAgICIiInBpcGVfc2VxdWVuY2UgOiBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgICB8IHBpcGVfc2VxdWVuY2UgUElQRSBsaW5lYnJlYWsgY29tbWFuZCIiIgorICAgIGlmIGxlbihwKT09MjoKKyAgICAgICAgcFswXSA9IFsncGlwZV9zZXF1ZW5jZScsIHBbMV1dCisgICAgZWxzZToKKyAgICAgICAgcFswXSA9IHBbMV0gKyBbcFs0XV0KKworZGVmIHBfY29tbWFuZChwKToKKyAgICAiIiJjb21tYW5kIDogc2ltcGxlX2NvbW1hbmQKKyAgICAgICAgICAgICAgIHwgY29tcG91bmRfY29tbWFuZAorICAgICAgICAgICAgICAgfCBjb21wb3VuZF9jb21tYW5kIHJlZGlyZWN0X2xpc3QKKyAgICAgICAgICAgICAgIHwgZnVuY3Rpb25fZGVmaW5pdGlvbiIiIgorICAgICAgICAKKyAgICBpZiBwWzFdWzBdIGluICggJ3NpbXBsZV9jb21tYW5kJywgCisgICAgICAgICAgICAgICAgICAgICdmb3JfY2xhdXNlJywKKyAgICAgICAgICAgICAgICAgICAgJ3doaWxlX2NsYXVzZScsCisgICAgICAgICAgICAgICAgICAgICd1bnRpbF9jbGF1c2UnLAorICAgICAgICAgICAgICAgICAgICAnY2FzZV9jbGF1c2UnLAorICAgICAgICAgICAgICAgICAgICAnaWZfY2xhdXNlJywKKyAgICAgICAgICAgICAgICAgICAgJ2Z1bmN0aW9uX2RlZmluaXRpb24nLAorICAgICAgICAgICAgICAgICAgICAnc3Vic2hlbGwnLAorICAgICAgICAgICAgICAgICAgICAnYnJhY2VfZ3JvdXAnLCk6CisgICAgICAgIGlmIGxlbihwKSA9PSAyOgorICAgICAgICAgICAgcFswXSA9IHBbMV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBbMF0gPSAoJ3JlZGlyZWN0X2xpc3QnLCBSZWRpcmVjdExpc3QocFsxXSwgcFsyXVsxOl0pKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJyVzIGNvbW1hbmQgaXMgbm90IGltcGxlbWVudGVkJyAlIHJlcHIocFsxXVswXSkpCisKK2RlZiBwX2NvbXBvdW5kX2NvbW1hbmQocCk6CisgICAgIiIiY29tcG91bmRfY29tbWFuZCA6IGJyYWNlX2dyb3VwCisgICAgICAgICAgICAgICAgICAgICAgICB8IHN1YnNoZWxsCisgICAgICAgICAgICAgICAgICAgICAgICB8IGZvcl9jbGF1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FzZV9jbGF1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgaWZfY2xhdXNlCisgICAgICAgICAgICAgICAgICAgICAgICB8IHdoaWxlX2NsYXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgfCB1bnRpbF9jbGF1c2UiIiIKKyAgICBwWzBdID0gcFsxXQorCitkZWYgcF9zdWJzaGVsbChwKToKKyAgICAiIiJzdWJzaGVsbCA6IExQQVJFTlMgY29tcG91bmRfbGlzdCBSUEFSRU5TIiIiCisgICAgcFswXSA9ICgnc3Vic2hlbGwnLCBTdWJTaGVsbChwWzJdWzE6XSkpCisKK2RlZiBwX2NvbXBvdW5kX2xpc3QocCk6CisgICAgIiIiY29tcG91bmRfbGlzdCA6IHRlcm0KKyAgICAgICAgICAgICAgICAgICAgIHwgbmV3bGluZV9saXN0IHRlcm0KKyAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHRlcm0gc2VwYXJhdG9yCisgICAgICAgICAgICAgICAgICAgICB8IG5ld2xpbmVfbGlzdCB0ZXJtIHNlcGFyYXRvciIiIgorICAgIHByb2R1Y3Rpb25zID0gcFsxOl0gICAgICAgICAgIAorICAgIHRyeToKKyAgICAgICAgc2VwID0gZ2V0X3Byb2R1Y3Rpb24ocHJvZHVjdGlvbnMsICdzZXBhcmF0b3InKQorICAgICAgICBpZiBzZXBbMV0hPSc7JzoKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcGFzcworICAgIHRlcm0gPSBnZXRfcHJvZHVjdGlvbihwcm9kdWN0aW9ucywgJ3Rlcm0nKQorICAgIHBbMF0gPSBbJ2NvbXBvdW5kX2xpc3QnXSArIHRlcm1bMTpdCisKK2RlZiBwX3Rlcm0ocCk6CisgICAgIiIidGVybSA6IHRlcm0gc2VwYXJhdG9yIGFuZF9vcgorICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBhbmRfb3IiIiIKKyAgICBpZiBsZW4ocCk9PTI6CisgICAgICAgIHBbMF0gPSBbJ3Rlcm0nLCBwWzFdXQorICAgIGVsc2U6CisgICAgICAgIGlmIHBbMl0gaXMgbm90IE5vbmUgYW5kIHBbMl1bMV0gPT0gJyYnOgorICAgICAgICAgICAgcFswXSA9IFsndGVybScsICgnYXN5bmMnLCBwWzFdWzE6XSldICsgW3BbM11dCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwWzBdID0gcFsxXSArIFtwWzNdXQorICAgICAgICAgICAgCitkZWYgcF9tYXliZV9mb3Jfd29yZChwKToKKyAgICAjIFJlYXJyYW5nZSAnRm9yJyBwcmlvcml0eSB3cnQgVE9LRU4uIFNlZSBwX2Zvcl93b3JkCisgICAgIiIibWF5YmVfZm9yX3dvcmQgOiBGb3IiIiIKKyAgICBwWzBdID0gKCdtYXliZV9mb3Jfd29yZCcsIHBbMV0pCisKK2RlZiBwX2Zvcl9jbGF1c2UocCk6CisgICAgIiIiZm9yX2NsYXVzZSA6IGZvcl93b3JkIG5hbWUgbGluZWJyZWFrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX2dyb3VwCisgICAgICAgICAgICAgICAgICB8IGZvcl93b3JkIG5hbWUgbGluZWJyZWFrIGluICAgICAgICAgIHNlcXVlbnRpYWxfc2VwIGRvX2dyb3VwCisgICAgICAgICAgICAgICAgICB8IGZvcl93b3JkIG5hbWUgbGluZWJyZWFrIGluIHdvcmRsaXN0IHNlcXVlbnRpYWxfc2VwIGRvX2dyb3VwIiIiCisgICAgcHJvZHVjdGlvbnMgPSBwWzE6XQorICAgIGRvX2dyb3VwID0gZ2V0X3Byb2R1Y3Rpb24ocHJvZHVjdGlvbnMsICdkb19ncm91cCcpCisgICAgdHJ5OgorICAgICAgICBpdGVtcyA9IGdldF9wcm9kdWN0aW9uKHByb2R1Y3Rpb25zLCAnaW4nKVsxOl0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJyJpbiIgb21pc3Npb24gaXMgbm90IGltcGxlbWVudGVkJykKKyAgICAgICAgCisgICAgdHJ5OgorICAgICAgICBpdGVtcyA9IGdldF9wcm9kdWN0aW9uKHByb2R1Y3Rpb25zLCAnd29yZGxpc3QnKVsxOl0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIGl0ZW1zID0gW10KKyAgICAgICAgCisgICAgbmFtZSA9IHBbMl0KKyAgICBwWzBdID0gKCdmb3JfY2xhdXNlJywgRm9yTG9vcChuYW1lLCBpdGVtcywgZG9fZ3JvdXBbMTpdKSkKKworZGVmIHBfbmFtZShwKToKKyAgICAiIiJuYW1lIDogdG9rZW4iIiIgI1dhcyBOQU1FIGluc3RlYWQgb2YgdG9rZW4KKyAgICBwWzBdID0gcFsxXQorCitkZWYgcF9pbihwKToKKyAgICAiIiJpbiA6IEluIiIiCisgICAgcFswXSA9ICgnaW4nLCBwWzFdKQorCitkZWYgcF93b3JkbGlzdChwKToKKyAgICAiIiJ3b3JkbGlzdCA6IHdvcmRsaXN0IHRva2VuCisgICAgICAgICAgICAgICAgfCAgICAgICAgICB0b2tlbiIiIgorICAgIGlmIGxlbihwKT09MjoKKyAgICAgICAgcFswXSA9IFsnd29yZGxpc3QnLCAoJ1RPS0VOJywgcFsxXSldCisgICAgZWxzZToKKyAgICAgICAgcFswXSA9IHBbMV0gKyBbKCdUT0tFTicsIHBbMl0pXQorCitkZWYgcF9jYXNlX2NsYXVzZShwKToKKyAgICAiIiJjYXNlX2NsYXVzZSA6IENhc2UgdG9rZW4gbGluZWJyZWFrIGluIGxpbmVicmVhayBjYXNlX2xpc3QgICAgRXNhYworICAgICAgICAgICAgICAgICAgIHwgQ2FzZSB0b2tlbiBsaW5lYnJlYWsgaW4gbGluZWJyZWFrIGNhc2VfbGlzdF9ucyBFc2FjCisgICAgICAgICAgICAgICAgICAgfCBDYXNlIHRva2VuIGxpbmVicmVhayBpbiBsaW5lYnJlYWsgICAgICAgICAgICAgIEVzYWMiIiIKKyAgICBpZiBsZW4ocCkgPCA4OgorICAgICAgICBpdGVtcyA9IFtdCisgICAgZWxzZToKKyAgICAgICAgaXRlbXMgPSBwWzZdWzE6XQorICAgIG5hbWUgPSBwWzJdCisgICAgcFswXSA9ICgnY2FzZV9jbGF1c2UnLCBDYXNlKG5hbWUsIFtjWzFdIGZvciBjIGluIGl0ZW1zXSkpCisgICAgICAgCitkZWYgcF9jYXNlX2xpc3RfbnMocCk6CisgICAgIiIiY2FzZV9saXN0X25zIDogY2FzZV9saXN0IGNhc2VfaXRlbV9ucworICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICBjYXNlX2l0ZW1fbnMiIiIKKyAgICBwX2Nhc2VfbGlzdChwKQorICAgICAgCitkZWYgcF9jYXNlX2xpc3QocCk6CisgICAgIiIiY2FzZV9saXN0IDogY2FzZV9saXN0IGNhc2VfaXRlbQorICAgICAgICAgICAgICAgICB8ICAgICAgICAgICBjYXNlX2l0ZW0iIiIKKyAgICBpZiBsZW4ocCk9PTI6CisgICAgICAgIHBbMF0gPSBbJ2Nhc2VfbGlzdCcsIHBbMV1dCisgICAgZWxzZToKKyAgICAgICAgcFswXSA9IHBbMV0gKyBbcFsyXV0KKyAgICAgICAgCitkZWYgcF9jYXNlX2l0ZW1fbnMocCk6CisgICAgIiIiY2FzZV9pdGVtX25zIDogICAgICAgICBwYXR0ZXJuIFJQQVJFTlMgICAgICAgICAgICAgICBsaW5lYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHBhdHRlcm4gUlBBUkVOUyBjb21wb3VuZF9saXN0IGxpbmVicmVhaworICAgICAgICAgICAgICAgICAgICB8IExQQVJFTlMgcGF0dGVybiBSUEFSRU5TICAgICAgICAgICAgICAgbGluZWJyZWFrCisgICAgICAgICAgICAgICAgICAgIHwgTFBBUkVOUyBwYXR0ZXJuIFJQQVJFTlMgY29tcG91bmRfbGlzdCBsaW5lYnJlYWsiIiIKKyAgICBwX2Nhc2VfaXRlbShwKQorICAgICAgICAgICAgICAgICAKK2RlZiBwX2Nhc2VfaXRlbShwKToKKyAgICAiIiJjYXNlX2l0ZW0gOiAgICAgICAgIHBhdHRlcm4gUlBBUkVOUyBsaW5lYnJlYWsgICAgIERTRU1JIGxpbmVicmVhaworICAgICAgICAgICAgICAgICB8ICAgICAgICAgcGF0dGVybiBSUEFSRU5TIGNvbXBvdW5kX2xpc3QgRFNFTUkgbGluZWJyZWFrCisgICAgICAgICAgICAgICAgIHwgTFBBUkVOUyBwYXR0ZXJuIFJQQVJFTlMgbGluZWJyZWFrICAgICBEU0VNSSBsaW5lYnJlYWsKKyAgICAgICAgICAgICAgICAgfCBMUEFSRU5TIHBhdHRlcm4gUlBBUkVOUyBjb21wb3VuZF9saXN0IERTRU1JIGxpbmVicmVhayIiIgorICAgIGlmIGxlbihwKSA8IDc6CisgICAgICAgIG5hbWUgPSBwWzFdWzE6XQorICAgIGVsc2U6CisgICAgICAgIG5hbWUgPSBwWzJdWzE6XQorCisgICAgdHJ5OgorICAgICAgICBjbWRzID0gZ2V0X3Byb2R1Y3Rpb24ocFsxOl0sICJjb21wb3VuZF9saXN0IilbMTpdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBjbWRzID0gW10KKworICAgIHBbMF0gPSAoJ2Nhc2VfaXRlbScsIChuYW1lLCBjbWRzKSkKKyAgICAgICAgICAgICAgICAgCitkZWYgcF9wYXR0ZXJuKHApOgorICAgICIiInBhdHRlcm4gOiAgICAgICAgICAgICAgdG9rZW4KKyAgICAgICAgICAgICAgIHwgcGF0dGVybiBQSVBFIHRva2VuIiIiCisgICAgaWYgbGVuKHApPT0yOgorICAgICAgICBwWzBdID0gWydwYXR0ZXJuJywgKCdUT0tFTicsIHBbMV0pXQorICAgIGVsc2U6CisgICAgICAgIHBbMF0gPSBwWzFdICsgWygnVE9LRU4nLCBwWzJdKV0KKworZGVmIHBfbWF5YmVfaWZfd29yZChwKToKKyAgICAjIFJlYXJyYW5nZSAnSWYnIHByaW9yaXR5IHdydCBUT0tFTi4gU2VlIHBfaWZfd29yZAorICAgICIiIm1heWJlX2lmX3dvcmQgOiBJZiIiIgorICAgIHBbMF0gPSAoJ21heWJlX2lmX3dvcmQnLCBwWzFdKQorCitkZWYgcF9tYXliZV90aGVuX3dvcmQocCk6CisgICAgIyBSZWFycmFuZ2UgJ1RoZW4nIHByaW9yaXR5IHdydCBUT0tFTi4gU2VlIHBfdGhlbl93b3JkCisgICAgIiIibWF5YmVfdGhlbl93b3JkIDogVGhlbiIiIgorICAgIHBbMF0gPSAoJ21heWJlX3RoZW5fd29yZCcsIHBbMV0pCisgICAgICAgICAgICAgICAgIAorZGVmIHBfaWZfY2xhdXNlKHApOgorICAgICIiImlmX2NsYXVzZSA6IGlmX3dvcmQgY29tcG91bmRfbGlzdCB0aGVuX3dvcmQgY29tcG91bmRfbGlzdCBlbHNlX3BhcnQgRmkKKyAgICAgICAgICAgICAgICAgfCBpZl93b3JkIGNvbXBvdW5kX2xpc3QgdGhlbl93b3JkIGNvbXBvdW5kX2xpc3QgICAgICAgICAgIEZpIiIiCisgICAgZWxzZV9wYXJ0ID0gW10KKyAgICBpZiBsZW4ocCk9PTc6CisgICAgICAgIGVsc2VfcGFydCA9IHBbNV0KKyAgICBwWzBdID0gKCdpZl9jbGF1c2UnLCBJZkNvbmQocFsyXVsxOl0sIHBbNF1bMTpdLCBlbHNlX3BhcnQpKQorICAgICAgICAgICAgICAgICAKK2RlZiBwX2Vsc2VfcGFydChwKToKKyAgICAiIiJlbHNlX3BhcnQgOiBFbGlmIGNvbXBvdW5kX2xpc3QgdGhlbl93b3JkIGNvbXBvdW5kX2xpc3QgZWxzZV9wYXJ0CisgICAgICAgICAgICAgICAgIHwgRWxpZiBjb21wb3VuZF9saXN0IHRoZW5fd29yZCBjb21wb3VuZF9saXN0CisgICAgICAgICAgICAgICAgIHwgRWxzZSBjb21wb3VuZF9saXN0IiIiCisgICAgaWYgbGVuKHApPT0zOgorICAgICAgICBwWzBdID0gcFsyXVsxOl0KKyAgICBlbHNlOgorICAgICAgICBlbHNlX3BhcnQgPSBbXQorICAgICAgICBpZiBsZW4ocCk9PTY6CisgICAgICAgICAgICBlbHNlX3BhcnQgPSBwWzVdCisgICAgICAgIHBbMF0gPSAoJ2VsaWYnLCBJZkNvbmQocFsyXVsxOl0sIHBbNF1bMTpdLCBlbHNlX3BhcnQpKQorICAgICAgICAgICAgICAgICAKK2RlZiBwX3doaWxlX2NsYXVzZShwKToKKyAgICAiIiJ3aGlsZV9jbGF1c2UgOiBXaGlsZSBjb21wb3VuZF9saXN0IGRvX2dyb3VwIiIiCisgICAgcFswXSA9ICgnd2hpbGVfY2xhdXNlJywgV2hpbGVMb29wKHBbMl1bMTpdLCBwWzNdWzE6XSkpCisgICAgCitkZWYgcF9tYXliZV91bnRpbF93b3JkKHApOgorICAgICMgUmVhcnJhbmdlICdVbnRpbCcgcHJpb3JpdHkgd3J0IFRPS0VOLiBTZWUgcF91bnRpbF93b3JkCisgICAgIiIibWF5YmVfdW50aWxfd29yZCA6IFVudGlsIiIiCisgICAgcFswXSA9ICgnbWF5YmVfdW50aWxfd29yZCcsIHBbMV0pCisgICAgICAgICAgIAorZGVmIHBfdW50aWxfY2xhdXNlKHApOgorICAgICIiInVudGlsX2NsYXVzZSA6IHVudGlsX3dvcmQgY29tcG91bmRfbGlzdCBkb19ncm91cCIiIgorICAgIHBbMF0gPSAoJ3VudGlsX2NsYXVzZScsIFVudGlsTG9vcChwWzJdWzE6XSwgcFszXVsxOl0pKQorICAgICAgICAgICAgICAgICAKK2RlZiBwX2Z1bmN0aW9uX2RlZmluaXRpb24ocCk6CisgICAgIiIiZnVuY3Rpb25fZGVmaW5pdGlvbiA6IGZuYW1lIExQQVJFTlMgUlBBUkVOUyBsaW5lYnJlYWsgZnVuY3Rpb25fYm9keSIiIgorICAgIHBbMF0gPSAoJ2Z1bmN0aW9uX2RlZmluaXRpb24nLCBGdW5EZWYocFsxXSwgcFs1XSkpCisgICAgICAgICAgICAgICAgIAorZGVmIHBfZnVuY3Rpb25fYm9keShwKToKKyAgICAiIiJmdW5jdGlvbl9ib2R5IDogY29tcG91bmRfY29tbWFuZAorICAgICAgICAgICAgICAgICAgICAgfCBjb21wb3VuZF9jb21tYW5kIHJlZGlyZWN0X2xpc3QiIiIKKyAgICBpZiBsZW4ocCkhPTI6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ2Z1bmN0aW9ucyByZWRpcmVjdGlvbnMgbGlzdHMgYXJlIG5vdCBpbXBsZW1lbnRlZCcpICAgIAorICAgIHBbMF0gPSBwWzFdICAgIAorCitkZWYgcF9mbmFtZShwKToKKyAgICAiIiJmbmFtZSA6IFRPS0VOIiIiICNXYXMgTkFNRSBpbnN0ZWFkIG9mIHRva2VuCisgICAgcFswXSA9IHBbMV0KKworZGVmIHBfYnJhY2VfZ3JvdXAocCk6CisgICAgIiIiYnJhY2VfZ3JvdXAgOiBMYnJhY2UgY29tcG91bmRfbGlzdCBSYnJhY2UiIiIKKyAgICBwWzBdID0gKCdicmFjZV9ncm91cCcsIEJyYWNlR3JvdXAocFsyXVsxOl0pKQorCitkZWYgcF9tYXliZV9kb25lX3dvcmQocCk6CisgICAgI1NlZSBwX2Fzc2lnbm1lbnRfd29yZCBmb3IgZGV0YWlscy4KKyAgICAiIiJtYXliZV9kb25lX3dvcmQgOiBEb25lIiIiCisgICAgcFswXSA9ICgnbWF5YmVfZG9uZV93b3JkJywgcFsxXSkKKworZGVmIHBfbWF5YmVfZG9fd29yZChwKToKKyAgICAiIiJtYXliZV9kb193b3JkIDogRG8iIiIKKyAgICBwWzBdID0gKCdtYXliZV9kb193b3JkJywgcFsxXSkKKworZGVmIHBfZG9fZ3JvdXAocCk6CisgICAgIiIiZG9fZ3JvdXAgOiBkb193b3JkIGNvbXBvdW5kX2xpc3QgZG9uZV93b3JkIiIiCisgICAgI0RvIGdyb3VwIGNvbnRhaW5zIGEgbGlzdCBvZiBBbmRPcgorICAgIHBbMF0gPSBbJ2RvX2dyb3VwJ10gKyBwWzJdWzE6XQorCitkZWYgcF9zaW1wbGVfY29tbWFuZChwKToKKyAgICAiIiJzaW1wbGVfY29tbWFuZCA6IGNtZF9wcmVmaXggY21kX3dvcmQgY21kX3N1ZmZpeAorICAgICAgICAgICAgICAgICAgICAgIHwgY21kX3ByZWZpeCBjbWRfd29yZAorICAgICAgICAgICAgICAgICAgICAgIHwgY21kX3ByZWZpeAorICAgICAgICAgICAgICAgICAgICAgIHwgY21kX25hbWUgY21kX3N1ZmZpeAorICAgICAgICAgICAgICAgICAgICAgIHwgY21kX25hbWUiIiIKKyAgICB3b3JkcywgcmVkaXJzLCBhc3NpZ25zID0gW10sIFtdLCBbXQorICAgIGZvciBlIGluIHBbMTpdOgorICAgICAgICBuYW1lID0gZVswXQorICAgICAgICBpZiBuYW1lIGluICgnY21kX3ByZWZpeCcsICdjbWRfc3VmZml4Jyk6CisgICAgICAgICAgICBmb3Igc3ViZSBpbiBlWzE6XToKKyAgICAgICAgICAgICAgICBzdWJuYW1lID0gc3ViZVswXQorICAgICAgICAgICAgICAgIGlmIHN1Ym5hbWU9PSdpb19yZWRpcmVjdCc6CisgICAgICAgICAgICAgICAgICAgIHJlZGlycy5hcHBlbmQobWFrZV9pb19yZWRpcmVjdChzdWJlKSkKKyAgICAgICAgICAgICAgICBlbGlmIHN1Ym5hbWU9PSdBU1NJR05NRU5UX1dPUkQnOgorICAgICAgICAgICAgICAgICAgICBhc3NpZ25zLmFwcGVuZChzdWJlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHdvcmRzLmFwcGVuZChzdWJlKQorICAgICAgICBlbGlmIG5hbWUgaW4gKCdjbWRfd29yZCcsICdjbWRfbmFtZScpOgorICAgICAgICAgICAgd29yZHMuYXBwZW5kKGUpCisgICAgICAgICAgICAKKyAgICBjbWQgPSBTaW1wbGVDb21tYW5kKHdvcmRzLCByZWRpcnMsIGFzc2lnbnMpCisgICAgcFswXSA9ICgnc2ltcGxlX2NvbW1hbmQnLCBjbWQpCisKK2RlZiBwX2NtZF9uYW1lKHApOgorICAgICIiImNtZF9uYW1lIDogVE9LRU4iIiIKKyAgICBwWzBdID0gKCdjbWRfbmFtZScsIHBbMV0pCisgICAgCitkZWYgcF9jbWRfd29yZChwKToKKyAgICAiIiJjbWRfd29yZCA6IHRva2VuIiIiCisgICAgcFswXSA9ICgnY21kX3dvcmQnLCBwWzFdKQorCitkZWYgcF9tYXliZV9hc3NpZ25tZW50X3dvcmQocCk6CisgICAgI1NlZSBwX2Fzc2lnbm1lbnRfd29yZCBmb3IgZGV0YWlscy4KKyAgICAiIiJtYXliZV9hc3NpZ25tZW50X3dvcmQgOiBBU1NJR05NRU5UX1dPUkQiIiIKKyAgICBwWzBdID0gKCdtYXliZV9hc3NpZ25tZW50X3dvcmQnLCBwWzFdKQorICAgIAorZGVmIHBfY21kX3ByZWZpeChwKToKKyAgICAiIiJjbWRfcHJlZml4IDogICAgICAgICAgICBpb19yZWRpcmVjdAorICAgICAgICAgICAgICAgICAgfCBjbWRfcHJlZml4IGlvX3JlZGlyZWN0CisgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgYXNzaWdubWVudF93b3JkCisgICAgICAgICAgICAgICAgICB8IGNtZF9wcmVmaXggYXNzaWdubWVudF93b3JkIiIiCisgICAgdHJ5OgorICAgICAgICBwcmVmaXggPSBnZXRfcHJvZHVjdGlvbihwWzE6XSwgJ2NtZF9wcmVmaXgnKQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcHJlZml4ID0gWydjbWRfcHJlZml4J10KKyAgICAgICAgCisgICAgdHJ5OgorICAgICAgICB2YWx1ZSA9IGdldF9wcm9kdWN0aW9uKHBbMTpdLCAnYXNzaWdubWVudF93b3JkJylbMV0KKyAgICAgICAgdmFsdWUgPSAoJ0FTU0lHTk1FTlRfV09SRCcsIHZhbHVlLnNwbGl0KCc9JywgMSkpCisgICAgZXhjZXB0IEtleUVycm9yOiAgICAgICAgCisgICAgICAgIHZhbHVlID0gZ2V0X3Byb2R1Y3Rpb24ocFsxOl0sICdpb19yZWRpcmVjdCcpCisgICAgcFswXSA9IHByZWZpeCArIFt2YWx1ZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK2RlZiBwX2NtZF9zdWZmaXgocCk6CisgICAgIiIiY21kX3N1ZmZpeCAgIDogICAgICAgICAgICBpb19yZWRpcmVjdAorICAgICAgICAgICAgICAgICAgICB8IGNtZF9zdWZmaXggaW9fcmVkaXJlY3QKKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHRva2VuCisgICAgICAgICAgICAgICAgICAgIHwgY21kX3N1ZmZpeCB0b2tlbgorICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgbWF5YmVfZm9yX3dvcmQKKyAgICAgICAgICAgICAgICAgICAgfCBjbWRfc3VmZml4IG1heWJlX2Zvcl93b3JkCisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICBtYXliZV9kb25lX3dvcmQKKyAgICAgICAgICAgICAgICAgICAgfCBjbWRfc3VmZml4IG1heWJlX2RvbmVfd29yZAorICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgbWF5YmVfZG9fd29yZAorICAgICAgICAgICAgICAgICAgICB8IGNtZF9zdWZmaXggbWF5YmVfZG9fd29yZAorICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgbWF5YmVfdW50aWxfd29yZAorICAgICAgICAgICAgICAgICAgICB8IGNtZF9zdWZmaXggbWF5YmVfdW50aWxfd29yZAorICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgbWF5YmVfYXNzaWdubWVudF93b3JkCisgICAgICAgICAgICAgICAgICAgIHwgY21kX3N1ZmZpeCBtYXliZV9hc3NpZ25tZW50X3dvcmQKKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIG1heWJlX2lmX3dvcmQKKyAgICAgICAgICAgICAgICAgICAgfCBjbWRfc3VmZml4IG1heWJlX2lmX3dvcmQKKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIG1heWJlX3RoZW5fd29yZAorICAgICAgICAgICAgICAgICAgICB8IGNtZF9zdWZmaXggbWF5YmVfdGhlbl93b3JkCisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICBtYXliZV9iYW5nX3dvcmQKKyAgICAgICAgICAgICAgICAgICAgfCBjbWRfc3VmZml4IG1heWJlX2Jhbmdfd29yZCIiIgorICAgIHRyeToKKyAgICAgICAgc3VmZml4ID0gZ2V0X3Byb2R1Y3Rpb24ocFsxOl0sICdjbWRfc3VmZml4JykKKyAgICAgICAgdG9rZW4gPSBwWzJdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBzdWZmaXggPSBbJ2NtZF9zdWZmaXgnXQorICAgICAgICB0b2tlbiA9IHBbMV0KKyAgICAgICAgCisgICAgaWYgaXNpbnN0YW5jZSh0b2tlbiwgdHVwbGUpOgorICAgICAgICBpZiB0b2tlblswXT09J2lvX3JlZGlyZWN0JzoKKyAgICAgICAgICAgIHBbMF0gPSBzdWZmaXggKyBbdG9rZW5dCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjQ29udmVydCBtYXliZV8qICB0byBUT0tFTiBpZiBuZWNlc3NhcnkKKyAgICAgICAgICAgIHBbMF0gPSBzdWZmaXggKyBbKCdUT0tFTicsIHRva2VuWzFdKV0KKyAgICBlbHNlOgorICAgICAgICBwWzBdID0gc3VmZml4ICsgWygnVE9LRU4nLCB0b2tlbildCisgICAgICAgICAgICAgICAgIAorZGVmIHBfcmVkaXJlY3RfbGlzdChwKToKKyAgICAiIiJyZWRpcmVjdF9saXN0IDogaW9fcmVkaXJlY3QKKyAgICAgICAgICAgICAgICAgICAgIHwgcmVkaXJlY3RfbGlzdCBpb19yZWRpcmVjdCIiIgorICAgIGlmIGxlbihwKSA9PSAyOgorICAgICAgICBwWzBdID0gWydyZWRpcmVjdF9saXN0JywgbWFrZV9pb19yZWRpcmVjdChwWzFdKV0KKyAgICBlbHNlOgorICAgICAgICBwWzBdID0gcFsxXSArIFttYWtlX2lvX3JlZGlyZWN0KHBbMl0pXQorICAgIAorZGVmIHBfaW9fcmVkaXJlY3QocCk6CisgICAgIiIiaW9fcmVkaXJlY3QgOiAgICAgICAgICAgaW9fZmlsZQorICAgICAgICAgICAgICAgICAgIHwgSU9fTlVNQkVSIGlvX2ZpbGUKKyAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICBpb19oZXJlCisgICAgICAgICAgICAgICAgICAgfCBJT19OVU1CRVIgaW9faGVyZSIiIgorICAgIGlmIGxlbihwKT09MzoKKyAgICAgICAgcFswXSA9ICgnaW9fcmVkaXJlY3QnLCBwWzFdLCBwWzJdKQorICAgIGVsc2U6CisgICAgICAgIHBbMF0gPSAoJ2lvX3JlZGlyZWN0JywgTm9uZSwgcFsxXSkKKyAgICAKK2RlZiBwX2lvX2ZpbGUocCk6CisgICAgI1JldHVybiB0aGUgdHVwbGUgKG9wZXJhdG9yLCBmaWxlbmFtZSkKKyAgICAiIiJpb19maWxlIDogTEVTUyAgICAgIGZpbGVuYW1lCisgICAgICAgICAgICAgICB8IExFU1NBTkQgICBmaWxlbmFtZQorICAgICAgICAgICAgICAgfCBHUkVBVEVSICAgZmlsZW5hbWUKKyAgICAgICAgICAgICAgIHwgR1JFQVRBTkQgIGZpbGVuYW1lCisgICAgICAgICAgICAgICB8IERHUkVBVCAgICBmaWxlbmFtZQorICAgICAgICAgICAgICAgfCBMRVNTR1JFQVQgZmlsZW5hbWUKKyAgICAgICAgICAgICAgIHwgQ0xPQkJFUiAgIGZpbGVuYW1lIiIiCisgICAgI0V4dHJhY3QgdGhlIGZpbGVuYW1lIGZyb20gdGhlIGZpbGUKKyAgICBwWzBdID0gKCdpb19maWxlJywgcFsxXSwgcFsyXVsxXSkKKworZGVmIHBfZmlsZW5hbWUocCk6CisgICAgI1JldHVybiB0aGUgZmlsZW5hbWUKKyAgICAiIiJmaWxlbmFtZSA6IFRPS0VOIiIiCisgICAgcFswXSA9ICgnZmlsZW5hbWUnLCBwWzFdKQorICAgICAgICAKK2RlZiBwX2lvX2hlcmUocCk6CisgICAgIiIiaW9faGVyZSA6IERMRVNTIGhlcmVfZW5kCisgICAgICAgICAgICAgICB8IERMRVNTREFTSCBoZXJlX2VuZCIiIgorICAgIHBbMF0gPSAoJ2lvX2hlcmUnLCBwWzFdLCBwWzJdWzFdLCBwWzJdWzJdKQorCitkZWYgcF9oZXJlX2VuZChwKToKKyAgICAiIiJoZXJlX2VuZCA6IEhFUkVOQU1FIFRPS0VOIiIiCisgICAgcFswXSA9ICgnaGVyZV9kb2N1bWVudCcsIHBbMV0sIHBbMl0pCisgICAgCitkZWYgcF9uZXdsaW5lX3NlcXVlbmNlKHApOgorICAgICMgTm90aGluZyBpbiB0aGUgZ3JhbW1hciBjYW4gaGFuZGxlIGxlYWRpbmcgTkVXTElORSBwcm9kdWN0aW9ucywgc28gYWRkCisgICAgIyB0aGlzIG9uZSB3aXRoIHRoZSBsb3dlc3QgcG9zc2libGUgcHJpb3JpdHkgcmVsYXRpdmVseSB0byBuZXdsaW5lX2xpc3QuCisgICAgIiIibmV3bGluZV9zZXF1ZW5jZSA6IG5ld2xpbmVfbGlzdCIiIgorICAgIHBbMF0gPSBOb25lCisgICAgCitkZWYgcF9uZXdsaW5lX2xpc3QocCk6CisgICAgIiIibmV3bGluZV9saXN0IDogTkVXTElORQorICAgICAgICAgICAgICAgICAgICB8IG5ld2xpbmVfbGlzdCBORVdMSU5FIiIiCisgICAgcFswXSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgCitkZWYgcF9saW5lYnJlYWsocCk6CisgICAgIiIibGluZWJyZWFrIDogbmV3bGluZV9saXN0CisgICAgICAgICAgICAgICAgIHwgZW1wdHkiIiIKKyAgICBwWzBdID0gTm9uZQorCitkZWYgcF9zZXBhcmF0b3Jfb3AocCk6ICAgICAgICAgICAgICAgICAKKyAgICAiIiJzZXBhcmF0b3Jfb3AgOiBDT01NQQorICAgICAgICAgICAgICAgICAgICB8IEFNUCIiIgorICAgIHBbMF0gPSBwWzFdCisKK2RlZiBwX3NlcGFyYXRvcihwKToKKyAgICAiIiJzZXBhcmF0b3IgOiBzZXBhcmF0b3Jfb3AgbGluZWJyZWFrCisgICAgICAgICAgICAgICAgIHwgbmV3bGluZV9saXN0IiIiCisgICAgaWYgbGVuKHApPT0yOgorICAgICAgICAjSWdub3JlIG5ld2xpbmVzCisgICAgICAgIHBbMF0gPSBOb25lCisgICAgZWxzZToKKyAgICAgICAgI0tlZXAgdGhlIHNlcGFyYXRvciBvcGVyYXRvcgorICAgICAgICBwWzBdID0gKCdzZXBhcmF0b3InLCBwWzFdKQorICAgICAgICAgICAgICAgICAKK2RlZiBwX3NlcXVlbnRpYWxfc2VwKHApOgorICAgICIiInNlcXVlbnRpYWxfc2VwIDogQ09NTUEgbGluZWJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgfCBuZXdsaW5lX2xpc3QiIiIKKyAgICBwWzBdID0gTm9uZQorCisjIExvdyBwcmlvcml0eSBUT0tFTiA9PiBmb3Jfd29yZCBjb252ZXJzaW9uLgorIyBMZXQgbWF5YmVfZm9yX3dvcmQgYmUgdXNlZCBhcyBhIHRva2VuIHdoZW4gbmVjZXNzYXJ5IGluIGhpZ2hlciBwcmlvcml0eQorIyBydWxlcy4gCitkZWYgcF9mb3Jfd29yZChwKToKKyAgICAiIiJmb3Jfd29yZCA6IG1heWJlX2Zvcl93b3JkIiIiCisgICAgcFswXSA9IHBbMV0KKworZGVmIHBfaWZfd29yZChwKToKKyAgICAiIiJpZl93b3JkIDogbWF5YmVfaWZfd29yZCIiIgorICAgIHBbMF0gPSBwWzFdCisKK2RlZiBwX3RoZW5fd29yZChwKToKKyAgICAiIiJ0aGVuX3dvcmQgOiBtYXliZV90aGVuX3dvcmQiIiIKKyAgICBwWzBdID0gcFsxXQorCitkZWYgcF9kb25lX3dvcmQocCk6CisgICAgIiIiZG9uZV93b3JkIDogbWF5YmVfZG9uZV93b3JkIiIiCisgICAgcFswXSA9IHBbMV0KKworZGVmIHBfZG9fd29yZChwKToKKyAgICAiIiJkb193b3JkIDogbWF5YmVfZG9fd29yZCIiIgorICAgIHBbMF0gPSBwWzFdCisgICAgCitkZWYgcF91bnRpbF93b3JkKHApOgorICAgICIiInVudGlsX3dvcmQgOiBtYXliZV91bnRpbF93b3JkIiIiCisgICAgcFswXSA9IHBbMV0KKyAgICAKK2RlZiBwX2Fzc2lnbm1lbnRfd29yZChwKToKKyAgICAiIiJhc3NpZ25tZW50X3dvcmQgOiBtYXliZV9hc3NpZ25tZW50X3dvcmQiIiIKKyAgICBwWzBdID0gKCdhc3NpZ25tZW50X3dvcmQnLCBwWzFdWzFdKQorICAgIAorZGVmIHBfYmFuZ193b3JkKHApOgorICAgICIiImJhbmdfd29yZCA6IG1heWJlX2Jhbmdfd29yZCIiIgorICAgIHBbMF0gPSAoJ2Jhbmdfd29yZCcsIHBbMV1bMV0pCisKK2RlZiBwX3Rva2VuKHApOgorICAgICIiInRva2VuIDogVE9LRU4KKyAgICAgICAgICAgICB8IEZpIiIiCisgICAgcFswXSA9IHBbMV0KKworZGVmIHBfZW1wdHkocCk6CisgICAgJ2VtcHR5IDonCisgICAgcFswXSA9IE5vbmUKKyAgICAKKyMgRXJyb3IgcnVsZSBmb3Igc3ludGF4IGVycm9ycworZGVmIHBfZXJyb3IocCk6CisgICAgbXNnID0gW10KKyAgICB3ID0gbXNnLmFwcGVuZAorICAgIHcoJyVyXG4nICUgcCkKKyAgICB3KCdmb2xsb3dlZCBieTpcbicpCisgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICAgIG4gPSB5YWNjLnRva2VuKCkKKyAgICAgICAgaWYgbm90IG46CisgICAgICAgICAgICBicmVhaworICAgICAgICB3KCcgICVyXG4nICUgbikKKyAgICByYWlzZSBzaGVycm9ycy5TaGVsbFN5bnRheEVycm9yKCcnLmpvaW4obXNnKSkKKworIyBCdWlsZCB0aGUgcGFyc2VyCit0cnk6CisgICAgaW1wb3J0IHB5c2h0YWJsZXMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBvdXRwdXRkaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCisgICAgaWYgbm90IG9zLmFjY2VzcyhvdXRwdXRkaXIsIG9zLldfT0spOgorICAgICAgICBvdXRwdXRkaXIgPSAnJworICAgIHlhY2MueWFjYyh0YWJtb2R1bGUgPSAncHlzaHRhYmxlcycsIG91dHB1dGRpciA9IG91dHB1dGRpciwgZGVidWcgPSAwKQorZWxzZToKKyAgICB5YWNjLnlhY2ModGFibW9kdWxlID0gJ3B5c2gucHlzaHRhYmxlcycsIHdyaXRlX3RhYmxlcyA9IDAsIGRlYnVnID0gMCkKKworCitkZWYgcGFyc2UoaW5wdXQsIGVvZj1GYWxzZSwgZGVidWc9RmFsc2UpOgorICAgICIiIlBhcnNlIGEgd2hvbGUgc2NyaXB0IGF0IG9uY2UgYW5kIHJldHVybiB0aGUgZ2VuZXJhdGVkIEFTVCBhbmQgdW5jb25zdW1lZAorICAgIGRhdGEgaW4gYSB0dXBsZS4KKyAgICAKKyAgICBOT1RFOiBlb2YgaXMgcHJvYmFibHkgbWVhbmluZ2xlc3MgZm9yIG5vdywgdGhlIHBhcnNlciBiZWluZyB1bmFibGUgdG8gd29yaworICAgIGluIHB1bGwgbW9kZS4gSXQgc2hvdWxkIGJlIHNldCB0byBUcnVlLgorICAgICIiIgorICAgIGxleGVyID0gcHlzaGxleC5QTFlMZXhlcigpCisgICAgcmVtYWluaW5nID0gbGV4ZXIuYWRkKGlucHV0LCBlb2YpCisgICAgaWYgbGV4ZXIuaXNfZW1wdHkoKToKKyAgICAgICAgcmV0dXJuIFtdLCByZW1haW5pbmcKKyAgICBpZiBkZWJ1ZzoKKyAgICAgICAgZGVidWcgPSAyCisgICAgcmV0dXJuIHlhY2MucGFyc2UobGV4ZXI9bGV4ZXIsIGRlYnVnPWRlYnVnKSwgcmVtYWluaW5nCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFTVCByZW5kZXJpbmcgaGVscGVycworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgCisKK2RlZiBmb3JtYXRfY29tbWFuZHModik6CisgICAgIiIiUmV0dXJuIGEgdHJlZSBtYWRlIG9mIHN0cmluZ3MgYW5kIGxpc3RzLiBNYWtlIGNvbW1hbmQgdHJlZXMgZWFzaWVyIHRvCisgICAgZGlzcGxheS4KKyAgICAiIiIKKyAgICBpZiBpc2luc3RhbmNlKHYsIGxpc3QpOgorICAgICAgICByZXR1cm4gW2Zvcm1hdF9jb21tYW5kcyhjKSBmb3IgYyBpbiB2XQorICAgIGlmIGlzaW5zdGFuY2UodiwgdHVwbGUpOgorICAgICAgICBpZiBsZW4odik9PTIgYW5kIGlzaW5zdGFuY2UodlswXSwgc3RyKSBhbmQgbm90IGlzaW5zdGFuY2UodlsxXSwgc3RyKToKKyAgICAgICAgICAgIGlmIHZbMF0gPT0gJ2FzeW5jJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gWydBc3luY0xpc3QnLCBtYXAoZm9ybWF0X2NvbW1hbmRzLCB2WzFdKV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgI0F2b2lkIGRlY29tcG9zaW5nIHR1cGxlcyBsaWtlICgncGlwZWxpbmUnLCBQaXBlbGluZSguLi4pKQorICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXRfY29tbWFuZHModlsxXSkKKyAgICAgICAgcmV0dXJuIGZvcm1hdF9jb21tYW5kcyhsaXN0KHYpKQorICAgIGVsaWYgaXNpbnN0YW5jZSh2LCBJZkNvbmQpOgorICAgICAgICBuYW1lID0gWydJZkNvbmQnXQorICAgICAgICBuYW1lICs9IFsnaWYnLCBtYXAoZm9ybWF0X2NvbW1hbmRzLCB2LmNvbmQpXQorICAgICAgICBuYW1lICs9IFsndGhlbicsIG1hcChmb3JtYXRfY29tbWFuZHMsIHYuaWZfY21kcyldCisgICAgICAgIG5hbWUgKz0gWydlbHNlJywgbWFwKGZvcm1hdF9jb21tYW5kcywgdi5lbHNlX2NtZHMpXQorICAgICAgICByZXR1cm4gbmFtZQorICAgIGVsaWYgaXNpbnN0YW5jZSh2LCBGb3JMb29wKToKKyAgICAgICAgbmFtZSA9IFsnRm9yTG9vcCddCisgICAgICAgIG5hbWUgKz0gW3JlcHIodi5uYW1lKSsnIGluICcsIG1hcChzdHIsIHYuaXRlbXMpXQorICAgICAgICBuYW1lICs9IFsnY29tbWFuZHMnLCBtYXAoZm9ybWF0X2NvbW1hbmRzLCB2LmNtZHMpXQorICAgICAgICByZXR1cm4gbmFtZQorICAgIGVsaWYgaXNpbnN0YW5jZSh2LCBBbmRPcik6CisgICAgICAgIHJldHVybiBbdi5vcCwgZm9ybWF0X2NvbW1hbmRzKHYubGVmdCksIGZvcm1hdF9jb21tYW5kcyh2LnJpZ2h0KV0KKyAgICBlbGlmIGlzaW5zdGFuY2UodiwgUGlwZWxpbmUpOgorICAgICAgICBuYW1lID0gJ1BpcGVsaW5lJworICAgICAgICBpZiB2LnJldmVyc2Vfc3RhdHVzOgorICAgICAgICAgICAgbmFtZSA9ICchJyArIG5hbWUKKyAgICAgICAgcmV0dXJuIFtuYW1lLCBmb3JtYXRfY29tbWFuZHModi5jb21tYW5kcyldCisgICAgZWxpZiBpc2luc3RhbmNlKHYsIENhc2UpOgorICAgICAgICBuYW1lID0gWydDYXNlJ10KKyAgICAgICAgbmFtZSArPSBbdi5uYW1lLCBmb3JtYXRfY29tbWFuZHModi5pdGVtcyldCisgICAgZWxpZiBpc2luc3RhbmNlKHYsIFNpbXBsZUNvbW1hbmQpOgorICAgICAgICBuYW1lID0gWydTaW1wbGVDb21tYW5kJ10KKyAgICAgICAgaWYgdi53b3JkczogICAgICAgICAgICAgICAgCisgICAgICAgICAgICBuYW1lICs9IFsnd29yZHMnLCBtYXAoc3RyLCB2LndvcmRzKV0KKyAgICAgICAgaWYgdi5hc3NpZ25zOgorICAgICAgICAgICAgYXNzaWducyA9IFt0dXBsZShhWzFdKSBmb3IgYSBpbiB2LmFzc2lnbnNdCisgICAgICAgICAgICBuYW1lICs9IFsnYXNzaWducycsIG1hcChzdHIsIGFzc2lnbnMpXQorICAgICAgICBpZiB2LnJlZGlyczoKKyAgICAgICAgICAgIG5hbWUgKz0gWydyZWRpcnMnLCBtYXAoZm9ybWF0X2NvbW1hbmRzLCB2LnJlZGlycyldCisgICAgICAgIHJldHVybiBuYW1lCisgICAgZWxpZiBpc2luc3RhbmNlKHYsIFJlZGlyZWN0TGlzdCk6CisgICAgICAgIG5hbWUgPSBbJ1JlZGlyZWN0TGlzdCddCisgICAgICAgIGlmIHYucmVkaXJzOgorICAgICAgICAgICAgbmFtZSArPSBbJ3JlZGlycycsIG1hcChmb3JtYXRfY29tbWFuZHMsIHYucmVkaXJzKV0KKyAgICAgICAgbmFtZSArPSBbJ2NvbW1hbmQnLCBmb3JtYXRfY29tbWFuZHModi5jbWQpXQorICAgICAgICByZXR1cm4gbmFtZQorICAgIGVsaWYgaXNpbnN0YW5jZSh2LCBJT1JlZGlyZWN0KToKKyAgICAgICAgcmV0dXJuICcgJy5qb2luKG1hcChzdHIsICh2LmlvX251bWJlciwgdi5vcCwgdi5maWxlbmFtZSkpKQorICAgIGVsaWYgaXNpbnN0YW5jZSh2LCBIZXJlRG9jdW1lbnQpOgorICAgICAgICByZXR1cm4gJyAnLmpvaW4obWFwKHN0ciwgKHYuaW9fbnVtYmVyLCB2Lm9wLCByZXByKHYubmFtZSksIHJlcHIodi5jb250ZW50KSkpKQorICAgIGVsaWYgaXNpbnN0YW5jZSh2LCBTdWJTaGVsbCk6CisgICAgICAgIHJldHVybiBbJ1N1YlNoZWxsJywgbWFwKGZvcm1hdF9jb21tYW5kcywgdi5jbWRzKV0KKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gcmVwcih2KQorICAgICAgICAgICAgIAorZGVmIHByaW50X2NvbW1hbmRzKGNtZHMsIG91dHB1dD1zeXMuc3Rkb3V0KToKKyAgICAiIiJQcmV0dHkgcHJpbnQgYSBjb21tYW5kIHRyZWUuIiIiCisgICAgZGVmIHByaW50X3RyZWUoY21kLCBzcGFjZXMsIG91dHB1dCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoY21kLCBsaXN0KToKKyAgICAgICAgICAgIGZvciBjIGluIGNtZDoKKyAgICAgICAgICAgICAgICBwcmludF90cmVlKGMsIHNwYWNlcyArIDMsIG91dHB1dCkgICAgICAgICAgICAgIAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgPj5vdXRwdXQsICcgJypzcGFjZXMgKyBzdHIoY21kKQorICAgIAorICAgIGZvcm1hdHRlZCA9IGZvcm1hdF9jb21tYW5kcyhjbWRzKQorICAgIHByaW50X3RyZWUoZm9ybWF0dGVkLCAwLCBvdXRwdXQpCisgICAgCisgICAgCitkZWYgc3RyaW5naWZ5X2NvbW1hbmRzKGNtZHMpOiAKKyAgICAiIiJTZXJpYWxpemUgYSBjb21tYW5kIHRyZWUgYXMgYSBzdHJpbmcuCisgICAgCisgICAgUmV0dXJuZWQgc3RyaW5nIGlzIG5vdCBwcmV0dHkgYW5kIGlzIGN1cnJlbnRseSB1c2VkIGZvciB1bml0IHRlc3RzIG9ubHkuCisgICAgIiIiICAgCisgICAgZGVmIHN0cmluZ2lmeSh2YWx1ZSk6CisgICAgICAgIG91dHB1dCA9IFtdCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGxpc3QpOgorICAgICAgICAgICAgZm9ybWF0dGVkID0gW10KKyAgICAgICAgICAgIGZvciB2IGluIHZhbHVlOgorICAgICAgICAgICAgICAgIGZvcm1hdHRlZC5hcHBlbmQoc3RyaW5naWZ5KHYpKQorICAgICAgICAgICAgZm9ybWF0dGVkID0gJyAnLmpvaW4oZm9ybWF0dGVkKQorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnJy5qb2luKFsnPCcsIGZvcm1hdHRlZCwgJz4nXSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHZhbHVlKQorICAgICAgICByZXR1cm4gJyAnLmpvaW4ob3V0cHV0KQorICAgICAgICAgICAgCisgICAgcmV0dXJuIHN0cmluZ2lmeShmb3JtYXRfY29tbWFuZHMoY21kcykpCisgICAgCisgICAgICAgIAorZGVmIHZpc2l0X2NvbW1hbmRzKGNtZHMsIGNhbGxhYmxlKToKKyAgICAiIiJWaXNpdCB0aGUgY29tbWFuZCB0cmVlIGFuZCBleGVjdXRlIGNhbGxhYmxlIG9uIGV2ZXJ5IFBpcGVsaW5lIGFuZCAKKyAgICBTaW1wbGVDb21tYW5kIGluc3RhbmNlcy4KKyAgICAiIiIKKyAgICBpZiBpc2luc3RhbmNlKGNtZHMsICh0dXBsZSwgbGlzdCkpOgorICAgICAgICBtYXAobGFtYmRhIGM6IHZpc2l0X2NvbW1hbmRzKGMsY2FsbGFibGUpLCBjbWRzKQorICAgIGVsaWYgaXNpbnN0YW5jZShjbWRzLCAoUGlwZWxpbmUsIFNpbXBsZUNvbW1hbmQpKToKKyAgICAgICAgY2FsbGFibGUoY21kcykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9zaGVycm9ycy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9zaGVycm9ycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWQwNTMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL3NoZXJyb3JzLnB5CkBAIC0wLDAgKzEsNDEgQEAKKyMgc2hlcnJvcnMucHkgLSBzaGVsbCBlcnJvcnMgYW5kIHNpZ25hbHMKKyMKKyMgQ29weXJpZ2h0IDIwMDcgUGF0cmljayBNZXphcmQKKyMKKyMgVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcworIyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorCisiIiJEZWZpbmUgc2hlbGwgZXhjZXB0aW9ucyBhbmQgZXJyb3IgY29kZXMuCisiIiIKKworY2xhc3MgU2hlbGxFcnJvcihFeGNlcHRpb24pOgorICAgIHBhc3MKKworY2xhc3MgU2hlbGxTeW50YXhFcnJvcihTaGVsbEVycm9yKToKKyAgICBwYXNzCisgICAgCitjbGFzcyBVdGlsaXR5RXJyb3IoU2hlbGxFcnJvcik6CisgICAgIiIiUmFpc2VkIHVwb24gdXRpbGl0eSBzeW50YXggZXJyb3IgKG9wdGlvbiBvciBvcGVyYW5kIGVycm9yKS4iIiIKKyAgICBwYXNzCisgICAKK2NsYXNzIEV4cGFuc2lvbkVycm9yKFNoZWxsRXJyb3IpOgorICAgIHBhc3MKKyAgICAgCitjbGFzcyBDb21tYW5kTm90Rm91bmQoU2hlbGxFcnJvcik6CisgICAgIiIiU3BlY2lmaWVkIGNvbW1hbmQgd2FzIG5vdCBmb3VuZC4iIiIKKyAgICBwYXNzCisgICAgCitjbGFzcyBSZWRpcmVjdGlvbkVycm9yKFNoZWxsRXJyb3IpOgorICAgIHBhc3MKKyAgICAKK2NsYXNzIFZhckFzc2lnbm1lbnRFcnJvcihTaGVsbEVycm9yKToKKyAgICAiIiJWYXJpYWJsZSBhc3NpZ25tZW50IGVycm9yLiIiIgorICAgIHBhc3MKKyAgICAKK2NsYXNzIEV4aXRTaWduYWwoU2hlbGxFcnJvcik6CisgICAgIiIiRXhpdCBzaWduYWwuIiIiCisgICAgcGFzcworICAgIAorY2xhc3MgUmV0dXJuU2lnbmFsKFNoZWxsRXJyb3IpOgorICAgICIiIkV4aXQgc2lnbmFsLiIiIgorICAgIHBhc3MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9zdWJwcm9jZXNzX2ZpeC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9zdWJwcm9jZXNzX2ZpeC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmVjYTIyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL3N1YnByb2Nlc3NfZml4LnB5CkBAIC0wLDAgKzEsNzcgQEAKKyMgc3VicHJvY2VzcyAtIFN1YnByb2Nlc3NlcyB3aXRoIGFjY2Vzc2libGUgSS9PIHN0cmVhbXMKKyMKKyMgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBtb2R1bGUsIHNlZSBQRVAgMzI0LgorIworIyBUaGlzIG1vZHVsZSBzaG91bGQgcmVtYWluIGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi4yLCBzZWUgUEVQIDI5MS4KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDAzLTIwMDUgYnkgUGV0ZXIgQXN0cmFuZCA8YXN0cmFuZEBseXNhdG9yLmxpdS5zZT4KKyMKKyMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgorIyBTZWUgaHR0cDovL3d3dy5weXRob24ub3JnLzIuNC9saWNlbnNlIGZvciBsaWNlbnNpbmcgZGV0YWlscy4KKworZGVmIGxpc3QyY21kbGluZShzZXEpOgorICAgICIiIgorICAgIFRyYW5zbGF0ZSBhIHNlcXVlbmNlIG9mIGFyZ3VtZW50cyBpbnRvIGEgY29tbWFuZCBsaW5lCisgICAgc3RyaW5nLCB1c2luZyB0aGUgc2FtZSBydWxlcyBhcyB0aGUgTVMgQyBydW50aW1lOgorCisgICAgMSkgQXJndW1lbnRzIGFyZSBkZWxpbWl0ZWQgYnkgd2hpdGUgc3BhY2UsIHdoaWNoIGlzIGVpdGhlciBhCisgICAgICAgc3BhY2Ugb3IgYSB0YWIuCisKKyAgICAyKSBBIHN0cmluZyBzdXJyb3VuZGVkIGJ5IGRvdWJsZSBxdW90YXRpb24gbWFya3MgaXMKKyAgICAgICBpbnRlcnByZXRlZCBhcyBhIHNpbmdsZSBhcmd1bWVudCwgcmVnYXJkbGVzcyBvZiB3aGl0ZSBzcGFjZQorICAgICAgIGNvbnRhaW5lZCB3aXRoaW4uICBBIHF1b3RlZCBzdHJpbmcgY2FuIGJlIGVtYmVkZGVkIGluIGFuCisgICAgICAgYXJndW1lbnQuCisKKyAgICAzKSBBIGRvdWJsZSBxdW90YXRpb24gbWFyayBwcmVjZWRlZCBieSBhIGJhY2tzbGFzaCBpcworICAgICAgIGludGVycHJldGVkIGFzIGEgbGl0ZXJhbCBkb3VibGUgcXVvdGF0aW9uIG1hcmsuCisKKyAgICA0KSBCYWNrc2xhc2hlcyBhcmUgaW50ZXJwcmV0ZWQgbGl0ZXJhbGx5LCB1bmxlc3MgdGhleQorICAgICAgIGltbWVkaWF0ZWx5IHByZWNlZGUgYSBkb3VibGUgcXVvdGF0aW9uIG1hcmsuCisKKyAgICA1KSBJZiBiYWNrc2xhc2hlcyBpbW1lZGlhdGVseSBwcmVjZWRlIGEgZG91YmxlIHF1b3RhdGlvbiBtYXJrLAorICAgICAgIGV2ZXJ5IHBhaXIgb2YgYmFja3NsYXNoZXMgaXMgaW50ZXJwcmV0ZWQgYXMgYSBsaXRlcmFsCisgICAgICAgYmFja3NsYXNoLiAgSWYgdGhlIG51bWJlciBvZiBiYWNrc2xhc2hlcyBpcyBvZGQsIHRoZSBsYXN0CisgICAgICAgYmFja3NsYXNoIGVzY2FwZXMgdGhlIG5leHQgZG91YmxlIHF1b3RhdGlvbiBtYXJrIGFzCisgICAgICAgZGVzY3JpYmVkIGluIHJ1bGUgMy4KKyAgICAiIiIKKworICAgICMgU2VlCisgICAgIyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZW4tdXMvdmNjZWxuZy9odG0vcHJvZ3NfMTIuYXNwCisgICAgcmVzdWx0ID0gW10KKyAgICBuZWVkcXVvdGUgPSBGYWxzZQorICAgIGZvciBhcmcgaW4gc2VxOgorICAgICAgICBic19idWYgPSBbXQorCisgICAgICAgICMgQWRkIGEgc3BhY2UgdG8gc2VwYXJhdGUgdGhpcyBhcmd1bWVudCBmcm9tIHRoZSBvdGhlcnMKKyAgICAgICAgaWYgcmVzdWx0OgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpCisKKyAgICAgICAgbmVlZHF1b3RlID0gKCIgIiBpbiBhcmcpIG9yICgiXHQiIGluIGFyZykgb3IgKCJ8IiBpbiBhcmcpIG9yIGFyZyA9PSAiIgorICAgICAgICBpZiBuZWVkcXVvdGU6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCciJykKKworICAgICAgICBmb3IgYyBpbiBhcmc6CisgICAgICAgICAgICBpZiBjID09ICdcXCc6CisgICAgICAgICAgICAgICAgIyBEb24ndCBrbm93IGlmIHdlIG5lZWQgdG8gZG91YmxlIHlldC4KKyAgICAgICAgICAgICAgICBic19idWYuYXBwZW5kKGMpCisgICAgICAgICAgICBlbGlmIGMgPT0gJyInOgorICAgICAgICAgICAgICAgICMgRG91YmxlIGJhY2tzcGFjZXMuCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnXFwnICogbGVuKGJzX2J1ZikqMikKKyAgICAgICAgICAgICAgICBic19idWYgPSBbXQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ1xcIicpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgTm9ybWFsIGNoYXIKKyAgICAgICAgICAgICAgICBpZiBic19idWY6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5leHRlbmQoYnNfYnVmKQorICAgICAgICAgICAgICAgICAgICBic19idWYgPSBbXQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYykKKworICAgICAgICAjIEFkZCByZW1haW5pbmcgYmFja3NwYWNlcywgaWYgYW55LgorICAgICAgICBpZiBic19idWY6CisgICAgICAgICAgICByZXN1bHQuZXh0ZW5kKGJzX2J1ZikKKworICAgICAgICBpZiBuZWVkcXVvdGU6CisgICAgICAgICAgICByZXN1bHQuZXh0ZW5kKGJzX2J1ZikKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyInKQorICAgICAgICAgICAgCisgICAgcmV0dXJuICcnLmpvaW4ocmVzdWx0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9ydW5xdWV1ZS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcnVucXVldWUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI3MWVlZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcnVucXVldWUucHkKQEAgLTAsMCArMSwyMTk1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgJ1J1blF1ZXVlJyBpbXBsZW1lbnRhdGlvbgorCitIYW5kbGVzIHByZXBhcmF0aW9uIGFuZCBleGVjdXRpb24gb2YgYSBxdWV1ZSBvZiB0YXNrcworIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgIFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgY29weQoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3RhdAoraW1wb3J0IGZjbnRsCitpbXBvcnQgZXJybm8KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBiYgorZnJvbSBiYiBpbXBvcnQgbXNnLCBkYXRhLCBldmVudAorZnJvbSBiYiBpbXBvcnQgbW9uaXRvcmRpc2sKK2ltcG9ydCBzdWJwcm9jZXNzCisKK3RyeToKKyAgICBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgcGlja2xlCisKK2JibG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UiKQorbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuUnVuUXVldWUiKQorCitfX2ZpbmRfbWQ1X18gPSByZS5jb21waWxlKCByJyg/aSkoPzwhW2EtejAtOV0pW2EtZjAtOV17MzJ9KD8hW2EtejAtOV0pJyApCisKK2NsYXNzIFJ1blF1ZXVlU3RhdHM6CisgICAgIiIiCisgICAgSG9sZHMgc3RhdGlzdGljcyBvbiB0aGUgdGFza3MgaGFuZGxlZCBieSB0aGUgYXNzb2NpYXRlZCBydW5RdWV1ZQorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0b3RhbCk6CisgICAgICAgIHNlbGYuY29tcGxldGVkID0gMAorICAgICAgICBzZWxmLnNraXBwZWQgPSAwCisgICAgICAgIHNlbGYuZmFpbGVkID0gMAorICAgICAgICBzZWxmLmFjdGl2ZSA9IDAKKyAgICAgICAgc2VsZi50b3RhbCA9IHRvdGFsCisKKyAgICBkZWYgY29weShzZWxmKToKKyAgICAgICAgb2JqID0gc2VsZi5fX2NsYXNzX18oc2VsZi50b3RhbCkKKyAgICAgICAgb2JqLl9fZGljdF9fLnVwZGF0ZShzZWxmLl9fZGljdF9fKQorICAgICAgICByZXR1cm4gb2JqCisKKyAgICBkZWYgdGFza0ZhaWxlZChzZWxmKToKKyAgICAgICAgc2VsZi5hY3RpdmUgPSBzZWxmLmFjdGl2ZSAtIDEKKyAgICAgICAgc2VsZi5mYWlsZWQgPSBzZWxmLmZhaWxlZCArIDEKKworICAgIGRlZiB0YXNrQ29tcGxldGVkKHNlbGYsIG51bWJlciA9IDEpOgorICAgICAgICBzZWxmLmFjdGl2ZSA9IHNlbGYuYWN0aXZlIC0gbnVtYmVyCisgICAgICAgIHNlbGYuY29tcGxldGVkID0gc2VsZi5jb21wbGV0ZWQgKyBudW1iZXIKKworICAgIGRlZiB0YXNrU2tpcHBlZChzZWxmLCBudW1iZXIgPSAxKToKKyAgICAgICAgc2VsZi5hY3RpdmUgPSBzZWxmLmFjdGl2ZSArIG51bWJlcgorICAgICAgICBzZWxmLnNraXBwZWQgPSBzZWxmLnNraXBwZWQgKyBudW1iZXIKKworICAgIGRlZiB0YXNrQWN0aXZlKHNlbGYpOgorICAgICAgICBzZWxmLmFjdGl2ZSA9IHNlbGYuYWN0aXZlICsgMQorCisjIFRoZXNlIHZhbHVlcyBpbmRpY2F0ZSB0aGUgbmV4dCBzdGVwIGR1ZSB0byBiZSBydW4gaW4gdGhlCisjIHJ1blF1ZXVlIHN0YXRlIG1hY2hpbmUKK3J1blF1ZXVlUHJlcGFyZSA9IDIKK3J1blF1ZXVlU2NlbmVJbml0ID0gMworcnVuUXVldWVTY2VuZVJ1biA9IDQKK3J1blF1ZXVlUnVuSW5pdCA9IDUKK3J1blF1ZXVlUnVubmluZyA9IDYKK3J1blF1ZXVlRmFpbGVkID0gNworcnVuUXVldWVDbGVhblVwID0gOAorcnVuUXVldWVDb21wbGV0ZSA9IDkKKworY2xhc3MgUnVuUXVldWVTY2hlZHVsZXIob2JqZWN0KToKKyAgICAiIiIKKyAgICBDb250cm9sIHRoZSBvcmRlciB0YXNrcyBhcmUgc2NoZWR1bGVkIGluLgorICAgICIiIgorICAgIG5hbWUgPSAiYmFzaWMiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcnVucXVldWUsIHJxZGF0YSk6CisgICAgICAgICIiIgorICAgICAgICBUaGUgZGVmYXVsdCBzY2hlZHVsZXIganVzdCByZXR1cm5zIHRoZSBmaXJzdCBidWlsZGFibGUgdGFzayAodGhlCisgICAgICAgIHByaW9yaXR5IG1hcCBpcyBzb3J0ZWQgYnkgdGFzayBudW1iZXIpCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnJxID0gcnVucXVldWUKKyAgICAgICAgc2VsZi5ycWRhdGEgPSBycWRhdGEKKyAgICAgICAgc2VsZi5udW1UYXNrcyA9IGxlbihzZWxmLnJxZGF0YS5ydW5xX2ZuaWQpCisKKyAgICAgICAgc2VsZi5wcmlvX21hcCA9IFtdCisgICAgICAgIHNlbGYucHJpb19tYXAuZXh0ZW5kKHJhbmdlKHNlbGYubnVtVGFza3MpKQorCisgICAgICAgIHNlbGYuYnVpbGRhYmxlID0gW10KKyAgICAgICAgc2VsZi5zdGFtcHMgPSB7fQorICAgICAgICBmb3IgdGFza2lkIGluIHhyYW5nZShzZWxmLm51bVRhc2tzKToKKyAgICAgICAgICAgIGZuID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3Rhc2tpZF1dCisgICAgICAgICAgICB0YXNrbmFtZSA9IHNlbGYucnFkYXRhLnJ1bnFfdGFza1t0YXNraWRdCisgICAgICAgICAgICBzZWxmLnN0YW1wc1t0YXNraWRdID0gYmIuYnVpbGQuc3RhbXBmaWxlKHRhc2tuYW1lLCBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUsIGZuKQorICAgICAgICAgICAgaWYgc2VsZi5ycS5ydW5xX2J1aWxkYWJsZVt0YXNraWRdID09IDE6CisgICAgICAgICAgICAgICAgc2VsZi5idWlsZGFibGUuYXBwZW5kKHRhc2tpZCkKKworICAgICAgICBzZWxmLnJldl9wcmlvX21hcCA9IE5vbmUKKworICAgIGRlZiBuZXh0X2J1aWxkYWJsZV90YXNrKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBpZCBvZiB0aGUgZmlyc3QgdGFzayB3ZSBmaW5kIHRoYXQgaXMgYnVpbGRhYmxlCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmJ1aWxkYWJsZSA9IFt4IGZvciB4IGluIHNlbGYuYnVpbGRhYmxlIGlmIG5vdCBzZWxmLnJxLnJ1bnFfcnVubmluZ1t4XSA9PSAxXQorICAgICAgICBpZiBub3Qgc2VsZi5idWlsZGFibGU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBpZiBsZW4oc2VsZi5idWlsZGFibGUpID09IDE6CisgICAgICAgICAgICB0YXNraWQgPSBzZWxmLmJ1aWxkYWJsZVswXQorICAgICAgICAgICAgc3RhbXAgPSBzZWxmLnN0YW1wc1t0YXNraWRdCisgICAgICAgICAgICBpZiBzdGFtcCBub3QgaW4gc2VsZi5ycS5idWlsZF9zdGFtcHMuaXRlcnZhbHVlcygpOgorICAgICAgICAgICAgICAgIHJldHVybiB0YXNraWQKKworICAgICAgICBpZiBub3Qgc2VsZi5yZXZfcHJpb19tYXA6CisgICAgICAgICAgICBzZWxmLnJldl9wcmlvX21hcCA9IHJhbmdlKHNlbGYubnVtVGFza3MpCisgICAgICAgICAgICBmb3IgdGFza2lkIGluIHhyYW5nZShzZWxmLm51bVRhc2tzKToKKyAgICAgICAgICAgICAgICBzZWxmLnJldl9wcmlvX21hcFtzZWxmLnByaW9fbWFwW3Rhc2tpZF1dID0gdGFza2lkCisKKyAgICAgICAgYmVzdCA9IE5vbmUKKyAgICAgICAgYmVzdHByaW8gPSBOb25lCisgICAgICAgIGZvciB0YXNraWQgaW4gc2VsZi5idWlsZGFibGU6CisgICAgICAgICAgICBwcmlvID0gc2VsZi5yZXZfcHJpb19tYXBbdGFza2lkXQorICAgICAgICAgICAgaWYgYmVzdHByaW8gaXMgTm9uZSBvciBiZXN0cHJpbyA+IHByaW86CisgICAgICAgICAgICAgICAgc3RhbXAgPSBzZWxmLnN0YW1wc1t0YXNraWRdCisgICAgICAgICAgICAgICAgaWYgc3RhbXAgaW4gc2VsZi5ycS5idWlsZF9zdGFtcHMuaXRlcnZhbHVlcygpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGJlc3RwcmlvID0gcHJpbworICAgICAgICAgICAgICAgIGJlc3QgPSB0YXNraWQKKworICAgICAgICByZXR1cm4gYmVzdAorCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIGlkIG9mIHRoZSB0YXNrIHdlIHNob3VsZCBidWlsZCBuZXh0CisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLnJxLnN0YXRzLmFjdGl2ZSA8IHNlbGYucnEubnVtYmVyX3Rhc2tzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubmV4dF9idWlsZGFibGVfdGFzaygpCisKKyAgICBkZWYgbmV3YnVpbGFibGUoc2VsZiwgdGFzayk6CisgICAgICAgIHNlbGYuYnVpbGRhYmxlLmFwcGVuZCh0YXNrKQorCitjbGFzcyBSdW5RdWV1ZVNjaGVkdWxlclNwZWVkKFJ1blF1ZXVlU2NoZWR1bGVyKToKKyAgICAiIiIKKyAgICBBIHNjaGVkdWxlciBvcHRpbWlzZWQgZm9yIHNwZWVkLiBUaGUgcHJpb3JpdHkgbWFwIGlzIHNvcnRlZCBieSB0YXNrIHdlaWdodCwKKyAgICBoZWF2aWVyIHdlaWdodGVkIHRhc2tzICh0YXNrcyBuZWVkZWQgYnkgdGhlIG1vc3Qgb3RoZXIgdGFza3MpIGFyZSBydW4gZmlyc3QuCisgICAgIiIiCisgICAgbmFtZSA9ICJzcGVlZCIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBydW5xdWV1ZSwgcnFkYXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBwcmlvcml0eSBtYXAgaXMgc29ydGVkIGJ5IHRhc2sgd2VpZ2h0LgorICAgICAgICAiIiIKKyAgICAgICAgUnVuUXVldWVTY2hlZHVsZXIuX19pbml0X18oc2VsZiwgcnVucXVldWUsIHJxZGF0YSkKKworICAgICAgICBzb3J0d2VpZ2h0ID0gc29ydGVkKGNvcHkuZGVlcGNvcHkoc2VsZi5ycWRhdGEucnVucV93ZWlnaHQpKQorICAgICAgICBjb3B5d2VpZ2h0ID0gY29weS5kZWVwY29weShzZWxmLnJxZGF0YS5ydW5xX3dlaWdodCkKKyAgICAgICAgc2VsZi5wcmlvX21hcCA9IFtdCisKKyAgICAgICAgZm9yIHdlaWdodCBpbiBzb3J0d2VpZ2h0OgorICAgICAgICAgICAgaWR4ID0gY29weXdlaWdodC5pbmRleCh3ZWlnaHQpCisgICAgICAgICAgICBzZWxmLnByaW9fbWFwLmFwcGVuZChpZHgpCisgICAgICAgICAgICBjb3B5d2VpZ2h0W2lkeF0gPSAtMQorCisgICAgICAgIHNlbGYucHJpb19tYXAucmV2ZXJzZSgpCisKK2NsYXNzIFJ1blF1ZXVlU2NoZWR1bGVyQ29tcGxldGlvbihSdW5RdWV1ZVNjaGVkdWxlclNwZWVkKToKKyAgICAiIiIKKyAgICBBIHNjaGVkdWxlciBvcHRpbWlzZWQgdG8gY29tcGxldGUgLmJiIGZpbGVzIGFyZSBxdWlja2x5IGFzIHBvc3NpYmxlLiBUaGUKKyAgICBwcmlvcml0eSBtYXAgaXMgc29ydGVkIGJ5IHRhc2sgd2VpZ2h0LCBidXQgdGhlbiByZW9yZGVyZWQgc28gb25jZSBhIGdpdmVuCisgICAgLmJiIGZpbGUgc3RhcnRzIHRvIGJ1aWxkLCBpdCdzIGNvbXBsZXRlZCBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLiBUaGlzIHdvcmtzCisgICAgd2VsbCB3aGVyZSBkaXNrIHNwYWNlIGlzIGF0IGEgcHJlbWl1bSBhbmQgY2xhc3NlcyBsaWtlIE9FJ3Mgcm1fd29yayBhcmUgaW4KKyAgICBmb3JjZS4KKyAgICAiIiIKKyAgICBuYW1lID0gImNvbXBsZXRpb24iCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcnVucXVldWUsIHJxZGF0YSk6CisgICAgICAgIFJ1blF1ZXVlU2NoZWR1bGVyU3BlZWQuX19pbml0X18oc2VsZiwgcnVucXVldWUsIHJxZGF0YSkKKworICAgICAgICAjRklYTUUgLSB3aGlsc3QgdGhpcyBncm91cHMgYWxsIGZuaWRzIHRvZ2V0aGVyIGl0IGRvZXMgbm90IHJlb3JkZXIgdGhlCisgICAgICAgICNmbmlkIGdyb3VwcyBvcHRpbWFsbHkuCisKKyAgICAgICAgYmFzZW1hcCA9IGNvcHkuZGVlcGNvcHkoc2VsZi5wcmlvX21hcCkKKyAgICAgICAgc2VsZi5wcmlvX21hcCA9IFtdCisgICAgICAgIHdoaWxlIChsZW4oYmFzZW1hcCkgPiAwKToKKyAgICAgICAgICAgIGVudHJ5ID0gYmFzZW1hcC5wb3AoMCkKKyAgICAgICAgICAgIHNlbGYucHJpb19tYXAuYXBwZW5kKGVudHJ5KQorICAgICAgICAgICAgZm5pZCA9IHNlbGYucnFkYXRhLnJ1bnFfZm5pZFtlbnRyeV0KKyAgICAgICAgICAgIHRvZGVsID0gW10KKyAgICAgICAgICAgIGZvciBlbnRyeSBpbiBiYXNlbWFwOgorICAgICAgICAgICAgICAgIGVudHJ5X2ZuaWQgPSBzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbZW50cnldCisgICAgICAgICAgICAgICAgaWYgZW50cnlfZm5pZCA9PSBmbmlkOgorICAgICAgICAgICAgICAgICAgICB0b2RlbC5hcHBlbmQoYmFzZW1hcC5pbmRleChlbnRyeSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucHJpb19tYXAuYXBwZW5kKGVudHJ5KQorICAgICAgICAgICAgdG9kZWwucmV2ZXJzZSgpCisgICAgICAgICAgICBmb3IgaWR4IGluIHRvZGVsOgorICAgICAgICAgICAgICAgIGRlbCBiYXNlbWFwW2lkeF0KKworY2xhc3MgUnVuUXVldWVEYXRhOgorICAgICIiIgorICAgIEJpdEJha2UgUnVuIFF1ZXVlIGltcGxlbWVudGF0aW9uCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJxLCBjb29rZXIsIGNmZ0RhdGEsIGRhdGFDYWNoZSwgdGFza0RhdGEsIHRhcmdldHMpOgorICAgICAgICBzZWxmLmNvb2tlciA9IGNvb2tlcgorICAgICAgICBzZWxmLmRhdGFDYWNoZSA9IGRhdGFDYWNoZQorICAgICAgICBzZWxmLnRhc2tEYXRhID0gdGFza0RhdGEKKyAgICAgICAgc2VsZi50YXJnZXRzID0gdGFyZ2V0cworICAgICAgICBzZWxmLnJxID0gcnEKKyAgICAgICAgc2VsZi53YXJuX211bHRpX2JiID0gRmFsc2UKKworICAgICAgICBzZWxmLnN0YW1wd2hpdGVsaXN0ID0gY2ZnRGF0YS5nZXRWYXIoIkJCX1NUQU1QX1dISVRFTElTVCIsIFRydWUpIG9yICIiCisgICAgICAgIHNlbGYubXVsdGlfcHJvdmlkZXJfd2hpdGVsaXN0ID0gKGNmZ0RhdGEuZ2V0VmFyKCJNVUxUSV9QUk9WSURFUl9XSElURUxJU1QiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorCisgICAgICAgIHNlbGYucmVzZXQoKQorCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBzZWxmLnJ1bnFfZm5pZCA9IFtdCisgICAgICAgIHNlbGYucnVucV90YXNrID0gW10KKyAgICAgICAgc2VsZi5ydW5xX2RlcGVuZHMgPSBbXQorICAgICAgICBzZWxmLnJ1bnFfcmV2ZGVwcyA9IFtdCisgICAgICAgIHNlbGYucnVucV9oYXNoID0gW10KKworICAgIGRlZiBydW5xX2RlcGVuZHNfbmFtZXMoc2VsZiwgaWRzKToKKyAgICAgICAgaW1wb3J0IHJlCisgICAgICAgIHJldCA9IFtdCisgICAgICAgIGZvciBpZCBpbiBzZWxmLnJ1bnFfZGVwZW5kc1tpZHNdOgorICAgICAgICAgICAgbmFtID0gb3MucGF0aC5iYXNlbmFtZShzZWxmLmdldF91c2VyX2lkc3RyaW5nKGlkKSkKKyAgICAgICAgICAgIG5hbSA9IHJlLnN1YigiX1teLF0qLCIsICIsIiwgbmFtKQorICAgICAgICAgICAgcmV0LmV4dGVuZChbbmFtXSkKKyAgICAgICAgcmV0dXJuIHJldAorCisgICAgZGVmIGdldF90YXNrX25hbWUoc2VsZiwgdGFzayk6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bnFfdGFza1t0YXNrXQorCisgICAgZGVmIGdldF90YXNrX2ZpbGUoc2VsZiwgdGFzayk6CisgICAgICAgIHJldHVybiBzZWxmLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnVucV9mbmlkW3Rhc2tdXQorCisgICAgZGVmIGdldF90YXNrX2hhc2goc2VsZiwgdGFzayk6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bnFfaGFzaFt0YXNrXQorCisgICAgZGVmIGdldF91c2VyX2lkc3RyaW5nKHNlbGYsIHRhc2ssIHRhc2tfbmFtZV9zdWZmaXggPSAiIik6CisgICAgICAgIGZuID0gc2VsZi50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJ1bnFfZm5pZFt0YXNrXV0KKyAgICAgICAgdGFza25hbWUgPSBzZWxmLnJ1bnFfdGFza1t0YXNrXSArIHRhc2tfbmFtZV9zdWZmaXgKKyAgICAgICAgcmV0dXJuICIlcywgJXMiICUgKGZuLCB0YXNrbmFtZSkKKworICAgIGRlZiBnZXRfdGFza19pZChzZWxmLCBmbmlkLCB0YXNrbmFtZSk6CisgICAgICAgIGZvciBsaXN0aWQgaW4geHJhbmdlKGxlbihzZWxmLnJ1bnFfZm5pZCkpOgorICAgICAgICAgICAgaWYgc2VsZi5ydW5xX2ZuaWRbbGlzdGlkXSA9PSBmbmlkIGFuZCBzZWxmLnJ1bnFfdGFza1tsaXN0aWRdID09IHRhc2tuYW1lOgorICAgICAgICAgICAgICAgIHJldHVybiBsaXN0aWQKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBjaXJjdWxhcl9kZXBjaGFpbnNfaGFuZGxlcihzZWxmLCB0YXNrcyk6CisgICAgICAgICIiIgorICAgICAgICBTb21lIHRhc2tzIGFyZW4ndCBidWlsZGFibGUsIGxpa2VseSBkdWUgdG8gY2lyY3VsYXIgZGVwZW5kZW5jeSBpc3N1ZXMuCisgICAgICAgIElkZW50aWZ5IHRoZSBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYW5kIHByaW50IHRoZW0gaW4gYSB1c2VyIHJlYWRhYmxlIGZvcm1hdC4KKyAgICAgICAgIiIiCisgICAgICAgIGZyb20gY29weSBpbXBvcnQgZGVlcGNvcHkKKworICAgICAgICB2YWxpZF9jaGFpbnMgPSBbXQorICAgICAgICBleHBsb3JlZF9kZXBzID0ge30KKyAgICAgICAgbXNncyA9IFtdCisKKyAgICAgICAgZGVmIGNoYWluX3Jlb3JkZXIoY2hhaW4pOgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBSZW9yZGVyIGEgZGVwZW5kZW5jeSBjaGFpbiBzbyB0aGUgbG93ZXN0IHRhc2sgaWQgaXMgZmlyc3QKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgbG93ZXN0ID0gMAorICAgICAgICAgICAgbmV3X2NoYWluID0gW10KKyAgICAgICAgICAgIGZvciBlbnRyeSBpbiB4cmFuZ2UobGVuKGNoYWluKSk6CisgICAgICAgICAgICAgICAgaWYgY2hhaW5bZW50cnldIDwgY2hhaW5bbG93ZXN0XToKKyAgICAgICAgICAgICAgICAgICAgbG93ZXN0ID0gZW50cnkKKyAgICAgICAgICAgIG5ld19jaGFpbi5leHRlbmQoY2hhaW5bbG93ZXN0Ol0pCisgICAgICAgICAgICBuZXdfY2hhaW4uZXh0ZW5kKGNoYWluWzpsb3dlc3RdKQorICAgICAgICAgICAgcmV0dXJuIG5ld19jaGFpbgorCisgICAgICAgIGRlZiBjaGFpbl9jb21wYXJlX2VxdWFsKGNoYWluMSwgY2hhaW4yKToKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgQ29tcGFyZSB0d28gZGVwZW5kZW5jeSBjaGFpbnMgYW5kIHNlZSBpZiB0aGV5J3JlIHRoZSBzYW1lCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGlmIGxlbihjaGFpbjEpICE9IGxlbihjaGFpbjIpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZm9yIGluZGV4IGluIHhyYW5nZShsZW4oY2hhaW4xKSk6CisgICAgICAgICAgICAgICAgaWYgY2hhaW4xW2luZGV4XSAhPSBjaGFpbjJbaW5kZXhdOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgZGVmIGNoYWluX2FycmF5X2NvbnRhaW5zKGNoYWluLCBjaGFpbl9hcnJheSk6CisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIFJldHVybiBUcnVlIGlmIGNoYWluX2FycmF5IGNvbnRhaW5zIGNoYWluCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGZvciBjaCBpbiBjaGFpbl9hcnJheToKKyAgICAgICAgICAgICAgICBpZiBjaGFpbl9jb21wYXJlX2VxdWFsKGNoLCBjaGFpbik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBkZWYgZmluZF9jaGFpbnModGFza2lkLCBwcmV2X2NoYWluKToKKyAgICAgICAgICAgIHByZXZfY2hhaW4uYXBwZW5kKHRhc2tpZCkKKyAgICAgICAgICAgIHRvdGFsX2RlcHMgPSBbXQorICAgICAgICAgICAgdG90YWxfZGVwcy5leHRlbmQoc2VsZi5ydW5xX3JldmRlcHNbdGFza2lkXSkKKyAgICAgICAgICAgIGZvciByZXZkZXAgaW4gc2VsZi5ydW5xX3JldmRlcHNbdGFza2lkXToKKyAgICAgICAgICAgICAgICBpZiByZXZkZXAgaW4gcHJldl9jaGFpbjoKKyAgICAgICAgICAgICAgICAgICAgaWR4ID0gcHJldl9jaGFpbi5pbmRleChyZXZkZXApCisgICAgICAgICAgICAgICAgICAgICMgVG8gcHJldmVudCBkdXBsaWNhdGVzLCByZW9yZGVyIHRoZSBjaGFpbiB0byBzdGFydCB3aXRoIHRoZSBsb3dlc3QgdGFza2lkCisgICAgICAgICAgICAgICAgICAgICMgYW5kIHNlYXJjaCB0aHJvdWdoIGFuIGFycmF5IG9mIHRob3NlIHdlJ3ZlIGFscmVhZHkgcHJpbnRlZAorICAgICAgICAgICAgICAgICAgICBjaGFpbiA9IHByZXZfY2hhaW5baWR4Ol0KKyAgICAgICAgICAgICAgICAgICAgbmV3X2NoYWluID0gY2hhaW5fcmVvcmRlcihjaGFpbikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGNoYWluX2FycmF5X2NvbnRhaW5zKG5ld19jaGFpbiwgdmFsaWRfY2hhaW5zKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkX2NoYWlucy5hcHBlbmQobmV3X2NoYWluKQorICAgICAgICAgICAgICAgICAgICAgICAgbXNncy5hcHBlbmQoIkRlcGVuZGVuY3kgbG9vcCAjJWQgZm91bmQ6XG4iICUgbGVuKHZhbGlkX2NoYWlucykpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZGVwIGluIG5ld19jaGFpbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dzLmFwcGVuZCgiICBUYXNrICVzICglcykgKGRlcGVuZGVudCBUYXNrcyAlcylcbiIgJSAoZGVwLCBzZWxmLmdldF91c2VyX2lkc3RyaW5nKGRlcCksIHNlbGYucnVucV9kZXBlbmRzX25hbWVzKGRlcCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgbXNncy5hcHBlbmQoIlxuIikKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHZhbGlkX2NoYWlucykgPiAxMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZ3MuYXBwZW5kKCJBYm9ydGVkIGRlcGVuZGVuY3kgbG9vcHMgc2VhcmNoIGFmdGVyIDEwIG1hdGNoZXMuXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1zZ3MKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzY2FuID0gRmFsc2UKKyAgICAgICAgICAgICAgICBpZiByZXZkZXAgbm90IGluIGV4cGxvcmVkX2RlcHM6CisgICAgICAgICAgICAgICAgICAgIHNjYW4gPSBUcnVlCisgICAgICAgICAgICAgICAgZWxpZiByZXZkZXAgaW4gZXhwbG9yZWRfZGVwc1tyZXZkZXBdOgorICAgICAgICAgICAgICAgICAgICBzY2FuID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gcHJldl9jaGFpbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRlcCBpbiBleHBsb3JlZF9kZXBzW3JldmRlcF06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbiA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBzY2FuOgorICAgICAgICAgICAgICAgICAgICBmaW5kX2NoYWlucyhyZXZkZXAsIGNvcHkuZGVlcGNvcHkocHJldl9jaGFpbikpCisgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBleHBsb3JlZF9kZXBzW3JldmRlcF06CisgICAgICAgICAgICAgICAgICAgIGlmIGRlcCBub3QgaW4gdG90YWxfZGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsX2RlcHMuYXBwZW5kKGRlcCkKKworICAgICAgICAgICAgZXhwbG9yZWRfZGVwc1t0YXNraWRdID0gdG90YWxfZGVwcworCisgICAgICAgIGZvciB0YXNrIGluIHRhc2tzOgorICAgICAgICAgICAgZmluZF9jaGFpbnModGFzaywgW10pCisKKyAgICAgICAgcmV0dXJuIG1zZ3MKKworICAgIGRlZiBjYWxjdWxhdGVfdGFza193ZWlnaHRzKHNlbGYsIGVuZHBvaW50cyk6CisgICAgICAgICIiIgorICAgICAgICBDYWxjdWxhdGUgYSBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSAid2VpZ2h0IiBvZiBlYWNoIHRhc2suIEhlYXZpZXIgd2VpZ2h0ZWQgdGFza3MKKyAgICAgICAgaGF2ZSBtb3JlIGRlcGVuZGVuY2llcyBhbmQgaGVuY2Ugc2hvdWxkIGJlIGV4ZWN1dGVkIHNvb25lciBmb3IgbWF4aW11bSBzcGVlZC4KKworICAgICAgICBUaGlzIGZ1bmN0aW9uIGFsc28gc2FuaXR5IGNoZWNrcyB0aGUgdGFzayBsaXN0IGZpbmRpbmcgdGFza3MgdGhhdCBhcmUgbm90CisgICAgICAgIHBvc3NpYmxlIHRvIGV4ZWN1dGUgZHVlIHRvIGNpcmN1bGFyIGRlcGVuZGVuY2llcy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgbnVtVGFza3MgPSBsZW4oc2VsZi5ydW5xX2ZuaWQpCisgICAgICAgIHdlaWdodCA9IFtdCisgICAgICAgIGRlcHNfbGVmdCA9IFtdCisgICAgICAgIHRhc2tfZG9uZSA9IFtdCisKKyAgICAgICAgZm9yIGxpc3RpZCBpbiB4cmFuZ2UobnVtVGFza3MpOgorICAgICAgICAgICAgdGFza19kb25lLmFwcGVuZChGYWxzZSkKKyAgICAgICAgICAgIHdlaWdodC5hcHBlbmQoMSkKKyAgICAgICAgICAgIGRlcHNfbGVmdC5hcHBlbmQobGVuKHNlbGYucnVucV9yZXZkZXBzW2xpc3RpZF0pKQorCisgICAgICAgIGZvciBsaXN0aWQgaW4gZW5kcG9pbnRzOgorICAgICAgICAgICAgd2VpZ2h0W2xpc3RpZF0gPSAxMAorICAgICAgICAgICAgdGFza19kb25lW2xpc3RpZF0gPSBUcnVlCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIG5leHRfcG9pbnRzID0gW10KKyAgICAgICAgICAgIGZvciBsaXN0aWQgaW4gZW5kcG9pbnRzOgorICAgICAgICAgICAgICAgIGZvciByZXZkZXAgaW4gc2VsZi5ydW5xX2RlcGVuZHNbbGlzdGlkXToKKyAgICAgICAgICAgICAgICAgICAgd2VpZ2h0W3JldmRlcF0gPSB3ZWlnaHRbcmV2ZGVwXSArIHdlaWdodFtsaXN0aWRdCisgICAgICAgICAgICAgICAgICAgIGRlcHNfbGVmdFtyZXZkZXBdID0gZGVwc19sZWZ0W3JldmRlcF0gLSAxCisgICAgICAgICAgICAgICAgICAgIGlmIGRlcHNfbGVmdFtyZXZkZXBdID09IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3BvaW50cy5hcHBlbmQocmV2ZGVwKQorICAgICAgICAgICAgICAgICAgICAgICAgdGFza19kb25lW3JldmRlcF0gPSBUcnVlCisgICAgICAgICAgICBlbmRwb2ludHMgPSBuZXh0X3BvaW50cworICAgICAgICAgICAgaWYgbGVuKG5leHRfcG9pbnRzKSA9PSAwOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgIyBDaXJjdWxhciBkZXBlbmRlbmN5IHNhbml0eSBjaGVjaworICAgICAgICBwcm9ibGVtX3Rhc2tzID0gW10KKyAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKG51bVRhc2tzKToKKyAgICAgICAgICAgIGlmIHRhc2tfZG9uZVt0YXNrXSBpcyBGYWxzZSBvciBkZXBzX2xlZnRbdGFza10gIT0gMDoKKyAgICAgICAgICAgICAgICBwcm9ibGVtX3Rhc2tzLmFwcGVuZCh0YXNrKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiVGFzayAlcyAoJXMpIGlzIG5vdCBidWlsZGFibGUiLCB0YXNrLCBzZWxmLmdldF91c2VyX2lkc3RyaW5nKHRhc2spKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiKENvbXBsZXRlIG1hcmtlciB3YXMgJXMgYW5kIHRoZSByZW1haW5pbmcgZGVwZW5kZW5jeSBjb3VudCB3YXMgJXMpXG4iLCB0YXNrX2RvbmVbdGFza10sIGRlcHNfbGVmdFt0YXNrXSkKKworICAgICAgICBpZiBwcm9ibGVtX3Rhc2tzOgorICAgICAgICAgICAgbWVzc2FnZSA9ICJVbmJ1aWxkYWJsZSB0YXNrcyB3ZXJlIGZvdW5kLlxuIgorICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UgKyAiVGhlc2UgYXJlIHVzdWFsbHkgY2F1c2VkIGJ5IGNpcmN1bGFyIGRlcGVuZGVuY2llcyBhbmQgYW55IGNpcmN1bGFyIGRlcGVuZGVuY3kgY2hhaW5zIGZvdW5kIHdpbGwgYmUgcHJpbnRlZCBiZWxvdy4gSW5jcmVhc2UgdGhlIGRlYnVnIGxldmVsIHRvIHNlZSBhIGxpc3Qgb2YgdW5idWlsZGFibGUgdGFza3MuXG5cbiIKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlICsgIklkZW50aWZ5aW5nIGRlcGVuZGVuY3kgbG9vcHMgKHRoaXMgbWF5IHRha2UgYSBzaG9ydCB3aGlsZSkuLi5cbiIKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihtZXNzYWdlKQorCisgICAgICAgICAgICBtc2dzID0gc2VsZi5jaXJjdWxhcl9kZXBjaGFpbnNfaGFuZGxlcihwcm9ibGVtX3Rhc2tzKQorCisgICAgICAgICAgICBtZXNzYWdlID0gIlxuIgorICAgICAgICAgICAgZm9yIG1zZyBpbiBtc2dzOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlICsgbXNnCisgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlJ1blF1ZXVlIiwgbWVzc2FnZSkKKworICAgICAgICByZXR1cm4gd2VpZ2h0CisKKyAgICBkZWYgcHJlcGFyZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFR1cm4gYSBzZXQgb2YgdGFza0RhdGEgaW50byBhIFJ1blF1ZXVlIGFuZCBjb21wdXRlIGRhdGEgbmVlZGVkCisgICAgICAgIHRvIG9wdGltaXNlIHRoZSBleGVjdXRpb24gb3JkZXIuCisgICAgICAgICIiIgorCisgICAgICAgIHJ1bnFfYnVpbGQgPSBbXQorICAgICAgICByZWN1cnNpdmV0YXNrcyA9IHt9CisgICAgICAgIHJlY3Vyc2l2ZWl0YXNrcyA9IHt9CisgICAgICAgIHJlY3Vyc2l2ZXRhc2tzc2VsZnJlZiA9IHNldCgpCisKKyAgICAgICAgdGFza0RhdGEgPSBzZWxmLnRhc2tEYXRhCisKKyAgICAgICAgaWYgbGVuKHRhc2tEYXRhLnRhc2tzX25hbWUpID09IDA6CisgICAgICAgICAgICAjIE5vdGhpbmcgdG8gZG8KKyAgICAgICAgICAgIHJldHVybiAwCisKKyAgICAgICAgbG9nZ2VyLmluZm8oIlByZXBhcmluZyBSdW5RdWV1ZSIpCisKKyAgICAgICAgIyBTdGVwIEEgLSBXb3JrIG91dCBhIGxpc3Qgb2YgdGFza3MgdG8gcnVuCisgICAgICAgICMKKyAgICAgICAgIyBUYXNrZGF0YSBnaXZlcyB1cyBhIGxpc3Qgb2YgcG9zc2libGUgcHJvdmlkZXJzIGZvciBldmVyeSBidWlsZCBhbmQgcnVuCisgICAgICAgICMgdGFyZ2V0IG9yZGVyZWQgYnkgcHJpb3JpdHkuIEl0IGFsc28gZ2l2ZXMgaW5mb3JtYXRpb24gb24gZWFjaCBvZiB0aG9zZQorICAgICAgICAjIHByb3ZpZGVycy4KKyAgICAgICAgIworICAgICAgICAjIFRvIGNyZWF0ZSB0aGUgYWN0dWFsIGxpc3Qgb2YgdGFza3MgdG8gZXhlY3V0ZSB3ZSBmaXggdGhlIGxpc3Qgb2YKKyAgICAgICAgIyBwcm92aWRlcnMgYW5kIHRoZW4gcmVzb2x2ZSB0aGUgZGVwZW5kZW5jaWVzIGludG8gdGFzayBJRHMuIFRoaXMKKyAgICAgICAgIyBwcm9jZXNzIGlzIHJlcGVhdGVkIGZvciBlYWNoIHR5cGUgb2YgZGVwZW5kZW5jeSAodGRlcGVuZHMsIGRlcHRhc2ssCisgICAgICAgICMgcmRlcHRhc3QsIHJlY3JkZXB0YXNrLCBpZGVwZW5kcykuCisKKyAgICAgICAgZGVmIGFkZF9idWlsZF9kZXBlbmRlbmNpZXMoZGVwaWRzLCB0YXNrbmFtZXMsIGRlcGVuZHMpOgorICAgICAgICAgICAgZm9yIGRlcGlkIGluIGRlcGlkczoKKyAgICAgICAgICAgICAgICAjIFdvbid0IGJlIGluIGJ1aWxkX3RhcmdldHMgaWYgQVNTVU1FX1BST1ZJREVECisgICAgICAgICAgICAgICAgaWYgZGVwaWQgbm90IGluIHRhc2tEYXRhLmJ1aWxkX3RhcmdldHM6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZGVwZGF0YSA9IHRhc2tEYXRhLmJ1aWxkX3RhcmdldHNbZGVwaWRdWzBdCisgICAgICAgICAgICAgICAgaWYgZGVwZGF0YSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGZvciB0YXNrbmFtZSBpbiB0YXNrbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIHRhc2tpZCA9IHRhc2tEYXRhLmdldHRhc2tfaWRfZnJvbWZuaWQoZGVwZGF0YSwgdGFza25hbWUpCisgICAgICAgICAgICAgICAgICAgIGlmIHRhc2tpZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMuYWRkKHRhc2tpZCkKKworICAgICAgICBkZWYgYWRkX3J1bnRpbWVfZGVwZW5kZW5jaWVzKGRlcGlkcywgdGFza25hbWVzLCBkZXBlbmRzKToKKyAgICAgICAgICAgIGZvciBkZXBpZCBpbiBkZXBpZHM6CisgICAgICAgICAgICAgICAgaWYgZGVwaWQgbm90IGluIHRhc2tEYXRhLnJ1bl90YXJnZXRzOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGRlcGRhdGEgPSB0YXNrRGF0YS5ydW5fdGFyZ2V0c1tkZXBpZF1bMF0KKyAgICAgICAgICAgICAgICBpZiBkZXBkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZm9yIHRhc2tuYW1lIGluIHRhc2tuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgdGFza2lkID0gdGFza0RhdGEuZ2V0dGFza19pZF9mcm9tZm5pZChkZXBkYXRhLCB0YXNrbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGFza2lkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kcy5hZGQodGFza2lkKQorCisgICAgICAgIGRlZiBhZGRfcmVzb2x2ZWRfZGVwZW5kZW5jaWVzKGRlcGlkcywgdGFza25hbWVzLCBkZXBlbmRzKToKKyAgICAgICAgICAgIGZvciBkZXBpZCBpbiBkZXBpZHM6CisgICAgICAgICAgICAgICAgZm9yIHRhc2tuYW1lIGluIHRhc2tuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgdGFza2lkID0gdGFza0RhdGEuZ2V0dGFza19pZF9mcm9tZm5pZChkZXBpZCwgdGFza25hbWUpCisgICAgICAgICAgICAgICAgICAgIGlmIHRhc2tpZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMuYWRkKHRhc2tpZCkKKworICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHRhc2tEYXRhLnRhc2tzX25hbWUpKToKKyAgICAgICAgICAgIGRlcGVuZHMgPSBzZXQoKQorICAgICAgICAgICAgZm5pZCA9IHRhc2tEYXRhLnRhc2tzX2ZuaWRbdGFza10KKyAgICAgICAgICAgIGZuID0gdGFza0RhdGEuZm5faW5kZXhbZm5pZF0KKyAgICAgICAgICAgIHRhc2tfZGVwcyA9IHNlbGYuZGF0YUNhY2hlLnRhc2tfZGVwc1tmbl0KKworICAgICAgICAgICAgI2xvZ2dlci5kZWJ1ZygyLCAiUHJvY2Vzc2luZyAlczolcyIsIGZuLCB0YXNrRGF0YS50YXNrc19uYW1lW3Rhc2tdKQorCisgICAgICAgICAgICBpZiBmbmlkIG5vdCBpbiB0YXNrRGF0YS5mYWlsZWRfZm5pZHM6CisKKyAgICAgICAgICAgICAgICAjIFJlc29sdmUgdGFzayBpbnRlcm5hbCBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBlLmcuIGFkZHRhc2sgYmVmb3JlIFggYWZ0ZXIgWQorICAgICAgICAgICAgICAgIGRlcGVuZHMgPSBzZXQodGFza0RhdGEudGFza3NfdGRlcGVuZHNbdGFza10pCisKKyAgICAgICAgICAgICAgICAjIFJlc29sdmUgJ2RlcHRhc2snIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIGUuZy4gZG9fc29tZXRhc2tbZGVwdGFza10gPSAiZG9fc29tZW90aGVydGFzayIKKyAgICAgICAgICAgICAgICAjIChtYWtlcyBzdXJlIHNvbWV0YXNrIHJ1bnMgYWZ0ZXIgc29tZW90aGVydGFzayBvZiBhbGwgREVQRU5EUykKKyAgICAgICAgICAgICAgICBpZiAnZGVwdGFzaycgaW4gdGFza19kZXBzIGFuZCB0YXNrRGF0YS50YXNrc19uYW1lW3Rhc2tdIGluIHRhc2tfZGVwc1snZGVwdGFzayddOgorICAgICAgICAgICAgICAgICAgICB0YXNrbmFtZXMgPSB0YXNrX2RlcHNbJ2RlcHRhc2snXVt0YXNrRGF0YS50YXNrc19uYW1lW3Rhc2tdXS5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgIGFkZF9idWlsZF9kZXBlbmRlbmNpZXModGFza0RhdGEuZGVwaWRzW2ZuaWRdLCB0YXNrbmFtZXMsIGRlcGVuZHMpCisKKyAgICAgICAgICAgICAgICAjIFJlc29sdmUgJ3JkZXB0YXNrJyBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBlLmcuIGRvX3NvbWV0YXNrW3JkZXB0YXNrXSA9ICJkb19zb21lb3RoZXJ0YXNrIgorICAgICAgICAgICAgICAgICMgKG1ha2VzIHN1cmUgc29tZXRhc2sgcnVucyBhZnRlciBzb21lb3RoZXJ0YXNrIG9mIGFsbCBSREVQRU5EUykKKyAgICAgICAgICAgICAgICBpZiAncmRlcHRhc2snIGluIHRhc2tfZGVwcyBhbmQgdGFza0RhdGEudGFza3NfbmFtZVt0YXNrXSBpbiB0YXNrX2RlcHNbJ3JkZXB0YXNrJ106CisgICAgICAgICAgICAgICAgICAgIHRhc2tuYW1lcyA9IHRhc2tfZGVwc1sncmRlcHRhc2snXVt0YXNrRGF0YS50YXNrc19uYW1lW3Rhc2tdXS5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgIGFkZF9ydW50aW1lX2RlcGVuZGVuY2llcyh0YXNrRGF0YS5yZGVwaWRzW2ZuaWRdLCB0YXNrbmFtZXMsIGRlcGVuZHMpCisKKyAgICAgICAgICAgICAgICAjIFJlc29sdmUgaW50ZXItdGFzayBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBlLmcuIGRvX3NvbWV0YXNrW2RlcGVuZHNdID0gInRhcmdldG5hbWU6ZG9fc29tZW90aGVydGFzayIKKyAgICAgICAgICAgICAgICAjIChtYWtlcyBzdXJlIHNvbWV0YXNrIHJ1bnMgYWZ0ZXIgdGFyZ2V0bmFtZSdzIHNvbWVvdGhlcnRhc2spCisgICAgICAgICAgICAgICAgaWRlcGVuZHMgPSB0YXNrRGF0YS50YXNrc19pZGVwZW5kc1t0YXNrXQorICAgICAgICAgICAgICAgIGZvciAoZGVwaWQsIGlkZXBlbmR0YXNrKSBpbiBpZGVwZW5kczoKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwaWQgaW4gdGFza0RhdGEuYnVpbGRfdGFyZ2V0cyBhbmQgbm90IGRlcGlkIGluIHRhc2tEYXRhLmZhaWxlZF9kZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBXb24ndCBiZSBpbiBidWlsZF90YXJnZXRzIGlmIEFTU1VNRV9QUk9WSURFRAorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZGF0YSA9IHRhc2tEYXRhLmJ1aWxkX3RhcmdldHNbZGVwaWRdWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkZXBkYXRhIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tpZCA9IHRhc2tEYXRhLmdldHRhc2tfaWRfZnJvbWZuaWQoZGVwZGF0YSwgaWRlcGVuZHRhc2spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGFza2lkIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLm1zZy5mYXRhbCgiUnVuUXVldWUiLCAiVGFzayAlcyBpbiAlcyBkZXBlbmRzIHVwb24gbm9uLWV4aXN0ZW50IHRhc2sgJXMgaW4gJXMiICUgKHRhc2tEYXRhLnRhc2tzX25hbWVbdGFza10sIGZuLCBpZGVwZW5kdGFzaywgdGFza0RhdGEuZm5faW5kZXhbZGVwZGF0YV0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMuYWRkKHRhc2tpZCkKKyAgICAgICAgICAgICAgICBpcmRlcGVuZHMgPSB0YXNrRGF0YS50YXNrc19pcmRlcGVuZHNbdGFza10KKyAgICAgICAgICAgICAgICBmb3IgKGRlcGlkLCBpZGVwZW5kdGFzaykgaW4gaXJkZXBlbmRzOgorICAgICAgICAgICAgICAgICAgICBpZiBkZXBpZCBpbiB0YXNrRGF0YS5ydW5fdGFyZ2V0czoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgV29uJ3QgYmUgaW4gcnVuX3RhcmdldHMgaWYgQVNTVU1FX1BST1ZJREVECisgICAgICAgICAgICAgICAgICAgICAgICBkZXBkYXRhID0gdGFza0RhdGEucnVuX3RhcmdldHNbZGVwaWRdWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkZXBkYXRhIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tpZCA9IHRhc2tEYXRhLmdldHRhc2tfaWRfZnJvbWZuaWQoZGVwZGF0YSwgaWRlcGVuZHRhc2spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGFza2lkIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLm1zZy5mYXRhbCgiUnVuUXVldWUiLCAiVGFzayAlcyBpbiAlcyByZGVwZW5kcyB1cG9uIG5vbi1leGlzdGVudCB0YXNrICVzIGluICVzIiAlICh0YXNrRGF0YS50YXNrc19uYW1lW3Rhc2tdLCBmbiwgaWRlcGVuZHRhc2ssIHRhc2tEYXRhLmZuX2luZGV4W2RlcGRhdGFdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzLmFkZCh0YXNraWQpCisKKyAgICAgICAgICAgICAgICAjIFJlc29sdmUgcmVjdXJzaXZlICdyZWNyZGVwdGFzaycgZGVwZW5kZW5jaWVzIChQYXJ0IEEpCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgZS5nLiBkb19zb21ldGFza1tyZWNyZGVwdGFza10gPSAiZG9fc29tZW90aGVydGFzayIKKyAgICAgICAgICAgICAgICAjIChtYWtlcyBzdXJlIHNvbWV0YXNrIHJ1bnMgYWZ0ZXIgc29tZW90aGVydGFzayBvZiBhbGwgREVQRU5EUywgUkRFUEVORFMgYW5kIGludGVydGFzayBkZXBlbmRlbmNpZXMsIHJlY3Vyc2l2ZWx5KQorICAgICAgICAgICAgICAgICMgV2UgY292ZXIgdGhlIHJlY3Vyc2l2ZSBwYXJ0IG9mIHRoZSBkZXBlbmRlbmNpZXMgYmVsb3cKKyAgICAgICAgICAgICAgICBpZiAncmVjcmRlcHRhc2snIGluIHRhc2tfZGVwcyBhbmQgdGFza0RhdGEudGFza3NfbmFtZVt0YXNrXSBpbiB0YXNrX2RlcHNbJ3JlY3JkZXB0YXNrJ106CisgICAgICAgICAgICAgICAgICAgIHRhc2tuYW1lcyA9IHRhc2tfZGVwc1sncmVjcmRlcHRhc2snXVt0YXNrRGF0YS50YXNrc19uYW1lW3Rhc2tdXS5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZXRhc2tzW3Rhc2tdID0gdGFza25hbWVzCisgICAgICAgICAgICAgICAgICAgIGFkZF9idWlsZF9kZXBlbmRlbmNpZXModGFza0RhdGEuZGVwaWRzW2ZuaWRdLCB0YXNrbmFtZXMsIGRlcGVuZHMpCisgICAgICAgICAgICAgICAgICAgIGFkZF9ydW50aW1lX2RlcGVuZGVuY2llcyh0YXNrRGF0YS5yZGVwaWRzW2ZuaWRdLCB0YXNrbmFtZXMsIGRlcGVuZHMpCisgICAgICAgICAgICAgICAgICAgIGlmIHRhc2tEYXRhLnRhc2tzX25hbWVbdGFza10gaW4gdGFza25hbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzaXZldGFza3NzZWxmcmVmLmFkZCh0YXNrKQorCisgICAgICAgICAgICAgICAgICAgIGlmICdyZWNpZGVwdGFzaycgaW4gdGFza19kZXBzIGFuZCB0YXNrRGF0YS50YXNrc19uYW1lW3Rhc2tdIGluIHRhc2tfZGVwc1sncmVjaWRlcHRhc2snXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZWl0YXNrc1t0YXNrXSA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdCBpbiB0YXNrX2RlcHNbJ3JlY2lkZXB0YXNrJ11bdGFza0RhdGEudGFza3NfbmFtZVt0YXNrXV0uc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdkZXAgPSB0YXNrRGF0YS5nZXR0YXNrX2lkX2Zyb21mbmlkKGZuaWQsIHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzaXZlaXRhc2tzW3Rhc2tdLmFwcGVuZChuZXdkZXApCisKKyAgICAgICAgICAgIHNlbGYucnVucV9mbmlkLmFwcGVuZCh0YXNrRGF0YS50YXNrc19mbmlkW3Rhc2tdKQorICAgICAgICAgICAgc2VsZi5ydW5xX3Rhc2suYXBwZW5kKHRhc2tEYXRhLnRhc2tzX25hbWVbdGFza10pCisgICAgICAgICAgICBzZWxmLnJ1bnFfZGVwZW5kcy5hcHBlbmQoZGVwZW5kcykKKyAgICAgICAgICAgIHNlbGYucnVucV9yZXZkZXBzLmFwcGVuZChzZXQoKSkKKyAgICAgICAgICAgIHNlbGYucnVucV9oYXNoLmFwcGVuZCgiIikKKworICAgICAgICAgICAgcnVucV9idWlsZC5hcHBlbmQoMCkKKworICAgICAgICAjIFJlc29sdmUgcmVjdXJzaXZlICdyZWNyZGVwdGFzaycgZGVwZW5kZW5jaWVzIChQYXJ0IEIpCisgICAgICAgICMKKyAgICAgICAgIyBlLmcuIGRvX3NvbWV0YXNrW3JlY3JkZXB0YXNrXSA9ICJkb19zb21lb3RoZXJ0YXNrIgorICAgICAgICAjIChtYWtlcyBzdXJlIHNvbWV0YXNrIHJ1bnMgYWZ0ZXIgc29tZW90aGVydGFzayBvZiBhbGwgREVQRU5EUywgUkRFUEVORFMgYW5kIGludGVydGFzayBkZXBlbmRlbmNpZXMsIHJlY3Vyc2l2ZWx5KQorICAgICAgICAjIFdlIG5lZWQgdG8gZG8gdGhpcyBzZXBhcmF0ZWx5IHNpbmNlIHdlIG5lZWQgYWxsIG9mIHNlbGYucnVucV9kZXBlbmRzIHRvIGJlIGNvbXBsZXRlIGJlZm9yZSB0aGlzIGlzIHByb2Nlc3NlZAorICAgICAgICBleHRyYWRlcHMgPSB7fQorICAgICAgICBmb3IgdGFzayBpbiByZWN1cnNpdmV0YXNrczoKKyAgICAgICAgICAgIGV4dHJhZGVwc1t0YXNrXSA9IHNldChzZWxmLnJ1bnFfZGVwZW5kc1t0YXNrXSkKKyAgICAgICAgICAgIHRhc2tuYW1lcyA9IHJlY3Vyc2l2ZXRhc2tzW3Rhc2tdCisgICAgICAgICAgICBzZWVuZGVwcyA9IHNldCgpCisgICAgICAgICAgICBzZWVuZm5pZCA9IFtdCisKKyAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV9yZWNkZXBzKHQpOgorICAgICAgICAgICAgICAgIG5ld2RlcHMgPSBzZXQoKQorICAgICAgICAgICAgICAgIGFkZF9yZXNvbHZlZF9kZXBlbmRlbmNpZXMoW3Rhc2tEYXRhLnRhc2tzX2ZuaWRbdF1dLCB0YXNrbmFtZXMsIG5ld2RlcHMpCisgICAgICAgICAgICAgICAgZXh0cmFkZXBzW3Rhc2tdLnVwZGF0ZShuZXdkZXBzKQorICAgICAgICAgICAgICAgIHNlZW5kZXBzLmFkZCh0KQorICAgICAgICAgICAgICAgIG5ld2RlcHMuYWRkKHQpCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gbmV3ZGVwczoKKyAgICAgICAgICAgICAgICAgICAgZm9yIG4gaW4gc2VsZi5ydW5xX2RlcGVuZHNbaV06CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBuIG5vdCBpbiBzZWVuZGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZV9yZWNkZXBzKG4pCisgICAgICAgICAgICBnZW5lcmF0ZV9yZWNkZXBzKHRhc2spCisKKyAgICAgICAgICAgIGlmIHRhc2sgaW4gcmVjdXJzaXZlaXRhc2tzOgorICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gcmVjdXJzaXZlaXRhc2tzW3Rhc2tdOgorICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZV9yZWNkZXBzKGRlcCkKKworICAgICAgICAjIFJlbW92ZSBjaXJjdWxhciByZWZlcmVuY2VzIHNvIHRoYXQgZG9fYVtyZWNyZGVwdGFza10gPSAiZG9fYSBkb19iIiBjYW4gd29yaworICAgICAgICBmb3IgdGFzayBpbiByZWN1cnNpdmV0YXNrczoKKyAgICAgICAgICAgIGV4dHJhZGVwc1t0YXNrXS5kaWZmZXJlbmNlX3VwZGF0ZShyZWN1cnNpdmV0YXNrc3NlbGZyZWYpCisKKyAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbih0YXNrRGF0YS50YXNrc19uYW1lKSk6CisgICAgICAgICAgICAjIEFkZCBpbiBleHRyYSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgIGlmIHRhc2sgaW4gZXh0cmFkZXBzOgorICAgICAgICAgICAgICAgICBzZWxmLnJ1bnFfZGVwZW5kc1t0YXNrXSA9IGV4dHJhZGVwc1t0YXNrXQorICAgICAgICAgICAgIyBSZW1vdmUgYWxsIHNlbGYgcmVmZXJlbmNlcworICAgICAgICAgICAgaWYgdGFzayBpbiBzZWxmLnJ1bnFfZGVwZW5kc1t0YXNrXToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlRhc2sgJXMgKCVzICVzKSBjb250YWlucyBzZWxmIHJlZmVyZW5jZSEgJXMiLCB0YXNrLCB0YXNrRGF0YS5mbl9pbmRleFt0YXNrRGF0YS50YXNrc19mbmlkW3Rhc2tdXSwgdGFza0RhdGEudGFza3NfbmFtZVt0YXNrXSwgc2VsZi5ydW5xX2RlcGVuZHNbdGFza10pCisgICAgICAgICAgICAgICAgc2VsZi5ydW5xX2RlcGVuZHNbdGFza10ucmVtb3ZlKHRhc2spCisKKyAgICAgICAgIyBTdGVwIEIgLSBNYXJrIGFsbCBhY3RpdmUgdGFza3MKKyAgICAgICAgIworICAgICAgICAjIFN0YXJ0IHdpdGggdGhlIHRhc2tzIHdlIHdlcmUgYXNrZWQgdG8gcnVuIGFuZCBtYXJrIGFsbCBkZXBlbmRlbmNpZXMKKyAgICAgICAgIyBhcyBhY3RpdmUgdG9vLiBJZiB0aGUgdGFzayBpcyB0byBiZSAnZm9yY2VkJywgY2xlYXIgaXRzIHN0YW1wLiBPbmNlCisgICAgICAgICMgYWxsIGFjdGl2ZSB0YXNrcyBhcmUgbWFya2VkLCBwcnVuZSB0aGUgb25lcyB3ZSBkb24ndCBuZWVkLgorCisgICAgICAgIGxvZ2dlci52ZXJib3NlKCJNYXJraW5nIEFjdGl2ZSBUYXNrcyIpCisKKyAgICAgICAgZGVmIG1hcmtfYWN0aXZlKGxpc3RpZCwgZGVwdGgpOgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBNYXJrIGFuIGl0ZW0gYXMgYWN0aXZlIGFsb25nIHdpdGggaXRzIGRlcGVuZHMKKyAgICAgICAgICAgIChjYWxscyBpdHNlbGYgcmVjdXJzaXZlbHkpCisgICAgICAgICAgICAiIiIKKworICAgICAgICAgICAgaWYgcnVucV9idWlsZFtsaXN0aWRdID09IDE6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIHJ1bnFfYnVpbGRbbGlzdGlkXSA9IDEKKworICAgICAgICAgICAgZGVwZW5kcyA9IHNlbGYucnVucV9kZXBlbmRzW2xpc3RpZF0KKyAgICAgICAgICAgIGZvciBkZXBlbmQgaW4gZGVwZW5kczoKKyAgICAgICAgICAgICAgICBtYXJrX2FjdGl2ZShkZXBlbmQsIGRlcHRoKzEpCisKKyAgICAgICAgc2VsZi50YXJnZXRfcGFpcnMgPSBbXQorICAgICAgICBmb3IgdGFyZ2V0IGluIHNlbGYudGFyZ2V0czoKKyAgICAgICAgICAgIHRhcmdldGlkID0gdGFza0RhdGEuZ2V0YnVpbGRfaWQodGFyZ2V0WzBdKQorCisgICAgICAgICAgICBpZiB0YXJnZXRpZCBub3QgaW4gdGFza0RhdGEuYnVpbGRfdGFyZ2V0czoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiB0YXJnZXRpZCBpbiB0YXNrRGF0YS5mYWlsZWRfZGVwczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmbmlkID0gdGFza0RhdGEuYnVpbGRfdGFyZ2V0c1t0YXJnZXRpZF1bMF0KKyAgICAgICAgICAgIGZuID0gdGFza0RhdGEuZm5faW5kZXhbZm5pZF0KKyAgICAgICAgICAgIHNlbGYudGFyZ2V0X3BhaXJzLmFwcGVuZCgoZm4sIHRhcmdldFsxXSkpCisKKyAgICAgICAgICAgIGlmIGZuaWQgaW4gdGFza0RhdGEuZmFpbGVkX2ZuaWRzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIHRhcmdldFsxXSBub3QgaW4gdGFza0RhdGEudGFza3NfbG9va3VwW2ZuaWRdOgorICAgICAgICAgICAgICAgIGltcG9ydCBkaWZmbGliCisgICAgICAgICAgICAgICAgY2xvc2VfbWF0Y2hlcyA9IGRpZmZsaWIuZ2V0X2Nsb3NlX21hdGNoZXModGFyZ2V0WzFdLCB0YXNrRGF0YS50YXNrc19sb29rdXBbZm5pZF0sIGN1dG9mZj0wLjcpCisgICAgICAgICAgICAgICAgaWYgY2xvc2VfbWF0Y2hlczoKKyAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSAiLiBDbG9zZSBtYXRjaGVzOlxuICAlcyIgJSAiXG4gICIuam9pbihjbG9zZV9tYXRjaGVzKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gIiIKKyAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlJ1blF1ZXVlIiwgIlRhc2sgJXMgZG9lcyBub3QgZXhpc3QgZm9yIHRhcmdldCAlcyVzIiAlICh0YXJnZXRbMV0sIHRhcmdldFswXSwgZXh0cmEpKQorCisgICAgICAgICAgICBsaXN0aWQgPSB0YXNrRGF0YS50YXNrc19sb29rdXBbZm5pZF1bdGFyZ2V0WzFdXQorCisgICAgICAgICAgICBtYXJrX2FjdGl2ZShsaXN0aWQsIDEpCisKKyAgICAgICAgIyBTdGVwIEMgLSBQcnVuZSBhbGwgaW5hY3RpdmUgdGFza3MKKyAgICAgICAgIworICAgICAgICAjIE9uY2UgYWxsIGFjdGl2ZSB0YXNrcyBhcmUgbWFya2VkLCBwcnVuZSB0aGUgb25lcyB3ZSBkb24ndCBuZWVkLgorCisgICAgICAgIG1hcHMgPSBbXQorICAgICAgICBkZWxjb3VudCA9IDAKKyAgICAgICAgZm9yIGxpc3RpZCBpbiB4cmFuZ2UobGVuKHNlbGYucnVucV9mbmlkKSk6CisgICAgICAgICAgICBpZiBydW5xX2J1aWxkW2xpc3RpZC1kZWxjb3VudF0gPT0gMToKKyAgICAgICAgICAgICAgICBtYXBzLmFwcGVuZChsaXN0aWQtZGVsY291bnQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLnJ1bnFfZm5pZFtsaXN0aWQtZGVsY291bnRdCisgICAgICAgICAgICAgICAgZGVsIHNlbGYucnVucV90YXNrW2xpc3RpZC1kZWxjb3VudF0KKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5ydW5xX2RlcGVuZHNbbGlzdGlkLWRlbGNvdW50XQorICAgICAgICAgICAgICAgIGRlbCBydW5xX2J1aWxkW2xpc3RpZC1kZWxjb3VudF0KKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5ydW5xX3JldmRlcHNbbGlzdGlkLWRlbGNvdW50XQorICAgICAgICAgICAgICAgIGRlbCBzZWxmLnJ1bnFfaGFzaFtsaXN0aWQtZGVsY291bnRdCisgICAgICAgICAgICAgICAgZGVsY291bnQgPSBkZWxjb3VudCArIDEKKyAgICAgICAgICAgICAgICBtYXBzLmFwcGVuZCgtMSkKKworICAgICAgICAjCisgICAgICAgICMgU3RlcCBEIC0gU2FuaXR5IGNoZWNrcyBhbmQgY29tcHV0YXRpb24KKyAgICAgICAgIworCisgICAgICAgICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIHN0aWxsIGhhdmUgdGFza3MgdG8gcnVuCisgICAgICAgIGlmIGxlbihzZWxmLnJ1bnFfZm5pZCkgPT0gMDoKKyAgICAgICAgICAgIGlmIG5vdCB0YXNrRGF0YS5hYm9ydDoKKyAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlJ1blF1ZXVlIiwgIkFsbCBidWlsZGFibGUgdGFza3MgaGF2ZSBiZWVuIHJ1biBidXQgdGhlIGJ1aWxkIGlzIGluY29tcGxldGUgKC0tY29udGludWUgbW9kZSkuIEVycm9ycyBmb3IgdGhlIHRhc2tzIHRoYXQgZmFpbGVkIHdpbGwgaGF2ZSBiZWVuIHByaW50ZWQgYWJvdmUuIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJSdW5RdWV1ZSIsICJObyBhY3RpdmUgdGFza3MgYW5kIG5vdCBpbiAtLWNvbnRpbnVlIG1vZGU/ISBQbGVhc2UgcmVwb3J0IHRoaXMgYnVnLiIpCisKKyAgICAgICAgbG9nZ2VyLnZlcmJvc2UoIlBydW5lZCAlcyBpbmFjdGl2ZSB0YXNrcywgJXMgbGVmdCIsIGRlbGNvdW50LCBsZW4oc2VsZi5ydW5xX2ZuaWQpKQorCisgICAgICAgICMgUmVtYXAgdGhlIGRlcGVuZGVuY2llcyB0byBhY2NvdW50IGZvciB0aGUgZGVsZXRlZCB0YXNrcworICAgICAgICAjIENoZWNrIHdlIGRpZG4ndCBkZWxldGUgYSB0YXNrIHdlIGRlcGVuZCBvbgorICAgICAgICBmb3IgbGlzdGlkIGluIHhyYW5nZShsZW4oc2VsZi5ydW5xX2ZuaWQpKToKKyAgICAgICAgICAgIG5ld2RlcHMgPSBbXQorICAgICAgICAgICAgb3JpZ2RlcHMgPSBzZWxmLnJ1bnFfZGVwZW5kc1tsaXN0aWRdCisgICAgICAgICAgICBmb3Igb3JpZ2RlcCBpbiBvcmlnZGVwczoKKyAgICAgICAgICAgICAgICBpZiBtYXBzW29yaWdkZXBdID09IC0xOgorICAgICAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlJ1blF1ZXVlIiwgIkludmFsaWQgbWFwcGluZyAtIFNob3VsZCBuZXZlciBoYXBwZW4hIikKKyAgICAgICAgICAgICAgICBuZXdkZXBzLmFwcGVuZChtYXBzW29yaWdkZXBdKQorICAgICAgICAgICAgc2VsZi5ydW5xX2RlcGVuZHNbbGlzdGlkXSA9IHNldChuZXdkZXBzKQorCisgICAgICAgIGxvZ2dlci52ZXJib3NlKCJBc3NpZ24gV2VpZ2h0aW5ncyIpCisKKyAgICAgICAgIyBHZW5lcmF0ZSBhIGxpc3Qgb2YgcmV2ZXJzZSBkZXBlbmRlbmNpZXMgdG8gZWFzZSBmdXR1cmUgY2FsY3VsYXRpb25zCisgICAgICAgIGZvciBsaXN0aWQgaW4geHJhbmdlKGxlbihzZWxmLnJ1bnFfZm5pZCkpOgorICAgICAgICAgICAgZm9yIGRlcCBpbiBzZWxmLnJ1bnFfZGVwZW5kc1tsaXN0aWRdOgorICAgICAgICAgICAgICAgIHNlbGYucnVucV9yZXZkZXBzW2RlcF0uYWRkKGxpc3RpZCkKKworICAgICAgICAjIElkZW50aWZ5IHRhc2tzIGF0IHRoZSBlbmQgb2YgZGVwZW5kZW5jeSBjaGFpbnMKKyAgICAgICAgIyBFcnJvciBvbiBjaXJjdWxhciBkZXBlbmRlbmN5IGxvb3BzIChsZW5ndGggdHdvKQorICAgICAgICBlbmRwb2ludHMgPSBbXQorICAgICAgICBmb3IgbGlzdGlkIGluIHhyYW5nZShsZW4oc2VsZi5ydW5xX2ZuaWQpKToKKyAgICAgICAgICAgIHJldmRlcHMgPSBzZWxmLnJ1bnFfcmV2ZGVwc1tsaXN0aWRdCisgICAgICAgICAgICBpZiBsZW4ocmV2ZGVwcykgPT0gMDoKKyAgICAgICAgICAgICAgICBlbmRwb2ludHMuYXBwZW5kKGxpc3RpZCkKKyAgICAgICAgICAgIGZvciBkZXAgaW4gcmV2ZGVwczoKKyAgICAgICAgICAgICAgICBpZiBkZXAgaW4gc2VsZi5ydW5xX2RlcGVuZHNbbGlzdGlkXToKKyAgICAgICAgICAgICAgICAgICAgI3NlbGYuZHVtcF9kYXRhKHRhc2tEYXRhKQorICAgICAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlJ1blF1ZXVlIiwgIlRhc2sgJXMgKCVzKSBoYXMgY2lyY3VsYXIgZGVwZW5kZW5jeSBvbiAlcyAoJXMpIiAlICh0YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJ1bnFfZm5pZFtkZXBdXSwgc2VsZi5ydW5xX3Rhc2tbZGVwXSwgdGFza0RhdGEuZm5faW5kZXhbc2VsZi5ydW5xX2ZuaWRbbGlzdGlkXV0sIHNlbGYucnVucV90YXNrW2xpc3RpZF0pKQorCisgICAgICAgIGxvZ2dlci52ZXJib3NlKCJDb21wdXRlIHRvdGFscyAoaGF2ZSAlcyBlbmRwb2ludChzKSkiLCBsZW4oZW5kcG9pbnRzKSkKKworICAgICAgICAjIENhbGN1bGF0ZSB0YXNrIHdlaWdodHMKKyAgICAgICAgIyBDaGVjayBvZiBoaWdoZXIgbGVuZ3RoIGNpcmN1bGFyIGRlcGVuZGVuY2llcworICAgICAgICBzZWxmLnJ1bnFfd2VpZ2h0ID0gc2VsZi5jYWxjdWxhdGVfdGFza193ZWlnaHRzKGVuZHBvaW50cykKKworICAgICAgICAjIFNhbml0eSBDaGVjayAtIENoZWNrIGZvciBtdWx0aXBsZSB0YXNrcyBidWlsZGluZyB0aGUgc2FtZSBwcm92aWRlcgorICAgICAgICBwcm92X2xpc3QgPSB7fQorICAgICAgICBzZWVuX2ZuID0gW10KKyAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbihzZWxmLnJ1bnFfZm5pZCkpOgorICAgICAgICAgICAgZm4gPSB0YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJ1bnFfZm5pZFt0YXNrXV0KKyAgICAgICAgICAgIGlmIGZuIGluIHNlZW5fZm46CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNlZW5fZm4uYXBwZW5kKGZuKQorICAgICAgICAgICAgZm9yIHByb3YgaW4gc2VsZi5kYXRhQ2FjaGUuZm5fcHJvdmlkZXNbZm5dOgorICAgICAgICAgICAgICAgIGlmIHByb3Ygbm90IGluIHByb3ZfbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgcHJvdl9saXN0W3Byb3ZdID0gW2ZuXQorICAgICAgICAgICAgICAgIGVsaWYgZm4gbm90IGluIHByb3ZfbGlzdFtwcm92XToKKyAgICAgICAgICAgICAgICAgICAgcHJvdl9saXN0W3Byb3ZdLmFwcGVuZChmbikKKyAgICAgICAgZm9yIHByb3YgaW4gcHJvdl9saXN0OgorICAgICAgICAgICAgaWYgbGVuKHByb3ZfbGlzdFtwcm92XSkgPiAxIGFuZCBwcm92IG5vdCBpbiBzZWxmLm11bHRpX3Byb3ZpZGVyX3doaXRlbGlzdDoKKyAgICAgICAgICAgICAgICBzZWVuX3BuID0gW10KKyAgICAgICAgICAgICAgICAjIElmIHR3byB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBQTiBhcmUgYmVpbmcgYnVpbHQgaXRzIGZhdGFsLCB3ZSBkb24ndCBzdXBwb3J0IGl0LgorICAgICAgICAgICAgICAgIGZvciBmbiBpbiBwcm92X2xpc3RbcHJvdl06CisgICAgICAgICAgICAgICAgICAgIHBuID0gc2VsZi5kYXRhQ2FjaGUucGtnX2ZuW2ZuXQorICAgICAgICAgICAgICAgICAgICBpZiBwbiBub3QgaW4gc2Vlbl9wbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlZW5fcG4uYXBwZW5kKHBuKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoIk11bHRpcGxlIHZlcnNpb25zIG9mICVzIGFyZSBkdWUgdG8gYmUgYnVpbHQgKCVzKS4gT25seSBvbmUgdmVyc2lvbiBvZiBhIGdpdmVuIFBOIHNob3VsZCBiZSBidWlsdCBpbiBhbnkgZ2l2ZW4gYnVpbGQuIFlvdSBsaWtlbHkgbmVlZCB0byBzZXQgUFJFRkVSUkVEX1ZFUlNJT05fJXMgdG8gc2VsZWN0IHRoZSBjb3JyZWN0IHZlcnNpb24gb3IgZG9uJ3QgZGVwZW5kIG9uIG11bHRpcGxlIHZlcnNpb25zLiIgJSAocG4sICIgIi5qb2luKHByb3ZfbGlzdFtwcm92XSksIHBuKSkKKyAgICAgICAgICAgICAgICBtc2cgPSAiTXVsdGlwbGUgLmJiIGZpbGVzIGFyZSBkdWUgdG8gYmUgYnVpbHQgd2hpY2ggZWFjaCBwcm92aWRlICVzICglcykuIiAlIChwcm92LCAiICIuam9pbihwcm92X2xpc3RbcHJvdl0pKQorICAgICAgICAgICAgICAgIGlmIHNlbGYud2Fybl9tdWx0aV9iYjoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4obXNnKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1zZyArPSAiXG4gVGhpcyB1c3VhbGx5IG1lYW5zIG9uZSBwcm92aWRlcyBzb21ldGhpbmcgdGhlIG90aGVyIGRvZXNuJ3QgYW5kIHNob3VsZC4iCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihtc2cpCisKKyAgICAgICAgIyBDcmVhdGUgYSB3aGl0ZWxpc3QgdXNhYmxlIGJ5IHRoZSBzdGFtcCBjaGVja3MKKyAgICAgICAgc3RhbXBmbndoaXRlbGlzdCA9IFtdCisgICAgICAgIGZvciBlbnRyeSBpbiBzZWxmLnN0YW1wd2hpdGVsaXN0LnNwbGl0KCk6CisgICAgICAgICAgICBlbnRyeWlkID0gc2VsZi50YXNrRGF0YS5nZXRidWlsZF9pZChlbnRyeSkKKyAgICAgICAgICAgIGlmIGVudHJ5aWQgbm90IGluIHNlbGYudGFza0RhdGEuYnVpbGRfdGFyZ2V0czoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZm5pZCA9IHNlbGYudGFza0RhdGEuYnVpbGRfdGFyZ2V0c1tlbnRyeWlkXVswXQorICAgICAgICAgICAgZm4gPSBzZWxmLnRhc2tEYXRhLmZuX2luZGV4W2ZuaWRdCisgICAgICAgICAgICBzdGFtcGZud2hpdGVsaXN0LmFwcGVuZChmbikKKyAgICAgICAgc2VsZi5zdGFtcGZud2hpdGVsaXN0ID0gc3RhbXBmbndoaXRlbGlzdAorCisgICAgICAgICMgSXRlcmF0ZSBvdmVyIHRoZSB0YXNrIGxpc3QgbG9va2luZyBmb3IgdGFza3Mgd2l0aCBhICdzZXRzY2VuZScgZnVuY3Rpb24KKyAgICAgICAgc2VsZi5ydW5xX3NldHNjZW5lID0gW10KKyAgICAgICAgaWYgbm90IHNlbGYuY29va2VyLmNvbmZpZ3VyYXRpb24ubm9zZXRzY2VuZToKKyAgICAgICAgICAgIGZvciB0YXNrIGluIHJhbmdlKGxlbihzZWxmLnJ1bnFfZm5pZCkpOgorICAgICAgICAgICAgICAgIHNldHNjZW5lID0gdGFza0RhdGEuZ2V0dGFza19pZChzZWxmLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnVucV9mbmlkW3Rhc2tdXSwgc2VsZi5ydW5xX3Rhc2tbdGFza10gKyAiX3NldHNjZW5lIiwgRmFsc2UpCisgICAgICAgICAgICAgICAgaWYgbm90IHNldHNjZW5lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNlbGYucnVucV9zZXRzY2VuZS5hcHBlbmQodGFzaykKKworICAgICAgICBkZWYgaW52YWxpZGF0ZV90YXNrKGZuLCB0YXNrbmFtZSwgZXJyb3Jfbm9zdGFtcCk6CisgICAgICAgICAgICB0YXNrZGVwID0gc2VsZi5kYXRhQ2FjaGUudGFza19kZXBzW2ZuXQorICAgICAgICAgICAgZm5pZCA9IHNlbGYudGFza0RhdGEuZ2V0Zm5faWQoZm4pCisgICAgICAgICAgICBpZiB0YXNrbmFtZSBub3QgaW4gdGFza0RhdGEudGFza3NfbG9va3VwW2ZuaWRdOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJUYXNrICVzIGRvZXMgbm90IGV4aXN0LCBpbnZhbGlkYXRpbmcgdGhpcyB0YXNrIHdpbGwgaGF2ZSBubyBlZmZlY3QiICUgdGFza25hbWUpCisgICAgICAgICAgICBpZiAnbm9zdGFtcCcgaW4gdGFza2RlcCBhbmQgdGFza25hbWUgaW4gdGFza2RlcFsnbm9zdGFtcCddOgorICAgICAgICAgICAgICAgIGlmIGVycm9yX25vc3RhbXA6CisgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJUYXNrICVzIGlzIG1hcmtlZCBub3N0YW1wLCBjYW5ub3QgaW52YWxpZGF0ZSB0aGlzIHRhc2siICUgdGFza25hbWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYmIuZGVidWcoMSwgIlRhc2sgJXMgaXMgbWFya2VkIG5vc3RhbXAsIGNhbm5vdCBpbnZhbGlkYXRlIHRoaXMgdGFzayIgJSB0YXNrbmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoIkludmFsaWRhdGUgdGFzayAlcywgJXMiLCB0YXNrbmFtZSwgZm4pCisgICAgICAgICAgICAgICAgYmIucGFyc2Uuc2lnZ2VuLmludmFsaWRhdGVfdGFzayh0YXNrbmFtZSwgc2VsZi5kYXRhQ2FjaGUsIGZuKQorCisgICAgICAgICMgSW52YWxpZGF0ZSB0YXNrIGlmIGZvcmNlIG1vZGUgYWN0aXZlCisgICAgICAgIGlmIHNlbGYuY29va2VyLmNvbmZpZ3VyYXRpb24uZm9yY2U6CisgICAgICAgICAgICBmb3IgKGZuLCB0YXJnZXQpIGluIHNlbGYudGFyZ2V0X3BhaXJzOgorICAgICAgICAgICAgICAgIGludmFsaWRhdGVfdGFzayhmbiwgdGFyZ2V0LCBGYWxzZSkKKworICAgICAgICAjIEludmFsaWRhdGUgdGFzayBpZiBpbnZhbGlkYXRlIG1vZGUgYWN0aXZlCisgICAgICAgIGlmIHNlbGYuY29va2VyLmNvbmZpZ3VyYXRpb24uaW52YWxpZGF0ZV9zdGFtcDoKKyAgICAgICAgICAgIGZvciAoZm4sIHRhcmdldCkgaW4gc2VsZi50YXJnZXRfcGFpcnM6CisgICAgICAgICAgICAgICAgZm9yIHN0IGluIHNlbGYuY29va2VyLmNvbmZpZ3VyYXRpb24uaW52YWxpZGF0ZV9zdGFtcC5zcGxpdCgnLCcpOgorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3Quc3RhcnRzd2l0aCgiZG9fIik6CisgICAgICAgICAgICAgICAgICAgICAgICBzdCA9ICJkb18lcyIgJSBzdAorICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlX3Rhc2soZm4sIHN0LCBUcnVlKQorCisgICAgICAgICMgSXRlcmF0ZSBvdmVyIHRoZSB0YXNrIGxpc3QgYW5kIGNhbGwgaW50byB0aGUgc2lnZ2VuIGNvZGUKKyAgICAgICAgZGVhbHR3aXRoID0gc2V0KCkKKyAgICAgICAgdG9kZWFsID0gc2V0KHJhbmdlKGxlbihzZWxmLnJ1bnFfZm5pZCkpKQorICAgICAgICB3aGlsZSBsZW4odG9kZWFsKSA+IDA6CisgICAgICAgICAgICBmb3IgdGFzayBpbiB0b2RlYWwuY29weSgpOgorICAgICAgICAgICAgICAgIGlmIGxlbihzZWxmLnJ1bnFfZGVwZW5kc1t0YXNrXSAtIGRlYWx0d2l0aCkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgZGVhbHR3aXRoLmFkZCh0YXNrKQorICAgICAgICAgICAgICAgICAgICB0b2RlYWwucmVtb3ZlKHRhc2spCisgICAgICAgICAgICAgICAgICAgIHByb2NkZXAgPSBbXQorICAgICAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHNlbGYucnVucV9kZXBlbmRzW3Rhc2tdOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2RlcC5hcHBlbmQoc2VsZi50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJ1bnFfZm5pZFtkZXBdXSArICIuIiArIHNlbGYucnVucV90YXNrW2RlcF0pCisgICAgICAgICAgICAgICAgICAgIHNlbGYucnVucV9oYXNoW3Rhc2tdID0gYmIucGFyc2Uuc2lnZ2VuLmdldF90YXNraGFzaChzZWxmLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnVucV9mbmlkW3Rhc2tdXSwgc2VsZi5ydW5xX3Rhc2tbdGFza10sIHByb2NkZXAsIHNlbGYuZGF0YUNhY2hlKQorCisgICAgICAgIHJldHVybiBsZW4oc2VsZi5ydW5xX2ZuaWQpCisKKyAgICBkZWYgZHVtcF9kYXRhKHNlbGYsIHRhc2tRdWV1ZSk6CisgICAgICAgICIiIgorICAgICAgICBEdW1wIHNvbWUgZGVidWcgaW5mb3JtYXRpb24gb24gdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcworICAgICAgICAiIiIKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICJydW5fdGFza3M6IikKKyAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbihzZWxmLnJxZGF0YS5ydW5xX3Rhc2spKToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAiICglcyklcyAtICVzOiAlcyAgIERlcHMgJXMgUmV2RGVwcyAlcyIsIHRhc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgdGFza1F1ZXVlLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFt0YXNrXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEucnVucV90YXNrW3Rhc2tdLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLnJ1bnFfd2VpZ2h0W3Rhc2tdLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLnJ1bnFfZGVwZW5kc1t0YXNrXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJxZGF0YS5ydW5xX3JldmRlcHNbdGFza10pCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICJzb3J0ZWRfdGFza3M6IikKKyAgICAgICAgZm9yIHRhc2sxIGluIHhyYW5nZShsZW4oc2VsZi5ycWRhdGEucnVucV90YXNrKSk6CisgICAgICAgICAgICBpZiB0YXNrMSBpbiBzZWxmLnByaW9fbWFwOgorICAgICAgICAgICAgICAgIHRhc2sgPSBzZWxmLnByaW9fbWFwW3Rhc2sxXQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAiICglcyklcyAtICVzOiAlcyAgIERlcHMgJXMgUmV2RGVwcyAlcyIsIHRhc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrUXVldWUuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3Rhc2tdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLnJ1bnFfdGFza1t0YXNrXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLnJ1bnFfd2VpZ2h0W3Rhc2tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3Rhc2tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW3Rhc2tdKQorCitjbGFzcyBSdW5RdWV1ZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29va2VyLCBjZmdEYXRhLCBkYXRhQ2FjaGUsIHRhc2tEYXRhLCB0YXJnZXRzKToKKworICAgICAgICBzZWxmLmNvb2tlciA9IGNvb2tlcgorICAgICAgICBzZWxmLmNmZ0RhdGEgPSBjZmdEYXRhCisgICAgICAgIHNlbGYucnFkYXRhID0gUnVuUXVldWVEYXRhKHNlbGYsIGNvb2tlciwgY2ZnRGF0YSwgZGF0YUNhY2hlLCB0YXNrRGF0YSwgdGFyZ2V0cykKKworICAgICAgICBzZWxmLnN0YW1wcG9saWN5ID0gY2ZnRGF0YS5nZXRWYXIoIkJCX1NUQU1QX1BPTElDWSIsIFRydWUpIG9yICJwZXJmaWxlIgorICAgICAgICBzZWxmLmhhc2h2YWxpZGF0ZSA9IGNmZ0RhdGEuZ2V0VmFyKCJCQl9IQVNIQ0hFQ0tfRlVOQ1RJT04iLCBUcnVlKSBvciBOb25lCisgICAgICAgIHNlbGYuc2V0c2NlbmV2ZXJpZnkgPSBjZmdEYXRhLmdldFZhcigiQkJfU0VUU0NFTkVfVkVSSUZZX0ZVTkNUSU9OIiwgVHJ1ZSkgb3IgTm9uZQorICAgICAgICBzZWxmLmRlcHZhbGlkYXRlID0gY2ZnRGF0YS5nZXRWYXIoIkJCX1NFVFNDRU5FX0RFUFZBTElEIiwgVHJ1ZSkgb3IgTm9uZQorCisgICAgICAgIHNlbGYuc3RhdGUgPSBydW5RdWV1ZVByZXBhcmUKKworICAgICAgICAjIEZvciBkaXNrIHNwYWNlIG1vbml0b3IKKyAgICAgICAgc2VsZi5kbSA9IG1vbml0b3JkaXNrLmRpc2tNb25pdG9yKGNmZ0RhdGEpCisKKyAgICAgICAgc2VsZi5ycWV4ZSA9IE5vbmUKKyAgICAgICAgc2VsZi53b3JrZXIgPSBOb25lCisgICAgICAgIHNlbGYud29ya2VycGlwZSA9IE5vbmUKKyAgICAgICAgc2VsZi5mYWtld29ya2VyID0gTm9uZQorICAgICAgICBzZWxmLmZha2V3b3JrZXJwaXBlID0gTm9uZQorCisgICAgZGVmIF9zdGFydF93b3JrZXIoc2VsZiwgZmFrZXJvb3QgPSBGYWxzZSwgcnFleGVjID0gTm9uZSk6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiU3RhcnRpbmcgYml0YmFrZS13b3JrZXIiKQorICAgICAgICBtYWdpYyA9ICJkZWNhZmJhZCIKKyAgICAgICAgaWYgc2VsZi5jb29rZXIuY29uZmlndXJhdGlvbi5wcm9maWxlOgorICAgICAgICAgICAgbWFnaWMgPSAiZGVjYWZiYWRiYWQiCisgICAgICAgIGlmIGZha2Vyb290OgorICAgICAgICAgICAgZmFrZXJvb3RjbWQgPSBzZWxmLmNmZ0RhdGEuZ2V0VmFyKCJGQUtFUk9PVENNRCIsIFRydWUpCisgICAgICAgICAgICBmYWtlcm9vdGVudiA9IChzZWxmLmNmZ0RhdGEuZ2V0VmFyKCJGQUtFUk9PVEJBU0VFTlYiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluICh2YXIuc3BsaXQoJz0nKSBmb3IgdmFyIGluIGZha2Vyb290ZW52KToKKyAgICAgICAgICAgICAgICBlbnZba2V5XSA9IHZhbHVlCisgICAgICAgICAgICB3b3JrZXIgPSBzdWJwcm9jZXNzLlBvcGVuKFtmYWtlcm9vdGNtZCwgImJpdGJha2Utd29ya2VyIiwgbWFnaWNdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIGVudj1lbnYpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3b3JrZXIgPSBzdWJwcm9jZXNzLlBvcGVuKFsiYml0YmFrZS13b3JrZXIiLCBtYWdpY10sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgYmIudXRpbHMubm9uYmxvY2tpbmdmZCh3b3JrZXIuc3Rkb3V0KQorICAgICAgICB3b3JrZXJwaXBlID0gcnVuUXVldWVQaXBlKHdvcmtlci5zdGRvdXQsIE5vbmUsIHNlbGYuY2ZnRGF0YSwgc2VsZiwgcnFleGVjKQorCisgICAgICAgIHdvcmtlcmRhdGEgPSB7CisgICAgICAgICAgICAidGFza2RlcHMiIDogc2VsZi5ycWRhdGEuZGF0YUNhY2hlLnRhc2tfZGVwcywKKyAgICAgICAgICAgICJmYWtlcm9vdGVudiIgOiBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUuZmFrZXJvb3RlbnYsCisgICAgICAgICAgICAiZmFrZXJvb3RkaXJzIiA6IHNlbGYucnFkYXRhLmRhdGFDYWNoZS5mYWtlcm9vdGRpcnMsCisgICAgICAgICAgICAiZmFrZXJvb3Rub2VudiIgOiBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUuZmFrZXJvb3Rub2VudiwKKyAgICAgICAgICAgICJzaWdkYXRhIiA6IGJiLnBhcnNlLnNpZ2dlbi5nZXRfdGFza2RhdGEoKSwKKyAgICAgICAgICAgICJydW5xX2hhc2giIDogc2VsZi5ycWRhdGEucnVucV9oYXNoLAorICAgICAgICAgICAgImxvZ2RlZmF1bHRkZWJ1ZyIgOiBiYi5tc2cubG9nZ2VyRGVmYXVsdERlYnVnTGV2ZWwsCisgICAgICAgICAgICAibG9nZGVmYXVsdHZlcmJvc2UiIDogYmIubXNnLmxvZ2dlckRlZmF1bHRWZXJib3NlLAorICAgICAgICAgICAgImxvZ2RlZmF1bHR2ZXJib3NlbG9ncyIgOiBiYi5tc2cubG9nZ2VyVmVyYm9zZUxvZ3MsCisgICAgICAgICAgICAibG9nZGVmYXVsdGRvbWFpbiIgOiBiYi5tc2cubG9nZ2VyRGVmYXVsdERvbWFpbnMsCisgICAgICAgICAgICAicHJob3N0IiA6IHNlbGYuY29va2VyLnByaG9zdCwKKyAgICAgICAgICAgICJidWlsZG5hbWUiIDogc2VsZi5jZmdEYXRhLmdldFZhcigiQlVJTEROQU1FIiwgVHJ1ZSksCisgICAgICAgICAgICAiZGF0ZSIgOiBzZWxmLmNmZ0RhdGEuZ2V0VmFyKCJEQVRFIiwgVHJ1ZSksCisgICAgICAgICAgICAidGltZSIgOiBzZWxmLmNmZ0RhdGEuZ2V0VmFyKCJUSU1FIiwgVHJ1ZSksCisgICAgICAgIH0KKworICAgICAgICB3b3JrZXIuc3RkaW4ud3JpdGUoIjxjb29rZXJjb25maWc+IiArIHBpY2tsZS5kdW1wcyhzZWxmLmNvb2tlci5jb25maWd1cmF0aW9uKSArICI8L2Nvb2tlcmNvbmZpZz4iKQorICAgICAgICB3b3JrZXIuc3RkaW4ud3JpdGUoIjx3b3JrZXJkYXRhPiIgKyBwaWNrbGUuZHVtcHMod29ya2VyZGF0YSkgKyAiPC93b3JrZXJkYXRhPiIpCisgICAgICAgIHdvcmtlci5zdGRpbi5mbHVzaCgpCisKKyAgICAgICAgcmV0dXJuIHdvcmtlciwgd29ya2VycGlwZQorCisgICAgZGVmIF90ZWFyZG93bl93b3JrZXIoc2VsZiwgd29ya2VyLCB3b3JrZXJwaXBlKToKKyAgICAgICAgaWYgbm90IHdvcmtlcjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlRlYXJkb3duIGZvciBiaXRiYWtlLXdvcmtlciIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgd29ya2VyLnN0ZGluLndyaXRlKCI8cXVpdD48L3F1aXQ+IikKKyAgICAgICAgICAgd29ya2VyLnN0ZGluLmZsdXNoKCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2hpbGUgd29ya2VyLnJldHVybmNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIHdvcmtlcnBpcGUucmVhZCgpCisgICAgICAgICAgICB3b3JrZXIucG9sbCgpCisgICAgICAgIHdoaWxlIHdvcmtlcnBpcGUucmVhZCgpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgd29ya2VycGlwZS5jbG9zZSgpCisKKyAgICBkZWYgc3RhcnRfd29ya2VyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLndvcmtlcjoKKyAgICAgICAgICAgIHNlbGYudGVhcmRvd25fd29ya2VycygpCisgICAgICAgIHNlbGYudGVhcmRvd24gPSBGYWxzZQorICAgICAgICBzZWxmLndvcmtlciwgc2VsZi53b3JrZXJwaXBlID0gc2VsZi5fc3RhcnRfd29ya2VyKCkKKworICAgIGRlZiBzdGFydF9mYWtld29ya2VyKHNlbGYsIHJxZXhlYyk6CisgICAgICAgIGlmIG5vdCBzZWxmLmZha2V3b3JrZXI6CisgICAgICAgICAgICBzZWxmLmZha2V3b3JrZXIsIHNlbGYuZmFrZXdvcmtlcnBpcGUgPSBzZWxmLl9zdGFydF93b3JrZXIoVHJ1ZSwgcnFleGVjKQorCisgICAgZGVmIHRlYXJkb3duX3dvcmtlcnMoc2VsZik6CisgICAgICAgIHNlbGYudGVhcmRvd24gPSBUcnVlCisgICAgICAgIHNlbGYuX3RlYXJkb3duX3dvcmtlcihzZWxmLndvcmtlciwgc2VsZi53b3JrZXJwaXBlKQorICAgICAgICBzZWxmLndvcmtlciA9IE5vbmUKKyAgICAgICAgc2VsZi53b3JrZXJwaXBlID0gTm9uZQorICAgICAgICBzZWxmLl90ZWFyZG93bl93b3JrZXIoc2VsZi5mYWtld29ya2VyLCBzZWxmLmZha2V3b3JrZXJwaXBlKQorICAgICAgICBzZWxmLmZha2V3b3JrZXIgPSBOb25lCisgICAgICAgIHNlbGYuZmFrZXdvcmtlcnBpcGUgPSBOb25lCisKKyAgICBkZWYgcmVhZF93b3JrZXJzKHNlbGYpOgorICAgICAgICBzZWxmLndvcmtlcnBpcGUucmVhZCgpCisgICAgICAgIGlmIHNlbGYuZmFrZXdvcmtlcnBpcGU6CisgICAgICAgICAgICBzZWxmLmZha2V3b3JrZXJwaXBlLnJlYWQoKQorCisgICAgZGVmIGFjdGl2ZV9mZHMoc2VsZik6CisgICAgICAgIGZkcyA9IFtdCisgICAgICAgIGlmIHNlbGYud29ya2VycGlwZToKKyAgICAgICAgICAgIGZkcy5hcHBlbmQoc2VsZi53b3JrZXJwaXBlLmlucHV0KQorICAgICAgICBpZiBzZWxmLmZha2V3b3JrZXJwaXBlOgorICAgICAgICAgICAgZmRzLmFwcGVuZChzZWxmLmZha2V3b3JrZXJwaXBlLmlucHV0KQorICAgICAgICByZXR1cm4gZmRzCisKKyAgICBkZWYgY2hlY2tfc3RhbXBfdGFzayhzZWxmLCB0YXNrLCB0YXNrbmFtZSA9IE5vbmUsIHJlY3Vyc2UgPSBGYWxzZSwgY2FjaGUgPSBOb25lKToKKyAgICAgICAgZGVmIGdldF90aW1lc3RhbXAoZik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgbm90IG9zLmFjY2VzcyhmLCBvcy5GX09LKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgICAgICByZXR1cm4gb3Muc3RhdChmKVtzdGF0LlNUX01USU1FXQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgaWYgc2VsZi5zdGFtcHBvbGljeSA9PSAicGVyZmlsZSI6CisgICAgICAgICAgICBmdWxsZGVwdHJlZSA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmdWxsZGVwdHJlZSA9IFRydWUKKyAgICAgICAgICAgIHN0YW1wd2hpdGVsaXN0ID0gW10KKyAgICAgICAgICAgIGlmIHNlbGYuc3RhbXBwb2xpY3kgPT0gIndoaXRlbGlzdCI6CisgICAgICAgICAgICAgICAgc3RhbXB3aGl0ZWxpc3QgPSBzZWxmLnJxZGF0YS5zdGFtcGZud2hpdGVsaXN0CisKKyAgICAgICAgZm4gPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza11dCisgICAgICAgIGlmIHRhc2tuYW1lIGlzIE5vbmU6CisgICAgICAgICAgICB0YXNrbmFtZSA9IHNlbGYucnFkYXRhLnJ1bnFfdGFza1t0YXNrXQorCisgICAgICAgIHN0YW1wZmlsZSA9IGJiLmJ1aWxkLnN0YW1wZmlsZSh0YXNrbmFtZSwgc2VsZi5ycWRhdGEuZGF0YUNhY2hlLCBmbikKKworICAgICAgICAjIElmIHRoZSBzdGFtcCBpcyBtaXNzaW5nLCBpdCdzIG5vdCBjdXJyZW50CisgICAgICAgIGlmIG5vdCBvcy5hY2Nlc3Moc3RhbXBmaWxlLCBvcy5GX09LKToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiU3RhbXBmaWxlICVzIG5vdCBhdmFpbGFibGUiLCBzdGFtcGZpbGUpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgIyBJZiBpdCdzIGEgJ25vc3RhbXAnIHRhc2ssIGl0J3Mgbm90IGN1cnJlbnQKKyAgICAgICAgdGFza2RlcCA9IHNlbGYucnFkYXRhLmRhdGFDYWNoZS50YXNrX2RlcHNbZm5dCisgICAgICAgIGlmICdub3N0YW1wJyBpbiB0YXNrZGVwIGFuZCB0YXNrbmFtZSBpbiB0YXNrZGVwWydub3N0YW1wJ106CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIiVzLiVzIGlzIG5vc3RhbXBcbiIsIGZuLCB0YXNrbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIHRhc2tuYW1lICE9ICJkb19zZXRzY2VuZSIgYW5kIHRhc2tuYW1lLmVuZHN3aXRoKCJfc2V0c2NlbmUiKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgaWYgY2FjaGUgaXMgTm9uZToKKyAgICAgICAgICAgIGNhY2hlID0ge30KKworICAgICAgICBpc2N1cnJlbnQgPSBUcnVlCisgICAgICAgIHQxID0gZ2V0X3RpbWVzdGFtcChzdGFtcGZpbGUpCisgICAgICAgIGZvciBkZXAgaW4gc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3Rhc2tdOgorICAgICAgICAgICAgaWYgaXNjdXJyZW50OgorICAgICAgICAgICAgICAgIGZuMiA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFtkZXBdXQorICAgICAgICAgICAgICAgIHRhc2tuYW1lMiA9IHNlbGYucnFkYXRhLnJ1bnFfdGFza1tkZXBdCisgICAgICAgICAgICAgICAgc3RhbXBmaWxlMiA9IGJiLmJ1aWxkLnN0YW1wZmlsZSh0YXNrbmFtZTIsIHNlbGYucnFkYXRhLmRhdGFDYWNoZSwgZm4yKQorICAgICAgICAgICAgICAgIHN0YW1wZmlsZTMgPSBiYi5idWlsZC5zdGFtcGZpbGUodGFza25hbWUyICsgIl9zZXRzY2VuZSIsIHNlbGYucnFkYXRhLmRhdGFDYWNoZSwgZm4yKQorICAgICAgICAgICAgICAgIHQyID0gZ2V0X3RpbWVzdGFtcChzdGFtcGZpbGUyKQorICAgICAgICAgICAgICAgIHQzID0gZ2V0X3RpbWVzdGFtcChzdGFtcGZpbGUzKQorICAgICAgICAgICAgICAgIGlmIHQzIGFuZCB0MyA+IHQyOgorICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgZm4gPT0gZm4yIG9yIChmdWxsZGVwdHJlZSBhbmQgZm4yIG5vdCBpbiBzdGFtcHdoaXRlbGlzdCk6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCB0MjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAnU3RhbXBmaWxlICVzIGRvZXMgbm90IGV4aXN0Jywgc3RhbXBmaWxlMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzY3VycmVudCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGlmIHQxIDwgdDI6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgJ1N0YW1wZmlsZSAlcyA8ICVzJywgc3RhbXBmaWxlLCBzdGFtcGZpbGUyKQorICAgICAgICAgICAgICAgICAgICAgICAgaXNjdXJyZW50ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgaWYgcmVjdXJzZSBhbmQgaXNjdXJyZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGVwIGluIGNhY2hlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzY3VycmVudCA9IGNhY2hlW2RlcF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNjdXJyZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgJ1N0YW1wZmlsZSBmb3IgZGVwZW5kZW5jeSAlczolcyBpbnZhbGlkIChjYWNoZWQpJyAlIChmbjIsIHRhc2tuYW1lMikpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzY3VycmVudCA9IHNlbGYuY2hlY2tfc3RhbXBfdGFzayhkZXAsIHJlY3Vyc2U9VHJ1ZSwgY2FjaGU9Y2FjaGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVbZGVwXSA9IGlzY3VycmVudAorICAgICAgICBpZiByZWN1cnNlOgorICAgICAgICAgICAgY2FjaGVbdGFza10gPSBpc2N1cnJlbnQKKyAgICAgICAgcmV0dXJuIGlzY3VycmVudAorCisgICAgZGVmIF9leGVjdXRlX3J1bnF1ZXVlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUnVuIHRoZSB0YXNrcyBpbiBhIHF1ZXVlIHByZXBhcmVkIGJ5IHJxZGF0YS5wcmVwYXJlKCkKKyAgICAgICAgVXBvbiBmYWlsdXJlLCBvcHRpb25hbGx5IHRyeSB0byByZWNvdmVyIHRoZSBidWlsZCB1c2luZyBhbnkgYWx0ZXJuYXRlIHByb3ZpZGVycworICAgICAgICAoaWYgdGhlIGFib3J0IG9uIGZhaWx1cmUgY29uZmlndXJhdGlvbiBvcHRpb24gaXNuJ3Qgc2V0KQorICAgICAgICAiIiIKKworICAgICAgICByZXR2YWwgPSBUcnVlCisKKyAgICAgICAgaWYgc2VsZi5zdGF0ZSBpcyBydW5RdWV1ZVByZXBhcmU6CisgICAgICAgICAgICBzZWxmLnJxZXhlID0gUnVuUXVldWVFeGVjdXRlRHVtbXkoc2VsZikKKyAgICAgICAgICAgIGlmIHNlbGYucnFkYXRhLnByZXBhcmUoKSA9PSAwOgorICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBydW5RdWV1ZUNvbXBsZXRlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBydW5RdWV1ZVNjZW5lSW5pdAorCisgICAgICAgICAgICAgICAgIyB3ZSBhcmUgcmVhZHkgdG8gcnVuLCBzZWUgaWYgYW55IFVJIGNsaWVudCBuZWVkcyB0aGUgZGVwZW5kZW5jeSBpbmZvCisgICAgICAgICAgICAgICAgaWYgYmIuY29va2VyLkNvb2tlckZlYXR1cmVzLlNFTkRfREVQRU5EU19UUkVFIGluIHNlbGYuY29va2VyLmZlYXR1cmVzZXQ6CisgICAgICAgICAgICAgICAgICAgIGRlcGdyYXBoID0gc2VsZi5jb29rZXIuYnVpbGREZXBlbmRUcmVlKHNlbGYsIHNlbGYucnFkYXRhLnRhc2tEYXRhKQorICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LkRlcFRyZWVHZW5lcmF0ZWQoZGVwZ3JhcGgpLCBzZWxmLmNvb2tlci5kYXRhKQorCisgICAgICAgIGlmIHNlbGYuc3RhdGUgaXMgcnVuUXVldWVTY2VuZUluaXQ6CisgICAgICAgICAgICBkdW1wID0gc2VsZi5jb29rZXIuY29uZmlndXJhdGlvbi5kdW1wX3NpZ25hdHVyZXMKKyAgICAgICAgICAgIGlmIGR1bXA6CisgICAgICAgICAgICAgICAgaWYgJ3ByaW50ZGlmZicgaW4gZHVtcDoKKyAgICAgICAgICAgICAgICAgICAgaW52YWxpZHRhc2tzID0gc2VsZi5wcmludF9kaWZmc2NlbmV0YXNrcygpCisgICAgICAgICAgICAgICAgc2VsZi5kdW1wX3NpZ25hdHVyZXMoZHVtcCkKKyAgICAgICAgICAgICAgICBpZiAncHJpbnRkaWZmJyBpbiBkdW1wOgorICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2RpZmZzY2VuZXRhc2tzKGludmFsaWR0YXNrcykKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gcnVuUXVldWVDb21wbGV0ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXJ0X3dvcmtlcigpCisgICAgICAgICAgICAgICAgc2VsZi5ycWV4ZSA9IFJ1blF1ZXVlRXhlY3V0ZVNjZW5lcXVldWUoc2VsZikKKworICAgICAgICBpZiBzZWxmLnN0YXRlIGluIFtydW5RdWV1ZVNjZW5lUnVuLCBydW5RdWV1ZVJ1bm5pbmcsIHJ1blF1ZXVlQ2xlYW5VcF06CisgICAgICAgICAgICBzZWxmLmRtLmNoZWNrKHNlbGYpCisKKyAgICAgICAgaWYgc2VsZi5zdGF0ZSBpcyBydW5RdWV1ZVNjZW5lUnVuOgorICAgICAgICAgICAgcmV0dmFsID0gc2VsZi5ycWV4ZS5leGVjdXRlKCkKKworICAgICAgICBpZiBzZWxmLnN0YXRlIGlzIHJ1blF1ZXVlUnVuSW5pdDoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJFeGVjdXRpbmcgUnVuUXVldWUgVGFza3MiKQorICAgICAgICAgICAgc2VsZi5ycWV4ZSA9IFJ1blF1ZXVlRXhlY3V0ZVRhc2tzKHNlbGYpCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gcnVuUXVldWVSdW5uaW5nCisKKyAgICAgICAgaWYgc2VsZi5zdGF0ZSBpcyBydW5RdWV1ZVJ1bm5pbmc6CisgICAgICAgICAgICByZXR2YWwgPSBzZWxmLnJxZXhlLmV4ZWN1dGUoKQorCisgICAgICAgIGlmIHNlbGYuc3RhdGUgaXMgcnVuUXVldWVDbGVhblVwOgorICAgICAgICAgICAgcmV0dmFsID0gc2VsZi5ycWV4ZS5maW5pc2goKQorCisgICAgICAgIGlmIChzZWxmLnN0YXRlIGlzIHJ1blF1ZXVlQ29tcGxldGUgb3Igc2VsZi5zdGF0ZSBpcyBydW5RdWV1ZUZhaWxlZCkgYW5kIHNlbGYucnFleGU6CisgICAgICAgICAgICBzZWxmLnRlYXJkb3duX3dvcmtlcnMoKQorICAgICAgICAgICAgaWYgc2VsZi5ycWV4ZS5zdGF0cy5mYWlsZWQ6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlRhc2tzIFN1bW1hcnk6IEF0dGVtcHRlZCAlZCB0YXNrcyBvZiB3aGljaCAlZCBkaWRuJ3QgbmVlZCB0byBiZSByZXJ1biBhbmQgJWQgZmFpbGVkLiIsIHNlbGYucnFleGUuc3RhdHMuY29tcGxldGVkICsgc2VsZi5ycWV4ZS5zdGF0cy5mYWlsZWQsIHNlbGYucnFleGUuc3RhdHMuc2tpcHBlZCwgc2VsZi5ycWV4ZS5zdGF0cy5mYWlsZWQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgTGV0J3MgYXZvaWQgdGhlIHdvcmQgImZhaWxlZCIgaWYgbm90aGluZyBhY3R1YWxseSBkaWQKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiVGFza3MgU3VtbWFyeTogQXR0ZW1wdGVkICVkIHRhc2tzIG9mIHdoaWNoICVkIGRpZG4ndCBuZWVkIHRvIGJlIHJlcnVuIGFuZCBhbGwgc3VjY2VlZGVkLiIsIHNlbGYucnFleGUuc3RhdHMuY29tcGxldGVkLCBzZWxmLnJxZXhlLnN0YXRzLnNraXBwZWQpCisKKyAgICAgICAgaWYgc2VsZi5zdGF0ZSBpcyBydW5RdWV1ZUZhaWxlZDoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJxZGF0YS50YXNrRGF0YS50cnlhbHRjb25maWdzOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLnJ1bnF1ZXVlLlRhc2tGYWlsdXJlKHNlbGYucnFleGUuZmFpbGVkX2ZuaWRzKQorICAgICAgICAgICAgZm9yIGZuaWQgaW4gc2VsZi5ycWV4ZS5mYWlsZWRfZm5pZHM6CisgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEudGFza0RhdGEuZmFpbF9mbmlkKGZuaWQpCisgICAgICAgICAgICBzZWxmLnJxZGF0YS5yZXNldCgpCisKKyAgICAgICAgaWYgc2VsZi5zdGF0ZSBpcyBydW5RdWV1ZUNvbXBsZXRlOgorICAgICAgICAgICAgIyBBbGwgZG9uZQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgIyBMb29wCisgICAgICAgIHJldHVybiByZXR2YWwKKworICAgIGRlZiBleGVjdXRlX3J1bnF1ZXVlKHNlbGYpOgorICAgICAgICAjIENhdGNoIHVuZXhwZWN0ZWQgZXhjZXB0aW9ucyBhbmQgZW5zdXJlIHdlIGV4aXQgd2hlbiBhbiBlcnJvciBvY2N1cnMsIG5vdCBsb29wLgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZXhlY3V0ZV9ydW5xdWV1ZSgpCisgICAgICAgIGV4Y2VwdCBiYi5ydW5xdWV1ZS5UYXNrRmFpbHVyZToKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0IGJiLkJCSGFuZGxlZEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnRlYXJkb3duX3dvcmtlcnMoKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBydW5RdWV1ZUNvbXBsZXRlCisgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkFuIHVuY2F1Z2h0IGV4Y2VwdGlvbiBvY2N1cmVkIGluIHJ1bnF1ZXVlLCBwbGVhc2Ugc2VlIHRoZSBmYWlsdXJlIGJlbG93OiIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi50ZWFyZG93bl93b3JrZXJzKCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gcnVuUXVldWVDb21wbGV0ZQorICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBmaW5pc2hfcnVucXVldWUoc2VsZiwgbm93ID0gRmFsc2UpOgorICAgICAgICBpZiBub3Qgc2VsZi5ycWV4ZToKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBydW5RdWV1ZUNvbXBsZXRlCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBub3c6CisgICAgICAgICAgICBzZWxmLnJxZXhlLmZpbmlzaF9ub3coKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5ycWV4ZS5maW5pc2goKQorCisgICAgZGVmIGR1bXBfc2lnbmF0dXJlcyhzZWxmLCBvcHRpb25zKToKKyAgICAgICAgZG9uZSA9IHNldCgpCisgICAgICAgIGJiLm5vdGUoIlJlcGFyc2luZyBmaWxlcyB0byBjb2xsZWN0IGRlcGVuZGVuY3kgZGF0YSIpCisgICAgICAgIGZvciB0YXNrIGluIHJhbmdlKGxlbihzZWxmLnJxZGF0YS5ydW5xX2ZuaWQpKToKKyAgICAgICAgICAgIGlmIHNlbGYucnFkYXRhLnJ1bnFfZm5pZFt0YXNrXSBub3QgaW4gZG9uZToKKyAgICAgICAgICAgICAgICBmbiA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFt0YXNrXV0KKyAgICAgICAgICAgICAgICB0aGVfZGF0YSA9IGJiLmNhY2hlLkNhY2hlLmxvYWREYXRhRnVsbChmbiwgc2VsZi5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGZuKSwgc2VsZi5jb29rZXIuZGF0YSkKKyAgICAgICAgICAgICAgICBkb25lLmFkZChzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza10pCisKKyAgICAgICAgYmIucGFyc2Uuc2lnZ2VuLmR1bXBfc2lncyhzZWxmLnJxZGF0YS5kYXRhQ2FjaGUsIG9wdGlvbnMpCisKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgcHJpbnRfZGlmZnNjZW5ldGFza3Moc2VsZik6CisKKyAgICAgICAgdmFsaWQgPSBbXQorICAgICAgICBzcV9oYXNoID0gW10KKyAgICAgICAgc3FfaGFzaGZuID0gW10KKyAgICAgICAgc3FfZm4gPSBbXQorICAgICAgICBzcV90YXNrbmFtZSA9IFtdCisgICAgICAgIHNxX3Rhc2sgPSBbXQorICAgICAgICBub2V4ZWMgPSBbXQorICAgICAgICBzdGFtcHByZXNlbnQgPSBbXQorICAgICAgICB2YWxpZF9uZXcgPSBzZXQoKQorCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4oc2VsZi5ycWRhdGEucnVucV9mbmlkKSk6CisgICAgICAgICAgICBmbiA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFt0YXNrXV0KKyAgICAgICAgICAgIHRhc2tuYW1lID0gc2VsZi5ycWRhdGEucnVucV90YXNrW3Rhc2tdCisgICAgICAgICAgICB0YXNrZGVwID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlLnRhc2tfZGVwc1tmbl0KKworICAgICAgICAgICAgaWYgJ25vZXhlYycgaW4gdGFza2RlcCBhbmQgdGFza25hbWUgaW4gdGFza2RlcFsnbm9leGVjJ106CisgICAgICAgICAgICAgICAgbm9leGVjLmFwcGVuZCh0YXNrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHNxX2ZuLmFwcGVuZChmbikKKyAgICAgICAgICAgIHNxX2hhc2hmbi5hcHBlbmQoc2VsZi5ycWRhdGEuZGF0YUNhY2hlLmhhc2hmbltmbl0pCisgICAgICAgICAgICBzcV9oYXNoLmFwcGVuZChzZWxmLnJxZGF0YS5ydW5xX2hhc2hbdGFza10pCisgICAgICAgICAgICBzcV90YXNrbmFtZS5hcHBlbmQodGFza25hbWUpCisgICAgICAgICAgICBzcV90YXNrLmFwcGVuZCh0YXNrKQorICAgICAgICBsb2NzID0geyAic3FfZm4iIDogc3FfZm4sICJzcV90YXNrIiA6IHNxX3Rhc2tuYW1lLCAic3FfaGFzaCIgOiBzcV9oYXNoLCAic3FfaGFzaGZuIiA6IHNxX2hhc2hmbiwgImQiIDogc2VsZi5jb29rZXIuZXhwYW5kZWRfZGF0YSB9CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNhbGwgPSBzZWxmLmhhc2h2YWxpZGF0ZSArICIoc3FfZm4sIHNxX3Rhc2ssIHNxX2hhc2gsIHNxX2hhc2hmbiwgZCwgc2lnaW5mbz1UcnVlKSIKKyAgICAgICAgICAgIHZhbGlkID0gYmIudXRpbHMuYmV0dGVyX2V2YWwoY2FsbCwgbG9jcykKKyAgICAgICAgIyBIYW5kbGUgdmVyc2lvbiB3aXRoIG5vIHNpZ2luZm8gcGFyYW1ldGVyCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBjYWxsID0gc2VsZi5oYXNodmFsaWRhdGUgKyAiKHNxX2ZuLCBzcV90YXNrLCBzcV9oYXNoLCBzcV9oYXNoZm4sIGQpIgorICAgICAgICAgICAgdmFsaWQgPSBiYi51dGlscy5iZXR0ZXJfZXZhbChjYWxsLCBsb2NzKQorICAgICAgICBmb3IgdiBpbiB2YWxpZDoKKyAgICAgICAgICAgIHZhbGlkX25ldy5hZGQoc3FfdGFza1t2XSkKKworICAgICAgICAjIFRhc2tzIHdoaWNoIGFyZSBib3RoIHNldHNjZW5lIGFuZCBub2V4ZWMgbmV2ZXIgY2FyZSBhYm91dCBkZXBlbmRlbmNpZXMKKyAgICAgICAgIyBXZSB0aGVyZWZvcmUgZmluZCB0YXNrcyB3aGljaCBhcmUgc2V0c2NlbmUgYW5kIG5vZXhlYyBhbmQgbWFyayB0aGVpcgorICAgICAgICAjIHVuaXF1ZSBkZXBlbmRlbmNpZXMgYXMgdmFsaWQuCisgICAgICAgIGZvciB0YXNrIGluIG5vZXhlYzoKKyAgICAgICAgICAgIGlmIHRhc2sgbm90IGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZvciBkZXAgaW4gc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3Rhc2tdOgorICAgICAgICAgICAgICAgIGhhc25vZXhlY3BhcmVudHMgPSBUcnVlCisgICAgICAgICAgICAgICAgZm9yIGRlcDIgaW4gc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW2RlcF06CisgICAgICAgICAgICAgICAgICAgIGlmIGRlcDIgaW4gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZSBhbmQgZGVwMiBpbiBub2V4ZWM6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBoYXNub2V4ZWNwYXJlbnRzID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBoYXNub2V4ZWNwYXJlbnRzOgorICAgICAgICAgICAgICAgICAgICB2YWxpZF9uZXcuYWRkKGRlcCkKKworICAgICAgICBpbnZhbGlkdGFza3MgPSBzZXQoKQorICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHNlbGYucnFkYXRhLnJ1bnFfZm5pZCkpOgorICAgICAgICAgICAgaWYgdGFzayBub3QgaW4gdmFsaWRfbmV3IGFuZCB0YXNrIG5vdCBpbiBub2V4ZWM6CisgICAgICAgICAgICAgICAgaW52YWxpZHRhc2tzLmFkZCh0YXNrKQorCisgICAgICAgIGZvdW5kID0gc2V0KCkKKyAgICAgICAgcHJvY2Vzc2VkID0gc2V0KCkKKyAgICAgICAgZm9yIHRhc2sgaW4gaW52YWxpZHRhc2tzOgorICAgICAgICAgICAgdG9wcm9jZXNzID0gc2V0KFt0YXNrXSkKKyAgICAgICAgICAgIHdoaWxlIHRvcHJvY2VzczoKKyAgICAgICAgICAgICAgICBuZXh0ID0gc2V0KCkKKyAgICAgICAgICAgICAgICBmb3IgdCBpbiB0b3Byb2Nlc3M6CisgICAgICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3RdOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGVwIGluIGludmFsaWR0YXNrczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZC5hZGQodGFzaykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRlcCBub3QgaW4gcHJvY2Vzc2VkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZC5hZGQoZGVwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQuYWRkKGRlcCkKKyAgICAgICAgICAgICAgICB0b3Byb2Nlc3MgPSBuZXh0CisgICAgICAgICAgICAgICAgaWYgdGFzayBpbiBmb3VuZDoKKyAgICAgICAgICAgICAgICAgICAgdG9wcm9jZXNzID0gc2V0KCkKKworICAgICAgICB0YXNrbGlzdCA9IFtdCisgICAgICAgIGZvciB0YXNrIGluIGludmFsaWR0YXNrcy5kaWZmZXJlbmNlKGZvdW5kKToKKyAgICAgICAgICAgIHRhc2tsaXN0LmFwcGVuZChzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyh0YXNrKSkKKworICAgICAgICBpZiB0YXNrbGlzdDoKKyAgICAgICAgICAgIGJiLnBsYWluKCJUaGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgY3VycmVudCBidWlsZCBhbmQgYW55IGNhY2hlZCB0YXNrcyBzdGFydCBhdCB0aGUgZm9sbG93aW5nIHRhc2tzOlxuIiArICJcbiIuam9pbih0YXNrbGlzdCkpCisKKyAgICAgICAgcmV0dXJuIGludmFsaWR0YXNrcy5kaWZmZXJlbmNlKGZvdW5kKQorCisgICAgZGVmIHdyaXRlX2RpZmZzY2VuZXRhc2tzKHNlbGYsIGludmFsaWR0YXNrcyk6CisKKyAgICAgICAgIyBEZWZpbmUgcmVjdXJzaW9uIGNhbGxiYWNrCisgICAgICAgIGRlZiByZWN1cnNlY2Ioa2V5LCBoYXNoMSwgaGFzaDIpOgorICAgICAgICAgICAgaGFzaGVzID0gW2hhc2gxLCBoYXNoMl0KKyAgICAgICAgICAgIGhhc2hmaWxlcyA9IGJiLnNpZ2dlbi5maW5kX3NpZ2luZm8oa2V5LCBOb25lLCBoYXNoZXMsIHNlbGYuY2ZnRGF0YSkKKworICAgICAgICAgICAgcmVjb3V0ID0gW10KKyAgICAgICAgICAgIGlmIGxlbihoYXNoZmlsZXMpID09IDI6CisgICAgICAgICAgICAgICAgb3V0MiA9IGJiLnNpZ2dlbi5jb21wYXJlX3NpZ2ZpbGVzKGhhc2hmaWxlc1toYXNoMV0sIGhhc2hmaWxlc1toYXNoMl0sIHJlY3Vyc2VjYikKKyAgICAgICAgICAgICAgICByZWNvdXQuZXh0ZW5kKGxpc3QoJyAgJyArIGwgZm9yIGwgaW4gb3V0MikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlY291dC5hcHBlbmQoIlVuYWJsZSB0byBmaW5kIG1hdGNoaW5nIHNpZ2RhdGEgZm9yICVzIHdpdGggaGFzaGVzICVzIG9yICVzIiAlIChrZXksIGhhc2gxLCBoYXNoMikpCisKKyAgICAgICAgICAgIHJldHVybiByZWNvdXQKKworCisgICAgICAgIGZvciB0YXNrIGluIGludmFsaWR0YXNrczoKKyAgICAgICAgICAgIGZuID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3Rhc2tdXQorICAgICAgICAgICAgcG4gPSBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUucGtnX2ZuW2ZuXQorICAgICAgICAgICAgdGFza25hbWUgPSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbdGFza10KKyAgICAgICAgICAgIGggPSBzZWxmLnJxZGF0YS5ydW5xX2hhc2hbdGFza10KKyAgICAgICAgICAgIG1hdGNoZXMgPSBiYi5zaWdnZW4uZmluZF9zaWdpbmZvKHBuLCB0YXNrbmFtZSwgW10sIHNlbGYuY2ZnRGF0YSkKKyAgICAgICAgICAgIG1hdGNoID0gTm9uZQorICAgICAgICAgICAgZm9yIG0gaW4gbWF0Y2hlczoKKyAgICAgICAgICAgICAgICBpZiBoIGluIG06CisgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gbQorICAgICAgICAgICAgaWYgbWF0Y2ggaXMgTm9uZToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiQ2FuJ3QgZmluZCBhIHRhc2sgd2UncmUgc3VwcG9zZWQgdG8gaGF2ZSB3cml0dGVuIG91dD8gKGhhc2g6ICVzKT8iICUgaCkKKyAgICAgICAgICAgIG1hdGNoZXMgPSB7ayA6IHYgZm9yIGssIHYgaW4gbWF0Y2hlcy5pdGVyaXRlbXMoKSBpZiBoIG5vdCBpbiBrfQorICAgICAgICAgICAgaWYgbWF0Y2hlczoKKyAgICAgICAgICAgICAgICBsYXRlc3RtYXRjaCA9IHNvcnRlZChtYXRjaGVzLmtleXMoKSwga2V5PWxhbWJkYSBmOiBtYXRjaGVzW2ZdKVstMV0KKyAgICAgICAgICAgICAgICBwcmV2aCA9IF9fZmluZF9tZDVfXy5zZWFyY2gobGF0ZXN0bWF0Y2gpLmdyb3VwKDApCisgICAgICAgICAgICAgICAgb3V0cHV0ID0gYmIuc2lnZ2VuLmNvbXBhcmVfc2lnZmlsZXMobGF0ZXN0bWF0Y2gsIG1hdGNoLCByZWN1cnNlY2IpCisgICAgICAgICAgICAgICAgYmIucGxhaW4oIlxuVGFzayAlczolcyBjb3VsZG4ndCBiZSB1c2VkIGZyb20gdGhlIGNhY2hlIGJlY2F1c2U6XG4gIFdlIG5lZWQgaGFzaCAlcywgY2xvc2VzdCBtYXRjaGluZyB0YXNrIHdhcyAlc1xuICAiICUgKHBuLCB0YXNrbmFtZSwgaCwgcHJldmgpICsgJ1xuICAnLmpvaW4ob3V0cHV0KSkKKworY2xhc3MgUnVuUXVldWVFeGVjdXRlOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJxKToKKyAgICAgICAgc2VsZi5ycSA9IHJxCisgICAgICAgIHNlbGYuY29va2VyID0gcnEuY29va2VyCisgICAgICAgIHNlbGYuY2ZnRGF0YSA9IHJxLmNmZ0RhdGEKKyAgICAgICAgc2VsZi5ycWRhdGEgPSBycS5ycWRhdGEKKworICAgICAgICBzZWxmLm51bWJlcl90YXNrcyA9IGludChzZWxmLmNmZ0RhdGEuZ2V0VmFyKCJCQl9OVU1CRVJfVEhSRUFEUyIsIFRydWUpIG9yIDEpCisgICAgICAgIHNlbGYuc2NoZWR1bGVyID0gc2VsZi5jZmdEYXRhLmdldFZhcigiQkJfU0NIRURVTEVSIiwgVHJ1ZSkgb3IgInNwZWVkIgorCisgICAgICAgIHNlbGYucnVucV9idWlsZGFibGUgPSBbXQorICAgICAgICBzZWxmLnJ1bnFfcnVubmluZyA9IFtdCisgICAgICAgIHNlbGYucnVucV9jb21wbGV0ZSA9IFtdCisKKyAgICAgICAgc2VsZi5idWlsZF9zdGFtcHMgPSB7fQorICAgICAgICBzZWxmLmJ1aWxkX3N0YW1wczIgPSBbXQorICAgICAgICBzZWxmLmZhaWxlZF9mbmlkcyA9IFtdCisKKyAgICAgICAgc2VsZi5zdGFtcGNhY2hlID0ge30KKworICAgICAgICBycS53b3JrZXJwaXBlLnNldHJ1bnF1ZXVlZXhlYyhzZWxmKQorICAgICAgICBpZiBycS5mYWtld29ya2VycGlwZToKKyAgICAgICAgICAgIHJxLmZha2V3b3JrZXJwaXBlLnNldHJ1bnF1ZXVlZXhlYyhzZWxmKQorCisgICAgICAgIGlmIHNlbGYubnVtYmVyX3Rhc2tzIDw9IDA6CisgICAgICAgICAgICAgYmIuZmF0YWwoIkludmFsaWQgQkJfTlVNQkVSX1RIUkVBRFMgJXMiICUgc2VsZi5udW1iZXJfdGFza3MpCisKKyAgICBkZWYgcnVucXVldWVfcHJvY2Vzc193YWl0cGlkKHNlbGYsIHRhc2ssIHN0YXR1cyk6CisKKyAgICAgICAgIyBzZWxmLmJ1aWxkX3N0YW1wc1twaWRdIG1heSBub3QgZXhpc3Qgd2hlbiB1c2Ugc2hhcmVkIHdvcmsgZGlyZWN0b3J5LgorICAgICAgICBpZiB0YXNrIGluIHNlbGYuYnVpbGRfc3RhbXBzOgorICAgICAgICAgICAgc2VsZi5idWlsZF9zdGFtcHMyLnJlbW92ZShzZWxmLmJ1aWxkX3N0YW1wc1t0YXNrXSkKKyAgICAgICAgICAgIGRlbCBzZWxmLmJ1aWxkX3N0YW1wc1t0YXNrXQorCisgICAgICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICAgICAgc2VsZi50YXNrX2ZhaWwodGFzaywgc3RhdHVzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi50YXNrX2NvbXBsZXRlKHRhc2spCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZmluaXNoX25vdyhzZWxmKToKKworICAgICAgICBmb3Igd29ya2VyIGluIFtzZWxmLnJxLndvcmtlciwgc2VsZi5ycS5mYWtld29ya2VyXToKKyAgICAgICAgICAgIGlmIG5vdCB3b3JrZXI6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3b3JrZXIuc3RkaW4ud3JpdGUoIjxmaW5pc2hub3c+PC9maW5pc2hub3c+IikKKyAgICAgICAgICAgICAgICB3b3JrZXIuc3RkaW4uZmx1c2goKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgIyB3b3JrZXIgbXVzdCBoYXZlIGRpZWQ/CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGlmIGxlbihzZWxmLmZhaWxlZF9mbmlkcykgIT0gMDoKKyAgICAgICAgICAgIHNlbGYucnEuc3RhdGUgPSBydW5RdWV1ZUZhaWxlZAorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5ycS5zdGF0ZSA9IHJ1blF1ZXVlQ29tcGxldGUKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgZmluaXNoKHNlbGYpOgorICAgICAgICBzZWxmLnJxLnN0YXRlID0gcnVuUXVldWVDbGVhblVwCisKKyAgICAgICAgaWYgc2VsZi5zdGF0cy5hY3RpdmUgPiAwOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShydW5RdWV1ZUV4aXRXYWl0KHNlbGYuc3RhdHMuYWN0aXZlKSwgc2VsZi5jZmdEYXRhKQorICAgICAgICAgICAgc2VsZi5ycS5yZWFkX3dvcmtlcnMoKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYucnEuYWN0aXZlX2ZkcygpCisKKyAgICAgICAgaWYgbGVuKHNlbGYuZmFpbGVkX2ZuaWRzKSAhPSAwOgorICAgICAgICAgICAgc2VsZi5ycS5zdGF0ZSA9IHJ1blF1ZXVlRmFpbGVkCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHNlbGYucnEuc3RhdGUgPSBydW5RdWV1ZUNvbXBsZXRlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgY2hlY2tfZGVwZW5kZW5jaWVzKHNlbGYsIHRhc2ssIHRhc2tkZXBzLCBzZXRzY2VuZSA9IEZhbHNlKToKKyAgICAgICAgaWYgbm90IHNlbGYucnEuZGVwdmFsaWRhdGU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICB0YXNrZGF0YSA9IHt9CisgICAgICAgIHRhc2tkZXBzLmFkZCh0YXNrKQorICAgICAgICBmb3IgZGVwIGluIHRhc2tkZXBzOgorICAgICAgICAgICAgaWYgc2V0c2NlbmU6CisgICAgICAgICAgICAgICAgZGVwaWQgPSBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lW2RlcF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVwaWQgPSBkZXAKKyAgICAgICAgICAgIGZuID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW2RlcGlkXV0KKyAgICAgICAgICAgIHBuID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlLnBrZ19mbltmbl0KKyAgICAgICAgICAgIHRhc2tuYW1lID0gc2VsZi5ycWRhdGEucnVucV90YXNrW2RlcGlkXQorICAgICAgICAgICAgdGFza2RhdGFbZGVwXSA9IFtwbiwgdGFza25hbWUsIGZuXQorICAgICAgICBjYWxsID0gc2VsZi5ycS5kZXB2YWxpZGF0ZSArICIodGFzaywgdGFza2RhdGEsIG5vdG5lZWRlZCwgZCkiCisgICAgICAgIGxvY3MgPSB7ICJ0YXNrIiA6IHRhc2ssICJ0YXNrZGF0YSIgOiB0YXNrZGF0YSwgIm5vdG5lZWRlZCIgOiBzZWxmLnNjZW5lcXVldWVfbm90bmVlZGVkLCAiZCIgOiBzZWxmLmNvb2tlci5leHBhbmRlZF9kYXRhIH0KKyAgICAgICAgdmFsaWQgPSBiYi51dGlscy5iZXR0ZXJfZXZhbChjYWxsLCBsb2NzKQorICAgICAgICByZXR1cm4gdmFsaWQKKworY2xhc3MgUnVuUXVldWVFeGVjdXRlRHVtbXkoUnVuUXVldWVFeGVjdXRlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcnEpOgorICAgICAgICBzZWxmLnJxID0gcnEKKyAgICAgICAgc2VsZi5zdGF0cyA9IFJ1blF1ZXVlU3RhdHMoMCkKKworICAgIGRlZiBmaW5pc2goc2VsZik6CisgICAgICAgIHNlbGYucnEuc3RhdGUgPSBydW5RdWV1ZUNvbXBsZXRlCisgICAgICAgIHJldHVybgorCitjbGFzcyBSdW5RdWV1ZUV4ZWN1dGVUYXNrcyhSdW5RdWV1ZUV4ZWN1dGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBycSk6CisgICAgICAgIFJ1blF1ZXVlRXhlY3V0ZS5fX2luaXRfXyhzZWxmLCBycSkKKworICAgICAgICBzZWxmLnN0YXRzID0gUnVuUXVldWVTdGF0cyhsZW4oc2VsZi5ycWRhdGEucnVucV9mbmlkKSkKKworICAgICAgICBzZWxmLnN0YW1wY2FjaGUgPSB7fQorCisgICAgICAgIGluaXRpYWxfY292ZXJlZCA9IHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkLmNvcHkoKQorCisgICAgICAgICMgTWFyayBpbml0aWFsIGJ1aWxkYWJsZSB0YXNrcworICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2Uoc2VsZi5zdGF0cy50b3RhbCk6CisgICAgICAgICAgICBzZWxmLnJ1bnFfcnVubmluZy5hcHBlbmQoMCkKKyAgICAgICAgICAgIHNlbGYucnVucV9jb21wbGV0ZS5hcHBlbmQoMCkKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLnJxZGF0YS5ydW5xX2RlcGVuZHNbdGFza10pID09IDA6CisgICAgICAgICAgICAgICAgc2VsZi5ydW5xX2J1aWxkYWJsZS5hcHBlbmQoMSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5ydW5xX2J1aWxkYWJsZS5hcHBlbmQoMCkKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLnJxZGF0YS5ydW5xX3JldmRlcHNbdGFza10pID4gMCBhbmQgc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW3Rhc2tdLmlzc3Vic2V0KHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkKSBhbmQgdGFzayBub3QgaW4gc2VsZi5ycS5zY2VuZXF1ZXVlX25vdGNvdmVyZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5ycS5zY2VuZXF1ZXVlX2NvdmVyZWQuYWRkKHRhc2spCisKKyAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgIHdoaWxlIGZvdW5kOgorICAgICAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKHNlbGYuc3RhdHMudG90YWwpOgorICAgICAgICAgICAgICAgIGlmIHRhc2sgaW4gc2VsZi5ycS5zY2VuZXF1ZXVlX2NvdmVyZWQ6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICdDb25zaWRlcmluZyAlcyAoJXMpOiAlcycgJSAodGFzaywgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcodGFzayksIHN0cihzZWxmLnJxZGF0YS5ydW5xX3JldmRlcHNbdGFza10pKSkKKworICAgICAgICAgICAgICAgIGlmIGxlbihzZWxmLnJxZGF0YS5ydW5xX3JldmRlcHNbdGFza10pID4gMCBhbmQgc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW3Rhc2tdLmlzc3Vic2V0KHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkKSBhbmQgdGFzayBub3QgaW4gc2VsZi5ycS5zY2VuZXF1ZXVlX25vdGNvdmVyZWQ6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZC5hZGQodGFzaykKKworICAgICAgICBsb2dnZXIuZGVidWcoMSwgJ1NraXAgbGlzdCAocHJlIHNldHNjZW5ldmVyaWZ5KSAlcycsIHNvcnRlZChzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZCkpCisKKyAgICAgICAgIyBBbGxvdyB0aGUgbWV0YWRhdGEgdG8gZWxlY3QgZm9yIHNldHNjZW5lIHRhc2tzIHRvIHJ1biBhbnl3YXkKKyAgICAgICAgY292ZXJlZF9yZW1vdmUgPSBzZXQoKQorICAgICAgICBpZiBzZWxmLnJxLnNldHNjZW5ldmVyaWZ5OgorICAgICAgICAgICAgaW52YWxpZHRhc2tzID0gW10KKyAgICAgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4oc2VsZi5ycWRhdGEucnVucV90YXNrKSk6CisgICAgICAgICAgICAgICAgZm4gPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza11dCisgICAgICAgICAgICAgICAgdGFza25hbWUgPSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbdGFza10KKyAgICAgICAgICAgICAgICB0YXNrZGVwID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlLnRhc2tfZGVwc1tmbl0KKworICAgICAgICAgICAgICAgIGlmICdub2V4ZWMnIGluIHRhc2tkZXAgYW5kIHRhc2tuYW1lIGluIHRhc2tkZXBbJ25vZXhlYyddOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIHNlbGYucnEuY2hlY2tfc3RhbXBfdGFzayh0YXNrLCB0YXNrbmFtZSArICJfc2V0c2NlbmUiLCBjYWNoZT1zZWxmLnN0YW1wY2FjaGUpOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgJ1NldHNjZW5lIHN0YW1wIGN1cnJlbnQgZm9yIHRhc2sgJXMoJXMpJywgdGFzaywgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcodGFzaykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgc2VsZi5ycS5jaGVja19zdGFtcF90YXNrKHRhc2ssIHRhc2tuYW1lLCByZWN1cnNlID0gVHJ1ZSwgY2FjaGU9c2VsZi5zdGFtcGNhY2hlKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICdOb3JtYWwgc3RhbXAgY3VycmVudCBmb3IgdGFzayAlcyglcyknLCB0YXNrLCBzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyh0YXNrKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpbnZhbGlkdGFza3MuYXBwZW5kKHRhc2spCisKKyAgICAgICAgICAgIGNhbGwgPSBzZWxmLnJxLnNldHNjZW5ldmVyaWZ5ICsgIihjb3ZlcmVkLCB0YXNrbmFtZXMsIGZuaWRzLCBmbnMsIGQsIGludmFsaWR0YXNrcz1pbnZhbGlkdGFza3MpIgorICAgICAgICAgICAgY2FsbDIgPSBzZWxmLnJxLnNldHNjZW5ldmVyaWZ5ICsgIihjb3ZlcmVkLCB0YXNrbmFtZXMsIGZuaWRzLCBmbnMsIGQpIgorICAgICAgICAgICAgbG9jcyA9IHsgImNvdmVyZWQiIDogc2VsZi5ycS5zY2VuZXF1ZXVlX2NvdmVyZWQsICJ0YXNrbmFtZXMiIDogc2VsZi5ycWRhdGEucnVucV90YXNrLCAiZm5pZHMiIDogc2VsZi5ycWRhdGEucnVucV9mbmlkLCAiZm5zIiA6IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4LCAiZCIgOiBzZWxmLmNvb2tlci5leHBhbmRlZF9kYXRhLCAiaW52YWxpZHRhc2tzIiA6IGludmFsaWR0YXNrcyB9CisgICAgICAgICAgICAjIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMgd2l0aG91dCBpbnZhbGlkdGFza3MKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjb3ZlcmVkX3JlbW92ZSA9IGJiLnV0aWxzLmJldHRlcl9ldmFsKGNhbGwsIGxvY3MpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIGNvdmVyZWRfcmVtb3ZlID0gYmIudXRpbHMuYmV0dGVyX2V2YWwoY2FsbDIsIGxvY3MpCisKKyAgICAgICAgZGVmIHJlbW92ZWNvdmVyZWR0YXNrKHRhc2spOgorICAgICAgICAgICAgZm4gPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza11dCisgICAgICAgICAgICB0YXNrbmFtZSA9IHNlbGYucnFkYXRhLnJ1bnFfdGFza1t0YXNrXSArICdfc2V0c2NlbmUnCisgICAgICAgICAgICBiYi5idWlsZC5kZWxfc3RhbXAodGFza25hbWUsIHNlbGYucnFkYXRhLmRhdGFDYWNoZSwgZm4pCisgICAgICAgICAgICBzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZC5yZW1vdmUodGFzaykKKworICAgICAgICB0b3JlbW92ZSA9IGNvdmVyZWRfcmVtb3ZlCisgICAgICAgIGZvciB0YXNrIGluIHRvcmVtb3ZlOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICdOb3Qgc2tpcHBpbmcgdGFzayAlcyBkdWUgdG8gc2V0c2NlbmV2ZXJpZnknLCB0YXNrKQorICAgICAgICB3aGlsZSB0b3JlbW92ZToKKyAgICAgICAgICAgIGNvdmVyZWRfcmVtb3ZlID0gW10KKyAgICAgICAgICAgIGZvciB0YXNrIGluIHRvcmVtb3ZlOgorICAgICAgICAgICAgICAgIHJlbW92ZWNvdmVyZWR0YXNrKHRhc2spCisgICAgICAgICAgICAgICAgZm9yIGRlcHRhc2sgaW4gc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3Rhc2tdOgorICAgICAgICAgICAgICAgICAgICBpZiBkZXB0YXNrIG5vdCBpbiBzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGlmIGRlcHRhc2sgaW4gdG9yZW1vdmUgb3IgZGVwdGFzayBpbiBjb3ZlcmVkX3JlbW92ZSBvciBkZXB0YXNrIGluIGluaXRpYWxfY292ZXJlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAnVGFzayAlcyBkZXBlbmRzIG9uIHRhc2sgJXMgc28gbm90IHNraXBwaW5nJyAlICh0YXNrLCBkZXB0YXNrKSkKKyAgICAgICAgICAgICAgICAgICAgY292ZXJlZF9yZW1vdmUuYXBwZW5kKGRlcHRhc2spCisgICAgICAgICAgICB0b3JlbW92ZSA9IGNvdmVyZWRfcmVtb3ZlCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICdGdWxsIHNraXAgbGlzdCAlcycsIHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkKQorCisgICAgICAgIGV2ZW50LmZpcmUoYmIuZXZlbnQuU3RhbXBVcGRhdGUoc2VsZi5ycWRhdGEudGFyZ2V0X3BhaXJzLCBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUuc3RhbXApLCBzZWxmLmNmZ0RhdGEpCisKKyAgICAgICAgc2NoZWR1bGVycyA9IHNlbGYuZ2V0X3NjaGVkdWxlcnMoKQorICAgICAgICBmb3Igc2NoZWR1bGVyIGluIHNjaGVkdWxlcnM6CisgICAgICAgICAgICBpZiBzZWxmLnNjaGVkdWxlciA9PSBzY2hlZHVsZXIubmFtZToKKyAgICAgICAgICAgICAgICBzZWxmLnNjaGVkID0gc2NoZWR1bGVyKHNlbGYsIHNlbGYucnFkYXRhKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiVXNpbmcgcnVucXVldWUgc2NoZWR1bGVyICclcyciLCBzY2hlZHVsZXIubmFtZSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkludmFsaWQgc2NoZWR1bGVyICclcycuICBBdmFpbGFibGUgc2NoZWR1bGVyczogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgIChzZWxmLnNjaGVkdWxlciwgIiwgIi5qb2luKG9iai5uYW1lIGZvciBvYmogaW4gc2NoZWR1bGVycykpKQorCisgICAgZGVmIGdldF9zY2hlZHVsZXJzKHNlbGYpOgorICAgICAgICBzY2hlZHVsZXJzID0gc2V0KG9iaiBmb3Igb2JqIGluIGdsb2JhbHMoKS52YWx1ZXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0eXBlKG9iaikgaXMgdHlwZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWJjbGFzcyhvYmosIFJ1blF1ZXVlU2NoZWR1bGVyKSkKKworICAgICAgICB1c2VyX3NjaGVkdWxlcnMgPSBzZWxmLmNmZ0RhdGEuZ2V0VmFyKCJCQl9TQ0hFRFVMRVJTIiwgVHJ1ZSkKKyAgICAgICAgaWYgdXNlcl9zY2hlZHVsZXJzOgorICAgICAgICAgICAgZm9yIHNjaGVkIGluIHVzZXJfc2NoZWR1bGVycy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGlmIG5vdCAiLiIgaW4gc2NoZWQ6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIklnbm9yaW5nIHNjaGVkdWxlciAnJXMnIGZyb20gQkJfU0NIRURVTEVSUzogbm90IGFuIGltcG9ydCIgJSBzY2hlZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIG1vZG5hbWUsIG5hbWUgPSBzY2hlZC5yc3BsaXQoIi4iLCAxKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gX19pbXBvcnRfXyhtb2RuYW1lLCBmcm9tbGlzdD0obmFtZSwpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5jcml0aWNhbCgiVW5hYmxlIHRvIGltcG9ydCBzY2hlZHVsZXIgJyVzJyBmcm9tICclcyc6ICVzIiAlIChuYW1lLCBtb2RuYW1lLCBleGMpKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KDEpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVycy5hZGQoZ2V0YXR0cihtb2R1bGUsIG5hbWUpKQorICAgICAgICByZXR1cm4gc2NoZWR1bGVycworCisgICAgZGVmIHNldGJ1aWxkYWJsZShzZWxmLCB0YXNrKToKKyAgICAgICAgc2VsZi5ydW5xX2J1aWxkYWJsZVt0YXNrXSA9IDEKKyAgICAgICAgc2VsZi5zY2hlZC5uZXdidWlsYWJsZSh0YXNrKQorCisgICAgZGVmIHRhc2tfY29tcGxldGVvdXRyaWdodChzZWxmLCB0YXNrKToKKyAgICAgICAgIiIiCisgICAgICAgIE1hcmsgYSB0YXNrIGFzIGNvbXBsZXRlZAorICAgICAgICBMb29rIGF0IHRoZSByZXZlcnNlIGRlcGVuZGVuY2llcyBhbmQgbWFyayBhbnkgdGFzayB3aXRoCisgICAgICAgIGNvbXBsZXRlZCBkZXBlbmRlbmNpZXMgYXMgYnVpbGRhYmxlCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnJ1bnFfY29tcGxldGVbdGFza10gPSAxCisgICAgICAgIGZvciByZXZkZXAgaW4gc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW3Rhc2tdOgorICAgICAgICAgICAgaWYgc2VsZi5ydW5xX3J1bm5pbmdbcmV2ZGVwXSA9PSAxOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBzZWxmLnJ1bnFfYnVpbGRhYmxlW3JldmRlcF0gPT0gMToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgYWxsZGVwcyA9IDEKKyAgICAgICAgICAgIGZvciBkZXAgaW4gc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3JldmRlcF06CisgICAgICAgICAgICAgICAgaWYgc2VsZi5ydW5xX2NvbXBsZXRlW2RlcF0gIT0gMToKKyAgICAgICAgICAgICAgICAgICAgYWxsZGVwcyA9IDAKKyAgICAgICAgICAgIGlmIGFsbGRlcHMgPT0gMToKKyAgICAgICAgICAgICAgICBzZWxmLnNldGJ1aWxkYWJsZShyZXZkZXApCisgICAgICAgICAgICAgICAgZm4gPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbcmV2ZGVwXV0KKyAgICAgICAgICAgICAgICB0YXNrbmFtZSA9IHNlbGYucnFkYXRhLnJ1bnFfdGFza1tyZXZkZXBdCisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJNYXJraW5nIHRhc2sgJXMgKCVzLCAlcykgYXMgYnVpbGRhYmxlIiwgcmV2ZGVwLCBmbiwgdGFza25hbWUpCisKKyAgICBkZWYgdGFza19jb21wbGV0ZShzZWxmLCB0YXNrKToKKyAgICAgICAgc2VsZi5zdGF0cy50YXNrQ29tcGxldGVkKCkKKyAgICAgICAgYmIuZXZlbnQuZmlyZShydW5RdWV1ZVRhc2tDb21wbGV0ZWQodGFzaywgc2VsZi5zdGF0cywgc2VsZi5ycSksIHNlbGYuY2ZnRGF0YSkKKyAgICAgICAgc2VsZi50YXNrX2NvbXBsZXRlb3V0cmlnaHQodGFzaykKKworICAgIGRlZiB0YXNrX2ZhaWwoc2VsZiwgdGFzaywgZXhpdGNvZGUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIHdoZW4gYSB0YXNrIGhhcyBmYWlsZWQKKyAgICAgICAgVXBkYXRlcyB0aGUgc3RhdGUgZW5naW5lIHdpdGggdGhlIGZhaWx1cmUKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuc3RhdHMudGFza0ZhaWxlZCgpCisgICAgICAgIGZuaWQgPSBzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza10KKyAgICAgICAgc2VsZi5mYWlsZWRfZm5pZHMuYXBwZW5kKGZuaWQpCisgICAgICAgIGJiLmV2ZW50LmZpcmUocnVuUXVldWVUYXNrRmFpbGVkKHRhc2ssIHNlbGYuc3RhdHMsIGV4aXRjb2RlLCBzZWxmLnJxKSwgc2VsZi5jZmdEYXRhKQorICAgICAgICBpZiBzZWxmLnJxZGF0YS50YXNrRGF0YS5hYm9ydDoKKyAgICAgICAgICAgIHNlbGYucnEuc3RhdGUgPSBydW5RdWV1ZUNsZWFuVXAKKworICAgIGRlZiB0YXNrX3NraXAoc2VsZiwgdGFzaywgcmVhc29uKToKKyAgICAgICAgc2VsZi5ydW5xX3J1bm5pbmdbdGFza10gPSAxCisgICAgICAgIHNlbGYuc2V0YnVpbGRhYmxlKHRhc2spCisgICAgICAgIGJiLmV2ZW50LmZpcmUocnVuUXVldWVUYXNrU2tpcHBlZCh0YXNrLCBzZWxmLnN0YXRzLCBzZWxmLnJxLCByZWFzb24pLCBzZWxmLmNmZ0RhdGEpCisgICAgICAgIHNlbGYudGFza19jb21wbGV0ZW91dHJpZ2h0KHRhc2spCisgICAgICAgIHNlbGYuc3RhdHMudGFza0NvbXBsZXRlZCgpCisgICAgICAgIHNlbGYuc3RhdHMudGFza1NraXBwZWQoKQorCisgICAgZGVmIGV4ZWN1dGUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSdW4gdGhlIHRhc2tzIGluIGEgcXVldWUgcHJlcGFyZWQgYnkgcnFkYXRhLnByZXBhcmUoKQorICAgICAgICAiIiIKKworICAgICAgICBzZWxmLnJxLnJlYWRfd29ya2VycygpCisgICAgICAgIAorCisgICAgICAgIGlmIHNlbGYuc3RhdHMudG90YWwgPT0gMDoKKyAgICAgICAgICAgICMgbm90aGluZyB0byBkbworICAgICAgICAgICAgc2VsZi5ycS5zdGF0ZSA9IHJ1blF1ZXVlQ2xlYW5VcAorCisgICAgICAgIHRhc2sgPSBzZWxmLnNjaGVkLm5leHQoKQorICAgICAgICBpZiB0YXNrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm4gPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza11dCisgICAgICAgICAgICB0YXNrbmFtZSA9IHNlbGYucnFkYXRhLnJ1bnFfdGFza1t0YXNrXQorCisgICAgICAgICAgICBpZiB0YXNrIGluIHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiU2V0c2NlbmUgY292ZXJlZCB0YXNrICVzICglcykiLCB0YXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyh0YXNrKSkKKyAgICAgICAgICAgICAgICBzZWxmLnRhc2tfc2tpcCh0YXNrLCAiY292ZXJlZCIpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAgICAgaWYgc2VsZi5ycS5jaGVja19zdGFtcF90YXNrKHRhc2ssIHRhc2tuYW1lLCBjYWNoZT1zZWxmLnN0YW1wY2FjaGUpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiU3RhbXAgY3VycmVudCB0YXNrICVzICglcykiLCB0YXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyh0YXNrKSkKKyAgICAgICAgICAgICAgICBzZWxmLnRhc2tfc2tpcCh0YXNrLCAiZXhpc3RpbmciKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgICAgIHRhc2tkZXAgPSBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUudGFza19kZXBzW2ZuXQorICAgICAgICAgICAgaWYgJ25vZXhlYycgaW4gdGFza2RlcCBhbmQgdGFza25hbWUgaW4gdGFza2RlcFsnbm9leGVjJ106CisgICAgICAgICAgICAgICAgc3RhcnRldmVudCA9IHJ1blF1ZXVlVGFza1N0YXJ0ZWQodGFzaywgc2VsZi5zdGF0cywgc2VsZi5ycSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2V4ZWM9VHJ1ZSkKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKHN0YXJ0ZXZlbnQsIHNlbGYuY2ZnRGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLnJ1bnFfcnVubmluZ1t0YXNrXSA9IDEKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRzLnRhc2tBY3RpdmUoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNvb2tlci5jb25maWd1cmF0aW9uLmRyeV9ydW46CisgICAgICAgICAgICAgICAgICAgIGJiLmJ1aWxkLm1ha2Vfc3RhbXAodGFza25hbWUsIHNlbGYucnFkYXRhLmRhdGFDYWNoZSwgZm4pCisgICAgICAgICAgICAgICAgc2VsZi50YXNrX2NvbXBsZXRlKHRhc2spCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3RhcnRldmVudCA9IHJ1blF1ZXVlVGFza1N0YXJ0ZWQodGFzaywgc2VsZi5zdGF0cywgc2VsZi5ycSkKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKHN0YXJ0ZXZlbnQsIHNlbGYuY2ZnRGF0YSkKKworICAgICAgICAgICAgdGFza2RlcGRhdGEgPSBzZWxmLmJ1aWxkX3Rhc2tkZXBkYXRhKHRhc2spCisKKyAgICAgICAgICAgIHRhc2tkZXAgPSBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUudGFza19kZXBzW2ZuXQorICAgICAgICAgICAgaWYgJ2Zha2Vyb290JyBpbiB0YXNrZGVwIGFuZCB0YXNrbmFtZSBpbiB0YXNrZGVwWydmYWtlcm9vdCddIGFuZCBub3Qgc2VsZi5jb29rZXIuY29uZmlndXJhdGlvbi5kcnlfcnVuOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJxLmZha2V3b3JrZXI6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnEuc3RhcnRfZmFrZXdvcmtlcihzZWxmKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuY3JpdGljYWwoIkZhaWxlZCB0byBzcGF3biBmYWtlcm9vdCB3b3JrZXIgdG8gcnVuICVzOiVzOiAlcyIgJSAoZm4sIHRhc2tuYW1lLCBzdHIoZXhjKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJxLnN0YXRlID0gcnVuUXVldWVGYWlsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5ycS5mYWtld29ya2VyLnN0ZGluLndyaXRlKCI8cnVudGFzaz4iICsgcGlja2xlLmR1bXBzKChmbiwgdGFzaywgdGFza25hbWUsIEZhbHNlLCBzZWxmLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoZm4pLCB0YXNrZGVwZGF0YSkpICsgIjwvcnVudGFzaz4iKQorICAgICAgICAgICAgICAgIHNlbGYucnEuZmFrZXdvcmtlci5zdGRpbi5mbHVzaCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucnEud29ya2VyLnN0ZGluLndyaXRlKCI8cnVudGFzaz4iICsgcGlja2xlLmR1bXBzKChmbiwgdGFzaywgdGFza25hbWUsIEZhbHNlLCBzZWxmLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoZm4pLCB0YXNrZGVwZGF0YSkpICsgIjwvcnVudGFzaz4iKQorICAgICAgICAgICAgICAgIHNlbGYucnEud29ya2VyLnN0ZGluLmZsdXNoKCkKKworICAgICAgICAgICAgc2VsZi5idWlsZF9zdGFtcHNbdGFza10gPSBiYi5idWlsZC5zdGFtcGZpbGUodGFza25hbWUsIHNlbGYucnFkYXRhLmRhdGFDYWNoZSwgZm4pCisgICAgICAgICAgICBzZWxmLmJ1aWxkX3N0YW1wczIuYXBwZW5kKHNlbGYuYnVpbGRfc3RhbXBzW3Rhc2tdKSAKKyAgICAgICAgICAgIHNlbGYucnVucV9ydW5uaW5nW3Rhc2tdID0gMQorICAgICAgICAgICAgc2VsZi5zdGF0cy50YXNrQWN0aXZlKCkKKyAgICAgICAgICAgIGlmIHNlbGYuc3RhdHMuYWN0aXZlIDwgc2VsZi5udW1iZXJfdGFza3M6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBpZiBzZWxmLnN0YXRzLmFjdGl2ZSA+IDA6CisgICAgICAgICAgICBzZWxmLnJxLnJlYWRfd29ya2VycygpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5ycS5hY3RpdmVfZmRzKCkKKworICAgICAgICBpZiBsZW4oc2VsZi5mYWlsZWRfZm5pZHMpICE9IDA6CisgICAgICAgICAgICBzZWxmLnJxLnN0YXRlID0gcnVuUXVldWVGYWlsZWQKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgIyBTYW5pdHkgQ2hlY2tzCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShzZWxmLnN0YXRzLnRvdGFsKToKKyAgICAgICAgICAgIGlmIHNlbGYucnVucV9idWlsZGFibGVbdGFza10gPT0gMDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlRhc2sgJXMgbmV2ZXIgYnVpbGRhYmxlISIsIHRhc2spCisgICAgICAgICAgICBpZiBzZWxmLnJ1bnFfcnVubmluZ1t0YXNrXSA9PSAwOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVGFzayAlcyBuZXZlciByYW4hIiwgdGFzaykKKyAgICAgICAgICAgIGlmIHNlbGYucnVucV9jb21wbGV0ZVt0YXNrXSA9PSAwOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVGFzayAlcyBuZXZlciBjb21wbGV0ZWQhIiwgdGFzaykKKyAgICAgICAgc2VsZi5ycS5zdGF0ZSA9IHJ1blF1ZXVlQ29tcGxldGUKKworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGJ1aWxkX3Rhc2tkZXBkYXRhKHNlbGYsIHRhc2spOgorICAgICAgICB0YXNrZGVwZGF0YSA9IHt9CisgICAgICAgIG5leHQgPSBzZWxmLnJxZGF0YS5ydW5xX2RlcGVuZHNbdGFza10KKyAgICAgICAgbmV4dC5hZGQodGFzaykKKyAgICAgICAgd2hpbGUgbmV4dDoKKyAgICAgICAgICAgIGFkZGl0aW9uYWwgPSBbXQorICAgICAgICAgICAgZm9yIHJldmRlcCBpbiBuZXh0OgorICAgICAgICAgICAgICAgIGZuID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3JldmRlcF1dCisgICAgICAgICAgICAgICAgcG4gPSBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUucGtnX2ZuW2ZuXQorICAgICAgICAgICAgICAgIHRhc2tuYW1lID0gc2VsZi5ycWRhdGEucnVucV90YXNrW3JldmRlcF0KKyAgICAgICAgICAgICAgICBkZXBzID0gc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3JldmRlcF0KKyAgICAgICAgICAgICAgICBwcm92aWRlcyA9IHNlbGYucnFkYXRhLmRhdGFDYWNoZS5mbl9wcm92aWRlc1tmbl0KKyAgICAgICAgICAgICAgICB0YXNrZGVwZGF0YVtyZXZkZXBdID0gW3BuLCB0YXNrbmFtZSwgZm4sIGRlcHMsIHByb3ZpZGVzXQorICAgICAgICAgICAgICAgIGZvciByZXZkZXAyIGluIGRlcHM6CisgICAgICAgICAgICAgICAgICAgIGlmIHJldmRlcDIgbm90IGluIHRhc2tkZXBkYXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbC5hcHBlbmQocmV2ZGVwMikKKyAgICAgICAgICAgIG5leHQgPSBhZGRpdGlvbmFsCisKKyAgICAgICAgI2JiLm5vdGUoIlRhc2sgJXM6ICIgJSB0YXNrICsgc3RyKHRhc2tkZXBkYXRhKS5yZXBsYWNlKCJdLCAiLCAiXSxcbiIpKQorICAgICAgICByZXR1cm4gdGFza2RlcGRhdGEKKworY2xhc3MgUnVuUXVldWVFeGVjdXRlU2NlbmVxdWV1ZShSdW5RdWV1ZUV4ZWN1dGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBycSk6CisgICAgICAgIFJ1blF1ZXVlRXhlY3V0ZS5fX2luaXRfXyhzZWxmLCBycSkKKworICAgICAgICBzZWxmLnNjZW5lcXVldWVfY292ZXJlZCA9IHNldCgpCisgICAgICAgIHNlbGYuc2NlbmVxdWV1ZV9ub3Rjb3ZlcmVkID0gc2V0KCkKKyAgICAgICAgc2VsZi5zY2VuZXF1ZXVlX25vdG5lZWRlZCA9IHNldCgpCisKKyAgICAgICAgIyBJZiB3ZSBkb24ndCBoYXZlIGFueSBzZXRzY2VuZSBmdW5jdGlvbnMsIHNraXAgdGhpcyBzdGVwCisgICAgICAgIGlmIGxlbihzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lKSA9PSAwOgorICAgICAgICAgICAgcnEuc2NlbmVxdWV1ZV9jb3ZlcmVkID0gc2V0KCkKKyAgICAgICAgICAgIHJxLnN0YXRlID0gcnVuUXVldWVSdW5Jbml0CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLnN0YXRzID0gUnVuUXVldWVTdGF0cyhsZW4oc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZSkpCisKKyAgICAgICAgc3FfcmV2ZGVwcyA9IFtdCisgICAgICAgIHNxX3JldmRlcHNfbmV3ID0gW10KKyAgICAgICAgc3FfcmV2ZGVwc19zcXVhc2ggPSBbXQorICAgICAgICBzZWxmLnNxX2hhcmRkZXBzID0ge30KKworICAgICAgICAjIFdlIG5lZWQgdG8gY29uc3RydWN0IGEgZGVwZW5kZW5jeSBncmFwaCBmb3IgdGhlIHNldHNjZW5lIGZ1bmN0aW9ucy4gSW50ZXJtZWRpYXRlCisgICAgICAgICMgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlIHNldHNjZW5lIHRhc2tzIG9ubHkgY29tcGxpY2F0ZSB0aGUgY29kZS4gVGhpcyBjb2RlCisgICAgICAgICMgdGhlcmVmb3JlIGFpbXMgdG8gY29sbGFwc2UgdGhlIGh1Z2UgcnVucXVldWUgZGVwZW5kZW5jeSB0cmVlIGludG8gYSBzbWFsbGVyIG9uZQorICAgICAgICAjIG9ubHkgY29udGFpbmluZyB0aGUgc2V0c2NlbmUgZnVuY3Rpb25zLgorCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShzZWxmLnN0YXRzLnRvdGFsKToKKyAgICAgICAgICAgIHNlbGYucnVucV9ydW5uaW5nLmFwcGVuZCgwKQorICAgICAgICAgICAgc2VsZi5ydW5xX2NvbXBsZXRlLmFwcGVuZCgwKQorICAgICAgICAgICAgc2VsZi5ydW5xX2J1aWxkYWJsZS5hcHBlbmQoMCkKKworICAgICAgICAjIEZpcnN0IHByb2Nlc3MgdGhlIGNoYWlucyB1cCB0byB0aGUgZmlyc3Qgc2V0c2NlbmUgdGFzay4KKyAgICAgICAgZW5kcG9pbnRzID0ge30KKyAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbihzZWxmLnJxZGF0YS5ydW5xX2ZuaWQpKToKKyAgICAgICAgICAgIHNxX3JldmRlcHMuYXBwZW5kKGNvcHkuY29weShzZWxmLnJxZGF0YS5ydW5xX3JldmRlcHNbdGFza10pKQorICAgICAgICAgICAgc3FfcmV2ZGVwc19uZXcuYXBwZW5kKHNldCgpKQorICAgICAgICAgICAgaWYgKGxlbihzZWxmLnJxZGF0YS5ydW5xX3JldmRlcHNbdGFza10pID09IDApIGFuZCB0YXNrIG5vdCBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgorICAgICAgICAgICAgICAgIGVuZHBvaW50c1t0YXNrXSA9IHNldCgpCisKKyAgICAgICAgIyBTZWNvbmRseSBwcm9jZXNzIHRoZSBjaGFpbnMgYmV0d2VlbiBzZXRzY2VuZSB0YXNrcy4KKyAgICAgICAgZm9yIHRhc2sgaW4gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZToKKyAgICAgICAgICAgIGZvciBkZXAgaW4gc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3Rhc2tdOgorICAgICAgICAgICAgICAgICAgICBpZiBkZXAgbm90IGluIGVuZHBvaW50czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50c1tkZXBdID0gc2V0KCkKKyAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRzW2RlcF0uYWRkKHRhc2spCisKKyAgICAgICAgZGVmIHByb2Nlc3NfZW5kcG9pbnRzKGVuZHBvaW50cyk6CisgICAgICAgICAgICBuZXdlbmRwb2ludHMgPSB7fQorICAgICAgICAgICAgZm9yIHBvaW50LCB0YXNrIGluIGVuZHBvaW50cy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHRhc2tzID0gc2V0KCkKKyAgICAgICAgICAgICAgICBpZiB0YXNrOgorICAgICAgICAgICAgICAgICAgICB0YXNrcyB8PSB0YXNrCisgICAgICAgICAgICAgICAgaWYgc3FfcmV2ZGVwc19uZXdbcG9pbnRdOgorICAgICAgICAgICAgICAgICAgICB0YXNrcyB8PSBzcV9yZXZkZXBzX25ld1twb2ludF0KKyAgICAgICAgICAgICAgICBzcV9yZXZkZXBzX25ld1twb2ludF0gPSBzZXQoKQorICAgICAgICAgICAgICAgIGlmIHBvaW50IGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmU6CisgICAgICAgICAgICAgICAgICAgIHNxX3JldmRlcHNfbmV3W3BvaW50XSA9IHRhc2tzCisgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBzZWxmLnJxZGF0YS5ydW5xX2RlcGVuZHNbcG9pbnRdOgorICAgICAgICAgICAgICAgICAgICBpZiBwb2ludCBpbiBzcV9yZXZkZXBzW2RlcF06CisgICAgICAgICAgICAgICAgICAgICAgICBzcV9yZXZkZXBzW2RlcF0ucmVtb3ZlKHBvaW50KQorICAgICAgICAgICAgICAgICAgICBpZiB0YXNrczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNxX3JldmRlcHNfbmV3W2RlcF0gfD0gdGFza3MKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxlbihzcV9yZXZkZXBzW2RlcF0pID09IDAgb3IgbGVuKHNxX3JldmRlcHNfbmV3W2RlcF0pICE9IDApIGFuZCBkZXAgbm90IGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdlbmRwb2ludHNbZGVwXSA9IHRhc2sKKyAgICAgICAgICAgIGlmIGxlbihuZXdlbmRwb2ludHMpICE9IDA6CisgICAgICAgICAgICAgICAgcHJvY2Vzc19lbmRwb2ludHMobmV3ZW5kcG9pbnRzKQorCisgICAgICAgIHByb2Nlc3NfZW5kcG9pbnRzKGVuZHBvaW50cykKKworICAgICAgICAjIEJ1aWxkIGEgbGlzdCBvZiBzZXRzY2VuZSB0YXNrcyB3aGljaCBhcmUgInVuc2tpcHBhYmxlIgorICAgICAgICAjIFRoZXNlIGFyZSBkaXJlY3QgZW5kcG9pbnRzIHJlZmVyZW5jZWQgYnkgdGhlIGJ1aWxkCisgICAgICAgIGVuZHBvaW50czIgPSB7fQorICAgICAgICBzcV9yZXZkZXBzMiA9IFtdCisgICAgICAgIHNxX3JldmRlcHNfbmV3MiA9IFtdCisgICAgICAgIGRlZiBwcm9jZXNzX2VuZHBvaW50czIoZW5kcG9pbnRzKToKKyAgICAgICAgICAgIG5ld2VuZHBvaW50cyA9IHt9CisgICAgICAgICAgICBmb3IgcG9pbnQsIHRhc2sgaW4gZW5kcG9pbnRzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgdGFza3MgPSBzZXQoW3BvaW50XSkKKyAgICAgICAgICAgICAgICBpZiB0YXNrOgorICAgICAgICAgICAgICAgICAgICB0YXNrcyB8PSB0YXNrCisgICAgICAgICAgICAgICAgaWYgc3FfcmV2ZGVwc19uZXcyW3BvaW50XToKKyAgICAgICAgICAgICAgICAgICAgdGFza3MgfD0gc3FfcmV2ZGVwc19uZXcyW3BvaW50XQorICAgICAgICAgICAgICAgIHNxX3JldmRlcHNfbmV3Mltwb2ludF0gPSBzZXQoKQorICAgICAgICAgICAgICAgIGlmIHBvaW50IGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmU6CisgICAgICAgICAgICAgICAgICAgIHNxX3JldmRlcHNfbmV3Mltwb2ludF0gPSB0YXNrcworICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3BvaW50XToKKyAgICAgICAgICAgICAgICAgICAgaWYgcG9pbnQgaW4gc3FfcmV2ZGVwczJbZGVwXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNxX3JldmRlcHMyW2RlcF0ucmVtb3ZlKHBvaW50KQorICAgICAgICAgICAgICAgICAgICBpZiB0YXNrczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNxX3JldmRlcHNfbmV3MltkZXBdIHw9IHRhc2tzCisgICAgICAgICAgICAgICAgICAgIGlmIChsZW4oc3FfcmV2ZGVwczJbZGVwXSkgPT0gMCBvciBsZW4oc3FfcmV2ZGVwc19uZXcyW2RlcF0pICE9IDApIGFuZCBkZXAgbm90IGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdlbmRwb2ludHNbZGVwXSA9IHRhc2tzCisgICAgICAgICAgICBpZiBsZW4obmV3ZW5kcG9pbnRzKSAhPSAwOgorICAgICAgICAgICAgICAgIHByb2Nlc3NfZW5kcG9pbnRzMihuZXdlbmRwb2ludHMpCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4oc2VsZi5ycWRhdGEucnVucV9mbmlkKSk6CisgICAgICAgICAgICBzcV9yZXZkZXBzMi5hcHBlbmQoY29weS5jb3B5KHNlbGYucnFkYXRhLnJ1bnFfcmV2ZGVwc1t0YXNrXSkpCisgICAgICAgICAgICBzcV9yZXZkZXBzX25ldzIuYXBwZW5kKHNldCgpKQorICAgICAgICAgICAgaWYgKGxlbihzZWxmLnJxZGF0YS5ydW5xX3JldmRlcHNbdGFza10pID09IDApIGFuZCB0YXNrIG5vdCBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgorICAgICAgICAgICAgICAgIGVuZHBvaW50czJbdGFza10gPSBzZXQoKQorICAgICAgICBwcm9jZXNzX2VuZHBvaW50czIoZW5kcG9pbnRzMikKKyAgICAgICAgc2VsZi51bnNraXBwYWJsZSA9IFtdCisgICAgICAgIGZvciB0YXNrIGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmU6CisgICAgICAgICAgICBpZiBzcV9yZXZkZXBzX25ldzJbdGFza106CisgICAgICAgICAgICAgICAgc2VsZi51bnNraXBwYWJsZS5hcHBlbmQoc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZS5pbmRleCh0YXNrKSkKKworICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHNlbGYucnFkYXRhLnJ1bnFfZm5pZCkpOgorICAgICAgICAgICAgaWYgdGFzayBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgorICAgICAgICAgICAgICAgIGRlcHMgPSBzZXQoKQorICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gc3FfcmV2ZGVwc19uZXdbdGFza106CisgICAgICAgICAgICAgICAgICAgIGRlcHMuYWRkKHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmUuaW5kZXgoZGVwKSkKKyAgICAgICAgICAgICAgICBzcV9yZXZkZXBzX3NxdWFzaC5hcHBlbmQoZGVwcykKKyAgICAgICAgICAgIGVsaWYgbGVuKHNxX3JldmRlcHNfbmV3W3Rhc2tdKSAhPSAwOgorICAgICAgICAgICAgICAgIGJiLm1zZy5mYXRhbCgiUnVuUXVldWUiLCAiU29tZXRoaW5nIHdlbnQgYmFkbHkgd3JvbmcgZHVyaW5nIHNjZW5lcXVldWUgZ2VuZXJhdGlvbiwgYWJvcnRpbmcuIFBsZWFzZSByZXBvcnQgdGhpcyBwcm9ibGVtLiIpCisKKyAgICAgICAgIyBSZXNvbHZlIHNldHNjZW5lIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzCisgICAgICAgICMgZS5nLiBkb19zb21ldGFza19zZXRzY2VuZVtkZXBlbmRzXSA9ICJ0YXJnZXRuYW1lOmRvX3NvbWVvdGhlcnRhc2tfc2V0c2NlbmUiCisgICAgICAgICMgTm90ZSB0aGF0IGFueXRoaW5nIGV4cGxpY2l0bHkgZGVwZW5kZWQgdXBvbiB3aWxsIGhhdmUgaXRzIHJldmVyc2UgZGVwZW5kZW5jaWVzIHJlbW92ZWQgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzCisgICAgICAgIGZvciB0YXNrIGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmU6CisgICAgICAgICAgICAgICAgcmVhbGlkID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZ2V0dGFza19pZChzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza11dLCBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbdGFza10gKyAiX3NldHNjZW5lIiwgRmFsc2UpCisgICAgICAgICAgICAgICAgaWRlcGVuZHMgPSBzZWxmLnJxZGF0YS50YXNrRGF0YS50YXNrc19pZGVwZW5kc1tyZWFsaWRdCisgICAgICAgICAgICAgICAgZm9yIChkZXBpZCwgaWRlcGVuZHRhc2spIGluIGlkZXBlbmRzOgorICAgICAgICAgICAgICAgICAgICBpZiBkZXBpZCBub3QgaW4gc2VsZi5ycWRhdGEudGFza0RhdGEuYnVpbGRfdGFyZ2V0czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAgICAgZGVwZGF0YSA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmJ1aWxkX3RhcmdldHNbZGVwaWRdWzBdCisgICAgICAgICAgICAgICAgICAgIGlmIGRlcGRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBkZXAgPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtkZXBkYXRhXQorICAgICAgICAgICAgICAgICAgICB0YXNraWQgPSBzZWxmLnJxZGF0YS5nZXRfdGFza19pZChzZWxmLnJxZGF0YS50YXNrRGF0YS5nZXRmbl9pZChkZXApLCBpZGVwZW5kdGFzay5yZXBsYWNlKCJfc2V0c2NlbmUiLCAiIikpCisgICAgICAgICAgICAgICAgICAgIGlmIHRhc2tpZCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJSdW5RdWV1ZSIsICJUYXNrICVzX3NldHNjZW5lIGRlcGVuZHMgdXBvbiBub24tZXhpc3RlbnQgdGFzayAlczolcyIgJSAoc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcodGFzayksIGRlcCwgaWRlcGVuZHRhc2spKQorCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lLmluZGV4KHRhc2tpZCkgaW4gc2VsZi5zcV9oYXJkZGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3FfaGFyZGRlcHNbc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZS5pbmRleCh0YXNraWQpXSA9IHNldCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3FfaGFyZGRlcHNbc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZS5pbmRleCh0YXNraWQpXS5hZGQoc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZS5pbmRleCh0YXNrKSkKKworICAgICAgICAgICAgICAgICAgICBzcV9yZXZkZXBzX3NxdWFzaFtzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lLmluZGV4KHRhc2spXS5hZGQoc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZS5pbmRleCh0YXNraWQpKQorICAgICAgICAgICAgICAgICAgICAjIEhhdmUgdG8gemVybyB0aGlzIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICBzcV9yZXZkZXBzX3NxdWFzaFtzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lLmluZGV4KHRhc2tpZCldID0gc2V0KCkKKworICAgICAgICBmb3IgdGFzayBpbiBzZWxmLnNxX2hhcmRkZXBzOgorICAgICAgICAgICAgIGZvciBkZXAgaW4gc2VsZi5zcV9oYXJkZGVwc1t0YXNrXToKKyAgICAgICAgICAgICAgICAgc3FfcmV2ZGVwc19zcXVhc2hbZGVwXS5hZGQodGFzaykKKworICAgICAgICAjZm9yIHRhc2sgaW4geHJhbmdlKGxlbihzcV9yZXZkZXBzX3NxdWFzaCkpOgorICAgICAgICAjICAgIHJlYWx0YXNrID0gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVt0YXNrXQorICAgICAgICAjICAgIGJiLndhcm4oIlRhc2sgJXM6ICVzX3NldHNjZW5lIGlzICVzICIgJSAodGFzaywgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcocmVhbHRhc2spICwgc3FfcmV2ZGVwc19zcXVhc2hbdGFza10pKQorCisgICAgICAgIHNlbGYuc3FfZGVwcyA9IFtdCisgICAgICAgIHNlbGYuc3FfcmV2ZGVwcyA9IHNxX3JldmRlcHNfc3F1YXNoCisgICAgICAgIHNlbGYuc3FfcmV2ZGVwczIgPSBjb3B5LmRlZXBjb3B5KHNlbGYuc3FfcmV2ZGVwcykKKworICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHNlbGYuc3FfcmV2ZGVwcykpOgorICAgICAgICAgICAgc2VsZi5zcV9kZXBzLmFwcGVuZChzZXQoKSkKKyAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbihzZWxmLnNxX3JldmRlcHMpKToKKyAgICAgICAgICAgIGZvciBkZXAgaW4gc2VsZi5zcV9yZXZkZXBzW3Rhc2tdOgorICAgICAgICAgICAgICAgIHNlbGYuc3FfZGVwc1tkZXBdLmFkZCh0YXNrKQorCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4oc2VsZi5zcV9yZXZkZXBzKSk6CisgICAgICAgICAgICBpZiBsZW4oc2VsZi5zcV9yZXZkZXBzW3Rhc2tdKSA9PSAwOgorICAgICAgICAgICAgICAgIHNlbGYucnVucV9idWlsZGFibGVbdGFza10gPSAxCisKKyAgICAgICAgc2VsZi5vdXRyaWdodGZhaWwgPSBbXQorICAgICAgICBpZiBzZWxmLnJxLmhhc2h2YWxpZGF0ZToKKyAgICAgICAgICAgIHNxX2hhc2ggPSBbXQorICAgICAgICAgICAgc3FfaGFzaGZuID0gW10KKyAgICAgICAgICAgIHNxX2ZuID0gW10KKyAgICAgICAgICAgIHNxX3Rhc2tuYW1lID0gW10KKyAgICAgICAgICAgIHNxX3Rhc2sgPSBbXQorICAgICAgICAgICAgbm9leGVjID0gW10KKyAgICAgICAgICAgIHN0YW1wcHJlc2VudCA9IFtdCisgICAgICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHNlbGYuc3FfcmV2ZGVwcykpOgorICAgICAgICAgICAgICAgIHJlYWx0YXNrID0gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVt0YXNrXQorICAgICAgICAgICAgICAgIGZuID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3JlYWx0YXNrXV0KKyAgICAgICAgICAgICAgICB0YXNrbmFtZSA9IHNlbGYucnFkYXRhLnJ1bnFfdGFza1tyZWFsdGFza10KKyAgICAgICAgICAgICAgICB0YXNrZGVwID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlLnRhc2tfZGVwc1tmbl0KKworICAgICAgICAgICAgICAgIGlmICdub2V4ZWMnIGluIHRhc2tkZXAgYW5kIHRhc2tuYW1lIGluIHRhc2tkZXBbJ25vZXhlYyddOgorICAgICAgICAgICAgICAgICAgICBub2V4ZWMuYXBwZW5kKHRhc2spCisgICAgICAgICAgICAgICAgICAgIHNlbGYudGFza19za2lwKHRhc2spCisgICAgICAgICAgICAgICAgICAgIGJiLmJ1aWxkLm1ha2Vfc3RhbXAodGFza25hbWUgKyAiX3NldHNjZW5lIiwgc2VsZi5ycWRhdGEuZGF0YUNhY2hlLCBmbikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIHNlbGYucnEuY2hlY2tfc3RhbXBfdGFzayhyZWFsdGFzaywgdGFza25hbWUgKyAiX3NldHNjZW5lIiwgY2FjaGU9c2VsZi5zdGFtcGNhY2hlKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICdTZXRzY2VuZSBzdGFtcCBjdXJyZW50IGZvciB0YXNrICVzKCVzKScsIHRhc2ssIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHJlYWx0YXNrKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhbXBwcmVzZW50LmFwcGVuZCh0YXNrKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnRhc2tfc2tpcCh0YXNrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgc2VsZi5ycS5jaGVja19zdGFtcF90YXNrKHJlYWx0YXNrLCB0YXNrbmFtZSwgcmVjdXJzZSA9IFRydWUsIGNhY2hlPXNlbGYuc3RhbXBjYWNoZSk6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAnTm9ybWFsIHN0YW1wIGN1cnJlbnQgZm9yIHRhc2sgJXMoJXMpJywgdGFzaywgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcocmVhbHRhc2spKQorICAgICAgICAgICAgICAgICAgICBzdGFtcHByZXNlbnQuYXBwZW5kKHRhc2spCisgICAgICAgICAgICAgICAgICAgIHNlbGYudGFza19za2lwKHRhc2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBzcV9mbi5hcHBlbmQoZm4pCisgICAgICAgICAgICAgICAgc3FfaGFzaGZuLmFwcGVuZChzZWxmLnJxZGF0YS5kYXRhQ2FjaGUuaGFzaGZuW2ZuXSkKKyAgICAgICAgICAgICAgICBzcV9oYXNoLmFwcGVuZChzZWxmLnJxZGF0YS5ydW5xX2hhc2hbcmVhbHRhc2tdKQorICAgICAgICAgICAgICAgIHNxX3Rhc2tuYW1lLmFwcGVuZCh0YXNrbmFtZSkKKyAgICAgICAgICAgICAgICBzcV90YXNrLmFwcGVuZCh0YXNrKQorICAgICAgICAgICAgY2FsbCA9IHNlbGYucnEuaGFzaHZhbGlkYXRlICsgIihzcV9mbiwgc3FfdGFzaywgc3FfaGFzaCwgc3FfaGFzaGZuLCBkKSIKKyAgICAgICAgICAgIGxvY3MgPSB7ICJzcV9mbiIgOiBzcV9mbiwgInNxX3Rhc2siIDogc3FfdGFza25hbWUsICJzcV9oYXNoIiA6IHNxX2hhc2gsICJzcV9oYXNoZm4iIDogc3FfaGFzaGZuLCAiZCIgOiBzZWxmLmNvb2tlci5leHBhbmRlZF9kYXRhIH0KKyAgICAgICAgICAgIHZhbGlkID0gYmIudXRpbHMuYmV0dGVyX2V2YWwoY2FsbCwgbG9jcykKKworICAgICAgICAgICAgdmFsaWRfbmV3ID0gc3RhbXBwcmVzZW50CisgICAgICAgICAgICBmb3IgdiBpbiB2YWxpZDoKKyAgICAgICAgICAgICAgICB2YWxpZF9uZXcuYXBwZW5kKHNxX3Rhc2tbdl0pCisKKyAgICAgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4oc2VsZi5zcV9yZXZkZXBzKSk6CisgICAgICAgICAgICAgICAgaWYgdGFzayBub3QgaW4gdmFsaWRfbmV3IGFuZCB0YXNrIG5vdCBpbiBub2V4ZWM6CisgICAgICAgICAgICAgICAgICAgIHJlYWx0YXNrID0gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVt0YXNrXQorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgJ05vIHBhY2thZ2UgZm91bmQsIHNvIHNraXBwaW5nIHNldHNjZW5lIHRhc2sgJXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcocmVhbHRhc2spKQorICAgICAgICAgICAgICAgICAgICBzZWxmLm91dHJpZ2h0ZmFpbC5hcHBlbmQodGFzaykKKworICAgICAgICBsb2dnZXIuaW5mbygnRXhlY3V0aW5nIFNldFNjZW5lIFRhc2tzJykKKworICAgICAgICBzZWxmLnJxLnN0YXRlID0gcnVuUXVldWVTY2VuZVJ1bgorCisgICAgZGVmIHNjZW5lcXVldWVfdXBkYXRlY291bnRlcnMoc2VsZiwgdGFzaywgZmFpbCA9IEZhbHNlKToKKyAgICAgICAgZm9yIGRlcCBpbiBzZWxmLnNxX2RlcHNbdGFza106CisgICAgICAgICAgICBpZiBmYWlsIGFuZCB0YXNrIGluIHNlbGYuc3FfaGFyZGRlcHMgYW5kIGRlcCBpbiBzZWxmLnNxX2hhcmRkZXBzW3Rhc2tdOgorICAgICAgICAgICAgICAgIHJlYWx0YXNrID0gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVt0YXNrXQorICAgICAgICAgICAgICAgIHJlYWxkZXAgPSBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lW2RlcF0KKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIiVzIHdhcyB1bmF2YWlsYWJsZSBhbmQgaXMgYSBoYXJkIGRlcGVuZGVuY3kgb2YgJXMgc28gc2tpcHBpbmciICUgKHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHJlYWx0YXNrKSwgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcocmVhbGRlcCkpKQorICAgICAgICAgICAgICAgIHNlbGYuc2NlbmVxdWV1ZV91cGRhdGVjb3VudGVycyhkZXAsIGZhaWwpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHRhc2sgbm90IGluIHNlbGYuc3FfcmV2ZGVwczJbZGVwXToKKyAgICAgICAgICAgICAgICAjIE1heSBhbHJlYWR5IGhhdmUgYmVlbiByZW1vdmVkIGJ5IHRoZSBmYWlsIGNhc2UgYWJvdmUKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc2VsZi5zcV9yZXZkZXBzMltkZXBdLnJlbW92ZSh0YXNrKQorICAgICAgICAgICAgaWYgbGVuKHNlbGYuc3FfcmV2ZGVwczJbZGVwXSkgPT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLnJ1bnFfYnVpbGRhYmxlW2RlcF0gPSAxCisKKyAgICBkZWYgdGFza19jb21wbGV0ZW91dHJpZ2h0KHNlbGYsIHRhc2spOgorICAgICAgICAiIiIKKyAgICAgICAgTWFyayBhIHRhc2sgYXMgY29tcGxldGVkCisgICAgICAgIExvb2sgYXQgdGhlIHJldmVyc2UgZGVwZW5kZW5jaWVzIGFuZCBtYXJrIGFueSB0YXNrIHdpdGgKKyAgICAgICAgY29tcGxldGVkIGRlcGVuZGVuY2llcyBhcyBidWlsZGFibGUKKyAgICAgICAgIiIiCisKKyAgICAgICAgaW5kZXggPSBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lW3Rhc2tdCisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAnRm91bmQgdGFzayAlcyB3aGljaCBjb3VsZCBiZSBhY2NlbGVyYXRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyhpbmRleCkpCisKKyAgICAgICAgc2VsZi5zY2VuZXF1ZXVlX2NvdmVyZWQuYWRkKHRhc2spCisgICAgICAgIHNlbGYuc2NlbmVxdWV1ZV91cGRhdGVjb3VudGVycyh0YXNrKQorCisgICAgZGVmIHRhc2tfY29tcGxldGUoc2VsZiwgdGFzayk6CisgICAgICAgIHNlbGYuc3RhdHMudGFza0NvbXBsZXRlZCgpCisgICAgICAgIGJiLmV2ZW50LmZpcmUoc2NlbmVRdWV1ZVRhc2tDb21wbGV0ZWQodGFzaywgc2VsZi5zdGF0cywgc2VsZi5ycSksIHNlbGYuY2ZnRGF0YSkKKyAgICAgICAgc2VsZi50YXNrX2NvbXBsZXRlb3V0cmlnaHQodGFzaykKKworICAgIGRlZiB0YXNrX2ZhaWwoc2VsZiwgdGFzaywgcmVzdWx0KToKKyAgICAgICAgc2VsZi5zdGF0cy50YXNrRmFpbGVkKCkKKyAgICAgICAgYmIuZXZlbnQuZmlyZShzY2VuZVF1ZXVlVGFza0ZhaWxlZCh0YXNrLCBzZWxmLnN0YXRzLCByZXN1bHQsIHNlbGYpLCBzZWxmLmNmZ0RhdGEpCisgICAgICAgIHNlbGYuc2NlbmVxdWV1ZV9ub3Rjb3ZlcmVkLmFkZCh0YXNrKQorICAgICAgICBzZWxmLnNjZW5lcXVldWVfdXBkYXRlY291bnRlcnModGFzaywgVHJ1ZSkKKworICAgIGRlZiB0YXNrX2ZhaWxvdXRyaWdodChzZWxmLCB0YXNrKToKKyAgICAgICAgc2VsZi5ydW5xX3J1bm5pbmdbdGFza10gPSAxCisgICAgICAgIHNlbGYucnVucV9idWlsZGFibGVbdGFza10gPSAxCisgICAgICAgIHNlbGYuc3RhdHMudGFza0NvbXBsZXRlZCgpCisgICAgICAgIHNlbGYuc3RhdHMudGFza1NraXBwZWQoKQorICAgICAgICBpbmRleCA9IHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVbdGFza10KKyAgICAgICAgc2VsZi5zY2VuZXF1ZXVlX25vdGNvdmVyZWQuYWRkKHRhc2spCisgICAgICAgIHNlbGYuc2NlbmVxdWV1ZV91cGRhdGVjb3VudGVycyh0YXNrLCBUcnVlKQorCisgICAgZGVmIHRhc2tfc2tpcChzZWxmLCB0YXNrKToKKyAgICAgICAgc2VsZi5ydW5xX3J1bm5pbmdbdGFza10gPSAxCisgICAgICAgIHNlbGYucnVucV9idWlsZGFibGVbdGFza10gPSAxCisgICAgICAgIHNlbGYudGFza19jb21wbGV0ZW91dHJpZ2h0KHRhc2spCisgICAgICAgIHNlbGYuc3RhdHMudGFza0NvbXBsZXRlZCgpCisgICAgICAgIHNlbGYuc3RhdHMudGFza1NraXBwZWQoKQorCisgICAgZGVmIGV4ZWN1dGUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSdW4gdGhlIHRhc2tzIGluIGEgcXVldWUgcHJlcGFyZWQgYnkgcHJlcGFyZV9ydW5xdWV1ZQorICAgICAgICAiIiIKKworICAgICAgICBzZWxmLnJxLnJlYWRfd29ya2VycygpCisKKyAgICAgICAgdGFzayA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5zdGF0cy5hY3RpdmUgPCBzZWxmLm51bWJlcl90YXNrczoKKyAgICAgICAgICAgICMgRmluZCB0aGUgbmV4dCBzZXRzY2VuZSB0byBydW4KKyAgICAgICAgICAgIGZvciBuZXh0dGFzayBpbiB4cmFuZ2Uoc2VsZi5zdGF0cy50b3RhbCk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5ydW5xX2J1aWxkYWJsZVtuZXh0dGFza10gPT0gMSBhbmQgc2VsZi5ydW5xX3J1bm5pbmdbbmV4dHRhc2tdICE9IDE6CisgICAgICAgICAgICAgICAgICAgIGlmIG5leHR0YXNrIGluIHNlbGYudW5za2lwcGFibGU6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlNldHNjZW5lIHRhc2sgJXMgaXMgdW5za2lwcGFibGUiICUgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcoc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVtuZXh0dGFza10pKSAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgbmV4dHRhc2sgbm90IGluIHNlbGYudW5za2lwcGFibGUgYW5kIGxlbihzZWxmLnNxX3JldmRlcHNbbmV4dHRhc2tdKSA+IDAgYW5kIHNlbGYuc3FfcmV2ZGVwc1tuZXh0dGFza10uaXNzdWJzZXQoc2VsZi5zY2VuZXF1ZXVlX2NvdmVyZWQpIGFuZCBzZWxmLmNoZWNrX2RlcGVuZGVuY2llcyhuZXh0dGFzaywgc2VsZi5zcV9yZXZkZXBzW25leHR0YXNrXSwgVHJ1ZSk6CisgICAgICAgICAgICAgICAgICAgICAgICByZWFsdGFzayA9IHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVbbmV4dHRhc2tdCisgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFtyZWFsdGFza11dCisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZHRhcmdldCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGFyZ2V0IGluIHNlbGYucnFkYXRhLnRhcmdldF9wYWlyczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0YXJnZXRbMF0gPT0gZm4gYW5kIHRhcmdldFsxXSA9PSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbcmVhbHRhc2tdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZHRhcmdldCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBmb3VuZHRhcmdldDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlNraXBwaW5nIHNldHNjZW5lIGZvciB0YXNrICVzIiAlIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVbbmV4dHRhc2tdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhc2tfc2tpcChuZXh0dGFzaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNjZW5lcXVldWVfbm90bmVlZGVkLmFkZChuZXh0dGFzaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBpZiBuZXh0dGFzayBpbiBzZWxmLm91dHJpZ2h0ZmFpbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGFza19mYWlsb3V0cmlnaHQobmV4dHRhc2spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgICAgICAgICB0YXNrID0gbmV4dHRhc2sKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgdGFzayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJlYWx0YXNrID0gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVt0YXNrXQorICAgICAgICAgICAgZm4gPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbcmVhbHRhc2tdXQorCisgICAgICAgICAgICB0YXNrbmFtZSA9IHNlbGYucnFkYXRhLnJ1bnFfdGFza1tyZWFsdGFza10gKyAiX3NldHNjZW5lIgorICAgICAgICAgICAgaWYgc2VsZi5ycS5jaGVja19zdGFtcF90YXNrKHJlYWx0YXNrLCBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbcmVhbHRhc2tdLCByZWN1cnNlID0gVHJ1ZSwgY2FjaGU9c2VsZi5zdGFtcGNhY2hlKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgJ1N0YW1wIGZvciB1bmRlcmx5aW5nIHRhc2sgJXMoJXMpIGlzIGN1cnJlbnQsIHNvIHNraXBwaW5nIHNldHNjZW5lIHZhcmlhbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLCBzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyhyZWFsdGFzaykpCisgICAgICAgICAgICAgICAgc2VsZi50YXNrX2ZhaWxvdXRyaWdodCh0YXNrKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgICAgIGlmIHNlbGYuY29va2VyLmNvbmZpZ3VyYXRpb24uZm9yY2U6CisgICAgICAgICAgICAgICAgZm9yIHRhcmdldCBpbiBzZWxmLnJxZGF0YS50YXJnZXRfcGFpcnM6CisgICAgICAgICAgICAgICAgICAgIGlmIHRhcmdldFswXSA9PSBmbiBhbmQgdGFyZ2V0WzFdID09IHNlbGYucnFkYXRhLnJ1bnFfdGFza1tyZWFsdGFza106CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhc2tfZmFpbG91dHJpZ2h0KHRhc2spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICAgICBpZiBzZWxmLnJxLmNoZWNrX3N0YW1wX3Rhc2socmVhbHRhc2ssIHRhc2tuYW1lLCBjYWNoZT1zZWxmLnN0YW1wY2FjaGUpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAnU2V0c2NlbmUgc3RhbXAgY3VycmVudCB0YXNrICVzKCVzKSwgc28gc2tpcCBpdCBhbmQgaXRzIGRlcGVuZGVuY2llcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2ssIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHJlYWx0YXNrKSkKKyAgICAgICAgICAgICAgICBzZWxmLnRhc2tfc2tpcCh0YXNrKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgICAgIHN0YXJ0ZXZlbnQgPSBzY2VuZVF1ZXVlVGFza1N0YXJ0ZWQodGFzaywgc2VsZi5zdGF0cywgc2VsZi5ycSkKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoc3RhcnRldmVudCwgc2VsZi5jZmdEYXRhKQorCisgICAgICAgICAgICB0YXNrZGVwID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlLnRhc2tfZGVwc1tmbl0KKyAgICAgICAgICAgIGlmICdmYWtlcm9vdCcgaW4gdGFza2RlcCBhbmQgdGFza25hbWUgaW4gdGFza2RlcFsnZmFrZXJvb3QnXToKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5ycS5mYWtld29ya2VyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJxLnN0YXJ0X2Zha2V3b3JrZXIoc2VsZikKKyAgICAgICAgICAgICAgICBzZWxmLnJxLmZha2V3b3JrZXIuc3RkaW4ud3JpdGUoIjxydW50YXNrPiIgKyBwaWNrbGUuZHVtcHMoKGZuLCByZWFsdGFzaywgdGFza25hbWUsIFRydWUsIHNlbGYuY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhmbiksIE5vbmUpKSArICI8L3J1bnRhc2s+IikKKyAgICAgICAgICAgICAgICBzZWxmLnJxLmZha2V3b3JrZXIuc3RkaW4uZmx1c2goKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnJxLndvcmtlci5zdGRpbi53cml0ZSgiPHJ1bnRhc2s+IiArIHBpY2tsZS5kdW1wcygoZm4sIHJlYWx0YXNrLCB0YXNrbmFtZSwgVHJ1ZSwgc2VsZi5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGZuKSwgTm9uZSkpICsgIjwvcnVudGFzaz4iKQorICAgICAgICAgICAgICAgIHNlbGYucnEud29ya2VyLnN0ZGluLmZsdXNoKCkKKworICAgICAgICAgICAgc2VsZi5ydW5xX3J1bm5pbmdbdGFza10gPSAxCisgICAgICAgICAgICBzZWxmLnN0YXRzLnRhc2tBY3RpdmUoKQorICAgICAgICAgICAgaWYgc2VsZi5zdGF0cy5hY3RpdmUgPCBzZWxmLm51bWJlcl90YXNrczoKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGlmIHNlbGYuc3RhdHMuYWN0aXZlID4gMDoKKyAgICAgICAgICAgIHNlbGYucnEucmVhZF93b3JrZXJzKCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJxLmFjdGl2ZV9mZHMoKQorCisgICAgICAgICNmb3IgdGFzayBpbiB4cmFuZ2Uoc2VsZi5zdGF0cy50b3RhbCk6CisgICAgICAgICMgICAgaWYgc2VsZi5ydW5xX3J1bm5pbmdbdGFza10gIT0gMToKKyAgICAgICAgIyAgICAgICAgYnVpbGRhYmxlID0gc2VsZi5ydW5xX2J1aWxkYWJsZVt0YXNrXQorICAgICAgICAjICAgICAgICByZXZkZXBzID0gc2VsZi5zcV9yZXZkZXBzW3Rhc2tdCisgICAgICAgICMgICAgICAgIGJiLndhcm4oIkZvdW5kIHdlIGRpZG4ndCBydW4gJXMgJXMgJXMgJXMiICUgKHRhc2ssIGJ1aWxkYWJsZSwgc3RyKHJldmRlcHMpLCBzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyhzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lW3Rhc2tdKSkpCisKKyAgICAgICAgIyBDb252ZXJ0IHNjZW5lcXVldWVfY292ZXJlZCB0YXNrIG51bWJlcnMgaW50byBmdWxsIHRhc2tncmFwaCBpZHMKKyAgICAgICAgb2xkY292ZXJlZCA9IHNlbGYuc2NlbmVxdWV1ZV9jb3ZlcmVkCisgICAgICAgIHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkID0gc2V0KCkKKyAgICAgICAgZm9yIHRhc2sgaW4gb2xkY292ZXJlZDoKKyAgICAgICAgICAgIHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkLmFkZChzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lW3Rhc2tdKQorICAgICAgICBzZWxmLnJxLnNjZW5lcXVldWVfbm90Y292ZXJlZCA9IHNldCgpCisgICAgICAgIGZvciB0YXNrIGluIHNlbGYuc2NlbmVxdWV1ZV9ub3Rjb3ZlcmVkOgorICAgICAgICAgICAgc2VsZi5ycS5zY2VuZXF1ZXVlX25vdGNvdmVyZWQuYWRkKHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVbdGFza10pCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICdXZSBjYW4gc2tpcCB0YXNrcyAlcycsIHNvcnRlZChzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZCkpCisKKyAgICAgICAgc2VsZi5ycS5zdGF0ZSA9IHJ1blF1ZXVlUnVuSW5pdAorCisgICAgICAgIGNvbXBsZXRlZXZlbnQgPSBzY2VuZVF1ZXVlQ29tcGxldGUoc2VsZi5zdGF0cywgc2VsZi5ycSkKKyAgICAgICAgYmIuZXZlbnQuZmlyZShjb21wbGV0ZWV2ZW50LCBzZWxmLmNmZ0RhdGEpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBydW5xdWV1ZV9wcm9jZXNzX3dhaXRwaWQoc2VsZiwgdGFzaywgc3RhdHVzKToKKyAgICAgICAgdGFzayA9IHNlbGYucnEucnFkYXRhLnJ1bnFfc2V0c2NlbmUuaW5kZXgodGFzaykKKworICAgICAgICBSdW5RdWV1ZUV4ZWN1dGUucnVucXVldWVfcHJvY2Vzc193YWl0cGlkKHNlbGYsIHRhc2ssIHN0YXR1cykKKworY2xhc3MgVGFza0ZhaWx1cmUoRXhjZXB0aW9uKToKKyAgICAiIiIKKyAgICBFeGNlcHRpb24gcmFpc2VkIHdoZW4gYSB0YXNrIGluIGEgcnVucXVldWUgZmFpbHMKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CisgICAgICAgIHNlbGYuYXJncyA9IHgKKworCitjbGFzcyBydW5RdWV1ZUV4aXRXYWl0KGJiLmV2ZW50LkV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB3aGVuIHdhaXRpbmcgZm9yIHRhc2sgcHJvY2Vzc2VzIHRvIGV4aXQKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZW1haW4pOgorICAgICAgICBzZWxmLnJlbWFpbiA9IHJlbWFpbgorICAgICAgICBzZWxmLm1lc3NhZ2UgPSAiV2FpdGluZyBmb3IgJXMgYWN0aXZlIHRhc2tzIHRvIGZpbmlzaCIgJSByZW1haW4KKyAgICAgICAgYmIuZXZlbnQuRXZlbnQuX19pbml0X18oc2VsZikKKworY2xhc3MgcnVuUXVldWVFdmVudChiYi5ldmVudC5FdmVudCk6CisgICAgIiIiCisgICAgQmFzZSBydW5RdWV1ZSBldmVudCBjbGFzcworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXNrLCBzdGF0cywgcnEpOgorICAgICAgICBzZWxmLnRhc2tpZCA9IHRhc2sKKyAgICAgICAgc2VsZi50YXNrc3RyaW5nID0gcnEucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHRhc2spCisgICAgICAgIHNlbGYudGFza25hbWUgPSBycS5ycWRhdGEuZ2V0X3Rhc2tfbmFtZSh0YXNrKQorICAgICAgICBzZWxmLnRhc2tmaWxlID0gcnEucnFkYXRhLmdldF90YXNrX2ZpbGUodGFzaykKKyAgICAgICAgc2VsZi50YXNraGFzaCA9IHJxLnJxZGF0YS5nZXRfdGFza19oYXNoKHRhc2spCisgICAgICAgIHNlbGYuc3RhdHMgPSBzdGF0cy5jb3B5KCkKKyAgICAgICAgYmIuZXZlbnQuRXZlbnQuX19pbml0X18oc2VsZikKKworY2xhc3Mgc2NlbmVRdWV1ZUV2ZW50KHJ1blF1ZXVlRXZlbnQpOgorICAgICIiIgorICAgIEJhc2Ugc2NlbmVRdWV1ZSBldmVudCBjbGFzcworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXNrLCBzdGF0cywgcnEsIG5vZXhlYz1GYWxzZSk6CisgICAgICAgIHJ1blF1ZXVlRXZlbnQuX19pbml0X18oc2VsZiwgdGFzaywgc3RhdHMsIHJxKQorICAgICAgICByZWFsdGFzayA9IHJxLnJxZGF0YS5ydW5xX3NldHNjZW5lW3Rhc2tdCisgICAgICAgIHNlbGYudGFza3N0cmluZyA9IHJxLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyhyZWFsdGFzaywgIl9zZXRzY2VuZSIpCisgICAgICAgIHNlbGYudGFza25hbWUgPSBycS5ycWRhdGEuZ2V0X3Rhc2tfbmFtZShyZWFsdGFzaykgKyAiX3NldHNjZW5lIgorICAgICAgICBzZWxmLnRhc2tmaWxlID0gcnEucnFkYXRhLmdldF90YXNrX2ZpbGUocmVhbHRhc2spCisgICAgICAgIHNlbGYudGFza2hhc2ggPSBycS5ycWRhdGEuZ2V0X3Rhc2tfaGFzaChyZWFsdGFzaykKKworY2xhc3MgcnVuUXVldWVUYXNrU3RhcnRlZChydW5RdWV1ZUV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCBub3RpZnlpbmcgYSB0YXNrIHdhcyBzdGFydGVkCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhc2ssIHN0YXRzLCBycSwgbm9leGVjPUZhbHNlKToKKyAgICAgICAgcnVuUXVldWVFdmVudC5fX2luaXRfXyhzZWxmLCB0YXNrLCBzdGF0cywgcnEpCisgICAgICAgIHNlbGYubm9leGVjID0gbm9leGVjCisKK2NsYXNzIHNjZW5lUXVldWVUYXNrU3RhcnRlZChzY2VuZVF1ZXVlRXZlbnQpOgorICAgICIiIgorICAgIEV2ZW50IG5vdGlmeWluZyBhIHNldHNjZW5lIHRhc2sgd2FzIHN0YXJ0ZWQKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGFzaywgc3RhdHMsIHJxLCBub2V4ZWM9RmFsc2UpOgorICAgICAgICBzY2VuZVF1ZXVlRXZlbnQuX19pbml0X18oc2VsZiwgdGFzaywgc3RhdHMsIHJxKQorICAgICAgICBzZWxmLm5vZXhlYyA9IG5vZXhlYworCitjbGFzcyBydW5RdWV1ZVRhc2tGYWlsZWQocnVuUXVldWVFdmVudCk6CisgICAgIiIiCisgICAgRXZlbnQgbm90aWZ5aW5nIGEgdGFzayBmYWlsZWQKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGFzaywgc3RhdHMsIGV4aXRjb2RlLCBycSk6CisgICAgICAgIHJ1blF1ZXVlRXZlbnQuX19pbml0X18oc2VsZiwgdGFzaywgc3RhdHMsIHJxKQorICAgICAgICBzZWxmLmV4aXRjb2RlID0gZXhpdGNvZGUKKworY2xhc3Mgc2NlbmVRdWV1ZVRhc2tGYWlsZWQoc2NlbmVRdWV1ZUV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCBub3RpZnlpbmcgYSBzZXRzY2VuZSB0YXNrIGZhaWxlZAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXNrLCBzdGF0cywgZXhpdGNvZGUsIHJxKToKKyAgICAgICAgc2NlbmVRdWV1ZUV2ZW50Ll9faW5pdF9fKHNlbGYsIHRhc2ssIHN0YXRzLCBycSkKKyAgICAgICAgc2VsZi5leGl0Y29kZSA9IGV4aXRjb2RlCisKK2NsYXNzIHNjZW5lUXVldWVDb21wbGV0ZShzY2VuZVF1ZXVlRXZlbnQpOgorICAgICIiIgorICAgIEV2ZW50IHdoZW4gYWxsIHRoZSBzY2VuZVF1ZXVlIHRhc2tzIGFyZSBjb21wbGV0ZQorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGF0cywgcnEpOgorICAgICAgICBzZWxmLnN0YXRzID0gc3RhdHMuY29weSgpCisgICAgICAgIGJiLmV2ZW50LkV2ZW50Ll9faW5pdF9fKHNlbGYpCisKK2NsYXNzIHJ1blF1ZXVlVGFza0NvbXBsZXRlZChydW5RdWV1ZUV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCBub3RpZnlpbmcgYSB0YXNrIGNvbXBsZXRlZAorICAgICIiIgorCitjbGFzcyBzY2VuZVF1ZXVlVGFza0NvbXBsZXRlZChzY2VuZVF1ZXVlRXZlbnQpOgorICAgICIiIgorICAgIEV2ZW50IG5vdGlmeWluZyBhIHNldHNjZW5lIHRhc2sgY29tcGxldGVkCisgICAgIiIiCisKK2NsYXNzIHJ1blF1ZXVlVGFza1NraXBwZWQocnVuUXVldWVFdmVudCk6CisgICAgIiIiCisgICAgRXZlbnQgbm90aWZ5aW5nIGEgdGFzayB3YXMgc2tpcHBlZAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXNrLCBzdGF0cywgcnEsIHJlYXNvbik6CisgICAgICAgIHJ1blF1ZXVlRXZlbnQuX19pbml0X18oc2VsZiwgdGFzaywgc3RhdHMsIHJxKQorICAgICAgICBzZWxmLnJlYXNvbiA9IHJlYXNvbgorCitjbGFzcyBydW5RdWV1ZVBpcGUoKToKKyAgICAiIiIKKyAgICBBYnN0cmFjdGlvbiBmb3IgYSBwaXBlIGJldHdlZW4gYSB3b3JrZXIgdGhyZWFkIGFuZCB0aGUgc2VydmVyCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBpcGVpbiwgcGlwZW91dCwgZCwgcnEsIHJxZXhlYyk6CisgICAgICAgIHNlbGYuaW5wdXQgPSBwaXBlaW4KKyAgICAgICAgaWYgcGlwZW91dDoKKyAgICAgICAgICAgIHBpcGVvdXQuY2xvc2UoKQorICAgICAgICBiYi51dGlscy5ub25ibG9ja2luZ2ZkKHNlbGYuaW5wdXQpCisgICAgICAgIHNlbGYucXVldWUgPSAiIgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYucnEgPSBycQorICAgICAgICBzZWxmLnJxZXhlYyA9IHJxZXhlYworCisgICAgZGVmIHNldHJ1bnF1ZXVlZXhlYyhzZWxmLCBycWV4ZWMpOgorICAgICAgICBzZWxmLnJxZXhlYyA9IHJxZXhlYworCisgICAgZGVmIHJlYWQoc2VsZik6CisgICAgICAgIGZvciB3IGluIFtzZWxmLnJxLndvcmtlciwgc2VsZi5ycS5mYWtld29ya2VyXToKKyAgICAgICAgICAgIGlmIG5vdCB3OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB3LnBvbGwoKQorICAgICAgICAgICAgaWYgdy5yZXR1cm5jb2RlIGlzIG5vdCBOb25lIGFuZCBub3Qgc2VsZi5ycS50ZWFyZG93bjoKKyAgICAgICAgICAgICAgICBuYW1lID0gTm9uZQorICAgICAgICAgICAgICAgIGlmIHNlbGYucnEud29ya2VyIGFuZCB3LnBpZCA9PSBzZWxmLnJxLndvcmtlci5waWQ6CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiV29ya2VyIgorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5ycS5mYWtld29ya2VyIGFuZCB3LnBpZCA9PSBzZWxmLnJxLmZha2V3b3JrZXIucGlkOgorICAgICAgICAgICAgICAgICAgICBuYW1lID0gIkZha2Vyb290IgorICAgICAgICAgICAgICAgIGJiLmVycm9yKCIlcyBwcm9jZXNzICglcykgZXhpdGVkIHVuZXhwZWN0ZWRseSAoJXMpLCBzaHV0dGluZyBkb3duLi4uIiAlIChuYW1lLCB3LnBpZCwgc3RyKHcucmV0dXJuY29kZSkpKQorICAgICAgICAgICAgICAgIHNlbGYucnEuZmluaXNoX3J1bnF1ZXVlKFRydWUpCisKKyAgICAgICAgc3RhcnQgPSBsZW4oc2VsZi5xdWV1ZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5xdWV1ZSA9IHNlbGYucXVldWUgKyBzZWxmLmlucHV0LnJlYWQoMTAyNDAwKQorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIElPRXJyb3IpIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVBR0FJTjoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBlbmQgPSBsZW4oc2VsZi5xdWV1ZSkKKyAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgIHdoaWxlIGZvdW5kIGFuZCBsZW4oc2VsZi5xdWV1ZSk6CisgICAgICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgICAgICBpbmRleCA9IHNlbGYucXVldWUuZmluZCgiPC9ldmVudD4iKQorICAgICAgICAgICAgd2hpbGUgaW5kZXggIT0gLTEgYW5kIHNlbGYucXVldWUuc3RhcnRzd2l0aCgiPGV2ZW50PiIpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZXZlbnQgPSBwaWNrbGUubG9hZHMoc2VsZi5xdWV1ZVs3OmluZGV4XSkKKyAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlJ1blF1ZXVlIiwgImZhaWxlZCBsb2FkIHBpY2tsZSAnJXMnOiAnJXMnIiAlIChlLCBzZWxmLnF1ZXVlWzc6aW5kZXhdKSkKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlX2Zyb21fd29ya2VyKGV2ZW50LCBzZWxmLmQpCisgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5xdWV1ZSA9IHNlbGYucXVldWVbaW5kZXgrODpdCisgICAgICAgICAgICAgICAgaW5kZXggPSBzZWxmLnF1ZXVlLmZpbmQoIjwvZXZlbnQ+IikKKyAgICAgICAgICAgIGluZGV4ID0gc2VsZi5xdWV1ZS5maW5kKCI8L2V4aXRjb2RlPiIpCisgICAgICAgICAgICB3aGlsZSBpbmRleCAhPSAtMSBhbmQgc2VsZi5xdWV1ZS5zdGFydHN3aXRoKCI8ZXhpdGNvZGU+Iik6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB0YXNrLCBzdGF0dXMgPSBwaWNrbGUubG9hZHMoc2VsZi5xdWV1ZVsxMDppbmRleF0pCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJSdW5RdWV1ZSIsICJmYWlsZWQgbG9hZCBwaWNrbGUgJyVzJzogJyVzJyIgJSAoZSwgc2VsZi5xdWV1ZVsxMDppbmRleF0pKQorICAgICAgICAgICAgICAgIHNlbGYucnFleGVjLnJ1bnF1ZXVlX3Byb2Nlc3Nfd2FpdHBpZCh0YXNrLCBzdGF0dXMpCisgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5xdWV1ZSA9IHNlbGYucXVldWVbaW5kZXgrMTE6XQorICAgICAgICAgICAgICAgIGluZGV4ID0gc2VsZi5xdWV1ZS5maW5kKCI8L2V4aXRjb2RlPiIpCisgICAgICAgIHJldHVybiAoZW5kID4gc3RhcnQpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHdoaWxlIHNlbGYucmVhZCgpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgbGVuKHNlbGYucXVldWUpID4gMDoKKyAgICAgICAgICAgIHByaW50KCJXYXJuaW5nLCB3b3JrZXIgbGVmdCBwYXJ0aWFsIG1lc3NhZ2U6ICVzIiAlIHNlbGYucXVldWUpCisgICAgICAgIHNlbGYuaW5wdXQuY2xvc2UoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zZXJ2ZXIvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3NlcnZlci9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTVlNDgwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zZXJ2ZXIvX19pbml0X18ucHkKQEAgLTAsMCArMSw5NiBAQAorIworIyBCaXRCYWtlIEJhc2UgU2VydmVyIENvZGUKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2IC0gMjAwNyAgTWljaGFlbCAnTWlja2V5JyBMYXVlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDYgLSAyMDA4ICBSaWNoYXJkIFB1cmRpZQorIyBDb3B5cmlnaHQgKEMpIDIwMTMgICAgICAgICBBbGV4YW5kcnUgRGFtaWFuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisiIiIgQmFzZSBjb2RlIGZvciBCaXRiYWtlIHNlcnZlciBwcm9jZXNzCisKK0hhdmUgYSBjb21tb24gYmFzZSBmb3IgdGhhdCBhbGwgQml0YmFrZSBzZXJ2ZXIgY2xhc3NlcyBlbnN1cmVzIGEgY29uc2lzdGVudAorYXBwcm9hY2ggdG8gdGhlIGludGVyZmFjZSwgYW5kIG1pbmltaXplIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBjb2RlIGR1cGxpY2F0aW9uLgorCisiIiIKKworIiIiICBCYXNlSW1wbFNlcnZlcigpIHRoZSBiYXNlIGNsYXNzIGZvciBhbGwgWFhTZXJ2ZXIoKSBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICBUaGVzZSBjbGFzc2VzIGNvbnRhaW4gdGhlIGFjdHVhbCBjb2RlIHRoYXQgcnVucyB0aGUgc2VydmVyIHNpZGUsIGkuZS4KKyAgICBsaXN0ZW5zIGZvciB0aGUgY29tbWFuZHMgYW5kIGV4ZWN1dGVzIHRoZW0uIEFsdGhvdWdoIHRoZXNlIGltcGxlbWVudGF0aW9ucworICAgIGNvbnRhaW4gYWxsIHRoZSBkYXRhIG9mIHRoZSBvcmlnaW5hbCBiaXRiYWtlIGNvbW1hbmQsIGkuZSB0aGUgY29va2VyIGluc3RhbmNlLAorICAgIHRoZXkgbWF5IHdlbGwgcnVuIG9uIGEgZGlmZmVyZW50IHByb2Nlc3Mgb3IgZXZlbiBtYWNoaW5lLgorCisiIiIKKworY2xhc3MgQmFzZUltcGxTZXJ2ZXIoKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX2lkbGVmdW5zID0ge30KKworICAgIGRlZiBhZGRjb29rZXIoc2VsZiwgY29va2VyKToKKyAgICAgICAgc2VsZi5jb29rZXIgPSBjb29rZXIKKworICAgIGRlZiByZWdpc3Rlcl9pZGxlX2Z1bmN0aW9uKHNlbGYsIGZ1bmN0aW9uLCBkYXRhKToKKyAgICAgICAgIiIiUmVnaXN0ZXIgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hpbGUgdGhlIHNlcnZlciBpcyBpZGxlIiIiCisgICAgICAgIGFzc2VydCBoYXNhdHRyKGZ1bmN0aW9uLCAnX19jYWxsX18nKQorICAgICAgICBzZWxmLl9pZGxlZnVuc1tmdW5jdGlvbl0gPSBkYXRhCisKKworCisiIiIgQml0QmFrZUJhc2VTZXJ2ZXJDb25uZWN0aW9uIGNsYXNzIGlzIHRoZSBjb21tb24gYW5jZXN0b3IgdG8gYWxsCisgICAgQml0QmFrZVNlcnZlckNvbm5lY3Rpb24gY2xhc3Nlcy4KKworICAgIFRoZXNlIGNsYXNzZXMgY29udHJvbCB0aGUgcmVtb3RlIHNlcnZlci4gVGhlIG9ubHkgY29tbWFuZCBjdXJyZW50bHkKKyAgICBpbXBsZW1lbnRlZCBpcyB0aGUgdGVybWluYXRlKCkgY29tbWFuZC4KKworIiIiCisKK2NsYXNzIEJpdEJha2VCYXNlU2VydmVyQ29ubmVjdGlvbigpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXJJbXBsKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgcGFzcworCisKKyIiIiBCaXRCYWtlQmFzZVNlcnZlciBjbGFzcyBpcyB0aGUgY29tbW9uIGFuY2VzdG9yIHRvIGFsbCBCaXRiYWtlIHNlcnZlcnMKKworICAgIERlcml2ZSB0aGlzIGNsYXNzIGluIG9yZGVyIHRvIGltcGxlbWVudCBhIEJpdEJha2VTZXJ2ZXIgd2hpY2ggaXMgdGhlCisgICAgY29udHJvbGxpbmcgc3R1YiBmb3IgdGhlIGFjdHVhbCBzZXJ2ZXIgaW1wbGVtZW50YXRpb24KKworIiIiCitjbGFzcyBCaXRCYWtlQmFzZVNlcnZlcihvYmplY3QpOgorICAgIGRlZiBpbml0U2VydmVyKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZlckltcGwgPSBOb25lICAjIHdlIGVuc3VyZSBhIHJ1bnRpbWUgY3Jhc2ggaWYgbm90IG92ZXJsb2FkZWQKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gTm9uZQorICAgICAgICByZXR1cm4KKworICAgIGRlZiBhZGRjb29rZXIoc2VsZiwgY29va2VyKToKKyAgICAgICAgc2VsZi5jb29rZXIgPSBjb29rZXIKKyAgICAgICAgc2VsZi5zZXJ2ZXJJbXBsLmFkZGNvb2tlcihjb29rZXIpCisKKyAgICBkZWYgZ2V0U2VydmVySWRsZUNCKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zZXJ2ZXJJbXBsLnJlZ2lzdGVyX2lkbGVfZnVuY3Rpb24KKworICAgIGRlZiBzYXZlQ29ubmVjdGlvbkRldGFpbHMoc2VsZik6CisgICAgICAgIHJldHVybgorCisgICAgZGVmIGRldGFjaChzZWxmKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgZXN0YWJsaXNoQ29ubmVjdGlvbihzZWxmLCBmZWF0dXJlc2V0KToKKyAgICAgICAgcmFpc2UgICAiTXVzdCByZWRlZmluZSB0aGUgJXMuZXN0YWJsaXNoQ29ubmVjdGlvbigpIiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisKKyAgICBkZWYgZW5kU2Vzc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uLnRlcm1pbmF0ZSgpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3NlcnZlci9wcm9jZXNzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zZXJ2ZXIvcHJvY2Vzcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmNhMzUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zZXJ2ZXIvcHJvY2Vzcy5weQpAQCAtMCwwICsxLDI2NCBAQAorIworIyBCaXRCYWtlIFByb2Nlc3MgYmFzZWQgc2VydmVyLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTAgQm9iIEZvZXJzdGVyIDxyb2JlcnRAZXJhZnguY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIiIiCisgICAgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzIGJhc2VkIHNlcnZlciBmb3IgYml0YmFrZS4KKyIiIgorCitpbXBvcnQgYmIKK2ltcG9ydCBiYi5ldmVudAoraW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK2ltcG9ydCBvcworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCBzZWxlY3QKK2Zyb20gUXVldWUgaW1wb3J0IEVtcHR5Citmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgRXZlbnQsIFByb2Nlc3MsIHV0aWwsIFF1ZXVlLCBQaXBlLCBxdWV1ZXMsIE1hbmFnZXIKKworZnJvbSAuIGltcG9ydCBCaXRCYWtlQmFzZVNlcnZlciwgQml0QmFrZUJhc2VTZXJ2ZXJDb25uZWN0aW9uLCBCYXNlSW1wbFNlcnZlcgorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZScpCisKK2NsYXNzIFNlcnZlckNvbW11bmljYXRvcigpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uZWN0aW9uLCBldmVudF9oYW5kbGUsIHNlcnZlcik6CisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb24KKyAgICAgICAgc2VsZi5ldmVudF9oYW5kbGUgPSBldmVudF9oYW5kbGUKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIKKworICAgIGRlZiBydW5Db21tYW5kKHNlbGYsIGNvbW1hbmQpOgorICAgICAgICAjIEB0b2RvIHRyeS9leGNlcHQKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uLnNlbmQoY29tbWFuZCkKKworICAgICAgICBpZiBub3Qgc2VsZi5zZXJ2ZXIuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQKKworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgIyBkb24ndCBsZXQgdGhlIHVzZXIgY3RybC1jIHdoaWxlIHdlJ3JlIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbm5lY3Rpb24ucG9sbCgyMCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24ucmVjdigpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoIlRpbWVvdXQgd2hpbGUgYXR0ZW1wdGluZyB0byBjb21tdW5pY2F0ZSB3aXRoIGJpdGJha2Ugc2VydmVyIikKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgZ2V0RXZlbnRIYW5kbGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmV2ZW50X2hhbmRsZS52YWx1ZQorCitjbGFzcyBFdmVudEFkYXB0ZXIoKToKKyAgICAiIiIKKyAgICBBZGFwdGVyIHRvIHdyYXAgb3VyIGV2ZW50IHF1ZXVlIHNpbmNlIHRoZSBjYWxsZXIgKGJiLmV2ZW50KSBleHBlY3RzIHRvCisgICAgY2FsbCBhIHNlbmQoKSBtZXRob2QsIGJ1dCBvdXIgYWN0dWFsIHF1ZXVlIG9ubHkgaGFzIHB1dCgpCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHF1ZXVlKToKKyAgICAgICAgc2VsZi5xdWV1ZSA9IHF1ZXVlCisKKyAgICBkZWYgc2VuZChzZWxmLCBldmVudCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucXVldWUucHV0KGV2ZW50KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKKyAgICAgICAgICAgIHByaW50KCJFdmVudEFkYXB0ZXIgcHVrZWQ6ICVzIiAlIHN0cihlcnIpKQorCisKK2NsYXNzIFByb2Nlc3NTZXJ2ZXIoUHJvY2VzcywgQmFzZUltcGxTZXJ2ZXIpOgorICAgIHByb2ZpbGVfZmlsZW5hbWUgPSAicHJvZmlsZS5sb2ciCisgICAgcHJvZmlsZV9wcm9jZXNzZWRfZmlsZW5hbWUgPSAicHJvZmlsZS5sb2cucHJvY2Vzc2VkIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1hbmRfY2hhbm5lbCwgZXZlbnRfcXVldWUsIGZlYXR1cmVsaXN0KToKKyAgICAgICAgQmFzZUltcGxTZXJ2ZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgUHJvY2Vzcy5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmNvbW1hbmRfY2hhbm5lbCA9IGNvbW1hbmRfY2hhbm5lbAorICAgICAgICBzZWxmLmV2ZW50X3F1ZXVlID0gZXZlbnRfcXVldWUKKyAgICAgICAgc2VsZi5ldmVudCA9IEV2ZW50QWRhcHRlcihldmVudF9xdWV1ZSkKKyAgICAgICAgc2VsZi5mZWF0dXJlbGlzdCA9IGZlYXR1cmVsaXN0CisgICAgICAgIHNlbGYucXVpdCA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5xdWl0aW4sIHNlbGYucXVpdG91dCA9IFBpcGUoKQorICAgICAgICBzZWxmLmV2ZW50X2hhbmRsZSA9IG11bHRpcHJvY2Vzc2luZy5WYWx1ZSgiaSIpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBmb3IgZXZlbnQgaW4gYmIuZXZlbnQudWlfcXVldWU6CisgICAgICAgICAgICBzZWxmLmV2ZW50X3F1ZXVlLnB1dChldmVudCkKKyAgICAgICAgc2VsZi5ldmVudF9oYW5kbGUudmFsdWUgPSBiYi5ldmVudC5yZWdpc3Rlcl9VSUhoYW5kbGVyKHNlbGYsIFRydWUpCisKKyAgICAgICAgYmIuY29va2VyLnNlcnZlcl9tYWluKHNlbGYuY29va2VyLCBzZWxmLm1haW4pCisKKyAgICBkZWYgbWFpbihzZWxmKToKKyAgICAgICAgIyBJZ25vcmUgU0lHSU5UIHdpdGhpbiB0aGUgc2VydmVyLCBhcyBhbGwgU0lHSU5UIGhhbmRsaW5nIGlzIGRvbmUgYnkKKyAgICAgICAgIyB0aGUgVUkgYW5kIGNvbW11bmljYXRlZCB0byB1cworICAgICAgICBzZWxmLnF1aXRpbi5jbG9zZSgpCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0lOVCwgc2lnbmFsLlNJR19JR04pCisgICAgICAgIHdoaWxlIG5vdCBzZWxmLnF1aXQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5jb21tYW5kX2NoYW5uZWwucG9sbCgpOgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gc2VsZi5jb21tYW5kX2NoYW5uZWwucmVjdigpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucnVuQ29tbWFuZChjb21tYW5kKQorICAgICAgICAgICAgICAgIGlmIHNlbGYucXVpdG91dC5wb2xsKCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucXVpdG91dC5yZWN2KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5xdWl0ID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJzdGF0ZUZvcmNlU2h1dGRvd24iXSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICAgICAgc2VsZi5pZGxlX2NvbW1hbmRzKC4xLCBbc2VsZi5jb21tYW5kX2NoYW5uZWwsIHNlbGYucXVpdG91dF0pCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ1J1bm5pbmcgY29tbWFuZCAlcycsIGNvbW1hbmQpCisKKyAgICAgICAgc2VsZi5ldmVudF9xdWV1ZS5jbG9zZSgpCisgICAgICAgIGJiLmV2ZW50LnVucmVnaXN0ZXJfVUlIaGFuZGxlcihzZWxmLmV2ZW50X2hhbmRsZS52YWx1ZSkKKyAgICAgICAgc2VsZi5jb21tYW5kX2NoYW5uZWwuY2xvc2UoKQorICAgICAgICBzZWxmLmNvb2tlci5zaHV0ZG93bihUcnVlKQorICAgICAgICBzZWxmLnF1aXRvdXQuY2xvc2UoKQorCisgICAgZGVmIGlkbGVfY29tbWFuZHMoc2VsZiwgZGVsYXksIGZkcz1Ob25lKToKKyAgICAgICAgbmV4dHNsZWVwID0gZGVsYXkKKyAgICAgICAgaWYgbm90IGZkczoKKyAgICAgICAgICAgIGZkcyA9IFtdCisKKyAgICAgICAgZm9yIGZ1bmN0aW9uLCBkYXRhIGluIHNlbGYuX2lkbGVmdW5zLml0ZW1zKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dmFsID0gZnVuY3Rpb24oc2VsZiwgZGF0YSwgRmFsc2UpCisgICAgICAgICAgICAgICAgaWYgcmV0dmFsIGlzIEZhbHNlOgorICAgICAgICAgICAgICAgICAgICBkZWwgc2VsZi5faWRsZWZ1bnNbZnVuY3Rpb25dCisgICAgICAgICAgICAgICAgICAgIG5leHRzbGVlcCA9IE5vbmUKKyAgICAgICAgICAgICAgICBlbGlmIHJldHZhbCBpcyBUcnVlOgorICAgICAgICAgICAgICAgICAgICBuZXh0c2xlZXAgPSBOb25lCisgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHJldHZhbCwgZmxvYXQpOgorICAgICAgICAgICAgICAgICAgICBpZiAocmV0dmFsIDwgbmV4dHNsZWVwKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRzbGVlcCA9IHJldHZhbAorICAgICAgICAgICAgICAgIGVsaWYgbmV4dHNsZWVwIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZmRzID0gZmRzICsgcmV0dmFsCisgICAgICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXhjLCBiYi5CQkhhbmRsZWRFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdSdW5uaW5nIGlkbGUgZnVuY3Rpb24nKQorICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9pZGxlZnVuc1tmdW5jdGlvbl0KKyAgICAgICAgICAgICAgICBzZWxmLnF1aXQgPSBUcnVlCisKKyAgICAgICAgaWYgbmV4dHNsZWVwIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZWN0LnNlbGVjdChmZHMsW10sW10sbmV4dHNsZWVwKQorCisgICAgZGVmIHJ1bkNvbW1hbmQoc2VsZiwgY29tbWFuZCk6CisgICAgICAgICIiIgorICAgICAgICBSdW4gYSBjb29rZXIgY29tbWFuZCBvbiB0aGUgc2VydmVyCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmNvbW1hbmRfY2hhbm5lbC5zZW5kKHNlbGYuY29va2VyLmNvbW1hbmQucnVuQ29tbWFuZChjb21tYW5kKSkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBzZWxmLnF1aXRpbi5zZW5kKCJxdWl0IikKKyAgICAgICAgc2VsZi5xdWl0aW4uY2xvc2UoKQorCitjbGFzcyBCaXRCYWtlUHJvY2Vzc1NlcnZlckNvbm5lY3Rpb24oQml0QmFrZUJhc2VTZXJ2ZXJDb25uZWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVySW1wbCwgdWlfY2hhbm5lbCwgZXZlbnRfcXVldWUpOgorICAgICAgICBzZWxmLnByb2NzZXJ2ZXIgPSBzZXJ2ZXJJbXBsCisgICAgICAgIHNlbGYudWlfY2hhbm5lbCA9IHVpX2NoYW5uZWwKKyAgICAgICAgc2VsZi5ldmVudF9xdWV1ZSA9IGV2ZW50X3F1ZXVlCisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IFNlcnZlckNvbW11bmljYXRvcihzZWxmLnVpX2NoYW5uZWwsIHNlbGYucHJvY3NlcnZlci5ldmVudF9oYW5kbGUsIHNlbGYucHJvY3NlcnZlcikKKyAgICAgICAgc2VsZi5ldmVudHMgPSBzZWxmLmV2ZW50X3F1ZXVlCisgICAgICAgIHNlbGYudGVybWluYXRlZCA9IEZhbHNlCisKKyAgICBkZWYgc2lndGVybV90ZXJtaW5hdGUoc2VsZik6CisgICAgICAgIGJiLmVycm9yKCJVSSByZWNlaXZlZCBTSUdURVJNIikKKyAgICAgICAgc2VsZi50ZXJtaW5hdGUoKQorCisgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi50ZXJtaW5hdGVkOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYudGVybWluYXRlZCA9IFRydWUKKyAgICAgICAgZGVmIGZsdXNoZXZlbnRzKCk6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZXZlbnQgPSBzZWxmLmV2ZW50X3F1ZXVlLmdldChibG9jaz1GYWxzZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgKEVtcHR5LCBJT0Vycm9yKToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBsb2dnaW5nLkxvZ1JlY29yZCk6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5oYW5kbGUoZXZlbnQpCisKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBzaWduYWwuU0lHX0lHTikKKyAgICAgICAgc2VsZi5wcm9jc2VydmVyLnN0b3AoKQorCisgICAgICAgIHdoaWxlIHNlbGYucHJvY3NlcnZlci5pc19hbGl2ZSgpOgorICAgICAgICAgICAgZmx1c2hldmVudHMoKQorICAgICAgICAgICAgc2VsZi5wcm9jc2VydmVyLmpvaW4oMC4xKQorCisgICAgICAgIHNlbGYudWlfY2hhbm5lbC5jbG9zZSgpCisgICAgICAgIHNlbGYuZXZlbnRfcXVldWUuY2xvc2UoKQorICAgICAgICBzZWxmLmV2ZW50X3F1ZXVlLnNldGV4aXQoKQorCisjIFdyYXAgUXVldWUgdG8gcHJvdmlkZSBBUEkgd2hpY2ggaXNuJ3Qgc2VydmVyIGltcGxlbWVudGF0aW9uIHNwZWNpZmljCitjbGFzcyBQcm9jZXNzRXZlbnRRdWV1ZShtdWx0aXByb2Nlc3NpbmcucXVldWVzLlF1ZXVlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4c2l6ZSk6CisgICAgICAgIG11bHRpcHJvY2Vzc2luZy5xdWV1ZXMuUXVldWUuX19pbml0X18oc2VsZiwgbWF4c2l6ZSkKKyAgICAgICAgc2VsZi5leGl0ID0gRmFsc2UKKworICAgIGRlZiBzZXRleGl0KHNlbGYpOgorICAgICAgICBzZWxmLmV4aXQgPSBUcnVlCisKKyAgICBkZWYgd2FpdEV2ZW50KHNlbGYsIHRpbWVvdXQpOgorICAgICAgICBpZiBzZWxmLmV4aXQ6CisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5zZXJ2ZXIuaXNfYWxpdmUoKToKKyAgICAgICAgICAgICAgICBzZWxmLnNldGV4aXQoKQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXQoVHJ1ZSwgdGltZW91dCkKKyAgICAgICAgZXhjZXB0IEVtcHR5OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBnZXRFdmVudChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IHNlbGYuc2VydmVyLmlzX2FsaXZlKCk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRleGl0KCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0KEZhbHNlKQorICAgICAgICBleGNlcHQgRW1wdHk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIEJpdEJha2VTZXJ2ZXIoQml0QmFrZUJhc2VTZXJ2ZXIpOgorICAgIGRlZiBpbml0U2VydmVyKHNlbGYpOgorICAgICAgICAjIGVzdGFibGlzaCBjb21tdW5pY2F0aW9uIGNoYW5uZWxzLiAgV2UgdXNlIGJpZGlyZWN0aW9uYWwgcGlwZXMgZm9yCisgICAgICAgICMgdWkgPC0tPiBzZXJ2ZXIgY29tbWFuZC9yZXNwb25zZSBwYWlycworICAgICAgICAjIGFuZCBhIHF1ZXVlIGZvciBzZXJ2ZXIgLT4gdWkgZXZlbnQgbm90aWZpY2F0aW9ucworICAgICAgICAjCisgICAgICAgIHNlbGYudWlfY2hhbm5lbCwgc2VsZi5zZXJ2ZXJfY2hhbm5lbCA9IFBpcGUoKQorICAgICAgICBzZWxmLmV2ZW50X3F1ZXVlID0gUHJvY2Vzc0V2ZW50UXVldWUoMCkKKyAgICAgICAgc2VsZi5zZXJ2ZXJJbXBsID0gUHJvY2Vzc1NlcnZlcihzZWxmLnNlcnZlcl9jaGFubmVsLCBzZWxmLmV2ZW50X3F1ZXVlLCBOb25lKQorICAgICAgICBzZWxmLmV2ZW50X3F1ZXVlLnNlcnZlciA9IHNlbGYuc2VydmVySW1wbAorCisgICAgZGVmIGRldGFjaChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ZXJJbXBsLnN0YXJ0KCkKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgZXN0YWJsaXNoQ29ubmVjdGlvbihzZWxmLCBmZWF0dXJlc2V0KToKKworICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBCaXRCYWtlUHJvY2Vzc1NlcnZlckNvbm5lY3Rpb24oc2VsZi5zZXJ2ZXJJbXBsLCBzZWxmLnVpX2NoYW5uZWwsIHNlbGYuZXZlbnRfcXVldWUpCisKKyAgICAgICAgXywgZXJyb3IgPSBzZWxmLmNvbm5lY3Rpb24uY29ubmVjdGlvbi5ydW5Db21tYW5kKFsic2V0RmVhdHVyZXMiLCBmZWF0dXJlc2V0XSkKKyAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBzZXQgdGhlIGNvb2tlciB0byB0aGUgY29ycmVjdCBmZWF0dXJlc2V0OiAlcyIgJSBlcnJvcikKKyAgICAgICAgICAgIHJhaXNlIEJhc2VFeGNlcHRpb24oZXJyb3IpCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIGxhbWJkYSBpLCBzOiBzZWxmLmNvbm5lY3Rpb24uc2lndGVybV90ZXJtaW5hdGUoKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zZXJ2ZXIveG1scnBjLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zZXJ2ZXIveG1scnBjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NjQ3YzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3NlcnZlci94bWxycGMucHkKQEAgLTAsMCArMSwzOTIgQEAKKyMKKyMgQml0QmFrZSBYTUxSUEMgU2VydmVyCisjCisjIENvcHlyaWdodCAoQykgMjAwNiAtIDIwMDcgIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA2IC0gMjAwOCAgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyIiIgorICAgIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYW4geG1scnBjIHNlcnZlciBmb3IgQml0QmFrZS4KKworICAgIFVzZSB0aGlzIGJ5IGRlcml2aW5nIGEgY2xhc3MgZnJvbSBCaXRCYWtlWE1MUlBDU2VydmVyIGFuZCB0aGVuIGFkZGluZworICAgIG1ldGhvZHMgd2hpY2ggeW91IHdhbnQgdG8gImV4cG9ydCIgdmlhIFhNTFJQQy4gSWYgdGhlIG1ldGhvZHMgaGF2ZSB0aGUKKyAgICBwcmVmaXggeG1scnBjXywgdGhlbiByZWdpc3RlcmluZyB0aG9zZSBmdW5jdGlvbiB3aWxsIGhhcHBlbiBhdXRvbWF0aWNhbGx5LAorICAgIGlmIG5vdCwgeW91IG5lZWQgdG8gY2FsbCByZWdpc3Rlcl9mdW5jdGlvbi4KKworICAgIFVzZSByZWdpc3Rlcl9pZGxlX2Z1bmN0aW9uKCkgdG8gYWRkIGEgZnVuY3Rpb24gd2hpY2ggdGhlIHhtbHJwYyBzZXJ2ZXIKKyAgICBjYWxscyBmcm9tIHdpdGhpbiBzZXJ2ZXJfZm9yZXZlciB3aGVuIG5vIHJlcXVlc3RzIGFyZSBwZW5kaW5nLiBNYWtlIHN1cmUKKyAgICB0aGF0IHRob3NlIGZ1bmN0aW9ucyBhcmUgbm9uLWJsb2NraW5nIG9yIGVsc2UgeW91IHdpbGwgaW50cm9kdWNlIGxhdGVuY3kKKyAgICBpbiB0aGUgc2VydmVyJ3MgbWFpbiBsb29wLgorIiIiCisKK2ltcG9ydCBiYgoraW1wb3J0IHhtbHJwY2xpYiwgc3lzCitmcm9tIGJiIGltcG9ydCBkYWVtb25pemUKK2Zyb20gYmIudWkgaW1wb3J0IHVpZXZlbnQKK2ltcG9ydCBoYXNobGliLCB0aW1lCitpbXBvcnQgc29ja2V0CitpbXBvcnQgb3MsIHNpZ25hbAoraW1wb3J0IHRocmVhZGluZwordHJ5OgorICAgIGltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGltcG9ydCBwaWNrbGUKKworREVCVUcgPSBGYWxzZQorCitmcm9tIFNpbXBsZVhNTFJQQ1NlcnZlciBpbXBvcnQgU2ltcGxlWE1MUlBDU2VydmVyLCBTaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlcgoraW1wb3J0IGluc3BlY3QsIHNlbGVjdCwgaHR0cGxpYgorCitmcm9tIC4gaW1wb3J0IEJpdEJha2VCYXNlU2VydmVyLCBCaXRCYWtlQmFzZVNlcnZlckNvbm5lY3Rpb24sIEJhc2VJbXBsU2VydmVyCisKK2NsYXNzIEJCVHJhbnNwb3J0KHhtbHJwY2xpYi5UcmFuc3BvcnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aW1lb3V0KToKKyAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAorICAgICAgICBzZWxmLmNvbm5lY3Rpb25fdG9rZW4gPSBOb25lCisgICAgICAgIHhtbHJwY2xpYi5UcmFuc3BvcnQuX19pbml0X18oc2VsZikKKworICAgICMgTW9kaWZpZWQgZnJvbSBkZWZhdWx0IHRvIHBhc3MgdGltZW91dCB0byBIVFRQQ29ubmVjdGlvbgorICAgIGRlZiBtYWtlX2Nvbm5lY3Rpb24oc2VsZiwgaG9zdCk6CisgICAgICAgICNyZXR1cm4gYW4gZXhpc3RpbmcgY29ubmVjdGlvbiBpZiBwb3NzaWJsZS4gIFRoaXMgYWxsb3dzCisgICAgICAgICNIVFRQLzEuMSBrZWVwLWFsaXZlLgorICAgICAgICBpZiBzZWxmLl9jb25uZWN0aW9uIGFuZCBob3N0ID09IHNlbGYuX2Nvbm5lY3Rpb25bMF06CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY29ubmVjdGlvblsxXQorCisgICAgICAgICMgY3JlYXRlIGEgSFRUUCBjb25uZWN0aW9uIG9iamVjdCBmcm9tIGEgaG9zdCBkZXNjcmlwdG9yCisgICAgICAgIGNob3N0LCBzZWxmLl9leHRyYV9oZWFkZXJzLCB4NTA5ID0gc2VsZi5nZXRfaG9zdF9pbmZvKGhvc3QpCisgICAgICAgICNzdG9yZSB0aGUgaG9zdCBhcmd1bWVudCBhbG9uZyB3aXRoIHRoZSBjb25uZWN0aW9uIG9iamVjdAorICAgICAgICBzZWxmLl9jb25uZWN0aW9uID0gaG9zdCwgaHR0cGxpYi5IVFRQQ29ubmVjdGlvbihjaG9zdCwgdGltZW91dD1zZWxmLnRpbWVvdXQpCisgICAgICAgIHJldHVybiBzZWxmLl9jb25uZWN0aW9uWzFdCisKKyAgICBkZWYgc2V0X2Nvbm5lY3Rpb25fdG9rZW4oc2VsZiwgdG9rZW4pOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb25fdG9rZW4gPSB0b2tlbgorCisgICAgZGVmIHNlbmRfY29udGVudChzZWxmLCBoLCBib2R5KToKKyAgICAgICAgaWYgc2VsZi5jb25uZWN0aW9uX3Rva2VuOgorICAgICAgICAgICAgaC5wdXRoZWFkZXIoIkJpdGJha2UtdG9rZW4iLCBzZWxmLmNvbm5lY3Rpb25fdG9rZW4pCisgICAgICAgIHhtbHJwY2xpYi5UcmFuc3BvcnQuc2VuZF9jb250ZW50KHNlbGYsIGgsIGJvZHkpCisKK2RlZiBfY3JlYXRlX3NlcnZlcihob3N0LCBwb3J0LCB0aW1lb3V0ID0gNjApOgorICAgIHQgPSBCQlRyYW5zcG9ydCh0aW1lb3V0KQorICAgIHMgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoImh0dHA6Ly8lczolZC8iICUgKGhvc3QsIHBvcnQpLCB0cmFuc3BvcnQ9dCwgYWxsb3dfbm9uZT1UcnVlKQorICAgIHJldHVybiBzLCB0CisKK2NsYXNzIEJpdEJha2VTZXJ2ZXJDb21tYW5kcygpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlcik6CisgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyCisgICAgICAgIHNlbGYuaGFzX2NsaWVudCA9IEZhbHNlCisKKyAgICBkZWYgcmVnaXN0ZXJFdmVudEhhbmRsZXIoc2VsZiwgaG9zdCwgcG9ydCk6CisgICAgICAgICIiIgorICAgICAgICBSZWdpc3RlciBhIHJlbW90ZSBVSSBFdmVudCBIYW5kbGVyCisgICAgICAgICIiIgorICAgICAgICBzLCB0ID0gX2NyZWF0ZV9zZXJ2ZXIoaG9zdCwgcG9ydCkKKworICAgICAgICAjIHdlIGRvbid0IGFsbG93IGNvbm5lY3Rpb25zIGlmIHRoZSBjb29rZXIgaXMgcnVubmluZworICAgICAgICBpZiAoc2VsZi5jb29rZXIuc3RhdGUgaW4gW2JiLmNvb2tlci5zdGF0ZS5wYXJzaW5nLCBiYi5jb29rZXIuc3RhdGUucnVubmluZ10pOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBzZWxmLmV2ZW50X2hhbmRsZSA9IGJiLmV2ZW50LnJlZ2lzdGVyX1VJSGhhbmRsZXIocywgVHJ1ZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuZXZlbnRfaGFuZGxlCisKKyAgICBkZWYgdW5yZWdpc3RlckV2ZW50SGFuZGxlcihzZWxmLCBoYW5kbGVyTnVtKToKKyAgICAgICAgIiIiCisgICAgICAgIFVucmVnaXN0ZXIgYSByZW1vdGUgVUkgRXZlbnQgSGFuZGxlcgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIGJiLmV2ZW50LnVucmVnaXN0ZXJfVUlIaGFuZGxlcihoYW5kbGVyTnVtKQorCisgICAgZGVmIHJ1bkNvbW1hbmQoc2VsZiwgY29tbWFuZCk6CisgICAgICAgICIiIgorICAgICAgICBSdW4gYSBjb29rZXIgY29tbWFuZCBvbiB0aGUgc2VydmVyCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5jb29rZXIuY29tbWFuZC5ydW5Db21tYW5kKGNvbW1hbmQsIHNlbGYuc2VydmVyLnJlYWRvbmx5KQorCisgICAgZGVmIGdldEV2ZW50SGFuZGxlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5ldmVudF9oYW5kbGUKKworICAgIGRlZiB0ZXJtaW5hdGVTZXJ2ZXIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUcmlnZ2VyIHRoZSBzZXJ2ZXIgdG8gcXVpdAorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5zZXJ2ZXIucXVpdCA9IFRydWUKKyAgICAgICAgcHJpbnQoIlNlcnZlciAoY29va2VyKSBleGl0aW5nIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgYWRkQ2xpZW50KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmhhc19jbGllbnQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICB0b2tlbiA9IGhhc2hsaWIubWQ1KHN0cih0aW1lLnRpbWUoKSkpLmhleGRpZ2VzdCgpCisgICAgICAgIHNlbGYuc2VydmVyLnNldF9jb25uZWN0aW9uX3Rva2VuKHRva2VuKQorICAgICAgICBzZWxmLmhhc19jbGllbnQgPSBUcnVlCisgICAgICAgIHJldHVybiB0b2tlbgorCisgICAgZGVmIHJlbW92ZUNsaWVudChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5oYXNfY2xpZW50OgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc2V0X2Nvbm5lY3Rpb25fdG9rZW4oTm9uZSkKKyAgICAgICAgICAgIHNlbGYuaGFzX2NsaWVudCA9IEZhbHNlCisgICAgICAgICAgICBpZiBzZWxmLnNlcnZlci5zaW5nbGVfdXNlOgorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnF1aXQgPSBUcnVlCisKKyMgVGhpcyByZXF1ZXN0IGhhbmRsZXIgY2hlY2tzIGlmIHRoZSByZXF1ZXN0IGhhcyBhICJCaXRiYWtlLXRva2VuIiBoZWFkZXIKKyMgZmllbGQgKHRoaXMgY29tZXMgZnJvbSB0aGUgY2xpZW50IHNpZGUpIGFuZCBjb21wYXJlcyBpdCB3aXRoIGl0cyBpbnRlcm5hbAorIyAiQml0YmFrZS10b2tlbiIgZmllbGQgKHRoaXMgY29tZXMgZnJvbSB0aGUgc2VydmVyKS4gSWYgdGhlIHR3byBhcmUgbm90CisjIGVxdWFsLCBpdCBpcyBhc3N1bWVkIHRoYXQgYSBjbGllbnQgaXMgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gdGhlIHNlcnZlcgorIyB3aGlsZSBhbm90aGVyIGNsaWVudCBpcyBjb25uZWN0ZWQgdG8gdGhlIHNlcnZlci4gSW4gdGhpcyBjYXNlLCBhIDUwMyBlcnJvcgorIyAoInNlcnZpY2UgdW5hdmFpbGFibGUiKSBpcyByZXR1cm5lZCB0byB0aGUgY2xpZW50LgorY2xhc3MgQml0QmFrZVhNTFJQQ1JlcXVlc3RIYW5kbGVyKFNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MsIHNlcnZlcik6CisgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyCisgICAgICAgIFNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyLl9faW5pdF9fKHNlbGYsIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzLCBzZXJ2ZXIpCisKKyAgICBkZWYgZG9fUE9TVChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVtb3RlX3Rva2VuID0gc2VsZi5oZWFkZXJzWyJCaXRiYWtlLXRva2VuIl0KKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmVtb3RlX3Rva2VuID0gTm9uZQorICAgICAgICBpZiByZW1vdGVfdG9rZW4gIT0gc2VsZi5zZXJ2ZXIuY29ubmVjdGlvbl90b2tlbiBhbmQgcmVtb3RlX3Rva2VuICE9ICJvYnNlcnZlciI6CisgICAgICAgICAgICBzZWxmLnJlcG9ydF81MDMoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgcmVtb3RlX3Rva2VuID09ICJvYnNlcnZlciI6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIucmVhZG9ubHkgPSBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnJlYWRvbmx5ID0gRmFsc2UKKyAgICAgICAgICAgIFNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyLmRvX1BPU1Qoc2VsZikKKworICAgIGRlZiByZXBvcnRfNTAzKHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoNTAzKQorICAgICAgICByZXNwb25zZSA9ICdObyBtb3JlIGNsaWVudCBhbGxvd2VkJworICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LXR5cGUiLCAidGV4dC9wbGFpbiIpCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIiwgc3RyKGxlbihyZXNwb25zZSkpKQorICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKyAgICAgICAgc2VsZi53ZmlsZS53cml0ZShyZXNwb25zZSkKKworCitjbGFzcyBYTUxSUENQcm94eVNlcnZlcihCYXNlSW1wbFNlcnZlcik6CisgICAgIiIiIG5vdCBhIHJlYWwgd29ya2luZyBzZXJ2ZXIsIGJ1dCBhIHN0dWIgZm9yIGEgcHJveHkgc2VydmVyIGNvbm5lY3Rpb24KKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0KToKKyAgICAgICAgc2VsZi5ob3N0ID0gaG9zdAorICAgICAgICBzZWxmLnBvcnQgPSBwb3J0CisKK2NsYXNzIFhNTFJQQ1NlcnZlcihTaW1wbGVYTUxSUENTZXJ2ZXIsIEJhc2VJbXBsU2VydmVyKToKKyAgICAjIHJlbW92ZSB0aGlzIHdoZW4geW91J3JlIGRvbmUgd2l0aCBkZWJ1Z2dpbmcKKyAgICAjIGFsbG93X3JldXNlX2FkZHJlc3MgPSBUcnVlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW50ZXJmYWNlKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbnN0cnVjdG9yCisgICAgICAgICIiIgorICAgICAgICBCYXNlSW1wbFNlcnZlci5fX2luaXRfXyhzZWxmKQorICAgICAgICBpZiAoaW50ZXJmYWNlWzFdID09IDApOiAgICAgIyBhbm9ueW1vdXMgcG9ydCwgbm90IGdldHRpbmcgcmV1c2VkCisgICAgICAgICAgICBzZWxmLnNpbmdsZV91c2UgPSBUcnVlCisgICAgICAgICMgVXNlIGF1dG8gcG9ydCBjb25maWd1cmF0aW9uCisgICAgICAgIGlmIChpbnRlcmZhY2VbMV0gPT0gLTEpOgorICAgICAgICAgICAgaW50ZXJmYWNlID0gKGludGVyZmFjZVswXSwgMCkKKyAgICAgICAgU2ltcGxlWE1MUlBDU2VydmVyLl9faW5pdF9fKHNlbGYsIGludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RIYW5kbGVyPUJpdEJha2VYTUxSUENSZXF1ZXN0SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ1JlcXVlc3RzPUZhbHNlLCBhbGxvd19ub25lPVRydWUpCisgICAgICAgIHNlbGYuaG9zdCwgc2VsZi5wb3J0ID0gc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKQorICAgICAgICBzZWxmLmNvbm5lY3Rpb25fdG9rZW4gPSBOb25lCisgICAgICAgICNzZWxmLnJlZ2lzdGVyX2ludHJvc3BlY3Rpb25fZnVuY3Rpb25zKCkKKyAgICAgICAgc2VsZi5jb21tYW5kcyA9IEJpdEJha2VTZXJ2ZXJDb21tYW5kcyhzZWxmKQorICAgICAgICBzZWxmLmF1dG9yZWdpc3Rlcl9hbGxfZnVuY3Rpb25zKHNlbGYuY29tbWFuZHMsICIiKQorICAgICAgICBzZWxmLmludGVyZmFjZSA9IGludGVyZmFjZQorICAgICAgICBzZWxmLnNpbmdsZV91c2UgPSBGYWxzZQorCisgICAgZGVmIGFkZGNvb2tlcihzZWxmLCBjb29rZXIpOgorICAgICAgICBCYXNlSW1wbFNlcnZlci5hZGRjb29rZXIoc2VsZiwgY29va2VyKQorICAgICAgICBzZWxmLmNvbW1hbmRzLmNvb2tlciA9IGNvb2tlcgorCisgICAgZGVmIGF1dG9yZWdpc3Rlcl9hbGxfZnVuY3Rpb25zKHNlbGYsIGNvbnRleHQsIHByZWZpeCk6CisgICAgICAgICIiIgorICAgICAgICBDb252ZW5pZW5jZSBtZXRob2QgZm9yIHJlZ2lzdGVyaW5nIGFsbCBmdW5jdGlvbnMgaW4gdGhlIHNjb3BlCisgICAgICAgIG9mIHRoaXMgY2xhc3MgdGhhdCBzdGFydCB3aXRoIGEgY29tbW9uIHByZWZpeAorICAgICAgICAiIiIKKyAgICAgICAgbWV0aG9kbGlzdCA9IGluc3BlY3QuZ2V0bWVtYmVycyhjb250ZXh0LCBpbnNwZWN0LmlzbWV0aG9kKQorICAgICAgICBmb3IgbmFtZSwgbWV0aG9kIGluIG1ldGhvZGxpc3Q6CisgICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgICAgICAgICBzZWxmLnJlZ2lzdGVyX2Z1bmN0aW9uKG1ldGhvZCwgbmFtZVtsZW4ocHJlZml4KTpdKQorCisKKyAgICBkZWYgc2VydmVfZm9yZXZlcihzZWxmKToKKyAgICAgICAgIyBTdGFydCB0aGUgYWN0dWFsIFhNTFJQQyBzZXJ2ZXIKKyAgICAgICAgYmIuY29va2VyLnNlcnZlcl9tYWluKHNlbGYuY29va2VyLCBzZWxmLl9zZXJ2ZV9mb3JldmVyKQorCisgICAgZGVmIF9zZXJ2ZV9mb3JldmVyKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU2VydmUgUmVxdWVzdHMuIE92ZXJsb2FkZWQgdG8gaG9ub3IgYSBxdWl0IGNvbW1hbmQKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYucXVpdCA9IEZhbHNlCisgICAgICAgIHdoaWxlIG5vdCBzZWxmLnF1aXQ6CisgICAgICAgICAgICBmZHMgPSBbc2VsZl0KKyAgICAgICAgICAgIG5leHRzbGVlcCA9IDAuMQorICAgICAgICAgICAgZm9yIGZ1bmN0aW9uLCBkYXRhIGluIHNlbGYuX2lkbGVmdW5zLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgcmV0dmFsID0gTm9uZQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gZnVuY3Rpb24oc2VsZiwgZGF0YSwgRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIGlmIHJldHZhbCBpcyBGYWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9pZGxlZnVuc1tmdW5jdGlvbl0KKyAgICAgICAgICAgICAgICAgICAgZWxpZiByZXR2YWwgaXMgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRzbGVlcCA9IDAKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHJldHZhbCwgZmxvYXQpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHZhbCA8IG5leHRzbGVlcCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dHNsZWVwID0gcmV0dmFsCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBmZHMgPSBmZHMgKyByZXR2YWwKKyAgICAgICAgICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCisgICAgICAgICAgICAgICAgICAgIGlmIHJldHZhbCA9PSBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgZnVuY3Rpb24gZXhlY3V0ZSBmYWlsZWQ7IGRlbGV0ZSBpdAorICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHNlbGYuX2lkbGVmdW5zW2Z1bmN0aW9uXQorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIHNvY2t0aW1lb3V0ID0gc2VsZi5zb2NrZXQuZ2V0dGltZW91dCgpIG9yIG5leHRzbGVlcAorICAgICAgICAgICAgc29ja3RpbWVvdXQgPSBtaW4oc29ja3RpbWVvdXQsIG5leHRzbGVlcCkKKyAgICAgICAgICAgICMgTWlycm9yIHdoYXQgQmFzZVNlcnZlciBoYW5kbGVfcmVxdWVzdCB3b3VsZCBkbworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZkX3NldHMgPSBzZWxlY3Quc2VsZWN0KGZkcywgW10sIFtdLCBzb2NrdGltZW91dCkKKyAgICAgICAgICAgICAgICBpZiBmZF9zZXRzWzBdIGFuZCBzZWxmIGluIGZkX3NldHNbMF06CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9yZXF1ZXN0X25vYmxvY2soKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgIyB3ZSBpZ25vcmUgaW50ZXJydXB0ZWQgY2FsbHMKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBUZWxsIGlkbGUgZnVuY3Rpb25zIHdlJ3JlIGV4aXRpbmcKKyAgICAgICAgZm9yIGZ1bmN0aW9uLCBkYXRhIGluIHNlbGYuX2lkbGVmdW5zLml0ZW1zKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dmFsID0gZnVuY3Rpb24oc2VsZiwgZGF0YSwgVHJ1ZSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuc2VydmVyX2Nsb3NlKCkKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgc2V0X2Nvbm5lY3Rpb25fdG9rZW4oc2VsZiwgdG9rZW4pOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb25fdG9rZW4gPSB0b2tlbgorCitjbGFzcyBCaXRCYWtlWE1MUlBDU2VydmVyQ29ubmVjdGlvbihCaXRCYWtlQmFzZVNlcnZlckNvbm5lY3Rpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXJJbXBsLCBjbGllbnRpbmZvPSgibG9jYWxob3N0IiwgMCksIG9ic2VydmVyX29ubHkgPSBGYWxzZSwgZmVhdHVyZXNldCA9IE5vbmUpOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24sIHNlbGYudHJhbnNwb3J0ID0gX2NyZWF0ZV9zZXJ2ZXIoc2VydmVySW1wbC5ob3N0LCBzZXJ2ZXJJbXBsLnBvcnQpCisgICAgICAgIHNlbGYuY2xpZW50aW5mbyA9IGNsaWVudGluZm8KKyAgICAgICAgc2VsZi5zZXJ2ZXJJbXBsID0gc2VydmVySW1wbAorICAgICAgICBzZWxmLm9ic2VydmVyX29ubHkgPSBvYnNlcnZlcl9vbmx5CisgICAgICAgIGlmIGZlYXR1cmVzZXQ6CisgICAgICAgICAgICBzZWxmLmZlYXR1cmVzZXQgPSBmZWF0dXJlc2V0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZlYXR1cmVzZXQgPSBbXQorCisgICAgZGVmIGNvbm5lY3Qoc2VsZiwgdG9rZW4gPSBOb25lKToKKyAgICAgICAgaWYgdG9rZW4gaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYub2JzZXJ2ZXJfb25seToKKyAgICAgICAgICAgICAgICB0b2tlbiA9ICJvYnNlcnZlciIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdG9rZW4gPSBzZWxmLmNvbm5lY3Rpb24uYWRkQ2xpZW50KCkKKworICAgICAgICBpZiB0b2tlbiBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBzZWxmLnRyYW5zcG9ydC5zZXRfY29ubmVjdGlvbl90b2tlbih0b2tlbikKKworICAgICAgICBzZWxmLmV2ZW50cyA9IHVpZXZlbnQuQkJVSUV2ZW50UXVldWUoc2VsZi5jb25uZWN0aW9uLCBzZWxmLmNsaWVudGluZm8pCisgICAgICAgIGZvciBldmVudCBpbiBiYi5ldmVudC51aV9xdWV1ZToKKyAgICAgICAgICAgIHNlbGYuZXZlbnRzLnF1ZXVlX2V2ZW50KGV2ZW50KQorCisgICAgICAgIF8sIGVycm9yID0gc2VsZi5jb25uZWN0aW9uLnJ1bkNvbW1hbmQoWyJzZXRGZWF0dXJlcyIsIHNlbGYuZmVhdHVyZXNldF0pCisgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgIyBkaXNjb25uZWN0IHRoZSBjbGllbnQsIHdlIGNhbid0IG1ha2UgdGhlIHNldEZlYXR1cmUgd29yaworICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uLnJlbW92ZUNsaWVudCgpCisgICAgICAgICAgICAjIG5vIG5lZWQgdG8gbG9nIGl0IGhlcmUsIHRoZSBlcnJvciBzaGFsbCBiZSBzZW50IHRvIHRoZSBjbGllbnQKKyAgICAgICAgICAgIHJhaXNlIEJhc2VFeGNlcHRpb24oZXJyb3IpCisKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiByZW1vdmVDbGllbnQoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLm9ic2VydmVyX29ubHk6CisgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24ucmVtb3ZlQ2xpZW50KCkKKworICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6CisgICAgICAgICMgRG9uJ3Qgd2FpdCBmb3Igc2VydmVyIGluZGVmaW5pdGVseQorICAgICAgICBpbXBvcnQgc29ja2V0CisgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCgyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmV2ZW50cy5zeXN0ZW1fcXVpdCgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uLnJlbW92ZUNsaWVudCgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKworY2xhc3MgQml0QmFrZVNlcnZlcihCaXRCYWtlQmFzZVNlcnZlcik6CisgICAgZGVmIGluaXRTZXJ2ZXIoc2VsZiwgaW50ZXJmYWNlID0gKCJsb2NhbGhvc3QiLCAwKSk6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlID0gaW50ZXJmYWNlCisgICAgICAgIHNlbGYuc2VydmVySW1wbCA9IFhNTFJQQ1NlcnZlcihpbnRlcmZhY2UpCisKKyAgICBkZWYgZGV0YWNoKHNlbGYpOgorICAgICAgICBkYWVtb25pemUuY3JlYXRlRGFlbW9uKHNlbGYuc2VydmVySW1wbC5zZXJ2ZV9mb3JldmVyLCAiYml0YmFrZS1jb29rZXJkYWVtb24ubG9nIikKKyAgICAgICAgZGVsIHNlbGYuY29va2VyCisKKyAgICBkZWYgZXN0YWJsaXNoQ29ubmVjdGlvbihzZWxmLCBmZWF0dXJlc2V0KToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gQml0QmFrZVhNTFJQQ1NlcnZlckNvbm5lY3Rpb24oc2VsZi5zZXJ2ZXJJbXBsLCBzZWxmLmludGVyZmFjZSwgRmFsc2UsIGZlYXR1cmVzZXQpCisgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24uY29ubmVjdCgpCisKKyAgICBkZWYgc2V0X2Nvbm5lY3Rpb25fdG9rZW4oc2VsZiwgdG9rZW4pOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24udHJhbnNwb3J0LnNldF9jb25uZWN0aW9uX3Rva2VuKHRva2VuKQorCitjbGFzcyBCaXRCYWtlWE1MUlBDQ2xpZW50KEJpdEJha2VCYXNlU2VydmVyKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvYnNlcnZlcl9vbmx5ID0gRmFsc2UsIHRva2VuID0gTm9uZSk6CisgICAgICAgIHNlbGYudG9rZW4gPSB0b2tlbgorCisgICAgICAgIHNlbGYub2JzZXJ2ZXJfb25seSA9IG9ic2VydmVyX29ubHkKKyAgICAgICAgIyBpZiB3ZSBuZWVkIGV4dHJhIGNhY2hlcywganVzdCB0ZWxsIHRoZSBzZXJ2ZXIgdG8gbG9hZCB0aGVtIGFsbAorICAgICAgICBwYXNzCisKKyAgICBkZWYgc2F2ZUNvbm5lY3Rpb25EZXRhaWxzKHNlbGYsIHJlbW90ZSk6CisgICAgICAgIHNlbGYucmVtb3RlID0gcmVtb3RlCisKKyAgICBkZWYgZXN0YWJsaXNoQ29ubmVjdGlvbihzZWxmLCBmZWF0dXJlc2V0KToKKyAgICAgICAgIyBUaGUgZm9ybWF0IG9mICJyZW1vdGUiIG11c3QgYmUgInNlcnZlcjpwb3J0IgorICAgICAgICB0cnk6CisgICAgICAgICAgICBbaG9zdCwgcG9ydF0gPSBzZWxmLnJlbW90ZS5zcGxpdCgiOiIpCisgICAgICAgICAgICBwb3J0ID0gaW50KHBvcnQpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGJiLndhcm4oIkZhaWxlZCB0byByZWFkIHJlbW90ZSBkZWZpbml0aW9uICglcykiICUgc3RyKGUpKQorICAgICAgICAgICAgcmFpc2UgZQorCisgICAgICAgICMgV2UgbmVlZCBvdXIgSVAgZm9yIHRoZSBzZXJ2ZXIgY29ubmVjdGlvbi4gV2UgZ2V0IHRoZSBJUAorICAgICAgICAjIGJ5IHRyeWluZyB0byBjb25uZWN0IHdpdGggdGhlIHNlcnZlcgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pCisgICAgICAgICAgICBzLmNvbm5lY3QoKGhvc3QsIHBvcnQpKQorICAgICAgICAgICAgaXAgPSBzLmdldHNvY2tuYW1lKClbMF0KKyAgICAgICAgICAgIHMuY2xvc2UoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBiYi53YXJuKCJDb3VsZCBub3QgY3JlYXRlIHNvY2tldCBmb3IgJXM6JXMgKCVzKSIgJSAoaG9zdCwgcG9ydCwgc3RyKGUpKSkKKyAgICAgICAgICAgIHJhaXNlIGUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXJJbXBsID0gWE1MUlBDUHJveHlTZXJ2ZXIoaG9zdCwgcG9ydCkKKyAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IEJpdEJha2VYTUxSUENTZXJ2ZXJDb25uZWN0aW9uKHNlbGYuc2VydmVySW1wbCwgKGlwLCAwKSwgc2VsZi5vYnNlcnZlcl9vbmx5LCBmZWF0dXJlc2V0KQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbi5jb25uZWN0KHNlbGYudG9rZW4pCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGJiLndhcm4oIkNvdWxkIG5vdCBjb25uZWN0IHRvIHNlcnZlciBhdCAlczolcyAoJXMpIiAlIChob3N0LCBwb3J0LCBzdHIoZSkpKQorICAgICAgICAgICAgcmFpc2UgZQorCisgICAgZGVmIGVuZFNlc3Npb24oc2VsZik6CisgICAgICAgIHNlbGYuY29ubmVjdGlvbi5yZW1vdmVDbGllbnQoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zaGVsbC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2hlbGwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRkOGQ1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2hlbGwucHkKQEAgLTAsMCArMSw4MjAgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtaWNrZXlAVmFuaWxsZS5kZT4KKyMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVmFuaWxsZSBNZWRpYQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFRoYW5rcyB0bzoKKyMgKiBIb2xnZXIgRnJleXRoZXIgPHplY2tlQGhhbmRoZWxkcy5vcmc+CisjICogSnVzdGluIFBhdHJpbiA8cGFwZXJjcmFuZUByZXZlcnNlZm9sZC5jb20+CisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisiIiIKK0JpdEJha2UgU2hlbGwKKworSURFQVM6CisgICAgKiBsaXN0IGRlZmluZWQgdGFza3MgcGVyIHBhY2thZ2UKKyAgICAqIGxpc3QgY2xhc3NlcworICAgICogdG9nZ2xlIGZvcmNlCisgICAgKiBjb21tYW5kIHRvIHJlcGFyc2UganVzdCBvbmUgKG9yIG1vcmUpIGJiZmlsZShzKQorICAgICogYXV0b21hdGljIGNoZWNrIGlmIHJlcGFyc2luZyBpcyBuZWNlc3NhcnkgKGlub3RpZnk/KQorICAgICogZnJvbnRlbmQgZm9yIGJiIGZpbGUgbWFuaXB1bGF0aW9uCisgICAgKiBtb3JlIHNoZWxsLWxpa2UgZmVhdHVyZXM6CisgICAgICAgIC0gb3V0cHV0IGNvbnRyb2wsIGkuZS4gcGlwZSBvdXRwdXQgaW50byBncmVwLCBzb3J0LCBldGMuCisgICAgICAgIC0gam9iIGNvbnRyb2wsIGkuZS4gYnJpbmcgcnVubmluZyBjb21tYW5kcyBpbnRvIGJhY2tncm91bmQgYW5kIGZvcmVncm91bmQKKyAgICAqIHN0YXJ0IHBhcnNpbmcgaW4gYmFja2dyb3VuZCByaWdodCBhZnRlciBzdGFydHVwCisgICAgKiBuY3Vyc2VzIGludGVyZmFjZQorCitQUk9CTEVNUzoKKyAgICAqIGZvcmNlIGRvZXNuJ3QgYWx3YXlzIHdvcmsKKyAgICAqIHJlYWRsaW5lIGNvbXBsZXRpb24gZm9yIGNvbW1hbmRzIHdpdGggbW9yZSB0aGFuIG9uZSBwYXJhbWV0ZXJzCisKKyIiIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBJbXBvcnQgYW5kIHNldHVwIGdsb2JhbCB2YXJpYWJsZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCByZWR1Y2UKK3RyeToKKyAgICBzZXQKK2V4Y2VwdCBOYW1lRXJyb3I6CisgICAgZnJvbSBzZXRzIGltcG9ydCBTZXQgYXMgc2V0CitpbXBvcnQgc3lzLCBvcywgcmVhZGxpbmUsIHNvY2tldCwgaHR0cGxpYiwgdXJsbGliLCBjb21tYW5kcywgcG9wZW4yLCBzaGxleCwgUXVldWUsIGZubWF0Y2gKK2Zyb20gYmIgaW1wb3J0IGRhdGEsIHBhcnNlLCBidWlsZCwgY2FjaGUsIHRhc2tkYXRhLCBydW5xdWV1ZSwgcHJvdmlkZXJzIGFzIFByb3ZpZGVycworCitfX3ZlcnNpb25fXyA9ICIwLjUuMy4xIgorX19jcmVkaXRzX18gPSAiIiJCaXRCYWtlIFNoZWxsIFZlcnNpb24gJXMgKEMpIDIwMDUgTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QFZhbmlsbGUuZGU+CitUeXBlICdoZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiwgcHJlc3MgQ1RSTC1EIHRvIGV4aXQuIiIiICUgX192ZXJzaW9uX18KKworY21kcyA9IHt9CitsZWF2ZV9tYWlubG9vcCA9IEZhbHNlCitsYXN0X2V4Y2VwdGlvbiA9IE5vbmUKK2Nvb2tlciA9IE5vbmUKK3BhcnNlZCA9IEZhbHNlCitkZWJ1ZyA9IG9zLmVudmlyb24uZ2V0KCAiQkJTSEVMTF9ERUJVRyIsICIiICkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ2xhc3MgQml0QmFrZVNoZWxsQ29tbWFuZHMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NsYXNzIEJpdEJha2VTaGVsbENvbW1hbmRzOgorICAgICIiIlRoaXMgY2xhc3MgY29udGFpbnMgdGhlIHZhbGlkIGNvbW1hbmRzIGZvciB0aGUgc2hlbGwiIiIKKworICAgIGRlZiBfX2luaXRfXyggc2VsZiwgc2hlbGwgKToKKyAgICAgICAgIiIiUmVnaXN0ZXIgYWxsIHRoZSBjb21tYW5kcyIiIgorICAgICAgICBzZWxmLl9zaGVsbCA9IHNoZWxsCisgICAgICAgIGZvciBhdHRyIGluIEJpdEJha2VTaGVsbENvbW1hbmRzLl9fZGljdF9fOgorICAgICAgICAgICAgaWYgbm90IGF0dHIuc3RhcnRzd2l0aCggIl8iICk6CisgICAgICAgICAgICAgICAgaWYgYXR0ci5lbmRzd2l0aCggIl8iICk6CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBhdHRyWzotMV0ubG93ZXIoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBhdHRyWzpdLmxvd2VyKCkKKyAgICAgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKCBCaXRCYWtlU2hlbGxDb21tYW5kcywgYXR0ciApCisgICAgICAgICAgICAgICAgZGVidWdPdXQoICJyZWdpc3RlcmluZyBjb21tYW5kICclcyciICUgY29tbWFuZCApCisgICAgICAgICAgICAgICAgIyBzY2FuIG51bWJlciBvZiBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICB1c2FnZSA9IGdldGF0dHIoIG1ldGhvZCwgInVzYWdlIiwgIiIgKQorICAgICAgICAgICAgICAgIGlmIHVzYWdlICE9ICI8Li4uPiI6CisgICAgICAgICAgICAgICAgICAgIG51bUFyZ3MgPSBsZW4oIHVzYWdlLnNwbGl0KCkgKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG51bUFyZ3MgPSAtMQorICAgICAgICAgICAgICAgIHNoZWxsLnJlZ2lzdGVyQ29tbWFuZCggY29tbWFuZCwgbWV0aG9kLCBudW1BcmdzLCAiJXMgJXMiICUgKCBjb21tYW5kLCB1c2FnZSApLCBtZXRob2QuX19kb2NfXyApCisKKyAgICBkZWYgX2NoZWNrUGFyc2VkKCBzZWxmICk6CisgICAgICAgIGlmIG5vdCBwYXJzZWQ6CisgICAgICAgICAgICBwcmludCgiU0hFTEw6IFRoaXMgY29tbWFuZCBuZWVkcyB0byBwYXJzZSBiYmZpbGVzLi4uIikKKyAgICAgICAgICAgIHNlbGYucGFyc2UoIE5vbmUgKQorCisgICAgZGVmIF9maW5kUHJvdmlkZXIoIHNlbGYsIGl0ZW0gKToKKyAgICAgICAgc2VsZi5fY2hlY2tQYXJzZWQoKQorICAgICAgICAjIE5lZWQgdG8gdXNlIHRhc2tEYXRhIGZvciB0aGlzIGluZm9ybWF0aW9uCisgICAgICAgIHByZWZlcnJlZCA9IGRhdGEuZ2V0VmFyKCAiUFJFRkVSUkVEX1BST1ZJREVSXyVzIiAlIGl0ZW0sIGNvb2tlci5jb25maWd1cmF0aW9uLmRhdGEsIDEgKQorICAgICAgICBpZiBub3QgcHJlZmVycmVkOiBwcmVmZXJyZWQgPSBpdGVtCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGx2LCBsZiwgcHYsIHBmID0gUHJvdmlkZXJzLmZpbmRCZXN0UHJvdmlkZXIocHJlZmVycmVkLCBjb29rZXIuY29uZmlndXJhdGlvbi5kYXRhLCBjb29rZXIuc3RhdHVzKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBpZiBpdGVtIGluIGNvb2tlci5zdGF0dXMucHJvdmlkZXJzOgorICAgICAgICAgICAgICAgIHBmID0gY29va2VyLnN0YXR1cy5wcm92aWRlcnNbaXRlbV1bMF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGYgPSBOb25lCisgICAgICAgIHJldHVybiBwZgorCisgICAgZGVmIGFsaWFzKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiUmVnaXN0ZXIgYSBuZXcgbmFtZSBmb3IgYSBjb21tYW5kIiIiCisgICAgICAgIG5ldywgb2xkID0gcGFyYW1zCisgICAgICAgIGlmIG5vdCBvbGQgaW4gY21kczoKKyAgICAgICAgICAgIHByaW50KCJFUlJPUjogQ29tbWFuZCAnJXMnIG5vdCBrbm93biIgJSBvbGQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWRzW25ld10gPSBjbWRzW29sZF0KKyAgICAgICAgICAgIHByaW50KCJPSyIpCisgICAgYWxpYXMudXNhZ2UgPSAiPGFsaWFzPiA8Y29tbWFuZD4iCisKKyAgICBkZWYgYnVmZmVyKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiRHVtcCBzcGVjaWZpZWQgb3V0cHV0IGJ1ZmZlciIiIgorICAgICAgICBpbmRleCA9IHBhcmFtc1swXQorICAgICAgICBwcmludChzZWxmLl9zaGVsbC5teW91dC5idWZmZXIoIGludCggaW5kZXggKSApKQorICAgIGJ1ZmZlci51c2FnZSA9ICI8aW5kZXg+IgorCisgICAgZGVmIGJ1ZmZlcnMoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJTaG93IHRoZSBhdmFpbGFibGUgb3V0cHV0IGJ1ZmZlcnMiIiIKKyAgICAgICAgY29tbWFuZHMgPSBzZWxmLl9zaGVsbC5teW91dC5idWZmZXJlZENvbW1hbmRzKCkKKyAgICAgICAgaWYgbm90IGNvbW1hbmRzOgorICAgICAgICAgICAgcHJpbnQoIlNIRUxMOiBObyBidWZmZXJlZCBjb21tYW5kcyBhdmFpbGFibGUgeWV0LiBTdGFydCBkb2luZyBzb21ldGhpbmcuIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCI9IiozNSwgIkF2YWlsYWJsZSBPdXRwdXQgQnVmZmVycyIsICI9IioyNykKKyAgICAgICAgICAgIGZvciBpbmRleCwgY21kIGluIGVudW1lcmF0ZSggY29tbWFuZHMgKToKKyAgICAgICAgICAgICAgICBwcmludCgifCAlcyAlcyIgJSAoIHN0ciggaW5kZXggKS5sanVzdCggMyApLCBjbWQgKSkKKyAgICAgICAgICAgIHByaW50KCI9Iio4OCkKKworICAgIGRlZiBidWlsZCggc2VsZiwgcGFyYW1zLCBjbWQgPSAiYnVpbGQiICk6CisgICAgICAgICIiIkJ1aWxkIGEgcHJvdmlkZWUiIiIKKyAgICAgICAgZ2xvYmFsIGxhc3RfZXhjZXB0aW9uCisgICAgICAgIGdsb2JleHByID0gcGFyYW1zWzBdCisgICAgICAgIHNlbGYuX2NoZWNrUGFyc2VkKCkKKyAgICAgICAgbmFtZXMgPSBnbG9iZmlsdGVyKCBjb29rZXIuc3RhdHVzLnBrZ19wbiwgZ2xvYmV4cHIgKQorICAgICAgICBpZiBsZW4oIG5hbWVzICkgPT0gMDogbmFtZXMgPSBbIGdsb2JleHByIF0KKyAgICAgICAgcHJpbnQoIlNIRUxMOiBCdWlsZGluZyAlcyIgJSAnICcuam9pbiggbmFtZXMgKSkKKworICAgICAgICB0ZCA9IHRhc2tkYXRhLlRhc2tEYXRhKGNvb2tlci5jb25maWd1cmF0aW9uLmFib3J0KQorICAgICAgICBsb2NhbGRhdGEgPSBkYXRhLmNyZWF0ZUNvcHkoY29va2VyLmNvbmZpZ3VyYXRpb24uZGF0YSkKKyAgICAgICAgZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIGRhdGEuZXhwYW5kS2V5cyhsb2NhbGRhdGEpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFza3MgPSBbXQorICAgICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICAgICAgdGQuYWRkX3Byb3ZpZGVyKGxvY2FsZGF0YSwgY29va2VyLnN0YXR1cywgbmFtZSkKKyAgICAgICAgICAgICAgICBwcm92aWRlcnMgPSB0ZC5nZXRfcHJvdmlkZXIobmFtZSkKKworICAgICAgICAgICAgICAgIGlmIGxlbihwcm92aWRlcnMpID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFByb3ZpZGVycy5Ob1Byb3ZpZGVyCisKKyAgICAgICAgICAgICAgICB0YXNrcy5hcHBlbmQoW25hbWUsICJkb18lcyIgJSBjbWRdKQorCisgICAgICAgICAgICB0ZC5hZGRfdW5yZXNvbHZlZChsb2NhbGRhdGEsIGNvb2tlci5zdGF0dXMpCisKKyAgICAgICAgICAgIHJxID0gcnVucXVldWUuUnVuUXVldWUoY29va2VyLCBsb2NhbGRhdGEsIGNvb2tlci5zdGF0dXMsIHRkLCB0YXNrcykKKyAgICAgICAgICAgIHJxLnByZXBhcmVfcnVucXVldWUoKQorICAgICAgICAgICAgcnEuZXhlY3V0ZV9ydW5xdWV1ZSgpCisKKyAgICAgICAgZXhjZXB0IFByb3ZpZGVycy5Ob1Byb3ZpZGVyOgorICAgICAgICAgICAgcHJpbnQoIkVSUk9SOiBObyBQcm92aWRlciIpCisgICAgICAgICAgICBsYXN0X2V4Y2VwdGlvbiA9IFByb3ZpZGVycy5Ob1Byb3ZpZGVyCisKKyAgICAgICAgZXhjZXB0IHJ1bnF1ZXVlLlRhc2tGYWlsdXJlIGFzIGZuaWRzOgorICAgICAgICAgICAgbGFzdF9leGNlcHRpb24gPSBydW5xdWV1ZS5UYXNrRmFpbHVyZQorCisgICAgICAgIGV4Y2VwdCBidWlsZC5GdW5jRmFpbGVkIGFzIGU6CisgICAgICAgICAgICBwcmludCgiRVJST1I6IENvdWxkbid0IGJ1aWxkICclcyciICUgbmFtZXMpCisgICAgICAgICAgICBsYXN0X2V4Y2VwdGlvbiA9IGUKKworCisgICAgYnVpbGQudXNhZ2UgPSAiPHByb3ZpZGVlPiIKKworICAgIGRlZiBjbGVhbiggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkNsZWFuIGEgcHJvdmlkZWUiIiIKKyAgICAgICAgc2VsZi5idWlsZCggcGFyYW1zLCAiY2xlYW4iICkKKyAgICBjbGVhbi51c2FnZSA9ICI8cHJvdmlkZWU+IgorCisgICAgZGVmIGNvbXBpbGUoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJFeGVjdXRlICdjb21waWxlJyBvbiBhIHByb3ZpZGVlIiIiCisgICAgICAgIHNlbGYuYnVpbGQoIHBhcmFtcywgImNvbXBpbGUiICkKKyAgICBjb21waWxlLnVzYWdlID0gIjxwcm92aWRlZT4iCisKKyAgICBkZWYgY29uZmlndXJlKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiRXhlY3V0ZSAnY29uZmlndXJlJyBvbiBhIHByb3ZpZGVlIiIiCisgICAgICAgIHNlbGYuYnVpbGQoIHBhcmFtcywgImNvbmZpZ3VyZSIgKQorICAgIGNvbmZpZ3VyZS51c2FnZSA9ICI8cHJvdmlkZWU+IgorCisgICAgZGVmIGluc3RhbGwoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJFeGVjdXRlICdpbnN0YWxsJyBvbiBhIHByb3ZpZGVlIiIiCisgICAgICAgIHNlbGYuYnVpbGQoIHBhcmFtcywgImluc3RhbGwiICkKKyAgICBpbnN0YWxsLnVzYWdlID0gIjxwcm92aWRlZT4iCisKKyAgICBkZWYgZWRpdCggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkNhbGwgJEVESVRPUiBvbiBhIHByb3ZpZGVlIiIiCisgICAgICAgIG5hbWUgPSBwYXJhbXNbMF0KKyAgICAgICAgYmJmaWxlID0gc2VsZi5fZmluZFByb3ZpZGVyKCBuYW1lICkKKyAgICAgICAgaWYgYmJmaWxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgb3Muc3lzdGVtKCAiJXMgJXMiICUgKCBvcy5lbnZpcm9uLmdldCggIkVESVRPUiIsICJ2aSIgKSwgYmJmaWxlICkgKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIkVSUk9SOiBOb3RoaW5nIHByb3ZpZGVzICclcyciICUgbmFtZSkKKyAgICBlZGl0LnVzYWdlID0gIjxwcm92aWRlZT4iCisKKyAgICBkZWYgZW52aXJvbm1lbnQoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJEdW1wIG91dCB0aGUgb3V0ZXIgQml0QmFrZSBlbnZpcm9ubWVudCIiIgorICAgICAgICBjb29rZXIuc2hvd0Vudmlyb25tZW50KCkKKworICAgIGRlZiBleGl0Xyggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkxlYXZlIHRoZSBCaXRCYWtlIFNoZWxsIiIiCisgICAgICAgIGRlYnVnT3V0KCAic2V0dGluZyBsZWF2ZV9tYWlubG9vcCB0byB0cnVlIiApCisgICAgICAgIGdsb2JhbCBsZWF2ZV9tYWlubG9vcAorICAgICAgICBsZWF2ZV9tYWlubG9vcCA9IFRydWUKKworICAgIGRlZiBmZXRjaCggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkZldGNoIGEgcHJvdmlkZWUiIiIKKyAgICAgICAgc2VsZi5idWlsZCggcGFyYW1zLCAiZmV0Y2giICkKKyAgICBmZXRjaC51c2FnZSA9ICI8cHJvdmlkZWU+IgorCisgICAgZGVmIGZpbGVCdWlsZCggc2VsZiwgcGFyYW1zLCBjbWQgPSAiYnVpbGQiICk6CisgICAgICAgICIiIlBhcnNlIGFuZCBidWlsZCBhIC5iYiBmaWxlIiIiCisgICAgICAgIGdsb2JhbCBsYXN0X2V4Y2VwdGlvbgorICAgICAgICBuYW1lID0gcGFyYW1zWzBdCisgICAgICAgIGJmID0gY29tcGxldGVGaWxlUGF0aCggbmFtZSApCisgICAgICAgIHByaW50KCJTSEVMTDogQ2FsbGluZyAnJXMnIG9uICclcyciICUgKCBjbWQsIGJmICkpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29va2VyLmJ1aWxkRmlsZShiZiwgY21kKQorICAgICAgICBleGNlcHQgcGFyc2UuUGFyc2VFcnJvcjoKKyAgICAgICAgICAgIHByaW50KCJFUlJPUjogVW5hYmxlIHRvIG9wZW4gb3IgcGFyc2UgJyVzJyIgJSBiZikKKyAgICAgICAgZXhjZXB0IGJ1aWxkLkZ1bmNGYWlsZWQgYXMgZToKKyAgICAgICAgICAgIHByaW50KCJFUlJPUjogQ291bGRuJ3QgYnVpbGQgJyVzJyIgJSBuYW1lKQorICAgICAgICAgICAgbGFzdF9leGNlcHRpb24gPSBlCisKKyAgICBmaWxlQnVpbGQudXNhZ2UgPSAiPGJiZmlsZT4iCisKKyAgICBkZWYgZmlsZUNsZWFuKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiQ2xlYW4gYSAuYmIgZmlsZSIiIgorICAgICAgICBzZWxmLmZpbGVCdWlsZCggcGFyYW1zLCAiY2xlYW4iICkKKyAgICBmaWxlQ2xlYW4udXNhZ2UgPSAiPGJiZmlsZT4iCisKKyAgICBkZWYgZmlsZUVkaXQoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJDYWxsICRFRElUT1Igb24gYSAuYmIgZmlsZSIiIgorICAgICAgICBuYW1lID0gcGFyYW1zWzBdCisgICAgICAgIG9zLnN5c3RlbSggIiVzICVzIiAlICggb3MuZW52aXJvbi5nZXQoICJFRElUT1IiLCAidmkiICksIGNvbXBsZXRlRmlsZVBhdGgoIG5hbWUgKSApICkKKyAgICBmaWxlRWRpdC51c2FnZSA9ICI8YmJmaWxlPiIKKworICAgIGRlZiBmaWxlUmVidWlsZCggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIlJlYnVpbGQgKGNsZWFuICYgYnVpbGQpIGEgLmJiIGZpbGUiIiIKKyAgICAgICAgc2VsZi5maWxlQnVpbGQoIHBhcmFtcywgInJlYnVpbGQiICkKKyAgICBmaWxlUmVidWlsZC51c2FnZSA9ICI8YmJmaWxlPiIKKworICAgIGRlZiBmaWxlUmVwYXJzZSggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIihyZSlQYXJzZSBhIGJiIGZpbGUiIiIKKyAgICAgICAgYmJmaWxlID0gcGFyYW1zWzBdCisgICAgICAgIHByaW50KCJTSEVMTDogUGFyc2luZyAnJXMnIiAlIGJiZmlsZSkKKyAgICAgICAgcGFyc2UudXBkYXRlX210aW1lKCBiYmZpbGUgKQorICAgICAgICBjb29rZXIucGFyc2VyLnJlcGFyc2UoYmJmaWxlKQorICAgICAgICBpZiBGYWxzZTogI2Zyb21DYWNoZToKKyAgICAgICAgICAgIHByaW50KCJTSEVMTDogRmlsZSBoYXMgbm90IGJlZW4gdXBkYXRlZCwgbm90IHJlcGFyc2luZyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiU0hFTEw6IFBhcnNlZCIpCisgICAgZmlsZVJlcGFyc2UudXNhZ2UgPSAiPGJiZmlsZT4iCisKKyAgICBkZWYgYWJvcnQoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJUb2dnbGUgYWJvcnQgdGFzayBleGVjdXRpb24gZmxhZyAoc2VlIGJpdGJha2UgLWspIiIiCisgICAgICAgIGNvb2tlci5jb25maWd1cmF0aW9uLmFib3J0ID0gbm90IGNvb2tlci5jb25maWd1cmF0aW9uLmFib3J0CisgICAgICAgIHByaW50KCJTSEVMTDogQWJvcnQgRmxhZyBpcyBub3cgJyVzJyIgJSByZXByKCBjb29rZXIuY29uZmlndXJhdGlvbi5hYm9ydCApKQorCisgICAgZGVmIGZvcmNlKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiVG9nZ2xlIGZvcmNlIHRhc2sgZXhlY3V0aW9uIGZsYWcgKHNlZSBiaXRiYWtlIC1mKSIiIgorICAgICAgICBjb29rZXIuY29uZmlndXJhdGlvbi5mb3JjZSA9IG5vdCBjb29rZXIuY29uZmlndXJhdGlvbi5mb3JjZQorICAgICAgICBwcmludCgiU0hFTEw6IEZvcmNlIEZsYWcgaXMgbm93ICclcyciICUgcmVwciggY29va2VyLmNvbmZpZ3VyYXRpb24uZm9yY2UgKSkKKworICAgIGRlZiBoZWxwKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiU2hvdyBhIGNvbXByZWhlbnNpdmUgbGlzdCBvZiBjb21tYW5kcyBhbmQgdGhlaXIgcHVycG9zZSIiIgorICAgICAgICBwcmludCgiPSIqMzAsICJBdmFpbGFibGUgQ29tbWFuZHMiLCAiPSIqMzApCisgICAgICAgIGZvciBjbWQgaW4gc29ydGVkKGNtZHMpOgorICAgICAgICAgICAgZnVuY3Rpb24sIG51bXBhcmFtcywgdXNhZ2UsIGhlbHB0ZXh0ID0gY21kc1tjbWRdCisgICAgICAgICAgICBwcmludCgifCAlcyB8ICVzIiAlICh1c2FnZS5sanVzdCgzMCksIGhlbHB0ZXh0KSkKKyAgICAgICAgcHJpbnQoIj0iKjc4KQorCisgICAgZGVmIGxhc3RFcnJvciggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIlNob3cgdGhlIHJlYXNvbiBvciBsb2cgdGhhdCB3YXMgcHJvZHVjZWQgYnkgdGhlIGxhc3QgQml0QmFrZSBldmVudCBleGNlcHRpb24iIiIKKyAgICAgICAgaWYgbGFzdF9leGNlcHRpb24gaXMgTm9uZToKKyAgICAgICAgICAgIHByaW50KCJTSEVMTDogTm8gRXJyb3JzIHlldCAoUGhldykuLi4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVhc29uLCBldmVudCA9IGxhc3RfZXhjZXB0aW9uLmFyZ3MKKyAgICAgICAgICAgIHByaW50KCJTSEVMTDogUmVhc29uIGZvciB0aGUgbGFzdCBlcnJvcjogJyVzJyIgJSByZWFzb24pCisgICAgICAgICAgICBpZiAnOicgaW4gcmVhc29uOgorICAgICAgICAgICAgICAgIG1zZywgZmlsZW5hbWUgPSByZWFzb24uc3BsaXQoICc6JyApCisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdHJpcCgpCisgICAgICAgICAgICAgICAgcHJpbnQoIlNIRUxMOiBEdW1waW5nIGxvZyBmaWxlIGZvciBsYXN0IGVycm9yOiIpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBwcmludChvcGVuKCBmaWxlbmFtZSApLnJlYWQoKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkVSUk9SOiBDb3VsZG4ndCBvcGVuICclcyciICUgZmlsZW5hbWUpCisKKyAgICBkZWYgbWF0Y2goIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJEdW1wIGFsbCBmaWxlcyBvciBwcm92aWRlcnMgbWF0Y2hpbmcgYSBnbG9iIGV4cHJlc3Npb24iIiIKKyAgICAgICAgd2hhdCwgZ2xvYmV4cHIgPSBwYXJhbXMKKyAgICAgICAgaWYgd2hhdCA9PSAiZmlsZXMiOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tQYXJzZWQoKQorICAgICAgICAgICAgZm9yIGtleSBpbiBnbG9iZmlsdGVyKCBjb29rZXIuc3RhdHVzLnBrZ19mbiwgZ2xvYmV4cHIgKTogcHJpbnQoa2V5KQorICAgICAgICBlbGlmIHdoYXQgPT0gInByb3ZpZGVycyI6CisgICAgICAgICAgICBzZWxmLl9jaGVja1BhcnNlZCgpCisgICAgICAgICAgICBmb3Iga2V5IGluIGdsb2JmaWx0ZXIoIGNvb2tlci5zdGF0dXMucGtnX3BuLCBnbG9iZXhwciApOiBwcmludChrZXkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiVXNhZ2U6IG1hdGNoICVzIiAlIHNlbGYucHJpbnRfLnVzYWdlKQorICAgIG1hdGNoLnVzYWdlID0gIjxmaWxlc3xwcm92aWRlcnM+IDxnbG9iPiIKKworICAgIGRlZiBuZXcoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgLmJiIGZpbGUgYW5kIG9wZW4gdGhlIGVkaXRvciIiIgorICAgICAgICBkaXJuYW1lLCBmaWxlbmFtZSA9IHBhcmFtcworICAgICAgICBwYWNrYWdlcyA9ICcvJy5qb2luKCBkYXRhLmdldFZhciggIkJCRklMRVMiLCBjb29rZXIuY29uZmlndXJhdGlvbi5kYXRhLCAxICkuc3BsaXQoJy8nKVs6LTJdICkKKyAgICAgICAgZnVsbGRpcm5hbWUgPSAiJXMvJXMiICUgKCBwYWNrYWdlcywgZGlybmFtZSApCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKCBmdWxsZGlybmFtZSApOgorICAgICAgICAgICAgcHJpbnQoIlNIRUxMOiBDcmVhdGluZyAnJXMnIiAlIGZ1bGxkaXJuYW1lKQorICAgICAgICAgICAgb3MubWtkaXIoIGZ1bGxkaXJuYW1lICkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoIGZ1bGxkaXJuYW1lICkgYW5kIG9zLnBhdGguaXNkaXIoIGZ1bGxkaXJuYW1lICk6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyggIiVzLyVzIiAlICggZnVsbGRpcm5hbWUsIGZpbGVuYW1lICkgKToKKyAgICAgICAgICAgICAgICBwcmludCgiU0hFTEw6IEVSUk9SOiAlcy8lcyBhbHJlYWR5IGV4aXN0cyIgJSAoIGZ1bGxkaXJuYW1lLCBmaWxlbmFtZSApKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgcHJpbnQoIlNIRUxMOiBDcmVhdGluZyAnJXMvJXMnIiAlICggZnVsbGRpcm5hbWUsIGZpbGVuYW1lICkpCisgICAgICAgICAgICBuZXdwYWNrYWdlID0gb3BlbiggIiVzLyVzIiAlICggZnVsbGRpcm5hbWUsIGZpbGVuYW1lICksICJ3IiApCisgICAgICAgICAgICBwcmludCgiIiJERVNDUklQVElPTiA9ICIiCitTRUNUSU9OID0gIiIKK0FVVEhPUiA9ICIiCitIT01FUEFHRSA9ICIiCitNQUlOVEFJTkVSID0gIiIKK0xJQ0VOU0UgPSAiR1BMIgorUFIgPSAicjAiCisKK1NSQ19VUkkgPSAiIgorCisjaW5oZXJpdCBiYXNlCisKKyNkb19jb25maWd1cmUoKSB7CisjCisjfQorCisjZG9fY29tcGlsZSgpIHsKKyMKKyN9CisKKyNkb19zdGFnZSgpIHsKKyMKKyN9CisKKyNkb19pbnN0YWxsKCkgeworIworI30KKyIiIiwgZmlsZT1uZXdwYWNrYWdlKQorICAgICAgICAgICAgbmV3cGFja2FnZS5jbG9zZSgpCisgICAgICAgICAgICBvcy5zeXN0ZW0oICIlcyAlcy8lcyIgJSAoIG9zLmVudmlyb24uZ2V0KCAiRURJVE9SIiApLCBmdWxsZGlybmFtZSwgZmlsZW5hbWUgKSApCisgICAgbmV3LnVzYWdlID0gIjxkaXJlY3Rvcnk+IDxmaWxlbmFtZT4iCisKKyAgICBkZWYgcGFja2FnZSggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkV4ZWN1dGUgJ3BhY2thZ2UnIG9uIGEgcHJvdmlkZWUiIiIKKyAgICAgICAgc2VsZi5idWlsZCggcGFyYW1zLCAicGFja2FnZSIgKQorICAgIHBhY2thZ2UudXNhZ2UgPSAiPHByb3ZpZGVlPiIKKworICAgIGRlZiBwYXN0ZUJpbiggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIlNlbmQgYSBjb21tYW5kICsgb3V0cHV0IGJ1ZmZlciB0byB0aGUgcGFzdGViaW4gYXQgaHR0cDovL3JhZmIubmV0L3Bhc3RlIiIiCisgICAgICAgIGluZGV4ID0gcGFyYW1zWzBdCisgICAgICAgIGNvbnRlbnRzID0gc2VsZi5fc2hlbGwubXlvdXQuYnVmZmVyKCBpbnQoIGluZGV4ICkgKQorICAgICAgICBzZW5kVG9QYXN0ZWJpbiggIm91dHB1dCBvZiAiICsgcGFyYW1zWzBdLCBjb250ZW50cyApCisgICAgcGFzdGVCaW4udXNhZ2UgPSAiPGluZGV4PiIKKworICAgIGRlZiBwYXN0ZUxvZyggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIlNlbmQgdGhlIGxhc3QgZXZlbnQgZXhjZXB0aW9uIGVycm9yIGxvZyAoaWYgdGhlcmUgaXMgb25lKSB0byBodHRwOi8vcmFmYi5uZXQvcGFzdGUiIiIKKyAgICAgICAgaWYgbGFzdF9leGNlcHRpb24gaXMgTm9uZToKKyAgICAgICAgICAgIHByaW50KCJTSEVMTDogTm8gRXJyb3JzIHlldCAoUGhldykuLi4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVhc29uLCBldmVudCA9IGxhc3RfZXhjZXB0aW9uLmFyZ3MKKyAgICAgICAgICAgIHByaW50KCJTSEVMTDogUmVhc29uIGZvciB0aGUgbGFzdCBlcnJvcjogJyVzJyIgJSByZWFzb24pCisgICAgICAgICAgICBpZiAnOicgaW4gcmVhc29uOgorICAgICAgICAgICAgICAgIG1zZywgZmlsZW5hbWUgPSByZWFzb24uc3BsaXQoICc6JyApCisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdHJpcCgpCisgICAgICAgICAgICAgICAgcHJpbnQoIlNIRUxMOiBQYXN0aW5nIGxvZyBmaWxlIHRvIHBhc3RlYmluLi4uIikKKworICAgICAgICAgICAgICAgIGZpbGUgPSBvcGVuKCBmaWxlbmFtZSApLnJlYWQoKQorICAgICAgICAgICAgICAgIHNlbmRUb1Bhc3RlYmluKCAiY29udGVudHMgb2YgIiArIGZpbGVuYW1lLCBmaWxlICkKKworICAgIGRlZiBwYXRjaCggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkV4ZWN1dGUgJ3BhdGNoJyBjb21tYW5kIG9uIGEgcHJvdmlkZWUiIiIKKyAgICAgICAgc2VsZi5idWlsZCggcGFyYW1zLCAicGF0Y2giICkKKyAgICBwYXRjaC51c2FnZSA9ICI8cHJvdmlkZWU+IgorCisgICAgZGVmIHBhcnNlKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiKFJlLSlwYXJzZSAuYmIgZmlsZXMgYW5kIGNhbGN1bGF0ZSB0aGUgZGVwZW5kZW5jeSBncmFwaCIiIgorICAgICAgICBjb29rZXIuc3RhdHVzID0gY2FjaGUuQ2FjaGVEYXRhKGNvb2tlci5jYWNoZXNfYXJyYXkpCisgICAgICAgIGlnbm9yZSA9IGRhdGEuZ2V0VmFyKCJBU1NVTUVfUFJPVklERUQiLCBjb29rZXIuY29uZmlndXJhdGlvbi5kYXRhLCAxKSBvciAiIgorICAgICAgICBjb29rZXIuc3RhdHVzLmlnbm9yZWRfZGVwZW5kZW5jaWVzID0gc2V0KCBpZ25vcmUuc3BsaXQoKSApCisgICAgICAgIGNvb2tlci5oYW5kbGVDb2xsZWN0aW9ucyggZGF0YS5nZXRWYXIoIkJCRklMRV9DT0xMRUNUSU9OUyIsIGNvb2tlci5jb25maWd1cmF0aW9uLmRhdGEsIDEpICkKKworICAgICAgICAoZmlsZWxpc3QsIG1hc2tlZCkgPSBjb29rZXIuY29sbGVjdF9iYmZpbGVzKCkKKyAgICAgICAgY29va2VyLnBhcnNlX2JiZmlsZXMoZmlsZWxpc3QsIG1hc2tlZCwgY29va2VyLm15UHJvZ3Jlc3NDYWxsYmFjaykKKyAgICAgICAgY29va2VyLmJ1aWxkRGVwZ3JhcGgoKQorICAgICAgICBnbG9iYWwgcGFyc2VkCisgICAgICAgIHBhcnNlZCA9IFRydWUKKyAgICAgICAgcHJpbnQoKQorCisgICAgZGVmIHJlcGFyc2UoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiIocmUpUGFyc2UgYSBwcm92aWRlZSdzIGJiIGZpbGUiIiIKKyAgICAgICAgYmJmaWxlID0gc2VsZi5fZmluZFByb3ZpZGVyKCBwYXJhbXNbMF0gKQorICAgICAgICBpZiBiYmZpbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBwcmludCgiU0hFTEw6IEZvdW5kIGJiZmlsZSAnJXMnIGZvciAnJXMnIiAlICggYmJmaWxlLCBwYXJhbXNbMF0gKSkKKyAgICAgICAgICAgIHNlbGYuZmlsZVJlcGFyc2UoIFsgYmJmaWxlIF0gKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIkVSUk9SOiBOb3RoaW5nIHByb3ZpZGVzICclcyciICUgcGFyYW1zWzBdKQorICAgIHJlcGFyc2UudXNhZ2UgPSAiPHByb3ZpZGVlPiIKKworICAgIGRlZiBnZXR2YXIoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJEdW1wIHRoZSBjb250ZW50cyBvZiBhbiBvdXRlciBCaXRCYWtlIGVudmlyb25tZW50IHZhcmlhYmxlIiIiCisgICAgICAgIHZhciA9IHBhcmFtc1swXQorICAgICAgICB2YWx1ZSA9IGRhdGEuZ2V0VmFyKCB2YXIsIGNvb2tlci5jb25maWd1cmF0aW9uLmRhdGEsIDEgKQorICAgICAgICBwcmludCh2YWx1ZSkKKyAgICBnZXR2YXIudXNhZ2UgPSAiPHZhcmlhYmxlPiIKKworICAgIGRlZiBwZWVrKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiRHVtcCBjb250ZW50cyBvZiB2YXJpYWJsZSBkZWZpbmVkIGluIHByb3ZpZGVlJ3MgbWV0YWRhdGEiIiIKKyAgICAgICAgbmFtZSwgdmFyID0gcGFyYW1zCisgICAgICAgIGJiZmlsZSA9IHNlbGYuX2ZpbmRQcm92aWRlciggbmFtZSApCisgICAgICAgIGlmIGJiZmlsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRoZV9kYXRhID0gY2FjaGUuQ2FjaGUubG9hZERhdGFGdWxsKGJiZmlsZSwgY29va2VyLmNvbmZpZ3VyYXRpb24uZGF0YSkKKyAgICAgICAgICAgIHZhbHVlID0gdGhlX2RhdGEuZ2V0VmFyKCB2YXIsIDEgKQorICAgICAgICAgICAgcHJpbnQodmFsdWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiRVJST1I6IE5vdGhpbmcgcHJvdmlkZXMgJyVzJyIgJSBuYW1lKQorICAgIHBlZWsudXNhZ2UgPSAiPHByb3ZpZGVlPiA8dmFyaWFibGU+IgorCisgICAgZGVmIHBva2UoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJTZXQgY29udGVudHMgb2YgdmFyaWFibGUgZGVmaW5lZCBpbiBwcm92aWRlZSdzIG1ldGFkYXRhIiIiCisgICAgICAgIG5hbWUsIHZhciwgdmFsdWUgPSBwYXJhbXMKKyAgICAgICAgYmJmaWxlID0gc2VsZi5fZmluZFByb3ZpZGVyKCBuYW1lICkKKyAgICAgICAgaWYgYmJmaWxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcHJpbnQoIkVSUk9SOiBTb3JyeSwgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGN1cnJlbnRseSBicm9rZW4iKQorICAgICAgICAgICAgI2QgPSBjb29rZXIucGtnZGF0YVtiYmZpbGVdCisgICAgICAgICAgICAjZGF0YS5zZXRWYXIoIHZhciwgdmFsdWUsIGQgKQorCisgICAgICAgICAgICAjIG1hcmsgdGhlIGNoYW5nZSBzZW1pIHBlcnNpc3RhbnQKKyAgICAgICAgICAgICNjb29rZXIucGtnZGF0YS5zZXREaXJ0eShiYmZpbGUsIGQpCisgICAgICAgICAgICAjcHJpbnQgIk9LIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIkVSUk9SOiBOb3RoaW5nIHByb3ZpZGVzICclcyciICUgbmFtZSkKKyAgICBwb2tlLnVzYWdlID0gIjxwcm92aWRlZT4gPHZhcmlhYmxlPiA8dmFsdWU+IgorCisgICAgZGVmIHByaW50Xyggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkR1bXAgYWxsIGZpbGVzIG9yIHByb3ZpZGVycyIiIgorICAgICAgICB3aGF0ID0gcGFyYW1zWzBdCisgICAgICAgIGlmIHdoYXQgPT0gImZpbGVzIjoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrUGFyc2VkKCkKKyAgICAgICAgICAgIGZvciBrZXkgaW4gY29va2VyLnN0YXR1cy5wa2dfZm46IHByaW50KGtleSkKKyAgICAgICAgZWxpZiB3aGF0ID09ICJwcm92aWRlcnMiOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tQYXJzZWQoKQorICAgICAgICAgICAgZm9yIGtleSBpbiBjb29rZXIuc3RhdHVzLnByb3ZpZGVyczogcHJpbnQoa2V5KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIlVzYWdlOiBwcmludCAlcyIgJSBzZWxmLnByaW50Xy51c2FnZSkKKyAgICBwcmludF8udXNhZ2UgPSAiPGZpbGVzfHByb3ZpZGVycz4iCisKKyAgICBkZWYgcHl0aG9uKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiRW50ZXIgdGhlIGV4cGVydCBtb2RlIC0gYW4gaW50ZXJhY3RpdmUgQml0QmFrZSBQeXRob24gSW50ZXJwcmV0ZXIiIiIKKyAgICAgICAgc3lzLnBzMSA9ICJFWFBFUlQgQkI+Pj4gIgorICAgICAgICBzeXMucHMyID0gIkVYUEVSVCBCQi4uLiAiCisgICAgICAgIGltcG9ydCBjb2RlCisgICAgICAgIGludGVycHJldGVyID0gY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGUoIGRpY3QoIGdsb2JhbHMoKSApICkKKyAgICAgICAgaW50ZXJwcmV0ZXIuaW50ZXJhY3QoICJTSEVMTDogRXhwZXJ0IE1vZGUgLSBCaXRCYWtlIFB5dGhvbiAlc1xuVHlwZSAnaGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24sIHByZXNzIENUUkwtRCB0byBzd2l0Y2ggYmFjayB0byBCQlNIRUxMLiIgJSBzeXMudmVyc2lvbiApCisKKyAgICBkZWYgc2hvd2RhdGEoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJFeGVjdXRlICdzaG93ZGF0YScgb24gYSBwcm92aWRlZSIiIgorICAgICAgICBjb29rZXIuc2hvd0Vudmlyb25tZW50KE5vbmUsIHBhcmFtcykKKyAgICBzaG93ZGF0YS51c2FnZSA9ICI8cHJvdmlkZWU+IgorCisgICAgZGVmIHNldFZhciggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIlNldCBhbiBvdXRlciBCaXRCYWtlIGVudmlyb25tZW50IHZhcmlhYmxlIiIiCisgICAgICAgIHZhciwgdmFsdWUgPSBwYXJhbXMKKyAgICAgICAgZGF0YS5zZXRWYXIoIHZhciwgdmFsdWUsIGNvb2tlci5jb25maWd1cmF0aW9uLmRhdGEgKQorICAgICAgICBwcmludCgiT0siKQorICAgIHNldFZhci51c2FnZSA9ICI8dmFyaWFibGU+IDx2YWx1ZT4iCisKKyAgICBkZWYgcmVidWlsZCggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkNsZWFuIGFuZCByZWJ1aWxkIGEgLmJiIGZpbGUgb3IgYSBwcm92aWRlZSIiIgorICAgICAgICBzZWxmLmJ1aWxkKCBwYXJhbXMsICJjbGVhbiIgKQorICAgICAgICBzZWxmLmJ1aWxkKCBwYXJhbXMsICJidWlsZCIgKQorICAgIHJlYnVpbGQudXNhZ2UgPSAiPHByb3ZpZGVlPiIKKworICAgIGRlZiBzaGVsbCggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkV4ZWN1dGUgYSBzaGVsbCBjb21tYW5kIGFuZCBkdW1wIHRoZSBvdXRwdXQiIiIKKyAgICAgICAgaWYgcGFyYW1zICE9ICIiOgorICAgICAgICAgICAgcHJpbnQoY29tbWFuZHMuZ2V0b3V0cHV0KCAiICIuam9pbiggcGFyYW1zICkgKSkKKyAgICBzaGVsbC51c2FnZSA9ICI8Li4uPiIKKworICAgIGRlZiBzdGFnZSggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkV4ZWN1dGUgJ3N0YWdlJyBvbiBhIHByb3ZpZGVlIiIiCisgICAgICAgIHNlbGYuYnVpbGQoIHBhcmFtcywgInBvcHVsYXRlX3N0YWdpbmciICkKKyAgICBzdGFnZS51c2FnZSA9ICI8cHJvdmlkZWU+IgorCisgICAgZGVmIHN0YXR1cyggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIjxqdXN0IGZvciB0ZXN0aW5nPiIiIgorICAgICAgICBwcmludCgiLSIgKiA3OCkKKyAgICAgICAgcHJpbnQoImJ1aWxkaW5nIGxpc3QgPSAnJXMnIiAlIGNvb2tlci5idWlsZGluZ19saXN0KQorICAgICAgICBwcmludCgiYnVpbGQgcGF0aCA9ICclcyciICUgY29va2VyLmJ1aWxkX3BhdGgpCisgICAgICAgIHByaW50KCJjb25zaWRlcl9tc2dzX2NhY2hlID0gJyVzJyIgJSBjb29rZXIuY29uc2lkZXJfbXNnc19jYWNoZSkKKyAgICAgICAgcHJpbnQoImJ1aWxkIHN0YXRzID0gJyVzJyIgJSBjb29rZXIuc3RhdHMpCisgICAgICAgIGlmIGxhc3RfZXhjZXB0aW9uIGlzIG5vdCBOb25lOiBwcmludCgibGFzdF9leGNlcHRpb24gPSAnJXMnIiAlIHJlcHIoIGxhc3RfZXhjZXB0aW9uLmFyZ3MgKSkKKyAgICAgICAgcHJpbnQoIm1lbW9yeSBvdXRwdXQgY29udGVudHMgPSAnJXMnIiAlIHNlbGYuX3NoZWxsLm15b3V0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdCggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIjxqdXN0IGZvciB0ZXN0aW5nPiIiIgorICAgICAgICBwcmludCgidGVzdENvbW1hbmQgY2FsbGVkIHdpdGggJyVzJyIgJSBwYXJhbXMpCisKKyAgICBkZWYgdW5wYWNrKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiRXhlY3V0ZSAndW5wYWNrJyBvbiBhIHByb3ZpZGVlIiIiCisgICAgICAgIHNlbGYuYnVpbGQoIHBhcmFtcywgInVucGFjayIgKQorICAgIHVucGFjay51c2FnZSA9ICI8cHJvdmlkZWU+IgorCisgICAgZGVmIHdoaWNoKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiQ29tcHV0ZXMgdGhlIHByb3ZpZGVycyBmb3IgYSBnaXZlbiBwcm92aWRlZSIiIgorICAgICAgICAjIE5lZWQgdG8gdXNlIHRhc2tEYXRhIGZvciB0aGlzIGluZm9ybWF0aW9uCisgICAgICAgIGl0ZW0gPSBwYXJhbXNbMF0KKworICAgICAgICBzZWxmLl9jaGVja1BhcnNlZCgpCisKKyAgICAgICAgcHJlZmVycmVkID0gZGF0YS5nZXRWYXIoICJQUkVGRVJSRURfUFJPVklERVJfJXMiICUgaXRlbSwgY29va2VyLmNvbmZpZ3VyYXRpb24uZGF0YSwgMSApCisgICAgICAgIGlmIG5vdCBwcmVmZXJyZWQ6IHByZWZlcnJlZCA9IGl0ZW0KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsdiwgbGYsIHB2LCBwZiA9IFByb3ZpZGVycy5maW5kQmVzdFByb3ZpZGVyKHByZWZlcnJlZCwgY29va2VyLmNvbmZpZ3VyYXRpb24uZGF0YSwgY29va2VyLnN0YXR1cykKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgbHYsIGxmLCBwdiwgcGYgPSAoTm9uZSwpKjQKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBwcm92aWRlcnMgPSBjb29rZXIuc3RhdHVzLnByb3ZpZGVyc1tpdGVtXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwcmludCgiU0hFTEw6IEVSUk9SOiBOb3RoaW5nIHByb3ZpZGVzIiwgcHJlZmVycmVkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIHByb3ZpZGVyIGluIHByb3ZpZGVyczoKKyAgICAgICAgICAgICAgICBpZiBwcm92aWRlciA9PSBwZjogcHJvdmlkZXIgPSAiICgqKiopICVzIiAlIHByb3ZpZGVyCisgICAgICAgICAgICAgICAgZWxzZTogICAgICAgICAgICAgIHByb3ZpZGVyID0gIiAgICAgICAlcyIgJSBwcm92aWRlcgorICAgICAgICAgICAgICAgIHByaW50KHByb3ZpZGVyKQorICAgIHdoaWNoLnVzYWdlID0gIjxwcm92aWRlZT4iCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvbW1vbiBoZWxwZXIgZnVuY3Rpb25zCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWYgY29tcGxldGVGaWxlUGF0aCggYmJmaWxlICk6CisgICAgIiIiR2V0IHRoZSBjb21wbGV0ZSBiYmZpbGUgcGF0aCIiIgorICAgIGlmIG5vdCBjb29rZXIuc3RhdHVzOiByZXR1cm4gYmJmaWxlCisgICAgaWYgbm90IGNvb2tlci5zdGF0dXMucGtnX2ZuOiByZXR1cm4gYmJmaWxlCisgICAgZm9yIGtleSBpbiBjb29rZXIuc3RhdHVzLnBrZ19mbjoKKyAgICAgICAgaWYga2V5LmVuZHN3aXRoKCBiYmZpbGUgKToKKyAgICAgICAgICAgIHJldHVybiBrZXkKKyAgICByZXR1cm4gYmJmaWxlCisKK2RlZiBzZW5kVG9QYXN0ZWJpbiggZGVzYywgY29udGVudCApOgorICAgICIiIlNlbmQgY29udGVudCB0byBodHRwOi8vb2UucGFzdGViaW4uY29tIiIiCisgICAgbXlkYXRhID0ge30KKyAgICBteWRhdGFbImxhbmciXSA9ICJQbGFpbiBUZXh0IgorICAgIG15ZGF0YVsiZGVzYyJdID0gZGVzYworICAgIG15ZGF0YVsiY3Z0X3RhYnMiXSA9ICJObyIKKyAgICBteWRhdGFbIm5pY2siXSA9ICIlc0AlcyIgJSAoIG9zLmVudmlyb24uZ2V0KCAiVVNFUiIsICJ1bmtub3duIiApLCBzb2NrZXQuZ2V0aG9zdG5hbWUoKSBvciAidW5rbm93biIgKQorICAgIG15ZGF0YVsidGV4dCJdID0gY29udGVudAorICAgIHBhcmFtcyA9IHVybGxpYi51cmxlbmNvZGUoIG15ZGF0YSApCisgICAgaGVhZGVycyA9IHsiQ29udGVudC10eXBlIjogImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsICJBY2NlcHQiOiAidGV4dC9wbGFpbiJ9CisKKyAgICBob3N0ID0gInJhZmIubmV0IgorICAgIGNvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKCAiJXM6ODAiICUgaG9zdCApCisgICAgY29ubi5yZXF1ZXN0KCJQT1NUIiwgIi9wYXN0ZS9wYXN0ZS5waHAiLCBwYXJhbXMsIGhlYWRlcnMgKQorCisgICAgcmVzcG9uc2UgPSBjb25uLmdldHJlc3BvbnNlKCkKKyAgICBjb25uLmNsb3NlKCkKKworICAgIGlmIHJlc3BvbnNlLnN0YXR1cyA9PSAzMDI6CisgICAgICAgIGxvY2F0aW9uID0gcmVzcG9uc2UuZ2V0aGVhZGVyKCAibG9jYXRpb24iICkgb3IgInVua25vd24iCisgICAgICAgIHByaW50KCJTSEVMTDogUGFzdGVkIHRvIGh0dHA6Ly8lcyVzIiAlICggaG9zdCwgbG9jYXRpb24gKSkKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiRVJST1I6ICVzICVzIiAlICggcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5yZWFzb24gKSkKKworZGVmIGNvbXBsZXRlciggdGV4dCwgc3RhdGUgKToKKyAgICAiIiJSZXR1cm4gYSBwb3NzaWJsZSByZWFkbGluZSBjb21wbGV0aW9uIiIiCisgICAgZGVidWdPdXQoICJjb21wbGV0ZXIgY2FsbGVkIHdpdGggdGV4dD0nJXMnLCBzdGF0ZT0nJWQnIiAlICggdGV4dCwgc3RhdGUgKSApCisKKyAgICBpZiBzdGF0ZSA9PSAwOgorICAgICAgICBsaW5lID0gcmVhZGxpbmUuZ2V0X2xpbmVfYnVmZmVyKCkKKyAgICAgICAgaWYgIiAiIGluIGxpbmU6CisgICAgICAgICAgICBsaW5lID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICAjIHdlIGFyZSBpbiBzZWNvbmQgKG9yIG1vcmUpIGFyZ3VtZW50CisgICAgICAgICAgICBpZiBsaW5lWzBdIGluIGNtZHMgYW5kIGhhc2F0dHIoIGNtZHNbbGluZVswXV1bMF0sICJ1c2FnZSIgKTogIyBrbm93biBjb21tYW5kIGFuZCB1c2FnZQorICAgICAgICAgICAgICAgIHUgPSBnZXRhdHRyKCBjbWRzW2xpbmVbMF1dWzBdLCAidXNhZ2UiICkuc3BsaXQoKVswXQorICAgICAgICAgICAgICAgIGlmIHUgPT0gIjx2YXJpYWJsZT4iOgorICAgICAgICAgICAgICAgICAgICBhbGxtYXRjaGVzID0gY29va2VyLmNvbmZpZ3VyYXRpb24uZGF0YS5rZXlzKCkKKyAgICAgICAgICAgICAgICBlbGlmIHUgPT0gIjxiYmZpbGU+IjoKKyAgICAgICAgICAgICAgICAgICAgaWYgY29va2VyLnN0YXR1cy5wa2dfZm4gaXMgTm9uZTogYWxsbWF0Y2hlcyA9IFsgIihObyBNYXRjaGVzIEF2YWlsYWJsZS4gUGFyc2VkIHlldD8pIiBdCisgICAgICAgICAgICAgICAgICAgIGVsc2U6IGFsbG1hdGNoZXMgPSBbIHguc3BsaXQoIi8iKVstMV0gZm9yIHggaW4gY29va2VyLnN0YXR1cy5wa2dfZm4gXQorICAgICAgICAgICAgICAgIGVsaWYgdSA9PSAiPHByb3ZpZGVlPiI6CisgICAgICAgICAgICAgICAgICAgIGlmIGNvb2tlci5zdGF0dXMucGtnX2ZuIGlzIE5vbmU6IGFsbG1hdGNoZXMgPSBbICIoTm8gTWF0Y2hlcyBBdmFpbGFibGUuIFBhcnNlZCB5ZXQ/KSIgXQorICAgICAgICAgICAgICAgICAgICBlbHNlOiBhbGxtYXRjaGVzID0gY29va2VyLnN0YXR1cy5wcm92aWRlcnMuaXRlcmtleXMoKQorICAgICAgICAgICAgICAgIGVsc2U6IGFsbG1hdGNoZXMgPSBbICIoTm8gdGFiIGNvbXBsZXRpb24gYXZhaWxhYmxlIGZvciB0aGlzIGNvbW1hbmQpIiBdCisgICAgICAgICAgICBlbHNlOiBhbGxtYXRjaGVzID0gWyAiKE5vIHRhYiBjb21wbGV0aW9uIGF2YWlsYWJsZSBmb3IgdGhpcyBjb21tYW5kKSIgXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyB3ZSBhcmUgaW4gZmlyc3QgYXJndW1lbnQKKyAgICAgICAgICAgIGFsbG1hdGNoZXMgPSBjbWRzLml0ZXJrZXlzKCkKKworICAgICAgICBjb21wbGV0ZXIubWF0Y2hlcyA9IFsgeCBmb3IgeCBpbiBhbGxtYXRjaGVzIGlmIHhbOmxlbih0ZXh0KV0gPT0gdGV4dCBdCisgICAgICAgICNwcmludCAiY29tcGxldGVyLm1hdGNoZXMgPSAnJXMnIiAlIGNvbXBsZXRlci5tYXRjaGVzCisgICAgaWYgbGVuKCBjb21wbGV0ZXIubWF0Y2hlcyApID4gc3RhdGU6CisgICAgICAgIHJldHVybiBjb21wbGV0ZXIubWF0Y2hlc1tzdGF0ZV0KKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gTm9uZQorCitkZWYgZGVidWdPdXQoIHRleHQgKToKKyAgICBpZiBkZWJ1ZzoKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSggIiggJXMgKVxuIiAlIHRleHQgKQorCitkZWYgY29sdW1uaXplKCBhbGlzdCwgd2lkdGggPSA4MCApOgorICAgICIiIgorICAgIEEgd29yZC13cmFwIGZ1bmN0aW9uIHRoYXQgcHJlc2VydmVzIGV4aXN0aW5nIGxpbmUgYnJlYWtzCisgICAgYW5kIG1vc3Qgc3BhY2VzIGluIHRoZSB0ZXh0LiBFeHBlY3RzIHRoYXQgZXhpc3RpbmcgbGluZQorICAgIGJyZWFrcyBhcmUgcG9zaXggbmV3bGluZXMgKFxuKS4KKyAgICAiIiIKKyAgICByZXR1cm4gcmVkdWNlKGxhbWJkYSBsaW5lLCB3b3JkLCB3aWR0aD13aWR0aDogJyVzJXMlcycgJQorICAgICAgICAgICAgICAgICAgKGxpbmUsCisgICAgICAgICAgICAgICAgICAgJyBcbidbKGxlbihsaW5lW2xpbmUucmZpbmQoJ1xuJykrMTpdKQorICAgICAgICAgICAgICAgICAgICAgICAgICsgbGVuKHdvcmQuc3BsaXQoJ1xuJywgMSlbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPj0gd2lkdGgpXSwKKyAgICAgICAgICAgICAgICAgICB3b3JkKSwKKyAgICAgICAgICAgICAgICAgIGFsaXN0CisgICAgICAgICAgICAgICAgICkKKworZGVmIGdsb2JmaWx0ZXIoIG5hbWVzLCBwYXR0ZXJuICk6CisgICAgcmV0dXJuIGZubWF0Y2guZmlsdGVyKCBuYW1lcywgcGF0dGVybiApCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENsYXNzIE1lbW9yeU91dHB1dAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2xhc3MgTWVtb3J5T3V0cHV0OgorICAgICIiIkZpbGUtbGlrZSBvdXRwdXQgY2xhc3MgYnVmZmVyaW5nIHRoZSBvdXRwdXQgb2YgdGhlIGxhc3QgMTAgY29tbWFuZHMiIiIKKyAgICBkZWYgX19pbml0X18oIHNlbGYsIGRlbGVnYXRlICk6CisgICAgICAgIHNlbGYuZGVsZWdhdGUgPSBkZWxlZ2F0ZQorICAgICAgICBzZWxmLl9idWZmZXIgPSBbXQorICAgICAgICBzZWxmLnRleHQgPSBbXQorICAgICAgICBzZWxmLl9jb21tYW5kID0gTm9uZQorCisgICAgZGVmIHN0YXJ0Q29tbWFuZCggc2VsZiwgY29tbWFuZCApOgorICAgICAgICBzZWxmLl9jb21tYW5kID0gY29tbWFuZAorICAgICAgICBzZWxmLnRleHQgPSBbXQorICAgIGRlZiBlbmRDb21tYW5kKCBzZWxmICk6CisgICAgICAgIGlmIHNlbGYuX2NvbW1hbmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBsZW4oIHNlbGYuX2J1ZmZlciApID09IDEwOiBkZWwgc2VsZi5fYnVmZmVyWzBdCisgICAgICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kKCAoIHNlbGYuX2NvbW1hbmQsIHNlbGYudGV4dCApICkKKyAgICBkZWYgcmVtb3ZlTGFzdCggc2VsZiApOgorICAgICAgICBpZiBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBkZWwgc2VsZi5fYnVmZmVyWyBsZW4oIHNlbGYuX2J1ZmZlciApIC0gMSBdCisgICAgICAgIHNlbGYudGV4dCA9IFtdCisgICAgICAgIHNlbGYuX2NvbW1hbmQgPSBOb25lCisgICAgZGVmIGxhc3RCdWZmZXIoIHNlbGYgKToKKyAgICAgICAgaWYgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2J1ZmZlclsgbGVuKCBzZWxmLl9idWZmZXIgKSAtMSBdWzFdCisgICAgZGVmIGJ1ZmZlcmVkQ29tbWFuZHMoIHNlbGYgKToKKyAgICAgICAgcmV0dXJuIFsgY21kIGZvciBjbWQsIG91dHB1dCBpbiBzZWxmLl9idWZmZXIgXQorICAgIGRlZiBidWZmZXIoIHNlbGYsIGkgKToKKyAgICAgICAgaWYgaSA8IGxlbiggc2VsZi5fYnVmZmVyICk6CisgICAgICAgICAgICByZXR1cm4gIkJCPj4gJXNcbiVzIiAlICggc2VsZi5fYnVmZmVyW2ldWzBdLCAiIi5qb2luKCBzZWxmLl9idWZmZXJbaV1bMV0gKSApCisgICAgICAgIGVsc2U6IHJldHVybiAiRVJST1I6IEludmFsaWQgYnVmZmVyIG51bWJlci4gQnVmZmVyIG5lZWRzIHRvIGJlIGluICgwLCAlZCkiICUgKCBsZW4oIHNlbGYuX2J1ZmZlciApIC0gMSApCisgICAgZGVmIHdyaXRlKCBzZWxmLCB0ZXh0ICk6CisgICAgICAgIGlmIHNlbGYuX2NvbW1hbmQgaXMgbm90IE5vbmUgYW5kIHRleHQgIT0gIkJCPj4gIjogc2VsZi50ZXh0LmFwcGVuZCggdGV4dCApCisgICAgICAgIGlmIHNlbGYuZGVsZWdhdGUgaXMgbm90IE5vbmU6IHNlbGYuZGVsZWdhdGUud3JpdGUoIHRleHQgKQorICAgIGRlZiBmbHVzaCggc2VsZiApOgorICAgICAgICByZXR1cm4gc2VsZi5kZWxlZ2F0ZS5mbHVzaCgpCisgICAgZGVmIGZpbGVubyggc2VsZiApOgorICAgICAgICByZXR1cm4gc2VsZi5kZWxlZ2F0ZS5maWxlbm8oKQorICAgIGRlZiBpc2F0dHkoIHNlbGYgKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZGVsZWdhdGUuaXNhdHR5KCkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ2xhc3MgQml0QmFrZVNoZWxsCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjbGFzcyBCaXRCYWtlU2hlbGw6CisKKyAgICBkZWYgX19pbml0X18oIHNlbGYgKToKKyAgICAgICAgIiIiUmVnaXN0ZXIgY29tbWFuZHMgYW5kIHNldCB1cCByZWFkbGluZSIiIgorICAgICAgICBzZWxmLmNvbW1hbmRRID0gUXVldWUuUXVldWUoKQorICAgICAgICBzZWxmLmNvbW1hbmRzID0gQml0QmFrZVNoZWxsQ29tbWFuZHMoIHNlbGYgKQorICAgICAgICBzZWxmLm15b3V0ID0gTWVtb3J5T3V0cHV0KCBzeXMuc3Rkb3V0ICkKKyAgICAgICAgc2VsZi5oaXN0b3J5ZmlsZW5hbWUgPSBvcy5wYXRoLmV4cGFuZHVzZXIoICJ+Ly5iYnNoX2hpc3RvcnkiICkKKyAgICAgICAgc2VsZi5zdGFydHVwZmlsZW5hbWUgPSBvcy5wYXRoLmV4cGFuZHVzZXIoICJ+Ly5iYnNoX3N0YXJ0dXAiICkKKworICAgICAgICByZWFkbGluZS5zZXRfY29tcGxldGVyKCBjb21wbGV0ZXIgKQorICAgICAgICByZWFkbGluZS5zZXRfY29tcGxldGVyX2RlbGltcyggIiAiICkKKyAgICAgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQoInRhYjogY29tcGxldGUiKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlYWRsaW5lLnJlYWRfaGlzdG9yeV9maWxlKCBzZWxmLmhpc3RvcnlmaWxlbmFtZSApCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcGFzcyAgIyBJdCBkb2Vzbid0IGV4aXN0IHlldC4KKworICAgICAgICBwcmludChfX2NyZWRpdHNfXykKKworICAgIGRlZiBjbGVhbnVwKCBzZWxmICk6CisgICAgICAgICIiIldyaXRlIHJlYWRsaW5lIGhpc3RvcnkgYW5kIGNsZWFuIHVwIHJlc291cmNlcyIiIgorICAgICAgICBkZWJ1Z091dCggIndyaXRpbmcgY29tbWFuZCBoaXN0b3J5IiApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlYWRsaW5lLndyaXRlX2hpc3RvcnlfZmlsZSggc2VsZi5oaXN0b3J5ZmlsZW5hbWUgKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwcmludCgiU0hFTEw6IFVuYWJsZSB0byBzYXZlIGNvbW1hbmQgaGlzdG9yeSIpCisKKyAgICBkZWYgcmVnaXN0ZXJDb21tYW5kKCBzZWxmLCBjb21tYW5kLCBmdW5jdGlvbiwgbnVtcGFyYW1zID0gMCwgdXNhZ2UgPSAiIiwgaGVscHRleHQgPSAiIiApOgorICAgICAgICAiIiJSZWdpc3RlciBhIGNvbW1hbmQiIiIKKyAgICAgICAgaWYgdXNhZ2UgPT0gIiI6IHVzYWdlID0gY29tbWFuZAorICAgICAgICBpZiBoZWxwdGV4dCA9PSAiIjogaGVscHRleHQgPSBmdW5jdGlvbi5fX2RvY19fIG9yICI8bm90IHlldCBkb2N1bWVudGVkPiIKKyAgICAgICAgY21kc1tjb21tYW5kXSA9ICggZnVuY3Rpb24sIG51bXBhcmFtcywgdXNhZ2UsIGhlbHB0ZXh0ICkKKworICAgIGRlZiBwcm9jZXNzQ29tbWFuZCggc2VsZiwgY29tbWFuZCwgcGFyYW1zICk6CisgICAgICAgICIiIlByb2Nlc3MgYSBjb21tYW5kLiBDaGVjayBudW1iZXIgb2YgcGFyYW1zIGFuZCBwcmludCBhIHVzYWdlIHN0cmluZywgaWYgYXBwcm9wcmlhdGUiIiIKKyAgICAgICAgZGVidWdPdXQoICJwcm9jZXNzaW5nIGNvbW1hbmQgJyVzJy4uLiIgJSBjb21tYW5kICkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnVuY3Rpb24sIG51bXBhcmFtcywgdXNhZ2UsIGhlbHB0ZXh0ID0gY21kc1tjb21tYW5kXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwcmludCgiU0hFTEw6IEVSUk9SOiAnJXMnIGNvbW1hbmQgaXMgbm90IGEgdmFsaWQgY29tbWFuZC4iICUgY29tbWFuZCkKKyAgICAgICAgICAgIHNlbGYubXlvdXQucmVtb3ZlTGFzdCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiAobnVtcGFyYW1zICE9IC0xKSBhbmQgKG5vdCBsZW4oIHBhcmFtcyApID09IG51bXBhcmFtcyk6CisgICAgICAgICAgICAgICAgcHJpbnQoIlVzYWdlOiAnJXMnIiAlIHVzYWdlKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICByZXN1bHQgPSBmdW5jdGlvbiggc2VsZi5jb21tYW5kcywgcGFyYW1zICkKKyAgICAgICAgICAgIGRlYnVnT3V0KCAicmVzdWx0IHdhcyAnJXMnIiAlIHJlc3VsdCApCisKKyAgICBkZWYgcHJvY2Vzc1N0YXJ0dXBGaWxlKCBzZWxmICk6CisgICAgICAgICIiIlJlYWQgYW5kIGV4ZWN1dGUgYWxsIGNvbW1hbmRzIGZvdW5kIGluICRIT01FLy5iYnNoX3N0YXJ0dXAiIiIKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoIHNlbGYuc3RhcnR1cGZpbGVuYW1lICk6CisgICAgICAgICAgICBzdGFydHVwZmlsZSA9IG9wZW4oIHNlbGYuc3RhcnR1cGZpbGVuYW1lLCAiciIgKQorICAgICAgICAgICAgZm9yIGNtZGxpbmUgaW4gc3RhcnR1cGZpbGU6CisgICAgICAgICAgICAgICAgZGVidWdPdXQoICJwcm9jZXNzaW5nIHN0YXJ0dXAgbGluZSAnJXMnIiAlIGNtZGxpbmUgKQorICAgICAgICAgICAgICAgIGlmIG5vdCBjbWRsaW5lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmICJ8IiBpbiBjbWRsaW5lOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiRVJST1I6ICd8JyBpbiBzdGFydHVwIGZpbGUgaXMgbm90IGFsbG93ZWQuIElnbm9yaW5nIGxpbmUiKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNlbGYuY29tbWFuZFEucHV0KCBjbWRsaW5lLnN0cmlwKCkgKQorCisgICAgZGVmIG1haW4oIHNlbGYgKToKKyAgICAgICAgIiIiVGhlIG1haW4gY29tbWFuZCBsb29wIiIiCisgICAgICAgIHdoaWxlIG5vdCBsZWF2ZV9tYWlubG9vcDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbW1hbmRRLmVtcHR5KCk6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLm15b3V0LmRlbGVnYXRlCisgICAgICAgICAgICAgICAgICAgIGNtZGxpbmUgPSByYXdfaW5wdXQoICJCQj4+ICIgKQorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc2VsZi5teW91dAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNtZGxpbmUgPSBzZWxmLmNvbW1hbmRRLmdldCgpCisgICAgICAgICAgICAgICAgaWYgY21kbGluZToKKyAgICAgICAgICAgICAgICAgICAgYWxsQ29tbWFuZHMgPSBjbWRsaW5lLnNwbGl0KCAnOycgKQorICAgICAgICAgICAgICAgICAgICBmb3IgY29tbWFuZCBpbiBhbGxDb21tYW5kczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVjbWQgPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgICAgICAjIHNwZWNpYWwgY2FzZSBmb3IgZXhwZXJ0IG1vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQgPT0gJ3B5dGhvbic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYubXlvdXQuZGVsZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NDb21tYW5kKCBjb21tYW5kLCAiIiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYubXlvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5teW91dC5zdGFydENvbW1hbmQoIGNvbW1hbmQgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICd8JyBpbiBjb21tYW5kOiAjIGRpc2FibGUgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsIHBpcGVjbWQgPSBjb21tYW5kLnNwbGl0KCAnfCcgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxlZ2F0ZSA9IHNlbGYubXlvdXQuZGVsZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5teW91dC5kZWxlZ2F0ZSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMgPSBzaGxleC5zcGxpdCggY29tbWFuZCwgVHJ1ZSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzQ29tbWFuZCggdG9rZW5zWzBdLCB0b2tlbnNbMTpdIG9yICIiICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm15b3V0LmVuZENvbW1hbmQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBpcGVjbWQgaXMgbm90IE5vbmU6ICMgcmVzdG9yZSBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5teW91dC5kZWxlZ2F0ZSA9IGRlbGVnYXRlCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZSA9IHBvcGVuMi5Qb3BlbjQoIHBpcGVjbWQgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlLnRvY2hpbGQud3JpdGUoICJcbiIuam9pbiggc2VsZi5teW91dC5sYXN0QnVmZmVyKCkgKSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUudG9jaGlsZC5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIHBpcGUuZnJvbWNoaWxkLnJlYWQoKSApCisgICAgICAgICAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICBleGNlcHQgRU9GRXJyb3I6CisgICAgICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgICAgIHByaW50KCkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU3RhcnQgZnVuY3Rpb24gLSBjYWxsZWQgZnJvbSB0aGUgQml0QmFrZSBjb21tYW5kIGxpbmUgdXRpbGl0eQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmIHN0YXJ0KCBhQ29va2VyICk6CisgICAgZ2xvYmFsIGNvb2tlcgorICAgIGNvb2tlciA9IGFDb29rZXIKKyAgICBiYnNoZWxsID0gQml0QmFrZVNoZWxsKCkKKyAgICBiYnNoZWxsLnByb2Nlc3NTdGFydHVwRmlsZSgpCisgICAgYmJzaGVsbC5tYWluKCkKKyAgICBiYnNoZWxsLmNsZWFudXAoKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHByaW50KCJTSEVMTDogU29ycnksIHRoaXMgcHJvZ3JhbSBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgQml0QmFrZS4iKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zaWdnZW4ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3NpZ2dlbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTg1MjcyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zaWdnZW4ucHkKQEAgLTAsMCArMSw1MjYgQEAKK2ltcG9ydCBoYXNobGliCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IGJiLmRhdGEKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ0JpdEJha2UuU2lnR2VuJykKKwordHJ5OgorICAgIGltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGltcG9ydCBwaWNrbGUKKyAgICBsb2dnZXIuaW5mbygnSW1wb3J0aW5nIGNQaWNrbGUgZmFpbGVkLiAgRmFsbGluZyBiYWNrIHRvIGEgdmVyeSBzbG93IGltcGxlbWVudGF0aW9uLicpCisKK2RlZiBpbml0KGQpOgorICAgIHNpZ2dlbnMgPSBbb2JqIGZvciBvYmogaW4gZ2xvYmFscygpLml0ZXJ2YWx1ZXMoKQorICAgICAgICAgICAgICAgICAgICAgIGlmIHR5cGUob2JqKSBpcyB0eXBlIGFuZCBpc3N1YmNsYXNzKG9iaiwgU2lnbmF0dXJlR2VuZXJhdG9yKV0KKworICAgIGRlc2lyZWQgPSBkLmdldFZhcigiQkJfU0lHTkFUVVJFX0hBTkRMRVIiLCBUcnVlKSBvciAibm9vcCIKKyAgICBmb3Igc2cgaW4gc2lnZ2VuczoKKyAgICAgICAgaWYgZGVzaXJlZCA9PSBzZy5uYW1lOgorICAgICAgICAgICAgcmV0dXJuIHNnKGQpCisgICAgICAgICAgICBicmVhaworICAgIGVsc2U6CisgICAgICAgIGxvZ2dlci5lcnJvcigiSW52YWxpZCBzaWduYXR1cmUgZ2VuZXJhdG9yICclcycsIHVzaW5nIGRlZmF1bHQgJ25vb3AnXG4iCisgICAgICAgICAgICAgICAgICAgICAiQXZhaWxhYmxlIGdlbmVyYXRvcnM6ICVzIiwgZGVzaXJlZCwKKyAgICAgICAgICAgICAgICAgICAgICcsICcuam9pbihvYmoubmFtZSBmb3Igb2JqIGluIHNpZ2dlbnMpKQorICAgICAgICByZXR1cm4gU2lnbmF0dXJlR2VuZXJhdG9yKGQpCisKK2NsYXNzIFNpZ25hdHVyZUdlbmVyYXRvcihvYmplY3QpOgorICAgICIiIgorICAgICIiIgorICAgIG5hbWUgPSAibm9vcCIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi50YXNraGFzaCA9IHt9CisgICAgICAgIHNlbGYucnVudGFza2RlcHMgPSB7fQorICAgICAgICBzZWxmLmZpbGVfY2hlY2tzdW1fdmFsdWVzID0ge30KKworICAgIGRlZiBmaW5hbGlzZShzZWxmLCBmbiwgZCwgdmFyaWVudCk6CisgICAgICAgIHJldHVybgorCisgICAgZGVmIGdldF90YXNraGFzaChzZWxmLCBmbiwgdGFzaywgZGVwcywgZGF0YUNhY2hlKToKKyAgICAgICAgcmV0dXJuICIwIgorCisgICAgZGVmIHNldF90YXNrZGF0YShzZWxmLCBoYXNoZXMsIGRlcHMsIGNoZWNrc3VtKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgc3RhbXBmaWxlKHNlbGYsIHN0YW1wYmFzZSwgZmlsZV9uYW1lLCB0YXNrbmFtZSwgZXh0cmFpbmZvKToKKyAgICAgICAgcmV0dXJuICgiJXMuJXMuJXMiICUgKHN0YW1wYmFzZSwgdGFza25hbWUsIGV4dHJhaW5mbykpLnJzdHJpcCgnLicpCisKKyAgICBkZWYgc3RhbXBjbGVhbm1hc2soc2VsZiwgc3RhbXBiYXNlLCBmaWxlX25hbWUsIHRhc2tuYW1lLCBleHRyYWluZm8pOgorICAgICAgICByZXR1cm4gKCIlcy4lcy4lcyIgJSAoc3RhbXBiYXNlLCB0YXNrbmFtZSwgZXh0cmFpbmZvKSkucnN0cmlwKCcuJykKKworICAgIGRlZiBkdW1wX3NpZ3Rhc2soc2VsZiwgZm4sIHRhc2ssIHN0YW1wYmFzZSwgcnVudGltZSk6CisgICAgICAgIHJldHVybgorCisgICAgZGVmIGludmFsaWRhdGVfdGFzayhzZWxmLCB0YXNrLCBkLCBmbik6CisgICAgICAgIGJiLmJ1aWxkLmRlbF9zdGFtcCh0YXNrLCBkLCBmbikKKworICAgIGRlZiBkdW1wX3NpZ3Moc2VsZiwgZGF0YUNhY2hlLCBvcHRpb25zKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgZ2V0X3Rhc2tkYXRhKHNlbGYpOgorICAgICAgIHJldHVybiAoc2VsZi5ydW50YXNrZGVwcywgc2VsZi50YXNraGFzaCwgc2VsZi5maWxlX2NoZWNrc3VtX3ZhbHVlcykKKworICAgIGRlZiBzZXRfdGFza2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYucnVudGFza2RlcHMsIHNlbGYudGFza2hhc2gsIHNlbGYuZmlsZV9jaGVja3N1bV92YWx1ZXMgPSBkYXRhCisKKworY2xhc3MgU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWMoU2lnbmF0dXJlR2VuZXJhdG9yKToKKyAgICAiIiIKKyAgICAiIiIKKyAgICBuYW1lID0gImJhc2ljIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmJhc2VoYXNoID0ge30KKyAgICAgICAgc2VsZi50YXNraGFzaCA9IHt9CisgICAgICAgIHNlbGYudGFza2RlcHMgPSB7fQorICAgICAgICBzZWxmLnJ1bnRhc2tkZXBzID0ge30KKyAgICAgICAgc2VsZi5maWxlX2NoZWNrc3VtX3ZhbHVlcyA9IHt9CisgICAgICAgIHNlbGYuZ2VuZGVwcyA9IHt9CisgICAgICAgIHNlbGYubG9va3VwY2FjaGUgPSB7fQorICAgICAgICBzZWxmLnBrZ25hbWVleHRyYWN0ID0gcmUuY29tcGlsZSgiKD9QPGZuPi4qKVwuLioiKQorICAgICAgICBzZWxmLmJhc2V3aGl0ZWxpc3QgPSBzZXQoKGRhdGEuZ2V0VmFyKCJCQl9IQVNIQkFTRV9XSElURUxJU1QiLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKyAgICAgICAgc2VsZi50YXNrd2hpdGVsaXN0ID0gTm9uZQorICAgICAgICBzZWxmLmluaXRfcnVuZGVwY2hlY2soZGF0YSkKKworICAgIGRlZiBpbml0X3J1bmRlcGNoZWNrKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLnRhc2t3aGl0ZWxpc3QgPSBkYXRhLmdldFZhcigiQkJfSEFTSFRBU0tfV0hJVEVMSVNUIiwgVHJ1ZSkgb3IgTm9uZQorICAgICAgICBpZiBzZWxmLnRhc2t3aGl0ZWxpc3Q6CisgICAgICAgICAgICBzZWxmLnR3bCA9IHJlLmNvbXBpbGUoc2VsZi50YXNrd2hpdGVsaXN0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi50d2wgPSBOb25lCisKKyAgICBkZWYgX2J1aWxkX2RhdGEoc2VsZiwgZm4sIGQpOgorCisgICAgICAgIHRhc2tsaXN0LCBnZW5kZXBzLCBsb29rdXBjYWNoZSA9IGJiLmRhdGEuZ2VuZXJhdGVfZGVwZW5kZW5jaWVzKGQpCisKKyAgICAgICAgdGFza2RlcHMgPSB7fQorICAgICAgICBiYXNlaGFzaCA9IHt9CisKKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza2xpc3Q6CisgICAgICAgICAgICBkYXRhID0gbG9va3VwY2FjaGVbdGFza10KKworICAgICAgICAgICAgaWYgZGF0YSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGJiLmVycm9yKCJUYXNrICVzIGZyb20gJXMgc2VlbXMgdG8gYmUgZW1wdHk/ISIgJSAodGFzaywgZm4pKQorICAgICAgICAgICAgICAgIGRhdGEgPSAnJworCisgICAgICAgICAgICBnZW5kZXBzW3Rhc2tdIC09IHNlbGYuYmFzZXdoaXRlbGlzdAorICAgICAgICAgICAgbmV3ZGVwcyA9IGdlbmRlcHNbdGFza10KKyAgICAgICAgICAgIHNlZW4gPSBzZXQoKQorICAgICAgICAgICAgd2hpbGUgbmV3ZGVwczoKKyAgICAgICAgICAgICAgICBuZXh0ZGVwcyA9IG5ld2RlcHMKKyAgICAgICAgICAgICAgICBzZWVuIHw9IG5leHRkZXBzCisgICAgICAgICAgICAgICAgbmV3ZGVwcyA9IHNldCgpCisgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBuZXh0ZGVwczoKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwIGluIHNlbGYuYmFzZXdoaXRlbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGdlbmRlcHNbZGVwXSAtPSBzZWxmLmJhc2V3aGl0ZWxpc3QKKyAgICAgICAgICAgICAgICAgICAgbmV3ZGVwcyB8PSBnZW5kZXBzW2RlcF0KKyAgICAgICAgICAgICAgICBuZXdkZXBzIC09IHNlZW4KKworICAgICAgICAgICAgYWxsZGVwcyA9IHNvcnRlZChzZWVuKQorICAgICAgICAgICAgZm9yIGRlcCBpbiBhbGxkZXBzOgorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhICsgZGVwCisgICAgICAgICAgICAgICAgdmFyID0gbG9va3VwY2FjaGVbZGVwXQorICAgICAgICAgICAgICAgIGlmIHZhciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEgKyBzdHIodmFyKQorICAgICAgICAgICAgc2VsZi5iYXNlaGFzaFtmbiArICIuIiArIHRhc2tdID0gaGFzaGxpYi5tZDUoZGF0YSkuaGV4ZGlnZXN0KCkKKyAgICAgICAgICAgIHRhc2tkZXBzW3Rhc2tdID0gYWxsZGVwcworCisgICAgICAgIHNlbGYudGFza2RlcHNbZm5dID0gdGFza2RlcHMKKyAgICAgICAgc2VsZi5nZW5kZXBzW2ZuXSA9IGdlbmRlcHMKKyAgICAgICAgc2VsZi5sb29rdXBjYWNoZVtmbl0gPSBsb29rdXBjYWNoZQorCisgICAgICAgIHJldHVybiB0YXNrZGVwcworCisgICAgZGVmIGZpbmFsaXNlKHNlbGYsIGZuLCBkLCB2YXJpYW50KToKKworICAgICAgICBpZiB2YXJpYW50OgorICAgICAgICAgICAgZm4gPSAidmlydHVhbDoiICsgdmFyaWFudCArICI6IiArIGZuCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFza2RlcHMgPSBzZWxmLl9idWlsZF9kYXRhKGZuLCBkKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBiYi5ub3RlKCJFcnJvciBkdXJpbmcgZmluYWxpc2Ugb2YgJXMiICUgZm4pCisgICAgICAgICAgICByYWlzZQorCisgICAgICAgICNTbG93IGJ1dCBjYW4gYmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgbWlzbWF0Y2hlZCBiYXNlaGFzaGVzCisgICAgICAgICNmb3IgdGFzayBpbiBzZWxmLnRhc2tkZXBzW2ZuXToKKyAgICAgICAgIyAgICBzZWxmLmR1bXBfc2lndGFzayhmbiwgdGFzaywgZC5nZXRWYXIoIlNUQU1QIiwgVHJ1ZSksIEZhbHNlKQorCisgICAgICAgIGZvciB0YXNrIGluIHRhc2tkZXBzOgorICAgICAgICAgICAgZC5zZXRWYXIoIkJCX0JBU0VIQVNIX3Rhc2stJXMiICUgdGFzaywgc2VsZi5iYXNlaGFzaFtmbiArICIuIiArIHRhc2tdKQorCisgICAgZGVmIHJ1bmRlcF9jaGVjayhzZWxmLCBmbiwgcmVjaXBlbmFtZSwgdGFzaywgZGVwLCBkZXBuYW1lLCBkYXRhQ2FjaGUpOgorICAgICAgICAjIFJldHVybiBUcnVlIGlmIHdlIHNob3VsZCBrZWVwIHRoZSBkZXBlbmRlbmN5LCBGYWxzZSB0byBkcm9wIGl0CisgICAgICAgICMgV2Ugb25seSBtYW5pcHVsYXRlIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHBhY2thZ2VzIG5vdCBpbiB0aGUgd2hpdGVsaXN0CisgICAgICAgIGlmIHNlbGYudHdsIGFuZCBub3Qgc2VsZi50d2wuc2VhcmNoKHJlY2lwZW5hbWUpOgorICAgICAgICAgICAgIyB0aGVuIHByb2Nlc3MgdGhlIGFjdHVhbCBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgIGlmIHNlbGYudHdsLnNlYXJjaChkZXBuYW1lKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiByZWFkX3RhaW50KHNlbGYsIGZuLCB0YXNrLCBzdGFtcGJhc2UpOgorICAgICAgICB0YWludCA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcGVuKHN0YW1wYmFzZSArICcuJyArIHRhc2sgKyAnLnRhaW50JywgJ3InKSBhcyB0YWludGY6CisgICAgICAgICAgICAgICAgdGFpbnQgPSB0YWludGYucmVhZCgpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICByZXR1cm4gdGFpbnQKKworICAgIGRlZiBnZXRfdGFza2hhc2goc2VsZiwgZm4sIHRhc2ssIGRlcHMsIGRhdGFDYWNoZSk6CisgICAgICAgIGsgPSBmbiArICIuIiArIHRhc2sKKyAgICAgICAgZGF0YSA9IGRhdGFDYWNoZS5iYXNldGFza2hhc2hba10KKyAgICAgICAgc2VsZi5ydW50YXNrZGVwc1trXSA9IFtdCisgICAgICAgIHNlbGYuZmlsZV9jaGVja3N1bV92YWx1ZXNba10gPSB7fQorICAgICAgICByZWNpcGVuYW1lID0gZGF0YUNhY2hlLnBrZ19mbltmbl0KKyAgICAgICAgZm9yIGRlcCBpbiBzb3J0ZWQoZGVwcywga2V5PWNsZWFuX2Jhc2VwYXRoKToKKyAgICAgICAgICAgIGRlcG5hbWUgPSBkYXRhQ2FjaGUucGtnX2ZuW3NlbGYucGtnbmFtZWV4dHJhY3Quc2VhcmNoKGRlcCkuZ3JvdXAoJ2ZuJyldCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5ydW5kZXBfY2hlY2soZm4sIHJlY2lwZW5hbWUsIHRhc2ssIGRlcCwgZGVwbmFtZSwgZGF0YUNhY2hlKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZGVwIG5vdCBpbiBzZWxmLnRhc2toYXNoOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCIlcyBpcyBub3QgaW4gdGFza2hhc2gsIGNhbGxlciBpc24ndCBjYWxsaW5nIGluIGRlcGVuZGVuY3kgb3JkZXI/IiwgZGVwKQorICAgICAgICAgICAgZGF0YSA9IGRhdGEgKyBzZWxmLnRhc2toYXNoW2RlcF0KKyAgICAgICAgICAgIHNlbGYucnVudGFza2RlcHNba10uYXBwZW5kKGRlcCkKKworICAgICAgICBpZiB0YXNrIGluIGRhdGFDYWNoZS5maWxlX2NoZWNrc3Vtc1tmbl06CisgICAgICAgICAgICBjaGVja3N1bXMgPSBiYi5mZXRjaDIuZ2V0X2ZpbGVfY2hlY2tzdW1zKGRhdGFDYWNoZS5maWxlX2NoZWNrc3Vtc1tmbl1bdGFza10sIHJlY2lwZW5hbWUpCisgICAgICAgICAgICBmb3IgKGYsY3MpIGluIGNoZWNrc3VtczoKKyAgICAgICAgICAgICAgICBzZWxmLmZpbGVfY2hlY2tzdW1fdmFsdWVzW2tdW2ZdID0gY3MKKyAgICAgICAgICAgICAgICBpZiBjczoKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEgKyBjcworCisgICAgICAgIHRhc2tkZXAgPSBkYXRhQ2FjaGUudGFza19kZXBzW2ZuXQorICAgICAgICBpZiAnbm9zdGFtcCcgaW4gdGFza2RlcCBhbmQgdGFzayBpbiB0YXNrZGVwWydub3N0YW1wJ106CisgICAgICAgICAgICAjIE5vc3RhbXAgdGFza3MgbmVlZCBhbiBpbXBsaWNpdCB0YWludCBzbyB0aGF0IHRoZXkgZm9yY2UgYW55IGRlcGVuZGVudCB0YXNrcyB0byBydW4KKyAgICAgICAgICAgIGltcG9ydCB1dWlkCisgICAgICAgICAgICBkYXRhID0gZGF0YSArIHN0cih1dWlkLnV1aWQ0KCkpCisKKyAgICAgICAgdGFpbnQgPSBzZWxmLnJlYWRfdGFpbnQoZm4sIHRhc2ssIGRhdGFDYWNoZS5zdGFtcFtmbl0pCisgICAgICAgIGlmIHRhaW50OgorICAgICAgICAgICAgZGF0YSA9IGRhdGEgKyB0YWludAorICAgICAgICAgICAgbG9nZ2VyLndhcm4oIiVzIGlzIHRhaW50ZWQgZnJvbSBhIGZvcmNlZCBydW4iICUgaykKKworICAgICAgICBoID0gaGFzaGxpYi5tZDUoZGF0YSkuaGV4ZGlnZXN0KCkKKyAgICAgICAgc2VsZi50YXNraGFzaFtrXSA9IGgKKyAgICAgICAgI2Quc2V0VmFyKCJCQl9UQVNLSEFTSF90YXNrLSVzIiAlIHRhc2ssIHRhc2toYXNoW3Rhc2tdKQorICAgICAgICByZXR1cm4gaAorCisgICAgZGVmIGR1bXBfc2lndGFzayhzZWxmLCBmbiwgdGFzaywgc3RhbXBiYXNlLCBydW50aW1lKToKKyAgICAgICAgayA9IGZuICsgIi4iICsgdGFzaworICAgICAgICBpZiBydW50aW1lID09ICJjdXN0b21maWxlIjoKKyAgICAgICAgICAgIHNpZ2ZpbGUgPSBzdGFtcGJhc2UKKyAgICAgICAgZWxpZiBydW50aW1lIGFuZCBrIGluIHNlbGYudGFza2hhc2g6CisgICAgICAgICAgICBzaWdmaWxlID0gc3RhbXBiYXNlICsgIi4iICsgdGFzayArICIuc2lnZGF0YSIgKyAiLiIgKyBzZWxmLnRhc2toYXNoW2tdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzaWdmaWxlID0gc3RhbXBiYXNlICsgIi4iICsgdGFzayArICIuc2lnYmFzZWRhdGEiICsgIi4iICsgc2VsZi5iYXNlaGFzaFtrXQorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoc2lnZmlsZSkpCisKKyAgICAgICAgZGF0YSA9IHt9CisgICAgICAgIGRhdGFbJ2Jhc2V3aGl0ZWxpc3QnXSA9IHNlbGYuYmFzZXdoaXRlbGlzdAorICAgICAgICBkYXRhWyd0YXNrd2hpdGVsaXN0J10gPSBzZWxmLnRhc2t3aGl0ZWxpc3QKKyAgICAgICAgZGF0YVsndGFza2RlcHMnXSA9IHNlbGYudGFza2RlcHNbZm5dW3Rhc2tdCisgICAgICAgIGRhdGFbJ2Jhc2VoYXNoJ10gPSBzZWxmLmJhc2VoYXNoW2tdCisgICAgICAgIGRhdGFbJ2dlbmRlcHMnXSA9IHt9CisgICAgICAgIGRhdGFbJ3ZhcnZhbHMnXSA9IHt9CisgICAgICAgIGRhdGFbJ3ZhcnZhbHMnXVt0YXNrXSA9IHNlbGYubG9va3VwY2FjaGVbZm5dW3Rhc2tdCisgICAgICAgIGZvciBkZXAgaW4gc2VsZi50YXNrZGVwc1tmbl1bdGFza106CisgICAgICAgICAgICBpZiBkZXAgaW4gc2VsZi5iYXNld2hpdGVsaXN0OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBkYXRhWydnZW5kZXBzJ11bZGVwXSA9IHNlbGYuZ2VuZGVwc1tmbl1bZGVwXQorICAgICAgICAgICAgZGF0YVsndmFydmFscyddW2RlcF0gPSBzZWxmLmxvb2t1cGNhY2hlW2ZuXVtkZXBdCisKKyAgICAgICAgaWYgcnVudGltZSBhbmQgayBpbiBzZWxmLnRhc2toYXNoOgorICAgICAgICAgICAgZGF0YVsncnVudGFza2RlcHMnXSA9IHNlbGYucnVudGFza2RlcHNba10KKyAgICAgICAgICAgIGRhdGFbJ2ZpbGVfY2hlY2tzdW1fdmFsdWVzJ10gPSBbKG9zLnBhdGguYmFzZW5hbWUoZiksIGNzKSBmb3IgZixjcyBpbiBzZWxmLmZpbGVfY2hlY2tzdW1fdmFsdWVzW2tdLml0ZW1zKCldCisgICAgICAgICAgICBkYXRhWydydW50YXNraGFzaGVzJ10gPSB7fQorICAgICAgICAgICAgZm9yIGRlcCBpbiBkYXRhWydydW50YXNrZGVwcyddOgorICAgICAgICAgICAgICAgIGRhdGFbJ3J1bnRhc2toYXNoZXMnXVtkZXBdID0gc2VsZi50YXNraGFzaFtkZXBdCisKKyAgICAgICAgdGFpbnQgPSBzZWxmLnJlYWRfdGFpbnQoZm4sIHRhc2ssIHN0YW1wYmFzZSkKKyAgICAgICAgaWYgdGFpbnQ6CisgICAgICAgICAgICBkYXRhWyd0YWludCddID0gdGFpbnQKKworICAgICAgICBmZCwgdG1wZmlsZSA9IHRlbXBmaWxlLm1rc3RlbXAoZGlyPW9zLnBhdGguZGlybmFtZShzaWdmaWxlKSwgcHJlZml4PSJzaWd0YXNrLiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3MuZmRvcGVuKGZkLCAid2IiKSBhcyBzdHJlYW06CisgICAgICAgICAgICAgICAgcCA9IHBpY2tsZS5kdW1wKGRhdGEsIHN0cmVhbSwgLTEpCisgICAgICAgICAgICAgICAgc3RyZWFtLmZsdXNoKCkKKyAgICAgICAgICAgIG9zLmNobW9kKHRtcGZpbGUsIDA2NjQpCisgICAgICAgICAgICBvcy5yZW5hbWUodG1wZmlsZSwgc2lnZmlsZSkKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKSBhcyBlcnI6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKHRtcGZpbGUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICByYWlzZSBlcnIKKworICAgIGRlZiBkdW1wX3NpZ3Moc2VsZiwgZGF0YUNhY2hlLCBvcHRpb25zKToKKyAgICAgICAgZm9yIGZuIGluIHNlbGYudGFza2RlcHM6CisgICAgICAgICAgICBmb3IgdGFzayBpbiBzZWxmLnRhc2tkZXBzW2ZuXToKKyAgICAgICAgICAgICAgICBrID0gZm4gKyAiLiIgKyB0YXNrCisgICAgICAgICAgICAgICAgaWYgayBub3QgaW4gc2VsZi50YXNraGFzaDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBkYXRhQ2FjaGUuYmFzZXRhc2toYXNoW2tdICE9IHNlbGYuYmFzZWhhc2hba106CisgICAgICAgICAgICAgICAgICAgIGJiLmVycm9yKCJCaXRiYWtlJ3MgY2FjaGVkIGJhc2VoYXNoIGRvZXMgbm90IG1hdGNoIHRoZSBvbmUgd2UganVzdCBnZW5lcmF0ZWQgKCVzKSEiICUgaykKKyAgICAgICAgICAgICAgICAgICAgYmIuZXJyb3IoIlRoZSBtaXNtYXRjaGVkIGhhc2hlcyB3ZXJlICVzIGFuZCAlcyIgJSAoZGF0YUNhY2hlLmJhc2V0YXNraGFzaFtrXSwgc2VsZi5iYXNlaGFzaFtrXSkpCisgICAgICAgICAgICAgICAgc2VsZi5kdW1wX3NpZ3Rhc2soZm4sIHRhc2ssIGRhdGFDYWNoZS5zdGFtcFtmbl0sIFRydWUpCisKK2NsYXNzIFNpZ25hdHVyZUdlbmVyYXRvckJhc2ljSGFzaChTaWduYXR1cmVHZW5lcmF0b3JCYXNpYyk6CisgICAgbmFtZSA9ICJiYXNpY2hhc2giCisKKyAgICBkZWYgc3RhbXBmaWxlKHNlbGYsIHN0YW1wYmFzZSwgZm4sIHRhc2tuYW1lLCBleHRyYWluZm8sIGNsZWFuPUZhbHNlKToKKyAgICAgICAgaWYgdGFza25hbWUgIT0gImRvX3NldHNjZW5lIiBhbmQgdGFza25hbWUuZW5kc3dpdGgoIl9zZXRzY2VuZSIpOgorICAgICAgICAgICAgayA9IGZuICsgIi4iICsgdGFza25hbWVbOi05XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgayA9IGZuICsgIi4iICsgdGFza25hbWUKKyAgICAgICAgaWYgY2xlYW46CisgICAgICAgICAgICBoID0gIioiCisgICAgICAgIGVsaWYgayBpbiBzZWxmLnRhc2toYXNoOgorICAgICAgICAgICAgaCA9IHNlbGYudGFza2hhc2hba10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgSWYgayBpcyBub3QgaW4gYmFzZWhhc2gsIHRoZW4gZXJyb3IKKyAgICAgICAgICAgIGggPSBzZWxmLmJhc2VoYXNoW2tdCisgICAgICAgIHJldHVybiAoIiVzLiVzLiVzLiVzIiAlIChzdGFtcGJhc2UsIHRhc2tuYW1lLCBoLCBleHRyYWluZm8pKS5yc3RyaXAoJy4nKQorCisgICAgZGVmIHN0YW1wY2xlYW5tYXNrKHNlbGYsIHN0YW1wYmFzZSwgZm4sIHRhc2tuYW1lLCBleHRyYWluZm8pOgorICAgICAgICByZXR1cm4gc2VsZi5zdGFtcGZpbGUoc3RhbXBiYXNlLCBmbiwgdGFza25hbWUsIGV4dHJhaW5mbywgY2xlYW49VHJ1ZSkKKyAgICAgICAgCisgICAgZGVmIGludmFsaWRhdGVfdGFzayhzZWxmLCB0YXNrLCBkLCBmbik6CisgICAgICAgIGJiLm5vdGUoIlRhaW50aW5nIGhhc2ggdG8gZm9yY2UgcmVidWlsZCBvZiB0YXNrICVzLCAlcyIgJSAoZm4sIHRhc2spKQorICAgICAgICBiYi5idWlsZC53cml0ZV90YWludCh0YXNrLCBkLCBmbikKKworZGVmIGR1bXBfdGhpc190YXNrKG91dGZpbGUsIGQpOgorICAgIGltcG9ydCBiYi5wYXJzZQorICAgIGZuID0gZC5nZXRWYXIoIkJCX0ZJTEVOQU1FIiwgVHJ1ZSkKKyAgICB0YXNrID0gImRvXyIgKyBkLmdldFZhcigiQkJfQ1VSUkVOVFRBU0siLCBUcnVlKQorICAgIGJiLnBhcnNlLnNpZ2dlbi5kdW1wX3NpZ3Rhc2soZm4sIHRhc2ssIG91dGZpbGUsICJjdXN0b21maWxlIikKKworZGVmIGNsZWFuX2Jhc2VwYXRoKGEpOgorICAgIGIgPSBhLnJzcGxpdCgiLyIsIDIpWzFdICsgYS5yc3BsaXQoIi8iLCAyKVsyXQorICAgIGlmIGEuc3RhcnRzd2l0aCgidmlydHVhbDoiKToKKyAgICAgICAgYiA9IGIgKyAiOiIgKyBhLnJzcGxpdCgiOiIsIDEpWzBdCisgICAgcmV0dXJuIGIKKworZGVmIGNsZWFuX2Jhc2VwYXRocyhhKToKKyAgICBiID0ge30KKyAgICBmb3IgeCBpbiBhOgorICAgICAgICBiW2NsZWFuX2Jhc2VwYXRoKHgpXSA9IGFbeF0KKyAgICByZXR1cm4gYgorCitkZWYgY2xlYW5fYmFzZXBhdGhzX2xpc3QoYSk6CisgICAgYiA9IFtdCisgICAgZm9yIHggaW4gYToKKyAgICAgICAgYi5hcHBlbmQoY2xlYW5fYmFzZXBhdGgoeCkpCisgICAgcmV0dXJuIGIKKworZGVmIGNvbXBhcmVfc2lnZmlsZXMoYSwgYiwgcmVjdXJzZWNiID0gTm9uZSk6CisgICAgb3V0cHV0ID0gW10KKworICAgIHAxID0gcGlja2xlLlVucGlja2xlcihvcGVuKGEsICJyYiIpKQorICAgIGFfZGF0YSA9IHAxLmxvYWQoKQorICAgIHAyID0gcGlja2xlLlVucGlja2xlcihvcGVuKGIsICJyYiIpKQorICAgIGJfZGF0YSA9IHAyLmxvYWQoKQorCisgICAgZGVmIGRpY3RfZGlmZihhLCBiLCB3aGl0ZWxpc3Q9c2V0KCkpOgorICAgICAgICBzYSA9IHNldChhLmtleXMoKSkKKyAgICAgICAgc2IgPSBzZXQoYi5rZXlzKCkpCisgICAgICAgIGNvbW1vbiA9IHNhICYgc2IKKyAgICAgICAgY2hhbmdlZCA9IHNldCgpCisgICAgICAgIGZvciBpIGluIGNvbW1vbjoKKyAgICAgICAgICAgIGlmIGFbaV0gIT0gYltpXSBhbmQgaSBub3QgaW4gd2hpdGVsaXN0OgorICAgICAgICAgICAgICAgIGNoYW5nZWQuYWRkKGkpCisgICAgICAgIGFkZGVkID0gc2IgLSBzYQorICAgICAgICByZW1vdmVkID0gc2EgLSBzYgorICAgICAgICByZXR1cm4gY2hhbmdlZCwgYWRkZWQsIHJlbW92ZWQKKworICAgIGRlZiBmaWxlX2NoZWNrc3Vtc19kaWZmKGEsIGIpOgorICAgICAgICBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyCisgICAgICAgICMgSGFuZGxlIG9sZCBzaWdpbmZvIGZvcm1hdAorICAgICAgICBpZiBpc2luc3RhbmNlKGEsIGRpY3QpOgorICAgICAgICAgICAgYSA9IFsob3MucGF0aC5iYXNlbmFtZShmKSwgY3MpIGZvciBmLCBjcyBpbiBhLml0ZW1zKCldCisgICAgICAgIGlmIGlzaW5zdGFuY2UoYiwgZGljdCk6CisgICAgICAgICAgICBiID0gWyhvcy5wYXRoLmJhc2VuYW1lKGYpLCBjcykgZm9yIGYsIGNzIGluIGIuaXRlbXMoKV0KKyAgICAgICAgIyBDb21wYXJlIGxpc3RzLCBlbnN1cmluZyB3ZSBjYW4gaGFuZGxlIGR1cGxpY2F0ZSBmaWxlbmFtZXMgaWYgdGhleSBleGlzdAorICAgICAgICByZW1vdmVkY291bnQgPSBDb3VudGVyKGEpCisgICAgICAgIHJlbW92ZWRjb3VudC5zdWJ0cmFjdChiKQorICAgICAgICBhZGRlZGNvdW50ID0gQ291bnRlcihiKQorICAgICAgICBhZGRlZGNvdW50LnN1YnRyYWN0KGEpCisgICAgICAgIGFkZGVkID0gW10KKyAgICAgICAgZm9yIHggaW4gYjoKKyAgICAgICAgICAgIGlmIGFkZGVkY291bnRbeF0gPiAwOgorICAgICAgICAgICAgICAgIGFkZGVkY291bnRbeF0gLT0gMQorICAgICAgICAgICAgICAgIGFkZGVkLmFwcGVuZCh4KQorICAgICAgICByZW1vdmVkID0gW10KKyAgICAgICAgY2hhbmdlZCA9IFtdCisgICAgICAgIGZvciB4IGluIGE6CisgICAgICAgICAgICBpZiByZW1vdmVkY291bnRbeF0gPiAwOgorICAgICAgICAgICAgICAgIHJlbW92ZWRjb3VudFt4XSAtPSAxCisgICAgICAgICAgICAgICAgZm9yIHkgaW4gYWRkZWQ6CisgICAgICAgICAgICAgICAgICAgIGlmIHlbMF0gPT0geFswXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQuYXBwZW5kKCh4WzBdLCB4WzFdLCB5WzFdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkLnJlbW92ZSh5KQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZW1vdmVkLmFwcGVuZCh4KQorICAgICAgICBhZGRlZCA9IFt4WzBdIGZvciB4IGluIGFkZGVkXQorICAgICAgICByZW1vdmVkID0gW3hbMF0gZm9yIHggaW4gcmVtb3ZlZF0KKyAgICAgICAgcmV0dXJuIGNoYW5nZWQsIGFkZGVkLCByZW1vdmVkCisKKyAgICBpZiAnYmFzZXdoaXRlbGlzdCcgaW4gYV9kYXRhIGFuZCBhX2RhdGFbJ2Jhc2V3aGl0ZWxpc3QnXSAhPSBiX2RhdGFbJ2Jhc2V3aGl0ZWxpc3QnXToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgiYmFzZXdoaXRlbGlzdCBjaGFuZ2VkIGZyb20gJyVzJyB0byAnJXMnIiAlIChhX2RhdGFbJ2Jhc2V3aGl0ZWxpc3QnXSwgYl9kYXRhWydiYXNld2hpdGVsaXN0J10pKQorICAgICAgICBpZiBhX2RhdGFbJ2Jhc2V3aGl0ZWxpc3QnXSBhbmQgYl9kYXRhWydiYXNld2hpdGVsaXN0J106CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJjaGFuZ2VkIGl0ZW1zOiAlcyIgJSBhX2RhdGFbJ2Jhc2V3aGl0ZWxpc3QnXS5zeW1tZXRyaWNfZGlmZmVyZW5jZShiX2RhdGFbJ2Jhc2V3aGl0ZWxpc3QnXSkpCisKKyAgICBpZiAndGFza3doaXRlbGlzdCcgaW4gYV9kYXRhIGFuZCBhX2RhdGFbJ3Rhc2t3aGl0ZWxpc3QnXSAhPSBiX2RhdGFbJ3Rhc2t3aGl0ZWxpc3QnXToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgidGFza3doaXRlbGlzdCBjaGFuZ2VkIGZyb20gJyVzJyB0byAnJXMnIiAlIChhX2RhdGFbJ3Rhc2t3aGl0ZWxpc3QnXSwgYl9kYXRhWyd0YXNrd2hpdGVsaXN0J10pKQorICAgICAgICBpZiBhX2RhdGFbJ3Rhc2t3aGl0ZWxpc3QnXSBhbmQgYl9kYXRhWyd0YXNrd2hpdGVsaXN0J106CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJjaGFuZ2VkIGl0ZW1zOiAlcyIgJSBhX2RhdGFbJ3Rhc2t3aGl0ZWxpc3QnXS5zeW1tZXRyaWNfZGlmZmVyZW5jZShiX2RhdGFbJ3Rhc2t3aGl0ZWxpc3QnXSkpCisKKyAgICBpZiBhX2RhdGFbJ3Rhc2tkZXBzJ10gIT0gYl9kYXRhWyd0YXNrZGVwcyddOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCJUYXNrIGRlcGVuZGVuY2llcyBjaGFuZ2VkIGZyb206XG4lc1xudG86XG4lcyIgJSAoc29ydGVkKGFfZGF0YVsndGFza2RlcHMnXSksIHNvcnRlZChiX2RhdGFbJ3Rhc2tkZXBzJ10pKSkKKworICAgIGlmIGFfZGF0YVsnYmFzZWhhc2gnXSAhPSBiX2RhdGFbJ2Jhc2VoYXNoJ106CisgICAgICAgIG91dHB1dC5hcHBlbmQoImJhc2VoYXNoIGNoYW5nZWQgZnJvbSAlcyB0byAlcyIgJSAoYV9kYXRhWydiYXNlaGFzaCddLCBiX2RhdGFbJ2Jhc2VoYXNoJ10pKQorCisgICAgY2hhbmdlZCwgYWRkZWQsIHJlbW92ZWQgPSBkaWN0X2RpZmYoYV9kYXRhWydnZW5kZXBzJ10sIGJfZGF0YVsnZ2VuZGVwcyddLCBhX2RhdGFbJ2Jhc2V3aGl0ZWxpc3QnXSAmIGJfZGF0YVsnYmFzZXdoaXRlbGlzdCddKQorICAgIGlmIGNoYW5nZWQ6CisgICAgICAgIGZvciBkZXAgaW4gY2hhbmdlZDoKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIkxpc3Qgb2YgZGVwZW5kZW5jaWVzIGZvciB2YXJpYWJsZSAlcyBjaGFuZ2VkIGZyb20gJyVzJyB0byAnJXMnIiAlIChkZXAsIGFfZGF0YVsnZ2VuZGVwcyddW2RlcF0sIGJfZGF0YVsnZ2VuZGVwcyddW2RlcF0pKQorICAgICAgICAgICAgaWYgYV9kYXRhWydnZW5kZXBzJ11bZGVwXSBhbmQgYl9kYXRhWydnZW5kZXBzJ11bZGVwXToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJjaGFuZ2VkIGl0ZW1zOiAlcyIgJSBhX2RhdGFbJ2dlbmRlcHMnXVtkZXBdLnN5bW1ldHJpY19kaWZmZXJlbmNlKGJfZGF0YVsnZ2VuZGVwcyddW2RlcF0pKQorICAgIGlmIGFkZGVkOgorICAgICAgICBmb3IgZGVwIGluIGFkZGVkOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiRGVwZW5kZW5jeSBvbiB2YXJpYWJsZSAlcyB3YXMgYWRkZWQiICUgKGRlcCkpCisgICAgaWYgcmVtb3ZlZDoKKyAgICAgICAgZm9yIGRlcCBpbiByZW1vdmVkOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiRGVwZW5kZW5jeSBvbiBWYXJpYWJsZSAlcyB3YXMgcmVtb3ZlZCIgJSAoZGVwKSkKKworCisgICAgY2hhbmdlZCwgYWRkZWQsIHJlbW92ZWQgPSBkaWN0X2RpZmYoYV9kYXRhWyd2YXJ2YWxzJ10sIGJfZGF0YVsndmFydmFscyddKQorICAgIGlmIGNoYW5nZWQ6CisgICAgICAgIGZvciBkZXAgaW4gY2hhbmdlZDoKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIlZhcmlhYmxlICVzIHZhbHVlIGNoYW5nZWQgZnJvbSAnJXMnIHRvICclcyciICUgKGRlcCwgYV9kYXRhWyd2YXJ2YWxzJ11bZGVwXSwgYl9kYXRhWyd2YXJ2YWxzJ11bZGVwXSkpCisKKyAgICBjaGFuZ2VkLCBhZGRlZCwgcmVtb3ZlZCA9IGZpbGVfY2hlY2tzdW1zX2RpZmYoYV9kYXRhWydmaWxlX2NoZWNrc3VtX3ZhbHVlcyddLCBiX2RhdGFbJ2ZpbGVfY2hlY2tzdW1fdmFsdWVzJ10pCisgICAgaWYgY2hhbmdlZDoKKyAgICAgICAgZm9yIGYsIG9sZCwgbmV3IGluIGNoYW5nZWQ6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJDaGVja3N1bSBmb3IgZmlsZSAlcyBjaGFuZ2VkIGZyb20gJXMgdG8gJXMiICUgKGYsIG9sZCwgbmV3KSkKKyAgICBpZiBhZGRlZDoKKyAgICAgICAgZm9yIGYgaW4gYWRkZWQ6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJEZXBlbmRlbmN5IG9uIGNoZWNrc3VtIG9mIGZpbGUgJXMgd2FzIGFkZGVkIiAlIChmKSkKKyAgICBpZiByZW1vdmVkOgorICAgICAgICBmb3IgZiBpbiByZW1vdmVkOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiRGVwZW5kZW5jeSBvbiBjaGVja3N1bSBvZiBmaWxlICVzIHdhcyByZW1vdmVkIiAlIChmKSkKKworCisgICAgaWYgbGVuKGFfZGF0YVsncnVudGFza2RlcHMnXSkgIT0gbGVuKGJfZGF0YVsncnVudGFza2RlcHMnXSk6CisgICAgICAgIGNoYW5nZWQgPSBbIk51bWJlciBvZiB0YXNrIGRlcGVuZGVuY2llcyBjaGFuZ2VkIl0KKyAgICBlbHNlOgorICAgICAgICBjaGFuZ2VkID0gW10KKyAgICAgICAgZm9yIGlkeCwgdGFzayBpbiBlbnVtZXJhdGUoYV9kYXRhWydydW50YXNrZGVwcyddKToKKyAgICAgICAgICAgIGEgPSBhX2RhdGFbJ3J1bnRhc2tkZXBzJ11baWR4XQorICAgICAgICAgICAgYiA9IGJfZGF0YVsncnVudGFza2RlcHMnXVtpZHhdCisgICAgICAgICAgICBpZiBhX2RhdGFbJ3J1bnRhc2toYXNoZXMnXVthXSAhPSBiX2RhdGFbJ3J1bnRhc2toYXNoZXMnXVtiXToKKyAgICAgICAgICAgICAgICBjaGFuZ2VkLmFwcGVuZCgiJXMgd2l0aCBoYXNoICVzXG4gY2hhbmdlZCB0b1xuJXMgd2l0aCBoYXNoICVzIiAlIChhLCBhX2RhdGFbJ3J1bnRhc2toYXNoZXMnXVthXSwgYiwgYl9kYXRhWydydW50YXNraGFzaGVzJ11bYl0pKQorCisgICAgaWYgY2hhbmdlZDoKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgicnVudGFza2RlcHMgY2hhbmdlZCBmcm9tICVzIHRvICVzIiAlIChjbGVhbl9iYXNlcGF0aHNfbGlzdChhX2RhdGFbJ3J1bnRhc2tkZXBzJ10pLCBjbGVhbl9iYXNlcGF0aHNfbGlzdChiX2RhdGFbJ3J1bnRhc2tkZXBzJ10pKSkKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgiXG4iLmpvaW4oY2hhbmdlZCkpCisKKworICAgIGlmICdydW50YXNraGFzaGVzJyBpbiBhX2RhdGEgYW5kICdydW50YXNraGFzaGVzJyBpbiBiX2RhdGE6CisgICAgICAgIGEgPSBhX2RhdGFbJ3J1bnRhc2toYXNoZXMnXQorICAgICAgICBiID0gYl9kYXRhWydydW50YXNraGFzaGVzJ10KKyAgICAgICAgY2hhbmdlZCwgYWRkZWQsIHJlbW92ZWQgPSBkaWN0X2RpZmYoYSwgYikKKyAgICAgICAgaWYgYWRkZWQ6CisgICAgICAgICAgICBmb3IgZGVwIGluIGFkZGVkOgorICAgICAgICAgICAgICAgIGJkZXBfZm91bmQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGlmIHJlbW92ZWQ6CisgICAgICAgICAgICAgICAgICAgIGZvciBiZGVwIGluIHJlbW92ZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBiW2RlcF0gPT0gYVtiZGVwXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjb3V0cHV0LmFwcGVuZCgiRGVwZW5kZW5jeSBvbiB0YXNrICVzIHdhcyByZXBsYWNlZCBieSAlcyB3aXRoIHNhbWUgaGFzaCIgJSAoZGVwLCBiZGVwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZGVwX2ZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgIGlmIG5vdCBiZGVwX2ZvdW5kOgorICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJEZXBlbmRlbmN5IG9uIHRhc2sgJXMgd2FzIGFkZGVkIHdpdGggaGFzaCAlcyIgJSAoY2xlYW5fYmFzZXBhdGgoZGVwKSwgYltkZXBdKSkKKyAgICAgICAgaWYgcmVtb3ZlZDoKKyAgICAgICAgICAgIGZvciBkZXAgaW4gcmVtb3ZlZDoKKyAgICAgICAgICAgICAgICBhZGVwX2ZvdW5kID0gRmFsc2UKKyAgICAgICAgICAgICAgICBpZiBhZGRlZDoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGFkZXAgaW4gYWRkZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBiW2FkZXBdID09IGFbZGVwXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjb3V0cHV0LmFwcGVuZCgiRGVwZW5kZW5jeSBvbiB0YXNrICVzIHdhcyByZXBsYWNlZCBieSAlcyB3aXRoIHNhbWUgaGFzaCIgJSAoYWRlcCwgZGVwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGVwX2ZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgIGlmIG5vdCBhZGVwX2ZvdW5kOgorICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJEZXBlbmRlbmN5IG9uIHRhc2sgJXMgd2FzIHJlbW92ZWQgd2l0aCBoYXNoICVzIiAlIChjbGVhbl9iYXNlcGF0aChkZXApLCBhW2RlcF0pKQorICAgICAgICBpZiBjaGFuZ2VkOgorICAgICAgICAgICAgZm9yIGRlcCBpbiBjaGFuZ2VkOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIkhhc2ggZm9yIGRlcGVuZGVudCB0YXNrICVzIGNoYW5nZWQgZnJvbSAlcyB0byAlcyIgJSAoY2xlYW5fYmFzZXBhdGgoZGVwKSwgYVtkZXBdLCBiW2RlcF0pKQorICAgICAgICAgICAgICAgIGlmIGNhbGxhYmxlKHJlY3Vyc2VjYik6CisgICAgICAgICAgICAgICAgICAgICMgSWYgYSBkZXBlbmRlbnQgaGFzaCBjaGFuZ2VkLCBtaWdodCBhcyB3ZWxsIHByaW50IHRoZSBsaW5lIGFib3ZlIGFuZCB0aGVuIGRlZmVyIHRvIHRoZSBjaGFuZ2VzIGluIAorICAgICAgICAgICAgICAgICAgICAjIHRoYXQgaGFzaCBzaW5jZSBpbiBhbGwgbGlrZWx5aG9vZCwgdGhleSdyZSB0aGUgc2FtZSBjaGFuZ2VzIHRoaXMgdGFzayBhbHNvIHNhdy4KKyAgICAgICAgICAgICAgICAgICAgcmVjb3V0ID0gcmVjdXJzZWNiKGRlcCwgYVtkZXBdLCBiW2RlcF0pCisgICAgICAgICAgICAgICAgICAgIGlmIHJlY291dDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IFtvdXRwdXRbLTFdXSArIHJlY291dAorCisgICAgYV90YWludCA9IGFfZGF0YS5nZXQoJ3RhaW50JywgTm9uZSkKKyAgICBiX3RhaW50ID0gYl9kYXRhLmdldCgndGFpbnQnLCBOb25lKQorICAgIGlmIGFfdGFpbnQgIT0gYl90YWludDoKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgiVGFpbnQgKGJ5IGZvcmNlZC9pbnZhbGlkYXRlZCB0YXNrKSBjaGFuZ2VkIGZyb20gJXMgdG8gJXMiICUgKGFfdGFpbnQsIGJfdGFpbnQpKQorCisgICAgcmV0dXJuIG91dHB1dAorCisKK2RlZiBkdW1wX3NpZ2ZpbGUoYSk6CisgICAgb3V0cHV0ID0gW10KKworICAgIHAxID0gcGlja2xlLlVucGlja2xlcihvcGVuKGEsICJyYiIpKQorICAgIGFfZGF0YSA9IHAxLmxvYWQoKQorCisgICAgb3V0cHV0LmFwcGVuZCgiYmFzZXdoaXRlbGlzdDogJXMiICUgKGFfZGF0YVsnYmFzZXdoaXRlbGlzdCddKSkKKworICAgIG91dHB1dC5hcHBlbmQoInRhc2t3aGl0ZWxpc3Q6ICVzIiAlIChhX2RhdGFbJ3Rhc2t3aGl0ZWxpc3QnXSkpCisKKyAgICBvdXRwdXQuYXBwZW5kKCJUYXNrIGRlcGVuZGVuY2llczogJXMiICUgKHNvcnRlZChhX2RhdGFbJ3Rhc2tkZXBzJ10pKSkKKworICAgIG91dHB1dC5hcHBlbmQoImJhc2VoYXNoOiAlcyIgJSAoYV9kYXRhWydiYXNlaGFzaCddKSkKKworICAgIGZvciBkZXAgaW4gYV9kYXRhWydnZW5kZXBzJ106CisgICAgICAgIG91dHB1dC5hcHBlbmQoIkxpc3Qgb2YgZGVwZW5kZW5jaWVzIGZvciB2YXJpYWJsZSAlcyBpcyAlcyIgJSAoZGVwLCBhX2RhdGFbJ2dlbmRlcHMnXVtkZXBdKSkKKworICAgIGZvciBkZXAgaW4gYV9kYXRhWyd2YXJ2YWxzJ106CisgICAgICAgIG91dHB1dC5hcHBlbmQoIlZhcmlhYmxlICVzIHZhbHVlIGlzICVzIiAlIChkZXAsIGFfZGF0YVsndmFydmFscyddW2RlcF0pKQorCisgICAgaWYgJ3J1bnRhc2tkZXBzJyBpbiBhX2RhdGE6CisgICAgICAgIG91dHB1dC5hcHBlbmQoIlRhc2tzIHRoaXMgdGFzayBkZXBlbmRzIG9uOiAlcyIgJSAoYV9kYXRhWydydW50YXNrZGVwcyddKSkKKworICAgIGlmICdmaWxlX2NoZWNrc3VtX3ZhbHVlcycgaW4gYV9kYXRhOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCJUaGlzIHRhc2sgZGVwZW5kcyBvbiB0aGUgY2hlY2tzdW1zIG9mIGZpbGVzOiAlcyIgJSAoYV9kYXRhWydmaWxlX2NoZWNrc3VtX3ZhbHVlcyddKSkKKworICAgIGlmICdydW50YXNraGFzaGVzJyBpbiBhX2RhdGE6CisgICAgICAgIGZvciBkZXAgaW4gYV9kYXRhWydydW50YXNraGFzaGVzJ106CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJIYXNoIGZvciBkZXBlbmRlbnQgdGFzayAlcyBpcyAlcyIgJSAoZGVwLCBhX2RhdGFbJ3J1bnRhc2toYXNoZXMnXVtkZXBdKSkKKworICAgIGlmICd0YWludCcgaW4gYV9kYXRhOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCJUYWludGVkIChieSBmb3JjZWQvaW52YWxpZGF0ZWQgdGFzayk6ICVzIiAlIGFfZGF0YVsndGFpbnQnXSkKKworICAgIGRhdGEgPSBhX2RhdGFbJ2Jhc2VoYXNoJ10KKyAgICBmb3IgZGVwIGluIGFfZGF0YVsncnVudGFza2RlcHMnXToKKyAgICAgICAgZGF0YSA9IGRhdGEgKyBhX2RhdGFbJ3J1bnRhc2toYXNoZXMnXVtkZXBdCisKKyAgICBmb3IgYyBpbiBhX2RhdGFbJ2ZpbGVfY2hlY2tzdW1fdmFsdWVzJ106CisgICAgICAgIGRhdGEgPSBkYXRhICsgY1sxXQorCisgICAgaWYgJ3RhaW50JyBpbiBhX2RhdGE6CisgICAgICAgIGRhdGEgPSBkYXRhICsgYV9kYXRhWyd0YWludCddCisKKyAgICBoID0gaGFzaGxpYi5tZDUoZGF0YSkuaGV4ZGlnZXN0KCkKKyAgICBvdXRwdXQuYXBwZW5kKCJDb21wdXRlZCBIYXNoIGlzICVzIiAlIGgpCisKKyAgICByZXR1cm4gb3V0cHV0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rhc2tkYXRhLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90YXNrZGF0YS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmFiNzA0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90YXNrZGF0YS5weQpAQCAtMCwwICsxLDY1NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdUYXNrRGF0YScgaW1wbGVtZW50YXRpb24KKworVGFzayBkYXRhIGNvbGxlY3Rpb24gYW5kIGhhbmRsaW5nCisKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwNiAgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBiYgorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5UYXNrRGF0YSIpCisKK2RlZiByZV9tYXRjaF9zdHJpbmdzKHRhcmdldCwgc3RyaW5ncyk6CisgICAgIiIiCisgICAgV2hldGhlciBvciBub3QgdGhlIHN0cmluZyAndGFyZ2V0JyBtYXRjaGVzCisgICAgYW55IG9uZSBzdHJpbmcgb2YgdGhlIHN0cmluZ3Mgd2hpY2ggY2FuIGJlIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdHJpbmcKKyAgICAiIiIKKyAgICByZXR1cm4gYW55KG5hbWUgPT0gdGFyZ2V0IG9yIHJlLm1hdGNoKG5hbWUsIHRhcmdldCkKKyAgICAgICAgICAgICAgIGZvciBuYW1lIGluIHN0cmluZ3MpCisKK2NsYXNzIFRhc2tEYXRhOgorICAgICIiIgorICAgIEJpdEJha2UgVGFzayBEYXRhIGltcGxlbWVudGF0aW9uCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFib3J0ID0gVHJ1ZSwgdHJ5YWx0Y29uZmlncyA9IEZhbHNlLCBza2lwbGlzdCA9IE5vbmUsIGFsbG93aW5jb21wbGV0ZSA9IEZhbHNlKToKKyAgICAgICAgc2VsZi5idWlsZF9uYW1lc19pbmRleCA9IFtdCisgICAgICAgIHNlbGYucnVuX25hbWVzX2luZGV4ID0gW10KKyAgICAgICAgc2VsZi5mbl9pbmRleCA9IFtdCisKKyAgICAgICAgc2VsZi5idWlsZF90YXJnZXRzID0ge30KKyAgICAgICAgc2VsZi5ydW5fdGFyZ2V0cyA9IHt9CisKKyAgICAgICAgc2VsZi5leHRlcm5hbF90YXJnZXRzID0gW10KKworICAgICAgICBzZWxmLnRhc2tzX2ZuaWQgPSBbXQorICAgICAgICBzZWxmLnRhc2tzX25hbWUgPSBbXQorICAgICAgICBzZWxmLnRhc2tzX3RkZXBlbmRzID0gW10KKyAgICAgICAgc2VsZi50YXNrc19pZGVwZW5kcyA9IFtdCisgICAgICAgIHNlbGYudGFza3NfaXJkZXBlbmRzID0gW10KKyAgICAgICAgIyBDYWNoZSB0byBzcGVlZCB1cCB0YXNrIElEIGxvb2t1cHMKKyAgICAgICAgc2VsZi50YXNrc19sb29rdXAgPSB7fQorCisgICAgICAgIHNlbGYuZGVwaWRzID0ge30KKyAgICAgICAgc2VsZi5yZGVwaWRzID0ge30KKworICAgICAgICBzZWxmLmNvbnNpZGVyX21zZ3NfY2FjaGUgPSBbXQorCisgICAgICAgIHNlbGYuZmFpbGVkX2RlcHMgPSBbXQorICAgICAgICBzZWxmLmZhaWxlZF9yZGVwcyA9IFtdCisgICAgICAgIHNlbGYuZmFpbGVkX2ZuaWRzID0gW10KKworICAgICAgICBzZWxmLmFib3J0ID0gYWJvcnQKKyAgICAgICAgc2VsZi50cnlhbHRjb25maWdzID0gdHJ5YWx0Y29uZmlncworICAgICAgICBzZWxmLmFsbG93aW5jb21wbGV0ZSA9IGFsbG93aW5jb21wbGV0ZQorCisgICAgICAgIHNlbGYuc2tpcGxpc3QgPSBza2lwbGlzdAorCisgICAgZGVmIGdldGJ1aWxkX2lkKHNlbGYsIG5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGFuIElEIG51bWJlciBmb3IgdGhlIGJ1aWxkIHRhcmdldCBuYW1lLgorICAgICAgICBJZiBpdCBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgb25lLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IG5hbWUgaW4gc2VsZi5idWlsZF9uYW1lc19pbmRleDoKKyAgICAgICAgICAgIHNlbGYuYnVpbGRfbmFtZXNfaW5kZXguYXBwZW5kKG5hbWUpCisgICAgICAgICAgICByZXR1cm4gbGVuKHNlbGYuYnVpbGRfbmFtZXNfaW5kZXgpIC0gMQorCisgICAgICAgIHJldHVybiBzZWxmLmJ1aWxkX25hbWVzX2luZGV4LmluZGV4KG5hbWUpCisKKyAgICBkZWYgZ2V0cnVuX2lkKHNlbGYsIG5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGFuIElEIG51bWJlciBmb3IgdGhlIHJ1biB0YXJnZXQgbmFtZS4KKyAgICAgICAgSWYgaXQgZG9lc24ndCBleGlzdCwgY3JlYXRlIG9uZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBuYW1lIGluIHNlbGYucnVuX25hbWVzX2luZGV4OgorICAgICAgICAgICAgc2VsZi5ydW5fbmFtZXNfaW5kZXguYXBwZW5kKG5hbWUpCisgICAgICAgICAgICByZXR1cm4gbGVuKHNlbGYucnVuX25hbWVzX2luZGV4KSAtIDEKKworICAgICAgICByZXR1cm4gc2VsZi5ydW5fbmFtZXNfaW5kZXguaW5kZXgobmFtZSkKKworICAgIGRlZiBnZXRmbl9pZChzZWxmLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhbiBJRCBudW1iZXIgZm9yIHRoZSBmaWxlbmFtZS4KKyAgICAgICAgSWYgaXQgZG9lc24ndCBleGlzdCwgY3JlYXRlIG9uZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBuYW1lIGluIHNlbGYuZm5faW5kZXg6CisgICAgICAgICAgICBzZWxmLmZuX2luZGV4LmFwcGVuZChuYW1lKQorICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLmZuX2luZGV4KSAtIDEKKworICAgICAgICByZXR1cm4gc2VsZi5mbl9pbmRleC5pbmRleChuYW1lKQorCisgICAgZGVmIGdldHRhc2tfaWRzKHNlbGYsIGZuaWQpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGFuIGFycmF5IG9mIHRoZSBJRCBudW1iZXJzIG1hdGNoaW5nIGEgZ2l2ZW4gZm5pZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlkcyA9IFtdCisgICAgICAgIGlmIGZuaWQgaW4gc2VsZi50YXNrc19sb29rdXA6CisgICAgICAgICAgICBmb3IgdGFzayBpbiBzZWxmLnRhc2tzX2xvb2t1cFtmbmlkXToKKyAgICAgICAgICAgICAgICBpZHMuYXBwZW5kKHNlbGYudGFza3NfbG9va3VwW2ZuaWRdW3Rhc2tdKQorICAgICAgICByZXR1cm4gaWRzCisKKyAgICBkZWYgZ2V0dGFza19pZF9mcm9tZm5pZChzZWxmLCBmbmlkLCB0YXNrKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhbiBJRCBudW1iZXIgZm9yIHRoZSB0YXNrIG1hdGNoaW5nIGZuaWQgYW5kIHRhc2suCisgICAgICAgICIiIgorICAgICAgICBpZiBmbmlkIGluIHNlbGYudGFza3NfbG9va3VwOgorICAgICAgICAgICAgaWYgdGFzayBpbiBzZWxmLnRhc2tzX2xvb2t1cFtmbmlkXToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi50YXNrc19sb29rdXBbZm5pZF1bdGFza10KKworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGdldHRhc2tfaWQoc2VsZiwgZm4sIHRhc2ssIGNyZWF0ZSA9IFRydWUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGFuIElEIG51bWJlciBmb3IgdGhlIHRhc2sgbWF0Y2hpbmcgZm4gYW5kIHRhc2suCisgICAgICAgIElmIGl0IGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBvbmUgYnkgZGVmYXVsdC4KKyAgICAgICAgT3B0aW9uYWxseSByZXR1cm4gTm9uZSBpbnN0ZWFkLgorICAgICAgICAiIiIKKyAgICAgICAgZm5pZCA9IHNlbGYuZ2V0Zm5faWQoZm4pCisKKyAgICAgICAgaWYgZm5pZCBpbiBzZWxmLnRhc2tzX2xvb2t1cDoKKyAgICAgICAgICAgIGlmIHRhc2sgaW4gc2VsZi50YXNrc19sb29rdXBbZm5pZF06CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudGFza3NfbG9va3VwW2ZuaWRdW3Rhc2tdCisKKyAgICAgICAgaWYgbm90IGNyZWF0ZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgc2VsZi50YXNrc19uYW1lLmFwcGVuZCh0YXNrKQorICAgICAgICBzZWxmLnRhc2tzX2ZuaWQuYXBwZW5kKGZuaWQpCisgICAgICAgIHNlbGYudGFza3NfdGRlcGVuZHMuYXBwZW5kKFtdKQorICAgICAgICBzZWxmLnRhc2tzX2lkZXBlbmRzLmFwcGVuZChbXSkKKyAgICAgICAgc2VsZi50YXNrc19pcmRlcGVuZHMuYXBwZW5kKFtdKQorCisgICAgICAgIGxpc3RpZCA9IGxlbihzZWxmLnRhc2tzX25hbWUpIC0gMQorCisgICAgICAgIGlmIGZuaWQgbm90IGluIHNlbGYudGFza3NfbG9va3VwOgorICAgICAgICAgICAgc2VsZi50YXNrc19sb29rdXBbZm5pZF0gPSB7fQorICAgICAgICBzZWxmLnRhc2tzX2xvb2t1cFtmbmlkXVt0YXNrXSA9IGxpc3RpZAorCisgICAgICAgIHJldHVybiBsaXN0aWQKKworICAgIGRlZiBhZGRfdGFza3Moc2VsZiwgZm4sIGRhdGFDYWNoZSk6CisgICAgICAgICIiIgorICAgICAgICBBZGQgdGFza3MgZm9yIGEgZ2l2ZW4gZm4gdG8gdGhlIGRhdGFiYXNlCisgICAgICAgICIiIgorCisgICAgICAgIHRhc2tfZGVwcyA9IGRhdGFDYWNoZS50YXNrX2RlcHNbZm5dCisKKyAgICAgICAgZm5pZCA9IHNlbGYuZ2V0Zm5faWQoZm4pCisKKyAgICAgICAgaWYgZm5pZCBpbiBzZWxmLmZhaWxlZF9mbmlkczoKKyAgICAgICAgICAgIGJiLm1zZy5mYXRhbCgiVGFza0RhdGEiLCAiVHJ5aW5nIHRvIHJlLWFkZCBhIGZhaWxlZCBmaWxlPyBTb21ldGhpbmcgaXMgYnJva2VuLi4uIikKKworICAgICAgICAjIENoZWNrIGlmIHdlJ3ZlIGFscmVhZHkgc2VlbiB0aGlzIGZuCisgICAgICAgIGlmIGZuaWQgaW4gc2VsZi50YXNrc19mbmlkOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza19kZXBzWyd0YXNrcyddOgorCisgICAgICAgICAgICAjIFdvcmsgb3V0IHRhc2sgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBwYXJlbnRpZHMgPSBbXQorICAgICAgICAgICAgZm9yIGRlcCBpbiB0YXNrX2RlcHNbJ3BhcmVudHMnXVt0YXNrXToKKyAgICAgICAgICAgICAgICBpZiBkZXAgbm90IGluIHRhc2tfZGVwc1sndGFza3MnXToKKyAgICAgICAgICAgICAgICAgICAgYmIuZGVidWcoMiwgIk5vdCBhZGRpbmcgZGVwZW5kZW55IG9mICVzIG9uICVzIHNpbmNlICVzIGRvZXMgbm90IGV4aXN0IiAlICh0YXNrLCBkZXAsIGRlcCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcGFyZW50aWQgPSBzZWxmLmdldHRhc2tfaWQoZm4sIGRlcCkKKyAgICAgICAgICAgICAgICBwYXJlbnRpZHMuYXBwZW5kKHBhcmVudGlkKQorICAgICAgICAgICAgdGFza2lkID0gc2VsZi5nZXR0YXNrX2lkKGZuLCB0YXNrKQorICAgICAgICAgICAgc2VsZi50YXNrc190ZGVwZW5kc1t0YXNraWRdLmV4dGVuZChwYXJlbnRpZHMpCisKKyAgICAgICAgICAgICMgVG91Y2ggYWxsIGludGVydGFzayBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgIGlmICdkZXBlbmRzJyBpbiB0YXNrX2RlcHMgYW5kIHRhc2sgaW4gdGFza19kZXBzWydkZXBlbmRzJ106CisgICAgICAgICAgICAgICAgaWRzID0gW10KKyAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHRhc2tfZGVwc1snZGVwZW5kcyddW3Rhc2tdLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGRlcDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICI6IiBub3QgaW4gZGVwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLm1zZy5mYXRhbCgiVGFza0RhdGEiLCAiRXJyb3IgZm9yICVzLCBkZXBlbmRlbmN5ICVzIGRvZXMgbm90IGNvbnRhaW4gJzonIGNoYXJhY3RlclxuLiBUYXNrICdkZXBlbmRzJyBzaG91bGQgYmUgc3BlY2lmaWVkIGluIHRoZSBmb3JtICdwYWNrYWdlbmFtZTp0YXNrJyIgJSAoZm4sIGRlcCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZHMuYXBwZW5kKCgoc2VsZi5nZXRidWlsZF9pZChkZXAuc3BsaXQoIjoiKVswXSkpLCBkZXAuc3BsaXQoIjoiKVsxXSkpCisgICAgICAgICAgICAgICAgc2VsZi50YXNrc19pZGVwZW5kc1t0YXNraWRdLmV4dGVuZChpZHMpCisgICAgICAgICAgICBpZiAncmRlcGVuZHMnIGluIHRhc2tfZGVwcyBhbmQgdGFzayBpbiB0YXNrX2RlcHNbJ3JkZXBlbmRzJ106CisgICAgICAgICAgICAgICAgaWRzID0gW10KKyAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHRhc2tfZGVwc1sncmRlcGVuZHMnXVt0YXNrXS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBpZiBkZXA6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAiOiIgbm90IGluIGRlcDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlRhc2tEYXRhIiwgIkVycm9yIGZvciAlcywgZGVwZW5kZW5jeSAlcyBkb2VzIG5vdCBjb250YWluICc6JyBjaGFyYWN0ZXJcbi4gVGFzayAncmRlcGVuZHMnIHNob3VsZCBiZSBzcGVjaWZpZWQgaW4gdGhlIGZvcm0gJ3BhY2thZ2VuYW1lOnRhc2snIiAlIChmbiwgZGVwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkcy5hcHBlbmQoKChzZWxmLmdldHJ1bl9pZChkZXAuc3BsaXQoIjoiKVswXSkpLCBkZXAuc3BsaXQoIjoiKVsxXSkpCisgICAgICAgICAgICAgICAgc2VsZi50YXNrc19pcmRlcGVuZHNbdGFza2lkXS5leHRlbmQoaWRzKQorCisKKyAgICAgICAgIyBXb3JrIG91dCBidWlsZCBkZXBlbmRlbmNpZXMKKyAgICAgICAgaWYgbm90IGZuaWQgaW4gc2VsZi5kZXBpZHM6CisgICAgICAgICAgICBkZXBlbmRpZHMgPSB7fQorICAgICAgICAgICAgZm9yIGRlcGVuZCBpbiBkYXRhQ2FjaGUuZGVwc1tmbl06CisgICAgICAgICAgICAgICAgZGVwZW5kaWRzW3NlbGYuZ2V0YnVpbGRfaWQoZGVwZW5kKV0gPSBOb25lCisgICAgICAgICAgICBzZWxmLmRlcGlkc1tmbmlkXSA9IGRlcGVuZGlkcy5rZXlzKCkKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiQWRkZWQgZGVwZW5kZW5jaWVzICVzIGZvciAlcyIsIHN0cihkYXRhQ2FjaGUuZGVwc1tmbl0pLCBmbikKKworICAgICAgICAjIFdvcmsgb3V0IHJ1bnRpbWUgZGVwZW5kZW5jaWVzCisgICAgICAgIGlmIG5vdCBmbmlkIGluIHNlbGYucmRlcGlkczoKKyAgICAgICAgICAgIHJkZXBlbmRpZHMgPSB7fQorICAgICAgICAgICAgcmRlcGVuZHMgPSBkYXRhQ2FjaGUucnVuZGVwc1tmbl0KKyAgICAgICAgICAgIHJyZWNzID0gZGF0YUNhY2hlLnJ1bnJlY3NbZm5dCisgICAgICAgICAgICByZGVwZW5kbGlzdCA9IFtdCisgICAgICAgICAgICBycmVjbGlzdCA9IFtdCisgICAgICAgICAgICBmb3IgcGFja2FnZSBpbiByZGVwZW5kczoKKyAgICAgICAgICAgICAgICBmb3IgcmRlcGVuZCBpbiByZGVwZW5kc1twYWNrYWdlXToKKyAgICAgICAgICAgICAgICAgICAgcmRlcGVuZGxpc3QuYXBwZW5kKHJkZXBlbmQpCisgICAgICAgICAgICAgICAgICAgIHJkZXBlbmRpZHNbc2VsZi5nZXRydW5faWQocmRlcGVuZCldID0gTm9uZQorICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gcnJlY3M6CisgICAgICAgICAgICAgICAgZm9yIHJkZXBlbmQgaW4gcnJlY3NbcGFja2FnZV06CisgICAgICAgICAgICAgICAgICAgIHJyZWNsaXN0LmFwcGVuZChyZGVwZW5kKQorICAgICAgICAgICAgICAgICAgICByZGVwZW5kaWRzW3NlbGYuZ2V0cnVuX2lkKHJkZXBlbmQpXSA9IE5vbmUKKyAgICAgICAgICAgIGlmIHJkZXBlbmRsaXN0OgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiQWRkZWQgcnVudGltZSBkZXBlbmRlbmNpZXMgJXMgZm9yICVzIiwgc3RyKHJkZXBlbmRsaXN0KSwgZm4pCisgICAgICAgICAgICBpZiBycmVjbGlzdDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkFkZGVkIHJ1bnRpbWUgcmVjb21tZW5kYXRpb25zICVzIGZvciAlcyIsIHN0cihycmVjbGlzdCksIGZuKQorICAgICAgICAgICAgc2VsZi5yZGVwaWRzW2ZuaWRdID0gcmRlcGVuZGlkcy5rZXlzKCkKKworICAgICAgICBmb3IgZGVwIGluIHNlbGYuZGVwaWRzW2ZuaWRdOgorICAgICAgICAgICAgaWYgZGVwIGluIHNlbGYuZmFpbGVkX2RlcHM6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsX2ZuaWQoZm5pZCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZm9yIGRlcCBpbiBzZWxmLnJkZXBpZHNbZm5pZF06CisgICAgICAgICAgICBpZiBkZXAgaW4gc2VsZi5mYWlsZWRfcmRlcHM6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsX2ZuaWQoZm5pZCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgIGRlZiBoYXZlX2J1aWxkX3RhcmdldChzZWxmLCB0YXJnZXQpOgorICAgICAgICAiIiIKKyAgICAgICAgSGF2ZSB3ZSBhIGJ1aWxkIHRhcmdldCBtYXRjaGluZyB0aGlzIG5hbWU/CisgICAgICAgICIiIgorICAgICAgICB0YXJnZXRpZCA9IHNlbGYuZ2V0YnVpbGRfaWQodGFyZ2V0KQorCisgICAgICAgIGlmIHRhcmdldGlkIGluIHNlbGYuYnVpbGRfdGFyZ2V0czoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGhhdmVfcnVudGltZV90YXJnZXQoc2VsZiwgdGFyZ2V0KToKKyAgICAgICAgIiIiCisgICAgICAgIEhhdmUgd2UgYSBydW50aW1lIHRhcmdldCBtYXRjaGluZyB0aGlzIG5hbWU/CisgICAgICAgICIiIgorICAgICAgICB0YXJnZXRpZCA9IHNlbGYuZ2V0cnVuX2lkKHRhcmdldCkKKworICAgICAgICBpZiB0YXJnZXRpZCBpbiBzZWxmLnJ1bl90YXJnZXRzOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgYWRkX2J1aWxkX3RhcmdldChzZWxmLCBmbiwgaXRlbSk6CisgICAgICAgICIiIgorICAgICAgICBBZGQgYSBidWlsZCB0YXJnZXQuCisgICAgICAgIElmIGFscmVhZHkgcHJlc2VudCwgYXBwZW5kIHRoZSBwcm92aWRlciBmbiB0byB0aGUgbGlzdAorICAgICAgICAiIiIKKyAgICAgICAgdGFyZ2V0aWQgPSBzZWxmLmdldGJ1aWxkX2lkKGl0ZW0pCisgICAgICAgIGZuaWQgPSBzZWxmLmdldGZuX2lkKGZuKQorCisgICAgICAgIGlmIHRhcmdldGlkIGluIHNlbGYuYnVpbGRfdGFyZ2V0czoKKyAgICAgICAgICAgIGlmIGZuaWQgaW4gc2VsZi5idWlsZF90YXJnZXRzW3RhcmdldGlkXToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGYuYnVpbGRfdGFyZ2V0c1t0YXJnZXRpZF0uYXBwZW5kKGZuaWQpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5idWlsZF90YXJnZXRzW3RhcmdldGlkXSA9IFtmbmlkXQorCisgICAgZGVmIGFkZF9ydW50aW1lX3RhcmdldChzZWxmLCBmbiwgaXRlbSk6CisgICAgICAgICIiIgorICAgICAgICBBZGQgYSBydW50aW1lIHRhcmdldC4KKyAgICAgICAgSWYgYWxyZWFkeSBwcmVzZW50LCBhcHBlbmQgdGhlIHByb3ZpZGVyIGZuIHRvIHRoZSBsaXN0CisgICAgICAgICIiIgorICAgICAgICB0YXJnZXRpZCA9IHNlbGYuZ2V0cnVuX2lkKGl0ZW0pCisgICAgICAgIGZuaWQgPSBzZWxmLmdldGZuX2lkKGZuKQorCisgICAgICAgIGlmIHRhcmdldGlkIGluIHNlbGYucnVuX3RhcmdldHM6CisgICAgICAgICAgICBpZiBmbmlkIGluIHNlbGYucnVuX3RhcmdldHNbdGFyZ2V0aWRdOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi5ydW5fdGFyZ2V0c1t0YXJnZXRpZF0uYXBwZW5kKGZuaWQpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5ydW5fdGFyZ2V0c1t0YXJnZXRpZF0gPSBbZm5pZF0KKworICAgIGRlZiBtYXJrX2V4dGVybmFsX3RhcmdldChzZWxmLCBpdGVtKToKKyAgICAgICAgIiIiCisgICAgICAgIE1hcmsgYSBidWlsZCB0YXJnZXQgYXMgYmVpbmcgZXh0ZXJuYWxseSByZXF1ZXN0ZWQKKyAgICAgICAgIiIiCisgICAgICAgIHRhcmdldGlkID0gc2VsZi5nZXRidWlsZF9pZChpdGVtKQorCisgICAgICAgIGlmIHRhcmdldGlkIG5vdCBpbiBzZWxmLmV4dGVybmFsX3RhcmdldHM6CisgICAgICAgICAgICBzZWxmLmV4dGVybmFsX3RhcmdldHMuYXBwZW5kKHRhcmdldGlkKQorCisgICAgZGVmIGdldF91bnJlc29sdmVkX2J1aWxkX3RhcmdldHMoc2VsZiwgZGF0YUNhY2hlKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIGxpc3Qgb2YgYnVpbGQgdGFyZ2V0cyB3aG8ncyBwcm92aWRlcnMKKyAgICAgICAgYXJlIHVua25vd24uCisgICAgICAgICIiIgorICAgICAgICB1bnJlc29sdmVkID0gW10KKyAgICAgICAgZm9yIHRhcmdldCBpbiBzZWxmLmJ1aWxkX25hbWVzX2luZGV4OgorICAgICAgICAgICAgaWYgcmVfbWF0Y2hfc3RyaW5ncyh0YXJnZXQsIGRhdGFDYWNoZS5pZ25vcmVkX2RlcGVuZGVuY2llcyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHNlbGYuYnVpbGRfbmFtZXNfaW5kZXguaW5kZXgodGFyZ2V0KSBpbiBzZWxmLmZhaWxlZF9kZXBzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5oYXZlX2J1aWxkX3RhcmdldCh0YXJnZXQpOgorICAgICAgICAgICAgICAgIHVucmVzb2x2ZWQuYXBwZW5kKHRhcmdldCkKKyAgICAgICAgcmV0dXJuIHVucmVzb2x2ZWQKKworICAgIGRlZiBnZXRfdW5yZXNvbHZlZF9ydW5fdGFyZ2V0cyhzZWxmLCBkYXRhQ2FjaGUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiBydW50aW1lIHRhcmdldHMgd2hvJ3MgcHJvdmlkZXJzCisgICAgICAgIGFyZSB1bmtub3duLgorICAgICAgICAiIiIKKyAgICAgICAgdW5yZXNvbHZlZCA9IFtdCisgICAgICAgIGZvciB0YXJnZXQgaW4gc2VsZi5ydW5fbmFtZXNfaW5kZXg6CisgICAgICAgICAgICBpZiByZV9tYXRjaF9zdHJpbmdzKHRhcmdldCwgZGF0YUNhY2hlLmlnbm9yZWRfZGVwZW5kZW5jaWVzKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgc2VsZi5ydW5fbmFtZXNfaW5kZXguaW5kZXgodGFyZ2V0KSBpbiBzZWxmLmZhaWxlZF9yZGVwczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbm90IHNlbGYuaGF2ZV9ydW50aW1lX3RhcmdldCh0YXJnZXQpOgorICAgICAgICAgICAgICAgIHVucmVzb2x2ZWQuYXBwZW5kKHRhcmdldCkKKyAgICAgICAgcmV0dXJuIHVucmVzb2x2ZWQKKworICAgIGRlZiBnZXRfcHJvdmlkZXIoc2VsZiwgaXRlbSk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIHByb3ZpZGVycyBvZiBpdGVtCisgICAgICAgICIiIgorICAgICAgICB0YXJnZXRpZCA9IHNlbGYuZ2V0YnVpbGRfaWQoaXRlbSkKKworICAgICAgICByZXR1cm4gc2VsZi5idWlsZF90YXJnZXRzW3RhcmdldGlkXQorCisgICAgZGVmIGdldF9kZXBlbmRlZXMoc2VsZiwgaXRlbWlkKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIGxpc3Qgb2YgdGFyZ2V0cyB3aGljaCBkZXBlbmQgb24gaXRlbQorICAgICAgICAiIiIKKyAgICAgICAgZGVwZW5kZWVzID0gW10KKyAgICAgICAgZm9yIGZuaWQgaW4gc2VsZi5kZXBpZHM6CisgICAgICAgICAgICBpZiBpdGVtaWQgaW4gc2VsZi5kZXBpZHNbZm5pZF06CisgICAgICAgICAgICAgICAgZGVwZW5kZWVzLmFwcGVuZChmbmlkKQorICAgICAgICByZXR1cm4gZGVwZW5kZWVzCisKKyAgICBkZWYgZ2V0X2RlcGVuZGVlc19zdHIoc2VsZiwgaXRlbSk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIHRhcmdldHMgd2hpY2ggZGVwZW5kIG9uIGl0ZW0gYXMgYSB1c2VyIHJlYWRhYmxlIHN0cmluZworICAgICAgICAiIiIKKyAgICAgICAgaXRlbWlkID0gc2VsZi5nZXRidWlsZF9pZChpdGVtKQorICAgICAgICBkZXBlbmRlZXMgPSBbXQorICAgICAgICBmb3IgZm5pZCBpbiBzZWxmLmRlcGlkczoKKyAgICAgICAgICAgIGlmIGl0ZW1pZCBpbiBzZWxmLmRlcGlkc1tmbmlkXToKKyAgICAgICAgICAgICAgICBkZXBlbmRlZXMuYXBwZW5kKHNlbGYuZm5faW5kZXhbZm5pZF0pCisgICAgICAgIHJldHVybiBkZXBlbmRlZXMKKworICAgIGRlZiBnZXRfcmRlcGVuZGVlcyhzZWxmLCBpdGVtaWQpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiB0YXJnZXRzIHdoaWNoIGRlcGVuZCBvbiBydW50aW1lIGl0ZW0KKyAgICAgICAgIiIiCisgICAgICAgIGRlcGVuZGVlcyA9IFtdCisgICAgICAgIGZvciBmbmlkIGluIHNlbGYucmRlcGlkczoKKyAgICAgICAgICAgIGlmIGl0ZW1pZCBpbiBzZWxmLnJkZXBpZHNbZm5pZF06CisgICAgICAgICAgICAgICAgZGVwZW5kZWVzLmFwcGVuZChmbmlkKQorICAgICAgICByZXR1cm4gZGVwZW5kZWVzCisKKyAgICBkZWYgZ2V0X3JkZXBlbmRlZXNfc3RyKHNlbGYsIGl0ZW0pOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiB0YXJnZXRzIHdoaWNoIGRlcGVuZCBvbiBydW50aW1lIGl0ZW0gYXMgYSB1c2VyIHJlYWRhYmxlIHN0cmluZworICAgICAgICAiIiIKKyAgICAgICAgaXRlbWlkID0gc2VsZi5nZXRydW5faWQoaXRlbSkKKyAgICAgICAgZGVwZW5kZWVzID0gW10KKyAgICAgICAgZm9yIGZuaWQgaW4gc2VsZi5yZGVwaWRzOgorICAgICAgICAgICAgaWYgaXRlbWlkIGluIHNlbGYucmRlcGlkc1tmbmlkXToKKyAgICAgICAgICAgICAgICBkZXBlbmRlZXMuYXBwZW5kKHNlbGYuZm5faW5kZXhbZm5pZF0pCisgICAgICAgIHJldHVybiBkZXBlbmRlZXMKKworICAgIGRlZiBnZXRfcmVhc29ucyhzZWxmLCBpdGVtLCBydW50aW1lPUZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIEdldCB0aGUgcmVhc29uKHMpIGZvciBhbiBpdGVtIG5vdCBiZWluZyBwcm92aWRlZCwgaWYgYW55CisgICAgICAgICIiIgorICAgICAgICByZWFzb25zID0gW10KKyAgICAgICAgaWYgc2VsZi5za2lwbGlzdDoKKyAgICAgICAgICAgIGZvciBmbiBpbiBzZWxmLnNraXBsaXN0OgorICAgICAgICAgICAgICAgIHNraXBpdGVtID0gc2VsZi5za2lwbGlzdFtmbl0KKyAgICAgICAgICAgICAgICBpZiBza2lwaXRlbS5wbiA9PSBpdGVtOgorICAgICAgICAgICAgICAgICAgICByZWFzb25zLmFwcGVuZCgiJXMgd2FzIHNraXBwZWQ6ICVzIiAlIChza2lwaXRlbS5wbiwgc2tpcGl0ZW0uc2tpcHJlYXNvbikpCisgICAgICAgICAgICAgICAgZWxpZiBydW50aW1lIGFuZCBpdGVtIGluIHNraXBpdGVtLnJwcm92aWRlczoKKyAgICAgICAgICAgICAgICAgICAgcmVhc29ucy5hcHBlbmQoIiVzIFJQUk9WSURFUyAlcyBidXQgd2FzIHNraXBwZWQ6ICVzIiAlIChza2lwaXRlbS5wbiwgaXRlbSwgc2tpcGl0ZW0uc2tpcHJlYXNvbikpCisgICAgICAgICAgICAgICAgZWxpZiBub3QgcnVudGltZSBhbmQgaXRlbSBpbiBza2lwaXRlbS5wcm92aWRlczoKKyAgICAgICAgICAgICAgICAgICAgcmVhc29ucy5hcHBlbmQoIiVzIFBST1ZJREVTICVzIGJ1dCB3YXMgc2tpcHBlZDogJXMiICUgKHNraXBpdGVtLnBuLCBpdGVtLCBza2lwaXRlbS5za2lwcmVhc29uKSkKKyAgICAgICAgcmV0dXJuIHJlYXNvbnMKKworICAgIGRlZiBnZXRfY2xvc2VfbWF0Y2hlcyhzZWxmLCBpdGVtLCBwcm92aWRlcl9saXN0KToKKyAgICAgICAgaW1wb3J0IGRpZmZsaWIKKyAgICAgICAgaWYgc2VsZi5za2lwbGlzdDoKKyAgICAgICAgICAgIHNraXBwZWQgPSBbXQorICAgICAgICAgICAgZm9yIGZuIGluIHNlbGYuc2tpcGxpc3Q6CisgICAgICAgICAgICAgICAgc2tpcHBlZC5hcHBlbmQoc2VsZi5za2lwbGlzdFtmbl0ucG4pCisgICAgICAgICAgICBmdWxsX2xpc3QgPSBwcm92aWRlcl9saXN0ICsgc2tpcHBlZAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnVsbF9saXN0ID0gcHJvdmlkZXJfbGlzdAorICAgICAgICByZXR1cm4gZGlmZmxpYi5nZXRfY2xvc2VfbWF0Y2hlcyhpdGVtLCBmdWxsX2xpc3QsIGN1dG9mZj0wLjcpCisKKyAgICBkZWYgYWRkX3Byb3ZpZGVyKHNlbGYsIGNmZ0RhdGEsIGRhdGFDYWNoZSwgaXRlbSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYWRkX3Byb3ZpZGVyX2ludGVybmFsKGNmZ0RhdGEsIGRhdGFDYWNoZSwgaXRlbSkKKyAgICAgICAgZXhjZXB0IGJiLnByb3ZpZGVycy5Ob1Byb3ZpZGVyOgorICAgICAgICAgICAgaWYgc2VsZi5hYm9ydDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgc2VsZi5yZW1vdmVfYnVpbGR0YXJnZXQoc2VsZi5nZXRidWlsZF9pZChpdGVtKSkKKworICAgICAgICBzZWxmLm1hcmtfZXh0ZXJuYWxfdGFyZ2V0KGl0ZW0pCisKKyAgICBkZWYgYWRkX3Byb3ZpZGVyX2ludGVybmFsKHNlbGYsIGNmZ0RhdGEsIGRhdGFDYWNoZSwgaXRlbSk6CisgICAgICAgICIiIgorICAgICAgICBBZGQgdGhlIHByb3ZpZGVycyBvZiBpdGVtIHRvIHRoZSB0YXNrIGRhdGEKKyAgICAgICAgTWFyayBlbnRyaWVzIHdlcmUgc3BlY2lmaWNhbGx5IGFkZGVkIGV4dGVybmFsbHkgYXMgYWdhaW5zdCBkZXBlbmRlbmNpZXMKKyAgICAgICAgYWRkZWQgaW50ZXJuYWxseSBkdXJpbmcgZGVwZW5kZW5jeSByZXNvbHV0aW9uCisgICAgICAgICIiIgorCisgICAgICAgIGlmIHJlX21hdGNoX3N0cmluZ3MoaXRlbSwgZGF0YUNhY2hlLmlnbm9yZWRfZGVwZW5kZW5jaWVzKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBpdGVtIGluIGRhdGFDYWNoZS5wcm92aWRlcnM6CisgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk5vUHJvdmlkZXIoaXRlbSwgZGVwZW5kZWVzPXNlbGYuZ2V0X2RlcGVuZGVlc19zdHIoaXRlbSksIHJlYXNvbnM9c2VsZi5nZXRfcmVhc29ucyhpdGVtKSwgY2xvc2VfbWF0Y2hlcz1zZWxmLmdldF9jbG9zZV9tYXRjaGVzKGl0ZW0sIGRhdGFDYWNoZS5wcm92aWRlcnMua2V5cygpKSksIGNmZ0RhdGEpCisgICAgICAgICAgICByYWlzZSBiYi5wcm92aWRlcnMuTm9Qcm92aWRlcihpdGVtKQorCisgICAgICAgIGlmIHNlbGYuaGF2ZV9idWlsZF90YXJnZXQoaXRlbSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBhbGxfcCA9IGRhdGFDYWNoZS5wcm92aWRlcnNbaXRlbV0KKworICAgICAgICBlbGlnaWJsZSwgZm91bmRVbmlxdWUgPSBiYi5wcm92aWRlcnMuZmlsdGVyUHJvdmlkZXJzKGFsbF9wLCBpdGVtLCBjZmdEYXRhLCBkYXRhQ2FjaGUpCisgICAgICAgIGVsaWdpYmxlID0gW3AgZm9yIHAgaW4gZWxpZ2libGUgaWYgbm90IHNlbGYuZ2V0Zm5faWQocCkgaW4gc2VsZi5mYWlsZWRfZm5pZHNdCisKKyAgICAgICAgaWYgbm90IGVsaWdpYmxlOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Ob1Byb3ZpZGVyKGl0ZW0sIGRlcGVuZGVlcz1zZWxmLmdldF9kZXBlbmRlZXNfc3RyKGl0ZW0pLCByZWFzb25zPVsiTm8gZWxpZ2libGUgUFJPVklERVJzIGV4aXN0IGZvciAnJXMnIiAlIGl0ZW1dKSwgY2ZnRGF0YSkKKyAgICAgICAgICAgIHJhaXNlIGJiLnByb3ZpZGVycy5Ob1Byb3ZpZGVyKGl0ZW0pCisKKyAgICAgICAgaWYgbGVuKGVsaWdpYmxlKSA+IDEgYW5kIGZvdW5kVW5pcXVlID09IEZhbHNlOgorICAgICAgICAgICAgaWYgaXRlbSBub3QgaW4gc2VsZi5jb25zaWRlcl9tc2dzX2NhY2hlOgorICAgICAgICAgICAgICAgIHByb3ZpZGVyc19saXN0ID0gW10KKyAgICAgICAgICAgICAgICBmb3IgZm4gaW4gZWxpZ2libGU6CisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyc19saXN0LmFwcGVuZChkYXRhQ2FjaGUucGtnX2ZuW2ZuXSkKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk11bHRpcGxlUHJvdmlkZXJzKGl0ZW0sIHByb3ZpZGVyc19saXN0KSwgY2ZnRGF0YSkKKyAgICAgICAgICAgIHNlbGYuY29uc2lkZXJfbXNnc19jYWNoZS5hcHBlbmQoaXRlbSkKKworICAgICAgICBmb3IgZm4gaW4gZWxpZ2libGU6CisgICAgICAgICAgICBmbmlkID0gc2VsZi5nZXRmbl9pZChmbikKKyAgICAgICAgICAgIGlmIGZuaWQgaW4gc2VsZi5mYWlsZWRfZm5pZHM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiYWRkaW5nICVzIHRvIHNhdGlzZnkgJXMiLCBmbiwgaXRlbSkKKyAgICAgICAgICAgIHNlbGYuYWRkX2J1aWxkX3RhcmdldChmbiwgaXRlbSkKKyAgICAgICAgICAgIHNlbGYuYWRkX3Rhc2tzKGZuLCBkYXRhQ2FjaGUpCisKKworICAgICAgICAgICAgI2l0ZW0gPSBkYXRhQ2FjaGUucGtnX2ZuW2ZuXQorCisgICAgZGVmIGFkZF9ycHJvdmlkZXIoc2VsZiwgY2ZnRGF0YSwgZGF0YUNhY2hlLCBpdGVtKToKKyAgICAgICAgIiIiCisgICAgICAgIEFkZCB0aGUgcnVudGltZSBwcm92aWRlcnMgb2YgaXRlbSB0byB0aGUgdGFzayBkYXRhCisgICAgICAgICh0YWtlcyBpdGVtIG5hbWVzIGZyb20gUkRFUEVORFMvUEFDS0FHRVMgbmFtZXNwYWNlKQorICAgICAgICAiIiIKKworICAgICAgICBpZiByZV9tYXRjaF9zdHJpbmdzKGl0ZW0sIGRhdGFDYWNoZS5pZ25vcmVkX2RlcGVuZGVuY2llcyk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLmhhdmVfcnVudGltZV90YXJnZXQoaXRlbSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBhbGxfcCA9IGJiLnByb3ZpZGVycy5nZXRSdW50aW1lUHJvdmlkZXJzKGRhdGFDYWNoZSwgaXRlbSkKKworICAgICAgICBpZiBub3QgYWxsX3A6CisgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk5vUHJvdmlkZXIoaXRlbSwgcnVudGltZT1UcnVlLCBkZXBlbmRlZXM9c2VsZi5nZXRfcmRlcGVuZGVlc19zdHIoaXRlbSksIHJlYXNvbnM9c2VsZi5nZXRfcmVhc29ucyhpdGVtLCBUcnVlKSksIGNmZ0RhdGEpCisgICAgICAgICAgICByYWlzZSBiYi5wcm92aWRlcnMuTm9SUHJvdmlkZXIoaXRlbSkKKworICAgICAgICBlbGlnaWJsZSwgbnVtYmVyUHJlZmVycmVkID0gYmIucHJvdmlkZXJzLmZpbHRlclByb3ZpZGVyc1J1blRpbWUoYWxsX3AsIGl0ZW0sIGNmZ0RhdGEsIGRhdGFDYWNoZSkKKyAgICAgICAgZWxpZ2libGUgPSBbcCBmb3IgcCBpbiBlbGlnaWJsZSBpZiBub3Qgc2VsZi5nZXRmbl9pZChwKSBpbiBzZWxmLmZhaWxlZF9mbmlkc10KKworICAgICAgICBpZiBub3QgZWxpZ2libGU6CisgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk5vUHJvdmlkZXIoaXRlbSwgcnVudGltZT1UcnVlLCBkZXBlbmRlZXM9c2VsZi5nZXRfcmRlcGVuZGVlc19zdHIoaXRlbSksIHJlYXNvbnM9WyJObyBlbGlnaWJsZSBSUFJPVklERVJzIGV4aXN0IGZvciAnJXMnIiAlIGl0ZW1dKSwgY2ZnRGF0YSkKKyAgICAgICAgICAgIHJhaXNlIGJiLnByb3ZpZGVycy5Ob1JQcm92aWRlcihpdGVtKQorCisgICAgICAgIGlmIGxlbihlbGlnaWJsZSkgPiAxIGFuZCBudW1iZXJQcmVmZXJyZWQgPT0gMDoKKyAgICAgICAgICAgIGlmIGl0ZW0gbm90IGluIHNlbGYuY29uc2lkZXJfbXNnc19jYWNoZToKKyAgICAgICAgICAgICAgICBwcm92aWRlcnNfbGlzdCA9IFtdCisgICAgICAgICAgICAgICAgZm9yIGZuIGluIGVsaWdpYmxlOgorICAgICAgICAgICAgICAgICAgICBwcm92aWRlcnNfbGlzdC5hcHBlbmQoZGF0YUNhY2hlLnBrZ19mbltmbl0pCisgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5NdWx0aXBsZVByb3ZpZGVycyhpdGVtLCBwcm92aWRlcnNfbGlzdCwgcnVudGltZT1UcnVlKSwgY2ZnRGF0YSkKKyAgICAgICAgICAgIHNlbGYuY29uc2lkZXJfbXNnc19jYWNoZS5hcHBlbmQoaXRlbSkKKworICAgICAgICBpZiBudW1iZXJQcmVmZXJyZWQgPiAxOgorICAgICAgICAgICAgaWYgaXRlbSBub3QgaW4gc2VsZi5jb25zaWRlcl9tc2dzX2NhY2hlOgorICAgICAgICAgICAgICAgIHByb3ZpZGVyc19saXN0ID0gW10KKyAgICAgICAgICAgICAgICBmb3IgZm4gaW4gZWxpZ2libGU6CisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyc19saXN0LmFwcGVuZChkYXRhQ2FjaGUucGtnX2ZuW2ZuXSkKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk11bHRpcGxlUHJvdmlkZXJzKGl0ZW0sIHByb3ZpZGVyc19saXN0LCBydW50aW1lPVRydWUpLCBjZmdEYXRhKQorICAgICAgICAgICAgc2VsZi5jb25zaWRlcl9tc2dzX2NhY2hlLmFwcGVuZChpdGVtKQorICAgICAgICAgICAgcmFpc2UgYmIucHJvdmlkZXJzLk11bHRpcGxlUlByb3ZpZGVyKGl0ZW0pCisKKyAgICAgICAgIyBydW4gdGhyb3VnaCB0aGUgbGlzdCB1bnRpbCB3ZSBmaW5kIG9uZSB0aGF0IHdlIGNhbiBidWlsZAorICAgICAgICBmb3IgZm4gaW4gZWxpZ2libGU6CisgICAgICAgICAgICBmbmlkID0gc2VsZi5nZXRmbl9pZChmbikKKyAgICAgICAgICAgIGlmIGZuaWQgaW4gc2VsZi5mYWlsZWRfZm5pZHM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiYWRkaW5nICclcycgdG8gc2F0aXNmeSBydW50aW1lICclcyciLCBmbiwgaXRlbSkKKyAgICAgICAgICAgIHNlbGYuYWRkX3J1bnRpbWVfdGFyZ2V0KGZuLCBpdGVtKQorICAgICAgICAgICAgc2VsZi5hZGRfdGFza3MoZm4sIGRhdGFDYWNoZSkKKworICAgIGRlZiBmYWlsX2ZuaWQoc2VsZiwgZm5pZCwgbWlzc2luZ19saXN0PU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgTWFyayBhIGZpbGUgYXMgZmFpbGVkICh1bmJ1aWxkYWJsZSkKKyAgICAgICAgUmVtb3ZlIGFueSByZWZlcmVuY2VzIGZyb20gYnVpbGQgYW5kIHJ1bnRpbWUgcHJvdmlkZXIgbGlzdHMKKworICAgICAgICBtaXNzaW5nX2xpc3QsIEEgbGlzdCBvZiBtaXNzaW5nIHJlcXVpcmVtZW50cyBmb3IgdGhpcyB0YXJnZXQKKyAgICAgICAgIiIiCisgICAgICAgIGlmIGZuaWQgaW4gc2VsZi5mYWlsZWRfZm5pZHM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgbm90IG1pc3NpbmdfbGlzdDoKKyAgICAgICAgICAgIG1pc3NpbmdfbGlzdCA9IFtdCisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiRmlsZSAnJXMnIGlzIHVuYnVpbGRhYmxlLCByZW1vdmluZy4uLiIsIHNlbGYuZm5faW5kZXhbZm5pZF0pCisgICAgICAgIHNlbGYuZmFpbGVkX2ZuaWRzLmFwcGVuZChmbmlkKQorICAgICAgICBmb3IgdGFyZ2V0IGluIHNlbGYuYnVpbGRfdGFyZ2V0czoKKyAgICAgICAgICAgIGlmIGZuaWQgaW4gc2VsZi5idWlsZF90YXJnZXRzW3RhcmdldF06CisgICAgICAgICAgICAgICAgc2VsZi5idWlsZF90YXJnZXRzW3RhcmdldF0ucmVtb3ZlKGZuaWQpCisgICAgICAgICAgICAgICAgaWYgbGVuKHNlbGYuYnVpbGRfdGFyZ2V0c1t0YXJnZXRdKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZV9idWlsZHRhcmdldCh0YXJnZXQsIG1pc3NpbmdfbGlzdCkKKyAgICAgICAgZm9yIHRhcmdldCBpbiBzZWxmLnJ1bl90YXJnZXRzOgorICAgICAgICAgICAgaWYgZm5pZCBpbiBzZWxmLnJ1bl90YXJnZXRzW3RhcmdldF06CisgICAgICAgICAgICAgICAgc2VsZi5ydW5fdGFyZ2V0c1t0YXJnZXRdLnJlbW92ZShmbmlkKQorICAgICAgICAgICAgICAgIGlmIGxlbihzZWxmLnJ1bl90YXJnZXRzW3RhcmdldF0pID09IDA6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlX3J1bnRhcmdldCh0YXJnZXQsIG1pc3NpbmdfbGlzdCkKKworICAgIGRlZiByZW1vdmVfYnVpbGR0YXJnZXQoc2VsZiwgdGFyZ2V0aWQsIG1pc3NpbmdfbGlzdD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIE1hcmsgYSBidWlsZCB0YXJnZXQgYXMgZmFpbGVkICh1bmJ1aWxkYWJsZSkKKyAgICAgICAgVHJpZ2dlciByZW1vdmFsIG9mIGFueSBmaWxlcyB0aGF0IGhhdmUgdGhpcyBhcyBhIGRlcGVuZGVuY3kKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBtaXNzaW5nX2xpc3Q6CisgICAgICAgICAgICBtaXNzaW5nX2xpc3QgPSBbc2VsZi5idWlsZF9uYW1lc19pbmRleFt0YXJnZXRpZF1dCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtaXNzaW5nX2xpc3QgPSBbc2VsZi5idWlsZF9uYW1lc19pbmRleFt0YXJnZXRpZF1dICsgbWlzc2luZ19saXN0CisgICAgICAgIGxvZ2dlci52ZXJib3NlKCJUYXJnZXQgJyVzJyBpcyB1bmJ1aWxkYWJsZSwgcmVtb3ZpbmcuLi5cbk1pc3Npbmcgb3IgdW5idWlsZGFibGUgZGVwZW5kZW5jeSBjaGFpbiB3YXM6ICVzIiwgc2VsZi5idWlsZF9uYW1lc19pbmRleFt0YXJnZXRpZF0sIG1pc3NpbmdfbGlzdCkKKyAgICAgICAgc2VsZi5mYWlsZWRfZGVwcy5hcHBlbmQodGFyZ2V0aWQpCisgICAgICAgIGRlcGVuZGVlcyA9IHNlbGYuZ2V0X2RlcGVuZGVlcyh0YXJnZXRpZCkKKyAgICAgICAgZm9yIGZuaWQgaW4gZGVwZW5kZWVzOgorICAgICAgICAgICAgc2VsZi5mYWlsX2ZuaWQoZm5pZCwgbWlzc2luZ19saXN0KQorICAgICAgICBmb3IgdGFza2lkIGluIHhyYW5nZShsZW4oc2VsZi50YXNrc19pZGVwZW5kcykpOgorICAgICAgICAgICAgaWRlcGVuZHMgPSBzZWxmLnRhc2tzX2lkZXBlbmRzW3Rhc2tpZF0KKyAgICAgICAgICAgIGZvciAoaWRlcGVuZGlkLCBpZGVwZW5kdGFzaykgaW4gaWRlcGVuZHM6CisgICAgICAgICAgICAgICAgaWYgaWRlcGVuZGlkID09IHRhcmdldGlkOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWxfZm5pZChzZWxmLnRhc2tzX2ZuaWRbdGFza2lkXSwgbWlzc2luZ19saXN0KQorCisgICAgICAgIGlmIHNlbGYuYWJvcnQgYW5kIHRhcmdldGlkIGluIHNlbGYuZXh0ZXJuYWxfdGFyZ2V0czoKKyAgICAgICAgICAgIHRhcmdldCA9IHNlbGYuYnVpbGRfbmFtZXNfaW5kZXhbdGFyZ2V0aWRdCisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlJlcXVpcmVkIGJ1aWxkIHRhcmdldCAnJXMnIGhhcyBubyBidWlsZGFibGUgcHJvdmlkZXJzLlxuTWlzc2luZyBvciB1bmJ1aWxkYWJsZSBkZXBlbmRlbmN5IGNoYWluIHdhczogJXMiLCB0YXJnZXQsIG1pc3NpbmdfbGlzdCkKKyAgICAgICAgICAgIHJhaXNlIGJiLnByb3ZpZGVycy5Ob1Byb3ZpZGVyKHRhcmdldCkKKworICAgIGRlZiByZW1vdmVfcnVudGFyZ2V0KHNlbGYsIHRhcmdldGlkLCBtaXNzaW5nX2xpc3Q9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBNYXJrIGEgcnVuIHRhcmdldCBhcyBmYWlsZWQgKHVuYnVpbGRhYmxlKQorICAgICAgICBUcmlnZ2VyIHJlbW92YWwgb2YgYW55IGZpbGVzIHRoYXQgaGF2ZSB0aGlzIGFzIGEgZGVwZW5kZW5jeQorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IG1pc3NpbmdfbGlzdDoKKyAgICAgICAgICAgIG1pc3NpbmdfbGlzdCA9IFtzZWxmLnJ1bl9uYW1lc19pbmRleFt0YXJnZXRpZF1dCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtaXNzaW5nX2xpc3QgPSBbc2VsZi5ydW5fbmFtZXNfaW5kZXhbdGFyZ2V0aWRdXSArIG1pc3NpbmdfbGlzdAorCisgICAgICAgIGxvZ2dlci5pbmZvKCJSdW50aW1lIHRhcmdldCAnJXMnIGlzIHVuYnVpbGRhYmxlLCByZW1vdmluZy4uLlxuTWlzc2luZyBvciB1bmJ1aWxkYWJsZSBkZXBlbmRlbmN5IGNoYWluIHdhczogJXMiLCBzZWxmLnJ1bl9uYW1lc19pbmRleFt0YXJnZXRpZF0sIG1pc3NpbmdfbGlzdCkKKyAgICAgICAgc2VsZi5mYWlsZWRfcmRlcHMuYXBwZW5kKHRhcmdldGlkKQorICAgICAgICBkZXBlbmRlZXMgPSBzZWxmLmdldF9yZGVwZW5kZWVzKHRhcmdldGlkKQorICAgICAgICBmb3IgZm5pZCBpbiBkZXBlbmRlZXM6CisgICAgICAgICAgICBzZWxmLmZhaWxfZm5pZChmbmlkLCBtaXNzaW5nX2xpc3QpCisgICAgICAgIGZvciB0YXNraWQgaW4geHJhbmdlKGxlbihzZWxmLnRhc2tzX2lyZGVwZW5kcykpOgorICAgICAgICAgICAgaXJkZXBlbmRzID0gc2VsZi50YXNrc19pcmRlcGVuZHNbdGFza2lkXQorICAgICAgICAgICAgZm9yIChpZGVwZW5kaWQsIGlkZXBlbmR0YXNrKSBpbiBpcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgaWYgaWRlcGVuZGlkID09IHRhcmdldGlkOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWxfZm5pZChzZWxmLnRhc2tzX2ZuaWRbdGFza2lkXSwgbWlzc2luZ19saXN0KQorCisgICAgZGVmIGFkZF91bnJlc29sdmVkKHNlbGYsIGNmZ0RhdGEsIGRhdGFDYWNoZSk6CisgICAgICAgICIiIgorICAgICAgICBSZXNvbHZlIGFsbCB1bnJlc29sdmVkIGJ1aWxkIGFuZCBydW50aW1lIHRhcmdldHMKKyAgICAgICAgIiIiCisgICAgICAgIGxvZ2dlci5pbmZvKCJSZXNvbHZpbmcgYW55IG1pc3NpbmcgdGFzayBxdWV1ZSBkZXBlbmRlbmNpZXMiKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgYWRkZWQgPSAwCisgICAgICAgICAgICBmb3IgdGFyZ2V0IGluIHNlbGYuZ2V0X3VucmVzb2x2ZWRfYnVpbGRfdGFyZ2V0cyhkYXRhQ2FjaGUpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGRfcHJvdmlkZXJfaW50ZXJuYWwoY2ZnRGF0YSwgZGF0YUNhY2hlLCB0YXJnZXQpCisgICAgICAgICAgICAgICAgICAgIGFkZGVkID0gYWRkZWQgKyAxCisgICAgICAgICAgICAgICAgZXhjZXB0IGJiLnByb3ZpZGVycy5Ob1Byb3ZpZGVyOgorICAgICAgICAgICAgICAgICAgICB0YXJnZXRpZCA9IHNlbGYuZ2V0YnVpbGRfaWQodGFyZ2V0KQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmFib3J0IGFuZCB0YXJnZXRpZCBpbiBzZWxmLmV4dGVybmFsX3RhcmdldHMgYW5kIG5vdCBzZWxmLmFsbG93aW5jb21wbGV0ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmFsbG93aW5jb21wbGV0ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlX2J1aWxkdGFyZ2V0KHRhcmdldGlkKQorICAgICAgICAgICAgZm9yIHRhcmdldCBpbiBzZWxmLmdldF91bnJlc29sdmVkX3J1bl90YXJnZXRzKGRhdGFDYWNoZSk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZF9ycHJvdmlkZXIoY2ZnRGF0YSwgZGF0YUNhY2hlLCB0YXJnZXQpCisgICAgICAgICAgICAgICAgICAgIGFkZGVkID0gYWRkZWQgKyAxCisgICAgICAgICAgICAgICAgZXhjZXB0IChiYi5wcm92aWRlcnMuTm9SUHJvdmlkZXIsIGJiLnByb3ZpZGVycy5NdWx0aXBsZVJQcm92aWRlcik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlX3J1bnRhcmdldChzZWxmLmdldHJ1bl9pZCh0YXJnZXQpKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSZXNvbHZlZCAiICsgc3RyKGFkZGVkKSArICIgZXh0cmEgZGVwZW5kZW5jaWVzIikKKyAgICAgICAgICAgIGlmIGFkZGVkID09IDA6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgIyBzZWxmLmR1bXBfZGF0YSgpCisKKyAgICBkZWYgZHVtcF9kYXRhKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgRHVtcCBzb21lIGRlYnVnIGluZm9ybWF0aW9uIG9uIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMKKyAgICAgICAgIiIiCisgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAiYnVpbGRfbmFtZXM6IikKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICIsICIuam9pbihzZWxmLmJ1aWxkX25hbWVzX2luZGV4KSkKKworICAgICAgICBsb2dnZXIuZGVidWcoMywgInJ1bl9uYW1lczoiKQorICAgICAgICBsb2dnZXIuZGVidWcoMywgIiwgIi5qb2luKHNlbGYucnVuX25hbWVzX2luZGV4KSkKKworICAgICAgICBsb2dnZXIuZGVidWcoMywgImJ1aWxkX3RhcmdldHM6IikKKyAgICAgICAgZm9yIGJ1aWxkaWQgaW4geHJhbmdlKGxlbihzZWxmLmJ1aWxkX25hbWVzX2luZGV4KSk6CisgICAgICAgICAgICB0YXJnZXQgPSBzZWxmLmJ1aWxkX25hbWVzX2luZGV4W2J1aWxkaWRdCisgICAgICAgICAgICB0YXJnZXRzID0gIk5vbmUiCisgICAgICAgICAgICBpZiBidWlsZGlkIGluIHNlbGYuYnVpbGRfdGFyZ2V0czoKKyAgICAgICAgICAgICAgICB0YXJnZXRzID0gc2VsZi5idWlsZF90YXJnZXRzW2J1aWxkaWRdCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMywgIiAoJXMpJXM6ICVzIiwgYnVpbGRpZCwgdGFyZ2V0LCB0YXJnZXRzKQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAicnVuX3RhcmdldHM6IikKKyAgICAgICAgZm9yIHJ1bmlkIGluIHhyYW5nZShsZW4oc2VsZi5ydW5fbmFtZXNfaW5kZXgpKToKKyAgICAgICAgICAgIHRhcmdldCA9IHNlbGYucnVuX25hbWVzX2luZGV4W3J1bmlkXQorICAgICAgICAgICAgdGFyZ2V0cyA9ICJOb25lIgorICAgICAgICAgICAgaWYgcnVuaWQgaW4gc2VsZi5ydW5fdGFyZ2V0czoKKyAgICAgICAgICAgICAgICB0YXJnZXRzID0gc2VsZi5ydW5fdGFyZ2V0c1tydW5pZF0KKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAiICglcyklczogJXMiLCBydW5pZCwgdGFyZ2V0LCB0YXJnZXRzKQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAidGFza3M6IikKKyAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbihzZWxmLnRhc2tzX25hbWUpKToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAiICglcyklcyAtICVzOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgIHRhc2ssCisgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZm5faW5kZXhbc2VsZi50YXNrc19mbmlkW3Rhc2tdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YXNrc19uYW1lW3Rhc2tdLAorICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhc2tzX3RkZXBlbmRzW3Rhc2tdKQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAiZGVwZW5kZW5jeSBpZHMgKHBlciBmbik6IikKKyAgICAgICAgZm9yIGZuaWQgaW4gc2VsZi5kZXBpZHM6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMywgIiAlcyAlczogJXMiLCBmbmlkLCBzZWxmLmZuX2luZGV4W2ZuaWRdLCBzZWxmLmRlcGlkc1tmbmlkXSkKKworICAgICAgICBsb2dnZXIuZGVidWcoMywgInJ1bnRpbWUgZGVwZW5kZW5jeSBpZHMgKHBlciBmbik6IikKKyAgICAgICAgZm9yIGZuaWQgaW4gc2VsZi5yZGVwaWRzOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICIgJXMgJXM6ICVzIiwgZm5pZCwgc2VsZi5mbl9pbmRleFtmbmlkXSwgc2VsZi5yZGVwaWRzW2ZuaWRdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvY29kZXBhcnNlci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvY29kZXBhcnNlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDU0YmM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy9jb2RlcGFyc2VyLnB5CkBAIC0wLDAgKzEsMzc1IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRlc3QgZm9yIGNvZGVwYXJzZXIucHkKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEwIENocmlzIExhcnNvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBiYgorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZS5UZXN0Q29kZVBhcnNlcicpCisKKyMgYmIuZGF0YSByZWZlcmVuY2VzIGJiLnBhcnNlIGJ1dCBjYW4ndCBkaXJlY3RseSBpbXBvcnQgZHVlIHRvIGNpcmN1bGFyIGRlcGVuZGVuY2llcy4KKyMgSGFjayBhcm91bmQgaXQgZm9yIG5vdyA6KCAKK2ltcG9ydCBiYi5wYXJzZQoraW1wb3J0IGJiLmRhdGEKKworY2xhc3MgUmVmZXJlbmNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmQgPSBiYi5kYXRhLmluaXQoKQorCisgICAgZGVmIHNldEVtcHR5VmFycyhzZWxmLCB2YXJsaXN0KToKKyAgICAgICAgZm9yIGsgaW4gdmFybGlzdDoKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoaywgIiIpCisKKyAgICBkZWYgc2V0VmFsdWVzKHNlbGYsIHZhbHVlcyk6CisgICAgICAgIGZvciBrLCB2IGluIHZhbHVlcy5pdGVtcygpOgorICAgICAgICAgICAgc2VsZi5kLnNldFZhcihrLCB2KQorCisgICAgZGVmIGFzc2VydFJlZmVyZW5jZXMoc2VsZiwgcmVmcyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWZlcmVuY2VzLCByZWZzKQorCisgICAgZGVmIGFzc2VydEV4ZWNzKHNlbGYsIGV4ZWNzKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmV4ZWNzLCBleGVjcykKKworY2xhc3MgVmFyaWFibGVSZWZlcmVuY2VUZXN0KFJlZmVyZW5jZVRlc3QpOgorCisgICAgZGVmIHBhcnNlRXhwcmVzc2lvbihzZWxmLCBleHApOgorICAgICAgICBwYXJzZWR2YXIgPSBzZWxmLmQuZXhwYW5kV2l0aFJlZnMoZXhwLCBOb25lKQorICAgICAgICBzZWxmLnJlZmVyZW5jZXMgPSBwYXJzZWR2YXIucmVmZXJlbmNlcworCisgICAgZGVmIHRlc3Rfc2ltcGxlX3JlZmVyZW5jZShzZWxmKToKKyAgICAgICAgc2VsZi5zZXRFbXB0eVZhcnMoWyJGT08iXSkKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oIiR7Rk9PfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoWyJGT08iXSkpCisKKyAgICBkZWYgdGVzdF9uZXN0ZWRfcmVmZXJlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLnNldEVtcHR5VmFycyhbIkJBUiJdKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJGT08iLCAiQkFSIikKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oIiR7JHtGT099fSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoWyJGT08iLCAiQkFSIl0pKQorCisgICAgZGVmIHRlc3RfcHl0aG9uX3JlZmVyZW5jZShzZWxmKToKKyAgICAgICAgc2VsZi5zZXRFbXB0eVZhcnMoWyJCQVIiXSkKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oIiR7QGJiLmRhdGEuZ2V0VmFyKCdCQVInLCBkLCBUcnVlKSArICdmb28nfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoWyJCQVIiXSkpCisKK2NsYXNzIFNoZWxsUmVmZXJlbmNlVGVzdChSZWZlcmVuY2VUZXN0KToKKworICAgIGRlZiBwYXJzZUV4cHJlc3Npb24oc2VsZiwgZXhwKToKKyAgICAgICAgcGFyc2VkdmFyID0gc2VsZi5kLmV4cGFuZFdpdGhSZWZzKGV4cCwgTm9uZSkKKyAgICAgICAgcGFyc2VyID0gYmIuY29kZXBhcnNlci5TaGVsbFBhcnNlcigiUGFyc2VyVGVzdCIsIGxvZ2dlcikKKyAgICAgICAgcGFyc2VyLnBhcnNlX3NoZWxsKHBhcnNlZHZhci52YWx1ZSkKKworICAgICAgICBzZWxmLnJlZmVyZW5jZXMgPSBwYXJzZWR2YXIucmVmZXJlbmNlcworICAgICAgICBzZWxmLmV4ZWNzID0gcGFyc2VyLmV4ZWNzCisKKyAgICBkZWYgdGVzdF9xdW90ZXNfaW5zaWRlX2Fzc2lnbihzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oJ2Zvbz1mb28iYmFyImJheicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoW10pKQorCisgICAgZGVmIHRlc3RfcXVvdGVzX2luc2lkZV9hcmcoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCdzZWQgcyMiYmFyIGJheiIjImFscGhhIGJldGEiI2cnKQorICAgICAgICBzZWxmLmFzc2VydEV4ZWNzKHNldChbInNlZCJdKSkKKworICAgIGRlZiB0ZXN0X2FyZ19jb250aW51YXRpb24oc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCJzZWQgLWkgLWUgcyxmb28sYmFyLGcgXFxcbiAqLnBjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJzZWQiXSkpCisKKyAgICBkZWYgdGVzdF9kb2xsYXJfaW5fcXVvdGVkKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbignc2VkIC1pIC1lICJmb28kIiAqLnBjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJzZWQiXSkpCisKKyAgICBkZWYgdGVzdF9xdW90ZXNfaW5zaWRlX2FyZ19jb250aW51YXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuc2V0RW1wdHlWYXJzKFsiYmluZGlyIiwgIkQiLCAibGliZGlyIl0pCisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCIiIgorc2VkIC1pIC1lIHMjIm1vY19sb2NhdGlvbj0uKiQiIyJtb2NfbG9jYXRpb249JHtiaW5kaXJ9L21vYzQiIyBcXAorLWUgcyMidWljX2xvY2F0aW9uPS4qJCIjInVpY19sb2NhdGlvbj0ke2JpbmRpcn0vdWljNCIjIFxcCiske0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8qLnBjCisiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoWyJiaW5kaXIiLCAiRCIsICJsaWJkaXIiXSkpCisKKyAgICBkZWYgdGVzdF9hc3NpZ25fc3Vic2hlbGxfZXhwYW5zaW9uKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigiZm9vPSQoZWNobyBiYXIpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJlY2hvIl0pKQorCisgICAgZGVmIHRlc3Rfc2hlbGxfdW5leHBhbmRlZChzZWxmKToKKyAgICAgICAgc2VsZi5zZXRFbXB0eVZhcnMoWyJRVF9CQVNFX05BTUUiXSkKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oJ2VjaG8gIiR7UVRfQkFTRV9OQU1FfSInKQorICAgICAgICBzZWxmLmFzc2VydEV4ZWNzKHNldChbImVjaG8iXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoWyJRVF9CQVNFX05BTUUiXSkpCisKKyAgICBkZWYgdGVzdF9pbmNvbXBsZXRlX3ZhcmV4cF9zaW5nbGVfcXVvdGVzKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigic2VkIC1pIC1lICdzOklQezpJJHs6ZycgJHBjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJzZWQiXSkpCisKKworICAgIGRlZiB0ZXN0X3VudGlsKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigidW50aWwgZmFsc2U7IGRvIGVjaG8gdHJ1ZTsgZG9uZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsiZmFsc2UiLCAiZWNobyJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWZlcmVuY2VzKHNldCgpKQorCisgICAgZGVmIHRlc3RfY2FzZShzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oIiIiCitjYXNlICRmb28gaW4KKyopCitiYXIKKzs7Citlc2FjCisiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsiYmFyIl0pKQorICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KCkpCisKKyAgICBkZWYgdGVzdF9hc3NpZ25fZXhlYyhzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oImE9YiBjPSdmb28gYmFyJyBhbHBoYSAxIDIgMyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsiYWxwaGEiXSkpCisKKyAgICBkZWYgdGVzdF9yZWRpcmVjdF90b19maWxlKHNlbGYpOgorICAgICAgICBzZWxmLnNldEVtcHR5VmFycyhbImZvbyJdKQorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigiZWNobyBmb28gPiR7Zm9vfS9iYXIiKQorICAgICAgICBzZWxmLmFzc2VydEV4ZWNzKHNldChbImVjaG8iXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoWyJmb28iXSkpCisKKyAgICBkZWYgdGVzdF9oZXJlZG9jKHNlbGYpOgorICAgICAgICBzZWxmLnNldEVtcHR5VmFycyhbInRoZXRhIl0pCisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCIiIgorY2F0IDw8RU5ECithbHBoYQorYmV0YQorJHt0aGV0YX0KK0VORAorIiIiKQorICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KFsidGhldGEiXSkpCisKKyAgICBkZWYgdGVzdF9yZWRpcmVjdF9mcm9tX2hlcmVkb2Moc2VsZik6CisgICAgICAgIHYgPSBbIkIiLCAiU0hBRE9XX01BSUxESVIiLCAiU0hBRE9XX01BSUxGSUxFIiwgIlNIQURPV19VVE1QRElSIiwgIlNIQURPV19MT0dESVIiLCAiYmluZGlyIl0KKyAgICAgICAgc2VsZi5zZXRFbXB0eVZhcnModikKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oIiIiCitjYXQgPDxFTkQgPiR7Qn0vY2FjaGVkcGF0aHMKK3NoYWRvd19jdl9tYWlsZGlyPSR7U0hBRE9XX01BSUxESVJ9CitzaGFkb3dfY3ZfbWFpbGZpbGU9JHtTSEFET1dfTUFJTEZJTEV9CitzaGFkb3dfY3ZfdXRtcGRpcj0ke1NIQURPV19VVE1QRElSfQorc2hhZG93X2N2X2xvZ2Rpcj0ke1NIQURPV19MT0dESVJ9CitzaGFkb3dfY3ZfcGFzc3dkX2Rpcj0ke2JpbmRpcn0KK0VORAorIiIiKQorICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KHYpKQorICAgICAgICBzZWxmLmFzc2VydEV4ZWNzKHNldChbImNhdCJdKSkKKworIyAgICBkZWYgdGVzdF9pbmNvbXBsZXRlX2NvbW1hbmRfZXhwYW5zaW9uKHNlbGYpOgorIyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmVmdHJhY2tlci5TaGVsbFN5bnRheEVycm9yLCByZWZ0cmFja2VyLmV4ZWNzLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgYmJ2YWx1ZS5zaHBhcnNlKCJjcCBmb29gIiwgc2VsZi5kKSwgc2VsZi5kKQorCisjICAgIGRlZiB0ZXN0X3JvZ3VlX2RvbGxhcnNpZ24oc2VsZik6CisjICAgICAgICBzZWxmLnNldFZhbHVlcyh7IkQiIDogIi90bXAifSkKKyMgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCJpbnN0YWxsIC1kICR7RH0kIikKKyMgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoWyJEIl0pKQorIyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJpbnN0YWxsIl0pKQorCisKK2NsYXNzIFB5dGhvblJlZmVyZW5jZVRlc3QoUmVmZXJlbmNlVGVzdCk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZCA9IGJiLmRhdGEuaW5pdCgpCisgICAgICAgIGlmIGhhc2F0dHIoYmIudXRpbHMsICJfY29udGV4dCIpOgorICAgICAgICAgICAgc2VsZi5jb250ZXh0ID0gYmIudXRpbHMuX2NvbnRleHQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGltcG9ydCBfX2J1aWx0aW5fXworICAgICAgICAgICAgc2VsZi5jb250ZXh0ID0gX19idWlsdGluX18uX19kaWN0X18KKworICAgIGRlZiBwYXJzZUV4cHJlc3Npb24oc2VsZiwgZXhwKToKKyAgICAgICAgcGFyc2VkdmFyID0gc2VsZi5kLmV4cGFuZFdpdGhSZWZzKGV4cCwgTm9uZSkKKyAgICAgICAgcGFyc2VyID0gYmIuY29kZXBhcnNlci5QeXRob25QYXJzZXIoIlBhcnNlclRlc3QiLCBsb2dnZXIpCisgICAgICAgIHBhcnNlci5wYXJzZV9weXRob24ocGFyc2VkdmFyLnZhbHVlKQorCisgICAgICAgIHNlbGYucmVmZXJlbmNlcyA9IHBhcnNlZHZhci5yZWZlcmVuY2VzIHwgcGFyc2VyLnJlZmVyZW5jZXMKKyAgICAgICAgc2VsZi5leGVjcyA9IHBhcnNlci5leGVjcworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBpbmRlbnQodmFsdWUpOgorICAgICAgICAiIiJQeXRob24gU25pcHBldHMgaGF2ZSB0byBiZSBpbmRlbnRlZCwgcHl0aG9uIHZhbHVlcyBkb24ndCBoYXZlIHRvCitiZS4gVGhlc2UgdW5pdCB0ZXN0cyBhcmUgdGVzdGluZyBzbmlwcGV0cy4iIiIKKyAgICAgICAgcmV0dXJuICIgIiArIHZhbHVlCisKKyAgICBkZWYgdGVzdF9nZXR2YXJfcmVmZXJlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigiYmIuZGF0YS5nZXRWYXIoJ2ZvbycsIGQsIFRydWUpIikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWZlcmVuY2VzKHNldChbImZvbyJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoKSkKKworICAgIGRlZiB0ZXN0X2dldHZhcl9jb21wdXRlZF9yZWZlcmVuY2Uoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCJiYi5kYXRhLmdldFZhcignZicgKyAnbycgKyAnbycsIGQsIFRydWUpIikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWZlcmVuY2VzKHNldCgpKQorICAgICAgICBzZWxmLmFzc2VydEV4ZWNzKHNldCgpKQorCisgICAgZGVmIHRlc3RfZ2V0dmFyX2V4ZWNfcmVmZXJlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigiZXZhbCgnYmIuZGF0YS5nZXRWYXIoXCJmb29cIiwgZCwgVHJ1ZSknKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJldmFsIl0pKQorCisgICAgZGVmIHRlc3RfdmFyX3JlZmVyZW5jZShzZWxmKToKKyAgICAgICAgc2VsZi5jb250ZXh0WyJmb28iXSA9IGxhbWJkYSB4OiB4CisgICAgICAgIHNlbGYuc2V0RW1wdHlWYXJzKFsiRk9PIl0pCisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCJmb28oJyR7Rk9PfScpIikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWZlcmVuY2VzKHNldChbIkZPTyJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJmb28iXSkpCisgICAgICAgIGRlbCBzZWxmLmNvbnRleHRbImZvbyJdCisKKyAgICBkZWYgdGVzdF92YXJfZXhlYyhzZWxmKToKKyAgICAgICAgZm9yIGV0eXBlIGluICgiZnVuYyIsICJ0YXNrIik6CisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJkb19zb21ldGhpbmciLCAiZWNobyAnaGkgbW9tISAke0ZPT30nIikKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXJGbGFnKCJkb19zb21ldGhpbmciLCBldHlwZSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCJiYi5idWlsZC5leGVjX2Z1bmMoJ2RvX3NvbWV0aGluZycsIGQpIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoW10pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJkb19zb21ldGhpbmciXSkpCisKKyAgICBkZWYgdGVzdF9mdW5jdGlvbl9yZWZlcmVuY2Uoc2VsZik6CisgICAgICAgIHNlbGYuY29udGV4dFsidGVzdGZ1bmMiXSA9IGxhbWJkYSBtc2c6IGJiLm1zZy5ub3RlKDEsIE5vbmUsIG1zZykKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRk9PIiwgIkhlbGxvLCBXb3JsZCEiKQorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigidGVzdGZ1bmMoJyR7Rk9PfScpIikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWZlcmVuY2VzKHNldChbIkZPTyJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJ0ZXN0ZnVuYyJdKSkKKyAgICAgICAgZGVsIHNlbGYuY29udGV4dFsidGVzdGZ1bmMiXQorCisgICAgZGVmIHRlc3RfcXVhbGlmaWVkX2Z1bmN0aW9uX3JlZmVyZW5jZShzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oInRpbWUudGltZSgpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJ0aW1lLnRpbWUiXSkpCisKKyAgICBkZWYgdGVzdF9xdWFsaWZpZWRfZnVuY3Rpb25fcmVmZXJlbmNlXzIoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCJvcy5wYXRoLmRpcm5hbWUoJy9mb28vYmFyJykiKQorICAgICAgICBzZWxmLmFzc2VydEV4ZWNzKHNldChbIm9zLnBhdGguZGlybmFtZSJdKSkKKworICAgIGRlZiB0ZXN0X3F1YWxpZmllZF9mdW5jdGlvbl9yZWZlcmVuY2VfbmVzdGVkKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigidGltZS5zdHJmdGltZSgnJVklbSVkJyx0aW1lLmdtdGltZSgpKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsidGltZS5zdHJmdGltZSIsICJ0aW1lLmdtdGltZSJdKSkKKworICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX3JlZmVyZW5jZV9jaGFpbmVkKHNlbGYpOgorICAgICAgICBzZWxmLmNvbnRleHRbInRlc3RnZXQiXSA9IGxhbWJkYTogIlx0c3RyaXAgbWUgIgorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigidGVzdGdldCgpLnN0cmlwKCkiKQorICAgICAgICBzZWxmLmFzc2VydEV4ZWNzKHNldChbInRlc3RnZXQiXSkpCisgICAgICAgIGRlbCBzZWxmLmNvbnRleHRbInRlc3RnZXQiXQorCisKK2NsYXNzIERlcGVuZGVuY3lSZWZlcmVuY2VUZXN0KFJlZmVyZW5jZVRlc3QpOgorCisgICAgcHlkYXRhID0gIiIiCitiYi5kYXRhLmdldFZhcignc29tZXZhcicsIGQsIFRydWUpCitkZWYgdGVzdChkKToKKyAgICBmb28gPSAnYmFyICVzJyAlICdmb28nCitkZWYgdGVzdDIoZCk6CisgICAgZC5nZXRWYXIoZm9vLCBUcnVlKQorICAgIGQuZ2V0VmFyKCdiYXInLCBGYWxzZSkKKyAgICB0ZXN0MihkKQorCitkZWYgYSgpOgorICAgIFwiXCJcInNvbWUKKyAgICBzdHVmZgorICAgIFwiXCJcIgorICAgIHJldHVybiAiaGVoIgorCit0ZXN0KGQpCisKK2JiLmRhdGEuZXhwYW5kKGJiLmRhdGEuZ2V0VmFyKCJzb21ldGhpbmciLCBGYWxzZSwgZCksIGQpCitiYi5kYXRhLmV4cGFuZCgiJHtpbmV4cGFuZH0gc29tZXRoaW5nZWxzZSIsIGQpCitiYi5kYXRhLmdldFZhcihhKCksIGQsIEZhbHNlKQorIiIiCisKKyAgICBkZWYgdGVzdF9weXRob24oc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkZPTyIsIHNlbGYucHlkYXRhKQorICAgICAgICBzZWxmLnNldEVtcHR5VmFycyhbImluZXhwYW5kIiwgImEiLCAidGVzdDIiLCAidGVzdCJdKQorICAgICAgICBzZWxmLmQuc2V0VmFyRmxhZ3MoIkZPTyIsIHsiZnVuYyI6IFRydWUsICJweXRob24iOiBUcnVlfSkKKworICAgICAgICBkZXBzLCB2YWx1ZXMgPSBiYi5kYXRhLmJ1aWxkX2RlcGVuZGVuY2llcygiRk9PIiwgc2V0KHNlbGYuZC5rZXlzKCkpLCBzZXQoKSwgc2V0KCksIHNlbGYuZCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkZXBzLCBzZXQoWyJzb21ldmFyIiwgImJhciIsICJzb21ldGhpbmciLCAiaW5leHBhbmQiLCAidGVzdCIsICJ0ZXN0MiIsICJhIl0pKQorCisKKyAgICBzaGVsbGRhdGEgPSAiIiIKK2ZvbyAoKSB7CitiYXIKK30KK3sKK2VjaG8gYmF6CiskKGhlaCkKK2V2YWwgYG1vb2AKK30KK2E9YgorYz1kCisoCit0cnVlICYmIGZhbHNlCit0ZXN0IC1mIGZvbwordGVzdHZhbD1zb21ldGhpbmcKKyR0ZXN0dmFsCispIHx8IGFpZWUKKyEgaW52ZXJ0ZWQKK2VjaG8gJHtzb21ldmFyfQorCitjYXNlIGZvbyBpbgorYmFyKQorZWNobyBiYXIKKzs7CitiYXopCitlY2hvIGJhegorOzsKK2ZvbyopCitlY2hvIGZvbworOzsKK2VzYWMKKyIiIgorCisgICAgZGVmIHRlc3Rfc2hlbGwoc2VsZik6CisgICAgICAgIGV4ZWNzID0gWyJiYXIiLCAiZWNobyIsICJoZWgiLCAibW9vIiwgInRydWUiLCAiYWllZSJdCisgICAgICAgIHNlbGYuZC5zZXRWYXIoInNvbWV2YXIiLCAiaGVoIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiaW52ZXJ0ZWQiLCAiZWNobyBpbnZlcnRlZC4uLiIpCisgICAgICAgIHNlbGYuZC5zZXRWYXJGbGFnKCJpbnZlcnRlZCIsICJmdW5jIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRk9PIiwgc2VsZi5zaGVsbGRhdGEpCisgICAgICAgIHNlbGYuZC5zZXRWYXJGbGFncygiRk9PIiwgeyJmdW5jIjogVHJ1ZX0pCisgICAgICAgIHNlbGYuc2V0RW1wdHlWYXJzKGV4ZWNzKQorCisgICAgICAgIGRlcHMsIHZhbHVlcyA9IGJiLmRhdGEuYnVpbGRfZGVwZW5kZW5jaWVzKCJGT08iLCBzZXQoc2VsZi5kLmtleXMoKSksIHNldCgpLCBzZXQoKSwgc2VsZi5kKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRlcHMsIHNldChbInNvbWV2YXIiLCAiaW52ZXJ0ZWQiXSArIGV4ZWNzKSkKKworCisgICAgZGVmIHRlc3RfdmFyZGVwcyhzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigib2VfbGliaW5zdGFsbCIsICJlY2hvIHRlc3QiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJGT08iLCAiZm9vPW9lX2xpYmluc3RhbGw7IGV2YWwgJGZvbyIpCisgICAgICAgIHNlbGYuZC5zZXRWYXJGbGFnKCJGT08iLCAidmFyZGVwcyIsICJvZV9saWJpbnN0YWxsIikKKworICAgICAgICBkZXBzLCB2YWx1ZXMgPSBiYi5kYXRhLmJ1aWxkX2RlcGVuZGVuY2llcygiRk9PIiwgc2V0KHNlbGYuZC5rZXlzKCkpLCBzZXQoKSwgc2V0KCksIHNlbGYuZCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkZXBzLCBzZXQoWyJvZV9saWJpbnN0YWxsIl0pKQorCisgICAgZGVmIHRlc3RfdmFyZGVwc19leHBhbmQoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIm9lX2xpYmluc3RhbGwiLCAiZWNobyB0ZXN0IikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRk9PIiwgImZvbz1vZV9saWJpbnN0YWxsOyBldmFsICRmb28iKQorICAgICAgICBzZWxmLmQuc2V0VmFyRmxhZygiRk9PIiwgInZhcmRlcHMiLCAiJHtAJ29lX2xpYmluc3RhbGwnfSIpCisKKyAgICAgICAgZGVwcywgdmFsdWVzID0gYmIuZGF0YS5idWlsZF9kZXBlbmRlbmNpZXMoIkZPTyIsIHNldChzZWxmLmQua2V5cygpKSwgc2V0KCksIHNldCgpLCBzZWxmLmQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVwcywgc2V0KFsib2VfbGliaW5zdGFsbCJdKSkKKworICAgICNDdXJyZW50bHkgbm8gd2lsZGNhcmQgc3VwcG9ydAorICAgICNkZWYgdGVzdF92YXJkZXBzX3dpbGRjYXJkcyhzZWxmKToKKyAgICAjICAgIHNlbGYuZC5zZXRWYXIoIm9lX2xpYmluc3RhbGwiLCAiZWNobyB0ZXN0IikKKyAgICAjICAgIHNlbGYuZC5zZXRWYXIoIkZPTyIsICJmb289b2VfbGliaW5zdGFsbDsgZXZhbCAkZm9vIikKKyAgICAjICAgIHNlbGYuZC5zZXRWYXJGbGFnKCJGT08iLCAidmFyZGVwcyIsICJvZV8qIikKKyAgICAjICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRlcHMsIHNldChbIm9lX2xpYmluc3RhbGwiXSkpCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy9jb3cucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL2Nvdy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWM1ODQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy9jb3cucHkKQEAgLTAsMCArMSwxMzYgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIEJpdEJha2UgVGVzdHMgZm9yIENvcHktb24tV3JpdGUgKGNvdy5weSkKKyMKKyMgQ29weXJpZ2h0IDIwMDYgSG9sZ2VyIEZyZXl0aGVyIDxmcmV5dGhlckBoYW5kaGVsZHMub3JnPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKKworY2xhc3MgQ09XVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3QgY2FzZSBmb3IgdGhlIENPVyBtb2R1bGUgZnJvbSBtaXRocm8KKyAgICAiIiIKKworICAgIGRlZiB0ZXN0R2V0U2V0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdCBhbmQgc2V0CisgICAgICAgICIiIgorICAgICAgICBmcm9tIGJiLkNPVyBpbXBvcnQgQ09XRGljdEJhc2UKKyAgICAgICAgYSA9IENPV0RpY3RCYXNlLmNvcHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBhLmhhc19rZXkoJ2EnKSkKKworICAgICAgICBhWydhJ10gPSAnYScKKyAgICAgICAgYVsnYiddID0gJ2InCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFRydWUsIGEuaGFzX2tleSgnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhUcnVlLCBhLmhhc19rZXkoJ2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ2EnLCBhWydhJ10gKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnYicsIGFbJ2InXSApCisKKyAgICBkZWYgdGVzdENvcHlDb3B5KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdCB0aGUgY29weSBvZiBjb3BpZXMKKyAgICAgICAgIiIiCisKKyAgICAgICAgZnJvbSBiYi5DT1cgaW1wb3J0IENPV0RpY3RCYXNlCisKKyAgICAgICAgIyBjcmVhdGUgdHdvIENPVyBkaWN0ICdpbnN0YW5jZXMnCisgICAgICAgIGIgPSBDT1dEaWN0QmFzZS5jb3B5KCkKKyAgICAgICAgYyA9IENPV0RpY3RCYXNlLmNvcHkoKQorCisgICAgICAgICMgYXNzaWduIHNvbWUga2V5cyB0byBvbmUgaW5zdGFuY2UsIHNvbWUga2V5cyB0byBhbm90aGVyCisgICAgICAgIGJbJ2EnXSA9IDEwCisgICAgICAgIGJbJ2MnXSA9IDIwCisgICAgICAgIGNbJ2EnXSA9IDMwCisKKyAgICAgICAgIyB0ZXN0IHNlcGFyYXRpb24gb2YgdGhlIHR3byBpbnN0YW5jZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRmFsc2UsIGMuaGFzX2tleSgnYycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygzMCwgY1snYSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygxMCwgYlsnYSddKQorCisgICAgICAgICMgdGVzdCBjb3B5CisgICAgICAgIGJfMiA9IGIuY29weSgpCisgICAgICAgIGNfMiA9IGMuY29weSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRmFsc2UsIGNfMi5oYXNfa2V5KCdjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEwLCBiXzJbJ2EnXSkKKworICAgICAgICBiXzJbJ2QnXSA9IDQwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBjXzIuaGFzX2tleSgnZCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhUcnVlLCBiXzIuaGFzX2tleSgnZCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyg0MCwgYl8yWydkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBiLmhhc19rZXkoJ2QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRmFsc2UsIGMuaGFzX2tleSgnZCcpKQorCisgICAgICAgIGNfMlsnZCddID0gMzAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoVHJ1ZSwgY18yLmhhc19rZXkoJ2QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoVHJ1ZSwgYl8yLmhhc19rZXkoJ2QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMzAsIGNfMlsnZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyg0MCwgYl8yWydkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBiLmhhc19rZXkoJ2QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRmFsc2UsIGMuaGFzX2tleSgnZCcpKQorCisgICAgICAgICMgdGVzdCBjb3B5IG9mIHRoZSBjb3B5CisgICAgICAgIGNfMyA9IGNfMi5jb3B5KCkKKyAgICAgICAgYl8zID0gYl8yLmNvcHkoKQorICAgICAgICBiXzNfMiA9IGJfMi5jb3B5KCkKKworICAgICAgICBjXzNbJ2UnXSA9IDQ3MTEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoNDcxMSwgY18zWydlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBjXzIuaGFzX2tleSgnZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGYWxzZSwgYl8zLmhhc19rZXkoJ2UnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRmFsc2UsIGJfM18yLmhhc19rZXkoJ2UnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRmFsc2UsIGJfMi5oYXNfa2V5KCdlJykpCisKKyAgICAgICAgYl8zWydlJ10gPSAndmllbCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ3ZpZWwnLCBiXzNbJ2UnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoNDcxMSwgY18zWydlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBjXzIuaGFzX2tleSgnZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhUcnVlLCBiXzMuaGFzX2tleSgnZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGYWxzZSwgYl8zXzIuaGFzX2tleSgnZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGYWxzZSwgYl8yLmhhc19rZXkoJ2UnKSkKKworICAgIGRlZiB0ZXN0Q293KHNlbGYpOgorICAgICAgICBmcm9tIGJiLkNPVyBpbXBvcnQgQ09XRGljdEJhc2UKKyAgICAgICAgYyA9IENPV0RpY3RCYXNlLmNvcHkoKQorICAgICAgICBjWycxMjMnXSA9IDEwMjcKKyAgICAgICAgY1snb3RoZXInXSA9IDQ3MTEKKyAgICAgICAgY1snZCddID0geyAnYWJjJyA6IDEwLCAnYmNkJyA6IDIwIH0KKworICAgICAgICBjb3B5ID0gYy5jb3B5KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscygxMDI3LCBjWycxMjMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoNDcxMSwgY1snb3RoZXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeydhYmMnOjEwLCAnYmNkJzoyMH0sIGNbJ2QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMTAyNywgY29weVsnMTIzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDQ3MTEsIGNvcHlbJ290aGVyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHsnYWJjJzoxMCwgJ2JjZCc6MjB9LCBjb3B5WydkJ10pCisKKyAgICAgICAgIyBjb3cgaXQgbm93CisgICAgICAgIGNvcHlbJzEyMyddID0gMTAyOAorICAgICAgICBjb3B5WydvdGhlciddID0gNDcxMgorICAgICAgICBjb3B5WydkJ11bJ2FiYyddID0gMjAKKworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEwMjcsIGNbJzEyMyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyg0NzExLCBjWydvdGhlciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh7J2FiYyc6MTAsICdiY2QnOjIwfSwgY1snZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygxMDI4LCBjb3B5WycxMjMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoNDcxMiwgY29weVsnb3RoZXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeydhYmMnOjIwLCAnYmNkJzoyMH0sIGNvcHlbJ2QnXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvZGF0YS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvZGF0YS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWFhYjU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy9kYXRhLnB5CkBAIC0wLDAgKzEsNDQxIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRlc3RzIGZvciB0aGUgRGF0YSBTdG9yZSAoZGF0YS5weS9kYXRhX3NtYXJ0LnB5KQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTAgQ2hyaXMgTGFyc29uCisjIENvcHlyaWdodCAoQykgMjAxMiBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgYmIKK2ltcG9ydCBiYi5kYXRhCitpbXBvcnQgYmIucGFyc2UKK2ltcG9ydCBsb2dnaW5nCisKK2NsYXNzIExvZ1JlY29yZCgpOgorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIGxvZ3MgPSBbXQorICAgICAgICBjbGFzcyBMb2dIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CisgICAgICAgICAgICBkZWYgZW1pdChzZWxmLCByZWNvcmQpOgorICAgICAgICAgICAgICAgIGxvZ3MuYXBwZW5kKHJlY29yZCkKKyAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UiKQorICAgICAgICBoYW5kbGVyID0gTG9nSGFuZGxlcigpCisgICAgICAgIHNlbGYuaGFuZGxlciA9IGhhbmRsZXIKKyAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFuZGxlcikKKyAgICAgICAgcmV0dXJuIGxvZ3MKKyAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CisgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlIikKKyAgICAgICAgbG9nZ2VyLnJlbW92ZUhhbmRsZXIoc2VsZi5oYW5kbGVyKQorICAgICAgICByZXR1cm4KKworZGVmIGxvZ0NvbnRhaW5zKGl0ZW0sIGxvZ3MpOgorICAgIGZvciBsIGluIGxvZ3M6CisgICAgICAgIG0gPSBsLmdldE1lc3NhZ2UoKQorICAgICAgICBpZiBpdGVtIGluIG06CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQorCitjbGFzcyBEYXRhRXhwYW5zaW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmQgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBzZWxmLmRbImZvbyJdID0gInZhbHVlX29mX2ZvbyIKKyAgICAgICAgc2VsZi5kWyJiYXIiXSA9ICJ2YWx1ZV9vZl9iYXIiCisgICAgICAgIHNlbGYuZFsidmFsdWVfb2ZfZm9vIl0gPSAidmFsdWVfb2ZfJ3ZhbHVlX29mX2ZvbyciCisKKyAgICBkZWYgdGVzdF9vbmVfdmFyKHNlbGYpOgorICAgICAgICB2YWwgPSBzZWxmLmQuZXhwYW5kKCIke2Zvb30iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih2YWwpLCAidmFsdWVfb2ZfZm9vIikKKworICAgIGRlZiB0ZXN0X2luZGlyZWN0X29uZV92YXIoc2VsZik6CisgICAgICAgIHZhbCA9IHNlbGYuZC5leHBhbmQoIiR7JHtmb299fSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICJ2YWx1ZV9vZl8ndmFsdWVfb2ZfZm9vJyIpCisKKyAgICBkZWYgdGVzdF9pbmRpcmVjdF9hbmRfYW5vdGhlcihzZWxmKToKKyAgICAgICAgdmFsID0gc2VsZi5kLmV4cGFuZCgiJHske2Zvb319ICR7YmFyfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICJ2YWx1ZV9vZl8ndmFsdWVfb2ZfZm9vJyB2YWx1ZV9vZl9iYXIiKQorCisgICAgZGVmIHRlc3RfcHl0aG9uX3NuaXBwZXQoc2VsZik6CisgICAgICAgIHZhbCA9IHNlbGYuZC5leHBhbmQoIiR7QDUqMTJ9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmFsKSwgIjYwIikKKworICAgIGRlZiB0ZXN0X2V4cGFuZF9pbl9weXRob25fc25pcHBldChzZWxmKToKKyAgICAgICAgdmFsID0gc2VsZi5kLmV4cGFuZCgiJHtAJ2JvbyAnICsgJyR7Zm9vfSd9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmFsKSwgImJvbyB2YWx1ZV9vZl9mb28iKQorCisgICAgZGVmIHRlc3RfcHl0aG9uX3NuaXBwZXRfZ2V0dmFyKHNlbGYpOgorICAgICAgICB2YWwgPSBzZWxmLmQuZXhwYW5kKCIke0BkLmdldFZhcignZm9vJywgVHJ1ZSkgKyAnICR7YmFyfSd9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmFsKSwgInZhbHVlX29mX2ZvbyB2YWx1ZV9vZl9iYXIiKQorCisgICAgZGVmIHRlc3RfcHl0aG9uX3NuaXBwZXRfc3ludGF4X2Vycm9yKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJGT08iLCAiJHtAZm9vID0gNX0iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhiYi5kYXRhX3NtYXJ0LkV4cGFuc2lvbkVycm9yLCBzZWxmLmQuZ2V0VmFyLCAiRk9PIiwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3B5dGhvbl9zbmlwcGV0X3J1bnRpbWVfZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkZPTyIsICIke0BpbnQoJ3Rlc3QnKX0iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhiYi5kYXRhX3NtYXJ0LkV4cGFuc2lvbkVycm9yLCBzZWxmLmQuZ2V0VmFyLCAiRk9PIiwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3B5dGhvbl9zbmlwcGV0X2Vycm9yX3BhdGgoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkZPTyIsICJmb28gdmFsdWUgJHtCQVJ9IikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiQkFSIiwgImJhciB2YWx1ZSAke0BpbnQoJ3Rlc3QnKX0iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhiYi5kYXRhX3NtYXJ0LkV4cGFuc2lvbkVycm9yLCBzZWxmLmQuZ2V0VmFyLCAiRk9PIiwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3ZhbHVlX2NvbnRhaW5pbmdfdmFsdWUoc2VsZik6CisgICAgICAgIHZhbCA9IHNlbGYuZC5leHBhbmQoIiR7QGQuZ2V0VmFyKCdmb28nLCBUcnVlKSArICcgJHtiYXJ9J30iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih2YWwpLCAidmFsdWVfb2ZfZm9vIHZhbHVlX29mX2JhciIpCisKKyAgICBkZWYgdGVzdF9yZWZlcmVuY2VfdW5kZWZpbmVkX3ZhcihzZWxmKToKKyAgICAgICAgdmFsID0gc2VsZi5kLmV4cGFuZCgiJHt1bmRlZmluZWR2YXJ9IG1laCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICIke3VuZGVmaW5lZHZhcn0gbWVoIikKKworICAgIGRlZiB0ZXN0X2RvdWJsZV9yZWZlcmVuY2Uoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJBUiIsICJiYXIgdmFsdWUiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJGT08iLCAiJHtCQVJ9IGZvbyAke0JBUn0iKQorICAgICAgICB2YWwgPSBzZWxmLmQuZ2V0VmFyKCJGT08iLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih2YWwpLCAiYmFyIHZhbHVlIGZvbyBiYXIgdmFsdWUiKQorCisgICAgZGVmIHRlc3RfZGlyZWN0X3JlY3Vyc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRk9PIiwgIiR7Rk9PfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGJiLmRhdGFfc21hcnQuRXhwYW5zaW9uRXJyb3IsIHNlbGYuZC5nZXRWYXIsICJGT08iLCBUcnVlKQorCisgICAgZGVmIHRlc3RfaW5kaXJlY3RfcmVjdXJzaW9uKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJGT08iLCAiJHtCQVJ9IikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiQkFSIiwgIiR7QkFafSIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJBWiIsICIke0ZPT30iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhiYi5kYXRhX3NtYXJ0LkV4cGFuc2lvbkVycm9yLCBzZWxmLmQuZ2V0VmFyLCAiRk9PIiwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2lvbl9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkZPTyIsICIke0JBUn0iKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQVIiLCAiJHske0AnRk9PJ319IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYmIuZGF0YV9zbWFydC5FeHBhbnNpb25FcnJvciwgc2VsZi5kLmdldFZhciwgIkZPTyIsIFRydWUpCisKKyAgICBkZWYgdGVzdF9pbmNvbXBsZXRlX3ZhcmV4cF9zaW5nbGVfcXVvdGVzKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJGT08iLCAic2VkIC1pIC1lICdzOklQezpJJHs6ZycgJHBjIikKKyAgICAgICAgdmFsID0gc2VsZi5kLmdldFZhcigiRk9PIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmFsKSwgInNlZCAtaSAtZSAnczpJUHs6SSR7OmcnICRwYyIpCisKKyAgICBkZWYgdGVzdF9ub25zdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1QiLCA1KQorICAgICAgICB2YWwgPSBzZWxmLmQuZ2V0VmFyKCJURVNUIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmFsKSwgIjUiKQorCisgICAgZGVmIHRlc3RfcmVuYW1lKHNlbGYpOgorICAgICAgICBzZWxmLmQucmVuYW1lVmFyKCJmb28iLCAibmV3Zm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJuZXdmb28iLCBGYWxzZSksICJ2YWx1ZV9vZl9mb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoImZvbyIsIEZhbHNlKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2RlbGV0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmQuZGVsVmFyKCJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoImZvbyIsIEZhbHNlKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2tleXMoc2VsZik6CisgICAgICAgIGtleXMgPSBzZWxmLmQua2V5cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5cywgWyd2YWx1ZV9vZl9mb28nLCAnZm9vJywgJ2JhciddKQorCisgICAgZGVmIHRlc3Rfa2V5c19kZWxldGlvbihzZWxmKToKKyAgICAgICAgbmV3ZCA9IGJiLmRhdGEuY3JlYXRlQ29weShzZWxmLmQpCisgICAgICAgIG5ld2QuZGVsVmFyKCJiYXIiKQorICAgICAgICBrZXlzID0gbmV3ZC5rZXlzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXlzLCBbJ3ZhbHVlX29mX2ZvbycsICdmb28nXSkKKworY2xhc3MgVGVzdE5lc3RlZEV4cGFuc2lvbnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgc2VsZi5kWyJmb28iXSA9ICJmb28iCisgICAgICAgIHNlbGYuZFsiYmFyIl0gPSAiYmFyIgorICAgICAgICBzZWxmLmRbInZhbHVlX29mX2Zvb2JhciJdID0gIjE4NyIKKworICAgIGRlZiB0ZXN0X3JlZnMoc2VsZik6CisgICAgICAgIHZhbCA9IHNlbGYuZC5leHBhbmQoIiR7dmFsdWVfb2ZfJHtmb299JHtiYXJ9fSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICIxODciKQorCisgICAgI2RlZiB0ZXN0X3B5dGhvbl9yZWZzKHNlbGYpOgorICAgICMgICAgdmFsID0gc2VsZi5kLmV4cGFuZCgiJHtAJHtAM30qKjIgKyAke0A0fSoqMn0iKQorICAgICMgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmFsKSwgIjI1IikKKworICAgIGRlZiB0ZXN0X3JlZl9pbl9weXRob25fcmVmKHNlbGYpOgorICAgICAgICB2YWwgPSBzZWxmLmQuZXhwYW5kKCIke0AnJHtmb299JyArICdiYXInfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICJmb29iYXIiKQorCisgICAgZGVmIHRlc3RfcHl0aG9uX3JlZl9pbl9yZWYoc2VsZik6CisgICAgICAgIHZhbCA9IHNlbGYuZC5leHBhbmQoIiR7JHtAJ2YnKydvJysnbyd9fSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICJmb28iKQorCisgICAgZGVmIHRlc3RfZGVlcF9uZXN0aW5nKHNlbGYpOgorICAgICAgICBkZXB0aCA9IDEwMAorICAgICAgICB2YWwgPSBzZWxmLmQuZXhwYW5kKCIkeyIgKiBkZXB0aCArICJmb28iICsgIn0iICogZGVwdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICJmb28iKQorCisgICAgI2RlZiB0ZXN0X2RlZXBfcHl0aG9uX25lc3Rpbmcoc2VsZik6CisgICAgIyAgICBkZXB0aCA9IDUwCisgICAgIyAgICB2YWwgPSBzZWxmLmQuZXhwYW5kKCIke0AiICogZGVwdGggKyAiMSIgKyAiKzF9IiAqIGRlcHRoKQorICAgICMgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmFsKSwgc3RyKGRlcHRoICsgMSkpCisKKyAgICBkZWYgdGVzdF9taXhlZChzZWxmKToKKyAgICAgICAgdmFsID0gc2VsZi5kLmV4cGFuZCgiJHt2YWx1ZV9vZl8ke0AoJyR7Zm9vfScrJ2JhcicpWzA6M119JHske0AnQkFSJy5sb3dlcigpfX19IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmFsKSwgIjE4NyIpCisKKyAgICBkZWYgdGVzdF9ydW50aW1lKHNlbGYpOgorICAgICAgICB2YWwgPSBzZWxmLmQuZXhwYW5kKCIkeyR7QCd2YWx1ZV9vZicgKyAnX2YnKydvJysnbycrJ2InKydhJysncid9fSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICIxODciKQorCitjbGFzcyBUZXN0TWVtb2l6ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfbWVtb2l6ZWQoc2VsZik6CisgICAgICAgIGQgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBkLnNldFZhcigiRk9PIiwgImJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmdldFZhcigiRk9PIiwgRmFsc2UpIGlzIGQuZ2V0VmFyKCJGT08iLCBGYWxzZSkpCisKKyAgICBkZWYgdGVzdF9ub3RfbWVtb2l6ZWQoc2VsZik6CisgICAgICAgIGQxID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgZDIgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBkMS5zZXRWYXIoIkZPTyIsICJiYXIiKQorICAgICAgICBkMi5zZXRWYXIoIkZPTyIsICJiYXIyIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQxLmdldFZhcigiRk9PIiwgRmFsc2UpIGlzIG5vdCBkMi5nZXRWYXIoIkZPTyIsIEZhbHNlKSkKKworICAgIGRlZiB0ZXN0X2NoYW5nZWRfYWZ0ZXJfbWVtb2l6ZWQoc2VsZik6CisgICAgICAgIGQgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBkLnNldFZhcigiZm9vIiwgInZhbHVlIG9mIGZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGQuZ2V0VmFyKCJmb28iLCBGYWxzZSkpLCAidmFsdWUgb2YgZm9vIikKKyAgICAgICAgZC5zZXRWYXIoImZvbyIsICJzZWNvbmQgdmFsdWUgb2YgZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZC5nZXRWYXIoImZvbyIsIEZhbHNlKSksICJzZWNvbmQgdmFsdWUgb2YgZm9vIikKKworICAgIGRlZiB0ZXN0X3NhbWVfdmFsdWUoc2VsZik6CisgICAgICAgIGQgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBkLnNldFZhcigiZm9vIiwgInZhbHVlIG9mIikKKyAgICAgICAgZC5zZXRWYXIoImJhciIsICJ2YWx1ZSBvZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXRWYXIoImZvbyIsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcigiYmFyIiwgRmFsc2UpKQorCitjbGFzcyBUZXN0Q29uY2F0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZCA9IGJiLmRhdGEuaW5pdCgpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkZPTyIsICJmb28iKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJWQUwiLCAidmFsIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiQkFSIiwgImJhciIpCisKKyAgICBkZWYgdGVzdF9wcmVwZW5kKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUIiwgIiR7VkFMfSIpCisgICAgICAgIHNlbGYuZC5wcmVwZW5kVmFyKCJURVNUIiwgIiR7Rk9PfToiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgImZvbzp2YWwiKQorCisgICAgZGVmIHRlc3RfYXBwZW5kKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUIiwgIiR7VkFMfSIpCisgICAgICAgIHNlbGYuZC5hcHBlbmRWYXIoIlRFU1QiLCAiOiR7QkFSfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpLCAidmFsOmJhciIpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9hcHBlbmQoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1QiLCAiJHtWQUx9IikKKyAgICAgICAgc2VsZi5kLnByZXBlbmRWYXIoIlRFU1QiLCAiJHtGT099OiIpCisgICAgICAgIHNlbGYuZC5hcHBlbmRWYXIoIlRFU1QiLCAiOnZhbDIiKQorICAgICAgICBzZWxmLmQuYXBwZW5kVmFyKCJURVNUIiwgIjoke0JBUn0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgImZvbzp2YWw6dmFsMjpiYXIiKQorCitjbGFzcyBUZXN0Q29uY2F0T3ZlcnJpZGUodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRk9PIiwgImZvbyIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlZBTCIsICJ2YWwiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQVIiLCAiYmFyIikKKworICAgIGRlZiB0ZXN0X3ByZXBlbmQoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1QiLCAiJHtWQUx9IikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9wcmVwZW5kIiwgIiR7Rk9PfToiKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJURVNUIiwgVHJ1ZSksICJmb286dmFsIikKKworICAgIGRlZiB0ZXN0X2FwcGVuZChzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVCIsICIke1ZBTH0iKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX2FwcGVuZCIsICI6JHtCQVJ9IikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpLCAidmFsOmJhciIpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9hcHBlbmQoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1QiLCAiJHtWQUx9IikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9wcmVwZW5kIiwgIiR7Rk9PfToiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX2FwcGVuZCIsICI6dmFsMiIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfYXBwZW5kIiwgIjoke0JBUn0iKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJURVNUIiwgVHJ1ZSksICJmb286dmFsOnZhbDI6YmFyIikKKworICAgIGRlZiB0ZXN0X2FwcGVuZF91bnNldChzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9wcmVwZW5kIiwgIiR7Rk9PfToiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX2FwcGVuZCIsICI6dmFsMiIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfYXBwZW5kIiwgIjoke0JBUn0iKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJURVNUIiwgVHJ1ZSksICJmb286OnZhbDI6YmFyIikKKworICAgIGRlZiB0ZXN0X3JlbW92ZShzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVCIsICIke1ZBTH0gJHtCQVJ9IikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9yZW1vdmUiLCAidmFsIikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpLCAiYmFyIikKKworICAgIGRlZiB0ZXN0X2RvdWJsZXJlZl9yZW1vdmUoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1QiLCAiJHtWQUx9ICR7QkFSfSIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfcmVtb3ZlIiwgInZhbCIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfVEVTVCIsICIke1RFU1R9ICR7VEVTVH0iKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJURVNUX1RFU1QiLCBUcnVlKSwgImJhciBiYXIiKQorCisgICAgZGVmIHRlc3RfZW1wdHlfcmVtb3ZlKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUIiwgIiIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfcmVtb3ZlIiwgInZhbCIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgIiIpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfZXhwYW5zaW9uKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQVIiLCAiWiIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1QiLCAiJHtCQVJ9L1ggWSIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfcmVtb3ZlIiwgIiR7QkFSfS9YIikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpLCAiWSIpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfZXhwYW5zaW9uX2l0ZW1zKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUIiwgIkEgQiBDIEQiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQVIiLCAiQiBEIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9yZW1vdmUiLCAiJHtCQVJ9IikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpLCAiQSBDIikKKworY2xhc3MgVGVzdE92ZXJyaWRlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmQgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJPVkVSUklERVMiLCAiZm9vOmJhcjpsb2NhbCIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1QiLCAidGVzdHZhbHVlIikKKworICAgIGRlZiB0ZXN0X25vX292ZXJyaWRlKHNlbGYpOgorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJURVNUIiwgVHJ1ZSksICJ0ZXN0dmFsdWUiKQorCisgICAgZGVmIHRlc3Rfb25lX292ZXJyaWRlKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX2JhciIsICJ0ZXN0dmFsdWUyIikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpLCAidGVzdHZhbHVlMiIpCisKKyAgICBkZWYgdGVzdF9vbmVfb3ZlcnJpZGVfdW5zZXQoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1QyX2JhciIsICJ0ZXN0dmFsdWUyIikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVDIiLCBUcnVlKSwgInRlc3R2YWx1ZTIiKQorICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoc2VsZi5kLmtleXMoKSwgWydURVNUJywgJ1RFU1QyJywgJ09WRVJSSURFUycsICdURVNUMl9iYXInXSkKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX292ZXJyaWRlKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX2JhciIsICJ0ZXN0dmFsdWUyIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9sb2NhbCIsICJ0ZXN0dmFsdWUzIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9mb28iLCAidGVzdHZhbHVlNCIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgInRlc3R2YWx1ZTMiKQorICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoc2VsZi5kLmtleXMoKSwgWydURVNUJywgJ1RFU1RfZm9vJywgJ09WRVJSSURFUycsICdURVNUX2JhcicsICdURVNUX2xvY2FsJ10pCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9jb21iaW5lZF9vdmVycmlkZXMoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfbG9jYWxfZm9vX2JhciIsICJ0ZXN0dmFsdWUzIikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpLCAidGVzdHZhbHVlMyIpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9vdmVycmlkZXNfdW5zZXQoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1QyX2xvY2FsX2Zvb19iYXIiLCAidGVzdHZhbHVlMyIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QyIiwgVHJ1ZSksICJ0ZXN0dmFsdWUzIikKKworICAgIGRlZiB0ZXN0X2tleWV4cGFuc2lvbl9vdmVycmlkZShzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiTE9DQUwiLCAibG9jYWwiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX2JhciIsICJ0ZXN0dmFsdWUyIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF8ke0xPQ0FMfSIsICJ0ZXN0dmFsdWUzIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9mb28iLCAidGVzdHZhbHVlNCIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoc2VsZi5kKQorICAgICAgICBiYi5kYXRhLmV4cGFuZEtleXMoc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgInRlc3R2YWx1ZTMiKQorCisgICAgZGVmIHRlc3RfcmVuYW1lX292ZXJyaWRlKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJBTFRFUk5BVElWRV9uY3Vyc2VzLXRvb2xzX2NsYXNzLXRhcmdldCIsICJhIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiT1ZFUlJJREVTIiwgImNsYXNzLXRhcmdldCIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoc2VsZi5kKQorICAgICAgICBzZWxmLmQucmVuYW1lVmFyKCJBTFRFUk5BVElWRV9uY3Vyc2VzLXRvb2xzIiwgIkFMVEVSTkFUSVZFX2xpYjMyLW5jdXJzZXMtdG9vbHMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIkFMVEVSTkFUSVZFX2xpYjMyLW5jdXJzZXMtdG9vbHMiLCBUcnVlKSwgImEiKQorCisgICAgZGVmIHRlc3RfdW5kZXJzY29yZV9vdmVycmlkZShzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9iYXIiLCAidGVzdHZhbHVlMiIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1Rfc29tZV92YWwiLCAidGVzdHZhbHVlMyIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfZm9vIiwgInRlc3R2YWx1ZTQiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJPVkVSUklERVMiLCAiZm9vOmJhcjpzb21lX3ZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpLCAidGVzdHZhbHVlMyIpCisKK2NsYXNzIFRlc3RLZXlFeHBhbnNpb24odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRk9PIiwgImZvbyIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJBUiIsICJmb28iKQorCisgICAgZGVmIHRlc3Rfa2V5ZXhwYW5kKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJWQUxfJHtGT099IiwgIkEiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJWQUxfJHtCQVJ9IiwgIkIiKQorICAgICAgICB3aXRoIExvZ1JlY29yZCgpIGFzIGxvZ3M6CisgICAgICAgICAgICBiYi5kYXRhLmV4cGFuZEtleXMoc2VsZi5kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvZ0NvbnRhaW5zKCJWYXJpYWJsZSBrZXkgVkFMXyR7Rk9PfSAoQSkgcmVwbGFjZXMgb3JpZ2luYWwga2V5IFZBTF9mb28gKEIpIiwgbG9ncykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVkFMX2ZvbyIsIFRydWUpLCAiQSIpCisKK2NsYXNzIFRlc3RGbGFncyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmQgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJmb28iLCAidmFsdWUgb2YgZm9vIikKKyAgICAgICAgc2VsZi5kLnNldFZhckZsYWcoImZvbyIsICJmbGFnMSIsICJ2YWx1ZSBvZiBmbGFnMSIpCisgICAgICAgIHNlbGYuZC5zZXRWYXJGbGFnKCJmb28iLCAiZmxhZzIiLCAidmFsdWUgb2YgZmxhZzIiKQorCisgICAgZGVmIHRlc3Rfc2V0ZmxhZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyRmxhZygiZm9vIiwgImZsYWcxIiksICJ2YWx1ZSBvZiBmbGFnMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhckZsYWcoImZvbyIsICJmbGFnMiIpLCAidmFsdWUgb2YgZmxhZzIiKQorCisgICAgZGVmIHRlc3RfZGVsZmxhZyhzZWxmKToKKyAgICAgICAgc2VsZi5kLmRlbFZhckZsYWcoImZvbyIsICJmbGFnMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhckZsYWcoImZvbyIsICJmbGFnMSIpLCAidmFsdWUgb2YgZmxhZzEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXJGbGFnKCJmb28iLCAiZmxhZzIiKSwgTm9uZSkKKworCitjbGFzcyBDb250YWlucyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmQgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJTT01FRkxBRyIsICJhIGIgYyIpCisKKyAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLnV0aWxzLmNvbnRhaW5zKCJTT01FRkxBRyIsICJhIiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYi51dGlscy5jb250YWlucygiU09NRUZMQUciLCAiYiIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIudXRpbHMuY29udGFpbnMoIlNPTUVGTEFHIiwgImMiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIudXRpbHMuY29udGFpbnMoIlNPTUVGTEFHIiwgImEgYiIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIudXRpbHMuY29udGFpbnMoIlNPTUVGTEFHIiwgImIgYyIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIudXRpbHMuY29udGFpbnMoIlNPTUVGTEFHIiwgImMgYSIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYi51dGlscy5jb250YWlucygiU09NRUZMQUciLCAiYSBiIGMiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLnV0aWxzLmNvbnRhaW5zKCJTT01FRkxBRyIsICJjIGIgYSIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYmIudXRpbHMuY29udGFpbnMoIlNPTUVGTEFHIiwgIngiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiYi51dGlscy5jb250YWlucygiU09NRUZMQUciLCAiYSB4IiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYmIudXRpbHMuY29udGFpbnMoIlNPTUVGTEFHIiwgInggYyBiIiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYmIudXRpbHMuY29udGFpbnMoIlNPTUVGTEFHIiwgInggYyBiIGEiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKworICAgIGRlZiB0ZXN0X2NvbnRhaW5zX2FueShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiU09NRUZMQUciLCAiYSIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIudXRpbHMuY29udGFpbnNfYW55KCJTT01FRkxBRyIsICJiIiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYi51dGlscy5jb250YWluc19hbnkoIlNPTUVGTEFHIiwgImMiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIudXRpbHMuY29udGFpbnNfYW55KCJTT01FRkxBRyIsICJhIGIiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiU09NRUZMQUciLCAiYiBjIiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYi51dGlscy5jb250YWluc19hbnkoIlNPTUVGTEFHIiwgImMgYSIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYi51dGlscy5jb250YWluc19hbnkoIlNPTUVGTEFHIiwgImEgeCIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIudXRpbHMuY29udGFpbnNfYW55KCJTT01FRkxBRyIsICJ4IGMiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiU09NRUZMQUciLCAieCIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiU09NRUZMQUciLCAieCB5IHoiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvZmV0Y2gucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL2ZldGNoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNjFmM2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL2ZldGNoLnB5CkBAIC0wLDAgKzEsNzU5IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRlc3RzIGZvciB0aGUgRmV0Y2hlciAoZmV0Y2gyLykKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyIFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBvcworZnJvbSBiYi5mZXRjaDIgaW1wb3J0IFVSSQorZnJvbSBiYi5mZXRjaDIgaW1wb3J0IEZldGNoTWV0aG9kCitpbXBvcnQgYmIKKworY2xhc3MgVVJJVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgdGVzdF91cmlzID0geworICAgICAgICAiaHR0cDovL3d3dy5nb29nbGUuY29tL2luZGV4Lmh0bWwiIDogeworICAgICAgICAgICAgJ3VyaSc6ICdodHRwOi8vd3d3Lmdvb2dsZS5jb20vaW5kZXguaHRtbCcsCisgICAgICAgICAgICAnc2NoZW1lJzogJ2h0dHAnLAorICAgICAgICAgICAgJ2hvc3RuYW1lJzogJ3d3dy5nb29nbGUuY29tJywKKyAgICAgICAgICAgICdwb3J0JzogTm9uZSwKKyAgICAgICAgICAgICdob3N0cG9ydCc6ICd3d3cuZ29vZ2xlLmNvbScsCisgICAgICAgICAgICAncGF0aCc6ICcvaW5kZXguaHRtbCcsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VybmFtZSc6ICcnLAorICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJycsCisgICAgICAgICAgICAncGFyYW1zJzoge30sCisgICAgICAgICAgICAncXVlcnknOiB7fSwKKyAgICAgICAgICAgICdyZWxhdGl2ZSc6IEZhbHNlCisgICAgICAgIH0sCisgICAgICAgICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vaW5kZXguaHRtbDtwYXJhbTE9dmFsdWUxIiA6IHsKKyAgICAgICAgICAgICd1cmknOiAnaHR0cDovL3d3dy5nb29nbGUuY29tL2luZGV4Lmh0bWw7cGFyYW0xPXZhbHVlMScsCisgICAgICAgICAgICAnc2NoZW1lJzogJ2h0dHAnLAorICAgICAgICAgICAgJ2hvc3RuYW1lJzogJ3d3dy5nb29nbGUuY29tJywKKyAgICAgICAgICAgICdwb3J0JzogTm9uZSwKKyAgICAgICAgICAgICdob3N0cG9ydCc6ICd3d3cuZ29vZ2xlLmNvbScsCisgICAgICAgICAgICAncGF0aCc6ICcvaW5kZXguaHRtbCcsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VybmFtZSc6ICcnLAorICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJycsCisgICAgICAgICAgICAncGFyYW1zJzogeworICAgICAgICAgICAgICAgICdwYXJhbTEnOiAndmFsdWUxJworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdxdWVyeSc6IHt9LAorICAgICAgICAgICAgJ3JlbGF0aXZlJzogRmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvaW5kZXguaHRtbD9wYXJhbTE9dmFsdWUxIiA6IHsKKyAgICAgICAgICAgICd1cmknOiAnaHR0cDovL3d3dy5leGFtcGxlLm9yZy9pbmRleC5odG1sP3BhcmFtMT12YWx1ZTEnLAorICAgICAgICAgICAgJ3NjaGVtZSc6ICdodHRwJywKKyAgICAgICAgICAgICdob3N0bmFtZSc6ICd3d3cuZXhhbXBsZS5vcmcnLAorICAgICAgICAgICAgJ3BvcnQnOiBOb25lLAorICAgICAgICAgICAgJ2hvc3Rwb3J0JzogJ3d3dy5leGFtcGxlLm9yZycsCisgICAgICAgICAgICAncGF0aCc6ICcvaW5kZXguaHRtbCcsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VybmFtZSc6ICcnLAorICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJycsCisgICAgICAgICAgICAncGFyYW1zJzoge30sCisgICAgICAgICAgICAncXVlcnknOiB7CisgICAgICAgICAgICAgICAgJ3BhcmFtMSc6ICd2YWx1ZTEnCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ3JlbGF0aXZlJzogRmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvaW5kZXguaHRtbD9xcGFyYW0xPXF2YWx1ZTE7cGFyYW0yPXZhbHVlMiIgOiB7CisgICAgICAgICAgICAndXJpJzogJ2h0dHA6Ly93d3cuZXhhbXBsZS5vcmcvaW5kZXguaHRtbD9xcGFyYW0xPXF2YWx1ZTE7cGFyYW0yPXZhbHVlMicsCisgICAgICAgICAgICAnc2NoZW1lJzogJ2h0dHAnLAorICAgICAgICAgICAgJ2hvc3RuYW1lJzogJ3d3dy5leGFtcGxlLm9yZycsCisgICAgICAgICAgICAncG9ydCc6IE5vbmUsCisgICAgICAgICAgICAnaG9zdHBvcnQnOiAnd3d3LmV4YW1wbGUub3JnJywKKyAgICAgICAgICAgICdwYXRoJzogJy9pbmRleC5odG1sJywKKyAgICAgICAgICAgICd1c2VyaW5mbyc6ICcnLAorICAgICAgICAgICAgJ3VzZXJuYW1lJzogJycsCisgICAgICAgICAgICAncGFzc3dvcmQnOiAnJywKKyAgICAgICAgICAgICdwYXJhbXMnOiB7CisgICAgICAgICAgICAgICAgJ3BhcmFtMic6ICd2YWx1ZTInCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ3F1ZXJ5JzogeworICAgICAgICAgICAgICAgICdxcGFyYW0xJzogJ3F2YWx1ZTEnCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ3JlbGF0aXZlJzogRmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgImh0dHA6Ly93d3cuZXhhbXBsZS5jb206ODA4MC9pbmRleC5odG1sIiA6IHsKKyAgICAgICAgICAgICd1cmknOiAnaHR0cDovL3d3dy5leGFtcGxlLmNvbTo4MDgwL2luZGV4Lmh0bWwnLAorICAgICAgICAgICAgJ3NjaGVtZSc6ICdodHRwJywKKyAgICAgICAgICAgICdob3N0bmFtZSc6ICd3d3cuZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ3BvcnQnOiA4MDgwLAorICAgICAgICAgICAgJ2hvc3Rwb3J0JzogJ3d3dy5leGFtcGxlLmNvbTo4MDgwJywKKyAgICAgICAgICAgICdwYXRoJzogJy9pbmRleC5odG1sJywKKyAgICAgICAgICAgICd1c2VyaW5mbyc6ICcnLAorICAgICAgICAgICAgJ3VzZXJuYW1lJzogJycsCisgICAgICAgICAgICAncGFzc3dvcmQnOiAnJywKKyAgICAgICAgICAgICdwYXJhbXMnOiB7fSwKKyAgICAgICAgICAgICdxdWVyeSc6IHt9LAorICAgICAgICAgICAgJ3JlbGF0aXZlJzogRmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgImN2czovL2Fub25jdnNAY3ZzLmhhbmRoZWxkcy5vcmcvY3ZzO21vZHVsZT1mYW1pbGlhci9kaXN0L2lwa2ciIDogeworICAgICAgICAgICAgJ3VyaSc6ICdjdnM6Ly9hbm9uY3ZzQGN2cy5oYW5kaGVsZHMub3JnL2N2czttb2R1bGU9ZmFtaWxpYXIvZGlzdC9pcGtnJywKKyAgICAgICAgICAgICdzY2hlbWUnOiAnY3ZzJywKKyAgICAgICAgICAgICdob3N0bmFtZSc6ICdjdnMuaGFuZGhlbGRzLm9yZycsCisgICAgICAgICAgICAncG9ydCc6IE5vbmUsCisgICAgICAgICAgICAnaG9zdHBvcnQnOiAnY3ZzLmhhbmRoZWxkcy5vcmcnLAorICAgICAgICAgICAgJ3BhdGgnOiAnL2N2cycsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnYW5vbmN2cycsCisgICAgICAgICAgICAndXNlcm5hbWUnOiAnYW5vbmN2cycsCisgICAgICAgICAgICAncGFzc3dvcmQnOiAnJywKKyAgICAgICAgICAgICdwYXJhbXMnOiB7CisgICAgICAgICAgICAgICAgJ21vZHVsZSc6ICdmYW1pbGlhci9kaXN0L2lwa2cnCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ3F1ZXJ5Jzoge30sCisgICAgICAgICAgICAncmVsYXRpdmUnOiBGYWxzZQorICAgICAgICB9LAorICAgICAgICAiY3ZzOi8vYW5vbmN2czphbm9ueW1vdXNAY3ZzLmhhbmRoZWxkcy5vcmcvY3ZzO3RhZz1WMC05OS04MTttb2R1bGU9ZmFtaWxpYXIvZGlzdC9pcGtnIjogeworICAgICAgICAgICAgJ3VyaSc6ICdjdnM6Ly9hbm9uY3ZzOmFub255bW91c0BjdnMuaGFuZGhlbGRzLm9yZy9jdnM7dGFnPVYwLTk5LTgxO21vZHVsZT1mYW1pbGlhci9kaXN0L2lwa2cnLAorICAgICAgICAgICAgJ3NjaGVtZSc6ICdjdnMnLAorICAgICAgICAgICAgJ2hvc3RuYW1lJzogJ2N2cy5oYW5kaGVsZHMub3JnJywKKyAgICAgICAgICAgICdwb3J0JzogTm9uZSwKKyAgICAgICAgICAgICdob3N0cG9ydCc6ICdjdnMuaGFuZGhlbGRzLm9yZycsCisgICAgICAgICAgICAncGF0aCc6ICcvY3ZzJywKKyAgICAgICAgICAgICd1c2VyaW5mbyc6ICdhbm9uY3ZzOmFub255bW91cycsCisgICAgICAgICAgICAndXNlcm5hbWUnOiAnYW5vbmN2cycsCisgICAgICAgICAgICAncGFzc3dvcmQnOiAnYW5vbnltb3VzJywKKyAgICAgICAgICAgICdwYXJhbXMnOiB7CisgICAgICAgICAgICAgICAgJ3RhZyc6ICdWMC05OS04MScsCisgICAgICAgICAgICAgICAgJ21vZHVsZSc6ICdmYW1pbGlhci9kaXN0L2lwa2cnCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ3F1ZXJ5Jzoge30sCisgICAgICAgICAgICAncmVsYXRpdmUnOiBGYWxzZQorICAgICAgICB9LAorICAgICAgICAiZmlsZTovL2V4YW1wbGUuZGlmZiI6IHsgIyBOT1RFOiBOb3QgUkZDIGNvbXBsaWFudCEKKyAgICAgICAgICAgICd1cmknOiAnZmlsZTpleGFtcGxlLmRpZmYnLAorICAgICAgICAgICAgJ3NjaGVtZSc6ICdmaWxlJywKKyAgICAgICAgICAgICdob3N0bmFtZSc6ICcnLAorICAgICAgICAgICAgJ3BvcnQnOiBOb25lLAorICAgICAgICAgICAgJ2hvc3Rwb3J0JzogJycsCisgICAgICAgICAgICAncGF0aCc6ICdleGFtcGxlLmRpZmYnLAorICAgICAgICAgICAgJ3VzZXJpbmZvJzogJycsCisgICAgICAgICAgICAndXNlcm5hbWUnOiAnJywKKyAgICAgICAgICAgICdwYXNzd29yZCc6ICcnLAorICAgICAgICAgICAgJ3BhcmFtcyc6IHt9LAorICAgICAgICAgICAgJ3F1ZXJ5Jzoge30sCisgICAgICAgICAgICAncmVsYXRpdmUnOiBUcnVlCisgICAgICAgIH0sCisgICAgICAgICJmaWxlOmV4YW1wbGUuZGlmZiI6IHsgIyBOT1RFOiBSRkMgY29tcGxpYW50IHZlcnNpb24gb2YgdGhlIGZvcm1lcgorICAgICAgICAgICAgJ3VyaSc6ICdmaWxlOmV4YW1wbGUuZGlmZicsCisgICAgICAgICAgICAnc2NoZW1lJzogJ2ZpbGUnLAorICAgICAgICAgICAgJ2hvc3RuYW1lJzogJycsCisgICAgICAgICAgICAncG9ydCc6IE5vbmUsCisgICAgICAgICAgICAnaG9zdHBvcnQnOiAnJywKKyAgICAgICAgICAgICdwYXRoJzogJ2V4YW1wbGUuZGlmZicsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VyaW5mbyc6ICcnLAorICAgICAgICAgICAgJ3VzZXJuYW1lJzogJycsCisgICAgICAgICAgICAncGFzc3dvcmQnOiAnJywKKyAgICAgICAgICAgICdwYXJhbXMnOiB7fSwKKyAgICAgICAgICAgICdxdWVyeSc6IHt9LAorICAgICAgICAgICAgJ3JlbGF0aXZlJzogVHJ1ZQorICAgICAgICB9LAorICAgICAgICAiZmlsZTovLy90bXAvZXhhbXBsZS5kaWZmIjogeworICAgICAgICAgICAgJ3VyaSc6ICdmaWxlOi8vL3RtcC9leGFtcGxlLmRpZmYnLAorICAgICAgICAgICAgJ3NjaGVtZSc6ICdmaWxlJywKKyAgICAgICAgICAgICdob3N0bmFtZSc6ICcnLAorICAgICAgICAgICAgJ3BvcnQnOiBOb25lLAorICAgICAgICAgICAgJ2hvc3Rwb3J0JzogJycsCisgICAgICAgICAgICAncGF0aCc6ICcvdG1wL2V4YW1wbGUuZGlmZicsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VyaW5mbyc6ICcnLAorICAgICAgICAgICAgJ3VzZXJuYW1lJzogJycsCisgICAgICAgICAgICAncGFzc3dvcmQnOiAnJywKKyAgICAgICAgICAgICdwYXJhbXMnOiB7fSwKKyAgICAgICAgICAgICdxdWVyeSc6IHt9LAorICAgICAgICAgICAgJ3JlbGF0aXZlJzogRmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgImdpdDovLy9wYXRoL2V4YW1wbGUuZ2l0IjogeworICAgICAgICAgICAgJ3VyaSc6ICdnaXQ6Ly8vcGF0aC9leGFtcGxlLmdpdCcsCisgICAgICAgICAgICAnc2NoZW1lJzogJ2dpdCcsCisgICAgICAgICAgICAnaG9zdG5hbWUnOiAnJywKKyAgICAgICAgICAgICdwb3J0JzogTm9uZSwKKyAgICAgICAgICAgICdob3N0cG9ydCc6ICcnLAorICAgICAgICAgICAgJ3BhdGgnOiAnL3BhdGgvZXhhbXBsZS5naXQnLAorICAgICAgICAgICAgJ3VzZXJpbmZvJzogJycsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VybmFtZSc6ICcnLAorICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJycsCisgICAgICAgICAgICAncGFyYW1zJzoge30sCisgICAgICAgICAgICAncXVlcnknOiB7fSwKKyAgICAgICAgICAgICdyZWxhdGl2ZSc6IEZhbHNlCisgICAgICAgIH0sCisgICAgICAgICJnaXQ6cGF0aC9leGFtcGxlLmdpdCI6IHsKKyAgICAgICAgICAgICd1cmknOiAnZ2l0OnBhdGgvZXhhbXBsZS5naXQnLAorICAgICAgICAgICAgJ3NjaGVtZSc6ICdnaXQnLAorICAgICAgICAgICAgJ2hvc3RuYW1lJzogJycsCisgICAgICAgICAgICAncG9ydCc6IE5vbmUsCisgICAgICAgICAgICAnaG9zdHBvcnQnOiAnJywKKyAgICAgICAgICAgICdwYXRoJzogJ3BhdGgvZXhhbXBsZS5naXQnLAorICAgICAgICAgICAgJ3VzZXJpbmZvJzogJycsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VybmFtZSc6ICcnLAorICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJycsCisgICAgICAgICAgICAncGFyYW1zJzoge30sCisgICAgICAgICAgICAncXVlcnknOiB7fSwKKyAgICAgICAgICAgICdyZWxhdGl2ZSc6IFRydWUKKyAgICAgICAgfSwKKyAgICAgICAgImdpdDovL2V4YW1wbGUubmV0L3BhdGgvZXhhbXBsZS5naXQiOiB7CisgICAgICAgICAgICAndXJpJzogJ2dpdDovL2V4YW1wbGUubmV0L3BhdGgvZXhhbXBsZS5naXQnLAorICAgICAgICAgICAgJ3NjaGVtZSc6ICdnaXQnLAorICAgICAgICAgICAgJ2hvc3RuYW1lJzogJ2V4YW1wbGUubmV0JywKKyAgICAgICAgICAgICdwb3J0JzogTm9uZSwKKyAgICAgICAgICAgICdob3N0cG9ydCc6ICdleGFtcGxlLm5ldCcsCisgICAgICAgICAgICAncGF0aCc6ICcvcGF0aC9leGFtcGxlLmdpdCcsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VyaW5mbyc6ICcnLAorICAgICAgICAgICAgJ3VzZXJuYW1lJzogJycsCisgICAgICAgICAgICAncGFzc3dvcmQnOiAnJywKKyAgICAgICAgICAgICdwYXJhbXMnOiB7fSwKKyAgICAgICAgICAgICdxdWVyeSc6IHt9LAorICAgICAgICAgICAgJ3JlbGF0aXZlJzogRmFsc2UKKyAgICAgICAgfQorICAgIH0KKworICAgIGRlZiB0ZXN0X3VyaShzZWxmKToKKyAgICAgICAgZm9yIHRlc3RfdXJpLCByZWYgaW4gc2VsZi50ZXN0X3VyaXMuaXRlbXMoKToKKyAgICAgICAgICAgIHVyaSA9IFVSSSh0ZXN0X3VyaSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodXJpKSwgcmVmWyd1cmknXSkKKworICAgICAgICAgICAgIyBleHBlY3RlZCBhdHRyaWJ1dGVzCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5zY2hlbWUsIHJlZlsnc2NoZW1lJ10pCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnVzZXJpbmZvLCByZWZbJ3VzZXJpbmZvJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS51c2VybmFtZSwgcmVmWyd1c2VybmFtZSddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkucGFzc3dvcmQsIHJlZlsncGFzc3dvcmQnXSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkuaG9zdG5hbWUsIHJlZlsnaG9zdG5hbWUnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnBvcnQsIHJlZlsncG9ydCddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkuaG9zdHBvcnQsIHJlZlsnaG9zdHBvcnQnXSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkucGF0aCwgcmVmWydwYXRoJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5wYXJhbXMsIHJlZlsncGFyYW1zJ10pCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnJlbGF0aXZlLCByZWZbJ3JlbGF0aXZlJ10pCisKKyAgICBkZWYgdGVzdF9kaWN0KHNlbGYpOgorICAgICAgICBmb3IgdGVzdCBpbiBzZWxmLnRlc3RfdXJpcy52YWx1ZXMoKToKKyAgICAgICAgICAgIHVyaSA9IFVSSSgpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnNjaGVtZSwgJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS51c2VyaW5mbywgJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS51c2VybmFtZSwgJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5wYXNzd29yZCwgJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5ob3N0bmFtZSwgJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5wb3J0LCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkucGF0aCwgJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5wYXJhbXMsIHt9KQorCisKKyAgICAgICAgICAgIHVyaS5zY2hlbWUgPSB0ZXN0WydzY2hlbWUnXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkuc2NoZW1lLCB0ZXN0WydzY2hlbWUnXSkKKworICAgICAgICAgICAgdXJpLnVzZXJpbmZvID0gdGVzdFsndXNlcmluZm8nXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkudXNlcmluZm8sIHRlc3RbJ3VzZXJpbmZvJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS51c2VybmFtZSwgdGVzdFsndXNlcm5hbWUnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnBhc3N3b3JkLCB0ZXN0WydwYXNzd29yZCddKQorCisgICAgICAgICAgICAjIG1ha2Ugc3VyZSBjaGFuZ2luZyB0aGUgdmFsdWVzIGRvZXNuJ3QgZG8gYW55dGhpbmcgdW5leHBlY3RlZAorICAgICAgICAgICAgdXJpLnVzZXJuYW1lID0gJ2NoYW5nZW1lJworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkudXNlcm5hbWUsICdjaGFuZ2VtZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5wYXNzd29yZCwgdGVzdFsncGFzc3dvcmQnXSkKKyAgICAgICAgICAgIHVyaS5wYXNzd29yZCA9ICdpbnNlY3VyZScKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnVzZXJuYW1lLCAnY2hhbmdlbWUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkucGFzc3dvcmQsICdpbnNlY3VyZScpCisKKyAgICAgICAgICAgICMgcmVzZXQgYmFjayBhZnRlciBvdXIgdHJpY2tlcnkKKyAgICAgICAgICAgIHVyaS51c2VyaW5mbyA9IHRlc3RbJ3VzZXJpbmZvJ10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnVzZXJpbmZvLCB0ZXN0Wyd1c2VyaW5mbyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkudXNlcm5hbWUsIHRlc3RbJ3VzZXJuYW1lJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5wYXNzd29yZCwgdGVzdFsncGFzc3dvcmQnXSkKKworICAgICAgICAgICAgdXJpLmhvc3RuYW1lID0gdGVzdFsnaG9zdG5hbWUnXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkuaG9zdG5hbWUsIHRlc3RbJ2hvc3RuYW1lJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5ob3N0cG9ydCwgdGVzdFsnaG9zdG5hbWUnXSkKKworICAgICAgICAgICAgdXJpLnBvcnQgPSB0ZXN0Wydwb3J0J10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnBvcnQsIHRlc3RbJ3BvcnQnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLmhvc3Rwb3J0LCB0ZXN0Wydob3N0cG9ydCddKQorCisgICAgICAgICAgICB1cmkucGF0aCA9IHRlc3RbJ3BhdGgnXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkucGF0aCwgdGVzdFsncGF0aCddKQorCisgICAgICAgICAgICB1cmkucGFyYW1zID0gdGVzdFsncGFyYW1zJ10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnBhcmFtcywgdGVzdFsncGFyYW1zJ10pCisKKyAgICAgICAgICAgIHVyaS5xdWVyeSA9IHRlc3RbJ3F1ZXJ5J10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnF1ZXJ5LCB0ZXN0WydxdWVyeSddKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih1cmkpLCB0ZXN0Wyd1cmknXSkKKworICAgICAgICAgICAgdXJpLnBhcmFtcyA9IHt9CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5wYXJhbXMsIHt9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodXJpKSwgKHN0cih1cmkpLnNwbGl0KCI7IikpWzBdKQorCitjbGFzcyBGZXRjaGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYub3JpZ2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIHNlbGYuZCA9IGJiLmRhdGEuaW5pdCgpCisgICAgICAgIHNlbGYudGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICBzZWxmLmRsZGlyID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgImRvd25sb2FkIikKKyAgICAgICAgb3MubWtkaXIoc2VsZi5kbGRpcikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRExfRElSIiwgc2VsZi5kbGRpcikKKyAgICAgICAgc2VsZi51bnBhY2tkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAidW5wYWNrZWQiKQorICAgICAgICBvcy5ta2RpcihzZWxmLnVucGFja2RpcikKKyAgICAgICAgcGVyc2lzdGRpciA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICJwZXJzaXN0ZGF0YSIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlBFUlNJU1RFTlRfRElSIiwgcGVyc2lzdGRpcikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgb3MuY2hkaXIoc2VsZi5vcmlnZGlyKQorICAgICAgICBiYi51dGlscy5wcnVuZWRpcihzZWxmLnRlbXBkaXIpCisKK2NsYXNzIE1pcnJvclVyaVRlc3QoRmV0Y2hlclRlc3QpOgorCisgICAgcmVwbGFjZXVyaXMgPSB7CisgICAgICAgICgiZ2l0Oi8vZ2l0LmludmFsaWQuaW5mcmFkZWFkLm9yZy9tdGQtdXRpbHMuZ2l0O3RhZz0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIiwgImdpdDovLy4qLy4qIiwgImh0dHA6Ly9zb21ld2hlcmUub3JnL3NvbWVkaXIvIikgCisgICAgICAgICAgICA6ICJodHRwOi8vc29tZXdoZXJlLm9yZy9zb21lZGlyL2dpdDJfZ2l0LmludmFsaWQuaW5mcmFkZWFkLm9yZy5tdGQtdXRpbHMuZ2l0LnRhci5neiIsCisgICAgICAgICgiZ2l0Oi8vZ2l0LmludmFsaWQuaW5mcmFkZWFkLm9yZy9tdGQtdXRpbHMuZ2l0O3RhZz0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIiwgImdpdDovLy4qLyhbXi9dKy8pKihbXi9dKikiLCAiZ2l0Oi8vc29tZXdoZXJlLm9yZy9zb21lZGlyL1xcMjtwcm90b2NvbD1odHRwIikgCisgICAgICAgICAgICA6ICJnaXQ6Ly9zb21ld2hlcmUub3JnL3NvbWVkaXIvbXRkLXV0aWxzLmdpdDt0YWc9MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDtwcm90b2NvbD1odHRwIiwgCisgICAgICAgICgiZ2l0Oi8vZ2l0LmludmFsaWQuaW5mcmFkZWFkLm9yZy9mb28vbXRkLXV0aWxzLmdpdDt0YWc9MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIsICJnaXQ6Ly8uKi8oW14vXSsvKSooW14vXSopIiwgImdpdDovL3NvbWV3aGVyZS5vcmcvc29tZWRpci9cXDI7cHJvdG9jb2w9aHR0cCIpIAorICAgICAgICAgICAgOiAiZ2l0Oi8vc29tZXdoZXJlLm9yZy9zb21lZGlyL210ZC11dGlscy5naXQ7dGFnPTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTA7cHJvdG9jb2w9aHR0cCIsIAorICAgICAgICAoImdpdDovL2dpdC5pbnZhbGlkLmluZnJhZGVhZC5vcmcvZm9vL210ZC11dGlscy5naXQ7dGFnPTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiLCAiZ2l0Oi8vLiovKFteL10rLykqKFteL10qKSIsICJnaXQ6Ly9zb21ld2hlcmUub3JnL1xcMjtwcm90b2NvbD1odHRwIikgCisgICAgICAgICAgICA6ICJnaXQ6Ly9zb21ld2hlcmUub3JnL210ZC11dGlscy5naXQ7dGFnPTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTA7cHJvdG9jb2w9aHR0cCIsIAorICAgICAgICAoImdpdDovL3NvbWVzZXJ2ZXIub3JnL2JpdGJha2U7dGFnPTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiLCAiZ2l0Oi8vc29tZXNlcnZlci5vcmcvYml0YmFrZSIsICJnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlIikKKyAgICAgICAgICAgIDogImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2U7dGFnPTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiLAorICAgICAgICAoImZpbGU6Ly9zc3RhdGUteHl6LnRneiIsICJmaWxlOi8vLioiLCAiZmlsZTovLy9zb21ld2hlcmUvMTIzNC9zc3RhdGUtY2FjaGUiKSAKKyAgICAgICAgICAgIDogImZpbGU6Ly8vc29tZXdoZXJlLzEyMzQvc3N0YXRlLWNhY2hlL3NzdGF0ZS14eXoudGd6IiwKKyAgICAgICAgKCJmaWxlOi8vc3N0YXRlLXh5ei50Z3oiLCAiZmlsZTovLy4qIiwgImZpbGU6Ly8vc29tZXdoZXJlLzEyMzQvc3N0YXRlLWNhY2hlLyIpIAorICAgICAgICAgICAgOiAiZmlsZTovLy9zb21ld2hlcmUvMTIzNC9zc3RhdGUtY2FjaGUvc3N0YXRlLXh5ei50Z3oiLAorICAgICAgICAoImh0dHA6Ly9zb21ld2hlcmUub3JnL3NvbWVkaXIxL3NvbWVkaXIyL3NvbWVmaWxlXzEuMi4zLnRhci5neiIsICJodHRwOi8vLiovLioiLCAiaHR0cDovL3NvbWV3aGVyZTIub3JnL3NvbWVkaXIzIikgCisgICAgICAgICAgICA6ICJodHRwOi8vc29tZXdoZXJlMi5vcmcvc29tZWRpcjMvc29tZWZpbGVfMS4yLjMudGFyLmd6IiwKKyAgICAgICAgKCJodHRwOi8vc29tZXdoZXJlLm9yZy9zb21lZGlyMS9zb21lZmlsZV8xLjIuMy50YXIuZ3oiLCAiaHR0cDovL3NvbWV3aGVyZS5vcmcvc29tZWRpcjEvc29tZWZpbGVfMS4yLjMudGFyLmd6IiwgImh0dHA6Ly9zb21ld2hlcmUyLm9yZy9zb21lZGlyMy9zb21lZmlsZV8xLjIuMy50YXIuZ3oiKSAKKyAgICAgICAgICAgIDogImh0dHA6Ly9zb21ld2hlcmUyLm9yZy9zb21lZGlyMy9zb21lZmlsZV8xLjIuMy50YXIuZ3oiLAorICAgICAgICAoImh0dHA6Ly93d3cuYXBhY2hlLm9yZy9kaXN0L3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjcuMS50YXIuYnoyIiwgImh0dHA6Ly93d3cuYXBhY2hlLm9yZy9kaXN0IiwgImh0dHA6Ly9hcmNoaXZlLmFwYWNoZS5vcmcvZGlzdCIpCisgICAgICAgICAgICA6ICJodHRwOi8vYXJjaGl2ZS5hcGFjaGUub3JnL2Rpc3Qvc3VidmVyc2lvbi9zdWJ2ZXJzaW9uLTEuNy4xLnRhci5iejIiLAorICAgICAgICAoImh0dHA6Ly93d3cuYXBhY2hlLm9yZy9kaXN0L3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjcuMS50YXIuYnoyIiwgImh0dHA6Ly8uKi8uKiIsICJmaWxlOi8vL3NvbWVwYXRoL2Rvd25sb2Fkcy8iKQorICAgICAgICAgICAgOiAiZmlsZTovLy9zb21lcGF0aC9kb3dubG9hZHMvc3VidmVyc2lvbi0xLjcuMS50YXIuYnoyIiwKKyAgICAgICAgKCJnaXQ6Ly9naXQuaW52YWxpZC5pbmZyYWRlYWQub3JnL210ZC11dGlscy5naXQ7dGFnPTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiLCAiZ2l0Oi8vLiovLioiLCAiZ2l0Oi8vc29tZXdoZXJlLm9yZy9zb21lZGlyL0JBU0VOQU1FO3Byb3RvY29sPWh0dHAiKSAKKyAgICAgICAgICAgIDogImdpdDovL3NvbWV3aGVyZS5vcmcvc29tZWRpci9tdGQtdXRpbHMuZ2l0O3RhZz0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwO3Byb3RvY29sPWh0dHAiLCAKKyAgICAgICAgKCJnaXQ6Ly9naXQuaW52YWxpZC5pbmZyYWRlYWQub3JnL2Zvby9tdGQtdXRpbHMuZ2l0O3RhZz0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIiwgImdpdDovLy4qLy4qIiwgImdpdDovL3NvbWV3aGVyZS5vcmcvc29tZWRpci9CQVNFTkFNRTtwcm90b2NvbD1odHRwIikgCisgICAgICAgICAgICA6ICJnaXQ6Ly9zb21ld2hlcmUub3JnL3NvbWVkaXIvbXRkLXV0aWxzLmdpdDt0YWc9MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDtwcm90b2NvbD1odHRwIiwgCisgICAgICAgICgiZ2l0Oi8vZ2l0LmludmFsaWQuaW5mcmFkZWFkLm9yZy9mb28vbXRkLXV0aWxzLmdpdDt0YWc9MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIsICJnaXQ6Ly8uKi8uKiIsICJnaXQ6Ly9zb21ld2hlcmUub3JnL3NvbWVkaXIvTUlSUk9STkFNRTtwcm90b2NvbD1odHRwIikgCisgICAgICAgICAgICA6ICJnaXQ6Ly9zb21ld2hlcmUub3JnL3NvbWVkaXIvZ2l0LmludmFsaWQuaW5mcmFkZWFkLm9yZy5mb28ubXRkLXV0aWxzLmdpdDt0YWc9MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDtwcm90b2NvbD1odHRwIiwgCisKKyAgICAgICAgI1JlbmFtaW5nIGZpbGVzIGRvZXNuJ3Qgd29yaworICAgICAgICAjKCJodHRwOi8vc29tZXdoZXJlLm9yZy9zb21lZGlyMS9zb21lZmlsZV8xLjIuMy50YXIuZ3oiLCAiaHR0cDovL3NvbWV3aGVyZS5vcmcvc29tZWRpcjEvc29tZWZpbGVfMS4yLjMudGFyLmd6IiwgImh0dHA6Ly9zb21ld2hlcmUyLm9yZy9zb21lZGlyMy9zb21lZmlsZV8yLjMuNC50YXIuZ3oiKSA6ICJodHRwOi8vc29tZXdoZXJlMi5vcmcvc29tZWRpcjMvc29tZWZpbGVfMi4zLjQudGFyLmd6IgorICAgICAgICAjKCJmaWxlOi8vc3N0YXRlLXh5ei50Z3oiLCAiZmlsZTovLy4qLy4qIiwgImZpbGU6Ly8vc29tZXdoZXJlLzEyMzQvc3N0YXRlLWNhY2hlIikgOiAiZmlsZTovLy9zb21ld2hlcmUvMTIzNC9zc3RhdGUtY2FjaGUvc3N0YXRlLXh5ei50Z3oiLAorICAgIH0KKworICAgIG1pcnJvcnZhciA9ICJodHRwOi8vLiovLiogZmlsZTovLy9zb21lcGF0aC9kb3dubG9hZHMvIFxuIiBcCisgICAgICAgICAgICAgICAgImdpdDovL3NvbWVzZXJ2ZXIub3JnL2JpdGJha2UgZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSBcbiIgXAorICAgICAgICAgICAgICAgICJodHRwczovLy4qLy4qIGZpbGU6Ly8vc29tZW90aGVycGF0aC9kb3dubG9hZHMvIFxuIiBcCisgICAgICAgICAgICAgICAgImh0dHA6Ly8uKi8uKiBmaWxlOi8vL3NvbWVvdGhlcnBhdGgvZG93bmxvYWRzLyBcbiIKKworICAgIGRlZiB0ZXN0X3VyaXJlcGxhY2Uoc2VsZik6CisgICAgICAgIGZvciBrLCB2IGluIHNlbGYucmVwbGFjZXVyaXMuaXRlbXMoKToKKyAgICAgICAgICAgIHVkID0gYmIuZmV0Y2guRmV0Y2hEYXRhKGtbMF0sIHNlbGYuZCkKKyAgICAgICAgICAgIHVkLnNldHVwX2xvY2FscGF0aChzZWxmLmQpCisgICAgICAgICAgICBtaXJyb3JzID0gYmIuZmV0Y2gyLm1pcnJvcl9mcm9tX3N0cmluZygiJXMgJXMiICUgKGtbMV0sIGtbMl0pKQorICAgICAgICAgICAgbmV3dXJpcywgdWRzID0gYmIuZmV0Y2gyLmJ1aWxkX21pcnJvcnVyaXModWQsIG1pcnJvcnMsIHNlbGYuZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3ZdLCBuZXd1cmlzKQorCisgICAgZGVmIHRlc3RfdXJpbGlzdDEoc2VsZik6CisgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaERhdGEoImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlL2JpdGJha2UtMS4wLnRhci5neiIsIHNlbGYuZCkKKyAgICAgICAgbWlycm9ycyA9IGJiLmZldGNoMi5taXJyb3JfZnJvbV9zdHJpbmcoc2VsZi5taXJyb3J2YXIpCisgICAgICAgIHVyaXMsIHVkcyA9IGJiLmZldGNoMi5idWlsZF9taXJyb3J1cmlzKGZldGNoZXIsIG1pcnJvcnMsIHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmlzLCBbJ2ZpbGU6Ly8vc29tZXBhdGgvZG93bmxvYWRzL2JpdGJha2UtMS4wLnRhci5neicsICdmaWxlOi8vL3NvbWVvdGhlcnBhdGgvZG93bmxvYWRzL2JpdGJha2UtMS4wLnRhci5neiddKQorCisgICAgZGVmIHRlc3RfdXJpbGlzdDIoc2VsZik6CisgICAgICAgICMgQ2F0Y2ggaHR0cHM6Ly8gLT4gZmlsZXM6Ly8gYnVnCisgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaERhdGEoImh0dHBzOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZS9iaXRiYWtlLTEuMC50YXIuZ3oiLCBzZWxmLmQpCisgICAgICAgIG1pcnJvcnMgPSBiYi5mZXRjaDIubWlycm9yX2Zyb21fc3RyaW5nKHNlbGYubWlycm9ydmFyKQorICAgICAgICB1cmlzLCB1ZHMgPSBiYi5mZXRjaDIuYnVpbGRfbWlycm9ydXJpcyhmZXRjaGVyLCBtaXJyb3JzLCBzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpcywgWydmaWxlOi8vL3NvbWVvdGhlcnBhdGgvZG93bmxvYWRzL2JpdGJha2UtMS4wLnRhci5neiddKQorCisgICAgZGVmIHRlc3RfbWlycm9yX29mX21pcnJvcihzZWxmKToKKyAgICAgICAgIyBUZXN0IGlmIG1pcnJvciBvZiBhIG1pcnJvciB3b3JrcworICAgICAgICBtaXJyb3J2YXIgPSBzZWxmLm1pcnJvcnZhciArICIgaHR0cDovLy4qLy4qIGh0dHA6Ly9vdGhlcmRvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL2Rvd25sb2Fkcy8gXG4iCisgICAgICAgIG1pcnJvcnZhciA9IG1pcnJvcnZhciArICIgaHR0cDovL290aGVyZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvLiogaHR0cDovL2Rvd25sb2FkczIueW9jdG9wcm9qZWN0Lm9yZy9kb3dubG9hZHMvIFxuIgorICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2hEYXRhKCJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZS9iaXRiYWtlLTEuMC50YXIuZ3oiLCBzZWxmLmQpCisgICAgICAgIG1pcnJvcnMgPSBiYi5mZXRjaDIubWlycm9yX2Zyb21fc3RyaW5nKG1pcnJvcnZhcikKKyAgICAgICAgdXJpcywgdWRzID0gYmIuZmV0Y2gyLmJ1aWxkX21pcnJvcnVyaXMoZmV0Y2hlciwgbWlycm9ycywgc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaXMsIFsnZmlsZTovLy9zb21lcGF0aC9kb3dubG9hZHMvYml0YmFrZS0xLjAudGFyLmd6JywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxlOi8vL3NvbWVvdGhlcnBhdGgvZG93bmxvYWRzL2JpdGJha2UtMS4wLnRhci5neicsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHR0cDovL290aGVyZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvZG93bmxvYWRzL2JpdGJha2UtMS4wLnRhci5neicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodHRwOi8vZG93bmxvYWRzMi55b2N0b3Byb2plY3Qub3JnL2Rvd25sb2Fkcy9iaXRiYWtlLTEuMC50YXIuZ3onXSkKKworCitjbGFzcyBGZXRjaGVyTG9jYWxUZXN0KEZldGNoZXJUZXN0KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGRlZiB0b3VjaChmbik6CisgICAgICAgICAgICB3aXRoIGZpbGUoZm4sICdhJyk6CisgICAgICAgICAgICAgICAgb3MudXRpbWUoZm4sIE5vbmUpCisKKyAgICAgICAgc3VwZXIoRmV0Y2hlckxvY2FsVGVzdCwgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLmxvY2Fsc3JjZGlyID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ2xvY2Fsc3JjJykKKyAgICAgICAgb3MubWFrZWRpcnMoc2VsZi5sb2NhbHNyY2RpcikKKyAgICAgICAgdG91Y2gob3MucGF0aC5qb2luKHNlbGYubG9jYWxzcmNkaXIsICdhJykpCisgICAgICAgIHRvdWNoKG9zLnBhdGguam9pbihzZWxmLmxvY2Fsc3JjZGlyLCAnYicpKQorICAgICAgICBvcy5tYWtlZGlycyhvcy5wYXRoLmpvaW4oc2VsZi5sb2NhbHNyY2RpciwgJ2RpcicpKQorICAgICAgICB0b3VjaChvcy5wYXRoLmpvaW4oc2VsZi5sb2NhbHNyY2RpciwgJ2RpcicsICdjJykpCisgICAgICAgIHRvdWNoKG9zLnBhdGguam9pbihzZWxmLmxvY2Fsc3JjZGlyLCAnZGlyJywgJ2QnKSkKKyAgICAgICAgb3MubWFrZWRpcnMob3MucGF0aC5qb2luKHNlbGYubG9jYWxzcmNkaXIsICdkaXInLCAnc3ViZGlyJykpCisgICAgICAgIHRvdWNoKG9zLnBhdGguam9pbihzZWxmLmxvY2Fsc3JjZGlyLCAnZGlyJywgJ3N1YmRpcicsICdlJykpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkZJTEVTUEFUSCIsIHNlbGYubG9jYWxzcmNkaXIpCisKKyAgICBkZWYgZmV0Y2hVbnBhY2soc2VsZiwgdXJpcyk6CisgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaCh1cmlzLCBzZWxmLmQpCisgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQorICAgICAgICBmZXRjaGVyLnVucGFjayhzZWxmLnVucGFja2RpcikKKyAgICAgICAgZmxzdCA9IFtdCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNlbGYudW5wYWNrZGlyKToKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGZsc3QuYXBwZW5kKG9zLnBhdGgucmVscGF0aChvcy5wYXRoLmpvaW4ocm9vdCwgZiksIHNlbGYudW5wYWNrZGlyKSkKKyAgICAgICAgZmxzdC5zb3J0KCkKKyAgICAgICAgcmV0dXJuIGZsc3QKKworICAgIGRlZiB0ZXN0X2xvY2FsKHNlbGYpOgorICAgICAgICB0cmVlID0gc2VsZi5mZXRjaFVucGFjayhbJ2ZpbGU6Ly9hJywgJ2ZpbGU6Ly9kaXIvYyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyZWUsIFsnYScsICdkaXIvYyddKQorCisgICAgZGVmIHRlc3RfbG9jYWxfd2lsZGNhcmQoc2VsZik6CisgICAgICAgIHRyZWUgPSBzZWxmLmZldGNoVW5wYWNrKFsnZmlsZTovL2EnLCAnZmlsZTovL2Rpci8qJ10pCisgICAgICAgICMgRklYTUU6IHRoaXMgaXMgYnJva2VuIC0gaXQgc2hvdWxkIHJldHVybiBbJ2EnLCAnZGlyL2MnLCAnZGlyL2QnLCAnZGlyL3N1YmRpci9lJ10KKyAgICAgICAgIyBzZWUgaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3Nob3dfYnVnLmNnaT9pZD02MTI4CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJlZSwgWydhJywgJ2InLCAnZGlyL2MnLCAnZGlyL2QnLCAnZGlyL3N1YmRpci9lJ10pCisKKyAgICBkZWYgdGVzdF9sb2NhbF9kaXIoc2VsZik6CisgICAgICAgIHRyZWUgPSBzZWxmLmZldGNoVW5wYWNrKFsnZmlsZTovL2EnLCAnZmlsZTovL2RpciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyZWUsIFsnYScsICdkaXIvYycsICdkaXIvZCcsICdkaXIvc3ViZGlyL2UnXSkKKworICAgIGRlZiB0ZXN0X2xvY2FsX3N1YmRpcihzZWxmKToKKyAgICAgICAgdHJlZSA9IHNlbGYuZmV0Y2hVbnBhY2soWydmaWxlOi8vZGlyL3N1YmRpciddKQorICAgICAgICAjIEZJWE1FOiB0aGlzIGlzIGJyb2tlbiAtIGl0IHNob3VsZCByZXR1cm4gWydkaXIvc3ViZGlyL2UnXQorICAgICAgICAjIHNlZSBodHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMjkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmVlLCBbJ3N1YmRpci9lJ10pCisKKyAgICBkZWYgdGVzdF9sb2NhbF9zdWJkaXJfZmlsZShzZWxmKToKKyAgICAgICAgdHJlZSA9IHNlbGYuZmV0Y2hVbnBhY2soWydmaWxlOi8vZGlyL3N1YmRpci9lJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJlZSwgWydkaXIvc3ViZGlyL2UnXSkKKworICAgIGRlZiB0ZXN0X2xvY2FsX3N1YmRpcnBhcmFtKHNlbGYpOgorICAgICAgICB0cmVlID0gc2VsZi5mZXRjaFVucGFjayhbJ2ZpbGU6Ly9hO3N1YmRpcj1iYXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmVlLCBbJ2Jhci9hJ10pCisKKyAgICBkZWYgdGVzdF9sb2NhbF9kZWVwc3ViZGlycGFyYW0oc2VsZik6CisgICAgICAgIHRyZWUgPSBzZWxmLmZldGNoVW5wYWNrKFsnZmlsZTovL2Rpci9zdWJkaXIvZTtzdWJkaXI9YmFyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJlZSwgWydiYXIvZGlyL3N1YmRpci9lJ10pCisKK2NsYXNzIEZldGNoZXJOZXR3b3JrVGVzdChGZXRjaGVyVGVzdCk6CisKKyAgICBpZiBvcy5lbnZpcm9uLmdldCgiQkJfU0tJUF9ORVRURVNUUyIpID09ICJ5ZXMiOgorICAgICAgICBwcmludCgiVW5zZXQgQkJfU0tJUF9ORVRURVNUUyB0byBydW4gbmV0d29yayB0ZXN0cyIpCisgICAgZWxzZToKKyAgICAgICAgZGVmIHRlc3RfZmV0Y2goc2VsZik6CisgICAgICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2goWyJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZS9iaXRiYWtlLTEuMC50YXIuZ3oiLCAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UvYml0YmFrZS0xLjEudGFyLmd6Il0sIHNlbGYuZCkKKyAgICAgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmdldHNpemUoc2VsZi5kbGRpciArICIvYml0YmFrZS0xLjAudGFyLmd6IiksIDU3NzQ5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmdldHNpemUoc2VsZi5kbGRpciArICIvYml0YmFrZS0xLjEudGFyLmd6IiksIDU3ODkyKQorICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiQkJfTk9fTkVUV09SSyIsICIxIikKKyAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaChbImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlL2JpdGJha2UtMS4wLnRhci5neiIsICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZS9iaXRiYWtlLTEuMS50YXIuZ3oiXSwgc2VsZi5kKQorICAgICAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisgICAgICAgICAgICBmZXRjaGVyLnVucGFjayhzZWxmLnVucGFja2RpcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9zLmxpc3RkaXIoc2VsZi51bnBhY2tkaXIgKyAiL2JpdGJha2UtMS4wLyIpKSwgOSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9zLmxpc3RkaXIoc2VsZi51bnBhY2tkaXIgKyAiL2JpdGJha2UtMS4xLyIpKSwgOSkKKworICAgICAgICBkZWYgdGVzdF9mZXRjaF9taXJyb3Ioc2VsZik6CisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJNSVJST1JTIiwgImh0dHA6Ly8uKi8uKiBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZSIpCisgICAgICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2goWyJodHRwOi8vaW52YWxpZC55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UvYml0YmFrZS0xLjAudGFyLmd6Il0sIHNlbGYuZCkKKyAgICAgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmdldHNpemUoc2VsZi5kbGRpciArICIvYml0YmFrZS0xLjAudGFyLmd6IiksIDU3NzQ5KQorCisgICAgICAgIGRlZiB0ZXN0X2ZldGNoX21pcnJvcl9vZl9taXJyb3Ioc2VsZik6CisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJNSVJST1JTIiwgImh0dHA6Ly8uKi8uKiBodHRwOi8vaW52YWxpZDIueW9jdG9wcm9qZWN0Lm9yZy8gXG4gaHR0cDovL2ludmFsaWQyLnlvY3RvcHJvamVjdC5vcmcvLiogaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UiKQorICAgICAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoLkZldGNoKFsiaHR0cDovL2ludmFsaWQueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlL2JpdGJha2UtMS4wLnRhci5neiJdLCBzZWxmLmQpCisgICAgICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5nZXRzaXplKHNlbGYuZGxkaXIgKyAiL2JpdGJha2UtMS4wLnRhci5neiIpLCA1Nzc0OSkKKworICAgICAgICBkZWYgdGVzdF9mZXRjaF9maWxlX21pcnJvcl9vZl9taXJyb3Ioc2VsZik6CisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJNSVJST1JTIiwgImh0dHA6Ly8uKi8uKiBmaWxlOi8vL3NvbWUxd2hlcmUvIFxuIGZpbGU6Ly8vc29tZTF3aGVyZS8uKiBmaWxlOi8vc29tZTJ3aGVyZS8gXG4gZmlsZTovL3NvbWUyd2hlcmUvLiogaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UiKQorICAgICAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoLkZldGNoKFsiaHR0cDovL2ludmFsaWQueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlL2JpdGJha2UtMS4wLnRhci5neiJdLCBzZWxmLmQpCisgICAgICAgICAgICBvcy5ta2RpcihzZWxmLmRsZGlyICsgIi9zb21lMndoZXJlIikKKyAgICAgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmdldHNpemUoc2VsZi5kbGRpciArICIvYml0YmFrZS0xLjAudGFyLmd6IiksIDU3NzQ5KQorCisgICAgICAgIGRlZiB0ZXN0X2ZldGNoX3ByZW1pcnJvcihzZWxmKToKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIlBSRU1JUlJPUlMiLCAiaHR0cDovLy4qLy4qIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlIikKKyAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaChbImh0dHA6Ly9pbnZhbGlkLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZS9iaXRiYWtlLTEuMC50YXIuZ3oiXSwgc2VsZi5kKQorICAgICAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguZ2V0c2l6ZShzZWxmLmRsZGlyICsgIi9iaXRiYWtlLTEuMC50YXIuZ3oiKSwgNTc3NDkpCisKKyAgICAgICAgZGVmIGdpdGZldGNoZXIoc2VsZiwgdXJsMSwgdXJsMik6CisgICAgICAgICAgICBkZWYgY2hlY2tyZXZpc2lvbihzZWxmLCBmZXRjaGVyKToKKyAgICAgICAgICAgICAgICBmZXRjaGVyLnVucGFjayhzZWxmLnVucGFja2RpcikKKyAgICAgICAgICAgICAgICByZXZpc2lvbiA9IGJiLnByb2Nlc3MucnVuKCJnaXQgcmV2LXBhcnNlIEhFQUQiLCBzaGVsbD1UcnVlLCBjd2Q9c2VsZi51bnBhY2tkaXIgKyAiL2dpdCIpWzBdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldmlzaW9uLCAiMjcwYTA1YjBiNGJhMDk1OWZlMDYyNGQyYTQ4ODVkN2I3MDQyNmRhNSIpCisKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyIsICIxIikKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIlNSQ1JFViIsICIyNzBhMDViMGI0YmEwOTU5ZmUwNjI0ZDJhNDg4NWQ3YjcwNDI2ZGE1IikKKyAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaChbdXJsMV0sIHNlbGYuZCkKKyAgICAgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQorICAgICAgICAgICAgY2hlY2tyZXZpc2lvbihzZWxmLCBmZXRjaGVyKQorICAgICAgICAgICAgIyBXaXBlIG91dCB0aGUgZGxkaXIgY2xvbmUgYW5kIHRoZSB1bnBhY2tlZCBzb3VyY2UsIHR1cm4gb2ZmIHRoZSBuZXR3b3JrIGFuZCBjaGVjayBtaXJyb3IgdGFyYmFsbCB3b3JrcworICAgICAgICAgICAgYmIudXRpbHMucHJ1bmVkaXIoc2VsZi5kbGRpciArICIvZ2l0Mi8iKQorICAgICAgICAgICAgYmIudXRpbHMucHJ1bmVkaXIoc2VsZi51bnBhY2tkaXIpCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQl9OT19ORVRXT1JLIiwgIjEiKQorICAgICAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoLkZldGNoKFt1cmwyXSwgc2VsZi5kKQorICAgICAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisgICAgICAgICAgICBjaGVja3JldmlzaW9uKHNlbGYsIGZldGNoZXIpCisKKyAgICAgICAgZGVmIHRlc3RfZ2l0ZmV0Y2goc2VsZik6CisgICAgICAgICAgICB1cmwxID0gdXJsMiA9ICJnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlIgorICAgICAgICAgICAgc2VsZi5naXRmZXRjaGVyKHVybDEsIHVybDIpCisKKyAgICAgICAgZGVmIHRlc3RfZ2l0ZmV0Y2hfZ29vZHNyY3JldihzZWxmKToKKyAgICAgICAgICAgICMgU1JDUkVWIGlzIHNldCBidXQgbWF0Y2hlcyByZXY9IHBhcmFtZXRlcgorICAgICAgICAgICAgdXJsMSA9IHVybDIgPSAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZTtyZXY9MjcwYTA1YjBiNGJhMDk1OWZlMDYyNGQyYTQ4ODVkN2I3MDQyNmRhNSIKKyAgICAgICAgICAgIHNlbGYuZ2l0ZmV0Y2hlcih1cmwxLCB1cmwyKQorCisgICAgICAgIGRlZiB0ZXN0X2dpdGZldGNoX2JhZHNyY3JldihzZWxmKToKKyAgICAgICAgICAgICMgU1JDUkVWIGlzIHNldCBidXQgZG9lcyBub3QgbWF0Y2ggcmV2PSBwYXJhbWV0ZXIKKyAgICAgICAgICAgIHVybDEgPSB1cmwyID0gImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2U7cmV2PWRlYWQwNWIwYjRiYTA5NTlmZTA2MjRkMmE0ODg1ZDdiNzA0MjZkYTUiCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhiYi5mZXRjaC5GZXRjaEVycm9yLCBzZWxmLmdpdGZldGNoZXIsIHVybDEsIHVybDIpCisKKyAgICAgICAgZGVmIHRlc3RfZ2l0ZmV0Y2hfdGFnYW5kcmV2KHNlbGYpOgorICAgICAgICAgICAgIyBTUkNSRVYgaXMgc2V0IGJ1dCBkb2VzIG5vdCBtYXRjaCByZXY9IHBhcmFtZXRlcgorICAgICAgICAgICAgdXJsMSA9IHVybDIgPSAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZTtyZXY9MjcwYTA1YjBiNGJhMDk1OWZlMDYyNGQyYTQ4ODVkN2I3MDQyNmRhNTt0YWc9MjcwYTA1YjBiNGJhMDk1OWZlMDYyNGQyYTQ4ODVkN2I3MDQyNmRhNSIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGJiLmZldGNoLkZldGNoRXJyb3IsIHNlbGYuZ2l0ZmV0Y2hlciwgdXJsMSwgdXJsMikKKworICAgICAgICBkZWYgdGVzdF9naXRmZXRjaF9wcmVtaXJyb3Ioc2VsZik6CisgICAgICAgICAgICB1cmwxID0gImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UiCisgICAgICAgICAgICB1cmwyID0gImdpdDovL3NvbWVzZXJ2ZXIub3JnL2JpdGJha2UiCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJQUkVNSVJST1JTIiwgImdpdDovL3NvbWVzZXJ2ZXIub3JnL2JpdGJha2UgZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSBcbiIpCisgICAgICAgICAgICBzZWxmLmdpdGZldGNoZXIodXJsMSwgdXJsMikKKworICAgICAgICBkZWYgdGVzdF9naXRmZXRjaF9wcmVtaXJyb3IyKHNlbGYpOgorICAgICAgICAgICAgdXJsMSA9IHVybDIgPSAiZ2l0Oi8vc29tZXNlcnZlci5vcmcvYml0YmFrZSIKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIlBSRU1JUlJPUlMiLCAiZ2l0Oi8vc29tZXNlcnZlci5vcmcvYml0YmFrZSBnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlIFxuIikKKyAgICAgICAgICAgIHNlbGYuZ2l0ZmV0Y2hlcih1cmwxLCB1cmwyKQorCisgICAgICAgIGRlZiB0ZXN0X2dpdGZldGNoX3ByZW1pcnJvcjMoc2VsZik6CisgICAgICAgICAgICByZWFsdXJsID0gImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UiCisgICAgICAgICAgICBkdW1teXVybCA9ICJnaXQ6Ly9zb21lc2VydmVyLm9yZy9iaXRiYWtlIgorICAgICAgICAgICAgc2VsZi5zb3VyY2VkaXIgPSBzZWxmLnVucGFja2Rpci5yZXBsYWNlKCJ1bnBhY2tlZCIsICJzb3VyY2VtaXJyb3IuZ2l0IikKKyAgICAgICAgICAgIG9zLmNoZGlyKHNlbGYudGVtcGRpcikKKyAgICAgICAgICAgIGJiLnByb2Nlc3MucnVuKCJnaXQgY2xvbmUgJXMgJXMgMj4gL2Rldi9udWxsIiAlIChyZWFsdXJsLCBzZWxmLnNvdXJjZWRpciksIHNoZWxsPVRydWUpCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJQUkVNSVJST1JTIiwgIiVzIGdpdDovLyVzO3Byb3RvY29sPWZpbGUgXG4iICUgKGR1bW15dXJsLCBzZWxmLnNvdXJjZWRpcikpCisgICAgICAgICAgICBzZWxmLmdpdGZldGNoZXIoZHVtbXl1cmwsIGR1bW15dXJsKQorCisgICAgICAgIGRlZiB0ZXN0X2dpdF9zdWJtb2R1bGUoc2VsZik6CisgICAgICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2goWyJnaXRzbTovL2dpdC55b2N0b3Byb2plY3Qub3JnL2dpdC1zdWJtb2R1bGUtdGVzdDtyZXY9ZjEyZTU3ZjJlZGYwYWE1MzRjZjE2MTZmYTk4M2QxNjVhOTJiMDg0MiJdLCBzZWxmLmQpCisgICAgICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKKyAgICAgICAgICAgICMgUHJldmlvdXMgY3dkIGhhcyBiZWVuIGRlbGV0ZWQKKyAgICAgICAgICAgIG9zLmNoZGlyKG9zLnBhdGguZGlybmFtZShzZWxmLnVucGFja2RpcikpCisgICAgICAgICAgICBmZXRjaGVyLnVucGFjayhzZWxmLnVucGFja2RpcikKKworICAgICAgICBkZWYgdGVzdF90cnVzdGVkX25ldHdvcmsoc2VsZik6CisgICAgICAgICAgICAjIEVuc3VyZSB0cnVzdGVkX25ldHdvcmsgcmV0dXJucyBGYWxzZSB3aGVuIHRoZSBob3N0IElTIGluIHRoZSBsaXN0LgorICAgICAgICAgICAgdXJsID0gImdpdDovL1NvbWVzZXJ2ZXIub3JnL2ZvbztyZXY9MSIKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJCX0FMTE9XRURfTkVUV09SS1MiLCAic2VydmVyMS5vcmcgc29tZXNlcnZlci5vcmcgc2VydmVyMi5vcmcgc2VydmVyMy5vcmciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLmZldGNoLnRydXN0ZWRfbmV0d29yayhzZWxmLmQsIHVybCkpCisKKyAgICAgICAgZGVmIHRlc3Rfd2lsZF90cnVzdGVkX25ldHdvcmsoc2VsZik6CisgICAgICAgICAgICAjIEVuc3VyZSB0cnVzdGVkX25ldHdvcmsgcmV0dXJucyB0cnVlIHdoZW4gdGhlICouaG9zdCBJUyBpbiB0aGUgbGlzdC4KKyAgICAgICAgICAgIHVybCA9ICJnaXQ6Ly9Tb21lc2VydmVyLm9yZy9mb287cmV2PTEiCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQl9BTExPV0VEX05FVFdPUktTIiwgInNlcnZlcjEub3JnICouc29tZXNlcnZlci5vcmcgc2VydmVyMi5vcmcgc2VydmVyMy5vcmciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLmZldGNoLnRydXN0ZWRfbmV0d29yayhzZWxmLmQsIHVybCkpCisKKyAgICAgICAgZGVmIHRlc3RfcHJlZml4X3dpbGRfdHJ1c3RlZF9uZXR3b3JrKHNlbGYpOgorICAgICAgICAgICAgIyBFbnN1cmUgdHJ1c3RlZF9uZXR3b3JrIHJldHVybnMgdHJ1ZSB3aGVuIHRoZSBwcmVmaXggbWF0Y2hlcyAqLmhvc3QuCisgICAgICAgICAgICB1cmwgPSAiZ2l0Oi8vZ2l0LlNvbWVzZXJ2ZXIub3JnL2ZvbztyZXY9MSIKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJCX0FMTE9XRURfTkVUV09SS1MiLCAic2VydmVyMS5vcmcgKi5zb21lc2VydmVyLm9yZyBzZXJ2ZXIyLm9yZyBzZXJ2ZXIzLm9yZyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIuZmV0Y2gudHJ1c3RlZF9uZXR3b3JrKHNlbGYuZCwgdXJsKSkKKworICAgICAgICBkZWYgdGVzdF90d29fcHJlZml4X3dpbGRfdHJ1c3RlZF9uZXR3b3JrKHNlbGYpOgorICAgICAgICAgICAgIyBFbnN1cmUgdHJ1c3RlZF9uZXR3b3JrIHJldHVybnMgdHJ1ZSB3aGVuIHRoZSBwcmVmaXggbWF0Y2hlcyAqLmhvc3QuCisgICAgICAgICAgICB1cmwgPSAiZ2l0Oi8vc29tZXRoaW5nLmdpdC5Tb21lc2VydmVyLm9yZy9mb287cmV2PTEiCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQl9BTExPV0VEX05FVFdPUktTIiwgInNlcnZlcjEub3JnICouc29tZXNlcnZlci5vcmcgc2VydmVyMi5vcmcgc2VydmVyMy5vcmciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLmZldGNoLnRydXN0ZWRfbmV0d29yayhzZWxmLmQsIHVybCkpCisKKyAgICAgICAgZGVmIHRlc3RfdW50cnVzdGVkX25ldHdvcmsoc2VsZik6CisgICAgICAgICAgICAjIEVuc3VyZSB0cnVzdGVkX25ldHdvcmsgcmV0dXJucyBGYWxzZSB3aGVuIHRoZSBob3N0IGlzIE5PVCBpbiB0aGUgbGlzdC4KKyAgICAgICAgICAgIHVybCA9ICJnaXQ6Ly9zb21lc2VydmVyLm9yZy9mb287cmV2PTEiCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQl9BTExPV0VEX05FVFdPUktTIiwgInNlcnZlcjEub3JnIHNlcnZlcjIub3JnIHNlcnZlcjMub3JnIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYmIuZmV0Y2gudHJ1c3RlZF9uZXR3b3JrKHNlbGYuZCwgdXJsKSkKKworICAgICAgICBkZWYgdGVzdF93aWxkX3VudHJ1c3RlZF9uZXR3b3JrKHNlbGYpOgorICAgICAgICAgICAgIyBFbnN1cmUgdHJ1c3RlZF9uZXR3b3JrIHJldHVybnMgRmFsc2Ugd2hlbiB0aGUgaG9zdCBpcyBOT1QgaW4gdGhlIGxpc3QuCisgICAgICAgICAgICB1cmwgPSAiZ2l0Oi8vKi5zb21lc2VydmVyLm9yZy9mb287cmV2PTEiCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQl9BTExPV0VEX05FVFdPUktTIiwgInNlcnZlcjEub3JnIHNlcnZlcjIub3JnIHNlcnZlcjMub3JnIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYmIuZmV0Y2gudHJ1c3RlZF9uZXR3b3JrKHNlbGYuZCwgdXJsKSkKKworCitjbGFzcyBVUkxIYW5kbGUodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGF0YXRhYmxlID0geworICAgICAgICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vaW5kZXguaHRtbCIgOiAoJ2h0dHAnLCAnd3d3Lmdvb2dsZS5jb20nLCAnL2luZGV4Lmh0bWwnLCAnJywgJycsIHt9KSwKKyAgICAgICAiY3ZzOi8vYW5vbmN2c0BjdnMuaGFuZGhlbGRzLm9yZy9jdnM7bW9kdWxlPWZhbWlsaWFyL2Rpc3QvaXBrZyIgOiAoJ2N2cycsICdjdnMuaGFuZGhlbGRzLm9yZycsICcvY3ZzJywgJ2Fub25jdnMnLCAnJywgeydtb2R1bGUnOiAnZmFtaWxpYXIvZGlzdC9pcGtnJ30pLAorICAgICAgICJjdnM6Ly9hbm9uY3ZzOmFub255bW91c0BjdnMuaGFuZGhlbGRzLm9yZy9jdnM7dGFnPVYwLTk5LTgxO21vZHVsZT1mYW1pbGlhci9kaXN0L2lwa2ciIDogKCdjdnMnLCAnY3ZzLmhhbmRoZWxkcy5vcmcnLCAnL2N2cycsICdhbm9uY3ZzJywgJ2Fub255bW91cycsIHsndGFnJzogJ1YwLTk5LTgxJywgJ21vZHVsZSc6ICdmYW1pbGlhci9kaXN0L2lwa2cnfSksCisgICAgICAgImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2U7YnJhbmNoPUBmb28iIDogKCdnaXQnLCAnZ2l0Lm9wZW5lbWJlZGRlZC5vcmcnLCAnL2JpdGJha2UnLCAnJywgJycsIHsnYnJhbmNoJzogJ0Bmb28nfSkKKyAgICB9CisKKyAgICBkZWYgdGVzdF9kZWNvZGV1cmwoc2VsZik6CisgICAgICAgIGZvciBrLCB2IGluIHNlbGYuZGF0YXRhYmxlLml0ZW1zKCk6CisgICAgICAgICAgICByZXN1bHQgPSBiYi5mZXRjaC5kZWNvZGV1cmwoaykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCB2KQorCisgICAgZGVmIHRlc3RfZW5jb2RldXJsKHNlbGYpOgorICAgICAgICBmb3IgaywgdiBpbiBzZWxmLmRhdGF0YWJsZS5pdGVtcygpOgorICAgICAgICAgICAgcmVzdWx0ID0gYmIuZmV0Y2guZW5jb2RldXJsKHYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgaykKKworY2xhc3MgRmV0Y2hMYXRlc3RWZXJzaW9uVGVzdChGZXRjaGVyVGVzdCk6CisKKyAgICB0ZXN0X2dpdF91cmlzID0geworICAgICAgICAjIHZlcnNpb24gcGF0dGVybiAiWC5ZLloiCisgICAgICAgICgibXgtMS4wIiwgImdpdDovL2dpdGh1Yi5jb20vY2x1dHRlci1wcm9qZWN0L214LmdpdDticmFuY2g9bXgtMS40IiwgIjliMWRiNmI4MDYwYmQwMGIxMjFhNjkyZjk0MjQwNGEyNGFlMjk2MGYiLCAiIikKKyAgICAgICAgICAgIDogIjEuOTkuNCIsCisgICAgICAgICMgdmVyc2lvbiBwYXR0ZXJuICJ2WC5ZIgorICAgICAgICAoIm10ZC11dGlscyIsICJnaXQ6Ly9naXQuaW5mcmFkZWFkLm9yZy9tdGQtdXRpbHMuZ2l0IiwgImNhMzllYjFkOThlNzM2MTA5YzY0ZmY5YzFhYTJhNmVjY2EyMjJkOGYiLCAiIikKKyAgICAgICAgICAgIDogIjEuNS4wIiwKKyAgICAgICAgIyB2ZXJzaW9uIHBhdHRlcm4gInBrZ19uYW1lLVguWSIKKyAgICAgICAgKCJwcmVzZW50cHJvdG8iLCAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hvcmcvcHJvdG8vcHJlc2VudHByb3RvIiwgIjI0ZjNhNTZlNTQxYjBhOWU2YzZlZTc2MDgxZjQ0MTIyMWExMjBlZjkiLCAiIikKKyAgICAgICAgICAgIDogIjEuMCIsCisgICAgICAgICMgdmVyc2lvbiBwYXR0ZXJuICJwa2dfbmFtZS12WC5ZLloiCisgICAgICAgICgiZHRjIiwgImdpdDovL2dpdC5xZW11Lm9yZy9kdGMuZ2l0IiwgIjY1Y2M0ZDI3NDhhMmMyZTZmMjdmMWNmMzllMDdhNWRiYWJkODBlYmYiLCAiIikKKyAgICAgICAgICAgIDogIjEuNC4wIiwKKyAgICAgICAgIyBjb21iaW5hdGlvbiB2ZXJzaW9uIHBhdHRlcm4KKyAgICAgICAgKCJzeXNwcm9mIiwgImdpdDovL2dpdC5nbm9tZS5vcmcvc3lzcHJvZiIsICJjZDQ0ZWU2NjQ0YzM2NDE1MDdmYjUzYjhhMmE2OTEzN2YyOTcxMjE5IiwgIiIpCisgICAgICAgICAgICA6ICIxLjIuMCIsCisgICAgICAgICgidS1ib290LW1raW1hZ2UiLCAiZ2l0Oi8vZ2l0LmRlbnguZGUvdS1ib290LmdpdDticmFuY2g9bWFzdGVyO3Byb3RvY29sPWdpdCIsICI2MmMxNzVmYmI4YTBmOWE5MjZjODgyOTRlYTlmN2U4OGViODk4ZjZjIiwgIiIpCisgICAgICAgICAgICA6ICIyMDE0LjAxIiwKKyAgICAgICAgIyB2ZXJzaW9uIHBhdHRlcm4gInl5eXltbWRkIgorICAgICAgICAoIm1vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mbyIsICJnaXQ6Ly9naXQuZ25vbWUub3JnL21vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mbyIsICI0ZWQxOWUxMWMyOTc1MTA1YjcxYjk1NjQ0MGFjZGIyNWQ0NmEzNDdkIiwgIiIpCisgICAgICAgICAgICA6ICIyMDEyMDYxNCIsCisgICAgICAgICMgcGFja2FnZXMgd2l0aCBhIHZhbGlkIEdJVFRBR1JFR0VYCisgICAgICAgICgieGY4Ni12aWRlby1vbWFwIiwgImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL3hvcmcvZHJpdmVyL3hmODYtdmlkZW8tb21hcCIsICJhZTAzOTRlNjg3ZjFhNzdlOTY2Y2Y3MmY4OTVkYTkxODQwZGZmYjhmIiwgIig/UDxwdmVyPihcZCtcLihcZFwuPykqKSkiKQorICAgICAgICAgICAgOiAiMC40LjMiLAorICAgICAgICAoImJ1aWxkLWFwcGxpYW5jZS1pbWFnZSIsICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5IiwgImIzN2RkNDUxYTUyNjIyZDViNTcwMTgzYTgxNTgzY2MzNGMyZmY1NTUiLCAiKD9QPHB2ZXI+KChbMC05XVtcLnxfXT8pK1swLTldKSkiKQorICAgICAgICAgICAgOiAiMTEuMC4wIiwKKyAgICAgICAgKCJjaGtjb25maWctYWx0ZXJuYXRpdmVzLW5hdGl2ZSIsICJnaXQ6Ly9naXRodWIuY29tL2tlcmdvdGgvY2hrY29uZmlnO2JyYW5jaD1zeXNyb290IiwgImNkNDM3ZWNiZDg5ODZjODk0NDQyZjhmY2UxZTAwNjFlMjBmMDRkZWUiLCAiY2hrY29uZmlnXC0oP1A8cHZlcj4oKFxkK1tcLlwtX10qKSspKSIpCisgICAgICAgICAgICA6ICIxLjMuNTkiLAorICAgICAgICAoInJlbWFrZSIsICJnaXQ6Ly9naXRodWIuY29tL3JvY2t5L3JlbWFrZS5naXQiLCAiZjA1NTA4ZTUyMTk4N2M4NDk0YzkyZDljMjg3MWFlYzQ2MzA3ZDUxZCIsICIoP1A8cHZlcj4oXGQrXC4oXGQrXC4pKlxkKihcK2RiZ1xkKyhcLlxkKykqKSopKSIpCisgICAgICAgICAgICA6ICIzLjgyK2RiZzAuOSIsCisgICAgfQorCisgICAgdGVzdF93Z2V0X3VyaXMgPSB7CisgICAgICAgICMgcGFja2FnZXMgd2l0aCB2ZXJzaW9ucyBpbnNpZGUgZGlyZWN0b3J5IG5hbWUKKyAgICAgICAgKCJ1dGlsLWxpbnV4IiwgImh0dHA6Ly9rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy91dGlsLWxpbnV4L3YyLjIzL3V0aWwtbGludXgtMi4yNC4yLnRhci5iejIiLCAiIiwgIiIpCisgICAgICAgICAgICA6ICIyLjI0LjIiLAorICAgICAgICAoImVuY2hhbnQiLCAiaHR0cDovL3d3dy5hYmlzb3VyY2UuY29tL2Rvd25sb2Fkcy9lbmNoYW50LzEuNi4wL2VuY2hhbnQtMS42LjAudGFyLmd6IiwgIiIsICIiKQorICAgICAgICAgICAgOiAiMS42LjAiLAorICAgICAgICAoImNtYWtlIiwgImh0dHA6Ly93d3cuY21ha2Uub3JnL2ZpbGVzL3YyLjgvY21ha2UtMi44LjEyLjEudGFyLmd6IiwgIiIsICIiKQorICAgICAgICAgICAgOiAiMi44LjEyLjEiLAorICAgICAgICAjIHBhY2thZ2VzIHdpdGggdmVyc2lvbnMgb25seSBpbiBjdXJyZW50IGRpcmVjdG9yeQorICAgICAgICAoImVnbGljIiwgImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9lZ2xpYmMvZWdsaWJjLTIuMTgtc3ZucjIzNzg3LnRhci5iejIiLCAiIiwgIiIpCisgICAgICAgICAgICA6ICIyLjE5IiwKKyAgICAgICAgKCJnbnUtY29uZmlnIiwgImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9nbnUtY29uZmlnL2dudS1jb25maWctMjAxMjA4MTQudGFyLmJ6MiIsICIiLCAiIikKKyAgICAgICAgICAgIDogIjIwMTIwODE0IiwKKyAgICAgICAgIyBwYWNrYWdlcyB3aXRoICI5OSIgaW4gdGhlIG5hbWUgb2YgcG9zc2libGUgdmVyc2lvbgorICAgICAgICAoInB1bHNlYXVkaW8iLCAiaHR0cDovL2ZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9wdWxzZWF1ZGlvL3JlbGVhc2VzL3B1bHNlYXVkaW8tNC4wLnRhci54eiIsICIiLCAiIikKKyAgICAgICAgICAgIDogIjUuMCIsCisgICAgICAgICgieHNlcnZlci14b3JnIiwgImh0dHA6Ly94b3JnLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy9pbmRpdmlkdWFsL3hzZXJ2ZXIveG9yZy1zZXJ2ZXItMS4xNS4xLnRhci5iejIiLCAiIiwgIiIpCisgICAgICAgICAgICA6ICIxLjE1LjEiLAorICAgICAgICAjIHBhY2thZ2VzIHdpdGggdmFsaWQgUkVHRVhfVVJJIGFuZCBSRUdFWAorICAgICAgICAoImN1cHMiLCAiaHR0cDovL3d3dy5jdXBzLm9yZy9zb2Z0d2FyZS8xLjcuMi9jdXBzLTEuNy4yLXNvdXJjZS50YXIuYnoyIiwgImh0dHA6Ly93d3cuY3Vwcy5vcmcvc29mdHdhcmUucGhwIiwgIig/UDxuYW1lPmN1cHNcLSkoP1A8cHZlcj4oKFxkK1tcLlwtX10qKSspKVwtc291cmNlXC50YXJcLmd6IikKKyAgICAgICAgICAgIDogIjIuMC4wIiwKKyAgICAgICAgKCJkYiIsICJodHRwOi8vZG93bmxvYWQub3JhY2xlLmNvbS9iZXJrZWxleS1kYi9kYi01LjMuMjEudGFyLmd6IiwgImh0dHA6Ly93d3cub3JhY2xlLmNvbS90ZWNobmV0d29yay9wcm9kdWN0cy9iZXJrZWxleWRiL2Rvd25sb2Fkcy9pbmRleC0wODI5NDQuaHRtbCIsICJodHRwOi8vZG93bmxvYWQub3JhY2xlLmNvbS9vdG4vYmVya2VsZXktZGIvKD9QPG5hbWU+ZGItKSg/UDxwdmVyPigoXGQrW1wuXC1fXSopKykpXC50YXJcLmd6IikKKyAgICAgICAgICAgIDogIjYuMS4xOSIsCisgICAgfQorICAgIGlmIG9zLmVudmlyb24uZ2V0KCJCQl9TS0lQX05FVFRFU1RTIikgPT0gInllcyI6CisgICAgICAgIHByaW50KCJVbnNldCBCQl9TS0lQX05FVFRFU1RTIHRvIHJ1biBuZXR3b3JrIHRlc3RzIikKKyAgICBlbHNlOgorICAgICAgICBkZWYgdGVzdF9naXRfbGF0ZXN0X3ZlcnNpb25zdHJpbmcoc2VsZik6CisgICAgICAgICAgICBmb3IgaywgdiBpbiBzZWxmLnRlc3RfZ2l0X3VyaXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJQTiIsIGtbMF0pCisgICAgICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiU1JDUkVWIiwga1syXSkKKyAgICAgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJHSVRUQUdSRUdFWCIsIGtbM10pCisgICAgICAgICAgICAgICAgdWQgPSBiYi5mZXRjaDIuRmV0Y2hEYXRhKGtbMV0sIHNlbGYuZCkKKyAgICAgICAgICAgICAgICBwdXB2ZXI9IHVkLm1ldGhvZC5sYXRlc3RfdmVyc2lvbnN0cmluZyh1ZCwgc2VsZi5kKQorICAgICAgICAgICAgICAgIHZlcnN0cmluZyA9IHB1cHZlclswXQorICAgICAgICAgICAgICAgIHIgPSBiYi51dGlscy52ZXJjbXBfc3RyaW5nKHYsIHZlcnN0cmluZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUociA9PSAtMSBvciByID09IDAsIG1zZz0iUGFja2FnZSAlcywgdmVyc2lvbjogJXMgPD0gJXMiICUgKGtbMF0sIHYsIHZlcnN0cmluZykpCisKKyAgICAgICAgZGVmIHRlc3Rfd2dldF9sYXRlc3RfdmVyc2lvbnN0cmluZyhzZWxmKToKKyAgICAgICAgICAgIGZvciBrLCB2IGluIHNlbGYudGVzdF93Z2V0X3VyaXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJQTiIsIGtbMF0pCisgICAgICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiUkVHRVhfVVJJIiwga1syXSkKKyAgICAgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJSRUdFWCIsIGtbM10pCisgICAgICAgICAgICAgICAgdWQgPSBiYi5mZXRjaDIuRmV0Y2hEYXRhKGtbMV0sIHNlbGYuZCkKKyAgICAgICAgICAgICAgICBwdXB2ZXIgPSB1ZC5tZXRob2QubGF0ZXN0X3ZlcnNpb25zdHJpbmcodWQsIHNlbGYuZCkKKyAgICAgICAgICAgICAgICB2ZXJzdHJpbmcgPSBwdXB2ZXJbMF0KKyAgICAgICAgICAgICAgICByID0gYmIudXRpbHMudmVyY21wX3N0cmluZyh2LCB2ZXJzdHJpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIgPT0gLTEgb3IgciA9PSAwLCBtc2c9IlBhY2thZ2UgJXMsIHZlcnNpb246ICVzIDw9ICVzIiAlIChrWzBdLCB2LCB2ZXJzdHJpbmcpKQorCisKK2NsYXNzIEZldGNoQ2hlY2tTdGF0dXNUZXN0KEZldGNoZXJUZXN0KToKKyAgICB0ZXN0X3dnZXRfdXJpcyA9IFsiaHR0cDovL3d3dy5jdXBzLm9yZy9zb2Z0d2FyZS8xLjcuMi9jdXBzLTEuNy4yLXNvdXJjZS50YXIuYnoyIiwKKyAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5jdXBzLm9yZy9zb2Z0d2FyZS9pcHB0b29sL2lwcHRvb2wtMjAxMzA3MzEtbGludXgtdWJ1bnR1LWk2ODYudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5jdXBzLm9yZy8iLAorICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvc2F0by9zYXRvLWVuZ2luZS0wLjEudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL3NhdG8vc2F0by1lbmdpbmUtMC4yLnRhci5neiIsCisgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9zYXRvL3NhdG8tZW5naW5lLTAuMy50YXIuZ3oiLAorICAgICAgICAgICAgICAgICAgICAgICJodHRwczovL3lvY3RvcHJvamVjdC5vcmcvIiwKKyAgICAgICAgICAgICAgICAgICAgICAiaHR0cHM6Ly95b2N0b3Byb2plY3Qub3JnL2RvY3VtZW50YXRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvb3BrZy9vcGtnLTAuMS43LnRhci5neiIsCisgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9vcGtnL29wa2ctMC4zLjAudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAiZnRwOi8vZnRwLmdudS5vcmcvZ251L2F1dG9jb25mL2F1dG9jb25mLTIuNjAudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAiZnRwOi8vZnRwLmdudS5vcmcvZ251L2NoZXNzL2dudWNoZXNzLTUuMDgudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAiZnRwOi8vZnRwLmdudS5vcmcvZ251L2dtcC9nbXAtNC4wLnRhci5neiIsCisgICAgICAgICAgICAgICAgICAgICAgXQorCisgICAgaWYgb3MuZW52aXJvbi5nZXQoIkJCX1NLSVBfTkVUVEVTVFMiKSA9PSAieWVzIjoKKyAgICAgICAgcHJpbnQoIlVuc2V0IEJCX1NLSVBfTkVUVEVTVFMgdG8gcnVuIG5ldHdvcmsgdGVzdHMiKQorICAgIGVsc2U6CisKKyAgICAgICAgZGVmIHRlc3Rfd2dldF9jaGVja3N0YXR1cyhzZWxmKToKKyAgICAgICAgICAgIGZldGNoID0gYmIuZmV0Y2gyLkZldGNoKHNlbGYudGVzdF93Z2V0X3VyaXMsIHNlbGYuZCkKKyAgICAgICAgICAgIGZvciB1IGluIHNlbGYudGVzdF93Z2V0X3VyaXM6CisgICAgICAgICAgICAgICAgdWQgPSBmZXRjaC51ZFt1XQorICAgICAgICAgICAgICAgIG0gPSB1ZC5tZXRob2QKKyAgICAgICAgICAgICAgICByZXQgPSBtLmNoZWNrc3RhdHVzKGZldGNoLCB1ZCwgc2VsZi5kKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXQsIG1zZz0iVVJJICVzLCBjYW4ndCBjaGVjayBzdGF0dXMiICUgKHUpKQorCisKKyAgICAgICAgZGVmIHRlc3Rfd2dldF9jaGVja3N0YXR1c19jb25uZWN0aW9uX2NhY2hlKHNlbGYpOgorICAgICAgICAgICAgZnJvbSBiYi5mZXRjaDIgaW1wb3J0IEZldGNoQ29ubmVjdGlvbkNhY2hlCisKKyAgICAgICAgICAgIGNvbm5lY3Rpb25fY2FjaGUgPSBGZXRjaENvbm5lY3Rpb25DYWNoZSgpCisgICAgICAgICAgICBmZXRjaCA9IGJiLmZldGNoMi5GZXRjaChzZWxmLnRlc3Rfd2dldF91cmlzLCBzZWxmLmQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uX2NhY2hlID0gY29ubmVjdGlvbl9jYWNoZSkKKworICAgICAgICAgICAgZm9yIHUgaW4gc2VsZi50ZXN0X3dnZXRfdXJpczoKKyAgICAgICAgICAgICAgICB1ZCA9IGZldGNoLnVkW3VdCisgICAgICAgICAgICAgICAgbSA9IHVkLm1ldGhvZAorICAgICAgICAgICAgICAgIHJldCA9IG0uY2hlY2tzdGF0dXMoZmV0Y2gsIHVkLCBzZWxmLmQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJldCwgbXNnPSJVUkkgJXMsIGNhbid0IGNoZWNrIHN0YXR1cyIgJSAodSkpCisKKyAgICAgICAgICAgIGNvbm5lY3Rpb25fY2FjaGUuY2xvc2VfY29ubmVjdGlvbnMoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy9wYXJzZS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvcGFyc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJlYjc2YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvcGFyc2UucHkKQEAgLTAsMCArMSwxNDcgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIEJpdEJha2UgVGVzdCBmb3IgbGliL2JiL3BhcnNlLworIworIyBDb3B5cmlnaHQgKEMpIDIwMTUgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGJiCitpbXBvcnQgb3MKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ0JpdEJha2UuVGVzdFBhcnNlJykKKworaW1wb3J0IGJiLnBhcnNlCitpbXBvcnQgYmIuZGF0YQoraW1wb3J0IGJiLnNpZ2dlbgorCitjbGFzcyBQYXJzZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgdGVzdGZpbGUgPSAiIiIKK0EgPSAiMSIKK0IgPSAiMiIKK2RvX2luc3RhbGwoKSB7CisJZWNobyAiaGVsbG8iCit9CisKK0MgPSAiMyIKKyIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmQgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBiYi5wYXJzZS5zaWdnZW4gPSBiYi5zaWdnZW4uaW5pdChzZWxmLmQpCisKKyAgICBkZWYgcGFyc2VoZWxwZXIoc2VsZiwgY29udGVudCwgc3VmZml4ID0gIi5iYiIpOgorCisgICAgICAgIGYgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoc3VmZml4ID0gc3VmZml4KQorICAgICAgICBmLndyaXRlKGNvbnRlbnQpCisgICAgICAgIGYuZmx1c2goKQorICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmRpcm5hbWUoZi5uYW1lKSkKKyAgICAgICAgcmV0dXJuIGYKKworICAgIGRlZiB0ZXN0X3BhcnNlX3NpbXBsZShzZWxmKToKKyAgICAgICAgZiA9IHNlbGYucGFyc2VoZWxwZXIoc2VsZi50ZXN0ZmlsZSkKKyAgICAgICAgZCA9IGJiLnBhcnNlLmhhbmRsZShmLm5hbWUsIHNlbGYuZClbJyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXRWYXIoIkEiLCBUcnVlKSwgIjEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyKCJCIiwgVHJ1ZSksICIyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldFZhcigiQyIsIFRydWUpLCAiMyIpCisKKyAgICBkZWYgdGVzdF9wYXJzZV9pbmNvbXBsZXRlX2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICB0ZXN0ZmlsZUIgPSBzZWxmLnRlc3RmaWxlLnJlcGxhY2UoIn0iLCAiIikKKyAgICAgICAgZiA9IHNlbGYucGFyc2VoZWxwZXIodGVzdGZpbGVCKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGJiLnBhcnNlLlBhcnNlRXJyb3IpOgorICAgICAgICAgICAgZCA9IGJiLnBhcnNlLmhhbmRsZShmLm5hbWUsIHNlbGYuZClbJyddCisKKyAgICBvdmVycmlkZXRlc3QgPSAiIiIKK1JSRUNPTU1FTkRTXyR7UE59ID0gImEiCitSUkVDT01NRU5EU18ke1BOfV9saWJjID0gImIiCitPVkVSUklERVMgPSAibGliYzoke1BOfSIKK1BOID0gImd0aysiCisiIiIKKworICAgIGRlZiB0ZXN0X3BhcnNlX292ZXJyaWRlcyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYucGFyc2VoZWxwZXIoc2VsZi5vdmVycmlkZXRlc3QpCisgICAgICAgIGQgPSBiYi5wYXJzZS5oYW5kbGUoZi5uYW1lLCBzZWxmLmQpWycnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyKCJSUkVDT01NRU5EUyIsIFRydWUpLCAiYiIpCisgICAgICAgIGJiLmRhdGEuZXhwYW5kS2V5cyhkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyKCJSUkVDT01NRU5EUyIsIFRydWUpLCAiYiIpCisgICAgICAgIGQuc2V0VmFyKCJSUkVDT01NRU5EU19ndGsrIiwgImMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyKCJSUkVDT01NRU5EUyIsIFRydWUpLCAiYyIpCisKKyAgICBvdmVycmlkZXRlc3QyID0gIiIiCitFWFRSQV9PRUNPTkYgPSAiIgorRVhUUkFfT0VDT05GX2NsYXNzLXRhcmdldCA9ICJiIgorRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgYyIKKyIiIgorCisgICAgZGVmIHRlc3RfcGFyc2Vfb3ZlcnJpZGVzKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5wYXJzZWhlbHBlcihzZWxmLm92ZXJyaWRldGVzdDIpCisgICAgICAgIGQgPSBiYi5wYXJzZS5oYW5kbGUoZi5uYW1lLCBzZWxmLmQpWycnXQorICAgICAgICBkLmFwcGVuZFZhcigiRVhUUkFfT0VDT05GIiwgIiBkIikKKyAgICAgICAgZC5zZXRWYXIoIk9WRVJSSURFUyIsICJjbGFzcy10YXJnZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyKCJFWFRSQV9PRUNPTkYiLCBUcnVlKSwgImIgYyBkIikKKworICAgIG92ZXJyaWRldGVzdDMgPSAiIiIKK0RFU0NSSVBUSU9OID0gIkEiCitERVNDUklQVElPTl8ke1BOfS1kZXYgPSAiJHtERVNDUklQVElPTn0gQiIKK1BOID0gImJjIgorIiIiCisKKyAgICBkZWYgdGVzdF9wYXJzZV9jb21iaW5hdGlvbnMoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLnBhcnNlaGVscGVyKHNlbGYub3ZlcnJpZGV0ZXN0MykKKyAgICAgICAgZCA9IGJiLnBhcnNlLmhhbmRsZShmLm5hbWUsIHNlbGYuZClbJyddCisgICAgICAgIGJiLmRhdGEuZXhwYW5kS2V5cyhkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyKCJERVNDUklQVElPTl9iYy1kZXYiLCBUcnVlKSwgIkEgQiIpCisgICAgICAgIGQuc2V0VmFyKCJERVNDUklQVElPTiIsICJFIikKKyAgICAgICAgZC5zZXRWYXIoIkRFU0NSSVBUSU9OX2JjLWRldiIsICJDIEQiKQorICAgICAgICBkLnNldFZhcigiT1ZFUlJJREVTIiwgImJjLWRldiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXRWYXIoIkRFU0NSSVBUSU9OIiwgVHJ1ZSksICJDIEQiKQorCisKKyAgICBjbGFzc2V4dGVuZCA9ICIiIgorVkFSX3Zhcl9vdmVycmlkZTEgPSAiQiIKK0VYVFJBID0gIjpvdmVycmlkZTEiCitPVkVSUklERVMgPSAibm90aGluZyR7RVhUUkF9IgorCitCQkNMQVNTRVhURU5EID0gIiMjI0NMQVNTIyMjIgorIiIiCisgICAgY2xhc3NleHRlbmRfYmJjbGFzcyA9ICIiIgorRVhUUkEgPSAiIgorcHl0aG9uICgpIHsKKyAgICBkLnJlbmFtZVZhcigiVkFSX3ZhciIsICJWQVJfdmFyMiIpCit9CisiIiIKKworICAgICMKKyAgICAjIFRlc3QgYmFzZWQgdXBvbiBhIHJlYWwgd29ybGQgZGF0YSBjb3JydXB0aW9uIGlzc3VlLiBPbmUKKyAgICAjIGRhdGEgc3RvcmUgY2hhbmdpbmcgYSB2YXJpYWJsZSBwb2tlZCB0aHJvdWdoIGludG8gYSBkaWZmZXJlbnQgZGF0YQorICAgICMgc3RvcmUuIFRoaXMgdGVzdCBjYXNlIHJlcGxpY2F0ZXMgdGhhdCBpc3N1ZSB3aGVyZSB0aGUgdmFsdWUgJ0InIHdvdWxkIAorICAgICMgYmVjb21lIHVuc2V0L2Rpc2FwcGVhci4KKyAgICAjCisgICAgZGVmIHRlc3RfcGFyc2VfY2xhc3NleHRlbmRfY29udGFtaW5hdGlvbihzZWxmKToKKyAgICAgICAgY2xzID0gc2VsZi5wYXJzZWhlbHBlcihzZWxmLmNsYXNzZXh0ZW5kX2JiY2xhc3MsIHN1ZmZpeD0iLmJiY2xhc3MiKQorICAgICAgICAjY2xzbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoY2xzLm5hbWUpLnJlcGxhY2UoIi5iYmNsYXNzIiwgIiIpCisgICAgICAgIHNlbGYuY2xhc3NleHRlbmQgPSBzZWxmLmNsYXNzZXh0ZW5kLnJlcGxhY2UoIiMjI0NMQVNTIyMjIiwgY2xzLm5hbWUpCisgICAgICAgIGYgPSBzZWxmLnBhcnNlaGVscGVyKHNlbGYuY2xhc3NleHRlbmQpCisgICAgICAgIGFsbGRhdGEgPSBiYi5wYXJzZS5oYW5kbGUoZi5uYW1lLCBzZWxmLmQpCisgICAgICAgIGQxID0gYWxsZGF0YVsnJ10KKyAgICAgICAgZDIgPSBhbGxkYXRhW2Nscy5uYW1lXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLmdldFZhcigiVkFSX3ZhciIsIFRydWUpLCAiQiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIuZ2V0VmFyKCJWQVJfdmFyIiwgVHJ1ZSksIE5vbmUpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvdXRpbHMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNzE1MDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL3V0aWxzLnB5CkBAIC0wLDAgKzEsMzc4IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRlc3RzIGZvciB1dGlscy5weQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGJiCitpbXBvcnQgb3MKK2ltcG9ydCB0ZW1wZmlsZQorCitjbGFzcyBWZXJDbXBTdHJpbmcodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdmVyY21wc3RyaW5nKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBiYi51dGlscy52ZXJjbXBfc3RyaW5nKCcxJywgJzInKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0IDwgMCkKKyAgICAgICAgcmVzdWx0ID0gYmIudXRpbHMudmVyY21wX3N0cmluZygnMicsICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCA+IDApCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLnZlcmNtcF9zdHJpbmcoJzEnLCAnMS4wJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCA8IDApCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLnZlcmNtcF9zdHJpbmcoJzEnLCAnMS4xJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCA8IDApCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLnZlcmNtcF9zdHJpbmcoJzEuMScsICcxX3AyJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCA8IDApCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLnZlcmNtcF9zdHJpbmcoJzEuMCcsICcxLjArMS4xLWJldGExJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCA8IDApCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLnZlcmNtcF9zdHJpbmcoJzEuMScsICcxLjArMS4xLWJldGExJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCA+IDApCisKKyAgICBkZWYgdGVzdF9leHBsb2RlX2RlcF92ZXJzaW9ucyhzZWxmKToKKyAgICAgICAgY29ycmVjdHJlc3VsdCA9IHsiZm9vIiA6IFsiPSAxLjEwIl19CisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMigiZm9vICg9IDEuMTApIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGNvcnJlY3RyZXN1bHQpCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMigiZm9vICg9MS4xMCkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgY29ycmVjdHJlc3VsdCkKKyAgICAgICAgcmVzdWx0ID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKCJmb28gKCA9IDEuMTApIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGNvcnJlY3RyZXN1bHQpCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMigiZm9vICggPTEuMTApIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGNvcnJlY3RyZXN1bHQpCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMigiZm9vICggPSAxLjEwICkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgY29ycmVjdHJlc3VsdCkKKyAgICAgICAgcmVzdWx0ID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKCJmb28gKCA9MS4xMCApIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGNvcnJlY3RyZXN1bHQpCisKKyAgICBkZWYgdGVzdF92ZXJjbXBfc3RyaW5nX29wKHNlbGYpOgorICAgICAgICBjb21wYXJlb3BzID0gWygnMScsICcxJywgJz0nLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzEnLCAnMScsICc9PScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICgnMScsICcxJywgJyE9JywgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICgnMScsICcxJywgJz4nLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcxJywgJzEnLCAnPCcsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzEnLCAnMScsICc+PScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICgnMScsICcxJywgJzw9JywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcxJywgJzAnLCAnPScsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzEnLCAnMCcsICc9PScsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzEnLCAnMCcsICchPScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICgnMScsICcwJywgJz4nLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzEnLCAnMCcsICc8JywgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICgnMScsICcwJywgJz4+JywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcxJywgJzAnLCAnPDwnLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcxJywgJzAnLCAnPj0nLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzEnLCAnMCcsICc8PScsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzAnLCAnMScsICc9JywgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICgnMCcsICcxJywgJz09JywgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICgnMCcsICcxJywgJyE9JywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcwJywgJzEnLCAnPicsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzAnLCAnMScsICc8JywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcwJywgJzEnLCAnPj4nLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcwJywgJzEnLCAnPDwnLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzAnLCAnMScsICc+PScsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzAnLCAnMScsICc8PScsIFRydWUpXQorCisgICAgICAgIGZvciBhcmcxLCBhcmcyLCBvcCwgY29ycmVjdHJlc3VsdCBpbiBjb21wYXJlb3BzOgorICAgICAgICAgICAgcmVzdWx0ID0gYmIudXRpbHMudmVyY21wX3N0cmluZ19vcChhcmcxLCBhcmcyLCBvcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBjb3JyZWN0cmVzdWx0LCAndmVyY21wX3N0cmluZ19vcCgiJXMiLCAiJXMiLCAiJXMiKSAhPSAlcycgJSAoYXJnMSwgYXJnMiwgb3AsIGNvcnJlY3RyZXN1bHQpKQorCisgICAgICAgICMgQ2hlY2sgdGhhdCBjbGVhcmx5IGludmFsaWQgb3BlcmF0b3IgcmFpc2VzIGFuIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhiYi51dGlscy5WZXJzaW9uU3RyaW5nRXhjZXB0aW9uLCBiYi51dGlscy52ZXJjbXBfc3RyaW5nX29wLCAnMCcsICcwJywgJyQnKQorCisKK2NsYXNzIFBhdGgodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3Vuc2FmZV9kZWxldGVfcGF0aChzZWxmKToKKyAgICAgICAgY2hlY2tpdGVtcyA9IFsoJy8nLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJy8vJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcvLy8nLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAob3MuZ2V0Y3dkKCkuY291bnQob3Muc2VwKSAqICgnLi4nICsgb3Muc2VwKSwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKG9zLmVudmlyb24uZ2V0KCdIT01FJywgJy9ob21lL3Rlc3QnKSwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcvaG9tZS9zb21lb25lJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcvaG9tZS9vdGhlci8nLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJy9ob21lL290aGVyL3N1YmRpcicsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJycsIEZhbHNlKV0KKyAgICAgICAgZm9yIGFyZzEsIGNvcnJlY3RyZXN1bHQgaW4gY2hlY2tpdGVtczoKKyAgICAgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLl9jaGVja191bnNhZmVfZGVsZXRlX3BhdGgoYXJnMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBjb3JyZWN0cmVzdWx0LCAnX2NoZWNrX3Vuc2FmZV9kZWxldGVfcGF0aCgiJXMiKSAhPSAlcycgJSAoYXJnMSwgY29ycmVjdHJlc3VsdCkpCisKKworY2xhc3MgRWRpdE1ldGFkYXRhRmlsZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgX29yaWdmaWxlID0gIiIiCisjIEEgY29tbWVudAorSEVMTE8gPSAib2xkdmFsdWUiCisKK1RISVMgPSAidGhhdCIKKworIyBBbm90aGVyIGNvbW1lbnQKK05PQ0hBTkdFID0gInNhbWV2YWx1ZSIKK09USEVSID0gJ2Fub3RoZXJ2YWx1ZScKKworTVVMVElMSU5FID0gImExIFxcCisgICAgICAgICAgICAgYTIgXFwKKyAgICAgICAgICAgICBhMyIKKworTVVMVElMSU5FMiA6PSAiIFxcCisgICAgICAgICAgICAgICBiMSBcXAorICAgICAgICAgICAgICAgYjIgXFwKKyAgICAgICAgICAgICAgIGIzIFxcCisgICAgICAgICAgICAgICAiCisKKworTVVMVElMSU5FMyA9ICIgXFwKKyAgICAgICAgICAgICAgYzEgXFwKKyAgICAgICAgICAgICAgYzIgXFwKKyAgICAgICAgICAgICAgYzMgXFwKKyIKKworZG9fZnVuY3Rpb25uYW1lKCkgeworICAgIGNvbW1hbmQxICR7VkFMMX0gJHtWQUwyfQorICAgIGNvbW1hbmQyICR7VkFMM30gJHtWQUw0fQorfQorIiIiCisgICAgZGVmIF90ZXN0ZWRpdGZpbGUoc2VsZiwgdmFydmFsdWVzLCBjb21wYXJldG8sIGR1bW15dmFycz1Ob25lKToKKyAgICAgICAgaWYgZHVtbXl2YXJzIGlzIE5vbmU6CisgICAgICAgICAgICBkdW1teXZhcnMgPSBbXQorICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgndycsIGRlbGV0ZT1GYWxzZSkgYXMgdGY6CisgICAgICAgICAgICB0Zi53cml0ZShzZWxmLl9vcmlnZmlsZSkKKyAgICAgICAgICAgIHRmLmNsb3NlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB2YXJjYWxscyA9IFtdCisgICAgICAgICAgICAgICAgZGVmIGhhbmRsZV9maWxlKHZhcm5hbWUsIG9yaWd2YWx1ZSwgb3AsIG5ld2xpbmVzKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih2YXJuYW1lLCB2YXJ2YWx1ZXMsICdDYWxsYmFjayBjYWxsZWQgZm9yIHZhcmlhYmxlICVzIG5vdCBpbiB0aGUgbGlzdCEnICUgdmFybmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbih2YXJuYW1lLCBkdW1teXZhcnMsICdDYWxsYmFjayBjYWxsZWQgZm9yIHZhcmlhYmxlICVzIGluIGR1bW15IGxpc3QhJyAlIHZhcm5hbWUpCisgICAgICAgICAgICAgICAgICAgIHZhcmNhbGxzLmFwcGVuZCh2YXJuYW1lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFydmFsdWVzW3Zhcm5hbWVdCisKKyAgICAgICAgICAgICAgICBiYi51dGlscy5lZGl0X21ldGFkYXRhX2ZpbGUodGYubmFtZSwgdmFydmFsdWVzLmtleXMoKSwgaGFuZGxlX2ZpbGUpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHRmLm5hbWUpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIG1vZGZpbGUgPSBmLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgIyBFbnN1cmUgdGhlIG91dHB1dCBtYXRjaGVzIHRoZSBleHBlY3RlZCBvdXRwdXQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBhcmV0by5zcGxpdGxpbmVzKFRydWUpLCBtb2RmaWxlKQorICAgICAgICAgICAgICAgICMgRW5zdXJlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3YXMgY2FsbGVkIGZvciBldmVyeSB2YXJpYWJsZSB3ZSBhc2tlZCBmb3IKKyAgICAgICAgICAgICAgICAjIChwbHVzIGFsbG93IHRlc3RpbmcgYmVoYXZpb3VyIHdoZW4gYSByZXF1ZXN0ZWQgdmFyaWFibGUgaXMgbm90IHByZXNlbnQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQodmFydmFsdWVzLmtleXMoKSksIHNvcnRlZCh2YXJjYWxscyArIGR1bW15dmFycykpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZSh0Zi5uYW1lKQorCisKKyAgICBkZWYgdGVzdF9lZGl0X21ldGFkYXRhX2ZpbGVfbm9jaGFuZ2Uoc2VsZik6CisgICAgICAgICMgVGVzdCBmaWxlIGRvZXNuJ3QgZ2V0IG1vZGlmaWVkIHdpdGggbm90aGluZyB0byBkbworICAgICAgICBzZWxmLl90ZXN0ZWRpdGZpbGUoe30sIHNlbGYuX29yaWdmaWxlKQorICAgICAgICAjIFRlc3QgZmlsZSBkb2Vzbid0IGdldCBtb2RpZmllZCB3aXRoIG9ubHkgZHVtbXkgdmFyaWFibGVzCisgICAgICAgIHNlbGYuX3Rlc3RlZGl0ZmlsZSh7J0RVTU1ZMSc6ICgnc2hvdWxkX25vdF9zZXQnLCBOb25lLCAwLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdEVU1NWTInOiAoJ3Nob3VsZF9ub3Rfc2V0X2FnYWluJywgTm9uZSwgMCwgVHJ1ZSl9LCBzZWxmLl9vcmlnZmlsZSwgZHVtbXl2YXJzPVsnRFVNTVkxJywgJ0RVTU1ZMiddKQorICAgICAgICAjIFRlc3QgZmlsZSBkb2Vzbid0IGdldCBtb2RpZmllZCB3aXRoIHNvbWUgdGhlIHNhbWUgdmFsdWVzCisgICAgICAgIHNlbGYuX3Rlc3RlZGl0ZmlsZSh7J1RISVMnOiAoJ3RoYXQnLCBOb25lLCAwLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdPVEhFUic6ICgnYW5vdGhlcnZhbHVlJywgTm9uZSwgMCwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAnTVVMVElMSU5FMyc6ICgnICAgICAgICAgICAgICAgYzEgICAgICAgICAgICAgICBjMiAgICAgICAgICAgICAgIGMzJywgTm9uZSwgNCwgRmFsc2UpfSwgc2VsZi5fb3JpZ2ZpbGUpCisKKyAgICBkZWYgdGVzdF9lZGl0X21ldGFkYXRhX2ZpbGVfMShzZWxmKToKKworICAgICAgICBuZXdmaWxlMSA9ICIiIgorIyBBIGNvbW1lbnQKK0hFTExPID0gIm5ld3ZhbHVlIgorCitUSElTID0gInRoYXQiCisKKyMgQW5vdGhlciBjb21tZW50CitOT0NIQU5HRSA9ICJzYW1ldmFsdWUiCitPVEhFUiA9ICdhbm90aGVydmFsdWUnCisKK01VTFRJTElORSA9ICJhMSBcXAorICAgICAgICAgICAgIGEyIFxcCisgICAgICAgICAgICAgYTMiCisKK01VTFRJTElORTIgOj0gIiBcXAorICAgICAgICAgICAgICAgYjEgXFwKKyAgICAgICAgICAgICAgIGIyIFxcCisgICAgICAgICAgICAgICBiMyBcXAorICAgICAgICAgICAgICAgIgorCisKK01VTFRJTElORTMgPSAiIFxcCisgICAgICAgICAgICAgIGMxIFxcCisgICAgICAgICAgICAgIGMyIFxcCisgICAgICAgICAgICAgIGMzIFxcCisiCisKK2RvX2Z1bmN0aW9ubmFtZSgpIHsKKyAgICBjb21tYW5kMSAke1ZBTDF9ICR7VkFMMn0KKyAgICBjb21tYW5kMiAke1ZBTDN9ICR7VkFMNH0KK30KKyIiIgorICAgICAgICBzZWxmLl90ZXN0ZWRpdGZpbGUoeydIRUxMTyc6ICgnbmV3dmFsdWUnLCBOb25lLCA0LCBUcnVlKX0sIG5ld2ZpbGUxKQorCisKKyAgICBkZWYgdGVzdF9lZGl0X21ldGFkYXRhX2ZpbGVfMihzZWxmKToKKworICAgICAgICBuZXdmaWxlMiA9ICIiIgorIyBBIGNvbW1lbnQKK0hFTExPID0gIm9sZHZhbHVlIgorCitUSElTID0gInRoYXQiCisKKyMgQW5vdGhlciBjb21tZW50CitOT0NIQU5HRSA9ICJzYW1ldmFsdWUiCitPVEhFUiA9ICdhbm90aGVydmFsdWUnCisKK01VTFRJTElORSA9ICIgXFwKKyAgICBkMSBcXAorICAgIGQyIFxcCisgICAgZDMgXFwKKyAgICAiCisKK01VTFRJTElORTIgOj0gIiBcXAorICAgICAgICAgICAgICAgYjEgXFwKKyAgICAgICAgICAgICAgIGIyIFxcCisgICAgICAgICAgICAgICBiMyBcXAorICAgICAgICAgICAgICAgIgorCisKK01VTFRJTElORTMgPSAibm93c2luZ2xlIgorCitkb19mdW5jdGlvbm5hbWUoKSB7CisgICAgY29tbWFuZDEgJHtWQUwxfSAke1ZBTDJ9CisgICAgY29tbWFuZDIgJHtWQUwzfSAke1ZBTDR9Cit9CisiIiIKKyAgICAgICAgc2VsZi5fdGVzdGVkaXRmaWxlKHsnTVVMVElMSU5FJzogKFsnZDEnLCdkMicsJ2QzJ10sIE5vbmUsIDQsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdNVUxUSUxJTkUzJzogKCdub3dzaW5nbGUnLCBOb25lLCA0LCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdOT1RQUkVTRU5UJzogKFsnYScsICdiJ10sIE5vbmUsIDQsIEZhbHNlKX0sIG5ld2ZpbGUyLCBkdW1teXZhcnM9WydOT1RQUkVTRU5UJ10pCisKKworICAgIGRlZiB0ZXN0X2VkaXRfbWV0YWRhdGFfZmlsZV8zKHNlbGYpOgorCisgICAgICAgIG5ld2ZpbGUzID0gIiIiCisjIEEgY29tbWVudAorSEVMTE8gPSAib2xkdmFsdWUiCisKKyMgQW5vdGhlciBjb21tZW50CitOT0NIQU5HRSA9ICJzYW1ldmFsdWUiCitPVEhFUiA9ICJ5ZXRhbm90aGVydmFsdWUiCisKK01VTFRJTElORSA9ICJlMSBcXAorICAgICAgICAgICAgIGUyIFxcCisgICAgICAgICAgICAgZTMgXFwKKyAgICAgICAgICAgICAiCisKK01VTFRJTElORTIgOj0gImYxIFxcCitcdGYyIFxcCitcdCIKKworCitNVUxUSUxJTkUzID0gIiBcXAorICAgICAgICAgICAgICBjMSBcXAorICAgICAgICAgICAgICBjMiBcXAorICAgICAgICAgICAgICBjMyBcXAorIgorCitkb19mdW5jdGlvbm5hbWUoKSB7CisgICAgb3RoZXJjb21tYW5kX29uZSBhIGIgYworICAgIG90aGVyY29tbWFuZF90d28gZCBlIGYKK30KKyIiIgorCisgICAgICAgIHNlbGYuX3Rlc3RlZGl0ZmlsZSh7J2RvX2Z1bmN0aW9ubmFtZSgpJzogKFsnb3RoZXJjb21tYW5kX29uZSBhIGIgYycsICdvdGhlcmNvbW1hbmRfdHdvIGQgZSBmJ10sIE5vbmUsIDQsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdNVUxUSUxJTkUyJzogKFsnZjEnLCAnZjInXSwgTm9uZSwgJ1x0JywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAnTVVMVElMSU5FJzogKFsnZTEnLCAnZTInLCAnZTMnXSwgTm9uZSwgLTEsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ1RISVMnOiAoTm9uZSwgTm9uZSwgMCwgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ09USEVSJzogKCd5ZXRhbm90aGVydmFsdWUnLCBOb25lLCAwLCBUcnVlKX0sIG5ld2ZpbGUzKQorCisKKyAgICBkZWYgdGVzdF9lZGl0X21ldGFkYXRhX2ZpbGVfNChzZWxmKToKKworICAgICAgICBuZXdmaWxlNCA9ICIiIgorIyBBIGNvbW1lbnQKK0hFTExPID0gIm9sZHZhbHVlIgorCitUSElTID0gInRoYXQiCisKKyMgQW5vdGhlciBjb21tZW50CitPVEhFUiA9ICdhbm90aGVydmFsdWUnCisKK01VTFRJTElORSA9ICJhMSBcXAorICAgICAgICAgICAgIGEyIFxcCisgICAgICAgICAgICAgYTMiCisKK01VTFRJTElORTIgOj0gIiBcXAorICAgICAgICAgICAgICAgYjEgXFwKKyAgICAgICAgICAgICAgIGIyIFxcCisgICAgICAgICAgICAgICBiMyBcXAorICAgICAgICAgICAgICAgIgorCisKKyIiIgorCisgICAgICAgIHNlbGYuX3Rlc3RlZGl0ZmlsZSh7J05PQ0hBTkdFJzogKE5vbmUsIE5vbmUsIDAsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdNVUxUSUxJTkUzJzogKE5vbmUsIE5vbmUsIDAsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdUSElTJzogKCd0aGF0JywgTm9uZSwgMCwgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2Z1bmN0aW9ubmFtZSgpJzogKE5vbmUsIE5vbmUsIDAsIEZhbHNlKX0sIG5ld2ZpbGU0KQorCisKKyAgICBkZWYgdGVzdF9lZGl0X21ldGFkYXRhKHNlbGYpOgorICAgICAgICBuZXdmaWxlNSA9ICIiIgorIyBBIGNvbW1lbnQKK0hFTExPID0gImhpdGhlcmUiCisKKyMgQSBuZXcgY29tbWVudAorVEhJUyArPSAidGhhdCIKKworIyBBbm90aGVyIGNvbW1lbnQKK05PQ0hBTkdFID0gInNhbWV2YWx1ZSIKK09USEVSID0gJ2Fub3RoZXJ2YWx1ZScKKworTVVMVElMSU5FID0gImExIFxcCisgICAgICAgICAgICAgYTIgXFwKKyAgICAgICAgICAgICBhMyIKKworTVVMVElMSU5FMiA6PSAiIFxcCisgICAgICAgICAgICAgICBiMSBcXAorICAgICAgICAgICAgICAgYjIgXFwKKyAgICAgICAgICAgICAgIGIzIFxcCisgICAgICAgICAgICAgICAiCisKKworTVVMVElMSU5FMyA9ICIgXFwKKyAgICAgICAgICAgICAgYzEgXFwKKyAgICAgICAgICAgICAgYzIgXFwKKyAgICAgICAgICAgICAgYzMgXFwKKyIKKworTkVXVkFSID0gInZhbHVlIgorCitkb19mdW5jdGlvbm5hbWUoKSB7CisgICAgY29tbWFuZDEgJHtWQUwxfSAke1ZBTDJ9CisgICAgY29tbWFuZDIgJHtWQUwzfSAke1ZBTDR9Cit9CisiIiIKKworCisgICAgICAgIGRlZiBoYW5kbGVfdmFyKHZhcm5hbWUsIG9yaWd2YWx1ZSwgb3AsIG5ld2xpbmVzKToKKyAgICAgICAgICAgIGlmIHZhcm5hbWUgPT0gJ1RISVMnOgorICAgICAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZCgnIyBBIG5ldyBjb21tZW50XG4nKQorICAgICAgICAgICAgZWxpZiB2YXJuYW1lID09ICdkb19mdW5jdGlvbm5hbWUoKSc6CisgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCdORVdWQVIgPSAidmFsdWUiXG4nKQorICAgICAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZCgnXG4nKQorICAgICAgICAgICAgdmFsdWVpdGVtID0gdmFydmFsdWVzLmdldCh2YXJuYW1lLCBOb25lKQorICAgICAgICAgICAgaWYgdmFsdWVpdGVtOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZWl0ZW0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIChvcmlndmFsdWUsIG9wLCAwLCBUcnVlKQorCisgICAgICAgIHZhcnZhbHVlcyA9IHsnSEVMTE8nOiAoJ2hpdGhlcmUnLCBOb25lLCAwLCBUcnVlKSwgJ1RISVMnOiAoJ3RoYXQnLCAnKz0nLCAwLCBUcnVlKX0KKyAgICAgICAgdmFybGlzdCA9IFsnSEVMTE8nLCAnVEhJUycsICdkb19mdW5jdGlvbm5hbWUoKSddCisgICAgICAgICh1cGRhdGVkLCBuZXdsaW5lcykgPSBiYi51dGlscy5lZGl0X21ldGFkYXRhKHNlbGYuX29yaWdmaWxlLnNwbGl0bGluZXMoVHJ1ZSksIHZhcmxpc3QsIGhhbmRsZV92YXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1cGRhdGVkLCAnTGlzdCBzaG91bGQgYmUgdXBkYXRlZCBidXQgaXNuXCd0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdsaW5lcywgbmV3ZmlsZTUuc3BsaXRsaW5lcyhUcnVlKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGluZm9pbC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGluZm9pbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWE0NmQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90aW5mb2lsLnB5CkBAIC0wLDAgKzEsMTA0IEBACisjIHRpbmZvaWw6IGEgc2ltcGxlIHdyYXBwZXIgYXJvdW5kIGNvb2tlciBmb3IgYml0YmFrZS1iYXNlZCBjb21tYW5kLWxpbmUgdXRpbGl0aWVzCisjCisjIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTEgTWVudG9yIEdyYXBoaWNzIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHdhcm5pbmdzCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworaW1wb3J0IGJiLmNhY2hlCitpbXBvcnQgYmIuY29va2VyCitpbXBvcnQgYmIucHJvdmlkZXJzCitpbXBvcnQgYmIudXRpbHMKK2Zyb20gYmIuY29va2VyIGltcG9ydCBzdGF0ZSwgQkJDb29rZXIsIENvb2tlckZlYXR1cmVzCitmcm9tIGJiLmNvb2tlcmRhdGEgaW1wb3J0IENvb2tlckNvbmZpZ3VyYXRpb24sIENvbmZpZ1BhcmFtZXRlcnMKK2ltcG9ydCBiYi5mZXRjaDIKKworY2xhc3MgVGluZm9pbDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3V0cHV0PXN5cy5zdGRvdXQsIHRyYWNraW5nPUZhbHNlKToKKyAgICAgICAgIyBOZWVkZWQgdG8gYXZvaWQgZGVwcmVjYXRpb24gd2FybmluZ3Mgd2l0aCBweXRob24gMi42CisgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCBjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcpCisKKyAgICAgICAgIyBTZXQgdXAgbG9nZ2luZworICAgICAgICBzZWxmLmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdCaXRCYWtlJykKKyAgICAgICAgY29uc29sZSA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihvdXRwdXQpCisgICAgICAgIGJiLm1zZy5hZGREZWZhdWx0bG9nRmlsdGVyKGNvbnNvbGUpCisgICAgICAgIGZvcm1hdCA9IGJiLm1zZy5CQkxvZ0Zvcm1hdHRlcigiJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiKQorICAgICAgICBpZiBvdXRwdXQuaXNhdHR5KCk6CisgICAgICAgICAgICBmb3JtYXQuZW5hYmxlX2NvbG9yKCkKKyAgICAgICAgY29uc29sZS5zZXRGb3JtYXR0ZXIoZm9ybWF0KQorICAgICAgICBzZWxmLmxvZ2dlci5hZGRIYW5kbGVyKGNvbnNvbGUpCisKKyAgICAgICAgc2VsZi5jb25maWcgPSBDb29rZXJDb25maWd1cmF0aW9uKCkKKyAgICAgICAgY29uZmlncGFyYW1zID0gVGluZm9pbENvbmZpZ1BhcmFtZXRlcnMocGFyc2Vfb25seT1UcnVlKQorICAgICAgICBzZWxmLmNvbmZpZy5zZXRDb25maWdQYXJhbWV0ZXJzKGNvbmZpZ3BhcmFtcykKKyAgICAgICAgc2VsZi5jb25maWcuc2V0U2VydmVyUmVnSWRsZUNhbGxiYWNrKHNlbGYucmVnaXN0ZXJfaWRsZV9mdW5jdGlvbikKKyAgICAgICAgZmVhdHVyZXMgPSBbXQorICAgICAgICBpZiB0cmFja2luZzoKKyAgICAgICAgICAgIGZlYXR1cmVzLmFwcGVuZChDb29rZXJGZWF0dXJlcy5CQVNFREFUQVNUT1JFX1RSQUNLSU5HKQorICAgICAgICBzZWxmLmNvb2tlciA9IEJCQ29va2VyKHNlbGYuY29uZmlnLCBmZWF0dXJlcykKKyAgICAgICAgc2VsZi5jb25maWdfZGF0YSA9IHNlbGYuY29va2VyLmRhdGEKKyAgICAgICAgYmIucHJvdmlkZXJzLmxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkVSUk9SKQorICAgICAgICBzZWxmLmNvb2tlcl9kYXRhID0gTm9uZQorCisgICAgZGVmIHJlZ2lzdGVyX2lkbGVfZnVuY3Rpb24oc2VsZiwgZnVuY3Rpb24sIGRhdGEpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcGFyc2VSZWNpcGVzKHNlbGYpOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJQYXJzaW5nIHJlY2lwZXMuLiIpCisgICAgICAgIHNlbGYubG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuV0FSTklORykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSBzZWxmLmNvb2tlci5zdGF0ZSBpbiAoc3RhdGUuaW5pdGlhbCwgc3RhdGUucGFyc2luZyk6CisgICAgICAgICAgICAgICAgc2VsZi5jb29rZXIudXBkYXRlQ2FjaGUoKQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBzZWxmLmNvb2tlci5zaHV0ZG93bigpCisgICAgICAgICAgICBzZWxmLmNvb2tlci51cGRhdGVDYWNoZSgpCisgICAgICAgICAgICBzeXMuZXhpdCgyKQorCisgICAgICAgIHNlbGYubG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiZG9uZS5cbiIpCisKKyAgICAgICAgc2VsZi5jb29rZXJfZGF0YSA9IHNlbGYuY29va2VyLnJlY2lwZWNhY2hlCisKKyAgICBkZWYgcHJlcGFyZShzZWxmLCBjb25maWdfb25seSA9IEZhbHNlKToKKyAgICAgICAgaWYgbm90IHNlbGYuY29va2VyX2RhdGE6CisgICAgICAgICAgICBpZiBjb25maWdfb25seToKKyAgICAgICAgICAgICAgICBzZWxmLmNvb2tlci5wYXJzZUNvbmZpZ3VyYXRpb24oKQorICAgICAgICAgICAgICAgIHNlbGYuY29va2VyX2RhdGEgPSBzZWxmLmNvb2tlci5yZWNpcGVjYWNoZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlUmVjaXBlcygpCisKKyAgICBkZWYgc2h1dGRvd24oc2VsZik6CisgICAgICAgIHNlbGYuY29va2VyLnNodXRkb3duKGZvcmNlPVRydWUpCisgICAgICAgIHNlbGYuY29va2VyLnBvc3Rfc2VydmUoKQorICAgICAgICBzZWxmLmNvb2tlci51bmxvY2tCaXRiYWtlKCkKKworY2xhc3MgVGluZm9pbENvbmZpZ1BhcmFtZXRlcnMoQ29uZmlnUGFyYW1ldGVycyk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKipvcHRpb25zKToKKyAgICAgICAgc2VsZi5pbml0aWFsX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHN1cGVyKFRpbmZvaWxDb25maWdQYXJhbWV0ZXJzLCBzZWxmKS5fX2luaXRfXygpCisKKyAgICBkZWYgcGFyc2VDb21tYW5kTGluZShzZWxmLCBhcmd2PXN5cy5hcmd2KToKKyAgICAgICAgY2xhc3MgRHVtbXlPcHRpb25zOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGluaXRpYWxfb3B0aW9ucyk6CisgICAgICAgICAgICAgICAgZm9yIGtleSwgdmFsIGluIGluaXRpYWxfb3B0aW9ucy5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGtleSwgdmFsKQorCisgICAgICAgIHJldHVybiBEdW1teU9wdGlvbnMoc2VsZi5pbml0aWFsX29wdGlvbnMpLCBOb25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDgwNWVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9fX2luaXRfXy5weQpAQCAtMCwwICsxLDE3IEBACisjCisjIEJpdEJha2UgVUkgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2J1aWxkaW5mb2hlbHBlci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvYnVpbGRpbmZvaGVscGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMWVkNTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2J1aWxkaW5mb2hlbHBlci5weQpAQCAtMCwwICsxLDEzMzkgQEAKKyMKKyMgQml0QmFrZSBUb2FzdGVyVUkgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHN5cworaW1wb3J0IGJiCitpbXBvcnQgcmUKK2ltcG9ydCBvcworCitvcy5lbnZpcm9uWyJESkFOR09fU0VUVElOR1NfTU9EVUxFIl0gPSAidG9hc3Rlci50b2FzdGVybWFpbi5zZXR0aW5ncyIKKworCitmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKKworCitkZWYgX2NvbmZpZ3VyZV90b2FzdGVyKCk6CisgICAgIiIiIEFkZCB0b2FzdGVyIHRvIHN5cyBwYXRoIGZvciBpbXBvcnRpbmcgbW9kdWxlcworICAgICIiIgorICAgIHN5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKSksICd0b2FzdGVyJykpCitfY29uZmlndXJlX3RvYXN0ZXIoKQorCitmcm9tIHRvYXN0ZXIub3JtLm1vZGVscyBpbXBvcnQgQnVpbGQsIFRhc2ssIFJlY2lwZSwgTGF5ZXJfVmVyc2lvbiwgTGF5ZXIsIFRhcmdldCwgTG9nTWVzc2FnZSwgSGVscFRleHQKK2Zyb20gdG9hc3Rlci5vcm0ubW9kZWxzIGltcG9ydCBUYXJnZXRfSW1hZ2VfRmlsZSwgQnVpbGRBcnRpZmFjdAorZnJvbSB0b2FzdGVyLm9ybS5tb2RlbHMgaW1wb3J0IFZhcmlhYmxlLCBWYXJpYWJsZUhpc3RvcnkKK2Zyb20gdG9hc3Rlci5vcm0ubW9kZWxzIGltcG9ydCBQYWNrYWdlLCBQYWNrYWdlX0ZpbGUsIFRhcmdldF9JbnN0YWxsZWRfUGFja2FnZSwgVGFyZ2V0X0ZpbGUKK2Zyb20gdG9hc3Rlci5vcm0ubW9kZWxzIGltcG9ydCBUYXNrX0RlcGVuZGVuY3ksIFBhY2thZ2VfRGVwZW5kZW5jeQorZnJvbSB0b2FzdGVyLm9ybS5tb2RlbHMgaW1wb3J0IFJlY2lwZV9EZXBlbmRlbmN5CisKK2Zyb20gdG9hc3Rlci5vcm0ubW9kZWxzIGltcG9ydCBQcm9qZWN0Citmcm9tIGJsZGNvbnRyb2wubW9kZWxzIGltcG9ydCBCdWlsZEVudmlyb25tZW50LCBCdWlsZFJlcXVlc3QKKworZnJvbSBiYi5tc2cgaW1wb3J0IEJCTG9nRm9ybWF0dGVyIGFzIGZvcm1hdHRlcgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworZnJvbSBwcHJpbnQgaW1wb3J0IHBmb3JtYXQKK2ltcG9ydCBsb2dnaW5nCisKK2Zyb20gZGphbmdvLmRiIGltcG9ydCB0cmFuc2FjdGlvbiwgY29ubmVjdGlvbgorCisjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUKKyMgdGhlIGxvZ2dlciBuYW1lIGlzIHN0YW5kYXJkIHRocm91Z2hvdXQgQml0QmFrZQorbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIlRvYXN0ZXJMb2dnZXIiKQorCisKK2NsYXNzIE5vdEV4aXN0aW5nKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitjbGFzcyBPUk1XcmFwcGVyKG9iamVjdCk6CisgICAgIiIiIFRoaXMgY2xhc3MgY3JlYXRlcyB0aGUgZGljdGlvbmFyaWVzIG5lZWRlZCB0byBzdG9yZSBpbmZvcm1hdGlvbiBpbiB0aGUgZGF0YWJhc2UKKyAgICAgICAgZm9sbG93aW5nIHRoZSBmb3JtYXQgZGVmaW5lZCBieSB0aGUgRGphbmdvIG1vZGVscy4gSXQgaXMgYWxzbyB1c2VkIHRvIHNhdmUgdGhpcworICAgICAgICBpbmZvcm1hdGlvbiBpbiB0aGUgZGF0YWJhc2UuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYubGF5ZXJfdmVyc2lvbl9vYmplY3RzID0gW10KKyAgICAgICAgc2VsZi50YXNrX29iamVjdHMgPSB7fQorICAgICAgICBzZWxmLnJlY2lwZV9vYmplY3RzID0ge30KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2J1aWxkX2tleSgqKmt3YXJncyk6CisgICAgICAgIGtleSA9ICIwIgorICAgICAgICBmb3IgayBpbiBzb3J0ZWQoa3dhcmdzLmtleXMoKSk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGt3YXJnc1trXSwgbW9kZWxzLk1vZGVsKToKKyAgICAgICAgICAgICAgICBrZXkgKz0gIi0lZCIgJSBrd2FyZ3Nba10uaWQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAga2V5ICs9ICItJXMiICUgc3RyKGt3YXJnc1trXSkKKyAgICAgICAgcmV0dXJuIGtleQorCisKKyAgICBkZWYgX2NhY2hlZF9nZXRfb3JfY3JlYXRlKHNlbGYsIGNsYXp6LCAqKmt3YXJncyk6CisgICAgICAgICIiIiBUaGlzIGlzIGEgbWVtb3J5LWNhY2hlZCBnZXRfb3JfY3JlYXRlLiBXZSBhc3N1bWUgdGhhdCB0aGUgb2JqZWN0cyB3aWxsIG5vdCBiZSBjcmVhdGVkIGluIHRoZQorICAgICAgICAgICAgZGF0YWJhc2UgdGhyb3VnaCBhbnkgb3RoZXIgbWVhbnMuCisgICAgICAgICIiIgorCisgICAgICAgIGFzc2VydCBpc3N1YmNsYXNzKGNsYXp6LCBtb2RlbHMuTW9kZWwpLCAiX2NhY2hlZF9nZXRfb3JfY3JlYXRlIG5lZWRzIHRvIGdldCB0aGUgY2xhc3MgYXMgZmlyc3QgYXJndW1lbnQiCisKKyAgICAgICAga2V5ID0gT1JNV3JhcHBlci5fYnVpbGRfa2V5KCoqa3dhcmdzKQorICAgICAgICBkaWN0bmFtZSA9ICJvYmplY3RzXyVzIiAlIGNsYXp6Ll9fbmFtZV9fCisgICAgICAgIGlmIG5vdCBkaWN0bmFtZSBpbiB2YXJzKHNlbGYpLmtleXMoKToKKyAgICAgICAgICAgIHZhcnMoc2VsZilbZGljdG5hbWVdID0ge30KKworICAgICAgICBjcmVhdGVkID0gRmFsc2UKKyAgICAgICAgaWYgbm90IGtleSBpbiB2YXJzKHNlbGYpW2RpY3RuYW1lXS5rZXlzKCk6CisgICAgICAgICAgICB2YXJzKHNlbGYpW2RpY3RuYW1lXVtrZXldID0gY2xhenoub2JqZWN0cy5jcmVhdGUoKiprd2FyZ3MpCisgICAgICAgICAgICBjcmVhdGVkID0gVHJ1ZQorCisgICAgICAgIHJldHVybiAodmFycyhzZWxmKVtkaWN0bmFtZV1ba2V5XSwgY3JlYXRlZCkKKworCisgICAgZGVmIF9jYWNoZWRfZ2V0KHNlbGYsIGNsYXp6LCAqKmt3YXJncyk6CisgICAgICAgICIiIiBUaGlzIGlzIGEgbWVtb3J5LWNhY2hlZCBnZXQuIFdlIGFzc3VtZSB0aGF0IHRoZSBvYmplY3RzIHdpbGwgbm90IGNoYW5nZSAgaW4gdGhlIGRhdGFiYXNlIGJldHdlZW4gZ2V0cy4KKyAgICAgICAgIiIiCisgICAgICAgIGFzc2VydCBpc3N1YmNsYXNzKGNsYXp6LCBtb2RlbHMuTW9kZWwpLCAiX2NhY2hlZF9nZXQgbmVlZHMgdG8gZ2V0IHRoZSBjbGFzcyBhcyBmaXJzdCBhcmd1bWVudCIKKworICAgICAgICBrZXkgPSBPUk1XcmFwcGVyLl9idWlsZF9rZXkoKiprd2FyZ3MpCisgICAgICAgIGRpY3RuYW1lID0gIm9iamVjdHNfJXMiICUgY2xhenouX19uYW1lX18KKworICAgICAgICBpZiBub3QgZGljdG5hbWUgaW4gdmFycyhzZWxmKS5rZXlzKCk6CisgICAgICAgICAgICB2YXJzKHNlbGYpW2RpY3RuYW1lXSA9IHt9CisKKyAgICAgICAgaWYgbm90IGtleSBpbiB2YXJzKHNlbGYpW2RpY3RuYW1lXS5rZXlzKCk6CisgICAgICAgICAgICB2YXJzKHNlbGYpW2RpY3RuYW1lXVtrZXldID0gY2xhenoub2JqZWN0cy5nZXQoKiprd2FyZ3MpCisKKyAgICAgICAgcmV0dXJuIHZhcnMoc2VsZilbZGljdG5hbWVdW2tleV0KKworICAgICMgcHlsaW50OiBkaXNhYmxlPW5vLXNlbGYtdXNlCisgICAgIyB3ZSBkaXNhYmxlIGRldGVjdGlvbiBvZiBubyBzZWxmIHVzZSBpbiBmdW5jdGlvbnMgYmVjYXVzZSB0aGUgbWV0aG9kcyBhY3R1YWxseSB3b3JrIG9uIHRoZSBvYmplY3QKKyAgICAjIGV2ZW4gaWYgdGhleSBkb24ndCB0b3VjaCBzZWxmIGFueXdoZXJlCisKKyAgICAjIHB5bGludDogZGlzYWJsZT1iYWQtY29udGludWF0aW9uCisgICAgIyB3ZSBkbyBub3QgZm9sbG93IHRoZSBweXRob24gY29udmVudGlvbnMgZm9yIGNvbnRpbnVhdGlvbiBpbmRlbnRhdGlvbiBkdWUgdG8gbG9uZyBsaW5lcyBoZXJlCisKKyAgICBkZWYgY3JlYXRlX2J1aWxkX29iamVjdChzZWxmLCBidWlsZF9pbmZvLCBicmJlLCBwcm9qZWN0X2lkKToKKyAgICAgICAgYXNzZXJ0ICdtYWNoaW5lJyBpbiBidWlsZF9pbmZvCisgICAgICAgIGFzc2VydCAnZGlzdHJvJyBpbiBidWlsZF9pbmZvCisgICAgICAgIGFzc2VydCAnZGlzdHJvX3ZlcnNpb24nIGluIGJ1aWxkX2luZm8KKyAgICAgICAgYXNzZXJ0ICdzdGFydGVkX29uJyBpbiBidWlsZF9pbmZvCisgICAgICAgIGFzc2VydCAnY29va2VyX2xvZ19wYXRoJyBpbiBidWlsZF9pbmZvCisgICAgICAgIGFzc2VydCAnYnVpbGRfbmFtZScgaW4gYnVpbGRfaW5mbworICAgICAgICBhc3NlcnQgJ2JpdGJha2VfdmVyc2lvbicgaW4gYnVpbGRfaW5mbworCisgICAgICAgIHByaiA9IE5vbmUKKyAgICAgICAgYnVpbGRyZXF1ZXN0ID0gTm9uZQorICAgICAgICBpZiBicmJlIGlzIG5vdCBOb25lOiAgICAgICAgICAgICMgdGhpcyBidWlsZCB3YXMgdHJpZ2dlcmVkIGJ5IGEgcmVxdWVzdCBmcm9tIGEgdXNlcgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJidWlsZGluZm9oZWxwZXI6IGJyYmUgaXMgJXMiICUgYnJiZSkKKyAgICAgICAgICAgIGJyLCBfID0gYnJiZS5zcGxpdCgiOiIpCisgICAgICAgICAgICBidWlsZHJlcXVlc3QgPSBCdWlsZFJlcXVlc3Qub2JqZWN0cy5nZXQocGsgPSBicikKKyAgICAgICAgICAgIHByaiA9IGJ1aWxkcmVxdWVzdC5wcm9qZWN0CisKKyAgICAgICAgZWxpZiBwcm9qZWN0X2lkIGlzIG5vdCBOb25lOiAgICAjIHRoaXMgYnVpbGQgd2FzIHRyaWdnZXJlZCBieSBhbiBleHRlcm5hbCBzeXN0ZW0gZm9yIGEgc3BlY2lmaWMgcHJvamVjdAorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJidWlsZGluZm9oZWxwZXI6IHByb2plY3QgaXMgJXMiICUgcHJqKQorICAgICAgICAgICAgcHJqID0gUHJvamVjdC5vYmplY3RzLmdldChwayA9IHByb2plY3RfaWQpCisKKyAgICAgICAgZWxzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoaXMgYnVpbGQgd2FzIHRyaWdnZXJlZCBieSBhIGxlZ2FjeSBzeXN0ZW0sIG9yIGNvbW1hbmQgbGluZSBpbnRlcmFjdGl2ZSBtb2RlCisgICAgICAgICAgICBwcmogPSBQcm9qZWN0Lm9iamVjdHMuZ2V0X2RlZmF1bHRfcHJvamVjdCgpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgImJ1aWxkaW5mb2hlbHBlcjogcHJvamVjdCBpcyBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0aW5nIHRvICVzIiAlIHByaikKKworCisgICAgICAgIGlmIGJ1aWxkcmVxdWVzdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGJ1aWxkID0gYnVpbGRyZXF1ZXN0LmJ1aWxkCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiVXBkYXRpbmcgZXhpc3RpbmcgYnVpbGQsIHdpdGggJXMiLCBidWlsZF9pbmZvKQorICAgICAgICAgICAgYnVpbGQucHJvamVjdCA9IHByagorICAgICAgICAgICAgYnVpbGQubWFjaGluZT1idWlsZF9pbmZvWydtYWNoaW5lJ10KKyAgICAgICAgICAgIGJ1aWxkLmRpc3Rybz1idWlsZF9pbmZvWydkaXN0cm8nXQorICAgICAgICAgICAgYnVpbGQuZGlzdHJvX3ZlcnNpb249YnVpbGRfaW5mb1snZGlzdHJvX3ZlcnNpb24nXQorICAgICAgICAgICAgYnVpbGQuY29va2VyX2xvZ19wYXRoPWJ1aWxkX2luZm9bJ2Nvb2tlcl9sb2dfcGF0aCddCisgICAgICAgICAgICBidWlsZC5idWlsZF9uYW1lPWJ1aWxkX2luZm9bJ2J1aWxkX25hbWUnXQorICAgICAgICAgICAgYnVpbGQuYml0YmFrZV92ZXJzaW9uPWJ1aWxkX2luZm9bJ2JpdGJha2VfdmVyc2lvbiddCisgICAgICAgICAgICBidWlsZC5zYXZlKCkKKworICAgICAgICAgICAgVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKGJ1aWxkID0gYnVpbGQpLmRlbGV0ZSgpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJ1aWxkID0gQnVpbGQub2JqZWN0cy5jcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0ID0gcHJqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZT1idWlsZF9pbmZvWydtYWNoaW5lJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0cm89YnVpbGRfaW5mb1snZGlzdHJvJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0cm9fdmVyc2lvbj1idWlsZF9pbmZvWydkaXN0cm9fdmVyc2lvbiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZF9vbj1idWlsZF9pbmZvWydzdGFydGVkX29uJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWRfb249YnVpbGRfaW5mb1snc3RhcnRlZF9vbiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2VyX2xvZ19wYXRoPWJ1aWxkX2luZm9bJ2Nvb2tlcl9sb2dfcGF0aCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRfbmFtZT1idWlsZF9pbmZvWydidWlsZF9uYW1lJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRiYWtlX3ZlcnNpb249YnVpbGRfaW5mb1snYml0YmFrZV92ZXJzaW9uJ10pCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJidWlsZGluZm9oZWxwZXI6IGJ1aWxkIGlzIGNyZWF0ZWQgJXMiICUgYnVpbGQpCisKKyAgICAgICAgaWYgYnVpbGRyZXF1ZXN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYnVpbGRyZXF1ZXN0LmJ1aWxkID0gYnVpbGQKKyAgICAgICAgICAgIGJ1aWxkcmVxdWVzdC5zYXZlKCkKKworICAgICAgICByZXR1cm4gYnVpbGQKKworICAgIGRlZiBjcmVhdGVfdGFyZ2V0X29iamVjdHMoc2VsZiwgdGFyZ2V0X2luZm8pOgorICAgICAgICBhc3NlcnQgJ2J1aWxkJyBpbiB0YXJnZXRfaW5mbworICAgICAgICBhc3NlcnQgJ3RhcmdldHMnIGluIHRhcmdldF9pbmZvCisKKyAgICAgICAgdGFyZ2V0cyA9IFtdCisgICAgICAgIGZvciB0Z3RfbmFtZSBpbiB0YXJnZXRfaW5mb1sndGFyZ2V0cyddOgorICAgICAgICAgICAgdGd0X29iamVjdCA9IFRhcmdldC5vYmplY3RzLmNyZWF0ZSggYnVpbGQgPSB0YXJnZXRfaW5mb1snYnVpbGQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHRndF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfaW1hZ2UgPSBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHRhcmdldHMuYXBwZW5kKHRndF9vYmplY3QpCisgICAgICAgIHJldHVybiB0YXJnZXRzCisKKyAgICBkZWYgdXBkYXRlX2J1aWxkX29iamVjdChzZWxmLCBidWlsZCwgZXJyb3JzLCB3YXJuaW5ncywgdGFza2ZhaWx1cmVzKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYnVpbGQsQnVpbGQpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGVycm9ycywgaW50KQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh3YXJuaW5ncywgaW50KQorCisgICAgICAgIG91dGNvbWUgPSBCdWlsZC5TVUNDRUVERUQKKyAgICAgICAgaWYgZXJyb3JzIG9yIHRhc2tmYWlsdXJlczoKKyAgICAgICAgICAgIG91dGNvbWUgPSBCdWlsZC5GQUlMRUQKKworICAgICAgICBidWlsZC5jb21wbGV0ZWRfb24gPSB0aW1lem9uZS5ub3coKQorICAgICAgICBidWlsZC5vdXRjb21lID0gb3V0Y29tZQorICAgICAgICBidWlsZC5zYXZlKCkKKworICAgIGRlZiB1cGRhdGVfdGFyZ2V0X3NldF9saWNlbnNlX21hbmlmZXN0KHNlbGYsIHRhcmdldCwgbGljZW5zZV9tYW5pZmVzdF9wYXRoKToKKyAgICAgICAgdGFyZ2V0LmxpY2Vuc2VfbWFuaWZlc3RfcGF0aCA9IGxpY2Vuc2VfbWFuaWZlc3RfcGF0aAorICAgICAgICB0YXJnZXQuc2F2ZSgpCisKKyAgICBkZWYgZ2V0X3VwZGF0ZV90YXNrX29iamVjdChzZWxmLCB0YXNrX2luZm9ybWF0aW9uLCBtdXN0X2V4aXN0ID0gRmFsc2UpOgorICAgICAgICBhc3NlcnQgJ2J1aWxkJyBpbiB0YXNrX2luZm9ybWF0aW9uCisgICAgICAgIGFzc2VydCAncmVjaXBlJyBpbiB0YXNrX2luZm9ybWF0aW9uCisgICAgICAgIGFzc2VydCAndGFza19uYW1lJyBpbiB0YXNrX2luZm9ybWF0aW9uCisKKyAgICAgICAgIyB3ZSB1c2UgbXVzdF9leGlzdCBpbmZvIGZvciBkYXRhYmFzZSBsb29rLXVwIG9wdGltaXphdGlvbgorICAgICAgICB0YXNrX29iamVjdCwgY3JlYXRlZCA9IHNlbGYuX2NhY2hlZF9nZXRfb3JfY3JlYXRlKFRhc2ssCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZD10YXNrX2luZm9ybWF0aW9uWydidWlsZCddLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlPXRhc2tfaW5mb3JtYXRpb25bJ3JlY2lwZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgdGFza19uYW1lPXRhc2tfaW5mb3JtYXRpb25bJ3Rhc2tfbmFtZSddCisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIGlmIGNyZWF0ZWQgYW5kIG11c3RfZXhpc3Q6CisgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydkZWJ1ZyddID0gImJ1aWxkIGlkICVkLCByZWNpcGUgaWQgJWQiICUgKHRhc2tfaW5mb3JtYXRpb25bJ2J1aWxkJ10ucGssIHRhc2tfaW5mb3JtYXRpb25bJ3JlY2lwZSddLnBrKQorICAgICAgICAgICAgcmFpc2UgTm90RXhpc3RpbmcoIlRhc2sgb2JqZWN0IGNyZWF0ZWQgd2hlbiBleHBlY3RlZCB0byBleGlzdCIsIHRhc2tfaW5mb3JtYXRpb24pCisKKyAgICAgICAgb2JqZWN0X2NoYW5nZWQgPSBGYWxzZQorICAgICAgICBmb3IgdiBpbiB2YXJzKHRhc2tfb2JqZWN0KToKKyAgICAgICAgICAgIGlmIHYgaW4gdGFza19pbmZvcm1hdGlvbi5rZXlzKCk6CisgICAgICAgICAgICAgICAgaWYgdmFycyh0YXNrX29iamVjdClbdl0gIT0gdGFza19pbmZvcm1hdGlvblt2XToKKyAgICAgICAgICAgICAgICAgICAgdmFycyh0YXNrX29iamVjdClbdl0gPSB0YXNrX2luZm9ybWF0aW9uW3ZdCisgICAgICAgICAgICAgICAgICAgIG9iamVjdF9jaGFuZ2VkID0gVHJ1ZQorCisgICAgICAgICMgdXBkYXRlIHNldHNjZW5lLXJlbGF0ZWQgaW5mb3JtYXRpb24gaWYgdGhlIHRhc2sgaGFzIGEgc2V0c2NlbmUKKyAgICAgICAgaWYgdGFza19vYmplY3Qub3V0Y29tZSA9PSBUYXNrLk9VVENPTUVfQ09WRVJFRCBhbmQgMSA9PSB0YXNrX29iamVjdC5nZXRfcmVsYXRlZF9zZXRzY2VuZSgpLmNvdW50KCk6CisgICAgICAgICAgICB0YXNrX29iamVjdC5vdXRjb21lID0gVGFzay5PVVRDT01FX0NBQ0hFRAorICAgICAgICAgICAgb2JqZWN0X2NoYW5nZWQgPSBUcnVlCisKKyAgICAgICAgICAgIG91dGNvbWVfdGFza19zZXRzY2VuZSA9IFRhc2sub2JqZWN0cy5nZXQodGFza19leGVjdXRlZD1UcnVlLCBidWlsZCA9IHRhc2tfb2JqZWN0LmJ1aWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlID0gdGFza19vYmplY3QucmVjaXBlLCB0YXNrX25hbWU9dGFza19vYmplY3QudGFza19uYW1lKyJfc2V0c2NlbmUiKS5vdXRjb21lCisgICAgICAgICAgICBpZiBvdXRjb21lX3Rhc2tfc2V0c2NlbmUgPT0gVGFzay5PVVRDT01FX1NVQ0NFU1M6CisgICAgICAgICAgICAgICAgdGFza19vYmplY3Quc3N0YXRlX3Jlc3VsdCA9IFRhc2suU1NUQVRFX1JFU1RPUkVECisgICAgICAgICAgICAgICAgb2JqZWN0X2NoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICBlbGlmIG91dGNvbWVfdGFza19zZXRzY2VuZSA9PSBUYXNrLk9VVENPTUVfRkFJTEVEOgorICAgICAgICAgICAgICAgIHRhc2tfb2JqZWN0LnNzdGF0ZV9yZXN1bHQgPSBUYXNrLlNTVEFURV9GQUlMRUQKKyAgICAgICAgICAgICAgICBvYmplY3RfY2hhbmdlZCA9IFRydWUKKworICAgICAgICAjIG1hcmsgZG93biBkdXJhdGlvbiBpZiB3ZSBoYXZlIGEgc3RhcnQgdGltZSBhbmQgYSBjdXJyZW50IHRpbWUKKyAgICAgICAgaWYgJ3N0YXJ0X3RpbWUnIGluIHRhc2tfaW5mb3JtYXRpb24ua2V5cygpIGFuZCAnZW5kX3RpbWUnIGluIHRhc2tfaW5mb3JtYXRpb24ua2V5cygpOgorICAgICAgICAgICAgZHVyYXRpb24gPSB0YXNrX2luZm9ybWF0aW9uWydlbmRfdGltZSddIC0gdGFza19pbmZvcm1hdGlvblsnc3RhcnRfdGltZSddCisgICAgICAgICAgICB0YXNrX29iamVjdC5lbGFwc2VkX3RpbWUgPSBkdXJhdGlvbgorICAgICAgICAgICAgb2JqZWN0X2NoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICBkZWwgdGFza19pbmZvcm1hdGlvblsnc3RhcnRfdGltZSddCisgICAgICAgICAgICBkZWwgdGFza19pbmZvcm1hdGlvblsnZW5kX3RpbWUnXQorCisgICAgICAgIGlmIG9iamVjdF9jaGFuZ2VkOgorICAgICAgICAgICAgdGFza19vYmplY3Quc2F2ZSgpCisgICAgICAgIHJldHVybiB0YXNrX29iamVjdAorCisKKyAgICBkZWYgZ2V0X3VwZGF0ZV9yZWNpcGVfb2JqZWN0KHNlbGYsIHJlY2lwZV9pbmZvcm1hdGlvbiwgbXVzdF9leGlzdCA9IEZhbHNlKToKKyAgICAgICAgYXNzZXJ0ICdsYXllcl92ZXJzaW9uJyBpbiByZWNpcGVfaW5mb3JtYXRpb24KKyAgICAgICAgYXNzZXJ0ICdmaWxlX3BhdGgnIGluIHJlY2lwZV9pbmZvcm1hdGlvbgorICAgICAgICBhc3NlcnQgJ3BhdGhmbGFncycgaW4gcmVjaXBlX2luZm9ybWF0aW9uCisKKyAgICAgICAgYXNzZXJ0IG5vdCByZWNpcGVfaW5mb3JtYXRpb25bJ2ZpbGVfcGF0aCddLnN0YXJ0c3dpdGgoIi8iKSAgICAgICMgd2Ugc2hvdWxkIGhhdmUgbGF5ZXItcmVsYXRpdmUgcGF0aHMgYXQgYWxsIHRpbWVzCisKKyAgICAgICAgcmVjaXBlX29iamVjdCwgY3JlYXRlZCA9IHNlbGYuX2NhY2hlZF9nZXRfb3JfY3JlYXRlKFJlY2lwZSwgbGF5ZXJfdmVyc2lvbj1yZWNpcGVfaW5mb3JtYXRpb25bJ2xheWVyX3ZlcnNpb24nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3BhdGg9cmVjaXBlX2luZm9ybWF0aW9uWydmaWxlX3BhdGgnXSwgcGF0aGZsYWdzID0gcmVjaXBlX2luZm9ybWF0aW9uWydwYXRoZmxhZ3MnXSkKKyAgICAgICAgaWYgY3JlYXRlZCBhbmQgbXVzdF9leGlzdDoKKyAgICAgICAgICAgIHJhaXNlIE5vdEV4aXN0aW5nKCJSZWNpcGUgb2JqZWN0IGNyZWF0ZWQgd2hlbiBleHBlY3RlZCB0byBleGlzdCIsIHJlY2lwZV9pbmZvcm1hdGlvbikKKworICAgICAgICBvYmplY3RfY2hhbmdlZCA9IEZhbHNlCisgICAgICAgIGZvciB2IGluIHZhcnMocmVjaXBlX29iamVjdCk6CisgICAgICAgICAgICBpZiB2IGluIHJlY2lwZV9pbmZvcm1hdGlvbi5rZXlzKCk6CisgICAgICAgICAgICAgICAgb2JqZWN0X2NoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgdmFycyhyZWNpcGVfb2JqZWN0KVt2XSA9IHJlY2lwZV9pbmZvcm1hdGlvblt2XQorCisgICAgICAgIGlmIG9iamVjdF9jaGFuZ2VkOgorICAgICAgICAgICAgcmVjaXBlX29iamVjdC5zYXZlKCkKKworICAgICAgICByZXR1cm4gcmVjaXBlX29iamVjdAorCisgICAgZGVmIGdldF91cGRhdGVfbGF5ZXJfdmVyc2lvbl9vYmplY3Qoc2VsZiwgYnVpbGRfb2JqLCBsYXllcl9vYmosIGxheWVyX3ZlcnNpb25faW5mb3JtYXRpb24pOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShidWlsZF9vYmosIEJ1aWxkKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShsYXllcl9vYmosIExheWVyKQorICAgICAgICBhc3NlcnQgJ2JyYW5jaCcgaW4gbGF5ZXJfdmVyc2lvbl9pbmZvcm1hdGlvbgorICAgICAgICBhc3NlcnQgJ2NvbW1pdCcgaW4gbGF5ZXJfdmVyc2lvbl9pbmZvcm1hdGlvbgorICAgICAgICBhc3NlcnQgJ3ByaW9yaXR5JyBpbiBsYXllcl92ZXJzaW9uX2luZm9ybWF0aW9uCisgICAgICAgIGFzc2VydCAnbG9jYWxfcGF0aCcgaW4gbGF5ZXJfdmVyc2lvbl9pbmZvcm1hdGlvbgorCisgICAgICAgIGxheWVyX3ZlcnNpb25fb2JqZWN0LCBfID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldF9vcl9jcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCA9IGJ1aWxkX29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyID0gbGF5ZXJfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoID0gbGF5ZXJfdmVyc2lvbl9pbmZvcm1hdGlvblsnYnJhbmNoJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXQgPSBsYXllcl92ZXJzaW9uX2luZm9ybWF0aW9uWydjb21taXQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5ID0gbGF5ZXJfdmVyc2lvbl9pbmZvcm1hdGlvblsncHJpb3JpdHknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX3BhdGggPSBsYXllcl92ZXJzaW9uX2luZm9ybWF0aW9uWydsb2NhbF9wYXRoJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAgc2VsZi5sYXllcl92ZXJzaW9uX29iamVjdHMuYXBwZW5kKGxheWVyX3ZlcnNpb25fb2JqZWN0KQorCisgICAgICAgIHJldHVybiBsYXllcl92ZXJzaW9uX29iamVjdAorCisgICAgZGVmIGdldF91cGRhdGVfbGF5ZXJfb2JqZWN0KHNlbGYsIGxheWVyX2luZm9ybWF0aW9uLCBicmJlKToKKyAgICAgICAgYXNzZXJ0ICduYW1lJyBpbiBsYXllcl9pbmZvcm1hdGlvbgorICAgICAgICBhc3NlcnQgJ2xheWVyX2luZGV4X3VybCcgaW4gbGF5ZXJfaW5mb3JtYXRpb24KKworICAgICAgICBpZiBicmJlIGlzIE5vbmU6CisgICAgICAgICAgICBsYXllcl9vYmplY3QsIF8gPSBMYXllci5vYmplY3RzLmdldF9vcl9jcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9bGF5ZXJfaW5mb3JtYXRpb25bJ25hbWUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJfaW5kZXhfdXJsPWxheWVyX2luZm9ybWF0aW9uWydsYXllcl9pbmRleF91cmwnXSkKKyAgICAgICAgICAgIHJldHVybiBsYXllcl9vYmplY3QKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgd2UgYXJlIHVuZGVyIG1hbmFnZWQgbW9kZTsgd2UgbXVzdCBtYXRjaCB0aGUgbGF5ZXIgdXNlZCBpbiB0aGUgUHJvamVjdCBMYXllcgorICAgICAgICAgICAgYnJfaWQsIGJlX2lkID0gYnJiZS5zcGxpdCgiOiIpCisKKyAgICAgICAgICAgICMgZmluZCBsYXllciBieSBjaGVja291dCBwYXRoOworICAgICAgICAgICAgZnJvbSBibGRjb250cm9sIGltcG9ydCBiYmNvbnRyb2xsZXIKKyAgICAgICAgICAgIGJjID0gYmJjb250cm9sbGVyLmdldEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyKHBrID0gYmVfaWQpCisKKyAgICAgICAgICAgICMgd2UgbWlnaHQgaGF2ZSBhIHJhY2UgY29uZGl0aW9uIGhlcmUsIGFzIHRoZSBwcm9qZWN0IGxheWVycyBtYXkgY2hhbmdlIGJldHdlZW4gdGhlIGJ1aWxkIHRyaWdnZXIgYW5kIHRoZSBhY3R1YWwgYnVpbGQgZXhlY3V0aW9uCisgICAgICAgICAgICAjIGJ1dCB3ZSBjYW4gb25seSBtYXRjaCBvbiB0aGUgbGF5ZXIgbmFtZSwgc28gdGhlIHdvcnN0IHRoaW5nIGNhbiBoYXBwZW4gaXMgYSBtaXMtaWRlbnRpZmljYXRpb24gb2YgdGhlIGxheWVyLCBub3QgYSB0b3RhbCBmYWlsdXJlCisKKyAgICAgICAgICAgICMgbm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50CisgICAgICAgICAgICBidWlsZHJlcXVlc3QgPSBCdWlsZFJlcXVlc3Qub2JqZWN0cy5nZXQocGsgPSBicl9pZCkKKyAgICAgICAgICAgIGZvciBicmwgaW4gYnVpbGRyZXF1ZXN0LmJybGF5ZXJfc2V0LmFsbCgpOgorICAgICAgICAgICAgICAgIGxvY2FsZGlybmFtZSA9IG9zLnBhdGguam9pbihiYy5nZXRHaXRDbG9uZURpcmVjdG9yeShicmwuZ2l0dXJsLCBicmwuY29tbWl0KSwgYnJsLmRpcnBhdGgpCisgICAgICAgICAgICAgICAgIyB3ZSBnZXQgYSByZWxhdGl2ZSBwYXRoLCB1bmxlc3MgcnVubmluZyBpbiBIRUFEIG1vZGUgd2hlcmUgdGhlIHBhdGggaXMgYWJzb2x1dGUKKyAgICAgICAgICAgICAgICBpZiBub3QgbG9jYWxkaXJuYW1lLnN0YXJ0c3dpdGgoIi8iKToKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxkaXJuYW1lID0gb3MucGF0aC5qb2luKGJjLmJlLnNvdXJjZWRpciwgbG9jYWxkaXJuYW1lKQorICAgICAgICAgICAgICAgICNsb2dnZXIuZGVidWcoMSwgIkxvY2FsZGlybmFtZSAlcyBsY2FsX3BhdGggJXMiICUgKGxvY2FsZGlybmFtZSwgbGF5ZXJfaW5mb3JtYXRpb25bJ2xvY2FsX3BhdGgnXSkpCisgICAgICAgICAgICAgICAgaWYgbG9jYWxkaXJuYW1lLnN0YXJ0c3dpdGgobGF5ZXJfaW5mb3JtYXRpb25bJ2xvY2FsX3BhdGgnXSk6CisgICAgICAgICAgICAgICAgICAgICMgd2UgbWF0Y2hlZCB0aGUgQlJMYXllciwgYnV0IHdlIG5lZWQgdGhlIGxheWVyX3ZlcnNpb24gdGhhdCBnZW5lcmF0ZWQgdGhpcyBCUjsgcmV2ZXJzZSBvZiB0aGUgUHJvamVjdC5zY2hlZHVsZV9idWlsZCgpCisgICAgICAgICAgICAgICAgICAgICNsb2dnZXIuZGVidWcoMSwgIk1hdGNoZWQgJXMgdG8gQlJsYXllciAlcyIgJSAocGZvcm1hdChsYXllcl9pbmZvcm1hdGlvblsibG9jYWxfcGF0aCJdKSwgbG9jYWxkaXJuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIHBsIGluIGJ1aWxkcmVxdWVzdC5wcm9qZWN0LnByb2plY3RsYXllcl9zZXQuZmlsdGVyKGxheWVyY29tbWl0X19sYXllcl9fbmFtZSA9IGJybC5uYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBsLmxheWVyY29tbWl0LmxheWVyLnZjc191cmwgPT0gYnJsLmdpdHVybCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIgPSBwbC5sYXllcmNvbW1pdC5sYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnNhdmUoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXllcgorCisgICAgICAgICAgICByYWlzZSBOb3RFeGlzdGluZygiVW5pZGVudGlmaWVkIGxheWVyICVzIiAlIHBmb3JtYXQobGF5ZXJfaW5mb3JtYXRpb24pKQorCisKKyAgICBkZWYgc2F2ZV90YXJnZXRfZmlsZV9pbmZvcm1hdGlvbihzZWxmLCBidWlsZF9vYmosIHRhcmdldF9vYmosIGZpbGVkYXRhKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYnVpbGRfb2JqLCBCdWlsZCkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodGFyZ2V0X29iaiwgVGFyZ2V0KQorICAgICAgICBkaXJzID0gZmlsZWRhdGFbJ2RpcnMnXQorICAgICAgICBmaWxlcyA9IGZpbGVkYXRhWydmaWxlcyddCisgICAgICAgIHN5bXMgPSBmaWxlZGF0YVsnc3ltcyddCisKKyAgICAgICAgIyB3ZSBpbnNlcnQgZGlyZWN0b3JpZXMsIG9yZGVyZWQgYnkgbmFtZSBkZXB0aAorICAgICAgICBmb3IgZCBpbiBzb3J0ZWQoZGlycywga2V5PWxhbWJkYSB4Omxlbih4Wy0xXS5zcGxpdCgiLyIpKSk6CisgICAgICAgICAgICAodXNlciwgZ3JvdXAsIHNpemUpID0gZFsxOjRdCisgICAgICAgICAgICBwZXJtaXNzaW9uID0gZFswXVsxOl0KKyAgICAgICAgICAgIHBhdGggPSBkWzRdLmxzdHJpcCgiLiIpCisgICAgICAgICAgICBpZiBsZW4ocGF0aCkgPT0gMDoKKyAgICAgICAgICAgICAgICAjIHdlIGNyZWF0ZSB0aGUgcm9vdCBkaXJlY3RvcnkgYXMgYSBzcGVjaWFsIGNhc2UKKyAgICAgICAgICAgICAgICBwYXRoID0gIi8iCisgICAgICAgICAgICAgICAgdGZfb2JqID0gVGFyZ2V0X0ZpbGUub2JqZWN0cy5jcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXRfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlub2RldHlwZSA9IFRhcmdldF9GaWxlLklUWVBFX0RJUkVDVE9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb24gPSBwZXJtaXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPSB1c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSBncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICB0Zl9vYmouZGlyZWN0b3J5ID0gdGZfb2JqCisgICAgICAgICAgICAgICAgdGZfb2JqLnNhdmUoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBwYXJlbnRfcGF0aCA9ICIvIi5qb2luKHBhdGguc3BsaXQoIi8iKVs6bGVuKHBhdGguc3BsaXQoIi8iKSkgLSAxXSkKKyAgICAgICAgICAgIGlmIGxlbihwYXJlbnRfcGF0aCkgPT0gMDoKKyAgICAgICAgICAgICAgICBwYXJlbnRfcGF0aCA9ICIvIgorICAgICAgICAgICAgcGFyZW50X29iaiA9IHNlbGYuX2NhY2hlZF9nZXQoVGFyZ2V0X0ZpbGUsIHRhcmdldCA9IHRhcmdldF9vYmosIHBhdGggPSBwYXJlbnRfcGF0aCwgaW5vZGV0eXBlID0gVGFyZ2V0X0ZpbGUuSVRZUEVfRElSRUNUT1JZKQorICAgICAgICAgICAgdGZfb2JqID0gVGFyZ2V0X0ZpbGUub2JqZWN0cy5jcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXRfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlub2RldHlwZSA9IFRhcmdldF9GaWxlLklUWVBFX0RJUkVDVE9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb24gPSBwZXJtaXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPSB1c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSBncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSA9IHBhcmVudF9vYmopCisKKworICAgICAgICAjIHdlIGluc2VydCBmaWxlcworICAgICAgICBmb3IgZCBpbiBmaWxlczoKKyAgICAgICAgICAgICh1c2VyLCBncm91cCwgc2l6ZSkgPSBkWzE6NF0KKyAgICAgICAgICAgIHBlcm1pc3Npb24gPSBkWzBdWzE6XQorICAgICAgICAgICAgcGF0aCA9IGRbNF0ubHN0cmlwKCIuIikKKyAgICAgICAgICAgIHBhcmVudF9wYXRoID0gIi8iLmpvaW4ocGF0aC5zcGxpdCgiLyIpWzpsZW4ocGF0aC5zcGxpdCgiLyIpKSAtIDFdKQorICAgICAgICAgICAgaW5vZGV0eXBlID0gVGFyZ2V0X0ZpbGUuSVRZUEVfUkVHVUxBUgorICAgICAgICAgICAgaWYgZFswXS5zdGFydHN3aXRoKCdiJyk6CisgICAgICAgICAgICAgICAgaW5vZGV0eXBlID0gVGFyZ2V0X0ZpbGUuSVRZUEVfQkxPQ0sKKyAgICAgICAgICAgIGlmIGRbMF0uc3RhcnRzd2l0aCgnYycpOgorICAgICAgICAgICAgICAgIGlub2RldHlwZSA9IFRhcmdldF9GaWxlLklUWVBFX0NIQVJBQ1RFUgorICAgICAgICAgICAgaWYgZFswXS5zdGFydHN3aXRoKCdwJyk6CisgICAgICAgICAgICAgICAgaW5vZGV0eXBlID0gVGFyZ2V0X0ZpbGUuSVRZUEVfRklGTworCisgICAgICAgICAgICB0Zl9vYmogPSBUYXJnZXRfRmlsZS5vYmplY3RzLmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldF9vYmosCisgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5vZGV0eXBlID0gaW5vZGV0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbiA9IHBlcm1pc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9IHVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBncm91cCA9IGdyb3VwKQorICAgICAgICAgICAgcGFyZW50X29iaiA9IHNlbGYuX2NhY2hlZF9nZXQoVGFyZ2V0X0ZpbGUsIHRhcmdldCA9IHRhcmdldF9vYmosIHBhdGggPSBwYXJlbnRfcGF0aCwgaW5vZGV0eXBlID0gVGFyZ2V0X0ZpbGUuSVRZUEVfRElSRUNUT1JZKQorICAgICAgICAgICAgdGZfb2JqLmRpcmVjdG9yeSA9IHBhcmVudF9vYmoKKyAgICAgICAgICAgIHRmX29iai5zYXZlKCkKKworICAgICAgICAjIHdlIGluc2VydCBzeW1saW5rcworICAgICAgICBmb3IgZCBpbiBzeW1zOgorICAgICAgICAgICAgKHVzZXIsIGdyb3VwLCBzaXplKSA9IGRbMTo0XQorICAgICAgICAgICAgcGVybWlzc2lvbiA9IGRbMF1bMTpdCisgICAgICAgICAgICBwYXRoID0gZFs0XS5sc3RyaXAoIi4iKQorICAgICAgICAgICAgZmlsZXRhcmdldF9wYXRoID0gZFs2XQorCisgICAgICAgICAgICBwYXJlbnRfcGF0aCA9ICIvIi5qb2luKHBhdGguc3BsaXQoIi8iKVs6bGVuKHBhdGguc3BsaXQoIi8iKSkgLSAxXSkKKyAgICAgICAgICAgIGlmIG5vdCBmaWxldGFyZ2V0X3BhdGguc3RhcnRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgICMgd2UgaGF2ZSBhIHJlbGF0aXZlIHBhdGgsIGdldCBhIG5vcm1hbGl6ZWQgYWJzb2x1dGUgb25lCisgICAgICAgICAgICAgICAgZmlsZXRhcmdldF9wYXRoID0gcGFyZW50X3BhdGggKyAiLyIgKyBmaWxldGFyZ2V0X3BhdGgKKyAgICAgICAgICAgICAgICBmY3AgPSBmaWxldGFyZ2V0X3BhdGguc3BsaXQoIi8iKQorICAgICAgICAgICAgICAgIGZjcGwgPSBbXQorICAgICAgICAgICAgICAgIGZvciBpIGluIGZjcDoKKyAgICAgICAgICAgICAgICAgICAgaWYgaSA9PSAiLi4iOgorICAgICAgICAgICAgICAgICAgICAgICAgZmNwbC5wb3AoKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZmNwbC5hcHBlbmQoaSkKKyAgICAgICAgICAgICAgICBmaWxldGFyZ2V0X3BhdGggPSAiLyIuam9pbihmY3BsKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmlsZXRhcmdldF9vYmogPSBUYXJnZXRfRmlsZS5vYmplY3RzLmdldCh0YXJnZXQgPSB0YXJnZXRfb2JqLCBwYXRoID0gZmlsZXRhcmdldF9wYXRoKQorICAgICAgICAgICAgZXhjZXB0IFRhcmdldF9GaWxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICAjIHdlIG1pZ2h0IGhhdmUgYW4gaW52YWxpZCBsaW5rOyBubyB3YXkgdG8gZGV0ZWN0IHRoaXMuIGp1c3Qgc2V0IGl0IHRvIE5vbmUKKyAgICAgICAgICAgICAgICBmaWxldGFyZ2V0X29iaiA9IE5vbmUKKworICAgICAgICAgICAgcGFyZW50X29iaiA9IFRhcmdldF9GaWxlLm9iamVjdHMuZ2V0KHRhcmdldCA9IHRhcmdldF9vYmosIHBhdGggPSBwYXJlbnRfcGF0aCwgaW5vZGV0eXBlID0gVGFyZ2V0X0ZpbGUuSVRZUEVfRElSRUNUT1JZKQorCisgICAgICAgICAgICB0Zl9vYmogPSBUYXJnZXRfRmlsZS5vYmplY3RzLmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldF9vYmosCisgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5vZGV0eXBlID0gVGFyZ2V0X0ZpbGUuSVRZUEVfU1lNTElOSywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb24gPSBwZXJtaXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPSB1c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSBncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSA9IHBhcmVudF9vYmosCisgICAgICAgICAgICAgICAgICAgICAgICBzeW1fdGFyZ2V0ID0gZmlsZXRhcmdldF9vYmopCisKKworICAgIGRlZiBzYXZlX3RhcmdldF9wYWNrYWdlX2luZm9ybWF0aW9uKHNlbGYsIGJ1aWxkX29iaiwgdGFyZ2V0X29iaiwgcGFja2FnZWRpY3QsIHBrZ3BubWFwLCByZWNpcGVzKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYnVpbGRfb2JqLCBCdWlsZCkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodGFyZ2V0X29iaiwgVGFyZ2V0KQorCisgICAgICAgIGVycm9ybXNnID0gIiIKKyAgICAgICAgZm9yIHAgaW4gcGFja2FnZWRpY3Q6CisgICAgICAgICAgICBzZWFyY2huYW1lID0gcAorICAgICAgICAgICAgaWYgJ09QS0dOJyBpbiBwa2dwbm1hcFtwXS5rZXlzKCk6CisgICAgICAgICAgICAgICAgc2VhcmNobmFtZSA9IHBrZ3BubWFwW3BdWydPUEtHTiddCisKKyAgICAgICAgICAgIHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXSwgY3JlYXRlZCA9IFBhY2thZ2Uub2JqZWN0cy5nZXRfb3JfY3JlYXRlKCBidWlsZCA9IGJ1aWxkX29iaiwgbmFtZSA9IHNlYXJjaG5hbWUgKQorICAgICAgICAgICAgaWYgY3JlYXRlZCBvciBwYWNrYWdlZGljdFtwXVsnb2JqZWN0J10uc2l6ZSA9PSAtMTogICAgIyBzYXZlIHRoZSBkYXRhIGFueXdheSB3ZSBjYW4sIG5vdCBqdXN0IGlmIGl0IHdhcyBub3QgY3JlYXRlZCBoZXJlOyBidWcgW1lPQ1RPICM2ODg3XQorICAgICAgICAgICAgICAgICMgZmlsbCBpbiBldmVyeXRoaW5nIHdlIGNhbiBmcm9tIHRoZSBydW50aW1lLXJldmVyc2UgcGFja2FnZSBkYXRhCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZGljdFtwXVsnb2JqZWN0J10ucmVjaXBlID0gcmVjaXBlc1twa2dwbm1hcFtwXVsnUE4nXV0KKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZWRpY3RbcF1bJ29iamVjdCddLnZlcnNpb24gPSBwa2dwbm1hcFtwXVsnUFYnXQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZGljdFtwXVsnb2JqZWN0J10uaW5zdGFsbGVkX25hbWUgPSBwCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXS5yZXZpc2lvbiA9IHBrZ3BubWFwW3BdWydQUiddCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXS5saWNlbnNlID0gcGtncG5tYXBbcF1bJ0xJQ0VOU0UnXQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZGljdFtwXVsnb2JqZWN0J10uc2VjdGlvbiA9IHBrZ3BubWFwW3BdWydTRUNUSU9OJ10KKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZWRpY3RbcF1bJ29iamVjdCddLnN1bW1hcnkgPSBwa2dwbm1hcFtwXVsnU1VNTUFSWSddCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXS5kZXNjcmlwdGlvbiA9IHBrZ3BubWFwW3BdWydERVNDUklQVElPTiddCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXS5zaXplID0gaW50KHBrZ3BubWFwW3BdWydQS0dTSVpFJ10pCisKKyAgICAgICAgICAgICAgICAjIG5vIGZpbGVzIHJlY29yZGVkIGZvciB0aGlzIHBhY2thZ2UsIHNvIHNhdmUgZmlsZXMgaW5mbworICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZmlsZV9vYmplY3RzID0gW10KKyAgICAgICAgICAgICAgICAgICAgZm9yIHRhcmdldHBhdGggaW4gcGtncG5tYXBbcF1bJ0ZJTEVTX0lORk8nXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldGZpbGVzaXplID0gcGtncG5tYXBbcF1bJ0ZJTEVTX0lORk8nXVt0YXJnZXRwYXRoXQorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZWZpbGVfb2JqZWN0cy5hcHBlbmQoUGFja2FnZV9GaWxlKCBwYWNrYWdlID0gcGFja2FnZWRpY3RbcF1bJ29iamVjdCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSB0YXJnZXRwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSB0YXJnZXRmaWxlc2l6ZSkpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihwYWNrYWdlZmlsZV9vYmplY3RzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VfRmlsZS5vYmplY3RzLmJ1bGtfY3JlYXRlKHBhY2thZ2VmaWxlX29iamVjdHMpCisgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGVycm9ybXNnICs9ICIgIHN0cGk6IEtleSBlcnJvciwgcGFja2FnZSAlcyBrZXkgJXMgXG4iICUgKCBwLCBlICkKKworICAgICAgICAgICAgIyBzYXZlIGRpc2sgaW5zdGFsbGVkIHNpemUKKyAgICAgICAgICAgIHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXS5pbnN0YWxsZWRfc2l6ZSA9IHBhY2thZ2VkaWN0W3BdWydzaXplJ10KKyAgICAgICAgICAgIHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXS5zYXZlKCkKKworICAgICAgICAgICAgVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlLm9iamVjdHMuY3JlYXRlKHRhcmdldCA9IHRhcmdldF9vYmosIHBhY2thZ2UgPSBwYWNrYWdlZGljdFtwXVsnb2JqZWN0J10pCisKKyAgICAgICAgcGFja2FnZWRlcHNfb2JqcyA9IFtdCisgICAgICAgIGZvciBwIGluIHBhY2thZ2VkaWN0OgorICAgICAgICAgICAgZm9yIChweCxkZXB0eXBlKSBpbiBwYWNrYWdlZGljdFtwXVsnZGVwZW5kcyddOgorICAgICAgICAgICAgICAgIGlmIGRlcHR5cGUgPT0gJ2RlcGVuZHMnOgorICAgICAgICAgICAgICAgICAgICB0ZGVwdHlwZSA9IFBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1RSREVQRU5EUworICAgICAgICAgICAgICAgIGVsaWYgZGVwdHlwZSA9PSAncmVjb21tZW5kcyc6CisgICAgICAgICAgICAgICAgICAgIHRkZXB0eXBlID0gUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfVFJFQ09NTUVORFMKKworICAgICAgICAgICAgICAgIHBhY2thZ2VkZXBzX29ianMuYXBwZW5kKFBhY2thZ2VfRGVwZW5kZW5jeSggcGFja2FnZSA9IHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzX29uID0gcGFja2FnZWRpY3RbcHhdWydvYmplY3QnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBfdHlwZSA9IHRkZXB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldF9vYmopKQorCisgICAgICAgIGlmIGxlbihwYWNrYWdlZGVwc19vYmpzKSA+IDA6CisgICAgICAgICAgICBQYWNrYWdlX0RlcGVuZGVuY3kub2JqZWN0cy5idWxrX2NyZWF0ZShwYWNrYWdlZGVwc19vYmpzKQorCisgICAgICAgIGlmIGxlbihlcnJvcm1zZykgPiAwOgorICAgICAgICAgICAgbG9nZ2VyLndhcm4oImJ1aWxkaW5mb2hlbHBlcjogdGFyZ2V0X3BhY2thZ2VfaW5mbyBjb3VsZCBub3QgaWRlbnRpZnkgcmVjaXBlczogXG4lcyIsIGVycm9ybXNnKQorCisgICAgZGVmIHNhdmVfdGFyZ2V0X2ltYWdlX2ZpbGVfaW5mb3JtYXRpb24oc2VsZiwgdGFyZ2V0X29iaiwgZmlsZV9uYW1lLCBmaWxlX3NpemUpOgorICAgICAgICBUYXJnZXRfSW1hZ2VfRmlsZS5vYmplY3RzLmNyZWF0ZSggdGFyZ2V0ID0gdGFyZ2V0X29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWUgPSBmaWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9zaXplID0gZmlsZV9zaXplKQorCisgICAgZGVmIHNhdmVfYXJ0aWZhY3RfaW5mb3JtYXRpb24oc2VsZiwgYnVpbGRfb2JqLCBmaWxlX25hbWUsIGZpbGVfc2l6ZSk6CisgICAgICAgICMgd2Ugc2tpcCB0aGUgaW1hZ2UgZmlsZXMgZnJvbSBvdGhlciBidWlsZHMKKyAgICAgICAgaWYgVGFyZ2V0X0ltYWdlX0ZpbGUub2JqZWN0cy5maWx0ZXIoZmlsZV9uYW1lID0gZmlsZV9uYW1lKS5jb3VudCgpID4gMDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgZG8gbm90IHVwZGF0ZSBhcnRpZmFjdHMgZm91bmQgaW4gb3RoZXIgYnVpbGRzCisgICAgICAgIGlmIEJ1aWxkQXJ0aWZhY3Qub2JqZWN0cy5maWx0ZXIoZmlsZV9uYW1lID0gZmlsZV9uYW1lKS5jb3VudCgpID4gMDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIEJ1aWxkQXJ0aWZhY3Qub2JqZWN0cy5jcmVhdGUoYnVpbGQgPSBidWlsZF9vYmosIGZpbGVfbmFtZSA9IGZpbGVfbmFtZSwgZmlsZV9zaXplID0gZmlsZV9zaXplKQorCisgICAgZGVmIGNyZWF0ZV9sb2dtZXNzYWdlKHNlbGYsIGxvZ19pbmZvcm1hdGlvbik6CisgICAgICAgIGFzc2VydCAnYnVpbGQnIGluIGxvZ19pbmZvcm1hdGlvbgorICAgICAgICBhc3NlcnQgJ2xldmVsJyBpbiBsb2dfaW5mb3JtYXRpb24KKyAgICAgICAgYXNzZXJ0ICdtZXNzYWdlJyBpbiBsb2dfaW5mb3JtYXRpb24KKworICAgICAgICBsb2dfb2JqZWN0ID0gTG9nTWVzc2FnZS5vYmplY3RzLmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkID0gbG9nX2luZm9ybWF0aW9uWydidWlsZCddLAorICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSBsb2dfaW5mb3JtYXRpb25bJ2xldmVsJ10sCisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gbG9nX2luZm9ybWF0aW9uWydtZXNzYWdlJ10pCisKKyAgICAgICAgZm9yIHYgaW4gdmFycyhsb2dfb2JqZWN0KToKKyAgICAgICAgICAgIGlmIHYgaW4gbG9nX2luZm9ybWF0aW9uLmtleXMoKToKKyAgICAgICAgICAgICAgICB2YXJzKGxvZ19vYmplY3QpW3ZdID0gbG9nX2luZm9ybWF0aW9uW3ZdCisKKyAgICAgICAgcmV0dXJuIGxvZ19vYmplY3Quc2F2ZSgpCisKKworICAgIGRlZiBzYXZlX2J1aWxkX3BhY2thZ2VfaW5mb3JtYXRpb24oc2VsZiwgYnVpbGRfb2JqLCBwYWNrYWdlX2luZm8sIHJlY2lwZXMpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShidWlsZF9vYmosIEJ1aWxkKQorCisgICAgICAgICMgY3JlYXRlIGFuZCBzYXZlIHRoZSBvYmplY3QKKyAgICAgICAgcG5hbWUgPSBwYWNrYWdlX2luZm9bJ1BLRyddCisgICAgICAgIGlmICdPUEtHTicgaW4gcGFja2FnZV9pbmZvLmtleXMoKToKKyAgICAgICAgICAgIHBuYW1lID0gcGFja2FnZV9pbmZvWydPUEtHTiddCisKKyAgICAgICAgYnBfb2JqZWN0LCBfID0gUGFja2FnZS5vYmplY3RzLmdldF9vcl9jcmVhdGUoIGJ1aWxkID0gYnVpbGRfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHBuYW1lICkKKworICAgICAgICBicF9vYmplY3QuaW5zdGFsbGVkX25hbWUgPSBwYWNrYWdlX2luZm9bJ1BLRyddCisgICAgICAgIGJwX29iamVjdC5yZWNpcGUgPSByZWNpcGVzW3BhY2thZ2VfaW5mb1snUE4nXV0KKyAgICAgICAgYnBfb2JqZWN0LnZlcnNpb24gPSBwYWNrYWdlX2luZm9bJ1BLR1YnXQorICAgICAgICBicF9vYmplY3QucmV2aXNpb24gPSBwYWNrYWdlX2luZm9bJ1BLR1InXQorICAgICAgICBicF9vYmplY3Quc3VtbWFyeSA9IHBhY2thZ2VfaW5mb1snU1VNTUFSWSddCisgICAgICAgIGJwX29iamVjdC5kZXNjcmlwdGlvbiA9IHBhY2thZ2VfaW5mb1snREVTQ1JJUFRJT04nXQorICAgICAgICBicF9vYmplY3Quc2l6ZSA9IGludChwYWNrYWdlX2luZm9bJ1BLR1NJWkUnXSkKKyAgICAgICAgYnBfb2JqZWN0LnNlY3Rpb24gPSBwYWNrYWdlX2luZm9bJ1NFQ1RJT04nXQorICAgICAgICBicF9vYmplY3QubGljZW5zZSA9IHBhY2thZ2VfaW5mb1snTElDRU5TRSddCisgICAgICAgIGJwX29iamVjdC5zYXZlKCkKKworICAgICAgICAjIHNhdmUgYW55IGF0dGFjaGVkIGZpbGUgaW5mb3JtYXRpb24KKyAgICAgICAgcGFja2FnZWZpbGVfb2JqZWN0cyA9IFtdCisgICAgICAgIGZvciBwYXRoIGluIHBhY2thZ2VfaW5mb1snRklMRVNfSU5GTyddOgorICAgICAgICAgICAgcGFja2FnZWZpbGVfb2JqZWN0cy5hcHBlbmQoUGFja2FnZV9GaWxlKCBwYWNrYWdlID0gYnBfb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBwYWNrYWdlX2luZm9bJ0ZJTEVTX0lORk8nXVtwYXRoXSApKQorICAgICAgICBpZiBsZW4ocGFja2FnZWZpbGVfb2JqZWN0cyk6CisgICAgICAgICAgICBQYWNrYWdlX0ZpbGUub2JqZWN0cy5idWxrX2NyZWF0ZShwYWNrYWdlZmlsZV9vYmplY3RzKQorCisgICAgICAgIGRlZiBfcG9fYnluYW1lKHApOgorICAgICAgICAgICAgcGtnLCBjcmVhdGVkID0gUGFja2FnZS5vYmplY3RzLmdldF9vcl9jcmVhdGUoYnVpbGQgPSBidWlsZF9vYmosIG5hbWUgPSBwKQorICAgICAgICAgICAgaWYgY3JlYXRlZDoKKyAgICAgICAgICAgICAgICBwa2cuc2l6ZSA9IC0xCisgICAgICAgICAgICAgICAgcGtnLnNhdmUoKQorICAgICAgICAgICAgcmV0dXJuIHBrZworCisgICAgICAgIHBhY2thZ2VkZXBzX29ianMgPSBbXQorICAgICAgICAjIHNhdmUgc29mdCBkZXBlbmRlbmN5IGluZm9ybWF0aW9uCisgICAgICAgIGlmICdSREVQRU5EUycgaW4gcGFja2FnZV9pbmZvIGFuZCBwYWNrYWdlX2luZm9bJ1JERVBFTkRTJ106CisgICAgICAgICAgICBmb3IgcCBpbiBiYi51dGlscy5leHBsb2RlX2RlcHMocGFja2FnZV9pbmZvWydSREVQRU5EUyddKToKKyAgICAgICAgICAgICAgICBwYWNrYWdlZGVwc19vYmpzLmFwcGVuZChQYWNrYWdlX0RlcGVuZGVuY3koICBwYWNrYWdlID0gYnBfb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICBkZXBlbmRzX29uID0gX3BvX2J5bmFtZShwKSwgZGVwX3R5cGUgPSBQYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9SREVQRU5EUykpCisgICAgICAgIGlmICdSUFJPVklERVMnIGluIHBhY2thZ2VfaW5mbyBhbmQgcGFja2FnZV9pbmZvWydSUFJPVklERVMnXToKKyAgICAgICAgICAgIGZvciBwIGluIGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhwYWNrYWdlX2luZm9bJ1JQUk9WSURFUyddKToKKyAgICAgICAgICAgICAgICBwYWNrYWdlZGVwc19vYmpzLmFwcGVuZChQYWNrYWdlX0RlcGVuZGVuY3koICBwYWNrYWdlID0gYnBfb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICBkZXBlbmRzX29uID0gX3BvX2J5bmFtZShwKSwgZGVwX3R5cGUgPSBQYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9SUFJPVklERVMpKQorICAgICAgICBpZiAnUlJFQ09NTUVORFMnIGluIHBhY2thZ2VfaW5mbyBhbmQgcGFja2FnZV9pbmZvWydSUkVDT01NRU5EUyddOgorICAgICAgICAgICAgZm9yIHAgaW4gYmIudXRpbHMuZXhwbG9kZV9kZXBzKHBhY2thZ2VfaW5mb1snUlJFQ09NTUVORFMnXSk6CisgICAgICAgICAgICAgICAgcGFja2FnZWRlcHNfb2Jqcy5hcHBlbmQoUGFja2FnZV9EZXBlbmRlbmN5KCAgcGFja2FnZSA9IGJwX29iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kc19vbiA9IF9wb19ieW5hbWUocCksIGRlcF90eXBlID0gUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfUlJFQ09NTUVORFMpKQorICAgICAgICBpZiAnUlNVR0dFU1RTJyBpbiBwYWNrYWdlX2luZm8gYW5kIHBhY2thZ2VfaW5mb1snUlNVR0dFU1RTJ106CisgICAgICAgICAgICBmb3IgcCBpbiBiYi51dGlscy5leHBsb2RlX2RlcHMocGFja2FnZV9pbmZvWydSU1VHR0VTVFMnXSk6CisgICAgICAgICAgICAgICAgcGFja2FnZWRlcHNfb2Jqcy5hcHBlbmQoUGFja2FnZV9EZXBlbmRlbmN5KCAgcGFja2FnZSA9IGJwX29iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kc19vbiA9IF9wb19ieW5hbWUocCksIGRlcF90eXBlID0gUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfUlNVR0dFU1RTKSkKKyAgICAgICAgaWYgJ1JSRVBMQUNFUycgaW4gcGFja2FnZV9pbmZvIGFuZCBwYWNrYWdlX2luZm9bJ1JSRVBMQUNFUyddOgorICAgICAgICAgICAgZm9yIHAgaW4gYmIudXRpbHMuZXhwbG9kZV9kZXBzKHBhY2thZ2VfaW5mb1snUlJFUExBQ0VTJ10pOgorICAgICAgICAgICAgICAgIHBhY2thZ2VkZXBzX29ianMuYXBwZW5kKFBhY2thZ2VfRGVwZW5kZW5jeSggIHBhY2thZ2UgPSBicF9vYmplY3QsCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZHNfb24gPSBfcG9fYnluYW1lKHApLCBkZXBfdHlwZSA9IFBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1JSRVBMQUNFUykpCisgICAgICAgIGlmICdSQ09ORkxJQ1RTJyBpbiBwYWNrYWdlX2luZm8gYW5kIHBhY2thZ2VfaW5mb1snUkNPTkZMSUNUUyddOgorICAgICAgICAgICAgZm9yIHAgaW4gYmIudXRpbHMuZXhwbG9kZV9kZXBzKHBhY2thZ2VfaW5mb1snUkNPTkZMSUNUUyddKToKKyAgICAgICAgICAgICAgICBwYWNrYWdlZGVwc19vYmpzLmFwcGVuZChQYWNrYWdlX0RlcGVuZGVuY3koICBwYWNrYWdlID0gYnBfb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICBkZXBlbmRzX29uID0gX3BvX2J5bmFtZShwKSwgZGVwX3R5cGUgPSBQYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9SQ09ORkxJQ1RTKSkKKworICAgICAgICBpZiBsZW4ocGFja2FnZWRlcHNfb2JqcykgPiAwOgorICAgICAgICAgICAgUGFja2FnZV9EZXBlbmRlbmN5Lm9iamVjdHMuYnVsa19jcmVhdGUocGFja2FnZWRlcHNfb2JqcykKKworICAgICAgICByZXR1cm4gYnBfb2JqZWN0CisKKyAgICBkZWYgc2F2ZV9idWlsZF92YXJpYWJsZXMoc2VsZiwgYnVpbGRfb2JqLCB2YXJkdW1wKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYnVpbGRfb2JqLCBCdWlsZCkKKworICAgICAgICBoZWxwdGV4dF9vYmplY3RzID0gW10KKyAgICAgICAgZm9yIGsgaW4gdmFyZHVtcDoKKyAgICAgICAgICAgIGRlc2MgPSB2YXJkdW1wW2tdWydkb2MnXQorICAgICAgICAgICAgaWYgZGVzYyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHZhcl93b3JkcyA9IFt3b3JkIGZvciB3b3JkIGluIGsuc3BsaXQoJ18nKV0KKyAgICAgICAgICAgICAgICByb290X3ZhciA9ICJfIi5qb2luKFt3b3JkIGZvciB3b3JkIGluIHZhcl93b3JkcyBpZiB3b3JkLmlzdXBwZXIoKV0pCisgICAgICAgICAgICAgICAgaWYgcm9vdF92YXIgYW5kIHJvb3RfdmFyICE9IGsgYW5kIHJvb3RfdmFyIGluIHZhcmR1bXA6CisgICAgICAgICAgICAgICAgICAgIGRlc2MgPSB2YXJkdW1wW3Jvb3RfdmFyXVsnZG9jJ10KKyAgICAgICAgICAgIGlmIGRlc2MgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBkZXNjID0gJycKKyAgICAgICAgICAgIGlmIGxlbihkZXNjKToKKyAgICAgICAgICAgICAgICBoZWxwdGV4dF9vYmplY3RzLmFwcGVuZChIZWxwVGV4dChidWlsZD1idWlsZF9vYmosCisgICAgICAgICAgICAgICAgICAgIGFyZWE9SGVscFRleHQuVkFSSUFCTEUsCisgICAgICAgICAgICAgICAgICAgIGtleT1rLAorICAgICAgICAgICAgICAgICAgICB0ZXh0PWRlc2MpKQorICAgICAgICAgICAgaWYgbm90IGJvb2wodmFyZHVtcFtrXVsnZnVuYyddKToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhcmR1bXBba11bJ3YnXQorICAgICAgICAgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gJycKKyAgICAgICAgICAgICAgICB2YXJpYWJsZV9vYmogPSBWYXJpYWJsZS5vYmplY3RzLmNyZWF0ZSggYnVpbGQgPSBidWlsZF9vYmosCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlX25hbWUgPSBrLAorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZV92YWx1ZSA9IHZhbHVlLAorICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2MpCisKKyAgICAgICAgICAgICAgICB2YXJoaXN0X29iamVjdHMgPSBbXQorICAgICAgICAgICAgICAgIGZvciB2aCBpbiB2YXJkdW1wW2tdWydoaXN0b3J5J106CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCAnZG9jdW1lbnRhdGlvbi5jb25mJyBpbiB2aFsnZmlsZSddOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaGlzdF9vYmplY3RzLmFwcGVuZChWYXJpYWJsZUhpc3RvcnkoIHZhcmlhYmxlID0gdmFyaWFibGVfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWUgPSB2aFsnZmlsZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX251bWJlciA9IHZoWydsaW5lJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IHZoWydvcCddKSkKKyAgICAgICAgICAgICAgICBpZiBsZW4odmFyaGlzdF9vYmplY3RzKToKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVIaXN0b3J5Lm9iamVjdHMuYnVsa19jcmVhdGUodmFyaGlzdF9vYmplY3RzKQorCisgICAgICAgIEhlbHBUZXh0Lm9iamVjdHMuYnVsa19jcmVhdGUoaGVscHRleHRfb2JqZWN0cykKKworCitjbGFzcyBNb2NrRXZlbnQob2JqZWN0KToKKyAgICAiIiIgVGhpcyBvYmplY3QgaXMgdXNlZCB0byBjcmVhdGUgZXZlbnQsIGZvciB3aGljaCBub3JtYWwgZXZlbnQtcHJvY2Vzc2luZyBtZXRob2RzIGNhbgorICAgICAgICBiZSB1c2VkLCBvdXQgb2YgZGF0YSB0aGF0IGlzIG5vdCBjb21pbmcgdmlhIGFuIGFjdHVhbCBldmVudAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5tc2cgPSBOb25lCisgICAgICAgIHNlbGYubGV2ZWxubyA9IE5vbmUKKyAgICAgICAgc2VsZi50YXNrbmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi50YXNraGFzaCA9IE5vbmUKKyAgICAgICAgc2VsZi5wYXRobmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi5saW5lbm8gPSBOb25lCisKKworY2xhc3MgQnVpbGRJbmZvSGVscGVyKG9iamVjdCk6CisgICAgIiIiIFRoaXMgY2xhc3MgZ2F0aGVycyB0aGUgYnVpbGQgaW5mb3JtYXRpb24gZnJvbSB0aGUgc2VydmVyIGFuZCBzZW5kcyBpdAorICAgICAgICB0b3dhcmRzIHRoZSBPUk0gd3JhcHBlciBmb3Igc3RvcmluZyBpbiB0aGUgZGF0YWJhc2UKKyAgICAgICAgSXQgaXMgaW5zdGFudGlhdGVkIG9uY2UgcGVyIGJ1aWxkCisgICAgICAgIEtlZXBzIGluIG1lbW9yeSBhbGwgZGF0YSB0aGF0IG5lZWRzIG1hdGNoaW5nIGJlZm9yZSB3cml0aW5nIGl0IHRvIHRoZSBkYXRhYmFzZQorICAgICIiIgorCisgICAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcworICAgICMgdGhlIGNvZGUgd2lsbCBsb29rIGludG8gdGhlIHByb3RlY3RlZCB2YXJpYWJsZXMgb2YgdGhlIGV2ZW50OyBubyBlYXN5IHdheSBhcm91bmQgdGhpcworICAgICMgcHlsaW50OiBkaXNhYmxlPWJhZC1jb250aW51YXRpb24KKyAgICAjIHdlIGRvIG5vdCBmb2xsb3cgdGhlIHB5dGhvbiBjb252ZW50aW9ucyBmb3IgY29udGludWF0aW9uIGluZGVudGF0aW9uIGR1ZSB0byBsb25nIGxpbmVzIGhlcmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXIsIGhhc19idWlsZF9oaXN0b3J5ID0gRmFsc2UpOgorICAgICAgICBzZWxmLmludGVybmFsX3N0YXRlID0ge30KKyAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFza2RhdGEnXSA9IHt9CisgICAgICAgIHNlbGYudGFza19vcmRlciA9IDAKKyAgICAgICAgc2VsZi5hdXRvY29tbWl0X3N0ZXAgPSAxCisgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyCisgICAgICAgICMgd2UgdXNlIG1hbnVhbCB0cmFuc2FjdGlvbnMgaWYgdGhlIGRhdGFiYXNlIGRvZXNuJ3QgYXV0b2NvbW1pdCBvbiB1cworICAgICAgICBpZiBub3QgY29ubmVjdGlvbi5mZWF0dXJlcy5hdXRvY29tbWl0c193aGVuX2F1dG9jb21taXRfaXNfb2ZmOgorICAgICAgICAgICAgdHJhbnNhY3Rpb24uc2V0X2F1dG9jb21taXQoRmFsc2UpCisgICAgICAgIHNlbGYub3JtX3dyYXBwZXIgPSBPUk1XcmFwcGVyKCkKKyAgICAgICAgc2VsZi5oYXNfYnVpbGRfaGlzdG9yeSA9IGhhc19idWlsZF9oaXN0b3J5CisgICAgICAgIHNlbGYudG1wX2RpciA9IHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJUTVBESVIiXSlbMF0KKyAgICAgICAgc2VsZi5icmJlICAgID0gc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIlRPQVNURVJfQlJCRSJdKVswXQorICAgICAgICBzZWxmLnByb2plY3QgPSBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiVE9BU1RFUl9QUk9KRUNUIl0pWzBdCisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiYnVpbGRpbmZvaGVscGVyOiBCdWlsZCBpbmZvIGhlbHBlciBpbml0ZWQgJXMiICUgdmFycyhzZWxmKSkKKworCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMjIG1ldGhvZHMgdG8gY29udmVydCBldmVudC9leHRlcm5hbCBpbmZvIGludG8gb2JqZWN0cyB0aGF0IHRoZSBPUk0gbGF5ZXIgdXNlcworCisKKyAgICBkZWYgX2dldF9idWlsZF9pbmZvcm1hdGlvbihzZWxmKToKKyAgICAgICAgYnVpbGRfaW5mbyA9IHt9CisgICAgICAgICMgR2VuZXJhdGUgYW4gaWRlbnRpZmllciBmb3IgZWFjaCBuZXcgYnVpbGQKKworICAgICAgICBidWlsZF9pbmZvWydtYWNoaW5lJ10gPSBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiTUFDSElORSJdKVswXQorICAgICAgICBidWlsZF9pbmZvWydkaXN0cm8nXSA9IHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJESVNUUk8iXSlbMF0KKyAgICAgICAgYnVpbGRfaW5mb1snZGlzdHJvX3ZlcnNpb24nXSA9IHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJESVNUUk9fVkVSU0lPTiJdKVswXQorICAgICAgICBidWlsZF9pbmZvWydzdGFydGVkX29uJ10gPSB0aW1lem9uZS5ub3coKQorICAgICAgICBidWlsZF9pbmZvWydjb21wbGV0ZWRfb24nXSA9IHRpbWV6b25lLm5vdygpCisgICAgICAgIGJ1aWxkX2luZm9bJ2Nvb2tlcl9sb2dfcGF0aCddID0gc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCX0NPTlNPTEVMT0ciXSlbMF0KKyAgICAgICAgYnVpbGRfaW5mb1snYnVpbGRfbmFtZSddID0gc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJVSUxETkFNRSJdKVswXQorICAgICAgICBidWlsZF9pbmZvWydiaXRiYWtlX3ZlcnNpb24nXSA9IHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQl9WRVJTSU9OIl0pWzBdCisKKyAgICAgICAgcmV0dXJuIGJ1aWxkX2luZm8KKworICAgIGRlZiBfZ2V0X3Rhc2tfaW5mb3JtYXRpb24oc2VsZiwgZXZlbnQsIHJlY2lwZSk6CisgICAgICAgIGFzc2VydCAndGFza25hbWUnIGluIHZhcnMoZXZlbnQpCisKKyAgICAgICAgdGFza19pbmZvcm1hdGlvbiA9IHt9CisgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ2J1aWxkJ10gPSBzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddCisgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ291dGNvbWUnXSA9IFRhc2suT1VUQ09NRV9OQQorICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydyZWNpcGUnXSA9IHJlY2lwZQorICAgICAgICB0YXNrX2luZm9ybWF0aW9uWyd0YXNrX25hbWUnXSA9IGV2ZW50LnRhc2tuYW1lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgc29tZSB0YXNrcyBkb24ndCBjb21lIHdpdGggYSBoYXNoLiBhbmQgdGhhdCdzIG9rCisgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydzc3RhdGVfY2hlY2tzdW0nXSA9IGV2ZW50LnRhc2toYXNoCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIHRhc2tfaW5mb3JtYXRpb24KKworICAgIGRlZiBfZ2V0X2xheWVyX3ZlcnNpb25fZm9yX3BhdGgoc2VsZiwgcGF0aCk6CisgICAgICAgIGFzc2VydCBwYXRoLnN0YXJ0c3dpdGgoIi8iKQorICAgICAgICBhc3NlcnQgJ2J1aWxkJyBpbiBzZWxmLmludGVybmFsX3N0YXRlCisKKyAgICAgICAgaWYgc2VsZi5icmJlIGlzIE5vbmU6CisgICAgICAgICAgICBkZWYgX3Nsa2V5X2ludGVyYWN0aXZlKGxheWVyX3ZlcnNpb24pOgorICAgICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGxheWVyX3ZlcnNpb24sIExheWVyX1ZlcnNpb24pCisgICAgICAgICAgICAgICAgcmV0dXJuIGxlbihsYXllcl92ZXJzaW9uLmxvY2FsX3BhdGgpCisKKyAgICAgICAgICAgICMgSGV1cmlzdGljczogd2UgYWx3YXlzIG1hdGNoIHJlY2lwZSB0byB0aGUgZGVlcGVzdCBsYXllciBwYXRoIGluIHRoZSBkaXNjb3ZlcmVkIGxheWVycworICAgICAgICAgICAgZm9yIGx2byBpbiBzb3J0ZWQoc2VsZi5vcm1fd3JhcHBlci5sYXllcl92ZXJzaW9uX29iamVjdHMsIHJldmVyc2U9VHJ1ZSwga2V5PV9zbGtleV9pbnRlcmFjdGl2ZSk6CisgICAgICAgICAgICAgICAgIyB3ZSBjYW4gbWF0Y2ggdG8gdGhlIHJlY2lwZSBmaWxlIHBhdGgKKyAgICAgICAgICAgICAgICBpZiBwYXRoLnN0YXJ0c3dpdGgobHZvLmxvY2FsX3BhdGgpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbHZvCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJyX2lkLCBiZV9pZCA9IHNlbGYuYnJiZS5zcGxpdCgiOiIpCisgICAgICAgICAgICBmcm9tIGJsZGNvbnRyb2wuYmJjb250cm9sbGVyIGltcG9ydCBnZXRCdWlsZEVudmlyb25tZW50Q29udHJvbGxlcgorICAgICAgICAgICAgYmMgPSBnZXRCdWlsZEVudmlyb25tZW50Q29udHJvbGxlcihwayA9IGJlX2lkKQorCisgICAgICAgICAgICBkZWYgX3Nsa2V5X21hbmFnZWQobGF5ZXJfdmVyc2lvbik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxlbihiYy5nZXRHaXRDbG9uZURpcmVjdG9yeShsYXllcl92ZXJzaW9uLmdpdHVybCwgbGF5ZXJfdmVyc2lvbi5jb21taXQpICsgbGF5ZXJfdmVyc2lvbi5kaXJwYXRoKQorCisgICAgICAgICAgICAjIEhldXJpc3RpY3M6IHdlIG1hdGNoIHRoZSBwYXRoIHRvIHdoZXJlIHRoZSBsYXllcnMgaGF2ZSBiZWVuIGNoZWNrZWQgb3V0CisgICAgICAgICAgICBmb3IgYnJsIGluIHNvcnRlZChCdWlsZFJlcXVlc3Qub2JqZWN0cy5nZXQocGsgPSBicl9pZCkuYnJsYXllcl9zZXQuYWxsKCksIHJldmVyc2UgPSBUcnVlLCBrZXkgPSBfc2xrZXlfbWFuYWdlZCk6CisgICAgICAgICAgICAgICAgbG9jYWxkaXJuYW1lID0gb3MucGF0aC5qb2luKGJjLmdldEdpdENsb25lRGlyZWN0b3J5KGJybC5naXR1cmwsIGJybC5jb21taXQpLCBicmwuZGlycGF0aCkKKyAgICAgICAgICAgICAgICAjIHdlIGdldCBhIHJlbGF0aXZlIHBhdGgsIHVubGVzcyBydW5uaW5nIGluIEhFQUQgbW9kZSB3aGVyZSB0aGUgcGF0aCBpcyBhYnNvbHV0ZQorICAgICAgICAgICAgICAgIGlmIG5vdCBsb2NhbGRpcm5hbWUuc3RhcnRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgICAgICBsb2NhbGRpcm5hbWUgPSBvcy5wYXRoLmpvaW4oYmMuYmUuc291cmNlZGlyLCBsb2NhbGRpcm5hbWUpCisgICAgICAgICAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKGxvY2FsZGlybmFtZSk6CisgICAgICAgICAgICAgICAgICAgICNsb2dnZXIud2FybigiLS0gbWFuYWdlZDogbWF0Y2hlZCBwYXRoICVzIHdpdGggbGF5ZXIgJXMgIiAlIChwYXRoLCBsb2NhbGRpcm5hbWUpKQorICAgICAgICAgICAgICAgICAgICAjIHdlIG1hdGNoZWQgdGhlIEJSTGF5ZXIsIGJ1dCB3ZSBuZWVkIHRoZSBsYXllcl92ZXJzaW9uIHRoYXQgZ2VuZXJhdGVkIHRoaXMgYnIKKyAgICAgICAgICAgICAgICAgICAgZm9yIGx2byBpbiBzZWxmLm9ybV93cmFwcGVyLmxheWVyX3ZlcnNpb25fb2JqZWN0czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGJybC5uYW1lID09IGx2by5sYXllci5uYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsdm8KKworICAgICAgICAjaWYgd2UgZ2V0IGhlcmUsIHdlIGRpZG4ndCByZWFkIGxheWVycyBjb3JyZWN0bHk7IGR1bXAgd2hhdGV2ZXIgaW5mb3JtYXRpb24gd2UgaGF2ZSBvbiB0aGUgZXJyb3IgbG9nCisgICAgICAgIGxvZ2dlci53YXJuKCJDb3VsZCBub3QgbWF0Y2ggbGF5ZXIgdmVyc2lvbiBmb3IgcmVjaXBlIHBhdGggJXMgOiAlcyIsIHBhdGgsIHNlbGYub3JtX3dyYXBwZXIubGF5ZXJfdmVyc2lvbl9vYmplY3RzKQorCisgICAgICAgICNtb2NrdXAgdGhlIG5ldyBsYXllcgorICAgICAgICB1bmtub3duX2xheWVyLCBfID0gTGF5ZXIub2JqZWN0cy5nZXRfb3JfY3JlYXRlKG5hbWU9Il9fRklYTUVfX3VuaWRlbnRpZmllZF9sYXllciIsIGxheWVyX2luZGV4X3VybD0iIikKKyAgICAgICAgdW5rbm93bl9sYXllcl92ZXJzaW9uX29iaiwgXyA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXRfb3JfY3JlYXRlKGxheWVyID0gdW5rbm93bl9sYXllciwgYnVpbGQgPSBzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddKQorCisgICAgICAgICMgYXBwZW5kIGl0IHNvIHdlIGRvbid0IHJ1biBpbnRvIHRoaXMgZXJyb3IgYWdhaW4gYW5kIGFnYWluCisgICAgICAgIHNlbGYub3JtX3dyYXBwZXIubGF5ZXJfdmVyc2lvbl9vYmplY3RzLmFwcGVuZCh1bmtub3duX2xheWVyX3ZlcnNpb25fb2JqKQorCisgICAgICAgIHJldHVybiB1bmtub3duX2xheWVyX3ZlcnNpb25fb2JqCisKKyAgICBkZWYgX2dldF9yZWNpcGVfaW5mb3JtYXRpb25fZnJvbV90YXNrZmlsZShzZWxmLCB0YXNrZmlsZSk6CisgICAgICAgIGxvY2FsZmlsZXBhdGggPSB0YXNrZmlsZS5zcGxpdCgiOiIpWy0xXQorICAgICAgICBmaWxlcGF0aF9mbGFncyA9ICI6Ii5qb2luKHNvcnRlZCh0YXNrZmlsZS5zcGxpdCgiOiIpWzotMV0pKQorICAgICAgICBsYXllcl92ZXJzaW9uX29iaiA9IHNlbGYuX2dldF9sYXllcl92ZXJzaW9uX2Zvcl9wYXRoKGxvY2FsZmlsZXBhdGgpCisKKworCisgICAgICAgIHJlY2lwZV9pbmZvID0ge30KKyAgICAgICAgcmVjaXBlX2luZm9bJ2xheWVyX3ZlcnNpb24nXSA9IGxheWVyX3ZlcnNpb25fb2JqCisgICAgICAgIHJlY2lwZV9pbmZvWydmaWxlX3BhdGgnXSA9IGxvY2FsZmlsZXBhdGgKKyAgICAgICAgcmVjaXBlX2luZm9bJ3BhdGhmbGFncyddID0gZmlsZXBhdGhfZmxhZ3MKKworICAgICAgICBpZiByZWNpcGVfaW5mb1snZmlsZV9wYXRoJ10uc3RhcnRzd2l0aChyZWNpcGVfaW5mb1snbGF5ZXJfdmVyc2lvbiddLmxvY2FsX3BhdGgpOgorICAgICAgICAgICAgcmVjaXBlX2luZm9bJ2ZpbGVfcGF0aCddID0gcmVjaXBlX2luZm9bJ2ZpbGVfcGF0aCddW2xlbihyZWNpcGVfaW5mb1snbGF5ZXJfdmVyc2lvbiddLmxvY2FsX3BhdGgpOl0ubHN0cmlwKCIvIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiUmVjaXBlIGZpbGUgcGF0aCAlcyBpcyBub3QgdW5kZXIgbGF5ZXIgdmVyc2lvbiBhdCAlcyIgJSAocmVjaXBlX2luZm9bJ2ZpbGVfcGF0aCddLCByZWNpcGVfaW5mb1snbGF5ZXJfdmVyc2lvbiddLmxvY2FsX3BhdGgpKQorCisgICAgICAgIHJldHVybiByZWNpcGVfaW5mbworCisgICAgZGVmIF9nZXRfcGF0aF9pbmZvcm1hdGlvbihzZWxmLCB0YXNrX29iamVjdCk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHRhc2tfb2JqZWN0LCBUYXNrKQorICAgICAgICBidWlsZF9zdGF0c19mb3JtYXQgPSAie3RtcGRpcn0vYnVpbGRzdGF0cy97dGFyZ2V0fS17bWFjaGluZX0ve2J1aWxkbmFtZX0ve3BhY2thZ2V9LyIKKyAgICAgICAgYnVpbGRfc3RhdHNfcGF0aCA9IFtdCisKKyAgICAgICAgZm9yIHQgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFyZ2V0cyddOgorICAgICAgICAgICAgdGFyZ2V0ID0gdC50YXJnZXQKKyAgICAgICAgICAgIG1hY2hpbmUgPSBzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddLm1hY2hpbmUKKyAgICAgICAgICAgIGJ1aWxkbmFtZSA9IHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2J1aWxkJ10uYnVpbGRfbmFtZQorICAgICAgICAgICAgcGUsIHB2ID0gdGFza19vYmplY3QucmVjaXBlLnZlcnNpb24uc3BsaXQoIjoiLDEpCisgICAgICAgICAgICBpZiBsZW4ocGUpID4gMDoKKyAgICAgICAgICAgICAgICBwYWNrYWdlID0gdGFza19vYmplY3QucmVjaXBlLm5hbWUgKyAiLSIgKyBwZSArICJfIiArIHB2CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhY2thZ2UgPSB0YXNrX29iamVjdC5yZWNpcGUubmFtZSArICItIiArIHB2CisKKyAgICAgICAgICAgIGJ1aWxkX3N0YXRzX3BhdGguYXBwZW5kKGJ1aWxkX3N0YXRzX2Zvcm1hdC5mb3JtYXQodG1wZGlyPXNlbGYudG1wX2RpciwgdGFyZ2V0PXRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZT1tYWNoaW5lLCBidWlsZG5hbWU9YnVpbGRuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlPXBhY2thZ2UpKQorCisgICAgICAgIHJldHVybiBidWlsZF9zdGF0c19wYXRoCisKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyMgZXh0ZXJuYWwgYXZhaWxhYmxlIG1ldGhvZHMgdG8gc3RvcmUgaW5mb3JtYXRpb24KKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9nZXRfZGF0YV9mcm9tX2V2ZW50KGV2ZW50KToKKyAgICAgICAgZXZkYXRhID0gTm9uZQorICAgICAgICBpZiAnX2xvY2FsZGF0YScgaW4gdmFycyhldmVudCk6CisgICAgICAgICAgICBldmRhdGEgPSBldmVudC5fbG9jYWxkYXRhCisgICAgICAgIGVsaWYgJ2RhdGEnIGluIHZhcnMoZXZlbnQpOgorICAgICAgICAgICAgZXZkYXRhID0gZXZlbnQuZGF0YQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFdmVudCB3aXRoIG5laXRoZXIgX2xvY2FsZGF0YSBvciBkYXRhIHByb3BlcnRpZXMiKQorICAgICAgICByZXR1cm4gZXZkYXRhCisKKyAgICBkZWYgc3RvcmVfbGF5ZXJfaW5mbyhzZWxmLCBldmVudCk6CisgICAgICAgIGxheWVyaW5mb3MgPSBCdWlsZEluZm9IZWxwZXIuX2dldF9kYXRhX2Zyb21fZXZlbnQoZXZlbnQpCisgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2x2cyddID0ge30KKyAgICAgICAgZm9yIGxheWVyIGluIGxheWVyaW5mb3M6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsnbHZzJ11bc2VsZi5vcm1fd3JhcHBlci5nZXRfdXBkYXRlX2xheWVyX29iamVjdChsYXllcmluZm9zW2xheWVyXSwgc2VsZi5icmJlKV0gPSBsYXllcmluZm9zW2xheWVyXVsndmVyc2lvbiddCisgICAgICAgICAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsnbHZzJ11bc2VsZi5vcm1fd3JhcHBlci5nZXRfdXBkYXRlX2xheWVyX29iamVjdChsYXllcmluZm9zW2xheWVyXSwgc2VsZi5icmJlKV1bJ2xvY2FsX3BhdGgnXSA9IGxheWVyaW5mb3NbbGF5ZXJdWydsb2NhbF9wYXRoJ10KKyAgICAgICAgICAgIGV4Y2VwdCBOb3RFeGlzdGluZyBhcyBuZWU6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oImJ1aWxkaW5mb2hlbHBlcjogY2Fubm90IGlkZW50aWZ5IGxheWVyIGV4Y2VwdGlvbjolcyAiLCBuZWUpCisKKworICAgIGRlZiBzdG9yZV9zdGFydGVkX2J1aWxkKHNlbGYsIGV2ZW50KToKKyAgICAgICAgYXNzZXJ0ICdfcGtncycgaW4gdmFycyhldmVudCkKKyAgICAgICAgYnVpbGRfaW5mb3JtYXRpb24gPSBzZWxmLl9nZXRfYnVpbGRfaW5mb3JtYXRpb24oKQorCisgICAgICAgIGJ1aWxkX29iaiA9IHNlbGYub3JtX3dyYXBwZXIuY3JlYXRlX2J1aWxkX29iamVjdChidWlsZF9pbmZvcm1hdGlvbiwgc2VsZi5icmJlLCBzZWxmLnByb2plY3QpCisKKyAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXSA9IGJ1aWxkX29iagorCisgICAgICAgICMgc2F2ZSBsYXllciB2ZXJzaW9uIGluZm9ybWF0aW9uIGZvciB0aGlzIGJ1aWxkCisgICAgICAgIGlmIG5vdCAnbHZzJyBpbiBzZWxmLmludGVybmFsX3N0YXRlOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJMYXllciB2ZXJzaW9uIGluZm9ybWF0aW9uIG5vdCBmb3VuZDsgQ2hlY2sgaWYgdGhlIGJpdGJha2Ugc2VydmVyIHdhcyBjb25maWd1cmVkIHRvIGluaGVyaXQgdG9hc3Rlci5iYmNsYXNzLiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgbGF5ZXJfb2JqIGluIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2x2cyddOgorICAgICAgICAgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuZ2V0X3VwZGF0ZV9sYXllcl92ZXJzaW9uX29iamVjdChidWlsZF9vYmosIGxheWVyX29iaiwgc2VsZi5pbnRlcm5hbF9zdGF0ZVsnbHZzJ11bbGF5ZXJfb2JqXSkKKworICAgICAgICAgICAgZGVsIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2x2cyddCisKKyAgICAgICAgIyBjcmVhdGUgdGFyZ2V0IGluZm9ybWF0aW9uCisgICAgICAgIHRhcmdldF9pbmZvcm1hdGlvbiA9IHt9CisgICAgICAgIHRhcmdldF9pbmZvcm1hdGlvblsndGFyZ2V0cyddID0gZXZlbnQuX3BrZ3MKKyAgICAgICAgdGFyZ2V0X2luZm9ybWF0aW9uWydidWlsZCddID0gYnVpbGRfb2JqCisKKyAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFyZ2V0cyddID0gc2VsZi5vcm1fd3JhcHBlci5jcmVhdGVfdGFyZ2V0X29iamVjdHModGFyZ2V0X2luZm9ybWF0aW9uKQorCisgICAgICAgICMgU2F2ZSBidWlsZCBjb25maWd1cmF0aW9uCisgICAgICAgIGRhdGEgPSBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsiZ2V0QWxsS2V5c1dpdGhGbGFncyIsIFsiZG9jIiwgImZ1bmMiXV0pWzBdCisKKyAgICAgICAgIyBjb252ZXJ0IHRoZSBwYXRocyBmcm9tIGFic29sdXRlIHRvIHJlbGF0aXZlIHRvIGVpdGhlciB0aGUgYnVpbGQgZGlyZWN0b3J5IG9yIGxheWVyIGNoZWNrb3V0cworICAgICAgICBwYXRoX3ByZWZpeGVzID0gW10KKworICAgICAgICBpZiBzZWxmLmJyYmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfLCBiZV9pZCA9IHNlbGYuYnJiZS5zcGxpdCgiOiIpCisgICAgICAgICAgICBiZSA9IEJ1aWxkRW52aXJvbm1lbnQub2JqZWN0cy5nZXQocGsgPSBiZV9pZCkKKyAgICAgICAgICAgIHBhdGhfcHJlZml4ZXMuYXBwZW5kKGJlLmJ1aWxkZGlyKQorCisgICAgICAgIGZvciBsYXllciBpbiBzb3J0ZWQoc2VsZi5vcm1fd3JhcHBlci5sYXllcl92ZXJzaW9uX29iamVjdHMsIGtleSA9IGxhbWJkYSB4Omxlbih4LmxvY2FsX3BhdGgpLCByZXZlcnNlPVRydWUpOgorICAgICAgICAgICAgcGF0aF9wcmVmaXhlcy5hcHBlbmQobGF5ZXIubG9jYWxfcGF0aCkKKworICAgICAgICAjIHdlIHN0cmlwIHRoZSBwcmVmaXhlcworICAgICAgICBmb3IgayBpbiBkYXRhOgorICAgICAgICAgICAgaWYgbm90IGJvb2woZGF0YVtrXVsnZnVuYyddKToKKyAgICAgICAgICAgICAgICBmb3IgdmggaW4gZGF0YVtrXVsnaGlzdG9yeSddOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgJ2RvY3VtZW50YXRpb24uY29uZicgaW4gdmhbJ2ZpbGUnXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFic19maWxlX25hbWUgPSB2aFsnZmlsZSddCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHAgaW4gcGF0aF9wcmVmaXhlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBhYnNfZmlsZV9uYW1lLnN0YXJ0c3dpdGgocHAgKyAiLyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aFsnZmlsZSddPWFic19maWxlX25hbWVbbGVuKHBwICsgIi8iKTpdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgIyBzYXZlIHRoZSB2YXJpYWJsZXMKKyAgICAgICAgc2VsZi5vcm1fd3JhcHBlci5zYXZlX2J1aWxkX3ZhcmlhYmxlcyhidWlsZF9vYmosIGRhdGEpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuYnJiZQorCisKKyAgICBkZWYgdXBkYXRlX3RhcmdldF9pbWFnZV9maWxlKHNlbGYsIGV2ZW50KToKKyAgICAgICAgZXZkYXRhID0gQnVpbGRJbmZvSGVscGVyLl9nZXRfZGF0YV9mcm9tX2V2ZW50KGV2ZW50KQorCisgICAgICAgIGZvciB0IGluIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3RhcmdldHMnXToKKyAgICAgICAgICAgIGlmIHQuaXNfaW1hZ2UgPT0gVHJ1ZToKKyAgICAgICAgICAgICAgICBvdXRwdXRfZmlsZXMgPSBsaXN0KGV2ZGF0YS52aWV3a2V5cygpKQorICAgICAgICAgICAgICAgIGZvciBvdXRwdXQgaW4gb3V0cHV0X2ZpbGVzOgorICAgICAgICAgICAgICAgICAgICBpZiB0LnRhcmdldCBpbiBvdXRwdXQgYW5kICdyb290ZnMnIGluIG91dHB1dCBhbmQgbm90IG91dHB1dC5lbmRzd2l0aCgiLm1hbmlmZXN0Iik6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLnNhdmVfdGFyZ2V0X2ltYWdlX2ZpbGVfaW5mb3JtYXRpb24odCwgb3V0cHV0LCBldmRhdGFbb3V0cHV0XSkKKworICAgIGRlZiB1cGRhdGVfYXJ0aWZhY3RfaW1hZ2VfZmlsZShzZWxmLCBldmVudCk6CisgICAgICAgIGV2ZGF0YSA9IEJ1aWxkSW5mb0hlbHBlci5fZ2V0X2RhdGFfZnJvbV9ldmVudChldmVudCkKKyAgICAgICAgZm9yIGFydGlmYWN0X3BhdGggaW4gZXZkYXRhLmtleXMoKToKKyAgICAgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuc2F2ZV9hcnRpZmFjdF9pbmZvcm1hdGlvbihzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddLCBhcnRpZmFjdF9wYXRoLCBldmRhdGFbYXJ0aWZhY3RfcGF0aF0pCisKKyAgICBkZWYgdXBkYXRlX2J1aWxkX2luZm9ybWF0aW9uKHNlbGYsIGV2ZW50LCBlcnJvcnMsIHdhcm5pbmdzLCB0YXNrZmFpbHVyZXMpOgorICAgICAgICBpZiAnYnVpbGQnIGluIHNlbGYuaW50ZXJuYWxfc3RhdGU6CisgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLnVwZGF0ZV9idWlsZF9vYmplY3Qoc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXSwgZXJyb3JzLCB3YXJuaW5ncywgdGFza2ZhaWx1cmVzKQorCisKKyAgICBkZWYgc3RvcmVfbGljZW5zZV9tYW5pZmVzdF9wYXRoKHNlbGYsIGV2ZW50KToKKyAgICAgICAgZGVwbG95X2RpciA9IEJ1aWxkSW5mb0hlbHBlci5fZ2V0X2RhdGFfZnJvbV9ldmVudChldmVudClbJ2RlcGxveV9kaXInXQorICAgICAgICBpbWFnZV9uYW1lID0gQnVpbGRJbmZvSGVscGVyLl9nZXRfZGF0YV9mcm9tX2V2ZW50KGV2ZW50KVsnaW1hZ2VfbmFtZSddCisgICAgICAgIHBhdGggPSBkZXBsb3lfZGlyICsgIi9saWNlbnNlcy8iICsgaW1hZ2VfbmFtZSArICIvbGljZW5zZS5tYW5pZmVzdCIKKyAgICAgICAgZm9yIHRhcmdldCBpbiBzZWxmLmludGVybmFsX3N0YXRlWyd0YXJnZXRzJ106CisgICAgICAgICAgICBpZiB0YXJnZXQudGFyZ2V0IGluIGltYWdlX25hbWU6CisgICAgICAgICAgICAgICAgc2VsZi5vcm1fd3JhcHBlci51cGRhdGVfdGFyZ2V0X3NldF9saWNlbnNlX21hbmlmZXN0KHRhcmdldCwgcGF0aCkKKworCisgICAgZGVmIHN0b3JlX3N0YXJ0ZWRfdGFzayhzZWxmLCBldmVudCk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGV2ZW50LCAoYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tTdGFydGVkLCBiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tTdGFydGVkLCBiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tTa2lwcGVkKSkKKyAgICAgICAgYXNzZXJ0ICd0YXNrZmlsZScgaW4gdmFycyhldmVudCkKKyAgICAgICAgbG9jYWxmaWxlcGF0aCA9IGV2ZW50LnRhc2tmaWxlLnNwbGl0KCI6IilbLTFdCisgICAgICAgIGFzc2VydCBsb2NhbGZpbGVwYXRoLnN0YXJ0c3dpdGgoIi8iKQorCisgICAgICAgIGlkZW50aWZpZXIgPSBldmVudC50YXNrZmlsZSArICI6IiArIGV2ZW50LnRhc2tuYW1lCisKKyAgICAgICAgcmVjaXBlX2luZm9ybWF0aW9uID0gc2VsZi5fZ2V0X3JlY2lwZV9pbmZvcm1hdGlvbl9mcm9tX3Rhc2tmaWxlKGV2ZW50LnRhc2tmaWxlKQorICAgICAgICByZWNpcGUgPSBzZWxmLm9ybV93cmFwcGVyLmdldF91cGRhdGVfcmVjaXBlX29iamVjdChyZWNpcGVfaW5mb3JtYXRpb24sIFRydWUpCisKKyAgICAgICAgdGFza19pbmZvcm1hdGlvbiA9IHNlbGYuX2dldF90YXNrX2luZm9ybWF0aW9uKGV2ZW50LCByZWNpcGUpCisgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ291dGNvbWUnXSA9IFRhc2suT1VUQ09NRV9OQQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlVGFza1NraXBwZWQpOgorICAgICAgICAgICAgYXNzZXJ0ICdyZWFzb24nIGluIHZhcnMoZXZlbnQpCisgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWyd0YXNrX2V4ZWN1dGVkJ10gPSBGYWxzZQorICAgICAgICAgICAgaWYgZXZlbnQucmVhc29uID09ICJjb3ZlcmVkIjoKKyAgICAgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydvdXRjb21lJ10gPSBUYXNrLk9VVENPTUVfQ09WRVJFRAorICAgICAgICAgICAgaWYgZXZlbnQucmVhc29uID09ICJleGlzdGluZyI6CisgICAgICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnb3V0Y29tZSddID0gVGFzay5PVVRDT01FX1BSRUJVSUxUCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWyd0YXNrX2V4ZWN1dGVkJ10gPSBUcnVlCisgICAgICAgICAgICBpZiAnbm9leGVjJyBpbiB2YXJzKGV2ZW50KSBhbmQgZXZlbnQubm9leGVjID09IFRydWU6CisgICAgICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsndGFza19leGVjdXRlZCddID0gRmFsc2UKKyAgICAgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydvdXRjb21lJ10gPSBUYXNrLk9VVENPTUVfRU1QVFkKKyAgICAgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydzY3JpcHRfdHlwZSddID0gVGFzay5DT0RJTkdfTkEKKworICAgICAgICAjIGRvIG5vdCBhc3NpZ24gb3JkZXIgbnVtYmVycyB0byBzY2VuZSB0YXNrcworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tTdGFydGVkKToKKyAgICAgICAgICAgIHNlbGYudGFza19vcmRlciArPSAxCisgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydvcmRlciddID0gc2VsZi50YXNrX29yZGVyCisKKyAgICAgICAgc2VsZi5vcm1fd3JhcHBlci5nZXRfdXBkYXRlX3Rhc2tfb2JqZWN0KHRhc2tfaW5mb3JtYXRpb24pCisKKyAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFza2RhdGEnXVtpZGVudGlmaWVyXSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICdvdXRjb21lJzogdGFza19pbmZvcm1hdGlvblsnb3V0Y29tZSddLAorICAgICAgICAgICAgICAgICAgICB9CisKKworICAgIGRlZiBzdG9yZV90YXNrc19zdGF0cyhzZWxmLCBldmVudCk6CisgICAgICAgIGZvciAodGFza2ZpbGUsIHRhc2tuYW1lLCB0YXNrc3RhdHMsIHJlY2lwZW5hbWUpIGluIEJ1aWxkSW5mb0hlbHBlci5fZ2V0X2RhdGFfZnJvbV9ldmVudChldmVudCk6CisgICAgICAgICAgICBsb2NhbGZpbGVwYXRoID0gdGFza2ZpbGUuc3BsaXQoIjoiKVstMV0KKyAgICAgICAgICAgIGFzc2VydCBsb2NhbGZpbGVwYXRoLnN0YXJ0c3dpdGgoIi8iKQorCisgICAgICAgICAgICByZWNpcGVfaW5mb3JtYXRpb24gPSBzZWxmLl9nZXRfcmVjaXBlX2luZm9ybWF0aW9uX2Zyb21fdGFza2ZpbGUodGFza2ZpbGUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgcmVjaXBlX2luZm9ybWF0aW9uWydmaWxlX3BhdGgnXS5zdGFydHN3aXRoKHJlY2lwZV9pbmZvcm1hdGlvblsnbGF5ZXJfdmVyc2lvbiddLmxvY2FsX3BhdGgpOgorICAgICAgICAgICAgICAgICAgICByZWNpcGVfaW5mb3JtYXRpb25bJ2ZpbGVfcGF0aCddID0gcmVjaXBlX2luZm9ybWF0aW9uWydmaWxlX3BhdGgnXVtsZW4ocmVjaXBlX2luZm9ybWF0aW9uWydsYXllcl92ZXJzaW9uJ10ubG9jYWxfcGF0aCk6XS5sc3RyaXAoIi8iKQorCisgICAgICAgICAgICAgICAgcmVjaXBlX29iamVjdCA9IFJlY2lwZS5vYmplY3RzLmdldChsYXllcl92ZXJzaW9uID0gcmVjaXBlX2luZm9ybWF0aW9uWydsYXllcl92ZXJzaW9uJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9wYXRoX19lbmRzd2l0aCA9IHJlY2lwZV9pbmZvcm1hdGlvblsnZmlsZV9wYXRoJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHJlY2lwZW5hbWUpCisgICAgICAgICAgICBleGNlcHQgUmVjaXBlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNvdWxkIG5vdCBmaW5kIHJlY2lwZSBmb3IgcmVjaXBlX2luZm9ybWF0aW9uICVzIG5hbWUgJXMiICwgcGZvcm1hdChyZWNpcGVfaW5mb3JtYXRpb24pLCByZWNpcGVuYW1lKQorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb24gPSB7fQorICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnYnVpbGQnXSA9IHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2J1aWxkJ10KKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ3JlY2lwZSddID0gcmVjaXBlX29iamVjdAorICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsndGFza19uYW1lJ10gPSB0YXNrbmFtZQorICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnY3B1X3VzYWdlJ10gPSB0YXNrc3RhdHNbJ2NwdV91c2FnZSddCisgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydkaXNrX2lvJ10gPSB0YXNrc3RhdHNbJ2Rpc2tfaW8nXQorICAgICAgICAgICAgaWYgJ2VsYXBzZWRfdGltZScgaW4gdGFza3N0YXRzOgorICAgICAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ2VsYXBzZWRfdGltZSddID0gdGFza3N0YXRzWydlbGFwc2VkX3RpbWUnXQorICAgICAgICAgICAgc2VsZi5vcm1fd3JhcHBlci5nZXRfdXBkYXRlX3Rhc2tfb2JqZWN0KHRhc2tfaW5mb3JtYXRpb24sIFRydWUpICAjIG11c3QgZXhpc3QKKworICAgIGRlZiB1cGRhdGVfYW5kX3N0b3JlX3Rhc2soc2VsZiwgZXZlbnQpOgorICAgICAgICBhc3NlcnQgJ3Rhc2tmaWxlJyBpbiB2YXJzKGV2ZW50KQorICAgICAgICBsb2NhbGZpbGVwYXRoID0gZXZlbnQudGFza2ZpbGUuc3BsaXQoIjoiKVstMV0KKyAgICAgICAgYXNzZXJ0IGxvY2FsZmlsZXBhdGguc3RhcnRzd2l0aCgiLyIpCisKKyAgICAgICAgaWRlbnRpZmllciA9IGV2ZW50LnRhc2tmaWxlICsgIjoiICsgZXZlbnQudGFza25hbWUKKyAgICAgICAgaWYgbm90IGlkZW50aWZpZXIgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFza2RhdGEnXToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tCYXNlKToKKyAgICAgICAgICAgICAgICAjIHdlIGRvIGEgYml0IG9mIGd1ZXNzaW5nCisgICAgICAgICAgICAgICAgY2FuZGlkYXRlcyA9IFt4IGZvciB4IGluIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3Rhc2tkYXRhJ10ua2V5cygpIGlmIHguZW5kc3dpdGgoaWRlbnRpZmllcildCisgICAgICAgICAgICAgICAgaWYgbGVuKGNhbmRpZGF0ZXMpID09IDE6CisgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBjYW5kaWRhdGVzWzBdCisKKyAgICAgICAgYXNzZXJ0IGlkZW50aWZpZXIgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFza2RhdGEnXQorICAgICAgICBpZGVudGlmaWVybGlzdCA9IGlkZW50aWZpZXIuc3BsaXQoIjoiKQorICAgICAgICByZWFsdGFza2ZpbGUgPSAiOiIuam9pbihpZGVudGlmaWVybGlzdFswOmxlbihpZGVudGlmaWVybGlzdCktMV0pCisgICAgICAgIHJlY2lwZV9pbmZvcm1hdGlvbiA9IHNlbGYuX2dldF9yZWNpcGVfaW5mb3JtYXRpb25fZnJvbV90YXNrZmlsZShyZWFsdGFza2ZpbGUpCisgICAgICAgIHJlY2lwZSA9IHNlbGYub3JtX3dyYXBwZXIuZ2V0X3VwZGF0ZV9yZWNpcGVfb2JqZWN0KHJlY2lwZV9pbmZvcm1hdGlvbiwgVHJ1ZSkKKyAgICAgICAgdGFza19pbmZvcm1hdGlvbiA9IHNlbGYuX2dldF90YXNrX2luZm9ybWF0aW9uKGV2ZW50LHJlY2lwZSkKKworICAgICAgICBpZiAndGltZScgaW4gdmFycyhldmVudCk6CisgICAgICAgICAgICBpZiBub3QgJ3N0YXJ0X3RpbWUnIGluIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3Rhc2tkYXRhJ11baWRlbnRpZmllcl06CisgICAgICAgICAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFza2RhdGEnXVtpZGVudGlmaWVyXVsnc3RhcnRfdGltZSddID0gZXZlbnQudGltZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydlbmRfdGltZSddID0gZXZlbnQudGltZQorICAgICAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ3N0YXJ0X3RpbWUnXSA9IHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3Rhc2tkYXRhJ11baWRlbnRpZmllcl1bJ3N0YXJ0X3RpbWUnXQorCisgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ291dGNvbWUnXSA9IHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3Rhc2tkYXRhJ11baWRlbnRpZmllcl1bJ291dGNvbWUnXQorCisgICAgICAgIGlmICdsb2dmaWxlJyBpbiB2YXJzKGV2ZW50KToKKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ2xvZ2ZpbGUnXSA9IGV2ZW50LmxvZ2ZpbGUKKworICAgICAgICBpZiAnX21lc3NhZ2UnIGluIHZhcnMoZXZlbnQpOgorICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnbWVzc2FnZSddID0gZXZlbnQuX21lc3NhZ2UKKworICAgICAgICBpZiAndGFza2ZsYWdzJyBpbiB2YXJzKGV2ZW50KToKKyAgICAgICAgICAgICMgd2l0aCBUYXNrU3RhcnRlZCwgd2UgZ2V0IGV2ZW4gbW9yZSBpbmZvcm1hdGlvbgorICAgICAgICAgICAgaWYgJ3B5dGhvbicgaW4gZXZlbnQudGFza2ZsYWdzLmtleXMoKSBhbmQgZXZlbnQudGFza2ZsYWdzWydweXRob24nXSA9PSAnMSc6CisgICAgICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnc2NyaXB0X3R5cGUnXSA9IFRhc2suQ09ESU5HX1BZVEhPTgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydzY3JpcHRfdHlwZSddID0gVGFzay5DT0RJTkdfU0hFTEwKKworICAgICAgICBpZiB0YXNrX2luZm9ybWF0aW9uWydvdXRjb21lJ10gPT0gVGFzay5PVVRDT01FX05BOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlVGFza0NvbXBsZXRlZCwgYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tDb21wbGV0ZWQpKToKKyAgICAgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydvdXRjb21lJ10gPSBUYXNrLk9VVENPTUVfU1VDQ0VTUworICAgICAgICAgICAgICAgIGRlbCBzZWxmLmludGVybmFsX3N0YXRlWyd0YXNrZGF0YSddW2lkZW50aWZpZXJdCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIChiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tGYWlsZWQsIGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrRmFpbGVkKSk6CisgICAgICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnb3V0Y29tZSddID0gVGFzay5PVVRDT01FX0ZBSUxFRAorICAgICAgICAgICAgICAgIGRlbCBzZWxmLmludGVybmFsX3N0YXRlWyd0YXNrZGF0YSddW2lkZW50aWZpZXJdCisKKyAgICAgICAgaWYgbm90IGNvbm5lY3Rpb24uZmVhdHVyZXMuYXV0b2NvbW1pdHNfd2hlbl9hdXRvY29tbWl0X2lzX29mZjoKKyAgICAgICAgICAgICMgd2UgZm9yY2UgYSBzeW5jIHBvaW50IGhlcmUsIHRvIGdldCB0aGUgcHJvZ3Jlc3MgYmFyIHRvIHNob3cKKyAgICAgICAgICAgIGlmIHNlbGYuYXV0b2NvbW1pdF9zdGVwICUgMyA9PSAwOgorICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLnNldF9hdXRvY29tbWl0KFRydWUpCisgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24uc2V0X2F1dG9jb21taXQoRmFsc2UpCisgICAgICAgICAgICBzZWxmLmF1dG9jb21taXRfc3RlcCArPSAxCisKKyAgICAgICAgc2VsZi5vcm1fd3JhcHBlci5nZXRfdXBkYXRlX3Rhc2tfb2JqZWN0KHRhc2tfaW5mb3JtYXRpb24sIFRydWUpICMgbXVzdCBleGlzdAorCisKKyAgICBkZWYgc3RvcmVfbWlzc2VkX3N0YXRlX3Rhc2tzKHNlbGYsIGV2ZW50KToKKyAgICAgICAgZm9yIChmbiwgdGFza25hbWUsIHRhc2toYXNoLCBzc3RhdGVmaWxlKSBpbiBCdWlsZEluZm9IZWxwZXIuX2dldF9kYXRhX2Zyb21fZXZlbnQoZXZlbnQpWydtaXNzZWQnXToKKworICAgICAgICAgICAgIyBpZGVudGlmaWVyID0gZm4gKyB0YXNrbmFtZSArICJfc2V0c2NlbmUiCisgICAgICAgICAgICByZWNpcGVfaW5mb3JtYXRpb24gPSBzZWxmLl9nZXRfcmVjaXBlX2luZm9ybWF0aW9uX2Zyb21fdGFza2ZpbGUoZm4pCisgICAgICAgICAgICByZWNpcGUgPSBzZWxmLm9ybV93cmFwcGVyLmdldF91cGRhdGVfcmVjaXBlX29iamVjdChyZWNpcGVfaW5mb3JtYXRpb24pCisgICAgICAgICAgICBtZXZlbnQgPSBNb2NrRXZlbnQoKQorICAgICAgICAgICAgbWV2ZW50LnRhc2tuYW1lID0gdGFza25hbWUKKyAgICAgICAgICAgIG1ldmVudC50YXNraGFzaCA9IHRhc2toYXNoCisgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uID0gc2VsZi5fZ2V0X3Rhc2tfaW5mb3JtYXRpb24obWV2ZW50LHJlY2lwZSkKKworICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnc3RhcnRfdGltZSddID0gdGltZXpvbmUubm93KCkKKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ291dGNvbWUnXSA9IFRhc2suT1VUQ09NRV9OQQorICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnc3N0YXRlX2NoZWNrc3VtJ10gPSB0YXNraGFzaAorICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnc3N0YXRlX3Jlc3VsdCddID0gVGFzay5TU1RBVEVfTUlTUworICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsncGF0aF90b19zc3RhdGVfb2JqJ10gPSBzc3RhdGVmaWxlCisKKyAgICAgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuZ2V0X3VwZGF0ZV90YXNrX29iamVjdCh0YXNrX2luZm9ybWF0aW9uKQorCisgICAgICAgIGZvciAoZm4sIHRhc2tuYW1lLCB0YXNraGFzaCwgc3N0YXRlZmlsZSkgaW4gQnVpbGRJbmZvSGVscGVyLl9nZXRfZGF0YV9mcm9tX2V2ZW50KGV2ZW50KVsnZm91bmQnXToKKworICAgICAgICAgICAgIyBpZGVudGlmaWVyID0gZm4gKyB0YXNrbmFtZSArICJfc2V0c2NlbmUiCisgICAgICAgICAgICByZWNpcGVfaW5mb3JtYXRpb24gPSBzZWxmLl9nZXRfcmVjaXBlX2luZm9ybWF0aW9uX2Zyb21fdGFza2ZpbGUoZm4pCisgICAgICAgICAgICByZWNpcGUgPSBzZWxmLm9ybV93cmFwcGVyLmdldF91cGRhdGVfcmVjaXBlX29iamVjdChyZWNpcGVfaW5mb3JtYXRpb24pCisgICAgICAgICAgICBtZXZlbnQgPSBNb2NrRXZlbnQoKQorICAgICAgICAgICAgbWV2ZW50LnRhc2tuYW1lID0gdGFza25hbWUKKyAgICAgICAgICAgIG1ldmVudC50YXNraGFzaCA9IHRhc2toYXNoCisgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uID0gc2VsZi5fZ2V0X3Rhc2tfaW5mb3JtYXRpb24obWV2ZW50LHJlY2lwZSkKKworICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsncGF0aF90b19zc3RhdGVfb2JqJ10gPSBzc3RhdGVmaWxlCisKKyAgICAgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuZ2V0X3VwZGF0ZV90YXNrX29iamVjdCh0YXNrX2luZm9ybWF0aW9uKQorCisKKyAgICBkZWYgc3RvcmVfdGFyZ2V0X3BhY2thZ2VfZGF0YShzZWxmLCBldmVudCk6CisgICAgICAgICMgZm9yIGFsbCBpbWFnZSB0YXJnZXRzCisgICAgICAgIGZvciB0YXJnZXQgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFyZ2V0cyddOgorICAgICAgICAgICAgaWYgdGFyZ2V0LmlzX2ltYWdlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcGtnZGF0YSA9IEJ1aWxkSW5mb0hlbHBlci5fZ2V0X2RhdGFfZnJvbV9ldmVudChldmVudClbJ3BrZ2RhdGEnXQorICAgICAgICAgICAgICAgICAgICBpbWdkYXRhID0gQnVpbGRJbmZvSGVscGVyLl9nZXRfZGF0YV9mcm9tX2V2ZW50KGV2ZW50KVsnaW1nZGF0YSddW3RhcmdldC50YXJnZXRdCisgICAgICAgICAgICAgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuc2F2ZV90YXJnZXRfcGFja2FnZV9pbmZvcm1hdGlvbihzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddLCB0YXJnZXQsIGltZ2RhdGEsIHBrZ2RhdGEsIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3JlY2lwZXMnXSkKKyAgICAgICAgICAgICAgICAgICAgZmlsZWRhdGEgPSBCdWlsZEluZm9IZWxwZXIuX2dldF9kYXRhX2Zyb21fZXZlbnQoZXZlbnQpWydmaWxlZGF0YSddW3RhcmdldC50YXJnZXRdCisgICAgICAgICAgICAgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuc2F2ZV90YXJnZXRfZmlsZV9pbmZvcm1hdGlvbihzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddLCB0YXJnZXQsIGZpbGVkYXRhKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyB3ZSBtdXN0IGhhdmUgbm90IGdvdCB0aGUgZGF0YSBmb3IgdGhpcyBpbWFnZSwgbm90aGluZyB0byBzYXZlCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworCisKKyAgICBkZWYgc3RvcmVfZGVwZW5kZW5jeV9pbmZvcm1hdGlvbihzZWxmLCBldmVudCk6CisgICAgICAgIGFzc2VydCAnX2RlcGdyYXBoJyBpbiB2YXJzKGV2ZW50KQorICAgICAgICBhc3NlcnQgJ2xheWVyLXByaW9yaXRpZXMnIGluIGV2ZW50Ll9kZXBncmFwaAorICAgICAgICBhc3NlcnQgJ3BuJyBpbiBldmVudC5fZGVwZ3JhcGgKKyAgICAgICAgYXNzZXJ0ICd0ZGVwZW5kcycgaW4gZXZlbnQuX2RlcGdyYXBoCisKKyAgICAgICAgZXJyb3Jtc2cgPSAiIgorCisgICAgICAgICMgc2F2ZSBsYXllciB2ZXJzaW9uIHByaW9yaXRpZXMKKyAgICAgICAgaWYgJ2xheWVyLXByaW9yaXRpZXMnIGluIGV2ZW50Ll9kZXBncmFwaC5rZXlzKCk6CisgICAgICAgICAgICBmb3IgbHYgaW4gZXZlbnQuX2RlcGdyYXBoWydsYXllci1wcmlvcml0aWVzJ106CisgICAgICAgICAgICAgICAgKF8sIHBhdGgsIF8sIHByaW9yaXR5KSA9IGx2CisgICAgICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbl9vYmogPSBzZWxmLl9nZXRfbGF5ZXJfdmVyc2lvbl9mb3JfcGF0aChwYXRoWzE6XSkgIyBwYXRocyBzdGFydCB3aXRoIGEgXgorICAgICAgICAgICAgICAgIGFzc2VydCBsYXllcl92ZXJzaW9uX29iaiBpcyBub3QgTm9uZQorICAgICAgICAgICAgICAgIGxheWVyX3ZlcnNpb25fb2JqLnByaW9yaXR5ID0gcHJpb3JpdHkKKyAgICAgICAgICAgICAgICBsYXllcl92ZXJzaW9uX29iai5zYXZlKCkKKworICAgICAgICAjIHNhdmUgcmVjaXBlIGluZm9ybWF0aW9uCisgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3JlY2lwZXMnXSA9IHt9CisgICAgICAgIGZvciBwbiBpbiBldmVudC5fZGVwZ3JhcGhbJ3BuJ106CisKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IGV2ZW50Ll9kZXBncmFwaFsncG4nXVtwbl1bJ2ZpbGVuYW1lJ10uc3BsaXQoIjoiKVstMV0KKyAgICAgICAgICAgIHBhdGhmbGFncyA9ICI6Ii5qb2luKHNvcnRlZChldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dWydmaWxlbmFtZSddLnNwbGl0KCI6IilbOi0xXSkpCisgICAgICAgICAgICBsYXllcl92ZXJzaW9uX29iaiA9IHNlbGYuX2dldF9sYXllcl92ZXJzaW9uX2Zvcl9wYXRoKGZpbGVfbmFtZSkKKworICAgICAgICAgICAgYXNzZXJ0IGxheWVyX3ZlcnNpb25fb2JqIGlzIG5vdCBOb25lCisKKyAgICAgICAgICAgIHJlY2lwZV9pbmZvID0ge30KKyAgICAgICAgICAgIHJlY2lwZV9pbmZvWyduYW1lJ10gPSBwbgorICAgICAgICAgICAgcmVjaXBlX2luZm9bJ2xheWVyX3ZlcnNpb24nXSA9IGxheWVyX3ZlcnNpb25fb2JqCisKKyAgICAgICAgICAgIGlmICd2ZXJzaW9uJyBpbiBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dOgorICAgICAgICAgICAgICAgIHJlY2lwZV9pbmZvWyd2ZXJzaW9uJ10gPSBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dWyd2ZXJzaW9uJ10ubHN0cmlwKCI6IikKKworICAgICAgICAgICAgaWYgJ3N1bW1hcnknIGluIGV2ZW50Ll9kZXBncmFwaFsncG4nXVtwbl06CisgICAgICAgICAgICAgICAgcmVjaXBlX2luZm9bJ3N1bW1hcnknXSA9IGV2ZW50Ll9kZXBncmFwaFsncG4nXVtwbl1bJ3N1bW1hcnknXQorCisgICAgICAgICAgICBpZiAnbGljZW5zZScgaW4gZXZlbnQuX2RlcGdyYXBoWydwbiddW3BuXToKKyAgICAgICAgICAgICAgICByZWNpcGVfaW5mb1snbGljZW5zZSddID0gZXZlbnQuX2RlcGdyYXBoWydwbiddW3BuXVsnbGljZW5zZSddCisKKyAgICAgICAgICAgIGlmICdkZXNjcmlwdGlvbicgaW4gZXZlbnQuX2RlcGdyYXBoWydwbiddW3BuXToKKyAgICAgICAgICAgICAgICByZWNpcGVfaW5mb1snZGVzY3JpcHRpb24nXSA9IGV2ZW50Ll9kZXBncmFwaFsncG4nXVtwbl1bJ2Rlc2NyaXB0aW9uJ10KKworICAgICAgICAgICAgaWYgJ3NlY3Rpb24nIGluIGV2ZW50Ll9kZXBncmFwaFsncG4nXVtwbl06CisgICAgICAgICAgICAgICAgcmVjaXBlX2luZm9bJ3NlY3Rpb24nXSA9IGV2ZW50Ll9kZXBncmFwaFsncG4nXVtwbl1bJ3NlY3Rpb24nXQorCisgICAgICAgICAgICBpZiAnaG9tZXBhZ2UnIGluIGV2ZW50Ll9kZXBncmFwaFsncG4nXVtwbl06CisgICAgICAgICAgICAgICAgcmVjaXBlX2luZm9bJ2hvbWVwYWdlJ10gPSBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dWydob21lcGFnZSddCisKKyAgICAgICAgICAgIGlmICdidWd0cmFja2VyJyBpbiBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dOgorICAgICAgICAgICAgICAgIHJlY2lwZV9pbmZvWydidWd0cmFja2VyJ10gPSBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dWydidWd0cmFja2VyJ10KKworICAgICAgICAgICAgcmVjaXBlX2luZm9bJ2ZpbGVfcGF0aCddID0gZmlsZV9uYW1lCisgICAgICAgICAgICByZWNpcGVfaW5mb1sncGF0aGZsYWdzJ10gPSBwYXRoZmxhZ3MKKworICAgICAgICAgICAgaWYgcmVjaXBlX2luZm9bJ2ZpbGVfcGF0aCddLnN0YXJ0c3dpdGgocmVjaXBlX2luZm9bJ2xheWVyX3ZlcnNpb24nXS5sb2NhbF9wYXRoKToKKyAgICAgICAgICAgICAgICByZWNpcGVfaW5mb1snZmlsZV9wYXRoJ10gPSByZWNpcGVfaW5mb1snZmlsZV9wYXRoJ11bbGVuKHJlY2lwZV9pbmZvWydsYXllcl92ZXJzaW9uJ10ubG9jYWxfcGF0aCk6XS5sc3RyaXAoIi8iKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlJlY2lwZSBmaWxlIHBhdGggJXMgaXMgbm90IHVuZGVyIGxheWVyIHZlcnNpb24gYXQgJXMiICUgKHJlY2lwZV9pbmZvWydmaWxlX3BhdGgnXSwgcmVjaXBlX2luZm9bJ2xheWVyX3ZlcnNpb24nXS5sb2NhbF9wYXRoKSkKKworICAgICAgICAgICAgcmVjaXBlID0gc2VsZi5vcm1fd3JhcHBlci5nZXRfdXBkYXRlX3JlY2lwZV9vYmplY3QocmVjaXBlX2luZm8pCisgICAgICAgICAgICByZWNpcGUuaXNfaW1hZ2UgPSBGYWxzZQorICAgICAgICAgICAgaWYgJ2luaGVyaXRzJyBpbiBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dLmtleXMoKToKKyAgICAgICAgICAgICAgICBmb3IgY2xzIGluIGV2ZW50Ll9kZXBncmFwaFsncG4nXVtwbl1bJ2luaGVyaXRzJ106CisgICAgICAgICAgICAgICAgICAgIGlmIGNscy5lbmRzd2l0aCgnL2ltYWdlLmJiY2xhc3MnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZS5pc19pbWFnZSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiByZWNpcGUuaXNfaW1hZ2U6CisgICAgICAgICAgICAgICAgZm9yIHQgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFyZ2V0cyddOgorICAgICAgICAgICAgICAgICAgICBpZiBwbiA9PSB0LnRhcmdldDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHQuaXNfaW1hZ2UgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICB0LnNhdmUoKQorICAgICAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsncmVjaXBlcyddW3BuXSA9IHJlY2lwZQorCisgICAgICAgICMgd2UnbGwgbm90IGdldCByZWNpcGVzIGZvciBrZXkgdy8gdmFsdWVzIGxpc3RlZCBpbiBBU1NVTUVfUFJPVklERUQKKworICAgICAgICBhc3N1bWVfcHJvdmlkZWQgPSBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQVNTVU1FX1BST1ZJREVEIl0pWzBdLnNwbGl0KCkKKworICAgICAgICAjIHNhdmUgcmVjaXBlIGRlcGVuZGVuY3kKKyAgICAgICAgIyBidWlsZHRpbWUKKyAgICAgICAgcmVjaXBlZGVwc19vYmplY3RzID0gW10KKyAgICAgICAgZm9yIHJlY2lwZSBpbiBldmVudC5fZGVwZ3JhcGhbJ2RlcGVuZHMnXToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSBzZWxmLmludGVybmFsX3N0YXRlWydyZWNpcGVzJ11bcmVjaXBlXQorICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gZXZlbnQuX2RlcGdyYXBoWydkZXBlbmRzJ11bcmVjaXBlXToKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSA9IHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3JlY2lwZXMnXVtkZXBdCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZWRlcHNfb2JqZWN0cy5hcHBlbmQoUmVjaXBlX0RlcGVuZGVuY3koIHJlY2lwZSA9IHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzX29uID0gZGVwZW5kZW5jeSwgZGVwX3R5cGUgPSBSZWNpcGVfRGVwZW5kZW5jeS5UWVBFX0RFUEVORFMpKQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZSBub3QgaW4gYXNzdW1lX3Byb3ZpZGVkIGFuZCBub3Qgc3RyKGUpLnN0YXJ0c3dpdGgoInZpcnR1YWwvIik6CisgICAgICAgICAgICAgICAgICAgIGVycm9ybXNnICs9ICIgIHN0cGQ6IEtleUVycm9yIHNhdmluZyByZWNpcGUgZGVwZW5kZW5jeSBmb3IgJXMsICVzIFxuIiAlIChyZWNpcGUsIGUpCisgICAgICAgIFJlY2lwZV9EZXBlbmRlbmN5Lm9iamVjdHMuYnVsa19jcmVhdGUocmVjaXBlZGVwc19vYmplY3RzKQorCisgICAgICAgICMgc2F2ZSBhbGwgdGFzayBpbmZvcm1hdGlvbgorICAgICAgICBkZWYgX3NhdmVfYV90YXNrKHRhc2tkZXNjKToKKyAgICAgICAgICAgIHNwZWMgPSByZS5zcGxpdChyJ1wuJywgdGFza2Rlc2MpCisgICAgICAgICAgICBwbiA9ICIuIi5qb2luKHNwZWNbMDotMV0pCisgICAgICAgICAgICB0YXNrbmFtZSA9IHNwZWNbLTFdCisgICAgICAgICAgICBlID0gZXZlbnQKKyAgICAgICAgICAgIGUudGFza25hbWUgPSBwbgorICAgICAgICAgICAgcmVjaXBlID0gc2VsZi5pbnRlcm5hbF9zdGF0ZVsncmVjaXBlcyddW3BuXQorICAgICAgICAgICAgdGFza19pbmZvID0gc2VsZi5fZ2V0X3Rhc2tfaW5mb3JtYXRpb24oZSwgcmVjaXBlKQorICAgICAgICAgICAgdGFza19pbmZvWyd0YXNrX25hbWUnXSA9IHRhc2tuYW1lCisgICAgICAgICAgICB0YXNrX29iaiA9IHNlbGYub3JtX3dyYXBwZXIuZ2V0X3VwZGF0ZV90YXNrX29iamVjdCh0YXNrX2luZm8pCisgICAgICAgICAgICByZXR1cm4gdGFza19vYmoKKworICAgICAgICAjIGNyZWF0ZSB0YXNrcworICAgICAgICB0YXNrcyA9IHt9CisgICAgICAgIGZvciB0YXNrZGVzYyBpbiBldmVudC5fZGVwZ3JhcGhbJ3RkZXBlbmRzJ106CisgICAgICAgICAgICB0YXNrc1t0YXNrZGVzY10gPSBfc2F2ZV9hX3Rhc2sodGFza2Rlc2MpCisKKyAgICAgICAgIyBjcmVhdGUgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGFza3MKKyAgICAgICAgdGFza2RlcHNfb2JqZWN0cyA9IFtdCisgICAgICAgIGZvciB0YXNrZGVzYyBpbiBldmVudC5fZGVwZ3JhcGhbJ3RkZXBlbmRzJ106CisgICAgICAgICAgICB0YXJnZXQgPSB0YXNrc1t0YXNrZGVzY10KKyAgICAgICAgICAgIGZvciB0YXNrZGVwIGluIGV2ZW50Ll9kZXBncmFwaFsndGRlcGVuZHMnXVt0YXNrZGVzY106CisgICAgICAgICAgICAgICAgaWYgdGFza2RlcCBub3QgaW4gdGFza3M6CisgICAgICAgICAgICAgICAgICAgICMgRmV0Y2ggdGFza3MgaW5mbyBpcyBub3QgY29sbGVjdGVkIHByZXZpb3VzbHkKKyAgICAgICAgICAgICAgICAgICAgZGVwID0gX3NhdmVfYV90YXNrKHRhc2tkZXApCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZGVwID0gdGFza3NbdGFza2RlcF0KKyAgICAgICAgICAgICAgICB0YXNrZGVwc19vYmplY3RzLmFwcGVuZChUYXNrX0RlcGVuZGVuY3koIHRhc2sgPSB0YXJnZXQsIGRlcGVuZHNfb24gPSBkZXAgKSkKKyAgICAgICAgVGFza19EZXBlbmRlbmN5Lm9iamVjdHMuYnVsa19jcmVhdGUodGFza2RlcHNfb2JqZWN0cykKKworICAgICAgICBpZiBsZW4oZXJyb3Jtc2cpID4gMDoKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCJidWlsZGluZm9oZWxwZXI6IGRlcGVuZGVuY3kgaW5mbyBub3QgaWRlbnRpZnkgcmVjaXBlczogXG4lcyIsIGVycm9ybXNnKQorCisKKyAgICBkZWYgc3RvcmVfYnVpbGRfcGFja2FnZV9pbmZvcm1hdGlvbihzZWxmLCBldmVudCk6CisgICAgICAgIHBhY2thZ2VfaW5mbyA9IEJ1aWxkSW5mb0hlbHBlci5fZ2V0X2RhdGFfZnJvbV9ldmVudChldmVudCkKKyAgICAgICAgc2VsZi5vcm1fd3JhcHBlci5zYXZlX2J1aWxkX3BhY2thZ2VfaW5mb3JtYXRpb24oc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsncmVjaXBlcyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgIGRlZiBfc3RvcmVfYnVpbGRfZG9uZShzZWxmLCBlcnJvcmNvZGUpOgorICAgICAgICBsb2dnZXIuaW5mbygiQnVpbGQgZXhpdGVkIHdpdGggZXJyb3Jjb2RlICVkIiwgZXJyb3Jjb2RlKQorICAgICAgICBicl9pZCwgYmVfaWQgPSBzZWxmLmJyYmUuc3BsaXQoIjoiKQorICAgICAgICBiZSA9IEJ1aWxkRW52aXJvbm1lbnQub2JqZWN0cy5nZXQocGsgPSBiZV9pZCkKKyAgICAgICAgYmUubG9jayA9IEJ1aWxkRW52aXJvbm1lbnQuTE9DS19MT0NLCisgICAgICAgIGJlLnNhdmUoKQorICAgICAgICBiciA9IEJ1aWxkUmVxdWVzdC5vYmplY3RzLmdldChwayA9IGJyX2lkKQorICAgICAgICBpZiBlcnJvcmNvZGUgPT0gMDoKKyAgICAgICAgICAgICMgcmVxdWVzdCBhcmNoaXZhbCBvZiB0aGUgcHJvamVjdCBhcnRpZmFjdHMKKyAgICAgICAgICAgIGJyLnN0YXRlID0gQnVpbGRSZXF1ZXN0LlJFUV9BUkNISVZFCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBici5zdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfRkFJTEVECisgICAgICAgIGJyLnNhdmUoKQorCisKKyAgICBkZWYgc3RvcmVfbG9nX2Vycm9yKHNlbGYsIHRleHQpOgorICAgICAgICBtb2NrZXZlbnQgPSBNb2NrRXZlbnQoKQorICAgICAgICBtb2NrZXZlbnQubGV2ZWxubyA9IGZvcm1hdHRlci5FUlJPUgorICAgICAgICBtb2NrZXZlbnQubXNnID0gdGV4dAorICAgICAgICBtb2NrZXZlbnQucGF0aG5hbWUgPSAnLS0gTm9uZScKKyAgICAgICAgbW9ja2V2ZW50LmxpbmVubyA9IExvZ01lc3NhZ2UuRVJST1IKKyAgICAgICAgc2VsZi5zdG9yZV9sb2dfZXZlbnQobW9ja2V2ZW50KQorCisgICAgZGVmIHN0b3JlX2xvZ19leGNlcHRpb24oc2VsZiwgdGV4dCwgYmFja3RyYWNlID0gIiIpOgorICAgICAgICBtb2NrZXZlbnQgPSBNb2NrRXZlbnQoKQorICAgICAgICBtb2NrZXZlbnQubGV2ZWxubyA9IC0xCisgICAgICAgIG1vY2tldmVudC5tc2cgPSB0ZXh0CisgICAgICAgIG1vY2tldmVudC5wYXRobmFtZSA9IGJhY2t0cmFjZQorICAgICAgICBtb2NrZXZlbnQubGluZW5vID0gLTEKKyAgICAgICAgc2VsZi5zdG9yZV9sb2dfZXZlbnQobW9ja2V2ZW50KQorCisKKyAgICBkZWYgc3RvcmVfbG9nX2V2ZW50KHNlbGYsIGV2ZW50KToKKyAgICAgICAgaWYgZXZlbnQubGV2ZWxubyA8IGZvcm1hdHRlci5XQVJOSU5HOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgJ2FyZ3MnIGluIHZhcnMoZXZlbnQpOgorICAgICAgICAgICAgZXZlbnQubXNnID0gZXZlbnQubXNnICUgZXZlbnQuYXJncworCisgICAgICAgIGlmIG5vdCAnYnVpbGQnIGluIHNlbGYuaW50ZXJuYWxfc3RhdGU6CisgICAgICAgICAgICBpZiBzZWxmLmJyYmUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBub3QgJ2JhY2tsb2cnIGluIHNlbGYuaW50ZXJuYWxfc3RhdGU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2JhY2tsb2cnXSA9IFtdCisgICAgICAgICAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYmFja2xvZyddLmFwcGVuZChldmVudCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsc2U6ICAgIyB3ZSdyZSB1bmRlciBUb2FzdGVyIGNvbnRyb2wsIHRoZSBidWlsZCBpcyBhbHJlYWR5IGNyZWF0ZWQKKyAgICAgICAgICAgICAgICBiciwgXyA9IHNlbGYuYnJiZS5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgYnVpbGRyZXF1ZXN0ID0gQnVpbGRSZXF1ZXN0Lm9iamVjdHMuZ2V0KHBrID0gYnIpCisgICAgICAgICAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXSA9IGJ1aWxkcmVxdWVzdC5idWlsZAorCisgICAgICAgIGlmICdidWlsZCcgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZSBhbmQgJ2JhY2tsb2cnIGluIHNlbGYuaW50ZXJuYWxfc3RhdGU6CisgICAgICAgICAgICAjIGlmIHdlIGhhdmUgYSBiYWNrbG9nIG9mIGV2ZW50cywgZG8gb3VyIGJlc3QgdG8gc2F2ZSB0aGVtIGhlcmUKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLmludGVybmFsX3N0YXRlWydiYWNrbG9nJ10pOgorICAgICAgICAgICAgICAgIHRlbXBldmVudCA9IHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2JhY2tsb2cnXS5wb3AoKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiYnVpbGRpbmZvaGVscGVyOiBTYXZpbmcgc3RvcmVkIGV2ZW50ICVzICIgJSB0ZW1wZXZlbnQpCisgICAgICAgICAgICAgICAgc2VsZi5zdG9yZV9sb2dfZXZlbnQodGVtcGV2ZW50KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiYnVpbGRpbmZvaGVscGVyOiBBbGwgZXZlbnRzIHNhdmVkIikKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYmFja2xvZyddCisKKyAgICAgICAgbG9nX2luZm9ybWF0aW9uID0ge30KKyAgICAgICAgbG9nX2luZm9ybWF0aW9uWydidWlsZCddID0gc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXQorICAgICAgICBpZiBldmVudC5sZXZlbG5vID09IGZvcm1hdHRlci5FUlJPUjoKKyAgICAgICAgICAgIGxvZ19pbmZvcm1hdGlvblsnbGV2ZWwnXSA9IExvZ01lc3NhZ2UuRVJST1IKKyAgICAgICAgZWxpZiBldmVudC5sZXZlbG5vID09IGZvcm1hdHRlci5XQVJOSU5HOgorICAgICAgICAgICAgbG9nX2luZm9ybWF0aW9uWydsZXZlbCddID0gTG9nTWVzc2FnZS5XQVJOSU5HCisgICAgICAgIGVsaWYgZXZlbnQubGV2ZWxubyA9PSAtMjogICAjIHRvYXN0ZXIgc2VsZi1sb2dnaW5nCisgICAgICAgICAgICBsb2dfaW5mb3JtYXRpb25bJ2xldmVsJ10gPSAtMgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nX2luZm9ybWF0aW9uWydsZXZlbCddID0gTG9nTWVzc2FnZS5JTkZPCisKKyAgICAgICAgbG9nX2luZm9ybWF0aW9uWydtZXNzYWdlJ10gPSBldmVudC5tc2cKKyAgICAgICAgbG9nX2luZm9ybWF0aW9uWydwYXRobmFtZSddID0gZXZlbnQucGF0aG5hbWUKKyAgICAgICAgbG9nX2luZm9ybWF0aW9uWydsaW5lbm8nXSA9IGV2ZW50LmxpbmVubworICAgICAgICBsb2dnZXIuaW5mbygiTG9nZ2luZyBlcnJvciAyOiAlcyIsIGxvZ19pbmZvcm1hdGlvbikKKyAgICAgICAgc2VsZi5vcm1fd3JhcHBlci5jcmVhdGVfbG9nbWVzc2FnZShsb2dfaW5mb3JtYXRpb24pCisKKyAgICBkZWYgY2xvc2Uoc2VsZiwgZXJyb3Jjb2RlKToKKyAgICAgICAgaWYgc2VsZi5icmJlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fc3RvcmVfYnVpbGRfZG9uZShlcnJvcmNvZGUpCisKKyAgICAgICAgaWYgJ2JhY2tsb2cnIGluIHNlbGYuaW50ZXJuYWxfc3RhdGU6CisgICAgICAgICAgICBpZiAnYnVpbGQnIGluIHNlbGYuaW50ZXJuYWxfc3RhdGU6CisgICAgICAgICAgICAgICAgIyB3ZSBzYXZlIG1pc3NlZCBldmVudHMgaW4gdGhlIGRhdGFiYXNlIGZvciB0aGUgY3VycmVudCBidWlsZAorICAgICAgICAgICAgICAgIHRlbXBldmVudCA9IHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2JhY2tsb2cnXS5wb3AoKQorICAgICAgICAgICAgICAgIHNlbGYuc3RvcmVfbG9nX2V2ZW50KHRlbXBldmVudCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyB3ZSBoYXZlIG5vIGJ1aWxkLCBhbmQgd2Ugc3RpbGwgaGF2ZSBldmVudHM7IHNvbWV0aGluZyBhbWF6aW5nbHkgd3JvbmcgaGFwcGVuZAorICAgICAgICAgICAgICAgIGZvciBldmVudCBpbiBzZWxmLmludGVybmFsX3N0YXRlWydiYWNrbG9nJ106CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVU5TQVZFRCBsb2c6ICVzIiwgZXZlbnQubXNnKQorCisgICAgICAgIGlmIG5vdCBjb25uZWN0aW9uLmZlYXR1cmVzLmF1dG9jb21taXRzX3doZW5fYXV0b2NvbW1pdF9pc19vZmY6CisgICAgICAgICAgICB0cmFuc2FjdGlvbi5zZXRfYXV0b2NvbW1pdChUcnVlKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2NiZTFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvX19pbml0X18ucHkKQEAgLTAsMCArMSwxNyBAQAorIworIyBHdGsrIFVJIHBpZWNlcyBmb3IgQml0QmFrZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2J1aWxkZGV0YWlsc3BhZ2UucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9idWlsZGRldGFpbHNwYWdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdmYzY5MGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9idWlsZGRldGFpbHNwYWdlLnB5CkBAIC0wLDAgKzEsNDM3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMiAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCitpbXBvcnQgcGFuZ28KK2ltcG9ydCBnb2JqZWN0CitpbXBvcnQgYmIucHJvY2VzcworZnJvbSBiYi51aS5jcnVtYnMucHJvZ3Jlc3NiYXIgaW1wb3J0IEhvYlByb2dyZXNzQmFyCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IGhpYywgSG9iTm90ZWJvb2ssIEhvYkFsdEJ1dHRvbiwgSG9iV2FycENlbGxSZW5kZXJlclRleHQsIEhvYkJ1dHRvbiwgSG9iSW5mb0J1dHRvbgorZnJvbSBiYi51aS5jcnVtYnMucnVubmluZ2J1aWxkIGltcG9ydCBSdW5uaW5nQnVpbGRUcmVlVmlldworZnJvbSBiYi51aS5jcnVtYnMucnVubmluZ2J1aWxkIGltcG9ydCBCdWlsZEZhaWx1cmVUcmVlVmlldworZnJvbSBiYi51aS5jcnVtYnMuaG9icGFnZXMgaW1wb3J0IEhvYlBhZ2UKK2Zyb20gYmIudWkuY3J1bWJzLmhvYmNvbG9yIGltcG9ydCBIb2JDb2xvcnMKKworY2xhc3MgQnVpbGRDb25maWd1cmF0aW9uVHJlZVZpZXcoZ3RrLlRyZWVWaWV3KToKKyAgICBkZWYgX19pbml0X18gKHNlbGYpOgorICAgICAgICBndGsuVHJlZVZpZXcuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5zZXRfcnVsZXNfaGludChGYWxzZSkKKyAgICAgICAgc2VsZi5zZXRfaGVhZGVyc192aXNpYmxlKEZhbHNlKQorICAgICAgICBzZWxmLnNldF9wcm9wZXJ0eSgiaG92ZXItZXhwYW5kIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5nZXRfc2VsZWN0aW9uKCkuc2V0X21vZGUoZ3RrLlNFTEVDVElPTl9TSU5HTEUpCisKKyAgICAgICAgIyBUaGUgaWNvbiB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHdlJ3JlIGJ1aWxkaW5nIG9yIGZhaWxlZC4KKyAgICAgICAgcmVuZGVyZXIwID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorICAgICAgICByZW5kZXJlcjAuc2V0X3Byb3BlcnR5KCdmb250LWRlc2MnLCBwYW5nby5Gb250RGVzY3JpcHRpb24oJ2NvdXJpZXIgYm9sZCAxMicpKQorICAgICAgICBjb2wwID0gZ3RrLlRyZWVWaWV3Q29sdW1uICgiTmFtZSIsIHJlbmRlcmVyMCwgdGV4dD0wKQorICAgICAgICBzZWxmLmFwcGVuZF9jb2x1bW4gKGNvbDApCisKKyAgICAgICAgIyBUaGUgbWVzc2FnZSBvZiBjb25maWd1cmF0aW9uLgorICAgICAgICByZW5kZXJlcjEgPSBIb2JXYXJwQ2VsbFJlbmRlcmVyVGV4dChjb2xfbnVtYmVyPTEpCisgICAgICAgIGNvbDEgPSBndGsuVHJlZVZpZXdDb2x1bW4gKCJWYWx1ZXMiLCByZW5kZXJlcjEsIHRleHQ9MSkKKyAgICAgICAgc2VsZi5hcHBlbmRfY29sdW1uIChjb2wxKQorCisgICAgZGVmIHNldF92YXJzKHNlbGYsIGtleT0iIiwgdmFyPVsiIl0pOgorICAgICAgICBkID0ge30KKyAgICAgICAgaWYgdHlwZSh2YXIpID09IHN0cjoKKyAgICAgICAgICAgIGQgPSB7a2V5OiBbdmFyXX0KKyAgICAgICAgZWxpZiB0eXBlKHZhcikgPT0gbGlzdCBhbmQgbGVuKHZhcikgPiAxOgorICAgICAgICAgICAgI2NyZWF0ZSB0aGUgc3ViIGl0ZW0gbGluZQorICAgICAgICAgICAgbCA9IFtdCisgICAgICAgICAgICB0ZXh0ID0gIiIKKyAgICAgICAgICAgIGZvciBpdGVtIGluIHZhcjoKKyAgICAgICAgICAgICAgICB0ZXh0ID0gIiAtICIgKyBpdGVtCisgICAgICAgICAgICAgICAgbC5hcHBlbmQodGV4dCkKKyAgICAgICAgICAgIGQgPSB7a2V5OiB2YXJ9CisKKyAgICAgICAgcmV0dXJuIGQKKworICAgIGRlZiBzZXRfY29uZmlnX21vZGVsKHNlbGYsIHNob3dfdmFycyk6CisgICAgICAgIGxpc3Rtb2RlbCA9IGd0ay5UcmVlU3RvcmUoZ29iamVjdC5UWVBFX1NUUklORywgZ29iamVjdC5UWVBFX1NUUklORykKKyAgICAgICAgcGFyZW50ID0gTm9uZQorICAgICAgICBmb3IgdmFyIGluIHNob3dfdmFyczoKKyAgICAgICAgICAgIGZvciBzdWJpdGVtIGluIHZhci5pdGVtcygpOgorICAgICAgICAgICAgICAgIG5hbWUgPSBzdWJpdGVtWzBdCisgICAgICAgICAgICAgICAgaXNfcGFyZW50ID0gVHJ1ZQorICAgICAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBzdWJpdGVtWzFdOgorICAgICAgICAgICAgICAgICAgICBpZiBpc19wYXJlbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBsaXN0bW9kZWwuYXBwZW5kKHBhcmVudCwgKG5hbWUsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3BhcmVudCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0bW9kZWwuYXBwZW5kKHBhcmVudCwgKE5vbmUsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICIgICAgIC0gIgorICAgICAgICAgICAgICAgIHBhcmVudCA9IE5vbmUKKyAgICAgICAgIyByZW5ldyB0aGUgdHJlZSBtb2RlbCBhZnRlciBnZXQgdGhlIGNvbmZpZ3VyYXRpb24gbWVzc2FnZXMKKyAgICAgICAgc2VsZi5zZXRfbW9kZWwobGlzdG1vZGVsKQorCisgICAgZGVmIHNob3coc2VsZiwgc3JjX2NvbmZpZ19pbmZvLCBzcmNfcGFyYW1zKToKKyAgICAgICAgdmFycyA9IFtdCisgICAgICAgIHZhcnMuYXBwZW5kKHNlbGYuc2V0X3ZhcnMoIkJCIHZlcnNpb246Iiwgc3JjX3BhcmFtcy5iYl92ZXJzaW9uKSkKKyAgICAgICAgdmFycy5hcHBlbmQoc2VsZi5zZXRfdmFycygiVGFyZ2V0IGFyY2g6Iiwgc3JjX3BhcmFtcy50YXJnZXRfYXJjaCkpCisgICAgICAgIHZhcnMuYXBwZW5kKHNlbGYuc2V0X3ZhcnMoIlRhcmdldCBPUzoiLCBzcmNfcGFyYW1zLnRhcmdldF9vcykpCisgICAgICAgIHZhcnMuYXBwZW5kKHNlbGYuc2V0X3ZhcnMoIk1hY2hpbmU6Iiwgc3JjX2NvbmZpZ19pbmZvLmN1cnJfbWFjaCkpCisgICAgICAgIHZhcnMuYXBwZW5kKHNlbGYuc2V0X3ZhcnMoIkRpc3RybzoiLCBzcmNfY29uZmlnX2luZm8uY3Vycl9kaXN0cm8pKQorICAgICAgICB2YXJzLmFwcGVuZChzZWxmLnNldF92YXJzKCJEaXN0cm8gdmVyc2lvbjoiLCBzcmNfcGFyYW1zLmRpc3Ryb192ZXJzaW9uKSkKKyAgICAgICAgdmFycy5hcHBlbmQoc2VsZi5zZXRfdmFycygiU0RLIG1hY2hpbmU6Iiwgc3JjX2NvbmZpZ19pbmZvLmN1cnJfc2RrX21hY2hpbmUpKQorICAgICAgICB2YXJzLmFwcGVuZChzZWxmLnNldF92YXJzKCJUdW5lIGZlYXR1cmVzOiIsIHNyY19wYXJhbXMudHVuZV9wa2dhcmNoKSkKKyAgICAgICAgdmFycy5hcHBlbmQoc2VsZi5zZXRfdmFycygiTGF5ZXJzOiIsIHNyY19jb25maWdfaW5mby5sYXllcnMpKQorCisgICAgICAgIGZvciBwYXRoIGluIHNyY19jb25maWdfaW5mby5sYXllcnM6CisgICAgICAgICAgICBpbXBvcnQgb3MsIG9zLnBhdGgKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICAgICAgICAgIGJyYW5jaCA9IGJiLnByb2Nlc3MucnVuKCdjZCAlczsgZ2l0IGJyYW5jaCB8IGdyZXAgIl4qICIgfCB0ciAtZCAiKiAiJyAlIHBhdGgpWzBdCisgICAgICAgICAgICAgICAgaWYgYnJhbmNoLnN0YXJ0c3dpdGgoImZhdGFsOiIpOgorICAgICAgICAgICAgICAgICAgICBicmFuY2ggPSAiKHVua25vd24pIgorICAgICAgICAgICAgICAgIGlmIGJyYW5jaDoKKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoID0gYnJhbmNoLnN0cmlwKCdcbicpCisgICAgICAgICAgICAgICAgICAgIHZhcnMuYXBwZW5kKHNlbGYuc2V0X3ZhcnMoIkJyYW5jaDoiLCBicmFuY2gpKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgc2VsZi5zZXRfY29uZmlnX21vZGVsKHZhcnMpCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0X21vZGVsKE5vbmUpCisKKyMKKyMgQnVpbGREZXRhaWxzUGFnZQorIworCitjbGFzcyBCdWlsZERldGFpbHNQYWdlIChIb2JQYWdlKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBidWlsZGVyKToKKyAgICAgICAgc3VwZXIoQnVpbGREZXRhaWxzUGFnZSwgc2VsZikuX19pbml0X18oYnVpbGRlciwgIkJ1aWxkaW5nIC4uLiIpCisKKyAgICAgICAgc2VsZi5udW1fb2ZfaXNzdWVzID0gMAorICAgICAgICBzZWxmLmVuZHBhdGggPSAoMCwpCisgICAgICAgICMgY3JlYXRlIHZpc3VhbCBlbGVtZW50cworICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgICMgY3JlYXRlIHZpc3VhbCBlbGVtZW50cworICAgICAgICBzZWxmLnZib3ggPSBndGsuVkJveChGYWxzZSwgMTIpCisKKyAgICAgICAgc2VsZi5wcm9ncmVzc19ib3ggPSBndGsuVkJveChGYWxzZSwgMTIpCisgICAgICAgIHNlbGYudGFza19zdGF0dXMgPSBndGsuTGFiZWwoIlxuIikgIyB0byBlbnN1cmUgbGF5b3V0IGlzIGNvcnJlY3QKKyAgICAgICAgc2VsZi50YXNrX3N0YXR1cy5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICBzZWxmLnByb2dyZXNzX2JveC5wYWNrX3N0YXJ0KHNlbGYudGFza19zdGF0dXMsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi5wcm9ncmVzc19oYm94ID0gZ3RrLkhCb3goRmFsc2UsIDYpCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYm94LnBhY2tfZW5kKHNlbGYucHJvZ3Jlc3NfaGJveCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIgPSBIb2JQcm9ncmVzc0JhcigpCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfaGJveC5wYWNrX3N0YXJ0KHNlbGYucHJvZ3Jlc3NfYmFyLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorICAgICAgICBzZWxmLnN0b3BfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJTdG9wIikKKyAgICAgICAgc2VsZi5zdG9wX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5zdG9wX2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICBzZWxmLnN0b3BfYnV0dG9uLnNldF9zZW5zaXRpdmUoRmFsc2UpCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfaGJveC5wYWNrX2VuZChzZWxmLnN0b3BfYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgc2VsZi5ub3RlYm9vayA9IEhvYk5vdGVib29rKCkKKyAgICAgICAgc2VsZi5jb25maWdfdHYgPSBCdWlsZENvbmZpZ3VyYXRpb25UcmVlVmlldygpCisgICAgICAgIHNlbGYuc2Nyb2xsZWRfdmlld19jb25maWcgPSBndGsuU2Nyb2xsZWRXaW5kb3cgKCkKKyAgICAgICAgc2VsZi5zY3JvbGxlZF92aWV3X2NvbmZpZy5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfTkVWRVIsIGd0ay5QT0xJQ1lfQUxXQVlTKQorICAgICAgICBzZWxmLnNjcm9sbGVkX3ZpZXdfY29uZmlnLmFkZChzZWxmLmNvbmZpZ190dikKKyAgICAgICAgc2VsZi5ub3RlYm9vay5hcHBlbmRfcGFnZShzZWxmLnNjcm9sbGVkX3ZpZXdfY29uZmlnLCAiQnVpbGQgY29uZmlndXJhdGlvbiIpCisKKyAgICAgICAgc2VsZi5mYWlsdXJlX3R2ID0gQnVpbGRGYWlsdXJlVHJlZVZpZXcoKQorICAgICAgICBzZWxmLmZhaWx1cmVfbW9kZWwgPSBzZWxmLmJ1aWxkZXIuaGFuZGxlci5idWlsZC5tb2RlbC5mYWlsdXJlX21vZGVsKCkKKyAgICAgICAgc2VsZi5mYWlsdXJlX3R2LnNldF9tb2RlbChzZWxmLmZhaWx1cmVfbW9kZWwpCisgICAgICAgIHNlbGYuc2Nyb2xsZWRfdmlld19mYWlsdXJlID0gZ3RrLlNjcm9sbGVkV2luZG93ICgpCisgICAgICAgIHNlbGYuc2Nyb2xsZWRfdmlld19mYWlsdXJlLnNldF9wb2xpY3koZ3RrLlBPTElDWV9ORVZFUiwgZ3RrLlBPTElDWV9BTFdBWVMpCisgICAgICAgIHNlbGYuc2Nyb2xsZWRfdmlld19mYWlsdXJlLmFkZChzZWxmLmZhaWx1cmVfdHYpCisgICAgICAgIHNlbGYubm90ZWJvb2suYXBwZW5kX3BhZ2Uoc2VsZi5zY3JvbGxlZF92aWV3X2ZhaWx1cmUsICJJc3N1ZXMiKQorCisgICAgICAgIHNlbGYuYnVpbGRfdHYgPSBSdW5uaW5nQnVpbGRUcmVlVmlldyhyZWFkb25seT1UcnVlLCBob2I9VHJ1ZSkKKyAgICAgICAgc2VsZi5idWlsZF90di5zZXRfbW9kZWwoc2VsZi5idWlsZGVyLmhhbmRsZXIuYnVpbGQubW9kZWwpCisgICAgICAgIHNlbGYuc2Nyb2xsZWRfdmlld19idWlsZCA9IGd0ay5TY3JvbGxlZFdpbmRvdyAoKQorICAgICAgICBzZWxmLnNjcm9sbGVkX3ZpZXdfYnVpbGQuc2V0X3BvbGljeShndGsuUE9MSUNZX05FVkVSLCBndGsuUE9MSUNZX0FMV0FZUykKKyAgICAgICAgc2VsZi5zY3JvbGxlZF92aWV3X2J1aWxkLmFkZChzZWxmLmJ1aWxkX3R2KQorICAgICAgICBzZWxmLm5vdGVib29rLmFwcGVuZF9wYWdlKHNlbGYuc2Nyb2xsZWRfdmlld19idWlsZCwgIkxvZyIpCisKKyAgICAgICAgc2VsZi5idWlsZGVyLmhhbmRsZXIuYnVpbGQubW9kZWwuY29ubmVjdF9hZnRlcigicm93LWNoYW5nZWQiLCBzZWxmLnNjcm9sbF90b19wcmVzZW50X3Jvdywgc2VsZi5zY3JvbGxlZF92aWV3X2J1aWxkLmdldF92YWRqdXN0bWVudCgpLCBzZWxmLmJ1aWxkX3R2KQorCisgICAgICAgIHNlbGYuYnV0dG9uX2JveCA9IGd0ay5IQm94KEZhbHNlLCA2KQorICAgICAgICBzZWxmLmJhY2tfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCcmbHQ7Jmx0OyBCYWNrJykKKyAgICAgICAgc2VsZi5iYWNrX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5iYWNrX2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICBzZWxmLmJ1dHRvbl9ib3gucGFja19zdGFydChzZWxmLmJhY2tfYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICBkZWYgdXBkYXRlX2J1aWxkX3N0YXR1cyhzZWxmLCBjdXJyZW50LCB0b3RhbCwgdGFzayk6CisgICAgICAgIHJlY2lwZV9wYXRoLCByZWNpcGVfdGFzayA9IHRhc2suc3BsaXQoIiwgIikKKyAgICAgICAgcmVjaXBlID0gb3MucGF0aC5iYXNlbmFtZShyZWNpcGVfcGF0aCkucnN0cmlwKCIuYmIiKQorICAgICAgICB0c2tfbXNnID0gIjxiPlJ1bm5pbmcgdGFzayAlcyBvZiAlczo8L2I+ICVzXG48Yj5SZWNpcGU6PC9iPiAlcyIgJSAoY3VycmVudCwgdG90YWwsIHJlY2lwZV90YXNrLCByZWNpcGUpCisgICAgICAgIHNlbGYudGFza19zdGF0dXMuc2V0X21hcmt1cCh0c2tfbXNnKQorICAgICAgICBzZWxmLnN0b3BfYnV0dG9uLnNldF9zZW5zaXRpdmUoVHJ1ZSkKKworICAgIGRlZiByZXNldF9idWlsZF9zdGF0dXMoc2VsZik6CisgICAgICAgIHNlbGYudGFza19zdGF0dXMuc2V0X21hcmt1cCgiXG4iKSAjIHRvIGVuc3VyZSBsYXlvdXQgaXMgY29ycmVjdAorICAgICAgICBzZWxmLmVuZHBhdGggPSAoMCwpCisKKyAgICBkZWYgc2hvd19pc3N1ZXMoc2VsZik6CisgICAgICAgIHNlbGYubnVtX29mX2lzc3VlcyArPSAxCisgICAgICAgIHNlbGYubm90ZWJvb2suc2hvd19pbmRpY2F0b3JfaWNvbigiSXNzdWVzIiwgc2VsZi5udW1fb2ZfaXNzdWVzKQorICAgICAgICBzZWxmLm5vdGVib29rLnF1ZXVlX2RyYXcoKQorCisgICAgZGVmIHJlc2V0X2lzc3VlcyhzZWxmKToKKyAgICAgICAgc2VsZi5udW1fb2ZfaXNzdWVzID0gMAorICAgICAgICBzZWxmLm5vdGVib29rLmhpZGVfaW5kaWNhdG9yX2ljb24oIklzc3VlcyIpCisKKyAgICBkZWYgX3JlbW92ZV9hbGxfd2lkZ2V0KHNlbGYpOgorICAgICAgICBjaGlsZHJlbiA9IHNlbGYudmJveC5nZXRfY2hpbGRyZW4oKSBvciBbXQorICAgICAgICBmb3IgY2hpbGQgaW4gY2hpbGRyZW46CisgICAgICAgICAgICBzZWxmLnZib3gucmVtb3ZlKGNoaWxkKQorICAgICAgICBjaGlsZHJlbiA9IHNlbGYuYm94X2dyb3VwX2FyZWEuZ2V0X2NoaWxkcmVuKCkgb3IgW10KKyAgICAgICAgZm9yIGNoaWxkIGluIGNoaWxkcmVuOgorICAgICAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5yZW1vdmUoY2hpbGQpCisgICAgICAgIGNoaWxkcmVuID0gc2VsZi5nZXRfY2hpbGRyZW4oKSBvciBbXQorICAgICAgICBmb3IgY2hpbGQgaW4gY2hpbGRyZW46CisgICAgICAgICAgICBzZWxmLnJlbW92ZShjaGlsZCkKKworICAgIGRlZiBhZGRfYnVpbGRfZmFpbF90b3BfYmFyKHNlbGYsIGFjdGlvbnMsIGxvZ19maWxlPU5vbmUpOgorICAgICAgICBwcmltYXJ5X2FjdGlvbiA9ICJFZGl0ICVzIiAlIGFjdGlvbnMKKworICAgICAgICBjb2xvciA9IEhvYkNvbG9ycy5FUlJPUgorICAgICAgICBidWlsZF9mYWlsX3RvcCA9IGd0ay5FdmVudEJveCgpCisgICAgICAgICNidWlsZF9mYWlsX3RvcC5zZXRfc2l6ZV9yZXF1ZXN0KC0xLCAyMDApCisgICAgICAgIGJ1aWxkX2ZhaWxfdG9wLm1vZGlmeV9iZyhndGsuU1RBVEVfTk9STUFMLCBndGsuZ2RrLmNvbG9yX3BhcnNlKGNvbG9yKSkKKworICAgICAgICBidWlsZF9mYWlsX3RhYiA9IGd0ay5UYWJsZSgxNCwgNDYsIFRydWUpCisgICAgICAgIGJ1aWxkX2ZhaWxfdG9wLmFkZChidWlsZF9mYWlsX3RhYikKKworICAgICAgICBpY29uID0gZ3RrLkltYWdlKCkKKyAgICAgICAgaWNvbl9waXhfYnVmZmVyID0gZ3RrLmdkay5waXhidWZfbmV3X2Zyb21fZmlsZShoaWMuSUNPTl9JTkRJX0VSUk9SX0ZJTEUpCisgICAgICAgIGljb24uc2V0X2Zyb21fcGl4YnVmKGljb25fcGl4X2J1ZmZlcikKKyAgICAgICAgYnVpbGRfZmFpbF90YWIuYXR0YWNoKGljb24sIDEsIDQsIDAsIDYpCisKKyAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBsYWJlbC5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICBsYWJlbC5zZXRfbWFya3VwKCI8c3BhbiBzaXplPSd4LWxhcmdlJz48Yj4lczwvYj48L3NwYW4+IiAlIHNlbGYudGl0bGUpCisgICAgICAgIGJ1aWxkX2ZhaWxfdGFiLmF0dGFjaChsYWJlbCwgNCwgMjYsIDAsIDYpCisKKyAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBsYWJlbC5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICAjIEVuc3VyZSB2YXJpYWJsZSBkaXNrX2Z1bGwgaXMgZGVmaW5lZAorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLmJ1aWxkZXIsICdkaXNrX2Z1bGwnKToKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5kaXNrX2Z1bGwgPSBGYWxzZQorCisgICAgICAgIGlmIHNlbGYuYnVpbGRlci5kaXNrX2Z1bGw6CisgICAgICAgICAgICBtYXJrdXAgPSAiPHNwYW4gc2l6ZT0nbWVkaXVtJz5UaGVyZSBpcyBubyBkaXNrIHNwYWNlIGxlZnQsIHNvIEhvYiBjYW5ub3QgZmluaXNoIGJ1aWxkaW5nIHlvdXIgaW1hZ2UuIEZyZWUgdXAgc29tZSBkaXNrIHNwYWNlXG4iCisgICAgICAgICAgICBtYXJrdXAgKz0gImFuZCByZXN0YXJ0IHRoZSBidWlsZC4gQ2hlY2sgdGhlIFwiSXNzdWVzXCIgdGFiIGZvciBtb3JlIGRldGFpbHM8L3NwYW4+IgorICAgICAgICAgICAgbGFiZWwuc2V0X21hcmt1cChtYXJrdXApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsYWJlbC5zZXRfbWFya3VwKCI8c3BhbiBzaXplPSdtZWRpdW0nPkNoZWNrIHRoZSBcIklzc3Vlc1wiIGluZm9ybWF0aW9uIGZvciBtb3JlIGRldGFpbHM8L3NwYW4+IikKKyAgICAgICAgYnVpbGRfZmFpbF90YWIuYXR0YWNoKGxhYmVsLCA0LCA0MCwgNCwgOSkKKworICAgICAgICAjIGNyZWF0ZSBidXR0b24gJ0VkaXQgcGFja2FnZXMnCisgICAgICAgIGFjdGlvbl9idXR0b24gPSBIb2JCdXR0b24ocHJpbWFyeV9hY3Rpb24pCisgICAgICAgICNhY3Rpb25fYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoLTEsIDQwKQorICAgICAgICBhY3Rpb25fYnV0dG9uLnNldF90b29sdGlwX3RleHQoIkVkaXQgdGhlICVzIHBhcmFtZXRlcnMiICUgYWN0aW9ucykKKyAgICAgICAgYWN0aW9uX2J1dHRvbi5jb25uZWN0KCdjbGlja2VkJywgc2VsZi5mYWlsdXJlX3ByaW1hcnlfYWN0aW9uX2J1dHRvbl9jbGlja2VkX2NiLCBwcmltYXJ5X2FjdGlvbikKKworICAgICAgICBpZiBsb2dfZmlsZToKKyAgICAgICAgICAgIG9wZW5fbG9nX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiT3BlbiBsb2ciKQorICAgICAgICAgICAgb3Blbl9sb2dfYnV0dG9uLnNldF9yZWxpZWYoZ3RrLlJFTElFRl9IQUxGKQorICAgICAgICAgICAgb3Blbl9sb2dfYnV0dG9uLnNldF90b29sdGlwX3RleHQoIk9wZW4gdGhlIGJ1aWxkJ3MgbG9nIGZpbGUiKQorICAgICAgICAgICAgb3Blbl9sb2dfYnV0dG9uLmNvbm5lY3QoJ2NsaWNrZWQnLCBzZWxmLm9wZW5fbG9nX2J1dHRvbl9jbGlja2VkX2NiLCBsb2dfZmlsZSkKKworICAgICAgICBhdHRhY2hfcG9zID0gKDI0IGlmIGxvZ19maWxlIGVsc2UgMTQpCisgICAgICAgIGZpbGVfYnVnX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbignRmlsZSBhIGJ1ZycpCisgICAgICAgIGZpbGVfYnVnX2J1dHRvbi5zZXRfcmVsaWVmKGd0ay5SRUxJRUZfSEFMRikKKyAgICAgICAgZmlsZV9idWdfYnV0dG9uLnNldF90b29sdGlwX3RleHQoIk9wZW4gdGhlIFlvY3RvIFByb2plY3QgYnVnIHRyYWNraW5nIHdlYnNpdGUiKQorICAgICAgICBmaWxlX2J1Z19idXR0b24uY29ubmVjdCgnY2xpY2tlZCcsIHNlbGYuZmFpbHVyZV9hY3RpdmF0ZV9maWxlX2J1Z19saW5rX2NiKQorCisgICAgICAgIGlmIG5vdCBzZWxmLmJ1aWxkZXIuZGlza19mdWxsOgorICAgICAgICAgICAgYnVpbGRfZmFpbF90YWIuYXR0YWNoKGFjdGlvbl9idXR0b24sIDQsIDEzLCA5LCAxMikKKyAgICAgICAgICAgIGlmIGxvZ19maWxlOgorICAgICAgICAgICAgICAgIGJ1aWxkX2ZhaWxfdGFiLmF0dGFjaChvcGVuX2xvZ19idXR0b24sIDE0LCAyMywgOSwgMTIpCisgICAgICAgICAgICBidWlsZF9mYWlsX3RhYi5hdHRhY2goZmlsZV9idWdfYnV0dG9uLCBhdHRhY2hfcG9zLCBhdHRhY2hfcG9zICsgOSwgOSwgMTIpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3RhcnRfYnVpbGQgPSBIb2JCdXR0b24oIlJlc3RhcnQgdGhlIGJ1aWxkIikKKyAgICAgICAgICAgIHJlc3RhcnRfYnVpbGQuc2V0X3Rvb2x0aXBfdGV4dCgiUmVzdGFydCB0aGUgYnVpbGQiKQorICAgICAgICAgICAgcmVzdGFydF9idWlsZC5jb25uZWN0KCdjbGlja2VkJywgc2VsZi5yZXN0YXJ0X2J1aWxkX2J1dHRvbl9jbGlja2VkX2NiKQorCisgICAgICAgICAgICBidWlsZF9mYWlsX3RhYi5hdHRhY2gocmVzdGFydF9idWlsZCwgNCwgMTMsIDksIDEyKQorICAgICAgICAgICAgYnVpbGRfZmFpbF90YWIuYXR0YWNoKGFjdGlvbl9idXR0b24sIDE0LCAyMywgOSwgMTIpCisgICAgICAgICAgICBpZiBsb2dfZmlsZToKKyAgICAgICAgICAgICAgICBidWlsZF9mYWlsX3RhYi5hdHRhY2gob3Blbl9sb2dfYnV0dG9uLCBhdHRhY2hfcG9zLCBhdHRhY2hfcG9zICsgOSwgOSwgMTIpCisKKyAgICAgICAgc2VsZi5idWlsZGVyLmRpc2tfZnVsbCA9IEZhbHNlCisgICAgICAgIHJldHVybiBidWlsZF9mYWlsX3RvcAorCisgICAgZGVmIHNob3dfZmFpbF9wYWdlKHNlbGYsIHRpdGxlKToKKyAgICAgICAgc2VsZi5fcmVtb3ZlX2FsbF93aWRnZXQoKQorICAgICAgICBzZWxmLnRpdGxlID0gIkhvYiBjYW5ub3QgYnVpbGQgeW91ciAlcyIgJSB0aXRsZQorCisgICAgICAgIHNlbGYuYnVpbGRfZmFpbF9iYXIgPSBzZWxmLmFkZF9idWlsZF9mYWlsX3RvcF9iYXIodGl0bGUsIHNlbGYuYnVpbGRlci5jdXJyZW50X2xvZ2ZpbGUpCisKKyAgICAgICAgc2VsZi5wYWNrX3N0YXJ0KHNlbGYuZ3JvdXBfYWxpZ24sIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19zdGFydChzZWxmLmJ1aWxkX2ZhaWxfYmFyLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19zdGFydChzZWxmLnZib3gsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi5ub3RlYm9vaywgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisgICAgICAgIHNlbGYubm90ZWJvb2suc2V0X3BhZ2UoIklzc3VlcyIpCisgICAgICAgIHNlbGYuYmFja19idXR0b24uaGlkZSgpCisKKyAgICBkZWYgYWRkX2J1aWxkX3N0b3BfdG9wX2JhcihzZWxmLCBhY3Rpb24sIGxvZ19maWxlPU5vbmUpOgorICAgICAgICBjb2xvciA9IEhvYkNvbG9ycy5MSUdIVF9HUkFZCisgICAgICAgIGJ1aWxkX3N0b3BfdG9wID0gZ3RrLkV2ZW50Qm94KCkKKyAgICAgICAgI2J1aWxkX3N0b3BfdG9wLnNldF9zaXplX3JlcXVlc3QoLTEsIDIwMCkKKyAgICAgICAgYnVpbGRfc3RvcF90b3AubW9kaWZ5X2JnKGd0ay5TVEFURV9OT1JNQUwsIGd0ay5nZGsuY29sb3JfcGFyc2UoY29sb3IpKQorICAgICAgICBidWlsZF9zdG9wX3RvcC5zZXRfZmxhZ3MoZ3RrLkNBTl9ERUZBVUxUKQorICAgICAgICBidWlsZF9zdG9wX3RvcC5ncmFiX2RlZmF1bHQoKQorCisgICAgICAgIGJ1aWxkX3N0b3BfdGFiID0gZ3RrLlRhYmxlKDExLCA0NiwgVHJ1ZSkKKyAgICAgICAgYnVpbGRfc3RvcF90b3AuYWRkKGJ1aWxkX3N0b3BfdGFiKQorCisgICAgICAgIGljb24gPSBndGsuSW1hZ2UoKQorICAgICAgICBpY29uX3BpeF9idWZmZXIgPSBndGsuZ2RrLnBpeGJ1Zl9uZXdfZnJvbV9maWxlKGhpYy5JQ09OX0lORk9fSE9WRVJfRklMRSkKKyAgICAgICAgaWNvbi5zZXRfZnJvbV9waXhidWYoaWNvbl9waXhfYnVmZmVyKQorICAgICAgICBidWlsZF9zdG9wX3RhYi5hdHRhY2goaWNvbiwgMSwgNCwgMCwgNikKKworICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIGxhYmVsLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCisgICAgICAgIGxhYmVsLnNldF9tYXJrdXAoIjxzcGFuIHNpemU9J3gtbGFyZ2UnPjxiPiVzPC9iPjwvc3Bhbj4iICUgc2VsZi50aXRsZSkKKyAgICAgICAgYnVpbGRfc3RvcF90YWIuYXR0YWNoKGxhYmVsLCA0LCAyNiwgMCwgNikKKworICAgICAgICBhY3Rpb25fYnV0dG9uID0gSG9iQnV0dG9uKCJFZGl0ICVzIiAlIGFjdGlvbikKKyAgICAgICAgYWN0aW9uX2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KC0xLCA0MCkKKyAgICAgICAgaWYgYWN0aW9uID09ICJpbWFnZSI6CisgICAgICAgICAgICBhY3Rpb25fYnV0dG9uLnNldF90b29sdGlwX3RleHQoIkVkaXQgdGhlIGltYWdlIHBhcmFtZXRlcnMiKQorICAgICAgICBlbGlmIGFjdGlvbiA9PSAicmVjaXBlcyI6CisgICAgICAgICAgICBhY3Rpb25fYnV0dG9uLnNldF90b29sdGlwX3RleHQoIkVkaXQgdGhlIGluY2x1ZGVkIHJlY2lwZXMiKQorICAgICAgICBlbGlmIGFjdGlvbiA9PSAicGFja2FnZXMiOgorICAgICAgICAgICAgYWN0aW9uX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJFZGl0IHRoZSBpbmNsdWRlZCBwYWNrYWdlcyIpCisgICAgICAgIGFjdGlvbl9idXR0b24uY29ubmVjdCgnY2xpY2tlZCcsIHNlbGYuc3RvcF9wcmltYXJ5X2FjdGlvbl9idXR0b25fY2xpY2tlZF9jYiwgYWN0aW9uKQorICAgICAgICBidWlsZF9zdG9wX3RhYi5hdHRhY2goYWN0aW9uX2J1dHRvbiwgNCwgMTMsIDYsIDkpCisKKyAgICAgICAgaWYgbG9nX2ZpbGU6CisgICAgICAgICAgICBvcGVuX2xvZ19idXR0b24gPSBIb2JBbHRCdXR0b24oIk9wZW4gbG9nIikKKyAgICAgICAgICAgIG9wZW5fbG9nX2J1dHRvbi5zZXRfcmVsaWVmKGd0ay5SRUxJRUZfSEFMRikKKyAgICAgICAgICAgIG9wZW5fbG9nX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJPcGVuIHRoZSBidWlsZCdzIGxvZyBmaWxlIikKKyAgICAgICAgICAgIG9wZW5fbG9nX2J1dHRvbi5jb25uZWN0KCdjbGlja2VkJywgc2VsZi5vcGVuX2xvZ19idXR0b25fY2xpY2tlZF9jYiwgbG9nX2ZpbGUpCisgICAgICAgICAgICBidWlsZF9zdG9wX3RhYi5hdHRhY2gob3Blbl9sb2dfYnV0dG9uLCAxNCwgMjMsIDYsIDkpCisKKyAgICAgICAgYXR0YWNoX3BvcyA9ICgyNCBpZiBsb2dfZmlsZSBlbHNlIDE0KQorICAgICAgICBidWlsZF9idXR0b24gPSBIb2JBbHRCdXR0b24oIkJ1aWxkIG5ldyBpbWFnZSIpCisgICAgICAgICNidWlsZF9idXR0b24uc2V0X3NpemVfcmVxdWVzdCgtMSwgNDApCisgICAgICAgIGJ1aWxkX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJDcmVhdGUgYSBuZXcgaW1hZ2UgZnJvbSBzY3JhdGNoIikKKyAgICAgICAgYnVpbGRfYnV0dG9uLmNvbm5lY3QoJ2NsaWNrZWQnLCBzZWxmLm5ld19pbWFnZV9idXR0b25fY2xpY2tlZF9jYikKKyAgICAgICAgYnVpbGRfc3RvcF90YWIuYXR0YWNoKGJ1aWxkX2J1dHRvbiwgYXR0YWNoX3BvcywgYXR0YWNoX3BvcyArIDksIDYsIDkpCisKKyAgICAgICAgcmV0dXJuIGJ1aWxkX3N0b3BfdG9wLCBhY3Rpb25fYnV0dG9uCisKKyAgICBkZWYgc2hvd19zdG9wX3BhZ2Uoc2VsZiwgYWN0aW9uKToKKyAgICAgICAgc2VsZi5fcmVtb3ZlX2FsbF93aWRnZXQoKQorICAgICAgICBzZWxmLnRpdGxlID0gIkJ1aWxkIHN0b3BwZWQiCisgICAgICAgIHNlbGYuYnVpbGRfc3RvcF9iYXIsIGFjdGlvbl9idXR0b24gPSBzZWxmLmFkZF9idWlsZF9zdG9wX3RvcF9iYXIoYWN0aW9uLCBzZWxmLmJ1aWxkZXIuY3VycmVudF9sb2dmaWxlKQorCisgICAgICAgIHNlbGYucGFja19zdGFydChzZWxmLmdyb3VwX2FsaWduLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfc3RhcnQoc2VsZi5idWlsZF9zdG9wX2JhciwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfc3RhcnQoc2VsZi52Ym94LCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYubm90ZWJvb2ssIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorICAgICAgICBzZWxmLmJhY2tfYnV0dG9uLmhpZGUoKQorICAgICAgICByZXR1cm4gYWN0aW9uX2J1dHRvbgorCisgICAgZGVmIHNob3dfcGFnZShzZWxmLCBzdGVwKToKKyAgICAgICAgc2VsZi5fcmVtb3ZlX2FsbF93aWRnZXQoKQorICAgICAgICBpZiBzdGVwID09IHNlbGYuYnVpbGRlci5QQUNLQUdFX0dFTkVSQVRJTkcgb3Igc3RlcCA9PSBzZWxmLmJ1aWxkZXIuRkFTVF9JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgc2VsZi50aXRsZSA9ICJCdWlsZGluZyBwYWNrYWdlcyAuLi4iCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnRpdGxlID0gIkJ1aWxkaW5nIGltYWdlIC4uLiIKKyAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3RvcCA9IHNlbGYuYWRkX29udG9fdG9wX2JhcihOb25lKQorICAgICAgICBzZWxmLnBhY2tfc3RhcnQoc2VsZi5idWlsZF9kZXRhaWxzX3RvcCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzZWxmLnBhY2tfc3RhcnQoc2VsZi5ncm91cF9hbGlnbiwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfc3RhcnQoc2VsZi52Ym94LCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyLnJlc2V0KCkKKyAgICAgICAgc2VsZi5jb25maWdfdHYucmVzZXQoKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZWxmLnByb2dyZXNzX2JveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYubm90ZWJvb2ssIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5wYWNrX2VuZChzZWxmLmJ1dHRvbl9ib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisgICAgICAgIHNlbGYubm90ZWJvb2suc2V0X3BhZ2UoIkxvZyIpCisgICAgICAgIHNlbGYuYmFja19idXR0b24uaGlkZSgpCisKKyAgICAgICAgc2VsZi5yZXNldF9idWlsZF9zdGF0dXMoKQorICAgICAgICBzZWxmLnJlc2V0X2lzc3VlcygpCisKKyAgICBkZWYgdXBkYXRlX3Byb2dyZXNzX2JhcihzZWxmLCB0aXRsZSwgZnJhY3Rpb24sIHN0YXR1cz1Ob25lKToKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIudXBkYXRlKGZyYWN0aW9uKQorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5zZXRfdGl0bGUodGl0bGUpCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyLnNldF9yY3N0eWxlKHN0YXR1cykKKworICAgIGRlZiBiYWNrX2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGYuYnVpbGRlci5zaG93X2NvbmZpZ3VyYXRpb24oKQorCisgICAgZGVmIG5ld19pbWFnZV9idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmJ1aWxkZXIucmVzZXQoKQorCisgICAgZGVmIHNob3dfYmFja19idXR0b24oc2VsZik6CisgICAgICAgIHNlbGYuYmFja19idXR0b24uc2hvdygpCisKKyAgICBkZWYgc3RvcF9idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmJ1aWxkZXIuc3RvcF9idWlsZCgpCisKKyAgICBkZWYgaGlkZV9zdG9wX2J1dHRvbihzZWxmKToKKyAgICAgICAgc2VsZi5zdG9wX2J1dHRvbi5zZXRfc2Vuc2l0aXZlKEZhbHNlKQorICAgICAgICBzZWxmLnN0b3BfYnV0dG9uLmhpZGUoKQorCisgICAgZGVmIHNjcm9sbF90b19wcmVzZW50X3JvdyhzZWxmLCBtb2RlbCwgcGF0aCwgaXRlciwgdl9hZGosIHRyZWV2aWV3KToKKyAgICAgICAgaWYgdHJlZXZpZXcgYW5kIHZfYWRqOgorICAgICAgICAgICAgaWYgcGF0aFswXSA+IHNlbGYuZW5kcGF0aFswXTogIyBjaGVjayB0aGUgZXZlbnQgaXMgYSBuZXcgcm93IGFwcGVuZCBvciBub3QKKyAgICAgICAgICAgICAgICBzZWxmLmVuZHBhdGggPSBwYXRoCisgICAgICAgICAgICAgICAgIyBjaGVjayB0aGUgZ3RrLmFkanVzdG1lbnQgcG9zaXRpb24gaXMgYXQgZW5kIGJvdW5kYXJ5IG9yIG5vdAorICAgICAgICAgICAgICAgIGlmICh2X2Fkai51cHBlciA8PSB2X2Fkai5wYWdlX3NpemUpIG9yICh2X2Fkai52YWx1ZSA9PSB2X2Fkai51cHBlciAtIHZfYWRqLnBhZ2Vfc2l6ZSk6CisgICAgICAgICAgICAgICAgICAgIHRyZWV2aWV3LnNjcm9sbF90b19jZWxsKHBhdGgpCisKKyAgICBkZWYgc2hvd19jb25maWd1cmF0aW9ucyhzZWxmLCBjb25maWd1cmF0aW9ucywgcGFyYW1zKToKKyAgICAgICAgc2VsZi5jb25maWdfdHYuc2hvdyhjb25maWd1cmF0aW9ucywgcGFyYW1zKQorCisgICAgZGVmIGZhaWx1cmVfcHJpbWFyeV9hY3Rpb25fYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uLCBhY3Rpb24pOgorICAgICAgICBpZiAiRWRpdCByZWNpcGVzIiBpbiBhY3Rpb246CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19yZWNpcGVzKCkKKyAgICAgICAgZWxpZiAiRWRpdCBwYWNrYWdlcyIgaW4gYWN0aW9uOgorICAgICAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfcGFja2FnZXMoKQorICAgICAgICBlbGlmICJFZGl0IGltYWdlIiBpbiBhY3Rpb246CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19jb25maWd1cmF0aW9uKCkKKworICAgIGRlZiByZXN0YXJ0X2J1aWxkX2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGYuYnVpbGRlci5qdXN0X2Jha2UoKQorCisgICAgZGVmIHN0b3BfcHJpbWFyeV9hY3Rpb25fYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uLCBhY3Rpb24pOgorICAgICAgICBpZiAicmVjaXBlcyIgaW4gYWN0aW9uOgorICAgICAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfcmVjaXBlcygpCisgICAgICAgIGVsaWYgInBhY2thZ2VzIiBpbiBhY3Rpb246CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19wYWNrYWdlcygpCisgICAgICAgIGVsaWYgImltYWdlIiBpbiBhY3Rpb246CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19jb25maWd1cmF0aW9uKCkKKworICAgIGRlZiBvcGVuX2xvZ19idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24sIGxvZ19maWxlKToKKyAgICAgICAgaWYgbG9nX2ZpbGU6CisgICAgICAgICAgICBsb2dfZmlsZSA9ICJmaWxlOi8vLyIgKyBsb2dfZmlsZQorICAgICAgICAgICAgZ3RrLnNob3dfdXJpKHNjcmVlbj1idXR0b24uZ2V0X3NjcmVlbigpLCB1cmk9bG9nX2ZpbGUsIHRpbWVzdGFtcD0wKQorCisgICAgZGVmIGZhaWx1cmVfYWN0aXZhdGVfZmlsZV9idWdfbGlua19jYihzZWxmLCBidXR0b24pOgorICAgICAgICBidXR0b24uY2hpbGQuZW1pdCgnYWN0aXZhdGUtbGluaycsICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZyIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9idWlsZGVyLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvYnVpbGRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kY2M0MTA0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvYnVpbGRlci5weQpAQCAtMCwwICsxLDE0NzUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGdsaWIKK2ltcG9ydCBndGssIGdvYmplY3QKK2ltcG9ydCBjb3B5CitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc2hsZXgKK2ltcG9ydCByZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzeXMKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCB0aW1lCitmcm9tIGJiLnVpLmNydW1icy5pbWFnZWNvbmZpZ3VyYXRpb25wYWdlIGltcG9ydCBJbWFnZUNvbmZpZ3VyYXRpb25QYWdlCitmcm9tIGJiLnVpLmNydW1icy5yZWNpcGVzZWxlY3Rpb25wYWdlIGltcG9ydCBSZWNpcGVTZWxlY3Rpb25QYWdlCitmcm9tIGJiLnVpLmNydW1icy5wYWNrYWdlc2VsZWN0aW9ucGFnZSBpbXBvcnQgUGFja2FnZVNlbGVjdGlvblBhZ2UKK2Zyb20gYmIudWkuY3J1bWJzLmJ1aWxkZGV0YWlsc3BhZ2UgaW1wb3J0IEJ1aWxkRGV0YWlsc1BhZ2UKK2Zyb20gYmIudWkuY3J1bWJzLmltYWdlZGV0YWlsc3BhZ2UgaW1wb3J0IEltYWdlRGV0YWlsc1BhZ2UKK2Zyb20gYmIudWkuY3J1bWJzLnNhbml0eWNoZWNrcGFnZSBpbXBvcnQgU2FuaXR5Q2hlY2tQYWdlCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IGh3YywgSG9iQnV0dG9uLCBIb2JBbHRCdXR0b24KK2Zyb20gYmIudWkuY3J1bWJzLnBlcnNpc3RlbnR0b29sdGlwIGltcG9ydCBQZXJzaXN0ZW50VG9vbHRpcAoraW1wb3J0IGJiLnVpLmNydW1icy51dGlscworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic21lc3NhZ2VkaWFsb2cgaW1wb3J0IENydW1ic01lc3NhZ2VEaWFsb2cKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5zaW1wbGVzZXR0aW5nc2RpYWxvZyBpbXBvcnQgU2ltcGxlU2V0dGluZ3NEaWFsb2cKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5hZHZhbmNlZHNldHRpbmdzZGlhbG9nIGltcG9ydCBBZHZhbmNlZFNldHRpbmdzRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuZGVwbG95aW1hZ2VkaWFsb2cgaW1wb3J0IERlcGxveUltYWdlRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcubGF5ZXJzZWxlY3Rpb25kaWFsb2cgaW1wb3J0IExheWVyU2VsZWN0aW9uRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuaW1hZ2VzZWxlY3Rpb25kaWFsb2cgaW1wb3J0IEltYWdlU2VsZWN0aW9uRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcucGFyc2luZ3dhcm5pbmdzZGlhbG9nIGltcG9ydCBQYXJzaW5nV2FybmluZ3NEaWFsb2cKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5wcm9wZXJ0eWRpYWxvZyBpbXBvcnQgUHJvcGVydHlEaWFsb2cKKworaG9iVmVyID0gMjAxMjA4MDgKKworY2xhc3MgQ29uZmlndXJhdGlvbjoKKyAgICAnJydSZXByZXNlbnRzIHRoZSBkYXRhIHN0cnVjdHVyZSBvZiBjb25maWd1cmF0aW9uLicnJworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHBhcnNlX3Byb3h5X3N0cmluZyhjbHMsIHByb3h5KToKKyAgICAgICAgcGF0dGVybiA9ICJeXHMqKChodHRwfGh0dHBzfGZ0cHxzb2Nrc3xjdnMpOi8vKT8oKFxTKyk6KFxTKylAKT8oW15cczpdKykoOihcZCspKT8vPyIKKyAgICAgICAgbWF0Y2ggPSByZS5zZWFyY2gocGF0dGVybiwgcHJveHkpCisgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgcmV0dXJuIG1hdGNoLmdyb3VwKDIpLCBtYXRjaC5ncm91cCg0KSwgbWF0Y2guZ3JvdXAoNSksIG1hdGNoLmdyb3VwKDYpLCBtYXRjaC5ncm91cCg4KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUsIE5vbmUsICIiLCAiIgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG1ha2VfaG9zdF9zdHJpbmcoY2xzLCBwcm90LCB1c2VyLCBwYXNzd2QsIGhvc3QsIGRlZmF1bHRfcHJvdD0iIik6CisgICAgICAgIGlmIGhvc3QgPT0gTm9uZSBvciBob3N0ID09ICIiOgorICAgICAgICAgICAgcmV0dXJuICIiCisKKyAgICAgICAgcGFzc3dkID0gcGFzc3dkIG9yICIiCisKKyAgICAgICAgaWYgdXNlciAhPSBOb25lIGFuZCB1c2VyICE9ICIiOgorICAgICAgICAgICAgaWYgcHJvdCA9PSBOb25lIG9yIHByb3QgPT0gIiI6CisgICAgICAgICAgICAgICAgcHJvdCA9IGRlZmF1bHRfcHJvdAorICAgICAgICAgICAgcmV0dXJuIHByb3QgKyAiOi8vIiArIHVzZXIgKyAiOiIgKyBwYXNzd2QgKyAiQCIgKyBob3N0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBwcm90ID09IE5vbmUgb3IgcHJvdCA9PSAiIjoKKyAgICAgICAgICAgICAgICByZXR1cm4gaG9zdAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcHJvdCArICI6Ly8iICsgaG9zdAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG1ha2VfcG9ydF9zdHJpbmcoY2xzLCBwb3J0KToKKyAgICAgICAgcG9ydCA9IHBvcnQgb3IgIiIKKyAgICAgICAgcmV0dXJuIHBvcnQKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBtYWtlX3Byb3h5X3N0cmluZyhjbHMsIHByb3QsIHVzZXIsIHBhc3N3ZCwgaG9zdCwgcG9ydCwgZGVmYXVsdF9wcm90PSIiKToKKyAgICAgICAgaWYgaG9zdCA9PSBOb25lIG9yIGhvc3QgPT0gIiI6IyBvciBwb3J0ID09IE5vbmUgb3IgcG9ydCA9PSAiIjoKKyAgICAgICAgICAgIHJldHVybiAiIgorCisgICAgICAgIHJldHVybiBDb25maWd1cmF0aW9uLm1ha2VfaG9zdF9zdHJpbmcocHJvdCwgdXNlciwgcGFzc3dkLCBob3N0LCBkZWZhdWx0X3Byb3QpICsgKCI6IiArIENvbmZpZ3VyYXRpb24ubWFrZV9wb3J0X3N0cmluZyhwb3J0KSBpZiBwb3J0IGVsc2UgIiIpCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuY3Vycl9tYWNoID0gIiIKKyAgICAgICAgc2VsZi5zZWxlY3RlZF9pbWFnZSA9IE5vbmUKKyAgICAgICAgIyBzZXR0aW5ncworICAgICAgICBzZWxmLmN1cnJfZGlzdHJvID0gIiIKKyAgICAgICAgc2VsZi5kbGRpciA9IHNlbGYuc3N0YXRlZGlyID0gc2VsZi5zc3RhdGVtaXJyb3IgPSAiIgorICAgICAgICBzZWxmLnBtYWtlID0gc2VsZi5iYnRocmVhZCA9IDAKKyAgICAgICAgc2VsZi5jdXJyX3BhY2thZ2VfZm9ybWF0ID0gIiIKKyAgICAgICAgc2VsZi5pbWFnZV9yb290ZnNfc2l6ZSA9IHNlbGYuaW1hZ2VfZXh0cmFfc2l6ZSA9IDAKKyAgICAgICAgc2VsZi5pbWFnZV9vdmVyaGVhZF9mYWN0b3IgPSAxCisgICAgICAgIHNlbGYuaW5jb21wYXRfbGljZW5zZSA9ICIiCisgICAgICAgIHNlbGYuY3Vycl9zZGtfbWFjaGluZSA9ICIiCisgICAgICAgIHNlbGYuY29uZl92ZXJzaW9uID0gc2VsZi5sY29uZl92ZXJzaW9uID0gIiIKKyAgICAgICAgc2VsZi5leHRyYV9zZXR0aW5nID0ge30KKyAgICAgICAgc2VsZi50b29sY2hhaW5fYnVpbGQgPSBGYWxzZQorICAgICAgICBzZWxmLmltYWdlX2ZzdHlwZXMgPSAiIgorICAgICAgICBzZWxmLmltYWdlX3NpemUgPSBOb25lCisgICAgICAgIHNlbGYuaW1hZ2VfcGFja2FnZXMgPSBbXQorICAgICAgICAjIGJibGF5ZXJzLmNvbmYKKyAgICAgICAgc2VsZi5sYXllcnMgPSBbXQorICAgICAgICAjIGltYWdlL3JlY2lwZXMvcGFja2FnZXMKKyAgICAgICAgc2VsZi5jbGVhcl9zZWxlY3Rpb24oKQorCisgICAgICAgIHNlbGYudXNlcl9zZWxlY3RlZF9wYWNrYWdlcyA9IFtdCisKKyAgICAgICAgc2VsZi5kZWZhdWx0X3Rhc2sgPSAiYnVpbGQiCisKKyAgICAgICAgIyBwcm94eSBzZXR0aW5ncworICAgICAgICBzZWxmLmVuYWJsZV9wcm94eSA9IE5vbmUKKyAgICAgICAgc2VsZi5zYW1lX3Byb3h5ID0gRmFsc2UKKyAgICAgICAgc2VsZi5wcm94aWVzID0geworICAgICAgICAgICAgImh0dHAiICA6IFtOb25lLCBOb25lLCBOb25lLCAiIiwgIiJdLCAgIyBwcm90b2NvbCA6IFtwcm90LCB1c2VyLCBwYXNzd2QsIGhvc3QsIHBvcnRdCisgICAgICAgICAgICAiaHR0cHMiIDogW05vbmUsIE5vbmUsIE5vbmUsICIiLCAiIl0sCisgICAgICAgICAgICAiZnRwIiAgIDogW05vbmUsIE5vbmUsIE5vbmUsICIiLCAiIl0sCisgICAgICAgICAgICAic29ja3MiIDogW05vbmUsIE5vbmUsIE5vbmUsICIiLCAiIl0sCisgICAgICAgICAgICAiY3ZzIiAgIDogW05vbmUsIE5vbmUsIE5vbmUsICIiLCAiIl0sCisgICAgICAgIH0KKworICAgIGRlZiBjbGVhcl9zZWxlY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuc2VsZWN0ZWRfcmVjaXBlcyA9IFtdCisgICAgICAgIHNlbGYuc2VsZWN0ZWRfcGFja2FnZXMgPSBbXQorICAgICAgICBzZWxmLmluaXRpYWxfc2VsZWN0ZWRfaW1hZ2UgPSBOb25lCisgICAgICAgIHNlbGYuaW5pdGlhbF9zZWxlY3RlZF9wYWNrYWdlcyA9IFtdCisgICAgICAgIHNlbGYuaW5pdGlhbF91c2VyX3NlbGVjdGVkX3BhY2thZ2VzID0gW10KKworICAgIGRlZiBzcGxpdF9wcm94eShzZWxmLCBwcm90b2NvbCwgcHJveHkpOgorICAgICAgICBlbnRyeSA9IFtdCisgICAgICAgIHByb3QsIHVzZXIsIHBhc3N3ZCwgaG9zdCwgcG9ydCA9IENvbmZpZ3VyYXRpb24ucGFyc2VfcHJveHlfc3RyaW5nKHByb3h5KQorICAgICAgICBlbnRyeS5hcHBlbmQocHJvdCkKKyAgICAgICAgZW50cnkuYXBwZW5kKHVzZXIpCisgICAgICAgIGVudHJ5LmFwcGVuZChwYXNzd2QpCisgICAgICAgIGVudHJ5LmFwcGVuZChob3N0KQorICAgICAgICBlbnRyeS5hcHBlbmQocG9ydCkKKyAgICAgICAgc2VsZi5wcm94aWVzW3Byb3RvY29sXSA9IGVudHJ5CisKKyAgICBkZWYgY29tYmluZV9wcm94eShzZWxmLCBwcm90b2NvbCk6CisgICAgICAgIGVudHJ5ID0gc2VsZi5wcm94aWVzW3Byb3RvY29sXQorICAgICAgICByZXR1cm4gQ29uZmlndXJhdGlvbi5tYWtlX3Byb3h5X3N0cmluZyhlbnRyeVswXSwgZW50cnlbMV0sIGVudHJ5WzJdLCBlbnRyeVszXSwgZW50cnlbNF0sIHByb3RvY29sKQorCisgICAgZGVmIGNvbWJpbmVfaG9zdF9vbmx5KHNlbGYsIHByb3RvY29sKToKKyAgICAgICAgZW50cnkgPSBzZWxmLnByb3hpZXNbcHJvdG9jb2xdCisgICAgICAgIHJldHVybiBDb25maWd1cmF0aW9uLm1ha2VfaG9zdF9zdHJpbmcoZW50cnlbMF0sIGVudHJ5WzFdLCBlbnRyeVsyXSwgZW50cnlbM10sIHByb3RvY29sKQorCisgICAgZGVmIGNvbWJpbmVfcG9ydF9vbmx5KHNlbGYsIHByb3RvY29sKToKKyAgICAgICAgZW50cnkgPSBzZWxmLnByb3hpZXNbcHJvdG9jb2xdCisgICAgICAgIHJldHVybiBDb25maWd1cmF0aW9uLm1ha2VfcG9ydF9zdHJpbmcoZW50cnlbNF0pCisKKyAgICBkZWYgdXBkYXRlKHNlbGYsIHBhcmFtcyk6CisgICAgICAgICMgc2V0dGluZ3MKKyAgICAgICAgc2VsZi5jdXJyX2Rpc3RybyA9IHBhcmFtc1siZGlzdHJvIl0KKyAgICAgICAgc2VsZi5kbGRpciA9IHBhcmFtc1siZGxkaXIiXQorICAgICAgICBzZWxmLnNzdGF0ZWRpciA9IHBhcmFtc1sic3N0YXRlZGlyIl0KKyAgICAgICAgc2VsZi5zc3RhdGVtaXJyb3IgPSBwYXJhbXNbInNzdGF0ZW1pcnJvciJdCisgICAgICAgIHNlbGYucG1ha2UgPSBpbnQocGFyYW1zWyJwbWFrZSJdLnNwbGl0KClbMV0pCisgICAgICAgIHNlbGYuYmJ0aHJlYWQgPSBwYXJhbXNbImJidGhyZWFkIl0KKyAgICAgICAgc2VsZi5jdXJyX3BhY2thZ2VfZm9ybWF0ID0gIiAiLmpvaW4ocGFyYW1zWyJwY2xhc3MiXS5zcGxpdCgicGFja2FnZV8iKSkuc3RyaXAoKQorICAgICAgICBzZWxmLmltYWdlX3Jvb3Rmc19zaXplID0gcGFyYW1zWyJpbWFnZV9yb290ZnNfc2l6ZSJdCisgICAgICAgIHNlbGYuaW1hZ2VfZXh0cmFfc2l6ZSA9IHBhcmFtc1siaW1hZ2VfZXh0cmFfc2l6ZSJdCisgICAgICAgIHNlbGYuaW1hZ2Vfb3ZlcmhlYWRfZmFjdG9yID0gcGFyYW1zWydpbWFnZV9vdmVyaGVhZF9mYWN0b3InXQorICAgICAgICBzZWxmLmluY29tcGF0X2xpY2Vuc2UgPSBwYXJhbXNbImluY29tcGF0X2xpY2Vuc2UiXQorICAgICAgICBzZWxmLmN1cnJfc2RrX21hY2hpbmUgPSBwYXJhbXNbInNka19tYWNoaW5lIl0KKyAgICAgICAgc2VsZi5jb25mX3ZlcnNpb24gPSBwYXJhbXNbImNvbmZfdmVyc2lvbiJdCisgICAgICAgIHNlbGYubGNvbmZfdmVyc2lvbiA9IHBhcmFtc1sibGNvbmZfdmVyc2lvbiJdCisgICAgICAgIHNlbGYuaW1hZ2VfZnN0eXBlcyA9IHBhcmFtc1siaW1hZ2VfZnN0eXBlcyJdCisgICAgICAgICMgc2VsZi5leHRyYV9zZXR0aW5nL3NlbGYudG9vbGNoYWluX2J1aWxkCisgICAgICAgICMgYmJsYXllcnMuY29uZgorICAgICAgICBzZWxmLmxheWVycyA9IHBhcmFtc1sibGF5ZXIiXS5zcGxpdCgpCisgICAgICAgIHNlbGYubGF5ZXJzX25vbl9yZW1vdmFibGUgPSBwYXJhbXNbImxheWVyc19ub25fcmVtb3ZhYmxlIl0uc3BsaXQoKQorICAgICAgICBzZWxmLmRlZmF1bHRfdGFzayA9IHBhcmFtc1siZGVmYXVsdF90YXNrIl0KKworICAgICAgICAjIHByb3h5IHNldHRpbmdzCisgICAgICAgIHNlbGYuZW5hYmxlX3Byb3h5ID0gcGFyYW1zWyJodHRwX3Byb3h5Il0gIT0gIiIgb3IgcGFyYW1zWyJodHRwc19wcm94eSJdICE9ICIiIFwKKyAgICAgICAgICAgIG9yIHBhcmFtc1siZnRwX3Byb3h5Il0gIT0gIiIgb3IgcGFyYW1zWyJzb2Nrc19wcm94eSJdICE9ICIiIFwKKyAgICAgICAgICAgIG9yIHBhcmFtc1siY3ZzX3Byb3h5X2hvc3QiXSAhPSAiIiBvciBwYXJhbXNbImN2c19wcm94eV9wb3J0Il0gIT0gIiIKKyAgICAgICAgc2VsZi5zcGxpdF9wcm94eSgiaHR0cCIsIHBhcmFtc1siaHR0cF9wcm94eSJdKQorICAgICAgICBzZWxmLnNwbGl0X3Byb3h5KCJodHRwcyIsIHBhcmFtc1siaHR0cHNfcHJveHkiXSkKKyAgICAgICAgc2VsZi5zcGxpdF9wcm94eSgiZnRwIiwgcGFyYW1zWyJmdHBfcHJveHkiXSkKKyAgICAgICAgc2VsZi5zcGxpdF9wcm94eSgic29ja3MiLCBwYXJhbXNbInNvY2tzX3Byb3h5Il0pCisgICAgICAgIHNlbGYuc3BsaXRfcHJveHkoImN2cyIsIHBhcmFtc1siY3ZzX3Byb3h5X2hvc3QiXSArICI6IiArIHBhcmFtc1siY3ZzX3Byb3h5X3BvcnQiXSkKKworICAgIGRlZiBzYXZlKHNlbGYsIGhhbmRsZXIsIGRlZmF1bHRzPUZhbHNlKToKKyAgICAgICAgIyBiYmxheWVycy5jb25mCisgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJCQkxBWUVSUyIsIHNlbGYubGF5ZXJzLCAiYmJsYXllcnMuY29uZiIpCisgICAgICAgICMgbG9jYWwuY29uZgorICAgICAgICBpZiBub3QgZGVmYXVsdHM6CisgICAgICAgICAgICBoYW5kbGVyLmVhcmx5X2Fzc2lnbl92YXJfaW5fZmlsZSgiTUFDSElORSIsIHNlbGYuY3Vycl9tYWNoLCAibG9jYWwuY29uZiIpCisgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJESVNUUk8iLCBzZWxmLmN1cnJfZGlzdHJvLCAibG9jYWwuY29uZiIpCisgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJETF9ESVIiLCBzZWxmLmRsZGlyLCAibG9jYWwuY29uZiIpCisgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJTU1RBVEVfRElSIiwgc2VsZi5zc3RhdGVkaXIsICJsb2NhbC5jb25mIikKKyAgICAgICAgc3N0YXRlX21pcnJvcl9saXN0ID0gc2VsZi5zc3RhdGVtaXJyb3Iuc3BsaXQoIlxcbiAiKQorICAgICAgICBzc3RhdGVfbWlycm9yX2xpc3RfbW9kaWZpZWQgPSBbXQorICAgICAgICBmb3IgbWlycm9yIGluIHNzdGF0ZV9taXJyb3JfbGlzdDoKKyAgICAgICAgICAgIGlmIG1pcnJvciAhPSAiIjoKKyAgICAgICAgICAgICAgICBtaXJyb3IgPSBtaXJyb3IgKyAiXFxuIgorICAgICAgICAgICAgICAgIHNzdGF0ZV9taXJyb3JfbGlzdF9tb2RpZmllZC5hcHBlbmQobWlycm9yKQorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiU1NUQVRFX01JUlJPUlMiLCBzc3RhdGVfbWlycm9yX2xpc3RfbW9kaWZpZWQsICJsb2NhbC5jb25mIikKKyAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoIlBBUkFMTEVMX01BS0UiLCAiLWogJXMiICUgc2VsZi5wbWFrZSwgImxvY2FsLmNvbmYiKQorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiQkJfTlVNQkVSX1RIUkVBRFMiLCBzZWxmLmJidGhyZWFkLCAibG9jYWwuY29uZiIpCisgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJQQUNLQUdFX0NMQVNTRVMiLCAiICIuam9pbihbInBhY2thZ2VfIiArIGkgZm9yIGkgaW4gc2VsZi5jdXJyX3BhY2thZ2VfZm9ybWF0LnNwbGl0KCldKSwgImxvY2FsLmNvbmYiKQorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiSU1BR0VfUk9PVEZTX1NJWkUiLCBzZWxmLmltYWdlX3Jvb3Rmc19zaXplLCAibG9jYWwuY29uZiIpCisgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJJTUFHRV9FWFRSQV9TUEFDRSIsIHNlbGYuaW1hZ2VfZXh0cmFfc2l6ZSwgImxvY2FsLmNvbmYiKQorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiSU5DT01QQVRJQkxFX0xJQ0VOU0UiLCBzZWxmLmluY29tcGF0X2xpY2Vuc2UsICJsb2NhbC5jb25mIikKKyAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoIlNES01BQ0hJTkUiLCBzZWxmLmN1cnJfc2RrX21hY2hpbmUsICJsb2NhbC5jb25mIikKKyAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoIkNPTkZfVkVSU0lPTiIsIHNlbGYuY29uZl92ZXJzaW9uLCAibG9jYWwuY29uZiIpCisgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJMQ09ORl9WRVJTSU9OIiwgc2VsZi5sY29uZl92ZXJzaW9uLCAiYmJsYXllcnMuY29uZiIpCisgICAgICAgIGhhbmRsZXIuc2V0X2V4dHJhX2NvbmZpZyhzZWxmLmV4dHJhX3NldHRpbmcpCisgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJUT09MQ0hBSU5fQlVJTEQiLCBzZWxmLnRvb2xjaGFpbl9idWlsZCwgImxvY2FsLmNvbmYiKQorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiSU1BR0VfRlNUWVBFUyIsIHNlbGYuaW1hZ2VfZnN0eXBlcywgImxvY2FsLmNvbmYiKQorICAgICAgICBpZiBub3QgZGVmYXVsdHM6CisgICAgICAgICAgICAjIGltYWdlL3JlY2lwZXMvcGFja2FnZXMKKyAgICAgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJfX1NFTEVDVEVEX0lNQUdFX18iLCBzZWxmLnNlbGVjdGVkX2ltYWdlLCAibG9jYWwuY29uZiIpCisgICAgICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiREVQRU5EUyIsIHNlbGYuc2VsZWN0ZWRfcmVjaXBlcywgImxvY2FsLmNvbmYiKQorICAgICAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoIklNQUdFX0lOU1RBTEwiLCBzZWxmLnVzZXJfc2VsZWN0ZWRfcGFja2FnZXMsICJsb2NhbC5jb25mIikKKyAgICAgICAgIyBwcm94eQorICAgICAgICBpZiBzZWxmLmVuYWJsZV9wcm94eSA9PSBUcnVlOgorICAgICAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoImh0dHBfcHJveHkiLCBzZWxmLmNvbWJpbmVfcHJveHkoImh0dHAiKSwgImxvY2FsLmNvbmYiKQorICAgICAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoImh0dHBzX3Byb3h5Iiwgc2VsZi5jb21iaW5lX3Byb3h5KCJodHRwcyIpLCAibG9jYWwuY29uZiIpCisgICAgICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiZnRwX3Byb3h5Iiwgc2VsZi5jb21iaW5lX3Byb3h5KCJmdHAiKSwgImxvY2FsLmNvbmYiKQorICAgICAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoImFsbF9wcm94eSIsIHNlbGYuY29tYmluZV9wcm94eSgic29ja3MiKSwgImxvY2FsLmNvbmYiKQorICAgICAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoIkNWU19QUk9YWV9IT1NUIiwgc2VsZi5jb21iaW5lX2hvc3Rfb25seSgiY3ZzIiksICJsb2NhbC5jb25mIikKKyAgICAgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJDVlNfUFJPWFlfUE9SVCIsIHNlbGYuY29tYmluZV9wb3J0X29ubHkoImN2cyIpLCAibG9jYWwuY29uZiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiaHR0cF9wcm94eSIsICIiLCAibG9jYWwuY29uZiIpCisgICAgICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiaHR0cHNfcHJveHkiLCAiIiwgImxvY2FsLmNvbmYiKQorICAgICAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoImZ0cF9wcm94eSIsICIiLCAibG9jYWwuY29uZiIpCisgICAgICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiYWxsX3Byb3h5IiwgIiIsICJsb2NhbC5jb25mIikKKyAgICAgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJDVlNfUFJPWFlfSE9TVCIsICIiLCAibG9jYWwuY29uZiIpCisgICAgICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiQ1ZTX1BST1hZX1BPUlQiLCAiIiwgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHMgPSAiVkVSU0lPTjogJyVzJywgQkJMQVlFUlM6ICclcycsIE1BQ0hJTkU6ICclcycsIERJU1RSTzogJyVzJywgRExfRElSOiAnJXMnLCIgJSBcCisgICAgICAgICAgICAoaG9iVmVyLCAiICIuam9pbihzZWxmLmxheWVycyksIHNlbGYuY3Vycl9tYWNoLCBzZWxmLmN1cnJfZGlzdHJvLCBzZWxmLmRsZGlyICkKKyAgICAgICAgcyArPSAiU1NUQVRFX0RJUjogJyVzJywgU1NUQVRFX01JUlJPUjogJyVzJywgUEFSQUxMRUxfTUFLRTogJy1qICVzJywgQkJfTlVNQkVSX1RIUkVBRFM6ICclcycsIFBBQ0tBR0VfQ0xBU1NFUzogJyVzJywgIiAlIFwKKyAgICAgICAgICAgIChzZWxmLnNzdGF0ZWRpciwgc2VsZi5zc3RhdGVtaXJyb3IsIHNlbGYucG1ha2UsIHNlbGYuYmJ0aHJlYWQsICIgIi5qb2luKFsicGFja2FnZV8iICsgaSBmb3IgaSBpbiBzZWxmLmN1cnJfcGFja2FnZV9mb3JtYXQuc3BsaXQoKV0pKQorICAgICAgICBzICs9ICJJTUFHRV9ST09URlNfU0laRTogJyVzJywgSU1BR0VfRVhUUkFfU1BBQ0U6ICclcycsIElOQ09NUEFUSUJMRV9MSUNFTlNFOiAnJXMnLCBTREtNQUNISU5FOiAnJXMnLCBDT05GX1ZFUlNJT046ICclcycsICIgJSBcCisgICAgICAgICAgICAoc2VsZi5pbWFnZV9yb290ZnNfc2l6ZSwgc2VsZi5pbWFnZV9leHRyYV9zaXplLCBzZWxmLmluY29tcGF0X2xpY2Vuc2UsIHNlbGYuY3Vycl9zZGtfbWFjaGluZSwgc2VsZi5jb25mX3ZlcnNpb24pCisgICAgICAgIHMgKz0gIkxDT05GX1ZFUlNJT046ICclcycsIEVYVFJBX1NFVFRJTkc6ICclcycsIFRPT0xDSEFJTl9CVUlMRDogJyVzJywgSU1BR0VfRlNUWVBFUzogJyVzJywgX19TRUxFQ1RFRF9JTUFHRV9fOiAnJXMnLCAiICUgXAorICAgICAgICAgICAgKHNlbGYubGNvbmZfdmVyc2lvbiwgc2VsZi5leHRyYV9zZXR0aW5nLCBzZWxmLnRvb2xjaGFpbl9idWlsZCwgc2VsZi5pbWFnZV9mc3R5cGVzLCBzZWxmLnNlbGVjdGVkX2ltYWdlKQorICAgICAgICBzICs9ICJERVBFTkRTOiAnJXMnLCBJTUFHRV9JTlNUQUxMOiAnJXMnLCBlbmFibGVfcHJveHk6ICclcycsIHVzZV9zYW1lX3Byb3h5OiAnJXMnLCBodHRwX3Byb3h5OiAnJXMnLCAiICUgXAorICAgICAgICAgICAgKHNlbGYuc2VsZWN0ZWRfcmVjaXBlcywgc2VsZi51c2VyX3NlbGVjdGVkX3BhY2thZ2VzLCBzZWxmLmVuYWJsZV9wcm94eSwgc2VsZi5zYW1lX3Byb3h5LCBzZWxmLmNvbWJpbmVfcHJveHkoImh0dHAiKSkKKyAgICAgICAgcyArPSAiaHR0cHNfcHJveHk6ICclcycsIGZ0cF9wcm94eTogJyVzJywgYWxsX3Byb3h5OiAnJXMnLCBDVlNfUFJPWFlfSE9TVDogJyVzJywgQ1ZTX1BST1hZX1BPUlQ6ICclcyciICUgXAorICAgICAgICAgICAgKHNlbGYuY29tYmluZV9wcm94eSgiaHR0cHMiKSwgc2VsZi5jb21iaW5lX3Byb3h5KCJmdHAiKSwgc2VsZi5jb21iaW5lX3Byb3h5KCJzb2NrcyIpLAorICAgICAgICAgICAgIHNlbGYuY29tYmluZV9ob3N0X29ubHkoImN2cyIpLCBzZWxmLmNvbWJpbmVfcG9ydF9vbmx5KCJjdnMiKSkKKyAgICAgICAgcmV0dXJuIHMKKworY2xhc3MgUGFyYW1ldGVyczoKKyAgICAnJydSZXByZXNlbnRzIG90aGVyIHZhcmlhYmxlcyBsaWtlIGF2YWlsYWJsZSBtYWNoaW5lcywgZXRjLicnJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAjIFZhcmlhYmxlcworICAgICAgICBzZWxmLm1heF90aHJlYWRzID0gNjU1MzUKKyAgICAgICAgc2VsZi5jb3JlX2Jhc2UgPSAiIgorICAgICAgICBzZWxmLmltYWdlX2FkZHIgPSAiIgorICAgICAgICBzZWxmLmltYWdlX3R5cGVzID0gW10KKyAgICAgICAgc2VsZi5ydW5uYWJsZV9pbWFnZV90eXBlcyA9IFtdCisgICAgICAgIHNlbGYucnVubmFibGVfbWFjaGluZV9wYXR0ZXJucyA9IFtdCisgICAgICAgIHNlbGYuZGVwbG95YWJsZV9pbWFnZV90eXBlcyA9IFtdCisgICAgICAgIHNlbGYudG1wZGlyID0gIiIKKworICAgICAgICBzZWxmLmFsbF9tYWNoaW5lcyA9IFtdCisgICAgICAgIHNlbGYuYWxsX3BhY2thZ2VfZm9ybWF0cyA9IFtdCisgICAgICAgIHNlbGYuYWxsX2Rpc3Ryb3MgPSBbXQorICAgICAgICBzZWxmLmFsbF9zZGtfbWFjaGluZXMgPSBbXQorICAgICAgICBzZWxmLmFsbF9sYXllcnMgPSBbXQorICAgICAgICBzZWxmLmltYWdlX25hbWVzID0gW10KKyAgICAgICAgc2VsZi5pbWFnZV93aGl0ZV9wYXR0ZXJuID0gIiIKKyAgICAgICAgc2VsZi5pbWFnZV9ibGFja19wYXR0ZXJuID0gIiIKKworICAgICAgICAjIGZvciBidWlsZCBsb2cgdG8gc2hvdworICAgICAgICBzZWxmLmJiX3ZlcnNpb24gPSAiIgorICAgICAgICBzZWxmLnRhcmdldF9hcmNoID0gIiIKKyAgICAgICAgc2VsZi50YXJnZXRfb3MgPSAiIgorICAgICAgICBzZWxmLmRpc3Ryb192ZXJzaW9uID0gIiIKKyAgICAgICAgc2VsZi50dW5lX3BrZ2FyY2ggPSAiIgorCisgICAgZGVmIHVwZGF0ZShzZWxmLCBwYXJhbXMpOgorICAgICAgICBzZWxmLm1heF90aHJlYWRzID0gcGFyYW1zWyJtYXhfdGhyZWFkcyJdCisgICAgICAgIHNlbGYuY29yZV9iYXNlID0gcGFyYW1zWyJjb3JlX2Jhc2UiXQorICAgICAgICBzZWxmLmltYWdlX2FkZHIgPSBwYXJhbXNbImltYWdlX2FkZHIiXQorICAgICAgICBzZWxmLmltYWdlX3R5cGVzID0gcGFyYW1zWyJpbWFnZV90eXBlcyJdLnNwbGl0KCkKKyAgICAgICAgc2VsZi5ydW5uYWJsZV9pbWFnZV90eXBlcyA9IHBhcmFtc1sicnVubmFibGVfaW1hZ2VfdHlwZXMiXS5zcGxpdCgpCisgICAgICAgIHNlbGYucnVubmFibGVfbWFjaGluZV9wYXR0ZXJucyA9IHBhcmFtc1sicnVubmFibGVfbWFjaGluZV9wYXR0ZXJucyJdLnNwbGl0KCkKKyAgICAgICAgc2VsZi5kZXBsb3lhYmxlX2ltYWdlX3R5cGVzID0gcGFyYW1zWyJkZXBsb3lhYmxlX2ltYWdlX3R5cGVzIl0uc3BsaXQoKQorICAgICAgICBzZWxmLnRtcGRpciA9IHBhcmFtc1sidG1wZGlyIl0KKyAgICAgICAgc2VsZi5pbWFnZV93aGl0ZV9wYXR0ZXJuID0gcGFyYW1zWyJpbWFnZV93aGl0ZV9wYXR0ZXJuIl0KKyAgICAgICAgc2VsZi5pbWFnZV9ibGFja19wYXR0ZXJuID0gcGFyYW1zWyJpbWFnZV9ibGFja19wYXR0ZXJuIl0KKyAgICAgICAgc2VsZi5rZXJuZWxfaW1hZ2VfdHlwZSA9IHBhcmFtc1sia2VybmVsX2ltYWdlX3R5cGUiXQorICAgICAgICAjIGZvciBidWlsZCBsb2cgdG8gc2hvdworICAgICAgICBzZWxmLmJiX3ZlcnNpb24gPSBwYXJhbXNbImJiX3ZlcnNpb24iXQorICAgICAgICBzZWxmLnRhcmdldF9hcmNoID0gcGFyYW1zWyJ0YXJnZXRfYXJjaCJdCisgICAgICAgIHNlbGYudGFyZ2V0X29zID0gcGFyYW1zWyJ0YXJnZXRfb3MiXQorICAgICAgICBzZWxmLmRpc3Ryb192ZXJzaW9uID0gcGFyYW1zWyJkaXN0cm9fdmVyc2lvbiJdCisgICAgICAgIHNlbGYudHVuZV9wa2dhcmNoID0gcGFyYW1zWyJ0dW5lX3BrZ2FyY2giXQorCitkZWYgaG9iX2NvbmZfZmlsdGVyKGZuLCBkYXRhKToKKyAgICBpZiBmbi5lbmRzd2l0aCgiL2xvY2FsLmNvbmYiKToKKyAgICAgICAgZGlzdHJvID0gZGF0YS5nZXRWYXIoIkRJU1RST19IT0IiLCBGYWxzZSkKKyAgICAgICAgaWYgZGlzdHJvOgorICAgICAgICAgICAgaWYgZGlzdHJvICE9ICJkZWZhdWx0c2V0dXAiOgorICAgICAgICAgICAgICAgIGRhdGEuc2V0VmFyKCJESVNUUk8iLCBkaXN0cm8pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRhdGEuZGVsVmFyKCJESVNUUk8iKQorCisgICAgICAgIGtleXMgPSBbIk1BQ0hJTkVfSE9CIiwgIlNES01BQ0hJTkVfSE9CIiwgIlBBQ0tBR0VfQ0xBU1NFU19IT0IiLCBcCisgICAgICAgICAgICAgICAgIkJCX05VTUJFUl9USFJFQURTX0hPQiIsICJQQVJBTExFTF9NQUtFX0hPQiIsICJETF9ESVJfSE9CIiwgXAorICAgICAgICAgICAgICAgICJTU1RBVEVfRElSX0hPQiIsICJTU1RBVEVfTUlSUk9SU19IT0IiLCAiSU5DT01QQVRJQkxFX0xJQ0VOU0VfSE9CIl0KKyAgICAgICAgZm9yIGtleSBpbiBrZXlzOgorICAgICAgICAgICAgdmFyX2hvYiA9IGRhdGEuZ2V0VmFyKGtleSwgRmFsc2UpCisgICAgICAgICAgICBpZiB2YXJfaG9iOgorICAgICAgICAgICAgICAgIGRhdGEuc2V0VmFyKGtleS5zcGxpdCgiX0hPQiIpWzBdLCB2YXJfaG9iKQorICAgICAgICByZXR1cm4KKworICAgIGlmIGZuLmVuZHN3aXRoKCIvYmJsYXllcnMuY29uZiIpOgorICAgICAgICBsYXllcnMgPSBkYXRhLmdldFZhcigiQkJMQVlFUlNfSE9CIiwgRmFsc2UpCisgICAgICAgIGlmIGxheWVyczoKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyKCJCQkxBWUVSUyIsIGxheWVycykKKyAgICAgICAgcmV0dXJuCisKK2NsYXNzIEJ1aWxkZXIoZ3RrLldpbmRvdyk6CisKKyAgICAoSU5JVElBTF9DSEVDS1MsCisgICAgIE1BQ0hJTkVfU0VMRUNUSU9OLAorICAgICBSQ1BQS0dJTkZPX1BPUFVMQVRJTkcsCisgICAgIFJDUFBLR0lORk9fUE9QVUxBVEVELAorICAgICBCQVNFSU1HX1NFTEVDVEVELAorICAgICBSRUNJUEVfU0VMRUNUSU9OLAorICAgICBQQUNLQUdFX0dFTkVSQVRJTkcsCisgICAgIFBBQ0tBR0VfR0VORVJBVEVELAorICAgICBQQUNLQUdFX1NFTEVDVElPTiwKKyAgICAgRkFTVF9JTUFHRV9HRU5FUkFUSU5HLAorICAgICBJTUFHRV9HRU5FUkFUSU5HLAorICAgICBJTUFHRV9HRU5FUkFURUQsCisgICAgIE1ZX0lNQUdFX09QRU5FRCwKKyAgICAgQkFDSywKKyAgICAgRU5EX05PT1ApID0gcmFuZ2UoMTUpCisKKyAgICAoU0FOSVRZX0NIRUNLLAorICAgICBJTUFHRV9DT05GSUdVUkFUSU9OLAorICAgICBSRUNJUEVfREVUQUlMUywKKyAgICAgQlVJTERfREVUQUlMUywKKyAgICAgUEFDS0FHRV9ERVRBSUxTLAorICAgICBJTUFHRV9ERVRBSUxTLAorICAgICBFTkRfVEFCKSA9IHJhbmdlKDcpCisKKyAgICBfX3N0ZXAycGFnZV9fID0geworICAgICAgICBJTklUSUFMX0NIRUNLUyAgICAgICAgOiBTQU5JVFlfQ0hFQ0ssCisgICAgICAgIE1BQ0hJTkVfU0VMRUNUSU9OICAgICA6IElNQUdFX0NPTkZJR1VSQVRJT04sCisgICAgICAgIFJDUFBLR0lORk9fUE9QVUxBVElORyA6IElNQUdFX0NPTkZJR1VSQVRJT04sCisgICAgICAgIFJDUFBLR0lORk9fUE9QVUxBVEVEICA6IElNQUdFX0NPTkZJR1VSQVRJT04sCisgICAgICAgIEJBU0VJTUdfU0VMRUNURUQgICAgICA6IElNQUdFX0NPTkZJR1VSQVRJT04sCisgICAgICAgIFJFQ0lQRV9TRUxFQ1RJT04gICAgICA6IFJFQ0lQRV9ERVRBSUxTLAorICAgICAgICBQQUNLQUdFX0dFTkVSQVRJTkcgICAgOiBCVUlMRF9ERVRBSUxTLAorICAgICAgICBQQUNLQUdFX0dFTkVSQVRFRCAgICAgOiBQQUNLQUdFX0RFVEFJTFMsCisgICAgICAgIFBBQ0tBR0VfU0VMRUNUSU9OICAgICA6IFBBQ0tBR0VfREVUQUlMUywKKyAgICAgICAgRkFTVF9JTUFHRV9HRU5FUkFUSU5HIDogQlVJTERfREVUQUlMUywKKyAgICAgICAgSU1BR0VfR0VORVJBVElORyAgICAgIDogQlVJTERfREVUQUlMUywKKyAgICAgICAgSU1BR0VfR0VORVJBVEVEICAgICAgIDogSU1BR0VfREVUQUlMUywKKyAgICAgICAgTVlfSU1BR0VfT1BFTkVEICAgICAgIDogSU1BR0VfREVUQUlMUywKKyAgICAgICAgRU5EX05PT1AgICAgICAgICAgICAgIDogTm9uZSwKKyAgICB9CisKKyAgICBTQU5JVFlfQ0hFQ0tfTUlOX0RJU1BMQVlfVElNRSA9IDUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob2JIYW5kbGVyLCByZWNpcGVfbW9kZWwsIHBhY2thZ2VfbW9kZWwpOgorICAgICAgICBzdXBlcihCdWlsZGVyLCBzZWxmKS5fX2luaXRfXygpCisKKyAgICAgICAgc2VsZi5ob2JfaW1hZ2UgPSAiaG9iLWltYWdlIgorCisgICAgICAgICMgaGFuZGxlcgorICAgICAgICBzZWxmLmhhbmRsZXIgPSBob2JIYW5kbGVyCisKKyAgICAgICAgIyBsb2dnZXIKKyAgICAgICAgc2VsZi5sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZSIpCisgICAgICAgIHNlbGYuY29uc29sZWxvZyA9IE5vbmUKKyAgICAgICAgc2VsZi5jdXJyZW50X2xvZ2ZpbGUgPSBOb25lCisKKyAgICAgICAgIyBjb25maWd1cmF0aW9uIGFuZCBwYXJhbWV0ZXJzCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbiA9IENvbmZpZ3VyYXRpb24oKQorICAgICAgICBzZWxmLnBhcmFtZXRlcnMgPSBQYXJhbWV0ZXJzKCkKKworICAgICAgICAjIGJ1aWxkIHN0ZXAKKyAgICAgICAgc2VsZi5jdXJyZW50X3N0ZXAgPSBOb25lCisgICAgICAgIHNlbGYucHJldmlvdXNfc3RlcCA9IE5vbmUKKworICAgICAgICBzZWxmLnN0b3BwaW5nID0gRmFsc2UKKworICAgICAgICAjIHJlY2lwZSBtb2RlbCBhbmQgcGFja2FnZSBtb2RlbAorICAgICAgICBzZWxmLnJlY2lwZV9tb2RlbCA9IHJlY2lwZV9tb2RlbAorICAgICAgICBzZWxmLnBhY2thZ2VfbW9kZWwgPSBwYWNrYWdlX21vZGVsCisKKyAgICAgICAgIyBJbmRpY2F0ZSB3aGV0aGVyIHVzZXIgaGFzIGN1c3RvbWl6ZWQgdGhlIGltYWdlCisgICAgICAgIHNlbGYuY3VzdG9taXplZCA9IEZhbHNlCisKKyAgICAgICAgIyBJbmRpY2F0ZSB3aGV0aGVyIHRoZSBVSSBpcyB3b3JraW5nCisgICAgICAgIHNlbGYuc2Vuc2l0aXZlID0gVHJ1ZQorCisgICAgICAgICMgSW5kaWNhdGUgd2hldGhlciB0aGUgc2FuaXR5IGNoZWNrIHJhbgorICAgICAgICBzZWxmLnNhbml0eV9jaGVja2VkID0gRmFsc2UKKworICAgICAgICAjIHNhdmUgcGFyc2luZyB3YXJuaW5ncworICAgICAgICBzZWxmLnBhcnNpbmdfd2FybmluZ3MgPSBbXQorCisgICAgICAgICMgY3JlYXRlIHZpc3VhbCBlbGVtZW50cworICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorCisgICAgICAgICMgY29ubmVjdCB0aGUgc2lnbmFscyB0byBmdW5jdGlvbnMKKyAgICAgICAgc2VsZi5jb25uZWN0KCJkZWxldGUtZXZlbnQiLCBzZWxmLmRlc3Ryb3lfd2luZG93X2NiKQorICAgICAgICBzZWxmLnJlY2lwZV9tb2RlbC5jb25uZWN0ICgicmVjaXBlLXNlbGVjdGlvbi1jaGFuZ2VkIiwgIHNlbGYucmVjaXBlbGlzdF9jaGFuZ2VkX2NiKQorICAgICAgICBzZWxmLnBhY2thZ2VfbW9kZWwuY29ubmVjdCgicGFja2FnZS1zZWxlY3Rpb24tY2hhbmdlZCIsIHNlbGYucGFja2FnZWxpc3RfY2hhbmdlZF9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmNvbm5lY3QoImNvbmZpZy11cGRhdGVkIiwgICAgICAgICAgIHNlbGYuaGFuZGxlcl9jb25maWdfdXBkYXRlZF9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmNvbm5lY3QoInBhY2thZ2UtZm9ybWF0cy11cGRhdGVkIiwgIHNlbGYuaGFuZGxlcl9wYWNrYWdlX2Zvcm1hdHNfdXBkYXRlZF9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmNvbm5lY3QoInBhcnNpbmctc3RhcnRlZCIsICAgICAgICAgIHNlbGYuaGFuZGxlcl9wYXJzaW5nX3N0YXJ0ZWRfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5jb25uZWN0KCJwYXJzaW5nIiwgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZXJfcGFyc2luZ19jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmNvbm5lY3QoInBhcnNpbmctY29tcGxldGVkIiwgICAgICAgIHNlbGYuaGFuZGxlcl9wYXJzaW5nX2NvbXBsZXRlZF9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmJ1aWxkLmNvbm5lY3QoImJ1aWxkLXN0YXJ0ZWQiLCAgICAgIHNlbGYuaGFuZGxlcl9idWlsZF9zdGFydGVkX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuYnVpbGQuY29ubmVjdCgiYnVpbGQtc3VjY2VlZGVkIiwgICAgc2VsZi5oYW5kbGVyX2J1aWxkX3N1Y2NlZWRlZF9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmJ1aWxkLmNvbm5lY3QoImJ1aWxkLWZhaWxlZCIsICAgICAgIHNlbGYuaGFuZGxlcl9idWlsZF9mYWlsZWRfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5idWlsZC5jb25uZWN0KCJidWlsZC1hYm9ydGVkIiwgICAgICBzZWxmLmhhbmRsZXJfYnVpbGRfYWJvcnRlZF9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmJ1aWxkLmNvbm5lY3QoInRhc2stc3RhcnRlZCIsICAgICAgIHNlbGYuaGFuZGxlcl90YXNrX3N0YXJ0ZWRfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5idWlsZC5jb25uZWN0KCJkaXNrLWZ1bGwiLCAgICAgICAgICBzZWxmLmhhbmRsZXJfZGlza19mdWxsX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuYnVpbGQuY29ubmVjdCgibG9nLWVycm9yIiwgICAgICAgICAgc2VsZi5oYW5kbGVyX2J1aWxkX2ZhaWx1cmVfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5idWlsZC5jb25uZWN0KCJsb2ctd2FybmluZyIsICAgICAgICBzZWxmLmhhbmRsZXJfYnVpbGRfZmFpbHVyZV9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmJ1aWxkLmNvbm5lY3QoImxvZyIsICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlcl9idWlsZF9sb2dfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5idWlsZC5jb25uZWN0KCJuby1wcm92aWRlciIsICAgICAgICBzZWxmLmhhbmRsZXJfbm9fcHJvdmlkZXJfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5jb25uZWN0KCJnZW5lcmF0aW5nLWRhdGEiLCAgICAgICAgICBzZWxmLmhhbmRsZXJfZ2VuZXJhdGluZ19kYXRhX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuY29ubmVjdCgiZGF0YS1nZW5lcmF0ZWQiLCAgICAgICAgICAgc2VsZi5oYW5kbGVyX2RhdGFfZ2VuZXJhdGVkX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuY29ubmVjdCgiY29tbWFuZC1zdWNjZWVkZWQiLCAgICAgICAgc2VsZi5oYW5kbGVyX2NvbW1hbmRfc3VjY2VlZGVkX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuY29ubmVjdCgiY29tbWFuZC1mYWlsZWQiLCAgICAgICAgICAgc2VsZi5oYW5kbGVyX2NvbW1hbmRfZmFpbGVkX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuY29ubmVjdCgicGFyc2luZy13YXJuaW5nIiwgICAgICAgICAgc2VsZi5oYW5kbGVyX3BhcnNpbmdfd2FybmluZ19jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmNvbm5lY3QoInNhbml0eS1mYWlsZWQiLCAgICAgICAgICAgIHNlbGYuaGFuZGxlcl9zYW5pdHlfZmFpbGVkX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuY29ubmVjdCgicmVjaXBlLXBvcHVsYXRlZCIsICAgICAgICAgc2VsZi5oYW5kbGVyX3JlY2lwZV9wb3B1bGF0ZWRfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5jb25uZWN0KCJwYWNrYWdlLXBvcHVsYXRlZCIsICAgICAgICBzZWxmLmhhbmRsZXJfcGFja2FnZV9wb3B1bGF0ZWRfY2IpCisKKyAgICAgICAgc2VsZi5oYW5kbGVyLmFwcGVuZF90b19iYmZpbGVzKCIke1RPUERJUn0vcmVjaXBlcy9pbWFnZXMvY3VzdG9tLyouYmIiKQorICAgICAgICBzZWxmLmhhbmRsZXIuYXBwZW5kX3RvX2JiZmlsZXMoIiR7VE9QRElSfS9yZWNpcGVzL2ltYWdlcy8qLmJiIikKKyAgICAgICAgc2VsZi5pbml0aWF0ZV9uZXdfYnVpbGRfYXN5bmMoKQorCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0lOVCwgc2VsZi5ldmVudF9oYW5kbGVfU0lHSU5UKQorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgIHNlbGYuc2V0X3RpdGxlKCJIb2IiKQorICAgICAgICBzZWxmLnNldF9pY29uX25hbWUoImFwcGxpY2F0aW9ucy1kZXZlbG9wbWVudCIpCisgICAgICAgIHNlbGYuc2V0X3Jlc2l6YWJsZShUcnVlKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpbmRvd193aWR0aCA9IHNlbGYuZ2V0X3NjcmVlbigpLmdldF93aWR0aCgpCisgICAgICAgICAgICB3aW5kb3dfaGVpZ2h0ID0gc2VsZi5nZXRfc2NyZWVuKCkuZ2V0X2hlaWdodCgpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHByaW50ICJQbGVhc2Ugc2V0IERJU1BMQVkgdmFyaWFibGUgYmVmb3JlIHJ1bm5pbmcgSG9iLiIKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgaWYgd2luZG93X3dpZHRoID49IGh3Yy5NQUlOX1dJTl9XSURUSDoKKyAgICAgICAgICAgIHdpbmRvd193aWR0aCA9IGh3Yy5NQUlOX1dJTl9XSURUSAorICAgICAgICAgICAgd2luZG93X2hlaWdodCA9IGh3Yy5NQUlOX1dJTl9IRUlHSFQKKyAgICAgICAgc2VsZi5zZXRfc2l6ZV9yZXF1ZXN0KHdpbmRvd193aWR0aCwgd2luZG93X2hlaWdodCkKKworICAgICAgICBzZWxmLnZib3ggPSBndGsuVkJveChGYWxzZSwgMCkKKyAgICAgICAgc2VsZi52Ym94LnNldF9ib3JkZXJfd2lkdGgoMCkKKyAgICAgICAgc2VsZi5hZGQoc2VsZi52Ym94KQorCisgICAgICAgICMgY3JlYXRlIHBhZ2VzCisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlID0gSW1hZ2VDb25maWd1cmF0aW9uUGFnZShzZWxmKQorICAgICAgICBzZWxmLnJlY2lwZV9kZXRhaWxzX3BhZ2UgICAgICA9IFJlY2lwZVNlbGVjdGlvblBhZ2Uoc2VsZikKKyAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2UgICAgICAgPSBCdWlsZERldGFpbHNQYWdlKHNlbGYpCisgICAgICAgIHNlbGYucGFja2FnZV9kZXRhaWxzX3BhZ2UgICAgID0gUGFja2FnZVNlbGVjdGlvblBhZ2Uoc2VsZikKKyAgICAgICAgc2VsZi5pbWFnZV9kZXRhaWxzX3BhZ2UgICAgICAgPSBJbWFnZURldGFpbHNQYWdlKHNlbGYpCisgICAgICAgIHNlbGYuc2FuaXR5X2NoZWNrX3BhZ2UgICAgICAgID0gU2FuaXR5Q2hlY2tQYWdlKHNlbGYpCisgICAgICAgIHNlbGYuZGlzcGxheV9zYW5pdHlfY2hlY2sgPSBGYWxzZQorICAgICAgICBzZWxmLnNhbml0eV9jaGVja19wb3N0X2Z1bmMgPSBGYWxzZQorICAgICAgICBzZWxmLmhhZF9uZXR3b3JrX2Vycm9yID0gRmFsc2UKKworICAgICAgICBzZWxmLm5iID0gZ3RrLk5vdGVib29rKCkKKyAgICAgICAgc2VsZi5uYi5zZXRfc2hvd190YWJzKEZhbHNlKQorICAgICAgICBzZWxmLm5iLmluc2VydF9wYWdlKHNlbGYuc2FuaXR5X2NoZWNrX3BhZ2UsICAgICAgICBOb25lLCBzZWxmLlNBTklUWV9DSEVDSykKKyAgICAgICAgc2VsZi5uYi5pbnNlcnRfcGFnZShzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZSwgTm9uZSwgc2VsZi5JTUFHRV9DT05GSUdVUkFUSU9OKQorICAgICAgICBzZWxmLm5iLmluc2VydF9wYWdlKHNlbGYucmVjaXBlX2RldGFpbHNfcGFnZSwgICAgICBOb25lLCBzZWxmLlJFQ0lQRV9ERVRBSUxTKQorICAgICAgICBzZWxmLm5iLmluc2VydF9wYWdlKHNlbGYuYnVpbGRfZGV0YWlsc19wYWdlLCAgICAgICBOb25lLCBzZWxmLkJVSUxEX0RFVEFJTFMpCisgICAgICAgIHNlbGYubmIuaW5zZXJ0X3BhZ2Uoc2VsZi5wYWNrYWdlX2RldGFpbHNfcGFnZSwgICAgIE5vbmUsIHNlbGYuUEFDS0FHRV9ERVRBSUxTKQorICAgICAgICBzZWxmLm5iLmluc2VydF9wYWdlKHNlbGYuaW1hZ2VfZGV0YWlsc19wYWdlLCAgICAgICBOb25lLCBzZWxmLklNQUdFX0RFVEFJTFMpCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYubmIsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisgICAgICAgIHNlbGYubmIuc2V0X2N1cnJlbnRfcGFnZSgwKQorCisgICAgZGVmIHNhbml0eV9jaGVja190aW1lb3V0KHNlbGYpOgorICAgICAgICAjIFRoZSBtaW5pbXVtIHRpbWUgZm9yIHNob3dpbmcgdGhlICdzYW5pdHkgY2hlY2snIHBhZ2UgaGFzIHBhc3NlCisgICAgICAgICMgSWYgc29tZW9uZSBzZXQgdGhlICdzYW5pdHlfY2hlY2tfcG9zdF9zdGVwJyBtZWFud2hpbGUsIGV4ZWN1dGUgaXQgbm93CisgICAgICAgIHNlbGYuZGlzcGxheV9zYW5pdHlfY2hlY2sgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLnNhbml0eV9jaGVja19wb3N0X2Z1bmM6CisgICAgICAgICAgdGVtcCA9IHNlbGYuc2FuaXR5X2NoZWNrX3Bvc3RfZnVuYworICAgICAgICAgIHNlbGYuc2FuaXR5X2NoZWNrX3Bvc3RfZnVuYyA9IE5vbmUKKyAgICAgICAgICB0ZW1wKCkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgc2hvd19zYW5pdHlfY2hlY2tfcGFnZShzZWxmKToKKyAgICAgICAgIyBUaGlzIHdpbmRvdyBtdXN0IHN0YXkgb24gc2NyZWVuIGZvciBhdCBsZWFzdCA1IHNlY29uZHMsIGFjY29yZGluZyB0byB0aGUgZGVzaWduIGRvY3VtZW50CisgICAgICAgIHNlbGYubmIuc2V0X2N1cnJlbnRfcGFnZShzZWxmLlNBTklUWV9DSEVDSykKKyAgICAgICAgc2VsZi5zYW5pdHlfY2hlY2tfcG9zdF9zdGVwID0gTm9uZQorICAgICAgICBzZWxmLmRpc3BsYXlfc2FuaXR5X2NoZWNrID0gVHJ1ZQorICAgICAgICBzZWxmLnNhbml0eV9jaGVja19wYWdlLnN0YXJ0KCkKKyAgICAgICAgZ29iamVjdC50aW1lb3V0X2FkZChzZWxmLlNBTklUWV9DSEVDS19NSU5fRElTUExBWV9USU1FICogMTAwMCwgc2VsZi5zYW5pdHlfY2hlY2tfdGltZW91dCkKKworICAgIGRlZiBleGVjdXRlX2FmdGVyX3Nhbml0eV9jaGVjayhzZWxmLCBmdW5jKToKKyAgICAgICAgaWYgbm90IHNlbGYuZGlzcGxheV9zYW5pdHlfY2hlY2s6CisgICAgICAgICAgZnVuYygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgc2VsZi5zYW5pdHlfY2hlY2tfcG9zdF9mdW5jID0gZnVuYworCisgICAgZGVmIGdlbmVyYXRlX2NvbmZpZ3VyYXRpb24oc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLnNhbml0eV9jaGVja2VkOgorICAgICAgICAgICAgc2VsZi5zaG93X3Nhbml0eV9jaGVja19wYWdlKCkKKyAgICAgICAgc2VsZi5oYW5kbGVyLmdlbmVyYXRlX2NvbmZpZ3VyYXRpb24oKQorCisgICAgZGVmIGluaXRpYXRlX25ld19idWlsZF9hc3luYyhzZWxmKToKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNlbGVjdGVkX2ltYWdlID0gTm9uZQorICAgICAgICBzZWxmLnN3aXRjaF9wYWdlKHNlbGYuTUFDSElORV9TRUxFQ1RJT04pCisgICAgICAgIHNlbGYuaGFuZGxlci5pbml0X2Nvb2tlcigpCisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfZXh0cmFfaW5oZXJpdCgiaW1hZ2VfdHlwZXMiKQorICAgICAgICBzZWxmLmdlbmVyYXRlX2NvbmZpZ3VyYXRpb24oKQorCisgICAgZGVmIHVwZGF0ZV9jb25maWdfYXN5bmMoc2VsZik6CisgICAgICAgIHNlbGYuc2V0X3VzZXJfY29uZmlnKCkKKyAgICAgICAgc2VsZi5nZW5lcmF0ZV9jb25maWd1cmF0aW9uKCkKKyAgICAgICAgc2VsZi5zd2l0Y2hfcGFnZShzZWxmLk1BQ0hJTkVfU0VMRUNUSU9OKQorCisgICAgZGVmIHNhbml0eV9jaGVjayhzZWxmKToKKyAgICAgICAgc2VsZi5oYW5kbGVyLnRyaWdnZXJfc2FuaXR5X2NoZWNrKCkKKworICAgIGRlZiBwb3B1bGF0ZV9yZWNpcGVfcGFja2FnZV9pbmZvX2FzeW5jKHNlbGYpOgorICAgICAgICBzZWxmLnN3aXRjaF9wYWdlKHNlbGYuUkNQUEtHSU5GT19QT1BVTEFUSU5HKQorICAgICAgICAjIFBhcnNlIHJlY2lwZXMKKyAgICAgICAgc2VsZi5zZXRfdXNlcl9jb25maWcoKQorICAgICAgICBzZWxmLmhhbmRsZXIuZ2VuZXJhdGVfcmVjaXBlcygpCisKKyAgICBkZWYgZ2VuZXJhdGVfcGFja2FnZXNfYXN5bmMoc2VsZiwgbG9nID0gRmFsc2UpOgorICAgICAgICBzZWxmLnN3aXRjaF9wYWdlKHNlbGYuUEFDS0FHRV9HRU5FUkFUSU5HKQorICAgICAgICBpZiBsb2c6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfbG9nZmlsZSA9IHNlbGYuaGFuZGxlci5nZXRfbG9nZmlsZSgpCisgICAgICAgICAgICBzZWxmLmRvX2xvZyhzZWxmLmN1cnJlbnRfbG9nZmlsZSkKKyAgICAgICAgIyBCdWlsZCBwYWNrYWdlcworICAgICAgICBfLCBhbGxfcmVjaXBlcyA9IHNlbGYucmVjaXBlX21vZGVsLmdldF9zZWxlY3RlZF9yZWNpcGVzKCkKKyAgICAgICAgc2VsZi5zZXRfdXNlcl9jb25maWcoKQorICAgICAgICBzZWxmLmhhbmRsZXIucmVzZXRfYnVpbGQoKQorICAgICAgICBzZWxmLmhhbmRsZXIuZ2VuZXJhdGVfcGFja2FnZXMoYWxsX3JlY2lwZXMsIHNlbGYuY29uZmlndXJhdGlvbi5kZWZhdWx0X3Rhc2spCisKKyAgICBkZWYgcmVzdG9yZV9pbml0aWFsX3NlbGVjdGVkX3BhY2thZ2VzKHNlbGYpOgorICAgICAgICBzZWxmLnBhY2thZ2VfbW9kZWwuc2V0X3NlbGVjdGVkX3BhY2thZ2VzKHNlbGYuY29uZmlndXJhdGlvbi5pbml0aWFsX3VzZXJfc2VsZWN0ZWRfcGFja2FnZXMsIFRydWUpCisgICAgICAgIHNlbGYucGFja2FnZV9tb2RlbC5zZXRfc2VsZWN0ZWRfcGFja2FnZXMoc2VsZi5jb25maWd1cmF0aW9uLmluaXRpYWxfc2VsZWN0ZWRfcGFja2FnZXMpCisgICAgICAgIGZvciBwYWNrYWdlIGluIHNlbGYuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9wYWNrYWdlczoKKyAgICAgICAgICAgIGlmIHBhY2thZ2Ugbm90IGluIHNlbGYuY29uZmlndXJhdGlvbi5pbml0aWFsX3NlbGVjdGVkX3BhY2thZ2VzOgorICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZV9tb2RlbC5leGNsdWRlX2l0ZW0oc2VsZi5wYWNrYWdlX21vZGVsLmZpbmRfcGF0aF9mb3JfaXRlbShwYWNrYWdlKSkKKworICAgIGRlZiBmYXN0X2dlbmVyYXRlX2ltYWdlX2FzeW5jKHNlbGYsIGxvZyA9IEZhbHNlKToKKyAgICAgICAgc2VsZi5zd2l0Y2hfcGFnZShzZWxmLkZBU1RfSU1BR0VfR0VORVJBVElORykKKyAgICAgICAgaWYgbG9nOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50X2xvZ2ZpbGUgPSBzZWxmLmhhbmRsZXIuZ2V0X2xvZ2ZpbGUoKQorICAgICAgICAgICAgc2VsZi5kb19sb2coc2VsZi5jdXJyZW50X2xvZ2ZpbGUpCisgICAgICAgICMgQnVpbGQgcGFja2FnZXMKKyAgICAgICAgXywgYWxsX3JlY2lwZXMgPSBzZWxmLnJlY2lwZV9tb2RlbC5nZXRfc2VsZWN0ZWRfcmVjaXBlcygpCisgICAgICAgIHNlbGYuc2V0X3VzZXJfY29uZmlnKCkKKyAgICAgICAgc2VsZi5oYW5kbGVyLnJlc2V0X2J1aWxkKCkKKyAgICAgICAgc2VsZi5oYW5kbGVyLmdlbmVyYXRlX3BhY2thZ2VzKGFsbF9yZWNpcGVzLCBzZWxmLmNvbmZpZ3VyYXRpb24uZGVmYXVsdF90YXNrKQorCisgICAgZGVmIGdlbmVyYXRlX2ltYWdlX2FzeW5jKHNlbGYsIGNvbnQgPSBGYWxzZSk6CisgICAgICAgIHNlbGYuc3dpdGNoX3BhZ2Uoc2VsZi5JTUFHRV9HRU5FUkFUSU5HKQorICAgICAgICBzZWxmLmhhbmRsZXIucmVzZXRfYnVpbGQoKQorICAgICAgICBpZiBub3QgY29udDoKKyAgICAgICAgICAgIHNlbGYuY3VycmVudF9sb2dmaWxlID0gc2VsZi5oYW5kbGVyLmdldF9sb2dmaWxlKCkKKyAgICAgICAgICAgIHNlbGYuZG9fbG9nKHNlbGYuY3VycmVudF9sb2dmaWxlKQorICAgICAgICAjIEJ1aWxkIGltYWdlCisgICAgICAgIHNlbGYuc2V0X3VzZXJfY29uZmlnKCkKKyAgICAgICAgdG9vbGNoYWluX3BhY2thZ2VzID0gW10KKyAgICAgICAgYmFzZV9pbWFnZSA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5jb25maWd1cmF0aW9uLnRvb2xjaGFpbl9idWlsZDoKKyAgICAgICAgICAgIHRvb2xjaGFpbl9wYWNrYWdlcyA9IHNlbGYucGFja2FnZV9tb2RlbC5nZXRfc2VsZWN0ZWRfcGFja2FnZXNfdG9vbGNoYWluKCkKKyAgICAgICAgaWYgc2VsZi5jb25maWd1cmF0aW9uLnNlbGVjdGVkX2ltYWdlID09IHNlbGYucmVjaXBlX21vZGVsLl9fY3VzdG9tX2ltYWdlX186CisgICAgICAgICAgICBwYWNrYWdlcyA9IHNlbGYucGFja2FnZV9tb2RlbC5nZXRfc2VsZWN0ZWRfcGFja2FnZXMoKQorICAgICAgICAgICAgaW1hZ2UgPSBzZWxmLmhvYl9pbWFnZQorICAgICAgICAgICAgYmFzZV9pbWFnZSA9IHNlbGYuY29uZmlndXJhdGlvbi5pbml0aWFsX3NlbGVjdGVkX2ltYWdlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYWNrYWdlcyA9IFtdCisgICAgICAgICAgICBpbWFnZSA9IHNlbGYuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9pbWFnZQorICAgICAgICBzZWxmLmhhbmRsZXIuZ2VuZXJhdGVfaW1hZ2UoaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlX2ltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW5fcGFja2FnZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uZGVmYXVsdF90YXNrKQorCisgICAgZGVmIGdlbmVyYXRlX25ld19pbWFnZShzZWxmLCBpbWFnZSwgZGVzY3JpcHRpb24pOgorICAgICAgICBiYXNlX2ltYWdlID0gc2VsZi5jb25maWd1cmF0aW9uLmluaXRpYWxfc2VsZWN0ZWRfaW1hZ2UKKyAgICAgICAgaWYgYmFzZV9pbWFnZSA9PSBzZWxmLnJlY2lwZV9tb2RlbC5fX2N1c3RvbV9pbWFnZV9fOgorICAgICAgICAgICAgYmFzZV9pbWFnZSA9IE5vbmUKKyAgICAgICAgcGFja2FnZXMgPSBzZWxmLnBhY2thZ2VfbW9kZWwuZ2V0X3NlbGVjdGVkX3BhY2thZ2VzKCkKKyAgICAgICAgc2VsZi5oYW5kbGVyLmdlbmVyYXRlX25ld19pbWFnZShpbWFnZSwgYmFzZV9pbWFnZSwgcGFja2FnZXMsIGRlc2NyaXB0aW9uKQorCisgICAgZGVmIGVuc3VyZV9kaXIoc2VsZiwgZGlyZWN0b3J5KToKKyAgICAgICAgc2VsZi5oYW5kbGVyLmVuc3VyZV9kaXIoZGlyZWN0b3J5KQorCisgICAgZGVmIGdldF9wYXJhbWV0ZXJzX3N5bmMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZXIuZ2V0X3BhcmFtZXRlcnMoKQorCisgICAgZGVmIHJlcXVlc3RfcGFja2FnZV9pbmZvX2FzeW5jKHNlbGYpOgorICAgICAgICBzZWxmLmhhbmRsZXIucmVxdWVzdF9wYWNrYWdlX2luZm8oKQorCisgICAgZGVmIGNhbmNlbF9idWlsZF9zeW5jKHNlbGYsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgc2VsZi5oYW5kbGVyLmNhbmNlbF9idWlsZChmb3JjZSkKKworICAgIGRlZiBjYW5jZWxfcGFyc2Vfc3luYyhzZWxmKToKKyAgICAgICAgc2VsZi5oYW5kbGVyLmNhbmNlbF9wYXJzZSgpCisKKyAgICBkZWYgc3dpdGNoX3BhZ2Uoc2VsZiwgbmV4dF9zdGVwKToKKyAgICAgICAgIyBNYWluIFdvcmtmbG93IChCdXNpbmVzcyBMb2dpYykKKyAgICAgICAgc2VsZi5uYi5zZXRfY3VycmVudF9wYWdlKHNlbGYuX19zdGVwMnBhZ2VfX1tuZXh0X3N0ZXBdKQorCisgICAgICAgIGlmIG5leHRfc3RlcCA9PSBzZWxmLk1BQ0hJTkVfU0VMRUNUSU9OOiAjIGluaXQgc3RlcAorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2Uuc2hvd19tYWNoaW5lKCkKKworICAgICAgICBlbGlmIG5leHRfc3RlcCA9PSBzZWxmLlJDUFBLR0lORk9fUE9QVUxBVElORzoKKyAgICAgICAgICAgICMgTUFDSElORSBDSEFOR0VEIGFjdGlvbiBvciBTRVRUSU5HUyBDSEFOR0VECisgICAgICAgICAgICAjIHNob3cgdGhlIHByb2dyZXNzIGJhcgorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2Uuc2hvd19pbmZvX3BvcHVsYXRpbmcoKQorCisgICAgICAgIGVsaWYgbmV4dF9zdGVwID09IHNlbGYuUkNQUEtHSU5GT19QT1BVTEFURUQ6CisgICAgICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS5zaG93X2luZm9fcG9wdWxhdGVkKCkKKworICAgICAgICBlbGlmIG5leHRfc3RlcCA9PSBzZWxmLkJBU0VJTUdfU0VMRUNURUQ6CisgICAgICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS5zaG93X2Jhc2VpbWdfc2VsZWN0ZWQoKQorCisgICAgICAgIGVsaWYgbmV4dF9zdGVwID09IHNlbGYuUkVDSVBFX1NFTEVDVElPTjoKKyAgICAgICAgICAgIGlmIHNlbGYucmVjaXBlX21vZGVsLmdldF9zZWxlY3RlZF9pbWFnZSgpID09IHNlbGYucmVjaXBlX21vZGVsLl9fY3VzdG9tX2ltYWdlX186CisgICAgICAgICAgICAgICAgc2VsZi5yZWNpcGVfZGV0YWlsc19wYWdlLnNldF9yZWNpcGVfY3Vycl90YWIoc2VsZi5yZWNpcGVfZGV0YWlsc19wYWdlLkFMTCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5yZWNpcGVfZGV0YWlsc19wYWdlLnNldF9yZWNpcGVfY3Vycl90YWIoc2VsZi5yZWNpcGVfZGV0YWlsc19wYWdlLklOQ0xVREVEKQorCisgICAgICAgIGVsaWYgbmV4dF9zdGVwID09IHNlbGYuUEFDS0FHRV9TRUxFQ1RJT046CisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uaW5pdGlhbF9zZWxlY3RlZF9wYWNrYWdlcyA9IHNlbGYuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9wYWNrYWdlcworICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmluaXRpYWxfdXNlcl9zZWxlY3RlZF9wYWNrYWdlcyA9IHNlbGYuY29uZmlndXJhdGlvbi51c2VyX3NlbGVjdGVkX3BhY2thZ2VzCisgICAgICAgICAgICBzZWxmLnBhY2thZ2VfZGV0YWlsc19wYWdlLnNldF90aXRsZSgiRWRpdCBwYWNrYWdlcyIpCisgICAgICAgICAgICBpZiBzZWxmLnJlY2lwZV9tb2RlbC5nZXRfc2VsZWN0ZWRfaW1hZ2UoKSA9PSBzZWxmLnJlY2lwZV9tb2RlbC5fX2N1c3RvbV9pbWFnZV9fOgorICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZV9kZXRhaWxzX3BhZ2Uuc2V0X3BhY2thZ2VzX2N1cnJfdGFiKHNlbGYucGFja2FnZV9kZXRhaWxzX3BhZ2UuQUxMKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnBhY2thZ2VfZGV0YWlsc19wYWdlLnNldF9wYWNrYWdlc19jdXJyX3RhYihzZWxmLnBhY2thZ2VfZGV0YWlsc19wYWdlLklOQ0xVREVEKQorICAgICAgICAgICAgc2VsZi5wYWNrYWdlX2RldGFpbHNfcGFnZS5zaG93X3BhZ2Uoc2VsZi5jdXJyZW50X2xvZ2ZpbGUpCisKKworICAgICAgICBlbGlmIG5leHRfc3RlcCA9PSBzZWxmLlBBQ0tBR0VfR0VORVJBVElORyBvciBuZXh0X3N0ZXAgPT0gc2VsZi5GQVNUX0lNQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICAjIGJvdGggUEFDS0FHRV9HRU5FUkFUSU5HIGFuZCBGQVNUX0lNQUdFX0dFTkVSQVRJTkcgc2hhcmUgdGhlIHNhbWUgcGFnZQorICAgICAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2Uuc2hvd19wYWdlKG5leHRfc3RlcCkKKworICAgICAgICBlbGlmIG5leHRfc3RlcCA9PSBzZWxmLlBBQ0tBR0VfR0VORVJBVEVEOgorICAgICAgICAgICAgc2VsZi5wYWNrYWdlX2RldGFpbHNfcGFnZS5zZXRfdGl0bGUoIlN0ZXAgMiBvZiAyOiBFZGl0IHBhY2thZ2VzIikKKyAgICAgICAgICAgIGlmIHNlbGYucmVjaXBlX21vZGVsLmdldF9zZWxlY3RlZF9pbWFnZSgpID09IHNlbGYucmVjaXBlX21vZGVsLl9fY3VzdG9tX2ltYWdlX186CisgICAgICAgICAgICAgICAgc2VsZi5wYWNrYWdlX2RldGFpbHNfcGFnZS5zZXRfcGFja2FnZXNfY3Vycl90YWIoc2VsZi5wYWNrYWdlX2RldGFpbHNfcGFnZS5BTEwpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZV9kZXRhaWxzX3BhZ2Uuc2V0X3BhY2thZ2VzX2N1cnJfdGFiKHNlbGYucGFja2FnZV9kZXRhaWxzX3BhZ2UuSU5DTFVERUQpCisgICAgICAgICAgICBzZWxmLnBhY2thZ2VfZGV0YWlsc19wYWdlLnNob3dfcGFnZShzZWxmLmN1cnJlbnRfbG9nZmlsZSkKKworICAgICAgICBlbGlmIG5leHRfc3RlcCA9PSBzZWxmLklNQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICAjIGFmdGVyIHBhY2thZ2VzIGFyZSBnZW5lcmF0ZWQsIHNlbGVjdGVkX3BhY2thZ2VzIG5lZWQgdG8KKyAgICAgICAgICAgICMgYmUgdXBkYXRlZCBpbiBwYWNrYWdlX21vZGVsIHBlciBzZWxlY3RlZF9pbWFnZSBpbiByZWNpcGVfbW9kZWwKKyAgICAgICAgICAgIHNlbGYuYnVpbGRfZGV0YWlsc19wYWdlLnNob3dfcGFnZShuZXh0X3N0ZXApCisKKyAgICAgICAgZWxpZiBuZXh0X3N0ZXAgPT0gc2VsZi5JTUFHRV9HRU5FUkFURUQ6CisgICAgICAgICAgICBzZWxmLmltYWdlX2RldGFpbHNfcGFnZS5zaG93X3BhZ2UobmV4dF9zdGVwKQorCisgICAgICAgIGVsaWYgbmV4dF9zdGVwID09IHNlbGYuTVlfSU1BR0VfT1BFTkVEOgorICAgICAgICAgICAgc2VsZi5pbWFnZV9kZXRhaWxzX3BhZ2Uuc2hvd19wYWdlKG5leHRfc3RlcCkKKworICAgICAgICBzZWxmLnByZXZpb3VzX3N0ZXAgPSBzZWxmLmN1cnJlbnRfc3RlcAorICAgICAgICBzZWxmLmN1cnJlbnRfc3RlcCA9IG5leHRfc3RlcAorCisgICAgZGVmIHNldF91c2VyX2NvbmZpZ19wcm94aWVzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5ID09IFRydWU6CisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2h0dHBfcHJveHkoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfcHJveHkoImh0dHAiKSkKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfaHR0cHNfcHJveHkoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfcHJveHkoImh0dHBzIikpCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2Z0cF9wcm94eShzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9wcm94eSgiZnRwIikpCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X3NvY2tzX3Byb3h5KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX3Byb3h5KCJzb2NrcyIpKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9jdnNfcHJveHkoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfaG9zdF9vbmx5KCJjdnMiKSwgc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfcG9ydF9vbmx5KCJjdnMiKSkKKyAgICAgICAgZWxpZiBzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5ID09IEZhbHNlOgorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9odHRwX3Byb3h5KCIiKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9odHRwc19wcm94eSgiIikKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfZnRwX3Byb3h5KCIiKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9zb2Nrc19wcm94eSgiIikKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfY3ZzX3Byb3h5KCIiLCAiIikKKworICAgIGRlZiBzZXRfdXNlcl9jb25maWdfZXh0cmEoc2VsZik6CisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfcm9vdGZzX3NpemUoc2VsZi5jb25maWd1cmF0aW9uLmltYWdlX3Jvb3Rmc19zaXplKQorICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2V4dHJhX3NpemUoc2VsZi5jb25maWd1cmF0aW9uLmltYWdlX2V4dHJhX3NpemUpCisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfaW5jb21wYXRpYmxlX2xpY2Vuc2Uoc2VsZi5jb25maWd1cmF0aW9uLmluY29tcGF0X2xpY2Vuc2UpCisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfc2RrX21hY2hpbmUoc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfc2RrX21hY2hpbmUpCisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfaW1hZ2VfZnN0eXBlcyhzZWxmLmNvbmZpZ3VyYXRpb24uaW1hZ2VfZnN0eXBlcykKKyAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9leHRyYV9jb25maWcoc2VsZi5jb25maWd1cmF0aW9uLmV4dHJhX3NldHRpbmcpCisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfZXh0cmFfaW5oZXJpdCgicGFja2FnZWluZm8gaW1hZ2VfdHlwZXMiKQorICAgICAgICBzZWxmLnNldF91c2VyX2NvbmZpZ19wcm94aWVzKCkKKworICAgIGRlZiBzZXRfdXNlcl9jb25maWcoc2VsZik6CisgICAgICAgICMgc2V0IGJiIGxheWVycworICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2JibGF5ZXJzKHNlbGYuY29uZmlndXJhdGlvbi5sYXllcnMpCisgICAgICAgICMgc2V0IGxvY2FsIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9tYWNoaW5lKHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX21hY2gpCisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfcGFja2FnZV9mb3JtYXQoc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfcGFja2FnZV9mb3JtYXQpCisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfZGlzdHJvKHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX2Rpc3RybykKKyAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9kbF9kaXIoc2VsZi5jb25maWd1cmF0aW9uLmRsZGlyKQorICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X3NzdGF0ZV9kaXIoc2VsZi5jb25maWd1cmF0aW9uLnNzdGF0ZWRpcikKKyAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9zc3RhdGVfbWlycm9ycyhzZWxmLmNvbmZpZ3VyYXRpb24uc3N0YXRlbWlycm9yKQorICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X3BtYWtlKHNlbGYuY29uZmlndXJhdGlvbi5wbWFrZSkKKyAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9iYnRocmVhZHMoc2VsZi5jb25maWd1cmF0aW9uLmJidGhyZWFkKQorICAgICAgICBzZWxmLnNldF91c2VyX2NvbmZpZ19leHRyYSgpCisKKyAgICBkZWYgdXBkYXRlX3JlY2lwZV9tb2RlbChzZWxmLCBzZWxlY3RlZF9pbWFnZSwgc2VsZWN0ZWRfcmVjaXBlcyk6CisgICAgICAgIHNlbGYucmVjaXBlX21vZGVsLnNldF9zZWxlY3RlZF9pbWFnZShzZWxlY3RlZF9pbWFnZSkKKyAgICAgICAgc2VsZi5yZWNpcGVfbW9kZWwuc2V0X3NlbGVjdGVkX3JlY2lwZXMoc2VsZWN0ZWRfcmVjaXBlcykKKworICAgIGRlZiB1cGRhdGVfcGFja2FnZV9tb2RlbChzZWxmLCBzZWxlY3RlZF9wYWNrYWdlcywgdXNlcl9zZWxlY3RlZF9wYWNrYWdlcz1Ob25lKToKKyAgICAgICAgaWYgdXNlcl9zZWxlY3RlZF9wYWNrYWdlczoKKyAgICAgICAgICAgIGxlZnQgPSBzZWxmLnBhY2thZ2VfbW9kZWwuc2V0X3NlbGVjdGVkX3BhY2thZ2VzKHVzZXJfc2VsZWN0ZWRfcGFja2FnZXMsIFRydWUpCisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24udXNlcl9zZWxlY3RlZF9wYWNrYWdlcyArPSBsZWZ0CisgICAgICAgIGxlZnQgPSBzZWxmLnBhY2thZ2VfbW9kZWwuc2V0X3NlbGVjdGVkX3BhY2thZ2VzKHNlbGVjdGVkX3BhY2thZ2VzKQorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfcGFja2FnZXMgKz0gbGVmdAorCisgICAgZGVmIHVwZGF0ZV9jb25maWd1cmF0aW9uX3BhcmFtZXRlcnMoc2VsZiwgcGFyYW1zKToKKyAgICAgICAgaWYgcGFyYW1zOgorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnVwZGF0ZShwYXJhbXMpCisgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcnMudXBkYXRlKHBhcmFtcykKKworICAgIGRlZiBzZXRfYmFzZV9pbWFnZShzZWxmKToKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmluaXRpYWxfc2VsZWN0ZWRfaW1hZ2UgPSBzZWxmLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfaW1hZ2UKKyAgICAgICAgaWYgc2VsZi5jb25maWd1cmF0aW9uLnNlbGVjdGVkX2ltYWdlICE9IHNlbGYucmVjaXBlX21vZGVsLl9fY3VzdG9tX2ltYWdlX186CisgICAgICAgICAgICBzZWxmLmhvYl9pbWFnZSA9IHNlbGYuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9pbWFnZSArICItZWRpdGVkIgorCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9tYWNoID0gIiIKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmNsZWFyX3NlbGVjdGlvbigpCisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnN3aXRjaF9tYWNoaW5lX2NvbWJvKCkKKyAgICAgICAgc2VsZi5zd2l0Y2hfcGFnZShzZWxmLk1BQ0hJTkVfU0VMRUNUSU9OKQorCisgICAgIyBDYWxsYmFjayBGdW5jdGlvbnMKKyAgICBkZWYgaGFuZGxlcl9jb25maWdfdXBkYXRlZF9jYihzZWxmLCBoYW5kbGVyLCB3aGljaCwgdmFsdWVzKToKKyAgICAgICAgaWYgd2hpY2ggPT0gImRpc3RybyI6CisgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcnMuYWxsX2Rpc3Ryb3MgPSB2YWx1ZXMKKyAgICAgICAgZWxpZiB3aGljaCA9PSAibWFjaGluZSI6CisgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcnMuYWxsX21hY2hpbmVzID0gdmFsdWVzCisgICAgICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS51cGRhdGVfbWFjaGluZV9jb21ibygpCisgICAgICAgIGVsaWYgd2hpY2ggPT0gIm1hY2hpbmUtc2RrIjoKKyAgICAgICAgICAgIHNlbGYucGFyYW1ldGVycy5hbGxfc2RrX21hY2hpbmVzID0gdmFsdWVzCisKKyAgICBkZWYgaGFuZGxlcl9wYWNrYWdlX2Zvcm1hdHNfdXBkYXRlZF9jYihzZWxmLCBoYW5kbGVyLCBmb3JtYXRzKToKKyAgICAgICAgc2VsZi5wYXJhbWV0ZXJzLmFsbF9wYWNrYWdlX2Zvcm1hdHMgPSBmb3JtYXRzCisKKyAgICBkZWYgc3dpdGNoX3RvX2ltYWdlX2NvbmZpZ3VyYXRpb25faGVscGVyKHNlbGYpOgorICAgICAgICBzZWxmLnNhbml0eV9jaGVja19wYWdlLnN0b3AoKQorICAgICAgICBzZWxmLnN3aXRjaF9wYWdlKHNlbGYuSU1BR0VfQ09ORklHVVJBVElPTikKKyAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2Uuc3dpdGNoX21hY2hpbmVfY29tYm8oKQorCisgICAgZGVmIHNob3dfbmV0d29ya19lcnJvcl9kaWFsb2dfaGVscGVyKHNlbGYpOgorICAgICAgICBzZWxmLnNhbml0eV9jaGVja19wYWdlLnN0b3AoKQorICAgICAgICBzZWxmLnNob3dfbmV0d29ya19lcnJvcl9kaWFsb2coKQorCisgICAgZGVmIGhhbmRsZXJfY29tbWFuZF9zdWNjZWVkZWRfY2Ioc2VsZiwgaGFuZGxlciwgaW5pdGNtZCk6CisgICAgICAgIGlmIGluaXRjbWQgPT0gc2VsZi5oYW5kbGVyLkdFTkVSQVRFX0NPTkZJR1VSQVRJT046CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfbWFjaDoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9tYWNoID0gc2VsZi5oYW5kbGVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJIT0JfTUFDSElORSJdKSBvciAiIgorICAgICAgICAgICAgc2VsZi51cGRhdGVfY29uZmlndXJhdGlvbl9wYXJhbWV0ZXJzKHNlbGYuZ2V0X3BhcmFtZXRlcnNfc3luYygpKQorICAgICAgICAgICAgaWYgbm90IHNlbGYuc2FuaXR5X2NoZWNrZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5zYW5pdHlfY2hlY2soKQorICAgICAgICAgICAgICAgIHNlbGYuc2FuaXR5X2NoZWNrZWQgPSBUcnVlCisgICAgICAgIGVsaWYgaW5pdGNtZCA9PSBzZWxmLmhhbmRsZXIuU0FOSVRZX0NIRUNLOgorICAgICAgICAgICAgaWYgc2VsZi5oYWRfbmV0d29ya19lcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmhhZF9uZXR3b3JrX2Vycm9yID0gRmFsc2UKKyAgICAgICAgICAgICAgICBzZWxmLmV4ZWN1dGVfYWZ0ZXJfc2FuaXR5X2NoZWNrKHNlbGYuc2hvd19uZXR3b3JrX2Vycm9yX2RpYWxvZ19oZWxwZXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgU3dpdGNoIHRvIHRoZSAnaW1hZ2UgY29uZmlndXJhdGlvbicgcGFnZSBub3csIGJ1dCB3ZSBtaWdodCBuZWVkCisgICAgICAgICAgICAgICAgIyB0byB3YWl0IGZvciB0aGUgbWluaW11bSBkaXNwbGF5IHRpbWUgb2YgdGhlIHNhbml0eSBjaGVjayBwYWdlCisgICAgICAgICAgICAgICAgc2VsZi5leGVjdXRlX2FmdGVyX3Nhbml0eV9jaGVjayhzZWxmLnN3aXRjaF90b19pbWFnZV9jb25maWd1cmF0aW9uX2hlbHBlcikKKyAgICAgICAgZWxpZiBpbml0Y21kIGluIFtzZWxmLmhhbmRsZXIuR0VORVJBVEVfUkVDSVBFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZXIuR0VORVJBVEVfUEFDS0FHRVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVyLkdFTkVSQVRFX0lNQUdFXToKKyAgICAgICAgICAgIHNlbGYudXBkYXRlX2NvbmZpZ3VyYXRpb25fcGFyYW1ldGVycyhzZWxmLmdldF9wYXJhbWV0ZXJzX3N5bmMoKSkKKyAgICAgICAgICAgIHNlbGYucmVxdWVzdF9wYWNrYWdlX2luZm9fYXN5bmMoKQorICAgICAgICBlbGlmIGluaXRjbWQgPT0gc2VsZi5oYW5kbGVyLlBPUFVMQVRFX1BBQ0tBR0VJTkZPOgorICAgICAgICAgICAgaWYgc2VsZi5jdXJyZW50X3N0ZXAgPT0gc2VsZi5SQ1BQS0dJTkZPX1BPUFVMQVRJTkc6CisgICAgICAgICAgICAgICAgc2VsZi5zd2l0Y2hfcGFnZShzZWxmLlJDUFBLR0lORk9fUE9QVUxBVEVEKQorICAgICAgICAgICAgICAgIHNlbGYucmNwcGtnbGlzdF9wb3B1bGF0ZWQoKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBzZWxmLnJjcHBrZ2xpc3RfcG9wdWxhdGVkKCkKKyAgICAgICAgICAgIGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuRkFTVF9JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgICAgIHNlbGYuZ2VuZXJhdGVfaW1hZ2VfYXN5bmMoVHJ1ZSkKKworICAgIGRlZiBzaG93X2Vycm9yX2RpYWxvZyhzZWxmLCBtc2cpOgorICAgICAgICBsYmwgPSAiPGI+SG9iIGZvdW5kIGFuIGVycm9yPC9iPiIKKyAgICAgICAgZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5NRVNTQUdFX0VSUk9SLCBtc2cpCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDbG9zZSIsIGd0ay5SRVNQT05TRV9PSykKKyAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKworICAgIGRlZiBzaG93X3dhcm5pbmdfZGlhbG9nKHNlbGYpOgorICAgICAgICBkaWFsb2cgPSBQYXJzaW5nV2FybmluZ3NEaWFsb2codGl0bGUgPSAiVmlldyB3YXJuaW5ncyIsCisgICAgICAgICAgICAgICAgd2FybmluZ3MgPSBzZWxmLnBhcnNpbmdfd2FybmluZ3MsCisgICAgICAgICAgICAgICAgcGFyZW50ID0gTm9uZSwKKyAgICAgICAgICAgICAgICBmbGFncyA9IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVAorICAgICAgICAgICAgICAgICAgICAgICB8IGd0ay5ESUFMT0dfTk9fU0VQQVJBVE9SKQorICAgICAgICByZXNwb25zZSA9IGRpYWxvZy5ydW4oKQorICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisKKyAgICBkZWYgc2hvd19uZXR3b3JrX2Vycm9yX2RpYWxvZyhzZWxmKToKKyAgICAgICAgbGJsID0gIjxiPkhvYiBjYW5ub3QgY29ubmVjdCB0byB0aGUgbmV0d29yazwvYj4iCisgICAgICAgIG1zZyA9IG1zZyArICJQbGVhc2UgY2hlY2sgeW91ciBuZXR3b3JrIGNvbm5lY3Rpb24uIElmIHlvdSBhcmUgdXNpbmcgYSBwcm94eSBzZXJ2ZXIsIHBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkuIgorICAgICAgICBkaWFsb2cgPSBDcnVtYnNNZXNzYWdlRGlhbG9nKHNlbGYsIGxibCwgZ3RrLk1FU1NBR0VfRVJST1IsIG1zZykKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIlByb3h5IHNldHRpbmdzIiwgZ3RrLlJFU1BPTlNFX0NBTkNFTCkKKyAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIHJlcyA9IGRpYWxvZy5ydW4oKQorICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisgICAgICAgIGlmIHJlcyA9PSBndGsuUkVTUE9OU0VfQ0FOQ0VMOgorICAgICAgICAgICAgcmVzLCBzZXR0aW5nc19jaGFuZ2VkID0gc2VsZi5zaG93X3NpbXBsZV9zZXR0aW5nc19kaWFsb2coU2ltcGxlU2V0dGluZ3NEaWFsb2cuUFJPWElFU19QQUdFX0lEKQorICAgICAgICAgICAgaWYgbm90IHJlczoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGlmIHNldHRpbmdzX2NoYW5nZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5yZXBhcnNlX3Bvc3RfYWR2X3NldHRpbmdzKCkKKworICAgIGRlZiBoYW5kbGVyX2NvbW1hbmRfZmFpbGVkX2NiKHNlbGYsIGhhbmRsZXIsIG1zZyk6CisgICAgICAgIGlmIG1zZzoKKyAgICAgICAgICAgIHNlbGYuc2hvd19lcnJvcl9kaWFsb2cobXNnKQorICAgICAgICBzZWxmLnJlc2V0KCkKKworICAgIGRlZiBoYW5kbGVyX3BhcnNpbmdfd2FybmluZ19jYihzZWxmLCBoYW5kbGVyLCB3YXJuX21zZyk6CisgICAgICAgIHNlbGYucGFyc2luZ193YXJuaW5ncy5hcHBlbmQod2Fybl9tc2cpCisKKyAgICBkZWYgaGFuZGxlcl9zYW5pdHlfZmFpbGVkX2NiKHNlbGYsIGhhbmRsZXIsIG1zZywgbmV0d29ya19lcnJvcik6CisgICAgICAgIHNlbGYucmVzZXQoKQorICAgICAgICBpZiBuZXR3b3JrX2Vycm9yOgorICAgICAgICAgICAgIyBNYXJrIHRoaXMgaW4gYW4gaW50ZXJuYWwgZmllbGQuIFRoZSAibmV0d29yayBlcnJvciIgZGlhbG9nIHdpbGwgYmUKKyAgICAgICAgICAgICMgc2hvd24gbGF0ZXIsIHdoZW4gYSBTYW5pdHlDaGVja1Bhc3NlZCBldmVudCB3aWxsIGJlIGhhbmRsZWQKKyAgICAgICAgICAgICMgKGFzIHNlbnQgYnkgc2FuaXR5LmJiY2xhc3MpCisgICAgICAgICAgICBzZWxmLmhhZF9uZXR3b3JrX2Vycm9yID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnID0gbXNnLnJlcGxhY2UoInlvdXIgbG9jYWwuY29uZiIsICJTZXR0aW5ncyIpCisgICAgICAgICAgICBzZWxmLnNob3dfZXJyb3JfZGlhbG9nKG1zZykKKyAgICAgICAgICAgIHNlbGYucmVzZXQoKQorCisgICAgZGVmIHdpbmRvd19zZW5zaXRpdmUoc2VsZiwgc2Vuc2l0aXZlKToKKyAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UubWFjaGluZV9jb21iby5zZXRfc2Vuc2l0aXZlKHNlbnNpdGl2ZSkKKyAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UubWFjaGluZV9jb21iby5jaGlsZC5zZXRfc2Vuc2l0aXZlKHNlbnNpdGl2ZSkKKyAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UuaW1hZ2VfY29tYm8uc2V0X3NlbnNpdGl2ZShzZW5zaXRpdmUpCisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLmltYWdlX2NvbWJvLmNoaWxkLnNldF9zZW5zaXRpdmUoc2Vuc2l0aXZlKQorICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS5sYXllcl9idXR0b24uc2V0X3NlbnNpdGl2ZShzZW5zaXRpdmUpCisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLmxheWVyX2luZm9faWNvbi5zZXRfc2Vuc2l0aXZlKHNlbnNpdGl2ZSkKKyAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UudG9vbGJhci5zZXRfc2Vuc2l0aXZlKHNlbnNpdGl2ZSkKKyAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2Uudmlld19hZHZfY29uZmlndXJhdGlvbl9idXR0b24uc2V0X3NlbnNpdGl2ZShzZW5zaXRpdmUpCisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLmNvbmZpZ19idWlsZF9idXR0b24uc2V0X3NlbnNpdGl2ZShzZW5zaXRpdmUpCisKKyAgICAgICAgc2VsZi5yZWNpcGVfZGV0YWlsc19wYWdlLnNldF9zZW5zaXRpdmUoc2Vuc2l0aXZlKQorICAgICAgICBzZWxmLnBhY2thZ2VfZGV0YWlsc19wYWdlLnNldF9zZW5zaXRpdmUoc2Vuc2l0aXZlKQorICAgICAgICBzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZS5zZXRfc2Vuc2l0aXZlKHNlbnNpdGl2ZSkKKyAgICAgICAgc2VsZi5pbWFnZV9kZXRhaWxzX3BhZ2Uuc2V0X3NlbnNpdGl2ZShzZW5zaXRpdmUpCisKKyAgICAgICAgaWYgc2Vuc2l0aXZlOgorICAgICAgICAgICAgc2VsZi53aW5kb3cuc2V0X2N1cnNvcihOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi53aW5kb3cuc2V0X2N1cnNvcihndGsuZ2RrLkN1cnNvcihndGsuZ2RrLldBVENIKSkKKyAgICAgICAgc2VsZi5zZW5zaXRpdmUgPSBzZW5zaXRpdmUKKworCisgICAgZGVmIGhhbmRsZXJfZ2VuZXJhdGluZ19kYXRhX2NiKHNlbGYsIGhhbmRsZXIpOgorICAgICAgICBzZWxmLndpbmRvd19zZW5zaXRpdmUoRmFsc2UpCisKKyAgICBkZWYgaGFuZGxlcl9kYXRhX2dlbmVyYXRlZF9jYihzZWxmLCBoYW5kbGVyKToKKyAgICAgICAgc2VsZi53aW5kb3dfc2Vuc2l0aXZlKFRydWUpCisKKyAgICBkZWYgcmNwcGtnbGlzdF9wb3B1bGF0ZWQoc2VsZik6CisgICAgICAgIHNlbGVjdGVkX2ltYWdlID0gc2VsZi5jb25maWd1cmF0aW9uLnNlbGVjdGVkX2ltYWdlCisgICAgICAgIHNlbGVjdGVkX3JlY2lwZXMgPSBzZWxmLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfcmVjaXBlc1s6XQorICAgICAgICBzZWxlY3RlZF9wYWNrYWdlcyA9IHNlbGYuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9wYWNrYWdlc1s6XQorICAgICAgICB1c2VyX3NlbGVjdGVkX3BhY2thZ2VzID0gc2VsZi5jb25maWd1cmF0aW9uLnVzZXJfc2VsZWN0ZWRfcGFja2FnZXNbOl0KKworICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS51cGRhdGVfaW1hZ2VfY29tYm8oc2VsZi5yZWNpcGVfbW9kZWwsIHNlbGVjdGVkX2ltYWdlKQorICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS51cGRhdGVfaW1hZ2VfZGVzYygpCisgICAgICAgIHNlbGYudXBkYXRlX3JlY2lwZV9tb2RlbChzZWxlY3RlZF9pbWFnZSwgc2VsZWN0ZWRfcmVjaXBlcykKKyAgICAgICAgc2VsZi51cGRhdGVfcGFja2FnZV9tb2RlbChzZWxlY3RlZF9wYWNrYWdlcywgdXNlcl9zZWxlY3RlZF9wYWNrYWdlcykKKworICAgIGRlZiByZWNpcGVsaXN0X2NoYW5nZWRfY2Ioc2VsZiwgcmVjaXBlX21vZGVsKToKKyAgICAgICAgc2VsZi5yZWNpcGVfZGV0YWlsc19wYWdlLnJlZnJlc2hfc2VsZWN0aW9uKCkKKworICAgIGRlZiBwYWNrYWdlbGlzdF9jaGFuZ2VkX2NiKHNlbGYsIHBhY2thZ2VfbW9kZWwpOgorICAgICAgICBzZWxmLnBhY2thZ2VfZGV0YWlsc19wYWdlLnJlZnJlc2hfc2VsZWN0aW9uKCkKKworICAgIGRlZiBoYW5kbGVyX3JlY2lwZV9wb3B1bGF0ZWRfY2Ioc2VsZiwgaGFuZGxlcik6CisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnVwZGF0ZV9wcm9ncmVzc19iYXIoIlBvcHVsYXRpbmcgcmVjaXBlcyIsIDAuOTkpCisKKyAgICBkZWYgaGFuZGxlcl9wYWNrYWdlX3BvcHVsYXRlZF9jYihzZWxmLCBoYW5kbGVyKToKKyAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UudXBkYXRlX3Byb2dyZXNzX2JhcigiUG9wdWxhdGluZyBwYWNrYWdlcyIsIDEuMCkKKworICAgIGRlZiBoYW5kbGVyX3BhcnNpbmdfc3RhcnRlZF9jYihzZWxmLCBoYW5kbGVyLCBtZXNzYWdlKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X3N0ZXAgIT0gc2VsZi5SQ1BQS0dJTkZPX1BPUFVMQVRJTkc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBmcmFjdGlvbiA9IDAKKyAgICAgICAgaWYgbWVzc2FnZVsiZXZlbnRuYW1lIl0gPT0gIlRyZWVEYXRhUHJlcGFyYXRpb25TdGFydGVkIjoKKyAgICAgICAgICAgIGZyYWN0aW9uID0gMC42ICsgZnJhY3Rpb24KKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnN0b3BfYnV0dG9uLnNldF9zZW5zaXRpdmUoRmFsc2UpCisgICAgICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS51cGRhdGVfcHJvZ3Jlc3NfYmFyKCJHZW5lcmF0aW5nIGRlcGVuZGVuY3kgdHJlZSIsIGZyYWN0aW9uKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2Uuc3RvcF9idXR0b24uc2V0X3NlbnNpdGl2ZShUcnVlKQorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UudXBkYXRlX3Byb2dyZXNzX2JhcihtZXNzYWdlWyJ0aXRsZSJdLCBmcmFjdGlvbikKKworICAgIGRlZiBoYW5kbGVyX3BhcnNpbmdfY2Ioc2VsZiwgaGFuZGxlciwgbWVzc2FnZSk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9zdGVwICE9IHNlbGYuUkNQUEtHSU5GT19QT1BVTEFUSU5HOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZnJhY3Rpb24gPSBtZXNzYWdlWyJjdXJyZW50Il0gKiAxLjAvbWVzc2FnZVsidG90YWwiXQorICAgICAgICBpZiBtZXNzYWdlWyJldmVudG5hbWUiXSA9PSAiVHJlZURhdGFQcmVwYXJhdGlvblByb2dyZXNzIjoKKyAgICAgICAgICAgIGZyYWN0aW9uID0gMC42ICsgMC4zOCAqIGZyYWN0aW9uCisgICAgICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS51cGRhdGVfcHJvZ3Jlc3NfYmFyKCJHZW5lcmF0aW5nIGRlcGVuZGVuY3kgdHJlZSIsIGZyYWN0aW9uKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnJhY3Rpb24gPSAwLjYgKiBmcmFjdGlvbgorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UudXBkYXRlX3Byb2dyZXNzX2JhcihtZXNzYWdlWyJ0aXRsZSJdLCBmcmFjdGlvbikKKworICAgIGRlZiBoYW5kbGVyX3BhcnNpbmdfY29tcGxldGVkX2NiKHNlbGYsIGhhbmRsZXIsIG1lc3NhZ2UpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfc3RlcCAhPSBzZWxmLlJDUFBLR0lORk9fUE9QVUxBVElORzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG1lc3NhZ2VbImV2ZW50bmFtZSJdID09ICJUcmVlRGF0YVByZXBhcmF0aW9uQ29tcGxldGVkIjoKKyAgICAgICAgICAgIGZyYWN0aW9uID0gMC45OAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnJhY3Rpb24gPSAwLjYKKyAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UudXBkYXRlX3Byb2dyZXNzX2JhcigiR2VuZXJhdGluZyBkZXBlbmRlbmN5IHRyZWUiLCBmcmFjdGlvbikKKworICAgIGRlZiBoYW5kbGVyX2J1aWxkX3N0YXJ0ZWRfY2Ioc2VsZiwgcnVubmluZ19idWlsZCk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuRkFTVF9JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgZnJhY3Rpb24gPSAwCisgICAgICAgIGVsaWYgc2VsZi5jdXJyZW50X3N0ZXAgPT0gc2VsZi5JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgaWYgc2VsZi5wcmV2aW91c19zdGVwID09IHNlbGYuRkFTVF9JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgICAgIGZyYWN0aW9uID0gMC45CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZyYWN0aW9uID0gMAorICAgICAgICBlbGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuUEFDS0FHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgZnJhY3Rpb24gPSAwCisgICAgICAgIHNlbGYuYnVpbGRfZGV0YWlsc19wYWdlLnVwZGF0ZV9wcm9ncmVzc19iYXIoIkJ1aWxkIFN0YXJ0ZWQ6ICIsIGZyYWN0aW9uKQorICAgICAgICBzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZS5zaG93X2NvbmZpZ3VyYXRpb25zKHNlbGYuY29uZmlndXJhdGlvbiwgc2VsZi5wYXJhbWV0ZXJzKQorCisgICAgZGVmIGJ1aWxkX3N1Y2NlZWRlZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X3N0ZXAgPT0gc2VsZi5GQVNUX0lNQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICBmcmFjdGlvbiA9IDAuOQorICAgICAgICBlbGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgIGZyYWN0aW9uID0gMS4wCisgICAgICAgICAgICB2ZXJzaW9uID0gIiIKKyAgICAgICAgICAgIHNlbGYucGFyYW1ldGVycy5pbWFnZV9uYW1lcyA9IFtdCisgICAgICAgICAgICBzZWxlY3RlZF9pbWFnZSA9IHNlbGYucmVjaXBlX21vZGVsLmdldF9zZWxlY3RlZF9pbWFnZSgpCisgICAgICAgICAgICBpZiBzZWxlY3RlZF9pbWFnZSA9PSBzZWxmLnJlY2lwZV9tb2RlbC5fX2N1c3RvbV9pbWFnZV9fOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuY29uZmlndXJhdGlvbi5pbml0aWFsX3NlbGVjdGVkX2ltYWdlICE9IHNlbGVjdGVkX2ltYWdlOgorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gc2VsZi5yZWNpcGVfbW9kZWwuZ2V0X2N1c3RvbV9pbWFnZV92ZXJzaW9uKCkKKyAgICAgICAgICAgICAgICBsaW5rbmFtZSA9IHNlbGYuaG9iX2ltYWdlICsgdmVyc2lvbiArICItIiArIHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX21hY2gKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbGlua25hbWUgPSBzZWxlY3RlZF9pbWFnZSArICctJyArIHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX21hY2gKKyAgICAgICAgICAgIGltYWdlX2V4dGVuc2lvbiA9IHNlbGYuZ2V0X2ltYWdlX2V4dGVuc2lvbigpCisgICAgICAgICAgICBmb3IgaW1hZ2VfdHlwZSBpbiBzZWxmLnBhcmFtZXRlcnMuaW1hZ2VfdHlwZXM6CisgICAgICAgICAgICAgICAgaWYgaW1hZ2VfdHlwZSBpbiBpbWFnZV9leHRlbnNpb246CisgICAgICAgICAgICAgICAgICAgIHJlYWxfdHlwZXMgPSBpbWFnZV9leHRlbnNpb25baW1hZ2VfdHlwZV0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZWFsX3R5cGVzID0gW2ltYWdlX3R5cGVdCisgICAgICAgICAgICAgICAgZm9yIHJlYWxfaW1hZ2VfdHlwZSBpbiByZWFsX3R5cGVzOgorICAgICAgICAgICAgICAgICAgICBsaW5rcGF0aCA9IHNlbGYucGFyYW1ldGVycy5pbWFnZV9hZGRyICsgJy8nICsgbGlua25hbWUgKyAnLicgKyByZWFsX2ltYWdlX3R5cGUKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobGlua3BhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJzLmltYWdlX25hbWVzLmFwcGVuZChvcy5yZWFkbGluayhsaW5rcGF0aCkpCisgICAgICAgIGVsaWYgc2VsZi5jdXJyZW50X3N0ZXAgPT0gc2VsZi5QQUNLQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICBmcmFjdGlvbiA9IDEuMAorICAgICAgICBzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZS51cGRhdGVfcHJvZ3Jlc3NfYmFyKCJCdWlsZCBDb21wbGV0ZWQ6ICIsIGZyYWN0aW9uKQorICAgICAgICBzZWxmLmhhbmRsZXIuYnVpbGRfc3VjY2VlZGVkX2FzeW5jKCkKKyAgICAgICAgc2VsZi5zdG9wcGluZyA9IEZhbHNlCisKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X3N0ZXAgPT0gc2VsZi5QQUNLQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICBzZWxmLnN3aXRjaF9wYWdlKHNlbGYuUEFDS0FHRV9HRU5FUkFURUQpCisgICAgICAgIGVsaWYgc2VsZi5jdXJyZW50X3N0ZXAgPT0gc2VsZi5JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgc2VsZi5zd2l0Y2hfcGFnZShzZWxmLklNQUdFX0dFTkVSQVRFRCkKKworICAgIGRlZiBidWlsZF9mYWlsZWQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuc3RvcHBpbmc6CisgICAgICAgICAgICBzdGF0dXMgPSAic3RvcCIKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiQnVpbGQgc3RvcHBlZDogIgorICAgICAgICAgICAgZnJhY3Rpb24gPSBzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZS5wcm9ncmVzc19iYXIuZ2V0X2ZyYWN0aW9uKCkKKyAgICAgICAgICAgIHN0b3BfdG9fbmV4dF9lZGl0ID0gIiIKKyAgICAgICAgICAgIGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuRkFTVF9JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgICAgIHN0b3BfdG9fbmV4dF9lZGl0ID0gImltYWdlIGNvbmZpZ3VyYXRpb24iCisgICAgICAgICAgICBlbGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnByZXZpb3VzX3N0ZXAgPT0gc2VsZi5GQVNUX0lNQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICAgICAgICAgIHN0b3BfdG9fbmV4dF9lZGl0ID0gImltYWdlIGNvbmZpZ3VyYXRpb24iCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc3RvcF90b19uZXh0X2VkaXQgPSAicGFja2FnZXMiCisgICAgICAgICAgICBlbGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuUEFDS0FHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgICAgIHN0b3BfdG9fbmV4dF9lZGl0ID0gInJlY2lwZXMiCisgICAgICAgICAgICBidXR0b24gPSBzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZS5zaG93X3N0b3BfcGFnZShzdG9wX3RvX25leHRfZWRpdC5zcGxpdCgnICcpWzBdKQorICAgICAgICAgICAgc2VsZi5zZXRfZGVmYXVsdChidXR0b24pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmYWlsX3RvX25leHRfZWRpdCA9ICIiCisgICAgICAgICAgICBpZiBzZWxmLmN1cnJlbnRfc3RlcCA9PSBzZWxmLkZBU1RfSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgICAgICBmYWlsX3RvX25leHRfZWRpdCA9ICJpbWFnZSBjb25maWd1cmF0aW9uIgorICAgICAgICAgICAgICAgIGZyYWN0aW9uID0gMC45CisgICAgICAgICAgICBlbGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnByZXZpb3VzX3N0ZXAgPT0gc2VsZi5GQVNUX0lNQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICAgICAgICAgIGZhaWxfdG9fbmV4dF9lZGl0ID0gImltYWdlIGNvbmZpZ3VyYXRpb24iCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZmFpbF90b19uZXh0X2VkaXQgPSAicGFja2FnZXMiCisgICAgICAgICAgICAgICAgZnJhY3Rpb24gPSAxLjAKKyAgICAgICAgICAgIGVsaWYgc2VsZi5jdXJyZW50X3N0ZXAgPT0gc2VsZi5QQUNLQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICAgICAgZmFpbF90b19uZXh0X2VkaXQgPSAicmVjaXBlcyIKKyAgICAgICAgICAgICAgICBmcmFjdGlvbiA9IDEuMAorICAgICAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2Uuc2hvd19mYWlsX3BhZ2UoZmFpbF90b19uZXh0X2VkaXQuc3BsaXQoJyAnKVswXSkKKyAgICAgICAgICAgIHN0YXR1cyA9ICJmYWlsIgorICAgICAgICAgICAgbWVzc2FnZSA9ICJCdWlsZCBmYWlsZWQ6ICIKKyAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2UudXBkYXRlX3Byb2dyZXNzX2JhcihtZXNzYWdlLCBmcmFjdGlvbiwgc3RhdHVzKQorICAgICAgICBzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZS5zaG93X2JhY2tfYnV0dG9uKCkKKyAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2UuaGlkZV9zdG9wX2J1dHRvbigpCisgICAgICAgIHNlbGYuaGFuZGxlci5idWlsZF9mYWlsZWRfYXN5bmMoKQorICAgICAgICBzZWxmLnN0b3BwaW5nID0gRmFsc2UKKworICAgIGRlZiBoYW5kbGVyX2J1aWxkX3N1Y2NlZWRlZF9jYihzZWxmLCBydW5uaW5nX2J1aWxkKToKKyAgICAgICAgaWYgbm90IHNlbGYuc3RvcHBpbmc6CisgICAgICAgICAgICBzZWxmLmJ1aWxkX3N1Y2NlZWRlZCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmJ1aWxkX2ZhaWxlZCgpCisKKworICAgIGRlZiBoYW5kbGVyX2J1aWxkX2ZhaWxlZF9jYihzZWxmLCBydW5uaW5nX2J1aWxkKToKKyAgICAgICAgc2VsZi5idWlsZF9mYWlsZWQoKQorCisgICAgZGVmIGhhbmRsZXJfYnVpbGRfYWJvcnRlZF9jYihzZWxmLCBydW5uaW5nX2J1aWxkKToKKyAgICAgICAgc2VsZi5idWlsZF9mYWlsZWQoKQorCisgICAgZGVmIGhhbmRsZXJfbm9fcHJvdmlkZXJfY2Ioc2VsZiwgcnVubmluZ19idWlsZCwgbXNnKToKKyAgICAgICAgZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBnbGliLm1hcmt1cF9lc2NhcGVfdGV4dChtc2cpLCBndGsuTUVTU0FHRV9JTkZPKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBkaWFsb2cucnVuKCkKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorICAgICAgICBzZWxmLmJ1aWxkX2ZhaWxlZCgpCisKKyAgICBkZWYgaGFuZGxlcl90YXNrX3N0YXJ0ZWRfY2Ioc2VsZiwgcnVubmluZ19idWlsZCwgbWVzc2FnZSk6IAorICAgICAgICBmcmFjdGlvbiA9IG1lc3NhZ2VbImN1cnJlbnQiXSAqIDEuMC9tZXNzYWdlWyJ0b3RhbCJdCisgICAgICAgIHRpdGxlID0gIkJ1aWxkIHBhY2thZ2VzIgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfc3RlcCA9PSBzZWxmLkZBU1RfSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgIGlmIG1lc3NhZ2VbImV2ZW50bmFtZSJdID09ICJzY2VuZVF1ZXVlVGFza1N0YXJ0ZWQiOgorICAgICAgICAgICAgICAgIGZyYWN0aW9uID0gMC4yNyAqIGZyYWN0aW9uCisgICAgICAgICAgICBlbGlmIG1lc3NhZ2VbImV2ZW50bmFtZSJdID09ICJydW5RdWV1ZVRhc2tTdGFydGVkIjoKKyAgICAgICAgICAgICAgICBmcmFjdGlvbiA9IDAuMjcgKyAwLjYzICogZnJhY3Rpb24KKyAgICAgICAgZWxpZiBzZWxmLmN1cnJlbnRfc3RlcCA9PSBzZWxmLklNQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICB0aXRsZSA9ICJCdWlsZCBpbWFnZSIKKyAgICAgICAgICAgIGlmIHNlbGYucHJldmlvdXNfc3RlcCA9PSBzZWxmLkZBU1RfSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgICAgICBpZiBtZXNzYWdlWyJldmVudG5hbWUiXSA9PSAic2NlbmVRdWV1ZVRhc2tTdGFydGVkIjoKKyAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb24gPSAwLjI3ICsgMC42MyArIDAuMDMgKiBmcmFjdGlvbgorICAgICAgICAgICAgICAgIGVsaWYgbWVzc2FnZVsiZXZlbnRuYW1lIl0gPT0gInJ1blF1ZXVlVGFza1N0YXJ0ZWQiOgorICAgICAgICAgICAgICAgICAgICBmcmFjdGlvbiA9IDAuMjcgKyAwLjYzICsgMC4wMyArIDAuMDcgKiBmcmFjdGlvbgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBtZXNzYWdlWyJldmVudG5hbWUiXSA9PSAic2NlbmVRdWV1ZVRhc2tTdGFydGVkIjoKKyAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb24gPSAwLjIgKiBmcmFjdGlvbgorICAgICAgICAgICAgICAgIGVsaWYgbWVzc2FnZVsiZXZlbnRuYW1lIl0gPT0gInJ1blF1ZXVlVGFza1N0YXJ0ZWQiOgorICAgICAgICAgICAgICAgICAgICBmcmFjdGlvbiA9IDAuMiArIDAuOCAqIGZyYWN0aW9uCisgICAgICAgIGVsaWYgc2VsZi5jdXJyZW50X3N0ZXAgPT0gc2VsZi5QQUNLQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICBpZiBtZXNzYWdlWyJldmVudG5hbWUiXSA9PSAic2NlbmVRdWV1ZVRhc2tTdGFydGVkIjoKKyAgICAgICAgICAgICAgICBmcmFjdGlvbiA9IDAuMiAqIGZyYWN0aW9uCisgICAgICAgICAgICBlbGlmIG1lc3NhZ2VbImV2ZW50bmFtZSJdID09ICJydW5RdWV1ZVRhc2tTdGFydGVkIjoKKyAgICAgICAgICAgICAgICBmcmFjdGlvbiA9IDAuMiArIDAuOCAqIGZyYWN0aW9uCisgICAgICAgIHNlbGYuYnVpbGRfZGV0YWlsc19wYWdlLnVwZGF0ZV9wcm9ncmVzc19iYXIodGl0bGUgKyAiOiAiLCBmcmFjdGlvbikKKyAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2UudXBkYXRlX2J1aWxkX3N0YXR1cyhtZXNzYWdlWyJjdXJyZW50Il0sIG1lc3NhZ2VbInRvdGFsIl0sIG1lc3NhZ2VbInRhc2siXSkKKworICAgIGRlZiBoYW5kbGVyX2Rpc2tfZnVsbF9jYihzZWxmLCBydW5uaW5nX2J1aWxkKToKKyAgICAgICAgc2VsZi5kaXNrX2Z1bGwgPSBUcnVlCisKKyAgICBkZWYgaGFuZGxlcl9idWlsZF9mYWlsdXJlX2NiKHNlbGYsIHJ1bm5pbmdfYnVpbGQpOgorICAgICAgICBzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZS5zaG93X2lzc3VlcygpCisKKyAgICBkZWYgaGFuZGxlcl9idWlsZF9sb2dfY2Ioc2VsZiwgcnVubmluZ19idWlsZCwgZnVuYywgb2JqKToKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLmxvZ2dlciwgZnVuYyk6CisgICAgICAgICAgICBnZXRhdHRyKHNlbGYubG9nZ2VyLCBmdW5jKShvYmopCisKKyAgICBkZWYgZGVzdHJveV93aW5kb3dfY2Ioc2VsZiwgd2lkZ2V0LCBldmVudCk6CisgICAgICAgIGlmIG5vdCBzZWxmLnNlbnNpdGl2ZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsaWYgc2VsZi5oYW5kbGVyLmJ1aWxkaW5nOgorICAgICAgICAgICAgc2VsZi5zdG9wX2J1aWxkKCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBndGsubWFpbl9xdWl0KCkKKworICAgIGRlZiBldmVudF9oYW5kbGVfU0lHSU5UKHNlbGYsIHNpZ25hbCwgZnJhbWUpOgorICAgICAgICBmb3IgdyBpbiBndGsud2luZG93X2xpc3RfdG9wbGV2ZWxzKCk6CisgICAgICAgICAgICBpZiB3LmdldF9tb2RhbCgpOgorICAgICAgICAgICAgICAgIHcucmVzcG9uc2UoZ3RrLlJFU1BPTlNFX0RFTEVURV9FVkVOVCkKKyAgICAgICAgc3lzLmV4aXQoMCkKKworICAgIGRlZiBidWlsZF9wYWNrYWdlcyhzZWxmKToKKyAgICAgICAgXywgYWxsX3JlY2lwZXMgPSBzZWxmLnJlY2lwZV9tb2RlbC5nZXRfc2VsZWN0ZWRfcmVjaXBlcygpCisgICAgICAgIGlmIG5vdCBhbGxfcmVjaXBlczoKKyAgICAgICAgICAgIGxibCA9ICI8Yj5ObyBzZWxlY3Rpb25zIG1hZGU8L2I+IgorICAgICAgICAgICAgbXNnID0gIllvdSBoYXZlIG5vdCBtYWRlIGFueSBzZWxlY3Rpb25zIgorICAgICAgICAgICAgbXNnID0gbXNnICsgIiBzbyB0aGVyZSBpc24ndCBhbnl0aGluZyB0byBiYWtlIGF0IHRoaXMgdGltZS4iCisgICAgICAgICAgICBkaWFsb2cgPSBDcnVtYnNNZXNzYWdlRGlhbG9nKHNlbGYsIGxibCwgZ3RrLk1FU1NBR0VfSU5GTywgbXNnKQorICAgICAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgICAgICBkaWFsb2cucnVuKCkKKyAgICAgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmdlbmVyYXRlX3BhY2thZ2VzX2FzeW5jKFRydWUpCisKKyAgICBkZWYgYnVpbGRfaW1hZ2Uoc2VsZik6CisgICAgICAgIHNlbGVjdGVkX3BhY2thZ2VzID0gc2VsZi5wYWNrYWdlX21vZGVsLmdldF9zZWxlY3RlZF9wYWNrYWdlcygpCisgICAgICAgIGlmIG5vdCBzZWxlY3RlZF9wYWNrYWdlczogICAgICAKKyAgICAgICAgICAgIGxibCA9ICI8Yj5ObyBzZWxlY3Rpb25zIG1hZGU8L2I+IgorICAgICAgICAgICAgbXNnID0gIllvdSBoYXZlIG5vdCBtYWRlIGFueSBzZWxlY3Rpb25zIgorICAgICAgICAgICAgbXNnID0gbXNnICsgIiBzbyB0aGVyZSBpc24ndCBhbnl0aGluZyB0byBiYWtlIGF0IHRoaXMgdGltZS4iCisgICAgICAgICAgICBkaWFsb2cgPSBDcnVtYnNNZXNzYWdlRGlhbG9nKHNlbGYsIGxibCwgZ3RrLk1FU1NBR0VfSU5GTywgbXNnKQorICAgICAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgICAgICBkaWFsb2cucnVuKCkKKyAgICAgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmdlbmVyYXRlX2ltYWdlX2FzeW5jKFRydWUpCisKKyAgICBkZWYganVzdF9iYWtlKHNlbGYpOgorICAgICAgICBzZWxlY3RlZF9pbWFnZSA9IHNlbGYucmVjaXBlX21vZGVsLmdldF9zZWxlY3RlZF9pbWFnZSgpCisgICAgICAgIHNlbGVjdGVkX3BhY2thZ2VzID0gc2VsZi5wYWNrYWdlX21vZGVsLmdldF9zZWxlY3RlZF9wYWNrYWdlcygpIG9yIFtdCisKKyAgICAgICAgIyBJZiBubyBiYXNlIGltYWdlIGFuZCBubyBzZWxlY3RlZCBwYWNrYWdlcyBkb24ndCBidWlsZCBhbnl0aGluZworICAgICAgICBpZiBub3QgKHNlbGVjdGVkX3BhY2thZ2VzIG9yIHNlbGVjdGVkX2ltYWdlICE9IHNlbGYucmVjaXBlX21vZGVsLl9fY3VzdG9tX2ltYWdlX18pOgorICAgICAgICAgICAgbGJsID0gIjxiPk5vIHNlbGVjdGlvbnMgbWFkZTwvYj4iCisgICAgICAgICAgICBtc2cgPSAiWW91IGhhdmUgbm90IG1hZGUgYW55IHNlbGVjdGlvbnMiCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiIHNvIHRoZXJlIGlzbid0IGFueXRoaW5nIHRvIGJha2UgYXQgdGhpcyB0aW1lLiIKKyAgICAgICAgICAgIGRpYWxvZyA9IENydW1ic01lc3NhZ2VEaWFsb2coc2VsZiwgbGJsLCBndGsuTUVTU0FHRV9JTkZPLCBtc2cpCisgICAgICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgICAgIGRpYWxvZy5ydW4oKQorICAgICAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5mYXN0X2dlbmVyYXRlX2ltYWdlX2FzeW5jKFRydWUpCisKKyAgICBkZWYgc2hvd19yZWNpcGVfcHJvcGVydHlfZGlhbG9nKHNlbGYsIHByb3BlcnRpZXMpOgorICAgICAgICBpbmZvcm1hdGlvbiA9IHt9CisgICAgICAgIGRpYWxvZyA9IFByb3BlcnR5RGlhbG9nKHRpdGxlID0gcHJvcGVydGllc1sibmFtZSJdICsnICcrICJwcm9wZXJ0aWVzIiwKKyAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBzZWxmLAorICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uID0gcHJvcGVydGllcywKKyAgICAgICAgICAgICAgICAgICAgICBmbGFncyA9IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVAorICAgICAgICAgICAgICAgICAgICAgICAgICB8IGd0ay5ESUFMT0dfTk9fU0VQQVJBVE9SKQorCisgICAgICAgIGRpYWxvZy5zZXRfbW9kYWwoRmFsc2UpCisKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX05PKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBsYW1iZGEgdzogZGlhbG9nLmRlc3Ryb3koKSkKKworICAgICAgICBkaWFsb2cucnVuKCkKKworICAgIGRlZiBzaG93X3BhY2thZ2VzX3Byb3BlcnR5X2RpYWxvZyhzZWxmLCBwcm9wZXJ0aWVzKToKKyAgICAgICAgaW5mb3JtYXRpb24gPSB7fQorICAgICAgICBkaWFsb2cgPSBQcm9wZXJ0eURpYWxvZyh0aXRsZSA9IHByb3BlcnRpZXNbIm5hbWUiXSArJyAnKyAicHJvcGVydGllcyIsCisgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiA9IHByb3BlcnRpZXMsCisgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX05PX1NFUEFSQVRPUikKKworICAgICAgICBkaWFsb2cuc2V0X21vZGFsKEZhbHNlKQorCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDbG9zZSIsIGd0ay5SRVNQT05TRV9OTykKKyAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIGJ1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgbGFtYmRhIHc6IGRpYWxvZy5kZXN0cm95KCkpCisKKyAgICAgICAgZGlhbG9nLnJ1bigpCisKKyAgICBkZWYgc2hvd19sYXllcl9zZWxlY3Rpb25fZGlhbG9nKHNlbGYpOgorICAgICAgICBkaWFsb2cgPSBMYXllclNlbGVjdGlvbkRpYWxvZyh0aXRsZSA9ICJMYXllcnMiLAorICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzID0gY29weS5kZWVwY29weShzZWxmLmNvbmZpZ3VyYXRpb24ubGF5ZXJzKSwKKyAgICAgICAgICAgICAgICAgICAgIGxheWVyc19ub25fcmVtb3ZhYmxlID0gY29weS5kZWVwY29weShzZWxmLmNvbmZpZ3VyYXRpb24ubGF5ZXJzX25vbl9yZW1vdmFibGUpLAorICAgICAgICAgICAgICAgICAgICAgYWxsX2xheWVycyA9IHNlbGYucGFyYW1ldGVycy5hbGxfbGF5ZXJzLAorICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gZ3RrLkRJQUxPR19NT0RBTAorICAgICAgICAgICAgICAgICAgICAgICAgIHwgZ3RrLkRJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5UCisgICAgICAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX05PX1NFUEFSQVRPUikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNhbmNlbCIsIGd0ay5SRVNQT05TRV9OTykKKyAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJPSyIsIGd0ay5SRVNQT05TRV9ZRVMpCisgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICByZXNwb25zZSA9IGRpYWxvZy5ydW4oKQorICAgICAgICBpZiByZXNwb25zZSA9PSBndGsuUkVTUE9OU0VfWUVTOgorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmxheWVycyA9IGRpYWxvZy5sYXllcnMKKyAgICAgICAgICAgICMgRE8gcmVmcmVzaCBsYXllcnMKKyAgICAgICAgICAgIGlmIGRpYWxvZy5sYXllcnNfY2hhbmdlZDoKKyAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZV9jb25maWdfYXN5bmMoKQorICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisKKyAgICBkZWYgZ2V0X2ltYWdlX2V4dGVuc2lvbihzZWxmKToKKyAgICAgICAgaW1hZ2VfZXh0ZW5zaW9uID0ge30KKyAgICAgICAgZm9yIHR5cGUgaW4gc2VsZi5wYXJhbWV0ZXJzLmltYWdlX3R5cGVzOgorICAgICAgICAgICAgZXh0ID0gc2VsZi5oYW5kbGVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJJTUFHRV9FWFRFTlNJT05fJXMiICUgdHlwZV0pCisgICAgICAgICAgICBpZiBleHQ6CisgICAgICAgICAgICAgICAgaW1hZ2VfZXh0ZW5zaW9uW3R5cGVdID0gZXh0LnNwbGl0KCcgJykKKworICAgICAgICByZXR1cm4gaW1hZ2VfZXh0ZW5zaW9uCisKKyAgICBkZWYgc2hvd19sb2FkX215X2ltYWdlc19kaWFsb2coc2VsZik6CisgICAgICAgIGltYWdlX2V4dGVuc2lvbiA9IHNlbGYuZ2V0X2ltYWdlX2V4dGVuc2lvbigpCisgICAgICAgIGRpYWxvZyA9IEltYWdlU2VsZWN0aW9uRGlhbG9nKHNlbGYucGFyYW1ldGVycy5pbWFnZV9hZGRyLCBzZWxmLnBhcmFtZXRlcnMuaW1hZ2VfdHlwZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPcGVuIE15IEltYWdlcyIsIHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGsuRklMRV9DSE9PU0VSX0FDVElPTl9TQVZFLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VfZXh0ZW5zaW9uKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2FuY2VsIiwgZ3RrLlJFU1BPTlNFX05PKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIk9wZW4iLCBndGsuUkVTUE9OU0VfWUVTKQorICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgaWYgcmVzcG9uc2UgPT0gZ3RrLlJFU1BPTlNFX1lFUzoKKyAgICAgICAgICAgIGlmIG5vdCBkaWFsb2cuaW1hZ2VfbmFtZXM6CisgICAgICAgICAgICAgICAgbGJsID0gIjxiPk5vIHNlbGVjdGlvbnMgbWFkZTwvYj4iCisgICAgICAgICAgICAgICAgbXNnID0gIllvdSBoYXZlIG5vdCBtYWRlIGFueSBzZWxlY3Rpb25zIgorICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cgPSBDcnVtYnNNZXNzYWdlRGlhbG9nKHNlbGYsIGxibCwgZ3RrLk1FU1NBR0VfSU5GTywgbXNnKQorICAgICAgICAgICAgICAgIGJ1dHRvbiA9IGNydW1ic19kaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgICAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgICAgICAgICAgY3J1bWJzX2RpYWxvZy5ydW4oKQorICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cuZGVzdHJveSgpCisgICAgICAgICAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcnMuaW1hZ2VfYWRkciA9IGRpYWxvZy5pbWFnZV9mb2xkZXIKKyAgICAgICAgICAgIHNlbGYucGFyYW1ldGVycy5pbWFnZV9uYW1lcyA9IGRpYWxvZy5pbWFnZV9uYW1lc1s6XQorICAgICAgICAgICAgc2VsZi5zd2l0Y2hfcGFnZShzZWxmLk1ZX0lNQUdFX09QRU5FRCkKKworICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisKKyAgICBkZWYgc2hvd19hZHZfc2V0dGluZ3NfZGlhbG9nKHNlbGYsIHRhYj1Ob25lKToKKyAgICAgICAgZGlhbG9nID0gQWR2YW5jZWRTZXR0aW5nc0RpYWxvZyh0aXRsZSA9ICJBZHZhbmNlZCBjb25maWd1cmF0aW9uIiwKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gPSBjb3B5LmRlZXBjb3B5KHNlbGYuY29uZmlndXJhdGlvbiksCisgICAgICAgICAgICBhbGxfaW1hZ2VfdHlwZXMgPSBzZWxmLnBhcmFtZXRlcnMuaW1hZ2VfdHlwZXMsCisgICAgICAgICAgICBhbGxfcGFja2FnZV9mb3JtYXRzID0gc2VsZi5wYXJhbWV0ZXJzLmFsbF9wYWNrYWdlX2Zvcm1hdHMsCisgICAgICAgICAgICBhbGxfZGlzdHJvcyA9IHNlbGYucGFyYW1ldGVycy5hbGxfZGlzdHJvcywKKyAgICAgICAgICAgIGFsbF9zZGtfbWFjaGluZXMgPSBzZWxmLnBhcmFtZXRlcnMuYWxsX3Nka19tYWNoaW5lcywKKyAgICAgICAgICAgIG1heF90aHJlYWRzID0gc2VsZi5wYXJhbWV0ZXJzLm1heF90aHJlYWRzLAorICAgICAgICAgICAgcGFyZW50ID0gc2VsZiwKKyAgICAgICAgICAgIGZsYWdzID0gZ3RrLkRJQUxPR19NT0RBTAorICAgICAgICAgICAgICAgICAgICB8IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVAorICAgICAgICAgICAgICAgICAgICB8IGd0ay5ESUFMT0dfTk9fU0VQQVJBVE9SKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2FuY2VsIiwgZ3RrLlJFU1BPTlNFX05PKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIlNhdmUiLCBndGsuUkVTUE9OU0VfWUVTKQorICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgZGlhbG9nLnNldF9zYXZlX2J1dHRvbihidXR0b24pCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIHNldHRpbmdzX2NoYW5nZWQgPSBGYWxzZQorICAgICAgICBpZiByZXNwb25zZSA9PSBndGsuUkVTUE9OU0VfWUVTOgorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uID0gZGlhbG9nLmNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5zYXZlKHNlbGYuaGFuZGxlciwgVHJ1ZSkgIyByZW1lbWJlciBzZXR0aW5ncworICAgICAgICAgICAgc2V0dGluZ3NfY2hhbmdlZCA9IGRpYWxvZy5zZXR0aW5nc19jaGFuZ2VkCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9ZRVMsIHNldHRpbmdzX2NoYW5nZWQKKworICAgIGRlZiBzaG93X3NpbXBsZV9zZXR0aW5nc19kaWFsb2coc2VsZiwgdGFiPU5vbmUpOgorICAgICAgICBkaWFsb2cgPSBTaW1wbGVTZXR0aW5nc0RpYWxvZyh0aXRsZSA9ICJTZXR0aW5ncyIsCisgICAgICAgICAgICBjb25maWd1cmF0aW9uID0gY29weS5kZWVwY29weShzZWxmLmNvbmZpZ3VyYXRpb24pLAorICAgICAgICAgICAgYWxsX2ltYWdlX3R5cGVzID0gc2VsZi5wYXJhbWV0ZXJzLmltYWdlX3R5cGVzLAorICAgICAgICAgICAgYWxsX3BhY2thZ2VfZm9ybWF0cyA9IHNlbGYucGFyYW1ldGVycy5hbGxfcGFja2FnZV9mb3JtYXRzLAorICAgICAgICAgICAgYWxsX2Rpc3Ryb3MgPSBzZWxmLnBhcmFtZXRlcnMuYWxsX2Rpc3Ryb3MsCisgICAgICAgICAgICBhbGxfc2RrX21hY2hpbmVzID0gc2VsZi5wYXJhbWV0ZXJzLmFsbF9zZGtfbWFjaGluZXMsCisgICAgICAgICAgICBtYXhfdGhyZWFkcyA9IHNlbGYucGFyYW1ldGVycy5tYXhfdGhyZWFkcywKKyAgICAgICAgICAgIHBhcmVudCA9IHNlbGYsCisgICAgICAgICAgICBmbGFncyA9IGd0ay5ESUFMT0dfTU9EQUwKKyAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQKKyAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX05PX1NFUEFSQVRPUiwKKyAgICAgICAgICAgIGhhbmRsZXIgPSBzZWxmLmhhbmRsZXIpCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDYW5jZWwiLCBndGsuUkVTUE9OU0VfTk8pCisgICAgICAgIEhvYkFsdEJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiU2F2ZSIsIGd0ay5SRVNQT05TRV9ZRVMpCisgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBpZiB0YWI6CisgICAgICAgICAgICBkaWFsb2cuc3dpdGNoX3RvX3BhZ2UodGFiKQorICAgICAgICByZXNwb25zZSA9IGRpYWxvZy5ydW4oKQorICAgICAgICBzZXR0aW5nc19jaGFuZ2VkID0gRmFsc2UKKyAgICAgICAgaWYgcmVzcG9uc2UgPT0gZ3RrLlJFU1BPTlNFX1lFUzoKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbiA9IGRpYWxvZy5jb25maWd1cmF0aW9uCisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc2F2ZShzZWxmLmhhbmRsZXIsIFRydWUpICMgcmVtZW1iZXIgc2V0dGluZ3MKKyAgICAgICAgICAgIHNldHRpbmdzX2NoYW5nZWQgPSBkaWFsb2cuc2V0dGluZ3NfY2hhbmdlZAorICAgICAgICAgICAgaWYgZGlhbG9nLnByb3h5X3NldHRpbmdzX2NoYW5nZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRfdXNlcl9jb25maWdfcHJveGllcygpCisgICAgICAgIGVsaWYgZGlhbG9nLnByb3h5X3Rlc3RfcmFuOgorICAgICAgICAgICAgIyBUaGUgdXNlciBtaWdodCBoYXZlIG1vZGlmaWVkIHRoZSBwcm94aWVzIGluIHRoZSAiUHJveHkiCisgICAgICAgICAgICAjIHRhYiwgd2hpY2ggaW4gdHVybiBtYWRlIHRoZSBwcm94eSBzZXR0aW5ncyBtb2RpZnkgaW4gYmIuCisgICAgICAgICAgICAjIElmICJDYW5jZWwiIHdhcyBwcmVzc2VkLCByZXN0b3JlIHRoZSBwcmV2aW91cyBwcm94eQorICAgICAgICAgICAgIyBzZXR0aW5ncyBpbnNpZGUgYmIuCisgICAgICAgICAgICBzZWxmLnNldF91c2VyX2NvbmZpZ19wcm94aWVzKCkKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorICAgICAgICByZXR1cm4gcmVzcG9uc2UgPT0gZ3RrLlJFU1BPTlNFX1lFUywgc2V0dGluZ3NfY2hhbmdlZAorCisgICAgZGVmIHJlcGFyc2VfcG9zdF9hZHZfc2V0dGluZ3Moc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9tYWNoOgorICAgICAgICAgICAgc2VsZi51cGRhdGVfY29uZmlnX2FzeW5jKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5jbGVhcl9zZWxlY3Rpb24oKQorICAgICAgICAgICAgIyBETyByZXBhcnNlIHJlY2lwZXMKKyAgICAgICAgICAgIHNlbGYucG9wdWxhdGVfcmVjaXBlX3BhY2thZ2VfaW5mb19hc3luYygpCisKKyAgICBkZWYgZGVwbG95X2ltYWdlKHNlbGYsIGltYWdlX25hbWUpOgorICAgICAgICBpZiBub3QgaW1hZ2VfbmFtZToKKyAgICAgICAgICAgIGxibCA9ICI8Yj5QbGVhc2Ugc2VsZWN0IGFuIGltYWdlIHRvIGRlcGxveS48L2I+IgorICAgICAgICAgICAgZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5NRVNTQUdFX0lORk8pCisgICAgICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgICAgIGRpYWxvZy5ydW4oKQorICAgICAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaW1hZ2VfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnBhcmFtZXRlcnMuaW1hZ2VfYWRkciwgaW1hZ2VfbmFtZSkKKyAgICAgICAgZGlhbG9nID0gRGVwbG95SW1hZ2VEaWFsb2codGl0bGUgPSAiVXNiIEltYWdlIE1ha2VyIiwKKyAgICAgICAgICAgIGltYWdlX3BhdGggPSBpbWFnZV9wYXRoLAorICAgICAgICAgICAgcGFyZW50ID0gc2VsZiwKKyAgICAgICAgICAgIGZsYWdzID0gZ3RrLkRJQUxPR19NT0RBTAorICAgICAgICAgICAgICAgICAgICB8IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVAorICAgICAgICAgICAgICAgICAgICB8IGd0ay5ESUFMT0dfTk9fU0VQQVJBVE9SKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfTk8pCisgICAgICAgIEhvYkFsdEJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiTWFrZSB1c2IgaW1hZ2UiLCBndGsuUkVTUE9OU0VfWUVTKQorICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgZGVmIHNob3dfbG9hZF9rZXJuZWxfZGlhbG9nKHNlbGYpOgorICAgICAgICBkaWFsb2cgPSBndGsuRmlsZUNob29zZXJEaWFsb2coIkxvYWQgS2VybmVsIEZpbGVzIiwgc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0ay5GSUxFX0NIT09TRVJfQUNUSU9OX1NBVkUpCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDYW5jZWwiLCBndGsuUkVTUE9OU0VfTk8pCisgICAgICAgIEhvYkFsdEJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiT3BlbiIsIGd0ay5SRVNQT05TRV9ZRVMpCisgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBmaWx0ZXIgPSBndGsuRmlsZUZpbHRlcigpCisgICAgICAgIGZpbHRlci5zZXRfbmFtZSgiS2VybmVsIEZpbGVzIikKKyAgICAgICAgZmlsdGVyLmFkZF9wYXR0ZXJuKCIqLmJpbiIpCisgICAgICAgIGRpYWxvZy5hZGRfZmlsdGVyKGZpbHRlcikKKworICAgICAgICBkaWFsb2cuc2V0X2N1cnJlbnRfZm9sZGVyKHNlbGYucGFyYW1ldGVycy5pbWFnZV9hZGRyKQorCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIGtlcm5lbF9wYXRoID0gIiIKKyAgICAgICAgaWYgcmVzcG9uc2UgPT0gZ3RrLlJFU1BPTlNFX1lFUzoKKyAgICAgICAgICAgIGtlcm5lbF9wYXRoID0gZGlhbG9nLmdldF9maWxlbmFtZSgpCisKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgICAgIHJldHVybiBrZXJuZWxfcGF0aAorCisgICAgZGVmIHJ1bnFlbXVfaW1hZ2Uoc2VsZiwgaW1hZ2VfbmFtZSwga2VybmVsX25hbWUpOgorICAgICAgICBpZiBub3QgaW1hZ2VfbmFtZSBvciBub3Qga2VybmVsX25hbWU6CisgICAgICAgICAgICBsYmwgPSAiPGI+UGxlYXNlIHNlbGVjdCAlcyB0byBsYXVuY2ggaW4gUUVNVS48L2I+IiAlICgiYSBrZXJuZWwiIGlmIGltYWdlX25hbWUgZWxzZSAiYW4gaW1hZ2UiKQorICAgICAgICAgICAgZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5NRVNTQUdFX0lORk8pCisgICAgICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgICAgIGRpYWxvZy5ydW4oKQorICAgICAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAga2VybmVsX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYXJhbWV0ZXJzLmltYWdlX2FkZHIsIGtlcm5lbF9uYW1lKQorICAgICAgICBpbWFnZV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYucGFyYW1ldGVycy5pbWFnZV9hZGRyLCBpbWFnZV9uYW1lKQorCisgICAgICAgIHNvdXJjZV9lbnZfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnBhcmFtZXRlcnMuY29yZV9iYXNlLCAib2UtaW5pdC1idWlsZC1lbnYiKQorICAgICAgICB0bXBfcGF0aCA9IHNlbGYucGFyYW1ldGVycy50bXBkaXIKKyAgICAgICAgY21kbGluZSA9IGJiLnVpLmNydW1icy51dGlscy53aGljaF90ZXJtaW5hbCgpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGltYWdlX3BhdGgpIGFuZCBvcy5wYXRoLmV4aXN0cyhrZXJuZWxfcGF0aCkgXAorICAgICAgICAgICBhbmQgb3MucGF0aC5leGlzdHMoc291cmNlX2Vudl9wYXRoKSBhbmQgb3MucGF0aC5leGlzdHModG1wX3BhdGgpIFwKKyAgICAgICAgICAgYW5kIGNtZGxpbmU6CisgICAgICAgICAgICBjbWRsaW5lICs9ICJcJyBiYXNoIC1jIFwiZXhwb3J0IE9FX1RNUERJUj0iICsgdG1wX3BhdGggKyAiOyAiCisgICAgICAgICAgICBjbWRsaW5lICs9ICJzb3VyY2UgIiArIHNvdXJjZV9lbnZfcGF0aCArICIgIiArIG9zLmdldGN3ZCgpICsgIjsgIgorICAgICAgICAgICAgY21kbGluZSArPSAicnVucWVtdSAiICsga2VybmVsX3BhdGggKyAiICIgKyBpbWFnZV9wYXRoICsgIlwiXCciCisgICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKHNobGV4LnNwbGl0KGNtZGxpbmUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGJsID0gIjxiPlBhdGggZXJyb3I8L2I+IgorICAgICAgICAgICAgbXNnID0gIk9uZSBvZiB5b3VyIHBhdGhzIGlzIHdyb25nLCIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICIgcGxlYXNlIG1ha2Ugc3VyZSB0aGUgZm9sbG93aW5nIHBhdGhzIGV4aXN0OlxuIgorICAgICAgICAgICAgbXNnID0gbXNnICsgImltYWdlIHBhdGg6IiArIGltYWdlX3BhdGggKyAiXG4iCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAia2VybmVsIHBhdGg6IiArIGtlcm5lbF9wYXRoICsgIlxuIgorICAgICAgICAgICAgbXNnID0gbXNnICsgInNvdXJjZSBlbnZpcm9ubWVudCBwYXRoOiIgKyBzb3VyY2VfZW52X3BhdGggKyAiXG4iCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAidG1wIHBhdGg6ICIgKyB0bXBfcGF0aCArICIuIgorICAgICAgICAgICAgbXNnID0gbXNnICsgIllvdSBtYXkgYmUgbWlzc2luZyBlaXRoZXIgeHRlcm0gb3IgdnRlIGZvciB0ZXJtaW5hbCBzZXJ2aWNlcy4iCisgICAgICAgICAgICBkaWFsb2cgPSBDcnVtYnNNZXNzYWdlRGlhbG9nKHNlbGYsIGxibCwgZ3RrLk1FU1NBR0VfRVJST1IsIG1zZykKKyAgICAgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDbG9zZSIsIGd0ay5SRVNQT05TRV9PSykKKyAgICAgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICAgICAgZGlhbG9nLnJ1bigpCisgICAgICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisKKyAgICBkZWYgc2hvd19wYWNrYWdlcyhzZWxmKToKKyAgICAgICAgc2VsZi5wYWNrYWdlX2RldGFpbHNfcGFnZS5yZWZyZXNoX3RhYmxlcygpCisgICAgICAgIHNlbGYuc3dpdGNoX3BhZ2Uoc2VsZi5QQUNLQUdFX1NFTEVDVElPTikKKworICAgIGRlZiBzaG93X3JlY2lwZXMoc2VsZik6CisgICAgICAgIHNlbGYuc3dpdGNoX3BhZ2Uoc2VsZi5SRUNJUEVfU0VMRUNUSU9OKQorCisgICAgZGVmIHNob3dfaW1hZ2VfZGV0YWlscyhzZWxmKToKKyAgICAgICAgc2VsZi5zd2l0Y2hfcGFnZShzZWxmLklNQUdFX0dFTkVSQVRFRCkKKworICAgIGRlZiBzaG93X2NvbmZpZ3VyYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuc3dpdGNoX3BhZ2Uoc2VsZi5CQVNFSU1HX1NFTEVDVEVEKQorCisgICAgZGVmIHN0b3BfYnVpbGQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuc3RvcHBpbmc6CisgICAgICAgICAgICBsYmwgPSAiPGI+Rm9yY2UgU3RvcCBidWlsZD88L2I+IgorICAgICAgICAgICAgbXNnID0gIllvdSd2ZSBhbHJlYWR5IHNlbGVjdGVkIFN0b3Agb25jZSwiCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiIHdvdWxkIHlvdSBsaWtlIHRvICdGb3JjZSBTdG9wJyB0aGUgYnVpbGQ/XG5cbiIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICJUaGlzIHdpbGwgc3RvcCB0aGUgYnVpbGQgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBidXQgbWF5IgorICAgICAgICAgICAgbXNnID0gbXNnICsgIiB3ZWxsIGxlYXZlIHlvdXIgYnVpbGQgZGlyZWN0b3J5IGluIGFuICB1bnVzYWJsZSBzdGF0ZSIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICIgdGhhdCByZXF1aXJlcyBtYW51YWwgc3RlcHMgdG8gZml4LiIKKyAgICAgICAgICAgIGRpYWxvZyA9IENydW1ic01lc3NhZ2VEaWFsb2coc2VsZiwgbGJsLCBndGsuTUVTU0FHRV9XQVJOSU5HLCBtc2cpCisgICAgICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2FuY2VsIiwgZ3RrLlJFU1BPTlNFX0NBTkNFTCkKKyAgICAgICAgICAgIEhvYkFsdEJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkZvcmNlIFN0b3AiLCBndGsuUkVTUE9OU0VfWUVTKQorICAgICAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsYmwgPSAiPGI+U3RvcCBidWlsZD88L2I+IgorICAgICAgICAgICAgbXNnID0gIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBzdG9wIHRoaXMiCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiIGJ1aWxkP1xuXG4nU3RvcCcgd2lsbCBzdG9wIHRoZSBidWlsZCBhcyBzb29uIGFzIGFsbCBpbiIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICIgcHJvZ3Jlc3MgYnVpbGQgdGFza3MgYXJlIGZpbmlzaGVkLiBIb3dldmVyIGlmIGEiCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiIGxlbmd0aHkgY29tcGlsYXRpb24gcGhhc2UgaXMgaW4gcHJvZ3Jlc3MgdGhpcyBtYXkgdGFrZSIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICIgc29tZSB0aW1lLlxuXG4iCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiJ0ZvcmNlIFN0b3AnIHdpbGwgc3RvcCB0aGUgYnVpbGQgYXMgcXVpY2tseSBhcyIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICIgcG9zc2libGUgYnV0IG1heSB3ZWxsIGxlYXZlIHlvdXIgYnVpbGQgZGlyZWN0b3J5IGluIGFuIgorICAgICAgICAgICAgbXNnID0gbXNnICsgIiB1bnVzYWJsZSBzdGF0ZSB0aGF0IHJlcXVpcmVzIG1hbnVhbCBzdGVwcyB0byBmaXguIgorICAgICAgICAgICAgZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5NRVNTQUdFX1dBUk5JTkcsIG1zZykKKyAgICAgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDYW5jZWwiLCBndGsuUkVTUE9OU0VfQ0FOQ0VMKQorICAgICAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiRm9yY2Ugc3RvcCIsIGd0ay5SRVNQT05TRV9ZRVMpCisgICAgICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJTdG9wIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgaWYgcmVzcG9uc2UgIT0gZ3RrLlJFU1BPTlNFX0NBTkNFTDoKKyAgICAgICAgICAgIHNlbGYuc3RvcHBpbmcgPSBUcnVlCisgICAgICAgIGlmIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9PSzoKKyAgICAgICAgICAgIHNlbGYuYnVpbGRfZGV0YWlsc19wYWdlLnByb2dyZXNzX2Jhci5zZXRfc3RvcF90aXRsZSgiU3RvcHBpbmcgdGhlIGJ1aWxkLi4uLiIpCisgICAgICAgICAgICBzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZS5wcm9ncmVzc19iYXIuc2V0X3Jjc3R5bGUoInN0b3AiKQorICAgICAgICAgICAgc2VsZi5jYW5jZWxfYnVpbGRfc3luYygpCisgICAgICAgIGVsaWYgcmVzcG9uc2UgPT0gZ3RrLlJFU1BPTlNFX1lFUzoKKyAgICAgICAgICAgIHNlbGYuY2FuY2VsX2J1aWxkX3N5bmMoVHJ1ZSkKKworICAgIGRlZiBkb19sb2coc2VsZiwgY29uc29sZWxvZ2ZpbGUgPSBOb25lKToKKyAgICAgICAgaWYgY29uc29sZWxvZ2ZpbGU6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGNvbnNvbGVsb2dmaWxlKSkKKyAgICAgICAgICAgIGlmIHNlbGYuY29uc29sZWxvZzoKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5yZW1vdmVIYW5kbGVyKHNlbGYuY29uc29sZWxvZykKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnNvbGVsb2cgPSBOb25lCisgICAgICAgICAgICBzZWxmLmNvbnNvbGVsb2cgPSBsb2dnaW5nLkZpbGVIYW5kbGVyKGNvbnNvbGVsb2dmaWxlKQorICAgICAgICAgICAgYmIubXNnLmFkZERlZmF1bHRsb2dGaWx0ZXIoc2VsZi5jb25zb2xlbG9nKQorICAgICAgICAgICAgZm9ybWF0ID0gYmIubXNnLkJCTG9nRm9ybWF0dGVyKCIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpCisgICAgICAgICAgICBzZWxmLmNvbnNvbGVsb2cuc2V0Rm9ybWF0dGVyKGZvcm1hdCkKKworICAgICAgICAgICAgc2VsZi5sb2dnZXIuYWRkSGFuZGxlcihzZWxmLmNvbnNvbGVsb2cpCisKKyAgICBkZWYgZ2V0X3RvcGRpcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlci5nZXRfdG9wZGlyKCkKKworICAgIGRlZiB3YWl0KHNlbGYsIGRlbGF5KToKKyAgICAgICAgdGltZV9zdGFydCA9IHRpbWUudGltZSgpCisgICAgICAgIHRpbWVfZW5kID0gdGltZV9zdGFydCArIGRlbGF5CisgICAgICAgIHdoaWxlIHRpbWVfZW5kID4gdGltZS50aW1lKCk6CisgICAgICAgICAgICB3aGlsZSBndGsuZXZlbnRzX3BlbmRpbmcoKToKKyAgICAgICAgICAgICAgICBndGsubWFpbl9pdGVyYXRpb24oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvYnVpbGRtYW5hZ2VyLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvYnVpbGRtYW5hZ2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NThkNzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9idWlsZG1hbmFnZXIucHkKQEAgLTAsMCArMSw0NTUgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAwOCAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgUm9iIEJyYWRmb3JkIDxyb2JAbGludXguaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworaW1wb3J0IGdvYmplY3QKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCBvcworaW1wb3J0IGRhdGV0aW1lCitpbXBvcnQgdGltZQorCitjbGFzcyBCdWlsZENvbmZpZ3VyYXRpb246CisgICAgIiIiIFJlcHJlc2VudHMgYSBwb3RlbnRpYWwgKm9yKiBoaXN0b3JpYyAqb3IqIGNvbmNyZXRlIGJ1aWxkLiBJdAorICAgIGVuY29tcGFzc2VzIGFsbCB0aGUgdGhpbmdzIHRoYXQgd2UgbmVlZCB0byB0ZWxsIGJpdGJha2UgdG8gZG8gdG8gbWFrZSBpdAorICAgIGJ1aWxkIHdoYXQgd2Ugd2FudCBpdCB0byBidWlsZC4KKworICAgIEl0IGFsc28gc3RvcmVkIHRoZSBtZXRhZGF0YSBVUkwgYW5kIHRoZSBzZXQgb2YgcG9zc2libGUgbWFjaGluZXMgKGFuZCB0aGUKKyAgICBkaXN0cm9zIC8gaW1hZ2VzIC8gdXJpcyBmb3IgdGhlc2UuIEFwYXJ0IGZyb20gdGhlIG1ldGRhdGEgVVJMIHRoZXNlIGFyZQorICAgIG5vdCBzZXJpYWxpc2VkIHRvIGZpbGUgKHNpbmNlIHRoZXkgbWF5IGJlIHRyYW5zaWVudCkuIEluIHNvbWUgd2F5cyB0aGlzCisgICAgZnVuY3Rpb25hbGl0eSBtaWdodCBiZSBzaGlmdGVkIHRvIHRoZSBsb2FkZXIgY2xhc3MuIiIiCisKKyAgICBkZWYgX19pbml0X18gKHNlbGYpOgorICAgICAgICBzZWxmLm1ldGFkYXRhX3VybCA9IE5vbmUKKworICAgICAgICAjIFR1cGxlIG9mIChkaXN0cm9zLCBpbWFnZSwgdXJscykKKyAgICAgICAgc2VsZi5tYWNoaW5lX29wdGlvbnMgPSB7fQorCisgICAgICAgIHNlbGYubWFjaGluZSA9IE5vbmUKKyAgICAgICAgc2VsZi5kaXN0cm8gPSBOb25lCisgICAgICAgIHNlbGYuaW1hZ2UgPSBOb25lCisgICAgICAgIHNlbGYudXJscyA9IFtdCisgICAgICAgIHNlbGYuZXh0cmFfdXJscyA9IFtdCisgICAgICAgIHNlbGYuZXh0cmFfcGtncyA9IFtdCisKKyAgICBkZWYgZ2V0X21hY2hpbmVzX21vZGVsIChzZWxmKToKKyAgICAgICAgbW9kZWwgPSBndGsuTGlzdFN0b3JlIChnb2JqZWN0LlRZUEVfU1RSSU5HKQorICAgICAgICBmb3IgbWFjaGluZSBpbiBzZWxmLm1hY2hpbmVfb3B0aW9ucy5rZXlzKCk6CisgICAgICAgICAgICBtb2RlbC5hcHBlbmQgKFttYWNoaW5lXSkKKworICAgICAgICByZXR1cm4gbW9kZWwKKworICAgIGRlZiBnZXRfZGlzdHJvX2FuZF9pbWFnZXNfbW9kZWxzIChzZWxmLCBtYWNoaW5lKToKKyAgICAgICAgZGlzdHJvX21vZGVsID0gZ3RrLkxpc3RTdG9yZSAoZ29iamVjdC5UWVBFX1NUUklORykKKworICAgICAgICBmb3IgZGlzdHJvIGluIHNlbGYubWFjaGluZV9vcHRpb25zW21hY2hpbmVdWzBdOgorICAgICAgICAgICAgZGlzdHJvX21vZGVsLmFwcGVuZCAoW2Rpc3Ryb10pCisKKyAgICAgICAgaW1hZ2VfbW9kZWwgPSBndGsuTGlzdFN0b3JlIChnb2JqZWN0LlRZUEVfU1RSSU5HKQorCisgICAgICAgIGZvciBpbWFnZSBpbiBzZWxmLm1hY2hpbmVfb3B0aW9uc1ttYWNoaW5lXVsxXToKKyAgICAgICAgICAgIGltYWdlX21vZGVsLmFwcGVuZCAoW2ltYWdlXSkKKworICAgICAgICByZXR1cm4gKGRpc3Ryb19tb2RlbCwgaW1hZ2VfbW9kZWwpCisKKyAgICBkZWYgZ2V0X3JlcG9zIChzZWxmKToKKyAgICAgICAgc2VsZi51cmxzID0gc2VsZi5tYWNoaW5lX29wdGlvbnNbc2VsZi5tYWNoaW5lXVsyXQorICAgICAgICByZXR1cm4gc2VsZi51cmxzCisKKyAgICAjIEl0IG1pZ2h0IGJlIGEgbG90IGxvdCBiZXR0ZXIgaWYgd2Ugc3RvcmVkIHRoZXNlIGluIGxpa2UsIGJpdGJha2UgY29uZgorICAgICMgZmlsZSBmb3JtYXQuCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBsb2FkX2Zyb21fZmlsZSAoZmlsZW5hbWUpOgorCisgICAgICAgIGNvbmYgPSBCdWlsZENvbmZpZ3VyYXRpb24oKQorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyIikgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgZGF0YSA9IGxpbmUuc3BsaXQgKCI7IilbMV0KKyAgICAgICAgICAgICAgICBpZiAobGluZS5zdGFydHN3aXRoICgibWV0YWRhdGEtdXJsOyIpKToKKyAgICAgICAgICAgICAgICAgICAgY29uZi5tZXRhZGF0YV91cmwgPSBkYXRhLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiAobGluZS5zdGFydHN3aXRoICgidXJsOyIpKToKKyAgICAgICAgICAgICAgICAgICAgY29uZi51cmxzICs9IFtkYXRhLnN0cmlwKCldCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgKGxpbmUuc3RhcnRzd2l0aCAoImV4dHJhLXVybDsiKSk6CisgICAgICAgICAgICAgICAgICAgIGNvbmYuZXh0cmFfdXJscyArPSBbZGF0YS5zdHJpcCgpXQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIChsaW5lLnN0YXJ0c3dpdGggKCJtYWNoaW5lOyIpKToKKyAgICAgICAgICAgICAgICAgICAgY29uZi5tYWNoaW5lID0gZGF0YS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgKGxpbmUuc3RhcnRzd2l0aCAoImRpc3RyaWJ1dGlvbjsiKSk6CisgICAgICAgICAgICAgICAgICAgIGNvbmYuZGlzdHJvID0gZGF0YS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgKGxpbmUuc3RhcnRzd2l0aCAoImltYWdlOyIpKToKKyAgICAgICAgICAgICAgICAgICAgY29uZi5pbWFnZSA9IGRhdGEuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHJldHVybiBjb25mCisKKyAgICAjIFNlcmlhbGlzZSB0byBhIGZpbGUuIFRoaXMgaXMgcGFydCBvZiB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgd2UgdXNlIHRoaXMKKyAgICAjIHRvIGJlIGFibGUgdG8gcmVwZWF0IGEgZ2l2ZW4gYnVpbGQgKHVzaW5nIHRoZSBzYW1lIHNldCBvZiBwYXJhbWV0ZXJzKQorICAgICMgYnV0IGFsc28gc28gdGhhdCB3ZSBjYW4gaW5jbHVkZSB0aGUgZGV0YWlscyBvZiB0aGUgaW1hZ2UgLyBtYWNoaW5lIC8KKyAgICAjIGRpc3RybyBpbiB0aGUgYnVpbGQgbWFuYWdlciB0cmVlIHZpZXcuCisgICAgZGVmIHdyaXRlX3RvX2ZpbGUgKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgZiA9IG9wZW4gKGZpbGVuYW1lLCAidyIpCisKKyAgICAgICAgbGluZXMgPSBbXQorCisgICAgICAgIGlmIChzZWxmLm1ldGFkYXRhX3VybCk6CisgICAgICAgICAgICBsaW5lcyArPSBbIm1ldGFkYXRhLXVybDslc1xuIiAlIChzZWxmLm1ldGFkYXRhX3VybCldCisKKyAgICAgICAgZm9yIHVybCBpbiBzZWxmLnVybHM6CisgICAgICAgICAgICBsaW5lcyArPSBbInVybDslc1xuIiAlICh1cmwpXQorCisgICAgICAgIGZvciB1cmwgaW4gc2VsZi5leHRyYV91cmxzOgorICAgICAgICAgICAgbGluZXMgKz0gWyJleHRyYS11cmw7JXNcbiIgJSAodXJsKV0KKworICAgICAgICBpZiAoc2VsZi5tYWNoaW5lKToKKyAgICAgICAgICAgIGxpbmVzICs9IFsibWFjaGluZTslc1xuIiAlIChzZWxmLm1hY2hpbmUpXQorCisgICAgICAgIGlmIChzZWxmLmRpc3Rybyk6CisgICAgICAgICAgICBsaW5lcyArPSBbImRpc3RyaWJ1dGlvbjslc1xuIiAlIChzZWxmLmRpc3RybyldCisKKyAgICAgICAgaWYgKHNlbGYuaW1hZ2UpOgorICAgICAgICAgICAgbGluZXMgKz0gWyJpbWFnZTslc1xuIiAlIChzZWxmLmltYWdlKV0KKworICAgICAgICBmLndyaXRlbGluZXMgKGxpbmVzKQorICAgICAgICBmLmNsb3NlICgpCisKK2NsYXNzIEJ1aWxkUmVzdWx0KGdvYmplY3QuR09iamVjdCk6CisgICAgIiIiIFJlcHJlc2VudHMgYW4gaGlzdG9yaWMgYnVpbGQuIFBlcmhhcHMgbm90IHN1Y2Nlc3NmdWwuIEJ1dCBpdCBpbmNsdWRlcworICAgIHRoaW5ncyBzdWNoIGFzIHRoZSBmaWxlcyB0aGF0IGFyZSBpbiB0aGUgZGlyZWN0b3J5ICh0aGUgb3V0cHV0IGZyb20gdGhlCisgICAgYnVpbGQpIGFzIHdlbGwgYXMgYSBkZXNlcmlhbGlzZWQgQnVpbGRDb25maWd1cmF0aW9uIGZpbGUgdGhhdCBpcyBzdG9yZWQgaW4KKyAgICAiLmNvbmYiIGluIHRoZSBkaXJlY3RvcnkgZm9yIHRoZSBidWlsZC4KKworICAgIFRoaXMgaXMgR09iamVjdCBzbyB0aGF0IGl0IGNhbiBiZSBpbmNsdWRlZCBpbiB0aGUgVHJlZVN0b3JlLiIiIgorCisgICAgKFNUQVRFX0NPTVBMRVRFLCBTVEFURV9GQUlMRUQsIFNUQVRFX09OR09JTkcpID0gXAorICAgICAgICAoMCwgMSwgMikKKworICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgcGFyZW50LCBpZGVudGlmaWVyKToKKyAgICAgICAgZ29iamVjdC5HT2JqZWN0Ll9faW5pdF9fIChzZWxmKQorICAgICAgICBzZWxmLmRhdGUgPSBOb25lCisKKyAgICAgICAgc2VsZi5maWxlcyA9IFtdCisgICAgICAgIHNlbGYuc3RhdHVzID0gTm9uZQorICAgICAgICBzZWxmLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyCisgICAgICAgIHNlbGYucGF0aCA9IG9zLnBhdGguam9pbiAocGFyZW50LCBpZGVudGlmaWVyKQorCisgICAgICAgICMgRXh0cmFjdCB0aGUgZGF0ZSwgc2luY2UgdGhlIGRpcmVjdG9yeSBuYW1lIGlzIG9mIHRoZQorICAgICAgICAjIGZvcm1hdCBidWlsZC08eWVhcj48bW9udGg+PGRheT4tPG9yZGluYWw+IHdlIGNhbiBlYXNpbHkKKyAgICAgICAgIyBwdWxsIGl0IG91dC4KKyAgICAgICAgIyBUT0RPOiBCZXR0ZXIgdG8gc3RhdCBhIGZpbGU/CisgICAgICAgIChfLCBkYXRlLCByZXZpc2lvbikgPSBpZGVudGlmaWVyLnNwbGl0ICgiLSIpCisgICAgICAgIHByaW50KGRhdGUpCisKKyAgICAgICAgeWVhciA9IGludCAoZGF0ZVswOjRdKQorICAgICAgICBtb250aCA9IGludCAoZGF0ZVs0OjZdKQorICAgICAgICBkYXkgPSBpbnQgKGRhdGVbNjo4XSkKKworICAgICAgICBzZWxmLmRhdGUgPSBkYXRldGltZS5kYXRlICh5ZWFyLCBtb250aCwgZGF5KQorCisgICAgICAgIHNlbGYuY29uZiA9IE5vbmUKKworICAgICAgICAjIEJ5IGRlZmF1bHQgYnVpbGRzIGFyZSBTVEFURV9GQUlMRUQgdW5sZXNzIHdlIGZpbmQgYSAiY29tcGxldGUiIGZpbGUKKyAgICAgICAgIyBpbiB3aGljaCBjYXNlIHRoZXkgYXJlIFNUQVRFX0NPTVBMRVRFCisgICAgICAgIHNlbGYuc3RhdGUgPSBCdWlsZFJlc3VsdC5TVEFURV9GQUlMRUQKKyAgICAgICAgZm9yIGZpbGUgaW4gb3MubGlzdGRpciAoc2VsZi5wYXRoKToKKyAgICAgICAgICAgIGlmIChmaWxlLnN0YXJ0c3dpdGggKCIuY29uZiIpKToKKyAgICAgICAgICAgICAgICBjb25mZmlsZSA9IG9zLnBhdGguam9pbiAoc2VsZi5wYXRoLCBmaWxlKQorICAgICAgICAgICAgICAgIHNlbGYuY29uZiA9IEJ1aWxkQ29uZmlndXJhdGlvbi5sb2FkX2Zyb21fZmlsZSAoY29uZmZpbGUpCisgICAgICAgICAgICBlbGlmIChmaWxlLnN0YXJ0c3dpdGggKCJjb21wbGV0ZSIpKToKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gQnVpbGRSZXN1bHQuU1RBVEVfQ09NUExFVEUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hZGRfZmlsZSAoZmlsZSkKKworICAgIGRlZiBhZGRfZmlsZSAoc2VsZiwgZmlsZSk6CisgICAgICAgICMgSnVzdCBhZGQgdGhlIGZpbGUgZm9yIG5vdy4gRG9uJ3QgY2FyZSBhYm91dCB0aGUgdHlwZS4KKyAgICAgICAgc2VsZi5maWxlcyArPSBbKGZpbGUsIE5vbmUpXQorCitjbGFzcyBCdWlsZE1hbmFnZXJNb2RlbCAoZ3RrLlRyZWVTdG9yZSk6CisgICAgIiIiIE1vZGVsIGZvciB0aGUgQnVpbGRNYW5hZ2VyVHJlZVZpZXcuIFRoaXMgZGVyaXZlcyBmcm9tIGd0ay5UcmVlU3RvcmUKKyAgICBidXQgaXQgYWJzdHJhY3RzIG5pY2VseSB3aGF0IHRoZSBjb2x1bW5zIG1lYW4gYW5kIHRoZSBzZXR1cCBvZiB0aGUgY29sdW1ucworICAgIGluIHRoZSBtb2RlbC4gIiIiCisKKyAgICAoQ09MX0lERU5ULCBDT0xfREVTQywgQ09MX01BQ0hJTkUsIENPTF9ESVNUUk8sIENPTF9CVUlMRF9SRVNVTFQsIENPTF9EQVRFLCBDT0xfU1RBVEUpID0gXAorICAgICAgICAoMCwgMSwgMiwgMywgNCwgNSwgNikKKworICAgIGRlZiBfX2luaXRfXyAoc2VsZik6CisgICAgICAgIGd0ay5UcmVlU3RvcmUuX19pbml0X18gKHNlbGYsCisgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgZ29iamVjdC5UWVBFX09CSkVDVCwKKyAgICAgICAgICAgIGdvYmplY3QuVFlQRV9JTlQ2NCwKKyAgICAgICAgICAgIGdvYmplY3QuVFlQRV9JTlQpCisKK2NsYXNzIEJ1aWxkTWFuYWdlciAoZ29iamVjdC5HT2JqZWN0KToKKyAgICAiIiIgVGhpcyBjbGFzcyBtYW5hZ2VzIHRoZSBoaXN0b3JpYyBidWlsZHMgdGhhdCBoYXZlIGJlZW4gZm91bmQgaW4gdGhlCisgICAgInJlc3VsdHMiIGRpcmVjdG9yeSBidXQgaXMgYWxzbyB1c2VkIGZvciBzdGFydGluZyBhIG5ldyBidWlsZC4iIiIKKworICAgIF9fZ3NpZ25hbHNfXyA9IHsKKyAgICAgICAgJ3BvcHVsYXRpb24tZmluaXNoZWQnIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSksCisgICAgICAgICdwb3B1bGF0ZS1lcnJvcicgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpCisgICAgfQorCisgICAgZGVmIHVwZGF0ZV9idWlsZF9yZXN1bHQgKHNlbGYsIHJlc3VsdCwgaXRlcik6CisgICAgICAgICMgQ29udmVydCB0aGUgZGF0ZSBpbnRvIHNvbWV0aGluZyB3ZSBjYW4gc29ydCBieS4KKyAgICAgICAgZGF0ZSA9IGxvbmcgKHRpbWUubWt0aW1lIChyZXN1bHQuZGF0ZS50aW1ldHVwbGUoKSkpCisKKyAgICAgICAgIyBBZGQgYSB0b3AgbGV2ZWwgZW50cnkgZm9yIHRoZSBidWlsZAorCisgICAgICAgIHNlbGYubW9kZWwuc2V0IChpdGVyLAorICAgICAgICAgICAgQnVpbGRNYW5hZ2VyTW9kZWwuQ09MX0lERU5ULCByZXN1bHQuaWRlbnRpZmllciwKKyAgICAgICAgICAgIEJ1aWxkTWFuYWdlck1vZGVsLkNPTF9ERVNDLCByZXN1bHQuY29uZi5pbWFnZSwKKyAgICAgICAgICAgIEJ1aWxkTWFuYWdlck1vZGVsLkNPTF9NQUNISU5FLCByZXN1bHQuY29uZi5tYWNoaW5lLAorICAgICAgICAgICAgQnVpbGRNYW5hZ2VyTW9kZWwuQ09MX0RJU1RSTywgcmVzdWx0LmNvbmYuZGlzdHJvLAorICAgICAgICAgICAgQnVpbGRNYW5hZ2VyTW9kZWwuQ09MX0JVSUxEX1JFU1VMVCwgcmVzdWx0LAorICAgICAgICAgICAgQnVpbGRNYW5hZ2VyTW9kZWwuQ09MX0RBVEUsIGRhdGUsCisgICAgICAgICAgICBCdWlsZE1hbmFnZXJNb2RlbC5DT0xfU1RBVEUsIHJlc3VsdC5zdGF0ZSkKKworICAgICAgICAjIEFuZCB0aGVuIHdlIHVzZSB0aGUgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSBhcyB0aGUgY2hpbGRyZW4gZm9yIHRoZQorICAgICAgICAjIHRvcCBsZXZlbCBpdGVyLgorICAgICAgICBmb3IgZmlsZSBpbiByZXN1bHQuZmlsZXM6CisgICAgICAgICAgICBzZWxmLm1vZGVsLmFwcGVuZCAoaXRlciwgKE5vbmUsIGZpbGVbMF0sIE5vbmUsIE5vbmUsIE5vbmUsIGRhdGUsIC0xKSkKKworICAgICMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXMgYW4gaWRsZSBieSB0aGUgQnVpbGRNYW5hZ2VyUG9wdWxhdGVyVGhyZWFkCisgICAgZGVmIGFkZF9idWlsZF9yZXN1bHQgKHNlbGYsIHJlc3VsdCk6CisgICAgICAgIGd0ay5nZGsudGhyZWFkc19lbnRlcigpCisgICAgICAgIHNlbGYua25vd25fYnVpbGRzICs9IFtyZXN1bHRdCisKKyAgICAgICAgc2VsZi51cGRhdGVfYnVpbGRfcmVzdWx0IChyZXN1bHQsIHNlbGYubW9kZWwuYXBwZW5kIChOb25lKSkKKworICAgICAgICBndGsuZ2RrLnRocmVhZHNfbGVhdmUoKQorCisgICAgZGVmIG5vdGlmeV9idWlsZF9maW5pc2hlZCAoc2VsZik6CisgICAgICAgICMgVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2suIElmIHdlIGhhdmUgYSBydW5uaW5nIGJ1aWxkIHJ1bm5pbmcgdGhlbiB3ZQorICAgICAgICAjIHdpbGwgaGF2ZSBhIHJvdyBpbiB0aGUgbW9kZWwgaW4gU1RBVEVfT05HT0lORy4gRmluZCBpdCBhbmQgbWFrZSBpdAorICAgICAgICAjIGFzIGlmIGl0IHdhcyBhIHByb3BlciBoaXN0b3JpYyBidWlsZCAod2VsbCwgaXQgaXMgY29tcGxldGVkIG5vdy4uLi4pCisKKyAgICAgICAgIyBXZSBuZWVkIHRvIHVzZSB0aGUgaXRlcnMgaGVyZSByYXRoZXIgdGhhbiB0aGUgUHl0aG9uIGl0ZXJhdG9yCisgICAgICAgICMgaW50ZXJmYWNlIHRvIHRoZSBtb2RlbCBzaW5jZSB3ZSBuZWVkIHRvIHBhc3MgaXQgaW50bworICAgICAgICAjIHVwZGF0ZV9idWlsZF9yZXN1bHQKKworICAgICAgICBpdGVyID0gc2VsZi5tb2RlbC5nZXRfaXRlcl9maXJzdCgpCisKKyAgICAgICAgd2hpbGUgKGl0ZXIpOgorICAgICAgICAgICAgKGlkZW50LCBzdGF0ZSkgPSBzZWxmLm1vZGVsLmdldChpdGVyLAorICAgICAgICAgICAgICAgIEJ1aWxkTWFuYWdlck1vZGVsLkNPTF9JREVOVCwKKyAgICAgICAgICAgICAgICBCdWlsZE1hbmFnZXJNb2RlbC5DT0xfU1RBVEUpCisKKyAgICAgICAgICAgIGlmIHN0YXRlID09IEJ1aWxkUmVzdWx0LlNUQVRFX09OR09JTkc6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gQnVpbGRSZXN1bHQgKHNlbGYucmVzdWx0c19kaXJlY3RvcnksIGlkZW50KQorICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlX2J1aWxkX3Jlc3VsdCAocmVzdWx0LCBpdGVyKQorICAgICAgICAgICAgaXRlciA9IHNlbGYubW9kZWwuaXRlcl9uZXh0KGl0ZXIpCisKKyAgICBkZWYgbm90aWZ5X2J1aWxkX3N1Y2NlZWRlZCAoc2VsZik6CisgICAgICAgICMgV3JpdGUgdGhlICJjb21wbGV0ZSIgZmlsZSBzbyB0aGF0IHdoZW4gd2UgY3JlYXRlIHRoZSBCdWlsZFJlc3VsdAorICAgICAgICAjIG9iamVjdCB3ZSBwdXQgaW50byB0aGUgbW9kZWwKKworICAgICAgICBjb21wbGV0ZV9maWxlX3BhdGggPSBvcy5wYXRoLmpvaW4gKHNlbGYuY3VyX2J1aWxkX2RpcmVjdG9yeSwgImNvbXBsZXRlIikKKyAgICAgICAgZiA9IGZpbGUgKGNvbXBsZXRlX2ZpbGVfcGF0aCwgInciKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgc2VsZi5ub3RpZnlfYnVpbGRfZmluaXNoZWQoKQorCisgICAgZGVmIG5vdGlmeV9idWlsZF9mYWlsZWQgKHNlbGYpOgorICAgICAgICAjIFdpdGhvdXQgYSAiY29tcGxldGUiIGZpbGUgdGhlbiB0aGlzIHdpbGwgbWFyayB0aGUgYnVpbGQgYXMgZmFpbGVkOgorICAgICAgICBzZWxmLm5vdGlmeV9idWlsZF9maW5pc2hlZCgpCisKKyAgICAjIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFzIGFuIGlkbGUKKyAgICBkZWYgZW1pdF9wb3B1bGF0aW9uX2ZpbmlzaGVkX3NpZ25hbCAoc2VsZik6CisgICAgICAgIGd0ay5nZGsudGhyZWFkc19lbnRlcigpCisgICAgICAgIHNlbGYuZW1pdCAoInBvcHVsYXRpb24tZmluaXNoZWQiKQorICAgICAgICBndGsuZ2RrLnRocmVhZHNfbGVhdmUoKQorCisgICAgY2xhc3MgQnVpbGRNYW5hZ2VyUG9wdWxhdGVyVGhyZWFkICh0aHJlYWRpbmcuVGhyZWFkKToKKyAgICAgICAgZGVmIF9faW5pdF9fIChzZWxmLCBtYW5hZ2VyLCBkaXJlY3RvcnkpOgorICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyAoc2VsZikKKyAgICAgICAgICAgIHNlbGYubWFuYWdlciA9IG1hbmFnZXIKKyAgICAgICAgICAgIHNlbGYuZGlyZWN0b3J5ID0gZGlyZWN0b3J5CisKKyAgICAgICAgZGVmIHJ1biAoc2VsZik6CisgICAgICAgICAgICAjIEZvciBlYWNoIG9mIHRoZSAiYnVpbGQtPC4uLj4iIGRpcmVjdG9yaWVzIC4uCisKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzIChzZWxmLmRpcmVjdG9yeSk6CisgICAgICAgICAgICAgICAgZm9yIGRpcmVjdG9yeSBpbiBvcy5saXN0ZGlyIChzZWxmLmRpcmVjdG9yeSk6CisKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRpcmVjdG9yeS5zdGFydHN3aXRoICgiYnVpbGQtIik6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkX3Jlc3VsdCA9IEJ1aWxkUmVzdWx0IChzZWxmLmRpcmVjdG9yeSwgZGlyZWN0b3J5KQorICAgICAgICAgICAgICAgICAgICBzZWxmLm1hbmFnZXIuYWRkX2J1aWxkX3Jlc3VsdCAoYnVpbGRfcmVzdWx0KQorCisgICAgICAgICAgICBnb2JqZWN0LmlkbGVfYWRkIChCdWlsZE1hbmFnZXIuZW1pdF9wb3B1bGF0aW9uX2ZpbmlzaGVkX3NpZ25hbCwKKyAgICAgICAgICAgICAgICBzZWxmLm1hbmFnZXIpCisKKyAgICBkZWYgX19pbml0X18gKHNlbGYsIHNlcnZlciwgcmVzdWx0c19kaXJlY3RvcnkpOgorICAgICAgICBnb2JqZWN0LkdPYmplY3QuX19pbml0X18gKHNlbGYpCisKKyAgICAgICAgIyBUaGUgYnVpbGRzIHRoYXQgd2UndmUgZm91bmQgZnJvbSB3YWxraW5nIHRoZSByZXN1bHQgZGlyZWN0b3J5CisgICAgICAgIHNlbGYua25vd25fYnVpbGRzID0gW10KKworICAgICAgICAjIFNhdmUgb3V0IHRoZSBiaXRiYWtlIHNlcnZlciwgd2UgbmVlZCB0aGlzIGZvciBpc3N1aW5nIGNvbW1hbmRzIHRvCisgICAgICAgICMgdGhlIGNvb2tlcjoKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIKKworICAgICAgICAjIFRoZSBUcmVlU3RvcmUgdGhhdCB3ZSB1c2UKKyAgICAgICAgc2VsZi5tb2RlbCA9IEJ1aWxkTWFuYWdlck1vZGVsICgpCisKKyAgICAgICAgIyBUaGUgcmVzdWx0cyBkaXJlY3RvcnkgaXMgd2hlcmUgd2UgY3JlYXRlIChhbmQgbG9vayBmb3IpIHRoZQorICAgICAgICAjIGJ1aWxkLTx4eXo+LTxuPiBkaXJlY3Rvcmllcy4gV2UgbmVlZCB0byBwb3B1bGF0ZSBvdXJzZWx2ZXMgZnJvbQorICAgICAgICAjIGRpcmVjdG9yeQorICAgICAgICBzZWxmLnJlc3VsdHNfZGlyZWN0b3J5ID0gcmVzdWx0c19kaXJlY3RvcnkKKyAgICAgICAgc2VsZi5wb3B1bGF0ZV9mcm9tX2RpcmVjdG9yeSAoc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSkKKworICAgIGRlZiBwb3B1bGF0ZV9mcm9tX2RpcmVjdG9yeSAoc2VsZiwgZGlyZWN0b3J5KToKKyAgICAgICAgdGhyZWFkID0gQnVpbGRNYW5hZ2VyLkJ1aWxkTWFuYWdlclBvcHVsYXRlclRocmVhZCAoc2VsZiwgZGlyZWN0b3J5KQorICAgICAgICB0aHJlYWQuc3RhcnQoKQorCisgICAgIyBDb21lIHVwIHdpdGggdGhlIG5hbWUgZm9yIHRoZSBuZXh0IGJ1aWxkIGlkZW50IGJ5IGNvbWJpbmluZyAiYnVpbGQtIgorICAgICMgd2l0aCB0aGUgZGF0ZSBmb3JtYXR0ZWQgYXMgeXl5eW1tZGQgYW5kIHRoZW4gYW4gb3JkaW5hbC4gV2UgZG8gdGhpcyBieQorICAgICMgYW4gb3B0aW1pc3RpYyBhbGdvcml0aG0gaW5jcmVtZW50aW5nIHRoZSBvcmRpbmFsIGlmIHdlIGZpbmQgdGhhdCBpdAorICAgICMgYWxyZWFkeSBleGlzdHMuCisgICAgZGVmIGdldF9uZXh0X2J1aWxkX2lkZW50IChzZWxmKToKKyAgICAgICAgdG9kYXkgPSBkYXRldGltZS5kYXRlLnRvZGF5ICgpCisgICAgICAgIGRhdGVzdHIgPSBzdHIgKHRvZGF5LnllYXIpICsgc3RyICh0b2RheS5tb250aCkgKyBzdHIgKHRvZGF5LmRheSkKKworICAgICAgICByZXZpc2lvbiA9IDAKKyAgICAgICAgdGVzdF9uYW1lID0gImJ1aWxkLSVzLSVkIiAlIChkYXRlc3RyLCByZXZpc2lvbikKKyAgICAgICAgdGVzdF9wYXRoID0gb3MucGF0aC5qb2luIChzZWxmLnJlc3VsdHNfZGlyZWN0b3J5LCB0ZXN0X25hbWUpCisKKyAgICAgICAgd2hpbGUgKG9zLnBhdGguZXhpc3RzICh0ZXN0X3BhdGgpKToKKyAgICAgICAgICAgIHJldmlzaW9uICs9IDEKKyAgICAgICAgICAgIHRlc3RfbmFtZSA9ICJidWlsZC0lcy0lZCIgJSAoZGF0ZXN0ciwgcmV2aXNpb24pCisgICAgICAgICAgICB0ZXN0X3BhdGggPSBvcy5wYXRoLmpvaW4gKHNlbGYucmVzdWx0c19kaXJlY3RvcnksIHRlc3RfbmFtZSkKKworICAgICAgICByZXR1cm4gdGVzdF9uYW1lCisKKyAgICAjIFRha2UgYSBCdWlsZENvbmZpZ3VyYXRpb24gYW5kIHRoZW4gdHJ5IGFuZCBidWlsZCBpdCBiYXNlZCBvbiB0aGUKKyAgICAjIHBhcmFtZXRlcnMgb2YgdGhhdCBjb25maWd1cmF0aW9uLiBTCisgICAgZGVmIGRvX2J1aWxkIChzZWxmLCBjb25mKToKKyAgICAgICAgc2VydmVyID0gc2VsZi5zZXJ2ZXIKKworICAgICAgICAjIFdvcmsgb3V0IHRoZSBidWlsZCBkaXJlY3RvcnkuIE5vdGUgd2UgYWN0dWFsbHkgY3JlYXRlIHRoZQorICAgICAgICAjIGRpcmVjdG9yaWVzIGhlcmUgc2luY2Ugd2UgbmVlZCB0byB3cml0ZSB0aGUgIi5jb25mIiBmaWxlLiBPdGhlcndpc2UKKyAgICAgICAgIyB3ZSBjb3VsZCBoYXZlIHJlbGllZCBvbiBiaXRiYWtlJ3MgYnVpbGRlciB0aHJlYWQgdG8gYWN0dWFsbHkgbWFrZQorICAgICAgICAjIHRoZSBkaXJlY3RvcmllcyBhcyBpdCBwcm9jZWVkcyB3aXRoIHRoZSBidWlsZC4KKyAgICAgICAgaWRlbnQgPSBzZWxmLmdldF9uZXh0X2J1aWxkX2lkZW50ICgpCisgICAgICAgIGJ1aWxkX2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbiAoc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSwKKyAgICAgICAgICAgIGlkZW50KQorICAgICAgICBzZWxmLmN1cl9idWlsZF9kaXJlY3RvcnkgPSBidWlsZF9kaXJlY3RvcnkKKyAgICAgICAgb3MubWFrZWRpcnMgKGJ1aWxkX2RpcmVjdG9yeSkKKworICAgICAgICBjb25mZmlsZSA9IG9zLnBhdGguam9pbiAoYnVpbGRfZGlyZWN0b3J5LCAiLmNvbmYiKQorICAgICAgICBjb25mLndyaXRlX3RvX2ZpbGUgKGNvbmZmaWxlKQorCisgICAgICAgICMgQWRkIGEgcm93IHRvIHRoZSBtb2RlbCByZXByZXNlbnRpbmcgdGhpcyBvbmdvaW5nIGJ1aWxkLiBJdCdzIGtpbmRhIGEKKyAgICAgICAgIyBmYWtlIGVudHJ5LiBJZiB0aGlzIGJ1aWxkIGNvbXBsZXRlcyBvciBmYWlscyB0aGVuIHRoaXMgZ2V0cyB1cGRhdGVkCisgICAgICAgICMgd2l0aCB0aGUgcmVhbCBzdHVmZiBsaWtlIHRoZSBoaXN0b3JpYyBidWlsZHMKKyAgICAgICAgZGF0ZSA9IGxvbmcgKHRpbWUudGltZSgpKQorICAgICAgICBzZWxmLm1vZGVsLmFwcGVuZCAoTm9uZSwgKGlkZW50LCBjb25mLmltYWdlLCBjb25mLm1hY2hpbmUsIGNvbmYuZGlzdHJvLAorICAgICAgICAgICAgTm9uZSwgZGF0ZSwgQnVpbGRSZXN1bHQuU1RBVEVfT05HT0lORykpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlcnZlci5ydW5Db21tYW5kKFsic2V0VmFyaWFibGUiLCAiQlVJTERfSU1BR0VTX0ZST01fRkVFRFMiLCAxXSkKKyAgICAgICAgICAgIHNlcnZlci5ydW5Db21tYW5kKFsic2V0VmFyaWFibGUiLCAiTUFDSElORSIsIGNvbmYubWFjaGluZV0pCisgICAgICAgICAgICBzZXJ2ZXIucnVuQ29tbWFuZChbInNldFZhcmlhYmxlIiwgIkRJU1RSTyIsIGNvbmYuZGlzdHJvXSkKKyAgICAgICAgICAgIHNlcnZlci5ydW5Db21tYW5kKFsic2V0VmFyaWFibGUiLCAiUEFDS0FHRV9DTEFTU0VTIiwgInBhY2thZ2VfaXBrIl0pCisgICAgICAgICAgICBzZXJ2ZXIucnVuQ29tbWFuZChbInNldFZhcmlhYmxlIiwgIkJCRklMRVMiLCBcCisgICAgICAgICAgICAgICIiIiR7T0VST09UfS9tZXRhL3BhY2thZ2VzLyovKi5iYiAke09FUk9PVH0vbWV0YS1tb2JsaW4vcGFja2FnZXMvKi8qLmJiIiIiXSkKKyAgICAgICAgICAgIHNlcnZlci5ydW5Db21tYW5kKFsic2V0VmFyaWFibGUiLCAiVE1QRElSIiwgIiR7T0VST09UfS9idWlsZC90bXAiXSkKKyAgICAgICAgICAgIHNlcnZlci5ydW5Db21tYW5kKFsic2V0VmFyaWFibGUiLCAiSVBLX0ZFRURfVVJJUyIsIFwKKyAgICAgICAgICAgICAgICAiICIuam9pbihjb25mLmdldF9yZXBvcygpKV0pCisgICAgICAgICAgICBzZXJ2ZXIucnVuQ29tbWFuZChbInNldFZhcmlhYmxlIiwgIkRFUExPWV9ESVJfSU1BR0UiLAorICAgICAgICAgICAgICAgIGJ1aWxkX2RpcmVjdG9yeV0pCisgICAgICAgICAgICBzZXJ2ZXIucnVuQ29tbWFuZChbImJ1aWxkVGFyZ2V0cyIsIFtjb25mLmltYWdlXSwgInJvb3RmcyJdKQorCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHByaW50KGUpCisKK2NsYXNzIEJ1aWxkTWFuYWdlclRyZWVWaWV3IChndGsuVHJlZVZpZXcpOgorICAgICIiIiBUaGUgdHJlZSB2aWV3IGZvciB0aGUgYnVpbGQgbWFuYWdlci4gVGhpcyBzaG93cyB0aGUgaGlzdG9yaWMgYnVpbGRzCisgICAgYW5kIHNvIGZvcnRoLiAiIiIKKworICAgICMgV2UgdXNlIHRoaXMgZnVuY3Rpb24gdG8gY29udHJvbCB3aGF0IGdvZXMgaW4gdGhlIGNlbGwgc2luY2Ugd2Ugc3RvcmUKKyAgICAjIHRoZSBkYXRlIGluIHRoZSBtb2RlbCBhcyBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCAoZm9yIHNvcnRpbmcpIGFuZCBzbyB3ZQorICAgICMgbmVlZCB0byBtYWtlIGl0IGh1bWFuIHJlYWRhYmxlLgorICAgIGRlZiBkYXRlX2Zvcm1hdF9jdXN0b21fY2VsbF9kYXRhX2Z1bmMgKHNlbGYsIGNvbCwgY2VsbCwgbW9kZWwsIGl0ZXIpOgorICAgICAgICBkYXRlID0gbW9kZWwuZ2V0IChpdGVyLCBCdWlsZE1hbmFnZXJNb2RlbC5DT0xfREFURSlbMF0KKyAgICAgICAgZGF0ZXN0ciA9IHRpbWUuc3RyZnRpbWUoIiVBICVkICVCICVZIiwgdGltZS5sb2NhbHRpbWUoZGF0ZSkpCisgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5ICgidGV4dCIsIGRhdGVzdHIpCisKKyAgICAjIFRoaXMgZm9ybWF0IGZ1bmN0aW9uIGNvbnRyb2xzIHdoYXQgZ29lcyBpbiB0aGUgY2VsbC4gV2UgdXNlIHRoaXMgdG8gbWFwCisgICAgIyB0aGUgaW50ZWdlciBzdGF0ZSB0byBhIHN0cmluZyBhbmQgYWxzbyB0byBjb2xvdXJpc2UgdGhlIHRleHQKKyAgICBkZWYgc3RhdGVfZm9ybWF0X2N1c3RvbV9jZWxsX2RhdGFfZnVuIChzZWxmLCBjb2wsIGNlbGwsIG1vZGVsLCBpdGVyKToKKyAgICAgICAgc3RhdGUgPSBtb2RlbC5nZXQgKGl0ZXIsIEJ1aWxkTWFuYWdlck1vZGVsLkNPTF9TVEFURSlbMF0KKworICAgICAgICBpZiAoc3RhdGUgPT0gQnVpbGRSZXN1bHQuU1RBVEVfT05HT0lORyk6CisgICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSAoInRleHQiLCAiQWN0aXZlIikKKyAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5ICgiZm9yZWdyb3VuZCIsICIjMDAwMDAwIikKKyAgICAgICAgZWxpZiAoc3RhdGUgPT0gQnVpbGRSZXN1bHQuU1RBVEVfRkFJTEVEKToKKyAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5ICgidGV4dCIsICJGYWlsZWQiKQorICAgICAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkgKCJmb3JlZ3JvdW5kIiwgIiNmZjAwMDAiKQorICAgICAgICBlbGlmIChzdGF0ZSA9PSBCdWlsZFJlc3VsdC5TVEFURV9DT01QTEVURSk6CisgICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSAoInRleHQiLCAiQ29tcGxldGUiKQorICAgICAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkgKCJmb3JlZ3JvdW5kIiwgIiMwMGZmMDAiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkgKCJ0ZXh0IiwgIiIpCisKKyAgICBkZWYgX19pbml0X18gKHNlbGYpOgorICAgICAgICBndGsuVHJlZVZpZXcuX19pbml0X18oc2VsZikKKworICAgICAgICAjIE1pc2MgZGVzY3JpcHRpb255IHRoaW5nCisgICAgICAgIHJlbmRlcmVyID0gZ3RrLkNlbGxSZW5kZXJlclRleHQgKCkKKyAgICAgICAgY29sID0gZ3RrLlRyZWVWaWV3Q29sdW1uIChOb25lLCByZW5kZXJlciwKKyAgICAgICAgICAgIHRleHQ9QnVpbGRNYW5hZ2VyTW9kZWwuQ09MX0RFU0MpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbHVtbiAoY29sKQorCisgICAgICAgICMgTWFjaGluZQorICAgICAgICByZW5kZXJlciA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0ICgpCisgICAgICAgIGNvbCA9IGd0ay5UcmVlVmlld0NvbHVtbiAoIk1hY2hpbmUiLCByZW5kZXJlciwKKyAgICAgICAgICAgIHRleHQ9QnVpbGRNYW5hZ2VyTW9kZWwuQ09MX01BQ0hJTkUpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbHVtbiAoY29sKQorCisgICAgICAgICMgZGlzdHJvCisgICAgICAgIHJlbmRlcmVyID0gZ3RrLkNlbGxSZW5kZXJlclRleHQgKCkKKyAgICAgICAgY29sID0gZ3RrLlRyZWVWaWV3Q29sdW1uICgiRGlzdHJpYnV0aW9uIiwgcmVuZGVyZXIsCisgICAgICAgICAgICB0ZXh0PUJ1aWxkTWFuYWdlck1vZGVsLkNPTF9ESVNUUk8pCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbHVtbiAoY29sKQorCisgICAgICAgICMgZGF0ZSAodXNpbmcgYSBjdXN0b20gZnVuY3Rpb24gZm9yIGZvcm1hdHRpbmcgdGhlIGNlbGwgY29udGVudHMgaXQKKyAgICAgICAgIyB0YWtlcyBlcG9jaCAtPiBodW1hbiByZWFkYWJsZSBzdHJpbmcpCisgICAgICAgIHJlbmRlcmVyID0gZ3RrLkNlbGxSZW5kZXJlclRleHQgKCkKKyAgICAgICAgY29sID0gZ3RrLlRyZWVWaWV3Q29sdW1uICgiRGF0ZSIsIHJlbmRlcmVyLAorICAgICAgICAgICAgdGV4dD1CdWlsZE1hbmFnZXJNb2RlbC5DT0xfREFURSkKKyAgICAgICAgc2VsZi5hcHBlbmRfY29sdW1uIChjb2wpCisgICAgICAgIGNvbC5zZXRfY2VsbF9kYXRhX2Z1bmMgKHJlbmRlcmVyLAorICAgICAgICAgICAgc2VsZi5kYXRlX2Zvcm1hdF9jdXN0b21fY2VsbF9kYXRhX2Z1bmMpCisKKyAgICAgICAgIyBGb3Igc3RhdHVzLgorICAgICAgICByZW5kZXJlciA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0ICgpCisgICAgICAgIGNvbCA9IGd0ay5UcmVlVmlld0NvbHVtbiAoIlN0YXR1cyIsIHJlbmRlcmVyLAorICAgICAgICAgICAgdGV4dCA9IEJ1aWxkTWFuYWdlck1vZGVsLkNPTF9TVEFURSkKKyAgICAgICAgc2VsZi5hcHBlbmRfY29sdW1uIChjb2wpCisgICAgICAgIGNvbC5zZXRfY2VsbF9kYXRhX2Z1bmMgKHJlbmRlcmVyLAorICAgICAgICAgICAgc2VsZi5zdGF0ZV9mb3JtYXRfY3VzdG9tX2NlbGxfZGF0YV9mdW4pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2FkdmFuY2Vkc2V0dGluZ3NkaWFsb2cucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvYWR2YW5jZWRzZXR0aW5nc2RpYWxvZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGIzNTUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2FkdmFuY2Vkc2V0dGluZ3NkaWFsb2cucHkKQEAgLTAsMCArMSwzNDEgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEyICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgSm9zaHVhIExvY2sgPGpvc2hAbGludXguaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKK2ltcG9ydCBoYXNobGliCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IEhvYkluZm9CdXR0b24sIEhvYkJ1dHRvbgorZnJvbSBiYi51aS5jcnVtYnMucHJvZ3Jlc3NiYXIgaW1wb3J0IEhvYlByb2dyZXNzQmFyCitmcm9tIGJiLnVpLmNydW1icy5oaWcuc2V0dGluZ3N1aWhlbHBlciBpbXBvcnQgU2V0dGluZ3NVSUhlbHBlcgorZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic2RpYWxvZyBpbXBvcnQgQ3J1bWJzRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzbWVzc2FnZWRpYWxvZyBpbXBvcnQgQ3J1bWJzTWVzc2FnZURpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLnByb3h5ZGV0YWlsc2RpYWxvZyBpbXBvcnQgUHJveHlEZXRhaWxzRGlhbG9nCisKKyIiIgorVGhlIGZvbGxvd2luZyBhcmUgY29udmVuaWVuY2UgY2xhc3NlcyBmb3IgaW1wbGVtZW50aW5nIEdOT01FIEhJRyBjb21wbGlhbnQKK0JpdEJha2UgR1VJJ3MKK0luIHN1bW1hcnk6IHNwYWNpbmcgPSAxMnB4LCBib3JkZXItd2lkdGggPSA2cHgKKyIiIgorCitjbGFzcyBBZHZhbmNlZFNldHRpbmdzRGlhbG9nIChDcnVtYnNEaWFsb2csIFNldHRpbmdzVUlIZWxwZXIpOgorICAgIAorICAgIGRlZiBkZXRhaWxzX2NiKHNlbGYsIGJ1dHRvbiwgcGFyZW50LCBwcm90b2NvbCk6CisgICAgICAgIGRpYWxvZyA9IFByb3h5RGV0YWlsc0RpYWxvZyh0aXRsZSA9IHByb3RvY29sLnVwcGVyKCkgKyAiIFByb3h5IERldGFpbHMiLAorICAgICAgICAgICAgdXNlciA9IHNlbGYuY29uZmlndXJhdGlvbi5wcm94aWVzW3Byb3RvY29sXVsxXSwKKyAgICAgICAgICAgIHBhc3N3ZCA9IHNlbGYuY29uZmlndXJhdGlvbi5wcm94aWVzW3Byb3RvY29sXVsyXSwKKyAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudCwKKyAgICAgICAgICAgIGZsYWdzID0gZ3RrLkRJQUxPR19NT0RBTAorICAgICAgICAgICAgICAgICAgICB8IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVAorICAgICAgICAgICAgICAgICAgICB8IGd0ay5ESUFMT0dfTk9fU0VQQVJBVE9SKQorICAgICAgICBkaWFsb2cuYWRkX2J1dHRvbihndGsuU1RPQ0tfQ0xPU0UsIGd0ay5SRVNQT05TRV9PSykKKyAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgaWYgcmVzcG9uc2UgPT0gZ3RrLlJFU1BPTlNFX09LOgorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnByb3hpZXNbcHJvdG9jb2xdWzFdID0gZGlhbG9nLnVzZXIKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5wcm94aWVzW3Byb3RvY29sXVsyXSA9IGRpYWxvZy5wYXNzd2QKKyAgICAgICAgICAgIHNlbGYucmVmcmVzaF9wcm94eV9jb21wb25lbnRzKCkKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgZGVmIHNldF9zYXZlX2J1dHRvbihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLnNhdmVfYnV0dG9uID0gYnV0dG9uCisKKyAgICBkZWYgcm9vdGZzX2NvbWJvX2NoYW5nZWRfY2Ioc2VsZiwgcm9vdGZzX2NvbWJvLCBhbGxfcGFja2FnZV9mb3JtYXQsIGNoZWNrX2hib3gpOgorICAgICAgICBjb21ib19pdGVtID0gc2VsZi5yb290ZnNfY29tYm8uZ2V0X2FjdGl2ZV90ZXh0KCkKKyAgICAgICAgbW9kaWZpZWQgPSBGYWxzZQorICAgICAgICBmb3IgY2hpbGQgaW4gY2hlY2tfaGJveC5nZXRfY2hpbGRyZW4oKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY2hpbGQsIGd0ay5DaGVja0J1dHRvbik6CisgICAgICAgICAgICAgICAgY2hlY2tfaGJveC5yZW1vdmUoY2hpbGQpCisgICAgICAgICAgICAgICAgbW9kaWZpZWQgPSBUcnVlCisgICAgICAgIGZvciBmb3JtYXQgaW4gYWxsX3BhY2thZ2VfZm9ybWF0OgorICAgICAgICAgICAgaWYgZm9ybWF0ICE9IGNvbWJvX2l0ZW06CisgICAgICAgICAgICAgICAgY2hlY2tfYnV0dG9uID0gZ3RrLkNoZWNrQnV0dG9uKGZvcm1hdCkKKyAgICAgICAgICAgICAgICBjaGVja19oYm94LnBhY2tfc3RhcnQoY2hlY2tfYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgICAgICAgICAgbW9kaWZpZWQgPSBUcnVlCisgICAgICAgIGlmIG1vZGlmaWVkOgorICAgICAgICAgICAgY2hlY2tfaGJveC5yZW1vdmUoc2VsZi5wa2dmbXRfaW5mbykKKyAgICAgICAgICAgIGNoZWNrX2hib3gucGFja19zdGFydChzZWxmLnBrZ2ZtdF9pbmZvLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGNoZWNrX2hib3guc2hvd19hbGwoKQorCisgICAgZGVmIGdlbl9wa2dmbXRfd2lkZ2V0KHNlbGYsIGN1cnJfcGFja2FnZV9mb3JtYXQsIGFsbF9wYWNrYWdlX2Zvcm1hdCwgdG9vbHRpcF9jb21ibz0iIiwgdG9vbHRpcF9leHRyYT0iIik6CisgICAgICAgIHBrZ2ZtdF92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpCisKKyAgICAgICAgbGFiZWwgPSBzZWxmLmdlbl9sYWJlbF93aWRnZXQoIlJvb3QgZmlsZSBzeXN0ZW0gcGFja2FnZSBmb3JtYXQiKQorICAgICAgICBwa2dmbXRfdmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgcm9vdGZzX2Zvcm1hdCA9ICIiCisgICAgICAgIGlmIGN1cnJfcGFja2FnZV9mb3JtYXQ6CisgICAgICAgICAgICByb290ZnNfZm9ybWF0ID0gY3Vycl9wYWNrYWdlX2Zvcm1hdC5zcGxpdCgpWzBdCisKKyAgICAgICAgcm9vdGZzX2Zvcm1hdF93aWRnZXQsIHJvb3Rmc19jb21ibyA9IHNlbGYuZ2VuX2NvbWJvX3dpZGdldChyb290ZnNfZm9ybWF0LCBhbGxfcGFja2FnZV9mb3JtYXQsIHRvb2x0aXBfY29tYm8pCisgICAgICAgIHBrZ2ZtdF92Ym94LnBhY2tfc3RhcnQocm9vdGZzX2Zvcm1hdF93aWRnZXQsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBsYWJlbCA9IHNlbGYuZ2VuX2xhYmVsX3dpZGdldCgiQWRkaXRpb25hbCBwYWNrYWdlIGZvcm1hdHMiKQorICAgICAgICBwa2dmbXRfdmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgY2hlY2tfaGJveCA9IGd0ay5IQm94KEZhbHNlLCAxMikKKyAgICAgICAgcGtnZm10X3Zib3gucGFja19zdGFydChjaGVja19oYm94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGZvciBmb3JtYXQgaW4gYWxsX3BhY2thZ2VfZm9ybWF0OgorICAgICAgICAgICAgaWYgZm9ybWF0ICE9IHJvb3Rmc19mb3JtYXQ6CisgICAgICAgICAgICAgICAgY2hlY2tfYnV0dG9uID0gZ3RrLkNoZWNrQnV0dG9uKGZvcm1hdCkKKyAgICAgICAgICAgICAgICBpc19hY3RpdmUgPSAoZm9ybWF0IGluIGN1cnJfcGFja2FnZV9mb3JtYXQuc3BsaXQoKSkKKyAgICAgICAgICAgICAgICBjaGVja19idXR0b24uc2V0X2FjdGl2ZShpc19hY3RpdmUpCisgICAgICAgICAgICAgICAgY2hlY2tfaGJveC5wYWNrX3N0YXJ0KGNoZWNrX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHNlbGYucGtnZm10X2luZm8gPSBIb2JJbmZvQnV0dG9uKHRvb2x0aXBfZXh0cmEsIHNlbGYpCisgICAgICAgIGNoZWNrX2hib3gucGFja19zdGFydChzZWxmLnBrZ2ZtdF9pbmZvLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgcm9vdGZzX2NvbWJvLmNvbm5lY3QoImNoYW5nZWQiLCBzZWxmLnJvb3Rmc19jb21ib19jaGFuZ2VkX2NiLCBhbGxfcGFja2FnZV9mb3JtYXQsIGNoZWNrX2hib3gpCisKKyAgICAgICAgcGtnZm10X3Zib3guc2hvd19hbGwoKQorCisgICAgICAgIHJldHVybiBwa2dmbXRfdmJveCwgcm9vdGZzX2NvbWJvLCBjaGVja19oYm94CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGl0bGUsIGNvbmZpZ3VyYXRpb24sIGFsbF9pbWFnZV90eXBlcywKKyAgICAgICAgICAgIGFsbF9wYWNrYWdlX2Zvcm1hdHMsIGFsbF9kaXN0cm9zLCBhbGxfc2RrX21hY2hpbmVzLAorICAgICAgICAgICAgbWF4X3RocmVhZHMsIHBhcmVudCwgZmxhZ3MsIGJ1dHRvbnM9Tm9uZSk6CisgICAgICAgIHN1cGVyKEFkdmFuY2VkU2V0dGluZ3NEaWFsb2csIHNlbGYpLl9faW5pdF9fKHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zKQorCisgICAgICAgICMgY2xhc3MgbWVtYmVycyBmcm9tIG90aGVyIG9iamVjdHMKKyAgICAgICAgIyBiaXRiYWtlIHNldHRpbmdzIGZyb20gQnVpbGRlci5Db25maWd1cmF0aW9uCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgc2VsZi5pbWFnZV90eXBlcyA9IGFsbF9pbWFnZV90eXBlcworICAgICAgICBzZWxmLmFsbF9wYWNrYWdlX2Zvcm1hdHMgPSBhbGxfcGFja2FnZV9mb3JtYXRzCisgICAgICAgIHNlbGYuYWxsX2Rpc3Ryb3MgPSBhbGxfZGlzdHJvc1s6XQorICAgICAgICBzZWxmLmFsbF9zZGtfbWFjaGluZXMgPSBhbGxfc2RrX21hY2hpbmVzCisgICAgICAgIHNlbGYubWF4X3RocmVhZHMgPSBtYXhfdGhyZWFkcworCisgICAgICAgICMgY2xhc3MgbWVtYmVycyBmb3IgaW50ZXJuYWwgdXNlCisgICAgICAgIHNlbGYuZGlzdHJvX2NvbWJvID0gTm9uZQorICAgICAgICBzZWxmLmRsZGlyX3RleHQgPSBOb25lCisgICAgICAgIHNlbGYuc3N0YXRlZGlyX3RleHQgPSBOb25lCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yX3RleHQgPSBOb25lCisgICAgICAgIHNlbGYuYmJfc3Bpbm5lciA9IE5vbmUKKyAgICAgICAgc2VsZi5wbWFrZV9zcGlubmVyID0gTm9uZQorICAgICAgICBzZWxmLnJvb3Rmc19zaXplX3NwaW5uZXIgPSBOb25lCisgICAgICAgIHNlbGYuZXh0cmFfc2l6ZV9zcGlubmVyID0gTm9uZQorICAgICAgICBzZWxmLmdwbHYzX2NoZWNrYm94ID0gTm9uZQorICAgICAgICBzZWxmLnNka19jaGVja2JveCA9IE5vbmUKKyAgICAgICAgc2VsZi5pbWFnZV90eXBlc19jaGVja2J1dHRvbnMgPSB7fQorCisgICAgICAgIHNlbGYubWQ1ID0gc2VsZi5jb25maWdfbWQ1KCkKKyAgICAgICAgc2VsZi5zZXR0aW5nc19jaGFuZ2VkID0gRmFsc2UKKworICAgICAgICAjIGNyZWF0ZSB2aXN1YWwgZWxlbWVudHMgb24gdGhlIGRpYWxvZworICAgICAgICBzZWxmLnNhdmVfYnV0dG9uID0gTm9uZQorICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorICAgICAgICBzZWxmLmNvbm5lY3QoInJlc3BvbnNlIiwgc2VsZi5yZXNwb25zZV9jYikKKworICAgIGRlZiBfZ2V0X3NvcnRlZF92YWx1ZShzZWxmLCB2YXIpOgorICAgICAgICByZXR1cm4gIiAiLmpvaW4oc29ydGVkKHN0cih2YXIpLnNwbGl0KCkpKSArICJcbiIKKworICAgIGRlZiBjb25maWdfbWQ1KHNlbGYpOgorICAgICAgICBkYXRhID0gIiIKKyAgICAgICAgZGF0YSArPSAoIlBBQ0tBR0VfQ0xBU1NFUzogIiAgICAgICsgc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfcGFja2FnZV9mb3JtYXQgKyAnXG4nKQorICAgICAgICBkYXRhICs9ICgiRElTVFJPOiAiICAgICAgICAgICAgICAgKyBzZWxmLl9nZXRfc29ydGVkX3ZhbHVlKHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX2Rpc3RybykpCisgICAgICAgIGRhdGEgKz0gKCJJTUFHRV9ST09URlNfU0laRTogIiAgICArIHNlbGYuX2dldF9zb3J0ZWRfdmFsdWUoc2VsZi5jb25maWd1cmF0aW9uLmltYWdlX3Jvb3Rmc19zaXplKSkKKyAgICAgICAgZGF0YSArPSAoIklNQUdFX0VYVFJBX1NJWkU6ICIgICAgICsgc2VsZi5fZ2V0X3NvcnRlZF92YWx1ZShzZWxmLmNvbmZpZ3VyYXRpb24uaW1hZ2VfZXh0cmFfc2l6ZSkpCisgICAgICAgIGRhdGEgKz0gKCJJTkNPTVBBVElCTEVfTElDRU5TRTogIiArIHNlbGYuX2dldF9zb3J0ZWRfdmFsdWUoc2VsZi5jb25maWd1cmF0aW9uLmluY29tcGF0X2xpY2Vuc2UpKQorICAgICAgICBkYXRhICs9ICgiU0RLX01BQ0hJTkU6ICIgICAgICAgICAgKyBzZWxmLl9nZXRfc29ydGVkX3ZhbHVlKHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX3Nka19tYWNoaW5lKSkKKyAgICAgICAgZGF0YSArPSAoIlRPT0xDSEFJTl9CVUlMRDogIiAgICAgICsgc2VsZi5fZ2V0X3NvcnRlZF92YWx1ZShzZWxmLmNvbmZpZ3VyYXRpb24udG9vbGNoYWluX2J1aWxkKSkKKyAgICAgICAgZGF0YSArPSAoIklNQUdFX0ZTVFlQRVM6ICIgICAgICAgICsgc2VsZi5fZ2V0X3NvcnRlZF92YWx1ZShzZWxmLmNvbmZpZ3VyYXRpb24uaW1hZ2VfZnN0eXBlcykpCisgICAgICAgIHJldHVybiBoYXNobGliLm1kNShkYXRhKS5oZXhkaWdlc3QoKQorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgIHNlbGYubmIgPSBndGsuTm90ZWJvb2soKQorICAgICAgICBzZWxmLm5iLnNldF9zaG93X3RhYnMoVHJ1ZSkKKyAgICAgICAgc2VsZi5uYi5hcHBlbmRfcGFnZShzZWxmLmNyZWF0ZV9pbWFnZV90eXBlc19wYWdlKCksIGd0ay5MYWJlbCgiSW1hZ2UgdHlwZXMiKSkKKyAgICAgICAgc2VsZi5uYi5hcHBlbmRfcGFnZShzZWxmLmNyZWF0ZV9vdXRwdXRfcGFnZSgpLCBndGsuTGFiZWwoIk91dHB1dCIpKQorICAgICAgICBzZWxmLm5iLnNldF9jdXJyZW50X3BhZ2UoMCkKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi5uYiwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfZW5kKGd0ay5IU2VwYXJhdG9yKCksIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisKKyAgICBkZWYgZ2V0X251bV9jaGVja2VkX2ltYWdlX3R5cGVzKHNlbGYpOgorICAgICAgICB0b3RhbCA9IDAKKyAgICAgICAgZm9yIGIgaW4gc2VsZi5pbWFnZV90eXBlc19jaGVja2J1dHRvbnMudmFsdWVzKCk6CisgICAgICAgICAgICBpZiBiLmdldF9hY3RpdmUoKToKKyAgICAgICAgICAgICAgdG90YWwgPSB0b3RhbCArIDEKKyAgICAgICAgcmV0dXJuIHRvdGFsCisKKyAgICBkZWYgc2V0X3NhdmVfYnV0dG9uX3N0YXRlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnNhdmVfYnV0dG9uOgorICAgICAgICAgICAgc2VsZi5zYXZlX2J1dHRvbi5zZXRfc2Vuc2l0aXZlKHNlbGYuZ2V0X251bV9jaGVja2VkX2ltYWdlX3R5cGVzKCkgPiAwKQorCisgICAgZGVmIGltYWdlX3R5cGVfY2hlY2tidXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLnNldF9zYXZlX2J1dHRvbl9zdGF0ZSgpCisgICAgICAgIGlmIHNlbGYuZ2V0X251bV9jaGVja2VkX2ltYWdlX3R5cGVzKCkgPT0gMDoKKyAgICAgICAgICAgICMgU2hvdyBhbiBlcnJvciBkaWFsb2cKKyAgICAgICAgICAgIGxibCA9ICI8Yj5TZWxlY3QgYW4gaW1hZ2UgdHlwZTwvYj4iCisgICAgICAgICAgICBtc2cgPSAiWW91IG5lZWQgdG8gc2VsZWN0IGF0IGxlYXN0IG9uZSBpbWFnZSB0eXBlLiIKKyAgICAgICAgICAgIGRpYWxvZyA9IENydW1ic01lc3NhZ2VEaWFsb2coc2VsZiwgbGJsLCBndGsuTUVTU0FHRV9XQVJOSU5HLCBtc2cpCisgICAgICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiT0siLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisKKyAgICBkZWYgY3JlYXRlX2ltYWdlX3R5cGVzX3BhZ2Uoc2VsZik6CisgICAgICAgIG1haW5fdmJveCA9IGd0ay5WQm94KEZhbHNlLCAxNikKKyAgICAgICAgbWFpbl92Ym94LnNldF9ib3JkZXJfd2lkdGgoNikKKworICAgICAgICBhZHZhbmNlZF92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpCisgICAgICAgIGFkdmFuY2VkX3Zib3guc2V0X2JvcmRlcl93aWR0aCg2KQorCisgICAgICAgIGRpc3Ryb192Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpICAgICAgICAKKyAgICAgICAgbGFiZWwgPSBzZWxmLmdlbl9sYWJlbF93aWRnZXQoIkRpc3RybzoiKQorICAgICAgICB0b29sdGlwID0gIlNlbGVjdHMgdGhlIFlvY3RvIFByb2plY3QgZGlzdHJpYnV0aW9uIHlvdSB3YW50IgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpID0gc2VsZi5hbGxfZGlzdHJvcy5pbmRleCggImRlZmF1bHRzZXR1cCIgKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIGkgPSAtMQorICAgICAgICBpZiBpICE9IC0xOgorICAgICAgICAgICAgc2VsZi5hbGxfZGlzdHJvc1sgaSBdID0gIkRlZmF1bHQiCisgICAgICAgICAgICBpZiBzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9kaXN0cm8gPT0gImRlZmF1bHRzZXR1cCI6CisgICAgICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfZGlzdHJvID0gIkRlZmF1bHQiCisgICAgICAgIGRpc3Ryb193aWRnZXQsIHNlbGYuZGlzdHJvX2NvbWJvID0gc2VsZi5nZW5fY29tYm9fd2lkZ2V0KHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX2Rpc3Rybywgc2VsZi5hbGxfZGlzdHJvcywiPGI+RGlzdHJvPC9iPiIgKyAiKiIgKyB0b29sdGlwKQorICAgICAgICBkaXN0cm9fdmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGRpc3Ryb192Ym94LnBhY2tfc3RhcnQoZGlzdHJvX3dpZGdldCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBtYWluX3Zib3gucGFja19zdGFydChkaXN0cm9fdmJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisKKyAgICAgICAgcm93cyA9IChsZW4oc2VsZi5pbWFnZV90eXBlcykrMSkvMworICAgICAgICB0YWJsZSA9IGd0ay5UYWJsZShyb3dzICsgMSwgMTAsIFRydWUpCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydCh0YWJsZSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHRvb2x0aXAgPSAiSW1hZ2UgZmlsZSBzeXN0ZW0gdHlwZXMgeW91IHdhbnQuIgorICAgICAgICBpbmZvID0gSG9iSW5mb0J1dHRvbigiPGI+SW1hZ2UgdHlwZXM8L2I+IiArICIqIiArIHRvb2x0aXAsIHNlbGYpCisgICAgICAgIGxhYmVsID0gc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCJJbWFnZSB0eXBlczoiKQorICAgICAgICBhbGlnbiA9IGd0ay5BbGlnbm1lbnQoMCwgMC41LCAwLCAwKQorICAgICAgICB0YWJsZS5hdHRhY2goYWxpZ24sIDAsIDQsIDAsIDEpCisgICAgICAgIGFsaWduLmFkZChsYWJlbCkKKyAgICAgICAgdGFibGUuYXR0YWNoKGluZm8sIDQsIDUsIDAsIDEpCisKKyAgICAgICAgaSA9IDEKKyAgICAgICAgaiA9IDEKKyAgICAgICAgZm9yIGltYWdlX3R5cGUgaW4gc29ydGVkKHNlbGYuaW1hZ2VfdHlwZXMpOgorICAgICAgICAgICAgc2VsZi5pbWFnZV90eXBlc19jaGVja2J1dHRvbnNbaW1hZ2VfdHlwZV0gPSBndGsuQ2hlY2tCdXR0b24oaW1hZ2VfdHlwZSkKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfdHlwZXNfY2hlY2tidXR0b25zW2ltYWdlX3R5cGVdLmNvbm5lY3QoInRvZ2dsZWQiLCBzZWxmLmltYWdlX3R5cGVfY2hlY2tidXR0b25fY2xpY2tlZF9jYikKKyAgICAgICAgICAgIGFydGljbGUgPSAiIgorICAgICAgICAgICAgaWYgaW1hZ2VfdHlwZS5zdGFydHN3aXRoKCgiYSIsICJlIiwgImkiLCAibyIsICJ1IikpOgorICAgICAgICAgICAgICAgIGFydGljbGUgPSAibiIKKyAgICAgICAgICAgIGlmIGltYWdlX3R5cGUgPT0gImxpdmUiOgorICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2VfdHlwZXNfY2hlY2tidXR0b25zW2ltYWdlX3R5cGVdLnNldF90b29sdGlwX3RleHQoIkJ1aWxkIGlzbyBhbmQgaGRkaW1nIGltYWdlcyIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2VfdHlwZXNfY2hlY2tidXR0b25zW2ltYWdlX3R5cGVdLnNldF90b29sdGlwX3RleHQoIkJ1aWxkIGElcyAlcyBpbWFnZSIgJSAoYXJ0aWNsZSwgaW1hZ2VfdHlwZSkpCisgICAgICAgICAgICB0YWJsZS5hdHRhY2goc2VsZi5pbWFnZV90eXBlc19jaGVja2J1dHRvbnNbaW1hZ2VfdHlwZV0sIGogLSAxLCBqICsgMywgaSwgaSArIDEpCisgICAgICAgICAgICBpZiBpbWFnZV90eXBlIGluIHNlbGYuY29uZmlndXJhdGlvbi5pbWFnZV9mc3R5cGVzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgc2VsZi5pbWFnZV90eXBlc19jaGVja2J1dHRvbnNbaW1hZ2VfdHlwZV0uc2V0X2FjdGl2ZShUcnVlKQorICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICBpZiBpID4gcm93czoKKyAgICAgICAgICAgICAgICBpID0gMQorICAgICAgICAgICAgICAgIGogPSBqICsgNAorCisgICAgICAgIG1haW5fdmJveC5wYWNrX3N0YXJ0KGFkdmFuY2VkX3Zib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi5zZXRfc2F2ZV9idXR0b25fc3RhdGUoKQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1haW5fdmJveAorCisgICAgZGVmIGNyZWF0ZV9vdXRwdXRfcGFnZShzZWxmKToKKyAgICAgICAgYWR2YW5jZWRfdmJveCA9IGd0ay5WQm94KEZhbHNlLCA2KQorICAgICAgICBhZHZhbmNlZF92Ym94LnNldF9ib3JkZXJfd2lkdGgoNikKKworICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCc8c3BhbiB3ZWlnaHQ9ImJvbGQiPlBhY2thZ2UgZm9ybWF0PC9zcGFuPicpLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHN1Yl92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydChzdWJfdmJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICB0b29sdGlwX2NvbWJvID0gIlNlbGVjdHMgdGhlIHBhY2thZ2UgZm9ybWF0IHVzZWQgdG8gZ2VuZXJhdGUgcm9vdGZzLiIKKyAgICAgICAgdG9vbHRpcF9leHRyYSA9ICJTZWxlY3RzIGV4dHJhIHBhY2thZ2UgZm9ybWF0cyB0byBidWlsZCIKKyAgICAgICAgcGtnZm10X3dpZGdldCwgc2VsZi5yb290ZnNfY29tYm8sIHNlbGYuY2hlY2tfaGJveCA9IHNlbGYuZ2VuX3BrZ2ZtdF93aWRnZXQoc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfcGFja2FnZV9mb3JtYXQsIHNlbGYuYWxsX3BhY2thZ2VfZm9ybWF0cywiPGI+Um9vdCBmaWxlIHN5c3RlbSBwYWNrYWdlIGZvcm1hdDwvYj4iICsgIioiICsgdG9vbHRpcF9jb21ibywiPGI+QWRkaXRpb25hbCBwYWNrYWdlIGZvcm1hdHM8L2I+IiArICIqIiArIHRvb2x0aXBfZXh0cmEpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQocGtnZm10X3dpZGdldCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydChzZWxmLmdlbl9sYWJlbF93aWRnZXQoJzxzcGFuIHdlaWdodD0iYm9sZCI+SW1hZ2Ugc2l6ZTwvc3Bhbj4nKSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveCA9IGd0ay5WQm94KEZhbHNlLCA2KQorICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc3ViX3Zib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgbGFiZWwgPSBzZWxmLmdlbl9sYWJlbF93aWRnZXQoIkltYWdlIGJhc2ljIHNpemUgKGluIE1CKSIpCisgICAgICAgIHRvb2x0aXAgPSAiRGVmaW5lcyB0aGUgc2l6ZSBmb3IgdGhlIGdlbmVyYXRlZCBpbWFnZS4gVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZGV0ZXJtaW5lcyB0aGUgZmluYWwgc2l6ZSBmb3IgdGhlIGdlbmVyYXRlZCBpbWFnZSB1c2luZyBhbiBhbGdvcml0aG0gdGhhdCB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGluaXRpYWwgZGlzayBzcGFjZSB1c2VkIGZvciB0aGUgZ2VuZXJhdGVkIGltYWdlLCB0aGUgSW1hZ2UgYmFzaWMgc2l6ZSB2YWx1ZSwgYW5kIHRoZSBBZGRpdGlvbmFsIGZyZWUgc3BhY2UgdmFsdWUuXG5cbkZvciBtb3JlIGluZm9ybWF0aW9uLCBjaGVjayB0aGUgPGEgaHJlZj1cImh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzL2N1cnJlbnQvcG9reS1yZWYtbWFudWFsL3Bva3ktcmVmLW1hbnVhbC5odG1sI3Zhci1JTUFHRV9ST09URlNfU0laRVwiPllvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbDwvYT4uIgorICAgICAgICByb290ZnNfc2l6ZV93aWRnZXQsIHNlbGYucm9vdGZzX3NpemVfc3Bpbm5lciA9IHNlbGYuZ2VuX3NwaW5uZXJfd2lkZ2V0KGludChzZWxmLmNvbmZpZ3VyYXRpb24uaW1hZ2Vfcm9vdGZzX3NpemUqMS4wLzEwMjQpLCAwLCA2NTUzNiwiPGI+SW1hZ2UgYmFzaWMgc2l6ZTwvYj4iICsgIioiICsgdG9vbHRpcCkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHJvb3Rmc19zaXplX3dpZGdldCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHN1Yl92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydChzdWJfdmJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBsYWJlbCA9IHNlbGYuZ2VuX2xhYmVsX3dpZGdldCgiQWRkaXRpb25hbCBmcmVlIHNwYWNlIChpbiBNQikiKQorICAgICAgICB0b29sdGlwID0gIlNldHMgZXh0cmEgZnJlZSBkaXNrIHNwYWNlIHRvIGJlIGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQgaW1hZ2UuIFVzZSB0aGlzIHZhcmlhYmxlIHdoZW4geW91IHdhbnQgdG8gZW5zdXJlIHRoYXQgYSBzcGVjaWZpYyBhbW91bnQgb2YgZnJlZSBkaXNrIHNwYWNlIGlzIGF2YWlsYWJsZSBvbiBhIGRldmljZSBhZnRlciBhbiBpbWFnZSBpcyBpbnN0YWxsZWQgYW5kIHJ1bm5pbmcuIgorICAgICAgICBleHRyYV9zaXplX3dpZGdldCwgc2VsZi5leHRyYV9zaXplX3NwaW5uZXIgPSBzZWxmLmdlbl9zcGlubmVyX3dpZGdldChpbnQoc2VsZi5jb25maWd1cmF0aW9uLmltYWdlX2V4dHJhX3NpemUqMS4wLzEwMjQpLCAwLCA2NTUzNiwiPGI+QWRkaXRpb25hbCBmcmVlIHNwYWNlPC9iPiIgKyAiKiIgKyB0b29sdGlwKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQoZXh0cmFfc2l6ZV93aWRnZXQsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCc8c3BhbiB3ZWlnaHQ9ImJvbGQiPkxpY2Vuc2luZzwvc3Bhbj4nKSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzZWxmLmdwbHYzX2NoZWNrYm94ID0gZ3RrLkNoZWNrQnV0dG9uKCJFeGNsdWRlIEdQTHYzIHBhY2thZ2VzIikKKyAgICAgICAgc2VsZi5ncGx2M19jaGVja2JveC5zZXRfdG9vbHRpcF90ZXh0KCJDaGVjayB0aGlzIGJveCB0byBwcmV2ZW50IEdQTHYzIHBhY2thZ2VzIGZyb20gYmVpbmcgaW5jbHVkZWQgaW4geW91ciBpbWFnZSIpCisgICAgICAgIGlmICJHUEx2MyIgaW4gc2VsZi5jb25maWd1cmF0aW9uLmluY29tcGF0X2xpY2Vuc2Uuc3BsaXQoKToKKyAgICAgICAgICAgIHNlbGYuZ3BsdjNfY2hlY2tib3guc2V0X2FjdGl2ZShUcnVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5ncGx2M19jaGVja2JveC5zZXRfYWN0aXZlKEZhbHNlKQorICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc2VsZi5ncGx2M19jaGVja2JveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydChzZWxmLmdlbl9sYWJlbF93aWRnZXQoJzxzcGFuIHdlaWdodD0iYm9sZCI+U0RLPC9zcGFuPicpLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHN1Yl9oYm94ID0gZ3RrLkhCb3goRmFsc2UsIDYpCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydChzdWJfaGJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzZWxmLnNka19jaGVja2JveCA9IGd0ay5DaGVja0J1dHRvbigiUG9wdWxhdGUgU0RLIikKKyAgICAgICAgdG9vbHRpcCA9ICJDaGVjayB0aGlzIGJveCB0byBnZW5lcmF0ZSBhbiBTREsgdGFyYmFsbCB0aGF0IGNvbnNpc3RzIG9mIHRoZSBjcm9zcy10b29sY2hhaW4gYW5kIGEgc3lzcm9vdCB0aGF0IGNvbnRhaW5zIGRldmVsb3BtZW50IHBhY2thZ2VzIGZvciB5b3VyIGltYWdlLiIKKyAgICAgICAgc2VsZi5zZGtfY2hlY2tib3guc2V0X3Rvb2x0aXBfdGV4dCh0b29sdGlwKQorICAgICAgICBzZWxmLnNka19jaGVja2JveC5zZXRfYWN0aXZlKHNlbGYuY29uZmlndXJhdGlvbi50b29sY2hhaW5fYnVpbGQpCisgICAgICAgIHN1Yl9oYm94LnBhY2tfc3RhcnQoc2VsZi5zZGtfY2hlY2tib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICB0b29sdGlwID0gIlNlbGVjdCB0aGUgaG9zdCBwbGF0Zm9ybSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gcnVuIHRoZSB0b29sY2hhaW4gY29udGFpbmVkIGluIHRoZSBTREsgdGFyYmFsbC4iCisgICAgICAgIHNka19tYWNoaW5lX3dpZGdldCwgc2VsZi5zZGtfbWFjaGluZV9jb21ibyA9IHNlbGYuZ2VuX2NvbWJvX3dpZGdldChzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9zZGtfbWFjaGluZSwgc2VsZi5hbGxfc2RrX21hY2hpbmVzLCI8Yj5Qb3B1bGF0ZSBTREs8L2I+IiArICIqIiArIHRvb2x0aXApCisgICAgICAgIHN1Yl9oYm94LnBhY2tfc3RhcnQoc2RrX21hY2hpbmVfd2lkZ2V0LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgcmV0dXJuIGFkdmFuY2VkX3Zib3gKKworICAgIGRlZiByZXNwb25zZV9jYihzZWxmLCBkaWFsb2csIHJlc3BvbnNlX2lkKToKKyAgICAgICAgcGFja2FnZV9mb3JtYXQgPSBbXQorICAgICAgICBwYWNrYWdlX2Zvcm1hdC5hcHBlbmQoc2VsZi5yb290ZnNfY29tYm8uZ2V0X2FjdGl2ZV90ZXh0KCkpCisgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmNoZWNrX2hib3g6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGNoaWxkLCBndGsuQ2hlY2tCdXR0b24pIGFuZCBjaGlsZC5nZXRfYWN0aXZlKCk6CisgICAgICAgICAgICAgICAgcGFja2FnZV9mb3JtYXQuYXBwZW5kKGNoaWxkLmdldF9sYWJlbCgpKQorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9wYWNrYWdlX2Zvcm1hdCA9ICIgIi5qb2luKHBhY2thZ2VfZm9ybWF0KQorCisgICAgICAgIGRpc3RybyA9IHNlbGYuZGlzdHJvX2NvbWJvLmdldF9hY3RpdmVfdGV4dCgpCisgICAgICAgIGlmIGRpc3RybyA9PSAiRGVmYXVsdCI6CisgICAgICAgICAgICBkaXN0cm8gPSAiZGVmYXVsdHNldHVwIgorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9kaXN0cm8gPSBkaXN0cm8KKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmltYWdlX3Jvb3Rmc19zaXplID0gc2VsZi5yb290ZnNfc2l6ZV9zcGlubmVyLmdldF92YWx1ZV9hc19pbnQoKSAqIDEwMjQKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmltYWdlX2V4dHJhX3NpemUgPSBzZWxmLmV4dHJhX3NpemVfc3Bpbm5lci5nZXRfdmFsdWVfYXNfaW50KCkgKiAxMDI0CisKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmltYWdlX2ZzdHlwZXMgPSAiIgorICAgICAgICBmb3IgaW1hZ2VfdHlwZSBpbiBzZWxmLmltYWdlX3R5cGVzOgorICAgICAgICAgICAgaWYgc2VsZi5pbWFnZV90eXBlc19jaGVja2J1dHRvbnNbaW1hZ2VfdHlwZV0uZ2V0X2FjdGl2ZSgpOgorICAgICAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5pbWFnZV9mc3R5cGVzICs9ICgiICIgKyBpbWFnZV90eXBlKQorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uaW1hZ2VfZnN0eXBlcy5zdHJpcCgpCisKKyAgICAgICAgaWYgc2VsZi5ncGx2M19jaGVja2JveC5nZXRfYWN0aXZlKCk6CisgICAgICAgICAgICBpZiAiR1BMdjMiIG5vdCBpbiBzZWxmLmNvbmZpZ3VyYXRpb24uaW5jb21wYXRfbGljZW5zZS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5pbmNvbXBhdF9saWNlbnNlICs9ICIgR1BMdjMiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiAiR1BMdjMiIGluIHNlbGYuY29uZmlndXJhdGlvbi5pbmNvbXBhdF9saWNlbnNlLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmluY29tcGF0X2xpY2Vuc2UgPSBzZWxmLmNvbmZpZ3VyYXRpb24uaW5jb21wYXRfbGljZW5zZS5zcGxpdCgpLnJlbW92ZSgiR1BMdjMiKQorICAgICAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5pbmNvbXBhdF9saWNlbnNlID0gIiAiLmpvaW4oc2VsZi5jb25maWd1cmF0aW9uLmluY29tcGF0X2xpY2Vuc2Ugb3IgW10pCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5pbmNvbXBhdF9saWNlbnNlID0gc2VsZi5jb25maWd1cmF0aW9uLmluY29tcGF0X2xpY2Vuc2Uuc3RyaXAoKQorCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi50b29sY2hhaW5fYnVpbGQgPSBzZWxmLnNka19jaGVja2JveC5nZXRfYWN0aXZlKCkKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfc2RrX21hY2hpbmUgPSBzZWxmLnNka19tYWNoaW5lX2NvbWJvLmdldF9hY3RpdmVfdGV4dCgpCisgICAgICAgIG1kNSA9IHNlbGYuY29uZmlnX21kNSgpCisgICAgICAgIHNlbGYuc2V0dGluZ3NfY2hhbmdlZCA9IChzZWxmLm1kNSAhPSBtZDUpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvY3J1bWJzZGlhbG9nLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2NydW1ic2RpYWxvZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjc5ZjlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2NydW1ic2RpYWxvZy5weQpAQCAtMCwwICsxLDQ0IEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCisKKyIiIgorVGhlIGZvbGxvd2luZyBhcmUgY29udmVuaWVuY2UgY2xhc3NlcyBmb3IgaW1wbGVtZW50aW5nIEdOT01FIEhJRyBjb21wbGlhbnQKK0JpdEJha2UgR1VJJ3MKK0luIHN1bW1hcnk6IHNwYWNpbmcgPSAxMnB4LCBib3JkZXItd2lkdGggPSA2cHgKKyIiIgorCitjbGFzcyBDcnVtYnNEaWFsb2coZ3RrLkRpYWxvZyk6CisgICAgIiIiCisgICAgQSBHTk9NRSBISUcgY29tcGxpYW50IGRpYWxvZyB3aWRnZXQuCisgICAgQWRkIGJ1dHRvbnMgd2l0aCBndGsuRGlhbG9nLmFkZF9idXR0b24gb3IgZ3RrLkRpYWxvZy5hZGRfYnV0dG9ucworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aXRsZT0iIiwgcGFyZW50PU5vbmUsIGZsYWdzPTAsIGJ1dHRvbnM9Tm9uZSk6CisgICAgICAgIHN1cGVyKENydW1ic0RpYWxvZywgc2VsZikuX19pbml0X18odGl0bGUsIHBhcmVudCwgZmxhZ3MsIGJ1dHRvbnMpCisKKyAgICAgICAgc2VsZi5zZXRfcHJvcGVydHkoImhhcy1zZXBhcmF0b3IiLCBGYWxzZSkgIyBub3RlOiBkZXByZWNhdGVkIGluIDIuMjIKKworICAgICAgICBzZWxmLnNldF9ib3JkZXJfd2lkdGgoNikKKyAgICAgICAgc2VsZi52Ym94LnNldF9wcm9wZXJ0eSgic3BhY2luZyIsIDEyKQorICAgICAgICBzZWxmLmFjdGlvbl9hcmVhLnNldF9wcm9wZXJ0eSgic3BhY2luZyIsIDEyKQorICAgICAgICBzZWxmLmFjdGlvbl9hcmVhLnNldF9wcm9wZXJ0eSgiYm9yZGVyLXdpZHRoIiwgNikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9jcnVtYnNtZXNzYWdlZGlhbG9nLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2NydW1ic21lc3NhZ2VkaWFsb2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I5OThlNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9jcnVtYnNtZXNzYWdlZGlhbG9nLnB5CkBAIC0wLDAgKzEsNzAgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEyICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgSm9zaHVhIExvY2sgPGpvc2hAbGludXguaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBnbGliCitpbXBvcnQgZ3RrCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IEhvYkljb25DaGVja2VyCitmcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzZGlhbG9nIGltcG9ydCBDcnVtYnNEaWFsb2cKKworIiIiCitUaGUgZm9sbG93aW5nIGFyZSBjb252ZW5pZW5jZSBjbGFzc2VzIGZvciBpbXBsZW1lbnRpbmcgR05PTUUgSElHIGNvbXBsaWFudAorQml0QmFrZSBHVUkncworSW4gc3VtbWFyeTogc3BhY2luZyA9IDEycHgsIGJvcmRlci13aWR0aCA9IDZweAorIiIiCisKK2NsYXNzIENydW1ic01lc3NhZ2VEaWFsb2coZ3RrLk1lc3NhZ2VEaWFsb2cpOgorICAgICIiIgorICAgIEEgR05PTUUgSElHIGNvbXBsaWFudCBkaWFsb2cgd2lkZ2V0LgorICAgIEFkZCBidXR0b25zIHdpdGggZ3RrLkRpYWxvZy5hZGRfYnV0dG9uIG9yIGd0ay5EaWFsb2cuYWRkX2J1dHRvbnMKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50ID0gTm9uZSwgbGFiZWw9IiIsIGRpYWxvZ190eXBlID0gZ3RrLk1FU1NBR0VfUVVFU1RJT04sIG1zZz0iIik6CisgICAgICAgIHN1cGVyKENydW1ic01lc3NhZ2VEaWFsb2csIHNlbGYpLl9faW5pdF9fKE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0ay5ESUFMT0dfTU9EQUwgfCBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ190eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGsuQlVUVE9OU19OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lKQorCisgICAgICAgIHNlbGYuc2V0X3NraXBfdGFza2Jhcl9oaW50KEZhbHNlKQorCisgICAgICAgIHNlbGYuc2V0X21hcmt1cChsYWJlbCkKKworICAgICAgICBpZiAwIDw9IGxlbihtc2cpIDwgMzAwOgorICAgICAgICAgICAgc2VsZi5mb3JtYXRfc2Vjb25kYXJ5X21hcmt1cChtc2cpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB2Ym94ID0gc2VsZi5nZXRfbWVzc2FnZV9hcmVhKCkKKyAgICAgICAgICAgIHZib3guc2V0X2JvcmRlcl93aWR0aCgxKQorICAgICAgICAgICAgdmJveC5zZXRfcHJvcGVydHkoInNwYWNpbmciLCAxMikKKyAgICAgICAgICAgIHNlbGYudGV4dFdpbmRvdyA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisgICAgICAgICAgICBzZWxmLnRleHRXaW5kb3cuc2V0X3NoYWRvd190eXBlKGd0ay5TSEFET1dfSU4pCisgICAgICAgICAgICBzZWxmLnRleHRXaW5kb3cuc2V0X3BvbGljeShndGsuUE9MSUNZX0FVVE9NQVRJQywgZ3RrLlBPTElDWV9BVVRPTUFUSUMpCisgICAgICAgICAgICBzZWxmLm1zZ1ZpZXcgPSBndGsuVGV4dFZpZXcoKQorICAgICAgICAgICAgc2VsZi5tc2dWaWV3LnNldF9lZGl0YWJsZShGYWxzZSkKKyAgICAgICAgICAgIHNlbGYubXNnVmlldy5zZXRfd3JhcF9tb2RlKGd0ay5XUkFQX1dPUkQpCisgICAgICAgICAgICBzZWxmLm1zZ1ZpZXcuc2V0X2N1cnNvcl92aXNpYmxlKEZhbHNlKQorICAgICAgICAgICAgc2VsZi5tc2dWaWV3LnNldF9zaXplX3JlcXVlc3QoMzAwLCAzMDApCisgICAgICAgICAgICBzZWxmLmJ1ZiA9IGd0ay5UZXh0QnVmZmVyKCkKKyAgICAgICAgICAgIHNlbGYuYnVmLnNldF90ZXh0KG1zZykKKyAgICAgICAgICAgIHNlbGYubXNnVmlldy5zZXRfYnVmZmVyKHNlbGYuYnVmKQorICAgICAgICAgICAgc2VsZi50ZXh0V2luZG93LmFkZChzZWxmLm1zZ1ZpZXcpCisgICAgICAgICAgICBzZWxmLm1zZ1ZpZXcuc2hvdygpCisgICAgICAgICAgICB2Ym94LmFkZChzZWxmLnRleHRXaW5kb3cpCisgICAgICAgICAgICBzZWxmLnRleHRXaW5kb3cuc2hvdygpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvZGVwbG95aW1hZ2VkaWFsb2cucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvZGVwbG95aW1hZ2VkaWFsb2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEzZmZmOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9kZXBsb3lpbWFnZWRpYWxvZy5weQpAQCAtMCwwICsxLDIxOSBAQAorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGdsb2IKK2ltcG9ydCBndGsKK2ltcG9ydCBnb2JqZWN0CitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHNobGV4CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRlbXBmaWxlCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IGhpYywgSG9iQnV0dG9uCitmcm9tIGJiLnVpLmNydW1icy5wcm9ncmVzc2JhciBpbXBvcnQgSG9iUHJvZ3Jlc3NCYXIKK2ltcG9ydCBiYi51aS5jcnVtYnMudXRpbHMKK2ltcG9ydCBiYi5wcm9jZXNzCitmcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzZGlhbG9nIGltcG9ydCBDcnVtYnNEaWFsb2cKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNtZXNzYWdlZGlhbG9nIGltcG9ydCBDcnVtYnNNZXNzYWdlRGlhbG9nCisKKyIiIgorVGhlIGZvbGxvd2luZyBhcmUgY29udmVuaWVuY2UgY2xhc3NlcyBmb3IgaW1wbGVtZW50aW5nIEdOT01FIEhJRyBjb21wbGlhbnQKK0JpdEJha2UgR1VJJ3MKK0luIHN1bW1hcnk6IHNwYWNpbmcgPSAxMnB4LCBib3JkZXItd2lkdGggPSA2cHgKKyIiIgorCitjbGFzcyBEZXBsb3lJbWFnZURpYWxvZyAoQ3J1bWJzRGlhbG9nKToKKworICAgIF9fZHVtbXlfdXNiX18gPSAiLS1zZWxlY3QgYSB1c2IgZHJpdmUtLSIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aXRsZSwgaW1hZ2VfcGF0aCwgcGFyZW50LCBmbGFncywgYnV0dG9ucz1Ob25lLCBzdGFuZGFsb25lPUZhbHNlKToKKyAgICAgICAgc3VwZXIoRGVwbG95SW1hZ2VEaWFsb2csIHNlbGYpLl9faW5pdF9fKHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zKQorCisgICAgICAgIHNlbGYuaW1hZ2VfcGF0aCA9IGltYWdlX3BhdGgKKyAgICAgICAgc2VsZi5zdGFuZGFsb25lID0gc3RhbmRhbG9uZQorCisgICAgICAgIHNlbGYuY3JlYXRlX3Zpc3VhbF9lbGVtZW50cygpCisgICAgICAgIHNlbGYuY29ubmVjdCgicmVzcG9uc2UiLCBzZWxmLnJlc3BvbnNlX2NiKQorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgIHNlbGYuc2V0X3NpemVfcmVxdWVzdCg2MDAsIDQwMCkKKyAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBsYWJlbC5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICBtYXJrdXAgPSAiPHNwYW4gZm9udF9kZXNjPScxMic+VGhlIGltYWdlIHRvIGJlIHdyaXR0ZW4gaW50byB1c2IgZHJpdmU6PC9zcGFuPiIKKyAgICAgICAgbGFiZWwuc2V0X21hcmt1cChtYXJrdXApCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UsIHBhZGRpbmc9MikKKworICAgICAgICB0YWJsZSA9IGd0ay5UYWJsZSgyLCAxMCwgRmFsc2UpCisgICAgICAgIHRhYmxlLnNldF9jb2xfc3BhY2luZ3MoNSkKKyAgICAgICAgdGFibGUuc2V0X3Jvd19zcGFjaW5ncyg1KQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydCh0YWJsZSwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICBzY3JvbGwgPSBndGsuU2Nyb2xsZWRXaW5kb3coKQorICAgICAgICBzY3JvbGwuc2V0X3BvbGljeShndGsuUE9MSUNZX05FVkVSLCBndGsuUE9MSUNZX0FVVE9NQVRJQykKKyAgICAgICAgc2Nyb2xsLnNldF9zaGFkb3dfdHlwZShndGsuU0hBRE9XX0lOKQorICAgICAgICB0diA9IGd0ay5UZXh0VmlldygpCisgICAgICAgIHR2LnNldF9lZGl0YWJsZShGYWxzZSkKKyAgICAgICAgdHYuc2V0X3dyYXBfbW9kZShndGsuV1JBUF9XT1JEKQorICAgICAgICB0di5zZXRfY3Vyc29yX3Zpc2libGUoRmFsc2UpCisgICAgICAgIHNlbGYuYnVmID0gZ3RrLlRleHRCdWZmZXIoKQorICAgICAgICBzZWxmLmJ1Zi5zZXRfdGV4dChzZWxmLmltYWdlX3BhdGgpCisgICAgICAgIHR2LnNldF9idWZmZXIoc2VsZi5idWYpCisgICAgICAgIHNjcm9sbC5hZGQodHYpCisgICAgICAgIHRhYmxlLmF0dGFjaChzY3JvbGwsIDAsIDEwLCAwLCAxKQorCisgICAgICAgICMgVGhlcmUgYXJlIDIgd2F5cyB0byB1c2UgRGVwbG95SW1hZ2VEaWFsb2cKKyAgICAgICAgIyBPbmUgd2F5IGlzIHRoYXQgY2FsbGVkIGJ5IEhPQiB3aGVuIHRoZSAnRGVwbG95IEltYWdlJyBidXR0b24gaXMgY2xpY2tlZAorICAgICAgICAjIFRoZSBvdGhlciB3YXkgaXMgdGhhdCBjYWxsZWQgYnkgYSBzdGFuZGFsb25lIHNjcmlwdC4KKyAgICAgICAgIyBGb2xsb3dpbmcgYmxvY2sgb2YgY29kZXMgaGFuZGxlcyB0aGUgbGF0dGVyIHdheS4gSXQgYWRkcyBhICdTZWxlY3QgSW1hZ2UnIGJ1dHRvbiBhbmQKKyAgICAgICAgIyBlbWl0IGEgc2lnbmFsIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkLgorICAgICAgICBpZiBzZWxmLnN0YW5kYWxvbmU6CisgICAgICAgICAgICAgICAgZ29iamVjdC5zaWduYWxfbmV3KCJzZWxlY3RfaW1hZ2VfY2xpY2tlZCIsIHNlbGYsIGdvYmplY3QuU0lHTkFMX1JVTl9GSVJTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsICgpKQorICAgICAgICAgICAgICAgIGljb24gPSBndGsuSW1hZ2UoKQorICAgICAgICAgICAgICAgIHBpeF9idWZmZXIgPSBndGsuZ2RrLnBpeGJ1Zl9uZXdfZnJvbV9maWxlKGhpYy5JQ09OX0lNQUdFU19ESVNQTEFZX0ZJTEUpCisgICAgICAgICAgICAgICAgaWNvbi5zZXRfZnJvbV9waXhidWYocGl4X2J1ZmZlcikKKyAgICAgICAgICAgICAgICBidXR0b24gPSBndGsuQnV0dG9uKCJTZWxlY3QgSW1hZ2UiKQorICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXRfaW1hZ2UoaWNvbikKKyAgICAgICAgICAgICAgICAjYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoMTQwLCA1MCkKKyAgICAgICAgICAgICAgICB0YWJsZS5hdHRhY2goYnV0dG9uLCA5LCAxMCwgMSwgMiwgZ3RrLkZJTEwsIDAsIDAsIDApCisgICAgICAgICAgICAgICAgYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLnNlbGVjdF9pbWFnZV9idXR0b25fY2xpY2tlZF9jYikKKworICAgICAgICBzZXBhcmF0b3IgPSBndGsuSFNlcGFyYXRvcigpCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlcGFyYXRvciwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPTEwKQorCisgICAgICAgIHNlbGYudXNiX2Rlc2MgPSBndGsuTGFiZWwoKQorICAgICAgICBzZWxmLnVzYl9kZXNjLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCisgICAgICAgIG1hcmt1cCA9ICI8c3BhbiBmb250X2Rlc2M9JzEyJz5Zb3UgaGF2ZW4ndCBjaG9zZW4gYW55IFVTQiBkcml2ZS48L3NwYW4+IgorICAgICAgICBzZWxmLnVzYl9kZXNjLnNldF9tYXJrdXAobWFya3VwKQorCisgICAgICAgIHNlbGYudXNiX2NvbWJvID0gZ3RrLmNvbWJvX2JveF9uZXdfdGV4dCgpCisgICAgICAgIHNlbGYudXNiX2NvbWJvLmNvbm5lY3QoImNoYW5nZWQiLCBzZWxmLnVzYl9jb21ib19jaGFuZ2VkX2NiKQorICAgICAgICBtb2RlbCA9IHNlbGYudXNiX2NvbWJvLmdldF9tb2RlbCgpCisgICAgICAgIG1vZGVsLmNsZWFyKCkKKyAgICAgICAgc2VsZi51c2JfY29tYm8uYXBwZW5kX3RleHQoc2VsZi5fX2R1bW15X3VzYl9fKQorICAgICAgICBmb3IgdXNiIGluIHNlbGYuZmluZF9hbGxfdXNiX2RldmljZXMoKToKKyAgICAgICAgICAgIHNlbGYudXNiX2NvbWJvLmFwcGVuZF90ZXh0KCIvZGV2LyIgKyB1c2IpCisgICAgICAgIHNlbGYudXNiX2NvbWJvLnNldF9hY3RpdmUoMCkKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi51c2JfY29tYm8sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi51c2JfZGVzYywgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPTIpCisKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIgPSBIb2JQcm9ncmVzc0JhcigpCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYucHJvZ3Jlc3NfYmFyLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlcGFyYXRvciA9IGd0ay5IU2VwYXJhdG9yKCkKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VwYXJhdG9yLCBleHBhbmQ9RmFsc2UsIGZpbGw9VHJ1ZSwgcGFkZGluZz0xMCkKKworICAgICAgICBzZWxmLnZib3guc2hvd19hbGwoKQorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5oaWRlKCkKKworICAgIGRlZiBzZXRfaW1hZ2VfdGV4dF9idWZmZXIoc2VsZiwgaW1hZ2VfcGF0aCk6CisgICAgICAgIHNlbGYuYnVmLnNldF90ZXh0KGltYWdlX3BhdGgpCisKKyAgICBkZWYgc2V0X2ltYWdlX3BhdGgoc2VsZiwgaW1hZ2VfcGF0aCk6CisgICAgICAgIHNlbGYuaW1hZ2VfcGF0aCA9IGltYWdlX3BhdGgKKworICAgIGRlZiBwb3Blbl9yZWFkKHNlbGYsIGNtZCk6CisgICAgICAgIHRtcG91dCwgZXJyb3JzID0gYmIucHJvY2Vzcy5ydW4oIiVzIiAlIGNtZCkKKyAgICAgICAgcmV0dXJuIHRtcG91dC5zdHJpcCgpCisKKyAgICBkZWYgZmluZF9hbGxfdXNiX2RldmljZXMoc2VsZik6CisgICAgICAgIHVzYl9kZXZzID0gWyBvcy5yZWFkbGluayh1KQorICAgICAgICAgICAgZm9yIHUgaW4gZ2xvYi5nbG9iKCcvZGV2L2Rpc2svYnktaWQvdXNiKicpCisgICAgICAgICAgICBpZiBub3QgcmUuc2VhcmNoKHIncGFydFxkKycsIHUpIF0KKyAgICAgICAgcmV0dXJuIFsgJyVzJyAlIHVbdS5yZmluZCgnLycpKzE6XSBmb3IgdSBpbiB1c2JfZGV2cyBdCisKKyAgICBkZWYgZ2V0X3VzYl9pbmZvKHNlbGYsIGRldik6CisgICAgICAgIHJldHVybiAiJXMgJXMiICUgXAorICAgICAgICAgICAgKHNlbGYucG9wZW5fcmVhZCgnY2F0IC9zeXMvY2xhc3MvYmxvY2svJXMvZGV2aWNlL3ZlbmRvcicgJSBkZXYpLAorICAgICAgICAgICAgc2VsZi5wb3Blbl9yZWFkKCdjYXQgL3N5cy9jbGFzcy9ibG9jay8lcy9kZXZpY2UvbW9kZWwnICUgZGV2KSkKKworICAgIGRlZiBzZWxlY3RfaW1hZ2VfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgICAgIHNlbGYuZW1pdCgnc2VsZWN0X2ltYWdlX2NsaWNrZWQnKQorCisgICAgZGVmIHVzYl9jb21ib19jaGFuZ2VkX2NiKHNlbGYsIHVzYl9jb21ibyk6CisgICAgICAgIGNvbWJvX2l0ZW0gPSBzZWxmLnVzYl9jb21iby5nZXRfYWN0aXZlX3RleHQoKQorICAgICAgICBpZiBub3QgY29tYm9faXRlbSBvciBjb21ib19pdGVtID09IHNlbGYuX19kdW1teV91c2JfXzoKKyAgICAgICAgICAgIG1hcmt1cCA9ICI8c3BhbiBmb250X2Rlc2M9JzEyJz5Zb3UgaGF2ZW4ndCBjaG9zZW4gYW55IFVTQiBkcml2ZS48L3NwYW4+IgorICAgICAgICAgICAgc2VsZi51c2JfZGVzYy5zZXRfbWFya3VwKG1hcmt1cCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hcmt1cCA9ICI8c3BhbiBmb250X2Rlc2M9JzEyJz4iICsgc2VsZi5nZXRfdXNiX2luZm8oY29tYm9faXRlbS5sc3RyaXAoIi9kZXYvIikpICsgIjwvc3Bhbj4iCisgICAgICAgICAgICBzZWxmLnVzYl9kZXNjLnNldF9tYXJrdXAobWFya3VwKQorCisgICAgZGVmIHJlc3BvbnNlX2NiKHNlbGYsIGRpYWxvZywgcmVzcG9uc2VfaWQpOgorICAgICAgICBpZiByZXNwb25zZV9pZCA9PSBndGsuUkVTUE9OU0VfWUVTOgorICAgICAgICAgICAgbGJsID0gJycKKyAgICAgICAgICAgIG1zZyA9ICcnCisgICAgICAgICAgICBjb21ib19pdGVtID0gc2VsZi51c2JfY29tYm8uZ2V0X2FjdGl2ZV90ZXh0KCkKKyAgICAgICAgICAgIGlmIGNvbWJvX2l0ZW0gYW5kIGNvbWJvX2l0ZW0gIT0gc2VsZi5fX2R1bW15X3VzYl9fIGFuZCBzZWxmLmltYWdlX3BhdGg6CisgICAgICAgICAgICAgICAgY21kbGluZSA9IGJiLnVpLmNydW1icy51dGlscy53aGljaF90ZXJtaW5hbCgpCisgICAgICAgICAgICAgICAgaWYgY21kbGluZToKKyAgICAgICAgICAgICAgICAgICAgdG1wZmlsZSA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpCisgICAgICAgICAgICAgICAgICAgIGNtZGxpbmUgKz0gIlwic3VkbyBkZCBpZj0iICsgc2VsZi5pbWFnZV9wYXRoICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG9mPSIgKyBjb21ib19pdGVtICsgIiAmJiBzeW5jOyBlY2hvICQ/ID4gIiArIHRtcGZpbGUubmFtZSArICJcIiIKKyAgICAgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKHNobGV4LnNwbGl0KGNtZGxpbmUpKQorCisgICAgICAgICAgICAgICAgICAgIGlmIGludCh0bXBmaWxlLnJlYWRsaW5lKCkuc3RyaXAoKSkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxibCA9ICI8Yj5EZXBsb3kgaW1hZ2Ugc3VjY2Vzc2Z1bGx5LjwvYj4iCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBsYmwgPSAiPGI+RmFpbGVkIHRvIGRlcGxveSBpbWFnZS48L2I+IgorICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gIlBsZWFzZSBjaGVjayBpbWFnZSA8Yj4lczwvYj4gZXhpc3RzIGFuZCBVU0IgZGV2aWNlIDxiPiVzPC9iPiBpcyB3cml0YWJsZS4iICUgKHNlbGYuaW1hZ2VfcGF0aCwgY29tYm9faXRlbSkKKyAgICAgICAgICAgICAgICAgICAgdG1wZmlsZS5jbG9zZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmltYWdlX3BhdGg6CisgICAgICAgICAgICAgICAgICAgIGxibCA9ICI8Yj5ObyBzZWxlY3Rpb24gbWFkZS48L2I+IgorICAgICAgICAgICAgICAgICAgICBtc2cgPSAiWW91IGhhdmUgbm90IHNlbGVjdGVkIGFuIGltYWdlIHRvIGRlcGxveS4iCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbGJsID0gIjxiPk5vIHNlbGVjdGlvbiBtYWRlLjwvYj4iCisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJZb3UgaGF2ZSBub3Qgc2VsZWN0ZWQgYSBVU0IgZGV2aWNlLiIKKyAgICAgICAgICAgIGlmIGxlbihsYmwpOgorICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cgPSBDcnVtYnNNZXNzYWdlRGlhbG9nKHNlbGYsIGxibCwgZ3RrLk1FU1NBR0VfSU5GTywgbXNnKQorICAgICAgICAgICAgICAgIGJ1dHRvbiA9IGNydW1ic19kaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgICAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgICAgICAgICAgY3J1bWJzX2RpYWxvZy5ydW4oKQorICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cuZGVzdHJveSgpCisKKyAgICBkZWYgdXBkYXRlX3Byb2dyZXNzX2JhcihzZWxmLCB0aXRsZSwgZnJhY3Rpb24sIHN0YXR1cz1Ob25lKToKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIudXBkYXRlKGZyYWN0aW9uKQorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5zZXRfdGl0bGUodGl0bGUpCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyLnNldF9yY3N0eWxlKHN0YXR1cykKKworICAgIGRlZiB3cml0ZV9maWxlKHNlbGYsIGlmaWxlLCBvZmlsZSk6CisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyLnJlc2V0KCkKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIuc2hvdygpCisKKyAgICAgICAgZl9mcm9tID0gb3Mub3BlbihpZmlsZSwgb3MuT19SRE9OTFkpCisgICAgICAgIGZfdG8gPSBvcy5vcGVuKG9maWxlLCBvcy5PX1dST05MWSkKKworICAgICAgICB0b3RhbF9zaXplID0gb3Muc3RhdChpZmlsZSkuc3Rfc2l6ZQorICAgICAgICB3cml0dGVuX3NpemUgPSAwCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGJ1ZiA9IG9zLnJlYWQoZl9mcm9tLCAxMDI0KjEwMjQpCisgICAgICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBvcy53cml0ZShmX3RvLCBidWYpCisgICAgICAgICAgICB3cml0dGVuX3NpemUgKz0gMTAyNCoxMDI0CisgICAgICAgICAgICBzZWxmLnVwZGF0ZV9wcm9ncmVzc19iYXIoIldyaXRpbmcgdG8gdXNiOiIsIHdyaXR0ZW5fc2l6ZSAqIDEuMC90b3RhbF9zaXplKQorCisgICAgICAgIHNlbGYudXBkYXRlX3Byb2dyZXNzX2JhcigiV3JpdGluZyBjb21wbGV0ZWQ6IiwgMS4wKQorICAgICAgICBvcy5jbG9zZShmX2Zyb20pCisgICAgICAgIG9zLmNsb3NlKGZfdG8pCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyLmhpZGUoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2ltYWdlc2VsZWN0aW9uZGlhbG9nLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2ltYWdlc2VsZWN0aW9uZGlhbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMjE2YWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvaW1hZ2VzZWxlY3Rpb25kaWFsb2cucHkKQEAgLTAsMCArMSwxNzIgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEyICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgSm9zaHVhIExvY2sgPGpvc2hAbGludXguaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKK2ltcG9ydCBnb2JqZWN0CitpbXBvcnQgb3MKK2Zyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgSG9iVmlld1RhYmxlLCBIb2JJbmZvQnV0dG9uLCBIb2JCdXR0b24sIEhvYkFsdEJ1dHRvbgorZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic2RpYWxvZyBpbXBvcnQgQ3J1bWJzRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcubGF5ZXJzZWxlY3Rpb25kaWFsb2cgaW1wb3J0IExheWVyU2VsZWN0aW9uRGlhbG9nCisKKyIiIgorVGhlIGZvbGxvd2luZyBhcmUgY29udmVuaWVuY2UgY2xhc3NlcyBmb3IgaW1wbGVtZW50aW5nIEdOT01FIEhJRyBjb21wbGlhbnQKK0JpdEJha2UgR1VJJ3MKK0luIHN1bW1hcnk6IHNwYWNpbmcgPSAxMnB4LCBib3JkZXItd2lkdGggPSA2cHgKKyIiIgorCitjbGFzcyBJbWFnZVNlbGVjdGlvbkRpYWxvZyAoQ3J1bWJzRGlhbG9nKToKKworICAgIF9fY29sdW1uc19fID0gW3sKKyAgICAgICAgICAgICdjb2xfbmFtZScgOiAnSW1hZ2UgbmFtZScsCisgICAgICAgICAgICAnY29sX2lkJyAgIDogMCwKKyAgICAgICAgICAgICdjb2xfc3R5bGUnOiAndGV4dCcsCisgICAgICAgICAgICAnY29sX21pbicgIDogNDAwLAorICAgICAgICAgICAgJ2NvbF9tYXgnICA6IDQwMAorICAgICAgICB9LCB7CisgICAgICAgICAgICAnY29sX25hbWUnIDogJ1NlbGVjdCcsCisgICAgICAgICAgICAnY29sX2lkJyAgIDogMSwKKyAgICAgICAgICAgICdjb2xfc3R5bGUnOiAncmFkaW8gdG9nZ2xlJywKKyAgICAgICAgICAgICdjb2xfbWluJyAgOiAxNjAsCisgICAgICAgICAgICAnY29sX21heCcgIDogMTYwCisgICAgfV0KKworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGltYWdlX2ZvbGRlciwgaW1hZ2VfdHlwZXMsIHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zPU5vbmUsIGltYWdlX2V4dGVuc2lvbiA9IHt9KToKKyAgICAgICAgc3VwZXIoSW1hZ2VTZWxlY3Rpb25EaWFsb2csIHNlbGYpLl9faW5pdF9fKHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zKQorICAgICAgICBzZWxmLmNvbm5lY3QoInJlc3BvbnNlIiwgc2VsZi5yZXNwb25zZV9jYikKKworICAgICAgICBzZWxmLmltYWdlX2ZvbGRlciA9IGltYWdlX2ZvbGRlcgorICAgICAgICBzZWxmLmltYWdlX3R5cGVzICA9IGltYWdlX3R5cGVzCisgICAgICAgIHNlbGYuaW1hZ2VfbGlzdCA9IFtdCisgICAgICAgIHNlbGYuaW1hZ2VfbmFtZXMgPSBbXQorICAgICAgICBzZWxmLmltYWdlX2V4dGVuc2lvbiA9IGltYWdlX2V4dGVuc2lvbgorCisgICAgICAgICMgY3JlYXRlIHZpc3VhbCBlbGVtZW50cyBvbiB0aGUgZGlhbG9nCisgICAgICAgIHNlbGYuY3JlYXRlX3Zpc3VhbF9lbGVtZW50cygpCisKKyAgICAgICAgc2VsZi5pbWFnZV9zdG9yZSA9IGd0ay5MaXN0U3RvcmUoZ29iamVjdC5UWVBFX1NUUklORywgZ29iamVjdC5UWVBFX0JPT0xFQU4pCisgICAgICAgIHNlbGYuZmlsbF9pbWFnZV9zdG9yZSgpCisKKyAgICBkZWYgY3JlYXRlX3Zpc3VhbF9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgaGJveCA9IGd0ay5IQm94KEZhbHNlLCA2KQorCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KGhib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBlbnRyeSA9IGd0ay5FbnRyeSgpCisgICAgICAgIGVudHJ5LnNldF90ZXh0KHNlbGYuaW1hZ2VfZm9sZGVyKQorICAgICAgICB0YWJsZSA9IGd0ay5UYWJsZSgxLCAxMCwgVHJ1ZSkKKyAgICAgICAgdGFibGUuc2V0X3NpemVfcmVxdWVzdCg1NjAsIC0xKQorICAgICAgICBoYm94LnBhY2tfc3RhcnQodGFibGUsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgdGFibGUuYXR0YWNoKGVudHJ5LCAwLCA5LCAwLCAxKQorICAgICAgICBpbWFnZSA9IGd0ay5JbWFnZSgpCisgICAgICAgIGltYWdlLnNldF9mcm9tX3N0b2NrKGd0ay5TVE9DS19PUEVOLCBndGsuSUNPTl9TSVpFX0JVVFRPTikKKyAgICAgICAgb3Blbl9idXR0b24gPSBndGsuQnV0dG9uKCkKKyAgICAgICAgb3Blbl9idXR0b24uc2V0X2ltYWdlKGltYWdlKQorICAgICAgICBvcGVuX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5zZWxlY3RfcGF0aF9jYiwgc2VsZiwgZW50cnkpCisgICAgICAgIHRhYmxlLmF0dGFjaChvcGVuX2J1dHRvbiwgOSwgMTAsIDAsIDEpCisKKyAgICAgICAgc2VsZi5pbWFnZV90YWJsZSA9IEhvYlZpZXdUYWJsZShzZWxmLl9fY29sdW1uc19fLCAiSW1hZ2VzIikKKyAgICAgICAgc2VsZi5pbWFnZV90YWJsZS5zZXRfc2l6ZV9yZXF1ZXN0KC0xLCAzMDApCisgICAgICAgIHNlbGYuaW1hZ2VfdGFibGUuY29ubmVjdCgidG9nZ2xlZCIsIHNlbGYudG9nZ2xlZF9jYikKKyAgICAgICAgc2VsZi5pbWFnZV90YWJsZS5jb25uZWN0X2dyb3VwX3NlbGVjdGlvbihzZWxmLnRhYmxlX3NlbGVjdGVkX2NiKQorICAgICAgICBzZWxmLmltYWdlX3RhYmxlLmNvbm5lY3QoInJvdy1hY3RpdmF0ZWQiLCBzZWxmLnJvd19hY3RpdmVkX2NiKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZWxmLmltYWdlX3RhYmxlLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorCisgICAgZGVmIGNoYW5nZV9pbWFnZV9jYihzZWxmLCBtb2RlbCwgcGF0aCwgY29sdW1uaWQpOgorICAgICAgICBpZiBub3QgbW9kZWw6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaXRlciA9IG1vZGVsLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXRlcjoKKyAgICAgICAgICAgIHJvd3BhdGggPSBtb2RlbC5nZXRfcGF0aChpdGVyKQorICAgICAgICAgICAgbW9kZWxbcm93cGF0aF1bY29sdW1uaWRdID0gRmFsc2UKKyAgICAgICAgICAgIGl0ZXIgPSBtb2RlbC5pdGVyX25leHQoaXRlcikKKworICAgICAgICBtb2RlbFtwYXRoXVtjb2x1bW5pZF0gPSBUcnVlCisKKyAgICBkZWYgdG9nZ2xlZF9jYihzZWxmLCB0YWJsZSwgY2VsbCwgcGF0aCwgY29sdW1uaWQsIHRyZWUpOgorICAgICAgICBtb2RlbCA9IHRyZWUuZ2V0X21vZGVsKCkKKyAgICAgICAgc2VsZi5jaGFuZ2VfaW1hZ2VfY2IobW9kZWwsIHBhdGgsIGNvbHVtbmlkKQorCisgICAgZGVmIHRhYmxlX3NlbGVjdGVkX2NiKHNlbGYsIHNlbGVjdGlvbik6CisgICAgICAgIG1vZGVsLCBwYXRocyA9IHNlbGVjdGlvbi5nZXRfc2VsZWN0ZWRfcm93cygpCisgICAgICAgIGlmIHBhdGhzOgorICAgICAgICAgICAgc2VsZi5jaGFuZ2VfaW1hZ2VfY2IobW9kZWwsIHBhdGhzWzBdLCAxKQorCisgICAgZGVmIHJvd19hY3RpdmVkX2NiKHNlbGYsIHRhYiwgbW9kZWwsIHBhdGgpOgorICAgICAgICBzZWxmLmNoYW5nZV9pbWFnZV9jYihtb2RlbCwgcGF0aCwgMSkKKyAgICAgICAgc2VsZi5lbWl0KCdyZXNwb25zZScsIGd0ay5SRVNQT05TRV9ZRVMpCisKKyAgICBkZWYgc2VsZWN0X3BhdGhfY2Ioc2VsZiwgYWN0aW9uLCBwYXJlbnQsIGVudHJ5KToKKyAgICAgICAgZGlhbG9nID0gZ3RrLkZpbGVDaG9vc2VyRGlhbG9nKCIiLCBwYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGsuRklMRV9DSE9PU0VSX0FDVElPTl9TRUxFQ1RfRk9MREVSKQorICAgICAgICB0ZXh0ID0gZW50cnkuZ2V0X3RleHQoKQorICAgICAgICBkaWFsb2cuc2V0X2N1cnJlbnRfZm9sZGVyKHRleHQgaWYgbGVuKHRleHQpID4gMCBlbHNlIG9zLmdldGN3ZCgpKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2FuY2VsIiwgZ3RrLlJFU1BPTlNFX05PKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIk9wZW4iLCBndGsuUkVTUE9OU0VfWUVTKQorICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgaWYgcmVzcG9uc2UgPT0gZ3RrLlJFU1BPTlNFX1lFUzoKKyAgICAgICAgICAgIHBhdGggPSBkaWFsb2cuZ2V0X2ZpbGVuYW1lKCkKKyAgICAgICAgICAgIGVudHJ5LnNldF90ZXh0KHBhdGgpCisgICAgICAgICAgICBzZWxmLmltYWdlX2ZvbGRlciA9IHBhdGgKKyAgICAgICAgICAgIHNlbGYuZmlsbF9pbWFnZV9zdG9yZSgpCisKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgZGVmIGZpbGxfaW1hZ2Vfc3RvcmUoc2VsZik6CisgICAgICAgIHNlbGYuaW1hZ2VfbGlzdCA9IFtdCisgICAgICAgIHNlbGYuaW1hZ2Vfc3RvcmUuY2xlYXIoKQorICAgICAgICBpbWFnZXNldCA9IHNldCgpCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNlbGYuaW1hZ2VfZm9sZGVyKToKKyAgICAgICAgICAgICMgaWdub3JlIHRoZSBzdWIgZGlyZWN0b3JpZXMKKyAgICAgICAgICAgIGRpcnNbOl0gPSBbXQorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgZm9yIGltYWdlX3R5cGUgaW4gc2VsZi5pbWFnZV90eXBlczoKKyAgICAgICAgICAgICAgICAgICAgaWYgaW1hZ2VfdHlwZSBpbiBzZWxmLmltYWdlX2V4dGVuc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxfdHlwZXMgPSBzZWxmLmltYWdlX2V4dGVuc2lvbltpbWFnZV90eXBlXQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVhbF90eXBlcyA9IFtpbWFnZV90eXBlXQorICAgICAgICAgICAgICAgICAgICBmb3IgcmVhbF9pbWFnZV90eXBlIGluIHJlYWxfdHlwZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmLmVuZHN3aXRoKCcuJyArIHJlYWxfaW1hZ2VfdHlwZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzZXQuYWRkKGYucnNwbGl0KCcuJyArIHJlYWxfaW1hZ2VfdHlwZSlbMF0ucnNwbGl0KCcucm9vdGZzJylbMF0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbWFnZV9saXN0LmFwcGVuZChmKQorCisgICAgICAgIGZvciBpbWFnZSBpbiBpbWFnZXNldDoKKyAgICAgICAgICAgIHNlbGYuaW1hZ2Vfc3RvcmUuc2V0KHNlbGYuaW1hZ2Vfc3RvcmUuYXBwZW5kKCksIDAsIGltYWdlLCAxLCBGYWxzZSkKKworICAgICAgICBzZWxmLmltYWdlX3RhYmxlLnNldF9tb2RlbChzZWxmLmltYWdlX3N0b3JlKQorCisgICAgZGVmIHJlc3BvbnNlX2NiKHNlbGYsIGRpYWxvZywgcmVzcG9uc2VfaWQpOgorICAgICAgICBzZWxmLmltYWdlX25hbWVzID0gW10KKyAgICAgICAgaWYgcmVzcG9uc2VfaWQgPT0gZ3RrLlJFU1BPTlNFX1lFUzoKKyAgICAgICAgICAgIGl0ZXIgPSBzZWxmLmltYWdlX3N0b3JlLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgICAgIHdoaWxlIGl0ZXI6CisgICAgICAgICAgICAgICAgcGF0aCA9IHNlbGYuaW1hZ2Vfc3RvcmUuZ2V0X3BhdGgoaXRlcikKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmltYWdlX3N0b3JlW3BhdGhdWzFdOgorICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiBzZWxmLmltYWdlX2xpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmLnN0YXJ0c3dpdGgoc2VsZi5pbWFnZV9zdG9yZVtwYXRoXVswXSArICcuJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbWFnZV9uYW1lcy5hcHBlbmQoZikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpdGVyID0gc2VsZi5pbWFnZV9zdG9yZS5pdGVyX25leHQoaXRlcikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9sYXllcnNlbGVjdGlvbmRpYWxvZy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9sYXllcnNlbGVjdGlvbmRpYWxvZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmQ1N2I2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2xheWVyc2VsZWN0aW9uZGlhbG9nLnB5CkBAIC0wLDAgKzEsMjk4IEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCitpbXBvcnQgZ29iamVjdAoraW1wb3J0IG9zCitpbXBvcnQgdGVtcGZpbGUKK2Zyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgaGljLCBIb2JCdXR0b24sIEhvYkFsdEJ1dHRvbgorZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic2RpYWxvZyBpbXBvcnQgQ3J1bWJzRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzbWVzc2FnZWRpYWxvZyBpbXBvcnQgQ3J1bWJzTWVzc2FnZURpYWxvZworCisiIiIKK1RoZSBmb2xsb3dpbmcgYXJlIGNvbnZlbmllbmNlIGNsYXNzZXMgZm9yIGltcGxlbWVudGluZyBHTk9NRSBISUcgY29tcGxpYW50CitCaXRCYWtlIEdVSSdzCitJbiBzdW1tYXJ5OiBzcGFjaW5nID0gMTJweCwgYm9yZGVyLXdpZHRoID0gNnB4CisiIiIKKworY2xhc3MgQ2VsbFJlbmRlcmVyUGl4YnVmQWN0aXZhdGFibGUoZ3RrLkNlbGxSZW5kZXJlclBpeGJ1Zik6CisgICAgIiIiCisgICAgQSBjdXN0b20gQ2VsbFJlbmRlcmVyIGltcGxlbWVudGF0aW9uIHdoaWNoIGlzIGFjdGl2YXRhYmxlCisgICAgc28gdGhhdCB3ZSBjYW4gaGFuZGxlIHVzZXIgY2xpY2tzCisgICAgIiIiCisgICAgX19nc2lnbmFsc19fICAgID0geyAnY2xpY2tlZCcgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdvYmplY3QuVFlQRV9TVFJJTkcsKSksIH0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgZ3RrLkNlbGxSZW5kZXJlclBpeGJ1Zi5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnNldF9wcm9wZXJ0eSgnbW9kZScsIGd0ay5DRUxMX1JFTkRFUkVSX01PREVfQUNUSVZBVEFCTEUpCisgICAgICAgIHNlbGYuc2V0X3Byb3BlcnR5KCdmb2xsb3ctc3RhdGUnLCBUcnVlKQorCisgICAgIiIiCisgICAgUmVzcG9uZCB0byBhIHVzZXIgY2xpY2sgb24gYSBjZWxsCisgICAgIiIiCisgICAgZGVmIGRvX2FjdGl2YXRlKHNlbGYsIGV2ZW4sIHdpZGdldCwgcGF0aCwgYmFja2dyb3VuZF9hcmVhLCBjZWxsX2FyZWEsIGZsYWdzKToKKyAgICAgICAgc2VsZi5lbWl0KCdjbGlja2VkJywgcGF0aCkKKworIworIyBMYXllclNlbGVjdGlvbkRpYWxvZworIworY2xhc3MgTGF5ZXJTZWxlY3Rpb25EaWFsb2cgKENydW1ic0RpYWxvZyk6CisKKyAgICBUQVJHRVRTID0gWworICAgICAgICAoIk1ZX1RSRUVfTU9ERUxfUk9XIiwgZ3RrLlRBUkdFVF9TQU1FX1dJREdFVCwgMCksCisgICAgICAgICgidGV4dC9wbGFpbiIsIDAsIDEpLAorICAgICAgICAoIlRFWFQiLCAwLCAyKSwKKyAgICAgICAgKCJTVFJJTkciLCAwLCAzKSwKKyAgICAgICAgXQorCisgICAgZGVmIGdlbl9sYWJlbF93aWRnZXQoc2VsZiwgY29udGVudCk6CisgICAgICAgIGxhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgbGFiZWwuc2V0X2FsaWdubWVudCgwLCAwKQorICAgICAgICBsYWJlbC5zZXRfbWFya3VwKGNvbnRlbnQpCisgICAgICAgIGxhYmVsLnNob3coKQorICAgICAgICByZXR1cm4gbGFiZWwKKworICAgIGRlZiBsYXllcl93aWRnZXRfdG9nZ2xlZF9jYihzZWxmLCBjZWxsLCBwYXRoLCBsYXllcl9zdG9yZSk6CisgICAgICAgIG5hbWUgPSBsYXllcl9zdG9yZVtwYXRoXVswXQorICAgICAgICB0b2dnbGUgPSBub3QgbGF5ZXJfc3RvcmVbcGF0aF1bMV0KKyAgICAgICAgbGF5ZXJfc3RvcmVbcGF0aF1bMV0gPSB0b2dnbGUKKworICAgIGRlZiBsYXllcl93aWRnZXRfYWRkX2NsaWNrZWRfY2Ioc2VsZiwgYWN0aW9uLCBsYXllcl9zdG9yZSwgcGFyZW50KToKKyAgICAgICAgZGlhbG9nID0gZ3RrLkZpbGVDaG9vc2VyRGlhbG9nKCJBZGQgbmV3IGxheWVyIiwgcGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrLkZJTEVfQ0hPT1NFUl9BQ1RJT05fU0VMRUNUX0ZPTERFUikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNhbmNlbCIsIGd0ay5SRVNQT05TRV9OTykKKyAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJPcGVuIiwgZ3RrLlJFU1BPTlNFX1lFUykKKyAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIGxhYmVsID0gZ3RrLkxhYmVsKCJTZWxlY3QgdGhlIGxheWVyIHlvdSB3aXNoIHRvIGFkZCIpCisgICAgICAgIGxhYmVsLnNob3coKQorICAgICAgICBkaWFsb2cuc2V0X2V4dHJhX3dpZGdldChsYWJlbCkKKyAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgcGF0aCA9IGRpYWxvZy5nZXRfZmlsZW5hbWUoKQorICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisKKyAgICAgICAgbGJsID0gIjxiPkVycm9yPC9iPiIKKyAgICAgICAgbXNnID0gIlVuYWJsZSB0byBsb2FkIGxheWVyIDxpPiVzPC9pPiBiZWNhdXNlICIgJSBwYXRoCisgICAgICAgIGlmIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9ZRVM6CisgICAgICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgICAgIGltcG9ydCBvcy5wYXRoCisgICAgICAgICAgICBsYXllcnMgPSBbXQorICAgICAgICAgICAgaXQgPSBsYXllcl9zdG9yZS5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgICAgICBsYXllcnMuYXBwZW5kKGxheWVyX3N0b3JlLmdldF92YWx1ZShpdCwgMCkpCisgICAgICAgICAgICAgICAgaXQgPSBsYXllcl9zdG9yZS5pdGVyX25leHQoaXQpCisKKyAgICAgICAgICAgIGlmIG5vdCBwYXRoOgorICAgICAgICAgICAgICAgIG1zZyArPSAiaXQgaXMgYW4gaW52YWxpZCBwYXRoLiIKKyAgICAgICAgICAgIGVsaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGgrIi9jb25mL2xheWVyLmNvbmYiKToKKyAgICAgICAgICAgICAgICBtc2cgKz0gInRoZXJlIGlzIG5vIGxheWVyLmNvbmYgaW5zaWRlIHRoZSBkaXJlY3RvcnkuIgorICAgICAgICAgICAgZWxpZiBwYXRoIGluIGxheWVyczoKKyAgICAgICAgICAgICAgICBtc2cgKz0gIml0IGlzIGFscmVhZHkgaW4gbG9hZGVkIGxheWVycy4iCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxheWVyX3N0b3JlLmFwcGVuZChbcGF0aF0pCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBkaWFsb2cgPSBDcnVtYnNNZXNzYWdlRGlhbG9nKHBhcmVudCwgbGJsLCBndGsuTUVTU0FHRV9FUlJPUiwgbXNnKQorICAgICAgICAgICAgZGlhbG9nLmFkZF9idXR0b24oZ3RrLlNUT0NLX0NMT1NFLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgICAgICByZXNwb25zZSA9IGRpYWxvZy5ydW4oKQorICAgICAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgZGVmIGxheWVyX3dpZGdldF9kZWxfY2xpY2tlZF9jYihzZWxmLCBhY3Rpb24sIHRyZWVfc2VsZWN0aW9uLCBsYXllcl9zdG9yZSk6CisgICAgICAgIG1vZGVsLCBpdGVyID0gdHJlZV9zZWxlY3Rpb24uZ2V0X3NlbGVjdGVkKCkKKyAgICAgICAgaWYgaXRlcjoKKyAgICAgICAgICAgIGxheWVyX3N0b3JlLnJlbW92ZShpdGVyKQorCisKKyAgICBkZWYgZ2VuX2xheWVyX3dpZGdldChzZWxmLCBsYXllcnMsIGxheWVyc19hdmFpbCwgd2luZG93LCB0b29sdGlwPSIiKToKKyAgICAgICAgaGJveCA9IGd0ay5IQm94KEZhbHNlLCA2KQorCisgICAgICAgIGxheWVyX3R2ID0gZ3RrLlRyZWVWaWV3KCkKKyAgICAgICAgbGF5ZXJfdHYuc2V0X3J1bGVzX2hpbnQoVHJ1ZSkKKyAgICAgICAgbGF5ZXJfdHYuc2V0X2hlYWRlcnNfdmlzaWJsZShGYWxzZSkKKyAgICAgICAgdHJlZV9zZWxlY3Rpb24gPSBsYXllcl90di5nZXRfc2VsZWN0aW9uKCkKKyAgICAgICAgdHJlZV9zZWxlY3Rpb24uc2V0X21vZGUoZ3RrLlNFTEVDVElPTl9TSU5HTEUpCisKKyAgICAgICAgIyBBbGxvdyBlbmFibGUgZHJhZyBhbmQgZHJvcCBvZiByb3dzIGluY2x1ZGluZyByb3cgbW92ZQorICAgICAgICBkbmRfaW50ZXJuYWxfdGFyZ2V0ID0gJycKKyAgICAgICAgZG5kX3RhcmdldHMgPSBbKGRuZF9pbnRlcm5hbF90YXJnZXQsIGd0ay5UQVJHRVRfU0FNRV9XSURHRVQsIDApXQorICAgICAgICBsYXllcl90di5lbmFibGVfbW9kZWxfZHJhZ19zb3VyY2UoIGd0ay5nZGsuQlVUVE9OMV9NQVNLLAorICAgICAgICAgICAgZG5kX3RhcmdldHMsCisgICAgICAgICAgICBndGsuZ2RrLkFDVElPTl9NT1ZFKQorICAgICAgICBsYXllcl90di5lbmFibGVfbW9kZWxfZHJhZ19kZXN0KGRuZF90YXJnZXRzLAorICAgICAgICAgICAgZ3RrLmdkay5BQ1RJT05fTU9WRSkKKyAgICAgICAgbGF5ZXJfdHYuY29ubmVjdCgiZHJhZ19kYXRhX2dldCIsIHNlbGYuZHJhZ19kYXRhX2dldF9jYikKKyAgICAgICAgbGF5ZXJfdHYuY29ubmVjdCgiZHJhZ19kYXRhX3JlY2VpdmVkIiwgc2VsZi5kcmFnX2RhdGFfcmVjZWl2ZWRfY2IpCisKKyAgICAgICAgY29sMD0gZ3RrLlRyZWVWaWV3Q29sdW1uKCdQYXRoJykKKyAgICAgICAgY2VsbDAgPSBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpCisgICAgICAgIGNlbGwwLnNldF9wYWRkaW5nKDUsMikKKyAgICAgICAgY29sMC5wYWNrX3N0YXJ0KGNlbGwwLCBUcnVlKQorICAgICAgICBjb2wwLnNldF9jZWxsX2RhdGFfZnVuYyhjZWxsMCwgc2VsZi5kcmF3X2xheWVyX3BhdGhfY2IpCisgICAgICAgIGxheWVyX3R2LmFwcGVuZF9jb2x1bW4oY29sMCkKKworICAgICAgICBzY3JvbGwgPSBndGsuU2Nyb2xsZWRXaW5kb3coKQorICAgICAgICBzY3JvbGwuc2V0X3BvbGljeShndGsuUE9MSUNZX05FVkVSLCBndGsuUE9MSUNZX0FVVE9NQVRJQykKKyAgICAgICAgc2Nyb2xsLnNldF9zaGFkb3dfdHlwZShndGsuU0hBRE9XX0lOKQorICAgICAgICBzY3JvbGwuYWRkKGxheWVyX3R2KQorCisgICAgICAgIHRhYmxlX2xheWVyID0gZ3RrLlRhYmxlKDIsIDEwLCBGYWxzZSkKKyAgICAgICAgaGJveC5wYWNrX3N0YXJ0KHRhYmxlX2xheWVyLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHRhYmxlX2xheWVyLmF0dGFjaChzY3JvbGwsIDAsIDEwLCAwLCAxKQorCisgICAgICAgIGxheWVyX3N0b3JlID0gZ3RrLkxpc3RTdG9yZShnb2JqZWN0LlRZUEVfU1RSSU5HKQorICAgICAgICBmb3IgbGF5ZXIgaW4gbGF5ZXJzOgorICAgICAgICAgICAgbGF5ZXJfc3RvcmUuYXBwZW5kKFtsYXllcl0pCisKKyAgICAgICAgY29sMSA9IGd0ay5UcmVlVmlld0NvbHVtbignRW5hYmxlZCcpCisgICAgICAgIGxheWVyX3R2LmFwcGVuZF9jb2x1bW4oY29sMSkKKworICAgICAgICBjZWxsMSA9IENlbGxSZW5kZXJlclBpeGJ1ZkFjdGl2YXRhYmxlKCkKKyAgICAgICAgY2VsbDEuc2V0X2ZpeGVkX3NpemUoLTEsMzUpCisgICAgICAgIGNlbGwxLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmRlbF9jZWxsX2NsaWNrZWRfY2IsIGxheWVyX3N0b3JlKQorICAgICAgICBjb2wxLnBhY2tfc3RhcnQoY2VsbDEsIFRydWUpCisgICAgICAgIGNvbDEuc2V0X2NlbGxfZGF0YV9mdW5jKGNlbGwxLCBzZWxmLmRyYXdfZGVsZXRlX2J1dHRvbl9jYiwgbGF5ZXJfdHYpCisKKyAgICAgICAgYWRkX2J1dHRvbiA9IGd0ay5CdXR0b24oKQorICAgICAgICBhZGRfYnV0dG9uLnNldF9yZWxpZWYoZ3RrLlJFTElFRl9OT05FKQorICAgICAgICBib3ggPSBndGsuSEJveChGYWxzZSwgNikKKyAgICAgICAgYm94LnNob3coKQorICAgICAgICBhZGRfYnV0dG9uLmFkZChib3gpCisgICAgICAgIGFkZF9idXR0b24uY29ubmVjdCgiZW50ZXItbm90aWZ5LWV2ZW50Iiwgc2VsZi5hZGRfaG92ZXJfY2IpCisgICAgICAgIGFkZF9idXR0b24uY29ubmVjdCgibGVhdmUtbm90aWZ5LWV2ZW50Iiwgc2VsZi5hZGRfbGVhdmVfY2IpCisgICAgICAgIHNlbGYuaW0gPSBndGsuSW1hZ2UoKQorICAgICAgICBzZWxmLmltLnNldF9mcm9tX2ZpbGUoaGljLklDT05fSU5ESV9BRERfRklMRSkKKyAgICAgICAgc2VsZi5pbS5zaG93KCkKKyAgICAgICAgYm94LnBhY2tfc3RhcnQoc2VsZi5pbSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPTYpCisgICAgICAgIGxibCA9IGd0ay5MYWJlbCgiQWRkIGxheWVyIikKKyAgICAgICAgbGJsLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCisgICAgICAgIGxibC5zaG93KCkKKyAgICAgICAgYm94LnBhY2tfc3RhcnQobGJsLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlLCBwYWRkaW5nPTYpCisgICAgICAgIGFkZF9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYubGF5ZXJfd2lkZ2V0X2FkZF9jbGlja2VkX2NiLCBsYXllcl9zdG9yZSwgd2luZG93KQorICAgICAgICB0YWJsZV9sYXllci5hdHRhY2goYWRkX2J1dHRvbiwgMCwgMTAsIDEsIDIsIGd0ay5FWFBBTkQgfCBndGsuRklMTCwgMCwgMCwgNikKKyAgICAgICAgbGF5ZXJfdHYuc2V0X21vZGVsKGxheWVyX3N0b3JlKQorCisgICAgICAgIGhib3guc2hvd19hbGwoKQorCisgICAgICAgIHJldHVybiBoYm94LCBsYXllcl9zdG9yZQorCisgICAgZGVmIGRyYWdfZGF0YV9nZXRfY2Ioc2VsZiwgdHJlZXZpZXcsIGNvbnRleHQsIHNlbGVjdGlvbiwgdGFyZ2V0X2lkLCBldGltZSk6CisgICAgICAgIHRyZWVzZWxlY3Rpb24gPSB0cmVldmlldy5nZXRfc2VsZWN0aW9uKCkKKyAgICAgICAgbW9kZWwsIGl0ZXIgPSB0cmVlc2VsZWN0aW9uLmdldF9zZWxlY3RlZCgpCisgICAgICAgIGRhdGEgPSBtb2RlbC5nZXRfdmFsdWUoaXRlciwgMCkKKyAgICAgICAgc2VsZWN0aW9uLnNldChzZWxlY3Rpb24udGFyZ2V0LCA4LCBkYXRhKQorCisgICAgZGVmIGRyYWdfZGF0YV9yZWNlaXZlZF9jYihzZWxmLCB0cmVldmlldywgY29udGV4dCwgeCwgeSwgc2VsZWN0aW9uLCBpbmZvLCBldGltZSk6CisgICAgICAgIG1vZGVsID0gdHJlZXZpZXcuZ2V0X21vZGVsKCkKKyAgICAgICAgZGF0YSA9IHNlbGVjdGlvbi5kYXRhCisgICAgICAgIGRyb3BfaW5mbyA9IHRyZWV2aWV3LmdldF9kZXN0X3Jvd19hdF9wb3MoeCwgeSkKKyAgICAgICAgaWYgZHJvcF9pbmZvOgorICAgICAgICAgICAgcGF0aCwgcG9zaXRpb24gPSBkcm9wX2luZm8KKyAgICAgICAgICAgIGl0ZXIgPSBtb2RlbC5nZXRfaXRlcihwYXRoKQorICAgICAgICAgICAgaWYgKHBvc2l0aW9uID09IGd0ay5UUkVFX1ZJRVdfRFJPUF9CRUZPUkUgb3IgcG9zaXRpb24gPT0gZ3RrLlRSRUVfVklFV19EUk9QX0lOVE9fT1JfQkVGT1JFKToKKyAgICAgICAgICAgICAgICBtb2RlbC5pbnNlcnRfYmVmb3JlKGl0ZXIsIFtkYXRhXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbW9kZWwuaW5zZXJ0X2FmdGVyKGl0ZXIsIFtkYXRhXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1vZGVsLmFwcGVuZChbZGF0YV0pCisgICAgICAgIGlmIGNvbnRleHQuYWN0aW9uID09IGd0ay5nZGsuQUNUSU9OX01PVkU6CisgICAgICAgICAgICBjb250ZXh0LmZpbmlzaChUcnVlLCBUcnVlLCBldGltZSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgYWRkX2hvdmVyX2NiKHNlbGYsIGJ1dHRvbiwgZXZlbnQpOgorICAgICAgICBzZWxmLmltLnNldF9mcm9tX2ZpbGUoaGljLklDT05fSU5ESV9BRERfSE9WRVJfRklMRSkKKworICAgIGRlZiBhZGRfbGVhdmVfY2Ioc2VsZiwgYnV0dG9uLCBldmVudCk6CisgICAgICAgIHNlbGYuaW0uc2V0X2Zyb21fZmlsZShoaWMuSUNPTl9JTkRJX0FERF9GSUxFKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRpdGxlLCBsYXllcnMsIGxheWVyc19ub25fcmVtb3ZhYmxlLCBhbGxfbGF5ZXJzLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zPU5vbmUpOgorICAgICAgICBzdXBlcihMYXllclNlbGVjdGlvbkRpYWxvZywgc2VsZikuX19pbml0X18odGl0bGUsIHBhcmVudCwgZmxhZ3MsIGJ1dHRvbnMpCisKKyAgICAgICAgIyBjbGFzcyBtZW1iZXJzIGZyb20gb3RoZXIgb2JqZWN0cworICAgICAgICBzZWxmLmxheWVycyA9IGxheWVycworICAgICAgICBzZWxmLmxheWVyc19ub25fcmVtb3ZhYmxlID0gbGF5ZXJzX25vbl9yZW1vdmFibGUKKyAgICAgICAgc2VsZi5hbGxfbGF5ZXJzID0gYWxsX2xheWVycworICAgICAgICBzZWxmLmxheWVyc19jaGFuZ2VkID0gRmFsc2UKKworICAgICAgICAjIGljb24gZm9yIHJlbW92ZSBidXR0b24gaW4gVHJlZVZpZXcKKyAgICAgICAgaW0gPSBndGsuSW1hZ2UoKQorICAgICAgICBpbS5zZXRfZnJvbV9maWxlKGhpYy5JQ09OX0lORElfUkVNT1ZFX0ZJTEUpCisgICAgICAgIHNlbGYucmVtX2ljb24gPSBpbS5nZXRfcGl4YnVmKCkKKworICAgICAgICAjIGNsYXNzIG1lbWJlcnMgZm9yIGludGVybmFsIHVzZQorICAgICAgICBzZWxmLmxheWVyX3N0b3JlID0gTm9uZQorCisgICAgICAgICMgY3JlYXRlIHZpc3VhbCBlbGVtZW50cyBvbiB0aGUgZGlhbG9nCisgICAgICAgIHNlbGYuY3JlYXRlX3Zpc3VhbF9lbGVtZW50cygpCisgICAgICAgIHNlbGYuY29ubmVjdCgicmVzcG9uc2UiLCBzZWxmLnJlc3BvbnNlX2NiKQorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgIGxheWVyX3dpZGdldCwgc2VsZi5sYXllcl9zdG9yZSA9IHNlbGYuZ2VuX2xheWVyX3dpZGdldChzZWxmLmxheWVycywgc2VsZi5hbGxfbGF5ZXJzLCBzZWxmLCBOb25lKQorICAgICAgICBsYXllcl93aWRnZXQuc2V0X3NpemVfcmVxdWVzdCg0NTAsIDI1MCkKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQobGF5ZXJfd2lkZ2V0LCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorICAgICAgICBzZWxmLnNob3dfYWxsKCkKKworICAgIGRlZiByZXNwb25zZV9jYihzZWxmLCBkaWFsb2csIHJlc3BvbnNlX2lkKToKKyAgICAgICAgbW9kZWwgPSBzZWxmLmxheWVyX3N0b3JlCisgICAgICAgIGl0ID0gbW9kZWwuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICBsYXllcnMgPSBbXQorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIGxheWVycy5hcHBlbmQobW9kZWwuZ2V0X3ZhbHVlKGl0LCAwKSkKKyAgICAgICAgICAgIGl0ID0gbW9kZWwuaXRlcl9uZXh0KGl0KQorCisgICAgICAgIHNlbGYubGF5ZXJzX2NoYW5nZWQgPSAoc2VsZi5sYXllcnMgIT0gbGF5ZXJzKQorICAgICAgICBzZWxmLmxheWVycyA9IGxheWVycworCisgICAgIiIiCisgICAgQSBjdXN0b20gY2VsbF9kYXRhX2Z1bmMgdG8gZHJhdyBhIGRlbGV0ZSAnYnV0dG9uJyBpbiB0aGUgVHJlZVZpZXcgZm9yIGxheWVycworICAgIG90aGVyIHRoYW4gdGhlIG1ldGEgbGF5ZXIuIFRoZSBkZWxldGlvbiBvZiB3aGljaCBpcyBwcmV2ZW50ZWQgc28gdGhhdCB0aGUKKyAgICB1c2VyIGNhbid0IHNob290IHRoZW1zZWx2ZXMgaW4gdGhlIGZvb3QgdG9vIGJhZGx5LgorICAgICIiIgorICAgIGRlZiBkcmF3X2RlbGV0ZV9idXR0b25fY2Ioc2VsZiwgY29sLCBjZWxsLCBtb2RlbCwgaXQsIHR2KToKKyAgICAgICAgcGF0aCA9ICBtb2RlbC5nZXRfdmFsdWUoaXQsIDApCisgICAgICAgIGlmIHBhdGggaW4gc2VsZi5sYXllcnNfbm9uX3JlbW92YWJsZToKKyAgICAgICAgICAgIGNlbGwuc2V0X3NlbnNpdGl2ZShGYWxzZSkKKyAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCdwaXhidWYnLCBOb25lKQorICAgICAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkoJ21vZGUnLCBndGsuQ0VMTF9SRU5ERVJFUl9NT0RFX0lORVJUKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkoJ3BpeGJ1ZicsIHNlbGYucmVtX2ljb24pCisgICAgICAgICAgICBjZWxsLnNldF9zZW5zaXRpdmUoVHJ1ZSkKKyAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCdtb2RlJywgZ3RrLkNFTExfUkVOREVSRVJfTU9ERV9BQ1RJVkFUQUJMRSkKKworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIiIiCisgICAgQSBjdXN0b20gY2VsbF9kYXRhX2Z1bmMgdG8gd3JpdGUgYW4gZXh0cmEgbWVzc2FnZSBpbnRvIHRoZSBsYXllciBwYXRoIGNlbGwKKyAgICBmb3IgdGhlIG1ldGEgbGF5ZXIuIFdlIHNob3VsZCBpbmZvcm0gdGhlIHVzZXIgdGhhdCB0aGV5IGNhbid0IHJlbW92ZSBpdCBmb3IKKyAgICB0aGVpciBvd24gc2FmZXR5LgorICAgICIiIgorICAgIGRlZiBkcmF3X2xheWVyX3BhdGhfY2Ioc2VsZiwgY29sLCBjZWxsLCBtb2RlbCwgaXQpOgorICAgICAgICBwYXRoID0gbW9kZWwuZ2V0X3ZhbHVlKGl0LCAwKQorICAgICAgICBpZiBwYXRoIGluIHNlbGYubGF5ZXJzX25vbl9yZW1vdmFibGU6CisgICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSgnbWFya3VwJywgIjxiPkl0IGNhbm5vdCBiZSByZW1vdmVkPC9iPlxuJXMiICUgcGF0aCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCd0ZXh0JywgcGF0aCkKKworICAgIGRlZiBkZWxfY2VsbF9jbGlja2VkX2NiKHNlbGYsIGNlbGwsIHBhdGgsIG1vZGVsKToKKyAgICAgICAgaXQgPSBtb2RlbC5nZXRfaXRlcl9mcm9tX3N0cmluZyhwYXRoKQorICAgICAgICBtb2RlbC5yZW1vdmUoaXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvcGFyc2luZ3dhcm5pbmdzZGlhbG9nLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3BhcnNpbmd3YXJuaW5nc2RpYWxvZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2JhYzM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3BhcnNpbmd3YXJuaW5nc2RpYWxvZy5weQpAQCAtMCwwICsxLDE2MyBAQAorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBDcmlzdGlhbmEgVm9pY3UgPGNyaXN0aWFuYS52b2ljdUBpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCitpbXBvcnQgZ29iamVjdAorZnJvbSBiYi51aS5jcnVtYnMuaG9id2lkZ2V0IGltcG9ydCBIb2JBbHRCdXR0b24KK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNkaWFsb2cgaW1wb3J0IENydW1ic0RpYWxvZworCisiIiIKK1RoZSBmb2xsb3dpbmcgYXJlIGNvbnZlbmllbmNlIGNsYXNzZXMgZm9yIGltcGxlbWVudGluZyBHTk9NRSBISUcgY29tcGxpYW50CitCaXRCYWtlIEdVSSdzCitJbiBzdW1tYXJ5OiBzcGFjaW5nID0gMTJweCwgYm9yZGVyLXdpZHRoID0gNnB4CisiIiIKKworIworIyBQYXJzaW5nV2FybmluZ3NEaWFsb2cKKyMKK2NsYXNzIFBhcnNpbmdXYXJuaW5nc0RpYWxvZyAoQ3J1bWJzRGlhbG9nKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aXRsZSwgd2FybmluZ3MsIHBhcmVudCwgZmxhZ3MsIGJ1dHRvbnM9Tm9uZSk6CisgICAgICAgIHN1cGVyKFBhcnNpbmdXYXJuaW5nc0RpYWxvZywgc2VsZikuX19pbml0X18odGl0bGUsIHBhcmVudCwgZmxhZ3MsIGJ1dHRvbnMpCisKKyAgICAgICAgc2VsZi53YXJuaW5ncyA9IHdhcm5pbmdzCisgICAgICAgIHNlbGYud2FybmluZ19vbiA9IDAKKyAgICAgICAgc2VsZi53YXJuX25iID0gbGVuKHdhcm5pbmdzKQorCisgICAgICAgICMgY3JlYXRlIHZpc3VhbCBlbGVtZW50cyBvbiB0aGUgZGlhbG9nCisgICAgICAgIHNlbGYuY3JlYXRlX3Zpc3VhbF9lbGVtZW50cygpCisKKyAgICBkZWYgY2FuY2VsX2J1dHRvbl9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmRlc3Ryb3koKQorCisgICAgZGVmIHByZXZpb3VzX2J1dHRvbl9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLndhcm5pbmdfb24gPSBzZWxmLndhcm5pbmdfb24gLSAxCisgICAgICAgIHNlbGYucmVmcmVzaF9jb21wb25lbnRzKCkKKworICAgIGRlZiBuZXh0X2J1dHRvbl9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLndhcm5pbmdfb24gPSBzZWxmLndhcm5pbmdfb24gKyAxCisgICAgICAgIHNlbGYucmVmcmVzaF9jb21wb25lbnRzKCkKKworICAgIGRlZiByZWZyZXNoX2NvbXBvbmVudHMoc2VsZik6CisgICAgICAgIGxibCA9IHNlbGYud2FybmluZ3Nbc2VsZi53YXJuaW5nX29uXQorICAgICAgICAjd2hlbiB0aGUgd2FybmluZyB0ZXh0IGhhcyBtb3JlIHRoYW4gNDAwIGNoYXJzLCBpdCB1c2VzIGEgc2Nyb2xsIGJhcgorICAgICAgICBpZiAwPD0gbGVuKGxibCkgPCA0MDA6CisgICAgICAgICAgICBzZWxmLndhcm5pbmdfbGFiZWwuc2V0X3NpemVfcmVxdWVzdCgzMjAsIDIzMCkKKyAgICAgICAgICAgIHNlbGYud2FybmluZ19sYWJlbC5zZXRfdXNlX21hcmt1cChUcnVlKQorICAgICAgICAgICAgc2VsZi53YXJuaW5nX2xhYmVsLnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYud2FybmluZ19sYWJlbC5zZXRfbWFya3VwKGxibCkKKyAgICAgICAgICAgIHNlbGYud2FybmluZ19sYWJlbC5zZXRfcHJvcGVydHkoInlhbGlnbiIsIDAuMDApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnRleHRXaW5kb3cuc2V0X3NoYWRvd190eXBlKGd0ay5TSEFET1dfSU4pCisgICAgICAgICAgICBzZWxmLnRleHRXaW5kb3cuc2V0X3BvbGljeShndGsuUE9MSUNZX0FVVE9NQVRJQywgZ3RrLlBPTElDWV9BVVRPTUFUSUMpCisgICAgICAgICAgICBzZWxmLm1zZ1ZpZXcgPSBndGsuVGV4dFZpZXcoKQorICAgICAgICAgICAgc2VsZi5tc2dWaWV3LnNldF9lZGl0YWJsZShGYWxzZSkKKyAgICAgICAgICAgIHNlbGYubXNnVmlldy5zZXRfd3JhcF9tb2RlKGd0ay5XUkFQX1dPUkQpCisgICAgICAgICAgICBzZWxmLm1zZ1ZpZXcuc2V0X2N1cnNvcl92aXNpYmxlKEZhbHNlKQorICAgICAgICAgICAgc2VsZi5tc2dWaWV3LnNldF9zaXplX3JlcXVlc3QoMzIwLCAyMzApCisgICAgICAgICAgICBzZWxmLmJ1ZiA9IGd0ay5UZXh0QnVmZmVyKCkKKyAgICAgICAgICAgIHNlbGYuYnVmLnNldF90ZXh0KGxibCkKKyAgICAgICAgICAgIHNlbGYubXNnVmlldy5zZXRfYnVmZmVyKHNlbGYuYnVmKQorICAgICAgICAgICAgc2VsZi50ZXh0V2luZG93LmFkZChzZWxmLm1zZ1ZpZXcpCisgICAgICAgICAgICBzZWxmLm1zZ1ZpZXcuc2hvdygpCisKKyAgICAgICAgaWYgc2VsZi53YXJuaW5nX29uPT0wOgorICAgICAgICAgICAgc2VsZi5wcmV2aW91c19idXR0b24uc2V0X3NlbnNpdGl2ZShGYWxzZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucHJldmlvdXNfYnV0dG9uLnNldF9zZW5zaXRpdmUoVHJ1ZSkKKworICAgICAgICBpZiBzZWxmLndhcm5pbmdfb249PXNlbGYud2Fybl9uYi0xOgorICAgICAgICAgICAgc2VsZi5uZXh0X2J1dHRvbi5zZXRfc2Vuc2l0aXZlKEZhbHNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5uZXh0X2J1dHRvbi5zZXRfc2Vuc2l0aXZlKFRydWUpCisKKyAgICAgICAgaWYgc2VsZi53YXJuX25iPjE6CisgICAgICAgICAgICBzZWxmLmhlYWRpbmcgPSAiV2FybmluZyAiICsgc3RyKHNlbGYud2FybmluZ19vbiArIDEpICsgIiBvZiAiICsgc3RyKHNlbGYud2Fybl9uYikKKyAgICAgICAgICAgIHNlbGYuaGVhZGluZ19sYWJlbC5zZXRfbWFya3VwKCc8c3BhbiB3ZWlnaHQ9ImJvbGQiPiVzPC9zcGFuPicgJSBzZWxmLmhlYWRpbmcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmhlYWRpbmcgPSAiV2FybmluZyIKKyAgICAgICAgICAgIHNlbGYuaGVhZGluZ19sYWJlbC5zZXRfbWFya3VwKCc8c3BhbiB3ZWlnaHQ9ImJvbGQiPiVzPC9zcGFuPicgJSBzZWxmLmhlYWRpbmcpCisKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisKKyAgICAgICAgaWYgMDw9IGxlbihsYmwpIDwgNDAwOgorICAgICAgICAgICAgc2VsZi50ZXh0V2luZG93LmhpZGUoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi53YXJuaW5nX2xhYmVsLmhpZGUoKQorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgIHNlbGYuc2V0X3NpemVfcmVxdWVzdCgzNTAsIDM1MCkKKyAgICAgICAgc2VsZi5oZWFkaW5nX2xhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgc2VsZi5oZWFkaW5nX2xhYmVsLnNldF9hbGlnbm1lbnQoMCwgMCkKKyAgICAgICAgc2VsZi53YXJuaW5nX2xhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgc2VsZi53YXJuaW5nX2xhYmVsLnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgIHNlbGYud2FybmluZ19sYWJlbC5zZXRfYWxpZ25tZW50KDAsIDApCisgICAgICAgIHNlbGYudGV4dFdpbmRvdyA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisKKyAgICAgICAgdGFibGUgPSBndGsuVGFibGUoMSwgMTAsIEZhbHNlKQorCisgICAgICAgIGNhbmNlbF9idXR0b24gPSBndGsuQnV0dG9uKCkKKyAgICAgICAgY2FuY2VsX2J1dHRvbi5zZXRfbGFiZWwoIkNsb3NlIikKKyAgICAgICAgY2FuY2VsX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5jYW5jZWxfYnV0dG9uX2NiKQorICAgICAgICBjYW5jZWxfYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoMTEwLCAzMCkKKworICAgICAgICBzZWxmLnByZXZpb3VzX2J1dHRvbiA9IGd0ay5CdXR0b24oKQorICAgICAgICBpbWFnZTEgPSBndGsuaW1hZ2VfbmV3X2Zyb21fc3RvY2soZ3RrLlNUT0NLX0dPX0JBQ0ssIGd0ay5JQ09OX1NJWkVfQlVUVE9OKQorICAgICAgICBpbWFnZTEuc2hvdygpCisgICAgICAgIGJveCA9IGd0ay5IQm94KEZhbHNlLCA2KQorICAgICAgICBib3guc2hvdygpCisgICAgICAgIHNlbGYucHJldmlvdXNfYnV0dG9uLmFkZChib3gpCisgICAgICAgIGxibCA9IGd0ay5MYWJlbCgiUHJldmlvdXMiKQorICAgICAgICBsYmwuc2hvdygpCisgICAgICAgIGJveC5wYWNrX3N0YXJ0KGltYWdlMSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPTMpCisgICAgICAgIGJveC5wYWNrX3N0YXJ0KGxibCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSwgcGFkZGluZz0zKQorICAgICAgICBzZWxmLnByZXZpb3VzX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5wcmV2aW91c19idXR0b25fY2IpCisgICAgICAgIHNlbGYucHJldmlvdXNfYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoMTEwLCAzMCkKKworICAgICAgICBzZWxmLm5leHRfYnV0dG9uID0gZ3RrLkJ1dHRvbigpCisgICAgICAgIGltYWdlMiA9IGd0ay5pbWFnZV9uZXdfZnJvbV9zdG9jayhndGsuU1RPQ0tfR09fRk9SV0FSRCwgZ3RrLklDT05fU0laRV9CVVRUT04pCisgICAgICAgIGltYWdlMi5zaG93KCkKKyAgICAgICAgYm94ID0gZ3RrLkhCb3goRmFsc2UsIDYpCisgICAgICAgIGJveC5zaG93KCkKKyAgICAgICAgc2VsZi5uZXh0X2J1dHRvbi5hZGQoYm94KQorICAgICAgICBsYmwgPSBndGsuTGFiZWwoIk5leHQiKQorICAgICAgICBsYmwuc2hvdygpCisgICAgICAgIGJveC5wYWNrX3N0YXJ0KGxibCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSwgcGFkZGluZz0zKQorICAgICAgICBib3gucGFja19zdGFydChpbWFnZTIsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSwgcGFkZGluZz0zKQorICAgICAgICBzZWxmLm5leHRfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLm5leHRfYnV0dG9uX2NiKQorICAgICAgICBzZWxmLm5leHRfYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoMTEwLCAzMCkKKworICAgICAgICAjd2hlbiB0aGVyZSBtb3JlIHRoYW4gb25lIHdhcm5pbmcsIHdlIG5lZWQgInByZXZpb3VzIiBhbmQgIm5leHQiIGJ1dHRvbgorICAgICAgICBpZiBzZWxmLndhcm5fbmI+MToKKyAgICAgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYuaGVhZGluZ19sYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi53YXJuaW5nX2xhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZWxmLnRleHRXaW5kb3csIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgICAgIHRhYmxlLmF0dGFjaChjYW5jZWxfYnV0dG9uLCA2LCA3LCAwLCAxLCB4b3B0aW9ucz1ndGsuU0hSSU5LKQorICAgICAgICAgICAgdGFibGUuYXR0YWNoKHNlbGYucHJldmlvdXNfYnV0dG9uLCA3LCA4LCAwLCAxLCB4b3B0aW9ucz1ndGsuU0hSSU5LKQorICAgICAgICAgICAgdGFibGUuYXR0YWNoKHNlbGYubmV4dF9idXR0b24sIDgsIDksIDAsIDEsIHhvcHRpb25zPWd0ay5TSFJJTkspCisgICAgICAgICAgICBzZWxmLnZib3gucGFja19lbmQodGFibGUsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYuaGVhZGluZ19sYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi53YXJuaW5nX2xhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZWxmLnRleHRXaW5kb3csIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgICAgIGNhbmNlbF9idXR0b24gPSBzZWxmLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX0NBTkNFTCkKKyAgICAgICAgICAgIEhvYkFsdEJ1dHRvbi5zdHlsZV9idXR0b24oY2FuY2VsX2J1dHRvbikKKworICAgICAgICBzZWxmLnJlZnJlc2hfY29tcG9uZW50cygpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvcHJvcGVydHlkaWFsb2cucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvcHJvcGVydHlkaWFsb2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDliOWNlNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9wcm9wZXJ0eWRpYWxvZy5weQpAQCAtMCwwICsxLDQzNyBAQAorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBBbmRyZWkgRGludSA8YW5kcmVpLmFkcmlhbnguZGludUBpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgZ3RrCitpbXBvcnQgZ29iamVjdAoraW1wb3J0IG9zCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBnbGliCitmcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzZGlhbG9nIGltcG9ydCBDcnVtYnNEaWFsb2cKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5zZXR0aW5nc3VpaGVscGVyIGltcG9ydCBTZXR0aW5nc1VJSGVscGVyCitmcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzbWVzc2FnZWRpYWxvZyBpbXBvcnQgQ3J1bWJzTWVzc2FnZURpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmxheWVyc2VsZWN0aW9uZGlhbG9nIGltcG9ydCBMYXllclNlbGVjdGlvbkRpYWxvZworCisiIiIKK1RoZSBmb2xsb3dpbmcgYXJlIGNvbnZlbmllbmNlIGNsYXNzZXMgZm9yIGltcGxlbWVudGluZyBHTk9NRSBISUcgY29tcGxpYW50CitCaXRCYWtlIEdVSSdzCitJbiBzdW1tYXJ5OiBzcGFjaW5nID0gMTJweCwgYm9yZGVyLXdpZHRoID0gNnB4CisiIiIKKworY2xhc3MgUHJvcGVydHlEaWFsb2coQ3J1bWJzRGlhbG9nKToKKwkKKwlkZWYgX19pbml0X18oc2VsZiwgdGl0bGUsIHBhcmVudCwgaW5mb3JtYXRpb24sIGZsYWdzLCBidXR0b25zPU5vbmUpOgorCQkKKwkJc3VwZXIoUHJvcGVydHlEaWFsb2csIHNlbGYpLl9faW5pdF9fKHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYucHJvcGVydGllcyA9IGluZm9ybWF0aW9uCisKKyAgICAgICAgICAgICAgICBpZiBsZW4oc2VsZi5wcm9wZXJ0aWVzKSA9PSAxMDoKKwkJICAgICAgICBzZWxmLmNyZWF0ZV9yZWNpcGVfdmlzdWFsX2VsZW1lbnRzKCkKKyAgICAgICAgICAgICAgICBlbGlmIGxlbihzZWxmLnByb3BlcnRpZXMpID09IDU6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNyZWF0ZV9wYWNrYWdlX3Zpc3VhbF9lbGVtZW50cygpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlX2luZm9ybWF0aW9uX3Zpc3VhbF9lbGVtZW50cygpCisKKworICAgICAgICBkZWYgY3JlYXRlX2luZm9ybWF0aW9uX3Zpc3VhbF9lbGVtZW50cyhzZWxmKToKKworICAgICAgICAgICAgICAgIEhPQl9JQ09OX0JBU0VfRElSID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkpLCAoImljb25zLyIpKQorICAgICAgICAgICAgICAgIElDT05fUEFDS0FHRVNfRElTUExBWV9GSUxFICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ2luZm8vaW5mb19kaXNwbGF5LnBuZycpKQorCisgICAgICAgICAgICAgICAgc2VsZi5zZXRfcmVzaXphYmxlKEZhbHNlKQorCisgICAgICAgICAgICAgICAgc2VsZi50YWJsZSA9IGd0ay5UYWJsZSgxLDEsRmFsc2UpCisgICAgICAgICAgICAgICAgc2VsZi50YWJsZS5zZXRfcm93X3NwYWNpbmdzKDApCisgICAgICAgICAgICAgICAgc2VsZi50YWJsZS5zZXRfY29sX3NwYWNpbmdzKDApCisKKyAgICAgICAgICAgICAgICBzZWxmLmltYWdlID0gZ3RrLkltYWdlKCkKKyAgICAgICAgICAgICAgICBzZWxmLmltYWdlLnNldF9mcm9tX2ZpbGUoSUNPTl9QQUNLQUdFU19ESVNQTEFZX0ZJTEUpCisgICAgICAgICAgICAgICAgc2VsZi5pbWFnZS5zZXRfcHJvcGVydHkoInhhbGlnbiIsMCkKKyAgICAgICAgICAgICAgICAjc2VsZi52Ym94LmFkZChzZWxmLmltYWdlKQorCisgICAgICAgICAgICAgICAgaW1hZ2VfaW5mbyA9IHNlbGYucHJvcGVydGllcy5zcGxpdCgiKiIpWzBdCisgICAgICAgICAgICAgICAgaW5mbyA9IHNlbGYucHJvcGVydGllcy5zcGxpdCgiKiIpWzFdCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdmJveCA9IGd0ay5WQm94KFRydWUsIHNwYWNpbmc9MzApICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoRmFsc2UpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKGltYWdlX2luZm8pCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisKKyAgICAgICAgICAgICAgICBzZWxmLmluZm9fbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgIHNlbGYuaW5mb19sYWJlbC5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5pbmZvX2xhYmVsLnNldF9tYXJrdXAoaW5mbykKKyAgICAgICAgICAgICAgICBzZWxmLmluZm9fbGFiZWwuc2V0X3Byb3BlcnR5KCJ5YWxpZ24iLCAwLjUpCisKKyAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLmF0dGFjaChzZWxmLmltYWdlLCAwLDEsMCwxLCB4b3B0aW9ucz1ndGsuRklMTHxndGsuRVhQQU5ELCB5b3B0aW9ucz1ndGsuRklMTCx4cGFkZGluZz01LHlwYWRkaW5nPTUpCisgICAgICAgICAgICAgICAgc2VsZi50YWJsZS5hdHRhY2goc2VsZi5sYWJlbF9zaG9ydCwgMCwxLDAsMSwgeG9wdGlvbnM9Z3RrLkZJTEx8Z3RrLkVYUEFORCwgeW9wdGlvbnM9Z3RrLkZJTEwseHBhZGRpbmc9NDAseXBhZGRpbmc9NSkKKyAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLmF0dGFjaChzZWxmLmluZm9fbGFiZWwsIDAsMSwxLDIsIHhvcHRpb25zPWd0ay5GSUxMfGd0ay5FWFBBTkQsIHlvcHRpb25zPWd0ay5GSUxMLHhwYWRkaW5nPTQwLHlwYWRkaW5nPTEwKQorICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYudGFibGUpCisgICAgICAgICAgICAgICAgc2VsZi5jb25uZWN0KCdkZWxldGUtZXZlbnQnLCBsYW1iZGEgdywgZTogc2VsZi5kZXN0cm95KCkgb3IgVHJ1ZSkgCisKKyAgICAgICAgZGVmIHRyZWVWaWV3VG9vbHRpcCggc2VsZiwgd2lkZ2V0LCBlLCB0b29sdGlwcywgY2VsbCwgZW1wdHlUZXh0PSIiICk6CisgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRoLGNvbCx4LHkpID0gd2lkZ2V0LmdldF9wYXRoX2F0X3BvcyggaW50KGUueCksIGludChlLnkpICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ID0gd2lkZ2V0LmdldF9tb2RlbCgpLmdldF9pdGVyKHBhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHdpZGdldC5nZXRfbW9kZWwoKS5nZXRfdmFsdWUoaXQsY2VsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlIGluIHNlbGYudG9vbHRpcF9pdGVtczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcHMuc2V0X3RpcCh3aWRnZXQsIHNlbGYudG9vbHRpcF9pdGVtc1t2YWx1ZV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBzLmVuYWJsZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwcy5zZXRfdGlwKHdpZGdldCwgZW1wdHlUZXh0KQorICAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwcy5zZXRfdGlwKHdpZGdldCwgZW1wdHlUZXh0KQorCisgICAgICAgICAgICAgICAgCisgICAgICAgIGRlZiBjcmVhdGVfcGFja2FnZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisKKyAgICAgICAgICAgICAgICBpbXBvcnQganNvbgorCisgICAgICAgICAgICAgICAgbmFtZSA9IHNlbGYucHJvcGVydGllc1snbmFtZSddCisgICAgICAgICAgICAgICAgYmluYiA9IHNlbGYucHJvcGVydGllc1snYmluYiddCisgICAgICAgICAgICAgICAgc2l6ZSA9IHNlbGYucHJvcGVydGllc1snc2l6ZSddCisgICAgICAgICAgICAgICAgcmVjaXBlID0gc2VsZi5wcm9wZXJ0aWVzWydyZWNpcGUnXQorICAgICAgICAgICAgICAgIGZpbGVfbGlzdCA9IGpzb24ubG9hZHMoc2VsZi5wcm9wZXJ0aWVzWydmaWxlc19saXN0J10pCisKKyAgICAgICAgICAgICAgICBmaWxlc190ZW1wID0gJycKKyAgICAgICAgICAgICAgICBwYXRoc190ZW1wID0gJycKKyAgICAgICAgICAgICAgICBmaWxlc19iaW5iID0gW10KKyAgICAgICAgICAgICAgICBwYXRoc19iaW5iID0gW10KKworICAgICAgICAgICAgICAgIHNlbGYudG9vbHRpcF9pdGVtcyA9IHt9CisKKyAgICAgICAgICAgICAgICBzZWxmLnNldF9yZXNpemFibGUoRmFsc2UpCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgI2NsZWFuaW5nIG91dCB0aGUgcmVjaXBlIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgcmVjaXBlID0gcmVjaXBlLnNwbGl0KCIrIilbMF0KKworICAgICAgICAgICAgICAgIHZib3ggPSBndGsuVkJveChUcnVlLHNwYWNpbmcgPSAwKQorCisgICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTkFNRSBST1cgKyBDT0wgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zaXplX3JlcXVlc3QoMzAwLC0xKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9tYXJrdXAoIjxzcGFuIHdlaWdodD1cImJvbGRcIj5OYW1lOiA8L3NwYW4+IiArIG5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKworICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFNJWkUgUk9XICsgQ09MICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zaXplX3JlcXVlc3QoMzAwLC0xKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9tYXJrdXAoIjxzcGFuIHdlaWdodD1cImJvbGRcIj5TaXplOiA8L3NwYW4+IiArIHNpemUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX3Nob3J0KQorCisgICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBSRUNJUEUgUk9XICsgQ09MICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zaXplX3JlcXVlc3QoMzAwLC0xKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9tYXJrdXAoIjxzcGFuIHdlaWdodD1cImJvbGRcIj5SZWNpcGU6IDwvc3Bhbj4iICsgcmVjaXBlKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQorCisgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX3Nob3J0KQorCisgICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBCSU5CIFJPVyArIENPTCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBiaW5iICE9ICcnOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydCA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X21hcmt1cCgiPHNwYW4gd2VpZ2h0PVwiYm9sZFwiPkJyb3VnaHQgaW4gYnk6IDwvc3Bhbj4iKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApICAgICAgICAgICAgICAgIAorCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8gPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9zaXplX3JlcXVlc3QoMzAwLC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9tYXJrdXAoYmluYikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX3Nob3J0KQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX2luZm8pCisKKyAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgRklMRVMgQlJPVUdIVCBCWSBQQUNLQUdFUyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgICAgICAgICAgICAgaWYgZmlsZV9saXN0OgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXh0V2luZG93ID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGV4dFdpbmRvdy5zZXRfc2hhZG93X3R5cGUoZ3RrLlNIQURPV19JTikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGV4dFdpbmRvdy5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfQVVUT01BVElDLCBndGsuUE9MSUNZX0FVVE9NQVRJQykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGV4dFdpbmRvdy5zZXRfc2l6ZV9yZXF1ZXN0KDEwMCwgMTcwKQorCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZmlsZXNfc3RvcmUgPSBndGsuTGlzdFN0b3JlKHN0cikKKworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYWNrYWdlZmlsZXNfdHYgPSBndGsuVHJlZVZpZXcoKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYWNrYWdlZmlsZXNfdHYuc2V0X3J1bGVzX2hpbnQoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZWZpbGVzX3R2LnNldF9oZWFkZXJzX3Zpc2libGUoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGV4dFdpbmRvdy5hZGQoc2VsZi5wYWNrYWdlZmlsZXNfdHYpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2VsbDEgPSBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpCisgICAgICAgICAgICAgICAgICAgICAgICBjb2wxID0gZ3RrLlRyZWVWaWV3Q29sdW1uKCdQYWNrYWdlIGZpbGVzJywgc2VsZi5jZWxsMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbDEuc2V0X2NlbGxfZGF0YV9mdW5jKHNlbGYuY2VsbDEsIHNlbGYucmVnZXhfZmllbGQpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhY2thZ2VmaWxlc190di5hcHBlbmRfY29sdW1uKGNvbDEpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zID0gZmlsZV9saXN0LmtleXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuc29ydCgpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbHBhdGggPSBpdGVtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIGxlbihpdGVtKSA+IDM1OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtWzpsZW4oaXRlbSkvMl0gKyAiIiArIGl0ZW1bbGVuKGl0ZW0pLzIrMTpdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihpdGVtKSA9PSAzNToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtID0gaXRlbVs6bGVuKGl0ZW0pLzJdICsgIi4uLiIgKyBpdGVtW2xlbihpdGVtKS8yKzM6XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudG9vbHRpcF9pdGVtc1tpdGVtXSA9IGZ1bGxwYXRoCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZWZpbGVzX3N0b3JlLmFwcGVuZChbc3RyKGl0ZW0pXSkKKworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYWNrYWdlZmlsZXNfdHYuc2V0X21vZGVsKHBhY2thZ2VmaWxlc19zdG9yZSkKKworICAgICAgICAgICAgICAgICAgICAgICAgdGlwcyA9IGd0ay5Ub29sdGlwcygpCisgICAgICAgICAgICAgICAgICAgICAgICB0aXBzLnNldF90aXAoc2VsZi5wYWNrYWdlZmlsZXNfdHYsICIiKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYWNrYWdlZmlsZXNfdHYuY29ubmVjdCgibW90aW9uLW5vdGlmeS1ldmVudCIsIHNlbGYudHJlZVZpZXdUb29sdGlwLCB0aXBzLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYWNrYWdlZmlsZXNfdHYuc2V0X2V2ZW50cyhndGsuZ2RrLlBPSU5URVJfTU9USU9OX01BU0spCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi50ZXh0V2luZG93KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKKyAgICAgICAgICAgICAgICBzZWxmLnZib3guc2hvd19hbGwoKQorCisKKyAgICAgICAgZGVmIHJlZ2V4X2ZpZWxkKHNlbGYsIGNvbHVtbiwgY2VsbCwgbW9kZWwsIGl0ZXIpOgorICAgICAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCd0ZXh0JywgbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIsIDApKQorICAgICAgICAgICAgICAgIHJldHVybgorCisKKwlkZWYgY3JlYXRlX3JlY2lwZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisKKyAgICAgICAgICAgICAgICBzdW1tYXJ5ID0gc2VsZi5wcm9wZXJ0aWVzWydzdW1tYXJ5J10KKwkJbmFtZSA9IHNlbGYucHJvcGVydGllc1snbmFtZSddCisJCXZlcnNpb24gPSBzZWxmLnByb3BlcnRpZXNbJ3ZlcnNpb24nXQorCQlyZXZpc2lvbiA9IHNlbGYucHJvcGVydGllc1sncmV2aXNpb24nXQorCQliaW5iID0gc2VsZi5wcm9wZXJ0aWVzWydiaW5iJ10KKwkJZ3JvdXAgPSBzZWxmLnByb3BlcnRpZXNbJ2dyb3VwJ10KKwkJbGljZW5zZSA9IHNlbGYucHJvcGVydGllc1snbGljZW5zZSddCisJCWhvbWVwYWdlID0gc2VsZi5wcm9wZXJ0aWVzWydob21lcGFnZSddCisJCWJ1Z3RyYWNrZXIgPSBzZWxmLnByb3BlcnRpZXNbJ2J1Z3RyYWNrZXInXQorCQlkZXNjcmlwdGlvbiA9IHNlbGYucHJvcGVydGllc1snZGVzY3JpcHRpb24nXQorCisgICAgICAgICAgICAgICAgc2VsZi5zZXRfcmVzaXphYmxlKEZhbHNlKQorCQkKKyAgICAgICAgICAgICAgICAjY2xlYW5pbmcgb3V0IHRoZSB2ZXJzaW9uIHZhcmlhYmxlIGFuZCBhbHNvIHRoZSBzdW1tYXJ5CisgICAgICAgICAgICAgICAgdmVyc2lvbiA9IHZlcnNpb24uc3BsaXQoIjoiKVsxXQorICAgICAgICAgICAgICAgIGlmIGxlbih2ZXJzaW9uKSA+IDMwOgorICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IHZlcnNpb24uc3BsaXQoIisiKVswXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gdmVyc2lvbi5zcGxpdCgiLSIpWzBdCisgICAgICAgICAgICAgICAgbGljZW5zZSA9IGxpY2Vuc2UucmVwbGFjZSgiJiIgLCAiYW5kIikKKyAgICAgICAgICAgICAgICBpZiAoaG9tZXBhZ2UgPT0gJycpOgorICAgICAgICAgICAgICAgICAgICAgICAgaG9tZXBhZ2UgPSAndW5rbm93bicKKyAgICAgICAgICAgICAgICBpZiAoYnVndHJhY2tlciA9PSAnJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBidWd0cmFja2VyID0gJ3Vua25vd24nCisgICAgICAgICAgICAgICAgc3VtbWFyeSA9IHN1bW1hcnkuc3BsaXQoIisiKVswXQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICNjYWxjdWxhdGluZyB0aGUgcm93cyBuZWVkZWQgZm9yIHRoZSB0YWJsZQorICAgICAgICAgICAgICAgIGJpbmJfaXRlbXNfY291bnQgPSBsZW4oYmluYi5zcGxpdCgnLCcpKQorICAgICAgICAgICAgICAgIGJpbmJfaXRlbXMgPSBiaW5iLnNwbGl0KCcsJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQorCQl2Ym94ID0gZ3RrLlZCb3goRmFsc2Usc3BhY2luZyA9IDApCisKKyAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFNVTU1BUlkgTEFCRUwgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgICAgICAgICAgICAgICAgCSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBzdW1tYXJ5ICE9ICcnOiAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQgPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfd2lkdGhfY2hhcnMoMzcpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9tYXJrdXAoIjxiPiIgKyBzdW1tYXJ5ICsgIjwvYj4iKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTkFNRSBST1cgKyBDT0wgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQgPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9tYXJrdXAoIjxzcGFuIHdlaWdodD1cImJvbGRcIj5OYW1lOiA8L3NwYW4+IiArIG5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKworICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBWRVJTSU9OIFJPVyArIENPTCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+VmVyc2lvbjogPC9zcGFuPiIgKyB2ZXJzaW9uKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKworICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgUkVWSVNJT04gUk9XICsgQ09MICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQgPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9tYXJrdXAoIjxzcGFuIHdlaWdodD1cImJvbGRcIj5SZXZpc2lvbjogPC9zcGFuPiIgKyByZXZpc2lvbikKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX3Nob3J0KQorCisgICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBHUk9VUCBST1cgKyBDT0wgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQgPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+R3JvdXA6IDwvc3Bhbj4iICsgZ3JvdXApCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKworICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBIT01FUEFHRSBST1cgKyBDT0wgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBob21lcGFnZSAhPSAndW5rbm93bic6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8gPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGhvbWVwYWdlKSA+IDM1OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X21hcmt1cCgiPGEgaHJlZj1cIiIgKyBob21lcGFnZSArICJcIj4iICsgaG9tZXBhZ2VbMDozNV0gKyAiLi4uIiArICI8L2E+IikKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfbWFya3VwKCI8YSBocmVmPVwiIiArIGhvbWVwYWdlICsgIlwiPiIgKyBob21lcGFnZVswOjYwXSArICI8L2E+IikKKworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKSAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8Yj5Ib21lcGFnZTogPC9iPiIpICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9pbmZvKQorICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEJVR1RSQUNLRVIgUk9XICsgQ09MICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBidWd0cmFja2VyICE9ICd1bmtub3duJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mbyA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X3NlbGVjdGFibGUoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4oYnVndHJhY2tlcikgPiAzNToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9tYXJrdXAoIjxhIGhyZWY9XCIiICsgYnVndHJhY2tlciArICJcIj4iICsgYnVndHJhY2tlclswOjM1XSArICIuLi4iICsgIjwvYT4iKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9tYXJrdXAoIjxhIGhyZWY9XCIiICsgYnVndHJhY2tlciArICJcIj4iICsgYnVndHJhY2tlclswOjYwXSArICI8L2E+IikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApICAKKworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydCA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8Yj5CdWd0cmFja2VyOiA8L2I+IikgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX3Nob3J0KQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX2luZm8pCisKKyAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTElDRU5TRSBST1cgKyBDT0wgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8gPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfc2VsZWN0YWJsZShUcnVlKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9tYXJrdXAobGljZW5zZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQorCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydCA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfc2VsZWN0YWJsZShUcnVlKSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+TGljZW5zZTogPC9zcGFuPiIpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX3Nob3J0KQorICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9pbmZvKQorCisgICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgQklOQiBST1crQ09MICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIGJpbmIgIT0gJyc6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+QnJvdWdodCBpbiBieTogPC9zcGFuPiIpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mbyA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X3NlbGVjdGFibGUoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfd2lkdGhfY2hhcnMoMzYpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4oYmluYikgPiAyMDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZWRfd2luZG93ID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxlZF93aW5kb3cuc2V0X3BvbGljeShndGsuUE9MSUNZX05FVkVSLGd0ay5QT0xJQ1lfQUxXQVlTKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVkX3dpbmRvdy5zZXRfc2l6ZV9yZXF1ZXN0KDEwMCwxMDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9tYXJrdXAoYmluYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X3BhZGRpbmcoNiw2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfYWxpZ25tZW50KDAsMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVkX3dpbmRvdy5hZGRfd2l0aF92aWV3cG9ydChzZWxmLmxhYmVsX2luZm8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzY3JvbGxlZF93aW5kb3cpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfbWFya3VwKGJpbmIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X2xpbmVfd3JhcChUcnVlKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYubGFiZWxfaW5mbykKKworICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIERFU0NSSVBUSU9OIFRBRyBST1cgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQgPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X21hcmt1cCgiPHNwYW4gd2VpZ2h0PVwiYm9sZFwiPkRlc2NyaXB0aW9uIDwvc3Bhbj4iKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQorICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBERVNDUklQVElPTiBJTkZPUk1BVElPTiBST1cgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaGJveCA9IGd0ay5IQm94KFRydWUsc3BhY2luZyA9IDApCisKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfd2lkdGhfY2hhcnMoMzYpCisgICAgICAgICAgICAgICAgaWYgbGVuKGRlc2NyaXB0aW9uKSA+IDIwMDoKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZWRfd2luZG93ID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZWRfd2luZG93LnNldF9wb2xpY3koZ3RrLlBPTElDWV9ORVZFUixndGsuUE9MSUNZX0FMV0FZUykKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZWRfd2luZG93LnNldF9zaXplX3JlcXVlc3QoMTAwLDEwMCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKGRlc2NyaXB0aW9uKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9wYWRkaW5nKDYsNikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfYWxpZ25tZW50KDAsMCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVkX3dpbmRvdy5hZGRfd2l0aF92aWV3cG9ydChzZWxmLmxhYmVsX3Nob3J0KQorICAgICAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNjcm9sbGVkX3dpbmRvdykKKyAgICAgICAgICAgICAgICBlbHNlOiAgICAKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKGRlc2NyaXB0aW9uKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKworICAgICAgICAgICAgICAgIHNlbGYudmJveC5zaG93X2FsbCgpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvcHJveHlkZXRhaWxzZGlhbG9nLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3Byb3h5ZGV0YWlsc2RpYWxvZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWU3ZGZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3Byb3h5ZGV0YWlsc2RpYWxvZy5weQpAQCAtMCwwICsxLDkwIEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCitmcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzZGlhbG9nIGltcG9ydCBDcnVtYnNEaWFsb2cKKworIiIiCitUaGUgZm9sbG93aW5nIGFyZSBjb252ZW5pZW5jZSBjbGFzc2VzIGZvciBpbXBsZW1lbnRpbmcgR05PTUUgSElHIGNvbXBsaWFudAorQml0QmFrZSBHVUkncworSW4gc3VtbWFyeTogc3BhY2luZyA9IDEycHgsIGJvcmRlci13aWR0aCA9IDZweAorIiIiCisKK2NsYXNzIFByb3h5RGV0YWlsc0RpYWxvZyAoQ3J1bWJzRGlhbG9nKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aXRsZSwgdXNlciwgcGFzc3dkLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zPU5vbmUpOgorICAgICAgICBzdXBlcihQcm94eURldGFpbHNEaWFsb2csIHNlbGYpLl9faW5pdF9fKHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zKQorICAgICAgICBzZWxmLmNvbm5lY3QoInJlc3BvbnNlIiwgc2VsZi5yZXNwb25zZV9jYikKKworICAgICAgICBzZWxmLmF1dGggPSBub3QgKHVzZXIgPT0gTm9uZSBvciBwYXNzd2QgPT0gTm9uZSBvciB1c2VyID09ICIiKQorICAgICAgICBzZWxmLnVzZXIgPSB1c2VyIG9yICIiCisgICAgICAgIHNlbGYucGFzc3dkID0gcGFzc3dkIG9yICIiCisKKyAgICAgICAgIyBjcmVhdGUgdmlzdWFsIGVsZW1lbnRzIG9uIHRoZSBkaWFsb2cKKyAgICAgICAgc2VsZi5jcmVhdGVfdmlzdWFsX2VsZW1lbnRzKCkKKworICAgIGRlZiBjcmVhdGVfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLmF1dGhfY2hlY2tib3ggPSBndGsuQ2hlY2tCdXR0b24oIlVzZSBhdXRoZW50aWNhdGlvbiIpCisgICAgICAgIHNlbGYuYXV0aF9jaGVja2JveC5zZXRfdG9vbHRpcF90ZXh0KCJDaGVjayB0aGlzIGJveCB0byBzZXQgdGhlIHVzZXJuYW1lIGFuZCB0aGUgcGFzc3dvcmQiKQorICAgICAgICBzZWxmLmF1dGhfY2hlY2tib3guc2V0X2FjdGl2ZShzZWxmLmF1dGgpCisgICAgICAgIHNlbGYuYXV0aF9jaGVja2JveC5jb25uZWN0KCJ0b2dnbGVkIiwgc2VsZi5hdXRoX2NoZWNrYm94X3RvZ2dsZWRfY2IpCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYuYXV0aF9jaGVja2JveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIGhib3ggPSBndGsuSEJveChGYWxzZSwgNikKKyAgICAgICAgc2VsZi51c2VyX2xhYmVsID0gZ3RrLkxhYmVsKCJVc2VybmFtZToiKQorICAgICAgICBzZWxmLnVzZXJfdGV4dCA9IGd0ay5FbnRyeSgpCisgICAgICAgIHNlbGYudXNlcl90ZXh0LnNldF90ZXh0KHNlbGYudXNlcikKKyAgICAgICAgaGJveC5wYWNrX3N0YXJ0KHNlbGYudXNlcl9sYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBoYm94LnBhY2tfZW5kKHNlbGYudXNlcl90ZXh0LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KGhib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBoYm94ID0gZ3RrLkhCb3goRmFsc2UsIDYpCisgICAgICAgIHNlbGYucGFzc3dkX2xhYmVsID0gZ3RrLkxhYmVsKCJQYXNzd29yZDoiKQorICAgICAgICBzZWxmLnBhc3N3ZF90ZXh0ID0gZ3RrLkVudHJ5KCkKKyAgICAgICAgc2VsZi5wYXNzd2RfdGV4dC5zZXRfdGV4dChzZWxmLnBhc3N3ZCkKKyAgICAgICAgaGJveC5wYWNrX3N0YXJ0KHNlbGYucGFzc3dkX2xhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGhib3gucGFja19lbmQoc2VsZi5wYXNzd2RfdGV4dCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChoYm94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgc2VsZi5yZWZyZXNoX2F1dGhfY29tcG9uZW50cygpCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorCisgICAgZGVmIHJlZnJlc2hfYXV0aF9jb21wb25lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLnVzZXJfbGFiZWwuc2V0X3NlbnNpdGl2ZShzZWxmLmF1dGgpCisgICAgICAgIHNlbGYudXNlcl90ZXh0LnNldF9lZGl0YWJsZShzZWxmLmF1dGgpCisgICAgICAgIHNlbGYudXNlcl90ZXh0LnNldF9zZW5zaXRpdmUoc2VsZi5hdXRoKQorICAgICAgICBzZWxmLnBhc3N3ZF9sYWJlbC5zZXRfc2Vuc2l0aXZlKHNlbGYuYXV0aCkKKyAgICAgICAgc2VsZi5wYXNzd2RfdGV4dC5zZXRfZWRpdGFibGUoc2VsZi5hdXRoKQorICAgICAgICBzZWxmLnBhc3N3ZF90ZXh0LnNldF9zZW5zaXRpdmUoc2VsZi5hdXRoKQorCisgICAgZGVmIGF1dGhfY2hlY2tib3hfdG9nZ2xlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmF1dGggPSBzZWxmLmF1dGhfY2hlY2tib3guZ2V0X2FjdGl2ZSgpCisgICAgICAgIHNlbGYucmVmcmVzaF9hdXRoX2NvbXBvbmVudHMoKQorCisgICAgZGVmIHJlc3BvbnNlX2NiKHNlbGYsIGRpYWxvZywgcmVzcG9uc2VfaWQpOgorICAgICAgICBpZiByZXNwb25zZV9pZCA9PSBndGsuUkVTUE9OU0VfT0s6CisgICAgICAgICAgICBpZiBzZWxmLmF1dGg6CisgICAgICAgICAgICAgICAgc2VsZi51c2VyID0gc2VsZi51c2VyX3RleHQuZ2V0X3RleHQoKQorICAgICAgICAgICAgICAgIHNlbGYucGFzc3dkID0gc2VsZi5wYXNzd2RfdGV4dC5nZXRfdGV4dCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYudXNlciA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLnBhc3N3ZCA9IE5vbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9yZXRyaWV2ZWltYWdlZGlhbG9nLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3JldHJpZXZlaW1hZ2VkaWFsb2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAxNzEzOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9yZXRyaWV2ZWltYWdlZGlhbG9nLnB5CkBAIC0wLDAgKzEsNTEgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IENyaXN0aWFuYSBWb2ljdSA8Y3Jpc3RpYW5hLnZvaWN1QGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKKworY2xhc3MgUmV0cmlldmVJbWFnZURpYWxvZyAoZ3RrLkZpbGVDaG9vc2VyRGlhbG9nKToKKyAgICAiIiIKKyAgICBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gY3JlYXRlIGEgZGlhbG9nIHRoYXQgcGVybWl0cyB0byByZXRyaWV2ZQorICAgIGEgY3VzdG9tIGltYWdlIHNhdmVkIHByZXZpb3VzbHkgZnJvbSBIb2IuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpcmVjdG9yeSx0aXRsZSwgcGFyZW50LCBmbGFncywgYnV0dG9ucz1Ob25lKToKKyAgICAgICAgc3VwZXIoUmV0cmlldmVJbWFnZURpYWxvZywgc2VsZikuX19pbml0X18odGl0bGUsIE5vbmUsIGd0ay5GSUxFX0NIT09TRVJfQUNUSU9OX09QRU4sCisgICAgICAgICAgICAoZ3RrLlNUT0NLX0NBTkNFTCwgZ3RrLlJFU1BPTlNFX0NBTkNFTCxndGsuU1RPQ0tfT1BFTiwgZ3RrLlJFU1BPTlNFX09LKSkKKyAgICAgICAgc2VsZi5kaXJlY3RvcnkgPSBkaXJlY3RvcnkKKworICAgICAgICAjIGNyZWF0ZSB2aXN1YWwgZWxlbWVudHMgb24gdGhlIGRpYWxvZworICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgIHNlbGYuc2V0X3Nob3dfaGlkZGVuKFRydWUpCisgICAgICAgIHNlbGYuc2V0X2RlZmF1bHRfcmVzcG9uc2UoZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICBzZWxmLnNldF9jdXJyZW50X2ZvbGRlcihzZWxmLmRpcmVjdG9yeSkKKworICAgICAgICB2Ym94ID0gc2VsZi5nZXRfY2hpbGRyZW4oKVswXS5nZXRfY2hpbGRyZW4oKVswXS5nZXRfY2hpbGRyZW4oKVswXQorICAgICAgICBmb3IgY2hpbGQgaW4gdmJveC5nZXRfY2hpbGRyZW4oKVswXS5nZXRfY2hpbGRyZW4oKVswXS5nZXRfY2hpbGRyZW4oKVswXS5nZXRfY2hpbGRyZW4oKToKKyAgICAgICAgICAgIHZib3guZ2V0X2NoaWxkcmVuKClbMF0uZ2V0X2NoaWxkcmVuKClbMF0uZ2V0X2NoaWxkcmVuKClbMF0ucmVtb3ZlKGNoaWxkKQorCisgICAgICAgIGxhYmVsMSA9IGd0ay5MYWJlbCgpCisgICAgICAgIGxhYmVsMS5zZXRfdGV4dCgiRmlsZSBzeXN0ZW0iICsgc2VsZi5kaXJlY3RvcnkpCisgICAgICAgIGxhYmVsMS5zaG93KCkKKyAgICAgICAgdmJveC5nZXRfY2hpbGRyZW4oKVswXS5nZXRfY2hpbGRyZW4oKVswXS5nZXRfY2hpbGRyZW4oKVswXS5wYWNrX3N0YXJ0KGxhYmVsMSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPTApCisgICAgICAgIHZib3guZ2V0X2NoaWxkcmVuKClbMF0uZ2V0X2NoaWxkcmVuKClbMV0uZ2V0X2NoaWxkcmVuKClbMF0uaGlkZSgpCisKKyAgICAgICAgc2VsZi5nZXRfY2hpbGRyZW4oKVswXS5nZXRfY2hpbGRyZW4oKVsxXS5nZXRfY2hpbGRyZW4oKVswXS5zZXRfbGFiZWwoIlNlbGVjdCIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvc2F2ZWltYWdlZGlhbG9nLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3NhdmVpbWFnZWRpYWxvZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTk1ZjcwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3NhdmVpbWFnZWRpYWxvZy5weQpAQCAtMCwwICsxLDE1OSBAQAorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgQ3Jpc3RpYW5hIFZvaWN1IDxjcmlzdGlhbmEudm9pY3VAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworaW1wb3J0IGdsaWIKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNkaWFsb2cgaW1wb3J0IENydW1ic0RpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic21lc3NhZ2VkaWFsb2cgaW1wb3J0IENydW1ic01lc3NhZ2VEaWFsb2cKK2Zyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgSG9iQnV0dG9uCisKK2NsYXNzIFNhdmVJbWFnZURpYWxvZyAoQ3J1bWJzRGlhbG9nKToKKyAgICAiIiIKKyAgICBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gY3JlYXRlIGEgZGlhbG9nIHRoYXQgcGVybWl0cyB0byBzYXZlCisgICAgYSBjdXN0b20gaW1hZ2UgaW4gYSBwcmVkZWZpbmVkIGRpcmVjdG9yeS4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGlyZWN0b3J5LCBuYW1lLCBkZXNjcmlwdGlvbiwgdGl0bGUsIHBhcmVudCwgZmxhZ3MsIGJ1dHRvbnM9Tm9uZSk6CisgICAgICAgIHN1cGVyKFNhdmVJbWFnZURpYWxvZywgc2VsZikuX19pbml0X18odGl0bGUsIHBhcmVudCwgZmxhZ3MsIGJ1dHRvbnMpCisgICAgICAgIHNlbGYuZGlyZWN0b3J5ID0gZGlyZWN0b3J5CisgICAgICAgIHNlbGYuYnVpbGRlciA9IHBhcmVudAorICAgICAgICBzZWxmLm5hbWVfZmllbGQgPSBuYW1lCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb25fZmllbGQgPSBkZXNjcmlwdGlvbgorCisgICAgICAgICMgY3JlYXRlIHZpc3VhbCBlbGVtZW50cyBvbiB0aGUgZGlhbG9nCisgICAgICAgIHNlbGYuY3JlYXRlX3Zpc3VhbF9lbGVtZW50cygpCisKKyAgICBkZWYgY3JlYXRlX3Zpc3VhbF9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5zZXRfZGVmYXVsdF9yZXNwb25zZShndGsuUkVTUE9OU0VfT0spCisgICAgICAgIHNlbGYudmJveC5zZXRfYm9yZGVyX3dpZHRoKDYpCisKKyAgICAgICAgc3ViX3Zib3ggPSBndGsuVkJveChGYWxzZSwgMTIpCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHN1Yl92Ym94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGxhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgbGFiZWwuc2V0X2FsaWdubWVudCgwLCAwKQorICAgICAgICBsYWJlbC5zZXRfbWFya3VwKCI8Yj5OYW1lPC9iPiIpCisgICAgICAgIHN1Yl9sYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIHN1Yl9sYWJlbC5zZXRfYWxpZ25tZW50KDAsIDApCisgICAgICAgIGNvbnRlbnQgPSAiSW1hZ2UgcmVjaXBlIG5hbWVzIHNob3VsZCBiZSBhbGwgbG93ZXJjYXNlIGFuZCBpbmNsdWRlIG9ubHkgYWxwaGFudW1lcmljXG4iCisgICAgICAgIGNvbnRlbnQgKz0gImNoYXJhY3RlcnMuIFRoZSBvbmx5IHNwZWNpYWwgY2hhcmFjdGVyIHlvdSBjYW4gdXNlIGlzIHRoZSBBU0NJSSBoeXBoZW4gKC0pLiIKKyAgICAgICAgc3ViX2xhYmVsLnNldF9tYXJrdXAoY29udGVudCkKKyAgICAgICAgc2VsZi5uYW1lX2VudHJ5ID0gZ3RrLkVudHJ5KCkKKyAgICAgICAgc2VsZi5uYW1lX2VudHJ5LnNldF90ZXh0KHNlbGYubmFtZV9maWVsZCkKKyAgICAgICAgc2VsZi5uYW1lX2VudHJ5LnNldF9zaXplX3JlcXVlc3QoMzUwLDMwKQorICAgICAgICBzZWxmLm5hbWVfZW50cnkuY29ubmVjdCgiY2hhbmdlZCIsIHNlbGYubmFtZV9lbnRyeV9jaGFuZ2VkKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQoc3ViX2xhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQoc2VsZi5uYW1lX2VudHJ5LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgc3ViX3Zib3ggPSBndGsuVkJveChGYWxzZSwgMTIpCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHN1Yl92Ym94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGxhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgbGFiZWwuc2V0X2FsaWdubWVudCgwLCAwKQorICAgICAgICBsYWJlbC5zZXRfbWFya3VwKCI8Yj5EZXNjcmlwdGlvbjwvYj4gKG9wdGlvbmFsKSIpCisgICAgICAgIHN1Yl9sYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIHN1Yl9sYWJlbC5zZXRfYWxpZ25tZW50KDAsIDApCisgICAgICAgIHN1Yl9sYWJlbC5zZXRfbWFya3VwKCJUaGUgZGVzY3JpcHRpb24gc2hvdWxkIGJlIGxlc3MgdGhhbiAxNTAgY2hhcmFjdGVycyBsb25nLiIpCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb25fZW50cnkgPSBndGsuVGV4dFZpZXcoKQorICAgICAgICBkZXNjcmlwdGlvbl9idWZmZXIgPSBzZWxmLmRlc2NyaXB0aW9uX2VudHJ5LmdldF9idWZmZXIoKQorICAgICAgICBkZXNjcmlwdGlvbl9idWZmZXIuc2V0X3RleHQoc2VsZi5kZXNjcmlwdGlvbl9maWVsZCkKKyAgICAgICAgZGVzY3JpcHRpb25fYnVmZmVyLmNvbm5lY3QoImluc2VydC10ZXh0Iiwgc2VsZi5saW1pdF9kZXNjcmlwdGlvbl9sZW5ndGgpCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb25fZW50cnkuc2V0X3dyYXBfbW9kZShndGsuV1JBUF9XT1JEKQorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uX2VudHJ5LnNldF9zaXplX3JlcXVlc3QoMzUwLDUwKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQoc3ViX2xhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQoc2VsZi5kZXNjcmlwdGlvbl9lbnRyeSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHN1Yl92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDEyKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzdWJfdmJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIGxhYmVsLnNldF9hbGlnbm1lbnQoMCwgMCkKKyAgICAgICAgbGFiZWwuc2V0X21hcmt1cCgiWW91ciBpbWFnZSByZWNpcGUgd2lsbCBiZSBzYXZlZCB0bzoiKQorICAgICAgICBzdWJfbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBzdWJfbGFiZWwuc2V0X2FsaWdubWVudCgwLCAwKQorICAgICAgICBzdWJfbGFiZWwuc2V0X21hcmt1cChzZWxmLmRpcmVjdG9yeSkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHN1Yl9sYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHRhYmxlID0gZ3RrLlRhYmxlKDEsIDQsIFRydWUpCisKKyAgICAgICAgY2FuY2VsX2J1dHRvbiA9IGd0ay5CdXR0b24oKQorICAgICAgICBjYW5jZWxfYnV0dG9uLnNldF9sYWJlbCgiQ2FuY2VsIikKKyAgICAgICAgY2FuY2VsX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5jYW5jZWxfYnV0dG9uX2NiKQorICAgICAgICBjYW5jZWxfYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoMTEwLCAzMCkKKworICAgICAgICBzZWxmLnNhdmVfYnV0dG9uID0gZ3RrLkJ1dHRvbigpCisgICAgICAgIHNlbGYuc2F2ZV9idXR0b24uc2V0X2xhYmVsKCJTYXZlIikKKyAgICAgICAgc2VsZi5zYXZlX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5zYXZlX2J1dHRvbl9jYikKKyAgICAgICAgc2VsZi5zYXZlX2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDExMCwgMzApCisgICAgICAgIGlmIHNlbGYubmFtZV9lbnRyeS5nZXRfdGV4dCgpID09ICcnOgorICAgICAgICAgICAgc2VsZi5zYXZlX2J1dHRvbi5zZXRfc2Vuc2l0aXZlKEZhbHNlKQorCisgICAgICAgIHRhYmxlLmF0dGFjaChjYW5jZWxfYnV0dG9uLCAyLCAzLCAwLCAxKQorICAgICAgICB0YWJsZS5hdHRhY2goc2VsZi5zYXZlX2J1dHRvbiwgMywgNCwgMCwgMSkKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfZW5kKHRhYmxlLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisKKyAgICBkZWYgbGltaXRfZGVzY3JpcHRpb25fbGVuZ3RoKHNlbGYsIHRleHRidWZmZXIsIGl0ZXIsIHRleHQsIGxlbmd0aCk6CisgICAgICAgIGJ1ZmZlcl9ib3VuZHMgPSB0ZXh0YnVmZmVyLmdldF9ib3VuZHMoKQorICAgICAgICBlbnRpcmVfdGV4dCA9IHRleHRidWZmZXIuZ2V0X3RleHQoKmJ1ZmZlcl9ib3VuZHMpCisgICAgICAgIGVudGlyZV90ZXh0ICs9IHRleHQKKyAgICAgICAgaWYgbGVuKGVudGlyZV90ZXh0KT4xNTAgb3IgdGV4dD09IlxuIjoKKyAgICAgICAgICAgIHRleHRidWZmZXIuZW1pdF9zdG9wX2J5X25hbWUoImluc2VydC10ZXh0IikKKworICAgIGRlZiBuYW1lX2VudHJ5X2NoYW5nZWQoc2VsZiwgZW50cnkpOgorICAgICAgICB0ZXh0ID0gZW50cnkuZ2V0X3RleHQoKQorICAgICAgICBpZiB0ZXh0ID09ICcnOgorICAgICAgICAgICAgc2VsZi5zYXZlX2J1dHRvbi5zZXRfc2Vuc2l0aXZlKEZhbHNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zYXZlX2J1dHRvbi5zZXRfc2Vuc2l0aXZlKFRydWUpCisKKyAgICBkZWYgY2FuY2VsX2J1dHRvbl9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmRlc3Ryb3koKQorCisgICAgZGVmIHNhdmVfYnV0dG9uX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHRleHQgPSBzZWxmLm5hbWVfZW50cnkuZ2V0X3RleHQoKQorICAgICAgICBuZXdfdGV4dCA9IHRleHQucmVwbGFjZSgiLSIsIiIpCisgICAgICAgIGRlc2NyaXB0aW9uX2J1ZmZlciA9IHNlbGYuZGVzY3JpcHRpb25fZW50cnkuZ2V0X2J1ZmZlcigpCisgICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb25fYnVmZmVyLmdldF90ZXh0KGRlc2NyaXB0aW9uX2J1ZmZlci5nZXRfc3RhcnRfaXRlcigpLGRlc2NyaXB0aW9uX2J1ZmZlci5nZXRfZW5kX2l0ZXIoKSkKKyAgICAgICAgaWYgbmV3X3RleHQuaXNsb3dlcigpIGFuZCBuZXdfdGV4dC5pc2FsbnVtKCk6CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuaW1hZ2VfZGV0YWlsc19wYWdlLmltYWdlX3NhdmVkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5idWlsZGVyLmN1c3RvbWl6ZWQgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5idWlsZGVyLmdlbmVyYXRlX25ld19pbWFnZShzZWxmLmRpcmVjdG9yeSt0ZXh0LCBkZXNjcmlwdGlvbikKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuc2V0X2luX2xpc3QodGV4dCwgZGVzY3JpcHRpb24pCisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLnNldF9zZWxlY3RlZF9pbWFnZSh0ZXh0KQorICAgICAgICAgICAgc2VsZi5idWlsZGVyLmltYWdlX2RldGFpbHNfcGFnZS5zaG93X3BhZ2Uoc2VsZi5idWlsZGVyLklNQUdFX0dFTkVSQVRFRCkKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5pbWFnZV9kZXRhaWxzX3BhZ2UubmFtZV9maWVsZF90ZW1wbGF0ZSA9IHRleHQKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5pbWFnZV9kZXRhaWxzX3BhZ2UuZGVzY3JpcHRpb25fZmllbGRfdGVtcGxhdGUgPSBkZXNjcmlwdGlvbgorICAgICAgICAgICAgc2VsZi5kZXN0cm95KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2hvd19pbnZhbGlkX2lucHV0X2Vycm9yX2RpYWxvZygpCisKKyAgICBkZWYgc2hvd19pbnZhbGlkX2lucHV0X2Vycm9yX2RpYWxvZyhzZWxmKToKKyAgICAgICAgbGJsID0gIjxiPkludmFsaWQgY2hhcmFjdGVycyBpbiBpbWFnZSByZWNpcGUgbmFtZTwvYj4iCisgICAgICAgIG1zZyA9ICJJbWFnZSByZWNpcGUgbmFtZXMgc2hvdWxkIGJlIGFsbCBsb3dlcmNhc2UgYW5kXG4iCisgICAgICAgIG1zZyArPSAiaW5jbHVkZSBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLiBUaGUgb25seVxuIgorICAgICAgICBtc2cgKz0gInNwZWNpYWwgY2hhcmFjdGVyIHlvdSBjYW4gdXNlIGlzIHRoZSBBU0NJSSBoeXBoZW4gKC0pLiIKKyAgICAgICAgZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5NRVNTQUdFX0VSUk9SLCBtc2cpCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDbG9zZSIsIGd0ay5SRVNQT05TRV9PSykKKyAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisKKyAgICAgICAgcmVzID0gZGlhbG9nLnJ1bigpCisgICAgICAgIHNlbGYubmFtZV9lbnRyeS5ncmFiX2ZvY3VzKCkKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3NldHRpbmdzdWloZWxwZXIucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvc2V0dGluZ3N1aWhlbHBlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDI4NWM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3NldHRpbmdzdWloZWxwZXIucHkKQEAgLTAsMCArMSwxMjIgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEyICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgSm9zaHVhIExvY2sgPGpvc2hAbGludXguaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKK2ltcG9ydCBvcworZnJvbSBiYi51aS5jcnVtYnMuaG9id2lkZ2V0IGltcG9ydCBIb2JJbmZvQnV0dG9uLCBIb2JCdXR0b24sIEhvYkFsdEJ1dHRvbgorCisiIiIKK1RoZSBmb2xsb3dpbmcgYXJlIGNvbnZlbmllbmNlIGNsYXNzZXMgZm9yIGltcGxlbWVudGluZyBHTk9NRSBISUcgY29tcGxpYW50CitCaXRCYWtlIEdVSSdzCitJbiBzdW1tYXJ5OiBzcGFjaW5nID0gMTJweCwgYm9yZGVyLXdpZHRoID0gNnB4CisiIiIKKworY2xhc3MgU2V0dGluZ3NVSUhlbHBlcigpOgorCisgICAgZGVmIGdlbl9sYWJlbF93aWRnZXQoc2VsZiwgY29udGVudCk6CisgICAgICAgIGxhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgbGFiZWwuc2V0X2FsaWdubWVudCgwLCAwKQorICAgICAgICBsYWJlbC5zZXRfbWFya3VwKGNvbnRlbnQpCisgICAgICAgIGxhYmVsLnNob3coKQorICAgICAgICByZXR1cm4gbGFiZWwKKworICAgIGRlZiBnZW5fbGFiZWxfaW5mb193aWRnZXQoc2VsZiwgY29udGVudCwgdG9vbHRpcCk6CisgICAgICAgIHRhYmxlID0gZ3RrLlRhYmxlKDEsIDEwLCBGYWxzZSkKKyAgICAgICAgbGFiZWwgPSBzZWxmLmdlbl9sYWJlbF93aWRnZXQoY29udGVudCkKKyAgICAgICAgaW5mbyA9IEhvYkluZm9CdXR0b24odG9vbHRpcCwgc2VsZikKKyAgICAgICAgdGFibGUuYXR0YWNoKGxhYmVsLCAwLCAxLCAwLCAxLCB4b3B0aW9ucz1ndGsuRklMTCkKKyAgICAgICAgdGFibGUuYXR0YWNoKGluZm8sIDEsIDIsIDAsIDEsIHhvcHRpb25zPWd0ay5GSUxMLCB4cGFkZGluZz0xMCkKKyAgICAgICAgcmV0dXJuIHRhYmxlCisKKyAgICBkZWYgZ2VuX3NwaW5uZXJfd2lkZ2V0KHNlbGYsIGNvbnRlbnQsIGxvd2VyLCB1cHBlciwgdG9vbHRpcD0iIik6CisgICAgICAgIGhib3ggPSBndGsuSEJveChGYWxzZSwgMTIpCisgICAgICAgIGFkanVzdCA9IGd0ay5BZGp1c3RtZW50KHZhbHVlPWNvbnRlbnQsIGxvd2VyPWxvd2VyLCB1cHBlcj11cHBlciwgc3RlcF9pbmNyPTEpCisgICAgICAgIHNwaW5uZXIgPSBndGsuU3BpbkJ1dHRvbihhZGp1c3RtZW50PWFkanVzdCwgY2xpbWJfcmF0ZT0xLCBkaWdpdHM9MCkKKworICAgICAgICBzcGlubmVyLnNldF92YWx1ZShjb250ZW50KQorICAgICAgICBoYm94LnBhY2tfc3RhcnQoc3Bpbm5lciwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIGluZm8gPSBIb2JJbmZvQnV0dG9uKHRvb2x0aXAsIHNlbGYpCisgICAgICAgIGhib3gucGFja19zdGFydChpbmZvLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgaGJveC5zaG93X2FsbCgpCisgICAgICAgIHJldHVybiBoYm94LCBzcGlubmVyCisKKyAgICBkZWYgZ2VuX2NvbWJvX3dpZGdldChzZWxmLCBjdXJyX2l0ZW0sIGFsbF9pdGVtLCB0b29sdGlwPSIiKToKKyAgICAgICAgaGJveCA9IGd0ay5IQm94KEZhbHNlLCAxMikKKyAgICAgICAgY29tYm8gPSBndGsuY29tYm9fYm94X25ld190ZXh0KCkKKyAgICAgICAgaGJveC5wYWNrX3N0YXJ0KGNvbWJvLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgaW5kZXggPSAwCisgICAgICAgIGZvciBpdGVtIGluIGFsbF9pdGVtIG9yIFtdOgorICAgICAgICAgICAgY29tYm8uYXBwZW5kX3RleHQoaXRlbSkKKyAgICAgICAgICAgIGlmIGl0ZW0gPT0gY3Vycl9pdGVtOgorICAgICAgICAgICAgICAgIGNvbWJvLnNldF9hY3RpdmUoaW5kZXgpCisgICAgICAgICAgICBpbmRleCArPSAxCisKKyAgICAgICAgaW5mbyA9IEhvYkluZm9CdXR0b24odG9vbHRpcCwgc2VsZikKKyAgICAgICAgaGJveC5wYWNrX3N0YXJ0KGluZm8sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBoYm94LnNob3dfYWxsKCkKKyAgICAgICAgcmV0dXJuIGhib3gsIGNvbWJvCisKKyAgICBkZWYgZW50cnlfd2lkZ2V0X3NlbGVjdF9wYXRoX2NiKHNlbGYsIGFjdGlvbiwgcGFyZW50LCBlbnRyeSk6CisgICAgICAgIGRpYWxvZyA9IGd0ay5GaWxlQ2hvb3NlckRpYWxvZygiIiwgcGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrLkZJTEVfQ0hPT1NFUl9BQ1RJT05fU0VMRUNUX0ZPTERFUikKKyAgICAgICAgdGV4dCA9IGVudHJ5LmdldF90ZXh0KCkKKyAgICAgICAgZGlhbG9nLnNldF9jdXJyZW50X2ZvbGRlcih0ZXh0IGlmIGxlbih0ZXh0KSA+IDAgZWxzZSBvcy5nZXRjd2QoKSkKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNhbmNlbCIsIGd0ay5SRVNQT05TRV9OTykKKyAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJPcGVuIiwgZ3RrLlJFU1BPTlNFX1lFUykKKyAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIGlmIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9ZRVM6CisgICAgICAgICAgICBwYXRoID0gZGlhbG9nLmdldF9maWxlbmFtZSgpCisgICAgICAgICAgICBlbnRyeS5zZXRfdGV4dChwYXRoKQorCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKworICAgIGRlZiBnZW5fZW50cnlfd2lkZ2V0KHNlbGYsIGNvbnRlbnQsIHBhcmVudCwgdG9vbHRpcD0iIiwgbmVlZF9idXR0b249VHJ1ZSk6CisgICAgICAgIGhib3ggPSBndGsuSEJveChGYWxzZSwgMTIpCisgICAgICAgIGVudHJ5ID0gZ3RrLkVudHJ5KCkKKyAgICAgICAgZW50cnkuc2V0X3RleHQoY29udGVudCkKKyAgICAgICAgZW50cnkuc2V0X3NpemVfcmVxdWVzdCgzNTAsMzApCisKKyAgICAgICAgaWYgbmVlZF9idXR0b246CisgICAgICAgICAgICB0YWJsZSA9IGd0ay5UYWJsZSgxLCAxMCwgRmFsc2UpCisgICAgICAgICAgICBoYm94LnBhY2tfc3RhcnQodGFibGUsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisgICAgICAgICAgICB0YWJsZS5hdHRhY2goZW50cnksIDAsIDksIDAsIDEsIHhvcHRpb25zPWd0ay5TSFJJTkspCisgICAgICAgICAgICBpbWFnZSA9IGd0ay5JbWFnZSgpCisgICAgICAgICAgICBpbWFnZS5zZXRfZnJvbV9zdG9jayhndGsuU1RPQ0tfT1BFTixndGsuSUNPTl9TSVpFX0JVVFRPTikKKyAgICAgICAgICAgIG9wZW5fYnV0dG9uID0gZ3RrLkJ1dHRvbigpCisgICAgICAgICAgICBvcGVuX2J1dHRvbi5zZXRfaW1hZ2UoaW1hZ2UpCisgICAgICAgICAgICBvcGVuX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5lbnRyeV93aWRnZXRfc2VsZWN0X3BhdGhfY2IsIHBhcmVudCwgZW50cnkpCisgICAgICAgICAgICB0YWJsZS5hdHRhY2gob3Blbl9idXR0b24sIDksIDEwLCAwLCAxLCB4b3B0aW9ucz1ndGsuU0hSSU5LKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaGJveC5wYWNrX3N0YXJ0KGVudHJ5LCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIGlmIHRvb2x0aXAgIT0gIiI6CisgICAgICAgICAgICBpbmZvID0gSG9iSW5mb0J1dHRvbih0b29sdGlwLCBzZWxmKQorICAgICAgICAgICAgaGJveC5wYWNrX3N0YXJ0KGluZm8sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBoYm94LnNob3dfYWxsKCkKKyAgICAgICAgcmV0dXJuIGhib3gsIGVudHJ5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvc2ltcGxlc2V0dGluZ3NkaWFsb2cucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvc2ltcGxlc2V0dGluZ3NkaWFsb2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVlYjNkOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9zaW1wbGVzZXR0aW5nc2RpYWxvZy5weQpAQCAtMCwwICsxLDg5MSBAQAorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworaW1wb3J0IGdvYmplY3QKK2ltcG9ydCBoYXNobGliCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IGhpYywgSG9iSW5mb0J1dHRvbiwgSG9iQnV0dG9uLCBIb2JBbHRCdXR0b24gCitmcm9tIGJiLnVpLmNydW1icy5wcm9ncmVzc2JhciBpbXBvcnQgSG9iUHJvZ3Jlc3NCYXIKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5zZXR0aW5nc3VpaGVscGVyIGltcG9ydCBTZXR0aW5nc1VJSGVscGVyCitmcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzZGlhbG9nIGltcG9ydCBDcnVtYnNEaWFsb2cKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNtZXNzYWdlZGlhbG9nIGltcG9ydCBDcnVtYnNNZXNzYWdlRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcucHJveHlkZXRhaWxzZGlhbG9nIGltcG9ydCBQcm94eURldGFpbHNEaWFsb2cKKworIiIiCitUaGUgZm9sbG93aW5nIGFyZSBjb252ZW5pZW5jZSBjbGFzc2VzIGZvciBpbXBsZW1lbnRpbmcgR05PTUUgSElHIGNvbXBsaWFudAorQml0QmFrZSBHVUkncworSW4gc3VtbWFyeTogc3BhY2luZyA9IDEycHgsIGJvcmRlci13aWR0aCA9IDZweAorIiIiCisKK2NsYXNzIFNpbXBsZVNldHRpbmdzRGlhbG9nIChDcnVtYnNEaWFsb2csIFNldHRpbmdzVUlIZWxwZXIpOgorCisgICAgKEJVSUxEX0VOVl9QQUdFX0lELAorICAgICBTSEFSRURfU1RBVEVfUEFHRV9JRCwKKyAgICAgUFJPWElFU19QQUdFX0lELAorICAgICBPVEhFUlNfUEFHRV9JRCkgPSByYW5nZSg0KQorCisgICAgKFRFU1RfTkVUV09SS19OT05FLAorICAgICBURVNUX05FVFdPUktfSU5JVElBTCwKKyAgICAgVEVTVF9ORVRXT1JLX1JVTk5JTkcsCisgICAgIFRFU1RfTkVUV09SS19QQVNTRUQsCisgICAgIFRFU1RfTkVUV09SS19GQUlMRUQsCisgICAgIFRFU1RfTkVUV09SS19DQU5DRUxFRCkgPSByYW5nZSg2KQorCisgICAgVEFSR0VUUyA9IFsKKyAgICAgICAgKCJNWV9UUkVFX01PREVMX1JPVyIsIGd0ay5UQVJHRVRfU0FNRV9XSURHRVQsIDApLAorICAgICAgICAoInRleHQvcGxhaW4iLCAwLCAxKSwKKyAgICAgICAgKCJURVhUIiwgMCwgMiksCisgICAgICAgICgiU1RSSU5HIiwgMCwgMyksCisgICAgICAgIF0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aXRsZSwgY29uZmlndXJhdGlvbiwgYWxsX2ltYWdlX3R5cGVzLAorICAgICAgICAgICAgYWxsX3BhY2thZ2VfZm9ybWF0cywgYWxsX2Rpc3Ryb3MsIGFsbF9zZGtfbWFjaGluZXMsCisgICAgICAgICAgICBtYXhfdGhyZWFkcywgcGFyZW50LCBmbGFncywgaGFuZGxlciwgYnV0dG9ucz1Ob25lKToKKyAgICAgICAgc3VwZXIoU2ltcGxlU2V0dGluZ3NEaWFsb2csIHNlbGYpLl9faW5pdF9fKHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zKQorCisgICAgICAgICMgY2xhc3MgbWVtYmVycyBmcm9tIG90aGVyIG9iamVjdHMKKyAgICAgICAgIyBiaXRiYWtlIHNldHRpbmdzIGZyb20gQnVpbGRlci5Db25maWd1cmF0aW9uCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgc2VsZi5pbWFnZV90eXBlcyA9IGFsbF9pbWFnZV90eXBlcworICAgICAgICBzZWxmLmFsbF9wYWNrYWdlX2Zvcm1hdHMgPSBhbGxfcGFja2FnZV9mb3JtYXRzCisgICAgICAgIHNlbGYuYWxsX2Rpc3Ryb3MgPSBhbGxfZGlzdHJvcworICAgICAgICBzZWxmLmFsbF9zZGtfbWFjaGluZXMgPSBhbGxfc2RrX21hY2hpbmVzCisgICAgICAgIHNlbGYubWF4X3RocmVhZHMgPSBtYXhfdGhyZWFkcworCisgICAgICAgICMgY2xhc3MgbWVtYmVycyBmb3IgaW50ZXJuYWwgdXNlCisgICAgICAgIHNlbGYuZGxkaXJfdGV4dCA9IE5vbmUKKyAgICAgICAgc2VsZi5zc3RhdGVkaXJfdGV4dCA9IE5vbmUKKyAgICAgICAgc2VsZi5zc3RhdGVtaXJyb3JzX2xpc3QgPSBbXQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfY2hhbmdlZCA9IDAKKyAgICAgICAgc2VsZi5iYl9zcGlubmVyID0gTm9uZQorICAgICAgICBzZWxmLnBtYWtlX3NwaW5uZXIgPSBOb25lCisgICAgICAgIHNlbGYucm9vdGZzX3NpemVfc3Bpbm5lciA9IE5vbmUKKyAgICAgICAgc2VsZi5leHRyYV9zaXplX3NwaW5uZXIgPSBOb25lCisgICAgICAgIHNlbGYuZ3BsdjNfY2hlY2tib3ggPSBOb25lCisgICAgICAgIHNlbGYudG9vbGNoYWluX2NoZWNrYm94ID0gTm9uZQorICAgICAgICBzZWxmLnNldHRpbmdfc3RvcmUgPSBOb25lCisgICAgICAgIHNlbGYuaW1hZ2VfdHlwZXNfY2hlY2tidXR0b25zID0ge30KKworICAgICAgICBzZWxmLm1kNSA9IHNlbGYuY29uZmlnX21kNSgpCisgICAgICAgIHNlbGYucHJveHlfbWQ1ID0gc2VsZi5jb25maWdfcHJveHlfbWQ1KCkKKyAgICAgICAgc2VsZi5zZXR0aW5nc19jaGFuZ2VkID0gRmFsc2UKKyAgICAgICAgc2VsZi5wcm94eV9zZXR0aW5nc19jaGFuZ2VkID0gRmFsc2UKKyAgICAgICAgc2VsZi5oYW5kbGVyID0gaGFuZGxlcgorICAgICAgICBzZWxmLnByb3h5X3Rlc3RfcmFuID0gRmFsc2UKKyAgICAgICAgc2VsZi5zZWxlY3RlZF9taXJyb3Jfcm93ID0gMAorICAgICAgICBzZWxmLm5ld19taXJyb3IgPSBGYWxzZQorCisgICAgICAgICMgY3JlYXRlIHZpc3VhbCBlbGVtZW50cyBvbiB0aGUgZGlhbG9nCisgICAgICAgIHNlbGYuY3JlYXRlX3Zpc3VhbF9lbGVtZW50cygpCisgICAgICAgIHNlbGYuY29ubmVjdCgicmVzcG9uc2UiLCBzZWxmLnJlc3BvbnNlX2NiKQorCisgICAgZGVmIF9nZXRfc29ydGVkX3ZhbHVlKHNlbGYsIHZhcik6CisgICAgICAgIHJldHVybiAiICIuam9pbihzb3J0ZWQoc3RyKHZhcikuc3BsaXQoKSkpICsgIlxuIgorCisgICAgZGVmIGNvbmZpZ19wcm94eV9tZDUoc2VsZik6CisgICAgICAgIGRhdGEgPSAoIkVOQUJMRV9QUk9YWTogIiAgICAgICAgICsgc2VsZi5fZ2V0X3NvcnRlZF92YWx1ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5KSkKKyAgICAgICAgaWYgc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eToKKyAgICAgICAgICAgIGZvciBwcm90b2NvbCBpbiBzZWxmLmNvbmZpZ3VyYXRpb24ucHJveGllcy5rZXlzKCk6CisgICAgICAgICAgICAgICAgZGF0YSArPSAocHJvdG9jb2wgKyAiOiAiICsgc2VsZi5fZ2V0X3NvcnRlZF92YWx1ZShzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9wcm94eShwcm90b2NvbCkpKQorICAgICAgICByZXR1cm4gaGFzaGxpYi5tZDUoZGF0YSkuaGV4ZGlnZXN0KCkKKworICAgIGRlZiBjb25maWdfbWQ1KHNlbGYpOgorICAgICAgICBkYXRhID0gIiIKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLmNvbmZpZ3VyYXRpb24uZXh0cmFfc2V0dGluZy5rZXlzKCk6CisgICAgICAgICAgICBkYXRhICs9IChrZXkgKyAiOiAiICsgc2VsZi5fZ2V0X3NvcnRlZF92YWx1ZShzZWxmLmNvbmZpZ3VyYXRpb24uZXh0cmFfc2V0dGluZ1trZXldKSkKKyAgICAgICAgcmV0dXJuIGhhc2hsaWIubWQ1KGRhdGEpLmhleGRpZ2VzdCgpCisKKyAgICBkZWYgZ2VuX3Byb3h5X2VudHJ5X3dpZGdldChzZWxmLCBwcm90b2NvbCwgcGFyZW50LCBuZWVkX2J1dHRvbj1UcnVlLCBsaW5lPTApOgorICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbChwcm90b2NvbC51cHBlcigpICsgIiBwcm94eSIpCisgICAgICAgIHNlbGYucHJveHlfdGFibGUuYXR0YWNoKGxhYmVsLCAwLCAxLCBsaW5lLCBsaW5lKzEsIHhwYWRkaW5nPTI0KQorCisgICAgICAgIHByb3h5X2VudHJ5ID0gZ3RrLkVudHJ5KCkKKyAgICAgICAgcHJveHlfZW50cnkuc2V0X3NpemVfcmVxdWVzdCgzMDAsIC0xKQorICAgICAgICBzZWxmLnByb3h5X3RhYmxlLmF0dGFjaChwcm94eV9lbnRyeSwgMSwgMiwgbGluZSwgbGluZSsxLCB5cGFkZGluZz00KQorCisgICAgICAgIHNlbGYucHJveHlfdGFibGUuYXR0YWNoKGd0ay5MYWJlbCgiOiIpLCAyLCAzLCBsaW5lLCBsaW5lKzEsIHhwYWRkaW5nPTEyLCB5cGFkZGluZz00KQorCisgICAgICAgIHBvcnRfZW50cnkgPSBndGsuRW50cnkoKQorICAgICAgICBwb3J0X2VudHJ5LnNldF9zaXplX3JlcXVlc3QoNjAsIC0xKQorICAgICAgICBzZWxmLnByb3h5X3RhYmxlLmF0dGFjaChwb3J0X2VudHJ5LCAzLCA0LCBsaW5lLCBsaW5lKzEsIHlwYWRkaW5nPTQpCisKKyAgICAgICAgZGV0YWlsc19idXR0b24gPSBIb2JBbHRCdXR0b24oIkRldGFpbHMiKQorICAgICAgICBkZXRhaWxzX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5kZXRhaWxzX2NiLCBwYXJlbnQsIHByb3RvY29sKQorICAgICAgICBzZWxmLnByb3h5X3RhYmxlLmF0dGFjaChkZXRhaWxzX2J1dHRvbiwgNCwgNSwgbGluZSwgbGluZSsxLCB4cGFkZGluZz00LCB5b3B0aW9ucz1ndGsuRVhQQU5EKQorCisgICAgICAgIHJldHVybiBwcm94eV9lbnRyeSwgcG9ydF9lbnRyeSwgZGV0YWlsc19idXR0b24KKworICAgIGRlZiByZWZyZXNoX3Byb3h5X2NvbXBvbmVudHMoc2VsZik6CisgICAgICAgIHNlbGYuc2FtZV9jaGVja2JveC5zZXRfc2Vuc2l0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkpCisKKyAgICAgICAgc2VsZi5odHRwX3Byb3h5LnNldF90ZXh0KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX2hvc3Rfb25seSgiaHR0cCIpKQorICAgICAgICBzZWxmLmh0dHBfcHJveHkuc2V0X2VkaXRhYmxlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkpCisgICAgICAgIHNlbGYuaHR0cF9wcm94eS5zZXRfc2Vuc2l0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkpCisgICAgICAgIHNlbGYuaHR0cF9wcm94eV9wb3J0LnNldF90ZXh0KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX3BvcnRfb25seSgiaHR0cCIpKQorICAgICAgICBzZWxmLmh0dHBfcHJveHlfcG9ydC5zZXRfZWRpdGFibGUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSkKKyAgICAgICAgc2VsZi5odHRwX3Byb3h5X3BvcnQuc2V0X3NlbnNpdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5KQorICAgICAgICBzZWxmLmh0dHBfcHJveHlfZGV0YWlscy5zZXRfc2Vuc2l0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkpCisKKyAgICAgICAgc2VsZi5odHRwc19wcm94eS5zZXRfdGV4dChzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9ob3N0X29ubHkoImh0dHBzIikpCisgICAgICAgIHNlbGYuaHR0cHNfcHJveHkuc2V0X2VkaXRhYmxlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLmh0dHBzX3Byb3h5LnNldF9zZW5zaXRpdmUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSBhbmQgKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkpCisgICAgICAgIHNlbGYuaHR0cHNfcHJveHlfcG9ydC5zZXRfdGV4dChzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9wb3J0X29ubHkoImh0dHBzIikpCisgICAgICAgIHNlbGYuaHR0cHNfcHJveHlfcG9ydC5zZXRfZWRpdGFibGUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSBhbmQgKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkpCisgICAgICAgIHNlbGYuaHR0cHNfcHJveHlfcG9ydC5zZXRfc2Vuc2l0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLmh0dHBzX3Byb3h5X2RldGFpbHMuc2V0X3NlbnNpdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKworICAgICAgICBzZWxmLmZ0cF9wcm94eS5zZXRfdGV4dChzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9ob3N0X29ubHkoImZ0cCIpKQorICAgICAgICBzZWxmLmZ0cF9wcm94eS5zZXRfZWRpdGFibGUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSBhbmQgKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkpCisgICAgICAgIHNlbGYuZnRwX3Byb3h5LnNldF9zZW5zaXRpdmUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSBhbmQgKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkpCisgICAgICAgIHNlbGYuZnRwX3Byb3h5X3BvcnQuc2V0X3RleHQoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfcG9ydF9vbmx5KCJmdHAiKSkKKyAgICAgICAgc2VsZi5mdHBfcHJveHlfcG9ydC5zZXRfZWRpdGFibGUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSBhbmQgKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkpCisgICAgICAgIHNlbGYuZnRwX3Byb3h5X3BvcnQuc2V0X3NlbnNpdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKyAgICAgICAgc2VsZi5mdHBfcHJveHlfZGV0YWlscy5zZXRfc2Vuc2l0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorCisgICAgICAgIHNlbGYuc29ja3NfcHJveHkuc2V0X3RleHQoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfaG9zdF9vbmx5KCJzb2NrcyIpKQorICAgICAgICBzZWxmLnNvY2tzX3Byb3h5LnNldF9lZGl0YWJsZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKyAgICAgICAgc2VsZi5zb2Nrc19wcm94eS5zZXRfc2Vuc2l0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLnNvY2tzX3Byb3h5X3BvcnQuc2V0X3RleHQoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfcG9ydF9vbmx5KCJzb2NrcyIpKQorICAgICAgICBzZWxmLnNvY2tzX3Byb3h5X3BvcnQuc2V0X2VkaXRhYmxlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLnNvY2tzX3Byb3h5X3BvcnQuc2V0X3NlbnNpdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKyAgICAgICAgc2VsZi5zb2Nrc19wcm94eV9kZXRhaWxzLnNldF9zZW5zaXRpdmUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSBhbmQgKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkpCisKKyAgICAgICAgc2VsZi5jdnNfcHJveHkuc2V0X3RleHQoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfaG9zdF9vbmx5KCJjdnMiKSkKKyAgICAgICAgc2VsZi5jdnNfcHJveHkuc2V0X2VkaXRhYmxlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLmN2c19wcm94eS5zZXRfc2Vuc2l0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLmN2c19wcm94eV9wb3J0LnNldF90ZXh0KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX3BvcnRfb25seSgiY3ZzIikpCisgICAgICAgIHNlbGYuY3ZzX3Byb3h5X3BvcnQuc2V0X2VkaXRhYmxlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLmN2c19wcm94eV9wb3J0LnNldF9zZW5zaXRpdmUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSBhbmQgKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkpCisgICAgICAgIHNlbGYuY3ZzX3Byb3h5X2RldGFpbHMuc2V0X3NlbnNpdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKworICAgICAgICBpZiBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eToKKyAgICAgICAgICAgIGlmIHNlbGYuaHR0cF9wcm94eS5nZXRfdGV4dCgpOgorICAgICAgICAgICAgICAgIFt3LnNldF90ZXh0KHNlbGYuaHR0cF9wcm94eS5nZXRfdGV4dCgpKSBmb3IgdyBpbiBzZWxmLnNhbWVfcHJveHlfYWRkcmVzc2VzXQorICAgICAgICAgICAgaWYgc2VsZi5odHRwX3Byb3h5X3BvcnQuZ2V0X3RleHQoKToKKyAgICAgICAgICAgICAgICBbdy5zZXRfdGV4dChzZWxmLmh0dHBfcHJveHlfcG9ydC5nZXRfdGV4dCgpKSBmb3IgdyBpbiBzZWxmLnNhbWVfcHJveHlfcG9ydHNdCisKKyAgICBkZWYgcHJveHlfY2hlY2tib3hfdG9nZ2xlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5ID0gc2VsZi5wcm94eV9jaGVja2JveC5nZXRfYWN0aXZlKCkKKyAgICAgICAgaWYgbm90IHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHk6CisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLnNhbWVfY2hlY2tib3guc2V0X2FjdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkKKyAgICAgICAgc2VsZi5zYXZlX3Byb3h5X2RhdGEoKQorICAgICAgICBzZWxmLnJlZnJlc2hfcHJveHlfY29tcG9uZW50cygpCisKKyAgICBkZWYgc2FtZV9jaGVja2JveF90b2dnbGVkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5ID0gc2VsZi5zYW1lX2NoZWNrYm94LmdldF9hY3RpdmUoKQorICAgICAgICBzZWxmLnNhdmVfcHJveHlfZGF0YSgpCisgICAgICAgIHNlbGYucmVmcmVzaF9wcm94eV9jb21wb25lbnRzKCkKKworICAgIGRlZiBzYXZlX3Byb3h5X2RhdGEoc2VsZik6CisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5zcGxpdF9wcm94eSgiaHR0cCIsIHNlbGYuaHR0cF9wcm94eS5nZXRfdGV4dCgpICsgIjoiICsgc2VsZi5odHRwX3Byb3h5X3BvcnQuZ2V0X3RleHQoKSkKKyAgICAgICAgaWYgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHk6CisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc3BsaXRfcHJveHkoImh0dHBzIiwgc2VsZi5odHRwX3Byb3h5LmdldF90ZXh0KCkgKyAiOiIgKyBzZWxmLmh0dHBfcHJveHlfcG9ydC5nZXRfdGV4dCgpKQorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNwbGl0X3Byb3h5KCJmdHAiLCBzZWxmLmh0dHBfcHJveHkuZ2V0X3RleHQoKSArICI6IiArIHNlbGYuaHR0cF9wcm94eV9wb3J0LmdldF90ZXh0KCkpCisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc3BsaXRfcHJveHkoInNvY2tzIiwgc2VsZi5odHRwX3Byb3h5LmdldF90ZXh0KCkgKyAiOiIgKyBzZWxmLmh0dHBfcHJveHlfcG9ydC5nZXRfdGV4dCgpKQorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNwbGl0X3Byb3h5KCJjdnMiLCBzZWxmLmh0dHBfcHJveHkuZ2V0X3RleHQoKSArICI6IiArIHNlbGYuaHR0cF9wcm94eV9wb3J0LmdldF90ZXh0KCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc3BsaXRfcHJveHkoImh0dHBzIiwgc2VsZi5odHRwc19wcm94eS5nZXRfdGV4dCgpICsgIjoiICsgc2VsZi5odHRwc19wcm94eV9wb3J0LmdldF90ZXh0KCkpCisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc3BsaXRfcHJveHkoImZ0cCIsIHNlbGYuZnRwX3Byb3h5LmdldF90ZXh0KCkgKyAiOiIgKyBzZWxmLmZ0cF9wcm94eV9wb3J0LmdldF90ZXh0KCkpCisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc3BsaXRfcHJveHkoInNvY2tzIiwgc2VsZi5zb2Nrc19wcm94eS5nZXRfdGV4dCgpICsgIjoiICsgc2VsZi5zb2Nrc19wcm94eV9wb3J0LmdldF90ZXh0KCkpCisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc3BsaXRfcHJveHkoImN2cyIsIHNlbGYuY3ZzX3Byb3h5LmdldF90ZXh0KCkgKyAiOiIgKyBzZWxmLmN2c19wcm94eV9wb3J0LmdldF90ZXh0KCkpICAgICAgIAorCisgICAgZGVmIHJlc3BvbnNlX2NiKHNlbGYsIGRpYWxvZywgcmVzcG9uc2VfaWQpOgorICAgICAgICBpZiByZXNwb25zZV9pZCA9PSBndGsuUkVTUE9OU0VfWUVTOgorICAgICAgICAgICAgaWYgc2VsZi5wcm94eV9jaGVja2JveC5nZXRfYWN0aXZlKCk6CisgICAgICAgICAgICAgICAgIyBDaGVjayB0aGF0IGFsbCBwcm94eSBlbnRyaWVzIGhhdmUgYSBjb3JyZXNwb25kaW5nIHBvcnQKKyAgICAgICAgICAgICAgICBmb3IgcHJveHksIHBvcnQgaW4gemlwKHNlbGYuYWxsX3Byb3h5X2FkZHJlc3Nlcywgc2VsZi5hbGxfcHJveHlfcG9ydHMpOgorICAgICAgICAgICAgICAgICAgICBpZiBwcm94eS5nZXRfdGV4dCgpIGFuZCBub3QgcG9ydC5nZXRfdGV4dCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgbGJsID0gIjxiPkVudGVyIGFsbCBwb3J0IG51bWJlcnM8L2I+IgorICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gIlByb3h5IHNlcnZlcnMgcmVxdWlyZSBhIHBvcnQgbnVtYmVyLiBQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIGVudGVyZWQgYSBwb3J0IG51bWJlciBmb3IgZWFjaCBwcm94eSBzZXJ2ZXIuIgorICAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5NRVNTQUdFX1dBUk5JTkcsIG1zZykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDbG9zZSIsIGd0ay5SRVNQT05TRV9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZW1pdF9zdG9wX2J5X25hbWUoInJlc3BvbnNlIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5kbGRpciA9IHNlbGYuZGxkaXJfdGV4dC5nZXRfdGV4dCgpCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5zc3RhdGVkaXIgPSBzZWxmLnNzdGF0ZWRpcl90ZXh0LmdldF90ZXh0KCkKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNzdGF0ZW1pcnJvciA9ICIiCisgICAgICAgIGZvciBtaXJyb3IgaW4gc2VsZi5zc3RhdGVtaXJyb3JzX2xpc3Q6CisgICAgICAgICAgICBpZiBtaXJyb3JbMV0gIT0gIiIgYW5kIG1pcnJvclsyXS5zdGFydHN3aXRoKCJmaWxlOi8vIik6CisgICAgICAgICAgICAgICAgc21pcnJvciA9IG1pcnJvclsyXSArICIgIiArIG1pcnJvclsxXSArICIgXFxuICIKKyAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc3N0YXRlbWlycm9yICs9IHNtaXJyb3IKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmJidGhyZWFkID0gc2VsZi5iYl9zcGlubmVyLmdldF92YWx1ZV9hc19pbnQoKQorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24ucG1ha2UgPSBzZWxmLnBtYWtlX3NwaW5uZXIuZ2V0X3ZhbHVlX2FzX2ludCgpCisgICAgICAgIHNlbGYuc2F2ZV9wcm94eV9kYXRhKCkKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmV4dHJhX3NldHRpbmcgPSB7fQorICAgICAgICBpdCA9IHNlbGYuc2V0dGluZ19zdG9yZS5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgIHdoaWxlIGl0OgorICAgICAgICAgICAga2V5ID0gc2VsZi5zZXR0aW5nX3N0b3JlLmdldF92YWx1ZShpdCwgMCkKKyAgICAgICAgICAgIHZhbHVlID0gc2VsZi5zZXR0aW5nX3N0b3JlLmdldF92YWx1ZShpdCwgMSkKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5leHRyYV9zZXR0aW5nW2tleV0gPSB2YWx1ZQorICAgICAgICAgICAgaXQgPSBzZWxmLnNldHRpbmdfc3RvcmUuaXRlcl9uZXh0KGl0KQorCisgICAgICAgIG1kNSA9IHNlbGYuY29uZmlnX21kNSgpCisgICAgICAgIHNlbGYuc2V0dGluZ3NfY2hhbmdlZCA9IChzZWxmLm1kNSAhPSBtZDUpCisgICAgICAgIHNlbGYucHJveHlfc2V0dGluZ3NfY2hhbmdlZCA9IChzZWxmLnByb3h5X21kNSAhPSBzZWxmLmNvbmZpZ19wcm94eV9tZDUoKSkKKworICAgIGRlZiBjcmVhdGVfYnVpbGRfZW52aXJvbm1lbnRfcGFnZShzZWxmKToKKyAgICAgICAgYWR2YW5jZWRfdmJveCA9IGd0ay5WQm94KEZhbHNlLCA2KQorICAgICAgICBhZHZhbmNlZF92Ym94LnNldF9ib3JkZXJfd2lkdGgoNikKKworICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCc8c3BhbiB3ZWlnaHQ9ImJvbGQiPlBhcmFsbGVsIHRocmVhZHM8L3NwYW4+JyksIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc3ViX3Zib3ggPSBndGsuVkJveChGYWxzZSwgNikKKyAgICAgICAgYWR2YW5jZWRfdmJveC5wYWNrX3N0YXJ0KHN1Yl92Ym94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGxhYmVsID0gc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCJCaXRCYWtlIHBhcmFsbGVsIHRocmVhZHMiKQorICAgICAgICB0b29sdGlwID0gIlNldHMgdGhlIG51bWJlciBvZiB0aHJlYWRzIHRoYXQgQml0QmFrZSB0YXNrcyBjYW4gc2ltdWx0YW5lb3VzbHkgcnVuLiBTZWUgdGhlIDxhIGhyZWY9XCIiCisgICAgICAgIHRvb2x0aXAgKz0gImh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzL2N1cnJlbnQvcG9reS1yZWYtbWFudWFsLyIKKyAgICAgICAgdG9vbHRpcCArPSAicG9reS1yZWYtbWFudWFsLmh0bWwjdmFyLUJCX05VTUJFUl9USFJFQURTXCI+UG9reSByZWZlcmVuY2UgbWFudWFsPC9hPiBmb3IgaW5mb3JtYXRpb24iCisgICAgICAgIGJidGhyZWFkX3dpZGdldCwgc2VsZi5iYl9zcGlubmVyID0gc2VsZi5nZW5fc3Bpbm5lcl93aWRnZXQoc2VsZi5jb25maWd1cmF0aW9uLmJidGhyZWFkLCAxLCBzZWxmLm1heF90aHJlYWRzLCI8Yj5CaXRCYWtlIHByYWxsYWxlbCB0aHJlYWRzPC9iPiIgKyAiKiIgKyB0b29sdGlwKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQoYmJ0aHJlYWRfd2lkZ2V0LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgc3ViX3Zib3ggPSBndGsuVkJveChGYWxzZSwgNikKKyAgICAgICAgYWR2YW5jZWRfdmJveC5wYWNrX3N0YXJ0KHN1Yl92Ym94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGxhYmVsID0gc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCJNYWtlIHBhcmFsbGVsIHRocmVhZHMiKQorICAgICAgICB0b29sdGlwID0gIlNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMgdGhlIGhvc3QgY2FuIHVzZSBkdXJpbmcgdGhlIGJ1aWxkLiBTZWUgdGhlIDxhIGhyZWY9XCIiCisgICAgICAgIHRvb2x0aXAgKz0gImh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzL2N1cnJlbnQvcG9reS1yZWYtbWFudWFsLyIKKyAgICAgICAgdG9vbHRpcCArPSAicG9reS1yZWYtbWFudWFsLmh0bWwjdmFyLVBBUkFMTEVMX01BS0VcIj5Qb2t5IHJlZmVyZW5jZSBtYW51YWw8L2E+IGZvciBpbmZvcm1hdGlvbiIKKyAgICAgICAgcG1ha2Vfd2lkZ2V0LCBzZWxmLnBtYWtlX3NwaW5uZXIgPSBzZWxmLmdlbl9zcGlubmVyX3dpZGdldChzZWxmLmNvbmZpZ3VyYXRpb24ucG1ha2UsIDEsIHNlbGYubWF4X3RocmVhZHMsIjxiPk1ha2UgcGFyYWxsZWwgdGhyZWFkczwvYj4iICsgIioiICsgdG9vbHRpcCkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHBtYWtlX3dpZGdldCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydChzZWxmLmdlbl9sYWJlbF93aWRnZXQoJzxzcGFuIHdlaWdodD0iYm9sZCI+RG93bmxvYWRlZCBzb3VyY2UgY29kZTwvc3Bhbj4nKSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveCA9IGd0ay5WQm94KEZhbHNlLCA2KQorICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc3ViX3Zib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgbGFiZWwgPSBzZWxmLmdlbl9sYWJlbF93aWRnZXQoIkRvd25sb2FkcyBkaXJlY3RvcnkiKQorICAgICAgICB0b29sdGlwID0gIlNlbGVjdCBhIGZvbGRlciB0aGF0IGNhY2hlcyB0aGUgdXBzdHJlYW0gcHJvamVjdCBzb3VyY2UgY29kZSIKKyAgICAgICAgZGxkaXJfd2lkZ2V0LCBzZWxmLmRsZGlyX3RleHQgPSBzZWxmLmdlbl9lbnRyeV93aWRnZXQoc2VsZi5jb25maWd1cmF0aW9uLmRsZGlyLCBzZWxmLCI8Yj5Eb3dubG9hZGVkIHNvdXJjZSBjb2RlPC9iPiIgKyAiKiIgKyB0b29sdGlwKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQoZGxkaXJfd2lkZ2V0LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgcmV0dXJuIGFkdmFuY2VkX3Zib3gKKworICAgIGRlZiBjcmVhdGVfc2hhcmVkX3N0YXRlX3BhZ2Uoc2VsZik6CisgICAgICAgIGFkdmFuY2VkX3Zib3ggPSBndGsuVkJveChGYWxzZSkKKyAgICAgICAgYWR2YW5jZWRfdmJveC5zZXRfYm9yZGVyX3dpZHRoKDEyKQorCisgICAgICAgIHN1Yl92Ym94ID0gZ3RrLlZCb3goRmFsc2UpCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydChzdWJfdmJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPTI0KQorICAgICAgICBjb250ZW50ID0gIjxzcGFuPlNoYXJlZCBzdGF0ZSBkaXJlY3Rvcnk8L3NwYW4+IgorICAgICAgICB0b29sdGlwID0gIlNlbGVjdCBhIGZvbGRlciB0aGF0IGNhY2hlcyB5b3VyIHByZWJ1aWx0IHJlc3VsdHMiCisgICAgICAgIGxhYmVsID0gc2VsZi5nZW5fbGFiZWxfaW5mb193aWRnZXQoY29udGVudCwiPGI+U2hhcmVkIHN0YXRlIGRpcmVjdG9yeTwvYj4iICsgIioiICsgdG9vbHRpcCkKKyAgICAgICAgc3N0YXRlZGlyX3dpZGdldCwgc2VsZi5zc3RhdGVkaXJfdGV4dCA9IHNlbGYuZ2VuX2VudHJ5X3dpZGdldChzZWxmLmNvbmZpZ3VyYXRpb24uc3N0YXRlZGlyLCBzZWxmKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQoc3N0YXRlZGlyX3dpZGdldCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPTYpCisKKyAgICAgICAgY29udGVudCA9ICI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+U2hhcmVkIHN0YXRlIG1pcnJvcnM8L3NwYW4+IgorICAgICAgICB0b29sdGlwID0gIlVSTHMgcG9pbnRpbmcgdG8gcHJlLWJ1aWx0IG1pcnJvcnMgdGhhdCB3aWxsIHNwZWVkIHlvdXIgYnVpbGQuICIKKyAgICAgICAgdG9vbHRpcCArPSAiU2VsZWN0IHRoZSBcJ1N0YW5kYXJkXCcgY29uZmlndXJhdGlvbiBpZiB0aGUgc3RydWN0dXJlIG9mIHlvdXIgIgorICAgICAgICB0b29sdGlwICs9ICJtaXJyb3IgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHlvdXIgbG9jYWwgc2hhcmVkIHN0YXRlIGRpcmVjdG9yeS4gIgorICAgICAgICB0b29sdGlwICs9ICJGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzaGFyZWQgc3RhdGUgbWlycm9ycywgY2hlY2sgdGhlIDxhIGhyZWY9XCIiCisgICAgICAgIHRvb2x0aXAgKz0gImh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzL2N1cnJlbnQvcG9reS1yZWYtbWFudWFsLyIKKyAgICAgICAgdG9vbHRpcCArPSAicG9reS1yZWYtbWFudWFsLmh0bWwjc2hhcmVkLXN0YXRlXCI+WW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsPC9hPi4iCisgICAgICAgIHRhYmxlID0gc2VsZi5nZW5fbGFiZWxfaW5mb193aWRnZXQoY29udGVudCwiPGI+U2hhcmVkIHN0YXRlIG1pcnJvcnM8L2I+IiArICIqIiArIHRvb2x0aXApCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydCh0YWJsZSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPTYpCisKKyAgICAgICAgc3ViX3Zib3ggPSBndGsuVkJveChGYWxzZSkKKyAgICAgICAgYWR2YW5jZWRfdmJveC5wYWNrX3N0YXJ0KHN1Yl92Ym94LCBndGsuVFJVRSwgZ3RrLlRSVUUsIDApCisKKyAgICAgICAgaWYgc2VsZi5zc3RhdGVtaXJyb3JzX2NoYW5nZWQgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc19jaGFuZ2VkID0gMQorICAgICAgICAgICAgc3N0YXRlbWlycm9ycyA9IHNlbGYuY29uZmlndXJhdGlvbi5zc3RhdGVtaXJyb3IKKyAgICAgICAgICAgIGlmIHNzdGF0ZW1pcnJvcnMgPT0gIiI6CisgICAgICAgICAgICAgICAgc21fbGlzdCA9IFsiU3RhbmRhcmQiLCAiIiwgImZpbGU6Ly8oLiopIl0KKyAgICAgICAgICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfbGlzdC5hcHBlbmQoc21fbGlzdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3N0YXRlbWlycm9ycyA9IFt4IGZvciB4IGluIHNzdGF0ZW1pcnJvcnMuc3BsaXQoJ1xcbicpXQorICAgICAgICAgICAgICAgIGZvciBzc3RhdGVtaXJyb3IgaW4gc3N0YXRlbWlycm9yczoKKyAgICAgICAgICAgICAgICAgICAgc3N0YXRlbWlycm9yX2ZpZWxkcyA9IFt4IGZvciB4IGluIHNzdGF0ZW1pcnJvci5zcGxpdCgnICcpIGlmIHguc3RyaXAoKV0KKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHNzdGF0ZW1pcnJvcl9maWVsZHMpID09IDI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzc3RhdGVtaXJyb3JfZmllbGRzWzBdID09ICJmaWxlOi8vKC4qKSIgb3Igc3N0YXRlbWlycm9yX2ZpZWxkc1swXSA9PSAiZmlsZTovLy4qIjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbV9saXN0ID0gWyJTdGFuZGFyZCIsIHNzdGF0ZW1pcnJvcl9maWVsZHNbMV0sIHNzdGF0ZW1pcnJvcl9maWVsZHNbMF1dCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtX2xpc3QgPSBbIkN1c3RvbSIsIHNzdGF0ZW1pcnJvcl9maWVsZHNbMV0sIHNzdGF0ZW1pcnJvcl9maWVsZHNbMF1dCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfbGlzdC5hcHBlbmQoc21fbGlzdCkKKworICAgICAgICBzc3RhdGVtaXJyb3JzX3dpZGdldCwgc3N0YXRlbWlycm9yc19zdG9yZSA9IHNlbGYuZ2VuX3NoYXJlZF9zc3RhdGVfd2lkZ2V0KHNlbGYuc3N0YXRlbWlycm9yc19saXN0LCBzZWxmKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHNzdGF0ZW1pcnJvcnNfd2lkZ2V0LCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHRhYmxlID0gZ3RrLlRhYmxlKDEsIDEwLCBGYWxzZSkKKyAgICAgICAgdGFibGUuc2V0X2NvbF9zcGFjaW5ncyg2KQorICAgICAgICBhZGRfbWlycm9yX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiQWRkIG1pcnJvciIpCisgICAgICAgIGFkZF9taXJyb3JfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmFkZF9taXJyb3IpCisgICAgICAgIGFkZF9taXJyb3JfYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoMTIwLDMwKQorICAgICAgICB0YWJsZS5hdHRhY2goYWRkX21pcnJvcl9idXR0b24sIDEsIDIsIDAsIDEsIHhvcHRpb25zPWd0ay5TSFJJTkspCisKKyAgICAgICAgc2VsZi5kZWxldGVfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJEZWxldGUgbWlycm9yIikKKyAgICAgICAgc2VsZi5kZWxldGVfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmRlbGV0ZV9jYikKKyAgICAgICAgc2VsZi5kZWxldGVfYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoMTIwLCAzMCkKKyAgICAgICAgdGFibGUuYXR0YWNoKHNlbGYuZGVsZXRlX2J1dHRvbiwgMywgNCwgMCwgMSwgeG9wdGlvbnM9Z3RrLlNIUklOSykKKworICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQodGFibGUsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSwgcGFkZGluZz02KQorCisgICAgICAgIHJldHVybiBhZHZhbmNlZF92Ym94CisKKyAgICBkZWYgZ2VuX3NoYXJlZF9zc3RhdGVfd2lkZ2V0KHNlbGYsIHNzdGF0ZW1pcnJvcnNfbGlzdCwgd2luZG93KToKKyAgICAgICAgaGJveCA9IGd0ay5IQm94KEZhbHNlKQorCisgICAgICAgIHNzdGF0ZW1pcnJvcnNfc3RvcmUgPSBndGsuTGlzdFN0b3JlKHN0ciwgc3RyLCBzdHIpCisgICAgICAgIGZvciBzc3RhdGVtaXJyb3IgaW4gc3N0YXRlbWlycm9yc19saXN0OgorICAgICAgICAgICAgc3N0YXRlbWlycm9yc19zdG9yZS5hcHBlbmQoc3N0YXRlbWlycm9yKQorCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc190diA9IGd0ay5UcmVlVmlldygpCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc190di5zZXRfcnVsZXNfaGludChUcnVlKQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuc2V0X2hlYWRlcnNfdmlzaWJsZShUcnVlKQorICAgICAgICB0cmVlX3NlbGVjdGlvbiA9IHNlbGYuc3N0YXRlbWlycm9yc190di5nZXRfc2VsZWN0aW9uKCkKKyAgICAgICAgdHJlZV9zZWxlY3Rpb24uc2V0X21vZGUoZ3RrLlNFTEVDVElPTl9TSU5HTEUpCisKKyAgICAgICAgIyBBbGxvdyBlbmFibGUgZHJhZyBhbmQgZHJvcCBvZiByb3dzIGluY2x1ZGluZyByb3cgbW92ZQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuZW5hYmxlX21vZGVsX2RyYWdfc291cmNlKCBndGsuZ2RrLkJVVFRPTjFfTUFTSywKKyAgICAgICAgICAgIHNlbGYuVEFSR0VUUywKKyAgICAgICAgICAgIGd0ay5nZGsuQUNUSU9OX0RFRkFVTFR8CisgICAgICAgICAgICBndGsuZ2RrLkFDVElPTl9NT1ZFKQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuZW5hYmxlX21vZGVsX2RyYWdfZGVzdChzZWxmLlRBUkdFVFMsCisgICAgICAgICAgICBndGsuZ2RrLkFDVElPTl9ERUZBVUxUKQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuY29ubmVjdCgiZHJhZ19kYXRhX2dldCIsIHNlbGYuZHJhZ19kYXRhX2dldF9jYikKKyAgICAgICAgc2VsZi5zc3RhdGVtaXJyb3JzX3R2LmNvbm5lY3QoImRyYWdfZGF0YV9yZWNlaXZlZCIsIHNlbGYuZHJhZ19kYXRhX3JlY2VpdmVkX2NiKQorCisKKyAgICAgICAgc2VsZi5zY3JvbGwgPSBndGsuU2Nyb2xsZWRXaW5kb3coKQorICAgICAgICBzZWxmLnNjcm9sbC5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfTkVWRVIsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQorICAgICAgICBzZWxmLnNjcm9sbC5zZXRfc2hhZG93X3R5cGUoZ3RrLlNIQURPV19JTikKKyAgICAgICAgc2VsZi5zY3JvbGwuY29ubmVjdCgnc2l6ZS1hbGxvY2F0ZScsIHNlbGYuc2Nyb2xsX2NoYW5nZWQpCisgICAgICAgIHNlbGYuc2Nyb2xsLmFkZChzZWxmLnNzdGF0ZW1pcnJvcnNfdHYpCisKKyAgICAgICAgI2xpc3Qgc3RvcmUgZm9yIGNlbGwgcmVuZGVyZXIKKyAgICAgICAgbSA9IGd0ay5MaXN0U3RvcmUoZ29iamVjdC5UWVBFX1NUUklORykKKyAgICAgICAgbS5hcHBlbmQoWyJTdGFuZGFyZCJdKQorICAgICAgICBtLmFwcGVuZChbIkN1c3RvbSJdKQorCisgICAgICAgIGNlbGwwID0gZ3RrLkNlbGxSZW5kZXJlckNvbWJvKCkKKyAgICAgICAgY2VsbDAuc2V0X3Byb3BlcnR5KCJtb2RlbCIsbSkKKyAgICAgICAgY2VsbDAuc2V0X3Byb3BlcnR5KCJ0ZXh0LWNvbHVtbiIsIDApCisgICAgICAgIGNlbGwwLnNldF9wcm9wZXJ0eSgiZWRpdGFibGUiLCBUcnVlKQorICAgICAgICBjZWxsMC5zZXRfcHJvcGVydHkoImhhcy1lbnRyeSIsIEZhbHNlKQorICAgICAgICBjb2wwID0gZ3RrLlRyZWVWaWV3Q29sdW1uKCJDb25maWd1cmF0aW9uIikKKyAgICAgICAgY29sMC5wYWNrX3N0YXJ0KGNlbGwwLCBGYWxzZSkKKyAgICAgICAgY29sMC5hZGRfYXR0cmlidXRlKGNlbGwwLCAidGV4dCIsIDApCisgICAgICAgIGNvbDAuc2V0X2NlbGxfZGF0YV9mdW5jKGNlbGwwLCBzZWxmLmNvbmZpZ3VyYXRpb25fZmllbGQpCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc190di5hcHBlbmRfY29sdW1uKGNvbDApCisKKyAgICAgICAgY2VsbDAuY29ubmVjdCgiZWRpdGVkIiwgc2VsZi5jb21ib19jaGFuZ2VkLCBzc3RhdGVtaXJyb3JzX3N0b3JlKQorCisgICAgICAgIHNlbGYuY2VsbDEgPSBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpCisgICAgICAgIHNlbGYuY2VsbDEuc2V0X3BhZGRpbmcoNSwyKQorICAgICAgICBjb2wxID0gZ3RrLlRyZWVWaWV3Q29sdW1uKCdSZWdleCcsIHNlbGYuY2VsbDEpCisgICAgICAgIGNvbDEuc2V0X2NlbGxfZGF0YV9mdW5jKHNlbGYuY2VsbDEsIHNlbGYucmVnZXhfZmllbGQpCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc190di5hcHBlbmRfY29sdW1uKGNvbDEpCisKKyAgICAgICAgc2VsZi5jZWxsMS5jb25uZWN0KCJlZGl0ZWQiLCBzZWxmLnJlZ2V4X2NoYW5nZWQsIHNzdGF0ZW1pcnJvcnNfc3RvcmUpCisKKyAgICAgICAgY2VsbDIgPSBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpCisgICAgICAgIGNlbGwyLnNldF9wYWRkaW5nKDUsMikKKyAgICAgICAgY2VsbDIuc2V0X3Byb3BlcnR5KCJlZGl0YWJsZSIsIFRydWUpCisgICAgICAgIGNvbDIgPSBndGsuVHJlZVZpZXdDb2x1bW4oJ1VSTCcsIGNlbGwyKQorICAgICAgICBjb2wyLnNldF9jZWxsX2RhdGFfZnVuYyhjZWxsMiwgc2VsZi51cmxfZmllbGQpCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc190di5hcHBlbmRfY29sdW1uKGNvbDIpCisKKyAgICAgICAgY2VsbDIuY29ubmVjdCgiZWRpdGVkIiwgc2VsZi51cmxfY2hhbmdlZCwgc3N0YXRlbWlycm9yc19zdG9yZSkKKworICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuc2V0X21vZGVsKHNzdGF0ZW1pcnJvcnNfc3RvcmUpCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc190di5zZXRfY3Vyc29yKHNlbGYuc2VsZWN0ZWRfbWlycm9yX3JvdykKKyAgICAgICAgaGJveC5wYWNrX3N0YXJ0KHNlbGYuc2Nyb2xsLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorICAgICAgICBoYm94LnNob3dfYWxsKCkKKworICAgICAgICByZXR1cm4gaGJveCwgc3N0YXRlbWlycm9yc19zdG9yZQorCisgICAgZGVmIGRyYWdfZGF0YV9nZXRfY2Ioc2VsZiwgdHJlZXZpZXcsIGNvbnRleHQsIHNlbGVjdGlvbiwgdGFyZ2V0X2lkLCBldGltZSk6CisgICAgICAgIHRyZWVzZWxlY3Rpb24gPSB0cmVldmlldy5nZXRfc2VsZWN0aW9uKCkKKyAgICAgICAgbW9kZWwsIGl0ZXIgPSB0cmVlc2VsZWN0aW9uLmdldF9zZWxlY3RlZCgpCisgICAgICAgIGRhdGEgPSBtb2RlbC5nZXRfc3RyaW5nX2Zyb21faXRlcihpdGVyKQorICAgICAgICBzZWxlY3Rpb24uc2V0KHNlbGVjdGlvbi50YXJnZXQsIDgsIGRhdGEpCisKKyAgICBkZWYgZHJhZ19kYXRhX3JlY2VpdmVkX2NiKHNlbGYsIHRyZWV2aWV3LCBjb250ZXh0LCB4LCB5LCBzZWxlY3Rpb24sIGluZm8sIGV0aW1lKToKKyAgICAgICAgbW9kZWwgPSB0cmVldmlldy5nZXRfbW9kZWwoKQorICAgICAgICBkYXRhID0gW10KKyAgICAgICAgdHJlZV9pdGVyID0gbW9kZWwuZ2V0X2l0ZXJfZnJvbV9zdHJpbmcoc2VsZWN0aW9uLmRhdGEpCisgICAgICAgIGRhdGEuYXBwZW5kKG1vZGVsLmdldF92YWx1ZSh0cmVlX2l0ZXIsIDApKQorICAgICAgICBkYXRhLmFwcGVuZChtb2RlbC5nZXRfdmFsdWUodHJlZV9pdGVyLCAxKSkKKyAgICAgICAgZGF0YS5hcHBlbmQobW9kZWwuZ2V0X3ZhbHVlKHRyZWVfaXRlciwgMikpCisKKyAgICAgICAgZHJvcF9pbmZvID0gdHJlZXZpZXcuZ2V0X2Rlc3Rfcm93X2F0X3Bvcyh4LCB5KQorICAgICAgICBpZiBkcm9wX2luZm86CisgICAgICAgICAgICBwYXRoLCBwb3NpdGlvbiA9IGRyb3BfaW5mbworICAgICAgICAgICAgaXRlciA9IG1vZGVsLmdldF9pdGVyKHBhdGgpCisgICAgICAgICAgICBpZiAocG9zaXRpb24gPT0gZ3RrLlRSRUVfVklFV19EUk9QX0JFRk9SRSBvciBwb3NpdGlvbiA9PSBndGsuVFJFRV9WSUVXX0RST1BfSU5UT19PUl9CRUZPUkUpOgorICAgICAgICAgICAgICAgIG1vZGVsLmluc2VydF9iZWZvcmUoaXRlciwgZGF0YSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbW9kZWwuaW5zZXJ0X2FmdGVyKGl0ZXIsIGRhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtb2RlbC5hcHBlbmQoZGF0YSkKKyAgICAgICAgaWYgY29udGV4dC5hY3Rpb24gPT0gZ3RrLmdkay5BQ1RJT05fTU9WRToKKyAgICAgICAgICAgIGNvbnRleHQuZmluaXNoKFRydWUsIFRydWUsIGV0aW1lKQorICAgICAgICByZXR1cm4KKworICAgIGRlZiBkZWxldGVfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZWN0aW9uID0gc2VsZi5zc3RhdGVtaXJyb3JzX3R2LmdldF9zZWxlY3Rpb24oKQorICAgICAgICB0cmVlX21vZGVsLCB0cmVlX2l0ZXIgPSBzZWxlY3Rpb24uZ2V0X3NlbGVjdGVkKCkKKyAgICAgICAgaW5kZXggPSBpbnQodHJlZV9tb2RlbC5nZXRfc3RyaW5nX2Zyb21faXRlcih0cmVlX2l0ZXIpKQorICAgICAgICBpZiBpbmRleCA9PSAwOgorICAgICAgICAgICAgc2VsZi5zZWxlY3RlZF9taXJyb3Jfcm93ID0gaW5kZXgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRfbWlycm9yX3JvdyA9IGluZGV4IC0gMQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfbGlzdC5wb3AoaW5kZXgpCisgICAgICAgIHNlbGYucmVmcmVzaF9zaGFyZWRfc3RhdGVfcGFnZSgpCisgICAgICAgIGlmIG5vdCBzZWxmLnNzdGF0ZW1pcnJvcnNfbGlzdDoKKyAgICAgICAgICAgIHNlbGYuZGVsZXRlX2J1dHRvbi5zZXRfc2Vuc2l0aXZlKEZhbHNlKQorCisgICAgZGVmIGFkZF9taXJyb3Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5uZXdfbWlycm9yID0gVHJ1ZQorICAgICAgICB0b29sdGlwID0gIlNlbGVjdCB0aGUgcHJlLWJ1aWx0IG1pcnJvciB0aGF0IHdpbGwgc3BlZWQgeW91ciBidWlsZCIKKyAgICAgICAgaW5kZXggPSBsZW4oc2VsZi5zc3RhdGVtaXJyb3JzX2xpc3QpCisgICAgICAgIHNlbGYuc2VsZWN0ZWRfbWlycm9yX3JvdyA9IGluZGV4CisgICAgICAgIHNtX2xpc3QgPSBbIlN0YW5kYXJkIiwgIiIsICJmaWxlOi8vKC4qKSJdCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc19saXN0LmFwcGVuZChzbV9saXN0KQorICAgICAgICBzZWxmLnJlZnJlc2hfc2hhcmVkX3N0YXRlX3BhZ2UoKQorCisgICAgZGVmIHNjcm9sbF9jaGFuZ2VkKHNlbGYsIHdpZGdldCwgZXZlbnQsIGRhdGE9Tm9uZSk6CisgICAgICAgIGlmIHNlbGYubmV3X21pcnJvciA9PSBUcnVlOgorICAgICAgICAgICAgYWRqID0gd2lkZ2V0LmdldF92YWRqdXN0bWVudCgpCisgICAgICAgICAgICBhZGouc2V0X3ZhbHVlKGFkai51cHBlciAtIGFkai5wYWdlX3NpemUpCisgICAgICAgICAgICBzZWxmLm5ld19taXJyb3IgPSBGYWxzZQorCisgICAgZGVmIGNvbWJvX2NoYW5nZWQoc2VsZiwgd2lkZ2V0LCBwYXRoLCB0ZXh0LCBtb2RlbCk6CisgICAgICAgIG1vZGVsW3BhdGhdWzBdID0gdGV4dAorICAgICAgICBzZWxlY3Rpb24gPSBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuZ2V0X3NlbGVjdGlvbigpCisgICAgICAgIHRyZWVfbW9kZWwsIHRyZWVfaXRlciA9IHNlbGVjdGlvbi5nZXRfc2VsZWN0ZWQoKQorICAgICAgICBpbmRleCA9IGludCh0cmVlX21vZGVsLmdldF9zdHJpbmdfZnJvbV9pdGVyKHRyZWVfaXRlcikpCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc19saXN0W2luZGV4XVswXSA9IHRleHQKKworICAgIGRlZiByZWdleF9jaGFuZ2VkKHNlbGYsIGNlbGwsIHBhdGgsIG5ld190ZXh0LCB1c2VyX2RhdGEpOgorICAgICAgICB1c2VyX2RhdGFbcGF0aF1bMl0gPSBuZXdfdGV4dAorICAgICAgICBzZWxlY3Rpb24gPSBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuZ2V0X3NlbGVjdGlvbigpCisgICAgICAgIHRyZWVfbW9kZWwsIHRyZWVfaXRlciA9IHNlbGVjdGlvbi5nZXRfc2VsZWN0ZWQoKQorICAgICAgICBpbmRleCA9IGludCh0cmVlX21vZGVsLmdldF9zdHJpbmdfZnJvbV9pdGVyKHRyZWVfaXRlcikpCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc19saXN0W2luZGV4XVsyXSA9IG5ld190ZXh0CisgICAgICAgIHJldHVybgorCisgICAgZGVmIHVybF9jaGFuZ2VkKHNlbGYsIGNlbGwsIHBhdGgsIG5ld190ZXh0LCB1c2VyX2RhdGEpOgorICAgICAgICBpZiBuZXdfdGV4dCE9IkVudGVyIHRoZSBtaXJyb3IgVVJMIiBhbmQgbmV3X3RleHQhPSJNYXRjaCByZWdleCBhbmQgcmVwbGFjZSBpdCB3aXRoIHRoaXMgVVJMIjoKKyAgICAgICAgICAgIHVzZXJfZGF0YVtwYXRoXVsxXSA9IG5ld190ZXh0CisgICAgICAgICAgICBzZWxlY3Rpb24gPSBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuZ2V0X3NlbGVjdGlvbigpCisgICAgICAgICAgICB0cmVlX21vZGVsLCB0cmVlX2l0ZXIgPSBzZWxlY3Rpb24uZ2V0X3NlbGVjdGVkKCkKKyAgICAgICAgICAgIGluZGV4ID0gaW50KHRyZWVfbW9kZWwuZ2V0X3N0cmluZ19mcm9tX2l0ZXIodHJlZV9pdGVyKSkKKyAgICAgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc19saXN0W2luZGV4XVsxXSA9IG5ld190ZXh0CisgICAgICAgIHJldHVybgorCisgICAgZGVmIGNvbmZpZ3VyYXRpb25fZmllbGQoc2VsZiwgY29sdW1uLCBjZWxsLCBtb2RlbCwgaXRlcik6CisgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCd0ZXh0JywgbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIsIDApKQorICAgICAgICBpZiBtb2RlbC5nZXRfdmFsdWUoaXRlciwgMCkgPT0gIlN0YW5kYXJkIjoKKyAgICAgICAgICAgIHNlbGYuY2VsbDEuc2V0X3Byb3BlcnR5KCJzZW5zaXRpdmUiLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuY2VsbDEuc2V0X3Byb3BlcnR5KCJlZGl0YWJsZSIsIEZhbHNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5jZWxsMS5zZXRfcHJvcGVydHkoInNlbnNpdGl2ZSIsIFRydWUpCisgICAgICAgICAgICBzZWxmLmNlbGwxLnNldF9wcm9wZXJ0eSgiZWRpdGFibGUiLCBUcnVlKQorICAgICAgICByZXR1cm4KKworICAgIGRlZiByZWdleF9maWVsZChzZWxmLCBjb2x1bW4sIGNlbGwsIG1vZGVsLCBpdGVyKToKKyAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkoJ3RleHQnLCBtb2RlbC5nZXRfdmFsdWUoaXRlciwgMikpCisgICAgICAgIHJldHVybgorCisgICAgZGVmIHVybF9maWVsZChzZWxmLCBjb2x1bW4sIGNlbGwsIG1vZGVsLCBpdGVyKToKKyAgICAgICAgdGV4dCA9IG1vZGVsLmdldF92YWx1ZShpdGVyLCAxKQorICAgICAgICBpZiB0ZXh0ID09ICIiOgorICAgICAgICAgICAgaWYgbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIsIDApID09ICJTdGFuZGFyZCI6CisgICAgICAgICAgICAgICAgdGV4dCA9ICJFbnRlciB0aGUgbWlycm9yIFVSTCIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGV4dCA9ICJNYXRjaCByZWdleCBhbmQgcmVwbGFjZSBpdCB3aXRoIHRoaXMgVVJMIgorICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSgndGV4dCcsIHRleHQpCisgICAgICAgIHJldHVybgorCisgICAgZGVmIHJlZnJlc2hfc2hhcmVkX3N0YXRlX3BhZ2Uoc2VsZik6CisgICAgICAgIHBhZ2VfbnVtID0gc2VsZi5uYi5nZXRfY3VycmVudF9wYWdlKCkKKyAgICAgICAgc2VsZi5uYi5yZW1vdmVfcGFnZShwYWdlX251bSk7CisgICAgICAgIHNlbGYubmIuaW5zZXJ0X3BhZ2Uoc2VsZi5jcmVhdGVfc2hhcmVkX3N0YXRlX3BhZ2UoKSwgZ3RrLkxhYmVsKCJTaGFyZWQgc3RhdGUiKSxwYWdlX251bSkKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisgICAgICAgIHNlbGYubmIuc2V0X2N1cnJlbnRfcGFnZShwYWdlX251bSkKKworICAgIGRlZiB0ZXN0X3Byb3h5X2VuZGVkKHNlbGYsIHBhc3NlZCk6CisgICAgICAgIHNlbGYucHJveHlfdGVzdF9ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5zZXRfdGVzdF9wcm94eV9zdGF0ZShzZWxmLlRFU1RfTkVUV09SS19QQVNTRUQgaWYgcGFzc2VkIGVsc2Ugc2VsZi5URVNUX05FVFdPUktfRkFJTEVEKQorICAgICAgICBzZWxmLnNldF9zZW5zaXRpdmUoVHJ1ZSkKKyAgICAgICAgc2VsZi5yZWZyZXNoX3Byb3h5X2NvbXBvbmVudHMoKQorCisgICAgZGVmIHRpbWVyX2Z1bmMoc2VsZik6CisgICAgICAgIHNlbGYudGVzdF9wcm94eV9wcm9ncmVzcy5wdWxzZSgpCisgICAgICAgIHJldHVybiBzZWxmLnByb3h5X3Rlc3RfcnVubmluZworCisgICAgZGVmIHRlc3RfbmV0d29ya19idXR0b25fY2Ioc2VsZiwgYik6CisgICAgICAgIHNlbGYuc2V0X3Rlc3RfcHJveHlfc3RhdGUoc2VsZi5URVNUX05FVFdPUktfUlVOTklORykKKyAgICAgICAgc2VsZi5zZXRfc2Vuc2l0aXZlKEZhbHNlKQorICAgICAgICBzZWxmLnNhdmVfcHJveHlfZGF0YSgpCisgICAgICAgIGlmIHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgPT0gVHJ1ZToKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfaHR0cF9wcm94eShzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9wcm94eSgiaHR0cCIpKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9odHRwc19wcm94eShzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9wcm94eSgiaHR0cHMiKSkKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfZnRwX3Byb3h5KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX3Byb3h5KCJmdHAiKSkKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfc29ja3NfcHJveHkoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfcHJveHkoInNvY2tzIikpCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2N2c19wcm94eShzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9ob3N0X29ubHkoImN2cyIpLCBzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9wb3J0X29ubHkoImN2cyIpKQorICAgICAgICBlbGlmIHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgPT0gRmFsc2U6CisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2h0dHBfcHJveHkoIiIpCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2h0dHBzX3Byb3h5KCIiKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9mdHBfcHJveHkoIiIpCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X3NvY2tzX3Byb3h5KCIiKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9jdnNfcHJveHkoIiIsICIiKQorICAgICAgICBzZWxmLnByb3h5X3Rlc3RfcmFuID0gVHJ1ZQorICAgICAgICBzZWxmLnByb3h5X3Rlc3RfcnVubmluZyA9IFRydWUKKyAgICAgICAgZ29iamVjdC50aW1lb3V0X2FkZCgxMDAsIHNlbGYudGltZXJfZnVuYykKKyAgICAgICAgc2VsZi5oYW5kbGVyLnRyaWdnZXJfbmV0d29ya190ZXN0KCkKKworICAgIGRlZiB0ZXN0X3Byb3h5X2ZvY3VzX2V2ZW50KHNlbGYsIHcsIGRpcmVjdGlvbik6CisgICAgICAgIGlmIHNlbGYudGVzdF9wcm94eV9zdGF0ZSBpbiBbc2VsZi5URVNUX05FVFdPUktfUEFTU0VELCBzZWxmLlRFU1RfTkVUV09SS19GQUlMRURdOgorICAgICAgICAgICAgc2VsZi5zZXRfdGVzdF9wcm94eV9zdGF0ZShzZWxmLlRFU1RfTkVUV09SS19JTklUSUFMKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBodHRwX3Byb3h5X2NoYW5nZWQoc2VsZiwgZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBlID09IHNlbGYuaHR0cF9wcm94eToKKyAgICAgICAgICAgIFt3LnNldF90ZXh0KHNlbGYuaHR0cF9wcm94eS5nZXRfdGV4dCgpKSBmb3IgdyBpbiBzZWxmLnNhbWVfcHJveHlfYWRkcmVzc2VzXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgW3cuc2V0X3RleHQoc2VsZi5odHRwX3Byb3h5X3BvcnQuZ2V0X3RleHQoKSkgZm9yIHcgaW4gc2VsZi5zYW1lX3Byb3h5X3BvcnRzXQorCisgICAgZGVmIHByb3h5X2FkZHJlc3NfZm9jdXNfb3V0X2V2ZW50KHNlbGYsIHcsIGRpcmVjdGlvbik6CisgICAgICAgIHRleHQgPSB3LmdldF90ZXh0KCkKKyAgICAgICAgaWYgbm90IHRleHQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgdGV4dC5maW5kKCIvLyIpID09IC0xOgorICAgICAgICAgICAgdy5zZXRfdGV4dCgiaHR0cDovLyIgKyB0ZXh0KQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBzZXRfdGVzdF9wcm94eV9zdGF0ZShzZWxmLCBzdGF0ZSk6CisgICAgICAgIGlmIHNlbGYudGVzdF9wcm94eV9zdGF0ZSA9PSBzdGF0ZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBbc2VsZi5wcm94eV90YWJsZS5yZW1vdmUodykgZm9yIHcgaW4gc2VsZi50ZXN0X2d1aV9lbGVtZW50c10KKyAgICAgICAgaWYgc3RhdGUgPT0gc2VsZi5URVNUX05FVFdPUktfSU5JVElBTDoKKyAgICAgICAgICAgIHNlbGYucHJveHlfdGFibGUuYXR0YWNoKHNlbGYudGVzdF9uZXR3b3JrX2J1dHRvbiwgMSwgMiwgNSwgNikKKyAgICAgICAgICAgIHNlbGYudGVzdF9uZXR3b3JrX2J1dHRvbi5zaG93KCkKKyAgICAgICAgZWxpZiBzdGF0ZSA9PSBzZWxmLlRFU1RfTkVUV09SS19SVU5OSU5HOgorICAgICAgICAgICAgc2VsZi50ZXN0X3Byb3h5X3Byb2dyZXNzLnNldF9yY3N0eWxlKCJydW5uaW5nIikKKyAgICAgICAgICAgIHNlbGYudGVzdF9wcm94eV9wcm9ncmVzcy5zZXRfdGV4dCgiVGVzdGluZyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24iKQorICAgICAgICAgICAgc2VsZi5wcm94eV90YWJsZS5hdHRhY2goc2VsZi50ZXN0X3Byb3h5X3Byb2dyZXNzLCAwLCA1LCA1LCA2LCB4cGFkZGluZz00KQorICAgICAgICAgICAgc2VsZi50ZXN0X3Byb3h5X3Byb2dyZXNzLnNob3coKQorICAgICAgICBlbHNlOiAjIHBhc3NlZCBvciBmYWlsZWQKKyAgICAgICAgICAgIHNlbGYuZHVtbXlfcHJvZ3Jlc3MudXBkYXRlKDEuMCkKKyAgICAgICAgICAgIGlmIHN0YXRlID09IHNlbGYuVEVTVF9ORVRXT1JLX1BBU1NFRDoKKyAgICAgICAgICAgICAgICBzZWxmLmR1bW15X3Byb2dyZXNzLnNldF90ZXh0KCJZb3VyIG5ldHdvcmsgaXMgcHJvcGVybHkgY29uZmlndXJlZCIpCisgICAgICAgICAgICAgICAgc2VsZi5kdW1teV9wcm9ncmVzcy5zZXRfcmNzdHlsZSgicnVubmluZyIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZHVtbXlfcHJvZ3Jlc3Muc2V0X3RleHQoIk5ldHdvcmsgdGVzdCBmYWlsZWQiKQorICAgICAgICAgICAgICAgIHNlbGYuZHVtbXlfcHJvZ3Jlc3Muc2V0X3Jjc3R5bGUoImZhaWwiKQorICAgICAgICAgICAgc2VsZi5wcm94eV90YWJsZS5hdHRhY2goc2VsZi5kdW1teV9wcm9ncmVzcywgMCwgNCwgNSwgNikKKyAgICAgICAgICAgIHNlbGYucHJveHlfdGFibGUuYXR0YWNoKHNlbGYucmV0ZXN0X25ldHdvcmtfYnV0dG9uLCA0LCA1LCA1LCA2LCB4cGFkZGluZz00KQorICAgICAgICAgICAgc2VsZi5kdW1teV9wcm9ncmVzcy5zaG93KCkKKyAgICAgICAgICAgIHNlbGYucmV0ZXN0X25ldHdvcmtfYnV0dG9uLnNob3coKQorICAgICAgICBzZWxmLnRlc3RfcHJveHlfc3RhdGUgPSBzdGF0ZQorCisgICAgZGVmIGNyZWF0ZV9uZXR3b3JrX3BhZ2Uoc2VsZik6CisgICAgICAgIGFkdmFuY2VkX3Zib3ggPSBndGsuVkJveChGYWxzZSwgNikKKyAgICAgICAgYWR2YW5jZWRfdmJveC5zZXRfYm9yZGVyX3dpZHRoKDYpCisgICAgICAgIHNlbGYuc2FtZV9wcm94eV9hZGRyZXNzZXMgPSBbXQorICAgICAgICBzZWxmLnNhbWVfcHJveHlfcG9ydHMgPSBbXQorICAgICAgICBzZWxmLmFsbF9wcm94eV9wb3J0cyA9IFtdCisgICAgICAgIHNlbGYuYWxsX3Byb3h5X2FkZHJlc3NlcyA9IFtdCisKKyAgICAgICAgc3ViX3Zib3ggPSBndGsuVkJveChGYWxzZSwgNikKKyAgICAgICAgYWR2YW5jZWRfdmJveC5wYWNrX3N0YXJ0KHN1Yl92Ym94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGxhYmVsID0gc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+U2V0IHRoZSBwcm94aWVzIHVzZWQgd2hlbiBmZXRjaGluZyBzb3VyY2UgY29kZTwvc3Bhbj4iKQorICAgICAgICB0b29sdGlwID0gIlNldCB0aGUgcHJveGllcyB1c2VkIHdoZW4gZmV0Y2hpbmcgc291cmNlIGNvZGUuICBBIGJsYW5rIGZpZWxkIHVzZXMgYSBkaXJlY3QgaW50ZXJuZXQgY29ubmVjdGlvbi4iCisgICAgICAgIGluZm8gPSBIb2JJbmZvQnV0dG9uKCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+U2V0IHRoZSBwcm94aWVzIHVzZWQgd2hlbiBmZXRjaGluZyBzb3VyY2UgY29kZTwvc3Bhbj4iICsgIioiICsgdG9vbHRpcCwgc2VsZikKKyAgICAgICAgaGJveCA9IGd0ay5IQm94KEZhbHNlLCAxMikKKyAgICAgICAgaGJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorICAgICAgICBoYm94LnBhY2tfc3RhcnQoaW5mbywgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KGhib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBwcm94eV90ZXN0X2ZvY3VzID0gW10KKyAgICAgICAgc2VsZi5kaXJlY3RfY2hlY2tib3ggPSBndGsuUmFkaW9CdXR0b24oTm9uZSwgIkRpcmVjdCBuZXR3b3JrIGNvbm5lY3Rpb24iKQorICAgICAgICBwcm94eV90ZXN0X2ZvY3VzLmFwcGVuZChzZWxmLmRpcmVjdF9jaGVja2JveCkKKyAgICAgICAgc2VsZi5kaXJlY3RfY2hlY2tib3guc2V0X3Rvb2x0aXBfdGV4dCgiQ2hlY2sgdGhpcyBib3ggdG8gdXNlIGEgZGlyZWN0IGludGVybmV0IGNvbm5lY3Rpb24gd2l0aCBubyBwcm94eSIpCisgICAgICAgIHNlbGYuZGlyZWN0X2NoZWNrYm94LnNldF9hY3RpdmUobm90IHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQoc2VsZi5kaXJlY3RfY2hlY2tib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBzZWxmLnByb3h5X2NoZWNrYm94ID0gZ3RrLlJhZGlvQnV0dG9uKHNlbGYuZGlyZWN0X2NoZWNrYm94LCAiTWFudWFsIHByb3h5IGNvbmZpZ3VyYXRpb24iKQorICAgICAgICBwcm94eV90ZXN0X2ZvY3VzLmFwcGVuZChzZWxmLnByb3h5X2NoZWNrYm94KQorICAgICAgICBzZWxmLnByb3h5X2NoZWNrYm94LnNldF90b29sdGlwX3RleHQoIkNoZWNrIHRoaXMgYm94IHRvIG1hbnVhbGx5IHNldCB1cCBhIHNwZWNpZmljIHByb3h5IikKKyAgICAgICAgc2VsZi5wcm94eV9jaGVja2JveC5zZXRfYWN0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQoc2VsZi5wcm94eV9jaGVja2JveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHNlbGYuc2FtZV9jaGVja2JveCA9IGd0ay5DaGVja0J1dHRvbigiVXNlIHRoZSBIVFRQIHByb3h5IGZvciBhbGwgcHJvdG9jb2xzIikKKyAgICAgICAgcHJveHlfdGVzdF9mb2N1cy5hcHBlbmQoc2VsZi5zYW1lX2NoZWNrYm94KQorICAgICAgICBzZWxmLnNhbWVfY2hlY2tib3guc2V0X3Rvb2x0aXBfdGV4dCgiQ2hlY2sgdGhpcyBib3ggdG8gdXNlIHRoZSBIVFRQIHByb3h5IGZvciBhbGwgZml2ZSBwcm94aWVzIikKKyAgICAgICAgc2VsZi5zYW1lX2NoZWNrYm94LnNldF9hY3RpdmUoc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpCisgICAgICAgIGhib3ggPSBndGsuSEJveChGYWxzZSwgMTIpCisgICAgICAgIGhib3gucGFja19zdGFydChzZWxmLnNhbWVfY2hlY2tib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSwgcGFkZGluZz0yNCkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChoYm94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgc2VsZi5wcm94eV90YWJsZSA9IGd0ay5UYWJsZSg2LCA1LCBGYWxzZSkKKyAgICAgICAgc2VsZi5odHRwX3Byb3h5LCBzZWxmLmh0dHBfcHJveHlfcG9ydCwgc2VsZi5odHRwX3Byb3h5X2RldGFpbHMgPSBzZWxmLmdlbl9wcm94eV9lbnRyeV93aWRnZXQoCisgICAgICAgICAgICAiaHR0cCIsIHNlbGYsIFRydWUsIDApCisgICAgICAgIHByb3h5X3Rlc3RfZm9jdXMgKz1bc2VsZi5odHRwX3Byb3h5LCBzZWxmLmh0dHBfcHJveHlfcG9ydF0KKyAgICAgICAgc2VsZi5odHRwX3Byb3h5LmNvbm5lY3QoImNoYW5nZWQiLCBzZWxmLmh0dHBfcHJveHlfY2hhbmdlZCkKKyAgICAgICAgc2VsZi5odHRwX3Byb3h5X3BvcnQuY29ubmVjdCgiY2hhbmdlZCIsIHNlbGYuaHR0cF9wcm94eV9jaGFuZ2VkKQorCisgICAgICAgIHNlbGYuaHR0cHNfcHJveHksIHNlbGYuaHR0cHNfcHJveHlfcG9ydCwgc2VsZi5odHRwc19wcm94eV9kZXRhaWxzID0gc2VsZi5nZW5fcHJveHlfZW50cnlfd2lkZ2V0KAorICAgICAgICAgICAgImh0dHBzIiwgc2VsZiwgVHJ1ZSwgMSkKKyAgICAgICAgcHJveHlfdGVzdF9mb2N1cyArPSBbc2VsZi5odHRwc19wcm94eSwgc2VsZi5odHRwc19wcm94eV9wb3J0XQorICAgICAgICBzZWxmLnNhbWVfcHJveHlfYWRkcmVzc2VzLmFwcGVuZChzZWxmLmh0dHBzX3Byb3h5KQorICAgICAgICBzZWxmLnNhbWVfcHJveHlfcG9ydHMuYXBwZW5kKHNlbGYuaHR0cHNfcHJveHlfcG9ydCkKKworICAgICAgICBzZWxmLmZ0cF9wcm94eSwgc2VsZi5mdHBfcHJveHlfcG9ydCwgc2VsZi5mdHBfcHJveHlfZGV0YWlscyA9IHNlbGYuZ2VuX3Byb3h5X2VudHJ5X3dpZGdldCgKKyAgICAgICAgICAgICJmdHAiLCBzZWxmLCBUcnVlLCAyKQorICAgICAgICBwcm94eV90ZXN0X2ZvY3VzICs9IFtzZWxmLmZ0cF9wcm94eSwgc2VsZi5mdHBfcHJveHlfcG9ydF0KKyAgICAgICAgc2VsZi5zYW1lX3Byb3h5X2FkZHJlc3Nlcy5hcHBlbmQoc2VsZi5mdHBfcHJveHkpCisgICAgICAgIHNlbGYuc2FtZV9wcm94eV9wb3J0cy5hcHBlbmQoc2VsZi5mdHBfcHJveHlfcG9ydCkKKworICAgICAgICBzZWxmLnNvY2tzX3Byb3h5LCBzZWxmLnNvY2tzX3Byb3h5X3BvcnQsIHNlbGYuc29ja3NfcHJveHlfZGV0YWlscyA9IHNlbGYuZ2VuX3Byb3h5X2VudHJ5X3dpZGdldCgKKyAgICAgICAgICAgICJzb2NrcyIsIHNlbGYsIFRydWUsIDMpCisgICAgICAgIHByb3h5X3Rlc3RfZm9jdXMgKz0gW3NlbGYuc29ja3NfcHJveHksIHNlbGYuc29ja3NfcHJveHlfcG9ydF0KKyAgICAgICAgc2VsZi5zYW1lX3Byb3h5X2FkZHJlc3Nlcy5hcHBlbmQoc2VsZi5zb2Nrc19wcm94eSkKKyAgICAgICAgc2VsZi5zYW1lX3Byb3h5X3BvcnRzLmFwcGVuZChzZWxmLnNvY2tzX3Byb3h5X3BvcnQpCisKKyAgICAgICAgc2VsZi5jdnNfcHJveHksIHNlbGYuY3ZzX3Byb3h5X3BvcnQsIHNlbGYuY3ZzX3Byb3h5X2RldGFpbHMgPSBzZWxmLmdlbl9wcm94eV9lbnRyeV93aWRnZXQoCisgICAgICAgICAgICAiY3ZzIiwgc2VsZiwgVHJ1ZSwgNCkKKyAgICAgICAgcHJveHlfdGVzdF9mb2N1cyArPSBbc2VsZi5jdnNfcHJveHksIHNlbGYuY3ZzX3Byb3h5X3BvcnRdCisgICAgICAgIHNlbGYuc2FtZV9wcm94eV9hZGRyZXNzZXMuYXBwZW5kKHNlbGYuY3ZzX3Byb3h5KQorICAgICAgICBzZWxmLnNhbWVfcHJveHlfcG9ydHMuYXBwZW5kKHNlbGYuY3ZzX3Byb3h5X3BvcnQpCisgICAgICAgIHNlbGYuYWxsX3Byb3h5X3BvcnRzID0gc2VsZi5zYW1lX3Byb3h5X3BvcnRzICsgW3NlbGYuaHR0cF9wcm94eV9wb3J0XQorICAgICAgICBzZWxmLmFsbF9wcm94eV9hZGRyZXNzZXMgPSBzZWxmLnNhbWVfcHJveHlfYWRkcmVzc2VzICsgW3NlbGYuaHR0cF9wcm94eV0KKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChzZWxmLnByb3h5X3RhYmxlLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlbGYucHJveHlfdGFibGUuc2hvd19hbGwoKQorCisgICAgICAgICMgQ3JlYXRlIHRoZSBncmFwaGljYWwgZWxlbWVudHMgZm9yIHRoZSBuZXR3b3JrIHRlc3QgZmVhdHVyZSwgYnV0IGRvbid0IGRpc3BsYXkgdGhlbSB5ZXQKKyAgICAgICAgc2VsZi50ZXN0X25ldHdvcmtfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJUZXN0IG5ldHdvcmsgY29uZmlndXJhdGlvbiIpCisgICAgICAgIHNlbGYudGVzdF9uZXR3b3JrX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi50ZXN0X25ldHdvcmtfYnV0dG9uX2NiKQorICAgICAgICBzZWxmLnRlc3RfcHJveHlfcHJvZ3Jlc3MgPSBIb2JQcm9ncmVzc0JhcigpCisgICAgICAgIHNlbGYuZHVtbXlfcHJvZ3Jlc3MgPSBIb2JQcm9ncmVzc0JhcigpCisgICAgICAgIHNlbGYucmV0ZXN0X25ldHdvcmtfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJSZXRlc3QiKQorICAgICAgICBzZWxmLnJldGVzdF9uZXR3b3JrX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi50ZXN0X25ldHdvcmtfYnV0dG9uX2NiKQorICAgICAgICBzZWxmLnRlc3RfZ3VpX2VsZW1lbnRzID0gW3NlbGYudGVzdF9uZXR3b3JrX2J1dHRvbiwgc2VsZi50ZXN0X3Byb3h5X3Byb2dyZXNzLCBzZWxmLmR1bW15X3Byb2dyZXNzLCBzZWxmLnJldGVzdF9uZXR3b3JrX2J1dHRvbl0KKyAgICAgICAgIyBJbml0aWFsaXplIHRoZSBuZXR3b3JrIHRlc3RlcgorICAgICAgICBzZWxmLnRlc3RfcHJveHlfc3RhdGUgPSBzZWxmLlRFU1RfTkVUV09SS19OT05FCisgICAgICAgIHNlbGYuc2V0X3Rlc3RfcHJveHlfc3RhdGUoc2VsZi5URVNUX05FVFdPUktfSU5JVElBTCkKKyAgICAgICAgc2VsZi5wcm94eV90ZXN0X3Bhc3NlZF9pZCA9IHNlbGYuaGFuZGxlci5jb25uZWN0KCJuZXR3b3JrLXBhc3NlZCIsIGxhbWJkYSBoOnNlbGYudGVzdF9wcm94eV9lbmRlZChUcnVlKSkKKyAgICAgICAgc2VsZi5wcm94eV90ZXN0X2ZhaWxlZF9pZCA9IHNlbGYuaGFuZGxlci5jb25uZWN0KCJuZXR3b3JrLWZhaWxlZCIsIGxhbWJkYSBoOnNlbGYudGVzdF9wcm94eV9lbmRlZChGYWxzZSkpCisgICAgICAgIFt3LmNvbm5lY3QoImZvY3VzLWluLWV2ZW50Iiwgc2VsZi50ZXN0X3Byb3h5X2ZvY3VzX2V2ZW50KSBmb3IgdyBpbiBwcm94eV90ZXN0X2ZvY3VzXQorICAgICAgICBbdy5jb25uZWN0KCJmb2N1cy1vdXQtZXZlbnQiLCBzZWxmLnByb3h5X2FkZHJlc3NfZm9jdXNfb3V0X2V2ZW50KSBmb3IgdyBpbiBzZWxmLmFsbF9wcm94eV9hZGRyZXNzZXNdCisKKyAgICAgICAgc2VsZi5kaXJlY3RfY2hlY2tib3guY29ubmVjdCgidG9nZ2xlZCIsIHNlbGYucHJveHlfY2hlY2tib3hfdG9nZ2xlZF9jYikKKyAgICAgICAgc2VsZi5wcm94eV9jaGVja2JveC5jb25uZWN0KCJ0b2dnbGVkIiwgc2VsZi5wcm94eV9jaGVja2JveF90b2dnbGVkX2NiKQorICAgICAgICBzZWxmLnNhbWVfY2hlY2tib3guY29ubmVjdCgidG9nZ2xlZCIsIHNlbGYuc2FtZV9jaGVja2JveF90b2dnbGVkX2NiKQorCisgICAgICAgIHNlbGYucmVmcmVzaF9wcm94eV9jb21wb25lbnRzKCkKKyAgICAgICAgcmV0dXJuIGFkdmFuY2VkX3Zib3gKKworICAgIGRlZiBzd2l0Y2hfdG9fcGFnZShzZWxmLCBwYWdlX2lkKToKKyAgICAgICAgc2VsZi5uYi5zZXRfY3VycmVudF9wYWdlKHBhZ2VfaWQpCisKKyAgICBkZWYgZGV0YWlsc19jYihzZWxmLCBidXR0b24sIHBhcmVudCwgcHJvdG9jb2wpOgorICAgICAgICBzZWxmLnNhdmVfcHJveHlfZGF0YSgpCisgICAgICAgIGRpYWxvZyA9IFByb3h5RGV0YWlsc0RpYWxvZyh0aXRsZSA9IHByb3RvY29sLnVwcGVyKCkgKyAiIFByb3h5IERldGFpbHMiLAorICAgICAgICAgICAgdXNlciA9IHNlbGYuY29uZmlndXJhdGlvbi5wcm94aWVzW3Byb3RvY29sXVsxXSwKKyAgICAgICAgICAgIHBhc3N3ZCA9IHNlbGYuY29uZmlndXJhdGlvbi5wcm94aWVzW3Byb3RvY29sXVsyXSwKKyAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudCwKKyAgICAgICAgICAgIGZsYWdzID0gZ3RrLkRJQUxPR19NT0RBTAorICAgICAgICAgICAgICAgICAgICB8IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVAorICAgICAgICAgICAgICAgICAgICB8IGd0ay5ESUFMT0dfTk9fU0VQQVJBVE9SKQorICAgICAgICBkaWFsb2cuYWRkX2J1dHRvbihndGsuU1RPQ0tfQ0xPU0UsIGd0ay5SRVNQT05TRV9PSykKKyAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgaWYgcmVzcG9uc2UgPT0gZ3RrLlJFU1BPTlNFX09LOgorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnByb3hpZXNbcHJvdG9jb2xdWzFdID0gZGlhbG9nLnVzZXIKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5wcm94aWVzW3Byb3RvY29sXVsyXSA9IGRpYWxvZy5wYXNzd2QKKyAgICAgICAgICAgIHNlbGYucmVmcmVzaF9wcm94eV9jb21wb25lbnRzKCkKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKSAgICAKKworICAgIGRlZiByb290ZnNfY29tYm9fY2hhbmdlZF9jYihzZWxmLCByb290ZnNfY29tYm8sIGFsbF9wYWNrYWdlX2Zvcm1hdCwgY2hlY2tfaGJveCk6CisgICAgICAgIGNvbWJvX2l0ZW0gPSBzZWxmLnJvb3Rmc19jb21iby5nZXRfYWN0aXZlX3RleHQoKQorICAgICAgICBmb3IgY2hpbGQgaW4gY2hlY2tfaGJveC5nZXRfY2hpbGRyZW4oKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY2hpbGQsIGd0ay5DaGVja0J1dHRvbik6CisgICAgICAgICAgICAgICAgY2hlY2tfaGJveC5yZW1vdmUoY2hpbGQpCisgICAgICAgIGZvciBmb3JtYXQgaW4gYWxsX3BhY2thZ2VfZm9ybWF0OgorICAgICAgICAgICAgaWYgZm9ybWF0ICE9IGNvbWJvX2l0ZW06CisgICAgICAgICAgICAgICAgY2hlY2tfYnV0dG9uID0gZ3RrLkNoZWNrQnV0dG9uKGZvcm1hdCkKKyAgICAgICAgICAgICAgICBjaGVja19oYm94LnBhY2tfc3RhcnQoY2hlY2tfYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGNoZWNrX2hib3guc2hvd19hbGwoKQorCisgICAgZGVmIGdlbl9wa2dmbXRfd2lkZ2V0KHNlbGYsIGN1cnJfcGFja2FnZV9mb3JtYXQsIGFsbF9wYWNrYWdlX2Zvcm1hdCwgdG9vbHRpcF9jb21ibz0iIiwgdG9vbHRpcF9leHRyYT0iIik6CisgICAgICAgIHBrZ2ZtdF9oYm94ID0gZ3RrLkhCb3goRmFsc2UsIDI0KQorCisgICAgICAgIHJvb3Rmc192Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpCisgICAgICAgIHBrZ2ZtdF9oYm94LnBhY2tfc3RhcnQocm9vdGZzX3Zib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBsYWJlbCA9IHNlbGYuZ2VuX2xhYmVsX3dpZGdldCgiUm9vdCBmaWxlIHN5c3RlbSBwYWNrYWdlIGZvcm1hdCIpCisgICAgICAgIHJvb3Rmc192Ym94LnBhY2tfc3RhcnQobGFiZWwsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICByb290ZnNfZm9ybWF0ID0gIiIKKyAgICAgICAgaWYgY3Vycl9wYWNrYWdlX2Zvcm1hdDoKKyAgICAgICAgICAgIHJvb3Rmc19mb3JtYXQgPSBjdXJyX3BhY2thZ2VfZm9ybWF0LnNwbGl0KClbMF0KKworICAgICAgICByb290ZnNfZm9ybWF0X3dpZGdldCwgcm9vdGZzX2NvbWJvID0gc2VsZi5nZW5fY29tYm9fd2lkZ2V0KHJvb3Rmc19mb3JtYXQsIGFsbF9wYWNrYWdlX2Zvcm1hdCwgdG9vbHRpcF9jb21ibykKKyAgICAgICAgcm9vdGZzX3Zib3gucGFja19zdGFydChyb290ZnNfZm9ybWF0X3dpZGdldCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIGV4dHJhX3Zib3ggPSBndGsuVkJveChGYWxzZSwgNikKKyAgICAgICAgcGtnZm10X2hib3gucGFja19zdGFydChleHRyYV92Ym94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgbGFiZWwgPSBzZWxmLmdlbl9sYWJlbF93aWRnZXQoIkFkZGl0aW9uYWwgcGFja2FnZSBmb3JtYXRzIikKKyAgICAgICAgZXh0cmFfdmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgY2hlY2tfaGJveCA9IGd0ay5IQm94KEZhbHNlLCAxMikKKyAgICAgICAgZXh0cmFfdmJveC5wYWNrX3N0YXJ0KGNoZWNrX2hib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgZm9yIGZvcm1hdCBpbiBhbGxfcGFja2FnZV9mb3JtYXQ6CisgICAgICAgICAgICBpZiBmb3JtYXQgIT0gcm9vdGZzX2Zvcm1hdDoKKyAgICAgICAgICAgICAgICBjaGVja19idXR0b24gPSBndGsuQ2hlY2tCdXR0b24oZm9ybWF0KQorICAgICAgICAgICAgICAgIGlzX2FjdGl2ZSA9IChmb3JtYXQgaW4gY3Vycl9wYWNrYWdlX2Zvcm1hdC5zcGxpdCgpKQorICAgICAgICAgICAgICAgIGNoZWNrX2J1dHRvbi5zZXRfYWN0aXZlKGlzX2FjdGl2ZSkKKyAgICAgICAgICAgICAgICBjaGVja19oYm94LnBhY2tfc3RhcnQoY2hlY2tfYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgaW5mbyA9IEhvYkluZm9CdXR0b24odG9vbHRpcF9leHRyYSwgc2VsZikKKyAgICAgICAgY2hlY2tfaGJveC5wYWNrX2VuZChpbmZvLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgcm9vdGZzX2NvbWJvLmNvbm5lY3QoImNoYW5nZWQiLCBzZWxmLnJvb3Rmc19jb21ib19jaGFuZ2VkX2NiLCBhbGxfcGFja2FnZV9mb3JtYXQsIGNoZWNrX2hib3gpCisKKyAgICAgICAgcGtnZm10X2hib3guc2hvd19hbGwoKQorCisgICAgICAgIHJldHVybiBwa2dmbXRfaGJveCwgcm9vdGZzX2NvbWJvLCBjaGVja19oYm94CisKKyAgICBkZWYgZWRpdGFibGVfc2V0dGluZ3NfY2VsbF9lZGl0ZWQoc2VsZiwgY2VsbCwgcGF0aF9zdHJpbmcsIG5ld190ZXh0LCBtb2RlbCk6CisgICAgICAgIGl0ID0gbW9kZWwuZ2V0X2l0ZXJfZnJvbV9zdHJpbmcocGF0aF9zdHJpbmcpCisgICAgICAgIGNvbHVtbiA9IGNlbGwuZ2V0X2RhdGEoImNvbHVtbiIpCisgICAgICAgIG1vZGVsLnNldChpdCwgY29sdW1uLCBuZXdfdGV4dCkKKworICAgIGRlZiBlZGl0YWJsZV9zZXR0aW5nc19hZGRfaXRlbV9jbGlja2VkKHNlbGYsIGJ1dHRvbiwgbW9kZWwpOgorICAgICAgICBuZXdfaXRlbSA9IFsiIyNLRVkjIyIsICIjI1ZBTFVFIyMiXQorCisgICAgICAgIGl0ZXIgPSBtb2RlbC5hcHBlbmQoKQorICAgICAgICBtb2RlbC5zZXQgKGl0ZXIsCisgICAgICAgICAgICAwLCBuZXdfaXRlbVswXSwKKyAgICAgICAgICAgIDEsIG5ld19pdGVtWzFdLAorICAgICAgICkKKworICAgIGRlZiBlZGl0YWJsZV9zZXR0aW5nc19yZW1vdmVfaXRlbV9jbGlja2VkKHNlbGYsIGJ1dHRvbiwgdHJlZXZpZXcpOgorICAgICAgICBzZWxlY3Rpb24gPSB0cmVldmlldy5nZXRfc2VsZWN0aW9uKCkKKyAgICAgICAgbW9kZWwsIGl0ZXIgPSBzZWxlY3Rpb24uZ2V0X3NlbGVjdGVkKCkKKworICAgICAgICBpZiBpdGVyOgorICAgICAgICAgICAgcGF0aCA9IG1vZGVsLmdldF9wYXRoKGl0ZXIpWzBdCisgICAgICAgICAgICBtb2RlbC5yZW1vdmUoaXRlcikKKyAKKyAgICBkZWYgZ2VuX2VkaXRhYmxlX3NldHRpbmdzKHNlbGYsIHNldHRpbmcsIHRvb2x0aXA9IiIpOgorICAgICAgICBzZXR0aW5nX2hib3ggPSBndGsuSEJveChGYWxzZSwgMTIpCisKKyAgICAgICAgdmJveCA9IGd0ay5WQm94KEZhbHNlLCAxMikKKyAgICAgICAgc2V0dGluZ19oYm94LnBhY2tfc3RhcnQodmJveCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICBzZXR0aW5nX3N0b3JlID0gZ3RrLkxpc3RTdG9yZShnb2JqZWN0LlRZUEVfU1RSSU5HLCBnb2JqZWN0LlRZUEVfU1RSSU5HKQorICAgICAgICBmb3Iga2V5IGluIHNldHRpbmcua2V5cygpOgorICAgICAgICAgICAgc2V0dGluZ19zdG9yZS5zZXQoc2V0dGluZ19zdG9yZS5hcHBlbmQoKSwgMCwga2V5LCAxLCBzZXR0aW5nW2tleV0pCisKKyAgICAgICAgc2V0dGluZ190cmVlID0gZ3RrLlRyZWVWaWV3KHNldHRpbmdfc3RvcmUpCisgICAgICAgIHNldHRpbmdfdHJlZS5zZXRfaGVhZGVyc192aXNpYmxlKFRydWUpCisgICAgICAgIHNldHRpbmdfdHJlZS5zZXRfc2l6ZV9yZXF1ZXN0KDMwMCwgMTAwKQorCisgICAgICAgIGNvbCA9IGd0ay5UcmVlVmlld0NvbHVtbignS2V5JykKKyAgICAgICAgY29sLnNldF9taW5fd2lkdGgoMTAwKQorICAgICAgICBjb2wuc2V0X21heF93aWR0aCgxNTApCisgICAgICAgIGNvbC5zZXRfcmVzaXphYmxlKFRydWUpCisgICAgICAgIGNvbDEgPSBndGsuVHJlZVZpZXdDb2x1bW4oJ1ZhbHVlJykKKyAgICAgICAgY29sMS5zZXRfbWluX3dpZHRoKDEwMCkKKyAgICAgICAgY29sMS5zZXRfbWF4X3dpZHRoKDE1MCkKKyAgICAgICAgY29sMS5zZXRfcmVzaXphYmxlKFRydWUpCisgICAgICAgIHNldHRpbmdfdHJlZS5hcHBlbmRfY29sdW1uKGNvbCkKKyAgICAgICAgc2V0dGluZ190cmVlLmFwcGVuZF9jb2x1bW4oY29sMSkKKyAgICAgICAgY2VsbCA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0KCkKKyAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkoJ3dpZHRoLWNoYXJzJywgMTApCisgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCdlZGl0YWJsZScsIFRydWUpCisgICAgICAgIGNlbGwuc2V0X2RhdGEoImNvbHVtbiIsIDApCisgICAgICAgIGNlbGwuY29ubmVjdCgiZWRpdGVkIiwgc2VsZi5lZGl0YWJsZV9zZXR0aW5nc19jZWxsX2VkaXRlZCwgc2V0dGluZ19zdG9yZSkKKyAgICAgICAgY2VsbDEgPSBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpCisgICAgICAgIGNlbGwxLnNldF9wcm9wZXJ0eSgnd2lkdGgtY2hhcnMnLCAxMCkKKyAgICAgICAgY2VsbDEuc2V0X3Byb3BlcnR5KCdlZGl0YWJsZScsIFRydWUpCisgICAgICAgIGNlbGwxLnNldF9kYXRhKCJjb2x1bW4iLCAxKQorICAgICAgICBjZWxsMS5jb25uZWN0KCJlZGl0ZWQiLCBzZWxmLmVkaXRhYmxlX3NldHRpbmdzX2NlbGxfZWRpdGVkLCBzZXR0aW5nX3N0b3JlKQorICAgICAgICBjb2wucGFja19zdGFydChjZWxsLCBUcnVlKQorICAgICAgICBjb2wxLnBhY2tfZW5kKGNlbGwxLCBUcnVlKQorICAgICAgICBjb2wuc2V0X2F0dHJpYnV0ZXMoY2VsbCwgdGV4dD0wKQorICAgICAgICBjb2wxLnNldF9hdHRyaWJ1dGVzKGNlbGwxLCB0ZXh0PTEpCisKKyAgICAgICAgc2Nyb2xsID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKKyAgICAgICAgc2Nyb2xsLnNldF9zaGFkb3dfdHlwZShndGsuU0hBRE9XX0lOKQorICAgICAgICBzY3JvbGwuc2V0X3BvbGljeShndGsuUE9MSUNZX0FVVE9NQVRJQywgZ3RrLlBPTElDWV9BVVRPTUFUSUMpCisgICAgICAgIHNjcm9sbC5hZGQoc2V0dGluZ190cmVlKQorICAgICAgICB2Ym94LnBhY2tfc3RhcnQoc2Nyb2xsLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgICMgc29tZSBidXR0b25zCisgICAgICAgIGhib3ggPSBndGsuSEJveChUcnVlLCA2KQorICAgICAgICB2Ym94LnBhY2tfc3RhcnQoaGJveCwgRmFsc2UsIEZhbHNlKQorCisgICAgICAgIGJ1dHRvbiA9IGd0ay5CdXR0b24oc3RvY2s9Z3RrLlNUT0NLX0FERCkKKyAgICAgICAgYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmVkaXRhYmxlX3NldHRpbmdzX2FkZF9pdGVtX2NsaWNrZWQsIHNldHRpbmdfc3RvcmUpCisgICAgICAgIGhib3gucGFja19zdGFydChidXR0b24pCisKKyAgICAgICAgYnV0dG9uID0gZ3RrLkJ1dHRvbihzdG9jaz1ndGsuU1RPQ0tfUkVNT1ZFKQorICAgICAgICBidXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuZWRpdGFibGVfc2V0dGluZ3NfcmVtb3ZlX2l0ZW1fY2xpY2tlZCwgc2V0dGluZ190cmVlKQorICAgICAgICBoYm94LnBhY2tfc3RhcnQoYnV0dG9uKQorCisgICAgICAgIGluZm8gPSBIb2JJbmZvQnV0dG9uKHRvb2x0aXAsIHNlbGYpCisgICAgICAgIHNldHRpbmdfaGJveC5wYWNrX3N0YXJ0KGluZm8sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICByZXR1cm4gc2V0dGluZ19oYm94LCBzZXR0aW5nX3N0b3JlCisKKyAgICBkZWYgY3JlYXRlX290aGVyc19wYWdlKHNlbGYpOgorICAgICAgICBhZHZhbmNlZF92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpCisgICAgICAgIGFkdmFuY2VkX3Zib3guc2V0X2JvcmRlcl93aWR0aCg2KQorCisgICAgICAgIHN1Yl92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydChzdWJfdmJveCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKyAgICAgICAgbGFiZWwgPSBzZWxmLmdlbl9sYWJlbF93aWRnZXQoIjxzcGFuIHdlaWdodD1cImJvbGRcIj5BZGQgeW91ciBvd24gdmFyaWFibGVzOjwvc3Bhbj4iKQorICAgICAgICB0b29sdGlwID0gIlRoZXNlIGFyZSBrZXkvdmFsdWUgcGFpcnMgZm9yIHlvdXIgZXh0cmEgc2V0dGluZ3MuIENsaWNrIFwnQWRkXCcgYW5kIHRoZW4gZGlyZWN0bHkgZWRpdCB0aGUga2V5IGFuZCB0aGUgdmFsdWUiCisgICAgICAgIHNldHRpbmdfd2lkZ2V0LCBzZWxmLnNldHRpbmdfc3RvcmUgPSBzZWxmLmdlbl9lZGl0YWJsZV9zZXR0aW5ncyhzZWxmLmNvbmZpZ3VyYXRpb24uZXh0cmFfc2V0dGluZywiPGI+QWRkIHlvdXIgb3duIHZhcmlhYmxlczwvYj4iICsgIioiICsgdG9vbHRpcCkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHNldHRpbmdfd2lkZ2V0LCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHJldHVybiBhZHZhbmNlZF92Ym94CisKKyAgICBkZWYgY3JlYXRlX3Zpc3VhbF9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5uYiA9IGd0ay5Ob3RlYm9vaygpCisgICAgICAgIHNlbGYubmIuc2V0X3Nob3dfdGFicyhUcnVlKSAgICAgICAgCisgICAgICAgIHNlbGYubmIuYXBwZW5kX3BhZ2Uoc2VsZi5jcmVhdGVfYnVpbGRfZW52aXJvbm1lbnRfcGFnZSgpLCBndGsuTGFiZWwoIkJ1aWxkIGVudmlyb25tZW50IikpCisgICAgICAgIHNlbGYubmIuYXBwZW5kX3BhZ2Uoc2VsZi5jcmVhdGVfc2hhcmVkX3N0YXRlX3BhZ2UoKSwgZ3RrLkxhYmVsKCJTaGFyZWQgc3RhdGUiKSkKKyAgICAgICAgc2VsZi5uYi5hcHBlbmRfcGFnZShzZWxmLmNyZWF0ZV9uZXR3b3JrX3BhZ2UoKSwgZ3RrLkxhYmVsKCJOZXR3b3JrIikpICAgICAgICAKKyAgICAgICAgc2VsZi5uYi5hcHBlbmRfcGFnZShzZWxmLmNyZWF0ZV9vdGhlcnNfcGFnZSgpLCBndGsuTGFiZWwoIk90aGVycyIpKQorICAgICAgICBzZWxmLm5iLnNldF9jdXJyZW50X3BhZ2UoMCkKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi5uYiwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfZW5kKGd0ay5IU2VwYXJhdG9yKCksIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisKKyAgICBkZWYgZGVzdHJveShzZWxmKToKKyAgICAgICAgc2VsZi5oYW5kbGVyLmRpc2Nvbm5lY3Qoc2VsZi5wcm94eV90ZXN0X3Bhc3NlZF9pZCkKKyAgICAgICAgc2VsZi5oYW5kbGVyLmRpc2Nvbm5lY3Qoc2VsZi5wcm94eV90ZXN0X2ZhaWxlZF9pZCkKKyAgICAgICAgc3VwZXIoU2ltcGxlU2V0dGluZ3NEaWFsb2csIHNlbGYpLmRlc3Ryb3koKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaG9iY29sb3IucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9ob2Jjb2xvci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzE2NTQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaG9iY29sb3IucHkKQEAgLTAsMCArMSwzOCBAQAorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2NsYXNzIEhvYkNvbG9yczoKKyAgICBXSElURSAgICAgICAgPSAiI2ZmZmZmZiIKKyAgICBQQUxFX0dSRUVOICAgPSAiI2FhZmZhYSIKKyAgICBPUkFOR0UgICAgICAgPSAiI2ViOGU2OCIKKyAgICBQQUxFX1JFRCAgICAgPSAiI2ZmYWFhYSIKKyAgICBHUkFZICAgICAgICAgPSAiI2FhYWFhYSIKKyAgICBMSUdIVF9HUkFZICAgPSAiI2RkZGRkZCIKKyAgICBTTElHSFRfREFSSyAgPSAiIzVmNWY1ZiIKKyAgICBEQVJLICAgICAgICAgPSAiIzNjM2IzNyIKKyAgICBCTEFDSyAgICAgICAgPSAiIzAwMDAwMCIKKyAgICBQQUxFX0JMVUUgICAgPSAiIzUzYjhmZiIKKyAgICBERUVQX1JFRCAgICAgPSAiI2FhM2UzZSIKKyAgICBLSEFLSSAgICAgICAgPSAiI2ZmZjY4ZiIKKworICAgIE9LID0gV0hJVEUKKyAgICBSVU5OSU5HID0gUEFMRV9HUkVFTgorICAgIFdBUk5JTkcgPSBPUkFOR0UKKyAgICBFUlJPUiA9IFBBTEVfUkVECmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9ob2JldmVudGhhbmRsZXIucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9ob2JldmVudGhhbmRsZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcxZmIzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYmV2ZW50aGFuZGxlci5weQpAQCAtMCwwICsxLDY0NSBAQAorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ29iamVjdAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBhc3QKK2Zyb20gYmIudWkuY3J1bWJzLnJ1bm5pbmdidWlsZCBpbXBvcnQgUnVubmluZ0J1aWxkCisKK2NsYXNzIEhvYkhhbmRsZXIoZ29iamVjdC5HT2JqZWN0KToKKworICAgICIiIgorICAgIFRoaXMgb2JqZWN0IGRvZXMgQml0QmFrZSBldmVudCBoYW5kbGluZyBmb3IgdGhlIGhvYiBndWkuCisgICAgIiIiCisgICAgX19nc2lnbmFsc19fID0geworICAgICAgICAgInBhY2thZ2UtZm9ybWF0cy11cGRhdGVkIiA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdvYmplY3QuVFlQRV9QWU9CSkVDVCwpKSwKKyAgICAgICAgICJjb25maWctdXBkYXRlZCIgICAgICAgICAgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfU1RSSU5HLCBnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsKSksCisgICAgICAgICAiY29tbWFuZC1zdWNjZWVkZWQiICAgICAgIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ29iamVjdC5UWVBFX0lOVCwpKSwKKyAgICAgICAgICJjb21tYW5kLWZhaWxlZCIgICAgICAgICAgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfU1RSSU5HLCkpLAorICAgICAgICAgInBhcnNpbmctd2FybmluZyIgICAgICAgICA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdvYmplY3QuVFlQRV9TVFJJTkcsKSksCisgICAgICAgICAic2FuaXR5LWZhaWxlZCIgICAgICAgICAgIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ29iamVjdC5UWVBFX1NUUklORywgZ29iamVjdC5UWVBFX0lOVCkpLAorICAgICAgICAgImdlbmVyYXRpbmctZGF0YSIgICAgICAgICA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgImRhdGEtZ2VuZXJhdGVkIiAgICAgICAgICA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgInBhcnNpbmctc3RhcnRlZCIgICAgICAgICA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdvYmplY3QuVFlQRV9QWU9CSkVDVCwpKSwKKyAgICAgICAgICJwYXJzaW5nIiAgICAgICAgICAgICAgICAgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsKSksCisgICAgICAgICAicGFyc2luZy1jb21wbGV0ZWQiICAgICAgIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ29iamVjdC5UWVBFX1BZT0JKRUNULCkpLAorICAgICAgICAgInJlY2lwZS1wb3B1bGF0ZWQiICAgICAgICA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgInBhY2thZ2UtcG9wdWxhdGVkIiAgICAgICA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgIm5ldHdvcmstcGFzc2VkIiAgICAgICAgICA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgIm5ldHdvcmstZmFpbGVkIiAgICAgICAgICA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgIH0KKworICAgIChHRU5FUkFURV9DT05GSUdVUkFUSU9OLCBHRU5FUkFURV9SRUNJUEVTLCBHRU5FUkFURV9QQUNLQUdFUywgR0VORVJBVEVfSU1BR0UsIFBPUFVMQVRFX1BBQ0tBR0VJTkZPLCBTQU5JVFlfQ0hFQ0ssIE5FVFdPUktfVEVTVCkgPSByYW5nZSg3KQorICAgIChTVUJfUEFUSF9MQVlFUlMsIFNVQl9GSUxFU19ESVNUUk8sIFNVQl9GSUxFU19NQUNILCBTVUJfRklMRVNfU0RLTUFDSCwgU1VCX01BVENIX0NMQVNTLCBTVUJfUEFSU0VfQ09ORklHLCBTVUJfU0FOSVRZX0NIRUNLLAorICAgICBTVUJfR05FUkFURV9UR1RTLCBTVUJfR0VORVJBVEVfUEtHSU5GTywgU1VCX0JVSUxEX1JFQ0lQRVMsIFNVQl9CVUlMRF9JTUFHRSwgU1VCX05FVFdPUktfVEVTVCkgPSByYW5nZSgxMikKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXIsIHJlY2lwZV9tb2RlbCwgcGFja2FnZV9tb2RlbCk6CisgICAgICAgIHN1cGVyKEhvYkhhbmRsZXIsIHNlbGYpLl9faW5pdF9fKCkKKworICAgICAgICBzZWxmLmJ1aWxkID0gUnVubmluZ0J1aWxkKHNlcXVlbnRpYWw9VHJ1ZSkKKworICAgICAgICBzZWxmLnJlY2lwZV9tb2RlbCA9IHJlY2lwZV9tb2RlbAorICAgICAgICBzZWxmLnBhY2thZ2VfbW9kZWwgPSBwYWNrYWdlX21vZGVsCisKKyAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYyA9IFtdCisgICAgICAgIHNlbGYuZ2VuZXJhdGluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuY3VycmVudF9waGFzZSA9IE5vbmUKKyAgICAgICAgc2VsZi5idWlsZGluZyA9IEZhbHNlCisgICAgICAgIHNlbGYucmVjaXBlX3F1ZXVlID0gW10KKyAgICAgICAgc2VsZi5wYWNrYWdlX3F1ZXVlID0gW10KKworICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlcgorICAgICAgICBzZWxmLmVycm9yX21zZyA9ICIiCisgICAgICAgIHNlbGYuaW5pdGNtZCA9IE5vbmUKKyAgICAgICAgc2VsZi5wYXJzaW5nID0gRmFsc2UKKworICAgIGRlZiBzZXRfYnVzeShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuZ2VuZXJhdGluZzoKKyAgICAgICAgICAgIHNlbGYuZW1pdCgiZ2VuZXJhdGluZy1kYXRhIikKKyAgICAgICAgICAgIHNlbGYuZ2VuZXJhdGluZyA9IFRydWUKKworICAgIGRlZiBjbGVhcl9idXN5KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmdlbmVyYXRpbmc6CisgICAgICAgICAgICBzZWxmLmVtaXQoImRhdGEtZ2VuZXJhdGVkIikKKyAgICAgICAgICAgIHNlbGYuZ2VuZXJhdGluZyA9IEZhbHNlCisKKyAgICBkZWYgcnVuQ29tbWFuZChzZWxmLCBjb21tYW5kbGluZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdCwgZXJyb3IgPSBzZWxmLnNlcnZlci5ydW5Db21tYW5kKGNvbW1hbmRsaW5lKQorICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFcnJvciBydW5uaW5nIGNvbW1hbmQgJyVzJzogJXMiICUgKGNvbW1hbmRsaW5lLCBlcnJvcikpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMgPSBbXQorICAgICAgICAgICAgc2VsZi5jbGVhcl9idXN5KCkKKyAgICAgICAgICAgIHNlbGYuZW1pdCgiY29tbWFuZC1mYWlsZWQiLCAiSG9iIEV4Y2VwdGlvbiAtICVzIiAlIChzdHIoZSkpKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBydW5fbmV4dF9jb21tYW5kKHNlbGYsIGluaXRjbWQ9Tm9uZSk6CisgICAgICAgIGlmIGluaXRjbWQgIT0gTm9uZToKKyAgICAgICAgICAgIHNlbGYuaW5pdGNtZCA9IGluaXRjbWQKKworICAgICAgICBpZiBzZWxmLmNvbW1hbmRzX2FzeW5jOgorICAgICAgICAgICAgc2VsZi5zZXRfYnVzeSgpCisgICAgICAgICAgICBuZXh0X2NvbW1hbmQgPSBzZWxmLmNvbW1hbmRzX2FzeW5jLnBvcCgwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5jbGVhcl9idXN5KCkKKyAgICAgICAgICAgIGlmIHNlbGYuaW5pdGNtZCAhPSBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgiY29tbWFuZC1zdWNjZWVkZWQiLCBzZWxmLmluaXRjbWQpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBuZXh0X2NvbW1hbmQgPT0gc2VsZi5TVUJfUEFUSF9MQVlFUlM6CisgICAgICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJmaW5kQ29uZmlnRmlsZVBhdGgiLCAiYmJsYXllcnMuY29uZiJdKQorICAgICAgICBlbGlmIG5leHRfY29tbWFuZCA9PSBzZWxmLlNVQl9GSUxFU19ESVNUUk86CisgICAgICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJmaW5kQ29uZmlnRmlsZXMiLCAiRElTVFJPIl0pCisgICAgICAgIGVsaWYgbmV4dF9jb21tYW5kID09IHNlbGYuU1VCX0ZJTEVTX01BQ0g6CisgICAgICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJmaW5kQ29uZmlnRmlsZXMiLCAiTUFDSElORSJdKQorICAgICAgICBlbGlmIG5leHRfY29tbWFuZCA9PSBzZWxmLlNVQl9GSUxFU19TREtNQUNIOgorICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsiZmluZENvbmZpZ0ZpbGVzIiwgIk1BQ0hJTkUtU0RLIl0pCisgICAgICAgIGVsaWYgbmV4dF9jb21tYW5kID09IHNlbGYuU1VCX01BVENIX0NMQVNTOgorICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsiZmluZEZpbGVzTWF0Y2hpbmdJbkRpciIsICJyb290ZnNfIiwgImNsYXNzZXMiXSkKKyAgICAgICAgZWxpZiBuZXh0X2NvbW1hbmQgPT0gc2VsZi5TVUJfUEFSU0VfQ09ORklHOgorICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsicmVzZXRDb29rZXIiXSkKKyAgICAgICAgZWxpZiBuZXh0X2NvbW1hbmQgPT0gc2VsZi5TVUJfR05FUkFURV9UR1RTOgorICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsiZ2VuZXJhdGVUYXJnZXRzVHJlZSIsICJjbGFzc2VzL2ltYWdlLmJiY2xhc3MiLCBbXV0pCisgICAgICAgIGVsaWYgbmV4dF9jb21tYW5kID09IHNlbGYuU1VCX0dFTkVSQVRFX1BLR0lORk86CisgICAgICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJ0cmlnZ2VyRXZlbnQiLCAiYmIuZXZlbnQuUmVxdWVzdFBhY2thZ2VJbmZvKCkiXSkKKyAgICAgICAgZWxpZiBuZXh0X2NvbW1hbmQgPT0gc2VsZi5TVUJfU0FOSVRZX0NIRUNLOgorICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsidHJpZ2dlckV2ZW50IiwgImJiLmV2ZW50LlNhbml0eUNoZWNrKCkiXSkKKyAgICAgICAgZWxpZiBuZXh0X2NvbW1hbmQgPT0gc2VsZi5TVUJfTkVUV09SS19URVNUOgorICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsidHJpZ2dlckV2ZW50IiwgImJiLmV2ZW50Lk5ldHdvcmtUZXN0KCkiXSkKKyAgICAgICAgZWxpZiBuZXh0X2NvbW1hbmQgPT0gc2VsZi5TVUJfQlVJTERfUkVDSVBFUzoKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfYnVzeSgpCisgICAgICAgICAgICBzZWxmLmJ1aWxkaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsiYnVpbGRUYXJnZXRzIiwgc2VsZi5yZWNpcGVfcXVldWUsIHNlbGYuZGVmYXVsdF90YXNrXSkKKyAgICAgICAgICAgIHNlbGYucmVjaXBlX3F1ZXVlID0gW10KKyAgICAgICAgZWxpZiBuZXh0X2NvbW1hbmQgPT0gc2VsZi5TVUJfQlVJTERfSU1BR0U6CisgICAgICAgICAgICBzZWxmLmNsZWFyX2J1c3koKQorICAgICAgICAgICAgc2VsZi5idWlsZGluZyA9IFRydWUKKyAgICAgICAgICAgIHRhcmdldCA9IHNlbGYuaW1hZ2UKKworICAgICAgICAgICAgaWYgc2VsZi5iYXNlX2ltYWdlOgorICAgICAgICAgICAgICAgICMgUmVxdWVzdCB0aGUgYnVpbGQgb2YgYSBjdXN0b20gaW1hZ2UKKyAgICAgICAgICAgICAgICBzZWxmLmdlbmVyYXRlX2hvYl9iYXNlX2ltYWdlKHRhcmdldCkKKyAgICAgICAgICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiTElOR1VBU19JTlNUQUxMIiwgIiIsICJsb2NhbC5jb25mIikKKyAgICAgICAgICAgICAgICBob2JJbWFnZSA9IHNlbGYucnVuQ29tbWFuZChbIm1hdGNoRmlsZSIsIHRhcmdldCArICIuYmIiXSkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmJhc2VfaW1hZ2UgIT0gc2VsZi5yZWNpcGVfbW9kZWwuX19jdXN0b21faW1hZ2VfXzoKKyAgICAgICAgICAgICAgICAgICAgYmFzZUltYWdlID0gc2VsZi5ydW5Db21tYW5kKFsibWF0Y2hGaWxlIiwgc2VsZi5iYXNlX2ltYWdlICsgIi5iYiJdKQorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gc2VsZi5ydW5Db21tYW5kKFsiZ2VuZXJhdGVOZXdJbWFnZSIsIGhvYkltYWdlLCBiYXNlSW1hZ2UsIHNlbGYucGFja2FnZV9xdWV1ZSwgVHJ1ZSwgIiJdKQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgKz0gdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlY2lwZV9tb2RlbC5zZXRfY3VzdG9tX2ltYWdlX3ZlcnNpb24odmVyc2lvbikKKworICAgICAgICAgICAgdGFyZ2V0cyA9IFt0YXJnZXRdCisgICAgICAgICAgICBpZiBzZWxmLnRvb2xjaGFpbl9wYWNrYWdlczoKKyAgICAgICAgICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiVE9PTENIQUlOX1RBUkdFVF9UQVNLIiwgIiAiLmpvaW4oc2VsZi50b29sY2hhaW5fcGFja2FnZXMpLCAibG9jYWwuY29uZiIpCisgICAgICAgICAgICAgICAgdGFyZ2V0cy5hcHBlbmQodGFyZ2V0ICsgIjpkb19wb3B1bGF0ZV9zZGsiKQorCisgICAgICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJidWlsZFRhcmdldHMiLCB0YXJnZXRzLCBzZWxmLmRlZmF1bHRfdGFza10pCisKKyAgICBkZWYgZGlzcGxheV9lcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5jbGVhcl9idXN5KCkKKyAgICAgICAgc2VsZi5lbWl0KCJjb21tYW5kLWZhaWxlZCIsIHNlbGYuZXJyb3JfbXNnKQorICAgICAgICBzZWxmLmVycm9yX21zZyA9ICIiCisgICAgICAgIGlmIHNlbGYuYnVpbGRpbmc6CisgICAgICAgICAgICBzZWxmLmJ1aWxkaW5nID0gRmFsc2UKKworICAgIGRlZiBoYW5kbGVfZXZlbnQoc2VsZiwgZXZlbnQpOgorICAgICAgICBpZiBub3QgZXZlbnQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5idWlsZGluZzoKKyAgICAgICAgICAgIHNlbGYuY3VycmVudF9waGFzZSA9ICJidWlsZGluZyIKKyAgICAgICAgICAgIHNlbGYuYnVpbGQuaGFuZGxlX2V2ZW50KGV2ZW50KQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhY2thZ2VJbmZvKToKKyAgICAgICAgICAgIHNlbGYucGFja2FnZV9tb2RlbC5wb3B1bGF0ZShldmVudC5fcGtnaW5mb2xpc3QpCisgICAgICAgICAgICBzZWxmLmVtaXQoInBhY2thZ2UtcG9wdWxhdGVkIikKKyAgICAgICAgICAgIHNlbGYucnVuX25leHRfY29tbWFuZCgpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5TYW5pdHlDaGVja1Bhc3NlZCk6CisgICAgICAgICAgICByZXBhcnNlID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQkJfSU5WQUxJRENPTkYiXSkgb3IgTm9uZQorICAgICAgICAgICAgaWYgcmVwYXJzZSBpcyBUcnVlOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJCQl9JTlZBTElEQ09ORiIsIEZhbHNlLCAibG9jYWwuY29uZiIpCisgICAgICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsic2V0UHJlUG9zdENvbmZGaWxlcyIsICJjb25mLy5ob2IuY29uZiIsICIiXSkKKyAgICAgICAgICAgICAgICBzZWxmLmNvbW1hbmRzX2FzeW5jLnByZXBlbmQoc2VsZi5TVUJfUEFSU0VfQ09ORklHKQorICAgICAgICAgICAgc2VsZi5ydW5fbmV4dF9jb21tYW5kKCkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlNhbml0eUNoZWNrRmFpbGVkKToKKyAgICAgICAgICAgIHNlbGYuZW1pdCgic2FuaXR5LWZhaWxlZCIsIGV2ZW50Ll9tc2csIGV2ZW50Ll9uZXR3b3JrX2Vycm9yKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgbG9nZ2luZy5Mb2dSZWNvcmQpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuYnVpbGRpbmc6CisgICAgICAgICAgICAgICAgaWYgZXZlbnQubGV2ZWxubyA+PSBsb2dnaW5nLkVSUk9SOgorICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXIgPSBiYi5tc2cuQkJMb2dGb3JtYXR0ZXIoKQorICAgICAgICAgICAgICAgICAgICBtc2cgPSBmb3JtYXR0ZXIuZm9ybWF0KGV2ZW50KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yX21zZyArPSBtc2cgKyAnXG4nCisgICAgICAgICAgICAgICAgZWxpZiBldmVudC5sZXZlbG5vID49IGxvZ2dpbmcuV0FSTklORyBhbmQgc2VsZi5wYXJzaW5nID09IFRydWU6CisgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlciA9IGJiLm1zZy5CQkxvZ0Zvcm1hdHRlcigpCisgICAgICAgICAgICAgICAgICAgIG1zZyA9IGZvcm1hdHRlci5mb3JtYXQoZXZlbnQpCisgICAgICAgICAgICAgICAgICAgIHdhcm5fbXNnID0gbXNnICsgJ1xuJworICAgICAgICAgICAgICAgICAgICBzZWxmLmVtaXQoInBhcnNpbmctd2FybmluZyIsIHdhcm5fbXNnKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuVGFyZ2V0c1RyZWVHZW5lcmF0ZWQpOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50X3BoYXNlID0gImRhdGEgZ2VuZXJhdGlvbiIKKyAgICAgICAgICAgIGlmIGV2ZW50Ll9tb2RlbDoKKyAgICAgICAgICAgICAgICBzZWxmLnJlY2lwZV9tb2RlbC5wb3B1bGF0ZShldmVudC5fbW9kZWwpCisgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCJyZWNpcGUtcG9wdWxhdGVkIikKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5Db25maWdGaWxlc0ZvdW5kKToKKyAgICAgICAgICAgIHNlbGYuY3VycmVudF9waGFzZSA9ICJjb25maWd1cmF0aW9uIGxvb2t1cCIKKyAgICAgICAgICAgIHZhciA9IGV2ZW50Ll92YXJpYWJsZQorICAgICAgICAgICAgdmFsdWVzID0gZXZlbnQuX3ZhbHVlcworICAgICAgICAgICAgdmFsdWVzLnNvcnQoKQorICAgICAgICAgICAgc2VsZi5lbWl0KCJjb25maWctdXBkYXRlZCIsIHZhciwgdmFsdWVzKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNvbmZpZ0ZpbGVQYXRoRm91bmQpOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50X3BoYXNlID0gImNvbmZpZ3VyYXRpb24gbG9va3VwIgorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkZpbGVzTWF0Y2hpbmdGb3VuZCk6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfcGhhc2UgPSAiY29uZmlndXJhdGlvbiBsb29rdXAiCisgICAgICAgICAgICAjIEZJWE1FOiBoYXJkIGNvZGluZywgc2hvdWxkIGF0IGxlYXN0IGJlIGEgdmFyaWFibGUgc2hhcmVkIGJldHdlZW4KKyAgICAgICAgICAgICMgaGVyZSBhbmQgdGhlIGNhbGxlcgorICAgICAgICAgICAgaWYgZXZlbnQuX3BhdHRlcm4gPT0gInJvb3Rmc18iOgorICAgICAgICAgICAgICAgIGZvcm1hdHMgPSBbXQorICAgICAgICAgICAgICAgIGZvciBtYXRjaCBpbiBldmVudC5fbWF0Y2hlczoKKyAgICAgICAgICAgICAgICAgICAgY2xhc3NuYW1lLCBzZXAsIGNscyA9IG1hdGNoLnJwYXJ0aXRpb24oIi4iKQorICAgICAgICAgICAgICAgICAgICBmcywgc2VwLCBmb3JtYXQgPSBjbGFzc25hbWUucnBhcnRpdGlvbigiXyIpCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdHMuYXBwZW5kKGZvcm1hdCkKKyAgICAgICAgICAgICAgICBmb3JtYXRzLnNvcnQoKQorICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgicGFja2FnZS1mb3JtYXRzLXVwZGF0ZWQiLCBmb3JtYXRzKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZENvbXBsZXRlZCk6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfcGhhc2UgPSBOb25lCisgICAgICAgICAgICBzZWxmLnJ1bl9uZXh0X2NvbW1hbmQoKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZEZhaWxlZCk6CisgICAgICAgICAgICBpZiBldmVudC5lcnJvciBub3QgaW4gKCJGb3JjZWQgc2h1dGRvd24iLCAiU3RvcHBlZCBidWlsZCIpOgorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JfbXNnICs9IGV2ZW50LmVycm9yCisgICAgICAgICAgICBzZWxmLmNvbW1hbmRzX2FzeW5jID0gW10KKyAgICAgICAgICAgIHNlbGYuZGlzcGxheV9lcnJvcigpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLmV2ZW50LlBhcnNlU3RhcnRlZCwKKyAgICAgICAgICAgICAgICAgYmIuZXZlbnQuQ2FjaGVMb2FkU3RhcnRlZCwKKyAgICAgICAgICAgICAgICAgYmIuZXZlbnQuVHJlZURhdGFQcmVwYXJhdGlvblN0YXJ0ZWQsCisgICAgICAgICAgICAgICAgICkpOgorICAgICAgICAgICAgbWVzc2FnZSA9IHt9CisgICAgICAgICAgICBtZXNzYWdlWyJldmVudG5hbWUiXSA9IGJiLmV2ZW50LmdldE5hbWUoZXZlbnQpCisgICAgICAgICAgICBtZXNzYWdlWyJjdXJyZW50Il0gPSAwCisgICAgICAgICAgICBtZXNzYWdlWyJ0b3RhbCJdID0gTm9uZQorICAgICAgICAgICAgbWVzc2FnZVsidGl0bGUiXSA9ICJQYXJzaW5nIHJlY2lwZXMiCisgICAgICAgICAgICBzZWxmLmVtaXQoInBhcnNpbmctc3RhcnRlZCIsIG1lc3NhZ2UpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZVN0YXJ0ZWQpOgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2luZyA9IFRydWUKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCAoYmIuZXZlbnQuUGFyc2VQcm9ncmVzcywKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5DYWNoZUxvYWRQcm9ncmVzcywKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5UcmVlRGF0YVByZXBhcmF0aW9uUHJvZ3Jlc3MpKToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSB7fQorICAgICAgICAgICAgbWVzc2FnZVsiZXZlbnRuYW1lIl0gPSBiYi5ldmVudC5nZXROYW1lKGV2ZW50KQorICAgICAgICAgICAgbWVzc2FnZVsiY3VycmVudCJdID0gZXZlbnQuY3VycmVudAorICAgICAgICAgICAgbWVzc2FnZVsidG90YWwiXSA9IGV2ZW50LnRvdGFsCisgICAgICAgICAgICBtZXNzYWdlWyJ0aXRsZSJdID0gIlBhcnNpbmcgcmVjaXBlcyIKKyAgICAgICAgICAgIHNlbGYuZW1pdCgicGFyc2luZyIsIG1lc3NhZ2UpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLmV2ZW50LlBhcnNlQ29tcGxldGVkLAorICAgICAgICAgICAgICAgIGJiLmV2ZW50LkNhY2hlTG9hZENvbXBsZXRlZCwKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5UcmVlRGF0YVByZXBhcmF0aW9uQ29tcGxldGVkKSk6CisgICAgICAgICAgICBtZXNzYWdlID0ge30KKyAgICAgICAgICAgIG1lc3NhZ2VbImV2ZW50bmFtZSJdID0gYmIuZXZlbnQuZ2V0TmFtZShldmVudCkKKyAgICAgICAgICAgIG1lc3NhZ2VbImN1cnJlbnQiXSA9IGV2ZW50LnRvdGFsCisgICAgICAgICAgICBtZXNzYWdlWyJ0b3RhbCJdID0gZXZlbnQudG90YWwKKyAgICAgICAgICAgIG1lc3NhZ2VbInRpdGxlIl0gPSAiUGFyc2luZyByZWNpcGVzIgorICAgICAgICAgICAgc2VsZi5lbWl0KCJwYXJzaW5nLWNvbXBsZXRlZCIsIG1lc3NhZ2UpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCk6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzaW5nID0gRmFsc2UKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5OZXR3b3JrVGVzdEZhaWxlZCk6CisgICAgICAgICAgICBzZWxmLmVtaXQoIm5ldHdvcmstZmFpbGVkIikKKyAgICAgICAgICAgIHNlbGYucnVuX25leHRfY29tbWFuZCgpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTmV0d29ya1Rlc3RQYXNzZWQpOgorICAgICAgICAgICAgc2VsZi5lbWl0KCJuZXR3b3JrLXBhc3NlZCIpCisgICAgICAgICAgICBzZWxmLnJ1bl9uZXh0X2NvbW1hbmQoKQorCisgICAgICAgIGlmIHNlbGYuZXJyb3JfbXNnIGFuZCBub3Qgc2VsZi5jb21tYW5kc19hc3luYzoKKyAgICAgICAgICAgIHNlbGYuZGlzcGxheV9lcnJvcigpCisKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgaW5pdF9jb29rZXIoc2VsZik6CisgICAgICAgIHNlbGYucnVuQ29tbWFuZChbImNyZWF0ZUNvbmZpZ0ZpbGUiLCAiLmhvYi5jb25mIl0pCisKKyAgICBkZWYgc2V0X2V4dHJhX2luaGVyaXQoc2VsZiwgYmJjbGFzcyk6CisgICAgICAgIHNlbGYuYXBwZW5kX3Zhcl9pbl9maWxlKCJJTkhFUklUIiwgYmJjbGFzcywgIi5ob2IuY29uZiIpCisKKyAgICBkZWYgc2V0X2JibGF5ZXJzKHNlbGYsIGJibGF5ZXJzKToKKyAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoIkJCTEFZRVJTIiwgIiAiLmpvaW4oYmJsYXllcnMpLCAiYmJsYXllcnMuY29uZiIpCisKKyAgICBkZWYgc2V0X21hY2hpbmUoc2VsZiwgbWFjaGluZSk6CisgICAgICAgIGlmIG1hY2hpbmU6CisgICAgICAgICAgICBzZWxmLmVhcmx5X2Fzc2lnbl92YXJfaW5fZmlsZSgiTUFDSElORSIsIG1hY2hpbmUsICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfc2RrX21hY2hpbmUoc2VsZiwgc2RrX21hY2hpbmUpOgorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiU0RLTUFDSElORSIsIHNka19tYWNoaW5lLCAibG9jYWwuY29uZiIpCisKKyAgICBkZWYgc2V0X2ltYWdlX2ZzdHlwZXMoc2VsZiwgaW1hZ2VfZnN0eXBlcyk6CisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJJTUFHRV9GU1RZUEVTIiwgaW1hZ2VfZnN0eXBlcywgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIHNldF9kaXN0cm8oc2VsZiwgZGlzdHJvKToKKyAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoIkRJU1RSTyIsIGRpc3RybywgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIHNldF9wYWNrYWdlX2Zvcm1hdChzZWxmLCBmb3JtYXQpOgorICAgICAgICBwYWNrYWdlX2NsYXNzZXMgPSAiIgorICAgICAgICBmb3IgcGtnZm10IGluIGZvcm1hdC5zcGxpdCgpOgorICAgICAgICAgICAgcGFja2FnZV9jbGFzc2VzICs9ICgicGFja2FnZV8lcyIgJSBwa2dmbXQgKyAiICIpCisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJQQUNLQUdFX0NMQVNTRVMiLCBwYWNrYWdlX2NsYXNzZXMsICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfYmJ0aHJlYWRzKHNlbGYsIHRocmVhZHMpOgorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiQkJfTlVNQkVSX1RIUkVBRFMiLCB0aHJlYWRzLCAibG9jYWwuY29uZiIpCisKKyAgICBkZWYgc2V0X3BtYWtlKHNlbGYsIHRocmVhZHMpOgorICAgICAgICBwbWFrZSA9ICItaiAlcyIgJSB0aHJlYWRzCisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJQQVJBTExFTF9NQUtFIiwgcG1ha2UsICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfZGxfZGlyKHNlbGYsIGRpcmVjdG9yeSk6CisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJETF9ESVIiLCBkaXJlY3RvcnksICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfc3N0YXRlX2RpcihzZWxmLCBkaXJlY3RvcnkpOgorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiU1NUQVRFX0RJUiIsIGRpcmVjdG9yeSwgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIHNldF9zc3RhdGVfbWlycm9ycyhzZWxmLCB1cmwpOgorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiU1NUQVRFX01JUlJPUlMiLCB1cmwsICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfZXh0cmFfc2l6ZShzZWxmLCBpbWFnZV9leHRyYV9zaXplKToKKyAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoIklNQUdFX1JPT1RGU19FWFRSQV9TUEFDRSIsIHN0cihpbWFnZV9leHRyYV9zaXplKSwgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIHNldF9yb290ZnNfc2l6ZShzZWxmLCBpbWFnZV9yb290ZnNfc2l6ZSk6CisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJJTUFHRV9ST09URlNfU0laRSIsIHN0cihpbWFnZV9yb290ZnNfc2l6ZSksICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfaW5jb21wYXRpYmxlX2xpY2Vuc2Uoc2VsZiwgaW5jb21wYXRfbGljZW5zZSk6CisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJJTkNPTVBBVElCTEVfTElDRU5TRSIsIGluY29tcGF0X2xpY2Vuc2UsICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfZXh0cmFfc2V0dGluZyhzZWxmLCBleHRyYV9zZXR0aW5nKToKKyAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoIkVYVFJBX1NFVFRJTkciLCBleHRyYV9zZXR0aW5nLCAibG9jYWwuY29uZiIpCisKKyAgICBkZWYgc2V0X2V4dHJhX2NvbmZpZyhzZWxmLCBleHRyYV9zZXR0aW5nKToKKyAgICAgICAgb2xkX2V4dHJhX3NldHRpbmcgPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJFWFRSQV9TRVRUSU5HIl0pIG9yIHt9CisgICAgICAgIG9sZF9leHRyYV9zZXR0aW5nID0gc3RyKG9sZF9leHRyYV9zZXR0aW5nKQorCisgICAgICAgIG9sZF9leHRyYV9zZXR0aW5nID0gYXN0LmxpdGVyYWxfZXZhbChvbGRfZXh0cmFfc2V0dGluZykKKyAgICAgICAgaWYgbm90IHR5cGUob2xkX2V4dHJhX3NldHRpbmcpID09IGRpY3Q6CisgICAgICAgICAgICBvbGRfZXh0cmFfc2V0dGluZyA9IHt9CisKKyAgICAgICAgIyBzZXR0aW5ncyBub3QgY2hhbmdlZAorICAgICAgICBpZiBvbGRfZXh0cmFfc2V0dGluZyA9PSBleHRyYV9zZXR0aW5nOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyByZW1vdmUgdGhlIG9sZCBFWFRSQSBTRVRUSU5HIHZhcmlhYmxlCisgICAgICAgIHNlbGYucmVtb3ZlX3Zhcl9mcm9tX2ZpbGUoIkVYVFJBX1NFVFRJTkciKQorCisgICAgICAgICMgcmVtb3ZlIG9sZCBzZXR0aW5ncyBmcm9tIGNvbmYKKyAgICAgICAgZm9yIGtleSBpbiBvbGRfZXh0cmFfc2V0dGluZy5rZXlzKCk6CisgICAgICAgICAgICBpZiBrZXkgbm90IGluIGV4dHJhX3NldHRpbmc6CisgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVfdmFyX2Zyb21fZmlsZShrZXkpCisKKyAgICAgICAgIyBhZGQgbmV3IHNldHRpbmdzCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGV4dHJhX3NldHRpbmcuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZShrZXksIHZhbHVlLCAibG9jYWwuY29uZiIpCisKKyAgICAgICAgaWYgZXh0cmFfc2V0dGluZzoKKyAgICAgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJFWFRSQV9TRVRUSU5HIiwgZXh0cmFfc2V0dGluZywgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIHNldF9odHRwX3Byb3h5KHNlbGYsIGh0dHBfcHJveHkpOgorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiaHR0cF9wcm94eSIsIGh0dHBfcHJveHksICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfaHR0cHNfcHJveHkoc2VsZiwgaHR0cHNfcHJveHkpOgorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiaHR0cHNfcHJveHkiLCBodHRwc19wcm94eSwgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIHNldF9mdHBfcHJveHkoc2VsZiwgZnRwX3Byb3h5KToKKyAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoImZ0cF9wcm94eSIsIGZ0cF9wcm94eSwgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIHNldF9zb2Nrc19wcm94eShzZWxmLCBzb2Nrc19wcm94eSk6CisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJhbGxfcHJveHkiLCBzb2Nrc19wcm94eSwgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIHNldF9jdnNfcHJveHkoc2VsZiwgaG9zdCwgcG9ydCk6CisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJDVlNfUFJPWFlfSE9TVCIsIGhvc3QsICJsb2NhbC5jb25mIikKKyAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoIkNWU19QUk9YWV9QT1JUIiwgcG9ydCwgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIHJlcXVlc3RfcGFja2FnZV9pbmZvKHNlbGYpOgorICAgICAgICBzZWxmLmNvbW1hbmRzX2FzeW5jLmFwcGVuZChzZWxmLlNVQl9HRU5FUkFURV9QS0dJTkZPKQorICAgICAgICBzZWxmLnJ1bl9uZXh0X2NvbW1hbmQoc2VsZi5QT1BVTEFURV9QQUNLQUdFSU5GTykKKworICAgIGRlZiB0cmlnZ2VyX3Nhbml0eV9jaGVjayhzZWxmKToKKyAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYy5hcHBlbmQoc2VsZi5TVUJfU0FOSVRZX0NIRUNLKQorICAgICAgICBzZWxmLnJ1bl9uZXh0X2NvbW1hbmQoc2VsZi5TQU5JVFlfQ0hFQ0spCisKKyAgICBkZWYgdHJpZ2dlcl9uZXR3b3JrX3Rlc3Qoc2VsZik6CisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX05FVFdPUktfVEVTVCkKKyAgICAgICAgc2VsZi5ydW5fbmV4dF9jb21tYW5kKHNlbGYuTkVUV09SS19URVNUKQorCisgICAgZGVmIGdlbmVyYXRlX2NvbmZpZ3VyYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYucnVuQ29tbWFuZChbInNldFByZVBvc3RDb25mRmlsZXMiLCAiY29uZi8uaG9iLmNvbmYiLCAiIl0pCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX1BBUlNFX0NPTkZJRykKKyAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYy5hcHBlbmQoc2VsZi5TVUJfUEFUSF9MQVlFUlMpCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX0ZJTEVTX0RJU1RSTykKKyAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYy5hcHBlbmQoc2VsZi5TVUJfRklMRVNfTUFDSCkKKyAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYy5hcHBlbmQoc2VsZi5TVUJfRklMRVNfU0RLTUFDSCkKKyAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYy5hcHBlbmQoc2VsZi5TVUJfTUFUQ0hfQ0xBU1MpCisgICAgICAgIHNlbGYucnVuX25leHRfY29tbWFuZChzZWxmLkdFTkVSQVRFX0NPTkZJR1VSQVRJT04pCisKKyAgICBkZWYgZ2VuZXJhdGVfcmVjaXBlcyhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsic2V0UHJlUG9zdENvbmZGaWxlcyIsICJjb25mLy5ob2IuY29uZiIsICIiXSkKKyAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYy5hcHBlbmQoc2VsZi5TVUJfUEFSU0VfQ09ORklHKQorICAgICAgICBzZWxmLmNvbW1hbmRzX2FzeW5jLmFwcGVuZChzZWxmLlNVQl9HTkVSQVRFX1RHVFMpCisgICAgICAgIHNlbGYucnVuX25leHRfY29tbWFuZChzZWxmLkdFTkVSQVRFX1JFQ0lQRVMpCisKKyAgICBkZWYgZ2VuZXJhdGVfcGFja2FnZXMoc2VsZiwgdGd0cywgZGVmYXVsdF90YXNrPSJidWlsZCIpOgorICAgICAgICB0YXJnZXRzID0gW10KKyAgICAgICAgdGFyZ2V0cy5leHRlbmQodGd0cykKKyAgICAgICAgc2VsZi5yZWNpcGVfcXVldWUgPSB0YXJnZXRzCisgICAgICAgIHNlbGYuZGVmYXVsdF90YXNrID0gZGVmYXVsdF90YXNrCisgICAgICAgIHNlbGYucnVuQ29tbWFuZChbInNldFByZVBvc3RDb25mRmlsZXMiLCAiY29uZi8uaG9iLmNvbmYiLCAiIl0pCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX1BBUlNFX0NPTkZJRykKKyAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYy5hcHBlbmQoc2VsZi5TVUJfQlVJTERfUkVDSVBFUykKKyAgICAgICAgc2VsZi5ydW5fbmV4dF9jb21tYW5kKHNlbGYuR0VORVJBVEVfUEFDS0FHRVMpCisKKyAgICBkZWYgZ2VuZXJhdGVfaW1hZ2Uoc2VsZiwgaW1hZ2UsIGJhc2VfaW1hZ2UsIGltYWdlX3BhY2thZ2VzPU5vbmUsIHRvb2xjaGFpbl9wYWNrYWdlcz1Ob25lLCBkZWZhdWx0X3Rhc2s9ImJ1aWxkIik6CisgICAgICAgIHNlbGYuaW1hZ2UgPSBpbWFnZQorICAgICAgICBzZWxmLmJhc2VfaW1hZ2UgPSBiYXNlX2ltYWdlCisgICAgICAgIGlmIGltYWdlX3BhY2thZ2VzOgorICAgICAgICAgICAgc2VsZi5wYWNrYWdlX3F1ZXVlID0gaW1hZ2VfcGFja2FnZXMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucGFja2FnZV9xdWV1ZSA9IFtdCisgICAgICAgIGlmIHRvb2xjaGFpbl9wYWNrYWdlczoKKyAgICAgICAgICAgIHNlbGYudG9vbGNoYWluX3BhY2thZ2VzID0gdG9vbGNoYWluX3BhY2thZ2VzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnRvb2xjaGFpbl9wYWNrYWdlcyA9IFtdCisgICAgICAgIHNlbGYuZGVmYXVsdF90YXNrID0gZGVmYXVsdF90YXNrCisgICAgICAgIHNlbGYucnVuQ29tbWFuZChbInNldFByZVBvc3RDb25mRmlsZXMiLCAiY29uZi8uaG9iLmNvbmYiLCAiIl0pCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX1BBUlNFX0NPTkZJRykKKyAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYy5hcHBlbmQoc2VsZi5TVUJfQlVJTERfSU1BR0UpCisgICAgICAgIHNlbGYucnVuX25leHRfY29tbWFuZChzZWxmLkdFTkVSQVRFX0lNQUdFKQorCisgICAgZGVmIGdlbmVyYXRlX25ld19pbWFnZShzZWxmLCBpbWFnZSwgYmFzZV9pbWFnZSwgcGFja2FnZV9xdWV1ZSwgZGVzY3JpcHRpb24pOgorICAgICAgICBpZiBiYXNlX2ltYWdlOgorICAgICAgICAgICAgYmFzZV9pbWFnZSA9IHNlbGYucnVuQ29tbWFuZChbIm1hdGNoRmlsZSIsIHNlbGYuYmFzZV9pbWFnZSArICIuYmIiXSkKKyAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsiZ2VuZXJhdGVOZXdJbWFnZSIsIGltYWdlLCBiYXNlX2ltYWdlLCBwYWNrYWdlX3F1ZXVlLCBGYWxzZSwgZGVzY3JpcHRpb25dKQorCisgICAgZGVmIGdlbmVyYXRlX2hvYl9iYXNlX2ltYWdlKHNlbGYsIGhvYl9pbWFnZSk6CisgICAgICAgIGltYWdlX2RpciA9IHNlbGYuZ2V0X3RvcGRpcigpICsgIi9yZWNpcGVzL2ltYWdlcy8iCisgICAgICAgIHJlY2lwZV9uYW1lID0gaG9iX2ltYWdlICsgIi5iYiIKKyAgICAgICAgc2VsZi5lbnN1cmVfZGlyKGltYWdlX2RpcikKKyAgICAgICAgc2VsZi5nZW5lcmF0ZV9uZXdfaW1hZ2UoaW1hZ2VfZGlyICsgcmVjaXBlX25hbWUsIE5vbmUsIFtdLCAiIikKKworICAgIGRlZiBlbnN1cmVfZGlyKHNlbGYsIGRpcmVjdG9yeSk6CisgICAgICAgIHNlbGYucnVuQ29tbWFuZChbImVuc3VyZURpciIsIGRpcmVjdG9yeV0pCisKKyAgICBkZWYgYnVpbGRfc3VjY2VlZGVkX2FzeW5jKHNlbGYpOgorICAgICAgICBzZWxmLmJ1aWxkaW5nID0gRmFsc2UKKworICAgIGRlZiBidWlsZF9mYWlsZWRfYXN5bmMoc2VsZik6CisgICAgICAgIHNlbGYuaW5pdGNtZCA9IE5vbmUKKyAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYyA9IFtdCisgICAgICAgIHNlbGYuYnVpbGRpbmcgPSBGYWxzZQorCisgICAgZGVmIGNhbmNlbF9wYXJzZShzZWxmKToKKyAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsic3RhdGVGb3JjZVNodXRkb3duIl0pCisKKyAgICBkZWYgY2FuY2VsX2J1aWxkKHNlbGYsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgaWYgZm9yY2U6CisgICAgICAgICAgICAjIEZvcmNlIHRoZSBjb29rZXIgdG8gc3RvcCBhcyBxdWlja2x5IGFzIHBvc3NpYmxlCisgICAgICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJzdGF0ZUZvcmNlU2h1dGRvd24iXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgV2FpdCBmb3IgdGFza3MgdG8gY29tcGxldGUgYmVmb3JlIHNodXR0aW5nIGRvd24sIHRoaXMgaGVscHMKKyAgICAgICAgICAgICMgbGVhdmUgdGhlIHdvcmtkaXIgaW4gYSB1c2FibGUgc3RhdGUKKyAgICAgICAgICAgIHNlbGYucnVuQ29tbWFuZChbInN0YXRlU2h1dGRvd24iXSkKKworICAgIGRlZiByZXNldF9idWlsZChzZWxmKToKKyAgICAgICAgc2VsZi5idWlsZC5yZXNldCgpCisKKyAgICBkZWYgZ2V0X2xvZ2ZpbGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQkJfQ09OU09MRUxPRyJdKVswXQorCisgICAgZGVmIGdldF90b3BkaXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJUT1BESVIiXSkgb3IgIiIKKworICAgIGRlZiBfcmVtb3ZlX3JlZHVuZGFudChzZWxmLCBzdHJpbmcpOgorICAgICAgICByZXQgPSBbXQorICAgICAgICBmb3IgaSBpbiBzdHJpbmcuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIGkgbm90IGluIHJldDoKKyAgICAgICAgICAgICAgICByZXQuYXBwZW5kKGkpCisgICAgICAgIHJldHVybiAiICIuam9pbihyZXQpCisKKyAgICBkZWYgc2V0X3Zhcl9pbl9maWxlKHNlbGYsIHZhciwgdmFsLCBkZWZhdWx0X2ZpbGU9Tm9uZSk6CisgICAgICAgIHNlbGYucnVuQ29tbWFuZChbImVuYWJsZURhdGFUcmFja2luZyJdKQorICAgICAgICBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsic2V0VmFyRmlsZSIsIHZhciwgdmFsLCBkZWZhdWx0X2ZpbGUsICJzZXQiXSkKKyAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsiZGlzYWJsZURhdGFUcmFja2luZyJdKQorCisgICAgZGVmIGVhcmx5X2Fzc2lnbl92YXJfaW5fZmlsZShzZWxmLCB2YXIsIHZhbCwgZGVmYXVsdF9maWxlPU5vbmUpOgorICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJlbmFibGVEYXRhVHJhY2tpbmciXSkKKyAgICAgICAgc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbInNldFZhckZpbGUiLCB2YXIsIHZhbCwgZGVmYXVsdF9maWxlLCAiZWFybHlBc3NpZ24iXSkKKyAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsiZGlzYWJsZURhdGFUcmFja2luZyJdKQorCisgICAgZGVmIHJlbW92ZV92YXJfZnJvbV9maWxlKHNlbGYsIHZhcik6CisgICAgICAgIHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWyJyZW1vdmVWYXJGaWxlIiwgdmFyXSkKKworICAgIGRlZiBhcHBlbmRfdmFyX2luX2ZpbGUoc2VsZiwgdmFyLCB2YWwsIGRlZmF1bHRfZmlsZT1Ob25lKToKKyAgICAgICAgc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbInNldFZhckZpbGUiLCB2YXIsIHZhbCwgZGVmYXVsdF9maWxlLCAiYXBwZW5kIl0pCisKKyAgICBkZWYgYXBwZW5kX3RvX2JiZmlsZXMoc2VsZiwgdmFsKToKKyAgICAgICAgYmJmaWxlcyA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCRklMRVMiLCAiRmFsc2UiXSkgb3IgIiIKKyAgICAgICAgYmJmaWxlcyA9IGJiZmlsZXMuc3BsaXQoKQorICAgICAgICBpZiB2YWwgbm90IGluIGJiZmlsZXM6CisgICAgICAgICAgICBzZWxmLmFwcGVuZF92YXJfaW5fZmlsZSgiQkJGSUxFUyIsIHZhbCwgImJibGF5ZXJzLmNvbmYiKQorCisgICAgZGVmIGdldF9wYXJhbWV0ZXJzKHNlbGYpOgorICAgICAgICAjIHJldHJpZXZlIHRoZSBwYXJhbWV0ZXJzIGZyb20gYml0YmFrZQorICAgICAgICBwYXJhbXMgPSB7fQorICAgICAgICBwYXJhbXNbImNvcmVfYmFzZSJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQ09SRUJBU0UiXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJsYXllciJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQkJMQVlFUlMiXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJsYXllcnNfbm9uX3JlbW92YWJsZSJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQkJMQVlFUlNfTk9OX1JFTU9WQUJMRSJdKSBvciAiIgorICAgICAgICBwYXJhbXNbImRsZGlyIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJETF9ESVIiXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJtYWNoaW5lIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJNQUNISU5FIl0pIG9yICIiCisgICAgICAgIHBhcmFtc1siZGlzdHJvIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJESVNUUk8iXSkgb3IgImRlZmF1bHRzZXR1cCIKKyAgICAgICAgcGFyYW1zWyJwY2xhc3MiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIlBBQ0tBR0VfQ0xBU1NFUyJdKSBvciAiIgorICAgICAgICBwYXJhbXNbInNzdGF0ZWRpciJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiU1NUQVRFX0RJUiJdKSBvciAiIgorICAgICAgICBwYXJhbXNbInNzdGF0ZW1pcnJvciJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiU1NUQVRFX01JUlJPUlMiXSkgb3IgIiIKKworICAgICAgICBudW1fdGhyZWFkcyA9IHNlbGYucnVuQ29tbWFuZChbImdldENwdUNvdW50Il0pCisgICAgICAgIGlmIG5vdCBudW1fdGhyZWFkczoKKyAgICAgICAgICAgIG51bV90aHJlYWRzID0gMQorICAgICAgICAgICAgbWF4X3RocmVhZHMgPSA2NTUzNgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG51bV90aHJlYWRzID0gaW50KG51bV90aHJlYWRzKQorICAgICAgICAgICAgICAgIG1heF90aHJlYWRzID0gMTYgKiBudW1fdGhyZWFkcworICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIG51bV90aHJlYWRzID0gMQorICAgICAgICAgICAgICAgIG1heF90aHJlYWRzID0gNjU1MzYKKyAgICAgICAgcGFyYW1zWyJtYXhfdGhyZWFkcyJdID0gbWF4X3RocmVhZHMKKworICAgICAgICBiYnRocmVhZCA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCX05VTUJFUl9USFJFQURTIl0pCisgICAgICAgIGlmIG5vdCBiYnRocmVhZDoKKyAgICAgICAgICAgIGJidGhyZWFkID0gbnVtX3RocmVhZHMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBiYnRocmVhZCA9IGludChiYnRocmVhZCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBiYnRocmVhZCA9IG51bV90aHJlYWRzCisgICAgICAgIHBhcmFtc1siYmJ0aHJlYWQiXSA9IGJidGhyZWFkCisKKyAgICAgICAgcG1ha2UgPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJQQVJBTExFTF9NQUtFIl0pCisgICAgICAgIGlmIG5vdCBwbWFrZToKKyAgICAgICAgICAgIHBtYWtlID0gbnVtX3RocmVhZHMKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHBtYWtlLCBpbnQpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBtYWtlID0gaW50KHBtYWtlLmxzdHJpcCgiLWogIikpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcG1ha2UgPSBudW1fdGhyZWFkcworICAgICAgICBwYXJhbXNbInBtYWtlIl0gPSAiLWogJXMiICUgcG1ha2UKKworICAgICAgICBwYXJhbXNbImltYWdlX2FkZHIiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkRFUExPWV9ESVJfSU1BR0UiXSkgb3IgIiIKKworICAgICAgICBpbWFnZV9leHRyYV9zaXplID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFIl0pCisgICAgICAgIGlmIG5vdCBpbWFnZV9leHRyYV9zaXplOgorICAgICAgICAgICAgaW1hZ2VfZXh0cmFfc2l6ZSA9IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbWFnZV9leHRyYV9zaXplID0gaW50KGltYWdlX2V4dHJhX3NpemUpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgaW1hZ2VfZXh0cmFfc2l6ZSA9IDAKKyAgICAgICAgcGFyYW1zWyJpbWFnZV9leHRyYV9zaXplIl0gPSBpbWFnZV9leHRyYV9zaXplCisKKyAgICAgICAgaW1hZ2Vfcm9vdGZzX3NpemUgPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJJTUFHRV9ST09URlNfU0laRSJdKQorICAgICAgICBpZiBub3QgaW1hZ2Vfcm9vdGZzX3NpemU6CisgICAgICAgICAgICBpbWFnZV9yb290ZnNfc2l6ZSA9IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbWFnZV9yb290ZnNfc2l6ZSA9IGludChpbWFnZV9yb290ZnNfc2l6ZSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBpbWFnZV9yb290ZnNfc2l6ZSA9IDAKKyAgICAgICAgcGFyYW1zWyJpbWFnZV9yb290ZnNfc2l6ZSJdID0gaW1hZ2Vfcm9vdGZzX3NpemUKKworICAgICAgICBpbWFnZV9vdmVyaGVhZF9mYWN0b3IgPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJJTUFHRV9PVkVSSEVBRF9GQUNUT1IiXSkKKyAgICAgICAgaWYgbm90IGltYWdlX292ZXJoZWFkX2ZhY3RvcjoKKyAgICAgICAgICAgIGltYWdlX292ZXJoZWFkX2ZhY3RvciA9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbWFnZV9vdmVyaGVhZF9mYWN0b3IgPSBmbG9hdChpbWFnZV9vdmVyaGVhZF9mYWN0b3IpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgaW1hZ2Vfb3ZlcmhlYWRfZmFjdG9yID0gMQorICAgICAgICBwYXJhbXNbJ2ltYWdlX292ZXJoZWFkX2ZhY3RvciddID0gaW1hZ2Vfb3ZlcmhlYWRfZmFjdG9yCisKKyAgICAgICAgcGFyYW1zWyJpbmNvbXBhdF9saWNlbnNlIl0gPSBzZWxmLl9yZW1vdmVfcmVkdW5kYW50KHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIklOQ09NUEFUSUJMRV9MSUNFTlNFIl0pIG9yICIiKQorICAgICAgICBwYXJhbXNbInNka19tYWNoaW5lIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJTREtNQUNISU5FIl0pIG9yIHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIlNES19BUkNIIl0pIG9yICIiCisKKyAgICAgICAgcGFyYW1zWyJpbWFnZV9mc3R5cGVzIl0gPSBzZWxmLl9yZW1vdmVfcmVkdW5kYW50KHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIklNQUdFX0ZTVFlQRVMiXSkgb3IgIiIpCisKKyAgICAgICAgcGFyYW1zWyJpbWFnZV90eXBlcyJdID0gc2VsZi5fcmVtb3ZlX3JlZHVuZGFudChzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJJTUFHRV9UWVBFUyJdKSBvciAiIikKKworICAgICAgICBwYXJhbXNbImNvbmZfdmVyc2lvbiJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQ09ORl9WRVJTSU9OIl0pIG9yICIiCisgICAgICAgIHBhcmFtc1sibGNvbmZfdmVyc2lvbiJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiTENPTkZfVkVSU0lPTiJdKSBvciAiIgorCisgICAgICAgIHBhcmFtc1sicnVubmFibGVfaW1hZ2VfdHlwZXMiXSA9IHNlbGYuX3JlbW92ZV9yZWR1bmRhbnQoc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiUlVOTkFCTEVfSU1BR0VfVFlQRVMiXSkgb3IgIiIpCisgICAgICAgIHBhcmFtc1sicnVubmFibGVfbWFjaGluZV9wYXR0ZXJucyJdID0gc2VsZi5fcmVtb3ZlX3JlZHVuZGFudChzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJSVU5OQUJMRV9NQUNISU5FX1BBVFRFUk5TIl0pIG9yICIiKQorICAgICAgICBwYXJhbXNbImRlcGxveWFibGVfaW1hZ2VfdHlwZXMiXSA9IHNlbGYuX3JlbW92ZV9yZWR1bmRhbnQoc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiREVQTE9ZQUJMRV9JTUFHRV9UWVBFUyJdKSBvciAiIikKKyAgICAgICAgcGFyYW1zWyJrZXJuZWxfaW1hZ2VfdHlwZSJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiS0VSTkVMX0lNQUdFVFlQRSJdKSBvciAiIgorICAgICAgICBwYXJhbXNbInRtcGRpciJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiVE1QRElSIl0pIG9yICIiCisgICAgICAgIHBhcmFtc1siZGlzdHJvX3ZlcnNpb24iXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkRJU1RST19WRVJTSU9OIl0pIG9yICIiCisgICAgICAgIHBhcmFtc1sidGFyZ2V0X29zIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJUQVJHRVRfT1MiXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJ0YXJnZXRfYXJjaCJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiVEFSR0VUX0FSQ0giXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJ0dW5lX3BrZ2FyY2giXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIlRVTkVfUEtHQVJDSCJdKSAgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJiYl92ZXJzaW9uIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQl9NSU5fVkVSU0lPTiJdKSBvciAiIgorCisgICAgICAgIHBhcmFtc1siZGVmYXVsdF90YXNrIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQl9ERUZBVUxUX1RBU0siXSkgb3IgImJ1aWxkIgorCisgICAgICAgIHBhcmFtc1sic29ja3NfcHJveHkiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgImFsbF9wcm94eSJdKSBvciAiIgorICAgICAgICBwYXJhbXNbImh0dHBfcHJveHkiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgImh0dHBfcHJveHkiXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJmdHBfcHJveHkiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgImZ0cF9wcm94eSJdKSBvciAiIgorICAgICAgICBwYXJhbXNbImh0dHBzX3Byb3h5Il0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJodHRwc19wcm94eSJdKSBvciAiIgorCisgICAgICAgIHBhcmFtc1siY3ZzX3Byb3h5X2hvc3QiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkNWU19QUk9YWV9IT1NUIl0pIG9yICIiCisgICAgICAgIHBhcmFtc1siY3ZzX3Byb3h5X3BvcnQiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkNWU19QUk9YWV9QT1JUIl0pIG9yICIiCisKKyAgICAgICAgcGFyYW1zWyJpbWFnZV93aGl0ZV9wYXR0ZXJuIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQlVJX0lNQUdFX1dISVRFX1BBVFRFUk4iXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJpbWFnZV9ibGFja19wYXR0ZXJuIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQlVJX0lNQUdFX0JMQUNLX1BBVFRFUk4iXSkgb3IgIiIKKyAgICAgICAgcmV0dXJuIHBhcmFtcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaG9ibGlzdG1vZGVsLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaG9ibGlzdG1vZGVsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZGYxNTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9ob2JsaXN0bW9kZWwucHkKQEAgLTAsMCArMSw5MDMgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMSAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgSm9zaHVhIExvY2sgPGpvc2hAbGludXguaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKK2ltcG9ydCBnb2JqZWN0Citmcm9tIGJiLnVpLmNydW1icy5ob2JwYWdlcyBpbXBvcnQgSG9iUGFnZQorCisjCisjIFBhY2thZ2VMaXN0TW9kZWwKKyMKK2NsYXNzIFBhY2thZ2VMaXN0TW9kZWwoZ3RrLkxpc3RTdG9yZSk6CisgICAgIiIiCisgICAgVGhpcyBjbGFzcyBkZWZpbmVzIGFuIGd0ay5MaXN0U3RvcmUgc3ViY2xhc3Mgd2hpY2ggd2lsbCBjb252ZXJ0IHRoZSBvdXRwdXQKKyAgICBvZiB0aGUgYmIuZXZlbnQuVGFyZ2V0c1RyZWVHZW5lcmF0ZWQgZXZlbnQgaW50byBhIGd0ay5MaXN0U3RvcmUgd2hpbHN0IGFsc28KKyAgICBwcm92aWRpbmcgY29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIGFjY2VzcyBndGsuVHJlZU1vZGVsIHN1YmNsYXNzZXMgd2hpY2gKKyAgICBwcm92aWRlIGZpbHRlcmVkIHZpZXdzIG9mIHRoZSBkYXRhLgorICAgICIiIgorCisgICAgKENPTF9OQU1FLCBDT0xfVkVSLCBDT0xfUkVWLCBDT0xfUk5NLCBDT0xfU0VDLCBDT0xfU1VNLCBDT0xfUkRFUCwgQ09MX1JQUk9WLCBDT0xfU0laRSwgQ09MX1JDUCwgQ09MX0JJTkIsIENPTF9JTkMsIENPTF9GQURFX0lOQywgQ09MX0ZPTlQsIENPTF9GTElTVCkgPSByYW5nZSgxNSkKKworICAgIF9fZ3NpZ25hbHNfXyA9IHsKKyAgICAgICAgInBhY2thZ2Utc2VsZWN0aW9uLWNoYW5nZWQiIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgIH0KKworICAgIF9fdG9vbGNoYWluX3JlcXVpcmVkX3BhY2thZ2VzX18gPSBbInBhY2thZ2Vncm91cC1jb3JlLXN0YW5kYWxvbmUtc2RrLXRhcmdldCIsICJwYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQtZGJnIl0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5ycHJvdl9wa2cgPSB7fQorICAgICAgICBndGsuTGlzdFN0b3JlLl9faW5pdF9fIChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfQk9PTEVBTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX0JPT0xFQU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcpCisgICAgICAgIHNlbGYuc29ydF9jb2x1bW5faWQsIHNlbGYuc29ydF9vcmRlciA9IFBhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUUsIGd0ay5TT1JUX0FTQ0VORElORworCisgICAgIiIiCisgICAgRmluZCB0aGUgbW9kZWwgcGF0aCBmb3IgdGhlIGl0ZW1fbmFtZQorICAgIFJldHVybnMgdGhlIHBhdGggaW4gdGhlIG1vZGVsIG9yIE5vbmUKKyAgICAiIiIKKyAgICBkZWYgZmluZF9wYXRoX2Zvcl9pdGVtKHNlbGYsIGl0ZW1fbmFtZSk6CisgICAgICAgIHBrZyA9IGl0ZW1fbmFtZQorICAgICAgICBpZiBpdGVtX25hbWUgbm90IGluIHNlbGYucG5fcGF0aC5rZXlzKCk6CisgICAgICAgICAgICBpZiBpdGVtX25hbWUgbm90IGluIHNlbGYucnByb3ZfcGtnLmtleXMoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgcGtnID0gc2VsZi5ycHJvdl9wa2dbaXRlbV9uYW1lXQorICAgICAgICAgICAgaWYgcGtnIG5vdCBpbiBzZWxmLnBuX3BhdGgua2V5cygpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgcmV0dXJuIHNlbGYucG5fcGF0aFtwa2ddCisKKyAgICBkZWYgZmluZF9pdGVtX2Zvcl9wYXRoKHNlbGYsIGl0ZW1fcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfTkFNRV0KKworICAgICIiIgorICAgIEhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBpdGVtIGlzIGFuIGl0ZW0gc3BlY2lmaWVkIGJ5IGZpbHRlcgorICAgICIiIgorICAgIGRlZiB0cmVlX21vZGVsX2ZpbHRlcihzZWxmLCBtb2RlbCwgaXQsIGZpbHRlcik6CisgICAgICAgIG5hbWUgPSBtb2RlbC5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX05BTUUpCisKKyAgICAgICAgZm9yIGtleSBpbiBmaWx0ZXIua2V5cygpOgorICAgICAgICAgICAgaWYga2V5ID09IHNlbGYuQ09MX05BTUU6CisgICAgICAgICAgICAgICAgaWYgZmlsdGVyW2tleV0gIT0gJ1NlYXJjaCBwYWNrYWdlcyBieSBuYW1lJzoKKyAgICAgICAgICAgICAgICAgICAgaWYgbmFtZSBhbmQgZmlsdGVyW2tleV0gbm90IGluIG5hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbW9kZWwuZ2V0X3ZhbHVlKGl0LCBrZXkpIG5vdCBpbiBmaWx0ZXJba2V5XToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHNlbGYuZmlsdGVyZWRfbmIgKz0gMQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIiIiCisgICAgQ3JlYXRlLCBpZiByZXF1aXJlZCwgYW5kIHJldHVybiBhIGZpbHRlcmVkIGd0ay5UcmVlTW9kZWxTb3J0CisgICAgY29udGFpbmluZyBvbmx5IHRoZSBpdGVtcyBzcGVjaWZpZWQgYnkgZmlsdGVyCisgICAgIiIiCisgICAgZGVmIHRyZWVfbW9kZWwoc2VsZiwgZmlsdGVyLCBleGNsdWRlZF9pdGVtc19haGVhZD1GYWxzZSwgaW5jbHVkZWRfaXRlbXNfYWhlYWQ9RmFsc2UsIHNlYXJjaF9kYXRhPU5vbmUsIGluaXRpYWw9RmFsc2UpOgorICAgICAgICBtb2RlbCA9IHNlbGYuZmlsdGVyX25ldygpCisgICAgICAgIHNlbGYuZmlsdGVyZWRfbmIgPSAwCisgICAgICAgIG1vZGVsLnNldF92aXNpYmxlX2Z1bmMoc2VsZi50cmVlX21vZGVsX2ZpbHRlciwgZmlsdGVyKQorCisgICAgICAgIHNvcnQgPSBndGsuVHJlZU1vZGVsU29ydChtb2RlbCkKKyAgICAgICAgc29ydC5jb25uZWN0ICgnc29ydC1jb2x1bW4tY2hhbmdlZCcsIHNlbGYuc29ydF9jb2x1bW5fY2hhbmdlZF9jYikKKyAgICAgICAgaWYgaW5pdGlhbDoKKyAgICAgICAgICAgIHNvcnQuc2V0X3NvcnRfY29sdW1uX2lkKFBhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUUsIGd0ay5TT1JUX0FTQ0VORElORykKKyAgICAgICAgICAgIHNvcnQuc2V0X2RlZmF1bHRfc29ydF9mdW5jKE5vbmUpCisgICAgICAgIGVsaWYgZXhjbHVkZWRfaXRlbXNfYWhlYWQ6CisgICAgICAgICAgICBzb3J0LnNldF9kZWZhdWx0X3NvcnRfZnVuYyhzZWxmLmV4Y2x1ZGVfaXRlbV9zb3J0X2Z1bmMsIHNlYXJjaF9kYXRhKQorICAgICAgICBlbGlmIGluY2x1ZGVkX2l0ZW1zX2FoZWFkOgorICAgICAgICAgICAgc29ydC5zZXRfZGVmYXVsdF9zb3J0X2Z1bmMoc2VsZi5pbmNsdWRlX2l0ZW1fc29ydF9mdW5jLCBzZWFyY2hfZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNlYXJjaF9kYXRhIGFuZCBzZWFyY2hfZGF0YSE9J1NlYXJjaCByZWNpcGVzIGJ5IG5hbWUnIGFuZCBzZWFyY2hfZGF0YSE9J1NlYXJjaCBwYWNrYWdlIGdyb3VwcyBieSBuYW1lJzoKKyAgICAgICAgICAgICAgICBzb3J0LnNldF9kZWZhdWx0X3NvcnRfZnVuYyhzZWxmLnNvcnRfZnVuYywgc2VhcmNoX2RhdGEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNvcnQuc2V0X3NvcnRfY29sdW1uX2lkKHNlbGYuc29ydF9jb2x1bW5faWQsIHNlbGYuc29ydF9vcmRlcikKKyAgICAgICAgICAgICAgICBzb3J0LnNldF9kZWZhdWx0X3NvcnRfZnVuYyhOb25lKQorCisgICAgICAgIHNvcnQuc2V0X3NvcnRfZnVuYyhQYWNrYWdlTGlzdE1vZGVsLkNPTF9JTkMsIHNlbGYuc29ydF9jb2x1bW4sIFBhY2thZ2VMaXN0TW9kZWwuQ09MX0lOQykKKyAgICAgICAgc29ydC5zZXRfc29ydF9mdW5jKFBhY2thZ2VMaXN0TW9kZWwuQ09MX1NJWkUsIHNlbGYuc29ydF9jb2x1bW4sIFBhY2thZ2VMaXN0TW9kZWwuQ09MX1NJWkUpCisgICAgICAgIHNvcnQuc2V0X3NvcnRfZnVuYyhQYWNrYWdlTGlzdE1vZGVsLkNPTF9CSU5CLCBzZWxmLnNvcnRfYmluYl9jb2x1bW4pCisgICAgICAgIHNvcnQuc2V0X3NvcnRfZnVuYyhQYWNrYWdlTGlzdE1vZGVsLkNPTF9SQ1AsIHNlbGYuc29ydF9jb2x1bW4sIFBhY2thZ2VMaXN0TW9kZWwuQ09MX1JDUCkKKyAgICAgICAgcmV0dXJuIHNvcnQKKworICAgIGRlZiBzb3J0X2NvbHVtbl9jaGFuZ2VkX2NiIChzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5zb3J0X2NvbHVtbl9pZCwgc2VsZi5zb3J0X29yZGVyID0gZGF0YS5nZXRfc29ydF9jb2x1bW5faWQgKCkKKworICAgIGRlZiBzb3J0X2NvbHVtbihzZWxmLCBtb2RlbCwgcm93MSwgcm93MiwgY29sKToKKyAgICAgICAgdmFsdWUxID0gbW9kZWwuZ2V0X3ZhbHVlKHJvdzEsIGNvbCkKKyAgICAgICAgdmFsdWUyID0gbW9kZWwuZ2V0X3ZhbHVlKHJvdzIsIGNvbCkKKyAgICAgICAgaWYgY29sPT1QYWNrYWdlTGlzdE1vZGVsLkNPTF9TSVpFOgorICAgICAgICAgICAgdmFsdWUxID0gSG9iUGFnZS5fc3RyaW5nX3RvX3NpemUodmFsdWUxKQorICAgICAgICAgICAgdmFsdWUyID0gSG9iUGFnZS5fc3RyaW5nX3RvX3NpemUodmFsdWUyKQorCisgICAgICAgIGNtcF9yZXMgPSBjbXAodmFsdWUxLCB2YWx1ZTIpCisgICAgICAgIGlmIGNtcF9yZXMhPTA6CisgICAgICAgICAgICBpZiBjb2w9PVBhY2thZ2VMaXN0TW9kZWwuQ09MX0lOQzoKKyAgICAgICAgICAgICAgICByZXR1cm4gLWNtcF9yZXMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcF9yZXMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5hbWUxID0gbW9kZWwuZ2V0X3ZhbHVlKHJvdzEsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgICAgICBuYW1lMiA9IG1vZGVsLmdldF92YWx1ZShyb3cyLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgcmV0dXJuIGNtcChuYW1lMSxuYW1lMikKKworICAgIGRlZiBzb3J0X2JpbmJfY29sdW1uKHNlbGYsIG1vZGVsLCByb3cxLCByb3cyKToKKyAgICAgICAgdmFsdWUxID0gbW9kZWwuZ2V0X3ZhbHVlKHJvdzEsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX0JJTkIpCisgICAgICAgIHZhbHVlMiA9IG1vZGVsLmdldF92YWx1ZShyb3cyLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9CSU5CKQorICAgICAgICB2YWx1ZTFfbGlzdCA9IHZhbHVlMS5zcGxpdCgnLCAnKQorICAgICAgICB2YWx1ZTJfbGlzdCA9IHZhbHVlMi5zcGxpdCgnLCAnKQorCisgICAgICAgIHZhbHVlMSA9IHZhbHVlMV9saXN0WzBdCisgICAgICAgIHZhbHVlMiA9IHZhbHVlMl9saXN0WzBdCisKKyAgICAgICAgY21wX3JlcyA9IGNtcCh2YWx1ZTEsIHZhbHVlMikKKyAgICAgICAgaWYgY21wX3Jlcz09MDoKKyAgICAgICAgICAgIGNtcF9zaXplID0gY21wKGxlbih2YWx1ZTFfbGlzdCksIGxlbih2YWx1ZTJfbGlzdCkpCisgICAgICAgICAgICBpZiBjbXBfc2l6ZT09MDoKKyAgICAgICAgICAgICAgICBuYW1lMSA9IG1vZGVsLmdldF92YWx1ZShyb3cxLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgICAgIG5hbWUyID0gbW9kZWwuZ2V0X3ZhbHVlKHJvdzIsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcChuYW1lMSxuYW1lMikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcF9zaXplCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gY21wX3JlcworCisgICAgZGVmIGV4Y2x1ZGVfaXRlbV9zb3J0X2Z1bmMoc2VsZiwgbW9kZWwsIGl0ZXIxLCBpdGVyMiwgdXNlcl9kYXRhPU5vbmUpOgorICAgICAgICBpZiB1c2VyX2RhdGE6CisgICAgICAgICAgICB2YWwxID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIxLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgdmFsMiA9IG1vZGVsLmdldF92YWx1ZShpdGVyMiwgUGFja2FnZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNtcF92YWxzKHZhbDEsIHZhbDIsIHVzZXJfZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhbDEgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjEsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX0ZBREVfSU5DKQorICAgICAgICAgICAgdmFsMiA9IG1vZGVsLmdldF92YWx1ZShpdGVyMiwgUGFja2FnZUxpc3RNb2RlbC5DT0xfSU5DKQorICAgICAgICAgICAgcmV0dXJuICgodmFsMSA9PSBUcnVlKSBhbmQgKHZhbDIgPT0gRmFsc2UpKQorCisgICAgZGVmIGluY2x1ZGVfaXRlbV9zb3J0X2Z1bmMoc2VsZiwgbW9kZWwsIGl0ZXIxLCBpdGVyMiwgdXNlcl9kYXRhPU5vbmUpOgorICAgICAgICBpZiB1c2VyX2RhdGE6CisgICAgICAgICAgICB2YWwxID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIxLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgdmFsMiA9IG1vZGVsLmdldF92YWx1ZShpdGVyMiwgUGFja2FnZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNtcF92YWxzKHZhbDEsIHZhbDIsIHVzZXJfZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhbDEgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjEsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX0lOQykKKyAgICAgICAgICAgIHZhbDIgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjIsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX0lOQykKKyAgICAgICAgICAgIHJldHVybiAoKHZhbDEgPT0gRmFsc2UpIGFuZCAodmFsMiA9PSBUcnVlKSkKKworICAgIGRlZiBzb3J0X2Z1bmMoc2VsZiwgbW9kZWwsIGl0ZXIxLCBpdGVyMiwgdXNlcl9kYXRhKToKKyAgICAgICAgdmFsMSA9IG1vZGVsLmdldF92YWx1ZShpdGVyMSwgUGFja2FnZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgdmFsMiA9IG1vZGVsLmdldF92YWx1ZShpdGVyMiwgUGFja2FnZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgcmV0dXJuIHNlbGYuY21wX3ZhbHModmFsMSwgdmFsMiwgdXNlcl9kYXRhKQorCisgICAgZGVmIGNtcF92YWxzKHNlbGYsIHZhbDEsIHZhbDIsIHVzZXJfZGF0YSk6CisgICAgICAgIGlmIHZhbDEgaXMgTm9uZSBvciB2YWwyIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBlbGlmIHZhbDEuc3RhcnRzd2l0aCh1c2VyX2RhdGEpIGFuZCBub3QgdmFsMi5zdGFydHN3aXRoKHVzZXJfZGF0YSk6CisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgZWxpZiBub3QgdmFsMS5zdGFydHN3aXRoKHVzZXJfZGF0YSkgYW5kIHZhbDIuc3RhcnRzd2l0aCh1c2VyX2RhdGEpOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBjbXAodmFsMSwgdmFsMikKKworICAgIGRlZiBjb252ZXJ0X3ZwYXRoX3RvX3BhdGgoc2VsZiwgdmlld19tb2RlbCwgdmlld19wYXRoKToKKyAgICAgICAgIyB2aWV3X21vZGVsIGlzIHRoZSBtb2RlbCBzb3J0ZWQKKyAgICAgICAgIyBnZXQgdGhlIHBhdGggb2YgdGhlIG1vZGVsIGZpbHRlcmVkCisgICAgICAgIGZpbHRlcmVkX21vZGVsX3BhdGggPSB2aWV3X21vZGVsLmNvbnZlcnRfcGF0aF90b19jaGlsZF9wYXRoKHZpZXdfcGF0aCkKKyAgICAgICAgIyBnZXQgdGhlIG1vZGVsIGZpbHRlcmVkCisgICAgICAgIGZpbHRlcmVkX21vZGVsID0gdmlld19tb2RlbC5nZXRfbW9kZWwoKQorICAgICAgICAjIGdldCB0aGUgcGF0aCBvZiB0aGUgb3JpZ2luYWwgbW9kZWwKKyAgICAgICAgcGF0aCA9IGZpbHRlcmVkX21vZGVsLmNvbnZlcnRfcGF0aF90b19jaGlsZF9wYXRoKGZpbHRlcmVkX21vZGVsX3BhdGgpCisgICAgICAgIHJldHVybiBwYXRoCisKKyAgICBkZWYgY29udmVydF9wYXRoX3RvX3ZwYXRoKHNlbGYsIHZpZXdfbW9kZWwsIHBhdGgpOgorICAgICAgICBpdCA9IHZpZXdfbW9kZWwuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIG5hbWUgPSBzZWxmLmZpbmRfaXRlbV9mb3JfcGF0aChwYXRoKQorICAgICAgICAgICAgdmlld19uYW1lID0gdmlld19tb2RlbC5nZXRfdmFsdWUoaXQsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgICAgICBpZiB2aWV3X25hbWUgPT0gbmFtZToKKyAgICAgICAgICAgICAgICB2aWV3X3BhdGggPSB2aWV3X21vZGVsLmdldF9wYXRoKGl0KQorICAgICAgICAgICAgICAgIHJldHVybiB2aWV3X3BhdGgKKyAgICAgICAgICAgIGl0ID0gdmlld19tb2RlbC5pdGVyX25leHQoaXQpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICAiIiIKKyAgICBUaGUgcG9wdWxhdGUoKSBmdW5jdGlvbiB0YWtlcyBhcyBpbnB1dCB0aGUgZGF0YSBmcm9tIGEKKyAgICBiYi5ldmVudC5QYWNrYWdlSW5mbyBldmVudCBhbmQgcG9wdWxhdGVzIHRoZSBwYWNrYWdlIGxpc3QuCisgICAgIiIiCisgICAgZGVmIHBvcHVsYXRlKHNlbGYsIHBrZ2luZm9saXN0KToKKyAgICAgICAgIyBGaXJzdCBjbGVhciB0aGUgbW9kZWwsIGluIGNhc2UgcmVwb3B1bGF0aW5nCisgICAgICAgIHNlbGYuY2xlYXIoKQorCisgICAgICAgIGRlZiBnZXRwa2d2YWx1ZShwa2dkaWN0LCBrZXksIHBrZ25hbWUsIGRlZmF1bHR2YWwgPSBOb25lKToKKyAgICAgICAgICAgIHZhbHVlID0gcGtnZGljdC5nZXQoJyVzXyVzJyAlIChrZXksIHBrZ25hbWUpLCBOb25lKQorICAgICAgICAgICAgaWYgbm90IHZhbHVlOgorICAgICAgICAgICAgICAgIHZhbHVlID0gcGtnZGljdC5nZXQoa2V5LCBkZWZhdWx0dmFsKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICAgICAgZm9yIHBrZ2luZm8gaW4gcGtnaW5mb2xpc3Q6CisgICAgICAgICAgICBwbiA9IHBrZ2luZm9bJ1BOJ10KKyAgICAgICAgICAgIHB2ID0gcGtnaW5mb1snUFYnXQorICAgICAgICAgICAgcHIgPSBwa2dpbmZvWydQUiddCisgICAgICAgICAgICBwa2cgPSBwa2dpbmZvWydQS0cnXQorICAgICAgICAgICAgcGtndiA9IGdldHBrZ3ZhbHVlKHBrZ2luZm8sICdQS0dWJywgcGtnKQorICAgICAgICAgICAgcGtnciA9IGdldHBrZ3ZhbHVlKHBrZ2luZm8sICdQS0dSJywgcGtnKQorICAgICAgICAgICAgIyBQS0dTSVpFIGlzIGFydGlmaWNpYWwsIHdpbGwgYWx3YXlzIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgcGFja2FnZSBuYW1lIGlmIHByZXNlbnQKKyAgICAgICAgICAgIHBrZ3NpemUgPSBpbnQocGtnaW5mby5nZXQoJ1BLR1NJWkVfJXMnICUgcGtnLCAiMCIpKQorICAgICAgICAgICAgIyBQS0dfJXMgaXMgdGhlIHJlbmFtZWQgdmVyc2lvbgorICAgICAgICAgICAgcGtnX3JlbmFtZSA9IHBrZ2luZm8uZ2V0KCdQS0dfJXMnICUgcGtnLCAiIikKKyAgICAgICAgICAgICMgVGhlIHJlc3QgbWF5IGJlIG92ZXJyaWRkZW4gb3Igbm90CisgICAgICAgICAgICBzZWN0aW9uID0gZ2V0cGtndmFsdWUocGtnaW5mbywgJ1NFQ1RJT04nLCBwa2csICIiKQorICAgICAgICAgICAgc3VtbWFyeSA9IGdldHBrZ3ZhbHVlKHBrZ2luZm8sICdTVU1NQVJZJywgcGtnLCAiIikKKyAgICAgICAgICAgIHJkZXAgPSBnZXRwa2d2YWx1ZShwa2dpbmZvLCAnUkRFUEVORFMnLCBwa2csICIiKQorICAgICAgICAgICAgcnJlYyA9IGdldHBrZ3ZhbHVlKHBrZ2luZm8sICdSUkVDT01NRU5EUycsIHBrZywgIiIpCisgICAgICAgICAgICBycHJvdiA9IGdldHBrZ3ZhbHVlKHBrZ2luZm8sICdSUFJPVklERVMnLCBwa2csICIiKQorICAgICAgICAgICAgZmlsZXNfbGlzdCA9IGdldHBrZ3ZhbHVlKHBrZ2luZm8sICdGSUxFU19JTkZPJywgcGtnLCAiIikKKyAgICAgICAgICAgIGZvciBpIGluIHJwcm92LnNwbGl0KCk6CisgICAgICAgICAgICAgICAgc2VsZi5ycHJvdl9wa2dbaV0gPSBwa2cKKworICAgICAgICAgICAgcmVjaXBlID0gcG4gKyAnLScgKyBwdiArICctJyArIHByCisKKyAgICAgICAgICAgIGFsbG93X2VtcHR5ID0gZ2V0cGtndmFsdWUocGtnaW5mbywgJ0FMTE9XX0VNUFRZJywgcGtnLCAiIikKKworICAgICAgICAgICAgaWYgcGtnc2l6ZSA9PSAwIGFuZCBub3QgYWxsb3dfZW1wdHk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgc2l6ZSA9IEhvYlBhZ2UuX3NpemVfdG9fc3RyaW5nKHBrZ3NpemUpCisgICAgICAgICAgICBzZWxmLnNldChzZWxmLmFwcGVuZCgpLCBzZWxmLkNPTF9OQU1FLCBwa2csIHNlbGYuQ09MX1ZFUiwgcGtndiwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuQ09MX1JFViwgcGtnciwgc2VsZi5DT0xfUk5NLCBwa2dfcmVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5DT0xfU0VDLCBzZWN0aW9uLCBzZWxmLkNPTF9TVU0sIHN1bW1hcnksCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9SREVQLCByZGVwICsgJyAnICsgcnJlYywKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuQ09MX1JQUk9WLCBycHJvdiwgc2VsZi5DT0xfU0laRSwgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuQ09MX1JDUCwgcmVjaXBlLCBzZWxmLkNPTF9CSU5CLCAiIiwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuQ09MX0lOQywgRmFsc2UsIHNlbGYuQ09MX0ZPTlQsICcxMCcsIHNlbGYuQ09MX0ZMSVNULCBmaWxlc19saXN0KQorCisgICAgICAgIHNlbGYucG5fcGF0aCA9IHt9CisgICAgICAgIGl0ID0gc2VsZi5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgIHdoaWxlIGl0OgorICAgICAgICAgICAgcG4gPSBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfTkFNRSkKKyAgICAgICAgICAgIHBhdGggPSBzZWxmLmdldF9wYXRoKGl0KQorICAgICAgICAgICAgc2VsZi5wbl9wYXRoW3BuXSA9IHBhdGgKKyAgICAgICAgICAgIGl0ID0gc2VsZi5pdGVyX25leHQoaXQpCisKKyAgICAiIiIKKyAgICBVcGRhdGUgdGhlIG1vZGVsLCBzZW5kIG91dCB0aGUgbm90aWZpY2F0aW9uLgorICAgICIiIgorICAgIGRlZiBzZWxlY3Rpb25fY2hhbmdlX25vdGlmaWNhdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5lbWl0KCJwYWNrYWdlLXNlbGVjdGlvbi1jaGFuZ2VkIikKKworICAgICIiIgorICAgIENoZWNrIHdoZXRoZXIgdGhlIGl0ZW0gYXQgaXRlbV9wYXRoIGlzIGluY2x1ZGVkIG9yIG5vdAorICAgICIiIgorICAgIGRlZiBwYXRoX2luY2x1ZGVkKHNlbGYsIGl0ZW1fcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfSU5DXQorCisgICAgIiIiCisgICAgQWRkIHRoaXMgaXRlbSwgYW5kIGFueSBvZiBpdHMgZGVwZW5kZW5jaWVzLCB0byB0aGUgaW1hZ2UgY29udGVudHMKKyAgICAiIiIKKyAgICBkZWYgaW5jbHVkZV9pdGVtKHNlbGYsIGl0ZW1fcGF0aCwgYmluYj0iIik6CisgICAgICAgIGlmIHNlbGYucGF0aF9pbmNsdWRlZChpdGVtX3BhdGgpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaXRlbV9uYW1lID0gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX05BTUVdCisgICAgICAgIGl0ZW1fZGVwcyA9IHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9SREVQXQorCisgICAgICAgIHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9JTkNdID0gVHJ1ZQorCisgICAgICAgIGl0ZW1fYmluID0gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX0JJTkJdLnNwbGl0KCcsICcpCisgICAgICAgIGlmIGJpbmIgYW5kIG5vdCBiaW5iIGluIGl0ZW1fYmluOgorICAgICAgICAgICAgaXRlbV9iaW4uYXBwZW5kKGJpbmIpCisgICAgICAgICAgICBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfQklOQl0gPSAnLCAnLmpvaW4oaXRlbV9iaW4pLmxzdHJpcCgnLCAnKQorCisgICAgICAgIGlmIGl0ZW1fZGVwczoKKyAgICAgICAgICAgICMgRW5zdXJlIGFsbCBvZiB0aGUgaXRlbXMgZGVwcyBhcmUgaW5jbHVkZWQgYW5kLCB3aGVyZSBhcHByb3ByaWF0ZSwKKyAgICAgICAgICAgICMgYWRkIHRoaXMgaXRlbSB0byB0aGVpciBDT0xfQklOQgorICAgICAgICAgICAgZm9yIGRlcCBpbiBpdGVtX2RlcHMuc3BsaXQoIiAiKToKKyAgICAgICAgICAgICAgICBpZiBkZXAuc3RhcnRzd2l0aCgnKCcpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICMgSWYgdGhlIGNvbnRlbnRzIG1vZGVsIGRvZXNuJ3QgYWxyZWFkeSBjb250YWluIGRlcCwgYWRkIGl0CisgICAgICAgICAgICAgICAgZGVwX3BhdGggPSBzZWxmLmZpbmRfcGF0aF9mb3JfaXRlbShkZXApCisgICAgICAgICAgICAgICAgaWYgbm90IGRlcF9wYXRoOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGRlcF9pbmNsdWRlZCA9IHNlbGYucGF0aF9pbmNsdWRlZChkZXBfcGF0aCkKKworICAgICAgICAgICAgICAgIGlmIGRlcF9pbmNsdWRlZCBhbmQgbm90IGRlcCBpbiBpdGVtX2JpbjoKKyAgICAgICAgICAgICAgICAgICAgIyBkb24ndCBzZXQgdGhlIENPTF9CSU5CIHRvIHRoaXMgaXRlbSBpZiB0aGUgdGFyZ2V0IGlzIGFuCisgICAgICAgICAgICAgICAgICAgICMgaXRlbSBpbiBvdXIgb3duIENPTF9CSU5CCisgICAgICAgICAgICAgICAgICAgIGRlcF9iaW4gPSBzZWxmW2RlcF9wYXRoXVtzZWxmLkNPTF9CSU5CXS5zcGxpdCgnLCAnKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXRlbV9uYW1lIGluIGRlcF9iaW46CisgICAgICAgICAgICAgICAgICAgICAgICBkZXBfYmluLmFwcGVuZChpdGVtX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmW2RlcF9wYXRoXVtzZWxmLkNPTF9CSU5CXSA9ICcsICcuam9pbihkZXBfYmluKS5sc3RyaXAoJywgJykKKyAgICAgICAgICAgICAgICBlbGlmIG5vdCBkZXBfaW5jbHVkZWQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5jbHVkZV9pdGVtKGRlcF9wYXRoLCBiaW5iPWl0ZW1fbmFtZSkKKworICAgIGRlZiBleGNsdWRlX2l0ZW0oc2VsZiwgaXRlbV9wYXRoKToKKyAgICAgICAgaWYgbm90IHNlbGYucGF0aF9pbmNsdWRlZChpdGVtX3BhdGgpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX0lOQ10gPSBGYWxzZQorCisgICAgICAgIGl0ZW1fbmFtZSA9IHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9OQU1FXQorICAgICAgICBpdGVtX2RlcHMgPSBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfUkRFUF0KKyAgICAgICAgaWYgaXRlbV9kZXBzOgorICAgICAgICAgICAgZm9yIGRlcCBpbiBpdGVtX2RlcHMuc3BsaXQoIiAiKToKKyAgICAgICAgICAgICAgICBpZiBkZXAuc3RhcnRzd2l0aCgnKCcpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGRlcF9wYXRoID0gc2VsZi5maW5kX3BhdGhfZm9yX2l0ZW0oZGVwKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkZXBfcGF0aDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBkZXBfYmluID0gc2VsZltkZXBfcGF0aF1bc2VsZi5DT0xfQklOQl0uc3BsaXQoJywgJykKKyAgICAgICAgICAgICAgICBpZiBpdGVtX25hbWUgaW4gZGVwX2JpbjoKKyAgICAgICAgICAgICAgICAgICAgZGVwX2Jpbi5yZW1vdmUoaXRlbV9uYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmW2RlcF9wYXRoXVtzZWxmLkNPTF9CSU5CXSA9ICcsICcuam9pbihkZXBfYmluKS5sc3RyaXAoJywgJykKKworICAgICAgICBpdGVtX2JpbiA9IHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9CSU5CXS5zcGxpdCgnLCAnKQorICAgICAgICBpZiBpdGVtX2JpbjoKKyAgICAgICAgICAgIGZvciBiaW5iIGluIGl0ZW1fYmluOgorICAgICAgICAgICAgICAgIGJpbmJfcGF0aCA9IHNlbGYuZmluZF9wYXRoX2Zvcl9pdGVtKGJpbmIpCisgICAgICAgICAgICAgICAgaWYgbm90IGJpbmJfcGF0aDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzZWxmLmV4Y2x1ZGVfaXRlbShiaW5iX3BhdGgpCisKKyAgICAiIiIKKyAgICBFbXB0eSBzZWxmLmNvbnRlbnRzIGJ5IHNldHRpbmcgdGhlIGluY2x1ZGUgb2YgZWFjaCBlbnRyeSB0byBOb25lCisgICAgIiIiCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBpdCA9IHNlbGYuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIHNlbGYuc2V0KGl0LAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5DT0xfSU5DLCBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuQ09MX0JJTkIsICIiKQorICAgICAgICAgICAgaXQgPSBzZWxmLml0ZXJfbmV4dChpdCkKKworICAgICAgICBzZWxmLnNlbGVjdGlvbl9jaGFuZ2Vfbm90aWZpY2F0aW9uKCkKKworICAgIGRlZiBnZXRfc2VsZWN0ZWRfcGFja2FnZXMoc2VsZik6CisgICAgICAgIHBhY2thZ2VsaXN0ID0gW10KKworICAgICAgICBpdCA9IHNlbGYuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIGlmIHNlbGYuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9JTkMpOgorICAgICAgICAgICAgICAgIG5hbWUgPSBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfTkFNRSkKKyAgICAgICAgICAgICAgICBwYWNrYWdlbGlzdC5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgIGl0ID0gc2VsZi5pdGVyX25leHQoaXQpCisKKyAgICAgICAgcmV0dXJuIHBhY2thZ2VsaXN0CisKKyAgICBkZWYgZ2V0X3VzZXJfc2VsZWN0ZWRfcGFja2FnZXMoc2VsZik6CisgICAgICAgIHBhY2thZ2VsaXN0ID0gW10KKworICAgICAgICBpdCA9IHNlbGYuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIGlmIHNlbGYuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9JTkMpOgorICAgICAgICAgICAgICAgIGJpbmIgPSBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfQklOQikKKyAgICAgICAgICAgICAgICBpZiBiaW5iID09ICJVc2VyIFNlbGVjdGVkIjoKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHNlbGYuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9OQU1FKQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlbGlzdC5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgIGl0ID0gc2VsZi5pdGVyX25leHQoaXQpCisKKyAgICAgICAgcmV0dXJuIHBhY2thZ2VsaXN0CisKKyAgICBkZWYgZ2V0X3NlbGVjdGVkX3BhY2thZ2VzX3Rvb2xjaGFpbihzZWxmKToKKyAgICAgICAgcGFja2FnZWxpc3QgPSBbXQorCisgICAgICAgIGl0ID0gc2VsZi5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgIHdoaWxlIGl0OgorICAgICAgICAgICAgaWYgc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX0lOQyk6CisgICAgICAgICAgICAgICAgbmFtZSA9IHNlbGYuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9OQU1FKQorICAgICAgICAgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoIi1kZXYiKSBvciBuYW1lLmVuZHN3aXRoKCItZGJnIik6CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VsaXN0LmFwcGVuZChuYW1lKQorICAgICAgICAgICAgaXQgPSBzZWxmLml0ZXJfbmV4dChpdCkKKworICAgICAgICByZXR1cm4gbGlzdChzZXQocGFja2FnZWxpc3QgKyBzZWxmLl9fdG9vbGNoYWluX3JlcXVpcmVkX3BhY2thZ2VzX18pKTsKKworICAgICIiIgorICAgIFBhY2thZ2UgbW9kZWwgbWF5IGJlIGluY29tcGxldGUsIHRoZXJlZm9yZSB3aGVuIGNhbGxpbmcgdGhlCisgICAgc2V0X3NlbGVjdGVkX3BhY2thZ2VzKCksIHNvbWUgcGFja2FnZXMgd2lsbCBub3QgYmUgc2V0IGluY2x1ZGVkLgorICAgIFJldHVybiB0aGUgdW4tc2V0IHBhY2thZ2VzIGxpc3QuCisgICAgIiIiCisgICAgZGVmIHNldF9zZWxlY3RlZF9wYWNrYWdlcyhzZWxmLCBwYWNrYWdlbGlzdCwgdXNlcl9zZWxlY3RlZD1GYWxzZSk6CisgICAgICAgIGxlZnQgPSBbXQorICAgICAgICBiaW5iID0gJ1VzZXIgU2VsZWN0ZWQnIGlmIHVzZXJfc2VsZWN0ZWQgZWxzZSAnJworICAgICAgICBmb3IgcG4gaW4gcGFja2FnZWxpc3Q6CisgICAgICAgICAgICBpZiBwbiBpbiBzZWxmLnBuX3BhdGgua2V5cygpOgorICAgICAgICAgICAgICAgIHBhdGggPSBzZWxmLnBuX3BhdGhbcG5dCisgICAgICAgICAgICAgICAgc2VsZi5pbmNsdWRlX2l0ZW0oaXRlbV9wYXRoPXBhdGgsIGJpbmI9YmluYikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbGVmdC5hcHBlbmQocG4pCisKKyAgICAgICAgc2VsZi5zZWxlY3Rpb25fY2hhbmdlX25vdGlmaWNhdGlvbigpCisgICAgICAgIHJldHVybiBsZWZ0CisKKyAgICAiIiIKKyAgICBSZXR1cm4gdGhlIHNlbGVjdGVkIHBhY2thZ2Ugc2l6ZSwgdW5pdCBpcyBCLgorICAgICIiIgorICAgIGRlZiBnZXRfcGFja2FnZXNfc2l6ZShzZWxmKToKKyAgICAgICAgcGFja2FnZXNfc2l6ZSA9IDAKKyAgICAgICAgaXQgPSBzZWxmLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBpZiBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfSU5DKToKKyAgICAgICAgICAgICAgICBzdHJfc2l6ZSA9IHNlbGYuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9TSVpFKQorICAgICAgICAgICAgICAgIGlmIG5vdCBzdHJfc2l6ZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIHBhY2thZ2VzX3NpemUgKz0gSG9iUGFnZS5fc3RyaW5nX3RvX3NpemUoc3RyX3NpemUpCisKKyAgICAgICAgICAgIGl0ID0gc2VsZi5pdGVyX25leHQoaXQpCisgICAgICAgIHJldHVybiBwYWNrYWdlc19zaXplCisKKyAgICAiIiIKKyAgICBSZXN5bmMgdGhlIHN0YXRlIG9mIGluY2x1ZGVkIGl0ZW1zIHRvIGEgYmFja3VwIGNvbHVtbiBiZWZvcmUgcGVyZm9ybWluZyB0aGUgZmFkZW91dCB2aXNpYmxlIGVmZmVjdAorICAgICIiIgorICAgIGRlZiByZXN5bmNfZmFkZW91dF9jb2x1bW4oc2VsZiwgbW9kZWxfZmlyc3RfaXRlcj1Ob25lKToKKyAgICAgICAgaXQgPSBtb2RlbF9maXJzdF9pdGVyCisgICAgICAgIHdoaWxlIGl0OgorICAgICAgICAgICAgYWN0aXZlID0gc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX0lOQykKKyAgICAgICAgICAgIHNlbGYuc2V0KGl0LCBzZWxmLkNPTF9GQURFX0lOQywgYWN0aXZlKQorICAgICAgICAgICAgaXQgPSBzZWxmLml0ZXJfbmV4dChpdCkKKworIworIyBSZWNpcGVMaXN0TW9kZWwKKyMKK2NsYXNzIFJlY2lwZUxpc3RNb2RlbChndGsuTGlzdFN0b3JlKToKKyAgICAiIiIKKyAgICBUaGlzIGNsYXNzIGRlZmluZXMgYW4gZ3RrLkxpc3RTdG9yZSBzdWJjbGFzcyB3aGljaCB3aWxsIGNvbnZlcnQgdGhlIG91dHB1dAorICAgIG9mIHRoZSBiYi5ldmVudC5UYXJnZXRzVHJlZUdlbmVyYXRlZCBldmVudCBpbnRvIGEgZ3RrLkxpc3RTdG9yZSB3aGlsc3QgYWxzbworICAgIHByb3ZpZGluZyBjb252ZW5pZW5jZSBmdW5jdGlvbnMgdG8gYWNjZXNzIGd0ay5UcmVlTW9kZWwgc3ViY2xhc3NlcyB3aGljaAorICAgIHByb3ZpZGUgZmlsdGVyZWQgdmlld3Mgb2YgdGhlIGRhdGEuCisgICAgIiIiCisgICAgKENPTF9OQU1FLCBDT0xfREVTQywgQ09MX0xJQywgQ09MX0dST1VQLCBDT0xfREVQUywgQ09MX0JJTkIsIENPTF9UWVBFLCBDT0xfSU5DLCBDT0xfSU1HLCBDT0xfSU5TVEFMTCwgQ09MX1BOLCBDT0xfRkFERV9JTkMsIENPTF9TVU1NQVJZLCBDT0xfVkVSU0lPTiwKKyAgICAgQ09MX1JFVklTSU9OLCBDT0xfSE9NRVBBR0UsIENPTF9CVUdUUkFDS0VSLCBDT0xfRklMRSkgPSByYW5nZSgxOCkKKworICAgIF9fY3VzdG9tX2ltYWdlX18gPSAiU3RhcnQgd2l0aCBhbiBlbXB0eSBpbWFnZSByZWNpcGUiCisKKyAgICBfX2dzaWduYWxzX18gPSB7CisgICAgICAgICJyZWNpcGUtc2VsZWN0aW9uLWNoYW5nZWQiIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICB9CisKKyAgICAiIiIKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGd0ay5MaXN0U3RvcmUuX19pbml0X18gKHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9CT09MRUFOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfQk9PTEVBTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX0JPT0xFQU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcpCisgICAgICAgIHNlbGYuc29ydF9jb2x1bW5faWQsIHNlbGYuc29ydF9vcmRlciA9IFJlY2lwZUxpc3RNb2RlbC5DT0xfTkFNRSwgZ3RrLlNPUlRfQVNDRU5ESU5HCisKKyAgICAiIiIKKyAgICBGaW5kIHRoZSBtb2RlbCBwYXRoIGZvciB0aGUgaXRlbV9uYW1lCisgICAgUmV0dXJucyB0aGUgcGF0aCBpbiB0aGUgbW9kZWwgb3IgTm9uZQorICAgICIiIgorICAgIGRlZiBmaW5kX3BhdGhfZm9yX2l0ZW0oc2VsZiwgaXRlbV9uYW1lKToKKyAgICAgICAgaWYgc2VsZi5ub25fdGFyZ2V0X25hbWUoaXRlbV9uYW1lKSBvciBpdGVtX25hbWUgbm90IGluIHNlbGYucG5fcGF0aC5rZXlzKCk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucG5fcGF0aFtpdGVtX25hbWVdCisKKyAgICBkZWYgZmluZF9pdGVtX2Zvcl9wYXRoKHNlbGYsIGl0ZW1fcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfTkFNRV0KKworICAgICIiIgorICAgIEhlbHBlciBtZXRob2QgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgbmFtZSBpcyBhIHRhcmdldCBwbgorICAgICIiIgorICAgIGRlZiBub25fdGFyZ2V0X25hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgIGlmIG5hbWUgYW5kICgnLW5hdGl2ZScgaW4gbmFtZSk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICIiIgorICAgIEhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBpdGVtIGlzIGFuIGl0ZW0gc3BlY2lmaWVkIGJ5IGZpbHRlcgorICAgICIiIgorICAgIGRlZiB0cmVlX21vZGVsX2ZpbHRlcihzZWxmLCBtb2RlbCwgaXQsIGZpbHRlcik6CisgICAgICAgIG5hbWUgPSBtb2RlbC5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX05BTUUpCisgICAgICAgIGlmIHNlbGYubm9uX3RhcmdldF9uYW1lKG5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgZm9yIGtleSBpbiBmaWx0ZXIua2V5cygpOgorICAgICAgICAgICAgaWYga2V5ID09IHNlbGYuQ09MX05BTUU6CisgICAgICAgICAgICAgICAgaWYgZmlsdGVyW2tleV0gIT0gJ1NlYXJjaCByZWNpcGVzIGJ5IG5hbWUnIGFuZCBmaWx0ZXJba2V5XSAhPSAnU2VhcmNoIHBhY2thZ2UgZ3JvdXBzIGJ5IG5hbWUnOgorICAgICAgICAgICAgICAgICAgICBpZiBmaWx0ZXJba2V5XSBub3QgaW4gbmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBtb2RlbC5nZXRfdmFsdWUoaXQsIGtleSkgbm90IGluIGZpbHRlcltrZXldOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgc2VsZi5maWx0ZXJlZF9uYiArPSAxCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBleGNsdWRlX2l0ZW1fc29ydF9mdW5jKHNlbGYsIG1vZGVsLCBpdGVyMSwgaXRlcjIsIHVzZXJfZGF0YT1Ob25lKToKKyAgICAgICAgaWYgdXNlcl9kYXRhOgorICAgICAgICAgICAgdmFsMSA9IG1vZGVsLmdldF92YWx1ZShpdGVyMSwgUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgdmFsMiA9IG1vZGVsLmdldF92YWx1ZShpdGVyMiwgUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY21wX3ZhbHModmFsMSwgdmFsMiwgdXNlcl9kYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmFsMSA9IG1vZGVsLmdldF92YWx1ZShpdGVyMSwgUmVjaXBlTGlzdE1vZGVsLkNPTF9GQURFX0lOQykKKyAgICAgICAgICAgIHZhbDIgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjIsIFJlY2lwZUxpc3RNb2RlbC5DT0xfSU5DKQorICAgICAgICAgICAgcmV0dXJuICgodmFsMSA9PSBUcnVlKSBhbmQgKHZhbDIgPT0gRmFsc2UpKQorCisgICAgZGVmIGluY2x1ZGVfaXRlbV9zb3J0X2Z1bmMoc2VsZiwgbW9kZWwsIGl0ZXIxLCBpdGVyMiwgdXNlcl9kYXRhPU5vbmUpOgorICAgICAgICBpZiB1c2VyX2RhdGE6CisgICAgICAgICAgICB2YWwxID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIxLCBSZWNpcGVMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgICAgICB2YWwyID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIyLCBSZWNpcGVMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5jbXBfdmFscyh2YWwxLCB2YWwyLCB1c2VyX2RhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB2YWwxID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIxLCBSZWNpcGVMaXN0TW9kZWwuQ09MX0lOQykKKyAgICAgICAgICAgIHZhbDIgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjIsIFJlY2lwZUxpc3RNb2RlbC5DT0xfSU5DKQorICAgICAgICAgICAgcmV0dXJuICgodmFsMSA9PSBGYWxzZSkgYW5kICh2YWwyID09IFRydWUpKQorCisgICAgZGVmIHNvcnRfZnVuYyhzZWxmLCBtb2RlbCwgaXRlcjEsIGl0ZXIyLCB1c2VyX2RhdGEpOgorICAgICAgICB2YWwxID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIxLCBSZWNpcGVMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgIHZhbDIgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjIsIFJlY2lwZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgcmV0dXJuIHNlbGYuY21wX3ZhbHModmFsMSwgdmFsMiwgdXNlcl9kYXRhKQorCisgICAgZGVmIGNtcF92YWxzKHNlbGYsIHZhbDEsIHZhbDIsIHVzZXJfZGF0YSk6CisgICAgICAgIGlmIHZhbDEgaXMgTm9uZSBvciB2YWwyIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBlbGlmIHZhbDEuc3RhcnRzd2l0aCh1c2VyX2RhdGEpIGFuZCBub3QgdmFsMi5zdGFydHN3aXRoKHVzZXJfZGF0YSk6CisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgZWxpZiBub3QgdmFsMS5zdGFydHN3aXRoKHVzZXJfZGF0YSkgYW5kIHZhbDIuc3RhcnRzd2l0aCh1c2VyX2RhdGEpOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBjbXAodmFsMSwgdmFsMikKKworICAgICIiIgorICAgIENyZWF0ZSwgaWYgcmVxdWlyZWQsIGFuZCByZXR1cm4gYSBmaWx0ZXJlZCBndGsuVHJlZU1vZGVsU29ydAorICAgIGNvbnRhaW5pbmcgb25seSB0aGUgaXRlbXMgc3BlY2lmaWVkIGJ5IGZpbHRlcgorICAgICIiIgorICAgIGRlZiB0cmVlX21vZGVsKHNlbGYsIGZpbHRlciwgZXhjbHVkZWRfaXRlbXNfYWhlYWQ9RmFsc2UsIGluY2x1ZGVkX2l0ZW1zX2FoZWFkPUZhbHNlLCBzZWFyY2hfZGF0YT1Ob25lLCBpbml0aWFsPUZhbHNlKToKKyAgICAgICAgbW9kZWwgPSBzZWxmLmZpbHRlcl9uZXcoKQorICAgICAgICBzZWxmLmZpbHRlcmVkX25iID0gMAorICAgICAgICBtb2RlbC5zZXRfdmlzaWJsZV9mdW5jKHNlbGYudHJlZV9tb2RlbF9maWx0ZXIsIGZpbHRlcikKKworICAgICAgICBzb3J0ID0gZ3RrLlRyZWVNb2RlbFNvcnQobW9kZWwpCisgICAgICAgIHNvcnQuY29ubmVjdCAoJ3NvcnQtY29sdW1uLWNoYW5nZWQnLCBzZWxmLnNvcnRfY29sdW1uX2NoYW5nZWRfY2IpCisgICAgICAgIGlmIGluaXRpYWw6CisgICAgICAgICAgICBzb3J0LnNldF9zb3J0X2NvbHVtbl9pZChSZWNpcGVMaXN0TW9kZWwuQ09MX05BTUUsIGd0ay5TT1JUX0FTQ0VORElORykKKyAgICAgICAgICAgIHNvcnQuc2V0X2RlZmF1bHRfc29ydF9mdW5jKE5vbmUpCisgICAgICAgIGVsaWYgZXhjbHVkZWRfaXRlbXNfYWhlYWQ6CisgICAgICAgICAgICBzb3J0LnNldF9kZWZhdWx0X3NvcnRfZnVuYyhzZWxmLmV4Y2x1ZGVfaXRlbV9zb3J0X2Z1bmMsIHNlYXJjaF9kYXRhKQorICAgICAgICBlbGlmIGluY2x1ZGVkX2l0ZW1zX2FoZWFkOgorICAgICAgICAgICAgc29ydC5zZXRfZGVmYXVsdF9zb3J0X2Z1bmMoc2VsZi5pbmNsdWRlX2l0ZW1fc29ydF9mdW5jLCBzZWFyY2hfZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNlYXJjaF9kYXRhIGFuZCBzZWFyY2hfZGF0YSE9J1NlYXJjaCByZWNpcGVzIGJ5IG5hbWUnIGFuZCBzZWFyY2hfZGF0YSE9J1NlYXJjaCBwYWNrYWdlIGdyb3VwcyBieSBuYW1lJzoKKyAgICAgICAgICAgICAgICBzb3J0LnNldF9kZWZhdWx0X3NvcnRfZnVuYyhzZWxmLnNvcnRfZnVuYywgc2VhcmNoX2RhdGEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNvcnQuc2V0X3NvcnRfY29sdW1uX2lkKHNlbGYuc29ydF9jb2x1bW5faWQsIHNlbGYuc29ydF9vcmRlcikKKyAgICAgICAgICAgICAgICBzb3J0LnNldF9kZWZhdWx0X3NvcnRfZnVuYyhOb25lKQorCisgICAgICAgIHNvcnQuc2V0X3NvcnRfZnVuYyhSZWNpcGVMaXN0TW9kZWwuQ09MX0lOQywgc2VsZi5zb3J0X2NvbHVtbiwgUmVjaXBlTGlzdE1vZGVsLkNPTF9JTkMpCisgICAgICAgIHNvcnQuc2V0X3NvcnRfZnVuYyhSZWNpcGVMaXN0TW9kZWwuQ09MX0dST1VQLCBzZWxmLnNvcnRfY29sdW1uLCBSZWNpcGVMaXN0TW9kZWwuQ09MX0dST1VQKQorICAgICAgICBzb3J0LnNldF9zb3J0X2Z1bmMoUmVjaXBlTGlzdE1vZGVsLkNPTF9CSU5CLCBzZWxmLnNvcnRfYmluYl9jb2x1bW4pCisgICAgICAgIHNvcnQuc2V0X3NvcnRfZnVuYyhSZWNpcGVMaXN0TW9kZWwuQ09MX0xJQywgc2VsZi5zb3J0X2NvbHVtbiwgUmVjaXBlTGlzdE1vZGVsLkNPTF9MSUMpCisgICAgICAgIHJldHVybiBzb3J0CisKKyAgICBkZWYgc29ydF9jb2x1bW5fY2hhbmdlZF9jYiAoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuc29ydF9jb2x1bW5faWQsIHNlbGYuc29ydF9vcmRlciA9IGRhdGEuZ2V0X3NvcnRfY29sdW1uX2lkICgpCisKKyAgICBkZWYgc29ydF9jb2x1bW4oc2VsZiwgbW9kZWwsIHJvdzEsIHJvdzIsIGNvbCk6CisgICAgICAgIHZhbHVlMSA9IG1vZGVsLmdldF92YWx1ZShyb3cxLCBjb2wpCisgICAgICAgIHZhbHVlMiA9IG1vZGVsLmdldF92YWx1ZShyb3cyLCBjb2wpCisgICAgICAgIGNtcF9yZXMgPSBjbXAodmFsdWUxLCB2YWx1ZTIpCisgICAgICAgIGlmIGNtcF9yZXMhPTA6CisgICAgICAgICAgICBpZiBjb2w9PVJlY2lwZUxpc3RNb2RlbC5DT0xfSU5DOgorICAgICAgICAgICAgICAgIHJldHVybiAtY21wX3JlcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY21wX3JlcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmFtZTEgPSBtb2RlbC5nZXRfdmFsdWUocm93MSwgUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgbmFtZTIgPSBtb2RlbC5nZXRfdmFsdWUocm93MiwgUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgcmV0dXJuIGNtcChuYW1lMSxuYW1lMikKKworICAgIGRlZiBzb3J0X2JpbmJfY29sdW1uKHNlbGYsIG1vZGVsLCByb3cxLCByb3cyKToKKyAgICAgICAgdmFsdWUxID0gbW9kZWwuZ2V0X3ZhbHVlKHJvdzEsIFJlY2lwZUxpc3RNb2RlbC5DT0xfQklOQikKKyAgICAgICAgdmFsdWUyID0gbW9kZWwuZ2V0X3ZhbHVlKHJvdzIsIFJlY2lwZUxpc3RNb2RlbC5DT0xfQklOQikKKyAgICAgICAgdmFsdWUxX2xpc3QgPSB2YWx1ZTEuc3BsaXQoJywgJykKKyAgICAgICAgdmFsdWUyX2xpc3QgPSB2YWx1ZTIuc3BsaXQoJywgJykKKworICAgICAgICB2YWx1ZTEgPSB2YWx1ZTFfbGlzdFswXQorICAgICAgICB2YWx1ZTIgPSB2YWx1ZTJfbGlzdFswXQorCisgICAgICAgIGNtcF9yZXMgPSBjbXAodmFsdWUxLCB2YWx1ZTIpCisgICAgICAgIGlmIGNtcF9yZXM9PTA6CisgICAgICAgICAgICBjbXBfc2l6ZSA9IGNtcChsZW4odmFsdWUxX2xpc3QpLCBsZW4odmFsdWUyX2xpc3QpKQorICAgICAgICAgICAgaWYgY21wX3NpemU9PTA6CisgICAgICAgICAgICAgICAgbmFtZTEgPSBtb2RlbC5nZXRfdmFsdWUocm93MSwgUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgICAgIG5hbWUyID0gbW9kZWwuZ2V0X3ZhbHVlKHJvdzIsIFJlY2lwZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY21wKG5hbWUxLG5hbWUyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY21wX3NpemUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBjbXBfcmVzCisKKyAgICBkZWYgY29udmVydF92cGF0aF90b19wYXRoKHNlbGYsIHZpZXdfbW9kZWwsIHZpZXdfcGF0aCk6CisgICAgICAgIGZpbHRlcmVkX21vZGVsX3BhdGggPSB2aWV3X21vZGVsLmNvbnZlcnRfcGF0aF90b19jaGlsZF9wYXRoKHZpZXdfcGF0aCkKKyAgICAgICAgZmlsdGVyZWRfbW9kZWwgPSB2aWV3X21vZGVsLmdldF9tb2RlbCgpCisKKyAgICAgICAgIyBnZXQgdGhlIHBhdGggb2YgdGhlIG9yaWdpbmFsIG1vZGVsCisgICAgICAgIHBhdGggPSBmaWx0ZXJlZF9tb2RlbC5jb252ZXJ0X3BhdGhfdG9fY2hpbGRfcGF0aChmaWx0ZXJlZF9tb2RlbF9wYXRoKQorICAgICAgICByZXR1cm4gcGF0aAorCisgICAgZGVmIGNvbnZlcnRfcGF0aF90b192cGF0aChzZWxmLCB2aWV3X21vZGVsLCBwYXRoKToKKyAgICAgICAgaXQgPSB2aWV3X21vZGVsLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBuYW1lID0gc2VsZi5maW5kX2l0ZW1fZm9yX3BhdGgocGF0aCkKKyAgICAgICAgICAgIHZpZXdfbmFtZSA9IHZpZXdfbW9kZWwuZ2V0X3ZhbHVlKGl0LCBSZWNpcGVMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgICAgICBpZiB2aWV3X25hbWUgPT0gbmFtZToKKyAgICAgICAgICAgICAgICB2aWV3X3BhdGggPSB2aWV3X21vZGVsLmdldF9wYXRoKGl0KQorICAgICAgICAgICAgICAgIHJldHVybiB2aWV3X3BhdGgKKyAgICAgICAgICAgIGl0ID0gdmlld19tb2RlbC5pdGVyX25leHQoaXQpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICAiIiIKKyAgICBUaGUgcG9wdWxhdGUoKSBmdW5jdGlvbiB0YWtlcyBhcyBpbnB1dCB0aGUgZGF0YSBmcm9tIGEKKyAgICBiYi5ldmVudC5UYXJnZXRzVHJlZUdlbmVyYXRlZCBldmVudCBhbmQgcG9wdWxhdGVzIHRoZSBSZWNpcGVMaXN0LgorICAgICIiIgorICAgIGRlZiBwb3B1bGF0ZShzZWxmLCBldmVudF9tb2RlbCk6CisgICAgICAgICMgRmlyc3QgY2xlYXIgdGhlIG1vZGVsLCBpbiBjYXNlIHJlcG9wdWxhdGluZworICAgICAgICBzZWxmLmNsZWFyKCkKKworICAgICAgICAjIGR1bW15IGltYWdlIGZvciBwcm9tcHQKKyAgICAgICAgc2VsZi5zZXRfaW5fbGlzdChzZWxmLl9fY3VzdG9tX2ltYWdlX18sICAiVXNlICdFZGl0IGltYWdlIHJlY2lwZScgdG8gY3VzdG9taXplIHJlY2lwZXMgYW5kIHBhY2thZ2VzICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG8gYmUgaW5jbHVkZWQgaW4geW91ciBpbWFnZSAiKQorCisgICAgICAgIGZvciBpdGVtIGluIGV2ZW50X21vZGVsWyJwbiJdOgorICAgICAgICAgICAgbmFtZSA9IGl0ZW0KKyAgICAgICAgICAgIGRlc2MgPSBldmVudF9tb2RlbFsicG4iXVtpdGVtXVsiZGVzY3JpcHRpb24iXQorICAgICAgICAgICAgbGljID0gZXZlbnRfbW9kZWxbInBuIl1baXRlbV1bImxpY2Vuc2UiXQorICAgICAgICAgICAgZ3JvdXAgPSBldmVudF9tb2RlbFsicG4iXVtpdGVtXVsic2VjdGlvbiJdCisgICAgICAgICAgICBpbmhlcml0cyA9IGV2ZW50X21vZGVsWyJwbiJdW2l0ZW1dWyJpbmhlcml0cyJdCisgICAgICAgICAgICBzdW1tYXJ5ID0gZXZlbnRfbW9kZWxbInBuIl1baXRlbV1bInN1bW1hcnkiXQorICAgICAgICAgICAgdmVyc2lvbiA9IGV2ZW50X21vZGVsWyJwbiJdW2l0ZW1dWyJ2ZXJzaW9uIl0KKyAgICAgICAgICAgIHJldmlzaW9uID0gZXZlbnRfbW9kZWxbInBuIl1baXRlbV1bInByZXZpc2lvbiJdCisgICAgICAgICAgICBob21lcGFnZSA9IGV2ZW50X21vZGVsWyJwbiJdW2l0ZW1dWyJob21lcGFnZSJdCisgICAgICAgICAgICBidWd0cmFja2VyID0gZXZlbnRfbW9kZWxbInBuIl1baXRlbV1bImJ1Z3RyYWNrZXIiXQorICAgICAgICAgICAgZmlsZW5hbWUgPSBldmVudF9tb2RlbFsicG4iXVtpdGVtXVsiZmlsZW5hbWUiXQorICAgICAgICAgICAgaW5zdGFsbCA9IFtdCisKKyAgICAgICAgICAgIGRlcGVuZHMgPSBldmVudF9tb2RlbFsiZGVwZW5kcyJdLmdldChpdGVtLCBbXSkgKyBldmVudF9tb2RlbFsicmRlcGVuZHMtcG4iXS5nZXQoaXRlbSwgW10pCisKKyAgICAgICAgICAgIGlmICgncGFja2FnZWdyb3VwLmJiY2xhc3MnIGluICIgIi5qb2luKGluaGVyaXRzKSk6CisgICAgICAgICAgICAgICAgYXR5cGUgPSAncGFja2FnZWdyb3VwJworICAgICAgICAgICAgZWxpZiAoJy9pbWFnZS5iYmNsYXNzJyBpbiAiICIuam9pbihpbmhlcml0cykpOgorICAgICAgICAgICAgICAgIGlmICJlZGl0ZWQiIG5vdCBpbiBuYW1lOgorICAgICAgICAgICAgICAgICAgICBhdHlwZSA9ICdpbWFnZScKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCA9IGV2ZW50X21vZGVsWyJyZGVwZW5kcy1wa2ciXS5nZXQoaXRlbSwgW10pICsgZXZlbnRfbW9kZWxbInJyZWNzLXBrZyJdLmdldChpdGVtLCBbXSkKKyAgICAgICAgICAgIGVsaWYgKCdtZXRhLScgaW4gbmFtZSk6CisgICAgICAgICAgICAgICAgYXR5cGUgPSAndG9vbGNoYWluJworICAgICAgICAgICAgZWxpZiAobmFtZSA9PSAnZHVtbXktaW1hZ2UnIG9yIG5hbWUgPT0gJ2R1bW15LXRvb2xjaGFpbicpOgorICAgICAgICAgICAgICAgIGF0eXBlID0gJ2R1bW15JworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhdHlwZSA9ICdyZWNpcGUnCisKKyAgICAgICAgICAgIHNlbGYuc2V0KHNlbGYuYXBwZW5kKCksIHNlbGYuQ09MX05BTUUsIGl0ZW0sIHNlbGYuQ09MX0RFU0MsIGRlc2MsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9MSUMsIGxpYywgc2VsZi5DT0xfR1JPVVAsIGdyb3VwLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5DT0xfREVQUywgIiAiLmpvaW4oZGVwZW5kcyksIHNlbGYuQ09MX0JJTkIsICIiLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5DT0xfVFlQRSwgYXR5cGUsIHNlbGYuQ09MX0lOQywgRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9JTUcsIEZhbHNlLCBzZWxmLkNPTF9JTlNUQUxMLCAiICIuam9pbihpbnN0YWxsKSwgc2VsZi5DT0xfUE4sIGl0ZW0sCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9TVU1NQVJZLCBzdW1tYXJ5LCBzZWxmLkNPTF9WRVJTSU9OLCB2ZXJzaW9uLCBzZWxmLkNPTF9SRVZJU0lPTiwgcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9IT01FUEFHRSwgaG9tZXBhZ2UsIHNlbGYuQ09MX0JVR1RSQUNLRVIsIGJ1Z3RyYWNrZXIsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9GSUxFLCBmaWxlbmFtZSkKKworICAgICAgICBzZWxmLnBuX3BhdGggPSB7fQorICAgICAgICBpdCA9IHNlbGYuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIHBuID0gc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX05BTUUpCisgICAgICAgICAgICBwYXRoID0gc2VsZi5nZXRfcGF0aChpdCkKKyAgICAgICAgICAgIHNlbGYucG5fcGF0aFtwbl0gPSBwYXRoCisgICAgICAgICAgICBpdCA9IHNlbGYuaXRlcl9uZXh0KGl0KQorCisgICAgZGVmIHNldF9pbl9saXN0KHNlbGYsIGl0ZW0sIGRlc2MpOgorICAgICAgICBzZWxmLnNldChzZWxmLmFwcGVuZCgpLCBzZWxmLkNPTF9OQU1FLCBpdGVtLAorICAgICAgICAgICAgICAgICBzZWxmLkNPTF9ERVNDLCBkZXNjLAorICAgICAgICAgICAgICAgICBzZWxmLkNPTF9MSUMsICIiLCBzZWxmLkNPTF9HUk9VUCwgIiIsCisgICAgICAgICAgICAgICAgIHNlbGYuQ09MX0RFUFMsICIiLCBzZWxmLkNPTF9CSU5CLCAiIiwKKyAgICAgICAgICAgICAgICAgc2VsZi5DT0xfVFlQRSwgImltYWdlIiwgc2VsZi5DT0xfSU5DLCBGYWxzZSwKKyAgICAgICAgICAgICAgICAgc2VsZi5DT0xfSU1HLCBGYWxzZSwgc2VsZi5DT0xfSU5TVEFMTCwgIiIsIHNlbGYuQ09MX1BOLCBpdGVtLAorICAgICAgICAgICAgICAgICBzZWxmLkNPTF9TVU1NQVJZLCAiIiwgc2VsZi5DT0xfVkVSU0lPTiwgIiIsIHNlbGYuQ09MX1JFVklTSU9OLCAiIiwKKyAgICAgICAgICAgICAgICAgc2VsZi5DT0xfSE9NRVBBR0UsICIiLCBzZWxmLkNPTF9CVUdUUkFDS0VSLCAiIikKKyAgICAgICAgc2VsZi5wbl9wYXRoID0ge30KKyAgICAgICAgaXQgPSBzZWxmLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBwbiA9IHNlbGYuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9OQU1FKQorICAgICAgICAgICAgcGF0aCA9IHNlbGYuZ2V0X3BhdGgoaXQpCisgICAgICAgICAgICBzZWxmLnBuX3BhdGhbcG5dID0gcGF0aAorICAgICAgICAgICAgaXQgPSBzZWxmLml0ZXJfbmV4dChpdCkKKworICAgICIiIgorICAgIFVwZGF0ZSB0aGUgbW9kZWwsIHNlbmQgb3V0IHRoZSBub3RpZmljYXRpb24uCisgICAgIiIiCisgICAgZGVmIHNlbGVjdGlvbl9jaGFuZ2Vfbm90aWZpY2F0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmVtaXQoInJlY2lwZS1zZWxlY3Rpb24tY2hhbmdlZCIpCisKKyAgICBkZWYgcGF0aF9pbmNsdWRlZChzZWxmLCBpdGVtX3BhdGgpOgorICAgICAgICByZXR1cm4gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX0lOQ10KKworICAgICIiIgorICAgIEFkZCB0aGlzIGl0ZW0sIGFuZCBhbnkgb2YgaXRzIGRlcGVuZGVuY2llcywgdG8gdGhlIGltYWdlIGNvbnRlbnRzCisgICAgIiIiCisgICAgZGVmIGluY2x1ZGVfaXRlbShzZWxmLCBpdGVtX3BhdGgsIGJpbmI9IiIsIGltYWdlX2NvbnRlbnRzPUZhbHNlKToKKyAgICAgICAgaWYgc2VsZi5wYXRoX2luY2x1ZGVkKGl0ZW1fcGF0aCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpdGVtX25hbWUgPSBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfTkFNRV0KKyAgICAgICAgaXRlbV9kZXBzID0gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX0RFUFNdCisKKyAgICAgICAgc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX0lOQ10gPSBUcnVlCisKKyAgICAgICAgaXRlbV9iaW4gPSBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfQklOQl0uc3BsaXQoJywgJykKKyAgICAgICAgaWYgYmluYiBhbmQgbm90IGJpbmIgaW4gaXRlbV9iaW46CisgICAgICAgICAgICBpdGVtX2Jpbi5hcHBlbmQoYmluYikKKyAgICAgICAgICAgIHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9CSU5CXSA9ICcsICcuam9pbihpdGVtX2JpbikubHN0cmlwKCcsICcpCisKKyAgICAgICAgIyBXZSB3YW50IHRvIGRvIHNvbWUgbWFnaWMgd2l0aCB0aGluZ3Mgd2hpY2ggYXJlIGJyb3VnaHQgaW4gYnkgdGhlCisgICAgICAgICMgYmFzZSBpbWFnZSBzbyB0YWcgdGhlbSBhcyBzbworICAgICAgICBpZiBpbWFnZV9jb250ZW50czoKKyAgICAgICAgICAgIHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9JTUddID0gVHJ1ZQorCisgICAgICAgIGlmIGl0ZW1fZGVwczoKKyAgICAgICAgICAgICMgRW5zdXJlIGFsbCBvZiB0aGUgaXRlbXMgZGVwcyBhcmUgaW5jbHVkZWQgYW5kLCB3aGVyZSBhcHByb3ByaWF0ZSwKKyAgICAgICAgICAgICMgYWRkIHRoaXMgaXRlbSB0byB0aGVpciBDT0xfQklOQgorICAgICAgICAgICAgZm9yIGRlcCBpbiBpdGVtX2RlcHMuc3BsaXQoIiAiKToKKyAgICAgICAgICAgICAgICAjIElmIHRoZSBjb250ZW50cyBtb2RlbCBkb2Vzbid0IGFscmVhZHkgY29udGFpbiBkZXAsIGFkZCBpdAorICAgICAgICAgICAgICAgIGRlcF9wYXRoID0gc2VsZi5maW5kX3BhdGhfZm9yX2l0ZW0oZGVwKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkZXBfcGF0aDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBkZXBfaW5jbHVkZWQgPSBzZWxmLnBhdGhfaW5jbHVkZWQoZGVwX3BhdGgpCisKKyAgICAgICAgICAgICAgICBpZiBkZXBfaW5jbHVkZWQgYW5kIG5vdCBkZXAgaW4gaXRlbV9iaW46CisgICAgICAgICAgICAgICAgICAgICMgZG9uJ3Qgc2V0IHRoZSBDT0xfQklOQiB0byB0aGlzIGl0ZW0gaWYgdGhlIHRhcmdldCBpcyBhbgorICAgICAgICAgICAgICAgICAgICAjIGl0ZW0gaW4gb3VyIG93biBDT0xfQklOQgorICAgICAgICAgICAgICAgICAgICBkZXBfYmluID0gc2VsZltkZXBfcGF0aF1bc2VsZi5DT0xfQklOQl0uc3BsaXQoJywgJykKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGl0ZW1fbmFtZSBpbiBkZXBfYmluOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwX2Jpbi5hcHBlbmQoaXRlbV9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZltkZXBfcGF0aF1bc2VsZi5DT0xfQklOQl0gPSAnLCAnLmpvaW4oZGVwX2JpbikubHN0cmlwKCcsICcpCisgICAgICAgICAgICAgICAgZWxpZiBub3QgZGVwX2luY2x1ZGVkOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmluY2x1ZGVfaXRlbShkZXBfcGF0aCwgYmluYj1pdGVtX25hbWUsIGltYWdlX2NvbnRlbnRzPWltYWdlX2NvbnRlbnRzKQorICAgICAgICBkZXBfYmluID0gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX0JJTkJdLnNwbGl0KCcsICcpCisgICAgICAgIGlmIHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9OQU1FXSBpbiBkZXBfYmluOgorICAgICAgICAgICAgZGVwX2Jpbi5yZW1vdmUoc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX05BTUVdKQorICAgICAgICBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfQklOQl0gPSAnLCAnLmpvaW4oZGVwX2JpbikubHN0cmlwKCcsICcpCisKKyAgICBkZWYgZXhjbHVkZV9pdGVtKHNlbGYsIGl0ZW1fcGF0aCk6CisgICAgICAgIGlmIG5vdCBzZWxmLnBhdGhfaW5jbHVkZWQoaXRlbV9wYXRoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9JTkNdID0gRmFsc2UKKworICAgICAgICBpdGVtX25hbWUgPSBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfTkFNRV0KKyAgICAgICAgaXRlbV9kZXBzID0gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX0RFUFNdCisgICAgICAgIGlmIGl0ZW1fZGVwczoKKyAgICAgICAgICAgIGZvciBkZXAgaW4gaXRlbV9kZXBzLnNwbGl0KCIgIik6CisgICAgICAgICAgICAgICAgZGVwX3BhdGggPSBzZWxmLmZpbmRfcGF0aF9mb3JfaXRlbShkZXApCisgICAgICAgICAgICAgICAgaWYgbm90IGRlcF9wYXRoOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGRlcF9iaW4gPSBzZWxmW2RlcF9wYXRoXVtzZWxmLkNPTF9CSU5CXS5zcGxpdCgnLCAnKQorICAgICAgICAgICAgICAgIGlmIGl0ZW1fbmFtZSBpbiBkZXBfYmluOgorICAgICAgICAgICAgICAgICAgICBkZXBfYmluLnJlbW92ZShpdGVtX25hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGZbZGVwX3BhdGhdW3NlbGYuQ09MX0JJTkJdID0gJywgJy5qb2luKGRlcF9iaW4pLmxzdHJpcCgnLCAnKQorCisgICAgICAgIGl0ZW1fYmluID0gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX0JJTkJdLnNwbGl0KCcsICcpCisgICAgICAgIGlmIGl0ZW1fYmluOgorICAgICAgICAgICAgZm9yIGJpbmIgaW4gaXRlbV9iaW46CisgICAgICAgICAgICAgICAgYmluYl9wYXRoID0gc2VsZi5maW5kX3BhdGhfZm9yX2l0ZW0oYmluYikKKyAgICAgICAgICAgICAgICBpZiBub3QgYmluYl9wYXRoOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNlbGYuZXhjbHVkZV9pdGVtKGJpbmJfcGF0aCkKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgaXQgPSBzZWxmLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBzZWxmLnNldChpdCwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuQ09MX0lOQywgRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9CSU5CLCAiIiwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuQ09MX0lNRywgRmFsc2UpCisgICAgICAgICAgICBpdCA9IHNlbGYuaXRlcl9uZXh0KGl0KQorCisgICAgICAgIHNlbGYuc2VsZWN0aW9uX2NoYW5nZV9ub3RpZmljYXRpb24oKQorCisgICAgIiIiCisgICAgUmV0dXJucyB0d28gbGlzdHMuIE9uZSBvZiB1c2VyIHNlbGVjdGVkIHJlY2lwZXMgYW5kIHRoZSBvdGhlciBjb250YWluaW5nCisgICAgYWxsIHNlbGVjdGVkIHJlY2lwZXMKKyAgICAiIiIKKyAgICBkZWYgZ2V0X3NlbGVjdGVkX3JlY2lwZXMoc2VsZik6CisgICAgICAgIGFsbHJlY2lwZXMgPSBbXQorICAgICAgICB1c2VycmVjaXBlcyA9IFtdCisKKyAgICAgICAgaXQgPSBzZWxmLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBpZiBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfSU5DKToKKyAgICAgICAgICAgICAgICBuYW1lID0gc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX1BOKQorICAgICAgICAgICAgICAgIHR5cGUgPSBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfVFlQRSkKKyAgICAgICAgICAgICAgICBpZiB0eXBlICE9ICJpbWFnZSI6CisgICAgICAgICAgICAgICAgICAgIGFsbHJlY2lwZXMuYXBwZW5kKG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbCA9ICJVc2VyIFNlbGVjdGVkIiBpbiBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfQklOQikKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsOgorICAgICAgICAgICAgICAgICAgICAgICAgdXNlcnJlY2lwZXMuYXBwZW5kKG5hbWUpCisgICAgICAgICAgICBpdCA9IHNlbGYuaXRlcl9uZXh0KGl0KQorCisgICAgICAgIHJldHVybiBsaXN0KHNldCh1c2VycmVjaXBlcykpLCBsaXN0KHNldChhbGxyZWNpcGVzKSkKKworICAgIGRlZiBzZXRfc2VsZWN0ZWRfcmVjaXBlcyhzZWxmLCByZWNpcGVsaXN0KToKKyAgICAgICAgZm9yIHBuIGluIHJlY2lwZWxpc3Q6CisgICAgICAgICAgICBpZiBwbiBpbiBzZWxmLnBuX3BhdGgua2V5cygpOgorICAgICAgICAgICAgICAgIHBhdGggPSBzZWxmLnBuX3BhdGhbcG5dCisgICAgICAgICAgICAgICAgc2VsZi5pbmNsdWRlX2l0ZW0oaXRlbV9wYXRoPXBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYj0iVXNlciBTZWxlY3RlZCIpCisgICAgICAgIHNlbGYuc2VsZWN0aW9uX2NoYW5nZV9ub3RpZmljYXRpb24oKQorCisgICAgZGVmIGdldF9zZWxlY3RlZF9pbWFnZShzZWxmKToKKyAgICAgICAgaXQgPSBzZWxmLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBpZiBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfSU5DKToKKyAgICAgICAgICAgICAgICBuYW1lID0gc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX1BOKQorICAgICAgICAgICAgICAgIHR5cGUgPSBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfVFlQRSkKKyAgICAgICAgICAgICAgICBpZiB0eXBlID09ICJpbWFnZSI6CisgICAgICAgICAgICAgICAgICAgIHNlbCA9ICJVc2VyIFNlbGVjdGVkIiBpbiBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfQklOQikKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWUKKyAgICAgICAgICAgIGl0ID0gc2VsZi5pdGVyX25leHQoaXQpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgc2V0X3NlbGVjdGVkX2ltYWdlKHNlbGYsIGltZyk6CisgICAgICAgIGlmIG5vdCBpbWc6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5yZXNldCgpCisgICAgICAgIHBhdGggPSBzZWxmLmZpbmRfcGF0aF9mb3JfaXRlbShpbWcpCisgICAgICAgIHNlbGYuaW5jbHVkZV9pdGVtKGl0ZW1fcGF0aD1wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5iPSJVc2VyIFNlbGVjdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VfY29udGVudHM9VHJ1ZSkKKyAgICAgICAgc2VsZi5zZWxlY3Rpb25fY2hhbmdlX25vdGlmaWNhdGlvbigpCisKKyAgICBkZWYgc2V0X2N1c3RvbV9pbWFnZV92ZXJzaW9uKHNlbGYsIHZlcnNpb24pOgorICAgICAgICBzZWxmLmN1c3RvbV9pbWFnZV92ZXJzaW9uID0gdmVyc2lvbgorCisgICAgZGVmIGdldF9jdXN0b21faW1hZ2VfdmVyc2lvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY3VzdG9tX2ltYWdlX3ZlcnNpb24KKworICAgIGRlZiBpc19jdXN0b21faW1hZ2Uoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmdldF9zZWxlY3RlZF9pbWFnZSgpID09IHNlbGYuX19jdXN0b21faW1hZ2VfXwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaG9icGFnZXMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9ob2JwYWdlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZmQzNTk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaG9icGFnZXMucHkKQEAgLTAsMCArMSwxMjggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKK2Zyb20gYmIudWkuY3J1bWJzLmhvYmNvbG9yIGltcG9ydCBIb2JDb2xvcnMKK2Zyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgaHdjCisKKyMKKyMgSG9iUGFnZTogdGhlIHN1cGVyIGNsYXNzIGZvciBhbGwgSG9iLXJlbGF0ZWQgcGFnZXMKKyMgICAgCitjbGFzcyBIb2JQYWdlIChndGsuVkJveCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnVpbGRlciwgdGl0bGUgPSBOb25lKToKKyAgICAgICAgc3VwZXIoSG9iUGFnZSwgc2VsZikuX19pbml0X18oRmFsc2UsIDApCisgICAgICAgIHNlbGYuYnVpbGRlciA9IGJ1aWxkZXIKKyAgICAgICAgc2VsZi5idWlsZGVyX3dpZHRoLCBzZWxmLmJ1aWxkZXJfaGVpZ2h0ID0gc2VsZi5idWlsZGVyLnNpemVfcmVxdWVzdCgpCisKKyAgICAgICAgaWYgbm90IHRpdGxlOgorICAgICAgICAgICAgc2VsZi50aXRsZSA9ICJIb2IgLS0gSW1hZ2UgQ3JlYXRvciIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYudGl0bGUgPSB0aXRsZQorICAgICAgICBzZWxmLnRpdGxlX2xhYmVsID0gZ3RrLkxhYmVsKCkKKworICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhID0gZ3RrLlZCb3goRmFsc2UsIDEyKQorICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnNldF9zaXplX3JlcXVlc3Qoc2VsZi5idWlsZGVyX3dpZHRoIC0gNzMgLSA3Mywgc2VsZi5idWlsZGVyX2hlaWdodCAtIDg4IC0gMTUgLSAxNSkKKyAgICAgICAgc2VsZi5ncm91cF9hbGlnbiA9IGd0ay5BbGlnbm1lbnQoeGFsaWduID0gMCwgeWFsaWduPTAuNSwgeHNjYWxlPTEsIHlzY2FsZT0xKQorICAgICAgICBzZWxmLmdyb3VwX2FsaWduLnNldF9wYWRkaW5nKDE1LCAxNSwgNzMsIDczKQorICAgICAgICBzZWxmLmdyb3VwX2FsaWduLmFkZChzZWxmLmJveF9ncm91cF9hcmVhKQorICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnNldF9ob21vZ2VuZW91cyhGYWxzZSkKKworICAgIGRlZiBzZXRfdGl0bGUoc2VsZiwgdGl0bGUpOgorICAgICAgICBzZWxmLnRpdGxlID0gdGl0bGUKKyAgICAgICAgc2VsZi50aXRsZV9sYWJlbC5zZXRfbWFya3VwKCI8c3BhbiBzaXplPSd4LWxhcmdlJz4lczwvc3Bhbj4iICUgc2VsZi50aXRsZSkKKworICAgIGRlZiBhZGRfb250b190b3BfYmFyKHNlbGYsIHdpZGdldCA9IE5vbmUsIHBhZGRpbmcgPSAwKToKKyAgICAgICAgIyB0aGUgdG9wIGJ1dHRvbiBvY2N1cGllcyAxLzcgb2YgdGhlIHBhZ2UgaGVpZ2h0CisgICAgICAgICMgc2V0dXAgYW4gZXZlbnQgYm94CisgICAgICAgIGV2ZW50Ym94ID0gZ3RrLkV2ZW50Qm94KCkKKyAgICAgICAgc3R5bGUgPSBldmVudGJveC5nZXRfc3R5bGUoKS5jb3B5KCkKKyAgICAgICAgc3R5bGUuYmdbZ3RrLlNUQVRFX05PUk1BTF0gPSBldmVudGJveC5nZXRfY29sb3JtYXAoKS5hbGxvY19jb2xvcihIb2JDb2xvcnMuTElHSFRfR1JBWSwgRmFsc2UsIEZhbHNlKQorICAgICAgICBldmVudGJveC5zZXRfc3R5bGUoc3R5bGUpCisgICAgICAgIGV2ZW50Ym94LnNldF9zaXplX3JlcXVlc3QoLTEsIDg4KQorCisgICAgICAgIGhib3ggPSBndGsuSEJveCgpCisKKyAgICAgICAgc2VsZi50aXRsZV9sYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIHNlbGYudGl0bGVfbGFiZWwuc2V0X21hcmt1cCgiPHNwYW4gc2l6ZT0neC1sYXJnZSc+JXM8L3NwYW4+IiAlIHNlbGYudGl0bGUpCisgICAgICAgIGhib3gucGFja19zdGFydChzZWxmLnRpdGxlX2xhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UsIHBhZGRpbmc9MjApCisKKyAgICAgICAgaWYgd2lkZ2V0OgorICAgICAgICAgICAgIyBhZGQgdGhlIHdpZGdldCBpbiB0aGUgZXZlbnQgYm94CisgICAgICAgICAgICBoYm94LnBhY2tfZW5kKHdpZGdldCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPXBhZGRpbmcpCisgICAgICAgIGV2ZW50Ym94LmFkZChoYm94KQorCisgICAgICAgIHJldHVybiBldmVudGJveAorCisgICAgZGVmIHNwYW5fdGFnKHNlbGYsIHNpemU9Im1lZGl1bSIsIHdlaWdodD0ibm9ybWFsIiwgZm9yZ3JvdW5kPSIjMWMxYzFjIik6CisgICAgICAgIHNwYW5fdGFnID0gIndlaWdodD0nJXMnIGZvcmVncm91bmQ9JyVzJyBzaXplPSclcyciICUgKHdlaWdodCwgZm9yZ3JvdW5kLCBzaXplKQorICAgICAgICByZXR1cm4gc3Bhbl90YWcKKworICAgIGRlZiBhcHBlbmRfdG9vbGJhcl9idXR0b24oc2VsZiwgdG9vbGJhciwgYnV0dG9ubmFtZSwgaWNvbl9kaXNwLCBpY29uX2hvdm9yLCB0aXAsIGNiKToKKyAgICAgICAgIyBDcmVhdGUgYSBidXR0b24gYW5kIGFwcGVuZCBpdCBvbiB0aGUgdG9vbGJhciBhY2NvcmRpbmcgdG8gYnV0dG9uIG5hbWUKKyAgICAgICAgaWNvbiA9IGd0ay5JbWFnZSgpCisgICAgICAgIGljb25fZGlzcGxheSA9IGljb25fZGlzcAorICAgICAgICBpY29uX2hvdmVyID0gaWNvbl9ob3ZvcgorICAgICAgICBwaXhfYnVmZmVyID0gZ3RrLmdkay5waXhidWZfbmV3X2Zyb21fZmlsZShpY29uX2Rpc3BsYXkpCisgICAgICAgIGljb24uc2V0X2Zyb21fcGl4YnVmKHBpeF9idWZmZXIpCisgICAgICAgIHRpcF90ZXh0ID0gdGlwCisgICAgICAgIGJ1dHRvbiA9IHRvb2xiYXIuYXBwZW5kX2l0ZW0oYnV0dG9ubmFtZSwgdGlwLCBOb25lLCBpY29uLCBjYikKKyAgICAgICAgcmV0dXJuIGJ1dHRvbgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfc2l6ZV90b19zdHJpbmcoc2l6ZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG5vdCBzaXplOgorICAgICAgICAgICAgICAgIHNpemVfc3RyID0gIjAgQiIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbGVuKHN0cihpbnQoc2l6ZSkpKSA+IDY6CisgICAgICAgICAgICAgICAgICAgIHNpemVfc3RyID0gJyUuMWYnICUgKHNpemUqMS4wLygxMDI0KjEwMjQpKSArICcgTUInCisgICAgICAgICAgICAgICAgZWxpZiBsZW4oc3RyKGludChzaXplKSkpID4gMzoKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV9zdHIgPSAnJS4xZicgJSAoc2l6ZSoxLjAvMTAyNCkgKyAnIEtCJworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNpemVfc3RyID0gc3RyKHNpemUpICsgJyBCJworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzaXplX3N0ciA9ICIwIEIiCisgICAgICAgIHJldHVybiBzaXplX3N0cgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfc3RyaW5nX3RvX3NpemUoc3RyX3NpemUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3Qgc3RyX3NpemU6CisgICAgICAgICAgICAgICAgc2l6ZSA9IDAKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdW5pdCA9IHN0cl9zaXplLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBpZiBsZW4odW5pdCkgPiAxOgorICAgICAgICAgICAgICAgICAgICBpZiB1bml0WzFdID09ICdNQic6CisgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gZmxvYXQodW5pdFswXSkqMTAyNCoxMDI0CisgICAgICAgICAgICAgICAgICAgIGVsaWYgdW5pdFsxXSA9PSAnS0InOgorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IGZsb2F0KHVuaXRbMF0pKjEwMjQKKyAgICAgICAgICAgICAgICAgICAgZWxpZiB1bml0WzFdID09ICdCJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBmbG9hdCh1bml0WzBdKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzaXplID0gZmxvYXQodW5pdFswXSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2l6ZSA9IDAKKyAgICAgICAgcmV0dXJuIHNpemUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaG9id2lkZ2V0LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaG9id2lkZ2V0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOTY5YzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9ob2J3aWRnZXQucHkKQEAgLTAsMCArMSw5MDQgQEAKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEyICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgoraW1wb3J0IGd0aworaW1wb3J0IGdvYmplY3QKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBzeXMKK2ltcG9ydCBwYW5nbywgcGFuZ29jYWlybworaW1wb3J0IGNhaXJvCitpbXBvcnQgbWF0aAorCitmcm9tIGJiLnVpLmNydW1icy5ob2Jjb2xvciBpbXBvcnQgSG9iQ29sb3JzCitmcm9tIGJiLnVpLmNydW1icy5wZXJzaXN0ZW50dG9vbHRpcCBpbXBvcnQgUGVyc2lzdGVudFRvb2x0aXAKKworY2xhc3MgaHdjOgorCisgICAgTUFJTl9XSU5fV0lEVEggICA9IDEwMjQKKyAgICBNQUlOX1dJTl9IRUlHSFQgID0gNzAwCisKK2NsYXNzIGhpYzoKKworICAgIEhPQl9JQ09OX0JBU0VfRElSID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkpLCAoInVpL2ljb25zLyIpKQorCisgICAgSUNPTl9SQ0lQRV9ESVNQTEFZX0ZJTEUgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgncmVjaXBlL3JlY2lwZV9kaXNwbGF5LnBuZycpKQorICAgIElDT05fUkNJUEVfSE9WRVJfRklMRSAgICAgICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ3JlY2lwZS9yZWNpcGVfaG92ZXIucG5nJykpCisgICAgSUNPTl9QQUNLQUdFU19ESVNQTEFZX0ZJTEUgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgncGFja2FnZXMvcGFja2FnZXNfZGlzcGxheS5wbmcnKSkKKyAgICBJQ09OX1BBQ0tBR0VTX0hPVkVSX0ZJTEUgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdwYWNrYWdlcy9wYWNrYWdlc19ob3Zlci5wbmcnKSkKKyAgICBJQ09OX0xBWUVSU19ESVNQTEFZX0ZJTEUgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdsYXllcnMvbGF5ZXJzX2Rpc3BsYXkucG5nJykpCisgICAgSUNPTl9MQVlFUlNfSE9WRVJfRklMRSAgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnbGF5ZXJzL2xheWVyc19ob3Zlci5wbmcnKSkKKyAgICBJQ09OX0lNQUdFU19ESVNQTEFZX0ZJTEUgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbWFnZXMvaW1hZ2VzX2Rpc3BsYXkucG5nJykpCisgICAgSUNPTl9JTUFHRVNfSE9WRVJfRklMRSAgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW1hZ2VzL2ltYWdlc19ob3Zlci5wbmcnKSkKKyAgICBJQ09OX1NFVFRJTkdTX0RJU1BMQVlfRklMRSAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdzZXR0aW5ncy9zZXR0aW5nc19kaXNwbGF5LnBuZycpKQorICAgIElDT05fU0VUVElOR1NfSE9WRVJfRklMRSAgICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ3NldHRpbmdzL3NldHRpbmdzX2hvdmVyLnBuZycpKQorICAgIElDT05fSU5GT19ESVNQTEFZX0ZJTEUgICAgICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ2luZm8vaW5mb19kaXNwbGF5LnBuZycpKQorICAgIElDT05fSU5GT19IT1ZFUl9GSUxFICAgICAgICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ2luZm8vaW5mb19ob3Zlci5wbmcnKSkKKyAgICBJQ09OX0lORElfQ09ORklSTV9GSUxFICAgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmRpY2F0b3JzL2NvbmZpcm1hdGlvbi5wbmcnKSkKKyAgICBJQ09OX0lORElfRVJST1JfRklMRSAgICAgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmRpY2F0b3JzL2RlbmllZC5wbmcnKSkKKyAgICBJQ09OX0lORElfUkVNT1ZFX0ZJTEUgICAgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmRpY2F0b3JzL3JlbW92ZS5wbmcnKSkKKyAgICBJQ09OX0lORElfUkVNT1ZFX0hPVkVSX0ZJTEUgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmRpY2F0b3JzL3JlbW92ZS1ob3Zlci5wbmcnKSkKKyAgICBJQ09OX0lORElfQUREX0ZJTEUgICAgICAgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmRpY2F0b3JzL2FkZC5wbmcnKSkKKyAgICBJQ09OX0lORElfQUREX0hPVkVSX0ZJTEUgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmRpY2F0b3JzL2FkZC1ob3Zlci5wbmcnKSkKKyAgICBJQ09OX0lORElfUkVGUkVTSF9GSUxFICAgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmRpY2F0b3JzL3JlZnJlc2gucG5nJykpCisgICAgSUNPTl9JTkRJX0FMRVJUX0ZJTEUgICAgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW5kaWNhdG9ycy9hbGVydC5wbmcnKSkKKyAgICBJQ09OX0lORElfVElDS19GSUxFICAgICAgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmRpY2F0b3JzL3RpY2sucG5nJykpCisgICAgSUNPTl9JTkRJX0lORk9fRklMRSAgICAgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW5kaWNhdG9ycy9pbmZvLnBuZycpKQorCitjbGFzcyBIb2JWaWV3VGFibGUgKGd0ay5WQm94KToKKyAgICAiIiIKKyAgICBBIFZCb3ggdG8gY29udGFpbiB0aGUgdGFibGUgZm9yIGRpZmZlcmVudCByZWNpcGUgdmlld3MgYW5kIHBhY2thZ2UgdmlldworICAgICIiIgorICAgIF9fZ3NpZ25hbHNfXyA9IHsKKyAgICAgICAgICJ0b2dnbGVkIiAgICAgICA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9QWU9CSkVDVCwpKSwKKyAgICAgICAgICJyb3ctYWN0aXZhdGVkIiA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1BZT0JKRUNULCkpLAorICAgICAgICAgImNlbGwtZmFkZWlub3V0LXN0b3BwZWQiIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdvYmplY3QuVFlQRV9QWU9CSkVDVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1BZT0JKRUNULCkpLAorICAgIH0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb2x1bW5zLCBuYW1lKToKKyAgICAgICAgZ3RrLlZCb3guX19pbml0X18oc2VsZiwgRmFsc2UsIDYpCisgICAgICAgIHNlbGYudGFibGVfdHJlZSA9IGd0ay5UcmVlVmlldygpCisgICAgICAgIHNlbGYudGFibGVfdHJlZS5zZXRfaGVhZGVyc192aXNpYmxlKFRydWUpCisgICAgICAgIHNlbGYudGFibGVfdHJlZS5zZXRfaGVhZGVyc19jbGlja2FibGUoVHJ1ZSkKKyAgICAgICAgc2VsZi50YWJsZV90cmVlLnNldF9ydWxlc19oaW50KFRydWUpCisgICAgICAgIHNlbGYudGFibGVfdHJlZS5zZXRfZW5hYmxlX3RyZWVfbGluZXMoVHJ1ZSkKKyAgICAgICAgc2VsZi50YWJsZV90cmVlLmdldF9zZWxlY3Rpb24oKS5zZXRfbW9kZShndGsuU0VMRUNUSU9OX1NJTkdMRSkKKyAgICAgICAgc2VsZi50b2dnbGVfY29sdW1ucyA9IFtdCisgICAgICAgIHNlbGYudGFibGVfdHJlZS5jb25uZWN0KCJyb3ctYWN0aXZhdGVkIiwgc2VsZi5yb3dfYWN0aXZhdGVkX2NiKQorICAgICAgICBzZWxmLnRvcF9iYXIgPSBOb25lCisgICAgICAgIHNlbGYudGFiX25hbWUgPSBuYW1lCisKKyAgICAgICAgZm9yIGksIGNvbHVtbiBpbiBlbnVtZXJhdGUoY29sdW1ucyk6CisgICAgICAgICAgICBjb2xfbmFtZSA9IGNvbHVtblsnY29sX25hbWUnXQorICAgICAgICAgICAgY29sID0gZ3RrLlRyZWVWaWV3Q29sdW1uKGNvbF9uYW1lKQorICAgICAgICAgICAgY29sLnNldF9jbGlja2FibGUoVHJ1ZSkKKyAgICAgICAgICAgIGNvbC5zZXRfcmVzaXphYmxlKFRydWUpCisgICAgICAgICAgICBpZiBzZWxmLnRhYl9uYW1lLnN0YXJ0c3dpdGgoJ0luY2x1ZGVkJyk6CisgICAgICAgICAgICAgICAgaWYgY29sX25hbWUhPSdJbmNsdWRlZCc6CisgICAgICAgICAgICAgICAgICAgIGNvbC5zZXRfc29ydF9jb2x1bW5faWQoY29sdW1uWydjb2xfaWQnXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY29sLnNldF9zb3J0X2NvbHVtbl9pZChjb2x1bW5bJ2NvbF9pZCddKQorICAgICAgICAgICAgaWYgJ2NvbF9taW4nIGluIGNvbHVtbi5rZXlzKCk6CisgICAgICAgICAgICAgICAgY29sLnNldF9taW5fd2lkdGgoY29sdW1uWydjb2xfbWluJ10pCisgICAgICAgICAgICBpZiAnY29sX21heCcgaW4gY29sdW1uLmtleXMoKToKKyAgICAgICAgICAgICAgICBjb2wuc2V0X21heF93aWR0aChjb2x1bW5bJ2NvbF9tYXgnXSkKKyAgICAgICAgICAgIGlmICdleHBhbmQnIGluIGNvbHVtbi5rZXlzKCk6CisgICAgICAgICAgICAgICAgY29sLnNldF9leHBhbmQoVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYudGFibGVfdHJlZS5hcHBlbmRfY29sdW1uKGNvbCkKKworICAgICAgICAgICAgaWYgKG5vdCAnY29sX3N0eWxlJyBpbiBjb2x1bW4ua2V5cygpKSBvciBjb2x1bW5bJ2NvbF9zdHlsZSddID09ICd0ZXh0JzoKKyAgICAgICAgICAgICAgICBjZWxsID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorICAgICAgICAgICAgICAgIGNvbC5wYWNrX3N0YXJ0KGNlbGwsIFRydWUpCisgICAgICAgICAgICAgICAgY29sLnNldF9hdHRyaWJ1dGVzKGNlbGwsIHRleHQ9Y29sdW1uWydjb2xfaWQnXSkKKyAgICAgICAgICAgICAgICBpZiAnY29sX3RfaWQnIGluIGNvbHVtbi5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgIGNvbC5hZGRfYXR0cmlidXRlKGNlbGwsICdmb250JywgY29sdW1uWydjb2xfdF9pZCddKQorICAgICAgICAgICAgZWxpZiBjb2x1bW5bJ2NvbF9zdHlsZSddID09ICdjaGVjayB0b2dnbGUnOgorICAgICAgICAgICAgICAgIGNlbGwgPSBIb2JDZWxsUmVuZGVyZXJUb2dnbGUoKQorICAgICAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCdhY3RpdmF0YWJsZScsIFRydWUpCisgICAgICAgICAgICAgICAgY2VsbC5jb25uZWN0KCJ0b2dnbGVkIiwgc2VsZi50b2dnbGVkX2NiLCBpLCBzZWxmLnRhYmxlX3RyZWUpCisgICAgICAgICAgICAgICAgY2VsbC5jb25uZWN0X3JlbmRlcl9zdGF0ZV9jaGFuZ2VkKHNlbGYuc3RvcF9jZWxsX2ZhZGVpbm91dF9jYiwgc2VsZi50YWJsZV90cmVlKQorICAgICAgICAgICAgICAgIHNlbGYudG9nZ2xlX2lkID0gaQorICAgICAgICAgICAgICAgIGNvbC5wYWNrX2VuZChjZWxsLCBUcnVlKQorICAgICAgICAgICAgICAgIGNvbC5zZXRfYXR0cmlidXRlcyhjZWxsLCBhY3RpdmU9Y29sdW1uWydjb2xfaWQnXSkKKyAgICAgICAgICAgICAgICBzZWxmLnRvZ2dsZV9jb2x1bW5zLmFwcGVuZChjb2xfbmFtZSkKKyAgICAgICAgICAgICAgICBpZiAnY29sX2dyb3VwJyBpbiBjb2x1bW4ua2V5cygpOgorICAgICAgICAgICAgICAgICAgICBjb2wuc2V0X2NlbGxfZGF0YV9mdW5jKGNlbGwsIHNlbGYuc2V0X2dyb3VwX251bWJlcl9jYikKKyAgICAgICAgICAgIGVsaWYgY29sdW1uWydjb2xfc3R5bGUnXSA9PSAncmFkaW8gdG9nZ2xlJzoKKyAgICAgICAgICAgICAgICBjZWxsID0gZ3RrLkNlbGxSZW5kZXJlclRvZ2dsZSgpCisgICAgICAgICAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkoJ2FjdGl2YXRhYmxlJywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBjZWxsLnNldF9yYWRpbyhUcnVlKQorICAgICAgICAgICAgICAgIGNlbGwuY29ubmVjdCgidG9nZ2xlZCIsIHNlbGYudG9nZ2xlZF9jYiwgaSwgc2VsZi50YWJsZV90cmVlKQorICAgICAgICAgICAgICAgIHNlbGYudG9nZ2xlX2lkID0gaQorICAgICAgICAgICAgICAgIGNvbC5wYWNrX2VuZChjZWxsLCBUcnVlKQorICAgICAgICAgICAgICAgIGNvbC5zZXRfYXR0cmlidXRlcyhjZWxsLCBhY3RpdmU9Y29sdW1uWydjb2xfaWQnXSkKKyAgICAgICAgICAgICAgICBzZWxmLnRvZ2dsZV9jb2x1bW5zLmFwcGVuZChjb2xfbmFtZSkKKyAgICAgICAgICAgIGVsaWYgY29sdW1uWydjb2xfc3R5bGUnXSA9PSAnYmluYic6CisgICAgICAgICAgICAgICAgY2VsbCA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0KCkKKyAgICAgICAgICAgICAgICBjb2wucGFja19zdGFydChjZWxsLCBUcnVlKQorICAgICAgICAgICAgICAgIGNvbC5zZXRfY2VsbF9kYXRhX2Z1bmMoY2VsbCwgc2VsZi5kaXNwbGF5X2JpbmJfY2IsIGNvbHVtblsnY29sX2lkJ10pCisgICAgICAgICAgICAgICAgaWYgJ2NvbF90X2lkJyBpbiBjb2x1bW4ua2V5cygpOgorICAgICAgICAgICAgICAgICAgICBjb2wuYWRkX2F0dHJpYnV0ZShjZWxsLCAnZm9udCcsIGNvbHVtblsnY29sX3RfaWQnXSkKKworICAgICAgICBzZWxmLnNjcm9sbCA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisgICAgICAgIHNlbGYuc2Nyb2xsLnNldF9wb2xpY3koZ3RrLlBPTElDWV9ORVZFUiwgZ3RrLlBPTElDWV9BVVRPTUFUSUMpCisgICAgICAgIHNlbGYuc2Nyb2xsLmFkZChzZWxmLnRhYmxlX3RyZWUpCisKKyAgICAgICAgc2VsZi5wYWNrX2VuZChzZWxmLnNjcm9sbCwgVHJ1ZSwgVHJ1ZSwgMCkKKworICAgIGRlZiBhZGRfbm9fcmVzdWx0X2JhcihzZWxmLCBlbnRyeSk6CisgICAgICAgIGNvbG9yID0gSG9iQ29sb3JzLktIQUtJCisgICAgICAgIHNlbGYudG9wX2JhciA9IGd0ay5FdmVudEJveCgpCisgICAgICAgIHNlbGYudG9wX2Jhci5zZXRfc2l6ZV9yZXF1ZXN0KC0xLCA3MCkKKyAgICAgICAgc2VsZi50b3BfYmFyLm1vZGlmeV9iZyhndGsuU1RBVEVfTk9STUFMLCBndGsuZ2RrLmNvbG9yX3BhcnNlKGNvbG9yKSkKKyAgICAgICAgc2VsZi50b3BfYmFyLnNldF9mbGFncyhndGsuQ0FOX0RFRkFVTFQpCisgICAgICAgIHNlbGYudG9wX2Jhci5ncmFiX2RlZmF1bHQoKQorCisgICAgICAgIG5vX3Jlc3VsdF90YWIgPSBndGsuVGFibGUoNSwgMjAsIFRydWUpCisgICAgICAgIHNlbGYudG9wX2Jhci5hZGQobm9fcmVzdWx0X3RhYikKKworICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIGxhYmVsLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCisgICAgICAgIHRpdGxlID0gIk5vIHJlc3VsdHMgbWF0Y2hpbmcgeW91ciBzZWFyY2giCisgICAgICAgIGxhYmVsLnNldF9tYXJrdXAoIjxzcGFuIHNpemU9J3gtbGFyZ2UnPjxiPiVzPC9iPjwvc3Bhbj4iICUgdGl0bGUpCisgICAgICAgIG5vX3Jlc3VsdF90YWIuYXR0YWNoKGxhYmVsLCAxLCAxNCwgMSwgNCkKKworICAgICAgICBjbGVhcl9idXR0b24gPSBIb2JCdXR0b24oIkNsZWFyIHNlYXJjaCIpCisgICAgICAgIGNsZWFyX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJDbGVhciBzZWFyY2ggcXVlcnkiKQorICAgICAgICBjbGVhcl9idXR0b24uY29ubmVjdCgnY2xpY2tlZCcsIHNlbGYuc2V0X3NlYXJjaF9lbnRyeV9jbGVhcl9jYiwgZW50cnkpCisgICAgICAgIG5vX3Jlc3VsdF90YWIuYXR0YWNoKGNsZWFyX2J1dHRvbiwgMTYsIDE5LCAxLCA0KQorCisgICAgICAgIHNlbGYucGFja19zdGFydChzZWxmLnRvcF9iYXIsIEZhbHNlLCBUcnVlLCAxMikKKyAgICAgICAgc2VsZi50b3BfYmFyLnNob3dfYWxsKCkKKworICAgIGRlZiBzZXRfc2VhcmNoX2VudHJ5X2NsZWFyX2NiKHNlbGYsIGJ1dHRvbiwgc2VhcmNoKToKKyAgICAgICAgaWYgc2VhcmNoLmdldF9lZGl0YWJsZSgpID09IFRydWU6CisgICAgICAgICAgICBzZWFyY2guc2V0X3RleHQoIiIpCisgICAgICAgIHNlYXJjaC5zZXRfaWNvbl9zZW5zaXRpdmUoZ3RrLkVOVFJZX0lDT05fU0VDT05EQVJZLCBGYWxzZSkKKyAgICAgICAgc2VhcmNoLmdyYWJfZm9jdXMoKQorCisgICAgZGVmIGRpc3BsYXlfYmluYl9jYihzZWxmLCBjb2wsIGNlbGwsIG1vZGVsLCBpdCwgY29sX2lkKToKKyAgICAgICAgYmluYiA9ICBtb2RlbC5nZXRfdmFsdWUoaXQsIGNvbF9pZCkKKyAgICAgICAgIyBKdXN0IGRpc3BsYXkgdGhlIGZpcnN0IGl0ZW0KKyAgICAgICAgaWYgYmluYjoKKyAgICAgICAgICAgIGJpbiA9IGJpbmIuc3BsaXQoJywgJykKKyAgICAgICAgICAgIHRvdGFsX25vID0gbGVuKGJpbikKKyAgICAgICAgICAgIGlmIHRvdGFsX25vID4gMSBhbmQgYmluWzBdID09ICJVc2VyIFNlbGVjdGVkIjoKKyAgICAgICAgICAgICAgICBpZiB0b3RhbF9ubyA+IDI6CisgICAgICAgICAgICAgICAgICAgIHByZXNlbnRfYmluYiA9IGJpblsxXSArICcgKCsnICsgc3RyKHRvdGFsX25vIC0gMSkgKyAnKScKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwcmVzZW50X2JpbmIgPSBiaW5bMV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgdG90YWxfbm8gPiAxOgorICAgICAgICAgICAgICAgICAgICBwcmVzZW50X2JpbmIgPSBiaW5bMF0gKyAnICgrJyArIHN0cih0b3RhbF9ubyAtIDEpICsgJyknCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcHJlc2VudF9iaW5iID0gYmluWzBdCisgICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSgndGV4dCcsIHByZXNlbnRfYmluYikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCd0ZXh0JywgIiIpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgc2V0X21vZGVsKHNlbGYsIHRyZWVfbW9kZWwpOgorICAgICAgICBzZWxmLnRhYmxlX3RyZWUuc2V0X21vZGVsKHRyZWVfbW9kZWwpCisKKyAgICBkZWYgdG9nZ2xlX2RlZmF1bHQoc2VsZik6CisgICAgICAgIG1vZGVsID0gc2VsZi50YWJsZV90cmVlLmdldF9tb2RlbCgpCisgICAgICAgIGlmIG5vdCBtb2RlbDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpdGVyID0gbW9kZWwuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICBpZiBpdGVyOgorICAgICAgICAgICAgcm93cGF0aCA9IG1vZGVsLmdldF9wYXRoKGl0ZXIpCisgICAgICAgICAgICBtb2RlbFtyb3dwYXRoXVtzZWxmLnRvZ2dsZV9pZF0gPSBUcnVlCisKKyAgICBkZWYgdG9nZ2xlZF9jYihzZWxmLCBjZWxsLCBwYXRoLCBjb2x1bW5pZCwgdHJlZSk6CisgICAgICAgIHNlbGYuZW1pdCgidG9nZ2xlZCIsIGNlbGwsIHBhdGgsIGNvbHVtbmlkLCB0cmVlKQorCisgICAgZGVmIHJvd19hY3RpdmF0ZWRfY2Ioc2VsZiwgdHJlZSwgcGF0aCwgdmlld19jb2x1bW4pOgorICAgICAgICBpZiBub3Qgdmlld19jb2x1bW4uZ2V0X3RpdGxlKCkgaW4gc2VsZi50b2dnbGVfY29sdW1uczoKKyAgICAgICAgICAgIHNlbGYuZW1pdCgicm93LWFjdGl2YXRlZCIsIHRyZWUuZ2V0X21vZGVsKCksIHBhdGgpCisKKyAgICBkZWYgc3RvcF9jZWxsX2ZhZGVpbm91dF9jYihzZWxmLCBjdHJsLCBjZWxsLCB0cmVlKToKKyAgICAgICAgc2VsZi5lbWl0KCJjZWxsLWZhZGVpbm91dC1zdG9wcGVkIiwgY3RybCwgY2VsbCwgdHJlZSkKKworICAgIGRlZiBzZXRfZ3JvdXBfbnVtYmVyX2NiKHNlbGYsIGNvbCwgY2VsbCwgbW9kZWwsIGl0ZXIpOgorICAgICAgICBpZiBtb2RlbCBhbmQgKG1vZGVsLml0ZXJfcGFyZW50KGl0ZXIpID09IE5vbmUpOgorICAgICAgICAgICAgY2VsbC5jZWxsX2F0dHJbIm51bWJlcl9vZl9jaGlsZHJlbiJdID0gbW9kZWwuaXRlcl9uX2NoaWxkcmVuKGl0ZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjZWxsLmNlbGxfYXR0clsibnVtYmVyX29mX2NoaWxkcmVuIl0gPSAwCisKKyAgICBkZWYgY29ubmVjdF9ncm91cF9zZWxlY3Rpb24oc2VsZiwgY2JfZnVuYyk6CisgICAgICAgIHNlbGYudGFibGVfdHJlZS5nZXRfc2VsZWN0aW9uKCkuY29ubmVjdCgiY2hhbmdlZCIsIGNiX2Z1bmMpCisKKyIiIgorQSBtZXRob2QgdG8gY2FsY3VsYXRlIGEgc29mdGVuZWQgdmFsdWUgZm9yIHRoZSBjb2xvdXIgb2Ygd2lkZ2V0IHdoZW4gaW4gdGhlCitwcm92aWRlZCBzdGF0ZS4KKword2lkZ2V0OiB0aGUgd2lkZ2V0IHdob3NlIHN0eWxlIHRvIHVzZQorc3RhdGU6IHRoZSBzdGF0ZSBvZiB0aGUgd2lkZ2V0IHRvIHVzZSB0aGUgc3R5bGUgZm9yCisKK1JldHVybnMgYSBzdHJpbmcgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBzb2Z0ZW5lZCBjb2xvdXIKKyIiIgorZGVmIHNvZnRlbl9jb2xvcih3aWRnZXQsIHN0YXRlPWd0ay5TVEFURV9OT1JNQUwpOgorICAgICMgdGhpcyBjb2xvdXIgbXVuZ2luZyByb3V0aW5lIGlzIGhlYXZpbHkgaW5zcGlyZWQgYnUgZ2R1X3V0aWxfZ2V0X21peF9jb2xvcigpCisgICAgIyBmcm9tIGdub21lLWRpc2stdXRpbGl0eToKKyAgICAjIGh0dHA6Ly9naXQuZ25vbWUub3JnL2Jyb3dzZS9nbm9tZS1kaXNrLXV0aWxpdHkvdHJlZS9zcmMvZ2R1LWd0ay9nZHUtZ3RrLmM/aD1nbm9tZS0zLTAKKyAgICBibGVuZCA9IDAuNworICAgIHN0eWxlID0gd2lkZ2V0LmdldF9zdHlsZSgpCisgICAgY29sb3IgPSBzdHlsZS50ZXh0W3N0YXRlXQorICAgIGNvbG9yLnJlZCA9IGNvbG9yLnJlZCAqIGJsZW5kICsgc3R5bGUuYmFzZVtzdGF0ZV0ucmVkICogKDEuMCAtIGJsZW5kKQorICAgIGNvbG9yLmdyZWVuID0gY29sb3IuZ3JlZW4gKiBibGVuZCArIHN0eWxlLmJhc2Vbc3RhdGVdLmdyZWVuICogKDEuMCAtIGJsZW5kKQorICAgIGNvbG9yLmJsdWUgPSBjb2xvci5ibHVlICogYmxlbmQgKyBzdHlsZS5iYXNlW3N0YXRlXS5ibHVlICogKDEuMCAtIGJsZW5kKQorICAgIHJldHVybiBjb2xvci50b19zdHJpbmcoKQorCitjbGFzcyBCYXNlSG9iQnV0dG9uKGd0ay5CdXR0b24pOgorICAgICIiIgorICAgIEEgZ3RrLkJ1dHRvbiBzdWJjbGFzcyB3aGljaCBmb2xsb3dzIHRoZSB2aXN1YWwgZGVzaWduIG9mIEhvYiBmb3IgcHJpbWFyeQorICAgIGFjdGlvbiBidXR0b25zCisKKyAgICBsYWJlbDogdGhlIHRleHQgdG8gZGlzcGxheSBhcyB0aGUgYnV0dG9uJ3MgbGFiZWwKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGFiZWwpOgorICAgICAgICBndGsuQnV0dG9uLl9faW5pdF9fKHNlbGYsIGxhYmVsKQorICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKHNlbGYpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHN0eWxlX2J1dHRvbihidXR0b24pOgorICAgICAgICBzdHlsZSA9IGJ1dHRvbi5nZXRfc3R5bGUoKQorICAgICAgICBzdHlsZSA9IGd0ay5yY19nZXRfc3R5bGVfYnlfcGF0aHMoZ3RrLnNldHRpbmdzX2dldF9kZWZhdWx0KCksICdndGstYnV0dG9uJywgJ2d0ay1idXR0b24nLCBnb2JqZWN0LlRZUEVfTk9ORSkKKworICAgICAgICBidXR0b24uc2V0X2ZsYWdzKGd0ay5DQU5fREVGQVVMVCkKKyAgICAgICAgYnV0dG9uLmdyYWJfZGVmYXVsdCgpCisKKyMgICAgICAgIGxhYmVsID0gIjxzcGFuIHNpemU9J3gtbGFyZ2UnPjxiPiVzPC9iPjwvc3Bhbj4iICUgZ29iamVjdC5tYXJrdXBfZXNjYXBlX3RleHQoYnV0dG9uLmdldF9sYWJlbCgpKQorICAgICAgICBsYWJlbCA9IGJ1dHRvbi5nZXRfbGFiZWwoKQorICAgICAgICBidXR0b24uc2V0X2xhYmVsKGxhYmVsKQorICAgICAgICBidXR0b24uY2hpbGQuc2V0X3VzZV9tYXJrdXAoVHJ1ZSkKKworY2xhc3MgSG9iQnV0dG9uKEJhc2VIb2JCdXR0b24pOgorICAgICIiIgorICAgIEEgZ3RrLkJ1dHRvbiBzdWJjbGFzcyB3aGljaCBmb2xsb3dzIHRoZSB2aXN1YWwgZGVzaWduIG9mIEhvYiBmb3IgcHJpbWFyeQorICAgIGFjdGlvbiBidXR0b25zCisKKyAgICBsYWJlbDogdGhlIHRleHQgdG8gZGlzcGxheSBhcyB0aGUgYnV0dG9uJ3MgbGFiZWwKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGFiZWwpOgorICAgICAgICBCYXNlSG9iQnV0dG9uLl9faW5pdF9fKHNlbGYsIGxhYmVsKQorICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKHNlbGYpCisKK2NsYXNzIEhvYkFsdEJ1dHRvbihCYXNlSG9iQnV0dG9uKToKKyAgICAiIiIKKyAgICBBIGd0ay5CdXR0b24gc3ViY2xhc3Mgd2hpY2ggaGFzIG5vIHJlbGllZiwgYW5kIHNvIGlzIG1vcmUgZGlzY3JldGUKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGFiZWwpOgorICAgICAgICBCYXNlSG9iQnV0dG9uLl9faW5pdF9fKHNlbGYsIGxhYmVsKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKHNlbGYpCisKKyAgICAiIiIKKyAgICBBIGNhbGxiYWNrIGZvciB0aGUgc3RhdGUtY2hhbmdlZCBldmVudCB0byBlbnN1cmUgdGhlIHRleHQgaXMgZGlzcGxheWVkCisgICAgZGlmZmVyZW50bHkgd2hlbiB0aGUgd2lkZ2V0IGlzIG5vdCBzZW5zaXRpdmUKKyAgICAiIiIKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGRlc2Vuc2l0aXNlX29uX3N0YXRlX2NoYW5nZV9jYihidXR0b24sIHN0YXRlKToKKyAgICAgICAgaWYgbm90IGJ1dHRvbi5nZXRfcHJvcGVydHkoInNlbnNpdGl2ZSIpOgorICAgICAgICAgICAgSG9iQWx0QnV0dG9uLnNldF90ZXh0KGJ1dHRvbiwgRmFsc2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBIb2JBbHRCdXR0b24uc2V0X3RleHQoYnV0dG9uLCBUcnVlKQorCisgICAgIiIiCisgICAgU2V0IHRoZSBidXR0b24gbGFiZWwgd2l0aCBhbiBhcHByb3ByaWF0ZSBjb2xvdXIgZm9yIHRoZSBjdXJyZW50IHdpZGdldCBzdGF0ZQorICAgICIiIgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc2V0X3RleHQoYnV0dG9uLCBzZW5zaXRpdmU9VHJ1ZSk6CisgICAgICAgIGlmIHNlbnNpdGl2ZToKKyAgICAgICAgICAgIGNvbG91ciA9IEhvYkNvbG9ycy5QQUxFX0JMVUUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbG91ciA9IEhvYkNvbG9ycy5MSUdIVF9HUkFZCisgICAgICAgIGJ1dHRvbi5zZXRfbGFiZWwoIjxzcGFuIHNpemU9J2xhcmdlJyBjb2xvcj0nJXMnPjxiPiVzPC9iPjwvc3Bhbj4iICUgKGNvbG91ciwgZ29iamVjdC5tYXJrdXBfZXNjYXBlX3RleHQoYnV0dG9uLnRleHQpKSkKKyAgICAgICAgYnV0dG9uLmNoaWxkLnNldF91c2VfbWFya3VwKFRydWUpCisKK2NsYXNzIEhvYkltYWdlQnV0dG9uKGd0ay5CdXR0b24pOgorICAgICIiIgorICAgIEEgZ3RrLkJ1dHRvbiB3aXRoIGFuIGljb24gYW5kIHR3byByb3dzIG9mIHRleHQsIHRoZSBzZWNvbmQgb2Ygd2hpY2ggaXMKKyAgICBkaXNwbGF5ZWQgaW4gYSBibGVuZGVkIGNvbG91ci4KKworICAgIHByaW1hcnlfdGV4dDogdGhlIG1haW4gYnV0dG9uIGxhYmVsCisgICAgc2Vjb25kYXJ5X3RleHQ6IG9wdGlvbmFsIHNlY29uZCBsaW5lIG9mIHRleHQKKyAgICBpY29uX3BhdGg6IHBhdGggdG8gdGhlIGljb24gZmlsZSB0byBkaXNwbGF5IG9uIHRoZSBidXR0b24KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJpbWFyeV90ZXh0LCBzZWNvbmRhcnlfdGV4dD0iIiwgaWNvbl9wYXRoPSIiLCBob3Zlcl9pY29uX3BhdGg9IiIpOgorICAgICAgICBndGsuQnV0dG9uLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuc2V0X3JlbGllZihndGsuUkVMSUVGX05PTkUpCisKKyAgICAgICAgc2VsZi5pY29uX3BhdGggPSBpY29uX3BhdGgKKyAgICAgICAgc2VsZi5ob3Zlcl9pY29uX3BhdGggPSBob3Zlcl9pY29uX3BhdGgKKworICAgICAgICBoYm94ID0gZ3RrLkhCb3goRmFsc2UsIDEwKQorICAgICAgICBoYm94LnNob3coKQorICAgICAgICBzZWxmLmFkZChoYm94KQorICAgICAgICBzZWxmLmljb24gPSBndGsuSW1hZ2UoKQorICAgICAgICBzZWxmLmljb24uc2V0X2Zyb21fZmlsZShzZWxmLmljb25fcGF0aCkKKyAgICAgICAgc2VsZi5pY29uLnNldF9hbGlnbm1lbnQoMC41LCAwLjApCisgICAgICAgIHNlbGYuaWNvbi5zaG93KCkKKyAgICAgICAgaWYgc2VsZi5ob3Zlcl9pY29uX3BhdGggYW5kIGxlbihzZWxmLmhvdmVyX2ljb25fcGF0aCk6CisgICAgICAgICAgICBzZWxmLmNvbm5lY3QoImVudGVyLW5vdGlmeS1ldmVudCIsIHNlbGYuc2V0X2hvdmVyX2ljb25fY2IpCisgICAgICAgICAgICBzZWxmLmNvbm5lY3QoImxlYXZlLW5vdGlmeS1ldmVudCIsIHNlbGYuc2V0X2ljb25fY2IpCisgICAgICAgIGhib3gucGFja19zdGFydChzZWxmLmljb24sIEZhbHNlLCBGYWxzZSwgMCkKKyAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBsYWJlbC5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICBjb2xvdXIgPSBzb2Z0ZW5fY29sb3IobGFiZWwpCisgICAgICAgIG1hcmsgPSAiPHNwYW4gc2l6ZT0neC1sYXJnZSc+JXM8L3NwYW4+XG48c3BhbiBzaXplPSdtZWRpdW0nIGZnY29sb3I9JyVzJyB3ZWlnaHQ9J3VsdHJhbGlnaHQnPiVzPC9zcGFuPiIgJSAocHJpbWFyeV90ZXh0LCBjb2xvdXIsIHNlY29uZGFyeV90ZXh0KQorICAgICAgICBsYWJlbC5zZXRfbWFya3VwKG1hcmspCisgICAgICAgIGxhYmVsLnNob3coKQorICAgICAgICBoYm94LnBhY2tfc3RhcnQobGFiZWwsIFRydWUsIFRydWUsIDApCisKKyAgICBkZWYgc2V0X2hvdmVyX2ljb25fY2Ioc2VsZiwgd2lkZ2V0LCBldmVudCk6CisgICAgICAgIHNlbGYuaWNvbi5zZXRfZnJvbV9maWxlKHNlbGYuaG92ZXJfaWNvbl9wYXRoKQorCisgICAgZGVmIHNldF9pY29uX2NiKHNlbGYsIHdpZGdldCwgZXZlbnQpOgorICAgICAgICBzZWxmLmljb24uc2V0X2Zyb21fZmlsZShzZWxmLmljb25fcGF0aCkKKworY2xhc3MgSG9iSW5mb0J1dHRvbihndGsuRXZlbnRCb3gpOgorICAgICIiIgorICAgIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIGJ1dHRvbi1saWtlIHdpZGdldCBwZXIgdGhlIEhvYiB2aXN1YWwgYW5kIFVYIGRlc2lnbnMKKyAgICB3aGljaCB3aWxsIGRpc3BsYXkgYSBwZXJzaXN0ZW50IHRvb2x0aXAsIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRpcF9tYXJrdXAsIHdoZW4KKyAgICBjbGlja2VkLgorCisgICAgdGlwX21hcmt1cDogdGhlIFBhbmdvIE1hcmt1cCB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHBlcnNpc3RlbnQgdG9vbHRpcAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aXBfbWFya3VwLCBwYXJlbnQ9Tm9uZSk6CisgICAgICAgIGd0ay5FdmVudEJveC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmltYWdlID0gZ3RrLkltYWdlKCkKKyAgICAgICAgc2VsZi5pbWFnZS5zZXRfZnJvbV9maWxlKAorICAgICAgICBoaWMuSUNPTl9JTkZPX0RJU1BMQVlfRklMRSkKKyAgICAgICAgc2VsZi5pbWFnZS5zaG93KCkKKyAgICAgICAgc2VsZi5hZGQoc2VsZi5pbWFnZSkKKyAgICAgICAgc2VsZi50aXBfbWFya3VwID0gdGlwX21hcmt1cAorICAgICAgICBzZWxmLm15X3BhcmVudCA9IHBhcmVudAorCisgICAgICAgIHNlbGYuc2V0X2V2ZW50cyhndGsuZ2RrLkJVVFRPTl9SRUxFQVNFIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIGd0ay5nZGsuRU5URVJfTk9USUZZX01BU0sgfAorICAgICAgICAgICAgICAgICAgICAgICAgZ3RrLmdkay5MRUFWRV9OT1RJRllfTUFTSykKKworICAgICAgICBzZWxmLmNvbm5lY3QoImJ1dHRvbi1yZWxlYXNlLWV2ZW50Iiwgc2VsZi5idXR0b25fcmVsZWFzZV9jYikKKyAgICAgICAgc2VsZi5jb25uZWN0KCJlbnRlci1ub3RpZnktZXZlbnQiLCBzZWxmLm1vdXNlX2luX2NiKQorICAgICAgICBzZWxmLmNvbm5lY3QoImxlYXZlLW5vdGlmeS1ldmVudCIsIHNlbGYubW91c2Vfb3V0X2NiKQorCisgICAgIiIiCisgICAgV2hlbiB0aGUgbW91c2UgY2xpY2sgaXMgcmVsZWFzZWQgZW11bGF0ZSBhIGJ1dHRvbi1jbGljayBhbmQgc2hvdyB0aGUgYXNzb2NpYXRlZAorICAgIFBlcnNpc3RlbnRUb29sdGlwCisgICAgIiIiCisgICAgZGVmIGJ1dHRvbl9yZWxlYXNlX2NiKHNlbGYsIHdpZGdldCwgZXZlbnQpOgorICAgICAgICBmcm9tIGJiLnVpLmNydW1icy5oaWcucHJvcGVydHlkaWFsb2cgaW1wb3J0IFByb3BlcnR5RGlhbG9nCisgICAgICAgIHNlbGYuZGlhbG9nID0gUHJvcGVydHlEaWFsb2codGl0bGUgPSAnJywKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gc2VsZi5teV9wYXJlbnQsCisgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uID0gc2VsZi50aXBfbWFya3VwLAorICAgICAgICAgICAgICAgICAgICBmbGFncyA9IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVAorICAgICAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX05PX1NFUEFSQVRPUikKKworICAgICAgICBidXR0b24gPSBzZWxmLmRpYWxvZy5hZGRfYnV0dG9uKCJDbG9zZSIsIGd0ay5SRVNQT05TRV9DQU5DRUwpCisgICAgICAgIEhvYkFsdEJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBidXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIGxhbWJkYSB3OiBzZWxmLmRpYWxvZy5kZXN0cm95KCkpCisgICAgICAgIHNlbGYuZGlhbG9nLnNob3dfYWxsKCkKKyAgICAgICAgc2VsZi5kaWFsb2cucnVuKCkKKworICAgICIiIgorICAgIENoYW5nZSB0byB0aGUgcHJlbGlnaHQgaW1hZ2Ugd2hlbiB0aGUgbW91c2UgZW50ZXJzIHRoZSB3aWRnZXQKKyAgICAiIiIKKyAgICBkZWYgbW91c2VfaW5fY2Ioc2VsZiwgd2lkZ2V0LCBldmVudCk6CisgICAgICAgIHNlbGYuaW1hZ2Uuc2V0X2Zyb21fZmlsZShoaWMuSUNPTl9JTkZPX0hPVkVSX0ZJTEUpCisKKyAgICAiIiIKKyAgICBDaGFuZ2UgdG8gdGhlIHN0b2NrIGltYWdlIHdoZW4gdGhlIG1vdXNlIGVudGVycyB0aGUgd2lkZ2V0CisgICAgIiIiCisgICAgZGVmIG1vdXNlX291dF9jYihzZWxmLCB3aWRnZXQsIGV2ZW50KToKKyAgICAgICAgc2VsZi5pbWFnZS5zZXRfZnJvbV9maWxlKGhpYy5JQ09OX0lORk9fRElTUExBWV9GSUxFKQorCitjbGFzcyBIb2JJbmRpY2F0b3IoZ3RrLkRyYXdpbmdBcmVhKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY291bnQpOgorICAgICAgICBndGsuRHJhd2luZ0FyZWEuX19pbml0X18oc2VsZikKKyAgICAgICAgIyBTZXQgbm8gd2luZG93IGZvciB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kCisgICAgICAgIHNlbGYuc2V0X2hhc193aW5kb3coRmFsc2UpCisgICAgICAgIHNlbGYuc2V0X3NpemVfcmVxdWVzdCgzOCwzOCkKKyAgICAgICAgIyBXZSBuZWVkIHRvIHBhc3MgdGhyb3VnaCBidXR0b24gY2xpY2tzCisgICAgICAgIHNlbGYuYWRkX2V2ZW50cyhndGsuZ2RrLkJVVFRPTl9QUkVTU19NQVNLIHwgZ3RrLmdkay5CVVRUT05fUkVMRUFTRV9NQVNLKQorCisgICAgICAgIHNlbGYuY29ubmVjdCgnZXhwb3NlLWV2ZW50Jywgc2VsZi5leHBvc2UpCisKKyAgICAgICAgc2VsZi5jb3VudCA9IGNvdW50CisgICAgICAgIHNlbGYuY29sb3IgPSBIb2JDb2xvcnMuR1JBWQorCisgICAgZGVmIGV4cG9zZShzZWxmLCB3aWRnZXQsIGV2ZW50KToKKyAgICAgICAgaWYgc2VsZi5jb3VudCBhbmQgc2VsZi5jb3VudCA+IDA6CisgICAgICAgICAgICBjdHggPSB3aWRnZXQud2luZG93LmNhaXJvX2NyZWF0ZSgpCisKKyAgICAgICAgICAgIHgsIHksIHcsIGggPSBzZWxmLmFsbG9jYXRpb24KKworICAgICAgICAgICAgY3R4LnNldF9vcGVyYXRvcihjYWlyby5PUEVSQVRPUl9PVkVSKQorICAgICAgICAgICAgY3R4LnNldF9zb3VyY2VfY29sb3IoZ3RrLmdkay5jb2xvcl9wYXJzZShzZWxmLmNvbG9yKSkKKyAgICAgICAgICAgIGN0eC50cmFuc2xhdGUody8yLCBoLzIpCisgICAgICAgICAgICBjdHguYXJjKHgsIHksIG1pbih3LGgpLzIgLSAyLCAwLCAyKm1hdGgucGkpCisgICAgICAgICAgICBjdHguZmlsbF9wcmVzZXJ2ZSgpCisKKyAgICAgICAgICAgIGxheW91dCA9IHNlbGYuY3JlYXRlX3BhbmdvX2xheW91dChzdHIoc2VsZi5jb3VudCkpCisgICAgICAgICAgICB0ZXh0dywgdGV4dGggPSBsYXlvdXQuZ2V0X3BpeGVsX3NpemUoKQorICAgICAgICAgICAgeCA9ICh3LzIpLSh0ZXh0dy8yKSArIHgKKyAgICAgICAgICAgIHkgPSAoaC8yKSAtICh0ZXh0aC8yKSArIHkKKyAgICAgICAgICAgIGN0eC5tb3ZlX3RvKHgsIHkpCisgICAgICAgICAgICBzZWxmLndpbmRvdy5kcmF3X2xheW91dChzZWxmLnN0eWxlLmxpZ2h0X2djW2d0ay5TVEFURV9OT1JNQUxdLCBpbnQoeCksIGludCh5KSwgbGF5b3V0KQorCisgICAgZGVmIHNldF9jb3VudChzZWxmLCBjb3VudCk6CisgICAgICAgIHNlbGYuY291bnQgPSBjb3VudAorCisgICAgZGVmIHNldF9hY3RpdmUoc2VsZiwgYWN0aXZlKToKKyAgICAgICAgaWYgYWN0aXZlOgorICAgICAgICAgICAgc2VsZi5jb2xvciA9IEhvYkNvbG9ycy5ERUVQX1JFRAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5jb2xvciA9IEhvYkNvbG9ycy5HUkFZCisKK2NsYXNzIEhvYlRhYkxhYmVsKGd0ay5IQm94KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGV4dCwgY291bnQ9MCk6CisgICAgICAgIGd0ay5IQm94Ll9faW5pdF9fKHNlbGYsIEZhbHNlLCAwKQorICAgICAgICBzZWxmLmluZGljYXRvciA9IEhvYkluZGljYXRvcihjb3VudCkKKyAgICAgICAgc2VsZi5pbmRpY2F0b3Iuc2hvdygpCisgICAgICAgIHNlbGYucGFja19lbmQoc2VsZi5pbmRpY2F0b3IsIEZhbHNlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5sYmwgPSBndGsuTGFiZWwodGV4dCkKKyAgICAgICAgc2VsZi5sYmwuc2V0X2FsaWdubWVudCgwLjAsIDAuNSkKKyAgICAgICAgc2VsZi5sYmwuc2hvdygpCisgICAgICAgIHNlbGYucGFja19lbmQoc2VsZi5sYmwsIFRydWUsIFRydWUsIDYpCisKKyAgICBkZWYgc2V0X2NvdW50KHNlbGYsIGNvdW50KToKKyAgICAgICAgc2VsZi5pbmRpY2F0b3Iuc2V0X2NvdW50KGNvdW50KQorCisgICAgZGVmIHNldF9hY3RpdmUoc2VsZiwgYWN0aXZlPVRydWUpOgorICAgICAgICBzZWxmLmluZGljYXRvci5zZXRfYWN0aXZlKGFjdGl2ZSkKKworY2xhc3MgSG9iTm90ZWJvb2soZ3RrLk5vdGVib29rKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGd0ay5Ob3RlYm9vay5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnNldF9wcm9wZXJ0eSgnaG9tb2dlbmVvdXMnLCBUcnVlKQorCisgICAgICAgIHNlbGYucGFnZXMgPSBbXQorCisgICAgICAgIHNlbGYuc2VhcmNoID0gTm9uZQorICAgICAgICBzZWxmLnNlYXJjaF9mb2N1cyA9IEZhbHNlCisgICAgICAgIHNlbGYucGFnZV9jaGFuZ2VkID0gRmFsc2UKKworICAgICAgICBzZWxmLmNvbm5lY3QoInN3aXRjaC1wYWdlIiwgc2VsZi5wYWdlX2NoYW5nZWRfY2IpCisKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisKKyAgICBkZWYgcGFnZV9jaGFuZ2VkX2NiKHNlbGYsIG5iLCBwYWdlLCBwYWdlX251bSk6CisgICAgICAgIGZvciBwLCBsYmwgaW4gZW51bWVyYXRlKHNlbGYucGFnZXMpOgorICAgICAgICAgICAgaWYgcCA9PSBwYWdlX251bToKKyAgICAgICAgICAgICAgICBsYmwuc2V0X2FjdGl2ZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxibC5zZXRfYWN0aXZlKEZhbHNlKQorCisgICAgICAgIGlmIHNlbGYuc2VhcmNoOgorICAgICAgICAgICAgc2VsZi5wYWdlX2NoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICBzZWxmLnJlc2V0X2VudHJ5KHNlbGYuc2VhcmNoLCBwYWdlX251bSkKKworICAgIGRlZiBhcHBlbmRfcGFnZShzZWxmLCBjaGlsZCwgdGFiX2xhYmVsLCB0YWJfdG9vbHRpcD1Ob25lKToKKyAgICAgICAgbGFiZWwgPSBIb2JUYWJMYWJlbCh0YWJfbGFiZWwpCisgICAgICAgIGlmIHRhYl90b29sdGlwOgorICAgICAgICAgICAgbGFiZWwuc2V0X3Rvb2x0aXBfdGV4dCh0YWJfdG9vbHRpcCkKKyAgICAgICAgbGFiZWwuc2V0X2FjdGl2ZShGYWxzZSkKKyAgICAgICAgc2VsZi5wYWdlcy5hcHBlbmQobGFiZWwpCisgICAgICAgIGd0ay5Ob3RlYm9vay5hcHBlbmRfcGFnZShzZWxmLCBjaGlsZCwgbGFiZWwpCisKKyAgICBkZWYgc2V0X2VudHJ5KHNlbGYsIG5hbWVzLCB0aXBzKToKKyAgICAgICAgc2VsZi5zZWFyY2ggPSBndGsuRW50cnkoKQorICAgICAgICBzZWxmLnNlYXJjaF9uYW1lcyA9IG5hbWVzCisgICAgICAgIHNlbGYuc2VhcmNoX3RpcHMgPSB0aXBzCisgICAgICAgIHN0eWxlID0gc2VsZi5zZWFyY2guZ2V0X3N0eWxlKCkKKyAgICAgICAgc3R5bGUudGV4dFtndGsuU1RBVEVfTk9STUFMXSA9IHNlbGYuZ2V0X2NvbG9ybWFwKCkuYWxsb2NfY29sb3IoSG9iQ29sb3JzLkdSQVksIEZhbHNlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5zZWFyY2guc2V0X3N0eWxlKHN0eWxlKQorICAgICAgICBzZWxmLnNlYXJjaC5zZXRfdGV4dChuYW1lc1swXSkKKyAgICAgICAgc2VsZi5zZWFyY2guc2V0X3Rvb2x0aXBfdGV4dChzZWxmLnNlYXJjaF90aXBzWzBdKQorICAgICAgICBzZWxmLnNlYXJjaC5wcm9wcy5oYXNfdG9vbHRpcCA9IFRydWUKKworICAgICAgICBzZWxmLnNlYXJjaC5zZXRfZWRpdGFibGUoRmFsc2UpCisgICAgICAgIHNlbGYuc2VhcmNoLnNldF9pY29uX2Zyb21fc3RvY2soZ3RrLkVOVFJZX0lDT05fU0VDT05EQVJZLCBndGsuU1RPQ0tfQ0xFQVIpCisgICAgICAgIHNlbGYuc2VhcmNoLnNldF9pY29uX3NlbnNpdGl2ZShndGsuRU5UUllfSUNPTl9TRUNPTkRBUlksIEZhbHNlKQorICAgICAgICBzZWxmLnNlYXJjaC5jb25uZWN0KCJpY29uLXJlbGVhc2UiLCBzZWxmLnNldF9zZWFyY2hfZW50cnlfY2xlYXJfY2IpCisgICAgICAgIHNlbGYuc2VhcmNoLnNldF93aWR0aF9jaGFycygzMCkKKyAgICAgICAgc2VsZi5zZWFyY2guc2hvdygpCisKKyAgICAgICAgc2VsZi5zZWFyY2guY29ubmVjdCgiZm9jdXMtaW4tZXZlbnQiLCBzZWxmLnNldF9zZWFyY2hfZW50cnlfZWRpdGFibGVfY2IpCisgICAgICAgIHNlbGYuc2VhcmNoLmNvbm5lY3QoImZvY3VzLW91dC1ldmVudCIsIHNlbGYuc2V0X3NlYXJjaF9lbnRyeV9yZXNldF9jYikKKyAgICAgICAgc2VsZi5zZXRfYWN0aW9uX3dpZGdldChzZWxmLnNlYXJjaCwgZ3RrLlBBQ0tfRU5EKQorCisgICAgZGVmIHNob3dfaW5kaWNhdG9yX2ljb24oc2VsZiwgdGl0bGUsIG51bWJlcik6CisgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLnBhZ2VzOgorICAgICAgICAgICAgaWYgY2hpbGQubGJsLmdldF9sYWJlbCgpID09IHRpdGxlOgorICAgICAgICAgICAgICAgIGNoaWxkLnNldF9jb3VudChudW1iZXIpCisKKyAgICBkZWYgaGlkZV9pbmRpY2F0b3JfaWNvbihzZWxmLCB0aXRsZSk6CisgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLnBhZ2VzOgorICAgICAgICAgICAgaWYgY2hpbGQubGJsLmdldF9sYWJlbCgpID09IHRpdGxlOgorICAgICAgICAgICAgICAgIGNoaWxkLnNldF9jb3VudCgwKQorCisgICAgZGVmIHNldF9zZWFyY2hfZW50cnlfZWRpdGFibGVfY2Ioc2VsZiwgc2VhcmNoLCBldmVudCk6CisgICAgICAgIHNlbGYuc2VhcmNoX2ZvY3VzID0gVHJ1ZQorICAgICAgICBzZWFyY2guc2V0X2VkaXRhYmxlKFRydWUpCisgICAgICAgIHRleHQgPSBzZWFyY2guZ2V0X3RleHQoKQorICAgICAgICBpZiB0ZXh0IGluIHNlbGYuc2VhcmNoX25hbWVzOgorICAgICAgICAgICAgc2VhcmNoLnNldF90ZXh0KCIiKQorICAgICAgICBzdHlsZSA9IHNlbGYuc2VhcmNoLmdldF9zdHlsZSgpCisgICAgICAgIHN0eWxlLnRleHRbZ3RrLlNUQVRFX05PUk1BTF0gPSBzZWxmLmdldF9jb2xvcm1hcCgpLmFsbG9jX2NvbG9yKEhvYkNvbG9ycy5CTEFDSywgRmFsc2UsIEZhbHNlKQorICAgICAgICBzZWFyY2guc2V0X3N0eWxlKHN0eWxlKQorCisgICAgZGVmIHNldF9zZWFyY2hfZW50cnlfcmVzZXRfY2Ioc2VsZiwgc2VhcmNoLCBldmVudCk6CisgICAgICAgIHBhZ2VfbnVtID0gc2VsZi5nZXRfY3VycmVudF9wYWdlKCkKKyAgICAgICAgdGV4dCA9IHNlYXJjaC5nZXRfdGV4dCgpCisgICAgICAgIGlmIG5vdCB0ZXh0OgorICAgICAgICAgICAgc2VsZi5yZXNldF9lbnRyeShzZWFyY2gsIHBhZ2VfbnVtKQorCisgICAgZGVmIHJlc2V0X2VudHJ5KHNlbGYsIGVudHJ5LCBwYWdlX251bSk6CisgICAgICAgIHN0eWxlID0gZW50cnkuZ2V0X3N0eWxlKCkKKyAgICAgICAgc3R5bGUudGV4dFtndGsuU1RBVEVfTk9STUFMXSA9IHNlbGYuZ2V0X2NvbG9ybWFwKCkuYWxsb2NfY29sb3IoSG9iQ29sb3JzLkdSQVksIEZhbHNlLCBGYWxzZSkKKyAgICAgICAgZW50cnkuc2V0X3N0eWxlKHN0eWxlKQorICAgICAgICBlbnRyeS5zZXRfdGV4dChzZWxmLnNlYXJjaF9uYW1lc1twYWdlX251bV0pCisgICAgICAgIGVudHJ5LnNldF90b29sdGlwX3RleHQoc2VsZi5zZWFyY2hfdGlwc1twYWdlX251bV0pCisgICAgICAgIGVudHJ5LnNldF9lZGl0YWJsZShGYWxzZSkKKyAgICAgICAgZW50cnkuc2V0X2ljb25fc2Vuc2l0aXZlKGd0ay5FTlRSWV9JQ09OX1NFQ09OREFSWSwgRmFsc2UpCisKKyAgICBkZWYgc2V0X3NlYXJjaF9lbnRyeV9jbGVhcl9jYihzZWxmLCBzZWFyY2gsIGljb25fcG9zLCBldmVudCk6CisgICAgICAgIGlmIHNlYXJjaC5nZXRfZWRpdGFibGUoKSA9PSBUcnVlOgorICAgICAgICAgICAgc2VhcmNoLnNldF90ZXh0KCIiKQorICAgICAgICBzZWFyY2guc2V0X2ljb25fc2Vuc2l0aXZlKGd0ay5FTlRSWV9JQ09OX1NFQ09OREFSWSwgRmFsc2UpCisgICAgICAgIHNlYXJjaC5ncmFiX2ZvY3VzKCkKKworICAgIGRlZiBzZXRfcGFnZShzZWxmLCB0aXRsZSk6CisgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLnBhZ2VzOgorICAgICAgICAgICAgaWYgY2hpbGQubGJsLmdldF9sYWJlbCgpID09IHRpdGxlOgorICAgICAgICAgICAgICAgIGNoaWxkLmdyYWJfZm9jdXMoKQorICAgICAgICAgICAgICAgIHNlbGYuc2V0X2N1cnJlbnRfcGFnZShzZWxmLnBhZ2VzLmluZGV4KGNoaWxkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKworY2xhc3MgSG9iV2FycENlbGxSZW5kZXJlclRleHQoZ3RrLkNlbGxSZW5kZXJlclRleHQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb2xfbnVtYmVyKToKKyAgICAgICAgZ3RrLkNlbGxSZW5kZXJlclRleHQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5zZXRfcHJvcGVydHkoIndyYXAtbW9kZSIsIHBhbmdvLldSQVBfV09SRF9DSEFSKQorICAgICAgICBzZWxmLnNldF9wcm9wZXJ0eSgid3JhcC13aWR0aCIsIDMwMCkgIyBkZWZhdWx0IHZhbHVlIHdyYXAgd2lkdGggaXMgMzAwCisgICAgICAgIHNlbGYuY29sX24gPSBjb2xfbnVtYmVyCisKKyAgICBkZWYgZG9fcmVuZGVyKHNlbGYsIHdpbmRvdywgd2lkZ2V0LCBiYWNrZ3JvdW5kX2FyZWEsIGNlbGxfYXJlYSwgZXhwb3NlX2FyZWEsIGZsYWdzKToKKyAgICAgICAgaWYgd2lkZ2V0OgorICAgICAgICAgICAgc2VsZi5wcm9wcy53cmFwX3dpZHRoID0gc2VsZi5nZXRfcmVzaXplZF93cmFwX3dpZHRoKHdpZGdldCwgd2lkZ2V0LmdldF9jb2x1bW4oc2VsZi5jb2xfbikpCisgICAgICAgIHJldHVybiBndGsuQ2VsbFJlbmRlcmVyVGV4dC5kb19yZW5kZXIoc2VsZiwgd2luZG93LCB3aWRnZXQsIGJhY2tncm91bmRfYXJlYSwgY2VsbF9hcmVhLCBleHBvc2VfYXJlYSwgZmxhZ3MpCisKKyAgICBkZWYgZ2V0X3Jlc2l6ZWRfd3JhcF93aWR0aChzZWxmLCB0cmVldmlldywgY29sdW1uKToKKyAgICAgICAgb3RoZXJDb2xzID0gW10KKyAgICAgICAgZm9yIGNvbCBpbiB0cmVldmlldy5nZXRfY29sdW1ucygpOgorICAgICAgICAgICAgaWYgY29sICE9IGNvbHVtbjoKKyAgICAgICAgICAgICAgICBvdGhlckNvbHMuYXBwZW5kKGNvbCkKKyAgICAgICAgYWRqd2lkdGggPSB0cmVldmlldy5hbGxvY2F0aW9uLndpZHRoIC0gc3VtKGMuZ2V0X3dpZHRoKCkgZm9yIGMgaW4gb3RoZXJDb2xzKQorICAgICAgICBhZGp3aWR0aCAtPSB0cmVldmlldy5zdHlsZV9nZXRfcHJvcGVydHkoImhvcml6b250YWwtc2VwYXJhdG9yIikgKiA0CisgICAgICAgIGlmIHNlbGYucHJvcHMud3JhcF93aWR0aCA9PSBhZGp3aWR0aCBvciBhZGp3aWR0aCA8PSAwOgorICAgICAgICAgICAgICAgIGFkandpZHRoID0gc2VsZi5wcm9wcy53cmFwX3dpZHRoCisgICAgICAgIHJldHVybiBhZGp3aWR0aAorCitnb2JqZWN0LnR5cGVfcmVnaXN0ZXIoSG9iV2FycENlbGxSZW5kZXJlclRleHQpCisKK2NsYXNzIEhvYkljb25DaGVja2VyKGhpYyk6CisgICAgZGVmIHNldF9ob2JfaWNvbl90b19zdG9ja19pY29uKHNlbGYsIGZpbGVfcGF0aCwgc3RvY2tfaWQ9IiIpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwaXhidWYgPSBndGsuZ2RrLnBpeGJ1Zl9uZXdfZnJvbV9maWxlKGZpbGVfcGF0aCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgaWYgc3RvY2tfaWQgYW5kIChndGsuaWNvbl9mYWN0b3J5X2xvb2t1cF9kZWZhdWx0KHN0b2NrX2lkKSA9PSBOb25lKToKKyAgICAgICAgICAgIGljb25fZmFjdG9yeSA9IGd0ay5JY29uRmFjdG9yeSgpCisgICAgICAgICAgICBpY29uX2ZhY3RvcnkuYWRkX2RlZmF1bHQoKQorICAgICAgICAgICAgaWNvbl9mYWN0b3J5LmFkZChzdG9ja19pZCwgZ3RrLkljb25TZXQocGl4YnVmKSkKKyAgICAgICAgICAgIGd0ay5zdG9ja19hZGQoWyhzdG9ja19pZCwgJ19sYWJlbCcsIDAsIDAsICcnKV0pCisKKyAgICAgICAgICAgIHJldHVybiBpY29uX2ZhY3RvcnkubG9va3VwKHN0b2NrX2lkKQorCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICAiIiIKKyAgICBGb3IgbWFrZSBob2IgaWNvbiBjb25zaXN0ZW50bHkgYnkgcmVxdWVzdCwgYW5kIGF2b2lkIGljb24gdmlldyBkaWZmIGJ5IHN5c3RlbSBvciBndGsgdmVyc2lvbiwgd2UgdXNlIHNvbWUgJ2hvYiBpY29uJyB0byByZXBsYWNlIHRoZSAnZ3RrIGljb24nLgorICAgIHRoaXMgZnVuY3Rpb24gY2hlY2sgdGhlIHN0b2NrX2lkIGFuZCBtYWtlIGhvYl9pZCB0byByZXBsYWNlZCB0aGUgZ3RrX2lkIHRoZW4gcmV0dXJuIGl0IG9yICIiCisgICAgIiIiCisgICAgZGVmIGNoZWNrX3N0b2NrX2ljb24oc2VsZiwgc3RvY2tfbmFtZT0iIik6CisgICAgICAgIEhPQl9DSEVDS19TVE9DS19OQU1FID0geworICAgICAgICAgICAgKCdoaWMtZGlhbG9nLWluZm8nLCAnZ3RrLWRpYWxvZy1pbmZvJywgJ2RpYWxvZy1pbmZvJykgICAgICAgICAgIDogc2VsZi5JQ09OX0lORElfSU5GT19GSUxFLAorICAgICAgICAgICAgKCdoaWMtb2snLCAgICAgICAgICAnZ3RrLW9rJywgICAgICAgICAgICdvaycpICAgICAgICAgICAgICAgICAgIDogc2VsZi5JQ09OX0lORElfVElDS19GSUxFLAorICAgICAgICAgICAgKCdoaWMtZGlhbG9nLWVycm9yJywgJ2d0ay1kaWFsb2ctZXJyb3InLCAnZGlhbG9nLWVycm9yJykgICAgICAgIDogc2VsZi5JQ09OX0lORElfRVJST1JfRklMRSwKKyAgICAgICAgICAgICgnaGljLWRpYWxvZy13YXJuaW5nJywgJ2d0ay1kaWFsb2ctd2FybmluZycsICdkaWFsb2ctd2FybmluZycpICA6IHNlbGYuSUNPTl9JTkRJX0FMRVJUX0ZJTEUsCisgICAgICAgICAgICAoJ2hpYy10YXNrLXJlZnJlc2gnLCAnZ3RrLWV4ZWN1dGUnLCAnZXhlY3V0ZScpICAgICAgICAgICAgICAgICAgOiBzZWxmLklDT05fSU5ESV9SRUZSRVNIX0ZJTEUsCisgICAgICAgIH0KKyAgICAgICAgdmFsaWRfc3RvY2tfaWQgPSBzdG9ja19uYW1lCisgICAgICAgIGlmIHN0b2NrX25hbWU6CisgICAgICAgICAgICBmb3IgbmFtZXMsIHBhdGggaW4gSE9CX0NIRUNLX1NUT0NLX05BTUUuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgc3RvY2tfbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgdmFsaWRfc3RvY2tfaWQgPSBuYW1lc1swXQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZ3RrLmljb25fZmFjdG9yeV9sb29rdXBfZGVmYXVsdCh2YWxpZF9zdG9ja19pZCk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldF9ob2JfaWNvbl90b19zdG9ja19pY29uKHBhdGgsIHZhbGlkX3N0b2NrX2lkKQorCisgICAgICAgIHJldHVybiB2YWxpZF9zdG9ja19pZAorCitjbGFzcyBIb2JDZWxsUmVuZGVyZXJDb250cm9sbGVyKGdvYmplY3QuR09iamVjdCk6CisgICAgKE1PREVfQ1lDTEVfUlVOTklORywgTU9ERV9PTkVfU0hPUlQpID0gcmFuZ2UoMikKKyAgICBfX2dzaWduYWxzX18gPSB7CisgICAgICAgICJydW4tdGltZXItc3RvcHBlZCIgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSksCisgICAgfQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBydW5uaW5nbW9kZT1NT0RFX0NZQ0xFX1JVTk5JTkcsIGlzX2RyYXdfcm93PUZhbHNlKToKKyAgICAgICAgZ29iamVjdC5HT2JqZWN0Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYudGltZW91dF9pZCA9IE5vbmUKKyAgICAgICAgc2VsZi5jdXJyZW50X2FuZ2xlX3BvcyA9IDAuMAorICAgICAgICBzZWxmLnN0ZXBfYW5nbGUgPSAwLjAKKyAgICAgICAgc2VsZi50cmVlX2hlYWRlcnNfaGVpZ2h0ID0gMAorICAgICAgICBzZWxmLnJ1bm5pbmdfY2VsbF9hcmVhcyA9IFtdCisgICAgICAgIHNlbGYucnVubmluZ19tb2RlID0gcnVubmluZ21vZGUKKyAgICAgICAgc2VsZi5pc19xdWV1ZV9kcmF3X3Jvd19hcmVhID0gaXNfZHJhd19yb3cKKyAgICAgICAgc2VsZi5mb3JjZV9zdG9wX2VuYWJsZSA9IEZhbHNlCisKKyAgICBkZWYgaXNfYWN0aXZlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnRpbWVvdXRfaWQ6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgcmVzZXRfcnVuKHNlbGYpOgorICAgICAgICBzZWxmLmZvcmNlX3N0b3AoKQorICAgICAgICBzZWxmLnJ1bm5pbmdfY2VsbF9hcmVhcyA9IFtdCisgICAgICAgIHNlbGYuY3VycmVudF9hbmdsZV9wb3MgPSAwLjAKKyAgICAgICAgc2VsZi5zdGVwX2FuZ2xlID0gMC4wCisKKyAgICAnJycgdGltZV9pdGVydmFsOiAoMX4xMDAwKW1zLCB3aGljaCB3aWxsIGJlIGFzIHRoZSBiYXNpYyBpbnRlcnZhbCBjb3VudCBmb3IgdGltZXIKKyAgICAgICAgaW5pdF91c3JkYXRhOiB0aGUgY3VycmVudCBkYXRhIHdoaWNoIHJlbGF0ZWQgdGhlIHByb2dyZXNzLWJhciB3aWxsIGJlIGF0CisgICAgICAgIG1pbl91c3JkYXRhOiB0aGUgcmFuZ2Ugb2YgbWluIG9mIHVzZXIgZGF0YQorICAgICAgICBtYXhfdXNyZGF0YTogdGhlIHJhbmdlIG9mIG1heCBvZiB1c2VyIGRhdGEKKyAgICAgICAgc3RlcDogZWFjaCBzdGVwIHdoaWNoIHlvdSB3YW50IHRvIHByb2dyZXNzCisgICAgICAgIE5vdGU6IHRoZSBpbml0X3VzcmRhdGEgc2hvdWxkIGluIHRoZSByYW5nZSBvZiBmcm9tIG1pbiB0byBtYXgsIGFuZCBtYXggc2hvdWxkID4gbWluCisgICAgICAgICAgICAgc3RlcCBzaG91bGQgPCAobWF4IC0gbWluKQorICAgICcnJworICAgIGRlZiBzdGFydF9ydW4oc2VsZiwgdGltZV9pdGVydmFsLCBpbml0X3VzcmRhdGEsIG1pbl91c3JkYXRhLCBtYXhfdXNyZGF0YSwgc3RlcCwgdHJlZSk6CisgICAgICAgIGlmIChub3QgdGltZV9pdGVydmFsKSBvciAobm90IG1heF91c3JkYXRhKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB1c3JfcmFuZ2UgPSAobWF4X3VzcmRhdGEgLSBtaW5fdXNyZGF0YSkgKiAxLjAKKyAgICAgICAgc2VsZi5jdXJyZW50X2FuZ2xlX3BvcyA9IChpbml0X3VzcmRhdGEgKiAxLjApIC8gdXNyX3JhbmdlCisgICAgICAgIHNlbGYuc3RlcF9hbmdsZSA9IChzdGVwICogMSkgLyB1c3JfcmFuZ2UKKyAgICAgICAgc2VsZi50aW1lb3V0X2lkID0gZ29iamVjdC50aW1lb3V0X2FkZChpbnQodGltZV9pdGVydmFsKSwKKyAgICAgICAgc2VsZi5tYWtlX2ltYWdlX29uX3Byb2dyZXNzaW5nX2NiLCB0cmVlKQorICAgICAgICBzZWxmLnRyZWVfaGVhZGVyc19oZWlnaHQgPSBzZWxmLmdldF90cmVldmlld19oZWFkZXJzX2hlaWdodCh0cmVlKQorICAgICAgICBzZWxmLmZvcmNlX3N0b3BfZW5hYmxlID0gRmFsc2UKKworICAgIGRlZiBmb3JjZV9zdG9wKHNlbGYpOgorICAgICAgICBzZWxmLmVtaXQoInJ1bi10aW1lci1zdG9wcGVkIikKKyAgICAgICAgc2VsZi5mb3JjZV9zdG9wX2VuYWJsZSA9IFRydWUKKyAgICAgICAgaWYgc2VsZi50aW1lb3V0X2lkOgorICAgICAgICAgICAgaWYgZ29iamVjdC5zb3VyY2VfcmVtb3ZlKHNlbGYudGltZW91dF9pZCk6CisgICAgICAgICAgICAgICAgc2VsZi50aW1lb3V0X2lkID0gTm9uZQorCisgICAgZGVmIG9uX2RyYXdfcGl4YnVmX2NiKHNlbGYsIHBpeGJ1ZiwgY3IsIHgsIHksIGltZ193aWR0aCwgaW1nX2hlaWdodCwgZG9fcmVmcmVzaD1UcnVlKToKKyAgICAgICAgaWYgcGl4YnVmOgorICAgICAgICAgICAgciA9IG1heChpbWdfd2lkdGgvMiwgaW1nX2hlaWdodC8yKQorICAgICAgICAgICAgY3IudHJhbnNsYXRlKHggKyByLCB5ICsgcikKKyAgICAgICAgICAgIGlmIGRvX3JlZnJlc2g6CisgICAgICAgICAgICAgICAgY3Iucm90YXRlKDIgKiBtYXRoLnBpICogc2VsZi5jdXJyZW50X2FuZ2xlX3BvcykKKworICAgICAgICAgICAgY3Iuc2V0X3NvdXJjZV9waXhidWYocGl4YnVmLCAtaW1nX3dpZHRoLzIsIC1pbWdfaGVpZ2h0LzIpCisgICAgICAgICAgICBjci5wYWludCgpCisKKyAgICBkZWYgb25fZHJhd19mYWRlaW5vdXRfY2Ioc2VsZiwgY3IsIGNvbG9yLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkb19mYWRlb3V0PVRydWUpOgorICAgICAgICBpZiBkb19mYWRlb3V0OgorICAgICAgICAgICAgYWxwaGEgPSBzZWxmLmN1cnJlbnRfYW5nbGVfcG9zICogMC44CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhbHBoYSA9ICgxLjAgLSBzZWxmLmN1cnJlbnRfYW5nbGVfcG9zKSAqIDAuOAorCisgICAgICAgIGNyLnNldF9zb3VyY2VfcmdiYShjb2xvci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVlLCBhbHBoYSkKKyAgICAgICAgY3IucmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQpCisgICAgICAgIGNyLmZpbGwoKQorCisgICAgZGVmIGdldF90cmVldmlld19oZWFkZXJzX2hlaWdodChzZWxmLCB0cmVlKToKKyAgICAgICAgaWYgdHJlZSBhbmQgKHRyZWUuZ2V0X3Byb3BlcnR5KCJoZWFkZXJzLXZpc2libGUiKSA9PSBUcnVlKToKKyAgICAgICAgICAgIGhlaWdodCA9IHRyZWUuZ2V0X2FsbG9jYXRpb24oKS5oZWlnaHQgLSB0cmVlLmdldF9iaW5fd2luZG93KCkuZ2V0X3NpemUoKVsxXQorICAgICAgICAgICAgcmV0dXJuIGhlaWdodAorCisgICAgICAgIHJldHVybiAwCisKKyAgICBkZWYgbWFrZV9pbWFnZV9vbl9wcm9ncmVzc2luZ19jYihzZWxmLCB0cmVlKToKKyAgICAgICAgc2VsZi5jdXJyZW50X2FuZ2xlX3BvcyArPSBzZWxmLnN0ZXBfYW5nbGUKKyAgICAgICAgaWYgc2VsZi5ydW5uaW5nX21vZGUgPT0gc2VsZi5NT0RFX0NZQ0xFX1JVTk5JTkc6CisgICAgICAgICAgICBpZiAoc2VsZi5jdXJyZW50X2FuZ2xlX3BvcyA+PSAxKToKKyAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRfYW5nbGVfcG9zID0gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2VsZi5jdXJyZW50X2FuZ2xlX3BvcyA+IDE6CisgICAgICAgICAgICAgICAgc2VsZi5mb3JjZV9zdG9wKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBzZWxmLmlzX3F1ZXVlX2RyYXdfcm93X2FyZWE6CisgICAgICAgICAgICBmb3IgcGF0aCBpbiBzZWxmLnJ1bm5pbmdfY2VsbF9hcmVhczoKKyAgICAgICAgICAgICAgICByZWN0ID0gdHJlZS5nZXRfY2VsbF9hcmVhKHBhdGgsIHRyZWUuZ2V0X2NvbHVtbigwKSkKKyAgICAgICAgICAgICAgICByb3dfeCwgXywgcm93X3dpZHRoLCBfID0gdHJlZS5nZXRfdmlzaWJsZV9yZWN0KCkKKyAgICAgICAgICAgICAgICB0cmVlLnF1ZXVlX2RyYXdfYXJlYShyb3dfeCwgcmVjdC55ICsgc2VsZi50cmVlX2hlYWRlcnNfaGVpZ2h0LCByb3dfd2lkdGgsIHJlY3QuaGVpZ2h0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIHJlY3QgaW4gc2VsZi5ydW5uaW5nX2NlbGxfYXJlYXM6CisgICAgICAgICAgICAgICAgdHJlZS5xdWV1ZV9kcmF3X2FyZWEocmVjdC54LCByZWN0LnkgKyBzZWxmLnRyZWVfaGVhZGVyc19oZWlnaHQsIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KQorCisgICAgICAgIHJldHVybiAobm90IHNlbGYuZm9yY2Vfc3RvcF9lbmFibGUpCisKKyAgICBkZWYgYXBwZW5kX3J1bm5pbmdfY2VsbF9hcmVhKHNlbGYsIGNlbGxfYXJlYSk6CisgICAgICAgIGlmIGNlbGxfYXJlYSBhbmQgKGNlbGxfYXJlYSBub3QgaW4gc2VsZi5ydW5uaW5nX2NlbGxfYXJlYXMpOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nX2NlbGxfYXJlYXMuYXBwZW5kKGNlbGxfYXJlYSkKKworICAgIGRlZiByZW1vdmVfcnVubmluZ19jZWxsX2FyZWEoc2VsZiwgY2VsbF9hcmVhKToKKyAgICAgICAgaWYgY2VsbF9hcmVhIGluIHNlbGYucnVubmluZ19jZWxsX2FyZWFzOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nX2NlbGxfYXJlYXMucmVtb3ZlKGNlbGxfYXJlYSkKKyAgICAgICAgaWYgbm90IHNlbGYucnVubmluZ19jZWxsX2FyZWFzOgorICAgICAgICAgICAgc2VsZi5yZXNldF9ydW4oKQorCitnb2JqZWN0LnR5cGVfcmVnaXN0ZXIoSG9iQ2VsbFJlbmRlcmVyQ29udHJvbGxlcikKKworY2xhc3MgSG9iQ2VsbFJlbmRlcmVyUGl4YnVmKGd0ay5DZWxsUmVuZGVyZXJQaXhidWYpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgZ3RrLkNlbGxSZW5kZXJlclBpeGJ1Zi5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmNvbnRyb2wgPSBIb2JDZWxsUmVuZGVyZXJDb250cm9sbGVyKCkKKyAgICAgICAgIyBhZGQgaWNvbiBjaGVja2VyIGZvciBtYWtlIHRoZSBndGstaWNvbiB0cmFuc2ZlciB0byBob2ItaWNvbgorICAgICAgICBzZWxmLmNoZWNrZXIgPSBIb2JJY29uQ2hlY2tlcigpCisgICAgICAgIHNlbGYuc2V0X3Byb3BlcnR5KCJzdG9jay1zaXplIiwgZ3RrLklDT05fU0laRV9ETkQpCisKKyAgICBkZWYgZ2V0X3BpeGJ1Zl9mcm9tX3N0b2NrX2ljb24oc2VsZiwgd2lkZ2V0LCBzdG9ja19pZD0iIiwgc2l6ZT1ndGsuSUNPTl9TSVpFX0RJQUxPRyk6CisgICAgICAgIGlmIHdpZGdldCBhbmQgc3RvY2tfaWQgYW5kIGd0ay5pY29uX2ZhY3RvcnlfbG9va3VwX2RlZmF1bHQoc3RvY2tfaWQpOgorICAgICAgICAgICAgcmV0dXJuIHdpZGdldC5yZW5kZXJfaWNvbihzdG9ja19pZCwgc2l6ZSkKKworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHNldF9pY29uX25hbWVfdG9faWQoc2VsZiwgbmV3X25hbWUpOgorICAgICAgICBpZiBuZXdfbmFtZSBhbmQgdHlwZShuZXdfbmFtZSkgPT0gc3RyOgorICAgICAgICAgICAgIyBjaGVjayB0aGUgbmFtZSBpcyBuZWVkIHRvIHRyYW5zZmVyIHRvIGhvYiBpY29uIG9yIG5vdAorICAgICAgICAgICAgbmFtZSA9IHNlbGYuY2hlY2tlci5jaGVja19zdG9ja19pY29uKG5ld19uYW1lKQorICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCJoaWMiKSBvciBuYW1lLnN0YXJ0c3dpdGgoImd0ayIpOgorICAgICAgICAgICAgICAgIHN0b2NrX2lkID0gbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdG9ja19pZCA9ICdndGstJyArIG5hbWUKKworICAgICAgICByZXR1cm4gc3RvY2tfaWQKKworICAgICcnJyByZW5kZXIgY2VsbCBleGFjdGx5LCAiaWNvbi1uYW1lIiBpcyBwcmlvcml0eQorICAgICAgICBpZiB1c2UgdGhlICdoaWMtdGFzay1yZWZyZXNoJyB3aWxsIG1ha2UgdGhlIHBpeCBhbmltYXRpb24KKyAgICAgICAgaWYgJ3BpeCcgd2lsbCBjaGFuZ2UgdGhlIHBpeGJ1ZiBmb3IgaXQgZnJvbSB0aGUgcGl4YnVmIG9yIGltYWdlLgorICAgICcnJworICAgIGRlZiBkb19yZW5kZXIoc2VsZiwgd2luZG93LCB0cmVlLCBiYWNrZ3JvdW5kX2FyZWEsY2VsbF9hcmVhLCBleHBvc2VfYXJlYSwgZmxhZ3MpOgorICAgICAgICBpZiAobm90IHNlbGYuY29udHJvbCkgb3IgKG5vdCB0cmVlKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHgsIHksIHcsIGggPSBzZWxmLm9uX2dldF9zaXplKHRyZWUsIGNlbGxfYXJlYSkKKyAgICAgICAgeCArPSBjZWxsX2FyZWEueAorICAgICAgICB5ICs9IGNlbGxfYXJlYS55CisgICAgICAgIHcgLT0gMiAqIHNlbGYuZ2V0X3Byb3BlcnR5KCJ4cGFkIikKKyAgICAgICAgaCAtPSAyICogc2VsZi5nZXRfcHJvcGVydHkoInlwYWQiKQorCisgICAgICAgIHN0b2NrX2lkID0gIiIKKyAgICAgICAgaWYgc2VsZi5wcm9wcy5pY29uX25hbWU6CisgICAgICAgICAgICBzdG9ja19pZCA9IHNlbGYuc2V0X2ljb25fbmFtZV90b19pZChzZWxmLnByb3BzLmljb25fbmFtZSkKKyAgICAgICAgZWxpZiBzZWxmLnByb3BzLnN0b2NrX2lkOgorICAgICAgICAgICAgc3RvY2tfaWQgPSBzZWxmLnByb3BzLnN0b2NrX2lkCisgICAgICAgIGVsaWYgc2VsZi5wcm9wcy5waXhidWY6CisgICAgICAgICAgICBwaXggPSBzZWxmLnByb3BzLnBpeGJ1ZgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc3RvY2tfaWQ6CisgICAgICAgICAgICBwaXggPSBzZWxmLmdldF9waXhidWZfZnJvbV9zdG9ja19pY29uKHRyZWUsIHN0b2NrX2lkLCBzZWxmLnByb3BzLnN0b2NrX3NpemUpCisgICAgICAgIGlmIHN0b2NrX2lkID09ICdoaWMtdGFzay1yZWZyZXNoJzoKKyAgICAgICAgICAgIHNlbGYuY29udHJvbC5hcHBlbmRfcnVubmluZ19jZWxsX2FyZWEoY2VsbF9hcmVhKQorICAgICAgICAgICAgaWYgc2VsZi5jb250cm9sLmlzX2FjdGl2ZSgpOgorICAgICAgICAgICAgICAgIHNlbGYuY29udHJvbC5vbl9kcmF3X3BpeGJ1Zl9jYihwaXgsIHdpbmRvdy5jYWlyb19jcmVhdGUoKSwgeCwgeSwgdywgaCwgVHJ1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5jb250cm9sLnN0YXJ0X3J1bigyMDAsIDAsIDAsIDEwMDAsIDE1MCwgdHJlZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY29udHJvbC5yZW1vdmVfcnVubmluZ19jZWxsX2FyZWEoY2VsbF9hcmVhKQorICAgICAgICAgICAgc2VsZi5jb250cm9sLm9uX2RyYXdfcGl4YnVmX2NiKHBpeCwgd2luZG93LmNhaXJvX2NyZWF0ZSgpLCB4LCB5LCB3LCBoLCBGYWxzZSkKKworICAgIGRlZiBvbl9nZXRfc2l6ZShzZWxmLCB3aWRnZXQsIGNlbGxfYXJlYSk6CisgICAgICAgIGlmIHNlbGYucHJvcHMuaWNvbl9uYW1lIG9yIHNlbGYucHJvcHMucGl4YnVmIG9yIHNlbGYucHJvcHMuc3RvY2tfaWQ6CisgICAgICAgICAgICB3LCBoID0gZ3RrLmljb25fc2l6ZV9sb29rdXAoc2VsZi5wcm9wcy5zdG9ja19zaXplKQorICAgICAgICAgICAgY2FsY193aWR0aCA9IHNlbGYuZ2V0X3Byb3BlcnR5KCJ4cGFkIikgKiAyICsgdworICAgICAgICAgICAgY2FsY19oZWlnaHQgPSBzZWxmLmdldF9wcm9wZXJ0eSgieXBhZCIpICogMiArIGgKKyAgICAgICAgICAgIHhfb2Zmc2V0ID0gMAorICAgICAgICAgICAgeV9vZmZzZXQgPSAwCisgICAgICAgICAgICBpZiBjZWxsX2FyZWEgYW5kIHcgPiAwIGFuZCBoID4gMDoKKyAgICAgICAgICAgICAgICB4X29mZnNldCA9IHNlbGYuZ2V0X3Byb3BlcnR5KCJ4YWxpZ24iKSAqIChjZWxsX2FyZWEud2lkdGggLSBjYWxjX3dpZHRoIC0gc2VsZi5nZXRfcHJvcGVydHkoInhwYWQiKSkKKyAgICAgICAgICAgICAgICB5X29mZnNldCA9IHNlbGYuZ2V0X3Byb3BlcnR5KCJ5YWxpZ24iKSAqIChjZWxsX2FyZWEuaGVpZ2h0IC0gY2FsY19oZWlnaHQgLSBzZWxmLmdldF9wcm9wZXJ0eSgieXBhZCIpKQorCisgICAgICAgICAgICByZXR1cm4geF9vZmZzZXQsIHlfb2Zmc2V0LCB3LCBoCisKKyAgICAgICAgcmV0dXJuIDAsIDAsIDAsIDAKKworZ29iamVjdC50eXBlX3JlZ2lzdGVyKEhvYkNlbGxSZW5kZXJlclBpeGJ1ZikKKworY2xhc3MgSG9iQ2VsbFJlbmRlcmVyVG9nZ2xlKGd0ay5DZWxsUmVuZGVyZXJUb2dnbGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgZ3RrLkNlbGxSZW5kZXJlclRvZ2dsZS5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmN0cmwgPSBIb2JDZWxsUmVuZGVyZXJDb250cm9sbGVyKGlzX2RyYXdfcm93PVRydWUpCisgICAgICAgIHNlbGYuY3RybC5ydW5uaW5nX21vZGUgPSBzZWxmLmN0cmwuTU9ERV9PTkVfU0hPUlQKKyAgICAgICAgc2VsZi5jZWxsX2F0dHIgPSB7ImZhZGVvdXQiOiBGYWxzZSwgIm51bWJlcl9vZl9jaGlsZHJlbiI6IDB9CisKKyAgICBkZWYgZG9fcmVuZGVyKHNlbGYsIHdpbmRvdywgd2lkZ2V0LCBiYWNrZ3JvdW5kX2FyZWEsIGNlbGxfYXJlYSwgZXhwb3NlX2FyZWEsIGZsYWdzKToKKyAgICAgICAgaWYgKG5vdCBzZWxmLmN0cmwpIG9yIChub3Qgd2lkZ2V0KToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIGZsYWdzICYgZ3RrLkNFTExfUkVOREVSRVJfU0VMRUNURUQ6CisgICAgICAgICAgICBzdGF0ZSA9IGd0ay5TVEFURV9TRUxFQ1RFRAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RhdGUgPSBndGsuU1RBVEVfTk9STUFMCisKKyAgICAgICAgaWYgc2VsZi5jdHJsLmlzX2FjdGl2ZSgpOgorICAgICAgICAgICAgcGF0aCA9IHdpZGdldC5nZXRfcGF0aF9hdF9wb3MoY2VsbF9hcmVhLnggKyBjZWxsX2FyZWEud2lkdGgvMiwgY2VsbF9hcmVhLnkgKyBjZWxsX2FyZWEuaGVpZ2h0LzIpCisgICAgICAgICAgICAjIHNvbWV0aW1lcyB0aGUgcGFyYW1ldGVycyBvZiBjZWxsX2FyZWEgd2lsbCBiZSBhIG5lZ2F0aXZlIG51bWJlcixzdWNoIGFzIHB1bGwgdXAgZG93biB0aGUgc2Nyb2xsIGJhcgorICAgICAgICAgICAgIyBpdCdzIG92ZXIgdGhlIHRyZWUgY29udGFpbmVyIHJhbmdlLCBzbyB0aGUgcGF0aCB3aWxsIGJlIGJhZAorICAgICAgICAgICAgaWYgbm90IHBhdGg6IHJldHVybgorICAgICAgICAgICAgcGF0aCA9IHBhdGhbMF0KKyAgICAgICAgICAgIGlmIHBhdGggaW4gc2VsZi5jdHJsLnJ1bm5pbmdfY2VsbF9hcmVhczoKKyAgICAgICAgICAgICAgICBjciA9IHdpbmRvdy5jYWlyb19jcmVhdGUoKQorICAgICAgICAgICAgICAgIGNvbG9yID0gd2lkZ2V0LmdldF9zdHlsZSgpLmJhc2Vbc3RhdGVdCisKKyAgICAgICAgICAgICAgICByb3dfeCwgXywgcm93X3dpZHRoLCBfID0gd2lkZ2V0LmdldF92aXNpYmxlX3JlY3QoKQorICAgICAgICAgICAgICAgIGJvcmRlcl95ID0gc2VsZi5nZXRfcHJvcGVydHkoInlwYWQiKQorICAgICAgICAgICAgICAgIHNlbGYuY3RybC5vbl9kcmF3X2ZhZGVpbm91dF9jYihjciwgY29sb3IsIHJvd194LCBjZWxsX2FyZWEueSAtIGJvcmRlcl95LCByb3dfd2lkdGgsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbF9hcmVhLmhlaWdodCArIGJvcmRlcl95ICogMiwgc2VsZi5jZWxsX2F0dHJbImZhZGVvdXQiXSkKKyAgICAgICAgIyBkcmF3IG51bWJlciBvZiBhIGdyb3VwCisgICAgICAgIGlmIHNlbGYuY2VsbF9hdHRyWyJudW1iZXJfb2ZfY2hpbGRyZW4iXToKKyAgICAgICAgICAgIHRleHQgPSAiJWQgcGtnIiAlIHNlbGYuY2VsbF9hdHRyWyJudW1iZXJfb2ZfY2hpbGRyZW4iXQorICAgICAgICAgICAgcGFuZ29sYXlvdXQgPSB3aWRnZXQuY3JlYXRlX3BhbmdvX2xheW91dCh0ZXh0KQorICAgICAgICAgICAgdGV4dHcsIHRleHRoID0gcGFuZ29sYXlvdXQuZ2V0X3BpeGVsX3NpemUoKQorICAgICAgICAgICAgeCA9IGNlbGxfYXJlYS54ICsgKGNlbGxfYXJlYS53aWR0aC8yKSAtICh0ZXh0dy8yKQorICAgICAgICAgICAgeSA9IGNlbGxfYXJlYS55ICsgKGNlbGxfYXJlYS5oZWlnaHQvMikgLSAodGV4dGgvMikKKworICAgICAgICAgICAgd2lkZ2V0LnN0eWxlLnBhaW50X2xheW91dCh3aW5kb3csIHN0YXRlLCBUcnVlLCBjZWxsX2FyZWEsIHdpZGdldCwgImNoZWNrYm94IiwgeCwgeSwgcGFuZ29sYXlvdXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gZ3RrLkNlbGxSZW5kZXJlclRvZ2dsZS5kb19yZW5kZXIoc2VsZiwgd2luZG93LCB3aWRnZXQsIGJhY2tncm91bmRfYXJlYSwgY2VsbF9hcmVhLCBleHBvc2VfYXJlYSwgZmxhZ3MpCisKKyAgICAnJydkZWxheTogbm9ybWFsbHkgZGVsYXkgdGltZSBpcyAxMDAwbXMKKyAgICAgICBjZWxsX2xpc3Q6IHdoaWxjaCBjZWxscyBuZWVkIHRvIGJlIHJlbmRlcgorICAgICcnJworICAgIGRlZiBmYWRlb3V0KHNlbGYsIHRyZWUsIGRlbGF5LCBjZWxsX2xpc3Q9Tm9uZSk6CisgICAgICAgIGlmIChkZWxheSA8IDIwMCkgb3IgKG5vdCB0cmVlKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmNlbGxfYXR0clsiZmFkZW91dCJdID0gVHJ1ZQorICAgICAgICBzZWxmLmN0cmwucnVubmluZ19jZWxsX2FyZWFzID0gY2VsbF9saXN0CisgICAgICAgIHNlbGYuY3RybC5zdGFydF9ydW4oMjAwLCAwLCAwLCBkZWxheSwgKGRlbGF5ICogMjAwIC8gMTAwMCksIHRyZWUpCisKKyAgICBkZWYgY29ubmVjdF9yZW5kZXJfc3RhdGVfY2hhbmdlZChzZWxmLCBmdW5jLCB1c3JkYXRhPU5vbmUpOgorICAgICAgICBpZiBub3QgZnVuYzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiB1c3JkYXRhOgorICAgICAgICAgICAgc2VsZi5jdHJsLmNvbm5lY3QoInJ1bi10aW1lci1zdG9wcGVkIiwgZnVuYywgc2VsZiwgdXNyZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY3RybC5jb25uZWN0KCJydW4tdGltZXItc3RvcHBlZCIsIGZ1bmMsIHNlbGYpCisKK2dvYmplY3QudHlwZV9yZWdpc3RlcihIb2JDZWxsUmVuZGVyZXJUb2dnbGUpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9pbWFnZWNvbmZpZ3VyYXRpb25wYWdlLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaW1hZ2Vjb25maWd1cmF0aW9ucGFnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzY2YmVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaW1hZ2Vjb25maWd1cmF0aW9ucGFnZS5weQpAQCAtMCwwICsxLDU2MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworaW1wb3J0IGdsaWIKK2ltcG9ydCByZQorZnJvbSBiYi51aS5jcnVtYnMucHJvZ3Jlc3NiYXIgaW1wb3J0IEhvYlByb2dyZXNzQmFyCitmcm9tIGJiLnVpLmNydW1icy5ob2Jjb2xvciBpbXBvcnQgSG9iQ29sb3JzCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IGhpYywgSG9iSW1hZ2VCdXR0b24sIEhvYkluZm9CdXR0b24sIEhvYkFsdEJ1dHRvbiwgSG9iQnV0dG9uCitmcm9tIGJiLnVpLmNydW1icy5ob2JsaXN0bW9kZWwgaW1wb3J0IFJlY2lwZUxpc3RNb2RlbAorZnJvbSBiYi51aS5jcnVtYnMuaG9icGFnZXMgaW1wb3J0IEhvYlBhZ2UKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5yZXRyaWV2ZWltYWdlZGlhbG9nIGltcG9ydCBSZXRyaWV2ZUltYWdlRGlhbG9nCisKKyMKKyMgSW1hZ2VDb25maWd1cmF0aW9uUGFnZQorIworY2xhc3MgSW1hZ2VDb25maWd1cmF0aW9uUGFnZSAoSG9iUGFnZSk6CisKKyAgICBfX2R1bW15X21hY2hpbmVfXyA9ICItLXNlbGVjdCBhIG1hY2hpbmUtLSIKKyAgICBfX2R1bW15X2ltYWdlX18gICA9ICItLXNlbGVjdCBhbiBpbWFnZSByZWNpcGUtLSIKKyAgICBfX2N1c3RvbV9pbWFnZV9fICA9ICJTZWxlY3QgZnJvbSBteSBpbWFnZSByZWNpcGVzIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1aWxkZXIpOgorICAgICAgICBzdXBlcihJbWFnZUNvbmZpZ3VyYXRpb25QYWdlLCBzZWxmKS5fX2luaXRfXyhidWlsZGVyLCAiSW1hZ2UgY29uZmlndXJhdGlvbiIpCisKKyAgICAgICAgc2VsZi5pbWFnZV9jb21ib19pZCA9IE5vbmUKKyAgICAgICAgIyB3ZSB1c2UgbWFjaGluZV9jb21ib19jaGFuZ2VkX2J5X21hbnVhbCB0byBpZGVudGlmeSB0aGUgbWFjaGluZSBpcyBjaGFuZ2VkIGJ5IGNvZGUKKyAgICAgICAgIyBvciBieSBtYW51YWwuIElmIGJ5IG1hbnVhbCwgYWxsIHVzZXIncyByZWNpcGUgc2VsZWN0aW9uIGFuZCBwYWNrYWdlIHNlbGVjdGlvbiBhcmUKKyAgICAgICAgIyBjbGVhcmVkLgorICAgICAgICBzZWxmLm1hY2hpbmVfY29tYm9fY2hhbmdlZF9ieV9tYW51YWwgPSBUcnVlCisgICAgICAgIHNlbGYuc3RvcHBpbmcgPSBGYWxzZQorICAgICAgICBzZWxmLndhcm5pbmdfc2hpZnQgPSAwCisgICAgICAgIHNlbGYuY3VzdG9tX2ltYWdlX3NlbGVjdGVkID0gTm9uZQorICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgICMgY3JlYXRlIHZpc3VhbCBlbGVtZW50cworICAgICAgICBzZWxmLnRvb2xiYXIgPSBndGsuVG9vbGJhcigpCisgICAgICAgIHNlbGYudG9vbGJhci5zZXRfb3JpZW50YXRpb24oZ3RrLk9SSUVOVEFUSU9OX0hPUklaT05UQUwpCisgICAgICAgIHNlbGYudG9vbGJhci5zZXRfc3R5bGUoZ3RrLlRPT0xCQVJfQk9USCkKKworICAgICAgICBteV9pbWFnZXNfYnV0dG9uID0gc2VsZi5hcHBlbmRfdG9vbGJhcl9idXR0b24oc2VsZi50b29sYmFyLAorICAgICAgICAgICAgIkltYWdlcyIsCisgICAgICAgICAgICBoaWMuSUNPTl9JTUFHRVNfRElTUExBWV9GSUxFLAorICAgICAgICAgICAgaGljLklDT05fSU1BR0VTX0hPVkVSX0ZJTEUsCisgICAgICAgICAgICAiT3BlbiBwcmV2aW91c2x5IGJ1aWx0IGltYWdlcyIsCisgICAgICAgICAgICBzZWxmLm15X2ltYWdlc19idXR0b25fY2xpY2tlZF9jYikKKyAgICAgICAgc2V0dGluZ3NfYnV0dG9uID0gc2VsZi5hcHBlbmRfdG9vbGJhcl9idXR0b24oc2VsZi50b29sYmFyLAorICAgICAgICAgICAgIlNldHRpbmdzIiwKKyAgICAgICAgICAgIGhpYy5JQ09OX1NFVFRJTkdTX0RJU1BMQVlfRklMRSwKKyAgICAgICAgICAgIGhpYy5JQ09OX1NFVFRJTkdTX0hPVkVSX0ZJTEUsCisgICAgICAgICAgICAiVmlldyBhZGRpdGlvbmFsIGJ1aWxkIHNldHRpbmdzIiwKKyAgICAgICAgICAgIHNlbGYuc2V0dGluZ3NfYnV0dG9uX2NsaWNrZWRfY2IpCisKKyAgICAgICAgc2VsZi5jb25maWdfdG9wX2J1dHRvbiA9IHNlbGYuYWRkX29udG9fdG9wX2JhcihzZWxmLnRvb2xiYXIpCisKKyAgICAgICAgc2VsZi5ndGFibGUgPSBndGsuVGFibGUoNDAsIDQwLCBUcnVlKQorICAgICAgICBzZWxmLmNyZWF0ZV9jb25maWdfbWFjaGluZSgpCisgICAgICAgIHNlbGYuY3JlYXRlX2NvbmZpZ19iYXNlaW1nKCkKKyAgICAgICAgc2VsZi5jb25maWdfYnVpbGRfYnV0dG9uID0gc2VsZi5jcmVhdGVfY29uZmlnX2J1aWxkX2J1dHRvbigpCisKKyAgICBkZWYgX3JlbW92ZV9hbGxfd2lkZ2V0KHNlbGYpOgorICAgICAgICBjaGlsZHJlbiA9IHNlbGYuZ3RhYmxlLmdldF9jaGlsZHJlbigpIG9yIFtdCisgICAgICAgIGZvciBjaGlsZCBpbiBjaGlsZHJlbjoKKyAgICAgICAgICAgIHNlbGYuZ3RhYmxlLnJlbW92ZShjaGlsZCkKKyAgICAgICAgY2hpbGRyZW4gPSBzZWxmLmJveF9ncm91cF9hcmVhLmdldF9jaGlsZHJlbigpIG9yIFtdCisgICAgICAgIGZvciBjaGlsZCBpbiBjaGlsZHJlbjoKKyAgICAgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucmVtb3ZlKGNoaWxkKQorICAgICAgICBjaGlsZHJlbiA9IHNlbGYuZ2V0X2NoaWxkcmVuKCkgb3IgW10KKyAgICAgICAgZm9yIGNoaWxkIGluIGNoaWxkcmVuOgorICAgICAgICAgICAgc2VsZi5yZW1vdmUoY2hpbGQpCisKKyAgICBkZWYgX3BhY2tfY29tcG9uZW50cyhzZWxmLCBwYWNrX2NvbmZpZ19idWlsZF9idXR0b24gPSBGYWxzZSk6CisgICAgICAgIHNlbGYuX3JlbW92ZV9hbGxfd2lkZ2V0KCkKKyAgICAgICAgc2VsZi5wYWNrX3N0YXJ0KHNlbGYuY29uZmlnX3RvcF9idXR0b24sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi5wYWNrX3N0YXJ0KHNlbGYuZ3JvdXBfYWxpZ24sIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5wYWNrX3N0YXJ0KHNlbGYuZ3RhYmxlLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorICAgICAgICBpZiBwYWNrX2NvbmZpZ19idWlsZF9idXR0b246CisgICAgICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfZW5kKHNlbGYuY29uZmlnX2J1aWxkX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYm94ID0gZ3RrLkhCb3goRmFsc2UsIDYpCisgICAgICAgICAgICBib3guc2hvdygpCisgICAgICAgICAgICBzdWJib3ggPSBndGsuSEJveChGYWxzZSwgMCkKKyAgICAgICAgICAgIHN1YmJveC5zZXRfc2l6ZV9yZXF1ZXN0KDIwNSwgNDkpCisgICAgICAgICAgICBzdWJib3guc2hvdygpCisgICAgICAgICAgICBib3guYWRkKHN1YmJveCkKKyAgICAgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19lbmQoYm94LCBGYWxzZSwgRmFsc2UpCisKKyAgICBkZWYgc2hvd19tYWNoaW5lKHNlbGYpOgorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5yZXNldCgpCisgICAgICAgIHNlbGYuX3BhY2tfY29tcG9uZW50cyhwYWNrX2NvbmZpZ19idWlsZF9idXR0b24gPSBGYWxzZSkKKyAgICAgICAgc2VsZi5zZXRfY29uZmlnX21hY2hpbmVfbGF5b3V0KHNob3dfcHJvZ3Jlc3NfYmFyID0gRmFsc2UpCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorCisgICAgZGVmIHVwZGF0ZV9wcm9ncmVzc19iYXIoc2VsZiwgdGl0bGUsIGZyYWN0aW9uLCBzdGF0dXM9Tm9uZSk6CisgICAgICAgIGlmIHNlbGYuc3RvcHBpbmcgPT0gRmFsc2U6CisgICAgICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci51cGRhdGUoZnJhY3Rpb24pCisgICAgICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5zZXRfdGV4dCh0aXRsZSkKKyAgICAgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyLnNldF9yY3N0eWxlKHN0YXR1cykKKworICAgIGRlZiBzaG93X2luZm9fcG9wdWxhdGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5fcGFja19jb21wb25lbnRzKHBhY2tfY29uZmlnX2J1aWxkX2J1dHRvbiA9IEZhbHNlKQorICAgICAgICBzZWxmLnNldF9jb25maWdfbWFjaGluZV9sYXlvdXQoc2hvd19wcm9ncmVzc19iYXIgPSBUcnVlKQorICAgICAgICBzZWxmLnNob3dfYWxsKCkKKworICAgIGRlZiBzaG93X2luZm9fcG9wdWxhdGVkKHNlbGYpOgorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5yZXNldCgpCisgICAgICAgIHNlbGYuX3BhY2tfY29tcG9uZW50cyhwYWNrX2NvbmZpZ19idWlsZF9idXR0b24gPSBGYWxzZSkKKyAgICAgICAgc2VsZi5zZXRfY29uZmlnX21hY2hpbmVfbGF5b3V0KHNob3dfcHJvZ3Jlc3NfYmFyID0gRmFsc2UpCisgICAgICAgIHNlbGYuc2V0X2NvbmZpZ19iYXNlaW1nX2xheW91dCgpCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorCisgICAgZGVmIHNob3dfYmFzZWltZ19zZWxlY3RlZChzZWxmKToKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIucmVzZXQoKQorICAgICAgICBzZWxmLl9wYWNrX2NvbXBvbmVudHMocGFja19jb25maWdfYnVpbGRfYnV0dG9uID0gVHJ1ZSkKKyAgICAgICAgc2VsZi5zZXRfY29uZmlnX21hY2hpbmVfbGF5b3V0KHNob3dfcHJvZ3Jlc3NfYmFyID0gRmFsc2UpCisgICAgICAgIHNlbGYuc2V0X2NvbmZpZ19iYXNlaW1nX2xheW91dCgpCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorICAgICAgICBpZiBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLmdldF9zZWxlY3RlZF9pbWFnZSgpID09IHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuX19jdXN0b21faW1hZ2VfXzoKKyAgICAgICAgICAgIHNlbGYuanVzdF9iYWtlX2J1dHRvbi5oaWRlKCkKKworICAgIGRlZiBhZGRfd2FybmluZ3NfYmFyKHNlbGYpOgorICAgICAgICAjY3JlYXRlIHRoZSB3YXJuaW5ncyBiYXIgc2hvd24gd2hlbiByZWNpcGVzIHBhcnNpbmcgZ2VuZXJhdGVzIHdhcm5pbmdzCisgICAgICAgIGNvbG9yID0gSG9iQ29sb3JzLktIQUtJCisgICAgICAgIHdhcm5pbmdzX2JhciA9IGd0ay5FdmVudEJveCgpCisgICAgICAgIHdhcm5pbmdzX2Jhci5tb2RpZnlfYmcoZ3RrLlNUQVRFX05PUk1BTCwgZ3RrLmdkay5jb2xvcl9wYXJzZShjb2xvcikpCisgICAgICAgIHdhcm5pbmdzX2Jhci5zZXRfZmxhZ3MoZ3RrLkNBTl9ERUZBVUxUKQorICAgICAgICB3YXJuaW5nc19iYXIuZ3JhYl9kZWZhdWx0KCkKKworICAgICAgICBidWlsZF9zdG9wX3RhYiA9IGd0ay5UYWJsZSgxMCwgMjAsIFRydWUpCisgICAgICAgIHdhcm5pbmdzX2Jhci5hZGQoYnVpbGRfc3RvcF90YWIpCisKKyAgICAgICAgaWNvbiA9IGd0ay5JbWFnZSgpCisgICAgICAgIGljb25fcGl4X2J1ZmZlciA9IGd0ay5nZGsucGl4YnVmX25ld19mcm9tX2ZpbGUoaGljLklDT05fSU5ESV9BTEVSVF9GSUxFKQorICAgICAgICBpY29uLnNldF9mcm9tX3BpeGJ1ZihpY29uX3BpeF9idWZmZXIpCisgICAgICAgIGJ1aWxkX3N0b3BfdGFiLmF0dGFjaChpY29uLCAwLCAyLCAwLCAxMCkKKworICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIGxhYmVsLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCisgICAgICAgIHdhcm5pbmdzX25iID0gbGVuKHNlbGYuYnVpbGRlci5wYXJzaW5nX3dhcm5pbmdzKQorICAgICAgICBpZiB3YXJuaW5nc19uYiA9PSAxOgorICAgICAgICAgICAgbGFiZWwuc2V0X21hcmt1cCgiPHNwYW4gc2l6ZT0neC1sYXJnZSc+PGI+MSByZWNpcGUgcGFyc2luZyB3YXJuaW5nPC9iPjwvc3Bhbj4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGFiZWwuc2V0X21hcmt1cCgiPHNwYW4gc2l6ZT0neC1sYXJnZSc+PGI+JXMgcmVjaXBlIHBhcnNpbmcgd2FybmluZ3M8L2I+PC9zcGFuPiIgJSB3YXJuaW5nc19uYikKKyAgICAgICAgYnVpbGRfc3RvcF90YWIuYXR0YWNoKGxhYmVsLCAyLCAxMiwgMCwgMTApCisKKyAgICAgICAgdmlld193YXJuaW5nc19idXR0b24gPSBIb2JCdXR0b24oIlZpZXcgd2FybmluZ3MiKQorICAgICAgICB2aWV3X3dhcm5pbmdzX2J1dHRvbi5jb25uZWN0KCdjbGlja2VkJywgc2VsZi52aWV3X3dhcm5pbmdzX2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICBidWlsZF9zdG9wX3RhYi5hdHRhY2godmlld193YXJuaW5nc19idXR0b24sIDE1LCAxOSwgMSwgOSkKKworICAgICAgICByZXR1cm4gd2FybmluZ3NfYmFyCisKKyAgICBkZWYgZGlzYWJsZV93YXJuaW5nc19iYXIoc2VsZik6CisgICAgICAgIGlmIHNlbGYuYnVpbGRlci5wYXJzaW5nX3dhcm5pbmdzOgorICAgICAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnd2FybmluZ3NfYmFyJyk6CisgICAgICAgICAgICAgICAgc2VsZi53YXJuaW5nc19iYXIuaGlkZV9hbGwoKQorICAgICAgICAgICAgc2VsZi5idWlsZGVyLnBhcnNpbmdfd2FybmluZ3MgPSBbXQorCisgICAgZGVmIGNyZWF0ZV9jb25maWdfbWFjaGluZShzZWxmKToKKyAgICAgICAgc2VsZi5tYWNoaW5lX3RpdGxlID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgc2VsZi5tYWNoaW5lX3RpdGxlLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCisgICAgICAgIG1hcmsgPSAiPHNwYW4gJXM+U2VsZWN0IGEgbWFjaGluZTwvc3Bhbj4iICUgc2VsZi5zcGFuX3RhZygneC1sYXJnZScsICdib2xkJykKKyAgICAgICAgc2VsZi5tYWNoaW5lX3RpdGxlLnNldF9tYXJrdXAobWFyaykKKworICAgICAgICBzZWxmLm1hY2hpbmVfdGl0bGVfZGVzYyA9IGd0ay5MYWJlbCgpCisgICAgICAgIHNlbGYubWFjaGluZV90aXRsZV9kZXNjLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCisgICAgICAgIG1hcmsgPSAoIjxzcGFuICVzPllvdXIgc2VsZWN0aW9uIGlzIHRoZSBwcm9maWxlIG9mIHRoZSB0YXJnZXQgbWFjaGluZSBmb3Igd2hpY2ggeW91IgorICAgICAgICAiIGFyZSBidWlsZGluZyB0aGUgaW1hZ2UuXG48L3NwYW4+IikgJSAoc2VsZi5zcGFuX3RhZygnbWVkaXVtJykpCisgICAgICAgIHNlbGYubWFjaGluZV90aXRsZV9kZXNjLnNldF9tYXJrdXAobWFyaykKKworICAgICAgICBzZWxmLm1hY2hpbmVfY29tYm8gPSBndGsuY29tYm9fYm94X25ld190ZXh0KCkKKyAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvLmNvbm5lY3QoImNoYW5nZWQiLCBzZWxmLm1hY2hpbmVfY29tYm9fY2hhbmdlZF9jYikKKworICAgICAgICBpY29uX2ZpbGUgPSBoaWMuSUNPTl9MQVlFUlNfRElTUExBWV9GSUxFCisgICAgICAgIGhvdmVyX2ZpbGUgPSBoaWMuSUNPTl9MQVlFUlNfSE9WRVJfRklMRQorICAgICAgICBzZWxmLmxheWVyX2J1dHRvbiA9IEhvYkltYWdlQnV0dG9uKCJMYXllcnMiLCAiQWRkIHN1cHBvcnQgZm9yIG1hY2hpbmVzLCBzb2Z0d2FyZSwgZXRjLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25fZmlsZSwgaG92ZXJfZmlsZSkKKyAgICAgICAgc2VsZi5sYXllcl9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYubGF5ZXJfYnV0dG9uX2NsaWNrZWRfY2IpCisKKyAgICAgICAgbWFya3VwID0gIkxheWVycyBhcmUgYSBwb3dlcmZ1bCBtZWNoYW5pc20gdG8gZXh0ZW5kIHRoZSBZb2N0byBQcm9qZWN0ICIKKyAgICAgICAgbWFya3VwICs9ICJ3aXRoIHlvdXIgb3duIGZ1bmN0aW9uYWxpdHkuXG4iCisgICAgICAgIG1hcmt1cCArPSAiRm9yIG1vcmUgb24gbGF5ZXJzLCBjaGVjayB0aGUgPGEgaHJlZj1cIiIKKyAgICAgICAgbWFya3VwICs9ICJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9jdXJyZW50L2Rldi1tYW51YWwvIgorICAgICAgICBtYXJrdXAgKz0gImRldi1tYW51YWwuaHRtbCN1bmRlcnN0YW5kaW5nLWFuZC11c2luZy1sYXllcnNcIj5yZWZlcmVuY2UgbWFudWFsPC9hPi4iCisgICAgICAgIHNlbGYubGF5ZXJfaW5mb19pY29uID0gSG9iSW5mb0J1dHRvbigiPGI+TGF5ZXJzPC9iPiIgKyAiKiIgKyBtYXJrdXAsIHNlbGYuZ2V0X3BhcmVudCgpKQorICAgICAgICBzZWxmLnByb2dyZXNzX2JhciA9IEhvYlByb2dyZXNzQmFyKCkKKyAgICAgICAgc2VsZi5zdG9wX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiU3RvcCIpCisgICAgICAgIHNlbGYuc3RvcF9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuc3RvcF9idXR0b25fY2xpY2tlZF9jYikKKyAgICAgICAgc2VsZi5tYWNoaW5lX3NlcGFyYXRvciA9IGd0ay5IU2VwYXJhdG9yKCkKKworICAgIGRlZiBzZXRfY29uZmlnX21hY2hpbmVfbGF5b3V0KHNlbGYsIHNob3dfcHJvZ3Jlc3NfYmFyID0gRmFsc2UpOgorICAgICAgICBzZWxmLmd0YWJsZS5hdHRhY2goc2VsZi5tYWNoaW5lX3RpdGxlLCAwLCA0MCwgMCwgNCkKKyAgICAgICAgc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYubWFjaGluZV90aXRsZV9kZXNjLCAwLCA0MCwgNCwgNikKKyAgICAgICAgc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYubWFjaGluZV9jb21ibywgMCwgMTIsIDcsIDEwKQorICAgICAgICBzZWxmLmd0YWJsZS5hdHRhY2goc2VsZi5sYXllcl9idXR0b24sIDE0LCAzNiwgNywgMTIpCisgICAgICAgIHNlbGYuZ3RhYmxlLmF0dGFjaChzZWxmLmxheWVyX2luZm9faWNvbiwgMzYsIDQwLCA3LCAxMSkKKyAgICAgICAgaWYgc2hvd19wcm9ncmVzc19iYXI6CisgICAgICAgICAgICAjc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYucHJvZ3Jlc3NfYm94LCAwLCA0MCwgMTUsIDE4KQorICAgICAgICAgICAgc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYucHJvZ3Jlc3NfYmFyLCAwLCAzNywgMTUsIDE4KQorICAgICAgICAgICAgc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYuc3RvcF9idXR0b24sIDM3LCA0MCwgMTUsIDE4LCAwLCAwKQorICAgICAgICBpZiBzZWxmLmJ1aWxkZXIucGFyc2luZ193YXJuaW5nczoKKyAgICAgICAgICAgIHNlbGYud2FybmluZ3NfYmFyID0gc2VsZi5hZGRfd2FybmluZ3NfYmFyKCkKKyAgICAgICAgICAgIHNlbGYuZ3RhYmxlLmF0dGFjaChzZWxmLndhcm5pbmdzX2JhciwgMCwgNDAsIDE0LCAxOCkKKyAgICAgICAgICAgIHNlbGYud2FybmluZ19zaGlmdCA9IDQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYud2FybmluZ19zaGlmdCA9IDAKKyAgICAgICAgc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYubWFjaGluZV9zZXBhcmF0b3IsIDAsIDQwLCAxMywgMTQpCisKKyAgICBkZWYgY3JlYXRlX2NvbmZpZ19iYXNlaW1nKHNlbGYpOgorICAgICAgICBzZWxmLmltYWdlX3RpdGxlID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgc2VsZi5pbWFnZV90aXRsZS5zZXRfYWxpZ25tZW50KDAsIDEuMCkKKyAgICAgICAgbWFyayA9ICI8c3BhbiAlcz5TZWxlY3QgYW4gaW1hZ2UgcmVjaXBlPC9zcGFuPiIgJSBzZWxmLnNwYW5fdGFnKCd4LWxhcmdlJywgJ2JvbGQnKQorICAgICAgICBzZWxmLmltYWdlX3RpdGxlLnNldF9tYXJrdXAobWFyaykKKworICAgICAgICBzZWxmLmltYWdlX3RpdGxlX2Rlc2MgPSBndGsuTGFiZWwoKQorICAgICAgICBzZWxmLmltYWdlX3RpdGxlX2Rlc2Muc2V0X2FsaWdubWVudCgwLCAwLjUpCisKKyAgICAgICAgbWFyayA9ICgiPHNwYW4gJXM+SW1hZ2UgcmVjaXBlcyBhcmUgYSBzdGFydGluZyBwb2ludCBmb3IgdGhlIHR5cGUgb2YgaW1hZ2UgeW91IHdhbnQuICIKKyAgICAgICAgICAgICAgICAiWW91IGNhbiBidWlsZCB0aGVtIGFzIFxuIgorICAgICAgICAgICAgICAgICJ0aGV5IGFyZSBvciBlZGl0IHRoZW0gdG8gc3VpdCB5b3VyIG5lZWRzLlxuPC9zcGFuPiIpICUgc2VsZi5zcGFuX3RhZygnbWVkaXVtJykKKyAgICAgICAgc2VsZi5pbWFnZV90aXRsZV9kZXNjLnNldF9tYXJrdXAobWFyaykKKworICAgICAgICBzZWxmLmltYWdlX2NvbWJvID0gZ3RrLmNvbWJvX2JveF9uZXdfdGV4dCgpCisgICAgICAgIHNlbGYuaW1hZ2VfY29tYm8uc2V0X3Jvd19zZXBhcmF0b3JfZnVuYyhzZWxmLmNvbWJvX3NlcGFyYXRvcl9mdW5jLCBOb25lKQorICAgICAgICBzZWxmLmltYWdlX2NvbWJvX2lkID0gc2VsZi5pbWFnZV9jb21iby5jb25uZWN0KCJjaGFuZ2VkIiwgc2VsZi5pbWFnZV9jb21ib19jaGFuZ2VkX2NiKQorCisgICAgICAgIHNlbGYuaW1hZ2VfZGVzYyA9IGd0ay5MYWJlbCgpCisgICAgICAgIHNlbGYuaW1hZ2VfZGVzYy5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICBzZWxmLmltYWdlX2Rlc2Muc2V0X3NpemVfcmVxdWVzdCgyNTYsIC0xKQorICAgICAgICBzZWxmLmltYWdlX2Rlc2Muc2V0X2p1c3RpZnkoZ3RrLkpVU1RJRllfTEVGVCkKKyAgICAgICAgc2VsZi5pbWFnZV9kZXNjLnNldF9saW5lX3dyYXAoVHJ1ZSkKKworICAgICAgICAjIGJ1dHRvbiB0byB2aWV3IHJlY2lwZXMKKyAgICAgICAgaWNvbl9maWxlID0gaGljLklDT05fUkNJUEVfRElTUExBWV9GSUxFCisgICAgICAgIGhvdmVyX2ZpbGUgPSBoaWMuSUNPTl9SQ0lQRV9IT1ZFUl9GSUxFCisgICAgICAgIHNlbGYudmlld19hZHZfY29uZmlndXJhdGlvbl9idXR0b24gPSBIb2JJbWFnZUJ1dHRvbigiQWR2YW5jZWQgY29uZmlndXJhdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWxlY3QgaW1hZ2UgdHlwZXMsIHBhY2thZ2UgZm9ybWF0cywgZXRjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbl9maWxlLCBob3Zlcl9maWxlKSAgICAgICAgCisgICAgICAgIHNlbGYudmlld19hZHZfY29uZmlndXJhdGlvbl9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYudmlld19hZHZfY29uZmlndXJhdGlvbl9idXR0b25fY2xpY2tlZF9jYikKKworICAgICAgICBzZWxmLmltYWdlX3NlcGFyYXRvciA9IGd0ay5IU2VwYXJhdG9yKCkKKworICAgIGRlZiBjb21ib19zZXBhcmF0b3JfZnVuYyhzZWxmLCBtb2RlbCwgaXRlciwgdXNlcl9kYXRhKToKKyAgICAgICAgbmFtZSA9IG1vZGVsLmdldF92YWx1ZShpdGVyLCAwKQorICAgICAgICBpZiBuYW1lID09ICItLVNlcGFyYXRvci0tIjoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgc2V0X2NvbmZpZ19iYXNlaW1nX2xheW91dChzZWxmKToKKyAgICAgICAgc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYuaW1hZ2VfdGl0bGUsIDAsIDQwLCAxNStzZWxmLndhcm5pbmdfc2hpZnQsIDE3K3NlbGYud2FybmluZ19zaGlmdCkKKyAgICAgICAgc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYuaW1hZ2VfdGl0bGVfZGVzYywgMCwgNDAsIDE4K3NlbGYud2FybmluZ19zaGlmdCwgMjIrc2VsZi53YXJuaW5nX3NoaWZ0KQorICAgICAgICBzZWxmLmd0YWJsZS5hdHRhY2goc2VsZi5pbWFnZV9jb21ibywgMCwgMTIsIDIzK3NlbGYud2FybmluZ19zaGlmdCwgMjYrc2VsZi53YXJuaW5nX3NoaWZ0KQorICAgICAgICBzZWxmLmd0YWJsZS5hdHRhY2goc2VsZi5pbWFnZV9kZXNjLCAwLCAxMiwgMjcrc2VsZi53YXJuaW5nX3NoaWZ0LCAzMytzZWxmLndhcm5pbmdfc2hpZnQpCisgICAgICAgIHNlbGYuZ3RhYmxlLmF0dGFjaChzZWxmLnZpZXdfYWR2X2NvbmZpZ3VyYXRpb25fYnV0dG9uLCAxNCwgMzYsIDIzK3NlbGYud2FybmluZ19zaGlmdCwgMjgrc2VsZi53YXJuaW5nX3NoaWZ0KQorICAgICAgICBzZWxmLmd0YWJsZS5hdHRhY2goc2VsZi5pbWFnZV9zZXBhcmF0b3IsIDAsIDQwLCAzNStzZWxmLndhcm5pbmdfc2hpZnQsIDM2K3NlbGYud2FybmluZ19zaGlmdCkKKworICAgIGRlZiBjcmVhdGVfY29uZmlnX2J1aWxkX2J1dHRvbihzZWxmKToKKyAgICAgICAgIyBDcmVhdGUgdGhlICJCdWlsZCBwYWNrYWdlcyIgYW5kICJCdWlsZCBpbWFnZSIgYnV0dG9ucyBhdCB0aGUgYm90dG9tCisgICAgICAgIGJ1dHRvbl9ib3ggPSBndGsuSEJveChGYWxzZSwgNikKKworICAgICAgICAjIGNyZWF0ZSBidXR0b24gIkJ1aWxkIGltYWdlIgorICAgICAgICBzZWxmLmp1c3RfYmFrZV9idXR0b24gPSBIb2JCdXR0b24oIkJ1aWxkIGltYWdlIikKKyAgICAgICAgc2VsZi5qdXN0X2Jha2VfYnV0dG9uLnNldF90b29sdGlwX3RleHQoIkJ1aWxkIHRoZSBpbWFnZSByZWNpcGUgYXMgaXQgaXMiKQorICAgICAgICBzZWxmLmp1c3RfYmFrZV9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuanVzdF9iYWtlX2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICBidXR0b25fYm94LnBhY2tfZW5kKHNlbGYuanVzdF9iYWtlX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgICMgY3JlYXRlIGJ1dHRvbiAiRWRpdCBpbWFnZSByZWNpcGUiCisgICAgICAgIHNlbGYuZWRpdF9pbWFnZV9idXR0b24gPSBIb2JBbHRCdXR0b24oIkVkaXQgaW1hZ2UgcmVjaXBlIikKKyAgICAgICAgc2VsZi5lZGl0X2ltYWdlX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJDdXN0b21pemUgdGhlIHJlY2lwZXMgYW5kIHBhY2thZ2VzIHRvIGJlIGluY2x1ZGVkIGluIHlvdXIgaW1hZ2UiKQorICAgICAgICBzZWxmLmVkaXRfaW1hZ2VfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmVkaXRfaW1hZ2VfYnV0dG9uX2NsaWNrZWRfY2IpCisgICAgICAgIGJ1dHRvbl9ib3gucGFja19lbmQoc2VsZi5lZGl0X2ltYWdlX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHJldHVybiBidXR0b25fYm94CisKKyAgICBkZWYgc3RvcF9idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLnN0b3BwaW5nID0gVHJ1ZQorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5zZXRfdGV4dCgiU3RvcHBpbmcgcmVjaXBlIHBhcnNpbmciKQorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5zZXRfcmNzdHlsZSgic3RvcCIpCisgICAgICAgIHNlbGYuYnVpbGRlci5jYW5jZWxfcGFyc2Vfc3luYygpCisKKyAgICBkZWYgdmlld193YXJuaW5nc19idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd193YXJuaW5nX2RpYWxvZygpCisKKyAgICBkZWYgbWFjaGluZV9jb21ib19jaGFuZ2VkX2lkbGVfY2Ioc2VsZik6CisgICAgICAgIHNlbGYuYnVpbGRlci53aW5kb3cuc2V0X2N1cnNvcihOb25lKQorCisgICAgZGVmIG1hY2hpbmVfY29tYm9fY2hhbmdlZF9jYihzZWxmLCBtYWNoaW5lX2NvbWJvKToKKyAgICAgICAgc2VsZi5zdG9wcGluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuYnVpbGRlci5wYXJzaW5nX3dhcm5pbmdzID0gW10KKyAgICAgICAgY29tYm9faXRlbSA9IG1hY2hpbmVfY29tYm8uZ2V0X2FjdGl2ZV90ZXh0KCkKKyAgICAgICAgaWYgbm90IGNvbWJvX2l0ZW0gb3IgY29tYm9faXRlbSA9PSBzZWxmLl9fZHVtbXlfbWFjaGluZV9fOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5idWlsZGVyLndpbmRvdy5zZXRfY3Vyc29yKGd0ay5nZGsuQ3Vyc29yKGd0ay5nZGsuV0FUQ0gpKQorICAgICAgICBzZWxmLmJ1aWxkZXIud2FpdCgwLjEpICN3YWl0IGZvciBjb21ibyBhbmQgY3Vyc29yIHRvIHVwZGF0ZQorCisgICAgICAgICMgcmVtb3ZlIF9fZHVtbXlfbWFjaGluZV9fIGl0ZW0gZnJvbSB0aGUgc3RvcmUgbGlzdCBhZnRlciBmaXJzdCB1c2VyIHNlbGVjdGlvbgorICAgICAgICAjIGJlY2F1c2UgaXQgaXMgbm8gbG9uZ2VyIHZhbGlkCisgICAgICAgIGNvbWJvX3N0b3JlID0gbWFjaGluZV9jb21iby5nZXRfbW9kZWwoKQorICAgICAgICBpZiBsZW4oY29tYm9fc3RvcmUpIGFuZCAoY29tYm9fc3RvcmVbMF1bMF0gPT0gc2VsZi5fX2R1bW15X21hY2hpbmVfXyk6CisgICAgICAgICAgICBtYWNoaW5lX2NvbWJvLnJlbW92ZV90ZXh0KDApCisKKyAgICAgICAgc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uY3Vycl9tYWNoID0gY29tYm9faXRlbQorICAgICAgICBpZiBzZWxmLm1hY2hpbmVfY29tYm9fY2hhbmdlZF9ieV9tYW51YWw6CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5jbGVhcl9zZWxlY3Rpb24oKQorICAgICAgICAjIHJlc2V0IG1hY2hpbmVfY29tYm9fY2hhbmdlZF9ieV9tYW51YWwKKyAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvX2NoYW5nZWRfYnlfbWFudWFsID0gVHJ1ZQorCisgICAgICAgIHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLnNlbGVjdGVkX2ltYWdlID0gTm9uZQorCisgICAgICAgICMgRG8gcmVwYXJzZSByZWNpcGVzCisgICAgICAgIHNlbGYuYnVpbGRlci5wb3B1bGF0ZV9yZWNpcGVfcGFja2FnZV9pbmZvX2FzeW5jKCkKKworICAgICAgICBnbGliLmlkbGVfYWRkKHNlbGYubWFjaGluZV9jb21ib19jaGFuZ2VkX2lkbGVfY2IpCisKKyAgICBkZWYgdXBkYXRlX21hY2hpbmVfY29tYm8oc2VsZik6CisgICAgICAgIHNlbGYuZGlzYWJsZV93YXJuaW5nc19iYXIoKQorICAgICAgICBhbGxfbWFjaGluZXMgPSBbc2VsZi5fX2R1bW15X21hY2hpbmVfX10gKyBzZWxmLmJ1aWxkZXIucGFyYW1ldGVycy5hbGxfbWFjaGluZXMKKworICAgICAgICBtb2RlbCA9IHNlbGYubWFjaGluZV9jb21iby5nZXRfbW9kZWwoKQorICAgICAgICBtb2RlbC5jbGVhcigpCisgICAgICAgIGZvciBtYWNoaW5lIGluIGFsbF9tYWNoaW5lczoKKyAgICAgICAgICAgIHNlbGYubWFjaGluZV9jb21iby5hcHBlbmRfdGV4dChtYWNoaW5lKQorICAgICAgICBzZWxmLm1hY2hpbmVfY29tYm8uc2V0X2FjdGl2ZSgwKQorCisgICAgZGVmIHN3aXRjaF9tYWNoaW5lX2NvbWJvKHNlbGYpOgorICAgICAgICBzZWxmLmRpc2FibGVfd2FybmluZ3NfYmFyKCkKKyAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvX2NoYW5nZWRfYnlfbWFudWFsID0gRmFsc2UKKyAgICAgICAgbW9kZWwgPSBzZWxmLm1hY2hpbmVfY29tYm8uZ2V0X21vZGVsKCkKKyAgICAgICAgYWN0aXZlID0gMAorICAgICAgICB3aGlsZSBhY3RpdmUgPCBsZW4obW9kZWwpOgorICAgICAgICAgICAgaWYgbW9kZWxbYWN0aXZlXVswXSA9PSBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5jdXJyX21hY2g6CisgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvLnNldF9hY3RpdmUoYWN0aXZlKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgYWN0aXZlICs9IDEKKworICAgICAgICBpZiBtb2RlbFswXVswXSAhPSBzZWxmLl9fZHVtbXlfbWFjaGluZV9fOgorICAgICAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvLmluc2VydF90ZXh0KDAsIHNlbGYuX19kdW1teV9tYWNoaW5lX18pCisKKyAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvLnNldF9hY3RpdmUoMCkKKworICAgIGRlZiB1cGRhdGVfaW1hZ2VfZGVzYyhzZWxmKToKKyAgICAgICAgZGVzYyA9ICIiCisgICAgICAgIHNlbGVjdGVkX2ltYWdlID0gc2VsZi5pbWFnZV9jb21iby5nZXRfYWN0aXZlX3RleHQoKQorICAgICAgICBpZiBzZWxlY3RlZF9pbWFnZSBhbmQgc2VsZWN0ZWRfaW1hZ2UgaW4gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5wbl9wYXRoLmtleXMoKToKKyAgICAgICAgICAgIGltYWdlX3BhdGggPSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLnBuX3BhdGhbc2VsZWN0ZWRfaW1hZ2VdCisgICAgICAgICAgICBpbWFnZV9pdGVyID0gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5nZXRfaXRlcihpbWFnZV9wYXRoKQorICAgICAgICAgICAgZGVzYyA9IHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuZ2V0X3ZhbHVlKGltYWdlX2l0ZXIsIHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuQ09MX0RFU0MpCisKKyAgICAgICAgbWFyayA9ICgiPHNwYW4gJXM+JXM8L3NwYW4+XG4iKSAlIChzZWxmLnNwYW5fdGFnKCdzbWFsbCcpLCBkZXNjKQorICAgICAgICBzZWxmLmltYWdlX2Rlc2Muc2V0X21hcmt1cChtYXJrKQorCisgICAgZGVmIGltYWdlX2NvbWJvX2NoYW5nZWRfaWRsZV9jYihzZWxmLCBzZWxlY3RlZF9pbWFnZSwgc2VsZWN0ZWRfcmVjaXBlcywgc2VsZWN0ZWRfcGFja2FnZXMpOgorICAgICAgICBzZWxmLmJ1aWxkZXIudXBkYXRlX3JlY2lwZV9tb2RlbChzZWxlY3RlZF9pbWFnZSwgc2VsZWN0ZWRfcmVjaXBlcykKKyAgICAgICAgc2VsZi5idWlsZGVyLnVwZGF0ZV9wYWNrYWdlX21vZGVsKHNlbGVjdGVkX3BhY2thZ2VzKQorICAgICAgICBzZWxmLmJ1aWxkZXIud2luZG93X3NlbnNpdGl2ZShUcnVlKQorCisgICAgZGVmIGltYWdlX2NvbWJvX2NoYW5nZWRfY2Ioc2VsZiwgY29tYm8pOgorICAgICAgICBzZWxmLmJ1aWxkZXIud2luZG93X3NlbnNpdGl2ZShGYWxzZSkKKyAgICAgICAgc2VsZWN0ZWRfaW1hZ2UgPSBzZWxmLmltYWdlX2NvbWJvLmdldF9hY3RpdmVfdGV4dCgpCisgICAgICAgIGlmIHNlbGVjdGVkX2ltYWdlID09IHNlbGYuX19jdXN0b21faW1hZ2VfXzoKKyAgICAgICAgICAgIHRvcGRpciA9IHNlbGYuYnVpbGRlci5nZXRfdG9wZGlyKCkKKyAgICAgICAgICAgIGltYWdlc19kaXIgPSB0b3BkaXIgKyAiL3JlY2lwZXMvaW1hZ2VzL2N1c3RvbS8iCisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuZW5zdXJlX2RpcihpbWFnZXNfZGlyKQorCisgICAgICAgICAgICBkaWFsb2cgPSBSZXRyaWV2ZUltYWdlRGlhbG9nKGltYWdlc19kaXIsICJTZWxlY3QgZnJvbSBteSBpbWFnZSByZWNpcGVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkZXIsIGd0ay5ESUFMT0dfTU9EQUwgfCBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQpCisgICAgICAgICAgICByZXNwb25zZSA9IGRpYWxvZy5ydW4oKQorICAgICAgICAgICAgaWYgcmVzcG9uc2UgPT0gZ3RrLlJFU1BPTlNFX09LOgorICAgICAgICAgICAgICAgIGltYWdlX25hbWUgPSBkaWFsb2cuZ2V0X2ZpbGVuYW1lKCkKKyAgICAgICAgICAgICAgICBoZWFkLCB0YWlsID0gb3MucGF0aC5zcGxpdChpbWFnZV9uYW1lKQorICAgICAgICAgICAgICAgIHNlbGVjdGVkX2ltYWdlID0gb3MucGF0aC5zcGxpdGV4dCh0YWlsKVswXQorICAgICAgICAgICAgICAgIHNlbGYuY3VzdG9tX2ltYWdlX3NlbGVjdGVkID0gc2VsZWN0ZWRfaW1hZ2UKKyAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZV9pbWFnZV9jb21ibyhzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLCBzZWxlY3RlZF9pbWFnZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZWN0ZWRfaW1hZ2UgPSBzZWxmLl9fZHVtbXlfaW1hZ2VfXworICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlX2ltYWdlX2NvbWJvKHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwsIE5vbmUpCisgICAgICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLmN1c3RvbV9pbWFnZV9zZWxlY3RlZDoKKyAgICAgICAgICAgICAgICBzZWxmLmN1c3RvbV9pbWFnZV9zZWxlY3RlZCA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZV9pbWFnZV9jb21ibyhzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLCBzZWxlY3RlZF9pbWFnZSkKKworICAgICAgICBpZiBub3Qgc2VsZWN0ZWRfaW1hZ2Ugb3IgKHNlbGVjdGVkX2ltYWdlID09IHNlbGYuX19kdW1teV9pbWFnZV9fKToKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci53aW5kb3dfc2Vuc2l0aXZlKFRydWUpCisgICAgICAgICAgICBzZWxmLmp1c3RfYmFrZV9idXR0b24uaGlkZSgpCisgICAgICAgICAgICBzZWxmLmVkaXRfaW1hZ2VfYnV0dG9uLmhpZGUoKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyByZW1vdmUgX19kdW1teV9pbWFnZV9fIGl0ZW0gZnJvbSB0aGUgc3RvcmUgbGlzdCBhZnRlciBmaXJzdCB1c2VyIHNlbGVjdGlvbgorICAgICAgICAjIGJlY2F1c2UgaXQgaXMgbm8gbG9uZ2VyIHZhbGlkCisgICAgICAgIGNvbWJvX3N0b3JlID0gY29tYm8uZ2V0X21vZGVsKCkKKyAgICAgICAgaWYgbGVuKGNvbWJvX3N0b3JlKSBhbmQgKGNvbWJvX3N0b3JlWzBdWzBdID09IHNlbGYuX19kdW1teV9pbWFnZV9fKToKKyAgICAgICAgICAgIGNvbWJvLnJlbW92ZV90ZXh0KDApCisKKyAgICAgICAgc2VsZi5idWlsZGVyLmN1c3RvbWl6ZWQgPSBGYWxzZQorCisgICAgICAgIHNlbGVjdGVkX3JlY2lwZXMgPSBbXQorCisgICAgICAgIGltYWdlX3BhdGggPSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLnBuX3BhdGhbc2VsZWN0ZWRfaW1hZ2VdCisgICAgICAgIGltYWdlX2l0ZXIgPSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLmdldF9pdGVyKGltYWdlX3BhdGgpCisgICAgICAgIHNlbGVjdGVkX3BhY2thZ2VzID0gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5nZXRfdmFsdWUoaW1hZ2VfaXRlciwgc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5DT0xfSU5TVEFMTCkuc3BsaXQoKQorICAgICAgICBzZWxmLnVwZGF0ZV9pbWFnZV9kZXNjKCkKKworICAgICAgICBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLnJlc2V0KCkKKyAgICAgICAgc2VsZi5idWlsZGVyLnBhY2thZ2VfbW9kZWwucmVzZXQoKQorCisgICAgICAgIHNlbGYuc2hvd19iYXNlaW1nX3NlbGVjdGVkKCkKKworICAgICAgICBpZiBzZWxlY3RlZF9pbWFnZSA9PSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLl9fY3VzdG9tX2ltYWdlX186CisgICAgICAgICAgICBzZWxmLmp1c3RfYmFrZV9idXR0b24uaGlkZSgpCisKKyAgICAgICAgZ2xpYi5pZGxlX2FkZChzZWxmLmltYWdlX2NvbWJvX2NoYW5nZWRfaWRsZV9jYiwgc2VsZWN0ZWRfaW1hZ2UsIHNlbGVjdGVkX3JlY2lwZXMsIHNlbGVjdGVkX3BhY2thZ2VzKQorCisgICAgZGVmIF9pbWFnZV9jb21ib19jb25uZWN0X3NpZ25hbChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaW1hZ2VfY29tYm9faWQ6CisgICAgICAgICAgICBzZWxmLmltYWdlX2NvbWJvX2lkID0gc2VsZi5pbWFnZV9jb21iby5jb25uZWN0KCJjaGFuZ2VkIiwgc2VsZi5pbWFnZV9jb21ib19jaGFuZ2VkX2NiKQorCisgICAgZGVmIF9pbWFnZV9jb21ib19kaXNjb25uZWN0X3NpZ25hbChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pbWFnZV9jb21ib19pZDoKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfY29tYm8uZGlzY29ubmVjdChzZWxmLmltYWdlX2NvbWJvX2lkKQorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb21ib19pZCA9IE5vbmUKKworICAgIGRlZiB1cGRhdGVfaW1hZ2VfY29tYm8oc2VsZiwgcmVjaXBlX21vZGVsLCBzZWxlY3RlZF9pbWFnZSk6CisgICAgICAgICMgVXBkYXRlIHRoZSBpbWFnZSBjb21ibyBhY2NvcmRpbmcgdG8gdGhlIGltYWdlcyBpbiB0aGUgcmVjaXBlX21vZGVsCisgICAgICAgICMgcG9wdWxhdGUgaW1hZ2UgY29tYm8KKyAgICAgICAgZmlsdGVyID0ge1JlY2lwZUxpc3RNb2RlbC5DT0xfVFlQRSA6IFsnaW1hZ2UnXX0KKyAgICAgICAgaW1hZ2VfbW9kZWwgPSByZWNpcGVfbW9kZWwudHJlZV9tb2RlbChmaWx0ZXIpCisgICAgICAgIGltYWdlX21vZGVsLnNldF9zb3J0X2NvbHVtbl9pZChyZWNpcGVfbW9kZWwuQ09MX05BTUUsIGd0ay5TT1JUX0FTQ0VORElORykKKyAgICAgICAgYWN0aXZlID0gMAorICAgICAgICBjbnQgPSAwCisKKyAgICAgICAgd2hpdGVfcGF0dGVybiA9IFtdCisgICAgICAgIGlmIHNlbGYuYnVpbGRlci5wYXJhbWV0ZXJzLmltYWdlX3doaXRlX3BhdHRlcm46CisgICAgICAgICAgICBmb3IgaSBpbiBzZWxmLmJ1aWxkZXIucGFyYW1ldGVycy5pbWFnZV93aGl0ZV9wYXR0ZXJuLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgd2hpdGVfcGF0dGVybi5hcHBlbmQocmUuY29tcGlsZShpKSkKKworICAgICAgICBibGFja19wYXR0ZXJuID0gW10KKyAgICAgICAgaWYgc2VsZi5idWlsZGVyLnBhcmFtZXRlcnMuaW1hZ2VfYmxhY2tfcGF0dGVybjoKKyAgICAgICAgICAgIGZvciBpIGluIHNlbGYuYnVpbGRlci5wYXJhbWV0ZXJzLmltYWdlX2JsYWNrX3BhdHRlcm4uc3BsaXQoKToKKyAgICAgICAgICAgICAgICBibGFja19wYXR0ZXJuLmFwcGVuZChyZS5jb21waWxlKGkpKQorICAgICAgICBibGFja19wYXR0ZXJuLmFwcGVuZChyZS5jb21waWxlKCJob2ItaW1hZ2UiKSkKKyAgICAgICAgYmxhY2tfcGF0dGVybi5hcHBlbmQocmUuY29tcGlsZSgiZWRpdGVkKC1bMC05XSopKi5iYiQiKSkKKworICAgICAgICBpdCA9IGltYWdlX21vZGVsLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgc2VsZi5faW1hZ2VfY29tYm9fZGlzY29ubmVjdF9zaWduYWwoKQorICAgICAgICBtb2RlbCA9IHNlbGYuaW1hZ2VfY29tYm8uZ2V0X21vZGVsKCkKKyAgICAgICAgbW9kZWwuY2xlYXIoKQorICAgICAgICAjIFNldCBhIGluZGljYXRvciB0ZXh0IHRvIGNvbWJvIHN0b3JlIHdoZW4gZmlyc3Qgb3BlbgorICAgICAgICBpZiBub3Qgc2VsZWN0ZWRfaW1hZ2U6CisgICAgICAgICAgICBzZWxmLmltYWdlX2NvbWJvLmFwcGVuZF90ZXh0KHNlbGYuX19kdW1teV9pbWFnZV9fKQorICAgICAgICAgICAgY250ID0gY250ICsgMQorCisgICAgICAgIHNlbGYuaW1hZ2VfY29tYm8uYXBwZW5kX3RleHQoc2VsZi5fX2N1c3RvbV9pbWFnZV9fKQorICAgICAgICBzZWxmLmltYWdlX2NvbWJvLmFwcGVuZF90ZXh0KCItLVNlcGFyYXRvci0tIikKKyAgICAgICAgY250ID0gY250ICsgMgorCisgICAgICAgIHRvcGRpciA9IHNlbGYuYnVpbGRlci5nZXRfdG9wZGlyKCkKKyAgICAgICAgIyBhcHBlbmQgYW5kIHNldCBhY3RpdmUKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBwYXRoID0gaW1hZ2VfbW9kZWwuZ2V0X3BhdGgoaXQpCisgICAgICAgICAgICBpdCA9IGltYWdlX21vZGVsLml0ZXJfbmV4dChpdCkKKyAgICAgICAgICAgIGltYWdlX25hbWUgPSBpbWFnZV9tb2RlbFtwYXRoXVtyZWNpcGVfbW9kZWwuQ09MX05BTUVdCisgICAgICAgICAgICBpZiBpbWFnZV9uYW1lID09IHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuX19jdXN0b21faW1hZ2VfXzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBibGFja19wYXR0ZXJuOgorICAgICAgICAgICAgICAgIGFsbG93ID0gVHJ1ZQorICAgICAgICAgICAgICAgIGZvciBwYXR0ZXJuIGluIGJsYWNrX3BhdHRlcm46CisgICAgICAgICAgICAgICAgICAgIGlmIHBhdHRlcm4uc2VhcmNoKGltYWdlX25hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3cgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsaWYgd2hpdGVfcGF0dGVybjoKKyAgICAgICAgICAgICAgICBhbGxvdyA9IEZhbHNlCisgICAgICAgICAgICAgICAgZm9yIHBhdHRlcm4gaW4gd2hpdGVfcGF0dGVybjoKKyAgICAgICAgICAgICAgICAgICAgaWYgcGF0dGVybi5zZWFyY2goaW1hZ2VfbmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFsbG93ID0gVHJ1ZQorCisgICAgICAgICAgICBmaWxlX25hbWUgPSBpbWFnZV9tb2RlbFtwYXRoXVtyZWNpcGVfbW9kZWwuQ09MX0ZJTEVdCisgICAgICAgICAgICBpZiBmaWxlX25hbWUgYW5kIHRvcGRpciBpbiBmaWxlX25hbWU6CisgICAgICAgICAgICAgICAgYWxsb3cgPSBGYWxzZQorCisgICAgICAgICAgICBpZiBhbGxvdzoKKyAgICAgICAgICAgICAgICBzZWxmLmltYWdlX2NvbWJvLmFwcGVuZF90ZXh0KGltYWdlX25hbWUpCisgICAgICAgICAgICAgICAgaWYgaW1hZ2VfbmFtZSA9PSBzZWxlY3RlZF9pbWFnZToKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlID0gY250CisgICAgICAgICAgICAgICAgY250ID0gY250ICsgMQorICAgICAgICBzZWxmLmltYWdlX2NvbWJvLmFwcGVuZF90ZXh0KHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuX19jdXN0b21faW1hZ2VfXykKKworICAgICAgICBpZiBzZWxlY3RlZF9pbWFnZSA9PSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLl9fY3VzdG9tX2ltYWdlX186CisgICAgICAgICAgICBhY3RpdmUgPSBjbnQKKworICAgICAgICBpZiBzZWxmLmN1c3RvbV9pbWFnZV9zZWxlY3RlZDoKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfY29tYm8uYXBwZW5kX3RleHQoIi0tU2VwYXJhdG9yLS0iKQorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb21iby5hcHBlbmRfdGV4dChzZWxmLmN1c3RvbV9pbWFnZV9zZWxlY3RlZCkKKyAgICAgICAgICAgIGNudCA9IGNudCArIDIKKyAgICAgICAgICAgIGlmIHNlbGYuY3VzdG9tX2ltYWdlX3NlbGVjdGVkID09IHNlbGVjdGVkX2ltYWdlOgorICAgICAgICAgICAgICAgIGFjdGl2ZSA9IGNudAorCisgICAgICAgIHNlbGYuaW1hZ2VfY29tYm8uc2V0X2FjdGl2ZShhY3RpdmUpCisKKyAgICAgICAgaWYgYWN0aXZlICE9IDA6CisgICAgICAgICAgICBzZWxmLnNob3dfYmFzZWltZ19zZWxlY3RlZCgpCisKKyAgICAgICAgc2VsZi5faW1hZ2VfY29tYm9fY29ubmVjdF9zaWduYWwoKQorCisgICAgZGVmIGxheWVyX2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgICMgQ3JlYXRlIGEgbGF5ZXIgc2VsZWN0aW9uIGRpYWxvZworICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19sYXllcl9zZWxlY3Rpb25fZGlhbG9nKCkKKworICAgIGRlZiB2aWV3X2Fkdl9jb25maWd1cmF0aW9uX2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgICMgQ3JlYXRlIGFuIGFkdmFuY2VkIHNldHRpbmdzIGRpYWxvZworICAgICAgICByZXNwb25zZSwgc2V0dGluZ3NfY2hhbmdlZCA9IHNlbGYuYnVpbGRlci5zaG93X2Fkdl9zZXR0aW5nc19kaWFsb2coKQorICAgICAgICBpZiBub3QgcmVzcG9uc2U6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2V0dGluZ3NfY2hhbmdlZDoKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci53aW5kb3cuc2V0X2N1cnNvcihndGsuZ2RrLkN1cnNvcihndGsuZ2RrLldBVENIKSkKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci53YWl0KDAuMSkgI3dhaXQgZm9yIGFkdl9zZXR0aW5nc19kaWFsb2cgdG8gdGVybWluYXRlCisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIucmVwYXJzZV9wb3N0X2Fkdl9zZXR0aW5ncygpCisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIud2luZG93LnNldF9jdXJzb3IoTm9uZSkKKworICAgIGRlZiBqdXN0X2Jha2VfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5idWlsZGVyLnBhcnNpbmdfd2FybmluZ3MgPSBbXQorICAgICAgICBzZWxmLmJ1aWxkZXIuanVzdF9iYWtlKCkKKworICAgIGRlZiBlZGl0X2ltYWdlX2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGYuYnVpbGRlci5zZXRfYmFzZV9pbWFnZSgpCisgICAgICAgIHNlbGYuYnVpbGRlci5zaG93X3JlY2lwZXMoKQorCisgICAgZGVmIG15X2ltYWdlc19idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19sb2FkX215X2ltYWdlc19kaWFsb2coKQorCisgICAgZGVmIHNldHRpbmdzX2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgICMgQ3JlYXRlIGFuIGFkdmFuY2VkIHNldHRpbmdzIGRpYWxvZworICAgICAgICByZXNwb25zZSwgc2V0dGluZ3NfY2hhbmdlZCA9IHNlbGYuYnVpbGRlci5zaG93X3NpbXBsZV9zZXR0aW5nc19kaWFsb2coKQorICAgICAgICBpZiBub3QgcmVzcG9uc2U6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2V0dGluZ3NfY2hhbmdlZDoKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5yZXBhcnNlX3Bvc3RfYWR2X3NldHRpbmdzKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2ltYWdlZGV0YWlsc3BhZ2UucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9pbWFnZWRldGFpbHNwYWdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM1MmU5NDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9pbWFnZWRldGFpbHNwYWdlLnB5CkBAIC0wLDAgKzEsNjY5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMiAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ29iamVjdAoraW1wb3J0IGd0aworZnJvbSBiYi51aS5jcnVtYnMuaG9iY29sb3IgaW1wb3J0IEhvYkNvbG9ycworZnJvbSBiYi51aS5jcnVtYnMuaG9id2lkZ2V0IGltcG9ydCBoaWMsIEhvYlZpZXdUYWJsZSwgSG9iQWx0QnV0dG9uLCBIb2JCdXR0b24KK2Zyb20gYmIudWkuY3J1bWJzLmhvYnBhZ2VzIGltcG9ydCBIb2JQYWdlCitpbXBvcnQgc3VicHJvY2VzcworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic2RpYWxvZyBpbXBvcnQgQ3J1bWJzRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuc2F2ZWltYWdlZGlhbG9nIGltcG9ydCBTYXZlSW1hZ2VEaWFsb2cKKworIworIyBJbWFnZURldGFpbHNQYWdlCisjCitjbGFzcyBJbWFnZURldGFpbHNQYWdlIChIb2JQYWdlKToKKworICAgIGNsYXNzIERldGFpbEJveCAoZ3RrLkV2ZW50Qm94KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdpZGdldCA9IE5vbmUsIHZhcmxpc3QgPSBOb25lLCB2YWxsaXN0ID0gTm9uZSwgaWNvbiA9IE5vbmUsIGJ1dHRvbiA9IE5vbmUsIGJ1dHRvbjI9Tm9uZSwgY29sb3IgPSBIb2JDb2xvcnMuTElHSFRfR1JBWSk6CisgICAgICAgICAgICBndGsuRXZlbnRCb3guX19pbml0X18oc2VsZikKKworICAgICAgICAgICAgIyBzZXQgY29sb3IKKyAgICAgICAgICAgIHN0eWxlID0gc2VsZi5nZXRfc3R5bGUoKS5jb3B5KCkKKyAgICAgICAgICAgIHN0eWxlLmJnW2d0ay5TVEFURV9OT1JNQUxdID0gc2VsZi5nZXRfY29sb3JtYXAoKS5hbGxvY19jb2xvcihjb2xvciwgRmFsc2UsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5zZXRfc3R5bGUoc3R5bGUpCisKKyAgICAgICAgICAgIHNlbGYucm93ID0gZ3RrLlRhYmxlKDEsIDIsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5yb3cuc2V0X2JvcmRlcl93aWR0aCgxMCkKKyAgICAgICAgICAgIHNlbGYuYWRkKHNlbGYucm93KQorICAgICAgICAKKyAgICAgICAgICAgIHRvdGFsX3Jvd3MgPSAwCisgICAgICAgICAgICBpZiB3aWRnZXQ6CisgICAgICAgICAgICAgICAgdG90YWxfcm93cyA9IDEwCisgICAgICAgICAgICBpZiB2YXJsaXN0IGFuZCB2YWxsaXN0OgorICAgICAgICAgICAgICAgICMgcGFjayB0aGUgaWNvbiBhbmQgdGhlIHRleHQgb24gdGhlIGxlZnQKKyAgICAgICAgICAgICAgICB0b3RhbF9yb3dzICs9IGxlbih2YXJsaXN0KQorICAgICAgICAgICAgc2VsZi50YWJsZSA9IGd0ay5UYWJsZSh0b3RhbF9yb3dzLCAyMCwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYudGFibGUuc2V0X3Jvd19zcGFjaW5ncyg2KQorICAgICAgICAgICAgc2VsZi50YWJsZS5zZXRfc2l6ZV9yZXF1ZXN0KDEwMCwgLTEpCisgICAgICAgICAgICBzZWxmLnJvdy5hdHRhY2goc2VsZi50YWJsZSwgMCwgMSwgMCwgMSwgeG9wdGlvbnM9Z3RrLkZJTEx8Z3RrLkVYUEFORCwgeW9wdGlvbnM9Z3RrLkZJTEwpCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbGlkID0gMAorICAgICAgICAgICAgcm93aWQgPSAwCisgICAgICAgICAgICBzZWxmLmxpbmVfd2lkZ2V0cyA9IHt9CisgICAgICAgICAgICBpZiBpY29uOgorICAgICAgICAgICAgICAgIHNlbGYudGFibGUuYXR0YWNoKGljb24sIGNvbGlkLCBjb2xpZCArIDIsIDAsIDEpCisgICAgICAgICAgICAgICAgY29saWQgPSBjb2xpZCArIDIKKyAgICAgICAgICAgIGlmIHdpZGdldDoKKyAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLmF0dGFjaCh3aWRnZXQsIGNvbGlkLCAyMCwgMCwgMTApCisgICAgICAgICAgICAgICAgcm93aWQgPSAxMAorICAgICAgICAgICAgaWYgdmFybGlzdCBhbmQgdmFsbGlzdDoKKyAgICAgICAgICAgICAgICBmb3Igcm93IGluIHJhbmdlKHJvd2lkLCB0b3RhbF9yb3dzKToKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggPSByb3cgLSByb3dpZAorICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVfd2lkZ2V0c1t2YXJsaXN0W2luZGV4XV0gPSBzZWxmLnRleHQybGFiZWwodmFybGlzdFtpbmRleF0sIHZhbGxpc3RbaW5kZXhdKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLmF0dGFjaChzZWxmLmxpbmVfd2lkZ2V0c1t2YXJsaXN0W2luZGV4XV0sIGNvbGlkLCAyMCwgcm93LCByb3cgKyAxKQorICAgICAgICAgICAgIyBwYWNrIHRoZSBidXR0b24gb24gdGhlIHJpZ2h0CisgICAgICAgICAgICBpZiBidXR0b246CisgICAgICAgICAgICAgICAgc2VsZi5iYm94ID0gZ3RrLlZCb3goKQorICAgICAgICAgICAgICAgIHNlbGYuYmJveC5wYWNrX3N0YXJ0KGJ1dHRvbiwgZXhwYW5kPVRydWUsIGZpbGw9RmFsc2UpCisgICAgICAgICAgICAgICAgaWYgYnV0dG9uMjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5iYm94LnBhY2tfc3RhcnQoYnV0dG9uMiwgZXhwYW5kPVRydWUsIGZpbGw9RmFsc2UpCisgICAgICAgICAgICAgICAgc2VsZi5iYm94LnNldF9zaXplX3JlcXVlc3QoMTUwLC0xKQorICAgICAgICAgICAgICAgIHNlbGYucm93LmF0dGFjaChzZWxmLmJib3gsIDEsIDIsIDAsIDEsIHhvcHRpb25zPWd0ay5GSUxMLCB5b3B0aW9ucz1ndGsuRVhQQU5EKQorICAgICAgICAgICAgICAgIAorICAgICAgICBkZWYgdXBkYXRlX2xpbmVfd2lkZ2V0cyhzZWxmLCB2YXJpYWJsZSwgdmFsdWUpOgorICAgICAgICAgICAgaWYgbGVuKHNlbGYubGluZV93aWRnZXRzKSA9PSAwOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi5saW5lX3dpZGdldHNbdmFyaWFibGVdLCBndGsuTGFiZWwpOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi5saW5lX3dpZGdldHNbdmFyaWFibGVdLnNldF9tYXJrdXAoc2VsZi5mb3JtYXRfbGluZSh2YXJpYWJsZSwgdmFsdWUpKQorCisgICAgICAgIGRlZiB3cmFwX2xpbmUoc2VsZiwgaW5wdXRzKToKKyAgICAgICAgICAgICMgd3JhcCB0aGUgbG9uZyB0ZXh0IG9mIGlucHV0cworICAgICAgICAgICAgd3JhcF93aWR0aF9jaGFycyA9IDc1CisgICAgICAgICAgICBvdXRwdXRzID0gIiIKKyAgICAgICAgICAgIHRtcHMgPSBpbnB1dHMKKyAgICAgICAgICAgIGxlc3NfY2hhcnMgPSBsZW4oaW5wdXRzKQorICAgICAgICAgICAgd2hpbGUgKGxlc3NfY2hhcnMgLSB3cmFwX3dpZHRoX2NoYXJzKSA+IDA6CisgICAgICAgICAgICAgICAgbGVzc19jaGFycyAtPSB3cmFwX3dpZHRoX2NoYXJzCisgICAgICAgICAgICAgICAgb3V0cHV0cyArPSB0bXBzWzp3cmFwX3dpZHRoX2NoYXJzXSArICJcbiAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgICAgICB0bXBzID0gaW5wdXRzW2xlc3NfY2hhcnM6XQorICAgICAgICAgICAgb3V0cHV0cyArPSB0bXBzCisgICAgICAgICAgICByZXR1cm4gb3V0cHV0cworCisgICAgICAgIGRlZiBmb3JtYXRfbGluZShzZWxmLCB2YXJpYWJsZSwgdmFsdWUpOgorICAgICAgICAgICAgd3JhcGVkX3ZhbHVlID0gc2VsZi53cmFwX2xpbmUodmFsdWUpCisgICAgICAgICAgICBtYXJrdXAgPSAiPHNwYW4gd2VpZ2h0PVwnYm9sZFwnPiVzPC9zcGFuPiIgJSB2YXJpYWJsZQorICAgICAgICAgICAgbWFya3VwICs9ICI8c3BhbiB3ZWlnaHQ9XCdub3JtYWxcJyBmb3JlZ3JvdW5kPVwnIzFjMWMxY1wnIGZvbnRfZGVzYz1cJzE0cHhcJz4lczwvc3Bhbj4iICUgd3JhcGVkX3ZhbHVlCisgICAgICAgICAgICByZXR1cm4gbWFya3VwCisKKyAgICAgICAgZGVmIHRleHQybGFiZWwoc2VsZiwgdmFyaWFibGUsIHZhbHVlKToKKyAgICAgICAgICAgICMgYXBwZW5kIHRoZSBuYW1lOnZhbHVlIHRvIHRoZSBsZWZ0IGJveAorICAgICAgICAgICAgIyBzdWNoIGFzICJOYW1lOiBob2ItY29yZS1taW5pbWFsLXZhcmlhbnQtMjAxMS0xMi0xNS1iZWFnbGVib2FyZCIKKyAgICAgICAgICAgIGxhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgIGxhYmVsLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCisgICAgICAgICAgICBsYWJlbC5zZXRfbWFya3VwKHNlbGYuZm9ybWF0X2xpbmUodmFyaWFibGUsIHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBsYWJlbAorCisgICAgY2xhc3MgQnVpbGREZXRhaWxCb3ggKGd0ay5FdmVudEJveCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YXJsaXN0ID0gTm9uZSwgdmFsbGlzdCA9IE5vbmUsIGljb24gPSBOb25lLCBjb2xvciA9IEhvYkNvbG9ycy5MSUdIVF9HUkFZKToKKyAgICAgICAgICAgIGd0ay5FdmVudEJveC5fX2luaXRfXyhzZWxmKQorCisgICAgICAgICAgICAjIHNldCBjb2xvcgorICAgICAgICAgICAgc3R5bGUgPSBzZWxmLmdldF9zdHlsZSgpLmNvcHkoKQorICAgICAgICAgICAgc3R5bGUuYmdbZ3RrLlNUQVRFX05PUk1BTF0gPSBzZWxmLmdldF9jb2xvcm1hcCgpLmFsbG9jX2NvbG9yKGNvbG9yLCBGYWxzZSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLnNldF9zdHlsZShzdHlsZSkKKworICAgICAgICAgICAgc2VsZi5oYm94ID0gZ3RrLkhCb3goKQorICAgICAgICAgICAgc2VsZi5oYm94LnNldF9ib3JkZXJfd2lkdGgoMTApCisgICAgICAgICAgICBzZWxmLmFkZChzZWxmLmhib3gpCisKKyAgICAgICAgICAgIHRvdGFsX3Jvd3MgPSAwCisgICAgICAgICAgICBpZiB2YXJsaXN0IGFuZCB2YWxsaXN0OgorICAgICAgICAgICAgICAgICMgcGFjayB0aGUgaWNvbiBhbmQgdGhlIHRleHQgb24gdGhlIGxlZnQKKyAgICAgICAgICAgICAgICB0b3RhbF9yb3dzICs9IGxlbih2YXJsaXN0KQorICAgICAgICAgICAgc2VsZi50YWJsZSA9IGd0ay5UYWJsZSh0b3RhbF9yb3dzLCAyMCwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYudGFibGUuc2V0X3Jvd19zcGFjaW5ncyg2KQorICAgICAgICAgICAgc2VsZi50YWJsZS5zZXRfc2l6ZV9yZXF1ZXN0KDEwMCwgLTEpCisgICAgICAgICAgICBzZWxmLmhib3gucGFja19zdGFydChzZWxmLnRhYmxlLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlLCBwYWRkaW5nPTE1KQorCisgICAgICAgICAgICBjb2xpZCA9IDAKKyAgICAgICAgICAgIHJvd2lkID0gMAorICAgICAgICAgICAgc2VsZi5saW5lX3dpZGdldHMgPSB7fQorICAgICAgICAgICAgaWYgaWNvbjoKKyAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLmF0dGFjaChpY29uLCBjb2xpZCwgY29saWQgKyAyLCAwLCAxKQorICAgICAgICAgICAgICAgIGNvbGlkID0gY29saWQgKyAyCisgICAgICAgICAgICBpZiB2YXJsaXN0IGFuZCB2YWxsaXN0OgorICAgICAgICAgICAgICAgIGZvciByb3cgaW4gcmFuZ2Uocm93aWQsIHRvdGFsX3Jvd3MpOgorICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHJvdyAtIHJvd2lkCisgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZV93aWRnZXRzW3Zhcmxpc3RbaW5kZXhdXSA9IHNlbGYudGV4dDJsYWJlbCh2YXJsaXN0W2luZGV4XSwgdmFsbGlzdFtpbmRleF0pCisgICAgICAgICAgICAgICAgICAgIHNlbGYudGFibGUuYXR0YWNoKHNlbGYubGluZV93aWRnZXRzW3Zhcmxpc3RbaW5kZXhdXSwgY29saWQsIDIwLCByb3csIHJvdyArIDEpCisgICAgICAgICAgICAgICAgCisgICAgICAgIGRlZiB1cGRhdGVfbGluZV93aWRnZXRzKHNlbGYsIHZhcmlhYmxlLCB2YWx1ZSk6CisgICAgICAgICAgICBpZiBsZW4oc2VsZi5saW5lX3dpZGdldHMpID09IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZWxmLmxpbmVfd2lkZ2V0c1t2YXJpYWJsZV0sIGd0ay5MYWJlbCk6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzZWxmLmxpbmVfd2lkZ2V0c1t2YXJpYWJsZV0uc2V0X21hcmt1cChzZWxmLmZvcm1hdF9saW5lKHZhcmlhYmxlLCB2YWx1ZSkpCisKKyAgICAgICAgZGVmIHdyYXBfbGluZShzZWxmLCBpbnB1dHMpOgorICAgICAgICAgICAgIyB3cmFwIHRoZSBsb25nIHRleHQgb2YgaW5wdXRzCisgICAgICAgICAgICB3cmFwX3dpZHRoX2NoYXJzID0gNzUKKyAgICAgICAgICAgIG91dHB1dHMgPSAiIgorICAgICAgICAgICAgdG1wcyA9IGlucHV0cworICAgICAgICAgICAgbGVzc19jaGFycyA9IGxlbihpbnB1dHMpCisgICAgICAgICAgICB3aGlsZSAobGVzc19jaGFycyAtIHdyYXBfd2lkdGhfY2hhcnMpID4gMDoKKyAgICAgICAgICAgICAgICBsZXNzX2NoYXJzIC09IHdyYXBfd2lkdGhfY2hhcnMKKyAgICAgICAgICAgICAgICBvdXRwdXRzICs9IHRtcHNbOndyYXBfd2lkdGhfY2hhcnNdICsgIlxuICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgIHRtcHMgPSBpbnB1dHNbbGVzc19jaGFyczpdCisgICAgICAgICAgICBvdXRwdXRzICs9IHRtcHMKKyAgICAgICAgICAgIHJldHVybiBvdXRwdXRzCisKKyAgICAgICAgZGVmIGZvcm1hdF9saW5lKHNlbGYsIHZhcmlhYmxlLCB2YWx1ZSk6CisgICAgICAgICAgICB3cmFwZWRfdmFsdWUgPSBzZWxmLndyYXBfbGluZSh2YWx1ZSkKKyAgICAgICAgICAgIG1hcmt1cCA9ICI8c3BhbiB3ZWlnaHQ9XCdib2xkXCc+JXM8L3NwYW4+IiAlIHZhcmlhYmxlCisgICAgICAgICAgICBtYXJrdXAgKz0gIjxzcGFuIHdlaWdodD1cJ25vcm1hbFwnIGZvcmVncm91bmQ9XCcjMWMxYzFjXCcgZm9udF9kZXNjPVwnMTRweFwnPiVzPC9zcGFuPiIgJSB3cmFwZWRfdmFsdWUKKyAgICAgICAgICAgIHJldHVybiBtYXJrdXAKKworICAgICAgICBkZWYgdGV4dDJsYWJlbChzZWxmLCB2YXJpYWJsZSwgdmFsdWUpOgorICAgICAgICAgICAgIyBhcHBlbmQgdGhlIG5hbWU6dmFsdWUgdG8gdGhlIGxlZnQgYm94CisgICAgICAgICAgICAjIHN1Y2ggYXMgIk5hbWU6IGhvYi1jb3JlLW1pbmltYWwtdmFyaWFudC0yMDExLTEyLTE1LWJlYWdsZWJvYXJkIgorICAgICAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgbGFiZWwuc2V0X2FsaWdubWVudCgwLjAsIDAuNSkKKyAgICAgICAgICAgIGxhYmVsLnNldF9tYXJrdXAoc2VsZi5mb3JtYXRfbGluZSh2YXJpYWJsZSwgdmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGxhYmVsCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnVpbGRlcik6CisgICAgICAgIHN1cGVyKEltYWdlRGV0YWlsc1BhZ2UsIHNlbGYpLl9faW5pdF9fKGJ1aWxkZXIsICJJbWFnZSBkZXRhaWxzIikKKworICAgICAgICBzZWxmLmltYWdlX3N0b3JlID0gW10KKyAgICAgICAgc2VsZi5idXR0b25faWRzID0ge30KKyAgICAgICAgc2VsZi5kZXRhaWxzX2JvdHRvbV9idXR0b25zID0gZ3RrLkhCb3goRmFsc2UsIDYpCisgICAgICAgIHNlbGYuaW1hZ2Vfc2F2ZWQgPSBGYWxzZQorICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorICAgICAgICBzZWxmLm5hbWVfZmllbGRfdGVtcGxhdGUgPSAiIgorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uX2ZpZWxkX3RlbXBsYXRlID0gIiIKKworICAgIGRlZiBjcmVhdGVfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICAjIGNyZWF0ZSB2aXN1YWwgZWxlbWVudHMKKyAgICAgICAgIyBjcmVhdGUgdGhlIHRvb2xiYXIKKyAgICAgICAgc2VsZi50b29sYmFyID0gZ3RrLlRvb2xiYXIoKQorICAgICAgICBzZWxmLnRvb2xiYXIuc2V0X29yaWVudGF0aW9uKGd0ay5PUklFTlRBVElPTl9IT1JJWk9OVEFMKQorICAgICAgICBzZWxmLnRvb2xiYXIuc2V0X3N0eWxlKGd0ay5UT09MQkFSX0JPVEgpCisKKyAgICAgICAgbXlfaW1hZ2VzX2J1dHRvbiA9IHNlbGYuYXBwZW5kX3Rvb2xiYXJfYnV0dG9uKHNlbGYudG9vbGJhciwKKyAgICAgICAgICAgICJJbWFnZXMiLAorICAgICAgICAgICAgaGljLklDT05fSU1BR0VTX0RJU1BMQVlfRklMRSwKKyAgICAgICAgICAgIGhpYy5JQ09OX0lNQUdFU19IT1ZFUl9GSUxFLAorICAgICAgICAgICAgIk9wZW4gcHJldmlvdXNseSBidWlsdCBpbWFnZXMiLAorICAgICAgICAgICAgc2VsZi5teV9pbWFnZXNfYnV0dG9uX2NsaWNrZWRfY2IpCisgICAgICAgIHNldHRpbmdzX2J1dHRvbiA9IHNlbGYuYXBwZW5kX3Rvb2xiYXJfYnV0dG9uKHNlbGYudG9vbGJhciwKKyAgICAgICAgICAgICJTZXR0aW5ncyIsCisgICAgICAgICAgICBoaWMuSUNPTl9TRVRUSU5HU19ESVNQTEFZX0ZJTEUsCisgICAgICAgICAgICBoaWMuSUNPTl9TRVRUSU5HU19IT1ZFUl9GSUxFLAorICAgICAgICAgICAgIlZpZXcgYWRkaXRpb25hbCBidWlsZCBzZXR0aW5ncyIsCisgICAgICAgICAgICBzZWxmLnNldHRpbmdzX2J1dHRvbl9jbGlja2VkX2NiKQorCisgICAgICAgIHNlbGYuZGV0YWlsc190b3BfYnV0dG9ucyA9IHNlbGYuYWRkX29udG9fdG9wX2JhcihzZWxmLnRvb2xiYXIpCisKKyAgICBkZWYgX3JlbW92ZV9hbGxfd2lkZ2V0KHNlbGYpOgorICAgICAgICBjaGlsZHJlbiA9IHNlbGYuZ2V0X2NoaWxkcmVuKCkgb3IgW10KKyAgICAgICAgZm9yIGNoaWxkIGluIGNoaWxkcmVuOgorICAgICAgICAgICAgc2VsZi5yZW1vdmUoY2hpbGQpCisgICAgICAgIGNoaWxkcmVuID0gc2VsZi5ib3hfZ3JvdXBfYXJlYS5nZXRfY2hpbGRyZW4oKSBvciBbXQorICAgICAgICBmb3IgY2hpbGQgaW4gY2hpbGRyZW46CisgICAgICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnJlbW92ZShjaGlsZCkKKyAgICAgICAgY2hpbGRyZW4gPSBzZWxmLmRldGFpbHNfYm90dG9tX2J1dHRvbnMuZ2V0X2NoaWxkcmVuKCkgb3IgW10KKyAgICAgICAgZm9yIGNoaWxkIGluIGNoaWxkcmVuOgorICAgICAgICAgICAgc2VsZi5kZXRhaWxzX2JvdHRvbV9idXR0b25zLnJlbW92ZShjaGlsZCkKKworICAgIGRlZiBzaG93X3BhZ2Uoc2VsZiwgc3RlcCk6CisgICAgICAgIHNlbGYuYnVpbGRfc3VjY2VlZGVkID0gKHN0ZXAgPT0gc2VsZi5idWlsZGVyLklNQUdFX0dFTkVSQVRFRCkKKyAgICAgICAgaW1hZ2VfYWRkciA9IHNlbGYuYnVpbGRlci5wYXJhbWV0ZXJzLmltYWdlX2FkZHIKKyAgICAgICAgaW1hZ2VfbmFtZXMgPSBzZWxmLmJ1aWxkZXIucGFyYW1ldGVycy5pbWFnZV9uYW1lcworICAgICAgICBpZiBzZWxmLmJ1aWxkX3N1Y2NlZWRlZDoKKyAgICAgICAgICAgIG1hY2hpbmUgPSBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5jdXJyX21hY2gKKyAgICAgICAgICAgIGJhc2VfaW1hZ2UgPSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLmdldF9zZWxlY3RlZF9pbWFnZSgpCisgICAgICAgICAgICBsYXllcnMgPSBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5sYXllcnMKKyAgICAgICAgICAgIHBrZ19udW0gPSAiJXMiICUgbGVuKHNlbGYuYnVpbGRlci5wYWNrYWdlX21vZGVsLmdldF9zZWxlY3RlZF9wYWNrYWdlcygpKQorICAgICAgICAgICAgbG9nX2ZpbGUgPSBzZWxmLmJ1aWxkZXIuY3VycmVudF9sb2dmaWxlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwa2dfbnVtID0gIk4vQSIKKyAgICAgICAgICAgIGxvZ19maWxlID0gTm9uZQorCisgICAgICAgICMgcmVtb3ZlCisgICAgICAgIGZvciBidXR0b25faWQsIGJ1dHRvbiBpbiBzZWxmLmJ1dHRvbl9pZHMuaXRlbXMoKToKKyAgICAgICAgICAgIGJ1dHRvbi5kaXNjb25uZWN0KGJ1dHRvbl9pZCkKKyAgICAgICAgc2VsZi5fcmVtb3ZlX2FsbF93aWRnZXQoKQorCisgICAgICAgICMgcmVwYWNrCisgICAgICAgIHNlbGYucGFja19zdGFydChzZWxmLmRldGFpbHNfdG9wX2J1dHRvbnMsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi5wYWNrX3N0YXJ0KHNlbGYuZ3JvdXBfYWxpZ24sIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgc2VsZi5idWlsZF9yZXN1bHQgPSBOb25lCisgICAgICAgIGlmIHNlbGYuaW1hZ2Vfc2F2ZWQgb3IgKHNlbGYuYnVpbGRfc3VjY2VlZGVkIGFuZCBzZWxmLmJ1aWxkZXIuY3VycmVudF9zdGVwID09IHNlbGYuYnVpbGRlci5JTUFHRV9HRU5FUkFUSU5HKToKKyAgICAgICAgICAgICMgYnVpbGRpbmcgaXMgdGhlIHByZXZpb3VzIHN0ZXAKKyAgICAgICAgICAgIGljb24gPSBndGsuSW1hZ2UoKQorICAgICAgICAgICAgcGl4bWFwX3BhdGggPSBoaWMuSUNPTl9JTkRJX0NPTkZJUk1fRklMRQorICAgICAgICAgICAgY29sb3IgPSBIb2JDb2xvcnMuUlVOTklORworICAgICAgICAgICAgcGl4X2J1ZmZlciA9IGd0ay5nZGsucGl4YnVmX25ld19mcm9tX2ZpbGUocGl4bWFwX3BhdGgpCisgICAgICAgICAgICBpY29uLnNldF9mcm9tX3BpeGJ1ZihwaXhfYnVmZmVyKQorICAgICAgICAgICAgdmFybGlzdCA9IFsiIl0KKyAgICAgICAgICAgIGlmIHNlbGYuaW1hZ2Vfc2F2ZWQ6CisgICAgICAgICAgICAgICAgdmFsbGlzdCA9IFsiWW91ciBpbWFnZSByZWNpcGUgaGFzIGJlZW4gc2F2ZWQiXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2YWxsaXN0ID0gWyJZb3VyIGltYWdlIGlzIHJlYWR5Il0KKyAgICAgICAgICAgIHNlbGYuYnVpbGRfcmVzdWx0ID0gc2VsZi5CdWlsZERldGFpbEJveCh2YXJsaXN0PXZhcmxpc3QsIHZhbGxpc3Q9dmFsbGlzdCwgaWNvbj1pY29uLCBjb2xvcj1jb2xvcikKKyAgICAgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19zdGFydChzZWxmLmJ1aWxkX3Jlc3VsdCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHNlbGYuYnV0dG9ubGlzdCA9IFsiQnVpbGQgbmV3IGltYWdlIiwgIlNhdmUgaW1hZ2UgcmVjaXBlIiwgIlJ1biBpbWFnZSIsICJEZXBsb3kgaW1hZ2UiXQorCisgICAgICAgICMgTmFtZQorICAgICAgICBzZWxmLmltYWdlX3N0b3JlID0gW10KKyAgICAgICAgc2VsZi50b2dnbGVkX2ltYWdlID0gIiIKKyAgICAgICAgZGVmYXVsdF9pbWFnZV9zaXplID0gMAorICAgICAgICBzZWxmLm51bV90b2dnbGVkID0gMAorICAgICAgICBpID0gMAorICAgICAgICBmb3IgaW1hZ2VfbmFtZSBpbiBpbWFnZV9uYW1lczoKKyAgICAgICAgICAgIGltYWdlX3NpemUgPSBIb2JQYWdlLl9zaXplX3RvX3N0cmluZyhvcy5zdGF0KG9zLnBhdGguam9pbihpbWFnZV9hZGRyLCBpbWFnZV9uYW1lKSkuc3Rfc2l6ZSkKKworICAgICAgICAgICAgaW1hZ2VfYXR0ciA9ICgicnVuIiBpZiAoc2VsZi50ZXN0X3R5cGVfcnVubmFibGUoaW1hZ2VfbmFtZSkgYW5kIHNlbGYudGVzdF9tYWNoX3J1bm5hYmxlKGltYWdlX25hbWUpKSBlbHNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCJkZXBsb3kiIGlmIHNlbGYudGVzdF9kZXBsb3lhYmxlKGltYWdlX25hbWUpIGVsc2UgIiIpKQorICAgICAgICAgICAgaXNfdG9nZ2xlZCA9IChpbWFnZV9hdHRyICE9ICIiKQorCisgICAgICAgICAgICBpZiBub3Qgc2VsZi50b2dnbGVkX2ltYWdlOgorICAgICAgICAgICAgICAgIGlmIGkgPT0gKGxlbihpbWFnZV9uYW1lcykgLSAxKToKKyAgICAgICAgICAgICAgICAgICAgaXNfdG9nZ2xlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBpc190b2dnbGVkOgorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X2ltYWdlX3NpemUgPSBpbWFnZV9zaXplCisgICAgICAgICAgICAgICAgICAgIHNlbGYudG9nZ2xlZF9pbWFnZSA9IGltYWdlX25hbWUKKworICAgICAgICAgICAgc3BsaXRfc3R1ZmYgPSBpbWFnZV9uYW1lLnNwbGl0KCcuJykKKyAgICAgICAgICAgIGlmICJyb290ZnMiIGluIHNwbGl0X3N0dWZmOgorICAgICAgICAgICAgICAgIGltYWdlX3R5cGUgPSBpbWFnZV9uYW1lWyhsZW4oc3BsaXRfc3R1ZmZbMF0pICsgbGVuKCIucm9vdGZzIikgKyAxKTpdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGltYWdlX3R5cGUgPSBpbWFnZV9uYW1lWyhsZW4oc3BsaXRfc3R1ZmZbMF0pICsgMSk6XQorCisgICAgICAgICAgICBzZWxmLmltYWdlX3N0b3JlLmFwcGVuZCh7J25hbWUnOiBpbWFnZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiBpbWFnZV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemUnOiBpbWFnZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzX3RvZ2dsZWQnOiBpc190b2dnbGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbl9hdHRyJzogaW1hZ2VfYXR0cix9KQorCisgICAgICAgICAgICBpID0gaSArIDEKKyAgICAgICAgICAgIHNlbGYubnVtX3RvZ2dsZWQgKz0gaXNfdG9nZ2xlZAorCisgICAgICAgIGlzX3J1bm5hYmxlID0gc2VsZi5jcmVhdGVfYm90dG9tX2J1dHRvbnMoc2VsZi5idXR0b25saXN0LCBzZWxmLnRvZ2dsZWRfaW1hZ2UpCisKKyAgICAgICAgIyBHZW5lcmF0ZWQgaW1hZ2UgZmlsZXMgaW5mbworICAgICAgICB2YXJsaXN0ID0gWyJOYW1lOiAiLCAiRmlsZXMgY3JlYXRlZDogIiwgIkRpcmVjdG9yeTogIl0KKyAgICAgICAgdmFsbGlzdCA9IFtdCisKKyAgICAgICAgdmFsbGlzdC5hcHBlbmQoaW1hZ2VfbmFtZS5zcGxpdCgnLicpWzBdKQorICAgICAgICB2YWxsaXN0LmFwcGVuZCgnLCAgJy5qb2luKGZpbGVpdGVtWyd0eXBlJ10gZm9yIGZpbGVpdGVtIGluIHNlbGYuaW1hZ2Vfc3RvcmUpKQorICAgICAgICB2YWxsaXN0LmFwcGVuZChpbWFnZV9hZGRyKQorCisgICAgICAgIHZpZXdfZmlsZXNfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJWaWV3IGZpbGVzIikKKyAgICAgICAgdmlld19maWxlc19idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYudmlld19maWxlc19jbGlja2VkX2NiLCBpbWFnZV9hZGRyKQorICAgICAgICB2aWV3X2ZpbGVzX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJPcGVuIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgaW1hZ2UgZmlsZXMiKQorICAgICAgICBvcGVuX2xvZ19idXR0b24gPSBOb25lCisgICAgICAgIGlmIGxvZ19maWxlOgorICAgICAgICAgICAgb3Blbl9sb2dfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJPcGVuIGxvZyIpCisgICAgICAgICAgICBvcGVuX2xvZ19idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYub3Blbl9sb2dfY2xpY2tlZF9jYiwgbG9nX2ZpbGUpCisgICAgICAgICAgICBvcGVuX2xvZ19idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiT3BlbiB0aGUgYnVpbGQncyBsb2cgZmlsZSIpCisgICAgICAgIHNlbGYuaW1hZ2VfZGV0YWlsID0gc2VsZi5EZXRhaWxCb3godmFybGlzdD12YXJsaXN0LCB2YWxsaXN0PXZhbGxpc3QsIGJ1dHRvbj12aWV3X2ZpbGVzX2J1dHRvbiwgYnV0dG9uMj1vcGVuX2xvZ19idXR0b24pCisgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19zdGFydChzZWxmLmltYWdlX2RldGFpbCwgZXhwYW5kPUZhbHNlLCBmaWxsPVRydWUpCisKKyAgICAgICAgIyBUaGUgZGVmYXVsdCBrZXJuZWwgYm94IGZvciB0aGUgcWVtdSBpbWFnZXMKKyAgICAgICAgc2VsZi5zZWxfa2VybmVsID0gIiIKKyAgICAgICAgc2VsZi5rZXJuZWxfZGV0YWlsID0gTm9uZQorICAgICAgICBpZiAncWVtdScgaW4gaW1hZ2VfbmFtZToKKyAgICAgICAgICAgIHNlbGYuc2VsX2tlcm5lbCA9IHNlbGYuZ2V0X2tlcm5lbF9maWxlX25hbWUoKQorCisgICAgICAgICMgICAgdmFybGlzdCA9IFsiS2VybmVsOiAiXQorICAgICAgICAjICAgIHZhbGxpc3QgPSBbXQorICAgICAgICAjICAgIHZhbGxpc3QuYXBwZW5kKHNlbGYuc2VsX2tlcm5lbCkKKworICAgICAgICAjICAgIGNoYW5nZV9rZXJuZWxfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJDaGFuZ2UiKQorICAgICAgICAjICAgIGNoYW5nZV9rZXJuZWxfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmNoYW5nZV9rZXJuZWxfY2IpCisgICAgICAgICMgICAgY2hhbmdlX2tlcm5lbF9idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiQ2hhbmdlIHFlbXUga2VybmVsIGZpbGUiKQorICAgICAgICAjICAgIHNlbGYua2VybmVsX2RldGFpbCA9IHNlbGYuRGV0YWlsQm94KHZhcmxpc3Q9dmFybGlzdCwgdmFsbGlzdD12YWxsaXN0LCBidXR0b249Y2hhbmdlX2tlcm5lbF9idXR0b24pCisgICAgICAgICMgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5wYWNrX3N0YXJ0KHNlbGYua2VybmVsX2RldGFpbCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICAjIE1hY2hpbmUsIEltYWdlIHJlY2lwZSBhbmQgTGF5ZXJzCisgICAgICAgIGxheWVyX251bV9saW1pdCA9IDE1CisgICAgICAgIHZhcmxpc3QgPSBbIk1hY2hpbmU6ICIsICJJbWFnZSByZWNpcGU6ICIsICJMYXllcnM6ICJdCisgICAgICAgIHZhbGxpc3QgPSBbXQorICAgICAgICBzZWxmLnNldHRpbmdfZGV0YWlsID0gTm9uZQorICAgICAgICBpZiBzZWxmLmJ1aWxkX3N1Y2NlZWRlZDoKKyAgICAgICAgICAgIHZhbGxpc3QuYXBwZW5kKG1hY2hpbmUpCisgICAgICAgICAgICBpZiBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLmlzX2N1c3RvbV9pbWFnZSgpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLmluaXRpYWxfc2VsZWN0ZWRfaW1hZ2UgPT0gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5fX2N1c3RvbV9pbWFnZV9fOgorICAgICAgICAgICAgICAgICAgICBiYXNlX2ltYWdlID0iTmV3IGltYWdlIHJlY2lwZSIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBiYXNlX2ltYWdlID0gc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uaW5pdGlhbF9zZWxlY3RlZF9pbWFnZSArICIgKGVkaXRlZCkiCisgICAgICAgICAgICB2YWxsaXN0LmFwcGVuZChiYXNlX2ltYWdlKQorICAgICAgICAgICAgaSA9IDAKKyAgICAgICAgICAgIGZvciBsYXllciBpbiBsYXllcnM6CisgICAgICAgICAgICAgICAgaWYgaSA+IGxheWVyX251bV9saW1pdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICB2YXJsaXN0LmFwcGVuZCgiIC0gIikKKyAgICAgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgICAgIHZhbGxpc3QuYXBwZW5kKCIiKQorICAgICAgICAgICAgaSA9IDAKKyAgICAgICAgICAgIGZvciBsYXllciBpbiBsYXllcnM6CisgICAgICAgICAgICAgICAgaWYgaSA+IGxheWVyX251bV9saW1pdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbGlmIGkgPT0gbGF5ZXJfbnVtX2xpbWl0OgorICAgICAgICAgICAgICAgICAgICB2YWxsaXN0LmFwcGVuZCgiYW5kIG1vcmUuLi4iKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHZhbGxpc3QuYXBwZW5kKGxheWVyKQorICAgICAgICAgICAgICAgIGkgKz0gMQorCisgICAgICAgICAgICBlZGl0X2NvbmZpZ19idXR0b24gPSBIb2JBbHRCdXR0b24oIkVkaXQgY29uZmlndXJhdGlvbiIpCisgICAgICAgICAgICBlZGl0X2NvbmZpZ19idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiRWRpdCBtYWNoaW5lIGFuZCBpbWFnZSByZWNpcGUiKQorICAgICAgICAgICAgZWRpdF9jb25maWdfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmVkaXRfY29uZmlnX2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICAgICAgc2VsZi5zZXR0aW5nX2RldGFpbCA9IHNlbGYuRGV0YWlsQm94KHZhcmxpc3Q9dmFybGlzdCwgdmFsbGlzdD12YWxsaXN0LCBidXR0b249ZWRpdF9jb25maWdfYnV0dG9uKQorICAgICAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5wYWNrX3N0YXJ0KHNlbGYuc2V0dGluZ19kZXRhaWwsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgIyBQYWNrYWdlcyBpbmNsdWRlZCwgYW5kIFRvdGFsIGltYWdlIHNpemUKKyAgICAgICAgdmFybGlzdCA9IFsiUGFja2FnZXMgaW5jbHVkZWQ6ICIsICJUb3RhbCBpbWFnZSBzaXplOiAiXQorICAgICAgICB2YWxsaXN0ID0gW10KKyAgICAgICAgdmFsbGlzdC5hcHBlbmQocGtnX251bSkKKyAgICAgICAgdmFsbGlzdC5hcHBlbmQoZGVmYXVsdF9pbWFnZV9zaXplKQorICAgICAgICBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5pbWFnZV9zaXplID0gZGVmYXVsdF9pbWFnZV9zaXplCisgICAgICAgIHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLmltYWdlX3BhY2thZ2VzID0gc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfcGFja2FnZXMKKyAgICAgICAgaWYgc2VsZi5idWlsZF9zdWNjZWVkZWQ6CisgICAgICAgICAgICBlZGl0X3BhY2thZ2VzX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiRWRpdCBwYWNrYWdlcyIpCisgICAgICAgICAgICBlZGl0X3BhY2thZ2VzX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJFZGl0IHRoZSBwYWNrYWdlcyBpbmNsdWRlZCBpbiB5b3VyIGltYWdlIikKKyAgICAgICAgICAgIGVkaXRfcGFja2FnZXNfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmVkaXRfcGFja2FnZXNfYnV0dG9uX2NsaWNrZWRfY2IpCisgICAgICAgIGVsc2U6ICMgZ2V0IHRvIHRoaXMgcGFnZSBmcm9tICJNeSBpbWFnZXMiCisgICAgICAgICAgICBlZGl0X3BhY2thZ2VzX2J1dHRvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5wYWNrYWdlX2RldGFpbCA9IHNlbGYuRGV0YWlsQm94KHZhcmxpc3Q9dmFybGlzdCwgdmFsbGlzdD12YWxsaXN0LCBidXR0b249ZWRpdF9wYWNrYWdlc19idXR0b24pCisgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19zdGFydChzZWxmLnBhY2thZ2VfZGV0YWlsLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgICMgcGFjayB0aGUgYnV0dG9ucyBhdCB0aGUgYm90dG9tLCBhdCB0aGlzIHRpbWUgdGhleSBhcmUgYWxyZWFkeSBjcmVhdGVkLgorICAgICAgICBpZiBzZWxmLmJ1aWxkX3N1Y2NlZWRlZDoKKyAgICAgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19lbmQoc2VsZi5kZXRhaWxzX2JvdHRvbV9idXR0b25zLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGVsc2U6ICMgZm9yICJNeSBpbWFnZXMiIHBhZ2UKKyAgICAgICAgICAgIHNlbGYuZGV0YWlsc19zZXBhcmF0b3IgPSBndGsuSFNlcGFyYXRvcigpCisgICAgICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfc3RhcnQoc2VsZi5kZXRhaWxzX3NlcGFyYXRvciwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5wYWNrX3N0YXJ0KHNlbGYuZGV0YWlsc19ib3R0b21fYnV0dG9ucywgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorICAgICAgICBpZiBzZWxmLmtlcm5lbF9kZXRhaWwgYW5kIChub3QgaXNfcnVubmFibGUpOgorICAgICAgICAgICAgc2VsZi5rZXJuZWxfZGV0YWlsLmhpZGUoKQorICAgICAgICBzZWxmLmltYWdlX3NhdmVkID0gRmFsc2UKKworICAgIGRlZiB2aWV3X2ZpbGVzX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uLCBpbWFnZV9hZGRyKToKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKCJ4ZGctb3BlbiAvJXMiICUgaW1hZ2VfYWRkciwgc2hlbGw9VHJ1ZSkKKworICAgIGRlZiBvcGVuX2xvZ19jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbiwgbG9nX2ZpbGUpOgorICAgICAgICBpZiBsb2dfZmlsZToKKyAgICAgICAgICAgIGxvZ19maWxlID0gImZpbGU6Ly8vIiArIGxvZ19maWxlCisgICAgICAgICAgICBndGsuc2hvd191cmkoc2NyZWVuPWJ1dHRvbi5nZXRfc2NyZWVuKCksIHVyaT1sb2dfZmlsZSwgdGltZXN0YW1wPTApCisKKyAgICBkZWYgcmVmcmVzaF9wYWNrYWdlX2RldGFpbF9ib3goc2VsZiwgaW1hZ2Vfc2l6ZSk6CisgICAgICAgIHNlbGYucGFja2FnZV9kZXRhaWwudXBkYXRlX2xpbmVfd2lkZ2V0cygiVG90YWwgaW1hZ2Ugc2l6ZTogIiwgaW1hZ2Vfc2l6ZSkKKworICAgIGRlZiB0ZXN0X3R5cGVfcnVubmFibGUoc2VsZiwgaW1hZ2VfbmFtZSk6CisgICAgICAgIHR5cGVfcnVubmFibGUgPSBGYWxzZQorICAgICAgICBmb3IgdCBpbiBzZWxmLmJ1aWxkZXIucGFyYW1ldGVycy5ydW5uYWJsZV9pbWFnZV90eXBlczoKKyAgICAgICAgICAgIGlmIGltYWdlX25hbWUuZW5kc3dpdGgodCk6CisgICAgICAgICAgICAgICAgdHlwZV9ydW5uYWJsZSA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gdHlwZV9ydW5uYWJsZQorCisgICAgZGVmIHRlc3RfbWFjaF9ydW5uYWJsZShzZWxmLCBpbWFnZV9uYW1lKToKKyAgICAgICAgbWFjaF9ydW5uYWJsZSA9IEZhbHNlCisgICAgICAgIGZvciB0IGluIHNlbGYuYnVpbGRlci5wYXJhbWV0ZXJzLnJ1bm5hYmxlX21hY2hpbmVfcGF0dGVybnM6CisgICAgICAgICAgICBpZiB0IGluIGltYWdlX25hbWU6CisgICAgICAgICAgICAgICAgbWFjaF9ydW5uYWJsZSA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gbWFjaF9ydW5uYWJsZQorCisgICAgZGVmIHRlc3RfZGVwbG95YWJsZShzZWxmLCBpbWFnZV9uYW1lKToKKyAgICAgICAgaWYgc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uY3Vycl9tYWNoLnN0YXJ0c3dpdGgoInFlbXUiKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBkZXBsb3lhYmxlID0gRmFsc2UKKyAgICAgICAgZm9yIHQgaW4gc2VsZi5idWlsZGVyLnBhcmFtZXRlcnMuZGVwbG95YWJsZV9pbWFnZV90eXBlczoKKyAgICAgICAgICAgIGlmIGltYWdlX25hbWUuZW5kc3dpdGgodCk6CisgICAgICAgICAgICAgICAgZGVwbG95YWJsZSA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gZGVwbG95YWJsZQorCisgICAgZGVmIGdldF9rZXJuZWxfZmlsZV9uYW1lKHNlbGYsIGtlcm5lbF9hZGRyPSIiKToKKyAgICAgICAga2VybmVsX25hbWUgPSAiIgorCisgICAgICAgIGlmIG5vdCBrZXJuZWxfYWRkcjoKKyAgICAgICAgICAgIGtlcm5lbF9hZGRyID0gc2VsZi5idWlsZGVyLnBhcmFtZXRlcnMuaW1hZ2VfYWRkcgorCisgICAgICAgIGZpbGVzID0gW2YgZm9yIGYgaW4gb3MubGlzdGRpcihrZXJuZWxfYWRkcikgaWYgZlswXSA8PiAnLiddCisgICAgICAgIGZvciBjaGVja19maWxlIGluIGZpbGVzOgorICAgICAgICAgICAgaWYgY2hlY2tfZmlsZS5lbmRzd2l0aCgiLmJpbiIpOgorICAgICAgICAgICAgICAgIG5hbWVfc3BsaXRzID0gY2hlY2tfZmlsZS5zcGxpdCgiLiIpWzBdCisgICAgICAgICAgICAgICAgaWYgc2VsZi5idWlsZGVyLnBhcmFtZXRlcnMua2VybmVsX2ltYWdlX3R5cGUgaW4gbmFtZV9zcGxpdHMuc3BsaXQoIi0iKToKKyAgICAgICAgICAgICAgICAgICAga2VybmVsX25hbWUgPSBjaGVja19maWxlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgcmV0dXJuIGtlcm5lbF9uYW1lCisKKyAgICBkZWYgc2hvd19idWlsZGVkX2ltYWdlc19kaWFsb2coc2VsZiwgd2lkZ2V0LCBwcmltYXJ5X2FjdGlvbj0iIik6CisgICAgICAgIHRpdGxlID0gcHJpbWFyeV9hY3Rpb24gaWYgcHJpbWFyeV9hY3Rpb24gZWxzZSAiWW91ciBidWlsZGVkIGltYWdlcyIKKyAgICAgICAgZGlhbG9nID0gQ3J1bWJzRGlhbG9nKHRpdGxlLCBzZWxmLmJ1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGsuRElBTE9HX01PREFMIHwgZ3RrLkRJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5UKQorICAgICAgICBkaWFsb2cuc2V0X2JvcmRlcl93aWR0aCgxMikKKworICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIGxhYmVsLnNldF91c2VfbWFya3VwKFRydWUpCisgICAgICAgIGxhYmVsLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCisgICAgICAgIGxhYmVsLnNldF9wYWRkaW5nKDEyLDApCisgICAgICAgIGlmIHByaW1hcnlfYWN0aW9uID09ICJSdW4gaW1hZ2UiOgorICAgICAgICAgICAgbGFiZWwuc2V0X21hcmt1cCgiPHNwYW4gZm9udF9kZXNjPScxMic+U2VsZWN0IHRoZSBpbWFnZSBmaWxlIHlvdSB3YW50IHRvIHJ1bjo8L3NwYW4+IikKKyAgICAgICAgZWxpZiBwcmltYXJ5X2FjdGlvbiA9PSAiRGVwbG95IGltYWdlIjoKKyAgICAgICAgICAgIGxhYmVsLnNldF9tYXJrdXAoIjxzcGFuIGZvbnRfZGVzYz0nMTInPlNlbGVjdCB0aGUgaW1hZ2UgZmlsZSB5b3Ugd2FudCB0byBkZXBsb3k6PC9zcGFuPiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsYWJlbC5zZXRfbWFya3VwKCI8c3BhbiBmb250X2Rlc2M9JzEyJz5TZWxlY3QgdGhlIGltYWdlIGZpbGUgeW91IHdhbnQgdG8gJXM8L3NwYW4+IiAlIHByaW1hcnlfYWN0aW9uKQorICAgICAgICBkaWFsb2cudmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgIyBmaWx0ZXIgY3JlYXRlZCBpbWFnZXMgYXMgYWN0aW9uIGF0dHJpYnV0aW9uIChkZXBsb3kgb3IgcnVuKQorICAgICAgICBhY3Rpb25fYXR0ciA9ICIiCisgICAgICAgIGFjdGlvbl9pbWFnZXMgPSBbXQorICAgICAgICBmb3IgZmlsZWl0ZW0gaW4gc2VsZi5pbWFnZV9zdG9yZToKKyAgICAgICAgICAgIGFjdGlvbl9hdHRyID0gZmlsZWl0ZW1bJ2FjdGlvbl9hdHRyJ10KKyAgICAgICAgICAgIGlmICAoYWN0aW9uX2F0dHIgPT0gJ3J1bicgYW5kIHByaW1hcnlfYWN0aW9uID09ICJSdW4gaW1hZ2UiKSBcCisgICAgICAgICAgICAgb3IgKGFjdGlvbl9hdHRyID09ICdkZXBsb3knIGFuZCBwcmltYXJ5X2FjdGlvbiA9PSAiRGVwbG95IGltYWdlIik6CisgICAgICAgICAgICAgICAgYWN0aW9uX2ltYWdlcy5hcHBlbmQoZmlsZWl0ZW0pCisKKyAgICAgICAgIyBwYWNrIHRoZSBjb3JyZXNwb25kaW5nICdydW5uYWJsZScgb3IgJ2RlcGxveScgcmFkaW9fYnV0dG9ucywgaWYgdGhlcmUgaGFzIG5vIG1vcmUgdGhhbiBvbmUgZmlsZS4KKyAgICAgICAgIyBhc3N1bWUgdGhhdCB0aGVyZSBkb2VzIG5vdCBib3RoIGhhdmUgJ2RlcGxveScgYW5kICdydW5uYWJsZScgZmlsZXMgaW4gdGhlIHNhbWUgYnVpbGRpbmcgcmVzdWx0CisgICAgICAgICMgaW4gcG9zc2libGUgYXMgZGVzaWduLgorICAgICAgICBjdXJyX3JvdyA9IDAKKyAgICAgICAgcm93cyA9IChsZW4oYWN0aW9uX2ltYWdlcykpIGlmIGxlbihhY3Rpb25faW1hZ2VzKSA8IDEwIGVsc2UgMTAKKyAgICAgICAgdGFibGUgPSBndGsuVGFibGUocm93cywgMTAsIFRydWUpCisgICAgICAgIHRhYmxlLnNldF9yb3dfc3BhY2luZ3MoNikKKyAgICAgICAgdGFibGUuc2V0X2NvbF9zcGFjaW5nKDAsIDEyKQorICAgICAgICB0YWJsZS5zZXRfY29sX3NwYWNpbmcoNSwgMTIpCisKKyAgICAgICAgc2VsX3BhcmVudF9idG4gPSBOb25lCisgICAgICAgIGZvciBmaWxlaXRlbSBpbiBhY3Rpb25faW1hZ2VzOgorICAgICAgICAgICAgc2VsX2J0biA9IGd0ay5SYWRpb0J1dHRvbihzZWxfcGFyZW50X2J0biwgZmlsZWl0ZW1bJ3R5cGUnXSkKKyAgICAgICAgICAgIHNlbF9wYXJlbnRfYnRuID0gc2VsX2J0biBpZiBub3Qgc2VsX3BhcmVudF9idG4gZWxzZSBzZWxfcGFyZW50X2J0bgorICAgICAgICAgICAgc2VsX2J0bi5zZXRfYWN0aXZlKGZpbGVpdGVtWydpc190b2dnbGVkJ10pCisgICAgICAgICAgICBzZWxfYnRuLmNvbm5lY3QoJ3RvZ2dsZWQnLCBzZWxmLnRhYmxlX3NlbGVjdGVkX2NiLCBmaWxlaXRlbSkKKyAgICAgICAgICAgIGlmIGN1cnJfcm93IDwgMTA6CisgICAgICAgICAgICAgICAgdGFibGUuYXR0YWNoKHNlbF9idG4sIDAsIDQsIGN1cnJfcm93LCBjdXJyX3JvdyArIDEsIHhwYWRkaW5nPTI0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0YWJsZS5hdHRhY2goc2VsX2J0biwgNSwgOSwgY3Vycl9yb3cgLSAxMCwgY3Vycl9yb3cgLSA5LCB4cGFkZGluZz0yNCkKKyAgICAgICAgICAgIGN1cnJfcm93ICs9IDEKKworICAgICAgICBkaWFsb2cudmJveC5wYWNrX3N0YXJ0KHRhYmxlLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UsIHBhZGRpbmc9NikKKworICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2FuY2VsIiwgZ3RrLlJFU1BPTlNFX0NBTkNFTCkKKyAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisKKyAgICAgICAgaWYgcHJpbWFyeV9hY3Rpb246CisgICAgICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbihwcmltYXJ5X2FjdGlvbiwgZ3RrLlJFU1BPTlNFX1lFUykKKyAgICAgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorCisgICAgICAgIGRpYWxvZy5zaG93X2FsbCgpCisKKyAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgICAgIGlmIHJlc3BvbnNlICE9IGd0ay5SRVNQT05TRV9ZRVM6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBmb3IgZmlsZWl0ZW0gaW4gc2VsZi5pbWFnZV9zdG9yZToKKyAgICAgICAgICAgIGlmIGZpbGVpdGVtWydpc190b2dnbGVkJ106CisgICAgICAgICAgICAgICAgaWYgZmlsZWl0ZW1bJ2FjdGlvbl9hdHRyJ10gPT0gJ3J1bic6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRlci5ydW5xZW11X2ltYWdlKGZpbGVpdGVtWyduYW1lJ10sIHNlbGYuc2VsX2tlcm5lbCkKKyAgICAgICAgICAgICAgICBlbGlmIGZpbGVpdGVtWydhY3Rpb25fYXR0ciddID09ICdkZXBsb3knOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuZGVwbG95X2ltYWdlKGZpbGVpdGVtWyduYW1lJ10pCisKKyAgICBkZWYgdGFibGVfc2VsZWN0ZWRfY2Ioc2VsZiwgdGJ1dHRvbiwgaW1hZ2UpOgorICAgICAgICBpbWFnZVsnaXNfdG9nZ2xlZCddID0gdGJ1dHRvbi5nZXRfYWN0aXZlKCkKKyAgICAgICAgaWYgaW1hZ2VbJ2lzX3RvZ2dsZWQnXToKKyAgICAgICAgICAgIHNlbGYudG9nZ2xlZF9pbWFnZSA9IGltYWdlWyduYW1lJ10KKworICAgIGRlZiBjaGFuZ2Vfa2VybmVsX2NiKHNlbGYsIHdpZGdldCk6CisgICAgICAgIGtlcm5lbF9wYXRoID0gc2VsZi5idWlsZGVyLnNob3dfbG9hZF9rZXJuZWxfZGlhbG9nKCkKKyAgICAgICAgaWYga2VybmVsX3BhdGggYW5kIHNlbGYua2VybmVsX2RldGFpbDoKKyAgICAgICAgICAgIGltcG9ydCBvcy5wYXRoCisgICAgICAgICAgICBzZWxmLnNlbF9rZXJuZWwgPSBvcy5wYXRoLmJhc2VuYW1lKGtlcm5lbF9wYXRoKQorICAgICAgICAgICAgbWFya3VwID0gc2VsZi5rZXJuZWxfZGV0YWlsLmZvcm1hdF9saW5lKCJLZXJuZWw6ICIsIHNlbGYuc2VsX2tlcm5lbCkKKyAgICAgICAgICAgIGxhYmVsID0gKChzZWxmLmtlcm5lbF9kZXRhaWwuZ2V0X2NoaWxkcmVuKClbMF0pLmdldF9jaGlsZHJlbigpWzBdKS5nZXRfY2hpbGRyZW4oKVswXQorICAgICAgICAgICAgbGFiZWwuc2V0X21hcmt1cChtYXJrdXApCisKKyAgICBkZWYgY3JlYXRlX2JvdHRvbV9idXR0b25zKHNlbGYsIGJ1dHRvbmxpc3QsIGltYWdlX25hbWUpOgorICAgICAgICAjIENyZWF0ZSB0aGUgYnV0dG9ucyBhdCB0aGUgYm90dG9tCisgICAgICAgIGNyZWF0ZWQgPSBGYWxzZQorICAgICAgICBwYWNrZWQgPSBGYWxzZQorICAgICAgICBzZWxmLmJ1dHRvbl9pZHMgPSB7fQorICAgICAgICBpc19ydW5uYWJsZSA9IEZhbHNlCisKKyAgICAgICAgIyBjcmVhdGUgYnV0dG9uICJEZXBsb3kgaW1hZ2UiCisgICAgICAgIG5hbWUgPSAiRGVwbG95IGltYWdlIgorICAgICAgICBpZiBuYW1lIGluIGJ1dHRvbmxpc3QgYW5kIHNlbGYudGVzdF9kZXBsb3lhYmxlKGltYWdlX25hbWUpOgorICAgICAgICAgICAgZGVwbG95X2J1dHRvbiA9IEhvYkJ1dHRvbignRGVwbG95IGltYWdlJykKKyAgICAgICAgICAgICNkZXBsb3lfYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoMjA1LCA0OSkKKyAgICAgICAgICAgIGRlcGxveV9idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiQnVybiBhIGxpdmUgaW1hZ2UgdG8gYSBVU0IgZHJpdmUgb3IgZmxhc2ggbWVtb3J5IikKKyAgICAgICAgICAgIGRlcGxveV9idXR0b24uc2V0X2ZsYWdzKGd0ay5DQU5fREVGQVVMVCkKKyAgICAgICAgICAgIGJ1dHRvbl9pZCA9IGRlcGxveV9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuZGVwbG95X2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICAgICAgc2VsZi5idXR0b25faWRzW2J1dHRvbl9pZF0gPSBkZXBsb3lfYnV0dG9uCisgICAgICAgICAgICBzZWxmLmRldGFpbHNfYm90dG9tX2J1dHRvbnMucGFja19lbmQoZGVwbG95X2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICAgICAgY3JlYXRlZCA9IFRydWUKKyAgICAgICAgICAgIHBhY2tlZCA9IFRydWUKKworICAgICAgICBuYW1lID0gIlJ1biBpbWFnZSIKKyAgICAgICAgaWYgbmFtZSBpbiBidXR0b25saXN0IGFuZCBzZWxmLnRlc3RfdHlwZV9ydW5uYWJsZShpbWFnZV9uYW1lKSBhbmQgc2VsZi50ZXN0X21hY2hfcnVubmFibGUoaW1hZ2VfbmFtZSk6CisgICAgICAgICAgICBpZiBjcmVhdGVkID09IFRydWU6CisgICAgICAgICAgICAgICAgIyBzZXBhcmF0b3IKKyAgICAgICAgICAgICAgICAjbGFiZWwgPSBndGsuTGFiZWwoIiBvciAiKQorICAgICAgICAgICAgICAgICNzZWxmLmRldGFpbHNfYm90dG9tX2J1dHRvbnMucGFja19lbmQobGFiZWwsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICAgICAgICAgICMgY3JlYXRlIGJ1dHRvbiAiUnVuIGltYWdlIgorICAgICAgICAgICAgICAgIHJ1bl9idXR0b24gPSBIb2JBbHRCdXR0b24oIlJ1biBpbWFnZSIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgY3JlYXRlIGJ1dHRvbiAiUnVuIGltYWdlIiBhcyB0aGUgcHJpbWFyeSBidXR0b24KKyAgICAgICAgICAgICAgICBydW5fYnV0dG9uID0gSG9iQnV0dG9uKCJSdW4gaW1hZ2UiKQorICAgICAgICAgICAgICAgICNydW5fYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoMjA1LCA0OSkKKyAgICAgICAgICAgICAgICBydW5fYnV0dG9uLnNldF9mbGFncyhndGsuQ0FOX0RFRkFVTFQpCisgICAgICAgICAgICAgICAgcGFja2VkID0gVHJ1ZQorICAgICAgICAgICAgcnVuX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJTdGFydCB1cCBhbiBpbWFnZSB3aXRoIHFlbXUgZW11bGF0b3IiKQorICAgICAgICAgICAgYnV0dG9uX2lkID0gcnVuX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5ydW5fYnV0dG9uX2NsaWNrZWRfY2IpCisgICAgICAgICAgICBzZWxmLmJ1dHRvbl9pZHNbYnV0dG9uX2lkXSA9IHJ1bl9idXR0b24KKyAgICAgICAgICAgIHNlbGYuZGV0YWlsc19ib3R0b21fYnV0dG9ucy5wYWNrX2VuZChydW5fYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgICAgICBjcmVhdGVkID0gVHJ1ZQorICAgICAgICAgICAgaXNfcnVubmFibGUgPSBUcnVlCisKKyAgICAgICAgbmFtZSA9ICJTYXZlIGltYWdlIHJlY2lwZSIKKyAgICAgICAgaWYgbmFtZSBpbiBidXR0b25saXN0IGFuZCBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLmlzX2N1c3RvbV9pbWFnZSgpOgorICAgICAgICAgICAgc2F2ZV9idXR0b24gPSBIb2JBbHRCdXR0b24oIlNhdmUgaW1hZ2UgcmVjaXBlIikKKyAgICAgICAgICAgIHNhdmVfYnV0dG9uLnNldF90b29sdGlwX3RleHQoIktlZXAgeW91ciBjaGFuZ2VzIHNhdmluZyB0aGVtIGFzIGFuIGltYWdlIHJlY2lwZSIpCisgICAgICAgICAgICBzYXZlX2J1dHRvbi5zZXRfc2Vuc2l0aXZlKG5vdCBzZWxmLmltYWdlX3NhdmVkKQorICAgICAgICAgICAgYnV0dG9uX2lkID0gc2F2ZV9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuc2F2ZV9idXR0b25fY2xpY2tlZF9jYikKKyAgICAgICAgICAgIHNlbGYuYnV0dG9uX2lkc1tidXR0b25faWRdID0gc2F2ZV9idXR0b24KKyAgICAgICAgICAgIHNlbGYuZGV0YWlsc19ib3R0b21fYnV0dG9ucy5wYWNrX2VuZChzYXZlX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIG5hbWUgPSAiQnVpbGQgbmV3IGltYWdlIgorICAgICAgICBpZiBuYW1lIGluIGJ1dHRvbmxpc3Q6CisgICAgICAgICAgICAjIGNyZWF0ZSBidXR0b24gIkJ1aWxkIG5ldyBpbWFnZSIKKyAgICAgICAgICAgIGlmIHBhY2tlZDoKKyAgICAgICAgICAgICAgICBidWlsZF9uZXdfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJCdWlsZCBuZXcgaW1hZ2UiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBidWlsZF9uZXdfYnV0dG9uID0gSG9iQnV0dG9uKCJCdWlsZCBuZXcgaW1hZ2UiKQorICAgICAgICAgICAgICAgIGJ1aWxkX25ld19idXR0b24uc2V0X2ZsYWdzKGd0ay5DQU5fREVGQVVMVCkKKyAgICAgICAgICAgICNidWlsZF9uZXdfYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoMjA1LCA0OSkKKyAgICAgICAgICAgIHNlbGYuZGV0YWlsc19ib3R0b21fYnV0dG9ucy5wYWNrX2VuZChidWlsZF9uZXdfYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgICAgICBidWlsZF9uZXdfYnV0dG9uLnNldF90b29sdGlwX3RleHQoIkNyZWF0ZSBhIG5ldyBpbWFnZSBmcm9tIHNjcmF0Y2giKQorICAgICAgICAgICAgYnV0dG9uX2lkID0gYnVpbGRfbmV3X2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5idWlsZF9uZXdfYnV0dG9uX2NsaWNrZWRfY2IpCisgICAgICAgICAgICBzZWxmLmJ1dHRvbl9pZHNbYnV0dG9uX2lkXSA9IGJ1aWxkX25ld19idXR0b24KKworICAgICAgICByZXR1cm4gaXNfcnVubmFibGUKKworICAgIGRlZiBkZXBsb3lfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgaWYgc2VsZi50b2dnbGVkX2ltYWdlOgorICAgICAgICAgICAgaWYgc2VsZi5udW1fdG9nZ2xlZCA+IDE6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRfc2Vuc2l0aXZlKEZhbHNlKQorICAgICAgICAgICAgICAgIHNlbGYuc2hvd19idWlsZGVkX2ltYWdlc19kaWFsb2coTm9uZSwgIkRlcGxveSBpbWFnZSIpCisgICAgICAgICAgICAgICAgc2VsZi5zZXRfc2Vuc2l0aXZlKFRydWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRlci5kZXBsb3lfaW1hZ2Uoc2VsZi50b2dnbGVkX2ltYWdlKQorCisgICAgZGVmIHJ1bl9idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBpZiBzZWxmLnRvZ2dsZWRfaW1hZ2U6CisgICAgICAgICAgICBpZiBzZWxmLm51bV90b2dnbGVkID4gMToKKyAgICAgICAgICAgICAgICBzZWxmLnNldF9zZW5zaXRpdmUoRmFsc2UpCisgICAgICAgICAgICAgICAgc2VsZi5zaG93X2J1aWxkZWRfaW1hZ2VzX2RpYWxvZyhOb25lLCAiUnVuIGltYWdlIikKKyAgICAgICAgICAgICAgICBzZWxmLnNldF9zZW5zaXRpdmUoVHJ1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5idWlsZGVyLnJ1bnFlbXVfaW1hZ2Uoc2VsZi50b2dnbGVkX2ltYWdlLCBzZWxmLnNlbF9rZXJuZWwpCisKKyAgICBkZWYgc2F2ZV9idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICB0b3BkaXIgPSBzZWxmLmJ1aWxkZXIuZ2V0X3RvcGRpcigpCisgICAgICAgIGltYWdlc19kaXIgPSB0b3BkaXIgKyAiL3JlY2lwZXMvaW1hZ2VzL2N1c3RvbS8iCisgICAgICAgIHNlbGYuYnVpbGRlci5lbnN1cmVfZGlyKGltYWdlc19kaXIpCisKKyAgICAgICAgc2VsZi5uYW1lX2ZpZWxkX3RlbXBsYXRlID0gc2VsZi5idWlsZGVyLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS5jdXN0b21faW1hZ2Vfc2VsZWN0ZWQKKyAgICAgICAgaWYgc2VsZi5uYW1lX2ZpZWxkX3RlbXBsYXRlOgorICAgICAgICAgICAgaW1hZ2VfcGF0aCA9IHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwucG5fcGF0aFtzZWxmLm5hbWVfZmllbGRfdGVtcGxhdGVdCisgICAgICAgICAgICBpbWFnZV9pdGVyID0gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5nZXRfaXRlcihpbWFnZV9wYXRoKQorICAgICAgICAgICAgc2VsZi5kZXNjcmlwdGlvbl9maWVsZF90ZW1wbGF0ZSA9IHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuZ2V0X3ZhbHVlKGltYWdlX2l0ZXIsIHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuQ09MX0RFU0MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLm5hbWVfZmllbGRfdGVtcGxhdGUgPSAiIgorCisgICAgICAgIGRpYWxvZyA9IFNhdmVJbWFnZURpYWxvZyhpbWFnZXNfZGlyLCBzZWxmLm5hbWVfZmllbGRfdGVtcGxhdGUsIHNlbGYuZGVzY3JpcHRpb25fZmllbGRfdGVtcGxhdGUsCisgICAgICAgICAgICAgICAgICJTYXZlIGltYWdlIHJlY2lwZSIsIHNlbGYuYnVpbGRlciwgZ3RrLkRJQUxPR19NT0RBTCB8IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCkKKyAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgZGVmIGJ1aWxkX25ld19idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmJ1aWxkZXIuaW5pdGlhdGVfbmV3X2J1aWxkX2FzeW5jKCkKKworICAgIGRlZiBlZGl0X2NvbmZpZ19idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19jb25maWd1cmF0aW9uKCkKKworICAgIGRlZiBlZGl0X3BhY2thZ2VzX2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGYuYnVpbGRlci5zaG93X3BhY2thZ2VzKCkKKworICAgIGRlZiBteV9pbWFnZXNfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfbG9hZF9teV9pbWFnZXNfZGlhbG9nKCkKKworICAgIGRlZiBzZXR0aW5nc19idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICAjIENyZWF0ZSBhbiBhZHZhbmNlZCBzZXR0aW5ncyBkaWFsb2cKKyAgICAgICAgcmVzcG9uc2UsIHNldHRpbmdzX2NoYW5nZWQgPSBzZWxmLmJ1aWxkZXIuc2hvd19zaW1wbGVfc2V0dGluZ3NfZGlhbG9nKCkKKyAgICAgICAgaWYgbm90IHJlc3BvbnNlOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNldHRpbmdzX2NoYW5nZWQ6CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIucmVwYXJzZV9wb3N0X2Fkdl9zZXR0aW5ncygpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wYWNrYWdlc2VsZWN0aW9ucGFnZS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3BhY2thZ2VzZWxlY3Rpb25wYWdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdjNjJiMzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wYWNrYWdlc2VsZWN0aW9ucGFnZS5weQpAQCAtMCwwICsxLDM1NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworaW1wb3J0IGdsaWIKK2Zyb20gYmIudWkuY3J1bWJzLmhvYmNvbG9yIGltcG9ydCBIb2JDb2xvcnMKK2Zyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgSG9iVmlld1RhYmxlLCBIb2JOb3RlYm9vaywgSG9iQWx0QnV0dG9uLCBIb2JCdXR0b24KK2Zyb20gYmIudWkuY3J1bWJzLmhvYmxpc3Rtb2RlbCBpbXBvcnQgUGFja2FnZUxpc3RNb2RlbAorZnJvbSBiYi51aS5jcnVtYnMuaG9icGFnZXMgaW1wb3J0IEhvYlBhZ2UKKworIworIyBQYWNrYWdlU2VsZWN0aW9uUGFnZQorIworY2xhc3MgUGFja2FnZVNlbGVjdGlvblBhZ2UgKEhvYlBhZ2UpOgorCisgICAgcGFnZXMgPSBbCisgICAgICAgIHsKKyAgICAgICAgICduYW1lJyAgICAgIDogJ0luY2x1ZGVkIHBhY2thZ2VzJywKKyAgICAgICAgICd0b29sdGlwJyAgIDogJ1RoZSBwYWNrYWdlcyBjdXJyZW50bHkgaW5jbHVkZWQgZm9yIHlvdXIgaW1hZ2UnLAorICAgICAgICAgJ2ZpbHRlcicgICAgOiB7IFBhY2thZ2VMaXN0TW9kZWwuQ09MX0lOQyA6IFtUcnVlXSB9LAorICAgICAgICAgJ3NlYXJjaCcgICAgOiAnU2VhcmNoIHBhY2thZ2VzIGJ5IG5hbWUnLAorICAgICAgICAgJ3NlYXJjaHRpcCcgOiAnRW50ZXIgYSBwYWNrYWdlIG5hbWUgdG8gZmluZCBpdCcsCisgICAgICAgICAnY29sdW1ucycgICA6IFt7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnUGFja2FnZSBuYW1lJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9pZCcgICA6IFBhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfc3R5bGUnOiAndGV4dCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiAzMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmQnICAgOiAnVHJ1ZScKKyAgICAgICAgICAgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnU2l6ZScsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBQYWNrYWdlTGlzdE1vZGVsLkNPTF9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3RleHQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogMzAwLAorICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kJyAgIDogJ1RydWUnCisgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ1JlY2lwZScsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBQYWNrYWdlTGlzdE1vZGVsLkNPTF9SQ1AsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfc3R5bGUnOiAndGV4dCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiAyNTAsCisgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmQnICAgOiAnVHJ1ZScKKyAgICAgICAgICAgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnQnJvdWdodCBpbiBieSAoK290aGVycyknLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUGFja2FnZUxpc3RNb2RlbC5DT0xfQklOQiwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9zdHlsZSc6ICdiaW5iJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9taW4nICA6IDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9tYXgnICA6IDM1MCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZCcgICA6ICdUcnVlJworICAgICAgICAgICAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9uYW1lJyA6ICdJbmNsdWRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBQYWNrYWdlTGlzdE1vZGVsLkNPTF9JTkMsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfc3R5bGUnOiAnY2hlY2sgdG9nZ2xlJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9taW4nICA6IDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9tYXgnICA6IDEwMAorICAgICAgICAgICAgICAgICAgICAgfV0KKyAgICAgICAgfSwgeworICAgICAgICAgJ25hbWUnICAgICAgOiAnQWxsIHBhY2thZ2VzJywKKyAgICAgICAgICd0b29sdGlwJyAgIDogJ0FsbCBwYWNrYWdlcyB0aGF0IGhhdmUgYmVlbiBidWlsdCcsCisgICAgICAgICAnZmlsdGVyJyAgICA6IHt9LAorICAgICAgICAgJ3NlYXJjaCcgICAgOiAnU2VhcmNoIHBhY2thZ2VzIGJ5IG5hbWUnLAorICAgICAgICAgJ3NlYXJjaHRpcCcgOiAnRW50ZXIgYSBwYWNrYWdlIG5hbWUgdG8gZmluZCBpdCcsCisgICAgICAgICAnY29sdW1ucycgICA6IFt7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnUGFja2FnZSBuYW1lJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9pZCcgICA6IFBhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfc3R5bGUnOiAndGV4dCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiA0MDAsCisgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmQnICAgOiAnVHJ1ZScKKyAgICAgICAgICAgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnU2l6ZScsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBQYWNrYWdlTGlzdE1vZGVsLkNPTF9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3RleHQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogNTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kJyAgIDogJ1RydWUnCisgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ1JlY2lwZScsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBQYWNrYWdlTGlzdE1vZGVsLkNPTF9SQ1AsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfc3R5bGUnOiAndGV4dCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiAyNTAsCisgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmQnICAgOiAnVHJ1ZScKKyAgICAgICAgICAgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnSW5jbHVkZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUGFja2FnZUxpc3RNb2RlbC5DT0xfSU5DLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ2NoZWNrIHRvZ2dsZScsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiAxMDAKKyAgICAgICAgICAgICAgICAgICAgICB9XQorICAgICAgICB9CisgICAgXQorICAgIAorICAgIChJTkNMVURFRCwKKyAgICAgQUxMKSA9IHJhbmdlKDIpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnVpbGRlcik6CisgICAgICAgIHN1cGVyKFBhY2thZ2VTZWxlY3Rpb25QYWdlLCBzZWxmKS5fX2luaXRfXyhidWlsZGVyLCAiRWRpdCBwYWNrYWdlcyIpCisKKyAgICAgICAgIyBzZXQgaW52aXNpYmxlIG1lbWJlcnMKKyAgICAgICAgc2VsZi5yZWNpcGVfbW9kZWwgPSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsCisgICAgICAgIHNlbGYucGFja2FnZV9tb2RlbCA9IHNlbGYuYnVpbGRlci5wYWNrYWdlX21vZGVsCisKKyAgICAgICAgIyBjcmVhdGUgdmlzdWFsIGVsZW1lbnRzCisgICAgICAgIHNlbGYuY3JlYXRlX3Zpc3VhbF9lbGVtZW50cygpCisKKyAgICBkZWYgaW5jbHVkZWRfY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmlucy5zZXRfY3VycmVudF9wYWdlKHNlbGYuSU5DTFVERUQpCisKKyAgICBkZWYgY3JlYXRlX3Zpc3VhbF9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5sYWJlbCA9IGd0ay5MYWJlbCgiUGFja2FnZXMgaW5jbHVkZWQ6IDBcblNlbGVjdGVkIHBhY2thZ2VzIHNpemU6IDAgTUIiKQorICAgICAgICBzZWxmLmV2ZW50Ym94ID0gc2VsZi5hZGRfb250b190b3BfYmFyKHNlbGYubGFiZWwsIDczKQorICAgICAgICBzZWxmLnBhY2tfc3RhcnQoc2VsZi5ldmVudGJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzZWxmLnBhY2tfc3RhcnQoc2VsZi5ncm91cF9hbGlnbiwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICAjIHNldCB2aXNpYmxlIG1lbWJlcnMKKyAgICAgICAgc2VsZi5pbnMgPSBIb2JOb3RlYm9vaygpCisgICAgICAgIHNlbGYudGFibGVzID0gW10gIyB3ZSBuZWVkIHRvIG1vZGlmeSB0YWJsZSB3aGVuIHRoZSBkaWFsb2cgaXMgc2hvd24KKworICAgICAgICBzZWFyY2hfbmFtZXMgPSBbXQorICAgICAgICBzZWFyY2hfdGlwcyA9IFtdCisgICAgICAgICMgYXBwZW5kIHRoZSB0YWIKKyAgICAgICAgZm9yIHBhZ2UgaW4gc2VsZi5wYWdlczoKKyAgICAgICAgICAgIGNvbHVtbnMgPSBwYWdlWydjb2x1bW5zJ10KKyAgICAgICAgICAgIG5hbWUgPSBwYWdlWyduYW1lJ10KKyAgICAgICAgICAgIHRhYiA9IEhvYlZpZXdUYWJsZShjb2x1bW5zLCBuYW1lKQorICAgICAgICAgICAgc2VhcmNoX25hbWVzLmFwcGVuZChwYWdlWydzZWFyY2gnXSkKKyAgICAgICAgICAgIHNlYXJjaF90aXBzLmFwcGVuZChwYWdlWydzZWFyY2h0aXAnXSkKKyAgICAgICAgICAgIGZpbHRlciA9IHBhZ2VbJ2ZpbHRlciddCisgICAgICAgICAgICBzb3J0X21vZGVsID0gc2VsZi5wYWNrYWdlX21vZGVsLnRyZWVfbW9kZWwoZmlsdGVyLCBpbml0aWFsPVRydWUpCisgICAgICAgICAgICB0YWIuc2V0X21vZGVsKHNvcnRfbW9kZWwpCisgICAgICAgICAgICB0YWIuY29ubmVjdCgidG9nZ2xlZCIsIHNlbGYudGFibGVfdG9nZ2xlZF9jYiwgbmFtZSkKKyAgICAgICAgICAgIHRhYi5jb25uZWN0KCJidXR0b24tcmVsZWFzZS1ldmVudCIsIHNlbGYuYnV0dG9uX2NsaWNrX2NiKQorICAgICAgICAgICAgdGFiLmNvbm5lY3QoImNlbGwtZmFkZWlub3V0LXN0b3BwZWQiLCBzZWxmLmFmdGVyX2ZhZGVvdXRfY2hlY2tpbl9pbmNsdWRlLCBmaWx0ZXIpCisgICAgICAgICAgICBzZWxmLmlucy5hcHBlbmRfcGFnZSh0YWIsIHBhZ2VbJ25hbWUnXSwgcGFnZVsndG9vbHRpcCddKQorICAgICAgICAgICAgc2VsZi50YWJsZXMuYXBwZW5kKHRhYikKKworICAgICAgICBzZWxmLmlucy5zZXRfZW50cnkoc2VhcmNoX25hbWVzLCBzZWFyY2hfdGlwcykKKyAgICAgICAgc2VsZi5pbnMuc2VhcmNoLmNvbm5lY3QoImNoYW5nZWQiLCBzZWxmLnNlYXJjaF9lbnRyeV9jaGFuZ2VkKQorCisgICAgICAgICMgYWRkIGFsbCBpbnRvIHRoZSBkaWFsb2cKKyAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5wYWNrX3N0YXJ0KHNlbGYuaW5zLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHNlbGYuYnV0dG9uX2JveCA9IGd0ay5IQm94KEZhbHNlLCA2KQorICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfc3RhcnQoc2VsZi5idXR0b25fYm94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgc2VsZi5idWlsZF9pbWFnZV9idXR0b24gPSBIb2JCdXR0b24oJ0J1aWxkIGltYWdlJykKKyAgICAgICAgI3NlbGYuYnVpbGRfaW1hZ2VfYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoMjA1LCA0OSkKKyAgICAgICAgc2VsZi5idWlsZF9pbWFnZV9idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiQnVpbGQgdGFyZ2V0IGltYWdlIikKKyAgICAgICAgc2VsZi5idWlsZF9pbWFnZV9idXR0b24uc2V0X2ZsYWdzKGd0ay5DQU5fREVGQVVMVCkKKyAgICAgICAgc2VsZi5idWlsZF9pbWFnZV9idXR0b24uZ3JhYl9kZWZhdWx0KCkKKyAgICAgICAgc2VsZi5idWlsZF9pbWFnZV9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuYnVpbGRfaW1hZ2VfY2xpY2tlZF9jYikKKyAgICAgICAgc2VsZi5idXR0b25fYm94LnBhY2tfZW5kKHNlbGYuYnVpbGRfaW1hZ2VfYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgc2VsZi5iYWNrX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbignQ2FuY2VsJykKKyAgICAgICAgc2VsZi5iYWNrX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5iYWNrX2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICBzZWxmLmJ1dHRvbl9ib3gucGFja19lbmQoc2VsZi5iYWNrX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgZGVmIHNlYXJjaF9lbnRyeV9jaGFuZ2VkKHNlbGYsIGVudHJ5KToKKyAgICAgICAgdGV4dCA9IGVudHJ5LmdldF90ZXh0KCkKKyAgICAgICAgaWYgc2VsZi5pbnMuc2VhcmNoX2ZvY3VzOgorICAgICAgICAgICAgc2VsZi5pbnMuc2VhcmNoX2ZvY3VzID0gRmFsc2UKKyAgICAgICAgZWxpZiBzZWxmLmlucy5wYWdlX2NoYW5nZWQ6CisgICAgICAgICAgICBzZWxmLmlucy5wYWdlX2NoYW5nZSA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLmZpbHRlcl9zZWFyY2goZW50cnkpCisgICAgICAgIGVsaWYgdGV4dCBub3QgaW4gc2VsZi5pbnMuc2VhcmNoX25hbWVzOgorICAgICAgICAgICAgc2VsZi5maWx0ZXJfc2VhcmNoKGVudHJ5KQorCisgICAgZGVmIGZpbHRlcl9zZWFyY2goc2VsZiwgZW50cnkpOgorICAgICAgICB0ZXh0ID0gZW50cnkuZ2V0X3RleHQoKQorICAgICAgICBjdXJyZW50X3RhYiA9IHNlbGYuaW5zLmdldF9jdXJyZW50X3BhZ2UoKQorICAgICAgICBmaWx0ZXIgPSBzZWxmLnBhZ2VzW2N1cnJlbnRfdGFiXVsnZmlsdGVyJ10KKyAgICAgICAgZmlsdGVyW1BhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUVdID0gdGV4dAorICAgICAgICBzZWxmLnRhYmxlc1tjdXJyZW50X3RhYl0uc2V0X21vZGVsKHNlbGYucGFja2FnZV9tb2RlbC50cmVlX21vZGVsKGZpbHRlciwgc2VhcmNoX2RhdGE9dGV4dCkpCisgICAgICAgIGlmIHNlbGYucGFja2FnZV9tb2RlbC5maWx0ZXJlZF9uYiA9PSAwOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikudG9wX2JhcjoKKyAgICAgICAgICAgICAgICBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLmFkZF9ub19yZXN1bHRfYmFyKGVudHJ5KQorICAgICAgICAgICAgICAgIHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikudG9wX2Jhci5zZXRfbm9fc2hvd19hbGwoVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikudG9wX2Jhci5zaG93KCkKKyAgICAgICAgICAgIHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikuc2Nyb2xsLmhpZGUoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2VsZi5pbnMuZ2V0X250aF9wYWdlKGN1cnJlbnRfdGFiKS50b3BfYmFyOgorICAgICAgICAgICAgICAgIHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikudG9wX2Jhci5oaWRlKCkKKyAgICAgICAgICAgIHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikuc2Nyb2xsLnNob3coKQorICAgICAgICBpZiBlbnRyeS5nZXRfdGV4dCgpID09ICcnOgorICAgICAgICAgICAgZW50cnkuc2V0X2ljb25fc2Vuc2l0aXZlKGd0ay5FTlRSWV9JQ09OX1NFQ09OREFSWSwgRmFsc2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbnRyeS5zZXRfaWNvbl9zZW5zaXRpdmUoZ3RrLkVOVFJZX0lDT05fU0VDT05EQVJZLCBUcnVlKQorCisgICAgZGVmIGJ1dHRvbl9jbGlja19jYihzZWxmLCB3aWRnZXQsIGV2ZW50KToKKyAgICAgICAgcGF0aCwgY29sID0gd2lkZ2V0LnRhYmxlX3RyZWUuZ2V0X2N1cnNvcigpCisgICAgICAgIHRyZWVfbW9kZWwgPSB3aWRnZXQudGFibGVfdHJlZS5nZXRfbW9kZWwoKQorICAgICAgICBpZiBwYXRoIGFuZCBjb2wuZ2V0X3RpdGxlKCkgIT0gJ0luY2x1ZGVkJzogIyBlbHNlIGFjdGl2YXRpb24gaXMgbGlrZWx5IGEgcmVtb3ZhbAorICAgICAgICAgICAgcHJvcGVydGllcyA9IHsnYmluYic6ICcnICwgJ25hbWUnOiAnJywgJ3NpemUnOicnLCAncmVjaXBlJzonJywgJ2ZpbGVzX2xpc3QnOicnfQorICAgICAgICAgICAgcHJvcGVydGllc1snYmluYiddID0gdHJlZV9tb2RlbC5nZXRfdmFsdWUodHJlZV9tb2RlbC5nZXRfaXRlcihwYXRoKSwgUGFja2FnZUxpc3RNb2RlbC5DT0xfQklOQikKKyAgICAgICAgICAgIHByb3BlcnRpZXNbJ25hbWUnXSA9IHRyZWVfbW9kZWwuZ2V0X3ZhbHVlKHRyZWVfbW9kZWwuZ2V0X2l0ZXIocGF0aCksIFBhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgICAgICBwcm9wZXJ0aWVzWydzaXplJ10gPSB0cmVlX21vZGVsLmdldF92YWx1ZSh0cmVlX21vZGVsLmdldF9pdGVyKHBhdGgpLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9TSVpFKQorICAgICAgICAgICAgcHJvcGVydGllc1sncmVjaXBlJ10gPSB0cmVlX21vZGVsLmdldF92YWx1ZSh0cmVlX21vZGVsLmdldF9pdGVyKHBhdGgpLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9SQ1ApCisgICAgICAgICAgICBwcm9wZXJ0aWVzWydmaWxlc19saXN0J10gPSB0cmVlX21vZGVsLmdldF92YWx1ZSh0cmVlX21vZGVsLmdldF9pdGVyKHBhdGgpLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9GTElTVCkKKworICAgICAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfcmVjaXBlX3Byb3BlcnR5X2RpYWxvZyhwcm9wZXJ0aWVzKQorCisgICAgZGVmIG9wZW5fbG9nX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uLCBsb2dfZmlsZSk6CisgICAgICAgIGlmIGxvZ19maWxlOgorICAgICAgICAgICAgbG9nX2ZpbGUgPSAiZmlsZTovLy8iICsgbG9nX2ZpbGUKKyAgICAgICAgICAgIGd0ay5zaG93X3VyaShzY3JlZW49YnV0dG9uLmdldF9zY3JlZW4oKSwgdXJpPWxvZ19maWxlLCB0aW1lc3RhbXA9MCkKKworICAgIGRlZiBzaG93X3BhZ2Uoc2VsZiwgbG9nX2ZpbGUpOgorICAgICAgICBjaGlsZHJlbiA9IHNlbGYuYnV0dG9uX2JveC5nZXRfY2hpbGRyZW4oKSBvciBbXQorICAgICAgICBmb3IgY2hpbGQgaW4gY2hpbGRyZW46CisgICAgICAgICAgICBzZWxmLmJ1dHRvbl9ib3gucmVtb3ZlKGNoaWxkKQorICAgICAgICAjIHJlLXBhY2tlZCB0aGUgYnV0dG9ucyBhcyByZXF1ZXN0LCBhZGQgdGhlICdvcGVuIGxvZycgYnV0dG9uIGlmIGJ1aWxkIHN1Y2Nlc3MKKyAgICAgICAgc2VsZi5idXR0b25fYm94LnBhY2tfZW5kKHNlbGYuYnVpbGRfaW1hZ2VfYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGlmIGxvZ19maWxlOgorICAgICAgICAgICAgb3Blbl9sb2dfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJPcGVuIGxvZyIpCisgICAgICAgICAgICBvcGVuX2xvZ19idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYub3Blbl9sb2dfY2xpY2tlZF9jYiwgbG9nX2ZpbGUpCisgICAgICAgICAgICBvcGVuX2xvZ19idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiT3BlbiB0aGUgYnVpbGQncyBsb2cgZmlsZSIpCisgICAgICAgICAgICBzZWxmLmJ1dHRvbl9ib3gucGFja19lbmQob3Blbl9sb2dfYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlbGYuYnV0dG9uX2JveC5wYWNrX2VuZChzZWxmLmJhY2tfYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorCisgICAgZGVmIGJ1aWxkX2ltYWdlX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5idWlsZGVyLnBhcnNpbmdfd2FybmluZ3MgPSBbXQorICAgICAgICBzZWxmLmJ1aWxkZXIuYnVpbGRfaW1hZ2UoKQorCisgICAgZGVmIHJlZnJlc2hfdGFibGVzKHNlbGYpOgorICAgICAgICBzZWxmLmlucy5yZXNldF9lbnRyeShzZWxmLmlucy5zZWFyY2gsIDApCisgICAgICAgIGZvciB0YWIgaW4gc2VsZi50YWJsZXM6CisgICAgICAgICAgICBpbmRleCA9IHNlbGYudGFibGVzLmluZGV4KHRhYikKKyAgICAgICAgICAgIGZpbHRlciA9IHNlbGYucGFnZXNbaW5kZXhdWydmaWx0ZXInXQorICAgICAgICAgICAgdGFiLnNldF9tb2RlbChzZWxmLnBhY2thZ2VfbW9kZWwudHJlZV9tb2RlbChmaWx0ZXIsIGluaXRpYWw9VHJ1ZSkpCisKKyAgICBkZWYgYmFja19idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBpZiBzZWxmLmJ1aWxkZXIucHJldmlvdXNfc3RlcCA9PSAgc2VsZi5idWlsZGVyLklNQUdFX0dFTkVSQVRFRDoKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5yZXN0b3JlX2luaXRpYWxfc2VsZWN0ZWRfcGFja2FnZXMoKQorICAgICAgICAgICAgc2VsZi5yZWZyZXNoX3NlbGVjdGlvbigpCisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19pbWFnZV9kZXRhaWxzKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5zaG93X2NvbmZpZ3VyYXRpb24oKQorICAgICAgICBzZWxmLnJlZnJlc2hfdGFibGVzKCkKKworICAgIGRlZiByZWZyZXNoX3NlbGVjdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfcGFja2FnZXMgPSBzZWxmLnBhY2thZ2VfbW9kZWwuZ2V0X3NlbGVjdGVkX3BhY2thZ2VzKCkKKyAgICAgICAgc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24udXNlcl9zZWxlY3RlZF9wYWNrYWdlcyA9IHNlbGYucGFja2FnZV9tb2RlbC5nZXRfdXNlcl9zZWxlY3RlZF9wYWNrYWdlcygpCisgICAgICAgIHNlbGVjdGVkX3BhY2thZ2VzX251bSA9IGxlbihzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9wYWNrYWdlcykKKyAgICAgICAgc2VsZWN0ZWRfcGFja2FnZXNfc2l6ZSA9IHNlbGYucGFja2FnZV9tb2RlbC5nZXRfcGFja2FnZXNfc2l6ZSgpCisgICAgICAgIHNlbGVjdGVkX3BhY2thZ2VzX3NpemVfc3RyID0gSG9iUGFnZS5fc2l6ZV90b19zdHJpbmcoc2VsZWN0ZWRfcGFja2FnZXNfc2l6ZSkKKworICAgICAgICBpZiBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5pbWFnZV9wYWNrYWdlcyA9PSBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9wYWNrYWdlczoKKyAgICAgICAgICAgIGltYWdlX3RvdGFsX3NpemVfc3RyID0gc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uaW1hZ2Vfc2l6ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW1hZ2Vfb3ZlcmhlYWRfZmFjdG9yID0gc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uaW1hZ2Vfb3ZlcmhlYWRfZmFjdG9yCisgICAgICAgICAgICBpbWFnZV9yb290ZnNfc2l6ZSA9IHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLmltYWdlX3Jvb3Rmc19zaXplIC8gMTAyNCAjIGltYWdlX3Jvb3Rmc19zaXplIGlzIEtCCisgICAgICAgICAgICBpbWFnZV9leHRyYV9zaXplID0gc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uaW1hZ2VfZXh0cmFfc2l6ZSAvIDEwMjQgIyBpbWFnZV9leHRyYV9zaXplIGlzIEtCCisgICAgICAgICAgICBiYXNlX3NpemUgPSBpbWFnZV9vdmVyaGVhZF9mYWN0b3IgKiBzZWxlY3RlZF9wYWNrYWdlc19zaXplCisgICAgICAgICAgICBpbWFnZV90b3RhbF9zaXplID0gbWF4KGJhc2Vfc2l6ZSwgaW1hZ2Vfcm9vdGZzX3NpemUpICsgaW1hZ2VfZXh0cmFfc2l6ZQorICAgICAgICAgICAgaWYgInp5cHBlciIgaW4gc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfcGFja2FnZXM6CisgICAgICAgICAgICAgICAgaW1hZ2VfdG90YWxfc2l6ZSArPSAoNTEyMDAgKiAxMDI0KQorICAgICAgICAgICAgaW1hZ2VfdG90YWxfc2l6ZV9zdHIgPSBIb2JQYWdlLl9zaXplX3RvX3N0cmluZyhpbWFnZV90b3RhbF9zaXplKQorCisgICAgICAgIHNlbGYubGFiZWwuc2V0X2xhYmVsKCJQYWNrYWdlcyBpbmNsdWRlZDogJXNcblNlbGVjdGVkIHBhY2thZ2VzIHNpemU6ICVzXG5Fc3RpbWF0ZWQgaW1hZ2Ugc2l6ZTogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRfcGFja2FnZXNfbnVtLCBzZWxlY3RlZF9wYWNrYWdlc19zaXplX3N0ciwgaW1hZ2VfdG90YWxfc2l6ZV9zdHIpKQorICAgICAgICBzZWxmLmlucy5zaG93X2luZGljYXRvcl9pY29uKCJJbmNsdWRlZCBwYWNrYWdlcyIsIHNlbGVjdGVkX3BhY2thZ2VzX251bSkKKworICAgIGRlZiB0b2dnbGVfaXRlbV9pZGxlX2NiKHNlbGYsIHBhdGgsIHZpZXdfdHJlZSwgY2VsbCwgcGFnZW5hbWUpOgorICAgICAgICBpZiBub3Qgc2VsZi5wYWNrYWdlX21vZGVsLnBhdGhfaW5jbHVkZWQocGF0aCk6CisgICAgICAgICAgICBzZWxmLnBhY2thZ2VfbW9kZWwuaW5jbHVkZV9pdGVtKGl0ZW1fcGF0aD1wYXRoLCBiaW5iPSJVc2VyIFNlbGVjdGVkIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucHJlX2ZhZGVvdXRfY2hlY2tvdXRfaW5jbHVkZSh2aWV3X3RyZWUpCisgICAgICAgICAgICBzZWxmLnBhY2thZ2VfbW9kZWwuZXhjbHVkZV9pdGVtKGl0ZW1fcGF0aD1wYXRoKQorICAgICAgICAgICAgc2VsZi5yZW5kZXJfZmFkZW91dCh2aWV3X3RyZWUsIGNlbGwpCisKKyAgICAgICAgc2VsZi5yZWZyZXNoX3NlbGVjdGlvbigpCisgICAgICAgIGlmIG5vdCBzZWxmLmJ1aWxkZXIuY3VzdG9taXplZDoKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5jdXN0b21pemVkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5idWlsZGVyLnNldF9iYXNlX2ltYWdlKCkKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLnNlbGVjdGVkX2ltYWdlID0gc2VsZi5yZWNpcGVfbW9kZWwuX19jdXN0b21faW1hZ2VfXworICAgICAgICAgICAgc2VsZi5idWlsZGVyLnJjcHBrZ2xpc3RfcG9wdWxhdGVkKCkKKworICAgICAgICBzZWxmLmJ1aWxkZXIud2luZG93X3NlbnNpdGl2ZShUcnVlKQorICAgICAgICB2aWV3X21vZGVsID0gdmlld190cmVlLmdldF9tb2RlbCgpCisgICAgICAgIHZwYXRoID0gc2VsZi5wYWNrYWdlX21vZGVsLmNvbnZlcnRfcGF0aF90b192cGF0aCh2aWV3X21vZGVsLCBwYXRoKQorICAgICAgICB2aWV3X3RyZWUuc2V0X2N1cnNvcih2cGF0aCkKKworICAgIGRlZiB0YWJsZV90b2dnbGVkX2NiKHNlbGYsIHRhYmxlLCBjZWxsLCB2aWV3X3BhdGgsIHRvZ2dsZWRfY29sdW1uaWQsIHZpZXdfdHJlZSwgcGFnZW5hbWUpOgorICAgICAgICAjIENsaWNrIHRvIGluY2x1ZGUgYSBwYWNrYWdlCisgICAgICAgIHNlbGYuYnVpbGRlci53aW5kb3dfc2Vuc2l0aXZlKEZhbHNlKQorICAgICAgICB2aWV3X21vZGVsID0gdmlld190cmVlLmdldF9tb2RlbCgpCisgICAgICAgIHBhdGggPSBzZWxmLnBhY2thZ2VfbW9kZWwuY29udmVydF92cGF0aF90b19wYXRoKHZpZXdfbW9kZWwsIHZpZXdfcGF0aCkKKyAgICAgICAgZ2xpYi5pZGxlX2FkZChzZWxmLnRvZ2dsZV9pdGVtX2lkbGVfY2IsIHBhdGgsIHZpZXdfdHJlZSwgY2VsbCwgcGFnZW5hbWUpCisKKyAgICBkZWYgcHJlX2ZhZGVvdXRfY2hlY2tvdXRfaW5jbHVkZShzZWxmLCB0cmVlKToKKyAgICAgICAgI2FmdGVyIHRoZSBmYWRlb3V0IHRoZSB0YWJsZSB3aWxsIGJlIHNvcnRlZCBhcyBiZWZvcmUKKyAgICAgICAgc2VsZi5zb3J0X2NvbHVtbl9pZCA9IHNlbGYucGFja2FnZV9tb2RlbC5zb3J0X2NvbHVtbl9pZAorICAgICAgICBzZWxmLnNvcnRfb3JkZXIgPSBzZWxmLnBhY2thZ2VfbW9kZWwuc29ydF9vcmRlcgorCisgICAgICAgIHNlbGYucGFja2FnZV9tb2RlbC5yZXN5bmNfZmFkZW91dF9jb2x1bW4oc2VsZi5wYWNrYWdlX21vZGVsLmdldF9pdGVyX2ZpcnN0KCkpCisgICAgICAgICMgQ2hlY2sgb3V0IGEgbW9kZWwgd2hpY2ggYmFzZSBvbiB0aGUgY29sdW1uIENPTF9GQURFX0lOQywKKyAgICAgICAgIyBpdCdzIHNhdmUgdGhlIHByZXYgc3RhdGUgb2YgY29sdW1uIENPTF9JTkMgYmVmb3JlIGRvIGV4Y2x1ZGVfaXRlbQorICAgICAgICBmaWx0ZXIgPSB7IFBhY2thZ2VMaXN0TW9kZWwuQ09MX0ZBREVfSU5DICA6IFtUcnVlXX0KKyAgICAgICAgbmV3X21vZGVsID0gc2VsZi5wYWNrYWdlX21vZGVsLnRyZWVfbW9kZWwoZmlsdGVyLCBleGNsdWRlZF9pdGVtc19haGVhZD1UcnVlKQorICAgICAgICB0cmVlLnNldF9tb2RlbChuZXdfbW9kZWwpCisgICAgICAgIHRyZWUuZXhwYW5kX2FsbCgpCisKKyAgICBkZWYgZ2V0X2V4Y2x1ZGVkX3Jvd3Moc2VsZiwgdG9fcmVuZGVyX2NlbGxzLCBtb2RlbCwgaXQpOgorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIHBhdGggPSBtb2RlbC5nZXRfcGF0aChpdCkKKyAgICAgICAgICAgIHByZXZfY2VsbF9pc19hY3RpdmUgPSBtb2RlbC5nZXRfdmFsdWUoaXQsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX0ZBREVfSU5DKQorICAgICAgICAgICAgY3Vycl9jZWxsX2lzX2FjdGl2ZSA9IG1vZGVsLmdldF92YWx1ZShpdCwgUGFja2FnZUxpc3RNb2RlbC5DT0xfSU5DKQorICAgICAgICAgICAgaWYgKHByZXZfY2VsbF9pc19hY3RpdmUgPT0gVHJ1ZSkgYW5kIChjdXJyX2NlbGxfaXNfYWN0aXZlID09IEZhbHNlKToKKyAgICAgICAgICAgICAgICB0b19yZW5kZXJfY2VsbHMuYXBwZW5kKHBhdGgpCisgICAgICAgICAgICBpZiBtb2RlbC5pdGVyX2hhc19jaGlsZChpdCk6CisgICAgICAgICAgICAgICAgc2VsZi5nZXRfZXhjbHVkZWRfcm93cyh0b19yZW5kZXJfY2VsbHMsIG1vZGVsLCBtb2RlbC5pdGVyX2NoaWxkcmVuKGl0KSkKKyAgICAgICAgICAgIGl0ID0gbW9kZWwuaXRlcl9uZXh0KGl0KQorCisgICAgICAgIHJldHVybiB0b19yZW5kZXJfY2VsbHMKKworICAgIGRlZiByZW5kZXJfZmFkZW91dChzZWxmLCB0cmVlLCBjZWxsKToKKyAgICAgICAgaWYgKG5vdCBjZWxsKSBvciAobm90IHRyZWUpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRvX3JlbmRlcl9jZWxscyA9IFtdCisgICAgICAgIHZpZXdfbW9kZWwgPSB0cmVlLmdldF9tb2RlbCgpCisgICAgICAgIHNlbGYuZ2V0X2V4Y2x1ZGVkX3Jvd3ModG9fcmVuZGVyX2NlbGxzLCB2aWV3X21vZGVsLCB2aWV3X21vZGVsLmdldF9pdGVyX2ZpcnN0KCkpCisKKyAgICAgICAgY2VsbC5mYWRlb3V0KHRyZWUsIDEwMDAsIHRvX3JlbmRlcl9jZWxscykKKworICAgIGRlZiBhZnRlcl9mYWRlb3V0X2NoZWNraW5faW5jbHVkZShzZWxmLCB0YWJsZSwgY3RybCwgY2VsbCwgdHJlZSwgZmlsdGVyKToKKyAgICAgICAgc2VsZi5wYWNrYWdlX21vZGVsLnNvcnRfY29sdW1uX2lkID0gc2VsZi5zb3J0X2NvbHVtbl9pZAorICAgICAgICBzZWxmLnBhY2thZ2VfbW9kZWwuc29ydF9vcmRlciA9IHNlbGYuc29ydF9vcmRlcgorICAgICAgICB0cmVlLnNldF9tb2RlbChzZWxmLnBhY2thZ2VfbW9kZWwudHJlZV9tb2RlbChmaWx0ZXIpKQorICAgICAgICB0cmVlLmV4cGFuZF9hbGwoKQorCisgICAgZGVmIHNldF9wYWNrYWdlc19jdXJyX3RhYihzZWxmLCBjdXJyX3BhZ2UpOgorICAgICAgICBzZWxmLmlucy5zZXRfY3VycmVudF9wYWdlKGN1cnJfcGFnZSkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcGVyc2lzdGVudHRvb2x0aXAucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wZXJzaXN0ZW50dG9vbHRpcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjdjMTk0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcGVyc2lzdGVudHRvb2x0aXAucHkKQEAgLTAsMCArMSwxODYgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMiAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBnb2JqZWN0CitpbXBvcnQgZ3RrCit0cnk6CisgICAgaW1wb3J0IGdjb25mCitleGNlcHQ6CisgICAgcGFzcworCitjbGFzcyBQZXJzaXN0ZW50VG9vbHRpcChndGsuV2luZG93KToKKyAgICAiIiIKKyAgICBBIHRvb2x0aXAgd2hpY2ggcGVyc2lzdHMgb25jZSBzaG93biB1bnRpbCB0aGUgdXNlciBkaXNtaXNzZXMgaXQgd2l0aCB0aGUgRXNjCisgICAga2V5IG9yIGJ5IGNsaWNraW5nIHRoZSBjbG9zZSBidXR0b24uCisKKyAgICAjIEZJWE1FOiB0aGUgUGVyc2lzdGVudFRvb2x0aXAgc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIGFueXdoZXJlIG9mZgorICAgICMgaXQuIFdlIGNhbid0IGRvIHRoaXMgd2l0aCBmb2N1cy1vdXQtZXZlbnQgYmVjdWFzZSBtb2RhbCBlbnN1cmVzIHdlIGhhdmUgZm9jdXM/CisKKyAgICBtYXJrdXA6IHNvbWUgUGFuZ28gdGV4dCBtYXJrdXAgdG8gZGlzcGxheSBpbiB0aGUgdG9vbHRpcAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXJrdXAsIHBhcmVudF93aW49Tm9uZSk6CisgICAgICAgIGd0ay5XaW5kb3cuX19pbml0X18oc2VsZiwgZ3RrLldJTkRPV19QT1BVUCkKKworICAgICAgICAjIEluaGVyaXQgdGhlIHN5c3RlbSB0aGVtZSBmb3IgYSB0b29sdGlwCisgICAgICAgIHN0eWxlID0gZ3RrLnJjX2dldF9zdHlsZV9ieV9wYXRocyhndGsuc2V0dGluZ3NfZ2V0X2RlZmF1bHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdndGstdG9vbHRpcCcsICdndGstdG9vbHRpcCcsIGdvYmplY3QuVFlQRV9OT05FKQorICAgICAgICBzZWxmLnNldF9zdHlsZShzdHlsZSkKKworICAgICAgICAjIFRoZSBwbGFjZW1lbnQgb2YgdGhlIGNsb3NlIGJ1dHRvbiBvbiB0aGUgdGlwIHNob3VsZCByZWZsZWN0IGhvdyB0aGUKKyAgICAgICAgIyB3aW5kb3cgbWFuYWdlciBvZiB0aGUgdXNlcnMgc3lzdGVtIHBsYWNlcyBjbG9zZSBidXR0b25zLiBUcnkgdG8gcmVhZAorICAgICAgICAjIHRoZSBtZXRhY2l0eSBnY29uZiBrZXkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNsb3NlIGJ1dHRvbiBpcyBvbiB0aGUKKyAgICAgICAgIyBsZWZ0IG9yIHRoZSByaWdodC4KKyAgICAgICAgIyBJbiB0aGUgY2FzZSB0aGF0IHdlIGNhbid0IGRldGVybWluZSB0aGUgdXNlcnMgY29uZmlndXJhdGlvbiB3ZSBkZWZhdWx0CisgICAgICAgICMgdG8gY2xvc2UgYnV0dG9ucyBiZWluZyBvbiB0aGUgcmlnaHQuCisgICAgICAgIF9fYnV0dG9uX3JpZ2h0ID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbGllbnQgPSBnY29uZi5jbGllbnRfZ2V0X2RlZmF1bHQoKQorICAgICAgICAgICAgb3JkZXIgPSBjbGllbnQuZ2V0X3N0cmluZygiL2FwcHMvbWV0YWNpdHkvZ2VuZXJhbC9idXR0b25fbGF5b3V0IikKKyAgICAgICAgICAgIGlmIG9yZGVyIGFuZCBvcmRlci5lbmRzd2l0aCgiOiIpOgorICAgICAgICAgICAgICAgIF9fYnV0dG9uX3JpZ2h0ID0gRmFsc2UKKyAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIFdlIG5lZWQgdG8gZW5zdXJlIHdlJ3JlIG9ubHkgc2hvd24gb25jZQorICAgICAgICBzZWxmLnNob3duID0gRmFsc2UKKworICAgICAgICAjIFdlIGRvbid0IHdhbnQgYW55IFdNIGRlY29yYXRpb25zCisgICAgICAgIHNlbGYuc2V0X2RlY29yYXRlZChGYWxzZSkKKyAgICAgICAgIyBXZSBkb24ndCB3YW50IHRvIHNob3cgaW4gdGhlIHRhc2tiYXIgb3Igd2luZG93IHN3aXRjaGVyCisgICAgICAgIHNlbGYuc2V0X3NraXBfcGFnZXJfaGludChUcnVlKQorICAgICAgICBzZWxmLnNldF9za2lwX3Rhc2tiYXJfaGludChUcnVlKQorICAgICAgICAjIFdlIG11c3QgYmUgbW9kYWwgdG8gZW5zdXJlIHdlIGdyYWIgZm9jdXMgd2hlbiBwcmVzZW50ZWQgZnJvbSBhIGd0ay5EaWFsb2cKKyAgICAgICAgc2VsZi5zZXRfbW9kYWwoVHJ1ZSkKKworICAgICAgICBzZWxmLnNldF9ib3JkZXJfd2lkdGgoMCkKKyAgICAgICAgc2VsZi5zZXRfcG9zaXRpb24oZ3RrLldJTl9QT1NfTU9VU0UpCisgICAgICAgIHNlbGYuc2V0X29wYWNpdHkoMC45NSkKKworICAgICAgICAjIEVuc3VyZSBhIHJlYXNvbmFibGUgbWluaW11bSBzaXplCisgICAgICAgIHNlbGYuc2V0X2dlb21ldHJ5X2hpbnRzKHNlbGYsIDEwMCwgNTApCisKKyAgICAgICAgIyBTZXQgdGhpcyB3aW5kb3cgYXMgYSB0cmFuc2llbnQgd2luZG93IGZvciBwYXJlbnQobWFpbiB3aW5kb3cpCisgICAgICAgIGlmIHBhcmVudF93aW46CisgICAgICAgICAgICBzZWxmLnNldF90cmFuc2llbnRfZm9yKHBhcmVudF93aW4pCisgICAgICAgICAgICBzZWxmLnNldF9kZXN0cm95X3dpdGhfcGFyZW50KFRydWUpCisgICAgICAgICMgRHJhdyBvdXIgbGFiZWwgYW5kIGNsb3NlIGJ1dHRvbnMKKyAgICAgICAgaGJveCA9IGd0ay5IQm94KEZhbHNlLCAwKQorICAgICAgICBoYm94LnNob3coKQorICAgICAgICBzZWxmLmFkZChoYm94KQorCisgICAgICAgIGltZyA9IGd0ay5JbWFnZSgpCisgICAgICAgIGltZy5zZXRfZnJvbV9zdG9jayhndGsuU1RPQ0tfQ0xPU0UsIGd0ay5JQ09OX1NJWkVfQlVUVE9OKQorCisgICAgICAgIHNlbGYuYnV0dG9uID0gZ3RrLkJ1dHRvbigpCisgICAgICAgIHNlbGYuYnV0dG9uLnNldF9pbWFnZShpbWcpCisgICAgICAgIHNlbGYuYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLl9kaXNtaXNzX2NiKQorICAgICAgICBzZWxmLmJ1dHRvbi5zZXRfZmxhZ3MoZ3RrLkNBTl9ERUZBVUxUKQorICAgICAgICBzZWxmLmJ1dHRvbi5ncmFiX2ZvY3VzKCkKKyAgICAgICAgc2VsZi5idXR0b24uc2hvdygpCisgICAgICAgIHZib3ggPSBndGsuVkJveChGYWxzZSwgMCkKKyAgICAgICAgdmJveC5zaG93KCkKKyAgICAgICAgdmJveC5wYWNrX3N0YXJ0KHNlbGYuYnV0dG9uLCBGYWxzZSwgRmFsc2UsIDApCisgICAgICAgIGlmIF9fYnV0dG9uX3JpZ2h0OgorICAgICAgICAgICAgaGJveC5wYWNrX2VuZCh2Ym94LCBUcnVlLCBUcnVlLCAwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaGJveC5wYWNrX3N0YXJ0KHZib3gsIFRydWUsIFRydWUsIDApCisKKyAgICAgICAgc2VsZi5zZXRfZGVmYXVsdChzZWxmLmJ1dHRvbikKKworICAgICAgICBiaW4gPSBndGsuSEJveChUcnVlLCA2KQorICAgICAgICBiaW4uc2V0X2JvcmRlcl93aWR0aCg2KQorICAgICAgICBiaW4uc2hvdygpCisgICAgICAgIHNlbGYubGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBzZWxmLmxhYmVsLnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgIyBXZSB3YW50IHRvIG1hdGNoIHRoZSBjb2xvdXJzIG9mIHRoZSBub3JtYWwgdG9vbHRpcHMsIGFzIGRpY3RhdGVkIGJ5CisgICAgICAgICMgdGhlIHVzZXJzIGd0aystMi4wIHRoZW1lLCB3aGVyZXZlciBwb3NzaWJsZSAtIG9uIHNvbWUgc3lzdGVtcyB0aGlzCisgICAgICAgICMgcmVxdWlyZXMgZXhwbGljaXRseSBzZXR0aW5nIGEgZmdfY29sb3IgZm9yIHRoZSBsYWJlbCB3aGljaCBtYXRjaGVzIHRoZQorICAgICAgICAjIHRvb2x0aXBfZmdfY29sb3IKKyAgICAgICAgc2V0dGluZ3MgPSBndGsuc2V0dGluZ3NfZ2V0X2RlZmF1bHQoKQorICAgICAgICBjb2xvdXJzID0gc2V0dGluZ3MuZ2V0X3Byb3BlcnR5KCdndGstY29sb3Itc2NoZW1lJykuc3BsaXQoJ1xuJykKKyAgICAgICAgIyByZW1vdmUgYW55IGVtcHR5IGxpbmVzLCB0aGVyZSdzIGxpa2VseSB0byBiZSBhIHRyYWlsaW5nIG9uZSBhZnRlcgorICAgICAgICAjIGNhbGxpbmcgc3BsaXQgb24gYSBkaWN0aW9uYXJ5LWxpa2Ugc3RyaW5nCisgICAgICAgIGNvbG91cnMgPSBmaWx0ZXIoTm9uZSwgY29sb3VycykKKyAgICAgICAgZm9yIGNvbCBpbiBjb2xvdXJzOgorICAgICAgICAgICAgaXRlbSwgdmFsID0gY29sLnNwbGl0KCc6ICcpCisgICAgICAgICAgICBpZiBpdGVtID09ICd0b29sdGlwX2ZnX2NvbG9yJzoKKyAgICAgICAgICAgICAgICBzdHlsZSA9IHNlbGYubGFiZWwuZ2V0X3N0eWxlKCkKKyAgICAgICAgICAgICAgICBzdHlsZS5mZ1tndGsuU1RBVEVfTk9STUFMXSA9IGd0ay5nZGsuY29sb3JfcGFyc2UodmFsKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWwuc2V0X3N0eWxlKHN0eWxlKQorICAgICAgICAgICAgICAgIGJyZWFrICMgd2Ugb25seSBjYXJlIGZvciB0aGUgdG9vbHRpcF9mZ19jb2xvcgorCisgICAgICAgIHNlbGYubGFiZWwuc2V0X21hcmt1cChtYXJrdXApCisgICAgICAgIHNlbGYubGFiZWwuc2hvdygpCisgICAgICAgIGJpbi5hZGQoc2VsZi5sYWJlbCkKKyAgICAgICAgaGJveC5wYWNrX2VuZChiaW4sIFRydWUsIFRydWUsIDYpCisKKyAgICAgICAgIyBhZGQgdGhlIG9yaWdpbmFsIFVSTCBkaXNwbGF5IGZvciB1c2VyIHJlZmVyZW5jZQorICAgICAgICBpZiAnYSBocmVmJyBpbiBtYXJrdXA6CisgICAgICAgICAgICBoYm94LnNldF90b29sdGlwX3RleHQoc2VsZi5nZXRfbWFya3VwX3VybChtYXJrdXApKQorICAgICAgICBoYm94LnNob3coKQorCisgICAgICAgIHNlbGYuY29ubmVjdCgia2V5LXByZXNzLWV2ZW50Iiwgc2VsZi5fY2F0Y2hfZXNjX2NiKQorCisgICAgIiIiCisgICAgQ2FsbGJhY2sgd2hlbiB0aGUgUGVyc2lzdGVudFRvb2x0aXAncyBjbG9zZSBidXR0b24gaXMgY2xpY2tlZC4KKyAgICBIaWRlcyB0aGUgUGVyc2lzdGVudFRvb2x0aXAuCisgICAgIiIiCisgICAgZGVmIF9kaXNtaXNzX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGYuaGlkZSgpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAiIiIKKyAgICBDYWxsYmFjayB3aGVuIHRoZSBFc2Mga2V5IGlzIGRldGVjdGVkLiBIaWRlcyB0aGUgUGVyc2lzdGVudFRvb2x0aXAuCisgICAgIiIiCisgICAgZGVmIF9jYXRjaF9lc2NfY2Ioc2VsZiwgd2lkZ2V0LCBldmVudCk6CisgICAgICAgIGtleW5hbWUgPSBndGsuZ2RrLmtleXZhbF9uYW1lKGV2ZW50LmtleXZhbCkKKyAgICAgICAgaWYga2V5bmFtZSA9PSAiRXNjYXBlIjoKKyAgICAgICAgICAgIHNlbGYuaGlkZSgpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAiIiIKKyAgICBDYWxsZWQgdG8gcHJlc2VudCB0aGUgUGVyc2lzdGVudFRvb2x0aXAuCisgICAgT3ZlcnJpZGVzIHRoZSBzdXBlcmNsYXNzZXMgc2hvdygpIG1ldGhvZCB0byBpbmNsdWRlIHN0YXRlIHRyYWNraW5nLgorICAgICIiIgorICAgIGRlZiBzaG93KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5zaG93bjoKKyAgICAgICAgICAgIHNlbGYuc2hvd24gPSBUcnVlCisgICAgICAgICAgICBndGsuV2luZG93LnNob3coc2VsZikKKworICAgICIiIgorICAgIENhbGxlZCB0byBoaWRlIHRoZSBQZXJzaXN0ZW50VG9vbHRpcC4KKyAgICBPdmVycmlkZXMgdGhlIHN1cGVyY2xhc3NlcyBoaWRlKCkgbWV0aG9kIHRvIGluY2x1ZGUgc3RhdGUgdHJhY2tpbmcuCisgICAgIiIiCisgICAgZGVmIGhpZGUoc2VsZik6CisgICAgICAgIHNlbGYuc2hvd24gPSBGYWxzZQorICAgICAgICBndGsuV2luZG93LmhpZGUoc2VsZikKKworICAgICIiIgorICAgIENhbGxlZCB0byBnZXQgdGhlIGh5cGVybGluayBVUkwgZnJvbSBtYXJrdXAgdGV4dC4KKyAgICAiIiIKKyAgICBkZWYgZ2V0X21hcmt1cF91cmwoc2VsZiwgbWFya3VwKToKKyAgICAgICAgdXJsID0gImh0dHA6IgorICAgICAgICBpZiBtYXJrdXAgYW5kIHR5cGUobWFya3VwKSA9PSBzdHI6CisgICAgICAgICAgICBzID0gbWFya3VwCisgICAgICAgICAgICBpZiAnaHR0cDonIGluIHM6CisgICAgICAgICAgICAgICAgaW1wb3J0IHJlCisgICAgICAgICAgICAgICAgdXJsID0gcmUuc2VhcmNoKCcoaHR0cDpbXixcXCAiXSspJywgcykuZ3JvdXAoMCkKKworICAgICAgICByZXR1cm4gdXJsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wcm9ncmVzcy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3Byb2dyZXNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMjhhMTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wcm9ncmVzcy5weQpAQCAtMCwwICsxLDIzIEBACitpbXBvcnQgZ3RrCisKK2NsYXNzIFByb2dyZXNzQmFyKGd0ay5EaWFsb2cpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQpOgorCisgICAgICAgIGd0ay5EaWFsb2cuX19pbml0X18oc2VsZiwgZmxhZ3M9KGd0ay5ESUFMT0dfTU9EQUwgfCBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQpKQorICAgICAgICBzZWxmLnNldF90aXRsZSgiUGFyc2luZyBtZXRhZGF0YSwgcGxlYXNlIHdhaXQuLi4iKQorICAgICAgICBzZWxmLnNldF9kZWZhdWx0X3NpemUoNTAwLCAwKQorICAgICAgICBzZWxmLnNldF90cmFuc2llbnRfZm9yKHBhcmVudCkKKyAgICAgICAgc2VsZi5wcm9ncmVzcyA9IGd0ay5Qcm9ncmVzc0JhcigpCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYucHJvZ3Jlc3MpCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorCisgICAgZGVmIHNldF90ZXh0KHNlbGYsIG1zZyk6CisgICAgICAgIHNlbGYucHJvZ3Jlc3Muc2V0X3RleHQobXNnKQorCisgICAgZGVmIHVwZGF0ZShzZWxmLCB4LCB5KToKKyAgICAgICAgc2VsZi5wcm9ncmVzcy5zZXRfZnJhY3Rpb24oZmxvYXQoeCkvZmxvYXQoeSkpCisgICAgICAgIHNlbGYucHJvZ3Jlc3Muc2V0X3RleHQoIiUyZCAlJSIgJSAoeCoxMDAveSkpCisKKyAgICBkZWYgcHVsc2Uoc2VsZik6CisgICAgICAgIHNlbGYucHJvZ3Jlc3Muc2V0X3RleHQoIkxvYWRpbmcuLi4iKQorICAgICAgICBzZWxmLnByb2dyZXNzLnB1bHNlKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3Byb2dyZXNzYmFyLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcHJvZ3Jlc3NiYXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UyYzY2MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3Byb2dyZXNzYmFyLnB5CkBAIC0wLDAgKzEsNTkgQEAKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMSAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCitmcm9tIGJiLnVpLmNydW1icy5ob2Jjb2xvciBpbXBvcnQgSG9iQ29sb3JzCisKK2NsYXNzIEhvYlByb2dyZXNzQmFyIChndGsuUHJvZ3Jlc3NCYXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgZ3RrLlByb2dyZXNzQmFyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuc2V0X3Jjc3R5bGUoVHJ1ZSkKKyAgICAgICAgc2VsZi5wZXJjZW50YWdlID0gMAorCisgICAgZGVmIHNldF9yY3N0eWxlKHNlbGYsIHN0YXR1cyk6CisgICAgICAgIHJjc3R5bGUgPSBndGsuUmNTdHlsZSgpCisgICAgICAgIHJjc3R5bGUuZmdbMl0gPSBndGsuZ2RrLkNvbG9yKEhvYkNvbG9ycy5CTEFDSykKKyAgICAgICAgaWYgc3RhdHVzID09ICJzdG9wIjoKKyAgICAgICAgICAgIHJjc3R5bGUuYmdbM10gPSBndGsuZ2RrLkNvbG9yKEhvYkNvbG9ycy5XQVJOSU5HKQorICAgICAgICBlbGlmIHN0YXR1cyA9PSAiZmFpbCI6CisgICAgICAgICAgICByY3N0eWxlLmJnWzNdID0gZ3RrLmdkay5Db2xvcihIb2JDb2xvcnMuRVJST1IpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByY3N0eWxlLmJnWzNdID0gZ3RrLmdkay5Db2xvcihIb2JDb2xvcnMuUlVOTklORykKKyAgICAgICAgc2VsZi5tb2RpZnlfc3R5bGUocmNzdHlsZSkKKworICAgIGRlZiBzZXRfdGl0bGUoc2VsZiwgdGV4dD1Ob25lKToKKyAgICAgICAgaWYgbm90IHRleHQ6CisgICAgICAgICAgICB0ZXh0ID0gIiIKKyAgICAgICAgdGV4dCArPSAiICUuMGYlJSIgJSBzZWxmLnBlcmNlbnRhZ2UKKyAgICAgICAgc2VsZi5zZXRfdGV4dCh0ZXh0KQorCisgICAgZGVmIHNldF9zdG9wX3RpdGxlKHNlbGYsIHRleHQ9Tm9uZSk6CisJaWYgbm90IHRleHQ6CisJICAgIHRleHQgPSAiIgorCXNlbGYuc2V0X3RleHQodGV4dCkKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgc2VsZi5zZXRfZnJhY3Rpb24oMCkKKyAgICAgICAgc2VsZi5zZXRfdGV4dCgiIikKKyAgICAgICAgc2VsZi5zZXRfcmNzdHlsZShUcnVlKQorICAgICAgICBzZWxmLnBlcmNlbnRhZ2UgPSAwCisKKyAgICBkZWYgdXBkYXRlKHNlbGYsIGZyYWN0aW9uKToKKyAgICAgICAgc2VsZi5wZXJjZW50YWdlID0gaW50KGZyYWN0aW9uICogMTAwKQorICAgICAgICBzZWxmLnNldF9mcmFjdGlvbihmcmFjdGlvbikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3B1Y2Noby5nbGFkZSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3B1Y2Noby5nbGFkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzU1M2E2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcHVjY2hvLmdsYWRlCkBAIC0wLDAgKzEsNjA2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzwhRE9DVFlQRSBnbGFkZS1pbnRlcmZhY2UgU1lTVEVNICJnbGFkZS0yLjAuZHRkIj4KKzwhLS1HZW5lcmF0ZWQgd2l0aCBnbGFkZTMgMy40LjUgb24gTW9uIE5vdiAxMCAxMjoyNDoxMiAyMDA4IC0tPgorPGdsYWRlLWludGVyZmFjZT4KKyAgPHdpZGdldCBjbGFzcz0iR3RrRGlhbG9nIiBpZD0iYnVpbGRfZGlhbG9nIj4KKyAgICA8cHJvcGVydHkgbmFtZT0idGl0bGUiIHRyYW5zbGF0YWJsZT0ieWVzIj5TdGFydCBhIGJ1aWxkPC9wcm9wZXJ0eT4KKyAgICA8cHJvcGVydHkgbmFtZT0id2luZG93X3Bvc2l0aW9uIj5HVEtfV0lOX1BPU19DRU5URVJfT05fUEFSRU5UPC9wcm9wZXJ0eT4KKyAgICA8cHJvcGVydHkgbmFtZT0idHlwZV9oaW50Ij5HREtfV0lORE9XX1RZUEVfSElOVF9ESUFMT0c8L3Byb3BlcnR5PgorICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNfc2VwYXJhdG9yIj5GYWxzZTwvcHJvcGVydHk+CisgICAgPGNoaWxkIGludGVybmFsLWNoaWxkPSJ2Ym94Ij4KKyAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1ZCb3giIGlkPSJkaWFsb2ctdmJveDEiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzcGFjaW5nIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgPGNoaWxkPgorICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1RhYmxlIiBpZD0iYnVpbGRfdGFibGUiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvcmRlcl93aWR0aCI+NjwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibl9yb3dzIj43PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJuX2NvbHVtbnMiPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNvbHVtbl9zcGFjaW5nIj41PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyb3dfc3BhY2luZyI+NjwvcHJvcGVydHk+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0FsaWdubWVudCIgaWQ9InN0YXR1c19hbGlnbm1lbnQiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9wYWRkaW5nIj4xMjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrSEJveCIgaWQ9InN0YXR1c19oYm94Ij4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNwYWNpbmciPjY8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2UiIGlkPSJzdGF0dXNfaW1hZ2UiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5vX3Nob3dfYWxsIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InN0b2NrIj5ndGstZGlhbG9nLWVycm9yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJmaWxsIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrTGFiZWwiIGlkPSJzdGF0dXNfbGFiZWwiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5JZiB5b3Ugc2VlIHRoaXMgdGV4dCBzb21ldGhpbmcgaXMgd3JvbmcuLi48L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV9tYXJrdXAiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InBvc2l0aW9uIj4xPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrTGFiZWwiIGlkPSJsYWJlbDIiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj4mbHQ7YiZndDtCdWlsZCBjb25maWd1cmF0aW9uJmx0Oy9iJmd0OzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV9tYXJrdXAiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj40PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtDb21ib0JveCIgaWQ9ImltYWdlX2NvbWJvIj4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNlbnNpdGl2ZSI+RmFsc2U8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfYXR0YWNoIj4xPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+NjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjc8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0xhYmVsIiBpZD0iaW1hZ2VfbGFiZWwiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2Vuc2l0aXZlIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjEyPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5JbWFnZTo8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjY8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj43PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtDb21ib0JveCIgaWQ9ImRpc3RyaWJ1dGlvbl9jb21ibyI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzZW5zaXRpdmUiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsZWZ0X2F0dGFjaCI+MTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj42PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtMYWJlbCIgaWQ9ImRpc3RyaWJ1dGlvbl9sYWJlbCI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzZW5zaXRpdmUiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieHBhZCI+MTI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkRpc3RyaWJ1dGlvbjo8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj42PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtDb21ib0JveCIgaWQ9Im1hY2hpbmVfY29tYm8iPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2Vuc2l0aXZlIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9hdHRhY2giPjE8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj40PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrTGFiZWwiIGlkPSJtYWNoaW5lX2xhYmVsIj4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNlbnNpdGl2ZSI+RmFsc2U8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4xMjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+TWFjaGluZTo8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjQ8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj41PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtCdXR0b24iIGlkPSJyZWZyZXNoX2J1dHRvbiI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzZW5zaXRpdmUiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVjZWl2ZXNfZGVmYXVsdCI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+Z3RrLXJlZnJlc2g8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2Vfc3RvY2siPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXNwb25zZV9pZCI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9hdHRhY2giPjI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj4xPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+MjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrRW50cnkiIGlkPSJsb2NhdGlvbl9lbnRyeSI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ3aWR0aF9jaGFycyI+MzI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfYXR0YWNoIj4xPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+MTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0xhYmVsIiBpZD0ibGFiZWwzIj4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjEyPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5Mb2NhdGlvbjo8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjE8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtMYWJlbCIgaWQ9ImxhYmVsMSI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPiZsdDtiJmd0O1JlcG9zaXRvcnkmbHQ7L2ImZ3Q7PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX21hcmt1cCI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtBbGlnbm1lbnQiIGlkPSJhbGlnbm1lbnQxIj4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICAgICAgPHBsYWNlaG9sZGVyLz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfYXR0YWNoIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+NDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0FsaWdubWVudCIgaWQ9ImFsaWdubWVudDIiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICA8cGxhY2Vob2xkZXIvPgorICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9hdHRhY2giPjI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj41PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQWxpZ25tZW50IiBpZD0iYWxpZ25tZW50MyI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgICAgIDxwbGFjZWhvbGRlci8+CisgICAgICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsZWZ0X2F0dGFjaCI+MjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjY8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj43PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InBvc2l0aW9uIj4xPC9wcm9wZXJ0eT4KKyAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgIDwvY2hpbGQ+CisgICAgICAgIDxjaGlsZCBpbnRlcm5hbC1jaGlsZD0iYWN0aW9uX2FyZWEiPgorICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0hCdXR0b25Cb3giIGlkPSJkaWFsb2ctYWN0aW9uX2FyZWExIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYXlvdXRfc3R5bGUiPkdUS19CVVRUT05CT1hfRU5EPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHBsYWNlaG9sZGVyLz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDxwbGFjZWhvbGRlci8+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8cGxhY2Vob2xkZXIvPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwYWNrX3R5cGUiPkdUS19QQUNLX0VORDwvcHJvcGVydHk+CisgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICA8L2NoaWxkPgorICAgICAgPC93aWRnZXQ+CisgICAgPC9jaGlsZD4KKyAgPC93aWRnZXQ+CisgIDx3aWRnZXQgY2xhc3M9Ikd0a0RpYWxvZyIgaWQ9ImRpYWxvZzIiPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJ3aW5kb3dfcG9zaXRpb24iPkdUS19XSU5fUE9TX0NFTlRFUl9PTl9QQVJFTlQ8L3Byb3BlcnR5PgorICAgIDxwcm9wZXJ0eSBuYW1lPSJ0eXBlX2hpbnQiPkdES19XSU5ET1dfVFlQRV9ISU5UX0RJQUxPRzwvcHJvcGVydHk+CisgICAgPHByb3BlcnR5IG5hbWU9Imhhc19zZXBhcmF0b3IiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICA8Y2hpbGQgaW50ZXJuYWwtY2hpbGQ9InZib3giPgorICAgICAgPHdpZGdldCBjbGFzcz0iR3RrVkJveCIgaWQ9ImRpYWxvZy12Ym94MiI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InNwYWNpbmciPjI8L3Byb3BlcnR5PgorICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrVGFibGUiIGlkPSJ0YWJsZTIiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvcmRlcl93aWR0aCI+NjwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibl9yb3dzIj43PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJuX2NvbHVtbnMiPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNvbHVtbl9zcGFjaW5nIj42PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyb3dfc3BhY2luZyI+NjwvcHJvcGVydHk+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0xhYmVsIiBpZD0ibGFiZWw3Ij4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+Jmx0O2ImZ3Q7UmVwb3NpdG9yaWVzJmx0Oy9iJmd0OzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV9tYXJrdXAiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQWxpZ25tZW50IiBpZD0iYWxpZ25tZW50NCI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsZWZ0X3BhZGRpbmciPjEyPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtTY3JvbGxlZFdpbmRvdyIgaWQ9InNjcm9sbGVkd2luZG93MSI+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoc2Nyb2xsYmFyX3BvbGljeSI+R1RLX1BPTElDWV9BVVRPTUFUSUM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idnNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1RyZWVWaWV3IiBpZD0idHJlZXZpZXcxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImhlYWRlcnNfY2xpY2thYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+MjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0VudHJ5IiBpZD0iZW50cnkxIj4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9hdHRhY2giPjE8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj4xPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+MjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrTGFiZWwiIGlkPSJsYWJlbDkiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj4mbHQ7YiZndDtBZGRpdGlvbmFsIHBhY2thZ2VzJmx0Oy9iJmd0OzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV9tYXJrdXAiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjQ8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj41PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtBbGlnbm1lbnQiIGlkPSJhbGlnbm1lbnQ2Ij4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhzY2FsZSI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrTGFiZWwiIGlkPSJsYWJlbDgiPgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieWFsaWduIj4wPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjEyPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+TG9jYXRpb246IDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjE8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtBbGlnbm1lbnQiIGlkPSJhbGlnbm1lbnQ3Ij4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhzY2FsZSI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrSEJ1dHRvbkJveCIgaWQ9ImhidXR0b25ib3gxIj4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic3BhY2luZyI+NTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtCdXR0b24iIGlkPSJidXR0b243Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJlY2VpdmVzX2RlZmF1bHQiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+Z3RrLXJlbW92ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3N0b2NrIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXNwb25zZV9pZCI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtCdXR0b24iIGlkPSJidXR0b242Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJlY2VpdmVzX2RlZmF1bHQiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+Z3RrLWVkaXQ8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV9zdG9jayI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVzcG9uc2VfaWQiPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InBvc2l0aW9uIj4xPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtCdXR0b24iIGlkPSJidXR0b241Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJlY2VpdmVzX2RlZmF1bHQiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+Z3RrLWFkZDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3N0b2NrIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXNwb25zZV9pZCI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icG9zaXRpb24iPjI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9hdHRhY2giPjE8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQWxpZ25tZW50IiBpZD0iYWxpZ25tZW50NSI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgICAgIDxwbGFjZWhvbGRlci8+CisgICAgICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrTGFiZWwiIGlkPSJsYWJlbDEwIj4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InlhbGlnbiI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjEyPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5TZWFyY2g6PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj41PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrRW50cnkiIGlkPSJlbnRyeTIiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsZWZ0X2F0dGFjaCI+MTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj42PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtBbGlnbm1lbnQiIGlkPSJhbGlnbm1lbnQ4Ij4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfcGFkZGluZyI+MTI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1Njcm9sbGVkV2luZG93IiBpZD0ic2Nyb2xsZWR3aW5kb3cyIj4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImhzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX0FVVE9NQVRJQzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2c2Nyb2xsYmFyX3BvbGljeSI+R1RLX1BPTElDWV9BVVRPTUFUSUM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrVHJlZVZpZXciIGlkPSJ0cmVldmlldzIiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGVhZGVyc19jbGlja2FibGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj42PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwb3NpdGlvbiI+MTwvcHJvcGVydHk+CisgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICA8L2NoaWxkPgorICAgICAgICA8Y2hpbGQgaW50ZXJuYWwtY2hpbGQ9ImFjdGlvbl9hcmVhIj4KKyAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtIQnV0dG9uQm94IiBpZD0iZGlhbG9nLWFjdGlvbl9hcmVhMiI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGF5b3V0X3N0eWxlIj5HVEtfQlVUVE9OQk9YX0VORDwvcHJvcGVydHk+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0J1dHRvbiIgaWQ9ImJ1dHRvbjQiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVjZWl2ZXNfZGVmYXVsdCI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+Z3RrLWNsb3NlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3N0b2NrIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVzcG9uc2VfaWQiPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icGFja190eXBlIj5HVEtfUEFDS19FTkQ8L3Byb3BlcnR5PgorICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgPC9jaGlsZD4KKyAgICAgIDwvd2lkZ2V0PgorICAgIDwvY2hpbGQ+CisgIDwvd2lkZ2V0PgorICA8d2lkZ2V0IGNsYXNzPSJHdGtXaW5kb3ciIGlkPSJtYWluX3dpbmRvdyI+CisgICAgPGNoaWxkPgorICAgICAgPHdpZGdldCBjbGFzcz0iR3RrVkJveCIgaWQ9Im1haW5fd2luZG93X3Zib3giPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtUb29sYmFyIiBpZD0ibWFpbl90b29sYmFyIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrVG9vbEJ1dHRvbiIgaWQ9Im1haW5fdG9vbGJ1dHRvbl9idWlsZCI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkJ1aWxkPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic3RvY2tfaWQiPmd0ay1leGVjdXRlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgIDwvY2hpbGQ+CisgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtWUGFuZWQiIGlkPSJ2cGFuZWQxIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtTY3JvbGxlZFdpbmRvdyIgaWQ9InJlc3VsdHNfc2Nyb2xsZWR3aW5kb3ciPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iaHNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idnNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICA8cGxhY2Vob2xkZXIvPgorICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVzaXplIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNocmluayI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1Njcm9sbGVkV2luZG93IiBpZD0icHJvZ3Jlc3Nfc2Nyb2xsZWR3aW5kb3ciPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iaHNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idnNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICA8cGxhY2Vob2xkZXIvPgorICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVzaXplIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2hyaW5rIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwb3NpdGlvbiI+MTwvcHJvcGVydHk+CisgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICA8L2NoaWxkPgorICAgICAgPC93aWRnZXQ+CisgICAgPC9jaGlsZD4KKyAgPC93aWRnZXQ+Cis8L2dsYWRlLWludGVyZmFjZT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3JlY2lwZXNlbGVjdGlvbnBhZ2UucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9yZWNpcGVzZWxlY3Rpb25wYWdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU4ZGI0M2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9yZWNpcGVzZWxlY3Rpb25wYWdlLnB5CkBAIC0wLDAgKzEsMzM1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMiAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCitpbXBvcnQgZ2xpYgorZnJvbSBiYi51aS5jcnVtYnMuaG9iY29sb3IgaW1wb3J0IEhvYkNvbG9ycworZnJvbSBiYi51aS5jcnVtYnMuaG9id2lkZ2V0IGltcG9ydCBIb2JWaWV3VGFibGUsIEhvYk5vdGVib29rLCBIb2JBbHRCdXR0b24sIEhvYkJ1dHRvbgorZnJvbSBiYi51aS5jcnVtYnMuaG9ibGlzdG1vZGVsIGltcG9ydCBSZWNpcGVMaXN0TW9kZWwKK2Zyb20gYmIudWkuY3J1bWJzLmhvYnBhZ2VzIGltcG9ydCBIb2JQYWdlCisKKyMKKyMgUmVjaXBlU2VsZWN0aW9uUGFnZQorIworY2xhc3MgUmVjaXBlU2VsZWN0aW9uUGFnZSAoSG9iUGFnZSk6CisgICAgcGFnZXMgPSBbCisgICAgICAgIHsKKyAgICAgICAgICduYW1lJyAgICAgIDogJ0luY2x1ZGVkIHJlY2lwZXMnLAorICAgICAgICAgJ3Rvb2x0aXAnICAgOiAnVGhlIHJlY2lwZXMgY3VycmVudGx5IGluY2x1ZGVkIGZvciB5b3VyIGltYWdlJywKKyAgICAgICAgICdmaWx0ZXInICAgIDogeyBSZWNpcGVMaXN0TW9kZWwuQ09MX0lOQyAgOiBbVHJ1ZV0sCisgICAgICAgICAgICAgICAgICAgICAgIFJlY2lwZUxpc3RNb2RlbC5DT0xfVFlQRSA6IFsncmVjaXBlJywgJ3BhY2thZ2Vncm91cCddIH0sCisgICAgICAgICAnc2VhcmNoJyAgICA6ICdTZWFyY2ggcmVjaXBlcyBieSBuYW1lJywKKyAgICAgICAgICdzZWFyY2h0aXAnIDogJ0VudGVyIGEgcmVjaXBlIG5hbWUgdG8gZmluZCBpdCcsCisgICAgICAgICAnY29sdW1ucycgICA6IFt7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnUmVjaXBlIG5hbWUnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3RleHQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogNDAwLAorICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kJyAgIDogJ1RydWUnCisgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ0dyb3VwJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9pZCcgICA6IFJlY2lwZUxpc3RNb2RlbC5DT0xfR1JPVVAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfc3R5bGUnOiAndGV4dCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiAzMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmQnICAgOiAnVHJ1ZScKKyAgICAgICAgICAgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnQnJvdWdodCBpbiBieSAoK290aGVycyknLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUmVjaXBlTGlzdE1vZGVsLkNPTF9CSU5CLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ2JpbmInLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogNTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kJyAgIDogJ1RydWUnCisgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ0luY2x1ZGVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9pZCcgICA6IFJlY2lwZUxpc3RNb2RlbC5DT0xfSU5DLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ2NoZWNrIHRvZ2dsZScsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiAxMDAKKyAgICAgICAgICAgICAgICAgICAgICB9XQorICAgICAgICB9LCB7CisgICAgICAgICAnbmFtZScgICAgICA6ICdBbGwgcmVjaXBlcycsCisgICAgICAgICAndG9vbHRpcCcgICA6ICdBbGwgcmVjaXBlcyBpbiB5b3VyIGNvbmZpZ3VyZWQgbGF5ZXJzJywKKyAgICAgICAgICdmaWx0ZXInICAgIDogeyBSZWNpcGVMaXN0TW9kZWwuQ09MX1RZUEUgOiBbJ3JlY2lwZSddIH0sCisgICAgICAgICAnc2VhcmNoJyAgICA6ICdTZWFyY2ggcmVjaXBlcyBieSBuYW1lJywKKyAgICAgICAgICdzZWFyY2h0aXAnIDogJ0VudGVyIGEgcmVjaXBlIG5hbWUgdG8gZmluZCBpdCcsCisgICAgICAgICAnY29sdW1ucycgICA6IFt7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnUmVjaXBlIG5hbWUnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3RleHQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogNDAwLAorICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kJyAgIDogJ1RydWUnCisgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ0dyb3VwJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9pZCcgICA6IFJlY2lwZUxpc3RNb2RlbC5DT0xfR1JPVVAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfc3R5bGUnOiAndGV4dCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiA0MDAsCisgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmQnICAgOiAnVHJ1ZScKKyAgICAgICAgICAgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnTGljZW5zZScsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBSZWNpcGVMaXN0TW9kZWwuQ09MX0xJQywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9zdHlsZSc6ICd0ZXh0JywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9taW4nICA6IDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9tYXgnICA6IDQwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZCcgICA6ICdUcnVlJworICAgICAgICAgICAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9uYW1lJyA6ICdJbmNsdWRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBSZWNpcGVMaXN0TW9kZWwuQ09MX0lOQywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9zdHlsZSc6ICdjaGVjayB0b2dnbGUnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogMTAwCisgICAgICAgICAgICAgICAgICAgICAgfV0KKyAgICAgICAgfSwgeworICAgICAgICAgJ25hbWUnICAgICAgOiAnUGFja2FnZSBHcm91cHMnLAorICAgICAgICAgJ3Rvb2x0aXAnICAgOiAnQWxsIHBhY2thZ2UgZ3JvdXBzIGluIHlvdXIgY29uZmlndXJlZCBsYXllcnMnLAorICAgICAgICAgJ2ZpbHRlcicgICAgOiB7IFJlY2lwZUxpc3RNb2RlbC5DT0xfVFlQRSA6IFsncGFja2FnZWdyb3VwJ10gfSwKKyAgICAgICAgICdzZWFyY2gnICAgIDogJ1NlYXJjaCBwYWNrYWdlIGdyb3VwcyBieSBuYW1lJywKKyAgICAgICAgICdzZWFyY2h0aXAnIDogJ0VudGVyIGEgcGFja2FnZSBncm91cCBuYW1lIHRvIGZpbmQgaXQnLAorICAgICAgICAgJ2NvbHVtbnMnICAgOiBbeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ1BhY2thZ2UgZ3JvdXAgbmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBSZWNpcGVMaXN0TW9kZWwuQ09MX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfc3R5bGUnOiAndGV4dCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiA0MDAsCisgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmQnICAgOiAnVHJ1ZScKKyAgICAgICAgICAgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnSW5jbHVkZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUmVjaXBlTGlzdE1vZGVsLkNPTF9JTkMsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfc3R5bGUnOiAnY2hlY2sgdG9nZ2xlJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9taW4nICA6IDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9tYXgnICA6IDEwMAorICAgICAgICAgICAgICAgICAgICAgIH1dCisgICAgICAgIH0KKyAgICBdCisgICAgCisgICAgKElOQ0xVREVELAorICAgICBBTEwsCisgICAgIFRBU0tTKSA9IHJhbmdlKDMpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnVpbGRlciA9IE5vbmUpOgorICAgICAgICBzdXBlcihSZWNpcGVTZWxlY3Rpb25QYWdlLCBzZWxmKS5fX2luaXRfXyhidWlsZGVyLCAiU3RlcCAxIG9mIDI6IEVkaXQgcmVjaXBlcyIpCisKKyAgICAgICAgIyBzZXQgaW52aXNpYmxlIG1lbWJlcnMKKyAgICAgICAgc2VsZi5yZWNpcGVfbW9kZWwgPSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsCisKKyAgICAgICAgIyBjcmVhdGUgdmlzdWFsIGVsZW1lbnRzCisgICAgICAgIHNlbGYuY3JlYXRlX3Zpc3VhbF9lbGVtZW50cygpCisKKyAgICBkZWYgaW5jbHVkZWRfY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmlucy5zZXRfY3VycmVudF9wYWdlKHNlbGYuSU5DTFVERUQpCisKKyAgICBkZWYgY3JlYXRlX3Zpc3VhbF9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5ldmVudGJveCA9IHNlbGYuYWRkX29udG9fdG9wX2JhcihOb25lLCA3MykKKyAgICAgICAgc2VsZi5wYWNrX3N0YXJ0KHNlbGYuZXZlbnRib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi5wYWNrX3N0YXJ0KHNlbGYuZ3JvdXBfYWxpZ24sIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgIyBzZXQgdmlzaWJsZSBtZW1iZXJzCisgICAgICAgIHNlbGYuaW5zID0gSG9iTm90ZWJvb2soKQorICAgICAgICBzZWxmLnRhYmxlcyA9IFtdICMgd2UgbmVlZCBtb2RpZnkgdGFibGUgd2hlbiB0aGUgZGlhbG9nIGlzIHNob3duCisKKyAgICAgICAgc2VhcmNoX25hbWVzID0gW10KKyAgICAgICAgc2VhcmNoX3RpcHMgPSBbXQorICAgICAgICAjIGFwcGVuZCB0aGUgdGFicyBpbiBvcmRlcgorICAgICAgICBmb3IgcGFnZSBpbiBzZWxmLnBhZ2VzOgorICAgICAgICAgICAgY29sdW1ucyA9IHBhZ2VbJ2NvbHVtbnMnXQorICAgICAgICAgICAgbmFtZSA9IHBhZ2VbJ25hbWUnXQorICAgICAgICAgICAgdGFiID0gSG9iVmlld1RhYmxlKGNvbHVtbnMsIG5hbWUpCisgICAgICAgICAgICBzZWFyY2hfbmFtZXMuYXBwZW5kKHBhZ2VbJ3NlYXJjaCddKQorICAgICAgICAgICAgc2VhcmNoX3RpcHMuYXBwZW5kKHBhZ2VbJ3NlYXJjaHRpcCddKQorICAgICAgICAgICAgZmlsdGVyID0gcGFnZVsnZmlsdGVyJ10KKyAgICAgICAgICAgIHNvcnRfbW9kZWwgPSBzZWxmLnJlY2lwZV9tb2RlbC50cmVlX21vZGVsKGZpbHRlciwgaW5pdGlhbD1UcnVlKQorICAgICAgICAgICAgdGFiLnNldF9tb2RlbChzb3J0X21vZGVsKQorICAgICAgICAgICAgdGFiLmNvbm5lY3QoInRvZ2dsZWQiLCBzZWxmLnRhYmxlX3RvZ2dsZWRfY2IsIG5hbWUpCisgICAgICAgICAgICB0YWIuY29ubmVjdCgiYnV0dG9uLXJlbGVhc2UtZXZlbnQiLCBzZWxmLmJ1dHRvbl9jbGlja19jYikKKyAgICAgICAgICAgIHRhYi5jb25uZWN0KCJjZWxsLWZhZGVpbm91dC1zdG9wcGVkIiwgc2VsZi5hZnRlcl9mYWRlb3V0X2NoZWNraW5faW5jbHVkZSwgZmlsdGVyKQorICAgICAgICAgICAgc2VsZi5pbnMuYXBwZW5kX3BhZ2UodGFiLCBwYWdlWyduYW1lJ10sIHBhZ2VbJ3Rvb2x0aXAnXSkKKyAgICAgICAgICAgIHNlbGYudGFibGVzLmFwcGVuZCh0YWIpCisKKyAgICAgICAgc2VsZi5pbnMuc2V0X2VudHJ5KHNlYXJjaF9uYW1lcywgc2VhcmNoX3RpcHMpCisgICAgICAgIHNlbGYuaW5zLnNlYXJjaC5jb25uZWN0KCJjaGFuZ2VkIiwgc2VsZi5zZWFyY2hfZW50cnlfY2hhbmdlZCkKKworICAgICAgICAjIGFkZCBhbGwgaW50byB0aGUgd2luZG93CisgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19zdGFydChzZWxmLmlucywgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICBidXR0b25fYm94ID0gZ3RrLkhCb3goRmFsc2UsIDYpCisgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19lbmQoYnV0dG9uX2JveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHNlbGYuYnVpbGRfcGFja2FnZXNfYnV0dG9uID0gSG9iQnV0dG9uKCdCdWlsZCBwYWNrYWdlcycpCisgICAgICAgICNzZWxmLmJ1aWxkX3BhY2thZ2VzX2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDIwNSwgNDkpCisgICAgICAgIHNlbGYuYnVpbGRfcGFja2FnZXNfYnV0dG9uLnNldF90b29sdGlwX3RleHQoIkJ1aWxkIHNlbGVjdGVkIHJlY2lwZXMgaW50byBwYWNrYWdlcyIpCisgICAgICAgIHNlbGYuYnVpbGRfcGFja2FnZXNfYnV0dG9uLnNldF9mbGFncyhndGsuQ0FOX0RFRkFVTFQpCisgICAgICAgIHNlbGYuYnVpbGRfcGFja2FnZXNfYnV0dG9uLmdyYWJfZGVmYXVsdCgpCisgICAgICAgIHNlbGYuYnVpbGRfcGFja2FnZXNfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmJ1aWxkX3BhY2thZ2VzX2NsaWNrZWRfY2IpCisgICAgICAgIGJ1dHRvbl9ib3gucGFja19lbmQoc2VsZi5idWlsZF9wYWNrYWdlc19idXR0b24sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBzZWxmLmJhY2tfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCdDYW5jZWwnKQorICAgICAgICBzZWxmLmJhY2tfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmJhY2tfYnV0dG9uX2NsaWNrZWRfY2IpCisgICAgICAgIGJ1dHRvbl9ib3gucGFja19lbmQoc2VsZi5iYWNrX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgZGVmIHNlYXJjaF9lbnRyeV9jaGFuZ2VkKHNlbGYsIGVudHJ5KToKKyAgICAgICAgdGV4dCA9IGVudHJ5LmdldF90ZXh0KCkKKyAgICAgICAgaWYgc2VsZi5pbnMuc2VhcmNoX2ZvY3VzOgorICAgICAgICAgICAgc2VsZi5pbnMuc2VhcmNoX2ZvY3VzID0gRmFsc2UKKyAgICAgICAgZWxpZiBzZWxmLmlucy5wYWdlX2NoYW5nZWQ6CisgICAgICAgICAgICBzZWxmLmlucy5wYWdlX2NoYW5nZSA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLmZpbHRlcl9zZWFyY2goZW50cnkpCisgICAgICAgIGVsaWYgdGV4dCBub3QgaW4gc2VsZi5pbnMuc2VhcmNoX25hbWVzOgorICAgICAgICAgICAgc2VsZi5maWx0ZXJfc2VhcmNoKGVudHJ5KQorCisgICAgZGVmIGZpbHRlcl9zZWFyY2goc2VsZiwgZW50cnkpOgorICAgICAgICB0ZXh0ID0gZW50cnkuZ2V0X3RleHQoKQorICAgICAgICBjdXJyZW50X3RhYiA9IHNlbGYuaW5zLmdldF9jdXJyZW50X3BhZ2UoKQorICAgICAgICBmaWx0ZXIgPSBzZWxmLnBhZ2VzW2N1cnJlbnRfdGFiXVsnZmlsdGVyJ10KKyAgICAgICAgZmlsdGVyW1JlY2lwZUxpc3RNb2RlbC5DT0xfTkFNRV0gPSB0ZXh0CisgICAgICAgIHNlbGYudGFibGVzW2N1cnJlbnRfdGFiXS5zZXRfbW9kZWwoc2VsZi5yZWNpcGVfbW9kZWwudHJlZV9tb2RlbChmaWx0ZXIsIHNlYXJjaF9kYXRhPXRleHQpKQorICAgICAgICBpZiBzZWxmLnJlY2lwZV9tb2RlbC5maWx0ZXJlZF9uYiA9PSAwOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikudG9wX2JhcjoKKyAgICAgICAgICAgICAgICBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLmFkZF9ub19yZXN1bHRfYmFyKGVudHJ5KQorICAgICAgICAgICAgICAgIHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikudG9wX2Jhci5zZXRfbm9fc2hvd19hbGwoVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikudG9wX2Jhci5zaG93KCkKKyAgICAgICAgICAgIHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikuc2Nyb2xsLmhpZGUoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2VsZi5pbnMuZ2V0X250aF9wYWdlKGN1cnJlbnRfdGFiKS50b3BfYmFyOgorICAgICAgICAgICAgICAgIHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikudG9wX2Jhci5oaWRlKCkKKyAgICAgICAgICAgIHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikuc2Nyb2xsLnNob3coKQorICAgICAgICBpZiBlbnRyeS5nZXRfdGV4dCgpID09ICcnOgorICAgICAgICAgICAgZW50cnkuc2V0X2ljb25fc2Vuc2l0aXZlKGd0ay5FTlRSWV9JQ09OX1NFQ09OREFSWSwgRmFsc2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbnRyeS5zZXRfaWNvbl9zZW5zaXRpdmUoZ3RrLkVOVFJZX0lDT05fU0VDT05EQVJZLCBUcnVlKQorCisgICAgZGVmIGJ1dHRvbl9jbGlja19jYihzZWxmLCB3aWRnZXQsIGV2ZW50KToKKyAgICAgICAgcGF0aCwgY29sID0gd2lkZ2V0LnRhYmxlX3RyZWUuZ2V0X2N1cnNvcigpCisgICAgICAgIHRyZWVfbW9kZWwgPSB3aWRnZXQudGFibGVfdHJlZS5nZXRfbW9kZWwoKQorICAgICAgICBpZiBwYXRoIGFuZCBjb2wuZ2V0X3RpdGxlKCkgIT0gJ0luY2x1ZGVkJzogIyBlbHNlIGFjdGl2YXRpb24gaXMgbGlrZWx5IGEgcmVtb3ZhbAorICAgICAgICAgICAgcHJvcGVydGllcyA9IHsnc3VtbWFyeSc6ICcnLCAnbmFtZSc6ICcnLCAndmVyc2lvbic6ICcnLCAncmV2aXNpb24nOiAnJywgJ2JpbmInOiAnJywgJ2dyb3VwJzogJycsICdsaWNlbnNlJzogJycsICdob21lcGFnZSc6ICcnLCAnYnVndHJhY2tlcic6ICcnLCAnZGVzY3JpcHRpb24nOiAnJ30KKyAgICAgICAgICAgIHByb3BlcnRpZXNbJ3N1bW1hcnknXSA9IHRyZWVfbW9kZWwuZ2V0X3ZhbHVlKHRyZWVfbW9kZWwuZ2V0X2l0ZXIocGF0aCksIFJlY2lwZUxpc3RNb2RlbC5DT0xfU1VNTUFSWSkKKyAgICAgICAgICAgIHByb3BlcnRpZXNbJ25hbWUnXSA9IHRyZWVfbW9kZWwuZ2V0X3ZhbHVlKHRyZWVfbW9kZWwuZ2V0X2l0ZXIocGF0aCksIFJlY2lwZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgIHByb3BlcnRpZXNbJ3ZlcnNpb24nXSA9IHRyZWVfbW9kZWwuZ2V0X3ZhbHVlKHRyZWVfbW9kZWwuZ2V0X2l0ZXIocGF0aCksIFJlY2lwZUxpc3RNb2RlbC5DT0xfVkVSU0lPTikKKyAgICAgICAgICAgIHByb3BlcnRpZXNbJ3JldmlzaW9uJ10gPSB0cmVlX21vZGVsLmdldF92YWx1ZSh0cmVlX21vZGVsLmdldF9pdGVyKHBhdGgpLCBSZWNpcGVMaXN0TW9kZWwuQ09MX1JFVklTSU9OKQorICAgICAgICAgICAgcHJvcGVydGllc1snYmluYiddID0gdHJlZV9tb2RlbC5nZXRfdmFsdWUodHJlZV9tb2RlbC5nZXRfaXRlcihwYXRoKSwgUmVjaXBlTGlzdE1vZGVsLkNPTF9CSU5CKQorICAgICAgICAgICAgcHJvcGVydGllc1snZ3JvdXAnXSA9IHRyZWVfbW9kZWwuZ2V0X3ZhbHVlKHRyZWVfbW9kZWwuZ2V0X2l0ZXIocGF0aCksIFJlY2lwZUxpc3RNb2RlbC5DT0xfR1JPVVApCisgICAgICAgICAgICBwcm9wZXJ0aWVzWydsaWNlbnNlJ10gPSB0cmVlX21vZGVsLmdldF92YWx1ZSh0cmVlX21vZGVsLmdldF9pdGVyKHBhdGgpLCBSZWNpcGVMaXN0TW9kZWwuQ09MX0xJQykKKyAgICAgICAgICAgIHByb3BlcnRpZXNbJ2hvbWVwYWdlJ10gPSB0cmVlX21vZGVsLmdldF92YWx1ZSh0cmVlX21vZGVsLmdldF9pdGVyKHBhdGgpLCBSZWNpcGVMaXN0TW9kZWwuQ09MX0hPTUVQQUdFKQorICAgICAgICAgICAgcHJvcGVydGllc1snYnVndHJhY2tlciddID0gdHJlZV9tb2RlbC5nZXRfdmFsdWUodHJlZV9tb2RlbC5nZXRfaXRlcihwYXRoKSwgUmVjaXBlTGlzdE1vZGVsLkNPTF9CVUdUUkFDS0VSKQorICAgICAgICAgICAgcHJvcGVydGllc1snZGVzY3JpcHRpb24nXSA9IHRyZWVfbW9kZWwuZ2V0X3ZhbHVlKHRyZWVfbW9kZWwuZ2V0X2l0ZXIocGF0aCksIFJlY2lwZUxpc3RNb2RlbC5DT0xfREVTQykKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5zaG93X3JlY2lwZV9wcm9wZXJ0eV9kaWFsb2cocHJvcGVydGllcykKKworICAgIGRlZiBidWlsZF9wYWNrYWdlc19jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGYucmVmcmVzaF90YWJsZXMoKQorICAgICAgICBzZWxmLmJ1aWxkZXIuYnVpbGRfcGFja2FnZXMoKQorCisgICAgZGVmIHJlZnJlc2hfdGFibGVzKHNlbGYpOgorICAgICAgICBzZWxmLmlucy5yZXNldF9lbnRyeShzZWxmLmlucy5zZWFyY2gsIDApCisgICAgICAgIGZvciB0YWIgaW4gc2VsZi50YWJsZXM6CisgICAgICAgICAgICBpbmRleCA9IHNlbGYudGFibGVzLmluZGV4KHRhYikKKyAgICAgICAgICAgIGZpbHRlciA9IHNlbGYucGFnZXNbaW5kZXhdWydmaWx0ZXInXQorICAgICAgICAgICAgdGFiLnNldF9tb2RlbChzZWxmLnJlY2lwZV9tb2RlbC50cmVlX21vZGVsKGZpbHRlciwgc2VhcmNoX2RhdGE9IiIsIGluaXRpYWw9VHJ1ZSkpCisKKyAgICBkZWYgYmFja19idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLnNldF9zZWxlY3RlZF9pbWFnZShzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5pbml0aWFsX3NlbGVjdGVkX2ltYWdlKQorICAgICAgICBzZWxmLmJ1aWxkZXIuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnVwZGF0ZV9pbWFnZV9jb21ibyhzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLCBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5pbml0aWFsX3NlbGVjdGVkX2ltYWdlKQorICAgICAgICBzZWxmLmJ1aWxkZXIuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnVwZGF0ZV9pbWFnZV9kZXNjKCkKKyAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfY29uZmlndXJhdGlvbigpCisgICAgICAgIHNlbGYucmVmcmVzaF90YWJsZXMoKQorCisgICAgZGVmIHJlZnJlc2hfc2VsZWN0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9pbWFnZSA9IHNlbGYucmVjaXBlX21vZGVsLmdldF9zZWxlY3RlZF9pbWFnZSgpCisgICAgICAgIF8sIHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLnNlbGVjdGVkX3JlY2lwZXMgPSBzZWxmLnJlY2lwZV9tb2RlbC5nZXRfc2VsZWN0ZWRfcmVjaXBlcygpCisgICAgICAgIHNlbGYuaW5zLnNob3dfaW5kaWNhdG9yX2ljb24oIkluY2x1ZGVkIHJlY2lwZXMiLCBsZW4oc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfcmVjaXBlcykpCisKKyAgICBkZWYgdG9nZ2xlX2l0ZW1faWRsZV9jYihzZWxmLCBwYXRoLCB2aWV3X3RyZWUsIGNlbGwsIHBhZ2VuYW1lKToKKyAgICAgICAgaWYgbm90IHNlbGYucmVjaXBlX21vZGVsLnBhdGhfaW5jbHVkZWQocGF0aCk6CisgICAgICAgICAgICBzZWxmLnJlY2lwZV9tb2RlbC5pbmNsdWRlX2l0ZW0oaXRlbV9wYXRoPXBhdGgsIGJpbmI9IlVzZXIgU2VsZWN0ZWQiLCBpbWFnZV9jb250ZW50cz1GYWxzZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucHJlX2ZhZGVvdXRfY2hlY2tvdXRfaW5jbHVkZSh2aWV3X3RyZWUsIHBhZ2VuYW1lKQorICAgICAgICAgICAgc2VsZi5yZWNpcGVfbW9kZWwuZXhjbHVkZV9pdGVtKGl0ZW1fcGF0aD1wYXRoKQorICAgICAgICAgICAgc2VsZi5yZW5kZXJfZmFkZW91dCh2aWV3X3RyZWUsIGNlbGwpCisKKyAgICAgICAgc2VsZi5yZWZyZXNoX3NlbGVjdGlvbigpCisgICAgICAgIGlmIG5vdCBzZWxmLmJ1aWxkZXIuY3VzdG9taXplZDoKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5jdXN0b21pemVkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfaW1hZ2UgPSBzZWxmLnJlY2lwZV9tb2RlbC5fX2N1c3RvbV9pbWFnZV9fCisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIucmNwcGtnbGlzdF9wb3B1bGF0ZWQoKQorCisgICAgICAgIHNlbGYuYnVpbGRlci53aW5kb3dfc2Vuc2l0aXZlKFRydWUpCisKKyAgICAgICAgdmlld19tb2RlbCA9IHZpZXdfdHJlZS5nZXRfbW9kZWwoKQorICAgICAgICB2cGF0aCA9IHNlbGYucmVjaXBlX21vZGVsLmNvbnZlcnRfcGF0aF90b192cGF0aCh2aWV3X21vZGVsLCBwYXRoKQorICAgICAgICB2aWV3X3RyZWUuc2V0X2N1cnNvcih2cGF0aCkKKworICAgIGRlZiB0YWJsZV90b2dnbGVkX2NiKHNlbGYsIHRhYmxlLCBjZWxsLCB2aWV3X3BhdGgsIHRvZ2dsZWRfY29sdW1uaWQsIHZpZXdfdHJlZSwgcGFnZW5hbWUpOgorICAgICAgICAjIENsaWNrIHRvIGluY2x1ZGUgYSByZWNpcGUKKyAgICAgICAgc2VsZi5idWlsZGVyLndpbmRvd19zZW5zaXRpdmUoRmFsc2UpCisgICAgICAgIHZpZXdfbW9kZWwgPSB2aWV3X3RyZWUuZ2V0X21vZGVsKCkKKyAgICAgICAgcGF0aCA9IHNlbGYucmVjaXBlX21vZGVsLmNvbnZlcnRfdnBhdGhfdG9fcGF0aCh2aWV3X21vZGVsLCB2aWV3X3BhdGgpCisgICAgICAgIGdsaWIuaWRsZV9hZGQoc2VsZi50b2dnbGVfaXRlbV9pZGxlX2NiLCBwYXRoLCB2aWV3X3RyZWUsIGNlbGwsIHBhZ2VuYW1lKQorCisgICAgZGVmIHByZV9mYWRlb3V0X2NoZWNrb3V0X2luY2x1ZGUoc2VsZiwgdHJlZSwgcGFnZW5hbWUpOgorICAgICAgICAjYWZ0ZXIgdGhlIGZhZGVvdXQgdGhlIHRhYmxlIHdpbGwgYmUgc29ydGVkIGFzIGJlZm9yZQorICAgICAgICBzZWxmLnNvcnRfY29sdW1uX2lkID0gc2VsZi5yZWNpcGVfbW9kZWwuc29ydF9jb2x1bW5faWQKKyAgICAgICAgc2VsZi5zb3J0X29yZGVyID0gc2VsZi5yZWNpcGVfbW9kZWwuc29ydF9vcmRlcgorCisgICAgICAgICNyZXN5bmMgdGhlIGluY2x1ZGVkIGl0ZW1zIHRvIGEgYmFja3VwIGZhZGUgaW5jbHVkZSBjb2x1bW4KKyAgICAgICAgaXQgPSBzZWxmLnJlY2lwZV9tb2RlbC5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgIHdoaWxlIGl0OgorICAgICAgICAgICAgYWN0aXZlID0gc2VsZi5yZWNpcGVfbW9kZWwuZ2V0X3ZhbHVlKGl0LCBzZWxmLnJlY2lwZV9tb2RlbC5DT0xfSU5DKQorICAgICAgICAgICAgc2VsZi5yZWNpcGVfbW9kZWwuc2V0KGl0LCBzZWxmLnJlY2lwZV9tb2RlbC5DT0xfRkFERV9JTkMsIGFjdGl2ZSkKKyAgICAgICAgICAgIGl0ID0gc2VsZi5yZWNpcGVfbW9kZWwuaXRlcl9uZXh0KGl0KQorICAgICAgICAjIENoZWNrIG91dCBhIG1vZGVsIHdoaWNoIGJhc2Ugb24gdGhlIGNvbHVtbiBDT0xfRkFERV9JTkMsCisgICAgICAgICMgaXQncyBzYXZlIHRoZSBwcmV2IHN0YXRlIG9mIGNvbHVtbiBDT0xfSU5DIGJlZm9yZSBkbyBleGNsdWRlX2l0ZW0KKyAgICAgICAgZmlsdGVyID0geyBSZWNpcGVMaXN0TW9kZWwuQ09MX0ZBREVfSU5DOltUcnVlXSB9CisgICAgICAgIGlmIHBhZ2VuYW1lID09ICJJbmNsdWRlZCByZWNpcGVzIjoKKyAgICAgICAgICAgIGZpbHRlcltSZWNpcGVMaXN0TW9kZWwuQ09MX1RZUEVdID0gWydyZWNpcGUnLCAncGFja2FnZWdyb3VwJ10KKyAgICAgICAgZWxpZiBwYWdlbmFtZSA9PSAiQWxsIHJlY2lwZXMiOgorICAgICAgICAgICAgZmlsdGVyW1JlY2lwZUxpc3RNb2RlbC5DT0xfVFlQRV0gPSBbJ3JlY2lwZSddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWx0ZXJbUmVjaXBlTGlzdE1vZGVsLkNPTF9UWVBFXSA9IFsncGFja2FnZWdyb3VwJ10KKworICAgICAgICBuZXdfbW9kZWwgPSBzZWxmLnJlY2lwZV9tb2RlbC50cmVlX21vZGVsKGZpbHRlciwgZXhjbHVkZWRfaXRlbXNfYWhlYWQ9VHJ1ZSkKKyAgICAgICAgdHJlZS5zZXRfbW9kZWwobmV3X21vZGVsKQorCisgICAgZGVmIHJlbmRlcl9mYWRlb3V0KHNlbGYsIHRyZWUsIGNlbGwpOgorICAgICAgICBpZiAobm90IGNlbGwpIG9yIChub3QgdHJlZSk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdG9fcmVuZGVyX2NlbGxzID0gW10KKyAgICAgICAgbW9kZWwgPSB0cmVlLmdldF9tb2RlbCgpCisgICAgICAgIGl0ID0gbW9kZWwuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIHBhdGggPSBtb2RlbC5nZXRfcGF0aChpdCkKKyAgICAgICAgICAgIHByZXZfY2VsbF9pc19hY3RpdmUgPSBtb2RlbC5nZXRfdmFsdWUoaXQsIFJlY2lwZUxpc3RNb2RlbC5DT0xfRkFERV9JTkMpCisgICAgICAgICAgICBjdXJyX2NlbGxfaXNfYWN0aXZlID0gbW9kZWwuZ2V0X3ZhbHVlKGl0LCBSZWNpcGVMaXN0TW9kZWwuQ09MX0lOQykKKyAgICAgICAgICAgIGlmIChwcmV2X2NlbGxfaXNfYWN0aXZlID09IFRydWUpIGFuZCAoY3Vycl9jZWxsX2lzX2FjdGl2ZSA9PSBGYWxzZSk6CisgICAgICAgICAgICAgICAgdG9fcmVuZGVyX2NlbGxzLmFwcGVuZChwYXRoKQorICAgICAgICAgICAgaXQgPSBtb2RlbC5pdGVyX25leHQoaXQpCisKKyAgICAgICAgY2VsbC5mYWRlb3V0KHRyZWUsIDEwMDAsIHRvX3JlbmRlcl9jZWxscykKKworICAgIGRlZiBhZnRlcl9mYWRlb3V0X2NoZWNraW5faW5jbHVkZShzZWxmLCB0YWJsZSwgY3RybCwgY2VsbCwgdHJlZSwgZmlsdGVyKToKKyAgICAgICAgc2VsZi5yZWNpcGVfbW9kZWwuc29ydF9jb2x1bW5faWQgPSBzZWxmLnNvcnRfY29sdW1uX2lkCisgICAgICAgIHNlbGYucmVjaXBlX21vZGVsLnNvcnRfb3JkZXIgPSBzZWxmLnNvcnRfb3JkZXIKKyAgICAgICAgdHJlZS5zZXRfbW9kZWwoc2VsZi5yZWNpcGVfbW9kZWwudHJlZV9tb2RlbChmaWx0ZXIpKQorCisgICAgZGVmIHNldF9yZWNpcGVfY3Vycl90YWIoc2VsZiwgY3Vycl9wYWdlKToKKyAgICAgICAgc2VsZi5pbnMuc2V0X2N1cnJlbnRfcGFnZShjdXJyX3BhZ2UpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9ydW5uaW5nYnVpbGQucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9ydW5uaW5nYnVpbGQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZhOTU1ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3J1bm5pbmdidWlsZC5weQpAQCAtMCwwICsxLDU1MSBAQAorCisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDggICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IFJvYiBCcmFkZm9yZCA8cm9iQGxpbnV4LmludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKK2ltcG9ydCBnb2JqZWN0CitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHRpbWUKK2ltcG9ydCB1cmxsaWIKK2ltcG9ydCB1cmxsaWIyCitpbXBvcnQgcGFuZ28KK2Zyb20gYmIudWkuY3J1bWJzLmhvYmNvbG9yIGltcG9ydCBIb2JDb2xvcnMKK2Zyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgSG9iV2FycENlbGxSZW5kZXJlclRleHQsIEhvYkNlbGxSZW5kZXJlclBpeGJ1ZgorCitjbGFzcyBSdW5uaW5nQnVpbGRNb2RlbCAoZ3RrLlRyZWVTdG9yZSk6CisgICAgKENPTF9MT0csIENPTF9QQUNLQUdFLCBDT0xfVEFTSywgQ09MX01FU1NBR0UsIENPTF9JQ09OLCBDT0xfQ09MT1IsIENPTF9OVU1fQUNUSVZFKSA9IHJhbmdlKDcpCisKKyAgICBkZWYgX19pbml0X18gKHNlbGYpOgorICAgICAgICBndGsuVHJlZVN0b3JlLl9faW5pdF9fIChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfSU5UKQorCisgICAgZGVmIGZhaWx1cmVfbW9kZWxfZmlsdGVyKHNlbGYsIG1vZGVsLCBpdCk6CisgICAgICAgIGNvbG9yID0gbW9kZWwuZ2V0KGl0LCBzZWxmLkNPTF9DT0xPUilbMF0KKyAgICAgICAgaWYgbm90IGNvbG9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIGNvbG9yID09IEhvYkNvbG9ycy5FUlJPUiBvciBjb2xvciA9PSBIb2JDb2xvcnMuV0FSTklORzoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGZhaWx1cmVfbW9kZWwoc2VsZik6CisgICAgICAgIG1vZGVsID0gc2VsZi5maWx0ZXJfbmV3KCkKKyAgICAgICAgbW9kZWwuc2V0X3Zpc2libGVfZnVuYyhzZWxmLmZhaWx1cmVfbW9kZWxfZmlsdGVyKQorICAgICAgICByZXR1cm4gbW9kZWwKKworICAgIGRlZiBmb3JlYWNoX2NlbGxfZnVuYyhzZWxmLCBtb2RlbCwgcGF0aCwgaXRlciwgdXNyX2RhdGE9Tm9uZSk6CisgICAgICAgIGlmIG1vZGVsLmdldF92YWx1ZShpdGVyLCBzZWxmLkNPTF9JQ09OKSA9PSAiZ3RrLWV4ZWN1dGUiOgorICAgICAgICAgICAgbW9kZWwuc2V0KGl0ZXIsIHNlbGYuQ09MX0lDT04sICIiKQorCisgICAgZGVmIGNsb3NlX3Rhc2tfcmVmcmVzaChzZWxmKToKKyAgICAgICAgc2VsZi5mb3JlYWNoKHNlbGYuZm9yZWFjaF9jZWxsX2Z1bmMsIE5vbmUpCisKK2NsYXNzIFJ1bm5pbmdCdWlsZCAoZ29iamVjdC5HT2JqZWN0KToKKyAgICBfX2dzaWduYWxzX18gPSB7CisgICAgICAgICAgJ2J1aWxkLXN0YXJ0ZWQnICAgOiAgKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSksCisgICAgICAgICAgJ2J1aWxkLXN1Y2NlZWRlZCcgOiAgKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSksCisgICAgICAgICAgJ2J1aWxkLWZhaWxlZCcgICAgOiAgKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSksCisgICAgICAgICAgJ2J1aWxkLWNvbXBsZXRlJyAgOiAgKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSksCisgICAgICAgICAgJ2J1aWxkLWFib3J0ZWQnICAgOiAgKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSksCisgICAgICAgICAgJ3Rhc2stc3RhcnRlZCcgICAgOiAgKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ29iamVjdC5UWVBFX1BZT0JKRUNULCkpLAorICAgICAgICAgICdsb2ctZXJyb3InICAgICAgIDogIChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgICdsb2ctd2FybmluZycgICAgIDogIChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgICdkaXNrLWZ1bGwnICAgICAgIDogIChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgICduby1wcm92aWRlcicgICAgIDogIChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdvYmplY3QuVFlQRV9QWU9CSkVDVCwpKSwKKyAgICAgICAgICAnbG9nJyAgICAgICAgICAgICA6ICAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfU1RSSU5HLCBnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsKSksCisgICAgICAgICAgfQorICAgIHBpZHNfdG9fdGFzayA9IHt9CisgICAgdGFza3NfdG9faXRlciA9IHt9CisKKyAgICBkZWYgX19pbml0X18gKHNlbGYsIHNlcXVlbnRpYWw9RmFsc2UpOgorICAgICAgICBnb2JqZWN0LkdPYmplY3QuX19pbml0X18gKHNlbGYpCisgICAgICAgIHNlbGYubW9kZWwgPSBSdW5uaW5nQnVpbGRNb2RlbCgpCisgICAgICAgIHNlbGYuc2VxdWVudGlhbCA9IHNlcXVlbnRpYWwKKyAgICAgICAgc2VsZi5idWlsZGFib3J0ZWQgPSBGYWxzZQorCisgICAgZGVmIHJlc2V0IChzZWxmKToKKyAgICAgICAgc2VsZi5waWRzX3RvX3Rhc2suY2xlYXIoKQorICAgICAgICBzZWxmLnRhc2tzX3RvX2l0ZXIuY2xlYXIoKQorICAgICAgICBzZWxmLm1vZGVsLmNsZWFyKCkKKworICAgIGRlZiBoYW5kbGVfZXZlbnQgKHNlbGYsIGV2ZW50LCBwYmFyPU5vbmUpOgorICAgICAgICAjIEhhbmRsZSBhbiBldmVudCBmcm9tIHRoZSBldmVudCBxdWV1ZSwgdGhpcyBtYXkgcmVzdWx0IGluIHVwZGF0aW5nCisgICAgICAgICMgdGhlIG1vZGVsIGFuZCB0aHVzIHRoZSBVSS4gT3IgaXQgbWF5IGJlIHRvIHRlbGwgdXMgdGhhdCB0aGUgYnVpbGQKKyAgICAgICAgIyBoYXMgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5IChvciBub3QsIGFzIHRoZSBjYXNlIG1heSBiZS4pCisKKyAgICAgICAgcGFyZW50ID0gTm9uZQorICAgICAgICBwaWQgPSAwCisgICAgICAgIHBhY2thZ2UgPSBOb25lCisgICAgICAgIHRhc2sgPSBOb25lCisKKyAgICAgICAgIyBJZiB3ZSBoYXZlIGEgcGlkIGF0dGFjaGVkIHRvIHRoaXMgbWVzc2FnZS9ldmVudCB0cnkgYW5kIGdldCB0aGUKKyAgICAgICAgIyAocGFja2FnZSwgdGFzaykgcGFpciBmb3IgaXQuIElmIHdlIGdldCB0aGF0IHRoZW4gZ2V0IHRoZSBwYXJlbnQgaXRlcgorICAgICAgICAjIGZvciB0aGUgbWVzc2FnZS4KKyAgICAgICAgaWYgaGFzYXR0cihldmVudCwgJ3BpZCcpOgorICAgICAgICAgICAgcGlkID0gZXZlbnQucGlkCisgICAgICAgIGlmIGhhc2F0dHIoZXZlbnQsICdwcm9jZXNzJyk6CisgICAgICAgICAgICBwaWQgPSBldmVudC5wcm9jZXNzCisKKyAgICAgICAgaWYgcGlkIGFuZCBwaWQgaW4gc2VsZi5waWRzX3RvX3Rhc2s6CisgICAgICAgICAgICAocGFja2FnZSwgdGFzaykgPSBzZWxmLnBpZHNfdG9fdGFza1twaWRdCisgICAgICAgICAgICBwYXJlbnQgPSBzZWxmLnRhc2tzX3RvX2l0ZXJbKHBhY2thZ2UsIHRhc2spXQorCisgICAgICAgIGlmKGlzaW5zdGFuY2UoZXZlbnQsIGxvZ2dpbmcuTG9nUmVjb3JkKSk6CisgICAgICAgICAgICBpZiBldmVudC50YXNrcGlkID09IDAgb3IgZXZlbnQubGV2ZWxubyA+IGxvZ2dpbmcuSU5GTzoKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoImxvZyIsICJoYW5kbGUiLCBldmVudCkKKyAgICAgICAgICAgICMgRklYTUU6IHRoaXMgaXMgYSBoYWNrISBNb3JlIGluZm8gaW4gWW9jdG8gIzE0MzMKKyAgICAgICAgICAgICMgaHR0cDovL2J1Z3ppbGxhLnBva3lsaW51eC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzMsIHRlbXBvcmFyaWx5CisgICAgICAgICAgICAjIG1hc2sgdGhlIGVycm9yIG1lc3NhZ2UgYXMgaXQncyBub3QgaW5mb3JtYXRpdmUgZm9yIHRoZSB1c2VyLgorICAgICAgICAgICAgaWYgZXZlbnQubXNnLnN0YXJ0c3dpdGgoIkV4ZWN1dGlvbiBvZiBldmVudCBoYW5kbGVyICdydW5fYnVpbGRzdGF0cycgZmFpbGVkIik6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGlmIChldmVudC5sZXZlbG5vIDwgbG9nZ2luZy5JTkZPIG9yCisgICAgICAgICAgICAgICAgZXZlbnQubXNnLnN0YXJ0c3dpdGgoIlJ1bm5pbmcgdGFzayIpKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIyBkb24ndCBhZGQgdGhlc2UgdG8gdGhlIGxpc3QKKworICAgICAgICAgICAgaWYgZXZlbnQubGV2ZWxubyA+PSBsb2dnaW5nLkVSUk9SOgorICAgICAgICAgICAgICAgIGljb24gPSAiZGlhbG9nLWVycm9yIgorICAgICAgICAgICAgICAgIGNvbG9yID0gSG9iQ29sb3JzLkVSUk9SCisgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ctZXJyb3IiKQorICAgICAgICAgICAgZWxpZiBldmVudC5sZXZlbG5vID49IGxvZ2dpbmcuV0FSTklORzoKKyAgICAgICAgICAgICAgICBpY29uID0gImRpYWxvZy13YXJuaW5nIgorICAgICAgICAgICAgICAgIGNvbG9yID0gSG9iQ29sb3JzLldBUk5JTkcKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoImxvZy13YXJuaW5nIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWNvbiA9IE5vbmUKKyAgICAgICAgICAgICAgICBjb2xvciA9IEhvYkNvbG9ycy5PSworCisgICAgICAgICAgICAjIGlmIHdlIGtub3cgd2hpY2ggcGFja2FnZSB3ZSBiZWxvbmcgdG8sIHdlJ2xsIGFwcGVuZCBvbnRvIGl0cyBsaXN0LgorICAgICAgICAgICAgIyBvdGhlcndpc2UsIHdlJ2xsIGp1bXAgdG8gdGhlIHRvcCBvZiB0aGUgbWFzdGVyIGxpc3QKKyAgICAgICAgICAgIGlmIHNlbGYuc2VxdWVudGlhbCBvciBub3QgcGFyZW50OgorICAgICAgICAgICAgICAgIHRyZWVfYWRkID0gc2VsZi5tb2RlbC5hcHBlbmQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJlZV9hZGQgPSBzZWxmLm1vZGVsLnByZXBlbmQKKyAgICAgICAgICAgIHRyZWVfYWRkKHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgIChOb25lLAorICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UsCisgICAgICAgICAgICAgICAgICAgICAgdGFzaywKKyAgICAgICAgICAgICAgICAgICAgICBldmVudC5nZXRNZXNzYWdlKCksCisgICAgICAgICAgICAgICAgICAgICAgaWNvbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAwKSkKKworICAgICAgICAgICAgIyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgd2hpbGUgcHJvY2Vzc2luZyBhIHBhY2thZ2UKKyAgICAgICAgICAgICMgIChwYXJlbnQpLCBtYXJrIHRoZSB0YXNrIHdpdGggd2FybmluZyBjb2xvcjsKKyAgICAgICAgICAgICMgaW4gY2FzZSB0aGVyZSBhcmUgZXJyb3JzLCB0aGUgdXBkYXRlcyB3aWxsIGJlCisgICAgICAgICAgICAjICBoYW5kbGVkIG9uIFRhc2tGYWlsZWQuCisgICAgICAgICAgICBpZiBjb2xvciA9PSBIb2JDb2xvcnMuV0FSTklORyBhbmQgcGFyZW50OgorICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfQ09MT1IsIGNvbG9yKQorICAgICAgICAgICAgICAgIGlmIHRhc2s6ICN0aGVuIHdlIGhhdmUgYSBwYXJlbnQgKHBhY2thZ2UpLCBhbmQgdXBkYXRlIGl0J3MgY29sb3IKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5zZXQoc2VsZi50YXNrc190b19pdGVyWyhwYWNrYWdlLCBOb25lKV0sIHNlbGYubW9kZWwuQ09MX0NPTE9SLCBjb2xvcikKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tTdGFydGVkKToKKyAgICAgICAgICAgIChwYWNrYWdlLCB0YXNrKSA9IChldmVudC5fcGFja2FnZSwgZXZlbnQuX3Rhc2spCisKKyAgICAgICAgICAgICMgU2F2ZSBvdXQgdGhpcyBQSUQuCisgICAgICAgICAgICBzZWxmLnBpZHNfdG9fdGFza1twaWRdID0gKHBhY2thZ2UsIHRhc2spCisKKyAgICAgICAgICAgICMgQ2hlY2sgaWYgd2UgYWxyZWFkeSBoYXZlIHRoaXMgcGFja2FnZSBpbiBvdXIgbW9kZWwuIElmIHNvIHRoZW4KKyAgICAgICAgICAgICMgdGhhdCBjYW4gYmUgdGhlIHBhcmVudCBmb3IgdGhlIHRhc2suIE90aGVyd2lzZSB3ZSBjcmVhdGUgYSBuZXcKKyAgICAgICAgICAgICMgdG9wIGxldmVsIGZvciB0aGUgcGFja2FnZS4KKyAgICAgICAgICAgIGlmICgocGFja2FnZSwgTm9uZSkgaW4gc2VsZi50YXNrc190b19pdGVyKToKKyAgICAgICAgICAgICAgICBwYXJlbnQgPSBzZWxmLnRhc2tzX3RvX2l0ZXJbKHBhY2thZ2UsIE5vbmUpXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnNlcXVlbnRpYWw6CisgICAgICAgICAgICAgICAgICAgIGFkZCA9IHNlbGYubW9kZWwuYXBwZW5kCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYWRkID0gc2VsZi5tb2RlbC5wcmVwZW5kCisgICAgICAgICAgICAgICAgcGFyZW50ID0gYWRkKE5vbmUsIChOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFja2FnZTogJXMiICUgKHBhY2thZ2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvYkNvbG9ycy5PSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKQorICAgICAgICAgICAgICAgIHNlbGYudGFza3NfdG9faXRlclsocGFja2FnZSwgTm9uZSldID0gcGFyZW50CisKKyAgICAgICAgICAgICMgQmVjYXVzZSB0aGlzIHBhcmVudCBwYWNrYWdlIG5vdyBoYXMgYW4gYWN0aXZlIGNoaWxkIG1hcmsgaXQgYXMKKyAgICAgICAgICAgICMgc3VjaC4KKyAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfSUNPTiwgImd0ay1leGVjdXRlIikKKyAgICAgICAgICAgIHBhcmVudF9jb2xvciA9IHNlbGYubW9kZWwuZ2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfQ09MT1IpWzBdCisgICAgICAgICAgICBpZiBwYXJlbnRfY29sb3IgIT0gSG9iQ29sb3JzLkVSUk9SIGFuZCBwYXJlbnRfY29sb3IgIT0gSG9iQ29sb3JzLldBUk5JTkc6CisgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5zZXQocGFyZW50LCBzZWxmLm1vZGVsLkNPTF9DT0xPUiwgSG9iQ29sb3JzLlJVTk5JTkcpCisKKyAgICAgICAgICAgICMgQWRkIGFuIGVudHJ5IGluIHRoZSBtb2RlbCBmb3IgdGhpcyB0YXNrCisgICAgICAgICAgICBpID0gc2VsZi5tb2RlbC5hcHBlbmQgKHBhcmVudCwgKE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUYXNrOiAlcyIgJSAodGFzayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJndGstZXhlY3V0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvYkNvbG9ycy5SVU5OSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSkKKworICAgICAgICAgICAgIyB1cGRhdGUgdGhlIHBhcmVudCdzIGFjdGl2ZSB0YXNrIGNvdW50CisgICAgICAgICAgICBudW1fYWN0aXZlID0gc2VsZi5tb2RlbC5nZXQocGFyZW50LCBzZWxmLm1vZGVsLkNPTF9OVU1fQUNUSVZFKVswXSArIDEKKyAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfTlVNX0FDVElWRSwgbnVtX2FjdGl2ZSkKKworICAgICAgICAgICAgIyBTYXZlIG91dCB0aGUgaXRlciBzbyB0aGF0IHdlIGNhbiBmaW5kIGl0IHdoZW4gd2UgaGF2ZSBhIG1lc3NhZ2UKKyAgICAgICAgICAgICMgdGhhdCB3ZSBuZWVkIHRvIGF0dGFjaCB0byBhIHRhc2suCisgICAgICAgICAgICBzZWxmLnRhc2tzX3RvX2l0ZXJbKHBhY2thZ2UsIHRhc2spXSA9IGkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tCYXNlKToKKyAgICAgICAgICAgIHNlbGYuZW1pdCgibG9nIiwgImluZm8iLCBldmVudC5fbWVzc2FnZSkKKyAgICAgICAgICAgIGN1cnJlbnQgPSBzZWxmLnRhc2tzX3RvX2l0ZXJbKHBhY2thZ2UsIHRhc2spXQorICAgICAgICAgICAgcGFyZW50ID0gc2VsZi50YXNrc190b19pdGVyWyhwYWNrYWdlLCBOb25lKV0KKworICAgICAgICAgICAgIyByZW1vdmUgdGhpcyB0YXNrIGZyb20gdGhlIHBhcmVudCdzIGFjdGl2ZSBjb3VudAorICAgICAgICAgICAgbnVtX2FjdGl2ZSA9IHNlbGYubW9kZWwuZ2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfTlVNX0FDVElWRSlbMF0gLSAxCisgICAgICAgICAgICBzZWxmLm1vZGVsLnNldChwYXJlbnQsIHNlbGYubW9kZWwuQ09MX05VTV9BQ1RJVkUsIG51bV9hY3RpdmUpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tGYWlsZWQpOgorICAgICAgICAgICAgICAgICMgTWFyayB0aGUgdGFzayBhbmQgcGFyZW50IGFzIGZhaWxlZAorICAgICAgICAgICAgICAgIGljb24gPSAiZGlhbG9nLWVycm9yIgorICAgICAgICAgICAgICAgIGNvbG9yID0gSG9iQ29sb3JzLkVSUk9SCisKKyAgICAgICAgICAgICAgICBsb2dmaWxlID0gZXZlbnQubG9nZmlsZQorICAgICAgICAgICAgICAgIGlmIGxvZ2ZpbGUgYW5kIG9zLnBhdGguZXhpc3RzKGxvZ2ZpbGUpOgorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4obG9nZmlsZSkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2RhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5hcHBlbmQoY3VycmVudCwgKCdwYXN0ZWJpbicsIE5vbmUsIE5vbmUsIGxvZ2RhdGEsICdndGstZXJyb3InLCBIb2JDb2xvcnMuT0ssIDApKQorCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gKGN1cnJlbnQsIHBhcmVudCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KGksIHNlbGYubW9kZWwuQ09MX0lDT04sIGljb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuQ09MX0NPTE9SLCBjb2xvcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBNYXJrIHRoZSBwYXJlbnQgcGFja2FnZSBhbmQgdGhlIHRhc2sgYXMgaW5hY3RpdmUsCisgICAgICAgICAgICAgICAgIyBidXQgbWFrZSBzdXJlIHRvIHByZXNlcnZlIGVycm9yLCB3YXJuaW5ncyBhbmQgYWN0aXZlCisgICAgICAgICAgICAgICAgIyBzdGF0ZXMKKyAgICAgICAgICAgICAgICBwYXJlbnRfY29sb3IgPSBzZWxmLm1vZGVsLmdldChwYXJlbnQsIHNlbGYubW9kZWwuQ09MX0NPTE9SKVswXQorICAgICAgICAgICAgICAgIHRhc2tfY29sb3IgPSBzZWxmLm1vZGVsLmdldChjdXJyZW50LCBzZWxmLm1vZGVsLkNPTF9DT0xPUilbMF0KKworICAgICAgICAgICAgICAgICMgTWFyayB0aGUgdGFzayBhcyBpbmFjdGl2ZQorICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KGN1cnJlbnQsIHNlbGYubW9kZWwuQ09MX0lDT04sIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgdGFza19jb2xvciAhPSBIb2JDb2xvcnMuRVJST1I6CisgICAgICAgICAgICAgICAgICAgIGlmIHRhc2tfY29sb3IgPT0gSG9iQ29sb3JzLldBUk5JTkc6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZGVsLnNldChjdXJyZW50LCBzZWxmLm1vZGVsLkNPTF9JQ09OLCAnZGlhbG9nLXdhcm5pbmcnKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5zZXQoY3VycmVudCwgc2VsZi5tb2RlbC5DT0xfQ09MT1IsIEhvYkNvbG9ycy5PSykKKworICAgICAgICAgICAgICAgICMgTWFyayB0aGUgcGFyZW50IGFzIGluYWN0aXZlCisgICAgICAgICAgICAgICAgaWYgcGFyZW50X2NvbG9yICE9IEhvYkNvbG9ycy5FUlJPUjoKKyAgICAgICAgICAgICAgICAgICAgaWYgcGFyZW50X2NvbG9yID09IEhvYkNvbG9ycy5XQVJOSU5HOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5zZXQocGFyZW50LCBzZWxmLm1vZGVsLkNPTF9JQ09OLCAiZGlhbG9nLXdhcm5pbmciKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5zZXQocGFyZW50LCBzZWxmLm1vZGVsLkNPTF9JQ09OLCBOb25lKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbnVtX2FjdGl2ZSA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfQ09MT1IsIEhvYkNvbG9ycy5PSykKKworICAgICAgICAgICAgIyBDbGVhciB0aGUgaXRlcnMgYW5kIHRoZSBwaWRzIHNpbmNlIHdoZW4gdGhlIHRhc2sgZ29lcyBhd2F5IHRoZQorICAgICAgICAgICAgIyBwaWQgd2lsbCBubyBsb25nZXIgYmUgdXNlZCBmb3IgbWVzc2FnZXMKKyAgICAgICAgICAgIGRlbCBzZWxmLnRhc2tzX3RvX2l0ZXJbKHBhY2thZ2UsIHRhc2spXQorICAgICAgICAgICAgZGVsIHNlbGYucGlkc190b190YXNrW3BpZF0KKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkJ1aWxkU3RhcnRlZCk6CisKKyAgICAgICAgICAgIHNlbGYuZW1pdCgiYnVpbGQtc3RhcnRlZCIpCisgICAgICAgICAgICBzZWxmLm1vZGVsLnByZXBlbmQoTm9uZSwgKE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCdWlsZCBTdGFydGVkICglcykiICUgdGltZS5zdHJmdGltZSgnJW0vJWQvJVkgJUg6JU06JVMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9iQ29sb3JzLk9LLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSkKKyAgICAgICAgICAgIGlmIHBiYXI6CisgICAgICAgICAgICAgICAgcGJhci51cGRhdGUoMCwgc2VsZi5wcm9ncmVzc190b3RhbCkKKyAgICAgICAgICAgICAgICBwYmFyLnNldF90aXRsZShiYi5ldmVudC5nZXROYW1lKGV2ZW50KSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkKToKKyAgICAgICAgICAgIGZhaWx1cmVzID0gaW50IChldmVudC5fZmFpbHVyZXMpCisgICAgICAgICAgICBzZWxmLm1vZGVsLnByZXBlbmQoTm9uZSwgKE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCdWlsZCBDb21wbGV0ZWQgKCVzKSIgJSB0aW1lLnN0cmZ0aW1lKCclbS8lZC8lWSAlSDolTTolUycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb2JDb2xvcnMuT0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKQorCisgICAgICAgICAgICAjIEVtaXQgdGhlIGFwcHJvcHJpYXRlIHNpZ25hbCBkZXBlbmRpbmcgb24gdGhlIG51bWJlciBvZiBmYWlsdXJlcworICAgICAgICAgICAgaWYgc2VsZi5idWlsZGFib3J0ZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5lbWl0ICgiYnVpbGQtYWJvcnRlZCIpCisgICAgICAgICAgICAgICAgc2VsZi5idWlsZGFib3J0ZWQgPSBGYWxzZQorICAgICAgICAgICAgZWxpZiAoZmFpbHVyZXMgPj0gMSk6CisgICAgICAgICAgICAgICAgc2VsZi5lbWl0ICgiYnVpbGQtZmFpbGVkIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5lbWl0ICgiYnVpbGQtc3VjY2VlZGVkIikKKyAgICAgICAgICAgICMgRW1pdCBhIGdlbmVyaWMgImJ1aWxkLWNvbXBsZXRlIiBzaWduYWwgZm9yIHRoaW5ncyB3aXNoaW5nIHRvCisgICAgICAgICAgICAjIGhhbmRsZSB3aGVuIHRoZSBidWlsZCBpcyBmaW5pc2hlZAorICAgICAgICAgICAgc2VsZi5lbWl0KCJidWlsZC1jb21wbGV0ZSIpCisgICAgICAgICAgICAjIHJlc2V0IHRoZSBhbGwgY2VsbCdzIGljb24gaW5kaWNhdG9yCisgICAgICAgICAgICBzZWxmLm1vZGVsLmNsb3NlX3Rhc2tfcmVmcmVzaCgpCisgICAgICAgICAgICBpZiBwYmFyOgorICAgICAgICAgICAgICAgIHBiYXIuc2V0X3RleHQoZXZlbnQubXNnKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuRGlza0Z1bGwpOgorICAgICAgICAgICAgc2VsZi5idWlsZGFib3J0ZWQgPSBUcnVlCisgICAgICAgICAgICBzZWxmLmVtaXQoImRpc2stZnVsbCIpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb21tYW5kLkNvbW1hbmRGYWlsZWQpOgorICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ciLCAiZXJyb3IiLCAiQ29tbWFuZCBleGVjdXRpb24gZmFpbGVkOiAlcyIgJSAoZXZlbnQuZXJyb3IpKQorICAgICAgICAgICAgaWYgZXZlbnQuZXJyb3Iuc3RhcnRzd2l0aCgiRXhpdGVkIHdpdGgiKToKKyAgICAgICAgICAgICAgICAjIElmIHRoZSBjb21tYW5kIGZhaWxzIHdpdGggYW4gZXhpdCBjb2RlIHdlJ3JlIGRvbmUsIGVtaXQgdGhlCisgICAgICAgICAgICAgICAgIyBnZW5lcmljIHNpZ25hbCBmb3IgdGhlIFVJIHRvIG5vdGlmeSB0aGUgdXNlcgorICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgiYnVpbGQtY29tcGxldGUiKQorICAgICAgICAgICAgICAgICMgcmVzZXQgdGhlIGFsbCBjZWxsJ3MgaWNvbiBpbmRpY2F0b3IKKyAgICAgICAgICAgICAgICBzZWxmLm1vZGVsLmNsb3NlX3Rhc2tfcmVmcmVzaCgpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRTdGFydGVkKSBhbmQgcGJhcjoKKyAgICAgICAgICAgIHBiYXIuc2V0X3RpdGxlKCJMb2FkaW5nIGNhY2hlIikKKyAgICAgICAgICAgIHNlbGYucHJvZ3Jlc3NfdG90YWwgPSBldmVudC50b3RhbAorICAgICAgICAgICAgcGJhci51cGRhdGUoMCwgc2VsZi5wcm9ncmVzc190b3RhbCkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRQcm9ncmVzcykgYW5kIHBiYXI6CisgICAgICAgICAgICBwYmFyLnVwZGF0ZShldmVudC5jdXJyZW50LCBzZWxmLnByb2dyZXNzX3RvdGFsKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZENvbXBsZXRlZCkgYW5kIHBiYXI6CisgICAgICAgICAgICBwYmFyLnVwZGF0ZShzZWxmLnByb2dyZXNzX3RvdGFsLCBzZWxmLnByb2dyZXNzX3RvdGFsKQorICAgICAgICAgICAgcGJhci5oaWRlKCkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZVN0YXJ0ZWQpIGFuZCBwYmFyOgorICAgICAgICAgICAgaWYgZXZlbnQudG90YWwgPT0gMDoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHBiYXIuc2V0X3RpdGxlKCJQcm9jZXNzaW5nIHJlY2lwZXMiKQorICAgICAgICAgICAgc2VsZi5wcm9ncmVzc190b3RhbCA9IGV2ZW50LnRvdGFsCisgICAgICAgICAgICBwYmFyLnVwZGF0ZSgwLCBzZWxmLnByb2dyZXNzX3RvdGFsKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlUHJvZ3Jlc3MpIGFuZCBwYmFyOgorICAgICAgICAgICAgcGJhci51cGRhdGUoZXZlbnQuY3VycmVudCwgc2VsZi5wcm9ncmVzc190b3RhbCkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCkgYW5kIHBiYXI6CisgICAgICAgICAgICBwYmFyLmhpZGUoKQorICAgICAgICAjdXNpbmcgcnVucXVldWUgZXZlbnRzIGFzIG1hbnkgYXMgcG9zc2libGUgdG8gdXBkYXRlIHRoZSBwcm9ncmVzcyBiYXIKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tGYWlsZWQpOgorICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ciLCAiZXJyb3IiLCAiVGFzayAlcyAoJXMpIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAnJXMnIiAlIChldmVudC50YXNraWQsIGV2ZW50LnRhc2tzdHJpbmcsIGV2ZW50LmV4aXRjb2RlKSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlVGFza0ZhaWxlZCk6CisgICAgICAgICAgICBzZWxmLmVtaXQoImxvZyIsICJ3YXJuIiwgIlNldHNjZW5lIHRhc2sgJXMgKCVzKSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJyVzJyAtIHJlYWwgdGFzayB3aWxsIGJlIHJ1biBpbnN0ZWFkIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZXZlbnQudGFza2lkLCBldmVudC50YXNrc3RyaW5nLCBldmVudC5leGl0Y29kZSkpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlVGFza1N0YXJ0ZWQsIGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrU3RhcnRlZCkpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tTdGFydGVkKToKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoImxvZyIsICJpbmZvIiwgIlJ1bm5pbmcgc2V0c2NlbmUgdGFzayAlZCBvZiAlZCAoJXMpIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV2ZW50LnN0YXRzLmNvbXBsZXRlZCArIGV2ZW50LnN0YXRzLmFjdGl2ZSArIGV2ZW50LnN0YXRzLmZhaWxlZCArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdGF0cy50b3RhbCwgZXZlbnQudGFza3N0cmluZykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGV2ZW50Lm5vZXhlYzoKKyAgICAgICAgICAgICAgICAgICAgdGFza3R5cGUgPSAnbm9leGVjIHRhc2snCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdGFza3R5cGUgPSAndGFzaycKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoImxvZyIsICJpbmZvIiwgIlJ1bm5pbmcgJXMgJXMgb2YgJXMgKElEOiAlcywgJXMpIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhc2t0eXBlLCBldmVudC5zdGF0cy5jb21wbGV0ZWQgKyBldmVudC5zdGF0cy5hY3RpdmUgKyBldmVudC5zdGF0cy5mYWlsZWQgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RhdHMudG90YWwsIGV2ZW50LnRhc2tpZCwgZXZlbnQudGFza3N0cmluZykpCisgICAgICAgICAgICBtZXNzYWdlID0ge30KKyAgICAgICAgICAgIG1lc3NhZ2VbImV2ZW50bmFtZSJdID0gYmIuZXZlbnQuZ2V0TmFtZShldmVudCkKKyAgICAgICAgICAgIG51bV9vZl9jb21wbGV0ZWQgPSBldmVudC5zdGF0cy5jb21wbGV0ZWQgKyBldmVudC5zdGF0cy5mYWlsZWQKKyAgICAgICAgICAgIG1lc3NhZ2VbImN1cnJlbnQiXSA9IG51bV9vZl9jb21wbGV0ZWQKKyAgICAgICAgICAgIG1lc3NhZ2VbInRvdGFsIl0gPSBldmVudC5zdGF0cy50b3RhbAorICAgICAgICAgICAgbWVzc2FnZVsidGl0bGUiXSA9ICIiCisgICAgICAgICAgICBtZXNzYWdlWyJ0YXNrIl0gPSBldmVudC50YXNrc3RyaW5nCisgICAgICAgICAgICBzZWxmLmVtaXQoInRhc2stc3RhcnRlZCIsIG1lc3NhZ2UpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTXVsdGlwbGVQcm92aWRlcnMpOgorICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ciLCAiaW5mbyIsICJtdWx0aXBsZSBwcm92aWRlcnMgYXJlIGF2YWlsYWJsZSBmb3IgJXMlcyAoJXMpIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZXZlbnQuX2lzX3J1bnRpbWUgYW5kICJydW50aW1lICIgb3IgIiIsIGV2ZW50Ll9pdGVtLCAiLCAiLmpvaW4oZXZlbnQuX2NhbmRpZGF0ZXMpKSkKKyAgICAgICAgICAgIHNlbGYuZW1pdCgibG9nIiwgImluZm8iLCAiY29uc2lkZXIgZGVmaW5pbmcgYSBQUkVGRVJSRURfUFJPVklERVIgZW50cnkgdG8gbWF0Y2ggJXMiICUgKGV2ZW50Ll9pdGVtKSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5Ob1Byb3ZpZGVyKToKKyAgICAgICAgICAgIG1zZyA9ICIiCisgICAgICAgICAgICBpZiBldmVudC5fcnVudGltZToKKyAgICAgICAgICAgICAgICByID0gIlIiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHIgPSAiIgorCisgICAgICAgICAgICBleHRyYSA9ICcnCisgICAgICAgICAgICBpZiBub3QgZXZlbnQuX3JlYXNvbnM6CisgICAgICAgICAgICAgICAgaWYgZXZlbnQuX2Nsb3NlX21hdGNoZXM6CisgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gIi4gQ2xvc2UgbWF0Y2hlczpcbiAgJXMiICUgJ1xuICAnLmpvaW4oZXZlbnQuX2Nsb3NlX21hdGNoZXMpCisKKyAgICAgICAgICAgIGlmIGV2ZW50Ll9kZXBlbmRlZXM6CisgICAgICAgICAgICAgICAgbXNnID0gIk5vdGhpbmcgJXNQUk9WSURFUyAnJXMnIChidXQgJXMgJXNERVBFTkRTIG9uIG9yIG90aGVyd2lzZSByZXF1aXJlcyBpdCklc1xuIiAlIChyLCBldmVudC5faXRlbSwgIiwgIi5qb2luKGV2ZW50Ll9kZXBlbmRlZXMpLCByLCBleHRyYSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbXNnID0gIk5vdGhpbmcgJXNQUk9WSURFUyAnJXMnJXNcbiIgJSAociwgZXZlbnQuX2l0ZW0sIGV4dHJhKQorICAgICAgICAgICAgaWYgZXZlbnQuX3JlYXNvbnM6CisgICAgICAgICAgICAgICAgZm9yIHJlYXNvbiBpbiBldmVudC5fcmVhc29uczoKKyAgICAgICAgICAgICAgICAgICAgbXNnICs9ICgiJXNcbiIgJSByZWFzb24pCisgICAgICAgICAgICBzZWxmLmVtaXQoIm5vLXByb3ZpZGVyIiwgbXNnKQorICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ciLCAiZXJyb3IiLCBtc2cpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTG9nRXhlY1RUWSk6CisgICAgICAgICAgICBpY29uID0gImRpYWxvZy13YXJuaW5nIgorICAgICAgICAgICAgY29sb3IgPSBIb2JDb2xvcnMuV0FSTklORworICAgICAgICAgICAgaWYgc2VsZi5zZXF1ZW50aWFsIG9yIG5vdCBwYXJlbnQ6CisgICAgICAgICAgICAgICAgdHJlZV9hZGQgPSBzZWxmLm1vZGVsLmFwcGVuZAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0cmVlX2FkZCA9IHNlbGYubW9kZWwucHJlcGVuZAorICAgICAgICAgICAgdHJlZV9hZGQocGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgKE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICB0YXNrLAorICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Lm1zZywKKyAgICAgICAgICAgICAgICAgICAgICBpY29uLAorICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLAorICAgICAgICAgICAgICAgICAgICAgIDApKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXZlbnQsIChiYi5ldmVudC5CdWlsZEJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LlN0YW1wVXBkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5Db25maWdQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LlJlY2lwZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuUmVjaXBlUHJlRmluYWxpc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlRXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlRXhpdFdhaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50Lk9wZXJhdGlvblN0YXJ0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50Lk9wZXJhdGlvbkNvbXBsZXRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuT3BlcmF0aW9uUHJvZ3Jlc3MpKToKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoImxvZyIsICJlcnJvciIsICJVbmtub3duIGV2ZW50OiAlcyIgJSAoZXZlbnQuZXJyb3IgaWYgaGFzYXR0cihldmVudCwgJ2Vycm9yJykgZWxzZSAnZXJyb3InKSkKKworICAgICAgICByZXR1cm4KKworCitkZWYgZG9fcGFzdGViaW4odGV4dCk6CisgICAgdXJsID0gJ2h0dHA6Ly9wYXN0ZWJpbi5jb20vYXBpX3B1YmxpYy5waHAnCisgICAgcGFyYW1zID0geydwYXN0ZV9jb2RlJzogdGV4dCwgJ3Bhc3RlX2Zvcm1hdCc6ICd0ZXh0J30KKworICAgIHJlcSA9IHVybGxpYjIuUmVxdWVzdCh1cmwsIHVybGxpYi51cmxlbmNvZGUocGFyYW1zKSkKKyAgICByZXNwb25zZSA9IHVybGxpYjIudXJsb3BlbihyZXEpCisgICAgcGFzdGVfdXJsID0gcmVzcG9uc2UucmVhZCgpCisKKyAgICByZXR1cm4gcGFzdGVfdXJsCisKKworY2xhc3MgUnVubmluZ0J1aWxkVHJlZVZpZXcgKGd0ay5UcmVlVmlldyk6CisgICAgX19nc2lnbmFsc19fID0geworICAgICAgICAiYnV0dG9uX3ByZXNzX2V2ZW50IiA6ICJvdmVycmlkZSIKKyAgICAgICAgfQorICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgcmVhZG9ubHk9RmFsc2UsIGhvYj1GYWxzZSk6CisgICAgICAgIGd0ay5UcmVlVmlldy5fX2luaXRfXyAoc2VsZikKKyAgICAgICAgc2VsZi5yZWFkb25seSA9IHJlYWRvbmx5CisKKyAgICAgICAgIyBUaGUgaWNvbiB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHdlJ3JlIGJ1aWxkaW5nIG9yIGZhaWxlZC4KKyAgICAgICAgIyBhZGQgJ2hvYicgZmxhZyBiZWNhdXNlIHRoZXJlIGhhcyBub3Qgb25seSBob2IgdG8gc2hhcmUgdGhpcyBjb2RlCisgICAgICAgIGlmIGhvYjoKKyAgICAgICAgICAgIHJlbmRlcmVyID0gSG9iQ2VsbFJlbmRlcmVyUGl4YnVmICgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZW5kZXJlciA9IGd0ay5DZWxsUmVuZGVyZXJQaXhidWYoKQorICAgICAgICBjb2wgPSBndGsuVHJlZVZpZXdDb2x1bW4gKCJTdGF0dXMiLCByZW5kZXJlcikKKyAgICAgICAgY29sLmFkZF9hdHRyaWJ1dGUgKHJlbmRlcmVyLCAiaWNvbi1uYW1lIiwgNCkKKyAgICAgICAgc2VsZi5hcHBlbmRfY29sdW1uIChjb2wpCisKKyAgICAgICAgIyBUaGUgbWVzc2FnZSBvZiB0aGUgYnVpbGQuCisgICAgICAgICMgYWRkICdob2InIGZsYWcgYmVjYXVzZSB0aGVyZSBoYXMgbm90IG9ubHkgaG9iIHRvIHNoYXJlIHRoaXMgY29kZQorICAgICAgICBpZiBob2I6CisgICAgICAgICAgICBzZWxmLm1lc3NhZ2VfcmVuZGVyZXIgPSBIb2JXYXJwQ2VsbFJlbmRlcmVyVGV4dCAoY29sX251bWJlcj0xKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5tZXNzYWdlX3JlbmRlcmVyID0gZ3RrLkNlbGxSZW5kZXJlclRleHQgKCkKKyAgICAgICAgc2VsZi5tZXNzYWdlX2NvbHVtbiA9IGd0ay5UcmVlVmlld0NvbHVtbiAoIk1lc3NhZ2UiLCBzZWxmLm1lc3NhZ2VfcmVuZGVyZXIsIHRleHQ9MykKKyAgICAgICAgc2VsZi5tZXNzYWdlX2NvbHVtbi5hZGRfYXR0cmlidXRlKHNlbGYubWVzc2FnZV9yZW5kZXJlciwgJ2JhY2tncm91bmQnLCA1KQorICAgICAgICBzZWxmLm1lc3NhZ2VfcmVuZGVyZXIuc2V0X3Byb3BlcnR5KCdlZGl0YWJsZScsIChub3Qgc2VsZi5yZWFkb25seSkpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbHVtbiAoc2VsZi5tZXNzYWdlX2NvbHVtbikKKworICAgIGRlZiBkb19idXR0b25fcHJlc3NfZXZlbnQoc2VsZiwgZXZlbnQpOgorICAgICAgICBndGsuVHJlZVZpZXcuZG9fYnV0dG9uX3ByZXNzX2V2ZW50KHNlbGYsIGV2ZW50KQorCisgICAgICAgIGlmIGV2ZW50LmJ1dHRvbiA9PSAzOgorICAgICAgICAgICAgc2VsZWN0aW9uID0gc3VwZXIoUnVubmluZ0J1aWxkVHJlZVZpZXcsIHNlbGYpLmdldF9zZWxlY3Rpb24oKQorICAgICAgICAgICAgKG1vZGVsLCBpdCkgPSBzZWxlY3Rpb24uZ2V0X3NlbGVjdGVkKCkKKyAgICAgICAgICAgIGlmIGl0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGNhbl9wYXN0ZSA9IG1vZGVsLmdldChpdCwgbW9kZWwuQ09MX0xPRylbMF0KKyAgICAgICAgICAgICAgICBpZiBjYW5fcGFzdGUgPT0gJ3Bhc3RlYmluJzoKKyAgICAgICAgICAgICAgICAgICAgIyBidWlsZCBhIHNpbXBsZSBtZW51IHdpdGggYSBwYXN0ZWJpbiBvcHRpb24KKyAgICAgICAgICAgICAgICAgICAgbWVudSA9IGd0ay5NZW51KCkKKyAgICAgICAgICAgICAgICAgICAgbWVudWl0ZW0gPSBndGsuTWVudUl0ZW0oIkNvcHkiKQorICAgICAgICAgICAgICAgICAgICBtZW51LmFwcGVuZChtZW51aXRlbSkKKyAgICAgICAgICAgICAgICAgICAgbWVudWl0ZW0uY29ubmVjdCgiYWN0aXZhdGUiLCBzZWxmLmNsaXBib2FyZF9oYW5kbGVyLCAobW9kZWwsIGl0KSkKKyAgICAgICAgICAgICAgICAgICAgbWVudWl0ZW0uc2hvdygpCisgICAgICAgICAgICAgICAgICAgIG1lbnVpdGVtID0gZ3RrLk1lbnVJdGVtKCJTZW5kIGxvZyB0byBwYXN0ZWJpbiIpCisgICAgICAgICAgICAgICAgICAgIG1lbnUuYXBwZW5kKG1lbnVpdGVtKQorICAgICAgICAgICAgICAgICAgICBtZW51aXRlbS5jb25uZWN0KCJhY3RpdmF0ZSIsIHNlbGYucGFzdGViaW5faGFuZGxlciwgKG1vZGVsLCBpdCkpCisgICAgICAgICAgICAgICAgICAgIG1lbnVpdGVtLnNob3coKQorICAgICAgICAgICAgICAgICAgICBtZW51LnNob3coKQorICAgICAgICAgICAgICAgICAgICBtZW51LnBvcHVwKE5vbmUsIE5vbmUsIE5vbmUsIGV2ZW50LmJ1dHRvbiwgZXZlbnQudGltZSkKKworICAgIGRlZiBfYWRkX3RvX2NsaXBib2FyZChzZWxmLCBjbGlwcGluZyk6CisgICAgICAgICIiIgorICAgICAgICBBZGQgdGhlIGNvbnRlbnRzIG9mIGNsaXBwaW5nIHRvIHRoZSBzeXN0ZW0gY2xpcGJvYXJkLgorICAgICAgICAiIiIKKyAgICAgICAgY2xpcGJvYXJkID0gZ3RrLmNsaXBib2FyZF9nZXQoKQorICAgICAgICBjbGlwYm9hcmQuc2V0X3RleHQoY2xpcHBpbmcpCisgICAgICAgIGNsaXBib2FyZC5zdG9yZSgpCisKKyAgICBkZWYgcGFzdGViaW5faGFuZGxlcihzZWxmLCB3aWRnZXQsIGRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgU2VuZCB0aGUgbG9nIGRhdGEgdG8gcGFzdGViaW4sIHRoZW4gYWRkIHRoZSBuZXcgcGFzdGUgdXJsIHRvIHRoZQorICAgICAgICBjbGlwYm9hcmQuCisgICAgICAgICIiIgorICAgICAgICAobW9kZWwsIGl0KSA9IGRhdGEKKyAgICAgICAgcGFzdGVfdXJsID0gZG9fcGFzdGViaW4obW9kZWwuZ2V0KGl0LCBtb2RlbC5DT0xfTUVTU0FHRSlbMF0pCisKKyAgICAgICAgIyBAdG9kbyBQcm92aWRlIHZpc3VhbCBmZWVkYmFjayB0byB0aGUgdXNlciB0aGF0IGl0IGlzIGRvbmUgYW5kIHRoYXQKKyAgICAgICAgIyBpdCB3b3JrZWQuCisgICAgICAgIHByaW50IHBhc3RlX3VybAorCisgICAgICAgIHNlbGYuX2FkZF90b19jbGlwYm9hcmQocGFzdGVfdXJsKQorCisgICAgZGVmIGNsaXBib2FyZF9oYW5kbGVyKHNlbGYsIHdpZGdldCwgZGF0YSk6CisgICAgICAgICIiIgorICAgICAgICAiIiIKKyAgICAgICAgKG1vZGVsLCBpdCkgPSBkYXRhCisgICAgICAgIG1lc3NhZ2UgPSBtb2RlbC5nZXQoaXQsIG1vZGVsLkNPTF9NRVNTQUdFKVswXQorCisgICAgICAgIHNlbGYuX2FkZF90b19jbGlwYm9hcmQobWVzc2FnZSkKKworY2xhc3MgQnVpbGRGYWlsdXJlVHJlZVZpZXcoZ3RrLlRyZWVWaWV3KToKKworICAgIGRlZiBfX2luaXRfXyAoc2VsZik6CisgICAgICAgIGd0ay5UcmVlVmlldy5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnNldF9ydWxlc19oaW50KEZhbHNlKQorICAgICAgICBzZWxmLnNldF9oZWFkZXJzX3Zpc2libGUoRmFsc2UpCisgICAgICAgIHNlbGYuZ2V0X3NlbGVjdGlvbigpLnNldF9tb2RlKGd0ay5TRUxFQ1RJT05fU0lOR0xFKQorCisgICAgICAgICMgVGhlIGljb24gdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB3ZSdyZSBidWlsZGluZyBvciBmYWlsZWQuCisgICAgICAgIHJlbmRlcmVyID0gSG9iQ2VsbFJlbmRlcmVyUGl4YnVmICgpCisgICAgICAgIGNvbCA9IGd0ay5UcmVlVmlld0NvbHVtbiAoIlN0YXR1cyIsIHJlbmRlcmVyKQorICAgICAgICBjb2wuYWRkX2F0dHJpYnV0ZSAocmVuZGVyZXIsICJpY29uLW5hbWUiLCBSdW5uaW5nQnVpbGRNb2RlbC5DT0xfSUNPTikKKyAgICAgICAgc2VsZi5hcHBlbmRfY29sdW1uIChjb2wpCisKKyAgICAgICAgIyBUaGUgbWVzc2FnZSBvZiB0aGUgYnVpbGQuCisgICAgICAgIHNlbGYubWVzc2FnZV9yZW5kZXJlciA9IEhvYldhcnBDZWxsUmVuZGVyZXJUZXh0IChjb2xfbnVtYmVyPTEpCisgICAgICAgIHNlbGYubWVzc2FnZV9jb2x1bW4gPSBndGsuVHJlZVZpZXdDb2x1bW4gKCJNZXNzYWdlIiwgc2VsZi5tZXNzYWdlX3JlbmRlcmVyLCB0ZXh0PVJ1bm5pbmdCdWlsZE1vZGVsLkNPTF9NRVNTQUdFLCBiYWNrZ3JvdW5kPVJ1bm5pbmdCdWlsZE1vZGVsLkNPTF9DT0xPUikKKyAgICAgICAgc2VsZi5hcHBlbmRfY29sdW1uIChzZWxmLm1lc3NhZ2VfY29sdW1uKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvc2FuaXR5Y2hlY2twYWdlLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvc2FuaXR5Y2hlY2twYWdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2Y2UyZWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9zYW5pdHljaGVja3BhZ2UucHkKQEAgLTAsMCArMSw4NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IEJvZ2RhbiBNYXJpbmVzY3UgPGJvZ2Rhbi5hLm1hcmluZXNjdUBpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrLCBnb2JqZWN0Citmcm9tIGJiLnVpLmNydW1icy5wcm9ncmVzc2JhciBpbXBvcnQgSG9iUHJvZ3Jlc3NCYXIKK2Zyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgaGljCitmcm9tIGJiLnVpLmNydW1icy5ob2JwYWdlcyBpbXBvcnQgSG9iUGFnZQorCisjCisjIFNhbml0eUNoZWNrUGFnZQorIworY2xhc3MgU2FuaXR5Q2hlY2tQYWdlIChIb2JQYWdlKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBidWlsZGVyKToKKyAgICAgICAgc3VwZXIoU2FuaXR5Q2hlY2tQYWdlLCBzZWxmKS5fX2luaXRfXyhidWlsZGVyKQorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorICAgICAgICBzZWxmLnNob3dfYWxsKCkKKworICAgIGRlZiBtYWtlX2xhYmVsKHNlbGYsIHRleHQsIGJvbGQ9VHJ1ZSk6CisgICAgICAgIGxhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgbGFiZWwuc2V0X2FsaWdubWVudCgwLjAsIDAuNSkKKyAgICAgICAgbWFyayA9ICI8c3BhbiAlcz4lczwvc3Bhbj4iICUgKHNlbGYuc3Bhbl90YWcoJ3gtbGFyZ2UnLCAnYm9sZCcpIGlmIGJvbGQgZWxzZSBzZWxmLnNwYW5fdGFnKCdtZWRpdW0nKSwgdGV4dCkKKyAgICAgICAgbGFiZWwuc2V0X21hcmt1cChtYXJrKQorICAgICAgICByZXR1cm4gbGFiZWwKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYucnVubmluZzoKKyAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgZ29iamVjdC50aW1lb3V0X2FkZCgxMDAsIHNlbGYudGltZXJfZnVuYykKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorCisgICAgZGVmIGlzX3J1bm5pbmcoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bm5pbmcKKworICAgIGRlZiB0aW1lcl9mdW5jKHNlbGYpOgorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5wdWxzZSgpCisgICAgICAgIHJldHVybiBzZWxmLnJ1bm5pbmcKKworICAgIGRlZiBjcmVhdGVfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICAjIFRhYmxlJ2QgbGF5b3V0LiAncm93cycgYW5kICdjb2xzJyBnaXZlIHRoZSB0YWJsZSBzaXplCisgICAgICAgIHJvd3MsIGNvbHMgPSAzMCwgNTAKKyAgICAgICAgc2VsZi50YWJsZSA9IGd0ay5UYWJsZShyb3dzLCBjb2xzLCBUcnVlKQorICAgICAgICBzZWxmLnBhY2tfc3RhcnQoc2VsZi50YWJsZSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzeCwgc3kgPSAyLCAyCisgICAgICAgICMgJ2luZm8nIGljb24KKyAgICAgICAgaW1hZ2UgPSBndGsuSW1hZ2UoKQorICAgICAgICBpbWFnZS5zZXRfZnJvbV9maWxlKGhpYy5JQ09OX0lORk9fRElTUExBWV9GSUxFKQorICAgICAgICBzZWxmLnRhYmxlLmF0dGFjaChpbWFnZSwgc3gsIHN4ICsgMiwgc3ksIHN5ICsgMyApCisgICAgICAgIGltYWdlLnNob3coKQorICAgICAgICAjICdDaGVja2luZycgbWVzc2FnZQorICAgICAgICBsYWJlbCA9IHNlbGYubWFrZV9sYWJlbCgnSG9iIGlzIGNoZWNraW5nIGZvciBjb3JyZWN0IGJ1aWxkIHN5c3RlbSBzZXR1cCcpCisgICAgICAgIHNlbGYudGFibGUuYXR0YWNoKGxhYmVsLCBzeCArIDIsIGNvbHMsIHN5LCBzeSArIDMsIHhwYWRkaW5nPTUgKQorICAgICAgICBsYWJlbC5zaG93KCkKKyAgICAgICAgIyAnU2hvdWxkbid0IHRha2UgbG9uZycgbWVzc2FnZS4KKyAgICAgICAgbGFiZWwgPSBzZWxmLm1ha2VfbGFiZWwoIlRoZSBjaGVjayBzaG91bGRuJ3QgdGFrZSBsb25nLiIsIEZhbHNlKQorICAgICAgICBzZWxmLnRhYmxlLmF0dGFjaChsYWJlbCwgc3ggKyAyLCBjb2xzLCBzeSArIDMsIHN5ICsgNCwgeHBhZGRpbmc9NSkKKyAgICAgICAgbGFiZWwuc2hvdygpCisgICAgICAgICMgUHJvZ3Jlc3MgYmFyCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyID0gSG9iUHJvZ3Jlc3NCYXIoKQorICAgICAgICBzZWxmLnRhYmxlLmF0dGFjaChzZWxmLnByb2dyZXNzX2Jhciwgc3ggKyAyLCBjb2xzIC0gMywgc3kgKyA1LCBzeSArIDcsIHhwYWRkaW5nPTUpCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyLnNob3coKQorICAgICAgICAjIEFsbCBkb25lCisgICAgICAgIHNlbGYudGFibGUuc2hvdygpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3V0aWxzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM5ODY0ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3V0aWxzLnB5CkBAIC0wLDAgKzEsMzQgQEAKKyMKKyMgQml0QmFrZSBVSSBVdGlscyAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisjIFRoaXMgdXRpbGl0eSBtZXRob2QgbG9va3MgZm9yIHh0ZXJtIG9yIHZ0ZSBhbmQgcmV0dXJuIHRoZSAKKyMgZnJpc3QgdG8gZXhpc3QsIGN1cnJlbnRseSB3ZSBhcmUga2VlcGluZyB0aGlzIHNpbXBsZSwgYnV0IAorIyB3ZSB3aWxsIGxpa2VseSBtb3ZlIHRoZSBvZS50ZXJtaW5hbCBpbXBsZW1lbnRhdGlvbiBpbnRvIAorIyBiaXRiYWtlIHdoaWNoIHdpbGwgYWxsb3cgbW9yZSBmbGV4aWJpbGl0eS4KKworaW1wb3J0IG9zCitpbXBvcnQgYmIKKworZGVmIHdoaWNoX3Rlcm1pbmFsKCk6CisgICAgdGVybSA9IGJiLnV0aWxzLndoaWNoKG9zLmVudmlyb25bIlBBVEgiXSwgInh0ZXJtIikKKyAgICBpZiB0ZXJtOgorICAgICAgICByZXR1cm4gdGVybSArICIgLWUgIgorICAgIHRlcm0gPSBiYi51dGlscy53aGljaChvcy5lbnZpcm9uWyJQQVRIIl0sICJ2dGUiKQorICAgIGlmIHRlcm06CisgICAgICAgIHJldHVybiB0ZXJtICsgIiAtYyAiCisgICAgcmV0dXJuIE5vbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvZGVwZXhwLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9kZXBleHAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQwYWFmYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvZGVwZXhwLnB5CkBAIC0wLDAgKzEsMzMzIEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBiYXNlZCBEZXBlbmRlbmN5IEV4cGxvcmVyCisjCisjIENvcHlyaWdodCAoQykgMjAwNyAgICAgICAgUm9zcyBCdXJ0b24KKyMgQ29weXJpZ2h0IChDKSAyMDA3IC0gMjAwOCBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHN5cworaW1wb3J0IGdvYmplY3QKK2ltcG9ydCBndGsKK2ltcG9ydCBRdWV1ZQoraW1wb3J0IHRocmVhZGluZworaW1wb3J0IHhtbHJwY2xpYgoraW1wb3J0IGJiCitpbXBvcnQgYmIuZXZlbnQKK2Zyb20gYmIudWkuY3J1bWJzLnByb2dyZXNzYmFyIGltcG9ydCBIb2JQcm9ncmVzc0JhcgorCisjIFBhY2thZ2UgTW9kZWwKKyhDT0xfUEtHX05BTUUpID0gKDApCisKKyMgRGVwZW5kZW5jeSBNb2RlbAorKFRZUEVfREVQLCBUWVBFX1JERVApID0gKDAsIDEpCisoQ09MX0RFUF9UWVBFLCBDT0xfREVQX1BBUkVOVCwgQ09MX0RFUF9QQUNLQUdFKSA9ICgwLCAxLCAyKQorCisKK2NsYXNzIFBhY2thZ2VEZXBWaWV3KGd0ay5UcmVlVmlldyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBkZXBfdHlwZSwgbGFiZWwpOgorICAgICAgICBndGsuVHJlZVZpZXcuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5jdXJyZW50ID0gTm9uZQorICAgICAgICBzZWxmLmRlcF90eXBlID0gZGVwX3R5cGUKKyAgICAgICAgc2VsZi5maWx0ZXJfbW9kZWwgPSBtb2RlbC5maWx0ZXJfbmV3KCkKKyAgICAgICAgc2VsZi5maWx0ZXJfbW9kZWwuc2V0X3Zpc2libGVfZnVuYyhzZWxmLl9maWx0ZXIpCisgICAgICAgIHNlbGYuc2V0X21vZGVsKHNlbGYuZmlsdGVyX21vZGVsKQorICAgICAgICAjc2VsZi5jb25uZWN0KCJyb3ctYWN0aXZhdGVkIiwgc2VsZi5vbl9wYWNrYWdlX2FjdGl2YXRlZCwgQ09MX0RFUF9QQUNLQUdFKQorICAgICAgICBzZWxmLmFwcGVuZF9jb2x1bW4oZ3RrLlRyZWVWaWV3Q29sdW1uKGxhYmVsLCBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpLCB0ZXh0PUNPTF9ERVBfUEFDS0FHRSkpCisKKyAgICBkZWYgX2ZpbHRlcihzZWxmLCBtb2RlbCwgaXRlcik6CisgICAgICAgICh0aGlzX3R5cGUsIHBhY2thZ2UpID0gbW9kZWwuZ2V0KGl0ZXIsIENPTF9ERVBfVFlQRSwgQ09MX0RFUF9QQVJFTlQpCisgICAgICAgIGlmIHRoaXNfdHlwZSAhPSBzZWxmLmRlcF90eXBlOiByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIHBhY2thZ2UgPT0gc2VsZi5jdXJyZW50CisKKyAgICBkZWYgc2V0X2N1cnJlbnRfcGFja2FnZShzZWxmLCBwYWNrYWdlKToKKyAgICAgICAgc2VsZi5jdXJyZW50ID0gcGFja2FnZQorICAgICAgICBzZWxmLmZpbHRlcl9tb2RlbC5yZWZpbHRlcigpCisKKworY2xhc3MgUGFja2FnZVJldmVyc2VEZXBWaWV3KGd0ay5UcmVlVmlldyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBsYWJlbCk6CisgICAgICAgIGd0ay5UcmVlVmlldy5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmN1cnJlbnQgPSBOb25lCisgICAgICAgIHNlbGYuZmlsdGVyX21vZGVsID0gbW9kZWwuZmlsdGVyX25ldygpCisgICAgICAgIHNlbGYuZmlsdGVyX21vZGVsLnNldF92aXNpYmxlX2Z1bmMoc2VsZi5fZmlsdGVyKQorICAgICAgICBzZWxmLnNldF9tb2RlbChzZWxmLmZpbHRlcl9tb2RlbCkKKyAgICAgICAgc2VsZi5hcHBlbmRfY29sdW1uKGd0ay5UcmVlVmlld0NvbHVtbihsYWJlbCwgZ3RrLkNlbGxSZW5kZXJlclRleHQoKSwgdGV4dD1DT0xfREVQX1BBUkVOVCkpCisKKyAgICBkZWYgX2ZpbHRlcihzZWxmLCBtb2RlbCwgaXRlcik6CisgICAgICAgIHBhY2thZ2UgPSBtb2RlbC5nZXRfdmFsdWUoaXRlciwgQ09MX0RFUF9QQUNLQUdFKQorICAgICAgICByZXR1cm4gcGFja2FnZSA9PSBzZWxmLmN1cnJlbnQKKworICAgIGRlZiBzZXRfY3VycmVudF9wYWNrYWdlKHNlbGYsIHBhY2thZ2UpOgorICAgICAgICBzZWxmLmN1cnJlbnQgPSBwYWNrYWdlCisgICAgICAgIHNlbGYuZmlsdGVyX21vZGVsLnJlZmlsdGVyKCkKKworCitjbGFzcyBEZXBFeHBsb3JlcihndGsuV2luZG93KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGd0ay5XaW5kb3cuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5zZXRfdGl0bGUoIkRlcGVuZGVuY3kgRXhwbG9yZXIiKQorICAgICAgICBzZWxmLnNldF9kZWZhdWx0X3NpemUoNTAwLCA1MDApCisgICAgICAgIHNlbGYuY29ubmVjdCgiZGVsZXRlLWV2ZW50IiwgZ3RrLm1haW5fcXVpdCkKKworICAgICAgICAjIENyZWF0ZSB0aGUgZGF0YSBtb2RlbHMKKyAgICAgICAgc2VsZi5wa2dfbW9kZWwgPSBndGsuTGlzdFN0b3JlKGdvYmplY3QuVFlQRV9TVFJJTkcpCisgICAgICAgIHNlbGYucGtnX21vZGVsLnNldF9zb3J0X2NvbHVtbl9pZChDT0xfUEtHX05BTUUsIGd0ay5TT1JUX0FTQ0VORElORykKKyAgICAgICAgc2VsZi5kZXBlbmRzX21vZGVsID0gZ3RrLkxpc3RTdG9yZShnb2JqZWN0LlRZUEVfSU5ULCBnb2JqZWN0LlRZUEVfU1RSSU5HLCBnb2JqZWN0LlRZUEVfU1RSSU5HKQorICAgICAgICBzZWxmLmRlcGVuZHNfbW9kZWwuc2V0X3NvcnRfY29sdW1uX2lkKENPTF9ERVBfUEFDS0FHRSwgZ3RrLlNPUlRfQVNDRU5ESU5HKQorCisgICAgICAgIHBhbmUgPSBndGsuSFBhbmVkKCkKKyAgICAgICAgcGFuZS5zZXRfcG9zaXRpb24oMjUwKQorICAgICAgICBzZWxmLmFkZChwYW5lKQorCisgICAgICAgICMgVGhlIG1hc3RlciBsaXN0IG9mIHBhY2thZ2VzCisgICAgICAgIHNjcm9sbGVkID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKKyAgICAgICAgc2Nyb2xsZWQuc2V0X3BvbGljeShndGsuUE9MSUNZX0FVVE9NQVRJQywgZ3RrLlBPTElDWV9BVVRPTUFUSUMpCisgICAgICAgIHNjcm9sbGVkLnNldF9zaGFkb3dfdHlwZShndGsuU0hBRE9XX0lOKQorCisgICAgICAgIHNlbGYucGtnX3RyZWV2aWV3ID0gZ3RrLlRyZWVWaWV3KHNlbGYucGtnX21vZGVsKQorICAgICAgICBzZWxmLnBrZ190cmVldmlldy5nZXRfc2VsZWN0aW9uKCkuY29ubmVjdCgiY2hhbmdlZCIsIHNlbGYub25fY3Vyc29yX2NoYW5nZWQpCisgICAgICAgIGNvbHVtbiA9IGd0ay5UcmVlVmlld0NvbHVtbigiUGFja2FnZSIsIGd0ay5DZWxsUmVuZGVyZXJUZXh0KCksIHRleHQ9Q09MX1BLR19OQU1FKQorICAgICAgICBzZWxmLnBrZ190cmVldmlldy5hcHBlbmRfY29sdW1uKGNvbHVtbikKKyAgICAgICAgcGFuZS5hZGQxKHNjcm9sbGVkKQorICAgICAgICBzY3JvbGxlZC5hZGQoc2VsZi5wa2dfdHJlZXZpZXcpCisKKyAgICAgICAgYm94ID0gZ3RrLlZCb3goaG9tb2dlbmVvdXM9VHJ1ZSwgc3BhY2luZz00KQorCisgICAgICAgICMgUnVudGltZSBEZXBlbmRzCisgICAgICAgIHNjcm9sbGVkID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKKyAgICAgICAgc2Nyb2xsZWQuc2V0X3BvbGljeShndGsuUE9MSUNZX0FVVE9NQVRJQywgZ3RrLlBPTElDWV9BVVRPTUFUSUMpCisgICAgICAgIHNjcm9sbGVkLnNldF9zaGFkb3dfdHlwZShndGsuU0hBRE9XX0lOKQorICAgICAgICBzZWxmLnJkZXBfdHJlZXZpZXcgPSBQYWNrYWdlRGVwVmlldyhzZWxmLmRlcGVuZHNfbW9kZWwsIFRZUEVfUkRFUCwgIlJ1bnRpbWUgRGVwZW5kcyIpCisgICAgICAgIHNlbGYucmRlcF90cmVldmlldy5jb25uZWN0KCJyb3ctYWN0aXZhdGVkIiwgc2VsZi5vbl9wYWNrYWdlX2FjdGl2YXRlZCwgQ09MX0RFUF9QQUNLQUdFKQorICAgICAgICBzY3JvbGxlZC5hZGQoc2VsZi5yZGVwX3RyZWV2aWV3KQorICAgICAgICBib3guYWRkKHNjcm9sbGVkKQorCisgICAgICAgICMgQnVpbGQgRGVwZW5kcworICAgICAgICBzY3JvbGxlZCA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisgICAgICAgIHNjcm9sbGVkLnNldF9wb2xpY3koZ3RrLlBPTElDWV9BVVRPTUFUSUMsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQorICAgICAgICBzY3JvbGxlZC5zZXRfc2hhZG93X3R5cGUoZ3RrLlNIQURPV19JTikKKyAgICAgICAgc2VsZi5kZXBfdHJlZXZpZXcgPSBQYWNrYWdlRGVwVmlldyhzZWxmLmRlcGVuZHNfbW9kZWwsIFRZUEVfREVQLCAiQnVpbGQgRGVwZW5kcyIpCisgICAgICAgIHNlbGYuZGVwX3RyZWV2aWV3LmNvbm5lY3QoInJvdy1hY3RpdmF0ZWQiLCBzZWxmLm9uX3BhY2thZ2VfYWN0aXZhdGVkLCBDT0xfREVQX1BBQ0tBR0UpCisgICAgICAgIHNjcm9sbGVkLmFkZChzZWxmLmRlcF90cmVldmlldykKKyAgICAgICAgYm94LmFkZChzY3JvbGxlZCkKKyAgICAgICAgcGFuZS5hZGQyKGJveCkKKworICAgICAgICAjIFJldmVyc2UgRGVwZW5kcworICAgICAgICBzY3JvbGxlZCA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisgICAgICAgIHNjcm9sbGVkLnNldF9wb2xpY3koZ3RrLlBPTElDWV9BVVRPTUFUSUMsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQorICAgICAgICBzY3JvbGxlZC5zZXRfc2hhZG93X3R5cGUoZ3RrLlNIQURPV19JTikKKyAgICAgICAgc2VsZi5yZXZkZXBfdHJlZXZpZXcgPSBQYWNrYWdlUmV2ZXJzZURlcFZpZXcoc2VsZi5kZXBlbmRzX21vZGVsLCAiUmV2ZXJzZSBEZXBlbmRzIikKKyAgICAgICAgc2VsZi5yZXZkZXBfdHJlZXZpZXcuY29ubmVjdCgicm93LWFjdGl2YXRlZCIsIHNlbGYub25fcGFja2FnZV9hY3RpdmF0ZWQsIENPTF9ERVBfUEFSRU5UKQorICAgICAgICBzY3JvbGxlZC5hZGQoc2VsZi5yZXZkZXBfdHJlZXZpZXcpCisgICAgICAgIGJveC5hZGQoc2Nyb2xsZWQpCisgICAgICAgIHBhbmUuYWRkMihib3gpCisKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisKKyAgICBkZWYgb25fcGFja2FnZV9hY3RpdmF0ZWQoc2VsZiwgdHJlZXZpZXcsIHBhdGgsIGNvbHVtbiwgZGF0YV9jb2wpOgorICAgICAgICBtb2RlbCA9IHRyZWV2aWV3LmdldF9tb2RlbCgpCisgICAgICAgIHBhY2thZ2UgPSBtb2RlbC5nZXRfdmFsdWUobW9kZWwuZ2V0X2l0ZXIocGF0aCksIGRhdGFfY29sKQorCisgICAgICAgIHBrZ19wYXRoID0gW10KKyAgICAgICAgZGVmIGZpbmRlcihtb2RlbCwgcGF0aCwgaXRlciwgbmVlZGxlKToKKyAgICAgICAgICAgIHBhY2thZ2UgPSBtb2RlbC5nZXRfdmFsdWUoaXRlciwgQ09MX1BLR19OQU1FKQorICAgICAgICAgICAgaWYgcGFja2FnZSA9PSBuZWVkbGU6CisgICAgICAgICAgICAgICAgcGtnX3BhdGguYXBwZW5kKHBhdGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHNlbGYucGtnX21vZGVsLmZvcmVhY2goZmluZGVyLCBwYWNrYWdlKQorICAgICAgICBpZiBwa2dfcGF0aDoKKyAgICAgICAgICAgIHNlbGYucGtnX3RyZWV2aWV3LmdldF9zZWxlY3Rpb24oKS5zZWxlY3RfcGF0aChwa2dfcGF0aFswXSkKKyAgICAgICAgICAgIHNlbGYucGtnX3RyZWV2aWV3LnNjcm9sbF90b19jZWxsKHBrZ19wYXRoWzBdKQorCisgICAgZGVmIG9uX2N1cnNvcl9jaGFuZ2VkKHNlbGYsIHNlbGVjdGlvbik6CisgICAgICAgIChtb2RlbCwgaXQpID0gc2VsZWN0aW9uLmdldF9zZWxlY3RlZCgpCisgICAgICAgIGlmIGl0IGlzIE5vbmU6CisgICAgICAgICAgICBjdXJyZW50X3BhY2thZ2UgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjdXJyZW50X3BhY2thZ2UgPSBtb2RlbC5nZXRfdmFsdWUoaXQsIENPTF9QS0dfTkFNRSkKKyAgICAgICAgc2VsZi5yZGVwX3RyZWV2aWV3LnNldF9jdXJyZW50X3BhY2thZ2UoY3VycmVudF9wYWNrYWdlKQorICAgICAgICBzZWxmLmRlcF90cmVldmlldy5zZXRfY3VycmVudF9wYWNrYWdlKGN1cnJlbnRfcGFja2FnZSkKKyAgICAgICAgc2VsZi5yZXZkZXBfdHJlZXZpZXcuc2V0X2N1cnJlbnRfcGFja2FnZShjdXJyZW50X3BhY2thZ2UpCisKKworICAgIGRlZiBwYXJzZShzZWxmLCBkZXBncmFwaCk6CisgICAgICAgIGZvciBwYWNrYWdlIGluIGRlcGdyYXBoWyJwbiJdOgorICAgICAgICAgICAgc2VsZi5wa2dfbW9kZWwuaW5zZXJ0KDAsIChwYWNrYWdlLCkpCisKKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gZGVwZ3JhcGhbImRlcGVuZHMiXToKKyAgICAgICAgICAgIGZvciBkZXBlbmQgaW4gZGVwZ3JhcGhbImRlcGVuZHMiXVtwYWNrYWdlXToKKyAgICAgICAgICAgICAgICBzZWxmLmRlcGVuZHNfbW9kZWwuaW5zZXJ0ICgwLCAoVFlQRV9ERVAsIHBhY2thZ2UsIGRlcGVuZCkpCisKKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gZGVwZ3JhcGhbInJkZXBlbmRzLXBuIl06CisgICAgICAgICAgICBmb3IgcmRlcGVuZCBpbiBkZXBncmFwaFsicmRlcGVuZHMtcG4iXVtwYWNrYWdlXToKKyAgICAgICAgICAgICAgICBzZWxmLmRlcGVuZHNfbW9kZWwuaW5zZXJ0ICgwLCAoVFlQRV9SREVQLCBwYWNrYWdlLCByZGVwZW5kKSkKKworCitjbGFzcyBndGt0aHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CisgICAgcXVpdCA9IHRocmVhZGluZy5FdmVudCgpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNodXRkb3duKToKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnNldERhZW1vbihUcnVlKQorICAgICAgICBzZWxmLnNodXRkb3duID0gc2h1dGRvd24KKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIGdvYmplY3QudGhyZWFkc19pbml0KCkKKyAgICAgICAgZ3RrLmdkay50aHJlYWRzX2luaXQoKQorICAgICAgICBndGsubWFpbigpCisgICAgICAgIGd0a3RocmVhZC5xdWl0LnNldCgpCisKKworZGVmIG1haW4oc2VydmVyLCBldmVudEhhbmRsZXIsIHBhcmFtcyk6CisgICAgdHJ5OgorICAgICAgICBwYXJhbXMudXBkYXRlRnJvbVNlcnZlcihzZXJ2ZXIpCisgICAgICAgIGNtZGxpbmUgPSBwYXJhbXMucGFyc2VBY3Rpb25zKCkKKyAgICAgICAgaWYgbm90IGNtZGxpbmU6CisgICAgICAgICAgICBwcmludCgiTm90aGluZyB0byBkby4gIFVzZSAnYml0YmFrZSB3b3JsZCcgdG8gYnVpbGQgZXZlcnl0aGluZywgb3IgcnVuICdiaXRiYWtlIC0taGVscCcgZm9yIHVzYWdlIGluZm9ybWF0aW9uLiIpCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBpZiAnbXNnJyBpbiBjbWRsaW5lIGFuZCBjbWRsaW5lWydtc2cnXToKKyAgICAgICAgICAgIHByaW50KGNtZGxpbmVbJ21zZyddKQorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgY21kbGluZSA9IGNtZGxpbmVbJ2FjdGlvbiddCisgICAgICAgIGlmIG5vdCBjbWRsaW5lIG9yIGNtZGxpbmVbMF0gIT0gImdlbmVyYXRlRG90R3JhcGgiOgorICAgICAgICAgICAgcHJpbnQoIlRoaXMgVUkgcmVxdWlyZXMgdGhlIC1nIG9wdGlvbiIpCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICByZXQsIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJnZW5lcmF0ZURlcFRyZWVFdmVudCIsIGNtZGxpbmVbMV0sIGNtZGxpbmVbMl1dKQorICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgIHByaW50KCJFcnJvciBydW5uaW5nIGNvbW1hbmQgJyVzJzogJXMiICUgKGNtZGxpbmUsIGVycm9yKSkKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGVsaWYgcmV0ICE9IFRydWU6CisgICAgICAgICAgICBwcmludCgiRXJyb3IgcnVubmluZyBjb21tYW5kICclcyc6IHJldHVybmVkICVzIiAlIChjbWRsaW5lLCByZXQpKQorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICBleGNlcHQgeG1scnBjbGliLkZhdWx0IGFzIHg6CisgICAgICAgIHByaW50KCJYTUxSUEMgRmF1bHQgZ2V0dGluZyBjb21tYW5kbGluZTpcbiAlcyIgJSB4KQorICAgICAgICByZXR1cm4KKworICAgIHRyeToKKyAgICAgICAgZ3RrLmluaXRfY2hlY2soKQorICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlBsZWFzZSBzZXQgRElTUExBWSB2YXJpYWJsZSBiZWZvcmUgcnVubmluZyB0aGlzIGNvbW1hbmQgXG4iKQorICAgICAgICByZXR1cm4KKworICAgIHNodXRkb3duID0gMAorCisgICAgZ3RrZ3VpID0gZ3RrdGhyZWFkKHNodXRkb3duKQorICAgIGd0a2d1aS5zdGFydCgpCisKKyAgICBndGsuZ2RrLnRocmVhZHNfZW50ZXIoKQorICAgIGRlcCA9IERlcEV4cGxvcmVyKCkKKyAgICBiYXJkaWFsb2cgPSBndGsuRGlhbG9nKHBhcmVudD1kZXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncz1ndGsuRElBTE9HX01PREFMfGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCkKKyAgICBiYXJkaWFsb2cuc2V0X2RlZmF1bHRfc2l6ZSg0MDAsIDUwKQorICAgIHBiYXIgPSBIb2JQcm9ncmVzc0JhcigpCisgICAgYmFyZGlhbG9nLnZib3gucGFja19zdGFydChwYmFyKQorICAgIGJhcmRpYWxvZy5zaG93X2FsbCgpCisgICAgYmFyZGlhbG9nLmNvbm5lY3QoImRlbGV0ZS1ldmVudCIsIGd0ay5tYWluX3F1aXQpCisgICAgZ3RrLmdkay50aHJlYWRzX2xlYXZlKCkKKworICAgIHByb2dyZXNzX3RvdGFsID0gMAorICAgIHdoaWxlIFRydWU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV2ZW50ID0gZXZlbnRIYW5kbGVyLndhaXRFdmVudCgwLjI1KQorICAgICAgICAgICAgaWYgZ3RrdGhyZWFkLnF1aXQuaXNTZXQoKToKKyAgICAgICAgICAgICAgICBfLCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsic3RhdGVGb3JjZVNodXRkb3duIl0pCisgICAgICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCdVbmFibGUgdG8gY2xlYW5seSBzdG9wOiAlcycgJSBlcnJvcikKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBldmVudCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZFN0YXJ0ZWQpOgorICAgICAgICAgICAgICAgIHByb2dyZXNzX3RvdGFsID0gZXZlbnQudG90YWwKKyAgICAgICAgICAgICAgICBndGsuZ2RrLnRocmVhZHNfZW50ZXIoKQorICAgICAgICAgICAgICAgIGJhcmRpYWxvZy5zZXRfdGl0bGUoIkxvYWRpbmcgQ2FjaGUiKQorICAgICAgICAgICAgICAgIHBiYXIudXBkYXRlKDApCisgICAgICAgICAgICAgICAgZ3RrLmdkay50aHJlYWRzX2xlYXZlKCkKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuQ2FjaGVMb2FkUHJvZ3Jlc3MpOgorICAgICAgICAgICAgICAgIHggPSBldmVudC5jdXJyZW50CisgICAgICAgICAgICAgICAgZ3RrLmdkay50aHJlYWRzX2VudGVyKCkKKyAgICAgICAgICAgICAgICBwYmFyLnVwZGF0ZSh4ICogMS4wIC8gcHJvZ3Jlc3NfdG90YWwpCisgICAgICAgICAgICAgICAgcGJhci5zZXRfdGl0bGUoJycpCisgICAgICAgICAgICAgICAgZ3RrLmdkay50aHJlYWRzX2xlYXZlKCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRDb21wbGV0ZWQpOgorICAgICAgICAgICAgICAgIGJhcmRpYWxvZy5oaWRlKCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZVN0YXJ0ZWQpOgorICAgICAgICAgICAgICAgIHByb2dyZXNzX3RvdGFsID0gZXZlbnQudG90YWwKKyAgICAgICAgICAgICAgICBpZiBwcm9ncmVzc190b3RhbCA9PSAwOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGd0ay5nZGsudGhyZWFkc19lbnRlcigpCisgICAgICAgICAgICAgICAgcGJhci51cGRhdGUoMCkKKyAgICAgICAgICAgICAgICBiYXJkaWFsb2cuc2V0X3RpdGxlKCJQcm9jZXNzaW5nIHJlY2lwZXMiKQorCisgICAgICAgICAgICAgICAgZ3RrLmdkay50aHJlYWRzX2xlYXZlKCkKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUGFyc2VQcm9ncmVzcyk6CisgICAgICAgICAgICAgICAgeCA9IGV2ZW50LmN1cnJlbnQKKyAgICAgICAgICAgICAgICBndGsuZ2RrLnRocmVhZHNfZW50ZXIoKQorICAgICAgICAgICAgICAgIHBiYXIudXBkYXRlKHggKiAxLjAgLyBwcm9ncmVzc190b3RhbCkKKyAgICAgICAgICAgICAgICBwYmFyLnNldF90aXRsZSgnJykKKyAgICAgICAgICAgICAgICBndGsuZ2RrLnRocmVhZHNfbGVhdmUoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlQ29tcGxldGVkKToKKyAgICAgICAgICAgICAgICBiYXJkaWFsb2cuaGlkZSgpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuRGVwVHJlZUdlbmVyYXRlZCk6CisgICAgICAgICAgICAgICAgZ3RrLmdkay50aHJlYWRzX2VudGVyKCkKKyAgICAgICAgICAgICAgICBkZXAucGFyc2UoZXZlbnQuX2RlcGdyYXBoKQorICAgICAgICAgICAgICAgIGd0ay5nZGsudGhyZWFkc19sZWF2ZSgpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZENvbXBsZXRlZCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuY29tbWFuZC5Db21tYW5kRmFpbGVkKToKKyAgICAgICAgICAgICAgICBwcmludCgiQ29tbWFuZCBleGVjdXRpb24gZmFpbGVkOiAlcyIgJSBldmVudC5lcnJvcikKKyAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQuZXhpdGNvZGUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuY29tbWFuZC5Db21tYW5kRXhpdCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LmV4aXRjb2RlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvb2tlci5Db29rZXJFeGl0KToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBpb2Vycm9yOgorICAgICAgICAgICAgIyBpZ25vcmUgaW50ZXJydXB0ZWQgaW8KKyAgICAgICAgICAgIGlmIGlvZXJyb3IuYXJnc1swXSA9PSA0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgaWYgc2h1dGRvd24gPT0gMjoKKyAgICAgICAgICAgICAgICBwcmludCgiXG5UaGlyZCBLZXlib2FyZCBJbnRlcnJ1cHQsIGV4aXQuXG4iKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBzaHV0ZG93biA9PSAxOgorICAgICAgICAgICAgICAgIHByaW50KCJcblNlY29uZCBLZXlib2FyZCBJbnRlcnJ1cHQsIHN0b3BwaW5nLi4uXG4iKQorICAgICAgICAgICAgICAgIF8sIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJzdGF0ZUZvcmNlU2h1dGRvd24iXSkKKyAgICAgICAgICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ1VuYWJsZSB0byBjbGVhbmx5IHN0b3A6ICVzJyAlIGVycm9yKQorICAgICAgICAgICAgaWYgc2h1dGRvd24gPT0gMDoKKyAgICAgICAgICAgICAgICBwcmludCgiXG5LZXlib2FyZCBJbnRlcnJ1cHQsIGNsb3NpbmcgZG93bi4uLlxuIikKKyAgICAgICAgICAgICAgICBfLCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsic3RhdGVTaHV0ZG93biJdKQorICAgICAgICAgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnVW5hYmxlIHRvIGNsZWFubHkgc2h1dGRvd246ICVzJyAlIGVycm9yKQorICAgICAgICAgICAgc2h1dGRvd24gPSBzaHV0ZG93biArIDEKKyAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvZ29nZ2xlLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9nb2dnbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRlZTdiNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvZ29nZ2xlLnB5CkBAIC0wLDAgKzEsMTIxIEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDggICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IFJvYiBCcmFkZm9yZCA8cm9iQGxpbnV4LmludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBnb2JqZWN0CitpbXBvcnQgZ3RrCitpbXBvcnQgeG1scnBjbGliCitmcm9tIGJiLnVpLmNydW1icy5ydW5uaW5nYnVpbGQgaW1wb3J0IFJ1bm5pbmdCdWlsZFRyZWVWaWV3LCBSdW5uaW5nQnVpbGQKK2Zyb20gYmIudWkuY3J1bWJzLnByb2dyZXNzIGltcG9ydCBQcm9ncmVzc0JhcgorCitpbXBvcnQgUXVldWUKKworCitkZWYgZXZlbnRfaGFuZGxlX2lkbGVfZnVuYyAoZXZlbnRIYW5kbGVyLCBidWlsZCwgcGJhcik6CisKKyAgICAjIENvbnN1bWUgYXMgbWFueSBtZXNzYWdlcyBhcyB3ZSBjYW4gaW4gdGhlIHRpbWUgYXZhaWxhYmxlIHRvIHVzCisgICAgZXZlbnQgPSBldmVudEhhbmRsZXIuZ2V0RXZlbnQoKQorICAgIHdoaWxlIGV2ZW50OgorICAgICAgICBidWlsZC5oYW5kbGVfZXZlbnQgKGV2ZW50LCBwYmFyKQorICAgICAgICBldmVudCA9IGV2ZW50SGFuZGxlci5nZXRFdmVudCgpCisKKyAgICByZXR1cm4gVHJ1ZQorCitkZWYgc2Nyb2xsX3R2X2NiIChtb2RlbCwgcGF0aCwgaXRlciwgdmlldyk6CisgICAgdmlldy5zY3JvbGxfdG9fY2VsbCAocGF0aCkKKworCisjIEB0b2RvIGhvb2sgdGhlc2UgaW50byB0aGUgR1VJIHNvIHRoZSB1c2VyIGhhcyBmZWVkYmFjay4uLgorZGVmIHJ1bm5pbmdfYnVpbGRfZmFpbGVkX2NiIChydW5uaW5nX2J1aWxkKToKKyAgICBwYXNzCisKKworZGVmIHJ1bm5pbmdfYnVpbGRfc3VjY2VlZGVkX2NiIChydW5uaW5nX2J1aWxkKToKKyAgICBwYXNzCisKKworY2xhc3MgTWFpbldpbmRvdyAoZ3RrLldpbmRvdyk6CisgICAgZGVmIF9faW5pdF9fIChzZWxmKToKKyAgICAgICAgZ3RrLldpbmRvdy5fX2luaXRfXyAoc2VsZiwgZ3RrLldJTkRPV19UT1BMRVZFTCkKKworICAgICAgICAjIFNldHVwIHRyZWUgdmlldyBhbmQgdGhlIHNjcm9sbGVkIHdpbmRvdworICAgICAgICBzY3JvbGxlZF93aW5kb3cgPSBndGsuU2Nyb2xsZWRXaW5kb3cgKCkKKyAgICAgICAgc2VsZi5hZGQgKHNjcm9sbGVkX3dpbmRvdykKKyAgICAgICAgc2VsZi5jdXJfYnVpbGRfdHYgPSBSdW5uaW5nQnVpbGRUcmVlVmlldygpCisgICAgICAgIHNlbGYuY29ubmVjdCgiZGVsZXRlLWV2ZW50IiwgZ3RrLm1haW5fcXVpdCkKKyAgICAgICAgc2VsZi5zZXRfZGVmYXVsdF9zaXplKDY0MCwgNDgwKQorICAgICAgICBzY3JvbGxlZF93aW5kb3cuYWRkIChzZWxmLmN1cl9idWlsZF90dikKKworCitkZWYgbWFpbiAoc2VydmVyLCBldmVudEhhbmRsZXIsIHBhcmFtcyk6CisgICAgZ29iamVjdC50aHJlYWRzX2luaXQoKQorICAgIGd0ay5nZGsudGhyZWFkc19pbml0KCkKKworICAgIHdpbmRvdyA9IE1haW5XaW5kb3cgKCkKKyAgICB3aW5kb3cuc2hvd19hbGwgKCkKKyAgICBwYmFyID0gUHJvZ3Jlc3NCYXIod2luZG93KQorICAgIHBiYXIuY29ubmVjdCgiZGVsZXRlLWV2ZW50IiwgZ3RrLm1haW5fcXVpdCkKKworICAgICMgQ3JlYXRlIHRoZSBvYmplY3QgZm9yIHRoZSBjdXJyZW50IGJ1aWxkCisgICAgcnVubmluZ19idWlsZCA9IFJ1bm5pbmdCdWlsZCAoKQorICAgIHdpbmRvdy5jdXJfYnVpbGRfdHYuc2V0X21vZGVsIChydW5uaW5nX2J1aWxkLm1vZGVsKQorICAgIHJ1bm5pbmdfYnVpbGQubW9kZWwuY29ubmVjdCgicm93LWluc2VydGVkIiwgc2Nyb2xsX3R2X2NiLCB3aW5kb3cuY3VyX2J1aWxkX3R2KQorICAgIHJ1bm5pbmdfYnVpbGQuY29ubmVjdCAoImJ1aWxkLXN1Y2NlZWRlZCIsIHJ1bm5pbmdfYnVpbGRfc3VjY2VlZGVkX2NiKQorICAgIHJ1bm5pbmdfYnVpbGQuY29ubmVjdCAoImJ1aWxkLWZhaWxlZCIsIHJ1bm5pbmdfYnVpbGRfZmFpbGVkX2NiKQorCisgICAgdHJ5OgorICAgICAgICBwYXJhbXMudXBkYXRlRnJvbVNlcnZlcihzZXJ2ZXIpCisgICAgICAgIGNtZGxpbmUgPSBwYXJhbXMucGFyc2VBY3Rpb25zKCkKKyAgICAgICAgaWYgbm90IGNtZGxpbmU6CisgICAgICAgICAgICBwcmludCgiTm90aGluZyB0byBkby4gIFVzZSAnYml0YmFrZSB3b3JsZCcgdG8gYnVpbGQgZXZlcnl0aGluZywgb3IgcnVuICdiaXRiYWtlIC0taGVscCcgZm9yIHVzYWdlIGluZm9ybWF0aW9uLiIpCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBpZiAnbXNnJyBpbiBjbWRsaW5lIGFuZCBjbWRsaW5lWydtc2cnXToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihjbWRsaW5lWydtc2cnXSkKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGNtZGxpbmUgPSBjbWRsaW5lWydhY3Rpb24nXQorICAgICAgICByZXQsIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoY21kbGluZSkKKyAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICBwcmludCgiRXJyb3IgcnVubmluZyBjb21tYW5kICclcyc6ICVzIiAlIChjbWRsaW5lLCBlcnJvcikpCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBlbGlmIHJldCAhPSBUcnVlOgorICAgICAgICAgICAgcHJpbnQoIkVycm9yIHJ1bm5pbmcgY29tbWFuZCAnJXMnOiByZXR1cm5lZCAlcyIgJSAoY21kbGluZSwgcmV0KSkKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgZXhjZXB0IHhtbHJwY2xpYi5GYXVsdCBhcyB4OgorICAgICAgICBwcmludCgiWE1MUlBDIEZhdWx0IGdldHRpbmcgY29tbWFuZGxpbmU6XG4gJXMiICUgeCkKKyAgICAgICAgcmV0dXJuIDEKKworICAgICMgVXNlIGEgdGltZW91dCBmdW5jdGlvbiBmb3IgcHJvYmluZyB0aGUgZXZlbnQgcXVldWUgdG8gZmluZCBvdXQgaWYgd2UKKyAgICAjIGhhdmUgYSBtZXNzYWdlIHdhaXRpbmcgZm9yIHVzLgorICAgIGdvYmplY3QudGltZW91dF9hZGQgKDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF9oYW5kbGVfaWRsZV9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nX2J1aWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBiYXIpCisKKyAgICB0cnk6CisgICAgICAgIGd0ay5tYWluKCkKKyAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBpb2Vycm9yOgorICAgICAgICAjIGlnbm9yZSBpbnRlcnJ1cHRlZCBpbworICAgICAgICBpZiBpb2Vycm9yLmFyZ3NbMF0gPT0gNDoKKyAgICAgICAgICAgIHBhc3MKKyAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgIHBhc3MKKyAgICBmaW5hbGx5OgorICAgICAgICBzZXJ2ZXIucnVuQ29tbWFuZChbInN0YXRlRm9yY2VTaHV0ZG93biJdKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2hvYi5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaG9iLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRhNWI0MTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2hvYi5weQpAQCAtMCwwICsxLDEwOSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworcmVxdWlyZW1lbnRzID0gIkZBVEFMOiBIb2IgcmVxdWlyZXMgR3RrKyAyLjIwLjAgb3IgaGlnaGVyLCBQeUd0ayAyLjIxLjAgb3IgaGlnaGVyIgordHJ5OgorICAgIGltcG9ydCBnb2JqZWN0CisgICAgaW1wb3J0IGd0aworICAgIGltcG9ydCBweWd0aworICAgIHB5Z3RrLnJlcXVpcmUoJzIuMCcpICMgdG8gYmUgY2VydGFpbiB3ZSBkb24ndCBoYXZlIGd0aysgMS54ICE/IQorICAgIGd0a3ZlciA9IGd0ay5ndGtfdmVyc2lvbgorICAgIHB5Z3RrdmVyID0gZ3RrLnB5Z3RrX3ZlcnNpb24KKyAgICBpZiBndGt2ZXIgIDwgKDIsIDIwLCAwKSBvciBweWd0a3ZlciA8ICgyLCAyMSwgMCk6CisgICAgICAgIHN5cy5leGl0KCIlcyxcbllvdSBoYXZlIEd0aysgJXMgYW5kIFB5R3RrICVzLiIgJSAocmVxdWlyZW1lbnRzLAorICAgICAgICAgICAgICAgICIuIi5qb2luKG1hcChzdHIsIGd0a3ZlcikpLAorICAgICAgICAgICAgICAgICIuIi5qb2luKG1hcChzdHIsIHB5Z3RrdmVyKSkpKQorZXhjZXB0IEltcG9ydEVycm9yIGFzIGV4YzoKKyAgICBzeXMuZXhpdCgiJXMgKCVzKS4iICUgKHJlcXVpcmVtZW50cywgc3RyKGV4YykpKQorc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkpKQordHJ5OgorICAgIGltcG9ydCBiYgorZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBleGM6CisgICAgc3lzLmV4aXQoc3RyKGV4YykpCitmcm9tIGJiLnVpIGltcG9ydCB1aWhlbHBlcgorZnJvbSBiYi51aS5jcnVtYnMuaG9ibGlzdG1vZGVsIGltcG9ydCBSZWNpcGVMaXN0TW9kZWwsIFBhY2thZ2VMaXN0TW9kZWwKK2Zyb20gYmIudWkuY3J1bWJzLmhvYmV2ZW50aGFuZGxlciBpbXBvcnQgSG9iSGFuZGxlcgorZnJvbSBiYi51aS5jcnVtYnMuYnVpbGRlciBpbXBvcnQgQnVpbGRlcgorCitmZWF0dXJlU2V0ID0gW2JiLmNvb2tlci5Db29rZXJGZWF0dXJlcy5IT0JfRVhUUkFfQ0FDSEVTLCBiYi5jb29rZXIuQ29va2VyRmVhdHVyZXMuQkFTRURBVEFTVE9SRV9UUkFDS0lOR10KKworZGVmIGV2ZW50X2hhbmRsZV9pZGxlX2Z1bmMoZXZlbnRIYW5kbGVyLCBob2JIYW5kbGVyKToKKyAgICAjIENvbnN1bWUgYXMgbWFueSBtZXNzYWdlcyBhcyB3ZSBjYW4gaW4gdGhlIHRpbWUgYXZhaWxhYmxlIHRvIHVzCisgICAgaWYgbm90IGV2ZW50SGFuZGxlcjoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZXZlbnQgPSBldmVudEhhbmRsZXIuZ2V0RXZlbnQoKQorICAgIHdoaWxlIGV2ZW50OgorICAgICAgICBob2JIYW5kbGVyLmhhbmRsZV9ldmVudChldmVudCkKKyAgICAgICAgZXZlbnQgPSBldmVudEhhbmRsZXIuZ2V0RXZlbnQoKQorICAgIHJldHVybiBUcnVlCisKK19ldnRfbGlzdCA9IFsgImJiLnJ1bnF1ZXVlLnJ1blF1ZXVlRXhpdFdhaXQiLCAiYmIuZXZlbnQuTG9nRXhlY1RUWSIsICJsb2dnaW5nLkxvZ1JlY29yZCIsCisgICAgICAgICAgICAgICJiYi5idWlsZC5UYXNrRmFpbGVkIiwgImJiLmJ1aWxkLlRhc2tCYXNlIiwgImJiLmV2ZW50LlBhcnNlU3RhcnRlZCIsCisgICAgICAgICAgICAgICJiYi5ldmVudC5QYXJzZVByb2dyZXNzIiwgImJiLmV2ZW50LlBhcnNlQ29tcGxldGVkIiwgImJiLmV2ZW50LkNhY2hlTG9hZFN0YXJ0ZWQiLAorICAgICAgICAgICAgICAiYmIuZXZlbnQuQ2FjaGVMb2FkUHJvZ3Jlc3MiLCAiYmIuZXZlbnQuQ2FjaGVMb2FkQ29tcGxldGVkIiwgImJiLmNvbW1hbmQuQ29tbWFuZEZhaWxlZCIsCisgICAgICAgICAgICAgICJiYi5jb21tYW5kLkNvbW1hbmRFeGl0IiwgImJiLmNvbW1hbmQuQ29tbWFuZENvbXBsZXRlZCIsICAiYmIuY29va2VyLkNvb2tlckV4aXQiLAorICAgICAgICAgICAgICAiYmIuZXZlbnQuTXVsdGlwbGVQcm92aWRlcnMiLCAiYmIuZXZlbnQuTm9Qcm92aWRlciIsICJiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlVGFza1N0YXJ0ZWQiLAorICAgICAgICAgICAgICAiYmIucnVucXVldWUucnVuUXVldWVUYXNrU3RhcnRlZCIsICJiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tGYWlsZWQiLCAiYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tGYWlsZWQiLAorICAgICAgICAgICAgICAiYmIuZXZlbnQuQnVpbGRCYXNlIiwgImJiLmJ1aWxkLlRhc2tTdGFydGVkIiwgImJiLmJ1aWxkLlRhc2tTdWNjZWVkZWQiLCAiYmIuYnVpbGQuVGFza0ZhaWxlZFNpbGVudCIsCisgICAgICAgICAgICAgICJiYi5ldmVudC5TYW5pdHlDaGVja1Bhc3NlZCIsICJiYi5ldmVudC5TYW5pdHlDaGVja0ZhaWxlZCIsICJiYi5ldmVudC5QYWNrYWdlSW5mbyIsCisgICAgICAgICAgICAgICJiYi5ldmVudC5UYXJnZXRzVHJlZUdlbmVyYXRlZCIsICJiYi5ldmVudC5Db25maWdGaWxlc0ZvdW5kIiwgImJiLmV2ZW50LkNvbmZpZ0ZpbGVQYXRoRm91bmQiLAorICAgICAgICAgICAgICAiYmIuZXZlbnQuRmlsZXNNYXRjaGluZ0ZvdW5kIiwgImJiLmV2ZW50Lk5ldHdvcmtUZXN0RmFpbGVkIiwgImJiLmV2ZW50Lk5ldHdvcmtUZXN0UGFzc2VkIiwKKyAgICAgICAgICAgICAgImJiLmV2ZW50LkJ1aWxkU3RhcnRlZCIsICJiYi5ldmVudC5CdWlsZENvbXBsZXRlZCIsICJiYi5ldmVudC5EaXNrRnVsbCJdCisKK2RlZiBtYWluIChzZXJ2ZXIsIGV2ZW50SGFuZGxlciwgcGFyYW1zKToKKyAgICBwYXJhbXMudXBkYXRlRnJvbVNlcnZlcihzZXJ2ZXIpCisgICAgZ29iamVjdC50aHJlYWRzX2luaXQoKQorCisgICAgIyBUaGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBIb2IgYW5kIHRoZSBiaXRiYWtlIHNlcnZlciBhcmUKKyAgICAjIHJ1bm5pbmcgb24gZGlmZmVyZW50IG1hY2hpbmVzCisgICAgIyByZWNpcGUgbW9kZWwgYW5kIHBhY2thZ2UgbW9kZWwKKyAgICByZWNpcGVfbW9kZWwgPSBSZWNpcGVMaXN0TW9kZWwoKQorICAgIHBhY2thZ2VfbW9kZWwgPSBQYWNrYWdlTGlzdE1vZGVsKCkKKworICAgIGxsZXZlbCwgZGVidWdfZG9tYWlucyA9IGJiLm1zZy5jb25zdHJ1Y3RMb2dPcHRpb25zKCkKKyAgICBzZXJ2ZXIucnVuQ29tbWFuZChbInNldEV2ZW50TWFzayIsIHNlcnZlci5nZXRFdmVudEhhbmRsZSgpLCBsbGV2ZWwsIGRlYnVnX2RvbWFpbnMsIF9ldnRfbGlzdF0pCisgICAgaG9iSGFuZGxlciA9IEhvYkhhbmRsZXIoc2VydmVyLCByZWNpcGVfbW9kZWwsIHBhY2thZ2VfbW9kZWwpCisgICAgYnVpbGRlciA9IEJ1aWxkZXIoaG9iSGFuZGxlciwgcmVjaXBlX21vZGVsLCBwYWNrYWdlX21vZGVsKQorCisgICAgIyBUaGlzIHRpbWVvdXQgZnVuY3Rpb24gcmVndWxhcmx5IHByb2JlcyB0aGUgZXZlbnQgcXVldWUgdG8gZmluZCBvdXQgaWYgd2UKKyAgICAjIGhhdmUgYW55IG1lc3NhZ2VzIHdhaXRpbmcgZm9yIHVzLgorICAgIGdvYmplY3QudGltZW91dF9hZGQoMTAsIGV2ZW50X2hhbmRsZV9pZGxlX2Z1bmMsIGV2ZW50SGFuZGxlciwgaG9iSGFuZGxlcikKKworICAgIHRyeToKKyAgICAgICAgZ3RrLm1haW4oKQorICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGlvZXJyb3I6CisgICAgICAgICMgaWdub3JlIGludGVycnVwdGVkIGlvCisgICAgICAgIGlmIGlvZXJyb3IuYXJnc1swXSA9PSA0OgorICAgICAgICAgICAgcGFzcworICAgIGZpbmFsbHk6CisgICAgICAgIGhvYkhhbmRsZXIuY2FuY2VsX2J1aWxkKGZvcmNlID0gVHJ1ZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0cnk6CisgICAgICAgIHJldCA9IG1haW4oKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJldCA9IDEKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKDE1KQorICAgIHN5cy5leGl0KHJldCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW1hZ2VzL2ltYWdlc19kaXNwbGF5LnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW1hZ2VzL2ltYWdlc19kaXNwbGF5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2Y4NzEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbWFnZXMvaW1hZ2VzX2Rpc3BsYXkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW1hZ2VzL2ltYWdlc19ob3Zlci5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2ltYWdlcy9pbWFnZXNfaG92ZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkOWNkOTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2ltYWdlcy9pbWFnZXNfaG92ZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9hZGQtaG92ZXIucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmRpY2F0b3JzL2FkZC1ob3Zlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI2ZGY3NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9hZGQtaG92ZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9hZGQucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmRpY2F0b3JzL2FkZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFlNzA5MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9hZGQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9hbGVydC5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvYWxlcnQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYzZmNTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvYWxlcnQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9jb25maXJtYXRpb24ucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmRpY2F0b3JzL2NvbmZpcm1hdGlvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E1NDAyZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9jb25maXJtYXRpb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9kZW5pZWQucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmRpY2F0b3JzL2RlbmllZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUzNWM3ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9kZW5pZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9lcnJvci5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvZXJyb3IucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNmE4YzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvZXJyb3IucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9pbmZvLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9pbmZvLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZThlOGQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmRpY2F0b3JzL2luZm8ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9pc3N1ZXMucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmRpY2F0b3JzL2lzc3Vlcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBjNzQ2MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9pc3N1ZXMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9yZWZyZXNoLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9yZWZyZXNoLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjZjNDE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmRpY2F0b3JzL3JlZnJlc2gucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9yZW1vdmUtaG92ZXIucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmRpY2F0b3JzL3JlbW92ZS1ob3Zlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE1N2M2OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9yZW1vdmUtaG92ZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9yZW1vdmUucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmRpY2F0b3JzL3JlbW92ZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVjM2MyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9yZW1vdmUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy90aWNrLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy90aWNrLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWFhZDM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmRpY2F0b3JzL3RpY2sucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5mby9pbmZvX2Rpc3BsYXkucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmZvL2luZm9fZGlzcGxheS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFmYmJhMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5mby9pbmZvX2Rpc3BsYXkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5mby9pbmZvX2hvdmVyLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5mby9pbmZvX2hvdmVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWQyOTRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmZvL2luZm9faG92ZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvbGF5ZXJzL2xheWVyc19kaXNwbGF5LnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvbGF5ZXJzL2xheWVyc19kaXNwbGF5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2Y5MDUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9sYXllcnMvbGF5ZXJzX2Rpc3BsYXkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvbGF5ZXJzL2xheWVyc19ob3Zlci5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2xheWVycy9sYXllcnNfaG92ZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZjNjZTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2xheWVycy9sYXllcnNfaG92ZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvcGFja2FnZXMvcGFja2FnZXNfZGlzcGxheS5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3BhY2thZ2VzL3BhY2thZ2VzX2Rpc3BsYXkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZDBhNTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3BhY2thZ2VzL3BhY2thZ2VzX2Rpc3BsYXkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvcGFja2FnZXMvcGFja2FnZXNfaG92ZXIucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9wYWNrYWdlcy9wYWNrYWdlc19ob3Zlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA4MTE2NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvcGFja2FnZXMvcGFja2FnZXNfaG92ZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvcmVjaXBlL3JlY2lwZV9kaXNwbGF5LnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvcmVjaXBlL3JlY2lwZV9kaXNwbGF5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTgwOWJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9yZWNpcGUvcmVjaXBlX2Rpc3BsYXkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvcmVjaXBlL3JlY2lwZV9ob3Zlci5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3JlY2lwZS9yZWNpcGVfaG92ZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNDhkYTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3JlY2lwZS9yZWNpcGVfaG92ZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvc2V0dGluZ3Mvc2V0dGluZ3NfZGlzcGxheS5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3NldHRpbmdzL3NldHRpbmdzX2Rpc3BsYXkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YzQ2NGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3NldHRpbmdzL3NldHRpbmdzX2Rpc3BsYXkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvc2V0dGluZ3Mvc2V0dGluZ3NfaG92ZXIucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9zZXR0aW5ncy9zZXR0aW5nc19ob3Zlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyYTBiZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvc2V0dGluZ3Mvc2V0dGluZ3NfaG92ZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvdGVtcGxhdGVzL3RlbXBsYXRlc19kaXNwbGF5LnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvdGVtcGxhdGVzL3RlbXBsYXRlc19kaXNwbGF5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTNjN2FmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy90ZW1wbGF0ZXMvdGVtcGxhdGVzX2Rpc3BsYXkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvdGVtcGxhdGVzL3RlbXBsYXRlc19ob3Zlci5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3RlbXBsYXRlcy90ZW1wbGF0ZXNfaG92ZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYjcxNjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3RlbXBsYXRlcy90ZW1wbGF0ZXNfaG92ZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkva25vdHR5LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9rbm90dHkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJlZTI0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkva25vdHR5LnB5CkBAIC0wLDAgKzEsNTY0IEBACisjCisjIEJpdEJha2UgKE5vKVRUWSBVSSBJbXBsZW1lbnRhdGlvbgorIworIyBIYW5kbGluZyBvdXRwdXQgdG8gVFRZcyBvciBmaWxlcyAobm8gVFRZKQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMiBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB4bWxycGNsaWIKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcHJvZ3Jlc3NiYXIKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBiYi5tc2cKK2ltcG9ydCB0aW1lCitpbXBvcnQgZmNudGwKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBjb3B5CitpbXBvcnQgYXRleGl0Citmcm9tIGJiLnVpIGltcG9ydCB1aWhlbHBlcgorCitmZWF0dXJlU2V0ID0gW2JiLmNvb2tlci5Db29rZXJGZWF0dXJlcy5TRU5EX1NBTklUWUVWRU5UU10KKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UiKQoraW50ZXJhY3RpdmUgPSBzeXMuc3Rkb3V0LmlzYXR0eSgpCisKK2NsYXNzIEJCUHJvZ3Jlc3MocHJvZ3Jlc3NiYXIuUHJvZ3Jlc3NCYXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2csIG1heHZhbCk6CisgICAgICAgIHNlbGYubXNnID0gbXNnCisgICAgICAgIHdpZGdldHMgPSBbcHJvZ3Jlc3NiYXIuUGVyY2VudGFnZSgpLCAnICcsIHByb2dyZXNzYmFyLkJhcigpLCAnICcsCisgICAgICAgICAgIHByb2dyZXNzYmFyLkVUQSgpXQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3Jlc2l6ZV9kZWZhdWx0ID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHV0lOQ0gpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuX3Jlc2l6ZV9kZWZhdWx0ID0gTm9uZQorICAgICAgICBwcm9ncmVzc2Jhci5Qcm9ncmVzc0Jhci5fX2luaXRfXyhzZWxmLCBtYXh2YWwsIFtzZWxmLm1zZyArICI6ICJdICsgd2lkZ2V0cywgZmQ9c3lzLnN0ZG91dCkKKworICAgIGRlZiBfaGFuZGxlX3Jlc2l6ZShzZWxmLCBzaWdudW0sIGZyYW1lKToKKyAgICAgICAgcHJvZ3Jlc3NiYXIuUHJvZ3Jlc3NCYXIuX2hhbmRsZV9yZXNpemUoc2VsZiwgc2lnbnVtLCBmcmFtZSkKKyAgICAgICAgaWYgc2VsZi5fcmVzaXplX2RlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLl9yZXNpemVfZGVmYXVsdChzaWdudW0sIGZyYW1lKQorICAgIGRlZiBmaW5pc2goc2VsZik6CisgICAgICAgIHByb2dyZXNzYmFyLlByb2dyZXNzQmFyLmZpbmlzaChzZWxmKQorICAgICAgICBpZiBzZWxmLl9yZXNpemVfZGVmYXVsdDoKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1dJTkNILCBzZWxmLl9yZXNpemVfZGVmYXVsdCkKKworY2xhc3MgTm9uSW50ZXJhY3RpdmVQcm9ncmVzcyhvYmplY3QpOgorICAgIGZvYmogPSBzeXMuc3Rkb3V0CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbXNnLCBtYXh2YWwpOgorICAgICAgICBzZWxmLm1zZyA9IG1zZworICAgICAgICBzZWxmLm1heHZhbCA9IG1heHZhbAorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBzZWxmLmZvYmoud3JpdGUoIiVzLi4uIiAlIHNlbGYubXNnKQorICAgICAgICBzZWxmLmZvYmouZmx1c2goKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIHVwZGF0ZShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBmaW5pc2goc2VsZik6CisgICAgICAgIHNlbGYuZm9iai53cml0ZSgiZG9uZS5cbiIpCisgICAgICAgIHNlbGYuZm9iai5mbHVzaCgpCisKK2RlZiBuZXdfcHJvZ3Jlc3MobXNnLCBtYXh2YWwpOgorICAgIGlmIGludGVyYWN0aXZlOgorICAgICAgICByZXR1cm4gQkJQcm9ncmVzcyhtc2csIG1heHZhbCkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gTm9uSW50ZXJhY3RpdmVQcm9ncmVzcyhtc2csIG1heHZhbCkKKworZGVmIHBsdXJhbGlzZShzaW5ndWxhciwgcGx1cmFsLCBxdHkpOgorICAgIGlmKHF0eSA9PSAxKToKKyAgICAgICAgcmV0dXJuIHNpbmd1bGFyICUgcXR5CisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHBsdXJhbCAlIHF0eQorCisKK2NsYXNzIEludGVyYWN0Q29uc29sZUxvZ0ZpbHRlcihsb2dnaW5nLkZpbHRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRmLCBmb3JtYXQpOgorICAgICAgICBzZWxmLnRmID0gdGYKKyAgICAgICAgc2VsZi5mb3JtYXQgPSBmb3JtYXQKKworICAgIGRlZiBmaWx0ZXIoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgaWYgcmVjb3JkLmxldmVsbm8gPT0gc2VsZi5mb3JtYXQuTk9URSBhbmQgKHJlY29yZC5tc2cuc3RhcnRzd2l0aCgiUnVubmluZyIpIG9yIHJlY29yZC5tc2cuc3RhcnRzd2l0aCgicmVjaXBlICIpKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBzZWxmLnRmLmNsZWFyRm9vdGVyKCkKKyAgICAgICAgcmV0dXJuIFRydWUKKworY2xhc3MgVGVybWluYWxGaWx0ZXIob2JqZWN0KToKKyAgICBjb2x1bW5zID0gODAKKworICAgIGRlZiBzaWd3aW5jaF9oYW5kbGUoc2VsZiwgc2lnbnVtLCBmcmFtZSk6CisgICAgICAgIHNlbGYuY29sdW1ucyA9IHNlbGYuZ2V0VGVybWluYWxDb2x1bW5zKCkKKyAgICAgICAgaWYgc2VsZi5fc2lnd2luY2hfZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYuX3NpZ3dpbmNoX2RlZmF1bHQoc2lnbnVtLCBmcmFtZSkKKworICAgIGRlZiBnZXRUZXJtaW5hbENvbHVtbnMoc2VsZik6CisgICAgICAgIGRlZiBpb2N0bF9HV0lOU1ooZmQpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNyID0gc3RydWN0LnVucGFjaygnaGgnLCBmY250bC5pb2N0bChmZCwgc2VsZi50ZXJtaW9zLlRJT0NHV0lOU1osICcxMjM0JykpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHJldHVybiBjcgorICAgICAgICBjciA9IGlvY3RsX0dXSU5TWihzeXMuc3Rkb3V0LmZpbGVubygpKQorICAgICAgICBpZiBub3QgY3I6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmQgPSBvcy5vcGVuKG9zLmN0ZXJtaWQoKSwgb3MuT19SRE9OTFkpCisgICAgICAgICAgICAgICAgY3IgPSBpb2N0bF9HV0lOU1ooZmQpCisgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBpZiBub3QgY3I6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY3IgPSAoZW52WydMSU5FUyddLCBlbnZbJ0NPTFVNTlMnXSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBjciA9ICgyNSwgODApCisgICAgICAgIHJldHVybiBjclsxXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1haW4sIGhlbHBlciwgY29uc29sZSwgZXJyY29uc29sZSwgZm9ybWF0KToKKyAgICAgICAgc2VsZi5tYWluID0gbWFpbgorICAgICAgICBzZWxmLmhlbHBlciA9IGhlbHBlcgorICAgICAgICBzZWxmLmN1dSA9IE5vbmUKKyAgICAgICAgc2VsZi5zdGRpbmJhY2t1cCA9IE5vbmUKKyAgICAgICAgc2VsZi5pbnRlcmFjdGl2ZSA9IHN5cy5zdGRvdXQuaXNhdHR5KCkKKyAgICAgICAgc2VsZi5mb290ZXJfcHJlc2VudCA9IEZhbHNlCisgICAgICAgIHNlbGYubGFzdHBpZHMgPSBbXQorCisgICAgICAgIGlmIG5vdCBzZWxmLmludGVyYWN0aXZlOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IGN1cnNlcworICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBzeXMuZXhpdCgiRkFUQUw6IFRoZSBrbm90dHkgdWkgY291bGQgbm90IGxvYWQgdGhlIHJlcXVpcmVkIGN1cnNlcyBweXRob24gbW9kdWxlLiIpCisKKyAgICAgICAgaW1wb3J0IHRlcm1pb3MKKyAgICAgICAgc2VsZi5jdXJzZXMgPSBjdXJzZXMKKyAgICAgICAgc2VsZi50ZXJtaW9zID0gdGVybWlvcworICAgICAgICB0cnk6CisgICAgICAgICAgICBmZCA9IHN5cy5zdGRpbi5maWxlbm8oKQorICAgICAgICAgICAgc2VsZi5zdGRpbmJhY2t1cCA9IHRlcm1pb3MudGNnZXRhdHRyKGZkKQorICAgICAgICAgICAgbmV3ID0gY29weS5kZWVwY29weShzZWxmLnN0ZGluYmFja3VwKQorICAgICAgICAgICAgbmV3WzNdID0gbmV3WzNdICYgfnRlcm1pb3MuRUNITworICAgICAgICAgICAgdGVybWlvcy50Y3NldGF0dHIoZmQsIHRlcm1pb3MuVENTQURSQUlOLCBuZXcpCisgICAgICAgICAgICBjdXJzZXMuc2V0dXB0ZXJtKCkKKyAgICAgICAgICAgIGlmIGN1cnNlcy50aWdldG51bSgiY29sb3JzIikgPiAyOgorICAgICAgICAgICAgICAgIGZvcm1hdC5lbmFibGVfY29sb3IoKQorICAgICAgICAgICAgc2VsZi5lZCA9IGN1cnNlcy50aWdldHN0cigiZWQiKQorICAgICAgICAgICAgaWYgc2VsZi5lZDoKKyAgICAgICAgICAgICAgICBzZWxmLmN1dSA9IGN1cnNlcy50aWdldHN0cigiY3V1IikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9zaWd3aW5jaF9kZWZhdWx0ID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHV0lOQ0gpCisgICAgICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHV0lOQ0gsIHNlbGYuc2lnd2luY2hfaGFuZGxlKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHNlbGYuY29sdW1ucyA9IHNlbGYuZ2V0VGVybWluYWxDb2x1bW5zKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5jdXUgPSBOb25lCisgICAgICAgIGNvbnNvbGUuYWRkRmlsdGVyKEludGVyYWN0Q29uc29sZUxvZ0ZpbHRlcihzZWxmLCBmb3JtYXQpKQorICAgICAgICBlcnJjb25zb2xlLmFkZEZpbHRlcihJbnRlcmFjdENvbnNvbGVMb2dGaWx0ZXIoc2VsZiwgZm9ybWF0KSkKKworICAgIGRlZiBjbGVhckZvb3RlcihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5mb290ZXJfcHJlc2VudDoKKyAgICAgICAgICAgIGxpbmVzID0gc2VsZi5mb290ZXJfcHJlc2VudAorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShzZWxmLmN1cnNlcy50cGFybShzZWxmLmN1dSwgbGluZXMpKQorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShzZWxmLmN1cnNlcy50cGFybShzZWxmLmVkKSkKKyAgICAgICAgc2VsZi5mb290ZXJfcHJlc2VudCA9IEZhbHNlCisKKyAgICBkZWYgdXBkYXRlRm9vdGVyKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5jdXU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgYWN0aXZldGFza3MgPSBzZWxmLmhlbHBlci5ydW5uaW5nX3Rhc2tzCisgICAgICAgIGZhaWxlZHRhc2tzID0gc2VsZi5oZWxwZXIuZmFpbGVkX3Rhc2tzCisgICAgICAgIHJ1bm5pbmdwaWRzID0gc2VsZi5oZWxwZXIucnVubmluZ19waWRzCisgICAgICAgIGlmIHNlbGYuZm9vdGVyX3ByZXNlbnQgYW5kIChzZWxmLmxhc3Rjb3VudCA9PSBzZWxmLmhlbHBlci50YXNrbnVtYmVyX2N1cnJlbnQpIGFuZCAoc2VsZi5sYXN0cGlkcyA9PSBydW5uaW5ncGlkcyk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5mb290ZXJfcHJlc2VudDoKKyAgICAgICAgICAgIHNlbGYuY2xlYXJGb290ZXIoKQorICAgICAgICBpZiAobm90IHNlbGYuaGVscGVyLnRhc2tudW1iZXJfdG90YWwgb3Igc2VsZi5oZWxwZXIudGFza251bWJlcl9jdXJyZW50ID09IHNlbGYuaGVscGVyLnRhc2tudW1iZXJfdG90YWwpIGFuZCBub3QgbGVuKGFjdGl2ZXRhc2tzKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0YXNrcyA9IFtdCisgICAgICAgIGZvciB0IGluIHJ1bm5pbmdwaWRzOgorICAgICAgICAgICAgdGFza3MuYXBwZW5kKCIlcyAocGlkICVzKSIgJSAoYWN0aXZldGFza3NbdF1bInRpdGxlIl0sIHQpKQorCisgICAgICAgIGlmIHNlbGYubWFpbi5zaHV0ZG93bjoKKyAgICAgICAgICAgIGNvbnRlbnQgPSAiV2FpdGluZyBmb3IgJXMgcnVubmluZyB0YXNrcyB0byBmaW5pc2g6IiAlIGxlbihhY3RpdmV0YXNrcykKKyAgICAgICAgZWxpZiBub3QgbGVuKGFjdGl2ZXRhc2tzKToKKyAgICAgICAgICAgIGNvbnRlbnQgPSAiTm8gY3VycmVudGx5IHJ1bm5pbmcgdGFza3MgKCVzIG9mICVzKSIgJSAoc2VsZi5oZWxwZXIudGFza251bWJlcl9jdXJyZW50LCBzZWxmLmhlbHBlci50YXNrbnVtYmVyX3RvdGFsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29udGVudCA9ICJDdXJyZW50bHkgJXMgcnVubmluZyB0YXNrcyAoJXMgb2YgJXMpOiIgJSAobGVuKGFjdGl2ZXRhc2tzKSwgc2VsZi5oZWxwZXIudGFza251bWJlcl9jdXJyZW50LCBzZWxmLmhlbHBlci50YXNrbnVtYmVyX3RvdGFsKQorICAgICAgICBwcmludChjb250ZW50KQorICAgICAgICBsaW5lcyA9IDEgKyBpbnQobGVuKGNvbnRlbnQpIC8gKHNlbGYuY29sdW1ucyArIDEpKQorICAgICAgICBmb3IgdGFza251bSwgdGFzayBpbiBlbnVtZXJhdGUodGFza3MpOgorICAgICAgICAgICAgY29udGVudCA9ICIlczogJXMiICUgKHRhc2tudW0sIHRhc2spCisgICAgICAgICAgICBwcmludChjb250ZW50KQorICAgICAgICAgICAgbGluZXMgPSBsaW5lcyArIDEgKyBpbnQobGVuKGNvbnRlbnQpIC8gKHNlbGYuY29sdW1ucyArIDEpKQorICAgICAgICBzZWxmLmZvb3Rlcl9wcmVzZW50ID0gbGluZXMKKyAgICAgICAgc2VsZi5sYXN0cGlkcyA9IHJ1bm5pbmdwaWRzWzpdCisgICAgICAgIHNlbGYubGFzdGNvdW50ID0gc2VsZi5oZWxwZXIudGFza251bWJlcl9jdXJyZW50CisKKyAgICBkZWYgZmluaXNoKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnN0ZGluYmFja3VwOgorICAgICAgICAgICAgZmQgPSBzeXMuc3RkaW4uZmlsZW5vKCkKKyAgICAgICAgICAgIHNlbGYudGVybWlvcy50Y3NldGF0dHIoZmQsIHNlbGYudGVybWlvcy5UQ1NBRFJBSU4sIHNlbGYuc3RkaW5iYWNrdXApCisKK2RlZiBfbG9nX3NldHRpbmdzX2Zyb21fc2VydmVyKHNlcnZlcik6CisgICAgIyBHZXQgdmFsdWVzIG9mIHZhcmlhYmxlcyB3aGljaCBjb250cm9sIG91ciBvdXRwdXQKKyAgICBpbmNsdWRlbG9ncywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCSU5DTFVERUxPR1MiXSkKKyAgICBpZiBlcnJvcjoKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZ2V0IHRoZSB2YWx1ZSBvZiBCQklOQ0xVREVMT0dTIHZhcmlhYmxlOiAlcyIgJSBlcnJvcikKKyAgICAgICAgcmFpc2UgQmFzZUV4Y2VwdGlvbihlcnJvcikKKyAgICBsb2dsaW5lcywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCSU5DTFVERUxPR1NfTElORVMiXSkKKyAgICBpZiBlcnJvcjoKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZ2V0IHRoZSB2YWx1ZSBvZiBCQklOQ0xVREVMT0dTX0xJTkVTIHZhcmlhYmxlOiAlcyIgJSBlcnJvcikKKyAgICAgICAgcmFpc2UgQmFzZUV4Y2VwdGlvbihlcnJvcikKKyAgICBjb25zb2xlbG9nZmlsZSwgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCX0NPTlNPTEVMT0ciXSkKKyAgICBpZiBlcnJvcjoKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZ2V0IHRoZSB2YWx1ZSBvZiBCQl9DT05TT0xFTE9HIHZhcmlhYmxlOiAlcyIgJSBlcnJvcikKKyAgICAgICAgcmFpc2UgQmFzZUV4Y2VwdGlvbihlcnJvcikKKyAgICByZXR1cm4gaW5jbHVkZWxvZ3MsIGxvZ2xpbmVzLCBjb25zb2xlbG9nZmlsZQorCitfZXZ0X2xpc3QgPSBbICJiYi5ydW5xdWV1ZS5ydW5RdWV1ZUV4aXRXYWl0IiwgImJiLmV2ZW50LkxvZ0V4ZWNUVFkiLCAibG9nZ2luZy5Mb2dSZWNvcmQiLAorICAgICAgICAgICAgICAiYmIuYnVpbGQuVGFza0ZhaWxlZCIsICJiYi5idWlsZC5UYXNrQmFzZSIsICJiYi5ldmVudC5QYXJzZVN0YXJ0ZWQiLAorICAgICAgICAgICAgICAiYmIuZXZlbnQuUGFyc2VQcm9ncmVzcyIsICJiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCIsICJiYi5ldmVudC5DYWNoZUxvYWRTdGFydGVkIiwKKyAgICAgICAgICAgICAgImJiLmV2ZW50LkNhY2hlTG9hZFByb2dyZXNzIiwgImJiLmV2ZW50LkNhY2hlTG9hZENvbXBsZXRlZCIsICJiYi5jb21tYW5kLkNvbW1hbmRGYWlsZWQiLAorICAgICAgICAgICAgICAiYmIuY29tbWFuZC5Db21tYW5kRXhpdCIsICJiYi5jb21tYW5kLkNvbW1hbmRDb21wbGV0ZWQiLCAgImJiLmNvb2tlci5Db29rZXJFeGl0IiwKKyAgICAgICAgICAgICAgImJiLmV2ZW50Lk11bHRpcGxlUHJvdmlkZXJzIiwgImJiLmV2ZW50Lk5vUHJvdmlkZXIiLCAiYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tTdGFydGVkIiwKKyAgICAgICAgICAgICAgImJiLnJ1bnF1ZXVlLnJ1blF1ZXVlVGFza1N0YXJ0ZWQiLCAiYmIucnVucXVldWUucnVuUXVldWVUYXNrRmFpbGVkIiwgImJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrRmFpbGVkIiwKKyAgICAgICAgICAgICAgImJiLmV2ZW50LkJ1aWxkQmFzZSIsICJiYi5idWlsZC5UYXNrU3RhcnRlZCIsICJiYi5idWlsZC5UYXNrU3VjY2VlZGVkIiwgImJiLmJ1aWxkLlRhc2tGYWlsZWRTaWxlbnQiXQorCitkZWYgbWFpbihzZXJ2ZXIsIGV2ZW50SGFuZGxlciwgcGFyYW1zLCB0ZiA9IFRlcm1pbmFsRmlsdGVyKToKKworICAgIGluY2x1ZGVsb2dzLCBsb2dsaW5lcywgY29uc29sZWxvZ2ZpbGUgPSBfbG9nX3NldHRpbmdzX2Zyb21fc2VydmVyKHNlcnZlcikKKworICAgIGlmIHN5cy5zdGRpbi5pc2F0dHkoKSBhbmQgc3lzLnN0ZG91dC5pc2F0dHkoKToKKyAgICAgICAgbG9nX2V4ZWNfdHR5ID0gVHJ1ZQorICAgIGVsc2U6CisgICAgICAgIGxvZ19leGVjX3R0eSA9IEZhbHNlCisKKyAgICBoZWxwZXIgPSB1aWhlbHBlci5CQlVJSGVscGVyKCkKKworICAgIGNvbnNvbGUgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc3lzLnN0ZG91dCkKKyAgICBlcnJjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN5cy5zdGRlcnIpCisgICAgZm9ybWF0X3N0ciA9ICIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIKKyAgICBmb3JtYXQgPSBiYi5tc2cuQkJMb2dGb3JtYXR0ZXIoZm9ybWF0X3N0cikKKyAgICBiYi5tc2cuYWRkRGVmYXVsdGxvZ0ZpbHRlcihjb25zb2xlLCBiYi5tc2cuQkJMb2dGaWx0ZXJTdGRPdXQpCisgICAgYmIubXNnLmFkZERlZmF1bHRsb2dGaWx0ZXIoZXJyY29uc29sZSwgYmIubXNnLkJCTG9nRmlsdGVyU3RkRXJyKQorICAgIGNvbnNvbGUuc2V0Rm9ybWF0dGVyKGZvcm1hdCkKKyAgICBlcnJjb25zb2xlLnNldEZvcm1hdHRlcihmb3JtYXQpCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIoY29uc29sZSkKKyAgICBsb2dnZXIuYWRkSGFuZGxlcihlcnJjb25zb2xlKQorCisgICAgaWYgcGFyYW1zLm9wdGlvbnMucmVtb3RlX3NlcnZlciBhbmQgcGFyYW1zLm9wdGlvbnMua2lsbF9zZXJ2ZXI6CisgICAgICAgIHNlcnZlci50ZXJtaW5hdGVTZXJ2ZXIoKQorICAgICAgICByZXR1cm4KKworICAgIGlmIGNvbnNvbGVsb2dmaWxlIGFuZCBub3QgcGFyYW1zLm9wdGlvbnMuc2hvd19lbnZpcm9ubWVudCBhbmQgbm90IHBhcmFtcy5vcHRpb25zLnNob3dfdmVyc2lvbnM6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoY29uc29sZWxvZ2ZpbGUpKQorICAgICAgICBjb25sb2dmb3JtYXQgPSBiYi5tc2cuQkJMb2dGb3JtYXR0ZXIoZm9ybWF0X3N0cikKKyAgICAgICAgY29uc29sZWxvZyA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIoY29uc29sZWxvZ2ZpbGUpCisgICAgICAgIGJiLm1zZy5hZGREZWZhdWx0bG9nRmlsdGVyKGNvbnNvbGVsb2cpCisgICAgICAgIGNvbnNvbGVsb2cuc2V0Rm9ybWF0dGVyKGNvbmxvZ2Zvcm1hdCkKKyAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoY29uc29sZWxvZykKKworICAgIGxsZXZlbCwgZGVidWdfZG9tYWlucyA9IGJiLm1zZy5jb25zdHJ1Y3RMb2dPcHRpb25zKCkKKyAgICBzZXJ2ZXIucnVuQ29tbWFuZChbInNldEV2ZW50TWFzayIsIHNlcnZlci5nZXRFdmVudEhhbmRsZSgpLCBsbGV2ZWwsIGRlYnVnX2RvbWFpbnMsIF9ldnRfbGlzdF0pCisKKyAgICBpZiBub3QgcGFyYW1zLm9ic2VydmVfb25seToKKyAgICAgICAgcGFyYW1zLnVwZGF0ZUZyb21TZXJ2ZXIoc2VydmVyKQorICAgICAgICBwYXJhbXMudXBkYXRlVG9TZXJ2ZXIoc2VydmVyLCBvcy5lbnZpcm9uLmNvcHkoKSkKKyAgICAgICAgY21kbGluZSA9IHBhcmFtcy5wYXJzZUFjdGlvbnMoKQorICAgICAgICBpZiBub3QgY21kbGluZToKKyAgICAgICAgICAgIHByaW50KCJOb3RoaW5nIHRvIGRvLiAgVXNlICdiaXRiYWtlIHdvcmxkJyB0byBidWlsZCBldmVyeXRoaW5nLCBvciBydW4gJ2JpdGJha2UgLS1oZWxwJyBmb3IgdXNhZ2UgaW5mb3JtYXRpb24uIikKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGlmICdtc2cnIGluIGNtZGxpbmUgYW5kIGNtZGxpbmVbJ21zZyddOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGNtZGxpbmVbJ21zZyddKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICByZXQsIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoY21kbGluZVsnYWN0aW9uJ10pCisgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJDb21tYW5kICclcycgZmFpbGVkOiAlcyIgJSAoY21kbGluZSwgZXJyb3IpKQorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZWxpZiByZXQgIT0gVHJ1ZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ29tbWFuZCAnJXMnIGZhaWxlZDogcmV0dXJuZWQgJXMiICUgKGNtZGxpbmUsIHJldCkpCisgICAgICAgICAgICByZXR1cm4gMQorCisKKyAgICBwYXJzZXByb2dyZXNzID0gTm9uZQorICAgIGNhY2hlcHJvZ3Jlc3MgPSBOb25lCisgICAgbWFpbi5zaHV0ZG93biA9IDAKKyAgICBpbnRlcnJ1cHRlZCA9IEZhbHNlCisgICAgcmV0dXJuX3ZhbHVlID0gMAorICAgIGVycm9ycyA9IDAKKyAgICB3YXJuaW5ncyA9IDAKKyAgICB0YXNrZmFpbHVyZXMgPSBbXQorCisgICAgdGVybWZpbHRlciA9IHRmKG1haW4sIGhlbHBlciwgY29uc29sZSwgZXJyY29uc29sZSwgZm9ybWF0KQorICAgIGF0ZXhpdC5yZWdpc3Rlcih0ZXJtZmlsdGVyLmZpbmlzaCkKKworICAgIHdoaWxlIFRydWU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV2ZW50ID0gZXZlbnRIYW5kbGVyLndhaXRFdmVudCgwKQorICAgICAgICAgICAgaWYgZXZlbnQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBtYWluLnNodXRkb3duID4gMToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICB0ZXJtZmlsdGVyLnVwZGF0ZUZvb3RlcigpCisgICAgICAgICAgICAgICAgZXZlbnQgPSBldmVudEhhbmRsZXIud2FpdEV2ZW50KDAuMjUpCisgICAgICAgICAgICAgICAgaWYgZXZlbnQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGhlbHBlci5ldmVudEhhbmRsZXIoZXZlbnQpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ydW5xdWV1ZS5ydW5RdWV1ZUV4aXRXYWl0KToKKyAgICAgICAgICAgICAgICBpZiBub3QgbWFpbi5zaHV0ZG93bjoKKyAgICAgICAgICAgICAgICAgICAgbWFpbi5zaHV0ZG93biA9IDEKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTG9nRXhlY1RUWSk6CisgICAgICAgICAgICAgICAgaWYgbG9nX2V4ZWNfdHR5OgorICAgICAgICAgICAgICAgICAgICB0cmllcyA9IGV2ZW50LnJldHJpZXMKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgdHJpZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiVHJ5aW5nIHRvIHJ1bjogJXMiICUgZXZlbnQucHJvZykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnN5c3RlbShldmVudC5wcm9nKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKGV2ZW50LnNsZWVwX2RlbGF5KQorICAgICAgICAgICAgICAgICAgICAgICAgdHJpZXMgLT0gMQorICAgICAgICAgICAgICAgICAgICBpZiB0cmllczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oZXZlbnQubXNnKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGxvZ2dpbmcuTG9nUmVjb3JkKToKKyAgICAgICAgICAgICAgICBpZiBldmVudC5sZXZlbG5vID49IGZvcm1hdC5FUlJPUjoKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICsgMQorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSAxCisgICAgICAgICAgICAgICAgZWxpZiBldmVudC5sZXZlbG5vID09IGZvcm1hdC5XQVJOSU5HOgorICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncyA9IHdhcm5pbmdzICsgMQorICAgICAgICAgICAgICAgICMgRm9yICJub3JtYWwiIGxvZ2dpbmcgY29uZGl0aW9ucywgZG9uJ3Qgc2hvdyBub3RlIGxvZ3MgZnJvbSB0YXNrcworICAgICAgICAgICAgICAgICMgYnV0IGRvIHNob3cgdGhlbSBpZiB0aGUgdXNlciBoYXMgY2hhbmdlZCB0aGUgZGVmYXVsdCBsb2cgbGV2ZWwgdG8KKyAgICAgICAgICAgICAgICAjIGluY2x1ZGUgdmVyYm9zZS9kZWJ1ZyBtZXNzYWdlcworICAgICAgICAgICAgICAgIGlmIGV2ZW50LnRhc2twaWQgIT0gMCBhbmQgZXZlbnQubGV2ZWxubyA8PSBmb3JtYXQuTk9URSBhbmQgKGV2ZW50LmxldmVsbm8gPCBsbGV2ZWwgb3IgKGV2ZW50LmxldmVsbm8gPT0gZm9ybWF0Lk5PVEUgYW5kIGxsZXZlbCAhPSBmb3JtYXQuVkVSQk9TRSkpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGxvZ2dlci5oYW5kbGUoZXZlbnQpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuYnVpbGQuVGFza0ZhaWxlZFNpbGVudCk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIkxvZ2ZpbGUgZm9yIGZhaWxlZCBzZXRzY2VuZSB0YXNrIGlzICVzIiAlIGV2ZW50LmxvZ2ZpbGUpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tGYWlsZWQpOgorICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IDEKKyAgICAgICAgICAgICAgICBsb2dmaWxlID0gZXZlbnQubG9nZmlsZQorICAgICAgICAgICAgICAgIGlmIGxvZ2ZpbGUgYW5kIG9zLnBhdGguZXhpc3RzKGxvZ2ZpbGUpOgorICAgICAgICAgICAgICAgICAgICB0ZXJtZmlsdGVyLmNsZWFyRm9vdGVyKCkKKyAgICAgICAgICAgICAgICAgICAgYmIuZXJyb3IoIkxvZ2ZpbGUgb2YgZmFpbHVyZSBzdG9yZWQgaW46ICVzIiAlIGxvZ2ZpbGUpCisgICAgICAgICAgICAgICAgICAgIGlmIGluY2x1ZGVsb2dzIGFuZCBub3QgZXZlbnQuZXJycHJpbnRlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJMb2cgZGF0YSBmb2xsb3dzOiIpCisgICAgICAgICAgICAgICAgICAgICAgICBmID0gb3Blbihsb2dmaWxlLCAiciIpCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsID09ICcnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBsLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbG9nbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnIHwgJXMnICUgbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmVzKSA+IGludChsb2dsaW5lcyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5wb3AoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnfCAlcycgJSBsKQorICAgICAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQobGluZSkKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tCYXNlKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhldmVudC5fbWVzc2FnZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUGFyc2VTdGFydGVkKToKKyAgICAgICAgICAgICAgICBpZiBldmVudC50b3RhbCA9PSAwOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHBhcnNlcHJvZ3Jlc3MgPSBuZXdfcHJvZ3Jlc3MoIlBhcnNpbmcgcmVjaXBlcyIsIGV2ZW50LnRvdGFsKS5zdGFydCgpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlUHJvZ3Jlc3MpOgorICAgICAgICAgICAgICAgIHBhcnNlcHJvZ3Jlc3MudXBkYXRlKGV2ZW50LmN1cnJlbnQpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlQ29tcGxldGVkKToKKyAgICAgICAgICAgICAgICBpZiBub3QgcGFyc2Vwcm9ncmVzczoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIHBhcnNlcHJvZ3Jlc3MuZmluaXNoKCkKKyAgICAgICAgICAgICAgICBwcmludCgoIlBhcnNpbmcgb2YgJWQgLmJiIGZpbGVzIGNvbXBsZXRlICglZCBjYWNoZWQsICVkIHBhcnNlZCkuICVkIHRhcmdldHMsICVkIHNraXBwZWQsICVkIG1hc2tlZCwgJWQgZXJyb3JzLiIKKyAgICAgICAgICAgICAgICAgICAgJSAoIGV2ZW50LnRvdGFsLCBldmVudC5jYWNoZWQsIGV2ZW50LnBhcnNlZCwgZXZlbnQudmlydHVhbHMsIGV2ZW50LnNraXBwZWQsIGV2ZW50Lm1hc2tlZCwgZXZlbnQuZXJyb3JzKSkpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuQ2FjaGVMb2FkU3RhcnRlZCk6CisgICAgICAgICAgICAgICAgY2FjaGVwcm9ncmVzcyA9IG5ld19wcm9ncmVzcygiTG9hZGluZyBjYWNoZSIsIGV2ZW50LnRvdGFsKS5zdGFydCgpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZFByb2dyZXNzKToKKyAgICAgICAgICAgICAgICBjYWNoZXByb2dyZXNzLnVwZGF0ZShldmVudC5jdXJyZW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRDb21wbGV0ZWQpOgorICAgICAgICAgICAgICAgIGNhY2hlcHJvZ3Jlc3MuZmluaXNoKCkKKyAgICAgICAgICAgICAgICBwcmludCgiTG9hZGVkICVkIGVudHJpZXMgZnJvbSBkZXBlbmRlbmN5IGNhY2hlLiIgJSBldmVudC5udW1fZW50cmllcykKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb21tYW5kLkNvbW1hbmRGYWlsZWQpOgorICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IGV2ZW50LmV4aXRjb2RlCisgICAgICAgICAgICAgICAgaWYgZXZlbnQuZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyArIDEKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJDb21tYW5kIGV4ZWN1dGlvbiBmYWlsZWQ6ICVzIiwgZXZlbnQuZXJyb3IpCisgICAgICAgICAgICAgICAgbWFpbi5zaHV0ZG93biA9IDIKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuY29tbWFuZC5Db21tYW5kRXhpdCk6CisgICAgICAgICAgICAgICAgaWYgbm90IHJldHVybl92YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gZXZlbnQuZXhpdGNvZGUKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLmNvbW1hbmQuQ29tbWFuZENvbXBsZXRlZCwgYmIuY29va2VyLkNvb2tlckV4aXQpKToKKyAgICAgICAgICAgICAgICBtYWluLnNodXRkb3duID0gMgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5NdWx0aXBsZVByb3ZpZGVycyk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIm11bHRpcGxlIHByb3ZpZGVycyBhcmUgYXZhaWxhYmxlIGZvciAlcyVzICglcykiLCBldmVudC5faXNfcnVudGltZSBhbmQgInJ1bnRpbWUgIiBvciAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5faXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCAiLmpvaW4oZXZlbnQuX2NhbmRpZGF0ZXMpKQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJjb25zaWRlciBkZWZpbmluZyBhIFBSRUZFUlJFRF9QUk9WSURFUiBlbnRyeSB0byBtYXRjaCAlcyIsIGV2ZW50Ll9pdGVtKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5Ob1Byb3ZpZGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSAxCisgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICsgMQorICAgICAgICAgICAgICAgIGlmIGV2ZW50Ll9ydW50aW1lOgorICAgICAgICAgICAgICAgICAgICByID0gIlIiCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgciA9ICIiCisKKyAgICAgICAgICAgICAgICBleHRyYSA9ICcnCisgICAgICAgICAgICAgICAgaWYgbm90IGV2ZW50Ll9yZWFzb25zOgorICAgICAgICAgICAgICAgICAgICBpZiBldmVudC5fY2xvc2VfbWF0Y2hlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gIi4gQ2xvc2UgbWF0Y2hlczpcbiAgJXMiICUgJ1xuICAnLmpvaW4oZXZlbnQuX2Nsb3NlX21hdGNoZXMpCisKKyAgICAgICAgICAgICAgICBpZiBldmVudC5fZGVwZW5kZWVzOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIk5vdGhpbmcgJXNQUk9WSURFUyAnJXMnIChidXQgJXMgJXNERVBFTkRTIG9uIG9yIG90aGVyd2lzZSByZXF1aXJlcyBpdCklcyIsIHIsIGV2ZW50Ll9pdGVtLCAiLCAiLmpvaW4oZXZlbnQuX2RlcGVuZGVlcyksIHIsIGV4dHJhKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiTm90aGluZyAlc1BST1ZJREVTICclcyclcyIsIHIsIGV2ZW50Ll9pdGVtLCBleHRyYSkKKyAgICAgICAgICAgICAgICBpZiBldmVudC5fcmVhc29uczoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHJlYXNvbiBpbiBldmVudC5fcmVhc29uczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiJXMiLCByZWFzb24pCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tTdGFydGVkKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiUnVubmluZyBzZXRzY2VuZSB0YXNrICVkIG9mICVkICglcykiICUgKGV2ZW50LnN0YXRzLmNvbXBsZXRlZCArIGV2ZW50LnN0YXRzLmFjdGl2ZSArIGV2ZW50LnN0YXRzLmZhaWxlZCArIDEsIGV2ZW50LnN0YXRzLnRvdGFsLCBldmVudC50YXNrc3RyaW5nKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tTdGFydGVkKToKKyAgICAgICAgICAgICAgICBpZiBldmVudC5ub2V4ZWM6CisgICAgICAgICAgICAgICAgICAgIHRhc2t0eXBlID0gJ25vZXhlYyB0YXNrJworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRhc2t0eXBlID0gJ3Rhc2snCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlJ1bm5pbmcgJXMgJXMgb2YgJXMgKElEOiAlcywgJXMpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdGF0cy5jb21wbGV0ZWQgKyBldmVudC5zdGF0cy5hY3RpdmUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdGF0cy5mYWlsZWQgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0YXRzLnRvdGFsLCBldmVudC50YXNraWQsIGV2ZW50LnRhc2tzdHJpbmcpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUucnVuUXVldWVUYXNrRmFpbGVkKToKKyAgICAgICAgICAgICAgICB0YXNrZmFpbHVyZXMuYXBwZW5kKGV2ZW50LnRhc2tzdHJpbmcpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJUYXNrICVzICglcykgZmFpbGVkIHdpdGggZXhpdCBjb2RlICclcyciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC50YXNraWQsIGV2ZW50LnRhc2tzdHJpbmcsIGV2ZW50LmV4aXRjb2RlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrRmFpbGVkKToKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiU2V0c2NlbmUgdGFzayAlcyAoJXMpIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAnJXMnIC0gcmVhbCB0YXNrIHdpbGwgYmUgcnVuIGluc3RlYWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC50YXNraWQsIGV2ZW50LnRhc2tzdHJpbmcsIGV2ZW50LmV4aXRjb2RlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkRlcFRyZWVHZW5lcmF0ZWQpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgaWdub3JlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCAoYmIuZXZlbnQuQnVpbGRCYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50Lk1ldGFkYXRhRXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuU3RhbXBVcGRhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuQ29uZmlnUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LlJlY2lwZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5SZWNpcGVQcmVGaW5hbGlzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ydW5xdWV1ZS5ydW5RdWV1ZUV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50Lk9wZXJhdGlvblN0YXJ0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuT3BlcmF0aW9uQ29tcGxldGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50Lk9wZXJhdGlvblByb2dyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LkRpc2tGdWxsKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmtub3duIGV2ZW50OiAlcyIsIGV2ZW50KQorCisgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGlvZXJyb3I6CisgICAgICAgICAgICB0ZXJtZmlsdGVyLmNsZWFyRm9vdGVyKCkKKyAgICAgICAgICAgICMgaWdub3JlIGludGVycnVwdGVkIGlvCisgICAgICAgICAgICBpZiBpb2Vycm9yLmFyZ3NbMF0gPT0gNDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShzdHIoaW9lcnJvcikpCisgICAgICAgICAgICBpZiBub3QgcGFyYW1zLm9ic2VydmVfb25seToKKyAgICAgICAgICAgICAgICBfLCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsic3RhdGVGb3JjZVNodXRkb3duIl0pCisgICAgICAgICAgICBtYWluLnNodXRkb3duID0gMgorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICB0ZXJtZmlsdGVyLmNsZWFyRm9vdGVyKCkKKyAgICAgICAgICAgIGlmIHBhcmFtcy5vYnNlcnZlX29ubHk6CisgICAgICAgICAgICAgICAgcHJpbnQoIlxuS2V5Ym9hcmQgSW50ZXJydXB0LCBleGl0aW5nIG9ic2VydmVyLi4uIikKKyAgICAgICAgICAgICAgICBtYWluLnNodXRkb3duID0gMgorICAgICAgICAgICAgaWYgbm90IHBhcmFtcy5vYnNlcnZlX29ubHkgYW5kIG1haW4uc2h1dGRvd24gPT0gMToKKyAgICAgICAgICAgICAgICBwcmludCgiXG5TZWNvbmQgS2V5Ym9hcmQgSW50ZXJydXB0LCBzdG9wcGluZy4uLlxuIikKKyAgICAgICAgICAgICAgICBfLCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsic3RhdGVGb3JjZVNodXRkb3duIl0pCisgICAgICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGNsZWFubHkgc3RvcDogJXMiICUgZXJyb3IpCisgICAgICAgICAgICBpZiBub3QgcGFyYW1zLm9ic2VydmVfb25seSBhbmQgbWFpbi5zaHV0ZG93biA9PSAwOgorICAgICAgICAgICAgICAgIHByaW50KCJcbktleWJvYXJkIEludGVycnVwdCwgY2xvc2luZyBkb3duLi4uXG4iKQorICAgICAgICAgICAgICAgIGludGVycnVwdGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIF8sIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJzdGF0ZVNodXRkb3duIl0pCisgICAgICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGNsZWFubHkgc2h1dGRvd246ICVzIiAlIGVycm9yKQorICAgICAgICAgICAgbWFpbi5zaHV0ZG93biA9IG1haW4uc2h1dGRvd24gKyAxCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoc3RyKGUpKQorICAgICAgICAgICAgaWYgbm90IHBhcmFtcy5vYnNlcnZlX29ubHk6CisgICAgICAgICAgICAgICAgXywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbInN0YXRlRm9yY2VTaHV0ZG93biJdKQorICAgICAgICAgICAgbWFpbi5zaHV0ZG93biA9IDIKKyAgICB0cnk6CisgICAgICAgIHN1bW1hcnkgPSAiIgorICAgICAgICBpZiB0YXNrZmFpbHVyZXM6CisgICAgICAgICAgICBzdW1tYXJ5ICs9IHBsdXJhbGlzZSgiXG5TdW1tYXJ5OiAlcyB0YXNrIGZhaWxlZDoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuU3VtbWFyeTogJXMgdGFza3MgZmFpbGVkOiIsIGxlbih0YXNrZmFpbHVyZXMpKQorICAgICAgICAgICAgZm9yIGZhaWx1cmUgaW4gdGFza2ZhaWx1cmVzOgorICAgICAgICAgICAgICAgIHN1bW1hcnkgKz0gIlxuICAlcyIgJSBmYWlsdXJlCisgICAgICAgIGlmIHdhcm5pbmdzOgorICAgICAgICAgICAgc3VtbWFyeSArPSBwbHVyYWxpc2UoIlxuU3VtbWFyeTogVGhlcmUgd2FzICVzIFdBUk5JTkcgbWVzc2FnZSBzaG93bi4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuU3VtbWFyeTogVGhlcmUgd2VyZSAlcyBXQVJOSU5HIG1lc3NhZ2VzIHNob3duLiIsIHdhcm5pbmdzKQorICAgICAgICBpZiByZXR1cm5fdmFsdWUgYW5kIGVycm9yczoKKyAgICAgICAgICAgIHN1bW1hcnkgKz0gcGx1cmFsaXNlKCJcblN1bW1hcnk6IFRoZXJlIHdhcyAlcyBFUlJPUiBtZXNzYWdlIHNob3duLCByZXR1cm5pbmcgYSBub24temVybyBleGl0IGNvZGUuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcblN1bW1hcnk6IFRoZXJlIHdlcmUgJXMgRVJST1IgbWVzc2FnZXMgc2hvd24sIHJldHVybmluZyBhIG5vbi16ZXJvIGV4aXQgY29kZS4iLCBlcnJvcnMpCisgICAgICAgIGlmIHN1bW1hcnk6CisgICAgICAgICAgICBwcmludChzdW1tYXJ5KQorCisgICAgICAgIGlmIGludGVycnVwdGVkOgorICAgICAgICAgICAgcHJpbnQoIkV4ZWN1dGlvbiB3YXMgaW50ZXJydXB0ZWQsIHJldHVybmluZyBhIG5vbi16ZXJvIGV4aXQgY29kZS4iKQorICAgICAgICAgICAgaWYgcmV0dXJuX3ZhbHVlID09IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gMQorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGltcG9ydCBlcnJubworICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVQSVBFOgorICAgICAgICAgICAgcGFzcworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9uY3Vyc2VzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9uY3Vyc2VzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ODlhNzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL25jdXJzZXMucHkKQEAgLTAsMCArMSwzNzMgQEAKKyMKKyMgQml0QmFrZSBDdXJzZXMgVUkgSW1wbGVtZW50YXRpb24KKyMKKyMgSW1wbGVtZW50cyBhbiBuY3Vyc2VzIGZyb250ZW5kIGZvciB0aGUgQml0QmFrZSB1dGlsaXR5LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCAnTWlja2V5JyBMYXVlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIiIiCisgICAgV2UgaGF2ZSB0aGUgZm9sbG93aW5nIHdpbmRvd3M6CisKKyAgICAgICAgMS4pIE1haW4gV2luZG93OiBTaG93cyB3aGF0IHdlIGFyZSB1bHRpbWF0ZWx5IGJ1aWxkaW5nIGFuZCBob3cgZmFyIHdlIGFyZS4gSW5jbHVkZXMgc3RhdHVzIGJhcgorICAgICAgICAyLikgVGhyZWFkIEFjdGl2aXR5IFdpbmRvdzogU2hvd3Mgb25lIHN0YXR1cyBsaW5lIGZvciBldmVyeSBjb25jdXJyZW50IGJpdGJha2UgdGhyZWFkLgorICAgICAgICAzLikgQ29tbWFuZCBMaW5lIFdpbmRvdzogQ29udGFpbnMgYW4gaW50ZXJhY3RpdmUgY29tbWFuZCBsaW5lIHdoZXJlIHlvdSBjYW4gaW50ZXJhY3Qgdy8gQml0YmFrZS4KKworICAgIEJhc2ljIHdpbmRvdyBsYXlvdXQgaXMgbGlrZSB0aGF0OgorCisgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisgICAgICAgIHwgPE1haW4gV2luZG93PiAgICAgICAgICAgICAgIHwgPFRocmVhZCBBY3Rpdml0eSBXaW5kb3c+ICB8CisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMDogZm9vIGRvX2NvbXBpbGUgY29tcGxldGV8CisgICAgICAgIHwgQnVpbGRpbmcgR3RrKy0yLjYuMTAgICAgICAgIHwgMTogYmFyIGRvX3BhdGNoIGNvbXBsZXRlICB8CisgICAgICAgIHwgU3RhdHVzOiA2MCUgICAgICAgICAgICAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisgICAgICAgIHw8Q29tbWFuZCBMaW5lIFdpbmRvdz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHw+Pj4gd2hpY2ggdmlydHVhbC9rZXJuZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHxvcGVuemF1cnVzLWtlcm5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHw+Pj4gXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisKKyIiIgorCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MsIHN5cywgaXRlcnRvb2xzLCB0aW1lLCBzdWJwcm9jZXNzCisKK3RyeToKKyAgICBpbXBvcnQgY3Vyc2VzCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgc3lzLmV4aXQoIkZBVEFMOiBUaGUgbmN1cnNlcyB1aSBjb3VsZCBub3QgbG9hZCB0aGUgcmVxdWlyZWQgY3Vyc2VzIHB5dGhvbiBtb2R1bGUuIikKKworaW1wb3J0IGJiCitpbXBvcnQgeG1scnBjbGliCitmcm9tIGJiIGltcG9ydCB1aQorZnJvbSBiYi51aSBpbXBvcnQgdWloZWxwZXIKKworcGFyc2VzcGluID0gaXRlcnRvb2xzLmN5Y2xlKCByJ3wvLVxcJyApCisKK1ggPSAwCitZID0gMQorV0lEVEggPSAyCitIRUlHSFQgPSAzCisKK01BWFNUQVRVU0xFTkdUSCA9IDMyCisKK2NsYXNzIE5DdXJzZXNVSToKKyAgICAiIiIKKyAgICBOQ3Vyc2VzIFVJIENsYXNzCisgICAgIiIiCisgICAgY2xhc3MgV2luZG93OgorICAgICAgICAiIiJCYXNlIFdpbmRvdyBDbGFzcyIiIgorICAgICAgICBkZWYgX19pbml0X18oIHNlbGYsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZnPWN1cnNlcy5DT0xPUl9CTEFDSywgYmc9Y3Vyc2VzLkNPTE9SX1dISVRFICk6CisgICAgICAgICAgICBzZWxmLndpbiA9IGN1cnNlcy5uZXd3aW4oIGhlaWdodCwgd2lkdGgsIHksIHggKQorICAgICAgICAgICAgc2VsZi5kaW1lbnNpb25zID0gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICkKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgaWYgY3Vyc2VzLmhhc19jb2xvcnMoKToKKyAgICAgICAgICAgICAgICBjb2xvciA9IDEKKyAgICAgICAgICAgICAgICBjdXJzZXMuaW5pdF9wYWlyKCBjb2xvciwgZmcsIGJnICkKKyAgICAgICAgICAgICAgICBzZWxmLndpbi5ia2dkc2V0KCBvcmQoJyAnKSwgY3Vyc2VzLmNvbG9yX3BhaXIoY29sb3IpICkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi53aW4uYmtnZHNldCggb3JkKCcgJyksIGN1cnNlcy5BX0JPTEQgKQorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBzZWxmLmVyYXNlKCkKKyAgICAgICAgICAgIHNlbGYuc2V0U2Nyb2xsaW5nKCkKKyAgICAgICAgICAgIHNlbGYud2luLm5vdXRyZWZyZXNoKCkKKworICAgICAgICBkZWYgZXJhc2UoIHNlbGYgKToKKyAgICAgICAgICAgIHNlbGYud2luLmVyYXNlKCkKKworICAgICAgICBkZWYgc2V0U2Nyb2xsaW5nKCBzZWxmLCBiID0gVHJ1ZSApOgorICAgICAgICAgICAgc2VsZi53aW4uc2Nyb2xsb2soIGIgKQorICAgICAgICAgICAgc2VsZi53aW4uaWRsb2soIGIgKQorCisgICAgICAgIGRlZiBzZXRCb3hlZCggc2VsZiApOgorICAgICAgICAgICAgc2VsZi5ib3hlZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2luLmJveCgpCisgICAgICAgICAgICBzZWxmLndpbi5ub3V0cmVmcmVzaCgpCisKKyAgICAgICAgZGVmIHNldFRleHQoIHNlbGYsIHgsIHksIHRleHQsICphcmdzICk6CisgICAgICAgICAgICBzZWxmLndpbi5hZGRzdHIoIHksIHgsIHRleHQsICphcmdzICkKKyAgICAgICAgICAgIHNlbGYud2luLm5vdXRyZWZyZXNoKCkKKworICAgICAgICBkZWYgYXBwZW5kVGV4dCggc2VsZiwgdGV4dCwgKmFyZ3MgKToKKyAgICAgICAgICAgIHNlbGYud2luLmFkZHN0ciggdGV4dCwgKmFyZ3MgKQorICAgICAgICAgICAgc2VsZi53aW4ubm91dHJlZnJlc2goKQorCisgICAgICAgIGRlZiBkcmF3SGxpbmUoIHNlbGYsIHkgKToKKyAgICAgICAgICAgIHNlbGYud2luLmhsaW5lKCB5LCAwLCBjdXJzZXMuQUNTX0hMSU5FLCBzZWxmLmRpbWVuc2lvbnNbV0lEVEhdICkKKyAgICAgICAgICAgIHNlbGYud2luLm5vdXRyZWZyZXNoKCkKKworICAgIGNsYXNzIERlY29yYXRlZFdpbmRvdyggV2luZG93ICk6CisgICAgICAgICIiIkJhc2UgY2xhc3MgZm9yIHdpbmRvd3Mgd2l0aCBhIGJveCBhbmQgYSB0aXRsZSBiYXIiIiIKKyAgICAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCB0aXRsZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZmc9Y3Vyc2VzLkNPTE9SX0JMQUNLLCBiZz1jdXJzZXMuQ09MT1JfV0hJVEUgKToKKyAgICAgICAgICAgIE5DdXJzZXNVSS5XaW5kb3cuX19pbml0X18oIHNlbGYsIHgrMSwgeSszLCB3aWR0aC0yLCBoZWlnaHQtNCwgZmcsIGJnICkKKyAgICAgICAgICAgIHNlbGYuZGVjb3JhdGlvbiA9IE5DdXJzZXNVSS5XaW5kb3coIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZnLCBiZyApCisgICAgICAgICAgICBzZWxmLmRlY29yYXRpb24uc2V0Qm94ZWQoKQorICAgICAgICAgICAgc2VsZi5kZWNvcmF0aW9uLndpbi5obGluZSggMiwgMSwgY3Vyc2VzLkFDU19ITElORSwgd2lkdGgtMiApCisgICAgICAgICAgICBzZWxmLnNldFRpdGxlKCB0aXRsZSApCisKKyAgICAgICAgZGVmIHNldFRpdGxlKCBzZWxmLCB0aXRsZSApOgorICAgICAgICAgICAgc2VsZi5kZWNvcmF0aW9uLnNldFRleHQoIDEsIDEsIHRpdGxlLmNlbnRlciggc2VsZi5kaW1lbnNpb25zW1dJRFRIXS0yICksIGN1cnNlcy5BX0JPTEQgKQorCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisjICAgIGNsYXNzIFRpdGxlV2luZG93KCBXaW5kb3cgKToKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKyMgICAgICAgICIiIlRpdGxlIFdpbmRvdyIiIgorIyAgICAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICk6CisjICAgICAgICAgICAgTkN1cnNlc1VJLldpbmRvdy5fX2luaXRfXyggc2VsZiwgeCwgeSwgd2lkdGgsIGhlaWdodCApCisjICAgICAgICAgICAgdmVyc2lvbiA9IGJiLl9fdmVyc2lvbl9fCisjICAgICAgICAgICAgdGl0bGUgPSAiQml0QmFrZSAlcyIgJSB2ZXJzaW9uCisjICAgICAgICAgICAgY3JlZGl0ID0gIihDKSAyMDAzLTIwMDcgVGVhbSBCaXRCYWtlIgorIyAgICAgICAgICAgICNzZWxmLndpbi5obGluZSggMiwgMSwgY3Vyc2VzLkFDU19ITElORSwgd2lkdGgtMiApCisjICAgICAgICAgICAgc2VsZi53aW4uYm9yZGVyKCkKKyMgICAgICAgICAgICBzZWxmLnNldFRleHQoIDEsIDEsIHRpdGxlLmNlbnRlciggc2VsZi5kaW1lbnNpb25zW1dJRFRIXS0yICksIGN1cnNlcy5BX0JPTEQgKQorIyAgICAgICAgICAgIHNlbGYuc2V0VGV4dCggMSwgMiwgY3JlZGl0LmNlbnRlciggc2VsZi5kaW1lbnNpb25zW1dJRFRIXS0yICksIGN1cnNlcy5BX0JPTEQgKQorCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisgICAgY2xhc3MgVGhyZWFkQWN0aXZpdHlXaW5kb3coIERlY29yYXRlZFdpbmRvdyApOgorICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworICAgICAgICAiIiJUaHJlYWQgQWN0aXZpdHkgV2luZG93IiIiCisgICAgICAgIGRlZiBfX2luaXRfXyggc2VsZiwgeCwgeSwgd2lkdGgsIGhlaWdodCApOgorICAgICAgICAgICAgTkN1cnNlc1VJLkRlY29yYXRlZFdpbmRvdy5fX2luaXRfXyggc2VsZiwgIlRocmVhZCBBY3Rpdml0eSIsIHgsIHksIHdpZHRoLCBoZWlnaHQgKQorCisgICAgICAgIGRlZiBzZXRTdGF0dXMoIHNlbGYsIHRocmVhZCwgdGV4dCApOgorICAgICAgICAgICAgbGluZSA9ICIlMDJkOiAlcyIgJSAoIHRocmVhZCwgdGV4dCApCisgICAgICAgICAgICB3aWR0aCA9IHNlbGYuZGltZW5zaW9uc1tXSURUSF0KKyAgICAgICAgICAgIGlmICggbGVuKGxpbmUpID4gd2lkdGggKToKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZVs6d2lkdGgtM10gKyAiLi4uIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5sanVzdCggd2lkdGggKQorICAgICAgICAgICAgc2VsZi5zZXRUZXh0KCAwLCB0aHJlYWQsIGxpbmUgKQorCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisgICAgY2xhc3MgTWFpbldpbmRvdyggRGVjb3JhdGVkV2luZG93ICk6CisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisgICAgICAgICIiIk1haW4gV2luZG93IiIiCisgICAgICAgIGRlZiBfX2luaXRfXyggc2VsZiwgeCwgeSwgd2lkdGgsIGhlaWdodCApOgorICAgICAgICAgICAgc2VsZi5TdGF0dXNQb3NpdGlvbiA9IHdpZHRoIC0gTUFYU1RBVFVTTEVOR1RICisgICAgICAgICAgICBOQ3Vyc2VzVUkuRGVjb3JhdGVkV2luZG93Ll9faW5pdF9fKCBzZWxmLCBOb25lLCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICkKKyAgICAgICAgICAgIGN1cnNlcy5ubCgpCisKKyAgICAgICAgZGVmIHNldFRpdGxlKCBzZWxmLCB0aXRsZSApOgorICAgICAgICAgICAgdGl0bGUgPSAiQml0QmFrZSAlcyIgJSBiYi5fX3ZlcnNpb25fXworICAgICAgICAgICAgc2VsZi5kZWNvcmF0aW9uLnNldFRleHQoIDIsIDEsIHRpdGxlLCBjdXJzZXMuQV9CT0xEICkKKyAgICAgICAgICAgIHNlbGYuZGVjb3JhdGlvbi5zZXRUZXh0KCBzZWxmLlN0YXR1c1Bvc2l0aW9uIC0gOCwgMSwgIlN0YXR1czoiLCBjdXJzZXMuQV9CT0xEICkKKworICAgICAgICBkZWYgc2V0U3RhdHVzKHNlbGYsIHN0YXR1cyk6CisgICAgICAgICAgICB3aGlsZSBsZW4oc3RhdHVzKSA8IE1BWFNUQVRVU0xFTkdUSDoKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBzdGF0dXMgKyAiICIKKyAgICAgICAgICAgIHNlbGYuZGVjb3JhdGlvbi5zZXRUZXh0KCBzZWxmLlN0YXR1c1Bvc2l0aW9uLCAxLCBzdGF0dXMsIGN1cnNlcy5BX0JPTEQgKQorCisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKyAgICBjbGFzcyBTaGVsbE91dHB1dFdpbmRvdyggRGVjb3JhdGVkV2luZG93ICk6CisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisgICAgICAgICIiIkludGVyYWN0aXZlIENvbW1hbmQgTGluZSBPdXRwdXQiIiIKKyAgICAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICk6CisgICAgICAgICAgICBOQ3Vyc2VzVUkuRGVjb3JhdGVkV2luZG93Ll9faW5pdF9fKCBzZWxmLCAiQ29tbWFuZCBMaW5lIFdpbmRvdyIsIHgsIHksIHdpZHRoLCBoZWlnaHQgKQorCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisgICAgY2xhc3MgU2hlbGxJbnB1dFdpbmRvdyggV2luZG93ICk6CisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisgICAgICAgICIiIkludGVyYWN0aXZlIENvbW1hbmQgTGluZSBJbnB1dCIiIgorICAgICAgICBkZWYgX19pbml0X18oIHNlbGYsIHgsIHksIHdpZHRoLCBoZWlnaHQgKToKKyAgICAgICAgICAgIE5DdXJzZXNVSS5XaW5kb3cuX19pbml0X18oIHNlbGYsIHgsIHksIHdpZHRoLCBoZWlnaHQgKQorCisjIHB1dCB0aGF0IHRvIHRoZSB0b3AgYWdhaW4gZnJvbSBjdXJzZXMudGV4dHBhZCBpbXBvcnQgVGV4dGJveAorIyAgICAgICAgICAgIHNlbGYudGV4dGJveCA9IFRleHRib3goIHNlbGYud2luICkKKyMgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCgpCisjICAgICAgICAgICAgdC5ydW4gPSBzZWxmLnRleHRib3guZWRpdAorIyAgICAgICAgICAgIHQuc3RhcnQoKQorCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisgICAgZGVmIG1haW4oc2VsZiwgc3Rkc2NyLCBzZXJ2ZXIsIGV2ZW50SGFuZGxlciwgcGFyYW1zKToKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKyAgICAgICAgaGVpZ2h0LCB3aWR0aCA9IHN0ZHNjci5nZXRtYXh5eCgpCisKKyAgICAgICAgIyBmb3Igbm93IHNwbGl0IGl0IGxpa2UgdGhhdDoKKyAgICAgICAgIyBNQUlOX3kgKyBUSFJFQURfeSA9IDIvMyBzY3JlZW4gYXQgdGhlIHRvcAorICAgICAgICAjIE1BSU5feCA9IDIvMyBsZWZ0LCBUSFJFQURfeSA9IDEvMyByaWdodAorICAgICAgICAjIENMSV95ID0gMS8zIG9mIHNjcmVlbiBhdCB0aGUgYm90dG9tCisgICAgICAgICMgQ0xJX3ggPSBmdWxsCisKKyAgICAgICAgbWFpbl9sZWZ0ID0gMAorICAgICAgICBtYWluX3RvcCA9IDAKKyAgICAgICAgbWFpbl9oZWlnaHQgPSAoIGhlaWdodCAvLyAzICogMiApCisgICAgICAgIG1haW5fd2lkdGggPSAoIHdpZHRoIC8vIDMgKSAqIDIKKyAgICAgICAgY2xvX2xlZnQgPSBtYWluX2xlZnQKKyAgICAgICAgY2xvX3RvcCA9IG1haW5fdG9wICsgbWFpbl9oZWlnaHQKKyAgICAgICAgY2xvX2hlaWdodCA9IGhlaWdodCAtIG1haW5faGVpZ2h0IC0gbWFpbl90b3AgLSAxCisgICAgICAgIGNsb193aWR0aCA9IHdpZHRoCisgICAgICAgIGNsaV9sZWZ0ID0gbWFpbl9sZWZ0CisgICAgICAgIGNsaV90b3AgPSBjbG9fdG9wICsgY2xvX2hlaWdodAorICAgICAgICBjbGlfaGVpZ2h0ID0gMQorICAgICAgICBjbGlfd2lkdGggPSB3aWR0aAorICAgICAgICB0aHJlYWRfbGVmdCA9IG1haW5fbGVmdCArIG1haW5fd2lkdGgKKyAgICAgICAgdGhyZWFkX3RvcCA9IG1haW5fdG9wCisgICAgICAgIHRocmVhZF9oZWlnaHQgPSBtYWluX2hlaWdodAorICAgICAgICB0aHJlYWRfd2lkdGggPSB3aWR0aCAtIG1haW5fd2lkdGgKKworICAgICAgICAjdHcgPSBzZWxmLlRpdGxlV2luZG93KCAwLCAwLCB3aWR0aCwgbWFpbl90b3AgKQorICAgICAgICBtdyA9IHNlbGYuTWFpbldpbmRvdyggbWFpbl9sZWZ0LCBtYWluX3RvcCwgbWFpbl93aWR0aCwgbWFpbl9oZWlnaHQgKQorICAgICAgICB0YXcgPSBzZWxmLlRocmVhZEFjdGl2aXR5V2luZG93KCB0aHJlYWRfbGVmdCwgdGhyZWFkX3RvcCwgdGhyZWFkX3dpZHRoLCB0aHJlYWRfaGVpZ2h0ICkKKyAgICAgICAgY2xvID0gc2VsZi5TaGVsbE91dHB1dFdpbmRvdyggY2xvX2xlZnQsIGNsb190b3AsIGNsb193aWR0aCwgY2xvX2hlaWdodCApCisgICAgICAgIGNsaSA9IHNlbGYuU2hlbGxJbnB1dFdpbmRvdyggY2xpX2xlZnQsIGNsaV90b3AsIGNsaV93aWR0aCwgY2xpX2hlaWdodCApCisgICAgICAgIGNsaS5zZXRUZXh0KCAwLCAwLCAiQkI+IiApCisKKyAgICAgICAgbXcuc2V0U3RhdHVzKCJJZGxlIikKKworICAgICAgICBoZWxwZXIgPSB1aWhlbHBlci5CQlVJSGVscGVyKCkKKyAgICAgICAgc2h1dGRvd24gPSAwCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFyYW1zLnVwZGF0ZUZyb21TZXJ2ZXIoc2VydmVyKQorICAgICAgICAgICAgY21kbGluZSA9IHBhcmFtcy5wYXJzZUFjdGlvbnMoKQorICAgICAgICAgICAgaWYgbm90IGNtZGxpbmU6CisgICAgICAgICAgICAgICAgcHJpbnQoIk5vdGhpbmcgdG8gZG8uICBVc2UgJ2JpdGJha2Ugd29ybGQnIHRvIGJ1aWxkIGV2ZXJ5dGhpbmcsIG9yIHJ1biAnYml0YmFrZSAtLWhlbHAnIGZvciB1c2FnZSBpbmZvcm1hdGlvbi4iKQorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICBpZiAnbXNnJyBpbiBjbWRsaW5lIGFuZCBjbWRsaW5lWydtc2cnXToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoY21kbGluZVsnbXNnJ10pCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIGNtZGxpbmUgPSBjbWRsaW5lWydhY3Rpb24nXQorICAgICAgICAgICAgcmV0LCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKGNtZGxpbmUpCisgICAgICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgICAgICBwcmludCgiRXJyb3IgcnVubmluZyBjb21tYW5kICclcyc6ICVzIiAlIChjbWRsaW5lLCBlcnJvcikpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbGlmIHJldCAhPSBUcnVlOgorICAgICAgICAgICAgICAgIHByaW50KCJDb3VsZG4ndCBnZXQgZGVmYXVsdCBjb21tYW5kbGluZCEgJXMiICUgcmV0KQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgeG1scnBjbGliLkZhdWx0IGFzIHg6CisgICAgICAgICAgICBwcmludCgiWE1MUlBDIEZhdWx0IGdldHRpbmcgY29tbWFuZGxpbmU6XG4gJXMiICUgeCkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGV4aXRmbGFnID0gRmFsc2UKKyAgICAgICAgd2hpbGUgbm90IGV4aXRmbGFnOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV2ZW50ID0gZXZlbnRIYW5kbGVyLndhaXRFdmVudCgwLjI1KQorICAgICAgICAgICAgICAgIGlmIG5vdCBldmVudDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGhlbHBlci5ldmVudEhhbmRsZXIoZXZlbnQpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuYnVpbGQuVGFza0Jhc2UpOgorICAgICAgICAgICAgICAgICAgICBtdy5hcHBlbmRUZXh0KCJOT1RFOiAlc1xuIiAlIGV2ZW50Ll9tZXNzYWdlKQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGxvZ2dpbmcuTG9nUmVjb3JkKToKKyAgICAgICAgICAgICAgICAgICAgbXcuYXBwZW5kVGV4dChsb2dnaW5nLmdldExldmVsTmFtZShldmVudC5sZXZlbG5vKSArICc6ICcgKyBldmVudC5nZXRNZXNzYWdlKCkgKyAnXG4nKQorCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuQ2FjaGVMb2FkU3RhcnRlZCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VfdG90YWwgPSBldmVudC50b3RhbAorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZFByb2dyZXNzKToKKyAgICAgICAgICAgICAgICAgICAgeCA9IGV2ZW50LmN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgeSA9IHNlbGYucGFyc2VfdG90YWwKKyAgICAgICAgICAgICAgICAgICAgbXcuc2V0U3RhdHVzKCJMb2FkaW5nIENhY2hlOiAgICVzIFslMmQgJSVdIiAlICggbmV4dChwYXJzZXNwaW4pLCB4KjEwMC95ICkgKQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZENvbXBsZXRlZCk6CisgICAgICAgICAgICAgICAgICAgIG13LnNldFN0YXR1cygiSWRsZSIpCisgICAgICAgICAgICAgICAgICAgIG13LmFwcGVuZFRleHQoIkxvYWRlZCAlZCBlbnRyaWVzIGZyb20gZGVwZW5kZW5jeSBjYWNoZS5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoIGV2ZW50Lm51bV9lbnRyaWVzKSkKKworICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlU3RhcnRlZCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VfdG90YWwgPSBldmVudC50b3RhbAorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlUHJvZ3Jlc3MpOgorICAgICAgICAgICAgICAgICAgICB4ID0gZXZlbnQuY3VycmVudAorICAgICAgICAgICAgICAgICAgICB5ID0gc2VsZi5wYXJzZV90b3RhbAorICAgICAgICAgICAgICAgICAgICBtdy5zZXRTdGF0dXMoIlBhcnNpbmcgUmVjaXBlczogJXMgWyUyZCAlJV0iICUgKCBuZXh0KHBhcnNlc3BpbiksIHgqMTAwL3kgKSApCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUGFyc2VDb21wbGV0ZWQpOgorICAgICAgICAgICAgICAgICAgICBtdy5zZXRTdGF0dXMoIklkbGUiKQorICAgICAgICAgICAgICAgICAgICBtdy5hcHBlbmRUZXh0KCJQYXJzaW5nIGZpbmlzaGVkLiAlZCBjYWNoZWQsICVkIHBhcnNlZCwgJWQgc2tpcHBlZCwgJWQgbWFza2VkLlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICggZXZlbnQuY2FjaGVkLCBldmVudC5wYXJzZWQsIGV2ZW50LnNraXBwZWQsIGV2ZW50Lm1hc2tlZCApKQorCisjICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tGYWlsZWQpOgorIyAgICAgICAgICAgICAgICAgICAgaWYgZXZlbnQubG9nZmlsZToKKyMgICAgICAgICAgICAgICAgICAgICAgICBpZiBkYXRhLmdldFZhcigiQkJJTkNMVURFTE9HUyIsIGQpOgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5lcnJvcigibG9nIGRhdGEgZm9sbG93cyAoJXMpIiAlIGxvZ2ZpbGUpCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlcl9vZl9saW5lcyA9IGRhdGEuZ2V0VmFyKCJCQklOQ0xVREVMT0dTX0xJTkVTIiwgZCkKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbnVtYmVyX29mX2xpbmVzOgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKCd0YWlsIC1uJXMgJXMnICUgKG51bWJlcl9vZl9saW5lcywgbG9nZmlsZSksIHNoZWxsPVRydWUpCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gb3Blbihsb2dmaWxlLCAiciIpCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBmLnJlYWRsaW5lKCkKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsID09ICcnOgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBsLnJzdHJpcCgpCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ3wgJXMnICUgbAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisjICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXJyb3IoInNlZSBsb2cgaW4gJXMiICUgbG9nZmlsZSkKKworICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZENvbXBsZXRlZCk6CisgICAgICAgICAgICAgICAgICAgICMgc3RvcCBzbyB0aGUgdXNlciBjYW4gc2VlIHRoZSByZXN1bHQgb2YgdGhlIGJ1aWxkLCBidXQKKyAgICAgICAgICAgICAgICAgICAgIyBhbHNvIGFsbG93IHRoZW0gdG8gbm93IGV4aXQgd2l0aCBhIHNpbmdsZSBeQworICAgICAgICAgICAgICAgICAgICBzaHV0ZG93biA9IDIKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb21tYW5kLkNvbW1hbmRGYWlsZWQpOgorICAgICAgICAgICAgICAgICAgICBtdy5hcHBlbmRUZXh0KCJDb21tYW5kIGV4ZWN1dGlvbiBmYWlsZWQ6ICVzIiAlIGV2ZW50LmVycm9yKQorICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDIpCisgICAgICAgICAgICAgICAgICAgIGV4aXRmbGFnID0gVHJ1ZQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZEV4aXQpOgorICAgICAgICAgICAgICAgICAgICBleGl0ZmxhZyA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb29rZXIuQ29va2VyRXhpdCk6CisgICAgICAgICAgICAgICAgICAgIGV4aXRmbGFnID0gVHJ1ZQorCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTG9nRXhlY1RUWSk6CisgICAgICAgICAgICAgICAgICAgIG13LmFwcGVuZFRleHQoJ1dBUk46ICcgKyBldmVudC5tc2cgKyAnXG4nKQorICAgICAgICAgICAgICAgIGlmIGhlbHBlci5uZWVkVXBkYXRlOgorICAgICAgICAgICAgICAgICAgICBhY3RpdmV0YXNrcywgZmFpbGVkdGFza3MgPSBoZWxwZXIuZ2V0VGFza3MoKQorICAgICAgICAgICAgICAgICAgICB0YXcuZXJhc2UoKQorICAgICAgICAgICAgICAgICAgICB0YXcuc2V0VGV4dCgwLCAwLCAiIikKKyAgICAgICAgICAgICAgICAgICAgaWYgYWN0aXZldGFza3M6CisgICAgICAgICAgICAgICAgICAgICAgICB0YXcuYXBwZW5kVGV4dCgiQWN0aXZlIFRhc2tzOlxuIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0YXNrIGluIGFjdGl2ZXRhc2tzLml0ZXJ2YWx1ZXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXcuYXBwZW5kVGV4dCh0YXNrWyJ0aXRsZSJdICsgJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgaWYgZmFpbGVkdGFza3M6CisgICAgICAgICAgICAgICAgICAgICAgICB0YXcuYXBwZW5kVGV4dCgiRmFpbGVkIFRhc2tzOlxuIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0YXNrIGluIGZhaWxlZHRhc2tzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhdy5hcHBlbmRUZXh0KHRhc2tbInRpdGxlIl0gKyAnXG4nKQorCisgICAgICAgICAgICAgICAgY3Vyc2VzLmRvdXBkYXRlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGlvZXJyb3I6CisgICAgICAgICAgICAgICAgIyBpZ25vcmUgaW50ZXJydXB0ZWQgaW8KKyAgICAgICAgICAgICAgICBpZiBpb2Vycm9yLmFyZ3NbMF0gPT0gNDoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICAgICAgaWYgc2h1dGRvd24gPT0gMjoKKyAgICAgICAgICAgICAgICAgICAgbXcuYXBwZW5kVGV4dCgiVGhpcmQgS2V5Ym9hcmQgSW50ZXJydXB0LCBleGl0LlxuIikKKyAgICAgICAgICAgICAgICAgICAgZXhpdGZsYWcgPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgc2h1dGRvd24gPT0gMToKKyAgICAgICAgICAgICAgICAgICAgbXcuYXBwZW5kVGV4dCgiU2Vjb25kIEtleWJvYXJkIEludGVycnVwdCwgc3RvcHBpbmcuLi5cbiIpCisgICAgICAgICAgICAgICAgICAgIF8sIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJzdGF0ZUZvcmNlU2h1dGRvd24iXSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiVW5hYmxlIHRvIGNsZWFubHkgc3RvcDogJXMiICUgZXJyb3IpCisgICAgICAgICAgICAgICAgaWYgc2h1dGRvd24gPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgbXcuYXBwZW5kVGV4dCgiS2V5Ym9hcmQgSW50ZXJydXB0LCBjbG9zaW5nIGRvd24uLi5cbiIpCisgICAgICAgICAgICAgICAgICAgIF8sIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJzdGF0ZVNodXRkb3duIl0pCisgICAgICAgICAgICAgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlVuYWJsZSB0byBjbGVhbmx5IHNodXRkb3duOiAlcyIgJSBlcnJvcikKKyAgICAgICAgICAgICAgICBzaHV0ZG93biA9IHNodXRkb3duICsgMQorICAgICAgICAgICAgICAgIHBhc3MKKworZGVmIG1haW4oc2VydmVyLCBldmVudEhhbmRsZXIsIHBhcmFtcyk6CisgICAgaWYgbm90IG9zLmlzYXR0eShzeXMuc3Rkb3V0LmZpbGVubygpKToKKyAgICAgICAgcHJpbnQoIkZBVEFMOiBVbmFibGUgdG8gcnVuICduY3Vyc2VzJyBVSSB3aXRob3V0IGEgVFRZLiIpCisgICAgICAgIHJldHVybgorICAgIHVpID0gTkN1cnNlc1VJKCkKKyAgICB0cnk6CisgICAgICAgIGN1cnNlcy53cmFwcGVyKHVpLm1haW4sIHNlcnZlciwgZXZlbnRIYW5kbGVyLCBwYXJhbXMpCisgICAgZXhjZXB0OgorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9wdWNjaG8ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL3B1Y2Noby5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2U0NTkwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9wdWNjaG8ucHkKQEAgLTAsMCArMSw0MjUgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAwOCAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgUm9iIEJyYWRmb3JkIDxyb2JAbGludXguaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworaW1wb3J0IGdvYmplY3QKK2ltcG9ydCBndGsuZ2xhZGUKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB1cmxsaWIyCitpbXBvcnQgb3MKK2ltcG9ydCBjb250ZXh0bGliCisKK2Zyb20gYmIudWkuY3J1bWJzLmJ1aWxkbWFuYWdlciBpbXBvcnQgQnVpbGRNYW5hZ2VyLCBCdWlsZENvbmZpZ3VyYXRpb24KK2Zyb20gYmIudWkuY3J1bWJzLmJ1aWxkbWFuYWdlciBpbXBvcnQgQnVpbGRNYW5hZ2VyVHJlZVZpZXcKKworZnJvbSBiYi51aS5jcnVtYnMucnVubmluZ2J1aWxkIGltcG9ydCBSdW5uaW5nQnVpbGQsIFJ1bm5pbmdCdWlsZFRyZWVWaWV3CisKKyMgVGhlIG1ldGFkYXRhIGxvYWRlciBpcyB1c2VkIGJ5IHRoZSBCdWlsZFNldHVwRGlhbG9nIHRvIGRvd25sb2FkIHRoZQorIyBhdmFpbGFibGUgb3B0aW9ucyB0byBwb3B1bGF0ZSB0aGUgZGlhbG9nCitjbGFzcyBNZXRhRGF0YUxvYWRlcihnb2JqZWN0LkdPYmplY3QpOgorICAgICIiIiBUaGlzIGNsYXNzIHByb3ZpZGVzIHRoZSBtZWNoYW5pc20gZm9yIGxvYWRpbmcgdGhlIG1ldGFkYXRhICh0aGUKKyAgICBmZXRjaGluZyBhbmQgcGFyc2luZykgZnJvbSBhIGdpdmVuIFVSTC4gVGhlIG1ldGFkYXRhIGVuY29tcGFzc2VzIGRldGFpbHMKKyAgICBvbiB3aGF0IG1hY2hpbmVzIGFyZSBhdmFpbGFibGUuIFRoZSBkaXN0cmlidXRpb24gYW5kIGltYWdlcyBhdmFpbGFibGUgZm9yCisgICAgdGhlIG1hY2hpbmUgYW5kIHRoZSB0aGUgdXJpcyB0byB1c2UgZm9yIGJ1aWxkaW5nIHRoZSBnaXZlbiBtYWNoaW5lLiIiIgorICAgIF9fZ3NpZ25hbHNfXyA9IHsKKyAgICAgICAgJ3N1Y2Nlc3MnIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAoKSksCisgICAgICAgICdlcnJvcicgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgKGdvYmplY3QuVFlQRV9TVFJJTkcsKSkKKyAgICAgICAgfQorCisgICAgIyBXZSB1c2UgdGhlc2UgbGl0dGxlIGhlbHBlciBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoYXQgd2UgdGFrZSB0aGUgZ2RrIGxvY2sKKyAgICAjIHdoZW4gZW1pdHRpbmcgdGhlIHNpZ25hbC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYXMgaWRsZXMgKHNvIHRoYXQKKyAgICAjIHRoZXkgaGFwcGVuIGluIHRoZSBndGsgLyBtYWluIHRocmVhZCdzIG1haW4gbG9vcC4KKyAgICBkZWYgZW1pdF9lcnJvcl9zaWduYWwgKHNlbGYsIHJlbWFyayk6CisgICAgICAgIGd0ay5nZGsudGhyZWFkc19lbnRlcigpCisgICAgICAgIHNlbGYuZW1pdCAoImVycm9yIiwgcmVtYXJrKQorICAgICAgICBndGsuZ2RrLnRocmVhZHNfbGVhdmUoKQorCisgICAgZGVmIGVtaXRfc3VjY2Vzc19zaWduYWwgKHNlbGYpOgorICAgICAgICBndGsuZ2RrLnRocmVhZHNfZW50ZXIoKQorICAgICAgICBzZWxmLmVtaXQgKCJzdWNjZXNzIikKKyAgICAgICAgZ3RrLmdkay50aHJlYWRzX2xlYXZlKCkKKworICAgIGRlZiBfX2luaXRfXyAoc2VsZik6CisgICAgICAgIGdvYmplY3QuR09iamVjdC5fX2luaXRfXyAoc2VsZikKKworICAgIGNsYXNzIExvYWRlclRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKKyAgICAgICAgIiIiIFRoaXMgY2xhc3MgcHJvdmlkZXMgYW4gYXN5bmNocm9ub3VzIGxvYWRlciBmb3IgdGhlIG1ldGFkYXRhIChieQorICAgICAgICB1c2luZyB0aHJlYWRzIGFuZCBzaWduYWxzKS4gVGhpcyBpcyB1c2VmdWwgc2luY2UgdGhlIG1ldGFkYXRhIG1heSBiZQorICAgICAgICBhdCBhIHJlbW90ZSBVUkwuIiIiCisgICAgICAgIGNsYXNzIExvYWRlckltcG9ydEV4Y2VwdGlvbiAoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbG9hZGVyLCB1cmwpOgorICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyAoc2VsZikKKyAgICAgICAgICAgIHNlbGYudXJsID0gdXJsCisgICAgICAgICAgICBzZWxmLmxvYWRlciA9IGxvYWRlcgorCisgICAgICAgIGRlZiBydW4gKHNlbGYpOgorICAgICAgICAgICAgcmVzdWx0ID0ge30KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aXRoIGNvbnRleHRsaWIuY2xvc2luZyAodXJsbGliMi51cmxvcGVuIChzZWxmLnVybCkpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICMgUGFyc2UgdGhlIG1ldGFkYXRhIGZvcm1hdC4gVGhlIGZvcm1hdCBpcy4uLi4KKyAgICAgICAgICAgICAgICAgICAgIyA8bWFjaGluZT47PGRlZmF1bHQgZGlzdHJvPnw8ZGlzdHJvPi4uLjs8ZGVmYXVsdCBpbWFnZT58PGltYWdlPi4uLjs8dHlwZSMjdXJsPnwuLi4KKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMgPSBsaW5lLnNwbGl0KCI7IikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4gKGNvbXBvbmVudHMpIDwgNCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgTWV0YURhdGFMb2FkZXIuTG9hZGVyVGhyZWFkLkxvYWRlckltcG9ydEV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZSA9IGNvbXBvbmVudHNbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Ryb3MgPSBjb21wb25lbnRzWzFdLnNwbGl0KCJ8IikKKyAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcyA9IGNvbXBvbmVudHNbMl0uc3BsaXQoInwiKQorICAgICAgICAgICAgICAgICAgICAgICAgdXJscyA9IGNvbXBvbmVudHNbM10uc3BsaXQoInwiKQorCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbbWFjaGluZV0gPSAoZGlzdHJvcywgaW1hZ2VzLCB1cmxzKQorCisgICAgICAgICAgICAgICAgIyBDcmVhdGUgYW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzICpwb3RlbnRpYWwqCisgICAgICAgICAgICAgICAgIyBjb25maWd1cmF0aW9uLiBJdCBjYW4gYmVjb21lIGNvbmNyZXRlIGlmIHRoZSBtYWNoaW5lLCBkaXN0cm8KKyAgICAgICAgICAgICAgICAjIGFuZCBpbWFnZSBhcmUgYWxsIGNob3NlbiBpbiB0aGUgVUkKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uID0gQnVpbGRDb25maWd1cmF0aW9uKCkKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLm1ldGFkYXRhX3VybCA9IHNlbGYudXJsCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi5tYWNoaW5lX29wdGlvbnMgPSByZXN1bHQKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRlci5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbgorCisgICAgICAgICAgICAgICAgIyBFbWl0IHRoYXQgd2UndmUgYWN0dWFsbHkgZ290IGEgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGdvYmplY3QuaWRsZV9hZGQgKE1ldGFEYXRhTG9hZGVyLmVtaXRfc3VjY2Vzc19zaWduYWwsCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZGVyKQorCisgICAgICAgICAgICBleGNlcHQgTWV0YURhdGFMb2FkZXIuTG9hZGVyVGhyZWFkLkxvYWRlckltcG9ydEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIGdvYmplY3QuaWRsZV9hZGQgKE1ldGFEYXRhTG9hZGVyLmVtaXRfZXJyb3Jfc2lnbmFsLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgIlJlcG9zaXRvcnkgbWV0YWRhdGEgY29ycnVwdCIpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgZ29iamVjdC5pZGxlX2FkZCAoTWV0YURhdGFMb2FkZXIuZW1pdF9lcnJvcl9zaWduYWwsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGRvd25sb2FkIHJlcG9zaXRvcnkgbWV0YWRhdGEiKQorICAgICAgICAgICAgICAgIHByaW50KGUpCisKKyAgICBkZWYgdHJ5X2ZldGNoX2Zyb21fdXJsIChzZWxmLCB1cmwpOgorICAgICAgICAjIFRyeSBhbmQgZG93bmxvYWQgdGhlIG1ldGFkYXRhLiBGaXJpbmcgYSBzaWduYWwgaWYgc3VjY2Vzc2Z1bAorICAgICAgICB0aHJlYWQgPSBNZXRhRGF0YUxvYWRlci5Mb2FkZXJUaHJlYWQoc2VsZiwgdXJsKQorICAgICAgICB0aHJlYWQuc3RhcnQoKQorCitjbGFzcyBCdWlsZFNldHVwRGlhbG9nIChndGsuRGlhbG9nKToKKyAgICBSRVNQT05TRV9CVUlMRCA9IDEKKworICAgICMgQSBsaXR0bGUgaGVscGVyIG1ldGhvZCB0aGF0IGp1c3Qgc2V0cyB0aGUgc3RhdGVzIG9uIHRoZSB3aWRnZXRzIGJhc2VkIG9uCisgICAgIyB3aGV0aGVyIHdlJ3ZlIGdvdCBnb29kIG1ldGFkYXRhIG9yIG5vdC4KKyAgICBkZWYgc2V0X2NvbmZpZ3VyYWJsZSAoc2VsZiwgY29uZmlndXJhYmxlKToKKyAgICAgICAgaWYgKHNlbGYuY29uZmlndXJhYmxlID09IGNvbmZpZ3VyYWJsZSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLmNvbmZpZ3VyYWJsZSA9IGNvbmZpZ3VyYWJsZQorICAgICAgICBmb3Igd2lkZ2V0IGluIHNlbGYuY29uZl93aWRnZXRzOgorICAgICAgICAgICAgd2lkZ2V0LnNldF9zZW5zaXRpdmUgKGNvbmZpZ3VyYWJsZSkKKworICAgICAgICBpZiBub3QgY29uZmlndXJhYmxlOgorICAgICAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvLnNldF9hY3RpdmUgKC0xKQorICAgICAgICAgICAgc2VsZi5kaXN0cmlidXRpb25fY29tYm8uc2V0X2FjdGl2ZSAoLTEpCisgICAgICAgICAgICBzZWxmLmltYWdlX2NvbWJvLnNldF9hY3RpdmUgKC0xKQorCisgICAgIyBHVEsgd2lkZ2V0IGNhbGxiYWNrcworICAgIGRlZiByZWZyZXNoX2J1dHRvbl9jbGlja2VkIChzZWxmLCBidXR0b24pOgorICAgICAgICAjIFJlZnJlc2ggYnV0dG9uIGNsaWNrZWQuCisKKyAgICAgICAgdXJsID0gc2VsZi5sb2NhdGlvbl9lbnRyeS5nZXRfY2hhcnMgKDAsIC0xKQorICAgICAgICBzZWxmLmxvYWRlci50cnlfZmV0Y2hfZnJvbV91cmwodXJsKQorCisgICAgZGVmIHJlcG9zaXRvcnlfZW50cnlfZWRpdGFibGVfY2hhbmdlZCAoc2VsZiwgZW50cnkpOgorICAgICAgICBpZiAobGVuIChlbnRyeS5nZXRfY2hhcnMgKDAsIC0xKSkgPiAwKToKKyAgICAgICAgICAgIHNlbGYucmVmcmVzaF9idXR0b24uc2V0X3NlbnNpdGl2ZSAoVHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucmVmcmVzaF9idXR0b24uc2V0X3NlbnNpdGl2ZSAoRmFsc2UpCisgICAgICAgICAgICBzZWxmLmNsZWFyX3N0YXR1c19tZXNzYWdlKCkKKworICAgICAgICAjIElmIHdlIHdlcmUgcHJldmlvdXNseSBjb25maWd1cmFibGUgd2UgYXJlIG5vIGxvbmdlciBzaW5jZSB0aGUKKyAgICAgICAgIyBsb2NhdGlvbiBlbnRyeSBoYXMgYmVlbiBjaGFuZ2VkCisgICAgICAgIHNlbGYuc2V0X2NvbmZpZ3VyYWJsZSAoRmFsc2UpCisKKyAgICBkZWYgbWFjaGluZV9jb21ib19jaGFuZ2VkIChzZWxmLCBjb21ib2JveCk6CisgICAgICAgIGFjdGl2ZV9pdGVyID0gY29tYm9ib3guZ2V0X2FjdGl2ZV9pdGVyKCkKKworICAgICAgICBpZiBub3QgYWN0aXZlX2l0ZXI6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBtb2RlbCA9IGNvbWJvYm94LmdldF9tb2RlbCgpCisKKyAgICAgICAgaWYgbW9kZWw6CisgICAgICAgICAgICBjaG9zZW5fbWFjaGluZSA9IG1vZGVsLmdldCAoYWN0aXZlX2l0ZXIsIDApWzBdCisKKyAgICAgICAgKGRpc3Ryb3NfbW9kZWwsIGltYWdlc19tb2RlbCkgPSBcCisgICAgICAgICAgICBzZWxmLmxvYWRlci5jb25maWd1cmF0aW9uLmdldF9kaXN0cm9fYW5kX2ltYWdlc19tb2RlbHMgKGNob3Nlbl9tYWNoaW5lKQorCisgICAgICAgIHNlbGYuZGlzdHJpYnV0aW9uX2NvbWJvLnNldF9tb2RlbCAoZGlzdHJvc19tb2RlbCkKKyAgICAgICAgc2VsZi5pbWFnZV9jb21iby5zZXRfbW9kZWwgKGltYWdlc19tb2RlbCkKKworICAgICMgQ2FsbGJhY2tzIGZyb20gdGhlIGxvYWRlcgorICAgIGRlZiBsb2FkZXJfc3VjY2Vzc19jYiAoc2VsZiwgbG9hZGVyKToKKyAgICAgICAgc2VsZi5zdGF0dXNfaW1hZ2Uuc2V0X2Zyb21faWNvbl9uYW1lICgiaW5mbyIsCisgICAgICAgICAgICBndGsuSUNPTl9TSVpFX0JVVFRPTikKKyAgICAgICAgc2VsZi5zdGF0dXNfaW1hZ2Uuc2hvdygpCisgICAgICAgIHNlbGYuc3RhdHVzX2xhYmVsLnNldF9sYWJlbCAoIlJlcG9zaXRvcnkgbWV0YWRhdGEgc3VjY2Vzc2Z1bGx5IGRvd25sb2FkZWQiKQorCisgICAgICAgICMgU2V0IHRoZSBtb2RlbHMgb24gdGhlIGNvbWJvIGJveGVzIGJhc2VkIG9uIHRoZSBtb2RlbHMgZ2VuZXJhdGVkIGZyb20KKyAgICAgICAgIyB0aGUgY29uZmlndXJhdGlvbiB0aGF0IHRoZSBsb2FkZXIgaGFzIGNyZWF0ZWQKKworICAgICAgICAjIFdlIGp1c3QgbmVlZCB0byBzZXQgdGhlIG1hY2hpbmUgaGVyZSwgdGhhdCB0aGVuIGRldGVybWluZXMgdGhlCisgICAgICAgICMgZGlzdHJvIGFuZCBpbWFnZSBvcHRpb25zLiBDdW5uaW5nIGh1aD8gOi0pCisKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uID0gc2VsZi5sb2FkZXIuY29uZmlndXJhdGlvbgorICAgICAgICBtb2RlbCA9IHNlbGYuY29uZmlndXJhdGlvbi5nZXRfbWFjaGluZXNfbW9kZWwgKCkKKyAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvLnNldF9tb2RlbCAobW9kZWwpCisKKyAgICAgICAgc2VsZi5zZXRfY29uZmlndXJhYmxlIChUcnVlKQorCisgICAgZGVmIGxvYWRlcl9lcnJvcl9jYiAoc2VsZiwgbG9hZGVyLCBtZXNzYWdlKToKKyAgICAgICAgc2VsZi5zdGF0dXNfaW1hZ2Uuc2V0X2Zyb21faWNvbl9uYW1lICgiZXJyb3IiLAorICAgICAgICAgICAgZ3RrLklDT05fU0laRV9CVVRUT04pCisgICAgICAgIHNlbGYuc3RhdHVzX2ltYWdlLnNob3coKQorICAgICAgICBzZWxmLnN0YXR1c19sYWJlbC5zZXRfdGV4dCAoIkVycm9yIGRvd25sb2FkaW5nIHJlcG9zaXRvcnkgbWV0YWRhdGEiKQorICAgICAgICBmb3Igd2lkZ2V0IGluIHNlbGYuY29uZl93aWRnZXRzOgorICAgICAgICAgICAgd2lkZ2V0LnNldF9zZW5zaXRpdmUgKEZhbHNlKQorCisgICAgZGVmIGNsZWFyX3N0YXR1c19tZXNzYWdlIChzZWxmKToKKyAgICAgICAgc2VsZi5zdGF0dXNfaW1hZ2UuaGlkZSgpCisgICAgICAgIHNlbGYuc3RhdHVzX2xhYmVsLnNldF9sYWJlbCAoCisgICAgICAgICAgICAiIiI8aT5FbnRlciB0aGUgcmVwb3NpdG9yeSBsb2NhdGlvbiBhbmQgcHJlc3MgX1JlZnJlc2g8L2k+IiIiKQorCisgICAgZGVmIF9faW5pdF9fIChzZWxmKToKKyAgICAgICAgZ3RrLkRpYWxvZy5fX2luaXRfXyAoc2VsZikKKworICAgICAgICAjIENhbmNlbAorICAgICAgICBzZWxmLmFkZF9idXR0b24gKGd0ay5TVE9DS19DQU5DRUwsIGd0ay5SRVNQT05TRV9DQU5DRUwpCisKKyAgICAgICAgIyBCdWlsZAorICAgICAgICBidXR0b24gPSBndGsuQnV0dG9uICgiX0J1aWxkIiwgTm9uZSwgVHJ1ZSkKKyAgICAgICAgaW1hZ2UgPSBndGsuSW1hZ2UgKCkKKyAgICAgICAgaW1hZ2Uuc2V0X2Zyb21fc3RvY2sgKGd0ay5TVE9DS19FWEVDVVRFLCBndGsuSUNPTl9TSVpFX0JVVFRPTikKKyAgICAgICAgYnV0dG9uLnNldF9pbWFnZSAoaW1hZ2UpCisgICAgICAgIHNlbGYuYWRkX2FjdGlvbl93aWRnZXQgKGJ1dHRvbiwgQnVpbGRTZXR1cERpYWxvZy5SRVNQT05TRV9CVUlMRCkKKyAgICAgICAgYnV0dG9uLnNob3dfYWxsICgpCisKKyAgICAgICAgIyBQdWxsIGluICpqdXN0KiB0aGUgdGFibGUgZnJvbSB0aGUgR2xhZGUgWE1MIGRhdGEuCisgICAgICAgIGd4bWwgPSBndGsuZ2xhZGUuWE1MIChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pICsgIi9jcnVtYnMvcHVjY2hvLmdsYWRlIiwKKyAgICAgICAgICAgIHJvb3QgPSAiYnVpbGRfdGFibGUiKQorICAgICAgICB0YWJsZSA9IGd4bWwuZ2V0X3dpZGdldCAoImJ1aWxkX3RhYmxlIikKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQgKHRhYmxlLCBUcnVlLCBGYWxzZSwgMCkKKworICAgICAgICAjIEdyYWIgYWxsIHRoZSB3aWRnZXRzIHRoYXQgd2UgbmVlZCB0byB0dXJuIG9uL29mZiB3aGVuIHdlIHJlZnJlc2guLi4KKyAgICAgICAgc2VsZi5jb25mX3dpZGdldHMgPSBbXQorICAgICAgICBzZWxmLmNvbmZfd2lkZ2V0cyArPSBbZ3htbC5nZXRfd2lkZ2V0ICgibWFjaGluZV9sYWJlbCIpXQorICAgICAgICBzZWxmLmNvbmZfd2lkZ2V0cyArPSBbZ3htbC5nZXRfd2lkZ2V0ICgiZGlzdHJpYnV0aW9uX2xhYmVsIildCisgICAgICAgIHNlbGYuY29uZl93aWRnZXRzICs9IFtneG1sLmdldF93aWRnZXQgKCJpbWFnZV9sYWJlbCIpXQorICAgICAgICBzZWxmLmNvbmZfd2lkZ2V0cyArPSBbZ3htbC5nZXRfd2lkZ2V0ICgibWFjaGluZV9jb21ibyIpXQorICAgICAgICBzZWxmLmNvbmZfd2lkZ2V0cyArPSBbZ3htbC5nZXRfd2lkZ2V0ICgiZGlzdHJpYnV0aW9uX2NvbWJvIildCisgICAgICAgIHNlbGYuY29uZl93aWRnZXRzICs9IFtneG1sLmdldF93aWRnZXQgKCJpbWFnZV9jb21ibyIpXQorCisgICAgICAgICMgR3JhYiB0aGUgc3RhdHVzIHdpZGdldHMKKyAgICAgICAgc2VsZi5zdGF0dXNfaW1hZ2UgPSBneG1sLmdldF93aWRnZXQgKCJzdGF0dXNfaW1hZ2UiKQorICAgICAgICBzZWxmLnN0YXR1c19sYWJlbCA9IGd4bWwuZ2V0X3dpZGdldCAoInN0YXR1c19sYWJlbCIpCisKKyAgICAgICAgIyBHcmFiIHRoZSByZWZyZXNoIGJ1dHRvbiBhbmQgY29ubmVjdCB0byB0aGUgY2xpY2tlZCBzaWduYWwKKyAgICAgICAgc2VsZi5yZWZyZXNoX2J1dHRvbiA9IGd4bWwuZ2V0X3dpZGdldCAoInJlZnJlc2hfYnV0dG9uIikKKyAgICAgICAgc2VsZi5yZWZyZXNoX2J1dHRvbi5jb25uZWN0ICgiY2xpY2tlZCIsIHNlbGYucmVmcmVzaF9idXR0b25fY2xpY2tlZCkKKworICAgICAgICAjIEdyYWIgdGhlIGxvY2F0aW9uIGVudHJ5IGFuZCBjb25uZWN0IHRvIGVkaXRhYmxlOjpjaGFuZ2VkCisgICAgICAgIHNlbGYubG9jYXRpb25fZW50cnkgPSBneG1sLmdldF93aWRnZXQgKCJsb2NhdGlvbl9lbnRyeSIpCisgICAgICAgIHNlbGYubG9jYXRpb25fZW50cnkuY29ubmVjdCAoImNoYW5nZWQiLAorICAgICAgICAgICAgc2VsZi5yZXBvc2l0b3J5X2VudHJ5X2VkaXRhYmxlX2NoYW5nZWQpCisKKyAgICAgICAgIyBHcmFiIHRoZSBtYWNoaW5lIGNvbWJvIGFuZCBob29rIG9udG8gdGhlIGNoYW5nZWQgc2lnbmFsLiBUaGlzIHRoZW4KKyAgICAgICAgIyBhbGxvd3MgdXMgdG8gcG9wdWxhdGUgdGhlIGRpc3RybyBhbmQgaW1hZ2UgY29tYm9zCisgICAgICAgIHNlbGYubWFjaGluZV9jb21ibyA9IGd4bWwuZ2V0X3dpZGdldCAoIm1hY2hpbmVfY29tYm8iKQorICAgICAgICBzZWxmLm1hY2hpbmVfY29tYm8uY29ubmVjdCAoImNoYW5nZWQiLCBzZWxmLm1hY2hpbmVfY29tYm9fY2hhbmdlZCkKKworICAgICAgICAjIFNldHVwIHRoZSBjb21ibworICAgICAgICBjZWxsID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorICAgICAgICBzZWxmLm1hY2hpbmVfY29tYm8ucGFja19zdGFydChjZWxsLCBUcnVlKQorICAgICAgICBzZWxmLm1hY2hpbmVfY29tYm8uYWRkX2F0dHJpYnV0ZShjZWxsLCAndGV4dCcsIDApCisKKyAgICAgICAgIyBHcmFiIHRoZSBkaXN0cm8gYW5kIGltYWdlIGNvbWJvcy4gV2UgbmVlZCB0aGVzZSB0byBwb3B1bGF0ZSB3aXRoCisgICAgICAgICMgbW9kZWxzIG9uY2UgdGhlIG1hY2hpbmUgaXMgY2hvc2VuCisgICAgICAgIHNlbGYuZGlzdHJpYnV0aW9uX2NvbWJvID0gZ3htbC5nZXRfd2lkZ2V0ICgiZGlzdHJpYnV0aW9uX2NvbWJvIikKKyAgICAgICAgY2VsbCA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0KCkKKyAgICAgICAgc2VsZi5kaXN0cmlidXRpb25fY29tYm8ucGFja19zdGFydChjZWxsLCBUcnVlKQorICAgICAgICBzZWxmLmRpc3RyaWJ1dGlvbl9jb21iby5hZGRfYXR0cmlidXRlKGNlbGwsICd0ZXh0JywgMCkKKworICAgICAgICBzZWxmLmltYWdlX2NvbWJvID0gZ3htbC5nZXRfd2lkZ2V0ICgiaW1hZ2VfY29tYm8iKQorICAgICAgICBjZWxsID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorICAgICAgICBzZWxmLmltYWdlX2NvbWJvLnBhY2tfc3RhcnQoY2VsbCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5pbWFnZV9jb21iby5hZGRfYXR0cmlidXRlKGNlbGwsICd0ZXh0JywgMCkKKworICAgICAgICAjIFB1dCB0aGUgZGVmYXVsdCBkZXNjcmlwdGl2ZSB0ZXh0IGluIHRoZSBzdGF0dXMgYm94CisgICAgICAgIHNlbGYuY2xlYXJfc3RhdHVzX21lc3NhZ2UoKQorCisgICAgICAgICMgTWFyayBhcyBub24tY29uZmlndXJhYmxlLCB0aGlzIGlzIGp1c3QgZ3JleXMgb3V0IHRoZSB3aWRnZXRzIHRoZQorICAgICAgICAjIHVzZXIgY2FuJ3QgeWV0IHVzZQorICAgICAgICBzZWxmLmNvbmZpZ3VyYWJsZSA9IEZhbHNlCisgICAgICAgIHNlbGYuc2V0X2NvbmZpZ3VyYWJsZShGYWxzZSkKKworICAgICAgICAjIFNob3cgdGhlIHRhYmxlCisgICAgICAgIHRhYmxlLnNob3dfYWxsICgpCisKKyAgICAgICAgIyBUaGUgbG9hZGVyIGFuZCBzb21lIHNpZ25hbHMgY29ubmVjdGVkIHRvIGl0IHRvIHVwZGF0ZSB0aGUgc3RhdHVzCisgICAgICAgICMgYXJlYQorICAgICAgICBzZWxmLmxvYWRlciA9IE1ldGFEYXRhTG9hZGVyKCkKKyAgICAgICAgc2VsZi5sb2FkZXIuY29ubmVjdCAoInN1Y2Nlc3MiLCBzZWxmLmxvYWRlcl9zdWNjZXNzX2NiKQorICAgICAgICBzZWxmLmxvYWRlci5jb25uZWN0ICgiZXJyb3IiLCBzZWxmLmxvYWRlcl9lcnJvcl9jYikKKworICAgIGRlZiB1cGRhdGVfY29uZmlndXJhdGlvbiAoc2VsZik6CisgICAgICAgICIiIiBBIHBvb3JseSBuYW1lZCBmdW5jdGlvbiBidXQgaXQgdXBkYXRlcyB0aGUgaW50ZXJuYWwgY29uZmlndXJhdGlvbgorICAgICAgICBmcm9tIHRoZSB3aWRnZXRzLiBUaGlzIGNhbiBtYWtlIHRoYXQgY29uZmlndXJhdGlvbiBjb25jcmV0ZSBhbmQgY2FuCisgICAgICAgIHRodXMgYmUgdXNlZCBmb3IgYnVpbGRpbmcgIiIiCisgICAgICAgICMgRXh0cmFjdCB0aGUgY2hvc2VuIG1hY2hpbmUgZnJvbSB0aGUgY29tYm8KKyAgICAgICAgbW9kZWwgPSBzZWxmLm1hY2hpbmVfY29tYm8uZ2V0X21vZGVsKCkKKyAgICAgICAgYWN0aXZlX2l0ZXIgPSBzZWxmLm1hY2hpbmVfY29tYm8uZ2V0X2FjdGl2ZV9pdGVyKCkKKyAgICAgICAgaWYgKGFjdGl2ZV9pdGVyKToKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5tYWNoaW5lID0gbW9kZWwuZ2V0KGFjdGl2ZV9pdGVyLCAwKVswXQorCisgICAgICAgICMgRXh0cmFjdCB0aGUgY2hvc2VuIGRpc3RybyBmcm9tIHRoZSBjb21ibworICAgICAgICBtb2RlbCA9IHNlbGYuZGlzdHJpYnV0aW9uX2NvbWJvLmdldF9tb2RlbCgpCisgICAgICAgIGFjdGl2ZV9pdGVyID0gc2VsZi5kaXN0cmlidXRpb25fY29tYm8uZ2V0X2FjdGl2ZV9pdGVyKCkKKyAgICAgICAgaWYgKGFjdGl2ZV9pdGVyKToKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5kaXN0cm8gPSBtb2RlbC5nZXQoYWN0aXZlX2l0ZXIsIDApWzBdCisKKyAgICAgICAgIyBFeHRyYWN0IHRoZSBjaG9zZW4gaW1hZ2UgZnJvbSB0aGUgY29tYm8KKyAgICAgICAgbW9kZWwgPSBzZWxmLmltYWdlX2NvbWJvLmdldF9tb2RlbCgpCisgICAgICAgIGFjdGl2ZV9pdGVyID0gc2VsZi5pbWFnZV9jb21iby5nZXRfYWN0aXZlX2l0ZXIoKQorICAgICAgICBpZiAoYWN0aXZlX2l0ZXIpOgorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmltYWdlID0gbW9kZWwuZ2V0KGFjdGl2ZV9pdGVyLCAwKVswXQorCisjIFRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMgdG8gcHVsbCBldmVudHMgb3V0IGZyb20gdGhlIGV2ZW50IHF1ZXVlIGFuZCB0aGVuIHB1c2gKKyMgdGhlbSBpbnRvIHRoZSBSdW5uaW5nQnVpbGQgKHdoaWNoIHRoZW4gZHJpdmVzIHRoZSBSdW5uaW5nQnVpbGQgd2hpY2ggdGhlbgorIyBwdXNoZXMgdGhyb3VnaCBhbmQgdXBkYXRlcyB0aGUgcHJvZ3Jlc3MgdHJlZSB2aWV3LikKKyMKKyMgVE9ETzogU2hvdWxkIGJlIGEgbWV0aG9kIG9uIHRoZSBSdW5uaW5nQnVpbGQgY2xhc3MKK2RlZiBldmVudF9oYW5kbGVfdGltZW91dCAoZXZlbnRIYW5kbGVyLCBidWlsZCk6CisgICAgIyBDb25zdW1lIGFzIG1hbnkgbWVzc2FnZXMgYXMgd2UgY2FuIC4uLgorICAgIGV2ZW50ID0gZXZlbnRIYW5kbGVyLmdldEV2ZW50KCkKKyAgICB3aGlsZSBldmVudDoKKyAgICAgICAgYnVpbGQuaGFuZGxlX2V2ZW50IChldmVudCkKKyAgICAgICAgZXZlbnQgPSBldmVudEhhbmRsZXIuZ2V0RXZlbnQoKQorICAgIHJldHVybiBUcnVlCisKK2NsYXNzIE1haW5XaW5kb3cgKGd0ay5XaW5kb3cpOgorCisgICAgIyBDYWxsYmFjayB0aGF0IGdldHMgZmlyZWQgd2hlbiB0aGUgdXNlciBoaXRzIGEgYnV0dG9uIGluIHRoZQorICAgICMgQnVpbGRTZXR1cERpYWxvZy4KKyAgICBkZWYgYnVpbGRfZGlhbG9nX2JveF9yZXNwb25zZV9jYiAoc2VsZiwgZGlhbG9nLCByZXNwb25zZV9pZCk6CisgICAgICAgIGNvbmYgPSBOb25lCisgICAgICAgIGlmIChyZXNwb25zZV9pZCA9PSBCdWlsZFNldHVwRGlhbG9nLlJFU1BPTlNFX0JVSUxEKToKKyAgICAgICAgICAgIGRpYWxvZy51cGRhdGVfY29uZmlndXJhdGlvbigpCisgICAgICAgICAgICBwcmludChkaWFsb2cuY29uZmlndXJhdGlvbi5tYWNoaW5lLCBkaWFsb2cuY29uZmlndXJhdGlvbi5kaXN0cm8sIFwKKyAgICAgICAgICAgICAgICBkaWFsb2cuY29uZmlndXJhdGlvbi5pbWFnZSkKKyAgICAgICAgICAgIGNvbmYgPSBkaWFsb2cuY29uZmlndXJhdGlvbgorCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKworICAgICAgICBpZiBjb25mOgorICAgICAgICAgICAgc2VsZi5tYW5hZ2VyLmRvX2J1aWxkIChjb25mKQorCisgICAgZGVmIGJ1aWxkX2J1dHRvbl9jbGlja2VkX2NiIChzZWxmLCBidXR0b24pOgorICAgICAgICBkaWFsb2cgPSBCdWlsZFNldHVwRGlhbG9nICgpCisKKyAgICAgICAgIyBGb3Igc29tZSB1bmtub3duIHJlYXNvbiBEaWFsb2cucnVuIGNhdXNlcyBuaWNlIGxpdHRsZSBkZWFkbG9ja3MgLi4uIDotKAorICAgICAgICBkaWFsb2cuY29ubmVjdCAoInJlc3BvbnNlIiwgc2VsZi5idWlsZF9kaWFsb2dfYm94X3Jlc3BvbnNlX2NiKQorICAgICAgICBkaWFsb2cuc2hvdygpCisKKyAgICBkZWYgX19pbml0X18gKHNlbGYpOgorICAgICAgICBndGsuV2luZG93Ll9faW5pdF9fIChzZWxmKQorCisgICAgICAgICMgUHVsbCBpbiAqanVzdCogdGhlIG1haW4gdmJveCBmcm9tIHRoZSBHbGFkZSBYTUwgZGF0YSBhbmQgdGhlbiBwYWNrCisgICAgICAgICMgdGhhdCBpbnNpZGUgdGhlIHdpbmRvdworICAgICAgICBneG1sID0gZ3RrLmdsYWRlLlhNTCAob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSArICIvY3J1bWJzL3B1Y2Noby5nbGFkZSIsCisgICAgICAgICAgICByb290ID0gIm1haW5fd2luZG93X3Zib3giKQorICAgICAgICB2Ym94ID0gZ3htbC5nZXRfd2lkZ2V0ICgibWFpbl93aW5kb3dfdmJveCIpCisgICAgICAgIHNlbGYuYWRkICh2Ym94KQorCisgICAgICAgICMgQ3JlYXRlIHRoZSB0cmVlIHZpZXdzIGZvciB0aGUgYnVpbGQgbWFuYWdlciB2aWV3IGFuZCB0aGUgcHJvZ3Jlc3MgdmlldworICAgICAgICBzZWxmLmJ1aWxkX21hbmFnZXJfdmlldyA9IEJ1aWxkTWFuYWdlclRyZWVWaWV3KCkKKyAgICAgICAgc2VsZi5ydW5uaW5nX2J1aWxkX3ZpZXcgPSBSdW5uaW5nQnVpbGRUcmVlVmlldygpCisKKyAgICAgICAgIyBHcmFiIHRoZSBzY3JvbGxlZCB3aW5kb3dzIHRoYXQgd2UgcHV0IHRoZSB0cmVlIHZpZXdzIGludG8KKyAgICAgICAgc2VsZi5yZXN1bHRzX3Njcm9sbGVkd2luZG93ID0gZ3htbC5nZXRfd2lkZ2V0ICgicmVzdWx0c19zY3JvbGxlZHdpbmRvdyIpCisgICAgICAgIHNlbGYucHJvZ3Jlc3Nfc2Nyb2xsZWR3aW5kb3cgPSBneG1sLmdldF93aWRnZXQgKCJwcm9ncmVzc19zY3JvbGxlZHdpbmRvdyIpCisKKyAgICAgICAgIyBQdXQgdGhlIHRyZWUgdmlld3MgaW5zaWRlIC4uLgorICAgICAgICBzZWxmLnJlc3VsdHNfc2Nyb2xsZWR3aW5kb3cuYWRkIChzZWxmLmJ1aWxkX21hbmFnZXJfdmlldykKKyAgICAgICAgc2VsZi5wcm9ncmVzc19zY3JvbGxlZHdpbmRvdy5hZGQgKHNlbGYucnVubmluZ19idWlsZF92aWV3KQorCisgICAgICAgICMgSG9vayB1cCB0aGUgYnVpbGQgYnV0dG9uLi4uCisgICAgICAgIHNlbGYuYnVpbGRfYnV0dG9uID0gZ3htbC5nZXRfd2lkZ2V0ICgibWFpbl90b29sYnV0dG9uX2J1aWxkIikKKyAgICAgICAgc2VsZi5idWlsZF9idXR0b24uY29ubmVjdCAoImNsaWNrZWQiLCBzZWxmLmJ1aWxkX2J1dHRvbl9jbGlja2VkX2NiKQorCisjIEknbSBub3QgdmVyeSBoYXBweSBhYm91dCB0aGUgY3VycmVudCBvd25lcnNoaXAgb2YgdGhlIFJ1bm5pbmdCdWlsZC4gSSBoYXZlCisjIG15IHN1c3BpY2lvbnMgdGhhdCB0aGlzIG9iamVjdCBzaG91bGQgYmUgaGVsZCBieSB0aGUgQnVpbGRNYW5hZ2VyIHNpbmNlIHdlCisjIGNhcmUgYWJvdXQgdGhlIHNpZ25hbHMgaW4gdGhlIG1hbmFnZXIKKworZGVmIHJ1bm5pbmdfYnVpbGRfc3VjY2VlZGVkX2NiIChydW5uaW5nX2J1aWxkLCBtYW5hZ2VyKToKKyAgICAjIE5vdGlmeSB0aGUgbWFuYWdlciB0aGF0IGEgYnVpbGQgaGFzIHN1Y2NlZWRlZC4gVGhpcyBpcyBuZWNlc3NhcnkgYXMgcGFydAorICAgICMgb2YgdGhlICdoYWNrJyB0aGF0IHdlIHVzZSBmb3IgbWFraW5nIHRoZSByb3cgaW4gdGhlIG1vZGVsIC8gdmlldworICAgICMgcmVwcmVzZW50aW5nIHRoZSBvbmdvaW5nIGJ1aWxkIGNoYW5nZSBpbnRvIGEgcm93IHJlcHJlc2VudGluZyB0aGUKKyAgICAjIGNvbXBsZXRlZCBidWlsZC4gU2luY2Ugd2Uga25vdyBvbmx5IG9uZSBidWlsZCBjYW4gYmUgcnVubmluZyBhIHRpbWUgdGhlbgorICAgICMgd2UgY2FuIGhhbmRsZSB0aGlzLgorCisgICAgIyBGSVhNRTogUmVmYWN0b3IgYWxsIHRoaXMgc28gdGhhdCB0aGUgUnVubmluZ0J1aWxkIGlzIG93bmVkIGJ5IHRoZQorICAgICMgQnVpbGRNYW5hZ2VyLiBJdCBjYW4gdGhlbiBob29rIG9udG8gdGhlIHNpZ25hbHMgZGlyZWN0bHkgYW5kIGRyaXZlCisgICAgIyBpbnRlcmVzdGluZyB0aGluZ3MgaXQgY2FyZXMgYWJvdXQuCisgICAgbWFuYWdlci5ub3RpZnlfYnVpbGRfc3VjY2VlZGVkICgpCisgICAgcHJpbnQoImJ1aWxkIHN1Y2NlZWRlZCIpCisKK2RlZiBydW5uaW5nX2J1aWxkX2ZhaWxlZF9jYiAocnVubmluZ19idWlsZCwgbWFuYWdlcik6CisgICAgIyBBcyBhYm92ZQorICAgIHByaW50KCJidWlsZCBmYWlsZWQiKQorICAgIG1hbmFnZXIubm90aWZ5X2J1aWxkX2ZhaWxlZCAoKQorCitkZWYgbWFpbiAoc2VydmVyLCBldmVudEhhbmRsZXIpOgorICAgICMgSW5pdGlhbGlzZSB0aHJlYWRpbmcuLi4KKyAgICBnb2JqZWN0LnRocmVhZHNfaW5pdCgpCisgICAgZ3RrLmdkay50aHJlYWRzX2luaXQoKQorCisgICAgbWFpbl93aW5kb3cgPSBNYWluV2luZG93ICgpCisgICAgbWFpbl93aW5kb3cuc2hvd19hbGwgKCkKKworICAgICMgU2V0IHVwIHRoZSBidWlsZCBtYW5hZ2VyIHN0dWZmIGluIGdlbmVyYWwKKyAgICBidWlsZHNfZGlyID0gb3MucGF0aC5qb2luIChvcy5nZXRjd2QoKSwgICJyZXN1bHRzIikKKyAgICBtYW5hZ2VyID0gQnVpbGRNYW5hZ2VyIChzZXJ2ZXIsIGJ1aWxkc19kaXIpCisgICAgbWFpbl93aW5kb3cuYnVpbGRfbWFuYWdlcl92aWV3LnNldF9tb2RlbCAobWFuYWdlci5tb2RlbCkKKworICAgICMgRG8gdGhlIHJ1bm5pbmcgYnVpbGQgc2V0dXAKKyAgICBydW5uaW5nX2J1aWxkID0gUnVubmluZ0J1aWxkICgpCisgICAgbWFpbl93aW5kb3cucnVubmluZ19idWlsZF92aWV3LnNldF9tb2RlbCAocnVubmluZ19idWlsZC5tb2RlbCkKKyAgICBydW5uaW5nX2J1aWxkLmNvbm5lY3QgKCJidWlsZC1zdWNjZWVkZWQiLCBydW5uaW5nX2J1aWxkX3N1Y2NlZWRlZF9jYiwKKyAgICAgICAgbWFuYWdlcikKKyAgICBydW5uaW5nX2J1aWxkLmNvbm5lY3QgKCJidWlsZC1mYWlsZWQiLCBydW5uaW5nX2J1aWxkX2ZhaWxlZF9jYiwgbWFuYWdlcikKKworICAgICMgV2UgbmVlZCB0byBzYXZlIHRoZSBtYW5hZ2VyIGludG8gdGhlIE1haW5XaW5kb3cgc28gdGhhdCB0aGUgdG9vbGJhcgorICAgICMgYnV0dG9uIGNhbiB1c2UgaXQuCisgICAgIyBGSVhNRTogUmVmYWN0b3IgPworICAgIG1haW5fd2luZG93Lm1hbmFnZXIgPSBtYW5hZ2VyCisKKyAgICAjIFVzZSBhIHRpbWVvdXQgZnVuY3Rpb24gZm9yIHByb2JpbmcgdGhlIGV2ZW50IHF1ZXVlIHRvIGZpbmQgb3V0IGlmIHdlCisgICAgIyBoYXZlIGEgbWVzc2FnZSB3YWl0aW5nIGZvciB1cy4KKyAgICBnb2JqZWN0LnRpbWVvdXRfYWRkICgyMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfaGFuZGxlX3RpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdfYnVpbGQpCisKKyAgICBndGsubWFpbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL3RvYXN0ZXJ1aS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvdG9hc3RlcnVpLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljN2U4N2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL3RvYXN0ZXJ1aS5weQpAQCAtMCwwICsxLDM1NSBAQAorIworIyBCaXRCYWtlIFRvYXN0ZXJVSSBJbXBsZW1lbnRhdGlvbgorIyBiYXNlZCBvbiAoTm8pVFRZIFVJIEltcGxlbWVudGF0aW9uIGJ5IFJpY2hhcmQgUHVyZGllCisjCisjIEhhbmRsaW5nIG91dHB1dCB0byBUVFlzIG9yIGZpbGVzIChubyBUVFkpCisjCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDEyIFJpY2hhcmQgUHVyZGllCisjIENvcHlyaWdodCAoQykgMjAxMyAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCitpbXBvcnQgc3lzCit0cnk6CisgICAgaW1wb3J0IGJiCitleGNlcHQgUnVudGltZUVycm9yIGFzIGV4YzoKKyAgICBzeXMuZXhpdChzdHIoZXhjKSkKKworZnJvbSBiYi51aSBpbXBvcnQgdWloZWxwZXIKK2Zyb20gYmIudWkuYnVpbGRpbmZvaGVscGVyIGltcG9ydCBCdWlsZEluZm9IZWxwZXIKKworaW1wb3J0IGJiLm1zZworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworCisjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUKKyMgbW9kdWxlIHByb3BlcnRpZXMgZm9yIFVJIG1vZHVsZXMgYXJlIHJlYWQgYnkgYml0YmFrZSBhbmQgdGhlIGNvbnRyYWN0IHNob3VsZCBub3QgYmUgYnJva2VuCisKKworZmVhdHVyZVNldCA9IFtiYi5jb29rZXIuQ29va2VyRmVhdHVyZXMuSE9CX0VYVFJBX0NBQ0hFUywgYmIuY29va2VyLkNvb2tlckZlYXR1cmVzLlNFTkRfREVQRU5EU19UUkVFLCBiYi5jb29rZXIuQ29va2VyRmVhdHVyZXMuQkFTRURBVEFTVE9SRV9UUkFDS0lORywgYmIuY29va2VyLkNvb2tlckZlYXR1cmVzLlNFTkRfU0FOSVRZRVZFTlRTXQorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiVG9hc3RlckxvZ2dlciIpCitpbnRlcmFjdGl2ZSA9IHN5cy5zdGRvdXQuaXNhdHR5KCkKKworCisKK2RlZiBfbG9nX3NldHRpbmdzX2Zyb21fc2VydmVyKHNlcnZlcik6CisgICAgIyBHZXQgdmFsdWVzIG9mIHZhcmlhYmxlcyB3aGljaCBjb250cm9sIG91ciBvdXRwdXQKKyAgICBpbmNsdWRlbG9ncywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCSU5DTFVERUxPR1MiXSkKKyAgICBpZiBlcnJvcjoKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZ2V0IHRoZSB2YWx1ZSBvZiBCQklOQ0xVREVMT0dTIHZhcmlhYmxlOiAlcyIsIGVycm9yKQorICAgICAgICByYWlzZSBCYXNlRXhjZXB0aW9uKGVycm9yKQorICAgIGxvZ2xpbmVzLCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQkJJTkNMVURFTE9HU19MSU5FUyJdKQorICAgIGlmIGVycm9yOgorICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBnZXQgdGhlIHZhbHVlIG9mIEJCSU5DTFVERUxPR1NfTElORVMgdmFyaWFibGU6ICVzIiwgZXJyb3IpCisgICAgICAgIHJhaXNlIEJhc2VFeGNlcHRpb24oZXJyb3IpCisgICAgY29uc29sZWxvZ2ZpbGUsIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQl9DT05TT0xFTE9HIl0pCisgICAgaWYgZXJyb3I6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGdldCB0aGUgdmFsdWUgb2YgQkJfQ09OU09MRUxPRyB2YXJpYWJsZTogJXMiLCBlcnJvcikKKyAgICAgICAgcmFpc2UgQmFzZUV4Y2VwdGlvbihlcnJvcikKKyAgICByZXR1cm4gaW5jbHVkZWxvZ3MsIGxvZ2xpbmVzLCBjb25zb2xlbG9nZmlsZQorCisKK2RlZiBtYWluKHNlcnZlciwgZXZlbnRIYW5kbGVyLCBwYXJhbXMgKToKKyAgICBoZWxwZXIgPSB1aWhlbHBlci5CQlVJSGVscGVyKCkKKworICAgIGNvbnNvbGUgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc3lzLnN0ZG91dCkKKyAgICBmb3JtYXRfc3RyID0gIiUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIgorICAgIGZvcm1hdHRlciA9IGJiLm1zZy5CQkxvZ0Zvcm1hdHRlcihmb3JtYXRfc3RyKQorICAgIGJiLm1zZy5hZGREZWZhdWx0bG9nRmlsdGVyKGNvbnNvbGUpCisgICAgY29uc29sZS5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQorICAgIGxvZ2dlci5hZGRIYW5kbGVyKGNvbnNvbGUpCisgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKworICAgIF8sIF8sIGNvbnNvbGVsb2dmaWxlID0gX2xvZ19zZXR0aW5nc19mcm9tX3NlcnZlcihzZXJ2ZXIpCisKKyAgICAjIHZlcmlmeSBhbmQgd2FybgorICAgIGJ1aWxkX2hpc3RvcnlfZW5hYmxlZCA9IFRydWUKKyAgICBpbmhlcml0bGlzdCwgXyA9IHNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiSU5IRVJJVCJdKQorCisgICAgaWYgbm90ICJidWlsZGhpc3RvcnkiIGluIGluaGVyaXRsaXN0LnNwbGl0KCIgIik6CisgICAgICAgIGxvZ2dlci53YXJuKCJidWlsZGhpc3RvcnkgaXMgbm90IGVuYWJsZWQuIFBsZWFzZSBlbmFibGUgSU5IRVJJVCArPSBcImJ1aWxkaGlzdG9yeVwiIHRvIHNlZSBpbWFnZSBkZXRhaWxzLiIpCisgICAgICAgIGJ1aWxkX2hpc3RvcnlfZW5hYmxlZCA9IEZhbHNlCisKKyAgICBpZiBub3QgcGFyYW1zLm9ic2VydmVfb25seToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJUb2FzdGVyVUkgY2FuIG9ubHkgd29yayBpbiBvYnNlcnZlciBtb2RlIikKKyAgICAgICAgcmV0dXJuIDEKKworCisgICAgbWFpbi5zaHV0ZG93biA9IDAKKyAgICBpbnRlcnJ1cHRlZCA9IEZhbHNlCisgICAgcmV0dXJuX3ZhbHVlID0gMAorICAgIGVycm9ycyA9IDAKKyAgICB3YXJuaW5ncyA9IDAKKyAgICB0YXNrZmFpbHVyZXMgPSBbXQorICAgIGZpcnN0ID0gVHJ1ZQorCisgICAgYnVpbGRpbmZvaGVscGVyID0gQnVpbGRJbmZvSGVscGVyKHNlcnZlciwgYnVpbGRfaGlzdG9yeV9lbmFibGVkKQorCisgICAgaWYgYnVpbGRpbmZvaGVscGVyLmJyYmUgaXMgbm90IE5vbmUgYW5kIGNvbnNvbGVsb2dmaWxlOgorICAgICAgICAjIGlmIHdlIGFyZSB1bmRlciBtYW5hZ2VkIG1vZGUgd2UgaGF2ZSBubyBvdGhlciBVSSBhbmQgd2UgbmVlZCB0byB3cml0ZSBvdXIgb3duIGZpbGUKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShjb25zb2xlbG9nZmlsZSkpCisgICAgICAgIGNvbmxvZ2Zvcm1hdCA9IGJiLm1zZy5CQkxvZ0Zvcm1hdHRlcihmb3JtYXRfc3RyKQorICAgICAgICBjb25zb2xlbG9nID0gbG9nZ2luZy5GaWxlSGFuZGxlcihjb25zb2xlbG9nZmlsZSkKKyAgICAgICAgYmIubXNnLmFkZERlZmF1bHRsb2dGaWx0ZXIoY29uc29sZWxvZykKKyAgICAgICAgY29uc29sZWxvZy5zZXRGb3JtYXR0ZXIoY29ubG9nZm9ybWF0KQorICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihjb25zb2xlbG9nKQorCisKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBldmVudCA9IGV2ZW50SGFuZGxlci53YWl0RXZlbnQoMC4yNSkKKyAgICAgICAgICAgIGlmIGZpcnN0OgorICAgICAgICAgICAgICAgIGZpcnN0ID0gRmFsc2UKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiVG9hc3RlclVJIHdhaXRpbmcgZm9yIGV2ZW50cyIpCisKKyAgICAgICAgICAgIGlmIGV2ZW50IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaWYgbWFpbi5zaHV0ZG93biA+IDA6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaGVscGVyLmV2ZW50SGFuZGxlcihldmVudCkKKworICAgICAgICAgICAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcworICAgICAgICAgICAgIyB0aGUgY29kZSB3aWxsIGxvb2sgaW50byB0aGUgcHJvdGVjdGVkIHZhcmlhYmxlcyBvZiB0aGUgZXZlbnQ7IG5vIGVhc3kgd2F5IGFyb3VuZCB0aGlzCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkJ1aWxkU3RhcnRlZCk6CisgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnN0b3JlX3N0YXJ0ZWRfYnVpbGQoZXZlbnQpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIChiYi5idWlsZC5UYXNrU3RhcnRlZCwgYmIuYnVpbGQuVGFza1N1Y2NlZWRlZCwgYmIuYnVpbGQuVGFza0ZhaWxlZFNpbGVudCkpOgorICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci51cGRhdGVfYW5kX3N0b3JlX3Rhc2soZXZlbnQpCisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIkxvZ2ZpbGUgZm9yIHRhc2sgJXMiLCBldmVudC5sb2dmaWxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tCYXNlKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhldmVudC5fbWVzc2FnZSkKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTG9nRXhlY1RUWSk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oZXZlbnQubXNnKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGxvZ2dpbmcuTG9nUmVjb3JkKToKKyAgICAgICAgICAgICAgICBpZiBldmVudC5sZXZlbG5vID09IC0xOgorICAgICAgICAgICAgICAgICAgICBldmVudC5sZXZlbG5vID0gZm9ybWF0dGVyLkVSUk9SCisKKyAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIuc3RvcmVfbG9nX2V2ZW50KGV2ZW50KQorICAgICAgICAgICAgICAgIGlmIGV2ZW50LmxldmVsbm8gPj0gZm9ybWF0dGVyLkVSUk9SOgorICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMgKyAxCisgICAgICAgICAgICAgICAgZWxpZiBldmVudC5sZXZlbG5vID09IGZvcm1hdHRlci5XQVJOSU5HOgorICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncyA9IHdhcm5pbmdzICsgMQorICAgICAgICAgICAgICAgICMgRm9yICJub3JtYWwiIGxvZ2dpbmcgY29uZGl0aW9ucywgZG9uJ3Qgc2hvdyBub3RlIGxvZ3MgZnJvbSB0YXNrcworICAgICAgICAgICAgICAgICMgYnV0IGRvIHNob3cgdGhlbSBpZiB0aGUgdXNlciBoYXMgY2hhbmdlZCB0aGUgZGVmYXVsdCBsb2cgbGV2ZWwgdG8KKyAgICAgICAgICAgICAgICAjIGluY2x1ZGUgdmVyYm9zZS9kZWJ1ZyBtZXNzYWdlcworICAgICAgICAgICAgICAgIGlmIGV2ZW50LnRhc2twaWQgIT0gMCBhbmQgZXZlbnQubGV2ZWxubyA8PSBmb3JtYXR0ZXIuTk9URToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGxvZ2dlci5oYW5kbGUoZXZlbnQpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuYnVpbGQuVGFza0ZhaWxlZCk6CisgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnVwZGF0ZV9hbmRfc3RvcmVfdGFzayhldmVudCkKKyAgICAgICAgICAgICAgICBsb2dmaWxlID0gZXZlbnQubG9nZmlsZQorICAgICAgICAgICAgICAgIGlmIGxvZ2ZpbGUgYW5kIG9zLnBhdGguZXhpc3RzKGxvZ2ZpbGUpOgorICAgICAgICAgICAgICAgICAgICBiYi5lcnJvcigiTG9nZmlsZSBvZiBmYWlsdXJlIHN0b3JlZCBpbjogJXMiICUgbG9nZmlsZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIHRoZXNlIGV2ZW50cyBhcmUgdW5wcm9jZXNzZWQgbm93LCBidXQgbWF5IGJlIHVzZWQgaW4gdGhlIGZ1dHVyZSB0byBsb2cKKyAgICAgICAgICAgICMgdGltaW5nIGFuZCBlcnJvciBpbmZvcm1hdGlvbnMgZnJvbSB0aGUgcGFyc2luZyBwaGFzZSBpbiBUb2FzdGVyCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCAoYmIuZXZlbnQuU2FuaXR5Q2hlY2tQYXNzZWQsIGJiLmV2ZW50LlNhbml0eUNoZWNrKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlU3RhcnRlZCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlUHJvZ3Jlc3MpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZFN0YXJ0ZWQpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRQcm9ncmVzcyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZENvbXBsZXRlZCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50Lk11bHRpcGxlUHJvdmlkZXJzKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygibXVsdGlwbGUgcHJvdmlkZXJzIGFyZSBhdmFpbGFibGUgZm9yICVzJXMgKCVzKSIsIGV2ZW50Ll9pc19ydW50aW1lIGFuZCAicnVudGltZSAiIG9yICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9pdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsICIuam9pbihldmVudC5fY2FuZGlkYXRlcykpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oImNvbnNpZGVyIGRlZmluaW5nIGEgUFJFRkVSUkVEX1BST1ZJREVSIGVudHJ5IHRvIG1hdGNoICVzIiwgZXZlbnQuX2l0ZW0pCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTm9Qcm92aWRlcik6CisgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICsgMQorICAgICAgICAgICAgICAgIGlmIGV2ZW50Ll9ydW50aW1lOgorICAgICAgICAgICAgICAgICAgICByID0gIlIiCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgciA9ICIiCisKKyAgICAgICAgICAgICAgICBpZiBldmVudC5fZGVwZW5kZWVzOgorICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gIk5vdGhpbmcgJXNQUk9WSURFUyAnJXMnIChidXQgJXMgJXNERVBFTkRTIG9uIG9yIG90aGVyd2lzZSByZXF1aXJlcyBpdCkiICUgKHIsIGV2ZW50Ll9pdGVtLCAiLCAiLmpvaW4oZXZlbnQuX2RlcGVuZGVlcyksIHIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdGV4dCA9ICJOb3RoaW5nICVzUFJPVklERVMgJyVzJyIgJSAociwgZXZlbnQuX2l0ZW0pCisKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IodGV4dCkKKyAgICAgICAgICAgICAgICBpZiBldmVudC5fcmVhc29uczoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHJlYXNvbiBpbiBldmVudC5fcmVhc29uczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiJXMiLCByZWFzb24pCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9IHJlYXNvbgorICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5zdG9yZV9sb2dfZXJyb3IodGV4dCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5Db25maWdQYXJzZWQpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5SZWNpcGVQYXJzZWQpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgZW5kIG9mIHNhdmVkIGV2ZW50cworCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCAoYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tTdGFydGVkLCBiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tTdGFydGVkLCBiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tTa2lwcGVkKSk6CisgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnN0b3JlX3N0YXJ0ZWRfdGFzayhldmVudCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tDb21wbGV0ZWQpOgorICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci51cGRhdGVfYW5kX3N0b3JlX3Rhc2soZXZlbnQpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUucnVuUXVldWVUYXNrRmFpbGVkKToKKyAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIudXBkYXRlX2FuZF9zdG9yZV90YXNrKGV2ZW50KQorICAgICAgICAgICAgICAgIHRhc2tmYWlsdXJlcy5hcHBlbmQoZXZlbnQudGFza3N0cmluZykKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlRhc2sgJXMgKCVzKSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJyVzJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnRhc2tpZCwgZXZlbnQudGFza3N0cmluZywgZXZlbnQuZXhpdGNvZGUpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrQ29tcGxldGVkLCBiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlVGFza0ZhaWxlZCkpOgorICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci51cGRhdGVfYW5kX3N0b3JlX3Rhc2soZXZlbnQpCisgICAgICAgICAgICAgICAgY29udGludWUKKworCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCAoYmIuZXZlbnQuVHJlZURhdGFQcmVwYXJhdGlvblN0YXJ0ZWQsIGJiLmV2ZW50LlRyZWVEYXRhUHJlcGFyYXRpb25Db21wbGV0ZWQpKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCAoYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQsIGJiLmNvbW1hbmQuQ29tbWFuZEZhaWxlZCkpOgorCisgICAgICAgICAgICAgICAgZXJyb3Jjb2RlID0gMAorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZEZhaWxlZCk6CisgICAgICAgICAgICAgICAgICAgIGVycm9ycyArPSAxCisgICAgICAgICAgICAgICAgICAgIGVycm9yY29kZSA9IDEKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJDb21tYW5kIGV4ZWN1dGlvbiBmYWlsZWQ6ICVzIiwgZXZlbnQuZXJyb3IpCisKKyAgICAgICAgICAgICAgICAjIHVwZGF0ZSB0aGUgYnVpbGQgaW5mbyBoZWxwZXIgb24gQnVpbGRDb21wbGV0ZWQsIG5vdCBvbiBDb21tYW5kWFhYCisgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnVwZGF0ZV9idWlsZF9pbmZvcm1hdGlvbihldmVudCwgZXJyb3JzLCB3YXJuaW5ncywgdGFza2ZhaWx1cmVzKQorICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5jbG9zZShlcnJvcmNvZGUpCisgICAgICAgICAgICAgICAgIyBtYXJrIHRoZSBsb2cgb3V0cHV0OyBjb250cm9sbGVycyBtYXkga2lsbCB0aGUgdG9hc3RlclVJIGFmdGVyIHNlZWluZyB0aGlzIGxvZworICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJUb2FzdGVyVUkgYnVpbGQgZG9uZSAxLCBicmJlOiAlcyIsIGJ1aWxkaW5mb2hlbHBlci5icmJlICkKKworICAgICAgICAgICAgICAgICMgd2Ugc3RhcnQgYSBuZXcgYnVpbGQgaW5mbworICAgICAgICAgICAgICAgIGlmIGJ1aWxkaW5mb2hlbHBlci5icmJlIGlzIG5vdCBOb25lOgorCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiVG9hc3RlclVJIHVuZGVyIEJ1aWxkRW52aXJvbm1lbnQgbWFuYWdlbWVudCAtIGV4aXRpbmcgYWZ0ZXIgdGhlIGJ1aWxkIikKKyAgICAgICAgICAgICAgICAgICAgc2VydmVyLnRlcm1pbmF0ZVNlcnZlcigpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJUb2FzdGVyVUkgcHJlcGFyZWQgZm9yIG5ldyBidWlsZCIpCisgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IDAKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3MgPSAwCisgICAgICAgICAgICAgICAgICAgIHRhc2tmYWlsdXJlcyA9IFtdCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlciA9IEJ1aWxkSW5mb0hlbHBlcihzZXJ2ZXIsIGJ1aWxkX2hpc3RvcnlfZW5hYmxlZCkKKworICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJUb2FzdGVyVUkgYnVpbGQgZG9uZSAyIikKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCAoYmIuY29tbWFuZC5Db21tYW5kQ29tcGxldGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmNvbW1hbmQuQ29tbWFuZEZhaWxlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5jb21tYW5kLkNvbW1hbmRFeGl0KSk6CisgICAgICAgICAgICAgICAgZXJyb3Jjb2RlID0gMAorCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTWV0YWRhdGFFdmVudCk6CisgICAgICAgICAgICAgICAgaWYgZXZlbnQudHlwZSA9PSAiU2luZ2xlUGFja2FnZUluZm8iOgorICAgICAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIuc3RvcmVfYnVpbGRfcGFja2FnZV9pbmZvcm1hdGlvbihldmVudCkKKyAgICAgICAgICAgICAgICBlbGlmIGV2ZW50LnR5cGUgPT0gIkxheWVySW5mbyI6CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5zdG9yZV9sYXllcl9pbmZvKGV2ZW50KQorICAgICAgICAgICAgICAgIGVsaWYgZXZlbnQudHlwZSA9PSAiQnVpbGRTdGF0c0xpc3QiOgorICAgICAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIuc3RvcmVfdGFza3Nfc3RhdHMoZXZlbnQpCisgICAgICAgICAgICAgICAgZWxpZiBldmVudC50eXBlID09ICJJbWFnZVBrZ0xpc3QiOgorICAgICAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIuc3RvcmVfdGFyZ2V0X3BhY2thZ2VfZGF0YShldmVudCkKKyAgICAgICAgICAgICAgICBlbGlmIGV2ZW50LnR5cGUgPT0gIk1pc3NlZFNzdGF0ZSI6CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5zdG9yZV9taXNzZWRfc3RhdGVfdGFza3MoZXZlbnQpCisgICAgICAgICAgICAgICAgZWxpZiBldmVudC50eXBlID09ICJJbWFnZUZpbGVTaXplIjoKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnVwZGF0ZV90YXJnZXRfaW1hZ2VfZmlsZShldmVudCkKKyAgICAgICAgICAgICAgICBlbGlmIGV2ZW50LnR5cGUgPT0gIkFydGlmYWN0RmlsZVNpemUiOgorICAgICAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIudXBkYXRlX2FydGlmYWN0X2ltYWdlX2ZpbGUoZXZlbnQpCisgICAgICAgICAgICAgICAgZWxpZiBldmVudC50eXBlID09ICJMaWNlbnNlTWFuaWZlc3RQYXRoIjoKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnN0b3JlX2xpY2Vuc2VfbWFuaWZlc3RfcGF0aChldmVudCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVucHJvY2Vzc2VkIE1ldGFkYXRhRXZlbnQgJXMgIiwgc3RyKGV2ZW50KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb29rZXIuQ29va2VyRXhpdCk6CisgICAgICAgICAgICAgICAgIyBleGl0IHdoZW4gdGhlIHNlcnZlciBleGl0cworICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICMgaWdub3JlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCAoYmIuZXZlbnQuQnVpbGRCYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LlN0YW1wVXBkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LlJlY2lwZVByZUZpbmFsaXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlRXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIucnVucXVldWUucnVuUXVldWVFeGl0V2FpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5PcGVyYXRpb25Qcm9ncmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5jb21tYW5kLkNvbW1hbmRGYWlsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuY29tbWFuZC5Db21tYW5kRXhpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5jb21tYW5kLkNvbW1hbmRDb21wbGV0ZWQpKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5EZXBUcmVlR2VuZXJhdGVkKToKKyAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIuc3RvcmVfZGVwZW5kZW5jeV9pbmZvcm1hdGlvbihldmVudCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVua25vd24gZXZlbnQ6ICVzIiwgZXZlbnQpCisgICAgICAgICAgICByZXR1cm5fdmFsdWUgKz0gMQorCisgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGlvZXJyb3I6CisgICAgICAgICAgICAjIGlnbm9yZSBpbnRlcnJ1cHRlZCBpbworICAgICAgICAgICAgaWYgaW9lcnJvci5hcmdzWzBdID09IDQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBtYWluLnNodXRkb3duID0gMQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAjIHByaW50IGVycm9ycyB0byBsb2cKKyAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgICAgIGZyb20gcHByaW50IGltcG9ydCBwZm9ybWF0CisgICAgICAgICAgICBleGNlcHRpb25fZGF0YSA9IHRyYWNlYmFjay5mb3JtYXRfZXhjKCkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiJXNcbiVzIiAsIGUsIGV4Y2VwdGlvbl9kYXRhKQorCisgICAgICAgICAgICBfLCBfLCB0YiA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBpZiB0YiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjdXJyID0gdGIKKyAgICAgICAgICAgICAgICB3aGlsZSBjdXJyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiRXJyb3IgZGF0YSBkdW1wICVzXG4lc1xuIiAsIHRyYWNlYmFjay5mb3JtYXRfdGIoY3VyciwxKSwgcGZvcm1hdChjdXJyLnRiX2ZyYW1lLmZfbG9jYWxzKSkKKyAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnIudGJfbmV4dAorCisgICAgICAgICAgICAjIHNhdmUgdGhlbSB0byBkYXRhYmFzZSwgaWYgcG9zc2libGU7IGlmIGl0IGZhaWxzLCB3ZSBhbHJlYWR5IGxvZ2dlZCB0byBjb25zb2xlLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5zdG9yZV9sb2dfZXhjZXB0aW9uKCIlc1xuJXMiICUgKHN0cihlKSwgZXhjZXB0aW9uX2RhdGEpKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBjZToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNSSVRJQ0FMIC0gRmFpbGVkIHRvIHRvIHNhdmUgdG9hc3RlciBleGNlcHRpb24gdG8gdGhlIGRhdGFiYXNlOiAlcyIsIHN0cihjZSkpCisKKyAgICAgICAgICAgICMgbWFrZSBzdXJlIHdlIHJldHVybiB3aXRoIGFuIGVycm9yCisgICAgICAgICAgICByZXR1cm5fdmFsdWUgKz0gMQorCisgICAgaWYgaW50ZXJydXB0ZWQ6CisgICAgICAgIGlmIHJldHVybl92YWx1ZSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuX3ZhbHVlICs9IDEKKworICAgIGxvZ2dlci53YXJuKCJSZXR1cm4gdmFsdWUgaXMgJWQiLCByZXR1cm5fdmFsdWUpCisgICAgcmV0dXJuIHJldHVybl92YWx1ZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS91aWV2ZW50LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS91aWV2ZW50LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYzUwYzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL3VpZXZlbnQucHkKQEAgLTAsMCArMSwxNTUgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoQykgMjAwNiAtIDIwMDcgIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA2IC0gMjAwNyAgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKworIiIiCitVc2UgdGhpcyBjbGFzcyB0byBmb3JrIG9mZiBhIHRocmVhZCB0byByZWNpZXZlIGV2ZW50IGNhbGxiYWNrcyBmcm9tIHRoZSBiaXRiYWtlCitzZXJ2ZXIgYW5kIHF1ZXVlIHRoZW0gZm9yIHRoZSBVSSB0byBwcm9jZXNzLiBUaGlzIHByb2Nlc3MgbXVzdCBiZSB1c2VkIHRvIGF2b2lkCitjbGllbnQvc2VydmVyIGRlYWRsb2Nrcy4KKyIiIgorCitpbXBvcnQgc29ja2V0LCB0aHJlYWRpbmcsIHBpY2tsZQorZnJvbSBTaW1wbGVYTUxSUENTZXJ2ZXIgaW1wb3J0IFNpbXBsZVhNTFJQQ1NlcnZlciwgU2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIKKworY2xhc3MgQkJVSUV2ZW50UXVldWU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIEJCU2VydmVyLCBjbGllbnRpbmZvPSgibG9jYWxob3N0LCAwIikpOgorCisgICAgICAgIHNlbGYuZXZlbnRRdWV1ZSA9IFtdCisgICAgICAgIHNlbGYuZXZlbnRRdWV1ZUxvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgIHNlbGYuZXZlbnRRdWV1ZU5vdGlmeSA9IHRocmVhZGluZy5FdmVudCgpCisKKyAgICAgICAgc2VsZi5CQlNlcnZlciA9IEJCU2VydmVyCisgICAgICAgIHNlbGYuY2xpZW50aW5mbyA9IGNsaWVudGluZm8KKworICAgICAgICBzZXJ2ZXIgPSBVSVhNTFJQQ1NlcnZlcihzZWxmLmNsaWVudGluZm8pCisgICAgICAgIHNlbGYuaG9zdCwgc2VsZi5wb3J0ID0gc2VydmVyLnNvY2tldC5nZXRzb2NrbmFtZSgpCisKKyAgICAgICAgc2VydmVyLnJlZ2lzdGVyX2Z1bmN0aW9uKCBzZWxmLnN5c3RlbV9xdWl0LCAiZXZlbnQucXVpdCIgKQorICAgICAgICBzZXJ2ZXIucmVnaXN0ZXJfZnVuY3Rpb24oIHNlbGYuc2VuZF9ldmVudCwgImV2ZW50LnNlbmRwaWNrbGUiICkKKyAgICAgICAgc2VydmVyLnNvY2tldC5zZXR0aW1lb3V0KDEpCisKKyAgICAgICAgc2VsZi5FdmVudEhhbmRsZXIgPSBOb25lCisgICAgICAgIGNvdW50X3RyaWVzID0gMAorCisgICAgICAgICMgdGhlIGV2ZW50IGhhbmRsZXIgcmVnaXN0cmF0aW9uIG1heSBmYWlsIGhlcmUgZHVlIHRvIGNvb2tlciBiZWluZyBpbiBpbnZhbGlkIHN0YXRlCisgICAgICAgICMgdGhpcyBpcyBhIHRyYW5zaWVudCBzaXR1YXRpb24sIGFuZCB3ZSBzaG91bGQgcmV0cnkgYSBjb3VwbGUgb2YgdGltZXMgYmVmb3JlCisgICAgICAgICMgZ2l2aW5nIHVwCisKKyAgICAgICAgd2hpbGUgc2VsZi5FdmVudEhhbmRsZXIgPT0gTm9uZSBhbmQgY291bnRfdHJpZXMgPCA1OgorICAgICAgICAgICAgc2VsZi5FdmVudEhhbmRsZSA9IHNlbGYuQkJTZXJ2ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoc2VsZi5ob3N0LCBzZWxmLnBvcnQpCisKKyAgICAgICAgICAgIGlmIChzZWxmLkV2ZW50SGFuZGxlICE9IE5vbmUpOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGJiLndhcm4oIkNvdWxkIG5vdCByZWdpc3RlciBVSSBldmVudCBoYW5kbGVyICVzOiVkLCByZXRyeSIgJSAoc2VsZi5ob3N0LCBzZWxmLnBvcnQpKQorICAgICAgICAgICAgY291bnRfdHJpZXMgKz0gMQorICAgICAgICAgICAgaW1wb3J0IHRpbWUKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKworCisgICAgICAgIGlmIHNlbGYuRXZlbnRIYW5kbGUgPT0gTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQ291bGQgbm90IHJlZ2lzdGVyIFVJIGV2ZW50IGhhbmRsZXIiKQorCisgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyCisKKyAgICAgICAgc2VsZi50ID0gdGhyZWFkaW5nLlRocmVhZCgpCisgICAgICAgIHNlbGYudC5zZXREYWVtb24oVHJ1ZSkKKyAgICAgICAgc2VsZi50LnJ1biA9IHNlbGYuc3RhcnRDYWxsYmFja0hhbmRsZXIKKyAgICAgICAgc2VsZi50LnN0YXJ0KCkKKworICAgIGRlZiBnZXRFdmVudChzZWxmKToKKworICAgICAgICBzZWxmLmV2ZW50UXVldWVMb2NrLmFjcXVpcmUoKQorCisgICAgICAgIGlmIGxlbihzZWxmLmV2ZW50UXVldWUpID09IDA6CisgICAgICAgICAgICBzZWxmLmV2ZW50UXVldWVMb2NrLnJlbGVhc2UoKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBpdGVtID0gc2VsZi5ldmVudFF1ZXVlLnBvcCgwKQorCisgICAgICAgIGlmIGxlbihzZWxmLmV2ZW50UXVldWUpID09IDA6CisgICAgICAgICAgICBzZWxmLmV2ZW50UXVldWVOb3RpZnkuY2xlYXIoKQorCisgICAgICAgIHNlbGYuZXZlbnRRdWV1ZUxvY2sucmVsZWFzZSgpCisgICAgICAgIHJldHVybiBpdGVtCisKKyAgICBkZWYgd2FpdEV2ZW50KHNlbGYsIGRlbGF5KToKKyAgICAgICAgc2VsZi5ldmVudFF1ZXVlTm90aWZ5LndhaXQoZGVsYXkpCisgICAgICAgIHJldHVybiBzZWxmLmdldEV2ZW50KCkKKworICAgIGRlZiBxdWV1ZV9ldmVudChzZWxmLCBldmVudCk6CisgICAgICAgIHNlbGYuZXZlbnRRdWV1ZUxvY2suYWNxdWlyZSgpCisgICAgICAgIHNlbGYuZXZlbnRRdWV1ZS5hcHBlbmQoZXZlbnQpCisgICAgICAgIHNlbGYuZXZlbnRRdWV1ZU5vdGlmeS5zZXQoKQorICAgICAgICBzZWxmLmV2ZW50UXVldWVMb2NrLnJlbGVhc2UoKQorCisgICAgZGVmIHNlbmRfZXZlbnQoc2VsZiwgZXZlbnQpOgorICAgICAgICBzZWxmLnF1ZXVlX2V2ZW50KHBpY2tsZS5sb2FkcyhldmVudCkpCisKKyAgICBkZWYgc3RhcnRDYWxsYmFja0hhbmRsZXIoc2VsZik6CisKKyAgICAgICAgc2VsZi5zZXJ2ZXIudGltZW91dCA9IDEKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuc2VydmVyLnF1aXQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuaGFuZGxlX3JlcXVlc3QoKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkJCVUlFdmVudFF1ZXVlLnN0YXJ0Q2FsbGJhY2tIYW5kbGVyOiBFeGNlcHRpb24gd2hpbGUgdHJ5aW5nIHRvIGhhbmRsZSByZXF1ZXN0OiAlc1xuJXMiICUgKGUsIHRyYWNlYmFjay5mb3JtYXRfZXhjKGUpKSkKKworICAgICAgICBzZWxmLnNlcnZlci5zZXJ2ZXJfY2xvc2UoKQorCisgICAgZGVmIHN5c3RlbV9xdWl0KCBzZWxmICk6CisgICAgICAgICIiIgorICAgICAgICBTaHV0IGRvd24gdGhlIGNhbGxiYWNrIHRocmVhZAorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5CQlNlcnZlci51bnJlZ2lzdGVyRXZlbnRIYW5kbGVyKHNlbGYuRXZlbnRIYW5kbGUpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5zZXJ2ZXIucXVpdCA9IFRydWUKKworY2xhc3MgVUlYTUxSUENTZXJ2ZXIgKFNpbXBsZVhNTFJQQ1NlcnZlcik6CisKKyAgICBkZWYgX19pbml0X18oIHNlbGYsIGludGVyZmFjZSApOgorICAgICAgICBzZWxmLnF1aXQgPSBGYWxzZQorICAgICAgICBTaW1wbGVYTUxSUENTZXJ2ZXIuX19pbml0X18oIHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SGFuZGxlcj1TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ1JlcXVlc3RzPUZhbHNlLCBhbGxvd19ub25lPVRydWUpCisKKyAgICBkZWYgZ2V0X3JlcXVlc3Qoc2VsZik6CisgICAgICAgIHdoaWxlIG5vdCBzZWxmLnF1aXQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc29jaywgYWRkciA9IHNlbGYuc29ja2V0LmFjY2VwdCgpCisgICAgICAgICAgICAgICAgc29jay5zZXR0aW1lb3V0KDEpCisgICAgICAgICAgICAgICAgcmV0dXJuIChzb2NrLCBhZGRyKQorICAgICAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIChOb25lLCBOb25lKQorCisgICAgZGVmIGNsb3NlX3JlcXVlc3Qoc2VsZiwgcmVxdWVzdCk6CisgICAgICAgIGlmIHJlcXVlc3QgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBTaW1wbGVYTUxSUENTZXJ2ZXIuY2xvc2VfcmVxdWVzdChzZWxmLCByZXF1ZXN0KQorCisgICAgZGVmIHByb2Nlc3NfcmVxdWVzdChzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcyk6CisgICAgICAgIGlmIHJlcXVlc3QgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBTaW1wbGVYTUxSUENTZXJ2ZXIucHJvY2Vzc19yZXF1ZXN0KHNlbGYsIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL3VpaGVscGVyLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS91aWhlbHBlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzAzMzg3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS91aWhlbHBlci5weQpAQCAtMCwwICsxLDEwMCBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2IC0gMjAwNyAgTWljaGFlbCAnTWlja2V5JyBMYXVlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDYgLSAyMDA3ICBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGJiLmJ1aWxkCisKK2NsYXNzIEJCVUlIZWxwZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLm5lZWRVcGRhdGUgPSBGYWxzZQorICAgICAgICBzZWxmLnJ1bm5pbmdfdGFza3MgPSB7fQorICAgICAgICAjIFJ1bm5pbmcgUElEcyBwcmVzZXJ2ZXMgdGhlIG9yZGVyIHRhc2tzIHdlcmUgZXhlY3V0ZWQgaW4KKyAgICAgICAgc2VsZi5ydW5uaW5nX3BpZHMgPSBbXQorICAgICAgICBzZWxmLmZhaWxlZF90YXNrcyA9IFtdCisgICAgICAgIHNlbGYudGFza251bWJlcl9jdXJyZW50ID0gMAorICAgICAgICBzZWxmLnRhc2tudW1iZXJfdG90YWwgPSAwCisKKyAgICBkZWYgZXZlbnRIYW5kbGVyKHNlbGYsIGV2ZW50KToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuYnVpbGQuVGFza1N0YXJ0ZWQpOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nX3Rhc2tzW2V2ZW50LnBpZF0gPSB7ICd0aXRsZScgOiAiJXMgJXMiICUgKGV2ZW50Ll9wYWNrYWdlLCBldmVudC5fdGFzaykgfQorICAgICAgICAgICAgc2VsZi5ydW5uaW5nX3BpZHMuYXBwZW5kKGV2ZW50LnBpZCkKKyAgICAgICAgICAgIHNlbGYubmVlZFVwZGF0ZSA9IFRydWUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuYnVpbGQuVGFza1N1Y2NlZWRlZCk6CisgICAgICAgICAgICBkZWwgc2VsZi5ydW5uaW5nX3Rhc2tzW2V2ZW50LnBpZF0KKyAgICAgICAgICAgIHNlbGYucnVubmluZ19waWRzLnJlbW92ZShldmVudC5waWQpCisgICAgICAgICAgICBzZWxmLm5lZWRVcGRhdGUgPSBUcnVlCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tGYWlsZWRTaWxlbnQpOgorICAgICAgICAgICAgZGVsIHNlbGYucnVubmluZ190YXNrc1tldmVudC5waWRdCisgICAgICAgICAgICBzZWxmLnJ1bm5pbmdfcGlkcy5yZW1vdmUoZXZlbnQucGlkKQorICAgICAgICAgICAgIyBEb24ndCBhZGQgdG8gdGhlIGZhaWxlZCB0YXNrcyBsaXN0IHNpbmNlIHRoaXMgaXMgZS5nLiBhIHNldHNjZW5lIHRhc2sgZmFpbHVyZQorICAgICAgICAgICAgc2VsZi5uZWVkVXBkYXRlID0gVHJ1ZQorICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrRmFpbGVkKToKKyAgICAgICAgICAgIGRlbCBzZWxmLnJ1bm5pbmdfdGFza3NbZXZlbnQucGlkXQorICAgICAgICAgICAgc2VsZi5ydW5uaW5nX3BpZHMucmVtb3ZlKGV2ZW50LnBpZCkKKyAgICAgICAgICAgIHNlbGYuZmFpbGVkX3Rhc2tzLmFwcGVuZCggeyAndGl0bGUnIDogIiVzICVzIiAlIChldmVudC5fcGFja2FnZSwgZXZlbnQuX3Rhc2spfSkKKyAgICAgICAgICAgIHNlbGYubmVlZFVwZGF0ZSA9IFRydWUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUucnVuUXVldWVUYXNrU3RhcnRlZCkgb3IgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tTdGFydGVkKToKKyAgICAgICAgICAgIHNlbGYudGFza251bWJlcl9jdXJyZW50ID0gZXZlbnQuc3RhdHMuY29tcGxldGVkICsgZXZlbnQuc3RhdHMuYWN0aXZlICsgZXZlbnQuc3RhdHMuZmFpbGVkICsgMQorICAgICAgICAgICAgc2VsZi50YXNrbnVtYmVyX3RvdGFsID0gZXZlbnQuc3RhdHMudG90YWwKKyAgICAgICAgICAgIHNlbGYubmVlZFVwZGF0ZSA9IFRydWUKKworICAgIGRlZiBnZXRUYXNrcyhzZWxmKToKKyAgICAgICAgc2VsZi5uZWVkVXBkYXRlID0gRmFsc2UKKyAgICAgICAgcmV0dXJuIChzZWxmLnJ1bm5pbmdfdGFza3MsIHNlbGYuZmFpbGVkX3Rhc2tzKQorCisgICAgZGVmIGZpbmRTZXJ2ZXJEZXRhaWxzKHNlbGYpOgorICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgIGltcG9ydCBvcHRwYXJzZQorICAgICAgICBmcm9tIGJiLnNlcnZlci54bWxycGMgaW1wb3J0IEJpdGJha2VTZXJ2ZXJJbmZvLCBCaXRCYWtlU2VydmVyQ29ubmVjdGlvbgorICAgICAgICBob3N0ID0gIiIKKyAgICAgICAgcG9ydCA9IDAKKyAgICAgICAgYmluZCA9ICIiCisgICAgICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigKKyAgICAgICAgICAgIHVzYWdlID0gIiIiJXByb2cgLUggaG9zdCAtUCBwb3J0IC1CIGJpbmRhZGRyIiIiKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItSCIsICItLWhvc3QiLCBoZWxwID0gIkJpdGJha2Ugc2VydmVyJ3MgSVAgYWRkcmVzcyIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlIiwgZGVzdCA9ICJob3N0IiwgZGVmYXVsdCA9IE5vbmUpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1QIiwgIi0tcG9ydCIsIGhlbHAgPSAiQml0YmFrZSBzZXJ2ZXIncyBQb3J0IG51bWJlciIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlIiwgZGVzdCA9ICJwb3J0IiwgZGVmYXVsdCA9IE5vbmUpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1CIiwgIi0tYmluZCIsIGhlbHAgPSAiSG9iMiBsb2NhbCBiaW5kIGFkZHJlc3MiLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsIGRlc3QgPSAiYmluZCIsIGRlZmF1bHQgPSBOb25lKQorCisgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhzeXMuYXJndikKKyAgICAgICAgZm9yIGtleSwgdmFsIGluIG9wdGlvbnMuX19kaWN0X18uaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGtleSA9PSAnaG9zdCcgYW5kIHZhbDoKKyAgICAgICAgICAgICAgICBob3N0ID0gdmFsCisgICAgICAgICAgICBlbGlmIGtleSA9PSAncG9ydCcgYW5kIHZhbDoKKyAgICAgICAgICAgICAgICBwb3J0ID0gaW50KHZhbCkKKyAgICAgICAgICAgIGVsaWYga2V5ID09ICdiaW5kJyBhbmQgdmFsOgorICAgICAgICAgICAgICAgIGJpbmQgPSB2YWwKKworICAgICAgICBpZiBub3QgaG9zdCBvciBub3QgcG9ydCBvciBub3QgYmluZDoKKyAgICAgICAgICAgIHBhcnNlci5wcmludF91c2FnZSgpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIHNlcnZlcmluZm8gPSBCaXRiYWtlU2VydmVySW5mbyhob3N0LCBwb3J0KQorICAgICAgICBjbGllbnRpbmZvID0gKGJpbmQsIDApCisgICAgICAgIGNvbm5lY3Rpb24gPSBCaXRCYWtlU2VydmVyQ29ubmVjdGlvbihzZXJ2ZXJpbmZvLCBjbGllbnRpbmZvKQorCisgICAgICAgIHNlcnZlciA9IGNvbm5lY3Rpb24uY29ubmVjdGlvbgorICAgICAgICBldmVudEhhbmRsZXIgPSBjb25uZWN0aW9uLmV2ZW50cworCisgICAgICAgIHJldHVybiBzZXJ2ZXIsIGV2ZW50SGFuZGxlciwgaG9zdCwgYmluZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3V0aWxzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWZhYTQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91dGlscy5weQpAQCAtMCwwICsxLDEzMTIgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgVXRpbGl0eSBGdW5jdGlvbnMKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwNCBNaWNoYWVsIExhdWVyCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgcmUsIGZjbnRsLCBvcywgc3RyaW5nLCBzdGF0LCBzaHV0aWwsIHRpbWUKK2ltcG9ydCBzeXMKK2ltcG9ydCBlcnJubworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBiYgoraW1wb3J0IGJiLm1zZworaW1wb3J0IG11bHRpcHJvY2Vzc2luZworaW1wb3J0IGZjbnRsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IGdsb2IKK2ltcG9ydCBmbm1hdGNoCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgZXJybm8KK2ltcG9ydCBzaWduYWwKK2Zyb20gY29tbWFuZHMgaW1wb3J0IGdldHN0YXR1c291dHB1dAorZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgorZnJvbSBjdHlwZXMgaW1wb3J0IGNkbGwKKworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5VdGlsIikKKworZGVmIGNsZWFuX2NvbnRleHQoKToKKyAgICByZXR1cm4geworICAgICAgICAib3MiOiBvcywKKyAgICAgICAgImJiIjogYmIsCisgICAgICAgICJ0aW1lIjogdGltZSwKKyAgICB9CisKK2RlZiBnZXRfY29udGV4dCgpOgorICAgIHJldHVybiBfY29udGV4dAorICAgIAorCitkZWYgc2V0X2NvbnRleHQoY3R4KToKKyAgICBfY29udGV4dCA9IGN0eAorCisjIENvbnRleHQgdXNlZCBpbiBiZXR0ZXJfZXhlYywgZXZhbAorX2NvbnRleHQgPSBjbGVhbl9jb250ZXh0KCkKKworY2xhc3MgVmVyc2lvblN0cmluZ0V4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiBhbiBpbnZhbGlkIHZlcnNpb24gc3BlY2lmaWNhdGlvbiBpcyBmb3VuZCIiIgorCitkZWYgZXhwbG9kZV92ZXJzaW9uKHMpOgorICAgIHIgPSBbXQorICAgIGFscGhhX3JlZ2V4cCA9IHJlLmNvbXBpbGUoJ14oW2EtekEtWl0rKSguKikkJykKKyAgICBudW1lcmljX3JlZ2V4cCA9IHJlLmNvbXBpbGUoJ14oXGQrKSguKikkJykKKyAgICB3aGlsZSAocyAhPSAnJyk6CisgICAgICAgIGlmIHNbMF0gaW4gc3RyaW5nLmRpZ2l0czoKKyAgICAgICAgICAgIG0gPSBudW1lcmljX3JlZ2V4cC5tYXRjaChzKQorICAgICAgICAgICAgci5hcHBlbmQoKDAsIGludChtLmdyb3VwKDEpKSkpCisgICAgICAgICAgICBzID0gbS5ncm91cCgyKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgc1swXSBpbiBzdHJpbmcubGV0dGVyczoKKyAgICAgICAgICAgIG0gPSBhbHBoYV9yZWdleHAubWF0Y2gocykKKyAgICAgICAgICAgIHIuYXBwZW5kKCgxLCBtLmdyb3VwKDEpKSkKKyAgICAgICAgICAgIHMgPSBtLmdyb3VwKDIpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBzWzBdID09ICd+JzoKKyAgICAgICAgICAgIHIuYXBwZW5kKCgtMSwgc1swXSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByLmFwcGVuZCgoMiwgc1swXSkpCisgICAgICAgIHMgPSBzWzE6XQorICAgIHJldHVybiByCisKK2RlZiBzcGxpdF92ZXJzaW9uKHMpOgorICAgICIiIlNwbGl0IGEgdmVyc2lvbiBzdHJpbmcgaW50byBpdHMgY29uc3RpdHVlbnQgcGFydHMgKFBFLCBQViwgUFIpIiIiCisgICAgcyA9IHMuc3RyaXAoIiA8Pj0iKQorICAgIGUgPSAwCisgICAgaWYgcy5jb3VudCgnOicpOgorICAgICAgICBlID0gaW50KHMuc3BsaXQoIjoiKVswXSkKKyAgICAgICAgcyA9IHMuc3BsaXQoIjoiKVsxXQorICAgIHIgPSAiIgorICAgIGlmIHMuY291bnQoJy0nKToKKyAgICAgICAgciA9IHMucnNwbGl0KCItIiwgMSlbMV0KKyAgICAgICAgcyA9IHMucnNwbGl0KCItIiwgMSlbMF0KKyAgICB2ID0gcworICAgIHJldHVybiAoZSwgdiwgcikKKworZGVmIHZlcmNtcF9wYXJ0KGEsIGIpOgorICAgIHZhID0gZXhwbG9kZV92ZXJzaW9uKGEpCisgICAgdmIgPSBleHBsb2RlX3ZlcnNpb24oYikKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBpZiB2YSA9PSBbXToKKyAgICAgICAgICAgIChvYSwgY2EpID0gKDAsIE5vbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAob2EsIGNhKSA9IHZhLnBvcCgwKQorICAgICAgICBpZiB2YiA9PSBbXToKKyAgICAgICAgICAgIChvYiwgY2IpID0gKDAsIE5vbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAob2IsIGNiKSA9IHZiLnBvcCgwKQorICAgICAgICBpZiAob2EsIGNhKSA9PSAoMCwgTm9uZSkgYW5kIChvYiwgY2IpID09ICgwLCBOb25lKToKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGlmIG9hIDwgb2I6CisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgZWxpZiBvYSA+IG9iOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZWxpZiBjYSA8IGNiOgorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIGVsaWYgY2EgPiBjYjoKKyAgICAgICAgICAgIHJldHVybiAxCisKK2RlZiB2ZXJjbXAodGEsIHRiKToKKyAgICAoZWEsIHZhLCByYSkgPSB0YQorICAgIChlYiwgdmIsIHJiKSA9IHRiCisKKyAgICByID0gaW50KGVhIG9yIDApIC0gaW50KGViIG9yIDApCisgICAgaWYgKHIgPT0gMCk6CisgICAgICAgIHIgPSB2ZXJjbXBfcGFydCh2YSwgdmIpCisgICAgaWYgKHIgPT0gMCk6CisgICAgICAgIHIgPSB2ZXJjbXBfcGFydChyYSwgcmIpCisgICAgcmV0dXJuIHIKKworZGVmIHZlcmNtcF9zdHJpbmcoYSwgYik6CisgICAgdGEgPSBzcGxpdF92ZXJzaW9uKGEpCisgICAgdGIgPSBzcGxpdF92ZXJzaW9uKGIpCisgICAgcmV0dXJuIHZlcmNtcCh0YSwgdGIpCisKK2RlZiB2ZXJjbXBfc3RyaW5nX29wKGEsIGIsIG9wKToKKyAgICAiIiIKKyAgICBDb21wYXJlIHR3byB2ZXJzaW9ucyBhbmQgY2hlY2sgaWYgdGhlIHNwZWNpZmllZCBjb21wYXJpc29uIG9wZXJhdG9yIG1hdGNoZXMgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbi4KKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGZhaXJseSBsaWJlcmFsIGFib3V0IHdoYXQgb3BlcmF0b3JzIGl0IHdpbGwgYWNjZXB0IHNpbmNlIHRoZXJlIGFyZSBhIHZhcmlldHkgb2Ygc3R5bGVzCisgICAgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LgorICAgICIiIgorICAgIHJlcyA9IHZlcmNtcF9zdHJpbmcoYSwgYikKKyAgICBpZiBvcCBpbiAoJz0nLCAnPT0nKToKKyAgICAgICAgcmV0dXJuIHJlcyA9PSAwCisgICAgZWxpZiBvcCA9PSAnPD0nOgorICAgICAgICByZXR1cm4gcmVzIDw9IDAKKyAgICBlbGlmIG9wID09ICc+PSc6CisgICAgICAgIHJldHVybiByZXMgPj0gMAorICAgIGVsaWYgb3AgaW4gKCc+JywgJz4+Jyk6CisgICAgICAgIHJldHVybiByZXMgPiAwCisgICAgZWxpZiBvcCBpbiAoJzwnLCAnPDwnKToKKyAgICAgICAgcmV0dXJuIHJlcyA8IDAKKyAgICBlbGlmIG9wID09ICchPSc6CisgICAgICAgIHJldHVybiByZXMgIT0gMAorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFZlcnNpb25TdHJpbmdFeGNlcHRpb24oJ1Vuc3VwcG9ydGVkIGNvbXBhcmlzb24gb3BlcmF0b3IgIiVzIicgJSBvcCkKKworZGVmIGV4cGxvZGVfZGVwcyhzKToKKyAgICAiIiIKKyAgICBUYWtlIGFuIFJERVBFTkRTIHN0eWxlIHN0cmluZyBvZiBmb3JtYXQ6CisgICAgIkRFUEVORDEgKG9wdGlvbmFsIHZlcnNpb24pIERFUEVORDIgKG9wdGlvbmFsIHZlcnNpb24pIC4uLiIKKyAgICBhbmQgcmV0dXJuIGEgbGlzdCBvZiBkZXBlbmRlbmNpZXMuCisgICAgVmVyc2lvbiBpbmZvcm1hdGlvbiBpcyBpZ25vcmVkLgorICAgICIiIgorICAgIHIgPSBbXQorICAgIGwgPSBzLnNwbGl0KCkKKyAgICBmbGFnID0gRmFsc2UKKyAgICBmb3IgaSBpbiBsOgorICAgICAgICBpZiBpWzBdID09ICcoJzoKKyAgICAgICAgICAgIGZsYWcgPSBUcnVlCisgICAgICAgICAgICAjaiA9IFtdCisgICAgICAgIGlmIG5vdCBmbGFnOgorICAgICAgICAgICAgci5hcHBlbmQoaSkKKyAgICAgICAgI2Vsc2U6CisgICAgICAgICMgICAgai5hcHBlbmQoaSkKKyAgICAgICAgaWYgZmxhZyBhbmQgaS5lbmRzd2l0aCgnKScpOgorICAgICAgICAgICAgZmxhZyA9IEZhbHNlCisgICAgICAgICAgICAjIElnbm9yZSB2ZXJzaW9uCisgICAgICAgICAgICAjclstMV0gKz0gJyAnICsgJyAnLmpvaW4oaikKKyAgICByZXR1cm4gcgorCitkZWYgZXhwbG9kZV9kZXBfdmVyc2lvbnMyKHMpOgorICAgICIiIgorICAgIFRha2UgYW4gUkRFUEVORFMgc3R5bGUgc3RyaW5nIG9mIGZvcm1hdDoKKyAgICAiREVQRU5EMSAob3B0aW9uYWwgdmVyc2lvbikgREVQRU5EMiAob3B0aW9uYWwgdmVyc2lvbikgLi4uIgorICAgIGFuZCByZXR1cm4gYSBkaWN0aW9uYXJ5IG9mIGRlcGVuZGVuY2llcyBhbmQgdmVyc2lvbnMuCisgICAgIiIiCisgICAgciA9IHt9CisgICAgbCA9IHMucmVwbGFjZSgiLCIsICIiKS5zcGxpdCgpCisgICAgbGFzdGRlcCA9IE5vbmUKKyAgICBsYXN0Y21wID0gIiIKKyAgICBsYXN0dmVyID0gIiIKKyAgICBpbmNtcCA9IEZhbHNlCisgICAgaW52ZXJzaW9uID0gRmFsc2UKKyAgICBmb3IgaSBpbiBsOgorICAgICAgICBpZiBpWzBdID09ICcoJzoKKyAgICAgICAgICAgIGluY21wID0gVHJ1ZQorICAgICAgICAgICAgaSA9IGlbMTpdLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG5vdCBpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgaW5jbXA6CisgICAgICAgICAgICBpbmNtcCA9IEZhbHNlCisgICAgICAgICAgICBpbnZlcnNpb24gPSBUcnVlCisgICAgICAgICAgICAjIFRoaXMgbGlzdCBpcyBiYXNlZCBvbiBiZWhhdmlvciBhbmQgc3VwcG9ydGVkIGNvbXBhcmlzb25zIGZyb20gZGViLCBvcGtnIGFuZCBycG0uCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIEV2ZW4gdGhvdWdoID08LCA8PCwgPT0sICE9LCA9PiwgYW5kID4+IG1heSBub3QgYmUgc3VwcG9ydGVkLCAKKyAgICAgICAgICAgICMgd2UgbGlzdCBlYWNoIHBvc3NpYmx5IHZhbGlkIGl0ZW0uIAorICAgICAgICAgICAgIyBUaGUgYnVpbGQgc3lzdGVtIGlzIHJlc3BvbnNpYmxlIGZvciB2YWxpZGF0aW9uIG9mIHdoYXQgaXQgc3VwcG9ydHMuCisgICAgICAgICAgICBpZiBpLnN0YXJ0c3dpdGgoKCc8PScsICc9PCcsICc8PCcsICc9PScsICchPScsICc+PScsICc9PicsICc+PicpKToKKyAgICAgICAgICAgICAgICBsYXN0Y21wID0gaVswOjJdCisgICAgICAgICAgICAgICAgaSA9IGlbMjpdCisgICAgICAgICAgICBlbGlmIGkuc3RhcnRzd2l0aCgoJzwnLCAnPicsICc9JykpOgorICAgICAgICAgICAgICAgIGxhc3RjbXAgPSBpWzA6MV0KKyAgICAgICAgICAgICAgICBpID0gaVsxOl0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGFuIHVuc3VwcG9ydGVkIGNhc2UhCisgICAgICAgICAgICAgICAgcmFpc2UgVmVyc2lvblN0cmluZ0V4Y2VwdGlvbignSW52YWxpZCB2ZXJzaW9uIHNwZWNpZmljYXRpb24gaW4gIiglcyIgLSBpbnZhbGlkIG9yIG1pc3Npbmcgb3BlcmF0b3InICUgaSkKKyAgICAgICAgICAgICAgICBsYXN0Y21wID0gKGkgb3IgIiIpCisgICAgICAgICAgICAgICAgaSA9ICIiCisgICAgICAgICAgICBpLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG5vdCBpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgaW52ZXJzaW9uOgorICAgICAgICAgICAgaWYgaS5lbmRzd2l0aCgnKScpOgorICAgICAgICAgICAgICAgIGkgPSBpWzotMV0gb3IgIiIKKyAgICAgICAgICAgICAgICBpbnZlcnNpb24gPSBGYWxzZQorICAgICAgICAgICAgICAgIGlmIGxhc3R2ZXIgYW5kIGk6CisgICAgICAgICAgICAgICAgICAgIGxhc3R2ZXIgKz0gIiAiCisgICAgICAgICAgICBpZiBpOgorICAgICAgICAgICAgICAgIGxhc3R2ZXIgKz0gaQorICAgICAgICAgICAgICAgIGlmIGxhc3RkZXAgbm90IGluIHI6CisgICAgICAgICAgICAgICAgICAgIHJbbGFzdGRlcF0gPSBbXQorICAgICAgICAgICAgICAgIHJbbGFzdGRlcF0uYXBwZW5kKGxhc3RjbXAgKyAiICIgKyBsYXN0dmVyKQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAjaWYgbm90IGludmVyc2lvbjoKKyAgICAgICAgbGFzdGRlcCA9IGkKKyAgICAgICAgbGFzdHZlciA9ICIiCisgICAgICAgIGxhc3RjbXAgPSAiIgorICAgICAgICBpZiBub3QgKGkgaW4gciBhbmQgcltpXSk6CisgICAgICAgICAgICByW2xhc3RkZXBdID0gW10KKworICAgIHJldHVybiByCisKK2RlZiBleHBsb2RlX2RlcF92ZXJzaW9ucyhzKToKKyAgICByID0gZXhwbG9kZV9kZXBfdmVyc2lvbnMyKHMpCisgICAgZm9yIGQgaW4gcjoKKyAgICAgICAgaWYgbm90IHJbZF06CisgICAgICAgICAgICByW2RdID0gTm9uZQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgbGVuKHJbZF0pID4gMToKKyAgICAgICAgICAgIGJiLndhcm4oImV4cGxvZGVfZGVwX3ZlcnNpb25zKCk6IEl0ZW0gJXMgYXBwZWFyZWQgaW4gZGVwZW5kZW5jeSBzdHJpbmcgJyVzJyBtdWx0aXBsZSB0aW1lcyB3aXRoIGRpZmZlcmVudCB2YWx1ZXMuICBleHBsb2RlX2RlcF92ZXJzaW9ucyBjYW5ub3QgY29wZSB3aXRoIHRoaXMuIiAlIChkLCBzKSkKKyAgICAgICAgcltkXSA9IHJbZF1bMF0KKyAgICByZXR1cm4gcgorCitkZWYgam9pbl9kZXBzKGRlcHMsIGNvbW1hc2VwPVRydWUpOgorICAgICIiIgorICAgIFRha2UgdGhlIHJlc3VsdCBmcm9tIGV4cGxvZGVfZGVwX3ZlcnNpb25zIGFuZCBnZW5lcmF0ZSBhIGRlcGVuZGVuY3kgc3RyaW5nCisgICAgIiIiCisgICAgcmVzdWx0ID0gW10KKyAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgIGlmIGRlcHNbZGVwXToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGVwc1tkZXBdLCBsaXN0KToKKyAgICAgICAgICAgICAgICBmb3IgdiBpbiBkZXBzW2RlcF06CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZGVwICsgIiAoIiArIHYgKyAiKSIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZGVwICsgIiAoIiArIGRlcHNbZGVwXSArICIpIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZGVwKQorICAgIGlmIGNvbW1hc2VwOgorICAgICAgICByZXR1cm4gIiwgIi5qb2luKHJlc3VsdCkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gIiAiLmpvaW4ocmVzdWx0KQorCitkZWYgX3ByaW50X3RyYWNlKGJvZHksIGxpbmUpOgorICAgICIiIgorICAgIFByaW50IHRoZSBFbnZpcm9ubWVudCBvZiBhIFRleHQgQm9keQorICAgICIiIgorICAgIGVycm9yID0gW10KKyAgICAjIHByaW50IHRoZSBlbnZpcm9ubWVudCBvZiB0aGUgbWV0aG9kCisgICAgbWluX2xpbmUgPSBtYXgoMSwgbGluZS00KQorICAgIG1heF9saW5lID0gbWluKGxpbmUgKyA0LCBsZW4oYm9keSkpCisgICAgZm9yIGkgaW4gcmFuZ2UobWluX2xpbmUsIG1heF9saW5lICsgMSk6CisgICAgICAgIGlmIGxpbmUgPT0gaToKKyAgICAgICAgICAgIGVycm9yLmFwcGVuZCgnICoqKiAlLjRkOiVzJyAlIChpLCBib2R5W2ktMV0ucnN0cmlwKCkpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXJyb3IuYXBwZW5kKCcgICAgICUuNGQ6JXMnICUgKGksIGJvZHlbaS0xXS5yc3RyaXAoKSkpCisgICAgcmV0dXJuIGVycm9yCisKK2RlZiBiZXR0ZXJfY29tcGlsZSh0ZXh0LCBmaWxlLCByZWFsZmlsZSwgbW9kZSA9ICJleGVjIik6CisgICAgIiIiCisgICAgQSBiZXR0ZXIgY29tcGlsZSBtZXRob2QuIFRoaXMgbWV0aG9kCisgICAgd2lsbCBwcmludCB0aGUgb2ZmZW5kaW5nIGxpbmVzLgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIGNvbXBpbGUodGV4dCwgZmlsZSwgbW9kZSkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIGVycm9yID0gW10KKyAgICAgICAgIyBzcGxpdCB0aGUgdGV4dCBpbnRvIGxpbmVzIGFnYWluCisgICAgICAgIGJvZHkgPSB0ZXh0LnNwbGl0KCdcbicpCisgICAgICAgIGVycm9yLmFwcGVuZCgiRXJyb3IgaW4gY29tcGlsaW5nIHB5dGhvbiBmdW5jdGlvbiBpbiAlczpcbiIgJSByZWFsZmlsZSkKKyAgICAgICAgaWYgZS5saW5lbm86CisgICAgICAgICAgICBlcnJvci5hcHBlbmQoIlRoZSBjb2RlIGxpbmVzIHJlc3VsdGluZyBpbiB0aGlzIGVycm9yIHdlcmU6IikKKyAgICAgICAgICAgIGVycm9yLmV4dGVuZChfcHJpbnRfdHJhY2UoYm9keSwgZS5saW5lbm8pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXJyb3IuYXBwZW5kKCJUaGUgZnVuY3Rpb24gY2F1c2luZyB0aGlzIGVycm9yIHdhczoiKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gYm9keToKKyAgICAgICAgICAgICAgICBlcnJvci5hcHBlbmQobGluZSkKKyAgICAgICAgZXJyb3IuYXBwZW5kKCIlczogJXMiICUgKGUuX19jbGFzc19fLl9fbmFtZV9fLCBzdHIoZSkpKQorCisgICAgICAgIGxvZ2dlci5lcnJvcigiXG4iLmpvaW4oZXJyb3IpKQorCisgICAgICAgIGUgPSBiYi5CQkhhbmRsZWRFeGNlcHRpb24oZSkKKyAgICAgICAgcmFpc2UgZQorCitkZWYgX3ByaW50X2V4Y2VwdGlvbih0LCB2YWx1ZSwgdGIsIHJlYWxmaWxlLCB0ZXh0LCBjb250ZXh0KToKKyAgICBlcnJvciA9IFtdCisgICAgdHJ5OgorICAgICAgICBleGNlcHRpb24gPSB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KHQsIHZhbHVlKQorICAgICAgICBlcnJvci5hcHBlbmQoJ0Vycm9yIGV4ZWN1dGluZyBhIHB5dGhvbiBmdW5jdGlvbiBpbiAlczpcbicgJSByZWFsZmlsZSkKKworICAgICAgICAjIFN0cmlwICd1cycgZnJvbSB0aGUgc3RhY2sgKGJldHRlcl9leGVjIGNhbGwpCisgICAgICAgIHRiID0gdGIudGJfbmV4dAorCisgICAgICAgIHRleHRhcnJheSA9IHRleHQuc3BsaXQoJ1xuJykKKworICAgICAgICBsaW5lZmFpbGVkID0gdGIudGJfbGluZW5vCisKKyAgICAgICAgdGJleHRyYWN0ID0gdHJhY2ViYWNrLmV4dHJhY3RfdGIodGIpCisgICAgICAgIHRiZm9ybWF0ID0gdHJhY2ViYWNrLmZvcm1hdF9saXN0KHRiZXh0cmFjdCkKKyAgICAgICAgZXJyb3IuYXBwZW5kKCJUaGUgc3RhY2sgdHJhY2Ugb2YgcHl0aG9uIGNhbGxzIHRoYXQgcmVzdWx0ZWQgaW4gdGhpcyBleGNlcHRpb24vZmFpbHVyZSB3YXM6IikKKyAgICAgICAgZXJyb3IuYXBwZW5kKCJGaWxlOiAnJXMnLCBsaW5lbm86ICVzLCBmdW5jdGlvbjogJXMiICUgKHRiZXh0cmFjdFswXVswXSwgdGJleHRyYWN0WzBdWzFdLCB0YmV4dHJhY3RbMF1bMl0pKQorICAgICAgICBlcnJvci5leHRlbmQoX3ByaW50X3RyYWNlKHRleHRhcnJheSwgbGluZWZhaWxlZCkpCisKKyAgICAgICAgIyBTZWUgaWYgdGhpcyBpcyBhIGZ1bmN0aW9uIHdlIGNvbnN0cnVjdGVkIGFuZCBoYXMgY2FsbHMgYmFjayBpbnRvIG90aGVyIGZ1bmN0aW9ucyBpbgorICAgICAgICAjICJ0ZXh0Ii4gSWYgc28sIHRyeSBhbmQgaW1wcm92ZSB0aGUgY29udGV4dCBvZiB0aGUgZXJyb3IgYnkgZGl2aW5nIGRvd24gdGhlIHRyYWNlCisgICAgICAgIGxldmVsID0gMAorICAgICAgICBuZXh0dGIgPSB0Yi50Yl9uZXh0CisgICAgICAgIHdoaWxlIG5leHR0YiBpcyBub3QgTm9uZSBhbmQgKGxldmVsKzEpIDwgbGVuKHRiZXh0cmFjdCk6CisgICAgICAgICAgICBlcnJvci5hcHBlbmQoIkZpbGU6ICclcycsIGxpbmVubzogJXMsIGZ1bmN0aW9uOiAlcyIgJSAodGJleHRyYWN0W2xldmVsKzFdWzBdLCB0YmV4dHJhY3RbbGV2ZWwrMV1bMV0sIHRiZXh0cmFjdFtsZXZlbCsxXVsyXSkpCisgICAgICAgICAgICBpZiB0YmV4dHJhY3RbbGV2ZWxdWzBdID09IHRiZXh0cmFjdFtsZXZlbCsxXVswXSBhbmQgdGJleHRyYWN0W2xldmVsKzFdWzJdID09IHRiZXh0cmFjdFtsZXZlbF1bMF06CisgICAgICAgICAgICAgICAgIyBUaGUgY29kZSB3YXMgcG9zc2libHkgaW4gdGhlIHN0cmluZyB3ZSBjb21waWxlZCBvdXJzZWx2ZXMKKyAgICAgICAgICAgICAgICBlcnJvci5leHRlbmQoX3ByaW50X3RyYWNlKHRleHRhcnJheSwgdGJleHRyYWN0W2xldmVsKzFdWzFdKSkKKyAgICAgICAgICAgIGVsaWYgdGJleHRyYWN0W2xldmVsKzFdWzBdLnN0YXJ0c3dpdGgoIi8iKToKKyAgICAgICAgICAgICAgICAjIFRoZSBjb2RlIGxvb2tzIGxpa2UgaXQgbWlnaHQgYmUgaW4gYSBmaWxlLCB0cnkgYW5kIGxvYWQgaXQKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggb3Blbih0YmV4dHJhY3RbbGV2ZWwrMV1bMF0sICJyIikgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSBmLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci5leHRlbmQoX3ByaW50X3RyYWNlKHRleHQsIHRiZXh0cmFjdFtsZXZlbCsxXVsxXSkpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBlcnJvci5hcHBlbmQodGJmb3JtYXRbbGV2ZWwrMV0pCisgICAgICAgICAgICBlbGlmICJkIiBpbiBjb250ZXh0IGFuZCB0YmV4dHJhY3RbbGV2ZWwrMV1bMl06CisgICAgICAgICAgICAgICAgIyBUcnkgYW5kIGZpbmQgdGhlIGNvZGUgaW4gdGhlIGRhdGFzdG9yZSBiYXNlZCBvbiB0aGUgZnVuY3Rpb25uYW1lCisgICAgICAgICAgICAgICAgZCA9IGNvbnRleHRbImQiXQorICAgICAgICAgICAgICAgIGZ1bmN0aW9ubmFtZSA9IHRiZXh0cmFjdFtsZXZlbCsxXVsyXQorICAgICAgICAgICAgICAgIHRleHQgPSBkLmdldFZhcihmdW5jdGlvbm5hbWUsIFRydWUpCisgICAgICAgICAgICAgICAgaWYgdGV4dDoKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IuZXh0ZW5kKF9wcmludF90cmFjZSh0ZXh0LnNwbGl0KCdcbicpLCB0YmV4dHJhY3RbbGV2ZWwrMV1bMV0pKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGVycm9yLmFwcGVuZCh0YmZvcm1hdFtsZXZlbCsxXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXJyb3IuYXBwZW5kKHRiZm9ybWF0W2xldmVsKzFdKQorICAgICAgICAgICAgbmV4dHRiID0gdGIudGJfbmV4dAorICAgICAgICAgICAgbGV2ZWwgPSBsZXZlbCArIDEKKworICAgICAgICBlcnJvci5hcHBlbmQoIkV4Y2VwdGlvbjogJXMiICUgJycuam9pbihleGNlcHRpb24pKQorICAgIGZpbmFsbHk6CisgICAgICAgIGxvZ2dlci5lcnJvcigiXG4iLmpvaW4oZXJyb3IpKQorCitkZWYgYmV0dGVyX2V4ZWMoY29kZSwgY29udGV4dCwgdGV4dCA9IE5vbmUsIHJlYWxmaWxlID0gIjxjb2RlPiIpOgorICAgICIiIgorICAgIFNpbWlsaWFyIHRvIGJldHRlcl9jb21waWxlLCBiZXR0ZXJfZXhlYyB3aWxsCisgICAgcHJpbnQgdGhlIGxpbmVzIHRoYXQgYXJlIHJlc3BvbnNpYmxlIGZvciB0aGUKKyAgICBlcnJvci4KKyAgICAiIiIKKyAgICBpbXBvcnQgYmIucGFyc2UKKyAgICBpZiBub3QgdGV4dDoKKyAgICAgICAgdGV4dCA9IGNvZGUKKyAgICBpZiBub3QgaGFzYXR0cihjb2RlLCAiY29fZmlsZW5hbWUiKToKKyAgICAgICAgY29kZSA9IGJldHRlcl9jb21waWxlKGNvZGUsIHJlYWxmaWxlLCByZWFsZmlsZSkKKyAgICB0cnk6CisgICAgICAgIGV4ZWMoY29kZSwgZ2V0X2NvbnRleHQoKSwgY29udGV4dCkKKyAgICBleGNlcHQgKGJiLkJCSGFuZGxlZEV4Y2VwdGlvbiwgYmIucGFyc2UuU2tpcFJlY2lwZSwgYmIuYnVpbGQuRnVuY0ZhaWxlZCwgYmIuZGF0YV9zbWFydC5FeHBhbnNpb25FcnJvcik6CisgICAgICAgICMgRXJyb3IgYWxyZWFkeSBzaG93biBzbyBwYXNzdGhyb3VnaCwgbm8gbmVlZCBmb3IgdHJhY2ViYWNrCisgICAgICAgIHJhaXNlCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAodCwgdmFsdWUsIHRiKSA9IHN5cy5leGNfaW5mbygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9wcmludF9leGNlcHRpb24odCwgdmFsdWUsIHRiLCByZWFsZmlsZSwgdGV4dCwgY29udGV4dCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gaGFuZGxlciBlcnJvcjogJXMiICUgc3RyKGUpKQorCisgICAgICAgIGUgPSBiYi5CQkhhbmRsZWRFeGNlcHRpb24oZSkKKyAgICAgICAgcmFpc2UgZQorCitkZWYgc2ltcGxlX2V4ZWMoY29kZSwgY29udGV4dCk6CisgICAgZXhlYyhjb2RlLCBnZXRfY29udGV4dCgpLCBjb250ZXh0KQorCitkZWYgYmV0dGVyX2V2YWwoc291cmNlLCBsb2NhbHMpOgorICAgIHJldHVybiBldmFsKHNvdXJjZSwgZ2V0X2NvbnRleHQoKSwgbG9jYWxzKQorCitAY29udGV4dG1hbmFnZXIKK2RlZiBmaWxlc2xvY2tlZChmaWxlcyk6CisgICAgIiIiQ29udGV4dCBtYW5hZ2VyIGZvciBsb2NraW5nIGFuZCB1bmxvY2tpbmcgZmlsZSBsb2Nrcy4iIiIKKyAgICBsb2NrcyA9IFtdCisgICAgaWYgZmlsZXM6CisgICAgICAgIGZvciBsb2NrZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIGxvY2tzLmFwcGVuZChiYi51dGlscy5sb2NrZmlsZShsb2NrZmlsZSkpCisKKyAgICB5aWVsZAorCisgICAgZm9yIGxvY2sgaW4gbG9ja3M6CisgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobG9jaykKKworQGNvbnRleHRtYW5hZ2VyCitkZWYgdGltZW91dChzZWNvbmRzKToKKyAgICBkZWYgdGltZW91dF9oYW5kbGVyKHNpZ251bSwgZnJhbWUpOgorICAgICAgICBwYXNzCisKKyAgICBvcmlnaW5hbF9oYW5kbGVyID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgdGltZW91dF9oYW5kbGVyKQorCisgICAgdHJ5OgorICAgICAgICBzaWduYWwuYWxhcm0oc2Vjb25kcykKKyAgICAgICAgeWllbGQKKyAgICBmaW5hbGx5OgorICAgICAgICBzaWduYWwuYWxhcm0oMCkKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgb3JpZ2luYWxfaGFuZGxlcikKKworZGVmIGxvY2tmaWxlKG5hbWUsIHNoYXJlZD1GYWxzZSwgcmV0cnk9VHJ1ZSwgYmxvY2s9RmFsc2UpOgorICAgICIiIgorICAgIFVzZSB0aGUgc3BlY2lmaWVkIGZpbGUgYXMgYSBsb2NrIGZpbGUsIHJldHVybiB3aGVuIHRoZSBsb2NrIGhhcworICAgIGJlZW4gYWNxdWlyZWQuIFJldHVybnMgYSB2YXJpYWJsZSB0byBwYXNzIHRvIHVubG9ja2ZpbGUoKS4KKyAgICBQYXJhbWV0ZXJzOgorICAgICAgICByZXRyeTogVHJ1ZSB0byByZS10cnkgbG9ja2luZyBpZiBpdCBmYWlscywgRmFsc2Ugb3RoZXJ3aXNlCisgICAgICAgIGJsb2NrOiBUcnVlIHRvIGJsb2NrIHVudGlsIHRoZSBsb2NrIHN1Y2NlZWRzLCBGYWxzZSBvdGhlcndpc2UKKyAgICBUaGUgcmV0cnkgYW5kIGJsb2NrIHBhcmFtZXRlcnMgYXJlIGtpbmQgb2YgZXF1aXZhbGVudCB1bmxlc3MgeW91CisgICAgY29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IG9mIHNlbmRpbmcgYSBzaWduYWwgdG8gdGhlIHByb2Nlc3MgdG8gYnJlYWsKKyAgICBvdXQgLSBhdCB3aGljaCBwb2ludCB5b3Ugd2FudCBibG9jaz1UcnVlIHJhdGhlciB0aGFuIHJldHJ5PVRydWUuCisgICAgIiIiCisgICAgZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZShuYW1lKQorICAgIG1rZGlyaGllcihkaXJuYW1lKQorCisgICAgaWYgbm90IG9zLmFjY2VzcyhkaXJuYW1lLCBvcy5XX09LKToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gYWNxdWlyZSBsb2NrICclcycsIGRpcmVjdG9yeSBpcyBub3Qgd3JpdGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgbmFtZSkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIG9wID0gZmNudGwuTE9DS19FWAorICAgIGlmIHNoYXJlZDoKKyAgICAgICAgb3AgPSBmY250bC5MT0NLX1NICisgICAgaWYgbm90IHJldHJ5IGFuZCBub3QgYmxvY2s6CisgICAgICAgIG9wID0gb3AgfCBmY250bC5MT0NLX05CCisKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICAjIElmIHdlIGxlYXZlIHRoZSBsb2NrZmlsZXMgbHlpbmcgYXJvdW5kIHRoZXJlIGlzIG5vIHByb2JsZW0KKyAgICAgICAgIyBidXQgd2Ugc2hvdWxkIGNsZWFuIHVwIGFmdGVyIG91cnNlbHZlcy4gVGhpcyBnaXZlcyBwb3RlbnRpYWwKKyAgICAgICAgIyBmb3IgcmFjZXMgdGhvdWdoLiBUbyB3b3JrIGFyb3VuZCB0aGlzLCB3aGVuIHdlIGFjcXVpcmUgdGhlIGxvY2sKKyAgICAgICAgIyB3ZSBjaGVjayB0aGUgZmlsZSB3ZSBsb2NrZWQgd2FzIHN0aWxsIHRoZSBsb2NrIGZpbGUgb24gZGlzay4KKyAgICAgICAgIyBieSBjb21wYXJpbmcgaW5vZGUgbnVtYmVycy4gSWYgdGhleSBkb24ndCBtYXRjaCBvciB0aGUgbG9ja2ZpbGUKKyAgICAgICAgIyBubyBsb25nZXIgZXhpc3RzLCB3ZSBzdGFydCBhZ2Fpbi4KKworICAgICAgICAjIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgdW5mYWlyIHNpbmNlIHRoZSBsYXN0IHBlcnNvbiB0byByZXF1ZXN0IHRoZQorICAgICAgICAjIGxvY2sgaXMgdGhlIG1vc3QgbGlrZWx5IHRvIHdpbiBpdC4KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsZiA9IG9wZW4obmFtZSwgJ2ErJykKKyAgICAgICAgICAgIGZpbGVubyA9IGxmLmZpbGVubygpCisgICAgICAgICAgICBmY250bC5mbG9jayhmaWxlbm8sIG9wKQorICAgICAgICAgICAgc3RhdGluZm8gPSBvcy5mc3RhdChmaWxlbm8pCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsZi5uYW1lKToKKyAgICAgICAgICAgICAgICBzdGF0aW5mbzIgPSBvcy5zdGF0KGxmLm5hbWUpCisgICAgICAgICAgICAgICAgaWYgc3RhdGluZm8uc3RfaW5vID09IHN0YXRpbmZvMi5zdF9pbm86CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsZgorICAgICAgICAgICAgbGYuY2xvc2UoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxmLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcGFzcworICAgICAgICBpZiBub3QgcmV0cnk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCitkZWYgdW5sb2NrZmlsZShsZik6CisgICAgIiIiCisgICAgVW5sb2NrIGEgZmlsZSBsb2NrZWQgdXNpbmcgbG9ja2ZpbGUoKQorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgIyBJZiB3ZSBoYWQgYSBzaGFyZWQgbG9jaywgd2UgbmVlZCB0byBwcm9tb3RlIHRvIGV4Y2x1c2l2ZSBiZWZvcmUKKyAgICAgICAgIyByZW1vdmluZyB0aGUgbG9ja2ZpbGUuIEF0dGVtcHQgdGhpcywgaWdub3JlIGZhaWx1cmVzLgorICAgICAgICBmY250bC5mbG9jayhsZi5maWxlbm8oKSwgZmNudGwuTE9DS19FWHxmY250bC5MT0NLX05CKQorICAgICAgICBvcy51bmxpbmsobGYubmFtZSkKKyAgICBleGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpOgorICAgICAgICBwYXNzCisgICAgZmNudGwuZmxvY2sobGYuZmlsZW5vKCksIGZjbnRsLkxPQ0tfVU4pCisgICAgbGYuY2xvc2UoKQorCitkZWYgbWQ1X2ZpbGUoZmlsZW5hbWUpOgorICAgICIiIgorICAgIFJldHVybiB0aGUgaGV4IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgTUQ1IGNoZWNrc3VtIG9mIGZpbGVuYW1lLgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgaW1wb3J0IGhhc2hsaWIKKyAgICAgICAgbSA9IGhhc2hsaWIubWQ1KCkKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIGltcG9ydCBtZDUKKyAgICAgICAgbSA9IG1kNS5uZXcoKQorCisgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgbS51cGRhdGUobGluZSkKKyAgICByZXR1cm4gbS5oZXhkaWdlc3QoKQorCitkZWYgc2hhMjU2X2ZpbGUoZmlsZW5hbWUpOgorICAgICIiIgorICAgIFJldHVybiB0aGUgaGV4IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgMjU2LWJpdCBTSEEgY2hlY2tzdW0gb2YKKyAgICBmaWxlbmFtZS4gIE9uIFB5dGhvbiAyLjQgdGhpcyB3aWxsIHJldHVybiBOb25lLCBzbyBjYWxsZXJzIHdpbGwgbmVlZCB0bworICAgIGhhbmRsZSB0aGF0IGJ5IGVpdGhlciBza2lwcGluZyBTSEEgY2hlY2tzLCBvciBydW5uaW5nIGEgc3RhbmRhbG9uZSBzaGEyNTZzdW0KKyAgICBiaW5hcnkuCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgaGFzaGxpYgorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIHMgPSBoYXNobGliLnNoYTI1NigpCisgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgcy51cGRhdGUobGluZSkKKyAgICByZXR1cm4gcy5oZXhkaWdlc3QoKQorCitkZWYgcHJlc2VydmVkX2VudnZhcnNfZXhwb3J0ZWQoKToKKyAgICAiIiJWYXJpYWJsZXMgd2hpY2ggYXJlIHRha2VuIGZyb20gdGhlIGVudmlyb25tZW50IGFuZCBwbGFjZWQgaW4gYW5kIGV4cG9ydGVkCisgICAgZnJvbSB0aGUgbWV0YWRhdGEiIiIKKyAgICByZXR1cm4gWworICAgICAgICAnQkJfVEFTS0hBU0gnLAorICAgICAgICAnSE9NRScsCisgICAgICAgICdMT0dOQU1FJywKKyAgICAgICAgJ1BBVEgnLAorICAgICAgICAnUFdEJywKKyAgICAgICAgJ1NIRUxMJywKKyAgICAgICAgJ1RFUk0nLAorICAgICAgICAnVVNFUicsCisgICAgXQorCitkZWYgcHJlc2VydmVkX2VudnZhcnMoKToKKyAgICAiIiJWYXJpYWJsZXMgd2hpY2ggYXJlIHRha2VuIGZyb20gdGhlIGVudmlyb25tZW50IGFuZCBwbGFjZWQgaW4gdGhlIG1ldGFkYXRhIiIiCisgICAgdiA9IFsKKyAgICAgICAgJ0JCUEFUSCcsCisgICAgICAgICdCQl9QUkVTRVJWRV9FTlYnLAorICAgICAgICAnQkJfRU5WX1dISVRFTElTVCcsCisgICAgICAgICdCQl9FTlZfRVhUUkFXSElURScsCisgICAgXQorICAgIHJldHVybiB2ICsgcHJlc2VydmVkX2VudnZhcnNfZXhwb3J0ZWQoKQorCitkZWYgZmlsdGVyX2Vudmlyb25tZW50KGdvb2RfdmFycyk6CisgICAgIiIiCisgICAgQ3JlYXRlIGEgcHJpc3RpbmUgZW52aXJvbm1lbnQgZm9yIGJpdGJha2UuIFRoaXMgd2lsbCByZW1vdmUgdmFyaWFibGVzIHRoYXQKKyAgICBhcmUgbm90IGtub3duIGFuZCBtYXkgaW5mbHVlbmNlIHRoZSBidWlsZCBpbiBhIG5lZ2F0aXZlIHdheS4KKyAgICAiIiIKKworICAgIHJlbW92ZWRfdmFycyA9IHt9CisgICAgZm9yIGtleSBpbiBvcy5lbnZpcm9uLmtleXMoKToKKyAgICAgICAgaWYga2V5IGluIGdvb2RfdmFyczoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgcmVtb3ZlZF92YXJzW2tleV0gPSBvcy5lbnZpcm9uW2tleV0KKyAgICAgICAgb3MudW5zZXRlbnYoa2V5KQorICAgICAgICBkZWwgb3MuZW52aXJvbltrZXldCisKKyAgICBpZiByZW1vdmVkX3ZhcnM6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiUmVtb3ZlZCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyBmcm9tIHRoZSBlbnZpcm9ubWVudDogJXMiLCAiLCAiLmpvaW4ocmVtb3ZlZF92YXJzLmtleXMoKSkpCisKKyAgICByZXR1cm4gcmVtb3ZlZF92YXJzCisKK2RlZiBhcHByb3ZlZF92YXJpYWJsZXMoKToKKyAgICAiIiIKKyAgICBEZXRlcm1pbmUgYW5kIHJldHVybiB0aGUgbGlzdCBvZiB3aGl0ZWxpc3RlZCB2YXJpYWJsZXMgd2hpY2ggYXJlIGFwcHJvdmVkCisgICAgdG8gcmVtYWluIGluIHRoZSBlbnZpcm9ubWVudC4KKyAgICAiIiIKKyAgICBpZiAnQkJfUFJFU0VSVkVfRU5WJyBpbiBvcy5lbnZpcm9uOgorICAgICAgICByZXR1cm4gb3MuZW52aXJvbi5rZXlzKCkKKyAgICBhcHByb3ZlZCA9IFtdCisgICAgaWYgJ0JCX0VOVl9XSElURUxJU1QnIGluIG9zLmVudmlyb246CisgICAgICAgIGFwcHJvdmVkID0gb3MuZW52aXJvblsnQkJfRU5WX1dISVRFTElTVCddLnNwbGl0KCkKKyAgICAgICAgYXBwcm92ZWQuZXh0ZW5kKFsnQkJfRU5WX1dISVRFTElTVCddKQorICAgIGVsc2U6CisgICAgICAgIGFwcHJvdmVkID0gcHJlc2VydmVkX2VudnZhcnMoKQorICAgIGlmICdCQl9FTlZfRVhUUkFXSElURScgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgYXBwcm92ZWQuZXh0ZW5kKG9zLmVudmlyb25bJ0JCX0VOVl9FWFRSQVdISVRFJ10uc3BsaXQoKSkKKyAgICAgICAgaWYgJ0JCX0VOVl9FWFRSQVdISVRFJyBub3QgaW4gYXBwcm92ZWQ6CisgICAgICAgICAgICBhcHByb3ZlZC5leHRlbmQoWydCQl9FTlZfRVhUUkFXSElURSddKQorICAgIHJldHVybiBhcHByb3ZlZAorCitkZWYgY2xlYW5fZW52aXJvbm1lbnQoKToKKyAgICAiIiIKKyAgICBDbGVhbiB1cCBhbnkgc3B1cmlvdXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBUaGlzIHdpbGwgcmVtb3ZlIGFueQorICAgIHZhcmlhYmxlcyB0aGUgdXNlciBoYXNuJ3QgY2hvc2VuIHRvIHByZXNlcnZlLgorICAgICIiIgorICAgIGlmICdCQl9QUkVTRVJWRV9FTlYnIG5vdCBpbiBvcy5lbnZpcm9uOgorICAgICAgICBnb29kX3ZhcnMgPSBhcHByb3ZlZF92YXJpYWJsZXMoKQorICAgICAgICByZXR1cm4gZmlsdGVyX2Vudmlyb25tZW50KGdvb2RfdmFycykKKworICAgIHJldHVybiB7fQorCitkZWYgZW1wdHlfZW52aXJvbm1lbnQoKToKKyAgICAiIiIKKyAgICBSZW1vdmUgYWxsIHZhcmlhYmxlcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4KKyAgICAiIiIKKyAgICBmb3IgcyBpbiBvcy5lbnZpcm9uLmtleXMoKToKKyAgICAgICAgb3MudW5zZXRlbnYocykKKyAgICAgICAgZGVsIG9zLmVudmlyb25bc10KKworZGVmIGJ1aWxkX2Vudmlyb25tZW50KGQpOgorICAgICIiIgorICAgIEJ1aWxkIGFuIGVudmlyb25tZW50IGZyb20gYWxsIGV4cG9ydGVkIHZhcmlhYmxlcy4KKyAgICAiIiIKKyAgICBpbXBvcnQgYmIuZGF0YQorICAgIGZvciB2YXIgaW4gYmIuZGF0YS5rZXlzKGQpOgorICAgICAgICBleHBvcnQgPSBkLmdldFZhckZsYWcodmFyLCAiZXhwb3J0IikKKyAgICAgICAgaWYgZXhwb3J0OgorICAgICAgICAgICAgb3MuZW52aXJvblt2YXJdID0gZC5nZXRWYXIodmFyLCBUcnVlKSBvciAiIgorCitkZWYgX2NoZWNrX3Vuc2FmZV9kZWxldGVfcGF0aChwYXRoKToKKyAgICAiIiIKKyAgICBCYXNpYyBzYWZlZ3VhcmQgYWdhaW5zdCByZWN1cnNpdmVseSBkZWxldGluZyBzb21ldGhpbmcgd2Ugc2hvdWxkbid0LiBJZiBpdCByZXR1cm5zIFRydWUsCisgICAgdGhlIGNhbGxlciBzaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uIHdpdGggYW4gYXBwcm9wcmlhdGUgbWVzc2FnZS4KKyAgICBOT1RFOiBUaGlzIGlzIE5PVCBtZWFudCB0byBiZSBhIHNlY3VyaXR5IG1lY2hhbmlzbSAtIGp1c3QgYSBndWFyZCBhZ2FpbnN0IHNpbGx5IG1pc3Rha2VzCisgICAgd2l0aCBwb3RlbnRpYWxseSBkaXNhc3Ryb3VzIHJlc3VsdHMuCisgICAgIiIiCisgICAgZXh0cmEgPSAnJworICAgICMgSE9NRSBtaWdodCBub3QgYmUgL2hvbWUvc29tZXRoaW5nLCBzbyBpbiBjYXNlIHdlIGNhbiBnZXQgaXQsIGNoZWNrIGFnYWluc3QgaXQKKyAgICBob21lZGlyID0gb3MuZW52aXJvbi5nZXQoJ0hPTUUnLCAnJykKKyAgICBpZiBob21lZGlyOgorICAgICAgICBleHRyYSA9ICd8JXMnICUgaG9tZWRpcgorICAgIGlmIHJlLm1hdGNoKCcoL3wvL3wvaG9tZXwvaG9tZS9bXi9dKiVzKSQnICUgZXh0cmEsIG9zLnBhdGguYWJzcGF0aChwYXRoKSk6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiByZW1vdmUocGF0aCwgcmVjdXJzZT1GYWxzZSk6CisgICAgIiIiRXF1aXZhbGVudCB0byBybSAtZiBvciBybSAtcmYiIiIKKyAgICBpZiBub3QgcGF0aDoKKyAgICAgICAgcmV0dXJuCisgICAgaWYgcmVjdXJzZToKKyAgICAgICAgZm9yIG5hbWUgaW4gZ2xvYi5nbG9iKHBhdGgpOgorICAgICAgICAgICAgaWYgX2NoZWNrX3Vuc2FmZV9kZWxldGVfcGF0aChwYXRoKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ2JiLnV0aWxzLnJlbW92ZTogY2FsbGVkIHdpdGggZGFuZ2Vyb3VzIHBhdGggIiVzIiBhbmQgcmVjdXJzZT1UcnVlLCByZWZ1c2luZyB0byBkZWxldGUhJyAlIHBhdGgpCisgICAgICAgICMgc2h1dGlsLnJtdHJlZShuYW1lKSB3b3VsZCBiZSBpZGVhbCBidXQgaXRzIHRvbyBzbG93CisgICAgICAgIHN1YnByb2Nlc3MuY2FsbChbJ3JtJywgJy1yZiddICsgZ2xvYi5nbG9iKHBhdGgpKQorICAgICAgICByZXR1cm4KKyAgICBmb3IgbmFtZSBpbiBnbG9iLmdsb2IocGF0aCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayhuYW1lKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBpZiBleGMuZXJybm8gIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisKK2RlZiBwcnVuZWRpcih0b3BkaXIpOgorICAgICMgRGVsZXRlIGV2ZXJ5dGhpbmcgcmVhY2hhYmxlIGZyb20gdGhlIGRpcmVjdG9yeSBuYW1lZCBpbiAndG9wZGlyJy4KKyAgICAjIENBVVRJT046ICBUaGlzIGlzIGRhbmdlcm91cyEKKyAgICBpZiBfY2hlY2tfdW5zYWZlX2RlbGV0ZV9wYXRoKHRvcGRpcik6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignYmIudXRpbHMucHJ1bmVkaXI6IGNhbGxlZCB3aXRoIGRhbmdlcm91cyBwYXRoICIlcyIsIHJlZnVzaW5nIHRvIGRlbGV0ZSEnICUgdG9wZGlyKQorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHRvcGRpciwgdG9wZG93biA9IEZhbHNlKToKKyAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQorICAgICAgICBmb3IgbmFtZSBpbiBkaXJzOgorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsob3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvcy5ybWRpcihvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkpCisgICAgb3Mucm1kaXIodG9wZGlyKQorCisjCisjIENvdWxkIGFsc28gdXNlIHJldHVybiByZS5jb21waWxlKCIoJXMpIiAlICJ8Ii5qb2luKG1hcChyZS5lc2NhcGUsIHN1ZmZpeGVzKSkpLnN1YihsYW1iZGEgbW86ICIiLCB2YXIpCisjIGJ1dCB0aGF0cyBwb3NzaWJseSBpbnNhbmUgYW5kIHN1ZmZpeGVzIGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIHNtYWxsCisjCitkZWYgcHJ1bmVfc3VmZml4KHZhciwgc3VmZml4ZXMsIGQpOgorICAgICMgU2VlIGlmIHZhciBlbmRzIHdpdGggYW55IG9mIHRoZSBzdWZmaXhlcyBsaXN0ZWQgYW5kCisgICAgIyByZW1vdmUgaXQgaWYgZm91bmQKKyAgICBmb3Igc3VmZml4IGluIHN1ZmZpeGVzOgorICAgICAgICBpZiB2YXIuZW5kc3dpdGgoc3VmZml4KToKKyAgICAgICAgICAgIHJldHVybiB2YXIucmVwbGFjZShzdWZmaXgsICIiKQorICAgIHJldHVybiB2YXIKKworZGVmIG1rZGlyaGllcihkaXJlY3RvcnkpOgorICAgICIiIkNyZWF0ZSBhIGRpcmVjdG9yeSBsaWtlICdta2RpciAtcCcsIGJ1dCBkb2VzIG5vdCBjb21wbGFpbiBpZgorICAgIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyBsaWtlIG9zLm1ha2VkaXJzCisgICAgIiIiCisKKyAgICB0cnk6CisgICAgICAgIG9zLm1ha2VkaXJzKGRpcmVjdG9yeSkKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKKyAgICAgICAgICAgIHJhaXNlIGUKKworZGVmIG1vdmVmaWxlKHNyYywgZGVzdCwgbmV3bXRpbWUgPSBOb25lLCBzc3RhdCA9IE5vbmUpOgorICAgICIiIk1vdmVzIGEgZmlsZSBmcm9tIHNyYyB0byBkZXN0LCBwcmVzZXJ2aW5nIGFsbCBwZXJtaXNzaW9ucyBhbmQKKyAgICBhdHRyaWJ1dGVzOyBtdGltZSB3aWxsIGJlIHByZXNlcnZlZCBldmVuIHdoZW4gbW92aW5nIGFjcm9zcworICAgIGZpbGVzeXN0ZW1zLiAgUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MgYW5kIGZhbHNlIG9uIGZhaWx1cmUuIE1vdmUgaXMKKyAgICBhdG9taWMuCisgICAgIiIiCisKKyAgICAjcHJpbnQgIm1vdmVmaWxlKCIgKyBzcmMgKyAiLCIgKyBkZXN0ICsgIiwiICsgc3RyKG5ld210aW1lKSArICIsIiArIHN0cihzc3RhdCkgKyAiKSIKKyAgICB0cnk6CisgICAgICAgIGlmIG5vdCBzc3RhdDoKKyAgICAgICAgICAgIHNzdGF0ID0gb3MubHN0YXQoc3JjKQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgcHJpbnQoIm1vdmVmaWxlOiBTdGF0aW5nIHNvdXJjZSBmaWxlIGZhaWxlZC4uLiIsIGUpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZXN0ZXhpc3RzID0gMQorICAgIHRyeToKKyAgICAgICAgZHN0YXQgPSBvcy5sc3RhdChkZXN0KQorICAgIGV4Y2VwdDoKKyAgICAgICAgZHN0YXQgPSBvcy5sc3RhdChvcy5wYXRoLmRpcm5hbWUoZGVzdCkpCisgICAgICAgIGRlc3RleGlzdHMgPSAwCisKKyAgICBpZiBkZXN0ZXhpc3RzOgorICAgICAgICBpZiBzdGF0LlNfSVNMTksoZHN0YXRbc3RhdC5TVF9NT0RFXSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKGRlc3QpCisgICAgICAgICAgICAgICAgZGVzdGV4aXN0cyA9IDAKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBpZiBzdGF0LlNfSVNMTksoc3N0YXRbc3RhdC5TVF9NT0RFXSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhcmdldCA9IG9zLnJlYWRsaW5rKHNyYykKKyAgICAgICAgICAgIGlmIGRlc3RleGlzdHMgYW5kIG5vdCBzdGF0LlNfSVNESVIoZHN0YXRbc3RhdC5TVF9NT0RFXSk6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKGRlc3QpCisgICAgICAgICAgICBvcy5zeW1saW5rKHRhcmdldCwgZGVzdCkKKyAgICAgICAgICAgICNvcy5sY2hvd24oZGVzdCxzc3RhdFtzdGF0LlNUX1VJRF0sc3N0YXRbc3RhdC5TVF9HSURdKQorICAgICAgICAgICAgb3MudW5saW5rKHNyYykKKyAgICAgICAgICAgIHJldHVybiBvcy5sc3RhdChkZXN0KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBwcmludCgibW92ZWZpbGU6IGZhaWxlZCB0byBwcm9wZXJseSBjcmVhdGUgc3ltbGluazoiLCBkZXN0LCAiLT4iLCB0YXJnZXQsIGUpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgcmVuYW1lZmFpbGVkID0gMQorICAgIGlmIHNzdGF0W3N0YXQuU1RfREVWXSA9PSBkc3RhdFtzdGF0LlNUX0RFVl06CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgb3MucmVuYW1lIG5lZWRzIHRvIGtub3cgdGhlIGRlc3QgcGF0aCBlbmRpbmcgd2l0aCBmaWxlIG5hbWUKKyAgICAgICAgICAgICMgc28gYXBwZW5kIHRoZSBmaWxlIG5hbWUgdG8gYSBwYXRoIG9ubHkgaWYgaXQncyBhIGRpciBzcGVjaWZpZWQKKyAgICAgICAgICAgIHNyY2ZuYW1lID0gb3MucGF0aC5iYXNlbmFtZShzcmMpCisgICAgICAgICAgICBkZXN0cGF0aCA9IG9zLnBhdGguam9pbihkZXN0LCBzcmNmbmFtZSkgaWYgb3MucGF0aC5pc2RpcihkZXN0KSBcCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGRlc3QKKyAgICAgICAgICAgIG9zLnJlbmFtZShzcmMsIGRlc3RwYXRoKQorICAgICAgICAgICAgcmVuYW1lZmFpbGVkID0gMAorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBpZiBlWzBdICE9IGVycm5vLkVYREVWOgorICAgICAgICAgICAgICAgICMgU29tZSByYW5kb20gZXJyb3IuCisgICAgICAgICAgICAgICAgcHJpbnQoIm1vdmVmaWxlOiBGYWlsZWQgdG8gbW92ZSIsIHNyYywgInRvIiwgZGVzdCwgZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgIyBJbnZhbGlkIGNyb3NzLWRldmljZS1saW5rICdiaW5kJyBtb3VudGVkIG9yIGFjdHVhbGx5IENyb3NzLURldmljZQorCisgICAgaWYgcmVuYW1lZmFpbGVkOgorICAgICAgICBkaWRjb3B5ID0gMAorICAgICAgICBpZiBzdGF0LlNfSVNSRUcoc3N0YXRbc3RhdC5TVF9NT0RFXSk6CisgICAgICAgICAgICB0cnk6ICMgRm9yIHNhZmV0eSBjb3B5IHRoZW4gbW92ZSBpdCBvdmVyLgorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzcmMsIGRlc3QgKyAiI25ldyIpCisgICAgICAgICAgICAgICAgb3MucmVuYW1lKGRlc3QgKyAiI25ldyIsIGRlc3QpCisgICAgICAgICAgICAgICAgZGlkY29weSA9IDEKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBwcmludCgnbW92ZWZpbGU6IGNvcHknLCBzcmMsICctPicsIGRlc3QsICdmYWlsZWQuJywgZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgI3dlIGRvbid0IHlldCBoYW5kbGUgc3BlY2lhbCwgc28gd2UgbmVlZCB0byBmYWxsIGJhY2sgdG8gL2Jpbi9tdgorICAgICAgICAgICAgYSA9IGdldHN0YXR1c291dHB1dCgiL2Jpbi9tdiAtZiAiICsgIiciICsgc3JjICsgIicgJyIgKyBkZXN0ICsgIiciKQorICAgICAgICAgICAgaWYgYVswXSAhPSAwOgorICAgICAgICAgICAgICAgIHByaW50KCJtb3ZlZmlsZTogRmFpbGVkIHRvIG1vdmUgc3BlY2lhbCBmaWxlOiIgKyBzcmMgKyAiJyB0byAnIiArIGRlc3QgKyAiJyIsIGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUgIyBmYWlsdXJlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGRpZGNvcHk6CisgICAgICAgICAgICAgICAgb3MubGNob3duKGRlc3QsIHNzdGF0W3N0YXQuU1RfVUlEXSwgc3N0YXRbc3RhdC5TVF9HSURdKQorICAgICAgICAgICAgICAgIG9zLmNobW9kKGRlc3QsIHN0YXQuU19JTU9ERShzc3RhdFtzdGF0LlNUX01PREVdKSkgIyBTdGlja3kgaXMgcmVzZXQgb24gY2hvd24KKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoc3JjKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBwcmludCgibW92ZWZpbGU6IEZhaWxlZCB0byBjaG93bi9jaG1vZC91bmxpbmsiLCBkZXN0LCBlKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGlmIG5ld210aW1lOgorICAgICAgICBvcy51dGltZShkZXN0LCAobmV3bXRpbWUsIG5ld210aW1lKSkKKyAgICBlbHNlOgorICAgICAgICBvcy51dGltZShkZXN0LCAoc3N0YXRbc3RhdC5TVF9BVElNRV0sIHNzdGF0W3N0YXQuU1RfTVRJTUVdKSkKKyAgICAgICAgbmV3bXRpbWUgPSBzc3RhdFtzdGF0LlNUX01USU1FXQorICAgIHJldHVybiBuZXdtdGltZQorCitkZWYgY29weWZpbGUoc3JjLCBkZXN0LCBuZXdtdGltZSA9IE5vbmUsIHNzdGF0ID0gTm9uZSk6CisgICAgIiIiCisgICAgQ29waWVzIGEgZmlsZSBmcm9tIHNyYyB0byBkZXN0LCBwcmVzZXJ2aW5nIGFsbCBwZXJtaXNzaW9ucyBhbmQKKyAgICBhdHRyaWJ1dGVzOyBtdGltZSB3aWxsIGJlIHByZXNlcnZlZCBldmVuIHdoZW4gbW92aW5nIGFjcm9zcworICAgIGZpbGVzeXN0ZW1zLiAgUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MgYW5kIGZhbHNlIG9uIGZhaWx1cmUuCisgICAgIiIiCisgICAgI3ByaW50ICJjb3B5ZmlsZSgiICsgc3JjICsgIiwiICsgZGVzdCArICIsIiArIHN0cihuZXdtdGltZSkgKyAiLCIgKyBzdHIoc3N0YXQpICsgIikiCisgICAgdHJ5OgorICAgICAgICBpZiBub3Qgc3N0YXQ6CisgICAgICAgICAgICBzc3RhdCA9IG9zLmxzdGF0KHNyYykKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIGxvZ2dlci53YXJuKCJjb3B5ZmlsZTogc3RhdCBvZiAlcyBmYWlsZWQgKCVzKSIgJSAoc3JjLCBlKSkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZXN0ZXhpc3RzID0gMQorICAgIHRyeToKKyAgICAgICAgZHN0YXQgPSBvcy5sc3RhdChkZXN0KQorICAgIGV4Y2VwdDoKKyAgICAgICAgZHN0YXQgPSBvcy5sc3RhdChvcy5wYXRoLmRpcm5hbWUoZGVzdCkpCisgICAgICAgIGRlc3RleGlzdHMgPSAwCisKKyAgICBpZiBkZXN0ZXhpc3RzOgorICAgICAgICBpZiBzdGF0LlNfSVNMTksoZHN0YXRbc3RhdC5TVF9NT0RFXSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKGRlc3QpCisgICAgICAgICAgICAgICAgZGVzdGV4aXN0cyA9IDAKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBpZiBzdGF0LlNfSVNMTksoc3N0YXRbc3RhdC5TVF9NT0RFXSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhcmdldCA9IG9zLnJlYWRsaW5rKHNyYykKKyAgICAgICAgICAgIGlmIGRlc3RleGlzdHMgYW5kIG5vdCBzdGF0LlNfSVNESVIoZHN0YXRbc3RhdC5TVF9NT0RFXSk6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKGRlc3QpCisgICAgICAgICAgICBvcy5zeW1saW5rKHRhcmdldCwgZGVzdCkKKyAgICAgICAgICAgICNvcy5sY2hvd24oZGVzdCxzc3RhdFtzdGF0LlNUX1VJRF0sc3N0YXRbc3RhdC5TVF9HSURdKQorICAgICAgICAgICAgcmV0dXJuIG9zLmxzdGF0KGRlc3QpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCJjb3B5ZmlsZTogZmFpbGVkIHRvIGNyZWF0ZSBzeW1saW5rICVzIHRvICVzICglcykiICUgKGRlc3QsIHRhcmdldCwgZSkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmIHN0YXQuU19JU1JFRyhzc3RhdFtzdGF0LlNUX01PREVdKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3JjY2hvd24gPSBGYWxzZQorICAgICAgICAgICAgaWYgbm90IG9zLmFjY2VzcyhzcmMsIG9zLlJfT0spOgorICAgICAgICAgICAgICAgICMgTWFrZSBzdXJlIHdlIGNhbiByZWFkIGl0CisgICAgICAgICAgICAgICAgc3JjY2hvd24gPSBUcnVlCisgICAgICAgICAgICAgICAgb3MuY2htb2Qoc3JjLCBzc3RhdFtzdGF0LlNUX01PREVdIHwgc3RhdC5TX0lSVVNSKQorCisgICAgICAgICAgICAjIEZvciBzYWZldHkgY29weSB0aGVuIG1vdmUgaXQgb3Zlci4KKyAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzcmMsIGRlc3QgKyAiI25ldyIpCisgICAgICAgICAgICBvcy5yZW5hbWUoZGVzdCArICIjbmV3IiwgZGVzdCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgbG9nZ2VyLndhcm4oImNvcHlmaWxlOiBjb3B5ICVzIHRvICVzIGZhaWxlZCAoJXMpIiAlIChzcmMsIGRlc3QsIGUpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBzcmNjaG93bjoKKyAgICAgICAgICAgICAgICBvcy5jaG1vZChzcmMsIHNzdGF0W3N0YXQuU1RfTU9ERV0pCisgICAgICAgICAgICAgICAgb3MudXRpbWUoc3JjLCAoc3N0YXRbc3RhdC5TVF9BVElNRV0sIHNzdGF0W3N0YXQuU1RfTVRJTUVdKSkKKworICAgIGVsc2U6CisgICAgICAgICN3ZSBkb24ndCB5ZXQgaGFuZGxlIHNwZWNpYWwsIHNvIHdlIG5lZWQgdG8gZmFsbCBiYWNrIHRvIC9iaW4vbXYKKyAgICAgICAgYSA9IGdldHN0YXR1c291dHB1dCgiL2Jpbi9jcCAtZiAiICsgIiciICsgc3JjICsgIicgJyIgKyBkZXN0ICsgIiciKQorICAgICAgICBpZiBhWzBdICE9IDA6CisgICAgICAgICAgICBsb2dnZXIud2FybigiY29weWZpbGU6IGZhaWxlZCB0byBjb3B5IHNwZWNpYWwgZmlsZSAlcyB0byAlcyAoJXMpIiAlIChzcmMsIGRlc3QsIGEpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlICMgZmFpbHVyZQorICAgIHRyeToKKyAgICAgICAgb3MubGNob3duKGRlc3QsIHNzdGF0W3N0YXQuU1RfVUlEXSwgc3N0YXRbc3RhdC5TVF9HSURdKQorICAgICAgICBvcy5jaG1vZChkZXN0LCBzdGF0LlNfSU1PREUoc3N0YXRbc3RhdC5TVF9NT0RFXSkpICMgU3RpY2t5IGlzIHJlc2V0IG9uIGNob3duCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBsb2dnZXIud2FybigiY29weWZpbGU6IGZhaWxlZCB0byBjaG93bi9jaG1vZCAlcyAoJXMpIiAlIChkZXN0LCBlKSkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBuZXdtdGltZToKKyAgICAgICAgb3MudXRpbWUoZGVzdCwgKG5ld210aW1lLCBuZXdtdGltZSkpCisgICAgZWxzZToKKyAgICAgICAgb3MudXRpbWUoZGVzdCwgKHNzdGF0W3N0YXQuU1RfQVRJTUVdLCBzc3RhdFtzdGF0LlNUX01USU1FXSkpCisgICAgICAgIG5ld210aW1lID0gc3N0YXRbc3RhdC5TVF9NVElNRV0KKyAgICByZXR1cm4gbmV3bXRpbWUKKworZGVmIHdoaWNoKHBhdGgsIGl0ZW0sIGRpcmVjdGlvbiA9IDAsIGhpc3RvcnkgPSBGYWxzZSk6CisgICAgIiIiCisgICAgTG9jYXRlIGEgZmlsZSBpbiBhIFBBVEgKKyAgICAiIiIKKworICAgIGhpc3QgPSBbXQorICAgIHBhdGhzID0gKHBhdGggb3IgIiIpLnNwbGl0KCc6JykKKyAgICBpZiBkaXJlY3Rpb24gIT0gMDoKKyAgICAgICAgcGF0aHMucmV2ZXJzZSgpCisKKyAgICBmb3IgcCBpbiBwYXRoczoKKyAgICAgICAgbmV4dCA9IG9zLnBhdGguam9pbihwLCBpdGVtKQorICAgICAgICBoaXN0LmFwcGVuZChuZXh0KQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhuZXh0KToKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKG5leHQpOgorICAgICAgICAgICAgICAgIG5leHQgPSBvcy5wYXRoLmFic3BhdGgobmV4dCkKKyAgICAgICAgICAgIGlmIGhpc3Rvcnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQsIGhpc3QKKyAgICAgICAgICAgIHJldHVybiBuZXh0CisKKyAgICBpZiBoaXN0b3J5OgorICAgICAgICByZXR1cm4gIiIsIGhpc3QKKyAgICByZXR1cm4gIiIKKworZGVmIHRvX2Jvb2xlYW4oc3RyaW5nLCBkZWZhdWx0PU5vbmUpOgorICAgIGlmIG5vdCBzdHJpbmc6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisKKyAgICBub3JtYWxpemVkID0gc3RyaW5nLmxvd2VyKCkKKyAgICBpZiBub3JtYWxpemVkIGluICgieSIsICJ5ZXMiLCAiMSIsICJ0cnVlIik6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgZWxpZiBub3JtYWxpemVkIGluICgibiIsICJubyIsICIwIiwgImZhbHNlIik6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgdmFsdWUgZm9yIHRvX2Jvb2xlYW46ICVzIiAlIHN0cmluZykKKworZGVmIGNvbnRhaW5zKHZhcmlhYmxlLCBjaGVja3ZhbHVlcywgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKToKKyAgICB2YWwgPSBkLmdldFZhcih2YXJpYWJsZSwgVHJ1ZSkKKyAgICBpZiBub3QgdmFsOgorICAgICAgICByZXR1cm4gZmFsc2V2YWx1ZQorICAgIHZhbCA9IHNldCh2YWwuc3BsaXQoKSkKKyAgICBpZiBpc2luc3RhbmNlKGNoZWNrdmFsdWVzLCBiYXNlc3RyaW5nKToKKyAgICAgICAgY2hlY2t2YWx1ZXMgPSBzZXQoY2hlY2t2YWx1ZXMuc3BsaXQoKSkKKyAgICBlbHNlOgorICAgICAgICBjaGVja3ZhbHVlcyA9IHNldChjaGVja3ZhbHVlcykKKyAgICBpZiBjaGVja3ZhbHVlcy5pc3N1YnNldCh2YWwpOiAKKyAgICAgICAgcmV0dXJuIHRydWV2YWx1ZQorICAgIHJldHVybiBmYWxzZXZhbHVlCisKK2RlZiBjb250YWluc19hbnkodmFyaWFibGUsIGNoZWNrdmFsdWVzLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpOgorICAgIHZhbCA9IGQuZ2V0VmFyKHZhcmlhYmxlLCBUcnVlKQorICAgIGlmIG5vdCB2YWw6CisgICAgICAgIHJldHVybiBmYWxzZXZhbHVlCisgICAgdmFsID0gc2V0KHZhbC5zcGxpdCgpKQorICAgIGlmIGlzaW5zdGFuY2UoY2hlY2t2YWx1ZXMsIGJhc2VzdHJpbmcpOgorICAgICAgICBjaGVja3ZhbHVlcyA9IHNldChjaGVja3ZhbHVlcy5zcGxpdCgpKQorICAgIGVsc2U6CisgICAgICAgIGNoZWNrdmFsdWVzID0gc2V0KGNoZWNrdmFsdWVzKQorICAgIGlmIGNoZWNrdmFsdWVzICYgdmFsOgorICAgICAgICByZXR1cm4gdHJ1ZXZhbHVlCisgICAgcmV0dXJuIGZhbHNldmFsdWUKKworZGVmIGNwdV9jb3VudCgpOgorICAgIHJldHVybiBtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50KCkKKworZGVmIG5vbmJsb2NraW5nZmQoZmQpOgorICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZMLCBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGTCkgfCBvcy5PX05PTkJMT0NLKQorCitkZWYgcHJvY2Vzc19wcm9maWxlbG9nKGZuLCBwb3V0ID0gTm9uZSk6CisgICAgIyBFaXRoZXIgY2FsbCB3aXRoIGEgbGlzdCBvZiBmaWxlbmFtZXMgYW5kIHNldCBwb3V0IG9yIGEgZmlsZW5hbWUgYW5kIG9wdGlvbmFsbHkgcG91dC4KKyAgICBpZiBub3QgcG91dDoKKyAgICAgICAgcG91dCA9IGZuICsgJy5wcm9jZXNzZWQnCisgICAgcG91dCA9IG9wZW4ocG91dCwgJ3cnKQorICAgCisgICAgaW1wb3J0IHBzdGF0cworICAgIGlmIGlzaW5zdGFuY2UoZm4sIGxpc3QpOgorICAgICAgICBwID0gcHN0YXRzLlN0YXRzKCpmbiwgc3RyZWFtPXBvdXQpCisgICAgZWxzZToKKyAgICAgICAgcCA9IHBzdGF0cy5TdGF0cyhmbiwgc3RyZWFtPXBvdXQpCisgICAgcC5zb3J0X3N0YXRzKCd0aW1lJykKKyAgICBwLnByaW50X3N0YXRzKCkKKyAgICBwLnByaW50X2NhbGxlcnMoKQorICAgIHAuc29ydF9zdGF0cygnY3VtdWxhdGl2ZScpCisgICAgcC5wcmludF9zdGF0cygpCisKKyAgICBwb3V0LmZsdXNoKCkKKyAgICBwb3V0LmNsb3NlKCkgIAorCisjCisjIFdhcyBwcmVzZW50IHRvIHdvcmsgYXJvdW5kIG11bHRpcHJvY2Vzc2luZyBwb29sIGJ1Z3MgaW4gcHl0aG9uIDwgMi43LjMKKyMKK2RlZiBtdWx0aXByb2Nlc3Npbmdwb29sKCphcmdzLCAqKmt3YXJncyk6CisKKyAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLnBvb2wKKyAgICAjaW1wb3J0IG11bHRpcHJvY2Vzc2luZy51dGlsCisgICAgI211bHRpcHJvY2Vzc2luZy51dGlsLmxvZ190b19zdGRlcnIoMTApCisgICAgIyBEZWFsIHdpdGggYSBtdWx0aXByb2Nlc3NpbmcgYnVnIHdoZXJlIHNpZ25hbHMgdG8gdGhlIHByb2Nlc3NlcyB3b3VsZCBiZSBkZWxheWVkIHVudGlsIHRoZSB3b3JrCisgICAgIyBjb21wbGV0ZXMuIFB1dHRpbmcgaW4gYSB0aW1lb3V0IG1lYW5zIHRoZSBzaWduYWxzIChsaWtlIFNJR0lOVC9TSUdURVJNKSBnZXQgcHJvY2Vzc2VkLgorICAgIGRlZiB3cmFwcGVyKGZ1bmMpOgorICAgICAgICBkZWYgd3JhcChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAgICAgcmV0dXJuIGZ1bmMoc2VsZiwgdGltZW91dD10aW1lb3V0IGlmIHRpbWVvdXQgaXMgbm90IE5vbmUgZWxzZSAxZTEwMCkKKyAgICAgICAgcmV0dXJuIHdyYXAKKyAgICBtdWx0aXByb2Nlc3NpbmcucG9vbC5JTWFwSXRlcmF0b3IubmV4dCA9IHdyYXBwZXIobXVsdGlwcm9jZXNzaW5nLnBvb2wuSU1hcEl0ZXJhdG9yLm5leHQpCisKKyAgICByZXR1cm4gbXVsdGlwcm9jZXNzaW5nLlBvb2woKmFyZ3MsICoqa3dhcmdzKQorCitkZWYgZXhlY19mbGF0X3B5dGhvbl9mdW5jKGZ1bmMsICphcmdzLCAqKmt3YXJncyk6CisgICAgIiIiRXhlY3V0ZSBhIGZsYXQgcHl0aG9uIGZ1bmN0aW9uIChkZWZpbmVkIHdpdGggZGVmIGZ1bmNuYW1lKGFyZ3MpOi4uLikiIiIKKyAgICAjIFByZXBhcmUgYSBzbWFsbCBwaWVjZSBvZiBweXRob24gY29kZSB3aGljaCBjYWxscyB0aGUgcmVxdWVzdGVkIGZ1bmN0aW9uCisgICAgIyBUbyBkbyB0aGlzIHdlIG5lZWQgdG8gcHJlcGFyZSB0d28gdGhpbmdzIC0gYSBzZXQgb2YgdmFyaWFibGVzIHdlIGNhbiB1c2UgdG8gcGFzcworICAgICMgdGhlIHZhbHVlcyBvZiBhcmd1bWVudHMgaW50byB0aGUgY2FsbGluZyBmdW5jdGlvbiwgYW5kIHRoZSBsaXN0IG9mIGFyZ3VtZW50cyBmb3IKKyAgICAjIHRoZSBmdW5jdGlvbiBiZWluZyBjYWxsZWQKKyAgICBjb250ZXh0ID0ge30KKyAgICBmdW5jYXJncyA9IFtdCisgICAgIyBIYW5kbGUgdW5uYW1lZCBhcmd1bWVudHMKKyAgICBhaWR4ID0gMQorICAgIGZvciBhcmcgaW4gYXJnczoKKyAgICAgICAgYXJnbmFtZSA9ICdhcmdfJXMnICUgYWlkeAorICAgICAgICBjb250ZXh0W2FyZ25hbWVdID0gYXJnCisgICAgICAgIGZ1bmNhcmdzLmFwcGVuZChhcmduYW1lKQorICAgICAgICBhaWR4ICs9IDEKKyAgICAjIEhhbmRsZSBrZXl3b3JkIGFyZ3VtZW50cworICAgIGNvbnRleHQudXBkYXRlKGt3YXJncykKKyAgICBmdW5jYXJncy5leHRlbmQoWyclcz0lcycgJSAoYXJnLCBhcmcpIGZvciBhcmcgaW4ga3dhcmdzLml0ZXJrZXlzKCldKQorICAgIGNvZGUgPSAncmV0dmFsID0gJXMoJXMpJyAlIChmdW5jLCAnLCAnLmpvaW4oZnVuY2FyZ3MpKQorICAgIGNvbXAgPSBiYi51dGlscy5iZXR0ZXJfY29tcGlsZShjb2RlLCAnPHN0cmluZz4nLCAnPHN0cmluZz4nKQorICAgIGJiLnV0aWxzLmJldHRlcl9leGVjKGNvbXAsIGNvbnRleHQsIGNvZGUsICc8c3RyaW5nPicpCisgICAgcmV0dXJuIGNvbnRleHRbJ3JldHZhbCddCisKK2RlZiBlZGl0X21ldGFkYXRhKG1ldGFfbGluZXMsIHZhcmlhYmxlcywgdmFyZnVuYywgbWF0Y2hfb3ZlcnJpZGVzPUZhbHNlKToKKyAgICAiIiJFZGl0IGxpbmVzIGZyb20gYSByZWNpcGUgb3IgY29uZmlnIGZpbGUgYW5kIG1vZGlmeSBvbmUgb3IgbW9yZQorICAgIHNwZWNpZmllZCB2YXJpYWJsZSB2YWx1ZXMgc2V0IGluIHRoZSBmaWxlIHVzaW5nIGEgc3BlY2lmaWVkIGNhbGxiYWNrCisgICAgZnVuY3Rpb24uIExpbmVzIGFyZSBleHBlY3RlZCB0byBoYXZlIHRyYWlsaW5nIG5ld2xpbmVzLgorICAgIFBhcmFtZXRlcnM6CisgICAgICAgIG1ldGFfbGluZXM6IGxpbmVzIGZyb20gdGhlIGZpbGU7IGNhbiBiZSBhIGxpc3Qgb3IgYW4gaXRlcmFibGUKKyAgICAgICAgICAgIChlLmcuIGZpbGUgcG9pbnRlcikKKyAgICAgICAgdmFyaWFibGVzOiBhIGxpc3Qgb2YgdmFyaWFibGUgbmFtZXMgdG8gbG9vayBmb3IuIEZ1bmN0aW9ucworICAgICAgICAgICAgbWF5IGFsc28gYmUgc3BlY2lmaWVkLCBidXQgbXVzdCBiZSBzcGVjaWZpZWQgd2l0aCAnKCknIGF0CisgICAgICAgICAgICB0aGUgZW5kIG9mIHRoZSBuYW1lLiBOb3RlIHRoYXQgdGhlIGZ1bmN0aW9uIGRvZXNuJ3QgaGF2ZQorICAgICAgICAgICAgYW55IGludHJpbnNpYyB1bmRlcnN0YW5kaW5nIG9mIF9hcHBlbmQsIF9wcmVwZW5kLCBfcmVtb3ZlLAorICAgICAgICAgICAgb3Igb3ZlcnJpZGVzLCBzbyB0aGVzZSBhcmUgY29uc2lkZXJlZCBhcyBwYXJ0IG9mIHRoZSBuYW1lLgorICAgICAgICAgICAgVGhlc2UgdmFsdWVzIGdvIGludG8gYSByZWd1bGFyIGV4cHJlc3Npb24sIHNvIHJlZ3VsYXIKKyAgICAgICAgICAgIGV4cHJlc3Npb24gc3ludGF4IGlzIGFsbG93ZWQuCisgICAgICAgIHZhcmZ1bmM6IGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCBmb3IgZXZlcnkgdmFyaWFibGUgbWF0Y2hpbmcKKyAgICAgICAgICAgIG9uZSBvZiB0aGUgZW50cmllcyBpbiB0aGUgdmFyaWFibGVzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uCisgICAgICAgICAgICBzaG91bGQgdGFrZSBmb3VyIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgICB2YXJuYW1lOiBuYW1lIG9mIHZhcmlhYmxlIG1hdGNoZWQKKyAgICAgICAgICAgICAgICBvcmlndmFsdWU6IGN1cnJlbnQgdmFsdWUgaW4gZmlsZQorICAgICAgICAgICAgICAgIG9wOiB0aGUgb3BlcmF0b3IgKGUuZy4gJys9JykKKyAgICAgICAgICAgICAgICBuZXdsaW5lczogbGlzdCBvZiBsaW5lcyB1cCB0byB0aGlzIHBvaW50LiBZb3UgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICB0aGlzIHRvIHByZXBlbmQgbGluZXMgYmVmb3JlIHRoaXMgdmFyaWFibGUgc2V0dGluZworICAgICAgICAgICAgICAgICAgICBpZiB5b3Ugd2lzaC4KKyAgICAgICAgICAgIGFuZCBzaG91bGQgcmV0dXJuIGEgdGhyZWUtZWxlbWVudCB0dXBsZToKKyAgICAgICAgICAgICAgICBuZXd2YWx1ZTogbmV3IHZhbHVlIHRvIHN1YnN0aXR1dGUgaW4sIG9yIE5vbmUgdG8gZHJvcAorICAgICAgICAgICAgICAgICAgICB0aGUgdmFyaWFibGUgc2V0dGluZyBlbnRpcmVseS4gKElmIHRoZSByZW1vdmFsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgaW4gdHdvIGNvbnNlY3V0aXZlIGJsYW5rIGxpbmVzLCBvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGJsYW5rIGxpbmVzIHdpbGwgYWxzbyBiZSBkcm9wcGVkKS4KKyAgICAgICAgICAgICAgICBuZXdvcDogdGhlIG9wZXJhdG9yIHRvIHVzZSAtIGlmIHlvdSBzcGVjaWZ5IE5vbmUgaGVyZSwKKyAgICAgICAgICAgICAgICAgICAgdGhlIG9yaWdpbmFsIG9wZXJhdGlvbiB3aWxsIGJlIHVzZWQuCisgICAgICAgICAgICAgICAgaW5kZW50OiBudW1iZXIgb2Ygc3BhY2VzIHRvIGluZGVudCBtdWx0aS1saW5lIGVudHJpZXMsCisgICAgICAgICAgICAgICAgICAgIG9yIC0xIHRvIGluZGVudCB1cCB0byB0aGUgbGV2ZWwgb2YgdGhlIGFzc2lnbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgYW5kIG9wZW5pbmcgcXVvdGUsIG9yIGEgc3RyaW5nIHRvIHVzZSBhcyB0aGUgaW5kZW50LgorICAgICAgICAgICAgICAgIG1pbmJyZWFrOiBUcnVlIHRvIGFsbG93IHRoZSBmaXJzdCBlbGVtZW50IG9mIGEKKyAgICAgICAgICAgICAgICAgICAgbXVsdGktbGluZSB2YWx1ZSB0byBjb250aW51ZSBvbiB0aGUgc2FtZSBsaW5lIGFzCisgICAgICAgICAgICAgICAgICAgIHRoZSBhc3NpZ25tZW50LCBGYWxzZSB0byBpbmRlbnQgYmVmb3JlIHRoZSBmaXJzdAorICAgICAgICAgICAgICAgICAgICBlbGVtZW50LgorICAgICAgICBtYXRjaF9vdmVycmlkZXM6IFRydWUgdG8gbWF0Y2ggaXRlbXMgd2l0aCBfb3ZlcnJpZGVzIG9uIHRoZSBlbmQsCisgICAgICAgICAgICBGYWxzZSBvdGhlcndpc2UKKyAgICBSZXR1cm5zIGEgdHVwbGU6CisgICAgICAgIHVwZGF0ZWQ6CisgICAgICAgICAgICBUcnVlIGlmIGNoYW5nZXMgd2VyZSBtYWRlLCBGYWxzZSBvdGhlcndpc2UuCisgICAgICAgIG5ld2xpbmVzOgorICAgICAgICAgICAgTGluZXMgYWZ0ZXIgcHJvY2Vzc2luZworICAgICIiIgorCisgICAgdmFyX3JlcyA9IHt9CisgICAgaWYgbWF0Y2hfb3ZlcnJpZGVzOgorICAgICAgICBvdmVycmlkZV9yZSA9ICcoX1thLXpBLVowLTktXyQoKXt9XSspPycKKyAgICBlbHNlOgorICAgICAgICBvdmVycmlkZV9yZSA9ICcnCisgICAgZm9yIHZhciBpbiB2YXJpYWJsZXM6CisgICAgICAgIGlmIHZhci5lbmRzd2l0aCgnKCknKToKKyAgICAgICAgICAgIHZhcl9yZXNbdmFyXSA9IHJlLmNvbXBpbGUoJ14oJXMlcylbIFxcdF0qXChbIFxcdF0qXClbIFxcdF0qeycgJSAodmFyWzotMl0ucnN0cmlwKCksIG92ZXJyaWRlX3JlKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhcl9yZXNbdmFyXSA9IHJlLmNvbXBpbGUoJ14oJXMlcylbIFxcdF0qWz8rOi5dKj1bKy5dKlsgXFx0XSooWyJcJ10pJyAlICh2YXIsIG92ZXJyaWRlX3JlKSkKKworICAgIHVwZGF0ZWQgPSBGYWxzZQorICAgIHZhcnNldF9zdGFydCA9ICcnCisgICAgdmFybGluZXMgPSBbXQorICAgIG5ld2xpbmVzID0gW10KKyAgICBpbl92YXIgPSBOb25lCisgICAgZnVsbF92YWx1ZSA9ICcnCisgICAgdmFyX2VuZCA9ICcnCisKKyAgICBkZWYgaGFuZGxlX3Zhcl9lbmQoKToKKyAgICAgICAgcHJlcnVuX25ld2xpbmVzID0gbmV3bGluZXNbOl0KKyAgICAgICAgb3AgPSB2YXJzZXRfc3RhcnRbbGVuKGluX3Zhcik6XS5zdHJpcCgpCisgICAgICAgIChuZXd2YWx1ZSwgbmV3b3AsIGluZGVudCwgbWluYnJlYWspID0gdmFyZnVuYyhpbl92YXIsIGZ1bGxfdmFsdWUsIG9wLCBuZXdsaW5lcykKKyAgICAgICAgY2hhbmdlZCA9IChwcmVydW5fbmV3bGluZXMgIT0gbmV3bGluZXMpCisKKyAgICAgICAgaWYgbmV3dmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAgICMgRHJvcCB0aGUgdmFsdWUKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsaWYgbmV3dmFsdWUgIT0gZnVsbF92YWx1ZSBvciAobmV3b3Agbm90IGluIFtOb25lLCBvcF0pOgorICAgICAgICAgICAgaWYgbmV3b3Agbm90IGluIFtOb25lLCBvcF06CisgICAgICAgICAgICAgICAgIyBDYWxsYmFjayBjaGFuZ2VkIHRoZSBvcGVyYXRvcgorICAgICAgICAgICAgICAgIHZhcnNldF9uZXcgPSAiJXMgJXMiICUgKGluX3ZhciwgbmV3b3ApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhcnNldF9uZXcgPSB2YXJzZXRfc3RhcnQKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShpbmRlbnQsIChpbnQsIGxvbmcpKToKKyAgICAgICAgICAgICAgICBpZiBpbmRlbnQgPT0gLTE6CisgICAgICAgICAgICAgICAgICAgIGluZGVudHNwYyA9ICcgJyAqIChsZW4odmFyc2V0X25ldykgKyAyKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGluZGVudHNwYyA9ICcgJyAqIGluZGVudAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpbmRlbnRzcGMgPSBpbmRlbnQKKyAgICAgICAgICAgIGlmIGluX3Zhci5lbmRzd2l0aCgnKCknKToKKyAgICAgICAgICAgICAgICAjIEEgZnVuY3Rpb24gZGVmaW5pdGlvbgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobmV3dmFsdWUsIGxpc3QpOgorICAgICAgICAgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQoJyVzIHtcbiVzJXNcbn1cbicgJSAodmFyc2V0X25ldywgaW5kZW50c3BjLCAoJ1xuJXMnICUgaW5kZW50c3BjKS5qb2luKG5ld3ZhbHVlKSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG5ld3ZhbHVlLnN0YXJ0c3dpdGgoJ1xuJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXd2YWx1ZSA9ICdcbicgKyBuZXd2YWx1ZQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgbmV3dmFsdWUuZW5kc3dpdGgoJ1xuJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXd2YWx1ZSA9IG5ld3ZhbHVlICsgJ1xuJworICAgICAgICAgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQoJyVzIHslc31cbicgJSAodmFyc2V0X25ldywgbmV3dmFsdWUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIE5vcm1hbCB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobmV3dmFsdWUsIGxpc3QpOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgbmV3dmFsdWU6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEVtcHR5IGxpc3QgLT4gZW1wdHkgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQoJyVzICIiXG4nICUgdmFyc2V0X25ldykKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBtaW5icmVhazoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRmlyc3QgaXRlbSBvbiBmaXJzdCBsaW5lCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4obmV3dmFsdWUpID09IDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCclcyAiJXMiXG4nICUgKHZhcnNldF9uZXcsIG5ld3ZhbHVlWzBdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCclcyAiJXMgXFxcbicgJSAodmFyc2V0X25ldywgbmV3dmFsdWVbMF0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIG5ld3ZhbHVlWzE6XToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCclcyVzIFxcXG4nICUgKGluZGVudHNwYywgaXRlbSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCclcyJcbicgJSBpbmRlbnRzcGMpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAjIE5vIGl0ZW0gb24gZmlyc3QgbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCclcyAiIFxcXG4nICUgdmFyc2V0X25ldykKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIG5ld3ZhbHVlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZCgnJXMlcyBcXFxuJyAlIChpbmRlbnRzcGMsIGl0ZW0pKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCclcyJcbicgJSBpbmRlbnRzcGMpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCclcyAiJXMiXG4nICUgKHZhcnNldF9uZXcsIG5ld3ZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFB1dCB0aGUgb2xkIGxpbmVzIGJhY2sgd2hlcmUgdGhleSB3ZXJlCisgICAgICAgICAgICBuZXdsaW5lcy5leHRlbmQodmFybGluZXMpCisgICAgICAgICAgICAjIElmIG5ld2xpbmVzIHdhcyB0b3VjaGVkIGJ5IHRoZSBmdW5jdGlvbiwgd2UnbGwgbmVlZCB0byByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIGNoYW5nZWQKKworICAgIGNoZWNrc3BjID0gRmFsc2UKKworICAgIGZvciBsaW5lIGluIG1ldGFfbGluZXM6CisgICAgICAgIGlmIGluX3ZhcjoKKyAgICAgICAgICAgIHZhbHVlID0gbGluZS5yc3RyaXAoKQorICAgICAgICAgICAgdmFybGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICBpZiBpbl92YXIuZW5kc3dpdGgoJygpJyk6CisgICAgICAgICAgICAgICAgZnVsbF92YWx1ZSArPSAnXG4nICsgdmFsdWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZnVsbF92YWx1ZSArPSB2YWx1ZVs6LTFdCisgICAgICAgICAgICBpZiB2YWx1ZS5lbmRzd2l0aCh2YXJfZW5kKToKKyAgICAgICAgICAgICAgICBpZiBpbl92YXIuZW5kc3dpdGgoJygpJyk6CisgICAgICAgICAgICAgICAgICAgIGlmIGZ1bGxfdmFsdWUuY291bnQoJ3snKSAtIGZ1bGxfdmFsdWUuY291bnQoJ30nKSA+PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBmdWxsX3ZhbHVlID0gZnVsbF92YWx1ZVs6LTFdCisgICAgICAgICAgICAgICAgaWYgaGFuZGxlX3Zhcl9lbmQoKToKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tzcGMgPSBUcnVlCisgICAgICAgICAgICAgICAgaW5fdmFyID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2tpcCA9IEZhbHNlCisgICAgICAgICAgICBmb3IgKHZhcm5hbWUsIHZhcl9yZSkgaW4gdmFyX3Jlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICByZXMgPSB2YXJfcmUubWF0Y2gobGluZSkKKyAgICAgICAgICAgICAgICBpZiByZXM6CisgICAgICAgICAgICAgICAgICAgIGlzZnVuYyA9IHZhcm5hbWUuZW5kc3dpdGgoJygpJykKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNmdW5jOgorICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR2YWx1ZSA9IGxpbmUuc3BsaXQoJ3snLCAxKQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyX2VuZCA9ICd9JworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyX2VuZCA9IHJlcy5ncm91cHMoKVstMV0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dmFsdWUgPSBsaW5lLnNwbGl0KHZhcl9lbmQsIDEpCisgICAgICAgICAgICAgICAgICAgIHZhcnNldF9zdGFydCA9IHNwbGl0dmFsdWVbMF0ucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzcGxpdHZhbHVlWzFdLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2Z1bmMgYW5kIHZhbHVlLmVuZHN3aXRoKCdcXCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVs6LTFdCisgICAgICAgICAgICAgICAgICAgIGZ1bGxfdmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICB2YXJsaW5lcyA9IFtsaW5lXQorICAgICAgICAgICAgICAgICAgICBpbl92YXIgPSByZXMuZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNmdW5jOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5fdmFyICs9ICcoKScKKyAgICAgICAgICAgICAgICAgICAgaWYgdmFsdWUuZW5kc3dpdGgodmFyX2VuZCk6CisgICAgICAgICAgICAgICAgICAgICAgICBmdWxsX3ZhbHVlID0gZnVsbF92YWx1ZVs6LTFdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBoYW5kbGVfdmFyX2VuZCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tzcGMgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBpbl92YXIgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIHNraXAgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBub3Qgc2tpcDoKKyAgICAgICAgICAgICAgICBpZiBjaGVja3NwYzoKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tzcGMgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBpZiBuZXdsaW5lc1stMV0gPT0gJ1xuJyBhbmQgbGluZSA9PSAnXG4nOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBTcXVhc2ggYmxhbmsgbGluZSBpZiB0aGVyZSBhcmUgdHdvIGNvbnNlY3V0aXZlIGJsYW5rcyBhZnRlciBhIHJlbW92YWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKGxpbmUpCisgICAgcmV0dXJuICh1cGRhdGVkLCBuZXdsaW5lcykKKworCitkZWYgZWRpdF9tZXRhZGF0YV9maWxlKG1ldGFfZmlsZSwgdmFyaWFibGVzLCB2YXJmdW5jKToKKyAgICAiIiJFZGl0IGEgcmVjaXBlIG9yIGNvbmZpZyBmaWxlIGFuZCBtb2RpZnkgb25lIG9yIG1vcmUgc3BlY2lmaWVkCisgICAgdmFyaWFibGUgdmFsdWVzIHNldCBpbiB0aGUgZmlsZSB1c2luZyBhIHNwZWNpZmllZCBjYWxsYmFjayBmdW5jdGlvbi4KKyAgICBUaGUgZmlsZSBpcyBvbmx5IHdyaXR0ZW4gdG8gaWYgdGhlIHZhbHVlKHMpIGFjdHVhbGx5IGNoYW5nZS4KKyAgICBUaGlzIGlzIGJhc2ljYWxseSB0aGUgZmlsZSB2ZXJzaW9uIG9mIGVkaXRfbWV0YWRhdGEoKSwgc2VlIHRoYXQKKyAgICBmdW5jdGlvbidzIGRlc2NyaXB0aW9uIGZvciBwYXJhbWV0ZXIvdXNhZ2UgaW5mb3JtYXRpb24uCisgICAgUmV0dXJucyBUcnVlIGlmIHRoZSBmaWxlIHdhcyB3cml0dGVuIHRvLCBGYWxzZSBvdGhlcndpc2UuCisgICAgIiIiCisgICAgd2l0aCBvcGVuKG1ldGFfZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAodXBkYXRlZCwgbmV3bGluZXMpID0gZWRpdF9tZXRhZGF0YShmLCB2YXJpYWJsZXMsIHZhcmZ1bmMpCisgICAgaWYgdXBkYXRlZDoKKyAgICAgICAgd2l0aCBvcGVuKG1ldGFfZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZWxpbmVzKG5ld2xpbmVzKQorICAgIHJldHVybiB1cGRhdGVkCisKKworZGVmIGVkaXRfYmJsYXllcnNfY29uZihiYmxheWVyc19jb25mLCBhZGQsIHJlbW92ZSk6CisgICAgIiIiRWRpdCBiYmxheWVycy5jb25mLCBhZGRpbmcgYW5kL29yIHJlbW92aW5nIGxheWVycyIiIgorCisgICAgaW1wb3J0IGZubWF0Y2gKKworICAgIGRlZiByZW1vdmVfdHJhaWxpbmdfc2VwKHB0aCk6CisgICAgICAgIGlmIHB0aCBhbmQgcHRoWy0xXSA9PSBvcy5zZXA6CisgICAgICAgICAgICBwdGggPSBwdGhbOi0xXQorICAgICAgICByZXR1cm4gcHRoCisKKyAgICBkZWYgbGF5ZXJsaXN0X3BhcmFtKHZhbHVlKToKKyAgICAgICAgaWYgbm90IHZhbHVlOgorICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgbGlzdCk6CisgICAgICAgICAgICByZXR1cm4gW3JlbW92ZV90cmFpbGluZ19zZXAoeCkgZm9yIHggaW4gdmFsdWVdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gW3JlbW92ZV90cmFpbGluZ19zZXAodmFsdWUpXQorCisgICAgbm90YWRkZWQgPSBbXQorICAgIG5vdHJlbW92ZWQgPSBbXQorCisgICAgYWRkbGF5ZXJzID0gbGF5ZXJsaXN0X3BhcmFtKGFkZCkKKyAgICByZW1vdmVsYXllcnMgPSBsYXllcmxpc3RfcGFyYW0ocmVtb3ZlKQorCisgICAgIyBOZWVkIHRvIHVzZSBhIGxpc3QgaGVyZSBiZWNhdXNlIHdlIGNhbid0IHNldCBub24tbG9jYWwgdmFyaWFibGVzIGZyb20gYSBjYWxsYmFjayBpbiBweXRob24gMi54CisgICAgYmJsYXllcmNhbGxzID0gW10KKworICAgIGRlZiBoYW5kbGVfYmJsYXllcnModmFybmFtZSwgb3JpZ3ZhbHVlLCBvcCwgbmV3bGluZXMpOgorICAgICAgICBiYmxheWVyY2FsbHMuYXBwZW5kKHZhcm5hbWUpCisgICAgICAgIHVwZGF0ZWQgPSBGYWxzZQorICAgICAgICBiYmxheWVycyA9IFtyZW1vdmVfdHJhaWxpbmdfc2VwKHgpIGZvciB4IGluIG9yaWd2YWx1ZS5zcGxpdCgpXQorICAgICAgICBpZiByZW1vdmVsYXllcnM6CisgICAgICAgICAgICBmb3IgcmVtb3ZlbGF5ZXIgaW4gcmVtb3ZlbGF5ZXJzOgorICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGZvciBsYXllciBpbiBiYmxheWVyczoKKyAgICAgICAgICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoKGxheWVyLCByZW1vdmVsYXllcik6CisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJibGF5ZXJzLnJlbW92ZShsYXllcikKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgbm90IG1hdGNoZWQ6CisgICAgICAgICAgICAgICAgICAgIG5vdHJlbW92ZWQuYXBwZW5kKHJlbW92ZWxheWVyKQorICAgICAgICBpZiBhZGRsYXllcnM6CisgICAgICAgICAgICBmb3IgYWRkbGF5ZXIgaW4gYWRkbGF5ZXJzOgorICAgICAgICAgICAgICAgIGlmIGFkZGxheWVyIG5vdCBpbiBiYmxheWVyczoKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYmJsYXllcnMuYXBwZW5kKGFkZGxheWVyKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG5vdGFkZGVkLmFwcGVuZChhZGRsYXllcikKKworICAgICAgICBpZiB1cGRhdGVkOgorICAgICAgICAgICAgcmV0dXJuIChiYmxheWVycywgTm9uZSwgMiwgRmFsc2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gKG9yaWd2YWx1ZSwgTm9uZSwgMiwgRmFsc2UpCisKKyAgICBlZGl0X21ldGFkYXRhX2ZpbGUoYmJsYXllcnNfY29uZiwgWydCQkxBWUVSUyddLCBoYW5kbGVfYmJsYXllcnMpCisKKyAgICBpZiBub3QgYmJsYXllcmNhbGxzOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1VuYWJsZSB0byBmaW5kIEJCTEFZRVJTIGluICVzJyAlIGJibGF5ZXJzX2NvbmYpCisKKyAgICByZXR1cm4gKG5vdGFkZGVkLCBub3RyZW1vdmVkKQorCisKK2RlZiBnZXRfZmlsZV9sYXllcihmaWxlbmFtZSwgZCk6CisgICAgIiIiRGV0ZXJtaW5lIHRoZSBjb2xsZWN0aW9uIChhcyBkZWZpbmVkIGJ5IGEgbGF5ZXIncyBsYXllci5jb25mIGZpbGUpIGNvbnRhaW5pbmcgdGhlIHNwZWNpZmllZCBmaWxlIiIiCisgICAgY29sbGVjdGlvbnMgPSAoZC5nZXRWYXIoJ0JCRklMRV9DT0xMRUNUSU9OUycsIFRydWUpIG9yICcnKS5zcGxpdCgpCisgICAgY29sbGVjdGlvbl9yZXMgPSB7fQorICAgIGZvciBjb2xsZWN0aW9uIGluIGNvbGxlY3Rpb25zOgorICAgICAgICBjb2xsZWN0aW9uX3Jlc1tjb2xsZWN0aW9uXSA9IGQuZ2V0VmFyKCdCQkZJTEVfUEFUVEVSTl8lcycgJSBjb2xsZWN0aW9uLCBUcnVlKSBvciAnJworCisgICAgZGVmIHBhdGhfdG9fbGF5ZXIocGF0aCk6CisgICAgICAgICMgVXNlIGxvbmdlc3QgcGF0aCBzbyB3ZSBoYW5kbGUgbmVzdGVkIGxheWVycworICAgICAgICBtYXRjaGxlbiA9IDAKKyAgICAgICAgbWF0Y2ggPSBOb25lCisgICAgICAgIGZvciBjb2xsZWN0aW9uLCByZWdleCBpbiBjb2xsZWN0aW9uX3Jlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGxlbihyZWdleCkgPiBtYXRjaGxlbiBhbmQgcmUubWF0Y2gocmVnZXgsIHBhdGgpOgorICAgICAgICAgICAgICAgIG1hdGNobGVuID0gbGVuKHJlZ2V4KQorICAgICAgICAgICAgICAgIG1hdGNoID0gY29sbGVjdGlvbgorICAgICAgICByZXR1cm4gbWF0Y2gKKworICAgIHJlc3VsdCA9IE5vbmUKKyAgICBiYmZpbGVzID0gKGQuZ2V0VmFyKCdCQkZJTEVTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkKKyAgICBiYmZpbGVzbWF0Y2ggPSBGYWxzZQorICAgIGZvciBiYmZpbGVzZW50cnkgaW4gYmJmaWxlczoKKyAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoKGZpbGVuYW1lLCBiYmZpbGVzZW50cnkpOgorICAgICAgICAgICAgYmJmaWxlc21hdGNoID0gVHJ1ZQorICAgICAgICAgICAgcmVzdWx0ID0gcGF0aF90b19sYXllcihiYmZpbGVzZW50cnkpCisKKyAgICBpZiBub3QgYmJmaWxlc21hdGNoOgorICAgICAgICAjIFByb2JhYmx5IGEgYmJjbGFzcworICAgICAgICByZXN1bHQgPSBwYXRoX3RvX2xheWVyKGZpbGVuYW1lKQorCisgICAgcmV0dXJuIHJlc3VsdAorCisKKyMgQ29uc3RhbnQgdGFrZW4gZnJvbSBodHRwOi8vbGludXguZGllLm5ldC9pbmNsdWRlL2xpbnV4L3ByY3RsLmgKK1BSX1NFVF9QREVBVEhTSUcgPSAxCisKK2NsYXNzIFByQ3RsRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2RlZiBzaWduYWxfb25fcGFyZW50X2V4aXQoc2lnbmFtZSk6CisgICAgIiIiCisgICAgVHJpZ2dlciBzaWduYW1lIHRvIGJlIHNlbnQgd2hlbiB0aGUgcGFyZW50IHByb2Nlc3MgZGllcworICAgICIiIgorICAgIHNpZ251bSA9IGdldGF0dHIoc2lnbmFsLCBzaWduYW1lKQorICAgICMgaHR0cDovL2xpbnV4LmRpZS5uZXQvbWFuLzIvcHJjdGwKKyAgICByZXN1bHQgPSBjZGxsWydsaWJjLnNvLjYnXS5wcmN0bChQUl9TRVRfUERFQVRIU0lHLCBzaWdudW0pCisgICAgaWYgcmVzdWx0ICE9IDA6CisgICAgICAgIHJhaXNlIFByQ3RsRXJyb3IoJ3ByY3RsIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJXMnICUgcmVzdWx0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvQVVUSE9SUy50eHQgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9BVVRIT1JTLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWM4ZmNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvQVVUSE9SUy50eHQKQEAgLTAsMCArMSw0MyBAQAorQmVob2xkLCBtb3J0YWwsIHRoZSBvcmlnaW5zIG9mIEJlYXV0aWZ1bCBTb3VwLi4uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTGVvbmFyZCBSaWNoYXJkc29uIGlzIHRoZSBwcmltYXJ5IHByb2dyYW1tZXIuCisKK0Fhcm9uIERlVm9yZSBpcyBhd2Vzb21lLgorCitNYXJrIFBpbGdyaW0gcHJvdmlkZWQgdGhlIGVuY29kaW5nIGRldGVjdGlvbiBjb2RlIHRoYXQgZm9ybXMgdGhlIGJhc2UKK29mIFVuaWNvZGVEYW1taXQuCisKK1Rob21hcyBLbHV5dmVyIGFuZCBFemlvIE1lbG90dGkgZmluaXNoZWQgdGhlIHdvcmsgb2YgZ2V0dGluZyBCZWF1dGlmdWwKK1NvdXAgNCB3b3JraW5nIHVuZGVyIFB5dGhvbiAzLgorCitTaW1vbiBXaWxsaXNvbiB3cm90ZSBzb3Vwc2VsZWN0LCB3aGljaCB3YXMgdXNlZCB0byBtYWtlIEJlYXV0aWZ1bCBTb3VwCitzdXBwb3J0IENTUyBzZWxlY3RvcnMuCisKK1NhbSBSdWJ5IGhlbHBlZCB3aXRoIGEgbG90IG9mIGVkZ2UgY2FzZXMuCisKK0pvbmF0aGFuIEVsbGlzIHdhcyBhd2FyZGVkIHRoZSBwcmVzdGlnb3VzIEJlYXUgUG90YWdlIEQnT3IgZm9yIGhpcword29yayBpbiBzb2x2aW5nIHRoZSBuZXN0YWJsZSB0YWdzIGNvbnVuZHJ1bS4KKworQW4gaW5jb21wbGV0ZSBsaXN0IG9mIHBlb3BsZSBoYXZlIGNvbnRyaWJ1dGVkIHBhdGNoZXMgdG8gQmVhdXRpZnVsCitTb3VwOgorCisgSXN0dmFuIEFsYmVydCwgQW5kcmV3IExpbiwgQW50aG9ueSBCYXh0ZXIsIEFuZHJldyBCb3lrbywgVG9ueSBDaGFuZywKKyBaZXBoeXIgRmFuZywgRnV6enksIFJvbWFuIEdhdWZtYW4sIFlvbmkgR2lsYWQsIFJpY2hpZSBIaW5kbGUsIFBldGVyaXMKKyBLcnVtaW5zLCBLZW50IEpvaG5zb24sIEJlbiBMYXN0LCBSb2JlcnQgTGVmdHdpY2gsIFN0YWZmYW4gTWFsbWdyZW4sCisgS3NlbmlhIE1hcmFzYW5vdmEsIEpQIE1vaW5zLCBBZGFtIE1vbnNlbiwgSm9obiBOYWdsZSwgIkpvbiIsIEVkCisgT3NraWV3aWN6LCBHcmVnIFBoaWxsaXBzLCBHaWxlcyBSYWRmb3JkLCBBcnRodXIgUnVkb2xwaCwgTWFya28KKyBTYW1hc3R1ciwgSm91bmkgU2VwcORuZW4sIEFsZXhhbmRlciBTY2htb2xjaywgQW5keSBUaGV5ZXJzLCBHbHluCisgV2Vic3RlciwgUGF1bCBXcmlnaHQsIERhbm55IFlvbworCitBbiBpbmNvbXBsZXRlIGxpc3Qgb2YgcGVvcGxlIHdobyBtYWRlIHN1Z2dlc3Rpb25zIG9yIGZvdW5kIGJ1Z3Mgb3IKK2ZvdW5kIHdheXMgdG8gYnJlYWsgQmVhdXRpZnVsIFNvdXA6CisKKyBIYW5ubyBC9mNrLCBNYXR0ZW8gQmVydGluaSwgQ2hyaXMgQ3VydmV5LCBTaW1vbiBDdXNhY2ssIEJydWNlIEVja2VsLAorIE1hdHQgRXJuc3QsIE1pY2hhZWwgRm9vcmQsIFRvbSBIYXJyaXMsIEJpbGwgZGUgaE9yYSwgRG9uYWxkIEhvd2VzLAorIE1hdHQgUGF0dGVyc29uLCBTY290dCBSb2JlcnRzLCBTdGV2ZSBTdHJhc3NtYW5uLCBNaWtlIFdpbGxpYW1zLAorIHdhcmNoaWxkIGF0IHJlZGhvIGRvdCBjb20sIFNhbWkgS3Vpc21hLCBDYXJsb3MgUm9jaGEsIEJvYiBIdXRjaGlzb24sCisgSm9yZW4gTWMsIE1pY2hhbCBNaWd1cnNraSwgSm9obiBLbGV2ZW4sIFRpbSBIZWFuZXksIFRyaXBwIExpbGxleSwgRWQKKyBTdW1tZXJzLCBEZW5uaXMgU3V0Y2gsIENocmlzIFNtaXRoLCBBYXJvbiBTd2VlcF5XIFN3YXJ0eiwgU3R1YXJ0CisgVHVybmVyLCBHcmVnIEVkd2FyZHMsIEtldmluIEogS2FsdXBzb24sIE5pa29zIEtvdXJlbWVub3MsIEFydHVyIGRlCisgU291c2EgUm9jaGEsIFlpY2h1biBXZWksIFBlciBWb2duc2VuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9DT1BZSU5HLnR4dCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L0NPUFlJTkcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NjhkMTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9DT1BZSU5HLnR4dApAQCAtMCwwICsxLDI2IEBACitCZWF1dGlmdWwgU291cCBpcyBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6CisKKyBDb3B5cmlnaHQgKGMpIDIwMDQtMjAxMiBMZW9uYXJkIFJpY2hhcmRzb24KKworIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorIFNPRlRXQVJFLCBEQU1NSVQuCisKK0JlYXV0aWZ1bCBTb3VwIGluY29ycG9yYXRlcyBjb2RlIGZyb20gdGhlIGh0bWw1bGliIGxpYnJhcnksIHdoaWNoIGlzCithbHNvIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L05FV1MudHh0IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvTkVXUy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhhNjBhMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L05FV1MudHh0CkBAIC0wLDAgKzEsMTA2NiBAQAorPSA0LjMuMiAoMjAxMzEwMDIpID0KKworKiBGaXhlZCBhIGJ1ZyBpbiB3aGljaCBzaG9ydCBVbmljb2RlIGlucHV0IHdhcyBpbXByb3Blcmx5IGVuY29kZWQgdG8KKyAgQVNDSUkgd2hlbiBjaGVja2luZyB3aGV0aGVyIG9yIG5vdCBpdCB3YXMgdGhlIG5hbWUgb2YgYSBmaWxlIG9uCisgIGRpc2suIFtidWc9MTIyNzAxNl0KKworKiBGaXhlZCBhIGNyYXNoIHdoZW4gYSBzaG9ydCBpbnB1dCBjb250YWlucyBkYXRhIG5vdCB2YWxpZCBpbgorICBmaWxlbmFtZXMuIFtidWc9MTIzMjYwNF0KKworKiBGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZCBVbmljb2RlIGRhdGEgcHV0IGludG8gVW5pY29kZURhbW1pdCB0bworICByZXR1cm4gTm9uZSBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBkYXRhLiBbYnVnPTEyMTQ5ODNdCisKKyogQ29tYmluZWQgdHdvIHRlc3RzIHRvIHN0b3AgYSBzcHVyaW91cyB0ZXN0IGZhaWx1cmUgd2hlbiB0ZXN0cyBhcmUKKyAgcnVuIGJ5IG5vc2V0ZXN0cy4gW2J1Zz0xMjEyNDQ1XQorCis9IDQuMy4xICgyMDEzMDgxNSkgPQorCisqIEZpeGVkIHlldCBhbm90aGVyIHByb2JsZW0gd2l0aCB0aGUgaHRtbDVsaWIgdHJlZSBidWlsZGVyLCBjYXVzZWQgYnkKKyAgaHRtbDVsaWIncyB0ZW5kZW5jeSB0byByZWFycmFuZ2UgdGhlIHRyZWUgZHVyaW5nCisgIHBhcnNpbmcuIFtidWc9MTE4OTI2N10KKworKiBGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZCB0aGUgb3B0aW1pemVkIHZlcnNpb24gb2YgZmluZF9hbGwoKSB0bworICByZXR1cm4gbm90aGluZy4gW2J1Zz0xMjEyNjU1XQorCis9IDQuMy4wICgyMDEzMDgxMikgPQorCisqIEluc3RlYWQgb2YgY29udmVydGluZyBpbmNvbWluZyBkYXRhIHRvIFVuaWNvZGUgYW5kIGZlZWRpbmcgaXQgdG8gdGhlCisgIGx4bWwgdHJlZSBidWlsZGVyIGluIGNodW5rcywgQmVhdXRpZnVsIFNvdXAgbm93IG1ha2VzIHN1Y2Nlc3NpdmUKKyAgZ3Vlc3NlcyBhdCB0aGUgZW5jb2Rpbmcgb2YgdGhlIGluY29taW5nIGRhdGEsIGFuZCB0ZWxscyBseG1sIHRvCisgIHBhcnNlIHRoZSBkYXRhIGFzIHRoYXQgZW5jb2RpbmcuIEdpdmluZyBseG1sIG1vcmUgY29udHJvbCBvdmVyIHRoZQorICBwYXJzaW5nIHByb2Nlc3MgaW1wcm92ZXMgcGVyZm9ybWFuY2UgYW5kIGF2b2lkcyBhIG51bWJlciBvZiBidWdzIGFuZAorICBpc3N1ZXMgd2l0aCB0aGUgbHhtbCBwYXJzZXIgd2hpY2ggaGFkIHByZXZpb3VzbHkgcmVxdWlyZWQgZWxhYm9yYXRlCisgIHdvcmthcm91bmRzOgorCisgIC0gQW4gaXNzdWUgaW4gd2hpY2ggbHhtbCByZWZ1c2VzIHRvIHBhcnNlIFVuaWNvZGUgc3RyaW5ncyBvbiBzb21lCisgICAgc3lzdGVtcy4gW2J1Zz0xMTgwNTI3XQorCisgIC0gQSByZXR1cm5pbmcgYnVnIHRoYXQgdHJ1bmNhdGVkIGRvY3VtZW50cyBsb25nZXIgdGhhbiBhICh2ZXJ5CisgICAgc21hbGwpIHNpemUuIFtidWc9OTYzODgwXQorCisgIC0gQSByZXR1cm5pbmcgYnVnIGluIHdoaWNoIGV4dHJhIHNwYWNlcyB3ZXJlIGFkZGVkIHRvIGEgZG9jdW1lbnQgaWYKKyAgICB0aGUgZG9jdW1lbnQgZGVmaW5lZCBhIGNoYXJzZXQgb3RoZXIgdGhhbiBVVEYtOC4gW2J1Zz05NzI0NjZdCisKKyAgVGhpcyByZXF1aXJlZCBhIG1ham9yIG92ZXJoYXVsIG9mIHRoZSB0cmVlIGJ1aWxkZXIgYXJjaGl0ZWN0dXJlLiBJZgorICB5b3Ugd3JvdGUgeW91ciBvd24gdHJlZSBidWlsZGVyIGFuZCBkaWRuJ3QgdGVsbCBtZSwgeW91J2xsIG5lZWQgdG8KKyAgbW9kaWZ5IHlvdXIgcHJlcGFyZV9tYXJrdXAoKSBtZXRob2QuCisKKyogVGhlIFVuaWNvZGVEYW1taXQgY29kZSB0aGF0IG1ha2VzIGd1ZXNzZXMgYXQgZW5jb2RpbmdzIGhhcyBiZWVuCisgIHNwbGl0IGludG8gaXRzIG93biBjbGFzcywgRW5jb2RpbmdEZXRlY3Rvci4gQSBsb3Qgb2YgYXBwYXJlbnRseQorICByZWR1bmRhbnQgY29kZSBoYXMgYmVlbiByZW1vdmVkIGZyb20gVW5pY29kZSwgRGFtbWl0LCBhbmQgc29tZQorICB1bmRvY3VtZW50ZWQgZmVhdHVyZXMgaGF2ZSBhbHNvIGJlZW4gcmVtb3ZlZC4KKworKiBCZWF1dGlmdWwgU291cCB3aWxsIGlzc3VlIGEgd2FybmluZyBpZiBpbnN0ZWFkIG9mIG1hcmt1cCB5b3UgcGFzcyBpdAorICBhIFVSTCBvciB0aGUgbmFtZSBvZiBhIGZpbGUgb24gZGlzayAoYSBjb21tb24gYmVnaW5uZXIncyBtaXN0YWtlKS4KKworKiBBIG51bWJlciBvZiBvcHRpbWl6YXRpb25zIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBseG1sIHRyZWUKKyAgYnVpbGRlciBieSBhYm91dCAzMyUsIHRoZSBodG1sLnBhcnNlciB0cmVlIGJ1aWxkZXIgYnkgYWJvdXQgMjAlLCBhbmQKKyAgdGhlIGh0bWw1bGliIHRyZWUgYnVpbGRlciBieSBhYm91dCAxNSUuCisKKyogQWxsIGZpbmRfYWxsIGNhbGxzIHNob3VsZCBub3cgcmV0dXJuIGEgUmVzdWx0U2V0IG9iamVjdC4gUGF0Y2ggYnkKKyAgQWFyb24gRGVWb3JlLiBbYnVnPTExOTQwMzRdCisKKz0gNC4yLjEgKDIwMTMwNTMxKSA9CisKKyogVGhlIGRlZmF1bHQgWE1MIGZvcm1hdHRlciB3aWxsIG5vdyByZXBsYWNlIGFtcGVyc2FuZHMgZXZlbiBpZiB0aGV5CisgIGFwcGVhciB0byBiZSBwYXJ0IG9mIGVudGl0aWVzLiBUaGF0IGlzLCAiJmx0OyIgd2lsbCBiZWNvbWUKKyAgIiZhbXA7bHQ7Ii4gVGhlIG9sZCBjb2RlIHdhcyBsZWZ0IG92ZXIgZnJvbSBCZWF1dGlmdWwgU291cCAzLCB3aGljaAorICBkaWRuJ3QgYWx3YXlzIHR1cm4gZW50aXRpZXMgaW50byBVbmljb2RlIGNoYXJhY3RlcnMuCisKKyAgSWYgeW91IHJlYWxseSB3YW50IHRoZSBvbGQgYmVoYXZpb3IgKG1heWJlIGJlY2F1c2UgeW91IGFkZCBuZXcKKyAgc3RyaW5ncyB0byB0aGUgdHJlZSwgdGhvc2Ugc3RyaW5ncyBpbmNsdWRlIGVudGl0aWVzLCBhbmQgeW91IHdhbnQKKyAgdGhlIGZvcm1hdHRlciB0byBsZWF2ZSB0aGVtIGFsb25lIG9uIG91dHB1dCksIGl0IGNhbiBiZSBmb3VuZCBpbgorICBFbnRpdHlTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZV94bWxfY29udGFpbmluZ19lbnRpdGllcygpLiBbYnVnPTExODIxODNdCisKKyogR2F2ZSBuZXdfc3RyaW5nKCkgdGhlIGFiaWxpdHkgdG8gY3JlYXRlIHN1YmNsYXNzZXMgb2YKKyAgTmF2aWdhYmxlU3RyaW5nLiBbYnVnPTExODE5ODZdCisKKyogRml4ZWQgYW5vdGhlciBidWcgYnkgd2hpY2ggdGhlIGh0bWw1bGliIHRyZWUgYnVpbGRlciBjb3VsZCBjcmVhdGUgYQorICBkaXNjb25uZWN0ZWQgdHJlZS4gW2J1Zz0xMTgyMDg5XQorCisqIFRoZSAucHJldmlvdXNfZWxlbWVudCBvZiBhIEJlYXV0aWZ1bFNvdXAgb2JqZWN0IGlzIG5vdyBhbHdheXMgTm9uZSwKKyAgbm90IHRoZSBsYXN0IGVsZW1lbnQgdG8gYmUgcGFyc2VkLiBbYnVnPTExODIwODldCisKKyogRml4ZWQgdGVzdCBmYWlsdXJlcyB3aGVuIGx4bWwgaXMgbm90IGluc3RhbGxlZC4gW2J1Zz0xMTgxNTg5XQorCisqIGh0bWw1bGliIG5vdyBzdXBwb3J0cyBQeXRob24gMy4gRml4ZWQgc29tZSBQeXRob24gMi1zcGVjaWZpYworICBjb2RlIGluIHRoZSBodG1sNWxpYiB0ZXN0IHN1aXRlLiBbYnVnPTExODE2MjRdCisKKyogVGhlIGh0bWwucGFyc2VyIHRyZWVidWlsZGVyIGNhbiBub3cgaGFuZGxlIG51bWVyaWMgYXR0cmlidXRlcyBpbgorICB0ZXh0IHdoZW4gdGhlIGhleGlkZWNpbWFsIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBzdGFydHMgd2l0aCBhCisgIGNhcGl0YWwgWC4gUGF0Y2ggYnkgVGltIFNoaXJsZXkuIFtidWc9MTE4NjI0Ml0KKworPSA0LjIuMCAoMjAxMzA1MTQpID0KKworKiBUaGUgVGFnLnNlbGVjdCgpIG1ldGhvZCBub3cgc3VwcG9ydHMgYSBtdWNoIHdpZGVyIHZhcmlldHkgb2YgQ1NTCisgIHNlbGVjdG9ycy4KKworIC0gQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGFkamFjZW50IHNpYmxpbmcgY29tYmluYXRvciAoKykgYW5kIHRoZQorICAgZ2VuZXJhbCBzaWJsaW5nIGNvbWJpbmF0b3IgKH4pLiBUZXN0cyBieSAibGlxdWlkZXIiLiBbYnVnPTEwODIxNDRdCisKKyAtIFRoZSBjb21iaW5hdG9ycyAoPiwgKywgYW5kIH4pIGNhbiBub3cgY29tYmluZSB3aXRoIGFueSBzdXBwb3J0ZWQKKyAgIHNlbGVjdG9yLCBub3QganVzdCBvbmUgdGhhdCBzZWxlY3RzIGJhc2VkIG9uIHRhZyBuYW1lLgorCisgLSBBZGRlZCBsaW1pdGVkIHN1cHBvcnQgZm9yIHRoZSAibnRoLW9mLXR5cGUiIHBzZXVkby1jbGFzcy4gQ29kZQorICAgYnkgU3ZlbiBTbG9vdHdlZy4gW2J1Zz0xMTA5OTUyXQorCisqIFRoZSBCZWF1dGlmdWxTb3VwIGNsYXNzIGlzIG5vdyBhbGlhc2VkIHRvICJfcyIgYW5kICJfc291cCIsIG1ha2luZworICBpdCBxdWlja2VyIHRvIHR5cGUgdGhlIGltcG9ydCBzdGF0ZW1lbnQgaW4gYW4gaW50ZXJhY3RpdmUgc2Vzc2lvbjoKKworICBmcm9tIGJzNCBpbXBvcnQgX3MKKyAgIG9yCisgIGZyb20gYnM0IGltcG9ydCBfc291cAorCisgIFRoZSBhbGlhcyBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUsIHNvIGRvbid0IHVzZSB0aGlzIGluIGNvZGUgeW91J3JlCisgIGdvaW5nIHRvIHJ1biBtb3JlIHRoYW4gb25jZS4KKworKiBBZGRlZCB0aGUgJ2RpYWdub3NlJyBzdWJtb2R1bGUsIHdoaWNoIGluY2x1ZGVzIHNldmVyYWwgdXNlZnVsCisgIGZ1bmN0aW9ucyBmb3IgcmVwb3J0aW5nIHByb2JsZW1zIGFuZCBkb2luZyB0ZWNoIHN1cHBvcnQuCisKKyAgLSBkaWFnbm9zZShkYXRhKSB0cmllcyB0aGUgZ2l2ZW4gbWFya3VwIG9uIGV2ZXJ5IGluc3RhbGxlZCBwYXJzZXIsCisgICAgcmVwb3J0aW5nIGV4Y2VwdGlvbnMgYW5kIGRpc3BsYXlpbmcgc3VjY2Vzc2VzLiBJZiBhIHBhcnNlciBpcyBub3QKKyAgICBpbnN0YWxsZWQsIGRpYWdub3NlKCkgbWVudGlvbnMgdGhpcyBmYWN0LgorCisgIC0gbHhtbF90cmFjZShkYXRhLCBodG1sPVRydWUpIHJ1bnMgdGhlIGdpdmVuIG1hcmt1cCB0aHJvdWdoIGx4bWwncworICAgIFhNTCBwYXJzZXIgb3IgSFRNTCBwYXJzZXIsIGFuZCBwcmludHMgb3V0IHRoZSBwYXJzZXIgZXZlbnRzIGFzCisgICAgdGhleSBoYXBwZW4uIFRoaXMgaGVscHMgeW91IHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgYSBnaXZlbgorICAgIHByb2JsZW0gb2NjdXJzIGluIGx4bWwgY29kZSBvciBCZWF1dGlmdWwgU291cCBjb2RlLgorCisgIC0gaHRtbHBhcnNlcl90cmFjZShkYXRhKSBpcyB0aGUgc2FtZSB0aGluZywgYnV0IGZvciBQeXRob24ncworICAgIGJ1aWx0LWluIEhUTUxQYXJzZXIgY2xhc3MuCisKKyogSW4gYW4gSFRNTCBkb2N1bWVudCwgdGhlIGNvbnRlbnRzIG9mIGEgPHNjcmlwdD4gb3IgPHN0eWxlPiB0YWcgd2lsbAorICBubyBsb25nZXIgdW5kZXJnbyBlbnRpdHkgc3Vic3RpdHV0aW9uIGJ5IGRlZmF1bHQuIFhNTCBkb2N1bWVudHMgd29yaworICB0aGUgc2FtZSB3YXkgdGhleSBkaWQgYmVmb3JlLiBbYnVnPTEwODU5NTNdCisKKyogTWV0aG9kcyBsaWtlIGdldF90ZXh0KCkgYW5kIHByb3BlcnRpZXMgbGlrZSAuc3RyaW5ncyBub3cgb25seSBnaXZlCisgIHlvdSBzdHJpbmdzIHRoYXQgYXJlIHZpc2libGUgaW4gdGhlIGRvY3VtZW50LS1ubyBjb21tZW50cyBvcgorICBwcm9jZXNzaW5nIGNvbW1hbmRzLiBbYnVnPTEwNTAxNjRdCisKKyogVGhlIHByZXR0aWZ5KCkgbWV0aG9kIG5vdyBsZWF2ZXMgdGhlIGNvbnRlbnRzIG9mIDxwcmU+IHRhZ3MKKyAgYWxvbmUuIFtidWc9MTA5NTY1NF0KKworKiBGaXggYSBidWcgaW4gdGhlIGh0bWw1bGliIHRyZWVidWlsZGVyIHdoaWNoIHNvbWV0aW1lcyBjcmVhdGVkCisgIGRpc2Nvbm5lY3RlZCB0cmVlcy4gW2J1Zz0xMDM5NTI3XQorCisqIEZpeCBhIGJ1ZyBpbiB0aGUgbHhtbCB0cmVlYnVpbGRlciB3aGljaCBjcmFzaGVkIHdoZW4gYSB0YWcgaW5jbHVkZWQKKyAgYW4gYXR0cmlidXRlIGZyb20gdGhlIHByZWRlZmluZWQgInhtbDoiIG5hbWVzcGFjZS4gW2J1Zz0xMDY1NjE3XQorCisqIEZpeCBhIGJ1ZyBieSB3aGljaCBrZXl3b3JkIGFyZ3VtZW50cyB0byBmaW5kX3BhcmVudCgpIHdlcmUgbm90CisgIGJlaW5nIHBhc3NlZCBvbi4gW2J1Zz0xMTI2NzM0XQorCisqIFN0b3AgYSBjcmFzaCB3aGVuIHVud2lzZWx5IG1lc3Npbmcgd2l0aCBhIHRhZyB0aGF0J3MgYmVlbgorICBkZWNvbXBvc2VkLiBbYnVnPTEwOTc2OTldCisKKyogTm93IHRoYXQgbHhtbCdzIHNlZ2ZhdWx0IG9uIGludmFsaWQgZG9jdHlwZSBoYXMgYmVlbiBmaXhlZCwgZml4ZWQgYQorICBjb3JyZXNwb25kaW5nIHByb2JsZW0gb24gdGhlIEJlYXV0aWZ1bCBTb3VwIGVuZCB0aGF0IHdhcyBwcmV2aW91c2x5CisgIGludmlzaWJsZS4gW2J1Zz05ODQ5MzZdCisKKyogRml4ZWQgYW4gZXhjZXB0aW9uIHdoZW4gYW4gb3ZlcnNwZWNpZmllZCBDU1Mgc2VsZWN0b3IgZGlkbid0IG1hdGNoCisgIGFueXRoaW5nLiBDb2RlIGJ5IFN0ZWZhYW4gTGlwcGVucy4gW2J1Zz0xMTY4MTY3XQorCis9IDQuMS4zICgyMDEyMDgyMCkgPQorCisqIFNraXBwZWQgYSB0ZXN0IHVuZGVyIFB5dGhvbiAyLjYgYW5kIFB5dGhvbiAzLjEgdG8gYXZvaWQgYSBzcHVyaW91cworICB0ZXN0IGZhaWx1cmUgY2F1c2VkIGJ5IHRoZSBsb3VzeSBIVE1MUGFyc2VyIGluIHRob3NlCisgIHZlcnNpb25zLiBbYnVnPTEwMzg1MDNdCisKKyogUmFpc2UgYSBtb3JlIHNwZWNpZmljIGVycm9yIChGZWF0dXJlTm90Rm91bmQpIHdoZW4gYSByZXF1ZXN0ZWQKKyAgcGFyc2VyIG9yIHBhcnNlciBmZWF0dXJlIGlzIG5vdCBpbnN0YWxsZWQuIFJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgaW5zdGVhZCBvZiBWYWx1ZUVycm9yIHdoZW4gdGhlIHVzZXIgY2FsbHMgaW5zZXJ0X2JlZm9yZSgpIG9yCisgIGluc2VydF9hZnRlcigpIG9uIHRoZSBCZWF1dGlmdWxTb3VwIG9iamVjdCBpdHNlbGYuIFBhdGNoIGJ5IEFhcm9uCisgIERldm9yZS4gW2J1Zz0xMDM4MzAxXQorCis9IDQuMS4yICgyMDEyMDgxNykgPQorCisqIEFzIHBlciBQRVAtOCwgYWxsb3cgc2VhcmNoaW5nIGJ5IENTUyBjbGFzcyB1c2luZyB0aGUgJ2NsYXNzXycKKyAga2V5d29yZCBhcmd1bWVudC4gW2J1Zz0xMDM3NjI0XQorCisqIERpc3BsYXkgbmFtZXNwYWNlIHByZWZpeGVzIGZvciBuYW1lc3BhY2VkIGF0dHJpYnV0ZSBuYW1lcywgaW5zdGVhZCBvZgorICB0aGUgZnVsbHktcXVhbGlmaWVkIG5hbWVzIGdpdmVuIGJ5IHRoZSBseG1sIHBhcnNlci4gW2J1Zz0xMDM3NTk3XQorCisqIEZpeGVkIGEgY3Jhc2ggb24gZW5jb2Rpbmcgd2hlbiBhbiBhdHRyaWJ1dGUgbmFtZSBjb250YWluZWQKKyAgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCisKKyogV2hlbiBzbmlmZmluZyBlbmNvZGluZ3MsIGlmIHRoZSBjY2hhcmRldCBsaWJyYXJ5IGlzIGluc3RhbGxlZCwKKyAgQmVhdXRpZnVsIFNvdXAgdXNlcyBpdCBpbnN0ZWFkIG9mIGNoYXJkZXQuIGNjaGFyZGV0IGlzIG11Y2gKKyAgZmFzdGVyLiBbYnVnPTEwMjA3NDhdCisKKyogVXNlIGxvZ2dpbmcud2FybmluZygpIGluc3RlYWQgb2Ygd2FybmluZy53YXJuKCkgdG8gbm90aWZ5IHRoZSB1c2VyCisgIHRoYXQgY2hhcmFjdGVycyB3ZXJlIHJlcGxhY2VkIHdpdGggUkVQTEFDRU1FTlQKKyAgQ0hBUkFDVEVSLiBbYnVnPTEwMTM4NjJdCisKKz0gNC4xLjEgKDIwMTIwNzAzKSA9CisKKyogRml4ZWQgYW4gaHRtbDVsaWIgdHJlZSBidWlsZGVyIGNyYXNoIHdoaWNoIGhhcHBlbmVkIHdoZW4gaHRtbDVsaWIKKyAgbW92ZWQgYSB0YWcgd2l0aCBhIG11bHRpdmFsdWVkIGF0dHJpYnV0ZSBmcm9tIG9uZSBwYXJ0IG9mIHRoZSB0cmVlCisgIHRvIGFub3RoZXIuIFtidWc9MTAxOTYwM10KKworKiBDb3JyZWN0bHkgZGlzcGxheSBjbG9zaW5nIHRhZ3Mgd2l0aCBhbiBYTUwgbmFtZXNwYWNlIGRlY2xhcmVkLiBQYXRjaAorICBieSBBbmRyZWFzIEtvc3R5cmthLiBbYnVnPTEwMTk2MzVdCisKKyogRml4ZWQgYSB0eXBvIHRoYXQgbWFkZSBwYXJzaW5nIHNpZ25pZmljYW50bHkgc2xvd2VyIHRoYW4gaXQgc2hvdWxkCisgIGhhdmUgYmVlbiwgYW5kIGFsc28gd2FpdGVkIHRvbyBsb25nIHRvIGNsb3NlIHRhZ3Mgd2l0aCBYTUwKKyAgbmFtZXNwYWNlcy4gW2J1Zz0xMDIwMjY4XQorCisqIGdldF90ZXh0KCkgbm93IHJldHVybnMgYW4gZW1wdHkgVW5pY29kZSBzdHJpbmcgaWYgdGhlcmUgaXMgbm8gdGV4dCwKKyAgcmF0aGVyIHRoYW4gYW4gZW1wdHkgYnl0ZXN0cmluZy4gW2J1Zz0xMDIwMzg3XQorCis9IDQuMS4wICgyMDEyMDUyOSkgPQorCisqIEFkZGVkIGV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciBmaXhpbmcgV2luZG93cy0xMjUyIGNoYXJhY3RlcnMKKyAgZW1iZWRkZWQgaW4gVVRGLTggZG9jdW1lbnRzLiAoVW5pY29kZURhbW1pdC5kZXR3aW5nbGUoKSkKKworKiBGaXhlZCB0aGUgaGFuZGxpbmcgb2YgJnF1b3Q7IHdpdGggdGhlIGJ1aWx0LWluIHBhcnNlci4gW2J1Zz05OTM4NzFdCisKKyogQ29tbWVudHMsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLCBkb2N1bWVudCB0eXBlIGRlY2xhcmF0aW9ucywgYW5kCisgIG1hcmt1cCBkZWNsYXJhdGlvbnMgYXJlIG5vdyB0cmVhdGVkIGFzIHByZWZvcm1hdHRlZCBzdHJpbmdzLCB0aGUgd2F5CisgIENEYXRhIGJsb2NrcyBhcmUuIFtidWc9MTAwMTAyNV0KKworKiBGaXhlZCBhIGJ1ZyB3aXRoIHRoZSBseG1sIHRyZWVidWlsZGVyIHRoYXQgcHJldmVudGVkIHRoZSB1c2VyIGZyb20KKyAgYWRkaW5nIGF0dHJpYnV0ZXMgdG8gYSB0YWcgdGhhdCBkaWRuJ3Qgb3JpZ2luYWxseSBoYXZlCisgIGF0dHJpYnV0ZXMuIFtidWc9MTAwMjM3OF0gVGhhbmtzIHRvIE9saXZlciBCZWF0dGllIGZvciB0aGUgcGF0Y2guCisKKyogRml4ZWQgc29tZSBlZGdlLWNhc2UgYnVncyBoYXZpbmcgdG8gZG8gd2l0aCBpbnNlcnRpbmcgYW4gZWxlbWVudAorICBpbnRvIGEgdGFnIGl0J3MgYWxyZWFkeSBpbnNpZGUsIGFuZCByZXBsYWNpbmcgb25lIG9mIGEgdGFnJ3MKKyAgY2hpbGRyZW4gd2l0aCBhbm90aGVyLiBbYnVnPTk5NzUyOV0KKworKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBzZWFyY2ggZm9yIGF0dHJpYnV0ZSB2YWx1ZXMgc3BlY2lmaWVkIGluIFVURi04LiBbYnVnPTEwMDM5NzRdCisKKyAgVGhpcyBjYXVzZWQgYSBtYWpvciByZWZhY3RvcmluZyBvZiB0aGUgc2VhcmNoIGNvZGUuIEFsbCB0aGUgdGVzdHMKKyAgcGFzcywgYnV0IGl0J3MgcG9zc2libGUgdGhhdCBzb21lIHNlYXJjaGVzIHdpbGwgYmVoYXZlIGRpZmZlcmVudGx5LgorCis9IDQuMC41ICgyMDEyMDQyNykgPQorCisqIEFkZGVkIGEgbmV3IG1ldGhvZCwgd3JhcCgpLCB3aGljaCB3cmFwcyBhbiBlbGVtZW50IGluIGEgdGFnLgorCisqIFJlbmFtZWQgcmVwbGFjZV93aXRoX2NoaWxkcmVuKCkgdG8gdW53cmFwKCksIHdoaWNoIGlzIGVhc2llciB0bworICB1bmRlcnN0YW5kIGFuZCBhbHNvIHRoZSBqUXVlcnkgbmFtZSBvZiB0aGUgZnVuY3Rpb24uCisKKyogTWFkZSBlbmNvZGluZyBzdWJzdGl0dXRpb24gaW4gPG1ldGE+IHRhZ3MgY29tcGxldGVseSB0cmFuc3BhcmVudCAobm8KKyAgbW9yZSAlU09VUC1FTkNPRElORyUpLgorCisqIEZpeGVkIGEgYnVnIGluIGRlY29kaW5nIGRhdGEgdGhhdCBjb250YWluZWQgYSBieXRlLW9yZGVyIG1hcmssIHN1Y2gKKyAgYXMgZGF0YSBlbmNvZGVkIGluIFVURi0xNkxFLiBbYnVnPTk4ODk4MF0KKworKiBGaXhlZCBhIGJ1ZyB0aGF0IG1hZGUgdGhlIEhUTUxQYXJzZXIgdHJlZWJ1aWxkZXIgZ2VuZXJhdGUgWE1MCisgIGRlZmluaXRpb25zIGVuZGluZyB3aXRoIHR3byBxdWVzdGlvbiBtYXJrcyBpbnN0ZWFkIG9mCisgIG9uZS4gW2J1Zz05ODQyNThdCisKKyogVXBvbiBkb2N1bWVudCBnZW5lcmF0aW9uLCBDRGF0YSBvYmplY3RzIGFyZSBubyBsb25nZXIgcnVuIHRocm91Z2gKKyAgdGhlIGZvcm1hdHRlci4gW2J1Zz05ODg5MDVdCisKKyogVGhlIHRlc3Qgc3VpdGUgbm93IHBhc3NlcyB3aGVuIGx4bWwgaXMgbm90IGluc3RhbGxlZCwgd2hldGhlciBvciBub3QKKyAgaHRtbDVsaWIgaXMgaW5zdGFsbGVkLiBbYnVnPTk4NzAwNF0KKworKiBQcmludCBhIHdhcm5pbmcgb24gSFRNTFBhcnNlRXJyb3JzIHRvIGxldCBwZW9wbGUga25vdyB0aGV5IHNob3VsZAorICBpbnN0YWxsIGEgYmV0dGVyIHBhcnNlciBsaWJyYXJ5LgorCis9IDQuMC40ICgyMDEyMDQxNikgPQorCisqIEZpeGVkIGEgYnVnIHRoYXQgc29tZXRpbWVzIGNyZWF0ZWQgZGlzY29ubmVjdGVkIHRyZWVzLgorCisqIEZpeGVkIGEgYnVnIHdpdGggdGhlIHN0cmluZyBzZXR0ZXIgdGhhdCBtb3ZlZCBhIHN0cmluZyBhcm91bmQgdGhlCisgIHRyZWUgaW5zdGVhZCBvZiBjb3B5aW5nIGl0LiBbYnVnPTk4MzA1MF0KKworKiBBdHRyaWJ1dGUgdmFsdWVzIGFyZSBub3cgcnVuIHRocm91Z2ggdGhlIHByb3ZpZGVkIG91dHB1dCBmb3JtYXR0ZXIuCisgIFByZXZpb3VzbHkgdGhleSB3ZXJlIGFsd2F5cyBydW4gdGhyb3VnaCB0aGUgJ21pbmltYWwnIGZvcm1hdHRlci4gSW4KKyAgdGhlIGZ1dHVyZSBJIG1heSBtYWtlIGl0IHBvc3NpYmxlIHRvIHNwZWNpZnkgZGlmZmVyZW50IGZvcm1hdHRlcnMKKyAgZm9yIGF0dHJpYnV0ZSB2YWx1ZXMgYW5kIHN0cmluZ3MsIGJ1dCBmb3Igbm93LCBjb25zaXN0ZW50IGJlaGF2aW9yCisgIGlzIGJldHRlciB0aGFuIGluY29uc2lzdGVudCBiZWhhdmlvci4gW2J1Zz05ODAyMzddCisKKyogQWRkZWQgdGhlIG1pc3NpbmcgcmVuZGVyQ29udGVudHMgbWV0aG9kIGZyb20gQmVhdXRpZnVsIFNvdXAgMy4gQWxzbworICBhZGRlZCBhbiBlbmNvZGVfY29udGVudHMoKSBtZXRob2QgdG8gZ28gYWxvbmcgd2l0aCBkZWNvZGVfY29udGVudHMoKS4KKworKiBHaXZlIGEgbW9yZSB1c2VmdWwgZXJyb3Igd2hlbiB0aGUgdXNlciB0cmllcyB0byBydW4gdGhlIFB5dGhvbiAyCisgIHZlcnNpb24gb2YgQlMgdW5kZXIgUHl0aG9uIDMuCisKKyogVW5pY29kZURhbW1pdCBjYW4gbm93IGNvbnZlcnQgTWljcm9zb2Z0IHNtYXJ0IHF1b3RlcyB0byBBU0NJSSB3aXRoCisgIFVuaWNvZGVEYW1taXQobWFya3VwLCBzbWFydF9xdW90ZXNfdG89ImFzY2lpIikuCisKKz0gNC4wLjMgKDIwMTIwNDAzKSA9CisKKyogRml4ZWQgYSB0eXBvIHRoYXQgY2F1c2VkIHNvbWUgdmVyc2lvbnMgb2YgUHl0aG9uIDMgdG8gY29udmVydCB0aGUKKyAgQmVhdXRpZnVsIFNvdXAgY29kZWJhc2UgaW5jb3JyZWN0bHkuCisKKyogR290IHJpZCBvZiB0aGUgNC4wLjIgd29ya2Fyb3VuZCBmb3IgSFRNTCBkb2N1bWVudHMtLWl0IHdhcworICB1bm5lY2Vzc2FyeSBhbmQgdGhlIHdvcmthcm91bmQgd2FzIHRyaWdnZXJpbmcgYSAocG9zc2libHkgZGlmZmVyZW50LAorICBidXQgcmVsYXRlZCkgYnVnIGluIGx4bWwuIFtidWc9OTcyNDY2XQorCis9IDQuMC4yICgyMDEyMDMyNikgPQorCisqIFdvcmtlZCBhcm91bmQgYSBwb3NzaWJsZSBidWcgaW4gbHhtbCB0aGF0IHByZXZlbnRzIG5vbi10aW55IFhNTAorICBkb2N1bWVudHMgZnJvbSBiZWluZyBwYXJzZWQuIFtidWc9OTYzODgwLCBidWc9OTYzOTM2XQorCisqIEZpeGVkIGEgYnVnIHdoZXJlIHNwZWNpZnlpbmcgYHRleHRgIHdoaWxlIGFsc28gc2VhcmNoaW5nIGZvciBhIHRhZworICBvbmx5IHdvcmtlZCBpZiBgdGV4dGAgd2FudGVkIGFuIGV4YWN0IHN0cmluZyBtYXRjaC4gW2J1Zz05NTU5NDJdCisKKz0gNC4wLjEgKDIwMTIwMzE0KSA9CisKKyogVGhpcyBpcyB0aGUgZmlyc3Qgb2ZmaWNpYWwgcmVsZWFzZSBvZiBCZWF1dGlmdWwgU291cCA0LiBUaGVyZSBpcyBubworICA0LjAuMCByZWxlYXNlLCB0byBlbGltaW5hdGUgYW55IHBvc3NpYmlsaXR5IHRoYXQgcGFja2FnaW5nIHNvZnR3YXJlCisgIG1pZ2h0IHRyZWF0ICI0LjAuMCIgYXMgYmVpbmcgYW4gZWFybGllciB2ZXJzaW9uIHRoYW4gIjQuMC4wYjEwIi4KKworKiBCcm91Z2h0IEJTIHVwIHRvIGRhdGUgd2l0aCB0aGUgbGF0ZXN0IHJlbGVhc2Ugb2Ygc291cHNlbGVjdCwgYWRkaW5nCisgIENTUyBzZWxlY3RvciBzdXBwb3J0IGZvciBkaXJlY3QgZGVzY2VuZGFudCBtYXRjaGVzIGFuZCBtdWx0aXBsZSBDU1MKKyAgY2xhc3MgbWF0Y2hlcy4KKworPSA0LjAuMGIxMCAoMjAxMjAzMDIpID0KKworKiBBZGRlZCBzdXBwb3J0IGZvciBzaW1wbGUgQ1NTIHNlbGVjdG9ycywgdGFrZW4gZnJvbSB0aGUgc291cHNlbGVjdCBwcm9qZWN0LgorCisqIEZpeGVkIGEgY3Jhc2ggd2hlbiB1c2luZyBodG1sNWxpYi4gW2J1Zz05NDMyNDZdCisKKyogSW4gSFRNTDUtc3R5bGUgPG1ldGEgY2hhcnNldD0iZm9vIj4gdGFncywgdGhlIHZhbHVlIG9mIHRoZSAiY2hhcnNldCIKKyAgYXR0cmlidXRlIGlzIG5vdyByZXBsYWNlZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBlbmNvZGluZyBvbgorICBvdXRwdXQuIFtidWc9OTQyNzE0XQorCisqIEZpeGVkIGEgYnVnIHRoYXQgY2F1c2VkIGNhbGxpbmcgYSB0YWcgdG8gc29tZXRpbWVzIGNhbGwgZmluZF9hbGwoKQorICB3aXRoIHRoZSB3cm9uZyBhcmd1bWVudHMuIFtidWc9OTQ0NDI2XQorCisqIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgYnJvdWdodCBiYWNrIHRoZSBCZWF1dGlmdWxTdG9uZVNvdXAKKyAgY2xhc3MgYXMgYSBkZXByZWNhdGVkIHdyYXBwZXIgYXJvdW5kIEJlYXV0aWZ1bFNvdXAuCisKKz0gNC4wLjBiOSAoMjAxMjAyMjgpID0KKworKiBGaXhlZCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIERPQ1RZUEVzIHRoYXQgaGF2ZSBib3RoIGEgcHVibGljCisgIElEIGFuZCBhIHN5c3RlbSBJRC4KKworKiBGaXhlZCB0aGUgZ2VuZXJhdGVkIFhNTCBkZWNsYXJhdGlvbi4KKworKiBSZW5hbWVkIFRhZy5uc3ByZWZpeCB0byBUYWcucHJlZml4LCBmb3IgY29uc2lzdGVuY3kgd2l0aAorICBOYW1lc3BhY2VkQXR0cmlidXRlLgorCisqIEZpeGVkIGEgdGVzdCBmYWlsdXJlIHRoYXQgb2NjdXJlZCBvbiBQeXRob24gMy54IHdoZW4gY2hhcmRldCB3YXMKKyAgaW5zdGFsbGVkLgorCisqIE1hZGUgcHJldHRpZnkoKSByZXR1cm4gVW5pY29kZSBieSBkZWZhdWx0LCBzbyBpdCB3aWxsIGxvb2sgbmljZSBvbgorICBQeXRob24gMyB3aGVuIHBhc3NlZCBpbnRvIHByaW50KCkuCisKKz0gNC4wLjBiOCAoMjAxMjAyMjQpID0KKworKiBBbGwgdHJlZSBidWlsZGVycyBub3cgcHJlc2VydmUgbmFtZXNwYWNlIGluZm9ybWF0aW9uIGluIHRoZQorICBkb2N1bWVudHMgdGhleSBwYXJzZS4gSWYgeW91IHVzZSB0aGUgaHRtbDVsaWIgcGFyc2VyIG9yIGx4bWwncyBYTUwKKyAgcGFyc2VyLCB5b3UgY2FuIGFjY2VzcyB0aGUgbmFtZXNwYWNlIFVSTCBmb3IgYSB0YWcgYXMgdGFnLm5hbWVzcGFjZS4KKworICBIb3dldmVyLCB0aGVyZSBpcyBubyBzcGVjaWFsIHN1cHBvcnQgZm9yIG5hbWVzcGFjZS1vcmllbnRlZAorICBzZWFyY2hpbmcgb3IgdHJlZSBtYW5pcHVsYXRpb24uIFdoZW4geW91IHNlYXJjaCB0aGUgdHJlZSwgeW91IG5lZWQKKyAgdG8gdXNlIG5hbWVzcGFjZSBwcmVmaXhlcyBleGFjdGx5IGFzIHRoZXkncmUgdXNlZCBpbiB0aGUgb3JpZ2luYWwKKyAgZG9jdW1lbnQuCisKKyogVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIERPQ1RZUEUgYWx3YXlzIGVuZHMgaW4gYSBuZXdsaW5lLgorCisqIElzc3VlIGEgd2FybmluZyBpZiB0aGUgdXNlciB0cmllcyB0byB1c2UgYSBTb3VwU3RyYWluZXIgaW4KKyAgY29uanVuY3Rpb24gd2l0aCB0aGUgaHRtbDVsaWIgdHJlZSBidWlsZGVyLCB3aGljaCBkb2Vzbid0IHN1cHBvcnQKKyAgdGhlbS4KKworPSA0LjAuMGI3ICgyMDEyMDIyMykgPQorCisqIFVwb24gZGVjb2RpbmcgdG8gc3RyaW5nLCBhbnkgY2hhcmFjdGVycyB0aGF0IGNhbid0IGJlIHJlcHJlc2VudGVkIGluCisgIHlvdXIgY2hvc2VuIGVuY29kaW5nIHdpbGwgYmUgY29udmVydGVkIGludG8gbnVtZXJpYyBYTUwgZW50aXR5CisgIHJlZmVyZW5jZXMuCisKKyogSXNzdWUgYSB3YXJuaW5nIGlmIGNoYXJhY3RlcnMgd2VyZSByZXBsYWNlZCB3aXRoIFJFUExBQ0VNRU5UCisgIENIQVJBQ1RFUiBkdXJpbmcgVW5pY29kZSBjb252ZXJzaW9uLgorCisqIFJlc3RvcmVkIGNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMi42LgorCisqIFRoZSBpbnN0YWxsIHByb2Nlc3Mgbm8gbG9uZ2VyIGluc3RhbGxzIGRvY3Mgb3IgYXV4aWxsYXJ5IHRleHQgZmlsZXMuCisKKyogSXQncyBub3cgcG9zc2libGUgdG8gZGVlcGNvcHkgYSBCZWF1dGlmdWxTb3VwIG9iamVjdCBjcmVhdGVkIHdpdGgKKyAgUHl0aG9uJ3MgYnVpbHQtaW4gSFRNTCBwYXJzZXIuCisKKyogQWJvdXQgMTAwIHVuaXQgdGVzdHMgdGhhdCAidGVzdCIgdGhlIGJlaGF2aW9yIG9mIHZhcmlvdXMgcGFyc2VycyBvbgorICBpbnZhbGlkIG1hcmt1cCBoYXZlIGJlZW4gcmVtb3ZlZC4gTGVnaXRpbWF0ZSBjaGFuZ2VzIHRvIHRob3NlCisgIHBhcnNlcnMgY2F1c2VkIHRoZXNlIHRlc3RzIHRvIGZhaWwsIGluZGljYXRpbmcgdGhhdCBwZXJoYXBzCisgIEJlYXV0aWZ1bCBTb3VwIHNob3VsZCBub3QgdGVzdCB0aGUgYmVoYXZpb3Igb2YgZm9yZWlnbgorICBsaWJyYXJpZXMuCisKKyAgVGhlIHByb2JsZW1hdGljIHVuaXQgdGVzdHMgaGF2ZSBiZWVuIHJlZm9ybXVsYXRlZCBhcyBpbmZvcm1hdGlvbmFsCisgIGNvbXBhcmlzb25zIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0CisgIHNjcmlwdHMvZGVtb25zdHJhdGVfcGFyc2VyX2RpZmZlcmVuY2VzLnB5LgorCisgIFRoaXMgbWFrZXMgQmVhdXRpZnVsIFNvdXAgY29tcGF0aWJsZSB3aXRoIGh0bWw1bGliIHZlcnNpb24gMC45NSBhbmQKKyAgZnV0dXJlIHZlcnNpb25zIG9mIEhUTUxQYXJzZXIuCisKKz0gNC4wLjBiNiAoMjAxMjAyMTYpID0KKworKiBNdWx0aS12YWx1ZWQgYXR0cmlidXRlcyBsaWtlICJjbGFzcyIgYWx3YXlzIGhhdmUgYSBsaXN0IG9mIHZhbHVlcywKKyAgZXZlbiBpZiB0aGVyZSdzIG9ubHkgb25lIHZhbHVlIGluIHRoZSBsaXN0LgorCisqIEFkZGVkIGEgbnVtYmVyIG9mIG11bHRpLXZhbHVlZCBhdHRyaWJ1dGVzIGRlZmluZWQgaW4gSFRNTDUuCisKKyogU3RvcHBlZCBnZW5lcmF0aW5nIGEgc3BhY2UgYmVmb3JlIHRoZSBzbGFzaCB0aGF0IGNsb3NlcyBhbgorICBlbXB0eS1lbGVtZW50IHRhZy4gVGhpcyBtYXkgY29tZSBiYWNrIGlmIEkgYWRkIGEgc3BlY2lhbCBYSFRNTCBtb2RlCisgIChodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvI0NfMiksIGJ1dCByaWdodCBub3cgaXQncyBwcmV0dHkKKyAgdXNlbGVzcy4KKworKiBQYXNzaW5nIHRleHQgYWxvbmcgd2l0aCB0YWctc3BlY2lmaWMgYXJndW1lbnRzIHRvIGEgZmluZCogbWV0aG9kOgorCisgICBmaW5kKCJhIiwgdGV4dD0iQ2xpY2sgaGVyZSIpCisKKyAgd2lsbCBmaW5kIHRhZ3MgdGhhdCBjb250YWluIHRoZSBnaXZlbiB0ZXh0IGFzIHRoZWlyCisgIC5zdHJpbmcuIFByZXZpb3VzbHksIHRoZSB0YWctc3BlY2lmaWMgYXJndW1lbnRzIHdlcmUgaWdub3JlZCBhbmQKKyAgb25seSBzdHJpbmdzIHdlcmUgc2VhcmNoZWQuCisKKyogRml4ZWQgYSBidWcgdGhhdCBjYXVzZWQgdGhlIGh0bWw1bGliIHRyZWUgYnVpbGRlciB0byBidWlsZCBhCisgIHBhcnRpYWxseSBkaXNjb25uZWN0ZWQgdHJlZS4gR2VuZXJhbGx5IGNsZWFuZWQgdXAgdGhlIGh0bWw1bGliIHRyZWUKKyAgYnVpbGRlci4KKworKiBJZiB5b3UgcmVzdHJpY3QgYSBtdWx0aS12YWx1ZWQgYXR0cmlidXRlIGxpa2UgImNsYXNzIiB0byBhIHN0cmluZworICB0aGF0IGNvbnRhaW5zIHNwYWNlcywgQmVhdXRpZnVsIFNvdXAgd2lsbCBvbmx5IGNvbnNpZGVyIGl0IGEgbWF0Y2gKKyAgaWYgdGhlIHZhbHVlcyBjb3JyZXNwb25kIHRvIHRoYXQgc3BlY2lmaWMgc3RyaW5nLgorCis9IDQuMC4wYjUgKDIwMTIwMjA5KSA9CisKKyogUmF0aW9uYWxpemVkIEJlYXV0aWZ1bCBTb3VwJ3MgdHJlYXRtZW50IG9mIENTUyBjbGFzcy4gQSB0YWcKKyAgYmVsb25naW5nIHRvIG11bHRpcGxlIENTUyBjbGFzc2VzIGlzIHRyZWF0ZWQgYXMgaGF2aW5nIGEgbGlzdCBvZgorICB2YWx1ZXMgZm9yIHRoZSAnY2xhc3MnIGF0dHJpYnV0ZS4gU2VhcmNoaW5nIGZvciBhIENTUyBjbGFzcyB3aWxsCisgIG1hdGNoICphbnkqIG9mIHRoZSBDU1MgY2xhc3Nlcy4KKworICBUaGlzIGFjdHVhbGx5IGFmZmVjdHMgYWxsIGF0dHJpYnV0ZXMgdGhhdCB0aGUgSFRNTCBzdGFuZGFyZCBkZWZpbmVzCisgIGFzIHRha2luZyBtdWx0aXBsZSB2YWx1ZXMgKGNsYXNzLCByZWwsIHJldiwgYXJjaGl2ZSwgYWNjZXB0LWNoYXJzZXQsCisgIGFuZCBoZWFkZXJzKSwgYnV0ICdjbGFzcycgaXMgYnkgZmFyIHRoZSBtb3N0IGNvbW1vbi4gW2J1Zz00MTAzNF0KKworKiBJZiB5b3UgcGFzcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgZGljdGlvbmFyeSBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50CisgIHRvIG9uZSBvZiB0aGUgZmluZCogbWV0aG9kcywgaXQnbGwgYXNzdW1lIHlvdSB3YW50IHRvIHVzZSB0aGF0CisgIG9iamVjdCB0byBzZWFyY2ggYWdhaW5zdCBhIHRhZydzIENTUyBjbGFzc2VzLiBQcmV2aW91c2x5IHRoaXMgb25seQorICB3b3JrZWQgaWYgeW91IHBhc3NlZCBpbiBhIHN0cmluZy4KKworKiBGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZCBhIGNyYXNoIHdoZW4geW91IHBhc3NlZCBhIGRpY3Rpb25hcnkgYXMgYW4KKyAgYXR0cmlidXRlIHZhbHVlIChwb3NzaWJseSBiZWNhdXNlIHlvdSBtaXN0eXBlZCAiYXR0cnMiKS4gW2J1Zz04NDI0MTldCisKKyogVW5pY29kZSwgRGFtbWl0IG5vdyBkZXRlY3RzIHRoZSBlbmNvZGluZyBpbiBIVE1MIDUtc3R5bGUgPG1ldGE+IHRhZ3MKKyAgbGlrZSA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIgLz4uIFtidWc9ODM3MjY4XQorCisqIElmIFVuaWNvZGUsIERhbW1pdCBjYW4ndCBmaWd1cmUgb3V0IGEgY29uc2lzdGVudCBlbmNvZGluZyBmb3IgYQorICBwYWdlLCBpdCB3aWxsIHRyeSBlYWNoIG9mIGl0cyBndWVzc2VzIGFnYWluLCB3aXRoIGVycm9ycz0icmVwbGFjZSIKKyAgaW5zdGVhZCBvZiBlcnJvcnM9InN0cmljdCIuIFRoaXMgbWF5IG1lYW4gdGhhdCBzb21lIGRhdGEgZ2V0cworICByZXBsYWNlZCB3aXRoIFJFUExBQ0VNRU5UIENIQVJBQ1RFUiwgYnV0IGF0IGxlYXN0IG1vc3Qgb2YgaXQgd2lsbAorICBnZXQgdHVybmVkIGludG8gVW5pY29kZS4gW2J1Zz03NTQ5MDNdCisKKyogUGF0Y2hlZCBvdmVyIGEgYnVnIGluIGh0bWw1bGliICg/KSB0aGF0IHdhcyBjcmFzaGluZyBCZWF1dGlmdWwgU291cAorICBvbiBjZXJ0YWluIGtpbmRzIG9mIG1hcmt1cC4gW2J1Zz04Mzg4MDBdCisKKyogRml4ZWQgYSBidWcgdGhhdCB3cmVja2VkIHRoZSB0cmVlIGlmIHlvdSByZXBsYWNlZCBhbiBlbGVtZW50IHdpdGggYW4KKyAgZW1wdHkgc3RyaW5nLiBbYnVnPTcyODY5N10KKworKiBJbXByb3ZlZCBVbmljb2RlLCBEYW1taXQncyBiZWhhdmlvciB3aGVuIHlvdSBnaXZlIGl0IFVuaWNvZGUgdG8KKyAgYmVnaW4gd2l0aC4KKworPSA0LjAuMGI0ICgyMDEyMDIwOCkgPQorCisqIEFkZGVkIEJlYXV0aWZ1bFNvdXAubmV3X3N0cmluZygpIHRvIGdvIGFsb25nIHdpdGggQmVhdXRpZnVsU291cC5uZXdfdGFnKCkKKworKiBCZWF1dGlmdWxTb3VwLm5ld190YWcoKSB3aWxsIGZvbGxvdyB0aGUgcnVsZXMgb2Ygd2hhdGV2ZXIKKyAgdHJlZS1idWlsZGVyIHdhcyB1c2VkIHRvIGNyZWF0ZSB0aGUgb3JpZ2luYWwgQmVhdXRpZnVsU291cCBvYmplY3QuIEEKKyAgbmV3IDxwPiB0YWcgd2lsbCBsb29rIGxpa2UgIjxwIC8+IiBpZiB0aGUgc291cCBvYmplY3Qgd2FzIGNyZWF0ZWQgdG8KKyAgcGFyc2UgWE1MLCBidXQgaXQgd2lsbCBsb29rIGxpa2UgIjxwPjwvcD4iIGlmIHRoZSBzb3VwIG9iamVjdCB3YXMKKyAgY3JlYXRlZCB0byBwYXJzZSBIVE1MLgorCisqIFdlIHBhc3MgaW4gc3RyaWN0PUZhbHNlIHRvIGh0bWwucGFyc2VyIG9uIFB5dGhvbiAzLCBncmVhdGx5CisgIGltcHJvdmluZyBodG1sLnBhcnNlcidzIGFiaWxpdHkgdG8gaGFuZGxlIGJhZCBIVE1MLgorCisqIFdlIGFsc28gbW9ua2V5cGF0Y2ggYSBzZXJpb3VzIGJ1ZyBpbiBodG1sLnBhcnNlciB0aGF0IG1hZGUKKyAgc3RyaWN0PUZhbHNlIGRpc2FzdHJvdXMgb24gUHl0aG9uIDMuMi4yLgorCisqIFJlcGxhY2VkIHRoZSAic3Vic3RpdHV0ZV9odG1sX2VudGl0aWVzIiBhcmd1bWVudCB3aXRoIHRoZQorICBtb3JlIGdlbmVyYWwgImZvcm1hdHRlciIgYXJndW1lbnQuCisKKyogQmFyZSBhbXBlcnNhbmRzIGFuZCBhbmdsZSBicmFja2V0cyBhcmUgYWx3YXlzIGNvbnZlcnRlZCB0byBYTUwKKyAgZW50aXRpZXMgdW5sZXNzIHRoZSB1c2VyIHByZXZlbnRzIGl0LgorCisqIEFkZGVkIFBhZ2VFbGVtZW50Lmluc2VydF9iZWZvcmUoKSBhbmQgUGFnZUVsZW1lbnQuaW5zZXJ0X2FmdGVyKCksCisgIHdoaWNoIGxldCB5b3UgcHV0IGFuIGVsZW1lbnQgaW50byB0aGUgcGFyc2UgdHJlZSB3aXRoIHJlc3BlY3QgdG8KKyAgc29tZSBvdGhlciBlbGVtZW50LgorCisqIFJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuIHRoZSB1c2VyIHRyaWVzIHRvIGRvIHNvbWV0aGluZyBub25zZW5zaWNhbAorICBsaWtlIGluc2VydCBhIHRhZyBpbnRvIGl0c2VsZi4KKworCis9IDQuMC4wYjMgKDIwMTIwMjAzKSA9CisKK0JlYXV0aWZ1bCBTb3VwIDQgaXMgYSBuZWFybHktY29tcGxldGUgcmV3cml0ZSB0aGF0IHJlbW92ZXMgQmVhdXRpZnVsCitTb3VwJ3MgY3VzdG9tIEhUTUwgcGFyc2VyIGluIGZhdm9yIG9mIGEgc3lzdGVtIHRoYXQgbGV0cyB5b3Ugd3JpdGUgYQorbGl0dGxlIGdsdWUgY29kZSBhbmQgcGx1ZyBpbiBhbnkgSFRNTCBvciBYTUwgcGFyc2VyIHlvdSB3YW50LgorCitCZWF1dGlmdWwgU291cCA0LjAgY29tZXMgd2l0aCBnbHVlIGNvZGUgZm9yIGZvdXIgcGFyc2VyczoKKworICogUHl0aG9uJ3Mgc3RhbmRhcmQgSFRNTFBhcnNlciAoaHRtbC5wYXJzZXIgaW4gUHl0aG9uIDMpCisgKiBseG1sJ3MgSFRNTCBhbmQgWE1MIHBhcnNlcnMKKyAqIGh0bWw1bGliJ3MgSFRNTCBwYXJzZXIKKworSFRNTFBhcnNlciBpcyB0aGUgZGVmYXVsdCwgYnV0IEkgcmVjb21tZW5kIHlvdSBpbnN0YWxsIGx4bWwgaWYgeW91CitjYW4uCisKK0ZvciBjb21wbGV0ZSBkb2N1bWVudGF0aW9uLCBzZWUgdGhlIFNwaGlueCBkb2N1bWVudGF0aW9uIGluCiticzQvZG9jL3NvdXJjZS8uIFdoYXQgZm9sbG93cyBpcyBhIHN1bW1hcnkgb2YgdGhlIGNoYW5nZXMgZnJvbQorQmVhdXRpZnVsIFNvdXAgMy4KKworPT09IFRoZSBtb2R1bGUgbmFtZSBoYXMgY2hhbmdlZCA9PT0KKworUHJldmlvdXNseSB5b3UgaW1wb3J0ZWQgdGhlIEJlYXV0aWZ1bFNvdXAgY2xhc3MgZnJvbSBhIG1vZHVsZSBhbHNvCitjYWxsZWQgQmVhdXRpZnVsU291cC4gVG8gc2F2ZSBrZXlzdHJva2VzIGFuZCBtYWtlIGl0IGNsZWFyIHdoaWNoCit2ZXJzaW9uIG9mIHRoZSBBUEkgaXMgaW4gdXNlLCB0aGUgbW9kdWxlIGlzIG5vdyBjYWxsZWQgJ2JzNCc6CisKKyAgICA+Pj4gZnJvbSBiczQgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKKworPT09IEl0IHdvcmtzIHdpdGggUHl0aG9uIDMgPT09CisKK0JlYXV0aWZ1bCBTb3VwIDMuMS4wIHdvcmtlZCB3aXRoIFB5dGhvbiAzLCBidXQgdGhlIHBhcnNlciBpdCB1c2VkIHdhcworc28gYmFkIHRoYXQgaXQgYmFyZWx5IHdvcmtlZCBhdCBhbGwuIEJlYXV0aWZ1bCBTb3VwIDQgd29ya3Mgd2l0aAorUHl0aG9uIDMsIGFuZCBzaW5jZSBpdHMgcGFyc2VyIGlzIHBsdWdnYWJsZSwgeW91IGRvbid0IHNhY3JpZmljZQorcXVhbGl0eS4KKworU3BlY2lhbCB0aGFua3MgdG8gVGhvbWFzIEtsdXl2ZXIgYW5kIEV6aW8gTWVsb3R0aSBmb3IgZ2V0dGluZyBQeXRob24gMworc3VwcG9ydCB0byB0aGUgZmluaXNoIGxpbmUuIEV6aW8gTWVsb3R0aSBpcyBhbHNvIHRvIHRoYW5rIGZvciBncmVhdGx5CitpbXByb3ZpbmcgdGhlIEhUTUwgcGFyc2VyIHRoYXQgY29tZXMgd2l0aCBQeXRob24gMy4yLgorCis9PT0gQ0RBVEEgc2VjdGlvbnMgYXJlIG5vcm1hbCB0ZXh0LCBpZiB0aGV5J3JlIHVuZGVyc3Rvb2QgYXQgYWxsLiA9PT0KKworQ3VycmVudGx5LCB0aGUgbHhtbCBhbmQgaHRtbDVsaWIgSFRNTCBwYXJzZXJzIGlnbm9yZSBDREFUQSBzZWN0aW9ucyBpbgorbWFya3VwOgorCisgPHA+PCFbQ0RBVEFbZm9vXV0+PC9wPiA9PiA8cD48L3A+CisKK0EgZnV0dXJlIHZlcnNpb24gb2YgaHRtbDVsaWIgd2lsbCB0dXJuIENEQVRBIHNlY3Rpb25zIGludG8gdGV4dCBub2RlcywKK2J1dCBvbmx5IHdpdGhpbiB0YWdzIGxpa2UgPHN2Zz4gYW5kIDxtYXRoPjoKKworIDxzdmc+PCFbQ0RBVEFbZm9vXV0+PC9zdmc+ID0+IDxwPmZvbzwvcD4KKworVGhlIGRlZmF1bHQgWE1MIHBhcnNlciAod2hpY2ggdXNlcyBseG1sIGJlaGluZCB0aGUgc2NlbmVzKSB0dXJucyBDREFUQQorc2VjdGlvbnMgaW50byBvcmRpbmFyeSB0ZXh0IGVsZW1lbnRzOgorCisgPHA+PCFbQ0RBVEFbZm9vXV0+PC9wPiA9PiA8cD5mb288L3A+CisKK0luIHRoZW9yeSBpdCdzIHBvc3NpYmxlIHRvIHByZXNlcnZlIHRoZSBDREFUQSBzZWN0aW9ucyB3aGVuIHVzaW5nIHRoZQorWE1MIHBhcnNlciwgYnV0IEkgZG9uJ3Qgc2VlIGhvdyB0byBnZXQgaXQgdG8gd29yayBpbiBwcmFjdGljZS4KKworPT09IE1pc2NlbGxhbmVvdXMgb3RoZXIgc3R1ZmYgPT09CisKK0lmIHRoZSBCZWF1dGlmdWxTb3VwIGluc3RhbmNlIGhhcyAuaXNfeG1sIHNldCB0byBUcnVlLCBhbiBhcHByb3ByaWF0ZQorWE1MIGRlY2xhcmF0aW9uIHdpbGwgYmUgZW1pdHRlZCB3aGVuIHRoZSB0cmVlIGlzIHRyYW5zZm9ybWVkIGludG8gYQorc3RyaW5nOgorCisgICAgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPgorICAgIDxtYXJrdXA+CisgICAgIC4uLgorICAgIDwvbWFya3VwPgorCitUaGUgWydseG1sJywgJ3htbCddIHRyZWUgYnVpbGRlciBzZXRzIC5pc194bWwgdG8gVHJ1ZTsgdGhlIG90aGVyIHRyZWUKK2J1aWxkZXJzIHNldCBpdCB0byBGYWxzZS4gSWYgeW91IHdhbnQgdG8gcGFyc2UgWEhUTUwgd2l0aCBhbiBIVE1MCitwYXJzZXIsIHlvdSBjYW4gc2V0IGl0IG1hbnVhbGx5LgorCisKKz0gMy4yLjAgPQorCitUaGUgMy4xIHNlcmllcyB3YXNuJ3QgdmVyeSB1c2VmdWwsIHNvIEkgcmVuYW1lZCB0aGUgMy4wIHNlcmllcyB0byAzLjIKK3RvIG1ha2UgaXQgb2J2aW91cyB3aGljaCBvbmUgeW91IHNob3VsZCB1c2UuCisKKz0gMy4xLjAgPQorCitBIGh5YnJpZCB2ZXJzaW9uIHRoYXQgc3VwcG9ydHMgMi40IGFuZCBjYW4gYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQKK3RvIHJ1biB1bmRlciBQeXRob24gMy4wLiBUaGVyZSBhcmUgdGhyZWUgYmFja3dhcmRzLWluY29tcGF0aWJsZQorY2hhbmdlcyB5b3Ugc2hvdWxkIGJlIGF3YXJlIG9mLCBidXQgbm8gbmV3IGZlYXR1cmVzIG9yIGRlbGliZXJhdGUKK2JlaGF2aW9yIGNoYW5nZXMuCisKKzEuIHN0cigpIG1heSBubyBsb25nZXIgZG8gd2hhdCB5b3Ugd2FudC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBtZWFuaW5nCitvZiBzdHIoKSBpbnZlcnRzIGJldHdlZW4gUHl0aG9uIDIgYW5kIDM7IGluIFB5dGhvbiAyIGl0IGdpdmVzIHlvdSBhCitieXRlIHN0cmluZywgaW4gUHl0aG9uIDMgaXQgZ2l2ZXMgeW91IGEgVW5pY29kZSBzdHJpbmcuCisKK1RoZSBlZmZlY3Qgb2YgdGhpcyBpcyB0aGF0IHlvdSBjYW4ndCBwYXNzIGFuIGVuY29kaW5nIHRvIC5fX3N0cl9fCithbnltb3JlLiBVc2UgZW5jb2RlKCkgdG8gZ2V0IGEgc3RyaW5nIGFuZCBkZWNvZGUoKSB0byBnZXQgVW5pY29kZSwgYW5kCit5b3UnbGwgYmUgcmVhZHkgKHdlbGwsIHJlYWRpZXIpIGZvciBQeXRob24gMy4KKworMi4gQmVhdXRpZnVsIFNvdXAgaXMgbm93IGJhc2VkIG9uIEhUTUxQYXJzZXIgcmF0aGVyIHRoYW4gU0dNTFBhcnNlciwKK3doaWNoIGlzIGdvbmUgaW4gUHl0aG9uIDMuIFRoZXJlJ3Mgc29tZSBiYWQgSFRNTCB0aGF0IFNHTUxQYXJzZXIKK2hhbmRsZWQgYnV0IEhUTUxQYXJzZXIgZG9lc24ndCwgdXN1YWxseSB0byBkbyB3aXRoIGF0dHJpYnV0ZSB2YWx1ZXMKK3RoYXQgYXJlbid0IGNsb3NlZCBvciBoYXZlIGJyYWNrZXRzIGluc2lkZSB0aGVtOgorCisgIDxhIGhyZWY9ImZvbzwvYT4sIDwvYT48YSBocmVmPSJiYXIiPmJhejwvYT4KKyAgPGEgYj0iPGE+Ij4nLCAnPGEgYj0iJmx0O2EmZ3Q7Ij48L2E+PGE+Ij48L2E+CisKK0EgbGF0ZXIgdmVyc2lvbiBvZiBCZWF1dGlmdWwgU291cCB3aWxsIGFsbG93IHlvdSB0byBwbHVnIGluIGRpZmZlcmVudAorcGFyc2VycyB0byBtYWtlIHRyYWRlb2ZmcyBiZXR3ZWVuIHNwZWVkIGFuZCB0aGUgYWJpbGl0eSB0byBoYW5kbGUgYmFkCitIVE1MLgorCiszLiBJbiBQeXRob24gMyAoYnV0IG5vdCBQeXRob24gMiksIEhUTUxQYXJzZXIgY29udmVydHMgZW50aXRpZXMgd2l0aGluCithdHRyaWJ1dGVzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFVuaWNvZGUgY2hhcmFjdGVycy4gSW4gUHl0aG9uIDIgaXQncworcG9zc2libGUgdG8gcGFyc2UgdGhpcyBzdHJpbmcgYW5kIGxlYXZlIHRoZSAmZWFjdXRlOyBpbnRhY3QuCisKKyA8YSBocmVmPSJodHRwOi8vY3J1bW15LmNvbT9zYWNyJmVhY3V0ZTsmYmxldSI+CisKK0luIFB5dGhvbiAzLCB0aGUgJmVhY3V0ZTsgaXMgYWx3YXlzIGNvbnZlcnRlZCB0byBceGU5IGR1cmluZworcGFyc2luZy4KKworCis9IDMuMC43YSA9CisKK0FkZGVkIGFuIGltcG9ydCB0aGF0IG1ha2VzIEJTIHdvcmsgaW4gUHl0aG9uIDIuMy4KKworCis9IDMuMC43ID0KKworRml4ZWQgYSBVbmljb2RlRGVjb2RlRXJyb3Igd2hlbiB1bnBpY2tsaW5nIGRvY3VtZW50cyB0aGF0IGNvbnRhaW4KK25vbi1BU0NJSSBjaGFyYWN0ZXJzLgorCitGaXhlZCBhIFR5cGVFcnJvciB0aGF0IG9jY3VyZWQgaW4gc29tZSBjaXJjdW1zdGFuY2VzIHdoZW4gYSB0YWcKK2NvbnRhaW5lZCBubyB0ZXh0LgorCitKdW1wIHRocm91Z2ggaG9vcHMgdG8gYXZvaWQgdGhlIHVzZSBvZiBjaGFyZGV0LCB3aGljaCBjYW4gYmUgZXh0cmVtZWx5CitzbG93IGluIHNvbWUgY2lyY3Vtc3RhbmNlcy4gVVRGLTggZG9jdW1lbnRzIHNob3VsZCBuZXZlciB0cmlnZ2VyIHRoZQordXNlIG9mIGNoYXJkZXQuCisKK1doaXRlc3BhY2UgaXMgcHJlc2VydmVkIGluc2lkZSA8cHJlPiBhbmQgPHRleHRhcmVhPiB0YWdzIHRoYXQgY29udGFpbgorbm90aGluZyBidXQgd2hpdGVzcGFjZS4KKworQmVhdXRpZnVsIFNvdXAgY2FuIG5vdyBwYXJzZSBhIGRvY3R5cGUgdGhhdCdzIHNjb3BlZCB0byBhbiBYTUwgbmFtZXNwYWNlLgorCisKKz0gMy4wLjYgPQorCitHb3QgcmlkIG9mIGEgdmVyeSBvbGQgZGVidWcgbGluZSB0aGF0IHByZXZlbnRlZCBjaGFyZGV0IGZyb20gd29ya2luZy4KKworQWRkZWQgYSBUYWcuZGVjb21wb3NlKCkgbWV0aG9kIHRoYXQgY29tcGxldGVseSBkaXNjb25uZWN0cyBhIHRyZWUgb3IgYQorc3Vic2V0IG9mIGEgdHJlZSwgYnJlYWtpbmcgaXQgdXAgaW50byBiaXRlLXNpemVkIHBpZWNlcyB0aGF0IGFyZQorZWFzeSBmb3IgdGhlIGdhcmJhZ2UgY29sbGVjdGVyIHRvIGNvbGxlY3QuCisKK1RhZy5leHRyYWN0KCkgbm93IHJldHVybnMgdGhlIHRhZyB0aGF0IHdhcyBleHRyYWN0ZWQuCisKK1RhZy5maW5kTmV4dCgpIG5vdyBkb2VzIHNvbWV0aGluZyB3aXRoIHRoZSBrZXl3b3JkIGFyZ3VtZW50cyB5b3UgcGFzcworaXQgaW5zdGVhZCBvZiBkcm9wcGluZyB0aGVtIG9uIHRoZSBmbG9vci4KKworRml4ZWQgYSBVbmljb2RlIGNvbnZlcnNpb24gYnVnLgorCitGaXhlZCBhIGJ1ZyB0aGF0IGdhcmJsZWQgc29tZSA8bWV0YT4gdGFncyB3aGVuIHJld3JpdGluZyB0aGVtLgorCisKKz0gMy4wLjUgPQorCitTb3VwIG9iamVjdHMgY2FuIG5vdyBiZSBwaWNrbGVkLCBhbmQgY29waWVkIHdpdGggY29weS5kZWVwY29weS4KKworVGFnLmFwcGVuZCBub3cgd29ya3MgcHJvcGVybHkgb24gZXhpc3RpbmcgQlMgb2JqZWN0cy4gKEl0IHdhc24ndAorb3JpZ2luYWxseSBpbnRlbmRlZCBmb3Igb3V0c2lkZSB1c2UsIGJ1dCBpdCBjYW4gYmUgbm93LikgKEdpbGVzCitSYWRmb3JkKQorCitQYXNzaW5nIGluIGEgbm9uZXhpc3RlbnQgZW5jb2Rpbmcgd2lsbCBubyBsb25nZXIgY3Jhc2ggdGhlIHBhcnNlciBvbgorUHl0aG9uIDIuNCAoSm9obiBOYWdsZSkuCisKK0ZpeGVkIGFuIHVuZGVybHlpbmcgYnVnIGluIFNHTUxQYXJzZXIgdGhhdCB0aGlua3MgQVNDSUkgaGFzIDI1NQorY2hhcmFjdGVycyBpbnN0ZWFkIG9mIDEyNyAoSm9obiBOYWdsZSkuCisKK0VudGl0aWVzIGFyZSBjb252ZXJ0ZWQgbW9yZSBjb25zaXN0ZW50bHkgdG8gVW5pY29kZSBjaGFyYWN0ZXJzLgorCitFbnRpdHkgcmVmZXJlbmNlcyBpbiBhdHRyaWJ1dGUgdmFsdWVzIGFyZSBub3cgY29udmVydGVkIHRvIFVuaWNvZGUKK2NoYXJhY3RlcnMgd2hlbiBhcHByb3ByaWF0ZS4gTnVtZXJpYyBlbnRpdGllcyBhcmUgYWx3YXlzIGNvbnZlcnRlZCwKK2JlY2F1c2UgU0dNTFBhcnNlciBhbHdheXMgY29udmVydHMgdGhlbSBvdXRzaWRlIG9mIGF0dHJpYnV0ZSB2YWx1ZXMuCisKK0FMTF9FTlRJVElFUyBoYXBwZW5zIHRvIGp1c3QgYmUgdGhlIFhIVE1MIGVudGl0aWVzLCBzbyBJIHJlbmFtZWQgaXQgdG8KK1hIVE1MX0VOVElUSUVTLgorCitUaGUgcmVndWxhciBleHByZXNzaW9uIGZvciBiYXJlIGFtcGVyc2FuZHMgd2FzIHRvbyBsb29zZS4gSW4gc29tZQorY2FzZXMgYW1wZXJzYW5kcyB3ZXJlIG5vdCBiZWluZyBlc2NhcGVkLiAoU2FtIFJ1Ynk/KQorCitOb24tYnJlYWtpbmcgc3BhY2VzIGFuZCBvdGhlciBzcGVjaWFsIFVuaWNvZGUgc3BhY2UgY2hhcmFjdGVycyBhcmUgbm8KK2xvbmdlciBmb2xkZWQgdG8gQVNDSUkgc3BhY2VzLiAoUm9iZXJ0IExlZnR3aWNoKQorCitJbmZvcm1hdGlvbiBpbnNpZGUgYSBURVhUQVJFQSB0YWcgaXMgbm93IHBhcnNlZCBsaXRlcmFsbHksIG5vdCBhcyBIVE1MCit0YWdzLiBURVhUQVJFQSBub3cgd29ya3MgZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgU0NSSVBULiAoWmVwaHlyIEZhbmcpCisKKz0gMy4wLjQgPQorCitGaXhlZCBhIGJ1ZyB0aGF0IGNyYXNoZWQgVW5pY29kZSBjb252ZXJzaW9uIGluIHNvbWUgY2FzZXMuCisKK0ZpeGVkIGEgYnVnIHRoYXQgcHJldmVudGVkIFVuaWNvZGVEYW1taXQgZnJvbSBiZWluZyB1c2VkIGFzIGEKK2dlbmVyYWwtcHVycG9zZSBkYXRhIHNjcnViYmVyLgorCitGaXhlZCBzb21lIHVuaXQgdGVzdCBmYWlsdXJlcyB3aGVuIHJ1bm5pbmcgYWdhaW5zdCBQeXRob24gMi41LgorCitXaGVuIGNvbnNpZGVyaW5nIHdoZXRoZXIgdG8gY29udmVydCBzbWFydCBxdW90ZXMsIFVuaWNvZGVEYW1taXQgbm93Citsb29rcyBhdCB0aGUgb3JpZ2luYWwgZW5jb2RpbmcgaW4gYSBjYXNlLWluc2Vuc2l0aXZlIHdheS4KKworPSAzLjAuMyAoMjAwNjA2MDYpID0KKworQmVhdXRpZnVsIFNvdXAgaXMgbm93IHVzYWJsZSBhcyBhIHdheSB0byBjbGVhbiB1cCBpbnZhbGlkIFhNTC9IVE1MIChiZQorc3VyZSB0byBwYXNzIGluIGFuIGFwcHJvcHJpYXRlIHZhbHVlIGZvciBjb252ZXJ0RW50aXRpZXMsIG9yIFhNTC9IVE1MCitlbnRpdGllcyBtaWdodCBzdGljayBhcm91bmQgdGhhdCBhcmVuJ3QgdmFsaWQgaW4gSFRNTC9YTUwpLiBUaGUgcmVzdWx0CittYXkgbm90IHZhbGlkYXRlLCBidXQgaXQgc2hvdWxkIGJlIGdvb2QgZW5vdWdoIHRvIG5vdCBjaG9rZSBhCityZWFsLXdvcmxkIFhNTCBwYXJzZXIuIFNwZWNpZmljYWxseSwgdGhlIG91dHB1dCBvZiBhIHByb3Blcmx5Citjb25zdHJ1Y3RlZCBzb3VwIG9iamVjdCBzaG91bGQgYWx3YXlzIGJlIHZhbGlkIGFzIHBhcnQgb2YgYW4gWE1MCitkb2N1bWVudCwgYnV0IHBhcnRzIG1heSBiZSBtaXNzaW5nIGlmIHRoZXkgd2VyZSBtaXNzaW5nIGluIHRoZQorb3JpZ2luYWwuIEFzIGFsd2F5cywgaWYgdGhlIGlucHV0IGlzIHZhbGlkIFhNTCwgdGhlIG91dHB1dCB3aWxsIGFsc28KK2JlIHZhbGlkLgorCis9IDMuMC4yICgyMDA2MDYwMikgPQorCitQcmV2aW91c2x5LCBCZWF1dGlmdWwgU291cCBjb3JyZWN0bHkgaGFuZGxlZCBhdHRyaWJ1dGUgdmFsdWVzIHRoYXQKK2NvbnRhaW5lZCBlbWJlZGRlZCBxdW90ZXMgKHNvbWV0aW1lcyBieSBlc2NhcGluZyksIGJ1dCBub3Qgb3RoZXIga2luZHMKK29mIFhNTCBjaGFyYWN0ZXIuIE5vdywgaXQgY29ycmVjdGx5IGhhbmRsZXMgb3IgZXNjYXBlcyBhbGwgc3BlY2lhbCBYTUwKK2NoYXJhY3RlcnMgaW4gYXR0cmlidXRlIHZhbHVlcy4KKworSSBhbGlhc2VkIG1ldGhvZHMgdG8gdGhlIDIueCBuYW1lcyAoZmV0Y2gsIGZpbmQsIGZpbmRUZXh0LCBldGMuKSBmb3IKK2JhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHB1cnBvc2VzLiBUaG9zZSBuYW1lcyBhcmUgZGVwcmVjYXRlZCBhbmQgaWYgSQorZXZlciBkbyBhIDQuMCBJIHdpbGwgcmVtb3ZlIHRoZW0uIEkgd2lsbCwgSSB0ZWxsIHlvdSEKKworRml4ZWQgYSBidWcgd2hlcmUgdGhlIGZpbmRBbGwgbWV0aG9kIHdhc24ndCBwYXNzaW5nIGFsb25nIGFueSBrZXl3b3JkCithcmd1bWVudHMuCisKK1doZW4gcnVuIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgQmVhdXRpZnVsIFNvdXAgbm93IGFjdHMgYXMgYW4gSFRNTAorcHJldHR5LXByaW50ZXIsIG5vdCBhbiBYTUwgcHJldHR5LXByaW50ZXIuCisKKz0gMy4wLjEgKDIwMDYwNTMwKSA9CisKK1JlaW50cm9kdWNlZCB0aGUgImZldGNoIGJ5IENTUyBjbGFzcyIgc2hvcnRjdXQuIEkgdGhvdWdodCBrZXl3b3JkCithcmd1bWVudHMgd291bGQgcmVwbGFjZSBpdCwgYnV0IHRoZXkgZG9uJ3QuIFlvdSBjYW4ndCBjYWxsIHNvdXAoJ2EnLAorY2xhc3M9J2ZvbycpIGJlY2F1c2UgY2xhc3MgaXMgYSBQeXRob24ga2V5d29yZC4KKworSWYgQmVhdXRpZnVsIFNvdXAgZW5jb3VudGVycyBhIG1ldGEgdGFnIHRoYXQgZGVjbGFyZXMgdGhlIGVuY29kaW5nLAorYnV0IGEgU291cFN0cmFpbmVyIHRlbGxzIGl0IG5vdCB0byBwYXJzZSB0aGF0IHRhZywgQmVhdXRpZnVsIFNvdXAgd2lsbAorbm8gbG9uZ2VyIHRyeSB0byByZXdyaXRlIHRoZSBtZXRhIHRhZyB0byBtZW50aW9uIHRoZSBuZXcKK2VuY29kaW5nLiBCYXNpY2FsbHksIHRoaXMgbWFrZXMgU291cFN0cmFpbmVycyB3b3JrIGluIHJlYWwtd29ybGQKK2FwcGxpY2F0aW9ucyBpbnN0ZWFkIG9mIGNyYXNoaW5nIHRoZSBwYXJzZXIuCisKKz0gMy4wLjAgIldobyB3b3VsZCBub3QgZ2l2ZSBhbGwgZWxzZSBmb3IgdHdvIHAiICgyMDA2MDUyOCkgPQorCitUaGlzIHJlbGVhc2UgaXMgbm90IGJhY2t3YXJkLWNvbXBhdGlibGUgd2l0aCBwcmV2aW91cyByZWxlYXNlcy4gSWYKK3lvdSd2ZSBnb3QgY29kZSB3cml0dGVuIHdpdGggYSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBnbworYWhlYWQgYW5kIGtlZXAgdXNpbmcgaXQsIHVubGVzcyBvbmUgb2YgdGhlIGZlYXR1cmVzIG1lbnRpb25lZCBoZXJlCityZWFsbHkgbWFrZXMgeW91ciBsaWZlIGVhc2llci4gU2luY2UgdGhlIGxpYnJhcnkgaXMgc2VsZi1jb250YWluZWQsCit5b3UgY2FuIGluY2x1ZGUgYW4gb2xkIGNvcHkgb2YgdGhlIGxpYnJhcnkgaW4geW91ciBvbGQgYXBwbGljYXRpb25zLAorYW5kIHVzZSB0aGUgbmV3IHZlcnNpb24gZm9yIGV2ZXJ5dGhpbmcgZWxzZS4KKworVGhlIGRvY3VtZW50YXRpb24gaGFzIGJlZW4gcmV3cml0dGVuIGFuZCBncmVhdGx5IGV4cGFuZGVkIHdpdGggbWFueQorbW9yZSBleGFtcGxlcy4KKworQmVhdXRpZnVsIFNvdXAgYXV0b2RldGVjdHMgdGhlIGVuY29kaW5nIG9mIGEgZG9jdW1lbnQgKG9yIHVzZXMgdGhlIG9uZQoreW91IHNwZWNpZnkpLCBhbmQgY29udmVydHMgaXQgZnJvbSBpdHMgbmF0aXZlIGVuY29kaW5nIHRvCitVbmljb2RlLiBJbnRlcm5hbGx5LCBpdCBvbmx5IGRlYWxzIHdpdGggVW5pY29kZSBzdHJpbmdzLiBXaGVuIHlvdQorcHJpbnQgb3V0IHRoZSBkb2N1bWVudCwgaXQgY29udmVydHMgdG8gVVRGLTggKG9yIGFub3RoZXIgZW5jb2RpbmcgeW91CitzcGVjaWZ5KS4gW0RvYyByZWZlcmVuY2VdCisKK0l0J3Mgbm93IGVhc3kgdG8gbWFrZSBsYXJnZS1zY2FsZSBjaGFuZ2VzIHRvIHRoZSBwYXJzZSB0cmVlIHdpdGhvdXQKK3NjcmV3aW5nIHVwIHRoZSBuYXZpZ2F0aW9uIG1lbWJlcnMuIFRoZSBtZXRob2RzIGFyZSBleHRyYWN0LAorcmVwbGFjZVdpdGgsIGFuZCBpbnNlcnQuIFtEb2MgcmVmZXJlbmNlLiBTZWUgYWxzbyBJbXByb3ZpbmcgTWVtb3J5CitVc2FnZSB3aXRoIGV4dHJhY3RdCisKK1Bhc3NpbmcgVHJ1ZSBpbiBhcyBhbiBhdHRyaWJ1dGUgdmFsdWUgZ2l2ZXMgeW91IHRhZ3MgdGhhdCBoYXZlIGFueQordmFsdWUgZm9yIHRoYXQgYXR0cmlidXRlLiBZb3UgZG9uJ3QgaGF2ZSB0byBjcmVhdGUgYSByZWd1bGFyCitleHByZXNzaW9uLiBQYXNzaW5nIE5vbmUgZm9yIGFuIGF0dHJpYnV0ZSB2YWx1ZSBnaXZlcyB5b3UgdGFncyB0aGF0Citkb24ndCBoYXZlIHRoYXQgYXR0cmlidXRlIGF0IGFsbC4KKworVGFnIG9iamVjdHMgbm93IGtub3cgd2hldGhlciBvciBub3QgdGhleSdyZSBzZWxmLWNsb3NpbmcuIFRoaXMgYXZvaWRzCit0aGUgcHJvYmxlbSB3aGVyZSBCZWF1dGlmdWwgU291cCB0aG91Z2h0IHRoYXQgdGFncyBsaWtlIDxCUiAvPiB3ZXJlCitzZWxmLWNsb3NpbmcgZXZlbiBpbiBYTUwgZG9jdW1lbnRzLiBZb3UgY2FuIGN1c3RvbWl6ZSB0aGUgc2VsZi1jbG9zaW5nCit0YWdzIGZvciBhIHBhcnNlciBvYmplY3QgYnkgcGFzc2luZyB0aGVtIGluIGFzIGEgbGlzdCBvZgorc2VsZkNsb3NpbmdUYWdzOiB5b3UgZG9uJ3QgaGF2ZSB0byBzdWJjbGFzcyBhbnltb3JlLgorCitUaGVyZSdzIGEgbmV3IGJ1aWx0LWluIHBhcnNlciwgTWluaW1hbFNvdXAsIHdoaWNoIGhhcyBtb3N0IG9mCitCZWF1dGlmdWxTb3VwJ3MgSFRNTC1zcGVjaWZpYyBydWxlcywgYnV0IG5vIHRhZyBuZXN0aW5nIHJ1bGVzLiBbRG9jCityZWZlcmVuY2VdCisKK1lvdSBjYW4gdXNlIGEgU291cFN0cmFpbmVyIHRvIHRlbGwgQmVhdXRpZnVsIFNvdXAgdG8gcGFyc2Ugb25seSBwYXJ0CitvZiBhIGRvY3VtZW50LiBUaGlzIHNhdmVzIHRpbWUgYW5kIG1lbW9yeSwgb2Z0ZW4gbWFraW5nIEJlYXV0aWZ1bCBTb3VwCithYm91dCBhcyBmYXN0IGFzIGEgY3VzdG9tLWJ1aWx0IFNHTUxQYXJzZXIgc3ViY2xhc3MuIFtEb2MgcmVmZXJlbmNlLAorU291cFN0cmFpbmVyIHJlZmVyZW5jZV0KKworWW91IGNhbiAodXN1YWxseSkgdXNlIGtleXdvcmQgYXJndW1lbnRzIGluc3RlYWQgb2YgcGFzc2luZyBhCitkaWN0aW9uYXJ5IG9mIGF0dHJpYnV0ZXMgdG8gYSBzZWFyY2ggbWV0aG9kLiBUaGF0IGlzLCB5b3UgY2FuIHJlcGxhY2UKK3NvdXAoYXJncz17ImlkIiA6ICI1In0pIHdpdGggc291cChpZD0iNSIpLiBZb3UgY2FuIHN0aWxsIHVzZSBhcmdzIGlmCisoZm9yIGluc3RhbmNlKSB5b3UgbmVlZCB0byBmaW5kIGFuIGF0dHJpYnV0ZSB3aG9zZSBuYW1lIGNsYXNoZXMgd2l0aAordGhlIG5hbWUgb2YgYW4gYXJndW1lbnQgdG8gZmluZEFsbC4gW0RvYyByZWZlcmVuY2U6ICoqa3dhcmdzIGF0dHJzXQorCitUaGUgbWV0aG9kIG5hbWVzIGhhdmUgY2hhbmdlZCB0byB0aGUgYmV0dGVyIG1ldGhvZCBuYW1lcyB1c2VkIGluCitSdWJ5ZnVsIFNvdXAuIEluc3RlYWQgb2YgZmluZCBtZXRob2RzIGFuZCBmZXRjaCBtZXRob2RzLCB0aGVyZSBhcmUKK29ubHkgZmluZCBtZXRob2RzLiBJbnN0ZWFkIG9mIGEgc2NoZW1lIHdoZXJlIHlvdSBjYW4ndCByZW1lbWJlciB3aGljaAorbWV0aG9kIGZpbmRzIG9uZSBlbGVtZW50IGFuZCB3aGljaCBvbmUgZmluZHMgdGhlbSBhbGwsIHdlIGhhdmUgZmluZAorYW5kIGZpbmRBbGwuIEluIGdlbmVyYWwsIGlmIHRoZSBtZXRob2QgbmFtZSBtZW50aW9ucyBBbGwgb3IgYSBwbHVyYWwKK25vdW4gKGVnLiBmaW5kTmV4dFNpYmxpbmdzKSwgdGhlbiBpdCBmaW5kcyBtYW55IGVsZW1lbnRzCittZXRob2QuIE90aGVyd2lzZSwgaXQgb25seSBmaW5kcyBvbmUgZWxlbWVudC4gW0RvYyByZWZlcmVuY2VdCisKK1NvbWUgb2YgdGhlIGFyZ3VtZW50IG5hbWVzIGhhdmUgYmVlbiByZW5hbWVkIGZvciBjbGFyaXR5LiBGb3IgaW5zdGFuY2UKK2F2b2lkUGFyc2VyUHJvYmxlbXMgaXMgbm93IHBhcnNlck1hc3NhZ2UuCisKK0JlYXV0aWZ1bCBTb3VwIG5vIGxvbmdlciBpbXBsZW1lbnRzIGEgZmVlZCBtZXRob2QuIFlvdSBuZWVkIHRvIHBhc3MgYQorc3RyaW5nIG9yIGEgZmlsZWhhbmRsZSBpbnRvIHRoZSBzb3VwIGNvbnN0cnVjdG9yLCBub3Qgd2l0aCBmZWVkIGFmdGVyCit0aGUgc291cCBoYXMgYmVlbiBjcmVhdGVkLiBUaGVyZSBpcyBzdGlsbCBhIGZlZWQgbWV0aG9kLCBidXQgaXQncyB0aGUKK2ZlZWQgbWV0aG9kIGltcGxlbWVudGVkIGJ5IFNHTUxQYXJzZXIgYW5kIGNhbGxpbmcgaXQgd2lsbCBieXBhc3MKK0JlYXV0aWZ1bCBTb3VwIGFuZCBjYXVzZSBwcm9ibGVtcy4KKworVGhlIE5hdmlnYWJsZVRleHQgY2xhc3MgaGFzIGJlZW4gcmVuYW1lZCB0byBOYXZpZ2FibGVTdHJpbmcuIFRoZXJlIGlzCitubyBOYXZpZ2FibGVVbmljb2RlU3RyaW5nIGFueW1vcmUsIGJlY2F1c2UgZXZlcnkgc3RyaW5nIGluc2lkZSBhCitCZWF1dGlmdWwgU291cCBwYXJzZSB0cmVlIGlzIGEgVW5pY29kZSBzdHJpbmcuCisKK2ZpbmRUZXh0IGFuZCBmZXRjaFRleHQgYXJlIGdvbmUuIEp1c3QgcGFzcyBhIHRleHQgYXJndW1lbnQgaW50byBmaW5kCitvciBmaW5kQWxsLgorCitOdWxsIHdhcyBtb3JlIHRyb3VibGUgdGhhbiBpdCB3YXMgd29ydGgsIHNvIEkgZ290IHJpZCBvZiBpdC4gQW55dGhpbmcKK3RoYXQgdXNlZCB0byByZXR1cm4gTnVsbCBub3cgcmV0dXJucyBOb25lLgorCitTcGVjaWFsIFhNTCBjb25zdHJ1Y3RzIGxpa2UgY29tbWVudHMgYW5kIENEQVRBIG5vdyBoYXZlIHRoZWlyIG93bgorTmF2aWdhYmxlU3RyaW5nIHN1YmNsYXNzZXMsIGluc3RlYWQgb2YgYmVpbmcgdHJlYXRlZCBhcyBvZGRseS1mb3JtZWQKK2RhdGEuIElmIHlvdSBwYXJzZSBhIGRvY3VtZW50IHRoYXQgY29udGFpbnMgQ0RBVEEgYW5kIHdyaXRlIGl0IGJhY2sKK291dCwgdGhlIENEQVRBIHdpbGwgc3RpbGwgYmUgdGhlcmUuCisKK1doZW4geW91J3JlIHBhcnNpbmcgYSBkb2N1bWVudCwgeW91IGNhbiBnZXQgQmVhdXRpZnVsIFNvdXAgdG8gY29udmVydAorWE1MIG9yIEhUTUwgZW50aXRpZXMgaW50byB0aGUgY29ycmVzcG9uZGluZyBVbmljb2RlIGNoYXJhY3RlcnMuIFtEb2MKK3JlZmVyZW5jZV0KKworPSAyLjEuMSAoMjAwNTA5MTgpID0KKworRml4ZWQgYSBzZXJpb3VzIHBlcmZvcm1hbmNlIGJ1ZyBpbiBCZWF1dGlmdWxTdG9uZVNvdXAgd2hpY2ggd2FzCitjYXVzaW5nIHBhcnNpbmcgdG8gYmUgaW5jcmVkaWJseSBzbG93LgorCitDb3JyZWN0ZWQgc2V2ZXJhbCBlbnRpdGllcyB0aGF0IHdlcmUgcHJldmlvdXNseSBiZWluZyBpbmNvcnJlY3RseQordHJhbnNsYXRlZCBmcm9tIE1pY3Jvc29mdCBzbWFydC1xdW90ZS1saWtlIGNoYXJhY3RlcnMuCisKK0ZpeGVkIGEgYnVnIHRoYXQgd2FzIGJyZWFraW5nIHRleHQgZmV0Y2guCisKK0ZpeGVkIGEgYnVnIHRoYXQgY3Jhc2hlZCB0aGUgcGFyc2VyIHdoZW4gdGV4dCBjaHVua3MgdGhhdCBsb29rIGxpa2UKK0hUTUwgdGFnIG5hbWVzIHNob3dlZCB1cCB3aXRoaW4gYSBTQ1JJUFQgdGFnLgorCitUSEVBRCwgVEJPRFksIGFuZCBURk9PVCB0YWdzIGFyZSBub3cgbmVzdGFibGUgd2l0aGluIFRBQkxFCit0YWdzLiBOZXN0ZWQgdGFibGVzIHNob3VsZCBwYXJzZSBtb3JlIHNlbnNpYmx5IG5vdy4KKworQkFTRSBpcyBub3cgY29uc2lkZXJlZCBhIHNlbGYtY2xvc2luZyB0YWcuCisKKz0gMi4xLjAgIkdhbWUsIG9yIGFueSBvdGhlciBkaXNoPyIgKDIwMDUwNTA0KSA9CisKK0FkZGVkIGEgd2lkZSB2YXJpZXR5IG9mIG5ldyBzZWFyY2ggbWV0aG9kcyB3aGljaCwgZ2l2ZW4gYSBzdGFydGluZworcG9pbnQgaW5zaWRlIHRoZSB0cmVlLCBmb2xsb3cgYSBwYXJ0aWN1bGFyIG5hdmlnYXRpb24gbWVtYmVyIChsaWtlCituZXh0U2libGluZykgb3ZlciBhbmQgb3ZlciBhZ2FpbiwgbG9va2luZyBmb3IgVGFnIGFuZCBOYXZpZ2FibGVUZXh0CitvYmplY3RzIHRoYXQgbWF0Y2ggY2VydGFpbiBjcml0ZXJpYS4gVGhlIG5ldyBtZXRob2RzIGFyZSBmaW5kTmV4dCwKK2ZldGNoTmV4dCwgZmluZFByZXZpb3VzLCBmZXRjaFByZXZpb3VzLCBmaW5kTmV4dFNpYmxpbmcsCitmZXRjaE5leHRTaWJsaW5ncywgZmluZFByZXZpb3VzU2libGluZywgZmV0Y2hQcmV2aW91c1NpYmxpbmdzLAorZmluZFBhcmVudCwgYW5kIGZldGNoUGFyZW50cy4gQWxsIG9mIHRoZXNlIHVzZSB0aGUgc2FtZSBiYXNpYyBjb2RlCit1c2VkIGJ5IGZpcnN0IGFuZCBmZXRjaCwgc28geW91IGNhbiBwYXNzIHlvdXIgd2VpcmQgd2F5cyBvZiBtYXRjaGluZwordGhpbmdzIGludG8gdGhlc2UgbWV0aG9kcy4KKworVGhlIGZldGNoIG1ldGhvZCBhbmQgaXRzIGRlcml2YXRpdmVzIG5vdyBhY2NlcHQgYSBsaW1pdCBhcmd1bWVudC4KKworWW91IGNhbiBub3cgcGFzcyBrZXl3b3JkIGFyZ3VtZW50cyB3aGVuIGNhbGxpbmcgYSBUYWcgb2JqZWN0IGFzIHRob3VnaAoraXQgd2VyZSBhIG1ldGhvZC4KKworRml4ZWQgYSBidWcgdGhhdCBjYXVzZWQgYWxsIGhhbmQtY3JlYXRlZCB0YWdzIHRvIHNoYXJlIGEgc2luZ2xlIHNldCBvZgorYXR0cmlidXRlcy4KKworPSAyLjAuMyAoMjAwNTA1MDEpID0KKworRml4ZWQgUHl0aG9uIDIuMiBzdXBwb3J0IGZvciBpdGVyYXRvcnMuCisKK0ZpeGVkIGEgYnVnIHRoYXQgZ2F2ZSB0aGUgd3JvbmcgcmVwcmVzZW50YXRpb24gdG8gdGFncyB3aXRoaW4gcXVvdGUKK3RhZ3MgbGlrZSA8c2NyaXB0Pi4KKworVG9vayBzb21lIGNvZGUgZnJvbSBNYXJrIFBpbGdyaW0gdGhhdCB0cmVhdHMgQ0RBVEEgZGVjbGFyYXRpb25zIGFzCitkYXRhIGluc3RlYWQgb2YgaWdub3JpbmcgdGhlbS4KKworQmVhdXRpZnVsIFNvdXAncyBzZXR1cC5weSB3aWxsIG5vdyBkbyBhbiBpbnN0YWxsIGV2ZW4gaWYgdGhlIHVuaXQKK3Rlc3RzIGZhaWwuIEl0IHdvbid0IGJ1aWxkIGEgc291cmNlIGRpc3RyaWJ1dGlvbiBpZiB0aGUgdW5pdCB0ZXN0cworZmFpbCwgc28gSSBjYW4ndCByZWxlYXNlIGEgbmV3IHZlcnNpb24gdW5sZXNzIHRoZXkgcGFzcy4KKworPSAyLjAuMiAoMjAwNTA0MTYpID0KKworQWRkZWQgdGhlIHVuaXQgdGVzdHMgaW4gYSBzZXBhcmF0ZSBtb2R1bGUsIGFuZCBwYWNrYWdlZCBpdCB3aXRoCitkaXN0dXRpbHMuCisKK0ZpeGVkIGEgYnVnIHRoYXQgc29tZXRpbWVzIGNhdXNlZCByZW5kZXJDb250ZW50cygpIHRvIHJldHVybiBhIFVuaWNvZGUKK3N0cmluZyBldmVuIGlmIHRoZXJlIHdhcyBubyBVbmljb2RlIGluIHRoZSBvcmlnaW5hbCBzdHJpbmcuCisKK0FkZGVkIHRoZSBkb25lKCkgbWV0aG9kLCB3aGljaCBjbG9zZXMgYWxsIG9mIHRoZSBwYXJzZXIncyBvcGVuCit0YWdzLiBJdCBnZXRzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW4geW91IHBhc3MgaW4gc29tZSB0ZXh0IHRvIHRoZQorY29uc3RydWN0b3Igb2YgYSBwYXJzZXIgY2xhc3M7IG90aGVyd2lzZSB5b3UgbXVzdCBjYWxsIGl0IHlvdXJzZWxmLgorCitSZWluc3RhdGVkIHNvbWUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCAxLnggdmVyc2lvbnM6IHJlZmVyZW5jaW5nCit0aGUgc3RyaW5nIG1lbWJlciBvZiBhIE5hdmlnYWJsZVRleHQgb2JqZWN0IHJldHVybnMgdGhlIE5hdmlnYWJsZVRleHQKK29iamVjdCBpbnN0ZWFkIG9mIHRocm93aW5nIGFuIGVycm9yLgorCis9IDIuMC4xICgyMDA1MDQxMikgPQorCitGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZCBiYWQgcmVzdWx0cyB3aGVuIHlvdSB0cmllZCB0byByZWZlcmVuY2UgYSB0YWcKK25hbWUgc2hvcnRlciB0aGFuIDMgY2hhcmFjdGVycyBhcyBhIG1lbWJlciBvZiBhIFRhZywgZWcuIHRhZy50YWJsZS50ZC4KKworTWFkZSBzdXJlIGFsbCBUYWdzIGhhdmUgdGhlICdoaWRkZW4nIGF0dHJpYnV0ZSBzbyB0aGF0IGFuIGF0dGVtcHQgdG8KK2FjY2VzcyB0YWcuaGlkZGVuIGRvZXNuJ3Qgc3Bhd24gYW4gYXR0ZW1wdCB0byBmaW5kIGEgdGFnIG5hbWVkCisnaGlkZGVuJy4KKworRml4ZWQgYSBidWcgaW4gdGhlIGNvbXBhcmlzb24gb3BlcmF0b3IuCisKKz0gMi4wLjAgIldobyBjYXJlcyBmb3IgZmlzaD8iICgyMDA1MDQxMCkKKworQmVhdXRpZnVsIFNvdXAgdmVyc2lvbiAxIHdhcyB2ZXJ5IHVzZWZ1bCBidXQgYWxzbyBwcmV0dHkgc3R1cGlkLiBJCitvcmlnaW5hbGx5IHdyb3RlIGl0IHdpdGhvdXQgbm90aWNpbmcgYW55IG9mIHRoZSBwcm9ibGVtcyBpbmhlcmVudCBpbgordHJ5aW5nIHRvIGJ1aWxkIGEgcGFyc2UgdHJlZSBvdXQgb2YgYW1iaWd1b3VzIEhUTUwgdGFncy4gVGhpcyB2ZXJzaW9uCitzb2x2ZXMgYWxsIG9mIHRob3NlIHByb2JsZW1zIHRvIG15IHNhdGlzZmFjdGlvbi4gSXQgYWxzbyBhZGRzIG1hbnkgbmV3CitjbGV2ZXIgdGhpbmdzIHRvIG1ha2UgdXAgZm9yIHRoZSByZW1vdmFsIG9mIHRoZSBzdHVwaWQgdGhpbmdzLgorCis9PSBQYXJzaW5nID09CisKK1RoZSBwYXJzZXIgbG9naWMgaGFzIGJlZW4gZ3JlYXRseSBpbXByb3ZlZCwgYW5kIHRoZSBCZWF1dGlmdWxTb3VwCitjbGFzcyBzaG91bGQgbXVjaCBtb3JlIHJlbGlhYmx5IHlpZWxkIGEgcGFyc2UgdHJlZSB0aGF0IGxvb2tzIGxpa2UKK3doYXQgdGhlIHBhZ2UgYXV0aG9yIGludGVuZGVkLiBGb3IgYSBwYXJ0aWN1bGFyIGNsYXNzIG9mIG9kZCBlZGdlCitjYXNlcyB0aGF0IG5vdyBjYXVzZXMgcHJvYmxlbXMsIHRoZXJlIGlzIGEgbmV3IGNsYXNzLAorSUNhbnRCZWxpZXZlSXRzQmVhdXRpZnVsU291cC4KKworQnkgZGVmYXVsdCwgQmVhdXRpZnVsIFNvdXAgbm93IHBlcmZvcm1zIHNvbWUgY2xlYW51cCBvcGVyYXRpb25zIG9uCit0ZXh0IGJlZm9yZSBwYXJzaW5nIGl0LiBUaGlzIGlzIHRvIGF2b2lkIGNvbW1vbiBwcm9ibGVtcyB3aXRoIGJhZAorZGVmaW5pdGlvbnMgYW5kIHNlbGYtY2xvc2luZyB0YWdzIHRoYXQgY3Jhc2ggU0dNTFBhcnNlci4gWW91IGNhbgorcHJvdmlkZSB5b3VyIG93biBzZXQgb2YgY2xlYW51cCBvcGVyYXRpb25zLCBvciB0dXJuIGl0IG9mZgorYWx0b2dldGhlci4gVGhlIGNsZWFudXAgb3BlcmF0aW9ucyBpbmNsdWRlIGZpeGluZyBzZWxmLWNsb3NpbmcgdGFncwordGhhdCBkb24ndCBjbG9zZSwgYW5kIHJlcGxhY2luZyBNaWNyb3NvZnQgc21hcnQgcXVvdGVzIGFuZCBzaW1pbGFyCitjaGFyYWN0ZXJzIHdpdGggdGhlaXIgSFRNTCBlbnRpdHkgZXF1aXZhbGVudHMuCisKK1lvdSBjYW4gbm93IGdldCBhIHByZXR0eS1wcmludCB2ZXJzaW9uIG9mIHBhcnNlZCBIVE1MIHRvIGdldCBhIHZpc3VhbAorcGljdHVyZSBvZiBob3cgQmVhdXRpZnVsIFNvdXAgcGFyc2VzIGl0LCB3aXRoIHRoZSBUYWcucHJldHRpZnkoKQorbWV0aG9kLgorCis9PSBTdHJpbmdzIGFuZCBVbmljb2RlID09CisKK1RoZXJlIGFyZSBzZXBhcmF0ZSBOYXZpZ2FibGVUZXh0IHN1YmNsYXNzZXMgZm9yIEFTQ0lJIGFuZCBVbmljb2RlCitzdHJpbmdzLiBUaGVzZSBjbGFzc2VzIGRpcmVjdGx5IHN1YmNsYXNzIHRoZSBjb3JyZXNwb25kaW5nIGJhc2UgZGF0YQordHlwZXMuIFRoaXMgbWVhbnMgeW91IGNhbiB0cmVhdCBOYXZpZ2FibGVUZXh0IG9iamVjdHMgYXMgc3RyaW5ncworaW5zdGVhZCBvZiBoYXZpbmcgdG8gY2FsbCBtZXRob2RzIG9uIHRoZW0gdG8gZ2V0IHRoZSBzdHJpbmdzLgorCitzdHIoKSBvbiBhIFRhZyBhbHdheXMgcmV0dXJucyBhIHN0cmluZywgYW5kIHVuaWNvZGUoKSBhbHdheXMgcmV0dXJucworVW5pY29kZS4gUHJldmlvdXNseSBpdCB3YXMgaW5jb25zaXN0ZW50LgorCis9PSBUcmVlIHRyYXZlcnNhbCA9PQorCitJbiBhIGZpcnN0KCkgb3IgZmV0Y2goKSBjYWxsLCB0aGUgdGFnIG5hbWUgb3IgdGhlIGRlc2lyZWQgdmFsdWUgb2YgYW4KK2F0dHJpYnV0ZSBjYW4gbm93IGJlIGFueSBvZiB0aGUgZm9sbG93aW5nOgorCisgKiBBIHN0cmluZyAobWF0Y2hlcyB0aGF0IHNwZWNpZmljIHRhZyBvciB0aGF0IHNwZWNpZmljIGF0dHJpYnV0ZSB2YWx1ZSkKKyAqIEEgbGlzdCBvZiBzdHJpbmdzIChtYXRjaGVzIGFueSB0YWcgb3IgYXR0cmlidXRlIHZhbHVlIGluIHRoZSBsaXN0KQorICogQSBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0IChtYXRjaGVzIGFueSB0YWcgb3IgYXR0cmlidXRlCisgICB2YWx1ZSB0aGF0IG1hdGNoZXMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbikKKyAqIEEgY2FsbGFibGUgb2JqZWN0IHRoYXQgdGFrZXMgdGhlIFRhZyBvYmplY3Qgb3IgYXR0cmlidXRlIHZhbHVlIGFzIGEKKyAgIHN0cmluZy4gSXQgcmV0dXJucyBOb25lL2ZhbHNlL2VtcHR5IHN0cmluZyBpZiB0aGUgZ2l2ZW4gc3RyaW5nCisgICBkb2Vzbid0IG1hdGNoLCBhbmQgYW55IG90aGVyIHZhbHVlIGlmIGl0IGRvZXMuCisKK1RoaXMgaXMgbXVjaCBlYXNpZXIgdG8gdXNlIHRoYW4gU1FMLXN0eWxlIHdpbGRjYXJkcyAoc2VlLCByZWd1bGFyCitleHByZXNzaW9ucyBhcmUgZ29vZCBmb3Igc29tZXRoaW5nKS4gQmVjYXVzZSBvZiB0aGlzLCBJIHRvb2sgb3V0CitTUUwtc3R5bGUgd2lsZGNhcmRzLiBJJ2xsIHB1dCB0aGVtIGJhY2sgaWYgc29tZW9uZSBjb21wbGFpbnMsIGJ1dAordGhlaXIgcmVtb3ZhbCBzaW1wbGlmaWVzIHRoZSBjb2RlIGEgbG90LgorCitZb3UgY2FuIHVzZSBmZXRjaCgpIGFuZCBmaXJzdCgpIHRvIHNlYXJjaCBmb3IgdGV4dCBpbiB0aGUgcGFyc2UgdHJlZSwKK25vdCBqdXN0IHRhZ3MuIFRoZXJlIGFyZSBuZXcgYWxpYXMgbWV0aG9kcyBmZXRjaFRleHQoKSBhbmQgZmlyc3RUZXh0KCkKK2Rlc2lnbmVkIGZvciB0aGlzIHB1cnBvc2UuIEFzIHdpdGggc2VhcmNoaW5nIGZvciB0YWdzLCB5b3UgY2FuIHBhc3MgaW4KK2Egc3RyaW5nLCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3QsIG9yIGEgbWV0aG9kIHRvIG1hdGNoIHlvdXIgdGV4dC4KKworSWYgeW91IHBhc3MgaW4gc29tZXRoaW5nIGJlc2lkZXMgYSBtYXAgdG8gdGhlIGF0dHJzIGFyZ3VtZW50IG9mCitmZXRjaCgpIG9yIGZpcnN0KCksIEJlYXV0aWZ1bCBTb3VwIHdpbGwgYXNzdW1lIHlvdSB3YW50IHRvIG1hdGNoIHRoYXQKK3RoaW5nIGFnYWluc3QgdGhlICJjbGFzcyIgYXR0cmlidXRlLiBXaGVuIHlvdSdyZSBzY3JhcGluZword2VsbC1zdHJ1Y3R1cmVkIEhUTUwsIHRoaXMgbWFrZXMgeW91ciBjb2RlIGEgbG90IGNsZWFuZXIuCisKKzEueCBhbmQgMi54IGJvdGggbGV0IHlvdSBjYWxsIGEgVGFnIG9iamVjdCBhcyBhIHNob3J0aGFuZCBmb3IKK2ZldGNoKCkuIEZvciBpbnN0YW5jZSwgZm9vKCJiYXIiKSBpcyBhIHNob3J0aGFuZCBmb3IKK2Zvby5mZXRjaCgiYmFyIikuIEluIDIueCwgeW91IGNhbiBhbHNvIGFjY2VzcyBhIHNwZWNpYWxseS1uYW1lZCBtZW1iZXIKK29mIGEgVGFnIG9iamVjdCBhcyBhIHNob3J0aGFuZCBmb3IgZmlyc3QoKS4gRm9yIGluc3RhbmNlLCBmb28uYmFyVGFnCitpcyBhIHNob3J0aGFuZCBmb3IgZm9vLmZpcnN0KCJiYXIiKS4gQnkgY2hhaW5pbmcgdGhlc2Ugc2hvcnRjdXRzIHlvdQordHJhdmVyc2UgYSB0cmVlIGluIHZlcnkgbGl0dGxlIGNvZGU6IGZvciBoZWFkZXIgaW4KK3NvdXAuYm9keVRhZy5wVGFnLnRhYmxlVGFnKCd0aCcpOgorCitJZiBhbiBlbGVtZW50IHJlbGF0aW9uc2hpcCAobGlrZSBwYXJlbnQgb3IgbmV4dCkgZG9lc24ndCBhcHBseSB0byBhCit0YWcsIGl0J2xsIG5vdyBzaG93IHVwIE51bGwgaW5zdGVhZCBvZiBOb25lLiBmaXJzdCgpIHdpbGwgYWxzbyByZXR1cm4KK051bGwgaWYgeW91IGFzayBpdCBmb3IgYSBub25leGlzdGVudCB0YWcuIE51bGwgaXMgYW4gb2JqZWN0IHRoYXQncworanVzdCBsaWtlIE5vbmUsIGV4Y2VwdCB5b3UgY2FuIGRvIHdoYXRldmVyIHlvdSB3YW50IHRvIGl0IGFuZCBpdCdsbAorZ2l2ZSB5b3UgTnVsbCBpbnN0ZWFkIG9mIHRocm93aW5nIGFuIGVycm9yLgorCitUaGlzIGxldHMgeW91IGRvIHRyZWUgdHJhdmVyc2FscyBsaWtlIHNvdXAuaHRtbFRhZy5oZWFkVGFnLnRpdGxlVGFnCit3aXRob3V0IGhhdmluZyB0byB3b3JyeSBpZiB0aGUgaW50ZXJtZWRpYXRlIHN0YWdlcyBhcmUgYWN0dWFsbHkKK3RoZXJlLiBQcmV2aW91c2x5LCBpZiB0aGVyZSB3YXMgbm8gJ2hlYWQnIHRhZyBpbiB0aGUgZG9jdW1lbnQsIGhlYWRUYWcKK2luIHRoYXQgaW5zdGFuY2Ugd291bGQgaGF2ZSBiZWVuIE5vbmUsIGFuZCBhY2Nlc3NpbmcgaXRzICd0aXRsZVRhZycKK21lbWJlciB3b3VsZCBoYXZlIHRocm93biBhbiBBdHRyaWJ1dGVFcnJvci4gTm93LCB5b3UgY2FuIGdldCB3aGF0IHlvdQord2FudCB3aGVuIGl0IGV4aXN0cywgYW5kIGdldCBOdWxsIHdoZW4gaXQgZG9lc24ndCwgd2l0aG91dCBoYXZpbmcgdG8KK2RvIGEgbG90IG9mIGNvbmRpdGlvbmFscyBjaGVja2luZyB0byBzZWUgaWYgZXZlcnkgc3RhZ2UgaXMgTm9uZS4KKworVGhlcmUgYXJlIHR3byBuZXcgcmVsYXRpb25zIGJldHdlZW4gcGFnZSBlbGVtZW50czogcHJldmlvdXNTaWJsaW5nIGFuZAorbmV4dFNpYmxpbmcuIFRoZXkgcmVmZXJlbmNlIHRoZSBwcmV2aW91cyBhbmQgbmV4dCBlbGVtZW50IGF0IHRoZSBzYW1lCitsZXZlbCBvZiB0aGUgcGFyc2UgdHJlZS4gRm9yIGluc3RhbmNlLCBpZiB5b3UgaGF2ZSBIVE1MIGxpa2UgdGhpczoKKworICA8cD48dWw+PGxpPkZvbzxiciAvPjxsaT5CYXI8L3VsPgorCitUaGUgZmlyc3QgJ2xpJyB0YWcgaGFzIGEgcHJldmlvdXNTaWJsaW5nIG9mIE51bGwgYW5kIGl0cyBuZXh0U2libGluZworaXMgdGhlIHNlY29uZCAnbGknIHRhZy4gVGhlIHNlY29uZCAnbGknIHRhZyBoYXMgYSBuZXh0U2libGluZyBvZiBOdWxsCithbmQgaXRzIHByZXZpb3VzU2libGluZyBpcyB0aGUgZmlyc3QgJ2xpJyB0YWcuIFRoZSBwcmV2aW91c1NpYmxpbmcgb2YKK3RoZSAndWwnIHRhZyBpcyB0aGUgZmlyc3QgJ3AnIHRhZy4gVGhlIG5leHRTaWJsaW5nIG9mICdGb28nIGlzIHRoZQorJ2JyJyB0YWcuCisKK0kgdG9vayBvdXQgdGhlIGFiaWxpdHkgdG8gdXNlIGZldGNoKCkgdG8gZmluZCB0YWdzIHRoYXQgaGF2ZSBhCitzcGVjaWZpYyBsaXN0IG9mIGNvbnRlbnRzLiBTZWUsIEkgY2FuJ3QgZXZlbiBleHBsYWluIGl0IHdlbGwuIEl0IHdhcworcmVhbGx5IGRpZmZpY3VsdCB0byB1c2UsIEkgbmV2ZXIgdXNlZCBpdCwgYW5kIEkgZG9uJ3QgdGhpbmsgYW55b25lCitlbHNlIGV2ZXIgdXNlZCBpdC4gVG8gdGhlIGV4dGVudCBhbnlvbmUgZGlkLCB0aGV5IGNhbiBwcm9iYWJseSB1c2UKK2ZldGNoVGV4dCgpIGluc3RlYWQuIElmIGl0IHR1cm5zIG91dCBzb21lb25lIG5lZWRzIGl0IEknbGwgdGhpbmsgb2YKK2Fub3RoZXIgc29sdXRpb24uCisKKz09IFRyZWUgbWFuaXB1bGF0aW9uID09CisKK1lvdSBjYW4gYWRkIG5ldyBhdHRyaWJ1dGVzIHRvIGEgdGFnLCBhbmQgZGVsZXRlIGF0dHJpYnV0ZXMgZnJvbSBhCit0YWcuIEluIDEueCB5b3UgY291bGQgb25seSBjaGFuZ2UgYSB0YWcncyBleGlzdGluZyBhdHRyaWJ1dGVzLgorCis9PSBQb3J0aW5nIENvbnNpZGVyYXRpb25zID09CisKK1RoZXJlIGFyZSB0aHJlZSBjaGFuZ2VzIGluIDIuMCB0aGF0IGJyZWFrIG9sZCBjb2RlOgorCitJbiB0aGUgcG9zdC0xLjIgcmVsZWFzZSB5b3UgY291bGQgcGFzcyBpbiBhIGZ1bmN0aW9uIGludG8gZmV0Y2goKS4gVGhlCitmdW5jdGlvbiB0b29rIGEgc3RyaW5nLCB0aGUgdGFnIG5hbWUuIEluIDIuMCwgdGhlIGZ1bmN0aW9uIHRha2VzIHRoZQorYWN0dWFsIFRhZyBvYmplY3QuCisKK0l0J3Mgbm8gbG9uZ2VyIHRvIHBhc3MgaW4gU1FMLXN0eWxlIHdpbGRjYXJkcyB0byBmZXRjaCgpLiBVc2UgYQorcmVndWxhciBleHByZXNzaW9uIGluc3RlYWQuCisKK1RoZSBkaWZmZXJlbnQgcGFyc2luZyBhbGdvcml0aG0gbWVhbnMgdGhlIHBhcnNlIHRyZWUgbWF5IG5vdCBiZSBzaGFwZWQKK2xpa2UgeW91IGV4cGVjdC4gVGhpcyB3aWxsIG9ubHkgYWN0dWFsbHkgYWZmZWN0IHlvdSBpZiB5b3VyIGNvZGUgdXNlcworb25lIG9mIHRoZSBhZmZlY3RlZCBwYXJ0cy4gSSBoYXZlbid0IHJ1biBpbnRvIHRoaXMgcHJvYmxlbSB5ZXQgd2hpbGUKK3BvcnRpbmcgbXkgY29kZS4KKworPSBCZXR3ZWVuIDEuMiBhbmQgMi4wID0KKworVGhpcyBpcyB0aGUgcmVsZWFzZSB0byBnZXQgaWYgeW91IHdhbnQgUHl0aG9uIDEuNSBjb21wYXRpYmlsaXR5LgorCitUaGUgZGVzaXJlZCB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgY2FuIG5vdyBiZSBhbnkgb2YgdGhlIGZvbGxvd2luZzoKKworICogQSBzdHJpbmcKKyAqIEEgc3RyaW5nIHdpdGggU1FMLXN0eWxlIHdpbGRjYXJkcworICogQSBjb21waWxlZCBSRSBvYmplY3QKKyAqIEEgY2FsbGFibGUgdGhhdCByZXR1cm5zIE5vbmUvZmFsc2UvZW1wdHkgc3RyaW5nIGlmIHRoZSBnaXZlbiB2YWx1ZQorICAgZG9lc24ndCBtYXRjaCwgYW5kIGFueSBvdGhlciB2YWx1ZSBvdGhlcndpc2UuCisKK1RoaXMgaXMgbXVjaCBlYXNpZXIgdG8gdXNlIHRoYW4gU1FMLXN0eWxlIHdpbGRjYXJkcyAoc2VlLCByZWd1bGFyCitleHByZXNzaW9ucyBhcmUgZ29vZCBmb3Igc29tZXRoaW5nKS4gQmVjYXVzZSBvZiB0aGlzLCBJIG5vIGxvbmdlcgorcmVjb21tZW5kIHlvdSB1c2UgU1FMLXN0eWxlIHdpbGRjYXJkcy4gVGhleSBtYXkgZ28gYXdheSBpbiBhIGZ1dHVyZQorcmVsZWFzZSB0byBjbGVhbiB1cCB0aGUgY29kZS4KKworTWFkZSBCZWF1dGlmdWwgU291cCBoYW5kbGUgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMgYXMgdGV4dCBpbnN0ZWFkIG9mCitpZ25vcmluZyB0aGVtLgorCitBcHBsaWVkIHBhdGNoIGZyb20gUmljaGllIEhpbmRsZSAocmljaGllIGF0IGVudHJpYW4gZG90IGNvbSkgdGhhdAorbWFrZXMgdGFnLnN0cmluZyBhIHNob3J0aGFuZCBmb3IgdGFnLmNvbnRlbnRzWzBdLnN0cmluZyB3aGVuIHRoZSB0YWcKK2hhcyBvbmx5IG9uZSBzdHJpbmctb3duaW5nIGNoaWxkLgorCitBZGRlZCBzdGlsbCBtb3JlIG5lc3RhYmxlIHRhZ3MuIFRoZSBuZXN0YWJsZSB0YWdzIHRoaW5nIHdvbid0IHdvcmsgaW4KK2EgbG90IG9mIGNhc2VzIGFuZCBuZWVkcyB0byBiZSByZXRob3VnaHQuCisKK0ZpeGVkIGFuIGVkZ2UgY2FzZSB3aGVyZSBzZWFyY2hpbmcgZm9yICIlZm9vIiB3b3VsZCBtYXRjaCBhbnkgc3RyaW5nCitzaG9ydGVyIHRoYW4gImZvbyIuCisKKz0gMS4yICJXaG8gZm9yIHN1Y2ggZGFpbnRpZXMgd291bGQgbm90IHN0b29wPyIgKDIwMDQwNzA4KSA9CisKK0FwcGxpZWQgcGF0Y2ggZnJvbSBCZW4gTGFzdCAoYmVuIGF0IGJlbmxhc3QgZG90IGNvbSkgdGhhdCBtYWRlCitUYWcucmVuZGVyQ29udGVudHMoKSBjb3JyZWN0bHkgaGFuZGxlIFVuaWNvZGUuCisKK01hZGUgQmVhdXRpZnVsU3RvbmVTb3VwIGV2ZW4gZHVtYmVyIGJ5IG1ha2luZyBpdCBub3QgaW1wbGljaXRseSBjbG9zZQorYSB0YWcgd2hlbiBhbm90aGVyIHRhZyBvZiB0aGUgc2FtZSB0eXBlIGlzIGVuY291bnRlcmVkOyBvbmx5IHdoZW4gYW4KK2FjdHVhbCBjbG9zaW5nIHRhZyBpcyBlbmNvdW50ZXJlZC4gVGhpcyBjaGFuZ2UgY291cnRlc3kgb2YgRnV6enkgKG1pa2UKK2F0IHBjYmxva2VzIGRvdCBjb20pLiBCZWF1dGlmdWxTb3VwIHN0aWxsIHdvcmtzIGFzIGJlZm9yZS4KKworPSAxLjEgIlN3aW1taW5nIGluIGEgaG90IHR1cmVlbiIgPQorCitBZGRlZCBtb3JlICduZXN0YWJsZScgdGFncy4gQ2hhbmdlZCBwb3BwaW5nIHNlbWFudGljcyBzbyB0aGF0IHdoZW4gYQorbmVzdGFibGUgdGFnIGlzIGVuY291bnRlcmVkLCB0YWdzIGFyZSBwb3BwZWQgdXAgdG8gdGhlIHByZXZpb3VzbHkKK2VuY291bnRlcmVkIG5lc3RhYmxlIHRhZyAob2Ygd2hhdGV2ZXIga2luZCkuIEkgd2lsbCByZXZlcnQgdGhpcyBpZgorZW5vdWdoIHBlb3BsZSBjb21wbGFpbiwgYnV0IGl0IHNob3VsZCBtYWtlIG1vcmUgcGVvcGxlJ3MgbGl2ZXMgZWFzaWVyCit0aGFuIGhhcmRlci4gVGhpcyBlbmhhbmNlbWVudCB3YXMgc3VnZ2VzdGVkIGJ5IEFudGhvbnkgQmF4dGVyIChhbnRob255CithdCBpbnRlcmxpbmsgZG90IGNvbSBkb3QgYXUpLgorCis9IDEuMCAiU28gcmljaCBhbmQgZ3JlZW4iICgyMDA0MDQyMCkgPQorCitJbml0aWFsIHJlbGVhc2UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYTM0MjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9fX2luaXRfXy5weQpAQCAtMCwwICsxLDQwNiBAQAorIiIiQmVhdXRpZnVsIFNvdXAKK0VsaXhpciBhbmQgVG9uaWMKKyJUaGUgU2NyZWVuLVNjcmFwZXIncyBGcmllbmQiCitodHRwOi8vd3d3LmNydW1teS5jb20vc29mdHdhcmUvQmVhdXRpZnVsU291cC8KKworQmVhdXRpZnVsIFNvdXAgdXNlcyBhIHBsdWdnYWJsZSBYTUwgb3IgSFRNTCBwYXJzZXIgdG8gcGFyc2UgYQorKHBvc3NpYmx5IGludmFsaWQpIGRvY3VtZW50IGludG8gYSB0cmVlIHJlcHJlc2VudGF0aW9uLiBCZWF1dGlmdWwgU291cAorcHJvdmlkZXMgcHJvdmlkZXMgbWV0aG9kcyBhbmQgUHl0aG9uaWMgaWRpb21zIHRoYXQgbWFrZSBpdCBlYXN5IHRvCituYXZpZ2F0ZSwgc2VhcmNoLCBhbmQgbW9kaWZ5IHRoZSBwYXJzZSB0cmVlLgorCitCZWF1dGlmdWwgU291cCB3b3JrcyB3aXRoIFB5dGhvbiAyLjYgYW5kIHVwLiBJdCB3b3JrcyBiZXR0ZXIgaWYgbHhtbAorYW5kL29yIGh0bWw1bGliIGlzIGluc3RhbGxlZC4KKworRm9yIG1vcmUgdGhhbiB5b3UgZXZlciB3YW50ZWQgdG8ga25vdyBhYm91dCBCZWF1dGlmdWwgU291cCwgc2VlIHRoZQorZG9jdW1lbnRhdGlvbjoKK2h0dHA6Ly93d3cuY3J1bW15LmNvbS9zb2Z0d2FyZS9CZWF1dGlmdWxTb3VwL2JzNC9kb2MvCisiIiIKKworX19hdXRob3JfXyA9ICJMZW9uYXJkIFJpY2hhcmRzb24gKGxlb25hcmRyQHNlZ2ZhdWx0Lm9yZykiCitfX3ZlcnNpb25fXyA9ICI0LjMuMiIKK19fY29weXJpZ2h0X18gPSAiQ29weXJpZ2h0IChjKSAyMDA0LTIwMTMgTGVvbmFyZCBSaWNoYXJkc29uIgorX19saWNlbnNlX18gPSAiTUlUIgorCitfX2FsbF9fID0gWydCZWF1dGlmdWxTb3VwJ10KKworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCB3YXJuaW5ncworCitmcm9tIC5idWlsZGVyIGltcG9ydCBidWlsZGVyX3JlZ2lzdHJ5LCBQYXJzZXJSZWplY3RlZE1hcmt1cAorZnJvbSAuZGFtbWl0IGltcG9ydCBVbmljb2RlRGFtbWl0Citmcm9tIC5lbGVtZW50IGltcG9ydCAoCisgICAgQ0RhdGEsCisgICAgQ29tbWVudCwKKyAgICBERUZBVUxUX09VVFBVVF9FTkNPRElORywKKyAgICBEZWNsYXJhdGlvbiwKKyAgICBEb2N0eXBlLAorICAgIE5hdmlnYWJsZVN0cmluZywKKyAgICBQYWdlRWxlbWVudCwKKyAgICBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sCisgICAgUmVzdWx0U2V0LAorICAgIFNvdXBTdHJhaW5lciwKKyAgICBUYWcsCisgICAgKQorCisjIFRoZSB2ZXJ5IGZpcnN0IHRoaW5nIHdlIGRvIGlzIGdpdmUgYSB1c2VmdWwgZXJyb3IgaWYgc29tZW9uZSBpcworIyBydW5uaW5nIHRoaXMgY29kZSB1bmRlciBQeXRob24gMyB3aXRob3V0IGNvbnZlcnRpbmcgaXQuCitzeW50YXhfZXJyb3IgPSB1J1lvdSBhcmUgdHJ5aW5nIHRvIHJ1biB0aGUgUHl0aG9uIDIgdmVyc2lvbiBvZiBCZWF1dGlmdWwgU291cCB1bmRlciBQeXRob24gMy4gVGhpcyB3aWxsIG5vdCB3b3JrLiBZb3UgbmVlZCB0byBjb252ZXJ0IHRoZSBjb2RlLCBlaXRoZXIgYnkgaW5zdGFsbGluZyBpdCAoYHB5dGhvbiBzZXR1cC5weSBpbnN0YWxsYCkgb3IgYnkgcnVubmluZyAydG8zIChgMnRvMyAtdyBiczRgKS4nCisKK2NsYXNzIEJlYXV0aWZ1bFNvdXAoVGFnKToKKyAgICAiIiIKKyAgICBUaGlzIGNsYXNzIGRlZmluZXMgdGhlIGJhc2ljIGludGVyZmFjZSBjYWxsZWQgYnkgdGhlIHRyZWUgYnVpbGRlcnMuCisKKyAgICBUaGVzZSBtZXRob2RzIHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBwYXJzZXI6CisgICAgICByZXNldCgpCisgICAgICBmZWVkKG1hcmt1cCkKKworICAgIFRoZSB0cmVlIGJ1aWxkZXIgbWF5IGNhbGwgdGhlc2UgbWV0aG9kcyBmcm9tIGl0cyBmZWVkKCkgaW1wbGVtZW50YXRpb246CisgICAgICBoYW5kbGVfc3RhcnR0YWcobmFtZSwgYXR0cnMpICMgU2VlIG5vdGUgYWJvdXQgcmV0dXJuIHZhbHVlCisgICAgICBoYW5kbGVfZW5kdGFnKG5hbWUpCisgICAgICBoYW5kbGVfZGF0YShkYXRhKSAjIEFwcGVuZHMgdG8gdGhlIGN1cnJlbnQgZGF0YSBub2RlCisgICAgICBlbmREYXRhKGNvbnRhaW5lckNsYXNzPU5hdmlnYWJsZVN0cmluZykgIyBFbmRzIHRoZSBjdXJyZW50IGRhdGEgbm9kZQorCisgICAgTm8gbWF0dGVyIGhvdyBjb21wbGljYXRlZCB0aGUgdW5kZXJseWluZyBwYXJzZXIgaXMsIHlvdSBzaG91bGQgYmUKKyAgICBhYmxlIHRvIGJ1aWxkIGEgdHJlZSB1c2luZyAnc3RhcnQgdGFnJyBldmVudHMsICdlbmQgdGFnJyBldmVudHMsCisgICAgJ2RhdGEnIGV2ZW50cywgYW5kICJkb25lIHdpdGggZGF0YSIgZXZlbnRzLgorCisgICAgSWYgeW91IGVuY291bnRlciBhbiBlbXB0eS1lbGVtZW50IHRhZyAoYWthIGEgc2VsZi1jbG9zaW5nIHRhZywKKyAgICBsaWtlIEhUTUwncyA8YnI+IHRhZyksIGNhbGwgaGFuZGxlX3N0YXJ0dGFnIGFuZCB0aGVuCisgICAgaGFuZGxlX2VuZHRhZy4KKyAgICAiIiIKKyAgICBST09UX1RBR19OQU1FID0gdSdbZG9jdW1lbnRdJworCisgICAgIyBJZiB0aGUgZW5kLXVzZXIgZ2l2ZXMgbm8gaW5kaWNhdGlvbiB3aGljaCB0cmVlIGJ1aWxkZXIgdGhleQorICAgICMgd2FudCwgbG9vayBmb3Igb25lIHdpdGggdGhlc2UgZmVhdHVyZXMuCisgICAgREVGQVVMVF9CVUlMREVSX0ZFQVRVUkVTID0gWydodG1sJywgJ2Zhc3QnXQorCisgICAgQVNDSUlfU1BBQ0VTID0gJ1x4MjBceDBhXHgwOVx4MGNceDBkJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcmt1cD0iIiwgZmVhdHVyZXM9Tm9uZSwgYnVpbGRlcj1Ob25lLAorICAgICAgICAgICAgICAgICBwYXJzZV9vbmx5PU5vbmUsIGZyb21fZW5jb2Rpbmc9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJUaGUgU291cCBvYmplY3QgaXMgaW5pdGlhbGl6ZWQgYXMgdGhlICdyb290IHRhZycsIGFuZCB0aGUKKyAgICAgICAgcHJvdmlkZWQgbWFya3VwICh3aGljaCBjYW4gYmUgYSBzdHJpbmcgb3IgYSBmaWxlLWxpa2Ugb2JqZWN0KQorICAgICAgICBpcyBmZWQgaW50byB0aGUgdW5kZXJseWluZyBwYXJzZXIuIiIiCisKKyAgICAgICAgaWYgJ2NvbnZlcnRFbnRpdGllcycgaW4ga3dhcmdzOgorICAgICAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICAgICAiQlM0IGRvZXMgbm90IHJlc3BlY3QgdGhlIGNvbnZlcnRFbnRpdGllcyBhcmd1bWVudCB0byB0aGUgIgorICAgICAgICAgICAgICAgICJCZWF1dGlmdWxTb3VwIGNvbnN0cnVjdG9yLiBFbnRpdGllcyBhcmUgYWx3YXlzIGNvbnZlcnRlZCAiCisgICAgICAgICAgICAgICAgInRvIFVuaWNvZGUgY2hhcmFjdGVycy4iKQorCisgICAgICAgIGlmICdtYXJrdXBNYXNzYWdlJyBpbiBrd2FyZ3M6CisgICAgICAgICAgICBkZWwga3dhcmdzWydtYXJrdXBNYXNzYWdlJ10KKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAgICAgIkJTNCBkb2VzIG5vdCByZXNwZWN0IHRoZSBtYXJrdXBNYXNzYWdlIGFyZ3VtZW50IHRvIHRoZSAiCisgICAgICAgICAgICAgICAgIkJlYXV0aWZ1bFNvdXAgY29uc3RydWN0b3IuIFRoZSB0cmVlIGJ1aWxkZXIgaXMgcmVzcG9uc2libGUgIgorICAgICAgICAgICAgICAgICJmb3IgYW55IG5lY2Vzc2FyeSBtYXJrdXAgbWFzc2FnZS4iKQorCisgICAgICAgIGlmICdzbWFydFF1b3Rlc1RvJyBpbiBrd2FyZ3M6CisgICAgICAgICAgICBkZWwga3dhcmdzWydzbWFydFF1b3Rlc1RvJ10KKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAgICAgIkJTNCBkb2VzIG5vdCByZXNwZWN0IHRoZSBzbWFydFF1b3Rlc1RvIGFyZ3VtZW50IHRvIHRoZSAiCisgICAgICAgICAgICAgICAgIkJlYXV0aWZ1bFNvdXAgY29uc3RydWN0b3IuIFNtYXJ0IHF1b3RlcyBhcmUgYWx3YXlzIGNvbnZlcnRlZCAiCisgICAgICAgICAgICAgICAgInRvIFVuaWNvZGUgY2hhcmFjdGVycy4iKQorCisgICAgICAgIGlmICdzZWxmQ2xvc2luZ1RhZ3MnIGluIGt3YXJnczoKKyAgICAgICAgICAgIGRlbCBrd2FyZ3NbJ3NlbGZDbG9zaW5nVGFncyddCisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgICAgICJCUzQgZG9lcyBub3QgcmVzcGVjdCB0aGUgc2VsZkNsb3NpbmdUYWdzIGFyZ3VtZW50IHRvIHRoZSAiCisgICAgICAgICAgICAgICAgIkJlYXV0aWZ1bFNvdXAgY29uc3RydWN0b3IuIFRoZSB0cmVlIGJ1aWxkZXIgaXMgcmVzcG9uc2libGUgIgorICAgICAgICAgICAgICAgICJmb3IgdW5kZXJzdGFuZGluZyBzZWxmLWNsb3NpbmcgdGFncy4iKQorCisgICAgICAgIGlmICdpc0hUTUwnIGluIGt3YXJnczoKKyAgICAgICAgICAgIGRlbCBrd2FyZ3NbJ2lzSFRNTCddCisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgICAgICJCUzQgZG9lcyBub3QgcmVzcGVjdCB0aGUgaXNIVE1MIGFyZ3VtZW50IHRvIHRoZSAiCisgICAgICAgICAgICAgICAgIkJlYXV0aWZ1bFNvdXAgY29uc3RydWN0b3IuIFlvdSBjYW4gcGFzcyBpbiBmZWF0dXJlcz0naHRtbCcgIgorICAgICAgICAgICAgICAgICJvciBmZWF0dXJlcz0neG1sJyB0byBnZXQgYSBidWlsZGVyIGNhcGFibGUgb2YgaGFuZGxpbmcgIgorICAgICAgICAgICAgICAgICJvbmUgb3IgdGhlIG90aGVyLiIpCisKKyAgICAgICAgZGVmIGRlcHJlY2F0ZWRfYXJndW1lbnQob2xkX25hbWUsIG5ld19uYW1lKToKKyAgICAgICAgICAgIGlmIG9sZF9uYW1lIGluIGt3YXJnczoKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgICAgICAgICAnVGhlICIlcyIgYXJndW1lbnQgdG8gdGhlIEJlYXV0aWZ1bFNvdXAgY29uc3RydWN0b3IgJworICAgICAgICAgICAgICAgICAgICAnaGFzIGJlZW4gcmVuYW1lZCB0byAiJXMuIicgJSAob2xkX25hbWUsIG5ld19uYW1lKSkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGt3YXJnc1tvbGRfbmFtZV0KKyAgICAgICAgICAgICAgICBkZWwga3dhcmdzW29sZF9uYW1lXQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBwYXJzZV9vbmx5ID0gcGFyc2Vfb25seSBvciBkZXByZWNhdGVkX2FyZ3VtZW50KAorICAgICAgICAgICAgInBhcnNlT25seVRoZXNlIiwgInBhcnNlX29ubHkiKQorCisgICAgICAgIGZyb21fZW5jb2RpbmcgPSBmcm9tX2VuY29kaW5nIG9yIGRlcHJlY2F0ZWRfYXJndW1lbnQoCisgICAgICAgICAgICAiZnJvbUVuY29kaW5nIiwgImZyb21fZW5jb2RpbmciKQorCisgICAgICAgIGlmIGxlbihrd2FyZ3MpID4gMDoKKyAgICAgICAgICAgIGFyZyA9IGt3YXJncy5rZXlzKCkucG9wKCkKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigKKyAgICAgICAgICAgICAgICAiX19pbml0X18oKSBnb3QgYW4gdW5leHBlY3RlZCBrZXl3b3JkIGFyZ3VtZW50ICclcyciICUgYXJnKQorCisgICAgICAgIGlmIGJ1aWxkZXIgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZmVhdHVyZXMsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAgIGZlYXR1cmVzID0gW2ZlYXR1cmVzXQorICAgICAgICAgICAgaWYgZmVhdHVyZXMgaXMgTm9uZSBvciBsZW4oZmVhdHVyZXMpID09IDA6CisgICAgICAgICAgICAgICAgZmVhdHVyZXMgPSBzZWxmLkRFRkFVTFRfQlVJTERFUl9GRUFUVVJFUworICAgICAgICAgICAgYnVpbGRlcl9jbGFzcyA9IGJ1aWxkZXJfcmVnaXN0cnkubG9va3VwKCpmZWF0dXJlcykKKyAgICAgICAgICAgIGlmIGJ1aWxkZXJfY2xhc3MgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBGZWF0dXJlTm90Rm91bmQoCisgICAgICAgICAgICAgICAgICAgICJDb3VsZG4ndCBmaW5kIGEgdHJlZSBidWlsZGVyIHdpdGggdGhlIGZlYXR1cmVzIHlvdSAiCisgICAgICAgICAgICAgICAgICAgICJyZXF1ZXN0ZWQ6ICVzLiBEbyB5b3UgbmVlZCB0byBpbnN0YWxsIGEgcGFyc2VyIGxpYnJhcnk/IgorICAgICAgICAgICAgICAgICAgICAlICIsIi5qb2luKGZlYXR1cmVzKSkKKyAgICAgICAgICAgIGJ1aWxkZXIgPSBidWlsZGVyX2NsYXNzKCkKKyAgICAgICAgc2VsZi5idWlsZGVyID0gYnVpbGRlcgorICAgICAgICBzZWxmLmlzX3htbCA9IGJ1aWxkZXIuaXNfeG1sCisgICAgICAgIHNlbGYuYnVpbGRlci5zb3VwID0gc2VsZgorCisgICAgICAgIHNlbGYucGFyc2Vfb25seSA9IHBhcnNlX29ubHkKKworICAgICAgICBpZiBoYXNhdHRyKG1hcmt1cCwgJ3JlYWQnKTogICAgICAgICMgSXQncyBhIGZpbGUtdHlwZSBvYmplY3QuCisgICAgICAgICAgICBtYXJrdXAgPSBtYXJrdXAucmVhZCgpCisgICAgICAgIGVsaWYgbGVuKG1hcmt1cCkgPD0gMjU2OgorICAgICAgICAgICAgIyBQcmludCBvdXQgd2FybmluZ3MgZm9yIGEgY291cGxlIGJlZ2lubmVyIHByb2JsZW1zCisgICAgICAgICAgICAjIGludm9sdmluZyBwYXNzaW5nIG5vbi1tYXJrdXAgdG8gQmVhdXRpZnVsIFNvdXAuCisgICAgICAgICAgICAjIEJlYXV0aWZ1bCBTb3VwIHdpbGwgc3RpbGwgcGFyc2UgdGhlIGlucHV0IGFzIG1hcmt1cCwKKyAgICAgICAgICAgICMganVzdCBpbiBjYXNlIHRoYXQncyB3aGF0IHRoZSB1c2VyIHJlYWxseSB3YW50cy4KKyAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKG1hcmt1cCwgdW5pY29kZSkKKyAgICAgICAgICAgICAgICBhbmQgbm90IG9zLnBhdGguc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXMpOgorICAgICAgICAgICAgICAgIHBvc3NpYmxlX2ZpbGVuYW1lID0gbWFya3VwLmVuY29kZSgidXRmOCIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBvc3NpYmxlX2ZpbGVuYW1lID0gbWFya3VwCisgICAgICAgICAgICBpc19maWxlID0gRmFsc2UKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpc19maWxlID0gb3MucGF0aC5leGlzdHMocG9zc2libGVfZmlsZW5hbWUpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgICMgVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IGEgcHJvYmxlbSBpbnZvbHZpbmcKKyAgICAgICAgICAgICAgICAjIGNoYXJhY3RlcnMgbm90IHZhbGlkIGluIGZpbGVuYW1lcyBvbiB0aGlzCisgICAgICAgICAgICAgICAgIyBzeXN0ZW0uIEp1c3QgbGV0IGl0IGdvLgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGlmIGlzX2ZpbGU6CisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICAgICAgICAgJyIlcyIgbG9va3MgbGlrZSBhIGZpbGVuYW1lLCBub3QgbWFya3VwLiBZb3Ugc2hvdWxkIHByb2JhYmx5IG9wZW4gdGhpcyBmaWxlIGFuZCBwYXNzIHRoZSBmaWxlaGFuZGxlIGludG8gQmVhdXRpZnVsIFNvdXAuJyAlIG1hcmt1cCkKKyAgICAgICAgICAgIGlmIG1hcmt1cFs6NV0gPT0gImh0dHA6IiBvciBtYXJrdXBbOjZdID09ICJodHRwczoiOgorICAgICAgICAgICAgICAgICMgVE9ETzogVGhpcyBpcyB1Z2x5IGJ1dCBJIGNvdWxkbid0IGdldCBpdCB0byB3b3JrIGluCisgICAgICAgICAgICAgICAgIyBQeXRob24gMyBvdGhlcndpc2UuCisgICAgICAgICAgICAgICAgaWYgKChpc2luc3RhbmNlKG1hcmt1cCwgYnl0ZXMpIGFuZCBub3QgYicgJyBpbiBtYXJrdXApCisgICAgICAgICAgICAgICAgICAgIG9yIChpc2luc3RhbmNlKG1hcmt1cCwgdW5pY29kZSkgYW5kIG5vdCB1JyAnIGluIG1hcmt1cCkpOgorICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgICAgICAgICAgICAgJyIlcyIgbG9va3MgbGlrZSBhIFVSTC4gQmVhdXRpZnVsIFNvdXAgaXMgbm90IGFuIEhUVFAgY2xpZW50LiBZb3Ugc2hvdWxkIHByb2JhYmx5IHVzZSBhbiBIVFRQIGNsaWVudCB0byBnZXQgdGhlIGRvY3VtZW50IGJlaGluZCB0aGUgVVJMLCBhbmQgZmVlZCB0aGF0IGRvY3VtZW50IHRvIEJlYXV0aWZ1bCBTb3VwLicgJSBtYXJrdXApCisKKyAgICAgICAgZm9yIChzZWxmLm1hcmt1cCwgc2VsZi5vcmlnaW5hbF9lbmNvZGluZywgc2VsZi5kZWNsYXJlZF9odG1sX2VuY29kaW5nLAorICAgICAgICAgc2VsZi5jb250YWluc19yZXBsYWNlbWVudF9jaGFyYWN0ZXJzKSBpbiAoCisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIucHJlcGFyZV9tYXJrdXAobWFya3VwLCBmcm9tX2VuY29kaW5nKSk6CisgICAgICAgICAgICBzZWxmLnJlc2V0KCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9mZWVkKCkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IFBhcnNlclJlamVjdGVkTWFya3VwOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIENsZWFyIG91dCB0aGUgbWFya3VwIGFuZCByZW1vdmUgdGhlIGJ1aWxkZXIncyBjaXJjdWxhcgorICAgICAgICAjIHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdC4KKyAgICAgICAgc2VsZi5tYXJrdXAgPSBOb25lCisgICAgICAgIHNlbGYuYnVpbGRlci5zb3VwID0gTm9uZQorCisgICAgZGVmIF9mZWVkKHNlbGYpOgorICAgICAgICAjIENvbnZlcnQgdGhlIGRvY3VtZW50IHRvIFVuaWNvZGUuCisgICAgICAgIHNlbGYuYnVpbGRlci5yZXNldCgpCisKKyAgICAgICAgc2VsZi5idWlsZGVyLmZlZWQoc2VsZi5tYXJrdXApCisgICAgICAgICMgQ2xvc2Ugb3V0IGFueSB1bmZpbmlzaGVkIHN0cmluZ3MgYW5kIGNsb3NlIGFsbCB0aGUgb3BlbiB0YWdzLgorICAgICAgICBzZWxmLmVuZERhdGEoKQorICAgICAgICB3aGlsZSBzZWxmLmN1cnJlbnRUYWcubmFtZSAhPSBzZWxmLlJPT1RfVEFHX05BTUU6CisgICAgICAgICAgICBzZWxmLnBvcFRhZygpCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIFRhZy5fX2luaXRfXyhzZWxmLCBzZWxmLCBzZWxmLmJ1aWxkZXIsIHNlbGYuUk9PVF9UQUdfTkFNRSkKKyAgICAgICAgc2VsZi5oaWRkZW4gPSAxCisgICAgICAgIHNlbGYuYnVpbGRlci5yZXNldCgpCisgICAgICAgIHNlbGYuY3VycmVudF9kYXRhID0gW10KKyAgICAgICAgc2VsZi5jdXJyZW50VGFnID0gTm9uZQorICAgICAgICBzZWxmLnRhZ1N0YWNrID0gW10KKyAgICAgICAgc2VsZi5wcmVzZXJ2ZV93aGl0ZXNwYWNlX3RhZ19zdGFjayA9IFtdCisgICAgICAgIHNlbGYucHVzaFRhZyhzZWxmKQorCisgICAgZGVmIG5ld190YWcoc2VsZiwgbmFtZSwgbmFtZXNwYWNlPU5vbmUsIG5zcHJlZml4PU5vbmUsICoqYXR0cnMpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgdGFnIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNvdXAuIiIiCisgICAgICAgIHJldHVybiBUYWcoTm9uZSwgc2VsZi5idWlsZGVyLCBuYW1lLCBuYW1lc3BhY2UsIG5zcHJlZml4LCBhdHRycykKKworICAgIGRlZiBuZXdfc3RyaW5nKHNlbGYsIHMsIHN1YmNsYXNzPU5hdmlnYWJsZVN0cmluZyk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBOYXZpZ2FibGVTdHJpbmcgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc291cC4iIiIKKyAgICAgICAgbmF2aWdhYmxlID0gc3ViY2xhc3MocykKKyAgICAgICAgbmF2aWdhYmxlLnNldHVwKCkKKyAgICAgICAgcmV0dXJuIG5hdmlnYWJsZQorCisgICAgZGVmIGluc2VydF9iZWZvcmUoc2VsZiwgc3VjY2Vzc29yKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiQmVhdXRpZnVsU291cCBvYmplY3RzIGRvbid0IHN1cHBvcnQgaW5zZXJ0X2JlZm9yZSgpLiIpCisKKyAgICBkZWYgaW5zZXJ0X2FmdGVyKHNlbGYsIHN1Y2Nlc3Nvcik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIkJlYXV0aWZ1bFNvdXAgb2JqZWN0cyBkb24ndCBzdXBwb3J0IGluc2VydF9hZnRlcigpLiIpCisKKyAgICBkZWYgcG9wVGFnKHNlbGYpOgorICAgICAgICB0YWcgPSBzZWxmLnRhZ1N0YWNrLnBvcCgpCisgICAgICAgIGlmIHNlbGYucHJlc2VydmVfd2hpdGVzcGFjZV90YWdfc3RhY2sgYW5kIHRhZyA9PSBzZWxmLnByZXNlcnZlX3doaXRlc3BhY2VfdGFnX3N0YWNrWy0xXToKKyAgICAgICAgICAgIHNlbGYucHJlc2VydmVfd2hpdGVzcGFjZV90YWdfc3RhY2sucG9wKCkKKyAgICAgICAgI3ByaW50ICJQb3AiLCB0YWcubmFtZQorICAgICAgICBpZiBzZWxmLnRhZ1N0YWNrOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50VGFnID0gc2VsZi50YWdTdGFja1stMV0KKyAgICAgICAgcmV0dXJuIHNlbGYuY3VycmVudFRhZworCisgICAgZGVmIHB1c2hUYWcoc2VsZiwgdGFnKToKKyAgICAgICAgI3ByaW50ICJQdXNoIiwgdGFnLm5hbWUKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50VGFnOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50VGFnLmNvbnRlbnRzLmFwcGVuZCh0YWcpCisgICAgICAgIHNlbGYudGFnU3RhY2suYXBwZW5kKHRhZykKKyAgICAgICAgc2VsZi5jdXJyZW50VGFnID0gc2VsZi50YWdTdGFja1stMV0KKyAgICAgICAgaWYgdGFnLm5hbWUgaW4gc2VsZi5idWlsZGVyLnByZXNlcnZlX3doaXRlc3BhY2VfdGFnczoKKyAgICAgICAgICAgIHNlbGYucHJlc2VydmVfd2hpdGVzcGFjZV90YWdfc3RhY2suYXBwZW5kKHRhZykKKworICAgIGRlZiBlbmREYXRhKHNlbGYsIGNvbnRhaW5lckNsYXNzPU5hdmlnYWJsZVN0cmluZyk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9kYXRhOgorICAgICAgICAgICAgY3VycmVudF9kYXRhID0gdScnLmpvaW4oc2VsZi5jdXJyZW50X2RhdGEpCisgICAgICAgICAgICAjIElmIHdoaXRlc3BhY2UgaXMgbm90IHByZXNlcnZlZCwgYW5kIHRoaXMgc3RyaW5nIGNvbnRhaW5zCisgICAgICAgICAgICAjIG5vdGhpbmcgYnV0IEFTQ0lJIHNwYWNlcywgcmVwbGFjZSBpdCB3aXRoIGEgc2luZ2xlIHNwYWNlCisgICAgICAgICAgICAjIG9yIG5ld2xpbmUuCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5wcmVzZXJ2ZV93aGl0ZXNwYWNlX3RhZ19zdGFjazoKKyAgICAgICAgICAgICAgICBzdHJpcHBhYmxlID0gVHJ1ZQorICAgICAgICAgICAgICAgIGZvciBpIGluIGN1cnJlbnRfZGF0YToKKyAgICAgICAgICAgICAgICAgICAgaWYgaSBub3QgaW4gc2VsZi5BU0NJSV9TUEFDRVM6CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcHBhYmxlID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgc3RyaXBwYWJsZToKKyAgICAgICAgICAgICAgICAgICAgaWYgJ1xuJyBpbiBjdXJyZW50X2RhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2RhdGEgPSAnXG4nCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2RhdGEgPSAnICcKKworICAgICAgICAgICAgIyBSZXNldCB0aGUgZGF0YSBjb2xsZWN0b3IuCisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfZGF0YSA9IFtdCisKKyAgICAgICAgICAgICMgU2hvdWxkIHdlIGFkZCB0aGlzIHN0cmluZyB0byB0aGUgdHJlZSBhdCBhbGw/CisgICAgICAgICAgICBpZiBzZWxmLnBhcnNlX29ubHkgYW5kIGxlbihzZWxmLnRhZ1N0YWNrKSA8PSAxIGFuZCBcCisgICAgICAgICAgICAgICAgICAgKG5vdCBzZWxmLnBhcnNlX29ubHkudGV4dCBvciBcCisgICAgICAgICAgICAgICAgICAgIG5vdCBzZWxmLnBhcnNlX29ubHkuc2VhcmNoKGN1cnJlbnRfZGF0YSkpOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBvID0gY29udGFpbmVyQ2xhc3MoY3VycmVudF9kYXRhKQorICAgICAgICAgICAgc2VsZi5vYmplY3Rfd2FzX3BhcnNlZChvKQorCisgICAgZGVmIG9iamVjdF93YXNfcGFyc2VkKHNlbGYsIG8sIHBhcmVudD1Ob25lLCBtb3N0X3JlY2VudF9lbGVtZW50PU5vbmUpOgorICAgICAgICAiIiJBZGQgYW4gb2JqZWN0IHRvIHRoZSBwYXJzZSB0cmVlLiIiIgorICAgICAgICBwYXJlbnQgPSBwYXJlbnQgb3Igc2VsZi5jdXJyZW50VGFnCisgICAgICAgIG1vc3RfcmVjZW50X2VsZW1lbnQgPSBtb3N0X3JlY2VudF9lbGVtZW50IG9yIHNlbGYuX21vc3RfcmVjZW50X2VsZW1lbnQKKyAgICAgICAgby5zZXR1cChwYXJlbnQsIG1vc3RfcmVjZW50X2VsZW1lbnQpCisKKyAgICAgICAgaWYgbW9zdF9yZWNlbnRfZWxlbWVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG1vc3RfcmVjZW50X2VsZW1lbnQubmV4dF9lbGVtZW50ID0gbworICAgICAgICBzZWxmLl9tb3N0X3JlY2VudF9lbGVtZW50ID0gbworICAgICAgICBwYXJlbnQuY29udGVudHMuYXBwZW5kKG8pCisKKyAgICBkZWYgX3BvcFRvVGFnKHNlbGYsIG5hbWUsIG5zcHJlZml4PU5vbmUsIGluY2x1c2l2ZVBvcD1UcnVlKToKKyAgICAgICAgIiIiUG9wcyB0aGUgdGFnIHN0YWNrIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIG1vc3QgcmVjZW50CisgICAgICAgIGluc3RhbmNlIG9mIHRoZSBnaXZlbiB0YWcuIElmIGluY2x1c2l2ZVBvcCBpcyBmYWxzZSwgcG9wcyB0aGUgdGFnCisgICAgICAgIHN0YWNrIHVwIHRvIGJ1dCAqbm90KiBpbmNsdWRpbmcgdGhlIG1vc3QgcmVjZW50IGluc3RxYW5jZSBvZgorICAgICAgICB0aGUgZ2l2ZW4gdGFnLiIiIgorICAgICAgICAjcHJpbnQgIlBvcHBpbmcgdG8gJXMiICUgbmFtZQorICAgICAgICBpZiBuYW1lID09IHNlbGYuUk9PVF9UQUdfTkFNRToKKyAgICAgICAgICAgICMgVGhlIEJlYXV0aWZ1bFNvdXAgb2JqZWN0IGl0c2VsZiBjYW4gbmV2ZXIgYmUgcG9wcGVkLgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbW9zdF9yZWNlbnRseV9wb3BwZWQgPSBOb25lCisKKyAgICAgICAgc3RhY2tfc2l6ZSA9IGxlbihzZWxmLnRhZ1N0YWNrKQorICAgICAgICBmb3IgaSBpbiByYW5nZShzdGFja19zaXplIC0gMSwgMCwgLTEpOgorICAgICAgICAgICAgdCA9IHNlbGYudGFnU3RhY2tbaV0KKyAgICAgICAgICAgIGlmIChuYW1lID09IHQubmFtZSBhbmQgbnNwcmVmaXggPT0gdC5wcmVmaXgpOgorICAgICAgICAgICAgICAgIGlmIGluY2x1c2l2ZVBvcDoKKyAgICAgICAgICAgICAgICAgICAgbW9zdF9yZWNlbnRseV9wb3BwZWQgPSBzZWxmLnBvcFRhZygpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIG1vc3RfcmVjZW50bHlfcG9wcGVkID0gc2VsZi5wb3BUYWcoKQorCisgICAgICAgIHJldHVybiBtb3N0X3JlY2VudGx5X3BvcHBlZAorCisgICAgZGVmIGhhbmRsZV9zdGFydHRhZyhzZWxmLCBuYW1lLCBuYW1lc3BhY2UsIG5zcHJlZml4LCBhdHRycyk6CisgICAgICAgICIiIlB1c2ggYSBzdGFydCB0YWcgb24gdG8gdGhlIHN0YWNrLgorCisgICAgICAgIElmIHRoaXMgbWV0aG9kIHJldHVybnMgTm9uZSwgdGhlIHRhZyB3YXMgcmVqZWN0ZWQgYnkgdGhlCisgICAgICAgIFNvdXBTdHJhaW5lci4gWW91IHNob3VsZCBwcm9jZWVkIGFzIGlmIHRoZSB0YWcgaGFkIG5vdCBvY2N1cmVkCisgICAgICAgIGluIHRoZSBkb2N1bWVudC4gRm9yIGluc3RhbmNlLCBpZiB0aGlzIHdhcyBhIHNlbGYtY2xvc2luZyB0YWcsCisgICAgICAgIGRvbid0IGNhbGwgaGFuZGxlX2VuZHRhZy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBwcmludCAiU3RhcnQgdGFnICVzOiAlcyIgJSAobmFtZSwgYXR0cnMpCisgICAgICAgIHNlbGYuZW5kRGF0YSgpCisKKyAgICAgICAgaWYgKHNlbGYucGFyc2Vfb25seSBhbmQgbGVuKHNlbGYudGFnU3RhY2spIDw9IDEKKyAgICAgICAgICAgIGFuZCAoc2VsZi5wYXJzZV9vbmx5LnRleHQKKyAgICAgICAgICAgICAgICAgb3Igbm90IHNlbGYucGFyc2Vfb25seS5zZWFyY2hfdGFnKG5hbWUsIGF0dHJzKSkpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICB0YWcgPSBUYWcoc2VsZiwgc2VsZi5idWlsZGVyLCBuYW1lLCBuYW1lc3BhY2UsIG5zcHJlZml4LCBhdHRycywKKyAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFRhZywgc2VsZi5fbW9zdF9yZWNlbnRfZWxlbWVudCkKKyAgICAgICAgaWYgdGFnIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gdGFnCisgICAgICAgIGlmIHNlbGYuX21vc3RfcmVjZW50X2VsZW1lbnQ6CisgICAgICAgICAgICBzZWxmLl9tb3N0X3JlY2VudF9lbGVtZW50Lm5leHRfZWxlbWVudCA9IHRhZworICAgICAgICBzZWxmLl9tb3N0X3JlY2VudF9lbGVtZW50ID0gdGFnCisgICAgICAgIHNlbGYucHVzaFRhZyh0YWcpCisgICAgICAgIHJldHVybiB0YWcKKworICAgIGRlZiBoYW5kbGVfZW5kdGFnKHNlbGYsIG5hbWUsIG5zcHJlZml4PU5vbmUpOgorICAgICAgICAjcHJpbnQgIkVuZCB0YWc6ICIgKyBuYW1lCisgICAgICAgIHNlbGYuZW5kRGF0YSgpCisgICAgICAgIHNlbGYuX3BvcFRvVGFnKG5hbWUsIG5zcHJlZml4KQorCisgICAgZGVmIGhhbmRsZV9kYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmN1cnJlbnRfZGF0YS5hcHBlbmQoZGF0YSkKKworICAgIGRlZiBkZWNvZGUoc2VsZiwgcHJldHR5X3ByaW50PUZhbHNlLAorICAgICAgICAgICAgICAgZXZlbnR1YWxfZW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5DT0RJTkcsCisgICAgICAgICAgICAgICBmb3JtYXR0ZXI9Im1pbmltYWwiKToKKyAgICAgICAgIiIiUmV0dXJucyBhIHN0cmluZyBvciBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgZG9jdW1lbnQuCisgICAgICAgIFRvIGdldCBVbmljb2RlLCBwYXNzIE5vbmUgZm9yIGVuY29kaW5nLiIiIgorCisgICAgICAgIGlmIHNlbGYuaXNfeG1sOgorICAgICAgICAgICAgIyBQcmludCB0aGUgWE1MIGRlY2xhcmF0aW9uCisgICAgICAgICAgICBlbmNvZGluZ19wYXJ0ID0gJycKKyAgICAgICAgICAgIGlmIGV2ZW50dWFsX2VuY29kaW5nICE9IE5vbmU6CisgICAgICAgICAgICAgICAgZW5jb2RpbmdfcGFydCA9ICcgZW5jb2Rpbmc9IiVzIicgJSBldmVudHVhbF9lbmNvZGluZworICAgICAgICAgICAgcHJlZml4ID0gdSc8P3htbCB2ZXJzaW9uPSIxLjAiJXM/PlxuJyAlIGVuY29kaW5nX3BhcnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByZWZpeCA9IHUnJworICAgICAgICBpZiBub3QgcHJldHR5X3ByaW50OgorICAgICAgICAgICAgaW5kZW50X2xldmVsID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW5kZW50X2xldmVsID0gMAorICAgICAgICByZXR1cm4gcHJlZml4ICsgc3VwZXIoQmVhdXRpZnVsU291cCwgc2VsZikuZGVjb2RlKAorICAgICAgICAgICAgaW5kZW50X2xldmVsLCBldmVudHVhbF9lbmNvZGluZywgZm9ybWF0dGVyKQorCisjIEFsaWFzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHR5cGUgaW1wb3J0OiAnZnJvbSBiczQgaW1wb3J0IF9zb3VwJworX3MgPSBCZWF1dGlmdWxTb3VwCitfc291cCA9IEJlYXV0aWZ1bFNvdXAKKworY2xhc3MgQmVhdXRpZnVsU3RvbmVTb3VwKEJlYXV0aWZ1bFNvdXApOgorICAgICIiIkRlcHJlY2F0ZWQgaW50ZXJmYWNlIHRvIGFuIFhNTCBwYXJzZXIuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAga3dhcmdzWydmZWF0dXJlcyddID0gJ3htbCcKKyAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICdUaGUgQmVhdXRpZnVsU3RvbmVTb3VwIGNsYXNzIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQgb2YgdXNpbmcgJworICAgICAgICAgICAgJ2l0LCBwYXNzIGZlYXR1cmVzPSJ4bWwiIGludG8gdGhlIEJlYXV0aWZ1bFNvdXAgY29uc3RydWN0b3IuJykKKyAgICAgICAgc3VwZXIoQmVhdXRpZnVsU3RvbmVTb3VwLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisKKworY2xhc3MgU3RvcFBhcnNpbmcoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2NsYXNzIEZlYXR1cmVOb3RGb3VuZChWYWx1ZUVycm9yKToKKyAgICBwYXNzCisKKworI0J5IGRlZmF1bHQsIGFjdCBhcyBhbiBIVE1MIHByZXR0eS1wcmludGVyLgoraWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBpbXBvcnQgc3lzCisgICAgc291cCA9IEJlYXV0aWZ1bFNvdXAoc3lzLnN0ZGluKQorICAgIHByaW50IHNvdXAucHJldHRpZnkoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvYnVpbGRlci9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2J1aWxkZXIvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQwZjVmMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2J1aWxkZXIvX19pbml0X18ucHkKQEAgLTAsMCArMSwzMjEgQEAKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgc3lzCitmcm9tIGJzNC5lbGVtZW50IGltcG9ydCAoCisgICAgQ2hhcnNldE1ldGFBdHRyaWJ1dGVWYWx1ZSwKKyAgICBDb250ZW50TWV0YUF0dHJpYnV0ZVZhbHVlLAorICAgIHdoaXRlc3BhY2VfcmUKKyAgICApCisKK19fYWxsX18gPSBbCisgICAgJ0hUTUxUcmVlQnVpbGRlcicsCisgICAgJ1NBWFRyZWVCdWlsZGVyJywKKyAgICAnVHJlZUJ1aWxkZXInLAorICAgICdUcmVlQnVpbGRlclJlZ2lzdHJ5JywKKyAgICBdCisKKyMgU29tZSB1c2VmdWwgZmVhdHVyZXMgZm9yIGEgVHJlZUJ1aWxkZXIgdG8gaGF2ZS4KK0ZBU1QgPSAnZmFzdCcKK1BFUk1JU1NJVkUgPSAncGVybWlzc2l2ZScKK1NUUklDVCA9ICdzdHJpY3QnCitYTUwgPSAneG1sJworSFRNTCA9ICdodG1sJworSFRNTF81ID0gJ2h0bWw1JworCisKK2NsYXNzIFRyZWVCdWlsZGVyUmVnaXN0cnkob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5idWlsZGVyc19mb3JfZmVhdHVyZSA9IGRlZmF1bHRkaWN0KGxpc3QpCisgICAgICAgIHNlbGYuYnVpbGRlcnMgPSBbXQorCisgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIHRyZWVidWlsZGVyX2NsYXNzKToKKyAgICAgICAgIiIiUmVnaXN0ZXIgYSB0cmVlYnVpbGRlciBiYXNlZCBvbiBpdHMgYWR2ZXJ0aXNlZCBmZWF0dXJlcy4iIiIKKyAgICAgICAgZm9yIGZlYXR1cmUgaW4gdHJlZWJ1aWxkZXJfY2xhc3MuZmVhdHVyZXM6CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXJzX2Zvcl9mZWF0dXJlW2ZlYXR1cmVdLmluc2VydCgwLCB0cmVlYnVpbGRlcl9jbGFzcykKKyAgICAgICAgc2VsZi5idWlsZGVycy5pbnNlcnQoMCwgdHJlZWJ1aWxkZXJfY2xhc3MpCisKKyAgICBkZWYgbG9va3VwKHNlbGYsICpmZWF0dXJlcyk6CisgICAgICAgIGlmIGxlbihzZWxmLmJ1aWxkZXJzKSA9PSAwOgorICAgICAgICAgICAgIyBUaGVyZSBhcmUgbm8gYnVpbGRlcnMgYXQgYWxsLgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBpZiBsZW4oZmVhdHVyZXMpID09IDA6CisgICAgICAgICAgICAjIFRoZXkgZGlkbid0IGFzayBmb3IgYW55IGZlYXR1cmVzLiBHaXZlIHRoZW0gdGhlIG1vc3QKKyAgICAgICAgICAgICMgcmVjZW50bHkgcmVnaXN0ZXJlZCBidWlsZGVyLgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnVpbGRlcnNbMF0KKworICAgICAgICAjIEdvIGRvd24gdGhlIGxpc3Qgb2YgZmVhdHVyZXMgaW4gb3JkZXIsIGFuZCBlbGltaW5hdGUgYW55IGJ1aWxkZXJzCisgICAgICAgICMgdGhhdCBkb24ndCBtYXRjaCBldmVyeSBmZWF0dXJlLgorICAgICAgICBmZWF0dXJlcyA9IGxpc3QoZmVhdHVyZXMpCisgICAgICAgIGZlYXR1cmVzLnJldmVyc2UoKQorICAgICAgICBjYW5kaWRhdGVzID0gTm9uZQorICAgICAgICBjYW5kaWRhdGVfc2V0ID0gTm9uZQorICAgICAgICB3aGlsZSBsZW4oZmVhdHVyZXMpID4gMDoKKyAgICAgICAgICAgIGZlYXR1cmUgPSBmZWF0dXJlcy5wb3AoKQorICAgICAgICAgICAgd2VfaGF2ZV90aGVfZmVhdHVyZSA9IHNlbGYuYnVpbGRlcnNfZm9yX2ZlYXR1cmUuZ2V0KGZlYXR1cmUsIFtdKQorICAgICAgICAgICAgaWYgbGVuKHdlX2hhdmVfdGhlX2ZlYXR1cmUpID4gMDoKKyAgICAgICAgICAgICAgICBpZiBjYW5kaWRhdGVzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMgPSB3ZV9oYXZlX3RoZV9mZWF0dXJlCisgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZV9zZXQgPSBzZXQoY2FuZGlkYXRlcykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIEVsaW1pbmF0ZSBhbnkgY2FuZGlkYXRlcyB0aGF0IGRvbid0IGhhdmUgdGhpcyBmZWF0dXJlLgorICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVfc2V0ID0gY2FuZGlkYXRlX3NldC5pbnRlcnNlY3Rpb24oCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQod2VfaGF2ZV90aGVfZmVhdHVyZSkpCisKKyAgICAgICAgIyBUaGUgb25seSB2YWxpZCBjYW5kaWRhdGVzIGFyZSB0aGUgb25lcyBpbiBjYW5kaWRhdGVfc2V0LgorICAgICAgICAjIEdvIHRocm91Z2ggdGhlIG9yaWdpbmFsIGxpc3Qgb2YgY2FuZGlkYXRlcyBhbmQgcGljayB0aGUgZmlyc3Qgb25lCisgICAgICAgICMgdGhhdCdzIGluIGNhbmRpZGF0ZV9zZXQuCisgICAgICAgIGlmIGNhbmRpZGF0ZV9zZXQgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGZvciBjYW5kaWRhdGUgaW4gY2FuZGlkYXRlczoKKyAgICAgICAgICAgIGlmIGNhbmRpZGF0ZSBpbiBjYW5kaWRhdGVfc2V0OgorICAgICAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGUKKyAgICAgICAgcmV0dXJuIE5vbmUKKworIyBUaGUgQmVhdXRpZnVsU291cCBjbGFzcyB3aWxsIHRha2UgZmVhdHVyZSBsaXN0cyBmcm9tIGRldmVsb3BlcnMgYW5kIHVzZSB0aGVtCisjIHRvIGxvb2sgdXAgYnVpbGRlcnMgaW4gdGhpcyByZWdpc3RyeS4KK2J1aWxkZXJfcmVnaXN0cnkgPSBUcmVlQnVpbGRlclJlZ2lzdHJ5KCkKKworY2xhc3MgVHJlZUJ1aWxkZXIob2JqZWN0KToKKyAgICAiIiJUdXJuIGEgZG9jdW1lbnQgaW50byBhIEJlYXV0aWZ1bCBTb3VwIG9iamVjdCB0cmVlLiIiIgorCisgICAgZmVhdHVyZXMgPSBbXQorCisgICAgaXNfeG1sID0gRmFsc2UKKyAgICBwcmVzZXJ2ZV93aGl0ZXNwYWNlX3RhZ3MgPSBzZXQoKQorICAgIGVtcHR5X2VsZW1lbnRfdGFncyA9IE5vbmUgIyBBIHRhZyB3aWxsIGJlIGNvbnNpZGVyZWQgYW4gZW1wdHktZWxlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0YWcgd2hlbiBhbmQgb25seSB3aGVuIGl0IGhhcyBubyBjb250ZW50cy4KKworICAgICMgQSB2YWx1ZSBmb3IgdGhlc2UgdGFnL2F0dHJpYnV0ZSBjb21iaW5hdGlvbnMgaXMgYSBzcGFjZS0gb3IKKyAgICAjIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIENEQVRBLCByYXRoZXIgdGhhbiBhIHNpbmdsZSBDREFUQS4KKyAgICBjZGF0YV9saXN0X2F0dHJpYnV0ZXMgPSB7fQorCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuc291cCA9IE5vbmUKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGNhbl9iZV9lbXB0eV9lbGVtZW50KHNlbGYsIHRhZ19uYW1lKToKKyAgICAgICAgIiIiTWlnaHQgYSB0YWcgd2l0aCB0aGlzIG5hbWUgYmUgYW4gZW1wdHktZWxlbWVudCB0YWc/CisKKyAgICAgICAgVGhlIGZpbmFsIG1hcmt1cCBtYXkgb3IgbWF5IG5vdCBhY3R1YWxseSBwcmVzZW50IHRoaXMgdGFnIGFzCisgICAgICAgIHNlbGYtY2xvc2luZy4KKworICAgICAgICBGb3IgaW5zdGFuY2U6IGFuIEhUTUxCdWlsZGVyIGRvZXMgbm90IGNvbnNpZGVyIGEgPHA+IHRhZyB0byBiZQorICAgICAgICBhbiBlbXB0eS1lbGVtZW50IHRhZyAoaXQncyBub3QgaW4KKyAgICAgICAgSFRNTEJ1aWxkZXIuZW1wdHlfZWxlbWVudF90YWdzKS4gVGhpcyBtZWFucyBhbiBlbXB0eSA8cD4gdGFnCisgICAgICAgIHdpbGwgYmUgcHJlc2VudGVkIGFzICI8cD48L3A+Iiwgbm90ICI8cCAvPiIuCisKKyAgICAgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaGFzIG5vIG9waW5pb24gYWJvdXQgd2hpY2ggdGFncyBhcmUKKyAgICAgICAgZW1wdHktZWxlbWVudCB0YWdzLCBzbyBhIHRhZyB3aWxsIGJlIHByZXNlbnRlZCBhcyBhbgorICAgICAgICBlbXB0eS1lbGVtZW50IHRhZyBpZiBhbmQgb25seSBpZiBpdCBoYXMgbm8gY29udGVudHMuCisgICAgICAgICI8Zm9vPjwvZm9vPiIgd2lsbCBiZWNvbWUgIjxmb28gLz4iLCBhbmQgIjxmb28+YmFyPC9mb28+IiB3aWxsCisgICAgICAgIGJlIGxlZnQgYWxvbmUuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLmVtcHR5X2VsZW1lbnRfdGFncyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIHRhZ19uYW1lIGluIHNlbGYuZW1wdHlfZWxlbWVudF90YWdzCisKKyAgICBkZWYgZmVlZChzZWxmLCBtYXJrdXApOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBwcmVwYXJlX21hcmt1cChzZWxmLCBtYXJrdXAsIHVzZXJfc3BlY2lmaWVkX2VuY29kaW5nPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50X2RlY2xhcmVkX2VuY29kaW5nPU5vbmUpOgorICAgICAgICByZXR1cm4gbWFya3VwLCBOb25lLCBOb25lLCBGYWxzZQorCisgICAgZGVmIHRlc3RfZnJhZ21lbnRfdG9fZG9jdW1lbnQoc2VsZiwgZnJhZ21lbnQpOgorICAgICAgICAiIiJXcmFwIGFuIEhUTUwgZnJhZ21lbnQgdG8gbWFrZSBpdCBsb29rIGxpa2UgYSBkb2N1bWVudC4KKworICAgICAgICBEaWZmZXJlbnQgcGFyc2VycyBkbyB0aGlzIGRpZmZlcmVudGx5LiBGb3IgaW5zdGFuY2UsIGx4bWwKKyAgICAgICAgaW50cm9kdWNlcyBhbiBlbXB0eSA8aGVhZD4gdGFnLCBhbmQgaHRtbDVsaWIKKyAgICAgICAgZG9lc24ndC4gQWJzdHJhY3RpbmcgdGhpcyBhd2F5IGxldHMgdXMgd3JpdGUgc2ltcGxlIHRlc3RzCisgICAgICAgIHdoaWNoIHJ1biBIVE1MIGZyYWdtZW50cyB0aHJvdWdoIHRoZSBwYXJzZXIgYW5kIGNvbXBhcmUgdGhlCisgICAgICAgIHJlc3VsdHMgYWdhaW5zdCBvdGhlciBIVE1MIGZyYWdtZW50cy4KKworICAgICAgICBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIHVzZWQgb3V0c2lkZSBvZiB0ZXN0cy4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBmcmFnbWVudAorCisgICAgZGVmIHNldF91cF9zdWJzdGl0dXRpb25zKHNlbGYsIHRhZyk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9yZXBsYWNlX2NkYXRhX2xpc3RfYXR0cmlidXRlX3ZhbHVlcyhzZWxmLCB0YWdfbmFtZSwgYXR0cnMpOgorICAgICAgICAiIiJSZXBsYWNlcyBjbGFzcz0iZm9vIGJhciIgd2l0aCBjbGFzcz1bImZvbyIsICJiYXIiXQorCisgICAgICAgIE1vZGlmaWVzIGl0cyBpbnB1dCBpbiBwbGFjZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBhdHRyczoKKyAgICAgICAgICAgIHJldHVybiBhdHRycworICAgICAgICBpZiBzZWxmLmNkYXRhX2xpc3RfYXR0cmlidXRlczoKKyAgICAgICAgICAgIHVuaXZlcnNhbCA9IHNlbGYuY2RhdGFfbGlzdF9hdHRyaWJ1dGVzLmdldCgnKicsIFtdKQorICAgICAgICAgICAgdGFnX3NwZWNpZmljID0gc2VsZi5jZGF0YV9saXN0X2F0dHJpYnV0ZXMuZ2V0KAorICAgICAgICAgICAgICAgIHRhZ19uYW1lLmxvd2VyKCksIE5vbmUpCisgICAgICAgICAgICBmb3IgYXR0ciBpbiBhdHRycy5rZXlzKCk6CisgICAgICAgICAgICAgICAgaWYgYXR0ciBpbiB1bml2ZXJzYWwgb3IgKHRhZ19zcGVjaWZpYyBhbmQgYXR0ciBpbiB0YWdfc3BlY2lmaWMpOgorICAgICAgICAgICAgICAgICAgICAjIFdlIGhhdmUgYSAiY2xhc3MiLXR5cGUgYXR0cmlidXRlIHdob3NlIHN0cmluZworICAgICAgICAgICAgICAgICAgICAjIHZhbHVlIGlzIGEgd2hpdGVzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgICAjIHZhbHVlcy4gU3BsaXQgaXQgaW50byBhIGxpc3QuCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXR0cnNbYXR0cl0KKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB3aGl0ZXNwYWNlX3JlLnNwbGl0KHZhbHVlKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBodG1sNWxpYiBzb21ldGltZXMgY2FsbHMgc2V0QXR0cmlidXRlcyB0d2ljZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBmb3IgdGhlIHNhbWUgdGFnIHdoZW4gcmVhcnJhbmdpbmcgdGhlIHBhcnNlCisgICAgICAgICAgICAgICAgICAgICAgICAjIHRyZWUuIE9uIHRoZSBzZWNvbmQgY2FsbCB0aGUgYXR0cmlidXRlIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAjIGhlcmUgaXMgYWxyZWFkeSBhIGxpc3QuICBJZiB0aGlzIGhhcHBlbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAjIGxlYXZlIHRoZSB2YWx1ZSBhbG9uZSByYXRoZXIgdGhhbiB0cnlpbmcgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICMgc3BsaXQgaXQgYWdhaW4uCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICBhdHRyc1thdHRyXSA9IHZhbHVlcworICAgICAgICByZXR1cm4gYXR0cnMKKworY2xhc3MgU0FYVHJlZUJ1aWxkZXIoVHJlZUJ1aWxkZXIpOgorICAgICIiIkEgQmVhdXRpZnVsIFNvdXAgdHJlZWJ1aWxkZXIgdGhhdCBsaXN0ZW5zIGZvciBTQVggZXZlbnRzLiIiIgorCisgICAgZGVmIGZlZWQoc2VsZiwgbWFya3VwKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdGFydEVsZW1lbnQoc2VsZiwgbmFtZSwgYXR0cnMpOgorICAgICAgICBhdHRycyA9IGRpY3QoKGtleVsxXSwgdmFsdWUpIGZvciBrZXksIHZhbHVlIGluIGxpc3QoYXR0cnMuaXRlbXMoKSkpCisgICAgICAgICNwcmludCAiU3RhcnQgJXMsICVyIiAlIChuYW1lLCBhdHRycykKKyAgICAgICAgc2VsZi5zb3VwLmhhbmRsZV9zdGFydHRhZyhuYW1lLCBhdHRycykKKworICAgIGRlZiBlbmRFbGVtZW50KHNlbGYsIG5hbWUpOgorICAgICAgICAjcHJpbnQgIkVuZCAlcyIgJSBuYW1lCisgICAgICAgIHNlbGYuc291cC5oYW5kbGVfZW5kdGFnKG5hbWUpCisKKyAgICBkZWYgc3RhcnRFbGVtZW50TlMoc2VsZiwgbnNUdXBsZSwgbm9kZU5hbWUsIGF0dHJzKToKKyAgICAgICAgIyBUaHJvdyBhd2F5IChucywgbm9kZU5hbWUpIGZvciBub3cuCisgICAgICAgIHNlbGYuc3RhcnRFbGVtZW50KG5vZGVOYW1lLCBhdHRycykKKworICAgIGRlZiBlbmRFbGVtZW50TlMoc2VsZiwgbnNUdXBsZSwgbm9kZU5hbWUpOgorICAgICAgICAjIFRocm93IGF3YXkgKG5zLCBub2RlTmFtZSkgZm9yIG5vdy4KKyAgICAgICAgc2VsZi5lbmRFbGVtZW50KG5vZGVOYW1lKQorICAgICAgICAjaGFuZGxlci5lbmRFbGVtZW50TlMoKG5zLCBub2RlLm5vZGVOYW1lKSwgbm9kZS5ub2RlTmFtZSkKKworICAgIGRlZiBzdGFydFByZWZpeE1hcHBpbmcoc2VsZiwgcHJlZml4LCBub2RlVmFsdWUpOgorICAgICAgICAjIElnbm9yZSB0aGUgcHJlZml4IGZvciBub3cuCisgICAgICAgIHBhc3MKKworICAgIGRlZiBlbmRQcmVmaXhNYXBwaW5nKHNlbGYsIHByZWZpeCk6CisgICAgICAgICMgSWdub3JlIHRoZSBwcmVmaXggZm9yIG5vdy4KKyAgICAgICAgIyBoYW5kbGVyLmVuZFByZWZpeE1hcHBpbmcocHJlZml4KQorICAgICAgICBwYXNzCisKKyAgICBkZWYgY2hhcmFjdGVycyhzZWxmLCBjb250ZW50KToKKyAgICAgICAgc2VsZi5zb3VwLmhhbmRsZV9kYXRhKGNvbnRlbnQpCisKKyAgICBkZWYgc3RhcnREb2N1bWVudChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGVuZERvY3VtZW50KHNlbGYpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgSFRNTFRyZWVCdWlsZGVyKFRyZWVCdWlsZGVyKToKKyAgICAiIiJUaGlzIFRyZWVCdWlsZGVyIGtub3dzIGZhY3RzIGFib3V0IEhUTUwuCisKKyAgICBTdWNoIGFzIHdoaWNoIHRhZ3MgYXJlIGVtcHR5LWVsZW1lbnQgdGFncy4KKyAgICAiIiIKKworICAgIHByZXNlcnZlX3doaXRlc3BhY2VfdGFncyA9IHNldChbJ3ByZScsICd0ZXh0YXJlYSddKQorICAgIGVtcHR5X2VsZW1lbnRfdGFncyA9IHNldChbJ2JyJyAsICdocicsICdpbnB1dCcsICdpbWcnLCAnbWV0YScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BhY2VyJywgJ2xpbmsnLCAnZnJhbWUnLCAnYmFzZSddKQorCisgICAgIyBUaGUgSFRNTCBzdGFuZGFyZCBkZWZpbmVzIHRoZXNlIGF0dHJpYnV0ZXMgYXMgY29udGFpbmluZyBhCisgICAgIyBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiB2YWx1ZXMsIG5vdCBhIHNpbmdsZSB2YWx1ZS4gVGhhdCBpcywKKyAgICAjIGNsYXNzPSJmb28gYmFyIiBtZWFucyB0aGF0IHRoZSAnY2xhc3MnIGF0dHJpYnV0ZSBoYXMgdHdvIHZhbHVlcywKKyAgICAjICdmb28nIGFuZCAnYmFyJywgbm90IHRoZSBzaW5nbGUgdmFsdWUgJ2ZvbyBiYXInLiAgV2hlbiB3ZQorICAgICMgZW5jb3VudGVyIG9uZSBvZiB0aGVzZSBhdHRyaWJ1dGVzLCB3ZSB3aWxsIHBhcnNlIGl0cyB2YWx1ZSBpbnRvCisgICAgIyBhIGxpc3Qgb2YgdmFsdWVzIGlmIHBvc3NpYmxlLiBVcG9uIG91dHB1dCwgdGhlIGxpc3Qgd2lsbCBiZQorICAgICMgY29udmVydGVkIGJhY2sgaW50byBhIHN0cmluZy4KKyAgICBjZGF0YV9saXN0X2F0dHJpYnV0ZXMgPSB7CisgICAgICAgICIqIiA6IFsnY2xhc3MnLCAnYWNjZXNza2V5JywgJ2Ryb3B6b25lJ10sCisgICAgICAgICJhIiA6IFsncmVsJywgJ3JldiddLAorICAgICAgICAibGluayIgOiAgWydyZWwnLCAncmV2J10sCisgICAgICAgICJ0ZCIgOiBbImhlYWRlcnMiXSwKKyAgICAgICAgInRoIiA6IFsiaGVhZGVycyJdLAorICAgICAgICAidGQiIDogWyJoZWFkZXJzIl0sCisgICAgICAgICJmb3JtIiA6IFsiYWNjZXB0LWNoYXJzZXQiXSwKKyAgICAgICAgIm9iamVjdCIgOiBbImFyY2hpdmUiXSwKKworICAgICAgICAjIFRoZXNlIGFyZSBIVE1MNSBzcGVjaWZpYywgYXMgYXJlICouYWNjZXNza2V5IGFuZCAqLmRyb3B6b25lIGFib3ZlLgorICAgICAgICAiYXJlYSIgOiBbInJlbCJdLAorICAgICAgICAiaWNvbiIgOiBbInNpemVzIl0sCisgICAgICAgICJpZnJhbWUiIDogWyJzYW5kYm94Il0sCisgICAgICAgICJvdXRwdXQiIDogWyJmb3IiXSwKKyAgICAgICAgfQorCisgICAgZGVmIHNldF91cF9zdWJzdGl0dXRpb25zKHNlbGYsIHRhZyk6CisgICAgICAgICMgV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiA8bWV0YT4gdGFncworICAgICAgICBpZiB0YWcubmFtZSAhPSAnbWV0YSc6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBodHRwX2VxdWl2ID0gdGFnLmdldCgnaHR0cC1lcXVpdicpCisgICAgICAgIGNvbnRlbnQgPSB0YWcuZ2V0KCdjb250ZW50JykKKyAgICAgICAgY2hhcnNldCA9IHRhZy5nZXQoJ2NoYXJzZXQnKQorCisgICAgICAgICMgV2UgYXJlIGludGVyZXN0ZWQgaW4gPG1ldGE+IHRhZ3MgdGhhdCBzYXkgd2hhdCBlbmNvZGluZyB0aGUKKyAgICAgICAgIyBkb2N1bWVudCB3YXMgb3JpZ2luYWxseSBpbi4gVGhpcyBtZWFucyBIVE1MIDUtc3R5bGUgPG1ldGE+CisgICAgICAgICMgdGFncyB0aGF0IHByb3ZpZGUgdGhlICJjaGFyc2V0IiBhdHRyaWJ1dGUuIEl0IGFsc28gbWVhbnMKKyAgICAgICAgIyBIVE1MIDQtc3R5bGUgPG1ldGE+IHRhZ3MgdGhhdCBwcm92aWRlIHRoZSAiY29udGVudCIKKyAgICAgICAgIyBhdHRyaWJ1dGUgYW5kIGhhdmUgImh0dHAtZXF1aXYiIHNldCB0byAiY29udGVudC10eXBlIi4KKyAgICAgICAgIworICAgICAgICAjIEluIGJvdGggY2FzZXMgd2Ugd2lsbCByZXBsYWNlIHRoZSB2YWx1ZSBvZiB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgIyBhdHRyaWJ1dGUgd2l0aCBhIHN0YW5kaW4gb2JqZWN0IHRoYXQgY2FuIHRha2Ugb24gYW55CisgICAgICAgICMgZW5jb2RpbmcuCisgICAgICAgIG1ldGFfZW5jb2RpbmcgPSBOb25lCisgICAgICAgIGlmIGNoYXJzZXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIEhUTUwgNSBzdHlsZToKKyAgICAgICAgICAgICMgPG1ldGEgY2hhcnNldD0idXRmOCI+CisgICAgICAgICAgICBtZXRhX2VuY29kaW5nID0gY2hhcnNldAorICAgICAgICAgICAgdGFnWydjaGFyc2V0J10gPSBDaGFyc2V0TWV0YUF0dHJpYnV0ZVZhbHVlKGNoYXJzZXQpCisKKyAgICAgICAgZWxpZiAoY29udGVudCBpcyBub3QgTm9uZSBhbmQgaHR0cF9lcXVpdiBpcyBub3QgTm9uZQorICAgICAgICAgICAgICBhbmQgaHR0cF9lcXVpdi5sb3dlcigpID09ICdjb250ZW50LXR5cGUnKToKKyAgICAgICAgICAgICMgSFRNTCA0IHN0eWxlOgorICAgICAgICAgICAgIyA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGY4Ij4KKyAgICAgICAgICAgIHRhZ1snY29udGVudCddID0gQ29udGVudE1ldGFBdHRyaWJ1dGVWYWx1ZShjb250ZW50KQorCisgICAgICAgIHJldHVybiAobWV0YV9lbmNvZGluZyBpcyBub3QgTm9uZSkKKworZGVmIHJlZ2lzdGVyX3RyZWVidWlsZGVyc19mcm9tKG1vZHVsZSk6CisgICAgIiIiQ29weSBUcmVlQnVpbGRlcnMgZnJvbSB0aGUgZ2l2ZW4gbW9kdWxlIGludG8gdGhpcyBtb2R1bGUuIiIiCisgICAgIyBJJ20gZmFpcmx5IHN1cmUgdGhpcyBpcyBub3QgdGhlIGJlc3Qgd2F5IHRvIGRvIHRoaXMuCisgICAgdGhpc19tb2R1bGUgPSBzeXMubW9kdWxlc1snYnM0LmJ1aWxkZXInXQorICAgIGZvciBuYW1lIGluIG1vZHVsZS5fX2FsbF9fOgorICAgICAgICBvYmogPSBnZXRhdHRyKG1vZHVsZSwgbmFtZSkKKworICAgICAgICBpZiBpc3N1YmNsYXNzKG9iaiwgVHJlZUJ1aWxkZXIpOgorICAgICAgICAgICAgc2V0YXR0cih0aGlzX21vZHVsZSwgbmFtZSwgb2JqKQorICAgICAgICAgICAgdGhpc19tb2R1bGUuX19hbGxfXy5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgICMgUmVnaXN0ZXIgdGhlIGJ1aWxkZXIgd2hpbGUgd2UncmUgYXQgaXQuCisgICAgICAgICAgICB0aGlzX21vZHVsZS5idWlsZGVyX3JlZ2lzdHJ5LnJlZ2lzdGVyKG9iaikKKworY2xhc3MgUGFyc2VyUmVqZWN0ZWRNYXJrdXAoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKyMgQnVpbGRlcnMgYXJlIHJlZ2lzdGVyZWQgaW4gcmV2ZXJzZSBvcmRlciBvZiBwcmlvcml0eSwgc28gdGhhdCBjdXN0b20KKyMgYnVpbGRlciByZWdpc3RyYXRpb25zIHdpbGwgdGFrZSBwcmVjZWRlbmNlLiBJbiBnZW5lcmFsLCB3ZSB3YW50IGx4bWwKKyMgdG8gdGFrZSBwcmVjZWRlbmNlIG92ZXIgaHRtbDVsaWIsIGJlY2F1c2UgaXQncyBmYXN0ZXIuIEFuZCB3ZSBvbmx5CisjIHdhbnQgdG8gdXNlIEhUTUxQYXJzZXIgYXMgYSBsYXN0IHJlc3VsdC4KK2Zyb20gLiBpbXBvcnQgX2h0bWxwYXJzZXIKK3JlZ2lzdGVyX3RyZWVidWlsZGVyc19mcm9tKF9odG1scGFyc2VyKQordHJ5OgorICAgIGZyb20gLiBpbXBvcnQgX2h0bWw1bGliCisgICAgcmVnaXN0ZXJfdHJlZWJ1aWxkZXJzX2Zyb20oX2h0bWw1bGliKQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgICMgVGhleSBkb24ndCBoYXZlIGh0bWw1bGliIGluc3RhbGxlZC4KKyAgICBwYXNzCit0cnk6CisgICAgZnJvbSAuIGltcG9ydCBfbHhtbAorICAgIHJlZ2lzdGVyX3RyZWVidWlsZGVyc19mcm9tKF9seG1sKQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgICMgVGhleSBkb24ndCBoYXZlIGx4bWwgaW5zdGFsbGVkLgorICAgIHBhc3MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2J1aWxkZXIvX2h0bWw1bGliLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvYnVpbGRlci9faHRtbDVsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RlMzZhZTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9idWlsZGVyL19odG1sNWxpYi5weQpAQCAtMCwwICsxLDI4NSBAQAorX19hbGxfXyA9IFsKKyAgICAnSFRNTDVUcmVlQnVpbGRlcicsCisgICAgXQorCitpbXBvcnQgd2FybmluZ3MKK2Zyb20gYnM0LmJ1aWxkZXIgaW1wb3J0ICgKKyAgICBQRVJNSVNTSVZFLAorICAgIEhUTUwsCisgICAgSFRNTF81LAorICAgIEhUTUxUcmVlQnVpbGRlciwKKyAgICApCitmcm9tIGJzNC5lbGVtZW50IGltcG9ydCBOYW1lc3BhY2VkQXR0cmlidXRlCitpbXBvcnQgaHRtbDVsaWIKK2Zyb20gaHRtbDVsaWIuY29uc3RhbnRzIGltcG9ydCBuYW1lc3BhY2VzCitmcm9tIGJzNC5lbGVtZW50IGltcG9ydCAoCisgICAgQ29tbWVudCwKKyAgICBEb2N0eXBlLAorICAgIE5hdmlnYWJsZVN0cmluZywKKyAgICBUYWcsCisgICAgKQorCitjbGFzcyBIVE1MNVRyZWVCdWlsZGVyKEhUTUxUcmVlQnVpbGRlcik6CisgICAgIiIiVXNlIGh0bWw1bGliIHRvIGJ1aWxkIGEgdHJlZS4iIiIKKworICAgIGZlYXR1cmVzID0gWydodG1sNWxpYicsIFBFUk1JU1NJVkUsIEhUTUxfNSwgSFRNTF0KKworICAgIGRlZiBwcmVwYXJlX21hcmt1cChzZWxmLCBtYXJrdXAsIHVzZXJfc3BlY2lmaWVkX2VuY29kaW5nKToKKyAgICAgICAgIyBTdG9yZSB0aGUgdXNlci1zcGVjaWZpZWQgZW5jb2RpbmcgZm9yIHVzZSBsYXRlciBvbi4KKyAgICAgICAgc2VsZi51c2VyX3NwZWNpZmllZF9lbmNvZGluZyA9IHVzZXJfc3BlY2lmaWVkX2VuY29kaW5nCisgICAgICAgIHlpZWxkIChtYXJrdXAsIE5vbmUsIE5vbmUsIEZhbHNlKQorCisgICAgIyBUaGVzZSBtZXRob2RzIGFyZSBkZWZpbmVkIGJ5IEJlYXV0aWZ1bCBTb3VwLgorICAgIGRlZiBmZWVkKHNlbGYsIG1hcmt1cCk6CisgICAgICAgIGlmIHNlbGYuc291cC5wYXJzZV9vbmx5IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgd2FybmluZ3Mud2FybigiWW91IHByb3ZpZGVkIGEgdmFsdWUgZm9yIHBhcnNlX29ubHksIGJ1dCB0aGUgaHRtbDVsaWIgdHJlZSBidWlsZGVyIGRvZXNuJ3Qgc3VwcG9ydCBwYXJzZV9vbmx5LiBUaGUgZW50aXJlIGRvY3VtZW50IHdpbGwgYmUgcGFyc2VkLiIpCisgICAgICAgIHBhcnNlciA9IGh0bWw1bGliLkhUTUxQYXJzZXIodHJlZT1zZWxmLmNyZWF0ZV90cmVlYnVpbGRlcikKKyAgICAgICAgZG9jID0gcGFyc2VyLnBhcnNlKG1hcmt1cCwgZW5jb2Rpbmc9c2VsZi51c2VyX3NwZWNpZmllZF9lbmNvZGluZykKKworICAgICAgICAjIFNldCB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIGRldGVjdGVkIGJ5IHRoZSB0b2tlbml6ZXIuCisgICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwLCB1bmljb2RlKToKKyAgICAgICAgICAgICMgV2UgbmVlZCB0byBzcGVjaWFsLWNhc2UgdGhpcyBiZWNhdXNlIGh0bWw1bGliIHNldHMKKyAgICAgICAgICAgICMgY2hhckVuY29kaW5nIHRvIFVURi04IGlmIGl0IGdldHMgVW5pY29kZSBpbnB1dC4KKyAgICAgICAgICAgIGRvYy5vcmlnaW5hbF9lbmNvZGluZyA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRvYy5vcmlnaW5hbF9lbmNvZGluZyA9IHBhcnNlci50b2tlbml6ZXIuc3RyZWFtLmNoYXJFbmNvZGluZ1swXQorCisgICAgZGVmIGNyZWF0ZV90cmVlYnVpbGRlcihzZWxmLCBuYW1lc3BhY2VIVE1MRWxlbWVudHMpOgorICAgICAgICBzZWxmLnVuZGVybHlpbmdfYnVpbGRlciA9IFRyZWVCdWlsZGVyRm9ySHRtbDVsaWIoCisgICAgICAgICAgICBzZWxmLnNvdXAsIG5hbWVzcGFjZUhUTUxFbGVtZW50cykKKyAgICAgICAgcmV0dXJuIHNlbGYudW5kZXJseWluZ19idWlsZGVyCisKKyAgICBkZWYgdGVzdF9mcmFnbWVudF90b19kb2N1bWVudChzZWxmLCBmcmFnbWVudCk6CisgICAgICAgICIiIlNlZSBgVHJlZUJ1aWxkZXJgLiIiIgorICAgICAgICByZXR1cm4gdSc8aHRtbD48aGVhZD48L2hlYWQ+PGJvZHk+JXM8L2JvZHk+PC9odG1sPicgJSBmcmFnbWVudAorCisKK2NsYXNzIFRyZWVCdWlsZGVyRm9ySHRtbDVsaWIoaHRtbDVsaWIudHJlZWJ1aWxkZXJzLl9iYXNlLlRyZWVCdWlsZGVyKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VwLCBuYW1lc3BhY2VIVE1MRWxlbWVudHMpOgorICAgICAgICBzZWxmLnNvdXAgPSBzb3VwCisgICAgICAgIHN1cGVyKFRyZWVCdWlsZGVyRm9ySHRtbDVsaWIsIHNlbGYpLl9faW5pdF9fKG5hbWVzcGFjZUhUTUxFbGVtZW50cykKKworICAgIGRlZiBkb2N1bWVudENsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnNvdXAucmVzZXQoKQorICAgICAgICByZXR1cm4gRWxlbWVudChzZWxmLnNvdXAsIHNlbGYuc291cCwgTm9uZSkKKworICAgIGRlZiBpbnNlcnREb2N0eXBlKHNlbGYsIHRva2VuKToKKyAgICAgICAgbmFtZSA9IHRva2VuWyJuYW1lIl0KKyAgICAgICAgcHVibGljSWQgPSB0b2tlblsicHVibGljSWQiXQorICAgICAgICBzeXN0ZW1JZCA9IHRva2VuWyJzeXN0ZW1JZCJdCisKKyAgICAgICAgZG9jdHlwZSA9IERvY3R5cGUuZm9yX25hbWVfYW5kX2lkcyhuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpCisgICAgICAgIHNlbGYuc291cC5vYmplY3Rfd2FzX3BhcnNlZChkb2N0eXBlKQorCisgICAgZGVmIGVsZW1lbnRDbGFzcyhzZWxmLCBuYW1lLCBuYW1lc3BhY2UpOgorICAgICAgICB0YWcgPSBzZWxmLnNvdXAubmV3X3RhZyhuYW1lLCBuYW1lc3BhY2UpCisgICAgICAgIHJldHVybiBFbGVtZW50KHRhZywgc2VsZi5zb3VwLCBuYW1lc3BhY2UpCisKKyAgICBkZWYgY29tbWVudENsYXNzKHNlbGYsIGRhdGEpOgorICAgICAgICByZXR1cm4gVGV4dE5vZGUoQ29tbWVudChkYXRhKSwgc2VsZi5zb3VwKQorCisgICAgZGVmIGZyYWdtZW50Q2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYuc291cCA9IEJlYXV0aWZ1bFNvdXAoIiIpCisgICAgICAgIHNlbGYuc291cC5uYW1lID0gIltkb2N1bWVudF9mcmFnbWVudF0iCisgICAgICAgIHJldHVybiBFbGVtZW50KHNlbGYuc291cCwgc2VsZi5zb3VwLCBOb25lKQorCisgICAgZGVmIGFwcGVuZENoaWxkKHNlbGYsIG5vZGUpOgorICAgICAgICAjIFhYWCBUaGlzIGNvZGUgaXMgbm90IGNvdmVyZWQgYnkgdGhlIEJTNCB0ZXN0cy4KKyAgICAgICAgc2VsZi5zb3VwLmFwcGVuZChub2RlLmVsZW1lbnQpCisKKyAgICBkZWYgZ2V0RG9jdW1lbnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNvdXAKKworICAgIGRlZiBnZXRGcmFnbWVudChzZWxmKToKKyAgICAgICAgcmV0dXJuIGh0bWw1bGliLnRyZWVidWlsZGVycy5fYmFzZS5UcmVlQnVpbGRlci5nZXRGcmFnbWVudChzZWxmKS5lbGVtZW50CisKK2NsYXNzIEF0dHJMaXN0KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVsZW1lbnQpOgorICAgICAgICBzZWxmLmVsZW1lbnQgPSBlbGVtZW50CisgICAgICAgIHNlbGYuYXR0cnMgPSBkaWN0KHNlbGYuZWxlbWVudC5hdHRycykKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBsaXN0KHNlbGYuYXR0cnMuaXRlbXMoKSkuX19pdGVyX18oKQorICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgICJzZXQgYXR0ciIsIG5hbWUsIHZhbHVlCisgICAgICAgIHNlbGYuZWxlbWVudFtuYW1lXSA9IHZhbHVlCisgICAgZGVmIGl0ZW1zKHNlbGYpOgorICAgICAgICByZXR1cm4gbGlzdChzZWxmLmF0dHJzLml0ZW1zKCkpCisgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgIHJldHVybiBsaXN0KHNlbGYuYXR0cnMua2V5cygpKQorICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuYXR0cnMpCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5hdHRyc1tuYW1lXQorICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBuYW1lIGluIGxpc3Qoc2VsZi5hdHRycy5rZXlzKCkpCisKKworY2xhc3MgRWxlbWVudChodG1sNWxpYi50cmVlYnVpbGRlcnMuX2Jhc2UuTm9kZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVsZW1lbnQsIHNvdXAsIG5hbWVzcGFjZSk6CisgICAgICAgIGh0bWw1bGliLnRyZWVidWlsZGVycy5fYmFzZS5Ob2RlLl9faW5pdF9fKHNlbGYsIGVsZW1lbnQubmFtZSkKKyAgICAgICAgc2VsZi5lbGVtZW50ID0gZWxlbWVudAorICAgICAgICBzZWxmLnNvdXAgPSBzb3VwCisgICAgICAgIHNlbGYubmFtZXNwYWNlID0gbmFtZXNwYWNlCisKKyAgICBkZWYgYXBwZW5kQ2hpbGQoc2VsZiwgbm9kZSk6CisgICAgICAgIHN0cmluZ19jaGlsZCA9IGNoaWxkID0gTm9uZQorICAgICAgICBpZiBpc2luc3RhbmNlKG5vZGUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgIyBTb21lIG90aGVyIHBpZWNlIG9mIGNvZGUgZGVjaWRlZCB0byBwYXNzIGluIGEgc3RyaW5nCisgICAgICAgICAgICAjIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBUZXh0RWxlbWVudCBvYmplY3QgdG8gY29udGFpbiB0aGUKKyAgICAgICAgICAgICMgc3RyaW5nLgorICAgICAgICAgICAgc3RyaW5nX2NoaWxkID0gY2hpbGQgPSBub2RlCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShub2RlLCBUYWcpOgorICAgICAgICAgICAgIyBTb21lIG90aGVyIHBpZWNlIG9mIGNvZGUgZGVjaWRlZCB0byBwYXNzIGluIGEgVGFnCisgICAgICAgICAgICAjIGluc3RlYWQgb2YgY3JlYXRpbmcgYW4gRWxlbWVudCBvYmplY3QgdG8gY29udGFpbiB0aGUKKyAgICAgICAgICAgICMgVGFnLgorICAgICAgICAgICAgY2hpbGQgPSBub2RlCisgICAgICAgIGVsaWYgbm9kZS5lbGVtZW50Ll9fY2xhc3NfXyA9PSBOYXZpZ2FibGVTdHJpbmc6CisgICAgICAgICAgICBzdHJpbmdfY2hpbGQgPSBjaGlsZCA9IG5vZGUuZWxlbWVudAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2hpbGQgPSBub2RlLmVsZW1lbnQKKworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShjaGlsZCwgYmFzZXN0cmluZykgYW5kIGNoaWxkLnBhcmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG5vZGUuZWxlbWVudC5leHRyYWN0KCkKKworICAgICAgICBpZiAoc3RyaW5nX2NoaWxkIGFuZCBzZWxmLmVsZW1lbnQuY29udGVudHMKKyAgICAgICAgICAgIGFuZCBzZWxmLmVsZW1lbnQuY29udGVudHNbLTFdLl9fY2xhc3NfXyA9PSBOYXZpZ2FibGVTdHJpbmcpOgorICAgICAgICAgICAgIyBXZSBhcmUgYXBwZW5kaW5nIGEgc3RyaW5nIG9udG8gYW5vdGhlciBzdHJpbmcuCisgICAgICAgICAgICAjIFRPRE8gVGhpcyBoYXMgTyhuXjIpIHBlcmZvcm1hbmNlLCBmb3IgaW5wdXQgbGlrZQorICAgICAgICAgICAgIyAiYTwvYT5hPC9hPmE8L2E+Li4uIgorICAgICAgICAgICAgb2xkX2VsZW1lbnQgPSBzZWxmLmVsZW1lbnQuY29udGVudHNbLTFdCisgICAgICAgICAgICBuZXdfZWxlbWVudCA9IHNlbGYuc291cC5uZXdfc3RyaW5nKG9sZF9lbGVtZW50ICsgc3RyaW5nX2NoaWxkKQorICAgICAgICAgICAgb2xkX2VsZW1lbnQucmVwbGFjZV93aXRoKG5ld19lbGVtZW50KQorICAgICAgICAgICAgc2VsZi5zb3VwLl9tb3N0X3JlY2VudF9lbGVtZW50ID0gbmV3X2VsZW1lbnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgIyBDcmVhdGUgYSBicmFuZCBuZXcgTmF2aWdhYmxlU3RyaW5nIGZyb20gdGhpcyBzdHJpbmcuCisgICAgICAgICAgICAgICAgY2hpbGQgPSBzZWxmLnNvdXAubmV3X3N0cmluZyhub2RlKQorCisgICAgICAgICAgICAjIFRlbGwgQmVhdXRpZnVsIFNvdXAgdG8gYWN0IGFzIGlmIGl0IHBhcnNlZCB0aGlzIGVsZW1lbnQKKyAgICAgICAgICAgICMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHBhcmVudCdzIGxhc3QgZGVzY2VuZGFudC4gKE9yCisgICAgICAgICAgICAjIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBwYXJlbnQsIGlmIGl0IGhhcyBubyBjaGlsZHJlbi4pCisgICAgICAgICAgICBpZiBzZWxmLmVsZW1lbnQuY29udGVudHM6CisgICAgICAgICAgICAgICAgbW9zdF9yZWNlbnRfZWxlbWVudCA9IHNlbGYuZWxlbWVudC5fbGFzdF9kZXNjZW5kYW50KEZhbHNlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtb3N0X3JlY2VudF9lbGVtZW50ID0gc2VsZi5lbGVtZW50CisKKyAgICAgICAgICAgIHNlbGYuc291cC5vYmplY3Rfd2FzX3BhcnNlZCgKKyAgICAgICAgICAgICAgICBjaGlsZCwgcGFyZW50PXNlbGYuZWxlbWVudCwKKyAgICAgICAgICAgICAgICBtb3N0X3JlY2VudF9lbGVtZW50PW1vc3RfcmVjZW50X2VsZW1lbnQpCisKKyAgICBkZWYgZ2V0QXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIEF0dHJMaXN0KHNlbGYuZWxlbWVudCkKKworICAgIGRlZiBzZXRBdHRyaWJ1dGVzKHNlbGYsIGF0dHJpYnV0ZXMpOgorICAgICAgICBpZiBhdHRyaWJ1dGVzIGlzIG5vdCBOb25lIGFuZCBsZW4oYXR0cmlidXRlcykgPiAwOgorCisgICAgICAgICAgICBjb252ZXJ0ZWRfYXR0cmlidXRlcyA9IFtdCisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gbGlzdChhdHRyaWJ1dGVzLml0ZW1zKCkpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobmFtZSwgdHVwbGUpOgorICAgICAgICAgICAgICAgICAgICBuZXdfbmFtZSA9IE5hbWVzcGFjZWRBdHRyaWJ1dGUoKm5hbWUpCisgICAgICAgICAgICAgICAgICAgIGRlbCBhdHRyaWJ1dGVzW25hbWVdCisgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbbmV3X25hbWVdID0gdmFsdWUKKworICAgICAgICAgICAgc2VsZi5zb3VwLmJ1aWxkZXIuX3JlcGxhY2VfY2RhdGFfbGlzdF9hdHRyaWJ1dGVfdmFsdWVzKAorICAgICAgICAgICAgICAgIHNlbGYubmFtZSwgYXR0cmlidXRlcykKKyAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBhdHRyaWJ1dGVzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgc2VsZi5lbGVtZW50W25hbWVdID0gdmFsdWUKKworICAgICAgICAgICAgIyBUaGUgYXR0cmlidXRlcyBtYXkgY29udGFpbiB2YXJpYWJsZXMgdGhhdCBuZWVkIHN1YnN0aXR1dGlvbi4KKyAgICAgICAgICAgICMgQ2FsbCBzZXRfdXBfc3Vic3RpdHV0aW9ucyBtYW51YWxseS4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgVGhlIFRhZyBjb25zdHJ1Y3RvciBjYWxsZWQgdGhpcyBtZXRob2Qgd2hlbiB0aGUgVGFnIHdhcyBjcmVhdGVkLAorICAgICAgICAgICAgIyBidXQgd2UganVzdCBzZXQvY2hhbmdlZCB0aGUgYXR0cmlidXRlcywgc28gY2FsbCBpdCBhZ2Fpbi4KKyAgICAgICAgICAgIHNlbGYuc291cC5idWlsZGVyLnNldF91cF9zdWJzdGl0dXRpb25zKHNlbGYuZWxlbWVudCkKKyAgICBhdHRyaWJ1dGVzID0gcHJvcGVydHkoZ2V0QXR0cmlidXRlcywgc2V0QXR0cmlidXRlcykKKworICAgIGRlZiBpbnNlcnRUZXh0KHNlbGYsIGRhdGEsIGluc2VydEJlZm9yZT1Ob25lKToKKyAgICAgICAgaWYgaW5zZXJ0QmVmb3JlOgorICAgICAgICAgICAgdGV4dCA9IFRleHROb2RlKHNlbGYuc291cC5uZXdfc3RyaW5nKGRhdGEpLCBzZWxmLnNvdXApCisgICAgICAgICAgICBzZWxmLmluc2VydEJlZm9yZShkYXRhLCBpbnNlcnRCZWZvcmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFwcGVuZENoaWxkKGRhdGEpCisKKyAgICBkZWYgaW5zZXJ0QmVmb3JlKHNlbGYsIG5vZGUsIHJlZk5vZGUpOgorICAgICAgICBpbmRleCA9IHNlbGYuZWxlbWVudC5pbmRleChyZWZOb2RlLmVsZW1lbnQpCisgICAgICAgIGlmIChub2RlLmVsZW1lbnQuX19jbGFzc19fID09IE5hdmlnYWJsZVN0cmluZyBhbmQgc2VsZi5lbGVtZW50LmNvbnRlbnRzCisgICAgICAgICAgICBhbmQgc2VsZi5lbGVtZW50LmNvbnRlbnRzW2luZGV4LTFdLl9fY2xhc3NfXyA9PSBOYXZpZ2FibGVTdHJpbmcpOgorICAgICAgICAgICAgIyAoU2VlIGNvbW1lbnRzIGluIGFwcGVuZENoaWxkKQorICAgICAgICAgICAgb2xkX25vZGUgPSBzZWxmLmVsZW1lbnQuY29udGVudHNbaW5kZXgtMV0KKyAgICAgICAgICAgIG5ld19zdHIgPSBzZWxmLnNvdXAubmV3X3N0cmluZyhvbGRfbm9kZSArIG5vZGUuZWxlbWVudCkKKyAgICAgICAgICAgIG9sZF9ub2RlLnJlcGxhY2Vfd2l0aChuZXdfc3RyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5lbGVtZW50Lmluc2VydChpbmRleCwgbm9kZS5lbGVtZW50KQorICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSBzZWxmCisKKyAgICBkZWYgcmVtb3ZlQ2hpbGQoc2VsZiwgbm9kZSk6CisgICAgICAgIG5vZGUuZWxlbWVudC5leHRyYWN0KCkKKworICAgIGRlZiByZXBhcmVudENoaWxkcmVuKHNlbGYsIG5ld19wYXJlbnQpOgorICAgICAgICAiIiJNb3ZlIGFsbCBvZiB0aGlzIHRhZydzIGNoaWxkcmVuIGludG8gYW5vdGhlciB0YWcuIiIiCisgICAgICAgIGVsZW1lbnQgPSBzZWxmLmVsZW1lbnQKKyAgICAgICAgbmV3X3BhcmVudF9lbGVtZW50ID0gbmV3X3BhcmVudC5lbGVtZW50CisgICAgICAgICMgRGV0ZXJtaW5lIHdoYXQgdGhpcyB0YWcncyBuZXh0X2VsZW1lbnQgd2lsbCBiZSBvbmNlIGFsbCB0aGUgY2hpbGRyZW4KKyAgICAgICAgIyBhcmUgcmVtb3ZlZC4KKyAgICAgICAgZmluYWxfbmV4dF9lbGVtZW50ID0gZWxlbWVudC5uZXh0X3NpYmxpbmcKKworICAgICAgICBuZXdfcGFyZW50c19sYXN0X2Rlc2NlbmRhbnQgPSBuZXdfcGFyZW50X2VsZW1lbnQuX2xhc3RfZGVzY2VuZGFudChGYWxzZSwgRmFsc2UpCisgICAgICAgIGlmIGxlbihuZXdfcGFyZW50X2VsZW1lbnQuY29udGVudHMpID4gMDoKKyAgICAgICAgICAgICMgVGhlIG5ldyBwYXJlbnQgYWxyZWFkeSBjb250YWlucyBjaGlsZHJlbi4gV2Ugd2lsbCBiZQorICAgICAgICAgICAgIyBhcHBlbmRpbmcgdGhpcyB0YWcncyBjaGlsZHJlbiB0byB0aGUgZW5kLgorICAgICAgICAgICAgbmV3X3BhcmVudHNfbGFzdF9jaGlsZCA9IG5ld19wYXJlbnRfZWxlbWVudC5jb250ZW50c1stMV0KKyAgICAgICAgICAgIG5ld19wYXJlbnRzX2xhc3RfZGVzY2VuZGFudF9uZXh0X2VsZW1lbnQgPSBuZXdfcGFyZW50c19sYXN0X2Rlc2NlbmRhbnQubmV4dF9lbGVtZW50CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFRoZSBuZXcgcGFyZW50IGNvbnRhaW5zIG5vIGNoaWxkcmVuLgorICAgICAgICAgICAgbmV3X3BhcmVudHNfbGFzdF9jaGlsZCA9IE5vbmUKKyAgICAgICAgICAgIG5ld19wYXJlbnRzX2xhc3RfZGVzY2VuZGFudF9uZXh0X2VsZW1lbnQgPSBuZXdfcGFyZW50X2VsZW1lbnQubmV4dF9lbGVtZW50CisKKyAgICAgICAgdG9fYXBwZW5kID0gZWxlbWVudC5jb250ZW50cworICAgICAgICBhcHBlbmRfYWZ0ZXIgPSBuZXdfcGFyZW50LmVsZW1lbnQuY29udGVudHMKKyAgICAgICAgaWYgbGVuKHRvX2FwcGVuZCkgPiAwOgorICAgICAgICAgICAgIyBTZXQgdGhlIGZpcnN0IGNoaWxkJ3MgcHJldmlvdXNfZWxlbWVudCBhbmQgcHJldmlvdXNfc2libGluZworICAgICAgICAgICAgIyB0byBlbGVtZW50cyB3aXRoaW4gdGhlIG5ldyBwYXJlbnQKKyAgICAgICAgICAgIGZpcnN0X2NoaWxkID0gdG9fYXBwZW5kWzBdCisgICAgICAgICAgICBmaXJzdF9jaGlsZC5wcmV2aW91c19lbGVtZW50ID0gbmV3X3BhcmVudHNfbGFzdF9kZXNjZW5kYW50CisgICAgICAgICAgICBmaXJzdF9jaGlsZC5wcmV2aW91c19zaWJsaW5nID0gbmV3X3BhcmVudHNfbGFzdF9jaGlsZAorCisgICAgICAgICAgICAjIEZpeCB0aGUgbGFzdCBjaGlsZCdzIG5leHRfZWxlbWVudCBhbmQgbmV4dF9zaWJsaW5nCisgICAgICAgICAgICBsYXN0X2NoaWxkID0gdG9fYXBwZW5kWy0xXQorICAgICAgICAgICAgbGFzdF9jaGlsZC5uZXh0X2VsZW1lbnQgPSBuZXdfcGFyZW50c19sYXN0X2Rlc2NlbmRhbnRfbmV4dF9lbGVtZW50CisgICAgICAgICAgICBsYXN0X2NoaWxkLm5leHRfc2libGluZyA9IE5vbmUKKworICAgICAgICBmb3IgY2hpbGQgaW4gdG9fYXBwZW5kOgorICAgICAgICAgICAgY2hpbGQucGFyZW50ID0gbmV3X3BhcmVudF9lbGVtZW50CisgICAgICAgICAgICBuZXdfcGFyZW50X2VsZW1lbnQuY29udGVudHMuYXBwZW5kKGNoaWxkKQorCisgICAgICAgICMgTm93IHRoYXQgdGhpcyBlbGVtZW50IGhhcyBubyBjaGlsZHJlbiwgY2hhbmdlIGl0cyAubmV4dF9lbGVtZW50LgorICAgICAgICBlbGVtZW50LmNvbnRlbnRzID0gW10KKyAgICAgICAgZWxlbWVudC5uZXh0X2VsZW1lbnQgPSBmaW5hbF9uZXh0X2VsZW1lbnQKKworICAgIGRlZiBjbG9uZU5vZGUoc2VsZik6CisgICAgICAgIHRhZyA9IHNlbGYuc291cC5uZXdfdGFnKHNlbGYuZWxlbWVudC5uYW1lLCBzZWxmLm5hbWVzcGFjZSkKKyAgICAgICAgbm9kZSA9IEVsZW1lbnQodGFnLCBzZWxmLnNvdXAsIHNlbGYubmFtZXNwYWNlKQorICAgICAgICBmb3Iga2V5LHZhbHVlIGluIHNlbGYuYXR0cmlidXRlczoKKyAgICAgICAgICAgIG5vZGUuYXR0cmlidXRlc1trZXldID0gdmFsdWUKKyAgICAgICAgcmV0dXJuIG5vZGUKKworICAgIGRlZiBoYXNDb250ZW50KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5lbGVtZW50LmNvbnRlbnRzCisKKyAgICBkZWYgZ2V0TmFtZVR1cGxlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLm5hbWVzcGFjZSA9PSBOb25lOgorICAgICAgICAgICAgcmV0dXJuIG5hbWVzcGFjZXNbImh0bWwiXSwgc2VsZi5uYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5uYW1lc3BhY2UsIHNlbGYubmFtZQorCisgICAgbmFtZVR1cGxlID0gcHJvcGVydHkoZ2V0TmFtZVR1cGxlKQorCitjbGFzcyBUZXh0Tm9kZShFbGVtZW50KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZWxlbWVudCwgc291cCk6CisgICAgICAgIGh0bWw1bGliLnRyZWVidWlsZGVycy5fYmFzZS5Ob2RlLl9faW5pdF9fKHNlbGYsIE5vbmUpCisgICAgICAgIHNlbGYuZWxlbWVudCA9IGVsZW1lbnQKKyAgICAgICAgc2VsZi5zb3VwID0gc291cAorCisgICAgZGVmIGNsb25lTm9kZShzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvYnVpbGRlci9faHRtbHBhcnNlci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2J1aWxkZXIvX2h0bWxwYXJzZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E4ZDhiOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2J1aWxkZXIvX2h0bWxwYXJzZXIucHkKQEAgLTAsMCArMSwyNTggQEAKKyIiIlVzZSB0aGUgSFRNTFBhcnNlciBsaWJyYXJ5IHRvIHBhcnNlIEhUTUwgZmlsZXMgdGhhdCBhcmVuJ3QgdG9vIGJhZC4iIiIKKworX19hbGxfXyA9IFsKKyAgICAnSFRNTFBhcnNlclRyZWVCdWlsZGVyJywKKyAgICBdCisKK2Zyb20gSFRNTFBhcnNlciBpbXBvcnQgKAorICAgIEhUTUxQYXJzZXIsCisgICAgSFRNTFBhcnNlRXJyb3IsCisgICAgKQoraW1wb3J0IHN5cworaW1wb3J0IHdhcm5pbmdzCisKKyMgU3RhcnRpbmcgaW4gUHl0aG9uIDMuMiwgdGhlIEhUTUxQYXJzZXIgY29uc3RydWN0b3IgdGFrZXMgYSAnc3RyaWN0JworIyBhcmd1bWVudCwgd2hpY2ggd2UnZCBsaWtlIHRvIHNldCB0byBGYWxzZS4gVW5mb3J0dW5hdGVseSwKKyMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEzMjczIG1ha2VzIHN0cmljdD1UcnVlIGEgYmV0dGVyIGJldAorIyBiZWZvcmUgUHl0aG9uIDMuMi4zLgorIworIyBBdCB0aGUgZW5kIG9mIHRoaXMgZmlsZSwgd2UgbW9ua2V5cGF0Y2ggSFRNTFBhcnNlciBzbyB0aGF0CisjIHN0cmljdD1UcnVlIHdvcmtzIHdlbGwgb24gUHl0aG9uIDMuMi4yLgorbWFqb3IsIG1pbm9yLCByZWxlYXNlID0gc3lzLnZlcnNpb25faW5mb1s6M10KK0NPTlNUUlVDVE9SX1RBS0VTX1NUUklDVCA9ICgKKyAgICBtYWpvciA+IDMKKyAgICBvciAobWFqb3IgPT0gMyBhbmQgbWlub3IgPiAyKQorICAgIG9yIChtYWpvciA9PSAzIGFuZCBtaW5vciA9PSAyIGFuZCByZWxlYXNlID49IDMpKQorCitmcm9tIGJzNC5lbGVtZW50IGltcG9ydCAoCisgICAgQ0RhdGEsCisgICAgQ29tbWVudCwKKyAgICBEZWNsYXJhdGlvbiwKKyAgICBEb2N0eXBlLAorICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiwKKyAgICApCitmcm9tIGJzNC5kYW1taXQgaW1wb3J0IEVudGl0eVN1YnN0aXR1dGlvbiwgVW5pY29kZURhbW1pdAorCitmcm9tIGJzNC5idWlsZGVyIGltcG9ydCAoCisgICAgSFRNTCwKKyAgICBIVE1MVHJlZUJ1aWxkZXIsCisgICAgU1RSSUNULAorICAgICkKKworCitIVE1MUEFSU0VSID0gJ2h0bWwucGFyc2VyJworCitjbGFzcyBCZWF1dGlmdWxTb3VwSFRNTFBhcnNlcihIVE1MUGFyc2VyKToKKyAgICBkZWYgaGFuZGxlX3N0YXJ0dGFnKHNlbGYsIG5hbWUsIGF0dHJzKToKKyAgICAgICAgIyBYWFggbmFtZXNwYWNlCisgICAgICAgIGF0dHJfZGljdCA9IHt9CisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGF0dHJzOgorICAgICAgICAgICAgIyBDaGFuZ2UgTm9uZSBhdHRyaWJ1dGUgdmFsdWVzIHRvIHRoZSBlbXB0eSBzdHJpbmcKKyAgICAgICAgICAgICMgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIG90aGVyIHRyZWUgYnVpbGRlcnMuCisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHZhbHVlID0gJycKKyAgICAgICAgICAgIGF0dHJfZGljdFtrZXldID0gdmFsdWUKKyAgICAgICAgICAgIGF0dHJ2YWx1ZSA9ICciIicKKyAgICAgICAgc2VsZi5zb3VwLmhhbmRsZV9zdGFydHRhZyhuYW1lLCBOb25lLCBOb25lLCBhdHRyX2RpY3QpCisKKyAgICBkZWYgaGFuZGxlX2VuZHRhZyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5zb3VwLmhhbmRsZV9lbmR0YWcobmFtZSkKKworICAgIGRlZiBoYW5kbGVfZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5zb3VwLmhhbmRsZV9kYXRhKGRhdGEpCisKKyAgICBkZWYgaGFuZGxlX2NoYXJyZWYoc2VsZiwgbmFtZSk6CisgICAgICAgICMgWFhYIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIEhUTUxQYXJzZXIuIFJlbW92ZSB0aGlzIG9uY2UKKyAgICAgICAgIyBpdCdzIGZpeGVkLgorICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJ3gnKToKKyAgICAgICAgICAgIHJlYWxfbmFtZSA9IGludChuYW1lLmxzdHJpcCgneCcpLCAxNikKKyAgICAgICAgZWxpZiBuYW1lLnN0YXJ0c3dpdGgoJ1gnKToKKyAgICAgICAgICAgIHJlYWxfbmFtZSA9IGludChuYW1lLmxzdHJpcCgnWCcpLCAxNikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlYWxfbmFtZSA9IGludChuYW1lKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEgPSB1bmljaHIocmVhbF9uYW1lKQorICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIE92ZXJmbG93RXJyb3IpLCBlOgorICAgICAgICAgICAgZGF0YSA9IHUiXE57UkVQTEFDRU1FTlQgQ0hBUkFDVEVSfSIKKworICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKGRhdGEpCisKKyAgICBkZWYgaGFuZGxlX2VudGl0eXJlZihzZWxmLCBuYW1lKToKKyAgICAgICAgY2hhcmFjdGVyID0gRW50aXR5U3Vic3RpdHV0aW9uLkhUTUxfRU5USVRZX1RPX0NIQVJBQ1RFUi5nZXQobmFtZSkKKyAgICAgICAgaWYgY2hhcmFjdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZGF0YSA9IGNoYXJhY3RlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGF0YSA9ICImJXM7IiAlIG5hbWUKKyAgICAgICAgc2VsZi5oYW5kbGVfZGF0YShkYXRhKQorCisgICAgZGVmIGhhbmRsZV9jb21tZW50KHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLnNvdXAuZW5kRGF0YSgpCisgICAgICAgIHNlbGYuc291cC5oYW5kbGVfZGF0YShkYXRhKQorICAgICAgICBzZWxmLnNvdXAuZW5kRGF0YShDb21tZW50KQorCisgICAgZGVmIGhhbmRsZV9kZWNsKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLnNvdXAuZW5kRGF0YSgpCisgICAgICAgIGlmIGRhdGEuc3RhcnRzd2l0aCgiRE9DVFlQRSAiKToKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhW2xlbigiRE9DVFlQRSAiKTpdCisgICAgICAgIGVsaWYgZGF0YSA9PSAnRE9DVFlQRSc6CisgICAgICAgICAgICAjIGkuZS4gIjwhRE9DVFlQRT4iCisgICAgICAgICAgICBkYXRhID0gJycKKyAgICAgICAgc2VsZi5zb3VwLmhhbmRsZV9kYXRhKGRhdGEpCisgICAgICAgIHNlbGYuc291cC5lbmREYXRhKERvY3R5cGUpCisKKyAgICBkZWYgdW5rbm93bl9kZWNsKHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBkYXRhLnVwcGVyKCkuc3RhcnRzd2l0aCgnQ0RBVEFbJyk6CisgICAgICAgICAgICBjbHMgPSBDRGF0YQorICAgICAgICAgICAgZGF0YSA9IGRhdGFbbGVuKCdDREFUQVsnKTpdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbHMgPSBEZWNsYXJhdGlvbgorICAgICAgICBzZWxmLnNvdXAuZW5kRGF0YSgpCisgICAgICAgIHNlbGYuc291cC5oYW5kbGVfZGF0YShkYXRhKQorICAgICAgICBzZWxmLnNvdXAuZW5kRGF0YShjbHMpCisKKyAgICBkZWYgaGFuZGxlX3BpKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLnNvdXAuZW5kRGF0YSgpCisgICAgICAgIGlmIGRhdGEuZW5kc3dpdGgoIj8iKSBhbmQgZGF0YS5sb3dlcigpLnN0YXJ0c3dpdGgoInhtbCIpOgorICAgICAgICAgICAgIyAiQW4gWEhUTUwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiB1c2luZyB0aGUgdHJhaWxpbmcgJz8nCisgICAgICAgICAgICAjIHdpbGwgY2F1c2UgdGhlICc/JyB0byBiZSBpbmNsdWRlZCBpbiBkYXRhLiIgLSBIVE1MUGFyc2VyCisgICAgICAgICAgICAjIGRvY3MuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFN0cmlwIHRoZSBxdWVzdGlvbiBtYXJrIHNvIHdlIGRvbid0IGVuZCB1cCB3aXRoIHR3bworICAgICAgICAgICAgIyBxdWVzdGlvbiBtYXJrcy4KKyAgICAgICAgICAgIGRhdGEgPSBkYXRhWzotMV0KKyAgICAgICAgc2VsZi5zb3VwLmhhbmRsZV9kYXRhKGRhdGEpCisgICAgICAgIHNlbGYuc291cC5lbmREYXRhKFByb2Nlc3NpbmdJbnN0cnVjdGlvbikKKworCitjbGFzcyBIVE1MUGFyc2VyVHJlZUJ1aWxkZXIoSFRNTFRyZWVCdWlsZGVyKToKKworICAgIGlzX3htbCA9IEZhbHNlCisgICAgZmVhdHVyZXMgPSBbSFRNTCwgU1RSSUNULCBIVE1MUEFSU0VSXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIENPTlNUUlVDVE9SX1RBS0VTX1NUUklDVDoKKyAgICAgICAgICAgIGt3YXJnc1snc3RyaWN0J10gPSBGYWxzZQorICAgICAgICBzZWxmLnBhcnNlcl9hcmdzID0gKGFyZ3MsIGt3YXJncykKKworICAgIGRlZiBwcmVwYXJlX21hcmt1cChzZWxmLCBtYXJrdXAsIHVzZXJfc3BlY2lmaWVkX2VuY29kaW5nPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50X2RlY2xhcmVkX2VuY29kaW5nPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgOnJldHVybjogQSA0LXR1cGxlIChtYXJrdXAsIG9yaWdpbmFsIGVuY29kaW5nLCBlbmNvZGluZworICAgICAgICBkZWNsYXJlZCB3aXRoaW4gbWFya3VwLCB3aGV0aGVyIGFueSBjaGFyYWN0ZXJzIGhhZCB0byBiZQorICAgICAgICByZXBsYWNlZCB3aXRoIFJFUExBQ0VNRU5UIENIQVJBQ1RFUikuCisgICAgICAgICIiIgorICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmt1cCwgdW5pY29kZSk6CisgICAgICAgICAgICB5aWVsZCAobWFya3VwLCBOb25lLCBOb25lLCBGYWxzZSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHRyeV9lbmNvZGluZ3MgPSBbdXNlcl9zcGVjaWZpZWRfZW5jb2RpbmcsIGRvY3VtZW50X2RlY2xhcmVkX2VuY29kaW5nXQorICAgICAgICBkYW1taXQgPSBVbmljb2RlRGFtbWl0KG1hcmt1cCwgdHJ5X2VuY29kaW5ncywgaXNfaHRtbD1UcnVlKQorICAgICAgICB5aWVsZCAoZGFtbWl0Lm1hcmt1cCwgZGFtbWl0Lm9yaWdpbmFsX2VuY29kaW5nLAorICAgICAgICAgICAgICAgZGFtbWl0LmRlY2xhcmVkX2h0bWxfZW5jb2RpbmcsCisgICAgICAgICAgICAgICBkYW1taXQuY29udGFpbnNfcmVwbGFjZW1lbnRfY2hhcmFjdGVycykKKworICAgIGRlZiBmZWVkKHNlbGYsIG1hcmt1cCk6CisgICAgICAgIGFyZ3MsIGt3YXJncyA9IHNlbGYucGFyc2VyX2FyZ3MKKyAgICAgICAgcGFyc2VyID0gQmVhdXRpZnVsU291cEhUTUxQYXJzZXIoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBwYXJzZXIuc291cCA9IHNlbGYuc291cAorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXJzZXIuZmVlZChtYXJrdXApCisgICAgICAgIGV4Y2VwdCBIVE1MUGFyc2VFcnJvciwgZToKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oUnVudGltZVdhcm5pbmcoCisgICAgICAgICAgICAgICAgIlB5dGhvbidzIGJ1aWx0LWluIEhUTUxQYXJzZXIgY2Fubm90IHBhcnNlIHRoZSBnaXZlbiBkb2N1bWVudC4gVGhpcyBpcyBub3QgYSBidWcgaW4gQmVhdXRpZnVsIFNvdXAuIFRoZSBiZXN0IHNvbHV0aW9uIGlzIHRvIGluc3RhbGwgYW4gZXh0ZXJuYWwgcGFyc2VyIChseG1sIG9yIGh0bWw1bGliKSwgYW5kIHVzZSBCZWF1dGlmdWwgU291cCB3aXRoIHRoYXQgcGFyc2VyLiBTZWUgaHR0cDovL3d3dy5jcnVtbXkuY29tL3NvZnR3YXJlL0JlYXV0aWZ1bFNvdXAvYnM0L2RvYy8jaW5zdGFsbGluZy1hLXBhcnNlciBmb3IgaGVscC4iKSkKKyAgICAgICAgICAgIHJhaXNlIGUKKworIyBQYXRjaCAzLjIgdmVyc2lvbnMgb2YgSFRNTFBhcnNlciBlYXJsaWVyIHRoYW4gMy4yLjMgdG8gdXNlIHNvbWUKKyMgMy4yLjMgY29kZS4gVGhpcyBlbnN1cmVzIHRoZXkgZG9uJ3QgdHJlYXQgbWFya3VwIGxpa2UgPHA+PC9wPiBhcyBhCisjIHN0cmluZy4KKyMKKyMgWFhYIFRoaXMgY29kZSBjYW4gYmUgcmVtb3ZlZCBvbmNlIG1vc3QgUHl0aG9uIDMgdXNlcnMgYXJlIG9uIDMuMi4zLgoraWYgbWFqb3IgPT0gMyBhbmQgbWlub3IgPT0gMiBhbmQgbm90IENPTlNUUlVDVE9SX1RBS0VTX1NUUklDVDoKKyAgICBpbXBvcnQgcmUKKyAgICBhdHRyZmluZF90b2xlcmFudCA9IHJlLmNvbXBpbGUoCisgICAgICAgIHInXHMqKCg/PD1bXCciXHNdKVteXHMvPl1bXlxzLz0+XSopKFxzKj0rXHMqJworICAgICAgICByJyhcJ1teXCddKlwnfCJbXiJdKiJ8KD8hW1wnIl0pW14+XHNdKikpPycpCisgICAgSFRNTFBhcnNlclRyZWVCdWlsZGVyLmF0dHJmaW5kX3RvbGVyYW50ID0gYXR0cmZpbmRfdG9sZXJhbnQKKworICAgIGxvY2F0ZXN0YXJ0dGFnZW5kID0gcmUuY29tcGlsZShyIiIiCisgIDxbYS16QS1aXVstLmEtekEtWjAtOTpfXSogICAgICAgICAgIyB0YWcgbmFtZQorICAoPzpccysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2hpdGVzcGFjZSBiZWZvcmUgYXR0cmlidXRlIG5hbWUKKyAgICAoPzpbYS16QS1aX11bLS46YS16QS1aMC05X10qICAgICAjIGF0dHJpYnV0ZSBuYW1lCisgICAgICAoPzpccyo9XHMqICAgICAgICAgICAgICAgICAgICAgIyB2YWx1ZSBpbmRpY2F0b3IKKyAgICAgICAgKD86J1teJ10qJyAgICAgICAgICAgICAgICAgICAjIExJVEEtZW5jbG9zZWQgdmFsdWUKKyAgICAgICAgICB8XCJbXlwiXSpcIiAgICAgICAgICAgICAgICAjIExJVC1lbmNsb3NlZCB2YWx1ZQorICAgICAgICAgIHxbXidcIj5cc10rICAgICAgICAgICAgICAgICMgYmFyZSB2YWx1ZQorICAgICAgICAgKQorICAgICAgICk/CisgICAgICkKKyAgICkqCisgIFxzKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0cmFpbGluZyB3aGl0ZXNwYWNlCisiIiIsIHJlLlZFUkJPU0UpCisgICAgQmVhdXRpZnVsU291cEhUTUxQYXJzZXIubG9jYXRlc3RhcnR0YWdlbmQgPSBsb2NhdGVzdGFydHRhZ2VuZAorCisgICAgZnJvbSBodG1sLnBhcnNlciBpbXBvcnQgdGFnZmluZCwgYXR0cmZpbmQKKworICAgIGRlZiBwYXJzZV9zdGFydHRhZyhzZWxmLCBpKToKKyAgICAgICAgc2VsZi5fX3N0YXJ0dGFnX3RleHQgPSBOb25lCisgICAgICAgIGVuZHBvcyA9IHNlbGYuY2hlY2tfZm9yX3dob2xlX3N0YXJ0X3RhZyhpKQorICAgICAgICBpZiBlbmRwb3MgPCAwOgorICAgICAgICAgICAgcmV0dXJuIGVuZHBvcworICAgICAgICByYXdkYXRhID0gc2VsZi5yYXdkYXRhCisgICAgICAgIHNlbGYuX19zdGFydHRhZ190ZXh0ID0gcmF3ZGF0YVtpOmVuZHBvc10KKworICAgICAgICAjIE5vdyBwYXJzZSB0aGUgZGF0YSBiZXR3ZWVuIGkrMSBhbmQgaiBpbnRvIGEgdGFnIGFuZCBhdHRycworICAgICAgICBhdHRycyA9IFtdCisgICAgICAgIG1hdGNoID0gdGFnZmluZC5tYXRjaChyYXdkYXRhLCBpKzEpCisgICAgICAgIGFzc2VydCBtYXRjaCwgJ3VuZXhwZWN0ZWQgY2FsbCB0byBwYXJzZV9zdGFydHRhZygpJworICAgICAgICBrID0gbWF0Y2guZW5kKCkKKyAgICAgICAgc2VsZi5sYXN0dGFnID0gdGFnID0gcmF3ZGF0YVtpKzE6a10ubG93ZXIoKQorICAgICAgICB3aGlsZSBrIDwgZW5kcG9zOgorICAgICAgICAgICAgaWYgc2VsZi5zdHJpY3Q6CisgICAgICAgICAgICAgICAgbSA9IGF0dHJmaW5kLm1hdGNoKHJhd2RhdGEsIGspCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG0gPSBhdHRyZmluZF90b2xlcmFudC5tYXRjaChyYXdkYXRhLCBrKQorICAgICAgICAgICAgaWYgbm90IG06CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGF0dHJuYW1lLCByZXN0LCBhdHRydmFsdWUgPSBtLmdyb3VwKDEsIDIsIDMpCisgICAgICAgICAgICBpZiBub3QgcmVzdDoKKyAgICAgICAgICAgICAgICBhdHRydmFsdWUgPSBOb25lCisgICAgICAgICAgICBlbGlmIGF0dHJ2YWx1ZVs6MV0gPT0gJ1wnJyA9PSBhdHRydmFsdWVbLTE6XSBvciBcCisgICAgICAgICAgICAgICAgIGF0dHJ2YWx1ZVs6MV0gPT0gJyInID09IGF0dHJ2YWx1ZVstMTpdOgorICAgICAgICAgICAgICAgIGF0dHJ2YWx1ZSA9IGF0dHJ2YWx1ZVsxOi0xXQorICAgICAgICAgICAgaWYgYXR0cnZhbHVlOgorICAgICAgICAgICAgICAgIGF0dHJ2YWx1ZSA9IHNlbGYudW5lc2NhcGUoYXR0cnZhbHVlKQorICAgICAgICAgICAgYXR0cnMuYXBwZW5kKChhdHRybmFtZS5sb3dlcigpLCBhdHRydmFsdWUpKQorICAgICAgICAgICAgayA9IG0uZW5kKCkKKworICAgICAgICBlbmQgPSByYXdkYXRhW2s6ZW5kcG9zXS5zdHJpcCgpCisgICAgICAgIGlmIGVuZCBub3QgaW4gKCI+IiwgIi8+Iik6CisgICAgICAgICAgICBsaW5lbm8sIG9mZnNldCA9IHNlbGYuZ2V0cG9zKCkKKyAgICAgICAgICAgIGlmICJcbiIgaW4gc2VsZi5fX3N0YXJ0dGFnX3RleHQ6CisgICAgICAgICAgICAgICAgbGluZW5vID0gbGluZW5vICsgc2VsZi5fX3N0YXJ0dGFnX3RleHQuY291bnQoIlxuIikKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBsZW4oc2VsZi5fX3N0YXJ0dGFnX3RleHQpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAtIHNlbGYuX19zdGFydHRhZ190ZXh0LnJmaW5kKCJcbiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9mZnNldCA9IG9mZnNldCArIGxlbihzZWxmLl9fc3RhcnR0YWdfdGV4dCkKKyAgICAgICAgICAgIGlmIHNlbGYuc3RyaWN0OgorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoImp1bmsgY2hhcmFjdGVycyBpbiBzdGFydCB0YWc6ICVyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocmF3ZGF0YVtrOmVuZHBvc11bOjIwXSwpKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YShyYXdkYXRhW2k6ZW5kcG9zXSkKKyAgICAgICAgICAgIHJldHVybiBlbmRwb3MKKyAgICAgICAgaWYgZW5kLmVuZHN3aXRoKCcvPicpOgorICAgICAgICAgICAgIyBYSFRNTC1zdHlsZSBlbXB0eSB0YWc6IDxzcGFuIGF0dHI9InZhbHVlIiAvPgorICAgICAgICAgICAgc2VsZi5oYW5kbGVfc3RhcnRlbmR0YWcodGFnLCBhdHRycykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlX3N0YXJ0dGFnKHRhZywgYXR0cnMpCisgICAgICAgICAgICBpZiB0YWcgaW4gc2VsZi5DREFUQV9DT05URU5UX0VMRU1FTlRTOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0X2NkYXRhX21vZGUodGFnKQorICAgICAgICByZXR1cm4gZW5kcG9zCisKKyAgICBkZWYgc2V0X2NkYXRhX21vZGUoc2VsZiwgZWxlbSk6CisgICAgICAgIHNlbGYuY2RhdGFfZWxlbSA9IGVsZW0ubG93ZXIoKQorICAgICAgICBzZWxmLmludGVyZXN0aW5nID0gcmUuY29tcGlsZShyJzwvXHMqJXNccyo+JyAlIHNlbGYuY2RhdGFfZWxlbSwgcmUuSSkKKworICAgIEJlYXV0aWZ1bFNvdXBIVE1MUGFyc2VyLnBhcnNlX3N0YXJ0dGFnID0gcGFyc2Vfc3RhcnR0YWcKKyAgICBCZWF1dGlmdWxTb3VwSFRNTFBhcnNlci5zZXRfY2RhdGFfbW9kZSA9IHNldF9jZGF0YV9tb2RlCisKKyAgICBDT05TVFJVQ1RPUl9UQUtFU19TVFJJQ1QgPSBUcnVlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9idWlsZGVyL19seG1sLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvYnVpbGRlci9fbHhtbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTVkNDk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvYnVpbGRlci9fbHhtbC5weQpAQCAtMCwwICsxLDIzMyBAQAorX19hbGxfXyA9IFsKKyAgICAnTFhNTFRyZWVCdWlsZGVyRm9yWE1MJywKKyAgICAnTFhNTFRyZWVCdWlsZGVyJywKKyAgICBdCisKK2Zyb20gaW8gaW1wb3J0IEJ5dGVzSU8KK2Zyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgY29sbGVjdGlvbnMKK2Zyb20gbHhtbCBpbXBvcnQgZXRyZWUKK2Zyb20gYnM0LmVsZW1lbnQgaW1wb3J0IENvbW1lbnQsIERvY3R5cGUsIE5hbWVzcGFjZWRBdHRyaWJ1dGUKK2Zyb20gYnM0LmJ1aWxkZXIgaW1wb3J0ICgKKyAgICBGQVNULAorICAgIEhUTUwsCisgICAgSFRNTFRyZWVCdWlsZGVyLAorICAgIFBFUk1JU1NJVkUsCisgICAgUGFyc2VyUmVqZWN0ZWRNYXJrdXAsCisgICAgVHJlZUJ1aWxkZXIsCisgICAgWE1MKQorZnJvbSBiczQuZGFtbWl0IGltcG9ydCBFbmNvZGluZ0RldGVjdG9yCisKK0xYTUwgPSAnbHhtbCcKKworY2xhc3MgTFhNTFRyZWVCdWlsZGVyRm9yWE1MKFRyZWVCdWlsZGVyKToKKyAgICBERUZBVUxUX1BBUlNFUl9DTEFTUyA9IGV0cmVlLlhNTFBhcnNlcgorCisgICAgaXNfeG1sID0gVHJ1ZQorCisgICAgIyBXZWxsLCBpdCdzIHBlcm1pc3NpdmUgYnkgWE1MIHBhcnNlciBzdGFuZGFyZHMuCisgICAgZmVhdHVyZXMgPSBbTFhNTCwgWE1MLCBGQVNULCBQRVJNSVNTSVZFXQorCisgICAgQ0hVTktfU0laRSA9IDUxMgorCisgICAgIyBUaGlzIG5hbWVzcGFjZSBtYXBwaW5nIGlzIHNwZWNpZmllZCBpbiB0aGUgWE1MIE5hbWVzcGFjZQorICAgICMgc3RhbmRhcmQuCisgICAgREVGQVVMVF9OU01BUFMgPSB7J2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZScgOiAieG1sIn0KKworICAgIGRlZiBkZWZhdWx0X3BhcnNlcihzZWxmLCBlbmNvZGluZyk6CisgICAgICAgICMgVGhpcyBjYW4gZWl0aGVyIHJldHVybiBhIHBhcnNlciBvYmplY3Qgb3IgYSBjbGFzcywgd2hpY2gKKyAgICAgICAgIyB3aWxsIGJlIGluc3RhbnRpYXRlZCB3aXRoIGRlZmF1bHQgYXJndW1lbnRzLgorICAgICAgICBpZiBzZWxmLl9kZWZhdWx0X3BhcnNlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kZWZhdWx0X3BhcnNlcgorICAgICAgICByZXR1cm4gZXRyZWUuWE1MUGFyc2VyKAorICAgICAgICAgICAgdGFyZ2V0PXNlbGYsIHN0cmlwX2NkYXRhPUZhbHNlLCByZWNvdmVyPVRydWUsIGVuY29kaW5nPWVuY29kaW5nKQorCisgICAgZGVmIHBhcnNlcl9mb3Ioc2VsZiwgZW5jb2RpbmcpOgorICAgICAgICAjIFVzZSB0aGUgZGVmYXVsdCBwYXJzZXIuCisgICAgICAgIHBhcnNlciA9IHNlbGYuZGVmYXVsdF9wYXJzZXIoZW5jb2RpbmcpCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJzZXIsIGNvbGxlY3Rpb25zLkNhbGxhYmxlKToKKyAgICAgICAgICAgICMgSW5zdGFudGlhdGUgdGhlIHBhcnNlciB3aXRoIGRlZmF1bHQgYXJndW1lbnRzCisgICAgICAgICAgICBwYXJzZXIgPSBwYXJzZXIodGFyZ2V0PXNlbGYsIHN0cmlwX2NkYXRhPUZhbHNlLCBlbmNvZGluZz1lbmNvZGluZykKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcnNlcj1Ob25lLCBlbXB0eV9lbGVtZW50X3RhZ3M9Tm9uZSk6CisgICAgICAgICMgVE9ETzogSXNzdWUgYSB3YXJuaW5nIGlmIHBhcnNlciBpcyBwcmVzZW50IGJ1dCBub3QgYQorICAgICAgICAjIGNhbGxhYmxlLCBzaW5jZSB0aGF0IG1lYW5zIHRoZXJlJ3Mgbm8gd2F5IHRvIGNyZWF0ZSBuZXcKKyAgICAgICAgIyBwYXJzZXJzIGZvciBkaWZmZXJlbnQgZW5jb2RpbmdzLgorICAgICAgICBzZWxmLl9kZWZhdWx0X3BhcnNlciA9IHBhcnNlcgorICAgICAgICBpZiBlbXB0eV9lbGVtZW50X3RhZ3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmVtcHR5X2VsZW1lbnRfdGFncyA9IHNldChlbXB0eV9lbGVtZW50X3RhZ3MpCisgICAgICAgIHNlbGYuc291cCA9IE5vbmUKKyAgICAgICAgc2VsZi5uc21hcHMgPSBbc2VsZi5ERUZBVUxUX05TTUFQU10KKworICAgIGRlZiBfZ2V0TnNUYWcoc2VsZiwgdGFnKToKKyAgICAgICAgIyBTcGxpdCB0aGUgbmFtZXNwYWNlIFVSTCBvdXQgb2YgYSBmdWxseS1xdWFsaWZpZWQgbHhtbCB0YWcKKyAgICAgICAgIyBuYW1lLiBDb3BpZWQgZnJvbSBseG1sJ3Mgc3JjL2x4bWwvc2F4LnB5LgorICAgICAgICBpZiB0YWdbMF0gPT0gJ3snOgorICAgICAgICAgICAgcmV0dXJuIHR1cGxlKHRhZ1sxOl0uc3BsaXQoJ30nLCAxKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAoTm9uZSwgdGFnKQorCisgICAgZGVmIHByZXBhcmVfbWFya3VwKHNlbGYsIG1hcmt1cCwgdXNlcl9zcGVjaWZpZWRfZW5jb2Rpbmc9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRfZGVjbGFyZWRfZW5jb2Rpbmc9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICA6eWllbGQ6IEEgc2VyaWVzIG9mIDQtdHVwbGVzLgorICAgICAgICAgKG1hcmt1cCwgZW5jb2RpbmcsIGRlY2xhcmVkIGVuY29kaW5nLAorICAgICAgICAgIGhhcyB1bmRlcmdvbmUgY2hhcmFjdGVyIHJlcGxhY2VtZW50KQorCisgICAgICAgIEVhY2ggNC10dXBsZSByZXByZXNlbnRzIGEgc3RyYXRlZ3kgZm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYXJrdXAsIHVuaWNvZGUpOgorICAgICAgICAgICAgIyBXZSB3ZXJlIGdpdmVuIFVuaWNvZGUuIE1heWJlIGx4bWwgY2FuIHBhcnNlIFVuaWNvZGUgb24KKyAgICAgICAgICAgICMgdGhpcyBzeXN0ZW0/CisgICAgICAgICAgICB5aWVsZCBtYXJrdXAsIE5vbmUsIGRvY3VtZW50X2RlY2xhcmVkX2VuY29kaW5nLCBGYWxzZQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwLCB1bmljb2RlKToKKyAgICAgICAgICAgICMgTm8sIGFwcGFyZW50bHkgbm90LiBDb252ZXJ0IHRoZSBVbmljb2RlIHRvIFVURi04IGFuZAorICAgICAgICAgICAgIyB0ZWxsIGx4bWwgdG8gcGFyc2UgaXQgYXMgVVRGLTguCisgICAgICAgICAgICB5aWVsZCAobWFya3VwLmVuY29kZSgidXRmOCIpLCAidXRmOCIsCisgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRfZGVjbGFyZWRfZW5jb2RpbmcsIEZhbHNlKQorCisgICAgICAgICMgSW5zdGVhZCBvZiB1c2luZyBVbmljb2RlRGFtbWl0IHRvIGNvbnZlcnQgdGhlIGJ5dGVzdHJpbmcgdG8KKyAgICAgICAgIyBVbmljb2RlIHVzaW5nIGRpZmZlcmVudCBlbmNvZGluZ3MsIHVzZSBFbmNvZGluZ0RldGVjdG9yIHRvCisgICAgICAgICMgaXRlcmF0ZSBvdmVyIHRoZSBlbmNvZGluZ3MsIGFuZCB0ZWxsIGx4bWwgdG8gdHJ5IHRvIHBhcnNlCisgICAgICAgICMgdGhlIGRvY3VtZW50IGFzIGVhY2ggb25lIGluIHR1cm4uCisgICAgICAgIGlzX2h0bWwgPSBub3Qgc2VsZi5pc194bWwKKyAgICAgICAgdHJ5X2VuY29kaW5ncyA9IFt1c2VyX3NwZWNpZmllZF9lbmNvZGluZywgZG9jdW1lbnRfZGVjbGFyZWRfZW5jb2RpbmddCisgICAgICAgIGRldGVjdG9yID0gRW5jb2RpbmdEZXRlY3RvcihtYXJrdXAsIHRyeV9lbmNvZGluZ3MsIGlzX2h0bWwpCisgICAgICAgIGZvciBlbmNvZGluZyBpbiBkZXRlY3Rvci5lbmNvZGluZ3M6CisgICAgICAgICAgICB5aWVsZCAoZGV0ZWN0b3IubWFya3VwLCBlbmNvZGluZywgZG9jdW1lbnRfZGVjbGFyZWRfZW5jb2RpbmcsIEZhbHNlKQorCisgICAgZGVmIGZlZWQoc2VsZiwgbWFya3VwKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYXJrdXAsIGJ5dGVzKToKKyAgICAgICAgICAgIG1hcmt1cCA9IEJ5dGVzSU8obWFya3VwKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UobWFya3VwLCB1bmljb2RlKToKKyAgICAgICAgICAgIG1hcmt1cCA9IFN0cmluZ0lPKG1hcmt1cCkKKworICAgICAgICAjIENhbGwgZmVlZCgpIGF0IGxlYXN0IG9uY2UsIGV2ZW4gaWYgdGhlIG1hcmt1cCBpcyBlbXB0eSwKKyAgICAgICAgIyBvciB0aGUgcGFyc2VyIHdvbid0IGJlIGluaXRpYWxpemVkLgorICAgICAgICBkYXRhID0gbWFya3VwLnJlYWQoc2VsZi5DSFVOS19TSVpFKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnBhcnNlciA9IHNlbGYucGFyc2VyX2ZvcihzZWxmLnNvdXAub3JpZ2luYWxfZW5jb2RpbmcpCisgICAgICAgICAgICBzZWxmLnBhcnNlci5mZWVkKGRhdGEpCisgICAgICAgICAgICB3aGlsZSBsZW4oZGF0YSkgIT0gMDoKKyAgICAgICAgICAgICAgICAjIE5vdyBjYWxsIGZlZWQoKSBvbiB0aGUgcmVzdCBvZiB0aGUgZGF0YSwgY2h1bmsgYnkgY2h1bmsuCisgICAgICAgICAgICAgICAgZGF0YSA9IG1hcmt1cC5yZWFkKHNlbGYuQ0hVTktfU0laRSkKKyAgICAgICAgICAgICAgICBpZiBsZW4oZGF0YSkgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZXIuZmVlZChkYXRhKQorICAgICAgICAgICAgc2VsZi5wYXJzZXIuY2xvc2UoKQorICAgICAgICBleGNlcHQgKFVuaWNvZGVEZWNvZGVFcnJvciwgTG9va3VwRXJyb3IsIGV0cmVlLlBhcnNlckVycm9yKSwgZToKKyAgICAgICAgICAgIHJhaXNlIFBhcnNlclJlamVjdGVkTWFya3VwKHN0cihlKSkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgc2VsZi5uc21hcHMgPSBbc2VsZi5ERUZBVUxUX05TTUFQU10KKworICAgIGRlZiBzdGFydChzZWxmLCBuYW1lLCBhdHRycywgbnNtYXA9e30pOgorICAgICAgICAjIE1ha2Ugc3VyZSBhdHRycyBpcyBhIG11dGFibGUgZGljdC0tbHhtbCBtYXkgc2VuZCBhbiBpbW11dGFibGUgZGljdHByb3h5LgorICAgICAgICBhdHRycyA9IGRpY3QoYXR0cnMpCisgICAgICAgIG5zcHJlZml4ID0gTm9uZQorICAgICAgICAjIEludmVydCBlYWNoIG5hbWVzcGFjZSBtYXAgYXMgaXQgY29tZXMgaW4uCisgICAgICAgIGlmIGxlbihzZWxmLm5zbWFwcykgPiAxOgorICAgICAgICAgICAgIyBUaGVyZSBhcmUgbm8gbmV3IG5hbWVzcGFjZXMgZm9yIHRoaXMgdGFnLCBidXQKKyAgICAgICAgICAgICMgbm9uLWRlZmF1bHQgbmFtZXNwYWNlcyBhcmUgaW4gcGxheSwgc28gd2UgbmVlZCBhCisgICAgICAgICAgICAjIHNlcGFyYXRlIHRhZyBzdGFjayB0byBrbm93IHdoZW4gdGhleSBlbmQuCisgICAgICAgICAgICBzZWxmLm5zbWFwcy5hcHBlbmQoTm9uZSkKKyAgICAgICAgZWxpZiBsZW4obnNtYXApID4gMDoKKyAgICAgICAgICAgICMgQSBuZXcgbmFtZXNwYWNlIG1hcHBpbmcgaGFzIGNvbWUgaW50byBwbGF5LgorICAgICAgICAgICAgaW52ZXJ0ZWRfbnNtYXAgPSBkaWN0KCh2YWx1ZSwga2V5KSBmb3Iga2V5LCB2YWx1ZSBpbiBuc21hcC5pdGVtcygpKQorICAgICAgICAgICAgc2VsZi5uc21hcHMuYXBwZW5kKGludmVydGVkX25zbWFwKQorICAgICAgICAgICAgIyBBbHNvIHRyZWF0IHRoZSBuYW1lc3BhY2UgbWFwcGluZyBhcyBhIHNldCBvZiBhdHRyaWJ1dGVzIG9uIHRoZQorICAgICAgICAgICAgIyB0YWcsIHNvIHdlIGNhbiByZWNyZWF0ZSBpdCBsYXRlci4KKyAgICAgICAgICAgIGF0dHJzID0gYXR0cnMuY29weSgpCisgICAgICAgICAgICBmb3IgcHJlZml4LCBuYW1lc3BhY2UgaW4gbnNtYXAuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgPSBOYW1lc3BhY2VkQXR0cmlidXRlKAorICAgICAgICAgICAgICAgICAgICAieG1sbnMiLCBwcmVmaXgsICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIpCisgICAgICAgICAgICAgICAgYXR0cnNbYXR0cmlidXRlXSA9IG5hbWVzcGFjZQorCisgICAgICAgICMgTmFtZXNwYWNlcyBhcmUgaW4gcGxheS4gRmluZCBhbnkgYXR0cmlidXRlcyB0aGF0IGNhbWUgaW4KKyAgICAgICAgIyBmcm9tIGx4bWwgd2l0aCBuYW1lc3BhY2VzIGF0dGFjaGVkIHRvIHRoZWlyIG5hbWVzLCBhbmQKKyAgICAgICAgIyB0dXJuIHRoZW4gaW50byBOYW1lc3BhY2VkQXR0cmlidXRlIG9iamVjdHMuCisgICAgICAgIG5ld19hdHRycyA9IHt9CisgICAgICAgIGZvciBhdHRyLCB2YWx1ZSBpbiBhdHRycy5pdGVtcygpOgorICAgICAgICAgICAgbmFtZXNwYWNlLCBhdHRyID0gc2VsZi5fZ2V0TnNUYWcoYXR0cikKKyAgICAgICAgICAgIGlmIG5hbWVzcGFjZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIG5ld19hdHRyc1thdHRyXSA9IHZhbHVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5zcHJlZml4ID0gc2VsZi5fcHJlZml4X2Zvcl9uYW1lc3BhY2UobmFtZXNwYWNlKQorICAgICAgICAgICAgICAgIGF0dHIgPSBOYW1lc3BhY2VkQXR0cmlidXRlKG5zcHJlZml4LCBhdHRyLCBuYW1lc3BhY2UpCisgICAgICAgICAgICAgICAgbmV3X2F0dHJzW2F0dHJdID0gdmFsdWUKKyAgICAgICAgYXR0cnMgPSBuZXdfYXR0cnMKKworICAgICAgICBuYW1lc3BhY2UsIG5hbWUgPSBzZWxmLl9nZXROc1RhZyhuYW1lKQorICAgICAgICBuc3ByZWZpeCA9IHNlbGYuX3ByZWZpeF9mb3JfbmFtZXNwYWNlKG5hbWVzcGFjZSkKKyAgICAgICAgc2VsZi5zb3VwLmhhbmRsZV9zdGFydHRhZyhuYW1lLCBuYW1lc3BhY2UsIG5zcHJlZml4LCBhdHRycykKKworICAgIGRlZiBfcHJlZml4X2Zvcl9uYW1lc3BhY2Uoc2VsZiwgbmFtZXNwYWNlKToKKyAgICAgICAgIiIiRmluZCB0aGUgY3VycmVudGx5IGFjdGl2ZSBwcmVmaXggZm9yIHRoZSBnaXZlbiBuYW1lc3BhY2UuIiIiCisgICAgICAgIGlmIG5hbWVzcGFjZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZm9yIGludmVydGVkX25zbWFwIGluIHJldmVyc2VkKHNlbGYubnNtYXBzKToKKyAgICAgICAgICAgIGlmIGludmVydGVkX25zbWFwIGlzIG5vdCBOb25lIGFuZCBuYW1lc3BhY2UgaW4gaW52ZXJ0ZWRfbnNtYXA6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludmVydGVkX25zbWFwW25hbWVzcGFjZV0KKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBlbmQoc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYuc291cC5lbmREYXRhKCkKKyAgICAgICAgY29tcGxldGVkX3RhZyA9IHNlbGYuc291cC50YWdTdGFja1stMV0KKyAgICAgICAgbmFtZXNwYWNlLCBuYW1lID0gc2VsZi5fZ2V0TnNUYWcobmFtZSkKKyAgICAgICAgbnNwcmVmaXggPSBOb25lCisgICAgICAgIGlmIG5hbWVzcGFjZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciBpbnZlcnRlZF9uc21hcCBpbiByZXZlcnNlZChzZWxmLm5zbWFwcyk6CisgICAgICAgICAgICAgICAgaWYgaW52ZXJ0ZWRfbnNtYXAgaXMgbm90IE5vbmUgYW5kIG5hbWVzcGFjZSBpbiBpbnZlcnRlZF9uc21hcDoKKyAgICAgICAgICAgICAgICAgICAgbnNwcmVmaXggPSBpbnZlcnRlZF9uc21hcFtuYW1lc3BhY2VdCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHNlbGYuc291cC5oYW5kbGVfZW5kdGFnKG5hbWUsIG5zcHJlZml4KQorICAgICAgICBpZiBsZW4oc2VsZi5uc21hcHMpID4gMToKKyAgICAgICAgICAgICMgVGhpcyB0YWcsIG9yIG9uZSBvZiBpdHMgcGFyZW50cywgaW50cm9kdWNlZCBhIG5hbWVzcGFjZQorICAgICAgICAgICAgIyBtYXBwaW5nLCBzbyBwb3AgaXQgb2ZmIHRoZSBzdGFjay4KKyAgICAgICAgICAgIHNlbGYubnNtYXBzLnBvcCgpCisKKyAgICBkZWYgcGkoc2VsZiwgdGFyZ2V0LCBkYXRhKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGRhdGEoc2VsZiwgY29udGVudCk6CisgICAgICAgIHNlbGYuc291cC5oYW5kbGVfZGF0YShjb250ZW50KQorCisgICAgZGVmIGRvY3R5cGUoc2VsZiwgbmFtZSwgcHViaWQsIHN5c3RlbSk6CisgICAgICAgIHNlbGYuc291cC5lbmREYXRhKCkKKyAgICAgICAgZG9jdHlwZSA9IERvY3R5cGUuZm9yX25hbWVfYW5kX2lkcyhuYW1lLCBwdWJpZCwgc3lzdGVtKQorICAgICAgICBzZWxmLnNvdXAub2JqZWN0X3dhc19wYXJzZWQoZG9jdHlwZSkKKworICAgIGRlZiBjb21tZW50KHNlbGYsIGNvbnRlbnQpOgorICAgICAgICAiSGFuZGxlIGNvbW1lbnRzIGFzIENvbW1lbnQgb2JqZWN0cy4iCisgICAgICAgIHNlbGYuc291cC5lbmREYXRhKCkKKyAgICAgICAgc2VsZi5zb3VwLmhhbmRsZV9kYXRhKGNvbnRlbnQpCisgICAgICAgIHNlbGYuc291cC5lbmREYXRhKENvbW1lbnQpCisKKyAgICBkZWYgdGVzdF9mcmFnbWVudF90b19kb2N1bWVudChzZWxmLCBmcmFnbWVudCk6CisgICAgICAgICIiIlNlZSBgVHJlZUJ1aWxkZXJgLiIiIgorICAgICAgICByZXR1cm4gdSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PlxuJXMnICUgZnJhZ21lbnQKKworCitjbGFzcyBMWE1MVHJlZUJ1aWxkZXIoSFRNTFRyZWVCdWlsZGVyLCBMWE1MVHJlZUJ1aWxkZXJGb3JYTUwpOgorCisgICAgZmVhdHVyZXMgPSBbTFhNTCwgSFRNTCwgRkFTVCwgUEVSTUlTU0lWRV0KKyAgICBpc194bWwgPSBGYWxzZQorCisgICAgZGVmIGRlZmF1bHRfcGFyc2VyKHNlbGYsIGVuY29kaW5nKToKKyAgICAgICAgcmV0dXJuIGV0cmVlLkhUTUxQYXJzZXIKKworICAgIGRlZiBmZWVkKHNlbGYsIG1hcmt1cCk6CisgICAgICAgIGVuY29kaW5nID0gc2VsZi5zb3VwLm9yaWdpbmFsX2VuY29kaW5nCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucGFyc2VyID0gc2VsZi5wYXJzZXJfZm9yKGVuY29kaW5nKQorICAgICAgICAgICAgc2VsZi5wYXJzZXIuZmVlZChtYXJrdXApCisgICAgICAgICAgICBzZWxmLnBhcnNlci5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCAoVW5pY29kZURlY29kZUVycm9yLCBMb29rdXBFcnJvciwgZXRyZWUuUGFyc2VyRXJyb3IpLCBlOgorICAgICAgICAgICAgcmFpc2UgUGFyc2VyUmVqZWN0ZWRNYXJrdXAoc3RyKGUpKQorCisKKyAgICBkZWYgdGVzdF9mcmFnbWVudF90b19kb2N1bWVudChzZWxmLCBmcmFnbWVudCk6CisgICAgICAgICIiIlNlZSBgVHJlZUJ1aWxkZXJgLiIiIgorICAgICAgICByZXR1cm4gdSc8aHRtbD48Ym9keT4lczwvYm9keT48L2h0bWw+JyAlIGZyYWdtZW50CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9kYW1taXQucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9kYW1taXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk2NDBiNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2RhbW1pdC5weQpAQCAtMCwwICsxLDgyOSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKyIiIkJlYXV0aWZ1bCBTb3VwIGJvbnVzIGxpYnJhcnk6IFVuaWNvZGUsIERhbW1pdAorCitUaGlzIGxpYnJhcnkgY29udmVydHMgYSBieXRlc3RyZWFtIHRvIFVuaWNvZGUgdGhyb3VnaCBhbnkgbWVhbnMKK25lY2Vzc2FyeS4gSXQgaXMgaGVhdmlseSBiYXNlZCBvbiBjb2RlIGZyb20gTWFyayBQaWxncmltJ3MgVW5pdmVyc2FsCitGZWVkIFBhcnNlci4gSXQgd29ya3MgYmVzdCBvbiBYTUwgYW5kIFhNTCwgYnV0IGl0IGRvZXMgbm90IHJld3JpdGUgdGhlCitYTUwgb3IgSFRNTCB0byByZWZsZWN0IGEgbmV3IGVuY29kaW5nOyB0aGF0J3MgdGhlIHRyZWUgYnVpbGRlcidzIGpvYi4KKyIiIgorCitpbXBvcnQgY29kZWNzCitmcm9tIGh0bWxlbnRpdHlkZWZzIGltcG9ydCBjb2RlcG9pbnQybmFtZQoraW1wb3J0IHJlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN0cmluZworCisjIEltcG9ydCBhIGxpYnJhcnkgdG8gYXV0b2RldGVjdCBjaGFyYWN0ZXIgZW5jb2RpbmdzLgorY2hhcmRldF90eXBlID0gTm9uZQordHJ5OgorICAgICMgRmlyc3QgdHJ5IHRoZSBmYXN0IEMgaW1wbGVtZW50YXRpb24uCisgICAgIyAgUHlQSSBwYWNrYWdlOiBjY2hhcmRldAorICAgIGltcG9ydCBjY2hhcmRldAorICAgIGRlZiBjaGFyZGV0X2RhbW1pdChzKToKKyAgICAgICAgcmV0dXJuIGNjaGFyZGV0LmRldGVjdChzKVsnZW5jb2RpbmcnXQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRyeToKKyAgICAgICAgIyBGYWxsIGJhY2sgdG8gdGhlIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uCisgICAgICAgICMgIERlYmlhbiBwYWNrYWdlOiBweXRob24tY2hhcmRldAorICAgICAgICAjICBQeVBJIHBhY2thZ2U6IGNoYXJkZXQKKyAgICAgICAgaW1wb3J0IGNoYXJkZXQKKyAgICAgICAgZGVmIGNoYXJkZXRfZGFtbWl0KHMpOgorICAgICAgICAgICAgcmV0dXJuIGNoYXJkZXQuZGV0ZWN0KHMpWydlbmNvZGluZyddCisgICAgICAgICNpbXBvcnQgY2hhcmRldC5jb25zdGFudHMKKyAgICAgICAgI2NoYXJkZXQuY29uc3RhbnRzLl9kZWJ1ZyA9IDEKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICMgTm8gY2hhcmRldCBhdmFpbGFibGUuCisgICAgICAgIGRlZiBjaGFyZGV0X2RhbW1pdChzKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyMgQXZhaWxhYmxlIGZyb20gaHR0cDovL2Nqa3B5dGhvbi5pMThuLm9yZy8uCit0cnk6CisgICAgaW1wb3J0IGljb252X2NvZGVjCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworCit4bWxfZW5jb2RpbmdfcmUgPSByZS5jb21waWxlKAorICAgICdePFw/LiplbmNvZGluZz1bXCciXSguKj8pW1wnIl0uKlw/PicuZW5jb2RlKCksIHJlLkkpCitodG1sX21ldGFfcmUgPSByZS5jb21waWxlKAorICAgICc8XHMqbWV0YVtePl0rY2hhcnNldFxzKj1ccypbIlwnXT8oW14+XSo/KVsgLztcJyI+XScuZW5jb2RlKCksIHJlLkkpCisKK2NsYXNzIEVudGl0eVN1YnN0aXR1dGlvbihvYmplY3QpOgorCisgICAgIiIiU3Vic3RpdHV0ZSBYTUwgb3IgSFRNTCBlbnRpdGllcyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVycy4iIiIKKworICAgIGRlZiBfcG9wdWxhdGVfY2xhc3NfdmFyaWFibGVzKCk6CisgICAgICAgIGxvb2t1cCA9IHt9CisgICAgICAgIHJldmVyc2VfbG9va3VwID0ge30KKyAgICAgICAgY2hhcmFjdGVyc19mb3JfcmUgPSBbXQorICAgICAgICBmb3IgY29kZXBvaW50LCBuYW1lIGluIGxpc3QoY29kZXBvaW50Mm5hbWUuaXRlbXMoKSk6CisgICAgICAgICAgICBjaGFyYWN0ZXIgPSB1bmljaHIoY29kZXBvaW50KQorICAgICAgICAgICAgaWYgY29kZXBvaW50ICE9IDM0OgorICAgICAgICAgICAgICAgICMgVGhlcmUncyBubyBwb2ludCBpbiB0dXJuaW5nIHRoZSBxdW90YXRpb24gbWFyayBpbnRvCisgICAgICAgICAgICAgICAgIyAmcXVvdDssIHVubGVzcyBpdCBoYXBwZW5zIHdpdGhpbiBhbiBhdHRyaWJ1dGUgdmFsdWUsIHdoaWNoCisgICAgICAgICAgICAgICAgIyBpcyBoYW5kbGVkIGVsc2V3aGVyZS4KKyAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzX2Zvcl9yZS5hcHBlbmQoY2hhcmFjdGVyKQorICAgICAgICAgICAgICAgIGxvb2t1cFtjaGFyYWN0ZXJdID0gbmFtZQorICAgICAgICAgICAgIyBCdXQgd2UgZG8gd2FudCB0byB0dXJuICZxdW90OyBpbnRvIHRoZSBxdW90YXRpb24gbWFyay4KKyAgICAgICAgICAgIHJldmVyc2VfbG9va3VwW25hbWVdID0gY2hhcmFjdGVyCisgICAgICAgIHJlX2RlZmluaXRpb24gPSAiWyVzXSIgJSAiIi5qb2luKGNoYXJhY3RlcnNfZm9yX3JlKQorICAgICAgICByZXR1cm4gbG9va3VwLCByZXZlcnNlX2xvb2t1cCwgcmUuY29tcGlsZShyZV9kZWZpbml0aW9uKQorICAgIChDSEFSQUNURVJfVE9fSFRNTF9FTlRJVFksIEhUTUxfRU5USVRZX1RPX0NIQVJBQ1RFUiwKKyAgICAgQ0hBUkFDVEVSX1RPX0hUTUxfRU5USVRZX1JFKSA9IF9wb3B1bGF0ZV9jbGFzc192YXJpYWJsZXMoKQorCisgICAgQ0hBUkFDVEVSX1RPX1hNTF9FTlRJVFkgPSB7CisgICAgICAgICInIjogImFwb3MiLAorICAgICAgICAnIic6ICJxdW90IiwKKyAgICAgICAgIiYiOiAiYW1wIiwKKyAgICAgICAgIjwiOiAibHQiLAorICAgICAgICAiPiI6ICJndCIsCisgICAgICAgIH0KKworICAgIEJBUkVfQU1QRVJTQU5EX09SX0JSQUNLRVQgPSByZS5jb21waWxlKCIoWzw+XXwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiYoPyEjXGQrO3wjeFswLTlhLWZBLUZdKzt8XHcrOykiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIikiKQorCisgICAgQU1QRVJTQU5EX09SX0JSQUNLRVQgPSByZS5jb21waWxlKCIoWzw+Jl0pIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfc3Vic3RpdHV0ZV9odG1sX2VudGl0eShjbHMsIG1hdGNob2JqKToKKyAgICAgICAgZW50aXR5ID0gY2xzLkNIQVJBQ1RFUl9UT19IVE1MX0VOVElUWS5nZXQobWF0Y2hvYmouZ3JvdXAoMCkpCisgICAgICAgIHJldHVybiAiJiVzOyIgJSBlbnRpdHkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfc3Vic3RpdHV0ZV94bWxfZW50aXR5KGNscywgbWF0Y2hvYmopOgorICAgICAgICAiIiJVc2VkIHdpdGggYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gc3Vic3RpdHV0ZSB0aGUKKyAgICAgICAgYXBwcm9wcmlhdGUgWE1MIGVudGl0eSBmb3IgYW4gWE1MIHNwZWNpYWwgY2hhcmFjdGVyLiIiIgorICAgICAgICBlbnRpdHkgPSBjbHMuQ0hBUkFDVEVSX1RPX1hNTF9FTlRJVFlbbWF0Y2hvYmouZ3JvdXAoMCldCisgICAgICAgIHJldHVybiAiJiVzOyIgJSBlbnRpdHkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBxdW90ZWRfYXR0cmlidXRlX3ZhbHVlKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIiIiTWFrZSBhIHZhbHVlIGludG8gYSBxdW90ZWQgWE1MIGF0dHJpYnV0ZSwgcG9zc2libHkgZXNjYXBpbmcgaXQuCisKKyAgICAgICAgIE1vc3Qgc3RyaW5ncyB3aWxsIGJlIHF1b3RlZCB1c2luZyBkb3VibGUgcXVvdGVzLgorCisgICAgICAgICAgQm9iJ3MgQmFyIC0+ICJCb2IncyBCYXIiCisKKyAgICAgICAgIElmIGEgc3RyaW5nIGNvbnRhaW5zIGRvdWJsZSBxdW90ZXMsIGl0IHdpbGwgYmUgcXVvdGVkIHVzaW5nCisgICAgICAgICBzaW5nbGUgcXVvdGVzLgorCisgICAgICAgICAgV2VsY29tZSB0byAibXkgYmFyIiAtPiAnV2VsY29tZSB0byAibXkgYmFyIicKKworICAgICAgICAgSWYgYSBzdHJpbmcgY29udGFpbnMgYm90aCBzaW5nbGUgYW5kIGRvdWJsZSBxdW90ZXMsIHRoZQorICAgICAgICAgZG91YmxlIHF1b3RlcyB3aWxsIGJlIGVzY2FwZWQsIGFuZCB0aGUgc3RyaW5nIHdpbGwgYmUgcXVvdGVkCisgICAgICAgICB1c2luZyBkb3VibGUgcXVvdGVzLgorCisgICAgICAgICAgV2VsY29tZSB0byAiQm9iJ3MgQmFyIiAtPiAiV2VsY29tZSB0byAmcXVvdDtCb2IncyBiYXImcXVvdDsKKyAgICAgICAgIiIiCisgICAgICAgIHF1b3RlX3dpdGggPSAnIicKKyAgICAgICAgaWYgJyInIGluIHZhbHVlOgorICAgICAgICAgICAgaWYgIiciIGluIHZhbHVlOgorICAgICAgICAgICAgICAgICMgVGhlIHN0cmluZyBjb250YWlucyBib3RoIHNpbmdsZSBhbmQgZG91YmxlCisgICAgICAgICAgICAgICAgIyBxdW90ZXMuICBUdXJuIHRoZSBkb3VibGUgcXVvdGVzIGludG8KKyAgICAgICAgICAgICAgICAjIGVudGl0aWVzLiBXZSBxdW90ZSB0aGUgZG91YmxlIHF1b3RlcyByYXRoZXIgdGhhbgorICAgICAgICAgICAgICAgICMgdGhlIHNpbmdsZSBxdW90ZXMgYmVjYXVzZSB0aGUgZW50aXR5IG5hbWUgaXMKKyAgICAgICAgICAgICAgICAjICImcXVvdDsiIHdoZXRoZXIgdGhpcyBpcyBIVE1MIG9yIFhNTC4gIElmIHdlCisgICAgICAgICAgICAgICAgIyBxdW90ZWQgdGhlIHNpbmdsZSBxdW90ZXMsIHdlJ2QgaGF2ZSB0byBkZWNpZGUKKyAgICAgICAgICAgICAgICAjIGJldHdlZW4gJmFwb3M7IGFuZCAmc3F1b3Q7LgorICAgICAgICAgICAgICAgIHJlcGxhY2Vfd2l0aCA9ICImcXVvdDsiCisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCciJywgcmVwbGFjZV93aXRoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFRoZXJlIGFyZSBkb3VibGUgcXVvdGVzIGJ1dCBubyBzaW5nbGUgcXVvdGVzLgorICAgICAgICAgICAgICAgICMgV2UgY2FuIHVzZSBzaW5nbGUgcXVvdGVzIHRvIHF1b3RlIHRoZSBhdHRyaWJ1dGUuCisgICAgICAgICAgICAgICAgcXVvdGVfd2l0aCA9ICInIgorICAgICAgICByZXR1cm4gcXVvdGVfd2l0aCArIHZhbHVlICsgcXVvdGVfd2l0aAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHN1YnN0aXR1dGVfeG1sKGNscywgdmFsdWUsIG1ha2VfcXVvdGVkX2F0dHJpYnV0ZT1GYWxzZSk6CisgICAgICAgICIiIlN1YnN0aXR1dGUgWE1MIGVudGl0aWVzIGZvciBzcGVjaWFsIFhNTCBjaGFyYWN0ZXJzLgorCisgICAgICAgIDpwYXJhbSB2YWx1ZTogQSBzdHJpbmcgdG8gYmUgc3Vic3RpdHV0ZWQuIFRoZSBsZXNzLXRoYW4gc2lnbgorICAgICAgICAgIHdpbGwgYmVjb21lICZsdDssIHRoZSBncmVhdGVyLXRoYW4gc2lnbiB3aWxsIGJlY29tZSAmZ3Q7LAorICAgICAgICAgIGFuZCBhbnkgYW1wZXJzYW5kcyB3aWxsIGJlY29tZSAmYW1wOy4gSWYgeW91IHdhbnQgYW1wZXJzYW5kcworICAgICAgICAgIHRoYXQgYXBwZWFyIHRvIGJlIHBhcnQgb2YgYW4gZW50aXR5IGRlZmluaXRpb24gdG8gYmUgbGVmdAorICAgICAgICAgIGFsb25lLCB1c2Ugc3Vic3RpdHV0ZV94bWxfY29udGFpbmluZ19lbnRpdGllcygpIGluc3RlYWQuCisKKyAgICAgICAgOnBhcmFtIG1ha2VfcXVvdGVkX2F0dHJpYnV0ZTogSWYgVHJ1ZSwgdGhlbiB0aGUgc3RyaW5nIHdpbGwgYmUKKyAgICAgICAgIHF1b3RlZCwgYXMgYmVmaXRzIGFuIGF0dHJpYnV0ZSB2YWx1ZS4KKyAgICAgICAgIiIiCisgICAgICAgICMgRXNjYXBlIGFuZ2xlIGJyYWNrZXRzIGFuZCBhbXBlcnNhbmRzLgorICAgICAgICB2YWx1ZSA9IGNscy5BTVBFUlNBTkRfT1JfQlJBQ0tFVC5zdWIoCisgICAgICAgICAgICBjbHMuX3N1YnN0aXR1dGVfeG1sX2VudGl0eSwgdmFsdWUpCisKKyAgICAgICAgaWYgbWFrZV9xdW90ZWRfYXR0cmlidXRlOgorICAgICAgICAgICAgdmFsdWUgPSBjbHMucXVvdGVkX2F0dHJpYnV0ZV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc3Vic3RpdHV0ZV94bWxfY29udGFpbmluZ19lbnRpdGllcygKKyAgICAgICAgY2xzLCB2YWx1ZSwgbWFrZV9xdW90ZWRfYXR0cmlidXRlPUZhbHNlKToKKyAgICAgICAgIiIiU3Vic3RpdHV0ZSBYTUwgZW50aXRpZXMgZm9yIHNwZWNpYWwgWE1MIGNoYXJhY3RlcnMuCisKKyAgICAgICAgOnBhcmFtIHZhbHVlOiBBIHN0cmluZyB0byBiZSBzdWJzdGl0dXRlZC4gVGhlIGxlc3MtdGhhbiBzaWduIHdpbGwKKyAgICAgICAgICBiZWNvbWUgJmx0OywgdGhlIGdyZWF0ZXItdGhhbiBzaWduIHdpbGwgYmVjb21lICZndDssIGFuZCBhbnkKKyAgICAgICAgICBhbXBlcnNhbmRzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIGFuIGVudGl0eSBkZWZpdGlvbiB3aWxsCisgICAgICAgICAgYmVjb21lICZhbXA7LgorCisgICAgICAgIDpwYXJhbSBtYWtlX3F1b3RlZF9hdHRyaWJ1dGU6IElmIFRydWUsIHRoZW4gdGhlIHN0cmluZyB3aWxsIGJlCisgICAgICAgICBxdW90ZWQsIGFzIGJlZml0cyBhbiBhdHRyaWJ1dGUgdmFsdWUuCisgICAgICAgICIiIgorICAgICAgICAjIEVzY2FwZSBhbmdsZSBicmFja2V0cywgYW5kIGFtcGVyc2FuZHMgdGhhdCBhcmVuJ3QgcGFydCBvZgorICAgICAgICAjIGVudGl0aWVzLgorICAgICAgICB2YWx1ZSA9IGNscy5CQVJFX0FNUEVSU0FORF9PUl9CUkFDS0VULnN1YigKKyAgICAgICAgICAgIGNscy5fc3Vic3RpdHV0ZV94bWxfZW50aXR5LCB2YWx1ZSkKKworICAgICAgICBpZiBtYWtlX3F1b3RlZF9hdHRyaWJ1dGU6CisgICAgICAgICAgICB2YWx1ZSA9IGNscy5xdW90ZWRfYXR0cmlidXRlX3ZhbHVlKHZhbHVlKQorICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzdWJzdGl0dXRlX2h0bWwoY2xzLCBzKToKKyAgICAgICAgIiIiUmVwbGFjZSBjZXJ0YWluIFVuaWNvZGUgY2hhcmFjdGVycyB3aXRoIG5hbWVkIEhUTUwgZW50aXRpZXMuCisKKyAgICAgICAgVGhpcyBkaWZmZXJzIGZyb20gZGF0YS5lbmNvZGUoZW5jb2RpbmcsICd4bWxjaGFycmVmcmVwbGFjZScpCisgICAgICAgIGluIHRoYXQgdGhlIGdvYWwgaXMgdG8gbWFrZSB0aGUgcmVzdWx0IG1vcmUgcmVhZGFibGUgKHRvIHRob3NlCisgICAgICAgIHdpdGggQVNDSUkgZGlzcGxheXMpIHJhdGhlciB0aGFuIHRvIHJlY292ZXIgZnJvbQorICAgICAgICBlcnJvcnMuIFRoZXJlJ3MgYWJzb2x1dGVseSBub3RoaW5nIHdyb25nIHdpdGggYSBVVEYtOCBzdHJpbmcKKyAgICAgICAgY29udGFpbmcgYSBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFLCBidXQgcmVwbGFjaW5nIHRoYXQKKyAgICAgICAgY2hhcmFjdGVyIHdpdGggIiZlYWN1dGU7IiB3aWxsIG1ha2UgaXQgbW9yZSByZWFkYWJsZSB0byBzb21lCisgICAgICAgIHBlb3BsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBjbHMuQ0hBUkFDVEVSX1RPX0hUTUxfRU5USVRZX1JFLnN1YigKKyAgICAgICAgICAgIGNscy5fc3Vic3RpdHV0ZV9odG1sX2VudGl0eSwgcykKKworCitjbGFzcyBFbmNvZGluZ0RldGVjdG9yOgorICAgICIiIlN1Z2dlc3RzIGEgbnVtYmVyIG9mIHBvc3NpYmxlIGVuY29kaW5ncyBmb3IgYSBieXRlc3RyaW5nLgorCisgICAgT3JkZXIgb2YgcHJlY2VkZW5jZToKKworICAgIDEuIEVuY29kaW5ncyB5b3Ugc3BlY2lmaWNhbGx5IHRlbGwgRW5jb2RpbmdEZXRlY3RvciB0byB0cnkgZmlyc3QKKyAgICAodGhlIG92ZXJyaWRlX2VuY29kaW5ncyBhcmd1bWVudCB0byB0aGUgY29uc3RydWN0b3IpLgorCisgICAgMi4gQW4gZW5jb2RpbmcgZGVjbGFyZWQgd2l0aGluIHRoZSBieXRlc3RyaW5nIGl0c2VsZiwgZWl0aGVyIGluIGFuCisgICAgWE1MIGRlY2xhcmF0aW9uIChpZiB0aGUgYnl0ZXN0cmluZyBpcyB0byBiZSBpbnRlcnByZXRlZCBhcyBhbiBYTUwKKyAgICBkb2N1bWVudCksIG9yIGluIGEgPG1ldGE+IHRhZyAoaWYgdGhlIGJ5dGVzdHJpbmcgaXMgdG8gYmUKKyAgICBpbnRlcnByZXRlZCBhcyBhbiBIVE1MIGRvY3VtZW50LikKKworICAgIDMuIEFuIGVuY29kaW5nIGRldGVjdGVkIHRocm91Z2ggdGV4dHVhbCBhbmFseXNpcyBieSBjaGFyZGV0LAorICAgIGNjaGFyZGV0LCBvciBhIHNpbWlsYXIgZXh0ZXJuYWwgbGlicmFyeS4KKworICAgIDQuIFVURi04LgorCisgICAgNS4gV2luZG93cy0xMjUyLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXJrdXAsIG92ZXJyaWRlX2VuY29kaW5ncz1Ob25lLCBpc19odG1sPUZhbHNlKToKKyAgICAgICAgc2VsZi5vdmVycmlkZV9lbmNvZGluZ3MgPSBvdmVycmlkZV9lbmNvZGluZ3Mgb3IgW10KKyAgICAgICAgc2VsZi5jaGFyZGV0X2VuY29kaW5nID0gTm9uZQorICAgICAgICBzZWxmLmlzX2h0bWwgPSBpc19odG1sCisgICAgICAgIHNlbGYuZGVjbGFyZWRfZW5jb2RpbmcgPSBOb25lCisKKyAgICAgICAgIyBGaXJzdCBvcmRlciBvZiBidXNpbmVzczogc3RyaXAgYSBieXRlLW9yZGVyIG1hcmsuCisgICAgICAgIHNlbGYubWFya3VwLCBzZWxmLnNuaWZmZWRfZW5jb2RpbmcgPSBzZWxmLnN0cmlwX2J5dGVfb3JkZXJfbWFyayhtYXJrdXApCisKKyAgICBkZWYgX3VzYWJsZShzZWxmLCBlbmNvZGluZywgdHJpZWQpOgorICAgICAgICBpZiBlbmNvZGluZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGVuY29kaW5nID0gZW5jb2RpbmcubG93ZXIoKQorICAgICAgICAgICAgaWYgZW5jb2Rpbmcgbm90IGluIHRyaWVkOgorICAgICAgICAgICAgICAgIHRyaWVkLmFkZChlbmNvZGluZykKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBlbmNvZGluZ3Moc2VsZik6CisgICAgICAgICIiIllpZWxkIGEgbnVtYmVyIG9mIGVuY29kaW5ncyB0aGF0IG1pZ2h0IHdvcmsgZm9yIHRoaXMgbWFya3VwLiIiIgorICAgICAgICB0cmllZCA9IHNldCgpCisgICAgICAgIGZvciBlIGluIHNlbGYub3ZlcnJpZGVfZW5jb2RpbmdzOgorICAgICAgICAgICAgaWYgc2VsZi5fdXNhYmxlKGUsIHRyaWVkKToKKyAgICAgICAgICAgICAgICB5aWVsZCBlCisKKyAgICAgICAgIyBEaWQgdGhlIGRvY3VtZW50IG9yaWdpbmFsbHkgc3RhcnQgd2l0aCBhIGJ5dGUtb3JkZXIgbWFyaworICAgICAgICAjIHRoYXQgaW5kaWNhdGVkIGl0cyBlbmNvZGluZz8KKyAgICAgICAgaWYgc2VsZi5fdXNhYmxlKHNlbGYuc25pZmZlZF9lbmNvZGluZywgdHJpZWQpOgorICAgICAgICAgICAgeWllbGQgc2VsZi5zbmlmZmVkX2VuY29kaW5nCisKKyAgICAgICAgIyBMb29rIHdpdGhpbiB0aGUgZG9jdW1lbnQgZm9yIGFuIFhNTCBvciBIVE1MIGVuY29kaW5nCisgICAgICAgICMgZGVjbGFyYXRpb24uCisgICAgICAgIGlmIHNlbGYuZGVjbGFyZWRfZW5jb2RpbmcgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZGVjbGFyZWRfZW5jb2RpbmcgPSBzZWxmLmZpbmRfZGVjbGFyZWRfZW5jb2RpbmcoCisgICAgICAgICAgICAgICAgc2VsZi5tYXJrdXAsIHNlbGYuaXNfaHRtbCkKKyAgICAgICAgaWYgc2VsZi5fdXNhYmxlKHNlbGYuZGVjbGFyZWRfZW5jb2RpbmcsIHRyaWVkKToKKyAgICAgICAgICAgIHlpZWxkIHNlbGYuZGVjbGFyZWRfZW5jb2RpbmcKKworICAgICAgICAjIFVzZSB0aGlyZC1wYXJ0eSBjaGFyYWN0ZXIgc2V0IGRldGVjdGlvbiB0byBndWVzcyBhdCB0aGUKKyAgICAgICAgIyBlbmNvZGluZy4KKyAgICAgICAgaWYgc2VsZi5jaGFyZGV0X2VuY29kaW5nIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmNoYXJkZXRfZW5jb2RpbmcgPSBjaGFyZGV0X2RhbW1pdChzZWxmLm1hcmt1cCkKKyAgICAgICAgaWYgc2VsZi5fdXNhYmxlKHNlbGYuY2hhcmRldF9lbmNvZGluZywgdHJpZWQpOgorICAgICAgICAgICAgeWllbGQgc2VsZi5jaGFyZGV0X2VuY29kaW5nCisKKyAgICAgICAgIyBBcyBhIGxhc3QtZGl0Y2ggZWZmb3J0LCB0cnkgdXRmLTggYW5kIHdpbmRvd3MtMTI1Mi4KKyAgICAgICAgZm9yIGUgaW4gKCd1dGYtOCcsICd3aW5kb3dzLTEyNTInKToKKyAgICAgICAgICAgIGlmIHNlbGYuX3VzYWJsZShlLCB0cmllZCk6CisgICAgICAgICAgICAgICAgeWllbGQgZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHN0cmlwX2J5dGVfb3JkZXJfbWFyayhjbHMsIGRhdGEpOgorICAgICAgICAiIiJJZiBhIGJ5dGUtb3JkZXIgbWFyayBpcyBwcmVzZW50LCBzdHJpcCBpdCBhbmQgcmV0dXJuIHRoZSBlbmNvZGluZyBpdCBpbXBsaWVzLiIiIgorICAgICAgICBlbmNvZGluZyA9IE5vbmUKKyAgICAgICAgaWYgKGxlbihkYXRhKSA+PSA0KSBhbmQgKGRhdGFbOjJdID09IGInXHhmZVx4ZmYnKSBcCisgICAgICAgICAgICAgICBhbmQgKGRhdGFbMjo0XSAhPSAnXHgwMFx4MDAnKToKKyAgICAgICAgICAgIGVuY29kaW5nID0gJ3V0Zi0xNmJlJworICAgICAgICAgICAgZGF0YSA9IGRhdGFbMjpdCisgICAgICAgIGVsaWYgKGxlbihkYXRhKSA+PSA0KSBhbmQgKGRhdGFbOjJdID09IGInXHhmZlx4ZmUnKSBcCisgICAgICAgICAgICAgICAgIGFuZCAoZGF0YVsyOjRdICE9ICdceDAwXHgwMCcpOgorICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmLTE2bGUnCisgICAgICAgICAgICBkYXRhID0gZGF0YVsyOl0KKyAgICAgICAgZWxpZiBkYXRhWzozXSA9PSBiJ1x4ZWZceGJiXHhiZic6CisgICAgICAgICAgICBlbmNvZGluZyA9ICd1dGYtOCcKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhWzM6XQorICAgICAgICBlbGlmIGRhdGFbOjRdID09IGInXHgwMFx4MDBceGZlXHhmZic6CisgICAgICAgICAgICBlbmNvZGluZyA9ICd1dGYtMzJiZScKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhWzQ6XQorICAgICAgICBlbGlmIGRhdGFbOjRdID09IGInXHhmZlx4ZmVceDAwXHgwMCc6CisgICAgICAgICAgICBlbmNvZGluZyA9ICd1dGYtMzJsZScKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhWzQ6XQorICAgICAgICByZXR1cm4gZGF0YSwgZW5jb2RpbmcKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmaW5kX2RlY2xhcmVkX2VuY29kaW5nKGNscywgbWFya3VwLCBpc19odG1sPUZhbHNlLCBzZWFyY2hfZW50aXJlX2RvY3VtZW50PUZhbHNlKToKKyAgICAgICAgIiIiR2l2ZW4gYSBkb2N1bWVudCwgdHJpZXMgdG8gZmluZCBpdHMgZGVjbGFyZWQgZW5jb2RpbmcuCisKKyAgICAgICAgQW4gWE1MIGVuY29kaW5nIGlzIGRlY2xhcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRvY3VtZW50LgorCisgICAgICAgIEFuIEhUTUwgZW5jb2RpbmcgaXMgZGVjbGFyZWQgaW4gYSA8bWV0YT4gdGFnLCBob3BlZnVsbHkgbmVhciB0aGUKKyAgICAgICAgYmVnaW5uaW5nIG9mIHRoZSBkb2N1bWVudC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlYXJjaF9lbnRpcmVfZG9jdW1lbnQ6CisgICAgICAgICAgICB4bWxfZW5kcG9zID0gaHRtbF9lbmRwb3MgPSBsZW4obWFya3VwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgeG1sX2VuZHBvcyA9IDEwMjQKKyAgICAgICAgICAgIGh0bWxfZW5kcG9zID0gbWF4KDIwNDgsIGludChsZW4obWFya3VwKSAqIDAuMDUpKQorICAgICAgICAgICAgCisgICAgICAgIGRlY2xhcmVkX2VuY29kaW5nID0gTm9uZQorICAgICAgICBkZWNsYXJlZF9lbmNvZGluZ19tYXRjaCA9IHhtbF9lbmNvZGluZ19yZS5zZWFyY2gobWFya3VwLCBlbmRwb3M9eG1sX2VuZHBvcykKKyAgICAgICAgaWYgbm90IGRlY2xhcmVkX2VuY29kaW5nX21hdGNoIGFuZCBpc19odG1sOgorICAgICAgICAgICAgZGVjbGFyZWRfZW5jb2RpbmdfbWF0Y2ggPSBodG1sX21ldGFfcmUuc2VhcmNoKG1hcmt1cCwgZW5kcG9zPWh0bWxfZW5kcG9zKQorICAgICAgICBpZiBkZWNsYXJlZF9lbmNvZGluZ19tYXRjaCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGRlY2xhcmVkX2VuY29kaW5nID0gZGVjbGFyZWRfZW5jb2RpbmdfbWF0Y2guZ3JvdXBzKClbMF0uZGVjb2RlKAorICAgICAgICAgICAgICAgICdhc2NpaScpCisgICAgICAgIGlmIGRlY2xhcmVkX2VuY29kaW5nOgorICAgICAgICAgICAgcmV0dXJuIGRlY2xhcmVkX2VuY29kaW5nLmxvd2VyKCkKKyAgICAgICAgcmV0dXJuIE5vbmUKKworY2xhc3MgVW5pY29kZURhbW1pdDoKKyAgICAiIiJBIGNsYXNzIGZvciBkZXRlY3RpbmcgdGhlIGVuY29kaW5nIG9mIGEgKk1MIGRvY3VtZW50IGFuZAorICAgIGNvbnZlcnRpbmcgaXQgdG8gYSBVbmljb2RlIHN0cmluZy4gSWYgdGhlIHNvdXJjZSBlbmNvZGluZyBpcworICAgIHdpbmRvd3MtMTI1MiwgY2FuIHJlcGxhY2UgTVMgc21hcnQgcXVvdGVzIHdpdGggdGhlaXIgSFRNTCBvciBYTUwKKyAgICBlcXVpdmFsZW50cy4iIiIKKworICAgICMgVGhpcyBkaWN0aW9uYXJ5IG1hcHMgY29tbW9ubHkgc2VlbiB2YWx1ZXMgZm9yICJjaGFyc2V0IiBpbiBIVE1MCisgICAgIyBtZXRhIHRhZ3MgdG8gdGhlIGNvcnJlc3BvbmRpbmcgUHl0aG9uIGNvZGVjIG5hbWVzLiBJdCBvbmx5IGNvdmVycworICAgICMgdmFsdWVzIHRoYXQgYXJlbid0IGluIFB5dGhvbidzIGFsaWFzZXMgYW5kIGNhbid0IGJlIGRldGVybWluZWQKKyAgICAjIGJ5IHRoZSBoZXVyaXN0aWNzIGluIGZpbmRfY29kZWMuCisgICAgQ0hBUlNFVF9BTElBU0VTID0geyJtYWNpbnRvc2giOiAibWFjLXJvbWFuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIngtc2ppcyI6ICJzaGlmdC1qaXMifQorCisgICAgRU5DT0RJTkdTX1dJVEhfU01BUlRfUVVPVEVTID0gWworICAgICAgICAid2luZG93cy0xMjUyIiwKKyAgICAgICAgImlzby04ODU5LTEiLAorICAgICAgICAiaXNvLTg4NTktMiIsCisgICAgICAgIF0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXJrdXAsIG92ZXJyaWRlX2VuY29kaW5ncz1bXSwKKyAgICAgICAgICAgICAgICAgc21hcnRfcXVvdGVzX3RvPU5vbmUsIGlzX2h0bWw9RmFsc2UpOgorICAgICAgICBzZWxmLnNtYXJ0X3F1b3Rlc190byA9IHNtYXJ0X3F1b3Rlc190bworICAgICAgICBzZWxmLnRyaWVkX2VuY29kaW5ncyA9IFtdCisgICAgICAgIHNlbGYuY29udGFpbnNfcmVwbGFjZW1lbnRfY2hhcmFjdGVycyA9IEZhbHNlCisgICAgICAgIHNlbGYuaXNfaHRtbCA9IGlzX2h0bWwKKworICAgICAgICBzZWxmLmRldGVjdG9yID0gRW5jb2RpbmdEZXRlY3RvcihtYXJrdXAsIG92ZXJyaWRlX2VuY29kaW5ncywgaXNfaHRtbCkKKworICAgICAgICAjIFNob3J0LWNpcmN1aXQgaWYgdGhlIGRhdGEgaXMgaW4gVW5pY29kZSB0byBiZWdpbiB3aXRoLgorICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmt1cCwgdW5pY29kZSkgb3IgbWFya3VwID09ICcnOgorICAgICAgICAgICAgc2VsZi5tYXJrdXAgPSBtYXJrdXAKKyAgICAgICAgICAgIHNlbGYudW5pY29kZV9tYXJrdXAgPSB1bmljb2RlKG1hcmt1cCkKKyAgICAgICAgICAgIHNlbGYub3JpZ2luYWxfZW5jb2RpbmcgPSBOb25lCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIFRoZSBlbmNvZGluZyBkZXRlY3RvciBtYXkgaGF2ZSBzdHJpcHBlZCBhIGJ5dGUtb3JkZXIgbWFyay4KKyAgICAgICAgIyBVc2UgdGhlIHN0cmlwcGVkIG1hcmt1cCBmcm9tIHRoaXMgcG9pbnQgb24uCisgICAgICAgIHNlbGYubWFya3VwID0gc2VsZi5kZXRlY3Rvci5tYXJrdXAKKworICAgICAgICB1ID0gTm9uZQorICAgICAgICBmb3IgZW5jb2RpbmcgaW4gc2VsZi5kZXRlY3Rvci5lbmNvZGluZ3M6CisgICAgICAgICAgICBtYXJrdXAgPSBzZWxmLmRldGVjdG9yLm1hcmt1cAorICAgICAgICAgICAgdSA9IHNlbGYuX2NvbnZlcnRfZnJvbShlbmNvZGluZykKKyAgICAgICAgICAgIGlmIHUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBpZiBub3QgdToKKyAgICAgICAgICAgICMgTm9uZSBvZiB0aGUgZW5jb2RpbmdzIHdvcmtlZC4gQXMgYW4gYWJzb2x1dGUgbGFzdCByZXNvcnQsCisgICAgICAgICAgICAjIHRyeSB0aGVtIGFnYWluIHdpdGggY2hhcmFjdGVyIHJlcGxhY2VtZW50LgorCisgICAgICAgICAgICBmb3IgZW5jb2RpbmcgaW4gc2VsZi5kZXRlY3Rvci5lbmNvZGluZ3M6CisgICAgICAgICAgICAgICAgaWYgZW5jb2RpbmcgIT0gImFzY2lpIjoKKyAgICAgICAgICAgICAgICAgICAgdSA9IHNlbGYuX2NvbnZlcnRfZnJvbShlbmNvZGluZywgInJlcGxhY2UiKQorICAgICAgICAgICAgICAgIGlmIHUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU29tZSBjaGFyYWN0ZXJzIGNvdWxkIG5vdCBiZSBkZWNvZGVkLCBhbmQgd2VyZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlcGxhY2VkIHdpdGggUkVQTEFDRU1FTlQgQ0hBUkFDVEVSLiIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29udGFpbnNfcmVwbGFjZW1lbnRfY2hhcmFjdGVycyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAjIElmIG5vbmUgb2YgdGhhdCB3b3JrZWQsIHdlIGNvdWxkIGF0IHRoaXMgcG9pbnQgZm9yY2UgaXQgdG8KKyAgICAgICAgIyBBU0NJSSwgYnV0IHRoYXQgd291bGQgZGVzdHJveSBzbyBtdWNoIGRhdGEgdGhhdCBJIHRoaW5rCisgICAgICAgICMgZ2l2aW5nIHVwIGlzIGJldHRlci4KKyAgICAgICAgc2VsZi51bmljb2RlX21hcmt1cCA9IHUKKyAgICAgICAgaWYgbm90IHU6CisgICAgICAgICAgICBzZWxmLm9yaWdpbmFsX2VuY29kaW5nID0gTm9uZQorCisgICAgZGVmIF9zdWJfbXNfY2hhcihzZWxmLCBtYXRjaCk6CisgICAgICAgICIiIkNoYW5nZXMgYSBNUyBzbWFydCBxdW90ZSBjaGFyYWN0ZXIgdG8gYW4gWE1MIG9yIEhUTUwKKyAgICAgICAgZW50aXR5LCBvciBhbiBBU0NJSSBjaGFyYWN0ZXIuIiIiCisgICAgICAgIG9yaWcgPSBtYXRjaC5ncm91cCgxKQorICAgICAgICBpZiBzZWxmLnNtYXJ0X3F1b3Rlc190byA9PSAnYXNjaWknOgorICAgICAgICAgICAgc3ViID0gc2VsZi5NU19DSEFSU19UT19BU0NJSS5nZXQob3JpZykuZW5jb2RlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN1YiA9IHNlbGYuTVNfQ0hBUlMuZ2V0KG9yaWcpCisgICAgICAgICAgICBpZiB0eXBlKHN1YikgPT0gdHVwbGU6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zbWFydF9xdW90ZXNfdG8gPT0gJ3htbCc6CisgICAgICAgICAgICAgICAgICAgIHN1YiA9ICcmI3gnLmVuY29kZSgpICsgc3ViWzFdLmVuY29kZSgpICsgJzsnLmVuY29kZSgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc3ViID0gJyYnLmVuY29kZSgpICsgc3ViWzBdLmVuY29kZSgpICsgJzsnLmVuY29kZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN1YiA9IHN1Yi5lbmNvZGUoKQorICAgICAgICByZXR1cm4gc3ViCisKKyAgICBkZWYgX2NvbnZlcnRfZnJvbShzZWxmLCBwcm9wb3NlZCwgZXJyb3JzPSJzdHJpY3QiKToKKyAgICAgICAgcHJvcG9zZWQgPSBzZWxmLmZpbmRfY29kZWMocHJvcG9zZWQpCisgICAgICAgIGlmIG5vdCBwcm9wb3NlZCBvciAocHJvcG9zZWQsIGVycm9ycykgaW4gc2VsZi50cmllZF9lbmNvZGluZ3M6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBzZWxmLnRyaWVkX2VuY29kaW5ncy5hcHBlbmQoKHByb3Bvc2VkLCBlcnJvcnMpKQorICAgICAgICBtYXJrdXAgPSBzZWxmLm1hcmt1cAorICAgICAgICAjIENvbnZlcnQgc21hcnQgcXVvdGVzIHRvIEhUTUwgaWYgY29taW5nIGZyb20gYW4gZW5jb2RpbmcKKyAgICAgICAgIyB0aGF0IG1pZ2h0IGhhdmUgdGhlbS4KKyAgICAgICAgaWYgKHNlbGYuc21hcnRfcXVvdGVzX3RvIGlzIG5vdCBOb25lCisgICAgICAgICAgICBhbmQgcHJvcG9zZWQgaW4gc2VsZi5FTkNPRElOR1NfV0lUSF9TTUFSVF9RVU9URVMpOgorICAgICAgICAgICAgc21hcnRfcXVvdGVzX3JlID0gYiIoW1x4ODAtXHg5Zl0pIgorICAgICAgICAgICAgc21hcnRfcXVvdGVzX2NvbXBpbGVkID0gcmUuY29tcGlsZShzbWFydF9xdW90ZXNfcmUpCisgICAgICAgICAgICBtYXJrdXAgPSBzbWFydF9xdW90ZXNfY29tcGlsZWQuc3ViKHNlbGYuX3N1Yl9tc19jaGFyLCBtYXJrdXApCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgI3ByaW50ICJUcnlpbmcgdG8gY29udmVydCBkb2N1bWVudCB0byAlcyAoZXJyb3JzPSVzKSIgJSAoCisgICAgICAgICAgICAjICAgIHByb3Bvc2VkLCBlcnJvcnMpCisgICAgICAgICAgICB1ID0gc2VsZi5fdG9fdW5pY29kZShtYXJrdXAsIHByb3Bvc2VkLCBlcnJvcnMpCisgICAgICAgICAgICBzZWxmLm1hcmt1cCA9IHUKKyAgICAgICAgICAgIHNlbGYub3JpZ2luYWxfZW5jb2RpbmcgPSBwcm9wb3NlZAorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAjcHJpbnQgIlRoYXQgZGlkbid0IHdvcmshIgorICAgICAgICAgICAgI3ByaW50IGUKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICNwcmludCAiQ29ycmVjdCBlbmNvZGluZzogJXMiICUgcHJvcG9zZWQKKyAgICAgICAgcmV0dXJuIHNlbGYubWFya3VwCisKKyAgICBkZWYgX3RvX3VuaWNvZGUoc2VsZiwgZGF0YSwgZW5jb2RpbmcsIGVycm9ycz0ic3RyaWN0Iik6CisgICAgICAgICcnJ0dpdmVuIGEgc3RyaW5nIGFuZCBpdHMgZW5jb2RpbmcsIGRlY29kZXMgdGhlIHN0cmluZyBpbnRvIFVuaWNvZGUuCisgICAgICAgICVlbmNvZGluZyBpcyBhIHN0cmluZyByZWNvZ25pemVkIGJ5IGVuY29kaW5ncy5hbGlhc2VzJycnCisgICAgICAgIHJldHVybiB1bmljb2RlKGRhdGEsIGVuY29kaW5nLCBlcnJvcnMpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGVjbGFyZWRfaHRtbF9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaXNfaHRtbDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBzZWxmLmRldGVjdG9yLmRlY2xhcmVkX2VuY29kaW5nCisKKyAgICBkZWYgZmluZF9jb2RlYyhzZWxmLCBjaGFyc2V0KToKKyAgICAgICAgdmFsdWUgPSAoc2VsZi5fY29kZWMoc2VsZi5DSEFSU0VUX0FMSUFTRVMuZ2V0KGNoYXJzZXQsIGNoYXJzZXQpKQorICAgICAgICAgICAgICAgb3IgKGNoYXJzZXQgYW5kIHNlbGYuX2NvZGVjKGNoYXJzZXQucmVwbGFjZSgiLSIsICIiKSkpCisgICAgICAgICAgICAgICBvciAoY2hhcnNldCBhbmQgc2VsZi5fY29kZWMoY2hhcnNldC5yZXBsYWNlKCItIiwgIl8iKSkpCisgICAgICAgICAgICAgICBvciAoY2hhcnNldCBhbmQgY2hhcnNldC5sb3dlcigpKQorICAgICAgICAgICAgICAgb3IgY2hhcnNldAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgaWYgdmFsdWU6CisgICAgICAgICAgICByZXR1cm4gdmFsdWUubG93ZXIoKQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9jb2RlYyhzZWxmLCBjaGFyc2V0KToKKyAgICAgICAgaWYgbm90IGNoYXJzZXQ6CisgICAgICAgICAgICByZXR1cm4gY2hhcnNldAorICAgICAgICBjb2RlYyA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29kZWNzLmxvb2t1cChjaGFyc2V0KQorICAgICAgICAgICAgY29kZWMgPSBjaGFyc2V0CisgICAgICAgIGV4Y2VwdCAoTG9va3VwRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICByZXR1cm4gY29kZWMKKworCisgICAgIyBBIHBhcnRpYWwgbWFwcGluZyBvZiBJU08tTGF0aW4tMSB0byBIVE1MIGVudGl0aWVzL1hNTCBudW1lcmljIGVudGl0aWVzLgorICAgIE1TX0NIQVJTID0ge2InXHg4MCc6ICgnZXVybycsICcyMEFDJyksCisgICAgICAgICAgICAgICAgYidceDgxJzogJyAnLAorICAgICAgICAgICAgICAgIGInXHg4Mic6ICgnc2JxdW8nLCAnMjAxQScpLAorICAgICAgICAgICAgICAgIGInXHg4Myc6ICgnZm5vZicsICcxOTInKSwKKyAgICAgICAgICAgICAgICBiJ1x4ODQnOiAoJ2JkcXVvJywgJzIwMUUnKSwKKyAgICAgICAgICAgICAgICBiJ1x4ODUnOiAoJ2hlbGxpcCcsICcyMDI2JyksCisgICAgICAgICAgICAgICAgYidceDg2JzogKCdkYWdnZXInLCAnMjAyMCcpLAorICAgICAgICAgICAgICAgIGInXHg4Nyc6ICgnRGFnZ2VyJywgJzIwMjEnKSwKKyAgICAgICAgICAgICAgICBiJ1x4ODgnOiAoJ2NpcmMnLCAnMkM2JyksCisgICAgICAgICAgICAgICAgYidceDg5JzogKCdwZXJtaWwnLCAnMjAzMCcpLAorICAgICAgICAgICAgICAgIGInXHg4QSc6ICgnU2Nhcm9uJywgJzE2MCcpLAorICAgICAgICAgICAgICAgIGInXHg4Qic6ICgnbHNhcXVvJywgJzIwMzknKSwKKyAgICAgICAgICAgICAgICBiJ1x4OEMnOiAoJ09FbGlnJywgJzE1MicpLAorICAgICAgICAgICAgICAgIGInXHg4RCc6ICc/JywKKyAgICAgICAgICAgICAgICBiJ1x4OEUnOiAoJyN4MTdEJywgJzE3RCcpLAorICAgICAgICAgICAgICAgIGInXHg4Ric6ICc/JywKKyAgICAgICAgICAgICAgICBiJ1x4OTAnOiAnPycsCisgICAgICAgICAgICAgICAgYidceDkxJzogKCdsc3F1bycsICcyMDE4JyksCisgICAgICAgICAgICAgICAgYidceDkyJzogKCdyc3F1bycsICcyMDE5JyksCisgICAgICAgICAgICAgICAgYidceDkzJzogKCdsZHF1bycsICcyMDFDJyksCisgICAgICAgICAgICAgICAgYidceDk0JzogKCdyZHF1bycsICcyMDFEJyksCisgICAgICAgICAgICAgICAgYidceDk1JzogKCdidWxsJywgJzIwMjInKSwKKyAgICAgICAgICAgICAgICBiJ1x4OTYnOiAoJ25kYXNoJywgJzIwMTMnKSwKKyAgICAgICAgICAgICAgICBiJ1x4OTcnOiAoJ21kYXNoJywgJzIwMTQnKSwKKyAgICAgICAgICAgICAgICBiJ1x4OTgnOiAoJ3RpbGRlJywgJzJEQycpLAorICAgICAgICAgICAgICAgIGInXHg5OSc6ICgndHJhZGUnLCAnMjEyMicpLAorICAgICAgICAgICAgICAgIGInXHg5YSc6ICgnc2Nhcm9uJywgJzE2MScpLAorICAgICAgICAgICAgICAgIGInXHg5Yic6ICgncnNhcXVvJywgJzIwM0EnKSwKKyAgICAgICAgICAgICAgICBiJ1x4OWMnOiAoJ29lbGlnJywgJzE1MycpLAorICAgICAgICAgICAgICAgIGInXHg5ZCc6ICc/JywKKyAgICAgICAgICAgICAgICBiJ1x4OWUnOiAoJyN4MTdFJywgJzE3RScpLAorICAgICAgICAgICAgICAgIGInXHg5Zic6ICgnWXVtbCcsICcnKSx9CisKKyAgICAjIEEgcGFyb2NoaWFsIHBhcnRpYWwgbWFwcGluZyBvZiBJU08tTGF0aW4tMSB0byBBU0NJSS4gQ29udGFpbnMKKyAgICAjIGhvcnJvcnMgbGlrZSBzdHJpcHBpbmcgZGlhY3JpdGljYWwgbWFya3MgdG8gdHVybiDDoSBpbnRvIGEsIGJ1dCBhbHNvCisgICAgIyBjb250YWlucyBub24taG9ycm9ycyBsaWtlIHR1cm5pbmcg4oCcIGludG8gIi4KKyAgICBNU19DSEFSU19UT19BU0NJSSA9IHsKKyAgICAgICAgYidceDgwJyA6ICdFVVInLAorICAgICAgICBiJ1x4ODEnIDogJyAnLAorICAgICAgICBiJ1x4ODInIDogJywnLAorICAgICAgICBiJ1x4ODMnIDogJ2YnLAorICAgICAgICBiJ1x4ODQnIDogJywsJywKKyAgICAgICAgYidceDg1JyA6ICcuLi4nLAorICAgICAgICBiJ1x4ODYnIDogJysnLAorICAgICAgICBiJ1x4ODcnIDogJysrJywKKyAgICAgICAgYidceDg4JyA6ICdeJywKKyAgICAgICAgYidceDg5JyA6ICclJywKKyAgICAgICAgYidceDhhJyA6ICdTJywKKyAgICAgICAgYidceDhiJyA6ICc8JywKKyAgICAgICAgYidceDhjJyA6ICdPRScsCisgICAgICAgIGInXHg4ZCcgOiAnPycsCisgICAgICAgIGInXHg4ZScgOiAnWicsCisgICAgICAgIGInXHg4ZicgOiAnPycsCisgICAgICAgIGInXHg5MCcgOiAnPycsCisgICAgICAgIGInXHg5MScgOiAiJyIsCisgICAgICAgIGInXHg5MicgOiAiJyIsCisgICAgICAgIGInXHg5MycgOiAnIicsCisgICAgICAgIGInXHg5NCcgOiAnIicsCisgICAgICAgIGInXHg5NScgOiAnKicsCisgICAgICAgIGInXHg5NicgOiAnLScsCisgICAgICAgIGInXHg5NycgOiAnLS0nLAorICAgICAgICBiJ1x4OTgnIDogJ34nLAorICAgICAgICBiJ1x4OTknIDogJyhUTSknLAorICAgICAgICBiJ1x4OWEnIDogJ3MnLAorICAgICAgICBiJ1x4OWInIDogJz4nLAorICAgICAgICBiJ1x4OWMnIDogJ29lJywKKyAgICAgICAgYidceDlkJyA6ICc/JywKKyAgICAgICAgYidceDllJyA6ICd6JywKKyAgICAgICAgYidceDlmJyA6ICdZJywKKyAgICAgICAgYidceGEwJyA6ICcgJywKKyAgICAgICAgYidceGExJyA6ICchJywKKyAgICAgICAgYidceGEyJyA6ICdjJywKKyAgICAgICAgYidceGEzJyA6ICdHQlAnLAorICAgICAgICBiJ1x4YTQnIDogJyQnLCAjVGhpcyBhcHByb3hpbWF0aW9uIGlzIGVzcGVjaWFsbHkgcGFyb2NoaWFsLS10aGlzIGlzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAjZ2VuZXJpYyBjdXJyZW5jeSBzeW1ib2wuCisgICAgICAgIGInXHhhNScgOiAnWUVOJywKKyAgICAgICAgYidceGE2JyA6ICd8JywKKyAgICAgICAgYidceGE3JyA6ICdTJywKKyAgICAgICAgYidceGE4JyA6ICcuLicsCisgICAgICAgIGInXHhhOScgOiAnJywKKyAgICAgICAgYidceGFhJyA6ICcodGgpJywKKyAgICAgICAgYidceGFiJyA6ICc8PCcsCisgICAgICAgIGInXHhhYycgOiAnIScsCisgICAgICAgIGInXHhhZCcgOiAnICcsCisgICAgICAgIGInXHhhZScgOiAnKFIpJywKKyAgICAgICAgYidceGFmJyA6ICctJywKKyAgICAgICAgYidceGIwJyA6ICdvJywKKyAgICAgICAgYidceGIxJyA6ICcrLScsCisgICAgICAgIGInXHhiMicgOiAnMicsCisgICAgICAgIGInXHhiMycgOiAnMycsCisgICAgICAgIGInXHhiNCcgOiAoIiciLCAnYWN1dGUnKSwKKyAgICAgICAgYidceGI1JyA6ICd1JywKKyAgICAgICAgYidceGI2JyA6ICdQJywKKyAgICAgICAgYidceGI3JyA6ICcqJywKKyAgICAgICAgYidceGI4JyA6ICcsJywKKyAgICAgICAgYidceGI5JyA6ICcxJywKKyAgICAgICAgYidceGJhJyA6ICcodGgpJywKKyAgICAgICAgYidceGJiJyA6ICc+PicsCisgICAgICAgIGInXHhiYycgOiAnMS80JywKKyAgICAgICAgYidceGJkJyA6ICcxLzInLAorICAgICAgICBiJ1x4YmUnIDogJzMvNCcsCisgICAgICAgIGInXHhiZicgOiAnPycsCisgICAgICAgIGInXHhjMCcgOiAnQScsCisgICAgICAgIGInXHhjMScgOiAnQScsCisgICAgICAgIGInXHhjMicgOiAnQScsCisgICAgICAgIGInXHhjMycgOiAnQScsCisgICAgICAgIGInXHhjNCcgOiAnQScsCisgICAgICAgIGInXHhjNScgOiAnQScsCisgICAgICAgIGInXHhjNicgOiAnQUUnLAorICAgICAgICBiJ1x4YzcnIDogJ0MnLAorICAgICAgICBiJ1x4YzgnIDogJ0UnLAorICAgICAgICBiJ1x4YzknIDogJ0UnLAorICAgICAgICBiJ1x4Y2EnIDogJ0UnLAorICAgICAgICBiJ1x4Y2InIDogJ0UnLAorICAgICAgICBiJ1x4Y2MnIDogJ0knLAorICAgICAgICBiJ1x4Y2QnIDogJ0knLAorICAgICAgICBiJ1x4Y2UnIDogJ0knLAorICAgICAgICBiJ1x4Y2YnIDogJ0knLAorICAgICAgICBiJ1x4ZDAnIDogJ0QnLAorICAgICAgICBiJ1x4ZDEnIDogJ04nLAorICAgICAgICBiJ1x4ZDInIDogJ08nLAorICAgICAgICBiJ1x4ZDMnIDogJ08nLAorICAgICAgICBiJ1x4ZDQnIDogJ08nLAorICAgICAgICBiJ1x4ZDUnIDogJ08nLAorICAgICAgICBiJ1x4ZDYnIDogJ08nLAorICAgICAgICBiJ1x4ZDcnIDogJyonLAorICAgICAgICBiJ1x4ZDgnIDogJ08nLAorICAgICAgICBiJ1x4ZDknIDogJ1UnLAorICAgICAgICBiJ1x4ZGEnIDogJ1UnLAorICAgICAgICBiJ1x4ZGInIDogJ1UnLAorICAgICAgICBiJ1x4ZGMnIDogJ1UnLAorICAgICAgICBiJ1x4ZGQnIDogJ1knLAorICAgICAgICBiJ1x4ZGUnIDogJ2InLAorICAgICAgICBiJ1x4ZGYnIDogJ0InLAorICAgICAgICBiJ1x4ZTAnIDogJ2EnLAorICAgICAgICBiJ1x4ZTEnIDogJ2EnLAorICAgICAgICBiJ1x4ZTInIDogJ2EnLAorICAgICAgICBiJ1x4ZTMnIDogJ2EnLAorICAgICAgICBiJ1x4ZTQnIDogJ2EnLAorICAgICAgICBiJ1x4ZTUnIDogJ2EnLAorICAgICAgICBiJ1x4ZTYnIDogJ2FlJywKKyAgICAgICAgYidceGU3JyA6ICdjJywKKyAgICAgICAgYidceGU4JyA6ICdlJywKKyAgICAgICAgYidceGU5JyA6ICdlJywKKyAgICAgICAgYidceGVhJyA6ICdlJywKKyAgICAgICAgYidceGViJyA6ICdlJywKKyAgICAgICAgYidceGVjJyA6ICdpJywKKyAgICAgICAgYidceGVkJyA6ICdpJywKKyAgICAgICAgYidceGVlJyA6ICdpJywKKyAgICAgICAgYidceGVmJyA6ICdpJywKKyAgICAgICAgYidceGYwJyA6ICdvJywKKyAgICAgICAgYidceGYxJyA6ICduJywKKyAgICAgICAgYidceGYyJyA6ICdvJywKKyAgICAgICAgYidceGYzJyA6ICdvJywKKyAgICAgICAgYidceGY0JyA6ICdvJywKKyAgICAgICAgYidceGY1JyA6ICdvJywKKyAgICAgICAgYidceGY2JyA6ICdvJywKKyAgICAgICAgYidceGY3JyA6ICcvJywKKyAgICAgICAgYidceGY4JyA6ICdvJywKKyAgICAgICAgYidceGY5JyA6ICd1JywKKyAgICAgICAgYidceGZhJyA6ICd1JywKKyAgICAgICAgYidceGZiJyA6ICd1JywKKyAgICAgICAgYidceGZjJyA6ICd1JywKKyAgICAgICAgYidceGZkJyA6ICd5JywKKyAgICAgICAgYidceGZlJyA6ICdiJywKKyAgICAgICAgYidceGZmJyA6ICd5JywKKyAgICAgICAgfQorCisgICAgIyBBIG1hcCB1c2VkIHdoZW4gcmVtb3Zpbmcgcm9ndWUgV2luZG93cy0xMjUyL0lTTy04ODU5LTEKKyAgICAjIGNoYXJhY3RlcnMgaW4gb3RoZXJ3aXNlIFVURi04IGRvY3VtZW50cy4KKyAgICAjCisgICAgIyBOb3RlIHRoYXQgXHg4MSwgXHg4ZCwgXHg4ZiwgXHg5MCwgYW5kIFx4OWQgYXJlIHVuZGVmaW5lZCBpbgorICAgICMgV2luZG93cy0xMjUyLgorICAgIFdJTkRPV1NfMTI1Ml9UT19VVEY4ID0geworICAgICAgICAweDgwIDogYidceGUyXHg4Mlx4YWMnLCAjIOKCrAorICAgICAgICAweDgyIDogYidceGUyXHg4MFx4OWEnLCAjIOKAmgorICAgICAgICAweDgzIDogYidceGM2XHg5MicsICAgICAjIMaSCisgICAgICAgIDB4ODQgOiBiJ1x4ZTJceDgwXHg5ZScsICMg4oCeCisgICAgICAgIDB4ODUgOiBiJ1x4ZTJceDgwXHhhNicsICMg4oCmCisgICAgICAgIDB4ODYgOiBiJ1x4ZTJceDgwXHhhMCcsICMg4oCgCisgICAgICAgIDB4ODcgOiBiJ1x4ZTJceDgwXHhhMScsICMg4oChCisgICAgICAgIDB4ODggOiBiJ1x4Y2JceDg2JywgICAgICMgy4YKKyAgICAgICAgMHg4OSA6IGInXHhlMlx4ODBceGIwJywgIyDigLAKKyAgICAgICAgMHg4YSA6IGInXHhjNVx4YTAnLCAgICAgIyDFoAorICAgICAgICAweDhiIDogYidceGUyXHg4MFx4YjknLCAjIOKAuQorICAgICAgICAweDhjIDogYidceGM1XHg5MicsICAgICAjIMWSCisgICAgICAgIDB4OGUgOiBiJ1x4YzVceGJkJywgICAgICMgxb0KKyAgICAgICAgMHg5MSA6IGInXHhlMlx4ODBceDk4JywgIyDigJgKKyAgICAgICAgMHg5MiA6IGInXHhlMlx4ODBceDk5JywgIyDigJkKKyAgICAgICAgMHg5MyA6IGInXHhlMlx4ODBceDljJywgIyDigJwKKyAgICAgICAgMHg5NCA6IGInXHhlMlx4ODBceDlkJywgIyDigJ0KKyAgICAgICAgMHg5NSA6IGInXHhlMlx4ODBceGEyJywgIyDigKIKKyAgICAgICAgMHg5NiA6IGInXHhlMlx4ODBceDkzJywgIyDigJMKKyAgICAgICAgMHg5NyA6IGInXHhlMlx4ODBceDk0JywgIyDigJQKKyAgICAgICAgMHg5OCA6IGInXHhjYlx4OWMnLCAgICAgIyDLnAorICAgICAgICAweDk5IDogYidceGUyXHg4NFx4YTInLCAjIOKEogorICAgICAgICAweDlhIDogYidceGM1XHhhMScsICAgICAjIMWhCisgICAgICAgIDB4OWIgOiBiJ1x4ZTJceDgwXHhiYScsICMg4oC6CisgICAgICAgIDB4OWMgOiBiJ1x4YzVceDkzJywgICAgICMgxZMKKyAgICAgICAgMHg5ZSA6IGInXHhjNVx4YmUnLCAgICAgIyDFvgorICAgICAgICAweDlmIDogYidceGM1XHhiOCcsICAgICAjIMW4CisgICAgICAgIDB4YTAgOiBiJ1x4YzJceGEwJywgICAgICMgwqAKKyAgICAgICAgMHhhMSA6IGInXHhjMlx4YTEnLCAgICAgIyDCoQorICAgICAgICAweGEyIDogYidceGMyXHhhMicsICAgICAjIMKiCisgICAgICAgIDB4YTMgOiBiJ1x4YzJceGEzJywgICAgICMgwqMKKyAgICAgICAgMHhhNCA6IGInXHhjMlx4YTQnLCAgICAgIyDCpAorICAgICAgICAweGE1IDogYidceGMyXHhhNScsICAgICAjIMKlCisgICAgICAgIDB4YTYgOiBiJ1x4YzJceGE2JywgICAgICMgwqYKKyAgICAgICAgMHhhNyA6IGInXHhjMlx4YTcnLCAgICAgIyDCpworICAgICAgICAweGE4IDogYidceGMyXHhhOCcsICAgICAjIMKoCisgICAgICAgIDB4YTkgOiBiJ1x4YzJceGE5JywgICAgICMgwqkKKyAgICAgICAgMHhhYSA6IGInXHhjMlx4YWEnLCAgICAgIyDCqgorICAgICAgICAweGFiIDogYidceGMyXHhhYicsICAgICAjIMKrCisgICAgICAgIDB4YWMgOiBiJ1x4YzJceGFjJywgICAgICMgwqwKKyAgICAgICAgMHhhZCA6IGInXHhjMlx4YWQnLCAgICAgIyDCrQorICAgICAgICAweGFlIDogYidceGMyXHhhZScsICAgICAjIMKuCisgICAgICAgIDB4YWYgOiBiJ1x4YzJceGFmJywgICAgICMgwq8KKyAgICAgICAgMHhiMCA6IGInXHhjMlx4YjAnLCAgICAgIyDCsAorICAgICAgICAweGIxIDogYidceGMyXHhiMScsICAgICAjIMKxCisgICAgICAgIDB4YjIgOiBiJ1x4YzJceGIyJywgICAgICMgwrIKKyAgICAgICAgMHhiMyA6IGInXHhjMlx4YjMnLCAgICAgIyDCsworICAgICAgICAweGI0IDogYidceGMyXHhiNCcsICAgICAjIMK0CisgICAgICAgIDB4YjUgOiBiJ1x4YzJceGI1JywgICAgICMgwrUKKyAgICAgICAgMHhiNiA6IGInXHhjMlx4YjYnLCAgICAgIyDCtgorICAgICAgICAweGI3IDogYidceGMyXHhiNycsICAgICAjIMK3CisgICAgICAgIDB4YjggOiBiJ1x4YzJceGI4JywgICAgICMgwrgKKyAgICAgICAgMHhiOSA6IGInXHhjMlx4YjknLCAgICAgIyDCuQorICAgICAgICAweGJhIDogYidceGMyXHhiYScsICAgICAjIMK6CisgICAgICAgIDB4YmIgOiBiJ1x4YzJceGJiJywgICAgICMgwrsKKyAgICAgICAgMHhiYyA6IGInXHhjMlx4YmMnLCAgICAgIyDCvAorICAgICAgICAweGJkIDogYidceGMyXHhiZCcsICAgICAjIMK9CisgICAgICAgIDB4YmUgOiBiJ1x4YzJceGJlJywgICAgICMgwr4KKyAgICAgICAgMHhiZiA6IGInXHhjMlx4YmYnLCAgICAgIyDCvworICAgICAgICAweGMwIDogYidceGMzXHg4MCcsICAgICAjIMOACisgICAgICAgIDB4YzEgOiBiJ1x4YzNceDgxJywgICAgICMgw4EKKyAgICAgICAgMHhjMiA6IGInXHhjM1x4ODInLCAgICAgIyDDggorICAgICAgICAweGMzIDogYidceGMzXHg4MycsICAgICAjIMODCisgICAgICAgIDB4YzQgOiBiJ1x4YzNceDg0JywgICAgICMgw4QKKyAgICAgICAgMHhjNSA6IGInXHhjM1x4ODUnLCAgICAgIyDDhQorICAgICAgICAweGM2IDogYidceGMzXHg4NicsICAgICAjIMOGCisgICAgICAgIDB4YzcgOiBiJ1x4YzNceDg3JywgICAgICMgw4cKKyAgICAgICAgMHhjOCA6IGInXHhjM1x4ODgnLCAgICAgIyDDiAorICAgICAgICAweGM5IDogYidceGMzXHg4OScsICAgICAjIMOJCisgICAgICAgIDB4Y2EgOiBiJ1x4YzNceDhhJywgICAgICMgw4oKKyAgICAgICAgMHhjYiA6IGInXHhjM1x4OGInLCAgICAgIyDDiworICAgICAgICAweGNjIDogYidceGMzXHg4YycsICAgICAjIMOMCisgICAgICAgIDB4Y2QgOiBiJ1x4YzNceDhkJywgICAgICMgw40KKyAgICAgICAgMHhjZSA6IGInXHhjM1x4OGUnLCAgICAgIyDDjgorICAgICAgICAweGNmIDogYidceGMzXHg4ZicsICAgICAjIMOPCisgICAgICAgIDB4ZDAgOiBiJ1x4YzNceDkwJywgICAgICMgw5AKKyAgICAgICAgMHhkMSA6IGInXHhjM1x4OTEnLCAgICAgIyDDkQorICAgICAgICAweGQyIDogYidceGMzXHg5MicsICAgICAjIMOSCisgICAgICAgIDB4ZDMgOiBiJ1x4YzNceDkzJywgICAgICMgw5MKKyAgICAgICAgMHhkNCA6IGInXHhjM1x4OTQnLCAgICAgIyDDlAorICAgICAgICAweGQ1IDogYidceGMzXHg5NScsICAgICAjIMOVCisgICAgICAgIDB4ZDYgOiBiJ1x4YzNceDk2JywgICAgICMgw5YKKyAgICAgICAgMHhkNyA6IGInXHhjM1x4OTcnLCAgICAgIyDDlworICAgICAgICAweGQ4IDogYidceGMzXHg5OCcsICAgICAjIMOYCisgICAgICAgIDB4ZDkgOiBiJ1x4YzNceDk5JywgICAgICMgw5kKKyAgICAgICAgMHhkYSA6IGInXHhjM1x4OWEnLCAgICAgIyDDmgorICAgICAgICAweGRiIDogYidceGMzXHg5YicsICAgICAjIMObCisgICAgICAgIDB4ZGMgOiBiJ1x4YzNceDljJywgICAgICMgw5wKKyAgICAgICAgMHhkZCA6IGInXHhjM1x4OWQnLCAgICAgIyDDnQorICAgICAgICAweGRlIDogYidceGMzXHg5ZScsICAgICAjIMOeCisgICAgICAgIDB4ZGYgOiBiJ1x4YzNceDlmJywgICAgICMgw58KKyAgICAgICAgMHhlMCA6IGInXHhjM1x4YTAnLCAgICAgIyDDoAorICAgICAgICAweGUxIDogYidceGExJywgICAgICMgw6EKKyAgICAgICAgMHhlMiA6IGInXHhjM1x4YTInLCAgICAgIyDDogorICAgICAgICAweGUzIDogYidceGMzXHhhMycsICAgICAjIMOjCisgICAgICAgIDB4ZTQgOiBiJ1x4YzNceGE0JywgICAgICMgw6QKKyAgICAgICAgMHhlNSA6IGInXHhjM1x4YTUnLCAgICAgIyDDpQorICAgICAgICAweGU2IDogYidceGMzXHhhNicsICAgICAjIMOmCisgICAgICAgIDB4ZTcgOiBiJ1x4YzNceGE3JywgICAgICMgw6cKKyAgICAgICAgMHhlOCA6IGInXHhjM1x4YTgnLCAgICAgIyDDqAorICAgICAgICAweGU5IDogYidceGMzXHhhOScsICAgICAjIMOpCisgICAgICAgIDB4ZWEgOiBiJ1x4YzNceGFhJywgICAgICMgw6oKKyAgICAgICAgMHhlYiA6IGInXHhjM1x4YWInLCAgICAgIyDDqworICAgICAgICAweGVjIDogYidceGMzXHhhYycsICAgICAjIMOsCisgICAgICAgIDB4ZWQgOiBiJ1x4YzNceGFkJywgICAgICMgw60KKyAgICAgICAgMHhlZSA6IGInXHhjM1x4YWUnLCAgICAgIyDDrgorICAgICAgICAweGVmIDogYidceGMzXHhhZicsICAgICAjIMOvCisgICAgICAgIDB4ZjAgOiBiJ1x4YzNceGIwJywgICAgICMgw7AKKyAgICAgICAgMHhmMSA6IGInXHhjM1x4YjEnLCAgICAgIyDDsQorICAgICAgICAweGYyIDogYidceGMzXHhiMicsICAgICAjIMOyCisgICAgICAgIDB4ZjMgOiBiJ1x4YzNceGIzJywgICAgICMgw7MKKyAgICAgICAgMHhmNCA6IGInXHhjM1x4YjQnLCAgICAgIyDDtAorICAgICAgICAweGY1IDogYidceGMzXHhiNScsICAgICAjIMO1CisgICAgICAgIDB4ZjYgOiBiJ1x4YzNceGI2JywgICAgICMgw7YKKyAgICAgICAgMHhmNyA6IGInXHhjM1x4YjcnLCAgICAgIyDDtworICAgICAgICAweGY4IDogYidceGMzXHhiOCcsICAgICAjIMO4CisgICAgICAgIDB4ZjkgOiBiJ1x4YzNceGI5JywgICAgICMgw7kKKyAgICAgICAgMHhmYSA6IGInXHhjM1x4YmEnLCAgICAgIyDDugorICAgICAgICAweGZiIDogYidceGMzXHhiYicsICAgICAjIMO7CisgICAgICAgIDB4ZmMgOiBiJ1x4YzNceGJjJywgICAgICMgw7wKKyAgICAgICAgMHhmZCA6IGInXHhjM1x4YmQnLCAgICAgIyDDvQorICAgICAgICAweGZlIDogYidceGMzXHhiZScsICAgICAjIMO+CisgICAgICAgIH0KKworICAgIE1VTFRJQllURV9NQVJLRVJTX0FORF9TSVpFUyA9IFsKKyAgICAgICAgKDB4YzIsIDB4ZGYsIDIpLCAjIDItYnl0ZSBjaGFyYWN0ZXJzIHN0YXJ0IHdpdGggYSBieXRlIEMyLURGCisgICAgICAgICgweGUwLCAweGVmLCAzKSwgIyAzLWJ5dGUgY2hhcmFjdGVycyBzdGFydCB3aXRoIEUwLUVGCisgICAgICAgICgweGYwLCAweGY0LCA0KSwgIyA0LWJ5dGUgY2hhcmFjdGVycyBzdGFydCB3aXRoIEYwLUY0CisgICAgICAgIF0KKworICAgIEZJUlNUX01VTFRJQllURV9NQVJLRVIgPSBNVUxUSUJZVEVfTUFSS0VSU19BTkRfU0laRVNbMF1bMF0KKyAgICBMQVNUX01VTFRJQllURV9NQVJLRVIgPSBNVUxUSUJZVEVfTUFSS0VSU19BTkRfU0laRVNbLTFdWzFdCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZGV0d2luZ2xlKGNscywgaW5fYnl0ZXMsIG1haW5fZW5jb2Rpbmc9InV0ZjgiLAorICAgICAgICAgICAgICAgICAgZW1iZWRkZWRfZW5jb2Rpbmc9IndpbmRvd3MtMTI1MiIpOgorICAgICAgICAiIiJGaXggY2hhcmFjdGVycyBmcm9tIG9uZSBlbmNvZGluZyBlbWJlZGRlZCBpbiBzb21lIG90aGVyIGVuY29kaW5nLgorCisgICAgICAgIEN1cnJlbnRseSB0aGUgb25seSBzaXR1YXRpb24gc3VwcG9ydGVkIGlzIFdpbmRvd3MtMTI1MiAob3IgaXRzCisgICAgICAgIHN1YnNldCBJU08tODg1OS0xKSwgZW1iZWRkZWQgaW4gVVRGLTguCisKKyAgICAgICAgVGhlIGlucHV0IG11c3QgYmUgYSBieXRlc3RyaW5nLiBJZiB5b3UndmUgYWxyZWFkeSBjb252ZXJ0ZWQKKyAgICAgICAgdGhlIGRvY3VtZW50IHRvIFVuaWNvZGUsIHlvdSdyZSB0b28gbGF0ZS4KKworICAgICAgICBUaGUgb3V0cHV0IGlzIGEgYnl0ZXN0cmluZyBpbiB3aGljaCBgZW1iZWRkZWRfZW5jb2RpbmdgCisgICAgICAgIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIGNvbnZlcnRlZCB0byB0aGVpciBgbWFpbl9lbmNvZGluZ2AKKyAgICAgICAgZXF1aXZhbGVudHMuCisgICAgICAgICIiIgorICAgICAgICBpZiBlbWJlZGRlZF9lbmNvZGluZy5yZXBsYWNlKCdfJywgJy0nKS5sb3dlcigpIG5vdCBpbiAoCisgICAgICAgICAgICAnd2luZG93cy0xMjUyJywgJ3dpbmRvd3NfMTI1MicpOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigKKyAgICAgICAgICAgICAgICAiV2luZG93cy0xMjUyIGFuZCBJU08tODg1OS0xIGFyZSB0aGUgb25seSBjdXJyZW50bHkgc3VwcG9ydGVkICIKKyAgICAgICAgICAgICAgICAiZW1iZWRkZWQgZW5jb2RpbmdzLiIpCisKKyAgICAgICAgaWYgbWFpbl9lbmNvZGluZy5sb3dlcigpIG5vdCBpbiAoJ3V0ZjgnLCAndXRmLTgnKToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCisgICAgICAgICAgICAgICAgIlVURi04IGlzIHRoZSBvbmx5IGN1cnJlbnRseSBzdXBwb3J0ZWQgbWFpbiBlbmNvZGluZy4iKQorCisgICAgICAgIGJ5dGVfY2h1bmtzID0gW10KKworICAgICAgICBjaHVua19zdGFydCA9IDAKKyAgICAgICAgcG9zID0gMAorICAgICAgICB3aGlsZSBwb3MgPCBsZW4oaW5fYnl0ZXMpOgorICAgICAgICAgICAgYnl0ZSA9IGluX2J5dGVzW3Bvc10KKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGJ5dGUsIGludCk6CisgICAgICAgICAgICAgICAgIyBQeXRob24gMi54CisgICAgICAgICAgICAgICAgYnl0ZSA9IG9yZChieXRlKQorICAgICAgICAgICAgaWYgKGJ5dGUgPj0gY2xzLkZJUlNUX01VTFRJQllURV9NQVJLRVIKKyAgICAgICAgICAgICAgICBhbmQgYnl0ZSA8PSBjbHMuTEFTVF9NVUxUSUJZVEVfTUFSS0VSKToKKyAgICAgICAgICAgICAgICAjIFRoaXMgaXMgdGhlIHN0YXJ0IG9mIGEgVVRGLTggbXVsdGlieXRlIGNoYXJhY3Rlci4gU2tpcAorICAgICAgICAgICAgICAgICMgdG8gdGhlIGVuZC4KKyAgICAgICAgICAgICAgICBmb3Igc3RhcnQsIGVuZCwgc2l6ZSBpbiBjbHMuTVVMVElCWVRFX01BUktFUlNfQU5EX1NJWkVTOgorICAgICAgICAgICAgICAgICAgICBpZiBieXRlID49IHN0YXJ0IGFuZCBieXRlIDw9IGVuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvcyArPSBzaXplCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxpZiBieXRlID49IDB4ODAgYW5kIGJ5dGUgaW4gY2xzLldJTkRPV1NfMTI1Ml9UT19VVEY4OgorICAgICAgICAgICAgICAgICMgV2UgZm91bmQgYSBXaW5kb3dzLTEyNTIgY2hhcmFjdGVyIQorICAgICAgICAgICAgICAgICMgU2F2ZSB0aGUgc3RyaW5nIHVwIHRvIHRoaXMgcG9pbnQgYXMgYSBjaHVuay4KKyAgICAgICAgICAgICAgICBieXRlX2NodW5rcy5hcHBlbmQoaW5fYnl0ZXNbY2h1bmtfc3RhcnQ6cG9zXSkKKworICAgICAgICAgICAgICAgICMgTm93IHRyYW5zbGF0ZSB0aGUgV2luZG93cy0xMjUyIGNoYXJhY3RlciBpbnRvIFVURi04CisgICAgICAgICAgICAgICAgIyBhbmQgYWRkIGl0IGFzIGFub3RoZXIsIG9uZS1ieXRlIGNodW5rLgorICAgICAgICAgICAgICAgIGJ5dGVfY2h1bmtzLmFwcGVuZChjbHMuV0lORE9XU18xMjUyX1RPX1VURjhbYnl0ZV0pCisgICAgICAgICAgICAgICAgcG9zICs9IDEKKyAgICAgICAgICAgICAgICBjaHVua19zdGFydCA9IHBvcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIEdvIG9uIHRvIHRoZSBuZXh0IGNoYXJhY3Rlci4KKyAgICAgICAgICAgICAgICBwb3MgKz0gMQorICAgICAgICBpZiBjaHVua19zdGFydCA9PSAwOgorICAgICAgICAgICAgIyBUaGUgc3RyaW5nIGlzIHVuY2hhbmdlZC4KKyAgICAgICAgICAgIHJldHVybiBpbl9ieXRlcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBTdG9yZSB0aGUgZmluYWwgY2h1bmsuCisgICAgICAgICAgICBieXRlX2NodW5rcy5hcHBlbmQoaW5fYnl0ZXNbY2h1bmtfc3RhcnQ6XSkKKyAgICAgICAgcmV0dXJuIGInJy5qb2luKGJ5dGVfY2h1bmtzKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9kaWFnbm9zZS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2RpYWdub3NlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMGIwMGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9kaWFnbm9zZS5weQpAQCAtMCwwICsxLDIwNCBAQAorIiIiRGlhZ25vc3RpYyBmdW5jdGlvbnMsIG1haW5seSBmb3IgdXNlIHdoZW4gZG9pbmcgdGVjaCBzdXBwb3J0LiIiIgoraW1wb3J0IGNQcm9maWxlCitmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworZnJvbSBIVE1MUGFyc2VyIGltcG9ydCBIVE1MUGFyc2VyCitpbXBvcnQgYnM0Citmcm9tIGJzNCBpbXBvcnQgQmVhdXRpZnVsU291cCwgX192ZXJzaW9uX18KK2Zyb20gYnM0LmJ1aWxkZXIgaW1wb3J0IGJ1aWxkZXJfcmVnaXN0cnkKKworaW1wb3J0IG9zCitpbXBvcnQgcHN0YXRzCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB0aW1lCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgc3lzCitpbXBvcnQgY1Byb2ZpbGUKKworZGVmIGRpYWdub3NlKGRhdGEpOgorICAgICIiIkRpYWdub3N0aWMgc3VpdGUgZm9yIGlzb2xhdGluZyBjb21tb24gcHJvYmxlbXMuIiIiCisgICAgcHJpbnQgIkRpYWdub3N0aWMgcnVubmluZyBvbiBCZWF1dGlmdWwgU291cCAlcyIgJSBfX3ZlcnNpb25fXworICAgIHByaW50ICJQeXRob24gdmVyc2lvbiAlcyIgJSBzeXMudmVyc2lvbgorCisgICAgYmFzaWNfcGFyc2VycyA9IFsiaHRtbC5wYXJzZXIiLCAiaHRtbDVsaWIiLCAibHhtbCJdCisgICAgZm9yIG5hbWUgaW4gYmFzaWNfcGFyc2VyczoKKyAgICAgICAgZm9yIGJ1aWxkZXIgaW4gYnVpbGRlcl9yZWdpc3RyeS5idWlsZGVyczoKKyAgICAgICAgICAgIGlmIG5hbWUgaW4gYnVpbGRlci5mZWF0dXJlczoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmFzaWNfcGFyc2Vycy5yZW1vdmUobmFtZSkKKyAgICAgICAgICAgIHByaW50ICgKKyAgICAgICAgICAgICAgICAiSSBub3RpY2VkIHRoYXQgJXMgaXMgbm90IGluc3RhbGxlZC4gSW5zdGFsbGluZyBpdCBtYXkgaGVscC4iICUKKyAgICAgICAgICAgICAgICBuYW1lKQorCisgICAgaWYgJ2x4bWwnIGluIGJhc2ljX3BhcnNlcnM6CisgICAgICAgIGJhc2ljX3BhcnNlcnMuYXBwZW5kKFsibHhtbCIsICJ4bWwiXSkKKyAgICAgICAgZnJvbSBseG1sIGltcG9ydCBldHJlZQorICAgICAgICBwcmludCAiRm91bmQgbHhtbCB2ZXJzaW9uICVzIiAlICIuIi5qb2luKG1hcChzdHIsZXRyZWUuTFhNTF9WRVJTSU9OKSkKKworICAgIGlmICdodG1sNWxpYicgaW4gYmFzaWNfcGFyc2VyczoKKyAgICAgICAgaW1wb3J0IGh0bWw1bGliCisgICAgICAgIHByaW50ICJGb3VuZCBodG1sNWxpYiB2ZXJzaW9uICVzIiAlIGh0bWw1bGliLl9fdmVyc2lvbl9fCisKKyAgICBpZiBoYXNhdHRyKGRhdGEsICdyZWFkJyk6CisgICAgICAgIGRhdGEgPSBkYXRhLnJlYWQoKQorICAgIGVsaWYgb3MucGF0aC5leGlzdHMoZGF0YSk6CisgICAgICAgIHByaW50ICciJXMiIGxvb2tzIGxpa2UgYSBmaWxlbmFtZS4gUmVhZGluZyBkYXRhIGZyb20gdGhlIGZpbGUuJyAlIGRhdGEKKyAgICAgICAgZGF0YSA9IG9wZW4oZGF0YSkucmVhZCgpCisgICAgZWxpZiBkYXRhLnN0YXJ0c3dpdGgoImh0dHA6Iikgb3IgZGF0YS5zdGFydHN3aXRoKCJodHRwczoiKToKKyAgICAgICAgcHJpbnQgJyIlcyIgbG9va3MgbGlrZSBhIFVSTC4gQmVhdXRpZnVsIFNvdXAgaXMgbm90IGFuIEhUVFAgY2xpZW50LicgJSBkYXRhCisgICAgICAgIHByaW50ICJZb3UgbmVlZCB0byB1c2Ugc29tZSBvdGhlciBsaWJyYXJ5IHRvIGdldCB0aGUgZG9jdW1lbnQgYmVoaW5kIHRoZSBVUkwsIGFuZCBmZWVkIHRoYXQgZG9jdW1lbnQgdG8gQmVhdXRpZnVsIFNvdXAuIgorICAgICAgICByZXR1cm4KKyAgICBwcmludAorCisgICAgZm9yIHBhcnNlciBpbiBiYXNpY19wYXJzZXJzOgorICAgICAgICBwcmludCAiVHJ5aW5nIHRvIHBhcnNlIHlvdXIgbWFya3VwIHdpdGggJXMiICUgcGFyc2VyCisgICAgICAgIHN1Y2Nlc3MgPSBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb3VwID0gQmVhdXRpZnVsU291cChkYXRhLCBwYXJzZXIpCisgICAgICAgICAgICBzdWNjZXNzID0gVHJ1ZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgcHJpbnQgIiVzIGNvdWxkIG5vdCBwYXJzZSB0aGUgbWFya3VwLiIgJSBwYXJzZXIKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICBpZiBzdWNjZXNzOgorICAgICAgICAgICAgcHJpbnQgIkhlcmUncyB3aGF0ICVzIGRpZCB3aXRoIHRoZSBtYXJrdXA6IiAlIHBhcnNlcgorICAgICAgICAgICAgcHJpbnQgc291cC5wcmV0dGlmeSgpCisKKyAgICAgICAgcHJpbnQgIi0iICogODAKKworZGVmIGx4bWxfdHJhY2UoZGF0YSwgaHRtbD1UcnVlLCAqKmt3YXJncyk6CisgICAgIiIiUHJpbnQgb3V0IHRoZSBseG1sIGV2ZW50cyB0aGF0IG9jY3VyIGR1cmluZyBwYXJzaW5nLgorCisgICAgVGhpcyBsZXRzIHlvdSBzZWUgaG93IGx4bWwgcGFyc2VzIGEgZG9jdW1lbnQgd2hlbiBubyBCZWF1dGlmdWwKKyAgICBTb3VwIGNvZGUgaXMgcnVubmluZy4KKyAgICAiIiIKKyAgICBmcm9tIGx4bWwgaW1wb3J0IGV0cmVlCisgICAgZm9yIGV2ZW50LCBlbGVtZW50IGluIGV0cmVlLml0ZXJwYXJzZShTdHJpbmdJTyhkYXRhKSwgaHRtbD1odG1sLCAqKmt3YXJncyk6CisgICAgICAgIHByaW50KCIlcywgJTRzLCAlcyIgJSAoZXZlbnQsIGVsZW1lbnQudGFnLCBlbGVtZW50LnRleHQpKQorCitjbGFzcyBBbm5vdW5jaW5nUGFyc2VyKEhUTUxQYXJzZXIpOgorICAgICIiIkFubm91bmNlcyBIVE1MUGFyc2VyIHBhcnNlIGV2ZW50cywgd2l0aG91dCBkb2luZyBhbnl0aGluZyBlbHNlLiIiIgorCisgICAgZGVmIF9wKHNlbGYsIHMpOgorICAgICAgICBwcmludChzKQorCisgICAgZGVmIGhhbmRsZV9zdGFydHRhZyhzZWxmLCBuYW1lLCBhdHRycyk6CisgICAgICAgIHNlbGYuX3AoIiVzIFNUQVJUIiAlIG5hbWUpCisKKyAgICBkZWYgaGFuZGxlX2VuZHRhZyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5fcCgiJXMgRU5EIiAlIG5hbWUpCisKKyAgICBkZWYgaGFuZGxlX2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuX3AoIiVzIERBVEEiICUgZGF0YSkKKworICAgIGRlZiBoYW5kbGVfY2hhcnJlZihzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5fcCgiJXMgQ0hBUlJFRiIgJSBuYW1lKQorCisgICAgZGVmIGhhbmRsZV9lbnRpdHlyZWYoc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYuX3AoIiVzIEVOVElUWVJFRiIgJSBuYW1lKQorCisgICAgZGVmIGhhbmRsZV9jb21tZW50KHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLl9wKCIlcyBDT01NRU5UIiAlIGRhdGEpCisKKyAgICBkZWYgaGFuZGxlX2RlY2woc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuX3AoIiVzIERFQ0wiICUgZGF0YSkKKworICAgIGRlZiB1bmtub3duX2RlY2woc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuX3AoIiVzIFVOS05PV04tREVDTCIgJSBkYXRhKQorCisgICAgZGVmIGhhbmRsZV9waShzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5fcCgiJXMgUEkiICUgZGF0YSkKKworZGVmIGh0bWxwYXJzZXJfdHJhY2UoZGF0YSk6CisgICAgIiIiUHJpbnQgb3V0IHRoZSBIVE1MUGFyc2VyIGV2ZW50cyB0aGF0IG9jY3VyIGR1cmluZyBwYXJzaW5nLgorCisgICAgVGhpcyBsZXRzIHlvdSBzZWUgaG93IEhUTUxQYXJzZXIgcGFyc2VzIGEgZG9jdW1lbnQgd2hlbiBubworICAgIEJlYXV0aWZ1bCBTb3VwIGNvZGUgaXMgcnVubmluZy4KKyAgICAiIiIKKyAgICBwYXJzZXIgPSBBbm5vdW5jaW5nUGFyc2VyKCkKKyAgICBwYXJzZXIuZmVlZChkYXRhKQorCitfdm93ZWxzID0gImFlaW91IgorX2NvbnNvbmFudHMgPSAiYmNkZmdoamtsbW5wcXJzdHZ3eHl6IgorCitkZWYgcndvcmQobGVuZ3RoPTUpOgorICAgICJHZW5lcmF0ZSBhIHJhbmRvbSB3b3JkLWxpa2Ugc3RyaW5nLiIKKyAgICBzID0gJycKKyAgICBmb3IgaSBpbiByYW5nZShsZW5ndGgpOgorICAgICAgICBpZiBpICUgMiA9PSAwOgorICAgICAgICAgICAgdCA9IF9jb25zb25hbnRzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0ID0gX3Zvd2VscworICAgICAgICBzICs9IHJhbmRvbS5jaG9pY2UodCkKKyAgICByZXR1cm4gcworCitkZWYgcnNlbnRlbmNlKGxlbmd0aD00KToKKyAgICAiR2VuZXJhdGUgYSByYW5kb20gc2VudGVuY2UtbGlrZSBzdHJpbmcuIgorICAgIHJldHVybiAiICIuam9pbihyd29yZChyYW5kb20ucmFuZGludCg0LDkpKSBmb3IgaSBpbiByYW5nZShsZW5ndGgpKQorICAgICAgICAKK2RlZiByZG9jKG51bV9lbGVtZW50cz0xMDAwKToKKyAgICAiIiJSYW5kb21seSBnZW5lcmF0ZSBhbiBpbnZhbGlkIEhUTUwgZG9jdW1lbnQuIiIiCisgICAgdGFnX25hbWVzID0gWydwJywgJ2RpdicsICdzcGFuJywgJ2knLCAnYicsICdzY3JpcHQnLCAndGFibGUnXQorICAgIGVsZW1lbnRzID0gW10KKyAgICBmb3IgaSBpbiByYW5nZShudW1fZWxlbWVudHMpOgorICAgICAgICBjaG9pY2UgPSByYW5kb20ucmFuZGludCgwLDMpCisgICAgICAgIGlmIGNob2ljZSA9PSAwOgorICAgICAgICAgICAgIyBOZXcgdGFnLgorICAgICAgICAgICAgdGFnX25hbWUgPSByYW5kb20uY2hvaWNlKHRhZ19uYW1lcykKKyAgICAgICAgICAgIGVsZW1lbnRzLmFwcGVuZCgiPCVzPiIgJSB0YWdfbmFtZSkKKyAgICAgICAgZWxpZiBjaG9pY2UgPT0gMToKKyAgICAgICAgICAgIGVsZW1lbnRzLmFwcGVuZChyc2VudGVuY2UocmFuZG9tLnJhbmRpbnQoMSw0KSkpCisgICAgICAgIGVsaWYgY2hvaWNlID09IDI6CisgICAgICAgICAgICAjIENsb3NlIGEgdGFnLgorICAgICAgICAgICAgdGFnX25hbWUgPSByYW5kb20uY2hvaWNlKHRhZ19uYW1lcykKKyAgICAgICAgICAgIGVsZW1lbnRzLmFwcGVuZCgiPC8lcz4iICUgdGFnX25hbWUpCisgICAgcmV0dXJuICI8aHRtbD4iICsgIlxuIi5qb2luKGVsZW1lbnRzKSArICI8L2h0bWw+IgorCitkZWYgYmVuY2htYXJrX3BhcnNlcnMobnVtX2VsZW1lbnRzPTEwMDAwMCk6CisgICAgIiIiVmVyeSBiYXNpYyBoZWFkLXRvLWhlYWQgcGVyZm9ybWFuY2UgYmVuY2htYXJrLiIiIgorICAgIHByaW50ICJDb21wYXJhdGl2ZSBwYXJzZXIgYmVuY2htYXJrIG9uIEJlYXV0aWZ1bCBTb3VwICVzIiAlIF9fdmVyc2lvbl9fCisgICAgZGF0YSA9IHJkb2MobnVtX2VsZW1lbnRzKQorICAgIHByaW50ICJHZW5lcmF0ZWQgYSBsYXJnZSBpbnZhbGlkIEhUTUwgZG9jdW1lbnQgKCVkIGJ5dGVzKS4iICUgbGVuKGRhdGEpCisgICAgCisgICAgZm9yIHBhcnNlciBpbiBbImx4bWwiLCBbImx4bWwiLCAiaHRtbCJdLCAiaHRtbDVsaWIiLCAiaHRtbC5wYXJzZXIiXToKKyAgICAgICAgc3VjY2VzcyA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGEgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgc291cCA9IEJlYXV0aWZ1bFNvdXAoZGF0YSwgcGFyc2VyKQorICAgICAgICAgICAgYiA9IHRpbWUudGltZSgpCisgICAgICAgICAgICBzdWNjZXNzID0gVHJ1ZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgcHJpbnQgIiVzIGNvdWxkIG5vdCBwYXJzZSB0aGUgbWFya3VwLiIgJSBwYXJzZXIKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICBpZiBzdWNjZXNzOgorICAgICAgICAgICAgcHJpbnQgIkJTNCslcyBwYXJzZWQgdGhlIG1hcmt1cCBpbiAlLjJmcy4iICUgKHBhcnNlciwgYi1hKQorCisgICAgZnJvbSBseG1sIGltcG9ydCBldHJlZQorICAgIGEgPSB0aW1lLnRpbWUoKQorICAgIGV0cmVlLkhUTUwoZGF0YSkKKyAgICBiID0gdGltZS50aW1lKCkKKyAgICBwcmludCAiUmF3IGx4bWwgcGFyc2VkIHRoZSBtYXJrdXAgaW4gJS4yZnMuIiAlIChiLWEpCisKKyAgICBpbXBvcnQgaHRtbDVsaWIKKyAgICBwYXJzZXIgPSBodG1sNWxpYi5IVE1MUGFyc2VyKCkKKyAgICBhID0gdGltZS50aW1lKCkKKyAgICBwYXJzZXIucGFyc2UoZGF0YSkKKyAgICBiID0gdGltZS50aW1lKCkKKyAgICBwcmludCAiUmF3IGh0bWw1bGliIHBhcnNlZCB0aGUgbWFya3VwIGluICUuMmZzLiIgJSAoYi1hKQorCitkZWYgcHJvZmlsZShudW1fZWxlbWVudHM9MTAwMDAwLCBwYXJzZXI9Imx4bWwiKToKKworICAgIGZpbGVoYW5kbGUgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKQorICAgIGZpbGVuYW1lID0gZmlsZWhhbmRsZS5uYW1lCisKKyAgICBkYXRhID0gcmRvYyhudW1fZWxlbWVudHMpCisgICAgdmFycyA9IGRpY3QoYnM0PWJzNCwgZGF0YT1kYXRhLCBwYXJzZXI9cGFyc2VyKQorICAgIGNQcm9maWxlLnJ1bmN0eCgnYnM0LkJlYXV0aWZ1bFNvdXAoZGF0YSwgcGFyc2VyKScgLCB2YXJzLCB2YXJzLCBmaWxlbmFtZSkKKworICAgIHN0YXRzID0gcHN0YXRzLlN0YXRzKGZpbGVuYW1lKQorICAgICMgc3RhdHMuc3RyaXBfZGlycygpCisgICAgc3RhdHMuc29ydF9zdGF0cygiY3VtdWxhdGl2ZSIpCisgICAgc3RhdHMucHJpbnRfc3RhdHMoJ19odG1sNWxpYnxiczQnLCA1MCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBkaWFnbm9zZShzeXMuc3RkaW4ucmVhZCgpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvZWxlbWVudC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2VsZW1lbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE5YWZkZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2VsZW1lbnQucHkKQEAgLTAsMCArMSwxNjExIEBACitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCByZQoraW1wb3J0IHN5cworaW1wb3J0IHdhcm5pbmdzCitmcm9tIGJzNC5kYW1taXQgaW1wb3J0IEVudGl0eVN1YnN0aXR1dGlvbgorCitERUZBVUxUX09VVFBVVF9FTkNPRElORyA9ICJ1dGYtOCIKK1BZM0sgPSAoc3lzLnZlcnNpb25faW5mb1swXSA+IDIpCisKK3doaXRlc3BhY2VfcmUgPSByZS5jb21waWxlKCJccysiKQorCitkZWYgX2FsaWFzKGF0dHIpOgorICAgICIiIkFsaWFzIG9uZSBhdHRyaWJ1dGUgbmFtZSB0byBhbm90aGVyIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IiIiCisgICAgQHByb3BlcnR5CisgICAgZGVmIGFsaWFzKHNlbGYpOgorICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCBhdHRyKQorCisgICAgQGFsaWFzLnNldHRlcgorICAgIGRlZiBhbGlhcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNldGF0dHIoc2VsZiwgYXR0cikKKyAgICByZXR1cm4gYWxpYXMKKworCitjbGFzcyBOYW1lc3BhY2VkQXR0cmlidXRlKHVuaWNvZGUpOgorCisgICAgZGVmIF9fbmV3X18oY2xzLCBwcmVmaXgsIG5hbWUsIG5hbWVzcGFjZT1Ob25lKToKKyAgICAgICAgaWYgbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgb2JqID0gdW5pY29kZS5fX25ld19fKGNscywgcHJlZml4KQorICAgICAgICBlbGlmIHByZWZpeCBpcyBOb25lOgorICAgICAgICAgICAgIyBOb3QgcmVhbGx5IG5hbWVzcGFjZWQuCisgICAgICAgICAgICBvYmogPSB1bmljb2RlLl9fbmV3X18oY2xzLCBuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb2JqID0gdW5pY29kZS5fX25ld19fKGNscywgcHJlZml4ICsgIjoiICsgbmFtZSkKKyAgICAgICAgb2JqLnByZWZpeCA9IHByZWZpeAorICAgICAgICBvYmoubmFtZSA9IG5hbWUKKyAgICAgICAgb2JqLm5hbWVzcGFjZSA9IG5hbWVzcGFjZQorICAgICAgICByZXR1cm4gb2JqCisKK2NsYXNzIEF0dHJpYnV0ZVZhbHVlV2l0aENoYXJzZXRTdWJzdGl0dXRpb24odW5pY29kZSk6CisgICAgIiIiQSBzdGFuZC1pbiBvYmplY3QgZm9yIGEgY2hhcmFjdGVyIGVuY29kaW5nIHNwZWNpZmllZCBpbiBIVE1MLiIiIgorCitjbGFzcyBDaGFyc2V0TWV0YUF0dHJpYnV0ZVZhbHVlKEF0dHJpYnV0ZVZhbHVlV2l0aENoYXJzZXRTdWJzdGl0dXRpb24pOgorICAgICIiIkEgZ2VuZXJpYyBzdGFuZC1pbiBmb3IgdGhlIHZhbHVlIG9mIGEgbWV0YSB0YWcncyAnY2hhcnNldCcgYXR0cmlidXRlLgorCisgICAgV2hlbiBCZWF1dGlmdWwgU291cCBwYXJzZXMgdGhlIG1hcmt1cCAnPG1ldGEgY2hhcnNldD0idXRmOCI+JywgdGhlCisgICAgdmFsdWUgb2YgdGhlICdjaGFyc2V0JyBhdHRyaWJ1dGUgd2lsbCBiZSBvbmUgb2YgdGhlc2Ugb2JqZWN0cy4KKyAgICAiIiIKKworICAgIGRlZiBfX25ld19fKGNscywgb3JpZ2luYWxfdmFsdWUpOgorICAgICAgICBvYmogPSB1bmljb2RlLl9fbmV3X18oY2xzLCBvcmlnaW5hbF92YWx1ZSkKKyAgICAgICAgb2JqLm9yaWdpbmFsX3ZhbHVlID0gb3JpZ2luYWxfdmFsdWUKKyAgICAgICAgcmV0dXJuIG9iagorCisgICAgZGVmIGVuY29kZShzZWxmLCBlbmNvZGluZyk6CisgICAgICAgIHJldHVybiBlbmNvZGluZworCisKK2NsYXNzIENvbnRlbnRNZXRhQXR0cmlidXRlVmFsdWUoQXR0cmlidXRlVmFsdWVXaXRoQ2hhcnNldFN1YnN0aXR1dGlvbik6CisgICAgIiIiQSBnZW5lcmljIHN0YW5kLWluIGZvciB0aGUgdmFsdWUgb2YgYSBtZXRhIHRhZydzICdjb250ZW50JyBhdHRyaWJ1dGUuCisKKyAgICBXaGVuIEJlYXV0aWZ1bCBTb3VwIHBhcnNlcyB0aGUgbWFya3VwOgorICAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGY4Ij4KKworICAgIFRoZSB2YWx1ZSBvZiB0aGUgJ2NvbnRlbnQnIGF0dHJpYnV0ZSB3aWxsIGJlIG9uZSBvZiB0aGVzZSBvYmplY3RzLgorICAgICIiIgorCisgICAgQ0hBUlNFVF9SRSA9IHJlLmNvbXBpbGUoIigoXnw7KVxzKmNoYXJzZXQ9KShbXjtdKikiLCByZS5NKQorCisgICAgZGVmIF9fbmV3X18oY2xzLCBvcmlnaW5hbF92YWx1ZSk6CisgICAgICAgIG1hdGNoID0gY2xzLkNIQVJTRVRfUkUuc2VhcmNoKG9yaWdpbmFsX3ZhbHVlKQorICAgICAgICBpZiBtYXRjaCBpcyBOb25lOgorICAgICAgICAgICAgIyBObyBzdWJzdGl0dXRpb24gbmVjZXNzYXJ5LgorICAgICAgICAgICAgcmV0dXJuIHVuaWNvZGUuX19uZXdfXyh1bmljb2RlLCBvcmlnaW5hbF92YWx1ZSkKKworICAgICAgICBvYmogPSB1bmljb2RlLl9fbmV3X18oY2xzLCBvcmlnaW5hbF92YWx1ZSkKKyAgICAgICAgb2JqLm9yaWdpbmFsX3ZhbHVlID0gb3JpZ2luYWxfdmFsdWUKKyAgICAgICAgcmV0dXJuIG9iagorCisgICAgZGVmIGVuY29kZShzZWxmLCBlbmNvZGluZyk6CisgICAgICAgIGRlZiByZXdyaXRlKG1hdGNoKToKKyAgICAgICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgxKSArIGVuY29kaW5nCisgICAgICAgIHJldHVybiBzZWxmLkNIQVJTRVRfUkUuc3ViKHJld3JpdGUsIHNlbGYub3JpZ2luYWxfdmFsdWUpCisKK2NsYXNzIEhUTUxBd2FyZUVudGl0eVN1YnN0aXR1dGlvbihFbnRpdHlTdWJzdGl0dXRpb24pOgorCisgICAgIiIiRW50aXR5IHN1YnN0aXR1dGlvbiBydWxlcyB0aGF0IGFyZSBhd2FyZSBvZiBzb21lIEhUTUwgcXVpcmtzLgorCisgICAgU3BlY2lmaWNhbGx5LCB0aGUgY29udGVudHMgb2YgPHNjcmlwdD4gYW5kIDxzdHlsZT4gdGFncyBzaG91bGQgbm90CisgICAgdW5kZXJnbyBlbnRpdHkgc3Vic3RpdHV0aW9uLgorCisgICAgSW5jb21pbmcgTmF2aWdhYmxlU3RyaW5nIG9iamVjdHMgYXJlIGNoZWNrZWQgdG8gc2VlIGlmIHRoZXkncmUgdGhlCisgICAgZGlyZWN0IGNoaWxkcmVuIG9mIGEgPHNjcmlwdD4gb3IgPHN0eWxlPiB0YWcuCisgICAgIiIiCisKKyAgICBjZGF0YV9jb250YWluaW5nX3RhZ3MgPSBzZXQoWyJzY3JpcHQiLCAic3R5bGUiXSkKKworICAgIHByZWZvcm1hdHRlZF90YWdzID0gc2V0KFsicHJlIl0pCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3N1YnN0aXR1dGVfaWZfYXBwcm9wcmlhdGUoY2xzLCBucywgZik6CisgICAgICAgIGlmIChpc2luc3RhbmNlKG5zLCBOYXZpZ2FibGVTdHJpbmcpCisgICAgICAgICAgICBhbmQgbnMucGFyZW50IGlzIG5vdCBOb25lCisgICAgICAgICAgICBhbmQgbnMucGFyZW50Lm5hbWUgaW4gY2xzLmNkYXRhX2NvbnRhaW5pbmdfdGFncyk6CisgICAgICAgICAgICAjIERvIG5vdGhpbmcuCisgICAgICAgICAgICByZXR1cm4gbnMKKyAgICAgICAgIyBTdWJzdGl0dXRlLgorICAgICAgICByZXR1cm4gZihucykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzdWJzdGl0dXRlX2h0bWwoY2xzLCBucyk6CisgICAgICAgIHJldHVybiBjbHMuX3N1YnN0aXR1dGVfaWZfYXBwcm9wcmlhdGUoCisgICAgICAgICAgICBucywgRW50aXR5U3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVfaHRtbCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzdWJzdGl0dXRlX3htbChjbHMsIG5zKToKKyAgICAgICAgcmV0dXJuIGNscy5fc3Vic3RpdHV0ZV9pZl9hcHByb3ByaWF0ZSgKKyAgICAgICAgICAgIG5zLCBFbnRpdHlTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZV94bWwpCisKK2NsYXNzIFBhZ2VFbGVtZW50KG9iamVjdCk6CisgICAgIiIiQ29udGFpbnMgdGhlIG5hdmlnYXRpb25hbCBpbmZvcm1hdGlvbiBmb3Igc29tZSBwYXJ0IG9mIHRoZSBwYWdlCisgICAgKGVpdGhlciBhIHRhZyBvciBhIHBpZWNlIG9mIHRleHQpIiIiCisKKyAgICAjIFRoZXJlIGFyZSBmaXZlIHBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlICJmb3JtYXR0ZXIiIGFyZ3VtZW50IHBhc3NlZCBpbgorICAgICMgdG8gbWV0aG9kcyBsaWtlIGVuY29kZSgpIGFuZCBwcmV0dGlmeSgpOgorICAgICMKKyAgICAjICJodG1sIiAtIEFsbCBVbmljb2RlIGNoYXJhY3RlcnMgd2l0aCBjb3JyZXNwb25kaW5nIEhUTUwgZW50aXRpZXMKKyAgICAjICAgYXJlIGNvbnZlcnRlZCB0byB0aG9zZSBlbnRpdGllcyBvbiBvdXRwdXQuCisgICAgIyAibWluaW1hbCIgLSBCYXJlIGFtcGVyc2FuZHMgYW5kIGFuZ2xlIGJyYWNrZXRzIGFyZSBjb252ZXJ0ZWQgdG8KKyAgICAjICAgWE1MIGVudGl0aWVzOiAmYW1wOyAmbHQ7ICZndDsKKyAgICAjIE5vbmUgLSBUaGUgbnVsbCBmb3JtYXR0ZXIuIFVuaWNvZGUgY2hhcmFjdGVycyBhcmUgbmV2ZXIKKyAgICAjICAgY29udmVydGVkIHRvIGVudGl0aWVzLiAgVGhpcyBpcyBub3QgcmVjb21tZW5kZWQsIGJ1dCBpdCdzCisgICAgIyAgIGZhc3RlciB0aGFuICJtaW5pbWFsIi4KKyAgICAjIEEgZnVuY3Rpb24gLSBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIG9uIGV2ZXJ5IHN0cmluZyB0aGF0CisgICAgIyAgbmVlZHMgdG8gdW5kZXJnbyBlbnRpdHkgc3Vic3RpdHV0aW9uLgorICAgICMKKworICAgICMgSW4gYW4gSFRNTCBkb2N1bWVudCwgdGhlIGRlZmF1bHQgImh0bWwiIGFuZCAibWluaW1hbCIgZnVuY3Rpb25zCisgICAgIyB3aWxsIGxlYXZlIHRoZSBjb250ZW50cyBvZiA8c2NyaXB0PiBhbmQgPHN0eWxlPiB0YWdzIGFsb25lLiBGb3IKKyAgICAjIGFuIFhNTCBkb2N1bWVudCwgYWxsIHRhZ3Mgd2lsbCBiZSBnaXZlbiB0aGUgc2FtZSB0cmVhdG1lbnQuCisKKyAgICBIVE1MX0ZPUk1BVFRFUlMgPSB7CisgICAgICAgICJodG1sIiA6IEhUTUxBd2FyZUVudGl0eVN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlX2h0bWwsCisgICAgICAgICJtaW5pbWFsIiA6IEhUTUxBd2FyZUVudGl0eVN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlX3htbCwKKyAgICAgICAgTm9uZSA6IE5vbmUKKyAgICAgICAgfQorCisgICAgWE1MX0ZPUk1BVFRFUlMgPSB7CisgICAgICAgICJodG1sIiA6IEVudGl0eVN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlX2h0bWwsCisgICAgICAgICJtaW5pbWFsIiA6IEVudGl0eVN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlX3htbCwKKyAgICAgICAgTm9uZSA6IE5vbmUKKyAgICAgICAgfQorCisgICAgZGVmIGZvcm1hdF9zdHJpbmcoc2VsZiwgcywgZm9ybWF0dGVyPSdtaW5pbWFsJyk6CisgICAgICAgICIiIkZvcm1hdCB0aGUgZ2l2ZW4gc3RyaW5nIHVzaW5nIHRoZSBnaXZlbiBmb3JtYXR0ZXIuIiIiCisgICAgICAgIGlmIG5vdCBjYWxsYWJsZShmb3JtYXR0ZXIpOgorICAgICAgICAgICAgZm9ybWF0dGVyID0gc2VsZi5fZm9ybWF0dGVyX2Zvcl9uYW1lKGZvcm1hdHRlcikKKyAgICAgICAgaWYgZm9ybWF0dGVyIGlzIE5vbmU6CisgICAgICAgICAgICBvdXRwdXQgPSBzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdXRwdXQgPSBmb3JtYXR0ZXIocykKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIF9pc194bWwoc2VsZik6CisgICAgICAgICIiIklzIHRoaXMgZWxlbWVudCBwYXJ0IG9mIGFuIFhNTCB0cmVlIG9yIGFuIEhUTUwgdHJlZT8KKworICAgICAgICBUaGlzIGlzIHVzZWQgd2hlbiBtYXBwaW5nIGEgZm9ybWF0dGVyIG5hbWUgKCJtaW5pbWFsIikgdG8gYW4KKyAgICAgICAgYXBwcm9wcmlhdGUgZnVuY3Rpb24gKG9uZSB0aGF0IHBlcmZvcm1zIGVudGl0eS1zdWJzdGl0dXRpb24gb24KKyAgICAgICAgdGhlIGNvbnRlbnRzIG9mIDxzY3JpcHQ+IGFuZCA8c3R5bGU+IHRhZ3MsIG9yIG5vdCkuIEl0J3MKKyAgICAgICAgaW5lZmZpY2llbnQsIGJ1dCBpdCBzaG91bGQgYmUgY2FsbGVkIHZlcnkgcmFyZWx5LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5wYXJlbnQgaXMgTm9uZToKKyAgICAgICAgICAgICMgVGhpcyBpcyB0aGUgdG9wLWxldmVsIG9iamVjdC4gSXQgc2hvdWxkIGhhdmUgLmlzX3htbCBzZXQKKyAgICAgICAgICAgICMgZnJvbSB0cmVlIGNyZWF0aW9uLiBJZiBub3QsIHRha2UgYSBndWVzcy0tQlMgaXMgdXN1YWxseQorICAgICAgICAgICAgIyB1c2VkIG9uIEhUTUwgbWFya3VwLgorICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgJ2lzX3htbCcsIEZhbHNlKQorICAgICAgICByZXR1cm4gc2VsZi5wYXJlbnQuX2lzX3htbAorCisgICAgZGVmIF9mb3JtYXR0ZXJfZm9yX25hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgICJMb29rIHVwIGEgZm9ybWF0dGVyIGZ1bmN0aW9uIGJhc2VkIG9uIGl0cyBuYW1lIGFuZCB0aGUgdHJlZS4iCisgICAgICAgIGlmIHNlbGYuX2lzX3htbDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLlhNTF9GT1JNQVRURVJTLmdldCgKKyAgICAgICAgICAgICAgICBuYW1lLCBFbnRpdHlTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZV94bWwpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5IVE1MX0ZPUk1BVFRFUlMuZ2V0KAorICAgICAgICAgICAgICAgIG5hbWUsIEhUTUxBd2FyZUVudGl0eVN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlX3htbCkKKworICAgIGRlZiBzZXR1cChzZWxmLCBwYXJlbnQ9Tm9uZSwgcHJldmlvdXNfZWxlbWVudD1Ob25lKToKKyAgICAgICAgIiIiU2V0cyB1cCB0aGUgaW5pdGlhbCByZWxhdGlvbnMgYmV0d2VlbiB0aGlzIGVsZW1lbnQgYW5kCisgICAgICAgIG90aGVyIGVsZW1lbnRzLiIiIgorICAgICAgICBzZWxmLnBhcmVudCA9IHBhcmVudAorICAgICAgICBzZWxmLnByZXZpb3VzX2VsZW1lbnQgPSBwcmV2aW91c19lbGVtZW50CisgICAgICAgIGlmIHByZXZpb3VzX2VsZW1lbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnByZXZpb3VzX2VsZW1lbnQubmV4dF9lbGVtZW50ID0gc2VsZgorICAgICAgICBzZWxmLm5leHRfZWxlbWVudCA9IE5vbmUKKyAgICAgICAgc2VsZi5wcmV2aW91c19zaWJsaW5nID0gTm9uZQorICAgICAgICBzZWxmLm5leHRfc2libGluZyA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5wYXJlbnQgaXMgbm90IE5vbmUgYW5kIHNlbGYucGFyZW50LmNvbnRlbnRzOgorICAgICAgICAgICAgc2VsZi5wcmV2aW91c19zaWJsaW5nID0gc2VsZi5wYXJlbnQuY29udGVudHNbLTFdCisgICAgICAgICAgICBzZWxmLnByZXZpb3VzX3NpYmxpbmcubmV4dF9zaWJsaW5nID0gc2VsZgorCisgICAgbmV4dFNpYmxpbmcgPSBfYWxpYXMoIm5leHRfc2libGluZyIpICAjIEJTMworICAgIHByZXZpb3VzU2libGluZyA9IF9hbGlhcygicHJldmlvdXNfc2libGluZyIpICAjIEJTMworCisgICAgZGVmIHJlcGxhY2Vfd2l0aChzZWxmLCByZXBsYWNlX3dpdGgpOgorICAgICAgICBpZiByZXBsYWNlX3dpdGggaXMgc2VsZjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiByZXBsYWNlX3dpdGggaXMgc2VsZi5wYXJlbnQ6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW5ub3QgcmVwbGFjZSBhIFRhZyB3aXRoIGl0cyBwYXJlbnQuIikKKyAgICAgICAgb2xkX3BhcmVudCA9IHNlbGYucGFyZW50CisgICAgICAgIG15X2luZGV4ID0gc2VsZi5wYXJlbnQuaW5kZXgoc2VsZikKKyAgICAgICAgc2VsZi5leHRyYWN0KCkKKyAgICAgICAgb2xkX3BhcmVudC5pbnNlcnQobXlfaW5kZXgsIHJlcGxhY2Vfd2l0aCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKyAgICByZXBsYWNlV2l0aCA9IHJlcGxhY2Vfd2l0aCAgIyBCUzMKKworICAgIGRlZiB1bndyYXAoc2VsZik6CisgICAgICAgIG15X3BhcmVudCA9IHNlbGYucGFyZW50CisgICAgICAgIG15X2luZGV4ID0gc2VsZi5wYXJlbnQuaW5kZXgoc2VsZikKKyAgICAgICAgc2VsZi5leHRyYWN0KCkKKyAgICAgICAgZm9yIGNoaWxkIGluIHJldmVyc2VkKHNlbGYuY29udGVudHNbOl0pOgorICAgICAgICAgICAgbXlfcGFyZW50Lmluc2VydChteV9pbmRleCwgY2hpbGQpCisgICAgICAgIHJldHVybiBzZWxmCisgICAgcmVwbGFjZV93aXRoX2NoaWxkcmVuID0gdW53cmFwCisgICAgcmVwbGFjZVdpdGhDaGlsZHJlbiA9IHVud3JhcCAgIyBCUzMKKworICAgIGRlZiB3cmFwKHNlbGYsIHdyYXBfaW5zaWRlKToKKyAgICAgICAgbWUgPSBzZWxmLnJlcGxhY2Vfd2l0aCh3cmFwX2luc2lkZSkKKyAgICAgICAgd3JhcF9pbnNpZGUuYXBwZW5kKG1lKQorICAgICAgICByZXR1cm4gd3JhcF9pbnNpZGUKKworICAgIGRlZiBleHRyYWN0KHNlbGYpOgorICAgICAgICAiIiJEZXN0cnVjdGl2ZWx5IHJpcHMgdGhpcyBlbGVtZW50IG91dCBvZiB0aGUgdHJlZS4iIiIKKyAgICAgICAgaWYgc2VsZi5wYXJlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkZWwgc2VsZi5wYXJlbnQuY29udGVudHNbc2VsZi5wYXJlbnQuaW5kZXgoc2VsZildCisKKyAgICAgICAgI0ZpbmQgdGhlIHR3byBlbGVtZW50cyB0aGF0IHdvdWxkIGJlIG5leHQgdG8gZWFjaCBvdGhlciBpZgorICAgICAgICAjdGhpcyBlbGVtZW50IChhbmQgYW55IGNoaWxkcmVuKSBoYWRuJ3QgYmVlbiBwYXJzZWQuIENvbm5lY3QKKyAgICAgICAgI3RoZSB0d28uCisgICAgICAgIGxhc3RfY2hpbGQgPSBzZWxmLl9sYXN0X2Rlc2NlbmRhbnQoKQorICAgICAgICBuZXh0X2VsZW1lbnQgPSBsYXN0X2NoaWxkLm5leHRfZWxlbWVudAorCisgICAgICAgIGlmIHNlbGYucHJldmlvdXNfZWxlbWVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYucHJldmlvdXNfZWxlbWVudC5uZXh0X2VsZW1lbnQgPSBuZXh0X2VsZW1lbnQKKyAgICAgICAgaWYgbmV4dF9lbGVtZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbmV4dF9lbGVtZW50LnByZXZpb3VzX2VsZW1lbnQgPSBzZWxmLnByZXZpb3VzX2VsZW1lbnQKKyAgICAgICAgc2VsZi5wcmV2aW91c19lbGVtZW50ID0gTm9uZQorICAgICAgICBsYXN0X2NoaWxkLm5leHRfZWxlbWVudCA9IE5vbmUKKworICAgICAgICBzZWxmLnBhcmVudCA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5wcmV2aW91c19zaWJsaW5nIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5wcmV2aW91c19zaWJsaW5nLm5leHRfc2libGluZyA9IHNlbGYubmV4dF9zaWJsaW5nCisgICAgICAgIGlmIHNlbGYubmV4dF9zaWJsaW5nIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5uZXh0X3NpYmxpbmcucHJldmlvdXNfc2libGluZyA9IHNlbGYucHJldmlvdXNfc2libGluZworICAgICAgICBzZWxmLnByZXZpb3VzX3NpYmxpbmcgPSBzZWxmLm5leHRfc2libGluZyA9IE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfbGFzdF9kZXNjZW5kYW50KHNlbGYsIGlzX2luaXRpYWxpemVkPVRydWUsIGFjY2VwdF9zZWxmPVRydWUpOgorICAgICAgICAiRmluZHMgdGhlIGxhc3QgZWxlbWVudCBiZW5lYXRoIHRoaXMgb2JqZWN0IHRvIGJlIHBhcnNlZC4iCisgICAgICAgIGlmIGlzX2luaXRpYWxpemVkIGFuZCBzZWxmLm5leHRfc2libGluZzoKKyAgICAgICAgICAgIGxhc3RfY2hpbGQgPSBzZWxmLm5leHRfc2libGluZy5wcmV2aW91c19lbGVtZW50CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsYXN0X2NoaWxkID0gc2VsZgorICAgICAgICAgICAgd2hpbGUgaXNpbnN0YW5jZShsYXN0X2NoaWxkLCBUYWcpIGFuZCBsYXN0X2NoaWxkLmNvbnRlbnRzOgorICAgICAgICAgICAgICAgIGxhc3RfY2hpbGQgPSBsYXN0X2NoaWxkLmNvbnRlbnRzWy0xXQorICAgICAgICBpZiBub3QgYWNjZXB0X3NlbGYgYW5kIGxhc3RfY2hpbGQgPT0gc2VsZjoKKyAgICAgICAgICAgIGxhc3RfY2hpbGQgPSBOb25lCisgICAgICAgIHJldHVybiBsYXN0X2NoaWxkCisgICAgIyBCUzM6IE5vdCBwYXJ0IG9mIHRoZSBBUEkhCisgICAgX2xhc3RSZWN1cnNpdmVDaGlsZCA9IF9sYXN0X2Rlc2NlbmRhbnQKKworICAgIGRlZiBpbnNlcnQoc2VsZiwgcG9zaXRpb24sIG5ld19jaGlsZCk6CisgICAgICAgIGlmIG5ld19jaGlsZCBpcyBzZWxmOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2Fubm90IGluc2VydCBhIHRhZyBpbnRvIGl0c2VsZi4iKQorICAgICAgICBpZiAoaXNpbnN0YW5jZShuZXdfY2hpbGQsIGJhc2VzdHJpbmcpCisgICAgICAgICAgICBhbmQgbm90IGlzaW5zdGFuY2UobmV3X2NoaWxkLCBOYXZpZ2FibGVTdHJpbmcpKToKKyAgICAgICAgICAgIG5ld19jaGlsZCA9IE5hdmlnYWJsZVN0cmluZyhuZXdfY2hpbGQpCisKKyAgICAgICAgcG9zaXRpb24gPSBtaW4ocG9zaXRpb24sIGxlbihzZWxmLmNvbnRlbnRzKSkKKyAgICAgICAgaWYgaGFzYXR0cihuZXdfY2hpbGQsICdwYXJlbnQnKSBhbmQgbmV3X2NoaWxkLnBhcmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgV2UncmUgJ2luc2VydGluZycgYW4gZWxlbWVudCB0aGF0J3MgYWxyZWFkeSBvbmUKKyAgICAgICAgICAgICMgb2YgdGhpcyBvYmplY3QncyBjaGlsZHJlbi4KKyAgICAgICAgICAgIGlmIG5ld19jaGlsZC5wYXJlbnQgaXMgc2VsZjoKKyAgICAgICAgICAgICAgICBjdXJyZW50X2luZGV4ID0gc2VsZi5pbmRleChuZXdfY2hpbGQpCisgICAgICAgICAgICAgICAgaWYgY3VycmVudF9pbmRleCA8IHBvc2l0aW9uOgorICAgICAgICAgICAgICAgICAgICAjIFdlJ3JlIG1vdmluZyB0aGlzIGVsZW1lbnQgZnVydGhlciBkb3duIHRoZSBsaXN0CisgICAgICAgICAgICAgICAgICAgICMgb2YgdGhpcyBvYmplY3QncyBjaGlsZHJlbi4gVGhhdCBtZWFucyB0aGF0IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgIyB3ZSBleHRyYWN0IHRoaXMgZWxlbWVudCwgb3VyIHRhcmdldCBpbmRleCB3aWxsCisgICAgICAgICAgICAgICAgICAgICMganVtcCBkb3duIG9uZS4KKyAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gLT0gMQorICAgICAgICAgICAgbmV3X2NoaWxkLmV4dHJhY3QoKQorCisgICAgICAgIG5ld19jaGlsZC5wYXJlbnQgPSBzZWxmCisgICAgICAgIHByZXZpb3VzX2NoaWxkID0gTm9uZQorICAgICAgICBpZiBwb3NpdGlvbiA9PSAwOgorICAgICAgICAgICAgbmV3X2NoaWxkLnByZXZpb3VzX3NpYmxpbmcgPSBOb25lCisgICAgICAgICAgICBuZXdfY2hpbGQucHJldmlvdXNfZWxlbWVudCA9IHNlbGYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByZXZpb3VzX2NoaWxkID0gc2VsZi5jb250ZW50c1twb3NpdGlvbiAtIDFdCisgICAgICAgICAgICBuZXdfY2hpbGQucHJldmlvdXNfc2libGluZyA9IHByZXZpb3VzX2NoaWxkCisgICAgICAgICAgICBuZXdfY2hpbGQucHJldmlvdXNfc2libGluZy5uZXh0X3NpYmxpbmcgPSBuZXdfY2hpbGQKKyAgICAgICAgICAgIG5ld19jaGlsZC5wcmV2aW91c19lbGVtZW50ID0gcHJldmlvdXNfY2hpbGQuX2xhc3RfZGVzY2VuZGFudChGYWxzZSkKKyAgICAgICAgaWYgbmV3X2NoaWxkLnByZXZpb3VzX2VsZW1lbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBuZXdfY2hpbGQucHJldmlvdXNfZWxlbWVudC5uZXh0X2VsZW1lbnQgPSBuZXdfY2hpbGQKKworICAgICAgICBuZXdfY2hpbGRzX2xhc3RfZWxlbWVudCA9IG5ld19jaGlsZC5fbGFzdF9kZXNjZW5kYW50KEZhbHNlKQorCisgICAgICAgIGlmIHBvc2l0aW9uID49IGxlbihzZWxmLmNvbnRlbnRzKToKKyAgICAgICAgICAgIG5ld19jaGlsZC5uZXh0X3NpYmxpbmcgPSBOb25lCisKKyAgICAgICAgICAgIHBhcmVudCA9IHNlbGYKKyAgICAgICAgICAgIHBhcmVudHNfbmV4dF9zaWJsaW5nID0gTm9uZQorICAgICAgICAgICAgd2hpbGUgcGFyZW50c19uZXh0X3NpYmxpbmcgaXMgTm9uZSBhbmQgcGFyZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHBhcmVudHNfbmV4dF9zaWJsaW5nID0gcGFyZW50Lm5leHRfc2libGluZworICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQKKyAgICAgICAgICAgICAgICBpZiBwYXJlbnRzX25leHRfc2libGluZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgIyBXZSBmb3VuZCB0aGUgZWxlbWVudCB0aGF0IGNvbWVzIG5leHQgaW4gdGhlIGRvY3VtZW50LgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgcGFyZW50c19uZXh0X3NpYmxpbmcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbmV3X2NoaWxkc19sYXN0X2VsZW1lbnQubmV4dF9lbGVtZW50ID0gcGFyZW50c19uZXh0X3NpYmxpbmcKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBUaGUgbGFzdCBlbGVtZW50IG9mIHRoaXMgdGFnIGlzIHRoZSBsYXN0IGVsZW1lbnQgaW4KKyAgICAgICAgICAgICAgICAjIHRoZSBkb2N1bWVudC4KKyAgICAgICAgICAgICAgICBuZXdfY2hpbGRzX2xhc3RfZWxlbWVudC5uZXh0X2VsZW1lbnQgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuZXh0X2NoaWxkID0gc2VsZi5jb250ZW50c1twb3NpdGlvbl0KKyAgICAgICAgICAgIG5ld19jaGlsZC5uZXh0X3NpYmxpbmcgPSBuZXh0X2NoaWxkCisgICAgICAgICAgICBpZiBuZXdfY2hpbGQubmV4dF9zaWJsaW5nIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIG5ld19jaGlsZC5uZXh0X3NpYmxpbmcucHJldmlvdXNfc2libGluZyA9IG5ld19jaGlsZAorICAgICAgICAgICAgbmV3X2NoaWxkc19sYXN0X2VsZW1lbnQubmV4dF9lbGVtZW50ID0gbmV4dF9jaGlsZAorCisgICAgICAgIGlmIG5ld19jaGlsZHNfbGFzdF9lbGVtZW50Lm5leHRfZWxlbWVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG5ld19jaGlsZHNfbGFzdF9lbGVtZW50Lm5leHRfZWxlbWVudC5wcmV2aW91c19lbGVtZW50ID0gbmV3X2NoaWxkc19sYXN0X2VsZW1lbnQKKyAgICAgICAgc2VsZi5jb250ZW50cy5pbnNlcnQocG9zaXRpb24sIG5ld19jaGlsZCkKKworICAgIGRlZiBhcHBlbmQoc2VsZiwgdGFnKToKKyAgICAgICAgIiIiQXBwZW5kcyB0aGUgZ2l2ZW4gdGFnIHRvIHRoZSBjb250ZW50cyBvZiB0aGlzIHRhZy4iIiIKKyAgICAgICAgc2VsZi5pbnNlcnQobGVuKHNlbGYuY29udGVudHMpLCB0YWcpCisKKyAgICBkZWYgaW5zZXJ0X2JlZm9yZShzZWxmLCBwcmVkZWNlc3Nvcik6CisgICAgICAgICIiIk1ha2VzIHRoZSBnaXZlbiBlbGVtZW50IHRoZSBpbW1lZGlhdGUgcHJlZGVjZXNzb3Igb2YgdGhpcyBvbmUuCisKKyAgICAgICAgVGhlIHR3byBlbGVtZW50cyB3aWxsIGhhdmUgdGhlIHNhbWUgcGFyZW50LCBhbmQgdGhlIGdpdmVuIGVsZW1lbnQKKyAgICAgICAgd2lsbCBiZSBpbW1lZGlhdGVseSBiZWZvcmUgdGhpcyBvbmUuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmIGlzIHByZWRlY2Vzc29yOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2FuJ3QgaW5zZXJ0IGFuIGVsZW1lbnQgYmVmb3JlIGl0c2VsZi4iKQorICAgICAgICBwYXJlbnQgPSBzZWxmLnBhcmVudAorICAgICAgICBpZiBwYXJlbnQgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgIkVsZW1lbnQgaGFzIG5vIHBhcmVudCwgc28gJ2JlZm9yZScgaGFzIG5vIG1lYW5pbmcuIikKKyAgICAgICAgIyBFeHRyYWN0IGZpcnN0IHNvIHRoYXQgdGhlIGluZGV4IHdvbid0IGJlIHNjcmV3ZWQgdXAgaWYgdGhleQorICAgICAgICAjIGFyZSBzaWJsaW5ncy4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShwcmVkZWNlc3NvciwgUGFnZUVsZW1lbnQpOgorICAgICAgICAgICAgcHJlZGVjZXNzb3IuZXh0cmFjdCgpCisgICAgICAgIGluZGV4ID0gcGFyZW50LmluZGV4KHNlbGYpCisgICAgICAgIHBhcmVudC5pbnNlcnQoaW5kZXgsIHByZWRlY2Vzc29yKQorCisgICAgZGVmIGluc2VydF9hZnRlcihzZWxmLCBzdWNjZXNzb3IpOgorICAgICAgICAiIiJNYWtlcyB0aGUgZ2l2ZW4gZWxlbWVudCB0aGUgaW1tZWRpYXRlIHN1Y2Nlc3NvciBvZiB0aGlzIG9uZS4KKworICAgICAgICBUaGUgdHdvIGVsZW1lbnRzIHdpbGwgaGF2ZSB0aGUgc2FtZSBwYXJlbnQsIGFuZCB0aGUgZ2l2ZW4gZWxlbWVudAorICAgICAgICB3aWxsIGJlIGltbWVkaWF0ZWx5IGFmdGVyIHRoaXMgb25lLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZiBpcyBzdWNjZXNzb3I6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW4ndCBpbnNlcnQgYW4gZWxlbWVudCBhZnRlciBpdHNlbGYuIikKKyAgICAgICAgcGFyZW50ID0gc2VsZi5wYXJlbnQKKyAgICAgICAgaWYgcGFyZW50IGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICJFbGVtZW50IGhhcyBubyBwYXJlbnQsIHNvICdhZnRlcicgaGFzIG5vIG1lYW5pbmcuIikKKyAgICAgICAgIyBFeHRyYWN0IGZpcnN0IHNvIHRoYXQgdGhlIGluZGV4IHdvbid0IGJlIHNjcmV3ZWQgdXAgaWYgdGhleQorICAgICAgICAjIGFyZSBzaWJsaW5ncy4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShzdWNjZXNzb3IsIFBhZ2VFbGVtZW50KToKKyAgICAgICAgICAgIHN1Y2Nlc3Nvci5leHRyYWN0KCkKKyAgICAgICAgaW5kZXggPSBwYXJlbnQuaW5kZXgoc2VsZikKKyAgICAgICAgcGFyZW50Lmluc2VydChpbmRleCsxLCBzdWNjZXNzb3IpCisKKyAgICBkZWYgZmluZF9uZXh0KHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBmaXJzdCBpdGVtIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gY3JpdGVyaWEgYW5kCisgICAgICAgIGFwcGVhcnMgYWZ0ZXIgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9vbmUoc2VsZi5maW5kX2FsbF9uZXh0LCBuYW1lLCBhdHRycywgdGV4dCwgKiprd2FyZ3MpCisgICAgZmluZE5leHQgPSBmaW5kX25leHQgICMgQlMzCisKKyAgICBkZWYgZmluZF9hbGxfbmV4dChzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsIGxpbWl0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyBhbGwgaXRlbXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gY3JpdGVyaWEgYW5kIGFwcGVhcgorICAgICAgICBhZnRlciB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9maW5kX2FsbChuYW1lLCBhdHRycywgdGV4dCwgbGltaXQsIHNlbGYubmV4dF9lbGVtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCisgICAgZmluZEFsbE5leHQgPSBmaW5kX2FsbF9uZXh0ICAjIEJTMworCisgICAgZGVmIGZpbmRfbmV4dF9zaWJsaW5nKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBjbG9zZXN0IHNpYmxpbmcgdG8gdGhpcyBUYWcgdGhhdCBtYXRjaGVzIHRoZQorICAgICAgICBnaXZlbiBjcml0ZXJpYSBhbmQgYXBwZWFycyBhZnRlciB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9maW5kX29uZShzZWxmLmZpbmRfbmV4dF9zaWJsaW5ncywgbmFtZSwgYXR0cnMsIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKQorICAgIGZpbmROZXh0U2libGluZyA9IGZpbmRfbmV4dF9zaWJsaW5nICAjIEJTMworCisgICAgZGVmIGZpbmRfbmV4dF9zaWJsaW5ncyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsIGxpbWl0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIHNpYmxpbmdzIG9mIHRoaXMgVGFnIHRoYXQgbWF0Y2ggdGhlIGdpdmVuCisgICAgICAgIGNyaXRlcmlhIGFuZCBhcHBlYXIgYWZ0ZXIgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9hbGwobmFtZSwgYXR0cnMsIHRleHQsIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uZXh0X3NpYmxpbmdzLCAqKmt3YXJncykKKyAgICBmaW5kTmV4dFNpYmxpbmdzID0gZmluZF9uZXh0X3NpYmxpbmdzICAgIyBCUzMKKyAgICBmZXRjaE5leHRTaWJsaW5ncyA9IGZpbmRfbmV4dF9zaWJsaW5ncyAgIyBCUzIKKworICAgIGRlZiBmaW5kX3ByZXZpb3VzKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBmaXJzdCBpdGVtIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gY3JpdGVyaWEgYW5kCisgICAgICAgIGFwcGVhcnMgYmVmb3JlIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfb25lKAorICAgICAgICAgICAgc2VsZi5maW5kX2FsbF9wcmV2aW91cywgbmFtZSwgYXR0cnMsIHRleHQsICoqa3dhcmdzKQorICAgIGZpbmRQcmV2aW91cyA9IGZpbmRfcHJldmlvdXMgICMgQlMzCisKKyAgICBkZWYgZmluZF9hbGxfcHJldmlvdXMoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1Ob25lLCBsaW1pdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIGFsbCBpdGVtcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBjcml0ZXJpYSBhbmQgYXBwZWFyCisgICAgICAgIGJlZm9yZSB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9maW5kX2FsbChuYW1lLCBhdHRycywgdGV4dCwgbGltaXQsIHNlbGYucHJldmlvdXNfZWxlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykKKyAgICBmaW5kQWxsUHJldmlvdXMgPSBmaW5kX2FsbF9wcmV2aW91cyAgIyBCUzMKKyAgICBmZXRjaFByZXZpb3VzID0gZmluZF9hbGxfcHJldmlvdXMgICAgIyBCUzIKKworICAgIGRlZiBmaW5kX3ByZXZpb3VzX3NpYmxpbmcoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGNsb3Nlc3Qgc2libGluZyB0byB0aGlzIFRhZyB0aGF0IG1hdGNoZXMgdGhlCisgICAgICAgIGdpdmVuIGNyaXRlcmlhIGFuZCBhcHBlYXJzIGJlZm9yZSB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9maW5kX29uZShzZWxmLmZpbmRfcHJldmlvdXNfc2libGluZ3MsIG5hbWUsIGF0dHJzLCB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykKKyAgICBmaW5kUHJldmlvdXNTaWJsaW5nID0gZmluZF9wcmV2aW91c19zaWJsaW5nICAjIEJTMworCisgICAgZGVmIGZpbmRfcHJldmlvdXNfc2libGluZ3Moc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgc2libGluZ3Mgb2YgdGhpcyBUYWcgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4KKyAgICAgICAgY3JpdGVyaWEgYW5kIGFwcGVhciBiZWZvcmUgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9hbGwobmFtZSwgYXR0cnMsIHRleHQsIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcmV2aW91c19zaWJsaW5ncywgKiprd2FyZ3MpCisgICAgZmluZFByZXZpb3VzU2libGluZ3MgPSBmaW5kX3ByZXZpb3VzX3NpYmxpbmdzICAgIyBCUzMKKyAgICBmZXRjaFByZXZpb3VzU2libGluZ3MgPSBmaW5kX3ByZXZpb3VzX3NpYmxpbmdzICAjIEJTMgorCisgICAgZGVmIGZpbmRfcGFyZW50KHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgY2xvc2VzdCBwYXJlbnQgb2YgdGhpcyBUYWcgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbgorICAgICAgICBjcml0ZXJpYS4iIiIKKyAgICAgICAgIyBOT1RFOiBXZSBjYW4ndCB1c2UgX2ZpbmRfb25lIGJlY2F1c2UgZmluZFBhcmVudHMgdGFrZXMgYSBkaWZmZXJlbnQKKyAgICAgICAgIyBzZXQgb2YgYXJndW1lbnRzLgorICAgICAgICByID0gTm9uZQorICAgICAgICBsID0gc2VsZi5maW5kX3BhcmVudHMobmFtZSwgYXR0cnMsIDEsICoqa3dhcmdzKQorICAgICAgICBpZiBsOgorICAgICAgICAgICAgciA9IGxbMF0KKyAgICAgICAgcmV0dXJuIHIKKyAgICBmaW5kUGFyZW50ID0gZmluZF9wYXJlbnQgICMgQlMzCisKKyAgICBkZWYgZmluZF9wYXJlbnRzKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIGxpbWl0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgcGFyZW50cyBvZiB0aGlzIFRhZyB0aGF0IG1hdGNoIHRoZSBnaXZlbgorICAgICAgICBjcml0ZXJpYS4iIiIKKworICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9hbGwobmFtZSwgYXR0cnMsIE5vbmUsIGxpbWl0LCBzZWxmLnBhcmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKQorICAgIGZpbmRQYXJlbnRzID0gZmluZF9wYXJlbnRzICAgIyBCUzMKKyAgICBmZXRjaFBhcmVudHMgPSBmaW5kX3BhcmVudHMgICMgQlMyCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubmV4dF9lbGVtZW50CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcHJldmlvdXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnByZXZpb3VzX2VsZW1lbnQKKworICAgICNUaGVzZSBtZXRob2RzIGRvIHRoZSByZWFsIGhlYXZ5IGxpZnRpbmcuCisKKyAgICBkZWYgX2ZpbmRfb25lKHNlbGYsIG1ldGhvZCwgbmFtZSwgYXR0cnMsIHRleHQsICoqa3dhcmdzKToKKyAgICAgICAgciA9IE5vbmUKKyAgICAgICAgbCA9IG1ldGhvZChuYW1lLCBhdHRycywgdGV4dCwgMSwgKiprd2FyZ3MpCisgICAgICAgIGlmIGw6CisgICAgICAgICAgICByID0gbFswXQorICAgICAgICByZXR1cm4gcgorCisgICAgZGVmIF9maW5kX2FsbChzZWxmLCBuYW1lLCBhdHRycywgdGV4dCwgbGltaXQsIGdlbmVyYXRvciwgKiprd2FyZ3MpOgorICAgICAgICAiSXRlcmF0ZXMgb3ZlciBhIGdlbmVyYXRvciBsb29raW5nIGZvciB0aGluZ3MgdGhhdCBtYXRjaC4iCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShuYW1lLCBTb3VwU3RyYWluZXIpOgorICAgICAgICAgICAgc3RyYWluZXIgPSBuYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdHJhaW5lciA9IFNvdXBTdHJhaW5lcihuYW1lLCBhdHRycywgdGV4dCwgKiprd2FyZ3MpCisKKyAgICAgICAgaWYgdGV4dCBpcyBOb25lIGFuZCBub3QgbGltaXQgYW5kIG5vdCBhdHRycyBhbmQgbm90IGt3YXJnczoKKyAgICAgICAgICAgIGlmIG5hbWUgaXMgVHJ1ZSBvciBuYW1lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBPcHRpbWl6YXRpb24gdG8gZmluZCBhbGwgdGFncy4KKyAgICAgICAgICAgICAgICByZXN1bHQgPSAoZWxlbWVudCBmb3IgZWxlbWVudCBpbiBnZW5lcmF0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlbGVtZW50LCBUYWcpKQorICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHRTZXQoc3RyYWluZXIsIHJlc3VsdCkKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShuYW1lLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgICAgICAjIE9wdGltaXphdGlvbiB0byBmaW5kIGFsbCB0YWdzIHdpdGggYSBnaXZlbiBuYW1lLgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IChlbGVtZW50IGZvciBlbGVtZW50IGluIGdlbmVyYXRvcgorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGVsZW1lbnQsIFRhZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZWxlbWVudC5uYW1lID09IG5hbWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdFNldChzdHJhaW5lciwgcmVzdWx0KQorICAgICAgICByZXN1bHRzID0gUmVzdWx0U2V0KHN0cmFpbmVyKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGkgPSBuZXh0KGdlbmVyYXRvcikKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBpOgorICAgICAgICAgICAgICAgIGZvdW5kID0gc3RyYWluZXIuc2VhcmNoKGkpCisgICAgICAgICAgICAgICAgaWYgZm91bmQ6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKGZvdW5kKQorICAgICAgICAgICAgICAgICAgICBpZiBsaW1pdCBhbmQgbGVuKHJlc3VsdHMpID49IGxpbWl0OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMKKworICAgICNUaGVzZSBnZW5lcmF0b3JzIGNhbiBiZSB1c2VkIHRvIG5hdmlnYXRlIHN0YXJ0aW5nIGZyb20gYm90aAorICAgICNOYXZpZ2FibGVTdHJpbmdzIGFuZCBUYWdzLgorICAgIEBwcm9wZXJ0eQorICAgIGRlZiBuZXh0X2VsZW1lbnRzKHNlbGYpOgorICAgICAgICBpID0gc2VsZi5uZXh0X2VsZW1lbnQKKyAgICAgICAgd2hpbGUgaSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHlpZWxkIGkKKyAgICAgICAgICAgIGkgPSBpLm5leHRfZWxlbWVudAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG5leHRfc2libGluZ3Moc2VsZik6CisgICAgICAgIGkgPSBzZWxmLm5leHRfc2libGluZworICAgICAgICB3aGlsZSBpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgeWllbGQgaQorICAgICAgICAgICAgaSA9IGkubmV4dF9zaWJsaW5nCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcHJldmlvdXNfZWxlbWVudHMoc2VsZik6CisgICAgICAgIGkgPSBzZWxmLnByZXZpb3VzX2VsZW1lbnQKKyAgICAgICAgd2hpbGUgaSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHlpZWxkIGkKKyAgICAgICAgICAgIGkgPSBpLnByZXZpb3VzX2VsZW1lbnQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwcmV2aW91c19zaWJsaW5ncyhzZWxmKToKKyAgICAgICAgaSA9IHNlbGYucHJldmlvdXNfc2libGluZworICAgICAgICB3aGlsZSBpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgeWllbGQgaQorICAgICAgICAgICAgaSA9IGkucHJldmlvdXNfc2libGluZworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBhcmVudHMoc2VsZik6CisgICAgICAgIGkgPSBzZWxmLnBhcmVudAorICAgICAgICB3aGlsZSBpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgeWllbGQgaQorICAgICAgICAgICAgaSA9IGkucGFyZW50CisKKyAgICAjIE1ldGhvZHMgZm9yIHN1cHBvcnRpbmcgQ1NTIHNlbGVjdG9ycy4KKworICAgIHRhZ19uYW1lX3JlID0gcmUuY29tcGlsZSgnXlthLXowLTldKyQnKQorCisgICAgIyAvXihcdyspXFsoXHcrKShbPX5cfFxeXCRcKl0/KT0/Ij8oW15cXSJdKikiP1xdJC8KKyAgICAjICAgXC0tLS8gIFwtLS0vXC0tLS0tLS0tLS0tLS0vICAgIFwtLS0tLS0tLworICAgICMgICAgIHwgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAgIHwKKyAgICAjICAgICB8ICAgICAgfCAgICAgICAgIHwgICAgICAgICAgIFRoZSB2YWx1ZQorICAgICMgICAgIHwgICAgICB8ICAgIH4sfCxeLCQsKiBvciA9CisgICAgIyAgICAgfCAgIEF0dHJpYnV0ZQorICAgICMgICAgVGFnCisgICAgYXR0cmlic2VsZWN0X3JlID0gcmUuY29tcGlsZSgKKyAgICAgICAgcideKD9QPHRhZz5cdyspP1xbKD9QPGF0dHJpYnV0ZT5cdyspKD9QPG9wZXJhdG9yPls9flx8XF5cJFwqXT8pJyArCisgICAgICAgIHInPT8iPyg/UDx2YWx1ZT5bXlxdIl0qKSI/XF0kJworICAgICAgICApCisKKyAgICBkZWYgX2F0dHJfdmFsdWVfYXNfc3RyaW5nKHNlbGYsIHZhbHVlLCBkZWZhdWx0PU5vbmUpOgorICAgICAgICAiIiJGb3JjZSBhbiBhdHRyaWJ1dGUgdmFsdWUgaW50byBhIHN0cmluZyByZXByZXNlbnRhdGlvbi4KKworICAgICAgICBBIG11bHRpLXZhbHVlZCBhdHRyaWJ1dGUgd2lsbCBiZSBjb252ZXJ0ZWQgaW50byBhCisgICAgICAgIHNwYWNlLXNlcGFyYXRlZCBzdGlybmcuCisgICAgICAgICIiIgorICAgICAgICB2YWx1ZSA9IHNlbGYuZ2V0KHZhbHVlLCBkZWZhdWx0KQorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBsaXN0KSBvciBpc2luc3RhbmNlKHZhbHVlLCB0dXBsZSk6CisgICAgICAgICAgICB2YWx1ZSA9IiAiLmpvaW4odmFsdWUpCisgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIF90YWdfbmFtZV9tYXRjaGVzX2FuZChzZWxmLCBmdW5jdGlvbiwgdGFnX25hbWUpOgorICAgICAgICBpZiBub3QgdGFnX25hbWU6CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlZiBfbWF0Y2godGFnKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdGFnLm5hbWUgPT0gdGFnX25hbWUgYW5kIGZ1bmN0aW9uKHRhZykKKyAgICAgICAgICAgIHJldHVybiBfbWF0Y2gKKworICAgIGRlZiBfYXR0cmlidXRlX2NoZWNrZXIoc2VsZiwgb3BlcmF0b3IsIGF0dHJpYnV0ZSwgdmFsdWU9JycpOgorICAgICAgICAiIiJDcmVhdGUgYSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGEgQ1NTIHNlbGVjdG9yIG9wZXJhdGlvbi4KKworICAgICAgICBUYWtlcyBhbiBvcGVyYXRvciwgYXR0cmlidXRlIGFuZCBvcHRpb25hbCB2YWx1ZS4gUmV0dXJucyBhCisgICAgICAgIGZ1bmN0aW9uIHRoYXQgd2lsbCByZXR1cm4gVHJ1ZSBmb3IgZWxlbWVudHMgdGhhdCBtYXRjaCB0aGF0CisgICAgICAgIGNvbWJpbmF0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgb3BlcmF0b3IgPT0gJz0nOgorICAgICAgICAgICAgIyBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYGF0dHJpYnV0ZWAgaXMgZXF1YWwgdG8gYHZhbHVlYAorICAgICAgICAgICAgcmV0dXJuIGxhbWJkYSBlbDogZWwuX2F0dHJfdmFsdWVfYXNfc3RyaW5nKGF0dHJpYnV0ZSkgPT0gdmFsdWUKKyAgICAgICAgZWxpZiBvcGVyYXRvciA9PSAnfic6CisgICAgICAgICAgICAjIHNwYWNlLXNlcGFyYXRlZCBsaXN0IHJlcHJlc2VudGF0aW9uIG9mIGBhdHRyaWJ1dGVgCisgICAgICAgICAgICAjIGNvbnRhaW5zIGB2YWx1ZWAKKyAgICAgICAgICAgIGRlZiBfaW5jbHVkZXNfdmFsdWUoZWxlbWVudCk6CisgICAgICAgICAgICAgICAgYXR0cmlidXRlX3ZhbHVlID0gZWxlbWVudC5nZXQoYXR0cmlidXRlLCBbXSkKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhdHRyaWJ1dGVfdmFsdWUsIGxpc3QpOgorICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVfdmFsdWUgPSBhdHRyaWJ1dGVfdmFsdWUuc3BsaXQoKQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSBpbiBhdHRyaWJ1dGVfdmFsdWUKKyAgICAgICAgICAgIHJldHVybiBfaW5jbHVkZXNfdmFsdWUKKyAgICAgICAgZWxpZiBvcGVyYXRvciA9PSAnXic6CisgICAgICAgICAgICAjIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBgYXR0cmlidXRlYCBzdGFydHMgd2l0aCBgdmFsdWVgCisgICAgICAgICAgICByZXR1cm4gbGFtYmRhIGVsOiBlbC5fYXR0cl92YWx1ZV9hc19zdHJpbmcoCisgICAgICAgICAgICAgICAgYXR0cmlidXRlLCAnJykuc3RhcnRzd2l0aCh2YWx1ZSkKKyAgICAgICAgZWxpZiBvcGVyYXRvciA9PSAnJCc6CisgICAgICAgICAgICAjIHN0cmluZyByZXByZXNlbmF0aW9uIG9mIGBhdHRyaWJ1dGVgIGVuZHMgd2l0aCBgdmFsdWVgCisgICAgICAgICAgICByZXR1cm4gbGFtYmRhIGVsOiBlbC5fYXR0cl92YWx1ZV9hc19zdHJpbmcoCisgICAgICAgICAgICAgICAgYXR0cmlidXRlLCAnJykuZW5kc3dpdGgodmFsdWUpCisgICAgICAgIGVsaWYgb3BlcmF0b3IgPT0gJyonOgorICAgICAgICAgICAgIyBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYGF0dHJpYnV0ZWAgY29udGFpbnMgYHZhbHVlYAorICAgICAgICAgICAgcmV0dXJuIGxhbWJkYSBlbDogdmFsdWUgaW4gZWwuX2F0dHJfdmFsdWVfYXNfc3RyaW5nKGF0dHJpYnV0ZSwgJycpCisgICAgICAgIGVsaWYgb3BlcmF0b3IgPT0gJ3wnOgorICAgICAgICAgICAgIyBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYGF0dHJpYnV0ZWAgaXMgZWl0aGVyIGV4YWN0bHkKKyAgICAgICAgICAgICMgYHZhbHVlYCBvciBzdGFydHMgd2l0aCBgdmFsdWVgIGFuZCB0aGVuIGEgZGFzaC4KKyAgICAgICAgICAgIGRlZiBfaXNfb3Jfc3RhcnRzX3dpdGhfZGFzaChlbGVtZW50KToKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVfdmFsdWUgPSBlbGVtZW50Ll9hdHRyX3ZhbHVlX2FzX3N0cmluZyhhdHRyaWJ1dGUsICcnKQorICAgICAgICAgICAgICAgIHJldHVybiAoYXR0cmlidXRlX3ZhbHVlID09IHZhbHVlIG9yIGF0dHJpYnV0ZV92YWx1ZS5zdGFydHN3aXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKyAnLScpKQorICAgICAgICAgICAgcmV0dXJuIF9pc19vcl9zdGFydHNfd2l0aF9kYXNoCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gbGFtYmRhIGVsOiBlbC5oYXNfYXR0cihhdHRyaWJ1dGUpCisKKyAgICAjIE9sZCBub24tcHJvcGVydHkgdmVyc2lvbnMgb2YgdGhlIGdlbmVyYXRvcnMsIGZvciBiYWNrd2FyZHMKKyAgICAjIGNvbXBhdGliaWxpdHkgd2l0aCBCUzMuCisgICAgZGVmIG5leHRHZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm5leHRfZWxlbWVudHMKKworICAgIGRlZiBuZXh0U2libGluZ0dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubmV4dF9zaWJsaW5ncworCisgICAgZGVmIHByZXZpb3VzR2VuZXJhdG9yKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5wcmV2aW91c19lbGVtZW50cworCisgICAgZGVmIHByZXZpb3VzU2libGluZ0dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucHJldmlvdXNfc2libGluZ3MKKworICAgIGRlZiBwYXJlbnRHZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnBhcmVudHMKKworCitjbGFzcyBOYXZpZ2FibGVTdHJpbmcodW5pY29kZSwgUGFnZUVsZW1lbnQpOgorCisgICAgUFJFRklYID0gJycKKyAgICBTVUZGSVggPSAnJworCisgICAgZGVmIF9fbmV3X18oY2xzLCB2YWx1ZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBOYXZpZ2FibGVTdHJpbmcuCisKKyAgICAgICAgV2hlbiB1bnBpY2tsaW5nIGEgTmF2aWdhYmxlU3RyaW5nLCB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgd2l0aAorICAgICAgICB0aGUgc3RyaW5nIGluIERFRkFVTFRfT1VUUFVUX0VOQ09ESU5HLiBUaGF0IGVuY29kaW5nIG5lZWRzIHRvIGJlCisgICAgICAgIHBhc3NlZCBpbiB0byB0aGUgc3VwZXJjbGFzcydzIF9fbmV3X18gb3IgdGhlIHN1cGVyY2xhc3Mgd29uJ3Qga25vdworICAgICAgICBob3cgdG8gaGFuZGxlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgdW5pY29kZSk6CisgICAgICAgICAgICByZXR1cm4gdW5pY29kZS5fX25ld19fKGNscywgdmFsdWUpCisgICAgICAgIHJldHVybiB1bmljb2RlLl9fbmV3X18oY2xzLCB2YWx1ZSwgREVGQVVMVF9PVVRQVVRfRU5DT0RJTkcpCisKKyAgICBkZWYgX19jb3B5X18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19nZXRuZXdhcmdzX18oc2VsZik6CisgICAgICAgIHJldHVybiAodW5pY29kZShzZWxmKSwpCisKKyAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6CisgICAgICAgICIiInRleHQuc3RyaW5nIGdpdmVzIHlvdSB0ZXh0LiBUaGlzIGlzIGZvciBiYWNrd2FyZHMKKyAgICAgICAgY29tcGF0aWJpbGl0eSBmb3IgTmF2aWdhYmxlKlN0cmluZywgYnV0IGZvciBDRGF0YSogaXQgbGV0cyB5b3UKKyAgICAgICAgZ2V0IHRoZSBzdHJpbmcgd2l0aG91dCB0aGUgQ0RhdGEgd3JhcHBlci4iIiIKKyAgICAgICAgaWYgYXR0ciA9PSAnc3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigKKyAgICAgICAgICAgICAgICAiJyVzJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnJXMnIiAlICgKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIGF0dHIpKQorCisgICAgZGVmIG91dHB1dF9yZWFkeShzZWxmLCBmb3JtYXR0ZXI9Im1pbmltYWwiKToKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5mb3JtYXRfc3RyaW5nKHNlbGYsIGZvcm1hdHRlcikKKyAgICAgICAgcmV0dXJuIHNlbGYuUFJFRklYICsgb3V0cHV0ICsgc2VsZi5TVUZGSVgKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgQG5hbWUuc2V0dGVyCisgICAgZGVmIG5hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJBIE5hdmlnYWJsZVN0cmluZyBjYW5ub3QgYmUgZ2l2ZW4gYSBuYW1lLiIpCisKK2NsYXNzIFByZWZvcm1hdHRlZFN0cmluZyhOYXZpZ2FibGVTdHJpbmcpOgorICAgICIiIkEgTmF2aWdhYmxlU3RyaW5nIG5vdCBzdWJqZWN0IHRvIHRoZSBub3JtYWwgZm9ybWF0dGluZyBydWxlcy4KKworICAgIFRoZSBzdHJpbmcgd2lsbCBiZSBwYXNzZWQgaW50byB0aGUgZm9ybWF0dGVyICh0byB0cmlnZ2VyIHNpZGUgZWZmZWN0cyksCisgICAgYnV0IHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBpZ25vcmVkLgorICAgICIiIgorCisgICAgZGVmIG91dHB1dF9yZWFkeShzZWxmLCBmb3JtYXR0ZXI9Im1pbmltYWwiKToKKyAgICAgICAgIiIiQ0RhdGEgc3RyaW5ncyBhcmUgcGFzc2VkIGludG8gdGhlIGZvcm1hdHRlci4KKyAgICAgICAgQnV0IHRoZSByZXR1cm4gdmFsdWUgaXMgaWdub3JlZC4iIiIKKyAgICAgICAgc2VsZi5mb3JtYXRfc3RyaW5nKHNlbGYsIGZvcm1hdHRlcikKKyAgICAgICAgcmV0dXJuIHNlbGYuUFJFRklYICsgc2VsZiArIHNlbGYuU1VGRklYCisKK2NsYXNzIENEYXRhKFByZWZvcm1hdHRlZFN0cmluZyk6CisKKyAgICBQUkVGSVggPSB1JzwhW0NEQVRBWycKKyAgICBTVUZGSVggPSB1J11dPicKKworY2xhc3MgUHJvY2Vzc2luZ0luc3RydWN0aW9uKFByZWZvcm1hdHRlZFN0cmluZyk6CisKKyAgICBQUkVGSVggPSB1Jzw/JworICAgIFNVRkZJWCA9IHUnPz4nCisKK2NsYXNzIENvbW1lbnQoUHJlZm9ybWF0dGVkU3RyaW5nKToKKworICAgIFBSRUZJWCA9IHUnPCEtLScKKyAgICBTVUZGSVggPSB1Jy0tPicKKworCitjbGFzcyBEZWNsYXJhdGlvbihQcmVmb3JtYXR0ZWRTdHJpbmcpOgorICAgIFBSRUZJWCA9IHUnPCEnCisgICAgU1VGRklYID0gdSchPicKKworCitjbGFzcyBEb2N0eXBlKFByZWZvcm1hdHRlZFN0cmluZyk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZm9yX25hbWVfYW5kX2lkcyhjbHMsIG5hbWUsIHB1Yl9pZCwgc3lzdGVtX2lkKToKKyAgICAgICAgdmFsdWUgPSBuYW1lIG9yICcnCisgICAgICAgIGlmIHB1Yl9pZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHZhbHVlICs9ICcgUFVCTElDICIlcyInICUgcHViX2lkCisgICAgICAgICAgICBpZiBzeXN0ZW1faWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdmFsdWUgKz0gJyAiJXMiJyAlIHN5c3RlbV9pZAorICAgICAgICBlbGlmIHN5c3RlbV9pZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHZhbHVlICs9ICcgU1lTVEVNICIlcyInICUgc3lzdGVtX2lkCisKKyAgICAgICAgcmV0dXJuIERvY3R5cGUodmFsdWUpCisKKyAgICBQUkVGSVggPSB1JzwhRE9DVFlQRSAnCisgICAgU1VGRklYID0gdSc+XG4nCisKKworY2xhc3MgVGFnKFBhZ2VFbGVtZW50KToKKworICAgICIiIlJlcHJlc2VudHMgYSBmb3VuZCBIVE1MIHRhZyB3aXRoIGl0cyBhdHRyaWJ1dGVzIGFuZCBjb250ZW50cy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJzZXI9Tm9uZSwgYnVpbGRlcj1Ob25lLCBuYW1lPU5vbmUsIG5hbWVzcGFjZT1Ob25lLAorICAgICAgICAgICAgICAgICBwcmVmaXg9Tm9uZSwgYXR0cnM9Tm9uZSwgcGFyZW50PU5vbmUsIHByZXZpb3VzPU5vbmUpOgorICAgICAgICAiQmFzaWMgY29uc3RydWN0b3IuIgorCisgICAgICAgIGlmIHBhcnNlciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5wYXJzZXJfY2xhc3MgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFdlIGRvbid0IGFjdHVhbGx5IHN0b3JlIHRoZSBwYXJzZXIgb2JqZWN0OiB0aGF0IGxldHMgZXh0cmFjdGVkCisgICAgICAgICAgICAjIGNodW5rcyBiZSBnYXJiYWdlLWNvbGxlY3RlZC4KKyAgICAgICAgICAgIHNlbGYucGFyc2VyX2NsYXNzID0gcGFyc2VyLl9fY2xhc3NfXworICAgICAgICBpZiBuYW1lIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJObyB2YWx1ZSBwcm92aWRlZCBmb3IgbmV3IHRhZydzIG5hbWUuIikKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLm5hbWVzcGFjZSA9IG5hbWVzcGFjZQorICAgICAgICBzZWxmLnByZWZpeCA9IHByZWZpeAorICAgICAgICBpZiBhdHRycyBpcyBOb25lOgorICAgICAgICAgICAgYXR0cnMgPSB7fQorICAgICAgICBlbGlmIGF0dHJzIGFuZCBidWlsZGVyLmNkYXRhX2xpc3RfYXR0cmlidXRlczoKKyAgICAgICAgICAgIGF0dHJzID0gYnVpbGRlci5fcmVwbGFjZV9jZGF0YV9saXN0X2F0dHJpYnV0ZV92YWx1ZXMoCisgICAgICAgICAgICAgICAgc2VsZi5uYW1lLCBhdHRycykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGF0dHJzID0gZGljdChhdHRycykKKyAgICAgICAgc2VsZi5hdHRycyA9IGF0dHJzCisgICAgICAgIHNlbGYuY29udGVudHMgPSBbXQorICAgICAgICBzZWxmLnNldHVwKHBhcmVudCwgcHJldmlvdXMpCisgICAgICAgIHNlbGYuaGlkZGVuID0gRmFsc2UKKworICAgICAgICAjIFNldCB1cCBhbnkgc3Vic3RpdHV0aW9ucywgc3VjaCBhcyB0aGUgY2hhcnNldCBpbiBhIE1FVEEgdGFnLgorICAgICAgICBpZiBidWlsZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYnVpbGRlci5zZXRfdXBfc3Vic3RpdHV0aW9ucyhzZWxmKQorICAgICAgICAgICAgc2VsZi5jYW5fYmVfZW1wdHlfZWxlbWVudCA9IGJ1aWxkZXIuY2FuX2JlX2VtcHR5X2VsZW1lbnQobmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY2FuX2JlX2VtcHR5X2VsZW1lbnQgPSBGYWxzZQorCisgICAgcGFyc2VyQ2xhc3MgPSBfYWxpYXMoInBhcnNlcl9jbGFzcyIpICAjIEJTMworCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX2VtcHR5X2VsZW1lbnQoc2VsZik6CisgICAgICAgICIiIklzIHRoaXMgdGFnIGFuIGVtcHR5LWVsZW1lbnQgdGFnPyAoYWthIGEgc2VsZi1jbG9zaW5nIHRhZykKKworICAgICAgICBBIHRhZyB0aGF0IGhhcyBjb250ZW50cyBpcyBuZXZlciBhbiBlbXB0eS1lbGVtZW50IHRhZy4KKworICAgICAgICBBIHRhZyB0aGF0IGhhcyBubyBjb250ZW50cyBtYXkgb3IgbWF5IG5vdCBiZSBhbiBlbXB0eS1lbGVtZW50CisgICAgICAgIHRhZy4gSXQgZGVwZW5kcyBvbiB0aGUgYnVpbGRlciB1c2VkIHRvIGNyZWF0ZSB0aGUgdGFnLiBJZiB0aGUKKyAgICAgICAgYnVpbGRlciBoYXMgYSBkZXNpZ25hdGVkIGxpc3Qgb2YgZW1wdHktZWxlbWVudCB0YWdzLCB0aGVuIG9ubHkKKyAgICAgICAgYSB0YWcgd2hvc2UgbmFtZSBzaG93cyB1cCBpbiB0aGF0IGxpc3QgaXMgY29uc2lkZXJlZCBhbgorICAgICAgICBlbXB0eS1lbGVtZW50IHRhZy4KKworICAgICAgICBJZiB0aGUgYnVpbGRlciBoYXMgbm8gZGVzaWduYXRlZCBsaXN0IG9mIGVtcHR5LWVsZW1lbnQgdGFncywKKyAgICAgICAgdGhlbiBhbnkgdGFnIHdpdGggbm8gY29udGVudHMgaXMgYW4gZW1wdHktZWxlbWVudCB0YWcuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuY29udGVudHMpID09IDAgYW5kIHNlbGYuY2FuX2JlX2VtcHR5X2VsZW1lbnQKKyAgICBpc1NlbGZDbG9zaW5nID0gaXNfZW1wdHlfZWxlbWVudCAgIyBCUzMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzdHJpbmcoc2VsZik6CisgICAgICAgICIiIkNvbnZlbmllbmNlIHByb3BlcnR5IHRvIGdldCB0aGUgc2luZ2xlIHN0cmluZyB3aXRoaW4gdGhpcyB0YWcuCisKKyAgICAgICAgOlJldHVybjogSWYgdGhpcyB0YWcgaGFzIGEgc2luZ2xlIHN0cmluZyBjaGlsZCwgcmV0dXJuIHZhbHVlCisgICAgICAgICBpcyB0aGF0IHN0cmluZy4gSWYgdGhpcyB0YWcgaGFzIG5vIGNoaWxkcmVuLCBvciBtb3JlIHRoYW4gb25lCisgICAgICAgICBjaGlsZCwgcmV0dXJuIHZhbHVlIGlzIE5vbmUuIElmIHRoaXMgdGFnIGhhcyBvbmUgY2hpbGQgdGFnLAorICAgICAgICAgcmV0dXJuIHZhbHVlIGlzIHRoZSAnc3RyaW5nJyBhdHRyaWJ1dGUgb2YgdGhlIGNoaWxkIHRhZywKKyAgICAgICAgIHJlY3Vyc2l2ZWx5LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbGVuKHNlbGYuY29udGVudHMpICE9IDE6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBjaGlsZCA9IHNlbGYuY29udGVudHNbMF0KKyAgICAgICAgaWYgaXNpbnN0YW5jZShjaGlsZCwgTmF2aWdhYmxlU3RyaW5nKToKKyAgICAgICAgICAgIHJldHVybiBjaGlsZAorICAgICAgICByZXR1cm4gY2hpbGQuc3RyaW5nCisKKyAgICBAc3RyaW5nLnNldHRlcgorICAgIGRlZiBzdHJpbmcoc2VsZiwgc3RyaW5nKToKKyAgICAgICAgc2VsZi5jbGVhcigpCisgICAgICAgIHNlbGYuYXBwZW5kKHN0cmluZy5fX2NsYXNzX18oc3RyaW5nKSkKKworICAgIGRlZiBfYWxsX3N0cmluZ3Moc2VsZiwgc3RyaXA9RmFsc2UsIHR5cGVzPShOYXZpZ2FibGVTdHJpbmcsIENEYXRhKSk6CisgICAgICAgICIiIllpZWxkIGFsbCBzdHJpbmdzIG9mIGNlcnRhaW4gY2xhc3NlcywgcG9zc2libHkgc3RyaXBwaW5nIHRoZW0uCisKKyAgICAgICAgQnkgZGVmYXVsdCwgeWllbGRzIG9ubHkgTmF2aWdhYmxlU3RyaW5nIGFuZCBDRGF0YSBvYmplY3RzLiBTbworICAgICAgICBubyBjb21tZW50cywgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMsIGV0Yy4KKyAgICAgICAgIiIiCisgICAgICAgIGZvciBkZXNjZW5kYW50IGluIHNlbGYuZGVzY2VuZGFudHM6CisgICAgICAgICAgICBpZiAoCisgICAgICAgICAgICAgICAgKHR5cGVzIGlzIE5vbmUgYW5kIG5vdCBpc2luc3RhbmNlKGRlc2NlbmRhbnQsIE5hdmlnYWJsZVN0cmluZykpCisgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAodHlwZXMgaXMgbm90IE5vbmUgYW5kIHR5cGUoZGVzY2VuZGFudCkgbm90IGluIHR5cGVzKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHN0cmlwOgorICAgICAgICAgICAgICAgIGRlc2NlbmRhbnQgPSBkZXNjZW5kYW50LnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBsZW4oZGVzY2VuZGFudCkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHlpZWxkIGRlc2NlbmRhbnQKKworICAgIHN0cmluZ3MgPSBwcm9wZXJ0eShfYWxsX3N0cmluZ3MpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc3RyaXBwZWRfc3RyaW5ncyhzZWxmKToKKyAgICAgICAgZm9yIHN0cmluZyBpbiBzZWxmLl9hbGxfc3RyaW5ncyhUcnVlKToKKyAgICAgICAgICAgIHlpZWxkIHN0cmluZworCisgICAgZGVmIGdldF90ZXh0KHNlbGYsIHNlcGFyYXRvcj11IiIsIHN0cmlwPUZhbHNlLAorICAgICAgICAgICAgICAgICB0eXBlcz0oTmF2aWdhYmxlU3RyaW5nLCBDRGF0YSkpOgorICAgICAgICAiIiIKKyAgICAgICAgR2V0IGFsbCBjaGlsZCBzdHJpbmdzLCBjb25jYXRlbmF0ZWQgdXNpbmcgdGhlIGdpdmVuIHNlcGFyYXRvci4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZXBhcmF0b3Iuam9pbihbcyBmb3IgcyBpbiBzZWxmLl9hbGxfc3RyaW5ncygKKyAgICAgICAgICAgICAgICAgICAgc3RyaXAsIHR5cGVzPXR5cGVzKV0pCisgICAgZ2V0VGV4dCA9IGdldF90ZXh0CisgICAgdGV4dCA9IHByb3BlcnR5KGdldF90ZXh0KQorCisgICAgZGVmIGRlY29tcG9zZShzZWxmKToKKyAgICAgICAgIiIiUmVjdXJzaXZlbHkgZGVzdHJveXMgdGhlIGNvbnRlbnRzIG9mIHRoaXMgdHJlZS4iIiIKKyAgICAgICAgc2VsZi5leHRyYWN0KCkKKyAgICAgICAgaSA9IHNlbGYKKyAgICAgICAgd2hpbGUgaSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG5leHQgPSBpLm5leHRfZWxlbWVudAorICAgICAgICAgICAgaS5fX2RpY3RfXy5jbGVhcigpCisgICAgICAgICAgICBpLmNvbnRlbnRzID0gW10KKyAgICAgICAgICAgIGkgPSBuZXh0CisKKyAgICBkZWYgY2xlYXIoc2VsZiwgZGVjb21wb3NlPUZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIEV4dHJhY3QgYWxsIGNoaWxkcmVuLiBJZiBkZWNvbXBvc2UgaXMgVHJ1ZSwgZGVjb21wb3NlIGluc3RlYWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBkZWNvbXBvc2U6CisgICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBzZWxmLmNvbnRlbnRzWzpdOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZWxlbWVudCwgVGFnKToKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5kZWNvbXBvc2UoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZXh0cmFjdCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBzZWxmLmNvbnRlbnRzWzpdOgorICAgICAgICAgICAgICAgIGVsZW1lbnQuZXh0cmFjdCgpCisKKyAgICBkZWYgaW5kZXgoc2VsZiwgZWxlbWVudCk6CisgICAgICAgICIiIgorICAgICAgICBGaW5kIHRoZSBpbmRleCBvZiBhIGNoaWxkIGJ5IGlkZW50aXR5LCBub3QgdmFsdWUuIEF2b2lkcyBpc3N1ZXMgd2l0aAorICAgICAgICB0YWcuY29udGVudHMuaW5kZXgoZWxlbWVudCkgZ2V0dGluZyB0aGUgaW5kZXggb2YgZXF1YWwgZWxlbWVudHMuCisgICAgICAgICIiIgorICAgICAgICBmb3IgaSwgY2hpbGQgaW4gZW51bWVyYXRlKHNlbGYuY29udGVudHMpOgorICAgICAgICAgICAgaWYgY2hpbGQgaXMgZWxlbWVudDoKKyAgICAgICAgICAgICAgICByZXR1cm4gaQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJUYWcuaW5kZXg6IGVsZW1lbnQgbm90IGluIHRhZyIpCisKKyAgICBkZWYgZ2V0KHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICdrZXknIGF0dHJpYnV0ZSBmb3IgdGhlIHRhZywgb3IKKyAgICAgICAgdGhlIHZhbHVlIGdpdmVuIGZvciAnZGVmYXVsdCcgaWYgaXQgZG9lc24ndCBoYXZlIHRoYXQKKyAgICAgICAgYXR0cmlidXRlLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5hdHRycy5nZXQoa2V5LCBkZWZhdWx0KQorCisgICAgZGVmIGhhc19hdHRyKHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBrZXkgaW4gc2VsZi5hdHRycworCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc3RyKHNlbGYpLl9faGFzaF9fKCkKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAiIiJ0YWdba2V5XSByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJ2tleScgYXR0cmlidXRlIGZvciB0aGUgdGFnLAorICAgICAgICBhbmQgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiBpdCdzIG5vdCB0aGVyZS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuYXR0cnNba2V5XQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAiSXRlcmF0aW5nIG92ZXIgYSB0YWcgaXRlcmF0ZXMgb3ZlciBpdHMgY29udGVudHMuIgorICAgICAgICByZXR1cm4gaXRlcihzZWxmLmNvbnRlbnRzKQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICJUaGUgbGVuZ3RoIG9mIGEgdGFnIGlzIHRoZSBsZW5ndGggb2YgaXRzIGxpc3Qgb2YgY29udGVudHMuIgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuY29udGVudHMpCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHgpOgorICAgICAgICByZXR1cm4geCBpbiBzZWxmLmNvbnRlbnRzCisKKyAgICBkZWYgX19ub256ZXJvX18oc2VsZik6CisgICAgICAgICJBIHRhZyBpcyBub24tTm9uZSBldmVuIGlmIGl0IGhhcyBubyBjb250ZW50cy4iCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgICIiIlNldHRpbmcgdGFnW2tleV0gc2V0cyB0aGUgdmFsdWUgb2YgdGhlICdrZXknIGF0dHJpYnV0ZSBmb3IgdGhlCisgICAgICAgIHRhZy4iIiIKKyAgICAgICAgc2VsZi5hdHRyc1trZXldID0gdmFsdWUKKworICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAiRGVsZXRpbmcgdGFnW2tleV0gZGVsZXRlcyBhbGwgJ2tleScgYXR0cmlidXRlcyBmb3IgdGhlIHRhZy4iCisgICAgICAgIHNlbGYuYXR0cnMucG9wKGtleSwgTm9uZSkKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJDYWxsaW5nIGEgdGFnIGxpa2UgYSBmdW5jdGlvbiBpcyB0aGUgc2FtZSBhcyBjYWxsaW5nIGl0cworICAgICAgICBmaW5kX2FsbCgpIG1ldGhvZC4gRWcuIHRhZygnYScpIHJldHVybnMgYSBsaXN0IG9mIGFsbCB0aGUgQSB0YWdzCisgICAgICAgIGZvdW5kIHdpdGhpbiB0aGlzIHRhZy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZmluZF9hbGwoKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIHRhZyk6CisgICAgICAgICNwcmludCAiR2V0YXR0ciAlcy4lcyIgJSAoc2VsZi5fX2NsYXNzX18sIHRhZykKKyAgICAgICAgaWYgbGVuKHRhZykgPiAzIGFuZCB0YWcuZW5kc3dpdGgoJ1RhZycpOgorICAgICAgICAgICAgIyBCUzM6IHNvdXAuYVRhZyAtPiAic291cC5maW5kKCJhIikKKyAgICAgICAgICAgIHRhZ19uYW1lID0gdGFnWzotM10KKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAgICAgJy4lc1RhZyBpcyBkZXByZWNhdGVkLCB1c2UgLmZpbmQoIiVzIikgaW5zdGVhZC4nICUgKAorICAgICAgICAgICAgICAgICAgICB0YWdfbmFtZSwgdGFnX25hbWUpKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmluZCh0YWdfbmFtZSkKKyAgICAgICAgIyBXZSBzcGVjaWFsIGNhc2UgY29udGVudHMgdG8gYXZvaWQgcmVjdXJzaW9uLgorICAgICAgICBlbGlmIG5vdCB0YWcuc3RhcnRzd2l0aCgiX18iKSBhbmQgbm90IHRhZz09ImNvbnRlbnRzIjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbmQodGFnKQorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigKKyAgICAgICAgICAgICInJXMnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICclcyciICUgKHNlbGYuX19jbGFzc19fLCB0YWcpKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICIiIlJldHVybnMgdHJ1ZSBpZmYgdGhpcyB0YWcgaGFzIHRoZSBzYW1lIG5hbWUsIHRoZSBzYW1lIGF0dHJpYnV0ZXMsCisgICAgICAgIGFuZCB0aGUgc2FtZSBjb250ZW50cyAocmVjdXJzaXZlbHkpIGFzIHRoZSBnaXZlbiB0YWcuIiIiCisgICAgICAgIGlmIHNlbGYgaXMgb3RoZXI6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiAobm90IGhhc2F0dHIob3RoZXIsICduYW1lJykgb3IKKyAgICAgICAgICAgIG5vdCBoYXNhdHRyKG90aGVyLCAnYXR0cnMnKSBvcgorICAgICAgICAgICAgbm90IGhhc2F0dHIob3RoZXIsICdjb250ZW50cycpIG9yCisgICAgICAgICAgICBzZWxmLm5hbWUgIT0gb3RoZXIubmFtZSBvcgorICAgICAgICAgICAgc2VsZi5hdHRycyAhPSBvdGhlci5hdHRycyBvcgorICAgICAgICAgICAgbGVuKHNlbGYpICE9IGxlbihvdGhlcikpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGZvciBpLCBteV9jaGlsZCBpbiBlbnVtZXJhdGUoc2VsZi5jb250ZW50cyk6CisgICAgICAgICAgICBpZiBteV9jaGlsZCAhPSBvdGhlci5jb250ZW50c1tpXToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWZmIHRoaXMgdGFnIGlzIG5vdCBpZGVudGljYWwgdG8gdGhlIG90aGVyIHRhZywKKyAgICAgICAgYXMgZGVmaW5lZCBpbiBfX2VxX18uIiIiCisgICAgICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYsIGVuY29kaW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HKToKKyAgICAgICAgIiIiUmVuZGVycyB0aGlzIHRhZyBhcyBhIHN0cmluZy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZW5jb2RlKGVuY29kaW5nKQorCisgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5kZWNvZGUoKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmVuY29kZSgpCisKKyAgICBpZiBQWTNLOgorICAgICAgICBfX3N0cl9fID0gX19yZXByX18gPSBfX3VuaWNvZGVfXworCisgICAgZGVmIGVuY29kZShzZWxmLCBlbmNvZGluZz1ERUZBVUxUX09VVFBVVF9FTkNPRElORywKKyAgICAgICAgICAgICAgIGluZGVudF9sZXZlbD1Ob25lLCBmb3JtYXR0ZXI9Im1pbmltYWwiLAorICAgICAgICAgICAgICAgZXJyb3JzPSJ4bWxjaGFycmVmcmVwbGFjZSIpOgorICAgICAgICAjIFR1cm4gdGhlIGRhdGEgc3RydWN0dXJlIGludG8gVW5pY29kZSwgdGhlbiBlbmNvZGUgdGhlCisgICAgICAgICMgVW5pY29kZS4KKyAgICAgICAgdSA9IHNlbGYuZGVjb2RlKGluZGVudF9sZXZlbCwgZW5jb2RpbmcsIGZvcm1hdHRlcikKKyAgICAgICAgcmV0dXJuIHUuZW5jb2RlKGVuY29kaW5nLCBlcnJvcnMpCisKKyAgICBkZWYgX3Nob3VsZF9wcmV0dHlfcHJpbnQoc2VsZiwgaW5kZW50X2xldmVsKToKKyAgICAgICAgIiIiU2hvdWxkIHRoaXMgdGFnIGJlIHByZXR0eS1wcmludGVkPyIiIgorICAgICAgICByZXR1cm4gKAorICAgICAgICAgICAgaW5kZW50X2xldmVsIGlzIG5vdCBOb25lIGFuZAorICAgICAgICAgICAgKHNlbGYubmFtZSBub3QgaW4gSFRNTEF3YXJlRW50aXR5U3Vic3RpdHV0aW9uLnByZWZvcm1hdHRlZF90YWdzCisgICAgICAgICAgICAgb3Igc2VsZi5faXNfeG1sKSkKKworICAgIGRlZiBkZWNvZGUoc2VsZiwgaW5kZW50X2xldmVsPU5vbmUsCisgICAgICAgICAgICAgICBldmVudHVhbF9lbmNvZGluZz1ERUZBVUxUX09VVFBVVF9FTkNPRElORywKKyAgICAgICAgICAgICAgIGZvcm1hdHRlcj0ibWluaW1hbCIpOgorICAgICAgICAiIiJSZXR1cm5zIGEgVW5pY29kZSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHRhZyBhbmQgaXRzIGNvbnRlbnRzLgorCisgICAgICAgIDpwYXJhbSBldmVudHVhbF9lbmNvZGluZzogVGhlIHRhZyBpcyBkZXN0aW5lZCB0byBiZQorICAgICAgICAgICBlbmNvZGVkIGludG8gdGhpcyBlbmNvZGluZy4gVGhpcyBtZXRob2QgaXMgX25vdF8KKyAgICAgICAgICAgcmVzcG9uc2libGUgZm9yIHBlcmZvcm1pbmcgdGhhdCBlbmNvZGluZy4gVGhpcyBpbmZvcm1hdGlvbgorICAgICAgICAgICBpcyBwYXNzZWQgaW4gc28gdGhhdCBpdCBjYW4gYmUgc3Vic3RpdHV0ZWQgaW4gaWYgdGhlCisgICAgICAgICAgIGRvY3VtZW50IGNvbnRhaW5zIGEgPE1FVEE+IHRhZyB0aGF0IG1lbnRpb25zIHRoZSBkb2N1bWVudCdzCisgICAgICAgICAgIGVuY29kaW5nLgorICAgICAgICAiIiIKKworICAgICAgICAjIEZpcnN0IG9mZiwgdHVybiBhIHN0cmluZyBmb3JtYXR0ZXIgaW50byBhIGZ1bmN0aW9uLiBUaGlzCisgICAgICAgICMgd2lsbCBzdG9wIHRoZSBsb29rdXAgZnJvbSBoYXBwZW5pbmcgb3ZlciBhbmQgb3ZlciBhZ2Fpbi4KKyAgICAgICAgaWYgbm90IGNhbGxhYmxlKGZvcm1hdHRlcik6CisgICAgICAgICAgICBmb3JtYXR0ZXIgPSBzZWxmLl9mb3JtYXR0ZXJfZm9yX25hbWUoZm9ybWF0dGVyKQorCisgICAgICAgIGF0dHJzID0gW10KKyAgICAgICAgaWYgc2VsZi5hdHRyczoKKyAgICAgICAgICAgIGZvciBrZXksIHZhbCBpbiBzb3J0ZWQoc2VsZi5hdHRycy5pdGVtcygpKToKKyAgICAgICAgICAgICAgICBpZiB2YWwgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgZGVjb2RlZCA9IGtleQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsLCBsaXN0KSBvciBpc2luc3RhbmNlKHZhbCwgdHVwbGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gJyAnLmpvaW4odmFsKQorICAgICAgICAgICAgICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKHZhbCwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB1bmljb2RlKHZhbCkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiAoCisgICAgICAgICAgICAgICAgICAgICAgICBpc2luc3RhbmNlKHZhbCwgQXR0cmlidXRlVmFsdWVXaXRoQ2hhcnNldFN1YnN0aXR1dGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBldmVudHVhbF9lbmNvZGluZyBpcyBub3QgTm9uZSk6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwuZW5jb2RlKGV2ZW50dWFsX2VuY29kaW5nKQorCisgICAgICAgICAgICAgICAgICAgIHRleHQgPSBzZWxmLmZvcm1hdF9zdHJpbmcodmFsLCBmb3JtYXR0ZXIpCisgICAgICAgICAgICAgICAgICAgIGRlY29kZWQgPSAoCisgICAgICAgICAgICAgICAgICAgICAgICB1bmljb2RlKGtleSkgKyAnPScKKyAgICAgICAgICAgICAgICAgICAgICAgICsgRW50aXR5U3Vic3RpdHV0aW9uLnF1b3RlZF9hdHRyaWJ1dGVfdmFsdWUodGV4dCkpCisgICAgICAgICAgICAgICAgYXR0cnMuYXBwZW5kKGRlY29kZWQpCisgICAgICAgIGNsb3NlID0gJycKKyAgICAgICAgY2xvc2VUYWcgPSAnJworCisgICAgICAgIHByZWZpeCA9ICcnCisgICAgICAgIGlmIHNlbGYucHJlZml4OgorICAgICAgICAgICAgcHJlZml4ID0gc2VsZi5wcmVmaXggKyAiOiIKKworICAgICAgICBpZiBzZWxmLmlzX2VtcHR5X2VsZW1lbnQ6CisgICAgICAgICAgICBjbG9zZSA9ICcvJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2xvc2VUYWcgPSAnPC8lcyVzPicgJSAocHJlZml4LCBzZWxmLm5hbWUpCisKKyAgICAgICAgcHJldHR5X3ByaW50ID0gc2VsZi5fc2hvdWxkX3ByZXR0eV9wcmludChpbmRlbnRfbGV2ZWwpCisgICAgICAgIHNwYWNlID0gJycKKyAgICAgICAgaW5kZW50X3NwYWNlID0gJycKKyAgICAgICAgaWYgaW5kZW50X2xldmVsIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaW5kZW50X3NwYWNlID0gKCcgJyAqIChpbmRlbnRfbGV2ZWwgLSAxKSkKKyAgICAgICAgaWYgcHJldHR5X3ByaW50OgorICAgICAgICAgICAgc3BhY2UgPSBpbmRlbnRfc3BhY2UKKyAgICAgICAgICAgIGluZGVudF9jb250ZW50cyA9IGluZGVudF9sZXZlbCArIDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGluZGVudF9jb250ZW50cyA9IE5vbmUKKyAgICAgICAgY29udGVudHMgPSBzZWxmLmRlY29kZV9jb250ZW50cygKKyAgICAgICAgICAgIGluZGVudF9jb250ZW50cywgZXZlbnR1YWxfZW5jb2RpbmcsIGZvcm1hdHRlcikKKworICAgICAgICBpZiBzZWxmLmhpZGRlbjoKKyAgICAgICAgICAgICMgVGhpcyBpcyB0aGUgJ2RvY3VtZW50IHJvb3QnIG9iamVjdC4KKyAgICAgICAgICAgIHMgPSBjb250ZW50cworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcyA9IFtdCisgICAgICAgICAgICBhdHRyaWJ1dGVfc3RyaW5nID0gJycKKyAgICAgICAgICAgIGlmIGF0dHJzOgorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZV9zdHJpbmcgPSAnICcgKyAnICcuam9pbihhdHRycykKKyAgICAgICAgICAgIGlmIGluZGVudF9sZXZlbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAjIEV2ZW4gaWYgdGhpcyBwYXJ0aWN1bGFyIHRhZyBpcyBub3QgcHJldHR5LXByaW50ZWQsCisgICAgICAgICAgICAgICAgIyB3ZSBzaG91bGQgaW5kZW50IHVwIHRvIHRoZSBzdGFydCBvZiB0aGUgdGFnLgorICAgICAgICAgICAgICAgIHMuYXBwZW5kKGluZGVudF9zcGFjZSkKKyAgICAgICAgICAgIHMuYXBwZW5kKCc8JXMlcyVzJXM+JyAlICgKKyAgICAgICAgICAgICAgICAgICAgcHJlZml4LCBzZWxmLm5hbWUsIGF0dHJpYnV0ZV9zdHJpbmcsIGNsb3NlKSkKKyAgICAgICAgICAgIGlmIHByZXR0eV9wcmludDoKKyAgICAgICAgICAgICAgICBzLmFwcGVuZCgiXG4iKQorICAgICAgICAgICAgcy5hcHBlbmQoY29udGVudHMpCisgICAgICAgICAgICBpZiBwcmV0dHlfcHJpbnQgYW5kIGNvbnRlbnRzIGFuZCBjb250ZW50c1stMV0gIT0gIlxuIjoKKyAgICAgICAgICAgICAgICBzLmFwcGVuZCgiXG4iKQorICAgICAgICAgICAgaWYgcHJldHR5X3ByaW50IGFuZCBjbG9zZVRhZzoKKyAgICAgICAgICAgICAgICBzLmFwcGVuZChzcGFjZSkKKyAgICAgICAgICAgIHMuYXBwZW5kKGNsb3NlVGFnKQorICAgICAgICAgICAgaWYgaW5kZW50X2xldmVsIGlzIG5vdCBOb25lIGFuZCBjbG9zZVRhZyBhbmQgc2VsZi5uZXh0X3NpYmxpbmc6CisgICAgICAgICAgICAgICAgIyBFdmVuIGlmIHRoaXMgcGFydGljdWxhciB0YWcgaXMgbm90IHByZXR0eS1wcmludGVkLAorICAgICAgICAgICAgICAgICMgd2UncmUgbm93IGRvbmUgd2l0aCB0aGUgdGFnLCBhbmQgd2Ugc2hvdWxkIGFkZCBhCisgICAgICAgICAgICAgICAgIyBuZXdsaW5lIGlmIGFwcHJvcHJpYXRlLgorICAgICAgICAgICAgICAgIHMuYXBwZW5kKCJcbiIpCisgICAgICAgICAgICBzID0gJycuam9pbihzKQorICAgICAgICByZXR1cm4gcworCisgICAgZGVmIHByZXR0aWZ5KHNlbGYsIGVuY29kaW5nPU5vbmUsIGZvcm1hdHRlcj0ibWluaW1hbCIpOgorICAgICAgICBpZiBlbmNvZGluZyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGVjb2RlKFRydWUsIGZvcm1hdHRlcj1mb3JtYXR0ZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5lbmNvZGUoZW5jb2RpbmcsIFRydWUsIGZvcm1hdHRlcj1mb3JtYXR0ZXIpCisKKyAgICBkZWYgZGVjb2RlX2NvbnRlbnRzKHNlbGYsIGluZGVudF9sZXZlbD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICBldmVudHVhbF9lbmNvZGluZz1ERUZBVUxUX09VVFBVVF9FTkNPRElORywKKyAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyPSJtaW5pbWFsIik6CisgICAgICAgICIiIlJlbmRlcnMgdGhlIGNvbnRlbnRzIG9mIHRoaXMgdGFnIGFzIGEgVW5pY29kZSBzdHJpbmcuCisKKyAgICAgICAgOnBhcmFtIGV2ZW50dWFsX2VuY29kaW5nOiBUaGUgdGFnIGlzIGRlc3RpbmVkIHRvIGJlCisgICAgICAgICAgIGVuY29kZWQgaW50byB0aGlzIGVuY29kaW5nLiBUaGlzIG1ldGhvZCBpcyBfbm90XworICAgICAgICAgICByZXNwb25zaWJsZSBmb3IgcGVyZm9ybWluZyB0aGF0IGVuY29kaW5nLiBUaGlzIGluZm9ybWF0aW9uCisgICAgICAgICAgIGlzIHBhc3NlZCBpbiBzbyB0aGF0IGl0IGNhbiBiZSBzdWJzdGl0dXRlZCBpbiBpZiB0aGUKKyAgICAgICAgICAgZG9jdW1lbnQgY29udGFpbnMgYSA8TUVUQT4gdGFnIHRoYXQgbWVudGlvbnMgdGhlIGRvY3VtZW50J3MKKyAgICAgICAgICAgZW5jb2RpbmcuCisgICAgICAgICIiIgorICAgICAgICAjIEZpcnN0IG9mZiwgdHVybiBhIHN0cmluZyBmb3JtYXR0ZXIgaW50byBhIGZ1bmN0aW9uLiBUaGlzCisgICAgICAgICMgd2lsbCBzdG9wIHRoZSBsb29rdXAgZnJvbSBoYXBwZW5pbmcgb3ZlciBhbmQgb3ZlciBhZ2Fpbi4KKyAgICAgICAgaWYgbm90IGNhbGxhYmxlKGZvcm1hdHRlcik6CisgICAgICAgICAgICBmb3JtYXR0ZXIgPSBzZWxmLl9mb3JtYXR0ZXJfZm9yX25hbWUoZm9ybWF0dGVyKQorCisgICAgICAgIHByZXR0eV9wcmludCA9IChpbmRlbnRfbGV2ZWwgaXMgbm90IE5vbmUpCisgICAgICAgIHMgPSBbXQorICAgICAgICBmb3IgYyBpbiBzZWxmOgorICAgICAgICAgICAgdGV4dCA9IE5vbmUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYywgTmF2aWdhYmxlU3RyaW5nKToKKyAgICAgICAgICAgICAgICB0ZXh0ID0gYy5vdXRwdXRfcmVhZHkoZm9ybWF0dGVyKQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGMsIFRhZyk6CisgICAgICAgICAgICAgICAgcy5hcHBlbmQoYy5kZWNvZGUoaW5kZW50X2xldmVsLCBldmVudHVhbF9lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXIpKQorICAgICAgICAgICAgaWYgdGV4dCBhbmQgaW5kZW50X2xldmVsIGFuZCBub3Qgc2VsZi5uYW1lID09ICdwcmUnOgorICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnN0cmlwKCkKKyAgICAgICAgICAgIGlmIHRleHQ6CisgICAgICAgICAgICAgICAgaWYgcHJldHR5X3ByaW50IGFuZCBub3Qgc2VsZi5uYW1lID09ICdwcmUnOgorICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZCgiICIgKiAoaW5kZW50X2xldmVsIC0gMSkpCisgICAgICAgICAgICAgICAgcy5hcHBlbmQodGV4dCkKKyAgICAgICAgICAgICAgICBpZiBwcmV0dHlfcHJpbnQgYW5kIG5vdCBzZWxmLm5hbWUgPT0gJ3ByZSc6CisgICAgICAgICAgICAgICAgICAgIHMuYXBwZW5kKCJcbiIpCisgICAgICAgIHJldHVybiAnJy5qb2luKHMpCisKKyAgICBkZWYgZW5jb2RlX2NvbnRlbnRzKAorICAgICAgICBzZWxmLCBpbmRlbnRfbGV2ZWw9Tm9uZSwgZW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5DT0RJTkcsCisgICAgICAgIGZvcm1hdHRlcj0ibWluaW1hbCIpOgorICAgICAgICAiIiJSZW5kZXJzIHRoZSBjb250ZW50cyBvZiB0aGlzIHRhZyBhcyBhIGJ5dGVzdHJpbmcuIiIiCisgICAgICAgIGNvbnRlbnRzID0gc2VsZi5kZWNvZGVfY29udGVudHMoaW5kZW50X2xldmVsLCBlbmNvZGluZywgZm9ybWF0dGVyKQorICAgICAgICByZXR1cm4gY29udGVudHMuZW5jb2RlKGVuY29kaW5nKQorCisgICAgIyBPbGQgbWV0aG9kIGZvciBCUzMgY29tcGF0aWJpbGl0eQorICAgIGRlZiByZW5kZXJDb250ZW50cyhzZWxmLCBlbmNvZGluZz1ERUZBVUxUX09VVFBVVF9FTkNPRElORywKKyAgICAgICAgICAgICAgICAgICAgICAgcHJldHR5UHJpbnQ9RmFsc2UsIGluZGVudExldmVsPTApOgorICAgICAgICBpZiBub3QgcHJldHR5UHJpbnQ6CisgICAgICAgICAgICBpbmRlbnRMZXZlbCA9IE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuZW5jb2RlX2NvbnRlbnRzKAorICAgICAgICAgICAgaW5kZW50X2xldmVsPWluZGVudExldmVsLCBlbmNvZGluZz1lbmNvZGluZykKKworICAgICNTb3VwIG1ldGhvZHMKKworICAgIGRlZiBmaW5kKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHJlY3Vyc2l2ZT1UcnVlLCB0ZXh0PU5vbmUsCisgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm4gb25seSB0aGUgZmlyc3QgY2hpbGQgb2YgdGhpcyBUYWcgbWF0Y2hpbmcgdGhlIGdpdmVuCisgICAgICAgIGNyaXRlcmlhLiIiIgorICAgICAgICByID0gTm9uZQorICAgICAgICBsID0gc2VsZi5maW5kX2FsbChuYW1lLCBhdHRycywgcmVjdXJzaXZlLCB0ZXh0LCAxLCAqKmt3YXJncykKKyAgICAgICAgaWYgbDoKKyAgICAgICAgICAgIHIgPSBsWzBdCisgICAgICAgIHJldHVybiByCisgICAgZmluZENoaWxkID0gZmluZAorCisgICAgZGVmIGZpbmRfYWxsKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHJlY3Vyc2l2ZT1UcnVlLCB0ZXh0PU5vbmUsCisgICAgICAgICAgICAgICAgIGxpbWl0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiRXh0cmFjdHMgYSBsaXN0IG9mIFRhZyBvYmplY3RzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuCisgICAgICAgIGNyaXRlcmlhLiAgWW91IGNhbiBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBUYWcgYW5kIGFueQorICAgICAgICBhdHRyaWJ1dGVzIHlvdSB3YW50IHRoZSBUYWcgdG8gaGF2ZS4KKworICAgICAgICBUaGUgdmFsdWUgb2YgYSBrZXktdmFsdWUgcGFpciBpbiB0aGUgJ2F0dHJzJyBtYXAgY2FuIGJlIGEKKyAgICAgICAgc3RyaW5nLCBhIGxpc3Qgb2Ygc3RyaW5ncywgYSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0LCBvciBhCisgICAgICAgIGNhbGxhYmxlIHRoYXQgdGFrZXMgYSBzdHJpbmcgYW5kIHJldHVybnMgd2hldGhlciBvciBub3QgdGhlCisgICAgICAgIHN0cmluZyBtYXRjaGVzIGZvciBzb21lIGN1c3RvbSBkZWZpbml0aW9uIG9mICdtYXRjaGVzJy4gVGhlCisgICAgICAgIHNhbWUgaXMgdHJ1ZSBvZiB0aGUgdGFnIG5hbWUuIiIiCisKKyAgICAgICAgZ2VuZXJhdG9yID0gc2VsZi5kZXNjZW5kYW50cworICAgICAgICBpZiBub3QgcmVjdXJzaXZlOgorICAgICAgICAgICAgZ2VuZXJhdG9yID0gc2VsZi5jaGlsZHJlbgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9hbGwobmFtZSwgYXR0cnMsIHRleHQsIGxpbWl0LCBnZW5lcmF0b3IsICoqa3dhcmdzKQorICAgIGZpbmRBbGwgPSBmaW5kX2FsbCAgICAgICAjIEJTMworICAgIGZpbmRDaGlsZHJlbiA9IGZpbmRfYWxsICAjIEJTMgorCisgICAgI0dlbmVyYXRvciBtZXRob2RzCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNoaWxkcmVuKHNlbGYpOgorICAgICAgICAjIHJldHVybiBpdGVyKCkgdG8gbWFrZSB0aGUgcHVycG9zZSBvZiB0aGUgbWV0aG9kIGNsZWFyCisgICAgICAgIHJldHVybiBpdGVyKHNlbGYuY29udGVudHMpICAjIFhYWCBUaGlzIHNlZW1zIHRvIGJlIHVudGVzdGVkLgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRlc2NlbmRhbnRzKHNlbGYpOgorICAgICAgICBpZiBub3QgbGVuKHNlbGYuY29udGVudHMpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHN0b3BOb2RlID0gc2VsZi5fbGFzdF9kZXNjZW5kYW50KCkubmV4dF9lbGVtZW50CisgICAgICAgIGN1cnJlbnQgPSBzZWxmLmNvbnRlbnRzWzBdCisgICAgICAgIHdoaWxlIGN1cnJlbnQgaXMgbm90IHN0b3BOb2RlOgorICAgICAgICAgICAgeWllbGQgY3VycmVudAorICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dF9lbGVtZW50CisKKyAgICAjIENTUyBzZWxlY3RvciBjb2RlCisKKyAgICBfc2VsZWN0b3JfY29tYmluYXRvcnMgPSBbJz4nLCAnKycsICd+J10KKyAgICBfc2VsZWN0X2RlYnVnID0gRmFsc2UKKyAgICBkZWYgc2VsZWN0KHNlbGYsIHNlbGVjdG9yLCBfY2FuZGlkYXRlX2dlbmVyYXRvcj1Ob25lKToKKyAgICAgICAgIiIiUGVyZm9ybSBhIENTUyBzZWxlY3Rpb24gb3BlcmF0aW9uIG9uIHRoZSBjdXJyZW50IGVsZW1lbnQuIiIiCisgICAgICAgIHRva2VucyA9IHNlbGVjdG9yLnNwbGl0KCkKKyAgICAgICAgY3VycmVudF9jb250ZXh0ID0gW3NlbGZdCisKKyAgICAgICAgaWYgdG9rZW5zWy0xXSBpbiBzZWxmLl9zZWxlY3Rvcl9jb21iaW5hdG9yczoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgJ0ZpbmFsIGNvbWJpbmF0b3IgIiVzIiBpcyBtaXNzaW5nIGFuIGFyZ3VtZW50LicgJSB0b2tlbnNbLTFdKQorICAgICAgICBpZiBzZWxmLl9zZWxlY3RfZGVidWc6CisgICAgICAgICAgICBwcmludCAnUnVubmluZyBDU1Mgc2VsZWN0b3IgIiVzIicgJSBzZWxlY3RvcgorICAgICAgICBmb3IgaW5kZXgsIHRva2VuIGluIGVudW1lcmF0ZSh0b2tlbnMpOgorICAgICAgICAgICAgaWYgc2VsZi5fc2VsZWN0X2RlYnVnOgorICAgICAgICAgICAgICAgIHByaW50ICcgQ29uc2lkZXJpbmcgdG9rZW4gIiVzIicgJSB0b2tlbgorICAgICAgICAgICAgcmVjdXJzaXZlX2NhbmRpZGF0ZV9nZW5lcmF0b3IgPSBOb25lCisgICAgICAgICAgICB0YWdfbmFtZSA9IE5vbmUKKyAgICAgICAgICAgIGlmIHRva2Vuc1tpbmRleC0xXSBpbiBzZWxmLl9zZWxlY3Rvcl9jb21iaW5hdG9yczoKKyAgICAgICAgICAgICAgICAjIFRoaXMgdG9rZW4gd2FzIGNvbnN1bWVkIGJ5IHRoZSBwcmV2aW91cyBjb21iaW5hdG9yLiBTa2lwIGl0LgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NlbGVjdF9kZWJ1ZzoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgJyAgVG9rZW4gd2FzIGNvbnN1bWVkIGJ5IHRoZSBwcmV2aW91cyBjb21iaW5hdG9yLicKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgIyBFYWNoIG9wZXJhdGlvbiBjb3JyZXNwb25kcyB0byBhIGNoZWNrZXIgZnVuY3Rpb24sIGEgcnVsZQorICAgICAgICAgICAgIyBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciBhIGNhbmRpZGF0ZSBtYXRjaGVzIHRoZQorICAgICAgICAgICAgIyBzZWxlY3Rvci4gQ2FuZGlkYXRlcyBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBhY3RpdmUKKyAgICAgICAgICAgICMgaXRlcmF0b3IuCisgICAgICAgICAgICBjaGVja2VyID0gTm9uZQorCisgICAgICAgICAgICBtID0gc2VsZi5hdHRyaWJzZWxlY3RfcmUubWF0Y2godG9rZW4pCisgICAgICAgICAgICBpZiBtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICMgQXR0cmlidXRlIHNlbGVjdG9yCisgICAgICAgICAgICAgICAgdGFnX25hbWUsIGF0dHJpYnV0ZSwgb3BlcmF0b3IsIHZhbHVlID0gbS5ncm91cHMoKQorICAgICAgICAgICAgICAgIGNoZWNrZXIgPSBzZWxmLl9hdHRyaWJ1dGVfY2hlY2tlcihvcGVyYXRvciwgYXR0cmlidXRlLCB2YWx1ZSkKKworICAgICAgICAgICAgZWxpZiAnIycgaW4gdG9rZW46CisgICAgICAgICAgICAgICAgIyBJRCBzZWxlY3RvcgorICAgICAgICAgICAgICAgIHRhZ19uYW1lLCB0YWdfaWQgPSB0b2tlbi5zcGxpdCgnIycsIDEpCisgICAgICAgICAgICAgICAgZGVmIGlkX21hdGNoZXModGFnKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhZy5nZXQoJ2lkJywgTm9uZSkgPT0gdGFnX2lkCisgICAgICAgICAgICAgICAgY2hlY2tlciA9IGlkX21hdGNoZXMKKworICAgICAgICAgICAgZWxpZiAnLicgaW4gdG9rZW46CisgICAgICAgICAgICAgICAgIyBDbGFzcyBzZWxlY3RvcgorICAgICAgICAgICAgICAgIHRhZ19uYW1lLCBrbGFzcyA9IHRva2VuLnNwbGl0KCcuJywgMSkKKyAgICAgICAgICAgICAgICBjbGFzc2VzID0gc2V0KGtsYXNzLnNwbGl0KCcuJykpCisgICAgICAgICAgICAgICAgZGVmIGNsYXNzZXNfbWF0Y2goY2FuZGlkYXRlKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsYXNzZXMuaXNzdWJzZXQoY2FuZGlkYXRlLmdldCgnY2xhc3MnLCBbXSkpCisgICAgICAgICAgICAgICAgY2hlY2tlciA9IGNsYXNzZXNfbWF0Y2gKKworICAgICAgICAgICAgZWxpZiAnOicgaW4gdG9rZW46CisgICAgICAgICAgICAgICAgIyBQc2V1ZG8tY2xhc3MKKyAgICAgICAgICAgICAgICB0YWdfbmFtZSwgcHNldWRvID0gdG9rZW4uc3BsaXQoJzonLCAxKQorICAgICAgICAgICAgICAgIGlmIHRhZ19uYW1lID09ICcnOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgIkEgcHNldWRvLWNsYXNzIG11c3QgYmUgcHJlZml4ZWQgd2l0aCBhIHRhZyBuYW1lLiIpCisgICAgICAgICAgICAgICAgcHNldWRvX2F0dHJpYnV0ZXMgPSByZS5tYXRjaCgnKFthLXpBLVpcZC1dKylcKChbYS16QS1aXGRdKylcKScsIHBzZXVkbykKKyAgICAgICAgICAgICAgICBmb3VuZCA9IFtdCisgICAgICAgICAgICAgICAgaWYgcHNldWRvX2F0dHJpYnV0ZXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHBzZXVkb190eXBlLCBwc2V1ZG9fdmFsdWUgPSBwc2V1ZG9fYXR0cmlidXRlcy5ncm91cHMoKQorICAgICAgICAgICAgICAgICAgICBpZiBwc2V1ZG9fdHlwZSA9PSAnbnRoLW9mLXR5cGUnOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzZXVkb192YWx1ZSA9IGludChwc2V1ZG9fdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ09ubHkgbnVtZXJpYyB2YWx1ZXMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQgZm9yIHRoZSBudGgtb2YtdHlwZSBwc2V1ZG8tY2xhc3MuJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBzZXVkb192YWx1ZSA8IDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ250aC1vZi10eXBlIHBzZXVkby1jbGFzcyB2YWx1ZSBtdXN0IGJlIGF0IGxlYXN0IDEuJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIENvdW50ZXIob2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZGVzdGluYXRpb24pOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvdW50ID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb24KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBudGhfY2hpbGRfb2ZfdHlwZShzZWxmLCB0YWcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvdW50ICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5jb3VudCA9PSBzZWxmLmRlc3RpbmF0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5jb3VudCA+IHNlbGYuZGVzdGluYXRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFN0b3AgdGhlIGdlbmVyYXRvciB0aGF0J3Mgc2VuZGluZyB1cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGVzZSB0aGluZ3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VyID0gQ291bnRlcihwc2V1ZG9fdmFsdWUpLm50aF9jaGlsZF9vZl90eXBlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdPbmx5IHRoZSBmb2xsb3dpbmcgcHNldWRvLWNsYXNzZXMgYXJlIGltcGxlbWVudGVkOiBudGgtb2YtdHlwZS4nKQorCisgICAgICAgICAgICBlbGlmIHRva2VuID09ICcqJzoKKyAgICAgICAgICAgICAgICAjIFN0YXIgc2VsZWN0b3IgLS0gbWF0Y2hlcyBldmVyeXRoaW5nCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxpZiB0b2tlbiA9PSAnPic6CisgICAgICAgICAgICAgICAgIyBSdW4gdGhlIG5leHQgdG9rZW4gYXMgYSBDU1Mgc2VsZWN0b3IgYWdhaW5zdCB0aGUKKyAgICAgICAgICAgICAgICAjIGRpcmVjdCBjaGlsZHJlbiBvZiBlYWNoIHRhZyBpbiB0aGUgY3VycmVudCBjb250ZXh0LgorICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZV9jYW5kaWRhdGVfZ2VuZXJhdG9yID0gbGFtYmRhIHRhZzogdGFnLmNoaWxkcmVuCisgICAgICAgICAgICBlbGlmIHRva2VuID09ICd+JzoKKyAgICAgICAgICAgICAgICAjIFJ1biB0aGUgbmV4dCB0b2tlbiBhcyBhIENTUyBzZWxlY3RvciBhZ2FpbnN0IHRoZQorICAgICAgICAgICAgICAgICMgc2libGluZ3Mgb2YgZWFjaCB0YWcgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4KKyAgICAgICAgICAgICAgICByZWN1cnNpdmVfY2FuZGlkYXRlX2dlbmVyYXRvciA9IGxhbWJkYSB0YWc6IHRhZy5uZXh0X3NpYmxpbmdzCisgICAgICAgICAgICBlbGlmIHRva2VuID09ICcrJzoKKyAgICAgICAgICAgICAgICAjIEZvciBlYWNoIHRhZyBpbiB0aGUgY3VycmVudCBjb250ZXh0LCBydW4gdGhlIG5leHQKKyAgICAgICAgICAgICAgICAjIHRva2VuIGFzIGEgQ1NTIHNlbGVjdG9yIGFnYWluc3QgdGhlIHRhZydzIG5leHQKKyAgICAgICAgICAgICAgICAjIHNpYmxpbmcgdGhhdCdzIGEgdGFnLgorICAgICAgICAgICAgICAgIGRlZiBuZXh0X3RhZ19zaWJsaW5nKHRhZyk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRhZy5maW5kX25leHRfc2libGluZyhUcnVlKQorICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZV9jYW5kaWRhdGVfZ2VuZXJhdG9yID0gbmV4dF90YWdfc2libGluZworCisgICAgICAgICAgICBlbGlmIHNlbGYudGFnX25hbWVfcmUubWF0Y2godG9rZW4pOgorICAgICAgICAgICAgICAgICMgSnVzdCBhIHRhZyBuYW1lLgorICAgICAgICAgICAgICAgIHRhZ19uYW1lID0gdG9rZW4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgJ1Vuc3VwcG9ydGVkIG9yIGludmFsaWQgQ1NTIHNlbGVjdG9yOiAiJXMiJyAlIHRva2VuKQorCisgICAgICAgICAgICBpZiByZWN1cnNpdmVfY2FuZGlkYXRlX2dlbmVyYXRvcjoKKyAgICAgICAgICAgICAgICAjIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBzZWxlY3RvciBsb29rcyBsaWtlICAiPiBmb28iLgorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIFRoZSBnZW5lcmF0b3IgY2FsbHMgc2VsZWN0KCkgcmVjdXJzaXZlbHkgb24gZXZlcnkKKyAgICAgICAgICAgICAgICAjIG1lbWJlciBvZiB0aGUgY3VycmVudCBjb250ZXh0LCBwYXNzaW5nIGluIGEgZGlmZmVyZW50CisgICAgICAgICAgICAgICAgIyBjYW5kaWRhdGUgZ2VuZXJhdG9yIGFuZCBhIGRpZmZlcmVudCBzZWxlY3Rvci4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBJbiB0aGUgY2FzZSBvZiAiPiBmb28iLCB0aGUgY2FuZGlkYXRlIGdlbmVyYXRvciBpcworICAgICAgICAgICAgICAgICMgb25lIHRoYXQgeWllbGRzIGEgdGFnJ3MgZGlyZWN0IGNoaWxkcmVuICgiPiIpLCBhbmQKKyAgICAgICAgICAgICAgICAjIHRoZSBzZWxlY3RvciBpcyAiZm9vIi4KKyAgICAgICAgICAgICAgICBuZXh0X3Rva2VuID0gdG9rZW5zW2luZGV4KzFdCisgICAgICAgICAgICAgICAgZGVmIHJlY3Vyc2l2ZV9zZWxlY3QodGFnKToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fc2VsZWN0X2RlYnVnOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJyAgICBDYWxsaW5nIHNlbGVjdCgiJXMiKSByZWN1cnNpdmVseSBvbiAlcyAlcycgJSAobmV4dF90b2tlbiwgdGFnLm5hbWUsIHRhZy5hdHRycykKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICctJyAqIDQwCisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHRhZy5zZWxlY3QobmV4dF90b2tlbiwgcmVjdXJzaXZlX2NhbmRpZGF0ZV9nZW5lcmF0b3IpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fc2VsZWN0X2RlYnVnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICcoUmVjdXJzaXZlIHNlbGVjdCBwaWNrZWQgdXAgY2FuZGlkYXRlICVzICVzKScgJSAoaS5uYW1lLCBpLmF0dHJzKQorICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgaQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9zZWxlY3RfZGVidWc6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAnLScgKiA0MAorICAgICAgICAgICAgICAgIF91c2VfY2FuZGlkYXRlX2dlbmVyYXRvciA9IHJlY3Vyc2l2ZV9zZWxlY3QKKyAgICAgICAgICAgIGVsaWYgX2NhbmRpZGF0ZV9nZW5lcmF0b3IgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIEJ5IGRlZmF1bHQsIGEgdGFnJ3MgY2FuZGlkYXRlcyBhcmUgYWxsIG9mIGl0cworICAgICAgICAgICAgICAgICMgY2hpbGRyZW4uIElmIHRhZ19uYW1lIGlzIGRlZmluZWQsIG9ubHkgeWllbGQgdGFncworICAgICAgICAgICAgICAgICMgd2l0aCB0aGF0IG5hbWUuCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fc2VsZWN0X2RlYnVnOgorICAgICAgICAgICAgICAgICAgICBpZiB0YWdfbmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrID0gIlthbnldIgorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sgPSB0YWdfbmFtZQorICAgICAgICAgICAgICAgICAgICBwcmludCAnICAgRGVmYXVsdCBjYW5kaWRhdGUgZ2VuZXJhdG9yLCB0YWcgbmFtZT0iJXMiJyAlIGNoZWNrCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fc2VsZWN0X2RlYnVnOgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgcmVkdW5kYW50IHdpdGggbGF0ZXIgY29kZSwgYnV0IGl0IHN0b3BzCisgICAgICAgICAgICAgICAgICAgICMgYSBidW5jaCBvZiBib2d1cyB0YWdzIGZyb20gY2x1dHRlcmluZyB1cCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyBkZWJ1ZyBsb2cuCisgICAgICAgICAgICAgICAgICAgIGRlZiBkZWZhdWx0X2NhbmRpZGF0ZV9nZW5lcmF0b3IodGFnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBjaGlsZCBpbiB0YWcuZGVzY2VuZGFudHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoY2hpbGQsIFRhZyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGFnX25hbWUgYW5kIG5vdCBjaGlsZC5uYW1lID09IHRhZ19uYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGNoaWxkCisgICAgICAgICAgICAgICAgICAgIF91c2VfY2FuZGlkYXRlX2dlbmVyYXRvciA9IGRlZmF1bHRfY2FuZGlkYXRlX2dlbmVyYXRvcgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIF91c2VfY2FuZGlkYXRlX2dlbmVyYXRvciA9IGxhbWJkYSB0YWc6IHRhZy5kZXNjZW5kYW50cworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfdXNlX2NhbmRpZGF0ZV9nZW5lcmF0b3IgPSBfY2FuZGlkYXRlX2dlbmVyYXRvcgorCisgICAgICAgICAgICBuZXdfY29udGV4dCA9IFtdCisgICAgICAgICAgICBuZXdfY29udGV4dF9pZHMgPSBzZXQoW10pCisgICAgICAgICAgICBmb3IgdGFnIGluIGN1cnJlbnRfY29udGV4dDoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9zZWxlY3RfZGVidWc6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICIgICAgUnVubmluZyBjYW5kaWRhdGUgZ2VuZXJhdG9yIG9uICVzICVzIiAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5uYW1lLCByZXByKHRhZy5hdHRycykpCisgICAgICAgICAgICAgICAgZm9yIGNhbmRpZGF0ZSBpbiBfdXNlX2NhbmRpZGF0ZV9nZW5lcmF0b3IodGFnKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoY2FuZGlkYXRlLCBUYWcpOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgaWYgdGFnX25hbWUgYW5kIGNhbmRpZGF0ZS5uYW1lICE9IHRhZ19uYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgaWYgY2hlY2tlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBjaGVja2VyKGNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIGNoZWNrZXIgaGFzIGRlY2lkZWQgd2Ugc2hvdWxkIG5vIGxvbmdlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcnVuIHRoZSBnZW5lcmF0b3IuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgaWYgY2hlY2tlciBpcyBOb25lIG9yIHJlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NlbGVjdF9kZWJ1ZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiICAgICBTVUNDRVNTICVzICVzIiAlIChjYW5kaWRhdGUubmFtZSwgcmVwcihjYW5kaWRhdGUuYXR0cnMpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaWQoY2FuZGlkYXRlKSBub3QgaW4gbmV3X2NvbnRleHRfaWRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgYSB0YWcgbWF0Y2hlcyBhIHNlbGVjdG9yIG1vcmUgdGhhbiBvbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZG9uJ3QgaW5jbHVkZSBpdCBpbiB0aGUgY29udGV4dCBtb3JlIHRoYW4gb25jZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY29udGV4dC5hcHBlbmQoY2FuZGlkYXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jb250ZXh0X2lkcy5hZGQoaWQoY2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBzZWxmLl9zZWxlY3RfZGVidWc6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiICAgICBGQUlMVVJFICVzICVzIiAlIChjYW5kaWRhdGUubmFtZSwgcmVwcihjYW5kaWRhdGUuYXR0cnMpKQorCisgICAgICAgICAgICBjdXJyZW50X2NvbnRleHQgPSBuZXdfY29udGV4dAorCisgICAgICAgIGlmIHNlbGYuX3NlbGVjdF9kZWJ1ZzoKKyAgICAgICAgICAgIHByaW50ICJGaW5hbCB2ZXJkaWN0OiIKKyAgICAgICAgICAgIGZvciBpIGluIGN1cnJlbnRfY29udGV4dDoKKyAgICAgICAgICAgICAgICBwcmludCAiICVzICVzIiAlIChpLm5hbWUsIGkuYXR0cnMpCisgICAgICAgIHJldHVybiBjdXJyZW50X2NvbnRleHQKKworICAgICMgT2xkIG5hbWVzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQorICAgIGRlZiBjaGlsZEdlbmVyYXRvcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY2hpbGRyZW4KKworICAgIGRlZiByZWN1cnNpdmVDaGlsZEdlbmVyYXRvcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZGVzY2VuZGFudHMKKworICAgIGRlZiBoYXNfa2V5KHNlbGYsIGtleSk6CisgICAgICAgICIiIlRoaXMgd2FzIGtpbmQgb2YgbWlzbGVhZGluZyBiZWNhdXNlIGhhc19rZXkoKSAoYXR0cmlidXRlcykKKyAgICAgICAgd2FzIGRpZmZlcmVudCBmcm9tIF9faW5fXyAoY29udGVudHMpLiBoYXNfa2V5KCkgaXMgZ29uZSBpbgorICAgICAgICBQeXRob24gMywgYW55d2F5LiIiIgorICAgICAgICB3YXJuaW5ncy53YXJuKCdoYXNfa2V5IGlzIGRlcHJlY2F0ZWQuIFVzZSBoYXNfYXR0cigiJXMiKSBpbnN0ZWFkLicgJSAoCisgICAgICAgICAgICAgICAga2V5KSkKKyAgICAgICAgcmV0dXJuIHNlbGYuaGFzX2F0dHIoa2V5KQorCisjIE5leHQsIGEgY291cGxlIGNsYXNzZXMgdG8gcmVwcmVzZW50IHF1ZXJpZXMgYW5kIHRoZWlyIHJlc3VsdHMuCitjbGFzcyBTb3VwU3RyYWluZXIob2JqZWN0KToKKyAgICAiIiJFbmNhcHN1bGF0ZXMgYSBudW1iZXIgb2Ygd2F5cyBvZiBtYXRjaGluZyBhIG1hcmt1cCBlbGVtZW50ICh0YWcgb3IKKyAgICB0ZXh0KS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5uYW1lID0gc2VsZi5fbm9ybWFsaXplX3NlYXJjaF92YWx1ZShuYW1lKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhdHRycywgZGljdCk6CisgICAgICAgICAgICAjIFRyZWF0IGEgbm9uLWRpY3QgdmFsdWUgZm9yIGF0dHJzIGFzIGEgc2VhcmNoIGZvciB0aGUgJ2NsYXNzJworICAgICAgICAgICAgIyBhdHRyaWJ1dGUuCisgICAgICAgICAgICBrd2FyZ3NbJ2NsYXNzJ10gPSBhdHRycworICAgICAgICAgICAgYXR0cnMgPSBOb25lCisKKyAgICAgICAgaWYgJ2NsYXNzXycgaW4ga3dhcmdzOgorICAgICAgICAgICAgIyBUcmVhdCBjbGFzc189ImZvbyIgYXMgYSBzZWFyY2ggZm9yIHRoZSAnY2xhc3MnCisgICAgICAgICAgICAjIGF0dHJpYnV0ZSwgb3ZlcnJpZGluZyBhbnkgbm9uLWRpY3QgdmFsdWUgZm9yIGF0dHJzLgorICAgICAgICAgICAga3dhcmdzWydjbGFzcyddID0ga3dhcmdzWydjbGFzc18nXQorICAgICAgICAgICAgZGVsIGt3YXJnc1snY2xhc3NfJ10KKworICAgICAgICBpZiBrd2FyZ3M6CisgICAgICAgICAgICBpZiBhdHRyczoKKyAgICAgICAgICAgICAgICBhdHRycyA9IGF0dHJzLmNvcHkoKQorICAgICAgICAgICAgICAgIGF0dHJzLnVwZGF0ZShrd2FyZ3MpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGF0dHJzID0ga3dhcmdzCisgICAgICAgIG5vcm1hbGl6ZWRfYXR0cnMgPSB7fQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBhdHRycy5pdGVtcygpOgorICAgICAgICAgICAgbm9ybWFsaXplZF9hdHRyc1trZXldID0gc2VsZi5fbm9ybWFsaXplX3NlYXJjaF92YWx1ZSh2YWx1ZSkKKworICAgICAgICBzZWxmLmF0dHJzID0gbm9ybWFsaXplZF9hdHRycworICAgICAgICBzZWxmLnRleHQgPSBzZWxmLl9ub3JtYWxpemVfc2VhcmNoX3ZhbHVlKHRleHQpCisKKyAgICBkZWYgX25vcm1hbGl6ZV9zZWFyY2hfdmFsdWUoc2VsZiwgdmFsdWUpOgorICAgICAgICAjIExlYXZlIGl0IGFsb25lIGlmIGl0J3MgYSBVbmljb2RlIHN0cmluZywgYSBjYWxsYWJsZSwgYQorICAgICAgICAjIHJlZ3VsYXIgZXhwcmVzc2lvbiwgYSBib29sZWFuLCBvciBOb25lLgorICAgICAgICBpZiAoaXNpbnN0YW5jZSh2YWx1ZSwgdW5pY29kZSkgb3IgY2FsbGFibGUodmFsdWUpIG9yIGhhc2F0dHIodmFsdWUsICdtYXRjaCcpCisgICAgICAgICAgICBvciBpc2luc3RhbmNlKHZhbHVlLCBib29sKSBvciB2YWx1ZSBpcyBOb25lKToKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgICAgICMgSWYgaXQncyBhIGJ5dGVzdHJpbmcsIGNvbnZlcnQgaXQgdG8gVW5pY29kZSwgdHJlYXRpbmcgaXQgYXMgVVRGLTguCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJ5dGVzKToKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5kZWNvZGUoInV0ZjgiKQorCisgICAgICAgICMgSWYgaXQncyBsaXN0bGlrZSwgY29udmVydCBpdCBpbnRvIGEgbGlzdCBvZiBzdHJpbmdzLgorICAgICAgICBpZiBoYXNhdHRyKHZhbHVlLCAnX19pdGVyX18nKToKKyAgICAgICAgICAgIG5ld192YWx1ZSA9IFtdCisgICAgICAgICAgICBmb3IgdiBpbiB2YWx1ZToKKyAgICAgICAgICAgICAgICBpZiAoaGFzYXR0cih2LCAnX19pdGVyX18nKSBhbmQgbm90IGlzaW5zdGFuY2UodiwgYnl0ZXMpCisgICAgICAgICAgICAgICAgICAgIGFuZCBub3QgaXNpbnN0YW5jZSh2LCB1bmljb2RlKSk6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IHRoZSB1c2VyJ3MgbWlzdGFrZS4gSW4gdGhlCisgICAgICAgICAgICAgICAgICAgICMgaW50ZXJlc3RzIG9mIGF2b2lkaW5nIGluZmluaXRlIGxvb3BzLCB3ZSdsbCBsZXQKKyAgICAgICAgICAgICAgICAgICAgIyBpdCB0aHJvdWdoIGFzLWlzIHJhdGhlciB0aGFuIGRvaW5nIGEgcmVjdXJzaXZlIGNhbGwuCisgICAgICAgICAgICAgICAgICAgIG5ld192YWx1ZS5hcHBlbmQodikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBuZXdfdmFsdWUuYXBwZW5kKHNlbGYuX25vcm1hbGl6ZV9zZWFyY2hfdmFsdWUodikpCisgICAgICAgICAgICByZXR1cm4gbmV3X3ZhbHVlCisKKyAgICAgICAgIyBPdGhlcndpc2UsIGNvbnZlcnQgaXQgaW50byBhIFVuaWNvZGUgc3RyaW5nLgorICAgICAgICAjIFRoZSB1bmljb2RlKHN0cigpKSB0aGluZyBpcyBzbyB0aGlzIHdpbGwgZG8gdGhlIHNhbWUgdGhpbmcgb24gUHl0aG9uIDIKKyAgICAgICAgIyBhbmQgUHl0aG9uIDMuCisgICAgICAgIHJldHVybiB1bmljb2RlKHN0cih2YWx1ZSkpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi50ZXh0OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudGV4dAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICIlc3wlcyIgJSAoc2VsZi5uYW1lLCBzZWxmLmF0dHJzKQorCisgICAgZGVmIHNlYXJjaF90YWcoc2VsZiwgbWFya3VwX25hbWU9Tm9uZSwgbWFya3VwX2F0dHJzPXt9KToKKyAgICAgICAgZm91bmQgPSBOb25lCisgICAgICAgIG1hcmt1cCA9IE5vbmUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYXJrdXBfbmFtZSwgVGFnKToKKyAgICAgICAgICAgIG1hcmt1cCA9IG1hcmt1cF9uYW1lCisgICAgICAgICAgICBtYXJrdXBfYXR0cnMgPSBtYXJrdXAKKyAgICAgICAgY2FsbF9mdW5jdGlvbl93aXRoX3RhZ19kYXRhID0gKAorICAgICAgICAgICAgaXNpbnN0YW5jZShzZWxmLm5hbWUsIGNvbGxlY3Rpb25zLkNhbGxhYmxlKQorICAgICAgICAgICAgYW5kIG5vdCBpc2luc3RhbmNlKG1hcmt1cF9uYW1lLCBUYWcpKQorCisgICAgICAgIGlmICgobm90IHNlbGYubmFtZSkKKyAgICAgICAgICAgIG9yIGNhbGxfZnVuY3Rpb25fd2l0aF90YWdfZGF0YQorICAgICAgICAgICAgb3IgKG1hcmt1cCBhbmQgc2VsZi5fbWF0Y2hlcyhtYXJrdXAsIHNlbGYubmFtZSkpCisgICAgICAgICAgICBvciAobm90IG1hcmt1cCBhbmQgc2VsZi5fbWF0Y2hlcyhtYXJrdXBfbmFtZSwgc2VsZi5uYW1lKSkpOgorICAgICAgICAgICAgaWYgY2FsbF9mdW5jdGlvbl93aXRoX3RhZ19kYXRhOgorICAgICAgICAgICAgICAgIG1hdGNoID0gc2VsZi5uYW1lKG1hcmt1cF9uYW1lLCBtYXJrdXBfYXR0cnMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1hdGNoID0gVHJ1ZQorICAgICAgICAgICAgICAgIG1hcmt1cF9hdHRyX21hcCA9IE5vbmUKKyAgICAgICAgICAgICAgICBmb3IgYXR0ciwgbWF0Y2hfYWdhaW5zdCBpbiBsaXN0KHNlbGYuYXR0cnMuaXRlbXMoKSk6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBtYXJrdXBfYXR0cl9tYXA6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKG1hcmt1cF9hdHRycywgJ2dldCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmt1cF9hdHRyX21hcCA9IG1hcmt1cF9hdHRycworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXBfYXR0cl9tYXAgPSB7fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBrLCB2IGluIG1hcmt1cF9hdHRyczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3VwX2F0dHJfbWFwW2tdID0gdgorICAgICAgICAgICAgICAgICAgICBhdHRyX3ZhbHVlID0gbWFya3VwX2F0dHJfbWFwLmdldChhdHRyKQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fbWF0Y2hlcyhhdHRyX3ZhbHVlLCBtYXRjaF9hZ2FpbnN0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICBpZiBtYXJrdXA6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gbWFya3VwCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBtYXJrdXBfbmFtZQorICAgICAgICBpZiBmb3VuZCBhbmQgc2VsZi50ZXh0IGFuZCBub3Qgc2VsZi5fbWF0Y2hlcyhmb3VuZC5zdHJpbmcsIHNlbGYudGV4dCk6CisgICAgICAgICAgICBmb3VuZCA9IE5vbmUKKyAgICAgICAgcmV0dXJuIGZvdW5kCisgICAgc2VhcmNoVGFnID0gc2VhcmNoX3RhZworCisgICAgZGVmIHNlYXJjaChzZWxmLCBtYXJrdXApOgorICAgICAgICAjIHByaW50ICdsb29raW5nIGZvciAlcyBpbiAlcycgJSAoc2VsZiwgbWFya3VwKQorICAgICAgICBmb3VuZCA9IE5vbmUKKyAgICAgICAgIyBJZiBnaXZlbiBhIGxpc3Qgb2YgaXRlbXMsIHNjYW4gaXQgZm9yIGEgdGV4dCBlbGVtZW50IHRoYXQKKyAgICAgICAgIyBtYXRjaGVzLgorICAgICAgICBpZiBoYXNhdHRyKG1hcmt1cCwgJ19faXRlcl9fJykgYW5kIG5vdCBpc2luc3RhbmNlKG1hcmt1cCwgKFRhZywgYmFzZXN0cmluZykpOgorICAgICAgICAgICAgZm9yIGVsZW1lbnQgaW4gbWFya3VwOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZWxlbWVudCwgTmF2aWdhYmxlU3RyaW5nKSBcCisgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzZWxmLnNlYXJjaChlbGVtZW50KToKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBlbGVtZW50CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICMgSWYgaXQncyBhIFRhZywgbWFrZSBzdXJlIGl0cyBuYW1lIG9yIGF0dHJpYnV0ZXMgbWF0Y2guCisgICAgICAgICMgRG9uJ3QgYm90aGVyIHdpdGggVGFncyBpZiB3ZSdyZSBzZWFyY2hpbmcgZm9yIHRleHQuCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShtYXJrdXAsIFRhZyk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi50ZXh0IG9yIHNlbGYubmFtZSBvciBzZWxmLmF0dHJzOgorICAgICAgICAgICAgICAgIGZvdW5kID0gc2VsZi5zZWFyY2hfdGFnKG1hcmt1cCkKKyAgICAgICAgIyBJZiBpdCdzIHRleHQsIG1ha2Ugc3VyZSB0aGUgdGV4dCBtYXRjaGVzLgorICAgICAgICBlbGlmIGlzaW5zdGFuY2UobWFya3VwLCBOYXZpZ2FibGVTdHJpbmcpIG9yIFwKKyAgICAgICAgICAgICAgICAgaXNpbnN0YW5jZShtYXJrdXAsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYubmFtZSBhbmQgbm90IHNlbGYuYXR0cnMgYW5kIHNlbGYuX21hdGNoZXMobWFya3VwLCBzZWxmLnRleHQpOgorICAgICAgICAgICAgICAgIGZvdW5kID0gbWFya3VwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgIkkgZG9uJ3Qga25vdyBob3cgdG8gbWF0Y2ggYWdhaW5zdCBhICVzIiAlIG1hcmt1cC5fX2NsYXNzX18pCisgICAgICAgIHJldHVybiBmb3VuZAorCisgICAgZGVmIF9tYXRjaGVzKHNlbGYsIG1hcmt1cCwgbWF0Y2hfYWdhaW5zdCk6CisgICAgICAgICMgcHJpbnQgdSJNYXRjaGluZyAlcyBhZ2FpbnN0ICVzIiAlIChtYXJrdXAsIG1hdGNoX2FnYWluc3QpCisgICAgICAgIHJlc3VsdCA9IEZhbHNlCisgICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwLCBsaXN0KSBvciBpc2luc3RhbmNlKG1hcmt1cCwgdHVwbGUpOgorICAgICAgICAgICAgIyBUaGlzIHNob3VsZCBvbmx5IGhhcHBlbiB3aGVuIHNlYXJjaGluZyBhIG11bHRpLXZhbHVlZCBhdHRyaWJ1dGUKKyAgICAgICAgICAgICMgbGlrZSAnY2xhc3MnLgorICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UobWF0Y2hfYWdhaW5zdCwgdW5pY29kZSkKKyAgICAgICAgICAgICAgICBhbmQgJyAnIGluIG1hdGNoX2FnYWluc3QpOgorICAgICAgICAgICAgICAgICMgQSBiaXQgb2YgYSBzcGVjaWFsIGNhc2UuIElmIHRoZXkgdHJ5IHRvIG1hdGNoICJmb28KKyAgICAgICAgICAgICAgICAjIGJhciIgb24gYSBtdWx0aXZhbHVlIGF0dHJpYnV0ZSdzIHZhbHVlLCBvbmx5IGFjY2VwdAorICAgICAgICAgICAgICAgICMgdGhlIGxpdGVyYWwgdmFsdWUgImZvbyBiYXIiCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgWFhYIFRoaXMgaXMgZ29pbmcgdG8gYmUgcHJldHR5IHNsb3cgYmVjYXVzZSB3ZSBrZWVwCisgICAgICAgICAgICAgICAgIyBzcGxpdHRpbmcgbWF0Y2hfYWdhaW5zdC4gQnV0IGl0IHNob3VsZG4ndCBjb21lIHVwCisgICAgICAgICAgICAgICAgIyB0b28gb2Z0ZW4uCisgICAgICAgICAgICAgICAgcmV0dXJuICh3aGl0ZXNwYWNlX3JlLnNwbGl0KG1hdGNoX2FnYWluc3QpID09IG1hcmt1cCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gbWFya3VwOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9tYXRjaGVzKGl0ZW0sIG1hdGNoX2FnYWluc3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBtYXRjaF9hZ2FpbnN0IGlzIFRydWU6CisgICAgICAgICAgICAjIFRydWUgbWF0Y2hlcyBhbnkgbm9uLU5vbmUgdmFsdWUuCisgICAgICAgICAgICByZXR1cm4gbWFya3VwIGlzIG5vdCBOb25lCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYXRjaF9hZ2FpbnN0LCBjb2xsZWN0aW9ucy5DYWxsYWJsZSk6CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hfYWdhaW5zdChtYXJrdXApCisKKyAgICAgICAgIyBDdXN0b20gY2FsbGFibGVzIHRha2UgdGhlIHRhZyBhcyBhbiBhcmd1bWVudCwgYnV0IGFsbAorICAgICAgICAjIG90aGVyIHdheXMgb2YgbWF0Y2hpbmcgbWF0Y2ggdGhlIHRhZyBuYW1lIGFzIGEgc3RyaW5nLgorICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmt1cCwgVGFnKToKKyAgICAgICAgICAgIG1hcmt1cCA9IG1hcmt1cC5uYW1lCisKKyAgICAgICAgIyBFbnN1cmUgdGhhdCBgbWFya3VwYCBpcyBlaXRoZXIgYSBVbmljb2RlIHN0cmluZywgb3IgTm9uZS4KKyAgICAgICAgbWFya3VwID0gc2VsZi5fbm9ybWFsaXplX3NlYXJjaF92YWx1ZShtYXJrdXApCisKKyAgICAgICAgaWYgbWFya3VwIGlzIE5vbmU6CisgICAgICAgICAgICAjIE5vbmUgbWF0Y2hlcyBOb25lLCBGYWxzZSwgYW4gZW1wdHkgc3RyaW5nLCBhbiBlbXB0eSBsaXN0LCBhbmQgc28gb24uCisgICAgICAgICAgICByZXR1cm4gbm90IG1hdGNoX2FnYWluc3QKKworICAgICAgICBpZiBpc2luc3RhbmNlKG1hdGNoX2FnYWluc3QsIHVuaWNvZGUpOgorICAgICAgICAgICAgIyBFeGFjdCBzdHJpbmcgbWF0Y2gKKyAgICAgICAgICAgIHJldHVybiBtYXJrdXAgPT0gbWF0Y2hfYWdhaW5zdAorCisgICAgICAgIGlmIGhhc2F0dHIobWF0Y2hfYWdhaW5zdCwgJ21hdGNoJyk6CisgICAgICAgICAgICAjIFJlZ2V4cCBtYXRjaAorICAgICAgICAgICAgcmV0dXJuIG1hdGNoX2FnYWluc3Quc2VhcmNoKG1hcmt1cCkKKworICAgICAgICBpZiBoYXNhdHRyKG1hdGNoX2FnYWluc3QsICdfX2l0ZXJfXycpOgorICAgICAgICAgICAgIyBUaGUgbWFya3VwIG11c3QgYmUgYW4gZXhhY3QgbWF0Y2ggYWdhaW5zdCBzb21ldGhpbmcKKyAgICAgICAgICAgICMgaW4gdGhlIGl0ZXJhYmxlLgorICAgICAgICAgICAgcmV0dXJuIG1hcmt1cCBpbiBtYXRjaF9hZ2FpbnN0CisKKworY2xhc3MgUmVzdWx0U2V0KGxpc3QpOgorICAgICIiIkEgUmVzdWx0U2V0IGlzIGp1c3QgYSBsaXN0IHRoYXQga2VlcHMgdHJhY2sgb2YgdGhlIFNvdXBTdHJhaW5lcgorICAgIHRoYXQgY3JlYXRlZCBpdC4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlLCByZXN1bHQ9KCkpOgorICAgICAgICBzdXBlcihSZXN1bHRTZXQsIHNlbGYpLl9faW5pdF9fKHJlc3VsdCkKKyAgICAgICAgc2VsZi5zb3VyY2UgPSBzb3VyY2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RpbmcucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0aW5nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNDQ5NWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0aW5nLnB5CkBAIC0wLDAgKzEsNTkyIEBACisiIiJIZWxwZXIgY2xhc3NlcyBmb3IgdGVzdHMuIiIiCisKK2ltcG9ydCBjb3B5CitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCitmcm9tIGJzNCBpbXBvcnQgQmVhdXRpZnVsU291cAorZnJvbSBiczQuZWxlbWVudCBpbXBvcnQgKAorICAgIENoYXJzZXRNZXRhQXR0cmlidXRlVmFsdWUsCisgICAgQ29tbWVudCwKKyAgICBDb250ZW50TWV0YUF0dHJpYnV0ZVZhbHVlLAorICAgIERvY3R5cGUsCisgICAgU291cFN0cmFpbmVyLAorKQorCitmcm9tIGJzNC5idWlsZGVyIGltcG9ydCBIVE1MUGFyc2VyVHJlZUJ1aWxkZXIKK2RlZmF1bHRfYnVpbGRlciA9IEhUTUxQYXJzZXJUcmVlQnVpbGRlcgorCisKK2NsYXNzIFNvdXBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBkZWZhdWx0X2J1aWxkZXIoc2VsZik6CisgICAgICAgIHJldHVybiBkZWZhdWx0X2J1aWxkZXIoKQorCisgICAgZGVmIHNvdXAoc2VsZiwgbWFya3VwLCAqKmt3YXJncyk6CisgICAgICAgICIiIkJ1aWxkIGEgQmVhdXRpZnVsIFNvdXAgb2JqZWN0IGZyb20gbWFya3VwLiIiIgorICAgICAgICBidWlsZGVyID0ga3dhcmdzLnBvcCgnYnVpbGRlcicsIHNlbGYuZGVmYXVsdF9idWlsZGVyKQorICAgICAgICByZXR1cm4gQmVhdXRpZnVsU291cChtYXJrdXAsIGJ1aWxkZXI9YnVpbGRlciwgKiprd2FyZ3MpCisKKyAgICBkZWYgZG9jdW1lbnRfZm9yKHNlbGYsIG1hcmt1cCk6CisgICAgICAgICIiIlR1cm4gYW4gSFRNTCBmcmFnbWVudCBpbnRvIGEgZG9jdW1lbnQuCisKKyAgICAgICAgVGhlIGRldGFpbHMgZGVwZW5kIG9uIHRoZSBidWlsZGVyLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZGVmYXVsdF9idWlsZGVyLnRlc3RfZnJhZ21lbnRfdG9fZG9jdW1lbnQobWFya3VwKQorCisgICAgZGVmIGFzc2VydFNvdXBFcXVhbHMoc2VsZiwgdG9fcGFyc2UsIGNvbXBhcmVfcGFyc2VkX3RvPU5vbmUpOgorICAgICAgICBidWlsZGVyID0gc2VsZi5kZWZhdWx0X2J1aWxkZXIKKyAgICAgICAgb2JqID0gQmVhdXRpZnVsU291cCh0b19wYXJzZSwgYnVpbGRlcj1idWlsZGVyKQorICAgICAgICBpZiBjb21wYXJlX3BhcnNlZF90byBpcyBOb25lOgorICAgICAgICAgICAgY29tcGFyZV9wYXJzZWRfdG8gPSB0b19wYXJzZQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmRlY29kZSgpLCBzZWxmLmRvY3VtZW50X2Zvcihjb21wYXJlX3BhcnNlZF90bykpCisKKworY2xhc3MgSFRNTFRyZWVCdWlsZGVyU21va2VUZXN0KG9iamVjdCk6CisKKyAgICAiIiJBIGJhc2ljIHRlc3Qgb2YgYSB0cmVlYnVpbGRlcidzIGNvbXBldGVuY2UuCisKKyAgICBBbnkgSFRNTCB0cmVlYnVpbGRlciwgcHJlc2VudCBvciBmdXR1cmUsIHNob3VsZCBiZSBhYmxlIHRvIHBhc3MKKyAgICB0aGVzZSB0ZXN0cy4gV2l0aCBpbnZhbGlkIG1hcmt1cCwgdGhlcmUncyByb29tIGZvciBpbnRlcnByZXRhdGlvbiwKKyAgICBhbmQgZGlmZmVyZW50IHBhcnNlcnMgY2FuIGhhbmRsZSBpdCBkaWZmZXJlbnRseS4gQnV0IHdpdGggdGhlCisgICAgbWFya3VwIGluIHRoZXNlIHRlc3RzLCB0aGVyZSdzIG5vdCBtdWNoIHJvb20gZm9yIGludGVycHJldGF0aW9uLgorICAgICIiIgorCisgICAgZGVmIGFzc2VydERvY3R5cGVIYW5kbGVkKHNlbGYsIGRvY3R5cGVfZnJhZ21lbnQpOgorICAgICAgICAiIiJBc3NlcnQgdGhhdCBhIGdpdmVuIGRvY3R5cGUgc3RyaW5nIGlzIGhhbmRsZWQgY29ycmVjdGx5LiIiIgorICAgICAgICBkb2N0eXBlX3N0ciwgc291cCA9IHNlbGYuX2RvY3VtZW50X3dpdGhfZG9jdHlwZShkb2N0eXBlX2ZyYWdtZW50KQorCisgICAgICAgICMgTWFrZSBzdXJlIGEgRG9jdHlwZSBvYmplY3Qgd2FzIGNyZWF0ZWQuCisgICAgICAgIGRvY3R5cGUgPSBzb3VwLmNvbnRlbnRzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG9jdHlwZS5fX2NsYXNzX18sIERvY3R5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG9jdHlwZSwgZG9jdHlwZV9mcmFnbWVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc291cClbOmxlbihkb2N0eXBlX3N0cildLCBkb2N0eXBlX3N0cikKKworICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSBkb2N0eXBlIHdhcyBjb3JyZWN0bHkgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAgICAgICAjIHBhcnNlIHRyZWUgYW5kIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIGRvY3VtZW50IHBhcnNlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLnAuY29udGVudHNbMF0sICdmb28nKQorCisgICAgZGVmIF9kb2N1bWVudF93aXRoX2RvY3R5cGUoc2VsZiwgZG9jdHlwZV9mcmFnbWVudCk6CisgICAgICAgICIiIkdlbmVyYXRlIGFuZCBwYXJzZSBhIGRvY3VtZW50IHdpdGggdGhlIGdpdmVuIGRvY3R5cGUuIiIiCisgICAgICAgIGRvY3R5cGUgPSAnPCFET0NUWVBFICVzPicgJSBkb2N0eXBlX2ZyYWdtZW50CisgICAgICAgIG1hcmt1cCA9IGRvY3R5cGUgKyAnXG48cD5mb288L3A+JworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgcmV0dXJuIGRvY3R5cGUsIHNvdXAKKworICAgIGRlZiB0ZXN0X25vcm1hbF9kb2N0eXBlcyhzZWxmKToKKyAgICAgICAgIiIiTWFrZSBzdXJlIG5vcm1hbCwgZXZlcnlkYXkgSFRNTCBkb2N0eXBlcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RG9jdHlwZUhhbmRsZWQoImh0bWwiKQorICAgICAgICBzZWxmLmFzc2VydERvY3R5cGVIYW5kbGVkKAorICAgICAgICAgICAgJ2h0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiInKQorCisgICAgZGVmIHRlc3RfZW1wdHlfZG9jdHlwZShzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPCFET0NUWVBFPiIpCisgICAgICAgIGRvY3R5cGUgPSBzb3VwLmNvbnRlbnRzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiIsIGRvY3R5cGUuc3RyaXAoKSkKKworICAgIGRlZiB0ZXN0X3B1YmxpY19kb2N0eXBlX3dpdGhfdXJsKHNlbGYpOgorICAgICAgICBkb2N0eXBlID0gJ2h0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiJworICAgICAgICBzZWxmLmFzc2VydERvY3R5cGVIYW5kbGVkKGRvY3R5cGUpCisKKyAgICBkZWYgdGVzdF9zeXN0ZW1fZG9jdHlwZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnREb2N0eXBlSGFuZGxlZCgnZm9vIFNZU1RFTSAiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iJykKKworICAgIGRlZiB0ZXN0X25hbWVzcGFjZWRfc3lzdGVtX2RvY3R5cGUoc2VsZik6CisgICAgICAgICMgV2UgY2FuIGhhbmRsZSBhIG5hbWVzcGFjZWQgZG9jdHlwZSB3aXRoIGEgc3lzdGVtIElELgorICAgICAgICBzZWxmLmFzc2VydERvY3R5cGVIYW5kbGVkKCd4c2w6c3R5bGVzaGVldCBTWVNURU0gImh0bWxlbnQuZHRkIicpCisKKyAgICBkZWYgdGVzdF9uYW1lc3BhY2VkX3B1YmxpY19kb2N0eXBlKHNlbGYpOgorICAgICAgICAjIFRlc3QgYSBuYW1lc3BhY2VkIGRvY3R5cGUgd2l0aCBhIHB1YmxpYyBpZC4KKyAgICAgICAgc2VsZi5hc3NlcnREb2N0eXBlSGFuZGxlZCgneHNsOnN0eWxlc2hlZXQgUFVCTElDICJodG1sZW50LmR0ZCInKQorCisgICAgZGVmIHRlc3RfcmVhbF94aHRtbF9kb2N1bWVudChzZWxmKToKKyAgICAgICAgIiIiQSByZWFsIFhIVE1MIGRvY3VtZW50IHNob3VsZCBjb21lIG91dCBtb3JlIG9yIGxlc3MgdGhlIHNhbWUgYXMgaXQgd2VudCBpbi4iIiIKKyAgICAgICAgbWFya3VwID0gYiIiIjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPjx0aXRsZT5IZWxsby48L3RpdGxlPjwvaGVhZD4KKzxib2R5Pkdvb2RieWUuPC9ib2R5PgorPC9odG1sPiIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZW5jb2RlKCJ1dGYtOCIpLnJlcGxhY2UoYiJcbiIsIGIiIiksCisgICAgICAgICAgICBtYXJrdXAucmVwbGFjZShiIlxuIiwgYiIiKSkKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5KHNlbGYpOgorICAgICAgICAiIiJNYWtlIHN1cmUgeW91IGNhbiBjb3B5IHRoZSB0cmVlIGJ1aWxkZXIuCisKKyAgICAgICAgVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aGUgYnVpbGRlciBpcyBwYXJ0IG9mIGEKKyAgICAgICAgQmVhdXRpZnVsU291cCBvYmplY3QsIGFuZCB3ZSB3YW50IHRvIGJlIGFibGUgdG8gY29weSB0aGF0LgorICAgICAgICAiIiIKKyAgICAgICAgY29weS5kZWVwY29weShzZWxmLmRlZmF1bHRfYnVpbGRlcikKKworICAgIGRlZiB0ZXN0X3BfdGFnX2lzX25ldmVyX2VtcHR5X2VsZW1lbnQoc2VsZik6CisgICAgICAgICIiIkEgPHA+IHRhZyBpcyBuZXZlciBkZXNpZ25hdGVkIGFzIGFuIGVtcHR5LWVsZW1lbnQgdGFnLgorCisgICAgICAgIEV2ZW4gaWYgdGhlIG1hcmt1cCBzaG93cyBpdCBhcyBhbiBlbXB0eS1lbGVtZW50IHRhZywgaXQKKyAgICAgICAgc2hvdWxkbid0IGJlIHByZXNlbnRlZCB0aGF0IHdheS4KKyAgICAgICAgIiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxwLz4iKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNvdXAucC5pc19lbXB0eV9lbGVtZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzb3VwLnApLCAiPHA+PC9wPiIpCisKKyAgICBkZWYgdGVzdF91bmNsb3NlZF90YWdzX2dldF9jbG9zZWQoc2VsZik6CisgICAgICAgICIiIkEgdGFnIHRoYXQncyBub3QgY2xvc2VkIGJ5IHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50IHNob3VsZCBiZSBjbG9zZWQuCisKKyAgICAgICAgVGhpcyBhcHBsaWVzIHRvIGFsbCB0YWdzIGV4Y2VwdCBlbXB0eS1lbGVtZW50IHRhZ3MuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIjxwPiIsICI8cD48L3A+IikKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCI8Yj4iLCAiPGI+PC9iPiIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCI8YnI+IiwgIjxici8+IikKKworICAgIGRlZiB0ZXN0X2JyX2lzX2Fsd2F5c19lbXB0eV9lbGVtZW50X3RhZyhzZWxmKToKKyAgICAgICAgIiIiQSA8YnI+IHRhZyBpcyBkZXNpZ25hdGVkIGFzIGFuIGVtcHR5LWVsZW1lbnQgdGFnLgorCisgICAgICAgIFNvbWUgcGFyc2VycyB0cmVhdCA8YnI+PC9icj4gYXMgb25lIDxici8+IHRhZywgc29tZSBwYXJzZXJzIGFzCisgICAgICAgIHR3byB0YWdzLCBidXQgaXQgc2hvdWxkIGFsd2F5cyBiZSBhbiBlbXB0eS1lbGVtZW50IHRhZy4KKyAgICAgICAgIiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxicj48L2JyPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb3VwLmJyLmlzX2VtcHR5X2VsZW1lbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHNvdXAuYnIpLCAiPGJyLz4iKQorCisgICAgZGVmIHRlc3RfbmVzdGVkX2Zvcm1hdHRpbmdfZWxlbWVudHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygiPGVtPjxlbT48L2VtPjwvZW0+IikKKworICAgIGRlZiB0ZXN0X2NvbW1lbnQoc2VsZik6CisgICAgICAgICMgQ29tbWVudHMgYXJlIHJlcHJlc2VudGVkIGFzIENvbW1lbnQgb2JqZWN0cy4KKyAgICAgICAgbWFya3VwID0gIjxwPmZvbzwhLS1mb29iYXItLT5iYXo8L3A+IgorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMobWFya3VwKQorCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBjb21tZW50ID0gc291cC5maW5kKHRleHQ9ImZvb2JhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWVudC5fX2NsYXNzX18sIENvbW1lbnQpCisKKyAgICAgICAgIyBUaGUgY29tbWVudCBpcyBwcm9wZXJseSBpbnRlZ3JhdGVkIGludG8gdGhlIHRyZWUuCisgICAgICAgIGZvbyA9IHNvdXAuZmluZCh0ZXh0PSJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1lbnQsIGZvby5uZXh0X2VsZW1lbnQpCisgICAgICAgIGJheiA9IHNvdXAuZmluZCh0ZXh0PSJiYXoiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1lbnQsIGJhei5wcmV2aW91c19lbGVtZW50KQorCisgICAgZGVmIHRlc3RfcHJlc2VydmVkX3doaXRlc3BhY2VfaW5fcHJlX2FuZF90ZXh0YXJlYShzZWxmKToKKyAgICAgICAgIiIiV2hpdGVzcGFjZSBtdXN0IGJlIHByZXNlcnZlZCBpbiA8cHJlPiBhbmQgPHRleHRhcmVhPiB0YWdzLiIiIgorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIjxwcmU+ICAgPC9wcmU+IikKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCI8dGV4dGFyZWE+IHdvbyAgPC90ZXh0YXJlYT4iKQorCisgICAgZGVmIHRlc3RfbmVzdGVkX2lubGluZV9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgIiIiSW5saW5lIGVsZW1lbnRzIGNhbiBiZSBuZXN0ZWQgaW5kZWZpbml0ZWx5LiIiIgorICAgICAgICBiX3RhZyA9ICI8Yj5JbnNpZGUgYSBCIHRhZzwvYj4iCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscyhiX3RhZykKKworICAgICAgICBuZXN0ZWRfYl90YWcgPSAiPHA+QSA8aT5uZXN0ZWQgPGI+dGFnPC9iPjwvaT48L3A+IgorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMobmVzdGVkX2JfdGFnKQorCisgICAgICAgIGRvdWJsZV9uZXN0ZWRfYl90YWcgPSAiPHA+QSA8YT5kb3VibHkgPGk+bmVzdGVkIDxiPnRhZzwvYj48L2k+PC9hPjwvcD4iCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscyhuZXN0ZWRfYl90YWcpCisKKyAgICBkZWYgdGVzdF9uZXN0ZWRfYmxvY2tfbGV2ZWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgICIiIkJsb2NrIGVsZW1lbnRzIGNhbiBiZSBuZXN0ZWQuIiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoJzxibG9ja3F1b3RlPjxwPjxiPkZvbzwvYj48L3A+PC9ibG9ja3F1b3RlPicpCisgICAgICAgIGJsb2NrcXVvdGUgPSBzb3VwLmJsb2NrcXVvdGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChibG9ja3F1b3RlLnAuYi5zdHJpbmcsICdGb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJsb2NrcXVvdGUuYi5zdHJpbmcsICdGb28nKQorCisgICAgZGVmIHRlc3RfY29ycmVjdGx5X25lc3RlZF90YWJsZXMoc2VsZik6CisgICAgICAgICIiIk9uZSB0YWJsZSBjYW4gZ28gaW5zaWRlIGFub3RoZXIgb25lLiIiIgorICAgICAgICBtYXJrdXAgPSAoJzx0YWJsZSBpZD0iMSI+JworICAgICAgICAgICAgICAgICAgJzx0cj4nCisgICAgICAgICAgICAgICAgICAiPHRkPkhlcmUncyBhbm90aGVyIHRhYmxlOiIKKyAgICAgICAgICAgICAgICAgICc8dGFibGUgaWQ9IjIiPicKKyAgICAgICAgICAgICAgICAgICc8dHI+PHRkPmZvbzwvdGQ+PC90cj4nCisgICAgICAgICAgICAgICAgICAnPC90YWJsZT48L3RkPicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKAorICAgICAgICAgICAgbWFya3VwLAorICAgICAgICAgICAgJzx0YWJsZSBpZD0iMSI+PHRyPjx0ZD5IZXJlXCdzIGFub3RoZXIgdGFibGU6JworICAgICAgICAgICAgJzx0YWJsZSBpZD0iMiI+PHRyPjx0ZD5mb288L3RkPjwvdHI+PC90YWJsZT4nCisgICAgICAgICAgICAnPC90ZD48L3RyPjwvdGFibGU+JykKKworICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoCisgICAgICAgICAgICAiPHRhYmxlPjx0aGVhZD48dHI+PHRkPkZvbzwvdGQ+PC90cj48L3RoZWFkPiIKKyAgICAgICAgICAgICI8dGJvZHk+PHRyPjx0ZD5CYXI8L3RkPjwvdHI+PC90Ym9keT4iCisgICAgICAgICAgICAiPHRmb290Pjx0cj48dGQ+QmF6PC90ZD48L3RyPjwvdGZvb3Q+PC90YWJsZT4iKQorCisgICAgZGVmIHRlc3RfZGVlcGx5X25lc3RlZF9tdWx0aXZhbHVlZF9hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgICMgaHRtbDVsaWIgY2FuIHNldCB0aGUgYXR0cmlidXRlcyBvZiB0aGUgc2FtZSB0YWcgbWFueSB0aW1lcworICAgICAgICAjIGFzIGl0IHJlYXJyYW5nZXMgdGhlIHRyZWUuIFRoaXMgaGFzIGNhdXNlZCBwcm9ibGVtcyB3aXRoCisgICAgICAgICMgbXVsdGl2YWx1ZWQgYXR0cmlidXRlcy4KKyAgICAgICAgbWFya3VwID0gJzx0YWJsZT48ZGl2PjxkaXYgY2xhc3M9ImNzcyI+PC9kaXY+PC9kaXY+PC90YWJsZT4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsiY3NzIl0sIHNvdXAuZGl2LmRpdlsnY2xhc3MnXSkKKworICAgIGRlZiB0ZXN0X2FuZ2xlX2JyYWNrZXRzX2luX2F0dHJpYnV0ZV92YWx1ZXNfYXJlX2VzY2FwZWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygnPGEgYj0iPGE+Ij48L2E+JywgJzxhIGI9IiZsdDthJmd0OyI+PC9hPicpCisKKyAgICBkZWYgdGVzdF9lbnRpdGllc19pbl9hdHRyaWJ1dGVzX2NvbnZlcnRlZF90b191bmljb2RlKHNlbGYpOgorICAgICAgICBleHBlY3QgPSB1JzxwIGlkPSJwaVxOe0xBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggVElMREV9YXRhIj48L3A+JworICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoJzxwIGlkPSJwaSYjMjQxO2F0YSI+PC9wPicsIGV4cGVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCc8cCBpZD0icGkmI3hmMTthdGEiPjwvcD4nLCBleHBlY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygnPHAgaWQ9InBpJiNYZjE7YXRhIj48L3A+JywgZXhwZWN0KQorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoJzxwIGlkPSJwaSZudGlsZGU7YXRhIj48L3A+JywgZXhwZWN0KQorCisgICAgZGVmIHRlc3RfZW50aXRpZXNfaW5fdGV4dF9jb252ZXJ0ZWRfdG9fdW5pY29kZShzZWxmKToKKyAgICAgICAgZXhwZWN0ID0gdSc8cD5waVxOe0xBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggVElMREV9YXRhPC9wPicKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCI8cD5waSYjMjQxO2F0YTwvcD4iLCBleHBlY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygiPHA+cGkmI3hmMTthdGE8L3A+IiwgZXhwZWN0KQorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIjxwPnBpJiNYZjE7YXRhPC9wPiIsIGV4cGVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCI8cD5waSZudGlsZGU7YXRhPC9wPiIsIGV4cGVjdCkKKworICAgIGRlZiB0ZXN0X3F1b3RfZW50aXR5X2NvbnZlcnRlZF90b19xdW90YXRpb25fbWFyayhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCI8cD5JIHNhaWQgJnF1b3Q7Z29vZCBkYXkhJnF1b3Q7PC9wPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHA+SSBzYWlkICJnb29kIGRheSEiPC9wPicpCisKKyAgICBkZWYgdGVzdF9vdXRfb2ZfcmFuZ2VfZW50aXR5KHNlbGYpOgorICAgICAgICBleHBlY3QgPSB1IlxOe1JFUExBQ0VNRU5UIENIQVJBQ1RFUn0iCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygiJiMxMDAwMDAwMDAwMDAwMDsiLCBleHBlY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygiJiN4MTAwMDAwMDAwMDAwMDA7IiwgZXhwZWN0KQorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIiYjMTAwMDAwMDAwMDsiLCBleHBlY3QpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBhcnRfc3RyaW5ncyhzZWxmKToKKyAgICAgICAgIk1vc3RseSB0byBwcmV2ZW50IGEgcmVjdXJyZW5jZSBvZiBhIGJ1ZyBpbiB0aGUgaHRtbDVsaWIgdHJlZWJ1aWxkZXIuIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8aHRtbD48aDI+XG5mb288L2gyPjxwPjwvcD48L2h0bWw+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgicCIsIHNvdXAuaDIuc3RyaW5nLm5leHRfZWxlbWVudC5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJwIiwgc291cC5wLm5hbWUpCisKKyAgICBkZWYgdGVzdF9iYXNpY19uYW1lc3BhY2VzKHNlbGYpOgorICAgICAgICAiIiJQYXJzZXJzIGRvbid0IG5lZWQgdG8gKnVuZGVyc3RhbmQqIG5hbWVzcGFjZXMsIGJ1dCBhdCB0aGUKKyAgICAgICAgdmVyeSBsZWFzdCB0aGV5IHNob3VsZCBub3QgY2hva2Ugb24gbmFtZXNwYWNlcyBvciBsb3NlCisgICAgICAgIGRhdGEuIiIiCisKKyAgICAgICAgbWFya3VwID0gYic8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6bWF0aG1sPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIiB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48aGVhZD48L2hlYWQ+PGJvZHk+PG1hdGhtbDptc3FydD40PC9tYXRobWw6bXNxcnQ+PGIgc3ZnOmZpbGw9InJlZCI+PC9iPjwvYm9keT48L2h0bWw+JworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXJrdXAsIHNvdXAuZW5jb2RlKCkpCisgICAgICAgIGh0bWwgPSBzb3VwLmh0bWwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsIHNvdXAuaHRtbFsneG1sbnMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJywgc291cC5odG1sWyd4bWxuczptYXRobWwnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsIHNvdXAuaHRtbFsneG1sbnM6c3ZnJ10pCisKKyAgICBkZWYgdGVzdF9tdWx0aXZhbHVlZF9hdHRyaWJ1dGVfdmFsdWVfYmVjb21lc19saXN0KHNlbGYpOgorICAgICAgICBtYXJrdXAgPSBiJzxhIGNsYXNzPSJmb28gYmFyIj4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnZm9vJywgJ2JhciddLCBzb3VwLmFbJ2NsYXNzJ10pCisKKyAgICAjCisgICAgIyBHZW5lcmFsbHkgc3BlYWtpbmcsIHRlc3RzIGJlbG93IHRoaXMgcG9pbnQgYXJlIG1vcmUgdGVzdHMgb2YKKyAgICAjIEJlYXV0aWZ1bCBTb3VwIHRoYW4gdGVzdHMgb2YgdGhlIHRyZWUgYnVpbGRlcnMuIEJ1dCBwYXJzZXJzIGFyZQorICAgICMgd2VpcmQsIHNvIHdlIHJ1biB0aGVzZSB0ZXN0cyBzZXBhcmF0ZWx5IGZvciBldmVyeSB0cmVlIGJ1aWxkZXIKKyAgICAjIHRvIGRldGVjdCBhbnkgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGVtLgorICAgICMKKworICAgIGRlZiB0ZXN0X2Nhbl9wYXJzZV91bmljb2RlX2RvY3VtZW50KHNlbGYpOgorICAgICAgICAjIEEgc2VlbWluZ2x5IGlubm9jdW91cyBkb2N1bWVudC4uLiBidXQgaXQncyBpbiBVbmljb2RlISBBbmQKKyAgICAgICAgIyBpdCBjb250YWlucyBjaGFyYWN0ZXJzIHRoYXQgY2FuJ3QgYmUgcmVwcmVzZW50ZWQgaW4gdGhlCisgICAgICAgICMgZW5jb2RpbmcgZm91bmQgaW4gdGhlICBkZWNsYXJhdGlvbiEgVGhlIGhvcnJvciEKKyAgICAgICAgbWFya3VwID0gdSc8aHRtbD48aGVhZD48bWV0YSBlbmNvZGluZz0iZXVjLWpwIj48L2hlYWQ+PGJvZHk+U2FjclxOe0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEV9IGJsZXUhPC9ib2R5PicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdTYWNyXHhlOSBibGV1IScsIHNvdXAuYm9keS5zdHJpbmcpCisKKyAgICBkZWYgdGVzdF9zb3Vwc3RyYWluZXIoc2VsZik6CisgICAgICAgICIiIlBhcnNlcnMgc2hvdWxkIGJlIGFibGUgdG8gd29yayB3aXRoIFNvdXBTdHJhaW5lcnMuIiIiCisgICAgICAgIHN0cmFpbmVyID0gU291cFN0cmFpbmVyKCJiIikKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiQSA8Yj5ib2xkPC9iPiA8bWV0YS8+IDxpPnN0YXRlbWVudDwvaT4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlX29ubHk9c3RyYWluZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5kZWNvZGUoKSwgIjxiPmJvbGQ8L2I+IikKKworICAgIGRlZiB0ZXN0X3NpbmdsZV9xdW90ZV9hdHRyaWJ1dGVfdmFsdWVzX2JlY29tZV9kb3VibGVfcXVvdGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIjxmb28gYXR0cj0nYmFyJz48L2Zvbz4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxmb28gYXR0cj0iYmFyIj48L2Zvbz4nKQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlX3ZhbHVlc193aXRoX25lc3RlZF9xdW90ZXNfYXJlX2xlZnRfYWxvbmUoc2VsZik6CisgICAgICAgIHRleHQgPSAiIiI8Zm9vIGF0dHI9J2JhciAiYnJhd2xzIiBoYXBwZW4nPmE8L2Zvbz4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKHRleHQpCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfdmFsdWVzX3dpdGhfZG91YmxlX25lc3RlZF9xdW90ZXNfZ2V0X3F1b3RlZChzZWxmKToKKyAgICAgICAgdGV4dCA9ICIiIjxmb28gYXR0cj0nYmFyICJicmF3bHMiIGhhcHBlbic+YTwvZm9vPiIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKHRleHQpCisgICAgICAgIHNvdXAuZm9vWydhdHRyJ10gPSAnQnJhd2xzIGhhcHBlbiBhdCAiQm9iXCdzIEJhciInCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygKKyAgICAgICAgICAgIHNvdXAuZm9vLmRlY29kZSgpLAorICAgICAgICAgICAgIiIiPGZvbyBhdHRyPSJCcmF3bHMgaGFwcGVuIGF0ICZxdW90O0JvYlwncyBCYXImcXVvdDsiPmE8L2Zvbz4iIiIpCisKKyAgICBkZWYgdGVzdF9hbXBlcnNhbmRfaW5fYXR0cmlidXRlX3ZhbHVlX2dldHNfZXNjYXBlZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCc8dGhpcyBpcz0icmVhbGx5IG1lc3NlZCB1cCAmIHN0dWZmIj48L3RoaXM+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8dGhpcyBpcz0icmVhbGx5IG1lc3NlZCB1cCAmYW1wOyBzdHVmZiI+PC90aGlzPicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKAorICAgICAgICAgICAgJzxhIGhyZWY9Imh0dHA6Ly9leGFtcGxlLm9yZz9hPTEmYj0yOzMiPmZvbzwvYT4nLAorICAgICAgICAgICAgJzxhIGhyZWY9Imh0dHA6Ly9leGFtcGxlLm9yZz9hPTEmYW1wO2I9MjszIj5mb288L2E+JykKKworICAgIGRlZiB0ZXN0X2VzY2FwZWRfYW1wZXJzYW5kX2luX2F0dHJpYnV0ZV92YWx1ZV9pc19sZWZ0X2Fsb25lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoJzxhIGhyZWY9Imh0dHA6Ly9leGFtcGxlLm9yZz9hPTEmYW1wO2I9MjszIj48L2E+JykKKworICAgIGRlZiB0ZXN0X2VudGl0aWVzX2luX3N0cmluZ3NfY29udmVydGVkX2R1cmluZ19wYXJzaW5nKHNlbGYpOgorICAgICAgICAjIEJvdGggWE1MIGFuZCBIVE1MIGVudGl0aWVzIGFyZSBjb252ZXJ0ZWQgdG8gVW5pY29kZSBjaGFyYWN0ZXJzCisgICAgICAgICMgZHVyaW5nIHBhcnNpbmcuCisgICAgICAgIHRleHQgPSAiPHA+Jmx0OyZsdDtzYWNyJmVhY3V0ZTsmIzMyO2JsZXUhJmd0OyZndDs8L3A+IgorICAgICAgICBleHBlY3RlZCA9IHUiPHA+Jmx0OyZsdDtzYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSEmZ3Q7Jmd0OzwvcD4iCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscyh0ZXh0LCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3NtYXJ0X3F1b3Rlc19jb252ZXJ0ZWRfb25fdGhlX3dheV9pbihzZWxmKToKKyAgICAgICAgIyBNaWNyb3NvZnQgc21hcnQgcXVvdGVzIGFyZSBjb252ZXJ0ZWQgdG8gVW5pY29kZSBjaGFyYWN0ZXJzIGR1cmluZworICAgICAgICAjIHBhcnNpbmcuCisgICAgICAgIHF1b3RlID0gYiI8cD5ceDkxRm9vXHg5MjwvcD4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAocXVvdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLnAuc3RyaW5nLAorICAgICAgICAgICAgdSJcTntMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSS31Gb29cTntSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkt9IikKKworICAgIGRlZiB0ZXN0X25vbl9icmVha2luZ19zcGFjZXNfY29udmVydGVkX29uX3RoZV93YXlfaW4oc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPiZuYnNwOyZuYnNwOzwvYT4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYS5zdHJpbmcsIHUiXE57Tk8tQlJFQUsgU1BBQ0V9IiAqIDIpCisKKyAgICBkZWYgdGVzdF9lbnRpdGllc19jb252ZXJ0ZWRfb25fdGhlX3dheV9vdXQoc2VsZik6CisgICAgICAgIHRleHQgPSAiPHA+Jmx0OyZsdDtzYWNyJmVhY3V0ZTsmIzMyO2JsZXUhJmd0OyZndDs8L3A+IgorICAgICAgICBleHBlY3RlZCA9IHUiPHA+Jmx0OyZsdDtzYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSEmZ3Q7Jmd0OzwvcD4iLmVuY29kZSgidXRmLTgiKQorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5wLmVuY29kZSgidXRmLTgiKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9yZWFsX2lzb19sYXRpbl9kb2N1bWVudChzZWxmKToKKyAgICAgICAgIyBTbW9rZSB0ZXN0IG9mIGludGVycmVsYXRlZCBmdW5jdGlvbmFsaXR5LCB1c2luZyBhbgorICAgICAgICAjIGVhc3ktdG8tdW5kZXJzdGFuZCBkb2N1bWVudC4KKworICAgICAgICAjIEhlcmUgaXQgaXMgaW4gVW5pY29kZS4gTm90ZSB0aGF0IGl0IGNsYWltcyB0byBiZSBpbiBJU08tTGF0aW4tMS4KKyAgICAgICAgdW5pY29kZV9odG1sID0gdSc8aHRtbD48aGVhZD48bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLUxhdGluLTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtdHlwZSIvPjwvaGVhZD48Ym9keT48cD5TYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSE8L3A+PC9ib2R5PjwvaHRtbD4nCisKKyAgICAgICAgIyBUaGF0J3MgYmVjYXVzZSB3ZSdyZSBnb2luZyB0byBlbmNvZGUgaXQgaW50byBJU08tTGF0aW4tMSwgYW5kIHVzZQorICAgICAgICAjIHRoYXQgdG8gdGVzdC4KKyAgICAgICAgaXNvX2xhdGluX2h0bWwgPSB1bmljb2RlX2h0bWwuZW5jb2RlKCJpc28tODg1OS0xIikKKworICAgICAgICAjIFBhcnNlIHRoZSBJU08tTGF0aW4tMSBIVE1MLgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGlzb19sYXRpbl9odG1sKQorICAgICAgICAjIEVuY29kZSBpdCB0byBVVEYtOC4KKyAgICAgICAgcmVzdWx0ID0gc291cC5lbmNvZGUoInV0Zi04IikKKworICAgICAgICAjIFdoYXQgZG8gd2UgZXhwZWN0IHRoZSByZXN1bHQgdG8gbG9vayBsaWtlPyBXZWxsLCBpdCB3b3VsZAorICAgICAgICAjIGxvb2sgbGlrZSB1bmljb2RlX2h0bWwsIGV4Y2VwdCB0aGF0IHRoZSBNRVRBIHRhZyB3b3VsZCBzYXkKKyAgICAgICAgIyBVVEYtOCBpbnN0ZWFkIG9mIElTTy1MYXRpbi0xLgorICAgICAgICBleHBlY3RlZCA9IHVuaWNvZGVfaHRtbC5yZXBsYWNlKCJJU08tTGF0aW4tMSIsICJ1dGYtOCIpCisKKyAgICAgICAgIyBBbmQsIG9mIGNvdXJzZSwgaXQgd291bGQgYmUgaW4gVVRGLTgsIG5vdCBVbmljb2RlLgorICAgICAgICBleHBlY3RlZCA9IGV4cGVjdGVkLmVuY29kZSgidXRmLTgiKQorCisgICAgICAgICMgVGEtZGEhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3JlYWxfc2hpZnRfamlzX2RvY3VtZW50KHNlbGYpOgorICAgICAgICAjIFNtb2tlIHRlc3QgdG8gbWFrZSBzdXJlIHRoZSBwYXJzZXIgY2FuIGhhbmRsZSBhIGRvY3VtZW50IGluCisgICAgICAgICMgU2hpZnQtSklTIGVuY29kaW5nLCB3aXRob3V0IGNob2tpbmcuCisgICAgICAgIHNoaWZ0X2ppc19odG1sID0gKAorICAgICAgICAgICAgYic8aHRtbD48aGVhZD48L2hlYWQ+PGJvZHk+PHByZT4nCisgICAgICAgICAgICBiJ1x4ODJceGIxXHg4Mlx4ZWFceDgyXHhjZFNoaWZ0LUpJU1x4ODJceGM1XHg4M1JceDgxW1x4ODNmJworICAgICAgICAgICAgYidceDgzQlx4ODNceDkzXHg4M09ceDgyXHhiM1x4ODJceGVhXHg4Mlx4YmRceDkzXHhmYVx4OTZ7XHg4YycKKyAgICAgICAgICAgIGInXHhlYVx4ODJceGNjXHg4M3RceDgzQFx4ODNDXHg4M1x4OGJceDgyXHhjNVx4ODJceGI3XHg4MUInCisgICAgICAgICAgICBiJzwvcHJlPjwvYm9keT48L2h0bWw+JykKKyAgICAgICAgdW5pY29kZV9odG1sID0gc2hpZnRfamlzX2h0bWwuZGVjb2RlKCJzaGlmdC1qaXMiKQorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKHVuaWNvZGVfaHRtbCkKKworICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgcGFyc2UgdHJlZSBpcyBjb3JyZWN0bHkgZW5jb2RlZCB0byB2YXJpb3VzCisgICAgICAgICMgZW5jb2RpbmdzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZW5jb2RlKCJ1dGYtOCIpLCB1bmljb2RlX2h0bWwuZW5jb2RlKCJ1dGYtOCIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZW5jb2RlKCJldWNfanAiKSwgdW5pY29kZV9odG1sLmVuY29kZSgiZXVjX2pwIikpCisKKyAgICBkZWYgdGVzdF9yZWFsX2hlYnJld19kb2N1bWVudChzZWxmKToKKyAgICAgICAgIyBBIHJlYWwtd29ybGQgdGVzdCB0byBtYWtlIHN1cmUgd2UgY2FuIGNvbnZlcnQgSVNPLTg4NTktOSAoYQorICAgICAgICAjIEhlYnJldyBlbmNvZGluZykgdG8gVVRGLTguCisgICAgICAgIGhlYnJld19kb2N1bWVudCA9IGInPGh0bWw+PGhlYWQ+PHRpdGxlPkhlYnJldyAoSVNPIDg4NTktOCkgaW4gVmlzdWFsIERpcmVjdGlvbmFsaXR5PC90aXRsZT48L2hlYWQ+PGJvZHk+PGgxPkhlYnJldyAoSVNPIDg4NTktOCkgaW4gVmlzdWFsIERpcmVjdGlvbmFsaXR5PC9oMT5ceGVkXHhlNVx4ZWNceGY5PC9ib2R5PjwvaHRtbD4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoCisgICAgICAgICAgICBoZWJyZXdfZG9jdW1lbnQsIGZyb21fZW5jb2Rpbmc9Imlzbzg4NTktOCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5vcmlnaW5hbF9lbmNvZGluZywgJ2lzbzg4NTktOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmVuY29kZSgndXRmLTgnKSwKKyAgICAgICAgICAgIGhlYnJld19kb2N1bWVudC5kZWNvZGUoImlzbzg4NTktOCIpLmVuY29kZSgidXRmLTgiKSkKKworICAgIGRlZiB0ZXN0X21ldGFfdGFnX3JlZmxlY3RzX2N1cnJlbnRfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgICMgSGVyZSdzIHRoZSA8bWV0YT4gdGFnIHNheWluZyB0aGF0IGEgZG9jdW1lbnQgaXMKKyAgICAgICAgIyBlbmNvZGVkIGluIFNoaWZ0LUpJUy4KKyAgICAgICAgbWV0YV90YWcgPSAoJzxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD14LXNqaXMiICcKKyAgICAgICAgICAgICAgICAgICAgJ2h0dHAtZXF1aXY9IkNvbnRlbnQtdHlwZSIvPicpCisKKyAgICAgICAgIyBIZXJlJ3MgYSBkb2N1bWVudCBpbmNvcnBvcmF0aW5nIHRoYXQgbWV0YSB0YWcuCisgICAgICAgIHNoaWZ0X2ppc19odG1sID0gKAorICAgICAgICAgICAgJzxodG1sPjxoZWFkPlxuJXNcbicKKyAgICAgICAgICAgICc8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LWxhbmd1YWdlIiBjb250ZW50PSJqYSIvPicKKyAgICAgICAgICAgICc8L2hlYWQ+PGJvZHk+U2hpZnQtSklTIG1hcmt1cCBnb2VzIGhlcmUuJykgJSBtZXRhX3RhZworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKHNoaWZ0X2ppc19odG1sKQorCisgICAgICAgICMgUGFyc2UgdGhlIGRvY3VtZW50LCBhbmQgdGhlIGNoYXJzZXQgaXMgc2VlbWluZ2x5IHVuYWZmZWN0ZWQuCisgICAgICAgIHBhcnNlZF9tZXRhID0gc291cC5maW5kKCdtZXRhJywgeydodHRwLWVxdWl2JzogJ0NvbnRlbnQtdHlwZSd9KQorICAgICAgICBjb250ZW50ID0gcGFyc2VkX21ldGFbJ2NvbnRlbnQnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd0ZXh0L2h0bWw7IGNoYXJzZXQ9eC1zamlzJywgY29udGVudCkKKworICAgICAgICAjIEJ1dCB0aGF0IHZhbHVlIGlzIGFjdHVhbGx5IGEgQ29udGVudE1ldGFBdHRyaWJ1dGVWYWx1ZSBvYmplY3QuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGNvbnRlbnQsIENvbnRlbnRNZXRhQXR0cmlidXRlVmFsdWUpKQorCisgICAgICAgICMgQW5kIGl0IHdpbGwgdGFrZSBvbiBhIHZhbHVlIHRoYXQgcmVmbGVjdHMgaXRzIGN1cnJlbnQKKyAgICAgICAgIyBlbmNvZGluZy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgndGV4dC9odG1sOyBjaGFyc2V0PXV0ZjgnLCBjb250ZW50LmVuY29kZSgidXRmOCIpKQorCisgICAgICAgICMgRm9yIHRoZSByZXN0IG9mIHRoZSBzdG9yeSwgc2VlIFRlc3RTdWJzdGl0dXRpb25zIGluCisgICAgICAgICMgdGVzdF90cmVlLnB5LgorCisgICAgZGVmIHRlc3RfaHRtbDVfc3R5bGVfbWV0YV90YWdfcmVmbGVjdHNfY3VycmVudF9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgIyBIZXJlJ3MgdGhlIDxtZXRhPiB0YWcgc2F5aW5nIHRoYXQgYSBkb2N1bWVudCBpcworICAgICAgICAjIGVuY29kZWQgaW4gU2hpZnQtSklTLgorICAgICAgICBtZXRhX3RhZyA9ICgnPG1ldGEgaWQ9ImVuY29kaW5nIiBjaGFyc2V0PSJ4LXNqaXMiIC8+JykKKworICAgICAgICAjIEhlcmUncyBhIGRvY3VtZW50IGluY29ycG9yYXRpbmcgdGhhdCBtZXRhIHRhZy4KKyAgICAgICAgc2hpZnRfamlzX2h0bWwgPSAoCisgICAgICAgICAgICAnPGh0bWw+PGhlYWQ+XG4lc1xuJworICAgICAgICAgICAgJzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtbGFuZ3VhZ2UiIGNvbnRlbnQ9ImphIi8+JworICAgICAgICAgICAgJzwvaGVhZD48Ym9keT5TaGlmdC1KSVMgbWFya3VwIGdvZXMgaGVyZS4nKSAlIG1ldGFfdGFnCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoc2hpZnRfamlzX2h0bWwpCisKKyAgICAgICAgIyBQYXJzZSB0aGUgZG9jdW1lbnQsIGFuZCB0aGUgY2hhcnNldCBpcyBzZWVtaW5nbHkgdW5hZmZlY3RlZC4KKyAgICAgICAgcGFyc2VkX21ldGEgPSBzb3VwLmZpbmQoJ21ldGEnLCBpZD0iZW5jb2RpbmciKQorICAgICAgICBjaGFyc2V0ID0gcGFyc2VkX21ldGFbJ2NoYXJzZXQnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd4LXNqaXMnLCBjaGFyc2V0KQorCisgICAgICAgICMgQnV0IHRoYXQgdmFsdWUgaXMgYWN0dWFsbHkgYSBDaGFyc2V0TWV0YUF0dHJpYnV0ZVZhbHVlIG9iamVjdC4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoY2hhcnNldCwgQ2hhcnNldE1ldGFBdHRyaWJ1dGVWYWx1ZSkpCisKKyAgICAgICAgIyBBbmQgaXQgd2lsbCB0YWtlIG9uIGEgdmFsdWUgdGhhdCByZWZsZWN0cyBpdHMgY3VycmVudAorICAgICAgICAjIGVuY29kaW5nLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd1dGY4JywgY2hhcnNldC5lbmNvZGUoInV0ZjgiKSkKKworICAgIGRlZiB0ZXN0X3RhZ193aXRoX25vX2F0dHJpYnV0ZXNfY2FuX2hhdmVfYXR0cmlidXRlc19hZGRlZChzZWxmKToKKyAgICAgICAgZGF0YSA9IHNlbGYuc291cCgiPGE+dGV4dDwvYT4iKQorICAgICAgICBkYXRhLmFbJ2ZvbyddID0gJ2JhcicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnPGEgZm9vPSJiYXIiPnRleHQ8L2E+JywgZGF0YS5hLmRlY29kZSgpKQorCitjbGFzcyBYTUxUcmVlQnVpbGRlclNtb2tlVGVzdChvYmplY3QpOgorCisgICAgZGVmIHRlc3RfZG9jc3RyaW5nX2dlbmVyYXRlZChzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPHJvb3QvPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmVuY29kZSgpLCBiJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+XG48cm9vdC8+JykKKworICAgIGRlZiB0ZXN0X3JlYWxfeGh0bWxfZG9jdW1lbnQoc2VsZik6CisgICAgICAgICIiIkEgcmVhbCBYSFRNTCBkb2N1bWVudCBzaG91bGQgY29tZSBvdXQgKmV4YWN0bHkqIHRoZSBzYW1lIGFzIGl0IHdlbnQgaW4uIiIiCisgICAgICAgIG1hcmt1cCA9IGIiIiI8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD48dGl0bGU+SGVsbG8uPC90aXRsZT48L2hlYWQ+Cis8Ym9keT5Hb29kYnllLjwvYm9keT4KKzwvaHRtbD4iIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmVuY29kZSgidXRmLTgiKSwgbWFya3VwKQorCisgICAgZGVmIHRlc3RfZm9ybWF0dGVyX3Byb2Nlc3Nlc19zY3JpcHRfdGFnX2Zvcl94bWxfZG9jdW1lbnRzKHNlbGYpOgorICAgICAgICBkb2MgPSAiIiIKKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICA8L3NjcmlwdD4KKyIiIgorICAgICAgICBzb3VwID0gQmVhdXRpZnVsU291cChkb2MsICJ4bWwiKQorICAgICAgICAjIGx4bWwgd291bGQgaGF2ZSBzdHJpcHBlZCB0aGlzIHdoaWxlIHBhcnNpbmcsIGJ1dCB3ZSBjYW4gYWRkCisgICAgICAgICMgaXQgbGF0ZXIuCisgICAgICAgIHNvdXAuc2NyaXB0LnN0cmluZyA9ICdjb25zb2xlLmxvZygiPCA8IGhleSA+ID4gIik7JworICAgICAgICBlbmNvZGVkID0gc291cC5lbmNvZGUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYiImbHQ7ICZsdDsgaGV5ICZndDsgJmd0OyIgaW4gZW5jb2RlZCkKKworICAgIGRlZiB0ZXN0X2Nhbl9wYXJzZV91bmljb2RlX2RvY3VtZW50KHNlbGYpOgorICAgICAgICBtYXJrdXAgPSB1Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9ImV1Yy1qcCI+PHJvb3Q+U2FjclxOe0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEV9IGJsZXUhPC9yb290PicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdTYWNyXHhlOSBibGV1IScsIHNvdXAucm9vdC5zdHJpbmcpCisKKyAgICBkZWYgdGVzdF9wb3BwaW5nX25hbWVzcGFjZWRfdGFnKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSAnPHJzcyB4bWxuczpkYz0iZm9vIj48ZGM6Y3JlYXRvcj5iPC9kYzpjcmVhdG9yPjxkYzpkYXRlPjIwMTItMDctMDJUMjA6MzM6NDJaPC9kYzpkYXRlPjxkYzpyaWdodHM+YzwvZGM6cmlnaHRzPjxpbWFnZT5kPC9pbWFnZT48L3Jzcz4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgdW5pY29kZShzb3VwLnJzcyksIG1hcmt1cCkKKworICAgIGRlZiB0ZXN0X2RvY3N0cmluZ19pbmNsdWRlc19jb3JyZWN0X2VuY29kaW5nKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8cm9vdC8+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZW5jb2RlKCJsYXRpbjEiKSwKKyAgICAgICAgICAgIGInPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ibGF0aW4xIj8+XG48cm9vdC8+JykKKworICAgIGRlZiB0ZXN0X2xhcmdlX3htbF9kb2N1bWVudChzZWxmKToKKyAgICAgICAgIiIiQSBsYXJnZSBYTUwgZG9jdW1lbnQgc2hvdWxkIGNvbWUgb3V0IHRoZSBzYW1lIGFzIGl0IHdlbnQgaW4uIiIiCisgICAgICAgIG1hcmt1cCA9IChiJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+XG48cm9vdD4nCisgICAgICAgICAgICAgICAgICArIGInMCcgKiAoMioqMTIpCisgICAgICAgICAgICAgICAgICArIGInPC9yb290PicpCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZW5jb2RlKCJ1dGYtOCIpLCBtYXJrdXApCisKKworICAgIGRlZiB0ZXN0X3RhZ3NfYXJlX2VtcHR5X2VsZW1lbnRfaWZfYW5kX29ubHlfaWZfdGhleV9hcmVfZW1wdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygiPHA+IiwgIjxwLz4iKQorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIjxwPmZvbzwvcD4iKQorCisgICAgZGVmIHRlc3RfbmFtZXNwYWNlc19hcmVfcHJlc2VydmVkKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSAnPHJvb3QgeG1sbnM6YT0iaHR0cDovL2V4YW1wbGUuY29tLyIgeG1sbnM6Yj0iaHR0cDovL2V4YW1wbGUubmV0LyI+PGE6Zm9vPlRoaXMgdGFnIGlzIGluIHRoZSBhIG5hbWVzcGFjZTwvYTpmb28+PGI6Zm9vPlRoaXMgdGFnIGlzIGluIHRoZSBiIG5hbWVzcGFjZTwvYjpmb28+PC9yb290PicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHJvb3QgPSBzb3VwLnJvb3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiaHR0cDovL2V4YW1wbGUuY29tLyIsIHJvb3RbJ3htbG5zOmEnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiaHR0cDovL2V4YW1wbGUubmV0LyIsIHJvb3RbJ3htbG5zOmInXSkKKworICAgIGRlZiB0ZXN0X2Nsb3NpbmdfbmFtZXNwYWNlZF90YWcoc2VsZik6CisgICAgICAgIG1hcmt1cCA9ICc8cCB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPjxkYzpkYXRlPjIwMDEwNTA0PC9kYzpkYXRlPjwvcD4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoc291cC5wKSwgbWFya3VwKQorCisgICAgZGVmIHRlc3RfbmFtZXNwYWNlZF9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSAnPGZvbyB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj48YmFyIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIvPjwvZm9vPicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZShzb3VwLmZvbyksIG1hcmt1cCkKKworICAgIGRlZiB0ZXN0X25hbWVzcGFjZWRfYXR0cmlidXRlc194bWxfbmFtZXNwYWNlKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSAnPGZvbyB4bWw6bGFuZz0iZnIiPmJhcjwvZm9vPicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZShzb3VwLmZvbyksIG1hcmt1cCkKKworY2xhc3MgSFRNTDVUcmVlQnVpbGRlclNtb2tlVGVzdChIVE1MVHJlZUJ1aWxkZXJTbW9rZVRlc3QpOgorICAgICIiIlNtb2tlIHRlc3QgZm9yIGEgdHJlZSBidWlsZGVyIHRoYXQgc3VwcG9ydHMgSFRNTDUuIiIiCisKKyAgICBkZWYgdGVzdF9yZWFsX3hodG1sX2RvY3VtZW50KHNlbGYpOgorICAgICAgICAjIFNpbmNlIFhIVE1MIGlzIG5vdCBIVE1MNSwgSFRNTDUgcGFyc2VycyBhcmUgbm90IHRlc3RlZCB0byBoYW5kbGUKKyAgICAgICAgIyBYSFRNTCBkb2N1bWVudHMgaW4gYW55IHBhcnRpY3VsYXIgd2F5LgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9odG1sX3RhZ3NfaGF2ZV9uYW1lc3BhY2Uoc2VsZik6CisgICAgICAgIG1hcmt1cCA9ICI8YT4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwgc291cC5hLm5hbWVzcGFjZSkKKworICAgIGRlZiB0ZXN0X3N2Z190YWdzX2hhdmVfbmFtZXNwYWNlKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSAnPHN2Zz48Y2lyY2xlLz48L3N2Zz4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBuYW1lc3BhY2UgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZXNwYWNlLCBzb3VwLnN2Zy5uYW1lc3BhY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZXNwYWNlLCBzb3VwLmNpcmNsZS5uYW1lc3BhY2UpCisKKworICAgIGRlZiB0ZXN0X21hdGhtbF90YWdzX2hhdmVfbmFtZXNwYWNlKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSAnPG1hdGg+PG1zcXJ0PjU8L21zcXJ0PjwvbWF0aD4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBuYW1lc3BhY2UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lc3BhY2UsIHNvdXAubWF0aC5uYW1lc3BhY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZXNwYWNlLCBzb3VwLm1zcXJ0Lm5hbWVzcGFjZSkKKworICAgIGRlZiB0ZXN0X3htbF9kZWNsYXJhdGlvbl9iZWNvbWVzX2NvbW1lbnQoc2VsZik6CisgICAgICAgIG1hcmt1cCA9ICc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PjxodG1sPjwvaHRtbD4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzb3VwLmNvbnRlbnRzWzBdLCBDb21tZW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmNvbnRlbnRzWzBdLCAnP3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiaHRtbCIsIHNvdXAuY29udGVudHNbMF0ubmV4dF9lbGVtZW50Lm5hbWUpCisKK2RlZiBza2lwSWYoY29uZGl0aW9uLCByZWFzb24pOgorICAgZGVmIG5vdGhpbmcodGVzdCwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICByZXR1cm4gTm9uZQorCisgICBkZWYgZGVjb3JhdG9yKHRlc3RfaXRlbSk6CisgICAgICAgaWYgY29uZGl0aW9uOgorICAgICAgICAgICByZXR1cm4gbm90aGluZworICAgICAgIGVsc2U6CisgICAgICAgICAgIHJldHVybiB0ZXN0X2l0ZW0KKworICAgcmV0dXJuIGRlY29yYXRvcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDJjOGNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvX19pbml0X18ucHkKQEAgLTAsMCArMSBAQAorIlRoZSBiZWF1dGlmdWxzb3VwIHRlc3RzLiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfYnVpbGRlcl9yZWdpc3RyeS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfYnVpbGRlcl9yZWdpc3RyeS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmFkMTBmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9idWlsZGVyX3JlZ2lzdHJ5LnB5CkBAIC0wLDAgKzEsMTQxIEBACisiIiJUZXN0cyBvZiB0aGUgYnVpbGRlciByZWdpc3RyeS4iIiIKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYnM0IGltcG9ydCBCZWF1dGlmdWxTb3VwCitmcm9tIGJzNC5idWlsZGVyIGltcG9ydCAoCisgICAgYnVpbGRlcl9yZWdpc3RyeSBhcyByZWdpc3RyeSwKKyAgICBIVE1MUGFyc2VyVHJlZUJ1aWxkZXIsCisgICAgVHJlZUJ1aWxkZXJSZWdpc3RyeSwKKykKKwordHJ5OgorICAgIGZyb20gYnM0LmJ1aWxkZXIgaW1wb3J0IEhUTUw1VHJlZUJ1aWxkZXIKKyAgICBIVE1MNUxJQl9QUkVTRU5UID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIEhUTUw1TElCX1BSRVNFTlQgPSBGYWxzZQorCit0cnk6CisgICAgZnJvbSBiczQuYnVpbGRlciBpbXBvcnQgKAorICAgICAgICBMWE1MVHJlZUJ1aWxkZXJGb3JYTUwsCisgICAgICAgIExYTUxUcmVlQnVpbGRlciwKKyAgICAgICAgKQorICAgIExYTUxfUFJFU0VOVCA9IFRydWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBMWE1MX1BSRVNFTlQgPSBGYWxzZQorCisKK2NsYXNzIEJ1aWx0SW5SZWdpc3RyeVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhlIGJ1aWx0LWluIHJlZ2lzdHJ5IHdpdGggdGhlIGRlZmF1bHQgYnVpbGRlcnMgcmVnaXN0ZXJlZC4iIiIKKworICAgIGRlZiB0ZXN0X2NvbWJpbmF0aW9uKHNlbGYpOgorICAgICAgICBpZiBMWE1MX1BSRVNFTlQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZ2lzdHJ5Lmxvb2t1cCgnZmFzdCcsICdodG1sJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExYTUxUcmVlQnVpbGRlcikKKworICAgICAgICBpZiBMWE1MX1BSRVNFTlQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZ2lzdHJ5Lmxvb2t1cCgncGVybWlzc2l2ZScsICd4bWwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFhNTFRyZWVCdWlsZGVyRm9yWE1MKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZ2lzdHJ5Lmxvb2t1cCgnc3RyaWN0JywgJ2h0bWwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSFRNTFBhcnNlclRyZWVCdWlsZGVyKQorICAgICAgICBpZiBIVE1MNUxJQl9QUkVTRU5UOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWdpc3RyeS5sb29rdXAoJ2h0bWw1bGliJywgJ2h0bWwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUTUw1VHJlZUJ1aWxkZXIpCisKKyAgICBkZWYgdGVzdF9sb29rdXBfYnlfbWFya3VwX3R5cGUoc2VsZik6CisgICAgICAgIGlmIExYTUxfUFJFU0VOVDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVnaXN0cnkubG9va3VwKCdodG1sJyksIExYTUxUcmVlQnVpbGRlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVnaXN0cnkubG9va3VwKCd4bWwnKSwgTFhNTFRyZWVCdWlsZGVyRm9yWE1MKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWdpc3RyeS5sb29rdXAoJ3htbCcpLCBOb25lKQorICAgICAgICAgICAgaWYgSFRNTDVMSUJfUFJFU0VOVDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZ2lzdHJ5Lmxvb2t1cCgnaHRtbCcpLCBIVE1MNVRyZWVCdWlsZGVyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZ2lzdHJ5Lmxvb2t1cCgnaHRtbCcpLCBIVE1MUGFyc2VyVHJlZUJ1aWxkZXIpCisKKyAgICBkZWYgdGVzdF9uYW1lZF9saWJyYXJ5KHNlbGYpOgorICAgICAgICBpZiBMWE1MX1BSRVNFTlQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZ2lzdHJ5Lmxvb2t1cCgnbHhtbCcsICd4bWwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFhNTFRyZWVCdWlsZGVyRm9yWE1MKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWdpc3RyeS5sb29rdXAoJ2x4bWwnLCAnaHRtbCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMWE1MVHJlZUJ1aWxkZXIpCisgICAgICAgIGlmIEhUTUw1TElCX1BSRVNFTlQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZ2lzdHJ5Lmxvb2t1cCgnaHRtbDVsaWInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUTUw1VHJlZUJ1aWxkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWdpc3RyeS5sb29rdXAoJ2h0bWwucGFyc2VyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhUTUxQYXJzZXJUcmVlQnVpbGRlcikKKworICAgIGRlZiB0ZXN0X2JlYXV0aWZ1bHNvdXBfY29uc3RydWN0b3JfZG9lc19sb29rdXAoc2VsZik6CisgICAgICAgICMgWW91IGNhbiBwYXNzIGluIGEgc3RyaW5nLgorICAgICAgICBCZWF1dGlmdWxTb3VwKCIiLCBmZWF0dXJlcz0iaHRtbCIpCisgICAgICAgICMgT3IgYSBsaXN0IG9mIHN0cmluZ3MuCisgICAgICAgIEJlYXV0aWZ1bFNvdXAoIiIsIGZlYXR1cmVzPVsiaHRtbCIsICJmYXN0Il0pCisKKyAgICAgICAgIyBZb3UnbGwgZ2V0IGFuIGV4Y2VwdGlvbiBpZiBCUyBjYW4ndCBmaW5kIGFuIGFwcHJvcHJpYXRlCisgICAgICAgICMgYnVpbGRlci4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgQmVhdXRpZnVsU291cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsIGZlYXR1cmVzPSJuby1zdWNoLWZlYXR1cmUiKQorCitjbGFzcyBSZWdpc3RyeVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhlIFRyZWVCdWlsZGVyUmVnaXN0cnkgY2xhc3MgaW4gZ2VuZXJhbC4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5yZWdpc3RyeSA9IFRyZWVCdWlsZGVyUmVnaXN0cnkoKQorCisgICAgZGVmIGJ1aWxkZXJfZm9yX2ZlYXR1cmVzKHNlbGYsICpmZWF0dXJlX2xpc3QpOgorICAgICAgICBjbHMgPSB0eXBlKCdCdWlsZGVyXycgKyAnXycuam9pbihmZWF0dXJlX2xpc3QpLAorICAgICAgICAgICAgICAgICAgIChvYmplY3QsKSwgeydmZWF0dXJlcycgOiBmZWF0dXJlX2xpc3R9KQorCisgICAgICAgIHNlbGYucmVnaXN0cnkucmVnaXN0ZXIoY2xzKQorICAgICAgICByZXR1cm4gY2xzCisKKyAgICBkZWYgdGVzdF9yZWdpc3Rlcl93aXRoX25vX2ZlYXR1cmVzKHNlbGYpOgorICAgICAgICBidWlsZGVyID0gc2VsZi5idWlsZGVyX2Zvcl9mZWF0dXJlcygpCisKKyAgICAgICAgIyBTaW5jZSB0aGUgYnVpbGRlciBhZHZlcnRpc2VzIG5vIGZlYXR1cmVzLCB5b3UgY2FuJ3QgZmluZCBpdAorICAgICAgICAjIGJ5IGxvb2tpbmcgdXAgZmVhdHVyZXMuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWdpc3RyeS5sb29rdXAoJ2ZvbycpLCBOb25lKQorCisgICAgICAgICMgQnV0IHlvdSBjYW4gZmluZCBpdCBieSBkb2luZyBhIGxvb2t1cCB3aXRoIG5vIGZlYXR1cmVzLCBpZgorICAgICAgICAjIHRoaXMgaGFwcGVucyB0byBiZSB0aGUgb25seSByZWdpc3RlcmVkIGJ1aWxkZXIuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWdpc3RyeS5sb29rdXAoKSwgYnVpbGRlcikKKworICAgIGRlZiB0ZXN0X3JlZ2lzdGVyX3dpdGhfZmVhdHVyZXNfbWFrZXNfbG9va3VwX3N1Y2NlZWQoc2VsZik6CisgICAgICAgIGJ1aWxkZXIgPSBzZWxmLmJ1aWxkZXJfZm9yX2ZlYXR1cmVzKCdmb28nLCAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJlZ2lzdHJ5Lmxvb2t1cCgnZm9vJyksIGJ1aWxkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWdpc3RyeS5sb29rdXAoJ2JhcicpLCBidWlsZGVyKQorCisgICAgZGVmIHRlc3RfbG9va3VwX2ZhaWxzX3doZW5fbm9fYnVpbGRlcl9pbXBsZW1lbnRzX2ZlYXR1cmUoc2VsZik6CisgICAgICAgIGJ1aWxkZXIgPSBzZWxmLmJ1aWxkZXJfZm9yX2ZlYXR1cmVzKCdmb28nLCAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJlZ2lzdHJ5Lmxvb2t1cCgnYmF6JyksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9sb29rdXBfZ2V0c19tb3N0X3JlY2VudF9yZWdpc3RyYXRpb25fd2hlbl9ub19mZWF0dXJlX3NwZWNpZmllZChzZWxmKToKKyAgICAgICAgYnVpbGRlcjEgPSBzZWxmLmJ1aWxkZXJfZm9yX2ZlYXR1cmVzKCdmb28nKQorICAgICAgICBidWlsZGVyMiA9IHNlbGYuYnVpbGRlcl9mb3JfZmVhdHVyZXMoJ2JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWdpc3RyeS5sb29rdXAoKSwgYnVpbGRlcjIpCisKKyAgICBkZWYgdGVzdF9sb29rdXBfZmFpbHNfd2hlbl9ub190cmVlX2J1aWxkZXJzX3JlZ2lzdGVyZWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWdpc3RyeS5sb29rdXAoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2xvb2t1cF9nZXRzX21vc3RfcmVjZW50X2J1aWxkZXJfc3VwcG9ydGluZ19hbGxfZmVhdHVyZXMoc2VsZik6CisgICAgICAgIGhhc19vbmUgPSBzZWxmLmJ1aWxkZXJfZm9yX2ZlYXR1cmVzKCdmb28nKQorICAgICAgICBoYXNfdGhlX290aGVyID0gc2VsZi5idWlsZGVyX2Zvcl9mZWF0dXJlcygnYmFyJykKKyAgICAgICAgaGFzX2JvdGhfZWFybHkgPSBzZWxmLmJ1aWxkZXJfZm9yX2ZlYXR1cmVzKCdmb28nLCAnYmFyJywgJ2JheicpCisgICAgICAgIGhhc19ib3RoX2xhdGUgPSBzZWxmLmJ1aWxkZXJfZm9yX2ZlYXR1cmVzKCdmb28nLCAnYmFyJywgJ3F1dXgnKQorICAgICAgICBsYWNrc19vbmUgPSBzZWxmLmJ1aWxkZXJfZm9yX2ZlYXR1cmVzKCdiYXInKQorICAgICAgICBoYXNfdGhlX290aGVyID0gc2VsZi5idWlsZGVyX2Zvcl9mZWF0dXJlcygnZm9vJykKKworICAgICAgICAjIFRoZXJlIGFyZSB0d28gYnVpbGRlcnMgZmVhdHVyaW5nICdmb28nIGFuZCAnYmFyJywgYnV0CisgICAgICAgICMgdGhlIG9uZSB0aGF0IGFsc28gZmVhdHVyZXMgJ3F1dXgnIHdhcyByZWdpc3RlcmVkIGxhdGVyLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucmVnaXN0cnkubG9va3VwKCdmb28nLCAnYmFyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc19ib3RoX2xhdGUpCisKKyAgICAgICAgIyBUaGVyZSBpcyBvbmx5IG9uZSBidWlsZGVyIGZlYXR1cmluZyAnZm9vJywgJ2JhcicsIGFuZCAnYmF6Jy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJlZ2lzdHJ5Lmxvb2t1cCgnZm9vJywgJ2JhcicsICdiYXonKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzX2JvdGhfZWFybHkpCisKKyAgICBkZWYgdGVzdF9sb29rdXBfZmFpbHNfd2hlbl9jYW5ub3RfcmVjb25jaWxlX3JlcXVlc3RlZF9mZWF0dXJlcyhzZWxmKToKKyAgICAgICAgYnVpbGRlcjEgPSBzZWxmLmJ1aWxkZXJfZm9yX2ZlYXR1cmVzKCdmb28nLCAnYmFyJykKKyAgICAgICAgYnVpbGRlcjIgPSBzZWxmLmJ1aWxkZXJfZm9yX2ZlYXR1cmVzKCdmb28nLCAnYmF6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJlZ2lzdHJ5Lmxvb2t1cCgnYmFyJywgJ2JheicpLCBOb25lKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9kb2NzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9kb2NzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViOWY2NzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X2RvY3MucHkKQEAgLTAsMCArMSwzNiBAQAorIlRlc3QgaGFybmVzcyBmb3IgZG9jdGVzdHMuIgorCisjIHB5bGludDogZGlzYWJsZS1tc2c9RTA2MTEsVzAxNDIKKworX19tZXRhY2xhc3NfXyA9IHR5cGUKK19fYWxsX18gPSBbCisgICAgJ2FkZGl0aW9uYWxfdGVzdHMnLAorICAgIF0KKworaW1wb3J0IGF0ZXhpdAoraW1wb3J0IGRvY3Rlc3QKK2ltcG9ydCBvcworI2Zyb20gcGtnX3Jlc291cmNlcyBpbXBvcnQgKAorIyAgICByZXNvdXJjZV9maWxlbmFtZSwgcmVzb3VyY2VfZXhpc3RzLCByZXNvdXJjZV9saXN0ZGlyLCBjbGVhbnVwX3Jlc291cmNlcykKK2ltcG9ydCB1bml0dGVzdAorCitET0NURVNUX0ZMQUdTID0gKAorICAgIGRvY3Rlc3QuRUxMSVBTSVMgfAorICAgIGRvY3Rlc3QuTk9STUFMSVpFX1dISVRFU1BBQ0UgfAorICAgIGRvY3Rlc3QuUkVQT1JUX05ESUZGKQorCisKKyMgZGVmIGFkZGl0aW9uYWxfdGVzdHMoKToKKyMgICAgICJSdW4gdGhlIGRvYyB0ZXN0cyAoUkVBRE1FLnR4dCBhbmQgZG9jcy8qLCBpZiBhbnkgZXhpc3QpIgorIyAgICAgZG9jdGVzdF9maWxlcyA9IFsKKyMgICAgICAgICBvcy5wYXRoLmFic3BhdGgocmVzb3VyY2VfZmlsZW5hbWUoJ2JzNCcsICdSRUFETUUudHh0JykpXQorIyAgICAgaWYgcmVzb3VyY2VfZXhpc3RzKCdiczQnLCAnZG9jcycpOgorIyAgICAgICAgIGZvciBuYW1lIGluIHJlc291cmNlX2xpc3RkaXIoJ2JzNCcsICdkb2NzJyk6CisjICAgICAgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJy50eHQnKToKKyMgICAgICAgICAgICAgICAgIGRvY3Rlc3RfZmlsZXMuYXBwZW5kKAorIyAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYWJzcGF0aCgKKyMgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VfZmlsZW5hbWUoJ2JzNCcsICdkb2NzLyVzJyAlIG5hbWUpKSkKKyMgICAgIGt3YXJncyA9IGRpY3QobW9kdWxlX3JlbGF0aXZlPUZhbHNlLCBvcHRpb25mbGFncz1ET0NURVNUX0ZMQUdTKQorIyAgICAgYXRleGl0LnJlZ2lzdGVyKGNsZWFudXBfcmVzb3VyY2VzKQorIyAgICAgcmV0dXJuIHVuaXR0ZXN0LlRlc3RTdWl0ZSgoCisjICAgICAgICAgZG9jdGVzdC5Eb2NGaWxlU3VpdGUoKmRvY3Rlc3RfZmlsZXMsICoqa3dhcmdzKSkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X2h0bWw1bGliLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9odG1sNWxpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTRjM2UxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9odG1sNWxpYi5weQpAQCAtMCwwICsxLDg1IEBACisiIiJUZXN0cyB0byBlbnN1cmUgdGhhdCB0aGUgaHRtbDVsaWIgdHJlZSBidWlsZGVyIGdlbmVyYXRlcyBnb29kIHRyZWVzLiIiIgorCitpbXBvcnQgd2FybmluZ3MKKwordHJ5OgorICAgIGZyb20gYnM0LmJ1aWxkZXIgaW1wb3J0IEhUTUw1VHJlZUJ1aWxkZXIKKyAgICBIVE1MNUxJQl9QUkVTRU5UID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yLCBlOgorICAgIEhUTUw1TElCX1BSRVNFTlQgPSBGYWxzZQorZnJvbSBiczQuZWxlbWVudCBpbXBvcnQgU291cFN0cmFpbmVyCitmcm9tIGJzNC50ZXN0aW5nIGltcG9ydCAoCisgICAgSFRNTDVUcmVlQnVpbGRlclNtb2tlVGVzdCwKKyAgICBTb3VwVGVzdCwKKyAgICBza2lwSWYsCispCisKK0Bza2lwSWYoCisgICAgbm90IEhUTUw1TElCX1BSRVNFTlQsCisgICAgImh0bWw1bGliIHNlZW1zIG5vdCB0byBiZSBwcmVzZW50LCBub3QgdGVzdGluZyBpdHMgdHJlZSBidWlsZGVyLiIpCitjbGFzcyBIVE1MNUxpYkJ1aWxkZXJTbW9rZVRlc3QoU291cFRlc3QsIEhUTUw1VHJlZUJ1aWxkZXJTbW9rZVRlc3QpOgorICAgICIiIlNlZSBgYEhUTUw1VHJlZUJ1aWxkZXJTbW9rZVRlc3RgYC4iIiIKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBkZWZhdWx0X2J1aWxkZXIoc2VsZik6CisgICAgICAgIHJldHVybiBIVE1MNVRyZWVCdWlsZGVyKCkKKworICAgIGRlZiB0ZXN0X3NvdXBzdHJhaW5lcihzZWxmKToKKyAgICAgICAgIyBUaGUgaHRtbDVsaWIgdHJlZSBidWlsZGVyIGRvZXMgbm90IHN1cHBvcnQgU291cFN0cmFpbmVycy4KKyAgICAgICAgc3RyYWluZXIgPSBTb3VwU3RyYWluZXIoImIiKQorICAgICAgICBtYXJrdXAgPSAiPHA+QSA8Yj5ib2xkPC9iPiBzdGF0ZW1lbnQuPC9wPiIKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwLCBwYXJzZV9vbmx5PXN0cmFpbmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5kZWNvZGUoKSwgc2VsZi5kb2N1bWVudF9mb3IobWFya3VwKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICAidGhlIGh0bWw1bGliIHRyZWUgYnVpbGRlciBkb2Vzbid0IHN1cHBvcnQgcGFyc2Vfb25seSIgaW4KKyAgICAgICAgICAgIHN0cih3WzBdLm1lc3NhZ2UpKQorCisgICAgZGVmIHRlc3RfY29ycmVjdGx5X25lc3RlZF90YWJsZXMoc2VsZik6CisgICAgICAgICIiImh0bWw1bGliIGluc2VydHMgPHRib2R5PiB0YWdzIHdoZXJlIG90aGVyIHBhcnNlcnMgZG9uJ3QuIiIiCisgICAgICAgIG1hcmt1cCA9ICgnPHRhYmxlIGlkPSIxIj4nCisgICAgICAgICAgICAgICAgICAnPHRyPicKKyAgICAgICAgICAgICAgICAgICI8dGQ+SGVyZSdzIGFub3RoZXIgdGFibGU6IgorICAgICAgICAgICAgICAgICAgJzx0YWJsZSBpZD0iMiI+JworICAgICAgICAgICAgICAgICAgJzx0cj48dGQ+Zm9vPC90ZD48L3RyPicKKyAgICAgICAgICAgICAgICAgICc8L3RhYmxlPjwvdGQ+JykKKworICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoCisgICAgICAgICAgICBtYXJrdXAsCisgICAgICAgICAgICAnPHRhYmxlIGlkPSIxIj48dGJvZHk+PHRyPjx0ZD5IZXJlXCdzIGFub3RoZXIgdGFibGU6JworICAgICAgICAgICAgJzx0YWJsZSBpZD0iMiI+PHRib2R5Pjx0cj48dGQ+Zm9vPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT4nCisgICAgICAgICAgICAnPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT4nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygKKyAgICAgICAgICAgICI8dGFibGU+PHRoZWFkPjx0cj48dGQ+Rm9vPC90ZD48L3RyPjwvdGhlYWQ+IgorICAgICAgICAgICAgIjx0Ym9keT48dHI+PHRkPkJhcjwvdGQ+PC90cj48L3Rib2R5PiIKKyAgICAgICAgICAgICI8dGZvb3Q+PHRyPjx0ZD5CYXo8L3RkPjwvdHI+PC90Zm9vdD48L3RhYmxlPiIpCisKKyAgICBkZWYgdGVzdF94bWxfZGVjbGFyYXRpb25fZm9sbG93ZWRfYnlfZG9jdHlwZShzZWxmKToKKyAgICAgICAgbWFya3VwID0gJycnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisgIDxoZWFkPgorICA8L2hlYWQ+CisgIDxib2R5PgorICAgPHA+Zm9vPC9wPgorICA8L2JvZHk+Cis8L2h0bWw+JycnCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICAjIFZlcmlmeSB0aGF0IHdlIGNhbiByZWFjaCB0aGUgPHA+IHRhZzsgdGhpcyBtZWFucyB0aGUgdHJlZSBpcyBjb25uZWN0ZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiI8cD5mb288L3A+Iiwgc291cC5wLmVuY29kZSgpKQorCisgICAgZGVmIHRlc3RfcmVwYXJlbnRlZF9tYXJrdXAoc2VsZik6CisgICAgICAgIG1hcmt1cCA9ICc8cD48ZW0+Zm9vPC9wPlxuPHA+YmFyPGE+PC9hPjwvZW0+PC9wPicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSI8Ym9keT48cD48ZW0+Zm9vPC9lbT48L3A+PGVtPlxuPC9lbT48cD48ZW0+YmFyPGE+PC9hPjwvZW0+PC9wPjwvYm9keT4iLCBzb3VwLmJvZHkuZGVjb2RlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbGVuKHNvdXAuZmluZF9hbGwoJ3AnKSkpCisKKworICAgIGRlZiB0ZXN0X3JlcGFyZW50ZWRfbWFya3VwX2VuZHNfd2l0aF93aGl0ZXNwYWNlKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSAnPHA+PGVtPmZvbzwvcD5cbjxwPmJhcjxhPjwvYT48L2VtPjwvcD5cbicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSI8Ym9keT48cD48ZW0+Zm9vPC9lbT48L3A+PGVtPlxuPC9lbT48cD48ZW0+YmFyPGE+PC9hPjwvZW0+PC9wPlxuPC9ib2R5PiIsIHNvdXAuYm9keS5kZWNvZGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4oc291cC5maW5kX2FsbCgncCcpKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfaHRtbHBhcnNlci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfaHRtbHBhcnNlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2I1ZWQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9odG1scGFyc2VyLnB5CkBAIC0wLDAgKzEsMTkgQEAKKyIiIlRlc3RzIHRvIGVuc3VyZSB0aGF0IHRoZSBodG1sLnBhcnNlciB0cmVlIGJ1aWxkZXIgZ2VuZXJhdGVzIGdvb2QKK3RyZWVzLiIiIgorCitmcm9tIGJzNC50ZXN0aW5nIGltcG9ydCBTb3VwVGVzdCwgSFRNTFRyZWVCdWlsZGVyU21va2VUZXN0Citmcm9tIGJzNC5idWlsZGVyIGltcG9ydCBIVE1MUGFyc2VyVHJlZUJ1aWxkZXIKKworY2xhc3MgSFRNTFBhcnNlclRyZWVCdWlsZGVyU21va2VUZXN0KFNvdXBUZXN0LCBIVE1MVHJlZUJ1aWxkZXJTbW9rZVRlc3QpOgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRlZmF1bHRfYnVpbGRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIEhUTUxQYXJzZXJUcmVlQnVpbGRlcigpCisKKyAgICBkZWYgdGVzdF9uYW1lc3BhY2VkX3N5c3RlbV9kb2N0eXBlKHNlbGYpOgorICAgICAgICAjIGh0bWwucGFyc2VyIGNhbid0IGhhbmRsZSBuYW1lc3BhY2VkIGRvY3R5cGVzLCBzbyBza2lwIHRoaXMgb25lLgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9uYW1lc3BhY2VkX3B1YmxpY19kb2N0eXBlKHNlbGYpOgorICAgICAgICAjIGh0bWwucGFyc2VyIGNhbid0IGhhbmRsZSBuYW1lc3BhY2VkIGRvY3R5cGVzLCBzbyBza2lwIHRoaXMgb25lLgorICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X2x4bWwucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X2x4bWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIyZTliNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfbHhtbC5weQpAQCAtMCwwICsxLDkxIEBACisiIiJUZXN0cyB0byBlbnN1cmUgdGhhdCB0aGUgbHhtbCB0cmVlIGJ1aWxkZXIgZ2VuZXJhdGVzIGdvb2QgdHJlZXMuIiIiCisKK2ltcG9ydCByZQoraW1wb3J0IHdhcm5pbmdzCisKK3RyeToKKyAgICBpbXBvcnQgbHhtbC5ldHJlZQorICAgIExYTUxfUFJFU0VOVCA9IFRydWUKKyAgICBMWE1MX1ZFUlNJT04gPSBseG1sLmV0cmVlLkxYTUxfVkVSU0lPTgorZXhjZXB0IEltcG9ydEVycm9yLCBlOgorICAgIExYTUxfUFJFU0VOVCA9IEZhbHNlCisgICAgTFhNTF9WRVJTSU9OID0gKDAsKQorCitpZiBMWE1MX1BSRVNFTlQ6CisgICAgZnJvbSBiczQuYnVpbGRlciBpbXBvcnQgTFhNTFRyZWVCdWlsZGVyLCBMWE1MVHJlZUJ1aWxkZXJGb3JYTUwKKworZnJvbSBiczQgaW1wb3J0ICgKKyAgICBCZWF1dGlmdWxTb3VwLAorICAgIEJlYXV0aWZ1bFN0b25lU291cCwKKyAgICApCitmcm9tIGJzNC5lbGVtZW50IGltcG9ydCBDb21tZW50LCBEb2N0eXBlLCBTb3VwU3RyYWluZXIKK2Zyb20gYnM0LnRlc3RpbmcgaW1wb3J0IHNraXBJZgorZnJvbSBiczQudGVzdHMgaW1wb3J0IHRlc3RfaHRtbHBhcnNlcgorZnJvbSBiczQudGVzdGluZyBpbXBvcnQgKAorICAgIEhUTUxUcmVlQnVpbGRlclNtb2tlVGVzdCwKKyAgICBYTUxUcmVlQnVpbGRlclNtb2tlVGVzdCwKKyAgICBTb3VwVGVzdCwKKyAgICBza2lwSWYsCispCisKK0Bza2lwSWYoCisgICAgbm90IExYTUxfUFJFU0VOVCwKKyAgICAibHhtbCBzZWVtcyBub3QgdG8gYmUgcHJlc2VudCwgbm90IHRlc3RpbmcgaXRzIHRyZWUgYnVpbGRlci4iKQorY2xhc3MgTFhNTFRyZWVCdWlsZGVyU21va2VUZXN0KFNvdXBUZXN0LCBIVE1MVHJlZUJ1aWxkZXJTbW9rZVRlc3QpOgorICAgICIiIlNlZSBgYEhUTUxUcmVlQnVpbGRlclNtb2tlVGVzdGBgLiIiIgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRlZmF1bHRfYnVpbGRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIExYTUxUcmVlQnVpbGRlcigpCisKKyAgICBkZWYgdGVzdF9vdXRfb2ZfcmFuZ2VfZW50aXR5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoCisgICAgICAgICAgICAiPHA+Zm9vJiMxMDAwMDAwMDAwMDAwMDtiYXI8L3A+IiwgIjxwPmZvb2JhcjwvcD4iKQorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoCisgICAgICAgICAgICAiPHA+Zm9vJiN4MTAwMDAwMDAwMDAwMDA7YmFyPC9wPiIsICI8cD5mb29iYXI8L3A+IikKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKAorICAgICAgICAgICAgIjxwPmZvbyYjMTAwMDAwMDAwMDtiYXI8L3A+IiwgIjxwPmZvb2JhcjwvcD4iKQorCisgICAgIyBJbiBseG1sIDwgMi4zLjUsIGFuIGVtcHR5IGRvY3R5cGUgY2F1c2VzIGEgc2VnZmF1bHQuIFNraXAgdGhpcworICAgICMgdGVzdCBpZiBhbiBvbGQgdmVyc2lvbiBvZiBseG1sIGlzIGluc3RhbGxlZC4KKworICAgIEBza2lwSWYoCisgICAgICAgIG5vdCBMWE1MX1BSRVNFTlQgb3IgTFhNTF9WRVJTSU9OIDwgKDIsMyw1LDApLAorICAgICAgICAiU2tpcHBpbmcgZG9jdHlwZSB0ZXN0IGZvciBvbGQgdmVyc2lvbiBvZiBseG1sIHRvIGF2b2lkIHNlZ2ZhdWx0LiIpCisgICAgZGVmIHRlc3RfZW1wdHlfZG9jdHlwZShzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPCFET0NUWVBFPiIpCisgICAgICAgIGRvY3R5cGUgPSBzb3VwLmNvbnRlbnRzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiIsIGRvY3R5cGUuc3RyaXAoKSkKKworICAgIGRlZiB0ZXN0X2JlYXV0aWZ1bHN0b25lc291cF9pc194bWxfcGFyc2VyKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSBkZXByZWNhdGVkIEJTUyBjbGFzcyB1c2VzIGFuIHhtbCBidWlsZGVyCisgICAgICAgICMgaWYgb25lIGlzIGluc3RhbGxlZC4KKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgIHNvdXAgPSBCZWF1dGlmdWxTdG9uZVNvdXAoIjxiIC8+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IjxiLz4iLCB1bmljb2RlKHNvdXAuYikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiQmVhdXRpZnVsU3RvbmVTb3VwIGNsYXNzIGlzIGRlcHJlY2F0ZWQiIGluIHN0cih3WzBdLm1lc3NhZ2UpKQorCisgICAgZGVmIHRlc3RfcmVhbF94aHRtbF9kb2N1bWVudChzZWxmKToKKyAgICAgICAgIiIibHhtbCBzdHJpcHMgdGhlIFhNTCBkZWZpbml0aW9uIGZyb20gYW4gWEhUTUwgZG9jLCB3aGljaCBpcyBmaW5lLiIiIgorICAgICAgICBtYXJrdXAgPSBiIiIiPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+PHRpdGxlPkhlbGxvLjwvdGl0bGU+PC9oZWFkPgorPGJvZHk+R29vZGJ5ZS48L2JvZHk+Cis8L2h0bWw+IiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5lbmNvZGUoInV0Zi04IikucmVwbGFjZShiIlxuIiwgYicnKSwKKyAgICAgICAgICAgIG1hcmt1cC5yZXBsYWNlKGInXG4nLCBiJycpLnJlcGxhY2UoCisgICAgICAgICAgICAgICAgYic8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PicsIGInJykpCisKKworQHNraXBJZigKKyAgICBub3QgTFhNTF9QUkVTRU5ULAorICAgICJseG1sIHNlZW1zIG5vdCB0byBiZSBwcmVzZW50LCBub3QgdGVzdGluZyBpdHMgWE1MIHRyZWUgYnVpbGRlci4iKQorY2xhc3MgTFhNTFhNTFRyZWVCdWlsZGVyU21va2VUZXN0KFNvdXBUZXN0LCBYTUxUcmVlQnVpbGRlclNtb2tlVGVzdCk6CisgICAgIiIiU2VlIGBgSFRNTFRyZWVCdWlsZGVyU21va2VUZXN0YGAuIiIiCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGVmYXVsdF9idWlsZGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gTFhNTFRyZWVCdWlsZGVyRm9yWE1MKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3Rfc291cC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3Rfc291cC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2FjMjQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9zb3VwLnB5CkBAIC0wLDAgKzEsNDM0IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIiIiVGVzdHMgb2YgQmVhdXRpZnVsIFNvdXAgYXMgYSB3aG9sZS4iIiIKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCisKK2Zyb20gYnM0IGltcG9ydCAoCisgICAgQmVhdXRpZnVsU291cCwKKyAgICBCZWF1dGlmdWxTdG9uZVNvdXAsCispCitmcm9tIGJzNC5lbGVtZW50IGltcG9ydCAoCisgICAgQ2hhcnNldE1ldGFBdHRyaWJ1dGVWYWx1ZSwKKyAgICBDb250ZW50TWV0YUF0dHJpYnV0ZVZhbHVlLAorICAgIFNvdXBTdHJhaW5lciwKKyAgICBOYW1lc3BhY2VkQXR0cmlidXRlLAorICAgICkKK2ltcG9ydCBiczQuZGFtbWl0Citmcm9tIGJzNC5kYW1taXQgaW1wb3J0ICgKKyAgICBFbnRpdHlTdWJzdGl0dXRpb24sCisgICAgVW5pY29kZURhbW1pdCwKKykKK2Zyb20gYnM0LnRlc3RpbmcgaW1wb3J0ICgKKyAgICBTb3VwVGVzdCwKKyAgICBza2lwSWYsCispCitpbXBvcnQgd2FybmluZ3MKKwordHJ5OgorICAgIGZyb20gYnM0LmJ1aWxkZXIgaW1wb3J0IExYTUxUcmVlQnVpbGRlciwgTFhNTFRyZWVCdWlsZGVyRm9yWE1MCisgICAgTFhNTF9QUkVTRU5UID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yLCBlOgorICAgIExYTUxfUFJFU0VOVCA9IEZhbHNlCisKK1BZVEhPTl8yX1BSRV8yXzcgPSAoc3lzLnZlcnNpb25faW5mbyA8ICgyLDcpKQorUFlUSE9OXzNfUFJFXzNfMiA9IChzeXMudmVyc2lvbl9pbmZvWzBdID09IDMgYW5kIHN5cy52ZXJzaW9uX2luZm8gPCAoMywyKSkKKworY2xhc3MgVGVzdENvbnN0cnVjdG9yKFNvdXBUZXN0KToKKworICAgIGRlZiB0ZXN0X3Nob3J0X3VuaWNvZGVfaW5wdXQoc2VsZik6CisgICAgICAgIGRhdGEgPSB1IjxoMT7DqcOpPC9oMT4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IsOpw6kiLCBzb3VwLmgxLnN0cmluZykKKworICAgIGRlZiB0ZXN0X2VtYmVkZGVkX251bGwoc2VsZik6CisgICAgICAgIGRhdGEgPSB1IjxoMT5mb29cMGJhcjwvaDE+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJmb29cMGJhciIsIHNvdXAuaDEuc3RyaW5nKQorCisKK2NsYXNzIFRlc3REZXByZWNhdGVkQ29uc3RydWN0b3JBcmd1bWVudHMoU291cFRlc3QpOgorCisgICAgZGVmIHRlc3RfcGFyc2VPbmx5VGhlc2VfcmVuYW1lZF90b19wYXJzZV9vbmx5KHNlbGYpOgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+PGI+PC9iPjwvYT4iLCBwYXJzZU9ubHlUaGVzZT1Tb3VwU3RyYWluZXIoImIiKSkKKyAgICAgICAgbXNnID0gc3RyKHdbMF0ubWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJwYXJzZU9ubHlUaGVzZSIgaW4gbXNnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoInBhcnNlX29ubHkiIGluIG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIjxiPjwvYj4iLCBzb3VwLmVuY29kZSgpKQorCisgICAgZGVmIHRlc3RfZnJvbUVuY29kaW5nX3JlbmFtZWRfdG9fZnJvbV9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgIHV0ZjggPSBiIlx4YzNceGE5IgorICAgICAgICAgICAgc291cCA9IHNlbGYuc291cCh1dGY4LCBmcm9tRW5jb2Rpbmc9InV0ZjgiKQorICAgICAgICBtc2cgPSBzdHIod1swXS5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoImZyb21FbmNvZGluZyIgaW4gbXNnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoImZyb21fZW5jb2RpbmciIGluIG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidXRmOCIsIHNvdXAub3JpZ2luYWxfZW5jb2RpbmcpCisKKyAgICBkZWYgdGVzdF91bnJlY29nbml6ZWRfa2V5d29yZF9hcmd1bWVudChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBUeXBlRXJyb3IsIHNlbGYuc291cCwgIjxhPiIsIG5vX3N1Y2hfYXJndW1lbnQ9VHJ1ZSkKKworY2xhc3MgVGVzdFdhcm5pbmdzKFNvdXBUZXN0KToKKworICAgIGRlZiB0ZXN0X2Rpc2tfZmlsZV93YXJuaW5nKHNlbGYpOgorICAgICAgICBmaWxlaGFuZGxlID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgZmlsZW5hbWUgPSBmaWxlaGFuZGxlLm5hbWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGZpbGVuYW1lKQorICAgICAgICAgICAgbXNnID0gc3RyKHdbMF0ubWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgibG9va3MgbGlrZSBhIGZpbGVuYW1lIiBpbiBtc2cpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmaWxlaGFuZGxlLmNsb3NlKCkKKworICAgICAgICAjIFRoZSBmaWxlIG5vIGxvbmdlciBleGlzdHMsIHNvIEJlYXV0aWZ1bCBTb3VwIHdpbGwgbm8gbG9uZ2VyIGlzc3VlIHRoZSB3YXJuaW5nLgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgc291cCA9IHNlbGYuc291cChmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4odykpCisKKyAgICBkZWYgdGVzdF91cmxfd2FybmluZyhzZWxmKToKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoImh0dHA6Ly93d3cuY3J1bW15LmNvbS8iKQorICAgICAgICBtc2cgPSBzdHIod1swXS5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoImxvb2tzIGxpa2UgYSBVUkwiIGluIG1zZykKKworICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgc291cCA9IHNlbGYuc291cCgiaHR0cDovL3d3dy5jcnVtbXkuY29tLyBpcyBncmVhdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKHcpKQorCitjbGFzcyBUZXN0U2VsZWN0aXZlUGFyc2luZyhTb3VwVGVzdCk6CisKKyAgICBkZWYgdGVzdF9wYXJzZV93aXRoX3NvdXBzdHJhaW5lcihzZWxmKToKKyAgICAgICAgbWFya3VwID0gIk5vPGI+WWVzPC9iPjxhPk5vPGI+WWVzIDxjPlllczwvYz48L2I+IgorICAgICAgICBzdHJhaW5lciA9IFNvdXBTdHJhaW5lcigiYiIpCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwLCBwYXJzZV9vbmx5PXN0cmFpbmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZW5jb2RlKCksIGIiPGI+WWVzPC9iPjxiPlllcyA8Yz5ZZXM8L2M+PC9iPiIpCisKKworY2xhc3MgVGVzdEVudGl0eVN1YnN0aXR1dGlvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiU3RhbmRhbG9uZSB0ZXN0cyBvZiB0aGUgRW50aXR5U3Vic3RpdHV0aW9uIGNsYXNzLiIiIgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zdWIgPSBFbnRpdHlTdWJzdGl0dXRpb24KKworICAgIGRlZiB0ZXN0X3NpbXBsZV9odG1sX3N1YnN0aXR1dGlvbihzZWxmKToKKyAgICAgICAgIyBVbmljb2RlIGNoYXJhY3RlcnMgY29ycmVzcG9uZGluZyB0byBuYW1lZCBIVE1MIGVudGl0ZXMKKyAgICAgICAgIyBhcmUgc3Vic3RpdHV0ZWQsIGFuZCBubyBvdGhlcnMuCisgICAgICAgIHMgPSB1ImZvb1x1MjIwMFxOe1NOT1dNQU59XHUwMGY1YmFyIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3ViLnN1YnN0aXR1dGVfaHRtbChzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdSJmb28mZm9yYWxsO1xOe1NOT1dNQU59Jm90aWxkZTtiYXIiKQorCisgICAgZGVmIHRlc3Rfc21hcnRfcXVvdGVfc3Vic3RpdHV0aW9uKHNlbGYpOgorICAgICAgICAjIE1TIHNtYXJ0IHF1b3RlcyBhcmUgYSBjb21tb24gc291cmNlIG9mIGZydXN0cmF0aW9uLCBzbyB3ZQorICAgICAgICAjIGdpdmUgdGhlbSBhIHNwZWNpYWwgdGVzdC4KKyAgICAgICAgcXVvdGVzID0gYiJceDkxXHg5MmZvb1x4OTNceDk0IgorICAgICAgICBkYW1taXQgPSBVbmljb2RlRGFtbWl0KHF1b3RlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN1Yi5zdWJzdGl0dXRlX2h0bWwoZGFtbWl0Lm1hcmt1cCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICImbHNxdW87JnJzcXVvO2ZvbyZsZHF1bzsmcmRxdW87IikKKworICAgIGRlZiB0ZXN0X3htbF9jb252ZXJzdGlvbl9pbmNsdWRlc19ub19xdW90ZXNfaWZfbWFrZV9xdW90ZWRfYXR0cmlidXRlX2lzX2ZhbHNlKHNlbGYpOgorICAgICAgICBzID0gJ1dlbGNvbWUgdG8gIm15IGJhciInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdWIuc3Vic3RpdHV0ZV94bWwocywgRmFsc2UpLCBzKQorCisgICAgZGVmIHRlc3RfeG1sX2F0dHJpYnV0ZV9xdW90aW5nX25vcm1hbGx5X3VzZXNfZG91YmxlX3F1b3RlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN1Yi5zdWJzdGl0dXRlX3htbCgiV2VsY29tZSIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnIldlbGNvbWUiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN1Yi5zdWJzdGl0dXRlX3htbCgiQm9iJ3MgQmFyIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICciQm9iXCdzIEJhciInKQorCisgICAgZGVmIHRlc3RfeG1sX2F0dHJpYnV0ZV9xdW90aW5nX3VzZXNfc2luZ2xlX3F1b3Rlc193aGVuX3ZhbHVlX2NvbnRhaW5zX2RvdWJsZV9xdW90ZXMoc2VsZik6CisgICAgICAgIHMgPSAnV2VsY29tZSB0byAibXkgYmFyIicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN1Yi5zdWJzdGl0dXRlX3htbChzLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIidXZWxjb21lIHRvIFwibXkgYmFyXCInIikKKworICAgIGRlZiB0ZXN0X3htbF9hdHRyaWJ1dGVfcXVvdGluZ19lc2NhcGVzX3NpbmdsZV9xdW90ZXNfd2hlbl92YWx1ZV9jb250YWluc19ib3RoX3NpbmdsZV9hbmRfZG91YmxlX3F1b3RlcyhzZWxmKToKKyAgICAgICAgcyA9ICdXZWxjb21lIHRvICJCb2JcJ3MgQmFyIicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYuc3ViLnN1YnN0aXR1dGVfeG1sKHMsIFRydWUpLAorICAgICAgICAgICAgJyJXZWxjb21lIHRvICZxdW90O0JvYlwncyBCYXImcXVvdDsiJykKKworICAgIGRlZiB0ZXN0X3htbF9xdW90ZXNfYXJlbnRfZXNjYXBlZF93aGVuX3ZhbHVlX2lzX25vdF9iZWluZ19xdW90ZWQoc2VsZik6CisgICAgICAgIHF1b3RlZCA9ICdXZWxjb21lIHRvICJCb2JcJ3MgQmFyIicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN1Yi5zdWJzdGl0dXRlX3htbChxdW90ZWQpLCBxdW90ZWQpCisKKyAgICBkZWYgdGVzdF94bWxfcXVvdGluZ19oYW5kbGVzX2FuZ2xlX2JyYWNrZXRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5zdWIuc3Vic3RpdHV0ZV94bWwoImZvbzxiYXI+IiksCisgICAgICAgICAgICAiZm9vJmx0O2JhciZndDsiKQorCisgICAgZGVmIHRlc3RfeG1sX3F1b3RpbmdfaGFuZGxlc19hbXBlcnNhbmRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3ViLnN1YnN0aXR1dGVfeG1sKCJBVCZUIiksICJBVCZhbXA7VCIpCisKKyAgICBkZWYgdGVzdF94bWxfcXVvdGluZ19pbmNsdWRpbmdfYW1wZXJzYW5kc193aGVuX3RoZXlfYXJlX3BhcnRfb2ZfYW5fZW50aXR5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5zdWIuc3Vic3RpdHV0ZV94bWwoIiZBYWN1dGU7VCZUIiksCisgICAgICAgICAgICAiJmFtcDtBYWN1dGU7VCZhbXA7VCIpCisKKyAgICBkZWYgdGVzdF94bWxfcXVvdGluZ19pZ25vcmluZ19hbXBlcnNhbmRzX3doZW5fdGhleV9hcmVfcGFydF9vZl9hbl9lbnRpdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnN1Yi5zdWJzdGl0dXRlX3htbF9jb250YWluaW5nX2VudGl0aWVzKCImQWFjdXRlO1QmVCIpLAorICAgICAgICAgICAgIiZBYWN1dGU7VCZhbXA7VCIpCisKKyAgICBkZWYgdGVzdF9xdW90ZXNfbm90X2h0bWxfc3Vic3RpdHV0ZWQoc2VsZik6CisgICAgICAgICIiIlRoZXJlJ3Mgbm8gbmVlZCB0byBkbyB0aGlzIGV4Y2VwdCBpbnNpZGUgYXR0cmlidXRlIHZhbHVlcy4iIiIKKyAgICAgICAgdGV4dCA9ICdCb2JcJ3MgImJhciInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdWIuc3Vic3RpdHV0ZV9odG1sKHRleHQpLCB0ZXh0KQorCisKK2NsYXNzIFRlc3RFbmNvZGluZ0NvbnZlcnNpb24oU291cFRlc3QpOgorICAgICMgVGVzdCBCZWF1dGlmdWwgU291cCdzIGFiaWxpdHkgdG8gZGVjb2RlIGFuZCBlbmNvZGUgZnJvbSB2YXJpb3VzCisgICAgIyBlbmNvZGluZ3MuCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKFRlc3RFbmNvZGluZ0NvbnZlcnNpb24sIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi51bmljb2RlX2RhdGEgPSB1JzxodG1sPjxoZWFkPjxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+PC9oZWFkPjxib2R5Pjxmb28+U2FjclxOe0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEV9IGJsZXUhPC9mb28+PC9ib2R5PjwvaHRtbD4nCisgICAgICAgIHNlbGYudXRmOF9kYXRhID0gc2VsZi51bmljb2RlX2RhdGEuZW5jb2RlKCJ1dGYtOCIpCisgICAgICAgICMgSnVzdCBzbyB5b3Uga25vdyB3aGF0IGl0IGxvb2tzIGxpa2UuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnV0ZjhfZGF0YSwKKyAgICAgICAgICAgIGInPGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiLz48L2hlYWQ+PGJvZHk+PGZvbz5TYWNyXHhjM1x4YTkgYmxldSE8L2Zvbz48L2JvZHk+PC9odG1sPicpCisKKyAgICBkZWYgdGVzdF9hc2NpaV9pbl91bmljb2RlX291dChzZWxmKToKKyAgICAgICAgIyBBU0NJSSBpbnB1dCBpcyBjb252ZXJ0ZWQgdG8gVW5pY29kZS4gVGhlIG9yaWdpbmFsX2VuY29kaW5nCisgICAgICAgICMgYXR0cmlidXRlIGlzIHNldCB0byAndXRmLTgnLCBhIHN1cGVyc2V0IG9mIEFTQ0lJLgorICAgICAgICBjaGFyZGV0ID0gYnM0LmRhbW1pdC5jaGFyZGV0X2RhbW1pdAorICAgICAgICBsb2dnaW5nLmRpc2FibGUobG9nZ2luZy5XQVJOSU5HKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWYgbm9vcChzdHIpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICAjIERpc2FibGUgY2hhcmRldCwgd2hpY2ggd2lsbCByZWFsaXplIHRoYXQgdGhlIEFTQ0lJIGlzIEFTQ0lJLgorICAgICAgICAgICAgYnM0LmRhbW1pdC5jaGFyZGV0X2RhbW1pdCA9IG5vb3AKKyAgICAgICAgICAgIGFzY2lpID0gYiI8Zm9vPmE8L2Zvbz4iCisgICAgICAgICAgICBzb3VwX2Zyb21fYXNjaWkgPSBzZWxmLnNvdXAoYXNjaWkpCisgICAgICAgICAgICB1bmljb2RlX291dHB1dCA9IHNvdXBfZnJvbV9hc2NpaS5kZWNvZGUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodW5pY29kZV9vdXRwdXQsIHVuaWNvZGUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlX291dHB1dCwgc2VsZi5kb2N1bWVudF9mb3IoYXNjaWkuZGVjb2RlKCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwX2Zyb21fYXNjaWkub3JpZ2luYWxfZW5jb2RpbmcubG93ZXIoKSwgInV0Zi04IikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGxvZ2dpbmcuZGlzYWJsZShsb2dnaW5nLk5PVFNFVCkKKyAgICAgICAgICAgIGJzNC5kYW1taXQuY2hhcmRldF9kYW1taXQgPSBjaGFyZGV0CisKKyAgICBkZWYgdGVzdF91bmljb2RlX2luX3VuaWNvZGVfb3V0KHNlbGYpOgorICAgICAgICAjIFVuaWNvZGUgaW5wdXQgaXMgbGVmdCBhbG9uZS4gVGhlIG9yaWdpbmFsX2VuY29kaW5nIGF0dHJpYnV0ZQorICAgICAgICAjIGlzIG5vdCBzZXQuCisgICAgICAgIHNvdXBfZnJvbV91bmljb2RlID0gc2VsZi5zb3VwKHNlbGYudW5pY29kZV9kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXBfZnJvbV91bmljb2RlLmRlY29kZSgpLCBzZWxmLnVuaWNvZGVfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwX2Zyb21fdW5pY29kZS5mb28uc3RyaW5nLCB1J1NhY3JceGU5IGJsZXUhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwX2Zyb21fdW5pY29kZS5vcmlnaW5hbF9lbmNvZGluZywgTm9uZSkKKworICAgIGRlZiB0ZXN0X3V0ZjhfaW5fdW5pY29kZV9vdXQoc2VsZik6CisgICAgICAgICMgVVRGLTggaW5wdXQgaXMgY29udmVydGVkIHRvIFVuaWNvZGUuIFRoZSBvcmlnaW5hbF9lbmNvZGluZworICAgICAgICAjIGF0dHJpYnV0ZSBpcyBzZXQuCisgICAgICAgIHNvdXBfZnJvbV91dGY4ID0gc2VsZi5zb3VwKHNlbGYudXRmOF9kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXBfZnJvbV91dGY4LmRlY29kZSgpLCBzZWxmLnVuaWNvZGVfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwX2Zyb21fdXRmOC5mb28uc3RyaW5nLCB1J1NhY3JceGU5IGJsZXUhJykKKworICAgIGRlZiB0ZXN0X3V0Zjhfb3V0KHNlbGYpOgorICAgICAgICAjIFRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgY2FuIGJlIGVuY29kZWQgYXMgVVRGLTguCisgICAgICAgIHNvdXBfZnJvbV91bmljb2RlID0gc2VsZi5zb3VwKHNlbGYudW5pY29kZV9kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXBfZnJvbV91bmljb2RlLmVuY29kZSgndXRmLTgnKSwgc2VsZi51dGY4X2RhdGEpCisKKyAgICBAc2tpcElmKAorICAgICAgICBQWVRIT05fMl9QUkVfMl83IG9yIFBZVEhPTl8zX1BSRV8zXzIsCisgICAgICAgICJCYWQgSFRNTFBhcnNlciBkZXRlY3RlZDsgc2tpcHBpbmcgdGVzdCBvZiBub24tQVNDSUkgY2hhcmFjdGVycyBpbiBhdHRyaWJ1dGUgbmFtZS4iKQorICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9uYW1lX2NvbnRhaW5pbmdfdW5pY29kZV9jaGFyYWN0ZXJzKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSB1JzxkaXY+PGEgXE57U05PV01BTn09InNub3dtYW4iPjwvYT48L2Rpdj4nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zb3VwKG1hcmt1cCkuZGl2LmVuY29kZSgidXRmOCIpLCBtYXJrdXAuZW5jb2RlKCJ1dGY4IikpCisKK2NsYXNzIFRlc3RVbmljb2RlRGFtbWl0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJTdGFuZGFsb25lIHRlc3RzIG9mIFVuaWNvZGVEYW1taXQuIiIiCisKKyAgICBkZWYgdGVzdF91bmljb2RlX2lucHV0KHNlbGYpOgorICAgICAgICBtYXJrdXAgPSB1IkknbSBhbHJlYWR5IFVuaWNvZGUhIFxOe1NOT1dNQU59IgorICAgICAgICBkYW1taXQgPSBVbmljb2RlRGFtbWl0KG1hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYW1taXQudW5pY29kZV9tYXJrdXAsIG1hcmt1cCkKKworICAgIGRlZiB0ZXN0X3NtYXJ0X3F1b3Rlc190b191bmljb2RlKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSBiIjxmb28+XHg5MVx4OTJceDkzXHg5NDwvZm9vPiIKKyAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBkYW1taXQudW5pY29kZV9tYXJrdXAsIHUiPGZvbz5cdTIwMThcdTIwMTlcdTIwMWNcdTIwMWQ8L2Zvbz4iKQorCisgICAgZGVmIHRlc3Rfc21hcnRfcXVvdGVzX3RvX3htbF9lbnRpdGllcyhzZWxmKToKKyAgICAgICAgbWFya3VwID0gYiI8Zm9vPlx4OTFceDkyXHg5M1x4OTQ8L2Zvbz4iCisgICAgICAgIGRhbW1pdCA9IFVuaWNvZGVEYW1taXQobWFya3VwLCBzbWFydF9xdW90ZXNfdG89InhtbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBkYW1taXQudW5pY29kZV9tYXJrdXAsICI8Zm9vPiYjeDIwMTg7JiN4MjAxOTsmI3gyMDFDOyYjeDIwMUQ7PC9mb28+IikKKworICAgIGRlZiB0ZXN0X3NtYXJ0X3F1b3Rlc190b19odG1sX2VudGl0aWVzKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSBiIjxmb28+XHg5MVx4OTJceDkzXHg5NDwvZm9vPiIKKyAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdChtYXJrdXAsIHNtYXJ0X3F1b3Rlc190bz0iaHRtbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBkYW1taXQudW5pY29kZV9tYXJrdXAsICI8Zm9vPiZsc3F1bzsmcnNxdW87JmxkcXVvOyZyZHF1bzs8L2Zvbz4iKQorCisgICAgZGVmIHRlc3Rfc21hcnRfcXVvdGVzX3RvX2FzY2lpKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSBiIjxmb28+XHg5MVx4OTJceDkzXHg5NDwvZm9vPiIKKyAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdChtYXJrdXAsIHNtYXJ0X3F1b3Rlc190bz0iYXNjaWkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgZGFtbWl0LnVuaWNvZGVfbWFya3VwLCAiIiI8Zm9vPicnIiI8L2Zvbz4iIiIpCisKKyAgICBkZWYgdGVzdF9kZXRlY3RfdXRmOChzZWxmKToKKyAgICAgICAgdXRmOCA9IGIiXHhjM1x4YTkiCisgICAgICAgIGRhbW1pdCA9IFVuaWNvZGVEYW1taXQodXRmOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYW1taXQudW5pY29kZV9tYXJrdXAsIHUnXHhlOScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFtbWl0Lm9yaWdpbmFsX2VuY29kaW5nLmxvd2VyKCksICd1dGYtOCcpCisKKyAgICBkZWYgdGVzdF9jb252ZXJ0X2hlYnJldyhzZWxmKToKKyAgICAgICAgaGVicmV3ID0gYiJceGVkXHhlNVx4ZWNceGY5IgorICAgICAgICBkYW1taXQgPSBVbmljb2RlRGFtbWl0KGhlYnJldywgWyJpc28tODg1OS04Il0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFtbWl0Lm9yaWdpbmFsX2VuY29kaW5nLmxvd2VyKCksICdpc28tODg1OS04JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYW1taXQudW5pY29kZV9tYXJrdXAsIHUnXHUwNWRkXHUwNWQ1XHUwNWRjXHUwNWU5JykKKworICAgIGRlZiB0ZXN0X2RvbnRfc2VlX3NtYXJ0X3F1b3Rlc193aGVyZV90aGVyZV9hcmVfbm9uZShzZWxmKToKKyAgICAgICAgdXRmXzggPSBiIlwzNDNcMjAyXDI2MVwzNDNcMjAzXDI3NFwzNDNcMjAyXDI3N1wzNDNcMjAyXDI0NCBXYXRjaCIKKyAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdCh1dGZfOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYW1taXQub3JpZ2luYWxfZW5jb2RpbmcubG93ZXIoKSwgJ3V0Zi04JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYW1taXQudW5pY29kZV9tYXJrdXAuZW5jb2RlKCJ1dGYtOCIpLCB1dGZfOCkKKworICAgIGRlZiB0ZXN0X2lnbm9yZV9pbmFwcHJvcHJpYXRlX2NvZGVjcyhzZWxmKToKKyAgICAgICAgdXRmOF9kYXRhID0gdSJSw6Rrc23DtnJnw6VzIi5lbmNvZGUoInV0Zi04IikKKyAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdCh1dGY4X2RhdGEsIFsiaXNvLTg4NTktOCJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhbW1pdC5vcmlnaW5hbF9lbmNvZGluZy5sb3dlcigpLCAndXRmLTgnKQorCisgICAgZGVmIHRlc3RfaWdub3JlX2ludmFsaWRfY29kZWNzKHNlbGYpOgorICAgICAgICB1dGY4X2RhdGEgPSB1IlLDpGtzbcO2cmfDpXMiLmVuY29kZSgidXRmLTgiKQorICAgICAgICBmb3IgYmFkX2VuY29kaW5nIGluIFsnLnV0ZjgnLCAnLi4uJywgJ3V0Ri0tLTE2LiEnXToKKyAgICAgICAgICAgIGRhbW1pdCA9IFVuaWNvZGVEYW1taXQodXRmOF9kYXRhLCBbYmFkX2VuY29kaW5nXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFtbWl0Lm9yaWdpbmFsX2VuY29kaW5nLmxvd2VyKCksICd1dGYtOCcpCisKKyAgICBkZWYgdGVzdF9kZXRlY3RfaHRtbDVfc3R5bGVfbWV0YV90YWcoc2VsZik6CisKKyAgICAgICAgZm9yIGRhdGEgaW4gKAorICAgICAgICAgICAgYic8aHRtbD48bWV0YSBjaGFyc2V0PSJldWMtanAiIC8+PC9odG1sPicsCisgICAgICAgICAgICBiIjxodG1sPjxtZXRhIGNoYXJzZXQ9J2V1Yy1qcCcgLz48L2h0bWw+IiwKKyAgICAgICAgICAgIGIiPGh0bWw+PG1ldGEgY2hhcnNldD1ldWMtanAgLz48L2h0bWw+IiwKKyAgICAgICAgICAgIGIiPGh0bWw+PG1ldGEgY2hhcnNldD1ldWMtanAvPjwvaHRtbD4iKToKKyAgICAgICAgICAgIGRhbW1pdCA9IFVuaWNvZGVEYW1taXQoZGF0YSwgaXNfaHRtbD1UcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAiZXVjLWpwIiwgZGFtbWl0Lm9yaWdpbmFsX2VuY29kaW5nKQorCisgICAgZGVmIHRlc3RfbGFzdF9kaXRjaF9lbnRpdHlfcmVwbGFjZW1lbnQoc2VsZik6CisgICAgICAgICMgVGhpcyBpcyBhIFVURi04IGRvY3VtZW50IHRoYXQgY29udGFpbnMgYnl0ZXN0cmluZ3MKKyAgICAgICAgIyBjb21wbGV0ZWx5IGluY29tcGF0aWJsZSB3aXRoIFVURi04IChpZS4gZW5jb2RlZCB3aXRoIHNvbWUgb3RoZXIKKyAgICAgICAgIyBlbmNvZGluZykuCisgICAgICAgICMKKyAgICAgICAgIyBTaW5jZSB0aGVyZSBpcyBubyBjb25zaXN0ZW50IGVuY29kaW5nIGZvciB0aGUgZG9jdW1lbnQsCisgICAgICAgICMgVW5pY29kZSwgRGFtbWl0IHdpbGwgZXZlbnR1YWxseSBlbmNvZGUgdGhlIGRvY3VtZW50IGFzIFVURi04CisgICAgICAgICMgYW5kIGVuY29kZSB0aGUgaW5jb21wYXRpYmxlIGNoYXJhY3RlcnMgYXMgUkVQTEFDRU1FTlQKKyAgICAgICAgIyBDSEFSQUNURVIuCisgICAgICAgICMKKyAgICAgICAgIyBJZiBjaGFyZGV0IGlzIGluc3RhbGxlZCwgaXQgd2lsbCBkZXRlY3QgdGhhdCB0aGUgZG9jdW1lbnQKKyAgICAgICAgIyBjYW4gYmUgY29udmVydGVkIGludG8gSVNPLTg4NTktMSB3aXRob3V0IGVycm9ycy4gVGhpcyBoYXBwZW5zCisgICAgICAgICMgdG8gYmUgdGhlIHdyb25nIGVuY29kaW5nLCBidXQgaXQgaXMgYSBjb25zaXN0ZW50IGVuY29kaW5nLCBzbyB0aGUKKyAgICAgICAgIyBjb2RlIHdlJ3JlIHRlc3RpbmcgaGVyZSB3b24ndCBydW4uCisgICAgICAgICMKKyAgICAgICAgIyBTbyB3ZSB0ZW1wb3JhcmlseSBkaXNhYmxlIGNoYXJkZXQgaWYgaXQncyBwcmVzZW50LgorICAgICAgICBkb2MgPSBiIiIiXDM1N1wyNzNcMjc3PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxodG1sPjxiPlwzMzBcMjUwXDMzMFwyNTJcMzMwXDI2MTwvYj4KKzxpPlwzMTBcMzIyXDMyMVwyMjBcMzEyXDMyMVwzNTVcMzQ0PC9pPjwvaHRtbD4iIiIKKyAgICAgICAgY2hhcmRldCA9IGJzNC5kYW1taXQuY2hhcmRldF9kYW1taXQKKyAgICAgICAgbG9nZ2luZy5kaXNhYmxlKGxvZ2dpbmcuV0FSTklORykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVmIG5vb3Aoc3RyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgYnM0LmRhbW1pdC5jaGFyZGV0X2RhbW1pdCA9IG5vb3AKKyAgICAgICAgICAgIGRhbW1pdCA9IFVuaWNvZGVEYW1taXQoZG9jKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBkYW1taXQuY29udGFpbnNfcmVwbGFjZW1lbnRfY2hhcmFjdGVycykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1Ilx1ZmZmZCIgaW4gZGFtbWl0LnVuaWNvZGVfbWFya3VwKQorCisgICAgICAgICAgICBzb3VwID0gQmVhdXRpZnVsU291cChkb2MsICJodG1sLnBhcnNlciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc291cC5jb250YWluc19yZXBsYWNlbWVudF9jaGFyYWN0ZXJzKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgbG9nZ2luZy5kaXNhYmxlKGxvZ2dpbmcuTk9UU0VUKQorICAgICAgICAgICAgYnM0LmRhbW1pdC5jaGFyZGV0X2RhbW1pdCA9IGNoYXJkZXQKKworICAgIGRlZiB0ZXN0X2J5dGVfb3JkZXJfbWFya19yZW1vdmVkKHNlbGYpOgorICAgICAgICAjIEEgZG9jdW1lbnQgd3JpdHRlbiBpbiBVVEYtMTZMRSB3aWxsIGhhdmUgaXRzIGJ5dGUgb3JkZXIgbWFya2VyIHN0cmlwcGVkLgorICAgICAgICBkYXRhID0gYidceGZmXHhmZTxceDAwYVx4MDA+XHgwMFx4ZTFceDAwXHhlOVx4MDA8XHgwMC9ceDAwYVx4MDA+XHgwMCcKKyAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdChkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiPGE+w6HDqTwvYT4iLCBkYW1taXQudW5pY29kZV9tYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInV0Zi0xNmxlIiwgZGFtbWl0Lm9yaWdpbmFsX2VuY29kaW5nKQorCisgICAgZGVmIHRlc3RfZGV0d2luZ2xlKHNlbGYpOgorICAgICAgICAjIEhlcmUncyBhIFVURjggZG9jdW1lbnQuCisgICAgICAgIHV0ZjggPSAodSJcTntTTk9XTUFOfSIgKiAzKS5lbmNvZGUoInV0ZjgiKQorCisgICAgICAgICMgSGVyZSdzIGEgV2luZG93cy0xMjUyIGRvY3VtZW50LgorICAgICAgICB3aW5kb3dzXzEyNTIgPSAoCisgICAgICAgICAgICB1IlxOe0xFRlQgRE9VQkxFIFFVT1RBVElPTiBNQVJLfUhpLCBJIGxpa2UgV2luZG93cyEiCisgICAgICAgICAgICB1IlxOe1JJR0hUIERPVUJMRSBRVU9UQVRJT04gTUFSS30iKS5lbmNvZGUoIndpbmRvd3NfMTI1MiIpCisKKyAgICAgICAgIyBUaHJvdWdoIHNvbWUgdW5ob2x5IGFsY2hlbXksIHRoZXkndmUgYmVlbiBzdHVjayB0b2dldGhlci4KKyAgICAgICAgZG9jID0gdXRmOCArIHdpbmRvd3NfMTI1MiArIHV0ZjgKKworICAgICAgICAjIFRoZSBkb2N1bWVudCBjYW4ndCBiZSB0dXJuZWQgaW50byBVVEYtODoKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBkb2MuZGVjb2RlLCAidXRmOCIpCisKKyAgICAgICAgIyBVbmljb2RlLCBEYW1taXQgdGhpbmtzIHRoZSB3aG9sZSBkb2N1bWVudCBpcyBXaW5kb3dzLTEyNTIsCisgICAgICAgICMgYW5kIGRlY29kZXMgaXQgaW50byAiw6LLnMaSw6LLnMaSw6LLnMaS4oCcSGksIEkgbGlrZSBXaW5kb3dzIeKAncOiy5zGksOiy5zGksOiy5zGkiIKKworICAgICAgICAjIEJ1dCBpZiB3ZSBydW4gaXQgdGhyb3VnaCBmaXhfZW1iZWRkZWRfd2luZG93c18xMjUyLCBpdCdzIGZpeGVkOgorCisgICAgICAgIGZpeGVkID0gVW5pY29kZURhbW1pdC5kZXR3aW5nbGUoZG9jKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgdSLimIPimIPimIPigJxIaSwgSSBsaWtlIFdpbmRvd3Mh4oCd4piD4piD4piDIiwgZml4ZWQuZGVjb2RlKCJ1dGY4IikpCisKKyAgICBkZWYgdGVzdF9kZXR3aW5nbGVfaWdub3Jlc19tdWx0aWJ5dGVfY2hhcmFjdGVycyhzZWxmKToKKyAgICAgICAgIyBFYWNoIG9mIHRoZXNlIGNoYXJhY3RlcnMgaGFzIGEgVVRGLTggcmVwcmVzZW50YXRpb24gZW5kaW5nCisgICAgICAgICMgaW4gXHg5My4gXHg5MyBpcyBhIHNtYXJ0IHF1b3RlIGlmIGludGVycHJldGVkIGFzCisgICAgICAgICMgV2luZG93cy0xMjUyLiBCdXQgb3VyIGNvZGUga25vd3MgdG8gc2tpcCBvdmVyIG11bHRpYnl0ZQorICAgICAgICAjIFVURi04IGNoYXJhY3RlcnMsIHNvIHRoZXknbGwgc3Vydml2ZSB0aGUgcHJvY2VzcyB1bnNjYXRoZWQuCisgICAgICAgIGZvciB0cmlja3lfdW5pY29kZV9jaGFyIGluICgKKyAgICAgICAgICAgIHUiXE57TEFUSU4gU01BTEwgTElHQVRVUkUgT0V9IiwgIyAyLWJ5dGUgY2hhciAnXHhjNVx4OTMnCisgICAgICAgICAgICB1IlxOe0xBVElOIFNVQlNDUklQVCBTTUFMTCBMRVRURVIgWH0iLCAjIDMtYnl0ZSBjaGFyICdceGUyXHg4Mlx4OTMnCisgICAgICAgICAgICB1Ilx4ZjBceDkwXHg5MFx4OTMiLCAjIFRoaXMgaXMgYSBDSksgY2hhcmFjdGVyLCBub3Qgc3VyZSB3aGljaCBvbmUuCisgICAgICAgICAgICApOgorICAgICAgICAgICAgaW5wdXQgPSB0cmlja3lfdW5pY29kZV9jaGFyLmVuY29kZSgidXRmOCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5wdXQuZW5kc3dpdGgoYidceDkzJykpCisgICAgICAgICAgICBvdXRwdXQgPSBVbmljb2RlRGFtbWl0LmRldHdpbmdsZShpbnB1dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCBpbnB1dCkKKworY2xhc3MgVGVzdE5hbWVkc3BhY2VkQXR0cmlidXRlKFNvdXBUZXN0KToKKworICAgIGRlZiB0ZXN0X25hbWVfbWF5X2JlX25vbmUoc2VsZik6CisgICAgICAgIGEgPSBOYW1lc3BhY2VkQXR0cmlidXRlKCJ4bWxucyIsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgInhtbG5zIikKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9pc19lcXVpdmFsZW50X3RvX2NvbG9uX3NlcGFyYXRlZF9zdHJpbmcoc2VsZik6CisgICAgICAgIGEgPSBOYW1lc3BhY2VkQXR0cmlidXRlKCJhIiwgImIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhOmIiLCBhKQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlc19hcmVfZXF1aXZhbGVudF9pZl9wcmVmaXhfYW5kX25hbWVfaWRlbnRpY2FsKHNlbGYpOgorICAgICAgICBhID0gTmFtZXNwYWNlZEF0dHJpYnV0ZSgiYSIsICJiIiwgImMiKQorICAgICAgICBiID0gTmFtZXNwYWNlZEF0dHJpYnV0ZSgiYSIsICJiIiwgImMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisKKyAgICAgICAgIyBUaGUgYWN0dWFsIG5hbWVzcGFjZSBpcyBub3QgY29uc2lkZXJlZC4KKyAgICAgICAgYyA9IE5hbWVzcGFjZWRBdHRyaWJ1dGUoImEiLCAiYiIsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYykKKworICAgICAgICAjIEJ1dCBuYW1lIGFuZCBwcmVmaXggYXJlIGltcG9ydGFudC4KKyAgICAgICAgZCA9IE5hbWVzcGFjZWRBdHRyaWJ1dGUoImEiLCAieiIsICJjIikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChhLCBkKQorCisgICAgICAgIGUgPSBOYW1lc3BhY2VkQXR0cmlidXRlKCJ6IiwgImIiLCAiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYSwgZSkKKworCitjbGFzcyBUZXN0QXR0cmlidXRlVmFsdWVXaXRoQ2hhcnNldFN1YnN0aXR1dGlvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jb250ZW50X21ldGFfYXR0cmlidXRlX3ZhbHVlKHNlbGYpOgorICAgICAgICB2YWx1ZSA9IENoYXJzZXRNZXRhQXR0cmlidXRlVmFsdWUoImV1Yy1qcCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImV1Yy1qcCIsIHZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJldWMtanAiLCB2YWx1ZS5vcmlnaW5hbF92YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidXRmOCIsIHZhbHVlLmVuY29kZSgidXRmOCIpKQorCisKKyAgICBkZWYgdGVzdF9jb250ZW50X21ldGFfYXR0cmlidXRlX3ZhbHVlKHNlbGYpOgorICAgICAgICB2YWx1ZSA9IENvbnRlbnRNZXRhQXR0cmlidXRlVmFsdWUoInRleHQvaHRtbDsgY2hhcnNldD1ldWMtanAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9ZXVjLWpwIiwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInRleHQvaHRtbDsgY2hhcnNldD1ldWMtanAiLCB2YWx1ZS5vcmlnaW5hbF92YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidGV4dC9odG1sOyBjaGFyc2V0PXV0ZjgiLCB2YWx1ZS5lbmNvZGUoInV0ZjgiKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfdHJlZS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfdHJlZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODUxNWMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF90cmVlLnB5CkBAIC0wLDAgKzEsMTgyOSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKyIiIlRlc3RzIGZvciBCZWF1dGlmdWwgU291cCdzIHRyZWUgdHJhdmVyc2FsIG1ldGhvZHMuCisKK1RoZSB0cmVlIHRyYXZlcnNhbCBtZXRob2RzIGFyZSB0aGUgbWFpbiBhZHZhbnRhZ2Ugb2YgdXNpbmcgQmVhdXRpZnVsCitTb3VwIG92ZXIganVzdCB1c2luZyBhIHBhcnNlci4KKworRGlmZmVyZW50IHBhcnNlcnMgd2lsbCBidWlsZCBkaWZmZXJlbnQgQmVhdXRpZnVsIFNvdXAgdHJlZXMgZ2l2ZW4gdGhlCitzYW1lIG1hcmt1cCwgYnV0IGFsbCBCZWF1dGlmdWwgU291cCB0cmVlcyBjYW4gYmUgdHJhdmVyc2VkIHdpdGggdGhlCittZXRob2RzIHRlc3RlZCBoZXJlLgorIiIiCisKK2ltcG9ydCBjb3B5CitpbXBvcnQgcGlja2xlCitpbXBvcnQgcmUKK2ltcG9ydCB3YXJuaW5ncworZnJvbSBiczQgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKK2Zyb20gYnM0LmJ1aWxkZXIgaW1wb3J0ICgKKyAgICBidWlsZGVyX3JlZ2lzdHJ5LAorICAgIEhUTUxQYXJzZXJUcmVlQnVpbGRlciwKKykKK2Zyb20gYnM0LmVsZW1lbnQgaW1wb3J0ICgKKyAgICBDRGF0YSwKKyAgICBDb21tZW50LAorICAgIERvY3R5cGUsCisgICAgTmF2aWdhYmxlU3RyaW5nLAorICAgIFNvdXBTdHJhaW5lciwKKyAgICBUYWcsCispCitmcm9tIGJzNC50ZXN0aW5nIGltcG9ydCAoCisgICAgU291cFRlc3QsCisgICAgc2tpcElmLAorKQorCitYTUxfQlVJTERFUl9QUkVTRU5UID0gKGJ1aWxkZXJfcmVnaXN0cnkubG9va3VwKCJ4bWwiKSBpcyBub3QgTm9uZSkKK0xYTUxfUFJFU0VOVCA9IChidWlsZGVyX3JlZ2lzdHJ5Lmxvb2t1cCgibHhtbCIpIGlzIG5vdCBOb25lKQorCitjbGFzcyBUcmVlVGVzdChTb3VwVGVzdCk6CisKKyAgICBkZWYgYXNzZXJ0U2VsZWN0cyhzZWxmLCB0YWdzLCBzaG91bGRfbWF0Y2gpOgorICAgICAgICAiIiJNYWtlIHN1cmUgdGhhdCB0aGUgZ2l2ZW4gdGFncyBoYXZlIHRoZSBjb3JyZWN0IHRleHQuCisKKyAgICAgICAgVGhpcyBpcyB1c2VkIGluIHRlc3RzIHRoYXQgZGVmaW5lIGEgYnVuY2ggb2YgdGFncywgZWFjaAorICAgICAgICBjb250YWluaW5nIGEgc2luZ2xlIHN0cmluZywgYW5kIHRoZW4gc2VsZWN0IGNlcnRhaW4gc3RyaW5ncyBieQorICAgICAgICBzb21lIG1lY2hhbmlzbS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3RhZy5zdHJpbmcgZm9yIHRhZyBpbiB0YWdzXSwgc2hvdWxkX21hdGNoKQorCisgICAgZGVmIGFzc2VydFNlbGVjdHNJRHMoc2VsZiwgdGFncywgc2hvdWxkX21hdGNoKToKKyAgICAgICAgIiIiTWFrZSBzdXJlIHRoYXQgdGhlIGdpdmVuIHRhZ3MgaGF2ZSB0aGUgY29ycmVjdCBJRHMuCisKKyAgICAgICAgVGhpcyBpcyB1c2VkIGluIHRlc3RzIHRoYXQgZGVmaW5lIGEgYnVuY2ggb2YgdGFncywgZWFjaAorICAgICAgICBjb250YWluaW5nIGEgc2luZ2xlIHN0cmluZywgYW5kIHRoZW4gc2VsZWN0IGNlcnRhaW4gc3RyaW5ncyBieQorICAgICAgICBzb21lIG1lY2hhbmlzbS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3RhZ1snaWQnXSBmb3IgdGFnIGluIHRhZ3NdLCBzaG91bGRfbWF0Y2gpCisKKworY2xhc3MgVGVzdEZpbmQoVHJlZVRlc3QpOgorICAgICIiIkJhc2ljIHRlc3RzIG9mIHRoZSBmaW5kKCkgbWV0aG9kLgorCisgICAgZmluZCgpIGp1c3QgY2FsbHMgZmluZF9hbGwoKSB3aXRoIGxpbWl0PTEsIHNvIGl0J3Mgbm90IHRlc3RlZCBhbGwKKyAgICB0aGF0IHRob3Vyb3VnaGx5IGhlcmUuCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9maW5kX3RhZyhzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+MTwvYT48Yj4yPC9iPjxhPjM8L2E+PGI+NDwvYj4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZmluZCgiYiIpLnN0cmluZywgIjIiKQorCisgICAgZGVmIHRlc3RfdW5pY29kZV90ZXh0X2ZpbmQoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAodSc8aDE+UsOka3Ntw7ZyZ8OlczwvaDE+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmZpbmQodGV4dD11J1LDpGtzbcO2cmfDpXMnKSwgdSdSw6Rrc23DtnJnw6VzJykKKworICAgIGRlZiB0ZXN0X2ZpbmRfZXZlcnl0aGluZyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCBhbiBvcHRpbWl6YXRpb24gdGhhdCBmaW5kcyBhbGwgdGFncy4iIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+Zm9vPC9hPjxiPmJhcjwvYj4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihzb3VwLmZpbmRfYWxsKCkpKQorCisgICAgZGVmIHRlc3RfZmluZF9ldmVyeXRoaW5nX3dpdGhfbmFtZShzZWxmKToKKyAgICAgICAgIiIiVGVzdCBhbiBvcHRpbWl6YXRpb24gdGhhdCBmaW5kcyBhbGwgdGFncyB3aXRoIGEgZ2l2ZW4gbmFtZS4iIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+Zm9vPC9hPjxiPmJhcjwvYj48YT5iYXo8L2E+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4oc291cC5maW5kX2FsbCgnYScpKSkKKworY2xhc3MgVGVzdEZpbmRBbGwoVHJlZVRlc3QpOgorICAgICIiIkJhc2ljIHRlc3RzIG9mIHRoZSBmaW5kX2FsbCgpIG1ldGhvZC4iIiIKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX3RleHRfbm9kZXMoc2VsZik6CisgICAgICAgICIiIllvdSBjYW4gc2VhcmNoIHRoZSB0cmVlIGZvciB0ZXh0IG5vZGVzLiIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8aHRtbD5Gb288Yj5iYXI8L2I+XHhiYjwvaHRtbD4iKQorICAgICAgICAjIEV4YWN0IG1hdGNoLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZmluZF9hbGwodGV4dD0iYmFyIiksIFt1ImJhciJdKQorICAgICAgICAjIE1hdGNoIGFueSBvZiBhIG51bWJlciBvZiBzdHJpbmdzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5maW5kX2FsbCh0ZXh0PVsiRm9vIiwgImJhciJdKSwgW3UiRm9vIiwgdSJiYXIiXSkKKyAgICAgICAgIyBNYXRjaCBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmZpbmRfYWxsKHRleHQ9cmUuY29tcGlsZSgnLionKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgW3UiRm9vIiwgdSJiYXIiLCB1J1x4YmInXSkKKyAgICAgICAgIyBNYXRjaCBhbnl0aGluZy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmZpbmRfYWxsKHRleHQ9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgW3UiRm9vIiwgdSJiYXIiLCB1J1x4YmInXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX2xpbWl0KHNlbGYpOgorICAgICAgICAiIiJZb3UgY2FuIGxpbWl0IHRoZSBudW1iZXIgb2YgaXRlbXMgcmV0dXJuZWQgYnkgZmluZF9hbGwuIiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPjE8L2E+PGE+MjwvYT48YT4zPC9hPjxhPjQ8L2E+PGE+NTwvYT4iKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoc291cC5maW5kX2FsbCgnYScsIGxpbWl0PTMpLCBbIjEiLCAiMiIsICIzIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhzb3VwLmZpbmRfYWxsKCdhJywgbGltaXQ9MSksIFsiMSJdKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoCisgICAgICAgICAgICBzb3VwLmZpbmRfYWxsKCdhJywgbGltaXQ9MTApLCBbIjEiLCAiMiIsICIzIiwgIjQiLCAiNSJdKQorCisgICAgICAgICMgQSBsaW1pdCBvZiAwIG1lYW5zIG5vIGxpbWl0LgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoCisgICAgICAgICAgICBzb3VwLmZpbmRfYWxsKCdhJywgbGltaXQ9MCksIFsiMSIsICIyIiwgIjMiLCAiNCIsICI1Il0pCisKKyAgICBkZWYgdGVzdF9jYWxsaW5nX2FfdGFnX2lzX2NhbGxpbmdfZmluZGFsbChzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+MTwvYT48Yj4yPGEgaWQ9J2Zvbyc+MzwvYT48L2I+IikKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHNvdXAoJ2EnLCBsaW1pdD0xKSwgWyIxIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhzb3VwLmIoaWQ9ImZvbyIpLCBbIjMiXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX3dpdGhfc2VsZl9yZWZlcmVudGlhbF9kYXRhX3N0cnVjdHVyZV9kb2VzX25vdF9jYXVzZV9pbmZpbml0ZV9yZWN1cnNpb24oc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPjwvYT4iKQorICAgICAgICAjIENyZWF0ZSBhIHNlbGYtcmVmZXJlbnRpYWwgbGlzdC4KKyAgICAgICAgbCA9IFtdCisgICAgICAgIGwuYXBwZW5kKGwpCisKKyAgICAgICAgIyBXaXRob3V0IHNwZWNpYWwgY29kZSBpbiBfbm9ybWFsaXplX3NlYXJjaF92YWx1ZSwgdGhpcyB3b3VsZCBjYXVzZSBpbmZpbml0ZQorICAgICAgICAjIHJlY3Vyc2lvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgc291cC5maW5kX2FsbChsKSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX3Jlc3VsdHNldChzZWxmKToKKyAgICAgICAgIiIiQWxsIGZpbmRfYWxsIGNhbGxzIHJldHVybiBhIFJlc3VsdFNldCIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT48L2E+IikKKyAgICAgICAgcmVzdWx0ID0gc291cC5maW5kX2FsbCgiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHJlc3VsdCwgInNvdXJjZSIpKQorCisgICAgICAgIHJlc3VsdCA9IHNvdXAuZmluZF9hbGwoVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIocmVzdWx0LCAic291cmNlIikpCisKKyAgICAgICAgcmVzdWx0ID0gc291cC5maW5kX2FsbCh0ZXh0PSJmb28iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihyZXN1bHQsICJzb3VyY2UiKSkKKworCitjbGFzcyBUZXN0RmluZEFsbEJhc2ljTmFtZXNwYWNlcyhUcmVlVGVzdCk6CisKKyAgICBkZWYgdGVzdF9maW5kX2J5X25hbWVzcGFjZWRfbmFtZShzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgnPG1hdGhtbDptc3FydD40PC9tYXRobWw6bXNxcnQ+PGEgc3ZnOmZpbGw9InJlZCI+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiNCIsIHNvdXAuZmluZCgibWF0aG1sOm1zcXJ0Iikuc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIiwgc291cC5maW5kKGF0dHJzPSB7ICJzdmc6ZmlsbCIgOiAicmVkIiB9KS5uYW1lKQorCisKK2NsYXNzIFRlc3RGaW5kQWxsQnlOYW1lKFRyZWVUZXN0KToKKyAgICAiIiJUZXN0IHdheXMgb2YgZmluZGluZyB0YWdzIGJ5IHRhZyBuYW1lLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihUcmVlVGVzdCwgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLnRyZWUgPSAgc2VsZi5zb3VwKCIiIjxhPkZpcnN0IHRhZy48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+U2Vjb25kIHRhZy48L2I+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGM+VGhpcmQgPGE+TmVzdGVkIHRhZy48L2E+IHRhZy48L2M+IiIiKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfYnlfdGFnX25hbWUoc2VsZik6CisgICAgICAgICMgRmluZCBhbGwgdGhlIDxhPiB0YWdzLgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoCisgICAgICAgICAgICBzZWxmLnRyZWUuZmluZF9hbGwoJ2EnKSwgWydGaXJzdCB0YWcuJywgJ05lc3RlZCB0YWcuJ10pCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF9ieV9uYW1lX2FuZF90ZXh0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoCisgICAgICAgICAgICBzZWxmLnRyZWUuZmluZF9hbGwoJ2EnLCB0ZXh0PSdGaXJzdCB0YWcuJyksIFsnRmlyc3QgdGFnLiddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygKKyAgICAgICAgICAgIHNlbGYudHJlZS5maW5kX2FsbCgnYScsIHRleHQ9VHJ1ZSksIFsnRmlyc3QgdGFnLicsICdOZXN0ZWQgdGFnLiddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygKKyAgICAgICAgICAgIHNlbGYudHJlZS5maW5kX2FsbCgnYScsIHRleHQ9cmUuY29tcGlsZSgidGFnIikpLAorICAgICAgICAgICAgWydGaXJzdCB0YWcuJywgJ05lc3RlZCB0YWcuJ10pCisKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX29uX25vbl9yb290X2VsZW1lbnQoc2VsZik6CisgICAgICAgICMgWW91IGNhbiBjYWxsIGZpbmRfYWxsIG9uIGFueSBub2RlLCBub3QganVzdCB0aGUgcm9vdC4KKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHNlbGYudHJlZS5jLmZpbmRfYWxsKCdhJyksIFsnTmVzdGVkIHRhZy4nXSkKKworICAgIGRlZiB0ZXN0X2NhbGxpbmdfZWxlbWVudF9pbnZva2VzX2ZpbmRfYWxsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoc2VsZi50cmVlKCdhJyksIFsnRmlyc3QgdGFnLicsICdOZXN0ZWQgdGFnLiddKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfYnlfdGFnX3N0cmFpbmVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoCisgICAgICAgICAgICBzZWxmLnRyZWUuZmluZF9hbGwoU291cFN0cmFpbmVyKCdhJykpLAorICAgICAgICAgICAgWydGaXJzdCB0YWcuJywgJ05lc3RlZCB0YWcuJ10pCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF9ieV90YWdfbmFtZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygKKyAgICAgICAgICAgIHNlbGYudHJlZS5maW5kX2FsbChbJ2EnLCAnYiddKSwKKyAgICAgICAgICAgIFsnRmlyc3QgdGFnLicsICdTZWNvbmQgdGFnLicsICdOZXN0ZWQgdGFnLiddKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfYnlfdGFnX2RpY3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygKKyAgICAgICAgICAgIHNlbGYudHJlZS5maW5kX2FsbCh7J2EnIDogVHJ1ZSwgJ2InIDogVHJ1ZX0pLAorICAgICAgICAgICAgWydGaXJzdCB0YWcuJywgJ1NlY29uZCB0YWcuJywgJ05lc3RlZCB0YWcuJ10pCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF9ieV90YWdfcmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygKKyAgICAgICAgICAgIHNlbGYudHJlZS5maW5kX2FsbChyZS5jb21waWxlKCdeW2FiXSQnKSksCisgICAgICAgICAgICBbJ0ZpcnN0IHRhZy4nLCAnU2Vjb25kIHRhZy4nLCAnTmVzdGVkIHRhZy4nXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX3dpdGhfdGFnc19tYXRjaGluZ19tZXRob2Qoc2VsZik6CisgICAgICAgICMgWW91IGNhbiBkZWZpbmUgYW4gb3JhY2xlIG1ldGhvZCB0aGF0IGRldGVybWluZXMgd2hldGhlcgorICAgICAgICAjIGEgdGFnIG1hdGNoZXMgdGhlIHNlYXJjaC4KKyAgICAgICAgZGVmIGlkX21hdGNoZXNfbmFtZSh0YWcpOgorICAgICAgICAgICAgcmV0dXJuIHRhZy5uYW1lID09IHRhZy5nZXQoJ2lkJykKKworICAgICAgICB0cmVlID0gc2VsZi5zb3VwKCIiIjxhIGlkPSJhIj5NYXRjaCAxLjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBpZD0iMSI+RG9lcyBub3QgbWF0Y2guPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiIGlkPSJiIj5NYXRjaCAyLjwvYT4iIiIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKAorICAgICAgICAgICAgdHJlZS5maW5kX2FsbChpZF9tYXRjaGVzX25hbWUpLCBbIk1hdGNoIDEuIiwgIk1hdGNoIDIuIl0pCisKKworY2xhc3MgVGVzdEZpbmRBbGxCeUF0dHJpYnV0ZShUcmVlVGVzdCk6CisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF9ieV9hdHRyaWJ1dGVfbmFtZShzZWxmKToKKyAgICAgICAgIyBZb3UgY2FuIHBhc3MgaW4ga2V5d29yZCBhcmd1bWVudHMgdG8gZmluZF9hbGwgdG8gc2VhcmNoIGJ5CisgICAgICAgICMgYXR0cmlidXRlLgorICAgICAgICB0cmVlID0gc2VsZi5zb3VwKCIiIgorICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGlkPSJmaXJzdCI+TWF0Y2hpbmcgYS48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9InNlY29uZCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbi1tYXRjaGluZyA8YiBpZD0iZmlyc3QiPk1hdGNoaW5nIGIuPC9iPmEuCisgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPiIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRyZWUuZmluZF9hbGwoaWQ9J2ZpcnN0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbIk1hdGNoaW5nIGEuIiwgIk1hdGNoaW5nIGIuIl0pCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF9ieV91dGY4X2F0dHJpYnV0ZV92YWx1ZShzZWxmKToKKyAgICAgICAgcGVhY2UgPSB1Ited15XXnNepIi5lbmNvZGUoInV0ZjgiKQorICAgICAgICBkYXRhID0gdSc8YSB0aXRsZT0i153Xldec16kiPjwvYT4nLmVuY29kZSgidXRmOCIpCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbc291cC5hXSwgc291cC5maW5kX2FsbCh0aXRsZT1wZWFjZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3NvdXAuYV0sIHNvdXAuZmluZF9hbGwodGl0bGU9cGVhY2UuZGVjb2RlKCJ1dGY4IikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtzb3VwLmFdLCBzb3VwLmZpbmRfYWxsKHRpdGxlPVtwZWFjZSwgInNvbWV0aGluZyBlbHNlIl0pKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfYnlfYXR0cmlidXRlX2RpY3Qoc2VsZik6CisgICAgICAgICMgWW91IGNhbiBwYXNzIGluIGEgZGljdGlvbmFyeSBhcyB0aGUgYXJndW1lbnQgJ2F0dHJzJy4gVGhpcworICAgICAgICAjIGxldHMgeW91IHNlYXJjaCBmb3IgYXR0cmlidXRlcyBsaWtlICduYW1lJyAoYSBmaXhlZCBhcmd1bWVudAorICAgICAgICAjIHRvIGZpbmRfYWxsKSBhbmQgJ2NsYXNzJyAoYSByZXNlcnZlZCB3b3JkIGluIFB5dGhvbi4pCisgICAgICAgIHRyZWUgPSBzZWxmLnNvdXAoIiIiCisgICAgICAgICAgICAgICAgICAgICAgICAgPGEgbmFtZT0ibmFtZTEiIGNsYXNzPSJjbGFzczEiPk5hbWUgbWF0Y2guPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxhIG5hbWU9Im5hbWUyIiBjbGFzcz0iY2xhc3MyIj5DbGFzcyBtYXRjaC48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgPGEgbmFtZT0ibmFtZTMiIGNsYXNzPSJjbGFzczMiPk5vbi1tYXRjaC48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWUxPkEgdGFnIGNhbGxlZCAnbmFtZTEnLjwvbmFtZTE+CisgICAgICAgICAgICAgICAgICAgICAgICAgIiIiKQorCisgICAgICAgICMgVGhpcyBkb2Vzbid0IGRvIHdoYXQgeW91IHdhbnQuCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0cmVlLmZpbmRfYWxsKG5hbWU9J25hbWUxJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbIkEgdGFnIGNhbGxlZCAnbmFtZTEnLiJdKQorICAgICAgICAjIFRoaXMgZG9lcyB3aGF0IHlvdSB3YW50LgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHModHJlZS5maW5kX2FsbChhdHRycz17J25hbWUnIDogJ25hbWUxJ30pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJOYW1lIG1hdGNoLiJdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0cmVlLmZpbmRfYWxsKGF0dHJzPXsnY2xhc3MnIDogJ2NsYXNzMid9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiQ2xhc3MgbWF0Y2guIl0pCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF9ieV9jbGFzcyhzZWxmKToKKyAgICAgICAgdHJlZSA9IHNlbGYuc291cCgiIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iMSI+Q2xhc3MgMS48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IjIiPkNsYXNzIDIuPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxiIGNsYXNzPSIxIj5DbGFzcyAxLjwvYj4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8YyBjbGFzcz0iMyA0Ij5DbGFzcyAzIGFuZCA0LjwvYz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAiIiIpCisKKyAgICAgICAgIyBQYXNzaW5nIGluIHRoZSBjbGFzc18ga2V5d29yZCBhcmd1bWVudCB3aWxsIHNlYXJjaCBhZ2FpbnN0CisgICAgICAgICMgdGhlICdjbGFzcycgYXR0cmlidXRlLgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHModHJlZS5maW5kX2FsbCgnYScsIGNsYXNzXz0nMScpLCBbJ0NsYXNzIDEuJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0cmVlLmZpbmRfYWxsKCdjJywgY2xhc3NfPSczJyksIFsnQ2xhc3MgMyBhbmQgNC4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRyZWUuZmluZF9hbGwoJ2MnLCBjbGFzc189JzQnKSwgWydDbGFzcyAzIGFuZCA0LiddKQorCisgICAgICAgICMgUGFzc2luZyBpbiBhIHN0cmluZyB0byAnYXR0cnMnIHdpbGwgYWxzbyBzZWFyY2ggdGhlIENTUyBjbGFzcy4KKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRyZWUuZmluZF9hbGwoJ2EnLCAnMScpLCBbJ0NsYXNzIDEuJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0cmVlLmZpbmRfYWxsKGF0dHJzPScxJyksIFsnQ2xhc3MgMS4nLCAnQ2xhc3MgMS4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRyZWUuZmluZF9hbGwoJ2MnLCAnMycpLCBbJ0NsYXNzIDMgYW5kIDQuJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0cmVlLmZpbmRfYWxsKCdjJywgJzQnKSwgWydDbGFzcyAzIGFuZCA0LiddKQorCisgICAgZGVmIHRlc3RfZmluZF9ieV9jbGFzc193aGVuX211bHRpcGxlX2NsYXNzZXNfcHJlc2VudChzZWxmKToKKyAgICAgICAgdHJlZSA9IHNlbGYuc291cCgiPGdhciBjbGFzcz0nZm9vIGJhcic+Rm91bmQgaXQ8L2dhcj4iKQorCisgICAgICAgIGYgPSB0cmVlLmZpbmRfYWxsKCJnYXIiLCBjbGFzc189cmUuY29tcGlsZSgibyIpKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoZiwgWyJGb3VuZCBpdCJdKQorCisgICAgICAgIGYgPSB0cmVlLmZpbmRfYWxsKCJnYXIiLCBjbGFzc189cmUuY29tcGlsZSgiYSIpKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoZiwgWyJGb3VuZCBpdCJdKQorCisgICAgICAgICMgU2luY2UgdGhlIGNsYXNzIGlzIG5vdCB0aGUgc3RyaW5nICJmb28gYmFyIiwgYnV0IHRoZSB0d28KKyAgICAgICAgIyBzdHJpbmdzICJmb28iIGFuZCAiYmFyIiwgdGhpcyB3aWxsIG5vdCBmaW5kIGFueXRoaW5nLgorICAgICAgICBmID0gdHJlZS5maW5kX2FsbCgiZ2FyIiwgY2xhc3NfPXJlLmNvbXBpbGUoIm8gYiIpKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoZiwgW10pCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF93aXRoX25vbl9kaWN0aW9uYXJ5X2Zvcl9hdHRyc19maW5kc19ieV9jbGFzcyhzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGEgY2xhc3M9J2Jhcic+Rm91bmQgaXQ8L2E+IikKKworICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoc291cC5maW5kX2FsbCgiYSIsIHJlLmNvbXBpbGUoImJhIikpLCBbIkZvdW5kIGl0Il0pCisKKyAgICAgICAgZGVmIGJpZ19hdHRyaWJ1dGVfdmFsdWUodmFsdWUpOgorICAgICAgICAgICAgcmV0dXJuIGxlbih2YWx1ZSkgPiAzCisKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHNvdXAuZmluZF9hbGwoImEiLCBiaWdfYXR0cmlidXRlX3ZhbHVlKSwgW10pCisKKyAgICAgICAgZGVmIHNtYWxsX2F0dHJpYnV0ZV92YWx1ZSh2YWx1ZSk6CisgICAgICAgICAgICByZXR1cm4gbGVuKHZhbHVlKSA8PSAzCisKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKAorICAgICAgICAgICAgc291cC5maW5kX2FsbCgiYSIsIHNtYWxsX2F0dHJpYnV0ZV92YWx1ZSksIFsiRm91bmQgaXQiXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX3dpdGhfc3RyaW5nX2Zvcl9hdHRyc19maW5kc19tdWx0aXBsZV9jbGFzc2VzKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCc8YSBjbGFzcz0iZm9vIGJhciI+PC9hPjxhIGNsYXNzPSJmb28iPjwvYT4nKQorICAgICAgICBhLCBhMiA9IHNvdXAuZmluZF9hbGwoImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFthLCBhMl0sIHNvdXAuZmluZF9hbGwoImEiLCAiZm9vIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2FdLCBzb3VwLmZpbmRfYWxsKCJhIiwgImJhciIpKQorCisgICAgICAgICMgSWYgeW91IHNwZWNpZnkgdGhlIGNsYXNzIGFzIGEgc3RyaW5nIHRoYXQgY29udGFpbnMgYQorICAgICAgICAjIHNwYWNlLCBvbmx5IHRoYXQgc3BlY2lmaWMgdmFsdWUgd2lsbCBiZSBmb3VuZC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYV0sIHNvdXAuZmluZF9hbGwoImEiLCBjbGFzc189ImZvbyBiYXIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYV0sIHNvdXAuZmluZF9hbGwoImEiLCAiZm9vIGJhciIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBzb3VwLmZpbmRfYWxsKCJhIiwgImJhciBmb28iKSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX2J5X2F0dHJpYnV0ZV9zb3Vwc3RyYWluZXIoc2VsZik6CisgICAgICAgIHRyZWUgPSBzZWxmLnNvdXAoIiIiCisgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9ImZpcnN0Ij5NYXRjaC48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9InNlY29uZCI+Tm9uLW1hdGNoLjwvYT4iIiIpCisKKyAgICAgICAgc3RyYWluZXIgPSBTb3VwU3RyYWluZXIoYXR0cnM9eydpZCcgOiAnZmlyc3QnfSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRyZWUuZmluZF9hbGwoc3RyYWluZXIpLCBbJ01hdGNoLiddKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfd2l0aF9taXNzaW5nX2F0cmlidXRlKHNlbGYpOgorICAgICAgICAjIFlvdSBjYW4gcGFzcyBpbiBOb25lIGFzIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgdG8gZmluZF9hbGwuCisgICAgICAgICMgVGhpcyB3aWxsIG1hdGNoIHRhZ3MgdGhhdCBkbyBub3QgaGF2ZSB0aGF0IGF0dHJpYnV0ZSBzZXQuCisgICAgICAgIHRyZWUgPSBzZWxmLnNvdXAoIiIiPGEgaWQ9IjEiPklEIHByZXNlbnQuPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhPk5vIElEIHByZXNlbnQuPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGlkPSIiPklEIGlzIGVtcHR5LjwvYT4iIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0cmVlLmZpbmRfYWxsKCdhJywgaWQ9Tm9uZSksIFsiTm8gSUQgcHJlc2VudC4iXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX3dpdGhfZGVmaW5lZF9hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgICMgWW91IGNhbiBwYXNzIGluIE5vbmUgYXMgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSB0byBmaW5kX2FsbC4KKyAgICAgICAgIyBUaGlzIHdpbGwgbWF0Y2ggdGFncyB0aGF0IGhhdmUgdGhhdCBhdHRyaWJ1dGUgc2V0IHRvIGFueSB2YWx1ZS4KKyAgICAgICAgdHJlZSA9IHNlbGYuc291cCgiIiI8YSBpZD0iMSI+SUQgcHJlc2VudC48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE+Tm8gSUQgcHJlc2VudC48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9IiI+SUQgaXMgZW1wdHkuPC9hPiIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKAorICAgICAgICAgICAgdHJlZS5maW5kX2FsbChpZD1UcnVlKSwgWyJJRCBwcmVzZW50LiIsICJJRCBpcyBlbXB0eS4iXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX3dpdGhfbnVtZXJpY19hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgICMgSWYgeW91IHNlYXJjaCBmb3IgYSBudW1iZXIsIGl0J3MgdHJlYXRlZCBhcyBhIHN0cmluZy4KKyAgICAgICAgdHJlZSA9IHNlbGYuc291cCgiIiI8YSBpZD0xPlVucXVvdGVkIGF0dHJpYnV0ZS48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9IjEiPlF1b3RlZCBhdHRyaWJ1dGUuPC9hPiIiIikKKworICAgICAgICBleHBlY3RlZCA9IFsiVW5xdW90ZWQgYXR0cmlidXRlLiIsICJRdW90ZWQgYXR0cmlidXRlLiJdCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0cmVlLmZpbmRfYWxsKGlkPTEpLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRyZWUuZmluZF9hbGwoaWQ9IjEiKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF93aXRoX2xpc3RfYXR0cmlidXRlX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgIyBZb3UgY2FuIHBhc3MgYSBsaXN0IG9mIGF0dHJpYnV0ZSB2YWx1ZXMgaW5zdGVhZCBvZiBqdXN0IG9uZSwKKyAgICAgICAgIyBhbmQgeW91J2xsIGdldCB0YWdzIHRoYXQgbWF0Y2ggYW55IG9mIHRoZSB2YWx1ZXMuCisgICAgICAgIHRyZWUgPSBzZWxmLnNvdXAoIiIiPGEgaWQ9IjEiPjE8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9IjIiPjI8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9IjMiPjM8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE+Tm8gSUQuPC9hPiIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRyZWUuZmluZF9hbGwoaWQ9WyIxIiwgIjMiLCAiNCJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiMSIsICIzIl0pCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF93aXRoX3JlZ3VsYXJfZXhwcmVzc2lvbl9hdHRyaWJ1dGVfdmFsdWUoc2VsZik6CisgICAgICAgICMgWW91IGNhbiBwYXNzIGEgcmVndWxhciBleHByZXNzaW9uIGFzIGFuIGF0dHJpYnV0ZSB2YWx1ZSwgYW5kCisgICAgICAgICMgeW91J2xsIGdldCB0YWdzIHdob3NlIHZhbHVlcyBmb3IgdGhhdCBhdHRyaWJ1dGUgbWF0Y2ggdGhlCisgICAgICAgICMgcmVndWxhciBleHByZXNzaW9uLgorICAgICAgICB0cmVlID0gc2VsZi5zb3VwKCIiIjxhIGlkPSJhIj5PbmUgYS48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9ImFhIj5Ud28gYXMuPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGlkPSJhYiI+TWl4ZWQgYXMgYW5kIGJzLjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBpZD0iYiI+T25lIGIuPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhPk5vIElELjwvYT4iIiIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRyZWUuZmluZF9hbGwoaWQ9cmUuY29tcGlsZSgiXmErJCIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiT25lIGEuIiwgIlR3byBhcy4iXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYnlfbmFtZV9hbmRfY29udGFpbmluZ19zdHJpbmcoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxiPmZvbzwvYj48Yj5iYXI8L2I+PGE+Zm9vPC9hPiIpCisgICAgICAgIGEgPSBzb3VwLmEKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFthXSwgc291cC5maW5kX2FsbCgiYSIsIHRleHQ9ImZvbyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBzb3VwLmZpbmRfYWxsKCJhIiwgdGV4dD0iYmFyIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHNvdXAuZmluZF9hbGwoImEiLCB0ZXh0PSJiYXIiKSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYnlfbmFtZV9hbmRfY29udGFpbmluZ19zdHJpbmdfd2hlbl9zdHJpbmdfaXNfYnVyaWVkKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT5mb288L2E+PGE+PGI+PGM+Zm9vPC9jPjwvYj48L2E+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmZpbmRfYWxsKCJhIiksIHNvdXAuZmluZF9hbGwoImEiLCB0ZXh0PSJmb28iKSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYnlfYXR0cmlidXRlX2FuZF9jb250YWluaW5nX3N0cmluZyhzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgnPGIgaWQ9IjEiPmZvbzwvYj48YSBpZD0iMiI+Zm9vPC9hPicpCisgICAgICAgIGEgPSBzb3VwLmEKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFthXSwgc291cC5maW5kX2FsbChpZD0yLCB0ZXh0PSJmb28iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgc291cC5maW5kX2FsbChpZD0xLCB0ZXh0PSJiYXIiKSkKKworCisKKworY2xhc3MgVGVzdEluZGV4KFRyZWVUZXN0KToKKyAgICAiIiJUZXN0IFRhZy5pbmRleCIiIgorICAgIGRlZiB0ZXN0X2luZGV4KHNlbGYpOgorICAgICAgICB0cmVlID0gc2VsZi5zb3VwKCIiIjxkaXY+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE+SWRlbnRpY2FsPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPk5vdCBpZGVudGljYWw8L2I+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE+SWRlbnRpY2FsPC9hPgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGM+PGQ+SWRlbnRpY2FsIHdpdGggY2hpbGQ8L2Q+PC9jPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkFsc28gbm90IGlkZW50aWNhbDwvYj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yz48ZD5JZGVudGljYWwgd2l0aCBjaGlsZDwvZD48L2M+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IiIiKQorICAgICAgICBkaXYgPSB0cmVlLmRpdgorICAgICAgICBmb3IgaSwgZWxlbWVudCBpbiBlbnVtZXJhdGUoZGl2LmNvbnRlbnRzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgZGl2LmluZGV4KGVsZW1lbnQpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0cmVlLmluZGV4LCAxKQorCisKK2NsYXNzIFRlc3RQYXJlbnRPcGVyYXRpb25zKFRyZWVUZXN0KToKKyAgICAiIiJUZXN0IG5hdmlnYXRpb24gYW5kIHNlYXJjaGluZyB0aHJvdWdoIGFuIGVsZW1lbnQncyBwYXJlbnRzLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0UGFyZW50T3BlcmF0aW9ucywgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLnRyZWUgPSBzZWxmLnNvdXAoJycnPHVsIGlkPSJlbXB0eSI+PC91bD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD0idG9wIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgaWQ9Im1pZGRsZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD0iYm90dG9tIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPlN0YXJ0IGhlcmU8L2I+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4nJycpCisgICAgICAgIHNlbGYuc3RhcnQgPSBzZWxmLnRyZWUuYgorCisKKyAgICBkZWYgdGVzdF9wYXJlbnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGFydC5wYXJlbnRbJ2lkJ10sICdib3R0b20nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhcnQucGFyZW50LnBhcmVudFsnaWQnXSwgJ21pZGRsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGFydC5wYXJlbnQucGFyZW50LnBhcmVudFsnaWQnXSwgJ3RvcCcpCisKKyAgICBkZWYgdGVzdF9wYXJlbnRfb2ZfdG9wX3RhZ19pc19zb3VwX29iamVjdChzZWxmKToKKyAgICAgICAgdG9wX3RhZyA9IHNlbGYudHJlZS5jb250ZW50c1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRvcF90YWcucGFyZW50LCBzZWxmLnRyZWUpCisKKyAgICBkZWYgdGVzdF9zb3VwX29iamVjdF9oYXNfbm9fcGFyZW50KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHNlbGYudHJlZS5wYXJlbnQpCisKKyAgICBkZWYgdGVzdF9maW5kX3BhcmVudHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0c0lEcygKKyAgICAgICAgICAgIHNlbGYuc3RhcnQuZmluZF9wYXJlbnRzKCd1bCcpLCBbJ2JvdHRvbScsICdtaWRkbGUnLCAndG9wJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0c0lEcygKKyAgICAgICAgICAgIHNlbGYuc3RhcnQuZmluZF9wYXJlbnRzKCd1bCcsIGlkPSJtaWRkbGUiKSwgWydtaWRkbGUnXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfcGFyZW50KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhcnQuZmluZF9wYXJlbnQoJ3VsJylbJ2lkJ10sICdib3R0b20nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhcnQuZmluZF9wYXJlbnQoJ3VsJywgaWQ9J3RvcCcpWydpZCddLCAndG9wJykKKworICAgIGRlZiB0ZXN0X3BhcmVudF9vZl90ZXh0X2VsZW1lbnQoc2VsZik6CisgICAgICAgIHRleHQgPSBzZWxmLnRyZWUuZmluZCh0ZXh0PSJTdGFydCBoZXJlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LnBhcmVudC5uYW1lLCAnYicpCisKKyAgICBkZWYgdGVzdF90ZXh0X2VsZW1lbnRfZmluZF9wYXJlbnQoc2VsZik6CisgICAgICAgIHRleHQgPSBzZWxmLnRyZWUuZmluZCh0ZXh0PSJTdGFydCBoZXJlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LmZpbmRfcGFyZW50KCd1bCcpWydpZCddLCAnYm90dG9tJykKKworICAgIGRlZiB0ZXN0X3BhcmVudF9nZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIHBhcmVudHMgPSBbcGFyZW50WydpZCddIGZvciBwYXJlbnQgaW4gc2VsZi5zdGFydC5wYXJlbnRzCisgICAgICAgICAgICAgICAgICAgaWYgcGFyZW50IGlzIG5vdCBOb25lIGFuZCAnaWQnIGluIHBhcmVudC5hdHRyc10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJlbnRzLCBbJ2JvdHRvbScsICdtaWRkbGUnLCAndG9wJ10pCisKKworY2xhc3MgUHJveGltaXR5VGVzdChUcmVlVGVzdCk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKFRyZWVUZXN0LCBzZWxmKS5zZXRVcCgpCisgICAgICAgIHNlbGYudHJlZSA9IHNlbGYuc291cCgKKyAgICAgICAgICAgICc8aHRtbCBpZD0ic3RhcnQiPjxoZWFkPjwvaGVhZD48Ym9keT48YiBpZD0iMSI+T25lPC9iPjxiIGlkPSIyIj5Ud288L2I+PGIgaWQ9IjMiPlRocmVlPC9iPjwvYm9keT48L2h0bWw+JykKKworCitjbGFzcyBUZXN0TmV4dE9wZXJhdGlvbnMoUHJveGltaXR5VGVzdCk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKFRlc3ROZXh0T3BlcmF0aW9ucywgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLnN0YXJ0ID0gc2VsZi50cmVlLmIKKworICAgIGRlZiB0ZXN0X25leHQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGFydC5uZXh0X2VsZW1lbnQsICJPbmUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhcnQubmV4dF9lbGVtZW50Lm5leHRfZWxlbWVudFsnaWQnXSwgIjIiKQorCisgICAgZGVmIHRlc3RfbmV4dF9vZl9sYXN0X2l0ZW1faXNfbm9uZShzZWxmKToKKyAgICAgICAgbGFzdCA9IHNlbGYudHJlZS5maW5kKHRleHQ9IlRocmVlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsYXN0Lm5leHRfZWxlbWVudCwgTm9uZSkKKworICAgIGRlZiB0ZXN0X25leHRfb2Zfcm9vdF9pc19ub25lKHNlbGYpOgorICAgICAgICAjIFRoZSBkb2N1bWVudCByb290IGlzIG91dHNpZGUgdGhlIG5leHQvcHJldmlvdXMgY2hhaW4uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50cmVlLm5leHRfZWxlbWVudCwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX25leHQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhzZWxmLnN0YXJ0LmZpbmRfYWxsX25leHQoJ2InKSwgWyJUd28iLCAiVGhyZWUiXSkKKyAgICAgICAgc2VsZi5zdGFydC5maW5kX2FsbF9uZXh0KGlkPTMpCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhzZWxmLnN0YXJ0LmZpbmRfYWxsX25leHQoaWQ9MyksIFsiVGhyZWUiXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfbmV4dChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXJ0LmZpbmRfbmV4dCgnYicpWydpZCddLCAnMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGFydC5maW5kX25leHQodGV4dD0iVGhyZWUiKSwgIlRocmVlIikKKworICAgIGRlZiB0ZXN0X2ZpbmRfbmV4dF9mb3JfdGV4dF9lbGVtZW50KHNlbGYpOgorICAgICAgICB0ZXh0ID0gc2VsZi50cmVlLmZpbmQodGV4dD0iT25lIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LmZpbmRfbmV4dCgiYiIpLnN0cmluZywgIlR3byIpCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0ZXh0LmZpbmRfYWxsX25leHQoImIiKSwgWyJUd28iLCAiVGhyZWUiXSkKKworICAgIGRlZiB0ZXN0X25leHRfZ2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBzdGFydCA9IHNlbGYudHJlZS5maW5kKHRleHQ9IlR3byIpCisgICAgICAgIHN1Y2Nlc3NvcnMgPSBbbm9kZSBmb3Igbm9kZSBpbiBzdGFydC5uZXh0X2VsZW1lbnRzXQorICAgICAgICAjIFRoZXJlIGFyZSB0d28gc3VjY2Vzc29yczogdGhlIGZpbmFsIDxiPiB0YWcgYW5kIGl0cyB0ZXh0IGNvbnRlbnRzLgorICAgICAgICB0YWcsIGNvbnRlbnRzID0gc3VjY2Vzc29ycworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhZ1snaWQnXSwgJzMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRzLCAiVGhyZWUiKQorCitjbGFzcyBUZXN0UHJldmlvdXNPcGVyYXRpb25zKFByb3hpbWl0eVRlc3QpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0UHJldmlvdXNPcGVyYXRpb25zLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIHNlbGYuZW5kID0gc2VsZi50cmVlLmZpbmQodGV4dD0iVGhyZWUiKQorCisgICAgZGVmIHRlc3RfcHJldmlvdXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbmQucHJldmlvdXNfZWxlbWVudFsnaWQnXSwgIjMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW5kLnByZXZpb3VzX2VsZW1lbnQucHJldmlvdXNfZWxlbWVudCwgIlR3byIpCisKKyAgICBkZWYgdGVzdF9wcmV2aW91c19vZl9maXJzdF9pdGVtX2lzX25vbmUoc2VsZik6CisgICAgICAgIGZpcnN0ID0gc2VsZi50cmVlLmZpbmQoJ2h0bWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpcnN0LnByZXZpb3VzX2VsZW1lbnQsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9wcmV2aW91c19vZl9yb290X2lzX25vbmUoc2VsZik6CisgICAgICAgICMgVGhlIGRvY3VtZW50IHJvb3QgaXMgb3V0c2lkZSB0aGUgbmV4dC9wcmV2aW91cyBjaGFpbi4KKyAgICAgICAgIyBYWFggVGhpcyBpcyBicm9rZW4hCisgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKHNlbGYudHJlZS5wcmV2aW91c19lbGVtZW50LCBOb25lKQorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF9wcmV2aW91cyhzZWxmKToKKyAgICAgICAgIyBUaGUgPGI+IHRhZyBjb250YWluaW5nIHRoZSAiVGhyZWUiIG5vZGUgaXMgdGhlIHByZWRlY2Vzc29yCisgICAgICAgICMgb2YgdGhlICJUaHJlZSIgbm9kZSBpdHNlbGYsIHdoaWNoIGlzIHdoeSAiVGhyZWUiIHNob3dzIHVwCisgICAgICAgICMgaGVyZS4KKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKAorICAgICAgICAgICAgc2VsZi5lbmQuZmluZF9hbGxfcHJldmlvdXMoJ2InKSwgWyJUaHJlZSIsICJUd28iLCAiT25lIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhzZWxmLmVuZC5maW5kX2FsbF9wcmV2aW91cyhpZD0xKSwgWyJPbmUiXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfcHJldmlvdXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbmQuZmluZF9wcmV2aW91cygnYicpWydpZCddLCAnMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbmQuZmluZF9wcmV2aW91cyh0ZXh0PSJPbmUiKSwgIk9uZSIpCisKKyAgICBkZWYgdGVzdF9maW5kX3ByZXZpb3VzX2Zvcl90ZXh0X2VsZW1lbnQoc2VsZik6CisgICAgICAgIHRleHQgPSBzZWxmLnRyZWUuZmluZCh0ZXh0PSJUaHJlZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dC5maW5kX3ByZXZpb3VzKCJiIikuc3RyaW5nLCAiVGhyZWUiKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoCisgICAgICAgICAgICB0ZXh0LmZpbmRfYWxsX3ByZXZpb3VzKCJiIiksIFsiVGhyZWUiLCAiVHdvIiwgIk9uZSJdKQorCisgICAgZGVmIHRlc3RfcHJldmlvdXNfZ2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBzdGFydCA9IHNlbGYudHJlZS5maW5kKHRleHQ9Ik9uZSIpCisgICAgICAgIHByZWRlY2Vzc29ycyA9IFtub2RlIGZvciBub2RlIGluIHN0YXJ0LnByZXZpb3VzX2VsZW1lbnRzXQorCisgICAgICAgICMgVGhlcmUgYXJlIGZvdXIgcHJlZGVjZXNzb3JzOiB0aGUgPGI+IHRhZyBjb250YWluaW5nICJPbmUiCisgICAgICAgICMgdGhlIDxib2R5PiB0YWcsIHRoZSA8aGVhZD4gdGFnLCBhbmQgdGhlIDxodG1sPiB0YWcuCisgICAgICAgIGIsIGJvZHksIGhlYWQsIGh0bWwgPSBwcmVkZWNlc3NvcnMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWydpZCddLCAnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYm9keS5uYW1lLCAiYm9keSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGVhZC5uYW1lLCAiaGVhZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHRtbC5uYW1lLCAiaHRtbCIpCisKKworY2xhc3MgU2libGluZ1Rlc3QoVHJlZVRlc3QpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihTaWJsaW5nVGVzdCwgc2VsZikuc2V0VXAoKQorICAgICAgICBtYXJrdXAgPSAnJyc8aHRtbD4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9IjEuMSI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSIyIj4KKyAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSIyLjEiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0iMyI+CisgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0iMy4xIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9IjQiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgPC9odG1sPicnJworICAgICAgICAjIEFsbCB0aGF0IHdoaXRlc3BhY2UgbG9va3MgZ29vZCBidXQgbWFrZXMgdGhlIHRlc3RzIG1vcmUKKyAgICAgICAgIyBkaWZmaWN1bHQuIEdldCByaWQgb2YgaXQuCisgICAgICAgIG1hcmt1cCA9IHJlLmNvbXBpbGUoIlxuXHMqIikuc3ViKCIiLCBtYXJrdXApCisgICAgICAgIHNlbGYudHJlZSA9IHNlbGYuc291cChtYXJrdXApCisKKworY2xhc3MgVGVzdE5leHRTaWJsaW5nKFNpYmxpbmdUZXN0KToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdE5leHRTaWJsaW5nLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIHNlbGYuc3RhcnQgPSBzZWxmLnRyZWUuZmluZChpZD0iMSIpCisKKyAgICBkZWYgdGVzdF9uZXh0X3NpYmxpbmdfb2Zfcm9vdF9pc19ub25lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHJlZS5uZXh0X3NpYmxpbmcsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9uZXh0X3NpYmxpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGFydC5uZXh0X3NpYmxpbmdbJ2lkJ10sICcyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXJ0Lm5leHRfc2libGluZy5uZXh0X3NpYmxpbmdbJ2lkJ10sICczJykKKworICAgICAgICAjIE5vdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBuZXh0X3NpYmxpbmcgYW5kIG5leHRfZWxlbWVudC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXJ0Lm5leHRfZWxlbWVudFsnaWQnXSwgJzEuMScpCisKKyAgICBkZWYgdGVzdF9uZXh0X3NpYmxpbmdfbWF5X25vdF9leGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyZWUuaHRtbC5uZXh0X3NpYmxpbmcsIE5vbmUpCisKKyAgICAgICAgbmVzdGVkX3NwYW4gPSBzZWxmLnRyZWUuZmluZChpZD0iMS4xIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXN0ZWRfc3Bhbi5uZXh0X3NpYmxpbmcsIE5vbmUpCisKKyAgICAgICAgbGFzdF9zcGFuID0gc2VsZi50cmVlLmZpbmQoaWQ9IjQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxhc3Rfc3Bhbi5uZXh0X3NpYmxpbmcsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9maW5kX25leHRfc2libGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXJ0LmZpbmRfbmV4dF9zaWJsaW5nKCdzcGFuJylbJ2lkJ10sICcyJykKKworICAgIGRlZiB0ZXN0X25leHRfc2libGluZ3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0c0lEcyhzZWxmLnN0YXJ0LmZpbmRfbmV4dF9zaWJsaW5ncygic3BhbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycyJywgJzMnLCAnNCddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0c0lEcyhzZWxmLnN0YXJ0LmZpbmRfbmV4dF9zaWJsaW5ncyhpZD0nMycpLCBbJzMnXSkKKworICAgIGRlZiB0ZXN0X25leHRfc2libGluZ19mb3JfdGV4dF9lbGVtZW50KHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCJGb288Yj5iYXI8L2I+YmF6IikKKyAgICAgICAgc3RhcnQgPSBzb3VwLmZpbmQodGV4dD0iRm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFydC5uZXh0X3NpYmxpbmcubmFtZSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXJ0Lm5leHRfc2libGluZy5uZXh0X3NpYmxpbmcsICdiYXonKQorCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhzdGFydC5maW5kX25leHRfc2libGluZ3MoJ2InKSwgWydiYXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFydC5maW5kX25leHRfc2libGluZyh0ZXh0PSJiYXoiKSwgImJheiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhcnQuZmluZF9uZXh0X3NpYmxpbmcodGV4dD0ibm9uZXN1Y2giKSwgTm9uZSkKKworCitjbGFzcyBUZXN0UHJldmlvdXNTaWJsaW5nKFNpYmxpbmdUZXN0KToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdFByZXZpb3VzU2libGluZywgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLmVuZCA9IHNlbGYudHJlZS5maW5kKGlkPSI0IikKKworICAgIGRlZiB0ZXN0X3ByZXZpb3VzX3NpYmxpbmdfb2Zfcm9vdF9pc19ub25lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHJlZS5wcmV2aW91c19zaWJsaW5nLCBOb25lKQorCisgICAgZGVmIHRlc3RfcHJldmlvdXNfc2libGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVuZC5wcmV2aW91c19zaWJsaW5nWydpZCddLCAnMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbmQucHJldmlvdXNfc2libGluZy5wcmV2aW91c19zaWJsaW5nWydpZCddLCAnMicpCisKKyAgICAgICAgIyBOb3RlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gcHJldmlvdXNfc2libGluZyBhbmQgcHJldmlvdXNfZWxlbWVudC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVuZC5wcmV2aW91c19lbGVtZW50WydpZCddLCAnMy4xJykKKworICAgIGRlZiB0ZXN0X3ByZXZpb3VzX3NpYmxpbmdfbWF5X25vdF9leGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyZWUuaHRtbC5wcmV2aW91c19zaWJsaW5nLCBOb25lKQorCisgICAgICAgIG5lc3RlZF9zcGFuID0gc2VsZi50cmVlLmZpbmQoaWQ9IjEuMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmVzdGVkX3NwYW4ucHJldmlvdXNfc2libGluZywgTm9uZSkKKworICAgICAgICBmaXJzdF9zcGFuID0gc2VsZi50cmVlLmZpbmQoaWQ9IjEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpcnN0X3NwYW4ucHJldmlvdXNfc2libGluZywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfcHJldmlvdXNfc2libGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVuZC5maW5kX3ByZXZpb3VzX3NpYmxpbmcoJ3NwYW4nKVsnaWQnXSwgJzMnKQorCisgICAgZGVmIHRlc3RfcHJldmlvdXNfc2libGluZ3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0c0lEcyhzZWxmLmVuZC5maW5kX3ByZXZpb3VzX3NpYmxpbmdzKCJzcGFuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJzMnLCAnMicsICcxJ10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzSURzKHNlbGYuZW5kLmZpbmRfcHJldmlvdXNfc2libGluZ3MoaWQ9JzEnKSwgWycxJ10pCisKKyAgICBkZWYgdGVzdF9wcmV2aW91c19zaWJsaW5nX2Zvcl90ZXh0X2VsZW1lbnQoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIkZvbzxiPmJhcjwvYj5iYXoiKQorICAgICAgICBzdGFydCA9IHNvdXAuZmluZCh0ZXh0PSJiYXoiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXJ0LnByZXZpb3VzX3NpYmxpbmcubmFtZSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXJ0LnByZXZpb3VzX3NpYmxpbmcucHJldmlvdXNfc2libGluZywgJ0ZvbycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHN0YXJ0LmZpbmRfcHJldmlvdXNfc2libGluZ3MoJ2InKSwgWydiYXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFydC5maW5kX3ByZXZpb3VzX3NpYmxpbmcodGV4dD0iRm9vIiksICJGb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXJ0LmZpbmRfcHJldmlvdXNfc2libGluZyh0ZXh0PSJub25lc3VjaCIpLCBOb25lKQorCisKK2NsYXNzIFRlc3RUYWdDcmVhdGlvbihTb3VwVGVzdCk6CisgICAgIiIiVGVzdCB0aGUgYWJpbGl0eSB0byBjcmVhdGUgbmV3IHRhZ3MuIiIiCisgICAgZGVmIHRlc3RfbmV3X3RhZyhzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiIikKKyAgICAgICAgbmV3X3RhZyA9IHNvdXAubmV3X3RhZygiZm9vIiwgYmFyPSJiYXoiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShuZXdfdGFnLCBUYWcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJmb28iLCBuZXdfdGFnLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChiYXI9ImJheiIpLCBuZXdfdGFnLmF0dHJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIG5ld190YWcucGFyZW50KQorCisgICAgZGVmIHRlc3RfdGFnX2luaGVyaXRzX3NlbGZfY2xvc2luZ19ydWxlc19mcm9tX2J1aWxkZXIoc2VsZik6CisgICAgICAgIGlmIFhNTF9CVUlMREVSX1BSRVNFTlQ6CisgICAgICAgICAgICB4bWxfc291cCA9IEJlYXV0aWZ1bFNvdXAoIiIsICJ4bWwiKQorICAgICAgICAgICAgeG1sX2JyID0geG1sX3NvdXAubmV3X3RhZygiYnIiKQorICAgICAgICAgICAgeG1sX3AgPSB4bWxfc291cC5uZXdfdGFnKCJwIikKKworICAgICAgICAgICAgIyBCb3RoIHRoZSA8YnI+IGFuZCA8cD4gdGFnIGFyZSBlbXB0eS1lbGVtZW50LCBqdXN0IGJlY2F1c2UKKyAgICAgICAgICAgICMgdGhleSBoYXZlIG5vIGNvbnRlbnRzLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIjxici8+IiwgeG1sX2JyLmVuY29kZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIjxwLz4iLCB4bWxfcC5lbmNvZGUoKSkKKworICAgICAgICBodG1sX3NvdXAgPSBCZWF1dGlmdWxTb3VwKCIiLCAiaHRtbCIpCisgICAgICAgIGh0bWxfYnIgPSBodG1sX3NvdXAubmV3X3RhZygiYnIiKQorICAgICAgICBodG1sX3AgPSBodG1sX3NvdXAubmV3X3RhZygicCIpCisKKyAgICAgICAgIyBUaGUgSFRNTCBidWlsZGVyIHVzZXJzIEhUTUwncyBydWxlcyBhYm91dCB3aGljaCB0YWdzIGFyZQorICAgICAgICAjIGVtcHR5LWVsZW1lbnQgdGFncywgYW5kIHRoZSBuZXcgdGFncyByZWZsZWN0IHRoZXNlIHJ1bGVzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiPGJyLz4iLCBodG1sX2JyLmVuY29kZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiPHA+PC9wPiIsIGh0bWxfcC5lbmNvZGUoKSkKKworICAgIGRlZiB0ZXN0X25ld19zdHJpbmdfY3JlYXRlc19uYXZpZ2FibGVzdHJpbmcoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIiIpCisgICAgICAgIHMgPSBzb3VwLm5ld19zdHJpbmcoImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImZvbyIsIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHMsIE5hdmlnYWJsZVN0cmluZykpCisKKyAgICBkZWYgdGVzdF9uZXdfc3RyaW5nX2Nhbl9jcmVhdGVfbmF2aWdhYmxlc3RyaW5nX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCIiKQorICAgICAgICBzID0gc291cC5uZXdfc3RyaW5nKCJmb28iLCBDb21tZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJmb28iLCBzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzLCBDb21tZW50KSkKKworY2xhc3MgVGVzdFRyZWVNb2RpZmljYXRpb24oU291cFRlc3QpOgorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlX21vZGlmaWNhdGlvbihzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgnPGEgaWQ9IjEiPjwvYT4nKQorICAgICAgICBzb3VwLmFbJ2lkJ10gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5kZWNvZGUoKSwgc2VsZi5kb2N1bWVudF9mb3IoJzxhIGlkPSIyIj48L2E+JykpCisgICAgICAgIGRlbChzb3VwLmFbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5kZWNvZGUoKSwgc2VsZi5kb2N1bWVudF9mb3IoJzxhPjwvYT4nKSkKKyAgICAgICAgc291cC5hWydpZDInXSA9ICdmb28nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5kZWNvZGUoKSwgc2VsZi5kb2N1bWVudF9mb3IoJzxhIGlkMj0iZm9vIj48L2E+JykpCisKKyAgICBkZWYgdGVzdF9uZXdfdGFnX2NyZWF0aW9uKHNlbGYpOgorICAgICAgICBidWlsZGVyID0gYnVpbGRlcl9yZWdpc3RyeS5sb29rdXAoJ2h0bWwnKSgpCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxib2R5PjwvYm9keT4iLCBidWlsZGVyPWJ1aWxkZXIpCisgICAgICAgIGEgPSBUYWcoc291cCwgYnVpbGRlciwgJ2EnKQorICAgICAgICBvbCA9IFRhZyhzb3VwLCBidWlsZGVyLCAnb2wnKQorICAgICAgICBhWydocmVmJ10gPSAnaHR0cDovL2Zvby5jb20vJworICAgICAgICBzb3VwLmJvZHkuaW5zZXJ0KDAsIGEpCisgICAgICAgIHNvdXAuYm9keS5pbnNlcnQoMSwgb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmJvZHkuZW5jb2RlKCksCisgICAgICAgICAgICBiJzxib2R5PjxhIGhyZWY9Imh0dHA6Ly9mb28uY29tLyI+PC9hPjxvbD48L29sPjwvYm9keT4nKQorCisgICAgZGVmIHRlc3RfYXBwZW5kX3RvX2NvbnRlbnRzX21vdmVzX3RhZyhzZWxmKToKKyAgICAgICAgZG9jID0gIiIiPHAgaWQ9IjEiPkRvbid0IGxlYXZlIG1lIDxiPmhlcmU8L2I+LjwvcD4KKyAgICAgICAgICAgICAgICA8cCBpZD0iMiI+RG9uXCd0IGxlYXZlITwvcD4iIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChkb2MpCisgICAgICAgIHNlY29uZF9wYXJhID0gc291cC5maW5kKGlkPScyJykKKyAgICAgICAgYm9sZCA9IHNvdXAuYgorCisgICAgICAgICMgTW92ZSB0aGUgPGI+IHRhZyB0byB0aGUgZW5kIG9mIHRoZSBzZWNvbmQgcGFyYWdyYXBoLgorICAgICAgICBzb3VwLmZpbmQoaWQ9JzInKS5hcHBlbmQoc291cC5iKQorCisgICAgICAgICMgVGhlIDxiPiB0YWcgaXMgbm93IGEgY2hpbGQgb2YgdGhlIHNlY29uZCBwYXJhZ3JhcGguCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYm9sZC5wYXJlbnQsIHNlY29uZF9wYXJhKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmRlY29kZSgpLCBzZWxmLmRvY3VtZW50X2ZvcigKKyAgICAgICAgICAgICAgICAnPHAgaWQ9IjEiPkRvblwndCBsZWF2ZSBtZSAuPC9wPlxuJworICAgICAgICAgICAgICAgICc8cCBpZD0iMiI+RG9uXCd0IGxlYXZlITxiPmhlcmU8L2I+PC9wPicpKQorCisgICAgZGVmIHRlc3RfcmVwbGFjZV93aXRoX3JldHVybnNfdGhpbmdfdGhhdF93YXNfcmVwbGFjZWQoc2VsZik6CisgICAgICAgIHRleHQgPSAiPGE+PC9hPjxiPjxjPjwvYz48L2I+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKHRleHQpCisgICAgICAgIGEgPSBzb3VwLmEKKyAgICAgICAgbmV3X2EgPSBhLnJlcGxhY2Vfd2l0aChzb3VwLmMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgbmV3X2EpCisKKyAgICBkZWYgdGVzdF91bndyYXBfcmV0dXJuc190aGluZ190aGF0X3dhc19yZXBsYWNlZChzZWxmKToKKyAgICAgICAgdGV4dCA9ICI8YT48Yj48L2I+PGM+PC9jPjwvYT4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAodGV4dCkKKyAgICAgICAgYSA9IHNvdXAuYQorICAgICAgICBuZXdfYSA9IGEudW53cmFwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBuZXdfYSkKKworICAgIGRlZiB0ZXN0X3JlcGxhY2VfdGFnX3dpdGhfaXRzZWxmKHNlbGYpOgorICAgICAgICB0ZXh0ID0gIjxhPjxiPjwvYj48Yz5Gb288ZD48L2Q+PC9jPjwvYT48YT48ZT48L2U+PC9hPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCh0ZXh0KQorICAgICAgICBjID0gc291cC5jCisgICAgICAgIHNvdXAuYy5yZXBsYWNlX3dpdGgoYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmRlY29kZSgpLCBzZWxmLmRvY3VtZW50X2Zvcih0ZXh0KSkKKworICAgIGRlZiB0ZXN0X3JlcGxhY2VfdGFnX3dpdGhfaXRzX3BhcmVudF9yYWlzZXNfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB0ZXh0ID0gIjxhPjxiPjwvYj48L2E+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNvdXAuYi5yZXBsYWNlX3dpdGgsIHNvdXAuYSkKKworICAgIGRlZiB0ZXN0X2luc2VydF90YWdfaW50b19pdHNlbGZfcmFpc2VzX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgdGV4dCA9ICI8YT48Yj48L2I+PC9hPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCh0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzb3VwLmEuaW5zZXJ0LCAwLCBzb3VwLmEpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlX3dpdGhfbWFpbnRhaW5zX25leHRfZWxlbWVudF90aHJvdWdob3V0KHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCc8cD48YT5vbmU8L2E+PGI+dGhyZWU8L2I+PC9wPicpCisgICAgICAgIGEgPSBzb3VwLmEKKyAgICAgICAgYiA9IGEuY29udGVudHNbMF0KKyAgICAgICAgIyBNYWtlIGl0IHNvIHRoZSA8YT4gdGFnIGhhcyB0d28gdGV4dCBjaGlsZHJlbi4KKyAgICAgICAgYS5pbnNlcnQoMSwgInR3byIpCisKKyAgICAgICAgIyBOb3cgcmVwbGFjZSBlYWNoIG9uZSB3aXRoIHRoZSBlbXB0eSBzdHJpbmcuCisgICAgICAgIGxlZnQsIHJpZ2h0ID0gYS5jb250ZW50cworICAgICAgICBsZWZ0LnJlcGxhY2VXaXRoKCcnKQorICAgICAgICByaWdodC5yZXBsYWNlV2l0aCgnJykKKworICAgICAgICAjIFRoZSA8Yj4gdGFnIGlzIHN0aWxsIGNvbm5lY3RlZCB0byB0aGUgdHJlZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidGhyZWUiLCBzb3VwLmIuc3RyaW5nKQorCisgICAgZGVmIHRlc3RfcmVwbGFjZV9maW5hbF9ub2RlKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8Yj5BcmdoITwvYj4iKQorICAgICAgICBzb3VwLmZpbmQodGV4dD0iQXJnaCEiKS5yZXBsYWNlX3dpdGgoIkhvb3JheSEiKQorICAgICAgICBuZXdfdGV4dCA9IHNvdXAuZmluZCh0ZXh0PSJIb29yYXkhIikKKyAgICAgICAgYiA9IHNvdXAuYgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld190ZXh0LnByZXZpb3VzX2VsZW1lbnQsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X3RleHQucGFyZW50LCBiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld190ZXh0LnByZXZpb3VzX2VsZW1lbnQubmV4dF9lbGVtZW50LCBuZXdfdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfdGV4dC5uZXh0X2VsZW1lbnQsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jb25zZWN1dGl2ZV90ZXh0X25vZGVzKHNlbGYpOgorICAgICAgICAjIEEgYnVpbGRlciBzaG91bGQgbmV2ZXIgY3JlYXRlIHR3byBjb25zZWN1dGl2ZSB0ZXh0IG5vZGVzLAorICAgICAgICAjIGJ1dCBpZiB5b3UgaW5zZXJ0IG9uZSBuZXh0IHRvIGFub3RoZXIsIEJlYXV0aWZ1bCBTb3VwIHdpbGwKKyAgICAgICAgIyBoYW5kbGUgaXQgY29ycmVjdGx5LgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT48Yj5BcmdoITwvYj48Yz48L2M+PC9hPiIpCisgICAgICAgIHNvdXAuYi5pbnNlcnQoMSwgIkhvb3JheSEiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmRlY29kZSgpLCBzZWxmLmRvY3VtZW50X2ZvcigKKyAgICAgICAgICAgICAgICAiPGE+PGI+QXJnaCFIb29yYXkhPC9iPjxjPjwvYz48L2E+IikpCisKKyAgICAgICAgbmV3X3RleHQgPSBzb3VwLmZpbmQodGV4dD0iSG9vcmF5ISIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X3RleHQucHJldmlvdXNfZWxlbWVudCwgIkFyZ2ghIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfdGV4dC5wcmV2aW91c19lbGVtZW50Lm5leHRfZWxlbWVudCwgbmV3X3RleHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfdGV4dC5wcmV2aW91c19zaWJsaW5nLCAiQXJnaCEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld190ZXh0LnByZXZpb3VzX3NpYmxpbmcubmV4dF9zaWJsaW5nLCBuZXdfdGV4dCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld190ZXh0Lm5leHRfc2libGluZywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfdGV4dC5uZXh0X2VsZW1lbnQsIHNvdXAuYykKKworICAgIGRlZiB0ZXN0X2luc2VydF9zdHJpbmcoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPjwvYT4iKQorICAgICAgICBzb3VwLmEuaW5zZXJ0KDAsICJiYXIiKQorICAgICAgICBzb3VwLmEuaW5zZXJ0KDAsICJmb28iKQorICAgICAgICAjIFRoZSBzdHJpbmcgd2VyZSBhZGRlZCB0byB0aGUgdGFnLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsiZm9vIiwgImJhciJdLCBzb3VwLmEuY29udGVudHMpCisgICAgICAgICMgQW5kIHRoZXkgd2VyZSBjb252ZXJ0ZWQgdG8gTmF2aWdhYmxlU3RyaW5ncy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmEuY29udGVudHNbMF0ubmV4dF9lbGVtZW50LCAiYmFyIikKKworICAgIGRlZiB0ZXN0X2luc2VydF90YWcoc2VsZik6CisgICAgICAgIGJ1aWxkZXIgPSBzZWxmLmRlZmF1bHRfYnVpbGRlcgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKAorICAgICAgICAgICAgIjxhPjxiPkZpbmQ8L2I+PGM+bGFkeSE8L2M+PGQ+PC9kPjwvYT4iLCBidWlsZGVyPWJ1aWxkZXIpCisgICAgICAgIG1hZ2ljX3RhZyA9IFRhZyhzb3VwLCBidWlsZGVyLCAnbWFnaWN0YWcnKQorICAgICAgICBtYWdpY190YWcuaW5zZXJ0KDAsICJ0aGUiKQorICAgICAgICBzb3VwLmEuaW5zZXJ0KDEsIG1hZ2ljX3RhZykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5kZWNvZGUoKSwgc2VsZi5kb2N1bWVudF9mb3IoCisgICAgICAgICAgICAgICAgIjxhPjxiPkZpbmQ8L2I+PG1hZ2ljdGFnPnRoZTwvbWFnaWN0YWc+PGM+bGFkeSE8L2M+PGQ+PC9kPjwvYT4iKSkKKworICAgICAgICAjIE1ha2Ugc3VyZSBhbGwgdGhlIHJlbGF0aW9uc2hpcHMgYXJlIGhvb2tlZCB1cCBjb3JyZWN0bHkuCisgICAgICAgIGJfdGFnID0gc291cC5iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYl90YWcubmV4dF9zaWJsaW5nLCBtYWdpY190YWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFnaWNfdGFnLnByZXZpb3VzX3NpYmxpbmcsIGJfdGFnKQorCisgICAgICAgIGZpbmQgPSBiX3RhZy5maW5kKHRleHQ9IkZpbmQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbmQubmV4dF9lbGVtZW50LCBtYWdpY190YWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFnaWNfdGFnLnByZXZpb3VzX2VsZW1lbnQsIGZpbmQpCisKKyAgICAgICAgY190YWcgPSBzb3VwLmMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWdpY190YWcubmV4dF9zaWJsaW5nLCBjX3RhZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX3RhZy5wcmV2aW91c19zaWJsaW5nLCBtYWdpY190YWcpCisKKyAgICAgICAgdGhlID0gbWFnaWNfdGFnLmZpbmQodGV4dD0idGhlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aGUucGFyZW50LCBtYWdpY190YWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhlLm5leHRfZWxlbWVudCwgY190YWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY190YWcucHJldmlvdXNfZWxlbWVudCwgdGhlKQorCisgICAgZGVmIHRlc3RfYXBwZW5kX2NoaWxkX3RoYXRzX2FscmVhZHlfYXRfdGhlX2VuZChzZWxmKToKKyAgICAgICAgZGF0YSA9ICI8YT48Yj48L2I+PC9hPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChkYXRhKQorICAgICAgICBzb3VwLmEuYXBwZW5kKHNvdXAuYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBzb3VwLmRlY29kZSgpKQorCisgICAgZGVmIHRlc3RfbW92ZV90YWdfdG9fYmVnaW5uaW5nX29mX3BhcmVudChzZWxmKToKKyAgICAgICAgZGF0YSA9ICI8YT48Yj48L2I+PGM+PC9jPjxkPjwvZD48L2E+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGRhdGEpCisgICAgICAgIHNvdXAuYS5pbnNlcnQoMCwgc291cC5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCI8YT48ZD48L2Q+PGI+PC9iPjxjPjwvYz48L2E+Iiwgc291cC5kZWNvZGUoKSkKKworICAgIGRlZiB0ZXN0X2luc2VydF93b3Jrc19vbl9lbXB0eV9lbGVtZW50X3RhZyhzZWxmKToKKyAgICAgICAgIyBUaGlzIGlzIGEgbGl0dGxlIHN0cmFuZ2UsIHNpbmNlIG1vc3QgSFRNTCBwYXJzZXJzIGRvbid0IGFsbG93CisgICAgICAgICMgbWFya3VwIGxpa2UgdGhpcyB0byBjb21lIHRocm91Z2guIEJ1dCBpbiBnZW5lcmFsLCB3ZSBkb24ndAorICAgICAgICAjIGtub3cgd2hhdCB0aGUgcGFyc2VyIHdvdWxkIG9yIHdvdWxkbid0IGhhdmUgYWxsb3dlZCwgc28KKyAgICAgICAgIyBJJ20gbGV0dGluZyB0aGlzIHN1Y2NlZWQgZm9yIG5vdy4KKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGJyLz4iKQorICAgICAgICBzb3VwLmJyLmluc2VydCgxLCAiQ29udGVudHMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzb3VwLmJyKSwgIjxicj5Db250ZW50czwvYnI+IikKKworICAgIGRlZiB0ZXN0X2luc2VydF9iZWZvcmUoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPmZvbzwvYT48Yj5iYXI8L2I+IikKKyAgICAgICAgc291cC5iLmluc2VydF9iZWZvcmUoIkJBWiIpCisgICAgICAgIHNvdXAuYS5pbnNlcnRfYmVmb3JlKCJRVVVYIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZGVjb2RlKCksIHNlbGYuZG9jdW1lbnRfZm9yKCJRVVVYPGE+Zm9vPC9hPkJBWjxiPmJhcjwvYj4iKSkKKworICAgICAgICBzb3VwLmEuaW5zZXJ0X2JlZm9yZShzb3VwLmIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmRlY29kZSgpLCBzZWxmLmRvY3VtZW50X2ZvcigiUVVVWDxiPmJhcjwvYj48YT5mb288L2E+QkFaIikpCisKKyAgICBkZWYgdGVzdF9pbnNlcnRfYWZ0ZXIoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPmZvbzwvYT48Yj5iYXI8L2I+IikKKyAgICAgICAgc291cC5iLmluc2VydF9hZnRlcigiQkFaIikKKyAgICAgICAgc291cC5hLmluc2VydF9hZnRlcigiUVVVWCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmRlY29kZSgpLCBzZWxmLmRvY3VtZW50X2ZvcigiPGE+Zm9vPC9hPlFVVVg8Yj5iYXI8L2I+QkFaIikpCisgICAgICAgIHNvdXAuYi5pbnNlcnRfYWZ0ZXIoc291cC5hKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5kZWNvZGUoKSwgc2VsZi5kb2N1bWVudF9mb3IoIlFVVVg8Yj5iYXI8L2I+PGE+Zm9vPC9hPkJBWiIpKQorCisgICAgZGVmIHRlc3RfaW5zZXJ0X2FmdGVyX3JhaXNlc19leGNlcHRpb25faWZfYWZ0ZXJfaGFzX25vX21lYW5pbmcoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIiIpCisgICAgICAgIHRhZyA9IHNvdXAubmV3X3RhZygiYSIpCisgICAgICAgIHN0cmluZyA9IHNvdXAubmV3X3N0cmluZygiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3RyaW5nLmluc2VydF9hZnRlciwgdGFnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBzb3VwLmluc2VydF9hZnRlciwgdGFnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0YWcuaW5zZXJ0X2FmdGVyLCB0YWcpCisKKyAgICBkZWYgdGVzdF9pbnNlcnRfYmVmb3JlX3JhaXNlc19ub3RpbXBsZW1lbnRlZGVycm9yX2lmX2JlZm9yZV9oYXNfbm9fbWVhbmluZyhzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiIikKKyAgICAgICAgdGFnID0gc291cC5uZXdfdGFnKCJhIikKKyAgICAgICAgc3RyaW5nID0gc291cC5uZXdfc3RyaW5nKCIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHJpbmcuaW5zZXJ0X2JlZm9yZSwgdGFnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBzb3VwLmluc2VydF9iZWZvcmUsIHRhZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGFnLmluc2VydF9iZWZvcmUsIHRhZykKKworICAgIGRlZiB0ZXN0X3JlcGxhY2Vfd2l0aChzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgKKyAgICAgICAgICAgICAgICAiPHA+VGhlcmUncyA8Yj5ubzwvYj4gYnVzaW5lc3MgbGlrZSA8Yj5zaG93PC9iPiBidXNpbmVzczwvcD4iKQorICAgICAgICBubywgc2hvdyA9IHNvdXAuZmluZF9hbGwoJ2InKQorICAgICAgICBzaG93LnJlcGxhY2Vfd2l0aChubykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZGVjb2RlKCksCisgICAgICAgICAgICBzZWxmLmRvY3VtZW50X2ZvcigKKyAgICAgICAgICAgICAgICAiPHA+VGhlcmUncyAgYnVzaW5lc3MgbGlrZSA8Yj5ubzwvYj4gYnVzaW5lc3M8L3A+IikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaG93LnBhcmVudCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuby5wYXJlbnQsIHNvdXAucCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuby5uZXh0X2VsZW1lbnQsICJubyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm8ubmV4dF9zaWJsaW5nLCAiIGJ1c2luZXNzIikKKworICAgIGRlZiB0ZXN0X3JlcGxhY2VfZmlyc3RfY2hpbGQoc2VsZik6CisgICAgICAgIGRhdGEgPSAiPGE+PGI+PC9iPjxjPjwvYz48L2E+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGRhdGEpCisgICAgICAgIHNvdXAuYi5yZXBsYWNlX3dpdGgoc291cC5jKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCI8YT48Yz48L2M+PC9hPiIsIHNvdXAuZGVjb2RlKCkpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlX2xhc3RfY2hpbGQoc2VsZik6CisgICAgICAgIGRhdGEgPSAiPGE+PGI+PC9iPjxjPjwvYz48L2E+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGRhdGEpCisgICAgICAgIHNvdXAuYy5yZXBsYWNlX3dpdGgoc291cC5iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCI8YT48Yj48L2I+PC9hPiIsIHNvdXAuZGVjb2RlKCkpCisKKyAgICBkZWYgdGVzdF9uZXN0ZWRfdGFnX3JlcGxhY2Vfd2l0aChzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgKKyAgICAgICAgICAgICIiIjxhPldlPGI+cmVzZXJ2ZTxjPnRoZTwvYz48ZD5yaWdodDwvZD48L2I+PC9hPjxlPnRvPGY+cmVmdXNlPC9mPjxnPnNlcnZpY2U8L2c+PC9lPiIiIikKKworICAgICAgICAjIFJlcGxhY2UgdGhlIGVudGlyZSA8Yj4gdGFnIGFuZCBpdHMgY29udGVudHMgKCJyZXNlcnZlIHRoZQorICAgICAgICAjIHJpZ2h0Iikgd2l0aCB0aGUgPGY+IHRhZyAoInJlZnVzZSIpLgorICAgICAgICByZW1vdmVfdGFnID0gc291cC5iCisgICAgICAgIG1vdmVfdGFnID0gc291cC5mCisgICAgICAgIHJlbW92ZV90YWcucmVwbGFjZV93aXRoKG1vdmVfdGFnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmRlY29kZSgpLCBzZWxmLmRvY3VtZW50X2ZvcigKKyAgICAgICAgICAgICAgICAiPGE+V2U8Zj5yZWZ1c2U8L2Y+PC9hPjxlPnRvPGc+c2VydmljZTwvZz48L2U+IikpCisKKyAgICAgICAgIyBUaGUgPGI+IHRhZyBpcyBub3cgYW4gb3JwaGFuLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbW92ZV90YWcucGFyZW50LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbW92ZV90YWcuZmluZCh0ZXh0PSJyaWdodCIpLm5leHRfZWxlbWVudCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZW1vdmVfdGFnLnByZXZpb3VzX2VsZW1lbnQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVtb3ZlX3RhZy5uZXh0X3NpYmxpbmcsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVtb3ZlX3RhZy5wcmV2aW91c19zaWJsaW5nLCBOb25lKQorCisgICAgICAgICMgVGhlIDxmPiB0YWcgaXMgbm93IGNvbm5lY3RlZCB0byB0aGUgPGE+IHRhZy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb3ZlX3RhZy5wYXJlbnQsIHNvdXAuYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb3ZlX3RhZy5wcmV2aW91c19lbGVtZW50LCAiV2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vdmVfdGFnLm5leHRfZWxlbWVudC5uZXh0X2VsZW1lbnQsIHNvdXAuZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb3ZlX3RhZy5uZXh0X3NpYmxpbmcsIE5vbmUpCisKKyAgICAgICAgIyBUaGUgZ2FwIHdoZXJlIHRoZSA8Zj4gdGFnIHVzZWQgdG8gYmUgaGFzIGJlZW4gbWVuZGVkLCBhbmQKKyAgICAgICAgIyB0aGUgd29yZCAidG8iIGlzIG5vdyBjb25uZWN0ZWQgdG8gdGhlIDxnPiB0YWcuCisgICAgICAgIHRvX3RleHQgPSBzb3VwLmZpbmQodGV4dD0idG8iKQorICAgICAgICBnX3RhZyA9IHNvdXAuZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRvX3RleHQubmV4dF9lbGVtZW50LCBnX3RhZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0b190ZXh0Lm5leHRfc2libGluZywgZ190YWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ190YWcucHJldmlvdXNfZWxlbWVudCwgdG9fdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnX3RhZy5wcmV2aW91c19zaWJsaW5nLCB0b190ZXh0KQorCisgICAgZGVmIHRlc3RfdW53cmFwKHNlbGYpOgorICAgICAgICB0cmVlID0gc2VsZi5zb3VwKCIiIgorICAgICAgICAgICAgPHA+VW5uZWVkZWQgPGVtPmZvcm1hdHRpbmc8L2VtPiBpcyB1bm5lZWRlZDwvcD4KKyAgICAgICAgICAgICIiIikKKyAgICAgICAgdHJlZS5lbS51bndyYXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyZWUuZW0sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJlZS5wLnRleHQsICJVbm5lZWRlZCBmb3JtYXR0aW5nIGlzIHVubmVlZGVkIikKKworICAgIGRlZiB0ZXN0X3dyYXAoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIkkgd2lzaCBJIHdhcyBib2xkLiIpCisgICAgICAgIHZhbHVlID0gc291cC5zdHJpbmcud3JhcChzb3VwLm5ld190YWcoImIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZS5kZWNvZGUoKSwgIjxiPkkgd2lzaCBJIHdhcyBib2xkLjwvYj4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5kZWNvZGUoKSwgc2VsZi5kb2N1bWVudF9mb3IoIjxiPkkgd2lzaCBJIHdhcyBib2xkLjwvYj4iKSkKKworICAgIGRlZiB0ZXN0X3dyYXBfZXh0cmFjdHNfdGFnX2Zyb21fZWxzZXdoZXJlKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8Yj48L2I+SSB3aXNoIEkgd2FzIGJvbGQuIikKKyAgICAgICAgc291cC5iLm5leHRfc2libGluZy53cmFwKHNvdXAuYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZGVjb2RlKCksIHNlbGYuZG9jdW1lbnRfZm9yKCI8Yj5JIHdpc2ggSSB3YXMgYm9sZC48L2I+IikpCisKKyAgICBkZWYgdGVzdF93cmFwX3B1dHNfbmV3X2NvbnRlbnRzX2F0X3RoZV9lbmQoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxiPkkgbGlrZSBiZWluZyBib2xkLjwvYj5JIHdpc2ggSSB3YXMgYm9sZC4iKQorICAgICAgICBzb3VwLmIubmV4dF9zaWJsaW5nLndyYXAoc291cC5iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihzb3VwLmIuY29udGVudHMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5kZWNvZGUoKSwgc2VsZi5kb2N1bWVudF9mb3IoCisgICAgICAgICAgICAgICAgIjxiPkkgbGlrZSBiZWluZyBib2xkLkkgd2lzaCBJIHdhcyBib2xkLjwvYj4iKSkKKworICAgIGRlZiB0ZXN0X2V4dHJhY3Qoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoCisgICAgICAgICAgICAnPGh0bWw+PGJvZHk+U29tZSBjb250ZW50LiA8ZGl2IGlkPSJuYXYiPk5hdiBjcmFwPC9kaXY+IE1vcmUgY29udGVudC48L2JvZHk+PC9odG1sPicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc291cC5ib2R5LmNvbnRlbnRzKSwgMykKKyAgICAgICAgZXh0cmFjdGVkID0gc291cC5maW5kKGlkPSJuYXYiKS5leHRyYWN0KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5kZWNvZGUoKSwgIjxodG1sPjxib2R5PlNvbWUgY29udGVudC4gIE1vcmUgY29udGVudC48L2JvZHk+PC9odG1sPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXh0cmFjdGVkLmRlY29kZSgpLCAnPGRpdiBpZD0ibmF2Ij5OYXYgY3JhcDwvZGl2PicpCisKKyAgICAgICAgIyBUaGUgZXh0cmFjdGVkIHRhZyBpcyBub3cgYW4gb3JwaGFuLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzb3VwLmJvZHkuY29udGVudHMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4dHJhY3RlZC5wYXJlbnQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXh0cmFjdGVkLnByZXZpb3VzX2VsZW1lbnQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXh0cmFjdGVkLm5leHRfZWxlbWVudC5uZXh0X2VsZW1lbnQsIE5vbmUpCisKKyAgICAgICAgIyBUaGUgZ2FwIHdoZXJlIHRoZSBleHRyYWN0ZWQgdGFnIHVzZWQgdG8gYmUgaGFzIGJlZW4gbWVuZGVkLgorICAgICAgICBjb250ZW50XzEgPSBzb3VwLmZpbmQodGV4dD0iU29tZSBjb250ZW50LiAiKQorICAgICAgICBjb250ZW50XzIgPSBzb3VwLmZpbmQodGV4dD0iIE1vcmUgY29udGVudC4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRfMS5uZXh0X2VsZW1lbnQsIGNvbnRlbnRfMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50XzEubmV4dF9zaWJsaW5nLCBjb250ZW50XzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudF8yLnByZXZpb3VzX2VsZW1lbnQsIGNvbnRlbnRfMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50XzIucHJldmlvdXNfc2libGluZywgY29udGVudF8xKQorCisgICAgZGVmIHRlc3RfZXh0cmFjdF9kaXN0aW5ndWlzaGVzX2JldHdlZW5faWRlbnRpY2FsX3N0cmluZ3Moc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPmZvbzwvYT48Yj5iYXI8L2I+IikKKyAgICAgICAgZm9vXzEgPSBzb3VwLmEuc3RyaW5nCisgICAgICAgIGJhcl8xID0gc291cC5iLnN0cmluZworICAgICAgICBmb29fMiA9IHNvdXAubmV3X3N0cmluZygiZm9vIikKKyAgICAgICAgYmFyXzIgPSBzb3VwLm5ld19zdHJpbmcoImJhciIpCisgICAgICAgIHNvdXAuYS5hcHBlbmQoZm9vXzIpCisgICAgICAgIHNvdXAuYi5hcHBlbmQoYmFyXzIpCisKKyAgICAgICAgIyBOb3cgdGhlcmUgYXJlIHR3byBpZGVudGljYWwgc3RyaW5ncyBpbiB0aGUgPGE+IHRhZywgYW5kIHR3bworICAgICAgICAjIGluIHRoZSA8Yj4gdGFnLiBMZXQncyByZW1vdmUgdGhlIGZpcnN0ICJmb28iIGFuZCB0aGUgc2Vjb25kCisgICAgICAgICMgImJhciIuCisgICAgICAgIGZvb18xLmV4dHJhY3QoKQorICAgICAgICBiYXJfMi5leHRyYWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb29fMiwgc291cC5hLnN0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXJfMiwgc291cC5iLnN0cmluZykKKworICAgIGRlZiB0ZXN0X2NsZWFyKHNlbGYpOgorICAgICAgICAiIiJUYWcuY2xlYXIoKSIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8cD48YT5TdHJpbmcgPGVtPkl0YWxpY2l6ZWQ8L2VtPjwvYT4gYW5kIGFub3RoZXI8L3A+IikKKyAgICAgICAgIyBjbGVhciB1c2luZyBleHRyYWN0KCkKKyAgICAgICAgYSA9IHNvdXAuYQorICAgICAgICBzb3VwLnAuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzb3VwLnAuY29udGVudHMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihhLCAiY29udGVudHMiKSkKKworICAgICAgICAjIGNsZWFyIHVzaW5nIGRlY29tcG9zZSgpCisgICAgICAgIGVtID0gYS5lbQorICAgICAgICBhLmNsZWFyKGRlY29tcG9zZT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGxlbihlbS5jb250ZW50cykpCisKKyAgICBkZWYgdGVzdF9zdHJpbmdfc2V0KHNlbGYpOgorICAgICAgICAiIiJUYWcuc3RyaW5nID0gJ3N0cmluZyciIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+PC9hPiA8Yj48Yz48L2M+PC9iPiIpCisgICAgICAgIHNvdXAuYS5zdHJpbmcgPSAiZm9vIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYS5jb250ZW50cywgWyJmb28iXSkKKyAgICAgICAgc291cC5iLnN0cmluZyA9ICJiYXIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5iLmNvbnRlbnRzLCBbImJhciJdKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nX3NldF9kb2VzX25vdF9hZmZlY3Rfb3JpZ2luYWxfc3RyaW5nKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT48Yj5mb288L2I+PGM+YmFyPC9jPiIpCisgICAgICAgIHNvdXAuYi5zdHJpbmcgPSBzb3VwLmMuc3RyaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5hLmVuY29kZSgpLCBiIjxhPjxiPmJhcjwvYj48Yz5iYXI8L2M+PC9hPiIpCisKKyAgICBkZWYgdGVzdF9zZXRfc3RyaW5nX3ByZXNlcnZlc19jbGFzc19vZl9zdHJpbmcoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPjwvYT4iKQorICAgICAgICBjZGF0YSA9IENEYXRhKCJmb28iKQorICAgICAgICBzb3VwLmEuc3RyaW5nID0gY2RhdGEKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc291cC5hLnN0cmluZywgQ0RhdGEpKQorCitjbGFzcyBUZXN0RWxlbWVudE9iamVjdHMoU291cFRlc3QpOgorICAgICIiIlRlc3QgdmFyaW91cyBmZWF0dXJlcyBvZiBlbGVtZW50IG9iamVjdHMuIiIiCisKKyAgICBkZWYgdGVzdF9sZW4oc2VsZik6CisgICAgICAgICIiIlRoZSBsZW5ndGggb2YgYW4gZWxlbWVudCBpcyBpdHMgbnVtYmVyIG9mIGNoaWxkcmVuLiIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8dG9wPjE8Yj4yPC9iPjM8L3RvcD4iKQorCisgICAgICAgICMgVGhlIEJlYXV0aWZ1bFNvdXAgb2JqZWN0IGl0c2VsZiBjb250YWlucyBvbmUgZWxlbWVudDogdGhlCisgICAgICAgICMgPHRvcD4gdGFnLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzb3VwLmNvbnRlbnRzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc291cCksIDEpCisKKyAgICAgICAgIyBUaGUgPHRvcD4gdGFnIGNvbnRhaW5zIHRocmVlIGVsZW1lbnRzOiB0aGUgdGV4dCBub2RlICIxIiwgdGhlCisgICAgICAgICMgPGI+IHRhZywgYW5kIHRoZSB0ZXh0IG5vZGUgIjMiLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzb3VwLnRvcCksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNvdXAudG9wLmNvbnRlbnRzKSwgMykKKworICAgIGRlZiB0ZXN0X21lbWJlcl9hY2Nlc3NfaW52b2tlc19maW5kKHNlbGYpOgorICAgICAgICAiIiJBY2Nlc3NpbmcgYSBQeXRob24gbWVtYmVyIC5mb28gaW52b2tlcyBmaW5kKCdmb28nKSIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCc8Yj48aT48L2k+PC9iPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5iLCBzb3VwLmZpbmQoJ2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmIuaSwgc291cC5maW5kKCdiJykuZmluZCgnaScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2RlcHJlY2F0ZWRfbWVtYmVyX2FjY2VzcyhzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgnPGI+PGk+PC9pPjwvYj4nKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgdGFnID0gc291cC5iVGFnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5iLCB0YWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAnLmJUYWcgaXMgZGVwcmVjYXRlZCwgdXNlIC5maW5kKCJiIikgaW5zdGVhZC4nLAorICAgICAgICAgICAgc3RyKHdbMF0ubWVzc2FnZSkpCisKKyAgICBkZWYgdGVzdF9oYXNfYXR0cihzZWxmKToKKyAgICAgICAgIiIiaGFzX2F0dHIoKSBjaGVja3MgZm9yIHRoZSBwcmVzZW5jZSBvZiBhbiBhdHRyaWJ1dGUuCisKKyAgICAgICAgUGxlYXNlIG5vdGUgbm90ZTogaGFzX2F0dHIoKSBpcyBkaWZmZXJlbnQgZnJvbQorICAgICAgICBfX2luX18uIGhhc19hdHRyKCkgY2hlY2tzIHRoZSB0YWcncyBhdHRyaWJ1dGVzIGFuZCBfX2luX18KKyAgICAgICAgY2hlY2tzIHRoZSB0YWcncyBjaGlkbHJlbi4KKyAgICAgICAgIiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxmb28gYXR0cj0nYmFyJz4iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc291cC5mb28uaGFzX2F0dHIoJ2F0dHInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzb3VwLmZvby5oYXNfYXR0cignYXR0cjInKSkKKworCisgICAgZGVmIHRlc3RfYXR0cmlidXRlc19jb21lX291dF9pbl9hbHBoYWJldGljYWxfb3JkZXIoc2VsZik6CisgICAgICAgIG1hcmt1cCA9ICc8YiBhPSIxIiB6PSI1IiBtPSIzIiBmPSIyIiB5PSI0Ij48L2I+JworICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMobWFya3VwLCAnPGIgYT0iMSIgZj0iMiIgbT0iMyIgeT0iNCIgej0iNSI+PC9iPicpCisKKyAgICBkZWYgdGVzdF9zdHJpbmcoc2VsZik6CisgICAgICAgICMgQSB0YWcgdGhhdCBjb250YWlucyBvbmx5IGEgdGV4dCBub2RlIG1ha2VzIHRoYXQgbm9kZQorICAgICAgICAjIGF2YWlsYWJsZSBhcyAuc3RyaW5nLgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8Yj5mb288L2I+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmIuc3RyaW5nLCAnZm9vJykKKworICAgIGRlZiB0ZXN0X2VtcHR5X3RhZ19oYXNfbm9fc3RyaW5nKHNlbGYpOgorICAgICAgICAjIEEgdGFnIHdpdGggbm8gY2hpbGRyZW4gaGFzIG5vIC5zdGlybmcuCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxiPjwvYj4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYi5zdHJpbmcsIE5vbmUpCisKKyAgICBkZWYgdGVzdF90YWdfd2l0aF9tdWx0aXBsZV9jaGlsZHJlbl9oYXNfbm9fc3RyaW5nKHNlbGYpOgorICAgICAgICAjIEEgdGFnIHdpdGggbm8gY2hpbGRyZW4gaGFzIG5vIC5zdHJpbmcuCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPmZvbzxiPjwvYj48Yj48L2I+PC9iPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5iLnN0cmluZywgTm9uZSkKKworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT5mb288Yj48L2I+YmFyPC9iPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5iLnN0cmluZywgTm9uZSkKKworICAgICAgICAjIEV2ZW4gaWYgYWxsIHRoZSBjaGlsZHJlbiBhcmUgc3RyaW5ncywgZHVlIHRvIHRyaWNrZXJ5LAorICAgICAgICAjIGl0IHdvbid0IHdvcmstLWJ1dCB0aGlzIHdvdWxkIGJlIGEgZ29vZCBvcHRpbWl6YXRpb24uCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPmZvbzwvYj4iKQorICAgICAgICBzb3VwLmEuaW5zZXJ0KDEsICJiYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYS5zdHJpbmcsIE5vbmUpCisKKyAgICBkZWYgdGVzdF90YWdfd2l0aF9yZWN1cnNpdmVfc3RyaW5nX2hhc19zdHJpbmcoc2VsZik6CisgICAgICAgICMgQSB0YWcgd2l0aCBhIHNpbmdsZSBjaGlsZCB3aGljaCBoYXMgYSAuc3RyaW5nIGluaGVyaXRzIHRoYXQKKyAgICAgICAgIyAuc3RyaW5nLgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT48Yj5mb288L2I+PC9hPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5hLnN0cmluZywgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5zdHJpbmcsICJmb28iKQorCisgICAgZGVmIHRlc3RfbGFja19vZl9zdHJpbmcoc2VsZik6CisgICAgICAgICIiIk9ubHkgYSB0YWcgY29udGFpbmluZyBhIHNpbmdsZSB0ZXh0IG5vZGUgaGFzIGEgLnN0cmluZy4iIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGI+ZjxpPmU8L2k+bzwvYj4iKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNvdXAuYi5zdHJpbmcpCisKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGI+PC9iPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc291cC5iLnN0cmluZykKKworICAgIGRlZiB0ZXN0X2FsbF90ZXh0KHNlbGYpOgorICAgICAgICAiIiJUYWcudGV4dCBhbmQgVGFnLmdldF90ZXh0KHNlcD11IiIpIC0+IGFsbCBjaGlsZCB0ZXh0LCBjb25jYXRlbmF0ZWQiIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+YTxiPnI8L2I+ICAgPHI+IHQgPC9yPjwvYT4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYS50ZXh0LCAiYXIgIHQgIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmEuZ2V0X3RleHQoc3RyaXA9VHJ1ZSksICJhcnQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYS5nZXRfdGV4dCgiLCIpLCAiYSxyLCAsIHQgIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmEuZ2V0X3RleHQoIiwiLCBzdHJpcD1UcnVlKSwgImEscix0IikKKworICAgIGRlZiB0ZXN0X2dldF90ZXh0X2lnbm9yZXNfY29tbWVudHMoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoImZvbzwhLS1JR05PUkUtLT5iYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZ2V0X3RleHQoKSwgImZvb2JhciIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZ2V0X3RleHQodHlwZXM9KE5hdmlnYWJsZVN0cmluZywgQ29tbWVudCkpLCAiZm9vSUdOT1JFYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZ2V0X3RleHQodHlwZXM9Tm9uZSksICJmb29JR05PUkViYXIiKQorCisgICAgZGVmIHRlc3RfYWxsX3N0cmluZ3NfaWdub3Jlc19jb21tZW50cyhzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiZm9vPCEtLUlHTk9SRS0tPmJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydmb28nLCAnYmFyJ10sIGxpc3Qoc291cC5zdHJpbmdzKSkKKworY2xhc3MgVGVzdENEQXRhTGlzdEF0dHJpYnV0ZXMoU291cFRlc3QpOgorCisgICAgIiIiVGVzdGluZyBjZGF0YS1saXN0IGF0dHJpYnV0ZXMgbGlrZSAnY2xhc3MnLgorICAgICIiIgorICAgIGRlZiB0ZXN0X3NpbmdsZV92YWx1ZV9iZWNvbWVzX2xpc3Qoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhIGNsYXNzPSdmb28nPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyJmb28iXSxzb3VwLmFbJ2NsYXNzJ10pCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV92YWx1ZXNfYmVjb21lc19saXN0KHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YSBjbGFzcz0nZm9vIGJhcic+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbImZvbyIsICJiYXIiXSwgc291cC5hWydjbGFzcyddKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfdmFsdWVzX3NlcGFyYXRlZF9ieV93ZWlyZF93aGl0ZXNwYWNlKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YSBjbGFzcz0nZm9vXHRiYXJcbmJheic+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbImZvbyIsICJiYXIiLCAiYmF6Il0sc291cC5hWydjbGFzcyddKQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlc19qb2luZWRfaW50b19zdHJpbmdfb25fb3V0cHV0KHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YSBjbGFzcz0nZm9vXHRiYXInPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYic8YSBjbGFzcz0iZm9vIGJhciI+PC9hPicsIHNvdXAuYS5lbmNvZGUoKSkKKworICAgIGRlZiB0ZXN0X2FjY2VwdF9jaGFyc2V0KHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCc8Zm9ybSBhY2NlcHQtY2hhcnNldD0iSVNPLTg4NTktMSBVVEYtOCI+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ0lTTy04ODU5LTEnLCAnVVRGLTgnXSwgc291cC5mb3JtWydhY2NlcHQtY2hhcnNldCddKQorCisgICAgZGVmIHRlc3RfY2RhdGFfYXR0cmlidXRlX2FwcGx5aW5nX29ubHlfdG9fb25lX3RhZyhzZWxmKToKKyAgICAgICAgZGF0YSA9ICc8YSBhY2NlcHQtY2hhcnNldD0iSVNPLTg4NTktMSBVVEYtOCI+PC9hPicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChkYXRhKQorICAgICAgICAjIFdlIHNhdyBpbiBhbm90aGVyIHRlc3QgdGhhdCBhY2NlcHQtY2hhcnNldCBpcyBhIGNkYXRhLWxpc3QKKyAgICAgICAgIyBhdHRyaWJ1dGUgZm9yIHRoZSA8Zm9ybT4gdGFnLiBCdXQgaXQncyBub3QgYSBjZGF0YS1saXN0CisgICAgICAgICMgYXR0cmlidXRlIGZvciBhbnkgb3RoZXIgdGFnLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdJU08tODg1OS0xIFVURi04Jywgc291cC5hWydhY2NlcHQtY2hhcnNldCddKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nX2hhc19pbW11dGFibGVfbmFtZV9wcm9wZXJ0eShzZWxmKToKKyAgICAgICAgc3RyaW5nID0gc2VsZi5zb3VwKCJzIikuc3RyaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc3RyaW5nLm5hbWUpCisgICAgICAgIGRlZiB0KCk6CisgICAgICAgICAgICBzdHJpbmcubmFtZSA9ICdmb28nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCB0KQorCitjbGFzcyBUZXN0UGVyc2lzdGVuY2UoU291cFRlc3QpOgorICAgICJUZXN0aW5nIGZlYXR1cmVzIGxpa2UgcGlja2xlIGFuZCBkZWVwY29weS4iCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKFRlc3RQZXJzaXN0ZW5jZSwgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLnBhZ2UgPSAiIiI8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iCisiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC90cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+QmVhdXRpZnVsIFNvdXA6IFdlIGNhbGxlZCBoaW0gVG9ydG9pc2UgYmVjYXVzZSBoZSB0YXVnaHQgdXMuPC90aXRsZT4KKzxsaW5rIHJldj0ibWFkZSIgaHJlZj0ibWFpbHRvOmxlb25hcmRyQHNlZ2ZhdWx0Lm9yZyI+Cis8bWV0YSBuYW1lPSJEZXNjcmlwdGlvbiIgY29udGVudD0iQmVhdXRpZnVsIFNvdXA6IGFuIEhUTUwgcGFyc2VyIG9wdGltaXplZCBmb3Igc2NyZWVuLXNjcmFwaW5nLiI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik1hcmtvdiBBcHByb3hpbWF0aW9uIDEuNCAobW9kdWxlOiBsZW9uYXJkcikiPgorPG1ldGEgbmFtZT0iYXV0aG9yIiBjb250ZW50PSJMZW9uYXJkIFJpY2hhcmRzb24iPgorPC9oZWFkPgorPGJvZHk+Cis8YSBocmVmPSJmb28iPmZvbzwvYT4KKzxhIGhyZWY9ImZvbyI+PGI+YmFyPC9iPjwvYT4KKzwvYm9keT4KKzwvaHRtbD4iIiIKKyAgICAgICAgc2VsZi50cmVlID0gc2VsZi5zb3VwKHNlbGYucGFnZSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9hbmRfdW5waWNrbGVfaWRlbnRpdHkoc2VsZik6CisgICAgICAgICMgUGlja2xpbmcgYSB0cmVlLCB0aGVuIHVucGlja2xpbmcgaXQsIHlpZWxkcyBhIHRyZWUgaWRlbnRpY2FsCisgICAgICAgICMgdG8gdGhlIG9yaWdpbmFsLgorICAgICAgICBkdW1wZWQgPSBwaWNrbGUuZHVtcHMoc2VsZi50cmVlLCAyKQorICAgICAgICBsb2FkZWQgPSBwaWNrbGUubG9hZHMoZHVtcGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5fX2NsYXNzX18sIEJlYXV0aWZ1bFNvdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLmRlY29kZSgpLCBzZWxmLnRyZWUuZGVjb2RlKCkpCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV9pZGVudGl0eShzZWxmKToKKyAgICAgICAgIyBNYWtpbmcgYSBkZWVwY29weSBvZiBhIHRyZWUgeWllbGRzIGFuIGlkZW50aWNhbCB0cmVlLgorICAgICAgICBjb3BpZWQgPSBjb3B5LmRlZXBjb3B5KHNlbGYudHJlZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3BpZWQuZGVjb2RlKCksIHNlbGYudHJlZS5kZWNvZGUoKSkKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfcGlja2xlKHNlbGYpOgorICAgICAgICAjIEEgdHJlZSBjb250YWluaW5nIFVuaWNvZGUgY2hhcmFjdGVycyBjYW4gYmUgcGlja2xlZC4KKyAgICAgICAgaHRtbCA9IHUiPGI+XE57U05PV01BTn08L2I+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGh0bWwpCisgICAgICAgIGR1bXBlZCA9IHBpY2tsZS5kdW1wcyhzb3VwLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCkKKyAgICAgICAgbG9hZGVkID0gcGlja2xlLmxvYWRzKGR1bXBlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuZGVjb2RlKCksIHNvdXAuZGVjb2RlKCkpCisKKworY2xhc3MgVGVzdFN1YnN0aXR1dGlvbnMoU291cFRlc3QpOgorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9mb3JtYXR0ZXJfaXNfbWluaW1hbChzZWxmKToKKyAgICAgICAgbWFya3VwID0gdSI8Yj4mbHQ7Jmx0O1NhY3JcTntMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFfSBibGV1ISZndDsmZ3Q7PC9iPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIGRlY29kZWQgPSBzb3VwLmRlY29kZShmb3JtYXR0ZXI9Im1pbmltYWwiKQorICAgICAgICAjIFRoZSA8IGlzIGNvbnZlcnRlZCBiYWNrIGludG8gJmx0OyBidXQgdGhlIGUtd2l0aC1hY3V0ZSBpcyBsZWZ0IGFsb25lLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgZGVjb2RlZCwKKyAgICAgICAgICAgIHNlbGYuZG9jdW1lbnRfZm9yKAorICAgICAgICAgICAgICAgIHUiPGI+Jmx0OyZsdDtTYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSEmZ3Q7Jmd0OzwvYj4iKSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdHRlcl9odG1sKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSB1IjxiPiZsdDsmbHQ7U2FjclxOe0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEV9IGJsZXUhJmd0OyZndDs8L2I+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgZGVjb2RlZCA9IHNvdXAuZGVjb2RlKGZvcm1hdHRlcj0iaHRtbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBkZWNvZGVkLAorICAgICAgICAgICAgc2VsZi5kb2N1bWVudF9mb3IoIjxiPiZsdDsmbHQ7U2FjciZlYWN1dGU7IGJsZXUhJmd0OyZndDs8L2I+IikpCisKKyAgICBkZWYgdGVzdF9mb3JtYXR0ZXJfbWluaW1hbChzZWxmKToKKyAgICAgICAgbWFya3VwID0gdSI8Yj4mbHQ7Jmx0O1NhY3JcTntMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFfSBibGV1ISZndDsmZ3Q7PC9iPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIGRlY29kZWQgPSBzb3VwLmRlY29kZShmb3JtYXR0ZXI9Im1pbmltYWwiKQorICAgICAgICAjIFRoZSA8IGlzIGNvbnZlcnRlZCBiYWNrIGludG8gJmx0OyBidXQgdGhlIGUtd2l0aC1hY3V0ZSBpcyBsZWZ0IGFsb25lLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgZGVjb2RlZCwKKyAgICAgICAgICAgIHNlbGYuZG9jdW1lbnRfZm9yKAorICAgICAgICAgICAgICAgIHUiPGI+Jmx0OyZsdDtTYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSEmZ3Q7Jmd0OzwvYj4iKSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdHRlcl9udWxsKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSB1IjxiPiZsdDsmbHQ7U2FjclxOe0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEV9IGJsZXUhJmd0OyZndDs8L2I+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgZGVjb2RlZCA9IHNvdXAuZGVjb2RlKGZvcm1hdHRlcj1Ob25lKQorICAgICAgICAjIE5laXRoZXIgdGhlIGFuZ2xlIGJyYWNrZXRzIG5vciB0aGUgZS13aXRoLWFjdXRlIGFyZSBjb252ZXJ0ZWQuCisgICAgICAgICMgVGhpcyBpcyBub3QgdmFsaWQgSFRNTCwgYnV0IGl0J3Mgd2hhdCB0aGUgdXNlciB3YW50ZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kb2N1bWVudF9mb3IodSI8Yj48PFNhY3JcTntMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFfSBibGV1IT4+PC9iPiIpKQorCisgICAgZGVmIHRlc3RfZm9ybWF0dGVyX2N1c3RvbShzZWxmKToKKyAgICAgICAgbWFya3VwID0gdSI8Yj4mbHQ7Zm9vJmd0OzwvYj48Yj5iYXI8L2I+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgZGVjb2RlZCA9IHNvdXAuZGVjb2RlKGZvcm1hdHRlciA9IGxhbWJkYSB4OiB4LnVwcGVyKCkpCisgICAgICAgICMgSW5zdGVhZCBvZiBub3JtYWwgZW50aXR5IGNvbnZlcnNpb24gY29kZSwgdGhlIGN1c3RvbQorICAgICAgICAjIGNhbGxhYmxlIGlzIGNhbGxlZCBvbiBldmVyeSBzdHJpbmcuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBkZWNvZGVkLAorICAgICAgICAgICAgc2VsZi5kb2N1bWVudF9mb3IodSI8Yj48Rk9PPjwvYj48Yj5CQVI8L2I+IikpCisKKyAgICBkZWYgdGVzdF9mb3JtYXR0ZXJfaXNfcnVuX29uX2F0dHJpYnV0ZV92YWx1ZXMoc2VsZik6CisgICAgICAgIG1hcmt1cCA9IHUnPGEgaHJlZj0iaHR0cDovL2EuY29tP2E9YiZjPcOpIj5lPC9hPicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIGEgPSBzb3VwLmEKKworICAgICAgICBleHBlY3RfbWluaW1hbCA9IHUnPGEgaHJlZj0iaHR0cDovL2EuY29tP2E9YiZhbXA7Yz3DqSI+ZTwvYT4nCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RfbWluaW1hbCwgYS5kZWNvZGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RfbWluaW1hbCwgYS5kZWNvZGUoZm9ybWF0dGVyPSJtaW5pbWFsIikpCisKKyAgICAgICAgZXhwZWN0X2h0bWwgPSB1JzxhIGhyZWY9Imh0dHA6Ly9hLmNvbT9hPWImYW1wO2M9JmVhY3V0ZTsiPmU8L2E+JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdF9odG1sLCBhLmRlY29kZShmb3JtYXR0ZXI9Imh0bWwiKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hcmt1cCwgYS5kZWNvZGUoZm9ybWF0dGVyPU5vbmUpKQorICAgICAgICBleHBlY3RfdXBwZXIgPSB1JzxhIGhyZWY9IkhUVFA6Ly9BLkNPTT9BPUImQz3DiSI+RTwvYT4nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0X3VwcGVyLCBhLmRlY29kZShmb3JtYXR0ZXI9bGFtYmRhIHg6IHgudXBwZXIoKSkpCisKKyAgICBkZWYgdGVzdF9mb3JtYXR0ZXJfc2tpcHNfc2NyaXB0X3RhZ19mb3JfaHRtbF9kb2N1bWVudHMoc2VsZik6CisgICAgICAgIGRvYyA9ICIiIgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICBjb25zb2xlLmxvZygiPCA8IGhleSA+ID4gIik7CisgIDwvc2NyaXB0PgorIiIiCisgICAgICAgIGVuY29kZWQgPSBCZWF1dGlmdWxTb3VwKGRvYykuZW5jb2RlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIiPCA8IGhleSA+ID4iIGluIGVuY29kZWQpCisKKyAgICBkZWYgdGVzdF9mb3JtYXR0ZXJfc2tpcHNfc3R5bGVfdGFnX2Zvcl9odG1sX2RvY3VtZW50cyhzZWxmKToKKyAgICAgICAgZG9jID0gIiIiCisgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgICBjb25zb2xlLmxvZygiPCA8IGhleSA+ID4gIik7CisgIDwvc3R5bGU+CisiIiIKKyAgICAgICAgZW5jb2RlZCA9IEJlYXV0aWZ1bFNvdXAoZG9jKS5lbmNvZGUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYiI8IDwgaGV5ID4gPiIgaW4gZW5jb2RlZCkKKworICAgIGRlZiB0ZXN0X3ByZXR0aWZ5X2xlYXZlc19wcmVmb3JtYXR0ZWRfdGV4dF9hbG9uZShzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGRpdj4gIGZvbyAgPHByZT4gIFx0YmFyXG4gIFxuICA8L3ByZT4gIGJheiAgIikKKyAgICAgICAgIyBFdmVyeXRoaW5nIG91dHNpZGUgdGhlIDxwcmU+IHRhZyBpcyByZWZvcm1hdHRlZCwgYnV0IGV2ZXJ5dGhpbmcKKyAgICAgICAgIyBpbnNpZGUgaXMgbGVmdCBhbG9uZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHUnPGRpdj5cbiBmb29cbiA8cHJlPiAgXHRiYXJcbiAgXG4gIDwvcHJlPlxuIGJhelxuPC9kaXY+JywKKyAgICAgICAgICAgIHNvdXAuZGl2LnByZXR0aWZ5KCkpCisKKyAgICBkZWYgdGVzdF9wcmV0dGlmeV9hY2NlcHRzX2Zvcm1hdHRlcihzZWxmKToKKyAgICAgICAgc291cCA9IEJlYXV0aWZ1bFNvdXAoIjxodG1sPjxib2R5PmZvbzwvYm9keT48L2h0bWw+IikKKyAgICAgICAgcHJldHR5ID0gc291cC5wcmV0dGlmeShmb3JtYXR0ZXIgPSBsYW1iZGEgeDogeC51cHBlcigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIkZPTyIgaW4gcHJldHR5KQorCisgICAgZGVmIHRlc3RfcHJldHRpZnlfb3V0cHV0c191bmljb2RlX2J5X2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPjwvYT4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUsIHR5cGUoc291cC5wcmV0dGlmeSgpKSkKKworICAgIGRlZiB0ZXN0X3ByZXR0aWZ5X2Nhbl9lbmNvZGVfZGF0YShzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+PC9hPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMsIHR5cGUoc291cC5wcmV0dGlmeSgidXRmLTgiKSkpCisKKyAgICBkZWYgdGVzdF9odG1sX2VudGl0eV9zdWJzdGl0dXRpb25fb2ZmX2J5X2RlZmF1bHQoc2VsZik6CisgICAgICAgIG1hcmt1cCA9IHUiPGI+U2FjclxOe0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEV9IGJsZXUhPC9iPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIGVuY29kZWQgPSBzb3VwLmIuZW5jb2RlKCJ1dGYtOCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2RlZCwgbWFya3VwLmVuY29kZSgndXRmLTgnKSkKKworICAgIGRlZiB0ZXN0X2VuY29kaW5nX3N1YnN0aXR1dGlvbihzZWxmKToKKyAgICAgICAgIyBIZXJlJ3MgdGhlIDxtZXRhPiB0YWcgc2F5aW5nIHRoYXQgYSBkb2N1bWVudCBpcworICAgICAgICAjIGVuY29kZWQgaW4gU2hpZnQtSklTLgorICAgICAgICBtZXRhX3RhZyA9ICgnPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXgtc2ppcyIgJworICAgICAgICAgICAgICAgICAgICAnaHR0cC1lcXVpdj0iQ29udGVudC10eXBlIi8+JykKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtZXRhX3RhZykKKworICAgICAgICAjIFBhcnNlIHRoZSBkb2N1bWVudCwgYW5kIHRoZSBjaGFyc2V0IGFwcHJlYXJzIHVuY2hhbmdlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLm1ldGFbJ2NvbnRlbnQnXSwgJ3RleHQvaHRtbDsgY2hhcnNldD14LXNqaXMnKQorCisgICAgICAgICMgRW5jb2RlIHRoZSBkb2N1bWVudCBpbnRvIHNvbWUgZW5jb2RpbmcsIGFuZCB0aGUgZW5jb2RpbmcgaXMKKyAgICAgICAgIyBzdWJzdGl0dXRlZCBpbnRvIHRoZSBtZXRhIHRhZy4KKyAgICAgICAgdXRmXzggPSBzb3VwLmVuY29kZSgidXRmLTgiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYiJjaGFyc2V0PXV0Zi04IiBpbiB1dGZfOCkKKworICAgICAgICBldWNfanAgPSBzb3VwLmVuY29kZSgiZXVjX2pwIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIiY2hhcnNldD1ldWNfanAiIGluIGV1Y19qcCkKKworICAgICAgICBzaGlmdF9qaXMgPSBzb3VwLmVuY29kZSgic2hpZnQtamlzIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIiY2hhcnNldD1zaGlmdC1qaXMiIGluIHNoaWZ0X2ppcykKKworICAgICAgICB1dGZfMTZfdSA9IHNvdXAuZW5jb2RlKCJ1dGYtMTYiKS5kZWNvZGUoInV0Zi0xNiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiY2hhcnNldD11dGYtMTYiIGluIHV0Zl8xNl91KQorCisgICAgZGVmIHRlc3RfZW5jb2Rpbmdfc3Vic3RpdHV0aW9uX2RvZXNudF9oYXBwZW5faWZfdGFnX2lzX3N0cmFpbmVkKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSAoJzxoZWFkPjxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD14LXNqaXMiICcKKyAgICAgICAgICAgICAgICAgICAgJ2h0dHAtZXF1aXY9IkNvbnRlbnQtdHlwZSIvPjwvaGVhZD48cHJlPmZvbzwvcHJlPicpCisKKyAgICAgICAgIyBCZWF1dGlmdWwgU291cCB1c2VkIHRvIHRyeSB0byByZXdyaXRlIHRoZSBtZXRhIHRhZyBldmVuIGlmIHRoZQorICAgICAgICAjIG1ldGEgdGFnIGdvdCBmaWx0ZXJlZCBvdXQgYnkgdGhlIHN0cmFpbmVyLiBUaGlzIHRlc3QgbWFrZXMKKyAgICAgICAgIyBzdXJlIHRoYXQgZG9lc24ndCBoYXBwZW4uCisgICAgICAgIHN0cmFpbmVyID0gU291cFN0cmFpbmVyKCdwcmUnKQorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCwgcGFyc2Vfb25seT1zdHJhaW5lcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmNvbnRlbnRzWzBdLm5hbWUsICdwcmUnKQorCitjbGFzcyBUZXN0RW5jb2RpbmcoU291cFRlc3QpOgorICAgICIiIlRlc3QgdGhlIGFiaWxpdHkgdG8gZW5jb2RlIG9iamVjdHMgaW50byBzdHJpbmdzLiIiIgorCisgICAgZGVmIHRlc3RfdW5pY29kZV9zdHJpbmdfY2FuX2JlX2VuY29kZWQoc2VsZik6CisgICAgICAgIGh0bWwgPSB1IjxiPlxOe1NOT1dNQU59PC9iPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChodG1sKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYi5zdHJpbmcuZW5jb2RlKCJ1dGYtOCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1IlxOe1NOT1dNQU59Ii5lbmNvZGUoInV0Zi04IikpCisKKyAgICBkZWYgdGVzdF90YWdfY29udGFpbmluZ191bmljb2RlX3N0cmluZ19jYW5fYmVfZW5jb2RlZChzZWxmKToKKyAgICAgICAgaHRtbCA9IHUiPGI+XE57U05PV01BTn08L2I+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGh0bWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmIuZW5jb2RlKCJ1dGYtOCIpLCBodG1sLmVuY29kZSgidXRmLTgiKSkKKworICAgIGRlZiB0ZXN0X2VuY29kaW5nX3N1YnN0aXR1dGVzX3VucmVjb2duaXplZF9jaGFyYWN0ZXJzX2J5X2RlZmF1bHQoc2VsZik6CisgICAgICAgIGh0bWwgPSB1IjxiPlxOe1NOT1dNQU59PC9iPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChodG1sKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYi5lbmNvZGUoImFzY2lpIiksIGIiPGI+JiM5NzMxOzwvYj4iKQorCisgICAgZGVmIHRlc3RfZW5jb2RpbmdfY2FuX2JlX21hZGVfc3RyaWN0KHNlbGYpOgorICAgICAgICBodG1sID0gdSI8Yj5cTntTTk9XTUFOfTwvYj4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoaHRtbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBVbmljb2RlRW5jb2RlRXJyb3IsIHNvdXAuZW5jb2RlLCAiYXNjaWkiLCBlcnJvcnM9InN0cmljdCIpCisKKyAgICBkZWYgdGVzdF9kZWNvZGVfY29udGVudHMoc2VsZik6CisgICAgICAgIGh0bWwgPSB1IjxiPlxOe1NOT1dNQU59PC9iPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChodG1sKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiXE57U05PV01BTn0iLCBzb3VwLmIuZGVjb2RlX2NvbnRlbnRzKCkpCisKKyAgICBkZWYgdGVzdF9lbmNvZGVfY29udGVudHMoc2VsZik6CisgICAgICAgIGh0bWwgPSB1IjxiPlxOe1NOT1dNQU59PC9iPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChodG1sKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgdSJcTntTTk9XTUFOfSIuZW5jb2RlKCJ1dGY4IiksIHNvdXAuYi5lbmNvZGVfY29udGVudHMoCisgICAgICAgICAgICAgICAgZW5jb2Rpbmc9InV0ZjgiKSkKKworICAgIGRlZiB0ZXN0X2RlcHJlY2F0ZWRfcmVuZGVyQ29udGVudHMoc2VsZik6CisgICAgICAgIGh0bWwgPSB1IjxiPlxOe1NOT1dNQU59PC9iPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChodG1sKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgdSJcTntTTk9XTUFOfSIuZW5jb2RlKCJ1dGY4IiksIHNvdXAuYi5yZW5kZXJDb250ZW50cygpKQorCitjbGFzcyBUZXN0TmF2aWdhYmxlU3RyaW5nU3ViY2xhc3NlcyhTb3VwVGVzdCk6CisKKyAgICBkZWYgdGVzdF9jZGF0YShzZWxmKToKKyAgICAgICAgIyBOb25lIG9mIHRoZSBjdXJyZW50IGJ1aWxkZXJzIHR1cm4gQ0RBVEEgc2VjdGlvbnMgaW50byBDRGF0YQorICAgICAgICAjIG9iamVjdHMsIGJ1dCB5b3UgY2FuIGNyZWF0ZSB0aGVtIG1hbnVhbGx5LgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCIiKQorICAgICAgICBjZGF0YSA9IENEYXRhKCJmb28iKQorICAgICAgICBzb3VwLmluc2VydCgxLCBjZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc291cCksICI8IVtDREFUQVtmb29dXT4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZmluZCh0ZXh0PSJmb28iKSwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5jb250ZW50c1swXSwgImZvbyIpCisKKyAgICBkZWYgdGVzdF9jZGF0YV9pc19uZXZlcl9mb3JtYXR0ZWQoc2VsZik6CisgICAgICAgICIiIlRleHQgaW5zaWRlIGEgQ0RhdGEgb2JqZWN0IGlzIHBhc3NlZCBpbnRvIHRoZSBmb3JtYXR0ZXIuCisKKyAgICAgICAgQnV0IHRoZSByZXR1cm4gdmFsdWUgaXMgaWdub3JlZC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5jb3VudCA9IDAKKyAgICAgICAgZGVmIGluY3JlbWVudCgqYXJncyk6CisgICAgICAgICAgICBzZWxmLmNvdW50ICs9IDEKKyAgICAgICAgICAgIHJldHVybiAiQklUVEVSIEZBSUxVUkUiCisKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiIikKKyAgICAgICAgY2RhdGEgPSBDRGF0YSgiPD48Pjw+IikKKyAgICAgICAgc291cC5pbnNlcnQoMSwgY2RhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBiIjwhW0NEQVRBWzw+PD48Pl1dPiIsIHNvdXAuZW5jb2RlKGZvcm1hdHRlcj1pbmNyZW1lbnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbGYuY291bnQpCisKKyAgICBkZWYgdGVzdF9kb2N0eXBlX2VuZHNfaW5fbmV3bGluZShzZWxmKToKKyAgICAgICAgIyBVbmxpa2Ugb3RoZXIgTmF2aWdhYmxlU3RyaW5nIHN1YmNsYXNzZXMsIGEgRE9DVFlQRSBhbHdheXMgZW5kcworICAgICAgICAjIGluIGEgbmV3bGluZS4KKyAgICAgICAgZG9jdHlwZSA9IERvY3R5cGUoImZvbyIpCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIiIpCisgICAgICAgIHNvdXAuaW5zZXJ0KDEsIGRvY3R5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5lbmNvZGUoKSwgYiI8IURPQ1RZUEUgZm9vPlxuIikKKworCitjbGFzcyBUZXN0U291cFNlbGVjdG9yKFRyZWVUZXN0KToKKworICAgIEhUTUwgPSAiIiIKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxLy9FTiIKKyJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9zdHJpY3QuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+VGhlIHRpdGxlPC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iYmxhaC5jc3MiIHR5cGU9InRleHQvY3NzIiBpZD0ibDEiPgorPC9oZWFkPgorPGJvZHk+CisKKzxkaXYgaWQ9Im1haW4iIGNsYXNzPSJmYW5jeSI+Cis8ZGl2IGlkPSJpbm5lciI+Cis8aDEgaWQ9ImhlYWRlcjEiPkFuIEgxPC9oMT4KKzxwPlNvbWUgdGV4dDwvcD4KKzxwIGNsYXNzPSJvbmVwIiBpZD0icDEiPlNvbWUgbW9yZSB0ZXh0PC9wPgorPGgyIGlkPSJoZWFkZXIyIj5BbiBIMjwvaDI+Cis8cCBjbGFzcz0iY2xhc3MxIGNsYXNzMiBjbGFzczMiIGlkPSJwbXVsdGkiPkFub3RoZXI8L3A+Cis8YSBocmVmPSJodHRwOi8vYm9iLmV4YW1wbGUub3JnLyIgcmVsPSJmcmllbmQgbWV0IiBpZD0iYm9iIj5Cb2I8L2E+Cis8aDIgaWQ9ImhlYWRlcjMiPkFub3RoZXIgSDI8L2gyPgorPGEgaWQ9Im1lIiBocmVmPSJodHRwOi8vc2ltb253aWxsaXNvbi5uZXQvIiByZWw9Im1lIj5tZTwvYT4KKzxzcGFuIGNsYXNzPSJzMSI+Cis8YSBocmVmPSIjIiBpZD0iczFhMSI+c3BhbjFhMTwvYT4KKzxhIGhyZWY9IiMiIGlkPSJzMWEyIj5zcGFuMWEyIDxzcGFuIGlkPSJzMWEyczEiPnRlc3Q8L3NwYW4+PC9hPgorPHNwYW4gY2xhc3M9InNwYW4yIj4KKzxhIGhyZWY9IiMiIGlkPSJzMmExIj5zcGFuMmExPC9hPgorPC9zcGFuPgorPHNwYW4gY2xhc3M9InNwYW4zIj48L3NwYW4+Cis8L3NwYW4+Cis8L2Rpdj4KKzxwIGxhbmc9ImVuIiBpZD0ibGFuZy1lbiI+RW5nbGlzaDwvcD4KKzxwIGxhbmc9ImVuLWdiIiBpZD0ibGFuZy1lbi1nYiI+RW5nbGlzaCBVSzwvcD4KKzxwIGxhbmc9ImVuLXVzIiBpZD0ibGFuZy1lbi11cyI+RW5nbGlzaCBVUzwvcD4KKzxwIGxhbmc9ImZyIiBpZD0ibGFuZy1mciI+RnJlbmNoPC9wPgorPC9kaXY+CisKKzxkaXYgaWQ9ImZvb3RlciI+Cis8L2Rpdj4KKyIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNvdXAgPSBCZWF1dGlmdWxTb3VwKHNlbGYuSFRNTCkKKworICAgIGRlZiBhc3NlcnRTZWxlY3RzKHNlbGYsIHNlbGVjdG9yLCBleHBlY3RlZF9pZHMpOgorICAgICAgICBlbF9pZHMgPSBbZWxbJ2lkJ10gZm9yIGVsIGluIHNlbGYuc291cC5zZWxlY3Qoc2VsZWN0b3IpXQorICAgICAgICBlbF9pZHMuc29ydCgpCisgICAgICAgIGV4cGVjdGVkX2lkcy5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9pZHMsIGVsX2lkcywKKyAgICAgICAgICAgICJTZWxlY3RvciAlcywgZXhwZWN0ZWQgWyVzXSwgZ290IFslc10iICUgKAorICAgICAgICAgICAgICAgIHNlbGVjdG9yLCAnLCAnLmpvaW4oZXhwZWN0ZWRfaWRzKSwgJywgJy5qb2luKGVsX2lkcykKKyAgICAgICAgICAgICkKKyAgICAgICAgKQorCisgICAgYXNzZXJ0U2VsZWN0ID0gYXNzZXJ0U2VsZWN0cworCisgICAgZGVmIGFzc2VydFNlbGVjdE11bHRpcGxlKHNlbGYsICp0ZXN0cyk6CisgICAgICAgIGZvciBzZWxlY3RvciwgZXhwZWN0ZWRfaWRzIGluIHRlc3RzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3Qoc2VsZWN0b3IsIGV4cGVjdGVkX2lkcykKKworICAgIGRlZiB0ZXN0X29uZV90YWdfb25lKHNlbGYpOgorICAgICAgICBlbHMgPSBzZWxmLnNvdXAuc2VsZWN0KCd0aXRsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVscyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxzWzBdLm5hbWUsICd0aXRsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxzWzBdLmNvbnRlbnRzLCBbdSdUaGUgdGl0bGUnXSkKKworICAgIGRlZiB0ZXN0X29uZV90YWdfbWFueShzZWxmKToKKyAgICAgICAgZWxzID0gc2VsZi5zb3VwLnNlbGVjdCgnZGl2JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZWxzKSwgMykKKyAgICAgICAgZm9yIGRpdiBpbiBlbHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdi5uYW1lLCAnZGl2JykKKworICAgIGRlZiB0ZXN0X3RhZ19pbl90YWdfb25lKHNlbGYpOgorICAgICAgICBlbHMgPSBzZWxmLnNvdXAuc2VsZWN0KCdkaXYgZGl2JykKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCdkaXYgZGl2JywgWydpbm5lciddKQorCisgICAgZGVmIHRlc3RfdGFnX2luX3RhZ19tYW55KHNlbGYpOgorICAgICAgICBmb3Igc2VsZWN0b3IgaW4gKCdodG1sIGRpdicsICdodG1sIGJvZHkgZGl2JywgJ2JvZHkgZGl2Jyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoc2VsZWN0b3IsIFsnbWFpbicsICdpbm5lcicsICdmb290ZXInXSkKKworICAgIGRlZiB0ZXN0X3RhZ19ub19tYXRjaChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5zb3VwLnNlbGVjdCgnZGVsJykpLCAwKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF90YWcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuc291cC5zZWxlY3QsICd0YWcldCcpCisKKyAgICBkZWYgdGVzdF9oZWFkZXJfdGFncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RNdWx0aXBsZSgKKyAgICAgICAgICAgICgnaDEnLCBbJ2hlYWRlcjEnXSksCisgICAgICAgICAgICAoJ2gyJywgWydoZWFkZXIyJywgJ2hlYWRlcjMnXSksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2NsYXNzX29uZShzZWxmKToKKyAgICAgICAgZm9yIHNlbGVjdG9yIGluICgnLm9uZXAnLCAncC5vbmVwJywgJ2h0bWwgcC5vbmVwJyk6CisgICAgICAgICAgICBlbHMgPSBzZWxmLnNvdXAuc2VsZWN0KHNlbGVjdG9yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZWxzKSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxzWzBdLm5hbWUsICdwJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxzWzBdWydjbGFzcyddLCBbJ29uZXAnXSkKKworICAgIGRlZiB0ZXN0X2NsYXNzX21pc21hdGNoZWRfdGFnKHNlbGYpOgorICAgICAgICBlbHMgPSBzZWxmLnNvdXAuc2VsZWN0KCdkaXYub25lcCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVscyksIDApCisKKyAgICBkZWYgdGVzdF9vbmVfaWQoc2VsZik6CisgICAgICAgIGZvciBzZWxlY3RvciBpbiAoJ2RpdiNpbm5lcicsICcjaW5uZXInLCAnZGl2IGRpdiNpbm5lcicpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHNlbGVjdG9yLCBbJ2lubmVyJ10pCisKKyAgICBkZWYgdGVzdF9iYWRfaWQoc2VsZik6CisgICAgICAgIGVscyA9IHNlbGYuc291cC5zZWxlY3QoJyNkb2Vzbm90ZXhpc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlbHMpLCAwKQorCisgICAgZGVmIHRlc3RfaXRlbXNfaW5faWQoc2VsZik6CisgICAgICAgIGVscyA9IHNlbGYuc291cC5zZWxlY3QoJ2RpdiNpbm5lciBwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZWxzKSwgMykKKyAgICAgICAgZm9yIGVsIGluIGVsczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWwubmFtZSwgJ3AnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVsc1sxXVsnY2xhc3MnXSwgWydvbmVwJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZWxzWzBdLmhhc19hdHRyKCdjbGFzcycpKQorCisgICAgZGVmIHRlc3RfYV9idW5jaF9vZl9lbXB0eXMoc2VsZik6CisgICAgICAgIGZvciBzZWxlY3RvciBpbiAoJ2RpdiNtYWluIGRlbCcsICdkaXYjbWFpbiBkaXYub29wcycsICdkaXYgZGl2I21haW4nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuc291cC5zZWxlY3Qoc2VsZWN0b3IpKSwgMCkKKworICAgIGRlZiB0ZXN0X211bHRpX2NsYXNzX3N1cHBvcnQoc2VsZik6CisgICAgICAgIGZvciBzZWxlY3RvciBpbiAoJy5jbGFzczEnLCAncC5jbGFzczEnLCAnLmNsYXNzMicsICdwLmNsYXNzMicsCisgICAgICAgICAgICAnLmNsYXNzMycsICdwLmNsYXNzMycsICdodG1sIHAuY2xhc3MyJywgJ2RpdiNpbm5lciAuY2xhc3MyJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoc2VsZWN0b3IsIFsncG11bHRpJ10pCisKKyAgICBkZWYgdGVzdF9tdWx0aV9jbGFzc19zZWxlY3Rpb24oc2VsZik6CisgICAgICAgIGZvciBzZWxlY3RvciBpbiAoJy5jbGFzczEuY2xhc3MzJywgJy5jbGFzczMuY2xhc3MyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnLmNsYXNzMS5jbGFzczIuY2xhc3MzJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoc2VsZWN0b3IsIFsncG11bHRpJ10pCisKKyAgICBkZWYgdGVzdF9jaGlsZF9zZWxlY3RvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCcuczEgPiBhJywgWydzMWExJywgJ3MxYTInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCcuczEgPiBhIHNwYW4nLCBbJ3MxYTJzMSddKQorCisgICAgZGVmIHRlc3RfY2hpbGRfc2VsZWN0b3JfaWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygnLnMxID4gYSNzMWEyIHNwYW4nLCBbJ3MxYTJzMSddKQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlX2VxdWFscyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RNdWx0aXBsZSgKKyAgICAgICAgICAgICgncFtjbGFzcz0ib25lcCJdJywgWydwMSddKSwKKyAgICAgICAgICAgICgncFtpZD0icDEiXScsIFsncDEnXSksCisgICAgICAgICAgICAoJ1tjbGFzcz0ib25lcCJdJywgWydwMSddKSwKKyAgICAgICAgICAgICgnW2lkPSJwMSJdJywgWydwMSddKSwKKyAgICAgICAgICAgICgnbGlua1tyZWw9InN0eWxlc2hlZXQiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ2xpbmtbdHlwZT0idGV4dC9jc3MiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ2xpbmtbaHJlZj0iYmxhaC5jc3MiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ2xpbmtbaHJlZj0ibm8tYmxhaC5jc3MiXScsIFtdKSwKKyAgICAgICAgICAgICgnW3JlbD0ic3R5bGVzaGVldCJdJywgWydsMSddKSwKKyAgICAgICAgICAgICgnW3R5cGU9InRleHQvY3NzIl0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdbaHJlZj0iYmxhaC5jc3MiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ1tocmVmPSJuby1ibGFoLmNzcyJdJywgW10pLAorICAgICAgICAgICAgKCdwW2hyZWY9Im5vLWJsYWguY3NzIl0nLCBbXSksCisgICAgICAgICAgICAoJ1tocmVmPSJuby1ibGFoLmNzcyJdJywgW10pLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfdGlsZGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0TXVsdGlwbGUoCisgICAgICAgICAgICAoJ3BbY2xhc3N+PSJjbGFzczEiXScsIFsncG11bHRpJ10pLAorICAgICAgICAgICAgKCdwW2NsYXNzfj0iY2xhc3MyIl0nLCBbJ3BtdWx0aSddKSwKKyAgICAgICAgICAgICgncFtjbGFzc349ImNsYXNzMyJdJywgWydwbXVsdGknXSksCisgICAgICAgICAgICAoJ1tjbGFzc349ImNsYXNzMSJdJywgWydwbXVsdGknXSksCisgICAgICAgICAgICAoJ1tjbGFzc349ImNsYXNzMiJdJywgWydwbXVsdGknXSksCisgICAgICAgICAgICAoJ1tjbGFzc349ImNsYXNzMyJdJywgWydwbXVsdGknXSksCisgICAgICAgICAgICAoJ2FbcmVsfj0iZnJpZW5kIl0nLCBbJ2JvYiddKSwKKyAgICAgICAgICAgICgnYVtyZWx+PSJtZXQiXScsIFsnYm9iJ10pLAorICAgICAgICAgICAgKCdbcmVsfj0iZnJpZW5kIl0nLCBbJ2JvYiddKSwKKyAgICAgICAgICAgICgnW3JlbH49Im1ldCJdJywgWydib2InXSksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9zdGFydHN3aXRoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdE11bHRpcGxlKAorICAgICAgICAgICAgKCdbcmVsXj0ic3R5bGUiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ2xpbmtbcmVsXj0ic3R5bGUiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ25vdGxpbmtbcmVsXj0ibm90c3R5bGUiXScsIFtdKSwKKyAgICAgICAgICAgICgnW3JlbF49Im5vdHN0eWxlIl0nLCBbXSksCisgICAgICAgICAgICAoJ2xpbmtbcmVsXj0ibm90c3R5bGUiXScsIFtdKSwKKyAgICAgICAgICAgICgnbGlua1tocmVmXj0iYmxhIl0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdhW2hyZWZePSJodHRwOi8vIl0nLCBbJ2JvYicsICdtZSddKSwKKyAgICAgICAgICAgICgnW2hyZWZePSJodHRwOi8vIl0nLCBbJ2JvYicsICdtZSddKSwKKyAgICAgICAgICAgICgnW2lkXj0icCJdJywgWydwbXVsdGknLCAncDEnXSksCisgICAgICAgICAgICAoJ1tpZF49Im0iXScsIFsnbWUnLCAnbWFpbiddKSwKKyAgICAgICAgICAgICgnZGl2W2lkXj0ibSJdJywgWydtYWluJ10pLAorICAgICAgICAgICAgKCdhW2lkXj0ibSJdJywgWydtZSddKSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlX2VuZHN3aXRoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdE11bHRpcGxlKAorICAgICAgICAgICAgKCdbaHJlZiQ9Ii5jc3MiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ2xpbmtbaHJlZiQ9Ii5jc3MiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ2xpbmtbaWQkPSIxIl0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdbaWQkPSIxIl0nLCBbJ2wxJywgJ3AxJywgJ2hlYWRlcjEnLCAnczFhMScsICdzMmExJywgJ3MxYTJzMSddKSwKKyAgICAgICAgICAgICgnZGl2W2lkJD0iMSJdJywgW10pLAorICAgICAgICAgICAgKCdbaWQkPSJub2VuZGluZyJdJywgW10pLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfY29udGFpbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0TXVsdGlwbGUoCisgICAgICAgICAgICAjIEZyb20gdGVzdF9hdHRyaWJ1dGVfc3RhcnRzd2l0aAorICAgICAgICAgICAgKCdbcmVsKj0ic3R5bGUiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ2xpbmtbcmVsKj0ic3R5bGUiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ25vdGxpbmtbcmVsKj0ibm90c3R5bGUiXScsIFtdKSwKKyAgICAgICAgICAgICgnW3JlbCo9Im5vdHN0eWxlIl0nLCBbXSksCisgICAgICAgICAgICAoJ2xpbmtbcmVsKj0ibm90c3R5bGUiXScsIFtdKSwKKyAgICAgICAgICAgICgnbGlua1tocmVmKj0iYmxhIl0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdhW2hyZWYqPSJodHRwOi8vIl0nLCBbJ2JvYicsICdtZSddKSwKKyAgICAgICAgICAgICgnW2hyZWYqPSJodHRwOi8vIl0nLCBbJ2JvYicsICdtZSddKSwKKyAgICAgICAgICAgICgnW2lkKj0icCJdJywgWydwbXVsdGknLCAncDEnXSksCisgICAgICAgICAgICAoJ2RpdltpZCo9Im0iXScsIFsnbWFpbiddKSwKKyAgICAgICAgICAgICgnYVtpZCo9Im0iXScsIFsnbWUnXSksCisgICAgICAgICAgICAjIEZyb20gdGVzdF9hdHRyaWJ1dGVfZW5kc3dpdGgKKyAgICAgICAgICAgICgnW2hyZWYqPSIuY3NzIl0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdsaW5rW2hyZWYqPSIuY3NzIl0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdsaW5rW2lkKj0iMSJdJywgWydsMSddKSwKKyAgICAgICAgICAgICgnW2lkKj0iMSJdJywgWydsMScsICdwMScsICdoZWFkZXIxJywgJ3MxYTEnLCAnczFhMicsICdzMmExJywgJ3MxYTJzMSddKSwKKyAgICAgICAgICAgICgnZGl2W2lkKj0iMSJdJywgW10pLAorICAgICAgICAgICAgKCdbaWQqPSJub2VuZGluZyJdJywgW10pLAorICAgICAgICAgICAgIyBOZXcgZm9yIHRoaXMgdGVzdAorICAgICAgICAgICAgKCdbaHJlZio9Ii4iXScsIFsnYm9iJywgJ21lJywgJ2wxJ10pLAorICAgICAgICAgICAgKCdhW2hyZWYqPSIuIl0nLCBbJ2JvYicsICdtZSddKSwKKyAgICAgICAgICAgICgnbGlua1tocmVmKj0iLiJdJywgWydsMSddKSwKKyAgICAgICAgICAgICgnZGl2W2lkKj0ibiJdJywgWydtYWluJywgJ2lubmVyJ10pLAorICAgICAgICAgICAgKCdkaXZbaWQqPSJubiJdJywgWydpbm5lciddKSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlX2V4YWN0X29yX2h5cGVuKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdE11bHRpcGxlKAorICAgICAgICAgICAgKCdwW2xhbmd8PSJlbiJdJywgWydsYW5nLWVuJywgJ2xhbmctZW4tZ2InLCAnbGFuZy1lbi11cyddKSwKKyAgICAgICAgICAgICgnW2xhbmd8PSJlbiJdJywgWydsYW5nLWVuJywgJ2xhbmctZW4tZ2InLCAnbGFuZy1lbi11cyddKSwKKyAgICAgICAgICAgICgncFtsYW5nfD0iZnIiXScsIFsnbGFuZy1mciddKSwKKyAgICAgICAgICAgICgncFtsYW5nfD0iZ2IiXScsIFtdKSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlX2V4aXN0cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RNdWx0aXBsZSgKKyAgICAgICAgICAgICgnW3JlbF0nLCBbJ2wxJywgJ2JvYicsICdtZSddKSwKKyAgICAgICAgICAgICgnbGlua1tyZWxdJywgWydsMSddKSwKKyAgICAgICAgICAgICgnYVtyZWxdJywgWydib2InLCAnbWUnXSksCisgICAgICAgICAgICAoJ1tsYW5nXScsIFsnbGFuZy1lbicsICdsYW5nLWVuLWdiJywgJ2xhbmctZW4tdXMnLCAnbGFuZy1mciddKSwKKyAgICAgICAgICAgICgncFtjbGFzc10nLCBbJ3AxJywgJ3BtdWx0aSddKSwKKyAgICAgICAgICAgICgnW2JsYWhdJywgW10pLAorICAgICAgICAgICAgKCdwW2JsYWhdJywgW10pLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9udGhfb2ZfdHlwZShzZWxmKToKKyAgICAgICAgIyBUcnkgdG8gc2VsZWN0IGZpcnN0IHBhcmFncmFwaAorICAgICAgICBlbHMgPSBzZWxmLnNvdXAuc2VsZWN0KCdkaXYjaW5uZXIgcDpudGgtb2YtdHlwZSgxKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVscyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxzWzBdLnN0cmluZywgdSdTb21lIHRleHQnKQorCisgICAgICAgICMgVHJ5IHRvIHNlbGVjdCB0aGlyZCBwYXJhZ3JhcGgKKyAgICAgICAgZWxzID0gc2VsZi5zb3VwLnNlbGVjdCgnZGl2I2lubmVyIHA6bnRoLW9mLXR5cGUoMyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlbHMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVsc1swXS5zdHJpbmcsIHUnQW5vdGhlcicpCisKKyAgICAgICAgIyBUcnkgdG8gc2VsZWN0IChub24tZXhpc3RlbnQhKSBmb3VydGggcGFyYWdyYXBoCisgICAgICAgIGVscyA9IHNlbGYuc291cC5zZWxlY3QoJ2RpdiNpbm5lciBwOm50aC1vZi10eXBlKDQpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZWxzKSwgMCkKKworICAgICAgICAjIFBhc3MgaW4gYW4gaW52YWxpZCB2YWx1ZS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLnNvdXAuc2VsZWN0LCAnZGl2IHA6bnRoLW9mLXR5cGUoMCknKQorCisgICAgZGVmIHRlc3RfbnRoX29mX3R5cGVfZGlyZWN0X2Rlc2NlbmRhbnQoc2VsZik6CisgICAgICAgIGVscyA9IHNlbGYuc291cC5zZWxlY3QoJ2RpdiNpbm5lciA+IHA6bnRoLW9mLXR5cGUoMSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlbHMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVsc1swXS5zdHJpbmcsIHUnU29tZSB0ZXh0JykKKworICAgIGRlZiB0ZXN0X2lkX2NoaWxkX3NlbGVjdG9yX250aF9vZl90eXBlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoJyNpbm5lciA+IHA6bnRoLW9mLXR5cGUoMiknLCBbJ3AxJ10pCisKKyAgICBkZWYgdGVzdF9zZWxlY3Rfb25fZWxlbWVudChzZWxmKToKKyAgICAgICAgIyBPdGhlciB0ZXN0cyBvcGVyYXRlIG9uIHRoZSB0cmVlOyB0aGlzIG9wZXJhdGVzIG9uIGFuIGVsZW1lbnQKKyAgICAgICAgIyB3aXRoaW4gdGhlIHRyZWUuCisgICAgICAgIGlubmVyID0gc2VsZi5zb3VwLmZpbmQoImRpdiIsIGlkPSJtYWluIikKKyAgICAgICAgc2VsZWN0ZWQgPSBpbm5lci5zZWxlY3QoImRpdiIpCisgICAgICAgICMgVGhlIDxkaXYgaWQ9ImlubmVyIj4gdGFnIHdhcyBzZWxlY3RlZC4gVGhlIDxkaXYgaWQ9ImZvb3RlciI+CisgICAgICAgICMgdGFnIHdhcyBub3QuCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0c0lEcyhzZWxlY3RlZCwgWydpbm5lciddKQorCisgICAgZGVmIHRlc3Rfb3ZlcnNwZWNpZmllZF9jaGlsZF9pZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCIuZmFuY3kgI2lubmVyIiwgWydpbm5lciddKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoIi5ub3JtYWwgI2lubmVyIiwgW10pCisKKyAgICBkZWYgdGVzdF9hZGphY2VudF9zaWJsaW5nX3NlbGVjdG9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoJyNwMSArIGgyJywgWydoZWFkZXIyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygnI3AxICsgaDIgKyBwJywgWydwbXVsdGknXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCcjcDEgKyAjaGVhZGVyMiArIC5jbGFzczEnLCBbJ3BtdWx0aSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBzZWxmLnNvdXAuc2VsZWN0KCcjcDEgKyBwJykpCisKKyAgICBkZWYgdGVzdF9nZW5lcmFsX3NpYmxpbmdfc2VsZWN0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygnI3AxIH4gaDInLCBbJ2hlYWRlcjInLCAnaGVhZGVyMyddKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoJyNwMSB+ICNoZWFkZXIyJywgWydoZWFkZXIyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygnI3AxIH4gaDIgKyBhJywgWydtZSddKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoJyNwMSB+IGgyICsgW3JlbD0ibWUiXScsIFsnbWUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgc2VsZi5zb3VwLnNlbGVjdCgnI2lubmVyIH4gaDInKSkKKworICAgIGRlZiB0ZXN0X2RhbmdsaW5nX2NvbWJpbmF0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuc291cC5zZWxlY3QsICdoMSA+JykKKworICAgIGRlZiB0ZXN0X3NpYmxpbmdfY29tYmluYXRvcl93b250X3NlbGVjdF9zYW1lX3RhZ190d2ljZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCdwW2xhbmddIH4gcCcsIFsnbGFuZy1lbi1nYicsICdsYW5nLWVuLXVzJywgJ2xhbmctZnInXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvY29kZWdlbi5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvY29kZWdlbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTc3MmQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9jb2RlZ2VuLnB5CkBAIC0wLDAgKzEsNTcwIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIiIiCisgICAgY29kZWdlbgorICAgIH5+fn5+fn4KKworICAgIEV4dGVuc2lvbiB0byBhc3QgdGhhdCBhbGxvdyBhc3QgLT4gcHl0aG9uIGNvZGUgZ2VuZXJhdGlvbi4KKworICAgIDpjb3B5cmlnaHQ6IENvcHlyaWdodCAyMDA4IGJ5IEFybWluIFJvbmFjaGVyLgorICAgIDpsaWNlbnNlOiBCU0QuCisiIiIKK2Zyb20gYXN0IGltcG9ydCAqCisKK0JPT0xPUF9TWU1CT0xTID0geworICAgIEFuZDogICAgICAgICdhbmQnLAorICAgIE9yOiAgICAgICAgICdvcicKK30KKworQklOT1BfU1lNQk9MUyA9IHsKKyAgICBBZGQ6ICAgICAgICAnKycsCisgICAgU3ViOiAgICAgICAgJy0nLAorICAgIE11bHQ6ICAgICAgICcqJywKKyAgICBEaXY6ICAgICAgICAnLycsCisgICAgRmxvb3JEaXY6ICAgJy8vJywKKyAgICBNb2Q6ICAgICAgICAnJScsCisgICAgTFNoaWZ0OiAgICAgJzw8JywKKyAgICBSU2hpZnQ6ICAgICAnPj4nLAorICAgIEJpdE9yOiAgICAgICd8JywKKyAgICBCaXRBbmQ6ICAgICAnJicsCisgICAgQml0WG9yOiAgICAgJ14nCit9CisKK0NNUE9QX1NZTUJPTFMgPSB7CisgICAgRXE6ICAgICAgICAgJz09JywKKyAgICBHdDogICAgICAgICAnPicsCisgICAgR3RFOiAgICAgICAgJz49JywKKyAgICBJbjogICAgICAgICAnaW4nLAorICAgIElzOiAgICAgICAgICdpcycsCisgICAgSXNOb3Q6ICAgICAgJ2lzIG5vdCcsCisgICAgTHQ6ICAgICAgICAgJzwnLAorICAgIEx0RTogICAgICAgICc8PScsCisgICAgTm90RXE6ICAgICAgJyE9JywKKyAgICBOb3RJbjogICAgICAnbm90IGluJworfQorCitVTkFSWU9QX1NZTUJPTFMgPSB7CisgICAgSW52ZXJ0OiAgICAgJ34nLAorICAgIE5vdDogICAgICAgICdub3QnLAorICAgIFVBZGQ6ICAgICAgICcrJywKKyAgICBVU3ViOiAgICAgICAnLScKK30KKworQUxMX1NZTUJPTFMgPSB7fQorQUxMX1NZTUJPTFMudXBkYXRlKEJPT0xPUF9TWU1CT0xTKQorQUxMX1NZTUJPTFMudXBkYXRlKEJJTk9QX1NZTUJPTFMpCitBTExfU1lNQk9MUy51cGRhdGUoQ01QT1BfU1lNQk9MUykKK0FMTF9TWU1CT0xTLnVwZGF0ZShVTkFSWU9QX1NZTUJPTFMpCisKK2RlZiB0b19zb3VyY2Uobm9kZSwgaW5kZW50X3dpdGg9JyAnICogNCwgYWRkX2xpbmVfaW5mb3JtYXRpb249RmFsc2UpOgorICAgICIiIlRoaXMgZnVuY3Rpb24gY2FuIGNvbnZlcnQgYSBub2RlIHRyZWUgYmFjayBpbnRvIHB5dGhvbiBzb3VyY2Vjb2RlLgorICAgIFRoaXMgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIGVzcGVjaWFsbHkgaWYgeW91J3JlIGRlYWxpbmcgd2l0aAorICAgIGN1c3RvbSBhc3RzIG5vdCBnZW5lcmF0ZWQgYnkgcHl0aG9uIGl0c2VsZi4KKworICAgIEl0IGNvdWxkIGJlIHRoYXQgdGhlIHNvdXJjZWNvZGUgaXMgZXZhbHVhYmxlIHdoZW4gdGhlIEFTVCBpdHNlbGYgaXMgbm90CisgICAgY29tcGlsYWJsZSAvIGV2YWx1YWJsZS4gIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCB0aGUgQVNUIGNvbnRhaW5zIHNvbWUKKyAgICBtb3JlIGRhdGEgdGhhbiByZWd1bGFyIHNvdXJjZWNvZGUgZG9lcywgd2hpY2ggaXMgZHJvcHBlZCBkdXJpbmcKKyAgICBjb252ZXJzaW9uLgorCisgICAgRWFjaCBsZXZlbCBvZiBpbmRlbnRhdGlvbiBpcyByZXBsYWNlZCB3aXRoIGBpbmRlbnRfd2l0aGAuICBQZXIgZGVmYXVsdCB0aGlzCisgICAgcGFyYW1ldGVyIGlzIGVxdWFsIHRvIGZvdXIgc3BhY2VzIGFzIHN1Z2dlc3RlZCBieSBQRVAgOCwgYnV0IGl0IG1pZ2h0IGJlCisgICAgYWRqdXN0ZWQgdG8gbWF0Y2ggdGhlIGFwcGxpY2F0aW9uJ3Mgc3R5bGVndWlkZS4KKworICAgIElmIGBhZGRfbGluZV9pbmZvcm1hdGlvbmAgaXMgc2V0IHRvIGBUcnVlYCBjb21tZW50cyBmb3IgdGhlIGxpbmUgbnVtYmVycworICAgIG9mIHRoZSBub2RlcyBhcmUgYWRkZWQgdG8gdGhlIG91dHB1dC4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gc3BvdCB3cm9uZyBsaW5lCisgICAgbnVtYmVyIGluZm9ybWF0aW9uIG9mIHN0YXRlbWVudCBub2Rlcy4KKyAgICAiIiIKKyAgICBnZW5lcmF0b3IgPSBTb3VyY2VHZW5lcmF0b3IoaW5kZW50X3dpdGgsIGFkZF9saW5lX2luZm9ybWF0aW9uKQorICAgIGdlbmVyYXRvci52aXNpdChub2RlKQorICAgIHJldHVybiAnJy5qb2luKGdlbmVyYXRvci5yZXN1bHQpCisKKworY2xhc3MgU291cmNlR2VuZXJhdG9yKE5vZGVWaXNpdG9yKToKKyAgICAiIiJUaGlzIHZpc2l0b3IgaXMgYWJsZSB0byB0cmFuc2Zvcm0gYSB3ZWxsIGZvcm1lZCBzeW50YXggdHJlZSBpbnRvIHB5dGhvbgorICAgIHNvdXJjZWNvZGUuICBGb3IgbW9yZSBkZXRhaWxzIGhhdmUgYSBsb29rIGF0IHRoZSBkb2NzdHJpbmcgb2YgdGhlCisgICAgYG5vZGVfdG9fc291cmNlYCBmdW5jdGlvbi4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbmRlbnRfd2l0aCwgYWRkX2xpbmVfaW5mb3JtYXRpb249RmFsc2UpOgorICAgICAgICBzZWxmLnJlc3VsdCA9IFtdCisgICAgICAgIHNlbGYuaW5kZW50X3dpdGggPSBpbmRlbnRfd2l0aAorICAgICAgICBzZWxmLmFkZF9saW5lX2luZm9ybWF0aW9uID0gYWRkX2xpbmVfaW5mb3JtYXRpb24KKyAgICAgICAgc2VsZi5pbmRlbnRhdGlvbiA9IDAKKyAgICAgICAgc2VsZi5uZXdfbGluZXMgPSAwCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgeCk6CisgICAgICAgIGlmIHNlbGYubmV3X2xpbmVzOgorICAgICAgICAgICAgaWYgc2VsZi5yZXN1bHQ6CisgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQuYXBwZW5kKCdcbicgKiBzZWxmLm5ld19saW5lcykKKyAgICAgICAgICAgIHNlbGYucmVzdWx0LmFwcGVuZChzZWxmLmluZGVudF93aXRoICogc2VsZi5pbmRlbnRhdGlvbikKKyAgICAgICAgICAgIHNlbGYubmV3X2xpbmVzID0gMAorICAgICAgICBzZWxmLnJlc3VsdC5hcHBlbmQoeCkKKworICAgIGRlZiBuZXdsaW5lKHNlbGYsIG5vZGU9Tm9uZSwgZXh0cmE9MCk6CisgICAgICAgIHNlbGYubmV3X2xpbmVzID0gbWF4KHNlbGYubmV3X2xpbmVzLCAxICsgZXh0cmEpCisgICAgICAgIGlmIG5vZGUgaXMgbm90IE5vbmUgYW5kIHNlbGYuYWRkX2xpbmVfaW5mb3JtYXRpb246CisgICAgICAgICAgICBzZWxmLndyaXRlKCcjIGxpbmU6ICVzJyAlIG5vZGUubGluZW5vKQorICAgICAgICAgICAgc2VsZi5uZXdfbGluZXMgPSAxCisKKyAgICBkZWYgYm9keShzZWxmLCBzdGF0ZW1lbnRzKToKKyAgICAgICAgc2VsZi5uZXdfbGluZSA9IFRydWUKKyAgICAgICAgc2VsZi5pbmRlbnRhdGlvbiArPSAxCisgICAgICAgIGZvciBzdG10IGluIHN0YXRlbWVudHM6CisgICAgICAgICAgICBzZWxmLnZpc2l0KHN0bXQpCisgICAgICAgIHNlbGYuaW5kZW50YXRpb24gLT0gMQorCisgICAgZGVmIGJvZHlfb3JfZWxzZShzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5ib2R5KG5vZGUuYm9keSkKKyAgICAgICAgaWYgbm9kZS5vcmVsc2U6CisgICAgICAgICAgICBzZWxmLm5ld2xpbmUoKQorICAgICAgICAgICAgc2VsZi53cml0ZSgnZWxzZTonKQorICAgICAgICAgICAgc2VsZi5ib2R5KG5vZGUub3JlbHNlKQorCisgICAgZGVmIHNpZ25hdHVyZShzZWxmLCBub2RlKToKKyAgICAgICAgd2FudF9jb21tYSA9IFtdCisgICAgICAgIGRlZiB3cml0ZV9jb21tYSgpOgorICAgICAgICAgICAgaWYgd2FudF9jb21tYToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcsICcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHdhbnRfY29tbWEuYXBwZW5kKFRydWUpCisKKyAgICAgICAgcGFkZGluZyA9IFtOb25lXSAqIChsZW4obm9kZS5hcmdzKSAtIGxlbihub2RlLmRlZmF1bHRzKSkKKyAgICAgICAgZm9yIGFyZywgZGVmYXVsdCBpbiB6aXAobm9kZS5hcmdzLCBwYWRkaW5nICsgbm9kZS5kZWZhdWx0cyk6CisgICAgICAgICAgICB3cml0ZV9jb21tYSgpCisgICAgICAgICAgICBzZWxmLnZpc2l0KGFyZykKKyAgICAgICAgICAgIGlmIGRlZmF1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnPScpCisgICAgICAgICAgICAgICAgc2VsZi52aXNpdChkZWZhdWx0KQorICAgICAgICBpZiBub2RlLnZhcmFyZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHdyaXRlX2NvbW1hKCkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoJyonICsgbm9kZS52YXJhcmcpCisgICAgICAgIGlmIG5vZGUua3dhcmcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB3cml0ZV9jb21tYSgpCisgICAgICAgICAgICBzZWxmLndyaXRlKCcqKicgKyBub2RlLmt3YXJnKQorCisgICAgZGVmIGRlY29yYXRvcnMoc2VsZiwgbm9kZSk6CisgICAgICAgIGZvciBkZWNvcmF0b3IgaW4gbm9kZS5kZWNvcmF0b3JfbGlzdDoKKyAgICAgICAgICAgIHNlbGYubmV3bGluZShkZWNvcmF0b3IpCisgICAgICAgICAgICBzZWxmLndyaXRlKCdAJykKKyAgICAgICAgICAgIHNlbGYudmlzaXQoZGVjb3JhdG9yKQorCisgICAgIyBTdGF0ZW1lbnRzCisKKyAgICBkZWYgdmlzaXRfQXNzaWduKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgZm9yIGlkeCwgdGFyZ2V0IGluIGVudW1lcmF0ZShub2RlLnRhcmdldHMpOgorICAgICAgICAgICAgaWYgaWR4OgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJywgJykKKyAgICAgICAgICAgIHNlbGYudmlzaXQodGFyZ2V0KQorICAgICAgICBzZWxmLndyaXRlKCcgPSAnKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUudmFsdWUpCisKKyAgICBkZWYgdmlzaXRfQXVnQXNzaWduKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi52aXNpdChub2RlLnRhcmdldCkKKyAgICAgICAgc2VsZi53cml0ZShCSU5PUF9TWU1CT0xTW3R5cGUobm9kZS5vcCldICsgJz0nKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUudmFsdWUpCisKKyAgICBkZWYgdmlzaXRfSW1wb3J0RnJvbShzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ2Zyb20gJXMlcyBpbXBvcnQgJyAlICgnLicgKiBub2RlLmxldmVsLCBub2RlLm1vZHVsZSkpCisgICAgICAgIGZvciBpZHgsIGl0ZW0gaW4gZW51bWVyYXRlKG5vZGUubmFtZXMpOgorICAgICAgICAgICAgaWYgaWR4OgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJywgJykKKyAgICAgICAgICAgIHNlbGYud3JpdGUoaXRlbSkKKworICAgIGRlZiB2aXNpdF9JbXBvcnQoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBmb3IgaXRlbSBpbiBub2RlLm5hbWVzOgorICAgICAgICAgICAgc2VsZi53cml0ZSgnaW1wb3J0ICcpCisgICAgICAgICAgICBzZWxmLnZpc2l0KGl0ZW0pCisKKyAgICBkZWYgdmlzaXRfRXhwcihzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYuZ2VuZXJpY192aXNpdChub2RlKQorCisgICAgZGVmIHZpc2l0X0Z1bmN0aW9uRGVmKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUoZXh0cmE9MSkKKyAgICAgICAgc2VsZi5kZWNvcmF0b3JzKG5vZGUpCisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCdkZWYgJXMoJyAlIG5vZGUubmFtZSkKKyAgICAgICAgc2VsZi5zaWduYXR1cmUobm9kZS5hcmdzKQorICAgICAgICBzZWxmLndyaXRlKCcpOicpCisgICAgICAgIHNlbGYuYm9keShub2RlLmJvZHkpCisKKyAgICBkZWYgdmlzaXRfQ2xhc3NEZWYoc2VsZiwgbm9kZSk6CisgICAgICAgIGhhdmVfYXJncyA9IFtdCisgICAgICAgIGRlZiBwYXJlbl9vcl9jb21tYSgpOgorICAgICAgICAgICAgaWYgaGF2ZV9hcmdzOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJywgJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaGF2ZV9hcmdzLmFwcGVuZChUcnVlKQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJygnKQorCisgICAgICAgIHNlbGYubmV3bGluZShleHRyYT0yKQorICAgICAgICBzZWxmLmRlY29yYXRvcnMobm9kZSkKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ2NsYXNzICVzJyAlIG5vZGUubmFtZSkKKyAgICAgICAgZm9yIGJhc2UgaW4gbm9kZS5iYXNlczoKKyAgICAgICAgICAgIHBhcmVuX29yX2NvbW1hKCkKKyAgICAgICAgICAgIHNlbGYudmlzaXQoYmFzZSkKKyAgICAgICAgIyBYWFg6IHRoZSBpZiBoZXJlIGlzIHVzZWQgdG8ga2VlcCB0aGlzIG1vZHVsZSBjb21wYXRpYmxlCisgICAgICAgICMgICAgICB3aXRoIHB5dGhvbiAyLjYuCisgICAgICAgIGlmIGhhc2F0dHIobm9kZSwgJ2tleXdvcmRzJyk6CisgICAgICAgICAgICBmb3Iga2V5d29yZCBpbiBub2RlLmtleXdvcmRzOgorICAgICAgICAgICAgICAgIHBhcmVuX29yX2NvbW1hKCkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKGtleXdvcmQuYXJnICsgJz0nKQorICAgICAgICAgICAgICAgIHNlbGYudmlzaXQoa2V5d29yZC52YWx1ZSkKKyAgICAgICAgICAgIGlmIG5vZGUuc3RhcmFyZ3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcGFyZW5fb3JfY29tbWEoKQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJyonKQorICAgICAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS5zdGFyYXJncykKKyAgICAgICAgICAgIGlmIG5vZGUua3dhcmdzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHBhcmVuX29yX2NvbW1hKCkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcqKicpCisgICAgICAgICAgICAgICAgc2VsZi52aXNpdChub2RlLmt3YXJncykKKyAgICAgICAgc2VsZi53cml0ZShoYXZlX2FyZ3MgYW5kICcpOicgb3IgJzonKQorICAgICAgICBzZWxmLmJvZHkobm9kZS5ib2R5KQorCisgICAgZGVmIHZpc2l0X0lmKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgnaWYgJykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLnRlc3QpCisgICAgICAgIHNlbGYud3JpdGUoJzonKQorICAgICAgICBzZWxmLmJvZHkobm9kZS5ib2R5KQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgZWxzZV8gPSBub2RlLm9yZWxzZQorICAgICAgICAgICAgaWYgbGVuKGVsc2VfKSA9PSAxIGFuZCBpc2luc3RhbmNlKGVsc2VfWzBdLCBJZik6CisgICAgICAgICAgICAgICAgbm9kZSA9IGVsc2VfWzBdCisgICAgICAgICAgICAgICAgc2VsZi5uZXdsaW5lKCkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCdlbGlmICcpCisgICAgICAgICAgICAgICAgc2VsZi52aXNpdChub2RlLnRlc3QpCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnOicpCisgICAgICAgICAgICAgICAgc2VsZi5ib2R5KG5vZGUuYm9keSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5uZXdsaW5lKCkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCdlbHNlOicpCisgICAgICAgICAgICAgICAgc2VsZi5ib2R5KGVsc2VfKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBkZWYgdmlzaXRfRm9yKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgnZm9yICcpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS50YXJnZXQpCisgICAgICAgIHNlbGYud3JpdGUoJyBpbiAnKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUuaXRlcikKKyAgICAgICAgc2VsZi53cml0ZSgnOicpCisgICAgICAgIHNlbGYuYm9keV9vcl9lbHNlKG5vZGUpCisKKyAgICBkZWYgdmlzaXRfV2hpbGUoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCd3aGlsZSAnKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUudGVzdCkKKyAgICAgICAgc2VsZi53cml0ZSgnOicpCisgICAgICAgIHNlbGYuYm9keV9vcl9lbHNlKG5vZGUpCisKKyAgICBkZWYgdmlzaXRfV2l0aChzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ3dpdGggJykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLmNvbnRleHRfZXhwcikKKyAgICAgICAgaWYgbm9kZS5vcHRpb25hbF92YXJzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi53cml0ZSgnIGFzICcpCisgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUub3B0aW9uYWxfdmFycykKKyAgICAgICAgc2VsZi53cml0ZSgnOicpCisgICAgICAgIHNlbGYuYm9keShub2RlLmJvZHkpCisKKyAgICBkZWYgdmlzaXRfUGFzcyhzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ3Bhc3MnKQorCisgICAgZGVmIHZpc2l0X1ByaW50KHNlbGYsIG5vZGUpOgorICAgICAgICAjIFhYWDogcHl0aG9uIDIuNiBvbmx5CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCdwcmludCAnKQorICAgICAgICB3YW50X2NvbW1hID0gRmFsc2UKKyAgICAgICAgaWYgbm9kZS5kZXN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi53cml0ZSgnID4+ICcpCisgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUuZGVzdCkKKyAgICAgICAgICAgIHdhbnRfY29tbWEgPSBUcnVlCisgICAgICAgIGZvciB2YWx1ZSBpbiBub2RlLnZhbHVlczoKKyAgICAgICAgICAgIGlmIHdhbnRfY29tbWE6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnLCAnKQorICAgICAgICAgICAgc2VsZi52aXNpdCh2YWx1ZSkKKyAgICAgICAgICAgIHdhbnRfY29tbWEgPSBUcnVlCisgICAgICAgIGlmIG5vdCBub2RlLm5sOgorICAgICAgICAgICAgc2VsZi53cml0ZSgnLCcpCisKKyAgICBkZWYgdmlzaXRfRGVsZXRlKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgnZGVsICcpCisgICAgICAgIGZvciBpZHgsIHRhcmdldCBpbiBlbnVtZXJhdGUobm9kZSk6CisgICAgICAgICAgICBpZiBpZHg6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnLCAnKQorICAgICAgICAgICAgc2VsZi52aXNpdCh0YXJnZXQpCisKKyAgICBkZWYgdmlzaXRfVHJ5RXhjZXB0KHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgndHJ5OicpCisgICAgICAgIHNlbGYuYm9keShub2RlLmJvZHkpCisgICAgICAgIGZvciBoYW5kbGVyIGluIG5vZGUuaGFuZGxlcnM6CisgICAgICAgICAgICBzZWxmLnZpc2l0KGhhbmRsZXIpCisKKyAgICBkZWYgdmlzaXRfVHJ5RmluYWxseShzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ3RyeTonKQorICAgICAgICBzZWxmLmJvZHkobm9kZS5ib2R5KQorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgnZmluYWxseTonKQorICAgICAgICBzZWxmLmJvZHkobm9kZS5maW5hbGJvZHkpCisKKyAgICBkZWYgdmlzaXRfR2xvYmFsKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgnZ2xvYmFsICcgKyAnLCAnLmpvaW4obm9kZS5uYW1lcykpCisKKyAgICBkZWYgdmlzaXRfTm9ubG9jYWwoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCdub25sb2NhbCAnICsgJywgJy5qb2luKG5vZGUubmFtZXMpKQorCisgICAgZGVmIHZpc2l0X1JldHVybihzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ3JldHVybiAnKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUudmFsdWUpCisKKyAgICBkZWYgdmlzaXRfQnJlYWsoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCdicmVhaycpCisKKyAgICBkZWYgdmlzaXRfQ29udGludWUoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCdjb250aW51ZScpCisKKyAgICBkZWYgdmlzaXRfUmFpc2Uoc2VsZiwgbm9kZSk6CisgICAgICAgICMgWFhYOiBQeXRob24gMi42IC8gMy4wIGNvbXBhdGliaWxpdHkKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ3JhaXNlJykKKyAgICAgICAgaWYgaGFzYXR0cihub2RlLCAnZXhjJykgYW5kIG5vZGUuZXhjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi53cml0ZSgnICcpCisgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUuZXhjKQorICAgICAgICAgICAgaWYgbm9kZS5jYXVzZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcgZnJvbSAnKQorICAgICAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS5jYXVzZSkKKyAgICAgICAgZWxpZiBoYXNhdHRyKG5vZGUsICd0eXBlJykgYW5kIG5vZGUudHlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS50eXBlKQorICAgICAgICAgICAgaWYgbm9kZS5pbnN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJywgJykKKyAgICAgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUuaW5zdCkKKyAgICAgICAgICAgIGlmIG5vZGUudGJhY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnLCAnKQorICAgICAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS50YmFjaykKKworICAgICMgRXhwcmVzc2lvbnMKKworICAgIGRlZiB2aXNpdF9BdHRyaWJ1dGUoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYudmlzaXQobm9kZS52YWx1ZSkKKyAgICAgICAgc2VsZi53cml0ZSgnLicgKyBub2RlLmF0dHIpCisKKyAgICBkZWYgdmlzaXRfQ2FsbChzZWxmLCBub2RlKToKKyAgICAgICAgd2FudF9jb21tYSA9IFtdCisgICAgICAgIGRlZiB3cml0ZV9jb21tYSgpOgorICAgICAgICAgICAgaWYgd2FudF9jb21tYToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcsICcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHdhbnRfY29tbWEuYXBwZW5kKFRydWUpCisKKyAgICAgICAgc2VsZi52aXNpdChub2RlLmZ1bmMpCisgICAgICAgIHNlbGYud3JpdGUoJygnKQorICAgICAgICBmb3IgYXJnIGluIG5vZGUuYXJnczoKKyAgICAgICAgICAgIHdyaXRlX2NvbW1hKCkKKyAgICAgICAgICAgIHNlbGYudmlzaXQoYXJnKQorICAgICAgICBmb3Iga2V5d29yZCBpbiBub2RlLmtleXdvcmRzOgorICAgICAgICAgICAgd3JpdGVfY29tbWEoKQorICAgICAgICAgICAgc2VsZi53cml0ZShrZXl3b3JkLmFyZyArICc9JykKKyAgICAgICAgICAgIHNlbGYudmlzaXQoa2V5d29yZC52YWx1ZSkKKyAgICAgICAgaWYgbm9kZS5zdGFyYXJncyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHdyaXRlX2NvbW1hKCkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoJyonKQorICAgICAgICAgICAgc2VsZi52aXNpdChub2RlLnN0YXJhcmdzKQorICAgICAgICBpZiBub2RlLmt3YXJncyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHdyaXRlX2NvbW1hKCkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoJyoqJykKKyAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS5rd2FyZ3MpCisgICAgICAgIHNlbGYud3JpdGUoJyknKQorCisgICAgZGVmIHZpc2l0X05hbWUoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYud3JpdGUobm9kZS5pZCkKKworICAgIGRlZiB2aXNpdF9TdHIoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYud3JpdGUocmVwcihub2RlLnMpKQorCisgICAgZGVmIHZpc2l0X0J5dGVzKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLndyaXRlKHJlcHIobm9kZS5zKSkKKworICAgIGRlZiB2aXNpdF9OdW0oc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYud3JpdGUocmVwcihub2RlLm4pKQorCisgICAgZGVmIHZpc2l0X1R1cGxlKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLndyaXRlKCcoJykKKyAgICAgICAgaWR4ID0gLTEKKyAgICAgICAgZm9yIGlkeCwgaXRlbSBpbiBlbnVtZXJhdGUobm9kZS5lbHRzKToKKyAgICAgICAgICAgIGlmIGlkeDoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcsICcpCisgICAgICAgICAgICBzZWxmLnZpc2l0KGl0ZW0pCisgICAgICAgIHNlbGYud3JpdGUoaWR4IGFuZCAnKScgb3IgJywpJykKKworICAgIGRlZiBzZXF1ZW5jZV92aXNpdChsZWZ0LCByaWdodCk6CisgICAgICAgIGRlZiB2aXNpdChzZWxmLCBub2RlKToKKyAgICAgICAgICAgIHNlbGYud3JpdGUobGVmdCkKKyAgICAgICAgICAgIGZvciBpZHgsIGl0ZW0gaW4gZW51bWVyYXRlKG5vZGUuZWx0cyk6CisgICAgICAgICAgICAgICAgaWYgaWR4OgorICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcsICcpCisgICAgICAgICAgICAgICAgc2VsZi52aXNpdChpdGVtKQorICAgICAgICAgICAgc2VsZi53cml0ZShyaWdodCkKKyAgICAgICAgcmV0dXJuIHZpc2l0CisKKyAgICB2aXNpdF9MaXN0ID0gc2VxdWVuY2VfdmlzaXQoJ1snLCAnXScpCisgICAgdmlzaXRfU2V0ID0gc2VxdWVuY2VfdmlzaXQoJ3snLCAnfScpCisgICAgZGVsIHNlcXVlbmNlX3Zpc2l0CisKKyAgICBkZWYgdmlzaXRfRGljdChzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi53cml0ZSgneycpCisgICAgICAgIGZvciBpZHgsIChrZXksIHZhbHVlKSBpbiBlbnVtZXJhdGUoemlwKG5vZGUua2V5cywgbm9kZS52YWx1ZXMpKToKKyAgICAgICAgICAgIGlmIGlkeDoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcsICcpCisgICAgICAgICAgICBzZWxmLnZpc2l0KGtleSkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoJzogJykKKyAgICAgICAgICAgIHNlbGYudmlzaXQodmFsdWUpCisgICAgICAgIHNlbGYud3JpdGUoJ30nKQorCisgICAgZGVmIHZpc2l0X0Jpbk9wKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLnZpc2l0KG5vZGUubGVmdCkKKyAgICAgICAgc2VsZi53cml0ZSgnICVzICcgJSBCSU5PUF9TWU1CT0xTW3R5cGUobm9kZS5vcCldKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUucmlnaHQpCisKKyAgICBkZWYgdmlzaXRfQm9vbE9wKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLndyaXRlKCcoJykKKyAgICAgICAgZm9yIGlkeCwgdmFsdWUgaW4gZW51bWVyYXRlKG5vZGUudmFsdWVzKToKKyAgICAgICAgICAgIGlmIGlkeDoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcgJXMgJyAlIEJPT0xPUF9TWU1CT0xTW3R5cGUobm9kZS5vcCldKQorICAgICAgICAgICAgc2VsZi52aXNpdCh2YWx1ZSkKKyAgICAgICAgc2VsZi53cml0ZSgnKScpCisKKyAgICBkZWYgdmlzaXRfQ29tcGFyZShzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi53cml0ZSgnKCcpCisgICAgICAgIHNlbGYud3JpdGUobm9kZS5sZWZ0KQorICAgICAgICBmb3Igb3AsIHJpZ2h0IGluIHppcChub2RlLm9wcywgbm9kZS5jb21wYXJhdG9ycyk6CisgICAgICAgICAgICBzZWxmLndyaXRlKCcgJXMgJSUnICUgQ01QT1BfU1lNQk9MU1t0eXBlKG9wKV0pCisgICAgICAgICAgICBzZWxmLnZpc2l0KHJpZ2h0KQorICAgICAgICBzZWxmLndyaXRlKCcpJykKKworICAgIGRlZiB2aXNpdF9VbmFyeU9wKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLndyaXRlKCcoJykKKyAgICAgICAgb3AgPSBVTkFSWU9QX1NZTUJPTFNbdHlwZShub2RlLm9wKV0KKyAgICAgICAgc2VsZi53cml0ZShvcCkKKyAgICAgICAgaWYgb3AgPT0gJ25vdCc6CisgICAgICAgICAgICBzZWxmLndyaXRlKCcgJykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLm9wZXJhbmQpCisgICAgICAgIHNlbGYud3JpdGUoJyknKQorCisgICAgZGVmIHZpc2l0X1N1YnNjcmlwdChzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi52aXNpdChub2RlLnZhbHVlKQorICAgICAgICBzZWxmLndyaXRlKCdbJykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLnNsaWNlKQorICAgICAgICBzZWxmLndyaXRlKCddJykKKworICAgIGRlZiB2aXNpdF9TbGljZShzZWxmLCBub2RlKToKKyAgICAgICAgaWYgbm9kZS5sb3dlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS5sb3dlcikKKyAgICAgICAgc2VsZi53cml0ZSgnOicpCisgICAgICAgIGlmIG5vZGUudXBwZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUudXBwZXIpCisgICAgICAgIGlmIG5vZGUuc3RlcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYud3JpdGUoJzonKQorICAgICAgICAgICAgaWYgbm90IChpc2luc3RhbmNlKG5vZGUuc3RlcCwgTmFtZSkgYW5kIG5vZGUuc3RlcC5pZCA9PSAnTm9uZScpOgorICAgICAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS5zdGVwKQorCisgICAgZGVmIHZpc2l0X0V4dFNsaWNlKHNlbGYsIG5vZGUpOgorICAgICAgICBmb3IgaWR4LCBpdGVtIGluIG5vZGUuZGltczoKKyAgICAgICAgICAgIGlmIGlkeDoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcsICcpCisgICAgICAgICAgICBzZWxmLnZpc2l0KGl0ZW0pCisKKyAgICBkZWYgdmlzaXRfWWllbGQoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYud3JpdGUoJ3lpZWxkICcpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS52YWx1ZSkKKworICAgIGRlZiB2aXNpdF9MYW1iZGEoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYud3JpdGUoJ2xhbWJkYSAnKQorICAgICAgICBzZWxmLnNpZ25hdHVyZShub2RlLmFyZ3MpCisgICAgICAgIHNlbGYud3JpdGUoJzogJykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLmJvZHkpCisKKyAgICBkZWYgdmlzaXRfRWxsaXBzaXMoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYud3JpdGUoJ0VsbGlwc2lzJykKKworICAgIGRlZiBnZW5lcmF0b3JfdmlzaXQobGVmdCwgcmlnaHQpOgorICAgICAgICBkZWYgdmlzaXQoc2VsZiwgbm9kZSk6CisgICAgICAgICAgICBzZWxmLndyaXRlKGxlZnQpCisgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUuZWx0KQorICAgICAgICAgICAgZm9yIGNvbXByZWhlbnNpb24gaW4gbm9kZS5nZW5lcmF0b3JzOgorICAgICAgICAgICAgICAgIHNlbGYudmlzaXQoY29tcHJlaGVuc2lvbikKKyAgICAgICAgICAgIHNlbGYud3JpdGUocmlnaHQpCisgICAgICAgIHJldHVybiB2aXNpdAorCisgICAgdmlzaXRfTGlzdENvbXAgPSBnZW5lcmF0b3JfdmlzaXQoJ1snLCAnXScpCisgICAgdmlzaXRfR2VuZXJhdG9yRXhwID0gZ2VuZXJhdG9yX3Zpc2l0KCcoJywgJyknKQorICAgIHZpc2l0X1NldENvbXAgPSBnZW5lcmF0b3JfdmlzaXQoJ3snLCAnfScpCisgICAgZGVsIGdlbmVyYXRvcl92aXNpdAorCisgICAgZGVmIHZpc2l0X0RpY3RDb21wKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLndyaXRlKCd7JykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLmtleSkKKyAgICAgICAgc2VsZi53cml0ZSgnOiAnKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUudmFsdWUpCisgICAgICAgIGZvciBjb21wcmVoZW5zaW9uIGluIG5vZGUuZ2VuZXJhdG9yczoKKyAgICAgICAgICAgIHNlbGYudmlzaXQoY29tcHJlaGVuc2lvbikKKyAgICAgICAgc2VsZi53cml0ZSgnfScpCisKKyAgICBkZWYgdmlzaXRfSWZFeHAoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYudmlzaXQobm9kZS5ib2R5KQorICAgICAgICBzZWxmLndyaXRlKCcgaWYgJykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLnRlc3QpCisgICAgICAgIHNlbGYud3JpdGUoJyBlbHNlICcpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS5vcmVsc2UpCisKKyAgICBkZWYgdmlzaXRfU3RhcnJlZChzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi53cml0ZSgnKicpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS52YWx1ZSkKKworICAgIGRlZiB2aXNpdF9SZXByKHNlbGYsIG5vZGUpOgorICAgICAgICAjIFhYWDogcHl0aG9uIDIuNiBvbmx5CisgICAgICAgIHNlbGYud3JpdGUoJ2AnKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUudmFsdWUpCisgICAgICAgIHNlbGYud3JpdGUoJ2AnKQorCisgICAgIyBIZWxwZXIgTm9kZXMKKworICAgIGRlZiB2aXNpdF9hbGlhcyhzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi53cml0ZShub2RlLm5hbWUpCisgICAgICAgIGlmIG5vZGUuYXNuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi53cml0ZSgnIGFzICcgKyBub2RlLmFzbmFtZSkKKworICAgIGRlZiB2aXNpdF9jb21wcmVoZW5zaW9uKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLndyaXRlKCcgZm9yICcpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS50YXJnZXQpCisgICAgICAgIHNlbGYud3JpdGUoJyBpbiAnKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUuaXRlcikKKyAgICAgICAgaWYgbm9kZS5pZnM6CisgICAgICAgICAgICBmb3IgaWZfIGluIG5vZGUuaWZzOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJyBpZiAnKQorICAgICAgICAgICAgICAgIHNlbGYudmlzaXQoaWZfKQorCisgICAgZGVmIHZpc2l0X2V4Y2VwdGhhbmRsZXIoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCdleGNlcHQnKQorICAgICAgICBpZiBub2RlLnR5cGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLndyaXRlKCcgJykKKyAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS50eXBlKQorICAgICAgICAgICAgaWYgbm9kZS5uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJyBhcyAnKQorICAgICAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS5uYW1lKQorICAgICAgICBzZWxmLndyaXRlKCc6JykKKyAgICAgICAgc2VsZi5ib2R5KG5vZGUuYm9keSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcGx5L19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wbHkvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUzYTk4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcGx5L19faW5pdF9fLnB5CkBAIC0wLDAgKzEsNCBAQAorIyBQTFkgcGFja2FnZQorIyBBdXRob3I6IERhdmlkIEJlYXpsZXkgKGRhdmVAZGFiZWF6LmNvbSkKKworX19hbGxfXyA9IFsnbGV4JywneWFjYyddCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3BseS9sZXgucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3BseS9sZXgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY3ZWMxMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcGx5L2xleC5weQpAQCAtMCwwICsxLDEwNTggQEAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgcGx5OiBsZXgucHkKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDksCisjIERhdmlkIE0uIEJlYXpsZXkgKERhYmVheiBMTEMpCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMgCisjICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorIyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuICAKKyMgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorIyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyMgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gIAorIyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIERhdmlkIEJlYXpsZXkgb3IgRGFiZWF6IExMQyBtYXkgYmUgdXNlZCB0bworIyAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisjICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK19fdmVyc2lvbl9fICAgID0gIjMuMyIKK19fdGFidmVyc2lvbl9fID0gIjMuMiIgICAgICAgIyBWZXJzaW9uIG9mIHRhYmxlIGZpbGUgdXNlZAorCitpbXBvcnQgcmUsIHN5cywgdHlwZXMsIGNvcHksIG9zCisKKyMgVGhpcyB0dXBsZSBjb250YWlucyBrbm93biBzdHJpbmcgdHlwZXMKK3RyeToKKyAgICAjIFB5dGhvbiAyLjYKKyAgICBTdHJpbmdUeXBlcyA9ICh0eXBlcy5TdHJpbmdUeXBlLCB0eXBlcy5Vbmljb2RlVHlwZSkKK2V4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAjIFB5dGhvbiAzLjAKKyAgICBTdHJpbmdUeXBlcyA9IChzdHIsIGJ5dGVzKQorCisjIEV4dHJhY3QgdGhlIGNvZGUgYXR0cmlidXRlIG9mIGEgZnVuY3Rpb24uIERpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMKKyMgYXJlIGZvciBQeXRob24gMi8zIGNvbXBhdGliaWxpdHkuCisKK2lmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzOgorICAgIGRlZiBmdW5jX2NvZGUoZik6CisgICAgICAgIHJldHVybiBmLmZ1bmNfY29kZQorZWxzZToKKyAgICBkZWYgZnVuY19jb2RlKGYpOgorICAgICAgICByZXR1cm4gZi5fX2NvZGVfXworCisjIFRoaXMgcmVndWxhciBleHByZXNzaW9uIGlzIHVzZWQgdG8gbWF0Y2ggdmFsaWQgdG9rZW4gbmFtZXMKK19pc19pZGVudGlmaWVyID0gcmUuY29tcGlsZShyJ15bYS16QS1aMC05X10rJCcpCisKKyMgRXhjZXB0aW9uIHRocm93biB3aGVuIGludmFsaWQgdG9rZW4gZW5jb3VudGVyZWQgYW5kIG5vIGRlZmF1bHQgZXJyb3IKKyMgaGFuZGxlciBpcyBkZWZpbmVkLgorCitjbGFzcyBMZXhFcnJvcihFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLG1lc3NhZ2Uscyk6CisgICAgICAgICBzZWxmLmFyZ3MgPSAobWVzc2FnZSwpCisgICAgICAgICBzZWxmLnRleHQgPSBzCisKKyMgVG9rZW4gY2xhc3MuICBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSB0b2tlbnMgcHJvZHVjZWQuCitjbGFzcyBMZXhUb2tlbihvYmplY3QpOgorICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIkxleFRva2VuKCVzLCVyLCVkLCVkKSIgJSAoc2VsZi50eXBlLHNlbGYudmFsdWUsc2VsZi5saW5lbm8sc2VsZi5sZXhwb3MpCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc3RyKHNlbGYpCisKKyMgVGhpcyBvYmplY3QgaXMgYSBzdGFuZC1pbiBmb3IgYSBsb2dnaW5nIG9iamVjdCBjcmVhdGVkIGJ5IHRoZSAKKyMgbG9nZ2luZyBtb2R1bGUuICAKKworY2xhc3MgUGx5TG9nZ2VyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsZik6CisgICAgICAgIHNlbGYuZiA9IGYKKyAgICBkZWYgY3JpdGljYWwoc2VsZixtc2csKmFyZ3MsKiprd2FyZ3MpOgorICAgICAgICBzZWxmLmYud3JpdGUoKG1zZyAlIGFyZ3MpICsgIlxuIikKKworICAgIGRlZiB3YXJuaW5nKHNlbGYsbXNnLCphcmdzLCoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5mLndyaXRlKCJXQVJOSU5HOiAiKyAobXNnICUgYXJncykgKyAiXG4iKQorCisgICAgZGVmIGVycm9yKHNlbGYsbXNnLCphcmdzLCoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5mLndyaXRlKCJFUlJPUjogIiArIChtc2cgJSBhcmdzKSArICJcbiIpCisKKyAgICBpbmZvID0gY3JpdGljYWwKKyAgICBkZWJ1ZyA9IGNyaXRpY2FsCisKKyMgTnVsbCBsb2dnZXIgaXMgdXNlZCB3aGVuIG5vIG91dHB1dCBpcyBnZW5lcmF0ZWQuIERvZXMgbm90aGluZy4KK2NsYXNzIE51bGxMb2dnZXIob2JqZWN0KToKKyAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXyhzZWxmLG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZgorICAgIGRlZiBfX2NhbGxfXyhzZWxmLCphcmdzLCoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgICAgICAgICAgICAgICAgICAgID09PSBMZXhpbmcgRW5naW5lID09PQorIworIyBUaGUgZm9sbG93aW5nIExleGVyIGNsYXNzIGltcGxlbWVudHMgdGhlIGxleGVyIHJ1bnRpbWUuICAgVGhlcmUgYXJlIG9ubHkKKyMgYSBmZXcgcHVibGljIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXM6CisjCisjICAgIGlucHV0KCkgICAgICAgICAgLSAgU3RvcmUgYSBuZXcgc3RyaW5nIGluIHRoZSBsZXhlcgorIyAgICB0b2tlbigpICAgICAgICAgIC0gIEdldCB0aGUgbmV4dCB0b2tlbgorIyAgICBjbG9uZSgpICAgICAgICAgIC0gIENsb25lIHRoZSBsZXhlcgorIworIyAgICBsaW5lbm8gICAgICAgICAgIC0gIEN1cnJlbnQgbGluZSBudW1iZXIKKyMgICAgbGV4cG9zICAgICAgICAgICAtICBDdXJyZW50IHBvc2l0aW9uIGluIHRoZSBpbnB1dCBzdHJpbmcKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgTGV4ZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmxleHJlID0gTm9uZSAgICAgICAgICAgICAjIE1hc3RlciByZWd1bGFyIGV4cHJlc3Npb24uIFRoaXMgaXMgYSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdHVwbGVzIChyZSxmaW5kZXgpIHdoZXJlIHJlIGlzIGEgY29tcGlsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGZpbmRleCBpcyBhIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtYXBwaW5nIHJlZ2V4IGdyb3VwIG51bWJlcnMgdG8gcnVsZXMKKyAgICAgICAgc2VsZi5sZXhyZXRleHQgPSBOb25lICAgICAgICAgIyBDdXJyZW50IHJlZ3VsYXIgZXhwcmVzc2lvbiBzdHJpbmdzCisgICAgICAgIHNlbGYubGV4c3RhdGVyZSA9IHt9ICAgICAgICAgICMgRGljdGlvbmFyeSBtYXBwaW5nIGxleGVyIHN0YXRlcyB0byBtYXN0ZXIgcmVnZXhzCisgICAgICAgIHNlbGYubGV4c3RhdGVyZXRleHQgPSB7fSAgICAgICMgRGljdGlvbmFyeSBtYXBwaW5nIGxleGVyIHN0YXRlcyB0byByZWdleCBzdHJpbmdzCisgICAgICAgIHNlbGYubGV4c3RhdGVyZW5hbWVzID0ge30gICAgICMgRGljdGlvbmFyeSBtYXBwaW5nIGxleGVyIHN0YXRlcyB0byBzeW1ib2wgbmFtZXMKKyAgICAgICAgc2VsZi5sZXhzdGF0ZSA9ICJJTklUSUFMIiAgICAgIyBDdXJyZW50IGxleGVyIHN0YXRlCisgICAgICAgIHNlbGYubGV4c3RhdGVzdGFjayA9IFtdICAgICAgICMgU3RhY2sgb2YgbGV4ZXIgc3RhdGVzCisgICAgICAgIHNlbGYubGV4c3RhdGVpbmZvID0gTm9uZSAgICAgICMgU3RhdGUgaW5mb3JtYXRpb24KKyAgICAgICAgc2VsZi5sZXhzdGF0ZWlnbm9yZSA9IHt9ICAgICAgIyBEaWN0aW9uYXJ5IG9mIGlnbm9yZWQgY2hhcmFjdGVycyBmb3IgZWFjaCBzdGF0ZQorICAgICAgICBzZWxmLmxleHN0YXRlZXJyb3JmID0ge30gICAgICAjIERpY3Rpb25hcnkgb2YgZXJyb3IgZnVuY3Rpb25zIGZvciBlYWNoIHN0YXRlCisgICAgICAgIHNlbGYubGV4cmVmbGFncyA9IDAgICAgICAgICAgICMgT3B0aW9uYWwgcmUgY29tcGlsZSBmbGFncworICAgICAgICBzZWxmLmxleGRhdGEgPSBOb25lICAgICAgICAgICAjIEFjdHVhbCBpbnB1dCBkYXRhIChhcyBhIHN0cmluZykKKyAgICAgICAgc2VsZi5sZXhwb3MgPSAwICAgICAgICAgICAgICAgIyBDdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IHRleHQKKyAgICAgICAgc2VsZi5sZXhsZW4gPSAwICAgICAgICAgICAgICAgIyBMZW5ndGggb2YgdGhlIGlucHV0IHRleHQKKyAgICAgICAgc2VsZi5sZXhlcnJvcmYgPSBOb25lICAgICAgICAgIyBFcnJvciBydWxlIChpZiBhbnkpCisgICAgICAgIHNlbGYubGV4dG9rZW5zID0gTm9uZSAgICAgICAgICMgTGlzdCBvZiB2YWxpZCB0b2tlbnMKKyAgICAgICAgc2VsZi5sZXhpZ25vcmUgPSAiIiAgICAgICAgICAgIyBJZ25vcmVkIGNoYXJhY3RlcnMKKyAgICAgICAgc2VsZi5sZXhsaXRlcmFscyA9ICIiICAgICAgICAgIyBMaXRlcmFsIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmUgcGFzc2VkIHRocm91Z2gKKyAgICAgICAgc2VsZi5sZXhtb2R1bGUgPSBOb25lICAgICAgICAgIyBNb2R1bGUKKyAgICAgICAgc2VsZi5saW5lbm8gPSAxICAgICAgICAgICAgICAgIyBDdXJyZW50IGxpbmUgbnVtYmVyCisgICAgICAgIHNlbGYubGV4b3B0aW1pemUgPSAwICAgICAgICAgICMgT3B0aW1pemVkIG1vZGUKKworICAgIGRlZiBjbG9uZShzZWxmLG9iamVjdD1Ob25lKToKKyAgICAgICAgYyA9IGNvcHkuY29weShzZWxmKQorCisgICAgICAgICMgSWYgdGhlIG9iamVjdCBwYXJhbWV0ZXIgaGFzIGJlZW4gc3VwcGxpZWQsIGl0IG1lYW5zIHdlIGFyZSBhdHRhY2hpbmcgdGhlCisgICAgICAgICMgbGV4ZXIgdG8gYSBuZXcgb2JqZWN0LiAgSW4gdGhpcyBjYXNlLCB3ZSBoYXZlIHRvIHJlYmluZCBhbGwgbWV0aG9kcyBpbgorICAgICAgICAjIHRoZSBsZXhzdGF0ZXJlIGFuZCBsZXhzdGF0ZWVycm9yZiB0YWJsZXMuCisKKyAgICAgICAgaWYgb2JqZWN0OgorICAgICAgICAgICAgbmV3dGFiID0geyB9CisgICAgICAgICAgICBmb3Iga2V5LCByaXRlbSBpbiBzZWxmLmxleHN0YXRlcmUuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBuZXdyZSA9IFtdCisgICAgICAgICAgICAgICAgZm9yIGNyZSwgZmluZGV4IGluIHJpdGVtOgorICAgICAgICAgICAgICAgICAgICAgbmV3ZmluZGV4ID0gW10KKyAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbmRleDoKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZiBvciBub3QgZlswXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3ZmluZGV4LmFwcGVuZChmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2ZpbmRleC5hcHBlbmQoKGdldGF0dHIob2JqZWN0LGZbMF0uX19uYW1lX18pLGZbMV0pKQorICAgICAgICAgICAgICAgIG5ld3JlLmFwcGVuZCgoY3JlLG5ld2ZpbmRleCkpCisgICAgICAgICAgICAgICAgbmV3dGFiW2tleV0gPSBuZXdyZQorICAgICAgICAgICAgYy5sZXhzdGF0ZXJlID0gbmV3dGFiCisgICAgICAgICAgICBjLmxleHN0YXRlZXJyb3JmID0geyB9CisgICAgICAgICAgICBmb3Iga2V5LCBlZiBpbiBzZWxmLmxleHN0YXRlZXJyb3JmLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgYy5sZXhzdGF0ZWVycm9yZltrZXldID0gZ2V0YXR0cihvYmplY3QsZWYuX19uYW1lX18pCisgICAgICAgICAgICBjLmxleG1vZHVsZSA9IG9iamVjdAorICAgICAgICByZXR1cm4gYworCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIHdyaXRldGFiKCkgLSBXcml0ZSBsZXhlciBpbmZvcm1hdGlvbiB0byBhIHRhYmxlIGZpbGUKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGRlZiB3cml0ZXRhYihzZWxmLHRhYmZpbGUsb3V0cHV0ZGlyPSIiKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0YWJmaWxlLHR5cGVzLk1vZHVsZVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGJhc2V0YWJmaWxlbmFtZSA9IHRhYmZpbGUuc3BsaXQoIi4iKVstMV0KKyAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ob3V0cHV0ZGlyLGJhc2V0YWJmaWxlbmFtZSkrIi5weSIKKyAgICAgICAgdGYgPSBvcGVuKGZpbGVuYW1lLCJ3IikKKyAgICAgICAgdGYud3JpdGUoIiMgJXMucHkuIFRoaXMgZmlsZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgUExZICh2ZXJzaW9uICVzKS4gRG9uJ3QgZWRpdCFcbiIgJSAodGFiZmlsZSxfX3ZlcnNpb25fXykpCisgICAgICAgIHRmLndyaXRlKCJfdGFidmVyc2lvbiAgID0gJXNcbiIgJSByZXByKF9fdmVyc2lvbl9fKSkKKyAgICAgICAgdGYud3JpdGUoIl9sZXh0b2tlbnMgICAgPSAlc1xuIiAlIHJlcHIoc2VsZi5sZXh0b2tlbnMpKQorICAgICAgICB0Zi53cml0ZSgiX2xleHJlZmxhZ3MgICA9ICVzXG4iICUgcmVwcihzZWxmLmxleHJlZmxhZ3MpKQorICAgICAgICB0Zi53cml0ZSgiX2xleGxpdGVyYWxzICA9ICVzXG4iICUgcmVwcihzZWxmLmxleGxpdGVyYWxzKSkKKyAgICAgICAgdGYud3JpdGUoIl9sZXhzdGF0ZWluZm8gPSAlc1xuIiAlIHJlcHIoc2VsZi5sZXhzdGF0ZWluZm8pKQorCisgICAgICAgIHRhYnJlID0geyB9CisgICAgICAgICMgQ29sbGVjdCBhbGwgZnVuY3Rpb25zIGluIHRoZSBpbml0aWFsIHN0YXRlCisgICAgICAgIGluaXRpYWwgPSBzZWxmLmxleHN0YXRlcmVbIklOSVRJQUwiXQorICAgICAgICBpbml0aWFsZnVuY3MgPSBbXQorICAgICAgICBmb3IgcGFydCBpbiBpbml0aWFsOgorICAgICAgICAgICAgZm9yIGYgaW4gcGFydFsxXToKKyAgICAgICAgICAgICAgICBpZiBmIGFuZCBmWzBdOgorICAgICAgICAgICAgICAgICAgICBpbml0aWFsZnVuY3MuYXBwZW5kKGYpCisKKyAgICAgICAgZm9yIGtleSwgbHJlIGluIHNlbGYubGV4c3RhdGVyZS5pdGVtcygpOgorICAgICAgICAgICAgIHRpdGVtID0gW10KKyAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4obHJlKSk6CisgICAgICAgICAgICAgICAgICB0aXRlbS5hcHBlbmQoKHNlbGYubGV4c3RhdGVyZXRleHRba2V5XVtpXSxfZnVuY3NfdG9fbmFtZXMobHJlW2ldWzFdLHNlbGYubGV4c3RhdGVyZW5hbWVzW2tleV1baV0pKSkKKyAgICAgICAgICAgICB0YWJyZVtrZXldID0gdGl0ZW0KKworICAgICAgICB0Zi53cml0ZSgiX2xleHN0YXRlcmUgICA9ICVzXG4iICUgcmVwcih0YWJyZSkpCisgICAgICAgIHRmLndyaXRlKCJfbGV4c3RhdGVpZ25vcmUgPSAlc1xuIiAlIHJlcHIoc2VsZi5sZXhzdGF0ZWlnbm9yZSkpCisKKyAgICAgICAgdGFiZXJyID0geyB9CisgICAgICAgIGZvciBrZXksIGVmIGluIHNlbGYubGV4c3RhdGVlcnJvcmYuaXRlbXMoKToKKyAgICAgICAgICAgICBpZiBlZjoKKyAgICAgICAgICAgICAgICAgIHRhYmVycltrZXldID0gZWYuX19uYW1lX18KKyAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgdGFiZXJyW2tleV0gPSBOb25lCisgICAgICAgIHRmLndyaXRlKCJfbGV4c3RhdGVlcnJvcmYgPSAlc1xuIiAlIHJlcHIodGFiZXJyKSkKKyAgICAgICAgdGYuY2xvc2UoKQorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIHJlYWR0YWIoKSAtIFJlYWQgbGV4ZXIgaW5mb3JtYXRpb24gZnJvbSBhIHRhYiBmaWxlCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBkZWYgcmVhZHRhYihzZWxmLHRhYmZpbGUsZmRpY3QpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHRhYmZpbGUsdHlwZXMuTW9kdWxlVHlwZSk6CisgICAgICAgICAgICBsZXh0YWIgPSB0YWJmaWxlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMzoKKyAgICAgICAgICAgICAgICBleGVjKCJpbXBvcnQgJXMgYXMgbGV4dGFiIiAlIHRhYmZpbGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVudiA9IHsgfQorICAgICAgICAgICAgICAgIGV4ZWMoImltcG9ydCAlcyBhcyBsZXh0YWIiICUgdGFiZmlsZSwgZW52LGVudikKKyAgICAgICAgICAgICAgICBsZXh0YWIgPSBlbnZbJ2xleHRhYiddCisKKyAgICAgICAgaWYgZ2V0YXR0cihsZXh0YWIsIl90YWJ2ZXJzaW9uIiwiMC4wIikgIT0gX192ZXJzaW9uX186CisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiSW5jb25zaXN0ZW50IFBMWSB2ZXJzaW9uIikKKworICAgICAgICBzZWxmLmxleHRva2VucyAgICAgID0gbGV4dGFiLl9sZXh0b2tlbnMKKyAgICAgICAgc2VsZi5sZXhyZWZsYWdzICAgICA9IGxleHRhYi5fbGV4cmVmbGFncworICAgICAgICBzZWxmLmxleGxpdGVyYWxzICAgID0gbGV4dGFiLl9sZXhsaXRlcmFscworICAgICAgICBzZWxmLmxleHN0YXRlaW5mbyAgID0gbGV4dGFiLl9sZXhzdGF0ZWluZm8KKyAgICAgICAgc2VsZi5sZXhzdGF0ZWlnbm9yZSA9IGxleHRhYi5fbGV4c3RhdGVpZ25vcmUKKyAgICAgICAgc2VsZi5sZXhzdGF0ZXJlICAgICA9IHsgfQorICAgICAgICBzZWxmLmxleHN0YXRlcmV0ZXh0ID0geyB9CisgICAgICAgIGZvciBrZXksbHJlIGluIGxleHRhYi5fbGV4c3RhdGVyZS5pdGVtcygpOgorICAgICAgICAgICAgIHRpdGVtID0gW10KKyAgICAgICAgICAgICB0eHRpdGVtID0gW10KKyAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4obHJlKSk6CisgICAgICAgICAgICAgICAgICB0aXRlbS5hcHBlbmQoKHJlLmNvbXBpbGUobHJlW2ldWzBdLGxleHRhYi5fbGV4cmVmbGFncyB8IHJlLlZFUkJPU0UpLF9uYW1lc190b19mdW5jcyhscmVbaV1bMV0sZmRpY3QpKSkKKyAgICAgICAgICAgICAgICAgIHR4dGl0ZW0uYXBwZW5kKGxyZVtpXVswXSkKKyAgICAgICAgICAgICBzZWxmLmxleHN0YXRlcmVba2V5XSA9IHRpdGVtCisgICAgICAgICAgICAgc2VsZi5sZXhzdGF0ZXJldGV4dFtrZXldID0gdHh0aXRlbQorICAgICAgICBzZWxmLmxleHN0YXRlZXJyb3JmID0geyB9CisgICAgICAgIGZvciBrZXksZWYgaW4gbGV4dGFiLl9sZXhzdGF0ZWVycm9yZi5pdGVtcygpOgorICAgICAgICAgICAgIHNlbGYubGV4c3RhdGVlcnJvcmZba2V5XSA9IGZkaWN0W2VmXQorICAgICAgICBzZWxmLmJlZ2luKCdJTklUSUFMJykKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBpbnB1dCgpIC0gUHVzaCBhIG5ldyBzdHJpbmcgaW50byB0aGUgbGV4ZXIKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGRlZiBpbnB1dChzZWxmLHMpOgorICAgICAgICAjIFB1bGwgb2ZmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgdG8gc2VlIGlmIHMgbG9va3MgbGlrZSBhIHN0cmluZworICAgICAgICBjID0gc1s6MV0KKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYyxTdHJpbmdUeXBlcyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJFeHBlY3RlZCBhIHN0cmluZyIpCisgICAgICAgIHNlbGYubGV4ZGF0YSA9IHMKKyAgICAgICAgc2VsZi5sZXhwb3MgPSAwCisgICAgICAgIHNlbGYubGV4bGVuID0gbGVuKHMpCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgYmVnaW4oKSAtIENoYW5nZXMgdGhlIGxleGluZyBzdGF0ZQorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZGVmIGJlZ2luKHNlbGYsc3RhdGUpOgorICAgICAgICBpZiBub3Qgc3RhdGUgaW4gc2VsZi5sZXhzdGF0ZXJlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5kZWZpbmVkIHN0YXRlIikKKyAgICAgICAgc2VsZi5sZXhyZSA9IHNlbGYubGV4c3RhdGVyZVtzdGF0ZV0KKyAgICAgICAgc2VsZi5sZXhyZXRleHQgPSBzZWxmLmxleHN0YXRlcmV0ZXh0W3N0YXRlXQorICAgICAgICBzZWxmLmxleGlnbm9yZSA9IHNlbGYubGV4c3RhdGVpZ25vcmUuZ2V0KHN0YXRlLCIiKQorICAgICAgICBzZWxmLmxleGVycm9yZiA9IHNlbGYubGV4c3RhdGVlcnJvcmYuZ2V0KHN0YXRlLE5vbmUpCisgICAgICAgIHNlbGYubGV4c3RhdGUgPSBzdGF0ZQorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIHB1c2hfc3RhdGUoKSAtIENoYW5nZXMgdGhlIGxleGluZyBzdGF0ZSBhbmQgc2F2ZXMgb2xkIG9uIHN0YWNrCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBkZWYgcHVzaF9zdGF0ZShzZWxmLHN0YXRlKToKKyAgICAgICAgc2VsZi5sZXhzdGF0ZXN0YWNrLmFwcGVuZChzZWxmLmxleHN0YXRlKQorICAgICAgICBzZWxmLmJlZ2luKHN0YXRlKQorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIHBvcF9zdGF0ZSgpIC0gUmVzdG9yZXMgdGhlIHByZXZpb3VzIHN0YXRlCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBkZWYgcG9wX3N0YXRlKHNlbGYpOgorICAgICAgICBzZWxmLmJlZ2luKHNlbGYubGV4c3RhdGVzdGFjay5wb3AoKSkKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBjdXJyZW50X3N0YXRlKCkgLSBSZXR1cm5zIHRoZSBjdXJyZW50IGxleGluZyBzdGF0ZQorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZGVmIGN1cnJlbnRfc3RhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmxleHN0YXRlCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgc2tpcCgpIC0gU2tpcCBhaGVhZCBuIGNoYXJhY3RlcnMKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGRlZiBza2lwKHNlbGYsbik6CisgICAgICAgIHNlbGYubGV4cG9zICs9IG4KKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBvcHR0b2tlbigpIC0gUmV0dXJuIHRoZSBuZXh0IHRva2VuIGZyb20gdGhlIExleGVyCisgICAgIworICAgICMgTm90ZTogVGhpcyBmdW5jdGlvbiBoYXMgYmVlbiBjYXJlZnVsbHkgaW1wbGVtZW50ZWQgdG8gYmUgYXMgZmFzdAorICAgICMgYXMgcG9zc2libGUuICBEb24ndCBtYWtlIGNoYW5nZXMgdW5sZXNzIHlvdSByZWFsbHkga25vdyB3aGF0CisgICAgIyB5b3UgYXJlIGRvaW5nCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBkZWYgdG9rZW4oc2VsZik6CisgICAgICAgICMgTWFrZSBsb2NhbCBjb3BpZXMgb2YgZnJlcXVlbnRseSByZWZlcmVuY2VkIGF0dHJpYnV0ZXMKKyAgICAgICAgbGV4cG9zICAgID0gc2VsZi5sZXhwb3MKKyAgICAgICAgbGV4bGVuICAgID0gc2VsZi5sZXhsZW4KKyAgICAgICAgbGV4aWdub3JlID0gc2VsZi5sZXhpZ25vcmUKKyAgICAgICAgbGV4ZGF0YSAgID0gc2VsZi5sZXhkYXRhCisKKyAgICAgICAgd2hpbGUgbGV4cG9zIDwgbGV4bGVuOgorICAgICAgICAgICAgIyBUaGlzIGNvZGUgcHJvdmlkZXMgc29tZSBzaG9ydC1jaXJjdWl0IGNvZGUgZm9yIHdoaXRlc3BhY2UsIHRhYnMsIGFuZCBvdGhlciBpZ25vcmVkIGNoYXJhY3RlcnMKKyAgICAgICAgICAgIGlmIGxleGRhdGFbbGV4cG9zXSBpbiBsZXhpZ25vcmU6CisgICAgICAgICAgICAgICAgbGV4cG9zICs9IDEKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIExvb2sgZm9yIGEgcmVndWxhciBleHByZXNzaW9uIG1hdGNoCisgICAgICAgICAgICBmb3IgbGV4cmUsbGV4aW5kZXhmdW5jIGluIHNlbGYubGV4cmU6CisgICAgICAgICAgICAgICAgbSA9IGxleHJlLm1hdGNoKGxleGRhdGEsbGV4cG9zKQorICAgICAgICAgICAgICAgIGlmIG5vdCBtOiBjb250aW51ZQorCisgICAgICAgICAgICAgICAgIyBDcmVhdGUgYSB0b2tlbiBmb3IgcmV0dXJuCisgICAgICAgICAgICAgICAgdG9rID0gTGV4VG9rZW4oKQorICAgICAgICAgICAgICAgIHRvay52YWx1ZSA9IG0uZ3JvdXAoKQorICAgICAgICAgICAgICAgIHRvay5saW5lbm8gPSBzZWxmLmxpbmVubworICAgICAgICAgICAgICAgIHRvay5sZXhwb3MgPSBsZXhwb3MKKworICAgICAgICAgICAgICAgIGkgPSBtLmxhc3RpbmRleAorICAgICAgICAgICAgICAgIGZ1bmMsdG9rLnR5cGUgPSBsZXhpbmRleGZ1bmNbaV0KKworICAgICAgICAgICAgICAgIGlmIG5vdCBmdW5jOgorICAgICAgICAgICAgICAgICAgICMgSWYgbm8gdG9rZW4gdHlwZSB3YXMgc2V0LCBpdCdzIGFuIGlnbm9yZWQgdG9rZW4KKyAgICAgICAgICAgICAgICAgICBpZiB0b2sudHlwZToKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxleHBvcyA9IG0uZW5kKCkKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rCisgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICBsZXhwb3MgPSBtLmVuZCgpCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgIGxleHBvcyA9IG0uZW5kKCkKKworICAgICAgICAgICAgICAgICMgSWYgdG9rZW4gaXMgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24sIGNhbGwgaXQKKworICAgICAgICAgICAgICAgIHRvay5sZXhlciA9IHNlbGYgICAgICAjIFNldCBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMgdXNlZnVsIGluIHRva2VuIHJ1bGVzCisgICAgICAgICAgICAgICAgc2VsZi5sZXhtYXRjaCA9IG0KKyAgICAgICAgICAgICAgICBzZWxmLmxleHBvcyA9IGxleHBvcworCisgICAgICAgICAgICAgICAgbmV3dG9rID0gZnVuYyh0b2spCisKKyAgICAgICAgICAgICAgICAjIEV2ZXJ5IGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdG9rZW4sIGlmIG5vdGhpbmcsIHdlIGp1c3QgbW92ZSB0byBuZXh0IHRva2VuCisgICAgICAgICAgICAgICAgaWYgbm90IG5ld3RvazoKKyAgICAgICAgICAgICAgICAgICAgbGV4cG9zICAgID0gc2VsZi5sZXhwb3MgICAgICAgICAjIFRoaXMgaXMgaGVyZSBpbiBjYXNlIHVzZXIgaGFzIHVwZGF0ZWQgbGV4cG9zLgorICAgICAgICAgICAgICAgICAgICBsZXhpZ25vcmUgPSBzZWxmLmxleGlnbm9yZSAgICAgICMgVGhpcyBpcyBoZXJlIGluIGNhc2UgdGhlcmUgd2FzIGEgc3RhdGUgY2hhbmdlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICAjIFZlcmlmeSB0eXBlIG9mIHRoZSB0b2tlbi4gIElmIG5vdCBpbiB0aGUgdG9rZW4gbWFwLCByYWlzZSBhbiBlcnJvcgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmxleG9wdGltaXplOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgbmV3dG9rLnR5cGUgaW4gc2VsZi5sZXh0b2tlbnM6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBMZXhFcnJvcigiJXM6JWQ6IFJ1bGUgJyVzJyByZXR1cm5lZCBhbiB1bmtub3duIHRva2VuIHR5cGUgJyVzJyIgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19jb2RlKGZ1bmMpLmNvX2ZpbGVuYW1lLCBmdW5jX2NvZGUoZnVuYykuY29fZmlyc3RsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5fX25hbWVfXywgbmV3dG9rLnR5cGUpLGxleGRhdGFbbGV4cG9zOl0pCisKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3dG9rCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgTm8gbWF0Y2gsIHNlZSBpZiBpbiBsaXRlcmFscworICAgICAgICAgICAgICAgIGlmIGxleGRhdGFbbGV4cG9zXSBpbiBzZWxmLmxleGxpdGVyYWxzOgorICAgICAgICAgICAgICAgICAgICB0b2sgPSBMZXhUb2tlbigpCisgICAgICAgICAgICAgICAgICAgIHRvay52YWx1ZSA9IGxleGRhdGFbbGV4cG9zXQorICAgICAgICAgICAgICAgICAgICB0b2subGluZW5vID0gc2VsZi5saW5lbm8KKyAgICAgICAgICAgICAgICAgICAgdG9rLnR5cGUgPSB0b2sudmFsdWUKKyAgICAgICAgICAgICAgICAgICAgdG9rLmxleHBvcyA9IGxleHBvcworICAgICAgICAgICAgICAgICAgICBzZWxmLmxleHBvcyA9IGxleHBvcyArIDEKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvaworCisgICAgICAgICAgICAgICAgIyBObyBtYXRjaC4gQ2FsbCB0X2Vycm9yKCkgaWYgZGVmaW5lZC4KKyAgICAgICAgICAgICAgICBpZiBzZWxmLmxleGVycm9yZjoKKyAgICAgICAgICAgICAgICAgICAgdG9rID0gTGV4VG9rZW4oKQorICAgICAgICAgICAgICAgICAgICB0b2sudmFsdWUgPSBzZWxmLmxleGRhdGFbbGV4cG9zOl0KKyAgICAgICAgICAgICAgICAgICAgdG9rLmxpbmVubyA9IHNlbGYubGluZW5vCisgICAgICAgICAgICAgICAgICAgIHRvay50eXBlID0gImVycm9yIgorICAgICAgICAgICAgICAgICAgICB0b2subGV4ZXIgPSBzZWxmCisgICAgICAgICAgICAgICAgICAgIHRvay5sZXhwb3MgPSBsZXhwb3MKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sZXhwb3MgPSBsZXhwb3MKKyAgICAgICAgICAgICAgICAgICAgbmV3dG9rID0gc2VsZi5sZXhlcnJvcmYodG9rKQorICAgICAgICAgICAgICAgICAgICBpZiBsZXhwb3MgPT0gc2VsZi5sZXhwb3M6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEVycm9yIG1ldGhvZCBkaWRuJ3QgY2hhbmdlIHRleHQgcG9zaXRpb24gYXQgYWxsLiBUaGlzIGlzIGFuIGVycm9yLgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgTGV4RXJyb3IoIlNjYW5uaW5nIGVycm9yLiBJbGxlZ2FsIGNoYXJhY3RlciAnJXMnIiAlIChsZXhkYXRhW2xleHBvc10pLCBsZXhkYXRhW2xleHBvczpdKQorICAgICAgICAgICAgICAgICAgICBsZXhwb3MgPSBzZWxmLmxleHBvcworICAgICAgICAgICAgICAgICAgICBpZiBub3QgbmV3dG9rOiBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3dG9rCisKKyAgICAgICAgICAgICAgICBzZWxmLmxleHBvcyA9IGxleHBvcworICAgICAgICAgICAgICAgIHJhaXNlIExleEVycm9yKCJJbGxlZ2FsIGNoYXJhY3RlciAnJXMnIGF0IGluZGV4ICVkIiAlIChsZXhkYXRhW2xleHBvc10sbGV4cG9zKSwgbGV4ZGF0YVtsZXhwb3M6XSkKKworICAgICAgICBzZWxmLmxleHBvcyA9IGxleHBvcyArIDEKKyAgICAgICAgaWYgc2VsZi5sZXhkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJObyBpbnB1dCBzdHJpbmcgZ2l2ZW4gd2l0aCBpbnB1dCgpIikKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICMgSXRlcmF0b3IgaW50ZXJmYWNlCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIHQgPSBzZWxmLnRva2VuKCkKKyAgICAgICAgaWYgdCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICByZXR1cm4gdAorCisgICAgX19uZXh0X18gPSBuZXh0CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT09IExleCBCdWlsZGVyID09PQorIworIyBUaGUgZnVuY3Rpb25zIGFuZCBjbGFzc2VzIGJlbG93IGFyZSB1c2VkIHRvIGNvbGxlY3QgbGV4aW5nIGluZm9ybWF0aW9uCisjIGFuZCBidWlsZCBhIExleGVyIG9iamVjdCBmcm9tIGl0LgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGdldF9jYWxsZXJfbW9kdWxlX2RpY3QoKQorIworIyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBzeW1ib2xzIGRlZmluZWQgd2l0aGluCisjIGEgY2FsbGVyIGZ1cnRoZXIgZG93biB0aGUgY2FsbCBzdGFjay4gIFRoaXMgaXMgdXNlZCB0byBnZXQgdGhlIGVudmlyb25tZW50CisjIGFzc29jaWF0ZWQgd2l0aCB0aGUgeWFjYygpIGNhbGwgaWYgbm9uZSB3YXMgcHJvdmlkZWQuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBnZXRfY2FsbGVyX21vZHVsZV9kaWN0KGxldmVscyk6CisgICAgdHJ5OgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKyAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICBlLGIsdCA9IHN5cy5leGNfaW5mbygpCisgICAgICAgIGYgPSB0LnRiX2ZyYW1lCisgICAgICAgIHdoaWxlIGxldmVscyA+IDA6CisgICAgICAgICAgICBmID0gZi5mX2JhY2sgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBsZXZlbHMgLT0gMQorICAgICAgICBsZGljdCA9IGYuZl9nbG9iYWxzLmNvcHkoKQorICAgICAgICBpZiBmLmZfZ2xvYmFscyAhPSBmLmZfbG9jYWxzOgorICAgICAgICAgICAgbGRpY3QudXBkYXRlKGYuZl9sb2NhbHMpCisKKyAgICAgICAgcmV0dXJuIGxkaWN0CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgX2Z1bmNzX3RvX25hbWVzKCkKKyMKKyMgR2l2ZW4gYSBsaXN0IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbiBmdW5jdGlvbnMsIHRoaXMgY29udmVydHMgaXQgdG8gYSBsaXN0CisjIHN1aXRhYmxlIGZvciBvdXRwdXQgdG8gYSB0YWJsZSBmaWxlCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBfZnVuY3NfdG9fbmFtZXMoZnVuY2xpc3QsbmFtZWxpc3QpOgorICAgIHJlc3VsdCA9IFtdCisgICAgZm9yIGYsbmFtZSBpbiB6aXAoZnVuY2xpc3QsbmFtZWxpc3QpOgorICAgICAgICAgaWYgZiBhbmQgZlswXToKKyAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKChuYW1lLCBmWzFdKSkKKyAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChmKQorICAgIHJldHVybiByZXN1bHQKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBfbmFtZXNfdG9fZnVuY3MoKQorIworIyBHaXZlbiBhIGxpc3Qgb2YgcmVndWxhciBleHByZXNzaW9uIGZ1bmN0aW9uIG5hbWVzLCB0aGlzIGNvbnZlcnRzIGl0IGJhY2sgdG8KKyMgZnVuY3Rpb25zLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgX25hbWVzX3RvX2Z1bmNzKG5hbWVsaXN0LGZkaWN0KToKKyAgICAgcmVzdWx0ID0gW10KKyAgICAgZm9yIG4gaW4gbmFtZWxpc3Q6CisgICAgICAgICAgaWYgbiBhbmQgblswXToKKyAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgoZmRpY3RbblswXV0sblsxXSkpCisgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChuKQorICAgICByZXR1cm4gcmVzdWx0CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgX2Zvcm1fbWFzdGVyX3JlKCkKKyMKKyMgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIGxpc3Qgb2YgYWxsIG9mIHRoZSByZWdleCBjb21wb25lbnRzIGFuZCBhdHRlbXB0cyB0bworIyBmb3JtIHRoZSBtYXN0ZXIgcmVndWxhciBleHByZXNzaW9uLiAgR2l2ZW4gbGltaXRhdGlvbnMgaW4gdGhlIFB5dGhvbiByZQorIyBtb2R1bGUsIGl0IG1heSBiZSBuZWNlc3NhcnkgdG8gYnJlYWsgdGhlIG1hc3RlciByZWdleCBpbnRvIHNlcGFyYXRlIGV4cHJlc3Npb25zLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgX2Zvcm1fbWFzdGVyX3JlKHJlbGlzdCxyZWZsYWdzLGxkaWN0LHRva25hbWVzKToKKyAgICBpZiBub3QgcmVsaXN0OiByZXR1cm4gW10KKyAgICByZWdleCA9ICJ8Ii5qb2luKHJlbGlzdCkKKyAgICB0cnk6CisgICAgICAgIGxleHJlID0gcmUuY29tcGlsZShyZWdleCxyZS5WRVJCT1NFIHwgcmVmbGFncykKKworICAgICAgICAjIEJ1aWxkIHRoZSBpbmRleCB0byBmdW5jdGlvbiBtYXAgZm9yIHRoZSBtYXRjaGluZyBlbmdpbmUKKyAgICAgICAgbGV4aW5kZXhmdW5jID0gWyBOb25lIF0gKiAobWF4KGxleHJlLmdyb3VwaW5kZXgudmFsdWVzKCkpKzEpCisgICAgICAgIGxleGluZGV4bmFtZXMgPSBsZXhpbmRleGZ1bmNbOl0KKworICAgICAgICBmb3IgZixpIGluIGxleHJlLmdyb3VwaW5kZXguaXRlbXMoKToKKyAgICAgICAgICAgIGhhbmRsZSA9IGxkaWN0LmdldChmLE5vbmUpCisgICAgICAgICAgICBpZiB0eXBlKGhhbmRsZSkgaW4gKHR5cGVzLkZ1bmN0aW9uVHlwZSwgdHlwZXMuTWV0aG9kVHlwZSk6CisgICAgICAgICAgICAgICAgbGV4aW5kZXhmdW5jW2ldID0gKGhhbmRsZSx0b2tuYW1lc1tmXSkKKyAgICAgICAgICAgICAgICBsZXhpbmRleG5hbWVzW2ldID0gZgorICAgICAgICAgICAgZWxpZiBoYW5kbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbGV4aW5kZXhuYW1lc1tpXSA9IGYKKyAgICAgICAgICAgICAgICBpZiBmLmZpbmQoImlnbm9yZV8iKSA+IDA6CisgICAgICAgICAgICAgICAgICAgIGxleGluZGV4ZnVuY1tpXSA9IChOb25lLE5vbmUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbGV4aW5kZXhmdW5jW2ldID0gKE5vbmUsIHRva25hbWVzW2ZdKQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIFsobGV4cmUsbGV4aW5kZXhmdW5jKV0sW3JlZ2V4XSxbbGV4aW5kZXhuYW1lc10KKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICBtID0gaW50KGxlbihyZWxpc3QpLzIpCisgICAgICAgIGlmIG0gPT0gMDogbSA9IDEKKyAgICAgICAgbGxpc3QsIGxyZSwgbG5hbWVzID0gX2Zvcm1fbWFzdGVyX3JlKHJlbGlzdFs6bV0scmVmbGFncyxsZGljdCx0b2tuYW1lcykKKyAgICAgICAgcmxpc3QsIHJyZSwgcm5hbWVzID0gX2Zvcm1fbWFzdGVyX3JlKHJlbGlzdFttOl0scmVmbGFncyxsZGljdCx0b2tuYW1lcykKKyAgICAgICAgcmV0dXJuIGxsaXN0K3JsaXN0LCBscmUrcnJlLCBsbmFtZXMrcm5hbWVzCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZGVmIF9zdGF0ZXRva2VuKHMsbmFtZXMpCisjCisjIEdpdmVuIGEgZGVjbGFyYXRpb24gbmFtZSBzIG9mIHRoZSBmb3JtICJ0XyIgYW5kIGEgZGljdGlvbmFyeSB3aG9zZSBrZXlzIGFyZQorIyBzdGF0ZSBuYW1lcywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgdHVwbGUgKHN0YXRlcyx0b2tlbm5hbWUpIHdoZXJlIHN0YXRlcworIyBpcyBhIHR1cGxlIG9mIHN0YXRlIG5hbWVzIGFuZCB0b2tlbm5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIHRva2VuLiAgRm9yIGV4YW1wbGUsCisjIGNhbGxpbmcgdGhpcyB3aXRoIHMgPSAidF9mb29fYmFyX1NQQU0iIG1pZ2h0IHJldHVybiAoKCdmb28nLCdiYXInKSwnU1BBTScpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBfc3RhdGV0b2tlbihzLG5hbWVzKToKKyAgICBub25zdGF0ZSA9IDEKKyAgICBwYXJ0cyA9IHMuc3BsaXQoIl8iKQorICAgIGZvciBpIGluIHJhbmdlKDEsbGVuKHBhcnRzKSk6CisgICAgICAgICBpZiBub3QgcGFydHNbaV0gaW4gbmFtZXMgYW5kIHBhcnRzW2ldICE9ICdBTlknOiBicmVhaworICAgIGlmIGkgPiAxOgorICAgICAgIHN0YXRlcyA9IHR1cGxlKHBhcnRzWzE6aV0pCisgICAgZWxzZToKKyAgICAgICBzdGF0ZXMgPSAoJ0lOSVRJQUwnLCkKKworICAgIGlmICdBTlknIGluIHN0YXRlczoKKyAgICAgICBzdGF0ZXMgPSB0dXBsZShuYW1lcykKKworICAgIHRva2VubmFtZSA9ICJfIi5qb2luKHBhcnRzW2k6XSkKKyAgICByZXR1cm4gKHN0YXRlcyx0b2tlbm5hbWUpCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMZXhlclJlZmxlY3QoKQorIworIyBUaGlzIGNsYXNzIHJlcHJlc2VudHMgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGJ1aWxkIGEgbGV4ZXIgYXMgZXh0cmFjdGVkIGZyb20gYQorIyB1c2VyJ3MgaW5wdXQgZmlsZS4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NsYXNzIExleGVyUmVmbGVjdChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLGxkaWN0LGxvZz1Ob25lLHJlZmxhZ3M9MCk6CisgICAgICAgIHNlbGYubGRpY3QgICAgICA9IGxkaWN0CisgICAgICAgIHNlbGYuZXJyb3JfZnVuYyA9IE5vbmUKKyAgICAgICAgc2VsZi50b2tlbnMgICAgID0gW10KKyAgICAgICAgc2VsZi5yZWZsYWdzICAgID0gcmVmbGFncworICAgICAgICBzZWxmLnN0YXRlaW5mbyAgPSB7ICdJTklUSUFMJyA6ICdpbmNsdXNpdmUnfQorICAgICAgICBzZWxmLmZpbGVzICAgICAgPSB7fQorICAgICAgICBzZWxmLmVycm9yICAgICAgPSAwCisKKyAgICAgICAgaWYgbG9nIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmxvZyA9IFBseUxvZ2dlcihzeXMuc3RkZXJyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5sb2cgPSBsb2cKKworICAgICMgR2V0IGFsbCBvZiB0aGUgYmFzaWMgaW5mb3JtYXRpb24KKyAgICBkZWYgZ2V0X2FsbChzZWxmKToKKyAgICAgICAgc2VsZi5nZXRfdG9rZW5zKCkKKyAgICAgICAgc2VsZi5nZXRfbGl0ZXJhbHMoKQorICAgICAgICBzZWxmLmdldF9zdGF0ZXMoKQorICAgICAgICBzZWxmLmdldF9ydWxlcygpCisgICAgICAgIAorICAgICMgVmFsaWRhdGUgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbgorICAgIGRlZiB2YWxpZGF0ZV9hbGwoc2VsZik6CisgICAgICAgIHNlbGYudmFsaWRhdGVfdG9rZW5zKCkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9saXRlcmFscygpCisgICAgICAgIHNlbGYudmFsaWRhdGVfcnVsZXMoKQorICAgICAgICByZXR1cm4gc2VsZi5lcnJvcgorCisgICAgIyBHZXQgdGhlIHRva2VucyBtYXAKKyAgICBkZWYgZ2V0X3Rva2VucyhzZWxmKToKKyAgICAgICAgdG9rZW5zID0gc2VsZi5sZGljdC5nZXQoInRva2VucyIsTm9uZSkKKyAgICAgICAgaWYgbm90IHRva2VuczoKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJObyB0b2tlbiBsaXN0IGlzIGRlZmluZWQiKQorICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHRva2VucywobGlzdCwgdHVwbGUpKToKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJ0b2tlbnMgbXVzdCBiZSBhIGxpc3Qgb3IgdHVwbGUiKQorICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAKKyAgICAgICAgaWYgbm90IHRva2VuczoKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJ0b2tlbnMgaXMgZW1wdHkiKQorICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYudG9rZW5zID0gdG9rZW5zCisKKyAgICAjIFZhbGlkYXRlIHRoZSB0b2tlbnMKKyAgICBkZWYgdmFsaWRhdGVfdG9rZW5zKHNlbGYpOgorICAgICAgICB0ZXJtaW5hbHMgPSB7fQorICAgICAgICBmb3IgbiBpbiBzZWxmLnRva2VuczoKKyAgICAgICAgICAgIGlmIG5vdCBfaXNfaWRlbnRpZmllci5tYXRjaChuKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiQmFkIHRva2VuIG5hbWUgJyVzJyIsbikKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgaWYgbiBpbiB0ZXJtaW5hbHM6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cud2FybmluZygiVG9rZW4gJyVzJyBtdWx0aXBseSBkZWZpbmVkIiwgbikKKyAgICAgICAgICAgIHRlcm1pbmFsc1tuXSA9IDEKKworICAgICMgR2V0IHRoZSBsaXRlcmFscyBzcGVjaWZpZXIKKyAgICBkZWYgZ2V0X2xpdGVyYWxzKHNlbGYpOgorICAgICAgICBzZWxmLmxpdGVyYWxzID0gc2VsZi5sZGljdC5nZXQoImxpdGVyYWxzIiwiIikKKworICAgICMgVmFsaWRhdGUgbGl0ZXJhbHMKKyAgICBkZWYgdmFsaWRhdGVfbGl0ZXJhbHMoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBjIGluIHNlbGYubGl0ZXJhbHM6CisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYyxTdHJpbmdUeXBlcykgb3IgbGVuKGMpID4gMToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIkludmFsaWQgbGl0ZXJhbCAlcy4gTXVzdCBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIiLCByZXByKGMpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiSW52YWxpZCBsaXRlcmFscyBzcGVjaWZpY2F0aW9uLiBsaXRlcmFscyBtdXN0IGJlIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyIpCisgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorCisgICAgZGVmIGdldF9zdGF0ZXMoc2VsZik6CisgICAgICAgIHNlbGYuc3RhdGVzID0gc2VsZi5sZGljdC5nZXQoInN0YXRlcyIsTm9uZSkKKyAgICAgICAgIyBCdWlsZCBzdGF0ZW1hcAorICAgICAgICBpZiBzZWxmLnN0YXRlczoKKyAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZWxmLnN0YXRlcywodHVwbGUsbGlzdCkpOgorICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoInN0YXRlcyBtdXN0IGJlIGRlZmluZWQgYXMgYSB0dXBsZSBvciBsaXN0IikKKyAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgIGZvciBzIGluIHNlbGYuc3RhdGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uocyx0dXBsZSkgb3IgbGVuKHMpICE9IDI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIkludmFsaWQgc3RhdGUgc3BlY2lmaWVyICVzLiBNdXN0IGJlIGEgdHVwbGUgKHN0YXRlbmFtZSwnZXhjbHVzaXZlfGluY2x1c2l2ZScpIixyZXByKHMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIHN0YXRldHlwZSA9IHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG5hbWUsU3RyaW5nVHlwZXMpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJTdGF0ZSBuYW1lICVzIG11c3QgYmUgYSBzdHJpbmciLCByZXByKG5hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCAoc3RhdGV0eXBlID09ICdpbmNsdXNpdmUnIG9yIHN0YXRldHlwZSA9PSAnZXhjbHVzaXZlJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIlN0YXRlIHR5cGUgZm9yIHN0YXRlICVzIG11c3QgYmUgJ2luY2x1c2l2ZScgb3IgJ2V4Y2x1c2l2ZSciLG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbmFtZSBpbiBzZWxmLnN0YXRlaW5mbzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiU3RhdGUgJyVzJyBhbHJlYWR5IGRlZmluZWQiLG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZWluZm9bbmFtZV0gPSBzdGF0ZXR5cGUKKworICAgICMgR2V0IGFsbCBvZiB0aGUgc3ltYm9scyB3aXRoIGEgdF8gcHJlZml4IGFuZCBzb3J0IHRoZW0gaW50byB2YXJpb3VzCisgICAgIyBjYXRlZ29yaWVzIChmdW5jdGlvbnMsIHN0cmluZ3MsIGVycm9yIGZ1bmN0aW9ucywgYW5kIGlnbm9yZSBjaGFyYWN0ZXJzKQorCisgICAgZGVmIGdldF9ydWxlcyhzZWxmKToKKyAgICAgICAgdHN5bWJvbHMgPSBbZiBmb3IgZiBpbiBzZWxmLmxkaWN0IGlmIGZbOjJdID09ICd0XycgXQorCisgICAgICAgICMgTm93IGJ1aWxkIHVwIGEgbGlzdCBvZiBmdW5jdGlvbnMgYW5kIGEgbGlzdCBvZiBzdHJpbmdzCisKKyAgICAgICAgc2VsZi50b2tuYW1lcyA9IHsgfSAgICAgICAgIyBNYXBwaW5nIG9mIHN5bWJvbHMgdG8gdG9rZW4gbmFtZXMKKyAgICAgICAgc2VsZi5mdW5jc3ltID0gIHsgfSAgICAgICAgIyBTeW1ib2xzIGRlZmluZWQgYXMgZnVuY3Rpb25zCisgICAgICAgIHNlbGYuc3Ryc3ltID0gICB7IH0gICAgICAgICMgU3ltYm9scyBkZWZpbmVkIGFzIHN0cmluZ3MKKyAgICAgICAgc2VsZi5pZ25vcmUgICA9IHsgfSAgICAgICAgIyBJZ25vcmUgc3RyaW5ncyBieSBzdGF0ZQorICAgICAgICBzZWxmLmVycm9yZiAgID0geyB9ICAgICAgICAjIEVycm9yIGZ1bmN0aW9ucyBieSBzdGF0ZQorCisgICAgICAgIGZvciBzIGluIHNlbGYuc3RhdGVpbmZvOgorICAgICAgICAgICAgIHNlbGYuZnVuY3N5bVtzXSA9IFtdCisgICAgICAgICAgICAgc2VsZi5zdHJzeW1bc10gPSBbXQorCisgICAgICAgIGlmIGxlbih0c3ltYm9scykgPT0gMDoKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJObyBydWxlcyBvZiB0aGUgZm9ybSB0X3J1bGVuYW1lIGFyZSBkZWZpbmVkIikKKyAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBmb3IgZiBpbiB0c3ltYm9sczoKKyAgICAgICAgICAgIHQgPSBzZWxmLmxkaWN0W2ZdCisgICAgICAgICAgICBzdGF0ZXMsIHRva25hbWUgPSBfc3RhdGV0b2tlbihmLHNlbGYuc3RhdGVpbmZvKQorICAgICAgICAgICAgc2VsZi50b2tuYW1lc1tmXSA9IHRva25hbWUKKworICAgICAgICAgICAgaWYgaGFzYXR0cih0LCJfX2NhbGxfXyIpOgorICAgICAgICAgICAgICAgIGlmIHRva25hbWUgPT0gJ2Vycm9yJzoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHMgaW4gc3RhdGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcmZbc10gPSB0CisgICAgICAgICAgICAgICAgZWxpZiB0b2tuYW1lID09ICdpZ25vcmUnOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gZnVuY19jb2RlKHQpLmNvX2ZpcnN0bGluZW5vCisgICAgICAgICAgICAgICAgICAgIGZpbGUgPSBmdW5jX2NvZGUodCkuY29fZmlsZW5hbWUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiVzOiVkOiBSdWxlICclcycgbXVzdCBiZSBkZWZpbmVkIGFzIGEgc3RyaW5nIixmaWxlLGxpbmUsdC5fX25hbWVfXykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmb3IgcyBpbiBzdGF0ZXM6IAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mdW5jc3ltW3NdLmFwcGVuZCgoZix0KSkKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0LCBTdHJpbmdUeXBlcyk6CisgICAgICAgICAgICAgICAgaWYgdG9rbmFtZSA9PSAnaWdub3JlJzoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHMgaW4gc3RhdGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pZ25vcmVbc10gPSB0CisgICAgICAgICAgICAgICAgICAgIGlmICJcXCIgaW4gdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLndhcm5pbmcoIiVzIGNvbnRhaW5zIGEgbGl0ZXJhbCBiYWNrc2xhc2ggJ1xcJyIsZikKKworICAgICAgICAgICAgICAgIGVsaWYgdG9rbmFtZSA9PSAnZXJyb3InOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiUnVsZSAnJXMnIG11c3QgYmUgZGVmaW5lZCBhcyBhIGZ1bmN0aW9uIiwgZikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmb3IgcyBpbiBzdGF0ZXM6IAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdHJzeW1bc10uYXBwZW5kKChmLHQpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiJXMgbm90IGRlZmluZWQgYXMgYSBmdW5jdGlvbiBvciBzdHJpbmciLCBmKQorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisKKyAgICAgICAgIyBTb3J0IHRoZSBmdW5jdGlvbnMgYnkgbGluZSBudW1iZXIKKyAgICAgICAgZm9yIGYgaW4gc2VsZi5mdW5jc3ltLnZhbHVlcygpOgorICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDM6CisgICAgICAgICAgICAgICAgZi5zb3J0KGxhbWJkYSB4LHk6IGNtcChmdW5jX2NvZGUoeFsxXSkuY29fZmlyc3RsaW5lbm8sZnVuY19jb2RlKHlbMV0pLmNvX2ZpcnN0bGluZW5vKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBQeXRob24gMy4wCisgICAgICAgICAgICAgICAgZi5zb3J0KGtleT1sYW1iZGEgeDogZnVuY19jb2RlKHhbMV0pLmNvX2ZpcnN0bGluZW5vKQorCisgICAgICAgICMgU29ydCB0aGUgc3RyaW5ncyBieSByZWd1bGFyIGV4cHJlc3Npb24gbGVuZ3RoCisgICAgICAgIGZvciBzIGluIHNlbGYuc3Ryc3ltLnZhbHVlcygpOgorICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDM6CisgICAgICAgICAgICAgICAgcy5zb3J0KGxhbWJkYSB4LHk6IChsZW4oeFsxXSkgPCBsZW4oeVsxXSkpIC0gKGxlbih4WzFdKSA+IGxlbih5WzFdKSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgUHl0aG9uIDMuMAorICAgICAgICAgICAgICAgIHMuc29ydChrZXk9bGFtYmRhIHg6IGxlbih4WzFdKSxyZXZlcnNlPVRydWUpCisKKyAgICAjIFZhbGlkYXRlIGFsbCBvZiB0aGUgdF9ydWxlcyBjb2xsZWN0ZWQgCisgICAgZGVmIHZhbGlkYXRlX3J1bGVzKHNlbGYpOgorICAgICAgICBmb3Igc3RhdGUgaW4gc2VsZi5zdGF0ZWluZm86CisgICAgICAgICAgICAjIFZhbGlkYXRlIGFsbCBydWxlcyBkZWZpbmVkIGJ5IGZ1bmN0aW9ucworCisgICAgICAgICAgICAKKworICAgICAgICAgICAgZm9yIGZuYW1lLCBmIGluIHNlbGYuZnVuY3N5bVtzdGF0ZV06CisgICAgICAgICAgICAgICAgbGluZSA9IGZ1bmNfY29kZShmKS5jb19maXJzdGxpbmVubworICAgICAgICAgICAgICAgIGZpbGUgPSBmdW5jX2NvZGUoZikuY29fZmlsZW5hbWUKKyAgICAgICAgICAgICAgICBzZWxmLmZpbGVzW2ZpbGVdID0gMQorCisgICAgICAgICAgICAgICAgdG9rbmFtZSA9IHNlbGYudG9rbmFtZXNbZm5hbWVdCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShmLCB0eXBlcy5NZXRob2RUeXBlKToKKyAgICAgICAgICAgICAgICAgICAgcmVxYXJncyA9IDIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXFhcmdzID0gMQorICAgICAgICAgICAgICAgIG5hcmdzID0gZnVuY19jb2RlKGYpLmNvX2FyZ2NvdW50CisgICAgICAgICAgICAgICAgaWYgbmFyZ3MgPiByZXFhcmdzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiJXM6JWQ6IFJ1bGUgJyVzJyBoYXMgdG9vIG1hbnkgYXJndW1lbnRzIixmaWxlLGxpbmUsZi5fX25hbWVfXykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIG5hcmdzIDwgcmVxYXJnczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiVzOiVkOiBSdWxlICclcycgcmVxdWlyZXMgYW4gYXJndW1lbnQiLCBmaWxlLGxpbmUsZi5fX25hbWVfXykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIG5vdCBmLl9fZG9jX186CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlczolZDogTm8gcmVndWxhciBleHByZXNzaW9uIGRlZmluZWQgZm9yIHJ1bGUgJyVzJyIsZmlsZSxsaW5lLGYuX19uYW1lX18pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGMgPSByZS5jb21waWxlKCIoP1A8JXM+JXMpIiAlIChmbmFtZSxmLl9fZG9jX18pLCByZS5WRVJCT1NFIHwgc2VsZi5yZWZsYWdzKQorICAgICAgICAgICAgICAgICAgICBpZiBjLm1hdGNoKCIiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlczolZDogUmVndWxhciBleHByZXNzaW9uIGZvciBydWxlICclcycgbWF0Y2hlcyBlbXB0eSBzdHJpbmciLCBmaWxlLGxpbmUsZi5fX25hbWVfXykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgZXhjZXB0IHJlLmVycm9yOgorICAgICAgICAgICAgICAgICAgICBfZXR5cGUsIGUsIF9ldHJhY2UgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiJXM6JWQ6IEludmFsaWQgcmVndWxhciBleHByZXNzaW9uIGZvciBydWxlICclcycuICVzIiwgZmlsZSxsaW5lLGYuX19uYW1lX18sZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgJyMnIGluIGYuX19kb2NfXzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlczolZC4gTWFrZSBzdXJlICcjJyBpbiBydWxlICclcycgaXMgZXNjYXBlZCB3aXRoICdcXCMnIixmaWxlLGxpbmUsIGYuX19uYW1lX18pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisKKyAgICAgICAgICAgICMgVmFsaWRhdGUgYWxsIHJ1bGVzIGRlZmluZWQgYnkgc3RyaW5ncworICAgICAgICAgICAgZm9yIG5hbWUsciBpbiBzZWxmLnN0cnN5bVtzdGF0ZV06CisgICAgICAgICAgICAgICAgdG9rbmFtZSA9IHNlbGYudG9rbmFtZXNbbmFtZV0KKyAgICAgICAgICAgICAgICBpZiB0b2tuYW1lID09ICdlcnJvcic6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJSdWxlICclcycgbXVzdCBiZSBkZWZpbmVkIGFzIGEgZnVuY3Rpb24iLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgbm90IHRva25hbWUgaW4gc2VsZi50b2tlbnMgYW5kIHRva25hbWUuZmluZCgiaWdub3JlXyIpIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIlJ1bGUgJyVzJyBkZWZpbmVkIGZvciBhbiB1bnNwZWNpZmllZCB0b2tlbiAlcyIsbmFtZSx0b2tuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBjID0gcmUuY29tcGlsZSgiKD9QPCVzPiVzKSIgJSAobmFtZSxyKSxyZS5WRVJCT1NFIHwgc2VsZi5yZWZsYWdzKQorICAgICAgICAgICAgICAgICAgICBpZiAoYy5tYXRjaCgiIikpOgorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJSZWd1bGFyIGV4cHJlc3Npb24gZm9yIHJ1bGUgJyVzJyBtYXRjaGVzIGVtcHR5IHN0cmluZyIsbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgIGV4Y2VwdCByZS5lcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgX2V0eXBlLCBlLCBfZXRyYWNlID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uIGZvciBydWxlICclcycuICVzIixuYW1lLGUpCisgICAgICAgICAgICAgICAgICAgIGlmICcjJyBpbiByOgorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJNYWtlIHN1cmUgJyMnIGluIHJ1bGUgJyVzJyBpcyBlc2NhcGVkIHdpdGggJ1xcIyciLG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmZ1bmNzeW1bc3RhdGVdIGFuZCBub3Qgc2VsZi5zdHJzeW1bc3RhdGVdOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJObyBydWxlcyBkZWZpbmVkIGZvciBzdGF0ZSAnJXMnIixzdGF0ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorCisgICAgICAgICAgICAjIFZhbGlkYXRlIHRoZSBlcnJvciBmdW5jdGlvbgorICAgICAgICAgICAgZWZ1bmMgPSBzZWxmLmVycm9yZi5nZXQoc3RhdGUsTm9uZSkKKyAgICAgICAgICAgIGlmIGVmdW5jOgorICAgICAgICAgICAgICAgIGYgPSBlZnVuYworICAgICAgICAgICAgICAgIGxpbmUgPSBmdW5jX2NvZGUoZikuY29fZmlyc3RsaW5lbm8KKyAgICAgICAgICAgICAgICBmaWxlID0gZnVuY19jb2RlKGYpLmNvX2ZpbGVuYW1lCisgICAgICAgICAgICAgICAgc2VsZi5maWxlc1tmaWxlXSA9IDEKKworICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZiwgdHlwZXMuTWV0aG9kVHlwZSk6CisgICAgICAgICAgICAgICAgICAgIHJlcWFyZ3MgPSAyCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVxYXJncyA9IDEKKyAgICAgICAgICAgICAgICBuYXJncyA9IGZ1bmNfY29kZShmKS5jb19hcmdjb3VudAorICAgICAgICAgICAgICAgIGlmIG5hcmdzID4gcmVxYXJnczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiVzOiVkOiBSdWxlICclcycgaGFzIHRvbyBtYW55IGFyZ3VtZW50cyIsZmlsZSxsaW5lLGYuX19uYW1lX18pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisKKyAgICAgICAgICAgICAgICBpZiBuYXJncyA8IHJlcWFyZ3M6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlczolZDogUnVsZSAnJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50IiwgZmlsZSxsaW5lLGYuX19uYW1lX18pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisKKyAgICAgICAgZm9yIGYgaW4gc2VsZi5maWxlczoKKyAgICAgICAgICAgIHNlbGYudmFsaWRhdGVfZmlsZShmKQorCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyB2YWxpZGF0ZV9maWxlKCkKKyAgICAjCisgICAgIyBUaGlzIGNoZWNrcyB0byBzZWUgaWYgdGhlcmUgYXJlIGR1cGxpY2F0ZWQgdF9ydWxlbmFtZSgpIGZ1bmN0aW9ucyBvciBzdHJpbmdzCisgICAgIyBpbiB0aGUgcGFyc2VyIGlucHV0IGZpbGUuICBUaGlzIGlzIGRvbmUgdXNpbmcgYSBzaW1wbGUgcmVndWxhciBleHByZXNzaW9uCisgICAgIyBtYXRjaCBvbiBlYWNoIGxpbmUgaW4gdGhlIGdpdmVuIGZpbGUuICAKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgdmFsaWRhdGVfZmlsZShzZWxmLGZpbGVuYW1lKToKKyAgICAgICAgaW1wb3J0IG9zLnBhdGgKKyAgICAgICAgYmFzZSxleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKQorICAgICAgICBpZiBleHQgIT0gJy5weSc6IHJldHVybiAgICAgICAgICMgTm8gaWRlYSB3aGF0IHRoZSBmaWxlIGlzLiBSZXR1cm4gT0sKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gb3BlbihmaWxlbmFtZSkKKyAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcmV0dXJuICAgICAgICAgICAgICAgICAgICAgICMgQ291bGRuJ3QgZmluZCB0aGUgZmlsZS4gIERvbid0IHdvcnJ5IGFib3V0IGl0CisKKyAgICAgICAgZnJlID0gcmUuY29tcGlsZShyJ1xzKmRlZlxzKyh0X1thLXpBLVpfMC05XSopXCgnKQorICAgICAgICBzcmUgPSByZS5jb21waWxlKHInXHMqKHRfW2EtekEtWl8wLTldKilccyo9JykKKworICAgICAgICBjb3VudGhhc2ggPSB7IH0KKyAgICAgICAgbGluZW4gPSAxCisgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgbSA9IGZyZS5tYXRjaChsKQorICAgICAgICAgICAgaWYgbm90IG06CisgICAgICAgICAgICAgICAgbSA9IHNyZS5tYXRjaChsKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBuYW1lID0gbS5ncm91cCgxKQorICAgICAgICAgICAgICAgIHByZXYgPSBjb3VudGhhc2guZ2V0KG5hbWUpCisgICAgICAgICAgICAgICAgaWYgbm90IHByZXY6CisgICAgICAgICAgICAgICAgICAgIGNvdW50aGFzaFtuYW1lXSA9IGxpbmVuCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiVzOiVkOiBSdWxlICVzIHJlZGVmaW5lZC4gUHJldmlvdXNseSBkZWZpbmVkIG9uIGxpbmUgJWQiLGZpbGVuYW1lLGxpbmVuLG5hbWUscHJldikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgIGxpbmVuICs9IDEKKyAgICAgICAgICAgIAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBsZXgobW9kdWxlKQorIworIyBCdWlsZCBhbGwgb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBydWxlcyBmcm9tIGRlZmluaXRpb25zIGluIHRoZSBzdXBwbGllZCBtb2R1bGUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RlZiBsZXgobW9kdWxlPU5vbmUsb2JqZWN0PU5vbmUsZGVidWc9MCxvcHRpbWl6ZT0wLGxleHRhYj0ibGV4dGFiIixyZWZsYWdzPTAsbm93YXJuPTAsb3V0cHV0ZGlyPSIiLCBkZWJ1Z2xvZz1Ob25lLCBlcnJvcmxvZz1Ob25lKToKKyAgICBnbG9iYWwgbGV4ZXIKKyAgICBsZGljdCA9IE5vbmUKKyAgICBzdGF0ZWluZm8gID0geyAnSU5JVElBTCcgOiAnaW5jbHVzaXZlJ30KKyAgICBsZXhvYmogPSBMZXhlcigpCisgICAgbGV4b2JqLmxleG9wdGltaXplID0gb3B0aW1pemUKKyAgICBnbG9iYWwgdG9rZW4saW5wdXQKKworICAgIGlmIGVycm9ybG9nIGlzIE5vbmU6CisgICAgICAgIGVycm9ybG9nID0gUGx5TG9nZ2VyKHN5cy5zdGRlcnIpCisKKyAgICBpZiBkZWJ1ZzoKKyAgICAgICAgaWYgZGVidWdsb2cgaXMgTm9uZToKKyAgICAgICAgICAgIGRlYnVnbG9nID0gUGx5TG9nZ2VyKHN5cy5zdGRlcnIpCisKKyAgICAjIEdldCB0aGUgbW9kdWxlIGRpY3Rpb25hcnkgdXNlZCBmb3IgdGhlIGxleGVyCisgICAgaWYgb2JqZWN0OiBtb2R1bGUgPSBvYmplY3QKKworICAgIGlmIG1vZHVsZToKKyAgICAgICAgX2l0ZW1zID0gWyhrLGdldGF0dHIobW9kdWxlLGspKSBmb3IgayBpbiBkaXIobW9kdWxlKV0KKyAgICAgICAgbGRpY3QgPSBkaWN0KF9pdGVtcykKKyAgICBlbHNlOgorICAgICAgICBsZGljdCA9IGdldF9jYWxsZXJfbW9kdWxlX2RpY3QoMikKKworICAgICMgQ29sbGVjdCBwYXJzZXIgaW5mb3JtYXRpb24gZnJvbSB0aGUgZGljdGlvbmFyeQorICAgIGxpbmZvID0gTGV4ZXJSZWZsZWN0KGxkaWN0LGxvZz1lcnJvcmxvZyxyZWZsYWdzPXJlZmxhZ3MpCisgICAgbGluZm8uZ2V0X2FsbCgpCisgICAgaWYgbm90IG9wdGltaXplOgorICAgICAgICBpZiBsaW5mby52YWxpZGF0ZV9hbGwoKToKKyAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJDYW4ndCBidWlsZCBsZXhlciIpCisKKyAgICBpZiBvcHRpbWl6ZSBhbmQgbGV4dGFiOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBsZXhvYmoucmVhZHRhYihsZXh0YWIsbGRpY3QpCisgICAgICAgICAgICB0b2tlbiA9IGxleG9iai50b2tlbgorICAgICAgICAgICAgaW5wdXQgPSBsZXhvYmouaW5wdXQKKyAgICAgICAgICAgIGxleGVyID0gbGV4b2JqCisgICAgICAgICAgICByZXR1cm4gbGV4b2JqCisKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgIyBEdW1wIHNvbWUgYmFzaWMgZGVidWdnaW5nIGluZm9ybWF0aW9uCisgICAgaWYgZGVidWc6CisgICAgICAgIGRlYnVnbG9nLmluZm8oImxleDogdG9rZW5zICAgPSAlciIsIGxpbmZvLnRva2VucykKKyAgICAgICAgZGVidWdsb2cuaW5mbygibGV4OiBsaXRlcmFscyA9ICVyIiwgbGluZm8ubGl0ZXJhbHMpCisgICAgICAgIGRlYnVnbG9nLmluZm8oImxleDogc3RhdGVzICAgPSAlciIsIGxpbmZvLnN0YXRlaW5mbykKKworICAgICMgQnVpbGQgYSBkaWN0aW9uYXJ5IG9mIHZhbGlkIHRva2VuIG5hbWVzCisgICAgbGV4b2JqLmxleHRva2VucyA9IHsgfQorICAgIGZvciBuIGluIGxpbmZvLnRva2VuczoKKyAgICAgICAgbGV4b2JqLmxleHRva2Vuc1tuXSA9IDEKKworICAgICMgR2V0IGxpdGVyYWxzIHNwZWNpZmljYXRpb24KKyAgICBpZiBpc2luc3RhbmNlKGxpbmZvLmxpdGVyYWxzLChsaXN0LHR1cGxlKSk6CisgICAgICAgIGxleG9iai5sZXhsaXRlcmFscyA9IHR5cGUobGluZm8ubGl0ZXJhbHNbMF0pKCkuam9pbihsaW5mby5saXRlcmFscykKKyAgICBlbHNlOgorICAgICAgICBsZXhvYmoubGV4bGl0ZXJhbHMgPSBsaW5mby5saXRlcmFscworCisgICAgIyBHZXQgdGhlIHN0YXRlaW5mbyBkaWN0aW9uYXJ5CisgICAgc3RhdGVpbmZvID0gbGluZm8uc3RhdGVpbmZvCisKKyAgICByZWdleHMgPSB7IH0KKyAgICAjIEJ1aWxkIHRoZSBtYXN0ZXIgcmVndWxhciBleHByZXNzaW9ucworICAgIGZvciBzdGF0ZSBpbiBzdGF0ZWluZm86CisgICAgICAgIHJlZ2V4X2xpc3QgPSBbXQorCisgICAgICAgICMgQWRkIHJ1bGVzIGRlZmluZWQgYnkgZnVuY3Rpb25zIGZpcnN0CisgICAgICAgIGZvciBmbmFtZSwgZiBpbiBsaW5mby5mdW5jc3ltW3N0YXRlXToKKyAgICAgICAgICAgIGxpbmUgPSBmdW5jX2NvZGUoZikuY29fZmlyc3RsaW5lbm8KKyAgICAgICAgICAgIGZpbGUgPSBmdW5jX2NvZGUoZikuY29fZmlsZW5hbWUKKyAgICAgICAgICAgIHJlZ2V4X2xpc3QuYXBwZW5kKCIoP1A8JXM+JXMpIiAlIChmbmFtZSxmLl9fZG9jX18pKQorICAgICAgICAgICAgaWYgZGVidWc6CisgICAgICAgICAgICAgICAgZGVidWdsb2cuaW5mbygibGV4OiBBZGRpbmcgcnVsZSAlcyAtPiAnJXMnIChzdGF0ZSAnJXMnKSIsZm5hbWUsZi5fX2RvY19fLCBzdGF0ZSkKKworICAgICAgICAjIE5vdyBhZGQgYWxsIG9mIHRoZSBzaW1wbGUgcnVsZXMKKyAgICAgICAgZm9yIG5hbWUsciBpbiBsaW5mby5zdHJzeW1bc3RhdGVdOgorICAgICAgICAgICAgcmVnZXhfbGlzdC5hcHBlbmQoIig/UDwlcz4lcykiICUgKG5hbWUscikpCisgICAgICAgICAgICBpZiBkZWJ1ZzoKKyAgICAgICAgICAgICAgICBkZWJ1Z2xvZy5pbmZvKCJsZXg6IEFkZGluZyBydWxlICVzIC0+ICclcycgKHN0YXRlICclcycpIixuYW1lLHIsIHN0YXRlKQorCisgICAgICAgIHJlZ2V4c1tzdGF0ZV0gPSByZWdleF9saXN0CisKKyAgICAjIEJ1aWxkIHRoZSBtYXN0ZXIgcmVndWxhciBleHByZXNzaW9ucworCisgICAgaWYgZGVidWc6CisgICAgICAgIGRlYnVnbG9nLmluZm8oImxleDogPT09PSBNQVNURVIgUkVHRVhTIEZPTExPVyA9PT09IikKKworICAgIGZvciBzdGF0ZSBpbiByZWdleHM6CisgICAgICAgIGxleHJlLCByZV90ZXh0LCByZV9uYW1lcyA9IF9mb3JtX21hc3Rlcl9yZShyZWdleHNbc3RhdGVdLHJlZmxhZ3MsbGRpY3QsbGluZm8udG9rbmFtZXMpCisgICAgICAgIGxleG9iai5sZXhzdGF0ZXJlW3N0YXRlXSA9IGxleHJlCisgICAgICAgIGxleG9iai5sZXhzdGF0ZXJldGV4dFtzdGF0ZV0gPSByZV90ZXh0CisgICAgICAgIGxleG9iai5sZXhzdGF0ZXJlbmFtZXNbc3RhdGVdID0gcmVfbmFtZXMKKyAgICAgICAgaWYgZGVidWc6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocmVfdGV4dCkpOgorICAgICAgICAgICAgICAgIGRlYnVnbG9nLmluZm8oImxleDogc3RhdGUgJyVzJyA6IHJlZ2V4WyVkXSA9ICclcyciLHN0YXRlLCBpLCByZV90ZXh0W2ldKQorCisgICAgIyBGb3IgaW5jbHVzaXZlIHN0YXRlcywgd2UgbmVlZCB0byBhZGQgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgZnJvbSB0aGUgSU5JVElBTCBzdGF0ZQorICAgIGZvciBzdGF0ZSxzdHlwZSBpbiBzdGF0ZWluZm8uaXRlbXMoKToKKyAgICAgICAgaWYgc3RhdGUgIT0gIklOSVRJQUwiIGFuZCBzdHlwZSA9PSAnaW5jbHVzaXZlJzoKKyAgICAgICAgICAgICBsZXhvYmoubGV4c3RhdGVyZVtzdGF0ZV0uZXh0ZW5kKGxleG9iai5sZXhzdGF0ZXJlWydJTklUSUFMJ10pCisgICAgICAgICAgICAgbGV4b2JqLmxleHN0YXRlcmV0ZXh0W3N0YXRlXS5leHRlbmQobGV4b2JqLmxleHN0YXRlcmV0ZXh0WydJTklUSUFMJ10pCisgICAgICAgICAgICAgbGV4b2JqLmxleHN0YXRlcmVuYW1lc1tzdGF0ZV0uZXh0ZW5kKGxleG9iai5sZXhzdGF0ZXJlbmFtZXNbJ0lOSVRJQUwnXSkKKworICAgIGxleG9iai5sZXhzdGF0ZWluZm8gPSBzdGF0ZWluZm8KKyAgICBsZXhvYmoubGV4cmUgPSBsZXhvYmoubGV4c3RhdGVyZVsiSU5JVElBTCJdCisgICAgbGV4b2JqLmxleHJldGV4dCA9IGxleG9iai5sZXhzdGF0ZXJldGV4dFsiSU5JVElBTCJdCisgICAgbGV4b2JqLmxleHJlZmxhZ3MgPSByZWZsYWdzCisKKyAgICAjIFNldCB1cCBpZ25vcmUgdmFyaWFibGVzCisgICAgbGV4b2JqLmxleHN0YXRlaWdub3JlID0gbGluZm8uaWdub3JlCisgICAgbGV4b2JqLmxleGlnbm9yZSA9IGxleG9iai5sZXhzdGF0ZWlnbm9yZS5nZXQoIklOSVRJQUwiLCIiKQorCisgICAgIyBTZXQgdXAgZXJyb3IgZnVuY3Rpb25zCisgICAgbGV4b2JqLmxleHN0YXRlZXJyb3JmID0gbGluZm8uZXJyb3JmCisgICAgbGV4b2JqLmxleGVycm9yZiA9IGxpbmZvLmVycm9yZi5nZXQoIklOSVRJQUwiLE5vbmUpCisgICAgaWYgbm90IGxleG9iai5sZXhlcnJvcmY6CisgICAgICAgIGVycm9ybG9nLndhcm5pbmcoIk5vIHRfZXJyb3IgcnVsZSBpcyBkZWZpbmVkIikKKworICAgICMgQ2hlY2sgc3RhdGUgaW5mb3JtYXRpb24gZm9yIGlnbm9yZSBhbmQgZXJyb3IgcnVsZXMKKyAgICBmb3IgcyxzdHlwZSBpbiBzdGF0ZWluZm8uaXRlbXMoKToKKyAgICAgICAgaWYgc3R5cGUgPT0gJ2V4Y2x1c2l2ZSc6CisgICAgICAgICAgICAgIGlmIG5vdCBzIGluIGxpbmZvLmVycm9yZjoKKyAgICAgICAgICAgICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCJObyBlcnJvciBydWxlIGlzIGRlZmluZWQgZm9yIGV4Y2x1c2l2ZSBzdGF0ZSAnJXMnIiwgcykKKyAgICAgICAgICAgICAgaWYgbm90IHMgaW4gbGluZm8uaWdub3JlIGFuZCBsZXhvYmoubGV4aWdub3JlOgorICAgICAgICAgICAgICAgICAgIGVycm9ybG9nLndhcm5pbmcoIk5vIGlnbm9yZSBydWxlIGlzIGRlZmluZWQgZm9yIGV4Y2x1c2l2ZSBzdGF0ZSAnJXMnIiwgcykKKyAgICAgICAgZWxpZiBzdHlwZSA9PSAnaW5jbHVzaXZlJzoKKyAgICAgICAgICAgICAgaWYgbm90IHMgaW4gbGluZm8uZXJyb3JmOgorICAgICAgICAgICAgICAgICAgIGxpbmZvLmVycm9yZltzXSA9IGxpbmZvLmVycm9yZi5nZXQoIklOSVRJQUwiLE5vbmUpCisgICAgICAgICAgICAgIGlmIG5vdCBzIGluIGxpbmZvLmlnbm9yZToKKyAgICAgICAgICAgICAgICAgICBsaW5mby5pZ25vcmVbc10gPSBsaW5mby5pZ25vcmUuZ2V0KCJJTklUSUFMIiwiIikKKworICAgICMgQ3JlYXRlIGdsb2JhbCB2ZXJzaW9ucyBvZiB0aGUgdG9rZW4oKSBhbmQgaW5wdXQoKSBmdW5jdGlvbnMKKyAgICB0b2tlbiA9IGxleG9iai50b2tlbgorICAgIGlucHV0ID0gbGV4b2JqLmlucHV0CisgICAgbGV4ZXIgPSBsZXhvYmoKKworICAgICMgSWYgaW4gb3B0aW1pemUgbW9kZSwgd2Ugd3JpdGUgdGhlIGxleHRhYgorICAgIGlmIGxleHRhYiBhbmQgb3B0aW1pemU6CisgICAgICAgIGxleG9iai53cml0ZXRhYihsZXh0YWIsb3V0cHV0ZGlyKQorCisgICAgcmV0dXJuIGxleG9iagorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHJ1bm1haW4oKQorIworIyBUaGlzIHJ1bnMgdGhlIGxleGVyIGFzIGEgbWFpbiBwcm9ncmFtCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBydW5tYWluKGxleGVyPU5vbmUsZGF0YT1Ob25lKToKKyAgICBpZiBub3QgZGF0YToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmlsZW5hbWUgPSBzeXMuYXJndlsxXQorICAgICAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUpCisgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlJlYWRpbmcgZnJvbSBzdGFuZGFyZCBpbnB1dCAodHlwZSBFT0YgdG8gZW5kKTpcbiIpCisgICAgICAgICAgICBkYXRhID0gc3lzLnN0ZGluLnJlYWQoKQorCisgICAgaWYgbGV4ZXI6CisgICAgICAgIF9pbnB1dCA9IGxleGVyLmlucHV0CisgICAgZWxzZToKKyAgICAgICAgX2lucHV0ID0gaW5wdXQKKyAgICBfaW5wdXQoZGF0YSkKKyAgICBpZiBsZXhlcjoKKyAgICAgICAgX3Rva2VuID0gbGV4ZXIudG9rZW4KKyAgICBlbHNlOgorICAgICAgICBfdG9rZW4gPSB0b2tlbgorCisgICAgd2hpbGUgMToKKyAgICAgICAgdG9rID0gX3Rva2VuKCkKKyAgICAgICAgaWYgbm90IHRvazogYnJlYWsKKyAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiKCVzLCVyLCVkLCVkKVxuIiAlICh0b2sudHlwZSwgdG9rLnZhbHVlLCB0b2subGluZW5vLHRvay5sZXhwb3MpKQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEBUT0tFTihyZWdleCkKKyMKKyMgVGhpcyBkZWNvcmF0b3IgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSByZWdleCBleHByZXNzaW9uIG9uIGEgZnVuY3Rpb24KKyMgd2hlbiBpdHMgZG9jc3RyaW5nIG1pZ2h0IG5lZWQgdG8gYmUgc2V0IGluIGFuIGFsdGVybmF0aXZlIHdheQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgVE9LRU4ocik6CisgICAgZGVmIHNldF9kb2MoZik6CisgICAgICAgIGlmIGhhc2F0dHIociwiX19jYWxsX18iKToKKyAgICAgICAgICAgIGYuX19kb2NfXyA9IHIuX19kb2NfXworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZi5fX2RvY19fID0gcgorICAgICAgICByZXR1cm4gZgorICAgIHJldHVybiBzZXRfZG9jCisKKyMgQWx0ZXJuYXRpdmUgc3BlbGxpbmcgb2YgdGhlIFRPS0VOIGRlY29yYXRvcgorVG9rZW4gPSBUT0tFTgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3BseS95YWNjLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wbHkveWFjYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTY4ZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wbHkveWFjYy5weQpAQCAtMCwwICsxLDMyNzYgQEAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgcGx5OiB5YWNjLnB5CisjCisjIENvcHlyaWdodCAoQykgMjAwMS0yMDA5LAorIyBEYXZpZCBNLiBCZWF6bGV5IChEYWJlYXogTExDKQorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjIAorIyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyMgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAgCisjICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyMgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisjICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uICAKKyMgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBEYXZpZCBCZWF6bGV5IG9yIERhYmVheiBMTEMgbWF5IGJlIHVzZWQgdG8KKyMgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorIyAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBUaGlzIGltcGxlbWVudHMgYW4gTFIgcGFyc2VyIHRoYXQgaXMgY29uc3RydWN0ZWQgZnJvbSBncmFtbWFyIHJ1bGVzIGRlZmluZWQKKyMgYXMgUHl0aG9uIGZ1bmN0aW9ucy4gVGhlIGdyYW1tZXIgaXMgc3BlY2lmaWVkIGJ5IHN1cHBseWluZyB0aGUgQk5GIGluc2lkZQorIyBQeXRob24gZG9jdW1lbnRhdGlvbiBzdHJpbmdzLiAgVGhlIGluc3BpcmF0aW9uIGZvciB0aGlzIHRlY2huaXF1ZSB3YXMgYm9ycm93ZWQKKyMgZnJvbSBKb2huIEF5Y29jaydzIFNwYXJrIHBhcnNpbmcgc3lzdGVtLiAgUExZIG1pZ2h0IGJlIHZpZXdlZCBhcyBjcm9zcyBiZXR3ZWVuCisjIFNwYXJrIGFuZCB0aGUgR05VIGJpc29uIHV0aWxpdHkuCisjCisjIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGlzIG9ubHkgc29tZXdoYXQgb2JqZWN0LW9yaWVudGVkLiBUaGUKKyMgTFIgcGFyc2VyIGl0c2VsZiBpcyBkZWZpbmVkIGluIHRlcm1zIG9mIGFuIG9iamVjdCAod2hpY2ggYWxsb3dzIG11bHRpcGxlCisjIHBhcnNlcnMgdG8gY28tZXhpc3QpLiAgSG93ZXZlciwgbW9zdCBvZiB0aGUgdmFyaWFibGVzIHVzZWQgZHVyaW5nIHRhYmxlCisjIGNvbnN0cnVjdGlvbiBhcmUgZGVmaW5lZCBpbiB0ZXJtcyBvZiBnbG9iYWwgdmFyaWFibGVzLiAgVXNlcnMgc2hvdWxkbid0CisjIG5vdGljZSB1bmxlc3MgdGhleSBhcmUgdHJ5aW5nIHRvIGRlZmluZSBtdWx0aXBsZSBwYXJzZXJzIGF0IHRoZSBzYW1lCisjIHRpbWUgdXNpbmcgdGhyZWFkcyAoaW4gd2hpY2ggY2FzZSB0aGV5IHNob3VsZCBoYXZlIHRoZWlyIGhlYWQgZXhhbWluZWQpLgorIworIyBUaGlzIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIGJvdGggU0xSIGFuZCBMQUxSKDEpIHBhcnNpbmcuICBMQUxSKDEpCisjIHN1cHBvcnQgd2FzIG9yaWdpbmFsbHkgaW1wbGVtZW50ZWQgYnkgRWxpYXMgSW91cCAoZXppb3VwQGFsdW1uaS51Y2hpY2Fnby5lZHUpLAorIyB1c2luZyB0aGUgYWxnb3JpdGhtIGZvdW5kIGluIEFobywgU2V0aGksIGFuZCBVbGxtYW4gIkNvbXBpbGVyczogUHJpbmNpcGxlcywKKyMgVGVjaG5pcXVlcywgYW5kIFRvb2xzIiAoVGhlIERyYWdvbiBCb29rKS4gIExBTFIoMSkgaGFzIHNpbmNlIGJlZW4gcmVwbGFjZWQKKyMgYnkgdGhlIG1vcmUgZWZmaWNpZW50IERlUmVtZXIgYW5kIFBlbm5lbGxvIGFsZ29yaXRobS4KKyMKKyMgOjo6Ojo6OjogV0FSTklORyA6Ojo6Ojo6CisjCisjIENvbnN0cnVjdGlvbiBvZiBMUiBwYXJzaW5nIHRhYmxlcyBpcyBmYWlybHkgY29tcGxpY2F0ZWQgYW5kIGV4cGVuc2l2ZS4KKyMgVG8gbWFrZSB0aGlzIG1vZHVsZSBydW4gZmFzdCwgYSAqTE9UKiBvZiB3b3JrIGhhcyBiZWVuIHB1dCBpbnRvCisjIG9wdGltaXphdGlvbi0tLW9mdGVuIGF0IHRoZSBleHBlbnNpdmUgb2YgcmVhZGFiaWxpdHkgYW5kIHdoYXQgbWlnaHQKKyMgY29uc2lkZXIgdG8gYmUgZ29vZCBQeXRob24gImNvZGluZyBzdHlsZS4iICAgTW9kaWZ5IHRoZSBjb2RlIGF0IHlvdXIKKyMgb3duIHJpc2shCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworX192ZXJzaW9uX18gICAgPSAiMy4zIgorX190YWJ2ZXJzaW9uX18gPSAiMy4yIiAgICAgICAjIFRhYmxlIHZlcnNpb24KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgICAgICAgICAgICAgICAgICAgPT09IFVzZXIgY29uZmlndXJhYmxlIHBhcmFtZXRlcnMgPT09CisjCisjIENoYW5nZSB0aGVzZSB0byBtb2RpZnkgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgeWFjYyAoaWYgeW91IHdpc2gpCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworeWFjY2RlYnVnICAgPSAwICAgICAgICAgICAgICAgICMgRGVidWdnaW5nIG1vZGUuICBJZiBzZXQsIHlhY2MgZ2VuZXJhdGVzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGEgJ3BhcnNlci5vdXQnIGZpbGUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5CisKK2RlYnVnX2ZpbGUgID0gJ3BhcnNlci5vdXQnICAgICAjIERlZmF1bHQgbmFtZSBvZiB0aGUgZGVidWdnaW5nIGZpbGUKK3RhYl9tb2R1bGUgID0gJ3BhcnNldGFiJyAgICAgICAjIERlZmF1bHQgbmFtZSBvZiB0aGUgdGFibGUgbW9kdWxlCitkZWZhdWx0X2xyICA9ICdMQUxSJyAgICAgICAgICAgIyBEZWZhdWx0IExSIHRhYmxlIGdlbmVyYXRpb24gbWV0aG9kCisKK2Vycm9yX2NvdW50ID0gMyAgICAgICAgICAgICAgICAjIE51bWJlciBvZiBzeW1ib2xzIHRoYXQgbXVzdCBiZSBzaGlmdGVkIHRvIGxlYXZlIHJlY292ZXJ5IG1vZGUKKworeWFjY2RldmVsICAgPSAwICAgICAgICAgICAgICAgICMgU2V0IHRvIFRydWUgaWYgZGV2ZWxvcGluZyB5YWNjLiAgVGhpcyB0dXJucyBvZmYgb3B0aW1pemVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbXBsZW1lbnRhdGlvbnMgb2YgY2VydGFpbiBmdW5jdGlvbnMuCisKK3Jlc3VsdGxpbWl0ID0gNDAgICAgICAgICAgICAgICAjIFNpemUgbGltaXQgb2YgcmVzdWx0cyB3aGVuIHJ1bm5pbmcgaW4gZGVidWcgbW9kZS4KKworcGlja2xlX3Byb3RvY29sID0gMCAgICAgICAgICAgICMgUHJvdG9jb2wgdG8gdXNlIHdoZW4gd3JpdGluZyBwaWNrbGUgZmlsZXMKKworaW1wb3J0IHJlLCB0eXBlcywgc3lzLCBvcy5wYXRoCisKKyMgQ29tcGF0aWJpbGl0eSBmdW5jdGlvbiBmb3IgcHl0aG9uIDIuNi8zLjAKK2lmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzOgorICAgIGRlZiBmdW5jX2NvZGUoZik6CisgICAgICAgIHJldHVybiBmLmZ1bmNfY29kZQorZWxzZToKKyAgICBkZWYgZnVuY19jb2RlKGYpOgorICAgICAgICByZXR1cm4gZi5fX2NvZGVfXworCisjIENvbXBhdGliaWxpdHkKK3RyeToKKyAgICBNQVhJTlQgPSBzeXMubWF4aW50CitleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgTUFYSU5UID0gc3lzLm1heHNpemUKKworIyBQeXRob24gMi54LzMuMCBjb21wYXRpYmlsaXR5LgorZGVmIGxvYWRfcGx5X2xleCgpOgorICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzOgorICAgICAgICBpbXBvcnQgbGV4CisgICAgZWxzZToKKyAgICAgICAgaW1wb3J0IHBseS5sZXggYXMgbGV4CisgICAgcmV0dXJuIGxleAorCisjIFRoaXMgb2JqZWN0IGlzIGEgc3RhbmQtaW4gZm9yIGEgbG9nZ2luZyBvYmplY3QgY3JlYXRlZCBieSB0aGUgCisjIGxvZ2dpbmcgbW9kdWxlLiAgIFBMWSB3aWxsIHVzZSB0aGlzIGJ5IGRlZmF1bHQgdG8gY3JlYXRlIHRoaW5ncworIyBzdWNoIGFzIHRoZSBwYXJzZXIub3V0IGZpbGUuICBJZiBhIHVzZXIgd2FudHMgbW9yZSBkZXRhaWxlZAorIyBpbmZvcm1hdGlvbiwgdGhleSBjYW4gY3JlYXRlIHRoZWlyIG93biBsb2dnaW5nIG9iamVjdCBhbmQgcGFzcworIyBpdCBpbnRvIFBMWS4KKworY2xhc3MgUGx5TG9nZ2VyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsZik6CisgICAgICAgIHNlbGYuZiA9IGYKKyAgICBkZWYgZGVidWcoc2VsZixtc2csKmFyZ3MsKiprd2FyZ3MpOgorICAgICAgICBzZWxmLmYud3JpdGUoKG1zZyAlIGFyZ3MpICsgIlxuIikKKyAgICBpbmZvICAgICA9IGRlYnVnCisKKyAgICBkZWYgd2FybmluZyhzZWxmLG1zZywqYXJncywqKmt3YXJncyk6CisgICAgICAgIHNlbGYuZi53cml0ZSgiV0FSTklORzogIisgKG1zZyAlIGFyZ3MpICsgIlxuIikKKworICAgIGRlZiBlcnJvcihzZWxmLG1zZywqYXJncywqKmt3YXJncyk6CisgICAgICAgIHNlbGYuZi53cml0ZSgiRVJST1I6ICIgKyAobXNnICUgYXJncykgKyAiXG4iKQorCisgICAgY3JpdGljYWwgPSBkZWJ1ZworCisjIE51bGwgbG9nZ2VyIGlzIHVzZWQgd2hlbiBubyBvdXRwdXQgaXMgZ2VuZXJhdGVkLiBEb2VzIG5vdGhpbmcuCitjbGFzcyBOdWxsTG9nZ2VyKG9iamVjdCk6CisgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oc2VsZixuYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKyAgICBkZWYgX19jYWxsX18oc2VsZiwqYXJncywqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgIAorIyBFeGNlcHRpb24gcmFpc2VkIGZvciB5YWNjLXJlbGF0ZWQgZXJyb3JzCitjbGFzcyBZYWNjRXJyb3IoRXhjZXB0aW9uKTogICBwYXNzCisKKyMgRm9ybWF0IHRoZSByZXN1bHQgbWVzc2FnZSB0aGF0IHRoZSBwYXJzZXIgcHJvZHVjZXMgd2hlbiBydW5uaW5nIGluIGRlYnVnIG1vZGUuCitkZWYgZm9ybWF0X3Jlc3VsdChyKToKKyAgICByZXByX3N0ciA9IHJlcHIocikKKyAgICBpZiAnXG4nIGluIHJlcHJfc3RyOiByZXByX3N0ciA9IHJlcHIocmVwcl9zdHIpCisgICAgaWYgbGVuKHJlcHJfc3RyKSA+IHJlc3VsdGxpbWl0OgorICAgICAgICByZXByX3N0ciA9IHJlcHJfc3RyWzpyZXN1bHRsaW1pdF0rIiAuLi4iCisgICAgcmVzdWx0ID0gIjwlcyBAIDB4JXg+ICglcykiICUgKHR5cGUocikuX19uYW1lX18saWQocikscmVwcl9zdHIpCisgICAgcmV0dXJuIHJlc3VsdAorCisKKyMgRm9ybWF0IHN0YWNrIGVudHJpZXMgd2hlbiB0aGUgcGFyc2VyIGlzIHJ1bm5pbmcgaW4gZGVidWcgbW9kZQorZGVmIGZvcm1hdF9zdGFja19lbnRyeShyKToKKyAgICByZXByX3N0ciA9IHJlcHIocikKKyAgICBpZiAnXG4nIGluIHJlcHJfc3RyOiByZXByX3N0ciA9IHJlcHIocmVwcl9zdHIpCisgICAgaWYgbGVuKHJlcHJfc3RyKSA8IDE2OgorICAgICAgICByZXR1cm4gcmVwcl9zdHIKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gIjwlcyBAIDB4JXg+IiAlICh0eXBlKHIpLl9fbmFtZV9fLGlkKHIpKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgICAgICAgICAgICAgICAgICAgICA9PT0gIExSIFBhcnNpbmcgRW5naW5lID09PQorIworIyBUaGUgZm9sbG93aW5nIGNsYXNzZXMgYXJlIHVzZWQgZm9yIHRoZSBMUiBwYXJzZXIgaXRzZWxmLiAgVGhlc2UgYXJlIG5vdAorIyB1c2VkIGR1cmluZyB0YWJsZSBjb25zdHJ1Y3Rpb24gYW5kIGFyZSBpbmRlcGVuZGVudCBvZiB0aGUgYWN0dWFsIExSCisjIHRhYmxlIGdlbmVyYXRpb24gYWxnb3JpdGhtCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gaG9sZCBub24tdGVybWluYWwgZ3JhbW1hciBzeW1ib2xzIGR1cmluZyBwYXJzaW5nLgorIyBJdCBub3JtYWxseSBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIHNldDoKKyMgICAgICAgIC50eXBlICAgICAgID0gR3JhbW1hciBzeW1ib2wgdHlwZQorIyAgICAgICAgLnZhbHVlICAgICAgPSBTeW1ib2wgdmFsdWUKKyMgICAgICAgIC5saW5lbm8gICAgID0gU3RhcnRpbmcgbGluZSBudW1iZXIKKyMgICAgICAgIC5lbmRsaW5lbm8gID0gRW5kaW5nIGxpbmUgbnVtYmVyIChvcHRpb25hbCwgc2V0IGF1dG9tYXRpY2FsbHkpCisjICAgICAgICAubGV4cG9zICAgICA9IFN0YXJ0aW5nIGxleCBwb3NpdGlvbgorIyAgICAgICAgLmVuZGxleHBvcyAgPSBFbmRpbmcgbGV4IHBvc2l0aW9uIChvcHRpb25hbCwgc2V0IGF1dG9tYXRpY2FsbHkpCisKK2NsYXNzIFlhY2NTeW1ib2w6CisgICAgZGVmIF9fc3RyX18oc2VsZik6ICAgIHJldHVybiBzZWxmLnR5cGUKKyAgICBkZWYgX19yZXByX18oc2VsZik6ICAgcmV0dXJuIHN0cihzZWxmKQorCisjIFRoaXMgY2xhc3MgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgb2JqZWN0cyBhY3R1YWxseSBwYXNzZWQgdG8gZWFjaAorIyBncmFtbWFyIHJ1bGUuICAgSW5kZXggbG9va3VwIGFuZCBhc3NpZ25tZW50IGFjdHVhbGx5IGFzc2lnbiB0aGUKKyMgLnZhbHVlIGF0dHJpYnV0ZSBvZiB0aGUgdW5kZXJseWluZyBZYWNjU3ltYm9sIG9iamVjdC4KKyMgVGhlIGxpbmVubygpIG1ldGhvZCByZXR1cm5zIHRoZSBsaW5lIG51bWJlciBvZiBhIGdpdmVuCisjIGl0ZW0gKG9yIDAgaWYgbm90IGRlZmluZWQpLiAgIFRoZSBsaW5lc3BhbigpIG1ldGhvZCByZXR1cm5zCisjIGEgdHVwbGUgb2YgKHN0YXJ0bGluZSxlbmRsaW5lKSByZXByZXNlbnRpbmcgdGhlIHJhbmdlIG9mIGxpbmVzCisjIGZvciBhIHN5bWJvbC4gIFRoZSBsZXhzcGFuKCkgbWV0aG9kIHJldHVybnMgYSB0dXBsZSAobGV4cG9zLGVuZGxleHBvcykKKyMgcmVwcmVzZW50aW5nIHRoZSByYW5nZSBvZiBwb3NpdGlvbmFsIGluZm9ybWF0aW9uIGZvciBhIHN5bWJvbC4KKworY2xhc3MgWWFjY1Byb2R1Y3Rpb246CisgICAgZGVmIF9faW5pdF9fKHNlbGYscyxzdGFjaz1Ob25lKToKKyAgICAgICAgc2VsZi5zbGljZSA9IHMKKyAgICAgICAgc2VsZi5zdGFjayA9IHN0YWNrCisgICAgICAgIHNlbGYubGV4ZXIgPSBOb25lCisgICAgICAgIHNlbGYucGFyc2VyPSBOb25lCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsbik6CisgICAgICAgIGlmIG4gPj0gMDogcmV0dXJuIHNlbGYuc2xpY2Vbbl0udmFsdWUKKyAgICAgICAgZWxzZTogcmV0dXJuIHNlbGYuc3RhY2tbbl0udmFsdWUKKworICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLG4sdik6CisgICAgICAgIHNlbGYuc2xpY2Vbbl0udmFsdWUgPSB2CisKKyAgICBkZWYgX19nZXRzbGljZV9fKHNlbGYsaSxqKToKKyAgICAgICAgcmV0dXJuIFtzLnZhbHVlIGZvciBzIGluIHNlbGYuc2xpY2VbaTpqXV0KKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuc2xpY2UpCisKKyAgICBkZWYgbGluZW5vKHNlbGYsbik6CisgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuc2xpY2Vbbl0sImxpbmVubyIsMCkKKworICAgIGRlZiBzZXRfbGluZW5vKHNlbGYsbixsaW5lbm8pOgorICAgICAgICBzZWxmLnNsaWNlW25dLmxpbmVubyA9IGxpbmVubworCisgICAgZGVmIGxpbmVzcGFuKHNlbGYsbik6CisgICAgICAgIHN0YXJ0bGluZSA9IGdldGF0dHIoc2VsZi5zbGljZVtuXSwibGluZW5vIiwwKQorICAgICAgICBlbmRsaW5lID0gZ2V0YXR0cihzZWxmLnNsaWNlW25dLCJlbmRsaW5lbm8iLHN0YXJ0bGluZSkKKyAgICAgICAgcmV0dXJuIHN0YXJ0bGluZSxlbmRsaW5lCisKKyAgICBkZWYgbGV4cG9zKHNlbGYsbik6CisgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuc2xpY2Vbbl0sImxleHBvcyIsMCkKKworICAgIGRlZiBsZXhzcGFuKHNlbGYsbik6CisgICAgICAgIHN0YXJ0cG9zID0gZ2V0YXR0cihzZWxmLnNsaWNlW25dLCJsZXhwb3MiLDApCisgICAgICAgIGVuZHBvcyA9IGdldGF0dHIoc2VsZi5zbGljZVtuXSwiZW5kbGV4cG9zIixzdGFydHBvcykKKyAgICAgICAgcmV0dXJuIHN0YXJ0cG9zLGVuZHBvcworCisgICAgZGVmIGVycm9yKHNlbGYpOgorICAgICAgIHJhaXNlIFN5bnRheEVycm9yCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBMUlBhcnNlciA9PQorIworIyBUaGUgTFIgUGFyc2luZyBlbmdpbmUuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIExSUGFyc2VyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLGxydGFiLGVycm9yZik6CisgICAgICAgIHNlbGYucHJvZHVjdGlvbnMgPSBscnRhYi5scl9wcm9kdWN0aW9ucworICAgICAgICBzZWxmLmFjdGlvbiAgICAgID0gbHJ0YWIubHJfYWN0aW9uCisgICAgICAgIHNlbGYuZ290byAgICAgICAgPSBscnRhYi5scl9nb3RvCisgICAgICAgIHNlbGYuZXJyb3JmdW5jICAgPSBlcnJvcmYKKworICAgIGRlZiBlcnJvayhzZWxmKToKKyAgICAgICAgc2VsZi5lcnJvcm9rICAgICA9IDEKKworICAgIGRlZiByZXN0YXJ0KHNlbGYpOgorICAgICAgICBkZWwgc2VsZi5zdGF0ZXN0YWNrWzpdCisgICAgICAgIGRlbCBzZWxmLnN5bXN0YWNrWzpdCisgICAgICAgIHN5bSA9IFlhY2NTeW1ib2woKQorICAgICAgICBzeW0udHlwZSA9ICckZW5kJworICAgICAgICBzZWxmLnN5bXN0YWNrLmFwcGVuZChzeW0pCisgICAgICAgIHNlbGYuc3RhdGVzdGFjay5hcHBlbmQoMCkKKworICAgIGRlZiBwYXJzZShzZWxmLGlucHV0PU5vbmUsbGV4ZXI9Tm9uZSxkZWJ1Zz0wLHRyYWNraW5nPTAsdG9rZW5mdW5jPU5vbmUpOgorICAgICAgICBpZiBkZWJ1ZyBvciB5YWNjZGV2ZWw6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRlYnVnLGludCk6CisgICAgICAgICAgICAgICAgZGVidWcgPSBQbHlMb2dnZXIoc3lzLnN0ZGVycikKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcnNlZGVidWcoaW5wdXQsbGV4ZXIsZGVidWcsdHJhY2tpbmcsdG9rZW5mdW5jKQorICAgICAgICBlbGlmIHRyYWNraW5nOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFyc2VvcHQoaW5wdXQsbGV4ZXIsZGVidWcsdHJhY2tpbmcsdG9rZW5mdW5jKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFyc2VvcHRfbm90cmFjayhpbnB1dCxsZXhlcixkZWJ1Zyx0cmFja2luZyx0b2tlbmZ1bmMpCisgICAgICAgIAorCisgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICAgICMgcGFyc2VkZWJ1ZygpLgorICAgICMKKyAgICAjIFRoaXMgaXMgdGhlIGRlYnVnZ2luZyBlbmFibGVkIHZlcnNpb24gb2YgcGFyc2UoKS4gIEFsbCBjaGFuZ2VzIG1hZGUgdG8gdGhlCisgICAgIyBwYXJzaW5nIGVuZ2luZSBzaG91bGQgYmUgbWFkZSBoZXJlLiAgIEZvciB0aGUgbm9uLWRlYnVnZ2luZyB2ZXJzaW9uLAorICAgICMgY29weSB0aGlzIGNvZGUgdG8gYSBtZXRob2QgcGFyc2VvcHQoKSBhbmQgZGVsZXRlIGFsbCBvZiB0aGUgc2VjdGlvbnMKKyAgICAjIGVuY2xvc2VkIGluOgorICAgICMKKyAgICAjICAgICAgIy0tISBERUJVRworICAgICMgICAgICBzdGF0ZW1lbnRzCisgICAgIyAgICAgICMtLSEgREVCVUcKKyAgICAjCisgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorCisgICAgZGVmIHBhcnNlZGVidWcoc2VsZixpbnB1dD1Ob25lLGxleGVyPU5vbmUsZGVidWc9Tm9uZSx0cmFja2luZz0wLHRva2VuZnVuYz1Ob25lKToKKyAgICAgICAgbG9va2FoZWFkID0gTm9uZSAgICAgICAgICAgICAgICAgIyBDdXJyZW50IGxvb2thaGVhZCBzeW1ib2wKKyAgICAgICAgbG9va2FoZWFkc3RhY2sgPSBbIF0gICAgICAgICAgICAgIyBTdGFjayBvZiBsb29rYWhlYWQgc3ltYm9scworICAgICAgICBhY3Rpb25zID0gc2VsZi5hY3Rpb24gICAgICAgICAgICAjIExvY2FsIHJlZmVyZW5jZSB0byBhY3Rpb24gdGFibGUgKHRvIGF2b2lkIGxvb2t1cCBvbiBzZWxmLikKKyAgICAgICAgZ290byAgICA9IHNlbGYuZ290byAgICAgICAgICAgICAgIyBMb2NhbCByZWZlcmVuY2UgdG8gZ290byB0YWJsZSAodG8gYXZvaWQgbG9va3VwIG9uIHNlbGYuKQorICAgICAgICBwcm9kICAgID0gc2VsZi5wcm9kdWN0aW9ucyAgICAgICAjIExvY2FsIHJlZmVyZW5jZSB0byBwcm9kdWN0aW9uIGxpc3QgKHRvIGF2b2lkIGxvb2t1cCBvbiBzZWxmLikKKyAgICAgICAgcHNsaWNlICA9IFlhY2NQcm9kdWN0aW9uKE5vbmUpICAgIyBQcm9kdWN0aW9uIG9iamVjdCBwYXNzZWQgdG8gZ3JhbW1hciBydWxlcworICAgICAgICBlcnJvcmNvdW50ID0gMCAgICAgICAgICAgICAgICAgICAjIFVzZWQgZHVyaW5nIGVycm9yIHJlY292ZXJ5IAorCisgICAgICAgICMgLS0hIERFQlVHCisgICAgICAgIGRlYnVnLmluZm8oIlBMWTogUEFSU0UgREVCVUcgU1RBUlQiKQorICAgICAgICAjIC0tISBERUJVRworCisgICAgICAgICMgSWYgbm8gbGV4ZXIgd2FzIGdpdmVuLCB3ZSB3aWxsIHRyeSB0byB1c2UgdGhlIGxleCBtb2R1bGUKKyAgICAgICAgaWYgbm90IGxleGVyOgorICAgICAgICAgICAgbGV4ID0gbG9hZF9wbHlfbGV4KCkKKyAgICAgICAgICAgIGxleGVyID0gbGV4LmxleGVyCisKKyAgICAgICAgIyBTZXQgdXAgdGhlIGxleGVyIGFuZCBwYXJzZXIgb2JqZWN0cyBvbiBwc2xpY2UKKyAgICAgICAgcHNsaWNlLmxleGVyID0gbGV4ZXIKKyAgICAgICAgcHNsaWNlLnBhcnNlciA9IHNlbGYKKworICAgICAgICAjIElmIGlucHV0IHdhcyBzdXBwbGllZCwgcGFzcyB0byBsZXhlcgorICAgICAgICBpZiBpbnB1dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxleGVyLmlucHV0KGlucHV0KQorCisgICAgICAgIGlmIHRva2VuZnVuYyBpcyBOb25lOgorICAgICAgICAgICAjIFRva2VuaXplIGZ1bmN0aW9uCisgICAgICAgICAgIGdldF90b2tlbiA9IGxleGVyLnRva2VuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgIGdldF90b2tlbiA9IHRva2VuZnVuYworCisgICAgICAgICMgU2V0IHVwIHRoZSBzdGF0ZSBhbmQgc3ltYm9sIHN0YWNrcworCisgICAgICAgIHN0YXRlc3RhY2sgPSBbIF0gICAgICAgICAgICAgICAgIyBTdGFjayBvZiBwYXJzaW5nIHN0YXRlcworICAgICAgICBzZWxmLnN0YXRlc3RhY2sgPSBzdGF0ZXN0YWNrCisgICAgICAgIHN5bXN0YWNrICAgPSBbIF0gICAgICAgICAgICAgICAgIyBTdGFjayBvZiBncmFtbWFyIHN5bWJvbHMKKyAgICAgICAgc2VsZi5zeW1zdGFjayA9IHN5bXN0YWNrCisKKyAgICAgICAgcHNsaWNlLnN0YWNrID0gc3ltc3RhY2sgICAgICAgICAjIFB1dCBpbiB0aGUgcHJvZHVjdGlvbgorICAgICAgICBlcnJ0b2tlbiAgID0gTm9uZSAgICAgICAgICAgICAgICMgRXJyIHRva2VuCisKKyAgICAgICAgIyBUaGUgc3RhcnQgc3RhdGUgaXMgYXNzdW1lZCB0byBiZSAoMCwkZW5kKQorCisgICAgICAgIHN0YXRlc3RhY2suYXBwZW5kKDApCisgICAgICAgIHN5bSA9IFlhY2NTeW1ib2woKQorICAgICAgICBzeW0udHlwZSA9ICIkZW5kIgorICAgICAgICBzeW1zdGFjay5hcHBlbmQoc3ltKQorICAgICAgICBzdGF0ZSA9IDAKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICMgR2V0IHRoZSBuZXh0IHN5bWJvbCBvbiB0aGUgaW5wdXQuICBJZiBhIGxvb2thaGVhZCBzeW1ib2wKKyAgICAgICAgICAgICMgaXMgYWxyZWFkeSBzZXQsIHdlIGp1c3QgdXNlIHRoYXQuIE90aGVyd2lzZSwgd2UnbGwgcHVsbAorICAgICAgICAgICAgIyB0aGUgbmV4dCB0b2tlbiBvZmYgb2YgdGhlIGxvb2thaGVhZHN0YWNrIG9yIGZyb20gdGhlIGxleGVyCisKKyAgICAgICAgICAgICMgLS0hIERFQlVHCisgICAgICAgICAgICBkZWJ1Zy5kZWJ1ZygnJykKKyAgICAgICAgICAgIGRlYnVnLmRlYnVnKCdTdGF0ZSAgOiAlcycsIHN0YXRlKQorICAgICAgICAgICAgIyAtLSEgREVCVUcKKworICAgICAgICAgICAgaWYgbm90IGxvb2thaGVhZDoKKyAgICAgICAgICAgICAgICBpZiBub3QgbG9va2FoZWFkc3RhY2s6CisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IGdldF90b2tlbigpICAgICAjIEdldCB0aGUgbmV4dCB0b2tlbgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IGxvb2thaGVhZHN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgaWYgbm90IGxvb2thaGVhZDoKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gWWFjY1N5bWJvbCgpCisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZC50eXBlID0gIiRlbmQiCisKKyAgICAgICAgICAgICMgLS0hIERFQlVHCisgICAgICAgICAgICBkZWJ1Zy5kZWJ1ZygnU3RhY2sgIDogJXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgKCIlcyAuICVzIiAlICgiICIuam9pbihbeHgudHlwZSBmb3IgeHggaW4gc3ltc3RhY2tdWzE6XSksIHN0cihsb29rYWhlYWQpKSkubHN0cmlwKCkpCisgICAgICAgICAgICAjIC0tISBERUJVRworCisgICAgICAgICAgICAjIENoZWNrIHRoZSBhY3Rpb24gdGFibGUKKyAgICAgICAgICAgIGx0eXBlID0gbG9va2FoZWFkLnR5cGUKKyAgICAgICAgICAgIHQgPSBhY3Rpb25zW3N0YXRlXS5nZXQobHR5cGUpCisKKyAgICAgICAgICAgIGlmIHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgdCA+IDA6CisgICAgICAgICAgICAgICAgICAgICMgc2hpZnQgYSBzeW1ib2wgb24gdGhlIHN0YWNrCisgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2suYXBwZW5kKHQpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gdAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgIyAtLSEgREVCVUcKKyAgICAgICAgICAgICAgICAgICAgZGVidWcuZGVidWcoIkFjdGlvbiA6IFNoaWZ0IGFuZCBnb3RvIHN0YXRlICVzIiwgdCkKKyAgICAgICAgICAgICAgICAgICAgIyAtLSEgREVCVUcKKworICAgICAgICAgICAgICAgICAgICBzeW1zdGFjay5hcHBlbmQobG9va2FoZWFkKQorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBOb25lCisKKyAgICAgICAgICAgICAgICAgICAgIyBEZWNyZWFzZSBlcnJvciBjb3VudCBvbiBzdWNjZXNzZnVsIHNoaWZ0CisgICAgICAgICAgICAgICAgICAgIGlmIGVycm9yY291bnQ6IGVycm9yY291bnQgLT0xCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiB0IDwgMDoKKyAgICAgICAgICAgICAgICAgICAgIyByZWR1Y2UgYSBzeW1ib2wgb24gdGhlIHN0YWNrLCBlbWl0IGEgcHJvZHVjdGlvbgorICAgICAgICAgICAgICAgICAgICBwID0gcHJvZFstdF0KKyAgICAgICAgICAgICAgICAgICAgcG5hbWUgPSBwLm5hbWUKKyAgICAgICAgICAgICAgICAgICAgcGxlbiAgPSBwLmxlbgorCisgICAgICAgICAgICAgICAgICAgICMgR2V0IHByb2R1Y3Rpb24gZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgc3ltID0gWWFjY1N5bWJvbCgpCisgICAgICAgICAgICAgICAgICAgIHN5bS50eXBlID0gcG5hbWUgICAgICAgIyBQcm9kdWN0aW9uIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgc3ltLnZhbHVlID0gTm9uZQorCisgICAgICAgICAgICAgICAgICAgICMgLS0hIERFQlVHCisgICAgICAgICAgICAgICAgICAgIGlmIHBsZW46CisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zy5pbmZvKCJBY3Rpb24gOiBSZWR1Y2UgcnVsZSBbJXNdIHdpdGggJXMgYW5kIGdvdG8gc3RhdGUgJWQiLCBwLnN0ciwgIlsiKyIsIi5qb2luKFtmb3JtYXRfc3RhY2tfZW50cnkoX3YudmFsdWUpIGZvciBfdiBpbiBzeW1zdGFja1stcGxlbjpdXSkrIl0iLC10KQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcuaW5mbygiQWN0aW9uIDogUmVkdWNlIHJ1bGUgWyVzXSB3aXRoICVzIGFuZCBnb3RvIHN0YXRlICVkIiwgcC5zdHIsIFtdLC10KQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICMgLS0hIERFQlVHCisKKyAgICAgICAgICAgICAgICAgICAgaWYgcGxlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmcgPSBzeW1zdGFja1stcGxlbi0xOl0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdbMF0gPSBzeW0KKworICAgICAgICAgICAgICAgICAgICAgICAgIyAtLSEgVFJBQ0tJTkcKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRyYWNraW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgdDEgPSB0YXJnWzFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0ubGluZW5vID0gdDEubGluZW5vCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0ubGV4cG9zID0gdDEubGV4cG9zCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IHRhcmdbLTFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0uZW5kbGluZW5vID0gZ2V0YXR0cih0MSwiZW5kbGluZW5vIix0MS5saW5lbm8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0uZW5kbGV4cG9zID0gZ2V0YXR0cih0MSwiZW5kbGV4cG9zIix0MS5sZXhwb3MpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgLS0hIFRSQUNLSU5HCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIGNvZGUgZW5jbG9zZWQgaW4gdGhpcyBzZWN0aW9uIGlzIGR1cGxpY2F0ZWQgCisgICAgICAgICAgICAgICAgICAgICAgICAjIGJlbG93IGFzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiAgTWFrZSBzdXJlCisgICAgICAgICAgICAgICAgICAgICAgICAjIGNoYW5nZXMgZ2V0IG1hZGUgaW4gYm90aCBsb2NhdGlvbnMuCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzbGljZS5zbGljZSA9IHRhcmcKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQ2FsbCB0aGUgZ3JhbW1hciBydWxlIHdpdGggb3VyIHNwZWNpYWwgc2xpY2Ugb2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHN5bXN0YWNrWy1wbGVuOl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgc3RhdGVzdGFja1stcGxlbjpdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5jYWxsYWJsZShwc2xpY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAtLSEgREVCVUcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zy5pbmZvKCJSZXN1bHQgOiAlcyIsIGZvcm1hdF9yZXN1bHQocHNsaWNlWzBdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIC0tISBERUJVRworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLmFwcGVuZChzeW0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBnb3RvW3N0YXRlc3RhY2tbLTFdXVtwbmFtZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZXN0YWNrLmFwcGVuZChzdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIGFuIGVycm9yIHdhcyBzZXQuIEVudGVyIGVycm9yIHJlY292ZXJ5IHN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkc3RhY2suYXBwZW5kKGxvb2thaGVhZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1zdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlc3RhY2tbLTFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltLnR5cGUgPSAnZXJyb3InCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gc3ltCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jjb3VudCA9IGVycm9yX2NvdW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcm9rID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKyAgICAKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKworICAgICAgICAgICAgICAgICAgICAgICAgIyAtLSEgVFJBQ0tJTkcKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRyYWNraW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltLmxpbmVubyA9IGxleGVyLmxpbmVubworICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltLmxleHBvcyA9IGxleGVyLmxleHBvcworICAgICAgICAgICAgICAgICAgICAgICAgIyAtLSEgVFJBQ0tJTkcKKworICAgICAgICAgICAgICAgICAgICAgICAgdGFyZyA9IFsgc3ltIF0KKworICAgICAgICAgICAgICAgICAgICAgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGUgY29kZSBlbmNsb3NlZCBpbiB0aGlzIHNlY3Rpb24gaXMgZHVwbGljYXRlZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYWJvdmUgYXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uICBNYWtlIHN1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgY2hhbmdlcyBnZXQgbWFkZSBpbiBib3RoIGxvY2F0aW9ucy4KKworICAgICAgICAgICAgICAgICAgICAgICAgcHNsaWNlLnNsaWNlID0gdGFyZworCisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDYWxsIHRoZSBncmFtbWFyIHJ1bGUgd2l0aCBvdXIgc3BlY2lhbCBzbGljZSBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLmNhbGxhYmxlKHBzbGljZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIC0tISBERUJVRworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnLmluZm8oIlJlc3VsdCA6ICVzIiwgZm9ybWF0X3Jlc3VsdChwc2xpY2VbMF0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgLS0hIERFQlVHCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltc3RhY2suYXBwZW5kKHN5bSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IGdvdG9bc3RhdGVzdGFja1stMV1dW3BuYW1lXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2suYXBwZW5kKHN0YXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgYW4gZXJyb3Igd2FzIHNldC4gRW50ZXIgZXJyb3IgcmVjb3Zlcnkgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWRzdGFjay5hcHBlbmQobG9va2FoZWFkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVzdGFja1stMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0udHlwZSA9ICdlcnJvcicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBzeW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmNvdW50ID0gZXJyb3JfY291bnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yb2sgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorCisgICAgICAgICAgICAgICAgaWYgdCA9PSAwOgorICAgICAgICAgICAgICAgICAgICBuID0gc3ltc3RhY2tbLTFdCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGdldGF0dHIobiwidmFsdWUiLE5vbmUpCisgICAgICAgICAgICAgICAgICAgICMgLS0hIERFQlVHCisgICAgICAgICAgICAgICAgICAgIGRlYnVnLmluZm8oIkRvbmUgICA6IFJldHVybmluZyAlcyIsIGZvcm1hdF9yZXN1bHQocmVzdWx0KSkKKyAgICAgICAgICAgICAgICAgICAgZGVidWcuaW5mbygiUExZOiBQQVJTRSBERUJVRyBFTkQiKQorICAgICAgICAgICAgICAgICAgICAjIC0tISBERUJVRworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAgICAgICAgIGlmIHQgPT0gTm9uZToKKworICAgICAgICAgICAgICAgICMgLS0hIERFQlVHCisgICAgICAgICAgICAgICAgZGVidWcuZXJyb3IoJ0Vycm9yICA6ICVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIiVzIC4gJXMiICUgKCIgIi5qb2luKFt4eC50eXBlIGZvciB4eCBpbiBzeW1zdGFja11bMTpdKSwgc3RyKGxvb2thaGVhZCkpKS5sc3RyaXAoKSkKKyAgICAgICAgICAgICAgICAjIC0tISBERUJVRworCisgICAgICAgICAgICAgICAgIyBXZSBoYXZlIHNvbWUga2luZCBvZiBwYXJzaW5nIGVycm9yIGhlcmUuICBUbyBoYW5kbGUKKyAgICAgICAgICAgICAgICAjIHRoaXMsIHdlIGFyZSBnb2luZyB0byBwdXNoIHRoZSBjdXJyZW50IHRva2VuIG9udG8KKyAgICAgICAgICAgICAgICAjIHRoZSB0b2tlbnN0YWNrIGFuZCByZXBsYWNlIGl0IHdpdGggYW4gJ2Vycm9yJyB0b2tlbi4KKyAgICAgICAgICAgICAgICAjIElmIHRoZXJlIGFyZSBhbnkgc3luY2hyb25pemF0aW9uIHJ1bGVzLCB0aGV5IG1heQorICAgICAgICAgICAgICAgICMgY2F0Y2ggaXQuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgSW4gYWRkaXRpb24gdG8gcHVzaGluZyB0aGUgZXJyb3IgdG9rZW4sIHdlIGNhbGwgY2FsbAorICAgICAgICAgICAgICAgICMgdGhlIHVzZXIgZGVmaW5lZCBwX2Vycm9yKCkgZnVuY3Rpb24gaWYgdGhpcyBpcyB0aGUKKyAgICAgICAgICAgICAgICAjIGZpcnN0IHN5bnRheCBlcnJvci4gIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgaWYKKyAgICAgICAgICAgICAgICAjIGVycm9yY291bnQgPT0gMC4KKyAgICAgICAgICAgICAgICBpZiBlcnJvcmNvdW50ID09IDAgb3Igc2VsZi5lcnJvcm9rOgorICAgICAgICAgICAgICAgICAgICBlcnJvcmNvdW50ID0gZXJyb3JfY291bnQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcm9rID0gMAorICAgICAgICAgICAgICAgICAgICBlcnJ0b2tlbiA9IGxvb2thaGVhZAorICAgICAgICAgICAgICAgICAgICBpZiBlcnJ0b2tlbi50eXBlID09ICIkZW5kIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycnRva2VuID0gTm9uZSAgICAgICAgICAgICAgICMgRW5kIG9mIGZpbGUhCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZXJyb3JmdW5jOgorICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsIGVycm9rLHRva2VuLHJlc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9rID0gc2VsZi5lcnJvayAgICAgICAgIyBTZXQgc29tZSBzcGVjaWFsIGZ1bmN0aW9ucyBhdmFpbGFibGUgaW4gZXJyb3IgcmVjb3ZlcnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gZ2V0X3Rva2VuCisgICAgICAgICAgICAgICAgICAgICAgICByZXN0YXJ0ID0gc2VsZi5yZXN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnJ0b2tlbiBhbmQgbm90IGhhc2F0dHIoZXJydG9rZW4sJ2xleGVyJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJydG9rZW4ubGV4ZXIgPSBsZXhlcgorICAgICAgICAgICAgICAgICAgICAgICAgdG9rID0gc2VsZi5lcnJvcmZ1bmMoZXJydG9rZW4pCisgICAgICAgICAgICAgICAgICAgICAgICBkZWwgZXJyb2ssIHRva2VuLCByZXN0YXJ0ICAgIyBEZWxldGUgc3BlY2lhbCBmdW5jdGlvbnMKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5lcnJvcm9rOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVXNlciBtdXN0IGhhdmUgZG9uZSBzb21lIGtpbmQgb2YgcGFuaWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1vZGUgcmVjb3Zlcnkgb24gdGhlaXIgb3duLiAgVGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXR1cm5lZCB0b2tlbiBpcyB0aGUgbmV4dCBsb29rYWhlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSB0b2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJ0b2tlbiA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXJydG9rZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihlcnJ0b2tlbiwibGluZW5vIik6IGxpbmVubyA9IGxvb2thaGVhZC5saW5lbm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOiBsaW5lbm8gPSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZW5vOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ5YWNjOiBTeW50YXggZXJyb3IgYXQgbGluZSAlZCwgdG9rZW49JXNcbiIgJSAobGluZW5vLCBlcnJ0b2tlbi50eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ5YWNjOiBTeW50YXggZXJyb3IsIHRva2VuPSVzIiAlIGVycnRva2VuLnR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInlhY2M6IFBhcnNlIGVycm9yIGluIGlucHV0LiBFT0ZcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBlcnJvcmNvdW50ID0gZXJyb3JfY291bnQKKworICAgICAgICAgICAgICAgICMgY2FzZSAxOiAgdGhlIHN0YXRlc3RhY2sgb25seSBoYXMgMSBlbnRyeSBvbiBpdC4gIElmIHdlJ3JlIGluIHRoaXMgc3RhdGUsIHRoZQorICAgICAgICAgICAgICAgICMgZW50aXJlIHBhcnNlIGhhcyBiZWVuIHJvbGxlZCBiYWNrIGFuZCB3ZSdyZSBjb21wbGV0ZWx5IGhvc2VkLiAgIFRoZSB0b2tlbiBpcworICAgICAgICAgICAgICAgICMgZGlzY2FyZGVkIGFuZCB3ZSBqdXN0IGtlZXAgZ29pbmcuCisKKyAgICAgICAgICAgICAgICBpZiBsZW4oc3RhdGVzdGFjaykgPD0gMSBhbmQgbG9va2FoZWFkLnR5cGUgIT0gIiRlbmQiOgorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGVycnRva2VuID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDAKKyAgICAgICAgICAgICAgICAgICAgIyBOdWtlIHRoZSBwdXNoYmFjayBzdGFjaworICAgICAgICAgICAgICAgICAgICBkZWwgbG9va2FoZWFkc3RhY2tbOl0KKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICMgY2FzZSAyOiB0aGUgc3RhdGVzdGFjayBoYXMgYSBjb3VwbGUgb2YgZW50cmllcyBvbiBpdCwgYnV0IHdlJ3JlCisgICAgICAgICAgICAgICAgIyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLiBudWtlIHRoZSB0b3AgZW50cnkgYW5kIGdlbmVyYXRlIGFuIGVycm9yIHRva2VuCisKKyAgICAgICAgICAgICAgICAjIFN0YXJ0IG51a2luZyBlbnRyaWVzIG9uIHRoZSBzdGFjaworICAgICAgICAgICAgICAgIGlmIGxvb2thaGVhZC50eXBlID09ICIkZW5kIjoKKyAgICAgICAgICAgICAgICAgICAgIyBXaG9hLiBXZSdyZSByZWFsbHkgaG9zZWQgaGVyZS4gQmFpbCBvdXQKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICAgICBpZiBsb29rYWhlYWQudHlwZSAhPSAnZXJyb3InOgorICAgICAgICAgICAgICAgICAgICBzeW0gPSBzeW1zdGFja1stMV0KKyAgICAgICAgICAgICAgICAgICAgaWYgc3ltLnR5cGUgPT0gJ2Vycm9yJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgSG1tbS4gRXJyb3IgaXMgb24gdG9wIG9mIHN0YWNrLCB3ZSdsbCBqdXN0IG51a2UgaW5wdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICMgc3ltYm9sIGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgdCA9IFlhY2NTeW1ib2woKQorICAgICAgICAgICAgICAgICAgICB0LnR5cGUgPSAnZXJyb3InCisgICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIobG9va2FoZWFkLCJsaW5lbm8iKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHQubGluZW5vID0gbG9va2FoZWFkLmxpbmVubworICAgICAgICAgICAgICAgICAgICB0LnZhbHVlID0gbG9va2FoZWFkCisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZHN0YWNrLmFwcGVuZChsb29rYWhlYWQpCisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IHQKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzeW1zdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICBzdGF0ZXN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVzdGFja1stMV0gICAgICAgIyBQb3RlbnRpYWwgYnVnIGZpeAorCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBDYWxsIGFuIGVycm9yIGZ1bmN0aW9uIGhlcmUKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigieWFjYzogaW50ZXJuYWwgcGFyc2VyIGVycm9yISEhXG4iKQorCisgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICAgICMgcGFyc2VvcHQoKS4KKyAgICAjCisgICAgIyBPcHRpbWl6ZWQgdmVyc2lvbiBvZiBwYXJzZSgpIG1ldGhvZC4gIERPIE5PVCBFRElUIFRISVMgQ09ERSBESVJFQ1RMWS4KKyAgICAjIEVkaXQgdGhlIGRlYnVnIHZlcnNpb24gYWJvdmUsIHRoZW4gY29weSBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGUgbWV0aG9kCisgICAgIyBiZWxvdyB3aGlsZSByZW1vdmluZyAjLS0hIERFQlVHIHNlY3Rpb25zLgorICAgICMgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKworCisgICAgZGVmIHBhcnNlb3B0KHNlbGYsaW5wdXQ9Tm9uZSxsZXhlcj1Ob25lLGRlYnVnPTAsdHJhY2tpbmc9MCx0b2tlbmZ1bmM9Tm9uZSk6CisgICAgICAgIGxvb2thaGVhZCA9IE5vbmUgICAgICAgICAgICAgICAgICMgQ3VycmVudCBsb29rYWhlYWQgc3ltYm9sCisgICAgICAgIGxvb2thaGVhZHN0YWNrID0gWyBdICAgICAgICAgICAgICMgU3RhY2sgb2YgbG9va2FoZWFkIHN5bWJvbHMKKyAgICAgICAgYWN0aW9ucyA9IHNlbGYuYWN0aW9uICAgICAgICAgICAgIyBMb2NhbCByZWZlcmVuY2UgdG8gYWN0aW9uIHRhYmxlICh0byBhdm9pZCBsb29rdXAgb24gc2VsZi4pCisgICAgICAgIGdvdG8gICAgPSBzZWxmLmdvdG8gICAgICAgICAgICAgICMgTG9jYWwgcmVmZXJlbmNlIHRvIGdvdG8gdGFibGUgKHRvIGF2b2lkIGxvb2t1cCBvbiBzZWxmLikKKyAgICAgICAgcHJvZCAgICA9IHNlbGYucHJvZHVjdGlvbnMgICAgICAgIyBMb2NhbCByZWZlcmVuY2UgdG8gcHJvZHVjdGlvbiBsaXN0ICh0byBhdm9pZCBsb29rdXAgb24gc2VsZi4pCisgICAgICAgIHBzbGljZSAgPSBZYWNjUHJvZHVjdGlvbihOb25lKSAgICMgUHJvZHVjdGlvbiBvYmplY3QgcGFzc2VkIHRvIGdyYW1tYXIgcnVsZXMKKyAgICAgICAgZXJyb3Jjb3VudCA9IDAgICAgICAgICAgICAgICAgICAgIyBVc2VkIGR1cmluZyBlcnJvciByZWNvdmVyeSAKKworICAgICAgICAjIElmIG5vIGxleGVyIHdhcyBnaXZlbiwgd2Ugd2lsbCB0cnkgdG8gdXNlIHRoZSBsZXggbW9kdWxlCisgICAgICAgIGlmIG5vdCBsZXhlcjoKKyAgICAgICAgICAgIGxleCA9IGxvYWRfcGx5X2xleCgpCisgICAgICAgICAgICBsZXhlciA9IGxleC5sZXhlcgorICAgICAgICAKKyAgICAgICAgIyBTZXQgdXAgdGhlIGxleGVyIGFuZCBwYXJzZXIgb2JqZWN0cyBvbiBwc2xpY2UKKyAgICAgICAgcHNsaWNlLmxleGVyID0gbGV4ZXIKKyAgICAgICAgcHNsaWNlLnBhcnNlciA9IHNlbGYKKworICAgICAgICAjIElmIGlucHV0IHdhcyBzdXBwbGllZCwgcGFzcyB0byBsZXhlcgorICAgICAgICBpZiBpbnB1dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxleGVyLmlucHV0KGlucHV0KQorCisgICAgICAgIGlmIHRva2VuZnVuYyBpcyBOb25lOgorICAgICAgICAgICAjIFRva2VuaXplIGZ1bmN0aW9uCisgICAgICAgICAgIGdldF90b2tlbiA9IGxleGVyLnRva2VuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgIGdldF90b2tlbiA9IHRva2VuZnVuYworCisgICAgICAgICMgU2V0IHVwIHRoZSBzdGF0ZSBhbmQgc3ltYm9sIHN0YWNrcworCisgICAgICAgIHN0YXRlc3RhY2sgPSBbIF0gICAgICAgICAgICAgICAgIyBTdGFjayBvZiBwYXJzaW5nIHN0YXRlcworICAgICAgICBzZWxmLnN0YXRlc3RhY2sgPSBzdGF0ZXN0YWNrCisgICAgICAgIHN5bXN0YWNrICAgPSBbIF0gICAgICAgICAgICAgICAgIyBTdGFjayBvZiBncmFtbWFyIHN5bWJvbHMKKyAgICAgICAgc2VsZi5zeW1zdGFjayA9IHN5bXN0YWNrCisKKyAgICAgICAgcHNsaWNlLnN0YWNrID0gc3ltc3RhY2sgICAgICAgICAjIFB1dCBpbiB0aGUgcHJvZHVjdGlvbgorICAgICAgICBlcnJ0b2tlbiAgID0gTm9uZSAgICAgICAgICAgICAgICMgRXJyIHRva2VuCisKKyAgICAgICAgIyBUaGUgc3RhcnQgc3RhdGUgaXMgYXNzdW1lZCB0byBiZSAoMCwkZW5kKQorCisgICAgICAgIHN0YXRlc3RhY2suYXBwZW5kKDApCisgICAgICAgIHN5bSA9IFlhY2NTeW1ib2woKQorICAgICAgICBzeW0udHlwZSA9ICckZW5kJworICAgICAgICBzeW1zdGFjay5hcHBlbmQoc3ltKQorICAgICAgICBzdGF0ZSA9IDAKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICMgR2V0IHRoZSBuZXh0IHN5bWJvbCBvbiB0aGUgaW5wdXQuICBJZiBhIGxvb2thaGVhZCBzeW1ib2wKKyAgICAgICAgICAgICMgaXMgYWxyZWFkeSBzZXQsIHdlIGp1c3QgdXNlIHRoYXQuIE90aGVyd2lzZSwgd2UnbGwgcHVsbAorICAgICAgICAgICAgIyB0aGUgbmV4dCB0b2tlbiBvZmYgb2YgdGhlIGxvb2thaGVhZHN0YWNrIG9yIGZyb20gdGhlIGxleGVyCisKKyAgICAgICAgICAgIGlmIG5vdCBsb29rYWhlYWQ6CisgICAgICAgICAgICAgICAgaWYgbm90IGxvb2thaGVhZHN0YWNrOgorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBnZXRfdG9rZW4oKSAgICAgIyBHZXQgdGhlIG5leHQgdG9rZW4KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBsb29rYWhlYWRzdGFjay5wb3AoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsb29rYWhlYWQ6CisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IFlhY2NTeW1ib2woKQorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQudHlwZSA9ICckZW5kJworCisgICAgICAgICAgICAjIENoZWNrIHRoZSBhY3Rpb24gdGFibGUKKyAgICAgICAgICAgIGx0eXBlID0gbG9va2FoZWFkLnR5cGUKKyAgICAgICAgICAgIHQgPSBhY3Rpb25zW3N0YXRlXS5nZXQobHR5cGUpCisKKyAgICAgICAgICAgIGlmIHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgdCA+IDA6CisgICAgICAgICAgICAgICAgICAgICMgc2hpZnQgYSBzeW1ib2wgb24gdGhlIHN0YWNrCisgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2suYXBwZW5kKHQpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gdAorCisgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLmFwcGVuZChsb29rYWhlYWQpCisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IE5vbmUKKworICAgICAgICAgICAgICAgICAgICAjIERlY3JlYXNlIGVycm9yIGNvdW50IG9uIHN1Y2Nlc3NmdWwgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgaWYgZXJyb3Jjb3VudDogZXJyb3Jjb3VudCAtPTEKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIHQgPCAwOgorICAgICAgICAgICAgICAgICAgICAjIHJlZHVjZSBhIHN5bWJvbCBvbiB0aGUgc3RhY2ssIGVtaXQgYSBwcm9kdWN0aW9uCisgICAgICAgICAgICAgICAgICAgIHAgPSBwcm9kWy10XQorICAgICAgICAgICAgICAgICAgICBwbmFtZSA9IHAubmFtZQorICAgICAgICAgICAgICAgICAgICBwbGVuICA9IHAubGVuCisKKyAgICAgICAgICAgICAgICAgICAgIyBHZXQgcHJvZHVjdGlvbiBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICBzeW0gPSBZYWNjU3ltYm9sKCkKKyAgICAgICAgICAgICAgICAgICAgc3ltLnR5cGUgPSBwbmFtZSAgICAgICAjIFByb2R1Y3Rpb24gbmFtZQorICAgICAgICAgICAgICAgICAgICBzeW0udmFsdWUgPSBOb25lCisKKyAgICAgICAgICAgICAgICAgICAgaWYgcGxlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmcgPSBzeW1zdGFja1stcGxlbi0xOl0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdbMF0gPSBzeW0KKworICAgICAgICAgICAgICAgICAgICAgICAgIyAtLSEgVFJBQ0tJTkcKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRyYWNraW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgdDEgPSB0YXJnWzFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0ubGluZW5vID0gdDEubGluZW5vCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0ubGV4cG9zID0gdDEubGV4cG9zCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IHRhcmdbLTFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0uZW5kbGluZW5vID0gZ2V0YXR0cih0MSwiZW5kbGluZW5vIix0MS5saW5lbm8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0uZW5kbGV4cG9zID0gZ2V0YXR0cih0MSwiZW5kbGV4cG9zIix0MS5sZXhwb3MpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgLS0hIFRSQUNLSU5HCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIGNvZGUgZW5jbG9zZWQgaW4gdGhpcyBzZWN0aW9uIGlzIGR1cGxpY2F0ZWQgCisgICAgICAgICAgICAgICAgICAgICAgICAjIGJlbG93IGFzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiAgTWFrZSBzdXJlCisgICAgICAgICAgICAgICAgICAgICAgICAjIGNoYW5nZXMgZ2V0IG1hZGUgaW4gYm90aCBsb2NhdGlvbnMuCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzbGljZS5zbGljZSA9IHRhcmcKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQ2FsbCB0aGUgZ3JhbW1hciBydWxlIHdpdGggb3VyIHNwZWNpYWwgc2xpY2Ugb2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHN5bXN0YWNrWy1wbGVuOl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgc3RhdGVzdGFja1stcGxlbjpdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5jYWxsYWJsZShwc2xpY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltc3RhY2suYXBwZW5kKHN5bSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IGdvdG9bc3RhdGVzdGFja1stMV1dW3BuYW1lXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2suYXBwZW5kKHN0YXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgYW4gZXJyb3Igd2FzIHNldC4gRW50ZXIgZXJyb3IgcmVjb3Zlcnkgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWRzdGFjay5hcHBlbmQobG9va2FoZWFkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVzdGFja1stMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0udHlwZSA9ICdlcnJvcicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBzeW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmNvdW50ID0gZXJyb3JfY291bnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yb2sgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICAgIAorICAgICAgICAgICAgICAgICAgICBlbHNlOgorCisgICAgICAgICAgICAgICAgICAgICAgICAjIC0tISBUUkFDS0lORworICAgICAgICAgICAgICAgICAgICAgICAgaWYgdHJhY2tpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0ubGluZW5vID0gbGV4ZXIubGluZW5vCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0ubGV4cG9zID0gbGV4ZXIubGV4cG9zCisgICAgICAgICAgICAgICAgICAgICAgICAjIC0tISBUUkFDS0lORworCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnID0gWyBzeW0gXQorCisgICAgICAgICAgICAgICAgICAgICAgICAjICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSBjb2RlIGVuY2xvc2VkIGluIHRoaXMgc2VjdGlvbiBpcyBkdXBsaWNhdGVkIAorICAgICAgICAgICAgICAgICAgICAgICAgIyBhYm92ZSBhcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gIE1ha2Ugc3VyZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGFuZ2VzIGdldCBtYWRlIGluIGJvdGggbG9jYXRpb25zLgorCisgICAgICAgICAgICAgICAgICAgICAgICBwc2xpY2Uuc2xpY2UgPSB0YXJnCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIENhbGwgdGhlIGdyYW1tYXIgcnVsZSB3aXRoIG91ciBzcGVjaWFsIHNsaWNlIG9iamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuY2FsbGFibGUocHNsaWNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLmFwcGVuZChzeW0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBnb3RvW3N0YXRlc3RhY2tbLTFdXVtwbmFtZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZXN0YWNrLmFwcGVuZChzdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIGFuIGVycm9yIHdhcyBzZXQuIEVudGVyIGVycm9yIHJlY292ZXJ5IHN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkc3RhY2suYXBwZW5kKGxvb2thaGVhZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1zdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlc3RhY2tbLTFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltLnR5cGUgPSAnZXJyb3InCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gc3ltCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jjb3VudCA9IGVycm9yX2NvdW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcm9rID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKworICAgICAgICAgICAgICAgIGlmIHQgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgbiA9IHN5bXN0YWNrWy0xXQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihuLCJ2YWx1ZSIsTm9uZSkKKworICAgICAgICAgICAgaWYgdCA9PSBOb25lOgorCisgICAgICAgICAgICAgICAgIyBXZSBoYXZlIHNvbWUga2luZCBvZiBwYXJzaW5nIGVycm9yIGhlcmUuICBUbyBoYW5kbGUKKyAgICAgICAgICAgICAgICAjIHRoaXMsIHdlIGFyZSBnb2luZyB0byBwdXNoIHRoZSBjdXJyZW50IHRva2VuIG9udG8KKyAgICAgICAgICAgICAgICAjIHRoZSB0b2tlbnN0YWNrIGFuZCByZXBsYWNlIGl0IHdpdGggYW4gJ2Vycm9yJyB0b2tlbi4KKyAgICAgICAgICAgICAgICAjIElmIHRoZXJlIGFyZSBhbnkgc3luY2hyb25pemF0aW9uIHJ1bGVzLCB0aGV5IG1heQorICAgICAgICAgICAgICAgICMgY2F0Y2ggaXQuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgSW4gYWRkaXRpb24gdG8gcHVzaGluZyB0aGUgZXJyb3IgdG9rZW4sIHdlIGNhbGwgY2FsbAorICAgICAgICAgICAgICAgICMgdGhlIHVzZXIgZGVmaW5lZCBwX2Vycm9yKCkgZnVuY3Rpb24gaWYgdGhpcyBpcyB0aGUKKyAgICAgICAgICAgICAgICAjIGZpcnN0IHN5bnRheCBlcnJvci4gIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgaWYKKyAgICAgICAgICAgICAgICAjIGVycm9yY291bnQgPT0gMC4KKyAgICAgICAgICAgICAgICBpZiBlcnJvcmNvdW50ID09IDAgb3Igc2VsZi5lcnJvcm9rOgorICAgICAgICAgICAgICAgICAgICBlcnJvcmNvdW50ID0gZXJyb3JfY291bnQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcm9rID0gMAorICAgICAgICAgICAgICAgICAgICBlcnJ0b2tlbiA9IGxvb2thaGVhZAorICAgICAgICAgICAgICAgICAgICBpZiBlcnJ0b2tlbi50eXBlID09ICckZW5kJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycnRva2VuID0gTm9uZSAgICAgICAgICAgICAgICMgRW5kIG9mIGZpbGUhCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZXJyb3JmdW5jOgorICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsIGVycm9rLHRva2VuLHJlc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9rID0gc2VsZi5lcnJvayAgICAgICAgIyBTZXQgc29tZSBzcGVjaWFsIGZ1bmN0aW9ucyBhdmFpbGFibGUgaW4gZXJyb3IgcmVjb3ZlcnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gZ2V0X3Rva2VuCisgICAgICAgICAgICAgICAgICAgICAgICByZXN0YXJ0ID0gc2VsZi5yZXN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnJ0b2tlbiBhbmQgbm90IGhhc2F0dHIoZXJydG9rZW4sJ2xleGVyJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJydG9rZW4ubGV4ZXIgPSBsZXhlcgorICAgICAgICAgICAgICAgICAgICAgICAgdG9rID0gc2VsZi5lcnJvcmZ1bmMoZXJydG9rZW4pCisgICAgICAgICAgICAgICAgICAgICAgICBkZWwgZXJyb2ssIHRva2VuLCByZXN0YXJ0ICAgIyBEZWxldGUgc3BlY2lhbCBmdW5jdGlvbnMKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5lcnJvcm9rOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVXNlciBtdXN0IGhhdmUgZG9uZSBzb21lIGtpbmQgb2YgcGFuaWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1vZGUgcmVjb3Zlcnkgb24gdGhlaXIgb3duLiAgVGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXR1cm5lZCB0b2tlbiBpcyB0aGUgbmV4dCBsb29rYWhlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSB0b2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJ0b2tlbiA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXJydG9rZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihlcnJ0b2tlbiwibGluZW5vIik6IGxpbmVubyA9IGxvb2thaGVhZC5saW5lbm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOiBsaW5lbm8gPSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZW5vOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ5YWNjOiBTeW50YXggZXJyb3IgYXQgbGluZSAlZCwgdG9rZW49JXNcbiIgJSAobGluZW5vLCBlcnJ0b2tlbi50eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ5YWNjOiBTeW50YXggZXJyb3IsIHRva2VuPSVzIiAlIGVycnRva2VuLnR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInlhY2M6IFBhcnNlIGVycm9yIGluIGlucHV0LiBFT0ZcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBlcnJvcmNvdW50ID0gZXJyb3JfY291bnQKKworICAgICAgICAgICAgICAgICMgY2FzZSAxOiAgdGhlIHN0YXRlc3RhY2sgb25seSBoYXMgMSBlbnRyeSBvbiBpdC4gIElmIHdlJ3JlIGluIHRoaXMgc3RhdGUsIHRoZQorICAgICAgICAgICAgICAgICMgZW50aXJlIHBhcnNlIGhhcyBiZWVuIHJvbGxlZCBiYWNrIGFuZCB3ZSdyZSBjb21wbGV0ZWx5IGhvc2VkLiAgIFRoZSB0b2tlbiBpcworICAgICAgICAgICAgICAgICMgZGlzY2FyZGVkIGFuZCB3ZSBqdXN0IGtlZXAgZ29pbmcuCisKKyAgICAgICAgICAgICAgICBpZiBsZW4oc3RhdGVzdGFjaykgPD0gMSBhbmQgbG9va2FoZWFkLnR5cGUgIT0gJyRlbmQnOgorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGVycnRva2VuID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDAKKyAgICAgICAgICAgICAgICAgICAgIyBOdWtlIHRoZSBwdXNoYmFjayBzdGFjaworICAgICAgICAgICAgICAgICAgICBkZWwgbG9va2FoZWFkc3RhY2tbOl0KKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICMgY2FzZSAyOiB0aGUgc3RhdGVzdGFjayBoYXMgYSBjb3VwbGUgb2YgZW50cmllcyBvbiBpdCwgYnV0IHdlJ3JlCisgICAgICAgICAgICAgICAgIyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLiBudWtlIHRoZSB0b3AgZW50cnkgYW5kIGdlbmVyYXRlIGFuIGVycm9yIHRva2VuCisKKyAgICAgICAgICAgICAgICAjIFN0YXJ0IG51a2luZyBlbnRyaWVzIG9uIHRoZSBzdGFjaworICAgICAgICAgICAgICAgIGlmIGxvb2thaGVhZC50eXBlID09ICckZW5kJzoKKyAgICAgICAgICAgICAgICAgICAgIyBXaG9hLiBXZSdyZSByZWFsbHkgaG9zZWQgaGVyZS4gQmFpbCBvdXQKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICAgICBpZiBsb29rYWhlYWQudHlwZSAhPSAnZXJyb3InOgorICAgICAgICAgICAgICAgICAgICBzeW0gPSBzeW1zdGFja1stMV0KKyAgICAgICAgICAgICAgICAgICAgaWYgc3ltLnR5cGUgPT0gJ2Vycm9yJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgSG1tbS4gRXJyb3IgaXMgb24gdG9wIG9mIHN0YWNrLCB3ZSdsbCBqdXN0IG51a2UgaW5wdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICMgc3ltYm9sIGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgdCA9IFlhY2NTeW1ib2woKQorICAgICAgICAgICAgICAgICAgICB0LnR5cGUgPSAnZXJyb3InCisgICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIobG9va2FoZWFkLCJsaW5lbm8iKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHQubGluZW5vID0gbG9va2FoZWFkLmxpbmVubworICAgICAgICAgICAgICAgICAgICB0LnZhbHVlID0gbG9va2FoZWFkCisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZHN0YWNrLmFwcGVuZChsb29rYWhlYWQpCisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IHQKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzeW1zdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICBzdGF0ZXN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVzdGFja1stMV0gICAgICAgIyBQb3RlbnRpYWwgYnVnIGZpeAorCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBDYWxsIGFuIGVycm9yIGZ1bmN0aW9uIGhlcmUKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigieWFjYzogaW50ZXJuYWwgcGFyc2VyIGVycm9yISEhXG4iKQorCisgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICAgICMgcGFyc2VvcHRfbm90cmFjaygpLgorICAgICMKKyAgICAjIE9wdGltaXplZCB2ZXJzaW9uIG9mIHBhcnNlb3B0KCkgd2l0aCBsaW5lIG51bWJlciB0cmFja2luZyByZW1vdmVkLiAKKyAgICAjIERPIE5PVCBFRElUIFRISVMgQ09ERSBESVJFQ1RMWS4gQ29weSB0aGUgb3B0aW1pemVkIHZlcnNpb24gYW5kIHJlbW92ZQorICAgICMgY29kZSBpbiB0aGUgIy0tISBUUkFDS0lORyBzZWN0aW9ucworICAgICMgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKworICAgIGRlZiBwYXJzZW9wdF9ub3RyYWNrKHNlbGYsaW5wdXQ9Tm9uZSxsZXhlcj1Ob25lLGRlYnVnPTAsdHJhY2tpbmc9MCx0b2tlbmZ1bmM9Tm9uZSk6CisgICAgICAgIGxvb2thaGVhZCA9IE5vbmUgICAgICAgICAgICAgICAgICMgQ3VycmVudCBsb29rYWhlYWQgc3ltYm9sCisgICAgICAgIGxvb2thaGVhZHN0YWNrID0gWyBdICAgICAgICAgICAgICMgU3RhY2sgb2YgbG9va2FoZWFkIHN5bWJvbHMKKyAgICAgICAgYWN0aW9ucyA9IHNlbGYuYWN0aW9uICAgICAgICAgICAgIyBMb2NhbCByZWZlcmVuY2UgdG8gYWN0aW9uIHRhYmxlICh0byBhdm9pZCBsb29rdXAgb24gc2VsZi4pCisgICAgICAgIGdvdG8gICAgPSBzZWxmLmdvdG8gICAgICAgICAgICAgICMgTG9jYWwgcmVmZXJlbmNlIHRvIGdvdG8gdGFibGUgKHRvIGF2b2lkIGxvb2t1cCBvbiBzZWxmLikKKyAgICAgICAgcHJvZCAgICA9IHNlbGYucHJvZHVjdGlvbnMgICAgICAgIyBMb2NhbCByZWZlcmVuY2UgdG8gcHJvZHVjdGlvbiBsaXN0ICh0byBhdm9pZCBsb29rdXAgb24gc2VsZi4pCisgICAgICAgIHBzbGljZSAgPSBZYWNjUHJvZHVjdGlvbihOb25lKSAgICMgUHJvZHVjdGlvbiBvYmplY3QgcGFzc2VkIHRvIGdyYW1tYXIgcnVsZXMKKyAgICAgICAgZXJyb3Jjb3VudCA9IDAgICAgICAgICAgICAgICAgICAgIyBVc2VkIGR1cmluZyBlcnJvciByZWNvdmVyeSAKKworICAgICAgICAjIElmIG5vIGxleGVyIHdhcyBnaXZlbiwgd2Ugd2lsbCB0cnkgdG8gdXNlIHRoZSBsZXggbW9kdWxlCisgICAgICAgIGlmIG5vdCBsZXhlcjoKKyAgICAgICAgICAgIGxleCA9IGxvYWRfcGx5X2xleCgpCisgICAgICAgICAgICBsZXhlciA9IGxleC5sZXhlcgorICAgICAgICAKKyAgICAgICAgIyBTZXQgdXAgdGhlIGxleGVyIGFuZCBwYXJzZXIgb2JqZWN0cyBvbiBwc2xpY2UKKyAgICAgICAgcHNsaWNlLmxleGVyID0gbGV4ZXIKKyAgICAgICAgcHNsaWNlLnBhcnNlciA9IHNlbGYKKworICAgICAgICAjIElmIGlucHV0IHdhcyBzdXBwbGllZCwgcGFzcyB0byBsZXhlcgorICAgICAgICBpZiBpbnB1dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxleGVyLmlucHV0KGlucHV0KQorCisgICAgICAgIGlmIHRva2VuZnVuYyBpcyBOb25lOgorICAgICAgICAgICAjIFRva2VuaXplIGZ1bmN0aW9uCisgICAgICAgICAgIGdldF90b2tlbiA9IGxleGVyLnRva2VuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgIGdldF90b2tlbiA9IHRva2VuZnVuYworCisgICAgICAgICMgU2V0IHVwIHRoZSBzdGF0ZSBhbmQgc3ltYm9sIHN0YWNrcworCisgICAgICAgIHN0YXRlc3RhY2sgPSBbIF0gICAgICAgICAgICAgICAgIyBTdGFjayBvZiBwYXJzaW5nIHN0YXRlcworICAgICAgICBzZWxmLnN0YXRlc3RhY2sgPSBzdGF0ZXN0YWNrCisgICAgICAgIHN5bXN0YWNrICAgPSBbIF0gICAgICAgICAgICAgICAgIyBTdGFjayBvZiBncmFtbWFyIHN5bWJvbHMKKyAgICAgICAgc2VsZi5zeW1zdGFjayA9IHN5bXN0YWNrCisKKyAgICAgICAgcHNsaWNlLnN0YWNrID0gc3ltc3RhY2sgICAgICAgICAjIFB1dCBpbiB0aGUgcHJvZHVjdGlvbgorICAgICAgICBlcnJ0b2tlbiAgID0gTm9uZSAgICAgICAgICAgICAgICMgRXJyIHRva2VuCisKKyAgICAgICAgIyBUaGUgc3RhcnQgc3RhdGUgaXMgYXNzdW1lZCB0byBiZSAoMCwkZW5kKQorCisgICAgICAgIHN0YXRlc3RhY2suYXBwZW5kKDApCisgICAgICAgIHN5bSA9IFlhY2NTeW1ib2woKQorICAgICAgICBzeW0udHlwZSA9ICckZW5kJworICAgICAgICBzeW1zdGFjay5hcHBlbmQoc3ltKQorICAgICAgICBzdGF0ZSA9IDAKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICMgR2V0IHRoZSBuZXh0IHN5bWJvbCBvbiB0aGUgaW5wdXQuICBJZiBhIGxvb2thaGVhZCBzeW1ib2wKKyAgICAgICAgICAgICMgaXMgYWxyZWFkeSBzZXQsIHdlIGp1c3QgdXNlIHRoYXQuIE90aGVyd2lzZSwgd2UnbGwgcHVsbAorICAgICAgICAgICAgIyB0aGUgbmV4dCB0b2tlbiBvZmYgb2YgdGhlIGxvb2thaGVhZHN0YWNrIG9yIGZyb20gdGhlIGxleGVyCisKKyAgICAgICAgICAgIGlmIG5vdCBsb29rYWhlYWQ6CisgICAgICAgICAgICAgICAgaWYgbm90IGxvb2thaGVhZHN0YWNrOgorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBnZXRfdG9rZW4oKSAgICAgIyBHZXQgdGhlIG5leHQgdG9rZW4KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBsb29rYWhlYWRzdGFjay5wb3AoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsb29rYWhlYWQ6CisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IFlhY2NTeW1ib2woKQorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQudHlwZSA9ICckZW5kJworCisgICAgICAgICAgICAjIENoZWNrIHRoZSBhY3Rpb24gdGFibGUKKyAgICAgICAgICAgIGx0eXBlID0gbG9va2FoZWFkLnR5cGUKKyAgICAgICAgICAgIHQgPSBhY3Rpb25zW3N0YXRlXS5nZXQobHR5cGUpCisKKyAgICAgICAgICAgIGlmIHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgdCA+IDA6CisgICAgICAgICAgICAgICAgICAgICMgc2hpZnQgYSBzeW1ib2wgb24gdGhlIHN0YWNrCisgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2suYXBwZW5kKHQpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gdAorCisgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLmFwcGVuZChsb29rYWhlYWQpCisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IE5vbmUKKworICAgICAgICAgICAgICAgICAgICAjIERlY3JlYXNlIGVycm9yIGNvdW50IG9uIHN1Y2Nlc3NmdWwgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgaWYgZXJyb3Jjb3VudDogZXJyb3Jjb3VudCAtPTEKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIHQgPCAwOgorICAgICAgICAgICAgICAgICAgICAjIHJlZHVjZSBhIHN5bWJvbCBvbiB0aGUgc3RhY2ssIGVtaXQgYSBwcm9kdWN0aW9uCisgICAgICAgICAgICAgICAgICAgIHAgPSBwcm9kWy10XQorICAgICAgICAgICAgICAgICAgICBwbmFtZSA9IHAubmFtZQorICAgICAgICAgICAgICAgICAgICBwbGVuICA9IHAubGVuCisKKyAgICAgICAgICAgICAgICAgICAgIyBHZXQgcHJvZHVjdGlvbiBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICBzeW0gPSBZYWNjU3ltYm9sKCkKKyAgICAgICAgICAgICAgICAgICAgc3ltLnR5cGUgPSBwbmFtZSAgICAgICAjIFByb2R1Y3Rpb24gbmFtZQorICAgICAgICAgICAgICAgICAgICBzeW0udmFsdWUgPSBOb25lCisKKyAgICAgICAgICAgICAgICAgICAgaWYgcGxlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmcgPSBzeW1zdGFja1stcGxlbi0xOl0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdbMF0gPSBzeW0KKworICAgICAgICAgICAgICAgICAgICAgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGUgY29kZSBlbmNsb3NlZCBpbiB0aGlzIHNlY3Rpb24gaXMgZHVwbGljYXRlZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYmVsb3cgYXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uICBNYWtlIHN1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgY2hhbmdlcyBnZXQgbWFkZSBpbiBib3RoIGxvY2F0aW9ucy4KKworICAgICAgICAgICAgICAgICAgICAgICAgcHNsaWNlLnNsaWNlID0gdGFyZworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDYWxsIHRoZSBncmFtbWFyIHJ1bGUgd2l0aCBvdXIgc3BlY2lhbCBzbGljZSBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgc3ltc3RhY2tbLXBsZW46XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBzdGF0ZXN0YWNrWy1wbGVuOl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLmNhbGxhYmxlKHBzbGljZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1zdGFjay5hcHBlbmQoc3ltKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gZ290b1tzdGF0ZXN0YWNrWy0xXV1bcG5hbWVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzdGFjay5hcHBlbmQoc3RhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBhbiBlcnJvciB3YXMgc2V0LiBFbnRlciBlcnJvciByZWNvdmVyeSBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZHN0YWNrLmFwcGVuZChsb29rYWhlYWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZXN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZXN0YWNrWy0xXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bS50eXBlID0gJ2Vycm9yJworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IHN5bQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yY291bnQgPSBlcnJvcl9jb3VudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JvayA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAjICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisgICAgCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmcgPSBbIHN5bSBdCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIGNvZGUgZW5jbG9zZWQgaW4gdGhpcyBzZWN0aW9uIGlzIGR1cGxpY2F0ZWQgCisgICAgICAgICAgICAgICAgICAgICAgICAjIGFib3ZlIGFzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiAgTWFrZSBzdXJlCisgICAgICAgICAgICAgICAgICAgICAgICAjIGNoYW5nZXMgZ2V0IG1hZGUgaW4gYm90aCBsb2NhdGlvbnMuCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzbGljZS5zbGljZSA9IHRhcmcKKworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQ2FsbCB0aGUgZ3JhbW1hciBydWxlIHdpdGggb3VyIHNwZWNpYWwgc2xpY2Ugb2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5jYWxsYWJsZShwc2xpY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltc3RhY2suYXBwZW5kKHN5bSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IGdvdG9bc3RhdGVzdGFja1stMV1dW3BuYW1lXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2suYXBwZW5kKHN0YXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgYW4gZXJyb3Igd2FzIHNldC4gRW50ZXIgZXJyb3IgcmVjb3Zlcnkgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWRzdGFjay5hcHBlbmQobG9va2FoZWFkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVzdGFja1stMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0udHlwZSA9ICdlcnJvcicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBzeW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmNvdW50ID0gZXJyb3JfY291bnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yb2sgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorCisgICAgICAgICAgICAgICAgaWYgdCA9PSAwOgorICAgICAgICAgICAgICAgICAgICBuID0gc3ltc3RhY2tbLTFdCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKG4sInZhbHVlIixOb25lKQorCisgICAgICAgICAgICBpZiB0ID09IE5vbmU6CisKKyAgICAgICAgICAgICAgICAjIFdlIGhhdmUgc29tZSBraW5kIG9mIHBhcnNpbmcgZXJyb3IgaGVyZS4gIFRvIGhhbmRsZQorICAgICAgICAgICAgICAgICMgdGhpcywgd2UgYXJlIGdvaW5nIHRvIHB1c2ggdGhlIGN1cnJlbnQgdG9rZW4gb250bworICAgICAgICAgICAgICAgICMgdGhlIHRva2Vuc3RhY2sgYW5kIHJlcGxhY2UgaXQgd2l0aCBhbiAnZXJyb3InIHRva2VuLgorICAgICAgICAgICAgICAgICMgSWYgdGhlcmUgYXJlIGFueSBzeW5jaHJvbml6YXRpb24gcnVsZXMsIHRoZXkgbWF5CisgICAgICAgICAgICAgICAgIyBjYXRjaCBpdC4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBJbiBhZGRpdGlvbiB0byBwdXNoaW5nIHRoZSBlcnJvciB0b2tlbiwgd2UgY2FsbCBjYWxsCisgICAgICAgICAgICAgICAgIyB0aGUgdXNlciBkZWZpbmVkIHBfZXJyb3IoKSBmdW5jdGlvbiBpZiB0aGlzIGlzIHRoZQorICAgICAgICAgICAgICAgICMgZmlyc3Qgc3ludGF4IGVycm9yLiAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBpZgorICAgICAgICAgICAgICAgICMgZXJyb3Jjb3VudCA9PSAwLgorICAgICAgICAgICAgICAgIGlmIGVycm9yY291bnQgPT0gMCBvciBzZWxmLmVycm9yb2s6CisgICAgICAgICAgICAgICAgICAgIGVycm9yY291bnQgPSBlcnJvcl9jb3VudAorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yb2sgPSAwCisgICAgICAgICAgICAgICAgICAgIGVycnRva2VuID0gbG9va2FoZWFkCisgICAgICAgICAgICAgICAgICAgIGlmIGVycnRva2VuLnR5cGUgPT0gJyRlbmQnOgorICAgICAgICAgICAgICAgICAgICAgICAgZXJydG9rZW4gPSBOb25lICAgICAgICAgICAgICAgIyBFbmQgb2YgZmlsZSEKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5lcnJvcmZ1bmM6CisgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwgZXJyb2ssdG9rZW4scmVzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb2sgPSBzZWxmLmVycm9rICAgICAgICAjIFNldCBzb21lIHNwZWNpYWwgZnVuY3Rpb25zIGF2YWlsYWJsZSBpbiBlcnJvciByZWNvdmVyeQorICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBnZXRfdG9rZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RhcnQgPSBzZWxmLnJlc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVycnRva2VuIGFuZCBub3QgaGFzYXR0cihlcnJ0b2tlbiwnbGV4ZXInKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJ0b2tlbi5sZXhlciA9IGxleGVyCisgICAgICAgICAgICAgICAgICAgICAgICB0b2sgPSBzZWxmLmVycm9yZnVuYyhlcnJ0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBlcnJvaywgdG9rZW4sIHJlc3RhcnQgICAjIERlbGV0ZSBzcGVjaWFsIGZ1bmN0aW9ucworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmVycm9yb2s6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBVc2VyIG11c3QgaGF2ZSBkb25lIHNvbWUga2luZCBvZiBwYW5pYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbW9kZSByZWNvdmVyeSBvbiB0aGVpciBvd24uICBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJldHVybmVkIHRva2VuIGlzIHRoZSBuZXh0IGxvb2thaGVhZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IHRvaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycnRva2VuID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnJ0b2tlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGVycnRva2VuLCJsaW5lbm8iKTogbGluZW5vID0gbG9va2FoZWFkLmxpbmVubworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6IGxpbmVubyA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lbm86CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInlhY2M6IFN5bnRheCBlcnJvciBhdCBsaW5lICVkLCB0b2tlbj0lc1xuIiAlIChsaW5lbm8sIGVycnRva2VuLnR5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInlhY2M6IFN5bnRheCBlcnJvciwgdG9rZW49JXMiICUgZXJydG9rZW4udHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgieWFjYzogUGFyc2UgZXJyb3IgaW4gaW5wdXQuIEVPRlxuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGVycm9yY291bnQgPSBlcnJvcl9jb3VudAorCisgICAgICAgICAgICAgICAgIyBjYXNlIDE6ICB0aGUgc3RhdGVzdGFjayBvbmx5IGhhcyAxIGVudHJ5IG9uIGl0LiAgSWYgd2UncmUgaW4gdGhpcyBzdGF0ZSwgdGhlCisgICAgICAgICAgICAgICAgIyBlbnRpcmUgcGFyc2UgaGFzIGJlZW4gcm9sbGVkIGJhY2sgYW5kIHdlJ3JlIGNvbXBsZXRlbHkgaG9zZWQuICAgVGhlIHRva2VuIGlzCisgICAgICAgICAgICAgICAgIyBkaXNjYXJkZWQgYW5kIHdlIGp1c3Qga2VlcCBnb2luZy4KKworICAgICAgICAgICAgICAgIGlmIGxlbihzdGF0ZXN0YWNrKSA8PSAxIGFuZCBsb29rYWhlYWQudHlwZSAhPSAnJGVuZCc6CisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgZXJydG9rZW4gPSBOb25lCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMAorICAgICAgICAgICAgICAgICAgICAjIE51a2UgdGhlIHB1c2hiYWNrIHN0YWNrCisgICAgICAgICAgICAgICAgICAgIGRlbCBsb29rYWhlYWRzdGFja1s6XQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgIyBjYXNlIDI6IHRoZSBzdGF0ZXN0YWNrIGhhcyBhIGNvdXBsZSBvZiBlbnRyaWVzIG9uIGl0LCBidXQgd2UncmUKKyAgICAgICAgICAgICAgICAjIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuIG51a2UgdGhlIHRvcCBlbnRyeSBhbmQgZ2VuZXJhdGUgYW4gZXJyb3IgdG9rZW4KKworICAgICAgICAgICAgICAgICMgU3RhcnQgbnVraW5nIGVudHJpZXMgb24gdGhlIHN0YWNrCisgICAgICAgICAgICAgICAgaWYgbG9va2FoZWFkLnR5cGUgPT0gJyRlbmQnOgorICAgICAgICAgICAgICAgICAgICAjIFdob2EuIFdlJ3JlIHJlYWxseSBob3NlZCBoZXJlLiBCYWlsIG91dAorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgICAgIGlmIGxvb2thaGVhZC50eXBlICE9ICdlcnJvcic6CisgICAgICAgICAgICAgICAgICAgIHN5bSA9IHN5bXN0YWNrWy0xXQorICAgICAgICAgICAgICAgICAgICBpZiBzeW0udHlwZSA9PSAnZXJyb3InOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBIbW1tLiBFcnJvciBpcyBvbiB0b3Agb2Ygc3RhY2ssIHdlJ2xsIGp1c3QgbnVrZSBpbnB1dAorICAgICAgICAgICAgICAgICAgICAgICAgIyBzeW1ib2wgYW5kIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICB0ID0gWWFjY1N5bWJvbCgpCisgICAgICAgICAgICAgICAgICAgIHQudHlwZSA9ICdlcnJvcicKKyAgICAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihsb29rYWhlYWQsImxpbmVubyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgdC5saW5lbm8gPSBsb29rYWhlYWQubGluZW5vCisgICAgICAgICAgICAgICAgICAgIHQudmFsdWUgPSBsb29rYWhlYWQKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkc3RhY2suYXBwZW5kKGxvb2thaGVhZCkKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gdAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZXN0YWNrWy0xXSAgICAgICAjIFBvdGVudGlhbCBidWcgZml4CisKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIENhbGwgYW4gZXJyb3IgZnVuY3Rpb24gaGVyZQorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJ5YWNjOiBpbnRlcm5hbCBwYXJzZXIgZXJyb3IhISFcbiIpCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgID09PSBHcmFtbWFyIFJlcHJlc2VudGF0aW9uID09PQorIworIyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucywgY2xhc3NlcywgYW5kIHZhcmlhYmxlcyBhcmUgdXNlZCB0byByZXByZXNlbnQgYW5kCisjIG1hbmlwdWxhdGUgdGhlIHJ1bGVzIHRoYXQgbWFrZSB1cCBhIGdyYW1tYXIuIAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitpbXBvcnQgcmUKKworIyByZWdleCBtYXRjaGluZyBpZGVudGlmaWVycworX2lzX2lkZW50aWZpZXIgPSByZS5jb21waWxlKHInXlthLXpBLVowLTlfLV0rJCcpCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY2xhc3MgUHJvZHVjdGlvbjoKKyMKKyMgVGhpcyBjbGFzcyBzdG9yZXMgdGhlIHJhdyBpbmZvcm1hdGlvbiBhYm91dCBhIHNpbmdsZSBwcm9kdWN0aW9uIG9yIGdyYW1tYXIgcnVsZS4KKyMgQSBncmFtbWFyIHJ1bGUgcmVmZXJzIHRvIGEgc3BlY2lmaWNhdGlvbiBzdWNoIGFzIHRoaXM6CisjCisjICAgICAgIGV4cHIgOiBleHByIFBMVVMgdGVybSAKKyMKKyMgSGVyZSBhcmUgdGhlIGJhc2ljIGF0dHJpYnV0ZXMgZGVmaW5lZCBvbiBhbGwgcHJvZHVjdGlvbnMKKyMKKyMgICAgICAgbmFtZSAgICAgLSBOYW1lIG9mIHRoZSBwcm9kdWN0aW9uLiAgRm9yIGV4YW1wbGUgJ2V4cHInCisjICAgICAgIHByb2QgICAgIC0gQSBsaXN0IG9mIHN5bWJvbHMgb24gdGhlIHJpZ2h0IHNpZGUgWydleHByJywnUExVUycsJ3Rlcm0nXQorIyAgICAgICBwcmVjICAgICAtIFByb2R1Y3Rpb24gcHJlY2VkZW5jZSBsZXZlbAorIyAgICAgICBudW1iZXIgICAtIFByb2R1Y3Rpb24gbnVtYmVyLgorIyAgICAgICBmdW5jICAgICAtIEZ1bmN0aW9uIHRoYXQgZXhlY3V0ZXMgb24gcmVkdWNlCisjICAgICAgIGZpbGUgICAgIC0gRmlsZSB3aGVyZSBwcm9kdWN0aW9uIGZ1bmN0aW9uIGlzIGRlZmluZWQKKyMgICAgICAgbGluZW5vICAgLSBMaW5lIG51bWJlciB3aGVyZSBwcm9kdWN0aW9uIGZ1bmN0aW9uIGlzIGRlZmluZWQKKyMKKyMgVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkIG9yIG9wdGlvbmFsLgorIworIyAgICAgICBsZW4gICAgICAgLSBMZW5ndGggb2YgdGhlIHByb2R1Y3Rpb24gKG51bWJlciBvZiBzeW1ib2xzIG9uIHJpZ2h0IGhhbmQgc2lkZSkKKyMgICAgICAgdXN5bXMgICAgIC0gU2V0IG9mIHVuaXF1ZSBzeW1ib2xzIGZvdW5kIGluIHRoZSBwcm9kdWN0aW9uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFByb2R1Y3Rpb24ob2JqZWN0KToKKyAgICByZWR1Y2VkID0gMAorICAgIGRlZiBfX2luaXRfXyhzZWxmLG51bWJlcixuYW1lLHByb2QscHJlY2VkZW5jZT0oJ3JpZ2h0JywwKSxmdW5jPU5vbmUsZmlsZT0nJyxsaW5lPTApOgorICAgICAgICBzZWxmLm5hbWUgICAgID0gbmFtZQorICAgICAgICBzZWxmLnByb2QgICAgID0gdHVwbGUocHJvZCkKKyAgICAgICAgc2VsZi5udW1iZXIgICA9IG51bWJlcgorICAgICAgICBzZWxmLmZ1bmMgICAgID0gZnVuYworICAgICAgICBzZWxmLmNhbGxhYmxlID0gTm9uZQorICAgICAgICBzZWxmLmZpbGUgICAgID0gZmlsZQorICAgICAgICBzZWxmLmxpbmUgICAgID0gbGluZQorICAgICAgICBzZWxmLnByZWMgICAgID0gcHJlY2VkZW5jZQorCisgICAgICAgICMgSW50ZXJuYWwgc2V0dGluZ3MgdXNlZCBkdXJpbmcgdGFibGUgY29uc3RydWN0aW9uCisgICAgICAgIAorICAgICAgICBzZWxmLmxlbiAgPSBsZW4oc2VsZi5wcm9kKSAgICMgTGVuZ3RoIG9mIHRoZSBwcm9kdWN0aW9uCisKKyAgICAgICAgIyBDcmVhdGUgYSBsaXN0IG9mIHVuaXF1ZSBwcm9kdWN0aW9uIHN5bWJvbHMgdXNlZCBpbiB0aGUgcHJvZHVjdGlvbgorICAgICAgICBzZWxmLnVzeW1zID0gWyBdICAgICAgICAgICAgIAorICAgICAgICBmb3IgcyBpbiBzZWxmLnByb2Q6CisgICAgICAgICAgICBpZiBzIG5vdCBpbiBzZWxmLnVzeW1zOgorICAgICAgICAgICAgICAgIHNlbGYudXN5bXMuYXBwZW5kKHMpCisKKyAgICAgICAgIyBMaXN0IG9mIGFsbCBMUiBpdGVtcyBmb3IgdGhlIHByb2R1Y3Rpb24KKyAgICAgICAgc2VsZi5scl9pdGVtcyA9IFtdCisgICAgICAgIHNlbGYubHJfbmV4dCA9IE5vbmUKKworICAgICAgICAjIENyZWF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbgorICAgICAgICBpZiBzZWxmLnByb2Q6CisgICAgICAgICAgICBzZWxmLnN0ciA9ICIlcyAtPiAlcyIgJSAoc2VsZi5uYW1lLCIgIi5qb2luKHNlbGYucHJvZCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnN0ciA9ICIlcyAtPiA8ZW1wdHk+IiAlIHNlbGYubmFtZQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnN0cgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlByb2R1Y3Rpb24oIitzdHIoc2VsZikrIikiCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLnByb2QpCisKKyAgICBkZWYgX19ub256ZXJvX18oc2VsZik6CisgICAgICAgIHJldHVybiAxCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZixpbmRleCk6CisgICAgICAgIHJldHVybiBzZWxmLnByb2RbaW5kZXhdCisgICAgICAgICAgICAKKyAgICAjIFJldHVybiB0aGUgbnRoIGxyX2l0ZW0gZnJvbSB0aGUgcHJvZHVjdGlvbiAob3IgTm9uZSBpZiBhdCB0aGUgZW5kKQorICAgIGRlZiBscl9pdGVtKHNlbGYsbik6CisgICAgICAgIGlmIG4gPiBsZW4oc2VsZi5wcm9kKTogcmV0dXJuIE5vbmUKKyAgICAgICAgcCA9IExSSXRlbShzZWxmLG4pCisKKyAgICAgICAgIyBQcmVjb21wdXRlIHRoZSBsaXN0IG9mIHByb2R1Y3Rpb25zIGltbWVkaWF0ZWx5IGZvbGxvd2luZy4gIEhhY2suIFJlbW92ZSBsYXRlcgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwLmxyX2FmdGVyID0gUHJvZG5hbWVzW3AucHJvZFtuKzFdXQorICAgICAgICBleGNlcHQgKEluZGV4RXJyb3IsS2V5RXJyb3IpOgorICAgICAgICAgICAgcC5scl9hZnRlciA9IFtdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHAubHJfYmVmb3JlID0gcC5wcm9kW24tMV0KKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBwLmxyX2JlZm9yZSA9IE5vbmUKKworICAgICAgICByZXR1cm4gcAorICAgIAorICAgICMgQmluZCB0aGUgcHJvZHVjdGlvbiBmdW5jdGlvbiBuYW1lIHRvIGEgY2FsbGFibGUKKyAgICBkZWYgYmluZChzZWxmLHBkaWN0KToKKyAgICAgICAgaWYgc2VsZi5mdW5jOgorICAgICAgICAgICAgc2VsZi5jYWxsYWJsZSA9IHBkaWN0W3NlbGYuZnVuY10KKworIyBUaGlzIGNsYXNzIHNlcnZlcyBhcyBhIG1pbmltYWwgc3RhbmRpbiBmb3IgUHJvZHVjdGlvbiBvYmplY3RzIHdoZW4KKyMgcmVhZGluZyB0YWJsZSBkYXRhIGZyb20gZmlsZXMuICAgSXQgb25seSBjb250YWlucyBpbmZvcm1hdGlvbgorIyBhY3R1YWxseSB1c2VkIGJ5IHRoZSBMUiBwYXJzaW5nIGVuZ2luZSwgcGx1cyBzb21lIGFkZGl0aW9uYWwKKyMgZGVidWdnaW5nIGluZm9ybWF0aW9uLgorY2xhc3MgTWluaVByb2R1Y3Rpb24ob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZixzdHIsbmFtZSxsZW4sZnVuYyxmaWxlLGxpbmUpOgorICAgICAgICBzZWxmLm5hbWUgICAgID0gbmFtZQorICAgICAgICBzZWxmLmxlbiAgICAgID0gbGVuCisgICAgICAgIHNlbGYuZnVuYyAgICAgPSBmdW5jCisgICAgICAgIHNlbGYuY2FsbGFibGUgPSBOb25lCisgICAgICAgIHNlbGYuZmlsZSAgICAgPSBmaWxlCisgICAgICAgIHNlbGYubGluZSAgICAgPSBsaW5lCisgICAgICAgIHNlbGYuc3RyICAgICAgPSBzdHIKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc3RyCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIk1pbmlQcm9kdWN0aW9uKCVzKSIgJSBzZWxmLnN0cgorCisgICAgIyBCaW5kIHRoZSBwcm9kdWN0aW9uIGZ1bmN0aW9uIG5hbWUgdG8gYSBjYWxsYWJsZQorICAgIGRlZiBiaW5kKHNlbGYscGRpY3QpOgorICAgICAgICBpZiBzZWxmLmZ1bmM6CisgICAgICAgICAgICBzZWxmLmNhbGxhYmxlID0gcGRpY3Rbc2VsZi5mdW5jXQorCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY2xhc3MgTFJJdGVtCisjCisjIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHNwZWNpZmljIHN0YWdlIG9mIHBhcnNpbmcgYSBwcm9kdWN0aW9uIHJ1bGUuICBGb3IKKyMgZXhhbXBsZTogCisjCisjICAgICAgIGV4cHIgOiBleHByIC4gUExVUyB0ZXJtIAorIworIyBJbiB0aGUgYWJvdmUsIHRoZSAiLiIgcmVwcmVzZW50cyB0aGUgY3VycmVudCBsb2NhdGlvbiBvZiB0aGUgcGFyc2UuICBIZXJlCisjIGJhc2ljIGF0dHJpYnV0ZXM6CisjCisjICAgICAgIG5hbWUgICAgICAgLSBOYW1lIG9mIHRoZSBwcm9kdWN0aW9uLiAgRm9yIGV4YW1wbGUgJ2V4cHInCisjICAgICAgIHByb2QgICAgICAgLSBBIGxpc3Qgb2Ygc3ltYm9scyBvbiB0aGUgcmlnaHQgc2lkZSBbJ2V4cHInLCcuJywgJ1BMVVMnLCd0ZXJtJ10KKyMgICAgICAgbnVtYmVyICAgICAtIFByb2R1Y3Rpb24gbnVtYmVyLgorIworIyAgICAgICBscl9uZXh0ICAgICAgTmV4dCBMUiBpdGVtLiBFeGFtcGxlLCBpZiB3ZSBhcmUgJyBleHByIC0+IGV4cHIgLiBQTFVTIHRlcm0nCisjICAgICAgICAgICAgICAgICAgICB0aGVuIGxyX25leHQgcmVmZXJzIHRvICdleHByIC0+IGV4cHIgUExVUyAuIHRlcm0nCisjICAgICAgIGxyX2luZGV4ICAgLSBMUiBpdGVtIGluZGV4IChsb2NhdGlvbiBvZiB0aGUgIi4iKSBpbiB0aGUgcHJvZCBsaXN0LgorIyAgICAgICBsb29rYWhlYWRzIC0gTEFMUiBsb29rYWhlYWQgc3ltYm9scyBmb3IgdGhpcyBpdGVtCisjICAgICAgIGxlbiAgICAgICAgLSBMZW5ndGggb2YgdGhlIHByb2R1Y3Rpb24gKG51bWJlciBvZiBzeW1ib2xzIG9uIHJpZ2h0IGhhbmQgc2lkZSkKKyMgICAgICAgbHJfYWZ0ZXIgICAgLSBMaXN0IG9mIGFsbCBwcm9kdWN0aW9ucyB0aGF0IGltbWVkaWF0ZWx5IGZvbGxvdworIyAgICAgICBscl9iZWZvcmUgICAtIEdyYW1tYXIgc3ltYm9sIGltbWVkaWF0ZWx5IGJlZm9yZQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBMUkl0ZW0ob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZixwLG4pOgorICAgICAgICBzZWxmLm5hbWUgICAgICAgPSBwLm5hbWUKKyAgICAgICAgc2VsZi5wcm9kICAgICAgID0gbGlzdChwLnByb2QpCisgICAgICAgIHNlbGYubnVtYmVyICAgICA9IHAubnVtYmVyCisgICAgICAgIHNlbGYubHJfaW5kZXggICA9IG4KKyAgICAgICAgc2VsZi5sb29rYWhlYWRzID0geyB9CisgICAgICAgIHNlbGYucHJvZC5pbnNlcnQobiwiLiIpCisgICAgICAgIHNlbGYucHJvZCAgICAgICA9IHR1cGxlKHNlbGYucHJvZCkKKyAgICAgICAgc2VsZi5sZW4gICAgICAgID0gbGVuKHNlbGYucHJvZCkKKyAgICAgICAgc2VsZi51c3ltcyAgICAgID0gcC51c3ltcworCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYucHJvZDoKKyAgICAgICAgICAgIHMgPSAiJXMgLT4gJXMiICUgKHNlbGYubmFtZSwiICIuam9pbihzZWxmLnByb2QpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcyA9ICIlcyAtPiA8ZW1wdHk+IiAlIHNlbGYubmFtZQorICAgICAgICByZXR1cm4gcworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIkxSSXRlbSgiK3N0cihzZWxmKSsiKSIKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyByaWdodG1vc3RfdGVybWluYWwoKQorIworIyBSZXR1cm4gdGhlIHJpZ2h0bW9zdCB0ZXJtaW5hbCBmcm9tIGEgbGlzdCBvZiBzeW1ib2xzLiAgVXNlZCBpbiBhZGRfcHJvZHVjdGlvbigpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkZWYgcmlnaHRtb3N0X3Rlcm1pbmFsKHN5bWJvbHMsIHRlcm1pbmFscyk6CisgICAgaSA9IGxlbihzeW1ib2xzKSAtIDEKKyAgICB3aGlsZSBpID49IDA6CisgICAgICAgIGlmIHN5bWJvbHNbaV0gaW4gdGVybWluYWxzOgorICAgICAgICAgICAgcmV0dXJuIHN5bWJvbHNbaV0KKyAgICAgICAgaSAtPSAxCisgICAgcmV0dXJuIE5vbmUKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgID09PSBHUkFNTUFSIENMQVNTID09PQorIworIyBUaGUgZm9sbG93aW5nIGNsYXNzIHJlcHJlc2VudHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBzcGVjaWZpZWQgZ3JhbW1hciBhbG9uZworIyB3aXRoIHZhcmlvdXMgY29tcHV0ZWQgcHJvcGVydGllcyBzdWNoIGFzIGZpcnN0IHNldHMsIGZvbGxvdyBzZXRzLCBMUiBpdGVtcywgZXRjLgorIyBUaGlzIGRhdGEgaXMgdXNlZCBmb3IgY3JpdGljYWwgcGFydHMgb2YgdGhlIHRhYmxlIGdlbmVyYXRpb24gcHJvY2VzcyBsYXRlci4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgR3JhbW1hckVycm9yKFlhY2NFcnJvcik6IHBhc3MKKworY2xhc3MgR3JhbW1hcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLHRlcm1pbmFscyk6CisgICAgICAgIHNlbGYuUHJvZHVjdGlvbnMgID0gW05vbmVdICAjIEEgbGlzdCBvZiBhbGwgb2YgdGhlIHByb2R1Y3Rpb25zLiAgVGhlIGZpcnN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGVudHJ5IGlzIGFsd2F5cyByZXNlcnZlZCBmb3IgdGhlIHB1cnBvc2Ugb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYnVpbGRpbmcgYW4gYXVnbWVudGVkIGdyYW1tYXIKKworICAgICAgICBzZWxmLlByb2RuYW1lcyAgICA9IHsgfSAgICAgIyBBIGRpY3Rpb25hcnkgbWFwcGluZyB0aGUgbmFtZXMgb2Ygbm9udGVybWluYWxzIHRvIGEgbGlzdCBvZiBhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcHJvZHVjdGlvbnMgb2YgdGhhdCBub250ZXJtaW5hbC4KKworICAgICAgICBzZWxmLlByb2RtYXAgICAgICA9IHsgfSAgICAgIyBBIGRpY3Rpb25hcnkgdGhhdCBpcyBvbmx5IHVzZWQgdG8gZGV0ZWN0IGR1cGxpY2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwcm9kdWN0aW9ucy4KKworICAgICAgICBzZWxmLlRlcm1pbmFscyAgICA9IHsgfSAgICAgIyBBIGRpY3Rpb25hcnkgbWFwcGluZyB0aGUgbmFtZXMgb2YgdGVybWluYWwgc3ltYm9scyB0byBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGxpc3Qgb2YgdGhlIHJ1bGVzIHdoZXJlIHRoZXkgYXJlIHVzZWQuCisKKyAgICAgICAgZm9yIHRlcm0gaW4gdGVybWluYWxzOgorICAgICAgICAgICAgc2VsZi5UZXJtaW5hbHNbdGVybV0gPSBbXQorCisgICAgICAgIHNlbGYuVGVybWluYWxzWydlcnJvciddID0gW10KKworICAgICAgICBzZWxmLk5vbnRlcm1pbmFscyA9IHsgfSAgICAgIyBBIGRpY3Rpb25hcnkgbWFwcGluZyBuYW1lcyBvZiBub250ZXJtaW5hbHMgdG8gYSBsaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9mIHJ1bGUgbnVtYmVycyB3aGVyZSB0aGV5IGFyZSB1c2VkLgorCisgICAgICAgIHNlbGYuRmlyc3QgICAgICAgID0geyB9ICAgICAjIEEgZGljdGlvbmFyeSBvZiBwcmVjb21wdXRlZCBGSVJTVCh4KSBzeW1ib2xzCisKKyAgICAgICAgc2VsZi5Gb2xsb3cgICAgICAgPSB7IH0gICAgICMgQSBkaWN0aW9uYXJ5IG9mIHByZWNvbXB1dGVkIEZPTExPVyh4KSBzeW1ib2xzCisKKyAgICAgICAgc2VsZi5QcmVjZWRlbmNlICAgPSB7IH0gICAgICMgUHJlY2VkZW5jZSBydWxlcyBmb3IgZWFjaCB0ZXJtaW5hbC4gQ29udGFpbnMgdHVwbGVzIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmb3JtICgncmlnaHQnLGxldmVsKSBvciAoJ25vbmFzc29jJywgbGV2ZWwpIG9yICgnbGVmdCcsbGV2ZWwpCisKKyAgICAgICAgc2VsZi5Vc2VkUHJlY2VkZW5jZSA9IHsgfSAgICMgUHJlY2VkZW5jZSBydWxlcyB0aGF0IHdlcmUgYWN0dWFsbHkgdXNlZCBieSB0aGUgZ3JhbW1lci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBvbmx5IHVzZWQgdG8gcHJvdmlkZSBlcnJvciBjaGVja2luZyBhbmQgdG8gZ2VuZXJhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYSB3YXJuaW5nIGFib3V0IHVudXNlZCBwcmVjZWRlbmNlIHJ1bGVzLgorCisgICAgICAgIHNlbGYuU3RhcnQgPSBOb25lICAgICAgICAgICAjIFN0YXJ0aW5nIHN5bWJvbCBmb3IgdGhlIGdyYW1tYXIKKworCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5Qcm9kdWN0aW9ucykKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLGluZGV4KToKKyAgICAgICAgcmV0dXJuIHNlbGYuUHJvZHVjdGlvbnNbaW5kZXhdCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBzZXRfcHJlY2VkZW5jZSgpCisgICAgIworICAgICMgU2V0cyB0aGUgcHJlY2VkZW5jZSBmb3IgYSBnaXZlbiB0ZXJtaW5hbC4gYXNzb2MgaXMgdGhlIGFzc29jaWF0aXZpdHkgc3VjaCBhcworICAgICMgJ2xlZnQnLCdyaWdodCcsIG9yICdub25hc3NvYycuICBsZXZlbCBpcyBhIG51bWVyaWMgbGV2ZWwuCisgICAgIworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiBzZXRfcHJlY2VkZW5jZShzZWxmLHRlcm0sYXNzb2MsbGV2ZWwpOgorICAgICAgICBhc3NlcnQgc2VsZi5Qcm9kdWN0aW9ucyA9PSBbTm9uZV0sIk11c3QgY2FsbCBzZXRfcHJlY2VkZW5jZSgpIGJlZm9yZSBhZGRfcHJvZHVjdGlvbigpIgorICAgICAgICBpZiB0ZXJtIGluIHNlbGYuUHJlY2VkZW5jZToKKyAgICAgICAgICAgIHJhaXNlIEdyYW1tYXJFcnJvcigiUHJlY2VkZW5jZSBhbHJlYWR5IHNwZWNpZmllZCBmb3IgdGVybWluYWwgJyVzJyIgJSB0ZXJtKQorICAgICAgICBpZiBhc3NvYyBub3QgaW4gWydsZWZ0JywncmlnaHQnLCdub25hc3NvYyddOgorICAgICAgICAgICAgcmFpc2UgR3JhbW1hckVycm9yKCJBc3NvY2lhdGl2aXR5IG11c3QgYmUgb25lIG9mICdsZWZ0JywncmlnaHQnLCBvciAnbm9uYXNzb2MnIikKKyAgICAgICAgc2VsZi5QcmVjZWRlbmNlW3Rlcm1dID0gKGFzc29jLGxldmVsKQorIAorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGFkZF9wcm9kdWN0aW9uKCkKKyAgICAjCisgICAgIyBHaXZlbiBhbiBhY3Rpb24gZnVuY3Rpb24sIHRoaXMgZnVuY3Rpb24gYXNzZW1ibGVzIGEgcHJvZHVjdGlvbiBydWxlIGFuZAorICAgICMgY29tcHV0ZXMgaXRzIHByZWNlZGVuY2UgbGV2ZWwuCisgICAgIworICAgICMgVGhlIHByb2R1Y3Rpb24gcnVsZSBpcyBzdXBwbGllZCBhcyBhIGxpc3Qgb2Ygc3ltYm9scy4gICBGb3IgZXhhbXBsZSwKKyAgICAjIGEgcnVsZSBzdWNoIGFzICdleHByIDogZXhwciBQTFVTIHRlcm0nIGhhcyBhIHByb2R1Y3Rpb24gbmFtZSBvZiAnZXhwcicgYW5kCisgICAgIyBzeW1ib2xzIFsnZXhwcicsJ1BMVVMnLCd0ZXJtJ10uCisgICAgIworICAgICMgUHJlY2VkZW5jZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBwcmVjZWRlbmNlIG9mIHRoZSByaWdodC1tb3N0IG5vbi10ZXJtaW5hbAorICAgICMgb3IgdGhlIHByZWNlZGVuY2Ugb2YgYSB0ZXJtaW5hbCBzcGVjaWZpZWQgYnkgJXByZWMuCisgICAgIworICAgICMgQSB2YXJpZXR5IG9mIGVycm9yIGNoZWNrcyBhcmUgcGVyZm9ybWVkIHRvIG1ha2Ugc3VyZSBwcm9kdWN0aW9uIHN5bWJvbHMKKyAgICAjIGFyZSB2YWxpZCBhbmQgdGhhdCAlcHJlYyBpcyB1c2VkIGNvcnJlY3RseS4KKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgYWRkX3Byb2R1Y3Rpb24oc2VsZixwcm9kbmFtZSxzeW1zLGZ1bmM9Tm9uZSxmaWxlPScnLGxpbmU9MCk6CisKKyAgICAgICAgaWYgcHJvZG5hbWUgaW4gc2VsZi5UZXJtaW5hbHM6CisgICAgICAgICAgICByYWlzZSBHcmFtbWFyRXJyb3IoIiVzOiVkOiBJbGxlZ2FsIHJ1bGUgbmFtZSAnJXMnLiBBbHJlYWR5IGRlZmluZWQgYXMgYSB0b2tlbiIgJSAoZmlsZSxsaW5lLHByb2RuYW1lKSkKKyAgICAgICAgaWYgcHJvZG5hbWUgPT0gJ2Vycm9yJzoKKyAgICAgICAgICAgIHJhaXNlIEdyYW1tYXJFcnJvcigiJXM6JWQ6IElsbGVnYWwgcnVsZSBuYW1lICclcycuIGVycm9yIGlzIGEgcmVzZXJ2ZWQgd29yZCIgJSAoZmlsZSxsaW5lLHByb2RuYW1lKSkKKyAgICAgICAgaWYgbm90IF9pc19pZGVudGlmaWVyLm1hdGNoKHByb2RuYW1lKToKKyAgICAgICAgICAgIHJhaXNlIEdyYW1tYXJFcnJvcigiJXM6JWQ6IElsbGVnYWwgcnVsZSBuYW1lICclcyciICUgKGZpbGUsbGluZSxwcm9kbmFtZSkpCisKKyAgICAgICAgIyBMb29rIGZvciBsaXRlcmFsIHRva2VucyAKKyAgICAgICAgZm9yIG4scyBpbiBlbnVtZXJhdGUoc3ltcyk6CisgICAgICAgICAgICBpZiBzWzBdIGluICInXCIiOgorICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICBjID0gZXZhbChzKQorICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbihjKSA+IDEpOgorICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBHcmFtbWFyRXJyb3IoIiVzOiVkOiBMaXRlcmFsIHRva2VuICVzIGluIHJ1bGUgJyVzJyBtYXkgb25seSBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIiICUgKGZpbGUsbGluZSxzLCBwcm9kbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICBpZiBub3QgYyBpbiBzZWxmLlRlcm1pbmFsczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5UZXJtaW5hbHNbY10gPSBbXQorICAgICAgICAgICAgICAgICAgICAgc3ltc1tuXSA9IGMKKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGlmIG5vdCBfaXNfaWRlbnRpZmllci5tYXRjaChzKSBhbmQgcyAhPSAnJXByZWMnOgorICAgICAgICAgICAgICAgIHJhaXNlIEdyYW1tYXJFcnJvcigiJXM6JWQ6IElsbGVnYWwgbmFtZSAnJXMnIGluIHJ1bGUgJyVzJyIgJSAoZmlsZSxsaW5lLHMsIHByb2RuYW1lKSkKKyAgICAgICAgCisgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBwcmVjZWRlbmNlIGxldmVsCisgICAgICAgIGlmICclcHJlYycgaW4gc3ltczoKKyAgICAgICAgICAgIGlmIHN5bXNbLTFdID09ICclcHJlYyc6CisgICAgICAgICAgICAgICAgcmFpc2UgR3JhbW1hckVycm9yKCIlczolZDogU3ludGF4IGVycm9yLiBOb3RoaW5nIGZvbGxvd3MgJSVwcmVjIiAlIChmaWxlLGxpbmUpKQorICAgICAgICAgICAgaWYgc3ltc1stMl0gIT0gJyVwcmVjJzoKKyAgICAgICAgICAgICAgICByYWlzZSBHcmFtbWFyRXJyb3IoIiVzOiVkOiBTeW50YXggZXJyb3IuICUlcHJlYyBjYW4gb25seSBhcHBlYXIgYXQgdGhlIGVuZCBvZiBhIGdyYW1tYXIgcnVsZSIgJSAoZmlsZSxsaW5lKSkKKyAgICAgICAgICAgIHByZWNuYW1lID0gc3ltc1stMV0KKyAgICAgICAgICAgIHByb2RwcmVjID0gc2VsZi5QcmVjZWRlbmNlLmdldChwcmVjbmFtZSxOb25lKQorICAgICAgICAgICAgaWYgbm90IHByb2RwcmVjOgorICAgICAgICAgICAgICAgIHJhaXNlIEdyYW1tYXJFcnJvcigiJXM6JWQ6IE5vdGhpbmcga25vd24gYWJvdXQgdGhlIHByZWNlZGVuY2Ugb2YgJyVzJyIgJSAoZmlsZSxsaW5lLHByZWNuYW1lKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5Vc2VkUHJlY2VkZW5jZVtwcmVjbmFtZV0gPSAxCisgICAgICAgICAgICBkZWwgc3ltc1stMjpdICAgICAjIERyb3AgJXByZWMgZnJvbSB0aGUgcnVsZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBJZiBubyAlcHJlYywgcHJlY2VkZW5jZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSByaWdodG1vc3QgdGVybWluYWwgc3ltYm9sCisgICAgICAgICAgICBwcmVjbmFtZSA9IHJpZ2h0bW9zdF90ZXJtaW5hbChzeW1zLHNlbGYuVGVybWluYWxzKQorICAgICAgICAgICAgcHJvZHByZWMgPSBzZWxmLlByZWNlZGVuY2UuZ2V0KHByZWNuYW1lLCgncmlnaHQnLDApKSAKKyAgICAgICAgICAgIAorICAgICAgICAjIFNlZSBpZiB0aGUgcnVsZSBpcyBhbHJlYWR5IGluIHRoZSBydWxlbWFwCisgICAgICAgIG1hcCA9ICIlcyAtPiAlcyIgJSAocHJvZG5hbWUsc3ltcykKKyAgICAgICAgaWYgbWFwIGluIHNlbGYuUHJvZG1hcDoKKyAgICAgICAgICAgIG0gPSBzZWxmLlByb2RtYXBbbWFwXQorICAgICAgICAgICAgcmFpc2UgR3JhbW1hckVycm9yKCIlczolZDogRHVwbGljYXRlIHJ1bGUgJXMuICIgJSAoZmlsZSxsaW5lLCBtKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByZXZpb3VzIGRlZmluaXRpb24gYXQgJXM6JWQiICUgKG0uZmlsZSwgbS5saW5lKSkKKworICAgICAgICAjIEZyb20gdGhpcyBwb2ludCBvbiwgZXZlcnl0aGluZyBpcyB2YWxpZC4gIENyZWF0ZSBhIG5ldyBQcm9kdWN0aW9uIGluc3RhbmNlCisgICAgICAgIHBudW1iZXIgID0gbGVuKHNlbGYuUHJvZHVjdGlvbnMpCisgICAgICAgIGlmIG5vdCBwcm9kbmFtZSBpbiBzZWxmLk5vbnRlcm1pbmFsczoKKyAgICAgICAgICAgIHNlbGYuTm9udGVybWluYWxzW3Byb2RuYW1lXSA9IFsgXQorCisgICAgICAgICMgQWRkIHRoZSBwcm9kdWN0aW9uIG51bWJlciB0byBUZXJtaW5hbHMgYW5kIE5vbnRlcm1pbmFscworICAgICAgICBmb3IgdCBpbiBzeW1zOgorICAgICAgICAgICAgaWYgdCBpbiBzZWxmLlRlcm1pbmFsczoKKyAgICAgICAgICAgICAgICBzZWxmLlRlcm1pbmFsc1t0XS5hcHBlbmQocG51bWJlcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbm90IHQgaW4gc2VsZi5Ob250ZXJtaW5hbHM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuTm9udGVybWluYWxzW3RdID0gWyBdCisgICAgICAgICAgICAgICAgc2VsZi5Ob250ZXJtaW5hbHNbdF0uYXBwZW5kKHBudW1iZXIpCisKKyAgICAgICAgIyBDcmVhdGUgYSBwcm9kdWN0aW9uIGFuZCBhZGQgaXQgdG8gdGhlIGxpc3Qgb2YgcHJvZHVjdGlvbnMKKyAgICAgICAgcCA9IFByb2R1Y3Rpb24ocG51bWJlcixwcm9kbmFtZSxzeW1zLHByb2RwcmVjLGZ1bmMsZmlsZSxsaW5lKQorICAgICAgICBzZWxmLlByb2R1Y3Rpb25zLmFwcGVuZChwKQorICAgICAgICBzZWxmLlByb2RtYXBbbWFwXSA9IHAKKworICAgICAgICAjIEFkZCB0byB0aGUgZ2xvYmFsIHByb2R1Y3Rpb25zIGxpc3QKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5Qcm9kbmFtZXNbcHJvZG5hbWVdLmFwcGVuZChwKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmLlByb2RuYW1lc1twcm9kbmFtZV0gPSBbIHAgXQorICAgICAgICByZXR1cm4gMAorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgc2V0X3N0YXJ0KCkKKyAgICAjCisgICAgIyBTZXRzIHRoZSBzdGFydGluZyBzeW1ib2wgYW5kIGNyZWF0ZXMgdGhlIGF1Z21lbnRlZCBncmFtbWFyLiAgUHJvZHVjdGlvbiAKKyAgICAjIHJ1bGUgMCBpcyBTJyAtPiBzdGFydCB3aGVyZSBzdGFydCBpcyB0aGUgc3RhcnQgc3ltYm9sLgorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiBzZXRfc3RhcnQoc2VsZixzdGFydD1Ob25lKToKKyAgICAgICAgaWYgbm90IHN0YXJ0OgorICAgICAgICAgICAgc3RhcnQgPSBzZWxmLlByb2R1Y3Rpb25zWzFdLm5hbWUKKyAgICAgICAgaWYgc3RhcnQgbm90IGluIHNlbGYuTm9udGVybWluYWxzOgorICAgICAgICAgICAgcmFpc2UgR3JhbW1hckVycm9yKCJzdGFydCBzeW1ib2wgJXMgdW5kZWZpbmVkIiAlIHN0YXJ0KQorICAgICAgICBzZWxmLlByb2R1Y3Rpb25zWzBdID0gUHJvZHVjdGlvbigwLCJTJyIsW3N0YXJ0XSkKKyAgICAgICAgc2VsZi5Ob250ZXJtaW5hbHNbc3RhcnRdLmFwcGVuZCgwKQorICAgICAgICBzZWxmLlN0YXJ0ID0gc3RhcnQKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGZpbmRfdW5yZWFjaGFibGUoKQorICAgICMKKyAgICAjIEZpbmQgYWxsIG9mIHRoZSBub250ZXJtaW5hbCBzeW1ib2xzIHRoYXQgY2FuJ3QgYmUgcmVhY2hlZCBmcm9tIHRoZSBzdGFydGluZworICAgICMgc3ltYm9sLiAgUmV0dXJucyBhIGxpc3Qgb2Ygbm9udGVybWluYWxzIHRoYXQgY2FuJ3QgYmUgcmVhY2hlZC4KKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgZmluZF91bnJlYWNoYWJsZShzZWxmKToKKyAgICAgICAgCisgICAgICAgICMgTWFyayBhbGwgc3ltYm9scyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSBhIHN5bWJvbCBzCisgICAgICAgIGRlZiBtYXJrX3JlYWNoYWJsZV9mcm9tKHMpOgorICAgICAgICAgICAgaWYgcmVhY2hhYmxlW3NdOgorICAgICAgICAgICAgICAgICMgV2UndmUgYWxyZWFkeSByZWFjaGVkIHN5bWJvbCBzLgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgcmVhY2hhYmxlW3NdID0gMQorICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5Qcm9kbmFtZXMuZ2V0KHMsW10pOgorICAgICAgICAgICAgICAgIGZvciByIGluIHAucHJvZDoKKyAgICAgICAgICAgICAgICAgICAgbWFya19yZWFjaGFibGVfZnJvbShyKQorCisgICAgICAgIHJlYWNoYWJsZSAgID0geyB9CisgICAgICAgIGZvciBzIGluIGxpc3Qoc2VsZi5UZXJtaW5hbHMpICsgbGlzdChzZWxmLk5vbnRlcm1pbmFscyk6CisgICAgICAgICAgICByZWFjaGFibGVbc10gPSAwCisKKyAgICAgICAgbWFya19yZWFjaGFibGVfZnJvbSggc2VsZi5Qcm9kdWN0aW9uc1swXS5wcm9kWzBdICkKKworICAgICAgICByZXR1cm4gW3MgZm9yIHMgaW4gbGlzdChzZWxmLk5vbnRlcm1pbmFscykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZWFjaGFibGVbc11dCisgICAgCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgaW5maW5pdGVfY3ljbGVzKCkKKyAgICAjCisgICAgIyBUaGlzIGZ1bmN0aW9uIGxvb2tzIGF0IHRoZSB2YXJpb3VzIHBhcnNpbmcgcnVsZXMgYW5kIHRyaWVzIHRvIGRldGVjdAorICAgICMgaW5maW5pdGUgcmVjdXJzaW9uIGN5Y2xlcyAoZ3JhbW1hciBydWxlcyB3aGVyZSB0aGVyZSBpcyBubyBwb3NzaWJsZSB3YXkKKyAgICAjIHRvIGRlcml2ZSBhIHN0cmluZyBvZiBvbmx5IHRlcm1pbmFscykuCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIGluZmluaXRlX2N5Y2xlcyhzZWxmKToKKyAgICAgICAgdGVybWluYXRlcyA9IHt9CisKKyAgICAgICAgIyBUZXJtaW5hbHM6CisgICAgICAgIGZvciB0IGluIHNlbGYuVGVybWluYWxzOgorICAgICAgICAgICAgdGVybWluYXRlc1t0XSA9IDEKKworICAgICAgICB0ZXJtaW5hdGVzWyckZW5kJ10gPSAxCisKKyAgICAgICAgIyBOb250ZXJtaW5hbHM6CisKKyAgICAgICAgIyBJbml0aWFsaXplIHRvIGZhbHNlOgorICAgICAgICBmb3IgbiBpbiBzZWxmLk5vbnRlcm1pbmFsczoKKyAgICAgICAgICAgIHRlcm1pbmF0ZXNbbl0gPSAwCisKKyAgICAgICAgIyBUaGVuIHByb3BhZ2F0ZSB0ZXJtaW5hdGlvbiB1bnRpbCBubyBjaGFuZ2U6CisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBzb21lX2NoYW5nZSA9IDAKKyAgICAgICAgICAgIGZvciAobixwbCkgaW4gc2VsZi5Qcm9kbmFtZXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAjIE5vbnRlcm1pbmFsIG4gdGVybWluYXRlcyBpZmYgYW55IG9mIGl0cyBwcm9kdWN0aW9ucyB0ZXJtaW5hdGVzLgorICAgICAgICAgICAgICAgIGZvciBwIGluIHBsOgorICAgICAgICAgICAgICAgICAgICAjIFByb2R1Y3Rpb24gcCB0ZXJtaW5hdGVzIGlmZiBhbGwgb2YgaXRzIHJocyBzeW1ib2xzIHRlcm1pbmF0ZS4KKyAgICAgICAgICAgICAgICAgICAgZm9yIHMgaW4gcC5wcm9kOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHRlcm1pbmF0ZXNbc106CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGUgc3ltYm9sIHMgZG9lcyBub3QgdGVybWluYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc28gcHJvZHVjdGlvbiBwIGRvZXMgbm90IHRlcm1pbmF0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX3Rlcm1pbmF0ZXMgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZGlkbid0IGJyZWFrIGZyb20gdGhlIGxvb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAjIHNvIGV2ZXJ5IHN5bWJvbCBzIHRlcm1pbmF0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICMgc28gcHJvZHVjdGlvbiBwIHRlcm1pbmF0ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBwX3Rlcm1pbmF0ZXMgPSAxCisKKyAgICAgICAgICAgICAgICAgICAgaWYgcF90ZXJtaW5hdGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBzeW1ib2wgbiB0ZXJtaW5hdGVzIQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHRlcm1pbmF0ZXNbbl06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlc1tuXSA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb21lX2NoYW5nZSA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRG9uJ3QgbmVlZCB0byBjb25zaWRlciBhbnkgbW9yZSBwcm9kdWN0aW9ucyBmb3IgdGhpcyBuLgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgaWYgbm90IHNvbWVfY2hhbmdlOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaW5maW5pdGUgPSBbXQorICAgICAgICBmb3IgKHMsdGVybSkgaW4gdGVybWluYXRlcy5pdGVtcygpOgorICAgICAgICAgICAgaWYgbm90IHRlcm06CisgICAgICAgICAgICAgICAgaWYgbm90IHMgaW4gc2VsZi5Qcm9kbmFtZXMgYW5kIG5vdCBzIGluIHNlbGYuVGVybWluYWxzIGFuZCBzICE9ICdlcnJvcic6CisgICAgICAgICAgICAgICAgICAgICMgcyBpcyB1c2VkLWJ1dC1ub3QtZGVmaW5lZCwgYW5kIHdlJ3ZlIGFscmVhZHkgd2FybmVkIG9mIHRoYXQsCisgICAgICAgICAgICAgICAgICAgICMgc28gaXQgd291bGQgYmUgb3ZlcmtpbGwgdG8gc2F5IHRoYXQgaXQncyBhbHNvIG5vbi10ZXJtaW5hdGluZy4KKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGluZmluaXRlLmFwcGVuZChzKQorCisgICAgICAgIHJldHVybiBpbmZpbml0ZQorCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyB1bmRlZmluZWRfc3ltYm9scygpCisgICAgIworICAgICMgRmluZCBhbGwgc3ltYm9scyB0aGF0IHdlcmUgdXNlZCB0aGUgZ3JhbW1hciwgYnV0IG5vdCBkZWZpbmVkIGFzIHRva2VucyBvcgorICAgICMgZ3JhbW1hciBydWxlcy4gIFJldHVybnMgYSBsaXN0IG9mIHR1cGxlcyAoc3ltLCBwcm9kKSB3aGVyZSBzeW0gaW4gdGhlIHN5bWJvbAorICAgICMgYW5kIHByb2QgaXMgdGhlIHByb2R1Y3Rpb24gd2hlcmUgdGhlIHN5bWJvbCB3YXMgdXNlZC4gCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGRlZiB1bmRlZmluZWRfc3ltYm9scyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgZm9yIHAgaW4gc2VsZi5Qcm9kdWN0aW9uczoKKyAgICAgICAgICAgIGlmIG5vdCBwOiBjb250aW51ZQorCisgICAgICAgICAgICBmb3IgcyBpbiBwLnByb2Q6CisgICAgICAgICAgICAgICAgaWYgbm90IHMgaW4gc2VsZi5Qcm9kbmFtZXMgYW5kIG5vdCBzIGluIHNlbGYuVGVybWluYWxzIGFuZCBzICE9ICdlcnJvcic6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKHMscCkpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIHVudXNlZF90ZXJtaW5hbHMoKQorICAgICMKKyAgICAjIEZpbmQgYWxsIHRlcm1pbmFscyB0aGF0IHdlcmUgZGVmaW5lZCwgYnV0IG5vdCB1c2VkIGJ5IHRoZSBncmFtbWFyLiAgUmV0dXJucworICAgICMgYSBsaXN0IG9mIGFsbCBzeW1ib2xzLgorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBkZWYgdW51c2VkX3Rlcm1pbmFscyhzZWxmKToKKyAgICAgICAgdW51c2VkX3RvayA9IFtdCisgICAgICAgIGZvciBzLHYgaW4gc2VsZi5UZXJtaW5hbHMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHMgIT0gJ2Vycm9yJyBhbmQgbm90IHY6CisgICAgICAgICAgICAgICAgdW51c2VkX3Rvay5hcHBlbmQocykKKworICAgICAgICByZXR1cm4gdW51c2VkX3RvaworCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIHVudXNlZF9ydWxlcygpCisgICAgIworICAgICMgRmluZCBhbGwgZ3JhbW1hciBydWxlcyB0aGF0IHdlcmUgZGVmaW5lZCwgIGJ1dCBub3QgdXNlZCAobWF5YmUgbm90IHJlYWNoYWJsZSkKKyAgICAjIFJldHVybnMgYSBsaXN0IG9mIHByb2R1Y3Rpb25zLgorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgdW51c2VkX3J1bGVzKHNlbGYpOgorICAgICAgICB1bnVzZWRfcHJvZCA9IFtdCisgICAgICAgIGZvciBzLHYgaW4gc2VsZi5Ob250ZXJtaW5hbHMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG5vdCB2OgorICAgICAgICAgICAgICAgIHAgPSBzZWxmLlByb2RuYW1lc1tzXVswXQorICAgICAgICAgICAgICAgIHVudXNlZF9wcm9kLmFwcGVuZChwKQorICAgICAgICByZXR1cm4gdW51c2VkX3Byb2QKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIHVudXNlZF9wcmVjZWRlbmNlKCkKKyAgICAjCisgICAgIyBSZXR1cm5zIGEgbGlzdCBvZiB0dXBsZXMgKHRlcm0scHJlY2VkZW5jZSkgY29ycmVzcG9uZGluZyB0byBwcmVjZWRlbmNlCisgICAgIyBydWxlcyB0aGF0IHdlcmUgbmV2ZXIgdXNlZCBieSB0aGUgZ3JhbW1hci4gIHRlcm0gaXMgdGhlIG5hbWUgb2YgdGhlIHRlcm1pbmFsCisgICAgIyBvbiB3aGljaCBwcmVjZWRlbmNlIHdhcyBhcHBsaWVkIGFuZCBwcmVjZWRlbmNlIGlzIGEgc3RyaW5nIHN1Y2ggYXMgJ2xlZnQnIG9yCisgICAgIyAncmlnaHQnIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHR5cGUgb2YgcHJlY2VkZW5jZS4gCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIHVudXNlZF9wcmVjZWRlbmNlKHNlbGYpOgorICAgICAgICB1bnVzZWQgPSBbXQorICAgICAgICBmb3IgdGVybW5hbWUgaW4gc2VsZi5QcmVjZWRlbmNlOgorICAgICAgICAgICAgaWYgbm90ICh0ZXJtbmFtZSBpbiBzZWxmLlRlcm1pbmFscyBvciB0ZXJtbmFtZSBpbiBzZWxmLlVzZWRQcmVjZWRlbmNlKToKKyAgICAgICAgICAgICAgICB1bnVzZWQuYXBwZW5kKCh0ZXJtbmFtZSxzZWxmLlByZWNlZGVuY2VbdGVybW5hbWVdWzBdKSkKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuIHVudXNlZAorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBfZmlyc3QoKQorICAgICMKKyAgICAjIENvbXB1dGUgdGhlIHZhbHVlIG9mIEZJUlNUMShiZXRhKSB3aGVyZSBiZXRhIGlzIGEgdHVwbGUgb2Ygc3ltYm9scy4KKyAgICAjCisgICAgIyBEdXJpbmcgZXhlY3V0aW9uIG9mIGNvbXB1dGVfZmlyc3QxLCB0aGUgcmVzdWx0IG1heSBiZSBpbmNvbXBsZXRlLgorICAgICMgQWZ0ZXJ3YXJkIChlLmcuLCB3aGVuIGNhbGxlZCBmcm9tIGNvbXB1dGVfZm9sbG93KCkpLCBpdCB3aWxsIGJlIGNvbXBsZXRlLgorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGRlZiBfZmlyc3Qoc2VsZixiZXRhKToKKworICAgICAgICAjIFdlIGFyZSBjb21wdXRpbmcgRmlyc3QoeDEseDIseDMsLi4uLHhuKQorICAgICAgICByZXN1bHQgPSBbIF0KKyAgICAgICAgZm9yIHggaW4gYmV0YToKKyAgICAgICAgICAgIHhfcHJvZHVjZXNfZW1wdHkgPSAwCisKKyAgICAgICAgICAgICMgQWRkIGFsbCB0aGUgbm9uLTxlbXB0eT4gc3ltYm9scyBvZiBGaXJzdFt4XSB0byB0aGUgcmVzdWx0LgorICAgICAgICAgICAgZm9yIGYgaW4gc2VsZi5GaXJzdFt4XToKKyAgICAgICAgICAgICAgICBpZiBmID09ICc8ZW1wdHk+JzoKKyAgICAgICAgICAgICAgICAgICAgeF9wcm9kdWNlc19lbXB0eSA9IDEKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBmIG5vdCBpbiByZXN1bHQ6IHJlc3VsdC5hcHBlbmQoZikKKworICAgICAgICAgICAgaWYgeF9wcm9kdWNlc19lbXB0eToKKyAgICAgICAgICAgICAgICAjIFdlIGhhdmUgdG8gY29uc2lkZXIgdGhlIG5leHQgeCBpbiBiZXRhLAorICAgICAgICAgICAgICAgICMgaS5lLiBzdGF5IGluIHRoZSBsb29wLgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBXZSBkb24ndCBoYXZlIHRvIGNvbnNpZGVyIGFueSBmdXJ0aGVyIHN5bWJvbHMgaW4gYmV0YS4KKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBUaGVyZSB3YXMgbm8gJ2JyZWFrJyBmcm9tIHRoZSBsb29wLAorICAgICAgICAgICAgIyBzbyB4X3Byb2R1Y2VzX2VtcHR5IHdhcyB0cnVlIGZvciBhbGwgeCBpbiBiZXRhLAorICAgICAgICAgICAgIyBzbyBiZXRhIHByb2R1Y2VzIGVtcHR5IGFzIHdlbGwuCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCc8ZW1wdHk+JykKKworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGNvbXB1dGVfZmlyc3QoKQorICAgICMKKyAgICAjIENvbXB1dGUgdGhlIHZhbHVlIG9mIEZJUlNUMShYKSBmb3IgYWxsIHN5bWJvbHMKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBkZWYgY29tcHV0ZV9maXJzdChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5GaXJzdDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLkZpcnN0CisKKyAgICAgICAgIyBUZXJtaW5hbHM6CisgICAgICAgIGZvciB0IGluIHNlbGYuVGVybWluYWxzOgorICAgICAgICAgICAgc2VsZi5GaXJzdFt0XSA9IFt0XQorCisgICAgICAgIHNlbGYuRmlyc3RbJyRlbmQnXSA9IFsnJGVuZCddCisKKyAgICAgICAgIyBOb250ZXJtaW5hbHM6CisKKyAgICAgICAgIyBJbml0aWFsaXplIHRvIHRoZSBlbXB0eSBzZXQ6CisgICAgICAgIGZvciBuIGluIHNlbGYuTm9udGVybWluYWxzOgorICAgICAgICAgICAgc2VsZi5GaXJzdFtuXSA9IFtdCisKKyAgICAgICAgIyBUaGVuIHByb3BhZ2F0ZSBzeW1ib2xzIHVudGlsIG5vIGNoYW5nZToKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHNvbWVfY2hhbmdlID0gMAorICAgICAgICAgICAgZm9yIG4gaW4gc2VsZi5Ob250ZXJtaW5hbHM6CisgICAgICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5Qcm9kbmFtZXNbbl06CisgICAgICAgICAgICAgICAgICAgIGZvciBmIGluIHNlbGYuX2ZpcnN0KHAucHJvZCk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmIG5vdCBpbiBzZWxmLkZpcnN0W25dOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuRmlyc3Rbbl0uYXBwZW5kKCBmICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb21lX2NoYW5nZSA9IDEKKyAgICAgICAgICAgIGlmIG5vdCBzb21lX2NoYW5nZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHNlbGYuRmlyc3QKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBjb21wdXRlX2ZvbGxvdygpCisgICAgIworICAgICMgQ29tcHV0ZXMgYWxsIG9mIHRoZSBmb2xsb3cgc2V0cyBmb3IgZXZlcnkgbm9uLXRlcm1pbmFsIHN5bWJvbC4gIFRoZQorICAgICMgZm9sbG93IHNldCBpcyB0aGUgc2V0IG9mIGFsbCBzeW1ib2xzIHRoYXQgbWlnaHQgZm9sbG93IGEgZ2l2ZW4KKyAgICAjIG5vbi10ZXJtaW5hbC4gIFNlZSB0aGUgRHJhZ29uIGJvb2ssIDJuZCBFZC4gcC4gMTg5LgorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZGVmIGNvbXB1dGVfZm9sbG93KHNlbGYsc3RhcnQ9Tm9uZSk6CisgICAgICAgICMgSWYgYWxyZWFkeSBjb21wdXRlZCwgcmV0dXJuIHRoZSByZXN1bHQKKyAgICAgICAgaWYgc2VsZi5Gb2xsb3c6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5Gb2xsb3cKKworICAgICAgICAjIElmIGZpcnN0IHNldHMgbm90IGNvbXB1dGVkIHlldCwgZG8gdGhhdCBmaXJzdC4KKyAgICAgICAgaWYgbm90IHNlbGYuRmlyc3Q6CisgICAgICAgICAgICBzZWxmLmNvbXB1dGVfZmlyc3QoKQorCisgICAgICAgICMgQWRkICckZW5kJyB0byB0aGUgZm9sbG93IGxpc3Qgb2YgdGhlIHN0YXJ0IHN5bWJvbAorICAgICAgICBmb3IgayBpbiBzZWxmLk5vbnRlcm1pbmFsczoKKyAgICAgICAgICAgIHNlbGYuRm9sbG93W2tdID0gWyBdCisKKyAgICAgICAgaWYgbm90IHN0YXJ0OgorICAgICAgICAgICAgc3RhcnQgPSBzZWxmLlByb2R1Y3Rpb25zWzFdLm5hbWUKKworICAgICAgICBzZWxmLkZvbGxvd1tzdGFydF0gPSBbICckZW5kJyBdCisKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIGRpZGFkZCA9IDAKKyAgICAgICAgICAgIGZvciBwIGluIHNlbGYuUHJvZHVjdGlvbnNbMTpdOgorICAgICAgICAgICAgICAgICMgSGVyZSBpcyB0aGUgcHJvZHVjdGlvbiBzZXQKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocC5wcm9kKSk6CisgICAgICAgICAgICAgICAgICAgIEIgPSBwLnByb2RbaV0KKyAgICAgICAgICAgICAgICAgICAgaWYgQiBpbiBzZWxmLk5vbnRlcm1pbmFsczoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgT2theS4gV2UgZ290IGEgbm9uLXRlcm1pbmFsIGluIGEgcHJvZHVjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgZnN0ID0gc2VsZi5fZmlyc3QocC5wcm9kW2krMTpdKQorICAgICAgICAgICAgICAgICAgICAgICAgaGFzZW1wdHkgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiBmc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZiAhPSAnPGVtcHR5PicgYW5kIGYgbm90IGluIHNlbGYuRm9sbG93W0JdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLkZvbGxvd1tCXS5hcHBlbmQoZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkYWRkID0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGYgPT0gJzxlbXB0eT4nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNlbXB0eSA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhhc2VtcHR5IG9yIGkgPT0gKGxlbihwLnByb2QpLTEpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGVsZW1lbnRzIG9mIGZvbGxvdyhhKSB0byBmb2xsb3coYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiBzZWxmLkZvbGxvd1twLm5hbWVdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmIG5vdCBpbiBzZWxmLkZvbGxvd1tCXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuRm9sbG93W0JdLmFwcGVuZChmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkYWRkID0gMQorICAgICAgICAgICAgaWYgbm90IGRpZGFkZDogYnJlYWsKKyAgICAgICAgcmV0dXJuIHNlbGYuRm9sbG93CisKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGJ1aWxkX2xyaXRlbXMoKQorICAgICMKKyAgICAjIFRoaXMgZnVuY3Rpb24gd2Fsa3MgdGhlIGxpc3Qgb2YgcHJvZHVjdGlvbnMgYW5kIGJ1aWxkcyBhIGNvbXBsZXRlIHNldCBvZiB0aGUKKyAgICAjIExSIGl0ZW1zLiAgVGhlIExSIGl0ZW1zIGFyZSBzdG9yZWQgaW4gdHdvIHdheXM6ICBGaXJzdCwgdGhleSBhcmUgdW5pcXVlbHkKKyAgICAjIG51bWJlcmVkIGFuZCBwbGFjZWQgaW4gdGhlIGxpc3QgX2xyaXRlbXMuICBTZWNvbmQsIGEgbGlua2VkIGxpc3Qgb2YgTFIgaXRlbXMKKyAgICAjIGlzIGJ1aWx0IGZvciBlYWNoIHByb2R1Y3Rpb24uICBGb3IgZXhhbXBsZToKKyAgICAjCisgICAgIyAgIEUgLT4gRSBQTFVTIEUKKyAgICAjCisgICAgIyBDcmVhdGVzIHRoZSBsaXN0CisgICAgIworICAgICMgIFtFIC0+IC4gRSBQTFVTIEUsIEUgLT4gRSAuIFBMVVMgRSwgRSAtPiBFIFBMVVMgLiBFLCBFIC0+IEUgUExVUyBFIC4gXQorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiBidWlsZF9scml0ZW1zKHNlbGYpOgorICAgICAgICBmb3IgcCBpbiBzZWxmLlByb2R1Y3Rpb25zOgorICAgICAgICAgICAgbGFzdGxyaSA9IHAKKyAgICAgICAgICAgIGkgPSAwCisgICAgICAgICAgICBscl9pdGVtcyA9IFtdCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIGlmIGkgPiBsZW4ocCk6CisgICAgICAgICAgICAgICAgICAgIGxyaSA9IE5vbmUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBscmkgPSBMUkl0ZW0ocCxpKQorICAgICAgICAgICAgICAgICAgICAjIFByZWNvbXB1dGUgdGhlIGxpc3Qgb2YgcHJvZHVjdGlvbnMgaW1tZWRpYXRlbHkgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxyaS5scl9hZnRlciA9IHNlbGYuUHJvZG5hbWVzW2xyaS5wcm9kW2krMV1dCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCAoSW5kZXhFcnJvcixLZXlFcnJvcik6CisgICAgICAgICAgICAgICAgICAgICAgICBscmkubHJfYWZ0ZXIgPSBbXQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBscmkubHJfYmVmb3JlID0gbHJpLnByb2RbaS0xXQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxyaS5scl9iZWZvcmUgPSBOb25lCisKKyAgICAgICAgICAgICAgICBsYXN0bHJpLmxyX25leHQgPSBscmkKKyAgICAgICAgICAgICAgICBpZiBub3QgbHJpOiBicmVhaworICAgICAgICAgICAgICAgIGxyX2l0ZW1zLmFwcGVuZChscmkpCisgICAgICAgICAgICAgICAgbGFzdGxyaSA9IGxyaQorICAgICAgICAgICAgICAgIGkgKz0gMQorICAgICAgICAgICAgcC5scl9pdGVtcyA9IGxyX2l0ZW1zCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gQ2xhc3MgTFJUYWJsZSA9PQorIworIyBUaGlzIGJhc2ljIGNsYXNzIHJlcHJlc2VudHMgYSBiYXNpYyB0YWJsZSBvZiBMUiBwYXJzaW5nIGluZm9ybWF0aW9uLiAgCisjIE1ldGhvZHMgZm9yIGdlbmVyYXRpbmcgdGhlIHRhYmxlcyBhcmUgbm90IGRlZmluZWQgaGVyZS4gIFRoZXkgYXJlIGRlZmluZWQKKyMgaW4gdGhlIGRlcml2ZWQgY2xhc3MgTFJHZW5lcmF0ZWRUYWJsZS4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVmVyc2lvbkVycm9yKFlhY2NFcnJvcik6IHBhc3MKKworY2xhc3MgTFJUYWJsZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5scl9hY3Rpb24gPSBOb25lCisgICAgICAgIHNlbGYubHJfZ290byA9IE5vbmUKKyAgICAgICAgc2VsZi5scl9wcm9kdWN0aW9ucyA9IE5vbmUKKyAgICAgICAgc2VsZi5scl9tZXRob2QgPSBOb25lCisKKyAgICBkZWYgcmVhZF90YWJsZShzZWxmLG1vZHVsZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobW9kdWxlLHR5cGVzLk1vZHVsZVR5cGUpOgorICAgICAgICAgICAgcGFyc2V0YWIgPSBtb2R1bGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzOgorICAgICAgICAgICAgICAgIGV4ZWMoImltcG9ydCAlcyBhcyBwYXJzZXRhYiIgJSBtb2R1bGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVudiA9IHsgfQorICAgICAgICAgICAgICAgIGV4ZWMoImltcG9ydCAlcyBhcyBwYXJzZXRhYiIgJSBtb2R1bGUsIGVudiwgZW52KQorICAgICAgICAgICAgICAgIHBhcnNldGFiID0gZW52WydwYXJzZXRhYiddCisKKyAgICAgICAgaWYgcGFyc2V0YWIuX3RhYnZlcnNpb24gIT0gX190YWJ2ZXJzaW9uX186CisgICAgICAgICAgICByYWlzZSBWZXJzaW9uRXJyb3IoInlhY2MgdGFibGUgZmlsZSB2ZXJzaW9uIGlzIG91dCBvZiBkYXRlIikKKworICAgICAgICBzZWxmLmxyX2FjdGlvbiA9IHBhcnNldGFiLl9scl9hY3Rpb24KKyAgICAgICAgc2VsZi5scl9nb3RvID0gcGFyc2V0YWIuX2xyX2dvdG8KKworICAgICAgICBzZWxmLmxyX3Byb2R1Y3Rpb25zID0gW10KKyAgICAgICAgZm9yIHAgaW4gcGFyc2V0YWIuX2xyX3Byb2R1Y3Rpb25zOgorICAgICAgICAgICAgc2VsZi5scl9wcm9kdWN0aW9ucy5hcHBlbmQoTWluaVByb2R1Y3Rpb24oKnApKQorCisgICAgICAgIHNlbGYubHJfbWV0aG9kID0gcGFyc2V0YWIuX2xyX21ldGhvZAorICAgICAgICByZXR1cm4gcGFyc2V0YWIuX2xyX3NpZ25hdHVyZQorCisgICAgZGVmIHJlYWRfcGlja2xlKHNlbGYsZmlsZW5hbWUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgaW1wb3J0IHBpY2tsZQorCisgICAgICAgIGluX2YgPSBvcGVuKGZpbGVuYW1lLCJyYiIpCisKKyAgICAgICAgdGFidmVyc2lvbiA9IHBpY2tsZS5sb2FkKGluX2YpCisgICAgICAgIGlmIHRhYnZlcnNpb24gIT0gX190YWJ2ZXJzaW9uX186CisgICAgICAgICAgICByYWlzZSBWZXJzaW9uRXJyb3IoInlhY2MgdGFibGUgZmlsZSB2ZXJzaW9uIGlzIG91dCBvZiBkYXRlIikKKyAgICAgICAgc2VsZi5scl9tZXRob2QgPSBwaWNrbGUubG9hZChpbl9mKQorICAgICAgICBzaWduYXR1cmUgICAgICA9IHBpY2tsZS5sb2FkKGluX2YpCisgICAgICAgIHNlbGYubHJfYWN0aW9uID0gcGlja2xlLmxvYWQoaW5fZikKKyAgICAgICAgc2VsZi5scl9nb3RvICAgPSBwaWNrbGUubG9hZChpbl9mKQorICAgICAgICBwcm9kdWN0aW9ucyAgICA9IHBpY2tsZS5sb2FkKGluX2YpCisKKyAgICAgICAgc2VsZi5scl9wcm9kdWN0aW9ucyA9IFtdCisgICAgICAgIGZvciBwIGluIHByb2R1Y3Rpb25zOgorICAgICAgICAgICAgc2VsZi5scl9wcm9kdWN0aW9ucy5hcHBlbmQoTWluaVByb2R1Y3Rpb24oKnApKQorCisgICAgICAgIGluX2YuY2xvc2UoKQorICAgICAgICByZXR1cm4gc2lnbmF0dXJlCisKKyAgICAjIEJpbmQgYWxsIHByb2R1Y3Rpb24gZnVuY3Rpb24gbmFtZXMgdG8gY2FsbGFibGUgb2JqZWN0cyBpbiBwZGljdAorICAgIGRlZiBiaW5kX2NhbGxhYmxlcyhzZWxmLHBkaWN0KToKKyAgICAgICAgZm9yIHAgaW4gc2VsZi5scl9wcm9kdWN0aW9uczoKKyAgICAgICAgICAgIHAuYmluZChwZGljdCkKKyAgICAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0gTFIgR2VuZXJhdG9yID09PQorIworIyBUaGUgZm9sbG93aW5nIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBnZW5lcmF0ZSBMUiBwYXJzaW5nIHRhYmxlcyBvbiAKKyMgYSBncmFtbWFyLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGRpZ3JhcGgoKQorIyB0cmF2ZXJzZSgpCisjCisjIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBjb21wdXRlIHNldCB2YWx1ZWQgZnVuY3Rpb25zCisjIG9mIHRoZSBmb3JtOgorIworIyAgICAgRih4KSA9IEYnKHgpIFUgVXtGKHkpIHwgeCBSIHl9CisjCisjIFRoaXMgaXMgdXNlZCB0byBjb21wdXRlIHRoZSB2YWx1ZXMgb2YgUmVhZCgpIHNldHMgYXMgd2VsbCBhcyBGT0xMT1cgc2V0cworIyBpbiBMQUxSKDEpIGdlbmVyYXRpb24uCisjCisjIElucHV0czogIFggICAgLSBBbiBpbnB1dCBzZXQKKyMgICAgICAgICAgUiAgICAtIEEgcmVsYXRpb24KKyMgICAgICAgICAgRlAgICAtIFNldC12YWx1ZWQgZnVuY3Rpb24KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBkaWdyYXBoKFgsUixGUCk6CisgICAgTiA9IHsgfQorICAgIGZvciB4IGluIFg6CisgICAgICAgTlt4XSA9IDAKKyAgICBzdGFjayA9IFtdCisgICAgRiA9IHsgfQorICAgIGZvciB4IGluIFg6CisgICAgICAgIGlmIE5beF0gPT0gMDogdHJhdmVyc2UoeCxOLHN0YWNrLEYsWCxSLEZQKQorICAgIHJldHVybiBGCisKK2RlZiB0cmF2ZXJzZSh4LE4sc3RhY2ssRixYLFIsRlApOgorICAgIHN0YWNrLmFwcGVuZCh4KQorICAgIGQgPSBsZW4oc3RhY2spCisgICAgTlt4XSA9IGQKKyAgICBGW3hdID0gRlAoeCkgICAgICAgICAgICAgIyBGKFgpIDwtIEYnKHgpCisKKyAgICByZWwgPSBSKHgpICAgICAgICAgICAgICAgIyBHZXQgeSdzIHJlbGF0ZWQgdG8geAorICAgIGZvciB5IGluIHJlbDoKKyAgICAgICAgaWYgTlt5XSA9PSAwOgorICAgICAgICAgICAgIHRyYXZlcnNlKHksTixzdGFjayxGLFgsUixGUCkKKyAgICAgICAgTlt4XSA9IG1pbihOW3hdLE5beV0pCisgICAgICAgIGZvciBhIGluIEYuZ2V0KHksW10pOgorICAgICAgICAgICAgaWYgYSBub3QgaW4gRlt4XTogRlt4XS5hcHBlbmQoYSkKKyAgICBpZiBOW3hdID09IGQ6CisgICAgICAgTltzdGFja1stMV1dID0gTUFYSU5UCisgICAgICAgRltzdGFja1stMV1dID0gRlt4XQorICAgICAgIGVsZW1lbnQgPSBzdGFjay5wb3AoKQorICAgICAgIHdoaWxlIGVsZW1lbnQgIT0geDoKKyAgICAgICAgICAgTltzdGFja1stMV1dID0gTUFYSU5UCisgICAgICAgICAgIEZbc3RhY2tbLTFdXSA9IEZbeF0KKyAgICAgICAgICAgZWxlbWVudCA9IHN0YWNrLnBvcCgpCisKK2NsYXNzIExBTFJFcnJvcihZYWNjRXJyb3IpOiBwYXNzCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IExSR2VuZXJhdGVkVGFibGUgPT0KKyMKKyMgVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBMUiB0YWJsZSBnZW5lcmF0aW9uIGFsZ29yaXRobS4gIFRoZXJlIGFyZSBubworIyBwdWJsaWMgbWV0aG9kcyBleGNlcHQgZm9yIHdyaXRlKCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgTFJHZW5lcmF0ZWRUYWJsZShMUlRhYmxlKToKKyAgICBkZWYgX19pbml0X18oc2VsZixncmFtbWFyLG1ldGhvZD0nTEFMUicsbG9nPU5vbmUpOgorICAgICAgICBpZiBtZXRob2Qgbm90IGluIFsnU0xSJywnTEFMUiddOgorICAgICAgICAgICAgcmFpc2UgTEFMUkVycm9yKCJVbnN1cHBvcnRlZCBtZXRob2QgJXMiICUgbWV0aG9kKQorCisgICAgICAgIHNlbGYuZ3JhbW1hciA9IGdyYW1tYXIKKyAgICAgICAgc2VsZi5scl9tZXRob2QgPSBtZXRob2QKKworICAgICAgICAjIFNldCB1cCB0aGUgbG9nZ2VyCisgICAgICAgIGlmIG5vdCBsb2c6CisgICAgICAgICAgICBsb2cgPSBOdWxsTG9nZ2VyKCkKKyAgICAgICAgc2VsZi5sb2cgPSBsb2cKKworICAgICAgICAjIEludGVybmFsIGF0dHJpYnV0ZXMKKyAgICAgICAgc2VsZi5scl9hY3Rpb24gICAgID0ge30gICAgICAgICMgQWN0aW9uIHRhYmxlCisgICAgICAgIHNlbGYubHJfZ290byAgICAgICA9IHt9ICAgICAgICAjIEdvdG8gdGFibGUKKyAgICAgICAgc2VsZi5scl9wcm9kdWN0aW9ucyAgPSBncmFtbWFyLlByb2R1Y3Rpb25zICAgICMgQ29weSBvZiBncmFtbWFyIFByb2R1Y3Rpb24gYXJyYXkKKyAgICAgICAgc2VsZi5scl9nb3RvX2NhY2hlID0ge30gICAgICAgICMgQ2FjaGUgb2YgY29tcHV0ZWQgZ290b3MKKyAgICAgICAgc2VsZi5scjBfY2lkaGFzaCAgID0ge30gICAgICAgICMgQ2FjaGUgb2YgY2xvc3VyZXMKKworICAgICAgICBzZWxmLl9hZGRfY291bnQgICAgPSAwICAgICAgICAgIyBJbnRlcm5hbCBjb3VudGVyIHVzZWQgdG8gZGV0ZWN0IGN5Y2xlcworCisgICAgICAgICMgRGlhZ29uaXN0aWMgaW5mb3JtYXRpb24gZmlsbGVkIGluIGJ5IHRoZSB0YWJsZSBnZW5lcmF0b3IKKyAgICAgICAgc2VsZi5zcl9jb25mbGljdCAgID0gMAorICAgICAgICBzZWxmLnJyX2NvbmZsaWN0ICAgPSAwCisgICAgICAgIHNlbGYuY29uZmxpY3RzICAgICA9IFtdICAgICAgICAjIExpc3Qgb2YgY29uZmxpY3RzCisKKyAgICAgICAgc2VsZi5zcl9jb25mbGljdHMgID0gW10KKyAgICAgICAgc2VsZi5ycl9jb25mbGljdHMgID0gW10KKworICAgICAgICAjIEJ1aWxkIHRoZSB0YWJsZXMKKyAgICAgICAgc2VsZi5ncmFtbWFyLmJ1aWxkX2xyaXRlbXMoKQorICAgICAgICBzZWxmLmdyYW1tYXIuY29tcHV0ZV9maXJzdCgpCisgICAgICAgIHNlbGYuZ3JhbW1hci5jb21wdXRlX2ZvbGxvdygpCisgICAgICAgIHNlbGYubHJfcGFyc2VfdGFibGUoKQorCisgICAgIyBDb21wdXRlIHRoZSBMUigwKSBjbG9zdXJlIG9wZXJhdGlvbiBvbiBJLCB3aGVyZSBJIGlzIGEgc2V0IG9mIExSKDApIGl0ZW1zLgorCisgICAgZGVmIGxyMF9jbG9zdXJlKHNlbGYsSSk6CisgICAgICAgIHNlbGYuX2FkZF9jb3VudCArPSAxCisKKyAgICAgICAgIyBBZGQgZXZlcnl0aGluZyBpbiBJIHRvIEoKKyAgICAgICAgSiA9IElbOl0KKyAgICAgICAgZGlkYWRkID0gMQorICAgICAgICB3aGlsZSBkaWRhZGQ6CisgICAgICAgICAgICBkaWRhZGQgPSAwCisgICAgICAgICAgICBmb3IgaiBpbiBKOgorICAgICAgICAgICAgICAgIGZvciB4IGluIGoubHJfYWZ0ZXI6CisgICAgICAgICAgICAgICAgICAgIGlmIGdldGF0dHIoeCwibHIwX2FkZGVkIiwwKSA9PSBzZWxmLl9hZGRfY291bnQ6IGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICMgQWRkIEIgLS0+IC5HIHRvIEoKKyAgICAgICAgICAgICAgICAgICAgSi5hcHBlbmQoeC5scl9uZXh0KQorICAgICAgICAgICAgICAgICAgICB4LmxyMF9hZGRlZCA9IHNlbGYuX2FkZF9jb3VudAorICAgICAgICAgICAgICAgICAgICBkaWRhZGQgPSAxCisKKyAgICAgICAgcmV0dXJuIEoKKworICAgICMgQ29tcHV0ZSB0aGUgTFIoMCkgZ290byBmdW5jdGlvbiBnb3RvKEksWCkgd2hlcmUgSSBpcyBhIHNldAorICAgICMgb2YgTFIoMCkgaXRlbXMgYW5kIFggaXMgYSBncmFtbWFyIHN5bWJvbC4gICBUaGlzIGZ1bmN0aW9uIGlzIHdyaXR0ZW4KKyAgICAjIGluIGEgd2F5IHRoYXQgZ3VhcmFudGVlcyB1bmlxdWVuZXNzIG9mIHRoZSBnZW5lcmF0ZWQgZ290byBzZXRzCisgICAgIyAoaS5lLiB0aGUgc2FtZSBnb3RvIHNldCB3aWxsIG5ldmVyIGJlIHJldHVybmVkIGFzIHR3byBkaWZmZXJlbnQgUHl0aG9uCisgICAgIyBvYmplY3RzKS4gIFdpdGggdW5pcXVlbmVzcywgd2UgY2FuIGxhdGVyIGRvIGZhc3Qgc2V0IGNvbXBhcmlzb25zIHVzaW5nCisgICAgIyBpZChvYmopIGluc3RlYWQgb2YgZWxlbWVudC13aXNlIGNvbXBhcmlzb24uCisKKyAgICBkZWYgbHIwX2dvdG8oc2VsZixJLHgpOgorICAgICAgICAjIEZpcnN0IHdlIGxvb2sgZm9yIGEgcHJldmlvdXNseSBjYWNoZWQgZW50cnkKKyAgICAgICAgZyA9IHNlbGYubHJfZ290b19jYWNoZS5nZXQoKGlkKEkpLHgpLE5vbmUpCisgICAgICAgIGlmIGc6IHJldHVybiBnCisKKyAgICAgICAgIyBOb3cgd2UgZ2VuZXJhdGUgdGhlIGdvdG8gc2V0IGluIGEgd2F5IHRoYXQgZ3VhcmFudGVlcyB1bmlxdWVuZXNzCisgICAgICAgICMgb2YgdGhlIHJlc3VsdAorCisgICAgICAgIHMgPSBzZWxmLmxyX2dvdG9fY2FjaGUuZ2V0KHgsTm9uZSkKKyAgICAgICAgaWYgbm90IHM6CisgICAgICAgICAgICBzID0geyB9CisgICAgICAgICAgICBzZWxmLmxyX2dvdG9fY2FjaGVbeF0gPSBzCisKKyAgICAgICAgZ3MgPSBbIF0KKyAgICAgICAgZm9yIHAgaW4gSToKKyAgICAgICAgICAgIG4gPSBwLmxyX25leHQKKyAgICAgICAgICAgIGlmIG4gYW5kIG4ubHJfYmVmb3JlID09IHg6CisgICAgICAgICAgICAgICAgczEgPSBzLmdldChpZChuKSxOb25lKQorICAgICAgICAgICAgICAgIGlmIG5vdCBzMToKKyAgICAgICAgICAgICAgICAgICAgczEgPSB7IH0KKyAgICAgICAgICAgICAgICAgICAgc1tpZChuKV0gPSBzMQorICAgICAgICAgICAgICAgIGdzLmFwcGVuZChuKQorICAgICAgICAgICAgICAgIHMgPSBzMQorICAgICAgICBnID0gcy5nZXQoJyRlbmQnLE5vbmUpCisgICAgICAgIGlmIG5vdCBnOgorICAgICAgICAgICAgaWYgZ3M6CisgICAgICAgICAgICAgICAgZyA9IHNlbGYubHIwX2Nsb3N1cmUoZ3MpCisgICAgICAgICAgICAgICAgc1snJGVuZCddID0gZworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzWyckZW5kJ10gPSBncworICAgICAgICBzZWxmLmxyX2dvdG9fY2FjaGVbKGlkKEkpLHgpXSA9IGcKKyAgICAgICAgcmV0dXJuIGcKKworICAgICMgQ29tcHV0ZSB0aGUgTFIoMCkgc2V0cyBvZiBpdGVtIGZ1bmN0aW9uCisgICAgZGVmIGxyMF9pdGVtcyhzZWxmKToKKworICAgICAgICBDID0gWyBzZWxmLmxyMF9jbG9zdXJlKFtzZWxmLmdyYW1tYXIuUHJvZHVjdGlvbnNbMF0ubHJfbmV4dF0pIF0KKyAgICAgICAgaSA9IDAKKyAgICAgICAgZm9yIEkgaW4gQzoKKyAgICAgICAgICAgIHNlbGYubHIwX2NpZGhhc2hbaWQoSSldID0gaQorICAgICAgICAgICAgaSArPSAxCisKKyAgICAgICAgIyBMb29wIG92ZXIgdGhlIGl0ZW1zIGluIEMgYW5kIGVhY2ggZ3JhbW1hciBzeW1ib2xzCisgICAgICAgIGkgPSAwCisgICAgICAgIHdoaWxlIGkgPCBsZW4oQyk6CisgICAgICAgICAgICBJID0gQ1tpXQorICAgICAgICAgICAgaSArPSAxCisKKyAgICAgICAgICAgICMgQ29sbGVjdCBhbGwgb2YgdGhlIHN5bWJvbHMgdGhhdCBjb3VsZCBwb3NzaWJseSBiZSBpbiB0aGUgZ290byhJLFgpIHNldHMKKyAgICAgICAgICAgIGFzeW1zID0geyB9CisgICAgICAgICAgICBmb3IgaWkgaW4gSToKKyAgICAgICAgICAgICAgICBmb3IgcyBpbiBpaS51c3ltczoKKyAgICAgICAgICAgICAgICAgICAgYXN5bXNbc10gPSBOb25lCisKKyAgICAgICAgICAgIGZvciB4IGluIGFzeW1zOgorICAgICAgICAgICAgICAgIGcgPSBzZWxmLmxyMF9nb3RvKEkseCkKKyAgICAgICAgICAgICAgICBpZiBub3QgZzogIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgaWQoZykgaW4gc2VsZi5scjBfY2lkaGFzaDogY29udGludWUKKyAgICAgICAgICAgICAgICBzZWxmLmxyMF9jaWRoYXNoW2lkKGcpXSA9IGxlbihDKQorICAgICAgICAgICAgICAgIEMuYXBwZW5kKGcpCisKKyAgICAgICAgcmV0dXJuIEMKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjICAgICAgICAgICAgICAgICAgICAgICA9PT09IExBTFIoMSkgUGFyc2luZyA9PT09CisgICAgIworICAgICMgTEFMUigxKSBwYXJzaW5nIGlzIGFsbW9zdCBleGFjdGx5IHRoZSBzYW1lIGFzIFNMUiBleGNlcHQgdGhhdCBpbnN0ZWFkIG9mCisgICAgIyByZWx5aW5nIHVwb24gRm9sbG93KCkgc2V0cyB3aGVuIHBlcmZvcm1pbmcgcmVkdWN0aW9ucywgYSBtb3JlIHNlbGVjdGl2ZQorICAgICMgbG9va2FoZWFkIHNldCB0aGF0IGluY29ycG9yYXRlcyB0aGUgc3RhdGUgb2YgdGhlIExSKDApIG1hY2hpbmUgaXMgdXRpbGl6ZWQuCisgICAgIyBUaHVzLCB3ZSBtYWlubHkganVzdCBoYXZlIHRvIGZvY3VzIG9uIGNhbGN1bGF0aW5nIHRoZSBsb29rYWhlYWQgc2V0cy4KKyAgICAjCisgICAgIyBUaGUgbWV0aG9kIHVzZWQgaGVyZSBpcyBkdWUgdG8gRGVSZW1lciBhbmQgUGVubmVsbyAoMTk4MikuCisgICAgIworICAgICMgRGVSZW1lciwgRi4gTC4sIGFuZCBULiBKLiBQZW5uZWxvOiAiRWZmaWNpZW50IENvbXB1dGF0aW9uIG9mIExBTFIoMSkKKyAgICAjICAgICBMb29rYWhlYWQgU2V0cyIsIEFDTSBUcmFuc2FjdGlvbnMgb24gUHJvZ3JhbW1pbmcgTGFuZ3VhZ2VzIGFuZCBTeXN0ZW1zLAorICAgICMgICAgIFZvbC4gNCwgTm8uIDQsIE9jdC4gMTk4MiwgcHAuIDYxNS02NDkKKyAgICAjCisgICAgIyBGdXJ0aGVyIGRldGFpbHMgY2FuIGFsc28gYmUgZm91bmQgaW46CisgICAgIworICAgICMgIEouIFRyZW1ibGF5IGFuZCBQLiBTb3JlbnNvbiwgIlRoZSBUaGVvcnkgYW5kIFByYWN0aWNlIG9mIENvbXBpbGVyIFdyaXRpbmciLAorICAgICMgICAgICBNY0dyYXctSGlsbCBCb29rIENvbXBhbnksICgxOTg1KS4KKyAgICAjCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgY29tcHV0ZV9udWxsYWJsZV9ub250ZXJtaW5hbHMoKQorICAgICMKKyAgICAjIENyZWF0ZXMgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBub24tdGVybWluYWxzIHRoYXQgbWlnaHQgcHJvZHVjZQorICAgICMgYW4gZW1wdHkgcHJvZHVjdGlvbi4KKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgY29tcHV0ZV9udWxsYWJsZV9ub250ZXJtaW5hbHMoc2VsZik6CisgICAgICAgIG51bGxhYmxlID0ge30KKyAgICAgICAgbnVtX251bGxhYmxlID0gMAorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICBmb3IgcCBpbiBzZWxmLmdyYW1tYXIuUHJvZHVjdGlvbnNbMTpdOgorICAgICAgICAgICAgICAgaWYgcC5sZW4gPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgbnVsbGFibGVbcC5uYW1lXSA9IDEKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgIGZvciB0IGluIHAucHJvZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHQgaW4gbnVsbGFibGU6IGJyZWFrCisgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBudWxsYWJsZVtwLm5hbWVdID0gMQorICAgICAgICAgICBpZiBsZW4obnVsbGFibGUpID09IG51bV9udWxsYWJsZTogYnJlYWsKKyAgICAgICAgICAgbnVtX251bGxhYmxlID0gbGVuKG51bGxhYmxlKQorICAgICAgICByZXR1cm4gbnVsbGFibGUKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGZpbmRfbm9udGVybWluYWxfdHJhbnMoQykKKyAgICAjCisgICAgIyBHaXZlbiBhIHNldCBvZiBMUigwKSBpdGVtcywgdGhpcyBmdW5jdGlvbnMgZmluZHMgYWxsIG9mIHRoZSBub24tdGVybWluYWwKKyAgICAjIHRyYW5zaXRpb25zLiAgICBUaGVzZSBhcmUgdHJhbnNpdGlvbnMgaW4gd2hpY2ggYSBkb3QgYXBwZWFycyBpbW1lZGlhdGVseSBiZWZvcmUKKyAgICAjIGEgbm9uLXRlcm1pbmFsLiAgIFJldHVybnMgYSBsaXN0IG9mIHR1cGxlcyBvZiB0aGUgZm9ybSAoc3RhdGUsTikgd2hlcmUgc3RhdGUKKyAgICAjIGlzIHRoZSBzdGF0ZSBudW1iZXIgYW5kIE4gaXMgdGhlIG5vbnRlcm1pbmFsIHN5bWJvbC4KKyAgICAjCisgICAgIyBUaGUgaW5wdXQgQyBpcyB0aGUgc2V0IG9mIExSKDApIGl0ZW1zLgorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiBmaW5kX25vbnRlcm1pbmFsX3RyYW5zaXRpb25zKHNlbGYsQyk6CisgICAgICAgICB0cmFucyA9IFtdCisgICAgICAgICBmb3Igc3RhdGUgaW4gcmFuZ2UobGVuKEMpKToKKyAgICAgICAgICAgICBmb3IgcCBpbiBDW3N0YXRlXToKKyAgICAgICAgICAgICAgICAgaWYgcC5scl9pbmRleCA8IHAubGVuIC0gMToKKyAgICAgICAgICAgICAgICAgICAgICB0ID0gKHN0YXRlLHAucHJvZFtwLmxyX2luZGV4KzFdKQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRbMV0gaW4gc2VsZi5ncmFtbWFyLk5vbnRlcm1pbmFsczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0IG5vdCBpbiB0cmFuczogdHJhbnMuYXBwZW5kKHQpCisgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZSArIDEKKyAgICAgICAgIHJldHVybiB0cmFucworCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgZHJfcmVsYXRpb24oKQorICAgICMKKyAgICAjIENvbXB1dGVzIHRoZSBEUihwLEEpIHJlbGF0aW9uc2hpcHMgZm9yIG5vbi10ZXJtaW5hbCB0cmFuc2l0aW9ucy4gIFRoZSBpbnB1dAorICAgICMgaXMgYSB0dXBsZSAoc3RhdGUsTikgd2hlcmUgc3RhdGUgaXMgYSBudW1iZXIgYW5kIE4gaXMgYSBub250ZXJtaW5hbCBzeW1ib2wuCisgICAgIworICAgICMgUmV0dXJucyBhIGxpc3Qgb2YgdGVybWluYWxzLgorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiBkcl9yZWxhdGlvbihzZWxmLEMsdHJhbnMsbnVsbGFibGUpOgorICAgICAgICBkcl9zZXQgPSB7IH0KKyAgICAgICAgc3RhdGUsTiA9IHRyYW5zCisgICAgICAgIHRlcm1zID0gW10KKworICAgICAgICBnID0gc2VsZi5scjBfZ290byhDW3N0YXRlXSxOKQorICAgICAgICBmb3IgcCBpbiBnOgorICAgICAgICAgICBpZiBwLmxyX2luZGV4IDwgcC5sZW4gLSAxOgorICAgICAgICAgICAgICAgYSA9IHAucHJvZFtwLmxyX2luZGV4KzFdCisgICAgICAgICAgICAgICBpZiBhIGluIHNlbGYuZ3JhbW1hci5UZXJtaW5hbHM6CisgICAgICAgICAgICAgICAgICAgaWYgYSBub3QgaW4gdGVybXM6IHRlcm1zLmFwcGVuZChhKQorCisgICAgICAgICMgVGhpcyBleHRyYSBiaXQgaXMgdG8gaGFuZGxlIHRoZSBzdGFydCBzdGF0ZQorICAgICAgICBpZiBzdGF0ZSA9PSAwIGFuZCBOID09IHNlbGYuZ3JhbW1hci5Qcm9kdWN0aW9uc1swXS5wcm9kWzBdOgorICAgICAgICAgICB0ZXJtcy5hcHBlbmQoJyRlbmQnKQorCisgICAgICAgIHJldHVybiB0ZXJtcworCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgcmVhZHNfcmVsYXRpb24oKQorICAgICMKKyAgICAjIENvbXB1dGVzIHRoZSBSRUFEUygpIHJlbGF0aW9uIChwLEEpIFJFQURTICh0LEMpLgorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiByZWFkc19yZWxhdGlvbihzZWxmLEMsIHRyYW5zLCBlbXB0eSk6CisgICAgICAgICMgTG9vayBmb3IgZW1wdHkgdHJhbnNpdGlvbnMKKyAgICAgICAgcmVsID0gW10KKyAgICAgICAgc3RhdGUsIE4gPSB0cmFucworCisgICAgICAgIGcgPSBzZWxmLmxyMF9nb3RvKENbc3RhdGVdLE4pCisgICAgICAgIGogPSBzZWxmLmxyMF9jaWRoYXNoLmdldChpZChnKSwtMSkKKyAgICAgICAgZm9yIHAgaW4gZzoKKyAgICAgICAgICAgIGlmIHAubHJfaW5kZXggPCBwLmxlbiAtIDE6CisgICAgICAgICAgICAgICAgIGEgPSBwLnByb2RbcC5scl9pbmRleCArIDFdCisgICAgICAgICAgICAgICAgIGlmIGEgaW4gZW1wdHk6CisgICAgICAgICAgICAgICAgICAgICAgcmVsLmFwcGVuZCgoaixhKSkKKworICAgICAgICByZXR1cm4gcmVsCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBjb21wdXRlX2xvb2tiYWNrX2luY2x1ZGVzKCkKKyAgICAjCisgICAgIyBEZXRlcm1pbmVzIHRoZSBsb29rYmFjayBhbmQgaW5jbHVkZXMgcmVsYXRpb25zCisgICAgIworICAgICMgTE9PS0JBQ0s6CisgICAgIworICAgICMgVGhpcyByZWxhdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IHJ1bm5pbmcgdGhlIExSKDApIHN0YXRlIG1hY2hpbmUgZm9yd2FyZC4KKyAgICAjIEZvciBleGFtcGxlLCBzdGFydGluZyB3aXRoIGEgcHJvZHVjdGlvbiAiTiA6IC4gQSBCIEMiLCB3ZSBydW4gaXQgZm9yd2FyZAorICAgICMgdG8gb2J0YWluICJOIDogQSBCIEMgLiIgICBXZSB0aGVuIGJ1aWxkIGEgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhpcyBmaW5hbAorICAgICMgc3RhdGUgYW5kIHRoZSBzdGFydGluZyBzdGF0ZS4gICBUaGVzZSByZWxhdGlvbnNoaXBzIGFyZSBzdG9yZWQgaW4gYSBkaWN0aW9uYXJ5CisgICAgIyBsb29rZGljdC4KKyAgICAjCisgICAgIyBJTkNMVURFUzoKKyAgICAjCisgICAgIyBDb21wdXRlcyB0aGUgSU5DTFVERSgpIHJlbGF0aW9uIChwLEEpIElOQ0xVREVTIChwJyxCKS4KKyAgICAjCisgICAgIyBUaGlzIHJlbGF0aW9uIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIG5vbi10ZXJtaW5hbCB0cmFuc2l0aW9ucyB0aGF0IG9jY3VyCisgICAgIyBpbnNpZGUgb2Ygb3RoZXIgbm9uLXRlcm1pbmFsIHRyYW5zaXRpb24gc3RhdGVzLiAgIChwLEEpIElOQ0xVREVTIChwJywgQikKKyAgICAjIGlmIHRoZSBmb2xsb3dpbmcgaG9sZHM6CisgICAgIworICAgICMgICAgICAgQiAtPiBMQVQsIHdoZXJlIFQgLT4gZXBzaWxvbiBhbmQgcCcgLUwtPiBwCisgICAgIworICAgICMgTCBpcyBlc3NlbnRpYWxseSBhIHByZWZpeCAod2hpY2ggbWF5IGJlIGVtcHR5KSwgVCBpcyBhIHN1ZmZpeCB0aGF0IG11c3QgYmUKKyAgICAjIGFibGUgdG8gZGVyaXZlIGFuIGVtcHR5IHN0cmluZy4gIFN0YXRlIHAnIG11c3QgbGVhZCB0byBzdGF0ZSBwIHdpdGggdGhlIHN0cmluZyBMLgorICAgICMKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgY29tcHV0ZV9sb29rYmFja19pbmNsdWRlcyhzZWxmLEMsdHJhbnMsbnVsbGFibGUpOgorCisgICAgICAgIGxvb2tkaWN0ID0ge30gICAgICAgICAgIyBEaWN0aW9uYXJ5IG9mIGxvb2tiYWNrIHJlbGF0aW9ucworICAgICAgICBpbmNsdWRlZGljdCA9IHt9ICAgICAgICMgRGljdGlvbmFyeSBvZiBpbmNsdWRlIHJlbGF0aW9ucworCisgICAgICAgICMgTWFrZSBhIGRpY3Rpb25hcnkgb2Ygbm9uLXRlcm1pbmFsIHRyYW5zaXRpb25zCisgICAgICAgIGR0cmFucyA9IHt9CisgICAgICAgIGZvciB0IGluIHRyYW5zOgorICAgICAgICAgICAgZHRyYW5zW3RdID0gMQorCisgICAgICAgICMgTG9vcCBvdmVyIGFsbCB0cmFuc2l0aW9ucyBhbmQgY29tcHV0ZSBsb29rYmFja3MgYW5kIGluY2x1ZGVzCisgICAgICAgIGZvciBzdGF0ZSxOIGluIHRyYW5zOgorICAgICAgICAgICAgbG9va2IgPSBbXQorICAgICAgICAgICAgaW5jbHVkZXMgPSBbXQorICAgICAgICAgICAgZm9yIHAgaW4gQ1tzdGF0ZV06CisgICAgICAgICAgICAgICAgaWYgcC5uYW1lICE9IE46IGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAjIE9rYXksIHdlIGhhdmUgYSBuYW1lIG1hdGNoLiAgV2Ugbm93IGZvbGxvdyB0aGUgcHJvZHVjdGlvbiBhbGwgdGhlIHdheQorICAgICAgICAgICAgICAgICMgdGhyb3VnaCB0aGUgc3RhdGUgbWFjaGluZSB1bnRpbCB3ZSBnZXQgdGhlIC4gb24gdGhlIHJpZ2h0IGhhbmQgc2lkZQorCisgICAgICAgICAgICAgICAgbHJfaW5kZXggPSBwLmxyX2luZGV4CisgICAgICAgICAgICAgICAgaiA9IHN0YXRlCisgICAgICAgICAgICAgICAgd2hpbGUgbHJfaW5kZXggPCBwLmxlbiAtIDE6CisgICAgICAgICAgICAgICAgICAgICBscl9pbmRleCA9IGxyX2luZGV4ICsgMQorICAgICAgICAgICAgICAgICAgICAgdCA9IHAucHJvZFtscl9pbmRleF0KKworICAgICAgICAgICAgICAgICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhpcyBzeW1ib2wgYW5kIHN0YXRlIGFyZSBhIG5vbi10ZXJtaW5hbCB0cmFuc2l0aW9uCisgICAgICAgICAgICAgICAgICAgICBpZiAoaix0KSBpbiBkdHJhbnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFllcy4gIE9rYXksIHRoZXJlIGlzIHNvbWUgY2hhbmNlIHRoYXQgdGhpcyBpcyBhbiBpbmNsdWRlcyByZWxhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgb25seSB3YXkgdG8ga25vdyBmb3IgY2VydGFpbiBpcyB3aGV0aGVyIHRoZSByZXN0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwcm9kdWN0aW9uIGRlcml2ZXMgZW1wdHkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgbGkgPSBscl9pbmRleCArIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIGxpIDwgcC5sZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHAucHJvZFtsaV0gaW4gc2VsZi5ncmFtbWFyLlRlcm1pbmFsczogYnJlYWsgICAgICAjIE5vIGZvcmdldCBpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgcC5wcm9kW2xpXSBpbiBudWxsYWJsZTogYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGkgPSBsaSArIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQXBwZWFycyB0byBiZSBhIHJlbGF0aW9uIGJldHdlZW4gKGosdCkgYW5kIChzdGF0ZSxOKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcy5hcHBlbmQoKGosdCkpCisKKyAgICAgICAgICAgICAgICAgICAgIGcgPSBzZWxmLmxyMF9nb3RvKENbal0sdCkgICAgICAgICAgICAgICAjIEdvIHRvIG5leHQgc2V0CisgICAgICAgICAgICAgICAgICAgICBqID0gc2VsZi5scjBfY2lkaGFzaC5nZXQoaWQoZyksLTEpICAgICAjIEdvIHRvIG5leHQgc3RhdGUKKworICAgICAgICAgICAgICAgICMgV2hlbiB3ZSBnZXQgaGVyZSwgaiBpcyB0aGUgZmluYWwgc3RhdGUsIG5vdyB3ZSBoYXZlIHRvIGxvY2F0ZSB0aGUgcHJvZHVjdGlvbgorICAgICAgICAgICAgICAgIGZvciByIGluIENbal06CisgICAgICAgICAgICAgICAgICAgICBpZiByLm5hbWUgIT0gcC5uYW1lOiBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgaWYgci5sZW4gIT0gcC5sZW46ICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgIGkgPSAwCisgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgbG9vayBpcyBjb21wYXJpbmcgYSBwcm9kdWN0aW9uICIuIEEgQiBDIiB3aXRoICJBIEIgQyAuIgorICAgICAgICAgICAgICAgICAgICAgd2hpbGUgaSA8IHIubHJfaW5kZXg6CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHIucHJvZFtpXSAhPSBwLnByb2RbaSsxXTogYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyAxCisgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYi5hcHBlbmQoKGoscikpCisgICAgICAgICAgICBmb3IgaSBpbiBpbmNsdWRlczoKKyAgICAgICAgICAgICAgICAgaWYgbm90IGkgaW4gaW5jbHVkZWRpY3Q6IGluY2x1ZGVkaWN0W2ldID0gW10KKyAgICAgICAgICAgICAgICAgaW5jbHVkZWRpY3RbaV0uYXBwZW5kKChzdGF0ZSxOKSkKKyAgICAgICAgICAgIGxvb2tkaWN0WyhzdGF0ZSxOKV0gPSBsb29rYgorCisgICAgICAgIHJldHVybiBsb29rZGljdCxpbmNsdWRlZGljdAorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgY29tcHV0ZV9yZWFkX3NldHMoKQorICAgICMKKyAgICAjIEdpdmVuIGEgc2V0IG9mIExSKDApIGl0ZW1zLCB0aGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSByZWFkIHNldHMuCisgICAgIworICAgICMgSW5wdXRzOiAgQyAgICAgICAgPSAgU2V0IG9mIExSKDApIGl0ZW1zCisgICAgIyAgICAgICAgICBudHJhbnMgICA9IFNldCBvZiBub250ZXJtaW5hbCB0cmFuc2l0aW9ucworICAgICMgICAgICAgICAgbnVsbGFibGUgPSBTZXQgb2YgZW1wdHkgdHJhbnNpdGlvbnMKKyAgICAjCisgICAgIyBSZXR1cm5zIGEgc2V0IGNvbnRhaW5pbmcgdGhlIHJlYWQgc2V0cworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiBjb21wdXRlX3JlYWRfc2V0cyhzZWxmLEMsIG50cmFucywgbnVsbGFibGUpOgorICAgICAgICBGUCA9IGxhbWJkYSB4OiBzZWxmLmRyX3JlbGF0aW9uKEMseCxudWxsYWJsZSkKKyAgICAgICAgUiA9ICBsYW1iZGEgeDogc2VsZi5yZWFkc19yZWxhdGlvbihDLHgsbnVsbGFibGUpCisgICAgICAgIEYgPSBkaWdyYXBoKG50cmFucyxSLEZQKQorICAgICAgICByZXR1cm4gRgorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgY29tcHV0ZV9mb2xsb3dfc2V0cygpCisgICAgIworICAgICMgR2l2ZW4gYSBzZXQgb2YgTFIoMCkgaXRlbXMsIGEgc2V0IG9mIG5vbi10ZXJtaW5hbCB0cmFuc2l0aW9ucywgYSByZWFkc2V0LAorICAgICMgYW5kIGFuIGluY2x1ZGUgc2V0LCB0aGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSBmb2xsb3cgc2V0cworICAgICMKKyAgICAjIEZvbGxvdyhwLEEpID0gUmVhZChwLEEpIFUgVSB7Rm9sbG93KHAnLEIpIHwgKHAsQSkgSU5DTFVERVMgKHAnLEIpfQorICAgICMKKyAgICAjIElucHV0czoKKyAgICAjICAgICAgICAgICAgbnRyYW5zICAgICA9IFNldCBvZiBub250ZXJtaW5hbCB0cmFuc2l0aW9ucworICAgICMgICAgICAgICAgICByZWFkc2V0cyAgID0gUmVhZHNldCAocHJldmlvdXNseSBjb21wdXRlZCkKKyAgICAjICAgICAgICAgICAgaW5jbHNldHMgICA9IEluY2x1ZGUgc2V0cyAocHJldmlvdXNseSBjb21wdXRlZCkKKyAgICAjCisgICAgIyBSZXR1cm5zIGEgc2V0IGNvbnRhaW5pbmcgdGhlIGZvbGxvdyBzZXRzCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIGNvbXB1dGVfZm9sbG93X3NldHMoc2VsZixudHJhbnMscmVhZHNldHMsaW5jbHNldHMpOgorICAgICAgICAgRlAgPSBsYW1iZGEgeDogcmVhZHNldHNbeF0KKyAgICAgICAgIFIgID0gbGFtYmRhIHg6IGluY2xzZXRzLmdldCh4LFtdKQorICAgICAgICAgRiA9IGRpZ3JhcGgobnRyYW5zLFIsRlApCisgICAgICAgICByZXR1cm4gRgorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgYWRkX2xvb2thaGVhZHMoKQorICAgICMKKyAgICAjIEF0dGFjaGVzIHRoZSBsb29rYWhlYWQgc3ltYm9scyB0byBncmFtbWFyIHJ1bGVzLgorICAgICMKKyAgICAjIElucHV0czogICAgbG9va2JhY2tzICAgICAgICAgLSAgU2V0IG9mIGxvb2tiYWNrIHJlbGF0aW9ucworICAgICMgICAgICAgICAgICBmb2xsb3dzZXQgICAgICAgICAtICBDb21wdXRlZCBmb2xsb3cgc2V0CisgICAgIworICAgICMgVGhpcyBmdW5jdGlvbiBkaXJlY3RseSBhdHRhY2hlcyB0aGUgbG9va2FoZWFkcyB0byBwcm9kdWN0aW9ucyBjb250YWluZWQKKyAgICAjIGluIHRoZSBsb29rYmFja3Mgc2V0CisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIGFkZF9sb29rYWhlYWRzKHNlbGYsbG9va2JhY2tzLGZvbGxvd3NldCk6CisgICAgICAgIGZvciB0cmFucyxsYiBpbiBsb29rYmFja3MuaXRlbXMoKToKKyAgICAgICAgICAgICMgTG9vcCBvdmVyIHByb2R1Y3Rpb25zIGluIGxvb2tiYWNrCisgICAgICAgICAgICBmb3Igc3RhdGUscCBpbiBsYjoKKyAgICAgICAgICAgICAgICAgaWYgbm90IHN0YXRlIGluIHAubG9va2FoZWFkczoKKyAgICAgICAgICAgICAgICAgICAgICBwLmxvb2thaGVhZHNbc3RhdGVdID0gW10KKyAgICAgICAgICAgICAgICAgZiA9IGZvbGxvd3NldC5nZXQodHJhbnMsW10pCisgICAgICAgICAgICAgICAgIGZvciBhIGluIGY6CisgICAgICAgICAgICAgICAgICAgICAgaWYgYSBub3QgaW4gcC5sb29rYWhlYWRzW3N0YXRlXTogcC5sb29rYWhlYWRzW3N0YXRlXS5hcHBlbmQoYSkKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGFkZF9sYWxyX2xvb2thaGVhZHMoKQorICAgICMKKyAgICAjIFRoaXMgZnVuY3Rpb24gZG9lcyBhbGwgb2YgdGhlIHdvcmsgb2YgYWRkaW5nIGxvb2thaGVhZCBpbmZvcm1hdGlvbiBmb3IgdXNlCisgICAgIyB3aXRoIExBTFIgcGFyc2luZworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiBhZGRfbGFscl9sb29rYWhlYWRzKHNlbGYsQyk6CisgICAgICAgICMgRGV0ZXJtaW5lIGFsbCBvZiB0aGUgbnVsbGFibGUgbm9udGVybWluYWxzCisgICAgICAgIG51bGxhYmxlID0gc2VsZi5jb21wdXRlX251bGxhYmxlX25vbnRlcm1pbmFscygpCisKKyAgICAgICAgIyBGaW5kIGFsbCBub24tdGVybWluYWwgdHJhbnNpdGlvbnMKKyAgICAgICAgdHJhbnMgPSBzZWxmLmZpbmRfbm9udGVybWluYWxfdHJhbnNpdGlvbnMoQykKKworICAgICAgICAjIENvbXB1dGUgcmVhZCBzZXRzCisgICAgICAgIHJlYWRzZXRzID0gc2VsZi5jb21wdXRlX3JlYWRfc2V0cyhDLHRyYW5zLG51bGxhYmxlKQorCisgICAgICAgICMgQ29tcHV0ZSBsb29rYmFjay9pbmNsdWRlcyByZWxhdGlvbnMKKyAgICAgICAgbG9va2QsIGluY2x1ZGVkID0gc2VsZi5jb21wdXRlX2xvb2tiYWNrX2luY2x1ZGVzKEMsdHJhbnMsbnVsbGFibGUpCisKKyAgICAgICAgIyBDb21wdXRlIExBTFIgRk9MTE9XIHNldHMKKyAgICAgICAgZm9sbG93c2V0cyA9IHNlbGYuY29tcHV0ZV9mb2xsb3dfc2V0cyh0cmFucyxyZWFkc2V0cyxpbmNsdWRlZCkKKworICAgICAgICAjIEFkZCBhbGwgb2YgdGhlIGxvb2thaGVhZHMKKyAgICAgICAgc2VsZi5hZGRfbG9va2FoZWFkcyhsb29rZCxmb2xsb3dzZXRzKQorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgbHJfcGFyc2VfdGFibGUoKQorICAgICMKKyAgICAjIFRoaXMgZnVuY3Rpb24gY29uc3RydWN0cyB0aGUgcGFyc2UgdGFibGVzIGZvciBTTFIgb3IgTEFMUgorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBkZWYgbHJfcGFyc2VfdGFibGUoc2VsZik6CisgICAgICAgIFByb2R1Y3Rpb25zID0gc2VsZi5ncmFtbWFyLlByb2R1Y3Rpb25zCisgICAgICAgIFByZWNlZGVuY2UgID0gc2VsZi5ncmFtbWFyLlByZWNlZGVuY2UKKyAgICAgICAgZ290byAgID0gc2VsZi5scl9nb3RvICAgICAgICAgIyBHb3RvIGFycmF5CisgICAgICAgIGFjdGlvbiA9IHNlbGYubHJfYWN0aW9uICAgICAgICMgQWN0aW9uIGFycmF5CisgICAgICAgIGxvZyAgICA9IHNlbGYubG9nICAgICAgICAgICAgICMgTG9nZ2VyIGZvciBvdXRwdXQKKworICAgICAgICBhY3Rpb25wID0geyB9ICAgICAgICAgICAgICAgICAjIEFjdGlvbiBwcm9kdWN0aW9uIGFycmF5ICh0ZW1wb3JhcnkpCisgICAgICAgIAorICAgICAgICBsb2cuaW5mbygiUGFyc2luZyBtZXRob2Q6ICVzIiwgc2VsZi5scl9tZXRob2QpCisKKyAgICAgICAgIyBTdGVwIDE6IENvbnN0cnVjdCBDID0geyBJMCwgSTEsIC4uLiBJTn0sIGNvbGxlY3Rpb24gb2YgTFIoMCkgaXRlbXMKKyAgICAgICAgIyBUaGlzIGRldGVybWluZXMgdGhlIG51bWJlciBvZiBzdGF0ZXMKKworICAgICAgICBDID0gc2VsZi5scjBfaXRlbXMoKQorCisgICAgICAgIGlmIHNlbGYubHJfbWV0aG9kID09ICdMQUxSJzoKKyAgICAgICAgICAgIHNlbGYuYWRkX2xhbHJfbG9va2FoZWFkcyhDKQorCisgICAgICAgICMgQnVpbGQgdGhlIHBhcnNlciB0YWJsZSwgc3RhdGUgYnkgc3RhdGUKKyAgICAgICAgc3QgPSAwCisgICAgICAgIGZvciBJIGluIEM6CisgICAgICAgICAgICAjIExvb3Agb3ZlciBlYWNoIHByb2R1Y3Rpb24gaW4gSQorICAgICAgICAgICAgYWN0bGlzdCA9IFsgXSAgICAgICAgICAgICAgIyBMaXN0IG9mIGFjdGlvbnMKKyAgICAgICAgICAgIHN0X2FjdGlvbiAgPSB7IH0KKyAgICAgICAgICAgIHN0X2FjdGlvbnAgPSB7IH0KKyAgICAgICAgICAgIHN0X2dvdG8gICAgPSB7IH0KKyAgICAgICAgICAgIGxvZy5pbmZvKCIiKQorICAgICAgICAgICAgbG9nLmluZm8oInN0YXRlICVkIiwgc3QpCisgICAgICAgICAgICBsb2cuaW5mbygiIikKKyAgICAgICAgICAgIGZvciBwIGluIEk6CisgICAgICAgICAgICAgICAgbG9nLmluZm8oIiAgICAoJWQpICVzIiwgcC5udW1iZXIsIHN0cihwKSkKKyAgICAgICAgICAgIGxvZy5pbmZvKCIiKQorCisgICAgICAgICAgICBmb3IgcCBpbiBJOgorICAgICAgICAgICAgICAgICAgICBpZiBwLmxlbiA9PSBwLmxyX2luZGV4ICsgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHAubmFtZSA9PSAiUyciOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgU3RhcnQgc3ltYm9sLiBBY2NlcHQhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RfYWN0aW9uWyIkZW5kIl0gPSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RfYWN0aW9ucFsiJGVuZCJdID0gcAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGFyZSBhdCB0aGUgZW5kIG9mIGEgcHJvZHVjdGlvbi4gIFJlZHVjZSEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmxyX21ldGhvZCA9PSAnTEFMUic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhaGVhZHMgPSBwLmxvb2thaGVhZHNbc3RdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFoZWFkcyA9IHNlbGYuZ3JhbW1hci5Gb2xsb3dbcC5uYW1lXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhIGluIGxhaGVhZHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGxpc3QuYXBwZW5kKChhLHAsInJlZHVjZSB1c2luZyBydWxlICVkICglcykiICUgKHAubnVtYmVyLHApKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IHN0X2FjdGlvbi5nZXQoYSxOb25lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXaG9hLiBIYXZlIGEgc2hpZnQvcmVkdWNlIG9yIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHIgPiAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTmVlZCB0byBkZWNpZGUgb24gc2hpZnQgb3IgcmVkdWNlIGhlcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEJ5IGRlZmF1bHQgd2UgZmF2b3Igc2hpZnRpbmcuIE5lZWQgdG8gYWRkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzb21lIHByZWNlZGVuY2UgcnVsZXMgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHJlYyxzbGV2ZWwgPSBQcm9kdWN0aW9uc1tzdF9hY3Rpb25wW2FdLm51bWJlcl0ucHJlYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJwcmVjLHJsZXZlbCA9IFByZWNlZGVuY2UuZ2V0KGEsKCdyaWdodCcsMCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsZXZlbCA8IHJsZXZlbCkgb3IgKChzbGV2ZWwgPT0gcmxldmVsKSBhbmQgKHJwcmVjID09ICdsZWZ0JykpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIHJlYWxseSBuZWVkIHRvIHJlZHVjZSBoZXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdF9hY3Rpb25bYV0gPSAtcC5udW1iZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RfYWN0aW9ucFthXSA9IHAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNsZXZlbCBhbmQgbm90IHJsZXZlbDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKCIgICEgc2hpZnQvcmVkdWNlIGNvbmZsaWN0IGZvciAlcyByZXNvbHZlZCBhcyByZWR1Y2UiLGEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNyX2NvbmZsaWN0cy5hcHBlbmQoKHN0LGEsJ3JlZHVjZScpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0aW9uc1twLm51bWJlcl0ucmVkdWNlZCArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiAoc2xldmVsID09IHJsZXZlbCkgYW5kIChycHJlYyA9PSAnbm9uYXNzb2MnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RfYWN0aW9uW2FdID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSG1tbS4gR3Vlc3Mgd2UnbGwga2VlcCB0aGUgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJsZXZlbDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKCIgICEgc2hpZnQvcmVkdWNlIGNvbmZsaWN0IGZvciAlcyByZXNvbHZlZCBhcyBzaGlmdCIsYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3JfY29uZmxpY3RzLmFwcGVuZCgoc3QsYSwnc2hpZnQnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgciA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSZWR1Y2UvcmVkdWNlIGNvbmZsaWN0LiAgIEluIHRoaXMgY2FzZSwgd2UgZmF2b3IgdGhlIHJ1bGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoYXQgd2FzIGRlZmluZWQgZmlyc3QgaW4gdGhlIGdyYW1tYXIgZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZHAgPSBQcm9kdWN0aW9uc1stcl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcCA9IFByb2R1Y3Rpb25zW3AubnVtYmVyXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9sZHAubGluZSA+IHBwLmxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0X2FjdGlvblthXSA9IC1wLm51bWJlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdF9hY3Rpb25wW2FdID0gcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5wLHJlamVjdHAgPSBwcCxvbGRwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3Rpb25zW3AubnVtYmVyXS5yZWR1Y2VkICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdGlvbnNbb2xkcC5udW1iZXJdLnJlZHVjZWQgLT0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3NlbnAscmVqZWN0cCA9IG9sZHAscHAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJyX2NvbmZsaWN0cy5hcHBlbmQoKHN0LGNob3NlbnAscmVqZWN0cCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oIiAgISByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0IGZvciAlcyByZXNvbHZlZCB1c2luZyBydWxlICVkICglcykiLCBhLHN0X2FjdGlvbnBbYV0ubnVtYmVyLCBzdF9hY3Rpb25wW2FdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBMQUxSRXJyb3IoIlVua25vd24gY29uZmxpY3QgaW4gc3RhdGUgJWQiICUgc3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdF9hY3Rpb25bYV0gPSAtcC5udW1iZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0X2FjdGlvbnBbYV0gPSBwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0aW9uc1twLm51bWJlcl0ucmVkdWNlZCArPSAxCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpID0gcC5scl9pbmRleAorICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHAucHJvZFtpKzFdICAgICAgICMgR2V0IHN5bWJvbCByaWdodCBhZnRlciB0aGUgIi4iCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBhIGluIHNlbGYuZ3JhbW1hci5UZXJtaW5hbHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IHNlbGYubHIwX2dvdG8oSSxhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBzZWxmLmxyMF9jaWRoYXNoLmdldChpZChnKSwtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBqID49IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgYXJlIGluIGEgc2hpZnQgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0bGlzdC5hcHBlbmQoKGEscCwic2hpZnQgYW5kIGdvIHRvIHN0YXRlICVkIiAlIGopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gc3RfYWN0aW9uLmdldChhLE5vbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdob2EgaGF2ZSBhIHNoaWZ0L3JlZHVjZSBvciBzaGlmdC9zaGlmdCBjb25mbGljdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgciA+IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgciAhPSBqOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBMQUxSRXJyb3IoIlNoaWZ0L3NoaWZ0IGNvbmZsaWN0IGluIHN0YXRlICVkIiAlIHN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiByIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIERvIGEgcHJlY2VkZW5jZSBjaGVjay4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgLSAgaWYgcHJlY2VkZW5jZSBvZiByZWR1Y2UgcnVsZSBpcyBoaWdoZXIsIHdlIHJlZHVjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgLSAgaWYgcHJlY2VkZW5jZSBvZiByZWR1Y2UgaXMgc2FtZSBhbmQgbGVmdCBhc3NvYywgd2UgcmVkdWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAtICBvdGhlcndpc2Ugd2Ugc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycHJlYyxybGV2ZWwgPSBQcm9kdWN0aW9uc1tzdF9hY3Rpb25wW2FdLm51bWJlcl0ucHJlYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcmVjLHNsZXZlbCA9IFByZWNlZGVuY2UuZ2V0KGEsKCdyaWdodCcsMCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsZXZlbCA+IHJsZXZlbCkgb3IgKChzbGV2ZWwgPT0gcmxldmVsKSBhbmQgKHJwcmVjID09ICdyaWdodCcpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBkZWNpZGUgdG8gc2hpZnQgaGVyZS4uLiBoaWdoZXN0IHByZWNlZGVuY2UgdG8gc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdGlvbnNbc3RfYWN0aW9ucFthXS5udW1iZXJdLnJlZHVjZWQgLT0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdF9hY3Rpb25bYV0gPSBqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0X2FjdGlvbnBbYV0gPSBwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBybGV2ZWw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbygiICAhIHNoaWZ0L3JlZHVjZSBjb25mbGljdCBmb3IgJXMgcmVzb2x2ZWQgYXMgc2hpZnQiLGEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNyX2NvbmZsaWN0cy5hcHBlbmQoKHN0LGEsJ3NoaWZ0JykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiAoc2xldmVsID09IHJsZXZlbCkgYW5kIChycHJlYyA9PSAnbm9uYXNzb2MnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RfYWN0aW9uW2FdID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSG1tbS4gR3Vlc3Mgd2UnbGwga2VlcCB0aGUgcmVkdWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzbGV2ZWwgYW5kIG5vdCBybGV2ZWw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbygiICAhIHNoaWZ0L3JlZHVjZSBjb25mbGljdCBmb3IgJXMgcmVzb2x2ZWQgYXMgcmVkdWNlIixhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zcl9jb25mbGljdHMuYXBwZW5kKChzdCxhLCdyZWR1Y2UnKSkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBMQUxSRXJyb3IoIlVua25vd24gY29uZmxpY3QgaW4gc3RhdGUgJWQiICUgc3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdF9hY3Rpb25bYV0gPSBqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdF9hY3Rpb25wW2FdID0gcAorCisgICAgICAgICAgICAjIFByaW50IHRoZSBhY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHRlcm1pbmFsCisgICAgICAgICAgICBfYWN0cHJpbnQgPSB7IH0KKyAgICAgICAgICAgIGZvciBhLHAsbSBpbiBhY3RsaXN0OgorICAgICAgICAgICAgICAgIGlmIGEgaW4gc3RfYWN0aW9uOgorICAgICAgICAgICAgICAgICAgICBpZiBwIGlzIHN0X2FjdGlvbnBbYV06CisgICAgICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbygiICAgICUtMTVzICVzIixhLG0pCisgICAgICAgICAgICAgICAgICAgICAgICBfYWN0cHJpbnRbKGEsbSldID0gMQorICAgICAgICAgICAgbG9nLmluZm8oIiIpCisgICAgICAgICAgICAjIFByaW50IHRoZSBhY3Rpb25zIHRoYXQgd2VyZSBub3QgdXNlZC4gKGRlYnVnZ2luZykKKyAgICAgICAgICAgIG5vdF91c2VkID0gMAorICAgICAgICAgICAgZm9yIGEscCxtIGluIGFjdGxpc3Q6CisgICAgICAgICAgICAgICAgaWYgYSBpbiBzdF9hY3Rpb246CisgICAgICAgICAgICAgICAgICAgIGlmIHAgaXMgbm90IHN0X2FjdGlvbnBbYV06CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgKGEsbSkgaW4gX2FjdHByaW50OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiICAhICUtMTVzIFsgJXMgXSIsYSxtKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdF91c2VkID0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hY3RwcmludFsoYSxtKV0gPSAxCisgICAgICAgICAgICBpZiBub3RfdXNlZDoKKyAgICAgICAgICAgICAgICBsb2cuZGVidWcoIiIpCisKKyAgICAgICAgICAgICMgQ29uc3RydWN0IHRoZSBnb3RvIHRhYmxlIGZvciB0aGlzIHN0YXRlCisKKyAgICAgICAgICAgIG5rZXlzID0geyB9CisgICAgICAgICAgICBmb3IgaWkgaW4gSToKKyAgICAgICAgICAgICAgICBmb3IgcyBpbiBpaS51c3ltczoKKyAgICAgICAgICAgICAgICAgICAgaWYgcyBpbiBzZWxmLmdyYW1tYXIuTm9udGVybWluYWxzOgorICAgICAgICAgICAgICAgICAgICAgICAgbmtleXNbc10gPSBOb25lCisgICAgICAgICAgICBmb3IgbiBpbiBua2V5czoKKyAgICAgICAgICAgICAgICBnID0gc2VsZi5scjBfZ290byhJLG4pCisgICAgICAgICAgICAgICAgaiA9IHNlbGYubHIwX2NpZGhhc2guZ2V0KGlkKGcpLC0xKQorICAgICAgICAgICAgICAgIGlmIGogPj0gMDoKKyAgICAgICAgICAgICAgICAgICAgc3RfZ290b1tuXSA9IGoKKyAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oIiAgICAlLTMwcyBzaGlmdCBhbmQgZ28gdG8gc3RhdGUgJWQiLG4saikKKworICAgICAgICAgICAgYWN0aW9uW3N0XSA9IHN0X2FjdGlvbgorICAgICAgICAgICAgYWN0aW9ucFtzdF0gPSBzdF9hY3Rpb25wCisgICAgICAgICAgICBnb3RvW3N0XSA9IHN0X2dvdG8KKyAgICAgICAgICAgIHN0ICs9IDEKKworCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgd3JpdGUoKQorICAgICMKKyAgICAjIFRoaXMgZnVuY3Rpb24gd3JpdGVzIHRoZSBMUiBwYXJzaW5nIHRhYmxlcyB0byBhIGZpbGUKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgd3JpdGVfdGFibGUoc2VsZixtb2R1bGVuYW1lLG91dHB1dGRpcj0nJyxzaWduYXR1cmU9IiIpOgorICAgICAgICBiYXNlbW9kdWxlbmFtZSA9IG1vZHVsZW5hbWUuc3BsaXQoIi4iKVstMV0KKyAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ob3V0cHV0ZGlyLGJhc2Vtb2R1bGVuYW1lKSArICIucHkiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCJ3IikKKworICAgICAgICAgICAgZi53cml0ZSgiIiIKKyMgJXMKKyMgVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLiBEbyBub3QgZWRpdC4KK190YWJ2ZXJzaW9uID0gJXIKKworX2xyX21ldGhvZCA9ICVyCisKK19scl9zaWduYXR1cmUgPSAlcgorICAgICIiIiAlIChmaWxlbmFtZSwgX190YWJ2ZXJzaW9uX18sIHNlbGYubHJfbWV0aG9kLCBzaWduYXR1cmUpKQorCisgICAgICAgICAgICAjIENoYW5nZSBzbWFsbGVyIHRvIDAgdG8gZ28gYmFjayB0byBvcmlnaW5hbCB0YWJsZXMKKyAgICAgICAgICAgIHNtYWxsZXIgPSAxCisKKyAgICAgICAgICAgICMgRmFjdG9yIG91dCBuYW1lcyB0byB0cnkgYW5kIG1ha2Ugc21hbGxlcgorICAgICAgICAgICAgaWYgc21hbGxlcjoKKyAgICAgICAgICAgICAgICBpdGVtcyA9IHsgfQorCisgICAgICAgICAgICAgICAgZm9yIHMsbmQgaW4gc2VsZi5scl9hY3Rpb24uaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICBmb3IgbmFtZSx2IGluIG5kLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgICAgaSA9IGl0ZW1zLmdldChuYW1lKQorICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpOgorICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAoW10sW10pCisgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNbbmFtZV0gPSBpCisgICAgICAgICAgICAgICAgICAgICAgaVswXS5hcHBlbmQocykKKyAgICAgICAgICAgICAgICAgICAgICBpWzFdLmFwcGVuZCh2KQorCisgICAgICAgICAgICAgICAgZi53cml0ZSgiXG5fbHJfYWN0aW9uX2l0ZW1zID0geyIpCisgICAgICAgICAgICAgICAgZm9yIGssdiBpbiBpdGVtcy5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCIlcjooWyIgJSBrKQorICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiB2WzBdOgorICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiJXIsIiAlIGkpCisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIl0sWyIpCisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHZbMV06CisgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCIlciwiICUgaSkKKworICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCJdKSwiKQorICAgICAgICAgICAgICAgIGYud3JpdGUoIn1cbiIpCisKKyAgICAgICAgICAgICAgICBmLndyaXRlKCIiIgorX2xyX2FjdGlvbiA9IHsgfQorZm9yIF9rLCBfdiBpbiBfbHJfYWN0aW9uX2l0ZW1zLml0ZW1zKCk6CisgICBmb3IgX3gsX3kgaW4gemlwKF92WzBdLF92WzFdKToKKyAgICAgIGlmIG5vdCBfeCBpbiBfbHJfYWN0aW9uOiAgX2xyX2FjdGlvbltfeF0gPSB7IH0KKyAgICAgIF9scl9hY3Rpb25bX3hdW19rXSA9IF95CitkZWwgX2xyX2FjdGlvbl9pdGVtcworIiIiKQorCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYud3JpdGUoIlxuX2xyX2FjdGlvbiA9IHsgIik7CisgICAgICAgICAgICAgICAgZm9yIGssdiBpbiBzZWxmLmxyX2FjdGlvbi5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCIoJXIsJXIpOiVyLCIgJSAoa1swXSxrWzFdLHYpKQorICAgICAgICAgICAgICAgIGYud3JpdGUoIn1cbiIpOworCisgICAgICAgICAgICBpZiBzbWFsbGVyOgorICAgICAgICAgICAgICAgICMgRmFjdG9yIG91dCBuYW1lcyB0byB0cnkgYW5kIG1ha2Ugc21hbGxlcgorICAgICAgICAgICAgICAgIGl0ZW1zID0geyB9CisKKyAgICAgICAgICAgICAgICBmb3IgcyxuZCBpbiBzZWxmLmxyX2dvdG8uaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICBmb3IgbmFtZSx2IGluIG5kLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgICAgaSA9IGl0ZW1zLmdldChuYW1lKQorICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpOgorICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAoW10sW10pCisgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNbbmFtZV0gPSBpCisgICAgICAgICAgICAgICAgICAgICAgaVswXS5hcHBlbmQocykKKyAgICAgICAgICAgICAgICAgICAgICBpWzFdLmFwcGVuZCh2KQorCisgICAgICAgICAgICAgICAgZi53cml0ZSgiXG5fbHJfZ290b19pdGVtcyA9IHsiKQorICAgICAgICAgICAgICAgIGZvciBrLHYgaW4gaXRlbXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiJXI6KFsiICUgaykKKyAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gdlswXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIiVyLCIgJSBpKQorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCJdLFsiKQorICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiB2WzFdOgorICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiJXIsIiAlIGkpCisKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiXSksIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJ9XG4iKQorCisgICAgICAgICAgICAgICAgZi53cml0ZSgiIiIKK19scl9nb3RvID0geyB9Citmb3IgX2ssIF92IGluIF9scl9nb3RvX2l0ZW1zLml0ZW1zKCk6CisgICBmb3IgX3gsX3kgaW4gemlwKF92WzBdLF92WzFdKToKKyAgICAgICBpZiBub3QgX3ggaW4gX2xyX2dvdG86IF9scl9nb3RvW194XSA9IHsgfQorICAgICAgIF9scl9nb3RvW194XVtfa10gPSBfeQorZGVsIF9scl9nb3RvX2l0ZW1zCisiIiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYud3JpdGUoIlxuX2xyX2dvdG8gPSB7ICIpOworICAgICAgICAgICAgICAgIGZvciBrLHYgaW4gc2VsZi5scl9nb3RvLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIiglciwlcik6JXIsIiAlIChrWzBdLGtbMV0sdikpCisgICAgICAgICAgICAgICAgZi53cml0ZSgifVxuIik7CisKKyAgICAgICAgICAgICMgV3JpdGUgcHJvZHVjdGlvbiB0YWJsZQorICAgICAgICAgICAgZi53cml0ZSgiX2xyX3Byb2R1Y3Rpb25zID0gW1xuIikKKyAgICAgICAgICAgIGZvciBwIGluIHNlbGYubHJfcHJvZHVjdGlvbnM6CisgICAgICAgICAgICAgICAgaWYgcC5mdW5jOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCIgICglciwlciwlZCwlciwlciwlZCksXG4iICUgKHAuc3RyLHAubmFtZSwgcC5sZW4sIHAuZnVuYyxwLmZpbGUscC5saW5lKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCIgICglciwlciwlZCxOb25lLE5vbmUsTm9uZSksXG4iICUgKHN0cihwKSxwLm5hbWUsIHAubGVuKSkKKyAgICAgICAgICAgIGYud3JpdGUoIl1cbiIpCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKVsxXQorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiVW5hYmxlIHRvIGNyZWF0ZSAnJXMnXG4iICUgZmlsZW5hbWUpCisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKHN0cihlKSsiXG4iKQorICAgICAgICAgICAgcmV0dXJuCisKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIHBpY2tsZV90YWJsZSgpCisgICAgIworICAgICMgVGhpcyBmdW5jdGlvbiBwaWNrbGVzIHRoZSBMUiBwYXJzaW5nIHRhYmxlcyB0byBhIHN1cHBsaWVkIGZpbGUgb2JqZWN0CisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIHBpY2tsZV90YWJsZShzZWxmLGZpbGVuYW1lLHNpZ25hdHVyZT0iIik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBpbXBvcnQgcGlja2xlCisgICAgICAgIG91dGYgPSBvcGVuKGZpbGVuYW1lLCJ3YiIpCisgICAgICAgIHBpY2tsZS5kdW1wKF9fdGFidmVyc2lvbl9fLG91dGYscGlja2xlX3Byb3RvY29sKQorICAgICAgICBwaWNrbGUuZHVtcChzZWxmLmxyX21ldGhvZCxvdXRmLHBpY2tsZV9wcm90b2NvbCkKKyAgICAgICAgcGlja2xlLmR1bXAoc2lnbmF0dXJlLG91dGYscGlja2xlX3Byb3RvY29sKQorICAgICAgICBwaWNrbGUuZHVtcChzZWxmLmxyX2FjdGlvbixvdXRmLHBpY2tsZV9wcm90b2NvbCkKKyAgICAgICAgcGlja2xlLmR1bXAoc2VsZi5scl9nb3RvLG91dGYscGlja2xlX3Byb3RvY29sKQorCisgICAgICAgIG91dHAgPSBbXQorICAgICAgICBmb3IgcCBpbiBzZWxmLmxyX3Byb2R1Y3Rpb25zOgorICAgICAgICAgICAgaWYgcC5mdW5jOgorICAgICAgICAgICAgICAgIG91dHAuYXBwZW5kKChwLnN0cixwLm5hbWUsIHAubGVuLCBwLmZ1bmMscC5maWxlLHAubGluZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG91dHAuYXBwZW5kKChzdHIocCkscC5uYW1lLHAubGVuLE5vbmUsTm9uZSxOb25lKSkKKyAgICAgICAgcGlja2xlLmR1bXAob3V0cCxvdXRmLHBpY2tsZV9wcm90b2NvbCkKKyAgICAgICAgb3V0Zi5jbG9zZSgpCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT09IElOVFJPU1BFQ1RJT04gPT09CisjCisjIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFuZCBjbGFzc2VzIGFyZSB1c2VkIHRvIGltcGxlbWVudCB0aGUgUExZCisjIGludHJvc3BlY3Rpb24gZmVhdHVyZXMgZm9sbG93ZWQgYnkgdGhlIHlhY2MoKSBmdW5jdGlvbiBpdHNlbGYuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZ2V0X2NhbGxlcl9tb2R1bGVfZGljdCgpCisjCisjIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBhbGwgb2YgdGhlIHN5bWJvbHMgZGVmaW5lZCB3aXRoaW4KKyMgYSBjYWxsZXIgZnVydGhlciBkb3duIHRoZSBjYWxsIHN0YWNrLiAgVGhpcyBpcyB1c2VkIHRvIGdldCB0aGUgZW52aXJvbm1lbnQKKyMgYXNzb2NpYXRlZCB3aXRoIHRoZSB5YWNjKCkgY2FsbCBpZiBub25lIHdhcyBwcm92aWRlZC4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIGdldF9jYWxsZXJfbW9kdWxlX2RpY3QobGV2ZWxzKToKKyAgICB0cnk6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgIGUsYix0ID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgZiA9IHQudGJfZnJhbWUKKyAgICAgICAgd2hpbGUgbGV2ZWxzID4gMDoKKyAgICAgICAgICAgIGYgPSBmLmZfYmFjayAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGxldmVscyAtPSAxCisgICAgICAgIGxkaWN0ID0gZi5mX2dsb2JhbHMuY29weSgpCisgICAgICAgIGlmIGYuZl9nbG9iYWxzICE9IGYuZl9sb2NhbHM6CisgICAgICAgICAgICBsZGljdC51cGRhdGUoZi5mX2xvY2FscykKKworICAgICAgICByZXR1cm4gbGRpY3QKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBwYXJzZV9ncmFtbWFyKCkKKyMKKyMgVGhpcyB0YWtlcyBhIHJhdyBncmFtbWFyIHJ1bGUgc3RyaW5nIGFuZCBwYXJzZXMgaXQgaW50byBwcm9kdWN0aW9uIGRhdGEKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RlZiBwYXJzZV9ncmFtbWFyKGRvYyxmaWxlLGxpbmUpOgorICAgIGdyYW1tYXIgPSBbXQorICAgICMgU3BsaXQgdGhlIGRvYyBzdHJpbmcgaW50byBsaW5lcworICAgIHBzdHJpbmdzID0gZG9jLnNwbGl0bGluZXMoKQorICAgIGxhc3RwID0gTm9uZQorICAgIGRsaW5lID0gbGluZQorICAgIGZvciBwcyBpbiBwc3RyaW5nczoKKyAgICAgICAgZGxpbmUgKz0gMQorICAgICAgICBwID0gcHMuc3BsaXQoKQorICAgICAgICBpZiBub3QgcDogY29udGludWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgcFswXSA9PSAnfCc6CisgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGEgY29udGludWF0aW9uIG9mIGEgcHJldmlvdXMgcnVsZQorICAgICAgICAgICAgICAgIGlmIG5vdCBsYXN0cDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoIiVzOiVkOiBNaXNwbGFjZWQgJ3wnIiAlIChmaWxlLGRsaW5lKSkKKyAgICAgICAgICAgICAgICBwcm9kbmFtZSA9IGxhc3RwCisgICAgICAgICAgICAgICAgc3ltcyA9IHBbMTpdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByb2RuYW1lID0gcFswXQorICAgICAgICAgICAgICAgIGxhc3RwID0gcHJvZG5hbWUKKyAgICAgICAgICAgICAgICBzeW1zICAgPSBwWzI6XQorICAgICAgICAgICAgICAgIGFzc2lnbiA9IHBbMV0KKyAgICAgICAgICAgICAgICBpZiBhc3NpZ24gIT0gJzonIGFuZCBhc3NpZ24gIT0gJzo6PSc6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCIlczolZDogU3ludGF4IGVycm9yLiBFeHBlY3RlZCAnOiciICUgKGZpbGUsZGxpbmUpKQorCisgICAgICAgICAgICBncmFtbWFyLmFwcGVuZCgoZmlsZSxkbGluZSxwcm9kbmFtZSxzeW1zKSkKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCIlczolZDogU3ludGF4IGVycm9yIGluIHJ1bGUgJyVzJyIgJSAoZmlsZSxkbGluZSxwcy5zdHJpcCgpKSkKKworICAgIHJldHVybiBncmFtbWFyCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGFyc2VyUmVmbGVjdCgpCisjCisjIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBpbmZvcm1hdGlvbiBleHRyYWN0ZWQgZm9yIGJ1aWxkaW5nIGEgcGFyc2VyIGluY2x1ZGluZworIyBzdGFydCBzeW1ib2wsIGVycm9yIGZ1bmN0aW9uLCB0b2tlbnMsIHByZWNlZGVuY2UgbGlzdCwgYWN0aW9uIGZ1bmN0aW9ucywKKyMgZXRjLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorY2xhc3MgUGFyc2VyUmVmbGVjdChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLHBkaWN0LGxvZz1Ob25lKToKKyAgICAgICAgc2VsZi5wZGljdCAgICAgID0gcGRpY3QKKyAgICAgICAgc2VsZi5zdGFydCAgICAgID0gTm9uZQorICAgICAgICBzZWxmLmVycm9yX2Z1bmMgPSBOb25lCisgICAgICAgIHNlbGYudG9rZW5zICAgICA9IE5vbmUKKyAgICAgICAgc2VsZi5maWxlcyAgICAgID0ge30KKyAgICAgICAgc2VsZi5ncmFtbWFyICAgID0gW10KKyAgICAgICAgc2VsZi5lcnJvciAgICAgID0gMAorCisgICAgICAgIGlmIGxvZyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5sb2cgPSBQbHlMb2dnZXIoc3lzLnN0ZGVycikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubG9nID0gbG9nCisKKyAgICAjIEdldCBhbGwgb2YgdGhlIGJhc2ljIGluZm9ybWF0aW9uCisgICAgZGVmIGdldF9hbGwoc2VsZik6CisgICAgICAgIHNlbGYuZ2V0X3N0YXJ0KCkKKyAgICAgICAgc2VsZi5nZXRfZXJyb3JfZnVuYygpCisgICAgICAgIHNlbGYuZ2V0X3Rva2VucygpCisgICAgICAgIHNlbGYuZ2V0X3ByZWNlZGVuY2UoKQorICAgICAgICBzZWxmLmdldF9wZnVuY3Rpb25zKCkKKyAgICAgICAgCisgICAgIyBWYWxpZGF0ZSBhbGwgb2YgdGhlIGluZm9ybWF0aW9uCisgICAgZGVmIHZhbGlkYXRlX2FsbChzZWxmKToKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9zdGFydCgpCisgICAgICAgIHNlbGYudmFsaWRhdGVfZXJyb3JfZnVuYygpCisgICAgICAgIHNlbGYudmFsaWRhdGVfdG9rZW5zKCkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9wcmVjZWRlbmNlKCkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9wZnVuY3Rpb25zKCkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9maWxlcygpCisgICAgICAgIHJldHVybiBzZWxmLmVycm9yCisKKyAgICAjIENvbXB1dGUgYSBzaWduYXR1cmUgb3ZlciB0aGUgZ3JhbW1hcgorICAgIGRlZiBzaWduYXR1cmUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gaGFzaGxpYiBpbXBvcnQgbWQ1CisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIGZyb20gbWQ1IGltcG9ydCBtZDUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2lnID0gbWQ1KCkKKyAgICAgICAgICAgIGlmIHNlbGYuc3RhcnQ6CisgICAgICAgICAgICAgICAgc2lnLnVwZGF0ZShzZWxmLnN0YXJ0LmVuY29kZSgnbGF0aW4tMScpKQorICAgICAgICAgICAgaWYgc2VsZi5wcmVjOgorICAgICAgICAgICAgICAgIHNpZy51cGRhdGUoIiIuam9pbihbIiIuam9pbihwKSBmb3IgcCBpbiBzZWxmLnByZWNdKS5lbmNvZGUoJ2xhdGluLTEnKSkKKyAgICAgICAgICAgIGlmIHNlbGYudG9rZW5zOgorICAgICAgICAgICAgICAgIHNpZy51cGRhdGUoIiAiLmpvaW4oc2VsZi50b2tlbnMpLmVuY29kZSgnbGF0aW4tMScpKQorICAgICAgICAgICAgZm9yIGYgaW4gc2VsZi5wZnVuY3M6CisgICAgICAgICAgICAgICAgaWYgZlszXToKKyAgICAgICAgICAgICAgICAgICAgc2lnLnVwZGF0ZShmWzNdLmVuY29kZSgnbGF0aW4tMScpKQorICAgICAgICBleGNlcHQgKFR5cGVFcnJvcixWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIHNpZy5kaWdlc3QoKQorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgdmFsaWRhdGVfZmlsZSgpCisgICAgIworICAgICMgVGhpcyBtZXRob2QgY2hlY2tzIHRvIHNlZSBpZiB0aGVyZSBhcmUgZHVwbGljYXRlZCBwX3J1bGVuYW1lKCkgZnVuY3Rpb25zCisgICAgIyBpbiB0aGUgcGFyc2VyIG1vZHVsZSBmaWxlLiAgV2l0aG91dCB0aGlzIGZ1bmN0aW9uLCBpdCBpcyByZWFsbHkgZWFzeSBmb3IKKyAgICAjIHVzZXJzIHRvIG1ha2UgbWlzdGFrZXMgYnkgY3V0dGluZyBhbmQgcGFzdGluZyBjb2RlIGZyYWdtZW50cyAoYW5kIGl0J3MgYSByZWFsCisgICAgIyBidWdnZXIgdG8gdHJ5IGFuZCBmaWd1cmUgb3V0IHdoeSB0aGUgcmVzdWx0aW5nIHBhcnNlciBkb2Vzbid0IHdvcmspLiAgVGhlcmVmb3JlLAorICAgICMgd2UganVzdCBkbyBhIGxpdHRsZSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiBtYXRjaGluZyBvZiBkZWYgc3RhdGVtZW50cworICAgICMgdG8gdHJ5IGFuZCBkZXRlY3QgZHVwbGljYXRlcy4KKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgdmFsaWRhdGVfZmlsZXMoc2VsZik6CisgICAgICAgICMgTWF0Y2ggZGVmIHBfZnVuY25hbWUoCisgICAgICAgIGZyZSA9IHJlLmNvbXBpbGUocidccypkZWZccysocF9bYS16QS1aXzAtOV0qKVwoJykKKworICAgICAgICBmb3IgZmlsZW5hbWUgaW4gc2VsZi5maWxlcy5rZXlzKCk6CisgICAgICAgICAgICBiYXNlLGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpCisgICAgICAgICAgICBpZiBleHQgIT0gJy5weSc6IHJldHVybiAxICAgICAgICAgICMgTm8gaWRlYS4gQXNzdW1lIGl0J3Mgb2theS4KKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lKQorICAgICAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgY291bnRoYXNoID0geyB9CisgICAgICAgICAgICBmb3IgbGluZW4sbCBpbiBlbnVtZXJhdGUobGluZXMpOgorICAgICAgICAgICAgICAgIGxpbmVuICs9IDEKKyAgICAgICAgICAgICAgICBtID0gZnJlLm1hdGNoKGwpCisgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgcHJldiA9IGNvdW50aGFzaC5nZXQobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHByZXY6CisgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGhhc2hbbmFtZV0gPSBsaW5lbgorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cud2FybmluZygiJXM6JWQ6IEZ1bmN0aW9uICVzIHJlZGVmaW5lZC4gUHJldmlvdXNseSBkZWZpbmVkIG9uIGxpbmUgJWQiLCBmaWxlbmFtZSxsaW5lbixuYW1lLHByZXYpCisKKyAgICAjIEdldCB0aGUgc3RhcnQgc3ltYm9sCisgICAgZGVmIGdldF9zdGFydChzZWxmKToKKyAgICAgICAgc2VsZi5zdGFydCA9IHNlbGYucGRpY3QuZ2V0KCdzdGFydCcpCisKKyAgICAjIFZhbGlkYXRlIHRoZSBzdGFydCBzeW1ib2wKKyAgICBkZWYgdmFsaWRhdGVfc3RhcnQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuc3RhcnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZWxmLnN0YXJ0LHN0cik6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIidzdGFydCcgbXVzdCBiZSBhIHN0cmluZyIpCisKKyAgICAjIExvb2sgZm9yIGVycm9yIGhhbmRsZXIKKyAgICBkZWYgZ2V0X2Vycm9yX2Z1bmMoc2VsZik6CisgICAgICAgIHNlbGYuZXJyb3JfZnVuYyA9IHNlbGYucGRpY3QuZ2V0KCdwX2Vycm9yJykKKworICAgICMgVmFsaWRhdGUgdGhlIGVycm9yIGZ1bmN0aW9uCisgICAgZGVmIHZhbGlkYXRlX2Vycm9yX2Z1bmMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZXJyb3JfZnVuYzoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5lcnJvcl9mdW5jLHR5cGVzLkZ1bmN0aW9uVHlwZSk6CisgICAgICAgICAgICAgICAgaXNtZXRob2QgPSAwCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsZi5lcnJvcl9mdW5jLCB0eXBlcy5NZXRob2RUeXBlKToKKyAgICAgICAgICAgICAgICBpc21ldGhvZCA9IDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIidwX2Vycm9yJyBkZWZpbmVkLCBidXQgaXMgbm90IGEgZnVuY3Rpb24gb3IgbWV0aG9kIikKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBlbGluZSA9IGZ1bmNfY29kZShzZWxmLmVycm9yX2Z1bmMpLmNvX2ZpcnN0bGluZW5vCisgICAgICAgICAgICBlZmlsZSA9IGZ1bmNfY29kZShzZWxmLmVycm9yX2Z1bmMpLmNvX2ZpbGVuYW1lCisgICAgICAgICAgICBzZWxmLmZpbGVzW2VmaWxlXSA9IDEKKworICAgICAgICAgICAgaWYgKGZ1bmNfY29kZShzZWxmLmVycm9yX2Z1bmMpLmNvX2FyZ2NvdW50ICE9IDEraXNtZXRob2QpOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlczolZDogcF9lcnJvcigpIHJlcXVpcmVzIDEgYXJndW1lbnQiLGVmaWxlLGVsaW5lKQorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisKKyAgICAjIEdldCB0aGUgdG9rZW5zIG1hcAorICAgIGRlZiBnZXRfdG9rZW5zKHNlbGYpOgorICAgICAgICB0b2tlbnMgPSBzZWxmLnBkaWN0LmdldCgidG9rZW5zIixOb25lKQorICAgICAgICBpZiBub3QgdG9rZW5zOgorICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIk5vIHRva2VuIGxpc3QgaXMgZGVmaW5lZCIpCisgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodG9rZW5zLChsaXN0LCB0dXBsZSkpOgorICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoInRva2VucyBtdXN0IGJlIGEgbGlzdCBvciB0dXBsZSIpCisgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIAorICAgICAgICBpZiBub3QgdG9rZW5zOgorICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoInRva2VucyBpcyBlbXB0eSIpCisgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi50b2tlbnMgPSB0b2tlbnMKKworICAgICMgVmFsaWRhdGUgdGhlIHRva2VucworICAgIGRlZiB2YWxpZGF0ZV90b2tlbnMoc2VsZik6CisgICAgICAgICMgVmFsaWRhdGUgdGhlIHRva2Vucy4KKyAgICAgICAgaWYgJ2Vycm9yJyBpbiBzZWxmLnRva2VuczoKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJJbGxlZ2FsIHRva2VuIG5hbWUgJ2Vycm9yJy4gSXMgYSByZXNlcnZlZCB3b3JkIikKKyAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0ZXJtaW5hbHMgPSB7fQorICAgICAgICBmb3IgbiBpbiBzZWxmLnRva2VuczoKKyAgICAgICAgICAgIGlmIG4gaW4gdGVybWluYWxzOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLndhcm5pbmcoIlRva2VuICclcycgbXVsdGlwbHkgZGVmaW5lZCIsIG4pCisgICAgICAgICAgICB0ZXJtaW5hbHNbbl0gPSAxCisKKyAgICAjIEdldCB0aGUgcHJlY2VkZW5jZSBtYXAgKGlmIGFueSkKKyAgICBkZWYgZ2V0X3ByZWNlZGVuY2Uoc2VsZik6CisgICAgICAgIHNlbGYucHJlYyA9IHNlbGYucGRpY3QuZ2V0KCJwcmVjZWRlbmNlIixOb25lKQorCisgICAgIyBWYWxpZGF0ZSBhbmQgcGFyc2UgdGhlIHByZWNlZGVuY2UgbWFwCisgICAgZGVmIHZhbGlkYXRlX3ByZWNlZGVuY2Uoc2VsZik6CisgICAgICAgIHByZWNsaXN0ID0gW10KKyAgICAgICAgaWYgc2VsZi5wcmVjOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi5wcmVjLChsaXN0LHR1cGxlKSk6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoInByZWNlZGVuY2UgbXVzdCBiZSBhIGxpc3Qgb3IgdHVwbGUiKQorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBmb3IgbGV2ZWwscCBpbiBlbnVtZXJhdGUoc2VsZi5wcmVjKToKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShwLChsaXN0LHR1cGxlKSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJCYWQgcHJlY2VkZW5jZSB0YWJsZSIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICAgICAgaWYgbGVuKHApIDwgMjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIk1hbGZvcm1lZCBwcmVjZWRlbmNlIGVudHJ5ICVzLiBNdXN0IGJlIChhc3NvYywgdGVybSwgLi4uLCB0ZXJtKSIscCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgYXNzb2MgPSBwWzBdCisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYXNzb2Msc3RyKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoInByZWNlZGVuY2UgYXNzb2NpYXRpdml0eSBtdXN0IGJlIGEgc3RyaW5nIikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgZm9yIHRlcm0gaW4gcFsxOl06CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHRlcm0sc3RyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJwcmVjZWRlbmNlIGl0ZW1zIG11c3QgYmUgc3RyaW5ncyIpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgICAgIHByZWNsaXN0LmFwcGVuZCgodGVybSxhc3NvYyxsZXZlbCsxKSkKKyAgICAgICAgc2VsZi5wcmVjbGlzdCA9IHByZWNsaXN0CisKKyAgICAjIEdldCBhbGwgcF9mdW5jdGlvbnMgZnJvbSB0aGUgZ3JhbW1hcgorICAgIGRlZiBnZXRfcGZ1bmN0aW9ucyhzZWxmKToKKyAgICAgICAgcF9mdW5jdGlvbnMgPSBbXQorICAgICAgICBmb3IgbmFtZSwgaXRlbSBpbiBzZWxmLnBkaWN0Lml0ZW1zKCk6CisgICAgICAgICAgICBpZiBuYW1lWzoyXSAhPSAncF8nOiBjb250aW51ZQorICAgICAgICAgICAgaWYgbmFtZSA9PSAncF9lcnJvcic6IGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGl0ZW0sKHR5cGVzLkZ1bmN0aW9uVHlwZSx0eXBlcy5NZXRob2RUeXBlKSk6CisgICAgICAgICAgICAgICAgbGluZSA9IGZ1bmNfY29kZShpdGVtKS5jb19maXJzdGxpbmVubworICAgICAgICAgICAgICAgIGZpbGUgPSBmdW5jX2NvZGUoaXRlbSkuY29fZmlsZW5hbWUKKyAgICAgICAgICAgICAgICBwX2Z1bmN0aW9ucy5hcHBlbmQoKGxpbmUsZmlsZSxuYW1lLGl0ZW0uX19kb2NfXykpCisKKyAgICAgICAgIyBTb3J0IGFsbCBvZiB0aGUgYWN0aW9ucyBieSBsaW5lIG51bWJlcgorICAgICAgICBwX2Z1bmN0aW9ucy5zb3J0KCkKKyAgICAgICAgc2VsZi5wZnVuY3MgPSBwX2Z1bmN0aW9ucworCisKKyAgICAjIFZhbGlkYXRlIGFsbCBvZiB0aGUgcF9mdW5jdGlvbnMKKyAgICBkZWYgdmFsaWRhdGVfcGZ1bmN0aW9ucyhzZWxmKToKKyAgICAgICAgZ3JhbW1hciA9IFtdCisgICAgICAgICMgQ2hlY2sgZm9yIG5vbi1lbXB0eSBzeW1ib2xzCisgICAgICAgIGlmIGxlbihzZWxmLnBmdW5jcykgPT0gMDoKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJubyBydWxlcyBvZiB0aGUgZm9ybSBwX3J1bGVuYW1lIGFyZSBkZWZpbmVkIikKKyAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICByZXR1cm4gCisgICAgICAgIAorICAgICAgICBmb3IgbGluZSwgZmlsZSwgbmFtZSwgZG9jIGluIHNlbGYucGZ1bmNzOgorICAgICAgICAgICAgZnVuYyA9IHNlbGYucGRpY3RbbmFtZV0KKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZnVuYywgdHlwZXMuTWV0aG9kVHlwZSk6CisgICAgICAgICAgICAgICAgcmVxYXJncyA9IDIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVxYXJncyA9IDEKKyAgICAgICAgICAgIGlmIGZ1bmNfY29kZShmdW5jKS5jb19hcmdjb3VudCA+IHJlcWFyZ3M6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiVzOiVkOiBSdWxlICclcycgaGFzIHRvbyBtYW55IGFyZ3VtZW50cyIsZmlsZSxsaW5lLGZ1bmMuX19uYW1lX18pCisgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgIGVsaWYgZnVuY19jb2RlKGZ1bmMpLmNvX2FyZ2NvdW50IDwgcmVxYXJnczoKKyAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiJXM6JWQ6IFJ1bGUgJyVzJyByZXF1aXJlcyBhbiBhcmd1bWVudCIsZmlsZSxsaW5lLGZ1bmMuX19uYW1lX18pCisgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgIGVsaWYgbm90IGZ1bmMuX19kb2NfXzoKKyAgICAgICAgICAgICAgICBzZWxmLmxvZy53YXJuaW5nKCIlczolZDogTm8gZG9jdW1lbnRhdGlvbiBzdHJpbmcgc3BlY2lmaWVkIGluIGZ1bmN0aW9uICclcycgKGlnbm9yZWQpIixmaWxlLGxpbmUsZnVuYy5fX25hbWVfXykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBwYXJzZWRfZyA9IHBhcnNlX2dyYW1tYXIoZG9jLGZpbGUsbGluZSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGcgaW4gcGFyc2VkX2c6CisgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyLmFwcGVuZCgobmFtZSwgZykpCisgICAgICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgICAgICAgICBlID0gc3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3Ioc3RyKGUpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorCisgICAgICAgICAgICAgICAgIyBMb29rcyBsaWtlIGEgdmFsaWQgZ3JhbW1hciBydWxlCisgICAgICAgICAgICAgICAgIyBNYXJrIHRoZSBmaWxlIGluIHdoaWNoIGRlZmluZWQuCisgICAgICAgICAgICAgICAgc2VsZi5maWxlc1tmaWxlXSA9IDEKKworICAgICAgICAjIFNlY29uZGFyeSB2YWxpZGF0aW9uIHN0ZXAgdGhhdCBsb29rcyBmb3IgcF8gZGVmaW5pdGlvbnMgdGhhdCBhcmUgbm90IGZ1bmN0aW9ucworICAgICAgICAjIG9yIGZ1bmN0aW9ucyB0aGF0IGxvb2sgbGlrZSB0aGV5IG1pZ2h0IGJlIGdyYW1tYXIgcnVsZXMuCisKKyAgICAgICAgZm9yIG4sdiBpbiBzZWxmLnBkaWN0Lml0ZW1zKCk6CisgICAgICAgICAgICBpZiBuWzA6Ml0gPT0gJ3BfJyBhbmQgaXNpbnN0YW5jZSh2LCAodHlwZXMuRnVuY3Rpb25UeXBlLCB0eXBlcy5NZXRob2RUeXBlKSk6IGNvbnRpbnVlCisgICAgICAgICAgICBpZiBuWzA6Ml0gPT0gJ3RfJzogY29udGludWUKKyAgICAgICAgICAgIGlmIG5bMDoyXSA9PSAncF8nIGFuZCBuICE9ICdwX2Vycm9yJzoKKyAgICAgICAgICAgICAgICBzZWxmLmxvZy53YXJuaW5nKCInJXMnIG5vdCBkZWZpbmVkIGFzIGEgZnVuY3Rpb24iLCBuKQorICAgICAgICAgICAgaWYgKChpc2luc3RhbmNlKHYsdHlwZXMuRnVuY3Rpb25UeXBlKSBhbmQgZnVuY19jb2RlKHYpLmNvX2FyZ2NvdW50ID09IDEpIG9yCisgICAgICAgICAgICAgICAgKGlzaW5zdGFuY2Uodix0eXBlcy5NZXRob2RUeXBlKSBhbmQgZnVuY19jb2RlKHYpLmNvX2FyZ2NvdW50ID09IDIpKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGRvYyA9IHYuX19kb2NfXy5zcGxpdCgiICIpCisgICAgICAgICAgICAgICAgICAgIGlmIGRvY1sxXSA9PSAnOic6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy53YXJuaW5nKCIlczolZDogUG9zc2libGUgZ3JhbW1hciBydWxlICclcycgZGVmaW5lZCB3aXRob3V0IHBfIHByZWZpeCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfY29kZSh2KS5jb19maWxlbmFtZSwgZnVuY19jb2RlKHYpLmNvX2ZpcnN0bGluZW5vLG4pCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuZ3JhbW1hciA9IGdyYW1tYXIKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyB5YWNjKG1vZHVsZSkKKyMKKyMgQnVpbGQgYSBwYXJzZXIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIHlhY2MobWV0aG9kPSdMQUxSJywgZGVidWc9eWFjY2RlYnVnLCBtb2R1bGU9Tm9uZSwgdGFibW9kdWxlPXRhYl9tb2R1bGUsIHN0YXJ0PU5vbmUsIAorICAgICAgICAgY2hlY2tfcmVjdXJzaW9uPTEsIG9wdGltaXplPTAsIHdyaXRlX3RhYmxlcz0xLCBkZWJ1Z2ZpbGU9ZGVidWdfZmlsZSxvdXRwdXRkaXI9JycsCisgICAgICAgICBkZWJ1Z2xvZz1Ob25lLCBlcnJvcmxvZyA9IE5vbmUsIHBpY2tsZWZpbGU9Tm9uZSk6CisKKyAgICBnbG9iYWwgcGFyc2UgICAgICAgICAgICAgICAgICMgUmVmZXJlbmNlIHRvIHRoZSBwYXJzaW5nIG1ldGhvZCBvZiB0aGUgbGFzdCBidWlsdCBwYXJzZXIKKworICAgICMgSWYgcGlja2xpbmcgaXMgZW5hYmxlZCwgdGFibGUgZmlsZXMgYXJlIG5vdCBjcmVhdGVkCisKKyAgICBpZiBwaWNrbGVmaWxlOgorICAgICAgICB3cml0ZV90YWJsZXMgPSAwCisKKyAgICBpZiBlcnJvcmxvZyBpcyBOb25lOgorICAgICAgICBlcnJvcmxvZyA9IFBseUxvZ2dlcihzeXMuc3RkZXJyKQorCisgICAgIyBHZXQgdGhlIG1vZHVsZSBkaWN0aW9uYXJ5IHVzZWQgZm9yIHRoZSBwYXJzZXIKKyAgICBpZiBtb2R1bGU6CisgICAgICAgIF9pdGVtcyA9IFsoayxnZXRhdHRyKG1vZHVsZSxrKSkgZm9yIGsgaW4gZGlyKG1vZHVsZSldCisgICAgICAgIHBkaWN0ID0gZGljdChfaXRlbXMpCisgICAgZWxzZToKKyAgICAgICAgcGRpY3QgPSBnZXRfY2FsbGVyX21vZHVsZV9kaWN0KDIpCisKKyAgICAjIENvbGxlY3QgcGFyc2VyIGluZm9ybWF0aW9uIGZyb20gdGhlIGRpY3Rpb25hcnkKKyAgICBwaW5mbyA9IFBhcnNlclJlZmxlY3QocGRpY3QsbG9nPWVycm9ybG9nKQorICAgIHBpbmZvLmdldF9hbGwoKQorCisgICAgaWYgcGluZm8uZXJyb3I6CisgICAgICAgIHJhaXNlIFlhY2NFcnJvcigiVW5hYmxlIHRvIGJ1aWxkIHBhcnNlciIpCisKKyAgICAjIENoZWNrIHNpZ25hdHVyZSBhZ2FpbnN0IHRhYmxlIGZpbGVzIChpZiBhbnkpCisgICAgc2lnbmF0dXJlID0gcGluZm8uc2lnbmF0dXJlKCkKKworICAgICMgUmVhZCB0aGUgdGFibGVzCisgICAgdHJ5OgorICAgICAgICBsciA9IExSVGFibGUoKQorICAgICAgICBpZiBwaWNrbGVmaWxlOgorICAgICAgICAgICAgcmVhZF9zaWduYXR1cmUgPSBsci5yZWFkX3BpY2tsZShwaWNrbGVmaWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVhZF9zaWduYXR1cmUgPSBsci5yZWFkX3RhYmxlKHRhYm1vZHVsZSkKKyAgICAgICAgaWYgb3B0aW1pemUgb3IgKHJlYWRfc2lnbmF0dXJlID09IHNpZ25hdHVyZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbHIuYmluZF9jYWxsYWJsZXMocGluZm8ucGRpY3QpCisgICAgICAgICAgICAgICAgcGFyc2VyID0gTFJQYXJzZXIobHIscGluZm8uZXJyb3JfZnVuYykKKyAgICAgICAgICAgICAgICBwYXJzZSA9IHBhcnNlci5wYXJzZQorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZXIKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgZSA9IHN5cy5leGNfaW5mbygpWzFdCisgICAgICAgICAgICAgICAgZXJyb3Jsb2cud2FybmluZygiVGhlcmUgd2FzIGEgcHJvYmxlbSBsb2FkaW5nIHRoZSB0YWJsZSBmaWxlOiAlcyIsIHJlcHIoZSkpCisgICAgZXhjZXB0IFZlcnNpb25FcnJvcjoKKyAgICAgICAgZSA9IHN5cy5leGNfaW5mbygpCisgICAgICAgIGVycm9ybG9nLndhcm5pbmcoc3RyKGUpKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHBhc3MKKworICAgIGlmIGRlYnVnbG9nIGlzIE5vbmU6CisgICAgICAgIGlmIGRlYnVnOgorICAgICAgICAgICAgZGVidWdsb2cgPSBQbHlMb2dnZXIob3BlbihkZWJ1Z2ZpbGUsInciKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlYnVnbG9nID0gTnVsbExvZ2dlcigpCisKKyAgICBkZWJ1Z2xvZy5pbmZvKCJDcmVhdGVkIGJ5IFBMWSB2ZXJzaW9uICVzIChodHRwOi8vd3d3LmRhYmVhei5jb20vcGx5KSIsIF9fdmVyc2lvbl9fKQorCisKKyAgICBlcnJvcnMgPSAwCisKKyAgICAjIFZhbGlkYXRlIHRoZSBwYXJzZXIgaW5mb3JtYXRpb24KKyAgICBpZiBwaW5mby52YWxpZGF0ZV9hbGwoKToKKyAgICAgICAgcmFpc2UgWWFjY0Vycm9yKCJVbmFibGUgdG8gYnVpbGQgcGFyc2VyIikKKyAgICAKKyAgICBpZiBub3QgcGluZm8uZXJyb3JfZnVuYzoKKyAgICAgICAgZXJyb3Jsb2cud2FybmluZygibm8gcF9lcnJvcigpIGZ1bmN0aW9uIGlzIGRlZmluZWQiKQorCisgICAgIyBDcmVhdGUgYSBncmFtbWFyIG9iamVjdAorICAgIGdyYW1tYXIgPSBHcmFtbWFyKHBpbmZvLnRva2VucykKKworICAgICMgU2V0IHByZWNlZGVuY2UgbGV2ZWwgZm9yIHRlcm1pbmFscworICAgIGZvciB0ZXJtLCBhc3NvYywgbGV2ZWwgaW4gcGluZm8ucHJlY2xpc3Q6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGdyYW1tYXIuc2V0X3ByZWNlZGVuY2UodGVybSxhc3NvYyxsZXZlbCkKKyAgICAgICAgZXhjZXB0IEdyYW1tYXJFcnJvcjoKKyAgICAgICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKVsxXQorICAgICAgICAgICAgZXJyb3Jsb2cud2FybmluZygiJXMiLHN0cihlKSkKKworICAgICMgQWRkIHByb2R1Y3Rpb25zIHRvIHRoZSBncmFtbWFyCisgICAgZm9yIGZ1bmNuYW1lLCBncmFtIGluIHBpbmZvLmdyYW1tYXI6CisgICAgICAgIGZpbGUsIGxpbmUsIHByb2RuYW1lLCBzeW1zID0gZ3JhbQorICAgICAgICB0cnk6CisgICAgICAgICAgICBncmFtbWFyLmFkZF9wcm9kdWN0aW9uKHByb2RuYW1lLHN5bXMsZnVuY25hbWUsZmlsZSxsaW5lKQorICAgICAgICBleGNlcHQgR3JhbW1hckVycm9yOgorICAgICAgICAgICAgZSA9IHN5cy5leGNfaW5mbygpWzFdCisgICAgICAgICAgICBlcnJvcmxvZy5lcnJvcigiJXMiLHN0cihlKSkKKyAgICAgICAgICAgIGVycm9ycyA9IDEKKworICAgICMgU2V0IHRoZSBncmFtbWFyIHN0YXJ0IHN5bWJvbHMKKyAgICB0cnk6CisgICAgICAgIGlmIHN0YXJ0IGlzIE5vbmU6CisgICAgICAgICAgICBncmFtbWFyLnNldF9zdGFydChwaW5mby5zdGFydCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGdyYW1tYXIuc2V0X3N0YXJ0KHN0YXJ0KQorICAgIGV4Y2VwdCBHcmFtbWFyRXJyb3I6CisgICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKVsxXQorICAgICAgICBlcnJvcmxvZy5lcnJvcihzdHIoZSkpCisgICAgICAgIGVycm9ycyA9IDEKKworICAgIGlmIGVycm9yczoKKyAgICAgICAgcmFpc2UgWWFjY0Vycm9yKCJVbmFibGUgdG8gYnVpbGQgcGFyc2VyIikKKworICAgICMgVmVyaWZ5IHRoZSBncmFtbWFyIHN0cnVjdHVyZQorICAgIHVuZGVmaW5lZF9zeW1ib2xzID0gZ3JhbW1hci51bmRlZmluZWRfc3ltYm9scygpCisgICAgZm9yIHN5bSwgcHJvZCBpbiB1bmRlZmluZWRfc3ltYm9sczoKKyAgICAgICAgZXJyb3Jsb2cuZXJyb3IoIiVzOiVkOiBTeW1ib2wgJyVzJyB1c2VkLCBidXQgbm90IGRlZmluZWQgYXMgYSB0b2tlbiBvciBhIHJ1bGUiLHByb2QuZmlsZSxwcm9kLmxpbmUsc3ltKQorICAgICAgICBlcnJvcnMgPSAxCisKKyAgICB1bnVzZWRfdGVybWluYWxzID0gZ3JhbW1hci51bnVzZWRfdGVybWluYWxzKCkKKyAgICBpZiB1bnVzZWRfdGVybWluYWxzOgorICAgICAgICBkZWJ1Z2xvZy5pbmZvKCIiKQorICAgICAgICBkZWJ1Z2xvZy5pbmZvKCJVbnVzZWQgdGVybWluYWxzOiIpCisgICAgICAgIGRlYnVnbG9nLmluZm8oIiIpCisgICAgICAgIGZvciB0ZXJtIGluIHVudXNlZF90ZXJtaW5hbHM6CisgICAgICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCJUb2tlbiAnJXMnIGRlZmluZWQsIGJ1dCBub3QgdXNlZCIsIHRlcm0pCisgICAgICAgICAgICBkZWJ1Z2xvZy5pbmZvKCIgICAgJXMiLCB0ZXJtKQorCisgICAgIyBQcmludCBvdXQgYWxsIHByb2R1Y3Rpb25zIHRvIHRoZSBkZWJ1ZyBsb2cKKyAgICBpZiBkZWJ1ZzoKKyAgICAgICAgZGVidWdsb2cuaW5mbygiIikKKyAgICAgICAgZGVidWdsb2cuaW5mbygiR3JhbW1hciIpCisgICAgICAgIGRlYnVnbG9nLmluZm8oIiIpCisgICAgICAgIGZvciBuLHAgaW4gZW51bWVyYXRlKGdyYW1tYXIuUHJvZHVjdGlvbnMpOgorICAgICAgICAgICAgZGVidWdsb2cuaW5mbygiUnVsZSAlLTVkICVzIiwgbiwgcCkKKworICAgICMgRmluZCB1bnVzZWQgbm9uLXRlcm1pbmFscworICAgIHVudXNlZF9ydWxlcyA9IGdyYW1tYXIudW51c2VkX3J1bGVzKCkKKyAgICBmb3IgcHJvZCBpbiB1bnVzZWRfcnVsZXM6CisgICAgICAgIGVycm9ybG9nLndhcm5pbmcoIiVzOiVkOiBSdWxlICclcycgZGVmaW5lZCwgYnV0IG5vdCB1c2VkIiwgcHJvZC5maWxlLCBwcm9kLmxpbmUsIHByb2QubmFtZSkKKworICAgIGlmIGxlbih1bnVzZWRfdGVybWluYWxzKSA9PSAxOgorICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCJUaGVyZSBpcyAxIHVudXNlZCB0b2tlbiIpCisgICAgaWYgbGVuKHVudXNlZF90ZXJtaW5hbHMpID4gMToKKyAgICAgICAgZXJyb3Jsb2cud2FybmluZygiVGhlcmUgYXJlICVkIHVudXNlZCB0b2tlbnMiLCBsZW4odW51c2VkX3Rlcm1pbmFscykpCisKKyAgICBpZiBsZW4odW51c2VkX3J1bGVzKSA9PSAxOgorICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCJUaGVyZSBpcyAxIHVudXNlZCBydWxlIikKKyAgICBpZiBsZW4odW51c2VkX3J1bGVzKSA+IDE6CisgICAgICAgIGVycm9ybG9nLndhcm5pbmcoIlRoZXJlIGFyZSAlZCB1bnVzZWQgcnVsZXMiLCBsZW4odW51c2VkX3J1bGVzKSkKKworICAgIGlmIGRlYnVnOgorICAgICAgICBkZWJ1Z2xvZy5pbmZvKCIiKQorICAgICAgICBkZWJ1Z2xvZy5pbmZvKCJUZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiKQorICAgICAgICBkZWJ1Z2xvZy5pbmZvKCIiKQorICAgICAgICB0ZXJtcyA9IGxpc3QoZ3JhbW1hci5UZXJtaW5hbHMpCisgICAgICAgIHRlcm1zLnNvcnQoKQorICAgICAgICBmb3IgdGVybSBpbiB0ZXJtczoKKyAgICAgICAgICAgIGRlYnVnbG9nLmluZm8oIiUtMjBzIDogJXMiLCB0ZXJtLCAiICIuam9pbihbc3RyKHMpIGZvciBzIGluIGdyYW1tYXIuVGVybWluYWxzW3Rlcm1dXSkpCisgICAgICAgIAorICAgICAgICBkZWJ1Z2xvZy5pbmZvKCIiKQorICAgICAgICBkZWJ1Z2xvZy5pbmZvKCJOb250ZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiKQorICAgICAgICBkZWJ1Z2xvZy5pbmZvKCIiKQorICAgICAgICBub250ZXJtcyA9IGxpc3QoZ3JhbW1hci5Ob250ZXJtaW5hbHMpCisgICAgICAgIG5vbnRlcm1zLnNvcnQoKQorICAgICAgICBmb3Igbm9udGVybSBpbiBub250ZXJtczoKKyAgICAgICAgICAgIGRlYnVnbG9nLmluZm8oIiUtMjBzIDogJXMiLCBub250ZXJtLCAiICIuam9pbihbc3RyKHMpIGZvciBzIGluIGdyYW1tYXIuTm9udGVybWluYWxzW25vbnRlcm1dXSkpCisgICAgICAgIGRlYnVnbG9nLmluZm8oIiIpCisKKyAgICBpZiBjaGVja19yZWN1cnNpb246CisgICAgICAgIHVucmVhY2hhYmxlID0gZ3JhbW1hci5maW5kX3VucmVhY2hhYmxlKCkKKyAgICAgICAgZm9yIHUgaW4gdW5yZWFjaGFibGU6CisgICAgICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCJTeW1ib2wgJyVzJyBpcyB1bnJlYWNoYWJsZSIsdSkKKworICAgICAgICBpbmZpbml0ZSA9IGdyYW1tYXIuaW5maW5pdGVfY3ljbGVzKCkKKyAgICAgICAgZm9yIGluZiBpbiBpbmZpbml0ZToKKyAgICAgICAgICAgIGVycm9ybG9nLmVycm9yKCJJbmZpbml0ZSByZWN1cnNpb24gZGV0ZWN0ZWQgZm9yIHN5bWJvbCAnJXMnIiwgaW5mKQorICAgICAgICAgICAgZXJyb3JzID0gMQorICAgICAgICAKKyAgICB1bnVzZWRfcHJlYyA9IGdyYW1tYXIudW51c2VkX3ByZWNlZGVuY2UoKQorICAgIGZvciB0ZXJtLCBhc3NvYyBpbiB1bnVzZWRfcHJlYzoKKyAgICAgICAgZXJyb3Jsb2cuZXJyb3IoIlByZWNlZGVuY2UgcnVsZSAnJXMnIGRlZmluZWQgZm9yIHVua25vd24gc3ltYm9sICclcyciLCBhc3NvYywgdGVybSkKKyAgICAgICAgZXJyb3JzID0gMQorCisgICAgaWYgZXJyb3JzOgorICAgICAgICByYWlzZSBZYWNjRXJyb3IoIlVuYWJsZSB0byBidWlsZCBwYXJzZXIiKQorICAgIAorICAgICMgUnVuIHRoZSBMUkdlbmVyYXRlZFRhYmxlIG9uIHRoZSBncmFtbWFyCisgICAgaWYgZGVidWc6CisgICAgICAgIGVycm9ybG9nLmRlYnVnKCJHZW5lcmF0aW5nICVzIHRhYmxlcyIsIG1ldGhvZCkKKyAgICAgICAgICAgIAorICAgIGxyID0gTFJHZW5lcmF0ZWRUYWJsZShncmFtbWFyLG1ldGhvZCxkZWJ1Z2xvZykKKworICAgIGlmIGRlYnVnOgorICAgICAgICBudW1fc3IgPSBsZW4obHIuc3JfY29uZmxpY3RzKQorCisgICAgICAgICMgUmVwb3J0IHNoaWZ0L3JlZHVjZSBhbmQgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMKKyAgICAgICAgaWYgbnVtX3NyID09IDE6CisgICAgICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCIxIHNoaWZ0L3JlZHVjZSBjb25mbGljdCIpCisgICAgICAgIGVsaWYgbnVtX3NyID4gMToKKyAgICAgICAgICAgIGVycm9ybG9nLndhcm5pbmcoIiVkIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMiLCBudW1fc3IpCisKKyAgICAgICAgbnVtX3JyID0gbGVuKGxyLnJyX2NvbmZsaWN0cykKKyAgICAgICAgaWYgbnVtX3JyID09IDE6CisgICAgICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCIxIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3QiKQorICAgICAgICBlbGlmIG51bV9yciA+IDE6CisgICAgICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCIlZCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cyIsIG51bV9ycikKKworICAgICMgV3JpdGUgb3V0IGNvbmZsaWN0cyB0byB0aGUgb3V0cHV0IGZpbGUKKyAgICBpZiBkZWJ1ZyBhbmQgKGxyLnNyX2NvbmZsaWN0cyBvciBsci5ycl9jb25mbGljdHMpOgorICAgICAgICBkZWJ1Z2xvZy53YXJuaW5nKCIiKQorICAgICAgICBkZWJ1Z2xvZy53YXJuaW5nKCJDb25mbGljdHM6IikKKyAgICAgICAgZGVidWdsb2cud2FybmluZygiIikKKworICAgICAgICBmb3Igc3RhdGUsIHRvaywgcmVzb2x1dGlvbiBpbiBsci5zcl9jb25mbGljdHM6CisgICAgICAgICAgICBkZWJ1Z2xvZy53YXJuaW5nKCJzaGlmdC9yZWR1Y2UgY29uZmxpY3QgZm9yICVzIGluIHN0YXRlICVkIHJlc29sdmVkIGFzICVzIiwgIHRvaywgc3RhdGUsIHJlc29sdXRpb24pCisgICAgICAgIAorICAgICAgICBhbHJlYWR5X3JlcG9ydGVkID0ge30KKyAgICAgICAgZm9yIHN0YXRlLCBydWxlLCByZWplY3RlZCBpbiBsci5ycl9jb25mbGljdHM6CisgICAgICAgICAgICBpZiAoc3RhdGUsaWQocnVsZSksaWQocmVqZWN0ZWQpKSBpbiBhbHJlYWR5X3JlcG9ydGVkOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBkZWJ1Z2xvZy53YXJuaW5nKCJyZWR1Y2UvcmVkdWNlIGNvbmZsaWN0IGluIHN0YXRlICVkIHJlc29sdmVkIHVzaW5nIHJ1bGUgKCVzKSIsIHN0YXRlLCBydWxlKQorICAgICAgICAgICAgZGVidWdsb2cud2FybmluZygicmVqZWN0ZWQgcnVsZSAoJXMpIGluIHN0YXRlICVkIiwgcmVqZWN0ZWQsc3RhdGUpCisgICAgICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCJyZWR1Y2UvcmVkdWNlIGNvbmZsaWN0IGluIHN0YXRlICVkIHJlc29sdmVkIHVzaW5nIHJ1bGUgKCVzKSIsIHN0YXRlLCBydWxlKQorICAgICAgICAgICAgZXJyb3Jsb2cud2FybmluZygicmVqZWN0ZWQgcnVsZSAoJXMpIGluIHN0YXRlICVkIiwgcmVqZWN0ZWQsIHN0YXRlKQorICAgICAgICAgICAgYWxyZWFkeV9yZXBvcnRlZFtzdGF0ZSxpZChydWxlKSxpZChyZWplY3RlZCldID0gMQorICAgICAgICAKKyAgICAgICAgd2FybmVkX25ldmVyID0gW10KKyAgICAgICAgZm9yIHN0YXRlLCBydWxlLCByZWplY3RlZCBpbiBsci5ycl9jb25mbGljdHM6CisgICAgICAgICAgICBpZiBub3QgcmVqZWN0ZWQucmVkdWNlZCBhbmQgKHJlamVjdGVkIG5vdCBpbiB3YXJuZWRfbmV2ZXIpOgorICAgICAgICAgICAgICAgIGRlYnVnbG9nLndhcm5pbmcoIlJ1bGUgKCVzKSBpcyBuZXZlciByZWR1Y2VkIiwgcmVqZWN0ZWQpCisgICAgICAgICAgICAgICAgZXJyb3Jsb2cud2FybmluZygiUnVsZSAoJXMpIGlzIG5ldmVyIHJlZHVjZWQiLCByZWplY3RlZCkKKyAgICAgICAgICAgICAgICB3YXJuZWRfbmV2ZXIuYXBwZW5kKHJlamVjdGVkKQorCisgICAgIyBXcml0ZSB0aGUgdGFibGUgZmlsZSBpZiByZXF1ZXN0ZWQKKyAgICBpZiB3cml0ZV90YWJsZXM6CisgICAgICAgIGxyLndyaXRlX3RhYmxlKHRhYm1vZHVsZSxvdXRwdXRkaXIsc2lnbmF0dXJlKQorCisgICAgIyBXcml0ZSBhIHBpY2tsZWQgdmVyc2lvbiBvZiB0aGUgdGFibGVzCisgICAgaWYgcGlja2xlZmlsZToKKyAgICAgICAgbHIucGlja2xlX3RhYmxlKHBpY2tsZWZpbGUsc2lnbmF0dXJlKQorCisgICAgIyBCdWlsZCB0aGUgcGFyc2VyCisgICAgbHIuYmluZF9jYWxsYWJsZXMocGluZm8ucGRpY3QpCisgICAgcGFyc2VyID0gTFJQYXJzZXIobHIscGluZm8uZXJyb3JfZnVuYykKKworICAgIHBhcnNlID0gcGFyc2VyLnBhcnNlCisgICAgcmV0dXJuIHBhcnNlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wcm9ncmVzc2Jhci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJvZ3Jlc3NiYXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE0Y2RjMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJvZ3Jlc3NiYXIucHkKQEAgLTAsMCArMSwzODQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyAtKi0gY29kaW5nOiBpc28tODg1OS0xIC0qLQorIworIyBwcm9ncmVzc2JhciAgLSBUZXh0IHByb2dyZXNzYmFyIGxpYnJhcnkgZm9yIHB5dGhvbi4KKyMgQ29weXJpZ2h0IChjKSAyMDA1IE5pbHRvbiBWb2xwYXRvCisjCisjIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKworCisiIiJUZXh0IHByb2dyZXNzYmFyIGxpYnJhcnkgZm9yIHB5dGhvbi4KKworVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIGEgdGV4dCBtb2RlIHByb2dyZXNzYmFyLiBUaGlzIGlzIHR5cGljYWxseSB1c2VkCit0byBkaXNwbGF5IHRoZSBwcm9ncmVzcyBvZiBhIGxvbmcgcnVubmluZyBvcGVyYXRpb24sIHByb3ZpZGluZyBhCit2aXN1YWwgY2x1ZSB0aGF0IHByb2Nlc3NpbmcgaXMgdW5kZXJ3YXkuCisKK1RoZSBQcm9ncmVzc0JhciBjbGFzcyBtYW5hZ2VzIHRoZSBwcm9ncmVzcywgYW5kIHRoZSBmb3JtYXQgb2YgdGhlIGxpbmUKK2lzIGdpdmVuIGJ5IGEgbnVtYmVyIG9mIHdpZGdldHMuIEEgd2lkZ2V0IGlzIGFuIG9iamVjdCB0aGF0IG1heQorZGlzcGxheSBkaWZlcmVudGx5IGRlcGVuZGluZyBvbiB0aGUgc3RhdGUgb2YgdGhlIHByb2dyZXNzLiBUaGVyZSBhcmUKK3RocmVlIHR5cGVzIG9mIHdpZGdldDoKKy0gYSBzdHJpbmcsIHdoaWNoIGFsd2F5cyBzaG93cyBpdHNlbGY7CistIGEgUHJvZ3Jlc3NCYXJXaWRnZXQsIHdoaWNoIG1heSByZXR1cm4gYSBkaWZlcmVudCB2YWx1ZSBldmVyeSB0aW1lCitpdCdzIHVwZGF0ZSBtZXRob2QgaXMgY2FsbGVkOyBhbmQKKy0gYSBQcm9ncmVzc0JhcldpZGdldEhGaWxsLCB3aGljaCBpcyBsaWtlIFByb2dyZXNzQmFyV2lkZ2V0LCBleGNlcHQgaXQKK2V4cGFuZHMgdG8gZmlsbCB0aGUgcmVtYWluaW5nIHdpZHRoIG9mIHRoZSBsaW5lLgorCitUaGUgcHJvZ3Jlc3NiYXIgbW9kdWxlIGlzIHZlcnkgZWFzeSB0byB1c2UsIHlldCB2ZXJ5IHBvd2VyZnVsLiBBbmQKK2F1dG9tYXRpY2FsbHkgc3VwcG9ydHMgZmVhdHVyZXMgbGlrZSBhdXRvLXJlc2l6aW5nIHdoZW4gYXZhaWxhYmxlLgorIiIiCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KKworX19hdXRob3JfXyA9ICJOaWx0b24gVm9scGF0byIKK19fYXV0aG9yX2VtYWlsX18gPSAiZmlyc3QtbmFtZSBkb3QgbGFzdC1uYW1lIEAgZ21haWwuY29tIgorX19kYXRlX18gPSAiMjAwNi0wNS0wNyIKK19fdmVyc2lvbl9fID0gIjIuMy1kZXYiCisKK2ltcG9ydCBzeXMsIHRpbWUsIG9zCitmcm9tIGFycmF5IGltcG9ydCBhcnJheQordHJ5OgorICAgIGZyb20gZmNudGwgaW1wb3J0IGlvY3RsCisgICAgaW1wb3J0IHRlcm1pb3MKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCitpbXBvcnQgc2lnbmFsCit0cnk6CisgICAgYmFzZXN0cmluZworZXhjZXB0IE5hbWVFcnJvcjoKKyAgICBiYXNlc3RyaW5nID0gKHN0ciwpCisKK2NsYXNzIFByb2dyZXNzQmFyV2lkZ2V0KG9iamVjdCk6CisgICAgIiIiVGhpcyBpcyBhbiBlbGVtZW50IG9mIFByb2dyZXNzQmFyIGZvcm1hdHRpbmcuCisKKyAgICBUaGUgUHJvZ3Jlc3NCYXIgb2JqZWN0IHdpbGwgY2FsbCBpdCdzIHVwZGF0ZSB2YWx1ZSB3aGVuIGFuIHVwZGF0ZQorICAgIGlzIG5lZWRlZC4gSXQncyBzaXplIG1heSBjaGFuZ2UgYmV0d2VlbiBjYWxsLCBidXQgdGhlIHJlc3VsdHMgd2lsbAorICAgIG5vdCBiZSBnb29kIGlmIHRoZSBzaXplIGNoYW5nZXMgZHJhc3RpY2FsbHkgYW5kIHJlcGVhdGVkbHkuCisgICAgIiIiCisgICAgZGVmIHVwZGF0ZShzZWxmLCBwYmFyKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgd2lkZ2V0LgorCisgICAgICAgIFRoZSBwYXJhbWV0ZXIgcGJhciBpcyBhIHJlZmVyZW5jZSB0byB0aGUgY2FsbGluZyBQcm9ncmVzc0JhciwKKyAgICAgICAgd2hlcmUgb25lIGNhbiBhY2Nlc3MgYXR0cmlidXRlcyBvZiB0aGUgY2xhc3MgZm9yIGtub3dpbmcgaG93CisgICAgICAgIHRoZSB1cGRhdGUgbXVzdCBiZSBtYWRlLgorCisgICAgICAgIEF0IGxlYXN0IHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBvdmVycmlkZW4uIiIiCisgICAgICAgIHBhc3MKKworY2xhc3MgUHJvZ3Jlc3NCYXJXaWRnZXRIRmlsbChvYmplY3QpOgorICAgICIiIlRoaXMgaXMgYSB2YXJpYWJsZSB3aWR0aCBlbGVtZW50IG9mIFByb2dyZXNzQmFyIGZvcm1hdHRpbmcuCisKKyAgICBUaGUgUHJvZ3Jlc3NCYXIgb2JqZWN0IHdpbGwgY2FsbCBpdCdzIHVwZGF0ZSB2YWx1ZSwgaW5mb3JtaW5nIHRoZQorICAgIHdpZHRoIHRoaXMgb2JqZWN0IG11c3QgdGhlIG1hZGUuIFRoaXMgaXMgbGlrZSBUZVggXFxoZmlsbCwgaXQgd2lsbAorICAgIGV4cGFuZCB0byBmaWxsIHRoZSBsaW5lLiBZb3UgY2FuIHVzZSBtb3JlIHRoYW4gb25lIGluIHRoZSBzYW1lCisgICAgbGluZSwgYW5kIHRoZXkgd2lsbCBhbGwgaGF2ZSB0aGUgc2FtZSB3aWR0aCwgYW5kIHRvZ2V0aGVyIHdpbGwKKyAgICBmaWxsIHRoZSBsaW5lLgorICAgICIiIgorICAgIGRlZiB1cGRhdGUoc2VsZiwgcGJhciwgd2lkdGgpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB3aWRnZXQuCisKKyAgICAgICAgVGhlIHBhcmFtZXRlciBwYmFyIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBjYWxsaW5nIFByb2dyZXNzQmFyLAorICAgICAgICB3aGVyZSBvbmUgY2FuIGFjY2VzcyBhdHRyaWJ1dGVzIG9mIHRoZSBjbGFzcyBmb3Iga25vd2luZyBob3cKKyAgICAgICAgdGhlIHVwZGF0ZSBtdXN0IGJlIG1hZGUuIFRoZSBwYXJhbWV0ZXIgd2lkdGggaXMgdGhlIHRvdGFsCisgICAgICAgIGhvcml6b250YWwgd2lkdGggdGhlIHdpZGdldCBtdXN0IGhhdmUuCisKKyAgICAgICAgQXQgbGVhc3QgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIG92ZXJyaWRlbi4iIiIKKyAgICAgICAgcGFzcworCisKK2NsYXNzIEVUQShQcm9ncmVzc0JhcldpZGdldCk6CisgICAgIldpZGdldCBmb3IgdGhlIEVzdGltYXRlZCBUaW1lIG9mIEFycml2YWwiCisgICAgZGVmIGZvcm1hdF90aW1lKHNlbGYsIHNlY29uZHMpOgorICAgICAgICByZXR1cm4gdGltZS5zdHJmdGltZSgnJUg6JU06JVMnLCB0aW1lLmdtdGltZShzZWNvbmRzKSkKKyAgICBkZWYgdXBkYXRlKHNlbGYsIHBiYXIpOgorICAgICAgICBpZiBwYmFyLmN1cnJ2YWwgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAnRVRBOiAgLS06LS06LS0nCisgICAgICAgIGVsaWYgcGJhci5maW5pc2hlZDoKKyAgICAgICAgICAgIHJldHVybiAnVGltZTogJXMnICUgc2VsZi5mb3JtYXRfdGltZShwYmFyLnNlY29uZHNfZWxhcHNlZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVsYXBzZWQgPSBwYmFyLnNlY29uZHNfZWxhcHNlZAorICAgICAgICAgICAgZXRhID0gZWxhcHNlZCAqIHBiYXIubWF4dmFsIC8gcGJhci5jdXJydmFsIC0gZWxhcHNlZAorICAgICAgICAgICAgcmV0dXJuICdFVEE6ICAlcycgJSBzZWxmLmZvcm1hdF90aW1lKGV0YSkKKworY2xhc3MgRmlsZVRyYW5zZmVyU3BlZWQoUHJvZ3Jlc3NCYXJXaWRnZXQpOgorICAgICJXaWRnZXQgZm9yIHNob3dpbmcgdGhlIHRyYW5zZmVyIHNwZWVkICh1c2VmdWwgZm9yIGZpbGUgdHJhbnNmZXJzKS4iCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVuaXQ9J0InKToKKyAgICAgICAgc2VsZi51bml0ID0gdW5pdAorICAgICAgICBzZWxmLmZtdCA9ICclNi4yZiAlcycKKyAgICAgICAgc2VsZi5wcmVmaXhlcyA9IFsnJywgJ0snLCAnTScsICdHJywgJ1QnLCAnUCddCisgICAgZGVmIHVwZGF0ZShzZWxmLCBwYmFyKToKKyAgICAgICAgaWYgcGJhci5zZWNvbmRzX2VsYXBzZWQgPCAyZS02OiM9PSAwOgorICAgICAgICAgICAgYnBzID0gMC4wCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBicHMgPSBwYmFyLmN1cnJ2YWwgLyBwYmFyLnNlY29uZHNfZWxhcHNlZAorICAgICAgICBzcGQgPSBicHMKKyAgICAgICAgZm9yIHUgaW4gc2VsZi5wcmVmaXhlczoKKyAgICAgICAgICAgIGlmIHNwZCA8IDEwMDA6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHNwZCAvPSAxMDAwCisgICAgICAgIHJldHVybiBzZWxmLmZtdCAlIChzcGQsIHUgKyBzZWxmLnVuaXQgKyAnL3MnKQorCitjbGFzcyBSb3RhdGluZ01hcmtlcihQcm9ncmVzc0JhcldpZGdldCk6CisgICAgIkEgcm90YXRpbmcgbWFya2VyIGZvciBmaWxsaW5nIHRoZSBiYXIgb2YgcHJvZ3Jlc3MuIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXJrZXJzPSd8Ly1cXCcpOgorICAgICAgICBzZWxmLm1hcmtlcnMgPSBtYXJrZXJzCisgICAgICAgIHNlbGYuY3VybWFyayA9IC0xCisgICAgZGVmIHVwZGF0ZShzZWxmLCBwYmFyKToKKyAgICAgICAgaWYgcGJhci5maW5pc2hlZDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm1hcmtlcnNbMF0KKyAgICAgICAgc2VsZi5jdXJtYXJrID0gKHNlbGYuY3VybWFyayArIDEpICUgbGVuKHNlbGYubWFya2VycykKKyAgICAgICAgcmV0dXJuIHNlbGYubWFya2Vyc1tzZWxmLmN1cm1hcmtdCisKK2NsYXNzIFBlcmNlbnRhZ2UoUHJvZ3Jlc3NCYXJXaWRnZXQpOgorICAgICJKdXN0IHRoZSBwZXJjZW50YWdlIGRvbmUuIgorICAgIGRlZiB1cGRhdGUoc2VsZiwgcGJhcik6CisgICAgICAgIHJldHVybiAnJTNkJSUnICUgcGJhci5wZXJjZW50YWdlKCkKKworY2xhc3MgU2ltcGxlUHJvZ3Jlc3MoUHJvZ3Jlc3NCYXJXaWRnZXQpOgorICAgICJSZXR1cm5zIHdoYXQgaXMgYWxyZWFkeSBkb25lIGFuZCB0aGUgdG90YWwsIGUuZy46ICc1IG9mIDQ3JyIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VwPScgb2YgJyk6CisgICAgICAgIHNlbGYuc2VwID0gc2VwCisgICAgZGVmIHVwZGF0ZShzZWxmLCBwYmFyKToKKyAgICAgICAgcmV0dXJuICclZCVzJWQnICUgKHBiYXIuY3VycnZhbCwgc2VsZi5zZXAsIHBiYXIubWF4dmFsKQorCitjbGFzcyBCYXIoUHJvZ3Jlc3NCYXJXaWRnZXRIRmlsbCk6CisgICAgIlRoZSBiYXIgb2YgcHJvZ3Jlc3MuIEl0IHdpbGwgc3RyZXRjaCB0byBmaWxsIHRoZSBsaW5lLiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFya2VyPScjJywgbGVmdD0nfCcsIHJpZ2h0PSd8Jyk6CisgICAgICAgIHNlbGYubWFya2VyID0gbWFya2VyCisgICAgICAgIHNlbGYubGVmdCA9IGxlZnQKKyAgICAgICAgc2VsZi5yaWdodCA9IHJpZ2h0CisgICAgZGVmIF9mb3JtYXRfbWFya2VyKHNlbGYsIHBiYXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYubWFya2VyLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm1hcmtlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubWFya2VyLnVwZGF0ZShwYmFyKQorICAgIGRlZiB1cGRhdGUoc2VsZiwgcGJhciwgd2lkdGgpOgorICAgICAgICBwZXJjZW50ID0gcGJhci5wZXJjZW50YWdlKCkKKyAgICAgICAgY3dpZHRoID0gd2lkdGggLSBsZW4oc2VsZi5sZWZ0KSAtIGxlbihzZWxmLnJpZ2h0KQorICAgICAgICBtYXJrZWRfd2lkdGggPSBpbnQocGVyY2VudCAqIGN3aWR0aCAvLyAxMDApCisgICAgICAgIG0gPSBzZWxmLl9mb3JtYXRfbWFya2VyKHBiYXIpCisgICAgICAgIGJhciA9IChzZWxmLmxlZnQgKyAobSAqIG1hcmtlZF93aWR0aCkubGp1c3QoY3dpZHRoKSArIHNlbGYucmlnaHQpCisgICAgICAgIHJldHVybiBiYXIKKworY2xhc3MgUmV2ZXJzZUJhcihCYXIpOgorICAgICJUaGUgcmV2ZXJzZSBiYXIgb2YgcHJvZ3Jlc3MsIG9yIGJhciBvZiByZWdyZXNzLiA6KSIKKyAgICBkZWYgdXBkYXRlKHNlbGYsIHBiYXIsIHdpZHRoKToKKyAgICAgICAgcGVyY2VudCA9IHBiYXIucGVyY2VudGFnZSgpCisgICAgICAgIGN3aWR0aCA9IHdpZHRoIC0gbGVuKHNlbGYubGVmdCkgLSBsZW4oc2VsZi5yaWdodCkKKyAgICAgICAgbWFya2VkX3dpZHRoID0gaW50KHBlcmNlbnQgKiBjd2lkdGggLy8gMTAwKQorICAgICAgICBtID0gc2VsZi5fZm9ybWF0X21hcmtlcihwYmFyKQorICAgICAgICBiYXIgPSAoc2VsZi5sZWZ0ICsgKG0qbWFya2VkX3dpZHRoKS5yanVzdChjd2lkdGgpICsgc2VsZi5yaWdodCkKKyAgICAgICAgcmV0dXJuIGJhcgorCitkZWZhdWx0X3dpZGdldHMgPSBbUGVyY2VudGFnZSgpLCAnICcsIEJhcigpXQorY2xhc3MgUHJvZ3Jlc3NCYXIob2JqZWN0KToKKyAgICAiIiJUaGlzIGlzIHRoZSBQcm9ncmVzc0JhciBjbGFzcywgaXQgdXBkYXRlcyBhbmQgcHJpbnRzIHRoZSBiYXIuCisKKyAgICBBIGNvbW1vbiB3YXkgb2YgdXNpbmcgaXQgaXMgbGlrZToKKyAgICA+Pj4gcGJhciA9IFByb2dyZXNzQmFyKCkuc3RhcnQoKQorICAgID4+PiBmb3IgaSBpbiB4cmFuZ2UoMTAwKToKKyAgICAuLi4gICAgIyBkbyBzb21ldGhpbmcKKyAgICAuLi4gICAgcGJhci51cGRhdGUoaSsxKQorICAgIC4uLgorICAgID4+PiBwYmFyLmZpbmlzaCgpCisKKyAgICBZb3UgY2FuIGFsc28gdXNlIGEgcHJvZ3Jlc3NiYXIgYXMgYW4gaXRlcmF0b3I6CisgICAgPj4+IHByb2dyZXNzID0gUHJvZ3Jlc3NCYXIoKQorICAgID4+PiBmb3IgaSBpbiBwcm9ncmVzcyhzb21lX2l0ZXJhYmxlKToKKyAgICAuLi4gICAgIyBkbyBzb21ldGhpbmcKKyAgICAuLi4KKworICAgIEJ1dCBhbnl0aGluZyB5b3Ugd2FudCB0byBkbyBpcyBwb3NzaWJsZSAod2VsbCwgYWxtb3N0IGFueXRoaW5nKS4KKyAgICBZb3UgY2FuIHN1cHBseSBkaWZmZXJlbnQgd2lkZ2V0cyBvZiBhbnkgdHlwZSBpbiBhbnkgb3JkZXIuIEFuZCB5b3UKKyAgICBjYW4gZXZlbiB3cml0ZSB5b3VyIG93biB3aWRnZXRzISBUaGVyZSBhcmUgbWFueSB3aWRnZXRzIGFscmVhZHkKKyAgICBzaGlwcGVkIGFuZCB5b3Ugc2hvdWxkIGV4cGVyaW1lbnQgd2l0aCB0aGVtLgorCisgICAgVGhlIHRlcm1fd2lkdGggcGFyYW1ldGVyIG11c3QgYmUgYW4gaW50ZWdlciBvciBOb25lLiBJbiB0aGUgbGF0dGVyIGNhc2UKKyAgICBpdCB3aWxsIHRyeSB0byBndWVzcyBpdCwgaWYgaXQgZmFpbHMgaXQgd2lsbCBkZWZhdWx0IHRvIDgwIGNvbHVtbnMuCisKKyAgICBXaGVuIGltcGxlbWVudGluZyBhIHdpZGdldCB1cGRhdGUgbWV0aG9kIHlvdSBtYXkgYWNjZXNzIGFueQorICAgIGF0dHJpYnV0ZSBvciBmdW5jdGlvbiBvZiB0aGUgUHJvZ3Jlc3NCYXIgb2JqZWN0IGNhbGxpbmcgdGhlCisgICAgd2lkZ2V0J3MgdXBkYXRlIG1ldGhvZC4gVGhlIG1vc3QgaW1wb3J0YW50IGF0dHJpYnV0ZXMgeW91IHdvdWxkCisgICAgbGlrZSB0byBhY2Nlc3MgYXJlOgorICAgIC0gY3VycnZhbDogY3VycmVudCB2YWx1ZSBvZiB0aGUgcHJvZ3Jlc3MsIDAgPD0gY3VycnZhbCA8PSBtYXh2YWwKKyAgICAtIG1heHZhbDogbWF4aW11bSAoYW5kIGZpbmFsKSB2YWx1ZSBvZiB0aGUgcHJvZ3Jlc3MKKyAgICAtIGZpbmlzaGVkOiBUcnVlIGlmIHRoZSBiYXIgaGFzIGZpbmlzaGVkIChyZWFjaGVkIDEwMCUpLCBGYWxzZSBvL3cKKyAgICAtIHN0YXJ0X3RpbWU6IHRoZSB0aW1lIHdoZW4gc3RhcnQoKSBtZXRob2Qgb2YgUHJvZ3Jlc3NCYXIgd2FzIGNhbGxlZAorICAgIC0gc2Vjb25kc19lbGFwc2VkOiBzZWNvbmRzIGVsYXBzZWQgc2luY2Ugc3RhcnRfdGltZQorICAgIC0gcGVyY2VudGFnZSgpOiBwZXJjZW50YWdlIG9mIHRoZSBwcm9ncmVzcyBbMC4uMTAwXS4gVGhpcyBpcyBhIG1ldGhvZC4KKworICAgIFRoZSBhdHRyaWJ1dGVzIGFib3ZlIGFyZSB1bmxpa2VseSB0byBjaGFuZ2UgYmV0d2VlbiBkaWZmZXJlbnQgdmVyc2lvbnMsCisgICAgdGhlIG90aGVyIG9uZXMgbWF5IGNoYW5nZSBvciBjZWFzZSB0byBleGlzdCB3aXRob3V0IG5vdGljZSwgc28gdHJ5IHRvIHJlbHkKKyAgICBvbmx5IG9uIHRoZSBvbmVzIGRvY3VtZW50ZWQgYWJvdmUgaWYgeW91IGFyZSBleHRlbmRpbmcgdGhlIHByb2dyZXNzIGJhci4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICgnY3VycnZhbCcsICdmZCcsICdmaW5pc2hlZCcsICdsYXN0X3VwZGF0ZV90aW1lJywgJ21heHZhbCcsCisgICAgICAgICAgICAgICAgICduZXh0X3VwZGF0ZScsICdudW1faW50ZXJ2YWxzJywgJ3NlY29uZHNfZWxhcHNlZCcsCisgICAgICAgICAgICAgICAgICdzaWduYWxfc2V0JywgJ3N0YXJ0X3RpbWUnLCAndGVybV93aWR0aCcsICd1cGRhdGVfaW50ZXJ2YWwnLAorICAgICAgICAgICAgICAgICAnd2lkZ2V0cycsICdfaXRlcmFibGUnKQorCisgICAgX0RFRkFVTFRfTUFYVkFMID0gMTAwCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4dmFsPU5vbmUsIHdpZGdldHM9ZGVmYXVsdF93aWRnZXRzLCB0ZXJtX3dpZHRoPU5vbmUsCisgICAgICAgICAgICAgICAgIGZkPXN5cy5zdGRlcnIpOgorICAgICAgICBzZWxmLm1heHZhbCA9IG1heHZhbAorICAgICAgICBzZWxmLndpZGdldHMgPSB3aWRnZXRzCisgICAgICAgIHNlbGYuZmQgPSBmZAorICAgICAgICBzZWxmLnNpZ25hbF9zZXQgPSBGYWxzZQorICAgICAgICBpZiB0ZXJtX3dpZHRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi50ZXJtX3dpZHRoID0gdGVybV93aWR0aAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9yZXNpemUoTm9uZSwgTm9uZSkKKyAgICAgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdXSU5DSCwgc2VsZi5faGFuZGxlX3Jlc2l6ZSkKKyAgICAgICAgICAgICAgICBzZWxmLnNpZ25hbF9zZXQgPSBUcnVlCisgICAgICAgICAgICBleGNlcHQgKFN5c3RlbUV4aXQsIEtleWJvYXJkSW50ZXJydXB0KToKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHNlbGYudGVybV93aWR0aCA9IGludChvcy5lbnZpcm9uLmdldCgnQ09MVU1OUycsIDgwKSkgLSAxCisKKyAgICAgICAgc2VsZi5jdXJydmFsID0gMAorICAgICAgICBzZWxmLmZpbmlzaGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5zdGFydF90aW1lID0gTm9uZQorICAgICAgICBzZWxmLmxhc3RfdXBkYXRlX3RpbWUgPSBOb25lCisgICAgICAgIHNlbGYuc2Vjb25kc19lbGFwc2VkID0gMAorICAgICAgICBzZWxmLl9pdGVyYWJsZSA9IE5vbmUKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBpdGVyYWJsZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYubWF4dmFsID0gbGVuKGl0ZXJhYmxlKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgIyBJZiB0aGUgaXRlcmFibGUgaGFzIG5vIGxlbmd0aCwgdGhlbiByZWx5IG9uIHRoZSB2YWx1ZSBwcm92aWRlZAorICAgICAgICAgICAgIyBieSB0aGUgdXNlciwgb3RoZXJ3aXNlIGZhaWwuCisgICAgICAgICAgICBpZiBub3QgKGlzaW5zdGFuY2Uoc2VsZi5tYXh2YWwsIChpbnQsIGxvbmcpKSBhbmQgc2VsZi5tYXh2YWwgPiAwKToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0NvdWxkIG5vdCBkZXRlcm1pbmUgbWF4dmFsIGZyb20gaXRlcmFibGUuICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1lvdSBtdXN0IGV4cGxpY2l0bHkgcHJvdmlkZSBhIG1heHZhbC4nKQorICAgICAgICBzZWxmLl9pdGVyYWJsZSA9IGl0ZXIoaXRlcmFibGUpCisgICAgICAgIHNlbGYuc3RhcnQoKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5leHQgPSBzZWxmLl9pdGVyYWJsZS5uZXh0KCkKKyAgICAgICAgICAgIHNlbGYudXBkYXRlKHNlbGYuY3VycnZhbCArIDEpCisgICAgICAgICAgICByZXR1cm4gbmV4dAorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgIHNlbGYuZmluaXNoKCkKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgX2hhbmRsZV9yZXNpemUoc2VsZiwgc2lnbnVtLCBmcmFtZSk6CisgICAgICAgIGgsIHcgPSBhcnJheSgnaCcsIGlvY3RsKHNlbGYuZmQsIHRlcm1pb3MuVElPQ0dXSU5TWiwgJ1wwJyAqIDgpKVs6Ml0KKyAgICAgICAgc2VsZi50ZXJtX3dpZHRoID0gdworCisgICAgZGVmIHBlcmNlbnRhZ2Uoc2VsZik6CisgICAgICAgICJSZXR1cm5zIHRoZSBwZXJjZW50YWdlIG9mIHRoZSBwcm9ncmVzcy4iCisgICAgICAgIHJldHVybiBzZWxmLmN1cnJ2YWwgKiAxMDAuMCAvIHNlbGYubWF4dmFsCisKKyAgICBkZWYgX2Zvcm1hdF93aWRnZXRzKHNlbGYpOgorICAgICAgICByID0gW10KKyAgICAgICAgaGZpbGxfaW5kcyA9IFtdCisgICAgICAgIG51bV9oZmlsbCA9IDAKKyAgICAgICAgY3VycndpZHRoID0gMAorICAgICAgICBmb3IgaSwgdyBpbiBlbnVtZXJhdGUoc2VsZi53aWRnZXRzKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodywgUHJvZ3Jlc3NCYXJXaWRnZXRIRmlsbCk6CisgICAgICAgICAgICAgICAgci5hcHBlbmQodykKKyAgICAgICAgICAgICAgICBoZmlsbF9pbmRzLmFwcGVuZChpKQorICAgICAgICAgICAgICAgIG51bV9oZmlsbCArPSAxCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodywgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgci5hcHBlbmQodykKKyAgICAgICAgICAgICAgICBjdXJyd2lkdGggKz0gbGVuKHcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHdldmFsID0gdy51cGRhdGUoc2VsZikKKyAgICAgICAgICAgICAgICBjdXJyd2lkdGggKz0gbGVuKHdldmFsKQorICAgICAgICAgICAgICAgIHIuYXBwZW5kKHdldmFsKQorICAgICAgICBmb3IgaXcgaW4gaGZpbGxfaW5kczoKKyAgICAgICAgICAgIHdpZGdldF93aWR0aCA9IGludCgoc2VsZi50ZXJtX3dpZHRoIC0gY3VycndpZHRoKSAvLyBudW1faGZpbGwpCisgICAgICAgICAgICByW2l3XSA9IHJbaXddLnVwZGF0ZShzZWxmLCB3aWRnZXRfd2lkdGgpCisgICAgICAgIHJldHVybiByCisKKyAgICBkZWYgX2Zvcm1hdF9saW5lKHNlbGYpOgorICAgICAgICByZXR1cm4gJycuam9pbihzZWxmLl9mb3JtYXRfd2lkZ2V0cygpKS5sanVzdChzZWxmLnRlcm1fd2lkdGgpCisKKyAgICBkZWYgX25leHRfdXBkYXRlKHNlbGYpOgorICAgICAgICByZXR1cm4gaW50KChpbnQoc2VsZi5udW1faW50ZXJ2YWxzICoKKyAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLmN1cnJ2YWwgLyBzZWxmLm1heHZhbCkpICsgMSkgKgorICAgICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlX2ludGVydmFsKQorCisgICAgZGVmIF9uZWVkX3VwZGF0ZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0cnVlIHdoZW4gdGhlIHByb2dyZXNzYmFyIHNob3VsZCBwcmludCBhbiB1cGRhdGVkIGxpbmUuCisKKyAgICAgICAgWW91IGNhbiBvdmVycmlkZSB0aGlzIG1ldGhvZCBpZiB5b3Ugd2FudCBmaW5lciBncmFpbmVkIGNvbnRyb2wgb3ZlcgorICAgICAgICB1cGRhdGVzLgorCisgICAgICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGlzIG9wdGltaXplZCB0byBiZSBhcyBmYXN0IGFzIHBvc3NpYmxlIGFuZAorICAgICAgICBhcyBlY29ub21pY2FsIGFzIHBvc3NpYmxlIGluIHRoZSBudW1iZXIgb2YgdXBkYXRlcy4gSG93ZXZlciwgZGVwZW5kaW5nCisgICAgICAgIG9uIHlvdXIgdXNhZ2UgeW91IG1heSB3YW50IHRvIGRvIG1vcmUgdXBkYXRlcy4gRm9yIGluc3RhbmNlLCBpZiB5b3VyCisgICAgICAgIHByb2dyZXNzYmFyIHN0YXlzIGluIHRoZSBzYW1lIHBlcmNlbnRhZ2UgZm9yIGEgbG9uZyB0aW1lLCBhbmQgeW91IHdhbnQKKyAgICAgICAgdG8gdXBkYXRlIG90aGVyIHdpZGdldHMsIGxpa2UgRVRBLCB0aGVuIHlvdSBjb3VsZCByZXR1cm4gVHJ1ZSBhZnRlcgorICAgICAgICBzb21lIHRpbWUgaGFzIHBhc3NlZCB3aXRoIG5vIHVwZGF0ZXMuCisKKyAgICAgICAgSWRlYWxseSB5b3UgY291bGQgY2FsbCBzZWxmLl9mb3JtYXRfbGluZSgpIGFuZCBzZWUgaWYgaXQncyBkaWZmZXJlbnQKKyAgICAgICAgZnJvbSB0aGUgcHJldmlvdXMgX2Zvcm1hdF9saW5lKCkgY2FsbCwgYnV0IGNhbGxpbmcgX2Zvcm1hdF9saW5lKCkgdGFrZXMKKyAgICAgICAgYXJvdW5kIDIwIHRpbWVzIG1vcmUgdGltZSB0aGFuIGNhbGxpbmcgdGhpcyBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAgICBfbmVlZF91cGRhdGUoKS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLmN1cnJ2YWwgPj0gc2VsZi5uZXh0X3VwZGF0ZQorCisgICAgZGVmIHVwZGF0ZShzZWxmLCB2YWx1ZSk6CisgICAgICAgICJVcGRhdGVzIHRoZSBwcm9ncmVzcyBiYXIgdG8gYSBuZXcgdmFsdWUuIgorICAgICAgICBhc3NlcnQgMCA8PSB2YWx1ZSA8PSBzZWxmLm1heHZhbCwgJzAgPD0gJWQgPD0gJWQnICUgKHZhbHVlLCBzZWxmLm1heHZhbCkKKyAgICAgICAgc2VsZi5jdXJydmFsID0gdmFsdWUKKyAgICAgICAgaWYgbm90IHNlbGYuX25lZWRfdXBkYXRlKCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5zdGFydF90aW1lIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1lvdSBtdXN0IGNhbGwgc3RhcnQoKSBiZWZvcmUgY2FsbGluZyB1cGRhdGUoKScpCisgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuc2Vjb25kc19lbGFwc2VkID0gbm93IC0gc2VsZi5zdGFydF90aW1lCisgICAgICAgIHNlbGYubmV4dF91cGRhdGUgPSBzZWxmLl9uZXh0X3VwZGF0ZSgpCisgICAgICAgIHNlbGYuZmQud3JpdGUoc2VsZi5fZm9ybWF0X2xpbmUoKSArICdccicpCisgICAgICAgIHNlbGYubGFzdF91cGRhdGVfdGltZSA9IG5vdworCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICAiIiJTdGFydHMgbWVhc3VyaW5nIHRpbWUsIGFuZCBwcmludHMgdGhlIGJhciBhdCAwJS4KKworICAgICAgICBJdCByZXR1cm5zIHNlbGYgc28geW91IGNhbiB1c2UgaXQgbGlrZSB0aGlzOgorICAgICAgICA+Pj4gcGJhciA9IFByb2dyZXNzQmFyKCkuc3RhcnQoKQorICAgICAgICA+Pj4gZm9yIGkgaW4geHJhbmdlKDEwMCk6CisgICAgICAgIC4uLiAgICAjIGRvIHNvbWV0aGluZworICAgICAgICAuLi4gICAgcGJhci51cGRhdGUoaSsxKQorICAgICAgICAuLi4KKyAgICAgICAgPj4+IHBiYXIuZmluaXNoKCkKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYubWF4dmFsIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLm1heHZhbCA9IHNlbGYuX0RFRkFVTFRfTUFYVkFMCisgICAgICAgIGFzc2VydCBzZWxmLm1heHZhbCA+IDAKKworICAgICAgICBzZWxmLm51bV9pbnRlcnZhbHMgPSBtYXgoMTAwLCBzZWxmLnRlcm1fd2lkdGgpCisgICAgICAgIHNlbGYudXBkYXRlX2ludGVydmFsID0gc2VsZi5tYXh2YWwgLyBzZWxmLm51bV9pbnRlcnZhbHMKKyAgICAgICAgc2VsZi5uZXh0X3VwZGF0ZSA9IDAKKworICAgICAgICBzZWxmLnN0YXJ0X3RpbWUgPSBzZWxmLmxhc3RfdXBkYXRlX3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLnVwZGF0ZSgwKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIGZpbmlzaChzZWxmKToKKyAgICAgICAgIiIiVXNlZCB0byB0ZWxsIHRoZSBwcm9ncmVzcyBpcyBmaW5pc2hlZC4iIiIKKyAgICAgICAgc2VsZi5maW5pc2hlZCA9IFRydWUKKyAgICAgICAgc2VsZi51cGRhdGUoc2VsZi5tYXh2YWwpCisgICAgICAgIHNlbGYuZmQud3JpdGUoJ1xuJykKKyAgICAgICAgaWYgc2VsZi5zaWduYWxfc2V0OgorICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHV0lOQ0gsIHNpZ25hbC5TSUdfREZMKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wcnNlcnYvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3Byc2Vydi9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2NiNzNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wcnNlcnYvX19pbml0X18ucHkKQEAgLTAsMCArMSwxNCBAQAorX192ZXJzaW9uX18gPSAiMS4wLjAiCisKK2ltcG9ydCBvcywgdGltZQoraW1wb3J0IHN5cyxsb2dnaW5nCisKK2RlZiBpbml0X2xvZ2dlcihsb2dmaWxlLCBsb2dsZXZlbCk6CisgICAgbnVtZXJpY19sZXZlbCA9IGdldGF0dHIobG9nZ2luZywgbG9nbGV2ZWwudXBwZXIoKSwgTm9uZSkKKyAgICBpZiBub3QgaXNpbnN0YW5jZShudW1lcmljX2xldmVsLCBpbnQpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIGxvZyBsZXZlbDogJXMnICUgbG9nbGV2ZWwpCisgICAgRk9STUFUID0gJyUoYXNjdGltZSktMTVzICUobWVzc2FnZSlzJworICAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bnVtZXJpY19sZXZlbCwgZmlsZW5hbWU9bG9nZmlsZSwgZm9ybWF0PUZPUk1BVCkKKworY2xhc3MgTm90Rm91bmRFcnJvcihFeGNlcHRpb24pOgorICAgIHBhc3MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJzZXJ2L2RiLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wcnNlcnYvZGIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM3OTU4MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJzZXJ2L2RiLnB5CkBAIC0wLDAgKzEsMjY4IEBACitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBlcnJubworaW1wb3J0IHByc2VydgoraW1wb3J0IHRpbWUKKwordHJ5OgorICAgIGltcG9ydCBzcWxpdGUzCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSBweXNxbGl0ZTIgaW1wb3J0IGRiYXBpMiBhcyBzcWxpdGUzCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlLlBSc2VydiIpCisKK3NxbHZlcnNpb24gPSBzcWxpdGUzLnNxbGl0ZV92ZXJzaW9uX2luZm8KK2lmIHNxbHZlcnNpb25bMF0gPCAzIG9yIChzcWx2ZXJzaW9uWzBdID09IDMgYW5kIHNxbHZlcnNpb25bMV0gPCAzKToKKyAgICByYWlzZSBFeGNlcHRpb24oInNxbGl0ZTMgdmVyc2lvbiAzLjMuMCBvciBsYXRlciBpcyByZXF1aXJlZC4iKQorCisjCisjICJObyBIaXN0b3J5IiBtb2RlIC0gZm9yIGEgZ2l2ZW4gcXVlcnkgdHVwbGUgKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKSwKKyMgdGhlIHJldHVybmVkIHZhbHVlIHdpbGwgYmUgdGhlIGxhcmdlc3QgYW1vbmcgYWxsIHRoZSB2YWx1ZXMgb2YgdGhlIHNhbWUKKyMgKHZlcnNpb24sIHBrZ2FyY2gpLiBUaGlzIG1lYW5zIHRoZSBQUiB2YWx1ZSByZXR1cm5lZCBjYW4gTk9UIGJlIGRlY3JlbWVudGVkLgorIworIyAiSGlzdG9yeSIgbW9kZSAtIFJldHVybiBhIG5ldyBoaWdoZXIgdmFsdWUgZm9yIHByZXZpb3VzbHkgdW5zZWVuIHF1ZXJ5CisjIHR1cGxlICh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSksIG90aGVyd2lzZSByZXR1cm4gaGlzdG9yaWNhbCB2YWx1ZS4KKyMgVmFsdWUgY2FuIGRlY3JlbWVudCBpZiByZXR1cm5pbmcgdG8gYSBwcmV2aW91cyBidWlsZC4KKyMKKworY2xhc3MgUFJUYWJsZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uLCB0YWJsZSwgbm9oaXN0KToKKyAgICAgICAgc2VsZi5jb25uID0gY29ubgorICAgICAgICBzZWxmLm5vaGlzdCA9IG5vaGlzdAorICAgICAgICBzZWxmLmRpcnR5ID0gRmFsc2UKKyAgICAgICAgaWYgbm9oaXN0OgorICAgICAgICAgICAgc2VsZi50YWJsZSA9ICIlc19ub2hpc3QiICUgdGFibGUgCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnRhYmxlID0gIiVzX2hpc3QiICUgdGFibGUgCisKKyAgICAgICAgc2VsZi5fZXhlY3V0ZSgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgJXMgXAorICAgICAgICAgICAgICAgICAgICAodmVyc2lvbiBURVhUIE5PVCBOVUxMLCBcCisgICAgICAgICAgICAgICAgICAgIHBrZ2FyY2ggVEVYVCBOT1QgTlVMTCwgIFwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tzdW0gVEVYVCBOT1QgTlVMTCwgXAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSBJTlRFR0VSLCBcCisgICAgICAgICAgICAgICAgICAgIFBSSU1BUlkgS0VZICh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSkpOyIgJSBzZWxmLnRhYmxlKQorCisgICAgZGVmIF9leGVjdXRlKHNlbGYsICpxdWVyeSk6CisgICAgICAgICIiIkV4ZWN1dGUgYSBxdWVyeSwgd2FpdGluZyB0byBhY3F1aXJlIGEgbG9jayBpZiBuZWNlc3NhcnkiIiIKKyAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQorICAgICAgICBlbmQgPSBzdGFydCArIDIwCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29ubi5leGVjdXRlKCpxdWVyeSkKKyAgICAgICAgICAgIGV4Y2VwdCBzcWxpdGUzLk9wZXJhdGlvbmFsRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGlmICdpcyBsb2NrZWQnIGluIHN0cihleGMpIGFuZCBlbmQgPiB0aW1lLnRpbWUoKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICByYWlzZSBleGMKKworICAgIGRlZiBzeW5jKHNlbGYpOgorICAgICAgICBzZWxmLmNvbm4uY29tbWl0KCkKKyAgICAgICAgc2VsZi5fZXhlY3V0ZSgiQkVHSU4gRVhDTFVTSVZFIFRSQU5TQUNUSU9OIikKKworICAgIGRlZiBzeW5jX2lmX2RpcnR5KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmRpcnR5OgorICAgICAgICAgICAgc2VsZi5zeW5jKCkKKyAgICAgICAgICAgIHNlbGYuZGlydHkgPSBGYWxzZQorCisgICAgZGVmIF9nZXRWYWx1ZUhpc3Qoc2VsZiwgdmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0pOgorICAgICAgICBkYXRhPXNlbGYuX2V4ZWN1dGUoIlNFTEVDVCB2YWx1ZSBGUk9NICVzIFdIRVJFIHZlcnNpb249PyBBTkQgcGtnYXJjaD0/IEFORCBjaGVja3N1bT0/OyIgJSBzZWxmLnRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKSkKKyAgICAgICAgcm93PWRhdGEuZmV0Y2hvbmUoKQorICAgICAgICBpZiByb3cgIT0gTm9uZToKKyAgICAgICAgICAgIHJldHVybiByb3dbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICNubyB2YWx1ZSBmb3VuZCwgdHJ5IHRvIGluc2VydAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGUoIklOU0VSVCBJTlRPICVzIFZBTFVFUyAoPywgPywgPywgKHNlbGVjdCBpZm51bGwobWF4KHZhbHVlKSsxLDApIGZyb20gJXMgd2hlcmUgdmVyc2lvbj0/IEFORCBwa2dhcmNoPT8pKTsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzZWxmLnRhYmxlLHNlbGYudGFibGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlcnNpb24scGtnYXJjaCwgY2hlY2tzdW0sdmVyc2lvbiwgcGtnYXJjaCkpCisgICAgICAgICAgICBleGNlcHQgc3FsaXRlMy5JbnRlZ3JpdHlFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHN0cihleGMpKQorCisgICAgICAgICAgICBzZWxmLmRpcnR5ID0gVHJ1ZQorCisgICAgICAgICAgICBkYXRhPXNlbGYuX2V4ZWN1dGUoIlNFTEVDVCB2YWx1ZSBGUk9NICVzIFdIRVJFIHZlcnNpb249PyBBTkQgcGtnYXJjaD0/IEFORCBjaGVja3N1bT0/OyIgJSBzZWxmLnRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSkpCisgICAgICAgICAgICByb3c9ZGF0YS5mZXRjaG9uZSgpCisgICAgICAgICAgICBpZiByb3cgIT0gTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcm93WzBdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIHByc2Vydi5Ob3RGb3VuZEVycm9yCisKKyAgICBkZWYgX2dldFZhbHVlTm9oaXN0KHNlbGYsIHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKToKKyAgICAgICAgZGF0YT1zZWxmLl9leGVjdXRlKCJTRUxFQ1QgdmFsdWUgRlJPTSAlcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgdmVyc2lvbj0/IEFORCBwa2dhcmNoPT8gQU5EIGNoZWNrc3VtPT8gQU5EIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA+PSAoc2VsZWN0IG1heCh2YWx1ZSkgZnJvbSAlcyB3aGVyZSB2ZXJzaW9uPT8gQU5EIHBrZ2FyY2g9Pyk7IiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzZWxmLnRhYmxlLCBzZWxmLnRhYmxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0sIHZlcnNpb24sIHBrZ2FyY2gpKQorICAgICAgICByb3c9ZGF0YS5mZXRjaG9uZSgpCisgICAgICAgIGlmIHJvdyAhPSBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHJvd1swXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgI25vIHZhbHVlIGZvdW5kLCB0cnkgdG8gaW5zZXJ0CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZSgiSU5TRVJUIE9SIFJFUExBQ0UgSU5UTyAlcyBWQUxVRVMgKD8sID8sID8sIChzZWxlY3QgaWZudWxsKG1heCh2YWx1ZSkrMSwwKSBmcm9tICVzIHdoZXJlIHZlcnNpb249PyBBTkQgcGtnYXJjaD0/KSk7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYudGFibGUsc2VsZi50YWJsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCB2ZXJzaW9uLCBwa2dhcmNoKSkKKyAgICAgICAgICAgIGV4Y2VwdCBzcWxpdGUzLkludGVncml0eUVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGV4YykpCisgICAgICAgICAgICAgICAgc2VsZi5jb25uLnJvbGxiYWNrKCkKKworICAgICAgICAgICAgc2VsZi5kaXJ0eSA9IFRydWUKKworICAgICAgICAgICAgZGF0YT1zZWxmLl9leGVjdXRlKCJTRUxFQ1QgdmFsdWUgRlJPTSAlcyBXSEVSRSB2ZXJzaW9uPT8gQU5EIHBrZ2FyY2g9PyBBTkQgY2hlY2tzdW09PzsiICUgc2VsZi50YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0pKQorICAgICAgICAgICAgcm93PWRhdGEuZmV0Y2hvbmUoKQorICAgICAgICAgICAgaWYgcm93ICE9IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJvd1swXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBwcnNlcnYuTm90Rm91bmRFcnJvcgorCisgICAgZGVmIGdldFZhbHVlKHNlbGYsIHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKToKKyAgICAgICAgaWYgc2VsZi5ub2hpc3Q6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0VmFsdWVOb2hpc3QodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0VmFsdWVIaXN0KHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKQorCisgICAgZGVmIF9pbXBvcnRIaXN0KHNlbGYsIHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCB2YWx1ZSk6CisgICAgICAgIHZhbCA9IE5vbmUgCisgICAgICAgIGRhdGEgPSBzZWxmLl9leGVjdXRlKCJTRUxFQ1QgdmFsdWUgRlJPTSAlcyBXSEVSRSB2ZXJzaW9uPT8gQU5EIHBrZ2FyY2g9PyBBTkQgY2hlY2tzdW09PzsiICUgc2VsZi50YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSkpCisgICAgICAgIHJvdyA9IGRhdGEuZmV0Y2hvbmUoKQorICAgICAgICBpZiByb3cgIT0gTm9uZToKKyAgICAgICAgICAgIHZhbD1yb3dbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICNubyB2YWx1ZSBmb3VuZCwgdHJ5IHRvIGluc2VydAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGUoIklOU0VSVCBJTlRPICVzIFZBTFVFUyAoPywgPywgPywgPyk7IiAgJSAoc2VsZi50YWJsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0sIHZhbHVlKSkKKyAgICAgICAgICAgIGV4Y2VwdCBzcWxpdGUzLkludGVncml0eUVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGV4YykpCisKKyAgICAgICAgICAgIHNlbGYuZGlydHkgPSBUcnVlCisKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9leGVjdXRlKCJTRUxFQ1QgdmFsdWUgRlJPTSAlcyBXSEVSRSB2ZXJzaW9uPT8gQU5EIHBrZ2FyY2g9PyBBTkQgY2hlY2tzdW09PzsiICUgc2VsZi50YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSkpCisgICAgICAgICAgICByb3cgPSBkYXRhLmZldGNob25lKCkKKyAgICAgICAgICAgIGlmIHJvdyAhPSBOb25lOgorICAgICAgICAgICAgICAgIHZhbCA9IHJvd1swXQorICAgICAgICByZXR1cm4gdmFsCisKKyAgICBkZWYgX2ltcG9ydE5vaGlzdChzZWxmLCB2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSwgdmFsdWUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjdHJ5IHRvIGluc2VydAorICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZSgiSU5TRVJUIElOVE8gJXMgVkFMVUVTICg/LCA/LCA/LCA/KTsiICAlIChzZWxmLnRhYmxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSx2YWx1ZSkpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUzLkludGVncml0eUVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICNhbHJlYWR5IGhhdmUgdGhlIHJlY29yZCwgdHJ5IHRvIHVwZGF0ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGUoIlVQREFURSAlcyBTRVQgdmFsdWU9PyBXSEVSRSB2ZXJzaW9uPT8gQU5EIHBrZ2FyY2g9PyBBTkQgY2hlY2tzdW09PyBBTkQgdmFsdWU8PyIgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi50YWJsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlLHZlcnNpb24scGtnYXJjaCxjaGVja3N1bSx2YWx1ZSkpCisgICAgICAgICAgICBleGNlcHQgc3FsaXRlMy5JbnRlZ3JpdHlFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHN0cihleGMpKQorCisgICAgICAgIHNlbGYuZGlydHkgPSBUcnVlCisKKyAgICAgICAgZGF0YSA9IHNlbGYuX2V4ZWN1dGUoIlNFTEVDVCB2YWx1ZSBGUk9NICVzIFdIRVJFIHZlcnNpb249PyBBTkQgcGtnYXJjaD0/IEFORCBjaGVja3N1bT0/IEFORCB2YWx1ZT49PzsiICUgc2VsZi50YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbixwa2dhcmNoLGNoZWNrc3VtLHZhbHVlKSkKKyAgICAgICAgcm93PWRhdGEuZmV0Y2hvbmUoKQorICAgICAgICBpZiByb3cgIT0gTm9uZToKKyAgICAgICAgICAgIHJldHVybiByb3dbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgaW1wb3J0b25lKHNlbGYsIHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCB2YWx1ZSk6CisgICAgICAgIGlmIHNlbGYubm9oaXN0OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ltcG9ydE5vaGlzdCh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSwgdmFsdWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5faW1wb3J0SGlzdCh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSwgdmFsdWUpCisKKyAgICBkZWYgZXhwb3J0KHNlbGYsIHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCBjb2xpbmZvKToKKyAgICAgICAgbWV0YWluZm8gPSB7fQorICAgICAgICAjY29sdW1uIGluZm8gCisgICAgICAgIGlmIGNvbGluZm86CisgICAgICAgICAgICBtZXRhaW5mb1sndGJsX25hbWUnXSA9IHNlbGYudGFibGUKKyAgICAgICAgICAgIG1ldGFpbmZvWydjb3JlX3ZlciddID0gcHJzZXJ2Ll9fdmVyc2lvbl9fCisgICAgICAgICAgICBtZXRhaW5mb1snY29sX2luZm8nXSA9IFtdCisgICAgICAgICAgICBkYXRhID0gc2VsZi5fZXhlY3V0ZSgiUFJBR01BIHRhYmxlX2luZm8oJXMpOyIgJSBzZWxmLnRhYmxlKQorICAgICAgICAgICAgZm9yIHJvdyBpbiBkYXRhOgorICAgICAgICAgICAgICAgIGNvbCA9IHt9CisgICAgICAgICAgICAgICAgY29sWyduYW1lJ10gPSByb3dbJ25hbWUnXQorICAgICAgICAgICAgICAgIGNvbFsndHlwZSddID0gcm93Wyd0eXBlJ10KKyAgICAgICAgICAgICAgICBjb2xbJ25vdG51bGwnXSA9IHJvd1snbm90bnVsbCddCisgICAgICAgICAgICAgICAgY29sWydkZmx0X3ZhbHVlJ10gPSByb3dbJ2RmbHRfdmFsdWUnXQorICAgICAgICAgICAgICAgIGNvbFsncGsnXSA9IHJvd1sncGsnXQorICAgICAgICAgICAgICAgIG1ldGFpbmZvWydjb2xfaW5mbyddLmFwcGVuZChjb2wpCisKKyAgICAgICAgI2RhdGEgaW5mbworICAgICAgICBkYXRhaW5mbyA9IFtdCisKKyAgICAgICAgaWYgc2VsZi5ub2hpc3Q6CisgICAgICAgICAgICBzcWxzdG10ID0gIlNFTEVDVCBUMS52ZXJzaW9uLCBUMS5wa2dhcmNoLCBUMS5jaGVja3N1bSwgVDEudmFsdWUgRlJPTSAlcyBhcyBUMSwgXAorICAgICAgICAgICAgICAgICAgICAoU0VMRUNUIHZlcnNpb24scGtnYXJjaCxtYXgodmFsdWUpIGFzIG1heHZhbHVlIEZST00gJXMgR1JPVVAgQlkgdmVyc2lvbixwa2dhcmNoKSBhcyBUMiBcCisgICAgICAgICAgICAgICAgICAgIFdIRVJFIFQxLnZlcnNpb249VDIudmVyc2lvbiBBTkQgVDEucGtnYXJjaD1UMi5wa2dhcmNoIEFORCBUMS52YWx1ZT1UMi5tYXh2YWx1ZSAiICUgKHNlbGYudGFibGUsIHNlbGYudGFibGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzcWxzdG10ID0gIlNFTEVDVCAqIEZST00gJXMgYXMgVDEgV0hFUkUgMT0xICIgJSBzZWxmLnRhYmxlCisgICAgICAgIHNxbGFyZyA9IFtdCisgICAgICAgIHdoZXJlID0gIiIKKyAgICAgICAgaWYgdmVyc2lvbjoKKyAgICAgICAgICAgIHdoZXJlICs9ICJBTkQgVDEudmVyc2lvbj0/ICIKKyAgICAgICAgICAgIHNxbGFyZy5hcHBlbmQoc3RyKHZlcnNpb24pKQorICAgICAgICBpZiBwa2dhcmNoOgorICAgICAgICAgICAgd2hlcmUgKz0gIkFORCBUMS5wa2dhcmNoPT8gIgorICAgICAgICAgICAgc3FsYXJnLmFwcGVuZChzdHIocGtnYXJjaCkpCisgICAgICAgIGlmIGNoZWNrc3VtOgorICAgICAgICAgICAgd2hlcmUgKz0gIkFORCBUMS5jaGVja3N1bT0/ICIKKyAgICAgICAgICAgIHNxbGFyZy5hcHBlbmQoc3RyKGNoZWNrc3VtKSkKKworICAgICAgICBzcWxzdG10ICs9IHdoZXJlICsgIjsiCisKKyAgICAgICAgaWYgbGVuKHNxbGFyZyk6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5fZXhlY3V0ZShzcWxzdG10LCB0dXBsZShzcWxhcmcpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2V4ZWN1dGUoc3Fsc3RtdCkKKyAgICAgICAgZm9yIHJvdyBpbiBkYXRhOgorICAgICAgICAgICAgaWYgcm93Wyd2ZXJzaW9uJ106CisgICAgICAgICAgICAgICAgY29sID0ge30KKyAgICAgICAgICAgICAgICBjb2xbJ3ZlcnNpb24nXSA9IHJvd1sndmVyc2lvbiddCisgICAgICAgICAgICAgICAgY29sWydwa2dhcmNoJ10gPSByb3dbJ3BrZ2FyY2gnXQorICAgICAgICAgICAgICAgIGNvbFsnY2hlY2tzdW0nXSA9IHJvd1snY2hlY2tzdW0nXQorICAgICAgICAgICAgICAgIGNvbFsndmFsdWUnXSA9IHJvd1sndmFsdWUnXQorICAgICAgICAgICAgICAgIGRhdGFpbmZvLmFwcGVuZChjb2wpCisgICAgICAgIHJldHVybiAobWV0YWluZm8sIGRhdGFpbmZvKQorCitjbGFzcyBQUkRhdGEob2JqZWN0KToKKyAgICAiIiJPYmplY3QgcmVwcmVzZW50aW5nIHRoZSBQUiBkYXRhYmFzZSIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbm9oaXN0PVRydWUpOgorICAgICAgICBzZWxmLmZpbGVuYW1lPW9zLnBhdGguYWJzcGF0aChmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5ub2hpc3Q9bm9oaXN0CisgICAgICAgICNidWlsZCBkaXJlY3RvcnkgaGllcmFyY2h5CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguZGlybmFtZShzZWxmLmZpbGVuYW1lKSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgorICAgICAgICAgICAgICAgIHJhaXNlIGUKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uPXNxbGl0ZTMuY29ubmVjdChzZWxmLmZpbGVuYW1lLCBpc29sYXRpb25fbGV2ZWw9IkVYQ0xVU0lWRSIsIGNoZWNrX3NhbWVfdGhyZWFkID0gRmFsc2UpCisgICAgICAgIHNlbGYuY29ubmVjdGlvbi5yb3dfZmFjdG9yeT1zcWxpdGUzLlJvdworICAgICAgICBzZWxmLmNvbm5lY3Rpb24uZXhlY3V0ZSgicHJhZ21hIHN5bmNocm9ub3VzID0gb2ZmOyIpCisgICAgICAgIHNlbGYuY29ubmVjdGlvbi5leGVjdXRlKCJQUkFHTUEgam91cm5hbF9tb2RlID0gV0FMOyIpCisgICAgICAgIHNlbGYuX3RhYmxlcz17fQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHNlbGYuY29ubmVjdGlvbi5jbG9zZSgpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZix0YmxuYW1lKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodGJsbmFtZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInRibG5hbWUgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgbm90ICclcyciICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKHRibG5hbWUpKQorICAgICAgICBpZiB0YmxuYW1lIGluIHNlbGYuX3RhYmxlczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl90YWJsZXNbdGJsbmFtZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRhYmxlb2JqID0gc2VsZi5fdGFibGVzW3RibG5hbWVdID0gUFJUYWJsZShzZWxmLmNvbm5lY3Rpb24sIHRibG5hbWUsIHNlbGYubm9oaXN0KQorICAgICAgICAgICAgcmV0dXJuIHRhYmxlb2JqCisKKyAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwgdGJsbmFtZSk6CisgICAgICAgIGlmIHRibG5hbWUgaW4gc2VsZi5fdGFibGVzOgorICAgICAgICAgICAgZGVsIHNlbGYuX3RhYmxlc1t0YmxuYW1lXQorICAgICAgICBsb2dnZXIuaW5mbygiZHJvcCB0YWJsZSAlcyIgJSAodGJsbmFtZSkpCisgICAgICAgIHNlbGYuY29ubmVjdGlvbi5leGVjdXRlKCJEUk9QIFRBQkxFIElGIEVYSVNUUyAlczsiICUgdGJsbmFtZSkgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3Byc2Vydi9zZXJ2LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wcnNlcnYvc2Vydi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzBmZmI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wcnNlcnYvc2Vydi5weQpAQCAtMCwwICsxLDQxOCBAQAoraW1wb3J0IG9zLHN5cyxsb2dnaW5nCitpbXBvcnQgc2lnbmFsLCB0aW1lCitmcm9tIFNpbXBsZVhNTFJQQ1NlcnZlciBpbXBvcnQgU2ltcGxlWE1MUlBDU2VydmVyLCBTaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlcgoraW1wb3J0IHRocmVhZGluZworaW1wb3J0IFF1ZXVlCisKK3RyeToKKyAgICBpbXBvcnQgc3FsaXRlMworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gcHlzcWxpdGUyIGltcG9ydCBkYmFwaTIgYXMgc3FsaXRlMworCitpbXBvcnQgYmIuc2VydmVyLnhtbHJwYworaW1wb3J0IHByc2VydgoraW1wb3J0IHByc2Vydi5kYgoraW1wb3J0IGVycm5vCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlLlBSc2VydiIpCisKK2lmIHN5cy5oZXh2ZXJzaW9uIDwgMHgwMjA2MDBGMDoKKyAgICBwcmludCgiU29ycnksIHB5dGhvbiAyLjYgb3IgbGF0ZXIgaXMgcmVxdWlyZWQuIikKKyAgICBzeXMuZXhpdCgxKQorCitjbGFzcyBIYW5kbGVyKFNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyKToKKyAgICBkZWYgX2Rpc3BhdGNoKHNlbGYsbWV0aG9kLHBhcmFtcyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlPXNlbGYuc2VydmVyLmZ1bmNzW21ldGhvZF0oKnBhcmFtcykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCisgICAgICAgICAgICByYWlzZQorICAgICAgICByZXR1cm4gdmFsdWUKKworUElEUFJFRklYID0gIi90bXAvUFJTZXJ2ZXJfJXNfJXMucGlkIgorc2luZ2xldG9uID0gTm9uZQorCisKK2NsYXNzIFBSU2VydmVyKFNpbXBsZVhNTFJQQ1NlcnZlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRiZmlsZSwgbG9nZmlsZSwgaW50ZXJmYWNlLCBkYWVtb249VHJ1ZSk6CisgICAgICAgICcnJyBjb25zdHJ1Y3RvciAnJycKKyAgICAgICAgaW1wb3J0IHNvY2tldAorICAgICAgICB0cnk6CisgICAgICAgICAgICBTaW1wbGVYTUxSUENTZXJ2ZXIuX19pbml0X18oc2VsZiwgaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ1JlcXVlc3RzPUZhbHNlLCBhbGxvd19ub25lPVRydWUpCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBpcD1zb2NrZXQuZ2V0aG9zdGJ5bmFtZShpbnRlcmZhY2VbMF0pCisgICAgICAgICAgICBwb3J0PWludGVyZmFjZVsxXQorICAgICAgICAgICAgbXNnPSJQUiBTZXJ2ZXIgdW5hYmxlIHRvIGJpbmQgdG8gJXM6JXNcbiIgJSAoaXAsIHBvcnQpCisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKG1zZykKKyAgICAgICAgICAgIHJhaXNlIFBSU2VydmljZUNvbmZpZ0Vycm9yCisKKyAgICAgICAgc2VsZi5kYmZpbGU9ZGJmaWxlCisgICAgICAgIHNlbGYuZGFlbW9uPWRhZW1vbgorICAgICAgICBzZWxmLmxvZ2ZpbGU9bG9nZmlsZQorICAgICAgICBzZWxmLndvcmtpbmdfdGhyZWFkPU5vbmUKKyAgICAgICAgc2VsZi5ob3N0LCBzZWxmLnBvcnQgPSBzZWxmLnNvY2tldC5nZXRzb2NrbmFtZSgpCisgICAgICAgIHNlbGYucGlkZmlsZT1QSURQUkVGSVggJSAoc2VsZi5ob3N0LCBzZWxmLnBvcnQpCisKKyAgICAgICAgc2VsZi5yZWdpc3Rlcl9mdW5jdGlvbihzZWxmLmdldFBSLCAiZ2V0UFIiKQorICAgICAgICBzZWxmLnJlZ2lzdGVyX2Z1bmN0aW9uKHNlbGYucXVpdCwgInF1aXQiKQorICAgICAgICBzZWxmLnJlZ2lzdGVyX2Z1bmN0aW9uKHNlbGYucGluZywgInBpbmciKQorICAgICAgICBzZWxmLnJlZ2lzdGVyX2Z1bmN0aW9uKHNlbGYuZXhwb3J0LCAiZXhwb3J0IikKKyAgICAgICAgc2VsZi5yZWdpc3Rlcl9mdW5jdGlvbihzZWxmLmltcG9ydG9uZSwgImltcG9ydG9uZSIpCisgICAgICAgIHNlbGYucmVnaXN0ZXJfaW50cm9zcGVjdGlvbl9mdW5jdGlvbnMoKQorCisgICAgICAgIHNlbGYuZGIgPSBwcnNlcnYuZGIuUFJEYXRhKHNlbGYuZGJmaWxlKQorICAgICAgICBzZWxmLnRhYmxlID0gc2VsZi5kYlsiUFJNQUlOIl0KKworICAgICAgICBzZWxmLnJlcXVlc3RxdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgc2VsZi5oYW5kbGVydGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQgPSBzZWxmLnByb2Nlc3NfcmVxdWVzdF90aHJlYWQpCisgICAgICAgIHNlbGYuaGFuZGxlcnRocmVhZC5kYWVtb24gPSBGYWxzZQorCisgICAgZGVmIHByb2Nlc3NfcmVxdWVzdF90aHJlYWQoc2VsZik6CisgICAgICAgICIiIlNhbWUgYXMgaW4gQmFzZVNlcnZlciBidXQgYXMgYSB0aHJlYWQuCisKKyAgICAgICAgSW4gYWRkaXRpb24sIGV4Y2VwdGlvbiBoYW5kbGluZyBpcyBkb25lIGhlcmUuCisKKyAgICAgICAgIiIiCisgICAgICAgIGl0ZXJfY291bnQgPSAxCisgICAgICAgICMgNjAgaXRlcmF0aW9ucyBiZXR3ZWVuIHN5bmNzIG9yIHN5bmMgaWYgZGlydHkgZXZlcnkgfjMwIHNlY29uZHMKKyAgICAgICAgaXRlcmF0aW9uc19iZXR3ZWVuX3N5bmMgPSA2MAorCisgICAgICAgIHdoaWxlIG5vdCBzZWxmLnF1aXQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgKHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKSA9IHNlbGYucmVxdWVzdHF1ZXVlLmdldChUcnVlLCAzMCkKKyAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKKyAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLnN5bmNfaWZfZGlydHkoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5maW5pc2hfcmVxdWVzdChyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcykKKyAgICAgICAgICAgICAgICBzZWxmLnNodXRkb3duX3JlcXVlc3QocmVxdWVzdCkKKyAgICAgICAgICAgICAgICBpdGVyX2NvdW50ID0gKGl0ZXJfY291bnQgKyAxKSAlIGl0ZXJhdGlvbnNfYmV0d2Vlbl9zeW5jCisgICAgICAgICAgICAgICAgaWYgaXRlcl9jb3VudCA9PSAwOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLnN5bmNfaWZfZGlydHkoKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Vycm9yKHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKQorICAgICAgICAgICAgICAgIHNlbGYuc2h1dGRvd25fcmVxdWVzdChyZXF1ZXN0KQorICAgICAgICAgICAgICAgIHNlbGYudGFibGUuc3luYygpCisgICAgICAgICAgICBzZWxmLnRhYmxlLnN5bmNfaWZfZGlydHkoKQorCisgICAgZGVmIHNpZ2ludF9oYW5kbGVyKHNlbGYsIHNpZ251bSwgc3RhY2spOgorICAgICAgICBzZWxmLnRhYmxlLnN5bmMoKQorCisgICAgZGVmIHNpZ3Rlcm1faGFuZGxlcihzZWxmLCBzaWdudW0sIHN0YWNrKToKKyAgICAgICAgc2VsZi50YWJsZS5zeW5jKCkKKyAgICAgICAgcmFpc2UgU3lzdGVtRXhpdAorCisgICAgZGVmIHByb2Nlc3NfcmVxdWVzdChzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcyk6CisgICAgICAgIHNlbGYucmVxdWVzdHF1ZXVlLnB1dCgocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpKQorCisgICAgZGVmIGV4cG9ydChzZWxmLCB2ZXJzaW9uPU5vbmUsIHBrZ2FyY2g9Tm9uZSwgY2hlY2tzdW09Tm9uZSwgY29saW5mbz1UcnVlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudGFibGUuZXhwb3J0KHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCBjb2xpbmZvKQorICAgICAgICBleGNlcHQgc3FsaXRlMy5FcnJvciBhcyBleGM6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGV4YykpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGltcG9ydG9uZShzZWxmLCB2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSwgdmFsdWUpOgorICAgICAgICByZXR1cm4gc2VsZi50YWJsZS5pbXBvcnRvbmUodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0sIHZhbHVlKQorCisgICAgZGVmIHBpbmcoc2VsZik6CisgICAgICAgIHJldHVybiBub3Qgc2VsZi5xdWl0CisKKyAgICBkZWYgZ2V0aW5mbyhzZWxmKToKKyAgICAgICAgcmV0dXJuIChzZWxmLmhvc3QsIHNlbGYucG9ydCkKKworICAgIGRlZiBnZXRQUihzZWxmLCB2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnRhYmxlLmdldFZhbHVlKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKQorICAgICAgICBleGNlcHQgcHJzZXJ2Lk5vdEZvdW5kRXJyb3I6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoImNhbiBub3QgZmluZCB2YWx1ZSBmb3IgKCVzLCAlcykiLHZlcnNpb24sIGNoZWNrc3VtKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZXhjZXB0IHNxbGl0ZTMuRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHN0cihleGMpKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBxdWl0KHNlbGYpOgorICAgICAgICBzZWxmLnF1aXQ9VHJ1ZQorICAgICAgICByZXR1cm4KKworICAgIGRlZiB3b3JrX2ZvcmV2ZXIoc2VsZiwpOgorICAgICAgICBzZWxmLnF1aXQgPSBGYWxzZQorICAgICAgICBzZWxmLnRpbWVvdXQgPSAwLjUKKworICAgICAgICBsb2dnZXIuaW5mbygiU3RhcnRlZCBQUlNlcnZlciB3aXRoIERCZmlsZTogJXMsIElQOiAlcywgUE9SVDogJXMsIFBJRDogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgIChzZWxmLmRiZmlsZSwgc2VsZi5ob3N0LCBzZWxmLnBvcnQsIHN0cihvcy5nZXRwaWQoKSkpKQorCisgICAgICAgIHNlbGYuaGFuZGxlcnRocmVhZC5zdGFydCgpCisgICAgICAgIHdoaWxlIG5vdCBzZWxmLnF1aXQ6CisgICAgICAgICAgICBzZWxmLmhhbmRsZV9yZXF1ZXN0KCkKKyAgICAgICAgc2VsZi5oYW5kbGVydGhyZWFkLmpvaW4oKQorICAgICAgICBzZWxmLnRhYmxlLnN5bmMoKQorICAgICAgICBsb2dnZXIuaW5mbygiUFJTZXJ2ZXI6IHN0b3BwaW5nLi4uIikKKyAgICAgICAgc2VsZi5zZXJ2ZXJfY2xvc2UoKQorICAgICAgICByZXR1cm4KKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kYWVtb246CisgICAgICAgICAgICBwaWQgPSBzZWxmLmRhZW1vbml6ZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwaWQgPSBzZWxmLmZvcmsoKQorCisgICAgICAgICMgRW5zdXJlIGJvdGggdGhlIHBhcmVudCBzZWVzIHRoaXMgYW5kIHRoZSBjaGlsZCBmcm9tIHRoZSB3b3JrX2ZvcmV2ZXIgbG9nIGVudHJ5IGFib3ZlCisgICAgICAgIGxvZ2dlci5pbmZvKCJTdGFydGVkIFBSU2VydmVyIHdpdGggREJmaWxlOiAlcywgSVA6ICVzLCBQT1JUOiAlcywgUElEOiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgKHNlbGYuZGJmaWxlLCBzZWxmLmhvc3QsIHNlbGYucG9ydCwgc3RyKHBpZCkpKQorCisgICAgZGVmIGRlbHBpZChzZWxmKToKKyAgICAgICAgb3MucmVtb3ZlKHNlbGYucGlkZmlsZSkKKworICAgIGRlZiBkYWVtb25pemUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTZWUgQWR2YW5jZWQgUHJvZ3JhbW1pbmcgaW4gdGhlIFVOSVgsIFNlYyAxMy4zCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICAgICAgICAgIGlmIHBpZCA+IDA6CisgICAgICAgICAgICAgICAgb3Mud2FpdHBpZChwaWQsIDApCisgICAgICAgICAgICAgICAgI3BhcmVudCByZXR1cm4gaW5zdGVhZCBvZiBleGl0IHRvIGdpdmUgY29udHJvbCAKKyAgICAgICAgICAgICAgICByZXR1cm4gcGlkCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIiVzIFslZF0iICUgKGUuc3RyZXJyb3IsIGUuZXJybm8pKQorCisgICAgICAgIG9zLnNldHNpZCgpCisgICAgICAgICIiIgorICAgICAgICBmb3JrIGFnYWluIHRvIG1ha2Ugc3VyZSB0aGUgZGFlbW9uIGlzIG5vdCBzZXNzaW9uIGxlYWRlciwgCisgICAgICAgIHdoaWNoIHByZXZlbnRzIGl0IGZyb20gYWNxdWlyaW5nIGNvbnRyb2xsaW5nIHRlcm1pbmFsCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICAgICAgICAgIGlmIHBpZCA+IDA6ICNwYXJlbnQKKyAgICAgICAgICAgICAgICBvcy5fZXhpdCgwKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCIlcyBbJWRdIiAlIChlLnN0cmVycm9yLCBlLmVycm5vKSkKKworICAgICAgICBzZWxmLmNsZWFudXBfaGFuZGxlcygpCisgICAgICAgIG9zLl9leGl0KDApCisKKyAgICBkZWYgZm9yayhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgICAgICBpZiBwaWQgPiAwOgorICAgICAgICAgICAgICAgIHJldHVybiBwaWQKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiJXMgWyVkXSIgJSAoZS5zdHJlcnJvciwgZS5lcnJubykpCisKKyAgICAgICAgYmIudXRpbHMuc2lnbmFsX29uX3BhcmVudF9leGl0KCJTSUdURVJNIikKKyAgICAgICAgc2VsZi5jbGVhbnVwX2hhbmRsZXMoKQorICAgICAgICBvcy5fZXhpdCgwKQorCisgICAgZGVmIGNsZWFudXBfaGFuZGxlcyhzZWxmKToKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBzZWxmLnNpZ2ludF9oYW5kbGVyKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJNLCBzZWxmLnNpZ3Rlcm1faGFuZGxlcikKKyAgICAgICAgb3MudW1hc2soMCkKKyAgICAgICAgb3MuY2hkaXIoIi8iKQorCisgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKyAgICAgICAgc2kgPSBmaWxlKCcvZGV2L251bGwnLCAncicpCisgICAgICAgIHNvID0gZmlsZShzZWxmLmxvZ2ZpbGUsICdhKycpCisgICAgICAgIHNlID0gc28KKyAgICAgICAgb3MuZHVwMihzaS5maWxlbm8oKSxzeXMuc3RkaW4uZmlsZW5vKCkpCisgICAgICAgIG9zLmR1cDIoc28uZmlsZW5vKCksc3lzLnN0ZG91dC5maWxlbm8oKSkKKyAgICAgICAgb3MuZHVwMihzZS5maWxlbm8oKSxzeXMuc3RkZXJyLmZpbGVubygpKQorCisgICAgICAgICMgQ2xlYXIgb3V0IGFsbCBsb2cgaGFuZGxlcnMgcHJpb3IgdG8gdGhlIGZvcmsoKSB0byBhdm9pZCBjYWxsaW5nCisgICAgICAgICMgZXZlbnQgaGFuZGxlcnMgbm90IHBhcnQgb2YgdGhlIFBSc2VydmVyCisgICAgICAgIGZvciBsb2dnZXJfaXRlciBpbiBsb2dnaW5nLkxvZ2dlci5tYW5hZ2VyLmxvZ2dlckRpY3Qua2V5cygpOgorICAgICAgICAgICAgbG9nZ2luZy5nZXRMb2dnZXIobG9nZ2VyX2l0ZXIpLmhhbmRsZXJzID0gW10KKworICAgICAgICAjIEVuc3VyZSBsb2dnaW5nIG1ha2VzIGl0IHRvIHRoZSBsb2dmaWxlCisgICAgICAgIHN0cmVhbWhhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQorICAgICAgICBzdHJlYW1oYW5kbGVyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisgICAgICAgIGZvcm1hdHRlciA9IGJiLm1zZy5CQkxvZ0Zvcm1hdHRlcigiJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiKQorICAgICAgICBzdHJlYW1oYW5kbGVyLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCisgICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKHN0cmVhbWhhbmRsZXIpCisKKyAgICAgICAgIyB3cml0ZSBwaWRmaWxlCisgICAgICAgIHBpZCA9IHN0cihvcy5nZXRwaWQoKSkgCisgICAgICAgIHBmID0gZmlsZShzZWxmLnBpZGZpbGUsICd3JykKKyAgICAgICAgcGYud3JpdGUoIiVzXG4iICUgcGlkKQorICAgICAgICBwZi5jbG9zZSgpCisKKyAgICAgICAgc2VsZi53b3JrX2ZvcmV2ZXIoKQorICAgICAgICBzZWxmLmRlbHBpZCgpCisKK2NsYXNzIFBSU2VydlNpbmdsZXRvbihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYmZpbGUsIGxvZ2ZpbGUsIGludGVyZmFjZSk6CisgICAgICAgIHNlbGYuZGJmaWxlID0gZGJmaWxlCisgICAgICAgIHNlbGYubG9nZmlsZSA9IGxvZ2ZpbGUKKyAgICAgICAgc2VsZi5pbnRlcmZhY2UgPSBpbnRlcmZhY2UKKyAgICAgICAgc2VsZi5ob3N0ID0gTm9uZQorICAgICAgICBzZWxmLnBvcnQgPSBOb25lCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIHNlbGYucHJzZXJ2ID0gUFJTZXJ2ZXIoc2VsZi5kYmZpbGUsIHNlbGYubG9nZmlsZSwgc2VsZi5pbnRlcmZhY2UsIGRhZW1vbj1GYWxzZSkKKyAgICAgICAgc2VsZi5wcnNlcnYuc3RhcnQoKQorICAgICAgICBzZWxmLmhvc3QsIHNlbGYucG9ydCA9IHNlbGYucHJzZXJ2LmdldGluZm8oKQorCisgICAgZGVmIGdldGluZm8oc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5ob3N0LCBzZWxmLnBvcnQpCisKK2NsYXNzIFBSU2VydmVyQ29ubmVjdGlvbihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0KToKKyAgICAgICAgaWYgaXNfbG9jYWxfc3BlY2lhbChob3N0LCBwb3J0KToKKyAgICAgICAgICAgIGhvc3QsIHBvcnQgPSBzaW5nbGV0b24uZ2V0aW5mbygpCisgICAgICAgIHNlbGYuaG9zdCA9IGhvc3QKKyAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLmNvbm5lY3Rpb24sIHNlbGYudHJhbnNwb3J0ID0gYmIuc2VydmVyLnhtbHJwYy5fY3JlYXRlX3NlcnZlcihzZWxmLmhvc3QsIHNlbGYucG9ydCkKKworICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJUZXJtaW5hdGluZyBQUlNlcnZlci4uLiIpCisgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24ucXVpdCgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiJXNcbiIgJSBzdHIoZXhjKSkKKworICAgIGRlZiBnZXRQUihzZWxmLCB2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSk6CisgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24uZ2V0UFIodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0pCisKKyAgICBkZWYgcGluZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbi5waW5nKCkKKworICAgIGRlZiBleHBvcnQoc2VsZix2ZXJzaW9uPU5vbmUsIHBrZ2FyY2g9Tm9uZSwgY2hlY2tzdW09Tm9uZSwgY29saW5mbz1UcnVlKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbi5leHBvcnQodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0sIGNvbGluZm8pCisKKyAgICBkZWYgaW1wb3J0b25lKHNlbGYsIHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCB2YWx1ZSk6CisgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24uaW1wb3J0b25lKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCB2YWx1ZSkKKworICAgIGRlZiBnZXRpbmZvKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5ob3N0LCBzZWxmLnBvcnQKKworZGVmIHN0YXJ0X2RhZW1vbihkYmZpbGUsIGhvc3QsIHBvcnQsIGxvZ2ZpbGUpOgorICAgIHBpZGZpbGUgPSBQSURQUkVGSVggJSAoaG9zdCwgcG9ydCkKKyAgICB0cnk6CisgICAgICAgIHBmID0gZmlsZShwaWRmaWxlLCdyJykKKyAgICAgICAgcGlkID0gaW50KHBmLnJlYWRsaW5lKCkuc3RyaXAoKSkKKyAgICAgICAgcGYuY2xvc2UoKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBwaWQgPSBOb25lCisKKyAgICBpZiBwaWQ6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInBpZGZpbGUgJXMgYWxyZWFkeSBleGlzdC4gRGFlbW9uIGFscmVhZHkgcnVubmluZz9cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHBpZGZpbGUpCisgICAgICAgIHJldHVybiAxCisKKyAgICBzZXJ2ZXIgPSBQUlNlcnZlcihvcy5wYXRoLmFic3BhdGgoZGJmaWxlKSwgb3MucGF0aC5hYnNwYXRoKGxvZ2ZpbGUpLCAoaG9zdCxwb3J0KSkKKyAgICBzZXJ2ZXIuc3RhcnQoKQorICAgIHJldHVybiAwCisKK2RlZiBzdG9wX2RhZW1vbihob3N0LCBwb3J0KToKKyAgICBwaWRmaWxlID0gUElEUFJFRklYICUgKGhvc3QsIHBvcnQpCisgICAgdHJ5OgorICAgICAgICBwZiA9IGZpbGUocGlkZmlsZSwncicpCisgICAgICAgIHBpZCA9IGludChwZi5yZWFkbGluZSgpLnN0cmlwKCkpCisgICAgICAgIHBmLmNsb3NlKCkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcGlkID0gTm9uZQorCisgICAgaWYgbm90IHBpZDoKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgicGlkZmlsZSAlcyBkb2VzIG5vdCBleGlzdC4gRGFlbW9uIG5vdCBydW5uaW5nP1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgJSBwaWRmaWxlKQorCisgICAgdHJ5OgorICAgICAgICBQUlNlcnZlckNvbm5lY3Rpb24oaG9zdCwgcG9ydCkudGVybWluYXRlKCkKKyAgICBleGNlcHQ6CisgICAgICAgIGxvZ2dlci5jcml0aWNhbCgiU3RvcCBQUlNlcnZpY2UgJXM6JWQgZmFpbGVkIiAlIChob3N0LHBvcnQpKQorCisgICAgdHJ5OgorICAgICAgICBpZiBwaWQ6CisgICAgICAgICAgICB3YWl0X3RpbWVvdXQgPSAwCisgICAgICAgICAgICBwcmludCgiV2FpdGluZyBmb3IgcHItc2VydmVyIHRvIGV4aXQuIikKKyAgICAgICAgICAgIHdoaWxlIGlzX3J1bm5pbmcocGlkKSBhbmQgd2FpdF90aW1lb3V0IDwgNTA6CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCisgICAgICAgICAgICAgICAgd2FpdF90aW1lb3V0ICs9IDEKKworICAgICAgICAgICAgaWYgaXNfcnVubmluZyhwaWQpOgorICAgICAgICAgICAgICAgIHByaW50KCJTZW5kaW5nIFNJR1RFUk0gdG8gcHItc2VydmVyLiIpCisgICAgICAgICAgICAgICAgb3Mua2lsbChwaWQsc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCisKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBpZGZpbGUpOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShwaWRmaWxlKQorCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgZXJyID0gc3RyKGUpCisgICAgICAgIGlmIGVyci5maW5kKCJObyBzdWNoIHByb2Nlc3MiKSA8PSAwOgorICAgICAgICAgICAgcmFpc2UgZQorCisgICAgcmV0dXJuIDAKKworZGVmIGlzX3J1bm5pbmcocGlkKToKKyAgICB0cnk6CisgICAgICAgIG9zLmtpbGwocGlkLCAwKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKKyAgICAgICAgaWYgZXJyLmVycm5vID09IGVycm5vLkVTUkNIOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIFRydWUKKworZGVmIGlzX2xvY2FsX3NwZWNpYWwoaG9zdCwgcG9ydCk6CisgICAgaWYgaG9zdC5zdHJpcCgpLnVwcGVyKCkgPT0gJ2xvY2FsaG9zdCcudXBwZXIoKSBhbmQgKG5vdCBwb3J0KToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gRmFsc2UKKworY2xhc3MgUFJTZXJ2aWNlQ29uZmlnRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2RlZiBhdXRvX3N0YXJ0KGQpOgorICAgIGdsb2JhbCBzaW5nbGV0b24KKworICAgIGhvc3RfcGFyYW1zID0gZmlsdGVyKE5vbmUsIChkLmdldFZhcignUFJTRVJWX0hPU1QnLCBUcnVlKSBvciAnJykuc3BsaXQoJzonKSkKKyAgICBpZiBub3QgaG9zdF9wYXJhbXM6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBpZiBsZW4oaG9zdF9wYXJhbXMpICE9IDI6CisgICAgICAgIGxvZ2dlci5jcml0aWNhbCgnXG4nLmpvaW4oWydQUlNFUlZfSE9TVDogaW5jb3JyZWN0IGZvcm1hdCcsCisgICAgICAgICAgICAgICAgJ1VzYWdlOiBQUlNFUlZfSE9TVCA9ICI8aG9zdG5hbWU+Ojxwb3J0PiInXSkpCisgICAgICAgIHJhaXNlIFBSU2VydmljZUNvbmZpZ0Vycm9yCisKKyAgICBpZiBpc19sb2NhbF9zcGVjaWFsKGhvc3RfcGFyYW1zWzBdLCBpbnQoaG9zdF9wYXJhbXNbMV0pKSBhbmQgbm90IHNpbmdsZXRvbjoKKyAgICAgICAgaW1wb3J0IGJiLnV0aWxzCisgICAgICAgIGNhY2hlZGlyID0gKGQuZ2V0VmFyKCJQRVJTSVNURU5UX0RJUiIsIFRydWUpIG9yIGQuZ2V0VmFyKCJDQUNIRSIsIFRydWUpKQorICAgICAgICBpZiBub3QgY2FjaGVkaXI6CisgICAgICAgICAgICBsb2dnZXIuY3JpdGljYWwoIlBsZWFzZSBzZXQgdGhlICdQRVJTSVNURU5UX0RJUicgb3IgJ0NBQ0hFJyB2YXJpYWJsZSIpCisgICAgICAgICAgICByYWlzZSBQUlNlcnZpY2VDb25maWdFcnJvcgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoY2FjaGVkaXIpCisgICAgICAgIGRiZmlsZSA9IG9zLnBhdGguam9pbihjYWNoZWRpciwgInByc2Vydi5zcWxpdGUzIikKKyAgICAgICAgbG9nZmlsZSA9IG9zLnBhdGguam9pbihjYWNoZWRpciwgInByc2Vydi5sb2ciKQorICAgICAgICBzaW5nbGV0b24gPSBQUlNlcnZTaW5nbGV0b24ob3MucGF0aC5hYnNwYXRoKGRiZmlsZSksIG9zLnBhdGguYWJzcGF0aChsb2dmaWxlKSwgKCJsb2NhbGhvc3QiLDApKQorICAgICAgICBzaW5nbGV0b24uc3RhcnQoKQorICAgIGlmIHNpbmdsZXRvbjoKKyAgICAgICAgaG9zdCwgcG9ydCA9IHNpbmdsZXRvbi5nZXRpbmZvKCkKKyAgICBlbHNlOgorICAgICAgICBob3N0ID0gaG9zdF9wYXJhbXNbMF0KKyAgICAgICAgcG9ydCA9IGludChob3N0X3BhcmFtc1sxXSkKKworICAgIHRyeToKKyAgICAgICAgY29ubmVjdGlvbiA9IFBSU2VydmVyQ29ubmVjdGlvbihob3N0LHBvcnQpCisgICAgICAgIGNvbm5lY3Rpb24ucGluZygpCisgICAgICAgIHJlYWxob3N0LCByZWFscG9ydCA9IGNvbm5lY3Rpb24uZ2V0aW5mbygpCisgICAgICAgIHJldHVybiBzdHIocmVhbGhvc3QpICsgIjoiICsgc3RyKHJlYWxwb3J0KQorICAgICAgICAKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICBsb2dnZXIuY3JpdGljYWwoIlBSc2VydmljZSAlczolZCBub3QgYXZhaWxhYmxlIiAlIChob3N0LCBwb3J0KSkKKyAgICAgICAgcmFpc2UgUFJTZXJ2aWNlQ29uZmlnRXJyb3IKKworZGVmIGF1dG9fc2h1dGRvd24oZD1Ob25lKToKKyAgICBnbG9iYWwgc2luZ2xldG9uCisgICAgaWYgc2luZ2xldG9uOgorICAgICAgICBob3N0LCBwb3J0ID0gc2luZ2xldG9uLmdldGluZm8oKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBQUlNlcnZlckNvbm5lY3Rpb24oaG9zdCwgcG9ydCkudGVybWluYXRlKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgbG9nZ2VyLmNyaXRpY2FsKCJTdG9wIFBSU2VydmljZSAlczolZCBmYWlsZWQiICUgKGhvc3QscG9ydCkpCisgICAgICAgIHNpbmdsZXRvbiA9IE5vbmUKKworZGVmIHBpbmcoaG9zdCwgcG9ydCk6CisgICAgY29ubj1QUlNlcnZlckNvbm5lY3Rpb24oaG9zdCwgcG9ydCkKKyAgICByZXR1cm4gY29ubi5waW5nKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHlpbm90aWZ5LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9weWlub3RpZnkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRhZTAwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHlpbm90aWZ5LnB5CkBAIC0wLDAgKzEsMjQxNiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgcHlpbm90aWZ5LnB5IC0gcHl0aG9uIGludGVyZmFjZSB0byBpbm90aWZ5CisjIENvcHlyaWdodCAoYykgMjAwNS0yMDE1IFNlYmFzdGllbiBNYXJ0aW5pIDxzZWJAZGJ6dGVhbS5vcmc+CisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisjIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyMgVEhFIFNPRlRXQVJFLgorIiIiCitweWlub3RpZnkKKworQGF1dGhvcjogU2ViYXN0aWVuIE1hcnRpbmkKK0BsaWNlbnNlOiBNSVQgTGljZW5zZQorQGNvbnRhY3Q6IHNlYkBkYnp0ZWFtLm9yZworIiIiCisKK2NsYXNzIFB5aW5vdGlmeUVycm9yKEV4Y2VwdGlvbik6CisgICAgIiIiSW5kaWNhdGVzIGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IGEgUHlpbm90aWZ5IGNsYXNzLiIiIgorICAgIHBhc3MKKworCitjbGFzcyBVbnN1cHBvcnRlZFB5dGhvblZlcnNpb25FcnJvcihQeWlub3RpZnlFcnJvcik6CisgICAgIiIiCisgICAgUmFpc2VkIG9uIHVuc3VwcG9ydGVkIFB5dGhvbiB2ZXJzaW9ucy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmVyc2lvbik6CisgICAgICAgICIiIgorICAgICAgICBAcGFyYW0gdmVyc2lvbjogQ3VycmVudCBQeXRob24gdmVyc2lvbgorICAgICAgICBAdHlwZSB2ZXJzaW9uOiBzdHJpbmcKKyAgICAgICAgIiIiCisgICAgICAgIGVyciA9ICdQeXRob24gJXMgaXMgdW5zdXBwb3J0ZWQsIHJlcXVpcmVzIGF0IGxlYXN0IFB5dGhvbiAyLjQnCisgICAgICAgIFB5aW5vdGlmeUVycm9yLl9faW5pdF9fKHNlbGYsIGVyciAlIHZlcnNpb24pCisKKworIyBDaGVjayBQeXRob24gdmVyc2lvbgoraW1wb3J0IHN5cworaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA0KToKKyAgICByYWlzZSBVbnN1cHBvcnRlZFB5dGhvblZlcnNpb25FcnJvcihzeXMudmVyc2lvbikKKworCisjIEltcG9ydCBkaXJlY3RpdmVzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBmY250bAoraW1wb3J0IGVycm5vCitpbXBvcnQgdGVybWlvcworaW1wb3J0IGFycmF5CitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGF0ZXhpdAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lLCB0aW1lZGVsdGEKK2ltcG9ydCB0aW1lCitpbXBvcnQgcmUKK2ltcG9ydCBhc3luY29yZQoraW1wb3J0IHN1YnByb2Nlc3MKKwordHJ5OgorICAgIGZyb20gZnVuY3Rvb2xzIGltcG9ydCByZWR1Y2UKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzICAjIFdpbGwgZmFpbCBvbiBQeXRob24gMi40IHdoaWNoIGhhcyByZWR1Y2UoKSBidWlsdGluIGFueXdheS4KKwordHJ5OgorICAgIGZyb20gZ2xvYiBpbXBvcnQgaWdsb2IgYXMgZ2xvYgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgICMgUHl0aG9uIDIuNCBkb2VzIG5vdCBoYXZlIGdsb2IuaWdsb2IoKS4KKyAgICBmcm9tIGdsb2IgaW1wb3J0IGdsb2IgYXMgZ2xvYgorCit0cnk6CisgICAgaW1wb3J0IGN0eXBlcworICAgIGltcG9ydCBjdHlwZXMudXRpbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGN0eXBlcyA9IE5vbmUKKwordHJ5OgorICAgIGltcG9ydCBpbm90aWZ5X3N5c2NhbGxzCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgaW5vdGlmeV9zeXNjYWxscyA9IE5vbmUKKworCitfX2F1dGhvcl9fID0gInNlYkBkYnp0ZWFtLm9yZyAoU2ViYXN0aWVuIE1hcnRpbmkpIgorCitfX3ZlcnNpb25fXyA9ICIwLjkuNSIKKworX19tZXRhY2xhc3NfXyA9IHR5cGUgICMgVXNlIG5ldy1zdHlsZSBjbGFzc2VzIGJ5IGRlZmF1bHQKKworCisjIENvbXBhdGliaXR5IG1vZGU6IHNldCB0byBUcnVlIHRvIGltcHJvdmUgY29tcGF0aWJpbGl0eSB3aXRoCisjIFB5aW5vdGlmeSAwLjcuMS4gRG8gbm90IHNldCB0aGlzIHZhcmlhYmxlIHlvdXJzZWxmLCBjYWxsIHRoZQorIyBmdW5jdGlvbiBjb21wYXRpYmlsaXR5X21vZGUoKSBpbnN0ZWFkLgorQ09NUEFUSUJJTElUWV9NT0RFID0gRmFsc2UKKworCitjbGFzcyBJbm90aWZ5QmluZGluZ05vdEZvdW5kRXJyb3IoUHlpbm90aWZ5RXJyb3IpOgorICAgICIiIgorICAgIFJhaXNlZCB3aGVuIG5vIGlub3RpZnkgc3VwcG9ydCBjb3VsZG4ndCBiZSBmb3VuZC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGVyciA9ICJDb3VsZG4ndCBmaW5kIGFueSBpbm90aWZ5IGJpbmRpbmciCisgICAgICAgIFB5aW5vdGlmeUVycm9yLl9faW5pdF9fKHNlbGYsIGVycikKKworCitjbGFzcyBJTm90aWZ5V3JhcHBlcjoKKyAgICAiIiIKKyAgICBBYnN0cmFjdCBjbGFzcyB3cmFwcGluZyBhY2Nlc3MgdG8gaW5vdGlmeSdzIGZ1bmN0aW9ucy4gVGhpcyBpcyBhbgorICAgIGludGVybmFsIGNsYXNzLgorICAgICIiIgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlKCk6CisgICAgICAgICMgRmlyc3QsIHRyeSB0byB1c2UgY3R5cGVzLgorICAgICAgICBpZiBjdHlwZXM6CisgICAgICAgICAgICBpbm90aWZ5ID0gX0N0eXBlc0xpYmNJTm90aWZ5V3JhcHBlcigpCisgICAgICAgICAgICBpZiBpbm90aWZ5LmluaXQoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5vdGlmeQorICAgICAgICAjIFNlY29uZCwgc2VlIGlmIEMgZXh0ZW5zaW9uIGlzIGNvbXBpbGVkLgorICAgICAgICBpZiBpbm90aWZ5X3N5c2NhbGxzOgorICAgICAgICAgICAgaW5vdGlmeSA9IF9JTm90aWZ5U3lzY2FsbHNXcmFwcGVyKCkKKyAgICAgICAgICAgIGlmIGlub3RpZnkuaW5pdCgpOgorICAgICAgICAgICAgICAgIHJldHVybiBpbm90aWZ5CisKKyAgICBkZWYgZ2V0X2Vycm5vKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIE5vbmUgaXMgbm8gZXJybm8gY29kZSBpcyBhdmFpbGFibGUuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2Vycm5vKCkKKworICAgIGRlZiBzdHJfZXJybm8oc2VsZik6CisgICAgICAgIGNvZGUgPSBzZWxmLmdldF9lcnJubygpCisgICAgICAgIGlmIGNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAnRXJybm86IG5vIGVycm5vIHN1cHBvcnQnCisgICAgICAgIHJldHVybiAnRXJybm89JXMgKCVzKScgJSAob3Muc3RyZXJyb3IoY29kZSksIGVycm5vLmVycm9yY29kZVtjb2RlXSkKKworICAgIGRlZiBpbm90aWZ5X2luaXQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9pbm90aWZ5X2luaXQoKQorCisgICAgZGVmIGlub3RpZnlfYWRkX3dhdGNoKHNlbGYsIGZkLCBwYXRobmFtZSwgbWFzayk6CisgICAgICAgICMgVW5pY29kZSBzdHJpbmdzIG11c3QgYmUgZW5jb2RlZCB0byBzdHJpbmcgcHJpb3IgdG8gY2FsbGluZyB0aGlzCisgICAgICAgICMgbWV0aG9kLgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShwYXRobmFtZSwgc3RyKQorICAgICAgICByZXR1cm4gc2VsZi5faW5vdGlmeV9hZGRfd2F0Y2goZmQsIHBhdGhuYW1lLCBtYXNrKQorCisgICAgZGVmIGlub3RpZnlfcm1fd2F0Y2goc2VsZiwgZmQsIHdkKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2lub3RpZnlfcm1fd2F0Y2goZmQsIHdkKQorCisKK2NsYXNzIF9JTm90aWZ5U3lzY2FsbHNXcmFwcGVyKElOb3RpZnlXcmFwcGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICMgU3RvcmVzIHRoZSBsYXN0IGVycm5vIHZhbHVlLgorICAgICAgICBzZWxmLl9sYXN0X2Vycm5vID0gTm9uZQorCisgICAgZGVmIGluaXQoc2VsZik6CisgICAgICAgIGFzc2VydCBpbm90aWZ5X3N5c2NhbGxzCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX2dldF9lcnJubyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xhc3RfZXJybm8KKworICAgIGRlZiBfaW5vdGlmeV9pbml0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmZCA9IGlub3RpZnlfc3lzY2FsbHMuaW5vdGlmeV9pbml0KCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3IsIGVycjoKKyAgICAgICAgICAgIHNlbGYuX2xhc3RfZXJybm8gPSBlcnIuZXJybm8KKyAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICByZXR1cm4gZmQKKworICAgIGRlZiBfaW5vdGlmeV9hZGRfd2F0Y2goc2VsZiwgZmQsIHBhdGhuYW1lLCBtYXNrKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2QgPSBpbm90aWZ5X3N5c2NhbGxzLmlub3RpZnlfYWRkX3dhdGNoKGZkLCBwYXRobmFtZSwgbWFzaykKKyAgICAgICAgZXhjZXB0IElPRXJyb3IsIGVycjoKKyAgICAgICAgICAgIHNlbGYuX2xhc3RfZXJybm8gPSBlcnIuZXJybm8KKyAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICByZXR1cm4gd2QKKworICAgIGRlZiBfaW5vdGlmeV9ybV93YXRjaChzZWxmLCBmZCwgd2QpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXQgPSBpbm90aWZ5X3N5c2NhbGxzLmlub3RpZnlfcm1fd2F0Y2goZmQsIHdkKQorICAgICAgICBleGNlcHQgSU9FcnJvciwgZXJyOgorICAgICAgICAgICAgc2VsZi5fbGFzdF9lcnJubyA9IGVyci5lcnJubworICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIHJldHVybiByZXQKKworCitjbGFzcyBfQ3R5cGVzTGliY0lOb3RpZnlXcmFwcGVyKElOb3RpZnlXcmFwcGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX2xpYmMgPSBOb25lCisgICAgICAgIHNlbGYuX2dldF9lcnJub19mdW5jID0gTm9uZQorCisgICAgZGVmIGluaXQoc2VsZik6CisgICAgICAgIGFzc2VydCBjdHlwZXMKKworICAgICAgICB0cnlfbGliY19uYW1lID0gJ2MnCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdmcmVlYnNkJyk6CisgICAgICAgICAgICB0cnlfbGliY19uYW1lID0gJ2lub3RpZnknCisKKyAgICAgICAgbGliY19uYW1lID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBsaWJjX25hbWUgPSBjdHlwZXMudXRpbC5maW5kX2xpYnJhcnkodHJ5X2xpYmNfbmFtZSkKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKToKKyAgICAgICAgICAgIHBhc3MgICMgV2lsbCBhdHRlbXAgdG8gbG9hZCBpdCB3aXRoIE5vbmUgYW55d2F5LgorCisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPj0gKDIsIDYpOgorICAgICAgICAgICAgc2VsZi5fbGliYyA9IGN0eXBlcy5DRExMKGxpYmNfbmFtZSwgdXNlX2Vycm5vPVRydWUpCisgICAgICAgICAgICBzZWxmLl9nZXRfZXJybm9fZnVuYyA9IGN0eXBlcy5nZXRfZXJybm8KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xpYmMgPSBjdHlwZXMuQ0RMTChsaWJjX25hbWUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbG9jYXRpb24gPSBzZWxmLl9saWJjLl9fZXJybm9fbG9jYXRpb24KKyAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZXN0eXBlID0gY3R5cGVzLlBPSU5URVIoY3R5cGVzLmNfaW50KQorICAgICAgICAgICAgICAgIHNlbGYuX2dldF9lcnJub19mdW5jID0gbGFtYmRhOiBsb2NhdGlvbigpLmNvbnRlbnRzLnZhbHVlCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgRXZlbnR1YWxseSBjaGVjayB0aGF0IGxpYmMgaGFzIG5lZWRlZCBpbm90aWZ5IGJpbmRpbmdzLgorICAgICAgICBpZiAobm90IGhhc2F0dHIoc2VsZi5fbGliYywgJ2lub3RpZnlfaW5pdCcpIG9yCisgICAgICAgICAgICBub3QgaGFzYXR0cihzZWxmLl9saWJjLCAnaW5vdGlmeV9hZGRfd2F0Y2gnKSBvcgorICAgICAgICAgICAgbm90IGhhc2F0dHIoc2VsZi5fbGliYywgJ2lub3RpZnlfcm1fd2F0Y2gnKSk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBzZWxmLl9saWJjLmlub3RpZnlfaW5pdC5hcmd0eXBlcyA9IFtdCisgICAgICAgIHNlbGYuX2xpYmMuaW5vdGlmeV9pbml0LnJlc3R5cGUgPSBjdHlwZXMuY19pbnQKKyAgICAgICAgc2VsZi5fbGliYy5pbm90aWZ5X2FkZF93YXRjaC5hcmd0eXBlcyA9IFtjdHlwZXMuY19pbnQsIGN0eXBlcy5jX2NoYXJfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191aW50MzJdCisgICAgICAgIHNlbGYuX2xpYmMuaW5vdGlmeV9hZGRfd2F0Y2gucmVzdHlwZSA9IGN0eXBlcy5jX2ludAorICAgICAgICBzZWxmLl9saWJjLmlub3RpZnlfcm1fd2F0Y2guYXJndHlwZXMgPSBbY3R5cGVzLmNfaW50LCBjdHlwZXMuY19pbnRdCisgICAgICAgIHNlbGYuX2xpYmMuaW5vdGlmeV9ybV93YXRjaC5yZXN0eXBlID0gY3R5cGVzLmNfaW50CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX2dldF9lcnJubyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZ2V0X2Vycm5vX2Z1bmMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2Vycm5vX2Z1bmMoKQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9pbm90aWZ5X2luaXQoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLl9saWJjIGlzIG5vdCBOb25lCisgICAgICAgIHJldHVybiBzZWxmLl9saWJjLmlub3RpZnlfaW5pdCgpCisKKyAgICBkZWYgX2lub3RpZnlfYWRkX3dhdGNoKHNlbGYsIGZkLCBwYXRobmFtZSwgbWFzayk6CisgICAgICAgIGFzc2VydCBzZWxmLl9saWJjIGlzIG5vdCBOb25lCisgICAgICAgIHBhdGhuYW1lID0gY3R5cGVzLmNyZWF0ZV9zdHJpbmdfYnVmZmVyKHBhdGhuYW1lKQorICAgICAgICByZXR1cm4gc2VsZi5fbGliYy5pbm90aWZ5X2FkZF93YXRjaChmZCwgcGF0aG5hbWUsIG1hc2spCisKKyAgICBkZWYgX2lub3RpZnlfcm1fd2F0Y2goc2VsZiwgZmQsIHdkKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX2xpYmMgaXMgbm90IE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xpYmMuaW5vdGlmeV9ybV93YXRjaChmZCwgd2QpCisKKyAgICBkZWYgX3N5c2N0bChzZWxmLCAqYXJncyk6CisgICAgICAgIGFzc2VydCBzZWxmLl9saWJjIGlzIG5vdCBOb25lCisgICAgICAgIHJldHVybiBzZWxmLl9saWJjLnN5c2N0bCgqYXJncykKKworCisjIExvZ2dpbmcKK2RlZiBsb2dnZXJfaW5pdCgpOgorICAgICIiIkluaXRpYWxpemUgbG9nZ2VyIGluc3RhbmNlLiIiIgorICAgIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJweWlub3RpZnkiKQorICAgIGNvbnNvbGVfaGFuZGxlciA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCisgICAgY29uc29sZV9oYW5kbGVyLnNldEZvcm1hdHRlcigKKyAgICAgICAgbG9nZ2luZy5Gb3JtYXR0ZXIoIlslKGFzY3RpbWUpcyAlKG5hbWUpcyAlKGxldmVsbmFtZSlzXSAlKG1lc3NhZ2UpcyIpKQorICAgIGxvZy5hZGRIYW5kbGVyKGNvbnNvbGVfaGFuZGxlcikKKyAgICBsb2cuc2V0TGV2ZWwoMjApCisgICAgcmV0dXJuIGxvZworCitsb2cgPSBsb2dnZXJfaW5pdCgpCisKKworIyBpbm90aWZ5J3MgdmFyaWFibGVzCitjbGFzcyBTeXNDdGxJTm90aWZ5OgorICAgICIiIgorICAgIEFjY2VzcyAocmVhZCwgd3JpdGUpIGlub3RpZnkncyB2YXJpYWJsZXMgdGhyb3VnaCBzeXNjdGwuIFVzdWFsbHkgaXQKKyAgICByZXF1aXJlcyBhZG1pbmlzdHJhdG9yIHJpZ2h0cyB0byB1cGRhdGUgdGhlbS4KKworICAgIEV4YW1wbGVzOgorICAgICAgLSBSZWFkIG1heF9xdWV1ZWRfZXZlbnRzIGF0dHJpYnV0ZTogbXl2YXIgPSBtYXhfcXVldWVkX2V2ZW50cy52YWx1ZQorICAgICAgLSBVcGRhdGUgbWF4X3F1ZXVlZF9ldmVudHMgYXR0cmlidXRlOiBtYXhfcXVldWVkX2V2ZW50cy52YWx1ZSA9IDQyCisgICAgIiIiCisKKyAgICBpbm90aWZ5X2F0dHJzID0geydtYXhfdXNlcl9pbnN0YW5jZXMnOiAxLAorICAgICAgICAgICAgICAgICAgICAgJ21heF91c2VyX3dhdGNoZXMnOiAyLAorICAgICAgICAgICAgICAgICAgICAgJ21heF9xdWV1ZWRfZXZlbnRzJzogM30KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhdHRybmFtZSwgaW5vdGlmeV93cmFwcGVyKToKKyAgICAgICAgIyBGSVhNRTogcmlnaHQgbm93IG9ubHkgc3VwcG9ydGluZyBjdHlwZXMKKyAgICAgICAgYXNzZXJ0IGN0eXBlcworICAgICAgICBzZWxmLl9hdHRybmFtZSA9IGF0dHJuYW1lCisgICAgICAgIHNlbGYuX2lub3RpZnlfd3JhcHBlciA9IGlub3RpZnlfd3JhcHBlcgorICAgICAgICBzaW5vID0gY3R5cGVzLmNfaW50ICogMworICAgICAgICBzZWxmLl9hdHRyID0gc2lubyg1LCAyMCwgU3lzQ3RsSU5vdGlmeS5pbm90aWZ5X2F0dHJzW2F0dHJuYW1lXSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlKGF0dHJuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIEZhY3RvcnkgbWV0aG9kIGluc3RhbmNpYXRpbmcgYW5kIHJldHVybmluZyB0aGUgcmlnaHQgd3JhcHBlci4KKyAgICAgICAgIiIiCisgICAgICAgICMgRklYTUU6IHJpZ2h0IG5vdyBvbmx5IHN1cHBvcnRpbmcgY3R5cGVzCisgICAgICAgIGlmIGN0eXBlcyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaW5vdGlmeV93cmFwcGVyID0gX0N0eXBlc0xpYmNJTm90aWZ5V3JhcHBlcigpCisgICAgICAgIGlmIG5vdCBpbm90aWZ5X3dyYXBwZXIuaW5pdCgpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIFN5c0N0bElOb3RpZnkoYXR0cm5hbWUsIGlub3RpZnlfd3JhcHBlcikKKworICAgIGRlZiBnZXRfdmFsKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgR2V0cyBhdHRyaWJ1dGUncyB2YWx1ZS4gUmFpc2VzIE9TRXJyb3IgaWYgdGhlIG9wZXJhdGlvbiBmYWlsZWQuCisKKyAgICAgICAgQHJldHVybjogc3RvcmVkIHZhbHVlLgorICAgICAgICBAcnR5cGU6IGludAorICAgICAgICAiIiIKKyAgICAgICAgb2xkdiA9IGN0eXBlcy5jX2ludCgwKQorICAgICAgICBzaXplID0gY3R5cGVzLmNfaW50KGN0eXBlcy5zaXplb2Yob2xkdikpCisgICAgICAgIHN5c2N0bCA9IHNlbGYuX2lub3RpZnlfd3JhcHBlci5fc3lzY3RsCisgICAgICAgIHJlcyA9IHN5c2N0bChzZWxmLl9hdHRyLCAzLAorICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdm9pZHAoY3R5cGVzLmFkZHJlc3NvZihvbGR2KSksCisgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuYWRkcmVzc29mKHNpemUpLAorICAgICAgICAgICAgICAgICAgICAgTm9uZSwgMCkKKyAgICAgICAgaWYgcmVzID09IC0xOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihzZWxmLl9pbm90aWZ5X3dyYXBwZXIuZ2V0X2Vycm5vKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lub3RpZnlfd3JhcHBlci5zdHJfZXJybm8oKSkKKyAgICAgICAgcmV0dXJuIG9sZHYudmFsdWUKKworICAgIGRlZiBzZXRfdmFsKHNlbGYsIG52YWwpOgorICAgICAgICAiIiIKKyAgICAgICAgU2V0cyBuZXcgYXR0cmlidXRlJ3MgdmFsdWUuIFJhaXNlcyBPU0Vycm9yIGlmIHRoZSBvcGVyYXRpb24gZmFpbGVkLgorCisgICAgICAgIEBwYXJhbSBudmFsOiByZXBsYWNlcyBjdXJyZW50IHZhbHVlIGJ5IG52YWwuCisgICAgICAgIEB0eXBlIG52YWw6IGludAorICAgICAgICAiIiIKKyAgICAgICAgb2xkdiA9IGN0eXBlcy5jX2ludCgwKQorICAgICAgICBzaXplbyA9IGN0eXBlcy5jX2ludChjdHlwZXMuc2l6ZW9mKG9sZHYpKQorICAgICAgICBuZXd2ID0gY3R5cGVzLmNfaW50KG52YWwpCisgICAgICAgIHNpemVuID0gY3R5cGVzLmNfaW50KGN0eXBlcy5zaXplb2YobmV3dikpCisgICAgICAgIHN5c2N0bCA9IHNlbGYuX2lub3RpZnlfd3JhcHBlci5fc3lzY3RsCisgICAgICAgIHJlcyA9IHN5c2N0bChzZWxmLl9hdHRyLCAzLAorICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdm9pZHAoY3R5cGVzLmFkZHJlc3NvZihvbGR2KSksCisgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuYWRkcmVzc29mKHNpemVvKSwKKyAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3ZvaWRwKGN0eXBlcy5hZGRyZXNzb2YobmV3dikpLAorICAgICAgICAgICAgICAgICAgICAgc2l6ZW4pCisgICAgICAgIGlmIHJlcyA9PSAtMToKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3Ioc2VsZi5faW5vdGlmeV93cmFwcGVyLmdldF9lcnJubygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbm90aWZ5X3dyYXBwZXIuc3RyX2Vycm5vKCkpCisKKyAgICB2YWx1ZSA9IHByb3BlcnR5KGdldF92YWwsIHNldF92YWwpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPCVzPSVkPicgJSAoc2VsZi5fYXR0cm5hbWUsIHNlbGYuZ2V0X3ZhbCgpKQorCisKKyMgSW5vdGlmeSdzIHZhcmlhYmxlcworIworIyBGSVhNRTogY3VycmVudGx5IHRoZXNlIHZhcmlhYmxlcyBhcmUgb25seSBhY2Nlc3NpYmxlIHdoZW4gY3R5cGVzIGlzIHVzZWQsCisjICAgICAgICBvdGhlcndpc2UgdGhlcmUgYXJlIHNldCB0byBOb25lLgorIworIyByZWFkOiBteXZhciA9IG1heF9xdWV1ZWRfZXZlbnRzLnZhbHVlCisjIHVwZGF0ZTogbWF4X3F1ZXVlZF9ldmVudHMudmFsdWUgPSA0MgorIworZm9yIGF0dHJuYW1lIGluICgnbWF4X3F1ZXVlZF9ldmVudHMnLCAnbWF4X3VzZXJfaW5zdGFuY2VzJywgJ21heF91c2VyX3dhdGNoZXMnKToKKyAgICBnbG9iYWxzKClbYXR0cm5hbWVdID0gU3lzQ3RsSU5vdGlmeS5jcmVhdGUoYXR0cm5hbWUpCisKKworY2xhc3MgRXZlbnRzQ29kZXM6CisgICAgIiIiCisgICAgU2V0IG9mIGNvZGVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBraW5kIG9mIGV2ZW50cy4KKyAgICBTb21lIG9mIHRoZXNlIGZsYWdzIGFyZSB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggaW5vdGlmeSwgd2hlcmVhcworICAgIHRoZSBvdGhlcnMgYXJlIHNlbnQgdG8gdXNlcnNwYWNlIGJ5IGlub3RpZnkgbm90aWZ5aW5nIHNvbWUgZXZlbnRzLgorCisgICAgQGN2YXIgSU5fQUNDRVNTOiBGaWxlIHdhcyBhY2Nlc3NlZC4KKyAgICBAdHlwZSBJTl9BQ0NFU1M6IGludAorICAgIEBjdmFyIElOX01PRElGWTogRmlsZSB3YXMgbW9kaWZpZWQuCisgICAgQHR5cGUgSU5fTU9ESUZZOiBpbnQKKyAgICBAY3ZhciBJTl9BVFRSSUI6IE1ldGFkYXRhIGNoYW5nZWQuCisgICAgQHR5cGUgSU5fQVRUUklCOiBpbnQKKyAgICBAY3ZhciBJTl9DTE9TRV9XUklURTogV3JpdHRhYmxlIGZpbGUgd2FzIGNsb3NlZC4KKyAgICBAdHlwZSBJTl9DTE9TRV9XUklURTogaW50CisgICAgQGN2YXIgSU5fQ0xPU0VfTk9XUklURTogVW53cml0dGFibGUgZmlsZSBjbG9zZWQuCisgICAgQHR5cGUgSU5fQ0xPU0VfTk9XUklURTogaW50CisgICAgQGN2YXIgSU5fT1BFTjogRmlsZSB3YXMgb3BlbmVkLgorICAgIEB0eXBlIElOX09QRU46IGludAorICAgIEBjdmFyIElOX01PVkVEX0ZST006IEZpbGUgd2FzIG1vdmVkIGZyb20gWC4KKyAgICBAdHlwZSBJTl9NT1ZFRF9GUk9NOiBpbnQKKyAgICBAY3ZhciBJTl9NT1ZFRF9UTzogRmlsZSB3YXMgbW92ZWQgdG8gWS4KKyAgICBAdHlwZSBJTl9NT1ZFRF9UTzogaW50CisgICAgQGN2YXIgSU5fQ1JFQVRFOiBTdWJmaWxlIHdhcyBjcmVhdGVkLgorICAgIEB0eXBlIElOX0NSRUFURTogaW50CisgICAgQGN2YXIgSU5fREVMRVRFOiBTdWJmaWxlIHdhcyBkZWxldGVkLgorICAgIEB0eXBlIElOX0RFTEVURTogaW50CisgICAgQGN2YXIgSU5fREVMRVRFX1NFTEY6IFNlbGYgKHdhdGNoZWQgaXRlbSBpdHNlbGYpIHdhcyBkZWxldGVkLgorICAgIEB0eXBlIElOX0RFTEVURV9TRUxGOiBpbnQKKyAgICBAY3ZhciBJTl9NT1ZFX1NFTEY6IFNlbGYgKHdhdGNoZWQgaXRlbSBpdHNlbGYpIHdhcyBtb3ZlZC4KKyAgICBAdHlwZSBJTl9NT1ZFX1NFTEY6IGludAorICAgIEBjdmFyIElOX1VOTU9VTlQ6IEJhY2tpbmcgZnMgd2FzIHVubW91bnRlZC4KKyAgICBAdHlwZSBJTl9VTk1PVU5UOiBpbnQKKyAgICBAY3ZhciBJTl9RX09WRVJGTE9XOiBFdmVudCBxdWV1ZWQgb3ZlcmZsb3dlZC4KKyAgICBAdHlwZSBJTl9RX09WRVJGTE9XOiBpbnQKKyAgICBAY3ZhciBJTl9JR05PUkVEOiBGaWxlIHdhcyBpZ25vcmVkLgorICAgIEB0eXBlIElOX0lHTk9SRUQ6IGludAorICAgIEBjdmFyIElOX09OTFlESVI6IG9ubHkgd2F0Y2ggdGhlIHBhdGggaWYgaXQgaXMgYSBkaXJlY3RvcnkgKG5ldworICAgICAgICAgICAgICAgICAgICAgIGluIGtlcm5lbCAyLjYuMTUpLgorICAgIEB0eXBlIElOX09OTFlESVI6IGludAorICAgIEBjdmFyIElOX0RPTlRfRk9MTE9XOiBkb24ndCBmb2xsb3cgYSBzeW1saW5rIChuZXcgaW4ga2VybmVsIDIuNi4xNSkuCisgICAgICAgICAgICAgICAgICAgICAgICAgIElOX09OTFlESVIgd2UgY2FuIG1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0IHdhdGNoCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQgb2Ygc3ltbGlua3MuCisgICAgQHR5cGUgSU5fRE9OVF9GT0xMT1c6IGludAorICAgIEBjdmFyIElOX0VYQ0xfVU5MSU5LOiBFdmVudHMgYXJlIG5vdCBnZW5lcmF0ZWQgZm9yIGNoaWxkcmVuIGFmdGVyIHRoZXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSBiZWVuIHVubGlua2VkIGZyb20gdGhlIHdhdGNoZWQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3IGluIGtlcm5lbCAyLjYuMzYpLgorICAgIEB0eXBlIElOX0VYQ0xfVU5MSU5LOiBpbnQKKyAgICBAY3ZhciBJTl9NQVNLX0FERDogYWRkIHRvIHRoZSBtYXNrIG9mIGFuIGFscmVhZHkgZXhpc3Rpbmcgd2F0Y2ggKG5ldworICAgICAgICAgICAgICAgICAgICAgICBpbiBrZXJuZWwgMi42LjE0KS4KKyAgICBAdHlwZSBJTl9NQVNLX0FERDogaW50CisgICAgQGN2YXIgSU5fSVNESVI6IEV2ZW50IG9jY3VycmVkIGFnYWluc3QgZGlyLgorICAgIEB0eXBlIElOX0lTRElSOiBpbnQKKyAgICBAY3ZhciBJTl9PTkVTSE9UOiBPbmx5IHNlbmQgZXZlbnQgb25jZS4KKyAgICBAdHlwZSBJTl9PTkVTSE9UOiBpbnQKKyAgICBAY3ZhciBBTExfRVZFTlRTOiBBbGlhcyBmb3IgY29uc2lkZXJpbmcgYWxsIG9mIHRoZSBldmVudHMuCisgICAgQHR5cGUgQUxMX0VWRU5UUzogaW50CisgICAgIiIiCisKKyAgICAjIFRoZSBpZGVhIGhlcmUgaXMgJ2NvbmZpZ3VyYXRpb24tYXMtY29kZScgLSB0aGlzIHdheSwgd2UgZ2V0IG91ciBuaWNlIGNsYXNzCisgICAgIyBjb25zdGFudHMsIGJ1dCB3ZSBhbHNvIGdldCBuaWNlIGh1bWFuLWZyaWVuZGx5IHRleHQgbWFwcGluZ3MgdG8gZG8gbG9va3VwcworICAgICMgYWdhaW5zdCBhcyB3ZWxsLCBmb3IgZnJlZToKKyAgICBGTEFHX0NPTExFQ1RJT05TID0geydPUF9GTEFHUyc6IHsKKyAgICAgICAgJ0lOX0FDQ0VTUycgICAgICAgIDogMHgwMDAwMDAwMSwgICMgRmlsZSB3YXMgYWNjZXNzZWQKKyAgICAgICAgJ0lOX01PRElGWScgICAgICAgIDogMHgwMDAwMDAwMiwgICMgRmlsZSB3YXMgbW9kaWZpZWQKKyAgICAgICAgJ0lOX0FUVFJJQicgICAgICAgIDogMHgwMDAwMDAwNCwgICMgTWV0YWRhdGEgY2hhbmdlZAorICAgICAgICAnSU5fQ0xPU0VfV1JJVEUnICAgOiAweDAwMDAwMDA4LCAgIyBXcml0YWJsZSBmaWxlIHdhcyBjbG9zZWQKKyAgICAgICAgJ0lOX0NMT1NFX05PV1JJVEUnIDogMHgwMDAwMDAxMCwgICMgVW53cml0YWJsZSBmaWxlIGNsb3NlZAorICAgICAgICAnSU5fT1BFTicgICAgICAgICAgOiAweDAwMDAwMDIwLCAgIyBGaWxlIHdhcyBvcGVuZWQKKyAgICAgICAgJ0lOX01PVkVEX0ZST00nICAgIDogMHgwMDAwMDA0MCwgICMgRmlsZSB3YXMgbW92ZWQgZnJvbSBYCisgICAgICAgICdJTl9NT1ZFRF9UTycgICAgICA6IDB4MDAwMDAwODAsICAjIEZpbGUgd2FzIG1vdmVkIHRvIFkKKyAgICAgICAgJ0lOX0NSRUFURScgICAgICAgIDogMHgwMDAwMDEwMCwgICMgU3ViZmlsZSB3YXMgY3JlYXRlZAorICAgICAgICAnSU5fREVMRVRFJyAgICAgICAgOiAweDAwMDAwMjAwLCAgIyBTdWJmaWxlIHdhcyBkZWxldGVkCisgICAgICAgICdJTl9ERUxFVEVfU0VMRicgICA6IDB4MDAwMDA0MDAsICAjIFNlbGYgKHdhdGNoZWQgaXRlbSBpdHNlbGYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdhcyBkZWxldGVkCisgICAgICAgICdJTl9NT1ZFX1NFTEYnICAgICA6IDB4MDAwMDA4MDAsICAjIFNlbGYgKHdhdGNoZWQgaXRlbSBpdHNlbGYpIHdhcyBtb3ZlZAorICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgJ0VWRU5UX0ZMQUdTJzogeworICAgICAgICAnSU5fVU5NT1VOVCcgICAgICAgOiAweDAwMDAyMDAwLCAgIyBCYWNraW5nIGZzIHdhcyB1bm1vdW50ZWQKKyAgICAgICAgJ0lOX1FfT1ZFUkZMT1cnICAgIDogMHgwMDAwNDAwMCwgICMgRXZlbnQgcXVldWVkIG92ZXJmbG93ZWQKKyAgICAgICAgJ0lOX0lHTk9SRUQnICAgICAgIDogMHgwMDAwODAwMCwgICMgRmlsZSB3YXMgaWdub3JlZAorICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgJ1NQRUNJQUxfRkxBR1MnOiB7CisgICAgICAgICdJTl9PTkxZRElSJyAgICAgICA6IDB4MDEwMDAwMDAsICAjIG9ubHkgd2F0Y2ggdGhlIHBhdGggaWYgaXQgaXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkaXJlY3RvcnkKKyAgICAgICAgJ0lOX0RPTlRfRk9MTE9XJyAgIDogMHgwMjAwMDAwMCwgICMgZG9uJ3QgZm9sbG93IGEgc3ltbGluaworICAgICAgICAnSU5fRVhDTF9VTkxJTksnICAgOiAweDA0MDAwMDAwLCAgIyBleGNsdWRlIGV2ZW50cyBvbiB1bmxpbmtlZCBvYmplY3RzCisgICAgICAgICdJTl9NQVNLX0FERCcgICAgICA6IDB4MjAwMDAwMDAsICAjIGFkZCB0byB0aGUgbWFzayBvZiBhbiBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGV4aXN0aW5nIHdhdGNoCisgICAgICAgICdJTl9JU0RJUicgICAgICAgICA6IDB4NDAwMDAwMDAsICAjIGV2ZW50IG9jY3VycmVkIGFnYWluc3QgZGlyCisgICAgICAgICdJTl9PTkVTSE9UJyAgICAgICA6IDB4ODAwMDAwMDAsICAjIG9ubHkgc2VuZCBldmVudCBvbmNlCisgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICBkZWYgbWFza25hbWUobWFzayk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIHRoZSBldmVudCBuYW1lIGFzc29jaWF0ZWQgdG8gbWFzay4gSU5fSVNESVIgaXMgYXBwZW5kZWQgdG8KKyAgICAgICAgdGhlIHJlc3VsdCB3aGVuIGFwcHJvcHJpYXRlLiBOb3RlOiBvbmx5IG9uZSBldmVudCBpcyByZXR1cm5lZCwgYmVjYXVzZQorICAgICAgICBvbmx5IG9uZSBldmVudCBjYW4gYmUgcmFpc2VkIGF0IGEgZ2l2ZW4gdGltZS4KKworICAgICAgICBAcGFyYW0gbWFzazogbWFzay4KKyAgICAgICAgQHR5cGUgbWFzazogaW50CisgICAgICAgIEByZXR1cm46IGV2ZW50IG5hbWUuCisgICAgICAgIEBydHlwZTogc3RyCisgICAgICAgICIiIgorICAgICAgICBtcyA9IG1hc2sKKyAgICAgICAgbmFtZSA9ICclcycKKyAgICAgICAgaWYgbWFzayAmIElOX0lTRElSOgorICAgICAgICAgICAgbXMgPSBtYXNrIC0gSU5fSVNESVIKKyAgICAgICAgICAgIG5hbWUgPSAnJXN8SU5fSVNESVInCisgICAgICAgIHJldHVybiBuYW1lICUgRXZlbnRzQ29kZXMuQUxMX1ZBTFVFU1ttc10KKworICAgIG1hc2tuYW1lID0gc3RhdGljbWV0aG9kKG1hc2tuYW1lKQorCisKKyMgU28gbGV0J3Mgbm93IHR1cm4gdGhlIGNvbmZpZ3VyYXRpb24gaW50byBjb2RlCitFdmVudHNDb2Rlcy5BTExfRkxBR1MgPSB7fQorRXZlbnRzQ29kZXMuQUxMX1ZBTFVFUyA9IHt9Citmb3IgZmxhZ2MsIHZhbGMgaW4gRXZlbnRzQ29kZXMuRkxBR19DT0xMRUNUSU9OUy5pdGVtcygpOgorICAgICMgTWFrZSB0aGUgY29sbGVjdGlvbnMnIG1lbWJlcnMgZGlyZWN0bHkgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZQorICAgICMgY2xhc3MgZGljdGlvbmFyeQorICAgIHNldGF0dHIoRXZlbnRzQ29kZXMsIGZsYWdjLCB2YWxjKQorCisgICAgIyBDb2xsZWN0IGFsbCB0aGUgZmxhZ3MgdW5kZXIgYSBjb21tb24gdW1icmVsbGEKKyAgICBFdmVudHNDb2Rlcy5BTExfRkxBR1MudXBkYXRlKHZhbGMpCisKKyAgICAjIE1ha2UgdGhlIGluZGl2aWR1YWwgbWFza3MgYWNjZXNzaWJsZSBhcyAnY29uc3RhbnRzJyBhdCBnbG9iYWxzKCkgc2NvcGUKKyAgICAjIGFuZCBtYXNrbmFtZXMgYWNjZXNzaWJsZSBieSB2YWx1ZXMuCisgICAgZm9yIG5hbWUsIHZhbCBpbiB2YWxjLml0ZW1zKCk6CisgICAgICAgIGdsb2JhbHMoKVtuYW1lXSA9IHZhbAorICAgICAgICBFdmVudHNDb2Rlcy5BTExfVkFMVUVTW3ZhbF0gPSBuYW1lCisKKworIyBhbGwgJ25vcm1hbCcgZXZlbnRzCitBTExfRVZFTlRTID0gcmVkdWNlKGxhbWJkYSB4LCB5OiB4IHwgeSwgRXZlbnRzQ29kZXMuT1BfRkxBR1MudmFsdWVzKCkpCitFdmVudHNDb2Rlcy5BTExfRkxBR1NbJ0FMTF9FVkVOVFMnXSA9IEFMTF9FVkVOVFMKK0V2ZW50c0NvZGVzLkFMTF9WQUxVRVNbQUxMX0VWRU5UU10gPSAnQUxMX0VWRU5UUycKKworCitjbGFzcyBfRXZlbnQ6CisgICAgIiIiCisgICAgRXZlbnQgc3RydWN0dXJlLCByZXByZXNlbnQgZXZlbnRzIHJhaXNlZCBieSB0aGUgc3lzdGVtLiBUaGlzCisgICAgaXMgdGhlIGJhc2UgY2xhc3MgYW5kIHNob3VsZCBiZSBzdWJjbGFzc2VkLgorCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpY3RfKToKKyAgICAgICAgIiIiCisgICAgICAgIEF0dGFjaCBhdHRyaWJ1dGVzIChjb250YWluZWQgaW4gZGljdF8pIHRvIHNlbGYuCisKKyAgICAgICAgQHBhcmFtIGRpY3RfOiBTZXQgb2YgYXR0cmlidXRlcy4KKyAgICAgICAgQHR5cGUgZGljdF86IGRpY3Rpb25hcnkKKyAgICAgICAgIiIiCisgICAgICAgIGZvciB0cGwgaW4gZGljdF8uaXRlbXMoKToKKyAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgKnRwbCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEByZXR1cm46IEdlbmVyaWMgZXZlbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgorICAgICAgICBAcnR5cGU6IHN0cgorICAgICAgICAiIiIKKyAgICAgICAgcyA9ICcnCisgICAgICAgIGZvciBhdHRyLCB2YWx1ZSBpbiBzb3J0ZWQoc2VsZi5fX2RpY3RfXy5pdGVtcygpLCBrZXk9bGFtYmRhIHg6IHhbMF0pOgorICAgICAgICAgICAgaWYgYXR0ci5zdGFydHN3aXRoKCdfJyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGF0dHIgPT0gJ21hc2snOgorICAgICAgICAgICAgICAgIHZhbHVlID0gaGV4KGdldGF0dHIoc2VsZiwgYXR0cikpCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpIGFuZCBub3QgdmFsdWU6CisgICAgICAgICAgICAgICAgdmFsdWUgPSAiJyciCisgICAgICAgICAgICBzICs9ICcgJXMlcyVzJyAlIChvdXRwdXRfZm9ybWF0LmZpZWxkX25hbWUoYXR0ciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZm9ybWF0LnB1bmN0dWF0aW9uKCc9JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZm9ybWF0LmZpZWxkX3ZhbHVlKHZhbHVlKSkKKworICAgICAgICBzID0gJyVzJXMlcyAlcycgJSAob3V0cHV0X2Zvcm1hdC5wdW5jdHVhdGlvbignPCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2Zvcm1hdC5jbGFzc19uYW1lKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZm9ybWF0LnB1bmN0dWF0aW9uKCc+JykpCisgICAgICAgIHJldHVybiBzCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHJlcHIoc2VsZikKKworCitjbGFzcyBfUmF3RXZlbnQoX0V2ZW50KToKKyAgICAiIiIKKyAgICBSYXcgZXZlbnQsIGl0IGNvbnRhaW5zIG9ubHkgdGhlIGluZm9ybWF0aW9ucyBwcm92aWRlZCBieSB0aGUgc3lzdGVtLgorICAgIEl0IGRvZXNuJ3QgaW5mZXIgYW55dGhpbmcuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdkLCBtYXNrLCBjb29raWUsIG5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgQHBhcmFtIHdkOiBXYXRjaCBEZXNjcmlwdG9yLgorICAgICAgICBAdHlwZSB3ZDogaW50CisgICAgICAgIEBwYXJhbSBtYXNrOiBCaXRtYXNrIG9mIGV2ZW50cy4KKyAgICAgICAgQHR5cGUgbWFzazogaW50CisgICAgICAgIEBwYXJhbSBjb29raWU6IENvb2tpZS4KKyAgICAgICAgQHR5cGUgY29va2llOiBpbnQKKyAgICAgICAgQHBhcmFtIG5hbWU6IEJhc2VuYW1lIG9mIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSBhZ2FpbnN0IHdoaWNoIHRoZQorICAgICAgICAgICAgICAgICAgICAgZXZlbnQgd2FzIHJhaXNlZCBpbiBjYXNlIHdoZXJlIHRoZSB3YXRjaGVkIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgaXMgdGhlIHBhcmVudCBkaXJlY3RvcnkuIE5vbmUgaWYgdGhlIGV2ZW50IHdhcyByYWlzZWQKKyAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSB3YXRjaGVkIGl0ZW0gaXRzZWxmLgorICAgICAgICBAdHlwZSBuYW1lOiBzdHJpbmcgb3IgTm9uZQorICAgICAgICAiIiIKKyAgICAgICAgIyBVc2UgdGhpcyB2YXJpYWJsZSB0byBjYWNoZSB0aGUgcmVzdWx0IG9mIHN0cihzZWxmKSwgdGhpcyBvYmplY3QKKyAgICAgICAgIyBpcyBpbW11dGFibGUuCisgICAgICAgIHNlbGYuX3N0ciA9IE5vbmUKKyAgICAgICAgIyBuYW1lOiByZW1vdmUgdHJhaWxpbmcgJ1wwJworICAgICAgICBkID0geyd3ZCc6IHdkLAorICAgICAgICAgICAgICdtYXNrJzogbWFzaywKKyAgICAgICAgICAgICAnY29va2llJzogY29va2llLAorICAgICAgICAgICAgICduYW1lJzogbmFtZS5yc3RyaXAoJ1wwJyl9CisgICAgICAgIF9FdmVudC5fX2luaXRfXyhzZWxmLCBkKQorICAgICAgICBsb2cuZGVidWcoc3RyKHNlbGYpKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3N0ciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fc3RyID0gX0V2ZW50Ll9fc3RyX18oc2VsZikKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N0cgorCisKK2NsYXNzIEV2ZW50KF9FdmVudCk6CisgICAgIiIiCisgICAgVGhpcyBjbGFzcyBjb250YWlucyBhbGwgdGhlIHVzZWZ1bCBpbmZvcm1hdGlvbnMgYWJvdXQgdGhlIG9ic2VydmVkCisgICAgZXZlbnQuIEhvd2V2ZXIsIHRoZSBwcmVzZW5jZSBvZiBlYWNoIGZpZWxkIGlzIG5vdCBndWFyYW50ZWVkIGFuZAorICAgIGRlcGVuZHMgb24gdGhlIHR5cGUgb2YgZXZlbnQuIEluIGVmZmVjdCwgc29tZSBmaWVsZHMgYXJlIGlycmVsZXZhbnQKKyAgICBmb3Igc29tZSBraW5kIG9mIGV2ZW50IChmb3IgZXhhbXBsZSAnY29va2llJyBpcyBtZWFuaW5nbGVzcyBmb3IKKyAgICBJTl9DUkVBVEUgd2hlcmVhcyBpdCBpcyBtYW5kYXRvcnkgZm9yIElOX01PVkVfVE8pLgorCisgICAgVGhlIHBvc3NpYmxlIGZpZWxkcyBhcmU6CisgICAgICAtIHdkIChpbnQpOiBXYXRjaCBEZXNjcmlwdG9yLgorICAgICAgLSBtYXNrIChpbnQpOiBNYXNrLgorICAgICAgLSBtYXNrbmFtZSAoc3RyKTogUmVhZGFibGUgZXZlbnQgbmFtZS4KKyAgICAgIC0gcGF0aCAoc3RyKTogcGF0aCBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkgYmVpbmcgd2F0Y2hlZC4KKyAgICAgIC0gbmFtZSAoc3RyKTogQmFzZW5hbWUgb2YgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IGFnYWluc3Qgd2hpY2ggdGhlCisgICAgICAgICAgICAgIGV2ZW50IHdhcyByYWlzZWQgaW4gY2FzZSB3aGVyZSB0aGUgd2F0Y2hlZCBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgaXMgdGhlIHBhcmVudCBkaXJlY3RvcnkuIE5vbmUgaWYgdGhlIGV2ZW50IHdhcyByYWlzZWQKKyAgICAgICAgICAgICAgb24gdGhlIHdhdGNoZWQgaXRlbSBpdHNlbGYuIFRoaXMgZmllbGQgaXMgYWx3YXlzIHByb3ZpZGVkCisgICAgICAgICAgICAgIGV2ZW4gaWYgdGhlIHN0cmluZyBpcyAnJy4KKyAgICAgIC0gcGF0aG5hbWUgKHN0cik6IENvbmNhdGVuYXRpb24gb2YgJ3BhdGgnIGFuZCAnbmFtZScuCisgICAgICAtIHNyY19wYXRobmFtZSAoc3RyKTogT25seSBwcmVzZW50IGZvciBJTl9NT1ZFRF9UTyBldmVudHMgYW5kIG9ubHkgaW4KKyAgICAgICAgICAgICAgdGhlIGNhc2Ugd2hlcmUgSU5fTU9WRURfRlJPTSBldmVudHMgYXJlIHdhdGNoZWQgdG9vLiBIb2xkcyB0aGUKKyAgICAgICAgICAgICAgc291cmNlIHBhdGhuYW1lIGZyb20gd2hlcmUgcGF0aG5hbWUgd2FzIG1vdmVkIGZyb20uCisgICAgICAtIGNvb2tpZSAoaW50KTogQ29va2llLgorICAgICAgLSBkaXIgKGJvb2wpOiBUcnVlIGlmIHRoZSBldmVudCB3YXMgcmFpc2VkIGFnYWluc3QgYSBkaXJlY3RvcnkuCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmF3KToKKyAgICAgICAgIiIiCisgICAgICAgIENvbmNyZXRlbHksIHRoaXMgaXMgdGhlIHJhdyBldmVudCBwbHVzIGluZmVycmVkIGluZm9zLgorICAgICAgICAiIiIKKyAgICAgICAgX0V2ZW50Ll9faW5pdF9fKHNlbGYsIHJhdykKKyAgICAgICAgc2VsZi5tYXNrbmFtZSA9IEV2ZW50c0NvZGVzLm1hc2tuYW1lKHNlbGYubWFzaykKKyAgICAgICAgaWYgQ09NUEFUSUJJTElUWV9NT0RFOgorICAgICAgICAgICAgc2VsZi5ldmVudF9uYW1lID0gc2VsZi5tYXNrbmFtZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzZWxmLm5hbWU6CisgICAgICAgICAgICAgICAgc2VsZi5wYXRobmFtZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oc2VsZi5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmFtZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucGF0aG5hbWUgPSBvcy5wYXRoLmFic3BhdGgoc2VsZi5wYXRoKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGVycjoKKyAgICAgICAgICAgICMgVXN1YWxseSBpdCBpcyBub3QgYW4gZXJyb3Igc29tZSBldmVudHMgYXJlIHBlcmZlY3RseSB2YWxpZHMKKyAgICAgICAgICAgICMgZGVzcGl0ZSB0aGUgbGFjayBvZiB0aGVzZSBhdHRyaWJ1dGVzLgorICAgICAgICAgICAgbG9nLmRlYnVnKGVycikKKworCitjbGFzcyBQcm9jZXNzRXZlbnRFcnJvcihQeWlub3RpZnlFcnJvcik6CisgICAgIiIiCisgICAgUHJvY2Vzc0V2ZW50RXJyb3IgRXhjZXB0aW9uLiBSYWlzZWQgb24gUHJvY2Vzc0V2ZW50IGVycm9yLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlcnIpOgorICAgICAgICAiIiIKKyAgICAgICAgQHBhcmFtIGVycjogRXhjZXB0aW9uIGVycm9yIGRlc2NyaXB0aW9uLgorICAgICAgICBAdHlwZSBlcnI6IHN0cmluZworICAgICAgICAiIiIKKyAgICAgICAgUHlpbm90aWZ5RXJyb3IuX19pbml0X18oc2VsZiwgZXJyKQorCisKK2NsYXNzIF9Qcm9jZXNzRXZlbnQ6CisgICAgIiIiCisgICAgQWJzdHJhY3QgcHJvY2Vzc2luZyBldmVudCBjbGFzcy4KKyAgICAiIiIKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgZXZlbnQpOgorICAgICAgICAiIiIKKyAgICAgICAgVG8gYmVoYXZlIGxpa2UgYSBmdW5jdG9yIHRoZSBvYmplY3QgbXVzdCBiZSBjYWxsYWJsZS4KKyAgICAgICAgVGhpcyBtZXRob2QgaXMgYSBkaXNwYXRjaCBtZXRob2QuIEl0cyBsb29rdXAgb3JkZXIgaXM6CisgICAgICAgICAgMS4gcHJvY2Vzc19NQVNLTkFNRSBtZXRob2QKKyAgICAgICAgICAyLiBwcm9jZXNzX0ZBTUlMWV9OQU1FIG1ldGhvZAorICAgICAgICAgIDMuIG90aGVyd2lzZSBjYWxscyBwcm9jZXNzX2RlZmF1bHQKKworICAgICAgICBAcGFyYW0gZXZlbnQ6IEV2ZW50IHRvIGJlIHByb2Nlc3NlZC4KKyAgICAgICAgQHR5cGUgZXZlbnQ6IEV2ZW50IG9iamVjdAorICAgICAgICBAcmV0dXJuOiBCeSBjb252ZW50aW9uIHdoZW4gdXNlZCBmcm9tIHRoZSBQcm9jZXNzRXZlbnQgY2xhc3M6CisgICAgICAgICAgICAgICAgIC0gUmV0dXJuaW5nIEZhbHNlIG9yIE5vbmUgKGRlZmF1bHQgdmFsdWUpIG1lYW5zIGtlZXAgb24KKyAgICAgICAgICAgICAgICAgZXhlY3V0aW5nIG5leHQgY2hhaW5lZCBmdW5jdG9ycyAoc2VlIGNoYWluLnB5IGV4YW1wbGUpLgorICAgICAgICAgICAgICAgICAtIFJldHVybmluZyBUcnVlIGluc3RlYWQgbWVhbnMgZG8gbm90IGV4ZWN1dGUgbmV4dAorICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmcgZnVuY3Rpb25zLgorICAgICAgICBAcnR5cGU6IGJvb2wKKyAgICAgICAgQHJhaXNlIFByb2Nlc3NFdmVudEVycm9yOiBFdmVudCBvYmplY3QgdW5kaXNwYXRjaGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93biBldmVudC4KKyAgICAgICAgIiIiCisgICAgICAgIHN0cmlwcGVkX21hc2sgPSBldmVudC5tYXNrIC0gKGV2ZW50Lm1hc2sgJiBJTl9JU0RJUikKKyAgICAgICAgbWFza25hbWUgPSBFdmVudHNDb2Rlcy5BTExfVkFMVUVTLmdldChzdHJpcHBlZF9tYXNrKQorICAgICAgICBpZiBtYXNrbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgUHJvY2Vzc0V2ZW50RXJyb3IoIlVua25vd24gbWFzayAweCUwOHgiICUgc3RyaXBwZWRfbWFzaykKKworICAgICAgICAjIDEtIGxvb2sgZm9yIHByb2Nlc3NfTUFTS05BTUUKKyAgICAgICAgbWV0aCA9IGdldGF0dHIoc2VsZiwgJ3Byb2Nlc3NfJyArIG1hc2tuYW1lLCBOb25lKQorICAgICAgICBpZiBtZXRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIG1ldGgoZXZlbnQpCisgICAgICAgICMgMi0gbG9vayBmb3IgcHJvY2Vzc19GQU1JTFlfTkFNRQorICAgICAgICBtZXRoID0gZ2V0YXR0cihzZWxmLCAncHJvY2Vzc19JTl8nICsgbWFza25hbWUuc3BsaXQoJ18nKVsxXSwgTm9uZSkKKyAgICAgICAgaWYgbWV0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBtZXRoKGV2ZW50KQorICAgICAgICAjIDMtIGRlZmF1bHQgY2FsbCBtZXRob2QgcHJvY2Vzc19kZWZhdWx0CisgICAgICAgIHJldHVybiBzZWxmLnByb2Nlc3NfZGVmYXVsdChldmVudCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8JXM+JyAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisKKworY2xhc3MgX1N5c1Byb2Nlc3NFdmVudChfUHJvY2Vzc0V2ZW50KToKKyAgICAiIiIKKyAgICBUaGVyZSBpcyB0aHJlZSBraW5kIG9mIHByb2Nlc3NpbmcgYWNjb3JkaW5nIHRvIGVhY2ggZXZlbnQ6CisKKyAgICAgIDEuIHNwZWNpYWwgaGFuZGxpbmcgKGRlbGV0aW9uIGZyb20gaW50ZXJuYWwgY29udGFpbmVyLCBidWcsIC4uLikuCisgICAgICAyLiBkZWZhdWx0IHRyZWF0bWVudDogd2hpY2ggaXMgYXBwbGllZCB0byB0aGUgbWFqb3JpdHkgb2YgZXZlbnRzLgorICAgICAgMy4gSU5fSVNESVIgaXMgbmV2ZXIgc2VudCBhbG9uZSwgaGUgaXMgcGlnZ3liYWNrZWQgd2l0aCBhIHN0YW5kYXJkCisgICAgICAgICBldmVudCwgaGUgaXMgbm90IHByb2Nlc3NlZCBhcyB0aGUgb3RoZXJzIGV2ZW50cywgaW5zdGVhZCwgaXRzCisgICAgICAgICB2YWx1ZSBpcyBjYXB0dXJlZCBhbmQgYXBwcm9wcmlhdGVseSBhZ2dyZWdhdGVkIHRvIGRzdCBldmVudC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd20sIG5vdGlmaWVyKToKKyAgICAgICAgIiIiCisKKyAgICAgICAgQHBhcmFtIHdtOiBXYXRjaCBNYW5hZ2VyLgorICAgICAgICBAdHlwZSB3bTogV2F0Y2hNYW5hZ2VyIGluc3RhbmNlCisgICAgICAgIEBwYXJhbSBub3RpZmllcjogTm90aWZpZXIuCisgICAgICAgIEB0eXBlIG5vdGlmaWVyOiBOb3RpZmllciBpbnN0YW5jZQorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fd2F0Y2hfbWFuYWdlciA9IHdtICAjIHdhdGNoIG1hbmFnZXIKKyAgICAgICAgc2VsZi5fbm90aWZpZXIgPSBub3RpZmllciAgIyBub3RpZmllcgorICAgICAgICBzZWxmLl9tdl9jb29raWUgPSB7fSAgIyB7Y29va2llKGludCk6IChzcmNfcGF0aChzdHIpLCBkYXRlKSwgLi4ufQorICAgICAgICBzZWxmLl9tdiA9IHt9ICAjIHtzcmNfcGF0aChzdHIpOiAoZHN0X3BhdGgoc3RyKSwgZGF0ZSksIC4uLn0KKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2xlYW51cCAoZGVsZXRlKSBvbGQgKD4xbW4pIHJlY29yZHMgY29udGFpbmVkIGluIHNlbGYuX212X2Nvb2tpZQorICAgICAgICBhbmQgc2VsZi5fbXYuCisgICAgICAgICIiIgorICAgICAgICBkYXRlX2N1cl8gPSBkYXRldGltZS5ub3coKQorICAgICAgICBmb3Igc2VxIGluIFtzZWxmLl9tdl9jb29raWUsIHNlbGYuX212XToKKyAgICAgICAgICAgIGZvciBrIGluIHNlcS5rZXlzKCk6CisgICAgICAgICAgICAgICAgaWYgKGRhdGVfY3VyXyAtIHNlcVtrXVsxXSkgPiB0aW1lZGVsdGEobWludXRlcz0xKToKKyAgICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCdDbGVhbnVwOiBkZWxldGluZyBlbnRyeSAlcycsIHNlcVtrXVswXSkKKyAgICAgICAgICAgICAgICAgICAgZGVsIHNlcVtrXQorCisgICAgZGVmIHByb2Nlc3NfSU5fQ1JFQVRFKHNlbGYsIHJhd19ldmVudCk6CisgICAgICAgICIiIgorICAgICAgICBJZiB0aGUgZXZlbnQgYWZmZWN0cyBhIGRpcmVjdG9yeSBhbmQgdGhlIGF1dG9fYWRkIGZsYWcgb2YgdGhlCisgICAgICAgIHRhcmdldHRlZCB3YXRjaCBpcyBzZXQgdG8gVHJ1ZSwgYSBuZXcgd2F0Y2ggaXMgYWRkZWQgb24gdGhpcworICAgICAgICBuZXcgZGlyZWN0b3J5LCB3aXRoIHRoZSBzYW1lIGF0dHJpYnV0ZSB2YWx1ZXMgdGhhbiB0aG9zZSBvZgorICAgICAgICB0aGlzIHdhdGNoLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgcmF3X2V2ZW50Lm1hc2sgJiBJTl9JU0RJUjoKKyAgICAgICAgICAgIHdhdGNoXyA9IHNlbGYuX3dhdGNoX21hbmFnZXIuZ2V0X3dhdGNoKHJhd19ldmVudC53ZCkKKyAgICAgICAgICAgIGNyZWF0ZWRfZGlyID0gb3MucGF0aC5qb2luKHdhdGNoXy5wYXRoLCByYXdfZXZlbnQubmFtZSkKKyAgICAgICAgICAgIGlmIHdhdGNoXy5hdXRvX2FkZCBhbmQgbm90IHdhdGNoXy5leGNsdWRlX2ZpbHRlcihjcmVhdGVkX2Rpcik6CisgICAgICAgICAgICAgICAgYWRkdyA9IHNlbGYuX3dhdGNoX21hbmFnZXIuYWRkX3dhdGNoCisgICAgICAgICAgICAgICAgIyBUaGUgbmV3bHkgbW9uaXRvcmVkIGRpcmVjdG9yeSBpbmhlcml0cyBhdHRyaWJ1dGVzIGZyb20gaXRzCisgICAgICAgICAgICAgICAgIyBwYXJlbnQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIGFkZHdfcmV0ID0gYWRkdyhjcmVhdGVkX2Rpciwgd2F0Y2hfLm1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2NfZnVuPXdhdGNoXy5wcm9jX2Z1biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjPUZhbHNlLCBhdXRvX2FkZD13YXRjaF8uYXV0b19hZGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVfZmlsdGVyPXdhdGNoXy5leGNsdWRlX2ZpbHRlcikKKworICAgICAgICAgICAgICAgICMgVHJpY2sgdG8gaGFuZGxlIG1rZGlyIC1wIC9kMS9kMi90MyB3aGVyZSBkMSBpcyB3YXRjaGVkIGFuZAorICAgICAgICAgICAgICAgICMgZDIgYW5kIHQzIChkaXJlY3Rvcnkgb3IgZmlsZSkgYXJlIGNyZWF0ZWQuCisgICAgICAgICAgICAgICAgIyBTaW5jZSB0aGUgZGlyZWN0b3J5IGQyIGlzIG5ldywgdGhlbiBldmVyeXRoaW5nIGluc2lkZSBpdCBtdXN0CisgICAgICAgICAgICAgICAgIyBhbHNvIGJlIG5ldy4KKyAgICAgICAgICAgICAgICBjcmVhdGVkX2Rpcl93ZCA9IGFkZHdfcmV0LmdldChjcmVhdGVkX2RpcikKKyAgICAgICAgICAgICAgICBpZiAoKGNyZWF0ZWRfZGlyX3dkIGlzIG5vdCBOb25lKSBhbmQgKGNyZWF0ZWRfZGlyX3dkID4gMCkgYW5kCisgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguaXNkaXIoY3JlYXRlZF9kaXIpKToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gb3MubGlzdGRpcihjcmVhdGVkX2Rpcik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXIgPSBvcy5wYXRoLmpvaW4oY3JlYXRlZF9kaXIsIG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fd2F0Y2hfbWFuYWdlci5nZXRfd2QoaW5uZXIpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR2VuZXJhdGUgKHNpbXVsYXRlKSBjcmVhdGlvbiBldmVudHMgZm9yIHN1Yi0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRpcmVjdG9yaWVzIGFuZCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShpbm5lcik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3ltbGlua3MgYXJlIGhhbmRsZWQgYXMgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gSU5fQ1JFQVRFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKGlubmVyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBJTl9DUkVBVEUgfCBJTl9JU0RJUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBwYXRoIHNob3VsZCBub3QgYmUgdGFrZW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3ZXZlbnQgPSBfUmF3RXZlbnQoY3JlYXRlZF9kaXJfd2QsIGZsYWdzLCAwLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX25vdGlmaWVyLmFwcGVuZF9ldmVudChyYXdldmVudCkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJwcm9jZXNzX0lOX0NSRUFURSwgaW52YWxpZCBkaXJlY3RvcnkgJXM6ICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKG1zZyAlIChjcmVhdGVkX2Rpciwgc3RyKGVycikpKQorICAgICAgICByZXR1cm4gc2VsZi5wcm9jZXNzX2RlZmF1bHQocmF3X2V2ZW50KQorCisgICAgZGVmIHByb2Nlc3NfSU5fTU9WRURfRlJPTShzZWxmLCByYXdfZXZlbnQpOgorICAgICAgICAiIiIKKyAgICAgICAgTWFwIHRoZSBjb29raWUgd2l0aCB0aGUgc291cmNlIHBhdGggKCsgZGF0ZSBmb3IgY2xlYW5pbmcpLgorICAgICAgICAiIiIKKyAgICAgICAgd2F0Y2hfID0gc2VsZi5fd2F0Y2hfbWFuYWdlci5nZXRfd2F0Y2gocmF3X2V2ZW50LndkKQorICAgICAgICBwYXRoXyA9IHdhdGNoXy5wYXRoCisgICAgICAgIHNyY19wYXRoID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4ocGF0aF8sIHJhd19ldmVudC5uYW1lKSkKKyAgICAgICAgc2VsZi5fbXZfY29va2llW3Jhd19ldmVudC5jb29raWVdID0gKHNyY19wYXRoLCBkYXRldGltZS5ub3coKSkKKyAgICAgICAgcmV0dXJuIHNlbGYucHJvY2Vzc19kZWZhdWx0KHJhd19ldmVudCwgeydjb29raWUnOiByYXdfZXZlbnQuY29va2llfSkKKworICAgIGRlZiBwcm9jZXNzX0lOX01PVkVEX1RPKHNlbGYsIHJhd19ldmVudCk6CisgICAgICAgICIiIgorICAgICAgICBNYXAgdGhlIHNvdXJjZSBwYXRoIHdpdGggdGhlIGRlc3RpbmF0aW9uIHBhdGggKCsgZGF0ZSBmb3IKKyAgICAgICAgY2xlYW5pbmcpLgorICAgICAgICAiIiIKKyAgICAgICAgd2F0Y2hfID0gc2VsZi5fd2F0Y2hfbWFuYWdlci5nZXRfd2F0Y2gocmF3X2V2ZW50LndkKQorICAgICAgICBwYXRoXyA9IHdhdGNoXy5wYXRoCisgICAgICAgIGRzdF9wYXRoID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4ocGF0aF8sIHJhd19ldmVudC5uYW1lKSkKKyAgICAgICAgbXZfID0gc2VsZi5fbXZfY29va2llLmdldChyYXdfZXZlbnQuY29va2llKQorICAgICAgICB0b19hcHBlbmQgPSB7J2Nvb2tpZSc6IHJhd19ldmVudC5jb29raWV9CisgICAgICAgIGlmIG12XyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX212W212X1swXV0gPSAoZHN0X3BhdGgsIGRhdGV0aW1lLm5vdygpKQorICAgICAgICAgICAgIyBMZXQncyBhc3N1bWUgdGhhdCBJTl9NT1ZFRF9GUk9NIGV2ZW50IGlzIGFsd2F5cyBxdWV1ZWQgYmVmb3JlCisgICAgICAgICAgICAjIHRoYXQgaXRzIGFzc29jaWF0ZWQgKHRoZXkgc2hhcmUgYSBjb21tb24gY29va2llKSBJTl9NT1ZFRF9UTworICAgICAgICAgICAgIyBldmVudCBpcyBxdWV1ZWQgaXRzZWxmLiBJdCBpcyB0aGVuIHBvc3NpYmxlIGluIHRoYXQgc2NlbmFyaW8KKyAgICAgICAgICAgICMgdG8gcHJvdmlkZSBhcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRvIHRoZSBJTl9NT1ZFRF9UTyBldmVudAorICAgICAgICAgICAgIyB0aGUgb3JpZ2luYWwgcGF0aG5hbWUgb2YgdGhlIG1vdmVkIGZpbGUvZGlyZWN0b3J5LgorICAgICAgICAgICAgdG9fYXBwZW5kWydzcmNfcGF0aG5hbWUnXSA9IG12X1swXQorICAgICAgICBlbGlmIChyYXdfZXZlbnQubWFzayAmIElOX0lTRElSIGFuZCB3YXRjaF8uYXV0b19hZGQgYW5kCisgICAgICAgICAgICAgIG5vdCB3YXRjaF8uZXhjbHVkZV9maWx0ZXIoZHN0X3BhdGgpKToKKyAgICAgICAgICAgICMgV2UgZ290IGEgZGlyZXRvcnkgdGhhdCdzICJtb3ZlZCBpbiIgZnJvbSBhbiB1bmtub3duIHNvdXJjZSBhbmQKKyAgICAgICAgICAgICMgYXV0b19hZGQgaXMgZW5hYmxlZC4gTWFudWFsbHkgYWRkIHdhdGNoZXMgdG8gdGhlIGlubmVyIHN1YnRyZWVzLgorICAgICAgICAgICAgIyBUaGUgbmV3bHkgbW9uaXRvcmVkIGRpcmVjdG9yeSBpbmhlcml0cyBhdHRyaWJ1dGVzIGZyb20gaXRzCisgICAgICAgICAgICAjIHBhcmVudCBkaXJlY3RvcnkuCisgICAgICAgICAgICBzZWxmLl93YXRjaF9tYW5hZ2VyLmFkZF93YXRjaChkc3RfcGF0aCwgd2F0Y2hfLm1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jX2Z1bj13YXRjaF8ucHJvY19mdW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWM9VHJ1ZSwgYXV0b19hZGQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVfZmlsdGVyPXdhdGNoXy5leGNsdWRlX2ZpbHRlcikKKyAgICAgICAgcmV0dXJuIHNlbGYucHJvY2Vzc19kZWZhdWx0KHJhd19ldmVudCwgdG9fYXBwZW5kKQorCisgICAgZGVmIHByb2Nlc3NfSU5fTU9WRV9TRUxGKHNlbGYsIHJhd19ldmVudCk6CisgICAgICAgICIiIgorICAgICAgICBTVEFUVVM6IHRoZSBmb2xsb3dpbmcgYnVnIGhhcyBiZWVuIGZpeGVkIGluIHJlY2VudCBrZXJuZWxzIChGSVhNRToKKyAgICAgICAgd2hpY2ggdmVyc2lvbiA/KS4gTm93IGl0IHJhaXNlcyBJTl9ERUxFVEVfU0VMRiBpbnN0ZWFkLgorCisgICAgICAgIE9sZCBrZXJuZWxzIHdlcmUgYnVnZ2VkLCB0aGlzIGV2ZW50IHJhaXNlZCB3aGVuIHRoZSB3YXRjaGVkIGl0ZW0KKyAgICAgICAgd2VyZSBtb3ZlZCwgc28gd2UgaGFkIHRvIHVwZGF0ZSBpdHMgcGF0aCwgYnV0IHVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcworICAgICAgICBpdCB3YXMgaW1wb3NzaWJsZTogaWYgaXRzIHBhcmVudCBkaXJlY3RvcnkgYW5kIGl0cyBkZXN0aW5hdGlvbgorICAgICAgICBkaXJlY3Rvcnkgd2Fzbid0IHdhdGNoZWQuIFRoZSBrZXJuZWwgKHNlZSBpbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmgpCisgICAgICAgIGRvZXNuJ3QgYnJpbmcgdXMgZW5vdWdoIGluZm9ybWF0aW9ucyBsaWtlIHRoZSBkZXN0aW5hdGlvbiBwYXRoIG9mCisgICAgICAgIG1vdmVkIGl0ZW1zLgorICAgICAgICAiIiIKKyAgICAgICAgd2F0Y2hfID0gc2VsZi5fd2F0Y2hfbWFuYWdlci5nZXRfd2F0Y2gocmF3X2V2ZW50LndkKQorICAgICAgICBzcmNfcGF0aCA9IHdhdGNoXy5wYXRoCisgICAgICAgIG12XyA9IHNlbGYuX212LmdldChzcmNfcGF0aCkKKyAgICAgICAgaWYgbXZfOgorICAgICAgICAgICAgZGVzdF9wYXRoID0gbXZfWzBdCisgICAgICAgICAgICB3YXRjaF8ucGF0aCA9IGRlc3RfcGF0aAorICAgICAgICAgICAgIyBhZGQgdGhlIHNlcGFyYXRvciB0byB0aGUgc291cmNlIHBhdGggdG8gYXZvaWQgb3ZlcmxhcHBpbmcKKyAgICAgICAgICAgICMgcGF0aCBpc3N1ZSB3aGVuIHRlc3Rpbmcgd2l0aCBzdGFydHN3aXRoKCkKKyAgICAgICAgICAgIHNyY19wYXRoICs9IG9zLnBhdGguc2VwCisgICAgICAgICAgICBzcmNfcGF0aF9sZW4gPSBsZW4oc3JjX3BhdGgpCisgICAgICAgICAgICAjIFRoZSBuZXh0IGxvb3AgcmVuYW1lcyBhbGwgd2F0Y2hlcyB3aXRoIHNyY19wYXRoIGFzIGJhc2UgcGF0aC4KKyAgICAgICAgICAgICMgSXQgc2VlbXMgdGhhdCBJTl9NT1ZFX1NFTEYgZG9lcyBub3QgcHJvdmlkZSBJTl9JU0RJUiBpbmZvcm1hdGlvbgorICAgICAgICAgICAgIyB0aGVyZWZvcmUgdGhlIG5leHQgbG9vcCBpcyBpdGVyYXRlZCBldmVuIGlmIHJhd19ldmVudCBpcyBhIGZpbGUuCisgICAgICAgICAgICBmb3IgdyBpbiBzZWxmLl93YXRjaF9tYW5hZ2VyLndhdGNoZXMudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgaWYgdy5wYXRoLnN0YXJ0c3dpdGgoc3JjX3BhdGgpOgorICAgICAgICAgICAgICAgICAgICAjIE5vdGUgdGhhdCBkZXN0X3BhdGggaXMgYSBub3JtYWxpemVkIHBhdGguCisgICAgICAgICAgICAgICAgICAgIHcucGF0aCA9IG9zLnBhdGguam9pbihkZXN0X3BhdGgsIHcucGF0aFtzcmNfcGF0aF9sZW46XSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZy5lcnJvcigiVGhlIHBhdGhuYW1lICclcycgb2YgdGhpcyB3YXRjaCAlcyBoYXMgcHJvYmFibHkgY2hhbmdlZCAiCisgICAgICAgICAgICAgICAgICAgICAgImFuZCBjb3VsZG4ndCBiZSB1cGRhdGVkLCBzbyBpdCBjYW5ub3QgYmUgdHJ1c3RlZCAiCisgICAgICAgICAgICAgICAgICAgICAgImFueW1vcmUuIFRvIGZpeCB0aGlzIGVycm9yIG1vdmUgZGlyZWN0b3JpZXMvZmlsZXMgb25seSAiCisgICAgICAgICAgICAgICAgICAgICAgImJldHdlZW4gd2F0Y2hlZCBwYXJlbnRzIGRpcmVjdG9yaWVzLCBpbiB0aGlzIGNhc2UgZS5nLiAiCisgICAgICAgICAgICAgICAgICAgICAgInB1dCBhIHdhdGNoIG9uICclcycuIiwKKyAgICAgICAgICAgICAgICAgICAgICB3YXRjaF8ucGF0aCwgd2F0Y2hfLAorICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKHdhdGNoXy5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGgucGFyZGlyKSkpCisgICAgICAgICAgICBpZiBub3Qgd2F0Y2hfLnBhdGguZW5kc3dpdGgoJy11bmtub3duLXBhdGgnKToKKyAgICAgICAgICAgICAgICB3YXRjaF8ucGF0aCArPSAnLXVua25vd24tcGF0aCcKKyAgICAgICAgcmV0dXJuIHNlbGYucHJvY2Vzc19kZWZhdWx0KHJhd19ldmVudCkKKworICAgIGRlZiBwcm9jZXNzX0lOX1FfT1ZFUkZMT1coc2VsZiwgcmF3X2V2ZW50KToKKyAgICAgICAgIiIiCisgICAgICAgIE9ubHkgc2lnbmFsIGFuIG92ZXJmbG93LCBtb3N0IG9mIHRoZSBjb21tb24gZmxhZ3MgYXJlIGlycmVsZXZhbnQKKyAgICAgICAgZm9yIHRoaXMgZXZlbnQgKHBhdGgsIHdkLCBuYW1lKS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBFdmVudCh7J21hc2snOiByYXdfZXZlbnQubWFza30pCisKKyAgICBkZWYgcHJvY2Vzc19JTl9JR05PUkVEKHNlbGYsIHJhd19ldmVudCk6CisgICAgICAgICIiIgorICAgICAgICBUaGUgd2F0Y2ggZGVzY3JpcHRvciByYWlzZWQgYnkgdGhpcyBldmVudCBpcyBub3cgaWdub3JlZCAoZm9yZXZlciksCisgICAgICAgIGl0IGNhbiBiZSBzYWZlbHkgZGVsZXRlZCBmcm9tIHRoZSB3YXRjaCBtYW5hZ2VyIGRpY3Rpb25hcnkuCisgICAgICAgIEFmdGVyIHRoaXMgZXZlbnQgd2UgY2FuIGJlIHN1cmUgdGhhdCBuZWl0aGVyIHRoZSBldmVudCBxdWV1ZSBub3IKKyAgICAgICAgdGhlIHN5c3RlbSB3aWxsIHJhaXNlIGFuIGV2ZW50IGFzc29jaWF0ZWQgdG8gdGhpcyB3ZCBhZ2Fpbi4KKyAgICAgICAgIiIiCisgICAgICAgIGV2ZW50XyA9IHNlbGYucHJvY2Vzc19kZWZhdWx0KHJhd19ldmVudCkKKyAgICAgICAgc2VsZi5fd2F0Y2hfbWFuYWdlci5kZWxfd2F0Y2gocmF3X2V2ZW50LndkKQorICAgICAgICByZXR1cm4gZXZlbnRfCisKKyAgICBkZWYgcHJvY2Vzc19kZWZhdWx0KHNlbGYsIHJhd19ldmVudCwgdG9fYXBwZW5kPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29tbW9ucyBoYW5kbGluZyBmb3IgdGhlIGZvbGxvd2luZ3MgZXZlbnRzOgorCisgICAgICAgIElOX0FDQ0VTUywgSU5fTU9ESUZZLCBJTl9BVFRSSUIsIElOX0NMT1NFX1dSSVRFLCBJTl9DTE9TRV9OT1dSSVRFLAorICAgICAgICBJTl9PUEVOLCBJTl9ERUxFVEUsIElOX0RFTEVURV9TRUxGLCBJTl9VTk1PVU5ULgorICAgICAgICAiIiIKKyAgICAgICAgd2F0Y2hfID0gc2VsZi5fd2F0Y2hfbWFuYWdlci5nZXRfd2F0Y2gocmF3X2V2ZW50LndkKQorICAgICAgICBpZiByYXdfZXZlbnQubWFzayAmIChJTl9ERUxFVEVfU0VMRiB8IElOX01PVkVfU0VMRik6CisgICAgICAgICAgICAjIFVuZm9ybnVsYXRlbHkgdGhpcyBpbmZvcm1hdGlvbiBpcyBub3QgcHJvdmlkZWQgYnkgdGhlIGtlcm5lbAorICAgICAgICAgICAgZGlyXyA9IHdhdGNoXy5kaXIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRpcl8gPSBib29sKHJhd19ldmVudC5tYXNrICYgSU5fSVNESVIpCisgICAgICAgIGRpY3RfID0geyd3ZCc6IHJhd19ldmVudC53ZCwKKyAgICAgICAgICAgICAgICAgJ21hc2snOiByYXdfZXZlbnQubWFzaywKKyAgICAgICAgICAgICAgICAgJ3BhdGgnOiB3YXRjaF8ucGF0aCwKKyAgICAgICAgICAgICAgICAgJ25hbWUnOiByYXdfZXZlbnQubmFtZSwKKyAgICAgICAgICAgICAgICAgJ2Rpcic6IGRpcl99CisgICAgICAgIGlmIENPTVBBVElCSUxJVFlfTU9ERToKKyAgICAgICAgICAgIGRpY3RfWydpc19kaXInXSA9IGRpcl8KKyAgICAgICAgaWYgdG9fYXBwZW5kIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZGljdF8udXBkYXRlKHRvX2FwcGVuZCkKKyAgICAgICAgcmV0dXJuIEV2ZW50KGRpY3RfKQorCisKK2NsYXNzIFByb2Nlc3NFdmVudChfUHJvY2Vzc0V2ZW50KToKKyAgICAiIiIKKyAgICBQcm9jZXNzIGV2ZW50cyBvYmplY3RzLCBjYW4gYmUgc3BlY2lhbGl6ZWQgdmlhIHN1YmNsYXNzaW5nLCB0aHVzIGl0cworICAgIGJlaGF2aW9yIGNhbiBiZSBvdmVycmlkZW46CisKKyAgICBOb3RlOiB5b3Ugc2hvdWxkIG5vdCBvdmVycmlkZSBfX2luaXRfXyBpbiB5b3VyIHN1YmNsYXNzIGluc3RlYWQgZGVmaW5lCisgICAgYSBteV9pbml0KCkgbWV0aG9kLCB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGZyb20gdGhlCisgICAgY29uc3RydWN0b3Igb2YgdGhpcyBjbGFzcyB3aXRoIGl0cyBvcHRpb25hbHMgcGFyYW1ldGVycy4KKworICAgICAgMS4gUHJvdmlkZSBzcGVjaWFsaXplZCBpbmRpdmlkdWFsIG1ldGhvZHMsIGUuZy4gcHJvY2Vzc19JTl9ERUxFVEUgZm9yCisgICAgICAgICBwcm9jZXNzaW5nIGEgcHJlY2lzZSB0eXBlIG9mIGV2ZW50IChlLmcuIElOX0RFTEVURSBpbiB0aGlzIGNhc2UpLgorICAgICAgMi4gT3IvYW5kIHByb3ZpZGUgbWV0aG9kcyBmb3IgcHJvY2Vzc2luZyBldmVudHMgYnkgJ2ZhbWlseScsIGUuZy4KKyAgICAgICAgIHByb2Nlc3NfSU5fQ0xPU0UgbWV0aG9kIHdpbGwgcHJvY2VzcyBib3RoIElOX0NMT1NFX1dSSVRFIGFuZAorICAgICAgICAgSU5fQ0xPU0VfTk9XUklURSBldmVudHMgKGlmIHByb2Nlc3NfSU5fQ0xPU0VfV1JJVEUgYW5kCisgICAgICAgICBwcm9jZXNzX0lOX0NMT1NFX05PV1JJVEUgYXJlbid0IGRlZmluZWQgdGhvdWdoKS4KKyAgICAgIDMuIE9yL2FuZCBvdmVycmlkZSBwcm9jZXNzX2RlZmF1bHQgZm9yIGNhdGNoaW5nIGFuZCBwcm9jZXNzaW5nIGFsbAorICAgICAgICAgdGhlIHJlbWFpbmluZyB0eXBlcyBvZiBldmVudHMuCisgICAgIiIiCisgICAgcGV2ZW50ID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBldmVudD1Ob25lLCAqKmthcmdzKToKKyAgICAgICAgIiIiCisgICAgICAgIEVuYWJsZSBjaGFpbmluZyBvZiBQcm9jZXNzRXZlbnQgaW5zdGFuY2VzLgorCisgICAgICAgIEBwYXJhbSBwZXZlbnQ6IE9wdGlvbmFsIGNhbGxhYmxlIG9iamVjdCwgd2lsbCBiZSBjYWxsZWQgb24gZXZlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZyAoYmVmb3JlIHNlbGYpLgorICAgICAgICBAdHlwZSBwZXZlbnQ6IGNhbGxhYmxlCisgICAgICAgIEBwYXJhbSBrYXJnczogVGhpcyBjb25zdHJ1Y3RvciBpcyBpbXBsZW1lbnRlZCBhcyBhIHRlbXBsYXRlIG1ldGhvZAorICAgICAgICAgICAgICAgICAgICAgIGRlbGVnYXRpbmcgaXRzIG9wdGlvbmFscyBrZXl3b3JkZWQgYXJndW1lbnRzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCBteV9pbml0KCkuCisgICAgICAgIEB0eXBlIGthcmdzOiBkaWN0CisgICAgICAgICIiIgorICAgICAgICBzZWxmLnBldmVudCA9IHBldmVudAorICAgICAgICBzZWxmLm15X2luaXQoKiprYXJncykKKworICAgIGRlZiBteV9pbml0KHNlbGYsICoqa2FyZ3MpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyb20gUHJvY2Vzc0V2ZW50Ll9faW5pdF9fKCkuIFRoaXMgbWV0aG9kIGlzCisgICAgICAgIGVtcHR5IGhlcmUgYW5kIG11c3QgYmUgcmVkZWZpbmVkIHRvIGJlIHVzZWZ1bC4gSW4gZWZmZWN0LCBpZiB5b3UKKyAgICAgICAgbmVlZCB0byBzcGVjaWZpY2FsbHkgaW5pdGlhbGl6ZSB5b3VyIHN1YmNsYXNzJyBpbnN0YW5jZSB0aGVuIHlvdQorICAgICAgICBqdXN0IGhhdmUgdG8gb3ZlcnJpZGUgdGhpcyBtZXRob2QgaW4geW91ciBzdWJjbGFzcy4gVGhlbiBhbGwgdGhlCisgICAgICAgIGtleXdvcmRlZCBhcmd1bWVudHMgcGFzc2VkIHRvIFByb2Nlc3NFdmVudC5fX2luaXRfXygpIHdpbGwgYmUKKyAgICAgICAgdHJhbnNtaXR0ZWQgYXMgcGFyYW1ldGVycyB0byB0aGlzIG1ldGhvZC4gQmV3YXJlIHlvdSBNVVNUIHBhc3MKKyAgICAgICAga2V5d29yZCBhcmd1bWVudHMgdGhvdWdoLgorCisgICAgICAgIEBwYXJhbSBrYXJnczogb3B0aW9uYWwgZGVsZWdhdGVkIGFyZ3VtZW50cyBmcm9tIF9faW5pdF9fKCkuCisgICAgICAgIEB0eXBlIGthcmdzOiBkaWN0CisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgZXZlbnQpOgorICAgICAgICBzdG9wX2NoYWluaW5nID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5wZXZlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIEJ5IGRlZmF1bHQgbWV0aG9kcyByZXR1cm4gTm9uZSBzbyB3ZSBzZXQgYXMgZ3VpZGVsaW5lCisgICAgICAgICAgICAjIHRoYXQgbWV0aG9kcyBhc2tpbmcgZm9yIHN0b3AgY2hhaW5pbmcgbXVzdCBleHBsaWNpdGVseQorICAgICAgICAgICAgIyByZXR1cm4gbm9uIE5vbmUgb3Igbm9uIEZhbHNlIHZhbHVlcywgb3RoZXJ3aXNlIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAjIGJlaGF2aW9yIHdpbGwgYmUgdG8gYWNjZXB0IGNoYWluIGNhbGwgdG8gdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgICAgICMgbG9jYWwgbWV0aG9kLgorICAgICAgICAgICAgc3RvcF9jaGFpbmluZyA9IHNlbGYucGV2ZW50KGV2ZW50KQorICAgICAgICBpZiBub3Qgc3RvcF9jaGFpbmluZzoKKyAgICAgICAgICAgIHJldHVybiBfUHJvY2Vzc0V2ZW50Ll9fY2FsbF9fKHNlbGYsIGV2ZW50KQorCisgICAgZGVmIG5lc3RlZF9wZXZlbnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnBldmVudAorCisgICAgZGVmIHByb2Nlc3NfSU5fUV9PVkVSRkxPVyhzZWxmLCBldmVudCk6CisgICAgICAgICIiIgorICAgICAgICBCeSBkZWZhdWx0IHRoaXMgbWV0aG9kIG9ubHkgcmVwb3J0cyB3YXJuaW5nIG1lc3NhZ2VzLCB5b3UgY2FuIG92ZXJyZWRpZGUKKyAgICAgICAgaXQgYnkgc3ViY2xhc3NpbmcgUHJvY2Vzc0V2ZW50IGFuZCBpbXBsZW1lbnQgeW91ciBvd24KKyAgICAgICAgcHJvY2Vzc19JTl9RX09WRVJGTE9XIG1ldGhvZC4gVGhlIGFjdGlvbnMgeW91IGNhbiB0YWtlIG9uIHJlY2VpdmluZyB0aGlzCisgICAgICAgIGV2ZW50IGlzIGVpdGhlciB0byB1cGRhdGUgdGhlIHZhcmlhYmxlIG1heF9xdWV1ZWRfZXZlbnRzIGluIG9yZGVyIHRvCisgICAgICAgIGhhbmRsZSBtb3JlIHNpbXVsdGFuZW91cyBldmVudHMgb3IgdG8gbW9kaWZ5IHlvdXIgY29kZSBpbiBvcmRlciB0bworICAgICAgICBhY2NvbXBsaXNoIGEgYmV0dGVyIGZpbHRlcmluZyBkaW1pbmlzaGluZyB0aGUgbnVtYmVyIG9mIHJhaXNlZCBldmVudHMuCisgICAgICAgIEJlY2F1c2UgdGhpcyBtZXRob2QgaXMgZGVmaW5lZCwgSU5fUV9PVkVSRkxPVyB3aWxsIG5ldmVyIGdldAorICAgICAgICB0cmFuc21pdHRlZCBhcyBhcmd1bWVudHMgdG8gcHJvY2Vzc19kZWZhdWx0IGNhbGxzLgorCisgICAgICAgIEBwYXJhbSBldmVudDogSU5fUV9PVkVSRkxPVyBldmVudC4KKyAgICAgICAgQHR5cGUgZXZlbnQ6IGRpY3QKKyAgICAgICAgIiIiCisgICAgICAgIGxvZy53YXJuaW5nKCdFdmVudCBxdWV1ZSBvdmVyZmxvd2VkLicpCisKKyAgICBkZWYgcHJvY2Vzc19kZWZhdWx0KHNlbGYsIGV2ZW50KToKKyAgICAgICAgIiIiCisgICAgICAgIERlZmF1bHQgcHJvY2Vzc2luZyBldmVudCBtZXRob2QuIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nLiBTdWJjbGFzcworICAgICAgICBQcm9jZXNzRXZlbnQgYW5kIHJlZGVmaW5lIHRoaXMgbWV0aG9kIGluIG9yZGVyIHRvIG1vZGlmeSBpdHMgYmVoYXZpb3IuCisKKyAgICAgICAgQHBhcmFtIGV2ZW50OiBFdmVudCB0byBiZSBwcm9jZXNzZWQuIENhbiBiZSBvZiBhbnkgdHlwZSBvZiBldmVudHMgYnV0CisgICAgICAgICAgICAgICAgICAgICAgSU5fUV9PVkVSRkxPVyBldmVudHMgKHNlZSBtZXRob2QgcHJvY2Vzc19JTl9RX09WRVJGTE9XKS4KKyAgICAgICAgQHR5cGUgZXZlbnQ6IEV2ZW50IGluc3RhbmNlCisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKworY2xhc3MgUHJpbnRBbGxFdmVudHMoUHJvY2Vzc0V2ZW50KToKKyAgICAiIiIKKyAgICBEdW1teSBjbGFzcyB1c2VkIHRvIHByaW50IGV2ZW50cyBzdHJpbmdzIHJlcHJlc2VudGF0aW9ucy4gRm9yIGluc3RhbmNlIHRoaXMKKyAgICBjbGFzcyBpcyB1c2VkIGZyb20gY29tbWFuZCBsaW5lIHRvIHByaW50IGFsbCByZWNlaXZlZCBldmVudHMgdG8gc3Rkb3V0LgorICAgICIiIgorICAgIGRlZiBteV9pbml0KHNlbGYsIG91dD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIEBwYXJhbSBvdXQ6IFdoZXJlIGV2ZW50cyB3aWxsIGJlIHdyaXR0ZW4uCisgICAgICAgIEB0eXBlIG91dDogT2JqZWN0IHByb3ZpZGluZyBhIHZhbGlkIGZpbGUgb2JqZWN0IGludGVyZmFjZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG91dCBpcyBOb25lOgorICAgICAgICAgICAgb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICBzZWxmLl9vdXQgPSBvdXQKKworICAgIGRlZiBwcm9jZXNzX2RlZmF1bHQoc2VsZiwgZXZlbnQpOgorICAgICAgICAiIiIKKyAgICAgICAgV3JpdGVzIGV2ZW50IHN0cmluZyByZXByZXNlbnRhdGlvbiB0byBmaWxlIG9iamVjdCBwcm92aWRlZCB0bworICAgICAgICBteV9pbml0KCkuCisKKyAgICAgICAgQHBhcmFtIGV2ZW50OiBFdmVudCB0byBiZSBwcm9jZXNzZWQuIENhbiBiZSBvZiBhbnkgdHlwZSBvZiBldmVudHMgYnV0CisgICAgICAgICAgICAgICAgICAgICAgSU5fUV9PVkVSRkxPVyBldmVudHMgKHNlZSBtZXRob2QgcHJvY2Vzc19JTl9RX09WRVJGTE9XKS4KKyAgICAgICAgQHR5cGUgZXZlbnQ6IEV2ZW50IGluc3RhbmNlCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9vdXQud3JpdGUoc3RyKGV2ZW50KSkKKyAgICAgICAgc2VsZi5fb3V0LndyaXRlKCdcbicpCisgICAgICAgIHNlbGYuX291dC5mbHVzaCgpCisKKworY2xhc3MgQ2hhaW5JZlRydWUoUHJvY2Vzc0V2ZW50KToKKyAgICAiIiIKKyAgICBNYWtlcyBjb25kaXRpb25hbCBjaGFpbmluZyBkZXBlbmRpbmcgb24gdGhlIHJlc3VsdCBvZiB0aGUgbmVzdGVkCisgICAgcHJvY2Vzc2luZyBpbnN0YW5jZS4KKyAgICAiIiIKKyAgICBkZWYgbXlfaW5pdChzZWxmLCBmdW5jKToKKyAgICAgICAgIiIiCisgICAgICAgIE1ldGhvZCBhdXRvbWF0aWNhbGx5IGNhbGxlZCBmcm9tIGJhc2UgY2xhc3MgY29uc3RydWN0b3IuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9mdW5jID0gZnVuYworCisgICAgZGVmIHByb2Nlc3NfZGVmYXVsdChzZWxmLCBldmVudCk6CisgICAgICAgIHJldHVybiBub3Qgc2VsZi5fZnVuYyhldmVudCkKKworCitjbGFzcyBTdGF0cyhQcm9jZXNzRXZlbnQpOgorICAgICIiIgorICAgIENvbXB1dGUgYW5kIGRpc3BsYXkgdHJpdmlhbCBzdGF0aXN0aWNzIGFib3V0IHByb2Nlc3NlZCBldmVudHMuCisgICAgIiIiCisgICAgZGVmIG15X2luaXQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBNZXRob2QgYXV0b21hdGljYWxseSBjYWxsZWQgZnJvbSBiYXNlIGNsYXNzIGNvbnN0cnVjdG9yLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuX3N0YXRzID0ge30KKyAgICAgICAgc2VsZi5fc3RhdHNfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKworICAgIGRlZiBwcm9jZXNzX2RlZmF1bHQoc2VsZiwgZXZlbnQpOgorICAgICAgICAiIiIKKyAgICAgICAgUHJvY2Vzc2VzIHxldmVudHwuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9zdGF0c19sb2NrLmFjcXVpcmUoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBldmVudHMgPSBldmVudC5tYXNrbmFtZS5zcGxpdCgnfCcpCisgICAgICAgICAgICBmb3IgZXZlbnRfbmFtZSBpbiBldmVudHM6CisgICAgICAgICAgICAgICAgY291bnQgPSBzZWxmLl9zdGF0cy5nZXQoZXZlbnRfbmFtZSwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGF0c1tldmVudF9uYW1lXSA9IGNvdW50ICsgMQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc3RhdHNfbG9jay5yZWxlYXNlKCkKKworICAgIGRlZiBfc3RhdHNfY29weShzZWxmKToKKyAgICAgICAgc2VsZi5fc3RhdHNfbG9jay5hY3F1aXJlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3N0YXRzLmNvcHkoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc3RhdHNfbG9jay5yZWxlYXNlKCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgc3RhdHMgPSBzZWxmLl9zdGF0c19jb3B5KCkKKworICAgICAgICBlbGFwc2VkID0gaW50KHRpbWUudGltZSgpIC0gc2VsZi5fc3RhcnRfdGltZSkKKyAgICAgICAgZWxhcHNlZF9zdHIgPSAnJworICAgICAgICBpZiBlbGFwc2VkIDwgNjA6CisgICAgICAgICAgICBlbGFwc2VkX3N0ciA9IHN0cihlbGFwc2VkKSArICdzZWMnCisgICAgICAgIGVsaWYgNjAgPD0gZWxhcHNlZCA8IDM2MDA6CisgICAgICAgICAgICBlbGFwc2VkX3N0ciA9ICclZG1uJWRzZWMnICUgKGVsYXBzZWQgLyA2MCwgZWxhcHNlZCAlIDYwKQorICAgICAgICBlbGlmIDM2MDAgPD0gZWxhcHNlZCA8IDg2NDAwOgorICAgICAgICAgICAgZWxhcHNlZF9zdHIgPSAnJWRoJWRtbicgJSAoZWxhcHNlZCAvIDM2MDAsIChlbGFwc2VkICUgMzYwMCkgLyA2MCkKKyAgICAgICAgZWxpZiBlbGFwc2VkID49IDg2NDAwOgorICAgICAgICAgICAgZWxhcHNlZF9zdHIgPSAnJWRkJWRoJyAlIChlbGFwc2VkIC8gODY0MDAsIChlbGFwc2VkICUgODY0MDApIC8gMzYwMCkKKyAgICAgICAgc3RhdHNbJ0VsYXBzZWRUaW1lJ10gPSBlbGFwc2VkX3N0cgorCisgICAgICAgIGwgPSBbXQorICAgICAgICBmb3IgZXYsIHZhbHVlIGluIHNvcnRlZChzdGF0cy5pdGVtcygpLCBrZXk9bGFtYmRhIHg6IHhbMF0pOgorICAgICAgICAgICAgbC5hcHBlbmQoJyAlcz0lcycgJSAob3V0cHV0X2Zvcm1hdC5maWVsZF9uYW1lKGV2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mb3JtYXQuZmllbGRfdmFsdWUodmFsdWUpKSkKKyAgICAgICAgcyA9ICc8JXMlcyA+JyAlIChvdXRwdXRfZm9ybWF0LmNsYXNzX25hbWUoc2VsZi5fX2NsYXNzX18uX19uYW1lX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgICcnLmpvaW4obCkpCisgICAgICAgIHJldHVybiBzCisKKyAgICBkZWYgZHVtcChzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBEdW1wcyBzdGF0aXN0aWNzLgorCisgICAgICAgIEBwYXJhbSBmaWxlbmFtZTogZmlsZW5hbWUgd2hlcmUgc3RhdHMgd2lsbCBiZSBkdW1wZWQsIGZpbGVuYW1lIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZCBhbmQgbXVzdCBub3QgZXhpc3QgcHJpb3IgdG8gdGhpcyBjYWxsLgorICAgICAgICBAdHlwZSBmaWxlbmFtZTogc3RyaW5nCisgICAgICAgICIiIgorICAgICAgICBmbGFncyA9IG9zLk9fV1JPTkxZfG9zLk9fQ1JFQVR8b3MuT19OT0ZPTExPV3xvcy5PX0VYQ0wKKyAgICAgICAgZmQgPSBvcy5vcGVuKGZpbGVuYW1lLCBmbGFncywgMDYwMCkKKyAgICAgICAgb3Mud3JpdGUoZmQsIHN0cihzZWxmKSkKKyAgICAgICAgb3MuY2xvc2UoZmQpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmLCBzY2FsZT00NSk6CisgICAgICAgIHN0YXRzID0gc2VsZi5fc3RhdHNfY29weSgpCisgICAgICAgIGlmIG5vdCBzdGF0czoKKyAgICAgICAgICAgIHJldHVybiAnJworCisgICAgICAgIG0gPSBtYXgoc3RhdHMudmFsdWVzKCkpCisgICAgICAgIHVuaXR5ID0gZmxvYXQoc2NhbGUpIC8gbQorICAgICAgICBmbXQgPSAnJSUtMjZzJSUtJWRzJSVzJyAlIChsZW4ob3V0cHV0X2Zvcm1hdC5maWVsZF92YWx1ZSgnQCcgKiBzY2FsZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgMSkKKyAgICAgICAgZGVmIGZ1bmMoeCk6CisgICAgICAgICAgICByZXR1cm4gZm10ICUgKG91dHB1dF9mb3JtYXQuZmllbGRfbmFtZSh4WzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2Zvcm1hdC5maWVsZF92YWx1ZSgnQCcgKiBpbnQoeFsxXSAqIHVuaXR5KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mb3JtYXQuc2ltcGxlKCclZCcgJSB4WzFdLCAneWVsbG93JykpCisgICAgICAgIHMgPSAnXG4nLmpvaW4obWFwKGZ1bmMsIHNvcnRlZChzdGF0cy5pdGVtcygpLCBrZXk9bGFtYmRhIHg6IHhbMF0pKSkKKyAgICAgICAgcmV0dXJuIHMKKworCitjbGFzcyBOb3RpZmllckVycm9yKFB5aW5vdGlmeUVycm9yKToKKyAgICAiIiIKKyAgICBOb3RpZmllciBFeGNlcHRpb24uIFJhaXNlZCBvbiBOb3RpZmllciBlcnJvci4KKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlcnIpOgorICAgICAgICAiIiIKKyAgICAgICAgQHBhcmFtIGVycjogRXhjZXB0aW9uIHN0cmluZydzIGRlc2NyaXB0aW9uLgorICAgICAgICBAdHlwZSBlcnI6IHN0cmluZworICAgICAgICAiIiIKKyAgICAgICAgUHlpbm90aWZ5RXJyb3IuX19pbml0X18oc2VsZiwgZXJyKQorCisKK2NsYXNzIE5vdGlmaWVyOgorICAgICIiIgorICAgIFJlYWQgbm90aWZpY2F0aW9ucywgcHJvY2VzcyBldmVudHMuCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2F0Y2hfbWFuYWdlciwgZGVmYXVsdF9wcm9jX2Z1bj1Ob25lLCByZWFkX2ZyZXE9MCwKKyAgICAgICAgICAgICAgICAgdGhyZXNob2xkPTAsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBJbml0aWFsaXphdGlvbi4gcmVhZF9mcmVxLCB0aHJlc2hvbGQgYW5kIHRpbWVvdXQgcGFyYW1ldGVycyBhcmUgdXNlZAorICAgICAgICB3aGVuIGxvb3BpbmcuCisKKyAgICAgICAgQHBhcmFtIHdhdGNoX21hbmFnZXI6IFdhdGNoIE1hbmFnZXIuCisgICAgICAgIEB0eXBlIHdhdGNoX21hbmFnZXI6IFdhdGNoTWFuYWdlciBpbnN0YW5jZQorICAgICAgICBAcGFyYW0gZGVmYXVsdF9wcm9jX2Z1bjogRGVmYXVsdCBwcm9jZXNzaW5nIG1ldGhvZC4gSWYgTm9uZSwgYSBuZXcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlIG9mIFByaW50QWxsRXZlbnRzIHdpbGwgYmUgYXNzaWduZWQuCisgICAgICAgIEB0eXBlIGRlZmF1bHRfcHJvY19mdW46IGluc3RhbmNlIG9mIFByb2Nlc3NFdmVudAorICAgICAgICBAcGFyYW0gcmVhZF9mcmVxOiBpZiByZWFkX2ZyZXEgPT0gMCwgZXZlbnRzIGFyZSByZWFkIGFzYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlYWRfZnJlcSBpcyA+IDAsIHRoaXMgdGhyZWFkIHNsZWVwcworICAgICAgICAgICAgICAgICAgICAgICAgICBtYXgoMCwgcmVhZF9mcmVxIC0gdGltZW91dCkgc2Vjb25kcy4gQnV0IGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgaXMgTm9uZSBpdCBtYXkgYmUgZGlmZmVyZW50IGJlY2F1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcG9sbCBpcyBibG9ja2luZyB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gcmVhZC4KKyAgICAgICAgQHR5cGUgcmVhZF9mcmVxOiBpbnQKKyAgICAgICAgQHBhcmFtIHRocmVzaG9sZDogRmlsZSBkZXNjcmlwdG9yIHdpbGwgYmUgcmVhZCBvbmx5IGlmIHRoZSBhY2N1bXVsYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplIHRvIHJlYWQgYmVjb21lcyA+PSB0aHJlc2hvbGQuIElmICE9IDAsIHlvdSBsaWtlbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudCB0byB1c2UgaXQgaW4gY29tYmluYXRpb24gd2l0aCBhbiBhcHByb3ByaWF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBmb3IgcmVhZF9mcmVxIGJlY2F1c2Ugd2l0aG91dCB0aGF0IHlvdSB3b3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgICBrZWVwIGxvb3Bpbmcgd2l0aG91dCByZWFsbHkgcmVhZGluZyBhbnl0aGluZyBhbmQgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnRpbCB0aGUgYW1vdW50IG9mIGV2ZW50cyB0byByZWFkIGlzID49IHRocmVzaG9sZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgQXQgbGVhc3Qgd2l0aCByZWFkX2ZyZXEgc2V0IHlvdSBtaWdodCBzbGVlcC4KKyAgICAgICAgQHR5cGUgdGhyZXNob2xkOiBpbnQKKyAgICAgICAgQHBhcmFtIHRpbWVvdXQ6CisgICAgICAgICAgICBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwjcG9sbGluZy1vYmplY3RzCisgICAgICAgIEB0eXBlIHRpbWVvdXQ6IGludAorICAgICAgICAiIiIKKyAgICAgICAgIyBXYXRjaCBNYW5hZ2VyIGluc3RhbmNlCisgICAgICAgIHNlbGYuX3dhdGNoX21hbmFnZXIgPSB3YXRjaF9tYW5hZ2VyCisgICAgICAgICMgRmlsZSBkZXNjcmlwdG9yCisgICAgICAgIHNlbGYuX2ZkID0gc2VsZi5fd2F0Y2hfbWFuYWdlci5nZXRfZmQoKQorICAgICAgICAjIFBvbGwgb2JqZWN0IGFuZCByZWdpc3RyYXRpb24KKyAgICAgICAgc2VsZi5fcG9sbG9iaiA9IHNlbGVjdC5wb2xsKCkKKyAgICAgICAgc2VsZi5fcG9sbG9iai5yZWdpc3RlcihzZWxmLl9mZCwgc2VsZWN0LlBPTExJTikKKyAgICAgICAgIyBUaGlzIHBpcGUgaXMgY29ycmVjdGVseSBpbml0aWFsaXplZCBhbmQgdXNlZCBieSBUaHJlYWRlZE5vdGlmaWVyCisgICAgICAgIHNlbGYuX3BpcGUgPSAoLTEsIC0xKQorICAgICAgICAjIEV2ZW50IHF1ZXVlCisgICAgICAgIHNlbGYuX2V2ZW50cSA9IGRlcXVlKCkKKyAgICAgICAgIyBTeXN0ZW0gcHJvY2Vzc2luZyBmdW5jdG9yLCBjb21tb24gdG8gYWxsIGV2ZW50cworICAgICAgICBzZWxmLl9zeXNfcHJvY19mdW4gPSBfU3lzUHJvY2Vzc0V2ZW50KHNlbGYuX3dhdGNoX21hbmFnZXIsIHNlbGYpCisgICAgICAgICMgRGVmYXVsdCBwcm9jZXNzaW5nIG1ldGhvZAorICAgICAgICBzZWxmLl9kZWZhdWx0X3Byb2NfZnVuID0gZGVmYXVsdF9wcm9jX2Z1bgorICAgICAgICBpZiBkZWZhdWx0X3Byb2NfZnVuIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9kZWZhdWx0X3Byb2NfZnVuID0gUHJpbnRBbGxFdmVudHMoKQorICAgICAgICAjIExvb3AgcGFyYW1ldGVycworICAgICAgICBzZWxmLl9yZWFkX2ZyZXEgPSByZWFkX2ZyZXEKKyAgICAgICAgc2VsZi5fdGhyZXNob2xkID0gdGhyZXNob2xkCisgICAgICAgIHNlbGYuX3RpbWVvdXQgPSB0aW1lb3V0CisgICAgICAgICMgQ29hbGVzY2UgZXZlbnRzIG9wdGlvbgorICAgICAgICBzZWxmLl9jb2FsZXNjZSA9IEZhbHNlCisgICAgICAgICMgc2V0IG9mIHN0cihyYXdfZXZlbnQpLCBvbmx5IHVzZWQgd2hlbiBjb2FsZXNjZSBvcHRpb24gaXMgVHJ1ZQorICAgICAgICBzZWxmLl9ldmVudHNldCA9IHNldCgpCisKKyAgICBkZWYgYXBwZW5kX2V2ZW50KHNlbGYsIGV2ZW50KToKKyAgICAgICAgIiIiCisgICAgICAgIEFwcGVuZCBhIHJhdyBldmVudCB0byB0aGUgZXZlbnQgcXVldWUuCisKKyAgICAgICAgQHBhcmFtIGV2ZW50OiBBbiBldmVudC4KKyAgICAgICAgQHR5cGUgZXZlbnQ6IF9SYXdFdmVudCBpbnN0YW5jZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2V2ZW50cS5hcHBlbmQoZXZlbnQpCisKKyAgICBkZWYgcHJvY19mdW4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kZWZhdWx0X3Byb2NfZnVuCisKKyAgICBkZWYgY29hbGVzY2VfZXZlbnRzKHNlbGYsIGNvYWxlc2NlPVRydWUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29hbGVzY2luZyBldmVudHMuIEV2ZW50cyBhcmUgdXN1YWxseSBwcm9jZXNzZWQgYnkgYmF0Y2hzLCB0aGVpciBzaXplCisgICAgICAgIGRlcGVuZCBvbiB2YXJpb3VzIGZhY3RvcnMuIFRodXMsIGJlZm9yZSBwcm9jZXNzaW5nIHRoZW0sIGV2ZW50cyByZWNlaXZlZAorICAgICAgICBmcm9tIGlub3RpZnkgYXJlIGFnZ3JlZ2F0ZWQgaW4gYSBmaWZvIHF1ZXVlLiBJZiB0aGlzIGNvYWxlc2NpbmcKKyAgICAgICAgb3B0aW9uIGlzIGVuYWJsZWQgZXZlbnRzIGFyZSBmaWx0ZXJlZCBiYXNlZCBvbiB0aGVpciB1bmljaXR5LCBvbmx5CisgICAgICAgIHVuaXF1ZSBldmVudHMgYXJlIGVucXVldWVkLCBkb3VibG9ucyBhcmUgZGlzY2FyZGVkLiBBbiBldmVudCBpcyB1bmlxdWUKKyAgICAgICAgd2hlbiB0aGUgY29tYmluYXRpb24gb2YgaXRzIGZpZWxkcyAod2QsIG1hc2ssIGNvb2tpZSwgbmFtZSkgaXMgdW5pcXVlCisgICAgICAgIGFtb25nIGV2ZW50cyBvZiBhIHNhbWUgYmF0Y2guIEFmdGVyIGEgYmF0Y2ggb2YgZXZlbnRzIGlzIHByb2Nlc3NlZCBhbnkKKyAgICAgICAgZXZlbnRzIGlzIGFjY2VwdGVkIGFnYWluLiBCeSBkZWZhdWx0IHRoaXMgb3B0aW9uIGlzIGRpc2FibGVkLCB5b3UgaGF2ZQorICAgICAgICB0byBleHBsaWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHR1cm4gaXQgb24uCisKKyAgICAgICAgQHBhcmFtIGNvYWxlc2NlOiBPcHRpb25hbCBuZXcgY29hbGVzY2luZyB2YWx1ZS4gVHJ1ZSBieSBkZWZhdWx0LgorICAgICAgICBAdHlwZSBjb2FsZXNjZTogQm9vbAorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fY29hbGVzY2UgPSBjb2FsZXNjZQorICAgICAgICBpZiBub3QgY29hbGVzY2U6CisgICAgICAgICAgICBzZWxmLl9ldmVudHNldC5jbGVhcigpCisKKyAgICBkZWYgY2hlY2tfZXZlbnRzKHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayBmb3IgbmV3IGV2ZW50cyBhdmFpbGFibGUgdG8gcmVhZCwgYmxvY2tzIHVwIHRvIHRpbWVvdXQKKyAgICAgICAgbWlsbGlzZWNvbmRzLgorCisgICAgICAgIEBwYXJhbSB0aW1lb3V0OiBJZiBzcGVjaWZpZWQgaXQgb3ZlcnJpZGVzIHRoZSBjb3JyZXNwb25kaW5nIGluc3RhbmNlCisgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgX3RpbWVvdXQuCisgICAgICAgIEB0eXBlIHRpbWVvdXQ6IGludAorCisgICAgICAgIEByZXR1cm46IE5ldyBldmVudHMgdG8gcmVhZC4KKyAgICAgICAgQHJ0eXBlOiBib29sCisgICAgICAgICIiIgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgYmxvY2tzIHVwIHRvICd0aW1lb3V0JyBtaWxsaXNlY29uZHMKKyAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzZWxmLl90aW1lb3V0CisgICAgICAgICAgICAgICAgcmV0ID0gc2VsZi5fcG9sbG9iai5wb2xsKHRpbWVvdXQpCisgICAgICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgaWYgZXJyWzBdID09IGVycm5vLkVJTlRSOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZSAjIGludGVycnVwdGVkLCByZXRyeQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgbm90IHJldCBvciAoc2VsZi5fcGlwZVswXSA9PSByZXRbMF1bMF0pOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICMgb25seSBvbmUgZmQgaXMgcG9sbGVkCisgICAgICAgIHJldHVybiByZXRbMF1bMV0gJiBzZWxlY3QuUE9MTElOCisKKyAgICBkZWYgcmVhZF9ldmVudHMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZWFkIGV2ZW50cyBmcm9tIGRldmljZSwgYnVpbGQgX1Jhd0V2ZW50cywgYW5kIGVucXVldWUgdGhlbS4KKyAgICAgICAgIiIiCisgICAgICAgIGJ1Zl8gPSBhcnJheS5hcnJheSgnaScsIFswXSkKKyAgICAgICAgIyBnZXQgZXZlbnQgcXVldWUgc2l6ZQorICAgICAgICBpZiBmY250bC5pb2N0bChzZWxmLl9mZCwgdGVybWlvcy5GSU9OUkVBRCwgYnVmXywgMSkgPT0gLTE6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcXVldWVfc2l6ZSA9IGJ1Zl9bMF0KKyAgICAgICAgaWYgcXVldWVfc2l6ZSA8IHNlbGYuX3RocmVzaG9sZDoKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygnKGZkOiAlZCkgJWQgYnl0ZXMgYXZhaWxhYmxlIHRvIHJlYWQgYnV0IHRocmVzaG9sZCBpcyAnCisgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkIHRvICVkIGJ5dGVzJywgc2VsZi5fZmQsIHF1ZXVlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGhyZXNob2xkKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBSZWFkIGNvbnRlbnQgZnJvbSBmaWxlCisgICAgICAgICAgICByID0gb3MucmVhZChzZWxmLl9mZCwgcXVldWVfc2l6ZSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgbXNnOgorICAgICAgICAgICAgcmFpc2UgTm90aWZpZXJFcnJvcihtc2cpCisgICAgICAgIGxvZy5kZWJ1ZygnRXZlbnQgcXVldWUgc2l6ZTogJWQnLCBxdWV1ZV9zaXplKQorICAgICAgICByc3VtID0gMCAgIyBjb3VudGVyCisgICAgICAgIHdoaWxlIHJzdW0gPCBxdWV1ZV9zaXplOgorICAgICAgICAgICAgc19zaXplID0gMTYKKyAgICAgICAgICAgICMgUmV0cmlldmUgd2QsIG1hc2ssIGNvb2tpZSBhbmQgZm5hbWVfbGVuCisgICAgICAgICAgICB3ZCwgbWFzaywgY29va2llLCBmbmFtZV9sZW4gPSBzdHJ1Y3QudW5wYWNrKCdpSUlJJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcltyc3VtOnJzdW0rc19zaXplXSkKKyAgICAgICAgICAgICMgUmV0cmlldmUgbmFtZQorICAgICAgICAgICAgZm5hbWUsID0gc3RydWN0LnVucGFjaygnJWRzJyAlIGZuYW1lX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcltyc3VtICsgc19zaXplOnJzdW0gKyBzX3NpemUgKyBmbmFtZV9sZW5dKQorICAgICAgICAgICAgcmF3ZXZlbnQgPSBfUmF3RXZlbnQod2QsIG1hc2ssIGNvb2tpZSwgZm5hbWUpCisgICAgICAgICAgICBpZiBzZWxmLl9jb2FsZXNjZToKKyAgICAgICAgICAgICAgICAjIE9ubHkgZW5xdWV1ZSBuZXcgKHVuaXF1ZSkgZXZlbnRzLgorICAgICAgICAgICAgICAgIHJhd2V2ZW50c3RyID0gc3RyKHJhd2V2ZW50KQorICAgICAgICAgICAgICAgIGlmIHJhd2V2ZW50c3RyIG5vdCBpbiBzZWxmLl9ldmVudHNldDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXZlbnRzZXQuYWRkKHJhd2V2ZW50c3RyKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9ldmVudHEuYXBwZW5kKHJhd2V2ZW50KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9ldmVudHEuYXBwZW5kKHJhd2V2ZW50KQorICAgICAgICAgICAgcnN1bSArPSBzX3NpemUgKyBmbmFtZV9sZW4KKworICAgIGRlZiBwcm9jZXNzX2V2ZW50cyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJvdXRpbmUgZm9yIHByb2Nlc3NpbmcgZXZlbnRzIGZyb20gcXVldWUgYnkgY2FsbGluZyB0aGVpcgorICAgICAgICBhc3NvY2lhdGVkIHByb2NjZXNzaW5nIG1ldGhvZCAoYW4gaW5zdGFuY2Ugb2YgUHJvY2Vzc0V2ZW50KS4KKyAgICAgICAgSXQgYWxzbyBkb2VzIGludGVybmFsIHByb2Nlc3NpbmdzLCB0byBrZWVwIHRoZSBzeXN0ZW0gdXBkYXRlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHdoaWxlIHNlbGYuX2V2ZW50cToKKyAgICAgICAgICAgIHJhd19ldmVudCA9IHNlbGYuX2V2ZW50cS5wb3BsZWZ0KCkgICMgcG9wIG5leHQgZXZlbnQKKyAgICAgICAgICAgIGlmIHNlbGYuX3dhdGNoX21hbmFnZXIuaWdub3JlX2V2ZW50czoKKyAgICAgICAgICAgICAgICBsb2cuZGVidWcoIkV2ZW50IGlnbm9yZWQ6ICVzIiAlIHJlcHIocmF3X2V2ZW50KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgd2F0Y2hfID0gc2VsZi5fd2F0Y2hfbWFuYWdlci5nZXRfd2F0Y2gocmF3X2V2ZW50LndkKQorICAgICAgICAgICAgaWYgKHdhdGNoXyBpcyBOb25lKSBhbmQgbm90IChyYXdfZXZlbnQubWFzayAmIElOX1FfT1ZFUkZMT1cpOgorICAgICAgICAgICAgICAgIGlmIG5vdCAocmF3X2V2ZW50Lm1hc2sgJiBJTl9JR05PUkVEKToKKyAgICAgICAgICAgICAgICAgICAgIyBOb3QgcmVhbGx5IHN1cmUgaG93IHdlIGVuZGVkIHVwIGhlcmUsIG5vciBob3cgd2Ugc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICMgaGFuZGxlIHRoZXNlIHR5cGVzIG9mIGV2ZW50cyBhbmQgaWYgaXQgaXMgYXBwcm9wcmlhdGUgdG8KKyAgICAgICAgICAgICAgICAgICAgIyBjb21wbGV0bHkgc2tpcCB0aGVtIChsaWtlIHdlIGFyZSBkb2luZyBoZXJlKS4KKyAgICAgICAgICAgICAgICAgICAgbG9nLndhcm5pbmcoIlVuYWJsZSB0byByZXRyaWV2ZSBXYXRjaCBvYmplY3QgYXNzb2NpYXRlZCB0byAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIocmF3X2V2ZW50KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcmV2ZW50ID0gc2VsZi5fc3lzX3Byb2NfZnVuKHJhd19ldmVudCkgICMgc3lzdGVtIHByb2Nlc3NpbmdzCisgICAgICAgICAgICBpZiB3YXRjaF8gYW5kIHdhdGNoXy5wcm9jX2Z1bjoKKyAgICAgICAgICAgICAgICB3YXRjaF8ucHJvY19mdW4ocmV2ZW50KSAgIyB1c2VyIHByb2Nlc3NpbmdzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2RlZmF1bHRfcHJvY19mdW4ocmV2ZW50KQorICAgICAgICBzZWxmLl9zeXNfcHJvY19mdW4uY2xlYW51cCgpICAjIHJlbW92ZSBvbGRzIE1PVkVEXyogZXZlbnRzIHJlY29yZHMKKyAgICAgICAgaWYgc2VsZi5fY29hbGVzY2U6CisgICAgICAgICAgICBzZWxmLl9ldmVudHNldC5jbGVhcigpCisKKyAgICBkZWYgX19kYWVtb25pemUoc2VsZiwgcGlkX2ZpbGU9Tm9uZSwgc3RkaW49b3MuZGV2bnVsbCwgc3Rkb3V0PW9zLmRldm51bGwsCisgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1vcy5kZXZudWxsKToKKyAgICAgICAgIiIiCisgICAgICAgIEBwYXJhbSBwaWRfZmlsZTogZmlsZSB3aGVyZSB0aGUgcGlkIHdpbGwgYmUgd3JpdHRlbi4gSWYgcGlkX2ZpbGU9Tm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwaWQgaXMgd3JpdHRlbiB0bworICAgICAgICAgICAgICAgICAgICAgICAgIC92YXIvcnVuLzxzeXMuYXJndlswXXxweWlub3RpZnk+LnBpZCwgaWYgcGlkX2ZpbGU9RmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICBubyBwaWRfZmlsZSBpcyB3cml0dGVuLgorICAgICAgICBAcGFyYW0gc3RkaW46CisgICAgICAgIEBwYXJhbSBzdGRvdXQ6CisgICAgICAgIEBwYXJhbSBzdGRlcnI6IGZpbGVzIGFzc29jaWF0ZWQgdG8gY29tbW9uIHN0cmVhbXMuCisgICAgICAgICIiIgorICAgICAgICBpZiBwaWRfZmlsZSBpcyBOb25lOgorICAgICAgICAgICAgZGlybmFtZSA9ICcvdmFyL3J1bi8nCisgICAgICAgICAgICBiYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pIG9yICdweWlub3RpZnknCisgICAgICAgICAgICBwaWRfZmlsZSA9IG9zLnBhdGguam9pbihkaXJuYW1lLCBiYXNlbmFtZSArICcucGlkJykKKworICAgICAgICBpZiBwaWRfZmlsZSAhPSBGYWxzZSBhbmQgb3MucGF0aC5sZXhpc3RzKHBpZF9maWxlKToKKyAgICAgICAgICAgIGVyciA9ICdDYW5ub3QgZGFlbW9uaXplOiBwaWQgZmlsZSAlcyBhbHJlYWR5IGV4aXN0cy4nICUgcGlkX2ZpbGUKKyAgICAgICAgICAgIHJhaXNlIE5vdGlmaWVyRXJyb3IoZXJyKQorCisgICAgICAgIGRlZiBmb3JrX2RhZW1vbigpOgorICAgICAgICAgICAgIyBBZGFwdGVkIGZyb20gQ2hhZCBKLiBTY2hyb2VkZXIncyByZWNpcGUKKyAgICAgICAgICAgICMgQHNlZSBodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy8yNzg3MzEvCisgICAgICAgICAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICAgICAgICAgIGlmIChwaWQgPT0gMCk6CisgICAgICAgICAgICAgICAgIyBwYXJlbnQgMgorICAgICAgICAgICAgICAgIG9zLnNldHNpZCgpCisgICAgICAgICAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgICAgICAgICAgaWYgKHBpZCA9PSAwKToKKyAgICAgICAgICAgICAgICAgICAgIyBjaGlsZAorICAgICAgICAgICAgICAgICAgICBvcy5jaGRpcignLycpCisgICAgICAgICAgICAgICAgICAgIG9zLnVtYXNrKDAyMikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIHBhcmVudCAyCisgICAgICAgICAgICAgICAgICAgIG9zLl9leGl0KDApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgcGFyZW50IDEKKyAgICAgICAgICAgICAgICBvcy5fZXhpdCgwKQorCisgICAgICAgICAgICBmZF9pbnAgPSBvcy5vcGVuKHN0ZGluLCBvcy5PX1JET05MWSkKKyAgICAgICAgICAgIG9zLmR1cDIoZmRfaW5wLCAwKQorICAgICAgICAgICAgZmRfb3V0ID0gb3Mub3BlbihzdGRvdXQsIG9zLk9fV1JPTkxZfG9zLk9fQ1JFQVQsIDA2MDApCisgICAgICAgICAgICBvcy5kdXAyKGZkX291dCwgMSkKKyAgICAgICAgICAgIGZkX2VyciA9IG9zLm9wZW4oc3RkZXJyLCBvcy5PX1dST05MWXxvcy5PX0NSRUFULCAwNjAwKQorICAgICAgICAgICAgb3MuZHVwMihmZF9lcnIsIDIpCisKKyAgICAgICAgIyBEZXRhY2ggdGFzaworICAgICAgICBmb3JrX2RhZW1vbigpCisKKyAgICAgICAgIyBXcml0ZSBwaWQKKyAgICAgICAgaWYgcGlkX2ZpbGUgIT0gRmFsc2U6CisgICAgICAgICAgICBmbGFncyA9IG9zLk9fV1JPTkxZfG9zLk9fQ1JFQVR8b3MuT19OT0ZPTExPV3xvcy5PX0VYQ0wKKyAgICAgICAgICAgIGZkX3BpZCA9IG9zLm9wZW4ocGlkX2ZpbGUsIGZsYWdzLCAwNjAwKQorICAgICAgICAgICAgb3Mud3JpdGUoZmRfcGlkLCBzdHIob3MuZ2V0cGlkKCkpICsgJ1xuJykKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkX3BpZCkKKyAgICAgICAgICAgICMgUmVnaXN0ZXIgdW5saW5rIGZ1bmN0aW9uCisgICAgICAgICAgICBhdGV4aXQucmVnaXN0ZXIobGFtYmRhIDogb3MudW5saW5rKHBpZF9maWxlKSkKKworICAgIGRlZiBfc2xlZXAoc2VsZiwgcmVmX3RpbWUpOgorICAgICAgICAjIE9ubHkgY29uc2lkZXIgc2xlZXBpbmcgaWYgcmVhZF9mcmVxIGlzID4gMAorICAgICAgICBpZiBzZWxmLl9yZWFkX2ZyZXEgPiAwOgorICAgICAgICAgICAgY3VyX3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgc2xlZXBfYW1vdW50ID0gc2VsZi5fcmVhZF9mcmVxIC0gKGN1cl90aW1lIC0gcmVmX3RpbWUpCisgICAgICAgICAgICBpZiBzbGVlcF9hbW91bnQgPiAwOgorICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygnTm93IHNsZWVwaW5nICVkIHNlY29uZHMnLCBzbGVlcF9hbW91bnQpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcChzbGVlcF9hbW91bnQpCisKKyAgICBkZWYgbG9vcChzZWxmLCBjYWxsYmFjaz1Ob25lLCBkYWVtb25pemU9RmFsc2UsICoqYXJncyk6CisgICAgICAgICIiIgorICAgICAgICBFdmVudHMgYXJlIHJlYWQgb25seSBvbmUgdGltZSBldmVyeSBtaW4ocmVhZF9mcmVxLCB0aW1lb3V0KQorICAgICAgICBzZWNvbmRzIGF0IGJlc3QgYW5kIG9ubHkgaWYgdGhlIHNpemUgdG8gcmVhZCBpcyA+PSB0aHJlc2hvbGQuCisgICAgICAgIEFmdGVyIHRoaXMgbWV0aG9kIHJldHVybnMgaXQgbXVzdCBub3QgYmUgY2FsbGVkIGFnYWluIGZvciB0aGUgc2FtZQorICAgICAgICBpbnN0YW5jZS4KKworICAgICAgICBAcGFyYW0gY2FsbGJhY2s6IEZ1bmN0b3IgY2FsbGVkIGFmdGVyIGVhY2ggZXZlbnQgcHJvY2Vzc2luZyBpdGVyYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgRXhwZWN0cyB0byByZWNlaXZlIHRoZSBub3RpZmllciBvYmplY3QgKHNlbGYpIGFzIGZpcnN0CisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgVHJ1ZSB0aGUgbG9vcCBpcworICAgICAgICAgICAgICAgICAgICAgICAgIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZWQgb3RoZXJ3aXNlIHRoZSBsb29wIG1ldGhvZCBrZWVwcworICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BpbmcuCisgICAgICAgIEB0eXBlIGNhbGxiYWNrOiBjYWxsYWJsZSBvYmplY3Qgb3IgZnVuY3Rpb24KKyAgICAgICAgQHBhcmFtIGRhZW1vbml6ZTogVGhpcyB0aHJlYWQgaXMgZGFlbW9uaXplZCBpZiBzZXQgdG8gVHJ1ZS4KKyAgICAgICAgQHR5cGUgZGFlbW9uaXplOiBib29sZWFuCisgICAgICAgIEBwYXJhbSBhcmdzOiBPcHRpb25hbCBhbmQgcmVsZXZhbnQgb25seSBpZiBkYWVtb25pemUgaXMgVHJ1ZS4gUmVtYWluaW5nCisgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkZWQgYXJndW1lbnRzIGFyZSBkaXJlY3RseSBwYXNzZWQgdG8gZGFlbW9uaXplIHNlZQorICAgICAgICAgICAgICAgICAgICAgX19kYWVtb25pemUoKSBtZXRob2QuIElmIHBpZF9maWxlPU5vbmUgb3IgaXMgc2V0IHRvIGEKKyAgICAgICAgICAgICAgICAgICAgIHBhdGhuYW1lIHRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QKKyAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgb3RoZXJ3aXNlIGFuIGV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICAgcHlpbm90aWZ5Lk5vdGlmaWVyRXJyb3Igd2lsbCBiZSByYWlzZWQuIElmIHBpZF9maWxlPUZhbHNlCisgICAgICAgICAgICAgICAgICAgICBpdCBpcyBzdGlsbCBkYWVtb25pemVkIGJ1dCB0aGUgcGlkIGlzIG5vdCB3cml0dGVuIGluIGFueQorICAgICAgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgQHR5cGUgYXJnczogdmFyaW91cworICAgICAgICAiIiIKKyAgICAgICAgaWYgZGFlbW9uaXplOgorICAgICAgICAgICAgc2VsZi5fX2RhZW1vbml6ZSgqKmFyZ3MpCisKKyAgICAgICAgIyBSZWFkIGFuZCBwcm9jZXNzIGV2ZW50cyBmb3JldmVyCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzX2V2ZW50cygpCisgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrIGlzIG5vdCBOb25lKSBhbmQgKGNhbGxiYWNrKHNlbGYpIGlzIFRydWUpOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHJlZl90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgICAgICAjIGNoZWNrX2V2ZW50cyBpcyBibG9ja2luZworICAgICAgICAgICAgICAgIGlmIHNlbGYuY2hlY2tfZXZlbnRzKCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NsZWVwKHJlZl90aW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlYWRfZXZlbnRzKCkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICAjIFN0b3AgbW9uaXRvcmluZyBpZiBzaWdpbnQgaXMgY2F1Z2h0IChDb250cm9sLUMpLgorICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygnUHlpbm90aWZ5IHN0b3BzIG1vbml0b3JpbmcuJykKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAjIENsb3NlIGludGVybmFscworICAgICAgICBzZWxmLnN0b3AoKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDbG9zZSBpbm90aWZ5J3MgaW5zdGFuY2UgKGNsb3NlIGl0cyBmaWxlIGRlc2NyaXB0b3IpLgorICAgICAgICBJdCBkZXN0cm95cyBhbGwgZXhpc3Rpbmcgd2F0Y2hlcywgcGVuZGluZyBldmVudHMsLi4uCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGF1dG9tYXRpY2FsbHkgY2FsbGVkIGF0IHRoZSBlbmQgb2YgbG9vcCgpLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fcG9sbG9iai51bnJlZ2lzdGVyKHNlbGYuX2ZkKQorICAgICAgICBvcy5jbG9zZShzZWxmLl9mZCkKKyAgICAgICAgc2VsZi5fc3lzX3Byb2NfZnVuID0gTm9uZQorCisKK2NsYXNzIFRocmVhZGVkTm90aWZpZXIodGhyZWFkaW5nLlRocmVhZCwgTm90aWZpZXIpOgorICAgICIiIgorICAgIFRoaXMgbm90aWZpZXIgaW5oZXJpdHMgZnJvbSB0aHJlYWRpbmcuVGhyZWFkIGZvciBpbnN0YW5jaWF0aW5nIGEgc2VwYXJhdGUKKyAgICB0aHJlYWQsIGFuZCBhbHNvIGluaGVyaXRzIGZyb20gTm90aWZpZXIsIGJlY2F1c2UgaXQgaXMgYSB0aHJlYWRlZCBub3RpZmllci4KKworICAgIE5vdGUgdGhhdCBldmVyeSBmdW5jdGlvbmFsaXR5IHByb3ZpZGVkIGJ5IHRoaXMgY2xhc3MgaXMgYWxzbyBwcm92aWRlZAorICAgIHRocm91Z2ggTm90aWZpZXIgY2xhc3MuIE1vcmVvdmVyIE5vdGlmaWVyIHNob3VsZCBiZSBjb25zaWRlcmVkIGZpcnN0IGJlY2F1c2UKKyAgICBpdCBpcyBub3QgdGhyZWFkZWQgYW5kIGNvdWxkIGJlIGVhc2lseSBkYWVtb25pemVkLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3YXRjaF9tYW5hZ2VyLCBkZWZhdWx0X3Byb2NfZnVuPU5vbmUsIHJlYWRfZnJlcT0wLAorICAgICAgICAgICAgICAgICB0aHJlc2hvbGQ9MCwgdGltZW91dD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIEluaXRpYWxpemF0aW9uLCBpbml0aWFsaXplIGJhc2UgY2xhc3Nlcy4gcmVhZF9mcmVxLCB0aHJlc2hvbGQgYW5kCisgICAgICAgIHRpbWVvdXQgcGFyYW1ldGVycyBhcmUgdXNlZCB3aGVuIGxvb3BpbmcuCisKKyAgICAgICAgQHBhcmFtIHdhdGNoX21hbmFnZXI6IFdhdGNoIE1hbmFnZXIuCisgICAgICAgIEB0eXBlIHdhdGNoX21hbmFnZXI6IFdhdGNoTWFuYWdlciBpbnN0YW5jZQorICAgICAgICBAcGFyYW0gZGVmYXVsdF9wcm9jX2Z1bjogRGVmYXVsdCBwcm9jZXNzaW5nIG1ldGhvZC4gU2VlIGJhc2UgY2xhc3MuCisgICAgICAgIEB0eXBlIGRlZmF1bHRfcHJvY19mdW46IGluc3RhbmNlIG9mIFByb2Nlc3NFdmVudAorICAgICAgICBAcGFyYW0gcmVhZF9mcmVxOiBpZiByZWFkX2ZyZXEgPT0gMCwgZXZlbnRzIGFyZSByZWFkIGFzYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlYWRfZnJlcSBpcyA+IDAsIHRoaXMgdGhyZWFkIHNsZWVwcworICAgICAgICAgICAgICAgICAgICAgICAgICBtYXgoMCwgcmVhZF9mcmVxIC0gdGltZW91dCkgc2Vjb25kcy4KKyAgICAgICAgQHR5cGUgcmVhZF9mcmVxOiBpbnQKKyAgICAgICAgQHBhcmFtIHRocmVzaG9sZDogRmlsZSBkZXNjcmlwdG9yIHdpbGwgYmUgcmVhZCBvbmx5IGlmIHRoZSBhY2N1bXVsYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplIHRvIHJlYWQgYmVjb21lcyA+PSB0aHJlc2hvbGQuIElmICE9IDAsIHlvdSBsaWtlbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudCB0byB1c2UgaXQgaW4gY29tYmluYXRpb24gd2l0aCBhbiBhcHByb3ByaWF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBzZXQgZm9yIHJlYWRfZnJlcSBiZWNhdXNlIHdpdGhvdXQgdGhhdCB5b3Ugd291bGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAga2VlcCBsb29waW5nIHdpdGhvdXQgcmVhbGx5IHJlYWRpbmcgYW55dGhpbmcgYW5kIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW50aWwgdGhlIGFtb3VudCBvZiBldmVudHMgdG8gcmVhZCBpcyA+PSB0aHJlc2hvbGQuIEF0CisgICAgICAgICAgICAgICAgICAgICAgICAgIGxlYXN0IHdpdGggcmVhZF9mcmVxIHlvdSBtaWdodCBzbGVlcC4KKyAgICAgICAgQHR5cGUgdGhyZXNob2xkOiBpbnQKKyAgICAgICAgQHBhcmFtIHRpbWVvdXQ6CisgICAgICAgICAgICBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwjcG9sbGluZy1vYmplY3RzCisgICAgICAgIEB0eXBlIHRpbWVvdXQ6IGludAorICAgICAgICAiIiIKKyAgICAgICAgIyBJbml0IHRocmVhZGluZyBiYXNlIGNsYXNzCisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgIyBTdG9wIGNvbmRpdGlvbgorICAgICAgICBzZWxmLl9zdG9wX2V2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgIyBJbml0IE5vdGlmaWVyIGJhc2UgY2xhc3MKKyAgICAgICAgTm90aWZpZXIuX19pbml0X18oc2VsZiwgd2F0Y2hfbWFuYWdlciwgZGVmYXVsdF9wcm9jX2Z1biwgcmVhZF9mcmVxLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQsIHRpbWVvdXQpCisgICAgICAgICMgQ3JlYXRlIGEgbmV3IHBpcGUgdXNlZCBmb3IgdGhyZWFkIHRlcm1pbmF0aW9uCisgICAgICAgIHNlbGYuX3BpcGUgPSBvcy5waXBlKCkKKyAgICAgICAgc2VsZi5fcG9sbG9iai5yZWdpc3RlcihzZWxmLl9waXBlWzBdLCBzZWxlY3QuUE9MTElOKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdG9wIG5vdGlmaWVyJ3MgbG9vcC4gU3RvcCBub3RpZmljYXRpb24uIEpvaW4gdGhlIHRocmVhZC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3N0b3BfZXZlbnQuc2V0KCkKKyAgICAgICAgb3Mud3JpdGUoc2VsZi5fcGlwZVsxXSwgJ3N0b3AnKQorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLmpvaW4oc2VsZikKKyAgICAgICAgTm90aWZpZXIuc3RvcChzZWxmKQorICAgICAgICBzZWxmLl9wb2xsb2JqLnVucmVnaXN0ZXIoc2VsZi5fcGlwZVswXSkKKyAgICAgICAgb3MuY2xvc2Uoc2VsZi5fcGlwZVswXSkKKyAgICAgICAgb3MuY2xvc2Uoc2VsZi5fcGlwZVsxXSkKKworICAgIGRlZiBsb29wKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhyZWFkJ3MgbWFpbiBsb29wLiBEb24ndCBtZWFudCB0byBiZSBjYWxsZWQgYnkgdXNlciBkaXJlY3RseS4KKyAgICAgICAgQ2FsbCBpbmhlcml0ZWQgc3RhcnQoKSBtZXRob2QgaW5zdGVhZC4KKworICAgICAgICBFdmVudHMgYXJlIHJlYWQgb25seSBvbmNlIHRpbWUgZXZlcnkgbWluKHJlYWRfZnJlcSwgdGltZW91dCkKKyAgICAgICAgc2Vjb25kcyBhdCBiZXN0IGFuZCBvbmx5IGlmIHRoZSBzaXplIG9mIGV2ZW50cyB0byByZWFkIGlzID49IHRocmVzaG9sZC4KKyAgICAgICAgIiIiCisgICAgICAgICMgV2hlbiB0aGUgbG9vcCBtdXN0IGJlIHRlcm1pbmF0ZWQgLnN0b3AoKSBpcyBjYWxsZWQsICdzdG9wJworICAgICAgICAjIGlzIHdyaXR0ZW4gdG8gcGlwZSBmZCBzbyBwb2xsKCkgcmV0dXJucyBhbmQgLmNoZWNrX2V2ZW50cygpCisgICAgICAgICMgcmV0dXJucyBGYWxzZSB3aGljaCBtYWtlIGV2YWx1YXRlIHRoZSBXaGlsZSdzIHN0b3AgY29uZGl0aW9uCisgICAgICAgICMgLl9zdG9wX2V2ZW50LmlzU2V0KCkgd2ljaCBwdXQgYW4gZW5kIHRvIHRoZSB0aHJlYWQncyBleGVjdXRpb24uCisgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9zdG9wX2V2ZW50LmlzU2V0KCk6CisgICAgICAgICAgICBzZWxmLnByb2Nlc3NfZXZlbnRzKCkKKyAgICAgICAgICAgIHJlZl90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIGlmIHNlbGYuY2hlY2tfZXZlbnRzKCk6CisgICAgICAgICAgICAgICAgc2VsZi5fc2xlZXAocmVmX3RpbWUpCisgICAgICAgICAgICAgICAgc2VsZi5yZWFkX2V2ZW50cygpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3RhcnQgdGhyZWFkJ3MgbG9vcDogcmVhZCBhbmQgcHJvY2VzcyBldmVudHMgdW50aWwgdGhlIG1ldGhvZAorICAgICAgICBzdG9wKCkgaXMgY2FsbGVkLgorICAgICAgICBOZXZlciBjYWxsIHRoaXMgbWV0aG9kIGRpcmVjdGx5LCBpbnN0ZWFkIGNhbGwgdGhlIHN0YXJ0KCkgbWV0aG9kCisgICAgICAgIGluaGVyaXRlZCBmcm9tIHRocmVhZGluZy5UaHJlYWQsIHdoaWNoIHRoZW4gd2lsbCBjYWxsIHJ1bigpIGluCisgICAgICAgIGl0cyB0dXJuLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5sb29wKCkKKworCitjbGFzcyBBc3luY05vdGlmaWVyKGFzeW5jb3JlLmZpbGVfZGlzcGF0Y2hlciwgTm90aWZpZXIpOgorICAgICIiIgorICAgIFRoaXMgbm90aWZpZXIgaW5oZXJpdHMgZnJvbSBhc3luY29yZS5maWxlX2Rpc3BhdGNoZXIgaW4gb3JkZXIgdG8gYmUgYWJsZSB0bworICAgIHVzZSBweWlub3RpZnkgYWxvbmcgd2l0aCB0aGUgYXN5bmNvcmUgZnJhbWV3b3JrLgorCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdhdGNoX21hbmFnZXIsIGRlZmF1bHRfcHJvY19mdW49Tm9uZSwgcmVhZF9mcmVxPTAsCisgICAgICAgICAgICAgICAgIHRocmVzaG9sZD0wLCB0aW1lb3V0PU5vbmUsIGNoYW5uZWxfbWFwPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgSW5pdGlhbGl6ZXMgdGhlIGFzeW5jIG5vdGlmaWVyLiBUaGUgb25seSBhZGRpdGlvbmFsIHBhcmFtZXRlciBpcworICAgICAgICAnY2hhbm5lbF9tYXAnIHdoaWNoIGlzIHRoZSBvcHRpb25hbCBhc3luY29yZSBwcml2YXRlIG1hcC4gU2VlCisgICAgICAgIE5vdGlmaWVyIGNsYXNzIGZvciB0aGUgbWVhbmluZyBvZiB0aGUgb3RoZXJzIHBhcmFtZXRlcnMuCisKKyAgICAgICAgIiIiCisgICAgICAgIE5vdGlmaWVyLl9faW5pdF9fKHNlbGYsIHdhdGNoX21hbmFnZXIsIGRlZmF1bHRfcHJvY19mdW4sIHJlYWRfZnJlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZXNob2xkLCB0aW1lb3V0KQorICAgICAgICBhc3luY29yZS5maWxlX2Rpc3BhdGNoZXIuX19pbml0X18oc2VsZiwgc2VsZi5fZmQsIGNoYW5uZWxfbWFwKQorCisgICAgZGVmIGhhbmRsZV9yZWFkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV2hlbiBhc3luY29yZSB0ZWxscyB1cyB3ZSBjYW4gcmVhZCBmcm9tIHRoZSBmZCwgd2UgcHJvY2VlZCBwcm9jZXNzaW5nCisgICAgICAgIGV2ZW50cy4gVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gZm9yIGhhbmRsaW5nIGEgbm90aWZpY2F0aW9uCisgICAgICAgIGRpZmZlcmVudGx5LgorCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnJlYWRfZXZlbnRzKCkKKyAgICAgICAgc2VsZi5wcm9jZXNzX2V2ZW50cygpCisKKworY2xhc3MgVG9ybmFkb0FzeW5jTm90aWZpZXIoTm90aWZpZXIpOgorICAgICIiIgorICAgIFRvcm5hZG8gaW9sb29wIGFkYXB0ZXIuCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2F0Y2hfbWFuYWdlciwgaW9sb29wLCBjYWxsYmFjaz1Ob25lLAorICAgICAgICAgICAgICAgICBkZWZhdWx0X3Byb2NfZnVuPU5vbmUsIHJlYWRfZnJlcT0wLCB0aHJlc2hvbGQ9MCwgdGltZW91dD1Ob25lLAorICAgICAgICAgICAgICAgICBjaGFubmVsX21hcD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIE5vdGUgdGhhdCBpZiBsYXRlciB5b3UgbXVzdCBjYWxsIGlvbG9vcC5jbG9zZSgpIGJlIHN1cmUgdG8gbGV0IHRoZQorICAgICAgICBkZWZhdWx0IHBhcmFtZXRlciB0byBhbGxfZmRzPUZhbHNlLgorCisgICAgICAgIFNlZSBleGFtcGxlIHRvcm5hZG9fbm90aWZpZXIucHkgZm9yIGFuIGV4YW1wbGUgdXNpbmcgdGhpcyBub3RpZmllci4KKworICAgICAgICBAcGFyYW0gaW9sb29wOiBUb3JuYWRvJ3MgSU8gbG9vcC4KKyAgICAgICAgQHR5cGUgaW9sb29wOiB0b3JuYWRvLmlvbG9vcC5JT0xvb3AgaW5zdGFuY2UuCisgICAgICAgIEBwYXJhbSBjYWxsYmFjazogRnVuY3RvciBjYWxsZWQgYXQgdGhlIGVuZCBvZiBlYWNoIGNhbGwgdG8gaGFuZGxlX3JlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAoSU9Mb29wJ3MgcmVhZCBoYW5kbGVyKS4gRXhwZWN0cyB0byByZWNlaXZlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyIG9iamVjdCAoc2VsZikgYXMgc2luZ2xlIHBhcmFtZXRlci4KKyAgICAgICAgQHR5cGUgY2FsbGJhY2s6IGNhbGxhYmxlIG9iamVjdCBvciBmdW5jdGlvbgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5pb19sb29wID0gaW9sb29wCisgICAgICAgIHNlbGYuaGFuZGxlX3JlYWRfY2FsbGJhY2sgPSBjYWxsYmFjaworICAgICAgICBOb3RpZmllci5fX2luaXRfXyhzZWxmLCB3YXRjaF9tYW5hZ2VyLCBkZWZhdWx0X3Byb2NfZnVuLCByZWFkX2ZyZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZCwgdGltZW91dCkKKyAgICAgICAgaW9sb29wLmFkZF9oYW5kbGVyKHNlbGYuX2ZkLCBzZWxmLmhhbmRsZV9yZWFkLCBpb2xvb3AuUkVBRCkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBzZWxmLmlvX2xvb3AucmVtb3ZlX2hhbmRsZXIoc2VsZi5fZmQpCisgICAgICAgIE5vdGlmaWVyLnN0b3Aoc2VsZikKKworICAgIGRlZiBoYW5kbGVfcmVhZChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiIKKyAgICAgICAgU2VlIGNvbW1lbnQgaW4gQXN5bmNOb3RpZmllci4KKworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5yZWFkX2V2ZW50cygpCisgICAgICAgIHNlbGYucHJvY2Vzc19ldmVudHMoKQorICAgICAgICBpZiBzZWxmLmhhbmRsZV9yZWFkX2NhbGxiYWNrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5oYW5kbGVfcmVhZF9jYWxsYmFjayhzZWxmKQorCisKK2NsYXNzIEFzeW5jaW9Ob3RpZmllcihOb3RpZmllcik6CisgICAgIiIiCisKKyAgICBhc3luY2lvL3Ryb2xsaXVzIGV2ZW50IGxvb3AgYWRhcHRlci4KKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3YXRjaF9tYW5hZ2VyLCBsb29wLCBjYWxsYmFjaz1Ob25lLAorICAgICAgICAgICAgICAgICBkZWZhdWx0X3Byb2NfZnVuPU5vbmUsIHJlYWRfZnJlcT0wLCB0aHJlc2hvbGQ9MCwgdGltZW91dD1Ob25lKToKKyAgICAgICAgIiIiCisKKyAgICAgICAgU2VlIGV4YW1wbGVzL2FzeW5jaW9fbm90aWZpZXIucHkgZm9yIGFuIGV4YW1wbGUgdXNhZ2UuCisKKyAgICAgICAgQHBhcmFtIGxvb3A6IGFzeW5jaW8gb3IgdHJvbGxpdXMgZXZlbnQgbG9vcCBpbnN0YW5jZS4KKyAgICAgICAgQHR5cGUgbG9vcDogYXN5bmNpby5CYXNlRXZlbnRMb29wIG9yIHRyb2xsaXVzLkJhc2VFdmVudExvb3AgaW5zdGFuY2UuCisgICAgICAgIEBwYXJhbSBjYWxsYmFjazogRnVuY3RvciBjYWxsZWQgYXQgdGhlIGVuZCBvZiBlYWNoIGNhbGwgdG8gaGFuZGxlX3JlYWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgRXhwZWN0cyB0byByZWNlaXZlIHRoZSBub3RpZmllciBvYmplY3QgKHNlbGYpIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlIHBhcmFtZXRlci4KKyAgICAgICAgQHR5cGUgY2FsbGJhY2s6IGNhbGxhYmxlIG9iamVjdCBvciBmdW5jdGlvbgorCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmxvb3AgPSBsb29wCisgICAgICAgIHNlbGYuaGFuZGxlX3JlYWRfY2FsbGJhY2sgPSBjYWxsYmFjaworICAgICAgICBOb3RpZmllci5fX2luaXRfXyhzZWxmLCB3YXRjaF9tYW5hZ2VyLCBkZWZhdWx0X3Byb2NfZnVuLCByZWFkX2ZyZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZCwgdGltZW91dCkKKyAgICAgICAgbG9vcC5hZGRfcmVhZGVyKHNlbGYuX2ZkLCBzZWxmLmhhbmRsZV9yZWFkKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX2ZkKQorICAgICAgICBOb3RpZmllci5zdG9wKHNlbGYpCisKKyAgICBkZWYgaGFuZGxlX3JlYWQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5yZWFkX2V2ZW50cygpCisgICAgICAgIHNlbGYucHJvY2Vzc19ldmVudHMoKQorICAgICAgICBpZiBzZWxmLmhhbmRsZV9yZWFkX2NhbGxiYWNrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5oYW5kbGVfcmVhZF9jYWxsYmFjayhzZWxmKQorCisKK2NsYXNzIFdhdGNoOgorICAgICIiIgorICAgIFJlcHJlc2VudCBhIHdhdGNoLCBpLmUuIGEgZmlsZSBvciBkaXJlY3RvcnkgYmVpbmcgd2F0Y2hlZC4KKworICAgICIiIgorICAgIF9fc2xvdHNfXyA9ICgnd2QnLCAncGF0aCcsICdtYXNrJywgJ3Byb2NfZnVuJywgJ2F1dG9fYWRkJywKKyAgICAgICAgICAgICAgICAgJ2V4Y2x1ZGVfZmlsdGVyJywgJ2RpcicpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2QsIHBhdGgsIG1hc2ssIHByb2NfZnVuLCBhdXRvX2FkZCwgZXhjbHVkZV9maWx0ZXIpOgorICAgICAgICAiIiIKKyAgICAgICAgSW5pdGlhbGl6YXRpb25zLgorCisgICAgICAgIEBwYXJhbSB3ZDogV2F0Y2ggZGVzY3JpcHRvci4KKyAgICAgICAgQHR5cGUgd2Q6IGludAorICAgICAgICBAcGFyYW0gcGF0aDogUGF0aCBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkgYmVpbmcgd2F0Y2hlZC4KKyAgICAgICAgQHR5cGUgcGF0aDogc3RyCisgICAgICAgIEBwYXJhbSBtYXNrOiBNYXNrLgorICAgICAgICBAdHlwZSBtYXNrOiBpbnQKKyAgICAgICAgQHBhcmFtIHByb2NfZnVuOiBQcm9jZXNzaW5nIGNhbGxhYmxlIG9iamVjdC4KKyAgICAgICAgQHR5cGUgcHJvY19mdW46CisgICAgICAgIEBwYXJhbSBhdXRvX2FkZDogQXV0b21hdGljYWxseSBhZGQgd2F0Y2hlcyBvbiBuZXcgZGlyZWN0b3JpZXMuCisgICAgICAgIEB0eXBlIGF1dG9fYWRkOiBib29sCisgICAgICAgIEBwYXJhbSBleGNsdWRlX2ZpbHRlcjogQm9vbGVhbiBmdW5jdGlvbiwgdXNlZCB0byBleGNsdWRlIG5ldworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIGZyb20gYmVpbmcgYXV0b21hdGljYWxseSB3YXRjaGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBXYXRjaE1hbmFnZXIuX19pbml0X18KKyAgICAgICAgQHR5cGUgZXhjbHVkZV9maWx0ZXI6IGNhbGxhYmxlIG9iamVjdAorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi53ZCA9IHdkCisgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKyAgICAgICAgc2VsZi5tYXNrID0gbWFzaworICAgICAgICBzZWxmLnByb2NfZnVuID0gcHJvY19mdW4KKyAgICAgICAgc2VsZi5hdXRvX2FkZCA9IGF1dG9fYWRkCisgICAgICAgIHNlbGYuZXhjbHVkZV9maWx0ZXIgPSBleGNsdWRlX2ZpbHRlcgorICAgICAgICBzZWxmLmRpciA9IG9zLnBhdGguaXNkaXIoc2VsZi5wYXRoKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQHJldHVybjogU3RyaW5nIHJlcHJlc2VudGF0aW9uLgorICAgICAgICBAcnR5cGU6IHN0cgorICAgICAgICAiIiIKKyAgICAgICAgcyA9ICcgJy5qb2luKFsnJXMlcyVzJyAlIChvdXRwdXRfZm9ybWF0LmZpZWxkX25hbWUoYXR0ciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2Zvcm1hdC5wdW5jdHVhdGlvbignPScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mb3JtYXQuZmllbGRfdmFsdWUoZ2V0YXR0cihzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyKSkpIFwKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgYXR0ciBpbiBzZWxmLl9fc2xvdHNfXyBpZiBub3QgYXR0ci5zdGFydHN3aXRoKCdfJyldKQorCisgICAgICAgIHMgPSAnJXMlcyAlcyAlcycgJSAob3V0cHV0X2Zvcm1hdC5wdW5jdHVhdGlvbignPCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mb3JtYXQuY2xhc3NfbmFtZShzZWxmLl9fY2xhc3NfXy5fX25hbWVfXyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZm9ybWF0LnB1bmN0dWF0aW9uKCc+JykpCisgICAgICAgIHJldHVybiBzCisKKworY2xhc3MgRXhjbHVkZUZpbHRlcjoKKyAgICAiIiIKKyAgICBFeGNsdWRlRmlsdGVyIGlzIGFuIGV4Y2x1c2lvbiBmaWx0ZXIuCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYXJnX2xzdCk6CisgICAgICAgICIiIgorICAgICAgICBFeGFtcGxlczoKKyAgICAgICAgICBlZjEgPSBFeGNsdWRlRmlsdGVyKFsiL2V0Yy9yYy4qIiwgIi9ldGMvaG9zdG5hbWUiXSkKKyAgICAgICAgICBlZjIgPSBFeGNsdWRlRmlsdGVyKCIvbXkvcGF0aC9leGNsdWRlLmxzdCIpCisgICAgICAgICAgV2hlcmUgZXhjbHVkZS5sc3QgY29udGFpbnM6CisgICAgICAgICAgL2V0Yy9yYy4qCisgICAgICAgICAgL2V0Yy9ob3N0bmFtZQorCisgICAgICAgIE5vdGU6IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBleGNsdWRlIGEgZmlsZSBpZiBpdHMgZW5jYXBzdWxhdGluZworICAgICAgICAgICAgICBkaXJlY3RvcnkgaXMgaXRzZWxmIHdhdGNoZWQuIFNlZSB0aGlzIGlzc3VlIGZvciBtb3JlIGRldGFpbHMKKyAgICAgICAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL3NlYi1tL3B5aW5vdGlmeS9pc3N1ZXMvMzEKKworICAgICAgICBAcGFyYW0gYXJnX2xzdDogaXMgZWl0aGVyIGEgbGlzdCBvZiBwYXR0ZXJucyBvciBhIGZpbGVuYW1lIGZyb20gd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5zIHdpbGwgYmUgbG9hZGVkLgorICAgICAgICBAdHlwZSBhcmdfbHN0OiBsaXN0IG9mIHN0ciBvciBzdHIKKyAgICAgICAgIiIiCisgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJnX2xzdCwgc3RyKToKKyAgICAgICAgICAgIGxzdCA9IHNlbGYuX2xvYWRfcGF0dGVybnNfZnJvbV9maWxlKGFyZ19sc3QpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShhcmdfbHN0LCBsaXN0KToKKyAgICAgICAgICAgIGxzdCA9IGFyZ19sc3QKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgorCisgICAgICAgIHNlbGYuX2xyZWdleCA9IFtdCisgICAgICAgIGZvciByZWdleCBpbiBsc3Q6CisgICAgICAgICAgICBzZWxmLl9scmVnZXguYXBwZW5kKHJlLmNvbXBpbGUocmVnZXgsIHJlLlVOSUNPREUpKQorCisgICAgZGVmIF9sb2FkX3BhdHRlcm5zX2Zyb21fZmlsZShzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIGxzdCA9IFtdCisgICAgICAgIGZpbGVfb2JqID0gZmlsZShmaWxlbmFtZSwgJ3InKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmaWxlX29iai5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICAjIFRyaW0gbGVhZGluZyBhbiB0cmFpbGluZyB3aGl0ZXNwYWNlcworICAgICAgICAgICAgICAgIHBhdHRlcm4gPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgcGF0dGVybiBvciBwYXR0ZXJuLnN0YXJ0c3dpdGgoJyMnKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBsc3QuYXBwZW5kKHBhdHRlcm4pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmaWxlX29iai5jbG9zZSgpCisgICAgICAgIHJldHVybiBsc3QKKworICAgIGRlZiBfbWF0Y2goc2VsZiwgcmVnZXgsIHBhdGgpOgorICAgICAgICByZXR1cm4gcmVnZXgubWF0Y2gocGF0aCkgaXMgbm90IE5vbmUKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiCisgICAgICAgIEBwYXJhbSBwYXRoOiBQYXRoIHRvIG1hdGNoIGFnYWluc3QgcHJvdmlkZWQgcmVnZXhwcy4KKyAgICAgICAgQHR5cGUgcGF0aDogc3RyCisgICAgICAgIEByZXR1cm46IFJldHVybiBUcnVlIGlmIHBhdGggaGFzIGJlZW4gbWF0Y2hlZCBhbmQgc2hvdWxkCisgICAgICAgICAgICAgICAgIGJlIGV4Y2x1ZGVkLCBGYWxzZSBvdGhlcndpc2UuCisgICAgICAgIEBydHlwZTogYm9vbAorICAgICAgICAiIiIKKyAgICAgICAgZm9yIHJlZ2V4IGluIHNlbGYuX2xyZWdleDoKKyAgICAgICAgICAgIGlmIHNlbGYuX21hdGNoKHJlZ2V4LCBwYXRoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworCitjbGFzcyBXYXRjaE1hbmFnZXJFcnJvcihFeGNlcHRpb24pOgorICAgICIiIgorICAgIFdhdGNoTWFuYWdlciBFeGNlcHRpb24uIFJhaXNlZCBvbiBlcnJvciBlbmNvdW50ZXJlZCBvbiB3YXRjaGVzCisgICAgb3BlcmF0aW9ucy4KKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2csIHdtZCk6CisgICAgICAgICIiIgorICAgICAgICBAcGFyYW0gbXNnOiBFeGNlcHRpb24gc3RyaW5nJ3MgZGVzY3JpcHRpb24uCisgICAgICAgIEB0eXBlIG1zZzogc3RyaW5nCisgICAgICAgIEBwYXJhbSB3bWQ6IFRoaXMgZGljdGlvbmFyeSBjb250YWlucyB0aGUgd2QgYXNzaWduZWQgdG8gcGF0aHMgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHNhbWUgY2FsbCBmb3Igd2hpY2ggd2F0Y2hlcyB3ZXJlIHN1Y2Nlc3NmdWxseSBhZGRlZC4KKyAgICAgICAgQHR5cGUgd21kOiBkaWN0CisgICAgICAgICIiIgorICAgICAgICBzZWxmLndtZCA9IHdtZAorICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbXNnKQorCisKK2NsYXNzIFdhdGNoTWFuYWdlcjoKKyAgICAiIiIKKyAgICBQcm92aWRlIG9wZXJhdGlvbnMgZm9yIHdhdGNoaW5nIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4gSXRzIGludGVybmFsCisgICAgZGljdGlvbmFyeSBpcyB1c2VkIHRvIHJlZmVyZW5jZSB3YXRjaGVkIGl0ZW1zLiBXaGVuIHVzZWQgaW5zaWRlCisgICAgdGhyZWFkZWQgY29kZSwgb25lIG11c3QgaW5zdGFuY2lhdGUgYXMgbWFueSBXYXRjaE1hbmFnZXIgaW5zdGFuY2VzIGFzCisgICAgdGhlcmUgYXJlIFRocmVhZGVkTm90aWZpZXIgaW5zdGFuY2VzLgorCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4Y2x1ZGVfZmlsdGVyPWxhbWJkYSBwYXRoOiBGYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBJbml0aWFsaXphdGlvbjogaW5pdCBpbm90aWZ5LCBpbml0IHdhdGNoIG1hbmFnZXIgZGljdGlvbmFyeS4KKyAgICAgICAgUmFpc2UgT1NFcnJvciBpZiBpbml0aWFsaXphdGlvbiBmYWlscywgcmFpc2UgSW5vdGlmeUJpbmRpbmdOb3RGb3VuZEVycm9yCisgICAgICAgIGlmIG5vIGlub3RpZnkgYmluZGluZyB3YXMgZm91bmQgKHRocm91Z2ggY3R5cGVzIG9yIGZyb20gZGlyZWN0IGFjY2VzcyB0bworICAgICAgICBzeXNjYWxscykuCisKKyAgICAgICAgQHBhcmFtIGV4Y2x1ZGVfZmlsdGVyOiBib29sZWFuIGZ1bmN0aW9uLCByZXR1cm5zIFRydWUgaWYgY3VycmVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggbXVzdCBiZSBleGNsdWRlZCBmcm9tIGJlaW5nIHdhdGNoZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVuaWVudCBmb3IgcHJvdmlkaW5nIGEgY29tbW9uIGV4Y2x1c2lvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciBmb3IgZXZlcnkgY2FsbCB0byBhZGRfd2F0Y2guCisgICAgICAgIEB0eXBlIGV4Y2x1ZGVfZmlsdGVyOiBjYWxsYWJsZSBvYmplY3QKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2lnbm9yZV9ldmVudHMgPSBGYWxzZQorICAgICAgICBzZWxmLl9leGNsdWRlX2ZpbHRlciA9IGV4Y2x1ZGVfZmlsdGVyCisgICAgICAgIHNlbGYuX3dtZCA9IHt9ICAjIHdhdGNoIGRpY3Qga2V5OiB3YXRjaCBkZXNjcmlwdG9yLCB2YWx1ZTogd2F0Y2gKKworICAgICAgICBzZWxmLl9pbm90aWZ5X3dyYXBwZXIgPSBJTm90aWZ5V3JhcHBlci5jcmVhdGUoKQorICAgICAgICBpZiBzZWxmLl9pbm90aWZ5X3dyYXBwZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIElub3RpZnlCaW5kaW5nTm90Rm91bmRFcnJvcigpCisKKyAgICAgICAgc2VsZi5fZmQgPSBzZWxmLl9pbm90aWZ5X3dyYXBwZXIuaW5vdGlmeV9pbml0KCkgIyBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgaWYgc2VsZi5fZmQgPCAwOgorICAgICAgICAgICAgZXJyID0gJ0Nhbm5vdCBpbml0aWFsaXplIG5ldyBpbnN0YW5jZSBvZiBpbm90aWZ5LCAlcycKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyICUgc2VsZi5faW5vdGlmeV93cmFwcGVyLnN0cl9lcnJubygpKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2xvc2UgaW5vdGlmeSdzIGZpbGUgZGVzY3JpcHRvciwgdGhpcyBhY3Rpb24gd2lsbCBhbHNvIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgcmVtb3ZlIChpLmUuIHN0b3Agd2F0Y2hpbmcpIGFsbCBpdHMgYXNzb2NpYXRlZCB3YXRjaCBkZXNjcmlwdG9ycy4KKyAgICAgICAgQWZ0ZXIgYSBjYWxsIHRvIHRoaXMgbWV0aG9kIHRoZSBXYXRjaE1hbmFnZXIncyBpbnN0YW5jZSBiZWNvbWUgdXNlbGVzcworICAgICAgICBhbmQgY2Fubm90IGJlIHJldXNlZCwgYSBuZXcgaW5zdGFuY2UgbXVzdCB0aGVuIGJlIGluc3RhbmNpYXRlZC4gSXQKKyAgICAgICAgbWFrZXMgc2Vuc2UgdG8gY2FsbCB0aGlzIG1ldGhvZCBpbiBmZXcgc2l0dWF0aW9ucyBmb3IgaW5zdGFuY2UgaWYKKyAgICAgICAgc2V2ZXJhbCBpbmRlcGVuZGFudCBXYXRjaE1hbmFnZXIgbXVzdCBiZSBpbnN0YW5jaWF0ZWQgb3IgaWYgYWxsIHdhdGNoZXMKKyAgICAgICAgbXVzdCBiZSByZW1vdmVkIGFuZCBubyBvdGhlciB3YXRjaGVzIG5lZWQgdG8gYmUgYWRkZWQuCisgICAgICAgICIiIgorICAgICAgICBvcy5jbG9zZShzZWxmLl9mZCkKKworICAgIGRlZiBnZXRfZmQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYXNzaWduZWQgaW5vdGlmeSdzIGZpbGUgZGVzY3JpcHRvci4KKworICAgICAgICBAcmV0dXJuOiBGaWxlIGRlc2NyaXB0b3IuCisgICAgICAgIEBydHlwZTogaW50CisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZmQKKworICAgIGRlZiBnZXRfd2F0Y2goc2VsZiwgd2QpOgorICAgICAgICAiIiIKKyAgICAgICAgR2V0IHdhdGNoIGZyb20gcHJvdmlkZWQgd2F0Y2ggZGVzY3JpcHRvciB3ZC4KKworICAgICAgICBAcGFyYW0gd2Q6IFdhdGNoIGRlc2NyaXB0b3IuCisgICAgICAgIEB0eXBlIHdkOiBpbnQKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl93bWQuZ2V0KHdkKQorCisgICAgZGVmIGRlbF93YXRjaChzZWxmLCB3ZCk6CisgICAgICAgICIiIgorICAgICAgICBSZW1vdmUgd2F0Y2ggZW50cnkgYXNzb2NpYXRlZCB0byB3YXRjaCBkZXNjcmlwdG9yIHdkLgorCisgICAgICAgIEBwYXJhbSB3ZDogV2F0Y2ggZGVzY3JpcHRvci4KKyAgICAgICAgQHR5cGUgd2Q6IGludAorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIHNlbGYuX3dtZFt3ZF0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yLCBlcnI6CisgICAgICAgICAgICBsb2cuZXJyb3IoJ0Nhbm5vdCBkZWxldGUgdW5rbm93biB3YXRjaCBkZXNjcmlwdG9yICVzJyAlIHN0cihlcnIpKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHdhdGNoZXMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBHZXQgYSByZWZlcmVuY2Ugb24gdGhlIGludGVybmFsIHdhdGNoIG1hbmFnZXIgZGljdGlvbmFyeS4KKworICAgICAgICBAcmV0dXJuOiBJbnRlcm5hbCB3YXRjaCBtYW5hZ2VyIGRpY3Rpb25hcnkuCisgICAgICAgIEBydHlwZTogZGljdAorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3dtZAorCisgICAgZGVmIF9fZm9ybWF0X3BhdGgoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIgorICAgICAgICBGb3JtYXQgcGF0aCB0byBpdHMgaW50ZXJuYWwgKHN0b3JlZCBpbiB3YXRjaCBtYW5hZ2VyKSByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgICMgVW5pY29kZSBzdHJpbmdzIGFyZSBjb252ZXJ0ZWQgYmFjayB0byBzdHJpbmdzLCBiZWNhdXNlIGl0IHNlZW1zCisgICAgICAgICMgdGhhdCBpbm90aWZ5X2FkZF93YXRjaCBmcm9tIGN0eXBlcyBkb2VzIG5vdCB3b3JrIHdlbGwgd2hlbgorICAgICAgICAjIGl0IHJlY2VpdmVzIGFuIGN0eXBlcy5jcmVhdGVfdW5pY29kZV9idWZmZXIgaW5zdGFuY2UgYXMgYXJndW1lbnQuCisgICAgICAgICMgVGhlcmVmb3JlIGV2ZW4gd2QgYXJlIGluZGV4ZWQgd2l0aCBieXRlcyBzdHJpbmcgYW5kIG5vdCB3aXRoCisgICAgICAgICMgdW5pY29kZSBwYXRocy4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShwYXRoLCB1bmljb2RlKToKKyAgICAgICAgICAgIHBhdGggPSBwYXRoLmVuY29kZShzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkpCisgICAgICAgIHJldHVybiBvcy5wYXRoLm5vcm1wYXRoKHBhdGgpCisKKyAgICBkZWYgX19hZGRfd2F0Y2goc2VsZiwgcGF0aCwgbWFzaywgcHJvY19mdW4sIGF1dG9fYWRkLCBleGNsdWRlX2ZpbHRlcik6CisgICAgICAgICIiIgorICAgICAgICBBZGQgYSB3YXRjaCBvbiBwYXRoLCBidWlsZCBhIFdhdGNoIG9iamVjdCBhbmQgaW5zZXJ0IGl0IGluIHRoZQorICAgICAgICB3YXRjaCBtYW5hZ2VyIGRpY3Rpb25hcnkuIFJldHVybiB0aGUgd2QgdmFsdWUuCisgICAgICAgICIiIgorICAgICAgICBwYXRoID0gc2VsZi5fX2Zvcm1hdF9wYXRoKHBhdGgpCisgICAgICAgIGlmIGF1dG9fYWRkIGFuZCBub3QgbWFzayAmIElOX0NSRUFURToKKyAgICAgICAgICAgIG1hc2sgfD0gSU5fQ1JFQVRFCisgICAgICAgIHdkID0gc2VsZi5faW5vdGlmeV93cmFwcGVyLmlub3RpZnlfYWRkX3dhdGNoKHNlbGYuX2ZkLCBwYXRoLCBtYXNrKQorICAgICAgICBpZiB3ZCA8IDA6CisgICAgICAgICAgICByZXR1cm4gd2QKKyAgICAgICAgd2F0Y2ggPSBXYXRjaCh3ZD13ZCwgcGF0aD1wYXRoLCBtYXNrPW1hc2ssIHByb2NfZnVuPXByb2NfZnVuLAorICAgICAgICAgICAgICAgICAgICAgIGF1dG9fYWRkPWF1dG9fYWRkLCBleGNsdWRlX2ZpbHRlcj1leGNsdWRlX2ZpbHRlcikKKyAgICAgICAgc2VsZi5fd21kW3dkXSA9IHdhdGNoCisgICAgICAgIGxvZy5kZWJ1ZygnTmV3ICVzJywgd2F0Y2gpCisgICAgICAgIHJldHVybiB3ZAorCisgICAgZGVmIF9fZ2xvYihzZWxmLCBwYXRoLCBkb19nbG9iKToKKyAgICAgICAgaWYgZG9fZ2xvYjoKKyAgICAgICAgICAgIHJldHVybiBnbG9iKHBhdGgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gW3BhdGhdCisKKyAgICBkZWYgYWRkX3dhdGNoKHNlbGYsIHBhdGgsIG1hc2ssIHByb2NfZnVuPU5vbmUsIHJlYz1GYWxzZSwKKyAgICAgICAgICAgICAgICAgIGF1dG9fYWRkPUZhbHNlLCBkb19nbG9iPUZhbHNlLCBxdWlldD1UcnVlLAorICAgICAgICAgICAgICAgICAgZXhjbHVkZV9maWx0ZXI9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBBZGQgd2F0Y2gocykgb24gdGhlIHByb3ZpZGVkIHxwYXRofChzKSB3aXRoIGFzc29jaWF0ZWQgfG1hc2t8IGZsYWcKKyAgICAgICAgdmFsdWUgYW5kIG9wdGlvbmFsbHkgd2l0aCBhIHByb2Nlc3NpbmcgfHByb2NfZnVufCBmdW5jdGlvbiBhbmQKKyAgICAgICAgcmVjdXJzaXZlIGZsYWcgfHJlY3wgc2V0IHRvIFRydWUuCisgICAgICAgIElkZWFsbHkgfHBhdGh8IGNvbXBvbmVudHMgc2hvdWxkIG5vdCBiZSB1bmljb2RlIG9iamVjdHMuIE5vdGUgdGhhdAorICAgICAgICBhbHRob3VnaCB1bmljb2RlIHBhdGhzIGFyZSBhY2NlcHRlZCB0aGVyZSBhcmUgY29udmVydGVkIHRvIGJ5dGUKKyAgICAgICAgc3RyaW5ncyBiZWZvcmUgYSB3YXRjaCBpcyBwdXQgb24gdGhhdCBwYXRoLiBUaGUgZW5jb2RpbmcgdXNlZCBmb3IKKyAgICAgICAgY29udmVydGluZyB0aGUgdW5pY29kZSBvYmplY3QgaXMgZ2l2ZW4gYnkgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpLgorICAgICAgICBJZiB8cGF0aHwgc2kgYWxyZWFkeSB3YXRjaGVkIGl0IGlzIGlnbm9yZWQsIGJ1dCBpZiBpdCBpcyBjYWxsZWQgd2l0aAorICAgICAgICBvcHRpb24gcmVjPVRydWUgYSB3YXRjaCBpcyBwdXQgb24gZWFjaCBvbmUgb2YgaXRzIG5vdC13YXRjaGVkCisgICAgICAgIHN1YmRpcmVjdG9yeS4KKworICAgICAgICBAcGFyYW0gcGF0aDogUGF0aCB0byB3YXRjaCwgdGhlIHBhdGggY2FuIGVpdGhlciBiZSBhIGZpbGUgb3IgYQorICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LiBBbHNvIGFjY2VwdHMgYSBzZXF1ZW5jZSAobGlzdCkgb2YgcGF0aHMuCisgICAgICAgIEB0eXBlIHBhdGg6IHN0cmluZyBvciBsaXN0IG9mIHN0cmluZ3MKKyAgICAgICAgQHBhcmFtIG1hc2s6IEJpdG1hc2sgb2YgZXZlbnRzLgorICAgICAgICBAdHlwZSBtYXNrOiBpbnQKKyAgICAgICAgQHBhcmFtIHByb2NfZnVuOiBQcm9jZXNzaW5nIG9iamVjdC4KKyAgICAgICAgQHR5cGUgcHJvY19mdW46IGZ1bmN0aW9uIG9yIFByb2Nlc3NFdmVudCBpbnN0YW5jZSBvciBpbnN0YW5jZSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgb25lIG9mIGl0cyBzdWJjbGFzc2VzIG9yIGNhbGxhYmxlIG9iamVjdC4KKyAgICAgICAgQHBhcmFtIHJlYzogUmVjdXJzaXZlbHkgYWRkIHdhdGNoZXMgZnJvbSBwYXRoIG9uIGFsbCBpdHMKKyAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3JpZXMsIHNldCB0byBGYWxzZSBieSBkZWZhdWx0IChkb2Vzbid0CisgICAgICAgICAgICAgICAgICAgIGZvbGxvd3Mgc3ltbGlua3MgaW4gYW55IGNhc2UpLgorICAgICAgICBAdHlwZSByZWM6IGJvb2wKKyAgICAgICAgQHBhcmFtIGF1dG9fYWRkOiBBdXRvbWF0aWNhbGx5IGFkZCB3YXRjaGVzIG9uIG5ld2x5IGNyZWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyBpbiB3YXRjaGVkIHBhcmVudCB8cGF0aHwgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgIElmIHxhdXRvX2FkZHwgaXMgVHJ1ZSwgSU5fQ1JFQVRFIGlzIG9yZWQgd2l0aCB8bWFza3wKKyAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSB3YXRjaCBpcyBhZGRlZC4KKyAgICAgICAgQHR5cGUgYXV0b19hZGQ6IGJvb2wKKyAgICAgICAgQHBhcmFtIGRvX2dsb2I6IERvIGdsb2JiaW5nIG9uIHBhdGhuYW1lIChzZWUgc3RhbmRhcmQgZ2xvYmJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbnMpLgorICAgICAgICBAdHlwZSBkb19nbG9iOiBib29sCisgICAgICAgIEBwYXJhbSBxdWlldDogaWYgRmFsc2UgcmFpc2VzIGEgV2F0Y2hNYW5hZ2VyRXJyb3IgZXhjZXB0aW9uIG9uCisgICAgICAgICAgICAgICAgICAgICAgZXJyb3IuIFNlZSBleGFtcGxlIG5vdF9xdWlldC5weS4KKyAgICAgICAgQHR5cGUgcXVpZXQ6IGJvb2wKKyAgICAgICAgQHBhcmFtIGV4Y2x1ZGVfZmlsdGVyOiBwcmVkaWNhdGUgKGJvb2xlYW4gZnVuY3Rpb24pLCB3aGljaCByZXR1cm5zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSBpZiB0aGUgY3VycmVudCBwYXRoIG11c3QgYmUgZXhjbHVkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGJlaW5nIHdhdGNoZWQuIFRoaXMgYXJndW1lbnQgaGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkZW5jZSBvdmVyIGV4Y2x1ZGVfZmlsdGVyIHBhc3NlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjbGFzcycgY29uc3RydWN0b3IuCisgICAgICAgIEB0eXBlIGV4Y2x1ZGVfZmlsdGVyOiBjYWxsYWJsZSBvYmplY3QKKyAgICAgICAgQHJldHVybjogZGljdCBvZiBwYXRocyBhc3NvY2lhdGVkIHRvIHdhdGNoIGRlc2NyaXB0b3JzLiBBIHdkIHZhbHVlCisgICAgICAgICAgICAgICAgIGlzIHBvc2l0aXZlIGlmIHRoZSB3YXRjaCB3YXMgYWRkZWQgc3VjZXNzZnVsbHksCisgICAgICAgICAgICAgICAgIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgbmVnYXRpdmUuIElmIHRoZSBwYXRoIHdhcyBpbnZhbGlkCisgICAgICAgICAgICAgICAgIG9yIHdhcyBhbHJlYWR5IHdhdGNoZWQgaXQgaXMgbm90IGluY2x1ZGVkIGludG8gdGhpcyByZXR1cm5lZAorICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5LgorICAgICAgICBAcnR5cGU6IGRpY3Qgb2Yge3N0cjogaW50fQorICAgICAgICAiIiIKKyAgICAgICAgcmV0XyA9IHt9ICMgcmV0dXJuIHtwYXRoOiB3ZCwgLi4ufQorCisgICAgICAgIGlmIGV4Y2x1ZGVfZmlsdGVyIGlzIE5vbmU6CisgICAgICAgICAgICBleGNsdWRlX2ZpbHRlciA9IHNlbGYuX2V4Y2x1ZGVfZmlsdGVyCisKKyAgICAgICAgIyBub3JtYWxpemUgYXJncyBhcyBsaXN0IGVsZW1lbnRzCisgICAgICAgIGZvciBucGF0aCBpbiBzZWxmLl9fZm9ybWF0X3BhcmFtKHBhdGgpOgorICAgICAgICAgICAgIyB1bml4IHBhdGhuYW1lIHBhdHRlcm4gZXhwYW5zaW9uCisgICAgICAgICAgICBmb3IgYXBhdGggaW4gc2VsZi5fX2dsb2IobnBhdGgsIGRvX2dsb2IpOgorICAgICAgICAgICAgICAgICMgcmVjdXJzaXZlbHkgbGlzdCBzdWJkaXJzIGFjY29yZGluZyB0byByZWMgcGFyYW0KKyAgICAgICAgICAgICAgICBmb3IgcnBhdGggaW4gc2VsZi5fX3dhbGtfcmVjKGFwYXRoLCByZWMpOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZXhjbHVkZV9maWx0ZXIocnBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgd2QgPSByZXRfW3JwYXRoXSA9IHNlbGYuX19hZGRfd2F0Y2gocnBhdGgsIG1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jX2Z1biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9fYWRkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZV9maWx0ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB3ZCA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gKCdhZGRfd2F0Y2g6IGNhbm5vdCB3YXRjaCAlcyBXRD0lZCwgJXMnICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJwYXRoLCB3ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbm90aWZ5X3dyYXBwZXIuc3RyX2Vycm5vKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHF1aWV0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2cuZXJyb3IoZXJyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFdhdGNoTWFuYWdlckVycm9yKGVyciwgcmV0XykKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgTGV0J3Mgc2F5IC0yIG1lYW5zICdleHBsaWNpdGVseSBleGNsdWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgIyBmcm9tIHdhdGNoaW5nJy4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldF9bcnBhdGhdID0gLTIKKyAgICAgICAgcmV0dXJuIHJldF8KKworICAgIGRlZiBfX2dldF9zdWJfcmVjKHNlbGYsIGxwYXRoKToKKyAgICAgICAgIiIiCisgICAgICAgIEdldCBldmVyeSB3ZCBmcm9tIHNlbGYuX3dtZCBpZiBpdHMgcGF0aCBpcyB1bmRlciB0aGUgcGF0aCBvZgorICAgICAgICBvbmUgKGF0IGxlYXN0KSBvZiB0aG9zZSBpbiBscGF0aC4gRG9lc24ndCBmb2xsb3cgc3ltbGlua3MuCisKKyAgICAgICAgQHBhcmFtIGxwYXRoOiBsaXN0IG9mIHdhdGNoIGRlc2NyaXB0b3IKKyAgICAgICAgQHR5cGUgbHBhdGg6IGxpc3Qgb2YgaW50CisgICAgICAgIEByZXR1cm46IGxpc3Qgb2Ygd2F0Y2ggZGVzY3JpcHRvcgorICAgICAgICBAcnR5cGU6IGxpc3Qgb2YgaW50CisgICAgICAgICIiIgorICAgICAgICBmb3IgZCBpbiBscGF0aDoKKyAgICAgICAgICAgIHJvb3QgPSBzZWxmLmdldF9wYXRoKGQpCisgICAgICAgICAgICBpZiByb290IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICMgYWx3YXlzIGtlZXAgcm9vdAorICAgICAgICAgICAgICAgIHlpZWxkIGQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBpZiBpbnZhbGlkCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBub3RoaW5nIGVsc2UgdG8gZXhwZWN0CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihyb290KToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIG5vcm1hbGl6YXRpb24KKyAgICAgICAgICAgIHJvb3QgPSBvcy5wYXRoLm5vcm1wYXRoKHJvb3QpCisgICAgICAgICAgICAjIHJlY3Vyc2lvbgorICAgICAgICAgICAgbGVuZCA9IGxlbihyb290KQorICAgICAgICAgICAgZm9yIGl3ZCBpbiBzZWxmLl93bWQuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBjdXIgPSBpd2RbMV0ucGF0aAorICAgICAgICAgICAgICAgIHByZWYgPSBvcy5wYXRoLmNvbW1vbnByZWZpeChbcm9vdCwgY3VyXSkKKyAgICAgICAgICAgICAgICBpZiByb290ID09IG9zLnNlcCBvciAobGVuKHByZWYpID09IGxlbmQgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGN1cikgPiBsZW5kIGFuZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cltsZW5kXSA9PSBvcy5zZXApOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBpd2RbMV0ud2QKKworICAgIGRlZiB1cGRhdGVfd2F0Y2goc2VsZiwgd2QsIG1hc2s9Tm9uZSwgcHJvY19mdW49Tm9uZSwgcmVjPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgYXV0b19hZGQ9RmFsc2UsIHF1aWV0PVRydWUpOgorICAgICAgICAiIiIKKyAgICAgICAgVXBkYXRlIGV4aXN0aW5nIHdhdGNoIGRlc2NyaXB0b3JzIHx3ZHwuIFRoZSB8bWFza3wgdmFsdWUsIHRoZQorICAgICAgICBwcm9jZXNzaW5nIG9iamVjdCB8cHJvY19mdW58LCB0aGUgcmVjdXJzaXZlIHBhcmFtIHxyZWN8IGFuZCB0aGUKKyAgICAgICAgfGF1dG9fYWRkfCBhbmQgfHF1aWV0fCBmbGFncyBjYW4gYWxsIGJlIHVwZGF0ZWQuCisKKyAgICAgICAgQHBhcmFtIHdkOiBXYXRjaCBEZXNjcmlwdG9yIHRvIHVwZGF0ZS4gQWxzbyBhY2NlcHRzIGEgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgIHdhdGNoIGRlc2NyaXB0b3JzLgorICAgICAgICBAdHlwZSB3ZDogaW50IG9yIGxpc3Qgb2YgaW50CisgICAgICAgIEBwYXJhbSBtYXNrOiBPcHRpb25hbCBuZXcgYml0bWFzayBvZiBldmVudHMuCisgICAgICAgIEB0eXBlIG1hc2s6IGludAorICAgICAgICBAcGFyYW0gcHJvY19mdW46IE9wdGlvbmFsIG5ldyBwcm9jZXNzaW5nIGZ1bmN0aW9uLgorICAgICAgICBAdHlwZSBwcm9jX2Z1bjogZnVuY3Rpb24gb3IgUHJvY2Vzc0V2ZW50IGluc3RhbmNlIG9yIGluc3RhbmNlIG9mCisgICAgICAgICAgICAgICAgICAgICAgICBvbmUgb2YgaXRzIHN1YmNsYXNzZXMgb3IgY2FsbGFibGUgb2JqZWN0LgorICAgICAgICBAcGFyYW0gcmVjOiBPcHRpb25hbGx5IGFkZHMgd2F0Y2hlcyByZWN1cnNpdmVseSBvbiBhbGwKKyAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3JpZXMgY29udGFpbmVkIGludG8gfHdkfCBkaXJlY3RvcnkuCisgICAgICAgIEB0eXBlIHJlYzogYm9vbAorICAgICAgICBAcGFyYW0gYXV0b19hZGQ6IEF1dG9tYXRpY2FsbHkgYWRkcyB3YXRjaGVzIG9uIG5ld2x5IGNyZWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyBpbiB0aGUgd2F0Y2gncyBwYXRoIGNvcnJlc3BvbmRpbmcgdG8gfHdkfC4KKyAgICAgICAgICAgICAgICAgICAgICAgICBJZiB8YXV0b19hZGR8IGlzIFRydWUsIElOX0NSRUFURSBpcyBvcmVkIHdpdGggfG1hc2t8CisgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgd2F0Y2ggaXMgdXBkYXRlZC4KKyAgICAgICAgQHR5cGUgYXV0b19hZGQ6IGJvb2wKKyAgICAgICAgQHBhcmFtIHF1aWV0OiBJZiBGYWxzZSByYWlzZXMgYSBXYXRjaE1hbmFnZXJFcnJvciBleGNlcHRpb24gb24KKyAgICAgICAgICAgICAgICAgICAgICBlcnJvci4gU2VlIGV4YW1wbGUgbm90X3F1aWV0LnB5CisgICAgICAgIEB0eXBlIHF1aWV0OiBib29sCisgICAgICAgIEByZXR1cm46IGRpY3Qgb2Ygd2F0Y2ggZGVzY3JpcHRvcnMgYXNzb2NpYXRlZCB0byBib29sZWFucyB2YWx1ZXMuCisgICAgICAgICAgICAgICAgIFRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgd2QgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5CisgICAgICAgICAgICAgICAgIHVwZGF0ZWQsIEZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgQHJ0eXBlOiBkaWN0IG9mIHtpbnQ6IGJvb2x9CisgICAgICAgICIiIgorICAgICAgICBsd2QgPSBzZWxmLl9fZm9ybWF0X3BhcmFtKHdkKQorICAgICAgICBpZiByZWM6CisgICAgICAgICAgICBsd2QgPSBzZWxmLl9fZ2V0X3N1Yl9yZWMobHdkKQorCisgICAgICAgIHJldF8gPSB7fSAgIyByZXR1cm4ge3dkOiBib29sLCAuLi59CisgICAgICAgIGZvciBhd2QgaW4gbHdkOgorICAgICAgICAgICAgYXBhdGggPSBzZWxmLmdldF9wYXRoKGF3ZCkKKyAgICAgICAgICAgIGlmIG5vdCBhcGF0aCBvciBhd2QgPCAwOgorICAgICAgICAgICAgICAgIGVyciA9ICd1cGRhdGVfd2F0Y2g6IGludmFsaWQgV0Q9JWQnICUgYXdkCisgICAgICAgICAgICAgICAgaWYgcXVpZXQ6CisgICAgICAgICAgICAgICAgICAgIGxvZy5lcnJvcihlcnIpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcmFpc2UgV2F0Y2hNYW5hZ2VyRXJyb3IoZXJyLCByZXRfKQorCisgICAgICAgICAgICBpZiBtYXNrOgorICAgICAgICAgICAgICAgIHdkXyA9IHNlbGYuX2lub3RpZnlfd3JhcHBlci5pbm90aWZ5X2FkZF93YXRjaChzZWxmLl9mZCwgYXBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2spCisgICAgICAgICAgICAgICAgaWYgd2RfIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgcmV0X1thd2RdID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gKCd1cGRhdGVfd2F0Y2g6IGNhbm5vdCB1cGRhdGUgJXMgV0Q9JWQsICVzJyAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXBhdGgsIHdkXywgc2VsZi5faW5vdGlmeV93cmFwcGVyLnN0cl9lcnJubygpKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgcXVpZXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2cuZXJyb3IoZXJyKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgV2F0Y2hNYW5hZ2VyRXJyb3IoZXJyLCByZXRfKQorCisgICAgICAgICAgICAgICAgYXNzZXJ0KGF3ZCA9PSB3ZF8pCisKKyAgICAgICAgICAgIGlmIHByb2NfZnVuIG9yIGF1dG9fYWRkOgorICAgICAgICAgICAgICAgIHdhdGNoXyA9IHNlbGYuX3dtZFthd2RdCisKKyAgICAgICAgICAgIGlmIHByb2NfZnVuOgorICAgICAgICAgICAgICAgIHdhdGNoXy5wcm9jX2Z1biA9IHByb2NfZnVuCisKKyAgICAgICAgICAgIGlmIGF1dG9fYWRkOgorICAgICAgICAgICAgICAgIHdhdGNoXy5hdXRvX2FkZCA9IGF1dG9fYWRkCisKKyAgICAgICAgICAgIHJldF9bYXdkXSA9IFRydWUKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygnVXBkYXRlZCB3YXRjaCAtICVzJywgc2VsZi5fd21kW2F3ZF0pCisgICAgICAgIHJldHVybiByZXRfCisKKyAgICBkZWYgX19mb3JtYXRfcGFyYW0oc2VsZiwgcGFyYW0pOgorICAgICAgICAiIiIKKyAgICAgICAgQHBhcmFtIHBhcmFtOiBQYXJhbWV0ZXIuCisgICAgICAgIEB0eXBlIHBhcmFtOiBzdHJpbmcgb3IgaW50CisgICAgICAgIEByZXR1cm46IHdyYXAgcGFyYW0uCisgICAgICAgIEBydHlwZTogbGlzdCBvZiB0eXBlKHBhcmFtKQorICAgICAgICAiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbSwgbGlzdCk6CisgICAgICAgICAgICBmb3IgcF8gaW4gcGFyYW06CisgICAgICAgICAgICAgICAgeWllbGQgcF8KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHlpZWxkIHBhcmFtCisKKyAgICBkZWYgZ2V0X3dkKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyB0aGUgd2F0Y2ggZGVzY3JpcHRvciBhc3NvY2lhdGVkIHRvIHBhdGguIFRoaXMgbWV0aG9kCisgICAgICAgIHByZXNlbnRzIGEgcHJvaGliaXRpdmUgY29zdCwgYWx3YXlzIHByZWZlciB0byBrZWVwIHRoZSBXRAorICAgICAgICByZXR1cm5lZCBieSBhZGRfd2F0Y2goKS4gSWYgdGhlIHBhdGggaXMgdW5rbm93biBpdCByZXR1cm5zIE5vbmUuCisKKyAgICAgICAgQHBhcmFtIHBhdGg6IFBhdGguCisgICAgICAgIEB0eXBlIHBhdGg6IHN0cgorICAgICAgICBAcmV0dXJuOiBXRCBvciBOb25lLgorICAgICAgICBAcnR5cGU6IGludCBvciBOb25lCisgICAgICAgICIiIgorICAgICAgICBwYXRoID0gc2VsZi5fX2Zvcm1hdF9wYXRoKHBhdGgpCisgICAgICAgIGZvciBpd2QgaW4gc2VsZi5fd21kLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBpd2RbMV0ucGF0aCA9PSBwYXRoOgorICAgICAgICAgICAgICAgIHJldHVybiBpd2RbMF0KKworICAgIGRlZiBnZXRfcGF0aChzZWxmLCB3ZCk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIHRoZSBwYXRoIGFzc29jaWF0ZWQgdG8gV0QsIGlmIFdEIGlzIHVua25vd24gaXQgcmV0dXJucyBOb25lLgorCisgICAgICAgIEBwYXJhbSB3ZDogV2F0Y2ggZGVzY3JpcHRvci4KKyAgICAgICAgQHR5cGUgd2Q6IGludAorICAgICAgICBAcmV0dXJuOiBQYXRoIG9yIE5vbmUuCisgICAgICAgIEBydHlwZTogc3RyaW5nIG9yIE5vbmUKKyAgICAgICAgIiIiCisgICAgICAgIHdhdGNoXyA9IHNlbGYuX3dtZC5nZXQod2QpCisgICAgICAgIGlmIHdhdGNoXyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiB3YXRjaF8ucGF0aAorCisgICAgZGVmIF9fd2Fsa19yZWMoc2VsZiwgdG9wLCByZWMpOgorICAgICAgICAiIiIKKyAgICAgICAgWWllbGRzIGVhY2ggc3ViZGlyZWN0b3JpZXMgb2YgdG9wLCBkb2Vzbid0IGZvbGxvdyBzeW1saW5rcy4KKyAgICAgICAgSWYgcmVjIGlzIGZhbHNlLCBvbmx5IHlpZWxkIHRvcC4KKworICAgICAgICBAcGFyYW0gdG9wOiByb290IGRpcmVjdG9yeS4KKyAgICAgICAgQHR5cGUgdG9wOiBzdHJpbmcKKyAgICAgICAgQHBhcmFtIHJlYzogcmVjdXJzaXZlIGZsYWcuCisgICAgICAgIEB0eXBlIHJlYzogYm9vbAorICAgICAgICBAcmV0dXJuOiBwYXRoIG9mIG9uZSBzdWJkaXJlY3RvcnkuCisgICAgICAgIEBydHlwZTogc3RyaW5nCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgcmVjIG9yIG9zLnBhdGguaXNsaW5rKHRvcCkgb3Igbm90IG9zLnBhdGguaXNkaXIodG9wKToKKyAgICAgICAgICAgIHlpZWxkIHRvcAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsodG9wKToKKyAgICAgICAgICAgICAgICB5aWVsZCByb290CisKKyAgICBkZWYgcm1fd2F0Y2goc2VsZiwgd2QsIHJlYz1GYWxzZSwgcXVpZXQ9VHJ1ZSk6CisgICAgICAgICIiIgorICAgICAgICBSZW1vdmVzIHdhdGNoKHMpLgorCisgICAgICAgIEBwYXJhbSB3ZDogV2F0Y2ggRGVzY3JpcHRvciBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkgdG8gdW53YXRjaC4KKyAgICAgICAgICAgICAgICAgICBBbHNvIGFjY2VwdHMgYSBsaXN0IG9mIFdEcy4KKyAgICAgICAgQHR5cGUgd2Q6IGludCBvciBsaXN0IG9mIGludC4KKyAgICAgICAgQHBhcmFtIHJlYzogUmVjdXJzaXZlbHkgcmVtb3ZlcyB3YXRjaGVzIG9uIGV2ZXJ5IGFscmVhZHkgd2F0Y2hlZAorICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3RvcmllcyBhbmQgc3ViZmlsZXMuCisgICAgICAgIEB0eXBlIHJlYzogYm9vbAorICAgICAgICBAcGFyYW0gcXVpZXQ6IElmIEZhbHNlIHJhaXNlcyBhIFdhdGNoTWFuYWdlckVycm9yIGV4Y2VwdGlvbiBvbgorICAgICAgICAgICAgICAgICAgICAgIGVycm9yLiBTZWUgZXhhbXBsZSBub3RfcXVpZXQucHkKKyAgICAgICAgQHR5cGUgcXVpZXQ6IGJvb2wKKyAgICAgICAgQHJldHVybjogZGljdCBvZiB3YXRjaCBkZXNjcmlwdG9ycyBhc3NvY2lhdGVkIHRvIGJvb2xlYW5zIHZhbHVlcy4KKyAgICAgICAgICAgICAgICAgVHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyB3ZCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkKKyAgICAgICAgICAgICAgICAgcmVtb3ZlZCwgRmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgICBAcnR5cGU6IGRpY3Qgb2Yge2ludDogYm9vbH0KKyAgICAgICAgIiIiCisgICAgICAgIGx3ZCA9IHNlbGYuX19mb3JtYXRfcGFyYW0od2QpCisgICAgICAgIGlmIHJlYzoKKyAgICAgICAgICAgIGx3ZCA9IHNlbGYuX19nZXRfc3ViX3JlYyhsd2QpCisKKyAgICAgICAgcmV0XyA9IHt9ICAjIHJldHVybiB7d2Q6IGJvb2wsIC4uLn0KKyAgICAgICAgZm9yIGF3ZCBpbiBsd2Q6CisgICAgICAgICAgICAjIHJlbW92ZSB3YXRjaAorICAgICAgICAgICAgd2RfID0gc2VsZi5faW5vdGlmeV93cmFwcGVyLmlub3RpZnlfcm1fd2F0Y2goc2VsZi5fZmQsIGF3ZCkKKyAgICAgICAgICAgIGlmIHdkXyA8IDA6CisgICAgICAgICAgICAgICAgcmV0X1thd2RdID0gRmFsc2UKKyAgICAgICAgICAgICAgICBlcnIgPSAoJ3JtX3dhdGNoOiBjYW5ub3QgcmVtb3ZlIFdEPSVkLCAlcycgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXdkLCBzZWxmLl9pbm90aWZ5X3dyYXBwZXIuc3RyX2Vycm5vKCkpKQorICAgICAgICAgICAgICAgIGlmIHF1aWV0OgorICAgICAgICAgICAgICAgICAgICBsb2cuZXJyb3IoZXJyKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHJhaXNlIFdhdGNoTWFuYWdlckVycm9yKGVyciwgcmV0XykKKworICAgICAgICAgICAgIyBSZW1vdmUgd2F0Y2ggZnJvbSBvdXIgZGljdGlvbmFyeQorICAgICAgICAgICAgaWYgYXdkIGluIHNlbGYuX3dtZDoKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5fd21kW2F3ZF0KKyAgICAgICAgICAgIHJldF9bYXdkXSA9IFRydWUKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygnV2F0Y2ggV0Q9JWQgKCVzKSByZW1vdmVkJywgYXdkLCBzZWxmLmdldF9wYXRoKGF3ZCkpCisgICAgICAgIHJldHVybiByZXRfCisKKworICAgIGRlZiB3YXRjaF90cmFuc2llbnRfZmlsZShzZWxmLCBmaWxlbmFtZSwgbWFzaywgcHJvY19jbGFzcyk6CisgICAgICAgICIiIgorICAgICAgICBXYXRjaCBhIHRyYW5zaWVudCBmaWxlLCB3aGljaCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGRlbGV0ZWQgZnJlcXVlbnRseQorICAgICAgICBvdmVyIHRpbWUgKGUuZy4gcGlkIGZpbGUpLgorCisgICAgICAgIEBhdHRlbnRpb246IEN1cnJlbnRseSB1bmRlciB0aGUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIGl0IGlzIG5vdAorICAgICAgICBwb3NzaWJsZSB0byBjb3JyZWN0bHkgd2F0Y2ggdGhlIGV2ZW50cyB0cmlnZ2VyZWQgaW50byB0aGUgc2FtZQorICAgICAgICBiYXNlIGRpcmVjdG9yeSB0aGFuIHRoZSBkaXJlY3Rvcnkgd2hlcmUgaXMgbG9jYXRlZCB0aGlzIHdhdGNoZWQKKyAgICAgICAgdHJhbnNpZW50IGZpbGUuIEZvciBpbnN0YW5jZSBpdCB3b3VsZCBiZSB3cm9uZyB0byBtYWtlIHRoZXNlCisgICAgICAgIHR3byBzdWNjZXNzaXZlIGNhbGxzOiB3bS53YXRjaF90cmFuc2llbnRfZmlsZSgnL3Zhci9ydW4vZm9vLnBpZCcsIC4uLikKKyAgICAgICAgYW5kIHdtLmFkZF93YXRjaCgnL3Zhci9ydW4vJywgLi4uKQorCisgICAgICAgIEBwYXJhbSBmaWxlbmFtZTogRmlsZW5hbWUuCisgICAgICAgIEB0eXBlIGZpbGVuYW1lOiBzdHJpbmcKKyAgICAgICAgQHBhcmFtIG1hc2s6IEJpdG1hc2sgb2YgZXZlbnRzLCBzaG91bGQgY29udGFpbiBJTl9DUkVBVEUgYW5kIElOX0RFTEVURS4KKyAgICAgICAgQHR5cGUgbWFzazogaW50CisgICAgICAgIEBwYXJhbSBwcm9jX2NsYXNzOiBQcm9jZXNzRXZlbnQgKG9yIG9mIG9uZSBvZiBpdHMgc3ViY2xhc3MpLCBiZXdhcmUgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdGluZyBhIFByb2Nlc3NFdmVudCdzIGluc3RhbmNlIGFzIGFyZ3VtZW50IGludG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW5pdF9fLCBzZWUgdHJhbnNpZW50X2ZpbGUucHkgZXhhbXBsZSBmb3IgbW9yZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscy4KKyAgICAgICAgQHR5cGUgcHJvY19jbGFzczogUHJvY2Vzc0V2ZW50J3MgaW5zdGFuY2Ugb3Igb2Ygb25lIG9mIGl0cyBzdWJjbGFzc2VzLgorICAgICAgICBAcmV0dXJuOiBTYW1lIGFzIGFkZF93YXRjaCgpLgorICAgICAgICBAcnR5cGU6IFNhbWUgYXMgYWRkX3dhdGNoKCkuCisgICAgICAgICIiIgorICAgICAgICBkaXJuYW1lID0gb3MucGF0aC5kaXJuYW1lKGZpbGVuYW1lKQorICAgICAgICBpZiBkaXJuYW1lID09ICcnOgorICAgICAgICAgICAgcmV0dXJuIHt9ICAjIE1haW50YWlucyBjb2hlcmVuY2Ugd2l0aCBhZGRfd2F0Y2goKQorICAgICAgICBiYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoZmlsZW5hbWUpCisgICAgICAgICMgQXNzdW1pbmcgd2UgYXJlIHdhdGNoaW5nIGF0IGxlYXN0IGZvciBJTl9DUkVBVEUgYW5kIElOX0RFTEVURQorICAgICAgICBtYXNrIHw9IElOX0NSRUFURSB8IElOX0RFTEVURQorCisgICAgICAgIGRlZiBjbXBfbmFtZShldmVudCk6CisgICAgICAgICAgICBpZiBnZXRhdHRyKGV2ZW50LCAnbmFtZScpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICByZXR1cm4gYmFzZW5hbWUgPT0gZXZlbnQubmFtZQorICAgICAgICByZXR1cm4gc2VsZi5hZGRfd2F0Y2goZGlybmFtZSwgbWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2NfZnVuPXByb2NfY2xhc3MoQ2hhaW5JZlRydWUoZnVuYz1jbXBfbmFtZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b19hZGQ9RmFsc2UsIGRvX2dsb2I9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlX2ZpbHRlcj1sYW1iZGEgcGF0aDogRmFsc2UpCisKKyAgICBkZWYgZ2V0X2lnbm9yZV9ldmVudHMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9pZ25vcmVfZXZlbnRzCisKKyAgICBkZWYgc2V0X2lnbm9yZV9ldmVudHMoc2VsZiwgbnZhbCk6CisgICAgICAgIHNlbGYuX2lnbm9yZV9ldmVudHMgPSBudmFsCisKKyAgICBpZ25vcmVfZXZlbnRzID0gcHJvcGVydHkoZ2V0X2lnbm9yZV9ldmVudHMsIHNldF9pZ25vcmVfZXZlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWFrZSB3YXRjaCBtYW5hZ2VyIGlnbm9yaW5nIG5ldyBldmVudHMuIikKKworCisKK2NsYXNzIFJhd091dHB1dEZvcm1hdDoKKyAgICAiIiIKKyAgICBGb3JtYXQgc3RyaW5nIHJlcHJlc2VudGF0aW9ucy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICBzZWxmLmZvcm1hdCA9IGZvcm1hdCBvciB7fQorCisgICAgZGVmIHNpbXBsZShzZWxmLCBzLCBhdHRyaWJ1dGUpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBzdHIpOgorICAgICAgICAgICAgcyA9IHN0cihzKQorICAgICAgICByZXR1cm4gKHNlbGYuZm9ybWF0LmdldChhdHRyaWJ1dGUsICcnKSArIHMgKworICAgICAgICAgICAgICAgIHNlbGYuZm9ybWF0LmdldCgnbm9ybWFsJywgJycpKQorCisgICAgZGVmIHB1bmN0dWF0aW9uKHNlbGYsIHMpOgorICAgICAgICAiIiJQdW5jdHVhdGlvbiBjb2xvci4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuc2ltcGxlKHMsICdub3JtYWwnKQorCisgICAgZGVmIGZpZWxkX3ZhbHVlKHNlbGYsIHMpOgorICAgICAgICAiIiJGaWVsZCB2YWx1ZSBjb2xvci4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuc2ltcGxlKHMsICdwdXJwbGUnKQorCisgICAgZGVmIGZpZWxkX25hbWUoc2VsZiwgcyk6CisgICAgICAgICIiIkZpZWxkIG5hbWUgY29sb3IuIiIiCisgICAgICAgIHJldHVybiBzZWxmLnNpbXBsZShzLCAnYmx1ZScpCisKKyAgICBkZWYgY2xhc3NfbmFtZShzZWxmLCBzKToKKyAgICAgICAgIiIiQ2xhc3MgbmFtZSBjb2xvci4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZm9ybWF0LmdldCgncmVkJywgJycpICsgc2VsZi5zaW1wbGUocywgJ2JvbGQnKQorCitvdXRwdXRfZm9ybWF0ID0gUmF3T3V0cHV0Rm9ybWF0KCkKKworY2xhc3MgQ29sb3JlZE91dHB1dEZvcm1hdChSYXdPdXRwdXRGb3JtYXQpOgorICAgICIiIgorICAgIEZvcm1hdCBjb2xvcmVkIHN0cmluZyByZXByZXNlbnRhdGlvbnMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBmID0geydub3JtYWwnOiAnXDAzM1swbScsCisgICAgICAgICAgICAgJ2JsYWNrJzogJ1wwMzNbMzBtJywKKyAgICAgICAgICAgICAncmVkJzogJ1wwMzNbMzFtJywKKyAgICAgICAgICAgICAnZ3JlZW4nOiAnXDAzM1szMm0nLAorICAgICAgICAgICAgICd5ZWxsb3cnOiAnXDAzM1szM20nLAorICAgICAgICAgICAgICdibHVlJzogJ1wwMzNbMzRtJywKKyAgICAgICAgICAgICAncHVycGxlJzogJ1wwMzNbMzVtJywKKyAgICAgICAgICAgICAnY3lhbic6ICdcMDMzWzM2bScsCisgICAgICAgICAgICAgJ2JvbGQnOiAnXDAzM1sxbScsCisgICAgICAgICAgICAgJ3VsaW5lJzogJ1wwMzNbNG0nLAorICAgICAgICAgICAgICdibGluayc6ICdcMDMzWzVtJywKKyAgICAgICAgICAgICAnaW52ZXJ0JzogJ1wwMzNbN20nfQorICAgICAgICBSYXdPdXRwdXRGb3JtYXQuX19pbml0X18oc2VsZiwgZikKKworCitkZWYgY29tcGF0aWJpbGl0eV9tb2RlKCk6CisgICAgIiIiCisgICAgVXNlIHRoaXMgZnVuY3Rpb24gdG8gdHVybiBvbiB0aGUgY29tcGF0aWJpbGl0eSBtb2RlLiBUaGUgY29tcGF0aWJpbGl0eQorICAgIG1vZGUgaXMgdXNlZCB0byBpbXByb3ZlIGNvbXBhdGliaWxpdHkgd2l0aCBQeWlub3RpZnkgMC43LjEgKG9yIG9sZGVyKQorICAgIHByb2dyYW1zLiBUaGUgY29tcGF0aWJpbGl0eSBtb2RlIHByb3ZpZGVzIGFkZGl0aW9uYWwgdmFyaWFibGVzICdpc19kaXInLAorICAgICdldmVudF9uYW1lJywgJ0V2ZW50c0NvZGVzLklOXyonIGFuZCAnRXZlbnRzQ29kZXMuQUxMX0VWRU5UUycgYXMKKyAgICBQeWlub3RpZnkgMC43LjEgcHJvdmlkZWQuIERvIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gZnJvbSBuZXcgcHJvZ3JhbXMhIQorICAgIEVzcGVjaWFsbHkgaWYgdGhlcmUgYXJlIGRldmVsb3BwZWQgZm9yIFB5aW5vdGlmeSA+PSAwLjgueC4KKyAgICAiIiIKKyAgICBzZXRhdHRyKEV2ZW50c0NvZGVzLCAnQUxMX0VWRU5UUycsIEFMTF9FVkVOVFMpCisgICAgZm9yIGV2bmFtZSBpbiBnbG9iYWxzKCk6CisgICAgICAgIGlmIGV2bmFtZS5zdGFydHN3aXRoKCdJTl8nKToKKyAgICAgICAgICAgIHNldGF0dHIoRXZlbnRzQ29kZXMsIGV2bmFtZSwgZ2xvYmFscygpW2V2bmFtZV0pCisgICAgZ2xvYmFsIENPTVBBVElCSUxJVFlfTU9ERQorICAgIENPTVBBVElCSUxJVFlfTU9ERSA9IFRydWUKKworCitkZWYgY29tbWFuZF9saW5lKCk6CisgICAgIiIiCisgICAgQnkgZGVmYXVsdCB0aGUgd2F0Y2hlZCBwYXRoIGlzICcvdG1wJyBhbmQgYWxsIHR5cGVzIG9mIGV2ZW50cyBhcmUKKyAgICBtb25pdG9yZWQuIEV2ZW50cyBtb25pdG9yaW5nIHNlcnZlcyBmb3JldmVyLCB0eXBlIGNeYyB0byBzdG9wIGl0LgorICAgICIiIgorICAgIGZyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlcgorCisgICAgdXNhZ2UgPSAidXNhZ2U6ICVwcm9nIFtvcHRpb25zXSBbcGF0aDFdIFtwYXRoMl0gW3BhdGhuXSIKKworICAgIHBhcnNlciA9IE9wdGlvblBhcnNlcih1c2FnZT11c2FnZSkKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXYiLCAiLS12ZXJib3NlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJ2ZXJib3NlIiwgaGVscD0iVmVyYm9zZSBtb2RlIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXIiLCAiLS1yZWN1cnNpdmUiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9InJlY3Vyc2l2ZSIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0iQWRkIHdhdGNoZXMgcmVjdXJzaXZlbHkgb24gcGF0aHMiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYSIsICItLWF1dG9fYWRkIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJhdXRvX2FkZCIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0iQXV0b21hdGljYWxseSBhZGQgd2F0Y2hlcyBvbiBuZXcgZGlyZWN0b3JpZXMiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItZyIsICItLWdsb2IiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9Imdsb2IiLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlRyZWF0IHBhdGhzIGFzIGdsb2JzIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWUiLCAiLS1ldmVudHMtbGlzdCIsIG1ldGF2YXI9IkVWRU5UWywuLi5dIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJldmVudHNfbGlzdCIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0oIkEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZXZlbnRzIHRvIHdhdGNoIGZvciAtICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHZhbGlkIG9wdGlvbnMgKGRlZmF1bHRzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0byBldmVyeXRoaW5nKSIpKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItcyIsICItLXN0YXRzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJzdGF0cyIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRGlzcGxheSBkdW1teSBzdGF0aXN0aWNzIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLVYiLCAiLS12ZXJzaW9uIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJ2ZXJzaW9uIiwgIGhlbHA9IlB5aW5vdGlmeSB2ZXJzaW9uIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWYiLCAiLS1yYXctZm9ybWF0IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJyYXdfZm9ybWF0IiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJEaXNhYmxlIGVuaGFuY2VkIG91dHB1dCBmb3JtYXQuIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWMiLCAiLS1jb21tYW5kIiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0iY29tbWFuZCIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0iU2hlbGwgY29tbWFuZCB0byBydW4gdXBvbiBldmVudCIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBpZiBvcHRpb25zLnZlcmJvc2U6CisgICAgICAgIGxvZy5zZXRMZXZlbCgxMCkKKworICAgIGlmIG9wdGlvbnMudmVyc2lvbjoKKyAgICAgICAgcHJpbnQoX192ZXJzaW9uX18pCisKKyAgICBpZiBub3Qgb3B0aW9ucy5yYXdfZm9ybWF0OgorICAgICAgICBnbG9iYWwgb3V0cHV0X2Zvcm1hdAorICAgICAgICBvdXRwdXRfZm9ybWF0ID0gQ29sb3JlZE91dHB1dEZvcm1hdCgpCisKKyAgICBpZiBsZW4oYXJncykgPCAxOgorICAgICAgICBwYXRoID0gJy90bXAnICAjIGRlZmF1bHQgd2F0Y2hlZCBwYXRoCisgICAgZWxzZToKKyAgICAgICAgcGF0aCA9IGFyZ3MKKworICAgICMgd2F0Y2ggbWFuYWdlciBpbnN0YW5jZQorICAgIHdtID0gV2F0Y2hNYW5hZ2VyKCkKKyAgICAjIG5vdGlmaWVyIGluc3RhbmNlIGFuZCBpbml0CisgICAgaWYgb3B0aW9ucy5zdGF0czoKKyAgICAgICAgbm90aWZpZXIgPSBOb3RpZmllcih3bSwgZGVmYXVsdF9wcm9jX2Z1bj1TdGF0cygpLCByZWFkX2ZyZXE9NSkKKyAgICBlbHNlOgorICAgICAgICBub3RpZmllciA9IE5vdGlmaWVyKHdtLCBkZWZhdWx0X3Byb2NfZnVuPVByaW50QWxsRXZlbnRzKCkpCisKKyAgICAjIFdoYXQgbWFzayB0byBhcHBseQorICAgIG1hc2sgPSAwCisgICAgaWYgb3B0aW9ucy5ldmVudHNfbGlzdDoKKyAgICAgICAgZXZlbnRzX2xpc3QgPSBvcHRpb25zLmV2ZW50c19saXN0LnNwbGl0KCcsJykKKyAgICAgICAgZm9yIGV2IGluIGV2ZW50c19saXN0OgorICAgICAgICAgICAgZXZjb2RlID0gRXZlbnRzQ29kZXMuQUxMX0ZMQUdTLmdldChldiwgMCkKKyAgICAgICAgICAgIGlmIGV2Y29kZToKKyAgICAgICAgICAgICAgICBtYXNrIHw9IGV2Y29kZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXJzZXIuZXJyb3IoIlRoZSBldmVudCAnJXMnIHNwZWNpZmllZCB3aXRoIG9wdGlvbiAtZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpcyBub3QgdmFsaWQiICUgZXYpCisgICAgZWxzZToKKyAgICAgICAgbWFzayA9IEFMTF9FVkVOVFMKKworICAgICMgc3RhdHMKKyAgICBjYl9mdW4gPSBOb25lCisgICAgaWYgb3B0aW9ucy5zdGF0czoKKyAgICAgICAgZGVmIGNiKHMpOgorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShyZXByKHMucHJvY19mdW4oKSkpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcbicpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHN0cihzLnByb2NfZnVuKCkpKQorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG4nKQorICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgIGNiX2Z1biA9IGNiCisKKyAgICAjIEV4dGVybmFsIGNvbW1hbmQKKyAgICBpZiBvcHRpb25zLmNvbW1hbmQ6CisgICAgICAgIGRlZiBjYihzKToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4ob3B0aW9ucy5jb21tYW5kLCBzaGVsbD1UcnVlKQorICAgICAgICBjYl9mdW4gPSBjYgorCisgICAgbG9nLmRlYnVnKCdTdGFydCBtb25pdG9yaW5nICVzLCAocHJlc3MgY15jIHRvIGhhbHQgcHlpbm90aWZ5KScgJSBwYXRoKQorCisgICAgd20uYWRkX3dhdGNoKHBhdGgsIG1hc2ssIHJlYz1vcHRpb25zLnJlY3Vyc2l2ZSwgYXV0b19hZGQ9b3B0aW9ucy5hdXRvX2FkZCwgZG9fZ2xvYj1vcHRpb25zLmdsb2IpCisgICAgIyBMb29wIGZvcmV2ZXIgKHVudGlsIHNpZ2ludCBzaWduYWwgZ2V0IGNhdWdodCkKKyAgICBub3RpZmllci5sb29wKGNhbGxiYWNrPWNiX2Z1bikKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGNvbW1hbmRfbGluZSgpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbGxlY3Rvci9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb2xsZWN0b3IvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb2xsZWN0b3IvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb2xsZWN0b3IvYWRtaW4ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29sbGVjdG9yL2FkbWluLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZjg1ZDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29sbGVjdG9yL2FkbWluLnB5CkBAIC0wLDAgKzEsMzMgQEAKK2Zyb20gZGphbmdvLmNvbnRyaWIgaW1wb3J0IGFkbWluCitmcm9tIGRqYW5nby5jb250cmliLmFkbWluLmZpbHRlcnMgaW1wb3J0IFJlbGF0ZWRGaWVsZExpc3RGaWx0ZXIKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgQml0YmFrZVZlcnNpb24sIFJlbGVhc2UsIExheWVyU291cmNlLCBUb2FzdGVyU2V0dGluZworZnJvbSBkamFuZ28uZm9ybXMud2lkZ2V0cyBpbXBvcnQgVGV4dGFyZWEKK2Zyb20gZGphbmdvIGltcG9ydCBmb3JtcworaW1wb3J0IGRqYW5nby5kYi5tb2RlbHMgYXMgbW9kZWxzCisKK2Zyb20gZGphbmdvLmNvbnRyaWIuYWRtaW4gaW1wb3J0IHdpZGdldHMsIGhlbHBlcnMKKworY2xhc3MgTGF5ZXJTb3VyY2VBZG1pbihhZG1pbi5Nb2RlbEFkbWluKToKKyAgICBwYXNzCisKK2NsYXNzIEJpdGJha2VWZXJzaW9uQWRtaW4oYWRtaW4uTW9kZWxBZG1pbik6CisKKyAgICAjIHdlIG92ZXJyaWRlIHRoZSBmb3JtZmllbGQgZm9yIGRiIFVSTEZpZWxkIGJlY2F1c2Ugb2YgYnJva2VuIFVSTCB2YWxpZGF0aW9uCisKKyAgICBkZWYgZm9ybWZpZWxkX2Zvcl9kYmZpZWxkKHNlbGYsIGRiX2ZpZWxkLCAqKmt3YXJncyk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZGJfZmllbGQsIG1vZGVscy5maWVsZHMuVVJMRmllbGQpOgorICAgICAgICAgICAgcmV0dXJuIGZvcm1zLmZpZWxkcy5DaGFyRmllbGQoKQorICAgICAgICByZXR1cm4gc3VwZXIoQml0YmFrZVZlcnNpb25BZG1pbiwgc2VsZikuZm9ybWZpZWxkX2Zvcl9kYmZpZWxkKGRiX2ZpZWxkLCAqKmt3YXJncykKKworCisKK2NsYXNzIFJlbGVhc2VBZG1pbihhZG1pbi5Nb2RlbEFkbWluKToKKyAgICBwYXNzCisKK2NsYXNzIFRvYXN0ZXJTZXR0aW5nQWRtaW4oYWRtaW4uTW9kZWxBZG1pbik6CisgICAgcGFzcworCithZG1pbi5zaXRlLnJlZ2lzdGVyKExheWVyU291cmNlLCBMYXllclNvdXJjZUFkbWluKQorYWRtaW4uc2l0ZS5yZWdpc3RlcihCaXRiYWtlVmVyc2lvbiwgQml0YmFrZVZlcnNpb25BZG1pbikKK2FkbWluLnNpdGUucmVnaXN0ZXIoUmVsZWFzZSwgUmVsZWFzZUFkbWluKQorYWRtaW4uc2l0ZS5yZWdpc3RlcihUb2FzdGVyU2V0dGluZywgVG9hc3RlclNldHRpbmdBZG1pbikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb2xsZWN0b3IvdXJscy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb2xsZWN0b3IvdXJscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDQzODdiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbGxlY3Rvci91cmxzLnB5CkBAIC0wLDAgKzEsMjYgQEAKKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxNCAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKworZnJvbSBkamFuZ28uY29uZi51cmxzIGltcG9ydCBwYXR0ZXJucywgaW5jbHVkZSwgdXJsCitmcm9tIGRqYW5nby52aWV3cy5nZW5lcmljIGltcG9ydCBSZWRpcmVjdFZpZXcKKwordXJscGF0dGVybnMgPSBwYXR0ZXJucygnYmxkY29sbGVjdG9yLnZpZXdzJywKKyAgICAgICAgIyBsYW5kaW5nIHBvaW50IGZvciBwdXNoaW5nIGEgYml0YmFrZV9ldmVudGxvZy5qc29uIGZpbGUgdG8gdGhpcyB0b2FzdGVyIGluc3RhY2UKKyAgICAgICAgdXJsKHInXmV2ZW50ZmlsZSQnLCAnZXZlbnRmaWxlJywgbmFtZT0nZXZlbnRmaWxlJyksCisgICAgICAgICkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb2xsZWN0b3Ivdmlld3MucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29sbGVjdG9yL3ZpZXdzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMmZhNGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29sbGVjdG9yL3ZpZXdzLnB5CkBAIC0wLDAgKzEsNjIgQEAKKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxNCAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gZGphbmdvLnZpZXdzLmRlY29yYXRvcnMuY2FjaGUgaW1wb3J0IGNhY2hlX2NvbnRyb2wKK2Zyb20gZGphbmdvLmNvcmUudXJscmVzb2x2ZXJzIGltcG9ydCByZXZlcnNlCitmcm9tIGRqYW5nby5jb3JlLnBhZ2luYXRvciBpbXBvcnQgUGFnaW5hdG9yLCBFbXB0eVBhZ2UsIFBhZ2VOb3RBbkludGVnZXIKK2Zyb20gZGphbmdvLmh0dHAgaW1wb3J0IEh0dHBSZXNwb25zZUJhZFJlcXVlc3QsIEh0dHBSZXNwb25zZQorZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IHRpbWV6b25lCitmcm9tIGRqYW5nby51dGlscy5odG1sIGltcG9ydCBlc2NhcGUKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IHRpbWVkZWx0YQorZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IGZvcm1hdHMKK2Zyb20gdG9hc3Rlcmd1aS50ZW1wbGF0ZXRhZ3MucHJvamVjdHRhZ3MgaW1wb3J0IGpzb24gYXMganNvbmZpbHRlcgoraW1wb3J0IGpzb24KK2ltcG9ydCBvcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRvYXN0ZXJtYWluCitmcm9tIGRqYW5nby52aWV3cy5kZWNvcmF0b3JzLmNzcmYgaW1wb3J0IGNzcmZfZXhlbXB0CisKKworQGNzcmZfZXhlbXB0CitkZWYgZXZlbnRmaWxlKHJlcXVlc3QpOgorICAgICIiIiBSZWNlaXZlcyBhIGZpbGUgYnkgUE9TVCwgYW5kIHJ1bnMgdG9hc3Rlci1ldmVudHJlcGx5IG9uIHRoaXMgZmlsZSAiIiIKKyAgICBpZiByZXF1ZXN0Lm1ldGhvZCAhPSAiUE9TVCI6CisgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2VCYWRSZXF1ZXN0KCJUaGlzIEFQSSBvbmx5IGFjY2VwdHMgUE9TVCByZXF1ZXN0cy4gUG9zdCBhIGZpbGUgd2l0aDpcblxuY3VybCAtRiBldmVudGxvZz1AYml0YmFrZV9ldmVudGxvZy5qc29uICVzXG4iICUgcmVxdWVzdC5idWlsZF9hYnNvbHV0ZV91cmkocmV2ZXJzZSgnZXZlbnRmaWxlJykpLCBjb250ZW50X3R5cGU9InRleHQvcGxhaW47dXRmOCIpCisKKyAgICAjIHdyaXRlIHRlbXBvcmFyeSBmaWxlCisgICAgKGhhbmRsZSwgYWJzdGVtcHBhdGgpID0gdGVtcGZpbGUubWtzdGVtcChkaXI9Ii90bXAvIikKKyAgICB3aXRoIG9zLmZkb3BlbihoYW5kbGUsICJ3IikgYXMgdG1wZmlsZToKKyAgICAgICAgZm9yIGNodW5rIGluIHJlcXVlc3QuRklMRVNbJ2V2ZW50bG9nJ10uY2h1bmtzKCk6CisgICAgICAgICAgICB0bXBmaWxlLndyaXRlKGNodW5rKQorICAgIHRtcGZpbGUuY2xvc2UoKQorCisgICAgIyBjb21wdXRlIHRoZSBwYXRoIHRvICJiaXRiYWtlL2Jpbi90b2FzdGVyLWV2ZW50cmVwbGF5IgorICAgIGZyb20gb3MucGF0aCBpbXBvcnQgZGlybmFtZSBhcyBETgorICAgIGltcG9ydF9zY3JpcHQgPSBvcy5wYXRoLmpvaW4oRE4oRE4oRE4oRE4ob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkpKSksICJiaW4vdG9hc3Rlci1ldmVudHJlcGxheSIpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGltcG9ydF9zY3JpcHQpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oInNjcmlwdCBtaXNzaW5nICVzIiAlIGltcG9ydF9zY3JpcHQpCisgICAgc2NyaXB0ZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICBzY3JpcHRlbnZbIkRBVEFCQVNFX1VSTCJdID0gdG9hc3Rlcm1haW4uc2V0dGluZ3MuZ2V0REFUQUJBU0VfVVJMKCkKKworICAgICMgcnVuIHRoZSBkYXRhIGxvYWRpbmcgcHJvY2VzcyBhbmQgcmV0dXJuIHRoZSByZXN1bHRzCisgICAgaW1wb3J0ZXIgPSBzdWJwcm9jZXNzLlBvcGVuKFtpbXBvcnRfc2NyaXB0LCBhYnN0ZW1wcGF0aF0sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsIGVudj1zY3JpcHRlbnYpCisgICAgKG91dCwgZXJyKSA9IGltcG9ydGVyLmNvbW11bmljYXRlKCkKKyAgICBpZiBpbXBvcnRlci5yZXR1cm5jb2RlID09IDA6CisgICAgICAgIG9zLnJlbW92ZShhYnN0ZW1wcGF0aCkKKyAgICByZXR1cm4gSHR0cFJlc3BvbnNlKCI9PSBSZXR2YWwgJWRcbj09IFNURE9VVFxuJXNcblxuPT0gU1RERVJSXG4lcyIgJSAoaW1wb3J0ZXIucmV0dXJuY29kZSwgb3V0LCBlcnIpLCBjb250ZW50X3R5cGU9InRleHQvcGxhaW47dXRmOCIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvYWRtaW4ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9hZG1pbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2JlNWY1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvYWRtaW4ucHkKQEAgLTAsMCArMSw4IEBACitmcm9tIGRqYW5nby5jb250cmliIGltcG9ydCBhZG1pbgorZnJvbSBkamFuZ28uY29udHJpYi5hZG1pbi5maWx0ZXJzIGltcG9ydCBSZWxhdGVkRmllbGRMaXN0RmlsdGVyCitmcm9tIC5tb2RlbHMgaW1wb3J0IEJ1aWxkRW52aXJvbm1lbnQKKworY2xhc3MgQnVpbGRFbnZpcm9ubWVudEFkbWluKGFkbWluLk1vZGVsQWRtaW4pOgorICAgIHBhc3MKKworYWRtaW4uc2l0ZS5yZWdpc3RlcihCdWlsZEVudmlyb25tZW50LCBCdWlsZEVudmlyb25tZW50QWRtaW4pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9iYmNvbnRyb2xsZXIucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9iYmNvbnRyb2xsZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ3MGFjOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL2JiY29udHJvbGxlci5weQpAQCAtMCwwICsxLDIwMiBAQAorIworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxNCAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgcmUKK2Zyb20gZGphbmdvLmRiIGltcG9ydCB0cmFuc2FjdGlvbgorZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBRCitmcm9tIGJsZGNvbnRyb2wubW9kZWxzIGltcG9ydCBCdWlsZEVudmlyb25tZW50LCBCUkxheWVyLCBCUlZhcmlhYmxlLCBCUlRhcmdldCwgQlJCaXRiYWtlCisKKyMgbG9hZCBCaXRiYWtlIGNvbXBvbmVudHMKK3BhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkpKSkKK3N5cy5wYXRoLmluc2VydCgwLCBwYXRoKQoraW1wb3J0IGJiLnNlcnZlci54bWxycGMKKworY2xhc3MgQml0YmFrZUNvbnRyb2xsZXIob2JqZWN0KToKKyAgICAiIiIgVGhpcyBpcyB0aGUgYmFzaWMgY2xhc3MgdGhhdCBjb250cm9sbHMgYSBiaXRiYWtlIHNlcnZlci4KKyAgICAgICAgSXQgaXMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBjbGFzcyBvbiBob3cgdGhlIHNlcnZlciBpcyBzdGFydGVkIGFuZCBhcXVpcmVkCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29ubmVjdGlvbik6CisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb24KKworICAgIGRlZiBfcnVuQ29tbWFuZChzZWxmLCBjb21tYW5kKToKKyAgICAgICAgcmVzdWx0LCBlcnJvciA9IHNlbGYuY29ubmVjdGlvbi5jb25uZWN0aW9uLnJ1bkNvbW1hbmQoY29tbWFuZCkKKyAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oZXJyb3IpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBkaXNjb25uZWN0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLnJlbW92ZUNsaWVudCgpCisKKyAgICBkZWYgc2V0VmFyaWFibGUoc2VsZiwgbmFtZSwgdmFsdWUpOgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuQ29tbWFuZChbInNldFZhcmlhYmxlIiwgbmFtZSwgdmFsdWVdKQorCisgICAgZGVmIGJ1aWxkKHNlbGYsIHRhcmdldHMsIHRhc2sgPSBOb25lKToKKyAgICAgICAgaWYgdGFzayBpcyBOb25lOgorICAgICAgICAgICAgdGFzayA9ICJidWlsZCIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bkNvbW1hbmQoWyJidWlsZFRhcmdldHMiLCB0YXJnZXRzLCB0YXNrXSkKKworCisKK2RlZiBnZXRCdWlsZEVudmlyb25tZW50Q29udHJvbGxlcigqKmt3YXJncyk6CisgICAgIiIiIEdldHMgeW91IGEgQnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIgdGhhdCBlbmNhcHN1bGF0ZXMgYSBidWlsZCBlbnZpcm9ubWVudCwKKyAgICAgICAgYmFzZWQgb24gdGhlIHF1ZXJ5IGRpY3Rpb25hcnkgc2VudCBpbi4KKworICAgICAgICBUaGlzIGlzIHVzZWQgdG8gcmV0cmlldmUsIGZvciBleGFtcGxlLCB0aGUgY3VycmVudGx5IHJ1bm5pbmcgQkUgZnJvbSBpbnNpZGUKKyAgICAgICAgdGhlIHRvYXN0ZXIgVUksIG9yIGZpbmQgYSBuZXcgQkUgdG8gc3RhcnQgYSBuZXcgYnVpbGQgaW4gaXQuCisKKyAgICAgICAgVGhlIHJldHVybiBvYmplY3QgTVVTVCBhbHdheXMgYmUgYSBCdWlsZEVudmlyb25tZW50Q29udHJvbGxlci4KKyAgICAiIiIKKworICAgIGZyb20gbG9jYWxob3N0YmVjb250cm9sbGVyIGltcG9ydCBMb2NhbGhvc3RCRUNvbnRyb2xsZXIKKyAgICBmcm9tIHNzaGJlY29udHJvbGxlciAgICBpbXBvcnQgU1NIQkVDb250cm9sbGVyCisKKyAgICBiZSA9IEJ1aWxkRW52aXJvbm1lbnQub2JqZWN0cy5maWx0ZXIoUSgqKmt3YXJncykpWzBdCisgICAgaWYgYmUuYmV0eXBlID09IEJ1aWxkRW52aXJvbm1lbnQuVFlQRV9MT0NBTDoKKyAgICAgICAgcmV0dXJuIExvY2FsaG9zdEJFQ29udHJvbGxlcihiZSkKKyAgICBlbGlmIGJlLmJldHlwZSA9PSBCdWlsZEVudmlyb25tZW50LlRZUEVfU1NIOgorICAgICAgICByZXR1cm4gU1NIQkVDb250cm9sbGVyKGJlKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRklYTUU6IEltcGxlbWVudCBCRUMgZm9yIHR5cGUgJXMiICUgc3RyKGJlLmJldHlwZSkpCisKKworY2xhc3MgQnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIob2JqZWN0KToKKyAgICAiIiIgQnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIgKEJFQykgaXMgdGhlIGFic3RyYWN0IGNsYXNzIHRoYXQgZGVmaW5lcyB0aGUgb3BlcmF0aW9ucyB0aGF0IE1VU1QKKyAgICAgICAgb3IgU0hPVUxEIGJlIHN1cHBvcnRlZCBieSBhIEJ1aWxkIEVudmlyb25tZW50LiBJdCBpcyB1c2VkIHRvIGVzdGFibGlzaCB0aGUgZnJhbWV3b3JrLCBhbmQgbXVzdAorICAgICAgICBub3QgYmUgaW5zdGFudGlhdGVkIGRpcmVjdGx5IGJ5IHRoZSB1c2VyLgorCisgICAgICAgIFVzZSB0aGUgImdldEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyKCkiIGZ1bmN0aW9uIHRvIGdldCBhIHdvcmtpbmcgQkVDIGZvciB5b3VyIHJlbW90ZS4KKworICAgICAgICBIb3cgdGhlIEJ1aWxkRW52aXJvbm1lbnRzIGFyZSBkaXNjb3ZlcmVkIGlzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgY2xhc3MuCisKKyAgICAgICAgWW91IG11c3QgZGVyaXZlIHRoaXMgY2xhc3MgdG8gdGVhY2ggVG9hc3RlciBob3cgdG8gb3BlcmF0ZSBpbiB5b3VyIG93biBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAgV2UgcHJvdmlkZSBzb21lIHNwZWNpZmljIEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyIGNsYXNzZXMgdGhhdCBjYW4gYmUgdXNlZCBlaXRoZXIgdG8KKyAgICAgICAgZGlyZWN0bHkgc2V0LXVwIFRvYXN0ZXIgaW5mcmFzdHJ1Y3R1cmUsIG9yIGFzIGEgbW9kZWwgZm9yIHlvdXIgb3duIGluZnJhc3RydWN0dXJlIHNldDoKKworICAgICAgICAgICAgKiBMb2NhbGhvc3QgY29udHJvbGxlciB3aWxsIHJ1biB0aGUgVG9hc3RlciBCRSBvbiB0aGUgc2FtZSBhY2NvdW50IGFzIHRoZSB3ZWIgc2VydmVyCisgICAgICAgIChjdXJyZW50IHVzZXIgaWYgeW91IGFyZSB1c2luZyB0aGUgdGhlIERqYW5nbyBkZXZlbG9wbWVudCB3ZWIgc2VydmVyKQorICAgICAgICBvbiB0aGUgbG9jYWwgbWFjaGluZSwgd2l0aCB0aGUgImJ1aWxkLyIgZGlyZWN0b3J5IHVuZGVyIHRoZSAicG9reS8iIHNvdXJjZSBjaGVja291dCBkaXJlY3RvcnkuCisgICAgICAgIEJhc2ggaXMgZXhwZWN0ZWQgdG8gYmUgYXZhaWxhYmxlLgorCisgICAgICAgICAgICAqIFNTSCBjb250cm9sbGVyIHdpbGwgcnVuIHRoZSBUb2FzdGVyIEJFIG9uIGEgcmVtb3RlIG1hY2hpbmUsIHdoZXJlIHRoZSBjdXJyZW50IHVzZXIKKyAgICAgICAgY2FuIGNvbm5lY3Qgd2l0aG91dCByYWlzZSBFeGNlcHRpb24oIkZJWE1FOiBpbXBsZW1lbnQiKXdvcmQgKHNldCB1cCB3aXRoIGVpdGhlciBzc2gtYWdlbnQgb3IgcmFpc2UgRXhjZXB0aW9uKCJGSVhNRTogaW1wbGVtZW50IilwaHJhc2UtbGVzcyBrZXkgYXV0aGVudGljYXRpb24pCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYmUpOgorICAgICAgICAiIiIgVGFrZXMgYSBCdWlsZEVudmlyb25tZW50IG9iamVjdCBhcyBwYXJhbWV0ZXIgdGhhdCBwb2ludHMgdG8gdGhlIHNldHRpbmdzIG9mIHRoZSBCRS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuYmUgPSBiZQorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBOb25lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF91cGRhdGVCQkxheWVycyhiYmxheWVyY29uZiwgbGF5ZXJsaXN0KToKKyAgICAgICAgY29uZmxpbmVzID0gb3BlbihiYmxheWVyY29uZiwgInIiKS5yZWFkbGluZXMoKQorCisgICAgICAgIGJibGF5ZXJjb25mZmlsZSA9IG9wZW4oYmJsYXllcmNvbmYsICJ3IikKKyAgICAgICAgc2tpcCA9IDAKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihjb25mbGluZXMpKToKKyAgICAgICAgICAgIGlmIHNraXAgPiAwOgorICAgICAgICAgICAgICAgIHNraXAgPS0gMQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBjb25mbGluZXNbaV0uc3RhcnRzd2l0aCgiIyBsaW5lIGFkZGVkIGJ5IHRvYXN0ZXIiKToKKyAgICAgICAgICAgICAgICBza2lwID0gMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBiYmxheWVyY29uZmZpbGUud3JpdGUoY29uZmxpbmVzW2ldKQorCisgICAgICAgIGJibGF5ZXJjb25mZmlsZS53cml0ZSgiIyBsaW5lIGFkZGVkIGJ5IHRvYXN0ZXIgYnVpbGQgY29udHJvbFxuQkJMQVlFUlMgPSBcIiIgKyAiICIuam9pbihsYXllcmxpc3QpICsgIlwiIikKKyAgICAgICAgYmJsYXllcmNvbmZmaWxlLmNsb3NlKCkKKworCisgICAgZGVmIHdyaXRlQ29uZkZpbGUoc2VsZiwgdmFyaWFibGVfbGlzdCA9IE5vbmUsIHJhdyA9IE5vbmUpOgorICAgICAgICAiIiIgV3JpdGVzIGEgY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZSBidWlsZCBkaXJlY3RvcnkuIE92ZXJyaWRlIHdpdGggYnVpbGRlbnYtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uICIiIgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZJWE1FOiBNdXN0IG92ZXJyaWRlIHRvIGFjdHVhbGx5IHdyaXRlIGEgY29uZmlndXJhdGlvbiBmaWxlIikKKworCisgICAgZGVmIHN0YXJ0QkJTZXJ2ZXIoc2VsZik6CisgICAgICAgICIiIiBTdGFydHMgYSAgQkIgc2VydmVyIHdpdGggVG9hc3RlciB0b2FzdGVydWkgc2V0IHVwIHRvIHJlY29yZCB0aGUgYnVpbGRzLCBhbiBubyBjb250cm9sbGluZyBVSS4KKyAgICAgICAgICAgIEFmdGVyIHRoaXMgbWV0aG9kIGV4ZWN1dGVzLCBzZWxmLmJlIGJiYWRkcmVzcy9iYnBvcnQgTVVTVCBwb2ludCB0byBhIHJ1bm5pbmcgYW5kIGZyZWUgc2VydmVyLAorICAgICAgICAgICAgYW5kIHRoZSBiYnN0YXRlIE1VU1QgYmUgIHVwZGF0ZWQgdG8gInN0YXJ0ZWQiLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGSVhNRTogTXVzdCBvdmVycmlkZSBpbiBvcmRlciB0byBhY3R1YWxseSBzdGFydCB0aGUgQkIgc2VydmVyIikKKworICAgIGRlZiBzdG9wQkJTZXJ2ZXIoc2VsZik6CisgICAgICAgICIiIiBTdG9wcyB0aGUgY3VycmVudGx5IHJ1bm5pbmcgQkIgc2VydmVyLgorICAgICAgICAgICAgVGhlIGJic3RhdGUgTVVTVCBiZSB1cGRhdGVkIHRvICJzdG9wcGVkIi4KKyAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbiBtdXN0IGJlIG5vbmUuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZJWE1FOiBNdXN0IG92ZXJyaWRlIHN0b0JCU2VydmVyIikKKworICAgIGRlZiBzZXRMYXllcnMoc2VsZiwgYmJzLCBscyk6CisgICAgICAgICIiIiBDaGVja3Mtb3V0IGJpdGJha2UgZXhlY3V0b3IgYW5kIGxheWVycyBmcm9tIGdpdCByZXBvc2l0b3JpZXMuCisgICAgICAgICAgICBTZXRzIHRoZSBsYXllciB2YXJpYWJsZXMgaW4gdGhlIGNvbmZpZyBmaWxlLCBhZnRlciB2YWxpZGF0aW5nIGxvY2FsIGxheWVyIHBhdGhzLgorICAgICAgICAgICAgVGhlIGJpdGJha2VzIG11c3QgYmUgYSAxLWxlbmd0aCBsaXN0IG9mIEJSQml0YmFrZQorICAgICAgICAgICAgVGhlIGxheWVyIHBhdGhzIG11c3QgYmUgaW4gYSBsaXN0IG9mIEJSTGF5ZXIgb2JqZWN0CisKKyAgICAgICAgICAgIGEgd29yZCBvZiBhdHRlbnRpb246IGJ5IGNvbnZlbnRpb24sIHRoZSBmaXJzdCBsYXllciBmb3IgYW55IGJ1aWxkIHdpbGwgYmUgcG9reSEKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRklYTUU6IE11c3Qgb3ZlcnJpZGUgc2V0TGF5ZXJzIikKKworCisgICAgZGVmIGdldEJCQ29udHJvbGxlcihzZWxmKToKKyAgICAgICAgIiIiIHJldHVybnMgYSBCaXRiYWtlQ29udHJvbGxlciB0byBhbiBhbHJlYWR5IHN0YXJ0ZWQgc2VydmVyOyB0aGlzIGlzIHRoZSBwb2ludCB3aGVyZSB0aGUgc2VydmVyCisgICAgICAgICAgICBzdGFydHMgaWYgbmVlZGVkOyBvciByZWNvbm5lY3RzIHRvIHRoZSBzZXJ2ZXIgaWYgd2UgY2FuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5jb25uZWN0aW9uOgorICAgICAgICAgICAgc2VsZi5zdGFydEJCU2VydmVyKCkKKyAgICAgICAgICAgIHNlbGYuYmUubG9jayA9IEJ1aWxkRW52aXJvbm1lbnQuTE9DS19SVU5OSU5HCisgICAgICAgICAgICBzZWxmLmJlLnNhdmUoKQorCisgICAgICAgIHNlcnZlciA9IGJiLnNlcnZlci54bWxycGMuQml0QmFrZVhNTFJQQ0NsaWVudCgpCisgICAgICAgIHNlcnZlci5pbml0U2VydmVyKCkKKyAgICAgICAgc2VydmVyLnNhdmVDb25uZWN0aW9uRGV0YWlscygiJXM6JXMiICUgKHNlbGYuYmUuYmJhZGRyZXNzLCBzZWxmLmJlLmJicG9ydCkpCisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IHNlcnZlci5lc3RhYmxpc2hDb25uZWN0aW9uKFtdKQorCisgICAgICAgIHNlbGYuYmUuYmJ0b2tlbiA9IHNlbGYuY29ubmVjdGlvbi50cmFuc3BvcnQuY29ubmVjdGlvbl90b2tlbgorICAgICAgICBzZWxmLmJlLnNhdmUoKQorCisgICAgICAgIHJldHVybiBCaXRiYWtlQ29udHJvbGxlcihzZWxmLmNvbm5lY3Rpb24pCisKKyAgICBkZWYgZ2V0QXJ0aWZhY3Qoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIiBUaGlzIGNhbGwgcmV0dXJucyBhbiBhcnRpZmFjdCBpZGVudGlmaWVkIGJ5IHRoZSAncGF0aCcuIEhvdyAncGF0aCcgaXMgaW50ZXJwcmV0ZWQgYXMKKyAgICAgICAgICAgIHVwIHRvIHRoZSBpbXBsZW1lbnRpbmcgQkVDLiBUaGUgcmV0dXJuIE1VU1QgYmUgYSBSRVNUIFVSTCB3aGVyZSBhIEdFVCB3aWxsIGFjdHVhbGx5IHJldHVybgorICAgICAgICAgICAgdGhlIGNvbnRlbnQgb2YgdGhlIGFydGlmYWN0LCBlLmcuIGZvciB1c2UgYXMgYSAiZG93bmxvYWQgbGluayIgaW4gYSB3ZWIgVUkuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIk11c3QgcmV0dXJuIHRoZSBSRVNUIFVSTCBvZiB0aGUgYXJ0aWZhY3QiKQorCisgICAgZGVmIHJlbGVhc2Uoc2VsZik6CisgICAgICAgICIiIiBUaGlzIHN0b3BzIHRoZSBzZXJ2ZXIgYW5kIHJlbGVhc2VzIGFueSByZXNvdXJjZXMuIEFmdGVyIHRoaXMgcG9pbnQsIGFsbCByZXNvdXJjZXMKKyAgICAgICAgICAgIGFyZSB1bi1hdmFpbGFibGUgZm9yIGZ1cnRoZXIgcmVmZXJlbmNlCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIk11c3Qgb3ZlcnJpZGUgQkUgcmVsZWFzZSIpCisKKyAgICBkZWYgdHJpZ2dlckJ1aWxkKHNlbGYsIGJpdGJha2UsIGxheWVycywgdmFyaWFibGVzLCB0YXJnZXRzKToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJNdXN0IG92ZXJyaWRlIEJFIHJlbGVhc2UiKQorCitjbGFzcyBTaGVsbENtZEV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgIHBhc3MKKworCitjbGFzcyBCdWlsZFNldHVwRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgcGFzcworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9sb2NhbGhvc3RiZWNvbnRyb2xsZXIucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9sb2NhbGhvc3RiZWNvbnRyb2xsZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk5MDliOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL2xvY2FsaG9zdGJlY29udHJvbGxlci5weQpAQCAtMCwwICsxLDMzNiBAQAorIworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxNCAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgcmUKK2Zyb20gZGphbmdvLmRiIGltcG9ydCB0cmFuc2FjdGlvbgorZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBRCitmcm9tIGJsZGNvbnRyb2wubW9kZWxzIGltcG9ydCBCdWlsZEVudmlyb25tZW50LCBCUkxheWVyLCBCUlZhcmlhYmxlLCBCUlRhcmdldCwgQlJCaXRiYWtlCitpbXBvcnQgc3VicHJvY2VzcworCitmcm9tIHRvYXN0ZXJtYWluIGltcG9ydCBzZXR0aW5ncworCitmcm9tIGJiY29udHJvbGxlciBpbXBvcnQgQnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIsIFNoZWxsQ21kRXhjZXB0aW9uLCBCdWlsZFNldHVwRXhjZXB0aW9uCisKK2ltcG9ydCBsb2dnaW5nCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigidG9hc3RlciIpCisKK2Zyb20gcHByaW50IGltcG9ydCBwcHJpbnQsIHBmb3JtYXQKKworY2xhc3MgTG9jYWxob3N0QkVDb250cm9sbGVyKEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyKToKKyAgICAiIiIgSW1wbGVtZW50YXRpb24gb2YgdGhlIEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyIGZvciB0aGUgbG9jYWxob3N0OworICAgICAgICB0aGlzIGNvbnRyb2xsZXIgbWFuYWdlcyB0aGUgZGVmYXVsdCBidWlsZCBkaXJlY3RvcnksCisgICAgICAgIHRoZSBzZXJ2ZXIgc2V0dXAgYW5kIHN5c3RlbSBzdGFydCBhbmQgc3RvcCBmb3IgdGhlIGxvY2FsaG9zdC10eXBlIGJ1aWxkIGVudmlyb25tZW50CisKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBiZSk6CisgICAgICAgIHN1cGVyKExvY2FsaG9zdEJFQ29udHJvbGxlciwgc2VsZikuX19pbml0X18oYmUpCisgICAgICAgIHNlbGYuZGJ1cmwgPSBzZXR0aW5ncy5nZXREQVRBQkFTRV9VUkwoKQorICAgICAgICBzZWxmLnBva3lkaXJuYW1lID0gTm9uZQorICAgICAgICBzZWxmLmlzbGF5ZXJzZXQgPSBGYWxzZQorCisgICAgZGVmIF9zaGVsbGNtZChzZWxmLCBjb21tYW5kLCBjd2QgPSBOb25lKToKKyAgICAgICAgaWYgY3dkIGlzIE5vbmU6CisgICAgICAgICAgICBjd2QgPSBzZWxmLmJlLnNvdXJjZWRpcgorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygibGJjX3NoZWxsY21tZDogKCVzKSAlcyIgJSAoY3dkLCBjb21tYW5kKSkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY29tbWFuZCwgY3dkID0gY3dkLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAob3V0LGVycikgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgcC53YWl0KCkKKyAgICAgICAgaWYgcC5yZXR1cm5jb2RlOgorICAgICAgICAgICAgaWYgbGVuKGVycikgPT0gMDoKKyAgICAgICAgICAgICAgICBlcnIgPSAiY29tbWFuZDogJXMgXG4lcyIgJSAoY29tbWFuZCwgb3V0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlcnIgPSAiY29tbWFuZDogJXMgXG4lcyIgJSAoY29tbWFuZCwgZXJyKQorICAgICAgICAgICAgbG9nZ2VyLndhcm4oImxvY2FsaG9zdGJlY29udHJvbGxlcjogc2hlbGxjbWQgZXJyb3IgJXMiICUgZXJyKQorICAgICAgICAgICAgcmFpc2UgU2hlbGxDbWRFeGNlcHRpb24oZXJyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IHNoZWxsY21kIHN1Y2Nlc3MiKQorICAgICAgICAgICAgcmV0dXJuIG91dAorCisgICAgZGVmIF9zZXR1cEJFKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5wb2t5ZGlybmFtZSBhbmQgb3MucGF0aC5leGlzdHMoc2VsZi5wb2t5ZGlybmFtZSkKKyAgICAgICAgcGF0aCA9IHNlbGYuYmUuYnVpbGRkaXIKKyAgICAgICAgaWYgbm90IHBhdGg6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkludmFsaWQgcGF0aCBjcmVhdGlvbiBzcGVjaWZpZWQuIikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICAgICAgb3MubWFrZWRpcnMocGF0aCwgMDc1NSkKKyAgICAgICAgc2VsZi5fc2hlbGxjbWQoImJhc2ggLWMgXCJzb3VyY2UgJXMvb2UtaW5pdC1idWlsZC1lbnYgJXNcIiIgJSAoc2VsZi5wb2t5ZGlybmFtZSwgcGF0aCkpCisgICAgICAgICMgZGVsZXRlIHRoZSB0ZW1wbGF0ZWNvbmYuY2ZnOyBpdCBtYXkgY29tZSBmcm9tIGFuIHVuc3VwcG9ydGVkIGxheWVyIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbihwYXRoLCAiY29uZi90ZW1wbGF0ZWNvbmYuY2ZnIikpCisKKworICAgIGRlZiB3cml0ZUNvbmZGaWxlKHNlbGYsIGZpbGVfbmFtZSwgdmFyaWFibGVfbGlzdCA9IE5vbmUsIHJhdyA9IE5vbmUpOgorICAgICAgICBmaWxlcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmJlLmJ1aWxkZGlyLCBmaWxlX25hbWUpCisgICAgICAgIHdpdGggb3BlbihmaWxlcGF0aCwgInciKSBhcyBjb25mZmlsZToKKyAgICAgICAgICAgIGlmIHZhcmlhYmxlX2xpc3QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgZm9yIGkgaW4gdmFyaWFibGVfbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgY29uZmZpbGUud3JpdGUoIiVzPVwiJXNcIlxuIiAlIChpLm5hbWUsIGkudmFsdWUpKQorICAgICAgICAgICAgaWYgcmF3IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGNvbmZmaWxlLndyaXRlKHJhdykKKworCisgICAgZGVmIHN0YXJ0QkJTZXJ2ZXIoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLnBva3lkaXJuYW1lIGFuZCBvcy5wYXRoLmV4aXN0cyhzZWxmLnBva3lkaXJuYW1lKQorICAgICAgICBhc3NlcnQgc2VsZi5pc2xheWVyc2V0CisKKyAgICAgICAgIyBmaW5kIG91ciBvd24gdG9hc3RlcnVpIGxpc3RlbmVyL2JpdGJha2UKKyAgICAgICAgZnJvbSB0b2FzdGVyLmJsZGNvbnRyb2wubWFuYWdlbWVudC5jb21tYW5kcy5sb2FkY29uZiBpbXBvcnQgX3JlZHVjZV9jYW5vbl9wYXRoCisKKyAgICAgICAgb3duX2JpdGJha2UgPSBfcmVkdWNlX2Nhbm9uX3BhdGgob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSwgIi4uLy4uLy4uL2Jpbi9iaXRiYWtlIikpCisKKyAgICAgICAgYXNzZXJ0IG9zLnBhdGguZXhpc3RzKG93bl9iaXRiYWtlKSBhbmQgb3MucGF0aC5pc2ZpbGUob3duX2JpdGJha2UpCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IHJ1bm5pbmcgdGhlIGxpc3RlbmVyIGF0ICVzIiAlIG93bl9iaXRiYWtlKQorCisgICAgICAgIHRvYXN0ZXJfdWlfbG9nX2ZpbGVwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYmUuYnVpbGRkaXIsICJ0b2FzdGVyX3VpLmxvZyIpCisgICAgICAgICMgZ2V0IHRoZSBmaWxlIGxlbmd0aDsgd2UgbmVlZCB0byBkZXRlY3QgdGhlIF9sYXN0XyBzdGFydCBvZiB0aGUgdG9hc3RlciBVSSwgbm90IHRoZSBmaXJzdAorICAgICAgICB0b2FzdGVyX3VpX2xvZ19maWxlbGVuZ3RoID0gMAorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh0b2FzdGVyX3VpX2xvZ19maWxlcGF0aCk6CisgICAgICAgICAgICB3aXRoIG9wZW4odG9hc3Rlcl91aV9sb2dfZmlsZXBhdGgsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLnNlZWsoMCwgMikgICAgIyBqdW1wIHRvIHRoZSBlbmQKKyAgICAgICAgICAgICAgICB0b2FzdGVyX3VpX2xvZ19maWxlbGVuZ3RoID0gZi50ZWxsKCkKKworICAgICAgICBjbWQgPSAiYmFzaCAtYyBcInNvdXJjZSAlcy9vZS1pbml0LWJ1aWxkLWVudiAlcyAyPiYxID50b2FzdGVyX3NlcnZlci5sb2cgJiYgYml0YmFrZSAtLXJlYWQgJXMvY29uZi90b2FzdGVyLXByZS5jb25mIC0tcG9zdHJlYWQgJXMvY29uZi90b2FzdGVyLmNvbmYgLS1zZXJ2ZXItb25seSAtdCB4bWxycGMgLUIgMC4wLjAuMDowIDI+JjEgPj50b2FzdGVyX3NlcnZlci5sb2cgXCIiICUgKHNlbGYucG9reWRpcm5hbWUsIHNlbGYuYmUuYnVpbGRkaXIsIHNlbGYuYmUuYnVpbGRkaXIsIHNlbGYuYmUuYnVpbGRkaXIpCisKKyAgICAgICAgcG9ydCA9ICItMSIKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IHN0YXJ0aW5nIGJ1aWxkZXIgXG4lc1xuIiAlIGNtZCkKKworICAgICAgICBjbWRvdXRwdXQgPSBzZWxmLl9zaGVsbGNtZChjbWQpCisgICAgICAgIHdpdGggb3BlbihzZWxmLmJlLmJ1aWxkZGlyICsgIi90b2FzdGVyX3NlcnZlci5sb2ciLCAiciIpIGFzIGY6CisgICAgICAgICAgICBmb3IgaSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgIGlmIGkuc3RhcnRzd2l0aCgiQml0YmFrZSBzZXJ2ZXIgYWRkcmVzcyIpOgorICAgICAgICAgICAgICAgICAgICBwb3J0ID0gaS5zcGxpdCgiICIpWy0xXQorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogRm91bmQgYml0YmFrZSBzZXJ2ZXIgcG9ydCAlcyIgJSBwb3J0KQorCisgICAgICAgIGNtZCA9ICJiYXNoIC1jIFwic291cmNlICVzL29lLWluaXQtYnVpbGQtZW52LW1lbXJlcyAtMSAlcyAmJiBEQVRBQkFTRV9VUkw9JXMgJXMgLS1vYnNlcnZlLW9ubHkgLXUgdG9hc3RlcnVpIC0tcmVtb3RlLXNlcnZlcj0wLjAuMC4wOi0xIC10IHhtbHJwY1wiIiAlIChzZWxmLnBva3lkaXJuYW1lLCBzZWxmLmJlLmJ1aWxkZGlyLCBzZWxmLmRidXJsLCBvd25fYml0YmFrZSkKKyAgICAgICAgd2l0aCBvcGVuKHRvYXN0ZXJfdWlfbG9nX2ZpbGVwYXRoLCAiYSsiKSBhcyBmOgorICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBjd2QgPSBzZWxmLmJlLmJ1aWxkZGlyLCBzaGVsbD1UcnVlLCBzdGRvdXQ9Ziwgc3RkZXJyPWYpCisKKyAgICAgICAgZGVmIF90b2FzdGVyX3VpX3N0YXJ0ZWQoZmlsZXBhdGgsIGZpbGVwb3MgPSAwKToKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlcGF0aCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZXBhdGgsICJyIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLnNlZWsoZmlsZXBvcykKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIk5PVEU6IFRvYXN0ZXJVSSB3YWl0aW5nIGZvciBldmVudHMiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICByZXRyaWVzID0gMAorICAgICAgICBzdGFydGVkID0gRmFsc2UKKyAgICAgICAgd2hpbGUgbm90IHN0YXJ0ZWQgYW5kIHJldHJpZXMgPCA1MDoKKyAgICAgICAgICAgIHN0YXJ0ZWQgPSBfdG9hc3Rlcl91aV9zdGFydGVkKHRvYXN0ZXJfdWlfbG9nX2ZpbGVwYXRoLCB0b2FzdGVyX3VpX2xvZ19maWxlbGVuZ3RoKQorICAgICAgICAgICAgaW1wb3J0IHRpbWUKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiBXYWl0aW5nIGJpdGJha2Ugc2VydmVyIHRvIHN0YXJ0IikKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC41KQorICAgICAgICAgICAgcmV0cmllcyArPSAxCisKKyAgICAgICAgaWYgbm90IHN0YXJ0ZWQ6CisgICAgICAgICAgICB0b2FzdGVyX3VpX2xvZyA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuYmUuYnVpbGRkaXIsICJ0b2FzdGVyX3VpLmxvZyIpLCAiciIpLnJlYWQoKQorICAgICAgICAgICAgdG9hc3Rlcl9zZXJ2ZXJfbG9nID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5iZS5idWlsZGRpciwgInRvYXN0ZXJfc2VydmVyLmxvZyIpLCAiciIpLnJlYWQoKQorICAgICAgICAgICAgcmFpc2UgQnVpbGRTZXR1cEV4Y2VwdGlvbigibG9jYWxob3N0YmVjb250cm9sbGVyOiBCaXRiYWtlIHNlcnZlciBkaWQgbm90IHN0YXJ0IGluIDI1IHNlY29uZHMsIGFib3J0aW5nIChFcnJvcjogJyVzJyAnJXMnKSIgJSAodG9hc3Rlcl91aV9sb2csIHRvYXN0ZXJfc2VydmVyX2xvZykpCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IFN0YXJ0ZWQgYml0YmFrZSBzZXJ2ZXIiKQorCisgICAgICAgIHdoaWxlIHBvcnQgPT0gIi0xIjoKKyAgICAgICAgICAgICMgdGhlIHBvcnQgc3BlY2lmaWNhdGlvbiBpcyAiYXV0b2RldGVjdCI7IHJlYWQgdGhlIGJpdGJha2UubG9jayBmaWxlCisgICAgICAgICAgICB3aXRoIG9wZW4oIiVzL2JpdGJha2UubG9jayIgJSBzZWxmLmJlLmJ1aWxkZGlyLCAiciIpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgIjoiIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBwb3J0ID0gbGluZS5zcGxpdCgiOiIpWzFdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiBBdXRvZGV0ZWN0ZWQgYml0YmFrZSBwb3J0ICVzIiwgcG9ydCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgYXNzZXJ0IHNlbGYuYmUuc291cmNlZGlyIGFuZCBvcy5wYXRoLmV4aXN0cyhzZWxmLmJlLmJ1aWxkZGlyKQorICAgICAgICBzZWxmLmJlLmJiYWRkcmVzcyA9ICJsb2NhbGhvc3QiCisgICAgICAgIHNlbGYuYmUuYmJwb3J0ID0gcG9ydAorICAgICAgICBzZWxmLmJlLmJic3RhdGUgPSBCdWlsZEVudmlyb25tZW50LlNFUlZFUl9TVEFSVEVECisgICAgICAgIHNlbGYuYmUuc2F2ZSgpCisKKyAgICBkZWYgc3RvcEJCU2VydmVyKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5wb2t5ZGlybmFtZSBhbmQgb3MucGF0aC5leGlzdHMoc2VsZi5wb2t5ZGlybmFtZSkKKyAgICAgICAgYXNzZXJ0IHNlbGYuaXNsYXllcnNldAorICAgICAgICBzZWxmLl9zaGVsbGNtZCgiYmFzaCAtYyBcInNvdXJjZSAlcy9vZS1pbml0LWJ1aWxkLWVudiAlcyAmJiAlcyBzb3VyY2UgdG9hc3RlciBzdG9wXCIiICUKKyAgICAgICAgICAgIChzZWxmLnBva3lkaXJuYW1lLCBzZWxmLmJlLmJ1aWxkZGlyLCAobGFtYmRhOiAiIiBpZiBzZWxmLmJlLmJidG9rZW4gaXMgTm9uZSBlbHNlICJCQlRPS0VOPSVzIiAlIHNlbGYuYmUuYmJ0b2tlbikoKSkpCisgICAgICAgIHNlbGYuYmUuYmJzdGF0ZSA9IEJ1aWxkRW52aXJvbm1lbnQuU0VSVkVSX1NUT1BQRUQKKyAgICAgICAgc2VsZi5iZS5zYXZlKCkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IFN0b3BwZWQgYml0YmFrZSBzZXJ2ZXIiKQorCisgICAgZGVmIGdldEdpdENsb25lRGlyZWN0b3J5KHNlbGYsIHVybCwgYnJhbmNoKToKKyAgICAgICAgIiIiIFV0aWxpdHkgdGhhdCByZXR1cm5zIHRoZSBsYXN0IGNvbXBvbmVudCBvZiBhIGdpdCBwYXRoIGFzIGRpcmVjdG9yeQorICAgICAgICAiIiIKKyAgICAgICAgaW1wb3J0IHJlCisgICAgICAgIGNvbXBvbmVudHMgPSByZS5zcGxpdChyJ1s6XC5cL10nLCB1cmwpCisgICAgICAgIGJhc2UgPSBjb21wb25lbnRzWy0yXSBpZiBjb21wb25lbnRzWy0xXSA9PSAiZ2l0IiBlbHNlIGNvbXBvbmVudHNbLTFdCisKKyAgICAgICAgaWYgYnJhbmNoICE9ICJIRUFEIjoKKyAgICAgICAgICAgIHJldHVybiAiXyVzXyVzLnRvYXN0ZXJfY2xvbmVkIiAlIChiYXNlLCBicmFuY2gpCisKKworICAgICAgICAjIHdvcmQgb2YgYXR0ZW50aW9uOyB0aGlzIGlzIGEgbG9jYWxob3N0LXNwZWNpZmljIGlzc3VlOyBvbmx5IG9uIHRoZSBsb2NhbGhvc3Qgd2UgZXhwZWN0IHRvIGhhdmUgIkhFQUQiIHJlbGVhc2VzCisgICAgICAgICMgd2hpY2ggX0FMV0FZU18gbWVhbnMgdGhlIGN1cnJlbnQgcG9reSBjaGVja291dAorICAgICAgICBmcm9tIG9zLnBhdGggaW1wb3J0IGRpcm5hbWUgYXMgRE4KKyAgICAgICAgbG9jYWxfY2hlY2tvdXRfcGF0aCA9IEROKEROKEROKEROKEROKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKSkpKQorICAgICAgICAjbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IHVzaW5nIEhFQUQgY2hlY2tvdXQgaW4gJXMiICUgbG9jYWxfY2hlY2tvdXRfcGF0aCkKKyAgICAgICAgcmV0dXJuIGxvY2FsX2NoZWNrb3V0X3BhdGgKKworCisgICAgZGVmIHNldExheWVycyhzZWxmLCBiaXRiYWtlcywgbGF5ZXJzKToKKyAgICAgICAgIiIiIGEgd29yZCBvZiBhdHRlbnRpb246IGJ5IGNvbnZlbnRpb24sIHRoZSBmaXJzdCBsYXllciBmb3IgYW55IGJ1aWxkIHdpbGwgYmUgcG9reSEgIiIiCisKKyAgICAgICAgYXNzZXJ0IHNlbGYuYmUuc291cmNlZGlyIGlzIG5vdCBOb25lCisgICAgICAgIGFzc2VydCBsZW4oYml0YmFrZXMpID09IDEKKyAgICAgICAgIyBzZXQgbGF5ZXJzIGluIHRoZSBsYXllcnNvdXJjZQorCisgICAgICAgICMgMS4gZ2V0IGEgbGlzdCBvZiByZXBvcyB3aXRoIGJyYW5jaGVzLCBhbmQgbWFwIGRpcnBhdGhzIGZvciBlYWNoIGxheWVyCisgICAgICAgIGdpdHJlcG9zID0ge30KKworICAgICAgICBnaXRyZXBvc1soYml0YmFrZXNbMF0uZ2l0dXJsLCBiaXRiYWtlc1swXS5jb21taXQpXSA9IFtdCisgICAgICAgIGdpdHJlcG9zWyhiaXRiYWtlc1swXS5naXR1cmwsIGJpdGJha2VzWzBdLmNvbW1pdCldLmFwcGVuZCggKCJiaXRiYWtlIiwgYml0YmFrZXNbMF0uZGlycGF0aCkgKQorCisgICAgICAgIGZvciBsYXllciBpbiBsYXllcnM6CisgICAgICAgICAgICAjIHdlIGRvbid0IHByb2Nlc3MgbG9jYWwgVVJMcworICAgICAgICAgICAgaWYgbGF5ZXIuZ2l0dXJsLnN0YXJ0c3dpdGgoImZpbGU6Ly8iKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbm90IChsYXllci5naXR1cmwsIGxheWVyLmNvbW1pdCkgaW4gZ2l0cmVwb3M6CisgICAgICAgICAgICAgICAgZ2l0cmVwb3NbKGxheWVyLmdpdHVybCwgbGF5ZXIuY29tbWl0KV0gPSBbXQorICAgICAgICAgICAgZ2l0cmVwb3NbKGxheWVyLmdpdHVybCwgbGF5ZXIuY29tbWl0KV0uYXBwZW5kKCAobGF5ZXIubmFtZSwgbGF5ZXIuZGlycGF0aCkgKQorCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXIsIG91ciBnaXQgcmVwb3MgYXJlICVzIiAlIHBmb3JtYXQoZ2l0cmVwb3MpKQorCisKKyAgICAgICAgIyAyLiBmaW5kIGNoZWNrZWQtb3V0IGdpdCByZXBvcyBpbiB0aGUgc291cmNlZGlyIGRpcmVjdG9yeSB0aGF0IG1heSBoZWxwIGZhc3RlciBjbG9uaW5nCisKKyAgICAgICAgY2FjaGVkX2xheWVycyA9IHt9CisgICAgICAgIGZvciBsZGlyIGluIG9zLmxpc3RkaXIoc2VsZi5iZS5zb3VyY2VkaXIpOgorICAgICAgICAgICAgZmxkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5iZS5zb3VyY2VkaXIsIGxkaXIpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZsZGlyKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYuX3NoZWxsY21kKCJnaXQgcmVtb3RlIC12IiwgZmxkaXIpLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZSA9IGxpbmUuc3BsaXQoIlx0IilbMV0uc3BsaXQoIiAiKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlbW90ZSBub3QgaW4gY2FjaGVkX2xheWVyczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkX2xheWVyc1tyZW1vdGVdID0gZmxkaXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBleGNlcHQgU2hlbGxDbWRFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgICMgaWdub3JlIGFueSBlcnJvcnMgaW4gY29sbGVjdGluZyBnaXQgcmVtb3RlcworICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgbGF5ZXJsaXN0ID0gW10KKworCisgICAgICAgICMgMy4gY2hlY2tvdXQgdGhlIHJlcG9zaXRvcmllcworICAgICAgICBmb3IgZ2l0dXJsLCBjb21taXQgaW4gZ2l0cmVwb3Mua2V5cygpOgorICAgICAgICAgICAgbG9jYWxkaXJuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuYmUuc291cmNlZGlyLCBzZWxmLmdldEdpdENsb25lRGlyZWN0b3J5KGdpdHVybCwgY29tbWl0KSkKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiBnaXR1cmwgJXM6JXMgY2hlY2tpbmcgb3V0IGluIGN1cnJlbnQgZGlyZWN0b3J5ICVzIiAlIChnaXR1cmwsIGNvbW1pdCwgbG9jYWxkaXJuYW1lKSkKKworICAgICAgICAgICAgIyBtYWtlIHN1cmUgb3VyIGRpcmVjdG9yeSBpcyBhIGdpdCByZXBvc2l0b3J5CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsb2NhbGRpcm5hbWUpOgorICAgICAgICAgICAgICAgIGxvY2FscmVtb3RlcyA9IHNlbGYuX3NoZWxsY21kKCJnaXQgcmVtb3RlIC12IiwgbG9jYWxkaXJuYW1lKQorICAgICAgICAgICAgICAgIGlmIG5vdCBnaXR1cmwgaW4gbG9jYWxyZW1vdGVzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBCdWlsZFNldHVwRXhjZXB0aW9uKCJFeGlzdGluZyBnaXQgcmVwb3NpdG9yeSBhdCAlcywgYnV0IHdpdGggZGlmZmVyZW50IHJlbW90ZXMgKCclcycsIGV4cGVjdGVkICclcycpLiBUb2FzdGVyIHdpbGwgbm90IGNvbnRpbnVlIG91dCBvZiBmZWFyIG9mIGRhbWFnaW5nIHNvbWV0aGluZy4iICUgKGxvY2FsZGlybmFtZSwgIiwgIi5qb2luKGxvY2FscmVtb3Rlcy5zcGxpdCgiXG4iKSksIGdpdHVybCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGdpdHVybCBpbiBjYWNoZWRfbGF5ZXJzOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlciBnaXQtY29weWluZyAlcyB0byAlcyIgJSAoY2FjaGVkX2xheWVyc1tnaXR1cmxdLCBsb2NhbGRpcm5hbWUpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zaGVsbGNtZCgiZ2l0IGNsb25lIFwiJXNcIiBcIiVzXCIiICUgKGNhY2hlZF9sYXllcnNbZ2l0dXJsXSwgbG9jYWxkaXJuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2hlbGxjbWQoImdpdCByZW1vdGUgcmVtb3ZlIG9yaWdpbiIsIGxvY2FsZGlybmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2hlbGxjbWQoImdpdCByZW1vdGUgYWRkIG9yaWdpbiBcIiVzXCIiICUgZ2l0dXJsLCBsb2NhbGRpcm5hbWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IGNsb25pbmcgJXM6JXMgaW4gJXMiICUgKGdpdHVybCwgY29tbWl0LCBsb2NhbGRpcm5hbWUpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zaGVsbGNtZCgiZ2l0IGNsb25lIFwiJXNcIiAtLXNpbmdsZS1icmFuY2ggLS1icmFuY2ggXCIlc1wiIFwiJXNcIiIgJSAoZ2l0dXJsLCBjb21taXQsIGxvY2FsZGlybmFtZSkpCisKKyAgICAgICAgICAgICMgYnJhbmNoIG1hZ2ljIG5hbWUgIkhFQUQiIHdpbGwgaW5oaWJpdCBjaGVja291dAorICAgICAgICAgICAgaWYgY29tbWl0ICE9ICJIRUFEIjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogY2hlY2tpbmcgb3V0IGNvbW1pdCAlcyB0byAlcyAiICUgKGNvbW1pdCwgbG9jYWxkaXJuYW1lKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9zaGVsbGNtZCgiZ2l0IGZldGNoIC0tYWxsICYmIGdpdCBjaGVja291dCBcIiVzXCIgJiYgZ2l0IHJlYmFzZSBcIm9yaWdpbi8lc1wiIiAlIChjb21taXQsIGNvbW1pdCkgLCBsb2NhbGRpcm5hbWUpCisKKyAgICAgICAgICAgICMgdGFrZSB0aGUgbG9jYWxkaXJuYW1lIGFzIHBva3kgZGlyIGlmIHdlIGNhbiBmaW5kIHRoZSBvZS1pbml0LWJ1aWxkLWVudgorICAgICAgICAgICAgaWYgc2VsZi5wb2t5ZGlybmFtZSBpcyBOb25lIGFuZCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4obG9jYWxkaXJuYW1lLCAib2UtaW5pdC1idWlsZC1lbnYiKSk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IHNlbGVjdGVkIHBva3kgZGlyIG5hbWUgJXMiICUgbG9jYWxkaXJuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYucG9reWRpcm5hbWUgPSBsb2NhbGRpcm5hbWUKKworICAgICAgICAgICAgICAgICMgbWFrZSBzdXJlIHdlIGhhdmUgYSB3b3JraW5nIGJpdGJha2UKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYucG9reWRpcm5hbWUsICdiaXRiYWtlJykpOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogY2hlY2tpbmcgYml0YmFrZSBpbnRvIHRoZSBwb2t5IGRpcm5hbWUgJXMgIiAlIHNlbGYucG9reWRpcm5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NoZWxsY21kKCJnaXQgY2xvbmUgLWIgXCIlc1wiIFwiJXNcIiBcIiVzXCIgIiAlIChiaXRiYWtlc1swXS5jb21taXQsIGJpdGJha2VzWzBdLmdpdHVybCwgb3MucGF0aC5qb2luKHNlbGYucG9reWRpcm5hbWUsICdiaXRiYWtlJykpKQorCisgICAgICAgICAgICAjIHZlcmlmeSBvdXIgcmVwb3NpdG9yaWVzCisgICAgICAgICAgICBmb3IgbmFtZSwgZGlycGF0aCBpbiBnaXRyZXBvc1soZ2l0dXJsLCBjb21taXQpXToKKyAgICAgICAgICAgICAgICBsb2NhbGRpcnBhdGggPSBvcy5wYXRoLmpvaW4obG9jYWxkaXJuYW1lLCBkaXJwYXRoKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiBsb2NhbGRpcnBhdGggZXhwZWN0ZWQgJyVzJyIgJSBsb2NhbGRpcnBhdGgpCisgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGxvY2FsZGlycGF0aCk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEJ1aWxkU2V0dXBFeGNlcHRpb24oIkNhbm5vdCBmaW5kIGxheWVyIGdpdCBwYXRoICclcycgaW4gY2hlY2tlZCBvdXQgcmVwb3NpdG9yeSAnJXM6JXMnLiBBYm9ydGluZy4iICUgKGxvY2FsZGlycGF0aCwgZ2l0dXJsLCBjb21taXQpKQorCisgICAgICAgICAgICAgICAgaWYgbmFtZSAhPSAiYml0YmFrZSI6CisgICAgICAgICAgICAgICAgICAgIGxheWVybGlzdC5hcHBlbmQobG9jYWxkaXJwYXRoLnJzdHJpcCgiLyIpKQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiBjdXJyZW50IGxheWVyIGxpc3QgJXMgIiAlIHBmb3JtYXQobGF5ZXJsaXN0KSkKKworICAgICAgICAjIDQuIGNvbmZpZ3VyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQsIHNvIHdlIGhhdmUgYSBjb25mL2JibGF5ZXJzLmNvbmYKKyAgICAgICAgYXNzZXJ0IHNlbGYucG9reWRpcm5hbWUgaXMgbm90IE5vbmUKKyAgICAgICAgc2VsZi5fc2V0dXBCRSgpCisKKyAgICAgICAgIyA1LiB1cGRhdGUgdGhlIGJibGF5ZXJzLmNvbmYKKyAgICAgICAgYmJsYXllcmNvbmYgPSBvcy5wYXRoLmpvaW4oc2VsZi5iZS5idWlsZGRpciwgImNvbmYvYmJsYXllcnMuY29uZiIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhiYmxheWVyY29uZik6CisgICAgICAgICAgICByYWlzZSBCdWlsZFNldHVwRXhjZXB0aW9uKCJCRSBpcyBub3QgY29uc2lzdGVudDogYmJsYXllcnMuY29uZiBmaWxlIG1pc3NpbmcgYXQgJXMiICUgYmJsYXllcmNvbmYpCisKKyAgICAgICAgQnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIuX3VwZGF0ZUJCTGF5ZXJzKGJibGF5ZXJjb25mLCBsYXllcmxpc3QpCisKKyAgICAgICAgc2VsZi5pc2xheWVyc2V0ID0gVHJ1ZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHJlYWRTZXJ2ZXJMb2dGaWxlKHNlbGYpOgorICAgICAgICByZXR1cm4gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5iZS5idWlsZGRpciwgInRvYXN0ZXJfc2VydmVyLmxvZyIpLCAiciIpLnJlYWQoKQorCisgICAgZGVmIHJlbGVhc2Uoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLmJlLnNvdXJjZWRpciBhbmQgb3MucGF0aC5leGlzdHMoc2VsZi5iZS5idWlsZGRpcikKKyAgICAgICAgaW1wb3J0IHNodXRpbAorICAgICAgICBzaHV0aWwucm10cmVlKG9zLnBhdGguam9pbihzZWxmLmJlLnNvdXJjZWRpciwgImJ1aWxkIikpCisgICAgICAgIGFzc2VydCBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5iZS5idWlsZGRpcikKKworCisgICAgZGVmIHRyaWdnZXJCdWlsZChzZWxmLCBiaXRiYWtlLCBsYXllcnMsIHZhcmlhYmxlcywgdGFyZ2V0cyk6CisgICAgICAgICMgc2V0IHVwIHRoZSBidWlkIGVudmlyb25tZW50IHdpdGggdGhlIG5lZWRlZCBsYXllcnMKKyAgICAgICAgc2VsZi5zZXRMYXllcnMoYml0YmFrZSwgbGF5ZXJzKQorICAgICAgICBzZWxmLndyaXRlQ29uZkZpbGUoImNvbmYvdG9hc3Rlci1wcmUuY29uZiIsIHZhcmlhYmxlcykKKyAgICAgICAgc2VsZi53cml0ZUNvbmZGaWxlKCJjb25mL3RvYXN0ZXIuY29uZiIsIHJhdyA9ICJJTkhFUklUKz1cInRvYXN0ZXIgYnVpbGRoaXN0b3J5XCIiKQorCisgICAgICAgICMgZ2V0IHRoZSBiYiBzZXJ2ZXIgcnVubmluZyB3aXRoIHRoZSBidWlsZCByZXEgaWQgYW5kIGJ1aWxkIGVudiBpZAorICAgICAgICBiYmN0cmwgPSBzZWxmLmdldEJCQ29udHJvbGxlcigpCisKKyAgICAgICAgIyB0cmlnZ2VyIHRoZSBidWlsZCBjb21tYW5kCisgICAgICAgIHRhc2sgPSByZWR1Y2UobGFtYmRhIHgsIHk6IHggaWYgbGVuKHkpPT0gMCBlbHNlIHksIG1hcChsYW1iZGEgeTogeS50YXNrLCB0YXJnZXRzKSkKKyAgICAgICAgaWYgbGVuKHRhc2spID09IDA6CisgICAgICAgICAgICB0YXNrID0gTm9uZQorCisgICAgICAgIGJiY3RybC5idWlsZChsaXN0KG1hcChsYW1iZGEgeDp4LnRhcmdldCwgdGFyZ2V0cykpLCB0YXNrKQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiBCdWlsZCBsYXVuY2hlZCwgZXhpdGluZy4gRm9sbG93IGJ1aWxkIGxvZ3MgYXQgJXMvdG9hc3Rlcl91aS5sb2ciICUgc2VsZi5iZS5idWlsZGRpcikKKworICAgICAgICAjIGRpc2Nvbm5lY3QgZnJvbSB0aGUgc2VydmVyCisgICAgICAgIGJiY3RybC5kaXNjb25uZWN0KCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21hbmFnZW1lbnQvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tYW5hZ2VtZW50L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tYW5hZ2VtZW50L19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tYW5hZ2VtZW50L2NvbW1hbmRzL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9jaGVja3NldHRpbmdzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9jaGVja3NldHRpbmdzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjY2M3YzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tYW5hZ2VtZW50L2NvbW1hbmRzL2NoZWNrc2V0dGluZ3MucHkKQEAgLTAsMCArMSwyNDcgQEAKK2Zyb20gZGphbmdvLmNvcmUubWFuYWdlbWVudC5iYXNlIGltcG9ydCBOb0FyZ3NDb21tYW5kLCBDb21tYW5kRXJyb3IKK2Zyb20gZGphbmdvLmRiIGltcG9ydCB0cmFuc2FjdGlvbgorZnJvbSBibGRjb250cm9sLmJiY29udHJvbGxlciBpbXBvcnQgZ2V0QnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIsIFNoZWxsQ21kRXhjZXB0aW9uCitmcm9tIGJsZGNvbnRyb2wubW9kZWxzIGltcG9ydCBCdWlsZFJlcXVlc3QsIEJ1aWxkRW52aXJvbm1lbnQsIEJSRXJyb3IKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgVG9hc3RlclNldHRpbmcsIEJ1aWxkCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMsIHRyYWNlYmFjaworCitkZWYgRE4ocGF0aCk6CisgICAgaWYgcGF0aCBpcyBOb25lOgorICAgICAgICByZXR1cm4gIiIKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gb3MucGF0aC5kaXJuYW1lKHBhdGgpCisKKworY2xhc3MgQ29tbWFuZChOb0FyZ3NDb21tYW5kKToKKyAgICBhcmdzID0gIiIKKyAgICBoZWxwID0gIlZlcmlmaWVzIHRoYXQgdGhlIGNvbmZpZ3VyZWQgc2V0dGluZ3MgYXJlIHZhbGlkIGFuZCB1c2FibGUsIG9yIHByb21wdHMgdGhlIHVzZXIgdG8gZml4IHRoZSBzZXR0aW5ncy4iCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoQ29tbWFuZCwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmd1ZXNzcGF0aCA9IEROKEROKEROKEROKEROKEROKEROKF9fZmlsZV9fKSkpKSkpKQorCisgICAgZGVmIF9maW5kX2ZpcnN0X3BhdGhfZm9yX2ZpbGUoc2VsZiwgc3RhcnRkaXJlY3RvcnksIGZpbGVuYW1lLCBsZXZlbCA9IDApOgorICAgICAgICBpZiBsZXZlbCA8IDA6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBkaXJzID0gW10KKyAgICAgICAgZm9yIGkgaW4gb3MubGlzdGRpcihzdGFydGRpcmVjdG9yeSk6CisgICAgICAgICAgICBqID0gb3MucGF0aC5qb2luKHN0YXJ0ZGlyZWN0b3J5LCBpKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoaik6CisgICAgICAgICAgICAgICAgaWYgaSA9PSBmaWxlbmFtZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0ZGlyZWN0b3J5CisgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIoaik6CisgICAgICAgICAgICAgICAgZGlycy5hcHBlbmQoaikKKyAgICAgICAgZm9yIGogaW4gZGlyczoKKyAgICAgICAgICAgIHJldCA9IHNlbGYuX2ZpbmRfZmlyc3RfcGF0aF9mb3JfZmlsZShqLCBmaWxlbmFtZSwgbGV2ZWwgLSAxKQorICAgICAgICAgICAgaWYgcmV0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiByZXQKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfcmVjdXJzaXZlX2xpc3RfZGlyZWN0b3JpZXMoc2VsZiwgc3RhcnRkaXJlY3RvcnksIGxldmVsID0gMCk6CisgICAgICAgIGlmIGxldmVsIDwgMDoKKyAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBkaXJzID0gW10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGkgaW4gb3MubGlzdGRpcihzdGFydGRpcmVjdG9yeSk6CisgICAgICAgICAgICAgICAgaiA9IG9zLnBhdGguam9pbihzdGFydGRpcmVjdG9yeSwgaSkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGopOgorICAgICAgICAgICAgICAgICAgICBkaXJzLmFwcGVuZChqKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZm9yIGogaW4gZGlyczoKKyAgICAgICAgICAgICAgICBkaXJzID0gZGlycyArIHNlbGYuX3JlY3Vyc2l2ZV9saXN0X2RpcmVjdG9yaWVzKGosIGxldmVsIC0gMSkKKyAgICAgICAgcmV0dXJuIGRpcnMKKworCisgICAgZGVmIF9nZXRfc3VnZ2VzdGVkX3NvdXJjZWRpcihzZWxmLCBiZSk6CisgICAgICAgIGlmIGJlLmJldHlwZSAhPSBCdWlsZEVudmlyb25tZW50LlRZUEVfTE9DQUw6CisgICAgICAgICAgICByZXR1cm4gIiIKKyAgICAgICAgcmV0dXJuIEROKEROKEROKHNlbGYuX2ZpbmRfZmlyc3RfcGF0aF9mb3JfZmlsZShzZWxmLmd1ZXNzcGF0aCwgInRvYXN0ZXJjb25mLmpzb24iLCA0KSkpKQorCisgICAgZGVmIF9nZXRfc3VnZ2VzdGVkX2J1aWxkZGlyKHNlbGYsIGJlKToKKyAgICAgICAgaWYgYmUuYmV0eXBlICE9IEJ1aWxkRW52aXJvbm1lbnQuVFlQRV9MT0NBTDoKKyAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICByZXR1cm4gRE4oc2VsZi5fZmluZF9maXJzdF9wYXRoX2Zvcl9maWxlKEROKHNlbGYuZ3Vlc3NwYXRoKSwgImJibGF5ZXJzLmNvbmYiLCA0KSkKKworCisgICAgZGVmIF92ZXJpZnlfYXJ0aWZhY3Rfc3RvcmFnZV9kaXIoc2VsZik6CisgICAgICAgICMgdmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIHNldHRpbmdzIGZvciBkb3dubG9hZGluZyBhcnRpZmFjdHMKKyAgICAgICAgd2hpbGUgVG9hc3RlclNldHRpbmcub2JqZWN0cy5maWx0ZXIobmFtZT0iQVJUSUZBQ1RTX1NUT1JBR0VfRElSIikuY291bnQoKSA9PSAwOgorICAgICAgICAgICAgZ3Vlc3NlZHBhdGggPSBvcy5nZXRjd2QoKSArICIvdG9hc3Rlcl9idWlsZF9hcnRpZmFjdHMvIgorICAgICAgICAgICAgcHJpbnQoIlxuVG9hc3RlciBuZWVkcyB0byBrbm93IGluIHdoaWNoIGRpcmVjdG9yeSBpdCBjYW4gZG93bmxvYWQgYnVpbGQgbG9nIGZpbGVzIGFuZCBvdGhlciBhcnRpZmFjdHMuXG5Ub2FzdGVyIHN1Z2dlc3RzIFwiJXNcIi4iICUgZ3Vlc3NlZHBhdGgpCisgICAgICAgICAgICBhcnRpZmFjdHNfc3RvcmFnZV9kaXIgPSByYXdfaW5wdXQoIlByZXNzIEVudGVyIHRvIHNlbGVjdCBcIiVzXCIgb3IgdHlwZSB0aGUgZnVsbCBwYXRoIHRvIGEgZGlmZmVyZW50IGRpcmVjdG9yeTogIiAlIGd1ZXNzZWRwYXRoKQorICAgICAgICAgICAgaWYgbGVuKGFydGlmYWN0c19zdG9yYWdlX2RpcikgPT0gMDoKKyAgICAgICAgICAgICAgICBhcnRpZmFjdHNfc3RvcmFnZV9kaXIgPSBndWVzc2VkcGF0aAorICAgICAgICAgICAgaWYgbGVuKGFydGlmYWN0c19zdG9yYWdlX2RpcikgPiAwIGFuZCBhcnRpZmFjdHNfc3RvcmFnZV9kaXIuc3RhcnRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMoYXJ0aWZhY3RzX3N0b3JhZ2VfZGlyKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG9zZToKKyAgICAgICAgICAgICAgICAgICAgaWYgIkZpbGUgZXhpc3RzIiBpbiBzdHIob3NlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIG9zZQorICAgICAgICAgICAgICAgIFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuY3JlYXRlKG5hbWU9IkFSVElGQUNUU19TVE9SQUdFX0RJUiIsIHZhbHVlPWFydGlmYWN0c19zdG9yYWdlX2RpcikKKyAgICAgICAgcmV0dXJuIDAKKworCisgICAgZGVmIF92ZXJpZnlfYnVpbGRfZW52aXJvbm1lbnQoc2VsZik6CisgICAgICAgICMgcmVmdXNlIHRvIHN0YXJ0IGlmIHdlIGhhdmUgbm8gYnVpbGQgZW52aXJvbm1lbnRzCisgICAgICAgIHdoaWxlIEJ1aWxkRW52aXJvbm1lbnQub2JqZWN0cy5jb3VudCgpID09IDA6CisgICAgICAgICAgICBwcmludCgiICEhIE5vIGJ1aWxkIGVudmlyb25tZW50cyBmb3VuZC4gVG9hc3RlciBuZWVkcyBhdCBsZWFzdCBvbmUgYnVpbGQgZW52aXJvbm1lbnQgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBydW4gYnVpbGRzLlxuIiArCisgICAgICAgICAgICAgICAgIllvdSBjYW4gbWFudWFsbHkgZGVmaW5lIGJ1aWxkIGVudmlyb25tZW50cyBpbiB0aGUgZGF0YWJhc2UgdGFibGUgYmxkY29udHJvbF9idWlsZGVudmlyb25tZW50LlxuIiArCisgICAgICAgICAgICAgICAgIk9yIFRvYXN0ZXIgY2FuIGRlZmluZSBhIHNpbXBsZSBsb2NhbGhvc3QtYmFzZWQgYnVpbGQgZW52aXJvbm1lbnQgZm9yIHlvdS4iKQorCisgICAgICAgICAgICBpID0gcmF3X2lucHV0KCIgLS0gIERvIHlvdSB3YW50IHRvIGNyZWF0ZSBhIGJhc2ljIGxvY2FsaG9zdCBidWlsZCBlbnZpcm9ubWVudCA/IChZL24pICIpOworICAgICAgICAgICAgaWYgbm90IGxlbihpKSBvciBpLnN0YXJ0c3dpdGgoInkiKSBvciBpLnN0YXJ0c3dpdGgoIlkiKToKKyAgICAgICAgICAgICAgICBCdWlsZEVudmlyb25tZW50Lm9iamVjdHMuY3JlYXRlKHBrID0gMSwgYmV0eXBlID0gMCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUb2FzdGVyIGNhbm5vdCBzdGFydCB3aXRob3V0IGJ1aWxkIGVudmlyb25tZW50cy4gQWJvcnRpbmcuIikKKworCisgICAgICAgICMgd2UgbWFrZSBzdXJlIHdlIGhhdmUgYnVpbGRkaXIgYW5kIHNvdXJjZWRpciBmb3IgYWxsIGRlZmluZWQgYnVpbGQgZW52aW9ubWVudHMKKyAgICAgICAgZm9yIGJlIGluIEJ1aWxkRW52aXJvbm1lbnQub2JqZWN0cy5hbGwoKToKKyAgICAgICAgICAgIGJlLm5lZWRzX2ltcG9ydCA9IEZhbHNlCisgICAgICAgICAgICBkZWYgX3ZlcmlmeV9iZSgpOgorICAgICAgICAgICAgICAgIGlzX2NoYW5nZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIHByaW50KCJcblZlcmlmeWluZyB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIElmIHRoZSBsb2NhbCBidWlsZCBlbnZpcm9ubWVudCBpcyBub3QgcHJvcGVybHkgY29uZmlndXJlZCwgeW91IHdpbGwgYmUgYXNrZWQgdG8gY29uZmlndXJlIGl0LiIpCisKKyAgICAgICAgICAgICAgICBkZWYgX3VwZGF0ZV9zb3VyY2VkaXIoKToKKyAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGVkZGlyID0gc2VsZi5fZ2V0X3N1Z2dlc3RlZF9zb3VyY2VkaXIoYmUpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihzdWdnZXN0ZWRkaXIpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlLnNvdXJjZWRpciA9IHJhd19pbnB1dCgiVGhpcyBpcyB0aGUgZGlyZWN0b3J5IFRvYXN0ZXIgdXNlcyB0byBjaGVjayBvdXQgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZSBsYXllcnMgeW91IHdpbGwgYnVpbGQuIFRvYXN0ZXIgd2lsbCBjcmVhdGUgbmV3IGNsb25lcyBvZiB0aGUgbGF5ZXJzLCBzbyBleGlzdGluZyBjb250ZW50IGluIHRoZSBjaG9zZW4gZGlyZWN0b3J5IHdpbGwgbm90IGJlIGNoYW5nZWQuXG5Ub2FzdGVyIHN1Z2dlc3RzIHlvdSB1c2UgXCIlc1wiIGFzIHlvdXIgbGF5ZXJzIGNoZWNrb3V0IGRpcmVjdG9yeS4gSWYgeW91IHNlbGVjdCB0aGlzIGRpcmVjdG9yeSwgYSBsYXllciBsaWtlIFwibWV0YS1pbnRlbFwiIHdpbGwgZW5kIHVwIGluIFwiJXMvbWV0YS1pbnRlbFwiLlxuUHJlc3MgRW50ZXIgdG8gc2VsZWN0IFwiJXNcIiBvciB0eXBlIHRoZSBmdWxsIHBhdGggdG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5LiBJZiB5b3UgcHJvdmlkZSB5b3VyIG93biBkaXJlY3RvcnksIGl0IG11c3QgYmUgYSBwYXJlbnQgb2YgdGhlIGNsb25lZCBkaXJlY3RvcnkgZm9yIHRoZSBzb3VyY2VzIHlvdSBhcmUgdXNpbmcgdG8gcnVuIFRvYXN0ZXI6ICIgJSAoc3VnZ2VzdGVkZGlyLCBzdWdnZXN0ZWRkaXIsIHN1Z2dlc3RlZGRpcikpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBiZS5zb3VyY2VkaXIgPSByYXdfaW5wdXQoIlRvYXN0ZXIgbmVlZHMgdG8ga25vdyBpbiB3aGljaCBkaXJlY3RvcnkgaXQgc2hvdWxkIGNoZWNrIG91dCB0aGUgc291cmNlIGNvZGUgb2YgdGhlIGxheWVycyB5b3Ugd2lsbCBidWlsZC4gVGhlIGRpcmVjdG9yeSBzaG91bGQgYmUgYSBwYXJlbnQgb2YgdGhlIGNsb25lZCBkaXJlY3RvcnkgZm9yIHRoZSBzb3VyY2VzIHlvdSBhcmUgdXNpbmcgdG8gcnVuIFRvYXN0ZXIuIFRvYXN0ZXIgd2lsbCBjcmVhdGUgbmV3IGNsb25lcyBvZiB0aGUgbGF5ZXJzLCBzbyBleGlzdGluZyBjb250ZW50IGluIHRoZSBjaG9zZW4gZGlyZWN0b3J5IHdpbGwgbm90IGJlIGNoYW5nZWQuXG5UeXBlIHRoZSBmdWxsIHBhdGggdG8gdGhlIGRpcmVjdG9yeSAoZm9yIGV4YW1wbGU6IFwiJXNcIjogIiAlIG9zLmVudmlyb24uZ2V0KCdIT01FJywgJy90bXAvJykpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihiZS5zb3VyY2VkaXIpID09IDAgYW5kIGxlbihzdWdnZXN0ZWRkaXIpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlLnNvdXJjZWRpciA9IHN1Z2dlc3RlZGRpcgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICAgICAgICAgaWYgbGVuKGJlLnNvdXJjZWRpcikgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuIC0tIFZhbGlkYXRpb246IFRoZSBsYXllcnMgY2hlY2tvdXQgZGlyZWN0b3J5IG11c3QgYmUgc2V0LiIKKyAgICAgICAgICAgICAgICAgICAgaXNfY2hhbmdlZCA9IF91cGRhdGVfc291cmNlZGlyKCkKKworICAgICAgICAgICAgICAgIGlmIG5vdCBiZS5zb3VyY2VkaXIuc3RhcnRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiXG4gLS0gVmFsaWRhdGlvbjogVGhlIGxheWVycyBjaGVja291dCBkaXJlY3RvcnkgbXVzdCBiZSBzZXQgdG8gYW4gYWJzb2x1dGUgcGF0aC4iCisgICAgICAgICAgICAgICAgICAgIGlzX2NoYW5nZWQgPSBfdXBkYXRlX3NvdXJjZWRpcigpCisKKyAgICAgICAgICAgICAgICBpZiBub3QgYmUuc291cmNlZGlyIGluIEROKF9fZmlsZV9fKToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuIC0tIFZhbGlkYXRpb246IFRoZSBsYXllcnMgY2hlY2tvdXQgZGlyZWN0b3J5IG11c3QgYmUgYSBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgY2hlY2tvdXQuIgorICAgICAgICAgICAgICAgICAgICBpc19jaGFuZ2VkID0gX3VwZGF0ZV9zb3VyY2VkaXIoKQorCisgICAgICAgICAgICAgICAgaWYgaXNfY2hhbmdlZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgYmUuYmV0eXBlID09IEJ1aWxkRW52aXJvbm1lbnQuVFlQRV9MT0NBTDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlLm5lZWRzX2ltcG9ydCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAgICAgICAgIGRlZiBfdXBkYXRlX2J1aWxkZGlyKCk6CisgICAgICAgICAgICAgICAgICAgIHN1Z2dlc3RlZGRpciA9IHNlbGYuX2dldF9zdWdnZXN0ZWRfYnVpbGRkaXIoYmUpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihzdWdnZXN0ZWRkaXIpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlLmJ1aWxkZGlyID0gcmF3X2lucHV0KCJUb2FzdGVyIG5lZWRzIHRvIGtub3cgd2hlcmUgeW91ciBidWlsZCBkaXJlY3RvcnkgaXMgbG9jYXRlZC5cblRoZSBidWlsZCBkaXJlY3RvcnkgaXMgd2hlcmUgYWxsIHRoZSBhcnRpZmFjdHMgY3JlYXRlZCBieSB5b3VyIGJ1aWxkcyB3aWxsIGJlIHN0b3JlZC4gVG9hc3RlciBzdWdnZXN0cyBcIiVzXCIuXG5QcmVzcyBFbnRlciB0byBzZWxlY3QgXCIlc1wiIG9yIHR5cGUgdGhlIGZ1bGwgcGF0aCB0byBhIGRpZmZlcmVudCBkaXJlY3Rvcnk6ICIgJSAoc3VnZ2VzdGVkZGlyLCBzdWdnZXN0ZWRkaXIpKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYmUuYnVpbGRkaXIgPSByYXdfaW5wdXQoIlRvYXN0ZXIgbmVlZHMgdG8ga25vdyB3aGVyZSBpcyB5b3VyIGJ1aWxkIGRpcmVjdG9yeS5cblRoZSBidWlsZCBkaXJlY3RvcnkgaXMgd2hlcmUgYWxsIHRoZSBhcnRpZmFjdHMgY3JlYXRlZCBieSB5b3VyIGJ1aWxkcyB3aWxsIGJlIHN0b3JlZC4gVHlwZSB0aGUgZnVsbCBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgKGZvciBleGFtcGxlOiBcIiAlcy9idWlsZFwiKSIgJSBvcy5lbnZpcm9uLmdldCgnSE9NRScsJy90bXAvJykpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihiZS5idWlsZGRpcikgPT0gMCBhbmQgbGVuKHN1Z2dlc3RlZGRpcikgPiAwOgorICAgICAgICAgICAgICAgICAgICAgICAgYmUuYnVpbGRkaXIgPSBzdWdnZXN0ZWRkaXIKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAgICAgICAgIGlmIGxlbihiZS5idWlsZGRpcikgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuIC0tIFZhbGlkYXRpb246IFRoZSBidWlsZCBkaXJlY3RvcnkgbXVzdCBiZSBzZXQuIgorICAgICAgICAgICAgICAgICAgICBpc19jaGFuZ2VkID0gX3VwZGF0ZV9idWlsZGRpcigpCisKKyAgICAgICAgICAgICAgICBpZiBub3QgYmUuYnVpbGRkaXIuc3RhcnRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiXG4gLS0gVmFsaWRhdGlvbjogVGhlIGJ1aWxkIGRpcmVjdG9yeSBtdXN0IHRvIGJlIHNldCB0byBhbiBhYnNvbHV0ZSBwYXRoLiIKKyAgICAgICAgICAgICAgICAgICAgaXNfY2hhbmdlZCA9IF91cGRhdGVfYnVpbGRkaXIoKQorCisKKyAgICAgICAgICAgICAgICBpZiBpc19jaGFuZ2VkOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiXG5CdWlsZCBjb25maWd1cmF0aW9uIHNhdmVkIgorICAgICAgICAgICAgICAgICAgICBiZS5zYXZlKCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworCisgICAgICAgICAgICAgICAgaWYgYmUubmVlZHNfaW1wb3J0OgorICAgICAgICAgICAgICAgICAgICBwcmludCAiXG5Ub2FzdGVyIGNhbiB1c2UgYSBTSU5HTEUgcHJlZGVmaW5lZCBjb25maWd1cmF0aW9uIGZpbGUgdG8gc2V0IHVwIGRlZmF1bHQgcHJvamVjdCBzZXR0aW5ncyBhbmQgbGF5ZXIgaW5mb3JtYXRpb24gc291cmNlcy5cbiIKKworICAgICAgICAgICAgICAgICAgICAjIGZpbmQgY29uZmlndXJhdGlvbiBmaWxlcworICAgICAgICAgICAgICAgICAgICBjb25maWdfZmlsZXMgPSBbXQorICAgICAgICAgICAgICAgICAgICBmb3IgZGlybmFtZSBpbiBzZWxmLl9yZWN1cnNpdmVfbGlzdF9kaXJlY3RvcmllcyhiZS5zb3VyY2VkaXIsMik6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZGlybmFtZSwgIi50ZW1wbGF0ZWNvbmYiKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbignYmFzaCAtYyAiLiAnK29zLnBhdGguam9pbihkaXJuYW1lLCAiLnRlbXBsYXRlY29uZiIpKyc7IGVjaG8gXCJcJFRFTVBMQVRFQ09ORlwiIicsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmZpbGVwYXRoLCBzdGRlcnJvcm91dHB1dCA9IHByb2MuY29tbXVuaWNhdGUoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Mud2FpdCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJvYy5yZXR1cm5jb2RlICE9IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRmFpbGVkIHRvIHNvdXJjZSBURU1QTEFURUNPTkY6ICVzIiAlIHN0ZGVycm9yb3V0cHV0KQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmZpbGVwYXRoID0gb3MucGF0aC5qb2luKGNvbmZmaWxlcGF0aC5zdHJpcCgpLCAidG9hc3RlcmNvbmYuanNvbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlZmlsZXBhdGggPSBvcy5wYXRoLmpvaW4oZGlybmFtZSwgY29uZmZpbGVwYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICJ0b2FzdGVyX2Nsb25lZCIgaW4gY2FuZGlkYXRlZmlsZXBhdGg6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY2FuZGlkYXRlZmlsZXBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfZmlsZXMuYXBwZW5kKGNhbmRpZGF0ZWZpbGVwYXRoKQorCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihjb25maWdfZmlsZXMpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJUb2FzdGVyIHdpbGwgbGlzdCBub3cgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgdGhhdCBpdCBmb3VuZC4gU2VsZWN0IHRoZSBudW1iZXIgdG8gdXNlIHRoZSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24gZmlsZS4iCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgY2YgaW4gY29uZmlnX2ZpbGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIgIFslZF0gLSAlcyIgJSAoY29uZmlnX2ZpbGVzLmluZGV4KGNmKSArIDEsIGNmKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuICBbMF0gLSBFeGl0IHdpdGhvdXQgaW1wb3J0aW5nIGFueSBmaWxlIgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gcmF3X2lucHV0KCJcbkVudGVyIHlvdXIgb3B0aW9uOiAiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4oaSkgYW5kIChpbnQoaSkgLSAxID49IDAgYW5kIGludChpKSAtIDEgPCBsZW4oY29uZmlnX2ZpbGVzKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiXG5JbXBvcnRpbmcgZmlsZTogJXMiICUgY29uZmlnX2ZpbGVzW2ludChpKS0xXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBsb2FkY29uZiBpbXBvcnQgQ29tbWFuZCBhcyBMb2FkQ29uZmlnQ29tbWFuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkQ29uZmlnQ29tbWFuZCgpLl9pbXBvcnRfbGF5ZXJfY29uZmlnKGNvbmZpZ19maWxlc1tpbnQoaSktMV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdlIHJ1biBsc3VwZGF0ZXMgYWZ0ZXIgY29uZmlnIHVwZGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuTGF5ZXIgY29uZmlndXJhdGlvbiBpbXBvcnRlZC4gVXBkYXRpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgbGF5ZXIgc291cmNlcywgcGxlYXNlIHdhaXQuXG5Zb3UgY2FuIHJlLXVwZGF0ZSBhbnkgdGltZSBsYXRlciBieSBydW5uaW5nIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGxzdXBkYXRlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gZGphbmdvLmNvcmUubWFuYWdlbWVudCBpbXBvcnQgY2FsbF9jb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsX2NvbW1hbmQoImxzdXBkYXRlcyIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2UgZG9uJ3QgbG9vayBmb3IgYW55IG90aGVyIGNvbmZpZyBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzX2NoYW5nZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiRmFpbHVyZSB3aGlsZSB0cnlpbmcgdG8gaW1wb3J0IHRoZSB0b2FzdGVyIGNvbmZpZyBmaWxlOiAlcyIgJSBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhlKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuVG9hc3RlciBjb3VsZCBub3QgZmluZCBhIGNvbmZpZ3VyYXRpb24gZmlsZS4gWW91IG5lZWQgdG8gY29uZmlndXJlIFRvYXN0ZXIgbWFudWFsbHkgdXNpbmcgdGhlIHdlYiBpbnRlcmZhY2UsIG9yIGNyZWF0ZSBhIGNvbmZpZ3VyYXRpb24gZmlsZSBhbmQgdXNlXG4gIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlcHkucHkgbG9hZGNvbmYgW2ZpbGVuYW1lXVxuIGNvbW1hbmQgdG8gbG9hZCBpdC4gWW91IGNhbiB1c2UgaHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9GaWxlOlRvYXN0ZXJjb25mLmpzb24udHh0LnBhdGNoIGFzIGEgc3RhcnRpbmcgcG9pbnQuIgorCisKKworCisgICAgICAgICAgICAgICAgcmV0dXJuIGlzX2NoYW5nZWQKKworICAgICAgICAgICAgd2hpbGUgKF92ZXJpZnlfYmUoKSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIF92ZXJpZnlfZGVmYXVsdF9zZXR0aW5ncyhzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgdGhhdCBkZWZhdWx0IHNldHRpbmdzIGFyZSB0aGVyZQorICAgICAgICBpZiBUb2FzdGVyU2V0dGluZy5vYmplY3RzLmZpbHRlcihuYW1lID0gJ0RFRkFVTFRfUkVMRUFTRScpLmNvdW50KCkgIT0gMToKKyAgICAgICAgICAgIFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuZmlsdGVyKG5hbWUgPSAnREVGQVVMVF9SRUxFQVNFJykuZGVsZXRlKCkKKyAgICAgICAgICAgIFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShuYW1lID0gJ0RFRkFVTFRfUkVMRUFTRScsIHZhbHVlID0gJycpCisgICAgICAgIHJldHVybiAwCisKKyAgICBkZWYgX3ZlcmlmeV9idWlsZHNfaW5fcHJvZ3Jlc3Moc2VsZik6CisgICAgICAgICMgd2UgYXJlIGp1c3Qgc3RhcnRpbmcgdXAuIHdlIG11c3Qgbm90IGhhdmUgYW55IGJ1aWxkcyBpbiBwcm9ncmVzcywgb3IgYnVpbGQgZW52aXJvbm1lbnRzIHRha2VuCisgICAgICAgIGZvciBiIGluIEJ1aWxkUmVxdWVzdC5vYmplY3RzLmZpbHRlcihzdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfSU5QUk9HUkVTUyk6CisgICAgICAgICAgICBCUkVycm9yLm9iamVjdHMuY3JlYXRlKHJlcSA9IGIsIGVycnR5cGUgPSAidG9hc3RlciIsIGVycm1zZyA9ICJUb2FzdGVyIGZvdW5kIHRoaXMgYnVpbGQgSU4gUFJPR1JFU1Mgd2hpbGUgVG9hc3RlciBzdGFydGVkIHVwLiBUaGlzIGlzIGFuIGluY29uc2lzdGVudCBzdGF0ZSwgYW5kIHRoZSBidWlsZCB3YXMgbWFya2VkIGFzIGZhaWxlZCIpCisKKyAgICAgICAgQnVpbGRSZXF1ZXN0Lm9iamVjdHMuZmlsdGVyKHN0YXRlID0gQnVpbGRSZXF1ZXN0LlJFUV9JTlBST0dSRVNTKS51cGRhdGUoc3RhdGUgPSBCdWlsZFJlcXVlc3QuUkVRX0ZBSUxFRCkKKworICAgICAgICBCdWlsZEVudmlyb25tZW50Lm9iamVjdHMudXBkYXRlKGxvY2sgPSBCdWlsZEVudmlyb25tZW50LkxPQ0tfRlJFRSkKKworICAgICAgICAjIGFsc28gbWFyayAiSW4gUHJvZ3Jlc3MgYnVpbGRzIGFzIGZhaWx1cmVzIgorICAgICAgICBmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKKyAgICAgICAgQnVpbGQub2JqZWN0cy5maWx0ZXIob3V0Y29tZSA9IEJ1aWxkLklOX1BST0dSRVNTKS51cGRhdGUob3V0Y29tZSA9IEJ1aWxkLkZBSUxFRCwgY29tcGxldGVkX29uID0gdGltZXpvbmUubm93KCkpCisKKyAgICAgICAgcmV0dXJuIDAKKworCisKKyAgICBkZWYgaGFuZGxlX25vYXJncyhzZWxmLCAqKm9wdGlvbnMpOgorICAgICAgICByZXR2YWwgPSAwCisgICAgICAgIHJldHZhbCArPSBzZWxmLl92ZXJpZnlfYXJ0aWZhY3Rfc3RvcmFnZV9kaXIoKQorICAgICAgICByZXR2YWwgKz0gc2VsZi5fdmVyaWZ5X2J1aWxkX2Vudmlyb25tZW50KCkKKyAgICAgICAgcmV0dmFsICs9IHNlbGYuX3ZlcmlmeV9kZWZhdWx0X3NldHRpbmdzKCkKKyAgICAgICAgcmV0dmFsICs9IHNlbGYuX3ZlcmlmeV9idWlsZHNfaW5fcHJvZ3Jlc3MoKQorCisgICAgICAgIHJldHVybiByZXR2YWwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21hbmFnZW1lbnQvY29tbWFuZHMvbG9hZGNvbmYucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tYW5hZ2VtZW50L2NvbW1hbmRzL2xvYWRjb25mLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMjJiNTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tYW5hZ2VtZW50L2NvbW1hbmRzL2xvYWRjb25mLnB5CkBAIC0wLDAgKzEsMTgzIEBACitmcm9tIGRqYW5nby5jb3JlLm1hbmFnZW1lbnQuYmFzZSBpbXBvcnQgQmFzZUNvbW1hbmQsIENvbW1hbmRFcnJvcgorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBMYXllclNvdXJjZSwgVG9hc3RlclNldHRpbmcsIEJyYW5jaCwgTGF5ZXIsIExheWVyX1ZlcnNpb24KK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgQml0YmFrZVZlcnNpb24sIFJlbGVhc2UsIFJlbGVhc2VEZWZhdWx0TGF5ZXIsIFJlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5Citmcm9tIGRqYW5nby5kYiBpbXBvcnQgSW50ZWdyaXR5RXJyb3IKK2ltcG9ydCBvcworCitmcm9tIGNoZWNrc2V0dGluZ3MgaW1wb3J0IEROCisKK2ltcG9ydCBsb2dnaW5nCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigidG9hc3RlciIpCisKK2RlZiBfcmVkdWNlX2Nhbm9uX3BhdGgocGF0aCk6CisgICAgY29tcG9uZW50cyA9IFtdCisgICAgZm9yIGMgaW4gcGF0aC5zcGxpdCgiLyIpOgorICAgICAgICBpZiBjID09ICIuLiI6CisgICAgICAgICAgICBkZWwgY29tcG9uZW50c1stMV0KKyAgICAgICAgZWxpZiBjID09ICIuIjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbXBvbmVudHMuYXBwZW5kKGMpCisgICAgaWYgbGVuKGNvbXBvbmVudHMpIDwgMjoKKyAgICAgICAgY29tcG9uZW50cy5hcHBlbmQoJycpCisgICAgcmV0dXJuICIvIi5qb2luKGNvbXBvbmVudHMpCisKK2RlZiBfZ2V0X2lkX2Zvcl9zb3VyY2V0eXBlKHMpOgorICAgIGZvciBpIGluIExheWVyU291cmNlLlNPVVJDRV9UWVBFOgorICAgICAgICBpZiBzID09IGlbMV06CisgICAgICAgICAgICByZXR1cm4gaVswXQorICAgIHJhaXNlIEV4Y2VwdGlvbigiQ291bGQgbm90IGZpbmQgZGVmaW5pdGlvbiBmb3Igc291cmNldHlwZSAnJXMnLiBWYWxpZCBzb3VyY2UgdHlwZXMgYXJlICVzIiAlIChzdHIocyksICcsICcuam9pbihtYXAobGFtYmRhIHg6ICInJXMnIiAlIHhbMV0sIExheWVyU291cmNlLlNPVVJDRV9UWVBFICkpKSkKKworY2xhc3MgQ29tbWFuZChCYXNlQ29tbWFuZCk6CisgICAgaGVscCA9ICJMb2FkcyBhIHRvYXN0ZXJjb25mLmpzb24gZmlsZSBpbiB0aGUgZGF0YWJhc2UiCisgICAgYXJncyA9ICJmaWxlcGF0aCIKKworCisKKyAgICBkZWYgX2ltcG9ydF9sYXllcl9jb25maWcoc2VsZiwgZmlsZXBhdGgpOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZXBhdGgpIG9yIG5vdCBvcy5wYXRoLmlzZmlsZShmaWxlcGF0aCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byBmaW5kIHRvYXN0ZXIgY29uZmlnIGZpbGUgJXMgLiIgJSBmaWxlcGF0aCkKKworICAgICAgICBpbXBvcnQganNvbgorICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhvcGVuKGZpbGVwYXRoLCAiciIpLnJlYWQoKSkKKworICAgICAgICAjIHZlcmlmeSBjb25maWcgZmlsZSB2YWxpZGl0eSBiZWZvcmUgdXBkYXRpbmcgc2V0dGluZ3MKKyAgICAgICAgZm9yIGkgaW4gWydiaXRiYWtlJywgJ3JlbGVhc2VzJywgJ2RlZmF1bHRyZWxlYXNlJywgJ2NvbmZpZycsICdsYXllcnNvdXJjZXMnXToKKyAgICAgICAgICAgIGFzc2VydCBpIGluIGRhdGEKKworICAgICAgICBkZWYgX3JlYWRfZ2l0X3VybF9mcm9tX2xvY2FsX3JlcG9zaXRvcnkoYWRkcmVzcyk6CisgICAgICAgICAgICB1cmwgPSBOb25lCisgICAgICAgICAgICAjIHdlIGRldGVjdCB0aGUgcmVtb3RlIG5hbWUgYXQgcnVudGltZQorICAgICAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgICAgIChyZW1vdGUsIHJlbW90ZV9uYW1lKSA9IGFkZHJlc3Muc3BsaXQoIjoiLCAxKQorICAgICAgICAgICAgY21kID0gc3VicHJvY2Vzcy5Qb3BlbigiZ2l0IHJlbW90ZSAtdiIsIHNoZWxsPVRydWUsIGN3ZCA9IG9zLnBhdGguZGlybmFtZShmaWxlcGF0aCksIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVyciA9IHN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgICAgIChvdXQsZXJyKSA9IGNtZC5jb21tdW5pY2F0ZSgpCisgICAgICAgICAgICBpZiBjbWQucmV0dXJuY29kZSAhPSAwOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygiRXJyb3Igd2hpbGUgaW1wb3J0aW5nIGxheWVyIHZjc191cmw6IGdpdCBlcnJvcjogJXMiICUgZXJyKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0LnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgKG5hbWUsIHBhdGgpID0gbGluZS5zcGxpdCgiXHQiLCAxKQorICAgICAgICAgICAgICAgICAgICBpZiBuYW1lID09IHJlbW90ZV9uYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gcGF0aC5zcGxpdCgiICIpWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBpZiB1cmwgPT0gTm9uZToKKyAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoIkVycm9yIHdoaWxlIGxvb2tpbmcgZm9yIHJlbW90ZSBcIiVzXCIgaW4gXCIlc1wiIiAlIChyZW1vdGVfbmFtZSwgb3V0KSkKKyAgICAgICAgICAgIHJldHVybiB1cmwKKworCisgICAgICAgICMgaW1wb3J0IGJpdGJha2UgZGF0YQorICAgICAgICBmb3IgYnZpIGluIGRhdGFbJ2JpdGJha2UnXToKKyAgICAgICAgICAgIGJ2bywgY3JlYXRlZCA9IEJpdGJha2VWZXJzaW9uLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShuYW1lPWJ2aVsnbmFtZSddKQorICAgICAgICAgICAgaWYgYnZpWydnaXR1cmwnXS5zdGFydHN3aXRoKCJyZW1vdGU6Iik6CisgICAgICAgICAgICAgICAgYnZvLmdpdHVybCA9IF9yZWFkX2dpdF91cmxfZnJvbV9sb2NhbF9yZXBvc2l0b3J5KGJ2aVsnZ2l0dXJsJ10pCisgICAgICAgICAgICAgICAgaWYgYnZvLmdpdHVybCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlRoZSB0b2FzdGVyIGNvbmZpZyBmaWxlIHJlZmVyZW5jZXMgdGhlIGxvY2FsIGdpdCByZXBvLCBidXQgVG9hc3RlciBjYW5ub3QgZGV0ZWN0IGl0LlxuWW91ciBsb2NhbCBjb25maWd1cmF0aW9uIGZvciBiaXRiYWtlIHZlcnNpb24gJXMgaXMgaW52YWxpZC4gTWFrZSBzdXJlIHRoYXQgdGhlIHRvYXN0ZXJjb25mLmpzb24gZmlsZSBpcyBjb3JyZWN0LiIgJSBidmlbJ25hbWUnXSkKKworICAgICAgICAgICAgaWYgYnZvLmdpdHVybCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGJ2by5naXR1cmwgPSBidmlbJ2dpdHVybCddCisgICAgICAgICAgICBidm8uYnJhbmNoID0gYnZpWydicmFuY2gnXQorICAgICAgICAgICAgYnZvLmRpcnBhdGggPSBidmlbJ2RpcnBhdGgnXQorICAgICAgICAgICAgYnZvLnNhdmUoKQorCisgICAgICAgICMgc2V0IHRoZSBsYXllciBzb3VyY2VzCisgICAgICAgIGZvciBsc2kgaW4gZGF0YVsnbGF5ZXJzb3VyY2VzJ106CisgICAgICAgICAgICBhc3NlcnQgJ3NvdXJjZXR5cGUnIGluIGxzaQorICAgICAgICAgICAgYXNzZXJ0ICdhcGl1cmwnIGluIGxzaQorICAgICAgICAgICAgYXNzZXJ0ICduYW1lJyBpbiBsc2kKKyAgICAgICAgICAgIGFzc2VydCAnYnJhbmNoZXMnIGluIGxzaQorCisKKyAgICAgICAgICAgIGlmIF9nZXRfaWRfZm9yX3NvdXJjZXR5cGUobHNpWydzb3VyY2V0eXBlJ10pID09IExheWVyU291cmNlLlRZUEVfTEFZRVJJTkRFWCBvciBsc2lbJ2FwaXVybCddLnN0YXJ0c3dpdGgoIi8iKToKKyAgICAgICAgICAgICAgICBhcGl1cmwgPSBsc2lbJ2FwaXVybCddCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFwaXVybCA9IF9yZWR1Y2VfY2Fub25fcGF0aChvcy5wYXRoLmpvaW4oRE4ob3MucGF0aC5hYnNwYXRoKGZpbGVwYXRoKSksIGxzaVsnYXBpdXJsJ10pKQorCisgICAgICAgICAgICBhc3NlcnQgKChfZ2V0X2lkX2Zvcl9zb3VyY2V0eXBlKGxzaVsnc291cmNldHlwZSddKSA9PSBMYXllclNvdXJjZS5UWVBFX0xBWUVSSU5ERVgpIG9yIGFwaXVybC5zdGFydHN3aXRoKCIvIikpLCAobHNpWydzb3VyY2V0eXBlJ10sYXBpdXJsKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbHMsIGNyZWF0ZWQgPSBMYXllclNvdXJjZS5vYmplY3RzLmdldF9vcl9jcmVhdGUoc291cmNldHlwZSA9IF9nZXRfaWRfZm9yX3NvdXJjZXR5cGUobHNpWydzb3VyY2V0eXBlJ10pLCBhcGl1cmwgPSBhcGl1cmwpCisgICAgICAgICAgICAgICAgbHMubmFtZSA9IGxzaVsnbmFtZSddCisgICAgICAgICAgICAgICAgbHMuc2F2ZSgpCisgICAgICAgICAgICBleGNlcHQgSW50ZWdyaXR5RXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygiSW50ZWdyaXR5RXJyb3IgJXMgXG5XaGlsZSBzZXR0aW5nIG5hbWUgJXMgZm9yIGxheWVyIHNvdXJjZSAlcyAiICUgKGUsIGxzaVsnbmFtZSddLCBscykpCisKKworICAgICAgICAgICAgbGF5ZXJicmFuY2hlcyA9IFtdCisgICAgICAgICAgICBmb3IgYnJhbmNobmFtZSBpbiBsc2lbJ2JyYW5jaGVzJ106CisgICAgICAgICAgICAgICAgYm8sIGNyZWF0ZWQgPSBCcmFuY2gub2JqZWN0cy5nZXRfb3JfY3JlYXRlKGxheWVyX3NvdXJjZSA9IGxzLCBuYW1lID0gYnJhbmNobmFtZSkKKyAgICAgICAgICAgICAgICBsYXllcmJyYW5jaGVzLmFwcGVuZChibykKKworICAgICAgICAgICAgaWYgJ2xheWVycycgaW4gbHNpOgorICAgICAgICAgICAgICAgIGZvciBsYXllcmluZm8gaW4gbHNpWydsYXllcnMnXToKKyAgICAgICAgICAgICAgICAgICAgbG8sIGNyZWF0ZWQgPSBMYXllci5vYmplY3RzLmdldF9vcl9jcmVhdGUobGF5ZXJfc291cmNlID0gbHMsIG5hbWUgPSBsYXllcmluZm9bJ25hbWUnXSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbGF5ZXJpbmZvWydsb2NhbF9wYXRoJ10uc3RhcnRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgbG8ubG9jYWxfcGF0aCA9IGxheWVyaW5mb1snbG9jYWxfcGF0aCddCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBsby5sb2NhbF9wYXRoID0gX3JlZHVjZV9jYW5vbl9wYXRoKG9zLnBhdGguam9pbihscy5hcGl1cmwsIGxheWVyaW5mb1snbG9jYWxfcGF0aCddKSkKKworICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobG8ubG9jYWxfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkxvY2FsIGxheWVyIHBhdGggJXMgbXVzdCBleGlzdHMuIEFyZSB5b3UgdHJ5aW5nIHRvIGltcG9ydCBhIGxheWVyIHRoYXQgZG9lcyBub3QgZXhpc3QgPyBDaGVjayB5b3VyIGxvY2FsIHRvYXN0ZXJjb25mLmpzb24iICUgbG8ubG9jYWxfcGF0aCkKKworICAgICAgICAgICAgICAgICAgICBpZiBsYXllcmluZm9bJ3Zjc191cmwnXS5zdGFydHN3aXRoKCJyZW1vdGU6Iik6CisgICAgICAgICAgICAgICAgICAgICAgICBsby52Y3NfdXJsID0gX3JlYWRfZ2l0X3VybF9mcm9tX2xvY2FsX3JlcG9zaXRvcnkobGF5ZXJpbmZvWyd2Y3NfdXJsJ10pCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsby52Y3NfdXJsIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJUaGUgdG9hc3RlciBjb25maWcgZmlsZSByZWZlcmVuY2VzIHRoZSBsb2NhbCBnaXQgcmVwbywgYnV0IFRvYXN0ZXIgY2Fubm90IGRldGVjdCBpdC5cbllvdXIgbG9jYWwgY29uZmlndXJhdGlvbiBmb3IgbGF5ZXIgJXMgaXMgaW52YWxpZC4gTWFrZSBzdXJlIHRoYXQgdGhlIHRvYXN0ZXJjb25mLmpzb24gZmlsZSBpcyBjb3JyZWN0LiIgJSBsYXllcmluZm9bJ25hbWUnXSkKKworICAgICAgICAgICAgICAgICAgICBpZiBsby52Y3NfdXJsIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBsby52Y3NfdXJsID0gbGF5ZXJpbmZvWyd2Y3NfdXJsJ10KKworICAgICAgICAgICAgICAgICAgICBpZiAnbGF5ZXJfaW5kZXhfdXJsJyBpbiBsYXllcmluZm86CisgICAgICAgICAgICAgICAgICAgICAgICBsby5sYXllcl9pbmRleF91cmwgPSBsYXllcmluZm9bJ2xheWVyX2luZGV4X3VybCddCisgICAgICAgICAgICAgICAgICAgIGxvLnNhdmUoKQorCisgICAgICAgICAgICAgICAgICAgIGZvciBicmFuY2ggaW4gbGF5ZXJicmFuY2hlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGx2bywgY3JlYXRlZCA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXRfb3JfY3JlYXRlKGxheWVyX3NvdXJjZSA9IGxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cF9icmFuY2ggPSBicmFuY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdCA9IGJyYW5jaC5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllciA9IGxvKQorICAgICAgICAgICAgICAgICAgICAgICAgbHZvLmRpcnBhdGggPSBsYXllcmluZm9bJ2RpcnBhdGgnXQorICAgICAgICAgICAgICAgICAgICAgICAgbHZvLnNhdmUoKQorICAgICAgICAjIHNldCByZWxlYXNlcworICAgICAgICBmb3IgcmkgaW4gZGF0YVsncmVsZWFzZXMnXToKKyAgICAgICAgICAgIGJ2byA9IEJpdGJha2VWZXJzaW9uLm9iamVjdHMuZ2V0KG5hbWUgPSByaVsnYml0YmFrZSddKQorICAgICAgICAgICAgYXNzZXJ0IGJ2byBpcyBub3QgTm9uZQorCisgICAgICAgICAgICBybywgY3JlYXRlZCA9IFJlbGVhc2Uub2JqZWN0cy5nZXRfb3JfY3JlYXRlKG5hbWUgPSByaVsnbmFtZSddLCBiaXRiYWtlX3ZlcnNpb24gPSBidm8sIGJyYW5jaF9uYW1lID0gcmlbJ2JyYW5jaCddKQorICAgICAgICAgICAgcm8uZGVzY3JpcHRpb24gPSByaVsnZGVzY3JpcHRpb24nXQorICAgICAgICAgICAgcm8uaGVscHRleHQgPSByaVsnaGVscHRleHQnXQorICAgICAgICAgICAgcm8uc2F2ZSgpCisKKyAgICAgICAgICAgICMgc2F2ZSBsYXllciBzb3VyY2UgcHJpb3JpdHkgZm9yIHJlbGVhc2UKKyAgICAgICAgICAgIGZvciBsc19uYW1lIGluIHJpWydsYXllcnNvdXJjZXByaW9yaXR5J10ua2V5cygpOgorICAgICAgICAgICAgICAgIHJsc3BvLCBjcmVhdGVkID0gUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHkub2JqZWN0cy5nZXRfb3JfY3JlYXRlKHJlbGVhc2UgPSBybywgbGF5ZXJfc291cmNlID0gTGF5ZXJTb3VyY2Uub2JqZWN0cy5nZXQobmFtZT1sc19uYW1lKSkKKyAgICAgICAgICAgICAgICBybHNwby5wcmlvcml0eSA9IHJpWydsYXllcnNvdXJjZXByaW9yaXR5J11bbHNfbmFtZV0KKyAgICAgICAgICAgICAgICBybHNwby5zYXZlKCkKKworICAgICAgICAgICAgZm9yIGRsaSBpbiByaVsnZGVmYXVsdGxheWVycyddOgorICAgICAgICAgICAgICAgICMgZmluZCBsYXllcnMgd2l0aCB0aGUgc2FtZSBuYW1lCisgICAgICAgICAgICAgICAgUmVsZWFzZURlZmF1bHRMYXllci5vYmplY3RzLmdldF9vcl9jcmVhdGUoIHJlbGVhc2UgPSBybywgbGF5ZXJfbmFtZSA9IGRsaSkKKworICAgICAgICAjIHNldCBkZWZhdWx0IHJlbGVhc2UKKyAgICAgICAgaWYgVG9hc3RlclNldHRpbmcub2JqZWN0cy5maWx0ZXIobmFtZSA9ICJERUZBVUxUX1JFTEVBU0UiKS5jb3VudCgpID4gMDoKKyAgICAgICAgICAgIFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuZmlsdGVyKG5hbWUgPSAiREVGQVVMVF9SRUxFQVNFIikudXBkYXRlKHZhbHVlID0gZGF0YVsnZGVmYXVsdHJlbGVhc2UnXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuY3JlYXRlKG5hbWUgPSAiREVGQVVMVF9SRUxFQVNFIiwgdmFsdWUgPSBkYXRhWydkZWZhdWx0cmVsZWFzZSddKQorCisgICAgICAgICMgc2V0IGRlZmF1bHQgY29uZmlnIHZhcmlhYmxlcworICAgICAgICBmb3IgY29uZmlnbmFtZSBpbiBkYXRhWydjb25maWcnXToKKyAgICAgICAgICAgIGlmIFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuZmlsdGVyKG5hbWUgPSAiREVGQ09ORl8iICsgY29uZmlnbmFtZSkuY291bnQoKSA+IDA6CisgICAgICAgICAgICAgICAgVG9hc3RlclNldHRpbmcub2JqZWN0cy5maWx0ZXIobmFtZSA9ICJERUZDT05GXyIgKyBjb25maWduYW1lKS51cGRhdGUodmFsdWUgPSBkYXRhWydjb25maWcnXVtjb25maWduYW1lXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgVG9hc3RlclNldHRpbmcub2JqZWN0cy5jcmVhdGUobmFtZSA9ICJERUZDT05GXyIgKyBjb25maWduYW1lLCB2YWx1ZSA9IGRhdGFbJ2NvbmZpZyddW2NvbmZpZ25hbWVdKQorCisKKyAgICBkZWYgaGFuZGxlKHNlbGYsICphcmdzLCAqKm9wdGlvbnMpOgorICAgICAgICBpZiBsZW4oYXJncykgPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIENvbW1hbmRFcnJvcigiTmVlZCBhIHBhdGggdG8gdGhlIHRvYXN0ZXJjb25mLmpzb24gZmlsZSIpCisgICAgICAgIGZpbGVwYXRoID0gYXJnc1swXQorICAgICAgICBzZWxmLl9pbXBvcnRfbGF5ZXJfY29uZmlnKGZpbGVwYXRoKQorCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9ydW5idWlsZHMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tYW5hZ2VtZW50L2NvbW1hbmRzL3J1bmJ1aWxkcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2U5Yjc0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9ydW5idWlsZHMucHkKQEAgLTAsMCArMSwxNTMgQEAKK2Zyb20gZGphbmdvLmNvcmUubWFuYWdlbWVudC5iYXNlIGltcG9ydCBOb0FyZ3NDb21tYW5kLCBDb21tYW5kRXJyb3IKK2Zyb20gZGphbmdvLmRiIGltcG9ydCB0cmFuc2FjdGlvbgorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBCdWlsZCwgVG9hc3RlclNldHRpbmcsIExvZ01lc3NhZ2UsIFRhcmdldAorZnJvbSBibGRjb250cm9sLmJiY29udHJvbGxlciBpbXBvcnQgZ2V0QnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIsIFNoZWxsQ21kRXhjZXB0aW9uLCBCdWlsZFNldHVwRXhjZXB0aW9uCitmcm9tIGJsZGNvbnRyb2wubW9kZWxzIGltcG9ydCBCdWlsZFJlcXVlc3QsIEJ1aWxkRW52aXJvbm1lbnQsIEJSRXJyb3IsIEJSVmFyaWFibGUKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIlRvYXN0ZXJTY2hlZHVsZXIiKQorCitjbGFzcyBDb21tYW5kKE5vQXJnc0NvbW1hbmQpOgorICAgIGFyZ3MgICAgPSAiIgorICAgIGhlbHAgICAgPSAiU2NoZWR1bGVzIGFuZCBleGVjdXRlcyBidWlsZCByZXF1ZXN0cyBhcyBwb3NzaWJsZS4gRG9lcyBub3QgcmV0dXJuIChpbnRlcnJ1cHQgd2l0aCBDdHJsLUMpIgorCisKKyAgICBAdHJhbnNhY3Rpb24uY29tbWl0X29uX3N1Y2Nlc3MKKyAgICBkZWYgX3NlbGVjdEJ1aWxkRW52aXJvbm1lbnQoc2VsZik6CisgICAgICAgIGJlYyA9IGdldEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyKGxvY2sgPSBCdWlsZEVudmlyb25tZW50LkxPQ0tfRlJFRSkKKyAgICAgICAgYmVjLmJlLmxvY2sgPSBCdWlsZEVudmlyb25tZW50LkxPQ0tfTE9DSworICAgICAgICBiZWMuYmUuc2F2ZSgpCisgICAgICAgIHJldHVybiBiZWMKKworICAgIEB0cmFuc2FjdGlvbi5jb21taXRfb25fc3VjY2VzcworICAgIGRlZiBfc2VsZWN0QnVpbGRSZXF1ZXN0KHNlbGYpOgorICAgICAgICBiciA9IEJ1aWxkUmVxdWVzdC5vYmplY3RzLmZpbHRlcihzdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfUVVFVUVEKS5vcmRlcl9ieSgncGsnKVswXQorICAgICAgICBici5zdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfSU5QUk9HUkVTUworICAgICAgICBici5zYXZlKCkKKyAgICAgICAgcmV0dXJuIGJyCisKKyAgICBkZWYgc2NoZWR1bGUoc2VsZik6CisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYnIgPSBOb25lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBzZWxlY3QgdGhlIGJ1aWxkIGVudmlyb25tZW50IGFuZCB0aGUgcmVxdWVzdCB0byBidWlsZAorICAgICAgICAgICAgICAgIGJyID0gc2VsZi5fc2VsZWN0QnVpbGRSZXF1ZXN0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgI2xvZ2dlci5kZWJ1ZygicnVuYnVpbGRzOiBObyBidWlsZCByZXF1ZXN0IikKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBiZWMgPSBzZWxmLl9zZWxlY3RCdWlsZEVudmlyb25tZW50KCkKKyAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgIyB3ZSBjb3VsZCBub3QgZmluZCBhIEJFQzsgcG9zdHBvbmUgdGhlIEJSCisgICAgICAgICAgICAgICAgYnIuc3RhdGUgPSBCdWlsZFJlcXVlc3QuUkVRX1FVRVVFRAorICAgICAgICAgICAgICAgIGJyLnNhdmUoKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygicnVuYnVpbGRzOiBObyBidWlsZCBlbnYiKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoInJ1bmJ1aWxkczogc3RhcnRpbmcgYnVpbGQgJXMsIGVudmlyb25tZW50ICVzIiAlIChiciwgYmVjLmJlKSkKKworICAgICAgICAgICAgIyB3cml0ZSB0aGUgYnVpbGQgaWRlbnRpZmljYXRpb24gdmFyaWFibGUKKyAgICAgICAgICAgIEJSVmFyaWFibGUub2JqZWN0cy5jcmVhdGUocmVxID0gYnIsIG5hbWU9IlRPQVNURVJfQlJCRSIsIHZhbHVlPSIlZDolZCIgJSAoYnIucGssIGJlYy5iZS5waykpCisKKyAgICAgICAgICAgICMgbGV0IHRoZSBidWlsZCByZXF1ZXN0IGtub3cgd2hlcmUgaXQgaXMgYmVpbmcgZXhlY3V0ZWQKKyAgICAgICAgICAgIGJyLmVudmlyb25tZW50ID0gYmVjLmJlCisgICAgICAgICAgICBici5zYXZlKCkKKworICAgICAgICAgICAgIyB0aGlzIHRyaWdnZXJzIGFuIGFzeW5jIGJ1aWxkCisgICAgICAgICAgICBiZWMudHJpZ2dlckJ1aWxkKGJyLmJyYml0YmFrZV9zZXQuYWxsKCksIGJyLmJybGF5ZXJfc2V0LmFsbCgpLCBici5icnZhcmlhYmxlX3NldC5hbGwoKSwgYnIuYnJ0YXJnZXRfc2V0LmFsbCgpKQorCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigicnVuYnVpbGRzOiBFcnJvciBsYXVuY2hpbmcgYnVpbGQgJXMiICUgZSkKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZSkKKyAgICAgICAgICAgIGlmICJbRXJybm8gMTExXSBDb25uZWN0aW9uIHJlZnVzZWQiIGluIHN0cihlKToKKyAgICAgICAgICAgICAgICAjIENvbm5lY3Rpb24gcmVmdXNlZCwgcmVhZCB0b2FzdGVyX3NlcnZlci5vdXQKKyAgICAgICAgICAgICAgICBlcnJtc2cgPSBiZWMucmVhZFNlcnZlckxvZ0ZpbGUoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlcnJtc2cgPSBzdHIoZSkKKworICAgICAgICAgICAgQlJFcnJvci5vYmplY3RzLmNyZWF0ZShyZXEgPSBiciwKKyAgICAgICAgICAgICAgICAgICAgZXJydHlwZSA9IHN0cih0eXBlKGUpKSwKKyAgICAgICAgICAgICAgICAgICAgZXJybXNnID0gZXJybXNnLAorICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sgPSB0cmFjZWJhY2suZm9ybWF0X2V4YyhlKSkKKyAgICAgICAgICAgIGJyLnN0YXRlID0gQnVpbGRSZXF1ZXN0LlJFUV9GQUlMRUQKKyAgICAgICAgICAgIGJyLnNhdmUoKQorICAgICAgICAgICAgYmVjLmJlLmxvY2sgPSBCdWlsZEVudmlyb25tZW50LkxPQ0tfRlJFRQorICAgICAgICAgICAgYmVjLmJlLnNhdmUoKQorCisgICAgZGVmIGFyY2hpdmUoc2VsZik6CisgICAgICAgICcnJyBhcmNoaXZlcyBkYXRhIGZyb20gdGhlIGJ1aWxkcyAnJycKKyAgICAgICAgYXJ0aWZhY3Rfc3RvcmFnZV9kaXIgPSBUb2FzdGVyU2V0dGluZy5vYmplY3RzLmdldChuYW1lPSJBUlRJRkFDVFNfU1RPUkFHRV9ESVIiKS52YWx1ZQorICAgICAgICBmb3IgYnIgaW4gQnVpbGRSZXF1ZXN0Lm9iamVjdHMuZmlsdGVyKHN0YXRlID0gQnVpbGRSZXF1ZXN0LlJFUV9BUkNISVZFKToKKyAgICAgICAgICAgICMgc2F2ZSBjb29rZXIgbG9nCisgICAgICAgICAgICBpZiBici5idWlsZCA9PSBOb25lOgorICAgICAgICAgICAgICAgIGJyLnN0YXRlID0gQnVpbGRSZXF1ZXN0LlJFUV9GQUlMRUQKKyAgICAgICAgICAgICAgICBici5zYXZlKCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgYnVpbGRfYXJ0aWZhY3Rfc3RvcmFnZV9kaXIgPSBvcy5wYXRoLmpvaW4oYXJ0aWZhY3Rfc3RvcmFnZV9kaXIsICIlZCIgJSBici5idWlsZC5waykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhidWlsZF9hcnRpZmFjdF9zdG9yYWdlX2RpcikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG9zZToKKyAgICAgICAgICAgICAgICBpZiAiRmlsZSBleGlzdHMiIGluIHN0cihvc2UpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2Ugb3NlCisKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IG9zLnBhdGguam9pbihidWlsZF9hcnRpZmFjdF9zdG9yYWdlX2RpciwgImNvb2tlcl9sb2cudHh0IikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZV9uYW1lLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoYnIuZW52aXJvbm1lbnQuZ2V0X2FydGlmYWN0KGJyLmJ1aWxkLmNvb2tlcl9sb2dfcGF0aCkucmVhZCgpKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKGZpbGVfbmFtZSkKKworICAgICAgICAgICAgYnIuc3RhdGUgPSBCdWlsZFJlcXVlc3QuUkVRX0NPTVBMRVRFRAorICAgICAgICAgICAgYnIuc2F2ZSgpCisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IHRpbWV6b25lCisgICAgICAgIGZyb20gZGF0ZXRpbWUgaW1wb3J0IHRpbWVkZWx0YQorICAgICAgICAjIGVudmlyb25tZW50cyBsb2NrZWQgZm9yIG1vcmUgdGhhbiAzMCBzZWNvbmRzIC0gdGhleSBzaG91bGQgYmUgdW5sb2NrZWQKKyAgICAgICAgQnVpbGRFbnZpcm9ubWVudC5vYmplY3RzLmZpbHRlcihidWlsZHJlcXVlc3RfX3N0YXRlX19pbj1bQnVpbGRSZXF1ZXN0LlJFUV9GQUlMRUQsIEJ1aWxkUmVxdWVzdC5SRVFfQ09NUExFVEVEXSkuZmlsdGVyKGxvY2s9QnVpbGRFbnZpcm9ubWVudC5MT0NLX0xPQ0spLmZpbHRlcih1cGRhdGVkX19sdCA9IHRpbWV6b25lLm5vdygpIC0gdGltZWRlbHRhKHNlY29uZHMgPSAzMCkpLnVwZGF0ZShsb2NrID0gQnVpbGRFbnZpcm9ubWVudC5MT0NLX0ZSRUUpCisKKworICAgICAgICAjIHVwZGF0ZSBhbGwgQnVpbGRzIHRoYXQgZmFpbGVkIHRvIHN0YXJ0CisKKyAgICAgICAgZm9yIGJyIGluIEJ1aWxkUmVxdWVzdC5vYmplY3RzLmZpbHRlcihzdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfRkFJTEVELCBidWlsZF9fb3V0Y29tZSA9IEJ1aWxkLklOX1BST0dSRVNTKToKKyAgICAgICAgICAgICMgdHJhbnNwb3NlIHRoZSBsYXVuY2ggZXJyb3JzIGluIFRvYXN0ZXJFeGNlcHRpb25zCisgICAgICAgICAgICBici5idWlsZC5vdXRjb21lID0gQnVpbGQuRkFJTEVECisgICAgICAgICAgICBmb3IgYnJlcnJvciBpbiBici5icmVycm9yX3NldC5hbGwoKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIlNhdmluZyBlcnJvciAlcyIgJSBicmVycm9yKQorICAgICAgICAgICAgICAgIExvZ01lc3NhZ2Uub2JqZWN0cy5jcmVhdGUoYnVpbGQgPSBici5idWlsZCwgbGV2ZWwgPSBMb2dNZXNzYWdlLkVYQ0VQVElPTiwgbWVzc2FnZSA9IGJyZXJyb3IuZXJybXNnKQorICAgICAgICAgICAgYnIuYnVpbGQuc2F2ZSgpCisKKyAgICAgICAgICAgICMgd2UgZG9uJ3QgaGF2ZSBhIHRydWUgYnVpbGQgb2JqZWN0IGhlcmU7IGhlbmNlLCB0b2FzdGVydWkgZGlkbid0IGhhdmUgYSBjaGFuZ2UgdG8gcmVsZWFzZSB0aGUgQkUgbG9jaworICAgICAgICAgICAgYnIuZW52aXJvbm1lbnQubG9jayA9IEJ1aWxkRW52aXJvbm1lbnQuTE9DS19GUkVFCisgICAgICAgICAgICBici5lbnZpcm9ubWVudC5zYXZlKCkKKworCisKKyAgICAgICAgIyB1cGRhdGUgYWxsIEJ1aWxkUmVxdWVzdHMgd2l0aG91dCBhIGJ1aWxkIGNyZWF0ZWQKKyAgICAgICAgZm9yIGJyIGluIEJ1aWxkUmVxdWVzdC5vYmplY3RzLmZpbHRlcihidWlsZCA9IE5vbmUpOgorICAgICAgICAgICAgYnIuYnVpbGQgPSBCdWlsZC5vYmplY3RzLmNyZWF0ZShwcm9qZWN0ID0gYnIucHJvamVjdCwgY29tcGxldGVkX29uID0gYnIudXBkYXRlZCwgc3RhcnRlZF9vbiA9IGJyLmNyZWF0ZWQpCisgICAgICAgICAgICBici5idWlsZC5vdXRjb21lID0gQnVpbGQuRkFJTEVECisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYnIuYnVpbGQubWFjaGluZSA9IGJyLmJydmFyaWFibGVfc2V0LmdldChuYW1lPSdNQUNISU5FJykudmFsdWUKKyAgICAgICAgICAgIGV4Y2VwdCBCUlZhcmlhYmxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBici5zYXZlKCkKKyAgICAgICAgICAgICMgdHJhbnNwb3NlIHRhcmdldCBpbmZvcm1hdGlvbgorICAgICAgICAgICAgZm9yIGJydGFyZ2V0IGluIGJyLmJydGFyZ2V0X3NldC5hbGwoKToKKyAgICAgICAgICAgICAgICBUYXJnZXQub2JqZWN0cy5jcmVhdGUoYnVpbGQgPSBici5idWlsZCwgdGFyZ2V0PSBicnRhcmdldC50YXJnZXQpCisgICAgICAgICAgICAjIHRyYW5zcG9zZSB0aGUgbGF1bmNoIGVycm9ycyBpbiBUb2FzdGVyRXhjZXB0aW9ucworICAgICAgICAgICAgZm9yIGJyZXJyb3IgaW4gYnIuYnJlcnJvcl9zZXQuYWxsKCk6CisgICAgICAgICAgICAgICAgTG9nTWVzc2FnZS5vYmplY3RzLmNyZWF0ZShidWlsZCA9IGJyLmJ1aWxkLCBsZXZlbCA9IExvZ01lc3NhZ2UuRVhDRVBUSU9OLCBtZXNzYWdlID0gYnJlcnJvci5lcnJtc2cpCisKKyAgICAgICAgICAgIGJyLmJ1aWxkLnNhdmUoKQorICAgICAgICBwYXNzCisKKworICAgIGRlZiBoYW5kbGVfbm9hcmdzKHNlbGYsICoqb3B0aW9ucyk6CisgICAgICAgIHNlbGYuY2xlYW51cCgpCisgICAgICAgIHNlbGYuYXJjaGl2ZSgpCisgICAgICAgIHNlbGYuc2NoZWR1bGUoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDAxX2luaXRpYWwucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDFfaW5pdGlhbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2U2MzUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDAxX2luaXRpYWwucHkKQEAgLTAsMCArMSwxNTQgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgQWRkaW5nIG1vZGVsICdCdWlsZEVudmlyb25tZW50JworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdibGRjb250cm9sX2J1aWxkZW52aXJvbm1lbnQnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnYWRkcmVzcycsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU0KSksCisgICAgICAgICAgICAoJ2JldHlwZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKCkpLAorICAgICAgICAgICAgKCdiYmFkZHJlc3MnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdiYnBvcnQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PS0xKSksCisgICAgICAgICAgICAoJ2JidG9rZW4nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEyNiwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdiYnN0YXRlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD0wKSksCisgICAgICAgICAgICAoJ2xvY2snLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTApKSwKKyAgICAgICAgICAgICgnY3JlYXRlZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnKShhdXRvX25vd19hZGQ9VHJ1ZSwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCd1cGRhdGVkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcpKGF1dG9fbm93PVRydWUsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnYmxkY29udHJvbCcsIFsnQnVpbGRFbnZpcm9ubWVudCddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdCdWlsZFJlcXVlc3QnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J2JsZGNvbnRyb2xfYnVpbGRyZXF1ZXN0JywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ3Byb2plY3QnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5Qcm9qZWN0J10pKSwKKyAgICAgICAgICAgICgnYnVpbGQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5CdWlsZCddLCBudWxsPVRydWUpKSwKKyAgICAgICAgICAgICgnc3RhdGUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTApKSwKKyAgICAgICAgICAgICgnY3JlYXRlZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnKShhdXRvX25vd19hZGQ9VHJ1ZSwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCd1cGRhdGVkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcpKGF1dG9fbm93PVRydWUsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnYmxkY29udHJvbCcsIFsnQnVpbGRSZXF1ZXN0J10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ0JSTGF5ZXInCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J2JsZGNvbnRyb2xfYnJsYXllcicsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdyZXEnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10pKSwKKyAgICAgICAgICAgICgnbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ2dpdHVybCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU0KSksCisgICAgICAgICAgICAoJ2NvbW1pdCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU0KSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J2JsZGNvbnRyb2wnLCBbJ0JSTGF5ZXInXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnQlJWYXJpYWJsZScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnYmxkY29udHJvbF9icnZhcmlhYmxlJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ3JlcScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSkpLAorICAgICAgICAgICAgKCduYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgndmFsdWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKShibGFuaz1UcnVlKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J2JsZGNvbnRyb2wnLCBbJ0JSVmFyaWFibGUnXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnQlJUYXJnZXQnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J2JsZGNvbnRyb2xfYnJ0YXJnZXQnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgncmVxJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddKSksCisgICAgICAgICAgICAoJ3RhcmdldCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ3Rhc2snLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCwgbnVsbD1UcnVlKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J2JsZGNvbnRyb2wnLCBbJ0JSVGFyZ2V0J10pCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnQnVpbGRFbnZpcm9ubWVudCcKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnYmxkY29udHJvbF9idWlsZGVudmlyb25tZW50JykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdCdWlsZFJlcXVlc3QnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J2JsZGNvbnRyb2xfYnVpbGRyZXF1ZXN0JykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdCUkxheWVyJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdibGRjb250cm9sX2JybGF5ZXInKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ0JSVmFyaWFibGUnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J2JsZGNvbnRyb2xfYnJ2YXJpYWJsZScpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnQlJUYXJnZXQnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J2JsZGNvbnRyb2xfYnJ0YXJnZXQnKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnYmxkY29udHJvbC5icmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSTGF5ZXInfSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJ0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSVmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5idWlsZGVudmlyb25tZW50JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkRW52aXJvbm1lbnQnfSwKKyAgICAgICAgICAgICdhZGRyZXNzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdiYmFkZHJlc3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnYmJwb3J0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ2Jic3RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdiYnRva2VuJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyNicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2JldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJ1aWxkcmVxdWVzdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZFJlcXVlc3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3N0YXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydibGRjb250cm9sJ10KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwMl9hdXRvX19hZGRfZmllbGRfYnVpbGRlbnZpcm9ubWVudF9zb3VyY2VkaXJfX2FkZF9maWVsZF9idWlsZGVudmlyb25tZW50LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDAyX2F1dG9fX2FkZF9maWVsZF9idWlsZGVudmlyb25tZW50X3NvdXJjZWRpcl9fYWRkX2ZpZWxkX2J1aWxkZW52aXJvbm1lbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUyMmE1MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwMl9hdXRvX19hZGRfZmllbGRfYnVpbGRlbnZpcm9ubWVudF9zb3VyY2VkaXJfX2FkZF9maWVsZF9idWlsZGVudmlyb25tZW50LnB5CkBAIC0wLDAgKzEsMTA2IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnQnVpbGRFbnZpcm9ubWVudC5zb3VyY2VkaXInCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdibGRjb250cm9sX2J1aWxkZW52aXJvbm1lbnQnLCAnc291cmNlZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShkZWZhdWx0PScnLCBtYXhfbGVuZ3RoPTUxMiwgYmxhbms9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdCdWlsZEVudmlyb25tZW50LmJ1aWxkZGlyJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnYmxkY29udHJvbF9idWlsZGVudmlyb25tZW50JywgJ2J1aWxkZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShkZWZhdWx0PScnLCBtYXhfbGVuZ3RoPTUxMiwgYmxhbms9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0J1aWxkRW52aXJvbm1lbnQuc291cmNlZGlyJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnYmxkY29udHJvbF9idWlsZGVudmlyb25tZW50JywgJ3NvdXJjZWRpcicpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnQnVpbGRFbnZpcm9ubWVudC5idWlsZGRpcicKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J2JsZGNvbnRyb2xfYnVpbGRlbnZpcm9ubWVudCcsICdidWlsZGRpcicpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdibGRjb250cm9sLmJybGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJMYXllcid9LAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUlRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJydmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJ1aWxkZW52aXJvbm1lbnQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRFbnZpcm9ubWVudCd9LAorICAgICAgICAgICAgJ2FkZHJlc3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2JiYWRkcmVzcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdiYnBvcnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAnYmJzdGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2JidG9rZW4nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI2JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnYmV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkZGlyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUxMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlZGlyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUxMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJ1aWxkcmVxdWVzdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZFJlcXVlc3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3N0YXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnYmxkY29udHJvbCddClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDAzX2F1dG9fX2FkZF9maWVsZF9icmxheWVyX2RpcnBhdGgucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDNfYXV0b19fYWRkX2ZpZWxkX2JybGF5ZXJfZGlycGF0aC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWJhODM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDAzX2F1dG9fX2FkZF9maWVsZF9icmxheWVyX2RpcnBhdGgucHkKQEAgLTAsMCArMSw5OSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0JSTGF5ZXIuZGlycGF0aCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J2JsZGNvbnRyb2xfYnJsYXllcicsICdkaXJwYXRoJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShkZWZhdWx0PScnLCBtYXhfbGVuZ3RoPTI1NCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0JSTGF5ZXIuZGlycGF0aCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J2JsZGNvbnRyb2xfYnJsYXllcicsICdkaXJwYXRoJykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J2JsZGNvbnRyb2wuYnJsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUkxheWVyJ30sCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJydGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSVGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJ2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUlZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnVpbGRlbnZpcm9ubWVudCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZEVudmlyb25tZW50J30sCisgICAgICAgICAgICAnYWRkcmVzcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnYmJhZGRyZXNzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2JicG9ydCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdiYnN0YXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnYmJ0b2tlbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjYnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdiZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGRkaXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTEyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VkaXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTEyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnVpbGRyZXF1ZXN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkUmVxdWVzdCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAnc3RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXNlcl9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydibGRjb250cm9sJ10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDRfbG9hZGluaXRpYWxkYXRhLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDA0X2xvYWRpbml0aWFsZGF0YS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTA4NTc4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDA0X2xvYWRpbml0aWFsZGF0YS5weQpAQCAtMCwwICsxLDEwNCBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgRGF0YU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCitjbGFzcyBNaWdyYXRpb24oRGF0YU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIldyaXRlIHlvdXIgZm9yd2FyZHMgbWV0aG9kcyBoZXJlLiIKKyAgICAgICAgIyBOb3RlOiBEb24ndCB1c2UgImZyb20gYXBwbmFtZS5tb2RlbHMgaW1wb3J0IE1vZGVsTmFtZSIuCisgICAgICAgICMgVXNlIG9ybS5Nb2RlbE5hbWUgdG8gcmVmZXIgdG8gbW9kZWxzIGluIHRoaXMgYXBwbGljYXRpb24sCisgICAgICAgICMgYW5kIG9ybVsnYXBwbmFtZS5Nb2RlbE5hbWUnXSBmb3IgbW9kZWxzIGluIG90aGVyIGFwcGxpY2F0aW9ucy4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3JtLkJ1aWxkRW52aXJvbm1lbnQub2JqZWN0cy5nZXQocGsgPSAxKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKKyAgICAgICAgICAgIG9ybS5CdWlsZEVudmlyb25tZW50Lm9iamVjdHMuY3JlYXRlKHBrID0gMSwKKyAgICAgICAgICAgICAgICBjcmVhdGVkID0gdGltZXpvbmUubm93KCksCisgICAgICAgICAgICAgICAgdXBkYXRlZCA9IHRpbWV6b25lLm5vdygpLAorICAgICAgICAgICAgICAgIGJldHlwZSA9IDApCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICJXcml0ZSB5b3VyIGJhY2t3YXJkcyBtZXRob2RzIGhlcmUuIgorCisgICAgbW9kZWxzID0geworICAgICAgICB1J2JsZGNvbnRyb2wuYnJsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUkxheWVyJ30sCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJydGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSVGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJ2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUlZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnVpbGRlbnZpcm9ubWVudCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZEVudmlyb25tZW50J30sCisgICAgICAgICAgICAnYWRkcmVzcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnYmJhZGRyZXNzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2JicG9ydCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdiYnN0YXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnYmJ0b2tlbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjYnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdiZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGRkaXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTEyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VkaXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTEyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnVpbGRyZXF1ZXN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkUmVxdWVzdCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAnc3RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXNlcl9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydibGRjb250cm9sJ10KKyAgICBzeW1tZXRyaWNhbCA9IFRydWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwNV9hdXRvX19hZGRfYnJlcnJvci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwNV9hdXRvX19hZGRfYnJlcnJvci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGFlYjQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDA1X2F1dG9fX2FkZF9icmVycm9yLnB5CkBAIC0wLDAgKzEsMTEyIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBtb2RlbCAnQlJFcnJvcicKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnYmxkY29udHJvbF9icmVycm9yJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ3JlcScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSkpLAorICAgICAgICAgICAgKCdlcnJ0eXBlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnZXJybXNnJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJykoKSksCisgICAgICAgICAgICAoJ3RyYWNlYmFjaycsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcpKCkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdibGRjb250cm9sJywgWydCUkVycm9yJ10pCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnQlJFcnJvcicKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnYmxkY29udHJvbF9icmVycm9yJykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J2JsZGNvbnRyb2wuYnJlcnJvcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUkVycm9yJ30sCisgICAgICAgICAgICAnZXJybXNnJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2VycnR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndHJhY2ViYWNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSTGF5ZXInfSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJ0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSVmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5idWlsZGVudmlyb25tZW50JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkRW52aXJvbm1lbnQnfSwKKyAgICAgICAgICAgICdhZGRyZXNzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdiYmFkZHJlc3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnYmJwb3J0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ2Jic3RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdiYnRva2VuJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyNicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2JldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZGRpcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MTInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZWRpcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MTInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5idWlsZHJlcXVlc3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRSZXF1ZXN0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICdzdGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ2JsZGNvbnRyb2wnXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwNl9hdXRvX19hZGRfYnJiaXRiYWtlLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDA2X2F1dG9fX2FkZF9icmJpdGJha2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQzODhmOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwNl9hdXRvX19hZGRfYnJiaXRiYWtlLnB5CkBAIC0wLDAgKzEsMTI4IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBtb2RlbCAnQlJCaXRiYWtlJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdibGRjb250cm9sX2JyYml0YmFrZScsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdyZXEnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10sIHVuaXF1ZT1UcnVlKSksCisgICAgICAgICAgICAoJ2dpdHVybCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU0KSksCisgICAgICAgICAgICAoJ2NvbW1pdCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU0KSksCisgICAgICAgICAgICAoJ2RpcnBhdGgnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NCkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdibGRjb250cm9sJywgWydCUkJpdGJha2UnXSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdCUkJpdGJha2UnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J2JsZGNvbnRyb2xfYnJiaXRiYWtlJykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J2JsZGNvbnRyb2wuYnJiaXRiYWtlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSQml0YmFrZSd9LAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIiwgJ3VuaXF1ZSc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icmVycm9yJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSRXJyb3InfSwKKyAgICAgICAgICAgICdlcnJtc2cnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZXJydHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KSwKKyAgICAgICAgICAgICd0cmFjZWJhY2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJybGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJMYXllcid9LAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUlRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJydmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJ1aWxkZW52aXJvbm1lbnQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRFbnZpcm9ubWVudCd9LAorICAgICAgICAgICAgJ2FkZHJlc3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2JiYWRkcmVzcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdiYnBvcnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAnYmJzdGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2JidG9rZW4nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI2JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnYmV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkZGlyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUxMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlZGlyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUxMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJ1aWxkcmVxdWVzdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZFJlcXVlc3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3N0YXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXNlcl9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydibGRjb250cm9sJ10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDdfYXV0b19fYWRkX2ZpZWxkX2J1aWxkcmVxdWVzdF9lbnZpcm9ubWVudF9fY2hnX2ZpZWxkX2J1aWxkcmVxdWVzdF9idWlsZC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwN19hdXRvX19hZGRfZmllbGRfYnVpbGRyZXF1ZXN0X2Vudmlyb25tZW50X19jaGdfZmllbGRfYnVpbGRyZXF1ZXN0X2J1aWxkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNjc3YTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDdfYXV0b19fYWRkX2ZpZWxkX2J1aWxkcmVxdWVzdF9lbnZpcm9ubWVudF9fY2hnX2ZpZWxkX2J1aWxkcmVxdWVzdF9idWlsZC5weQpAQCAtMCwwICsxLDE0NSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0J1aWxkUmVxdWVzdC5lbnZpcm9ubWVudCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J2JsZGNvbnRyb2xfYnVpbGRyZXF1ZXN0JywgJ2Vudmlyb25tZW50JywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ2JsZGNvbnRyb2wuQnVpbGRFbnZpcm9ubWVudCddLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ0J1aWxkUmVxdWVzdC5idWlsZCcKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnYmxkY29udHJvbF9idWlsZHJlcXVlc3QnLCAnYnVpbGRfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLk9uZVRvT25lRmllbGQnKSh0bz1vcm1bJ29ybS5CdWlsZCddLCB1bmlxdWU9VHJ1ZSwgbnVsbD1UcnVlKSkKKyAgICAgICAgIyBBZGRpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ0J1aWxkUmVxdWVzdCcsIGZpZWxkcyBbJ2J1aWxkJ10KKyAgICAgICAgZGIuY3JlYXRlX3VuaXF1ZSh1J2JsZGNvbnRyb2xfYnVpbGRyZXF1ZXN0JywgWydidWlsZF9pZCddKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgUmVtb3ZpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ0J1aWxkUmVxdWVzdCcsIGZpZWxkcyBbJ2J1aWxkJ10KKyAgICAgICAgZGIuZGVsZXRlX3VuaXF1ZSh1J2JsZGNvbnRyb2xfYnVpbGRyZXF1ZXN0JywgWydidWlsZF9pZCddKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0J1aWxkUmVxdWVzdC5lbnZpcm9ubWVudCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J2JsZGNvbnRyb2xfYnVpbGRyZXF1ZXN0JywgJ2Vudmlyb25tZW50X2lkJykKKworCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ0J1aWxkUmVxdWVzdC5idWlsZCcKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnYmxkY29udHJvbF9idWlsZHJlcXVlc3QnLCAnYnVpbGRfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5CdWlsZCddLCBudWxsPVRydWUpKQorCisgICAgbW9kZWxzID0geworICAgICAgICB1J2JsZGNvbnRyb2wuYnJiaXRiYWtlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSQml0YmFrZSd9LAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIiwgJ3VuaXF1ZSc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icmVycm9yJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSRXJyb3InfSwKKyAgICAgICAgICAgICdlcnJtc2cnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZXJydHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KSwKKyAgICAgICAgICAgICd0cmFjZWJhY2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJybGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJMYXllcid9LAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUlRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJydmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJ1aWxkZW52aXJvbm1lbnQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRFbnZpcm9ubWVudCd9LAorICAgICAgICAgICAgJ2FkZHJlc3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2JiYWRkcmVzcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdiYnBvcnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAnYmJzdGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2JidG9rZW4nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI2JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnYmV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkZGlyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUxMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlZGlyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUxMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJ1aWxkcmVxdWVzdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZFJlcXVlc3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5PbmVUb09uZUZpZWxkJywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10iLCAndW5pcXVlJzogJ1RydWUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Vudmlyb25tZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkRW52aXJvbm1lbnQnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAnc3RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJpdGJha2V2ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JpdGJha2VWZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ2JsZGNvbnRyb2wnXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwOF9icmFyY2hpdmUucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDhfYnJhcmNoaXZlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NDY5NjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDhfYnJhcmNoaXZlLnB5CkBAIC0wLDAgKzEsMTM4IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBEYXRhTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKK2NsYXNzIE1pZ3JhdGlvbihEYXRhTWlncmF0aW9uKToKKyAgICAjIGlkcyB0aGF0IGNhbm5vdCBiZSBpbXBvcnRlZCBmcm9tIEJ1aWxkUmVxdWVzdAorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgIFJFUV9DT01QTEVURUQgPSAzCisgICAgICAgIFJFUV9BUkNISVZFID0gNgorICAgICAgICAiV3JpdGUgeW91ciBmb3J3YXJkcyBtZXRob2RzIGhlcmUuIgorICAgICAgICAjIE5vdGU6IERvbid0IHVzZSAiZnJvbSBhcHBuYW1lLm1vZGVscyBpbXBvcnQgTW9kZWxOYW1lIi4KKyAgICAgICAgIyBVc2Ugb3JtLk1vZGVsTmFtZSB0byByZWZlciB0byBtb2RlbHMgaW4gdGhpcyBhcHBsaWNhdGlvbiwKKyAgICAgICAgIyBhbmQgb3JtWydhcHBuYW1lLk1vZGVsTmFtZSddIGZvciBtb2RlbHMgaW4gb3RoZXIgYXBwbGljYXRpb25zLgorICAgICAgICBvcm0uQnVpbGRSZXF1ZXN0Lm9iamVjdHMuZmlsdGVyKHN0YXRlPVJFUV9DT01QTEVURUQpLnVwZGF0ZShzdGF0ZT1SRVFfQVJDSElWRSkKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgUkVRX0NPTVBMRVRFRCA9IDMKKyAgICAgICAgUkVRX0FSQ0hJVkUgPSA2CisgICAgICAgICJXcml0ZSB5b3VyIGJhY2t3YXJkcyBtZXRob2RzIGhlcmUuIgorICAgICAgICBvcm0uQnVpbGRSZXF1ZXN0Lm9iamVjdHMuZmlsdGVyKHN0YXRlPVJFUV9BUkNISVZFKS51cGRhdGUoc3RhdGU9UkVRX0NPTVBMRVRFRCkKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdibGRjb250cm9sLmJyYml0YmFrZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUkJpdGJha2UnfSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSIsICd1bmlxdWUnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJlcnJvcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUkVycm9yJ30sCisgICAgICAgICAgICAnZXJybXNnJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2VycnR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndHJhY2ViYWNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSTGF5ZXInfSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJ0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSVmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5idWlsZGVudmlyb25tZW50JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkRW52aXJvbm1lbnQnfSwKKyAgICAgICAgICAgICdhZGRyZXNzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdiYmFkZHJlc3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnYmJwb3J0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ2Jic3RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdiYnRva2VuJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyNicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2JldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZGRpcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MTInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZWRpcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MTInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5idWlsZHJlcXVlc3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRSZXF1ZXN0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuT25lVG9PbmVGaWVsZCcsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIiwgJ3VuaXF1ZSc6ICdUcnVlJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbnZpcm9ubWVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZEVudmlyb25tZW50J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3N0YXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdicmFuY2hfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydibGRjb250cm9sJ10KKyAgICBzeW1tZXRyaWNhbCA9IFRydWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tb2RlbHMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tb2RlbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYxZGU1OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21vZGVscy5weQpAQCAtMCwwICsxLDE2NCBAQAorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworZnJvbSBkamFuZ28uY29yZS52YWxpZGF0b3JzIGltcG9ydCBNYXhWYWx1ZVZhbGlkYXRvciwgTWluVmFsdWVWYWxpZGF0b3IKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgUHJvamVjdCwgUHJvamVjdExheWVyLCBQcm9qZWN0VmFyaWFibGUsIFByb2plY3RUYXJnZXQsIEJ1aWxkCisKKyMgYSBCdWlsZEVudmlyb25tZW50IGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSAiYnVpbGQvIiBkaXJlY3Rvcnkgb24gdGhlIGxvY2FsaG9zdAorY2xhc3MgQnVpbGRFbnZpcm9ubWVudChtb2RlbHMuTW9kZWwpOgorICAgIFNFUlZFUl9TVE9QUEVEID0gMAorICAgIFNFUlZFUl9TVEFSVEVEID0gMQorICAgIFNFUlZFUl9TVEFURSA9ICgKKyAgICAgICAgKFNFUlZFUl9TVE9QUEVELCAic3RvcHBlZCIpLAorICAgICAgICAoU0VSVkVSX1NUQVJURUQsICJzdGFydGVkIiksCisgICAgKQorCisgICAgVFlQRV9MT0NBTCA9IDAKKyAgICBUWVBFX1NTSCAgID0gMQorICAgIFRZUEUgPSAoCisgICAgICAgIChUWVBFX0xPQ0FMLCAibG9jYWwiKSwKKyAgICAgICAgKFRZUEVfU1NILCAic3NoIiksCisgICAgKQorCisgICAgTE9DS19GUkVFID0gMAorICAgIExPQ0tfTE9DSyA9IDEKKyAgICBMT0NLX1JVTk5JTkcgPSAyCisgICAgTE9DS19TVEFURSA9ICgKKyAgICAgICAgKExPQ0tfRlJFRSwgImZyZWUiKSwKKyAgICAgICAgKExPQ0tfTE9DSywgImxvY2siKSwKKyAgICAgICAgKExPQ0tfUlVOTklORywgInJ1bm5pbmciKSwKKyAgICApCisKKyAgICBhZGRyZXNzICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDI1NCkKKyAgICBiZXR5cGUgICAgICA9IG1vZGVscy5JbnRlZ2VyRmllbGQoY2hvaWNlcyA9IFRZUEUpCisgICAgYmJhZGRyZXNzICAgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGggPSAyNTQsIGJsYW5rID0gVHJ1ZSkKKyAgICBiYnBvcnQgICAgICA9IG1vZGVscy5JbnRlZ2VyRmllbGQoZGVmYXVsdCA9IC0xKQorICAgIGJidG9rZW4gICAgID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoID0gMTI2LCBibGFuayA9IFRydWUpCisgICAgYmJzdGF0ZSAgICAgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXMgPSBTRVJWRVJfU1RBVEUsIGRlZmF1bHQgPSBTRVJWRVJfU1RPUFBFRCkKKyAgICBzb3VyY2VkaXIgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDUxMiwgYmxhbmsgPSBUcnVlKQorICAgIGJ1aWxkZGlyICAgID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoID0gNTEyLCBibGFuayA9IFRydWUpCisgICAgbG9jayAgICAgICAgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXMgPSBMT0NLX1NUQVRFLCBkZWZhdWx0ID0gTE9DS19GUkVFKQorICAgIGNyZWF0ZWQgICAgID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoYXV0b19ub3dfYWRkID0gVHJ1ZSkKKyAgICB1cGRhdGVkICAgICA9IG1vZGVscy5EYXRlVGltZUZpZWxkKGF1dG9fbm93ID0gVHJ1ZSkKKworCisgICAgZGVmIGdldF9hcnRpZmFjdF90eXBlKHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBzZWxmLmJldHlwZSA9PSBCdWlsZEVudmlyb25tZW50LlRZUEVfTE9DQUw6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW1wb3J0IG1hZ2ljCisKKyAgICAgICAgICAgICAgICAjIGZhaXIgd2FybmluZzogdGhpcyBpcyBhIG1lc3M7IHRoZXJlIGFyZSBtdWx0aXBsZSBjb21wZXRlaW5nIGFuZCBpbmNvbXBhdGlibGUKKyAgICAgICAgICAgICAgICAjIG1hZ2ljIG1vZHVsZXMgZmxvYXRpbmcgYXJvdW5kLCBzbyB3ZSB0cnkgc29tZSBvZiB0aGUgbW9zdCBjb21tb24gY29tYmluYXRpb25zCisKKyAgICAgICAgICAgICAgICB0cnk6ICAgICMgd2UgdHJ5IHVidW50dSdzIHB5dGhvbi1tYWdpYyA1LjQKKyAgICAgICAgICAgICAgICAgICAgbSA9IG1hZ2ljLm9wZW4obWFnaWMuTUFHSUNfTUlNRV9UWVBFKQorICAgICAgICAgICAgICAgICAgICBtLmxvYWQoKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbS5maWxlKHBhdGgpCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICB0cnk6ICAgICMgd2UgdHJ5IHB5dGhvbi1tYWdpYyAwLjQuNgorICAgICAgICAgICAgICAgICAgICBtID0gbWFnaWMuTWFnaWMobWFnaWMuTUFHSUNfTUlNRSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG0uZnJvbV9maWxlKHBhdGgpCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICB0cnk6ICAgICMgd2UgdHJ5IHBpcCBmaWxlbWFnaWMgMS42CisgICAgICAgICAgICAgICAgICAgIG0gPSBtYWdpYy5NYWdpYyhmbGFncz1tYWdpYy5NQUdJQ19NSU1FX1RZUEUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtLmlkX2ZpbGVuYW1lKHBhdGgpCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICByZXR1cm4gImJpbmFyeS9vY3RldC1zdHJlYW0iCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuICJiaW5hcnkvb2N0ZXQtc3RyZWFtIgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZJWE1FOiBhcnRpZmFjdCB0eXBlIG5vdCBpbXBsZW1lbnRlZCBmb3IgYnVpbGQgZW52aXJvbm1lbnQgdHlwZSAlcyIgJSBzZWxmLmdldF9iZXR5cGVfZGlzcGxheSgpKQorCisKKyAgICBkZWYgZ2V0X2FydGlmYWN0KHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBzZWxmLmJldHlwZSA9PSBCdWlsZEVudmlyb25tZW50LlRZUEVfTE9DQUw6CisgICAgICAgICAgICByZXR1cm4gb3BlbihwYXRoLCAiciIpCisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRklYTUU6IGFydGlmYWN0IGRvd25sb2FkIG5vdCBpbXBsZW1lbnRlZCBmb3IgYnVpbGQgZW52aXJvbm1lbnQgdHlwZSAlcyIgJSBzZWxmLmdldF9iZXR5cGVfZGlzcGxheSgpKQorCisgICAgZGVmIGhhc19hcnRpZmFjdChzZWxmLCBwYXRoKToKKyAgICAgICAgaW1wb3J0IG9zCisgICAgICAgIGlmIHNlbGYuYmV0eXBlID09IEJ1aWxkRW52aXJvbm1lbnQuVFlQRV9MT0NBTDoKKyAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmV4aXN0cyhwYXRoKQorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZJWE1FOiBoYXMgYXJ0aWZhY3Qgbm90IGltcGxlbWVudGVkIGZvciBidWlsZCBlbnZpcm9ubWVudCB0eXBlICVzIiAlIHNlbGYuZ2V0X2JldHlwZV9kaXNwbGF5KCkpCisKKyMgYSBCdWlsZFJlcXVlc3QgaXMgYSByZXF1ZXN0IHRoYXQgdGhlIHNjaGVkdWxlciB3aWxsIGJ1aWxkIHVzaW5nIGEgQnVpbGRFbnZpcm9ubWVudAorIyB0aGUgYnVpbGQgcmVxdWVzdCBxdWV1ZSBpcyB0aGUgdGFibGUgaXRzZWxmLCBvcmRlcmVkIGJ5IHN0YXRlCisKK2NsYXNzIEJ1aWxkUmVxdWVzdChtb2RlbHMuTW9kZWwpOgorICAgIFJFUV9DUkVBVEVEID0gMAorICAgIFJFUV9RVUVVRUQgPSAxCisgICAgUkVRX0lOUFJPR1JFU1MgPSAyCisgICAgUkVRX0NPTVBMRVRFRCA9IDMKKyAgICBSRVFfRkFJTEVEID0gNAorICAgIFJFUV9ERUxFVEVEID0gNQorICAgIFJFUV9BUkNISVZFID0gNgorCisgICAgUkVRVUVTVF9TVEFURSA9ICgKKyAgICAgICAgKFJFUV9DUkVBVEVELCAiY3JlYXRlZCIpLAorICAgICAgICAoUkVRX1FVRVVFRCwgInF1ZXVlZCIpLAorICAgICAgICAoUkVRX0lOUFJPR1JFU1MsICJpbiBwcm9ncmVzcyIpLAorICAgICAgICAoUkVRX0NPTVBMRVRFRCwgImNvbXBsZXRlZCIpLAorICAgICAgICAoUkVRX0ZBSUxFRCwgImZhaWxlZCIpLAorICAgICAgICAoUkVRX0RFTEVURUQsICJkZWxldGVkIiksCisgICAgICAgIChSRVFfQVJDSElWRSwgImFyY2hpdmUiKSwKKyAgICApCisKKyAgICBzZWFyY2hfYWxsb3dlZF9maWVsZHMgPSAoImJydGFyZ2V0X190YXJnZXQiLCAiYnVpbGRfX3Byb2plY3RfX25hbWUiKQorCisgICAgcHJvamVjdCAgICAgPSBtb2RlbHMuRm9yZWlnbktleShQcm9qZWN0KQorICAgIGJ1aWxkICAgICAgID0gbW9kZWxzLk9uZVRvT25lRmllbGQoQnVpbGQsIG51bGwgPSBUcnVlKSAgICAgIyBUT0RPOiB0b2FzdGVydWkgc2hvdWxkIHNldCB0aGlzIHdoZW4gQnVpbGQgaXMgY3JlYXRlZAorICAgIGVudmlyb25tZW50ID0gbW9kZWxzLkZvcmVpZ25LZXkoQnVpbGRFbnZpcm9ubWVudCwgbnVsbCA9IFRydWUpCisgICAgc3RhdGUgICAgICAgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXMgPSBSRVFVRVNUX1NUQVRFLCBkZWZhdWx0ID0gUkVRX0NSRUFURUQpCisgICAgY3JlYXRlZCAgICAgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChhdXRvX25vd19hZGQgPSBUcnVlKQorICAgIHVwZGF0ZWQgICAgID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoYXV0b19ub3cgPSBUcnVlKQorCisgICAgZGVmIGdldF9kdXJhdGlvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIChzZWxmLnVwZGF0ZWQgLSBzZWxmLmNyZWF0ZWQpLnRvdGFsX3NlY29uZHMoKQorCisgICAgZGVmIGdldF9zb3J0ZWRfdGFyZ2V0X2xpc3Qoc2VsZik6CisgICAgICAgIHRndHMgPSBzZWxmLmJydGFyZ2V0X3NldC5vcmRlcl9ieSggJ3RhcmdldCcgKTsKKyAgICAgICAgcmV0dXJuKCB0Z3RzICk7CisKKyAgICBkZWYgZ2V0X21hY2hpbmUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmJydmFyaWFibGVfc2V0LmdldChuYW1lPSJNQUNISU5FIikudmFsdWUKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzICVzIiAlIChzZWxmLnByb2plY3QsIHNlbGYuZ2V0X3N0YXRlX2Rpc3BsYXkoKSkKKworIyBUaGVzZSB0YWJsZXMgc3BlY2lmeSB0aGUgc2V0dGluZ3MgZm9yIHJ1bm5pbmcgYW4gYWN0dWFsIGJ1aWxkLgorIyBUaGV5IE1VU1QgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIHRhYmxlcyBpbiBvcm0ubW9kZWxzLlByb2plY3QqCisKK2NsYXNzIEJSTGF5ZXIobW9kZWxzLk1vZGVsKToKKyAgICByZXEgICAgICAgICA9IG1vZGVscy5Gb3JlaWduS2V5KEJ1aWxkUmVxdWVzdCkKKyAgICBuYW1lICAgICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDEwMCkKKyAgICBnaXR1cmwgICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDI1NCkKKyAgICBjb21taXQgICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDI1NCkKKyAgICBkaXJwYXRoICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDI1NCkKKworY2xhc3MgQlJCaXRiYWtlKG1vZGVscy5Nb2RlbCk6CisgICAgcmVxICAgICAgICAgPSBtb2RlbHMuRm9yZWlnbktleShCdWlsZFJlcXVlc3QsIHVuaXF1ZSA9IFRydWUpICAgICMgb25seSBvbmUgYml0YmFrZSBmb3IgYSByZXF1ZXN0CisgICAgZ2l0dXJsICAgICAgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGggPTI1NCkKKyAgICBjb21taXQgICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDI1NCkKKyAgICBkaXJwYXRoICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDI1NCkKKworY2xhc3MgQlJWYXJpYWJsZShtb2RlbHMuTW9kZWwpOgorICAgIHJlcSAgICAgICAgID0gbW9kZWxzLkZvcmVpZ25LZXkoQnVpbGRSZXF1ZXN0KQorICAgIG5hbWUgICAgICAgID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICB2YWx1ZSAgICAgICA9IG1vZGVscy5UZXh0RmllbGQoYmxhbmsgPSBUcnVlKQorCitjbGFzcyBCUlRhcmdldChtb2RlbHMuTW9kZWwpOgorICAgIHJlcSAgICAgICAgID0gbW9kZWxzLkZvcmVpZ25LZXkoQnVpbGRSZXF1ZXN0KQorICAgIHRhcmdldCAgICAgID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICB0YXNrICAgICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDAsIG51bGw9VHJ1ZSkKKworY2xhc3MgQlJFcnJvcihtb2RlbHMuTW9kZWwpOgorICAgIHJlcSAgICAgICAgID0gbW9kZWxzLkZvcmVpZ25LZXkoQnVpbGRSZXF1ZXN0KQorICAgIGVycnR5cGUgICAgID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICBlcnJtc2cgICAgICA9IG1vZGVscy5UZXh0RmllbGQoKQorICAgIHRyYWNlYmFjayAgID0gbW9kZWxzLlRleHRGaWVsZCgpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcyAoJXMpIiAlIChzZWxmLmVycm1zZywgc2VsZi5yZXEpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9zc2hiZWNvbnRyb2xsZXIucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9zc2hiZWNvbnRyb2xsZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVmNDM0YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL3NzaGJlY29udHJvbGxlci5weQpAQCAtMCwwICsxLDE3OSBAQAorIworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxNCAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKworaW1wb3J0IHN5cworaW1wb3J0IHJlCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgdHJhbnNhY3Rpb24KK2Zyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgUQorZnJvbSBibGRjb250cm9sLm1vZGVscyBpbXBvcnQgQnVpbGRFbnZpcm9ubWVudCwgQlJMYXllciwgQlJWYXJpYWJsZSwgQlJUYXJnZXQsIEJSQml0YmFrZQoraW1wb3J0IHN1YnByb2Nlc3MKKworZnJvbSB0b2FzdGVybWFpbiBpbXBvcnQgc2V0dGluZ3MKKworZnJvbSBiYmNvbnRyb2xsZXIgaW1wb3J0IEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyLCBTaGVsbENtZEV4Y2VwdGlvbiwgQnVpbGRTZXR1cEV4Y2VwdGlvbgorCitjbGFzcyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgIHBhc3MKKworZGVmIEROKHBhdGgpOgorICAgIHJldHVybiAiLyIuam9pbihwYXRoLnNwbGl0KCIvIilbMDotMV0pCisKK2NsYXNzIFNTSEJFQ29udHJvbGxlcihCdWlsZEVudmlyb25tZW50Q29udHJvbGxlcik6CisgICAgIiIiIEltcGxlbWVudGF0aW9uIG9mIHRoZSBCdWlsZEVudmlyb25tZW50Q29udHJvbGxlciBmb3IgdGhlIGxvY2FsaG9zdDsKKyAgICAgICAgdGhpcyBjb250cm9sbGVyIG1hbmFnZXMgdGhlIGRlZmF1bHQgYnVpbGQgZGlyZWN0b3J5LAorICAgICAgICB0aGUgc2VydmVyIHNldHVwIGFuZCBzeXN0ZW0gc3RhcnQgYW5kIHN0b3AgZm9yIHRoZSBsb2NhbGhvc3QtdHlwZSBidWlsZCBlbnZpcm9ubWVudAorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYmUpOgorICAgICAgICBzdXBlcihTU0hCRUNvbnRyb2xsZXIsIHNlbGYpLl9faW5pdF9fKGJlKQorICAgICAgICBzZWxmLmRidXJsID0gc2V0dGluZ3MuZ2V0REFUQUJBU0VfVVJMKCkKKyAgICAgICAgc2VsZi5wb2t5ZGlybmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi5pc2xheWVyc2V0ID0gRmFsc2UKKworICAgIGRlZiBfc2hlbGxjbWQoc2VsZiwgY29tbWFuZCwgY3dkID0gTm9uZSk6CisgICAgICAgIGlmIGN3ZCBpcyBOb25lOgorICAgICAgICAgICAgY3dkID0gc2VsZi5iZS5zb3VyY2VkaXIKKworICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbigic3NoICVzICdjZCAlcyAmJiAlcyciICUgKHNlbGYuYmUuYWRkcmVzcywgY3dkLCBjb21tYW5kKSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgKG91dCxlcnIpID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIGlmIHAucmV0dXJuY29kZToKKyAgICAgICAgICAgIGlmIGxlbihlcnIpID09IDA6CisgICAgICAgICAgICAgICAgZXJyID0gImNvbW1hbmQ6ICVzIFxuJXMiICUgKGNvbW1hbmQsIG91dCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXJyID0gImNvbW1hbmQ6ICVzIFxuJXMiICUgKGNvbW1hbmQsIGVycikKKyAgICAgICAgICAgIHJhaXNlIFNoZWxsQ21kRXhjZXB0aW9uKGVycikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBvdXQuc3RyaXAoKQorCisgICAgZGVmIF9wYXRoZXhpc3RzKHNlbGYsIHBhdGgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9zaGVsbGNtZCgidGVzdCAtZSBcIiVzXCIiICUgcGF0aCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGV4Y2VwdCBTaGVsbENtZEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX3BhdGhjcmVhdGUoc2VsZiwgcGF0aCk6CisgICAgICAgIHNlbGYuX3NoZWxsY21kKCJta2RpciAtcCBcIiVzXCIiICUgcGF0aCkKKworICAgIGRlZiBfc2V0dXBCRShzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYucG9reWRpcm5hbWUgYW5kIHNlbGYuX3BhdGhleGlzdHMoc2VsZi5wb2t5ZGlybmFtZSkKKyAgICAgICAgc2VsZi5fcGF0aGNyZWF0ZShzZWxmLmJlLmJ1aWxkZGlyKQorICAgICAgICBzZWxmLl9zaGVsbGNtZCgiYmFzaCAtYyBcInNvdXJjZSAlcy9vZS1pbml0LWJ1aWxkLWVudiAlc1wiIiAlIChzZWxmLnBva3lkaXJuYW1lLCBzZWxmLmJlLmJ1aWxkZGlyKSkKKworICAgIGRlZiBzdGFydEJCU2VydmVyKHNlbGYsIGJyYmUpOgorICAgICAgICBhc3NlcnQgc2VsZi5wb2t5ZGlybmFtZSBhbmQgc2VsZi5fcGF0aGV4aXN0cyhzZWxmLnBva3lkaXJuYW1lKQorICAgICAgICBhc3NlcnQgc2VsZi5pc2xheWVyc2V0CisgICAgICAgIGNtZCA9IHNlbGYuX3NoZWxsY21kKCJiYXNoIC1jIFwic291cmNlICVzL29lLWluaXQtYnVpbGQtZW52ICVzICYmIERBVEFCQVNFX1VSTD0lcyBzb3VyY2UgdG9hc3RlciBzdGFydCBub3dlYiBicmJlPSVzXCIiICUgKHNlbGYucG9reWRpcm5hbWUsIHNlbGYuYmUuYnVpbGRkaXIsIHNlbGYuZGJ1cmwsIGJyYmUpKQorCisgICAgICAgIHBvcnQgPSAiLTEiCisgICAgICAgIGZvciBpIGluIGNtZC5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgIGlmIGkuc3RhcnRzd2l0aCgiQml0YmFrZSBzZXJ2ZXIgYWRkcmVzcyIpOgorICAgICAgICAgICAgICAgIHBvcnQgPSBpLnNwbGl0KCIgIilbLTFdCisgICAgICAgICAgICAgICAgcHJpbnQgIkZvdW5kIGJpdGJha2Ugc2VydmVyIHBvcnQgIiwgcG9ydAorCisKKyAgICAgICAgYXNzZXJ0IHNlbGYuYmUuc291cmNlZGlyIGFuZCBzZWxmLl9wYXRoZXhpc3RzKHNlbGYuYmUuYnVpbGRkaXIpCisgICAgICAgIHNlbGYuYmUuYmJhZGRyZXNzID0gc2VsZi5iZS5hZGRyZXNzLnNwbGl0KCJAIilbLTFdCisgICAgICAgIHNlbGYuYmUuYmJwb3J0ID0gcG9ydAorICAgICAgICBzZWxmLmJlLmJic3RhdGUgPSBCdWlsZEVudmlyb25tZW50LlNFUlZFUl9TVEFSVEVECisgICAgICAgIHNlbGYuYmUuc2F2ZSgpCisKKyAgICBkZWYgc3RvcEJCU2VydmVyKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5wb2t5ZGlybmFtZSBhbmQgc2VsZi5fcGF0aGV4aXN0cyhzZWxmLnBva3lkaXJuYW1lKQorICAgICAgICBhc3NlcnQgc2VsZi5pc2xheWVyc2V0CisgICAgICAgIHByaW50IHNlbGYuX3NoZWxsY21kKCJiYXNoIC1jIFwic291cmNlICVzL29lLWluaXQtYnVpbGQtZW52ICVzICYmICVzIHNvdXJjZSB0b2FzdGVyIHN0b3BcIiIgJQorICAgICAgICAgICAgKHNlbGYucG9reWRpcm5hbWUsIHNlbGYuYmUuYnVpbGRkaXIsIChsYW1iZGE6ICIiIGlmIHNlbGYuYmUuYmJ0b2tlbiBpcyBOb25lIGVsc2UgIkJCVE9LRU49JXMiICUgc2VsZi5iZS5iYnRva2VuKSgpKSkKKyAgICAgICAgc2VsZi5iZS5iYnN0YXRlID0gQnVpbGRFbnZpcm9ubWVudC5TRVJWRVJfU1RPUFBFRAorICAgICAgICBzZWxmLmJlLnNhdmUoKQorICAgICAgICBwcmludCAiU3RvcHBlZCBzZXJ2ZXIiCisKKworICAgIGRlZiBfY29weUZpbGUoc2VsZiwgZmlsZXBhdGgxLCBmaWxlcGF0aDIpOgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbigic2NwICclcycgJyVzJyIgJSAoZmlsZXBhdGgxLCBmaWxlcGF0aDIpLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnIgPSBzdWJwcm9jZXNzLlBJUEUsIHNoZWxsPVRydWUpCisgICAgICAgIChvdXQsIGVycikgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgaWYgcC5yZXR1cm5jb2RlOgorICAgICAgICAgICAgcmFpc2UgU2hlbGxDbWRFeGNlcHRpb24oZXJyKQorCisgICAgZGVmIHB1bGxGaWxlKHNlbGYsIGxvY2FsX2ZpbGVuYW1lLCByZW1vdGVfZmlsZW5hbWUpOgorICAgICAgICBfY29weUZpbGUobG9jYWxfZmlsZW5hbWUsICIlczolcyIgJSAoc2VsZi5iZS5hZGRyZXNzLCByZW1vdGVfZmlsZW5hbWUpKQorCisgICAgZGVmIHB1c2hGaWxlKHNlbGYsIGxvY2FsX2ZpbGVuYW1lLCByZW1vdGVfZmlsZW5hbWUpOgorICAgICAgICBfY29weUZpbGUoIiVzOiVzIiAlIChzZWxmLmJlLmFkZHJlc3MsIHJlbW90ZV9maWxlbmFtZSksIGxvY2FsX2ZpbGVuYW1lKQorCisgICAgZGVmIHNldExheWVycyhzZWxmLCBiaXRiYWtlcywgbGF5ZXJzKToKKyAgICAgICAgIiIiIGEgd29yZCBvZiBhdHRlbnRpb246IGJ5IGNvbnZlbnRpb24sIHRoZSBmaXJzdCBsYXllciBmb3IgYW55IGJ1aWxkIHdpbGwgYmUgcG9reSEgIiIiCisKKyAgICAgICAgYXNzZXJ0IHNlbGYuYmUuc291cmNlZGlyIGlzIG5vdCBOb25lCisgICAgICAgIGFzc2VydCBsZW4oYml0YmFrZXMpID09IDEKKyAgICAgICAgIyBzZXQgbGF5ZXJzIGluIHRoZSBsYXllcnNvdXJjZQorCisKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24oIk5vdCBpbXBsZW1lbnRlZDogU1NIIHNldExheWVycyIpCisgICAgICAgICMgMy4gY29uZmlndXJlIHRoZSBidWlsZCBlbnZpcm9ubWVudCwgc28gd2UgaGF2ZSBhIGNvbmYvYmJsYXllcnMuY29uZgorICAgICAgICBhc3NlcnQgc2VsZi5wb2t5ZGlybmFtZSBpcyBub3QgTm9uZQorICAgICAgICBzZWxmLl9zZXR1cEJFKCkKKworICAgICAgICAjIDQuIHVwZGF0ZSB0aGUgYmJsYXllcnMuY29uZgorICAgICAgICBiYmxheWVyY29uZiA9IG9zLnBhdGguam9pbihzZWxmLmJlLmJ1aWxkZGlyLCAiY29uZi9iYmxheWVycy5jb25mIikKKyAgICAgICAgaWYgbm90IHNlbGYuX3BhdGhleGlzdHMoYmJsYXllcmNvbmYpOgorICAgICAgICAgICAgcmFpc2UgQnVpbGRTZXR1cEV4Y2VwdGlvbigiQkUgaXMgbm90IGNvbnNpc3RlbnQ6IGJibGF5ZXJzLmNvbmYgZmlsZSBtaXNzaW5nIGF0ICVzIiAlIGJibGF5ZXJjb25mKQorCisgICAgICAgIGltcG9ydCB1dWlkCisgICAgICAgIGxvY2FsX2JibGF5ZXJjb25mID0gIi90bXAvIiArIHV1aWQudXVpZDQoKSArICItYmJsYXllci5jb25mIgorCisgICAgICAgIHNlbGYucHVsbEZpbGUoYmJsYXllcmNvbmYsIGxvY2FsX2JibGF5ZXJjb25mKQorCisgICAgICAgIEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyLl91cGRhdGVCQkxheWVycyhsb2NhbF9iYmxheWVyY29uZiwgbGF5ZXJsaXN0KQorICAgICAgICBzZWxmLnB1c2hGaWxlKGxvY2FsX2JibGF5ZXJjb25mLCBiYmxheWVyY29uZikKKworICAgICAgICBvcy51bmxpbmsobG9jYWxfYmJsYXllcmNvbmYpCisKKyAgICAgICAgc2VsZi5pc2xheWVyc2V0ID0gVHJ1ZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHJlbGVhc2Uoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLmJlLnNvdXJjZWRpciBhbmQgc2VsZi5fcGF0aGV4aXN0cyhzZWxmLmJlLmJ1aWxkZGlyKQorICAgICAgICBpbXBvcnQgc2h1dGlsCisgICAgICAgIHNodXRpbC5ybXRyZWUob3MucGF0aC5qb2luKHNlbGYuYmUuc291cmNlZGlyLCAiYnVpbGQiKSkKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9wYXRoZXhpc3RzKHNlbGYuYmUuYnVpbGRkaXIpCisKKyAgICBkZWYgdHJpZ2dlckJ1aWxkKHNlbGYsIGJpdGJha2UsIGxheWVycywgdmFyaWFibGVzLCB0YXJnZXRzKToKKyAgICAgICAgIyBzZXQgdXAgdGhlIGJ1aWQgZW52aXJvbm1lbnQgd2l0aCB0aGUgbmVlZGVkIGxheWVycworICAgICAgICBzZWxmLnNldExheWVycyhiaXRiYWtlLCBsYXllcnMpCisgICAgICAgIHNlbGYud3JpdGVDb25mRmlsZSgiY29uZi90b2FzdGVyLXByZS5jb25mIiwgKQorICAgICAgICBzZWxmLndyaXRlQ29uZkZpbGUoImNvbmYvdG9hc3Rlci5jb25mIiwgcmF3ID0gIklOSEVSSVQrPVwidG9hc3RlciBidWlsZGhpc3RvcnlcIiIpCisKKyAgICAgICAgIyBnZXQgdGhlIGJiIHNlcnZlciBydW5uaW5nIHdpdGggdGhlIGJ1aWxkIHJlcSBpZCBhbmQgYnVpbGQgZW52IGlkCisgICAgICAgIGJiY3RybCA9IHNlbGYuZ2V0QkJDb250cm9sbGVyKCkKKworICAgICAgICAjIHRyaWdnZXIgdGhlIGJ1aWxkIGNvbW1hbmQKKyAgICAgICAgdGFzayA9IHJlZHVjZShsYW1iZGEgeCwgeTogeCBpZiBsZW4oeSk9PSAwIGVsc2UgeSwgbWFwKGxhbWJkYSB5OiB5LnRhc2ssIHRhcmdldHMpKQorICAgICAgICBpZiBsZW4odGFzaykgPT0gMDoKKyAgICAgICAgICAgIHRhc2sgPSBOb25lCisKKyAgICAgICAgYmJjdHJsLmJ1aWxkKGxpc3QobWFwKGxhbWJkYSB4OngudGFyZ2V0LCB0YXJnZXRzKSksIHRhc2spCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IEJ1aWxkIGxhdW5jaGVkLCBleGl0aW5nLiBGb2xsb3cgYnVpbGQgbG9ncyBhdCAlcy90b2FzdGVyX3VpLmxvZyIgJSBzZWxmLmJlLmJ1aWxkZGlyKQorCisgICAgICAgICMgZGlzY29ubmVjdCBmcm9tIHRoZSBzZXJ2ZXIKKyAgICAgICAgYmJjdHJsLmRpc2Nvbm5lY3QoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvdGVzdHMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC90ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGJjNzdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvdGVzdHMucHkKQEAgLTAsMCArMSwxOTAgQEAKKyIiIgorVGhpcyBmaWxlIGRlbW9uc3RyYXRlcyB3cml0aW5nIHRlc3RzIHVzaW5nIHRoZSB1bml0dGVzdCBtb2R1bGUuIFRoZXNlIHdpbGwgcGFzcword2hlbiB5b3UgcnVuICJtYW5hZ2UucHkgdGVzdCIuCisKK1JlcGxhY2UgdGhpcyB3aXRoIG1vcmUgYXBwcm9wcmlhdGUgdGVzdHMgZm9yIHlvdXIgYXBwbGljYXRpb24uCisiIiIKKworZnJvbSBkamFuZ28udGVzdCBpbXBvcnQgVGVzdENhc2UKKworZnJvbSBibGRjb250cm9sLmJiY29udHJvbGxlciBpbXBvcnQgQml0YmFrZUNvbnRyb2xsZXIsIEJ1aWxkU2V0dXBFeGNlcHRpb24KK2Zyb20gYmxkY29udHJvbC5sb2NhbGhvc3RiZWNvbnRyb2xsZXIgaW1wb3J0IExvY2FsaG9zdEJFQ29udHJvbGxlcgorZnJvbSBibGRjb250cm9sLnNzaGJlY29udHJvbGxlciBpbXBvcnQgU1NIQkVDb250cm9sbGVyCitmcm9tIGJsZGNvbnRyb2wubW9kZWxzIGltcG9ydCBCdWlsZEVudmlyb25tZW50LCBCdWlsZFJlcXVlc3QKK2Zyb20gYmxkY29udHJvbC5tYW5hZ2VtZW50LmNvbW1hbmRzLnJ1bmJ1aWxkcyBpbXBvcnQgQ29tbWFuZAorCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IG9zCisKKyMgc3RhbmRhcmQgcG9reSBkYXRhIGhhcmRjb2RlZCBmb3IgdGVzdGluZworQklUQkFLRV9MQVlFUlMgPSBbdHlwZSgnYml0YmFrZV9pbmZvJywgKG9iamVjdCwpLCB7ICJnaXR1cmwiOiAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reS5naXQiLCAiZGlycGF0aCI6ICIiLCAiY29tbWl0IjogIkhFQUQifSldCitQT0tZX0xBWUVSUyA9IFsKKyAgICB0eXBlKCdwb2t5X2luZm8nLCAob2JqZWN0LCksIHsgIm5hbWUiOiAibWV0YSIsICJnaXR1cmwiOiAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reS5naXQiLCAiZGlycGF0aCI6ICJtZXRhIiwgImNvbW1pdCI6ICJIRUFEIn0pLAorICAgIHR5cGUoJ3Bva3lfaW5mbycsIChvYmplY3QsKSwgeyAibmFtZSI6ICJtZXRhLXlvY3RvIiwgImdpdHVybCI6ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5LmdpdCIsICJkaXJwYXRoIjogIm1ldGEteW9jdG8iLCAiY29tbWl0IjogIkhFQUQifSksCisgICAgdHlwZSgncG9reV9pbmZvJywgKG9iamVjdCwpLCB7ICJuYW1lIjogIm1ldGEteW9jdG8tYnNwIiwgImdpdHVybCI6ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5LmdpdCIsICJkaXJwYXRoIjogIm1ldGEteW9jdG8tYnNwIiwgImNvbW1pdCI6ICJIRUFEIn0pLAorICAgIF0KKworCisKKyMgd2UgaGF2ZSBhbiBhYnN0cmFjdCB0ZXN0IGNsYXNzIGRlc2lnbmVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb250cm9sbGVycyB1c2UgYSBzaW5nbGUgaW50ZXJmYWNlCisjIHNwZWNpZmljIGNvbnRyb2xsZXIgdGVzdHMgb25seSBuZWVkIHRvIG92ZXJyaWRlIHRoZSBfZ2V0QnVpbGRFbnZpcm9ubWVudCgpIG1ldGhvZAorCit0ZXN0X3NvdXJjZWRpciA9IG9zLmdldGVudigiVFRTX1NPVVJDRV9ESVIiKQordGVzdF9idWlsZGRpciA9IG9zLmdldGVudigiVFRTX0JVSUxEX0RJUiIpCit0ZXN0X2FkZHJlc3MgPSBvcy5nZXRlbnYoIlRUU19URVNUX0FERFJFU1MiLCAibG9jYWxob3N0IikKKworaWYgdGVzdF9zb3VyY2VkaXIgPT0gTm9uZSBvciB0ZXN0X2J1aWxkZGlyID09IE5vbmUgb3IgdGVzdF9hZGRyZXNzID09IE5vbmU6CisgICAgcmFpc2UgRXhjZXB0aW9uKCJQbGVhc2Ugc2V0IFRUVFNfU09VUkNFX0RJUiwgVFRTX0JVSUxEX0RJUiBhbmQgVFRTX1RFU1RfQUREUkVTUyIpCisKKyMgVGhlIGJiIHNlcnZlciB3aWxsIGV4cGVjdCBhIHRvYXN0ZXItcHJlLmNvbmYgZmlsZSB0byBleGlzdC4gSWYgaXQgZG9lc24ndCBleGl0IHRoZW4gd2UgbWFrZQorIyBhbiBlbXB0eSBvbmUgaGVyZS4KK29wZW4odGVzdF9idWlsZGRpciArICdjb25mL3RvYXN0ZXItcHJlLmNvbmYnLCAnYScpLmNsb3NlKCkKKworY2xhc3MgQkVDb250cm9sbGVyVGVzdHMob2JqZWN0KToKKworICAgIGRlZiBfc2VydmVyRm9yY2VTdG9wKHNlbGYsIGJjKToKKyAgICAgICAgZXJyID0gYmMuX3NoZWxsY21kKCJuZXRzdGF0ICAtdGFwbiAyPi9kZXYvbnVsbCB8IGdyZXAgODIwMCB8IGF3ayAne3ByaW50ICQ3fScgfCBzb3J0IC1mdSB8IGN1dCAtZCBcIi9cIiAtZiAxIHwgZ3JlcCAtdiAtLSAtIHwgdGVlIC9kZXYvZmQvMiB8IHhhcmdzIC1yIGtpbGwiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyID09ICcnLCAiYml0YmFrZSBzZXJ2ZXIgcGlkICVzIG5vdCBzdG9wcGVkIiAlIGVycikKKworICAgIGRlZiB0ZXN0X3NlcnZlclN0YXJ0QW5kU3RvcChzZWxmKToKKyAgICAgICAgZnJvbSBibGRjb250cm9sLnNzaGJlY29udHJvbGxlciBpbXBvcnQgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24KKyAgICAgICAgb2JlID0gIHNlbGYuX2dldEJ1aWxkRW52aXJvbm1lbnQoKQorICAgICAgICBiYyA9IHNlbGYuX2dldEJFQ29udHJvbGxlcihvYmUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgc2V0dGluZyBsYXllcnMsIHNraXAgYW55IGxheWVyIGluZm8KKyAgICAgICAgICAgIGJjLnNldExheWVycyhCSVRCQUtFX0xBWUVSUywgUE9LWV9MQVlFUlMpCisgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbiwgIGU6CisgICAgICAgICAgICBwcmludCAiVGVzdCBza2lwcGVkIGR1ZSB0byBjb21tYW5kIG5vdCBpbXBsZW1lbnRlZCB5ZXQiCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAjIFdlIGFyZSBvayB3aXRoIHRoZSBleGNlcHRpb24gYXMgd2UncmUgaGFuZGxpbmcgdGhlIGdpdCBhbHJlYWR5IGV4aXN0cworICAgICAgICBleGNlcHQgQnVpbGRTZXR1cEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBiYy5wb2t5ZGlybmFtZSA9IHRlc3Rfc291cmNlZGlyCisgICAgICAgIGJjLmlzbGF5ZXJzZXQgPSBUcnVlCisKKyAgICAgICAgaG9zdG5hbWUgPSB0ZXN0X2FkZHJlc3Muc3BsaXQoIkAiKVstMV0KKworICAgICAgICAjIHRlc3Qgc3RhcnQgc2VydmVyIGFuZCBzdG9wCisgICAgICAgIGJjLnN0YXJ0QkJTZXJ2ZXIoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKS5jb25uZWN0X2V4KChob3N0bmFtZSwgaW50KGJjLmJlLmJicG9ydCkpKSwgIlNlcnZlciBub3QgYW5zd2VyaW5nIikKKworICAgICAgICBiYy5zdG9wQkJTZXJ2ZXIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKS5jb25uZWN0X2V4KChob3N0bmFtZSwgaW50KGJjLmJlLmJicG9ydCkpKSwgIlNlcnZlciBub3Qgc3RvcHBlZCIpCisKKyAgICAgICAgc2VsZi5fc2VydmVyRm9yY2VTdG9wKGJjKQorCisgICAgZGVmIHRlc3RfZ2V0QkJDb250cm9sbGVyKHNlbGYpOgorICAgICAgICBmcm9tIGJsZGNvbnRyb2wuc3NoYmVjb250cm9sbGVyIGltcG9ydCBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbgorICAgICAgICBvYmUgPSBzZWxmLl9nZXRCdWlsZEVudmlyb25tZW50KCkKKyAgICAgICAgYmMgPSBzZWxmLl9nZXRCRUNvbnRyb2xsZXIob2JlKQorICAgICAgICBsYXllclNldCA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgc2V0dGluZyBsYXllcnMsIHNraXAgYW55IGxheWVyIGluZm8KKyAgICAgICAgICAgIGxheWVyU2V0ID0gYmMuc2V0TGF5ZXJzKEJJVEJBS0VfTEFZRVJTLCBQT0tZX0xBWUVSUykKKyAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXhjZXB0aW9uOgorICAgICAgICAgICAgcHJpbnQgIlRlc3Qgc2tpcHBlZCBkdWUgdG8gY29tbWFuZCBub3QgaW1wbGVtZW50ZWQgeWV0IgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgIyBXZSBhcmUgb2sgd2l0aCB0aGUgZXhjZXB0aW9uIGFzIHdlJ3JlIGhhbmRsaW5nIHRoZSBnaXQgYWxyZWFkeSBleGlzdHMKKyAgICAgICAgZXhjZXB0IEJ1aWxkU2V0dXBFeGNlcHRpb246CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgYmMucG9reWRpcm5hbWUgPSB0ZXN0X3NvdXJjZWRpcgorICAgICAgICBiYy5pc2xheWVyc2V0ID0gVHJ1ZQorCisgICAgICAgIGJiYyA9IGJjLmdldEJCQ29udHJvbGxlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGJiYywgQml0YmFrZUNvbnRyb2xsZXIpKQorICAgICAgICBiYy5zdG9wQkJTZXJ2ZXIoKQorCisgICAgICAgIHNlbGYuX3NlcnZlckZvcmNlU3RvcChiYykKKworY2xhc3MgTG9jYWxob3N0QkVDb250cm9sbGVyVGVzdHMoVGVzdENhc2UsIEJFQ29udHJvbGxlclRlc3RzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzdXBlcihMb2NhbGhvc3RCRUNvbnRyb2xsZXJUZXN0cywgc2VsZikuX19pbml0X18oKmFyZ3MpCisKKworICAgIGRlZiBfZ2V0QnVpbGRFbnZpcm9ubWVudChzZWxmKToKKyAgICAgICAgcmV0dXJuIEJ1aWxkRW52aXJvbm1lbnQub2JqZWN0cy5jcmVhdGUoCisgICAgICAgICAgICAgICAgbG9jayA9IEJ1aWxkRW52aXJvbm1lbnQuTE9DS19GUkVFLAorICAgICAgICAgICAgICAgIGJldHlwZSA9IEJ1aWxkRW52aXJvbm1lbnQuVFlQRV9MT0NBTCwKKyAgICAgICAgICAgICAgICBhZGRyZXNzID0gdGVzdF9hZGRyZXNzLAorICAgICAgICAgICAgICAgIHNvdXJjZWRpciA9IHRlc3Rfc291cmNlZGlyLAorICAgICAgICAgICAgICAgIGJ1aWxkZGlyID0gdGVzdF9idWlsZGRpciApCisKKyAgICBkZWYgX2dldEJFQ29udHJvbGxlcihzZWxmLCBvYmUpOgorICAgICAgICByZXR1cm4gTG9jYWxob3N0QkVDb250cm9sbGVyKG9iZSkKKworY2xhc3MgU1NIQkVDb250cm9sbGVyVGVzdHMoVGVzdENhc2UsIEJFQ29udHJvbGxlclRlc3RzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzdXBlcihTU0hCRUNvbnRyb2xsZXJUZXN0cywgc2VsZikuX19pbml0X18oKmFyZ3MpCisKKyAgICBkZWYgX2dldEJ1aWxkRW52aXJvbm1lbnQoc2VsZik6CisgICAgICAgIHJldHVybiBCdWlsZEVudmlyb25tZW50Lm9iamVjdHMuY3JlYXRlKAorICAgICAgICAgICAgICAgIGxvY2sgPSBCdWlsZEVudmlyb25tZW50LkxPQ0tfRlJFRSwKKyAgICAgICAgICAgICAgICBiZXR5cGUgPSBCdWlsZEVudmlyb25tZW50LlRZUEVfU1NILAorICAgICAgICAgICAgICAgIGFkZHJlc3MgPSB0ZXN0X2FkZHJlc3MsCisgICAgICAgICAgICAgICAgc291cmNlZGlyID0gdGVzdF9zb3VyY2VkaXIsCisgICAgICAgICAgICAgICAgYnVpbGRkaXIgPSB0ZXN0X2J1aWxkZGlyICkKKworICAgIGRlZiBfZ2V0QkVDb250cm9sbGVyKHNlbGYsIG9iZSk6CisgICAgICAgIHJldHVybiBTU0hCRUNvbnRyb2xsZXIob2JlKQorCisgICAgZGVmIHRlc3RfcGF0aEV4aXN0cyhzZWxmKToKKyAgICAgICAgb2JlID0gQnVpbGRFbnZpcm9ubWVudC5vYmplY3RzLmNyZWF0ZShiZXR5cGUgPSBCdWlsZEVudmlyb25tZW50LlRZUEVfU1NILCBhZGRyZXNzPSB0ZXN0X2FkZHJlc3MpCisgICAgICAgIHNiYyA9IFNTSEJFQ29udHJvbGxlcihvYmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzYmMuX3BhdGhleGlzdHMoIi8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzYmMuX3BhdGhleGlzdHMoIi8uZGVhZGJlZWYiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNiYy5fcGF0aGV4aXN0cyhzYmMuX3NoZWxsY21kKCJwd2QiKSkpCisKKworY2xhc3MgUnVuQnVpbGRzQ29tbWFuZFRlc3RzKFRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9iZWNfc2VsZWN0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdHMgdGhhdCB3ZSBjYW4gZmluZCBhbmQgbG9jayBhIGJ1aWxkIGVudmlyb25tZW50CisgICAgICAgICIiIgorCisgICAgICAgIG9iZSA9IEJ1aWxkRW52aXJvbm1lbnQub2JqZWN0cy5jcmVhdGUobG9jayA9IEJ1aWxkRW52aXJvbm1lbnQuTE9DS19GUkVFLCBiZXR5cGUgPSBCdWlsZEVudmlyb25tZW50LlRZUEVfTE9DQUwpCisgICAgICAgIGNvbW1hbmQgPSBDb21tYW5kKCkKKyAgICAgICAgYmVjID0gY29tbWFuZC5fc2VsZWN0QnVpbGRFbnZpcm9ubWVudCgpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgd2Ugc2VsZWN0IHRoZSBvYmplY3Qgd2UndmUganVzdCBidWlsdAorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmVjLmJlLmlkID09IG9iZS5pZCwgIkVudmlyb25tZW50IGlzIG5vdCBwcm9wZXJseSBzZWxlY3RlZCIpCisgICAgICAgICMgd2UgaGF2ZSBhIGxvY2tlZCBlbnZpcm9ubWVudAorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmVjLmJlLmxvY2sgPT0gQnVpbGRFbnZpcm9ubWVudC5MT0NLX0xPQ0ssICJFbnZpcm9ubWVudCBpcyBub3QgbG9ja2VkIikKKyAgICAgICAgIyBubyBtb3JlIHNlbGVjdGlvbnMgcG9zc2libGUgaGVyZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBjb21tYW5kLl9zZWxlY3RCdWlsZEVudmlyb25tZW50KQorCisgICAgZGVmIHRlc3RfYnJfc2VsZWN0KHNlbGYpOgorICAgICAgICBmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFByb2plY3QsIFJlbGVhc2UsIEJpdGJha2VWZXJzaW9uLCBCcmFuY2gKKyAgICAgICAgcCA9IFByb2plY3Qub2JqZWN0cy5jcmVhdGVfcHJvamVjdCgidGVzdCIsIFJlbGVhc2Uub2JqZWN0cy5nZXRfb3JfY3JlYXRlKG5hbWUgPSAiSEVBRCIsIGJpdGJha2VfdmVyc2lvbiA9IEJpdGJha2VWZXJzaW9uLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShuYW1lPSJIRUFEIiwgYnJhbmNoPUJyYW5jaC5vYmplY3RzLmdldF9vcl9jcmVhdGUobmFtZT0iSEVBRCIpKVswXSlbMF0pCisgICAgICAgIG9iciA9IEJ1aWxkUmVxdWVzdC5vYmplY3RzLmNyZWF0ZShzdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfUVVFVUVELCBwcm9qZWN0ID0gcCkKKyAgICAgICAgY29tbWFuZCA9IENvbW1hbmQoKQorICAgICAgICBiciA9IGNvbW1hbmQuX3NlbGVjdEJ1aWxkUmVxdWVzdCgpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgd2Ugc2VsZWN0IHRoZSBvYmplY3Qgd2UndmUganVzdCBidWlsdAorICAgICAgICBzZWxmLmFzc2VydFRydWUob2JyLmlkID09IGJyLmlkLCAiUmVxdWVzdCBpcyBub3QgcHJvcGVybHkgc2VsZWN0ZWQiKQorICAgICAgICAjIHdlIGhhdmUgYSBsb2NrZWQgZW52aXJvbm1lbnQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJyLnN0YXRlID09IEJ1aWxkUmVxdWVzdC5SRVFfSU5QUk9HUkVTUywgIlJlcXVlc3QgaXMgbm90IHVwZGF0ZWQiKQorICAgICAgICAjIG5vIG1vcmUgc2VsZWN0aW9ucyBwb3NzaWJsZSBoZXJlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGNvbW1hbmQuX3NlbGVjdEJ1aWxkUmVxdWVzdCkKKworCitjbGFzcyBVdGlsaXR5VGVzdHMoVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3JlZHVjZV9wYXRoKHNlbGYpOgorICAgICAgICBmcm9tIGJsZGNvbnRyb2wubWFuYWdlbWVudC5jb21tYW5kcy5sb2FkY29uZiBpbXBvcnQgX3JlZHVjZV9jYW5vbl9wYXRoLCBfZ2V0X2lkX2Zvcl9zb3VyY2V0eXBlCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCBfcmVkdWNlX2Nhbm9uX3BhdGgoIi8iKSA9PSAiLyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSggX3JlZHVjZV9jYW5vbl9wYXRoKCIvaG9tZS8uLiIpID09ICIvIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCBfcmVkdWNlX2Nhbm9uX3BhdGgoIi9ob21lLy4uL2FuYSIpID09ICIvYW5hIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCBfcmVkdWNlX2Nhbm9uX3BhdGgoIi9ob21lLy4uL2FuYS8uLiIpID09ICIvIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCBfcmVkdWNlX2Nhbm9uX3BhdGgoIi9ob21lL2FuYS9taWhhaS8uLi9tYXJpYSIpID09ICIvaG9tZS9hbmEvbWFyaWEiKQorCisgICAgZGVmIHRlc3RfZ2V0X2lkX2Zvcl9zb3J1Y2V0eXBlKHNlbGYpOgorICAgICAgICBmcm9tIGJsZGNvbnRyb2wubWFuYWdlbWVudC5jb21tYW5kcy5sb2FkY29uZiBpbXBvcnQgX3JlZHVjZV9jYW5vbl9wYXRoLCBfZ2V0X2lkX2Zvcl9zb3VyY2V0eXBlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSggX2dldF9pZF9mb3Jfc291cmNldHlwZSgibGF5ZXJpbmRleCIpID09IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSggX2dldF9pZF9mb3Jfc291cmNldHlwZSgibG9jYWwiKSA9PSAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIF9nZXRfaWRfZm9yX3NvdXJjZXR5cGUoImltcG9ydGVkIikgPT0gMikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24pOgorICAgICAgICAgICAgX2dldF9pZF9mb3Jfc291cmNldHlwZSgidW5rbm93biIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC92aWV3cy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL3ZpZXdzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZjAwZWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC92aWV3cy5weQpAQCAtMCwwICsxIEBACisjIENyZWF0ZSB5b3VyIHZpZXdzIGhlcmUuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9SRUFETUUgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZkMGZmMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL1JFQURNRQpAQCAtMCwwICsxLDYgQEAKK2NvbnRyaWIgZGlyZWN0b3J5IGZvciB0b2FzdGVyCisKK1RoaXMgZGlyZWN0b3J5IGhvbGRzIGNvZGUgdGhhdCB3b3JrcyB3aXRoIFRvYXN0ZXIsIHdpdGhvdXQgYmVpbmcgYW4gaW50ZWdyYWwgcGFydCBvZiB0aGUgVG9hc3RlciBwcm9qZWN0LgorSXQgaXMgaW50ZW5kZWQgZm9yIHRlc3RpbmcgY29kZSwgdGVzdGluZyBmaXh0dXJlcywgdG9vbHMgZm9yIFRvYXN0ZXIsIGV0Yy4KKworTk9URTogVGhpcyBkaXJlY3RvcnkgaXMgTk9UIGEgUHl0aG9uIG1vZHVsZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyLy5naXRpZ25vcmUgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NTY1MmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTAgQEAKKyoucHljCisqLnN3cAorKi5zd28KKyoua3BmCisqLmVnZy1pbmZvLworLmlkZWEKKy50b3gKK3RtcC8KK2Rpc3QvCisuRFNfU3RvcmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyLy50cmF2aXMueW1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvZGphbmdvLWFnZ3JlZ2F0ZS1pZi1tYXN0ZXIvLnRyYXZpcy55bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkyMGYzOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyLy50cmF2aXMueW1sCkBAIC0wLDAgKzEsNTAgQEAKK2xhbmd1YWdlOiBweXRob24KK3B5dGhvbjoKKyAgLSAiMi43IgorICAtICIzLjQiCitzZXJ2aWNlczoKKyAgLSBteXNxbAorICAtIHBvc3RncmVzcWwKK2VudjoKKyAgLSBESkFOR089MS40IERCPXNxbGl0ZQorICAtIERKQU5HTz0xLjQgREI9bXlzcWwKKyAgLSBESkFOR089MS40IERCPXBvc3RncmVzCisgIC0gREpBTkdPPTEuNSBEQj1zcWxpdGUKKyAgLSBESkFOR089MS41IERCPW15c3FsCisgIC0gREpBTkdPPTEuNSBEQj1wb3N0Z3JlcworICAtIERKQU5HTz0xLjYgREI9c3FsaXRlCisgIC0gREpBTkdPPTEuNiBEQj1teXNxbAorICAtIERKQU5HTz0xLjYgREI9cG9zdGdyZXMKKyAgLSBESkFOR089MS43IERCPXNxbGl0ZQorICAtIERKQU5HTz0xLjcgREI9bXlzcWwKKyAgLSBESkFOR089MS43IERCPXBvc3RncmVzCisKK21hdHJpeDoKKyAgZXhjbHVkZToKKyAgICAtIHB5dGhvbjogIjMuNCIKKyAgICAgIGVudjogREpBTkdPPTEuNCBEQj1zcWxpdGUKKyAgICAtIHB5dGhvbjogIjMuNCIKKyAgICAgIGVudjogREpBTkdPPTEuNCBEQj1teXNxbAorICAgIC0gcHl0aG9uOiAiMy40IgorICAgICAgZW52OiBESkFOR089MS40IERCPXBvc3RncmVzCisgICAgLSBweXRob246ICIzLjQiCisgICAgICBlbnY6IERKQU5HTz0xLjUgREI9c3FsaXRlCisgICAgLSBweXRob246ICIzLjQiCisgICAgICBlbnY6IERKQU5HTz0xLjUgREI9bXlzcWwKKyAgICAtIHB5dGhvbjogIjMuNCIKKyAgICAgIGVudjogREpBTkdPPTEuNSBEQj1wb3N0Z3JlcworICAgIC0gcHl0aG9uOiAiMy40IgorICAgICAgZW52OiBESkFOR089MS42IERCPW15c3FsCisgICAgLSBweXRob246ICIzLjQiCisgICAgICBlbnY6IERKQU5HTz0xLjcgREI9bXlzcWwKKworYmVmb3JlX3NjcmlwdDoKKyAgLSBteXNxbCAtZSAnY3JlYXRlIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycKKyAgLSBwc3FsIC1jICdjcmVhdGUgZGF0YWJhc2UgYWdncmVnYXRpb247JyAtVSBwb3N0Z3JlcworaW5zdGFsbDoKKyAgLSBwaXAgaW5zdGFsbCBzaXgKKyAgLSBpZiBbICIkREIiID09ICJteXNxbCIgXTsgdGhlbiBwaXAgaW5zdGFsbCBteXNxbC1weXRob247IGZpCisgIC0gaWYgWyAiJERCIiA9PSAicG9zdGdyZXMiIF07IHRoZW4gcGlwIGluc3RhbGwgcHN5Y29wZzI7IGZpCisgIC0gcGlwIGluc3RhbGwgLXEgRGphbmdvPT0kREpBTkdPIC0tdXNlLW1pcnJvcnMKK3NjcmlwdDoKKyAgLSAuL3J1bnRlc3RzLnB5IC0tc2V0dGluZ3M9dGVzdHMudGVzdF8kREIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL0xJQ0VOU0UgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiN2MzYjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci9MSUNFTlNFCkBAIC0wLDAgKzEsMjEgQEAKK1RoZSBNSVQgTGljZW5zZQorCitDb3B5cmlnaHQgKGMpIDIwMTIgSGVucmlxdWUgQmFzdG9zCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvZGphbmdvLWFnZ3JlZ2F0ZS1pZi1tYXN0ZXIvUkVBRE1FLnJzdCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL1JFQURNRS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM5ZDRkYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL1JFQURNRS5yc3QKQEAgLTAsMCArMSwxNTYgQEAKK0RqYW5nbyBBZ2dyZWdhdGUgSWY6IENvbmRpdGlvbiBhZ2dyZWdhdGVzIGZvciBEamFuZ28KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gaW1hZ2U6OiBodHRwczovL3RyYXZpcy1jaS5vcmcvaGVucmlxdWViYXN0b3MvZGphbmdvLWFnZ3JlZ2F0ZS1pZi5wbmc/YnJhbmNoPW1hc3RlcgorICAgIDp0YXJnZXQ6IGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9oZW5yaXF1ZWJhc3Rvcy9kamFuZ28tYWdncmVnYXRlLWlmCisgICAgOmFsdDogVGVzdCBTdGF0dXMKKworLi4gaW1hZ2U6OiBodHRwczovL2xhbmRzY2FwZS5pby9naXRodWIvaGVucmlxdWViYXN0b3MvZGphbmdvLWFnZ3JlZ2F0ZS1pZi9tYXN0ZXIvbGFuZHNjYXBlLnBuZworICAgIDp0YXJnZXQ6IGh0dHBzOi8vbGFuZHNjYXBlLmlvL2dpdGh1Yi9oZW5yaXF1ZWJhc3Rvcy9kamFuZ28tYWdncmVnYXRlLWlmL21hc3RlcgorICAgIDphbHQ6IENvZGUgSGVsdGgKKworLi4gaW1hZ2U6OiBodHRwczovL3B5cGlwLmluL3YvZGphbmdvLWFnZ3JlZ2F0ZS1pZi9iYWRnZS5wbmcKKyAgICA6dGFyZ2V0OiBodHRwczovL2NyYXRlLmlvL3BhY2thZ2VzL2RqYW5nby1hZ2dyZWdhdGUtaWYvCisgICAgOmFsdDogTGF0ZXN0IFB5UEkgdmVyc2lvbgorCisuLiBpbWFnZTo6IGh0dHBzOi8vcHlwaXAuaW4vZC9kamFuZ28tYWdncmVnYXRlLWlmL2JhZGdlLnBuZworICAgIDp0YXJnZXQ6IGh0dHBzOi8vY3JhdGUuaW8vcGFja2FnZXMvZGphbmdvLWFnZ3JlZ2F0ZS1pZi8KKyAgICA6YWx0OiBOdW1iZXIgb2YgUHlQSSBkb3dubG9hZHMKKworKkFnZ3JlZ2F0ZS1pZiogYWRkcyBjb25kaXRpb25hbCBhZ2dyZWdhdGVzIHRvIERqYW5nby4KKworQ29uZGl0aW9uYWwgYWdncmVnYXRlcyBjYW4gaGVscCB5b3UgcmVkdWNlIHRoZSBhbW1vdW50IG9mIHF1ZXJpZXMgdG8gb2J0YWluCithZ2dyZWdhdGVkIGluZm9ybWF0aW9uLCBsaWtlIHN0YXRpc3RpY3MgZm9yIGV4YW1wbGUuCisKK0ltYWdpbmUgeW91IGhhdmUgYSBtb2RlbCBgYE9mZmVyYGAgbGlrZSB0aGlzIG9uZToKKworLi4gY29kZS1ibG9jazo6IHB5dGhvbgorCisgICAgY2xhc3MgT2ZmZXIobW9kZWxzLk1vZGVsKToKKyAgICAgICAgc3BvbnNvciA9IG1vZGVscy5Gb3JlaWduS2V5KFVzZXIpCisgICAgICAgIHByaWNlID0gbW9kZWxzLkRlY2ltYWxGaWVsZChtYXhfZGlnaXRzPTksIGRlY2ltYWxfcGxhY2VzPTIpCisgICAgICAgIHN0YXR1cyA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0zMCkKKyAgICAgICAgZXhwaXJlX2F0ID0gbW9kZWxzLkRhdGVGaWVsZChudWxsPVRydWUsIGJsYW5rPVRydWUpCisgICAgICAgIGNyZWF0ZWRfYXQgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChhdXRvX25vd19hZGQ9VHJ1ZSkKKyAgICAgICAgdXBkYXRlZF9hdCA9IG1vZGVscy5EYXRlVGltZUZpZWxkKGF1dG9fbm93PVRydWUpCisKKyAgICAgICAgT1BFTiA9ICJPUEVOIgorICAgICAgICBSRVZPS0VEID0gIlJFVk9LRUQiCisgICAgICAgIFBBSUQgPSAiUEFJRCIKKworTGV0J3Mgc2F5IHlvdSB3YW50IHRvIGtub3c6CisKKyMuIEhvdyBtYW55IG9mZmVycyBleGlzdHMgaW4gdG90YWw7CisjLiBIb3cgbWFueSBvZiB0aGVtIGFyZSBPUEVOLCBSRVZPS0VEIG9yIFBBSUQ7CisjLiBIb3cgbXVjaCBtb25leSB3YXMgb2ZmZXJlZCBpbiB0b3RhbDsKKyMuIEhvdyBtdWNoIG1vbmV5IGlzIGluIE9QRU4sIFJFVk9LRUQgYW5kIFBBSUQgb2ZmZXJzOworCitUbyBnZXQgdGhlc2UgaW5mb3JtYXRpb25zLCB5b3UgY291bGQgcXVlcnk6CisKKy4uIGNvZGUtYmxvY2s6OiBweXRob24KKworICAgIGZyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgQ291bnQsIFN1bQorCisgICAgT2ZmZXIub2JqZWN0cy5jb3VudCgpCisgICAgT2ZmZXIub2JqZWN0cy5maWx0ZXIoc3RhdHVzPU9mZmVyLk9QRU4pLmFnZ3JlZ2F0ZShDb3VudCgncGsnKSkKKyAgICBPZmZlci5vYmplY3RzLmZpbHRlcihzdGF0dXM9T2ZmZXIuUkVWT0tFRCkuYWdncmVnYXRlKENvdW50KCdwaycpKQorICAgIE9mZmVyLm9iamVjdHMuZmlsdGVyKHN0YXR1cz1PZmZlci5QQUlEKS5hZ2dyZWdhdGUoQ291bnQoJ3BrJykpCisgICAgT2ZmZXIub2JqZWN0cy5hZ2dyZWdhdGUoU3VtKCdwcmljZScpKQorICAgIE9mZmVyLm9iamVjdHMuZmlsdGVyKHN0YXR1cz1PZmZlci5PUEVOKS5hZ2dyZWdhdGUoU3VtKCdwcmljZScpKQorICAgIE9mZmVyLm9iamVjdHMuZmlsdGVyKHN0YXR1cz1PZmZlci5SRVZPS0VEKS5hZ2dyZWdhdGUoU3VtKCdwcmljZScpKQorICAgIE9mZmVyLm9iamVjdHMuZmlsdGVyKHN0YXR1cz1PZmZlci5QQUlEKS5hZ2dyZWdhdGUoU3VtKCdwcmljZScpKQorCitJbiB0aGlzIGNhc2UsICoqOCBxdWVyaWVzKiogd2VyZSBuZWVkZWQgdG8gcmV0cmlldmUgdGhlIGRlc2lyZWQgaW5mb3JtYXRpb24uCisKK1dpdGggY29uZGl0aW9uYWwgYWdncmVnYXRlcyB5b3UgY2FuIGdldCBpdCBhbGwgd2l0aCBvbmx5ICoqMSBxdWVyeSoqOgorCisuLiBjb2RlLWJsb2NrOjogcHl0aG9uCisKKyAgICBmcm9tIGRqYW5nby5kYi5tb2RlbHMgaW1wb3J0IFEKKyAgICBmcm9tIGFnZ3JlZ2F0ZV9pZiBpbXBvcnQgQ291bnQsIFN1bQorCisgICAgT2ZmZXIub2JqZWN0cy5hZ2dyZWdhdGUoCisgICAgICAgIHBrX19jb3VudD1Db3VudCgncGsnKSwKKyAgICAgICAgcGtfX29wZW5fX2NvdW50PUNvdW50KCdwaycsIG9ubHk9UShzdGF0dXM9T2ZmZXIuT1BFTikpLAorICAgICAgICBwa19fcmV2b2tlZF9fY291bnQ9Q291bnQoJ3BrJywgb25seT1RKHN0YXR1cz1PZmZlci5SRVZPS0VEKSksCisgICAgICAgIHBrX19wYWlkX19jb3VudD1Db3VudCgncGsnLCBvbmx5PVEoc3RhdHVzPU9mZmVyLlBBSUQpKSwKKyAgICAgICAgcGtfX3N1bT1TdW0oJ3ByaWNlJyksCisgICAgICAgIHBrX19vcGVuX19zdW09U3VtKCdwcmljZScsIG9ubHk9UShzdGF0dXM9T2ZmZXIuT1BFTikpLAorICAgICAgICBwa19fcmV2b2tlZF9fc3VtPVN1bSgncHJpY2UnKSwgb25seT1RKHN0YXR1cz1PZmZlci5SRVZPS0VEKSksCisgICAgICAgIHBrX19wYWlkX19zdW09U3VtKCdwcmljZScpLCBvbmx5PVEoc3RhdHVzPU9mZmVyLlBBSUQpKQorICAgICkKKworSW5zdGFsbGF0aW9uCistLS0tLS0tLS0tLS0KKworKkFnZ3JlZ2F0ZS1pZiogd29ya3Mgd2l0aCBEamFuZ28gMS40LCAxLjUsIDEuNiBhbmQgMS43LgorCitUbyBpbnN0YWxsIGl0LCBzaW1wbHk6CisKKy4uIGNvZGUtYmxvY2s6OiBiYXNoCisKKyAgICAkIHBpcCBpbnN0YWxsIGRqYW5nby1hZ2dyZWdhdGUtaWYKKworSW5zcGlyYXRpb24KKy0tLS0tLS0tLS0tCisKK1RoZXJlIGlzIGEgNSB5ZWFycyBvbGQgYHRpY2tldCAxMTMwNWBfIHRoYXQgd2lsbCAoKmhvcGVmdWxseSopIGltcGxlbWVudCB0aGlzIGZlYXR1cmUgaW50bworRGphbmdvIDEuOC4KKworVXNpbmcgRGphbmdvIDEuNiwgSSBzdGlsbCB3YW50ZWQgdG8gYXZvaWQgY3JlYXRpbmcgY3VzdG9tIHF1ZXJpZXMgZm9yIHZlcnkgc2ltcGxlCitjb25kaXRpb25hbCBhZ2dyZWdhdGlvbnMuIFNvIEkndmUgY2hlcnJ5IHBpY2tlZCB0aG9zZSBpZGVhcyBhbmQgb3RoZXJzIGZyb20gdGhlCitpbnRlcm5ldCBhbmQgYnVpbHQgdGhpcyBsaWJyYXJ5LgorCitUaGlzIGxpYnJhcnkgdXNlcyB0aGUgc2FtZSBBUEkgYW5kIHRlc3RzIHByb3Bvc2VkIG9uIGB0aWNrZXQgMTEzMDVgXywgc28gd2hlbiB0aGUKK25ldyBmZWF0dXJlIGlzIGF2YWlsYWJsZSB5b3UgY2FuIGVhc2lseSByZXBsYWNlIGBgZGphbmdvLWFnZ3JlZ2F0ZS1pZmBgLgorCitMaW1pdGF0aW9ucworLS0tLS0tLS0tLS0KKworQ29uZGl0aW9ucyBpbnZvbHZpbmcgam9pbnMgd2l0aCBhbGlhc2VzIGFyZSBub3Qgc3VwcG9ydGVkIHlldC4gSWYgeW91IHdhbnQgdG8KK2hlbHAgYWRkaW5nIHRoaXMgZmVhdHVyZSwgeW91J3JlIHdlbGNvbWUgdG8gY2hlY2sgdGhlIGBmaXJzdCBpc3N1ZWBfLgorCitDb250cmlidXRvcnMKKy0tLS0tLS0tLS0tLQorCisqIGBIZW5yaXF1ZSBCYXN0b3MgPGh0dHA6Ly9naXRodWIuY29tL2hlbnJpcXVlYmFzdG9zPmBfCisqIGBJdXJpIGRlIFNpbHZpbyA8aHR0cHM6Ly9naXRodWIuY29tL2l1cmlzaWx2aW8+YF8KKyogYEhhbXB1cyBTdGplcm5oYXYgPGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFtcD5gXworKiBgQnJhZGxleSBNYXJ0c2JlcmdlciA8aHR0cHM6Ly9naXRodWIuY29tL21hcnRzYmVyZ2VyPmBfCisqIGBNYXJrdXMgQmVydGhlYXUgPGh0dHBzOi8vZ2l0aHViLmNvbS9tYmVydGhlYXU+YF8KKyogYGVuZDAgPGh0dHBzOi8vZ2l0aHViLmNvbS9lbmQwPmBfCisqIGBTY290dCBTZXh0b24gPGh0dHBzOi8vZ2l0aHViLmNvbS9zY290dHNleHRvbj5gXworKiBgTWF1bGVyIDxodHRwczovL2dpdGh1Yi5jb20vbWF1bGVyPmBfCisqIGB0cmJzIDxodHRwczovL2dpdGh1Yi5jb20vdHJicz5gXworCitDaGFuZ2Vsb2cKKy0tLS0tLS0tLQorCiswLjUKKyAgICAtIFN1cHBvcnQgZm9yIERqYW5nbyAxLjcKKworMC40CisgICAgLSBVc2UgdG94IHRvIHJ1biB0ZXN0cy4KKyAgICAtIEFkZCBzdXBwb3J0IGZvciBEamFuZ28gMS42LgorICAgIC0gQWRkIHN1cHBvcnQgZm9yIFB5dGhvbjMuCisgICAgLSBUaGUgYGBvbmx5YGAgcGFyYW1ldGVyIG5vdyBmcmVlbHkgc3VwcG9ydHMgam9pbnMgaW5kZXBlbmRlbnQgb2YgdGhlIG1haW4gcXVlcnkuCisgICAgLSBBZGRzIHN1cHBvcnQgZm9yIGFsaWFzIHJlbGFiZWxpbmcgcGVybWl0dGluZyBleGNsdWRlcyBhbmQgdXBkYXRlcyB3aXRoIGFnZ3JlZ2F0ZXMgZmlsdGVyZWQgb24gcmVtb3RlIGZvcmVpZ24ga2V5IHJlbGF0aW9ucy4KKworMC4zLjEKKyAgICAtIEZpeCBxdW90YXRpb24gZXNjYXBpbmcuCisgICAgLSBGaXggYm9vbGVhbiBjYXN0cyBvbiBQb3N0Z3Jlcy4KKworMC4yCisgICAgLSBGaXggcG9zdGdyZXMgaXNzdWUgd2l0aCBMSUtFIGNvbmRpdGlvbnMuCisKKzAuMQorICAgIC0gSW5pdGlhbCByZWxlYXNlLgorCisKK0xpY2Vuc2UKKz09PT09PT0KKworVGhlIE1JVCBMaWNlbnNlLgorCisuLiBfdGlja2V0IDExMzA1OiBodHRwczovL2NvZGUuZGphbmdvcHJvamVjdC5jb20vdGlja2V0LzExMzA1CisuLiBfZmlyc3QgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9oZW5yaXF1ZWJhc3Rvcy9kamFuZ28tYWdncmVnYXRlLWlmL2lzc3Vlcy8xCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci9hZ2dyZWdhdGVfaWYucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci9hZ2dyZWdhdGVfaWYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVmMzQyNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL2FnZ3JlZ2F0ZV9pZi5weQpAQCAtMCwwICsxLDE2NCBAQAorIyBjb2Rpbmc6IHV0Zi04CisnJycKK0ltcGxlbWVudHMgY29uZGl0aW9uYWwgYWdncmVnYXRlcy4KKworVGhpcyBjb2RlIHdhcyBiYXNlZCBvbiB0aGUgd29yayBvZiBvdGhlcnMgZm91bmQgb24gdGhlIGludGVybmV0OgorCisxLiBodHRwOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDEwMTExNTE3MDgwNC9odHRwOi8vd3d3LnZvdGVydW5pdmVyc2UuY29tL01lbWJlcnMvamxhbnR6L2Jsb2cvY29uZGl0aW9uYWwtYWdncmVnYXRlcy1pbi1kamFuZ28KKzIuIGh0dHBzOi8vY29kZS5kamFuZ29wcm9qZWN0LmNvbS90aWNrZXQvMTEzMDUKKzMuIGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZm9ydW0vP2Zyb21ncm91cHM9IyF0b3BpYy9kamFuZ28tdXNlcnMvY2p6bG9UVXdtUzAKKzQuIGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZm9ydW0vP2Zyb21ncm91cHM9IyF0b3BpYy9kamFuZ28tdXNlcnMvdlZwck1wc0FuUG8KKycnJworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCitmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgc2l4CitpbXBvcnQgZGphbmdvCitmcm9tIGRqYW5nby5kYi5tb2RlbHMuYWdncmVnYXRlcyBpbXBvcnQgQWdncmVnYXRlIGFzIERqYW5nb0FnZ3JlZ2F0ZQorZnJvbSBkamFuZ28uZGIubW9kZWxzLnNxbC5hZ2dyZWdhdGVzIGltcG9ydCBBZ2dyZWdhdGUgYXMgRGphbmdvU3FsQWdncmVnYXRlCisKKworVkVSU0lPTiA9IGRqYW5nby5WRVJTSU9OWzoyXQorCisKK2NsYXNzIFNxbEFnZ3JlZ2F0ZShEamFuZ29TcWxBZ2dyZWdhdGUpOgorICAgIGNvbmRpdGlvbmFsX3RlbXBsYXRlID0gJyUoZnVuY3Rpb24pcyhDQVNFIFdIRU4gJShjb25kaXRpb24pcyBUSEVOICUoZmllbGQpcyBFTFNFIG51bGwgRU5EKScKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb2wsIHNvdXJjZT1Ob25lLCBpc19zdW1tYXJ5PUZhbHNlLCBjb25kaXRpb249Tm9uZSwgKipleHRyYSk6CisgICAgICAgIHN1cGVyKFNxbEFnZ3JlZ2F0ZSwgc2VsZikuX19pbml0X18oY29sLCBzb3VyY2UsIGlzX3N1bW1hcnksICoqZXh0cmEpCisgICAgICAgIHNlbGYuY29uZGl0aW9uID0gY29uZGl0aW9uCisKKyAgICBkZWYgcmVsYWJlbF9hbGlhc2VzKHNlbGYsIGNoYW5nZV9tYXApOgorICAgICAgICBpZiBWRVJTSU9OIDwgKDEsIDcpOgorICAgICAgICAgICAgc3VwZXIoU3FsQWdncmVnYXRlLCBzZWxmKS5yZWxhYmVsX2FsaWFzZXMoY2hhbmdlX21hcCkKKyAgICAgICAgaWYgc2VsZi5oYXNfY29uZGl0aW9uOgorICAgICAgICAgICAgY29uZGl0aW9uX2NoYW5nZV9tYXAgPSBkaWN0KChrLCB2KSBmb3IgaywgdiBpbiBcCisgICAgICAgICAgICAgICAgY2hhbmdlX21hcC5pdGVtcygpIGlmIGsgaW4gc2VsZi5jb25kaXRpb24ucXVlcnkuYWxpYXNfbWFwCisgICAgICAgICAgICApCisgICAgICAgICAgICBzZWxmLmNvbmRpdGlvbi5xdWVyeS5jaGFuZ2VfYWxpYXNlcyhjb25kaXRpb25fY2hhbmdlX21hcCkKKworICAgIGRlZiByZWxhYmVsZWRfY2xvbmUoc2VsZiwgY2hhbmdlX21hcCk6CisgICAgICAgIHNlbGYucmVsYWJlbF9hbGlhc2VzKGNoYW5nZV9tYXApCisgICAgICAgIHJldHVybiBzdXBlcihTcWxBZ2dyZWdhdGUsIHNlbGYpLnJlbGFiZWxlZF9jbG9uZShjaGFuZ2VfbWFwKQorCisgICAgZGVmIGFzX3NxbChzZWxmLCBxbiwgY29ubmVjdGlvbik6CisgICAgICAgIGlmIHNlbGYuaGFzX2NvbmRpdGlvbjoKKyAgICAgICAgICAgIHNlbGYuc3FsX3RlbXBsYXRlID0gc2VsZi5jb25kaXRpb25hbF90ZW1wbGF0ZQorICAgICAgICAgICAgc2VsZi5leHRyYVsnY29uZGl0aW9uJ10gPSBzZWxmLl9jb25kaXRpb25fYXNfc3FsKHFuLCBjb25uZWN0aW9uKQorCisgICAgICAgIHJldHVybiBzdXBlcihTcWxBZ2dyZWdhdGUsIHNlbGYpLmFzX3NxbChxbiwgY29ubmVjdGlvbikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBoYXNfY29uZGl0aW9uKHNlbGYpOgorICAgICAgICAjIFdhcm5pbmc6IGJvb2woUXVlcnlTZXQpIHdpbGwgaGl0IHRoZSBkYXRhYmFzZQorICAgICAgICByZXR1cm4gc2VsZi5jb25kaXRpb24gaXMgbm90IE5vbmUKKworICAgIGRlZiBfY29uZGl0aW9uX2FzX3NxbChzZWxmLCBxbiwgY29ubmVjdGlvbik6CisgICAgICAgICcnJworICAgICAgICBSZXR1cm4gc3FsIGZvciBjb25kaXRpb24uCisgICAgICAgICcnJworICAgICAgICBkZWYgZXNjYXBlKHZhbHVlKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJvb2wpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gc3RyKGludCh2YWx1ZSkpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzaXguc3RyaW5nX3R5cGVzKToKKyAgICAgICAgICAgICAgICAjIEVzY2FwZSBwYXJhbXMgdXNlZCB3aXRoIExJS0UKKyAgICAgICAgICAgICAgICBpZiAnJScgaW4gdmFsdWU6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgnJScsICclJScpCisgICAgICAgICAgICAgICAgIyBFc2NhcGUgc2luZ2xlIHF1b3RlcworICAgICAgICAgICAgICAgIGlmICInIiBpbiB2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCInIiwgIicnIikKKyAgICAgICAgICAgICAgICAjIEFkZCBzaW5nbGUgcXVvdGUgdG8gdGV4dCB2YWx1ZXMKKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICInIiArIHZhbHVlICsgIiciCisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKworICAgICAgICBzcWwsIHBhcmFtID0gc2VsZi5jb25kaXRpb24ucXVlcnkud2hlcmUuYXNfc3FsKHFuLCBjb25uZWN0aW9uKQorICAgICAgICBwYXJhbSA9IG1hcChlc2NhcGUsIHBhcmFtKQorCisgICAgICAgIHJldHVybiBzcWwgJSB0dXBsZShwYXJhbSkKKworCitjbGFzcyBTcWxTdW0oU3FsQWdncmVnYXRlKToKKyAgICBzcWxfZnVuY3Rpb24gPSAnU1VNJworCisKK2NsYXNzIFNxbENvdW50KFNxbEFnZ3JlZ2F0ZSk6CisgICAgaXNfb3JkaW5hbCA9IFRydWUKKyAgICBzcWxfZnVuY3Rpb24gPSAnQ09VTlQnCisgICAgc3FsX3RlbXBsYXRlID0gJyUoZnVuY3Rpb24pcyglKGRpc3RpbmN0KXMlKGZpZWxkKXMpJworICAgIGNvbmRpdGlvbmFsX3RlbXBsYXRlID0gJyUoZnVuY3Rpb24pcyglKGRpc3RpbmN0KXNDQVNFIFdIRU4gJShjb25kaXRpb24pcyBUSEVOICUoZmllbGQpcyBFTFNFIG51bGwgRU5EKScKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb2wsIGRpc3RpbmN0PUZhbHNlLCAqKmV4dHJhKToKKyAgICAgICAgc3VwZXIoU3FsQ291bnQsIHNlbGYpLl9faW5pdF9fKGNvbCwgZGlzdGluY3Q9ZGlzdGluY3QgYW5kICdESVNUSU5DVCAnIG9yICcnLCAqKmV4dHJhKQorCisKK2NsYXNzIFNxbEF2ZyhTcWxBZ2dyZWdhdGUpOgorICAgIGlzX2NvbXB1dGVkID0gVHJ1ZQorICAgIHNxbF9mdW5jdGlvbiA9ICdBVkcnCisKKworY2xhc3MgU3FsTWF4KFNxbEFnZ3JlZ2F0ZSk6CisgICAgc3FsX2Z1bmN0aW9uID0gJ01BWCcKKworCitjbGFzcyBTcWxNaW4oU3FsQWdncmVnYXRlKToKKyAgICBzcWxfZnVuY3Rpb24gPSAnTUlOJworCisKK2NsYXNzIEFnZ3JlZ2F0ZShEamFuZ29BZ2dyZWdhdGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29rdXAsIG9ubHk9Tm9uZSwgKipleHRyYSk6CisgICAgICAgIHN1cGVyKEFnZ3JlZ2F0ZSwgc2VsZikuX19pbml0X18obG9va3VwLCAqKmV4dHJhKQorICAgICAgICBzZWxmLm9ubHkgPSBvbmx5CisgICAgICAgIHNlbGYuY29uZGl0aW9uID0gTm9uZQorCisgICAgZGVmIF9nZXRfZmllbGRzX2Zyb21fUShzZWxmLCBxKToKKyAgICAgICAgZmllbGRzID0gW10KKyAgICAgICAgZm9yIGNoaWxkIGluIHEuY2hpbGRyZW46CisgICAgICAgICAgICBpZiBoYXNhdHRyKGNoaWxkLCAnY2hpbGRyZW4nKToKKyAgICAgICAgICAgICAgICBmaWVsZHMuZXh0ZW5kKHNlbGYuX2dldF9maWVsZHNfZnJvbV9RKGNoaWxkKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmllbGRzLmFwcGVuZChjaGlsZCkKKyAgICAgICAgcmV0dXJuIGZpZWxkcworCisgICAgZGVmIGFkZF90b19xdWVyeShzZWxmLCBxdWVyeSwgYWxpYXMsIGNvbCwgc291cmNlLCBpc19zdW1tYXJ5KToKKyAgICAgICAgaWYgc2VsZi5vbmx5OgorICAgICAgICAgICAgc2VsZi5jb25kaXRpb24gPSBxdWVyeS5tb2RlbC5fZGVmYXVsdF9tYW5hZ2VyLmZpbHRlcihzZWxmLm9ubHkpCisgICAgICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5fZ2V0X2ZpZWxkc19mcm9tX1Eoc2VsZi5vbmx5KToKKyAgICAgICAgICAgICAgICBmaWVsZF9saXN0ID0gY2hpbGRbMF0uc3BsaXQoJ19fJykKKyAgICAgICAgICAgICAgICAjIFBvcCBvZmYgdGhlIGxhc3QgZmllbGQgaWYgaXQncyBhIHF1ZXJ5IHRlcm0gKCdndGUnLCAnY29udGFpbnMnLCAnaXNudWxsJywgZXRjLikKKyAgICAgICAgICAgICAgICBpZiBmaWVsZF9saXN0Wy0xXSBpbiBxdWVyeS5xdWVyeV90ZXJtczoKKyAgICAgICAgICAgICAgICAgICAgZmllbGRfbGlzdC5wb3AoKQorICAgICAgICAgICAgICAgICMgc2V0dXBfam9pbnMgaGF2ZSBkaWZmZXJlbnQgcmV0dXJucyBpbiBEamFuZ28gMS41IGFuZCAxLjYsIGJ1dCB0aGUgb3JkZXIgb2Ygd2hhdCB3ZSBuZWVkIHJlbWFpbnMuCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcXVlcnkuc2V0dXBfam9pbnMoZmllbGRfbGlzdCwgcXVlcnkubW9kZWwuX21ldGEsIHF1ZXJ5LmdldF9pbml0aWFsX2FsaWFzKCksIE5vbmUpCisgICAgICAgICAgICAgICAgam9pbl9saXN0ID0gcmVzdWx0WzNdCisKKyAgICAgICAgICAgICAgICBmbmFtZSA9ICdwcm9tb3RlX2FsaWFzX2NoYWluJyBpZiBWRVJTSU9OIDwgKDEsIDUpIGVsc2UgJ3Byb21vdGVfam9pbnMnCisgICAgICAgICAgICAgICAgYXJncyA9IChqb2luX2xpc3QsIFRydWUpIGlmIFZFUlNJT04gPCAoMSwgNykgZWxzZSAoam9pbl9saXN0LCkKKworICAgICAgICAgICAgICAgIHByb21vdGUgPSBnZXRhdHRyKHF1ZXJ5LCBmbmFtZSkKKyAgICAgICAgICAgICAgICBwcm9tb3RlKCphcmdzKQorCisgICAgICAgIGFnZ3JlZ2F0ZSA9IHNlbGYuc3FsX2tsYXNzKGNvbCwgc291cmNlPXNvdXJjZSwgaXNfc3VtbWFyeT1pc19zdW1tYXJ5LCBjb25kaXRpb249c2VsZi5jb25kaXRpb24sICoqc2VsZi5leHRyYSkKKyAgICAgICAgcXVlcnkuYWdncmVnYXRlc1thbGlhc10gPSBhZ2dyZWdhdGUKKworCitjbGFzcyBTdW0oQWdncmVnYXRlKToKKyAgICBuYW1lID0gJ1N1bScKKyAgICBzcWxfa2xhc3MgPSBTcWxTdW0KKworCitjbGFzcyBDb3VudChBZ2dyZWdhdGUpOgorICAgIG5hbWUgPSAnQ291bnQnCisgICAgc3FsX2tsYXNzID0gU3FsQ291bnQKKworCitjbGFzcyBBdmcoQWdncmVnYXRlKToKKyAgICBuYW1lID0gJ0F2ZycKKyAgICBzcWxfa2xhc3MgPSBTcWxBdmcKKworCitjbGFzcyBNYXgoQWdncmVnYXRlKToKKyAgICBuYW1lID0gJ01heCcKKyAgICBzcWxfa2xhc3MgPSBTcWxNYXgKKworCitjbGFzcyBNaW4oQWdncmVnYXRlKToKKyAgICBuYW1lID0gJ01pbicKKyAgICBzcWxfa2xhc3MgPSBTcWxNaW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL3J1bnRlc3RzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvZGphbmdvLWFnZ3JlZ2F0ZS1pZi1tYXN0ZXIvcnVudGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmU1NTg2NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL3J1bnRlc3RzLnB5CkBAIC0wLDAgKzEsNDggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2Zyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlcgorCisKK2RlZiBwYXJzZV9hcmdzKCk6CisgICAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKCkKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLXMnLCAnLS1zZXR0aW5ncycsIGhlbHA9J0RlZmluZSBzZXR0aW5ncy4nKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctdCcsICctLXVuaXR0ZXN0JywgaGVscD0nRGVmaW5lIHdoaWNoIHRlc3QgdG8gcnVuLiBEZWZhdWx0IGFsbC4nKQorICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBpZiBub3Qgb3B0aW9ucy5zZXR0aW5nczoKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaWYgbm90IG9wdGlvbnMudW5pdHRlc3Q6CisgICAgICAgIG9wdGlvbnMudW5pdHRlc3QgPSBbJ2FnZ3JlZ2F0aW9uJ10KKworICAgIHJldHVybiBvcHRpb25zCisKKworZGVmIGdldF9ydW5uZXIoc2V0dGluZ3NfbW9kdWxlKToKKyAgICAnJycKKyAgICBBc2tzIERqYW5nbyBmb3IgdGhlIFRlc3RSdW5uZXIgZGVmaW5lZCBpbiBzZXR0aW5ncyBvciB0aGUgZGVmYXVsdCBvbmUuCisgICAgJycnCisgICAgb3MuZW52aXJvblsnREpBTkdPX1NFVFRJTkdTX01PRFVMRSddID0gc2V0dGluZ3NfbW9kdWxlCisKKyAgICBpbXBvcnQgZGphbmdvCisgICAgZnJvbSBkamFuZ28udGVzdC51dGlscyBpbXBvcnQgZ2V0X3J1bm5lcgorICAgIGZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCisKKyAgICBpZiBoYXNhdHRyKGRqYW5nbywgJ3NldHVwJyk6CisgICAgICAgIGRqYW5nby5zZXR1cCgpCisKKyAgICByZXR1cm4gZ2V0X3J1bm5lcihzZXR0aW5ncykKKworCitkZWYgcnVudGVzdHMoKToKKyAgICBvcHRpb25zID0gcGFyc2VfYXJncygpCisgICAgVGVzdFJ1bm5lciA9IGdldF9ydW5uZXIob3B0aW9ucy5zZXR0aW5ncykKKyAgICBydW5uZXIgPSBUZXN0UnVubmVyKHZlcmJvc2l0eT0xLCBpbnRlcmFjdGl2ZT1UcnVlLCBmYWlsZmFzdD1GYWxzZSkKKyAgICBzeXMuZXhpdChydW5uZXIucnVuX3Rlc3RzKFtdKSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHJ1bnRlc3RzKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL3NldHVwLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvZGphbmdvLWFnZ3JlZ2F0ZS1pZi1tYXN0ZXIvc2V0dXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVkM2RiMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL3NldHVwLnB5CkBAIC0wLDAgKzEsMzMgQEAKKyMgY29kaW5nOiB1dGYtOAorZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cAoraW1wb3J0IG9zCisKKworc2V0dXAobmFtZT0nZGphbmdvLWFnZ3JlZ2F0ZS1pZicsCisgICAgICB2ZXJzaW9uPScwLjUnLAorICAgICAgZGVzY3JpcHRpb249J0NvbmRpdGlvbmFsIGFnZ3JlZ2F0ZXMgZm9yIERqYW5nbywganVzdCBsaWtlIHRoZSBmYW1vdXMgU3VtSWYgaW4gRXhjZWwuJywKKyAgICAgIGxvbmdfZGVzY3JpcHRpb249b3Blbihvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgIlJFQURNRS5yc3QiKSkucmVhZCgpLAorICAgICAgYXV0aG9yPSJIZW5yaXF1ZSBCYXN0b3MiLCBhdXRob3JfZW1haWw9ImhlbnJpcXVlQGJhc3Rvcy5uZXQiLAorICAgICAgbGljZW5zZT0iTUlUIiwKKyAgICAgIHB5X21vZHVsZXM9WydhZ2dyZWdhdGVfaWYnXSwKKyAgICAgIGluc3RhbGxfcmVxdWlyZXM9WworICAgICAgICAgICdzaXg+PTEuNi4xJywKKyAgICAgIF0sCisgICAgICB6aXBfc2FmZT1GYWxzZSwKKyAgICAgIHBsYXRmb3Jtcz0nYW55JywKKyAgICAgIGluY2x1ZGVfcGFja2FnZV9kYXRhPVRydWUsCisgICAgICBjbGFzc2lmaWVycz1bCisgICAgICAgICAgJ0RldmVsb3BtZW50IFN0YXR1cyA6OiA1IC0gUHJvZHVjdGlvbi9TdGFibGUnLAorICAgICAgICAgICdGcmFtZXdvcmsgOjogRGphbmdvJywKKyAgICAgICAgICAnSW50ZW5kZWQgQXVkaWVuY2UgOjogRGV2ZWxvcGVycycsCisgICAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE1JVCBMaWNlbnNlJywKKyAgICAgICAgICAnTmF0dXJhbCBMYW5ndWFnZSA6OiBFbmdsaXNoJywKKyAgICAgICAgICAnT3BlcmF0aW5nIFN5c3RlbSA6OiBPUyBJbmRlcGVuZGVudCcsCisgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbicsCisgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjcnLAorICAgICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMycsCisgICAgICAgICAgJ1RvcGljIDo6IERhdGFiYXNlJywKKyAgICAgICAgICAnVG9waWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogTGlicmFyaWVzJywKKyAgICAgIF0sCisgICAgICB1cmw9J2h0dHA6Ly9naXRodWIuY29tL2hlbnJpcXVlYmFzdG9zL2RqYW5nby1hZ2dyZWdhdGUtaWYvJywKKykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL3RveC5pbmkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci90b3guaW5pCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YmViMTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci90b3guaW5pCkBAIC0wLDAgKzEsMTk4IEBACitbdG94XQorZW52bGlzdCA9CisgICAgcHkyNy1kamFuZ28xLjQtc3FsaXRlLAorICAgIHB5MjctZGphbmdvMS40LXBvc3RncmVzLAorICAgIHB5MjctZGphbmdvMS40LW15c3FsLAorCisgICAgcHkyNy1kamFuZ28xLjUtc3FsaXRlLAorICAgIHB5MjctZGphbmdvMS41LXBvc3RncmVzLAorICAgIHB5MjctZGphbmdvMS41LW15c3FsLAorCisgICAgcHkyNy1kamFuZ28xLjYtc3FsaXRlLAorICAgIHB5MjctZGphbmdvMS42LXBvc3RncmVzLAorICAgIHB5MjctZGphbmdvMS42LW15c3FsLAorCisgICAgcHkyNy1kamFuZ28xLjctc3FsaXRlLAorICAgIHB5MjctZGphbmdvMS43LXBvc3RncmVzLAorICAgIHB5MjctZGphbmdvMS43LW15c3FsLAorCisgICAgcHkzNC1kamFuZ28xLjYtc3FsaXRlLAorICAgIHB5MzQtZGphbmdvMS42LXBvc3RncmVzLAorICAgICNweTM0LWRqYW5nbzEuNi1teXNxbAorCisgICAgcHkzNC1kamFuZ28xLjctc3FsaXRlLAorICAgIHB5MzQtZGphbmdvMS43LXBvc3RncmVzLAorICAgICNweTM0LWRqYW5nbzEuNy1teXNxbAorCitbdGVzdGVudl0KK3doaXRlbGlzdF9leHRlcm5hbHM9CisgICAgbXlzcWwKKyAgICBwc3FsCisKKyMgUHl0aG9uIDIuNworIyBEamFuZ28gMS40CitbdGVzdGVudjpweTI3LWRqYW5nbzEuNC1zcWxpdGVdCitiYXNlcHl0aG9uID0gcHl0aG9uMi43CitkZXBzID0KKyAgICBkamFuZ289PTEuNAorY29tbWFuZHMgPSBweXRob24gcnVudGVzdHMucHkgLS1zZXR0aW5ncyB0ZXN0cy50ZXN0X3NxbGl0ZQorCitbdGVzdGVudjpweTI3LWRqYW5nbzEuNC1wb3N0Z3Jlc10KK2Jhc2VweXRob24gPSBweXRob24yLjcKK2RlcHMgPQorICAgIGRqYW5nbz09MS40CisgICAgcHN5Y29wZzIKK2NvbW1hbmRzID0KKyAgICBwc3FsIC1jICdjcmVhdGUgZGF0YWJhc2UgYWdncmVnYXRpb247JyBwb3N0Z3JlcworICAgIHB5dGhvbiBydW50ZXN0cy5weSAtLXNldHRpbmdzIHRlc3RzLnRlc3RfcG9zdGdyZXMKKyAgICBwc3FsIC1jICdkcm9wIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycgcG9zdGdyZXMKKworW3Rlc3RlbnY6cHkyNy1kamFuZ28xLjQtbXlzcWxdCitiYXNlcHl0aG9uID0gcHl0aG9uMi43CitkZXBzID0KKyAgICBkamFuZ289PTEuNAorICAgIG15c3FsLXB5dGhvbgorY29tbWFuZHMgPQorICAgIG15c3FsIC1lICdjcmVhdGUgZGF0YWJhc2UgYWdncmVnYXRpb247JworICAgIHB5dGhvbiBydW50ZXN0cy5weSAtLXNldHRpbmdzIHRlc3RzLnRlc3RfbXlzcWwKKyAgICBteXNxbCAtZSAnZHJvcCBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnCisKKyMgRGphbmdvIDEuNQorW3Rlc3RlbnY6cHkyNy1kamFuZ28xLjUtc3FsaXRlXQorYmFzZXB5dGhvbiA9IHB5dGhvbjIuNworZGVwcyA9CisgICAgZGphbmdvPT0xLjUKK2NvbW1hbmRzID0gcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9zcWxpdGUKKworW3Rlc3RlbnY6cHkyNy1kamFuZ28xLjUtcG9zdGdyZXNdCitiYXNlcHl0aG9uID0gcHl0aG9uMi43CitkZXBzID0KKyAgICBkamFuZ289PTEuNQorICAgIHBzeWNvcGcyCitjb21tYW5kcyA9CisgICAgcHNxbCAtYyAnY3JlYXRlIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycgcG9zdGdyZXMKKyAgICBweXRob24gcnVudGVzdHMucHkgLS1zZXR0aW5ncyB0ZXN0cy50ZXN0X3Bvc3RncmVzCisgICAgcHNxbCAtYyAnZHJvcCBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnIHBvc3RncmVzCisKK1t0ZXN0ZW52OnB5MjctZGphbmdvMS41LW15c3FsXQorYmFzZXB5dGhvbiA9IHB5dGhvbjIuNworZGVwcyA9CisgICAgZGphbmdvPT0xLjUKKyAgICBteXNxbC1weXRob24KK2NvbW1hbmRzID0KKyAgICBteXNxbCAtZSAnY3JlYXRlIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycKKyAgICBweXRob24gcnVudGVzdHMucHkgLS1zZXR0aW5ncyB0ZXN0cy50ZXN0X215c3FsCisgICAgbXlzcWwgLWUgJ2Ryb3AgZGF0YWJhc2UgYWdncmVnYXRpb247JworCisjIERqYW5nbyAxLjYKK1t0ZXN0ZW52OnB5MjctZGphbmdvMS42LXNxbGl0ZV0KK2Jhc2VweXRob24gPSBweXRob24yLjcKK2RlcHMgPQorICAgIGRqYW5nbz09MS42Citjb21tYW5kcyA9IHB5dGhvbiBydW50ZXN0cy5weSAtLXNldHRpbmdzIHRlc3RzLnRlc3Rfc3FsaXRlCisKK1t0ZXN0ZW52OnB5MjctZGphbmdvMS42LXBvc3RncmVzXQorYmFzZXB5dGhvbiA9IHB5dGhvbjIuNworZGVwcyA9CisgICAgZGphbmdvPT0xLjYKKyAgICBwc3ljb3BnMgorY29tbWFuZHMgPQorICAgIHBzcWwgLWMgJ2NyZWF0ZSBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnIHBvc3RncmVzCisgICAgcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9wb3N0Z3JlcworICAgIHBzcWwgLWMgJ2Ryb3AgZGF0YWJhc2UgYWdncmVnYXRpb247JyBwb3N0Z3JlcworCitbdGVzdGVudjpweTI3LWRqYW5nbzEuNi1teXNxbF0KK2Jhc2VweXRob24gPSBweXRob24yLjcKK2RlcHMgPQorICAgIGRqYW5nbz09MS42CisgICAgbXlzcWwtcHl0aG9uCitjb21tYW5kcyA9CisgICAgbXlzcWwgLWUgJ2NyZWF0ZSBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnCisgICAgcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9teXNxbAorICAgIG15c3FsIC1lICdkcm9wIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycKKworCisjIFB5dGhvbiAyLjcgYW5kIERqYW5nbyAxLjcKK1t0ZXN0ZW52OnB5MjctZGphbmdvMS43LXNxbGl0ZV0KK2Jhc2VweXRob24gPSBweXRob24yLjcKK2RlcHMgPQorICAgIGRqYW5nbz09MS43Citjb21tYW5kcyA9IHB5dGhvbiBydW50ZXN0cy5weSAtLXNldHRpbmdzIHRlc3RzLnRlc3Rfc3FsaXRlCisKK1t0ZXN0ZW52OnB5MjctZGphbmdvMS43LXBvc3RncmVzXQorYmFzZXB5dGhvbiA9IHB5dGhvbjIuNworZGVwcyA9CisgICAgZGphbmdvPT0xLjcKKyAgICBwc3ljb3BnMgorY29tbWFuZHMgPQorICAgIHBzcWwgLWMgJ2NyZWF0ZSBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnIHBvc3RncmVzCisgICAgcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9wb3N0Z3JlcworICAgIHBzcWwgLWMgJ2Ryb3AgZGF0YWJhc2UgYWdncmVnYXRpb247JyBwb3N0Z3JlcworCitbdGVzdGVudjpweTI3LWRqYW5nbzEuNy1teXNxbF0KK2Jhc2VweXRob24gPSBweXRob24yLjcKK2RlcHMgPQorICAgIGRqYW5nbz09MS43CisgICAgbXlzcWwtcHl0aG9uCitjb21tYW5kcyA9CisgICAgbXlzcWwgLWUgJ2NyZWF0ZSBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnCisgICAgcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9teXNxbAorICAgIG15c3FsIC1lICdkcm9wIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycKKworCisjIFB5dGhvbiAzLjQKKyMgRGphbmdvIDEuNgorW3Rlc3RlbnY6cHkzNC1kamFuZ28xLjYtc3FsaXRlXQorYmFzZXB5dGhvbiA9IHB5dGhvbjMuNAorZGVwcyA9CisgICAgZGphbmdvPT0xLjYKK2NvbW1hbmRzID0gcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9zcWxpdGUKKworW3Rlc3RlbnY6cHkzNC1kamFuZ28xLjYtcG9zdGdyZXNdCitiYXNlcHl0aG9uID0gcHl0aG9uMy40CitkZXBzID0KKyAgICBkamFuZ289PTEuNgorICAgIHBzeWNvcGcyCitjb21tYW5kcyA9CisgICAgcHNxbCAtYyAnY3JlYXRlIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycgcG9zdGdyZXMKKyAgICBweXRob24gcnVudGVzdHMucHkgLS1zZXR0aW5ncyB0ZXN0cy50ZXN0X3Bvc3RncmVzCisgICAgcHNxbCAtYyAnZHJvcCBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnIHBvc3RncmVzCisKK1t0ZXN0ZW52OnB5MzQtZGphbmdvMS42LW15c3FsXQorYmFzZXB5dGhvbiA9IHB5dGhvbjMuNAorZGVwcyA9CisgICAgZGphbmdvPT0xLjYKKyAgICBteXNxbC1weXRob24zCitjb21tYW5kcyA9CisgICAgbXlzcWwgLWUgJ2NyZWF0ZSBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnCisgICAgcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9teXNxbAorICAgIG15c3FsIC1lICdkcm9wIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycKKworCisjIFB5dGhvbiAzLjQKKyMgRGphbmdvIDEuNworW3Rlc3RlbnY6cHkzNC1kamFuZ28xLjctc3FsaXRlXQorYmFzZXB5dGhvbiA9IHB5dGhvbjMuNAorZGVwcyA9CisgICAgZGphbmdvPT0xLjcKK2NvbW1hbmRzID0gcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9zcWxpdGUKKworW3Rlc3RlbnY6cHkzNC1kamFuZ28xLjctcG9zdGdyZXNdCitiYXNlcHl0aG9uID0gcHl0aG9uMy40CitkZXBzID0KKyAgICBkamFuZ289PTEuNworICAgIHBzeWNvcGcyCitjb21tYW5kcyA9CisgICAgcHNxbCAtYyAnY3JlYXRlIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycgcG9zdGdyZXMKKyAgICBweXRob24gcnVudGVzdHMucHkgLS1zZXR0aW5ncyB0ZXN0cy50ZXN0X3Bvc3RncmVzCisgICAgcHNxbCAtYyAnZHJvcCBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnIHBvc3RncmVzCisKK1t0ZXN0ZW52OnB5MzQtZGphbmdvMS43LW15c3FsXQorYmFzZXB5dGhvbiA9IHB5dGhvbjMuNAorZGVwcyA9CisgICAgZGphbmdvPT0xLjcKKyAgICBteXNxbC1weXRob24zCitjb21tYW5kcyA9CisgICAgbXlzcWwgLWUgJ2NyZWF0ZSBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnCisgICAgcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9teXNxbAorICAgIG15c3FsIC1lICdkcm9wIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9SRUFETUUgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZmE1NjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvUkVBRE1FCkBAIC0wLDAgKzEsNDEgQEAKKworVG9hc3RlciBUZXN0aW5nIEZyYW1ld29yaworWW9jdG8gUHJvamVjdAorCisKK1JhdGlvbmFsZQorLS0tLS0tLS0tLS0tCitBcyBUb2FzdGVyIGNvbnRyaWJ1dGlvbnMgZ3JvdyB3aXRoIHRoZSBudW1iZXIgb2YgcGVvcGxlIHRoYXQgY29udHJpYnV0ZSBjb2RlLCB2ZXJpZnlpbmcgZWFjaCBwYXRjaCBwcmlvciB0byBzdWJtaXR0aW5nIHVwc3RyZWFtIGJlY29tZXMgYSBoYXJkLXRvLXNjYWxlIHByb2JsZW0gZm9yIGh1bWFucy4gV2UgZGV2aXNlZCB0aGlzIHN5c3RlbSBpbiBvcmRlciB0byBydW4gcGF0Y2gtbGV2ZWwgdmFsaWRhdGlvbiwgdHJ5aW5nIHRvIGVsaW1pbmF0ZSBjb21tb24gcHJvYmxlbXMgZnJvbSBzdWJtaXR0ZWQgcGF0Y2hlcywgaW4gYW4gYXV0b21hdGVkIGZhc2hpb24uCisKK1RoZSBUb2FzdGVyIFRlc3RpbmcgRnJhbWV3b3JrIGlzIGEgc2V0IG9mIFB5dGhvbiBzY3JpcHRzIHRoYXQgcHJvdmlkZXMgYW4gZXh0ZW5zaWJsZSB3YXkgdG8gd3JpdGUgc21va2UgYW5kIHJlZ3Jlc3Npb24gdGVzdHMgdGhhdCB3aWxsIGJlIHJ1biBvbiBlYWNoIHBhdGNoIHNldCBzZW50IGZvciByZXZpZXcgb24gdGhlIHRvYXN0ZXIgbWFpbGluZyBsaXN0LgorCisKK1VzYWdlCistLS0tLS0tLS0tLS0KK1RoZXJlIGFyZSB0aHJlZSBtYWluIGV4ZWN1dGFibGUgc2NyaXB0cyBpbiB0aGlzIGRpcmVjdG9yeS4KKyAgICAqICAgIHJ1bm5lci5weSAgaXMgZGVzaWduZWQgdG8gYmUgcnVuIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gSXQgcmVxdWlyZXMsIGFzIG1hbmRhdG9yeSBwYXJhbWV0ZXIsIGEgYnJhbmNoIG5hbWUgb24gcG9reS1jb250cmliLCBicmFuY2ggd2hpY2ggY29udGFpbnMgdGhlIHBhdGNoZXMgdG8gYmUgdGVzdGVkLiBUaGUgcHJvZ3JhbSB3aWxsIGF1dG8tZGlzY292ZXIgdGhlIGF2YWlsYWJsZSB0ZXN0cyByZXNpZGluZyBpbiB0aGlzIGRpcmVjdG9yeSBieSBsb29raW5nIGZvciB1bml0dGVzdCBjbGFzc2VzLCBhbmQgd2lsbCBydW4gdGhlIHRlc3RzIG9uIHRoZSBicmFuY2ggZHVtcGluZyB0aGUgb3V0cHV0IHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuIE9wdGlvbmFsbHksIGl0IGNhbiB0YWtlIHBhcmFtZXRlcnMgaW5oaWJpdGluZyB0aGUgYnJhbmNoIGNoZWNrb3V0LCBvciBzcGVjaWZ5aW5nIGEgc2luZ2xlIHRlc3QgdG8gYmUgcnVuLCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorICAgICogICAgbGF1bmNoZXIucHkgIGlzIGEgZGVzaWduZWQgdG8gYmUgcnVuIGZyb20gYSBjcm9udGFiIG9yIHNpbWlsYXIgc2NoZWR1bGluZyBtZWNoYW5pc20uIEl0IGxvb2tzIHVwIGEgYmFja2xvZyBmaWxlIGNvbnRhaW5pbmcgYnJhbmNoZXMtdG8tdGVzdCAobmFtZWQgdGFza3MgaW4gdGhlIHNvdXJjZSBjb2RlKSwgc2VsZWN0IHRoZSBmaXJzdCBvbmUgaW4gRklGTyBtYW5uZXIsIGFuZCBsYXVuY2ggcnVubmVyLnB5IG9uIGl0LiBJdCB3aWxsIGF3YWl0IGZvciBjb21wbGV0aW9uLCBhbmQgZW1haWwgdGhlIHN0YW5kYXJkIG91dHB1dCBhbmQgc3RhbmRhcmQgZXJyb3IgZHVtcHMgZnJvbSB0aGUgcnVubmVyLnB5IGV4ZWN1dGlvbgorICAgICogICAgcmVjdi5weSAgaXMgYW4gZW1haWwgcmVjZWl2ZXIsIGRlc2lnbmVkIHRvIGJlIGNhbGxlZCBhcyBhIHBpcGUgZnJvbSBhIC5mb3J3YXJkIGZpbGUuIEl0IGlzIHVzZWQgdG8gbW9uaXRvciBhIG1haWxpbmcgbGlzdCwgZm9yIGV4YW1wbGUsIGFuZCBhZGQgdGFza3MgdG8gdGhlIGJhY2tsb2cgYmFzZWQgb24gcmV2aWV3IHJlcXVlc3RzIGNvbWluZyBvbiB0aGUgbWFpbGluZyBsaXN0LgorCisKK0luc3RhbGxhdGlvbgorLS0tLS0tLS0tLS0tCitBcyBwcmVyZXF1aXNpdGUsIHdlIGV4cGVjdCBhIGZ1bmN0aW9uaW5nIGVtYWlsIHN5c3RlbSBvbiBhIG1hY2hpbmUgd2l0aCBQeXRob24yLgorCitUaGUgYnJvYWQgc3RlcHMgdG8gaW5zdGFsbGF0aW9uCisqIHNldCB1cCB0aGUgLmZvcndhcmQgb24gdGhlIHJlY2VpdmluZyBlbWFpbCBhY2NvdW50IHRvIHBpcGUgdG8gdGhlIHJlY3YucHkgZmlsZQorKiBlZGl0IGNvbmZpZy5weSBhbmQgc2V0dGluZ3MuanNvbiB0byBhbHRlciBmb3IgbG9jYWwgaW5zdGFsbGF0aW9uIHNldHRpbmdzCisqIG9uIGVtYWlsIHJlY2VpdmUsIHZlcmlmeSBiYWNrbG9nLnR4dCB0byBzZWUgdGhhdCB0aGUgdGFza3MgYXJlIHJlY2VpdmVkIGFuZCBtYXJrZWQgZm9yIHByb2Nlc3NpbmcKKyogZXhlY3V0ZSBsYXVuY2hlci5weSBpbiBjb21tYW5kIGxpbmUgdG8gdmVyaWZ5IHRoYXQgYSB0ZXN0IG9jY3VycyB3aXRoIG5vIHByb2JsZW1zLCBhbmQgdGhhdCB0aGUgb3V0Z29pbmcgZW1haWwgaXMgZGVsaXZlcmVkCisqIGFkZCBsYXVuY2hlci5weQorCisKKworQ29udHJpYnV0ZQorLS0tLS0tLS0tLS0tCitXaGF0IHdlIG5lZWQgYXJlIHRlc3RzLiBBZGQgeW91ciBvd24gdGVzdHMgdG8gZWl0aGVyIHRlc3RzLnB5IGZpbGUsIG9yIHRvIGEgbmV3IGZpbGUuCitVc2UgImNvbmZpZy5sb2dnZXIiIHRvIHdyaXRlIGxvZ3MgdGhhdCB3aWxsIG1ha2UgaXQgdG8gZW1haWwuCisKK0NvbW1vbmx5IHVzZWQgY29kZSBzaG91bGQgYmUgZ29pbmcgdG8gc2hlbGx1dGlscywgYW5kIGNvbmZpZ3VyYXRpb24gdG8gY29uZmlnLnB5LgorCitDb250cmlidXRlIGNvZGUgYnkgZW1haWxpbmcgcGF0Y2hlcyB0byB0aGUgbGlzdDogdG9hc3RlckB5b2N0b3Byb2plY3Qub3JnIChtZW1iZXJzaGlwIHJlcXVpcmVkKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL1RPRE8gYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTcxOTIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL1RPRE8KQEAgLTAsMCArMSw5IEBACitXZSBuZWVkIHRvIGltcGxlbWVudCB0ZXN0czoKKworYXV0b21hdGVkIGxpbmsgY2hlY2tlcjsgY3VycmVudGx5CiskIGxpbmtjaGVja2VyIC10IDEwMDAgLUYgY3N2IGh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC8KKworaW50ZWdyYXRlIHRoZSB3M2MtdmFsaWRhdGlvbiBzZXJ2aWNlOyBjdXJyZW50bHkKKyQgcHl0aG9uIHVybGNoZWNrLnB5CisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL2NvbmZpZy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9jb25maWcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBkNDVmMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9jb25maWcucHkKQEAgLTAsMCArMSw5OCBAQAorIyEvdXNyL2Jpbi9weXRob24KKworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFsZXhhbmRydSBEYW1pYW4gZm9yIEludGVsIENvcnAuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisjIFRoaXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24vc2luZ2xlIG1vZHVsZSBmb3IgdHRzCisjIGV2ZXJ5dGhpbmcgdGhhdCB3b3VsZCBiZSBhIGdsb2JhbCB2YXJpYWJsZSBnb2VzIGhlcmUKKworaW1wb3J0IG9zLCBzeXMsIGxvZ2dpbmcKK2ltcG9ydCBzb2NrZXQKKworTE9HRElSID0gImxvZyIKK1NFVFRJTkdTX0ZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgInNldHRpbmdzLmpzb24iKQorVEVTVF9ESVJfTkFNRSA9ICJ0dHNfdGVzdGRpciIKKworREVCVUcgPSBUcnVlCisKK09XTl9QSUQgPSBvcy5nZXRwaWQoKQorCitXM0NfVkFMSURBVE9SID0gImh0dHA6Ly9pY2FydXMubG9jYWwvdzNjLXZhbGlkYXRvci9jaGVjaz9kb2N0eXBlPUhUTUw1JnVyaT0iCisKK1RPQVNURVJfUE9SVCA9IDU2Nzg5CisKK1RFU1RESVIgPSBOb25lCisKKyN3ZSBwYXJzZSB0aGUgdzNjIFVSTCB0byBrbm93IHdoZXJlIHRvIGNvbm5lY3QKKworaW1wb3J0IHVybHBhcnNlCisKK2RlZiBnZXRfcHVibGljX2lwKCk6CisgICAgdGVtcF9zb2NrZXQgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkKKyAgICBwYXJzZWRfdXJsID0gdXJscGFyc2UudXJscGFyc2UoImh0dHA6Ly9pY2FydXMubG9jYWwvdzNjLXZhbGlkYXRvci9jaGVjaz9kb2N0eXBlPUhUTUw1JnVyaT0iKQorICAgIHRlbXBfc29ja2V0LmNvbm5lY3QoKHBhcnNlZF91cmwubmV0bG9jLCA4MCBpZiBwYXJzZWRfdXJsLnBvcnQgaXMgTm9uZSBlbHNlIHBhcnNlZF91cmwucG9ydCkpCisgICAgcHVibGljX2lwID0gdGVtcF9zb2NrZXQuZ2V0c29ja25hbWUoKVswXQorICAgIHRlbXBfc29ja2V0LmNsb3NlKCkKKyAgICByZXR1cm4gcHVibGljX2lwCisKK1RPQVNURVJfQkFTRVVSTCA9ICJodHRwOi8vJXM6JWQvIiAlIChnZXRfcHVibGljX2lwKCksIFRPQVNURVJfUE9SVCkKKworCitPV05fRU1BSUxfQUREUkVTUyA9ICJUb2FzdGVyIFRlc3RpbmcgRnJhbWV3b3JrIDxhbGV4YW5kcnUuZGFtaWFuQGludGVsLmNvbT4iCitSRVBPUlRfRU1BSUxfQUREUkVTUyA9ICJhbGV4YW5kcnUuZGFtaWFuQGludGVsLmNvbSIKKworIyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgYmFzaWMgbG9nZ2luZyBpbmZyYXN0cnVjdHVyZQorCisjcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQorIyB3ZSBkaXNhYmxlIHRoZSBpbnZhbGlkIG5hbWUgYmVjYXVzZSB0aGUgbW9kdWxlLWxldmVsICJsb2dnZXIiIGlzIHVzZWQgdGhyb3Vnb3V0IGJpdGJha2UKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ0b2FzdGVydGVzdCIpCitfX2NvbnNvbGVfXyA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzeXMuc3Rkb3V0KQorX19jb25zb2xlX18uc2V0Rm9ybWF0dGVyKGxvZ2dpbmcuRm9ybWF0dGVyKCIlKGFzY3RpbWUpcyAlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpKQorbG9nZ2VyLmFkZEhhbmRsZXIoX19jb25zb2xlX18pCitsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKworCisjIHNpbmdsZXRvbiBmaWxlIG5hbWVzCitMT0NLRklMRSA9ICIvdG1wL3R0Zi5sb2NrIgorQkFDS0xPR0ZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgImJhY2tsb2cudHh0IikKKworIyB0YXNrIHN0YXRlcworZGVmIGVudW0oKnNlcXVlbnRpYWwsICoqbmFtZWQpOgorICAgIGVudW1zID0gZGljdCh6aXAoc2VxdWVudGlhbCwgcmFuZ2UobGVuKHNlcXVlbnRpYWwpKSksICoqbmFtZWQpCisgICAgcmV2ZXJzZSA9IGRpY3QoKHZhbHVlLCBrZXkpIGZvciBrZXksIHZhbHVlIGluIGVudW1zLml0ZXJpdGVtcygpKQorICAgIGVudW1zWydyZXZlcnNlX21hcHBpbmcnXSA9IHJldmVyc2UKKyAgICByZXR1cm4gdHlwZSgnRW51bScsICgpLCBlbnVtcykKKworCitjbGFzcyBUQVNLUyhvYmplY3QpOgorICAgICNweWxpbnQ6IGRpc2FibGU9dG9vLWZldy1wdWJsaWMtbWV0aG9kcworICAgIFBFTkRJTkcgPSAiUEVORElORyIKKyAgICBJTlBST0dSRVNTID0gIklOUFJPR1JFU1MiCisgICAgRE9ORSA9ICJET05FIgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBuZXh0X3Rhc2sodGFzayk6CisgICAgICAgIGlmIHRhc2sgPT0gVEFTS1MuUEVORElORzoKKyAgICAgICAgICAgIHJldHVybiBUQVNLUy5JTlBST0dSRVNTCisgICAgICAgIGlmIHRhc2sgPT0gVEFTS1MuSU5QUk9HUkVTUzoKKyAgICAgICAgICAgIHJldHVybiBUQVNLUy5ET05FCisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiSW52YWxpZCBuZXh0IHRhc2sgc3RhdGUgZm9yICVzIiAlIHRhc2spCisKKyMgVFRTIHNwZWNpZmljCitDT05UUklCX1JFUE8gPSAiZ2l0QGdpdC55b2N0b3Byb2plY3Qub3JnOnBva3ktY29udHJpYiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL2xhdW5jaGVyLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL2xhdW5jaGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU1Nzk0YzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvbGF1bmNoZXIucHkKQEAgLTAsMCArMSwxMDEgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoQykgMjAxNSBBbGV4YW5kcnUgRGFtaWFuIGZvciBJbnRlbCBDb3JwLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIyBQcm9ncmFtIHRvIHJ1biB0aGUgbmV4dCB0YXNrIGxpc3RlZCBmcm9tIHRoZSBiYWNrbG9nLnR4dDsgZGVzaWduZWQgdG8gYmUKKyMgcnVuIGZyb20gY3JvbnRhYi4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoraW1wb3J0IHN5cywgb3MsIGNvbmZpZywgc2hlbGx1dGlscworZnJvbSBzaGVsbHV0aWxzIGltcG9ydCBTaGVsbENtZEV4Y2VwdGlvbgorCisjIEltcG9ydCBzbXRwbGliIGZvciB0aGUgYWN0dWFsIHNlbmRpbmcgZnVuY3Rpb24KK2ltcG9ydCBzbXRwbGliCisKKyMgSW1wb3J0IHRoZSBlbWFpbCBtb2R1bGVzIHdlJ2xsIG5lZWQKK2Zyb20gZW1haWwubWltZS50ZXh0IGltcG9ydCBNSU1FVGV4dAorCitkZWYgX3Rha2VfbG9ja2ZpbGUoKToKKyAgICByZXR1cm4gc2hlbGx1dGlscy5sb2NrZmlsZShzaGVsbHV0aWxzLm1rX2xvY2tfZmlsZW5hbWUoKSkKKworCitkZWYgcmVhZF9uZXh0X3Rhc2tfYnlfc3RhdGUodGFza19zdGF0ZSwgdGFza19uYW1lPU5vbmUpOgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgY29uZmlnLkJBQ0tMT0dGSUxFKSk6CisgICAgICAgIHJldHVybiBOb25lCisgICAgb3MucmVuYW1lKGNvbmZpZy5CQUNLTE9HRklMRSwgY29uZmlnLkJBQ0tMT0dGSUxFICsgIi50bXAiKQorICAgIHRhc2sgPSBOb25lCisgICAgd2l0aCBvcGVuKGNvbmZpZy5CQUNLTE9HRklMRSArICIudG1wIiwgInIiKSBhcyBmX2luOgorICAgICAgICB3aXRoIG9wZW4oY29uZmlnLkJBQ0tMT0dGSUxFLCAidyIpIGFzIGZfb3V0OgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZl9pbi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICBpZiB0YXNrIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGZpZWxkcyA9IGxpbmUuc3RyaXAoKS5zcGxpdCgifCIsIDIpCisgICAgICAgICAgICAgICAgICAgIGlmIGZpZWxkc1sxXSA9PSB0YXNrX3N0YXRlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGFza19uYW1lIGlzIE5vbmUgb3IgdGFza19uYW1lID09IGZpZWxkc1swXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrID0gZmllbGRzWzBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlVwZGF0aW5nICVzICVzIHRvICVzIiAlICh0YXNrLCB0YXNrX3N0YXRlLCBjb25maWcuVEFTS1MubmV4dF90YXNrKHRhc2tfc3RhdGUpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gIiVzfCVzXG4iICUgKHRhc2ssIGNvbmZpZy5UQVNLUy5uZXh0X3Rhc2sodGFza19zdGF0ZSkpCisgICAgICAgICAgICAgICAgZl9vdXQud3JpdGUobGluZSkKKyAgICBvcy5yZW1vdmUoY29uZmlnLkJBQ0tMT0dGSUxFICsgIi50bXAiKQorICAgIHJldHVybiB0YXNrCisKK2RlZiBzZW5kX3JlcG9ydCh0YXNrX25hbWUsIHBsYWludGV4dCwgZXJydGV4dD1Ob25lKToKKyAgICBpZiBlcnJ0ZXh0IGlzIE5vbmU6CisgICAgICAgIG1zZyA9IE1JTUVUZXh0KHBsYWludGV4dCkKKyAgICBlbHNlOgorICAgICAgICBpZiBwbGFpbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgIHBsYWludGV4dCA9ICIiCisgICAgICAgIG1zZyA9IE1JTUVUZXh0KCItLVNURE9VVCBkdW1wLS1cblxuJXNcblxuLS1TVERFUlIgZHVtcC0tXG5cbiVzIiAlIChwbGFpbnRleHQsIGVycnRleHQpKQorCisgICAgbXNnWydTdWJqZWN0J10gPSAiW3Jldmlldy1yZXF1ZXN0XSAlcyAtIHNtb2tlIHRlc3QgcmVzdWx0cyIgJSB0YXNrX25hbWUKKyAgICBtc2dbJ0Zyb20nXSA9IGNvbmZpZy5PV05fRU1BSUxfQUREUkVTUworICAgIG1zZ1snVG8nXSA9IGNvbmZpZy5SRVBPUlRfRU1BSUxfQUREUkVTUworCisgICAgc210cF9jb25uZWN0aW9uID0gc210cGxpYi5TTVRQKCJsb2NhbGhvc3QiKQorICAgIHNtdHBfY29ubmVjdGlvbi5zZW5kbWFpbChjb25maWcuT1dOX0VNQUlMX0FERFJFU1MsIFtjb25maWcuUkVQT1JUX0VNQUlMX0FERFJFU1NdLCBtc2cuYXNfc3RyaW5nKCkpCisgICAgc210cF9jb25uZWN0aW9uLnF1aXQoKQorCitkZWYgbWFpbigpOgorICAgICMgd2UgZG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBhbm90aGVyIGluc3RhbmNlIG9mIHVzIHJ1bm5pbmcKKyAgICBsb2NrX2ZpbGUgPSBfdGFrZV9sb2NrZmlsZSgpCisKKyAgICBpZiBsb2NrX2ZpbGUgaXMgTm9uZToKKyAgICAgICAgaWYgY29uZmlnLkRFQlVHOgorICAgICAgICAgICAgcHJpbnQoIkNvbmN1cnJlbnQgc2NyaXB0IGluIHByb2dyZXNzLCBleGl0aW5nIikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIG5leHRfdGFzayA9IHJlYWRfbmV4dF90YXNrX2J5X3N0YXRlKGNvbmZpZy5UQVNLUy5QRU5ESU5HKQorICAgIGlmIG5leHRfdGFzayBpcyBub3QgTm9uZToKKyAgICAgICAgcHJpbnQoIk5leHQgdGFzayBpcyIsIG5leHRfdGFzaykKKyAgICAgICAgZXJydGV4dCA9IE5vbmUKKyAgICAgICAgb3V0ID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXQgPSBzaGVsbHV0aWxzLnJ1bl9zaGVsbF9jbWQoIiVzICVzIiAlIChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgInJ1bm5lci5weSIpLCBuZXh0X3Rhc2spKQorICAgICAgICBleGNlcHQgU2hlbGxDbWRFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgcHJpbnQoIkZhaWxlZCB3aGlsZSBydW5uaW5nIHRoZSB0ZXN0IHJ1bm5lcjogJXMiLCBleGMpCisgICAgICAgICAgICBlcnJ0ZXh0ID0gZXhjLl9fc3RyX18oKQorICAgICAgICBzZW5kX3JlcG9ydChuZXh0X3Rhc2ssIG91dCwgZXJydGV4dCkKKyAgICAgICAgcmVhZF9uZXh0X3Rhc2tfYnlfc3RhdGUoY29uZmlnLlRBU0tTLklOUFJPR1JFU1MsIG5leHRfdGFzaykKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiTm8gdGFzayIpCisKKyAgICBzaGVsbHV0aWxzLnVubG9ja2ZpbGUobG9ja19maWxlKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvbG9nLy5jcmVhdGUgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvbG9nLy5jcmVhdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9sb2cvLmNyZWF0ZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3JlY3YucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvcmVjdi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wN2VmZGFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3JlY3YucHkKQEAgLTAsMCArMSw1NiBAQAorIyEvdXNyL2Jpbi9weXRob24KKworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFsZXhhbmRydSBEYW1pYW4gZm9yIEludGVsIENvcnAuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisjIFByb2dyYW0gdG8gcmVjZWl2ZSByZXZpZXcgcmVxdWVzdHMgYnkgZW1haWwgYW5kIGxvZyB0YXNrcyB0byBiYWNrbG9nLnR4dAorIyBEZXNpZ25lZCB0byBiZSBydW4gYnkgdGhlIGVtYWlsIHN5c3RlbSBmcm9tIGEgLmZvcndhcmQgZmlsZToKKyMKKyMgY2F0IC5mb3J3YXJkCisjIHxbZnVsbC9wYXRoXS9yZWN2LnB5CisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KK2ltcG9ydCBzeXMsIGNvbmZpZywgc2hlbGx1dGlscworCitmcm9tIGVtYWlsLnBhcnNlciBpbXBvcnQgUGFyc2VyCisKK2RlZiByZWN2X21haWwoZGF0YXN0cmluZyk6CisgICAgaGVhZGVycyA9IFBhcnNlcigpLnBhcnNlc3RyKGRhdGFzdHJpbmcpCisgICAgcmV0dXJuIGhlYWRlcnNbJ3N1YmplY3QnXQorCitkZWYgbWFpbigpOgorICAgIGxvY2tfZmlsZSA9IHNoZWxsdXRpbHMubG9ja2ZpbGUoc2hlbGx1dGlscy5ta19sb2NrX2ZpbGVuYW1lKCksIHJldHJ5PVRydWUpCisKKyAgICBpZiBsb2NrX2ZpbGUgaXMgTm9uZToKKyAgICAgICAgaWYgY29uZmlnLkRFQlVHOgorICAgICAgICAgICAgcHJpbnQoIkNvbmN1cnJlbnQgc2NyaXB0IGluIHByb2dyZXNzLCBleGl0aW5nIikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHN1YmplY3QgPSByZWN2X21haWwoc3lzLnN0ZGluLnJlYWQoKSkKKworICAgIHN1YmplY3RfcGFydHMgPSBzdWJqZWN0LnNwbGl0KCkKKyAgICBpZiAiW3Jldmlldy1yZXF1ZXN0XSIgaW4gc3ViamVjdF9wYXJ0czoKKyAgICAgICAgdGFza19uYW1lID0gc3ViamVjdF9wYXJ0c1tzdWJqZWN0X3BhcnRzLmluZGV4KCJbcmV2aWV3LXJlcXVlc3RdIikgKyAxXQorICAgICAgICB3aXRoIG9wZW4oY29uZmlnLkJBQ0tMT0dGSUxFLCAiYSIpIGFzIGZvdXQ6CisgICAgICAgICAgICBsaW5lID0gIiVzfCVzXG4iICUgKHRhc2tfbmFtZSwgY29uZmlnLlRBU0tTLlBFTkRJTkcpCisgICAgICAgICAgICBmb3V0LndyaXRlKGxpbmUpCisKKyAgICBzaGVsbHV0aWxzLnVubG9ja2ZpbGUobG9ja19maWxlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3J1bm5lci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9ydW5uZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmVkNjY1MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9ydW5uZXIucHkKQEAgLTAsMCArMSwyMjIgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoQykgMjAxNSBBbGV4YW5kcnUgRGFtaWFuIGZvciBJbnRlbCBDb3JwLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworCisjIFRoaXMgaXMgdGhlIG1haW4gdGVzdCBleGVjdXRpb24gY29udHJvbGxlci4gSXQgaXMgZGVzaWduZWQgdG8gYmUgcnVuCisjIG1hbnVhbGx5IGZyb20gdGhlIGNvbW1hbmQgbGluZSwgb3IgdG8gYmUgY2FsbGVkIGZyb20gYSBkaWZmZXJlbnQgcHJvZ3JhbQorIyB0aGF0IHNjaGVkdWxlcyB0ZXN0IGV4ZWN1dGlvbi4KKyMKKyMgRXhlY3V0ZSAgIHJ1bm5lci5weSAtaCAgIGZvciBoZWxwLgorCisKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoraW1wb3J0IHN5cywgb3MKK2ltcG9ydCB1bml0dGVzdCwgaW1wb3J0bGliCitpbXBvcnQgbG9nZ2luZywgcHByaW50LCBqc29uCitpbXBvcnQgcmUKK2Zyb20gc2hlbGx1dGlscyBpbXBvcnQgU2hlbGxDbWRFeGNlcHRpb24sIG1rZGlyaGllciwgcnVuX3NoZWxsX2NtZAorCitpbXBvcnQgY29uZmlnCisKKyMgd2UgYWxzbyBsb2cgdG8gYSBmaWxlLCBpbiBhZGRpdGlvbiB0byBjb25zb2xlLCBiZWNhdXNlIG91ciBvdXRwdXQgaXMgaW1wb3J0YW50CitfX2xvZ19maWxlX25hbWVfXyA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAibG9nL3R0c18lZC5sb2ciICUgY29uZmlnLk9XTl9QSUQpCitta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKF9fbG9nX2ZpbGVfbmFtZV9fKSkKK19fbG9nX2ZpbGVfXyA9IG9wZW4oX19sb2dfZmlsZV9uYW1lX18sICJ3IikKK19fZmlsZV9oYW5kbGVyX18gPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoX19sb2dfZmlsZV9fKQorX19maWxlX2hhbmRsZXJfXy5zZXRGb3JtYXR0ZXIobG9nZ2luZy5Gb3JtYXR0ZXIoIiUoYXNjdGltZSlzICUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIikpCisKK2NvbmZpZy5sb2dnZXIuYWRkSGFuZGxlcihfX2ZpbGVfaGFuZGxlcl9fKQorCisjIHNldCB1cCBsb2cgZGlyZWN0b3J5Cit0cnk6CisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGNvbmZpZy5MT0dESVIpOgorICAgICAgICBvcy5ta2Rpcihjb25maWcuTE9HRElSKQorICAgIGVsc2U6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGNvbmZpZy5MT0dESVIpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFeHBlY3RlZCBsb2cgZGlyICclcycgaXMgbm90IGFjdHVhbGx5IGEgZGlyZWN0b3J5LiIgJSBjb25maWcuTE9HRElSKQorZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgIHJhaXNlIGV4YworCisjIGNyZWF0ZXMgdGhlIHVuZGVyLXRlc3QtYnJhbmNoIGFzIGEgc2VwYXJhdGUgZGlyZWN0b3J5CitkZWYgc2V0X3VwX3Rlc3RfYnJhbmNoKHNldHRpbmdzLCBicmFuY2hfbmFtZSk6CisgICAgdGVzdGRpciA9ICIlcy8lcy4lZCIgJSAoc2V0dGluZ3NbJ3dvcmtkaXInXSwgY29uZmlnLlRFU1RfRElSX05BTUUsIGNvbmZpZy5PV05fUElEKQorCisgICAgIyBjcmVhdGVzIHRoZSBob3N0IGRpcgorICAgIGlmIG9zLnBhdGguZXhpc3RzKHRlc3RkaXIpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRlc3QgZGlyICclcydpcyBhbHJlYWR5IHRoZXJlLCBhYm9ydGluZyIgJSB0ZXN0ZGlyKQorCisgICAgIyBtYXkgcmFpc2UgT1NFcnJvciwgaXMgdG8gYmUgaGFuZGxlZCBieSB0aGUgY2FsbGVyCisgICAgb3MubWFrZWRpcnModGVzdGRpcikKKworCisgICAgIyBjb3BpZXMgb3ZlciB0aGUgLmdpdCBmcm9tIHRoZSBsb2NhbGNsb25lCisgICAgcnVuX3NoZWxsX2NtZCgiY3AgLWEgJyVzJy8uZ2l0ICclcyciICUgKHNldHRpbmdzWydsb2NhbGNsb25lJ10sIHRlc3RkaXIpKQorCisgICAgIyBhZGQgdGhlIHJlbW90ZSBpZiBpdCBkb2Vzbid0IGV4aXN0CisgICAgY3J0X3JlbW90ZXMgPSBydW5fc2hlbGxfY21kKCJnaXQgcmVtb3RlIC12IiwgY3dkPXRlc3RkaXIpCisgICAgcmVtb3RlcyA9IFt3b3JkIGZvciBsaW5lIGluIGNydF9yZW1vdGVzLnNwbGl0KCJcbiIpIGZvciB3b3JkIGluIGxpbmUuc3BsaXQoKV0KKyAgICBpZiBub3QgY29uZmlnLkNPTlRSSUJfUkVQTyBpbiByZW1vdGVzOgorICAgICAgICByZW1vdGVfbmFtZSA9ICJ0dHNfY29udHJpYiIKKyAgICAgICAgcnVuX3NoZWxsX2NtZCgiZ2l0IHJlbW90ZSBhZGQgJXMgJXMiICUgKHJlbW90ZV9uYW1lLCBjb25maWcuQ09OVFJJQl9SRVBPKSwgY3dkPXRlc3RkaXIpCisgICAgZWxzZToKKyAgICAgICAgcmVtb3RlX25hbWUgPSByZW1vdGVzW3JlbW90ZXMuaW5kZXgoY29uZmlnLkNPTlRSSUJfUkVQTykgLSAxXQorCisgICAgIyBkbyB0aGUgZmV0Y2gKKyAgICBydW5fc2hlbGxfY21kKCJnaXQgZmV0Y2ggJXMgLXAiICUgcmVtb3RlX25hbWUsIGN3ZD10ZXN0ZGlyKQorCisgICAgIyBkbyB0aGUgY2hlY2tvdXQKKyAgICBydW5fc2hlbGxfY21kKCJnaXQgY2hlY2tvdXQgb3JpZ2luL21hc3RlciAmJiBnaXQgYnJhbmNoIC1EICVzOyBnaXQgY2hlY2tvdXQgJXMvJXMgLWIgJXMgJiYgZ2l0IHJlc2V0IC0taGFyZCIgJSAoYnJhbmNoX25hbWUsIHJlbW90ZV9uYW1lLCBicmFuY2hfbmFtZSwgYnJhbmNoX25hbWUpLCBjd2Q9dGVzdGRpcikKKworICAgIHJldHVybiB0ZXN0ZGlyCisKKworZGVmIF9fc2VhcmNoX2Zvcl90ZXN0cygpOgorICAgICMgd2UgZmluZCBhbGwgY2xhc3NlcyB0aGF0IGNhbiBydW4sIGFuZCBydW4gdGhlbQorICAgIHRlc3RzID0gW10KKyAgICBmb3IgXywgXywgZmlsZXNfbGlzdCBpbiBvcy53YWxrKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSk6CisgICAgICAgIGZvciBtb2R1bGVfZmlsZSBpbiBbZls6LTNdIGZvciBmIGluIGZpbGVzX2xpc3QgaWYgZi5lbmRzd2l0aCgiLnB5IikgYW5kIG5vdCBmLnN0YXJ0c3dpdGgoIl9faW5pdF9fIildOgorICAgICAgICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygiSW5zcGVjdGluZyBtb2R1bGUgJXMiLCBtb2R1bGVfZmlsZSkKKyAgICAgICAgICAgIGN1cnJlbnRfbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobW9kdWxlX2ZpbGUpCisgICAgICAgICAgICBjcnRjbGFzc19uYW1lcyA9IHZhcnMoY3VycmVudF9tb2R1bGUpCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBjcnRjbGFzc19uYW1lczoKKyAgICAgICAgICAgICAgICB0ZXN0ZWRfdmFsdWUgPSBjcnRjbGFzc19uYW1lc1tuYW1lXQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGVzdGVkX3ZhbHVlLCB0eXBlKHVuaXR0ZXN0LlRlc3RDYXNlKSkgYW5kIGlzc3ViY2xhc3ModGVzdGVkX3ZhbHVlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICAgICAgICAgIHRlc3RzLmFwcGVuZCgobW9kdWxlX2ZpbGUsIG5hbWUpKQorICAgICAgICBicmVhaworICAgIHJldHVybiB0ZXN0cworCisKKyMgYm9pbGVycGxhdGUgdG8gc2VsZiBkaXNjb3ZlciB0ZXN0cyBhbmQgcnVuIHRoZW0KK2RlZiBleGVjdXRlX3Rlc3RzKGRpcl91bmRlcl90ZXN0LCB0ZXN0bmFtZSk6CisKKyAgICBpZiB0ZXN0bmFtZSBpcyBub3QgTm9uZSBhbmQgIi4iIGluIHRlc3RuYW1lOgorICAgICAgICB0ZXN0cyA9IFtdCisgICAgICAgIHRlc3RzLmFwcGVuZCh0dXBsZSh0ZXN0bmFtZS5zcGxpdCgiLiIsIDIpKSkKKyAgICBlbHNlOgorICAgICAgICB0ZXN0cyA9IF9fc2VhcmNoX2Zvcl90ZXN0cygpCisKKyAgICAjIGxldCdzIG1vdmUgdG8gdGhlIGRpcmVjdG9yeSB1bmRlciB0ZXN0CisgICAgY3J0X2RpciA9IG9zLmdldGN3ZCgpCisgICAgb3MuY2hkaXIoZGlyX3VuZGVyX3Rlc3QpCisKKyAgICAjIGV4ZWN1dGUgZWFjaCBtb2R1bGUKKyAgICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKKyAgICAjIHdlIGRpc2FibGUgdGhlIGJyb2FkLWV4Y2VwdCBiZWNhdXNlIHdlIHdhbnQgdG8gYWN0dWFsbHkgY2F0Y2ggYWxsIHBvc3NpYmxlIGV4Y2VwdGlvbnMKKyAgICB0cnk6CisgICAgICAgICMgc29ydGluZyB0aGUgdGVzdHMgYnkgdGhlIG51bWVyaWMgb3JkZXIgaW4gdGhlIGNsYXNzIG5hbWUKKyAgICAgICAgdGVzdHMgPSBzb3J0ZWQodGVzdHMsIGtleT1sYW1iZGEgeDogaW50KHJlLnNlYXJjaChyIlswLTldKyIsIHhbMV0pLmdyb3VwKDApKSkKKyAgICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygiRGlzY292ZXJlZCB0ZXN0IGNsYXNlczogJXMiLCBwcHJpbnQucGZvcm1hdCh0ZXN0cykpCisgICAgICAgIHVuaXR0ZXN0Lmluc3RhbGxIYW5kbGVyKCkKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHJlc3VsdC5mYWlsZmFzdCA9IFRydWUKKyAgICAgICAgZm9yIG1vZHVsZV9maWxlLCB0ZXN0X25hbWUgaW4gdGVzdHM6CisgICAgICAgICAgICBzdWl0ZS5hZGRUZXN0KGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgiJXMuJXMiICUgKG1vZHVsZV9maWxlLCB0ZXN0X25hbWUpKSkKKyAgICAgICAgY29uZmlnLmxvZ2dlci5pbmZvKCJSdW5uaW5nICVkIHRlc3QocykiLCBzdWl0ZS5jb3VudFRlc3RDYXNlcygpKQorICAgICAgICBzdWl0ZS5ydW4ocmVzdWx0KQorCisgICAgICAgIGZvciBlcnJvciBpbiByZXN1bHQuZXJyb3JzOgorICAgICAgICAgICAgY29uZmlnLmxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIG9uIHRlc3Q6ICVzXG4lcyIsIGVycm9yWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iLmpvaW4oWyItLSAlcyIgJSB4IGZvciB4IGluIGVycm9yWzFdLnNwbGl0KCJcbiIpXSkpCisKKyAgICAgICAgZm9yIGZhaWx1cmUgaW4gcmVzdWx0LmZhaWx1cmVzOgorICAgICAgICAgICAgY29uZmlnLmxvZ2dlci5lcnJvcigiRmFpbGVkIHRlc3Q6ICVzOlxuJXNcbiIsIGZhaWx1cmVbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIuam9pbihbIi0tICAlcyIgJSB4IGZvciB4IGluIGZhaWx1cmVbMV0uc3BsaXQoIlxuIildKSkKKworICAgICAgICBjb25maWcubG9nZ2VyLmluZm8oIlRlc3QgcmVzdWx0czogJWQgcmFuLCAlZCBlcnJvcnMsICVkIGZhaWx1cmVzIiwgcmVzdWx0LnRlc3RzUnVuLCBsZW4ocmVzdWx0LmVycm9ycyksIGxlbihyZXN1bHQuZmFpbHVyZXMpKQorCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgY29uZmlnLmxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgdGVzdC4gVHJhY2VkdW1wOiBcbiVzIiwgdHJhY2ViYWNrLmZvcm1hdF9leGMoZXhjKSkKKyAgICBmaW5hbGx5OgorICAgICAgICBvcy5jaGRpcihjcnRfZGlyKQorICAgIHJldHVybiBsZW4ocmVzdWx0LmZhaWx1cmVzKQorCisjIHZlcmlmeSB0aGF0IHdlIGhhZCBhIGJyYW5jaC11bmRlci10ZXN0IG5hbWUgYXMgcGFyYW1ldGVyCitkZWYgdmFsaWRhdGVfYXJncygpOgorICAgIGZyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlcgorICAgIHBhcnNlciA9IE9wdGlvblBhcnNlcih1c2FnZT0idXNhZ2U6ICVwcm9nIFtvcHRpb25zXSBicmFuY2hfdW5kZXJfdGVzdCIpCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXQiLCAiLS10ZXN0LWRpciIsIGRlc3Q9InRlc3RkaXIiLCBkZWZhdWx0PU5vbmUsIGhlbHA9IlVzZSBzcGVjaWZpZWQgZGlyZWN0b3J5IHRvIHJ1biB0ZXN0cywgaW5oaWJpdHMgdGhlIGNoZWNrb3V0LiIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1zIiwgIi0tc2luZ2xlIiwgZGVzdD0ic2luZ2xldGVzdCIsIGRlZmF1bHQ9Tm9uZSwgaGVscD0iUnVuIG9ubHkgdGhlIHNwZWNpZmllZCB0ZXN0IikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKyAgICBpZiBsZW4oYXJncykgPCAxOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIlBsZWFzZSBzcGVjaWZ5IHRoZSBicmFuY2ggdG8gcnVuIG9uLiBVc2Ugb3B0aW9uICctaCcgd2hlbiBpbiBkb3VidC4iKQorICAgIHJldHVybiAob3B0aW9ucywgYXJncykKKworCisKKworIyBsb2FkIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMKK2RlZiByZWFkX3NldHRpbmdzKCk6CisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGNvbmZpZy5TRVRUSU5HU19GSUxFKSBvciBub3Qgb3MucGF0aC5pc2ZpbGUoY29uZmlnLlNFVFRJTkdTX0ZJTEUpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNvbmZpZyBmaWxlICclcycgY2Fubm90IGJlIG9wZW5lbmQiICUgY29uZmlnLlNFVFRJTkdTX0ZJTEUpCisgICAgcmV0dXJuIGpzb24ubG9hZHMob3Blbihjb25maWcuU0VUVElOR1NfRklMRSwgInIiKS5yZWFkKCkpCisKKworIyBjbGVhbnVwICEKK2RlZiBjbGVhbl91cCh0ZXN0ZGlyKToKKyAgICBydW5fc2hlbGxfY21kKCJybSAtcmYgLS0gJyVzJyIgJSB0ZXN0ZGlyKQorCitkZWYgZHVtcF9pbmZvKHNldHRpbmdzLCBvcHRpb25zLCBhcmdzKToKKyAgICAiIiIgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudCBydW4gY29uZmlndXJhdGlvbiwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KKyAgICAiIiIKKyAgICBjb25maWcubG9nZ2VyLmRlYnVnKCJTZXR0aW5nczpcbiVzXG5PcHRpb25zOlxuJXNcbkFyZ3VtZW50czpcbiVzXG4iLCBzZXR0aW5ncywgb3B0aW9ucywgYXJncykKKworZGVmIG1haW4oKToKKyAgICAob3B0aW9ucywgYXJncykgPSB2YWxpZGF0ZV9hcmdzKCkKKworICAgIHNldHRpbmdzID0gcmVhZF9zZXR0aW5ncygpCisgICAgbmVlZF9jbGVhbnVwID0gRmFsc2UKKworICAgICMgZHVtcCBkZWJ1ZyBpbmZvCisgICAgZHVtcF9pbmZvKHNldHRpbmdzLCBvcHRpb25zLCBhcmdzKQorCisgICAgdGVzdGRpciA9IE5vbmUKKyAgICBub19mYWlsdXJlcyA9IDEKKyAgICB0cnk6CisgICAgICAgIGlmIG9wdGlvbnMudGVzdGRpciBpcyBub3QgTm9uZSBhbmQgb3MucGF0aC5leGlzdHMob3B0aW9ucy50ZXN0ZGlyKToKKyAgICAgICAgICAgIHRlc3RkaXIgPSBvcy5wYXRoLmFic3BhdGgob3B0aW9ucy50ZXN0ZGlyKQorICAgICAgICAgICAgY29uZmlnLmxvZ2dlci5pbmZvKCJObyBjaGVja291dCwgdXNpbmcgJXMiLCB0ZXN0ZGlyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmVlZF9jbGVhbnVwID0gVHJ1ZQorICAgICAgICAgICAgdGVzdGRpciA9IHNldF91cF90ZXN0X2JyYW5jaChzZXR0aW5ncywgYXJnc1swXSkgIyB3ZSBleHBlY3QgYSBicmFuY2ggbmFtZSBhcyBmaXJzdCBhcmd1bWVudAorCisgICAgICAgIGNvbmZpZy5URVNURElSID0gdGVzdGRpciAgICAjIHdlIGxldCB0ZXN0cyBrbm93IHdoZXJlIHRvIHJ1bgorCisgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIHRlc3QgZGlyIG9ubHkgY29udGFpbnMgbm8gKi5weWMgbGVmdG92ZXJzCisgICAgICAgIHJ1bl9zaGVsbF9jbWQoImZpbmQgJyVzJyAtdHlwZSBmIC1uYW1lICoucHljIC1leGVjIHJtIHt9IFxcOyIgJSB0ZXN0ZGlyKQorCisgICAgICAgIG5vX2ZhaWx1cmVzID0gZXhlY3V0ZV90ZXN0cyh0ZXN0ZGlyLCBvcHRpb25zLnNpbmdsZXRlc3QpCisKKyAgICBleGNlcHQgU2hlbGxDbWRFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIGNvbmZpZy5sb2dnZXIuZXJyb3IoIkVycm9yIHdoaWxlIHNldHRpbmcgdXAgdGVzdGluZy4gVHJhY2ViYWNrOiBcbiVzIiwgdHJhY2ViYWNrLmZvcm1hdF9leGMoZXhjKSkKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiBuZWVkX2NsZWFudXAgYW5kIHRlc3RkaXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjbGVhbl91cCh0ZXN0ZGlyKQorCisgICAgc3lzLmV4aXQobm9fZmFpbHVyZXMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvc2V0dGluZ3MuanNvbiBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9zZXR0aW5ncy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNjcxZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvc2V0dGluZ3MuanNvbgpAQCAtMCwwICsxLDUgQEAKK3sKKwkicmVwbyI6ICJnaXRAZ2l0LnlvY3RvcHJvamVjdC5vcmc6cG9reS1jb250cmliIiwKKwkibG9jYWxjbG9uZSI6ICIvaG9tZS9kZGFsZXgvc3NkL3lvY3RvL3Bva3kiLAorCSJ3b3JrZGlyIjogIi9ob21lL2RkYWxleC9zc2QveW9jdG8iCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvc2hlbGx1dGlscy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9zaGVsbHV0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMDEyZWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvc2hlbGx1dGlscy5weQpAQCAtMCwwICsxLDE0MSBAQAorIyEvdXNyL2Jpbi9weXRob24KKworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFsZXhhbmRydSBEYW1pYW4gZm9yIEludGVsIENvcnAuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisjIFV0aWxpdGllcyBzaGFyZWQgYnkgdGVzdHMgYW5kIG90aGVyIGNvbW1vbiBiaXRzIG9mIGNvZGUuCisKK2ltcG9ydCBzeXMsIG9zLCBzdWJwcm9jZXNzLCBmY250bCwgZXJybm8KK2ltcG9ydCBjb25maWcKK2Zyb20gY29uZmlnIGltcG9ydCBsb2dnZXIKKworCisjIExpY2Vuc2Ugd2FybmluZzsgdGhpcyBjb2RlIGlzIGNvcGllZCBmcm9tIHRoZSBCaXRCYWtlIHByb2plY3QsIGZpbGUgYml0YmFrZS9saWIvYmIvdXRpbHMucHkKKyMgVGhlIGNvZGUgaXMgb3JpZ2luYWxseSBsaWNlbnNlZCBHUEwtMi4wLCBhbmQgd2UgcmVkaXN0cmlidXRlIGl0IHVuZGVyIHN0aWxsIEdQTC0yLjAKKworIyBFbmQgb2YgY29weSBpcyBtYXJrZWQgd2l0aCAjRU5ET0ZDT1BZIG1hcmtlcgorCitkZWYgbWtkaXJoaWVyKGRpcmVjdG9yeSk6CisgICAgIiIiQ3JlYXRlIGEgZGlyZWN0b3J5IGxpa2UgJ21rZGlyIC1wJywgYnV0IGRvZXMgbm90IGNvbXBsYWluIGlmCisgICAgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIGxpa2Ugb3MubWFrZWRpcnMKKyAgICAiIiIKKworICAgIHRyeToKKyAgICAgICAgb3MubWFrZWRpcnMoZGlyZWN0b3J5KQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgaWYgZXhjLmVycm5vICE9IGVycm5vLkVFWElTVDoKKyAgICAgICAgICAgIHJhaXNlIGV4YworCitkZWYgbG9ja2ZpbGUobmFtZSwgc2hhcmVkPUZhbHNlLCByZXRyeT1UcnVlKToKKyAgICAiIiIKKyAgICBVc2UgdGhlIGZpbGUgZm4gYXMgYSBsb2NrIGZpbGUsIHJldHVybiB3aGVuIHRoZSBsb2NrIGhhcyBiZWVuIGFjcXVpcmVkLgorICAgIFJldHVybnMgYSB2YXJpYWJsZSB0byBwYXNzIHRvIHVubG9ja2ZpbGUoKS4KKyAgICAiIiIKKyAgICBjb25maWcubG9nZ2VyLmRlYnVnKCJ0YWtlIGxvY2tmaWxlICVzIiwgbmFtZSkKKyAgICBkaXJuYW1lID0gb3MucGF0aC5kaXJuYW1lKG5hbWUpCisgICAgbWtkaXJoaWVyKGRpcm5hbWUpCisKKyAgICBpZiBub3Qgb3MuYWNjZXNzKGRpcm5hbWUsIG9zLldfT0spOgorICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBhY3F1aXJlIGxvY2sgJyVzJywgZGlyZWN0b3J5IGlzIG5vdCB3cml0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICBuYW1lKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgb3BlcmF0aW9uID0gZmNudGwuTE9DS19FWAorICAgIGlmIHNoYXJlZDoKKyAgICAgICAgb3BlcmF0aW9uID0gZmNudGwuTE9DS19TSAorICAgIGlmIG5vdCByZXRyeToKKyAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uIHwgZmNudGwuTE9DS19OQgorCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgIyBJZiB3ZSBsZWF2ZSB0aGUgbG9ja2ZpbGVzIGx5aW5nIGFyb3VuZCB0aGVyZSBpcyBubyBwcm9ibGVtCisgICAgICAgICMgYnV0IHdlIHNob3VsZCBjbGVhbiB1cCBhZnRlciBvdXJzZWx2ZXMuIFRoaXMgZ2l2ZXMgcG90ZW50aWFsCisgICAgICAgICMgZm9yIHJhY2VzIHRob3VnaC4gVG8gd29yayBhcm91bmQgdGhpcywgd2hlbiB3ZSBhY3F1aXJlIHRoZSBsb2NrCisgICAgICAgICMgd2UgY2hlY2sgdGhlIGZpbGUgd2UgbG9ja2VkIHdhcyBzdGlsbCB0aGUgbG9jayBmaWxlIG9uIGRpc2suCisgICAgICAgICMgYnkgY29tcGFyaW5nIGlub2RlIG51bWJlcnMuIElmIHRoZXkgZG9uJ3QgbWF0Y2ggb3IgdGhlIGxvY2tmaWxlCisgICAgICAgICMgbm8gbG9uZ2VyIGV4aXN0cywgd2Ugc3RhcnQgYWdhaW4uCisKKyAgICAgICAgIyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIHVuZmFpciBzaW5jZSB0aGUgbGFzdCBwZXJzb24gdG8gcmVxdWVzdCB0aGUKKyAgICAgICAgIyBsb2NrIGlzIHRoZSBtb3N0IGxpa2VseSB0byB3aW4gaXQuCisKKyAgICAgICAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CisgICAgICAgICMgd2UgZGlzYWJsZSB0aGUgYnJvYWQtZXhjZXB0IGJlY2F1c2Ugd2Ugd2FudCB0byBhY3R1YWxseSBjYXRjaCBhbGwgcG9zc2libGUgZXhjZXB0aW9ucworICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2NrX2ZpbGUgPSBvcGVuKG5hbWUsICdhKycpCisgICAgICAgICAgICBmaWxlbm8gPSBsb2NrX2ZpbGUuZmlsZW5vKCkKKyAgICAgICAgICAgIGZjbnRsLmZsb2NrKGZpbGVubywgb3BlcmF0aW9uKQorICAgICAgICAgICAgc3RhdGluZm8gPSBvcy5mc3RhdChmaWxlbm8pCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsb2NrX2ZpbGUubmFtZSk6CisgICAgICAgICAgICAgICAgc3RhdGluZm8yID0gb3Muc3RhdChsb2NrX2ZpbGUubmFtZSkKKyAgICAgICAgICAgICAgICBpZiBzdGF0aW5mby5zdF9pbm8gPT0gc3RhdGluZm8yLnN0X2lubzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2tfZmlsZQorICAgICAgICAgICAgbG9ja19maWxlLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbG9ja19maWxlLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjMjoKKyAgICAgICAgICAgICAgICBjb25maWcubG9nZ2VyLmVycm9yKCJGYWlsZWQgdG8gY2xvc2UgdGhlIGxvY2tmaWxlOiAlcyIsIGV4YzIpCisgICAgICAgICAgICBjb25maWcubG9nZ2VyLmVycm9yKCJGYWlsZWQgdG8gYWNxdWlyZSB0aGUgbG9ja2ZpbGU6ICVzIiwgZXhjKQorICAgICAgICBpZiBub3QgcmV0cnk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCitkZWYgdW5sb2NrZmlsZShsb2NrX2ZpbGUpOgorICAgICIiIgorICAgIFVubG9jayBhIGZpbGUgbG9ja2VkIHVzaW5nIGxvY2tmaWxlKCkKKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgICMgSWYgd2UgaGFkIGEgc2hhcmVkIGxvY2ssIHdlIG5lZWQgdG8gcHJvbW90ZSB0byBleGNsdXNpdmUgYmVmb3JlCisgICAgICAgICMgcmVtb3ZpbmcgdGhlIGxvY2tmaWxlLiBBdHRlbXB0IHRoaXMsIGlnbm9yZSBmYWlsdXJlcy4KKyAgICAgICAgZmNudGwuZmxvY2sobG9ja19maWxlLmZpbGVubygpLCBmY250bC5MT0NLX0VYfGZjbnRsLkxPQ0tfTkIpCisgICAgICAgIG9zLnVubGluayhsb2NrX2ZpbGUubmFtZSkKKyAgICBleGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpOgorICAgICAgICBwYXNzCisgICAgZmNudGwuZmxvY2sobG9ja19maWxlLmZpbGVubygpLCBmY250bC5MT0NLX1VOKQorICAgIGxvY2tfZmlsZS5jbG9zZSgpCisKKyNFTkRPRkNPUFkKKworCitkZWYgbWtfbG9ja19maWxlbmFtZSgpOgorICAgIG91cl9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShfX2ZpbGVfXykKKyAgICBvdXJfbmFtZSA9ICIuJXMiICUgIi4iLmpvaW4ocmV2ZXJzZWQob3VyX25hbWUuc3BsaXQoIi4iKSkpCisgICAgcmV0dXJuIGNvbmZpZy5MT0NLRklMRSArIG91cl9uYW1lCisKKworCitjbGFzcyBTaGVsbENtZEV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgIHBhc3MKKworZGVmIHJ1bl9zaGVsbF9jbWQoY29tbWFuZCwgY3dkPU5vbmUpOgorICAgIGlmIGN3ZCBpcyBOb25lOgorICAgICAgICBjd2QgPSBvcy5nZXRjd2QoKQorCisgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygiX3NoZWxsY21kOiAoJXMpICVzIiwgY3dkLCBjb21tYW5kKQorICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKGNvbW1hbmQsIGN3ZD1jd2QsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgKG91dCwgZXJyKSA9IHByb2Nlc3MuY29tbXVuaWNhdGUoKQorICAgIHByb2Nlc3Mud2FpdCgpCisgICAgaWYgcHJvY2Vzcy5yZXR1cm5jb2RlOgorICAgICAgICBpZiBsZW4oZXJyKSA9PSAwOgorICAgICAgICAgICAgZXJyID0gImNvbW1hbmQ6ICVzIFxuJXMiICUgKGNvbW1hbmQsIG91dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVyciA9ICJjb21tYW5kOiAlcyBcbiVzIiAlIChjb21tYW5kLCBlcnIpCisgICAgICAgIGNvbmZpZy5sb2dnZXIud2FybigiX3NoZWxsY21kOiBlcnJvciBcbiVzXG4lcyIsIG91dCwgZXJyKQorICAgICAgICByYWlzZSBTaGVsbENtZEV4Y2VwdGlvbihlcnIpCisgICAgZWxzZToKKyAgICAgICAgI2NvbmZpZy5sb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogc2hlbGxjbWQgc3VjY2Vzc1xuJXMiICUgb3V0KQorICAgICAgICByZXR1cm4gb3V0CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy90ZXN0cy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy90ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTEwZWJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3Rlc3RzLnB5CkBAIC0wLDAgKzEsMTE1IEBACisjIS91c3IvYmluL3B5dGhvbgorCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTUgQWxleGFuZHJ1IERhbWlhbiBmb3IgSW50ZWwgQ29ycC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKworIyBUZXN0IGRlZmluaXRpb25zLiBUaGUgcnVubmVyIHdpbGwgbG9vayBmb3IgYW5kIGF1dG8tZGlzY292ZXIgdGhlIHRlc3RzCisjIG5vIG1hdHRlciB3aGF0IHRoZXkgZmlsZSBhcmUgdGhleSBpbiwgYXMgbG9uZyBhcyB0aGV5IGFyZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKKyMgYXMgdGhpcyBmaWxlLgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gc2hlbGx1dGlscyBpbXBvcnQgcnVuX3NoZWxsX2NtZCwgU2hlbGxDbWRFeGNlcHRpb24KK2ltcG9ydCBjb25maWcKKworaW1wb3J0IHBleHBlY3QKK2ltcG9ydCBzeXMsIG9zLCBzaWduYWwsIHRpbWUKKworY2xhc3MgVGVzdDAwUHlDb21waWxhYmxlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAnJycgVmVyaWZpZXMgdGhhdCBhbGwgUHl0aG9uIGZpbGVzIGFyZSBzeW50YWN0aWNhbGx5IGNvcnJlY3QgJycnCisgICAgZGVmIHRlc3RfY29tcGlsZV9maWxlKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBydW5fc2hlbGxfY21kKCJmaW5kIC4gLW5hbWUgKnB5IC10eXBlIGYgLXByaW50MCB8IHhhcmdzIC0wIC1uMSAtUDIwIHB5dGhvbiAtbSBweV9jb21waWxlIiwgY29uZmlnLlRFU1RESVIpCisgICAgICAgIGV4Y2VwdCBTaGVsbENtZEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkVycm9yIGNvbXBpbGluZyBweXRob24gZmlsZXM6ICVzIiAlIChleGMpKQorCisgICAgZGVmIHRlc3RfcHlsaW50X2ZpbGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJ1bl9zaGVsbF9jbWQociJmaW5kIC4gLWluYW1lIFwiKlwucHlcIiAtdHlwZSBmIC1wcmludDAgfCBQWVRIT05QQVRIPSR7UFlUSE9OUEFUSH06LiB4YXJncyAtciAtMCAtbjEgcHlsaW50IC0tbG9hZC1wbHVnaW5zIHB5bGludF9kamFuZ28gLUUgLS1yZXBvcnRzPW4gMj4mMSIsIGN3ZD1jb25maWcuVEVTVERJUiArICIvYml0YmFrZS9saWIvdG9hc3RlciIpCisgICAgICAgIGV4Y2VwdCBTaGVsbENtZEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlB5bGludCBmYWlsczogJXNcbiIgJSBleGMpCisKK2NsYXNzIFRlc3QwMVB5U3lzdGVtU3RhcnQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICcnJyBBdHRlbXB0cyB0byBzdGFydCBUb2FzdGVyLCB2ZXJpZnkgdGhhdCBpdCBpcyBzdWNjZXNmdWxsLCBhbmQgc3RvcCBpdCAnJycKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHJ1bl9zaGVsbF9jbWQoImJhc2ggLWMgJ3JtIC1mIGJ1aWxkLypsb2cnIikKKworICAgIGRlZiB0ZXN0X3N0YXJ0X2ludGVyYWN0aXZlX21vZGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJ1bl9zaGVsbF9jbWQoImJhc2ggLWMgJ3NvdXJjZSAlcy9vZS1pbml0LWJ1aWxkLWVudiAmJiBzb3VyY2UgdG9hc3RlciBzdGFydCB3ZWJwb3J0PSVkICYmIHNvdXJjZSB0b2FzdGVyIHN0b3AnIiAlIChjb25maWcuVEVTVERJUiwgY29uZmlnLlRPQVNURVJfUE9SVCksIGNvbmZpZy5URVNURElSKQorICAgICAgICBleGNlcHQgU2hlbGxDbWRFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJGYWlsZWQgc3RhcnRpbmcgaW50ZXJhY3RpdmUgbW9kZTogJXMiICUgKGV4YykpCisKKyAgICBkZWYgdGVzdF9zdGFydF9tYW5hZ2VkX21vZGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJ1bl9zaGVsbF9jbWQoIiVzL2JpdGJha2UvYmluL3RvYXN0ZXIgd2VicG9ydD0lZCBub2Jyb3dzZXIgJiBzbGVlcCAxMCAmJiBjdXJsIGh0dHA6Ly9sb2NhbGhvc3Q6JWQvICYmIGtpbGwgLTIgJSUxIiAlIChjb25maWcuVEVTVERJUiwgY29uZmlnLlRPQVNURVJfUE9SVCwgY29uZmlnLlRPQVNURVJfUE9SVCksIGNvbmZpZy5URVNURElSKQorICAgICAgICBleGNlcHQgU2hlbGxDbWRFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJGYWlsZWQgc3RhcnRpbmcgbWFuYWdlZCBtb2RlOiAlcyIgJSAoZXhjKSkKKworY2xhc3MgVGVzdDAySFRNTDVDb21wbGlhbmNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYub3JpZ2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIHNlbGYuY3J0ZGlyID0gb3MucGF0aC5kaXJuYW1lKGNvbmZpZy5URVNURElSKQorICAgICAgICBzZWxmLmNsZWFudXBfZGF0YWJhc2UgPSBGYWxzZQorICAgICAgICBvcy5jaGRpcihzZWxmLmNydGRpcikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLmNydGRpciwgInRvYXN0ZXIuc3FsaXRlIikpOgorICAgICAgICAgICAgc2VsZi5jbGVhbnVwX2RhdGFiYXNlID0gVHJ1ZQorICAgICAgICAgICAgcnVuX3NoZWxsX2NtZCgiJXMvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgc3luY2RiIC0tbm9pbnB1dCIgJSBjb25maWcuVEVTVERJUikKKyAgICAgICAgICAgIHJ1bl9zaGVsbF9jbWQoIiVzL2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IG1pZ3JhdGUgb3JtIiAlIGNvbmZpZy5URVNURElSKQorICAgICAgICAgICAgcnVuX3NoZWxsX2NtZCgiJXMvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbWlncmF0ZSBibGRjb250cm9sIiAlIGNvbmZpZy5URVNURElSKQorICAgICAgICAgICAgcnVuX3NoZWxsX2NtZCgiJXMvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbG9hZGNvbmYgJXMvbWV0YS15b2N0by9jb25mL3RvYXN0ZXJjb25mLmpzb24iICUgKGNvbmZpZy5URVNURElSLCBjb25maWcuVEVTVERJUikpCisgICAgICAgICAgICBydW5fc2hlbGxfY21kKCIlcy9iaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBsc3VwZGF0ZXMiICUgY29uZmlnLlRFU1RESVIpCisKKyAgICAgICAgICAgIHNldHVwID0gcGV4cGVjdC5zcGF3bigiJXMvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgY2hlY2tzZXR0aW5ncyIgJSBjb25maWcuVEVTVERJUikKKyAgICAgICAgICAgIHNldHVwLmxvZ2ZpbGUgPSBzeXMuc3Rkb3V0CisgICAgICAgICAgICBzZXR1cC5leHBlY3QociIuKm9yIHR5cGUgdGhlIGZ1bGwgcGF0aCB0byBhIGRpZmZlcmVudCBkaXJlY3Rvcnk6ICIpCisgICAgICAgICAgICBzZXR1cC5zZW5kbGluZSgnJykKKyAgICAgICAgICAgIHNldHVwLnNlbmRsaW5lKCcnKQorICAgICAgICAgICAgc2V0dXAuZXhwZWN0KHIiLipvciB0eXBlIHRoZSBmdWxsIHBhdGggdG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5OiAiKQorICAgICAgICAgICAgc2V0dXAuc2VuZGxpbmUoJycpCisgICAgICAgICAgICBzZXR1cC5leHBlY3QociJFbnRlciB5b3VyIG9wdGlvbjogIikKKyAgICAgICAgICAgIHNldHVwLnNlbmRsaW5lKCcwJykKKworICAgICAgICBzZWxmLmNoaWxkID0gcGV4cGVjdC5zcGF3bigiYmFzaCIsIFsiJXMvYml0YmFrZS9iaW4vdG9hc3RlciIgJSBjb25maWcuVEVTVERJUiwgIndlYnBvcnQ9JWQiICUgY29uZmlnLlRPQVNURVJfUE9SVCwgIm5vYnJvd3NlciJdLCBjd2Q9c2VsZi5jcnRkaXIpCisgICAgICAgIHNlbGYuY2hpbGQubG9nZmlsZSA9IHN5cy5zdGRvdXQKKyAgICAgICAgc2VsZi5jaGlsZC5leHBlY3QoIlRvYXN0ZXIgaXMgbm93IHJ1bm5pbmcuIFlvdSBjYW4gc3RvcCBpdCB3aXRoIEN0cmwtQyIpCisKKyAgICBkZWYgdGVzdF9odG1sNV9jb21wbGlhbmNlKHNlbGYpOgorICAgICAgICBpbXBvcnQgdXJsbGlzdCwgdXJsY2hlY2sKKyAgICAgICAgcmVzdWx0cyA9IHt9CisgICAgICAgIGZvciB1cmwgaW4gdXJsbGlzdC5VUkxTOgorICAgICAgICAgICAgcmVzdWx0c1t1cmxdID0gdXJsY2hlY2sudmFsaWRhdGVfaHRtbDUoY29uZmlnLlRPQVNURVJfQkFTRVVSTCArIHVybCkKKworICAgICAgICBmYWlsZWQgPSBbXQorICAgICAgICBmb3IgdXJsIGluIHJlc3VsdHM6CisgICAgICAgICAgICBpZiByZXN1bHRzW3VybF1bMV0gIT0gMDoKKyAgICAgICAgICAgICAgICBmYWlsZWQuYXBwZW5kKCh1cmwsIHJlc3VsdHNbdXJsXSkpCisKKworICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGZhaWxlZCkgPT0gMCwgIk5vdCBhbGwgVVJMcyB2YWxpZGF0ZTogXG4lcyAiICUgIlxuIi5qb2luKFsiIi5qb2luKHN0cih4KSkgZm9yIHggaW4gZmFpbGVkXSkpCisKKyAgICAgICAgIyhjb25maWcuVE9BU1RFUl9CQVNFVVJMICsgdXJsLCBzdGF0dXMsIGVycm9ycywgd2FybmluZ3MpKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB3aGlsZSBzZWxmLmNoaWxkLmlzYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYuY2hpbGQua2lsbChzaWduYWwuU0lHSU5UKQorICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICBvcy5jaGRpcihzZWxmLm9yaWdkaXIpCisgICAgICAgIHRvYXN0ZXJfc3FsaXRlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5jcnRkaXIsICJ0b2FzdGVyLnNxbGl0ZSIpCisgICAgICAgIGlmIHNlbGYuY2xlYW51cF9kYXRhYmFzZSBhbmQgb3MucGF0aC5leGlzdHModG9hc3Rlcl9zcWxpdGVfcGF0aCk6CisgICAgICAgICAgICBvcy5yZW1vdmUodG9hc3Rlcl9zcWxpdGVfcGF0aCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy90b2FzdGVydWl0ZXN0L3J1bl90b2FzdGVydGVzdHMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdG9hc3RlcnVpdGVzdC9ydW5fdG9hc3RlcnRlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg4MDQ4N2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdG9hc3RlcnVpdGVzdC9ydW5fdG9hc3RlcnRlc3RzLnB5CkBAIC0wLDAgKzEsODcgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisKKyMgQ29weXJpZ2h0CisKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBpcyBzY3JpcHQgZm9yIHJ1bm5pbmcgYWxsIHNlbGVjdGVkIHRvYXN0ZXIgY2FzZXMgb24KKyMgc2VsZWN0ZWQgd2ViIGJyb3dzZXJzIG1hbmlmZXN0ZWQgaW4gdG9hc3Rlcl90ZXN0LmNmZy4KKworIyAxLiBIb3cgdG8gc3RhcnQgdG9hc3RlciBpbiB5b2N0bzoKKyMgJCBzb3VyY2UgcG9reS9vZS1pbml0LWJ1aWxkLWVudgorIyAkIHNvdXJjZSB0b2FzdGVyIHN0YXJ0CisjICQgYml0YmFrZSBjb3JlLWltYWdlLW1pbmltYWwKKworIyAyLiBIb3cgdG8gaW5zdGFsbCBzZWxlbml1bSBvbiBVYnVudHU6CisjICQgc3VkbyBhcHQtZ2V0IGluc3RhbGwgc2Nyb3QgcHl0aG9uLXBpcAorIyAkIHN1ZG8gcGlwIGluc3RhbGwgc2VsZW5pdW0KKworIyAzLiBIb3cgdG8gaW5zdGFsbCBzZWxlbml1bSBhZGRvbiBpbiBmaXJlZm94OgorIyBEb3dubG9hZCB0aGUgbGFzdGVzdCBmaXJlZm94IGFkZG9uIGZyb20gaHR0cDovL3JlbGVhc2Uuc2VsZW5pdW1ocS5vcmcvc2VsZW5pdW0taWRlLworIyBUaGVuIGluc3RhbGwgaXQuIFlvdSBjYW4gYWxzbyBpbnN0YWxsIGZpcmVidWcgYW5kIGZpcmVwYXRoIGFkZG9uCisKKyMgNC4gSG93IHRvIHN0YXJ0IHdyaXRpbmcgYSBuZXcgY2FzZToKKyMgQWxsIHlvdSBuZWVkIHRvIGRvIGlzIHRvIGltcGxlbWVudCB0aGUgZnVuY3Rpb24gdGVzdF94eHgoKSBhbmQgIHBpbGUgaXQgb24uCisKKyMgNS4gSG93IHRvIHRlc3Qgd2l0aCBDaHJvbWUgYnJvd3NlcgorIyBEb3dubG9hZC9pbnN0YWxsIGNocm9tZSBvbiBob3N0CisjIERvd25sb2FkIGNocm9tZWRyaXZlciBmcm9tIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21lZHJpdmVyL2Rvd25sb2Fkcy9saXN0ICBhY2NvcmRpbmcgdG8geW91ciBob3N0IHR5cGUKKyMgcHV0IGNocm9tZWRyaXZlciBpbiBQQVRILCAoZS5nLiAvdXNyL2Jpbi8sIGJlYXIgaW4gbWluZCB0byBjaG1vZCkKKyMgRm9yIHdpbmRvd3MgaG9zdCwgeW91IG1heSBwdXQgY2hyb21lZHJpdmVyLmV4ZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgY2hyb21lLmV4ZQorCisKK2ltcG9ydCB1bml0dGVzdCwgdGltZSwgcmUsIHN5cywgZ2V0b3B0LCBvcywgbG9nZ2luZywgcGxhdGZvcm0KK2ltcG9ydCBDb25maWdQYXJzZXIKK2ltcG9ydCBzdWJwcm9jZXNzCisKKworY2xhc3MgdG9hc3Rlcl9ydW5fYWxsKCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAjIGluIGNhc2UgdGhpcyBzY3JpcHQgaXMgY2FsbGVkIGZyb20gb3RoZXIgZGlyZWN0b3J5CisgICAgICAgIG9zLmNoZGlyKG9zLnBhdGguYWJzcGF0aChzeXMucGF0aFswXSkpCisgICAgICAgIHNlbGYuc3RhcnR0aW1lID0gdGltZS5zdHJwdGltZSh0aW1lLmN0aW1lKCkpCisgICAgICAgIHNlbGYucGFyc2VyID0gQ29uZmlnUGFyc2VyLlNhZmVDb25maWdQYXJzZXIoKQorICAgICAgICBmb3VuZCA9IHNlbGYucGFyc2VyLnJlYWQoJ3RvYXN0ZXJfdGVzdC5jZmcnKQorICAgICAgICBzZWxmLmhvc3Rfb3MgPSBwbGF0Zm9ybS5zeXN0ZW0oKS5sb3dlcigpCisgICAgICAgIHNlbGYucnVuX2FsbF9jYXNlcygpCisgICAgICAgIHNlbGYuY29sbGVjdF9sb2coKQorCisgICAgZGVmIGdldF90ZXN0X2Nhc2VzKHNlbGYpOgorICAgICAgICAjIHdlIGhhdmUgY29uZmlnIGdyb3VwcyBmb3IgZGlmZmVyZW50IG9zIHR5cGUgaW4gdG9hc3Rlcl90ZXN0LmNmZworICAgICAgICBjYXNlc190b19ydW4gPSBldmFsKHNlbGYucGFyc2VyLmdldCgndG9hc3Rlcl90ZXN0XycgKyBzZWxmLmhvc3Rfb3MsICd0ZXN0X2Nhc2VzJykpCisgICAgICAgIHJldHVybiBjYXNlc190b19ydW4KKworCisgICAgZGVmIHJ1bl9hbGxfY2FzZXMoc2VsZik6CisgICAgICAgIGNhc2VzX3RlbXAgPSBzZWxmLmdldF90ZXN0X2Nhc2VzKCkKKyAgICAgICAgZm9yIGNhc2UgaW4gY2FzZXNfdGVtcDoKKyAgICAgICAgICAgIHNpbmdsZV9jYXNlX2NtZCA9ICJweXRob24gLW0gdW5pdHRlc3QgdG9hc3Rlcl9hdXRvbWF0aW9uX3Rlc3QudG9hc3Rlcl9jYXNlcy50ZXN0XyIgKyBzdHIoY2FzZSkKKyAgICAgICAgICAgIHByaW50IHNpbmdsZV9jYXNlX2NtZAorICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKHNpbmdsZV9jYXNlX2NtZCwgc2hlbGw9VHJ1ZSkKKworICAgIGRlZiBjb2xsZWN0X2xvZyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIHRoZSBsb2cgZmlsZXMgYXJlIHRlbXBvcmFyaWx5IHN0b3JlZCBpbiAuL2xvZy90bXAvLi4KKyAgICAgICAgQWZ0ZXIgYWxsIGNhc2VzIGFyZSBkb25lLCB0aGV5IHNob3VsZCBiZSB0cmFuc2ZlcmVkIHRvIC4vbG9nLyRUSU1FU1RBTVAvCisgICAgICAgICIiIgorICAgICAgICBkZWYgY29tcGxlKG51bWJlcik6CisgICAgICAgICAgICBpZiBudW1iZXIgPCAxMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RyKDApICsgc3RyKG51bWJlcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0cihudW1iZXIpCisgICAgICAgIG5vdyA9IHNlbGYuc3RhcnR0aW1lCisgICAgICAgIG5vd19zdHIgPSBjb21wbGUobm93LnRtX3llYXIpICsgY29tcGxlKG5vdy50bV9tb24pICsgY29tcGxlKG5vdy50bV9tZGF5KSArIFwKKyAgICAgICAgICAgICAgICAgIGNvbXBsZShub3cudG1faG91cikgKyBjb21wbGUobm93LnRtX21pbikgKyBjb21wbGUobm93LnRtX3NlYykKKyAgICAgICAgbG9nX2RpciA9IG9zLnBhdGguYWJzcGF0aChzeXMucGF0aFswXSkgKyBvcy5zZXAgKyAnbG9nJyArIG9zLnNlcCArIG5vd19zdHIKKyAgICAgICAgbG9nX3RtcF9kaXIgPSBvcy5wYXRoLmFic3BhdGgoc3lzLnBhdGhbMF0pICsgb3Muc2VwICsgJ2xvZycgKyBvcy5zZXAgKyAndG1wJworICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5yZW5hbWVzKGxvZ190bXBfZGlyLCBsb2dfZGlyKQorICAgICAgICBleGNlcHQgT1NFcnJvciA6CisgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCIgQ2Fubm90IGNyZWF0ZSBsb2cgZGlyKHRpbWVzdGFtcCkgIHVuZGVyIGxvZywgcGxlYXNlIGNoZWNrIHlvdXIgcHJpdmlsZWdlIikKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRvYXN0ZXJfcnVuX2FsbCgpCisKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy90b2FzdGVydWl0ZXN0L3RvYXN0ZXJfYXV0b21hdGlvbl90ZXN0LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3RvYXN0ZXJ1aXRlc3QvdG9hc3Rlcl9hdXRvbWF0aW9uX3Rlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmEyMDc4ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy90b2FzdGVydWl0ZXN0L3RvYXN0ZXJfYXV0b21hdGlvbl90ZXN0LnB5CkBAIC0wLDAgKzEsMTg4MyBAQAorIyEvdXNyL2Jpbi9weXRob24KKyMgQ29weXJpZ2h0CisKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBpcyB0b2FzdGVyIGF1dG9tYXRpb24gYmFzZSBjbGFzcyBhbmQgdGVzdCBjYXNlcyBmaWxlCisKKyMgSGlzdG9yeToKKyMgMjAxNS4wMy4wOSAgaW5pdGFsIHZlcnNpb24KKyMgMjAxNS4wMy4yMyAgYWRkaW5nIHRvYXN0ZXJfdGVzdC5jZmcsIHJ1bl90b2FzdGVydGVzdC5weSBzbyB3ZSBjYW4gcnVuIGNhc2UgYnkgY2FzZSBmcm9tIG91dHNpZGUKKworIyBCcmllZnM6CisjIFRoaXMgZmlsZSBpcyBjb21wcmlzZWQgb2YgMyBwYXJ0czoKKyMgSTogICBjb21tb24gdXRpbHMgbGlrZSBzb3J0aW5nLCBnZXR0aW5nIGF0dHJpYnV0ZS4uIGV0YworIyBJSTogIGJhc2UgY2xhc3MgcGFydCwgd2hpY2ggY29tcGxpZXMgd2l0aCB1bml0dGVzdCBmcmFtZSB3b3JrIGFuZAorIyAgICAgIGNvbnRhaW5zIGNsYXNzIHNlbGVuaXVtLWJhc2VkIGZ1bmN0aW9ucworIyBJSUk6IHRlc3QgY2FzZXMKKyMgICAgICB0byBhZGQgbmV3IGNhc2U6IGp1c3QgaW1wbGVtZW50IG5ldyB0ZXN0X3h4eCgpIGZ1bmN0aW9uIGluIGNsYXNzIHRvYXN0ZXJfY2FzZXMKKworIyBOT1RFUyBmb3IgY2FzZXM6CisjIGNhc2UgOTQ2OgorIyBzdGVwIDYgLSA4IG5lZWRzIHRvIGJlIG9ic2VydmVkIHVzaW5nIHNjcmVlbnNob3RzCisjIGNhc2UgOTU2OgorIyBzdGVwIDIgLSAzIG5lZWRzIHRvIGJlIHJ1biBtYW51YWxseQorCitpbXBvcnQgdW5pdHRlc3QsIHRpbWUsIHJlLCBzeXMsIGdldG9wdCwgb3MsIGxvZ2dpbmcsIHN0cmluZywgZXJybm8sIGV4Y2VwdGlvbnMKK2ltcG9ydCBzaHV0aWwsIGFyZ3BhcnNlLCBDb25maWdQYXJzZXIsIHBsYXRmb3JtCitmcm9tIHNlbGVuaXVtIGltcG9ydCB3ZWJkcml2ZXIKK2Zyb20gc2VsZW5pdW0uY29tbW9uLmV4Y2VwdGlvbnMgaW1wb3J0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24KK2Zyb20gc2VsZW5pdW0gaW1wb3J0IHNlbGVuaXVtCitmcm9tIHNlbGVuaXVtLndlYmRyaXZlci5jb21tb24uYnkgaW1wb3J0IEJ5Citmcm9tIHNlbGVuaXVtLndlYmRyaXZlci5jb21tb24ua2V5cyBpbXBvcnQgS2V5cworZnJvbSBzZWxlbml1bS53ZWJkcml2ZXIuc3VwcG9ydC51aSBpbXBvcnQgU2VsZWN0CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQQVJUIEk6IHV0aWxzIHN0dWZmICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjbGFzcyBMaXN0YXR0cihvYmplY3QpOgorICAgICIiIgorICAgIFNldCBvZiBsaXN0IGF0dHJpYnV0ZS4gVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSB3aGF0IHRoZSBsaXN0IGNvbnRlbnQgaXMuCisgICAgTGF0ZXIgb24gd2UgbWF5IGFkZCBtb3JlIGF0dHJpYnV0ZXMgaGVyZS4KKyAgICAiIiIKKyAgICBOVUxMID0gIm51bGwiCisgICAgTlVNQkVSUyA9ICJudW1iZXJzIgorICAgIFNUUklOR1MgPSAic3RyaW5ncyIKKyAgICBQRVJDRU5UID0gInBlcmNlbnRhZ2UiCisgICAgU0laRSA9ICJzaXplIgorICAgIFVOS05PV04gPSAidW5rbm93biIKKworCitkZWYgZ2V0X2xvZ19yb290X2RpcigpOgorICAgIG1heF9kZXB0aCA9IDUKKyAgICBwYXJlbnRfZGlyID0gJy4uLycKKyAgICBmb3IgbnVtYmVyIGluIHJhbmdlKDAsIG1heF9kZXB0aCk6CisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc3lzLnBhdGhbMF0gKyBvcy5zZXAgKyAob3MucGFyZGlyICsgb3Muc2VwKSpudW1iZXIgKyAnbG9nJyk6CisgICAgICAgICAgICBsb2dfcm9vdF9kaXIgPSBvcy5wYXRoLmFic3BhdGgoc3lzLnBhdGhbMF0gKyBvcy5zZXAgKyAob3MucGFyZGlyICsgb3Muc2VwKSpudW1iZXIgKyAnbG9nJykKKyAgICAgICAgICAgIGJyZWFrCisKKyAgICBpZiBudW1iZXIgPT0gKG1heF9kZXB0aCAtIDEpOgorICAgICAgICBwcmludCAnTm8gbG9nIGRpciBmb3VuZC4gUGxlYXNlIGNoZWNrJworICAgICAgICByYWlzZSBFeGNlcHRpb24KKworICAgIHJldHVybiBsb2dfcm9vdF9kaXIKKworCitkZWYgbWtkaXJfcChkaXIpOgorICAgIHRyeToKKyAgICAgICAgb3MubWFrZWRpcnMoZGlyKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVFWElTVCBhbmQgb3MucGF0aC5pc2RpcihkaXIpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UKKworCitkZWYgZ2V0X2xpc3RfYXR0cih0ZXN0bGlzdCk6CisgICAgIiIiCisgICAgVG8gZGV0ZXJtaW5lIHRoZSBsaXN0IGNvbnRlbnQKKyAgICAiIiIKKyAgICBpZiBub3QgdGVzdGxpc3Q6CisgICAgICAgIHJldHVybiBMaXN0YXR0ci5OVUxMCisgICAgbGlzdHRlc3QgPSB0ZXN0bGlzdFs6XQorICAgIHRyeToKKyAgICAgICAgbGlzdHRlc3QucmVtb3ZlKCcnKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICBwYXNzCisgICAgcGF0dGVybl9wZXJjZW50ID0gcmUuY29tcGlsZShyIl4oWzAtOV0pKyhcLik/KFswLTldKSolJCIpCisgICAgcGF0dGVybl9zaXplID0gcmUuY29tcGlsZShyIl4oWzAtOV0pKyhcLik/KFswLTldKSooICkqKEspKihNKSooRykqQiQiKQorICAgIHBhdHRlcm5fbnVtYmVyID0gcmUuY29tcGlsZShyIl4oWzAtOV0pKyhcLik/KFswLTldKSokIikKKyAgICBkZWYgZ2V0X3BhdHRlcm5lZF9udW1iZXIocGF0dGVybiwgdGxpc3QpOgorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgZm9yIGl0ZW0gaW4gdGxpc3Q6CisgICAgICAgICAgICBpZiByZS5zZWFyY2gocGF0dGVybiwgaXRlbSk6CisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICByZXR1cm4gY291bnQKKyAgICBpZiBnZXRfcGF0dGVybmVkX251bWJlcihwYXR0ZXJuX3BlcmNlbnQsIGxpc3R0ZXN0KSA9PSBsZW4obGlzdHRlc3QpOgorICAgICAgICByZXR1cm4gTGlzdGF0dHIuUEVSQ0VOVAorICAgIGVsaWYgZ2V0X3BhdHRlcm5lZF9udW1iZXIocGF0dGVybl9zaXplLCBsaXN0dGVzdCkgPT0gbGVuKGxpc3R0ZXN0KToKKyAgICAgICAgcmV0dXJuIExpc3RhdHRyLlNJWkUKKyAgICBlbGlmIGdldF9wYXR0ZXJuZWRfbnVtYmVyKHBhdHRlcm5fbnVtYmVyLCBsaXN0dGVzdCkgPT0gbGVuKGxpc3R0ZXN0KToKKyAgICAgICAgcmV0dXJuIExpc3RhdHRyLk5VTUJFUlMKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gTGlzdGF0dHIuU1RSSU5HUworCisKK2RlZiBpc19saXN0X3NlcXVlbmNlZCh0ZXN0bGlzdCk6CisgICAgIiIiCisgICAgRnVuY3Rpb24gdG8gdGVsbCBpZiBsaXN0IGlzIHNlcXVlbmNlZAorICAgIEN1cnJlbnRseSB3ZSBtYXkgaGF2ZSBsaXN0IG1hZGUgdXAgb2Y6IFN0cmluZ3MgOyBudW1iZXJzIDsgcGVyY2VudGFnZSA7IHRpbWU7IHNpemUKKyAgICBFYWNoIGhhcyByZXNwZWN0aXZlIHdheSB0byBkZXRlcm1pbmUgaWYgaXQncyBzZXF1ZW5jZWQuCisgICAgIiIiCisgICAgdGVzdF9saXN0ID0gdGVzdGxpc3RbOl0KKyAgICB0cnk6CisgICAgICAgIHRlc3RfbGlzdC5yZW1vdmUoJycpCisgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgIHBhc3MKKworICAgIGlmIGdldF9saXN0X2F0dHIodGVzdGxpc3QpID09IExpc3RhdHRyLk5VTEwgOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZWxpZiBnZXRfbGlzdF9hdHRyKHRlc3RsaXN0KSA9PSBMaXN0YXR0ci5TVFJJTkdTIDoKKyAgICAgICAgcmV0dXJuIChzb3J0ZWQodGVzdF9saXN0KSA9PSB0ZXN0X2xpc3QpCisKKyAgICBlbGlmIGdldF9saXN0X2F0dHIodGVzdGxpc3QpID09IExpc3RhdHRyLk5VTUJFUlMgOgorICAgICAgICBsaXN0X251bWJlciA9IFtdCisgICAgICAgIGZvciBpdGVtIGluIHRlc3RfbGlzdDoKKyAgICAgICAgICAgIGxpc3RfbnVtYmVyLmFwcGVuZChldmFsKGl0ZW0pKQorICAgICAgICByZXR1cm4gKHNvcnRlZChsaXN0X251bWJlcikgPT0gbGlzdF9udW1iZXIpCisKKyAgICBlbGlmIGdldF9saXN0X2F0dHIodGVzdGxpc3QpID09IExpc3RhdHRyLlBFUkNFTlQgOgorICAgICAgICBsaXN0X251bWJlciA9IFtdCisgICAgICAgIGZvciBpdGVtIGluIHRlc3RfbGlzdDoKKyAgICAgICAgICAgIGxpc3RfbnVtYmVyLmFwcGVuZChldmFsKGl0ZW0uc3RyaXAoJyUnKSkpCisgICAgICAgIHJldHVybiAoc29ydGVkKGxpc3RfbnVtYmVyKSA9PSBsaXN0X251bWJlcikKKworICAgIGVsaWYgZ2V0X2xpc3RfYXR0cih0ZXN0bGlzdCkgPT0gTGlzdGF0dHIuU0laRSA6CisgICAgICAgIGxpc3RfbnVtYmVyID0gW10KKyAgICAgICAgIyBjdXJyZW50bHkgU0laRSBpcyBzcGxpdHRlZCBieSBzcGFjZQorICAgICAgICBmb3IgaXRlbSBpbiB0ZXN0X2xpc3Q6CisgICAgICAgICAgICBpZiBpdGVtLnNwbGl0KClbMV0udXBwZXIoKSA9PSAiS0IiOgorICAgICAgICAgICAgICAgIGxpc3RfbnVtYmVyLmFwcGVuZCgxMDI0ICogZXZhbChpdGVtLnNwbGl0KClbMF0pKQorICAgICAgICAgICAgZWxpZiBpdGVtLnNwbGl0KClbMV0udXBwZXIoKSA9PSAiTUIiOgorICAgICAgICAgICAgICAgIGxpc3RfbnVtYmVyLmFwcGVuZCgxMDI0ICogMTAyNCAqIGV2YWwoaXRlbS5zcGxpdCgpWzBdKSkKKyAgICAgICAgICAgIGVsaWYgaXRlbS5zcGxpdCgpWzFdLnVwcGVyKCkgPT0gIkdCIjoKKyAgICAgICAgICAgICAgICBsaXN0X251bWJlci5hcHBlbmQoMTAyNCAqIDEwMjQgKiAxMDI0ICogZXZhbChpdGVtLnNwbGl0KClbMF0pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsaXN0X251bWJlci5hcHBlbmQoZXZhbChpdGVtLnNwbGl0KClbMF0pKQorICAgICAgICByZXR1cm4gKHNvcnRlZChsaXN0X251bWJlcikgPT0gbGlzdF9udW1iZXIpCisKKyAgICBlbHNlOgorICAgICAgICBwcmludCAnVW5yZWNvZ25pemVkIGxpc3QgdHlwZSwgcGxlYXNlIGNoZWNrJworICAgICAgICByZXR1cm4gRmFsc2UKKworCitkZWYgaXNfbGlzdF9pbnZlcnRlZCh0ZXN0bGlzdCk6CisgICAgIiIiCisgICAgRnVuY3Rpb24gdG8gdGVsbCBpZiBsaXN0IGlzIGludmVydGVkCisgICAgQ3VycmVudGx5IHdlIG1heSBoYXZlIGxpc3QgbWFkZSB1cCBvZjogU3RyaW5ncyA7IG51bWJlcnMgOyBwZXJjZW50YWdlIDsgdGltZTsgc2l6ZQorICAgIEVhY2ggaGFzIHJlc3BlY3RpdmUgd2F5IHRvIGRldGVybWluZSBpZiBpdCdzIGludmVydGVkLgorICAgICIiIgorICAgIHRlc3RfbGlzdCA9IHRlc3RsaXN0WzpdCisgICAgdHJ5OgorICAgICAgICB0ZXN0X2xpc3QucmVtb3ZlKCcnKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICBwYXNzCisKKyAgICBpZiBnZXRfbGlzdF9hdHRyKHRlc3RsaXN0KSA9PSBMaXN0YXR0ci5OVUxMIDoKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGVsaWYgZ2V0X2xpc3RfYXR0cih0ZXN0bGlzdCkgPT0gTGlzdGF0dHIuU1RSSU5HUyA6CisgICAgICAgIHJldHVybiAoc29ydGVkKHRlc3RfbGlzdCwgcmV2ZXJzZSA9IFRydWUpID09IHRlc3RfbGlzdCkKKworICAgIGVsaWYgZ2V0X2xpc3RfYXR0cih0ZXN0bGlzdCkgPT0gTGlzdGF0dHIuTlVNQkVSUyA6CisgICAgICAgIGxpc3RfbnVtYmVyID0gW10KKyAgICAgICAgZm9yIGl0ZW0gaW4gdGVzdF9saXN0OgorICAgICAgICAgICAgbGlzdF9udW1iZXIuYXBwZW5kKGV2YWwoaXRlbSkpCisgICAgICAgIHJldHVybiAoc29ydGVkKGxpc3RfbnVtYmVyLCByZXZlcnNlID0gVHJ1ZSkgPT0gbGlzdF9udW1iZXIpCisKKyAgICBlbGlmIGdldF9saXN0X2F0dHIodGVzdGxpc3QpID09IExpc3RhdHRyLlBFUkNFTlQgOgorICAgICAgICBsaXN0X251bWJlciA9IFtdCisgICAgICAgIGZvciBpdGVtIGluIHRlc3RfbGlzdDoKKyAgICAgICAgICAgIGxpc3RfbnVtYmVyLmFwcGVuZChldmFsKGl0ZW0uc3RyaXAoJyUnKSkpCisgICAgICAgIHJldHVybiAoc29ydGVkKGxpc3RfbnVtYmVyLCByZXZlcnNlID0gVHJ1ZSkgPT0gbGlzdF9udW1iZXIpCisKKyAgICBlbGlmIGdldF9saXN0X2F0dHIodGVzdGxpc3QpID09IExpc3RhdHRyLlNJWkUgOgorICAgICAgICBsaXN0X251bWJlciA9IFtdCisgICAgICAgICMgY3VycmVudGx5IFNJWkUgaXMgc3BsaXR0ZWQgYnkgc3BhY2UuIHN1Y2ggYXMgMCBCOyAxIEtCOyAyIE1CCisgICAgICAgIGZvciBpdGVtIGluIHRlc3RfbGlzdDoKKyAgICAgICAgICAgIGlmIGl0ZW0uc3BsaXQoKVsxXS51cHBlcigpID09ICJLQiI6CisgICAgICAgICAgICAgICAgbGlzdF9udW1iZXIuYXBwZW5kKDEwMjQgKiBldmFsKGl0ZW0uc3BsaXQoKVswXSkpCisgICAgICAgICAgICBlbGlmIGl0ZW0uc3BsaXQoKVsxXS51cHBlcigpID09ICJNQiI6CisgICAgICAgICAgICAgICAgbGlzdF9udW1iZXIuYXBwZW5kKDEwMjQgKiAxMDI0ICogZXZhbChpdGVtLnNwbGl0KClbMF0pKQorICAgICAgICAgICAgZWxpZiBpdGVtLnNwbGl0KClbMV0udXBwZXIoKSA9PSAiR0IiOgorICAgICAgICAgICAgICAgIGxpc3RfbnVtYmVyLmFwcGVuZCgxMDI0ICogMTAyNCAqIDEwMjQgKiBldmFsKGl0ZW0uc3BsaXQoKVswXSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxpc3RfbnVtYmVyLmFwcGVuZChldmFsKGl0ZW0uc3BsaXQoKVswXSkpCisgICAgICAgIHJldHVybiAoc29ydGVkKGxpc3RfbnVtYmVyLCByZXZlcnNlID0gVHJ1ZSkgPT0gbGlzdF9udW1iZXIpCisKKyAgICBlbHNlOgorICAgICAgICBwcmludCAnVW5yZWNvZ25pemVkIGxpc3QgdHlwZSwgcGxlYXNlIGNoZWNrJworICAgICAgICByZXR1cm4gRmFsc2UKKworZGVmIHJlcGxhY2VfZmlsZV9jb250ZW50KGZpbGVuYW1lLCBpdGVtLCBvcHRpb24pOgorICAgIGYgPSBvcGVuKGZpbGVuYW1lKQorICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgIGYuY2xvc2UoKQorICAgIG91dHB1dCA9IG9wZW4oZmlsZW5hbWUsICd3JykKKyAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKGl0ZW0pOgorICAgICAgICAgICAgb3V0cHV0LndyaXRlKGl0ZW0gKyAiID0gJyIgKyBvcHRpb24gKyAiJ1xuIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG91dHB1dC53cml0ZShsaW5lKQorICAgIG91dHB1dC5jbG9zZSgpCisKK2RlZiBleHRyYWN0X251bWJlcl9mcm9tX3N0cmluZyhzKToKKyAgICAiIiIKKyAgICBleHRyYWN0IHRoZSBudW1iZXJzIGluIGEgc3RyaW5nLiByZXR1cm4gdHlwZSBpcyAnbGlzdCcKKyAgICAiIiIKKyAgICByZXR1cm4gcmUuZmluZGFsbChyJyhbMC05XSspJywgcykKKworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUEFSVCBJSTogYmFzZSBjbGFzcyAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2xhc3MgdG9hc3Rlcl9jYXNlc19iYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zY3JlZW5zaG90X3NlcXVlbmNlID0gMQorICAgICAgICBzZWxmLnZlcmlmaWNhdGlvbkVycm9ycyA9IFtdCisgICAgICAgIHNlbGYuYWNjZXB0X25leHRfYWxlcnQgPSBUcnVlCisgICAgICAgIHNlbGYuaG9zdF9vcyA9IHBsYXRmb3JtLnN5c3RlbSgpLmxvd2VyKCkKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBDb25maWdQYXJzZXIuU2FmZUNvbmZpZ1BhcnNlcigpCisgICAgICAgIGNvbmZpZ3MgPSBzZWxmLnBhcnNlci5yZWFkKCd0b2FzdGVyX3Rlc3QuY2ZnJykKKyAgICAgICAgc2VsZi5iYXNlX3VybCA9IGV2YWwoc2VsZi5wYXJzZXIuZ2V0KCd0b2FzdGVyX3Rlc3RfJyArIHNlbGYuaG9zdF9vcywgJ3RvYXN0ZXJfdXJsJykpCisKKyAgICAgICAgIyBjcmVhdGUgbG9nIGRpciAuIEN1cnJlbnRseSAsIHdlIHB1dCBsb2cgZmlsZXMgaW4gbG9nL3RtcC4gQWZ0ZXIgYWxsCisgICAgICAgICMgdGVzdCBjYXNlcyBhcmUgZG9uZSwgbW92ZSB0aGVtIHRvIGxvZy8kZGF0ZXRpbWUgZGlyCisgICAgICAgIHNlbGYubG9nX3RtcF9kaXIgPSBvcy5wYXRoLmFic3BhdGgoc3lzLnBhdGhbMF0pICsgb3Muc2VwICsgJ2xvZycgKyBvcy5zZXAgKyAndG1wJworICAgICAgICB0cnk6CisgICAgICAgICAgICBta2Rpcl9wKHNlbGYubG9nX3RtcF9kaXIpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIDoKKyAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoIiUoYXNjdGltZSlzIENhbm5vdCBjcmVhdGUgdG1wIGRpciB1bmRlciBsb2csIHBsZWFzZSBjaGVjayB5b3VyIHByaXZpbGVnZSIpCisgICAgICAgIHNlbGYubG9nID0gc2VsZi5sb2dnZXJfY3JlYXRlKCkKKyAgICAgICAgIyBkcml2ZXIgc2V0dXAKKyAgICAgICAgc2VsZi5zZXR1cF9icm93c2VyKCkKKworICAgIGRlZiBsb2dnZXJfY3JlYXRlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgd2UgdXNlIHJvb3QgbG9nZ2VyIGZvciBldmVyeSB0ZXN0Y2FzZS4KKyAgICAgICAgVGhlIHJlYXNvbiB3aHkgd2UgZG9uJ3QgdXNlIFRPQVNURVJYWFhfbG9nZ2VyIGlzIHRvIGF2b2lkIHNldHRpbmcgcmVzcGVjdGl2ZSBsZXZlbCBmb3IKKyAgICAgICAgcm9vdCBsb2dnZXIgYW5kIFRPQVNURVJYWFhfbG9nZ2VyCisgICAgICAgIFRvIEJlIERpc2N1c3NlZAorICAgICAgICAiIiIKKyAgICAgICAgbG9nX2xldmVsX2RpY3QgPSB7J0NSSVRJQ0FMJzpsb2dnaW5nLkNSSVRJQ0FMLCAnRVJST1InOmxvZ2dpbmcuRVJST1IsICdXQVJOSU5HJzpsb2dnaW5nLldBUk5JTkcsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ0lORk8nOmxvZ2dpbmcuSU5GTywgJ0RFQlVHJzpsb2dnaW5nLkRFQlVHLCAnTk9UU0VUJzpsb2dnaW5nLk5PVFNFVH0KKyAgICAgICAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorIyAgICAgICAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ1RPQVNURVJfJyArIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmxvZ2dpbmdfbGV2ZWwgPSBldmFsKHNlbGYucGFyc2VyLmdldCgndG9hc3Rlcl90ZXN0XycgKyBzZWxmLmhvc3Rfb3MsICdsb2dnaW5nX2xldmVsJykpCisgICAgICAgIGtleSA9IHNlbGYubG9nZ2luZ19sZXZlbC51cHBlcigpCisgICAgICAgIGxvZy5zZXRMZXZlbChsb2dfbGV2ZWxfZGljdFtrZXldKQorICAgICAgICBmaCA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIoZmlsZW5hbWU9c2VsZi5sb2dfdG1wX2RpciArIG9zLnNlcCArICdjYXNlX2FsbCcgKyAnLmxvZycsIG1vZGU9J2EnKQorICAgICAgICBjaCA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzeXMuc3Rkb3V0KQorICAgICAgICBmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcignJShwYXRobmFtZSlzIC0gJShsaW5lbm8pZCAtICUoYXNjdGltZSlzIFxuICBcCisgICAgICAgICAgICAgJShuYW1lKXMgLSAlKGxldmVsbmFtZSlzIC0gJShtZXNzYWdlKXMnKQorICAgICAgICBmaC5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQorICAgICAgICBjaC5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQorICAgICAgICBsb2cuYWRkSGFuZGxlcihmaCkKKyAgICAgICAgbG9nLmFkZEhhbmRsZXIoY2gpCisgICAgICAgIHJldHVybiBsb2cKKworCisgICAgZGVmIHNldHVwX2Jyb3dzZXIoc2VsZiwgKmJyb3dzZXJfcGF0aCk6CisgICAgICAgIHNlbGYuYnJvd3NlciA9IGV2YWwoc2VsZi5wYXJzZXIuZ2V0KCd0b2FzdGVyX3Rlc3RfJyArIHNlbGYuaG9zdF9vcywgJ3Rlc3RfYnJvd3NlcicpKQorICAgICAgICBwcmludCBzZWxmLmJyb3dzZXIKKyAgICAgICAgaWYgc2VsZi5icm93c2VyID09ICJmaXJlZm94IjoKKyAgICAgICAgICAgIGRyaXZlciA9IHdlYmRyaXZlci5GaXJlZm94KCkKKyAgICAgICAgZWxpZiBzZWxmLmJyb3dzZXIgPT0gImNocm9tZSI6CisgICAgICAgICAgICBkcml2ZXIgPSB3ZWJkcml2ZXIuQ2hyb21lKCkKKyAgICAgICAgZWxpZiBzZWxmLmJyb3dzZXIgPT0gImllIjoKKyAgICAgICAgICAgIGRyaXZlciA9IHdlYmRyaXZlci5JZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkcml2ZXIgPSBOb25lCisgICAgICAgICAgICBwcmludCAidW5yZWNvZ25pemVkIGJyb3dzZXIgdHlwZSwgcGxlYXNlIGNoZWNrIgorICAgICAgICBzZWxmLmRyaXZlciA9IGRyaXZlcgorICAgICAgICBzZWxmLmRyaXZlci5pbXBsaWNpdGx5X3dhaXQoMzApCisgICAgICAgIHJldHVybiBzZWxmLmRyaXZlcgorCisKKyAgICBkZWYgc2F2ZV9zY3JlZW5zaG90KHNlbGYsICAqKmxvZ19hcmdzKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzYXZlIHNjcmVlbiBlaXRoZXIgYnkgb3MgaW50ZXJmYWNlIG9yIHNlbGVuaXVtIGludGVyZmFjZS4KKyAgICAgICAgSG93IHRvIHVzZToKKyAgICAgICAgc2VsZi5zYXZlX3NjcmVlbnNob3Qoc2NyZWVuc2hvdF90eXBlID0gJ25hdGl2ZScvJ3NlbGVuaXVtJywgbG9nX3N1Yl9kaXIgPSAneHh4JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kX25hbWUgPSAnc3RlcHgnKQorICAgICAgICB3aGVyZSBuYXRpdmUgbWVhbnMgc2NyZWVuc2hvdCBmdW5jIHByb3ZpZGVkIGJ5IE9TLAorICAgICAgICBzZWxlbml1bSBtZWFucyBzY3JlZW5zaG90IGZ1bmMgcHJvdmlkZWQgYnkgc2VsZW5pdW0gd2ViZHJpdmVyCisgICAgICAgICIiIgorICAgICAgICB0eXBlcyA9IFtsb2dfYXJncy5nZXQoJ3NjcmVlbnNob3RfdHlwZScpXQorICAgICAgICAjIHdoZW4gbm8gc2NyZWVuc2hvdF90eXBlIGlzIHNwZWNpZmllZAorICAgICAgICBpZiB0eXBlcyA9PSBbTm9uZV06CisgICAgICAgICAgICB0eXBlcyA9IFsnbmF0aXZlJywgJ3NlbGVuaXVtJ10KKyAgICAgICAgIyBub3JtYWxseSBhcHBlbmRfbmFtZSBpcyB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggc3RlcC4uCisgICAgICAgIGFkZF9uYW1lID0gbG9nX2FyZ3MuZ2V0KCdhcHBlbmRfbmFtZScpCisgICAgICAgIGlmIG5vdCBhZGRfbmFtZToKKyAgICAgICAgICAgIGFkZF9uYW1lID0gJy0nCisgICAgICAgICMgbm9ybWFsbHkgdGhlcmUncyBubyBuZWVkIHRvIHNwZWNpZnkgc3ViX2RpcgorICAgICAgICBzdWJfZGlyID0gbG9nX2FyZ3MuZ2V0KCdsb2dfc3ViX2RpcicpCisgICAgICAgIGlmIG5vdCBzdWJfZGlyOgorICAgICAgICAgICAgIyB1c2UgY2FzZXh4eCBhcyBzdWJfZGlyIG5hbWUKKyAgICAgICAgICAgIHN1Yl9kaXIgPSAnY2FzZScgKyBzdHIoc2VsZi5jYXNlX25vKQorICAgICAgICBmb3IgaXRlbSBpbiB0eXBlczoKKyAgICAgICAgICAgIGxvZ19kaXIgPSBzZWxmLmxvZ190bXBfZGlyICsgb3Muc2VwICsgc3ViX2RpcgorICAgICAgICAgICAgbWtkaXJfcChsb2dfZGlyKQorICAgICAgICAgICAgbG9nX3BhdGggPSBsb2dfZGlyICsgb3Muc2VwICsgIHNlbGYuYnJvd3NlciArICctJyArXAorICAgICAgICAgICAgICAgICAgICBpdGVtICsgJy0nICsgYWRkX25hbWUgKyAnLScgKyBzdHIoc2VsZi5zY3JlZW5zaG90X3NlcXVlbmNlKSArICcucG5nJworICAgICAgICAgICAgaWYgaXRlbSA9PSAnbmF0aXZlJzoKKyAgICAgICAgICAgICAgICBvcy5zeXN0ZW0oInNjcm90ICIgKyBsb2dfcGF0aCkKKyAgICAgICAgICAgIGVsaWYgaXRlbSA9PSAnc2VsZW5pdW0nOgorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmdldF9zY3JlZW5zaG90X2FzX2ZpbGUobG9nX3BhdGgpCisgICAgICAgICAgICBzZWxmLnNjcmVlbnNob3Rfc2VxdWVuY2UgKz0gMQorCisgICAgZGVmIGJyb3dzZXJfZGVsYXkoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBjdXJyZW50bHkgdGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIHNvbWUgY2hyb21lIHRlc3QuCisgICAgICAgIFNvbWV0aW1lcyB3ZSBuZWVkIGEgZGVsYXkgdG8gYWNjb21wbGlzaCBzb21lIG9wZXJhdGlvbi4KKyAgICAgICAgQnV0IGZvciBmaXJlZm94LCBtb3N0bHkgd2UgZG9uJ3QgbmVlZCB0aGlzLgorICAgICAgICBUbyBiZSBkaXNjdXNzZWQKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuYnJvd3NlciA9PSAiY2hyb21lIjoKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgcmV0dXJuCisKKworIyB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBjb250YWluZWQgaW4gV2ViRHJpdmVyIGNsYXNzLi4KKyAgICBkZWYgZmluZF9lbGVtZW50X2J5X3RleHQoc2VsZiwgc3RyaW5nKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW3RleHQoKT0nIiArIHN0cmluZyArICInXSIpCisKKworICAgIGRlZiBmaW5kX2VsZW1lbnRzX2J5X3RleHQoc2VsZiwgc3RyaW5nKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudHNfYnlfeHBhdGgoIi8vKlt0ZXh0KCk9JyIgKyBzdHJpbmcgKyAiJ10iKQorCisKKyAgICBkZWYgZmluZF9lbGVtZW50X2J5X3RleHRfaW5fdGFibGUoc2VsZiwgdGFibGVfaWQsIHRleHRfc3RyaW5nKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgaXMgdXNlZCB0byBzZWFyY2ggc29tZSBjZXJ0YWluICd0ZXh0JyBpbiBjZXJ0YWluIHRhYmxlCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YWJsZV9lbGVtZW50ID0gc2VsZi5nZXRfdGFibGVfZWxlbWVudCh0YWJsZV9pZCkKKyAgICAgICAgICAgIGVsZW1lbnQgPSB0YWJsZV9lbGVtZW50LmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW3RleHQoKT0nIiArIHRleHRfc3RyaW5nICsgIiddIikKKyAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBwcmludCAnbm8gZWxlbWVudCBmb3VuZCcKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiBlbGVtZW50CisKKworICAgIGRlZiBmaW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKHNlbGYsIHRhYmxlX2lkLCBsaW5rX3RleHQpOgorICAgICAgICAiIiIKKyAgICAgICAgQXNzdW1lIHRoZXJlJ3JlIG11bHRpcGxlIHN1aXRhYmxlICJmaW5kX2VsZW1lbnRfYnlfbGlua190ZXh0Ii4KKyAgICAgICAgSW4gdGhpcyBjaXJjdW1zdGFuY2Ugd2UgbmVlZCB0byBzcGVjaWZ5ICJ0YWJsZSIuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YWJsZV9lbGVtZW50ID0gc2VsZi5nZXRfdGFibGVfZWxlbWVudCh0YWJsZV9pZCkKKyAgICAgICAgICAgIGVsZW1lbnQgPSB0YWJsZV9lbGVtZW50LmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQobGlua190ZXh0KQorICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHByaW50ICdubyBlbGVtZW50IGZvdW5kJworICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQKKworCisgICAgZGVmIGZpbmRfZWxlbWVudHNfYnlfbGlua190ZXh0X2luX3RhYmxlKHNlbGYsIHRhYmxlX2lkLCBsaW5rX3RleHQpOgorICAgICAgICAiIiIKKyAgICAgICAgU2VhcmNoIGxpbmstdGV4dCBpbiBjZXJ0YWluIHRhYmxlLiBUaGlzIGhlbHBzIHRvIG5hcnJvdyBkb3duIHNlYXJjaCBhcmVhLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFibGVfZWxlbWVudCA9IHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQodGFibGVfaWQpCisgICAgICAgICAgICBlbGVtZW50X2xpc3QgPSB0YWJsZV9lbGVtZW50LmZpbmRfZWxlbWVudHNfYnlfbGlua190ZXh0KGxpbmtfdGV4dCkKKyAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBwcmludCAnbm8gZWxlbWVudCBmb3VuZCcKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiBlbGVtZW50X2xpc3QKKworCisgICAgZGVmIGZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dF9pbl90YWJsZShzZWxmLCB0YWJsZV9pZCwgbGlua190ZXh0KToKKyAgICAgICAgIiIiCisgICAgICAgIFNlYXJjaCBlbGVtZW50IGJ5IHBhcnRpYWwgbGluayB0ZXh0IGluIGNlcnRhaW4gdGFibGUuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YWJsZV9lbGVtZW50ID0gc2VsZi5nZXRfdGFibGVfZWxlbWVudCh0YWJsZV9pZCkKKyAgICAgICAgICAgIGVsZW1lbnQgPSB0YWJsZV9lbGVtZW50LmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dChsaW5rX3RleHQpCisgICAgICAgICAgICByZXR1cm4gZWxlbWVudAorICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHByaW50ICdubyBlbGVtZW50IGZvdW5kJworICAgICAgICAgICAgcmFpc2UKKworCisgICAgZGVmIGZpbmRfZWxlbWVudHNfYnlfcGFydGlhbF9saW5rX3RleHRfaW5fdGFibGUoc2VsZiwgdGFibGVfaWQsIGxpbmtfdGV4dCk6CisgICAgICAgICIiIgorICAgICAgICBBc3N1bWUgdGhlcmUncmUgbXVsdGlwbGUgc3VpdGFibGUgImZpbmRfcGFydGlhbF9lbGVtZW50X2J5X2xpbmtfdGV4dCIuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YWJsZV9lbGVtZW50ID0gc2VsZi5nZXRfdGFibGVfZWxlbWVudCh0YWJsZV9pZCkKKyAgICAgICAgICAgIGVsZW1lbnRfbGlzdCA9IHRhYmxlX2VsZW1lbnQuZmluZF9lbGVtZW50c19ieV9wYXJ0aWFsX2xpbmtfdGV4dChsaW5rX3RleHQpCisgICAgICAgICAgICByZXR1cm4gZWxlbWVudF9saXN0CisgICAgICAgIGV4Y2VwdCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgcHJpbnQgJ25vIGVsZW1lbnQgZm91bmQnCisgICAgICAgICAgICByYWlzZQorCisKKyAgICBkZWYgZmluZF9lbGVtZW50X2J5X3hwYXRoX2luX3RhYmxlKHNlbGYsIHRhYmxlX2lkLCB4cGF0aCk6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIGhlbHBzIHRvIG5hcnJvdyBkb3duIHNlYXJjaCBhcmVhLiBFc3BlY2lhbGx5IHVzZWZ1bCB3aGVuIGRlYWxpbmcgd2l0aCBwb3AtdXAgZm9ybS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhYmxlX2VsZW1lbnQgPSBzZWxmLmdldF90YWJsZV9lbGVtZW50KHRhYmxlX2lkKQorICAgICAgICAgICAgZWxlbWVudCA9IHRhYmxlX2VsZW1lbnQuZmluZF9lbGVtZW50X2J5X3hwYXRoKHhwYXRoKQorICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHByaW50ICdubyBlbGVtZW50IGZvdW5kJworICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQKKworCisgICAgZGVmIGZpbmRfZWxlbWVudHNfYnlfeHBhdGhfaW5fdGFibGUoc2VsZiwgdGFibGVfaWQsIHhwYXRoKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgaGVscHMgdG8gbmFycm93IGRvd24gc2VhcmNoIGFyZWEuIEVzcGVjaWFsbHkgdXNlZnVsIHdoZW4gZGVhbGluZyB3aXRoIHBvcC11cCBmb3JtLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFibGVfZWxlbWVudCA9IHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQodGFibGVfaWQpCisgICAgICAgICAgICBlbGVtZW50X2xpc3QgPSB0YWJsZV9lbGVtZW50LmZpbmRfZWxlbWVudHNfYnlfeHBhdGgoeHBhdGgpCisgICAgICAgIGV4Y2VwdCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgcHJpbnQgJ25vIGVsZW1lbnRzIGZvdW5kJworICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgcmV0dXJuIGVsZW1lbnRfbGlzdAorCisKKyAgICBkZWYgc2hvcnRlc3RfeHBhdGgoc2VsZiwgcG5hbWUsIHB2YWx1ZSk6CisgICAgICAgIHJldHVybiAiLy8qW0AiICsgcG5hbWUgKyAiPSciICsgcHZhbHVlICsgIiddIgorCisKKyN1c3VhbGx5IGVsZW1lbnRzIGluIHRoZSBzYW1lIGNvbHVtbiBhcmUgd2l0aCBzYW1lIGNsYXNzIG5hbWUuIGZvciBpbnN0YW5jZTogY2xhc3M9Im91dGNvbWUiIC5UQkQKKyAgICBkZWYgZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KHNlbGYsIGF0dHJfbmFtZSwgYXR0cl92YWx1ZSk6CisgICAgICAgIGNfeHBhdGggPSBzZWxmLnNob3J0ZXN0X3hwYXRoKGF0dHJfbmFtZSwgYXR0cl92YWx1ZSkKKyAgICAgICAgZWxlbWVudHMgPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKGNfeHBhdGgpCisgICAgICAgIGNfbGlzdCA9IFtdCisgICAgICAgIGZvciBlbGVtZW50IGluIGVsZW1lbnRzOgorICAgICAgICAgICAgY19saXN0LmFwcGVuZChlbGVtZW50LnRleHQpCisgICAgICAgIHJldHVybiBjX2xpc3QKKworCisgICAgZGVmIGdldF90YWJsZV9jb2x1bW5fdGV4dF9ieV9jb2x1bW5fbnVtYmVyKHNlbGYsIHRhYmxlX2lkLCBjb2x1bW5fbnVtYmVyKToKKyAgICAgICAgY194cGF0aCA9ICIvLypbQGlkPSciICsgdGFibGVfaWQgKyAiJ10vL3RkWyIgKyBzdHIoY29sdW1uX251bWJlcikgKyAiXSIKKyAgICAgICAgZWxlbWVudHMgPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKGNfeHBhdGgpCisgICAgICAgIGNfbGlzdCA9IFtdCisgICAgICAgIGZvciBlbGVtZW50IGluIGVsZW1lbnRzOgorICAgICAgICAgICAgY19saXN0LmFwcGVuZChlbGVtZW50LnRleHQpCisgICAgICAgIHJldHVybiBjX2xpc3QKKworCisgICAgZGVmIGdldF90YWJsZV9oZWFkX3RleHQoc2VsZiwgKnRhYmxlX2lkKToKKyNub3cgdGFibGVfaWQgaXMgYSB0dXBsZS4uLgorICAgICAgICBpZiB0YWJsZV9pZDoKKyAgICAgICAgICAgIHRoZWFkX3hwYXRoID0gIi8vKltAaWQ9JyIgKyB0YWJsZV9pZFswXSArICInXS8vdGhlYWQvL3RoW3RleHQoKV0iCisgICAgICAgICAgICBlbGVtZW50cyA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudHNfYnlfeHBhdGgodGhlYWRfeHBhdGgpCisgICAgICAgICAgICBjX2xpc3QgPSBbXQorICAgICAgICAgICAgZm9yIGVsZW1lbnQgaW4gZWxlbWVudHM6CisgICAgICAgICAgICAgICAgaWYgZWxlbWVudC50ZXh0OgorICAgICAgICAgICAgICAgICAgICBjX2xpc3QuYXBwZW5kKGVsZW1lbnQudGV4dCkKKyAgICAgICAgICAgIHJldHVybiBjX2xpc3QKKyNkZWZhdWx0IHRhYmxlIG9uIHBhZ2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKi90YWJsZS90aGVhZCIpLnRleHQKKworCisKKyAgICBkZWYgZ2V0X3RhYmxlX2VsZW1lbnQoc2VsZiwgdGFibGVfaWQsICpjb29yZGluYXRlKToKKyAgICAgICAgaWYgbGVuKGNvb3JkaW5hdGUpID09IDA6CisjcmV0dXJuIHdob2xlLXRhYmxlIGVsZW1lbnQKKyAgICAgICAgICAgIGVsZW1lbnRfeHBhdGggPSAiLy8qW0BpZD0nIiArIHRhYmxlX2lkICsgIiddIgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoZWxlbWVudF94cGF0aCkKKyAgICAgICAgICAgIGV4Y2VwdCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICByZXR1cm4gZWxlbWVudAorICAgICAgICByb3cgPSBjb29yZGluYXRlWzBdCisKKyAgICAgICAgaWYgbGVuKGNvb3JkaW5hdGUpID09IDE6CisjcmV0dXJuIHdob2xlLXJvdyBlbGVtZW50CisgICAgICAgICAgICBlbGVtZW50X3hwYXRoID0gIi8vKltAaWQ9JyIgKyB0YWJsZV9pZCArICInXS90Ym9keS90clsiICsgc3RyKHJvdykgKyAiXSIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBlbGVtZW50ID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKGVsZW1lbnRfeHBhdGgpCisgICAgICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50Cisjbm93IHdlIGFyZSBsb29raW5nIGZvciBhbiBlbGVtZW50IHdpdGggc3BlY2lmaWVkIFggYW5kIFkKKyAgICAgICAgY29sdW1uID0gY29vcmRpbmF0ZVsxXQorCisgICAgICAgIGVsZW1lbnRfeHBhdGggPSAiLy8qW0BpZD0nIiArIHRhYmxlX2lkICsgIiddL3Rib2R5L3RyWyIgKyBzdHIocm93KSArICJdL3RkWyIgKyBzdHIoY29sdW1uKSArICJdIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBlbGVtZW50ID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKGVsZW1lbnRfeHBhdGgpCisgICAgICAgIGV4Y2VwdCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBlbGVtZW50CisKKworICAgIGRlZiBnZXRfdGFibGVfZGF0YShzZWxmLCB0YWJsZV9pZCwgcm93X2NvdW50LCBjb2x1bW5fY291bnQpOgorICAgICAgICByb3cgPSAxCisgICAgICAgIExpc3RzID0gW10KKyAgICAgICAgd2hpbGUgcm93IDw9IHJvd19jb3VudDoKKyAgICAgICAgICAgIGNvbHVtbiA9IDEKKyAgICAgICAgICAgIHJvd19jb250ZW50PVtdCisgICAgICAgICAgICB3aGlsZSBjb2x1bW4gPD0gY29sdW1uX2NvdW50OgorICAgICAgICAgICAgICAgIHM9ICIvLypbQGlkPSciICsgdGFibGVfaWQgKyAiJ10vdGJvZHkvdHJbIiArIHN0cihyb3cpICsiXS90ZFsiICsgc3RyKGNvbHVtbikgKyAiXSIKKyAgICAgICAgICAgICAgICB2ID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKHMpLnRleHQKKyAgICAgICAgICAgICAgICByb3dfY29udGVudC5hcHBlbmQodikKKyAgICAgICAgICAgICAgICBjb2x1bW4gPSBjb2x1bW4gKyAxCisgICAgICAgICAgICAgICAgcHJpbnQoInJvd19jb250ZW50PSIscm93X2NvbnRlbnQpCisgICAgICAgICAgICBMaXN0cy5leHRlbmQocm93X2NvbnRlbnQpCisgICAgICAgICAgICBwcmludCBMaXN0c1tyb3ctMV1bMF0KKyAgICAgICAgICAgIHJvdyA9IHJvdyArIDEKKyAgICAgICAgcmV0dXJuIExpc3RzCisKKyAgICAjIFRoZSBpc194eHhfcHJlc2VudCBmdW5jdGlvbnMgb25seSByZXR1cm5zIFRydWUvRmFsc2UKKyAgICAjIEFsbCB0aGUgbG9nIHdvcmsgaXMgZG9uZSBpbiB0ZXN0IHByb2NlZHVyZSwgc28gd2UgY2FuIGVhc2lseSB0cmFjZSBiYWNrCisgICAgIyB1c2luZyBsb2dnaW5nCisgICAgZGVmIGlzX3RleHRfcHJlc2VudCAoc2VsZiwgcGF0dGVybnMpOgorICAgICAgICBmb3IgcGF0dGVybiBpbiBwYXR0ZXJuczoKKyAgICAgICAgICAgIGlmIHN0cihwYXR0ZXJuKSBub3QgaW4gc2VsZi5kcml2ZXIucGFnZV9zb3VyY2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKworICAgIGRlZiBpc19lbGVtZW50X3ByZXNlbnQoc2VsZiwgaG93LCB3aGF0KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50KGhvdywgd2hhdCkKKyAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24sIGU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworCisgICAgZGVmIGlzX2FsZXJ0X3ByZXNlbnQoc2VsZik6CisgICAgICAgIHRyeTogc2VsZi5kcml2ZXIuc3dpdGNoX3RvX2FsZXJ0KCkKKyAgICAgICAgZXhjZXB0IE5vQWxlcnRQcmVzZW50RXhjZXB0aW9uLCBlOiByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworCisgICAgZGVmIGNsb3NlX2FsZXJ0X2FuZF9nZXRfaXRzX3RleHQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFsZXJ0ID0gc2VsZi5kcml2ZXIuc3dpdGNoX3RvX2FsZXJ0KCkKKyAgICAgICAgICAgIGFsZXJ0X3RleHQgPSBhbGVydC50ZXh0CisgICAgICAgICAgICBpZiBzZWxmLmFjY2VwdF9uZXh0X2FsZXJ0OgorICAgICAgICAgICAgICAgIGFsZXJ0LmFjY2VwdCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFsZXJ0LmRpc21pc3MoKQorICAgICAgICAgICAgcmV0dXJuIGFsZXJ0X3RleHQKKyAgICAgICAgZmluYWxseTogc2VsZi5hY2NlcHRfbmV4dF9hbGVydCA9IFRydWUKKworCisgICAgZGVmIGdldF9jYXNlX251bWJlcihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIHdoYXQgY2FzZSBhcmUgd2UgcnVubmluZyBub3cKKyAgICAgICAgIiIiCisgICAgICAgIGZ1bmNuYW1lID0gc3lzLl9nZXRmcmFtZSgxKS5mX2NvZGUuY29fbmFtZQorICAgICAgICBjYXNlbm9fc3RyID0gZnVuY25hbWUuc3RyaXAoJ3Rlc3RfJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2FzZW5vID0gaW50KGNhc2Vub19zdHIpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcHJpbnQgImdldCBjYXNlIG51bWJlciBlcnJvciEgcGxlYXNlIGNoZWNrIGlmIGZ1bmMgbmFtZSBpcyB0ZXN0X3h4eCIKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gY2FzZW5vCisKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIEVORDogQ0FTRSAlcyBsb2cgXG5cbicgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIucXVpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHNlbGYudmVyaWZpY2F0aW9uRXJyb3JzKQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUEFSVCBJSUk6IHRlc3QgY2FzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgcGxlYXNlIHJlZmVyIHRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3RyX3Nob3dfY2FzZS5jZ2k/Y2FzZV9pZD14eHggICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBOb3RlOiB0byBjb21wbHkgd2l0aCB0aGUgdW5pdHRlc3QgZnJhbWV3b3JrLCB3ZSBjYWxsIHRoZXNlIHRlc3RfeHh4IGZ1bmN0aW9ucworIyBmcm9tIHJ1bl90b2FzdGVyY2FzZXMucHkgdG8gYXZvaWQgY2FsbGluZyBzZXRVcCgpIGFuZCB0ZWFyRG93bigpIG11bHRpcGxlIHRpbWVzCisKKworY2xhc3MgdG9hc3Rlcl9jYXNlcyh0b2FzdGVyX2Nhc2VzX2Jhc2UpOgorICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDkwMSAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0XzkwMShzZWxmKToKKyAgICAgICAgIyB0aGUgcmVhc29uIHdoeSBnZXRfY2FzZV9udW1iZXIgaXMgbm90IGluIHNldFVwIGZ1bmN0aW9uIGlzIHRoYXQKKyAgICAgICAgIyBvdGhlcndpc2UgaXQgcmV0dXJucyAic2V0VXAiIGluc3RlYWQgb2YgInRlc3RfeHh4IgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgIyBvcGVuIGFsbCBjb2x1bW5zCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgIyBhZGRpbmcgZXhwbGljaXRseSB3YWl0IGZvciBjaHJvbWVkcml2ZXIuLi1fLQorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInN0YXJ0ZWRfb24iKS5jbGljaygpCisgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgidGltZSIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjIGRpY3Q6IHtsaW50IHRleHQgbmFtZSA6IGFjdHVhbCBjbGFzcyBuYW1lfQorICAgICAgICB0YWJsZV9oZWFkX2RpY3QgPSB7J091dGNvbWUnOidvdXRjb21lJywgJ1JlY2lwZSc6J3RhcmdldCcsICdNYWNoaW5lJzonbWFjaGluZScsICdTdGFydGVkIG9uJzonc3RhcnRlZF9vbicsICdDb21wbGV0ZWQgb24nOidjb21wbGV0ZWRfb24nLCBcCisgICAgICAgICAgICAgICAgJ0Vycm9ycyc6J2Vycm9yc19ubycsICdXYXJuaW5ncyc6J3dhcm5pbmdzX25vJywgJ1RpbWUnOid0aW1lJ30KKyAgICAgICAgZm9yIGtleSBpbiB0YWJsZV9oZWFkX2RpY3Q6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dChrZXkpLmNsaWNrKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiVzIGNhbm5vdCBiZSBmb3VuZCBvbiBwYWdlIiAlIGtleSkKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgY29sdW1uX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgiY2xhc3MiLCB0YWJsZV9oZWFkX2RpY3Rba2V5XSkKKyAgICAgICAgICAgICMgYWZ0ZXIgMXN0IGNsaWNrLCB0aGUgbGlzdCBzaG91bGQgYmUgZWl0aGVyIHNlcXVlbmNlZCBvciBpbnZlcnRlZCwgYnV0IHdlIGRvbid0IGhhdmUgYSAiZGVmYXVsdCBvcmRlciIgaGVyZQorICAgICAgICAgICAgIyB0aGUgcG9pbnQgaXMsIGFmdGVyIGFub3RoZXIgY2xpY2ssIGl0IHNob3VsZCBiZSBhbm90aGVyIG9yZGVyCisgICAgICAgICAgICBpZiBpc19saXN0X2ludmVydGVkKGNvbHVtbl9saXN0KToKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KGtleSkuY2xpY2soKQorICAgICAgICAgICAgICAgIGNvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9saXN0KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9saXN0KSkKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KGtleSkuY2xpY2soKQorICAgICAgICAgICAgICAgIGNvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3RfaW52ZXJ0ZWQoY29sdW1uX2xpc3QpKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCJjYXNlIHBhc3NlZCIpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDkwMiAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0XzkwMihzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgICMgQ291bGQgYWRkIG1vcmUgdGVzdCBwYXR0ZXJucyBoZXJlIGluIHRoZSBmdXR1cmUuIEFsc28sIGNvdWxkIHNlYXJjaCBzb21lIGl0ZW1zIG90aGVyIHRoYW4gdGFyZ2V0IGNvbHVtbiBpbiBmdXR1cmUuLgorICAgICAgICBwYXR0ZXJucyA9IFsibWluaW1hbCIsICJzYXRvIl0KKyAgICAgICAgZm9yIHBhdHRlcm4gaW4gcGF0dGVybnM6CisgICAgICAgICAgICBvcmlfdGFyZ2V0X2NvbHVtbl90ZXh0cyA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCJjbGFzcyIsICJ0YXJnZXQiKQorICAgICAgICAgICAgcHJpbnQgb3JpX3RhcmdldF9jb2x1bW5fdGV4dHMKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuY2xlYXIoKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXMocGF0dGVybikKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgICAgIG5ld190YXJnZXRfY29sdW1uX3RleHRzID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgInRhcmdldCIpCisgICAgICAgICAgICAjIGlmIG5vdGhpbmcgZm91bmQsIHdlIHN0aWxsIGNvdW50IGl0IGFzICJwYXNzIgorICAgICAgICAgICAgaWYgbmV3X3RhcmdldF9jb2x1bW5fdGV4dHM6CisgICAgICAgICAgICAgICAgZm9yIHRleHQgaW4gbmV3X3RhcmdldF9jb2x1bW5fdGV4dHM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0ZXh0LmZpbmQocGF0dGVybikpCisgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJpLmljb24tcmVtb3ZlIikuY2xpY2soKQorICAgICAgICAgICAgdGFyZ2V0X2NvbHVtbl90ZXh0cyA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCJjbGFzcyIsICJ0YXJnZXQiKQorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9yaV90YXJnZXRfY29sdW1uX3RleHRzID09IHRhcmdldF9jb2x1bW5fdGV4dHMpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDkwMyAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0XzkwMyhzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgICMgd2hlbiBvcGVuaW5nIGEgbmV3IHBhZ2UsICJzdGFydGVkX29uIiBpcyBub3QgZGlzcGxheWVkIGJ5IGRlZmF1bHQKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjIGN1cnJlbnRseSBhbGwgdGhlIGRlbGF5IGFyZSBmb3IgY2hyb21lIGRyaXZlciAtXy0KKyAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzdGFydGVkX29uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgICMgc3RlcCA0CisgICAgICAgIGl0ZW1zID0gWyJPdXRjb21lIiwgIkNvbXBsZXRlZCBvbiIsICJTdGFydGVkIG9uIiwgIkZhaWxlZCB0YXNrcyIsICJFcnJvcnMiLCAiV2FybmluZ3MiXQorICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0ZW1wX2VsZW1lbnQgPSBzZWxmLmZpbmRfZWxlbWVudF9ieV90ZXh0X2luX3RhYmxlKCdvdGFibGUnLCBpdGVtKQorICAgICAgICAgICAgICAgICMgdGhpcyBpcyBob3cgd2UgZmluZCAiZmlsdGVyIGljb24iIGluIHRoZSBzYW1lIGxldmVsIGFzIHRlbXBfZWxlbWVudCh3aGVyZSAiYSIgbWVhbnMgY2xpY2thYmxlLCAiaSIgbWVhbnMgaWNvbikKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModGVtcF9lbGVtZW50LmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLi4vLyovYS9pW0BjbGFzcz0naWNvbi1maWx0ZXIgZmlsdGVyZWQnXSIpKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbixlOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIgJXMgY2Fubm90IGJlIGZvdW5kISAlcyIgJSAoaXRlbSwgZSkpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsSWYoVHJ1ZSkKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAjIHN0ZXAgNS02CisgICAgICAgIHRlbXBfZWxlbWVudCA9IHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnb3RhYmxlJywgJ091dGNvbWUnKQorICAgICAgICB0ZW1wX2VsZW1lbnQuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIuLi8vKi9hL2lbQGNsYXNzPSdpY29uLWZpbHRlciBmaWx0ZXJlZCddIikuY2xpY2soKQorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICAjIHRoZSAybmQgb3B0aW9uLCB3aGF0ZXZlciBpdCBpcworICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIigvL2lucHV0W0BuYW1lPSdmaWx0ZXInXSlbMl0iKS5jbGljaygpCisgICAgICAgICMgY2xpY2sgIkFwcGx5IiBidXR0b24KKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvLypbQGlkPSdmaWx0ZXJfb3V0Y29tZSddLy8qW3RleHQoKT0nQXBwbHknXSIpLmNsaWNrKCkKKyAgICAgICAgIyBzYXZlIHNjcmVlbiBoZXJlCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgc2VsZi5zYXZlX3NjcmVlbnNob3Qoc2NyZWVuc2hvdF90eXBlPSdzZWxlbml1bScsIGFwcGVuZF9uYW1lPSdzdGVwNScpCisgICAgICAgIHRlbXBfZWxlbWVudCA9IHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnb3RhYmxlJywgJ0NvbXBsZXRlZCBvbicpCisgICAgICAgIHRlbXBfZWxlbWVudC5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi4uLy8qL2EvaVtAY2xhc3M9J2ljb24tZmlsdGVyIGZpbHRlcmVkJ10iKS5jbGljaygpCisgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW0BpZD0nZmlsdGVyX2NvbXBsZXRlZF9vbiddLy8qW3RleHQoKT0nQXBwbHknXSIpLmNsaWNrKCkKKyAgICAgICAgIyBzYXZlIHNjcmVlbiBoZXJlIHRvIGNvbXBhcmUgdG8gcHJldmlvdXMgb25lCisgICAgICAgICMgcGxlYXNlIG5vdGUgdGhhdCBmb3IgY2hyb21lIGRyaXZlciwgbmVlZCBhIGxpdHRsZSBicmVhayBiZWZvcmUgc2F2aW5nCisgICAgICAgICMgc2NyZWVuIGhlcmUgLV8tCisgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgIHNlbGYuc2F2ZV9zY3JlZW5zaG90KHNjcmVlbnNob3RfdHlwZT0nc2VsZW5pdW0nLCBhcHBlbmRfbmFtZT0nc3RlcDYnKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLmNsZWFyKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXMoImNvcmUtaW1hZ2UiKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaC1idXR0b24iKS5jbGljaygpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDkwNCAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0XzkwNChzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiY29yZS1pbWFnZSIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiVGFza3MiKS5jbGljaygpCisjICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJBbGwgYnVpbGRzIikuY2xpY2soKQorIyAgICAgICAgc2VsZi5kcml2ZXIuYmFjaygpCisgICAgICAgIHNlbGYudGFibGVfbmFtZSA9ICdvdGFibGUnCisgICAgICAgICMgVGhpcyBpcyBob3cgd2UgZmluZCB0aGUgImRlZmF1bHQiIHJvd3MtbnVtYmVyIQorICAgICAgICByb3dzX2Rpc3BsYXllZCA9IGludChTZWxlY3Qoc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3Rvcigic2VsZWN0LnBhZ2VzaXplIikpLmZpcnN0X3NlbGVjdGVkX29wdGlvbi50ZXh0KQorICAgICAgICBwcmludCByb3dzX2Rpc3BsYXllZAorICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi5nZXRfdGFibGVfZWxlbWVudChzZWxmLnRhYmxlX25hbWUsIHJvd3NfZGlzcGxheWVkKSkKKyAgICAgICAgc2VsZi5mYWlsSWYoc2VsZi5nZXRfdGFibGVfZWxlbWVudChzZWxmLnRhYmxlX25hbWUsIHJvd3NfZGlzcGxheWVkICsgMSkpCisgICAgICAgICMgU2VhcmNoIHRleHQgYm94IGJhY2tncm91bmQgdGV4dCBpcyAiU2VhcmNoIHRhc2tzIgorICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvLypbQGlkPSdzZWFyY2hmb3JtJ10vKltAcGxhY2Vob2xkZXI9J1NlYXJjaCB0YXNrcyddIikpCisKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5jbGVhcigpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuc2VuZF9rZXlzKCJidXN5Ym94IikKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2gtYnV0dG9uIikuY2xpY2soKQorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA1JykKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigiaS5pY29uLXJlbW92ZSIpLmNsaWNrKCkKKyAgICAgICAgIyBTYXZlIHNjcmVlbiBoZXJlCisgICAgICAgIHNlbGYuc2F2ZV9zY3JlZW5zaG90KHNjcmVlbnNob3RfdHlwZT0nc2VsZW5pdW0nLCBhcHBlbmRfbmFtZT0nc3RlcDVfMicpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJjcHVfdXNlZCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJkaXNrX2lvIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInRhc2tfbG9nIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInJlY2lwZV92ZXJzaW9uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInRpbWVfdGFrZW4iKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgICMgVGhlIG9wZXJhdGlvbiBpcyB0aGUgc2FtZSBhcyBjYXNlOTAxCisgICAgICAgICMgZGljdDoge2xpbnQgdGV4dCBuYW1lIDogYWN0dWFsIGNsYXNzIG5hbWV9CisgICAgICAgIHRhYmxlX2hlYWRfZGljdCA9IHsnT3JkZXInOidvcmRlcicsICdSZWNpcGUnOidyZWNpcGVfbmFtZScsICdUYXNrJzondGFza19uYW1lJywgJ0V4ZWN1dGVkJzonZXhlY3V0ZWQnLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnT3V0Y29tZSc6J291dGNvbWUnLCAnQ2FjaGUgYXR0ZW1wdCc6J2NhY2hlX2F0dGVtcHQnLCAnVGltZSAoc2VjcyknOid0aW1lX3Rha2VuJywgJ0NQVSB1c2FnZSc6J2NwdV91c2VkJywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Rpc2sgSS9PIChtcyknOidkaXNrX2lvJ30KKyAgICAgICAgZm9yIGtleSBpbiB0YWJsZV9oZWFkX2RpY3Q6CisjIFRoaXMgaXMgdHJpY2t5IGhlcmU6IHdlIGFyZSBkb2luZyBzbyBiZWNhdXNlIHRoZXJlIG1heSBiZSBtb3JlIHRoYW4gMQorIyBzYW1lLW5hbWUgbGlua190ZXh0IGluIG9uZSBwYWdlLiBTbyB3ZSBvbmx5IGZpbmQgZWxlbWVudCBpbnNpZGUgdGhlIHRhYmxlCisgICAgICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCBrZXkpLmNsaWNrKCkKKyAgICAgICAgICAgIGNvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisjIGFmdGVyIDFzdCBjbGljaywgdGhlIGxpc3Qgc2hvdWxkIGJlIGVpdGhlciBzZXF1ZW5jZWQgb3IgaW52ZXJ0ZWQsIGJ1dCB3ZSBkb24ndCBoYXZlIGEgImRlZmF1bHQgb3JkZXIiIGhlcmUKKyMgdGhlIHBvaW50IGlzLCBhZnRlciBhbm90aGVyIGNsaWNrLCBpdCBzaG91bGQgYmUgYW5vdGhlciBvcmRlcgorIyB0aGUgZmlzdCBjYXNlIGlzIHNwZWNpYWw6dGhpcyBtZWFucyBldmVyeSBpdGVtIGluIGNvbHVtbl9saXN0IGlzIHRoZSBzYW1lLCBzbworIyBhZnRlciBvbmUgY2xpY2ssIGVpdGhlciBzZXF1ZW5jZWQgb3IgaW52ZXJ0ZWQgd2lsbCBiZSBmaW5lCisgICAgICAgICAgICBpZiAoaXNfbGlzdF9pbnZlcnRlZChjb2x1bW5fbGlzdCkgYW5kIGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9saXN0KSkgXAorICAgICAgICAgICAgICAgIG9yIChub3QgY29sdW1uX2xpc3QpIDoKKyAgICAgICAgICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCBrZXkpLmNsaWNrKCkKKyAgICAgICAgICAgICAgICBjb2x1bW5fbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCJjbGFzcyIsIHRhYmxlX2hlYWRfZGljdFtrZXldKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X3NlcXVlbmNlZChjb2x1bW5fbGlzdCkgb3IgaXNfbGlzdF9pbnZlcnRlZChjb2x1bW5fbGlzdCkpCisgICAgICAgICAgICBlbGlmIGlzX2xpc3RfaW52ZXJ0ZWQoY29sdW1uX2xpc3QpOgorICAgICAgICAgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZShzZWxmLnRhYmxlX25hbWUsIGtleSkuY2xpY2soKQorICAgICAgICAgICAgICAgIGNvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9saXN0KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9saXN0KSkKKyAgICAgICAgICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCBrZXkpLmNsaWNrKCkKKyAgICAgICAgICAgICAgICBjb2x1bW5fbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCJjbGFzcyIsIHRhYmxlX2hlYWRfZGljdFtrZXldKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X2ludmVydGVkKGNvbHVtbl9saXN0KSkKKyMgc3RlcCA4LTEwCisgICAgICAgICMgZmlsdGVyIGRpY3Q6IHtsaW5rIHRleHQgbmFtZSA6IGZpbHRlciB0YWJsZSBuYW1lIGluIHhwYXRofQorICAgICAgICBmaWx0ZXJfZGljdCA9IHsnRXhlY3V0ZWQnOidmaWx0ZXJfZXhlY3V0ZWQnLCAnT3V0Y29tZSc6J2ZpbHRlcl9vdXRjb21lJywgJ0NhY2hlIGF0dGVtcHQnOidmaWx0ZXJfY2FjaGVfYXR0ZW1wdCd9CisgICAgICAgIGZvciBrZXkgaW4gZmlsdGVyX2RpY3Q6CisgICAgICAgICAgICB0ZW1wX2VsZW1lbnQgPSBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCBrZXkpCisgICAgICAgICAgICAjIGZpbmQgdGhlIGZpbHRlciBpY29uIGJlc2lkZXMgaXQuCisgICAgICAgICAgICAjIEFuZCBoZXJlIHdlIG11c3QgaGF2ZSBicmVhayAoMSBzZWMpIHRvIGdldCB0aGUgcG9wdXAgc3R1ZmYKKyAgICAgICAgICAgIHRlbXBfZWxlbWVudC5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi4uLy8qW0BjbGFzcz0naWNvbi1maWx0ZXIgZmlsdGVyZWQnXSIpLmNsaWNrKCkKKyAgICAgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgICAgICBhdmFpbF9vcHRpb25zID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aCgiLy8qW0BpZD0nIiArIGZpbHRlcl9kaWN0W2tleV0gKyAiJ10vLypbQG5hbWU9J2ZpbHRlciddW25vdChAZGlzYWJsZWQpXSIpCisgICAgICAgICAgICBmb3IgbnVtYmVyIGluIHJhbmdlKDAsIGxlbihhdmFpbF9vcHRpb25zKSk6CisgICAgICAgICAgICAgICAgYXZhaWxfb3B0aW9uc1tudW1iZXJdLmNsaWNrKCkKKyAgICAgICAgICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICAgICAgICAgICMgY2xpY2sgIkFwcGx5IgorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW0BpZD0nIiArIGZpbHRlcl9kaWN0W2tleV0gICsgIiddLy8qW0B0eXBlPSdzdWJtaXQnXSIpLmNsaWNrKCkKKyAgICAgICAgICAgICAgICAjIGluc2VydCBzY3JlZW4gY2FwdHVyZSBoZXJlCisgICAgICAgICAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA4JykKKyAgICAgICAgICAgICAgICAjIGFmdGVyIHRoZSBsYXN0IG9wdGlvbiB3YXMgY2xpY2tlZCwgd2UgZG9uJ3QgbmVlZCBvcGVyYXRpb24gYmVsb3cgYW55bW9yZQorICAgICAgICAgICAgICAgIGlmIG51bWJlciA8IGxlbihhdmFpbF9vcHRpb25zKS0xOgorICAgICAgICAgICAgICAgICAgICAgdGVtcF9lbGVtZW50ID0gc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKHNlbGYudGFibGVfbmFtZSwga2V5KQorICAgICAgICAgICAgICAgICAgICAgdGVtcF9lbGVtZW50LmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLi4vLypbQGNsYXNzPSdpY29uLWZpbHRlciBmaWx0ZXJlZCddIikuY2xpY2soKQorICAgICAgICAgICAgICAgICAgICAgYXZhaWxfb3B0aW9ucyA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudHNfYnlfeHBhdGgoIi8vKltAaWQ9JyIgKyBmaWx0ZXJfZGljdFtrZXldICsgIiddLy8qW0BuYW1lPSdmaWx0ZXInXVtub3QoQGRpc2FibGVkKV0iKQorICAgICAgICAgICAgICAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyMgc3RlcCAxMQorICAgICAgICBmb3IgaXRlbSBpbiBbJ29yZGVyJywgJ3Rhc2tfbmFtZScsICdleGVjdXRlZCcsICdvdXRjb21lJywgJ3JlY2lwZV9uYW1lJywgJ3JlY2lwZV92ZXJzaW9uJ106CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfeHBhdGhfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCAiLi90Ym9keS90clsxXS8qW0BjbGFzcz0nIiArIGl0ZW0gKyAiJ10vYSIpLmNsaWNrKCkKKyAgICAgICAgICAgIGV4Y2VwdCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgIyBsZXQgaXQgZ28uLi4KKyAgICAgICAgICAgICAgICBwcmludCAnbm8gaXRlbSBpbiB0aGUgY29sdW0nICsgaXRlbQorICAgICAgICAgICAgIyBpbnNlcnQgc2NyZWVuIHNob3QgaGVyZQorICAgICAgICAgICAgc2VsZi5zYXZlX3NjcmVlbnNob3Qoc2NyZWVuc2hvdF90eXBlPSdzZWxlbml1bScsIGFwcGVuZF9uYW1lPSdzdGVwMTEnKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuYmFjaygpCisjIHN0ZXAgMTItMTQKKyAgICAgICAgIyBhYm91dCB0ZXN0X2RpY3Q6IHBsZWFzZSByZWZlciB0byB0ZXN0Y2FzZSA5MDQgcmVxdWlyZW1lbnQgc3RlcCAxMi0xNAorICAgICAgICB0ZXN0X2RpY3QgPSB7CisgICAgICAgICAgICAnVGltZSc6eworICAgICAgICAgICAgICAgICdjbGFzcyc6J3RpbWVfdGFrZW4nLAorICAgICAgICAgICAgICAgICdjaGVja19oZWFkX2xpc3QnOlsnUmVjaXBlJywgJ1Rhc2snLCAnRXhlY3V0ZWQnLCAnT3V0Y29tZScsICdUaW1lIChzZWNzKSddLAorICAgICAgICAgICAgICAgICdjaGVja19jb2x1bW5fbGlzdCc6WydjcHVfdXNlZCcsICdjYWNoZV9hdHRlbXB0JywgJ2Rpc2tfaW8nLCAnb3JkZXInLCAncmVjaXBlX3ZlcnNpb24nXQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdDUFUgdXNhZ2UnOnsKKyAgICAgICAgICAgICAgICAnY2xhc3MnOidjcHVfdXNlZCcsCisgICAgICAgICAgICAgICAgJ2NoZWNrX2hlYWRfbGlzdCc6WydSZWNpcGUnLCAnVGFzaycsICdFeGVjdXRlZCcsICdPdXRjb21lJywgJ0NQVSB1c2FnZSddLAorICAgICAgICAgICAgICAgICdjaGVja19jb2x1bW5fbGlzdCc6WydjYWNoZV9hdHRlbXB0JywgJ2Rpc2tfaW8nLCAnb3JkZXInLCAncmVjaXBlX3ZlcnNpb24nLCAndGltZV90YWtlbiddCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ0Rpc2sgSS9PJzp7CisgICAgICAgICAgICAgICAgJ2NsYXNzJzonZGlza19pbycsCisgICAgICAgICAgICAgICAgJ2NoZWNrX2hlYWRfbGlzdCc6WydSZWNpcGUnLCAnVGFzaycsICdFeGVjdXRlZCcsICdPdXRjb21lJywgJ0Rpc2sgSS9PIChtcyknXSwKKyAgICAgICAgICAgICAgICAnY2hlY2tfY29sdW1uX2xpc3QnOlsnY3B1X3VzZWQnLCAnY2FjaGVfYXR0ZW1wdCcsICdvcmRlcicsICdyZWNpcGVfdmVyc2lvbicsICd0aW1lX3Rha2VuJ10KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3Iga2V5IGluIHRlc3RfZGljdDoKKyAgICAgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0X2luX3RhYmxlKCduYXYnLCAnY29yZS1pbWFnZScpLmNsaWNrKCkKKyAgICAgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2Jywga2V5KS5jbGljaygpCisgICAgICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgICAgICBmb3IgaXRlbSBpbiB0ZXN0X2RpY3Rba2V5XVsnY2hlY2tfaGVhZF9saXN0J106CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGl0ZW0gaW4gaGVhZF9saXN0KQorICAgICAgICAgICAgY29sdW1uX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgnY2xhc3MnLCB0ZXN0X2RpY3Rba2V5XVsnY2xhc3MnXSkKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X2ludmVydGVkKGNvbHVtbl9saXN0KSkKKworICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAgICAgZm9yIGl0ZW0yIGluIHRlc3RfZGljdFtrZXldWydjaGVja19jb2x1bW5fbGlzdCddOgorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZChpdGVtMikuY2xpY2soKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAgICAgIyBUQkQ6IHNhdmUgc2NyZWVuIGhlcmUKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTA2ICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTA2KHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ25hdicsICdQYWNrYWdlcycpLmNsaWNrKCkKKyAgICAgICAgIyBmaW5kICJiYXNoIiBpbiBmaXJzdCBjb2x1bW4gKFBhY2thZ2VzKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKltAaWQ9J290YWJsZSddLy90ZFsxXS8vKlt0ZXh0KCk9J2Jhc2gnXSIpLmNsaWNrKCkKKyAgICAgICAgIyBzYXZlIHNjZWVuIGhlcmUgdG8gb2JzZXJ2ZS4uLgorIyBzdGVwIDYKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJHZW5lcmF0ZWQgZmlsZXMiKS5jbGljaygpCisgICAgICAgIGhlYWRfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gWydGaWxlJywgJ1NpemUnXToKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpdGVtIGluIGhlYWRfbGlzdCkKKyAgICAgICAgY19saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoJ2NsYXNzJywgJ3BhdGgnKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQoY19saXN0KSkKKyMgc3RlcCA3CisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiUnVudGltZSBkZXBlbmRlbmNpZXMiKS5jbGljaygpCisgICAgICAgICMgc2F2ZSBzY2VlbiBoZXJlIHRvIG9ic2VydmUuLi4KKyAgICAgICAgIyBub3RlIHRoYXQgaGVyZSB0YWJsZSBuYW1lIGlzIG5vdCAnb3RhYmxlJworICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ2RlcGVuZGVuY2llcycpCisgICAgICAgIGZvciBpdGVtIGluIFsnUGFja2FnZScsICdWZXJzaW9uJywgJ1NpemUnXToKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpdGVtIGluIGhlYWRfbGlzdCkKKyAgICAgICAgY19saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHRfYnlfY29sdW1uX251bWJlcignZGVwZW5kZW5jaWVzJywgMSkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKGNfbGlzdCkpCisgICAgICAgIHRleHRzID0gWydTaXplJywgJ0xpY2Vuc2UnLCAnUmVjaXBlJywgJ1JlY2lwZSB2ZXJzaW9uJywgJ0xheWVyJywgXAorICAgICAgICAgICAgICAgICAgICAgJ0xheWVyIGJyYW5jaCcsICdMYXllciBjb21taXQnLCAnTGF5ZXIgZGlyZWN0b3J5J10KKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuaXNfdGV4dF9wcmVzZW50KHRleHRzKSkKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTEwICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTEwKHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBpbWFnZV90eXBlPSJjb3JlLWltYWdlLW1pbmltYWwiCisgICAgICAgIHRlc3RfcGFja2FnZTE9ImJ1c3lib3giCisgICAgICAgIHRlc3RfcGFja2FnZTI9ImxpYiIKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoaW1hZ2VfdHlwZSkuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJSZWNpcGVzIikuY2xpY2soKQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXAzJykKKworICAgICAgICBzZWxmLnRhYmxlX25hbWUgPSAnb3RhYmxlJworICAgICAgICAjIFRoaXMgaXMgaG93IHdlIGZpbmQgdGhlICJkZWZhdWx0IiByb3dzLW51bWJlciEKKyAgICAgICAgcm93c19kaXNwbGF5ZWQgPSBpbnQoU2VsZWN0KHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoInNlbGVjdC5wYWdlc2l6ZSIpKS5maXJzdF9zZWxlY3RlZF9vcHRpb24udGV4dCkKKyAgICAgICAgcHJpbnQgcm93c19kaXNwbGF5ZWQKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQoc2VsZi50YWJsZV9uYW1lLCByb3dzX2Rpc3BsYXllZCkpCisgICAgICAgIHNlbGYuZmFpbElmKHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQoc2VsZi50YWJsZV9uYW1lLCByb3dzX2Rpc3BsYXllZCArIDEpKQorCisgICAgICAgICMgQ2hlY2sgdGhlIGRlZmF1bHQgdGFibGUgaXMgc29ydGVkIGJ5IFJlY2lwZQorICAgICAgICB0YXNrc19jb2x1bW5fY291bnQgPSBsZW4oc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aCgiL2h0bWwvYm9keS9kaXZbMl0vZGl2L2RpdlsyXS9kaXZbMl0vdGFibGUvdGJvZHkvdHIvdGRbMV0iKSkKKyAgICAgICAgcHJpbnQgdGFza3NfY29sdW1uX2NvdW50CisgICAgICAgIGRlZmF1bHRfY29sdW1uX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dF9ieV9jb2x1bW5fbnVtYmVyKHNlbGYudGFibGVfbmFtZSwgMSkKKyAgICAgICAgI3ByaW50IGRlZmF1bHRfY29sdW1uX2xpc3QKKworICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQoZGVmYXVsdF9jb2x1bW5fbGlzdCkpCisKKyAgICAgICAgIyBTZWFyY2ggdGV4dCBib3ggYmFja2dyb3VuZCB0ZXh0IGlzICJTZWFyY2ggcmVjaXBlcyIKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW0BpZD0nc2VhcmNoZm9ybSddLypbQHBsYWNlaG9sZGVyPSdTZWFyY2ggcmVjaXBlcyddIikpCisKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5jbGVhcigpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuc2VuZF9rZXlzKHRlc3RfcGFja2FnZTEpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgIyBTYXZlIHNjcmVlbiBoZXJlCisgICAgICAgIHNlbGYuc2F2ZV9zY3JlZW5zaG90KHNjcmVlbnNob3RfdHlwZT0nc2VsZW5pdW0nLCBhcHBlbmRfbmFtZT0nc3RlcDQnKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJpLmljb24tcmVtb3ZlIikuY2xpY2soKQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA0XzInKQorCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJkZXBlbmRzX29uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImxheWVyX3ZlcnNpb25fX2JyYW5jaCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJsYXllcl92ZXJzaW9uX19sYXllcl9fY29tbWl0IikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImRlcGVuZHNfYnkiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKworICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCAnUmVjaXBlJykuY2xpY2soKQorICAgICAgICAjIENoZWNrIHRoZSBpbnZlcnRlZCB0YWJsZSBieSBSZWNpcGUKKyAgICAgICAgIyBSZWNpcGUgZG9lc24ndCBoYXZlIGNsYXNzIG5hbWUKKyAgICAgICAgI2ludmVydGVkX3Rhc2tzX2NvbHVtbl9jb3VudCA9IGxlbihzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvaHRtbC9ib2R5L2RpdlsyXS9kaXYvZGl2WzJdL2RpdlsyXS90YWJsZS90Ym9keS90ci90ZFsxXSIpKQorICAgICAgICAjcHJpbnQgaW52ZXJ0ZWRfdGFza3NfY29sdW1uX2NvdW50CisgICAgICAgICNpbnZlcnRlZF9jb2x1bW5fbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0X2J5X2NvbHVtbl9udW1iZXIoc2VsZi50YWJsZV9uYW1lLCAxKQorICAgICAgICAjcHJpbnQgaW52ZXJ0ZWRfY29sdW1uX2xpc3QKKworICAgICAgICAjc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJ6bGliIikuY2xpY2soKQorICAgICAgICAjc2VsZi5kcml2ZXIuYmFjaygpCisgICAgICAgICNzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9pbnZlcnRlZChpbnZlcnRlZF9jb2x1bW5fbGlzdCkpCisgICAgICAgICNzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCAnUmVjaXBlJykuY2xpY2soKQorCisgICAgICAgIHRhYmxlX2hlYWRfZGljdCA9IHsnUmVjaXBlJzoncmVjaXBlX19uYW1lJywgJ1JlY2lwZSBmaWxlJzoncmVjaXBlX2ZpbGUnLCAnU2VjdGlvbic6J3JlY2lwZV9zZWN0aW9uJywgXAorICAgICAgICAgICAgICAgICdMaWNlbnNlJzoncmVjaXBlX2xpY2Vuc2UnLCAnTGF5ZXInOidsYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZScsIFwKKyAgICAgICAgICAgICAgICAnTGF5ZXIgYnJhbmNoJzonbGF5ZXJfdmVyc2lvbl9fYnJhbmNoJ30KKyAgICAgICAgZm9yIGtleSBpbiB0YWJsZV9oZWFkX2RpY3Q6CisgICAgICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCBrZXkpLmNsaWNrKCkKKyAgICAgICAgICAgIGNvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisgICAgICAgICAgICBpZiAoaXNfbGlzdF9pbnZlcnRlZChjb2x1bW5fbGlzdCkgYW5kIGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9saXN0KSkgXAorICAgICAgICAgICAgICAgICAgICBvciAobm90IGNvbHVtbl9saXN0KSA6CisgICAgICAgICAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKHNlbGYudGFibGVfbmFtZSwga2V5KS5jbGljaygpCisgICAgICAgICAgICAgICAgY29sdW1uX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgiY2xhc3MiLCB0YWJsZV9oZWFkX2RpY3Rba2V5XSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQoY29sdW1uX2xpc3QpIG9yIGlzX2xpc3RfaW52ZXJ0ZWQoY29sdW1uX2xpc3QpKQorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiYWNsIikuY2xpY2soKQorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmJhY2soKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X3NlcXVlbmNlZChjb2x1bW5fbGlzdCkgb3IgaXNfbGlzdF9pbnZlcnRlZChjb2x1bW5fbGlzdCkpCisgICAgICAgICAgICAgICAgIyBTZWFyY2ggdGV4dCBib3ggYmFja2dyb3VuZCB0ZXh0IGlzICJTZWFyY2ggcmVjaXBlcyIKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvLypbQGlkPSdzZWFyY2hmb3JtJ10vKltAcGxhY2Vob2xkZXI9J1NlYXJjaCByZWNpcGVzJ10iKSkKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLmNsZWFyKCkKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLnNlbmRfa2V5cyh0ZXN0X3BhY2thZ2UyKQorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgICAgICAgICBjb2x1bW5fc2VhcmNoX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgiY2xhc3MiLCB0YWJsZV9oZWFkX2RpY3Rba2V5XSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQoY29sdW1uX3NlYXJjaF9saXN0KSBvciBpc19saXN0X2ludmVydGVkKGNvbHVtbl9zZWFyY2hfbGlzdCkpCisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigiaS5pY29uLXJlbW92ZSIpLmNsaWNrKCkKKyAgICAgICAgICAgIGVsaWYgaXNfbGlzdF9pbnZlcnRlZChjb2x1bW5fbGlzdCk6CisgICAgICAgICAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKHNlbGYudGFibGVfbmFtZSwga2V5KS5jbGljaygpCisgICAgICAgICAgICAgICAgY29sdW1uX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgiY2xhc3MiLCB0YWJsZV9oZWFkX2RpY3Rba2V5XSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQoY29sdW1uX2xpc3QpKQorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiYWNsIikuY2xpY2soKQorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmJhY2soKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X3NlcXVlbmNlZChjb2x1bW5fbGlzdCkpCisgICAgICAgICAgICAgICAgIyBTZWFyY2ggdGV4dCBib3ggYmFja2dyb3VuZCB0ZXh0IGlzICJTZWFyY2ggcmVjaXBlcyIKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvLypbQGlkPSdzZWFyY2hmb3JtJ10vKltAcGxhY2Vob2xkZXI9J1NlYXJjaCByZWNpcGVzJ10iKSkKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLmNsZWFyKCkKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLnNlbmRfa2V5cyh0ZXN0X3BhY2thZ2UyKQorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgICAgICAgICBjb2x1bW5fc2VhcmNoX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgiY2xhc3MiLCB0YWJsZV9oZWFkX2RpY3Rba2V5XSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQoY29sdW1uX3NlYXJjaF9saXN0KSkKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJpLmljb24tcmVtb3ZlIikuY2xpY2soKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQoY29sdW1uX2xpc3QpKQorICAgICAgICAgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZShzZWxmLnRhYmxlX25hbWUsIGtleSkuY2xpY2soKQorICAgICAgICAgICAgICAgIGNvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3RfaW52ZXJ0ZWQoY29sdW1uX2xpc3QpKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJhY2wiKS5jbGljaygpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoInpsaWIiKS5jbGljaygpCisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuYmFjaygpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3RfaW52ZXJ0ZWQoY29sdW1uX2xpc3QpKQorICAgICAgICAgICAgICAgICMgU2VhcmNoIHRleHQgYm94IGJhY2tncm91bmQgdGV4dCBpcyAiU2VhcmNoIHJlY2lwZXMiCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW0BpZD0nc2VhcmNoZm9ybSddLypbQHBsYWNlaG9sZGVyPSdTZWFyY2ggcmVjaXBlcyddIikpCisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5jbGVhcigpCisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXModGVzdF9wYWNrYWdlMikKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaC1idXR0b24iKS5jbGljaygpCisgICAgICAgICAgICAgICAgY29sdW1uX3NlYXJjaF9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisgICAgICAgICAgICAgICAgI3ByaW50IGNvbHVtbl9zZWFyY2hfbGlzdAorICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X2ludmVydGVkKGNvbHVtbl9zZWFyY2hfbGlzdCkpCisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigiaS5pY29uLXJlbW92ZSIpLmNsaWNrKCkKKworICAgICAgICAjIEJ1ZyA1OTE5CisgICAgICAgIGZvciBrZXkgaW4gdGFibGVfaGVhZF9kaWN0OgorICAgICAgICAgICAgcHJpbnQga2V5CisgICAgICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCBrZXkpLmNsaWNrKCkKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCh0YWJsZV9oZWFkX2RpY3Rba2V5XSkuY2xpY2soKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgICAgICMgQWZ0ZXIgaGlkZSB0aGUgY29sdW1uLCB0aGUgZGVmYXVsdCB0YWJsZSBzaG91bGQgYmUgc29ydGVkIGJ5IFJlY2lwZQorICAgICAgICAgICAgdGFza3NfY29sdW1uX2NvdW50ID0gbGVuKHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudHNfYnlfcGFydGlhbF9saW5rX3RleHQoImFjbCIpKQorICAgICAgICAgICAgI3ByaW50IHRhc2tzX2NvbHVtbl9jb3VudAorICAgICAgICAgICAgZGVmYXVsdF9jb2x1bW5fbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0X2J5X2NvbHVtbl9udW1iZXIoc2VsZi50YWJsZV9uYW1lLCAxKQorICAgICAgICAgICAgI3ByaW50IGRlZmF1bHRfY29sdW1uX2xpc3QKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X3NlcXVlbmNlZChkZWZhdWx0X2NvbHVtbl9saXN0KSkKKworICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgicmVjaXBlX2ZpbGUiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgicmVjaXBlX3NlY3Rpb24iKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgicmVjaXBlX2xpY2Vuc2UiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgibGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTExICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTExKHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ25hdicsICdSZWNpcGVzJykuY2xpY2soKQorIyBzdGVwIDMtNQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLmNsZWFyKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXMoImxpYiIpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgIyBzYXZlIHNjcmVlbiBoZXJlIGZvciBvYnNlcnZhdGlvbgorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA1JykKKyMgc3RlcCA2CisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoImkuaWNvbi1yZW1vdmUiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuY2xlYXIoKQorICAgICAgICAjIHdlIGRlbGliZXJhdGVseSB3YW50ICJubyByZXN1bHQiIGhlcmUKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXMoIm5vIHN1Y2ggaW5wdXQiKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaC1idXR0b24iKS5jbGljaygpCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X3RleHQoIlNob3cgYWxsIHJlY2lwZXMiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLnF1aXQoKQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5MTIgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85MTIoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyID0gc2VsZi5zZXR1cF9icm93c2VyKHNlbGYpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJjb3JlLWltYWdlLW1pbmltYWwiKS5jbGljaygpCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2JywgJ1JlY2lwZXMnKS5jbGljaygpCisgICAgICAgICMgc3RlcCAzCisgICAgICAgIGhlYWRfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gWydSZWNpcGUnLCAnUmVjaXBlIHZlcnNpb24nLCAnUmVjaXBlIGZpbGUnLCAnU2VjdGlvbicsICdMaWNlbnNlJywgJ0xheWVyJ106CisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXRlbSBpbiBoZWFkX2xpc3QpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoImJ1dHRvbi5idG4uZHJvcGRvd24tdG9nZ2xlIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImRlcGVuZHNfb24iKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgibGF5ZXJfdmVyc2lvbl9fYnJhbmNoIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImxheWVyX3ZlcnNpb25fX2xheWVyX19jb21taXQiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZGVwZW5kc19ieSIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigiYnV0dG9uLmJ0bi5kcm9wZG93bi10b2dnbGUiKS5jbGljaygpCisgICAgICAgICMgY2hlY2sgaWYgY29sdW1ucyBzZWxlY3RlZCBhYm92ZSBpcyBzaG93bgorICAgICAgICBjaGVja19saXN0ID0gWydEZXBlbmRlbmNpZXMnLCAnTGF5ZXIgYnJhbmNoJywgJ0xheWVyIGNvbW1pdCcsICdMYXllciBkaXJlY3RvcnknLCAnUmV2ZXJzZSBkZXBlbmRlbmNpZXMnXQorICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgIHRpbWUuc2xlZXAoMikKKyAgICAgICAgcHJpbnQgaGVhZF9saXN0CisgICAgICAgIGZvciBpdGVtIGluIGNoZWNrX2xpc3Q6CisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXRlbSBpbiBoZWFkX2xpc3QpCisgICAgICAgICMgdW4tY2hlY2sgJ2VtIGFsbAorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJidXR0b24uYnRuLmRyb3Bkb3duLXRvZ2dsZSIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJkZXBlbmRzX29uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImxheWVyX3ZlcnNpb25fX2JyYW5jaCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJsYXllcl92ZXJzaW9uX19sYXllcl9fY29tbWl0IikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImRlcGVuZHNfYnkiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoImJ1dHRvbi5idG4uZHJvcGRvd24tdG9nZ2xlIikuY2xpY2soKQorICAgICAgICAjIGRvbid0IGV4aXN0IGFueSBtb3JlCisgICAgICAgIGhlYWRfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gY2hlY2tfbGlzdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbElmKGl0ZW0gaW4gaGVhZF9saXN0KQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5MTMgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85MTMoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJjb3JlLWltYWdlLW1pbmltYWwiKS5jbGljaygpCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2JywgJ1JlY2lwZXMnKS5jbGljaygpCisgICAgICAgICMgc3RlcCAzCisgICAgICAgIGhlYWRfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gWydSZWNpcGUnLCAnUmVjaXBlIHZlcnNpb24nLCAnUmVjaXBlIGZpbGUnLCAnU2VjdGlvbicsICdMaWNlbnNlJywgJ0xheWVyJ106CisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXRlbSBpbiBoZWFkX2xpc3QpCisgICAgICAgICMgc3RlcCA0CisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgIyBzYXZlIHNjcmVlbgorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA0JykKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5MTQgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85MTQoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIGltYWdlX3R5cGU9ImNvcmUtaW1hZ2UtbWluaW1hbCIKKyAgICAgICAgdGVzdF9wYWNrYWdlMT0iYnVzeWJveCIKKyAgICAgICAgdGVzdF9wYWNrYWdlMj0iZ2RibSIKKyAgICAgICAgdGVzdF9wYWNrYWdlMz0iZ2V0dGV4dC1uYXRpdmUiCisgICAgICAgIGRyaXZlciA9IHNlbGYuZHJpdmVyCisgICAgICAgIGRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBkcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KGltYWdlX3R5cGUpLmNsaWNrKCkKKyAgICAgICAgZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoIlJlY2lwZXMiKS5jbGljaygpCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KHRlc3RfcGFja2FnZTEpLmNsaWNrKCkKKworICAgICAgICBzZWxmLnRhYmxlX25hbWUgPSAnaW5mb3JtYXRpb24nCisKKyAgICAgICAgdGFza3Nfcm93X2NvdW50ID0gbGVuKGRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvaHRtbC9ib2R5L2RpdlsyXS9kaXYvZGl2WzNdL2Rpdi9kaXZbMV0vdGFibGUvdGJvZHkvdHIvdGRbMV0iKSkKKyAgICAgICAgdGFza3NfY29sdW1uX2NvdW50ID0gbGVuKGRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvaHRtbC9ib2R5L2RpdlsyXS9kaXYvZGl2WzNdL2Rpdi9kaXZbMV0vdGFibGUvdGJvZHkvdHJbMV0vdGQiKSkKKyAgICAgICAgcHJpbnQgdGFza3Nfcm93X2NvdW50CisgICAgICAgIHByaW50IHRhc2tzX2NvbHVtbl9jb3VudAorCisgICAgICAgIFRhc2tzX2NvbHVtbiA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0X2J5X2NvbHVtbl9udW1iZXIoc2VsZi50YWJsZV9uYW1lLCAyKQorICAgICAgICBwcmludCAoIlRhc2tzX2NvbHVtbj0iLCBUYXNrc19jb2x1bW4pCisKKyAgICAgICAga2V5X3Rhc2tzPVsiZG9fZmV0Y2giLCAiZG9fdW5wYWNrIiwgICJkb19wYXRjaCIsICJkb19jb25maWd1cmUiLCAiZG9fY29tcGlsZSIsICJkb19pbnN0YWxsIiwgImRvX3BhY2thZ2UiLCAiZG9fYnVpbGQiXQorICAgICAgICBpID0gMAorICAgICAgICB3aGlsZSBpIDwgbGVuKGtleV90YXNrcyk6CisgICAgICAgICAgICBpZiBrZXlfdGFza3NbaV0gbm90IGluIFRhc2tzX2NvbHVtbjoKKyAgICAgICAgICAgICAgICBwcmludCAoIkVycm9yISBNaXNzaW5nIGtleSB0YXNrOiAlcyIgJSBrZXlfdGFza3NbaV0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICgiJXMgaXMgaW4gdGFza3MiICUga2V5X3Rhc2tzW2ldKQorICAgICAgICAgICAgaSA9IGkgKyAxCisKKyAgICAgICAgaWYgVGFza3NfY29sdW1uLmluZGV4KGtleV90YXNrc1swXSkgIT0gMDoKKyAgICAgICAgICAgIHByaW50ICgiRXJyb3IhICVzIGlzIG5vdCBpbiB0aGUgcmlnaHQgcG9zaXRpb24iICUga2V5X3Rhc2tzWzBdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgKCIlcyBpcyBpbiByaWdodCBwb3NpdGlvbiIgJSBrZXlfdGFza3NbMF0pCisKKyAgICAgICAgaWYgVGFza3NfY29sdW1uWy0xXSAhPSBrZXlfdGFza3NbLTFdOgorICAgICAgICAgICAgcHJpbnQgKCJFcnJvciEgJXMgaXMgbm90IGluIHRoZSByaWdodCBwb3NpdGlvbiIgJSBrZXlfdGFza3NbLTFdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgKCIlcyBpcyBpbiByaWdodCBwb3NpdGlvbiIgJSBrZXlfdGFza3NbLTFdKQorCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIlBhY2thZ2VzICgiKS5jbGljaygpCisgICAgICAgIHBhY2thZ2VzX25hbWUgPSBkcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJQYWNrYWdlcyAoIikudGV4dAorICAgICAgICBwcmludCBwYWNrYWdlc19uYW1lCisgICAgICAgIHBhY2thZ2VzX251bSA9IHN0cmluZy5hdG9pKGZpbHRlcihzdHIuaXNkaWdpdCwgcmVwcihwYWNrYWdlc19uYW1lKSkpCisgICAgICAgIHByaW50IHBhY2thZ2VzX251bQorCisgICAgICAgIHBhY2thZ2VzX3Jvd19jb3VudCA9IGxlbihkcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aCgiL2h0bWwvYm9keS9kaXZbMl0vZGl2L2RpdlszXS9kaXYvZGl2WzJdL3RhYmxlL3Rib2R5L3RyL3RkWzFdIikpCisgICAgICAgIHByaW50IHBhY2thZ2VzX3Jvd19jb3VudAorCisgICAgICAgIGlmIHBhY2thZ2VzX251bSAhPSBwYWNrYWdlc19yb3dfY291bnQ6CisgICAgICAgICAgICBwcmludCAoIkVycm9yISBUaGUgcGFja2FnZXMgbnVtYmVyIGlzIG5vdCBjb3JyZWN0IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICgiVGhlIHBha2NhZ2VzIG51bWJlciBpcyBjb3JyZWN0IikKKworICAgICAgICBkcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJCdWlsZCBkZXBlbmRlbmNpZXMgKCIpLmNsaWNrKCkKKyAgICAgICAgZGVwZW5kc19uYW1lID0gZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiQnVpbGQgZGVwZW5kZW5jaWVzICgiKS50ZXh0CisgICAgICAgIHByaW50IGRlcGVuZHNfbmFtZQorICAgICAgICBkZXBlbmRzX251bSA9IHN0cmluZy5hdG9pKGZpbHRlcihzdHIuaXNkaWdpdCwgcmVwcihkZXBlbmRzX25hbWUpKSkKKyAgICAgICAgcHJpbnQgZGVwZW5kc19udW0KKworICAgICAgICBpZiBkZXBlbmRzX251bSA9PSAwOgorICAgICAgICAgICAgZGVwZW5kc19tZXNzYWdlID0gcmVwcihkcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigiZGl2LmFsZXJ0LmFsZXJ0LWluZm8iKS50ZXh0KQorICAgICAgICAgICAgcHJpbnQgZGVwZW5kc19tZXNzYWdlCisgICAgICAgICAgICBpZiBkZXBlbmRzX21lc3NhZ2UuZmluZCgiaGFzIG5vIGJ1aWxkIGRlcGVuZGVuY2llcy4iKSA8IDA6CisgICAgICAgICAgICAgICAgcHJpbnQgKCJFcnJvciEgVGhlIG1lc3NhZ2UgaXNuJ3QgZXhwZWN0ZWQuIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgKCJUaGUgbWVzc2FnZSBpcyBleHBlY3RlZCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZXBlbmRzX3Jvd19jb3VudCA9IGxlbihkcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aCgiL2h0bWwvYm9keS9kaXZbMl0vZGl2L2RpdlszXS9kaXYvZGl2WzNdL3RhYmxlL3Rib2R5L3RyL3RkWzFdIikpCisgICAgICAgICAgICBwcmludCBkZXBlbmRzX3Jvd19jb3VudAorICAgICAgICAgICAgaWYgZGVwZW5kc19udW0gIT0gZGVwZW5kc19yb3dfY291bnQ6CisgICAgICAgICAgICAgICAgcHJpbnQgKCJFcnJvciEgVGhlIGRlcGVuZGVudCBwYWNrYWdlcyBudW1iZXIgaXMgbm90IGNvcnJlY3QiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCAoIlRoZSBkZXBlbmRlbnQgcGFja2FnZXMgbnVtYmVyIGlzIGNvcnJlY3QiKQorCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIlJldmVyc2UgYnVpbGQgZGVwZW5kZW5jaWVzICgiKS5jbGljaygpCisgICAgICAgIHJkZXBlbmRzX25hbWUgPSBkcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJSZXZlcnNlIGJ1aWxkIGRlcGVuZGVuY2llcyAoIikudGV4dAorICAgICAgICBwcmludCByZGVwZW5kc19uYW1lCisgICAgICAgIHJkZXBlbmRzX251bSA9IHN0cmluZy5hdG9pKGZpbHRlcihzdHIuaXNkaWdpdCwgcmVwcihyZGVwZW5kc19uYW1lKSkpCisgICAgICAgIHByaW50IHJkZXBlbmRzX251bQorCisgICAgICAgIGlmIHJkZXBlbmRzX251bSA9PSAwOgorICAgICAgICAgICAgcmRlcGVuZHNfbWVzc2FnZSA9IHJlcHIoZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoIiNicm91Z2h0LWluLWJ5ID4gZGl2LmFsZXJ0LmFsZXJ0LWluZm8iKS50ZXh0KQorICAgICAgICAgICAgcHJpbnQgcmRlcGVuZHNfbWVzc2FnZQorICAgICAgICAgICAgaWYgcmRlcGVuZHNfbWVzc2FnZS5maW5kKCJoYXMgbm8gcmV2ZXJzZSBidWlsZCBkZXBlbmRlbmNpZXMuIikgPCAwOgorICAgICAgICAgICAgICAgIHByaW50ICgiRXJyb3IhIFRoZSBtZXNzYWdlIGlzbid0IGV4cGVjdGVkLiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICgiVGhlIG1lc3NhZ2UgaXMgZXhwZWN0ZWQiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgKCJUaGUgcmV2ZXJzZSBkZXBlbmRlbnQgcGFja2FnZXMgbnVtYmVyIGlzIGNvcnJlY3QiKQorCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJSZWNpcGVzIikuY2xpY2soKQorICAgICAgICBkcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCh0ZXN0X3BhY2thZ2UyKS5jbGljaygpCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIlBhY2thZ2VzICgiKS5jbGljaygpCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIkJ1aWxkIGRlcGVuZGVuY2llcyAoIikuY2xpY2soKQorICAgICAgICBkcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJSZXZlcnNlIGJ1aWxkIGRlcGVuZGVuY2llcyAoIikuY2xpY2soKQorCisKKyAgICAgICAgZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoIlJlY2lwZXMiKS5jbGljaygpCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KHRlc3RfcGFja2FnZTMpLmNsaWNrKCkKKworICAgICAgICBuYXRpdmVfdGFza3Nfcm93X2NvdW50ID0gbGVuKGRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvaHRtbC9ib2R5L2RpdlsyXS9kaXYvZGl2WzNdL2Rpdi9kaXZbMV0vdGFibGUvdGJvZHkvdHIvdGRbMV0iKSkKKyAgICAgICAgbmF0aXZlX3Rhc2tzX2NvbHVtbl9jb3VudCA9IGxlbihkcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aCgiL2h0bWwvYm9keS9kaXZbMl0vZGl2L2RpdlszXS9kaXYvZGl2WzFdL3RhYmxlL3Rib2R5L3RyWzFdL3RkIikpCisgICAgICAgIHByaW50IG5hdGl2ZV90YXNrc19yb3dfY291bnQKKyAgICAgICAgcHJpbnQgbmF0aXZlX3Rhc2tzX2NvbHVtbl9jb3VudAorCisgICAgICAgIE5hdGl2ZV9UYXNrc19jb2x1bW4gPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dF9ieV9jb2x1bW5fbnVtYmVyKHNlbGYudGFibGVfbmFtZSwgMikKKyAgICAgICAgcHJpbnQgKCJOYXRpdmVfVGFza3NfY29sdW1uPSIsIE5hdGl2ZV9UYXNrc19jb2x1bW4pCisKKyAgICAgICAgbmF0aXZlX2tleV90YXNrcz1bImRvX2ZldGNoIiwgImRvX3VucGFjayIsICAiZG9fcGF0Y2giLCAiZG9fY29uZmlndXJlIiwgImRvX2NvbXBpbGUiLCAiZG9faW5zdGFsbCIsICJkb19idWlsZCJdCisgICAgICAgIGkgPSAwCisgICAgICAgIHdoaWxlIGkgPCBsZW4obmF0aXZlX2tleV90YXNrcyk6CisgICAgICAgICAgICBpZiBuYXRpdmVfa2V5X3Rhc2tzW2ldIG5vdCBpbiBOYXRpdmVfVGFza3NfY29sdW1uOgorICAgICAgICAgICAgICAgIHByaW50ICgiRXJyb3IhIE1pc3Npbmcga2V5IHRhc2s6ICVzIiAlIG5hdGl2ZV9rZXlfdGFza3NbaV0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICgiJXMgaXMgaW4gdGFza3MiICUgbmF0aXZlX2tleV90YXNrc1tpXSkKKyAgICAgICAgICAgIGkgPSBpICsgMQorCisgICAgICAgIGlmIE5hdGl2ZV9UYXNrc19jb2x1bW4uaW5kZXgobmF0aXZlX2tleV90YXNrc1swXSkgIT0gMDoKKyAgICAgICAgICAgIHByaW50ICgiRXJyb3IhICVzIGlzIG5vdCBpbiB0aGUgcmlnaHQgcG9zaXRpb24iICUgbmF0aXZlX2tleV90YXNrc1swXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICgiJXMgaXMgaW4gcmlnaHQgcG9zaXRpb24iICUgbmF0aXZlX2tleV90YXNrc1swXSkKKworICAgICAgICBpZiBOYXRpdmVfVGFza3NfY29sdW1uWy0xXSAhPSBuYXRpdmVfa2V5X3Rhc2tzWy0xXToKKyAgICAgICAgICAgIHByaW50ICgiRXJyb3IhICVzIGlzIG5vdCBpbiB0aGUgcmlnaHQgcG9zaXRpb24iICUgbmF0aXZlX2tleV90YXNrc1stMV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCAoIiVzIGlzIGluIHJpZ2h0IHBvc2l0aW9uIiAlIG5hdGl2ZV9rZXlfdGFza3NbLTFdKQorCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIlBhY2thZ2VzICgiKS5jbGljaygpCisgICAgICAgIG5hdGl2ZV9wYWNrYWdlc19uYW1lID0gZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiUGFja2FnZXMgKCIpLnRleHQKKyAgICAgICAgcHJpbnQgbmF0aXZlX3BhY2thZ2VzX25hbWUKKyAgICAgICAgbmF0aXZlX3BhY2thZ2VzX251bSA9IHN0cmluZy5hdG9pKGZpbHRlcihzdHIuaXNkaWdpdCwgcmVwcihuYXRpdmVfcGFja2FnZXNfbmFtZSkpKQorICAgICAgICBwcmludCBuYXRpdmVfcGFja2FnZXNfbnVtCisKKyAgICAgICAgaWYgbmF0aXZlX3BhY2thZ2VzX251bSAhPSAwOgorICAgICAgICAgICAgcHJpbnQgKCJFcnJvciEgTmF0aXZlIHRhc2sgc2hvdWxkbid0IGhhdmUgYW55IHBhY2thZ2VzLiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuYXRpdmVfcGFja2FnZV9tZXNzYWdlID0gcmVwcihkcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigiZGl2LmFsZXJ0LmFsZXJ0LWluZm8iKS50ZXh0KQorICAgICAgICAgICAgcHJpbnQgbmF0aXZlX3BhY2thZ2VfbWVzc2FnZQorICAgICAgICAgICAgaWYgbmF0aXZlX3BhY2thZ2VfbWVzc2FnZS5maW5kKCJkb2VzIG5vdCBidWlsZCBhbnkgcGFja2FnZXMuIikgPCAwOgorICAgICAgICAgICAgICAgIHByaW50ICgiRXJyb3IhIFRoZSBtZXNzYWdlIGZvciBuYXRpdmUgdGFzayBpc24ndCBleHBlY3RlZC4iKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCAoIlRoZSBtZXNzYWdlIGZvciBuYXRpdmUgdGFzayBpcyBleHBlY3RlZC4iKQorCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIkJ1aWxkIGRlcGVuZGVuY2llcyAoIikuY2xpY2soKQorICAgICAgICBuYXRpdmVfZGVwZW5kc19uYW1lID0gZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiQnVpbGQgZGVwZW5kZW5jaWVzICgiKS50ZXh0CisgICAgICAgIHByaW50IG5hdGl2ZV9kZXBlbmRzX25hbWUKKyAgICAgICAgbmF0aXZlX2RlcGVuZHNfbnVtID0gc3RyaW5nLmF0b2koZmlsdGVyKHN0ci5pc2RpZ2l0LCByZXByKG5hdGl2ZV9kZXBlbmRzX25hbWUpKSkKKyAgICAgICAgcHJpbnQgbmF0aXZlX2RlcGVuZHNfbnVtCisKKyAgICAgICAgbmF0aXZlX2RlcGVuZHNfcm93X2NvdW50ID0gbGVuKGRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvaHRtbC9ib2R5L2RpdlsyXS9kaXYvZGl2WzNdL2Rpdi9kaXZbM10vdGFibGUvdGJvZHkvdHIvdGRbMV0iKSkKKyAgICAgICAgcHJpbnQgbmF0aXZlX2RlcGVuZHNfcm93X2NvdW50CisKKyAgICAgICAgaWYgbmF0aXZlX2RlcGVuZHNfbnVtICE9IG5hdGl2ZV9kZXBlbmRzX3Jvd19jb3VudDoKKyAgICAgICAgICAgIHByaW50ICgiRXJyb3IhIFRoZSBkZXBlbmRlbnQgcGFja2FnZXMgbnVtYmVyIGlzIG5vdCBjb3JyZWN0IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICgiVGhlIGRlcGVuZGVudCBwYWNrYWdlcyBudW1iZXIgaXMgY29ycmVjdCIpCisKKyAgICAgICAgZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiUmV2ZXJzZSBidWlsZCBkZXBlbmRlbmNpZXMgKCIpLmNsaWNrKCkKKyAgICAgICAgbmF0aXZlX3JkZXBlbmRzX25hbWUgPSBkcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJSZXZlcnNlIGJ1aWxkIGRlcGVuZGVuY2llcyAoIikudGV4dAorICAgICAgICBwcmludCBuYXRpdmVfcmRlcGVuZHNfbmFtZQorICAgICAgICBuYXRpdmVfcmRlcGVuZHNfbnVtID0gc3RyaW5nLmF0b2koZmlsdGVyKHN0ci5pc2RpZ2l0LCByZXByKG5hdGl2ZV9yZGVwZW5kc19uYW1lKSkpCisgICAgICAgIHByaW50IG5hdGl2ZV9yZGVwZW5kc19udW0KKworICAgICAgICBuYXRpdmVfcmRlcGVuZHNfcm93X2NvdW50ID0gbGVuKGRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvaHRtbC9ib2R5L2RpdlsyXS9kaXYvZGl2WzNdL2Rpdi9kaXZbNF0vdGFibGUvdGJvZHkvdHIvdGRbMV0iKSkKKyAgICAgICAgcHJpbnQgbmF0aXZlX3JkZXBlbmRzX3Jvd19jb3VudAorCisgICAgICAgIGlmIG5hdGl2ZV9yZGVwZW5kc19udW0gIT0gbmF0aXZlX3JkZXBlbmRzX3Jvd19jb3VudDoKKyAgICAgICAgICAgIHByaW50ICgiRXJyb3IhIFRoZSByZXZlcnNlIGRlcGVuZGVudCBwYWNrYWdlcyBudW1iZXIgaXMgbm90IGNvcnJlY3QiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgKCJUaGUgcmV2ZXJzZSBkZXBlbmRlbnQgcGFja2FnZXMgbnVtYmVyIGlzIGNvcnJlY3QiKQorCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJSZWNpcGVzIikuY2xpY2soKQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5MTUgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85MTUoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJjb3JlLWltYWdlLW1pbmltYWwiKS5jbGljaygpCisjIHN0ZXAgMworICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ25hdicsICdDb25maWd1cmF0aW9uJykuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJCaXRCYWtlIHZhcmlhYmxlcyIpLmNsaWNrKCkKKyMgc3RlcCA0CisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuY2xlYXIoKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLnNlbmRfa2V5cygibGliIikKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2gtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjIHNhdmUgc2NyZWVuIHRvIHNlZSByZXN1bHQKKyAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgc2VsZi5zYXZlX3NjcmVlbnNob3Qoc2NyZWVuc2hvdF90eXBlPSdzZWxlbml1bScsIGFwcGVuZF9uYW1lPSdzdGVwNCcpCisjIHN0ZXAgNQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJpLmljb24tcmVtb3ZlIikuY2xpY2soKQorICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgIHByaW50IGhlYWRfbGlzdAorICAgICAgICBwcmludCBsZW4oaGVhZF9saXN0KQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaGVhZF9saXN0ID09IFsnVmFyaWFibGUnLCAnVmFsdWUnLCAnU2V0IGluIGZpbGUnLCAnRGVzY3JpcHRpb24nXSkKKyMgc3RlcCA4CisgICAgICAgICMgc2VhcmNoIG90aGVyIHN0cmluZy4gYW5kIGNsaWNrICJWYXJpYWJsZSIgdG8gcmUtc29ydCwgY2hlY2sgaWYgdGFibGUKKyAgICAgICAgIyBoZWFkIGlzIHN0aWxsIHRoZSBzYW1lCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuY2xlYXIoKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLnNlbmRfa2V5cygicG9reSIpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKCdvdGFibGUnLCAnVmFyaWFibGUnKS5jbGljaygpCisgICAgICAgIGhlYWRfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGhlYWRfbGlzdCA9PSBbJ1ZhcmlhYmxlJywgJ1ZhbHVlJywgJ1NldCBpbiBmaWxlJywgJ0Rlc2NyaXB0aW9uJ10pCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnb3RhYmxlJywgJ1ZhcmlhYmxlJykuY2xpY2soKQorICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhoZWFkX2xpc3QgPT0gWydWYXJpYWJsZScsICdWYWx1ZScsICdTZXQgaW4gZmlsZScsICdEZXNjcmlwdGlvbiddKQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5MTYgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85MTYoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJjb3JlLWltYWdlLW1pbmltYWwiKS5jbGljaygpCisjIHN0ZXAgMi0zCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2JywgJ0NvbmZpZ3VyYXRpb24nKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoIkJpdEJha2UgdmFyaWFibGVzIikuY2xpY2soKQorICAgICAgICB2YXJpYWJsZV9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoJ2NsYXNzJywgJ3ZhcmlhYmxlX25hbWUnKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQodmFyaWFibGVfbGlzdCkpCisjIHN0ZXAgNAorICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ290YWJsZScsICdWYXJpYWJsZScpLmNsaWNrKCkKKyAgICAgICAgdmFyaWFibGVfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCdjbGFzcycsICd2YXJpYWJsZV9uYW1lJykKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3RfaW52ZXJ0ZWQodmFyaWFibGVfbGlzdCkpCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnb3RhYmxlJywgJ1ZhcmlhYmxlJykuY2xpY2soKQorIyBzdGVwIDUKKyAgICAgICAgIyBzZWFyY2hpbmcgd29uJ3QgY2hhbmdlIHRoZSBzZXF1ZW50aWFsaXR5CisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuY2xlYXIoKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLnNlbmRfa2V5cygibGliIikKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2gtYnV0dG9uIikuY2xpY2soKQorICAgICAgICB2YXJpYWJsZV9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoJ2NsYXNzJywgJ3ZhcmlhYmxlX25hbWUnKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQodmFyaWFibGVfbGlzdCkpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDkyMyAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0XzkyMyhzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgICMgU3RlcCAyCisgICAgICAgICMgZGVmYXVsdCBzZXF1ZW5jZSBpbiAiQ29tcGxldGVkIG9uIiBjb2x1bW4gaXMgaW52ZXJ0ZWQKKyAgICAgICAgY19saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoJ2NsYXNzJywgJ2NvbXBsZXRlZF9vbicpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X2ludmVydGVkKGNfbGlzdCkpCisgICAgICAgICMgc3RlcCAzCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzdGFydGVkX29uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImxvZyIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJ0aW1lIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgIGhlYWRfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gWydPdXRjb21lJywgJ1RhcmdldCcsICdNYWNoaW5lJywgJ1N0YXJ0ZWQgb24nLCAnQ29tcGxldGVkIG9uJywgJ0ZhaWxlZCB0YXNrcycsICdFcnJvcnMnLCAnV2FybmluZ3MnLCAnV2FybmluZ3MnLCAnVGltZSddOgorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGl0ZW0gaW4gaGVhZF9saXN0KQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5MjQgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85MjQoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICAjIFBsZWFzZSByZWZlciB0byBjYXNlIDkyNCByZXF1aXJlbWVudAorICAgICAgICAjIGRlZmF1bHQgc2VxdWVuY2UgaW4gIkNvbXBsZXRlZCBvbiIgY29sdW1uIGlzIGludmVydGVkCisgICAgICAgIGNfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCdjbGFzcycsICdjb21wbGV0ZWRfb24nKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9pbnZlcnRlZChjX2xpc3QpKQorICAgICAgICAjIFN0ZXAgNAorICAgICAgICAjIGNsaWNrIEVycm9ycyAsIG9yZGVyIGluICJDb21wbGV0ZWQgb24iIHNob3VsZCBiZSBkaXN0dXJiZWQuIFRoZW4gaGlkZQorICAgICAgICAjIGVycm9yIGNvbHVtbiB0byBjaGVjayBpZiBvcmRlciBpbiAiQ29tcGxldGVkIG9uIiBjYW4gYmUgcmVzdG9yZWQKKyAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKCdvdGFibGUnLCAnRXJyb3JzJykuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZXJyb3JzX25vIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgICMgTm90ZTogd2l0aG91dCB0aW1lLnNsZWVwIGhlcmUsIHRoZXJlJ2xsIGJlIHVucHJlZGljdGFibGUgZXJyb3IuLlRCRAorICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgIGNfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCdjbGFzcycsICdjb21wbGV0ZWRfb24nKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9pbnZlcnRlZChjX2xpc3QpKQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5NDAgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85NDAoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJjb3JlLWltYWdlLW1pbmltYWwiKS5jbGljaygpCisjIFN0ZXAgMi0zCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2JywgJ1BhY2thZ2VzJykuY2xpY2soKQorICAgICAgICBjaGVja19oZWFkX2xpc3QgPSBbJ1BhY2thZ2UnLCAnUGFja2FnZSB2ZXJzaW9uJywgJ1NpemUnLCAnUmVjaXBlJ10KKyAgICAgICAgaGVhZF9saXN0ID0gc2VsZi5nZXRfdGFibGVfaGVhZF90ZXh0KCdvdGFibGUnKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaGVhZF9saXN0ID09IGNoZWNrX2hlYWRfbGlzdCkKKyMgU3RlcCA0CisgICAgICAgICMgcHVsbGRvd24gbWVudQorICAgICAgICBvcHRpb25faWRzID0gWydyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lJywgJ3JlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnJhbmNoJywgXAorICAgICAgICAgICAgICAgICAgICAgICdyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19jb21taXQnLCAnbGljZW5zZScsICdyZWNpcGVfX3ZlcnNpb24nXQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgIGZvciBpdGVtIGluIG9wdGlvbl9pZHM6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKGl0ZW0pLmlzX3NlbGVjdGVkKCk6CisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKGl0ZW0pLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjIHNhdmUgc2NyZWVuIGhlcmUgdG8gb2JzZXJ2ZSB0aGF0ICdQYWNrYWdlJyBhbmQgJ1BhY2thZ2UgdmVyc2lvbicgaXMKKyAgICAgICAgIyBub3Qgc2VsZWN0YWJsZQorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA0JykKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTQxICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTQxKHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICAjIFN0ZXAgMi0zCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2JywgJ1BhY2thZ2VzJykuY2xpY2soKQorICAgICAgICAjIGNvbHVtbiAtLSBQYWNrYWdlCisgICAgICAgIGNvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHRfYnlfY29sdW1uX251bWJlcignb3RhYmxlJywgMSkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9saXN0KSkKKyAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKCdvdGFibGUnLCAnU2l6ZScpLmNsaWNrKCkKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTQyICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTQyKHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJQYWNrYWdlcyIpLmNsaWNrKCkKKyAgICAgICAgI2dldCBpbml0aWFsIHRhYmxlIGhlYWRlcgorICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgICNyZW1vdmUgdGhlIFJlY2lwZSBjb2x1bW4gZnJvbSB0YWJsZSBoZWFkZXIKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInJlY2lwZV9fbmFtZSIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjZ2V0IG1vZGlmaWVkIHRhYmxlIGhlYWRlcgorICAgICAgICBuZXdfaGVhZCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGhlYWRfbGlzdCA+IG5ld19oZWFkKQorCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTQzICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTQzKHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJQYWNrYWdlcyIpLmNsaWNrKCkKKyAgICAgICAgI3NlYXJjaCBmb3IgdGhlICJiYXNoIiBwYWNrYWdlIC0+IHRoaXMgc2hvdWxkIGRlZmluaXRlbHkgYmUgcHJlc2VudAorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLmNsZWFyKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXMoImJhc2giKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaC1idXR0b24iKS5jbGljaygpCisgICAgICAgICNjaGVjayBmb3IgdGhlIHNlYXJjaCByZXN1bHQgbWVzc2FnZSAiWFggcGFja2FnZXMgZm91bmQiCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhzZWxmLmlzX3RleHRfcHJlc2VudCgicGFja2FnZXMgZm91bmQiKSkKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTQ0ICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTQ0KHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICAjIHN0ZXAgMTogdGVzdCBSZWNpcGVzIHBhZ2Ugc3R1ZmYKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiUmVjaXBlcyIpLmNsaWNrKCkKKyAgICAgICAgIyBmb3IgdGhlc2UgMyBpdGVtcywgZGVmYXVsdCBzdGF0dXMgaXMgbm90LWNoZWNrZWQKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImxheWVyX3ZlcnNpb25fX2JyYW5jaCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJsYXllcl92ZXJzaW9uX19sYXllcl9fY29tbWl0IikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgICMgb3RhYmxlIGlzIHRoZSByZWNpcGVzIHRhYmxlIGhlcmUKKyAgICAgICAgb3RhYmxlX2hlYWRfdGV4dCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gWyJMYXllciIsICJMYXllciBicmFuY2giLCAiTGF5ZXIgY29tbWl0IiwgIkxheWVyIGRpcmVjdG9yeSJdOgorICAgICAgICAgICAgc2VsZi5mYWlsSWYoaXRlbSBub3QgaW4gb3RhYmxlX2hlYWRfdGV4dCkKKyAgICAgICAgIyBjbGljayB0aGUgZmlzdCByZWNpcGUsIHdoYXRldmVyIGl0IGlzCisgICAgICAgIHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQoIm90YWJsZSIsIDEsIDEpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuaXNfdGV4dF9wcmVzZW50KFsiTGF5ZXIiLCAiTGF5ZXIgYnJhbmNoIiwgIkxheWVyIGNvbW1pdCIsICJSZWNpcGUgZmlsZSJdKSkKKworICAgICAgICAjIHN0ZXAgMjogdGVzdCBQYWNrYWdlcyBwYWdlIHN0dWZmLiBhbG1vc3Qgc2FtZSBhcyBhYm92ZQorICAgICAgICBzZWxmLmRyaXZlci5iYWNrKCkKKyAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiUGFja2FnZXMiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnJhbmNoIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX2NvbW1pdCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICBvdGFibGVfaGVhZF90ZXh0ID0gc2VsZi5nZXRfdGFibGVfaGVhZF90ZXh0KCJvdGFibGUiKQorICAgICAgICBmb3IgaXRlbSBpbiBbIkxheWVyIiwgIkxheWVyIGJyYW5jaCIsICJMYXllciBjb21taXQiXToKKyAgICAgICAgICAgIHNlbGYuZmFpbElmKGl0ZW0gbm90IGluIG90YWJsZV9oZWFkX3RleHQpCisgICAgICAgICMgY2xpY2sgdGhlIGZpc3QgcmVjaXBlLCB3aGF0ZXZlciBpdCBpcworICAgICAgICBzZWxmLmdldF90YWJsZV9lbGVtZW50KCJvdGFibGUiLCAxLCAxKS5jbGljaygpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhzZWxmLmlzX3RleHRfcHJlc2VudChbIkxheWVyIiwgIkxheWVyIGJyYW5jaCIsICJMYXllciBjb21taXQiXSkpCisKKyAgICAgICAgIyBzdGVwIDM6IHRlc3QgUGFja2FnZXMgY29yZS1pbWFnZS1taW5pbWFsKGltYWdlcykgc3R1ZmYuIGFsbW9zdCBzYW1lIGFzIGFib3ZlLiBOb3RlIHdoZW4gZnV0dXJlIGVsZW1lbnQtaWQgY2hhbmdlcy4uLgorICAgICAgICBzZWxmLmRyaXZlci5iYWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgibGF5ZXJfbmFtZSIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJsYXllcl9icmFuY2giKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgibGF5ZXJfY29tbWl0IikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgIG90YWJsZV9oZWFkX3RleHQgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoIm90YWJsZSIpCisgICAgICAgIGZvciBpdGVtIGluIFsiTGF5ZXIiLCAiTGF5ZXIgYnJhbmNoIiwgIkxheWVyIGNvbW1pdCJdOgorICAgICAgICAgICAgc2VsZi5mYWlsSWYoaXRlbSBub3QgaW4gb3RhYmxlX2hlYWRfdGV4dCkKKyAgICAgICAgIyBjbGljayB0aGUgZmlzdCByZWNpcGUsIHdoYXRldmVyIGl0IGlzCisgICAgICAgIHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQoIm90YWJsZSIsIDEsIDEpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuaXNfdGV4dF9wcmVzZW50KFsiTGF5ZXIiLCAiTGF5ZXIgYnJhbmNoIiwgIkxheWVyIGNvbW1pdCJdKSkKKworICAgICAgICAjIHN0ZXAgNDogY2hlY2sgQ29uZmlndXJhdGlvbiBwYWdlCisgICAgICAgIHNlbGYuZHJpdmVyLmJhY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJDb25maWd1cmF0aW9uIikuY2xpY2soKQorICAgICAgICBvdGFibGVfaGVhZF90ZXh0ID0gc2VsZi5nZXRfdGFibGVfaGVhZF90ZXh0KCkKKyAgICAgICAgZm9yIGl0ZW0gaW4gWyJMYXllciIsICJMYXllciBicmFuY2giLCAiTGF5ZXIgY29tbWl0Il06CisgICAgICAgICAgICBzZWxmLmZhaWxJZihpdGVtIG5vdCBpbiBvdGFibGVfaGVhZF90ZXh0KQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5NDUgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85NDUoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIGZvciBpdGVtcyBpbiBbIlBhY2thZ2VzIiwgIlJlY2lwZXMiLCAiVGFza3MiXToKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dChpdGVtcykuY2xpY2soKQorCisgICAgICAgICAgICAjIHRoaXMgbWF5IGJlIHBhZ2Ugc3BlY2lmaWMuIElmIGZ1dHVyZSBwYWdlIGNvbnRlbnQgY2hhbmdlcywgdHJ5IHRvIHJlcGxhY2UgaXQgd2l0aCBuZXcgeHBhdGgKKyAgICAgICAgICAgIHhwYXRoX3Nob3dyb3dzID0gIi9odG1sL2JvZHkvZGl2WzJdL2Rpdi9kaXZbMl0vZGl2WzJdL2RpdlsyXS9kaXYvZGl2L2RpdlsyXS9zZWxlY3QiCisgICAgICAgICAgICB4cGF0aF90YWJsZSA9ICIvaHRtbC9ib2R5L2RpdlsyXS9kaXYvZGl2WzJdL2RpdlsyXS90YWJsZS90Ym9keSIKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCh4cGF0aF9zaG93cm93cykuY2xpY2soKQorICAgICAgICAgICAgcm93c19kaXNwbGF5ZWQgPSBpbnQoc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKHhwYXRoX3Nob3dyb3dzICsgIi9vcHRpb25bMl0iKS50ZXh0KQorCisgICAgICAgICAgICAjIG5vdCBzdXJlIGlmIHRoaXMgaXMgYSBTZWxlbml1bSBTZWxlY3QgYnVnOiBJZiBwYWdlIGlzIG5vdCByZWZyZXNoZWQgaGVyZSwgInNlbGVjdChieSB2aXNpYmxlIHRleHQpIiBvcGVyYXRpb24gd2lsbCBnbyBiYWNrIHRvIDEwMC1yb3cgcGFnZQorICAgICAgICAgICAgIyBTdXJlIHdlIGNhbiB1c2UgZHJpdmVyLmdldCh1cmwpIHRvIHJlZnJlc2ggcGFnZSwgYnV0IHNpbmNlIHBhZ2Ugd2lsbCB2YXJ5LCB3ZSB1c2UgY2xpY2sgbGluayB0ZXh0IGhlcmUKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoaXRlbXMpLmNsaWNrKCkKKyAgICAgICAgICAgIFNlbGVjdChzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJzZWxlY3QucGFnZXNpemUiKSkuc2VsZWN0X2J5X3Zpc2libGVfdGV4dChzdHIocm93c19kaXNwbGF5ZWQpKQorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuaXNfZWxlbWVudF9wcmVzZW50KEJ5LlhQQVRILCB4cGF0aF90YWJsZSArICIvdHJbIiArIHN0cihyb3dzX2Rpc3BsYXllZCkgKyJdIikpCisgICAgICAgICAgICBzZWxmLmZhaWxJZihzZWxmLmlzX2VsZW1lbnRfcHJlc2VudChCeS5YUEFUSCwgeHBhdGhfdGFibGUgKyAiL3RyWyIgKyBzdHIocm93c19kaXNwbGF5ZWQrMSkgKyJdIikpCisKKyAgICAgICAgICAgICMgY2xpY2sgMXN0IHBhY2thZ2UsIHRoZW4gZ28gYmFjayB0byBjaGVjayBpZiBpdCdzIHN0aWxsIHRob3NlIHJvd3Mgc2hvd24uCisgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoeHBhdGhfdGFibGUgKyAiL3RyWzFdL3RkWzFdIikuY2xpY2soKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dChpdGVtcykuY2xpY2soKQorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuaXNfZWxlbWVudF9wcmVzZW50KEJ5LlhQQVRILCB4cGF0aF90YWJsZSArICIvdHJbIiArIHN0cihyb3dzX2Rpc3BsYXllZCkgKyJdIikpCisgICAgICAgICAgICBzZWxmLmZhaWxJZihzZWxmLmlzX2VsZW1lbnRfcHJlc2VudChCeS5YUEFUSCwgeHBhdGhfdGFibGUgKyAiL3RyWyIgKyBzdHIocm93c19kaXNwbGF5ZWQrMSkgKyJdIikpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDk0NiAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0Xzk0NihzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoImNvcmUtaW1hZ2UtbWluaW1hbCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiQ29uZmlndXJhdGlvbiIpLmNsaWNrKCkKKyAgICAgICAgIyBzdGVwIDMtNAorICAgICAgICBjaGVja19saXN0ID0gWyJTdW1tYXJ5IiwgIkJpdEJha2UgdmFyaWFibGVzIl0KKyAgICAgICAgZm9yIGl0ZW0gaW4gY2hlY2tfbGlzdDoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmlzX2VsZW1lbnRfcHJlc2VudChob3c9QnkuTElOS19URVhULCB3aGF0PWl0ZW0pOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlcyBub3QgZm91bmQiICVpdGVtKQorICAgICAgICBpZiBub3Qgc2VsZi5pc190ZXh0X3ByZXNlbnQoWydMYXllcnMnLCAnTGF5ZXInLCAnTGF5ZXIgYnJhbmNoJywgJ0xheWVyIGNvbW1pdCddKToKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJ0ZXh0IG5vdCBmb3VuZCIpCisgICAgICAgICMgc3RlcCA1CisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoIkJpdEJha2UgdmFyaWFibGVzIikuY2xpY2soKQorICAgICAgICBpZiBub3Qgc2VsZi5pc190ZXh0X3ByZXNlbnQoWydWYXJpYWJsZScsICdWYWx1ZScsICdTZXQgaW4gZmlsZScsICdEZXNjcmlwdGlvbiddKToKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJ0ZXh0IG5vdCBmb3VuZCIpCisgICAgICAgICMgVGhpcyBtYXkgYmUgdW5zdGFibGUgYmVjYXVzZSBpdCdzIHBhZ2Utc3BlY2lmaWMKKyAgICAgICAgIyBzdGVwIDY6IHRoaXMgaXMgaG93IHdlIGZpbmQgZmlsdGVyIGJlc2lkZSAiU2V0IGluIGZpbGUiCisgICAgICAgIHRlbXBfZWxlbWVudCA9IHNlbGYuZmluZF9lbGVtZW50X2J5X3RleHRfaW5fdGFibGUoJ290YWJsZScsICJTZXQgaW4gZmlsZSIpCisgICAgICAgIHRlbXBfZWxlbWVudC5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi4uLy8qL2EvaVtAY2xhc3M9J2ljb24tZmlsdGVyIGZpbHRlcmVkJ10iKS5jbGljaygpCisgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiKC8vaW5wdXRbQG5hbWU9J2ZpbHRlciddKVszXSIpLmNsaWNrKCkKKyAgICAgICAgYnRucyA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudHNfYnlfY3NzX3NlbGVjdG9yKCJidXR0b24uYnRuLmJ0bi1wcmltYXJ5IikKKyAgICAgICAgZm9yIGJ0biBpbiBidG5zOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGJ0bi5jbGljaygpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICMgc2F2ZSBzY3JlZW4gaGVyZQorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA2JykKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjIHNhdmUgc2NyZWVuIGhlcmUKKyAgICAgICAgIyBzdGVwIDcKKyAgICAgICAgIyB3ZSBzaG91bGQgbWFudWFsbHkgY2hlY2sgdGhlIHN0ZXAgNi04IHJlc3VsdCB1c2luZyBzY3JlZW5zaG90CisgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgIHNlbGYuc2F2ZV9zY3JlZW5zaG90KHNjcmVlbnNob3RfdHlwZT0nc2VsZW5pdW0nLCBhcHBlbmRfbmFtZT0nc3RlcDcnKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgICMgc3RlcCA5CisgICAgICAgICMgY2xpY2sgdGhlIDFzdCBpdGVtLCBubyBtYXR0ZXIgd2hhdCBpdCBpcworICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKltAaWQ9J290YWJsZSddL3Rib2R5L3RyWzFdL3RkWzFdL2EiKS5jbGljaygpCisgICAgICAgICMgZ2l2ZSBpdCAxIHNlYyBzbyB0aGUgcG9wLXVwIGJlY29tZXMgdGhlICJhY3RpdmVfZWxlbWVudCIKKyAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICBlbGVtZW50ID0gc2VsZi5kcml2ZXIuc3dpdGNoX3RvLmFjdGl2ZV9lbGVtZW50CisgICAgICAgIGNoZWNrX2xpc3QgPSBbJ09yZGVyJywgJ0NvbmZpZ3VyYXRpb24gZmlsZScsICdPcGVyYXRpb24nLCAnTGluZSBudW1iZXInXQorICAgICAgICBmb3IgaXRlbSBpbiBjaGVja19saXN0OgorICAgICAgICAgICAgaWYgaXRlbSBub3QgaW4gZWxlbWVudC50ZXh0OgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlcyBub3QgZm91bmQiICVpdGVtKQorICAgICAgICAjIGFueSBiZXR0ZXIgd2F5IHRvIGNsb3NlIHRoaXMgcG9wLXVwPyAuLi4gVEJECisgICAgICAgIGVsZW1lbnQuZmluZF9lbGVtZW50X2J5X2NsYXNzX25hbWUoImNsb3NlIikuY2xpY2soKQorICAgICAgICAjIHN0ZXAgMTAgOiBuZWVkIHRvIG1hbnVhbGx5IGNoZWNrICJZb2N0byBNYW51YWwiIGluIHNhdmVkIHNjcmVlbgorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJpLmljb24tc2hhcmUuZ2V0LWluZm8iKS5jbGljaygpCisgICAgICAgICMgc2F2ZSBzY3JlZW4gaGVyZQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuc2F2ZV9zY3JlZW5zaG90KHNjcmVlbnNob3RfdHlwZT0nbmF0aXZlJywgYXBwZW5kX25hbWU9J3N0ZXAxMCcpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDk0NyAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0Xzk0NyhzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoImNvcmUtaW1hZ2UtbWluaW1hbCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKCduYXYnLCAnQ29uZmlndXJhdGlvbicpLmNsaWNrKCkKKyAgICAgICAgIyBzdGVwIDIKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiQml0QmFrZSB2YXJpYWJsZXMiKS5jbGljaygpCisgICAgICAgICMgc3RlcCAzCisgICAgICAgIGRlZiB4cGF0aF9vcHRpb24oY29sdW1uX25hbWUpOgorICAgICAgICAgICAgIyByZXR1cm4geHBhdGggb2Ygb3B0aW9ucyB1bmRlciAiRWRpdCBjb2x1bW5zIiBidXR0b24KKyAgICAgICAgICAgIHJldHVybiBzZWxmLnNob3J0ZXN0X3hwYXRoKCdpZCcsICduYXZUYWInKSArIHNlbGYuc2hvcnRlc3RfeHBhdGgoJ2lkJywgJ2VkaXRjb2wnKSBcCisgICAgICAgICAgICAgICAgKyBzZWxmLnNob3J0ZXN0X3hwYXRoKCdpZCcsIGNvbHVtbl9uYW1lKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoJ2VkaXQtY29sdW1ucy1idXR0b24nKS5jbGljaygpCisgICAgICAgICMgYnkgZGVmYXVsdCwgb3B0aW9uICJEZXNjcmlwdGlvbiIgYW5kICJTZXQgaW4gZmlsZSIgd2VyZSBjaGVja2VkCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCh4cGF0aF9vcHRpb24oJ2Rlc2NyaXB0aW9uJykpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKHhwYXRoX29wdGlvbignZmlsZScpKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgnZWRpdC1jb2x1bW5zLWJ1dHRvbicpLmNsaWNrKCkKKyAgICAgICAgY2hlY2tfbGlzdCA9IFsnRGVzY3JpcHRpb24nLCAnU2V0IGluIGZpbGUnXQorICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgIGZvciBpdGVtIGluIGNoZWNrX2xpc3Q6CisgICAgICAgICAgICBzZWxmLmZhaWxJZihpdGVtIGluIGhlYWRfbGlzdCkKKyAgICAgICAgIyBjaGVjayB0aGVzZSAyIG9wdGlvbnMgYW5kIHZlcmlmeSBhZ2FpbgorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoJ2VkaXQtY29sdW1ucy1idXR0b24nKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCh4cGF0aF9vcHRpb24oJ2Rlc2NyaXB0aW9uJykpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKHhwYXRoX29wdGlvbignZmlsZScpKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgnZWRpdC1jb2x1bW5zLWJ1dHRvbicpLmNsaWNrKCkKKyAgICAgICAgaGVhZF9saXN0ID0gc2VsZi5nZXRfdGFibGVfaGVhZF90ZXh0KCdvdGFibGUnKQorICAgICAgICBmb3IgaXRlbSBpbiBjaGVja19saXN0OgorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGl0ZW0gaW4gaGVhZF9saXN0KQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5NDggICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85NDgoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJjb3JlLWltYWdlLW1pbmltYWwiKS5jbGljaygpCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2JywgJ0NvbmZpZ3VyYXRpb24nKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoIkJpdEJha2UgdmFyaWFibGVzIikuY2xpY2soKQorICAgICAgICAjZ2V0IG51bWJlciBvZiB2YXJpYWJsZXMgdmlzaWJsZSBieSBkZWZhdWx0CisgICAgICAgIG51bWJlcl9iZWZvcmVfc2VhcmNoID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2NsYXNzX25hbWUoJ3BhZ2UtaGVhZGVyJykudGV4dAorICAgICAgICAjIHNlYXJjaCBmb3IgYSB3aGlsZS4uLgorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLmNsZWFyKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXMoIkJCIikKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2gtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjZ2V0IG51bWJlciBvZiB2YXJpYWJsZXMgdmlzaWJsZSBhZnRlciBzZWFyY2gKKyAgICAgICAgbnVtYmVyX2FmdGVyX3NlYXJjaCA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jbGFzc19uYW1lKCdwYWdlLWhlYWRlcicpLnRleHQKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG51bWJlcl9iZWZvcmVfc2VhcmNoID4gbnVtYmVyX2FmdGVyX3NlYXJjaCkKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTQ5ICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTQ5KHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ25hdicsICdjb3JlLWltYWdlLW1pbmltYWwnKS5jbGljaygpCisgICAgICAgICMgc3RlcCAzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiUGFja2FnZXMgaW5jbHVkZWQiKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJEaXJlY3Rvcnkgc3RydWN0dXJlIikKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbixlOgorICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoZSkKKyAgICAgICAgICAgIHNlbGYuZmFpbElmKFRydWUpCisgICAgICAgICMgc3RlcCA0CisgICAgICAgIGhlYWRfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gWydQYWNrYWdlJywgJ1BhY2thZ2UgdmVyc2lvbicsICdTaXplJywgJ0RlcGVuZGVuY2llcycsICdSZXZlcnNlIGRlcGVuZGVuY2llcycsICdSZWNpcGUnXToKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpdGVtIGluIGhlYWRfbGlzdCkKKyAgICAgICAgIyBzdGVwIDUtNgorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgIHNlbGVjdGFibGVfY2xhc3MgPSAnY2hlY2tib3gnCisgICAgICAgICMgbWluaW11bS10YWJsZSA6IG1lYW5zIHVuc2VsZWN0YWJsZSBpdGVtcworICAgICAgICB1bnNlbGVjdGFibGVfY2xhc3MgPSAnY2hlY2tib3ggbXV0ZWQnCisgICAgICAgIHNlbGVjdGFibGVfY2hlY2tfbGlzdCA9IFsnRGVwZW5kZW5jaWVzJywgJ0xheWVyJywgJ0xheWVyIGJyYW5jaCcsICdMYXllciBjb21taXQnLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTGljZW5zZScsICdSZWNpcGUnLCAnUmVjaXBlIHZlcnNpb24nLCAnUmV2ZXJzZSBkZXBlbmRlbmNpZXMnLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU2l6ZScsICdTaXplIG92ZXIgdG90YWwgKCUpJ10KKyAgICAgICAgdW5zZWxlY3RhYmxlX2NoZWNrX2xpc3QgPSBbJ1BhY2thZ2UnLCAnUGFja2FnZSB2ZXJzaW9uJ10KKyAgICAgICAgc2VsZWN0YWJsZV9saXN0ID0gbGlzdCgpCisgICAgICAgIHVuc2VsZWN0YWJsZV9saXN0ID0gbGlzdCgpCisgICAgICAgIHNlbGVjdGFibGVfZWxlbWVudHMgPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvLypbQGlkPSdlZGl0Y29sJ10vLypbQGNsYXNzPSciICsgc2VsZWN0YWJsZV9jbGFzcyArICInXSIpCisgICAgICAgIHVuc2VsZWN0YWJsZV9lbGVtZW50cyA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudHNfYnlfeHBhdGgoIi8vKltAaWQ9J2VkaXRjb2wnXS8vKltAY2xhc3M9JyIgKyB1bnNlbGVjdGFibGVfY2xhc3MgKyAiJ10iKQorICAgICAgICBmb3IgZWxlbWVudCBpbiBzZWxlY3RhYmxlX2VsZW1lbnRzOgorICAgICAgICAgICAgc2VsZWN0YWJsZV9saXN0LmFwcGVuZChlbGVtZW50LnRleHQpCisgICAgICAgIGZvciBlbGVtZW50IGluIHVuc2VsZWN0YWJsZV9lbGVtZW50czoKKyAgICAgICAgICAgIHVuc2VsZWN0YWJsZV9saXN0LmFwcGVuZChlbGVtZW50LnRleHQpCisgICAgICAgICMgY2hlY2sgdGhlbQorICAgICAgICBmb3IgaXRlbSBpbiBzZWxlY3RhYmxlX2NoZWNrX2xpc3Q6CisgICAgICAgICAgICBpZiBpdGVtIG5vdCBpbiBzZWxlY3RhYmxlX2xpc3Q6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiAlcyBub3QgZm91bmQgaW4gZHJvcGRvd24gbWVudSBcbiIgJSBpdGVtKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbElmKFRydWUpCisgICAgICAgIGZvciBpdGVtIGluIHVuc2VsZWN0YWJsZV9jaGVja19saXN0OgorICAgICAgICAgICAgaWYgaXRlbSBub3QgaW4gdW5zZWxlY3RhYmxlX2xpc3Q6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiAlcyBub3QgZm91bmQgaW4gZHJvcGRvd24gbWVudSBcbiIgJSBpdGVtKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbElmKFRydWUpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgIyBzdGVwIDcKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJEaXJlY3Rvcnkgc3RydWN0dXJlIikuY2xpY2soKQorICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ2RpcnRhYmxlJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gWydEaXJlY3RvcnkgLyBGaWxlJywgJ1N5bWJvbGljIGxpbmsgdG8nLCAnU291cmNlIHBhY2thZ2UnLCAnU2l6ZScsICdQZXJtaXNzaW9ucycsICdPd25lcicsICdHcm91cCddOgorICAgICAgICAgICAgaWYgaXRlbSBub3QgaW4gaGVhZF9saXN0OgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIgJXMgbm90IGZvdW5kIGluIERpcmVjdG9yeSBzdHJ1Y3R1cmUgdGFibGUgaGVhZCBcbiIgJSBpdGVtKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbElmKFRydWUpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDk1MCAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0Xzk1MChzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgICMgc3RlcDMmNDogc28gZmFyIHdlJ3JlIG5vdCBzdXJlIGlmIHRoZXJlJ3MgInN1Y2Nlc3NmdWwgYnVpbGQiIG9yICJmYWlsZWQKKyAgICAgICAgIyBidWlsZCIuSWYgZWl0aGVyIG9mIHRoZW0gZG9lc24ndCBleGlzdCwgd2UgY2FuIHN0aWxsIGdvIG9uIG90aGVyIHN0ZXBzCisgICAgICAgIGNoZWNrX2xpc3QgPSBbJ0NvbmZpZ3VyYXRpb24nLCAnVGFza3MnLCAnUmVjaXBlcycsICdQYWNrYWdlcycsICdUaW1lJywgJ0NQVSB1c2FnZScsICdEaXNrIEkvTyddCisgICAgICAgIGhhc19zdWNjZXNzZnVsX2J1aWxkID0gMQorICAgICAgICBoYXNfZmFpbGVkX2J1aWxkID0gMQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXNzX2ljb24gPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKltAY2xhc3M9J2ljb24tb2stc2lnbiBzdWNjZXNzJ10iKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5sb2cuaW5mbygibm8gc3VjY2Vzc2Z1bCBidWlsZCBleGlzdHMiKQorICAgICAgICAgICAgaGFzX3N1Y2Nlc3NmdWxfYnVpbGQgPSAwCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIGhhc19zdWNjZXNzZnVsX2J1aWxkOgorICAgICAgICAgICAgcGFzc19pY29uLmNsaWNrKCkKKyAgICAgICAgICAgICMgc2F2ZSBzY3JlZW4gaGVyZSB0byBjaGVjayBpZiBpdCBtYXRjaGVzIHJlcXVpcmVtZW50LgorICAgICAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgICAgIHNlbGYuc2F2ZV9zY3JlZW5zaG90KHNjcmVlbnNob3RfdHlwZT0nc2VsZW5pdW0nLCBhcHBlbmRfbmFtZT0nc3RlcDNfMScpCisgICAgICAgICAgICBmb3IgaXRlbSBpbiBjaGVja19saXN0OgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKCduYXYnLCBpdGVtKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJsaW5rICAlcyBjYW5ub3QgYmUgZm91bmQgaW4gdGhlIHBhZ2UiICUgaXRlbSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsSWYoVHJ1ZSkKKyAgICAgICAgICAgICMgc3RlcCA2CisgICAgICAgICAgICBjaGVja19saXN0XzIgPSBbJ1BhY2thZ2VzIGluY2x1ZGVkJywgJ1RvdGFsIHBhY2thZ2Ugc2l6ZScsIFwKKyAgICAgICAgICAgICAgICAgICAgICAnTGljZW5zZSBtYW5pZmVzdCcsICdJbWFnZSBmaWxlcyddCisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi5pc190ZXh0X3ByZXNlbnQoY2hlY2tfbGlzdF8yKSkKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmJhY2soKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmYWlsX2ljb24gPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKltAY2xhc3M9J2ljb24tbWludXMtc2lnbiBlcnJvciddIikKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGhhc19mYWlsZWRfYnVpbGQgPSAwCisgICAgICAgICAgICBzZWxmLmxvZy5pbmZvKCJubyBmYWlsZWQgYnVpbGQgZXhpc3RzIikKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgaGFzX2ZhaWxlZF9idWlsZDoKKyAgICAgICAgICAgIGZhaWxfaWNvbi5jbGljaygpCisgICAgICAgICAgICAjIHNhdmUgc2NyZWVuIGhlcmUgdG8gY2hlY2sgaWYgaXQgbWF0Y2hlcyByZXF1aXJlbWVudC4KKyAgICAgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXAzXzInKQorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gY2hlY2tfbGlzdDoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2JywgaXRlbSkKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigibGluayAgJXMgY2Fubm90IGJlIGZvdW5kIGluIHRoZSBwYWdlIiAlIGl0ZW0pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbElmKFRydWUpCisgICAgICAgICAgICAjIHN0ZXAgNyBpbnZvbHZlZAorICAgICAgICAgICAgY2hlY2tfbGlzdF8zID0gWydNYWNoaW5lJywgJ0Rpc3RybycsICdMYXllcnMnLCAnVG90YWwgbnVtYmVyIG9mIHRhc2tzJywgJ1Rhc2tzIGV4ZWN1dGVkJywgXAorICAgICAgICAgICAgICAgICAgICAgICdUYXNrcyBub3QgZXhlY3V0ZWQnLCAnUmV1c2UnLCAnUmVjaXBlcyBidWlsdCcsICdQYWNrYWdlcyBidWlsdCddCisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi5pc190ZXh0X3ByZXNlbnQoY2hlY2tfbGlzdF8zKSkKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmJhY2soKQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5NTEgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85NTEoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICAjIGN1cnJlbnRseSB0ZXN0IGNhc2UgaXRzZWxmIGlzbid0IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyAiMSBzdWNjZXNzZnVsIGFuZAorICAgICAgICAjIDEgZmFpbGVkIGJ1aWxkIgorICAgICAgICBoYXNfc3VjY2Vzc2Z1bF9idWlsZCA9IDEKKyAgICAgICAgaGFzX2ZhaWxlZF9idWlsZCA9IDEKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmFpbF9pY29uID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvLypbQGNsYXNzPSdpY29uLW1pbnVzLXNpZ24gZXJyb3InXSIpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBoYXNfZmFpbGVkX2J1aWxkID0gMAorICAgICAgICAgICAgc2VsZi5sb2cuaW5mbygibm8gZmFpbGVkIGJ1aWxkIGV4aXN0cyIpCisgICAgICAgICAgICBwYXNzCisgICAgICAgICMgaWYgdGhlcmUncyBmYWlsZWQgYnVpbGQsIHdlIGNhbiBwcm9jZWVkCisgICAgICAgIGlmIGhhc19mYWlsZWRfYnVpbGQ6CisgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoImVycm9yIikuY2xpY2soKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuYmFjaygpCisgICAgICAgICMgbm90IHN1cmUgaWYgdGhlcmUgIm11c3QgYmUiIHNvbWUgd2FybmluZ3MsIHNvIGhlcmUgc2F2ZSBhIHNjcmVlbgorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA0JykKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTU1ICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTU1KHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygiIFlvdSBzaG91bGQgbWFudWFsbHkgY3JlYXRlIGFsbCBpbWFnZXMgYmVmb3JlIHRlc3Qgc3RhcnRzISIpCisgICAgICAgICMgU28gZmFyIHRoZSBjYXNlIGl0c2VsZiBpcyBub3QgcmVzcG9uc2FibGUgZm9yIGNyZWF0aW5nIGFsbCBzb3J0cyBvZiBpbWFnZXMuCisgICAgICAgICMgU28gYXNzdW1pbmcgdGhleSBhcmUgYWxyZWFkeSB0aGVyZQorICAgICAgICAjIHN0ZXAgMgorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJjb3JlLWltYWdlLW1pbmltYWwiKS5jbGljaygpCisgICAgICAgICMgc2F2ZSBzY3JlZW4gaGVyZSB0byBzZWUgdGhlIHBhZ2UgY29tcG9uZW50CisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDk1NiAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0Xzk1NihzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgICMgc3RlcCAyLTMgbmVlZCB0byBydW4gbWFudWFsbHkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygic3RlcCAyLTM6IGNoZWNraW5nIHRoZSBoZWxwIG1lc3NhZ2Ugd2hlbiB5b3UgaG92ZXIgb24gaGVscCBpY29uIG9mIHRhcmdldCxcCisgICAgICAgICAgICAgICAgICAgICAgIHRhc2tzLCByZWNpcGVzLCBwYWNrYWdlcyBuZWVkIHRvIHJ1biBtYW51YWxseSIpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiVG9hc3RlciBtYW51YWwiKS5jbGljaygpCisgICAgICAgIGlmIG5vdCBzZWxmLmlzX3RleHRfcHJlc2VudCgiVG9hc3RlciBNYW51YWwiKToKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJwbGVhc2UgY2hlY2sgW1RvYXN0ZXIgbWFudWFsXSBsaW5rIG9uIHBhZ2UiKQorICAgICAgICAgICAgc2VsZi5mYWlsSWYoVHJ1ZSkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3RvYXN0ZXJ1aXRlc3QvdG9hc3Rlcl90ZXN0LmNmZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy90b2FzdGVydWl0ZXN0L3RvYXN0ZXJfdGVzdC5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQwNWY5YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy90b2FzdGVydWl0ZXN0L3RvYXN0ZXJfdGVzdC5jZmcKQEAgLTAsMCArMSwyMSBAQAorIyBDb25maWd1cmF0aW9uIGZpbGUgZm9yIHRvYXN0ZXJfdGVzdAorIyBTb3J0ZWQgYnkgZGlmZmVyZW50IGhvc3QgdHlwZQorCisjIHRlc3QgYnJvd3NlciBjb3VsZCBiZTogZmlyZWZveDsgY2hyb21lOyBpZShzdGlsbCB1bmRlciBkZXZlbG9wbWVudCkKKyMgbG9nZ2luZ19sZXZlbCBjb3VsZCBiZTogQ1JJVElDQUw7IEVSUk9SOyBXQVJOSU5HOyBJTkZPOyBERUJVRzsgTk9UU0VUCisKKworW3RvYXN0ZXJfdGVzdF9saW51eF0KK3RvYXN0ZXJfdXJsID0gJ2h0dHA6Ly8xMjcuMC4wLjE6ODAwMCcKK3Rlc3RfYnJvd3NlciA9ICdmaXJlZm94JwordGVzdF9jYXNlcyA9IFs5NDZdCitsb2dnaW5nX2xldmVsID0gJ0lORk8nCisKKworW3RvYXN0ZXJfdGVzdF93aW5kb3dzXQordG9hc3Rlcl91cmwgPSAnaHR0cDovLzEyNy4wLjAuMTo4MDAwJwordGVzdF9icm93c2VyID0gWydpZScsICdmaXJlZm94JywgJ2Nocm9tZSddCit0ZXN0X2Nhc2VzID0gWzkwMSwgOTAyLCA5MDNdCitsb2dnaW5nX2xldmVsID0gJ0RFQlVHJworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy91cmxjaGVjay5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy91cmxjaGVjay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODIwZjgyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3VybGNoZWNrLnB5CkBAIC0wLDAgKzEsNTMgQEAKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KK2ltcG9ydCBzeXMKKworaW1wb3J0IGh0dHBsaWIyCitpbXBvcnQgY29uZmlnCitpbXBvcnQgdXJsbGlzdAorCisKK2NvbmZpZy5sb2dnZXIuaW5mbygiVGVzdGluZyAlcyB3aXRoICVzIiwgY29uZmlnLlRPQVNURVJfQkFTRVVSTCwgY29uZmlnLlczQ19WQUxJREFUT1IpCisKK2RlZiB2YWxpZGF0ZV9odG1sNSh1cmwpOgorICAgIGh0dHBfY2xpZW50ID0gaHR0cGxpYjIuSHR0cChOb25lKQorICAgIHN0YXR1cyA9ICJGYWlsZWQiCisgICAgZXJyb3JzID0gLTEKKyAgICB3YXJuaW5ncyA9IC0xCisKKyAgICB1cmxyZXF1ZXN0ID0gY29uZmlnLlczQ19WQUxJREFUT1IrdXJsCisKKyAgICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKKyAgICAjIHdlIGRpc2FibGUgdGhlIGJyb2FkLWV4Y2VwdCBiZWNhdXNlIHdlIHdhbnQgdG8gYWN0dWFsbHkgY2F0Y2ggYWxsIHBvc3NpYmxlIGV4Y2VwdGlvbnMKKyAgICB0cnk6CisgICAgICAgIHJlc3AsIF8gPSBodHRwX2NsaWVudC5yZXF1ZXN0KHVybHJlcXVlc3QsICJIRUFEIikKKyAgICAgICAgaWYgcmVzcFsneC13M2MtdmFsaWRhdG9yLXN0YXR1cyddICE9ICJBYm9ydCI6CisgICAgICAgICAgICBzdGF0dXMgPSByZXNwWyd4LXczYy12YWxpZGF0b3Itc3RhdHVzJ10KKyAgICAgICAgICAgIGVycm9ycyA9IGludChyZXNwWyd4LXczYy12YWxpZGF0b3ItZXJyb3JzJ10pCisgICAgICAgICAgICB3YXJuaW5ncyA9IGludChyZXNwWyd4LXczYy12YWxpZGF0b3Itd2FybmluZ3MnXSkKKworICAgICAgICAgICAgaWYgc3RhdHVzID09ICdJbnZhbGlkJzoKKyAgICAgICAgICAgICAgICBjb25maWcubG9nZ2VyLndhcm4oIkZhaWxlZCAlcyBpcyAlc1x0ZXJyb3JzICVzIHdhcm5pbmdzICVzIChjaGVjayBhdCAlcykiLCB1cmwsIHN0YXR1cywgZXJyb3JzLCB3YXJuaW5ncywgdXJscmVxdWVzdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygiT0shICVzIiwgdXJsKQorCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgIGNvbmZpZy5sb2dnZXIud2FybigiRmFpbGVkIHZhbGlkYXRpb24gY2FsbDogJXMiLCBleGMpCisgICAgcmV0dXJuIChzdGF0dXMsIGVycm9ycywgd2FybmluZ3MpCisKKworZGVmIHByaW50X3ZhbGlkYXRpb24odXJsKToKKyAgICBzdGF0dXMsIGVycm9ycywgd2FybmluZ3MgPSB2YWxpZGF0ZV9odG1sNSh1cmwpCisgICAgY29uZmlnLmxvZ2dlci5lcnJvcigidXJsICVzIGlzICVzXHRlcnJvcnMgJXMgd2FybmluZ3MgJXMgKGNoZWNrIGF0ICVzKSIsIHVybCwgc3RhdHVzLCBlcnJvcnMsIHdhcm5pbmdzLCBjb25maWcuVzNDX1ZBTElEQVRPUit1cmwpCisKKworZGVmIG1haW4oKToKKyAgICBwcmludCgiVGVzdGluZyAlcyB3aXRoICVzIiAlIChjb25maWcuVE9BU1RFUl9CQVNFVVJMLCBjb25maWcuVzNDX1ZBTElEQVRPUikpCisKKyAgICBpZiBsZW4oc3lzLmFyZ3YpID4gMToKKyAgICAgICAgcHJpbnRfdmFsaWRhdGlvbihzeXMuYXJndlsxXSkKKyAgICBlbHNlOgorICAgICAgICBmb3IgdXJsIGluIHVybGxpc3QuVVJMUzoKKyAgICAgICAgICAgIHByaW50X3ZhbGlkYXRpb24oY29uZmlnLlRPQVNURVJfQkFTRVVSTCt1cmwpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdXJsbGlzdC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy91cmxsaXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYjlmZmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdXJsbGlzdC5weQpAQCAtMCwwICsxLDM5IEBACitVUkxTID0gWworICAgICd0b2FzdGVyZ3VpL2xhbmRpbmcvJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZHMvJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3Rhc2tzLycsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS90YXNrcy8xLycsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS90YXNrLzEnLAorICAgICd0b2FzdGVyZ3VpL2J1aWxkLzEvcmVjaXBlcy8nLAorICAgICd0b2FzdGVyZ3VpL2J1aWxkLzEvcmVjaXBlLzEvYWN0aXZlX3RhYi8xJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3JlY2lwZS8xJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3JlY2lwZV9wYWNrYWdlcy8xJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3BhY2thZ2VzLycsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS9wYWNrYWdlLzEnLAorICAgICd0b2FzdGVyZ3VpL2J1aWxkLzEvcGFja2FnZV9idWlsdF9kZXBlbmRlbmNpZXMvMScsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS9wYWNrYWdlX2luY2x1ZGVkX2RldGFpbC8xLzEnLAorICAgICd0b2FzdGVyZ3VpL2J1aWxkLzEvcGFja2FnZV9pbmNsdWRlZF9kZXBlbmRlbmNpZXMvMS8xJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3BhY2thZ2VfaW5jbHVkZWRfcmV2ZXJzZV9kZXBlbmRlbmNpZXMvMS8xJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3RhcmdldC8xJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3RhcmdldC8xL3RhcmdldHBrZycsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS90YXJnZXQvMS9kaXJpbmZvJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3RhcmdldC8xL2RpcmluZm9fZmlsZXBhdGgvXy9iaW4vYmFzaCcsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS9jb25maWd1cmF0aW9uJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL2NvbmZpZ3ZhcnMnLAorICAgICd0b2FzdGVyZ3VpL2J1aWxkLzEvYnVpbGR0aW1lJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL2NwdXVzYWdlJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL2Rpc2tpbycsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS90YXJnZXQvMS9wYWNrYWdlZmlsZS8xJywKKyAgICAndG9hc3Rlcmd1aS9uZXdwcm9qZWN0LycsCisgICAgJ3RvYXN0ZXJndWkvcHJvamVjdHMvJywKKyAgICAndG9hc3Rlcmd1aS9wcm9qZWN0LzEnLAorICAgICd0b2FzdGVyZ3VpL3Byb2plY3QvMS9jb25maWd1cmF0aW9uJywKKyAgICAndG9hc3Rlcmd1aS9wcm9qZWN0LzEvYnVpbGRzLycsCisgICAgJ3RvYXN0ZXJndWkvcHJvamVjdC8xL2xheWVycy8nLAorICAgICd0b2FzdGVyZ3VpL3Byb2plY3QvMS9sYXllci8xJywKKyAgICAndG9hc3Rlcmd1aS9wcm9qZWN0LzEvaW1wb3J0bGF5ZXInLAorICAgICd0b2FzdGVyZ3VpL3Byb2plY3QvMS90YXJnZXRzLycsCisgICAgJ3RvYXN0ZXJndWkvcHJvamVjdC8xL21hY2hpbmVzLycsCisgICAgJ3RvYXN0ZXJndWkvJywKK10KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNlYWExMWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5CkBAIC0wLDAgKzEsMTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgb3MuZW52aXJvbi5zZXRkZWZhdWx0KCJESkFOR09fU0VUVElOR1NfTU9EVUxFIiwgInRvYXN0ZXJtYWluLnNldHRpbmdzIikKKworICAgIGZyb20gZGphbmdvLmNvcmUubWFuYWdlbWVudCBpbXBvcnQgZXhlY3V0ZV9mcm9tX2NvbW1hbmRfbGluZQorCisgICAgZXhlY3V0ZV9mcm9tX2NvbW1hbmRfbGluZShzeXMuYXJndikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21hbmFnZW1lbnQvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21hbmFnZW1lbnQvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWFuYWdlbWVudC9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9tYW5hZ2VtZW50L2NvbW1hbmRzL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9tYW5hZ2VtZW50L2NvbW1hbmRzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21hbmFnZW1lbnQvY29tbWFuZHMvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWFuYWdlbWVudC9jb21tYW5kcy9sc3VwZGF0ZXMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21hbmFnZW1lbnQvY29tbWFuZHMvbHN1cGRhdGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZTk1MTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21hbmFnZW1lbnQvY29tbWFuZHMvbHN1cGRhdGVzLnB5CkBAIC0wLDAgKzEsMTIgQEAKK2Zyb20gZGphbmdvLmNvcmUubWFuYWdlbWVudC5iYXNlIGltcG9ydCBOb0FyZ3NDb21tYW5kLCBDb21tYW5kRXJyb3IKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgTGF5ZXJTb3VyY2UKK2ltcG9ydCBvcworCitjbGFzcyBDb21tYW5kKE5vQXJnc0NvbW1hbmQpOgorICAgIGFyZ3MgICAgPSAiIgorICAgIGhlbHAgICAgPSAiVXBkYXRlcyBsb2NhbGx5IGNhY2hlZCBpbmZvcm1hdGlvbiBmcm9tIGFsbCBMYXllclNvdXJjZXMiCisKKworICAgIGRlZiBoYW5kbGVfbm9hcmdzKHNlbGYsICoqb3B0aW9ucyk6CisgICAgICAgIGZvciBscyBpbiBMYXllclNvdXJjZS5vYmplY3RzLmFsbCgpOgorICAgICAgICAgICAgbHMudXBkYXRlKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDAxX2luaXRpYWwucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwMV9pbml0aWFsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZGVlZjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwMV9pbml0aWFsLnB5CkBAIC0wLDAgKzEsNDAwIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBtb2RlbCAnQnVpbGQnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9idWlsZCcsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdtYWNoaW5lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnaW1hZ2VfZnN0eXBlcycsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ2Rpc3RybycsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ2Rpc3Ryb192ZXJzaW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnc3RhcnRlZF9vbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnKSgpKSwKKyAgICAgICAgICAgICgnY29tcGxldGVkX29uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcpKCkpLAorICAgICAgICAgICAgKCdvdXRjb21lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD0yKSksCisgICAgICAgICAgICAoJ2Vycm9yc19ubycsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCkpLAorICAgICAgICAgICAgKCd3YXJuaW5nc19ubycsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCkpLAorICAgICAgICAgICAgKCdjb29rZXJfbG9nX3BhdGgnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTUwMCkpLAorICAgICAgICAgICAgKCdidWlsZF9uYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnYml0YmFrZV92ZXJzaW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD01MCkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ0J1aWxkJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1RhcmdldCcKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3RhcmdldCcsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdidWlsZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkJ1aWxkJ10pKSwKKyAgICAgICAgICAgICgndGFyZ2V0Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnaXNfaW1hZ2UnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnKShkZWZhdWx0PUZhbHNlKSksCisgICAgICAgICAgICAoJ2ZpbGVfbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ2ZpbGVfc2l6ZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKCkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1RhcmdldCddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdUYXNrJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fdGFzaycsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdidWlsZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHJlbGF0ZWRfbmFtZT0ndGFza19idWlsZCcsIHRvPW9ybVsnb3JtLkJ1aWxkJ10pKSwKKyAgICAgICAgICAgICgnb3JkZXInLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShudWxsPVRydWUpKSwKKyAgICAgICAgICAgICgndGFza19leGVjdXRlZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcpKGRlZmF1bHQ9RmFsc2UpKSwKKyAgICAgICAgICAgICgnb3V0Y29tZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9NSkpLAorICAgICAgICAgICAgKCdzc3RhdGVfY2hlY2tzdW0nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdwYXRoX3RvX3NzdGF0ZV9vYmonLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD01MDAsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgncmVjaXBlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdidWlsZF9yZWNpcGUnLCB0bz1vcm1bJ29ybS5SZWNpcGUnXSkpLAorICAgICAgICAgICAgKCd0YXNrX25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCkpLAorICAgICAgICAgICAgKCdzb3VyY2VfdXJsJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9MjU1LCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ3dvcmtfZGlyZWN0b3J5Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9MjU1LCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ3NjcmlwdF90eXBlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD0wKSksCisgICAgICAgICAgICAoJ2xpbmVfbnVtYmVyJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD0wKSksCisgICAgICAgICAgICAoJ2Rpc2tfaW8nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShudWxsPVRydWUpKSwKKyAgICAgICAgICAgICgnY3B1X3VzYWdlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJykobnVsbD1UcnVlLCBtYXhfZGlnaXRzPTYsIGRlY2ltYWxfcGxhY2VzPTIpKSwKKyAgICAgICAgICAgICgnZWxhcHNlZF90aW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD0wLCBtYXhfbGVuZ3RoPTUwKSksCisgICAgICAgICAgICAoJ3NzdGF0ZV9yZXN1bHQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTApKSwKKyAgICAgICAgICAgICgnbWVzc2FnZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjQwKSksCisgICAgICAgICAgICAoJ2xvZ2ZpbGUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD0yNTUsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydUYXNrJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1Rhc2tfRGVwZW5kZW5jeScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3Rhc2tfZGVwZW5kZW5jeScsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCd0YXNrJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSd0YXNrX2RlcGVuZGVuY2llc190YXNrJywgdG89b3JtWydvcm0uVGFzayddKSksCisgICAgICAgICAgICAoJ2RlcGVuZHNfb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShyZWxhdGVkX25hbWU9J3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnLCB0bz1vcm1bJ29ybS5UYXNrJ10pKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydUYXNrX0RlcGVuZGVuY3knXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnUGFja2FnZScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3BhY2thZ2UnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnYnVpbGQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5CdWlsZCddKSksCisgICAgICAgICAgICAoJ3JlY2lwZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlJlY2lwZSddLCBudWxsPVRydWUpKSwKKyAgICAgICAgICAgICgnbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ3ZlcnNpb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdyZXZpc2lvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MzIsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnc3VtbWFyeScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjAwLCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ2Rlc2NyaXB0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0yMDAsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnc2l6ZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCkpLAorICAgICAgICAgICAgKCdpbnN0YWxsZWRfc2l6ZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCkpLAorICAgICAgICAgICAgKCdzZWN0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD04MCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdsaWNlbnNlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD04MCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1BhY2thZ2UnXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnUGFja2FnZV9EZXBlbmRlbmN5JworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fcGFja2FnZV9kZXBlbmRlbmN5JywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ3BhY2thZ2UnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShyZWxhdGVkX25hbWU9J3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZScsIHRvPW9ybVsnb3JtLlBhY2thZ2UnXSkpLAorICAgICAgICAgICAgKCdkZXBlbmRzX29uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnLCB0bz1vcm1bJ29ybS5QYWNrYWdlJ10pKSwKKyAgICAgICAgICAgICgnZGVwX3R5cGUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKSwKKyAgICAgICAgICAgICgndGFyZ2V0Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uVGFyZ2V0J10sIG51bGw9VHJ1ZSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1BhY2thZ2VfRGVwZW5kZW5jeSddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV90YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgndGFyZ2V0Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uVGFyZ2V0J10pKSwKKyAgICAgICAgICAgICgncGFja2FnZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlBhY2thZ2UnXSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZSddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdQYWNrYWdlX0ZpbGUnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9wYWNrYWdlX2ZpbGUnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgncGFja2FnZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHJlbGF0ZWRfbmFtZT0nYnVpbGRmaWxlbGlzdF9wYWNrYWdlJywgdG89b3JtWydvcm0uUGFja2FnZSddKSksCisgICAgICAgICAgICAoJ3BhdGgnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD0yNTUsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnc2l6ZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKCkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1BhY2thZ2VfRmlsZSddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdSZWNpcGUnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9yZWNpcGUnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwLCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ3ZlcnNpb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdsYXllcl92ZXJzaW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdyZWNpcGVfbGF5ZXJfdmVyc2lvbicsIHRvPW9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSkpLAorICAgICAgICAgICAgKCdzdW1tYXJ5Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDAsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnZGVzY3JpcHRpb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdzZWN0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDAsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnbGljZW5zZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjAwLCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ2xpY2Vuc2luZ19pbmZvJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJykoYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdob21lcGFnZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJykobWF4X2xlbmd0aD0yMDAsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnYnVndHJhY2tlcicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJykobWF4X2xlbmd0aD0yMDAsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnZmlsZV9wYXRoJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9MjU1KSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnUmVjaXBlJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1JlY2lwZV9EZXBlbmRlbmN5JworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fcmVjaXBlX2RlcGVuZGVuY3knLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgncmVjaXBlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdyX2RlcGVuZGVuY2llc19yZWNpcGUnLCB0bz1vcm1bJ29ybS5SZWNpcGUnXSkpLAorICAgICAgICAgICAgKCdkZXBlbmRzX29uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdyX2RlcGVuZGVuY2llc19kZXBlbmRzJywgdG89b3JtWydvcm0uUmVjaXBlJ10pKSwKKyAgICAgICAgICAgICgnZGVwX3R5cGUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydSZWNpcGVfRGVwZW5kZW5jeSddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdMYXllcicKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX2xheWVyJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCkpLAorICAgICAgICAgICAgKCdsb2NhbF9wYXRoJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9MjU1KSksCisgICAgICAgICAgICAoJ2xheWVyX2luZGV4X3VybCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJykobWF4X2xlbmd0aD0yMDApKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydMYXllciddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdMYXllcl9WZXJzaW9uJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fbGF5ZXJfdmVyc2lvbicsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdidWlsZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHJlbGF0ZWRfbmFtZT0nbGF5ZXJfdmVyc2lvbl9idWlsZCcsIHRvPW9ybVsnb3JtLkJ1aWxkJ10pKSwKKyAgICAgICAgICAgICgnbGF5ZXInLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShyZWxhdGVkX25hbWU9J2xheWVyX3ZlcnNpb25fbGF5ZXInLCB0bz1vcm1bJ29ybS5MYXllciddKSksCisgICAgICAgICAgICAoJ2JyYW5jaCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9NTApKSwKKyAgICAgICAgICAgICgnY29tbWl0Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgncHJpb3JpdHknLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydMYXllcl9WZXJzaW9uJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1ZhcmlhYmxlJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fdmFyaWFibGUnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnYnVpbGQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShyZWxhdGVkX25hbWU9J3ZhcmlhYmxlX2J1aWxkJywgdG89b3JtWydvcm0uQnVpbGQnXSkpLAorICAgICAgICAgICAgKCd2YXJpYWJsZV9uYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgndmFyaWFibGVfdmFsdWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKShibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ2NoYW5nZWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnKShkZWZhdWx0PUZhbHNlKSksCisgICAgICAgICAgICAoJ2h1bWFuX3JlYWRhYmxlX25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTIwMCkpLAorICAgICAgICAgICAgKCdkZXNjcmlwdGlvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcpKGJsYW5rPVRydWUpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydWYXJpYWJsZSddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdWYXJpYWJsZUhpc3RvcnknCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV92YXJpYWJsZWhpc3RvcnknLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgndmFyaWFibGUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5WYXJpYWJsZSddKSksCisgICAgICAgICAgICAoJ2ZpbGVfbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnKShtYXhfbGVuZ3RoPTI1NSkpLAorICAgICAgICAgICAgKCdsaW5lX251bWJlcicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKG51bGw9VHJ1ZSkpLAorICAgICAgICAgICAgKCdvcGVyYXRpb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTE2KSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnVmFyaWFibGVIaXN0b3J5J10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ0xvZ01lc3NhZ2UnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9sb2dtZXNzYWdlJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ2J1aWxkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uQnVpbGQnXSkpLAorICAgICAgICAgICAgKCdsZXZlbCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCkpLAorICAgICAgICAgICAgKCdtZXNzYWdlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0yNDApKSwKKyAgICAgICAgICAgICgncGF0aG5hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD0yNTUsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnbGluZW5vJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykobnVsbD1UcnVlKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnTG9nTWVzc2FnZSddKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ0J1aWxkJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fYnVpbGQnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1RhcmdldCcKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3RhcmdldCcpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnVGFzaycKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3Rhc2snKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1Rhc2tfRGVwZW5kZW5jeScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3Rhc2tfZGVwZW5kZW5jeScpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnUGFja2FnZScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3BhY2thZ2UnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1BhY2thZ2VfRGVwZW5kZW5jeScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3BhY2thZ2VfZGVwZW5kZW5jeScpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fdGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdQYWNrYWdlX0ZpbGUnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9wYWNrYWdlX2ZpbGUnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1JlY2lwZScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3JlY2lwZScpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnUmVjaXBlX0RlcGVuZGVuY3knCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9yZWNpcGVfZGVwZW5kZW5jeScpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnTGF5ZXInCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9sYXllcicpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnTGF5ZXJfVmVyc2lvbicKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX2xheWVyX3ZlcnNpb24nKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1ZhcmlhYmxlJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fdmFyaWFibGUnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1ZhcmlhYmxlSGlzdG9yeScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3ZhcmlhYmxlaGlzdG9yeScpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnTG9nTWVzc2FnZScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX2xvZ21lc3NhZ2UnKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2VfZnN0eXBlcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNpbmdfaW5mbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCcsICdtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICc1J30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDAyX2F1dG9fX2FkZF9maWVsZF9idWlsZF90aW1lc3BlbnQucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwMl9hdXRvX19hZGRfZmllbGRfYnVpbGRfdGltZXNwZW50LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNDIxY2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwMl9hdXRvX19hZGRfZmllbGRfYnVpbGRfdGltZXNwZW50LnB5CkBAIC0wLDAgKzEsMTgwIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnQnVpbGQudGltZXNwZW50JworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2J1aWxkJywgJ3RpbWVzcGVudCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD0wKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnQnVpbGQudGltZXNwZW50JworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2J1aWxkJywgJ3RpbWVzcGVudCcpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9mc3R5cGVzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNpbmdfaW5mbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCcsICdtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICc1J30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDAzX3RpbWVzcGVudC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDAzX3RpbWVzcGVudC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjAwZjllCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDNfdGltZXNwZW50LnB5CkBAIC0wLDAgKzEsMTgyIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBEYXRhTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKK2NsYXNzIE1pZ3JhdGlvbihEYXRhTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAiV3JpdGUgeW91ciBmb3J3YXJkcyBtZXRob2RzIGhlcmUuIgorICAgICAgICAjIE5vdGU6IERvbid0IHVzZSAiZnJvbSBhcHBuYW1lLm1vZGVscyBpbXBvcnQgTW9kZWxOYW1lIi4KKyAgICAgICAgIyBVc2Ugb3JtLk1vZGVsTmFtZSB0byByZWZlciB0byBtb2RlbHMgaW4gdGhpcyBhcHBsaWNhdGlvbiwKKyAgICAgICAgIyBhbmQgb3JtWydhcHBuYW1lLk1vZGVsTmFtZSddIGZvciBtb2RlbHMgaW4gb3RoZXIgYXBwbGljYXRpb25zLgorCisgICAgICAgIGZvciBidWlsZCBpbiBvcm0uQnVpbGQub2JqZWN0cy5hbGwoKToKKyAgICAgICAgICAgIGJ1aWxkLnRpbWVzcGVudCA9IGludCgoYnVpbGQuY29tcGxldGVkX29uIC0gYnVpbGQuc3RhcnRlZF9vbikudG90YWxfc2Vjb25kcygpKQorICAgICAgICAgICAgYnVpbGQuc2F2ZSgpCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICJXcml0ZSB5b3VyIGJhY2t3YXJkcyBtZXRob2RzIGhlcmUuIgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCByZXZlcnNlIHRoaXMgbWlncmF0aW9uLiIpCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2VfZnN0eXBlcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNpbmdfaW5mbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCcsICdtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICc1J30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KKyAgICBzeW1tZXRyaWNhbCA9IFRydWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA0X2F1dG9fX2FkZF9maWVsZF9wYWNrYWdlX2luc3RhbGxlZF9uYW1lLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDRfYXV0b19fYWRkX2ZpZWxkX3BhY2thZ2VfaW5zdGFsbGVkX25hbWUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM0NDQ1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA0X2F1dG9fX2FkZF9maWVsZF9wYWNrYWdlX2luc3RhbGxlZF9uYW1lLnB5CkBAIC0wLDAgKzEsMTgxIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnUGFja2FnZS5pbnN0YWxsZWRfbmFtZScKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9wYWNrYWdlJywgJ2luc3RhbGxlZF9uYW1lJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShkZWZhdWx0PScnLCBtYXhfbGVuZ3RoPTEwMCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1BhY2thZ2UuaW5zdGFsbGVkX25hbWUnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcGFja2FnZScsICdpbnN0YWxsZWRfbmFtZScpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9mc3R5cGVzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9pbmRleF91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2luZ19pbmZvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2snOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb3JkZXJpbmcnOiAiKCdvcmRlcicsICdyZWNpcGUnKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJywgJ21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzUnfSksCisgICAgICAgICAgICAncGF0aF90b19zc3RhdGVfb2JqJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDVfYXV0b19fYWRkX3RhcmdldF9pbWFnZV9maWxlX19hZGRfdGFyZ2V0X2ZpbGVfX2FkZF9maWVsZF92YXJpYWJsZWhpc3Rvci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA1X2F1dG9fX2FkZF90YXJnZXRfaW1hZ2VfZmlsZV9fYWRkX3RhcmdldF9maWxlX19hZGRfZmllbGRfdmFyaWFibGVoaXN0b3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JlN2FjMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA1X2F1dG9fX2FkZF90YXJnZXRfaW1hZ2VfZmlsZV9fYWRkX3RhcmdldF9maWxlX19hZGRfZmllbGRfdmFyaWFibGVoaXN0b3IucHkKQEAgLTAsMCArMSwyODEgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgQWRkaW5nIG1vZGVsICdUYXJnZXRfRmlsZScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3RhcmdldF9maWxlJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ3RhcmdldCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlRhcmdldCddKSksCisgICAgICAgICAgICAoJ3BhdGgnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnc2l6ZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKCkpLAorICAgICAgICAgICAgKCdpbm9kZXR5cGUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKSwKKyAgICAgICAgICAgICgncGVybWlzc2lvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKCkpLAorICAgICAgICAgICAgKCdvd25lcicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTI4KSksCisgICAgICAgICAgICAoJ2dyb3VwJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMjgpKSwKKyAgICAgICAgICAgICgnZGlyZWN0b3J5Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdkaXJlY3Rvcnlfc2V0JywgdG89b3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSkpLAorICAgICAgICAgICAgKCdzeW1fdGFyZ2V0Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdzeW1saW5rX3NldCcsIGJsYW5rPVRydWUsIHRvPW9ybVsnb3JtLlRhcmdldF9GaWxlJ10pKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydUYXJnZXRfRmlsZSddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdUYXJnZXRfSW1hZ2VfRmlsZScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3RhcmdldF9pbWFnZV9maWxlJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ3RhcmdldCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlRhcmdldCddKSksCisgICAgICAgICAgICAoJ2ZpbGVfbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnKShtYXhfbGVuZ3RoPTEwMCkpLAorICAgICAgICAgICAgKCdmaWxlX3NpemUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydUYXJnZXRfSW1hZ2VfRmlsZSddKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdWYXJpYWJsZUhpc3RvcnkudmFsdWUnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fdmFyaWFibGVoaXN0b3J5JywgJ3ZhbHVlJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKShkZWZhdWx0PScnLCBibGFuaz1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUmVjaXBlLmxpY2Vuc2luZ19pbmZvJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3JlY2lwZScsICdsaWNlbnNpbmdfaW5mbycpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnVGFyZ2V0LmZpbGVfbmFtZScKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV90YXJnZXQnLCAnZmlsZV9uYW1lJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdUYXJnZXQuZmlsZV9zaXplJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3RhcmdldCcsICdmaWxlX3NpemUnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0J1aWxkLmltYWdlX2ZzdHlwZXMnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fYnVpbGQnLCAnaW1hZ2VfZnN0eXBlcycpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0xvZ01lc3NhZ2UudGFzaycKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9sb2dtZXNzYWdlJywgJ3Rhc2snLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlRhc2snXSwgbnVsbD1UcnVlLCBibGFuaz1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdUYXNrLmVsYXBzZWRfdGltZScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3Rhc2snLCAnZWxhcHNlZF90aW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJykobnVsbD1UcnVlLCBtYXhfZGlnaXRzPTYsIGRlY2ltYWxfcGxhY2VzPTIpKQorICAgICAgICAjIEFkZGluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnVGFzaycsIGZpZWxkcyBbJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnXQorICAgICAgICBkYi5jcmVhdGVfdW5pcXVlKHUnb3JtX3Rhc2snLCBbJ2J1aWxkX2lkJywgJ3JlY2lwZV9pZCcsICd0YXNrX25hbWUnXSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdUYXNrJywgZmllbGRzIFsnYnVpbGQnLCAncmVjaXBlJywgJ3Rhc2tfbmFtZSddCisgICAgICAgIGRiLmRlbGV0ZV91bmlxdWUodSdvcm1fdGFzaycsIFsnYnVpbGRfaWQnLCAncmVjaXBlX2lkJywgJ3Rhc2tfbmFtZSddKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1RhcmdldF9GaWxlJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fdGFyZ2V0X2ZpbGUnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1RhcmdldF9JbWFnZV9GaWxlJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fdGFyZ2V0X2ltYWdlX2ZpbGUnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1ZhcmlhYmxlSGlzdG9yeS52YWx1ZScKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV92YXJpYWJsZWhpc3RvcnknLCAndmFsdWUnKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdSZWNpcGUubGljZW5zaW5nX2luZm8nCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcmVjaXBlJywgJ2xpY2Vuc2luZ19pbmZvJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKShkZWZhdWx0PScnLCBibGFuaz1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1RhcmdldC5maWxlX25hbWUnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fdGFyZ2V0JywgJ2ZpbGVfbmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD0nJywgbWF4X2xlbmd0aD0xMDApLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnVGFyZ2V0LmZpbGVfc2l6ZScKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV90YXJnZXQnLCAnZmlsZV9zaXplJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTApLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnQnVpbGQuaW1hZ2VfZnN0eXBlcycKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9idWlsZCcsICdpbWFnZV9mc3R5cGVzJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShkZWZhdWx0PScnLCBtYXhfbGVuZ3RoPTEwMCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0xvZ01lc3NhZ2UudGFzaycKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9sb2dtZXNzYWdlJywgJ3Rhc2tfaWQnKQorCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnVGFzay5lbGFwc2VkX3RpbWUnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV90YXNrJywgJ2VsYXBzZWRfdGltZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9NTApKQorCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ2dyb3VwJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5vZGV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ293bmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncGVybWlzc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3N5bV90YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInc3ltbGlua19zZXQnIiwgJ2JsYW5rJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA2X2F1dG9fX2FkZF9maWVsZF90YXJnZXRfaW1hZ2Vfc2l6ZV9fYWRkX2ZpZWxkX3RhcmdldF9saWNlbnNlX21hbmlmZXN0X3AucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwNl9hdXRvX19hZGRfZmllbGRfdGFyZ2V0X2ltYWdlX3NpemVfX2FkZF9maWVsZF90YXJnZXRfbGljZW5zZV9tYW5pZmVzdF9wLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYmUzMGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwNl9hdXRvX19hZGRfZmllbGRfdGFyZ2V0X2ltYWdlX3NpemVfX2FkZF9maWVsZF90YXJnZXRfbGljZW5zZV9tYW5pZmVzdF9wLnB5CkBAIC0wLDAgKzEsMjM1IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnVGFyZ2V0LmltYWdlX3NpemUnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fdGFyZ2V0JywgJ2ltYWdlX3NpemUnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdUYXJnZXQubGljZW5zZV9tYW5pZmVzdF9wYXRoJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3RhcmdldCcsICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9NTAwLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1RhcmdldF9GaWxlLnBlcm1pc3Npb24nCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV90YXJnZXRfZmlsZScsICdwZXJtaXNzaW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xNikpCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnVGFyZ2V0X0ZpbGUuc3ltX3RhcmdldCcKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3RhcmdldF9maWxlJywgJ3N5bV90YXJnZXRfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShudWxsPVRydWUsIHRvPW9ybVsnb3JtLlRhcmdldF9GaWxlJ10pKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1RhcmdldF9GaWxlLmRpcmVjdG9yeScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3RhcmdldF9maWxlJywgJ2RpcmVjdG9yeV9pZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKG51bGw9VHJ1ZSwgdG89b3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSkpCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1RhcmdldC5pbWFnZV9zaXplJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3RhcmdldCcsICdpbWFnZV9zaXplJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdUYXJnZXQubGljZW5zZV9tYW5pZmVzdF9wYXRoJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3RhcmdldCcsICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnKQorCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnVGFyZ2V0X0ZpbGUucGVybWlzc2lvbicKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3RhcmdldF9maWxlJywgJ3Blcm1pc3Npb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKQorCisgICAgICAgICMgVXNlciBjaG9zZSB0byBub3QgZGVhbCB3aXRoIGJhY2t3YXJkcyBOVUxMIGlzc3VlcyBmb3IgJ1RhcmdldF9GaWxlLnN5bV90YXJnZXQnCisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ2Fubm90IHJldmVyc2UgdGhpcyBtaWdyYXRpb24uICdUYXJnZXRfRmlsZS5zeW1fdGFyZ2V0JyBhbmQgaXRzIHZhbHVlcyBjYW5ub3QgYmUgcmVzdG9yZWQuIikKKyAgICAgICAgCisgICAgICAgICMgVGhlIGZvbGxvd2luZyBjb2RlIGlzIHByb3ZpZGVkIGhlcmUgdG8gYWlkIGluIHdyaXRpbmcgYSBjb3JyZWN0IG1pZ3JhdGlvbgorICAgICAgICAjIENoYW5naW5nIGZpZWxkICdUYXJnZXRfRmlsZS5zeW1fdGFyZ2V0JworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fdGFyZ2V0X2ZpbGUnLCAnc3ltX3RhcmdldF9pZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlRhcmdldF9GaWxlJ10pKQorCisgICAgICAgICMgVXNlciBjaG9zZSB0byBub3QgZGVhbCB3aXRoIGJhY2t3YXJkcyBOVUxMIGlzc3VlcyBmb3IgJ1RhcmdldF9GaWxlLmRpcmVjdG9yeScKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgcmV2ZXJzZSB0aGlzIG1pZ3JhdGlvbi4gJ1RhcmdldF9GaWxlLmRpcmVjdG9yeScgYW5kIGl0cyB2YWx1ZXMgY2Fubm90IGJlIHJlc3RvcmVkLiIpCisgICAgICAgIAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcm92aWRlZCBoZXJlIHRvIGFpZCBpbiB3cml0aW5nIGEgY29ycmVjdCBtaWdyYXRpb24KKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnVGFyZ2V0X0ZpbGUuZGlyZWN0b3J5JworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fdGFyZ2V0X2ZpbGUnLCAnZGlyZWN0b3J5X2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSkpCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA3X2F1dG9fX2FkZF9oZWxwdGV4dC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA3X2F1dG9fX2FkZF9oZWxwdGV4dC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTRjNTM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDdfYXV0b19fYWRkX2hlbHB0ZXh0LnB5CkBAIC0wLDAgKzEsMjE0IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBtb2RlbCAnSGVscFRleHQnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9oZWxwdGV4dCcsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdidWlsZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHJlbGF0ZWRfbmFtZT0naGVscHRleHRfYnVpbGQnLCB0bz1vcm1bJ29ybS5CdWlsZCddKSksCisgICAgICAgICAgICAoJ2FyZWEnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKSwKKyAgICAgICAgICAgICgna2V5Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgndGV4dCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcpKCkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ0hlbHBUZXh0J10pCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnSGVscFRleHQnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9oZWxwdGV4dCcpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA4X2F1dG9fX2NoZ19maWVsZF92YXJpYWJsZWhpc3Rvcnlfb3BlcmF0aW9uX19jaGdfZmllbGRfcmVjaXBlX2Rlc2NyaXB0aW8ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwOF9hdXRvX19jaGdfZmllbGRfdmFyaWFibGVoaXN0b3J5X29wZXJhdGlvbl9fY2hnX2ZpZWxkX3JlY2lwZV9kZXNjcmlwdGlvLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZTQwOGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwOF9hdXRvX19jaGdfZmllbGRfdmFyaWFibGVoaXN0b3J5X29wZXJhdGlvbl9fY2hnX2ZpZWxkX3JlY2lwZV9kZXNjcmlwdGlvLnB5CkBAIC0wLDAgKzEsMjI1IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1ZhcmlhYmxlSGlzdG9yeS5vcGVyYXRpb24nCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV92YXJpYWJsZWhpc3RvcnknLCAnb3BlcmF0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD02NCkpCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnUmVjaXBlLmRlc2NyaXB0aW9uJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fcmVjaXBlJywgJ2Rlc2NyaXB0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJykoKSkKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdUYXJnZXRfSW1hZ2VfRmlsZS5maWxlX25hbWUnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV90YXJnZXRfaW1hZ2VfZmlsZScsICdmaWxlX25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD0yNTQpKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1BhY2thZ2UuZGVzY3JpcHRpb24nCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9wYWNrYWdlJywgJ2Rlc2NyaXB0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJykoKSkKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdWYXJpYWJsZUhpc3Rvcnkub3BlcmF0aW9uJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fdmFyaWFibGVoaXN0b3J5JywgJ29wZXJhdGlvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTYpKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1JlY2lwZS5kZXNjcmlwdGlvbicKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3JlY2lwZScsICdkZXNjcmlwdGlvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSkKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdUYXJnZXRfSW1hZ2VfRmlsZS5maWxlX25hbWUnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV90YXJnZXRfaW1hZ2VfZmlsZScsICdmaWxlX25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD0xMDApKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1BhY2thZ2UuZGVzY3JpcHRpb24nCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9wYWNrYWdlJywgJ2Rlc2NyaXB0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0yMDApKQorCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmhlbHB0ZXh0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0hlbHBUZXh0J30sCisgICAgICAgICAgICAnYXJlYSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidoZWxwdGV4dF9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2tleSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9pbmRleF91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXNrJ10iLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZSd9LAorICAgICAgICAgICAgJ2J1Z3RyYWNrZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdmaWxlX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdob21lcGFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGVfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGVfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2Vfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ZpbGUnfSwKKyAgICAgICAgICAgICdkaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGlyZWN0b3J5X3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ2dyb3VwJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5vZGV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ293bmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncGVybWlzc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxNid9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3N5bV90YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInc3ltbGlua19zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW1hZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW1hZ2VfRmlsZSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2snOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb3JkZXJpbmcnOiAiKCdvcmRlcicsICdyZWNpcGUnKSIsICd1bmlxdWVfdG9nZXRoZXInOiAiKCgnYnVpbGQnLCAncmVjaXBlJywgJ3Rhc2tfbmFtZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsb2dmaWxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdvcmRlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAncGF0aF90b19zc3RhdGVfb2JqJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDlfYXV0b19fYWRkX3Byb2plY3R2YXJpYWJsZV9fYWRkX3Byb2plY3RsYXllcl9fYWRkX3Byb2plY3R0YXJnZXRfX2FkZF9wci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA5X2F1dG9fX2FkZF9wcm9qZWN0dmFyaWFibGVfX2FkZF9wcm9qZWN0bGF5ZXJfX2FkZF9wcm9qZWN0dGFyZ2V0X19hZGRfcHIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E1OGRjMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA5X2F1dG9fX2FkZF9wcm9qZWN0dmFyaWFibGVfX2FkZF9wcm9qZWN0bGF5ZXJfX2FkZF9wcm9qZWN0dGFyZ2V0X19hZGRfcHIucHkKQEAgLTAsMCArMSwyODYgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgQWRkaW5nIG1vZGVsICdQcm9qZWN0VmFyaWFibGUnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9wcm9qZWN0dmFyaWFibGUnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgncHJvamVjdCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlByb2plY3QnXSkpLAorICAgICAgICAgICAgKCduYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgndmFsdWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKShibGFuaz1UcnVlKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnUHJvamVjdFZhcmlhYmxlJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1Byb2plY3RMYXllcicKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3Byb2plY3RsYXllcicsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdwcm9qZWN0Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uUHJvamVjdCddKSksCisgICAgICAgICAgICAoJ25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCkpLAorICAgICAgICAgICAgKCdnaXR1cmwnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NCkpLAorICAgICAgICAgICAgKCdjb21taXQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NCkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1Byb2plY3RMYXllciddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdQcm9qZWN0VGFyZ2V0JworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fcHJvamVjdHRhcmdldCcsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdwcm9qZWN0Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uUHJvamVjdCddKSksCisgICAgICAgICAgICAoJ3RhcmdldCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnUHJvamVjdFRhcmdldCddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdQcm9qZWN0JworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fcHJvamVjdCcsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCduYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnY3JlYXRlZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnKShhdXRvX25vd19hZGQ9VHJ1ZSwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCd1cGRhdGVkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcpKGF1dG9fbm93PVRydWUsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydQcm9qZWN0J10pCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0J1aWxkLnByb2plY3QnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fYnVpbGQnLCAncHJvamVjdCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uUHJvamVjdCddLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdQcm9qZWN0VmFyaWFibGUnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9wcm9qZWN0dmFyaWFibGUnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1Byb2plY3RMYXllcicKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3Byb2plY3RsYXllcicpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnUHJvamVjdFRhcmdldCcKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3Byb2plY3R0YXJnZXQnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1Byb2plY3QnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9wcm9qZWN0JykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdCdWlsZC5wcm9qZWN0JworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2J1aWxkJywgJ3Byb2plY3RfaWQnKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uaGVscHRleHQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnSGVscFRleHQnfSwKKyAgICAgICAgICAgICdhcmVhJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2hlbHB0ZXh0X2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAna2V5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdExheWVyJ30sCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDEwX2F1dG9fX2FkZF9maWVsZF9wcm9qZWN0X2JyYW5jaF9fYWRkX2ZpZWxkX3Byb2plY3Rfc2hvcnRfZGVzY3JpcHRpb25fX2EucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxMF9hdXRvX19hZGRfZmllbGRfcHJvamVjdF9icmFuY2hfX2FkZF9maWVsZF9wcm9qZWN0X3Nob3J0X2Rlc2NyaXB0aW9uX19hLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMWNlMWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxMF9hdXRvX19hZGRfZmllbGRfcHJvamVjdF9icmFuY2hfX2FkZF9maWVsZF9wcm9qZWN0X3Nob3J0X2Rlc2NyaXB0aW9uX19hLnB5CkBAIC0wLDAgKzEsMjU3IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnUHJvamVjdC5icmFuY2gnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdicmFuY2gnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKGRlZmF1bHQ9J21hc3RlcicsIG1heF9sZW5ndGg9NTApLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnUHJvamVjdC5zaG9ydF9kZXNjcmlwdGlvbicKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9wcm9qZWN0JywgJ3Nob3J0X2Rlc2NyaXB0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShkZWZhdWx0PScnLCBtYXhfbGVuZ3RoPTUwLCBibGFuaz1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1Byb2plY3QudXNlcl9pZCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9wcm9qZWN0JywgJ3VzZXJfaWQnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1Byb2plY3QuYnJhbmNoJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3Byb2plY3QnLCAnYnJhbmNoJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdQcm9qZWN0LnNob3J0X2Rlc2NyaXB0aW9uJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3Byb2plY3QnLCAnc2hvcnRfZGVzY3JpcHRpb24nKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1Byb2plY3QudXNlcl9pZCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9wcm9qZWN0JywgJ3VzZXJfaWQnKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uaGVscHRleHQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnSGVscFRleHQnfSwKKyAgICAgICAgICAgICdhcmVhJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2hlbHB0ZXh0X2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAna2V5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbGljZW5zZV9tYW5pZmVzdF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfRmlsZSd9LAorICAgICAgICAgICAgJ2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkaXJlY3Rvcnlfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAnZ3JvdXAnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbm9kZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnb3duZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwZXJtaXNzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnc3ltX3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidzeW1saW5rX3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbWFnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbWFnZV9GaWxlJ30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ3VuaXF1ZV90b2dldGhlcic6ICIoKCdidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJyksKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZF9yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2NCd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTFfYXV0b19fYWRkX2ZpZWxkX3Byb2plY3RsYXllcl9kaXJwYXRoLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTFfYXV0b19fYWRkX2ZpZWxkX3Byb2plY3RsYXllcl9kaXJwYXRoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNjUyMjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxMV9hdXRvX19hZGRfZmllbGRfcHJvamVjdGxheWVyX2RpcnBhdGgucHkKQEAgLTAsMCArMSwyNDIgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0TGF5ZXIuZGlycGF0aCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9wcm9qZWN0bGF5ZXInLCAnZGlycGF0aCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD0nJywgbWF4X2xlbmd0aD0yNTQpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdQcm9qZWN0TGF5ZXIuZGlycGF0aCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9wcm9qZWN0bGF5ZXInLCAnZGlycGF0aCcpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdExheWVyJ30sCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxMl9hdXRvX19hZGRfZmllbGRfcHJvamVjdGxheWVyX29wdGlvbmFsX19hZGRfZmllbGRfcHJvamVjdHRhcmdldF90YXNrLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTJfYXV0b19fYWRkX2ZpZWxkX3Byb2plY3RsYXllcl9vcHRpb25hbF9fYWRkX2ZpZWxkX3Byb2plY3R0YXJnZXRfdGFzay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTQ4M2Y1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTJfYXV0b19fYWRkX2ZpZWxkX3Byb2plY3RsYXllcl9vcHRpb25hbF9fYWRkX2ZpZWxkX3Byb2plY3R0YXJnZXRfdGFzay5weQpAQCAtMCwwICsxLDI1MiBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1Byb2plY3RMYXllci5vcHRpb25hbCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9wcm9qZWN0bGF5ZXInLCAnb3B0aW9uYWwnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcpKGRlZmF1bHQ9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0VGFyZ2V0LnRhc2snCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcHJvamVjdHRhcmdldCcsICd0YXNrJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUHJvamVjdExheWVyLm9wdGlvbmFsJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3Byb2plY3RsYXllcicsICdvcHRpb25hbCcpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUHJvamVjdFRhcmdldC50YXNrJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3Byb2plY3R0YXJnZXQnLCAndGFzaycpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdExheWVyJ30sCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvcHRpb25hbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxM19hdXRvX19hZGRfcmVsZWFzZV9fYWRkX2xheWVydmVyc2lvbmRlcGVuZGVuY3lfX2FkZF91bmlxdWVfbGF5ZXJ2ZXJzaW9uLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTNfYXV0b19fYWRkX3JlbGVhc2VfX2FkZF9sYXllcnZlcnNpb25kZXBlbmRlbmN5X19hZGRfdW5pcXVlX2xheWVydmVyc2lvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yzk1NGU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTNfYXV0b19fYWRkX3JlbGVhc2VfX2FkZF9sYXllcnZlcnNpb25kZXBlbmRlbmN5X19hZGRfdW5pcXVlX2xheWVydmVyc2lvbi5weQpAQCAtMCwwICsxLDcxMCBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1JlbGVhc2UnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9yZWxlYXNlJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKSh1bmlxdWU9VHJ1ZSwgbWF4X2xlbmd0aD0zMikpLAorICAgICAgICAgICAgKCdkZXNjcmlwdGlvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU1KSksCisgICAgICAgICAgICAoJ2JpdGJha2VfdmVyc2lvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10pKSwKKyAgICAgICAgICAgICgnYnJhbmNoJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0zMikpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1JlbGVhc2UnXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX2xheWVydmVyc2lvbmRlcGVuZGVuY3knLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnbGF5ZXJfc291cmNlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykoZGVmYXVsdD1Ob25lLCB0bz1vcm1bJ29ybS5MYXllclNvdXJjZSddLCBudWxsPVRydWUpKSwKKyAgICAgICAgICAgICgndXBfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PU5vbmUsIG51bGw9VHJ1ZSkpLAorICAgICAgICAgICAgKCdsYXllcl92ZXJzaW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdkZXBlbmRlbmNpZXMnLCB0bz1vcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10pKSwKKyAgICAgICAgICAgICgnZGVwZW5kc19vbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHJlbGF0ZWRfbmFtZT0nZGVwZW5kZWVzJywgdG89b3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeSddKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdMYXllclZlcnNpb25EZXBlbmRlbmN5JywgZmllbGRzIFsnbGF5ZXJfc291cmNlJywgJ3VwX2lkJ10KKyAgICAgICAgZGIuY3JlYXRlX3VuaXF1ZSh1J29ybV9sYXllcnZlcnNpb25kZXBlbmRlbmN5JywgWydsYXllcl9zb3VyY2VfaWQnLCAndXBfaWQnXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnVG9hc3RlclNldHRpbmcnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV90b2FzdGVyc2V0dGluZycsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCduYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD02MykpLAorICAgICAgICAgICAgKCdoZWxwdGV4dCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcpKCkpLAorICAgICAgICAgICAgKCd2YWx1ZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU1KSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnVG9hc3RlclNldHRpbmcnXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnTWFjaGluZScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX21hY2hpbmUnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnbGF5ZXJfc291cmNlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykoZGVmYXVsdD1Ob25lLCB0bz1vcm1bJ29ybS5MYXllclNvdXJjZSddLCBudWxsPVRydWUpKSwKKyAgICAgICAgICAgICgndXBfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PU5vbmUsIG51bGw9VHJ1ZSkpLAorICAgICAgICAgICAgKCd1cF9kYXRlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbnVsbD1UcnVlKSksCisgICAgICAgICAgICAoJ2xheWVyX3ZlcnNpb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10pKSwKKyAgICAgICAgICAgICgnbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU1KSksCisgICAgICAgICAgICAoJ2Rlc2NyaXB0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0yNTUpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydNYWNoaW5lJ10pCisKKyAgICAgICAgIyBBZGRpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ01hY2hpbmUnLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAndXBfaWQnXQorICAgICAgICBkYi5jcmVhdGVfdW5pcXVlKHUnb3JtX21hY2hpbmUnLCBbJ2xheWVyX3NvdXJjZV9pZCcsICd1cF9pZCddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdSZWxlYXNlRGVmYXVsdExheWVyJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fcmVsZWFzZWRlZmF1bHRsYXllcicsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdyZWxlYXNlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uUmVsZWFzZSddKSksCisgICAgICAgICAgICAoJ2xheWVyJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uTGF5ZXInXSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1JlbGVhc2VEZWZhdWx0TGF5ZXInXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnQml0YmFrZVZlcnNpb24nCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9iaXRiYWtldmVyc2lvbicsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCduYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykodW5pcXVlPVRydWUsIG1heF9sZW5ndGg9MzIpKSwKKyAgICAgICAgICAgICgnZ2l0dXJsJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnKShtYXhfbGVuZ3RoPTIwMCkpLAorICAgICAgICAgICAgKCdicmFuY2gnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTMyKSksCisgICAgICAgICAgICAoJ2RpcnBhdGgnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ0JpdGJha2VWZXJzaW9uJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ0JyYW5jaCcKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX2JyYW5jaCcsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdsYXllcl9zb3VyY2UnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShkZWZhdWx0PVRydWUsIHRvPW9ybVsnb3JtLkxheWVyU291cmNlJ10sIG51bGw9VHJ1ZSkpLAorICAgICAgICAgICAgKCd1cF9pZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbnVsbD1UcnVlKSksCisgICAgICAgICAgICAoJ3VwX2RhdGUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJykoZGVmYXVsdD1Ob25lLCBudWxsPVRydWUpKSwKKyAgICAgICAgICAgICgnbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9NTApKSwKKyAgICAgICAgICAgICgnYml0YmFrZV9icmFuY2gnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTUwLCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ3Nob3J0X2Rlc2NyaXB0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD01MCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ0JyYW5jaCddKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdCcmFuY2gnLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAnbmFtZSddCisgICAgICAgIGRiLmNyZWF0ZV91bmlxdWUodSdvcm1fYnJhbmNoJywgWydsYXllcl9zb3VyY2VfaWQnLCAnbmFtZSddKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdCcmFuY2gnLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAndXBfaWQnXQorICAgICAgICBkYi5jcmVhdGVfdW5pcXVlKHUnb3JtX2JyYW5jaCcsIFsnbGF5ZXJfc291cmNlX2lkJywgJ3VwX2lkJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1RvYXN0ZXJTZXR0aW5nRGVmYXVsdExheWVyJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fdG9hc3RlcnNldHRpbmdkZWZhdWx0bGF5ZXInLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnbGF5ZXJfdmVyc2lvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1RvYXN0ZXJTZXR0aW5nRGVmYXVsdExheWVyJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ0xheWVyU291cmNlJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fbGF5ZXJzb3VyY2UnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9NjMpKSwKKyAgICAgICAgICAgICgnc291cmNldHlwZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKCkpLAorICAgICAgICAgICAgKCdhcGl1cmwnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShkZWZhdWx0PU5vbmUsIG1heF9sZW5ndGg9MjU1LCBudWxsPVRydWUpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydMYXllclNvdXJjZSddKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdMYXllclNvdXJjZScsIGZpZWxkcyBbJ3NvdXJjZXR5cGUnLCAnYXBpdXJsJ10KKyAgICAgICAgZGIuY3JlYXRlX3VuaXF1ZSh1J29ybV9sYXllcnNvdXJjZScsIFsnc291cmNldHlwZScsICdhcGl1cmwnXSkKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdQcm9qZWN0TGF5ZXIubmFtZScKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9wcm9qZWN0bGF5ZXInLCAnbmFtZScpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUHJvamVjdExheWVyLmRpcnBhdGgnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcHJvamVjdGxheWVyJywgJ2RpcnBhdGgnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1Byb2plY3RMYXllci5jb21taXQnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcHJvamVjdGxheWVyJywgJ2NvbW1pdCcpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUHJvamVjdExheWVyLmdpdHVybCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9wcm9qZWN0bGF5ZXInLCAnZ2l0dXJsJykKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnUHJvamVjdExheWVyLmxheWVyY29tbWl0JworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3Byb2plY3RsYXllcicsICdsYXllcmNvbW1pdCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi5sYXllcl9zb3VyY2UnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICdsYXllcl9zb3VyY2UnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKGRlZmF1bHQ9Tm9uZSwgdG89b3JtWydvcm0uTGF5ZXJTb3VyY2UnXSwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0xheWVyX1ZlcnNpb24udXBfaWQnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICd1cF9pZCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD1Ob25lLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi51cF9kYXRlJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2xheWVyX3ZlcnNpb24nLCAndXBfZGF0ZScsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0xheWVyX1ZlcnNpb24udXBfYnJhbmNoJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2xheWVyX3ZlcnNpb24nLCAndXBfYnJhbmNoJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShkZWZhdWx0PU5vbmUsIHRvPW9ybVsnb3JtLkJyYW5jaCddLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi5kaXJwYXRoJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2xheWVyX3ZlcnNpb24nLCAnZGlycGF0aCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD1Ob25lLCBtYXhfbGVuZ3RoPTI1NSwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdMYXllcl9WZXJzaW9uLmJ1aWxkJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICdidWlsZF9pZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKG51bGw9VHJ1ZSwgdG89b3JtWydvcm0uQnVpbGQnXSkpCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi5icmFuY2gnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9sYXllcl92ZXJzaW9uJywgJ2JyYW5jaCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9ODApKQorICAgICAgICAjIEFkZGluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnTGF5ZXJfVmVyc2lvbicsIGZpZWxkcyBbJ2xheWVyX3NvdXJjZScsICd1cF9pZCddCisgICAgICAgIGRiLmNyZWF0ZV91bmlxdWUodSdvcm1fbGF5ZXJfdmVyc2lvbicsIFsnbGF5ZXJfc291cmNlX2lkJywgJ3VwX2lkJ10pCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1JlY2lwZS5sYXllcl9zb3VyY2UnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcmVjaXBlJywgJ2xheWVyX3NvdXJjZScsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykoZGVmYXVsdD1Ob25lLCB0bz1vcm1bJ29ybS5MYXllclNvdXJjZSddLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnUmVjaXBlLnVwX2lkJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3JlY2lwZScsICd1cF9pZCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD1Ob25lLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnUmVjaXBlLnVwX2RhdGUnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcmVjaXBlJywgJ3VwX2RhdGUnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnKShkZWZhdWx0PU5vbmUsIG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdMYXllci5sYXllcl9zb3VyY2UnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXInLCAnbGF5ZXJfc291cmNlJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShkZWZhdWx0PU5vbmUsIHRvPW9ybVsnb3JtLkxheWVyU291cmNlJ10sIG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdMYXllci51cF9pZCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9sYXllcicsICd1cF9pZCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD1Ob25lLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnTGF5ZXIudXBfZGF0ZScKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9sYXllcicsICd1cF9kYXRlJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJykoZGVmYXVsdD1Ob25lLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnTGF5ZXIudmNzX3VybCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9sYXllcicsICd2Y3NfdXJsJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbWF4X2xlbmd0aD0yMDAsIG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdMYXllci52Y3Nfd2ViX2ZpbGVfYmFzZV91cmwnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXInLCAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbWF4X2xlbmd0aD0yMDAsIG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdMYXllci5zdW1tYXJ5JworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2xheWVyJywgJ3N1bW1hcnknLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbWF4X2xlbmd0aD0yMDAsIG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdMYXllci5kZXNjcmlwdGlvbicKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9sYXllcicsICdkZXNjcmlwdGlvbicsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJykoZGVmYXVsdD1Ob25lLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ0xheWVyLmxvY2FsX3BhdGgnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9sYXllcicsICdsb2NhbF9wYXRoJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9MjU1LCBudWxsPVRydWUpKQorICAgICAgICAjIEFkZGluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnTGF5ZXInLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAndXBfaWQnXQorICAgICAgICBkYi5jcmVhdGVfdW5pcXVlKHUnb3JtX2xheWVyJywgWydsYXllcl9zb3VyY2VfaWQnLCAndXBfaWQnXSkKKworICAgICAgICAjIEFkZGluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnTGF5ZXInLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAnbmFtZSddCisgICAgICAgIGRiLmNyZWF0ZV91bmlxdWUodSdvcm1fbGF5ZXInLCBbJ2xheWVyX3NvdXJjZV9pZCcsICduYW1lJ10pCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUHJvamVjdC5icmFuY2gnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdicmFuY2gnKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0LmJpdGJha2VfdmVyc2lvbicKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9wcm9qZWN0JywgJ2JpdGJha2VfdmVyc2lvbicsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykoZGVmYXVsdD0tMSwgdG89b3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0LnJlbGVhc2UnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdyZWxlYXNlJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShkZWZhdWx0PS0xLCB0bz1vcm1bJ29ybS5SZWxlYXNlJ10pLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdMYXllcicsIGZpZWxkcyBbJ2xheWVyX3NvdXJjZScsICduYW1lJ10KKyAgICAgICAgZGIuZGVsZXRlX3VuaXF1ZSh1J29ybV9sYXllcicsIFsnbGF5ZXJfc291cmNlX2lkJywgJ25hbWUnXSkKKworICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdMYXllcicsIGZpZWxkcyBbJ2xheWVyX3NvdXJjZScsICd1cF9pZCddCisgICAgICAgIGRiLmRlbGV0ZV91bmlxdWUodSdvcm1fbGF5ZXInLCBbJ2xheWVyX3NvdXJjZV9pZCcsICd1cF9pZCddKQorCisgICAgICAgICMgUmVtb3ZpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ0xheWVyX1ZlcnNpb24nLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAndXBfaWQnXQorICAgICAgICBkYi5kZWxldGVfdW5pcXVlKHUnb3JtX2xheWVyX3ZlcnNpb24nLCBbJ2xheWVyX3NvdXJjZV9pZCcsICd1cF9pZCddKQorCisgICAgICAgICMgUmVtb3ZpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ0xheWVyU291cmNlJywgZmllbGRzIFsnc291cmNldHlwZScsICdhcGl1cmwnXQorICAgICAgICBkYi5kZWxldGVfdW5pcXVlKHUnb3JtX2xheWVyc291cmNlJywgWydzb3VyY2V0eXBlJywgJ2FwaXVybCddKQorCisgICAgICAgICMgUmVtb3ZpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ0JyYW5jaCcsIGZpZWxkcyBbJ2xheWVyX3NvdXJjZScsICd1cF9pZCddCisgICAgICAgIGRiLmRlbGV0ZV91bmlxdWUodSdvcm1fYnJhbmNoJywgWydsYXllcl9zb3VyY2VfaWQnLCAndXBfaWQnXSkKKworICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdCcmFuY2gnLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAnbmFtZSddCisgICAgICAgIGRiLmRlbGV0ZV91bmlxdWUodSdvcm1fYnJhbmNoJywgWydsYXllcl9zb3VyY2VfaWQnLCAnbmFtZSddKQorCisgICAgICAgICMgUmVtb3ZpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ01hY2hpbmUnLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAndXBfaWQnXQorICAgICAgICBkYi5kZWxldGVfdW5pcXVlKHUnb3JtX21hY2hpbmUnLCBbJ2xheWVyX3NvdXJjZV9pZCcsICd1cF9pZCddKQorCisgICAgICAgICMgUmVtb3ZpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ0xheWVyVmVyc2lvbkRlcGVuZGVuY3knLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAndXBfaWQnXQorICAgICAgICBkYi5kZWxldGVfdW5pcXVlKHUnb3JtX2xheWVydmVyc2lvbmRlcGVuZGVuY3knLCBbJ2xheWVyX3NvdXJjZV9pZCcsICd1cF9pZCddKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1JlbGVhc2UnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9yZWxlYXNlJykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdMYXllclZlcnNpb25EZXBlbmRlbmN5JworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fbGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeScpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnVG9hc3RlclNldHRpbmcnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV90b2FzdGVyc2V0dGluZycpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnTWFjaGluZScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX21hY2hpbmUnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1JlbGVhc2VEZWZhdWx0TGF5ZXInCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9yZWxlYXNlZGVmYXVsdGxheWVyJykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdCaXRiYWtlVmVyc2lvbicKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX2JpdGJha2V2ZXJzaW9uJykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdCcmFuY2gnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9icmFuY2gnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1RvYXN0ZXJTZXR0aW5nRGVmYXVsdExheWVyJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fdG9hc3RlcnNldHRpbmdkZWZhdWx0bGF5ZXInKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ0xheWVyU291cmNlJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fbGF5ZXJzb3VyY2UnKQorCisKKyAgICAgICAgIyBVc2VyIGNob3NlIHRvIG5vdCBkZWFsIHdpdGggYmFja3dhcmRzIE5VTEwgaXNzdWVzIGZvciAnUHJvamVjdExheWVyLm5hbWUnCisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ2Fubm90IHJldmVyc2UgdGhpcyBtaWdyYXRpb24uICdQcm9qZWN0TGF5ZXIubmFtZScgYW5kIGl0cyB2YWx1ZXMgY2Fubm90IGJlIHJlc3RvcmVkLiIpCisgICAgICAgIAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcm92aWRlZCBoZXJlIHRvIGFpZCBpbiB3cml0aW5nIGEgY29ycmVjdCBtaWdyYXRpb24gICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0TGF5ZXIubmFtZScKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9wcm9qZWN0bGF5ZXInLCAnbmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgICAgICMgVXNlciBjaG9zZSB0byBub3QgZGVhbCB3aXRoIGJhY2t3YXJkcyBOVUxMIGlzc3VlcyBmb3IgJ1Byb2plY3RMYXllci5kaXJwYXRoJworICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCByZXZlcnNlIHRoaXMgbWlncmF0aW9uLiAnUHJvamVjdExheWVyLmRpcnBhdGgnIGFuZCBpdHMgdmFsdWVzIGNhbm5vdCBiZSByZXN0b3JlZC4iKQorICAgICAgICAKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgcHJvdmlkZWQgaGVyZSB0byBhaWQgaW4gd3JpdGluZyBhIGNvcnJlY3QgbWlncmF0aW9uICAgICAgICAjIEFkZGluZyBmaWVsZCAnUHJvamVjdExheWVyLmRpcnBhdGgnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcHJvamVjdGxheWVyJywgJ2RpcnBhdGgnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU0KSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgICAgICAjIFVzZXIgY2hvc2UgdG8gbm90IGRlYWwgd2l0aCBiYWNrd2FyZHMgTlVMTCBpc3N1ZXMgZm9yICdQcm9qZWN0TGF5ZXIuY29tbWl0JworICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCByZXZlcnNlIHRoaXMgbWlncmF0aW9uLiAnUHJvamVjdExheWVyLmNvbW1pdCcgYW5kIGl0cyB2YWx1ZXMgY2Fubm90IGJlIHJlc3RvcmVkLiIpCisgICAgICAgIAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcm92aWRlZCBoZXJlIHRvIGFpZCBpbiB3cml0aW5nIGEgY29ycmVjdCBtaWdyYXRpb24gICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0TGF5ZXIuY29tbWl0JworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3Byb2plY3RsYXllcicsICdjb21taXQnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU0KSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgICAgICAjIFVzZXIgY2hvc2UgdG8gbm90IGRlYWwgd2l0aCBiYWNrd2FyZHMgTlVMTCBpc3N1ZXMgZm9yICdQcm9qZWN0TGF5ZXIuZ2l0dXJsJworICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCByZXZlcnNlIHRoaXMgbWlncmF0aW9uLiAnUHJvamVjdExheWVyLmdpdHVybCcgYW5kIGl0cyB2YWx1ZXMgY2Fubm90IGJlIHJlc3RvcmVkLiIpCisgICAgICAgIAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcm92aWRlZCBoZXJlIHRvIGFpZCBpbiB3cml0aW5nIGEgY29ycmVjdCBtaWdyYXRpb24gICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0TGF5ZXIuZ2l0dXJsJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3Byb2plY3RsYXllcicsICdnaXR1cmwnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU0KSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUHJvamVjdExheWVyLmxheWVyY29tbWl0JworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3Byb2plY3RsYXllcicsICdsYXllcmNvbW1pdF9pZCcpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi5sYXllcl9zb3VyY2UnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICdsYXllcl9zb3VyY2VfaWQnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0xheWVyX1ZlcnNpb24udXBfaWQnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICd1cF9pZCcpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi51cF9kYXRlJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2xheWVyX3ZlcnNpb24nLCAndXBfZGF0ZScpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi51cF9icmFuY2gnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICd1cF9icmFuY2hfaWQnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0xheWVyX1ZlcnNpb24uZGlycGF0aCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9sYXllcl92ZXJzaW9uJywgJ2RpcnBhdGgnKQorCisKKyAgICAgICAgIyBVc2VyIGNob3NlIHRvIG5vdCBkZWFsIHdpdGggYmFja3dhcmRzIE5VTEwgaXNzdWVzIGZvciAnTGF5ZXJfVmVyc2lvbi5idWlsZCcKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgcmV2ZXJzZSB0aGlzIG1pZ3JhdGlvbi4gJ0xheWVyX1ZlcnNpb24uYnVpbGQnIGFuZCBpdHMgdmFsdWVzIGNhbm5vdCBiZSByZXN0b3JlZC4iKQorICAgICAgICAKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgcHJvdmlkZWQgaGVyZSB0byBhaWQgaW4gd3JpdGluZyBhIGNvcnJlY3QgbWlncmF0aW9uCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ0xheWVyX1ZlcnNpb24uYnVpbGQnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9sYXllcl92ZXJzaW9uJywgJ2J1aWxkX2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uQnVpbGQnXSkpCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi5icmFuY2gnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9sYXllcl92ZXJzaW9uJywgJ2JyYW5jaCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9NTApKQorICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdSZWNpcGUubGF5ZXJfc291cmNlJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3JlY2lwZScsICdsYXllcl9zb3VyY2VfaWQnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1JlY2lwZS51cF9pZCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9yZWNpcGUnLCAndXBfaWQnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1JlY2lwZS51cF9kYXRlJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3JlY2lwZScsICd1cF9kYXRlJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdMYXllci5sYXllcl9zb3VyY2UnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXInLCAnbGF5ZXJfc291cmNlX2lkJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdMYXllci51cF9pZCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9sYXllcicsICd1cF9pZCcpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnTGF5ZXIudXBfZGF0ZScKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9sYXllcicsICd1cF9kYXRlJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdMYXllci52Y3NfdXJsJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2xheWVyJywgJ3Zjc191cmwnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0xheWVyLnZjc193ZWJfZmlsZV9iYXNlX3VybCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9sYXllcicsICd2Y3Nfd2ViX2ZpbGVfYmFzZV91cmwnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0xheWVyLnN1bW1hcnknCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXInLCAnc3VtbWFyeScpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnTGF5ZXIuZGVzY3JpcHRpb24nCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXInLCAnZGVzY3JpcHRpb24nKQorCisKKyAgICAgICAgIyBVc2VyIGNob3NlIHRvIG5vdCBkZWFsIHdpdGggYmFja3dhcmRzIE5VTEwgaXNzdWVzIGZvciAnTGF5ZXIubG9jYWxfcGF0aCcKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgcmV2ZXJzZSB0aGlzIG1pZ3JhdGlvbi4gJ0xheWVyLmxvY2FsX3BhdGgnIGFuZCBpdHMgdmFsdWVzIGNhbm5vdCBiZSByZXN0b3JlZC4iKQorICAgICAgICAKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgcHJvdmlkZWQgaGVyZSB0byBhaWQgaW4gd3JpdGluZyBhIGNvcnJlY3QgbWlncmF0aW9uCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ0xheWVyLmxvY2FsX3BhdGgnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9sYXllcicsICdsb2NhbF9wYXRoJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9MjU1KSkKKworICAgICAgICAjIFVzZXIgY2hvc2UgdG8gbm90IGRlYWwgd2l0aCBiYWNrd2FyZHMgTlVMTCBpc3N1ZXMgZm9yICdQcm9qZWN0LmJyYW5jaCcKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgcmV2ZXJzZSB0aGlzIG1pZ3JhdGlvbi4gJ1Byb2plY3QuYnJhbmNoJyBhbmQgaXRzIHZhbHVlcyBjYW5ub3QgYmUgcmVzdG9yZWQuIikKKyAgICAgICAgCisgICAgICAgICMgVGhlIGZvbGxvd2luZyBjb2RlIGlzIHByb3ZpZGVkIGhlcmUgdG8gYWlkIGluIHdyaXRpbmcgYSBjb3JyZWN0IG1pZ3JhdGlvbiAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1Byb2plY3QuYnJhbmNoJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3Byb2plY3QnLCAnYnJhbmNoJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTUwKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUHJvamVjdC5iaXRiYWtlX3ZlcnNpb24nCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdiaXRiYWtlX3ZlcnNpb25faWQnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1Byb2plY3QucmVsZWFzZScKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9wcm9qZWN0JywgJ3JlbGVhc2VfaWQnKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJpdGJha2V2ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JpdGJha2VWZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5icmFuY2gnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICduYW1lJyksICgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJykpIiwgJ29iamVjdF9uYW1lJzogJ0JyYW5jaCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd1cF9icmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uQnJhbmNoJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyc291cmNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdzb3VyY2V0eXBlJywgJ2FwaXVybCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJTb3VyY2UnfSwKKyAgICAgICAgICAgICdhcGl1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAnc291cmNldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnZlcnNpb25kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyVmVyc2lvbkRlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVlcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZW5jaWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5tYWNoaW5lJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ01hY2hpbmUnfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcHRpb25hbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWRlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlRGVmYXVsdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50b2FzdGVyc2V0dGluZyc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUb2FzdGVyU2V0dGluZyd9LAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50b2FzdGVyc2V0dGluZ2RlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUb2FzdGVyU2V0dGluZ0RlZmF1bHRMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE0X2F1dG9fX2NoZ19maWVsZF9wYWNrYWdlX3N1bW1hcnlfX2NoZ19maWVsZF9sYXllcl9zdW1tYXJ5X19jaGdfZmllbGRfcmUucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxNF9hdXRvX19jaGdfZmllbGRfcGFja2FnZV9zdW1tYXJ5X19jaGdfZmllbGRfbGF5ZXJfc3VtbWFyeV9fY2hnX2ZpZWxkX3JlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NDVmMTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxNF9hdXRvX19jaGdfZmllbGRfcGFja2FnZV9zdW1tYXJ5X19jaGdfZmllbGRfbGF5ZXJfc3VtbWFyeV9fY2hnX2ZpZWxkX3JlLnB5CkBAIC0wLDAgKzEsMzM2IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1BhY2thZ2Uuc3VtbWFyeScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3BhY2thZ2UnLCAnc3VtbWFyeScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcpKCkpCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnTGF5ZXIuc3VtbWFyeScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX2xheWVyJywgJ3N1bW1hcnknLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKShudWxsPVRydWUpKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1JlY2lwZS5zdW1tYXJ5JworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fcmVjaXBlJywgJ3N1bW1hcnknLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKSgpKQorCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1BhY2thZ2Uuc3VtbWFyeScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3BhY2thZ2UnLCAnc3VtbWFyeScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjAwKSkKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdMYXllci5zdW1tYXJ5JworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fbGF5ZXInLCAnc3VtbWFyeScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjAwLCBudWxsPVRydWUpKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1JlY2lwZS5zdW1tYXJ5JworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fcmVjaXBlJywgJ3N1bW1hcnknLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCkpCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJpdGJha2V2ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JpdGJha2VWZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5icmFuY2gnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICduYW1lJyksICgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJykpIiwgJ29iamVjdF9uYW1lJzogJ0JyYW5jaCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd1cF9icmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uQnJhbmNoJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyc291cmNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdzb3VyY2V0eXBlJywgJ2FwaXVybCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJTb3VyY2UnfSwKKyAgICAgICAgICAgICdhcGl1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAnc291cmNldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnZlcnNpb25kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyVmVyc2lvbkRlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVlcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZW5jaWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5tYWNoaW5lJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ01hY2hpbmUnfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcHRpb25hbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWRlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlRGVmYXVsdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50b2FzdGVyc2V0dGluZyc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUb2FzdGVyU2V0dGluZyd9LAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50b2FzdGVyc2V0dGluZ2RlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUb2FzdGVyU2V0dGluZ0RlZmF1bHRMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE1X2F1dG9fX2FkZF9maWVsZF9sYXllcl92Y3Nfd2ViX3VybF9fYWRkX2ZpZWxkX2xheWVyX3Zjc193ZWJfdHJlZV9iYXNlX3UucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxNV9hdXRvX19hZGRfZmllbGRfbGF5ZXJfdmNzX3dlYl91cmxfX2FkZF9maWVsZF9sYXllcl92Y3Nfd2ViX3RyZWVfYmFzZV91LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNjY0YzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxNV9hdXRvX19hZGRfZmllbGRfbGF5ZXJfdmNzX3dlYl91cmxfX2FkZF9maWVsZF9sYXllcl92Y3Nfd2ViX3RyZWVfYmFzZV91LnB5CkBAIC0wLDAgKzEsMzM2IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnTGF5ZXIudmNzX3dlYl91cmwnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXInLCAndmNzX3dlYl91cmwnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJykoZGVmYXVsdD1Ob25lLCBtYXhfbGVuZ3RoPTIwMCwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0xheWVyLnZjc193ZWJfdHJlZV9iYXNlX3VybCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9sYXllcicsICd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJykoZGVmYXVsdD1Ob25lLCBtYXhfbGVuZ3RoPTIwMCwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnTGF5ZXIudmNzX3dlYl91cmwnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXInLCAndmNzX3dlYl91cmwnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0xheWVyLnZjc193ZWJfdHJlZV9iYXNlX3VybCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9sYXllcicsICd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJpdGJha2V2ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JpdGJha2VWZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5icmFuY2gnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICduYW1lJyksICgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJykpIiwgJ29iamVjdF9uYW1lJzogJ0JyYW5jaCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl90cmVlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3VwX2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5CcmFuY2gnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJzb3VyY2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3NvdXJjZXR5cGUnLCAnYXBpdXJsJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclNvdXJjZSd9LAorICAgICAgICAgICAgJ2FwaXVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICdzb3VyY2V0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVydmVyc2lvbmRlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlbmNpZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLm1hY2hpbmUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTWFjaGluZSd9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXNlcl9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3RsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wdGlvbmFsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZSd9LAorICAgICAgICAgICAgJ2J1Z3RyYWNrZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdmaWxlX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdob21lcGFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZSd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlZGVmYXVsdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2VEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2Vfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ZpbGUnfSwKKyAgICAgICAgICAgICdkaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGlyZWN0b3J5X3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ2dyb3VwJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5vZGV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ293bmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncGVybWlzc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxNid9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3N5bV90YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInc3ltbGlua19zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW1hZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW1hZ2VfRmlsZSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2snOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb3JkZXJpbmcnOiAiKCdvcmRlcicsICdyZWNpcGUnKSIsICd1bmlxdWVfdG9nZXRoZXInOiAiKCgnYnVpbGQnLCAncmVjaXBlJywgJ3Rhc2tfbmFtZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsb2dmaWxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdvcmRlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAncGF0aF90b19zc3RhdGVfb2JqJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nJ30sCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nZGVmYXVsdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nRGVmYXVsdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2NCd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTZfYXV0b19fYWRkX2ZpZWxkX3JlbGVhc2VfaGVscHRleHRfX2NoZ19maWVsZF9yZWxlYXNlX2JyYW5jaF9fYWRkX2luZGV4Xy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE2X2F1dG9fX2FkZF9maWVsZF9yZWxlYXNlX2hlbHB0ZXh0X19jaGdfZmllbGRfcmVsZWFzZV9icmFuY2hfX2FkZF9pbmRleF8ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1YzBiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE2X2F1dG9fX2FkZF9maWVsZF9yZWxlYXNlX2hlbHB0ZXh0X19jaGdfZmllbGRfcmVsZWFzZV9icmFuY2hfX2FkZF9pbmRleF8ucHkKQEAgLTAsMCArMSwzNTkgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgQWRkaW5nIGZpZWxkICdSZWxlYXNlLmhlbHB0ZXh0JworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3JlbGVhc2UnLCAnaGVscHRleHQnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcpKG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICAgICAgIyBSZW5hbWluZyBjb2x1bW4gZm9yICdSZWxlYXNlLmJyYW5jaCcgdG8gbWF0Y2ggbmV3IGZpZWxkIHR5cGUuCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcmVsZWFzZScsICdicmFuY2gnKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1JlbGVhc2UuYnJhbmNoJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3JlbGVhc2UnLCAnYnJhbmNoJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uQnJhbmNoJ10sIGRlZmF1bHQ9LTEpKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0JyYW5jaC5iaXRiYWtlX2JyYW5jaCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9icmFuY2gnLCAnYml0YmFrZV9icmFuY2gnKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdSZWNpcGUnLCBmaWVsZHMgWydsYXllcl92ZXJzaW9uJywgJ2ZpbGVfcGF0aCddCisgICAgICAgIGRiLmNyZWF0ZV91bmlxdWUodSdvcm1fcmVjaXBlJywgWydsYXllcl92ZXJzaW9uX2lkJywgJ2ZpbGVfcGF0aCddKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdQcm9qZWN0TGF5ZXInLCBmaWVsZHMgWydwcm9qZWN0JywgJ2xheWVyY29tbWl0J10KKyAgICAgICAgZGIuY3JlYXRlX3VuaXF1ZSh1J29ybV9wcm9qZWN0bGF5ZXInLCBbJ3Byb2plY3RfaWQnLCAnbGF5ZXJjb21taXRfaWQnXSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdQcm9qZWN0TGF5ZXInLCBmaWVsZHMgWydwcm9qZWN0JywgJ2xheWVyY29tbWl0J10KKyAgICAgICAgZGIuZGVsZXRlX3VuaXF1ZSh1J29ybV9wcm9qZWN0bGF5ZXInLCBbJ3Byb2plY3RfaWQnLCAnbGF5ZXJjb21taXRfaWQnXSkKKworICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdSZWNpcGUnLCBmaWVsZHMgWydsYXllcl92ZXJzaW9uJywgJ2ZpbGVfcGF0aCddCisgICAgICAgIGRiLmRlbGV0ZV91bmlxdWUodSdvcm1fcmVjaXBlJywgWydsYXllcl92ZXJzaW9uX2lkJywgJ2ZpbGVfcGF0aCddKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1JlbGVhc2UuaGVscHRleHQnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcmVsZWFzZScsICdoZWxwdGV4dCcpCisKKyAgICAgICAgIyBSZW5hbWluZyBjb2x1bW4gZm9yICdSZWxlYXNlLmJyYW5jaCcgdG8gbWF0Y2ggbmV3IGZpZWxkIHR5cGUuCisgICAgICAgIGRiLnJlbmFtZV9jb2x1bW4odSdvcm1fcmVsZWFzZScsICdicmFuY2hfaWQnLCAnYnJhbmNoJykKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnUmVsZWFzZS5icmFuY2gnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9yZWxlYXNlJywgJ2JyYW5jaCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MzIpKQorICAgICAgICAjIEFkZGluZyBmaWVsZCAnQnJhbmNoLmJpdGJha2VfYnJhbmNoJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2JyYW5jaCcsICdiaXRiYWtlX2JyYW5jaCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD0nJywgbWF4X2xlbmd0aD01MCwgYmxhbms9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJpdGJha2V2ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JpdGJha2VWZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5icmFuY2gnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICduYW1lJyksICgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJykpIiwgJ29iamVjdF9uYW1lJzogJ0JyYW5jaCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uaGVscHRleHQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnSGVscFRleHQnfSwKKyAgICAgICAgICAgICdhcmVhJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2hlbHB0ZXh0X2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAna2V5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwgKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcid9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9pbmRleF91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfZmlsZV9iYXNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfdHJlZV9iYXNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd1cF9icmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uQnJhbmNoJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyc291cmNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdzb3VyY2V0eXBlJywgJ2FwaXVybCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJTb3VyY2UnfSwKKyAgICAgICAgICAgICdhcGl1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAnc291cmNldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnZlcnNpb25kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyVmVyc2lvbkRlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVlcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZW5jaWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5tYWNoaW5lJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ01hY2hpbmUnfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3Byb2plY3QnLCAnbGF5ZXJjb21taXQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcmNvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3B0aW9uYWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3ZlcnNpb24nLCAnZmlsZV9wYXRoJyksKSIsICdvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJyYW5jaCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VkZWZhdWx0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZURlZmF1bHRMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbGljZW5zZV9tYW5pZmVzdF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfRmlsZSd9LAorICAgICAgICAgICAgJ2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkaXJlY3Rvcnlfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAnZ3JvdXAnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbm9kZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnb3duZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwZXJtaXNzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnc3ltX3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidzeW1saW5rX3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbWFnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbWFnZV9GaWxlJ30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ3VuaXF1ZV90b2dldGhlcic6ICIoKCdidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJyksKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZF9yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udG9hc3RlcnNldHRpbmcnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVG9hc3RlclNldHRpbmcnfSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udG9hc3RlcnNldHRpbmdkZWZhdWx0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVG9hc3RlclNldHRpbmdEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE3X2F1dG9fX2RlbF90b2FzdGVyc2V0dGluZ2RlZmF1bHRsYXllcl9fYWRkX3JlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxN19hdXRvX19kZWxfdG9hc3RlcnNldHRpbmdkZWZhdWx0bGF5ZXJfX2FkZF9yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eV9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ODViNTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxN19hdXRvX19kZWxfdG9hc3RlcnNldHRpbmdkZWZhdWx0bGF5ZXJfX2FkZF9yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eV9fLnB5CkBAIC0wLDAgKzEsMzk2IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdUb2FzdGVyU2V0dGluZ0RlZmF1bHRMYXllcicKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3RvYXN0ZXJzZXR0aW5nZGVmYXVsdGxheWVyJykKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eScsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdyZWxlYXNlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uUmVsZWFzZSddKSksCisgICAgICAgICAgICAoJ2xheWVyX3NvdXJjZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkxheWVyU291cmNlJ10pKSwKKyAgICAgICAgICAgICgncHJpb3JpdHknLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTApKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eSddKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eScsIGZpZWxkcyBbJ3JlbGVhc2UnLCAnbGF5ZXJfc291cmNlJ10KKyAgICAgICAgZGIuY3JlYXRlX3VuaXF1ZSh1J29ybV9yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eScsIFsncmVsZWFzZV9pZCcsICdsYXllcl9zb3VyY2VfaWQnXSkKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdSZWxlYXNlLmJyYW5jaCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9yZWxlYXNlJywgJ2JyYW5jaF9pZCcpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1JlbGVhc2UuYnJhbmNoX25hbWUnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcmVsZWFzZScsICdicmFuY2hfbmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD0nJywgbWF4X2xlbmd0aD01MCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdMYXllclNvdXJjZScsIGZpZWxkcyBbJ25hbWUnXQorICAgICAgICBkYi5jcmVhdGVfdW5pcXVlKHUnb3JtX2xheWVyc291cmNlJywgWyduYW1lJ10pCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUmVsZWFzZURlZmF1bHRMYXllci5sYXllcicKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9yZWxlYXNlZGVmYXVsdGxheWVyJywgJ2xheWVyX2lkJykKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnUmVsZWFzZURlZmF1bHRMYXllci5sYXllcl9uYW1lJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3JlbGVhc2VkZWZhdWx0bGF5ZXInLCAnbGF5ZXJfbmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD0nJywgbWF4X2xlbmd0aD0xMDApLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdMYXllclNvdXJjZScsIGZpZWxkcyBbJ25hbWUnXQorICAgICAgICBkYi5kZWxldGVfdW5pcXVlKHUnb3JtX2xheWVyc291cmNlJywgWyduYW1lJ10pCisKKyAgICAgICAgIyBSZW1vdmluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknLCBmaWVsZHMgWydyZWxlYXNlJywgJ2xheWVyX3NvdXJjZSddCisgICAgICAgIGRiLmRlbGV0ZV91bmlxdWUodSdvcm1fcmVsZWFzZWxheWVyc291cmNlcHJpb3JpdHknLCBbJ3JlbGVhc2VfaWQnLCAnbGF5ZXJfc291cmNlX2lkJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1RvYXN0ZXJTZXR0aW5nRGVmYXVsdExheWVyJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fdG9hc3RlcnNldHRpbmdkZWZhdWx0bGF5ZXInLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnbGF5ZXJfdmVyc2lvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1RvYXN0ZXJTZXR0aW5nRGVmYXVsdExheWVyJ10pCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eScpCisKKworICAgICAgICAjIFVzZXIgY2hvc2UgdG8gbm90IGRlYWwgd2l0aCBiYWNrd2FyZHMgTlVMTCBpc3N1ZXMgZm9yICdSZWxlYXNlLmJyYW5jaCcKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgcmV2ZXJzZSB0aGlzIG1pZ3JhdGlvbi4gJ1JlbGVhc2UuYnJhbmNoJyBhbmQgaXRzIHZhbHVlcyBjYW5ub3QgYmUgcmVzdG9yZWQuIikKKyAgICAgICAgCisgICAgICAgICMgVGhlIGZvbGxvd2luZyBjb2RlIGlzIHByb3ZpZGVkIGhlcmUgdG8gYWlkIGluIHdyaXRpbmcgYSBjb3JyZWN0IG1pZ3JhdGlvbiAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1JlbGVhc2UuYnJhbmNoJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3JlbGVhc2UnLCAnYnJhbmNoJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5CcmFuY2gnXSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1JlbGVhc2UuYnJhbmNoX25hbWUnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcmVsZWFzZScsICdicmFuY2hfbmFtZScpCisKKworICAgICAgICAjIFVzZXIgY2hvc2UgdG8gbm90IGRlYWwgd2l0aCBiYWNrd2FyZHMgTlVMTCBpc3N1ZXMgZm9yICdSZWxlYXNlRGVmYXVsdExheWVyLmxheWVyJworICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCByZXZlcnNlIHRoaXMgbWlncmF0aW9uLiAnUmVsZWFzZURlZmF1bHRMYXllci5sYXllcicgYW5kIGl0cyB2YWx1ZXMgY2Fubm90IGJlIHJlc3RvcmVkLiIpCisgICAgICAgIAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcm92aWRlZCBoZXJlIHRvIGFpZCBpbiB3cml0aW5nIGEgY29ycmVjdCBtaWdyYXRpb24gICAgICAgICMgQWRkaW5nIGZpZWxkICdSZWxlYXNlRGVmYXVsdExheWVyLmxheWVyJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3JlbGVhc2VkZWZhdWx0bGF5ZXInLCAnbGF5ZXInLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkxheWVyJ10pLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdSZWxlYXNlRGVmYXVsdExheWVyLmxheWVyX25hbWUnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcmVsZWFzZWRlZmF1bHRsYXllcicsICdsYXllcl9uYW1lJykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnJhbmNoJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpLCAoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpKSIsICdvYmplY3RfbmFtZSc6ICdCcmFuY2gnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmhlbHB0ZXh0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0hlbHBUZXh0J30sCisgICAgICAgICAgICAnYXJlYSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidoZWxwdGV4dF9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2tleSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksICgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc191cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX2ZpbGVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndXBfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkJyYW5jaCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnNvdXJjZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnc291cmNldHlwZScsICdhcGl1cmwnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyU291cmNlJ30sCisgICAgICAgICAgICAnYXBpdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3NvdXJjZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclZlcnNpb25EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVuY2llcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXNrJ10iLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubWFjaGluZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdNYWNoaW5lJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdwcm9qZWN0JywgJ2xheWVyY29tbWl0JyksKSIsICdvYmplY3RfbmFtZSc6ICdQcm9qZWN0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wdGlvbmFsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl92ZXJzaW9uJywgJ2ZpbGVfcGF0aCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGVfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGVfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdicmFuY2hfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VkZWZhdWx0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZURlZmF1bHRMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWxheWVyc291cmNlcHJpb3JpdHknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3JlbGVhc2UnLCAnbGF5ZXJfc291cmNlJyksKSIsICdvYmplY3RfbmFtZSc6ICdSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIn0pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbGljZW5zZV9tYW5pZmVzdF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfRmlsZSd9LAorICAgICAgICAgICAgJ2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkaXJlY3Rvcnlfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAnZ3JvdXAnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbm9kZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnb3duZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwZXJtaXNzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnc3ltX3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidzeW1saW5rX3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbWFnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbWFnZV9GaWxlJ30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ3VuaXF1ZV90b2dldGhlcic6ICIoKCdidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJyksKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZF9yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udG9hc3RlcnNldHRpbmcnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVG9hc3RlclNldHRpbmcnfSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2NCd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMThfYXV0b19fYWRkX2ZpZWxkX2xheWVyX3ZlcnNpb25fcHJvamVjdC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE4X2F1dG9fX2FkZF9maWVsZF9sYXllcl92ZXJzaW9uX3Byb2plY3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI4NGJiOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE4X2F1dG9fX2FkZF9maWVsZF9sYXllcl92ZXJzaW9uX3Byb2plY3QucHkKQEAgLTAsMCArMSwzMzEgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgQWRkaW5nIGZpZWxkICdMYXllcl9WZXJzaW9uLnByb2plY3QnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICdwcm9qZWN0JywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShkZWZhdWx0PU5vbmUsIHRvPW9ybVsnb3JtLlByb2plY3QnXSwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi5wcm9qZWN0JworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2xheWVyX3ZlcnNpb24nLCAncHJvamVjdF9pZCcpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYml0YmFrZXZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQml0YmFrZVZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJyYW5jaCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSwgKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSkiLCAnb2JqZWN0X25hbWUnOiAnQnJhbmNoJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl90cmVlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9icmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uQnJhbmNoJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyc291cmNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdzb3VyY2V0eXBlJywgJ2FwaXVybCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJTb3VyY2UnfSwKKyAgICAgICAgICAgICdhcGl1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAnc291cmNldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnZlcnNpb25kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyVmVyc2lvbkRlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVlcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZW5jaWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5tYWNoaW5lJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ01hY2hpbmUnfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3Byb2plY3QnLCAnbGF5ZXJjb21taXQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcmNvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3B0aW9uYWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3ZlcnNpb24nLCAnZmlsZV9wYXRoJyksKSIsICdvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWRlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlRGVmYXVsdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgncmVsZWFzZScsICdsYXllcl9zb3VyY2UnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50b2FzdGVyc2V0dGluZyc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUb2FzdGVyU2V0dGluZyd9LAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxOV9hdXRvX19hZGRfYnVpbGRhcnRpZmFjdC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE5X2F1dG9fX2FkZF9idWlsZGFydGlmYWN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkY2U5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxOV9hdXRvX19hZGRfYnVpbGRhcnRpZmFjdC5weQpAQCAtMCwwICsxLDM0MiBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ0J1aWxkQXJ0aWZhY3QnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9idWlsZGFydGlmYWN0JywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ2J1aWxkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uQnVpbGQnXSkpLAorICAgICAgICAgICAgKCdmaWxlX25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnZmlsZV9zaXplJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnQnVpbGRBcnRpZmFjdCddKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ0J1aWxkQXJ0aWZhY3QnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9idWlsZGFydGlmYWN0JykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnJhbmNoJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpLCAoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpKSIsICdvYmplY3RfbmFtZSc6ICdCcmFuY2gnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkYXJ0aWZhY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRBcnRpZmFjdCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmhlbHB0ZXh0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0hlbHBUZXh0J30sCisgICAgICAgICAgICAnYXJlYSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidoZWxwdGV4dF9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2tleSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksICgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc191cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX2ZpbGVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5CcmFuY2gnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJzb3VyY2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3NvdXJjZXR5cGUnLCAnYXBpdXJsJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclNvdXJjZSd9LAorICAgICAgICAgICAgJ2FwaXVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICdzb3VyY2V0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVydmVyc2lvbmRlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlbmNpZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLm1hY2hpbmUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTWFjaGluZSd9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXNlcl9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3RsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgncHJvamVjdCcsICdsYXllcmNvbW1pdCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnUHJvamVjdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcHRpb25hbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfdmVyc2lvbicsICdmaWxlX3BhdGgnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlY2lwZSd9LAorICAgICAgICAgICAgJ2J1Z3RyYWNrZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdmaWxlX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdob21lcGFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZSd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnYnJhbmNoX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlZGVmYXVsdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2VEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdyZWxlYXNlJywgJ2xheWVyX3NvdXJjZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2Vfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ZpbGUnfSwKKyAgICAgICAgICAgICdkaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGlyZWN0b3J5X3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ2dyb3VwJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5vZGV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ293bmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncGVybWlzc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxNid9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3N5bV90YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInc3ltbGlua19zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW1hZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW1hZ2VfRmlsZSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2snOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb3JkZXJpbmcnOiAiKCdvcmRlcicsICdyZWNpcGUnKSIsICd1bmlxdWVfdG9nZXRoZXInOiAiKCgnYnVpbGQnLCAncmVjaXBlJywgJ3Rhc2tfbmFtZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsb2dmaWxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdvcmRlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAncGF0aF90b19zc3RhdGVfb2JqJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nJ30sCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDIwX2F1dG9fX2FkZF9maWVsZF9sYXllcl92ZXJzaW9uX2xvY2FsX3BhdGhfX2FkZF9maWVsZF9yZWNpcGVfcGF0aGZsYWdzX18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyMF9hdXRvX19hZGRfZmllbGRfbGF5ZXJfdmVyc2lvbl9sb2NhbF9wYXRoX19hZGRfZmllbGRfcmVjaXBlX3BhdGhmbGFnc19fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYzU3OTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyMF9hdXRvX19hZGRfZmllbGRfbGF5ZXJfdmVyc2lvbl9sb2NhbF9wYXRoX19hZGRfZmllbGRfcmVjaXBlX3BhdGhmbGFnc19fLnB5CkBAIC0wLDAgKzEsMzYxIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdSZWNpcGUnLCBmaWVsZHMgWydsYXllcl92ZXJzaW9uJywgJ2ZpbGVfcGF0aCddCisgICAgICAgIGRiLmRlbGV0ZV91bmlxdWUodSdvcm1fcmVjaXBlJywgWydsYXllcl92ZXJzaW9uX2lkJywgJ2ZpbGVfcGF0aCddKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdMYXllcl9WZXJzaW9uLmxvY2FsX3BhdGgnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICdsb2NhbF9wYXRoJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykoZGVmYXVsdD0iLyIsIG1heF9sZW5ndGg9MTAyNCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdSZWNpcGUucGF0aGZsYWdzJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3JlY2lwZScsICdwYXRoZmxhZ3MnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKGRlZmF1bHQ9JycsIG1heF9sZW5ndGg9MjAwLCBibGFuaz1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ1JlY2lwZScsIGZpZWxkcyBbJ2xheWVyX3ZlcnNpb24nLCAnZmlsZV9wYXRoJywgJ3BhdGhmbGFncyddCisgICAgICAgIGRiLmNyZWF0ZV91bmlxdWUodSdvcm1fcmVjaXBlJywgWydsYXllcl92ZXJzaW9uX2lkJywgJ2ZpbGVfcGF0aCcsICdwYXRoZmxhZ3MnXSkKKworICAgICAgICAjIE1pZ3JhdGUgZGF0YSBmcm9tIExheWVyLmxvY2FsX3BhdGggdG8gTGF5ZXJfVmVyc2lvbi5sb2NhbF9wYXRoCisgICAgICAgIGlmIG5vdCBkYi5kcnlfcnVuOgorICAgICAgICAgICAgZm9yIGx2IGluIG9ybS5MYXllcl9WZXJzaW9uLm9iamVjdHMuYWxsKCk6CisgICAgICAgICAgICAgICAgaWYgbHYubGF5ZXIubG9jYWxfcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgbHYubG9jYWxfcGF0aCA9IGx2LmxheWVyLmxvY2FsX3BhdGgKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsdi5sb2NhbF9wYXRoID0gIi8iCisgICAgICAgICAgICAgICAgbHYuc2F2ZSgpCisKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9sYXllcicsICdsb2NhbF9wYXRoJykKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCByZXZlcnNlIHRoaXMgbWlncmF0aW9uIikKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnJhbmNoJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpLCAoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpKSIsICdvYmplY3RfbmFtZSc6ICdCcmFuY2gnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGRhcnRpZmFjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZEFydGlmYWN0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uaGVscHRleHQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnSGVscFRleHQnfSwKKyAgICAgICAgICAgICdhcmVhJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2hlbHB0ZXh0X2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAna2V5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwgKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcid9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9pbmRleF91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfZmlsZV9iYXNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfdHJlZV9iYXNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkJyYW5jaCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnNvdXJjZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnc291cmNldHlwZScsICdhcGl1cmwnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyU291cmNlJ30sCisgICAgICAgICAgICAnYXBpdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3NvdXJjZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclZlcnNpb25EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVuY2llcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXNrJ10iLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubWFjaGluZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdNYWNoaW5lJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3Byb2plY3QnLCAnbGF5ZXJjb21taXQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcmNvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3B0aW9uYWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3ZlcnNpb24nLCAnZmlsZV9wYXRoJywgJ3BhdGhmbGFncycpLCAoJ2ZpbGVfcGF0aCcsICdwYXRoZmxhZ3MnKSkiLCAnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYXRoZmxhZ3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZSd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnYnJhbmNoX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlZGVmYXVsdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2VEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdyZWxlYXNlJywgJ2xheWVyX3NvdXJjZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2Vfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ZpbGUnfSwKKyAgICAgICAgICAgICdkaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGlyZWN0b3J5X3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ2dyb3VwJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5vZGV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ293bmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncGVybWlzc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxNid9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3N5bV90YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInc3ltbGlua19zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW1hZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW1hZ2VfRmlsZSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2snOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb3JkZXJpbmcnOiAiKCdvcmRlcicsICdyZWNpcGUnKSIsICd1bmlxdWVfdG9nZXRoZXInOiAiKCgnYnVpbGQnLCAncmVjaXBlJywgJ3Rhc2tfbmFtZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnOCcsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzgnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsb2dmaWxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdvcmRlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAncGF0aF90b19zc3RhdGVfb2JqJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza3MnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udG9hc3RlcnNldHRpbmcnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVG9hc3RlclNldHRpbmcnfSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2NCd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyMV9hdXRvX19jaGdfZmllbGRfYnVpbGRfcHJvamVjdF9fY2hnX2ZpZWxkX3Byb2plY3RfYml0YmFrZV92ZXJzaW9uX19jaGdfLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjFfYXV0b19fY2hnX2ZpZWxkX2J1aWxkX3Byb2plY3RfX2NoZ19maWVsZF9wcm9qZWN0X2JpdGJha2VfdmVyc2lvbl9fY2hnXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjJkZGI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjFfYXV0b19fY2hnX2ZpZWxkX2J1aWxkX3Byb2plY3RfX2NoZ19maWVsZF9wcm9qZWN0X2JpdGJha2VfdmVyc2lvbl9fY2hnXy5weQpAQCAtMCwwICsxLDM3MSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBub19kcnlfcnVuID0gVHJ1ZQorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnQnVpbGQucHJvamVjdCcKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX2J1aWxkJywgJ3Byb2plY3RfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5Qcm9qZWN0J10pKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1Byb2plY3QuYml0YmFrZV92ZXJzaW9uJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdiaXRiYWtlX3ZlcnNpb25faWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddLCBudWxsPVRydWUpKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1Byb2plY3QucmVsZWFzZScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3Byb2plY3QnLCAncmVsZWFzZV9pZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlJlbGVhc2UnXSwgbnVsbD1UcnVlKSkKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdUYXNrLmNwdV91c2FnZScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3Rhc2snLCAnY3B1X3VzYWdlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJykobnVsbD1UcnVlLCBtYXhfZGlnaXRzPTgsIGRlY2ltYWxfcGxhY2VzPTIpKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1Rhc2suZWxhcHNlZF90aW1lJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fdGFzaycsICdlbGFwc2VkX3RpbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnKShudWxsPVRydWUsIG1heF9kaWdpdHM9OCwgZGVjaW1hbF9wbGFjZXM9MikpCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnQnVpbGQucHJvamVjdCcKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX2J1aWxkJywgJ3Byb2plY3RfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5Qcm9qZWN0J10sIG51bGw9VHJ1ZSkpCisKKyAgICAgICAgIyBVc2VyIGNob3NlIHRvIG5vdCBkZWFsIHdpdGggYmFja3dhcmRzIE5VTEwgaXNzdWVzIGZvciAnUHJvamVjdC5iaXRiYWtlX3ZlcnNpb24nCisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ2Fubm90IHJldmVyc2UgdGhpcyBtaWdyYXRpb24uICdQcm9qZWN0LmJpdGJha2VfdmVyc2lvbicgYW5kIGl0cyB2YWx1ZXMgY2Fubm90IGJlIHJlc3RvcmVkLiIpCisgICAgICAgIAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcm92aWRlZCBoZXJlIHRvIGFpZCBpbiB3cml0aW5nIGEgY29ycmVjdCBtaWdyYXRpb24KKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnUHJvamVjdC5iaXRiYWtlX3ZlcnNpb24nCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9wcm9qZWN0JywgJ2JpdGJha2VfdmVyc2lvbl9pZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10pKQorCisgICAgICAgICMgVXNlciBjaG9zZSB0byBub3QgZGVhbCB3aXRoIGJhY2t3YXJkcyBOVUxMIGlzc3VlcyBmb3IgJ1Byb2plY3QucmVsZWFzZScKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgcmV2ZXJzZSB0aGlzIG1pZ3JhdGlvbi4gJ1Byb2plY3QucmVsZWFzZScgYW5kIGl0cyB2YWx1ZXMgY2Fubm90IGJlIHJlc3RvcmVkLiIpCisgICAgICAgIAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcm92aWRlZCBoZXJlIHRvIGFpZCBpbiB3cml0aW5nIGEgY29ycmVjdCBtaWdyYXRpb24KKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnUHJvamVjdC5yZWxlYXNlJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdyZWxlYXNlX2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uUmVsZWFzZSddKSkKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdUYXNrLmNwdV91c2FnZScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3Rhc2snLCAnY3B1X3VzYWdlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJykobnVsbD1UcnVlLCBtYXhfZGlnaXRzPTYsIGRlY2ltYWxfcGxhY2VzPTIpKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1Rhc2suZWxhcHNlZF90aW1lJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fdGFzaycsICdlbGFwc2VkX3RpbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnKShudWxsPVRydWUsIG1heF9kaWdpdHM9NiwgZGVjaW1hbF9wbGFjZXM9MikpCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJpdGJha2V2ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JpdGJha2VWZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5icmFuY2gnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICduYW1lJyksICgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJykpIiwgJ29iamVjdF9uYW1lJzogJ0JyYW5jaCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZGFydGlmYWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkQXJ0aWZhY3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl90cmVlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInLyciLCAnbWF4X2xlbmd0aCc6ICcxMDI0J30pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5CcmFuY2gnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJzb3VyY2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3NvdXJjZXR5cGUnLCAnYXBpdXJsJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclNvdXJjZSd9LAorICAgICAgICAgICAgJ2FwaXVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICdzb3VyY2V0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVydmVyc2lvbmRlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlbmNpZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLm1hY2hpbmUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTWFjaGluZSd9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdwcm9qZWN0JywgJ2xheWVyY29tbWl0JyksKSIsICdvYmplY3RfbmFtZSc6ICdQcm9qZWN0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wdGlvbmFsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl92ZXJzaW9uJywgJ2ZpbGVfcGF0aCcsICdwYXRoZmxhZ3MnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlY2lwZSd9LAorICAgICAgICAgICAgJ2J1Z3RyYWNrZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdmaWxlX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdob21lcGFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncGF0aGZsYWdzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWRlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlRGVmYXVsdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgncmVsZWFzZScsICdsYXllcl9zb3VyY2UnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzgnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc4JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nJ30sCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDIyX2F1dG9fX2FkZF9maWVsZF90YXJnZXRfdGFza19fYWRkX2ZpZWxkX2xheWVyX3ZlcnNpb25fbG9jYWxfcGF0aF9fZGVsX2YucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyMl9hdXRvX19hZGRfZmllbGRfdGFyZ2V0X3Rhc2tfX2FkZF9maWVsZF9sYXllcl92ZXJzaW9uX2xvY2FsX3BhdGhfX2RlbF9mLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZWMzOTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyMl9hdXRvX19hZGRfZmllbGRfdGFyZ2V0X3Rhc2tfX2FkZF9maWVsZF9sYXllcl92ZXJzaW9uX2xvY2FsX3BhdGhfX2RlbF9mLnB5CkBAIC0wLDAgKzEsMzQzIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnVGFyZ2V0LnRhc2snCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fdGFyZ2V0JywgJ3Rhc2snLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdUYXJnZXQudGFzaycKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV90YXJnZXQnLCAndGFzaycpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYml0YmFrZXZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQml0YmFrZVZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJyYW5jaCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSwgKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSkiLCAnb2JqZWN0X25hbWUnOiAnQnJhbmNoJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkYXJ0aWZhY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRBcnRpZmFjdCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmhlbHB0ZXh0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0hlbHBUZXh0J30sCisgICAgICAgICAgICAnYXJlYSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidoZWxwdGV4dF9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2tleSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksICgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc191cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX2ZpbGVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicvJyIsICdtYXhfbGVuZ3RoJzogJzEwMjQnfSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkJyYW5jaCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnNvdXJjZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnc291cmNldHlwZScsICdhcGl1cmwnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyU291cmNlJ30sCisgICAgICAgICAgICAnYXBpdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3NvdXJjZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclZlcnNpb25EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVuY2llcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXNrJ10iLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubWFjaGluZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdNYWNoaW5lJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3Byb2plY3QnLCAnbGF5ZXJjb21taXQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcmNvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3B0aW9uYWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3ZlcnNpb24nLCAnZmlsZV9wYXRoJywgJ3BhdGhmbGFncycpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYXRoZmxhZ3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZSd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnYnJhbmNoX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlZGVmYXVsdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2VEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdyZWxlYXNlJywgJ2xheWVyX3NvdXJjZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2Vfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzgnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc4JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nJ30sCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjNfYXV0b19fZGVsX2ZpZWxkX2J1aWxkX3dhcm5pbmdzX25vX19kZWxfZmllbGRfYnVpbGRfZXJyb3JzX25vX19kZWxfZmllbC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDIzX2F1dG9fX2RlbF9maWVsZF9idWlsZF93YXJuaW5nc19ub19fZGVsX2ZpZWxkX2J1aWxkX2Vycm9yc19ub19fZGVsX2ZpZWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjViMjAwYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDIzX2F1dG9fX2RlbF9maWVsZF9idWlsZF93YXJuaW5nc19ub19fZGVsX2ZpZWxkX2J1aWxkX2Vycm9yc19ub19fZGVsX2ZpZWwucHkKQEAgLTAsMCArMSwzNTMgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0J1aWxkLndhcm5pbmdzX25vJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2J1aWxkJywgJ3dhcm5pbmdzX25vJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdCdWlsZC5lcnJvcnNfbm8nCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fYnVpbGQnLCAnZXJyb3JzX25vJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdCdWlsZC50aW1lc3BlbnQnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fYnVpbGQnLCAndGltZXNwZW50JykKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnQnVpbGQud2FybmluZ3Nfbm8nCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fYnVpbGQnLCAnd2FybmluZ3Nfbm8nLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdCdWlsZC5lcnJvcnNfbm8nCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fYnVpbGQnLCAnZXJyb3JzX25vJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTApLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnQnVpbGQudGltZXNwZW50JworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2J1aWxkJywgJ3RpbWVzcGVudCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD0wKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYml0YmFrZXZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQml0YmFrZVZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJyYW5jaCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSwgKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSkiLCAnb2JqZWN0X25hbWUnOiAnQnJhbmNoJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZGFydGlmYWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkQXJ0aWZhY3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl90cmVlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInLyciLCAnbWF4X2xlbmd0aCc6ICcxMDI0J30pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5CcmFuY2gnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJzb3VyY2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3NvdXJjZXR5cGUnLCAnYXBpdXJsJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclNvdXJjZSd9LAorICAgICAgICAgICAgJ2FwaXVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICdzb3VyY2V0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVydmVyc2lvbmRlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlbmNpZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLm1hY2hpbmUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTWFjaGluZSd9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdwcm9qZWN0JywgJ2xheWVyY29tbWl0JyksKSIsICdvYmplY3RfbmFtZSc6ICdQcm9qZWN0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wdGlvbmFsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl92ZXJzaW9uJywgJ2ZpbGVfcGF0aCcsICdwYXRoZmxhZ3MnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlY2lwZSd9LAorICAgICAgICAgICAgJ2J1Z3RyYWNrZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdmaWxlX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdob21lcGFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncGF0aGZsYWdzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWRlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlRGVmYXVsdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgncmVsZWFzZScsICdsYXllcl9zb3VyY2UnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfRmlsZSd9LAorICAgICAgICAgICAgJ2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkaXJlY3Rvcnlfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAnZ3JvdXAnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbm9kZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnb3duZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwZXJtaXNzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnc3ltX3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidzeW1saW5rX3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbWFnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbWFnZV9GaWxlJ30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ3VuaXF1ZV90b2dldGhlcic6ICIoKCdidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJyksKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc4JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnOCcsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50b2FzdGVyc2V0dGluZyc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUb2FzdGVyU2V0dGluZyd9LAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyNF9hdXRvX19hZGRfZmllbGRfcmVjaXBlX2lzX2ltYWdlLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjRfYXV0b19fYWRkX2ZpZWxkX3JlY2lwZV9pc19pbWFnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGY2MGE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjRfYXV0b19fYWRkX2ZpZWxkX3JlY2lwZV9pc19pbWFnZS5weQpAQCAtMCwwICsxLDMzOCBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1JlY2lwZS5pc19pbWFnZScKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9yZWNpcGUnLCAnaXNfaW1hZ2UnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcpKGRlZmF1bHQ9RmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdSZWNpcGUuaXNfaW1hZ2UnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcmVjaXBlJywgJ2lzX2ltYWdlJykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnJhbmNoJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpLCAoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpKSIsICdvYmplY3RfbmFtZSc6ICdCcmFuY2gnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkYXJ0aWZhY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRBcnRpZmFjdCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmhlbHB0ZXh0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0hlbHBUZXh0J30sCisgICAgICAgICAgICAnYXJlYSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidoZWxwdGV4dF9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2tleSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksICgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc191cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX2ZpbGVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicvJyIsICdtYXhfbGVuZ3RoJzogJzEwMjQnfSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkJyYW5jaCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnNvdXJjZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnc291cmNldHlwZScsICdhcGl1cmwnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyU291cmNlJ30sCisgICAgICAgICAgICAnYXBpdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3NvdXJjZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclZlcnNpb25EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVuY2llcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXNrJ10iLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubWFjaGluZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdNYWNoaW5lJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3Byb2plY3QnLCAnbGF5ZXJjb21taXQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcmNvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3B0aW9uYWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3ZlcnNpb24nLCAnZmlsZV9wYXRoJywgJ3BhdGhmbGFncycpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYXRoZmxhZ3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZSd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnYnJhbmNoX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlZGVmYXVsdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2VEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdyZWxlYXNlJywgJ2xheWVyX3NvdXJjZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2Vfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzgnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc4JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nJ30sCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDI1X2F1dG9fX2FkZF9maWVsZF9wcm9qZWN0X2lzX2RlZmF1bHQucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyNV9hdXRvX19hZGRfZmllbGRfcHJvamVjdF9pc19kZWZhdWx0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3Njk5MGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyNV9hdXRvX19hZGRfZmllbGRfcHJvamVjdF9pc19kZWZhdWx0LnB5CkBAIC0wLDAgKzEsMzQ2IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIHdvcmstYXJvdW5kIGZvciBodHRwOi8vc291dGguYWVyYWNvZGUub3JnL3RpY2tldC81Nzg6CisgICAgICAgICMgU1FMaXRlIGJvb2xlYW4gZmllbGRzIGFyZW4ndCBzZXQgdG8gdGhlIGNvcnJlY3QgZGVmYXVsdCB2YWx1ZQorICAgICAgICAjIChuZWVkcyB0byBiZSAwIG9yIDEsIHJhdGhlciB0aGFuIFRydWUgb3IgRmFsc2UpCisgICAgICAgIGRlZmF1bHQgPSBGYWxzZQorICAgICAgICBpZiBkYi5iYWNrZW5kX25hbWUgPT0gJ3NxbGl0ZTMnOgorICAgICAgICAgICBkZWZhdWx0ID0gMAorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0LmlzX2RlZmF1bHQnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdpc19kZWZhdWx0JywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnKShkZWZhdWx0PWRlZmF1bHQpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdQcm9qZWN0LmlzX2RlZmF1bHQnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdpc19kZWZhdWx0JykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnJhbmNoJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpLCAoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpKSIsICdvYmplY3RfbmFtZSc6ICdCcmFuY2gnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkYXJ0aWZhY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRBcnRpZmFjdCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmhlbHB0ZXh0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0hlbHBUZXh0J30sCisgICAgICAgICAgICAnYXJlYSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidoZWxwdGV4dF9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2tleSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksICgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc191cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX2ZpbGVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicvJyIsICdtYXhfbGVuZ3RoJzogJzEwMjQnfSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkJyYW5jaCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnNvdXJjZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnc291cmNldHlwZScsICdhcGl1cmwnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyU291cmNlJ30sCisgICAgICAgICAgICAnYXBpdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3NvdXJjZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclZlcnNpb25EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVuY2llcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXNrJ10iLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubWFjaGluZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdNYWNoaW5lJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaXNfZGVmYXVsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXNlcl9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3RsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgncHJvamVjdCcsICdsYXllcmNvbW1pdCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnUHJvamVjdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcHRpb25hbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfdmVyc2lvbicsICdmaWxlX3BhdGgnLCAncGF0aGZsYWdzJyksKSIsICdvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhdGhmbGFncyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGVfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGVfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdicmFuY2hfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VkZWZhdWx0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZURlZmF1bHRMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWxheWVyc291cmNlcHJpb3JpdHknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3JlbGVhc2UnLCAnbGF5ZXJfc291cmNlJyksKSIsICdvYmplY3RfbmFtZSc6ICdSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIn0pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbGljZW5zZV9tYW5pZmVzdF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ZpbGUnfSwKKyAgICAgICAgICAgICdkaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGlyZWN0b3J5X3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ2dyb3VwJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5vZGV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ293bmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncGVybWlzc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxNid9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3N5bV90YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInc3ltbGlua19zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW1hZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW1hZ2VfRmlsZSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2snOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb3JkZXJpbmcnOiAiKCdvcmRlcicsICdyZWNpcGUnKSIsICd1bmlxdWVfdG9nZXRoZXInOiAiKCgnYnVpbGQnLCAncmVjaXBlJywgJ3Rhc2tfbmFtZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnOCcsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzgnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsb2dmaWxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdvcmRlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAncGF0aF90b19zc3RhdGVfb2JqJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza3MnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udG9hc3RlcnNldHRpbmcnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVG9hc3RlclNldHRpbmcnfSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2NCd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyNl9zZXRfZGVmYXVsdF9wcm9qZWN0LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjZfc2V0X2RlZmF1bHRfcHJvamVjdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjQwYWJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjZfc2V0X2RlZmF1bHRfcHJvamVjdC5weQpAQCAtMCwwICsxLDM3NCBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKyMgZGF0YS1vbmx5IG1pZ3JhdGlvbiB0byBzZXQgdGhlIGlzX2RlZmF1bHQgZmllbGQgY29ycmVjdGx5CisjIGFjcm9zcyBhbGwgcHJvamVjdHMsIHNvIGl0IGhhcyB0aGUgY29ycmVjdCB2YWx1ZSBvbiBhIHNpbmdsZQorIyByZWNvcmQgb25seTsgdGhpcyB3aWxsIGFkZCBvciBhbWVuZCBkZWZhdWx0IHByb2plY3QgKG1hcmtlZCB3aXRoCisjIGlzX2RlZmF1bHQgPSBUcnVlKQorY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBub19kcnlfcnVuID0gVHJ1ZQorCisgICAgIyB3b3JrLWFyb3VuZCBmb3IgaHR0cDovL3NvdXRoLmFlcmFjb2RlLm9yZy90aWNrZXQvNTc4OgorICAgICMgU1FMaXRlIGJvb2xlYW4gZmllbGRzIGFyZW4ndCBzZXQgdG8gdGhlIGNvcnJlY3QgZGVmYXVsdCB2YWx1ZQorICAgICMgd2hlbiBhZGRlZCB0byBleGlzdGluZyByZWNvcmRzICh2YWx1ZSBuZWVkcyB0byBiZSAwIG9yIDEsIHJhdGhlcgorICAgICMgdGhhbiBUcnVlIG9yIEZhbHNlKSwgc28gbWFudWFsbHkgdXBkYXRlIHRoYXQgZmllbGQgZm9yIGFsbAorICAgICMgZXhpc3RpbmcgcmVjb3JkcworICAgIGRlZiBfc3FsaXRlX3VwZGF0ZV9hbGxfcHJvamVjdHNfaXNfZGVmYXVsdChzZWxmLCBvcm0pOgorICAgICAgICBpZiBkYi5iYWNrZW5kX25hbWUgPT0gJ3NxbGl0ZTMnOgorICAgICAgICAgICAgZm9yIHByb2plY3QgaW4gb3JtLlByb2plY3Qub2JqZWN0cy5hbGwoKToKKyAgICAgICAgICAgICAgICBwcm9qZWN0LmlzX2RlZmF1bHQgPSAwCisgICAgICAgICAgICAgICAgcHJvamVjdC5zYXZlKCkKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIGZpeCBpc19kZWZhdWx0IGZpZWxkCisgICAgICAgIHNlbGYuX3NxbGl0ZV91cGRhdGVfYWxsX3Byb2plY3RzX2lzX2RlZmF1bHQob3JtKQorCisgICAgICAgICMgbm93IGNyZWF0ZSBvciBtb2RpZnkgdGhlIGRlZmF1bHQgcHJvamVjdAorICAgICAgICBwcm9qZWN0ID0gTm9uZQorCisgICAgICAgICMgY2hlY2sgZm9yIGV4aXN0aW5nIGRlZmF1bHQgcHJvamVjdCB3aXRoIElEIDAgd2hpY2ggaGFzCisgICAgICAgICMgYWxyZWFkeSBiZWVuIGFkZGVkIGluIGNvZGUKKyAgICAgICAgcHJvamVjdHMgPSBvcm0uUHJvamVjdC5vYmplY3RzLmZpbHRlcihwayA9IDApCisKKyAgICAgICAgaWYgbGVuKHByb2plY3RzKSA9PSAxOgorICAgICAgICAgICAgcHJvamVjdCA9IHByb2plY3RzWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGNyZWF0ZSBkZWZhdWx0IHByb2plY3QKKyAgICAgICAgICAgIG9wdGlvbnMgPSB7CisgICAgICAgICAgICAgICAgIm5hbWUiOiAiQ29tbWFuZCBsaW5lIGJ1aWxkcyIsCisgICAgICAgICAgICAgICAgInNob3J0X2Rlc2NyaXB0aW9uIjogIlByb2plY3QgZm9yIGJ1aWxkcyBzdGFydGVkIG91dHNpZGUgVG9hc3RlciIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByb2plY3QgPSBvcm0uUHJvamVjdC5vYmplY3RzLmNyZWF0ZSgqKm9wdGlvbnMpCisKKyAgICAgICAgcHJvamVjdC5pc19kZWZhdWx0ID0gVHJ1ZQorICAgICAgICBwcm9qZWN0LnNhdmUoKQorCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIGRvbid0IGRvIGFueXRoaW5nIHdoZW4gcmV2ZXJzaW5nIHRoaXMgbWlncmF0aW9uLCBhcyB3ZSBjYW4gc2FmZWx5CisgICAgICAgICMga2VlcCBhbnkgZ2VuZXJhdGVkIGRlZmF1bHQgcHJvamVjdCB3aGljaCBoYXMgYnVpbGRzIGF0dGFjaGVkOworICAgICAgICAjIGl0J3MganVzdCB0aGF0IHRoZSBvbGQgY29kZSB3b24ndCB1c2UgdGhhdCBwcm9qZWN0IGFzIHRoZQorICAgICAgICAjIGNvbnRhaW5lciBmb3IgYW55IG5ldyBidWlsZHMsIGFzIGl0IGRvZXNuJ3QgaGF2ZSBhbiBJRCBvZiAwCisgICAgICAgIHBhc3MKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYml0YmFrZXZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQml0YmFrZVZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJyYW5jaCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSwgKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSkiLCAnb2JqZWN0X25hbWUnOiAnQnJhbmNoJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZGFydGlmYWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkQXJ0aWZhY3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl90cmVlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInLyciLCAnbWF4X2xlbmd0aCc6ICcxMDI0J30pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5CcmFuY2gnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJzb3VyY2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3NvdXJjZXR5cGUnLCAnYXBpdXJsJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclNvdXJjZSd9LAorICAgICAgICAgICAgJ2FwaXVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICdzb3VyY2V0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVydmVyc2lvbmRlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlbmNpZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLm1hY2hpbmUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTWFjaGluZSd9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lzX2RlZmF1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3Byb2plY3QnLCAnbGF5ZXJjb21taXQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcmNvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3B0aW9uYWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3ZlcnNpb24nLCAnZmlsZV9wYXRoJywgJ3BhdGhmbGFncycpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYXRoZmxhZ3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZSd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnYnJhbmNoX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlZGVmYXVsdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2VEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdyZWxlYXNlJywgJ2xheWVyX3NvdXJjZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2Vfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzgnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc4JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nJ30sCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbW9kZWxzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9tb2RlbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRkMmU4NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbW9kZWxzLnB5CkBAIC0wLDAgKzEsMTIzMyBAQAorIworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMsIEludGVncml0eUVycm9yCitmcm9tIGRqYW5nby5kYi5tb2RlbHMgaW1wb3J0IEYsIFEsIEF2ZywgTWF4Citmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKKworZnJvbSBkamFuZ28uY29yZS51cmxyZXNvbHZlcnMgaW1wb3J0IHJldmVyc2UKKworZnJvbSBkamFuZ28uY29yZSBpbXBvcnQgdmFsaWRhdG9ycworZnJvbSBkamFuZ28uY29uZiBpbXBvcnQgc2V0dGluZ3MKK2ltcG9ydCBkamFuZ28uZGIubW9kZWxzLnNpZ25hbHMKKworCitpbXBvcnQgbG9nZ2luZworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInRvYXN0ZXIiKQorCisKK2NsYXNzIEdpdFVSTFZhbGlkYXRvcih2YWxpZGF0b3JzLlVSTFZhbGlkYXRvcik6CisgICAgaW1wb3J0IHJlCisgICAgcmVnZXggPSByZS5jb21waWxlKAorICAgICAgICByJ14oPzpzc2h8Z2l0fGh0dHB8ZnRwKXM/Oi8vJyAgIyBodHRwOi8vIG9yIGh0dHBzOi8vCisgICAgICAgIHInKD86KD86W0EtWjAtOV0oPzpbQS1aMC05LV17MCw2MX1bQS1aMC05XSk/XC4pKyg/OltBLVpdezIsNn1cLj98W0EtWjAtOS1dezIsfVwuPyl8JyAgIyBkb21haW4uLi4KKyAgICAgICAgcidsb2NhbGhvc3R8JyAgIyBsb2NhbGhvc3QuLi4KKyAgICAgICAgcidcZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9fCcgICMgLi4ub3IgaXB2NAorICAgICAgICByJ1xbP1tBLUYwLTldKjpbQS1GMC05Ol0rXF0/KScgICMgLi4ub3IgaXB2NgorICAgICAgICByJyg/OjpcZCspPycgICMgb3B0aW9uYWwgcG9ydAorICAgICAgICByJyg/Oi8/fFsvP11cUyspJCcsIHJlLklHTk9SRUNBU0UpCisKK2RlZiBHaXRVUkxGaWVsZCgqKmt3YXJncyk6CisgICAgciA9IG1vZGVscy5VUkxGaWVsZCgqKmt3YXJncykKKyAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKHIudmFsaWRhdG9ycykpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHIudmFsaWRhdG9yc1tpXSwgdmFsaWRhdG9ycy5VUkxWYWxpZGF0b3IpOgorICAgICAgICAgICAgci52YWxpZGF0b3JzW2ldID0gR2l0VVJMVmFsaWRhdG9yKCkKKyAgICByZXR1cm4gcgorCisKK2NsYXNzIFRvYXN0ZXJTZXR0aW5nKG1vZGVscy5Nb2RlbCk6CisgICAgbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD02MykKKyAgICBoZWxwdGV4dCA9IG1vZGVscy5UZXh0RmllbGQoKQorICAgIHZhbHVlID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1NSkKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJTZXR0aW5nICVzID0gJXMiICUgKHNlbGYubmFtZSwgc2VsZi52YWx1ZSkKKworY2xhc3MgUHJvamVjdE1hbmFnZXIobW9kZWxzLk1hbmFnZXIpOgorICAgIGRlZiBjcmVhdGVfcHJvamVjdChzZWxmLCBuYW1lLCByZWxlYXNlKToKKyAgICAgICAgaWYgcmVsZWFzZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHByaiA9IHNlbGYubW9kZWwobmFtZSA9IG5hbWUsIGJpdGJha2VfdmVyc2lvbiA9IHJlbGVhc2UuYml0YmFrZV92ZXJzaW9uLCByZWxlYXNlID0gcmVsZWFzZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaiA9IHNlbGYubW9kZWwobmFtZSA9IG5hbWUsIGJpdGJha2VfdmVyc2lvbiA9IE5vbmUsIHJlbGVhc2UgPSBOb25lKQorCisgICAgICAgIHByai5zYXZlKCkKKworICAgICAgICBmb3IgZGVmYXVsdGNvbmYgaW4gVG9hc3RlclNldHRpbmcub2JqZWN0cy5maWx0ZXIobmFtZV9fc3RhcnRzd2l0aD0iREVGQ09ORl8iKToKKyAgICAgICAgICAgIG5hbWUgPSBkZWZhdWx0Y29uZi5uYW1lWzg6XQorICAgICAgICAgICAgUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuY3JlYXRlKCBwcm9qZWN0ID0gcHJqLAorICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLAorICAgICAgICAgICAgICAgIHZhbHVlID0gZGVmYXVsdGNvbmYudmFsdWUpCisKKyAgICAgICAgaWYgcmVsZWFzZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHByagorCisgICAgICAgIGZvciByZGwgaW4gcmVsZWFzZS5yZWxlYXNlZGVmYXVsdGxheWVyX3NldC5hbGwoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsdiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5maWx0ZXIobGF5ZXJfX25hbWUgPSByZGwubGF5ZXJfbmFtZSwgdXBfYnJhbmNoX19uYW1lID0gcmVsZWFzZS5icmFuY2hfbmFtZSlbMF0uZ2V0X2VxdWl2YWxlbnRzX3dwcmlvcml0eShwcmopWzBdCisgICAgICAgICAgICAgICAgUHJvamVjdExheWVyLm9iamVjdHMuY3JlYXRlKCBwcm9qZWN0ID0gcHJqLAorICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJjb21taXQgPSBsdiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsID0gRmFsc2UgKQorICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICAgICAgIyB3ZSBtYXkgaGF2ZSBubyB2YWxpZCBsYXllciB2ZXJzaW9uIG9iamVjdHMsIGFuZCB0aGF0J3Mgb2sKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmV0dXJuIHByagorCisgICAgZGVmIGNyZWF0ZShzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkludmFsaWQgY2FsbCB0byBQcm9qZWN0Lm9iamVjdHMuY3JlYXRlLiBVc2UgUHJvamVjdC5vYmplY3RzLmNyZWF0ZV9wcm9qZWN0KCkgdG8gY3JlYXRlIGEgcHJvamVjdCIpCisKKyAgICAjIHJldHVybiBzaW5nbGUgb2JqZWN0IHdpdGggaXNfZGVmYXVsdCA9IFRydWUKKyAgICBkZWYgZ2V0X2RlZmF1bHRfcHJvamVjdChzZWxmKToKKyAgICAgICAgcHJvamVjdHMgPSBzdXBlcihQcm9qZWN0TWFuYWdlciwgc2VsZikuZmlsdGVyKGlzX2RlZmF1bHQgPSBUcnVlKQorICAgICAgICBpZiBsZW4ocHJvamVjdHMpID4gMToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiSW5jb25zaXN0ZW50IHByb2plY3QgZGF0YTogbXVsdGlwbGUgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZmF1bHQgcHJvamVjdHMgKGkuZS4gd2l0aCBpc19kZWZhdWx0PVRydWUpIikKKyAgICAgICAgZWxpZiBsZW4ocHJvamVjdHMpIDwgMToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiSW5jb25zaXN0ZW50IHByb2plY3QgZGF0YTogbm8gZGVmYXVsdCBwcm9qZWN0IGZvdW5kIikKKyAgICAgICAgcmV0dXJuIHByb2plY3RzWzBdCisKK2NsYXNzIFByb2plY3QobW9kZWxzLk1vZGVsKToKKyAgICBzZWFyY2hfYWxsb3dlZF9maWVsZHMgPSBbJ25hbWUnLCAnc2hvcnRfZGVzY3JpcHRpb24nLCAncmVsZWFzZV9fbmFtZScsICdyZWxlYXNlX19icmFuY2hfbmFtZSddCisgICAgbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDApCisgICAgc2hvcnRfZGVzY3JpcHRpb24gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NTAsIGJsYW5rPVRydWUpCisgICAgYml0YmFrZV92ZXJzaW9uID0gbW9kZWxzLkZvcmVpZ25LZXkoJ0JpdGJha2VWZXJzaW9uJywgbnVsbD1UcnVlKQorICAgIHJlbGVhc2UgICAgID0gbW9kZWxzLkZvcmVpZ25LZXkoIlJlbGVhc2UiLCBudWxsPVRydWUpCisgICAgY3JlYXRlZCAgICAgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChhdXRvX25vd19hZGQgPSBUcnVlKQorICAgIHVwZGF0ZWQgICAgID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoYXV0b19ub3cgPSBUcnVlKQorICAgICMgVGhpcyBpcyBhIGhvcnJpYmxlIGhhY2s7IHNpbmNlIFRvYXN0ZXIgaGFzIG5vICJVc2VyIiBtb2RlbCBhdmFpbGFibGUgd2hlbgorICAgICMgcnVubmluZyBpbiBpbnRlcmFjdGl2ZSBtb2RlLCB3ZSBjYW4ndCByZWZlcmVuY2UgdGhlIGZpZWxkIGhlcmUgZGlyZWN0bHkKKyAgICAjIEluc3RlYWQsIHdlIGtlZXAgYSBwb3NzaWJsZSBudWxsIHJlZmVyZW5jZSB0byB0aGUgVXNlciBpZCwgYXMgbm90IHRvIGZvcmNlCisgICAgIyBoYXJkIGxpbmtzIHRvIHBvc3NpYmx5IG1pc3NpbmcgbW9kZWxzCisgICAgdXNlcl9pZCAgICAgPSBtb2RlbHMuSW50ZWdlckZpZWxkKG51bGwgPSBUcnVlKQorICAgIG9iamVjdHMgICAgID0gUHJvamVjdE1hbmFnZXIoKQorCisgICAgIyBzZXQgdG8gVHJ1ZSBmb3IgdGhlIHByb2plY3Qgd2hpY2ggaXMgdGhlIGRlZmF1bHQgY29udGFpbmVyCisgICAgIyBmb3IgYnVpbGRzIGluaXRpYXRlZCBieSB0aGUgY29tbWFuZCBsaW5lIGV0Yy4KKyAgICBpc19kZWZhdWx0ICA9IG1vZGVscy5Cb29sZWFuRmllbGQoZGVmYXVsdCA9IEZhbHNlKQorCisgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzIChSZWxlYXNlICVzLCBCQlYgJXMpIiAlIChzZWxmLm5hbWUsIHNlbGYucmVsZWFzZSwgc2VsZi5iaXRiYWtlX3ZlcnNpb24pCisKKyAgICBkZWYgZ2V0X2N1cnJlbnRfbWFjaGluZV9uYW1lKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5wcm9qZWN0dmFyaWFibGVfc2V0LmdldChuYW1lPSJNQUNISU5FIikudmFsdWUKKyAgICAgICAgZXhjZXB0IChQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0LEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcmV0dXJuKCAiTm9uZSIgKTsKKworICAgIGRlZiBnZXRfbnVtYmVyX29mX2J1aWxkcyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGxlbihCdWlsZC5vYmplY3RzLmZpbHRlciggcHJvamVjdCA9IHNlbGYuaWQgKSkKKyAgICAgICAgZXhjZXB0IChCdWlsZC5Eb2VzTm90RXhpc3QsSW5kZXhFcnJvcik6CisgICAgICAgICAgICByZXR1cm4oIDAgKQorCisgICAgZGVmIGdldF9sYXN0X2J1aWxkX2lkKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gQnVpbGQub2JqZWN0cy5maWx0ZXIoIHByb2plY3QgPSBzZWxmLmlkICkub3JkZXJfYnkoJy1jb21wbGV0ZWRfb24nKVswXS5pZAorICAgICAgICBleGNlcHQgKEJ1aWxkLkRvZXNOb3RFeGlzdCxJbmRleEVycm9yKToKKyAgICAgICAgICAgIHJldHVybiggLTEgKQorCisgICAgZGVmIGdldF9sYXN0X291dGNvbWUoc2VsZik6CisgICAgICAgIGJ1aWxkX2lkID0gc2VsZi5nZXRfbGFzdF9idWlsZF9pZAorICAgICAgICBpZiAoLTEgPT0gYnVpbGRfaWQpOgorICAgICAgICAgICAgcmV0dXJuKCAiIiApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBCdWlsZC5vYmplY3RzLmZpbHRlciggaWQgPSBzZWxmLmdldF9sYXN0X2J1aWxkX2lkIClbIDAgXS5vdXRjb21lCisgICAgICAgIGV4Y2VwdCAoQnVpbGQuRG9lc05vdEV4aXN0LEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcmV0dXJuKCAibm90X2ZvdW5kIiApCisKKyAgICBkZWYgZ2V0X2xhc3RfdGFyZ2V0KHNlbGYpOgorICAgICAgICBidWlsZF9pZCA9IHNlbGYuZ2V0X2xhc3RfYnVpbGRfaWQKKyAgICAgICAgaWYgKC0xID09IGJ1aWxkX2lkKToKKyAgICAgICAgICAgIHJldHVybiggIiIgKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKGJ1aWxkID0gYnVpbGRfaWQpWzBdLnRhcmdldAorICAgICAgICBleGNlcHQgKFRhcmdldC5Eb2VzTm90RXhpc3QsSW5kZXhFcnJvcik6CisgICAgICAgICAgICByZXR1cm4oICJub3RfZm91bmQiICkKKworICAgIGRlZiBnZXRfbGFzdF9lcnJvcnMoc2VsZik6CisgICAgICAgIGJ1aWxkX2lkID0gc2VsZi5nZXRfbGFzdF9idWlsZF9pZAorICAgICAgICBpZiAoLTEgPT0gYnVpbGRfaWQpOgorICAgICAgICAgICAgcmV0dXJuKCAwICkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIEJ1aWxkLm9iamVjdHMuZmlsdGVyKGlkID0gYnVpbGRfaWQpWyAwIF0uZXJyb3JzLmNvdW50KCkKKyAgICAgICAgZXhjZXB0IChCdWlsZC5Eb2VzTm90RXhpc3QsSW5kZXhFcnJvcik6CisgICAgICAgICAgICByZXR1cm4oICJub3RfZm91bmQiICkKKworICAgIGRlZiBnZXRfbGFzdF93YXJuaW5ncyhzZWxmKToKKyAgICAgICAgYnVpbGRfaWQgPSBzZWxmLmdldF9sYXN0X2J1aWxkX2lkCisgICAgICAgIGlmICgtMSA9PSBidWlsZF9pZCk6CisgICAgICAgICAgICByZXR1cm4oIDAgKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gQnVpbGQub2JqZWN0cy5maWx0ZXIoaWQgPSBidWlsZF9pZClbIDAgXS53YXJuaW5ncy5jb3VudCgpCisgICAgICAgIGV4Y2VwdCAoQnVpbGQuRG9lc05vdEV4aXN0LEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcmV0dXJuKCAibm90X2ZvdW5kIiApCisKKyAgICBkZWYgZ2V0X2xhc3RfaW1nZmlsZXMoc2VsZik6CisgICAgICAgIGJ1aWxkX2lkID0gc2VsZi5nZXRfbGFzdF9idWlsZF9pZAorICAgICAgICBpZiAoLTEgPT0gYnVpbGRfaWQpOgorICAgICAgICAgICAgcmV0dXJuKCAiIiApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBWYXJpYWJsZS5vYmplY3RzLmZpbHRlcihidWlsZCA9IGJ1aWxkX2lkLCB2YXJpYWJsZV9uYW1lID0gIklNQUdFX0ZTVFlQRVMiKVsgMCBdLnZhcmlhYmxlX3ZhbHVlCisgICAgICAgIGV4Y2VwdCAoVmFyaWFibGUuRG9lc05vdEV4aXN0LEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcmV0dXJuKCAibm90X2ZvdW5kIiApCisKKyAgICAjIHJldHVybnMgYSBxdWVyeXNldCBvZiBjb21wYXRpYmxlIGxheWVycyBmb3IgYSBwcm9qZWN0CisgICAgZGVmIGNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucyhzZWxmLCByZWxlYXNlID0gTm9uZSwgbGF5ZXJfbmFtZSA9IE5vbmUpOgorICAgICAgICBpZiByZWxlYXNlID09IE5vbmU6CisgICAgICAgICAgICByZWxlYXNlID0gc2VsZi5yZWxlYXNlCisgICAgICAgICMgbGF5ZXJzIG9uIHRoZSBzYW1lIGJyYW5jaCBvciBsYXllcnMgc3BlY2lmaWNhbGx5IHNldCBmb3IgdGhpcyBwcm9qZWN0CisgICAgICAgIHF1ZXJ5c2V0ID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmZpbHRlcigoUSh1cF9icmFuY2hfX25hbWUgPSByZWxlYXNlLmJyYW5jaF9uYW1lKSAmIFEocHJvamVjdCA9IE5vbmUpKSB8IFEocHJvamVjdCA9IHNlbGYpIHwgUShidWlsZF9fcHJvamVjdCA9IHNlbGYpKQorCisgICAgICAgIGlmIGxheWVyX25hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIHdlIHNlbGVjdCBvbmx5IGEgbGF5ZXIgbmFtZQorICAgICAgICAgICAgcXVlcnlzZXQgPSBxdWVyeXNldC5maWx0ZXIobGF5ZXJfX25hbWUgPSBsYXllcl9uYW1lKQorCisgICAgICAgICMgb3JkZXIgYnkgbGF5ZXIgdmVyc2lvbiBwcmlvcml0eQorICAgICAgICBxdWVyeXNldCA9IHF1ZXJ5c2V0LmZpbHRlcihRKGxheWVyX3NvdXJjZT1Ob25lKSB8IFEobGF5ZXJfc291cmNlX19yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eV9fcmVsZWFzZSA9IHJlbGVhc2UpKS5zZWxlY3RfcmVsYXRlZCgnbGF5ZXJfc291cmNlJywgJ2xheWVyJywgJ3VwX2JyYW5jaCcsICJsYXllcl9zb3VyY2VfX3JlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5X19wcmlvcml0eSIpLm9yZGVyX2J5KCItbGF5ZXJfc291cmNlX19yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eV9fcHJpb3JpdHkiKQorCisgICAgICAgIHJldHVybiBxdWVyeXNldAorCisgICAgZGVmIHByb2plY3RsYXllcl9lcXVpdmFsZW50X3NldChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29tcGF0aWJsZV9sYXllcnZlcnNpb25zKCkuZmlsdGVyKGxheWVyX19uYW1lX19pbiA9IFt4LmxheWVyY29tbWl0LmxheWVyLm5hbWUgZm9yIHggaW4gc2VsZi5wcm9qZWN0bGF5ZXJfc2V0LmFsbCgpXSkuc2VsZWN0X3JlbGF0ZWQoInVwX2JyYW5jaCIpCisKKyAgICBkZWYgZ2V0X2F2YWlsYWJsZV9tYWNoaW5lcyhzZWxmKToKKyAgICAgICAgIiIiIFJldHVybnMgUXVlcnlTZXQgb2YgYWxsIE1hY2hpbmVzIHdoaWNoIGFyZSBwcm92aWRlZCBieSB0aGUKKyAgICAgICAgTGF5ZXJzIGN1cnJlbnRseSBhZGRlZCB0byB0aGUgUHJvamVjdCAiIiIKKyAgICAgICAgcXVlcnlzZXQgPSBNYWNoaW5lLm9iamVjdHMuZmlsdGVyKGxheWVyX3ZlcnNpb25fX2luPXNlbGYucHJvamVjdGxheWVyX2VxdWl2YWxlbnRfc2V0KQorICAgICAgICByZXR1cm4gcXVlcnlzZXQKKworICAgIGRlZiBnZXRfYWxsX2NvbXBhdGlibGVfbWFjaGluZXMoc2VsZik6CisgICAgICAgICIiIiBSZXR1cm5zIFF1ZXJ5U2V0IG9mIGFsbCB0aGUgY29tcGF0aWJsZSBtYWNoaW5lcyBhdmFpbGFibGUgdG8gdGhlCisgICAgICAgIHByb2plY3QgaW5jbHVkaW5nIG9uZXMgZnJvbSBMYXllcnMgbm90IGN1cnJlbnRseSBhZGRlZCAiIiIKKyAgICAgICAgY29tcGF0aWJsZV9sYXllcnMgPSBzZWxmLmNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucygpCisKKyAgICAgICAgcXVlcnlzZXQgPSBNYWNoaW5lLm9iamVjdHMuZmlsdGVyKGxheWVyX3ZlcnNpb25fX2luPWNvbXBhdGlibGVfbGF5ZXJzKQorICAgICAgICByZXR1cm4gcXVlcnlzZXQKKworICAgIGRlZiBnZXRfYXZhaWxhYmxlX3JlY2lwZXMoc2VsZik6CisgICAgICAgICIiIiBSZXR1cm5zIFF1ZXJ5U2V0IG9mIGFsbCBSZWNpcGVzIHdoaWNoIGFyZSBwcm92aWRlZCBieSB0aGUgTGF5ZXJzCisgICAgICAgIGN1cnJlbnRseSBhZGRlZCB0byB0aGUgUHJvamVjdCAiIiIKKyAgICAgICAgcHJvamVjdF9sYXllcnMgPSBzZWxmLnByb2plY3RsYXllcl9lcXVpdmFsZW50X3NldCgpCisgICAgICAgIHF1ZXJ5c2V0ID0gUmVjaXBlLm9iamVjdHMuZmlsdGVyKGxheWVyX3ZlcnNpb25fX2luID0gcHJvamVjdF9sYXllcnMpCisKKyAgICAgICAgIyBDb3BpZWQgZnJvbSBnZXRfYWxsX2NvbXBhdGlibGVfcmVjaXBlcworICAgICAgICBzZWFyY2hfbWF4aWRzID0gbWFwKGxhbWJkYSBpOiBpWzBdLCBsaXN0KHF1ZXJ5c2V0LnZhbHVlcygnbmFtZScpLmRpc3RpbmN0KCkuYW5ub3RhdGUobWF4X2lkPU1heCgnaWQnKSkudmFsdWVzX2xpc3QoJ21heF9pZCcpKSkKKyAgICAgICAgcXVlcnlzZXQgPSBxdWVyeXNldC5maWx0ZXIoaWRfX2luPXNlYXJjaF9tYXhpZHMpLnNlbGVjdF9yZWxhdGVkKCdsYXllcl92ZXJzaW9uJywgJ2xheWVyX3ZlcnNpb25fX2xheWVyJywgJ2xheWVyX3ZlcnNpb25fX3VwX2JyYW5jaCcsICdsYXllcl9zb3VyY2UnKQorICAgICAgICAjIEVuZCBjb3B5CisKKyAgICAgICAgcmV0dXJuIHF1ZXJ5c2V0CisKKyAgICBkZWYgZ2V0X2FsbF9jb21wYXRpYmxlX3JlY2lwZXMoc2VsZik6CisgICAgICAgICIiIiBSZXR1cm5zIFF1ZXJ5U2V0IG9mIGFsbCB0aGUgY29tcGF0aWJsZSBSZWNpcGVzIGF2YWlsYWJsZSB0byB0aGUKKyAgICAgICAgcHJvamVjdCBpbmNsdWRpbmcgb25lcyBmcm9tIExheWVycyBub3QgY3VycmVudGx5IGFkZGVkICIiIgorICAgICAgICBjb21wYXRpYmxlX2xheWVydmVyc2lvbnMgPSBzZWxmLmNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucygpCisgICAgICAgIHF1ZXJ5c2V0ID0gUmVjaXBlLm9iamVjdHMuZmlsdGVyKGxheWVyX3ZlcnNpb25fX2luID0gY29tcGF0aWJsZV9sYXllcnZlcnNpb25zKQorCisgICAgICAgIHNlYXJjaF9tYXhpZHMgPSBtYXAobGFtYmRhIGk6IGlbMF0sIGxpc3QocXVlcnlzZXQudmFsdWVzKCduYW1lJykuZGlzdGluY3QoKS5hbm5vdGF0ZShtYXhfaWQ9TWF4KCdpZCcpKS52YWx1ZXNfbGlzdCgnbWF4X2lkJykpKQorCisgICAgICAgIHF1ZXJ5c2V0ID0gcXVlcnlzZXQuZmlsdGVyKGlkX19pbj1zZWFyY2hfbWF4aWRzKS5zZWxlY3RfcmVsYXRlZCgnbGF5ZXJfdmVyc2lvbicsICdsYXllcl92ZXJzaW9uX19sYXllcicsICdsYXllcl92ZXJzaW9uX191cF9icmFuY2gnLCAnbGF5ZXJfc291cmNlJykKKyAgICAgICAgcmV0dXJuIHF1ZXJ5c2V0CisKKworICAgIGRlZiBzY2hlZHVsZV9idWlsZChzZWxmKToKKyAgICAgICAgZnJvbSBibGRjb250cm9sLm1vZGVscyBpbXBvcnQgQnVpbGRSZXF1ZXN0LCBCUlRhcmdldCwgQlJMYXllciwgQlJWYXJpYWJsZSwgQlJCaXRiYWtlCisgICAgICAgIGJyID0gQnVpbGRSZXF1ZXN0Lm9iamVjdHMuY3JlYXRlKHByb2plY3QgPSBzZWxmKQorICAgICAgICB0cnk6CisKKyAgICAgICAgICAgIEJSQml0YmFrZS5vYmplY3RzLmNyZWF0ZShyZXEgPSBiciwKKyAgICAgICAgICAgICAgICBnaXR1cmwgPSBzZWxmLmJpdGJha2VfdmVyc2lvbi5naXR1cmwsCisgICAgICAgICAgICAgICAgY29tbWl0ID0gc2VsZi5iaXRiYWtlX3ZlcnNpb24uYnJhbmNoLAorICAgICAgICAgICAgICAgIGRpcnBhdGggPSBzZWxmLmJpdGJha2VfdmVyc2lvbi5kaXJwYXRoKQorCisgICAgICAgICAgICBmb3IgbCBpbiBzZWxmLnByb2plY3RsYXllcl9zZXQuYWxsKCkub3JkZXJfYnkoInBrIik6CisgICAgICAgICAgICAgICAgY29tbWl0ID0gbC5sYXllcmNvbW1pdC5nZXRfdmNzX3JlZmVyZW5jZSgpCisgICAgICAgICAgICAgICAgcHJpbnQoImlpIEJ1aWxkaW5nIGxheWVyICIsIGwubGF5ZXJjb21taXQubGF5ZXIubmFtZSwgIiBhdCB2Y3MgcG9pbnQgIiwgY29tbWl0KQorICAgICAgICAgICAgICAgIEJSTGF5ZXIub2JqZWN0cy5jcmVhdGUocmVxID0gYnIsIG5hbWUgPSBsLmxheWVyY29tbWl0LmxheWVyLm5hbWUsIGdpdHVybCA9IGwubGF5ZXJjb21taXQubGF5ZXIudmNzX3VybCwgY29tbWl0ID0gY29tbWl0LCBkaXJwYXRoID0gbC5sYXllcmNvbW1pdC5kaXJwYXRoKQorCisgICAgICAgICAgICBici5zdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfUVVFVUVECisgICAgICAgICAgICBub3cgPSB0aW1lem9uZS5ub3coKQorICAgICAgICAgICAgYnIuYnVpbGQgPSBCdWlsZC5vYmplY3RzLmNyZWF0ZShwcm9qZWN0ID0gc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkX29uPW5vdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZF9vbj1ub3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGZvciB0IGluIHNlbGYucHJvamVjdHRhcmdldF9zZXQuYWxsKCk6CisgICAgICAgICAgICAgICAgQlJUYXJnZXQub2JqZWN0cy5jcmVhdGUocmVxID0gYnIsIHRhcmdldCA9IHQudGFyZ2V0LCB0YXNrID0gdC50YXNrKQorICAgICAgICAgICAgICAgIFRhcmdldC5vYmplY3RzLmNyZWF0ZShidWlsZCA9IGJyLmJ1aWxkLCB0YXJnZXQgPSB0LnRhcmdldCkKKworICAgICAgICAgICAgZm9yIHYgaW4gc2VsZi5wcm9qZWN0dmFyaWFibGVfc2V0LmFsbCgpOgorICAgICAgICAgICAgICAgIEJSVmFyaWFibGUub2JqZWN0cy5jcmVhdGUocmVxID0gYnIsIG5hbWUgPSB2Lm5hbWUsIHZhbHVlID0gdi52YWx1ZSkKKworCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYnIuYnVpbGQubWFjaGluZSA9IHNlbGYucHJvamVjdHZhcmlhYmxlX3NldC5nZXQobmFtZSA9ICdNQUNISU5FJykudmFsdWUKKyAgICAgICAgICAgICAgICBici5idWlsZC5zYXZlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGJyLnNhdmUoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgIyByZXZlcnQgdGhlIGJ1aWxkIHJlcXVlc3QgY3JlYXRpb24gc2luY2Ugd2UncmUgbm90IGRvbmUgY2xlYW5seQorICAgICAgICAgICAgYnIuZGVsZXRlKCkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiBicgorCitjbGFzcyBCdWlsZChtb2RlbHMuTW9kZWwpOgorICAgIFNVQ0NFRURFRCA9IDAKKyAgICBGQUlMRUQgPSAxCisgICAgSU5fUFJPR1JFU1MgPSAyCisKKyAgICBCVUlMRF9PVVRDT01FID0gKAorICAgICAgICAoU1VDQ0VFREVELCAnU3VjY2VlZGVkJyksCisgICAgICAgIChGQUlMRUQsICdGYWlsZWQnKSwKKyAgICAgICAgKElOX1BST0dSRVNTLCAnSW4gUHJvZ3Jlc3MnKSwKKyAgICApCisKKyAgICBzZWFyY2hfYWxsb3dlZF9maWVsZHMgPSBbJ21hY2hpbmUnLCAnY29va2VyX2xvZ19wYXRoJywgInRhcmdldF9fdGFyZ2V0IiwgInRhcmdldF9fdGFyZ2V0X2ltYWdlX2ZpbGVfX2ZpbGVfbmFtZSJdCisKKyAgICBwcm9qZWN0ID0gbW9kZWxzLkZvcmVpZ25LZXkoUHJvamVjdCkgICAgICAgICAgICAjIG11c3QgaGF2ZSBhIHByb2plY3QKKyAgICBtYWNoaW5lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICBkaXN0cm8gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwKQorICAgIGRpc3Ryb192ZXJzaW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICBzdGFydGVkX29uID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoKQorICAgIGNvbXBsZXRlZF9vbiA9IG1vZGVscy5EYXRlVGltZUZpZWxkKCkKKyAgICBvdXRjb21lID0gbW9kZWxzLkludGVnZXJGaWVsZChjaG9pY2VzPUJVSUxEX09VVENPTUUsIGRlZmF1bHQ9SU5fUFJPR1JFU1MpCisgICAgY29va2VyX2xvZ19wYXRoID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTUwMCkKKyAgICBidWlsZF9uYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICBiaXRiYWtlX3ZlcnNpb24gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NTApCisKKyAgICBkZWYgY29tcGxldGVwZXIoc2VsZik6CisgICAgICAgIHRmID0gVGFzay5vYmplY3RzLmZpbHRlcihidWlsZCA9IHNlbGYpCisgICAgICAgIHRmYyA9IHRmLmNvdW50KCkKKyAgICAgICAgaWYgdGZjID4gMDoKKyAgICAgICAgICAgIGNvbXBsZXRlcGVyID0gdGYuZXhjbHVkZShvcmRlcl9faXNudWxsPVRydWUpLmNvdW50KCkqMTAwL3RmLmNvdW50KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbXBsZXRlcGVyID0gMAorICAgICAgICByZXR1cm4gY29tcGxldGVwZXIKKworICAgIGRlZiBldGEoc2VsZik6CisgICAgICAgIGV0YSA9IHRpbWV6b25lLm5vdygpCisgICAgICAgIGNvbXBsZXRlcGVyID0gc2VsZi5jb21wbGV0ZXBlcigpCisgICAgICAgIGlmIHNlbGYuY29tcGxldGVwZXIoKSA+IDA6CisgICAgICAgICAgICBldGEgKz0gKChldGEgLSBzZWxmLnN0YXJ0ZWRfb24pKigxMDAtY29tcGxldGVwZXIpKS9jb21wbGV0ZXBlcgorICAgICAgICByZXR1cm4gZXRhCisKKworICAgIGRlZiBnZXRfc29ydGVkX3RhcmdldF9saXN0KHNlbGYpOgorICAgICAgICB0Z3RzID0gVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKGJ1aWxkX2lkID0gc2VsZi5pZCkub3JkZXJfYnkoICd0YXJnZXQnICk7CisgICAgICAgIHJldHVybiggdGd0cyApOworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRvYXN0ZXJfZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubG9nbWVzc2FnZV9zZXQuZmlsdGVyKGxldmVsPUxvZ01lc3NhZ2UuRVhDRVBUSU9OKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGVycm9ycyhzZWxmKToKKyAgICAgICAgcmV0dXJuIChzZWxmLmxvZ21lc3NhZ2Vfc2V0LmZpbHRlcihsZXZlbD1Mb2dNZXNzYWdlLkVSUk9SKXxzZWxmLmxvZ21lc3NhZ2Vfc2V0LmZpbHRlcihsZXZlbD1Mb2dNZXNzYWdlLkVYQ0VQVElPTikpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgd2FybmluZ3Moc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmxvZ21lc3NhZ2Vfc2V0LmZpbHRlcihsZXZlbD1Mb2dNZXNzYWdlLldBUk5JTkcpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdGltZXNwZW50X3NlY29uZHMoc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5jb21wbGV0ZWRfb24gLSBzZWxmLnN0YXJ0ZWRfb24pLnRvdGFsX3NlY29uZHMoKQorCisgICAgZGVmIGdldF9jdXJyZW50X3N0YXR1cyhzZWxmKToKKyAgICAgICAgZnJvbSBibGRjb250cm9sLm1vZGVscyBpbXBvcnQgQnVpbGRSZXF1ZXN0CisgICAgICAgIGlmIHNlbGYub3V0Y29tZSA9PSBCdWlsZC5JTl9QUk9HUkVTUyBhbmQgc2VsZi5idWlsZHJlcXVlc3Quc3RhdGUgIT0gQnVpbGRSZXF1ZXN0LlJFUV9JTlBST0dSRVNTOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnVpbGRyZXF1ZXN0LmdldF9zdGF0ZV9kaXNwbGF5KCkKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X291dGNvbWVfZGlzcGxheSgpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlZCAlcyAlcyIgJSAoc2VsZi5pZCwgc2VsZi5wcm9qZWN0LCAiLCIuam9pbihbdC50YXJnZXQgZm9yIHQgaW4gc2VsZi50YXJnZXRfc2V0LmFsbCgpXSkpCisKKworIyBhbiBBcnRpZmFjdCBpcyBhbnl0aGluZyB0aGF0IHJlc3VsdHMgZnJvbSBhIEJ1aWxkLCBhbmQgbWF5IGJlIG9mIGludGVyZXN0IHRvIHRoZSB1c2VyLCBhbmQgaXMgbm90IHN0b3JlZCBlbHNld2hlcmUKK2NsYXNzIEJ1aWxkQXJ0aWZhY3QobW9kZWxzLk1vZGVsKToKKyAgICBidWlsZCA9IG1vZGVscy5Gb3JlaWduS2V5KEJ1aWxkKQorICAgIGZpbGVfbmFtZSA9IG1vZGVscy5GaWxlUGF0aEZpZWxkKCkKKyAgICBmaWxlX3NpemUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKCkKKworICAgIGRlZiBnZXRfbG9jYWxfZmlsZV9uYW1lKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZXBsb3lkaXIgPSBWYXJpYWJsZS5vYmplY3RzLmdldChidWlsZCA9IHNlbGYuYnVpbGQsIHZhcmlhYmxlX25hbWU9IkRFUExPWV9ESVIiKS52YXJpYWJsZV92YWx1ZQorICAgICAgICAgICAgcmV0dXJuICBzZWxmLmZpbGVfbmFtZVtsZW4oZGVwbG95ZGlyKSsxOl0KKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmFpc2UKKworICAgICAgICByZXR1cm4gc2VsZi5maWxlX25hbWUKKworCisgICAgZGVmIGlzX2F2YWlsYWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYnVpbGQuYnVpbGRyZXF1ZXN0LmVudmlyb25tZW50Lmhhc19hcnRpZmFjdChzZWxmLmZpbGVfbmFtZSkKKworY2xhc3MgUHJvamVjdFRhcmdldChtb2RlbHMuTW9kZWwpOgorICAgIHByb2plY3QgPSBtb2RlbHMuRm9yZWlnbktleShQcm9qZWN0KQorICAgIHRhcmdldCA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDApCisgICAgdGFzayA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDAsIG51bGw9VHJ1ZSkKKworY2xhc3MgVGFyZ2V0KG1vZGVscy5Nb2RlbCk6CisgICAgc2VhcmNoX2FsbG93ZWRfZmllbGRzID0gWyd0YXJnZXQnLCAnZmlsZV9uYW1lJ10KKyAgICBidWlsZCA9IG1vZGVscy5Gb3JlaWduS2V5KEJ1aWxkKQorICAgIHRhcmdldCA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDApCisgICAgdGFzayA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDAsIG51bGw9VHJ1ZSkKKyAgICBpc19pbWFnZSA9IG1vZGVscy5Cb29sZWFuRmllbGQoZGVmYXVsdCA9IEZhbHNlKQorICAgIGltYWdlX3NpemUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGRlZmF1bHQ9MCkKKyAgICBsaWNlbnNlX21hbmlmZXN0X3BhdGggPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NTAwLCBudWxsPVRydWUpCisKKyAgICBkZWYgcGFja2FnZV9jb3VudChzZWxmKToKKyAgICAgICAgcmV0dXJuIFRhcmdldF9JbnN0YWxsZWRfUGFja2FnZS5vYmplY3RzLmZpbHRlcih0YXJnZXRfaWRfX2V4YWN0PXNlbGYuaWQpLmNvdW50KCkKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGFyZ2V0CisKK2NsYXNzIFRhcmdldF9JbWFnZV9GaWxlKG1vZGVscy5Nb2RlbCk6CisgICAgdGFyZ2V0ID0gbW9kZWxzLkZvcmVpZ25LZXkoVGFyZ2V0KQorICAgIGZpbGVfbmFtZSA9IG1vZGVscy5GaWxlUGF0aEZpZWxkKG1heF9sZW5ndGg9MjU0KQorICAgIGZpbGVfc2l6ZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoKQorCitjbGFzcyBUYXJnZXRfRmlsZShtb2RlbHMuTW9kZWwpOgorICAgIElUWVBFX1JFR1VMQVIgPSAxCisgICAgSVRZUEVfRElSRUNUT1JZID0gMgorICAgIElUWVBFX1NZTUxJTksgPSAzCisgICAgSVRZUEVfU09DS0VUID0gNAorICAgIElUWVBFX0ZJRk8gPSA1CisgICAgSVRZUEVfQ0hBUkFDVEVSID0gNgorICAgIElUWVBFX0JMT0NLID0gNworICAgIElUWVBFUyA9ICggKElUWVBFX1JFR1VMQVIgLCdyZWd1bGFyJyksCisgICAgICAgICggSVRZUEVfRElSRUNUT1JZICwnZGlyZWN0b3J5JyksCisgICAgICAgICggSVRZUEVfU1lNTElOSyAsJ3N5bWxpbmsnKSwKKyAgICAgICAgKCBJVFlQRV9TT0NLRVQgLCdzb2NrZXQnKSwKKyAgICAgICAgKCBJVFlQRV9GSUZPICwnZmlmbycpLAorICAgICAgICAoIElUWVBFX0NIQVJBQ1RFUiAsJ2NoYXJhY3RlcicpLAorICAgICAgICAoIElUWVBFX0JMT0NLICwnYmxvY2snKSwKKyAgICAgICAgKQorCisgICAgdGFyZ2V0ID0gbW9kZWxzLkZvcmVpZ25LZXkoVGFyZ2V0KQorICAgIHBhdGggPSBtb2RlbHMuRmlsZVBhdGhGaWVsZCgpCisgICAgc2l6ZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoKQorICAgIGlub2RldHlwZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoY2hvaWNlcyA9IElUWVBFUykKKyAgICBwZXJtaXNzaW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTE2KQorICAgIG93bmVyID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEyOCkKKyAgICBncm91cCA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMjgpCisgICAgZGlyZWN0b3J5ID0gbW9kZWxzLkZvcmVpZ25LZXkoJ1RhcmdldF9GaWxlJywgcmVsYXRlZF9uYW1lPSJkaXJlY3Rvcnlfc2V0IiwgbnVsbD1UcnVlKQorICAgIHN5bV90YXJnZXQgPSBtb2RlbHMuRm9yZWlnbktleSgnVGFyZ2V0X0ZpbGUnLCByZWxhdGVkX25hbWU9InN5bWxpbmtfc2V0IiwgbnVsbD1UcnVlKQorCisKK2NsYXNzIFRhc2sobW9kZWxzLk1vZGVsKToKKworICAgIFNTVEFURV9OQSA9IDAKKyAgICBTU1RBVEVfTUlTUyA9IDEKKyAgICBTU1RBVEVfRkFJTEVEID0gMgorICAgIFNTVEFURV9SRVNUT1JFRCA9IDMKKworICAgIFNTVEFURV9SRVNVTFQgPSAoCisgICAgICAgIChTU1RBVEVfTkEsICdOb3QgQXBwbGljYWJsZScpLCAjIEZvciByZXN0IG9mIHRhc2tzLCBidXQgdGhleSBzdGlsbCBuZWVkIGNoZWNraW5nLgorICAgICAgICAoU1NUQVRFX01JU1MsICdGaWxlIG5vdCBpbiBjYWNoZScpLCAjIHRoZSBzc3RhdGUgb2JqZWN0IHdhcyBub3QgZm91bmQKKyAgICAgICAgKFNTVEFURV9GQUlMRUQsICdGYWlsZWQnKSwgIyB0aGVyZSB3YXMgYSBwa2csIGJ1dCB0aGUgc2NyaXB0IGZhaWxlZAorICAgICAgICAoU1NUQVRFX1JFU1RPUkVELCAnU3VjY2VlZGVkJyksICMgc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkCisgICAgKQorCisgICAgQ09ESU5HX05BID0gMAorICAgIENPRElOR19QWVRIT04gPSAyCisgICAgQ09ESU5HX1NIRUxMID0gMworCisgICAgVEFTS19DT0RJTkcgPSAoCisgICAgICAgIChDT0RJTkdfTkEsICdOL0EnKSwKKyAgICAgICAgKENPRElOR19QWVRIT04sICdQeXRob24nKSwKKyAgICAgICAgKENPRElOR19TSEVMTCwgJ1NoZWxsJyksCisgICAgKQorCisgICAgT1VUQ09NRV9OQSA9IC0xCisgICAgT1VUQ09NRV9TVUNDRVNTID0gMAorICAgIE9VVENPTUVfQ09WRVJFRCA9IDEKKyAgICBPVVRDT01FX0NBQ0hFRCA9IDIKKyAgICBPVVRDT01FX1BSRUJVSUxUID0gMworICAgIE9VVENPTUVfRkFJTEVEID0gNAorICAgIE9VVENPTUVfRU1QVFkgPSA1CisKKyAgICBUQVNLX09VVENPTUUgPSAoCisgICAgICAgIChPVVRDT01FX05BLCAnTm90IEF2YWlsYWJsZScpLAorICAgICAgICAoT1VUQ09NRV9TVUNDRVNTLCAnU3VjY2VlZGVkJyksCisgICAgICAgIChPVVRDT01FX0NPVkVSRUQsICdDb3ZlcmVkJyksCisgICAgICAgIChPVVRDT01FX0NBQ0hFRCwgJ0NhY2hlZCcpLAorICAgICAgICAoT1VUQ09NRV9QUkVCVUlMVCwgJ1ByZWJ1aWx0JyksCisgICAgICAgIChPVVRDT01FX0ZBSUxFRCwgJ0ZhaWxlZCcpLAorICAgICAgICAoT1VUQ09NRV9FTVBUWSwgJ0VtcHR5JyksCisgICAgKQorCisgICAgVEFTS19PVVRDT01FX0hFTFAgPSAoCisgICAgICAgIChPVVRDT01FX1NVQ0NFU1MsICdUaGlzIHRhc2sgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCcpLAorICAgICAgICAoT1VUQ09NRV9DT1ZFUkVELCAnVGhpcyB0YXNrIGRpZCBub3QgcnVuIGJlY2F1c2UgaXRzIG91dHB1dCBpcyBwcm92aWRlZCBieSBhbm90aGVyIHRhc2snKSwKKyAgICAgICAgKE9VVENPTUVfQ0FDSEVELCAnVGhpcyB0YXNrIHJlc3RvcmVkIG91dHB1dCBmcm9tIHRoZSBzc3RhdGUtY2FjaGUgZGlyZWN0b3J5IG9yIG1pcnJvcnMnKSwKKyAgICAgICAgKE9VVENPTUVfUFJFQlVJTFQsICdUaGlzIHRhc2sgZGlkIG5vdCBydW4gYmVjYXVzZSBpdHMgb3V0Y29tZSB3YXMgcmV1c2VkIGZyb20gYSBwcmV2aW91cyBidWlsZCcpLAorICAgICAgICAoT1VUQ09NRV9GQUlMRUQsICdUaGlzIHRhc2sgZGlkIG5vdCBjb21wbGV0ZScpLAorICAgICAgICAoT1VUQ09NRV9FTVBUWSwgJ1RoaXMgdGFzayBoYXMgbm8gZXhlY3V0YWJsZSBjb250ZW50JyksCisgICAgICAgIChPVVRDT01FX05BLCAnJyksCisgICAgKQorCisgICAgc2VhcmNoX2FsbG93ZWRfZmllbGRzID0gWyAicmVjaXBlX19uYW1lIiwgInJlY2lwZV9fdmVyc2lvbiIsICJ0YXNrX25hbWUiLCAibG9nZmlsZSIgXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKFRhc2ssIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5faGVscHRleHQgPSBIZWxwVGV4dC5vYmplY3RzLmdldChrZXk9c2VsZi50YXNrX25hbWUsIGFyZWE9SGVscFRleHQuVkFSSUFCTEUsIGJ1aWxkPXNlbGYuYnVpbGQpLnRleHQKKyAgICAgICAgZXhjZXB0IEhlbHBUZXh0LkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgIHNlbGYuX2hlbHB0ZXh0ID0gTm9uZQorCisgICAgZGVmIGdldF9yZWxhdGVkX3NldHNjZW5lKHNlbGYpOgorICAgICAgICByZXR1cm4gVGFzay5vYmplY3RzLmZpbHRlcih0YXNrX2V4ZWN1dGVkPVRydWUsIGJ1aWxkID0gc2VsZi5idWlsZCwgcmVjaXBlID0gc2VsZi5yZWNpcGUsIHRhc2tfbmFtZT1zZWxmLnRhc2tfbmFtZSsiX3NldHNjZW5lIikKKworICAgIGRlZiBnZXRfb3V0Y29tZV90ZXh0KHNlbGYpOgorICAgICAgICByZXR1cm4gVGFzay5UQVNLX09VVENPTUVbaW50KHNlbGYub3V0Y29tZSkgKyAxXVsxXQorCisgICAgZGVmIGdldF9vdXRjb21lX2hlbHAoc2VsZik6CisgICAgICAgIHJldHVybiBUYXNrLlRBU0tfT1VUQ09NRV9IRUxQW2ludChzZWxmLm91dGNvbWUpXVsxXQorCisgICAgZGVmIGdldF9zc3RhdGVfdGV4dChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zc3RhdGVfcmVzdWx0PT1UYXNrLlNTVEFURV9OQToKKyAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIFRhc2suU1NUQVRFX1JFU1VMVFtpbnQoc2VsZi5zc3RhdGVfcmVzdWx0KV1bMV0KKworICAgIGRlZiBnZXRfZXhlY3V0ZWRfZGlzcGxheShzZWxmKToKKyAgICAgICAgaWYgc2VsZi50YXNrX2V4ZWN1dGVkOgorICAgICAgICAgICAgcmV0dXJuICJFeGVjdXRlZCIKKyAgICAgICAgcmV0dXJuICJOb3QgRXhlY3V0ZWQiCisKKyAgICBkZWYgZ2V0X2Rlc2NyaXB0aW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faGVscHRleHQKKworICAgIGJ1aWxkID0gbW9kZWxzLkZvcmVpZ25LZXkoQnVpbGQsIHJlbGF0ZWRfbmFtZT0ndGFza19idWlsZCcpCisgICAgb3JkZXIgPSBtb2RlbHMuSW50ZWdlckZpZWxkKG51bGw9VHJ1ZSkKKyAgICB0YXNrX2V4ZWN1dGVkID0gbW9kZWxzLkJvb2xlYW5GaWVsZChkZWZhdWx0PUZhbHNlKSAjIFRydWUgbWVhbnMgRXhlY3V0ZWQsIEZhbHNlIG1lYW5zIE5vdC9FeGVjdXRlZAorICAgIG91dGNvbWUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXM9VEFTS19PVVRDT01FLCBkZWZhdWx0PU9VVENPTUVfTkEpCisgICAgc3N0YXRlX2NoZWNrc3VtID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCwgYmxhbms9VHJ1ZSkKKyAgICBwYXRoX3RvX3NzdGF0ZV9vYmogPSBtb2RlbHMuRmlsZVBhdGhGaWVsZChtYXhfbGVuZ3RoPTUwMCwgYmxhbms9VHJ1ZSkKKyAgICByZWNpcGUgPSBtb2RlbHMuRm9yZWlnbktleSgnUmVjaXBlJywgcmVsYXRlZF9uYW1lPSd0YXNrcycpCisgICAgdGFza19uYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICBzb3VyY2VfdXJsID0gbW9kZWxzLkZpbGVQYXRoRmllbGQobWF4X2xlbmd0aD0yNTUsIGJsYW5rPVRydWUpCisgICAgd29ya19kaXJlY3RvcnkgPSBtb2RlbHMuRmlsZVBhdGhGaWVsZChtYXhfbGVuZ3RoPTI1NSwgYmxhbms9VHJ1ZSkKKyAgICBzY3JpcHRfdHlwZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoY2hvaWNlcz1UQVNLX0NPRElORywgZGVmYXVsdD1DT0RJTkdfTkEpCisgICAgbGluZV9udW1iZXIgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGRlZmF1bHQ9MCkKKyAgICBkaXNrX2lvID0gbW9kZWxzLkludGVnZXJGaWVsZChudWxsPVRydWUpCisgICAgY3B1X3VzYWdlID0gbW9kZWxzLkRlY2ltYWxGaWVsZChtYXhfZGlnaXRzPTgsIGRlY2ltYWxfcGxhY2VzPTIsIG51bGw9VHJ1ZSkKKyAgICBlbGFwc2VkX3RpbWUgPSBtb2RlbHMuRGVjaW1hbEZpZWxkKG1heF9kaWdpdHM9OCwgZGVjaW1hbF9wbGFjZXM9MiwgbnVsbD1UcnVlKQorICAgIHNzdGF0ZV9yZXN1bHQgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXM9U1NUQVRFX1JFU1VMVCwgZGVmYXVsdD1TU1RBVEVfTkEpCisgICAgbWVzc2FnZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yNDApCisgICAgbG9nZmlsZSA9IG1vZGVscy5GaWxlUGF0aEZpZWxkKG1heF9sZW5ndGg9MjU1LCBibGFuaz1UcnVlKQorCisgICAgb3V0Y29tZV90ZXh0ID0gcHJvcGVydHkoZ2V0X291dGNvbWVfdGV4dCkKKyAgICBzc3RhdGVfdGV4dCAgPSBwcm9wZXJ0eShnZXRfc3N0YXRlX3RleHQpCisKKyAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJWQoJWQpICVzOiVzIiAlIChzZWxmLnBrLCBzZWxmLmJ1aWxkLnBrLCBzZWxmLnJlY2lwZS5uYW1lLCBzZWxmLnRhc2tfbmFtZSkKKworICAgIGNsYXNzIE1ldGE6CisgICAgICAgIG9yZGVyaW5nID0gKCdvcmRlcicsICdyZWNpcGUnICwpCisgICAgICAgIHVuaXF1ZV90b2dldGhlciA9ICgnYnVpbGQnLCAncmVjaXBlJywgJ3Rhc2tfbmFtZScsICkKKworCitjbGFzcyBUYXNrX0RlcGVuZGVuY3kobW9kZWxzLk1vZGVsKToKKyAgICB0YXNrID0gbW9kZWxzLkZvcmVpZ25LZXkoVGFzaywgcmVsYXRlZF9uYW1lPSd0YXNrX2RlcGVuZGVuY2llc190YXNrJykKKyAgICBkZXBlbmRzX29uID0gbW9kZWxzLkZvcmVpZ25LZXkoVGFzaywgcmVsYXRlZF9uYW1lPSd0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJykKKworY2xhc3MgUGFja2FnZShtb2RlbHMuTW9kZWwpOgorICAgIHNlYXJjaF9hbGxvd2VkX2ZpZWxkcyA9IFsnbmFtZScsICd2ZXJzaW9uJywgJ3JldmlzaW9uJywgJ3JlY2lwZV9fbmFtZScsICdyZWNpcGVfX3ZlcnNpb24nLCAncmVjaXBlX19saWNlbnNlJywgJ3JlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUnLCAncmVjaXBlX19sYXllcl92ZXJzaW9uX19icmFuY2gnLCAncmVjaXBlX19sYXllcl92ZXJzaW9uX19jb21taXQnLCAncmVjaXBlX19sYXllcl92ZXJzaW9uX19sb2NhbF9wYXRoJywgJ2luc3RhbGxlZF9uYW1lJ10KKyAgICBidWlsZCA9IG1vZGVscy5Gb3JlaWduS2V5KCdCdWlsZCcpCisgICAgcmVjaXBlID0gbW9kZWxzLkZvcmVpZ25LZXkoJ1JlY2lwZScsIG51bGw9VHJ1ZSkKKyAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICBpbnN0YWxsZWRfbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDAsIGRlZmF1bHQ9JycpCisgICAgdmVyc2lvbiA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDAsIGJsYW5rPVRydWUpCisgICAgcmV2aXNpb24gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MzIsIGJsYW5rPVRydWUpCisgICAgc3VtbWFyeSA9IG1vZGVscy5UZXh0RmllbGQoYmxhbms9VHJ1ZSkKKyAgICBkZXNjcmlwdGlvbiA9IG1vZGVscy5UZXh0RmllbGQoYmxhbms9VHJ1ZSkKKyAgICBzaXplID0gbW9kZWxzLkludGVnZXJGaWVsZChkZWZhdWx0PTApCisgICAgaW5zdGFsbGVkX3NpemUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGRlZmF1bHQ9MCkKKyAgICBzZWN0aW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTgwLCBibGFuaz1UcnVlKQorICAgIGxpY2Vuc2UgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9ODAsIGJsYW5rPVRydWUpCisKK2NsYXNzIFBhY2thZ2VfRGVwZW5kZW5jeU1hbmFnZXIobW9kZWxzLk1hbmFnZXIpOgorICAgIHVzZV9mb3JfcmVsYXRlZF9maWVsZHMgPSBUcnVlCisKKyAgICBkZWYgZ2V0X3F1ZXJ5X3NldChzZWxmKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKFBhY2thZ2VfRGVwZW5kZW5jeU1hbmFnZXIsIHNlbGYpLmdldF9xdWVyeV9zZXQoKS5leGNsdWRlKHBhY2thZ2VfaWQgPSBGKCdkZXBlbmRzX29uX19pZCcpKQorCitjbGFzcyBQYWNrYWdlX0RlcGVuZGVuY3kobW9kZWxzLk1vZGVsKToKKyAgICBUWVBFX1JERVBFTkRTID0gMAorICAgIFRZUEVfVFJERVBFTkRTID0gMQorICAgIFRZUEVfUlJFQ09NTUVORFMgPSAyCisgICAgVFlQRV9UUkVDT01NRU5EUyA9IDMKKyAgICBUWVBFX1JTVUdHRVNUUyA9IDQKKyAgICBUWVBFX1JQUk9WSURFUyA9IDUKKyAgICBUWVBFX1JSRVBMQUNFUyA9IDYKKyAgICBUWVBFX1JDT05GTElDVFMgPSA3CisgICAgJyBUT0RPOiBicGFja2FnZSBzaG91bGQgYmUgY2hhbmdlZCB0byByZW1vdmUgdGhlIERFUEVORFNfVFlQRSBhY2Nlc3MgJworICAgIERFUEVORFNfVFlQRSA9ICgKKyAgICAgICAgKFRZUEVfUkRFUEVORFMsICJkZXBlbmRzIiksCisgICAgICAgIChUWVBFX1RSREVQRU5EUywgImRlcGVuZHMiKSwKKyAgICAgICAgKFRZUEVfVFJFQ09NTUVORFMsICJyZWNvbW1lbmRzIiksCisgICAgICAgIChUWVBFX1JSRUNPTU1FTkRTLCAicmVjb21tZW5kcyIpLAorICAgICAgICAoVFlQRV9SU1VHR0VTVFMsICJzdWdnZXN0cyIpLAorICAgICAgICAoVFlQRV9SUFJPVklERVMsICJwcm92aWRlcyIpLAorICAgICAgICAoVFlQRV9SUkVQTEFDRVMsICJyZXBsYWNlcyIpLAorICAgICAgICAoVFlQRV9SQ09ORkxJQ1RTLCAiY29uZmxpY3RzIiksCisgICAgKQorICAgICIiIiBJbmRleGVkIGJ5IGRlcF90eXBlLCBpbiB2aWV3IG9yZGVyLCBrZXkgZm9yIHNob3J0IG5hbWUgYW5kIGhlbHAKKyAgICAgICAgZGVzY3JpcHRpb24gd2hpY2ggd2hlbiB2aWV3ZWQgd2lsbCBiZSBwcmludGYnZCB3aXRoIHRoZQorICAgICAgICBwYWNrYWdlIG5hbWUuCisgICAgIiIiCisgICAgREVQRU5EU19ESUNUID0geworICAgICAgICBUWVBFX1JERVBFTkRTIDogICAgICgiZGVwZW5kcyIsICIlcyBpcyByZXF1aXJlZCB0byBydW4gJXMiKSwKKyAgICAgICAgVFlQRV9UUkRFUEVORFMgOiAgICAoImRlcGVuZHMiLCAiJXMgaXMgcmVxdWlyZWQgdG8gcnVuICVzIiksCisgICAgICAgIFRZUEVfVFJFQ09NTUVORFMgOiAgKCJyZWNvbW1lbmRzIiwgIiVzIGV4dGVuZHMgdGhlIHVzYWJpbGl0eSBvZiAlcyIpLAorICAgICAgICBUWVBFX1JSRUNPTU1FTkRTIDogICgicmVjb21tZW5kcyIsICIlcyBleHRlbmRzIHRoZSB1c2FiaWxpdHkgb2YgJXMiKSwKKyAgICAgICAgVFlQRV9SU1VHR0VTVFMgOiAgICAoInN1Z2dlc3RzIiwgIiVzIGlzIHN1Z2dlc3RlZCBmb3IgaW5zdGFsbGF0aW9uIHdpdGggJXMiKSwKKyAgICAgICAgVFlQRV9SUFJPVklERVMgOiAgICAoInByb3ZpZGVzIiwgIiVzIGlzIHByb3ZpZGVkIGJ5ICVzIiksCisgICAgICAgIFRZUEVfUlJFUExBQ0VTIDogICAgKCJyZXBsYWNlcyIsICIlcyBpcyByZXBsYWNlZCBieSAlcyIpLAorICAgICAgICBUWVBFX1JDT05GTElDVFMgOiAgICgiY29uZmxpY3RzIiwgIiVzIGNvbmZsaWN0cyB3aXRoICVzLCB3aGljaCB3aWxsIG5vdCBiZSBpbnN0YWxsZWQgaWYgdGhpcyBwYWNrYWdlIGlzIG5vdCBmaXJzdCByZW1vdmVkIiksCisgICAgfQorCisgICAgcGFja2FnZSA9IG1vZGVscy5Gb3JlaWduS2V5KFBhY2thZ2UsIHJlbGF0ZWRfbmFtZT0ncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJykKKyAgICBkZXBlbmRzX29uID0gbW9kZWxzLkZvcmVpZ25LZXkoUGFja2FnZSwgcmVsYXRlZF9uYW1lPSdwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnKSAgICMgc29mdCBkZXBlbmRlbmN5CisgICAgZGVwX3R5cGUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXM9REVQRU5EU19UWVBFKQorICAgIHRhcmdldCA9IG1vZGVscy5Gb3JlaWduS2V5KFRhcmdldCwgbnVsbD1UcnVlKQorICAgIG9iamVjdHMgPSBQYWNrYWdlX0RlcGVuZGVuY3lNYW5hZ2VyKCkKKworY2xhc3MgVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlKG1vZGVscy5Nb2RlbCk6CisgICAgdGFyZ2V0ID0gbW9kZWxzLkZvcmVpZ25LZXkoVGFyZ2V0KQorICAgIHBhY2thZ2UgPSBtb2RlbHMuRm9yZWlnbktleShQYWNrYWdlLCByZWxhdGVkX25hbWU9J2J1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlJykKKworY2xhc3MgUGFja2FnZV9GaWxlKG1vZGVscy5Nb2RlbCk6CisgICAgcGFja2FnZSA9IG1vZGVscy5Gb3JlaWduS2V5KFBhY2thZ2UsIHJlbGF0ZWRfbmFtZT0nYnVpbGRmaWxlbGlzdF9wYWNrYWdlJykKKyAgICBwYXRoID0gbW9kZWxzLkZpbGVQYXRoRmllbGQobWF4X2xlbmd0aD0yNTUsIGJsYW5rPVRydWUpCisgICAgc2l6ZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoKQorCitjbGFzcyBSZWNpcGUobW9kZWxzLk1vZGVsKToKKyAgICBzZWFyY2hfYWxsb3dlZF9maWVsZHMgPSBbJ25hbWUnLCAndmVyc2lvbicsICdmaWxlX3BhdGgnLCAnc2VjdGlvbicsICdzdW1tYXJ5JywgJ2Rlc2NyaXB0aW9uJywgJ2xpY2Vuc2UnLCAnbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUnLCAnbGF5ZXJfdmVyc2lvbl9fYnJhbmNoJywgJ2xheWVyX3ZlcnNpb25fX2NvbW1pdCcsICdsYXllcl92ZXJzaW9uX19sb2NhbF9wYXRoJywgJ2xheWVyX3ZlcnNpb25fX2xheWVyX3NvdXJjZV9fbmFtZSddCisKKyAgICBsYXllcl9zb3VyY2UgPSBtb2RlbHMuRm9yZWlnbktleSgnTGF5ZXJTb3VyY2UnLCBkZWZhdWx0ID0gTm9uZSwgbnVsbCA9IFRydWUpICAjIGZyb20gd2hlcmUgZGlkIHdlIGdldCB0aGlzIHJlY2lwZQorICAgIHVwX2lkID0gbW9kZWxzLkludGVnZXJGaWVsZChudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpICAgICAgICAgICAgICAgICAgICAjIGlkIG9mIGVudHJ5IGluIHRoZSBzb3VyY2UKKyAgICB1cF9kYXRlID0gbW9kZWxzLkRhdGVUaW1lRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKQorCisgICAgbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDAsIGJsYW5rPVRydWUpICAgICAgICAgICAgICAgICAjIHBuCisgICAgdmVyc2lvbiA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDAsIGJsYW5rPVRydWUpICAgICAgICAgICAgICAjIHB2CisgICAgbGF5ZXJfdmVyc2lvbiA9IG1vZGVscy5Gb3JlaWduS2V5KCdMYXllcl9WZXJzaW9uJywgcmVsYXRlZF9uYW1lPSdyZWNpcGVfbGF5ZXJfdmVyc2lvbicpCisgICAgc3VtbWFyeSA9IG1vZGVscy5UZXh0RmllbGQoYmxhbms9VHJ1ZSkKKyAgICBkZXNjcmlwdGlvbiA9IG1vZGVscy5UZXh0RmllbGQoYmxhbms9VHJ1ZSkKKyAgICBzZWN0aW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCwgYmxhbms9VHJ1ZSkKKyAgICBsaWNlbnNlID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTIwMCwgYmxhbms9VHJ1ZSkKKyAgICBob21lcGFnZSA9IG1vZGVscy5VUkxGaWVsZChibGFuaz1UcnVlKQorICAgIGJ1Z3RyYWNrZXIgPSBtb2RlbHMuVVJMRmllbGQoYmxhbms9VHJ1ZSkKKyAgICBmaWxlX3BhdGggPSBtb2RlbHMuRmlsZVBhdGhGaWVsZChtYXhfbGVuZ3RoPTI1NSkKKyAgICBwYXRoZmxhZ3MgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjAwLCBibGFuaz1UcnVlKQorICAgIGlzX2ltYWdlID0gbW9kZWxzLkJvb2xlYW5GaWVsZChkZWZhdWx0PUZhbHNlKQorCisgICAgZGVmIGdldF9sYXllcnNvdXJjZV92aWV3X3VybChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5sYXllcl9zb3VyY2UgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAiIgorCisgICAgICAgIHVybCA9IHNlbGYubGF5ZXJfc291cmNlLmdldF9vYmplY3RfdmlldyhzZWxmLmxheWVyX3ZlcnNpb24udXBfYnJhbmNoLCAicmVjaXBlcyIsIHNlbGYubmFtZSkKKyAgICAgICAgcmV0dXJuIHVybAorCisgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlJlY2lwZSAiICsgc2VsZi5uYW1lICsgIjoiICsgc2VsZi52ZXJzaW9uCisKKyAgICBkZWYgZ2V0X3Zjc19yZWNpcGVfZmlsZV9saW5rX3VybChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubGF5ZXJfdmVyc2lvbi5nZXRfdmNzX2ZpbGVfbGlua191cmwoc2VsZi5maWxlX3BhdGgpCisKKyAgICBkZWYgZ2V0X2Rlc2NyaXB0aW9uX29yX3N1bW1hcnkoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZGVzY3JpcHRpb246CisgICAgICAgICAgICByZXR1cm4gc2VsZi5kZXNjcmlwdGlvbgorICAgICAgICBlbGlmIHNlbGYuc3VtbWFyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnN1bW1hcnkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiIgorCisgICAgY2xhc3MgTWV0YToKKyAgICAgICAgdW5pcXVlX3RvZ2V0aGVyID0gKCgibGF5ZXJfdmVyc2lvbiIsICJmaWxlX3BhdGgiLCAicGF0aGZsYWdzIiksICkKKworCitjbGFzcyBSZWNpcGVfRGVwZW5kZW5jeU1hbmFnZXIobW9kZWxzLk1hbmFnZXIpOgorICAgIHVzZV9mb3JfcmVsYXRlZF9maWVsZHMgPSBUcnVlCisKKyAgICBkZWYgZ2V0X3F1ZXJ5X3NldChzZWxmKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKFJlY2lwZV9EZXBlbmRlbmN5TWFuYWdlciwgc2VsZikuZ2V0X3F1ZXJ5X3NldCgpLmV4Y2x1ZGUocmVjaXBlX2lkID0gRignZGVwZW5kc19vbl9faWQnKSkKKworY2xhc3MgUmVjaXBlX0RlcGVuZGVuY3kobW9kZWxzLk1vZGVsKToKKyAgICBUWVBFX0RFUEVORFMgPSAwCisgICAgVFlQRV9SREVQRU5EUyA9IDEKKworICAgIERFUEVORFNfVFlQRSA9ICgKKyAgICAgICAgKFRZUEVfREVQRU5EUywgImRlcGVuZHMiKSwKKyAgICAgICAgKFRZUEVfUkRFUEVORFMsICJyZGVwZW5kcyIpLAorICAgICkKKyAgICByZWNpcGUgPSBtb2RlbHMuRm9yZWlnbktleShSZWNpcGUsIHJlbGF0ZWRfbmFtZT0ncl9kZXBlbmRlbmNpZXNfcmVjaXBlJykKKyAgICBkZXBlbmRzX29uID0gbW9kZWxzLkZvcmVpZ25LZXkoUmVjaXBlLCByZWxhdGVkX25hbWU9J3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnKQorICAgIGRlcF90eXBlID0gbW9kZWxzLkludGVnZXJGaWVsZChjaG9pY2VzPURFUEVORFNfVFlQRSkKKyAgICBvYmplY3RzID0gUmVjaXBlX0RlcGVuZGVuY3lNYW5hZ2VyKCkKKworCitjbGFzcyBNYWNoaW5lKG1vZGVscy5Nb2RlbCk6CisgICAgc2VhcmNoX2FsbG93ZWRfZmllbGRzID0gWyJuYW1lIiwgImRlc2NyaXB0aW9uIiwgImxheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lIl0KKyAgICBsYXllcl9zb3VyY2UgPSBtb2RlbHMuRm9yZWlnbktleSgnTGF5ZXJTb3VyY2UnLCBkZWZhdWx0ID0gTm9uZSwgbnVsbCA9IFRydWUpICAjIGZyb20gd2hlcmUgZGlkIHdlIGdldCB0aGlzIG1hY2hpbmUKKyAgICB1cF9pZCA9IG1vZGVscy5JbnRlZ2VyRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgICAgICAgICAgICAgICAgICAgICAjIGlkIG9mIGVudHJ5IGluIHRoZSBzb3VyY2UKKyAgICB1cF9kYXRlID0gbW9kZWxzLkRhdGVUaW1lRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKQorCisgICAgbGF5ZXJfdmVyc2lvbiA9IG1vZGVscy5Gb3JlaWduS2V5KCdMYXllcl9WZXJzaW9uJykKKyAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1NSkKKyAgICBkZXNjcmlwdGlvbiA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yNTUpCisKKyAgICBkZWYgZ2V0X3Zjc19tYWNoaW5lX2ZpbGVfbGlua191cmwoc2VsZik6CisgICAgICAgIHBhdGggPSAnY29uZi9tYWNoaW5lLycrc2VsZi5uYW1lKycuY29uZicKKworICAgICAgICByZXR1cm4gc2VsZi5sYXllcl92ZXJzaW9uLmdldF92Y3NfZmlsZV9saW5rX3VybChwYXRoKQorCisgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIk1hY2hpbmUgIiArIHNlbGYubmFtZSArICIoIiArIHNlbGYuZGVzY3JpcHRpb24gKyAiKSIKKworICAgIGNsYXNzIE1ldGE6CisgICAgICAgIHVuaXF1ZV90b2dldGhlciA9ICgibGF5ZXJfc291cmNlIiwgInVwX2lkIikKKworCitmcm9tIGRqYW5nby5kYi5tb2RlbHMuYmFzZSBpbXBvcnQgTW9kZWxCYXNlCisKK2NsYXNzIEluaGVyaXRhbmNlTWV0YWNsYXNzKE1vZGVsQmFzZSk6CisgICAgZGVmIF9fY2FsbF9fKGNscywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgb2JqID0gc3VwZXIoSW5oZXJpdGFuY2VNZXRhY2xhc3MsIGNscykuX19jYWxsX18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICByZXR1cm4gb2JqLmdldF9vYmplY3QoKQorCisKK2NsYXNzIExheWVyU291cmNlKG1vZGVscy5Nb2RlbCk6CisgICAgX19tZXRhY2xhc3NfXyA9IEluaGVyaXRhbmNlTWV0YWNsYXNzCisKKyAgICBjbGFzcyBNZXRhOgorICAgICAgICB1bmlxdWVfdG9nZXRoZXIgPSAoKCdzb3VyY2V0eXBlJywgJ2FwaXVybCcpLCApCisKKyAgICBUWVBFX0xPQ0FMID0gMAorICAgIFRZUEVfTEFZRVJJTkRFWCA9IDEKKyAgICBUWVBFX0lNUE9SVEVEID0gMgorICAgIFNPVVJDRV9UWVBFID0gKAorICAgICAgICAoVFlQRV9MT0NBTCwgImxvY2FsIiksCisgICAgICAgIChUWVBFX0xBWUVSSU5ERVgsICJsYXllcmluZGV4IiksCisgICAgICAgIChUWVBFX0lNUE9SVEVELCAiaW1wb3J0ZWQiKSwKKyAgICAgICkKKworICAgIG5hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NjMsIHVuaXF1ZSA9IFRydWUpCisgICAgc291cmNldHlwZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoY2hvaWNlcz1TT1VSQ0VfVFlQRSkKKyAgICBhcGl1cmwgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjU1LCBudWxsPVRydWUsIGRlZmF1bHQ9Tm9uZSkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihMYXllclNvdXJjZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBpZiBzZWxmLnNvdXJjZXR5cGUgPT0gTGF5ZXJTb3VyY2UuVFlQRV9MT0NBTDoKKyAgICAgICAgICAgIHNlbGYuX19jbGFzc19fID0gTG9jYWxMYXllclNvdXJjZQorICAgICAgICBlbGlmIHNlbGYuc291cmNldHlwZSA9PSBMYXllclNvdXJjZS5UWVBFX0xBWUVSSU5ERVg6CisgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXyA9IExheWVySW5kZXhMYXllclNvdXJjZQorICAgICAgICBlbGlmIHNlbGYuc291cmNldHlwZSA9PSBMYXllclNvdXJjZS5UWVBFX0lNUE9SVEVEOgorICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18gPSBJbXBvcnRlZExheWVyU291cmNlCisgICAgICAgIGVsaWYgc2VsZi5zb3VyY2V0eXBlID09IE5vbmU6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gTGF5ZXJTb3VyY2UtZGVyaXZlZCBjbGFzcy4gSWYgeW91IGFkZGVkIGEgbmV3IGxheWVyIHNvdXJjZSB0eXBlLCBmaWxsIG91dCBhbGwgY29kZSBzdHVicy4iKQorCisKKyAgICBkZWYgdXBkYXRlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgICAgIFVwZGF0ZXMgdGhlIGxvY2FsIGRhdGFiYXNlIGluZm9ybWF0aW9uIGZyb20gdGhlIHVwc3RyZWFtIGxheWVyIHNvdXJjZQorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJBYnN0cmFjdCwgdXBkYXRlKCkgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBhbGwgTGF5ZXJTb3VyY2UtZGVyaXZlZCBjbGFzc2VzIChvYmplY3QgaXMgJXMpIiAlIHN0cih2YXJzKHNlbGYpKSkKKworICAgIGRlZiBzYXZlKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBzdXBlcihMYXllclNvdXJjZSwgc2VsZikuc2F2ZSgqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgZ2V0X29iamVjdChzZWxmKToKKyAgICAgICAgIyBwcmVzZXQgYW4gdW4taW5pdGlsaXplZCBvYmplY3QKKyAgICAgICAgaWYgTm9uZSA9PSBzZWxmLm5hbWU6CisgICAgICAgICAgICBzZWxmLm5hbWU9IiIKKyAgICAgICAgaWYgTm9uZSA9PSBzZWxmLmFwaXVybDoKKyAgICAgICAgICAgIHNlbGYuYXBpdXJsPSIiCisgICAgICAgIGlmIE5vbmUgPT0gc2VsZi5zb3VyY2V0eXBlOgorICAgICAgICAgICAgc2VsZi5zb3VyY2V0eXBlPUxheWVyU291cmNlLlRZUEVfTE9DQUwKKworICAgICAgICBpZiBzZWxmLnNvdXJjZXR5cGUgPT0gTGF5ZXJTb3VyY2UuVFlQRV9MT0NBTDoKKyAgICAgICAgICAgIHNlbGYuX19jbGFzc19fID0gTG9jYWxMYXllclNvdXJjZQorICAgICAgICBlbGlmIHNlbGYuc291cmNldHlwZSA9PSBMYXllclNvdXJjZS5UWVBFX0xBWUVSSU5ERVg6CisgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXyA9IExheWVySW5kZXhMYXllclNvdXJjZQorICAgICAgICBlbGlmIHNlbGYuc291cmNldHlwZSA9PSBMYXllclNvdXJjZS5UWVBFX0lNUE9SVEVEOgorICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18gPSBJbXBvcnRlZExheWVyU291cmNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gTGF5ZXJTb3VyY2UgdHlwZS4gSWYgeW91IGFkZGVkIGEgbmV3IGxheWVyIHNvdXJjZSB0eXBlLCBmaWxsIG91dCBhbGwgY29kZSBzdHVicy4iKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzICglcykiICUgKHNlbGYubmFtZSwgc2VsZi5zb3VyY2V0eXBlKQorCisKK2NsYXNzIExvY2FsTGF5ZXJTb3VyY2UoTGF5ZXJTb3VyY2UpOgorICAgIGNsYXNzIE1ldGEoTGF5ZXJTb3VyY2UuX21ldGEuX19jbGFzc19fKToKKyAgICAgICAgcHJveHkgPSBUcnVlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoTG9jYWxMYXllclNvdXJjZSwgc2VsZikuX19pbml0X18oYXJncywga3dhcmdzKQorICAgICAgICBzZWxmLnNvdXJjZXR5cGUgPSBMYXllclNvdXJjZS5UWVBFX0xPQ0FMCisKKyAgICBkZWYgdXBkYXRlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgICAgIEZldGNoZXMgbGF5ZXIsIHJlY2lwZSBhbmQgbWFjaGluZSBpbmZvcm1hdGlvbiBmcm9tIGxvY2FsIHJlcG9zaXRvcnkKKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworY2xhc3MgSW1wb3J0ZWRMYXllclNvdXJjZShMYXllclNvdXJjZSk6CisgICAgY2xhc3MgTWV0YShMYXllclNvdXJjZS5fbWV0YS5fX2NsYXNzX18pOgorICAgICAgICBwcm94eSA9IFRydWUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihJbXBvcnRlZExheWVyU291cmNlLCBzZWxmKS5fX2luaXRfXyhhcmdzLCBrd2FyZ3MpCisgICAgICAgIHNlbGYuc291cmNldHlwZSA9IExheWVyU291cmNlLlRZUEVfSU1QT1JURUQKKworICAgIGRlZiB1cGRhdGUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICAgICAgRmV0Y2hlcyBsYXllciwgcmVjaXBlIGFuZCBtYWNoaW5lIGluZm9ybWF0aW9uIGZyb20gbG9jYWwgcmVwb3NpdG9yeQorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisKK2NsYXNzIExheWVySW5kZXhMYXllclNvdXJjZShMYXllclNvdXJjZSk6CisgICAgY2xhc3MgTWV0YShMYXllclNvdXJjZS5fbWV0YS5fX2NsYXNzX18pOgorICAgICAgICBwcm94eSA9IFRydWUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihMYXllckluZGV4TGF5ZXJTb3VyY2UsIHNlbGYpLl9faW5pdF9fKGFyZ3MsIGt3YXJncykKKyAgICAgICAgc2VsZi5zb3VyY2V0eXBlID0gTGF5ZXJTb3VyY2UuVFlQRV9MQVlFUklOREVYCisKKyAgICBkZWYgZ2V0X29iamVjdF92aWV3KHNlbGYsIGJyYW5jaCwgb2JqZWN0eXBlLCB1cGlkKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYXBpdXJsICsgIi4uL2JyYW5jaC8iICsgYnJhbmNoLm5hbWUgKyAiLyIgKyBvYmplY3R5cGUgKyAiLz9xPSIgKyBzdHIodXBpZCkKKworICAgIGRlZiB1cGRhdGUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICAgICAgRmV0Y2hlcyBsYXllciwgcmVjaXBlIGFuZCBtYWNoaW5lIGluZm9ybWF0aW9uIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkKKyAgICAgICAgIiIiCisgICAgICAgIGFzc2VydCBzZWxmLmFwaXVybCBpcyBub3QgTm9uZQorICAgICAgICBmcm9tIGRqYW5nby5kYiBpbXBvcnQgdHJhbnNhY3Rpb24sIGNvbm5lY3Rpb24KKworICAgICAgICBpbXBvcnQgdXJsbGliMiwgdXJscGFyc2UsIGpzb24KKyAgICAgICAgaW1wb3J0IG9zCisgICAgICAgIHByb3h5X3NldHRpbmdzID0gb3MuZW52aXJvbi5nZXQoImh0dHBfcHJveHkiLCBOb25lKQorCisgICAgICAgIGRlZiBfZ2V0X2pzb25fcmVzcG9uc2UoYXBpdXJsID0gc2VsZi5hcGl1cmwpOgorICAgICAgICAgICAgX3BhcnNlZHVybCA9IHVybHBhcnNlLnVybHBhcnNlKGFwaXVybCkKKyAgICAgICAgICAgIHBhdGggPSBfcGFyc2VkdXJsLnBhdGgKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlcyA9IHVybGxpYjIudXJsb3BlbihhcGl1cmwpCisgICAgICAgICAgICBleGNlcHQgdXJsbGliMi5VUkxFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRmFpbGVkIHRvIHJlYWQgJXM6ICVzIiAlIChwYXRoLCBlLnJlYXNvbikpCisKKyAgICAgICAgICAgIHJldHVybiBqc29uLmxvYWRzKHJlcy5yZWFkKCkpCisKKyAgICAgICAgIyB2ZXJpZnkgd2UgY2FuIGdldCB0aGUgYmFzaWMgYXBpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFwaWxpbmtzID0gX2dldF9qc29uX3Jlc3BvbnNlKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICAgICAgaWYgcHJveHlfc2V0dGluZ3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkVFOiBVc2luZyBwcm94eSAlcyIgJSBwcm94eV9zZXR0aW5ncykKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJFRTogY291bGQgbm90IGNvbm5lY3QgdG8gJXMsIHNraXBwaW5nIHVwZGF0ZTogJXNcbiVzIiAlIChzZWxmLmFwaXVybCwgZSwgdHJhY2ViYWNrLmZvcm1hdF9leGMoZSkpKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyB1cGRhdGUgYnJhbmNoZXM7IG9ubHkgdGhvc2UgdGhhdCB3ZSBhbHJlYWR5IGhhdmUgbmFtZXMgbGlzdGVkIGluIHRoZQorICAgICAgICAjIFJlbGVhc2VzIHRhYmxlCisgICAgICAgIHdoaXRlbGlzdF9icmFuY2hfbmFtZXMgPSBtYXAobGFtYmRhIHg6IHguYnJhbmNoX25hbWUsIFJlbGVhc2Uub2JqZWN0cy5hbGwoKSkKKyAgICAgICAgaWYgbGVuKHdoaXRlbGlzdF9icmFuY2hfbmFtZXMpID09IDA6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byBtYWtlIGxpc3Qgb2YgYnJhbmNoZXMgdG8gZmV0Y2giKQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygiRmV0Y2hpbmcgYnJhbmNoZXMiKQorICAgICAgICBicmFuY2hlc19pbmZvID0gX2dldF9qc29uX3Jlc3BvbnNlKGFwaWxpbmtzWydicmFuY2hlcyddCisgICAgICAgICAgICArICI/ZmlsdGVyPW5hbWU6JXMiICUgIk9SIi5qb2luKHdoaXRlbGlzdF9icmFuY2hfbmFtZXMpKQorICAgICAgICBmb3IgYmkgaW4gYnJhbmNoZXNfaW5mbzoKKyAgICAgICAgICAgIGIsIGNyZWF0ZWQgPSBCcmFuY2gub2JqZWN0cy5nZXRfb3JfY3JlYXRlKGxheWVyX3NvdXJjZSA9IHNlbGYsIG5hbWUgPSBiaVsnbmFtZSddKQorICAgICAgICAgICAgYi51cF9pZCA9IGJpWydpZCddCisgICAgICAgICAgICBiLnVwX2RhdGUgPSBiaVsndXBkYXRlZCddCisgICAgICAgICAgICBiLm5hbWUgPSBiaVsnbmFtZSddCisgICAgICAgICAgICBiLnNob3J0X2Rlc2NyaXB0aW9uID0gYmlbJ3Nob3J0X2Rlc2NyaXB0aW9uJ10KKyAgICAgICAgICAgIGIuc2F2ZSgpCisKKyAgICAgICAgIyB1cGRhdGUgbGF5ZXJzCisgICAgICAgIGxheWVyc19pbmZvID0gX2dldF9qc29uX3Jlc3BvbnNlKGFwaWxpbmtzWydsYXllckl0ZW1zJ10pCisgICAgICAgIGlmIG5vdCBjb25uZWN0aW9uLmZlYXR1cmVzLmF1dG9jb21taXRzX3doZW5fYXV0b2NvbW1pdF9pc19vZmY6CisgICAgICAgICAgICB0cmFuc2FjdGlvbi5zZXRfYXV0b2NvbW1pdChGYWxzZSkKKyAgICAgICAgZm9yIGxpIGluIGxheWVyc19pbmZvOgorICAgICAgICAgICAgbCwgY3JlYXRlZCA9IExheWVyLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShsYXllcl9zb3VyY2UgPSBzZWxmLCBuYW1lID0gbGlbJ25hbWUnXSkKKyAgICAgICAgICAgIGwudXBfaWQgPSBsaVsnaWQnXQorICAgICAgICAgICAgbC51cF9kYXRlID0gbGlbJ3VwZGF0ZWQnXQorICAgICAgICAgICAgbC52Y3NfdXJsID0gbGlbJ3Zjc191cmwnXQorICAgICAgICAgICAgbC52Y3Nfd2ViX3VybCA9IGxpWyd2Y3Nfd2ViX3VybCddCisgICAgICAgICAgICBsLnZjc193ZWJfdHJlZV9iYXNlX3VybCA9IGxpWyd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnXQorICAgICAgICAgICAgbC52Y3Nfd2ViX2ZpbGVfYmFzZV91cmwgPSBsaVsndmNzX3dlYl9maWxlX2Jhc2VfdXJsJ10KKyAgICAgICAgICAgIGwuc3VtbWFyeSA9IGxpWydzdW1tYXJ5J10KKyAgICAgICAgICAgIGwuZGVzY3JpcHRpb24gPSBsaVsnZGVzY3JpcHRpb24nXQorICAgICAgICAgICAgbC5zYXZlKCkKKyAgICAgICAgaWYgbm90IGNvbm5lY3Rpb24uZmVhdHVyZXMuYXV0b2NvbW1pdHNfd2hlbl9hdXRvY29tbWl0X2lzX29mZjoKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLnNldF9hdXRvY29tbWl0KFRydWUpCisKKyAgICAgICAgIyB1cGRhdGUgbGF5ZXJicmFuY2hlcy9sYXllcl92ZXJzaW9ucworICAgICAgICBsb2dnZXIuZGVidWcoIkZldGNoaW5nIGxheWVyIGluZm9ybWF0aW9uIikKKyAgICAgICAgbGF5ZXJicmFuY2hlc19pbmZvID0gX2dldF9qc29uX3Jlc3BvbnNlKGFwaWxpbmtzWydsYXllckJyYW5jaGVzJ10KKyAgICAgICAgICAgICAgICArICI/ZmlsdGVyPWJyYW5jaDolcyIgJSAiT1IiLmpvaW4obWFwKGxhbWJkYSB4OiBzdHIoeC51cF9pZCksIFtpIGZvciBpIGluIEJyYW5jaC5vYmplY3RzLmZpbHRlcihsYXllcl9zb3VyY2UgPSBzZWxmKSBpZiBpLnVwX2lkIGlzIG5vdCBOb25lXSApKQorICAgICAgICAgICAgKQorCisgICAgICAgIGlmIG5vdCBjb25uZWN0aW9uLmZlYXR1cmVzLmF1dG9jb21taXRzX3doZW5fYXV0b2NvbW1pdF9pc19vZmY6CisgICAgICAgICAgICB0cmFuc2FjdGlvbi5zZXRfYXV0b2NvbW1pdChGYWxzZSkKKyAgICAgICAgZm9yIGxiaSBpbiBsYXllcmJyYW5jaGVzX2luZm86CisgICAgICAgICAgICBsdiwgY3JlYXRlZCA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXRfb3JfY3JlYXRlKGxheWVyX3NvdXJjZSA9IHNlbGYsCisgICAgICAgICAgICAgICAgICAgIHVwX2lkID0gbGJpWydpZCddLAorICAgICAgICAgICAgICAgICAgICBsYXllcj1MYXllci5vYmplY3RzLmdldChsYXllcl9zb3VyY2UgPSBzZWxmLCB1cF9pZCA9IGxiaVsnbGF5ZXInXSkKKyAgICAgICAgICAgICAgICApCisKKyAgICAgICAgICAgIGx2LnVwX2RhdGUgPSBsYmlbJ3VwZGF0ZWQnXQorICAgICAgICAgICAgbHYudXBfYnJhbmNoID0gQnJhbmNoLm9iamVjdHMuZ2V0KGxheWVyX3NvdXJjZSA9IHNlbGYsIHVwX2lkID0gbGJpWydicmFuY2gnXSkKKyAgICAgICAgICAgIGx2LmJyYW5jaCA9IGxiaVsnYWN0dWFsX2JyYW5jaCddCisgICAgICAgICAgICBsdi5jb21taXQgPSBsYmlbJ2FjdHVhbF9icmFuY2gnXQorICAgICAgICAgICAgbHYuZGlycGF0aCA9IGxiaVsndmNzX3N1YmRpciddCisgICAgICAgICAgICBsdi5zYXZlKCkKKyAgICAgICAgaWYgbm90IGNvbm5lY3Rpb24uZmVhdHVyZXMuYXV0b2NvbW1pdHNfd2hlbl9hdXRvY29tbWl0X2lzX29mZjoKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLnNldF9hdXRvY29tbWl0KFRydWUpCisKKyAgICAgICAgIyB1cGRhdGUgbGF5ZXIgZGVwZW5kZW5jaWVzCisgICAgICAgIGxheWVyZGVwZW5kZW5jaWVzX2luZm8gPSBfZ2V0X2pzb25fcmVzcG9uc2UoYXBpbGlua3NbJ2xheWVyRGVwZW5kZW5jaWVzJ10pCisgICAgICAgIGRlcGVuZGxpc3QgPSB7fQorICAgICAgICBpZiBub3QgY29ubmVjdGlvbi5mZWF0dXJlcy5hdXRvY29tbWl0c193aGVuX2F1dG9jb21taXRfaXNfb2ZmOgorICAgICAgICAgICAgdHJhbnNhY3Rpb24uc2V0X2F1dG9jb21taXQoRmFsc2UpCisgICAgICAgIGZvciBsZGkgaW4gbGF5ZXJkZXBlbmRlbmNpZXNfaW5mbzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsdiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXQobGF5ZXJfc291cmNlID0gc2VsZiwgdXBfaWQgPSBsZGlbJ2xheWVyYnJhbmNoJ10pCisgICAgICAgICAgICBleGNlcHQgTGF5ZXJfVmVyc2lvbi5Eb2VzTm90RXhpc3QgYXMgZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBsdiBub3QgaW4gZGVwZW5kbGlzdDoKKyAgICAgICAgICAgICAgICBkZXBlbmRsaXN0W2x2XSA9IFtdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVwZW5kbGlzdFtsdl0uYXBwZW5kKExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXQobGF5ZXJfc291cmNlID0gc2VsZiwgbGF5ZXJfX3VwX2lkID0gbGRpWydkZXBlbmRlbmN5J10sIHVwX2JyYW5jaCA9IGx2LnVwX2JyYW5jaCkpCisgICAgICAgICAgICBleGNlcHQgTGF5ZXJfVmVyc2lvbi5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIkNhbm5vdCBmaW5kIGxheWVyIHZlcnNpb24gKGxzOiVzKSwgdXBfaWQ6JXMgbHY6JXMiICUgKHNlbGYsIGxkaVsnZGVwZW5kZW5jeSddLCBsdikpCisKKyAgICAgICAgZm9yIGx2IGluIGRlcGVuZGxpc3Q6CisgICAgICAgICAgICBMYXllclZlcnNpb25EZXBlbmRlbmN5Lm9iamVjdHMuZmlsdGVyKGxheWVyX3ZlcnNpb24gPSBsdikuZGVsZXRlKCkKKyAgICAgICAgICAgIGZvciBsdmQgaW4gZGVwZW5kbGlzdFtsdl06CisgICAgICAgICAgICAgICAgTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeS5vYmplY3RzLmdldF9vcl9jcmVhdGUobGF5ZXJfdmVyc2lvbiA9IGx2LCBkZXBlbmRzX29uID0gbHZkKQorICAgICAgICBpZiBub3QgY29ubmVjdGlvbi5mZWF0dXJlcy5hdXRvY29tbWl0c193aGVuX2F1dG9jb21taXRfaXNfb2ZmOgorICAgICAgICAgICAgdHJhbnNhY3Rpb24uc2V0X2F1dG9jb21taXQoVHJ1ZSkKKworCisgICAgICAgICMgdXBkYXRlIG1hY2hpbmVzCisgICAgICAgIGxvZ2dlci5kZWJ1ZygiRmV0Y2hpbmcgbWFjaGluZSBpbmZvcm1hdGlvbiIpCisgICAgICAgIG1hY2hpbmVzX2luZm8gPSBfZ2V0X2pzb25fcmVzcG9uc2UoYXBpbGlua3NbJ21hY2hpbmVzJ10KKyAgICAgICAgICAgICAgICArICI/ZmlsdGVyPWxheWVyYnJhbmNoOiVzIiAlICJPUiIuam9pbihtYXAobGFtYmRhIHg6IHN0cih4LnVwX2lkKSwgTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmZpbHRlcihsYXllcl9zb3VyY2UgPSBzZWxmKSkpCisgICAgICAgICAgICApCisKKyAgICAgICAgaWYgbm90IGNvbm5lY3Rpb24uZmVhdHVyZXMuYXV0b2NvbW1pdHNfd2hlbl9hdXRvY29tbWl0X2lzX29mZjoKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLnNldF9hdXRvY29tbWl0KEZhbHNlKQorICAgICAgICBmb3IgbWkgaW4gbWFjaGluZXNfaW5mbzoKKyAgICAgICAgICAgIG1vLCBjcmVhdGVkID0gTWFjaGluZS5vYmplY3RzLmdldF9vcl9jcmVhdGUobGF5ZXJfc291cmNlID0gc2VsZiwgdXBfaWQgPSBtaVsnaWQnXSwgbGF5ZXJfdmVyc2lvbiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXQobGF5ZXJfc291cmNlID0gc2VsZiwgdXBfaWQgPSBtaVsnbGF5ZXJicmFuY2gnXSkpCisgICAgICAgICAgICBtby51cF9kYXRlID0gbWlbJ3VwZGF0ZWQnXQorICAgICAgICAgICAgbW8ubmFtZSA9IG1pWyduYW1lJ10KKyAgICAgICAgICAgIG1vLmRlc2NyaXB0aW9uID0gbWlbJ2Rlc2NyaXB0aW9uJ10KKyAgICAgICAgICAgIG1vLnNhdmUoKQorCisgICAgICAgIGlmIG5vdCBjb25uZWN0aW9uLmZlYXR1cmVzLmF1dG9jb21taXRzX3doZW5fYXV0b2NvbW1pdF9pc19vZmY6CisgICAgICAgICAgICB0cmFuc2FjdGlvbi5zZXRfYXV0b2NvbW1pdChUcnVlKQorCisgICAgICAgICMgdXBkYXRlIHJlY2lwZXM7IHBhZ2luYXRlIGJ5IGxheWVyIHZlcnNpb24gLyBsYXllciBicmFuY2gKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJGZXRjaGluZyB0YXJnZXQgaW5mb3JtYXRpb24iKQorICAgICAgICByZWNpcGVzX2luZm8gPSBfZ2V0X2pzb25fcmVzcG9uc2UoYXBpbGlua3NbJ3JlY2lwZXMnXQorICAgICAgICAgICAgICAgICsgIj9maWx0ZXI9bGF5ZXJicmFuY2g6JXMiICUgIk9SIi5qb2luKG1hcChsYW1iZGEgeDogc3RyKHgudXBfaWQpLCBMYXllcl9WZXJzaW9uLm9iamVjdHMuZmlsdGVyKGxheWVyX3NvdXJjZSA9IHNlbGYpKSkKKyAgICAgICAgICAgICkKKyAgICAgICAgaWYgbm90IGNvbm5lY3Rpb24uZmVhdHVyZXMuYXV0b2NvbW1pdHNfd2hlbl9hdXRvY29tbWl0X2lzX29mZjoKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLnNldF9hdXRvY29tbWl0KEZhbHNlKQorICAgICAgICBmb3IgcmkgaW4gcmVjaXBlc19pbmZvOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJvLCBjcmVhdGVkID0gUmVjaXBlLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShsYXllcl9zb3VyY2UgPSBzZWxmLCB1cF9pZCA9IHJpWydpZCddLCBsYXllcl92ZXJzaW9uID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldChsYXllcl9zb3VyY2UgPSBzZWxmLCB1cF9pZCA9IHJpWydsYXllcmJyYW5jaCddKSkKKyAgICAgICAgICAgICAgICByby51cF9kYXRlID0gcmlbJ3VwZGF0ZWQnXQorICAgICAgICAgICAgICAgIHJvLm5hbWUgPSByaVsncG4nXQorICAgICAgICAgICAgICAgIHJvLnZlcnNpb24gPSByaVsncHYnXQorICAgICAgICAgICAgICAgIHJvLnN1bW1hcnkgPSByaVsnc3VtbWFyeSddCisgICAgICAgICAgICAgICAgcm8uZGVzY3JpcHRpb24gPSByaVsnZGVzY3JpcHRpb24nXQorICAgICAgICAgICAgICAgIHJvLnNlY3Rpb24gPSByaVsnc2VjdGlvbiddCisgICAgICAgICAgICAgICAgcm8ubGljZW5zZSA9IHJpWydsaWNlbnNlJ10KKyAgICAgICAgICAgICAgICByby5ob21lcGFnZSA9IHJpWydob21lcGFnZSddCisgICAgICAgICAgICAgICAgcm8uYnVndHJhY2tlciA9IHJpWydidWd0cmFja2VyJ10KKyAgICAgICAgICAgICAgICByby5maWxlX3BhdGggPSByaVsnZmlsZXBhdGgnXSArICIvIiArIHJpWydmaWxlbmFtZSddCisgICAgICAgICAgICAgICAgaWYgJ2luaGVyaXRzJyBpbiByaToKKyAgICAgICAgICAgICAgICAgICAgcm8uaXNfaW1hZ2UgPSAnaW1hZ2UnIGluIHJpWydpbmhlcml0cyddLnNwbGl0KCkKKyAgICAgICAgICAgICAgICByby5zYXZlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJbnRlZ3JpdHlFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiRmFpbGVkIHNhdmluZyByZWNpcGUsIGlnbm9yaW5nOiAlcyAoJXM6JXMpIiAlIChlLCByby5sYXllcl92ZXJzaW9uLCByaVsnZmlsZXBhdGgnXSsiLyIrcmlbJ2ZpbGVuYW1lJ10pKQorICAgICAgICBpZiBub3QgY29ubmVjdGlvbi5mZWF0dXJlcy5hdXRvY29tbWl0c193aGVuX2F1dG9jb21taXRfaXNfb2ZmOgorICAgICAgICAgICAgdHJhbnNhY3Rpb24uc2V0X2F1dG9jb21taXQoVHJ1ZSkKKworY2xhc3MgQml0YmFrZVZlcnNpb24obW9kZWxzLk1vZGVsKToKKworICAgIG5hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MzIsIHVuaXF1ZSA9IFRydWUpCisgICAgZ2l0dXJsID0gR2l0VVJMRmllbGQoKQorICAgIGJyYW5jaCA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0zMikKKyAgICBkaXJwYXRoID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1NSkKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcyAoQnJhbmNoOiAlcykiICUgKHNlbGYubmFtZSwgc2VsZi5icmFuY2gpCisKKworY2xhc3MgUmVsZWFzZShtb2RlbHMuTW9kZWwpOgorICAgICIiIiBBIHJlbGVhc2UgaXMgYSBwcm9qZWN0IHRlbXBsYXRlLCB1c2VkIHRvIHByZS1wb3B1bGF0ZSBQcm9qZWN0IHNldHRpbmdzIHdpdGggYSBjb25maWd1cmF0aW9uIHNldCAiIiIKKyAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTMyLCB1bmlxdWUgPSBUcnVlKQorICAgIGRlc2NyaXB0aW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1NSkKKyAgICBiaXRiYWtlX3ZlcnNpb24gPSBtb2RlbHMuRm9yZWlnbktleShCaXRiYWtlVmVyc2lvbikKKyAgICBicmFuY2hfbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD01MCwgZGVmYXVsdCA9ICIiKQorICAgIGhlbHB0ZXh0ID0gbW9kZWxzLlRleHRGaWVsZChudWxsPVRydWUpCisKKyAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJXMgKCVzKSIgJSAoc2VsZi5uYW1lLCBzZWxmLmJyYW5jaF9uYW1lKQorCitjbGFzcyBSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eShtb2RlbHMuTW9kZWwpOgorICAgICIiIiBFYWNoIHJlbGVhc2Ugc2VsZWN0cyBsYXllcnMgZnJvbSB0aGUgc2V0IHVwIGxheWVyIHNvdXJjZXMsIG9yZGVyZWQgYnkgcHJpb3JpdHkgIiIiCisgICAgcmVsZWFzZSA9IG1vZGVscy5Gb3JlaWduS2V5KCJSZWxlYXNlIikKKyAgICBsYXllcl9zb3VyY2UgPSBtb2RlbHMuRm9yZWlnbktleSgiTGF5ZXJTb3VyY2UiKQorICAgIHByaW9yaXR5ID0gbW9kZWxzLkludGVnZXJGaWVsZChkZWZhdWx0ID0gMCkKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcy0lczolZCIgJSAoc2VsZi5yZWxlYXNlLm5hbWUsIHNlbGYubGF5ZXJfc291cmNlLm5hbWUsIHNlbGYucHJpb3JpdHkpCisgICAgY2xhc3MgTWV0YToKKyAgICAgICAgdW5pcXVlX3RvZ2V0aGVyID0gKCgncmVsZWFzZScsICdsYXllcl9zb3VyY2UnKSwpCisKKworY2xhc3MgUmVsZWFzZURlZmF1bHRMYXllcihtb2RlbHMuTW9kZWwpOgorICAgIHJlbGVhc2UgPSBtb2RlbHMuRm9yZWlnbktleShSZWxlYXNlKQorICAgIGxheWVyX25hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwLCBkZWZhdWx0PSIiKQorCisKKyMgQnJhbmNoIGNsYXNzIGlzIHN5bmNlZCB3aXRoIGxheWVyaW5kZXguQnJhbmNoLCBicmFuY2hlcyBjYW4gb25seSBjb21lIGZyb20gcmVtb3RlIGxheWVyIGluZGV4ZXMKK2NsYXNzIEJyYW5jaChtb2RlbHMuTW9kZWwpOgorICAgIGxheWVyX3NvdXJjZSA9IG1vZGVscy5Gb3JlaWduS2V5KCdMYXllclNvdXJjZScsIG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gVHJ1ZSkKKyAgICB1cF9pZCA9IG1vZGVscy5JbnRlZ2VyRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgICAgICAgICAgICAgICAgICAgIyBpZCBvZiBicmFuY2ggaW4gdGhlIHNvdXJjZQorICAgIHVwX2RhdGUgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpCisKKyAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTUwKQorICAgIHNob3J0X2Rlc2NyaXB0aW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTUwLCBibGFuaz1UcnVlKQorCisgICAgY2xhc3MgTWV0YToKKyAgICAgICAgdmVyYm9zZV9uYW1lX3BsdXJhbCA9ICJCcmFuY2hlcyIKKyAgICAgICAgdW5pcXVlX3RvZ2V0aGVyID0gKCgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSwoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpKQorCisgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5uYW1lCisKKworIyBMYXllciBjbGFzcyBzeW5jZWQgd2l0aCBsYXllcmluZGV4LkxheWVySXRlbQorY2xhc3MgTGF5ZXIobW9kZWxzLk1vZGVsKToKKyAgICBsYXllcl9zb3VyY2UgPSBtb2RlbHMuRm9yZWlnbktleShMYXllclNvdXJjZSwgbnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgIyBmcm9tIHdoZXJlIGRpZCB3ZSBnb3QgdGhpcyBsYXllcgorICAgIHVwX2lkID0gbW9kZWxzLkludGVnZXJGaWVsZChudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpICAgICAgICAgICAgICAgICAgICAjIGlkIG9mIGxheWVyIGluIHRoZSByZW1vdGUgc291cmNlCisgICAgdXBfZGF0ZSA9IG1vZGVscy5EYXRlVGltZUZpZWxkKG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkKKworICAgIG5hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwKQorICAgIGxheWVyX2luZGV4X3VybCA9IG1vZGVscy5VUkxGaWVsZCgpCisgICAgdmNzX3VybCA9IEdpdFVSTEZpZWxkKGRlZmF1bHQgPSBOb25lLCBudWxsID0gVHJ1ZSkKKyAgICB2Y3Nfd2ViX3VybCA9IG1vZGVscy5VUkxGaWVsZChudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpCisgICAgdmNzX3dlYl90cmVlX2Jhc2VfdXJsID0gbW9kZWxzLlVSTEZpZWxkKG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkKKyAgICB2Y3Nfd2ViX2ZpbGVfYmFzZV91cmwgPSBtb2RlbHMuVVJMRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKQorCisgICAgc3VtbWFyeSA9IG1vZGVscy5UZXh0RmllbGQoaGVscF90ZXh0PSdPbmUtbGluZSBkZXNjcmlwdGlvbiBvZiB0aGUgbGF5ZXInLCBudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpCisgICAgZGVzY3JpcHRpb24gPSBtb2RlbHMuVGV4dEZpZWxkKG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcyAvICVzICIgJSAoc2VsZi5uYW1lLCBzZWxmLmxheWVyX3NvdXJjZSkKKworICAgIGNsYXNzIE1ldGE6CisgICAgICAgIHVuaXF1ZV90b2dldGhlciA9ICgoImxheWVyX3NvdXJjZSIsICJ1cF9pZCIpLCAoImxheWVyX3NvdXJjZSIsICJuYW1lIikpCisKKworIyBMYXllckNvbW1pdCBjbGFzcyBpcyBzeW5jZWQgd2l0aCBsYXllcmluZGV4LkxheWVyQnJhbmNoCitjbGFzcyBMYXllcl9WZXJzaW9uKG1vZGVscy5Nb2RlbCk6CisgICAgc2VhcmNoX2FsbG93ZWRfZmllbGRzID0gWyJsYXllcl9fbmFtZSIsICJsYXllcl9fc3VtbWFyeSIsICJsYXllcl9fZGVzY3JpcHRpb24iLCAibGF5ZXJfX3Zjc191cmwiLCAiZGlycGF0aCIsICJ1cF9icmFuY2hfX25hbWUiLCAiY29tbWl0IiwgImJyYW5jaCJdCisgICAgYnVpbGQgPSBtb2RlbHMuRm9yZWlnbktleShCdWlsZCwgcmVsYXRlZF9uYW1lPSdsYXllcl92ZXJzaW9uX2J1aWxkJywgZGVmYXVsdCA9IE5vbmUsIG51bGwgPSBUcnVlKQorICAgIGxheWVyID0gbW9kZWxzLkZvcmVpZ25LZXkoTGF5ZXIsIHJlbGF0ZWRfbmFtZT0nbGF5ZXJfdmVyc2lvbl9sYXllcicpCisKKyAgICBsYXllcl9zb3VyY2UgPSBtb2RlbHMuRm9yZWlnbktleShMYXllclNvdXJjZSwgbnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgICAgICAgICAgICAgICAgICAjIGZyb20gd2hlcmUgZGlkIHdlIGdldCB0aGlzIExheWVyIFZlcnNpb24KKyAgICB1cF9pZCA9IG1vZGVscy5JbnRlZ2VyRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgICAgICAgIyBpZCBvZiBsYXllcmJyYW5jaCBpbiB0aGUgcmVtb3RlIHNvdXJjZQorICAgIHVwX2RhdGUgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpCisgICAgdXBfYnJhbmNoID0gbW9kZWxzLkZvcmVpZ25LZXkoQnJhbmNoLCBudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpCisKKyAgICBicmFuY2ggPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9ODApICAgICAgICAgICAgIyBMYXllckJyYW5jaC5hY3R1YWxfYnJhbmNoCisgICAgY29tbWl0ID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkgICAgICAgICAgICMgTGF5ZXJCcmFuY2gudmNzX2xhc3RfcmV2CisgICAgZGlycGF0aCA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yNTUsIG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkgICAgICAgICAgIyBMYXllckJyYW5jaC52Y3Nfc3ViZGlyCisgICAgcHJpb3JpdHkgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGRlZmF1bHQgPSAwKSAgICAgICAgICMgaWYgLTEsIHRoaXMgaXMgYSBkZWZhdWx0IGxheWVyCisKKyAgICBsb2NhbF9wYXRoID0gbW9kZWxzLkZpbGVQYXRoRmllbGQobWF4X2xlbmd0aD0xMDI0LCBkZWZhdWx0ID0gIi8iKSAgIyB3aGVyZSB0aGlzIGxheWVyIHdhcyBjaGVja2VkLW91dAorCisgICAgcHJvamVjdCA9IG1vZGVscy5Gb3JlaWduS2V5KCdQcm9qZWN0JywgbnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgICMgU2V0IGlmIHRoaXMgbGF5ZXIgaXMgcHJvamVjdC1zcGVjaWZpYzsgYWx3YXlzIHNldCBmb3IgaW1wb3J0ZWQgbGF5ZXJzLCBhbmQgcHJvamVjdC1zZXQgYnJhbmNoZXMKKworICAgICMgY29kZSBsaWZ0ZWQsIHdpdGggYWRhcHRhdGlvbnMsIGZyb20gdGhlIGxheWVyaW5kZXgtd2ViIGFwcGxpY2F0aW9uIGh0dHBzOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9sYXllcmluZGV4LXdlYi8KKyAgICBkZWYgX2hhbmRsZV91cmxfcGF0aChzZWxmLCBiYXNlX3VybCwgcGF0aCk6CisgICAgICAgIGltcG9ydCByZSwgcG9zaXhwYXRoCisgICAgICAgIGlmIGJhc2VfdXJsOgorICAgICAgICAgICAgaWYgc2VsZi5kaXJwYXRoOgorICAgICAgICAgICAgICAgIGlmIHBhdGg6CisgICAgICAgICAgICAgICAgICAgIGV4dHJhX3BhdGggPSBzZWxmLmRpcnBhdGggKyAnLycgKyBwYXRoCisgICAgICAgICAgICAgICAgICAgICMgTm9ybWFsaXNlIG91dCAuLi8gaW4gcGF0aCBmb3IgdXNhZ2UgVVJMCisgICAgICAgICAgICAgICAgICAgIGV4dHJhX3BhdGggPSBwb3NpeHBhdGgubm9ybXBhdGgoZXh0cmFfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgIyBNaW5vciB3b3JrYXJvdW5kIHRvIGhhbmRsZSBjYXNlIHdoZXJlIHN1YmRpcmVjdG9yeSBoYXMgYmVlbiBhZGRlZCBiZXR3ZWVuIGJyYW5jaGVzCisgICAgICAgICAgICAgICAgICAgICMgKHNob3VsZCBwcm9iYWJseSBzdXBwb3J0IHVzYWdlIFVSTCBwZXIgYnJhbmNoIHRvIGhhbmRsZSB0aGlzLi4uIHNpZ2guLi4pCisgICAgICAgICAgICAgICAgICAgIGlmIGV4dHJhX3BhdGguc3RhcnRzd2l0aCgnLi4vJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9wYXRoID0gZXh0cmFfcGF0aFszOl0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBleHRyYV9wYXRoID0gc2VsZi5kaXJwYXRoCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGV4dHJhX3BhdGggPSBwYXRoCisgICAgICAgICAgICBicmFuY2huYW1lID0gc2VsZi51cF9icmFuY2gubmFtZQorICAgICAgICAgICAgdXJsID0gYmFzZV91cmwucmVwbGFjZSgnJWJyYW5jaCUnLCBicmFuY2huYW1lKQorCisgICAgICAgICAgICAjIElmIHRoZXJlJ3MgYSAlIGluIHRoZSBwYXRoIChlLmcuIGEgd2lsZGNhcmQgYmJhcHBlbmQpIHdlIG5lZWQgdG8gZW5jb2RlIGl0CisgICAgICAgICAgICBpZiBleHRyYV9wYXRoOgorICAgICAgICAgICAgICAgIGV4dHJhX3BhdGggPSBleHRyYV9wYXRoLnJlcGxhY2UoJyUnLCAnJTI1JykKKworICAgICAgICAgICAgaWYgJyVwYXRoJScgaW4gYmFzZV91cmw6CisgICAgICAgICAgICAgICAgaWYgZXh0cmFfcGF0aDoKKyAgICAgICAgICAgICAgICAgICAgdXJsID0gcmUuc3ViKHInXFsoW15cXV0qJXBhdGglW15cXV0qKVxdJywgJ1xcMScsIHVybCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB1cmwgPSByZS5zdWIocidcWyhbXlxdXSolcGF0aCVbXlxdXSopXF0nLCAnJywgdXJsKQorICAgICAgICAgICAgICAgIHJldHVybiB1cmwucmVwbGFjZSgnJXBhdGglJywgZXh0cmFfcGF0aCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHVybCArIGV4dHJhX3BhdGgKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBnZXRfdmNzX2xpbmtfdXJsKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmxheWVyLnZjc193ZWJfdXJsIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5sYXllci52Y3Nfd2ViX3VybAorCisgICAgZGVmIGdldF92Y3NfZmlsZV9saW5rX3VybChzZWxmLCBmaWxlX3BhdGg9IiIpOgorICAgICAgICBpZiBzZWxmLmxheWVyLnZjc193ZWJfZmlsZV9iYXNlX3VybCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuX2hhbmRsZV91cmxfcGF0aChzZWxmLmxheWVyLnZjc193ZWJfZmlsZV9iYXNlX3VybCwgZmlsZV9wYXRoKQorCisgICAgZGVmIGdldF92Y3NfZGlycGF0aF9saW5rX3VybChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5sYXllci52Y3Nfd2ViX3RyZWVfYmFzZV91cmwgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGVfdXJsX3BhdGgoc2VsZi5sYXllci52Y3Nfd2ViX3RyZWVfYmFzZV91cmwsICcnKQorCisgICAgZGVmIGdldF9lcXVpdmFsZW50c193cHJpb3JpdHkoc2VsZiwgcHJvamVjdCk6CisgICAgICAgIHJldHVybiBwcm9qZWN0LmNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucyhsYXllcl9uYW1lID0gc2VsZi5sYXllci5uYW1lKQorCisgICAgZGVmIGdldF92Y3NfcmVmZXJlbmNlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmNvbW1pdCBpcyBub3QgTm9uZSBhbmQgbGVuKHNlbGYuY29tbWl0KSA+IDA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21taXQKKyAgICAgICAgaWYgc2VsZi5icmFuY2ggaXMgbm90IE5vbmUgYW5kIGxlbihzZWxmLmJyYW5jaCkgPiAwOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnJhbmNoCisgICAgICAgIGlmIHNlbGYudXBfYnJhbmNoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudXBfYnJhbmNoLm5hbWUKKyAgICAgICAgcmV0dXJuICgiQ2Fubm90IGRldGVybWluZSB0aGUgdmNzX3JlZmVyZW5jZSBmb3IgbGF5ZXIgdmVyc2lvbiAlcyIgJSB2YXJzKHNlbGYpKQorCisgICAgZGVmIGdldF9kZXRhaWxzcGFnZV91cmwoc2VsZiwgcHJvamVjdF9pZCk6CisgICAgICAgIHJldHVybiByZXZlcnNlKCdsYXllcmRldGFpbHMnLCBhcmdzPShwcm9qZWN0X2lkLCBzZWxmLnBrKSkKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlZCAlcyAoVkNTICVzLCBQcm9qZWN0ICVzKSIgJSAoc2VsZi5waywgc3RyKHNlbGYubGF5ZXIpLCBzZWxmLmdldF92Y3NfcmVmZXJlbmNlKCksIHNlbGYuYnVpbGQucHJvamVjdCBpZiBzZWxmLmJ1aWxkIGlzIG5vdCBOb25lIGVsc2UgIk5vIHByb2plY3QiKQorCisgICAgY2xhc3MgTWV0YToKKyAgICAgICAgdW5pcXVlX3RvZ2V0aGVyID0gKCJsYXllcl9zb3VyY2UiLCAidXBfaWQiKQorCitjbGFzcyBMYXllclZlcnNpb25EZXBlbmRlbmN5KG1vZGVscy5Nb2RlbCk6CisgICAgbGF5ZXJfc291cmNlID0gbW9kZWxzLkZvcmVpZ25LZXkoTGF5ZXJTb3VyY2UsIG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkgICMgZnJvbSB3aGVyZSBkaWQgd2UgZ290IHRoaXMgbGF5ZXIKKyAgICB1cF9pZCA9IG1vZGVscy5JbnRlZ2VyRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgICAgICAgICAgICAgICAgICAgIyBpZCBvZiBsYXllcmJyYW5jaCBpbiB0aGUgcmVtb3RlIHNvdXJjZQorCisgICAgbGF5ZXJfdmVyc2lvbiA9IG1vZGVscy5Gb3JlaWduS2V5KExheWVyX1ZlcnNpb24sIHJlbGF0ZWRfbmFtZT0iZGVwZW5kZW5jaWVzIikKKyAgICBkZXBlbmRzX29uID0gbW9kZWxzLkZvcmVpZ25LZXkoTGF5ZXJfVmVyc2lvbiwgcmVsYXRlZF9uYW1lPSJkZXBlbmRlZXMiKQorCisgICAgY2xhc3MgTWV0YToKKyAgICAgICAgdW5pcXVlX3RvZ2V0aGVyID0gKCJsYXllcl9zb3VyY2UiLCAidXBfaWQiKQorCitjbGFzcyBQcm9qZWN0TGF5ZXIobW9kZWxzLk1vZGVsKToKKyAgICBwcm9qZWN0ID0gbW9kZWxzLkZvcmVpZ25LZXkoUHJvamVjdCkKKyAgICBsYXllcmNvbW1pdCA9IG1vZGVscy5Gb3JlaWduS2V5KExheWVyX1ZlcnNpb24sIG51bGw9VHJ1ZSkKKyAgICBvcHRpb25hbCA9IG1vZGVscy5Cb29sZWFuRmllbGQoZGVmYXVsdCA9IFRydWUpCisKKyAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJXMsICVzIiAlIChzZWxmLnByb2plY3QubmFtZSwgc2VsZi5sYXllcmNvbW1pdCkKKworICAgIGNsYXNzIE1ldGE6CisgICAgICAgIHVuaXF1ZV90b2dldGhlciA9ICgoInByb2plY3QiLCAibGF5ZXJjb21taXQiKSwpCisKK2NsYXNzIFByb2plY3RWYXJpYWJsZShtb2RlbHMuTW9kZWwpOgorICAgIHByb2plY3QgPSBtb2RlbHMuRm9yZWlnbktleShQcm9qZWN0KQorICAgIG5hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwKQorICAgIHZhbHVlID0gbW9kZWxzLlRleHRGaWVsZChibGFuayA9IFRydWUpCisKK2NsYXNzIFZhcmlhYmxlKG1vZGVscy5Nb2RlbCk6CisgICAgc2VhcmNoX2FsbG93ZWRfZmllbGRzID0gWyd2YXJpYWJsZV9uYW1lJywgJ3ZhcmlhYmxlX3ZhbHVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZoaXN0b3J5X19maWxlX25hbWUnLCAiZGVzY3JpcHRpb24iXQorICAgIGJ1aWxkID0gbW9kZWxzLkZvcmVpZ25LZXkoQnVpbGQsIHJlbGF0ZWRfbmFtZT0ndmFyaWFibGVfYnVpbGQnKQorICAgIHZhcmlhYmxlX25hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwKQorICAgIHZhcmlhYmxlX3ZhbHVlID0gbW9kZWxzLlRleHRGaWVsZChibGFuaz1UcnVlKQorICAgIGNoYW5nZWQgPSBtb2RlbHMuQm9vbGVhbkZpZWxkKGRlZmF1bHQ9RmFsc2UpCisgICAgaHVtYW5fcmVhZGFibGVfbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yMDApCisgICAgZGVzY3JpcHRpb24gPSBtb2RlbHMuVGV4dEZpZWxkKGJsYW5rPVRydWUpCisKK2NsYXNzIFZhcmlhYmxlSGlzdG9yeShtb2RlbHMuTW9kZWwpOgorICAgIHZhcmlhYmxlID0gbW9kZWxzLkZvcmVpZ25LZXkoVmFyaWFibGUsIHJlbGF0ZWRfbmFtZT0ndmhpc3RvcnknKQorICAgIHZhbHVlICAgPSBtb2RlbHMuVGV4dEZpZWxkKGJsYW5rPVRydWUpCisgICAgZmlsZV9uYW1lID0gbW9kZWxzLkZpbGVQYXRoRmllbGQobWF4X2xlbmd0aD0yNTUpCisgICAgbGluZV9udW1iZXIgPSBtb2RlbHMuSW50ZWdlckZpZWxkKG51bGw9VHJ1ZSkKKyAgICBvcGVyYXRpb24gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NjQpCisKK2NsYXNzIEhlbHBUZXh0KG1vZGVscy5Nb2RlbCk6CisgICAgVkFSSUFCTEUgPSAwCisgICAgSEVMUFRFWFRfQVJFQSA9ICgoVkFSSUFCTEUsICd2YXJpYWJsZScpLCApCisKKyAgICBidWlsZCA9IG1vZGVscy5Gb3JlaWduS2V5KEJ1aWxkLCByZWxhdGVkX25hbWU9J2hlbHB0ZXh0X2J1aWxkJykKKyAgICBhcmVhID0gbW9kZWxzLkludGVnZXJGaWVsZChjaG9pY2VzPUhFTFBURVhUX0FSRUEpCisgICAga2V5ID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICB0ZXh0ID0gbW9kZWxzLlRleHRGaWVsZCgpCisKK2NsYXNzIExvZ01lc3NhZ2UobW9kZWxzLk1vZGVsKToKKyAgICBFWENFUFRJT04gPSAtMSAgICAgICMgdXNlZCB0byBzaWduYWwgc2VsZi10b2FzdGVyLWV4Y2VwdGlvbnMKKyAgICBJTkZPID0gMAorICAgIFdBUk5JTkcgPSAxCisgICAgRVJST1IgPSAyCisKKyAgICBMT0dfTEVWRUwgPSAoIChJTkZPLCAiaW5mbyIpLAorICAgICAgICAgICAgKFdBUk5JTkcsICJ3YXJuIiksCisgICAgICAgICAgICAoRVJST1IsICJlcnJvciIpLAorICAgICAgICAgICAgKEVYQ0VQVElPTiwgInRvYXN0ZXIgZXhjZXB0aW9uIikpCisKKyAgICBidWlsZCA9IG1vZGVscy5Gb3JlaWduS2V5KEJ1aWxkKQorICAgIHRhc2sgID0gbW9kZWxzLkZvcmVpZ25LZXkoVGFzaywgYmxhbmsgPSBUcnVlLCBudWxsPVRydWUpCisgICAgbGV2ZWwgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXM9TE9HX0xFVkVMLCBkZWZhdWx0PUlORk8pCisgICAgbWVzc2FnZT1tb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjQwKQorICAgIHBhdGhuYW1lID0gbW9kZWxzLkZpbGVQYXRoRmllbGQobWF4X2xlbmd0aD0yNTUsIGJsYW5rPVRydWUpCisgICAgbGluZW5vID0gbW9kZWxzLkludGVnZXJGaWVsZChudWxsPVRydWUpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcyAlcyAlcyIgJSAoc2VsZi5nZXRfbGV2ZWxfZGlzcGxheSgpLCBzZWxmLm1lc3NhZ2UsIHNlbGYuYnVpbGQpCisKK2RlZiBpbnZhbGlkYXRlX2NhY2hlKCoqa3dhcmdzKToKKyAgICBmcm9tIGRqYW5nby5jb3JlLmNhY2hlIGltcG9ydCBjYWNoZQorICAgIHRyeToKKyAgICAgIGNhY2hlLmNsZWFyKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICBsb2dnZXIud2FybmluZygiUHJvYmxlbSB3aXRoIGNhY2hlIGJhY2tlbmQ6IEZhaWxlZCB0byBjbGVhciBjYWNoZTogJXMiICUgZSkKKworZGphbmdvLmRiLm1vZGVscy5zaWduYWxzLnBvc3Rfc2F2ZS5jb25uZWN0KGludmFsaWRhdGVfY2FjaGUpCitkamFuZ28uZGIubW9kZWxzLnNpZ25hbHMucG9zdF9kZWxldGUuY29ubmVjdChpbnZhbGlkYXRlX2NhY2hlKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS90ZXN0cy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vdGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgzYWVhOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vdGVzdHMucHkKQEAgLTAsMCArMSwxODcgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIiIiVGVzdCBjYXNlcyBmb3IgVG9hc3RlciBPUk0uIiIiCisKK2Zyb20gZGphbmdvLnRlc3QgaW1wb3J0IFRlc3RDYXNlLCBUcmFuc2FjdGlvblRlc3RDYXNlCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IExvY2FsTGF5ZXJTb3VyY2UsIExheWVySW5kZXhMYXllclNvdXJjZSwgSW1wb3J0ZWRMYXllclNvdXJjZSwgTGF5ZXJTb3VyY2UKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgQnJhbmNoCisKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgUHJvamVjdCwgQnVpbGQsIExheWVyLCBMYXllcl9WZXJzaW9uLCBCcmFuY2gsIFByb2plY3RMYXllcgorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBSZWxlYXNlLCBSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eSwgQml0YmFrZVZlcnNpb24KKworZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IHRpbWV6b25lCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgSW50ZWdyaXR5RXJyb3IKKworaW1wb3J0IG9zCisKKyMgc2V0IFRUU19MQVlFUl9JTkRFWCB0byB0aGUgYmFzZSB1cmwgdG8gdXNlIGEgZGlmZmVyZW50IGluc3RhbmNlIG9mIHRoZSBsYXllciBpbmRleAorCitjbGFzcyBMYXllclNvdXJjZVZlcmlmeUluaGVyaXRhbmNlU2F2ZUxvYWQoVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3RzIHRvIHZlcmlmeSBpbmhlcml0YW5jZSBmb3IgdGhlIExheWVyU291cmNlIHByb3h5LWluaGVyaXRhbmNlIGNsYXNzZXMuCisgICAgIiIiCisgICAgZGVmIHRlc3Rfb2JqZWN0X2NyZWF0aW9uKHNlbGYpOgorICAgICAgICAiIiJUZXN0IExheWVyU291cmNlIG9iamVjdCBjcmVhdGlvbi4iIiIKKyAgICAgICAgZm9yIG5hbWUsIHNvdXJjZXR5cGUgaW4gWygiYTEiLCBMYXllclNvdXJjZS5UWVBFX0xPQ0FMKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiYTIiLCBMYXllclNvdXJjZS5UWVBFX0xBWUVSSU5ERVgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJhMyIsIExheWVyU291cmNlLlRZUEVfSU1QT1JURUQpXToKKyAgICAgICAgICAgIExheWVyU291cmNlLm9iamVjdHMuY3JlYXRlKG5hbWU9bmFtZSwgc291cmNldHlwZT1zb3VyY2V0eXBlKQorCisgICAgICAgIG9iamVjdHMgPSBMYXllclNvdXJjZS5vYmplY3RzLmFsbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG9iamVjdHNbMF0sIExvY2FsTGF5ZXJTb3VyY2UpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShvYmplY3RzWzFdLCBMYXllckluZGV4TGF5ZXJTb3VyY2UpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShvYmplY3RzWzJdLCBJbXBvcnRlZExheWVyU291cmNlKSkKKworICAgIGRlZiB0ZXN0X2R1cGxpY2F0ZV9lcnJvcihzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjcmVhdGlvbiBvZiBkdXBsaWNhdGUgTGF5ZXJTb3VyY2Ugb2JqZWN0cy4iIiIKKyAgICAgICAgc3R5cGUgPSBMYXllclNvdXJjZS5UWVBFX0xPQ0FMCisgICAgICAgIExheWVyU291cmNlLm9iamVjdHMuY3JlYXRlKG5hbWU9ImExIiwgc291cmNldHlwZT1zdHlwZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbnRlZ3JpdHlFcnJvcik6CisgICAgICAgICAgICBMYXllclNvdXJjZS5vYmplY3RzLmNyZWF0ZShuYW1lPSJhMSIsIHNvdXJjZXR5cGU9c3R5cGUpCisKKworY2xhc3MgTElMU1VwZGF0ZVRlc3RDYXNlKFRyYW5zYWN0aW9uVGVzdENhc2UpOgorICAgICIiIlRlc3QgTGF5ZXIgU291cmNlIHVwZGF0ZS4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIiIiQ3JlYXRlIHJlbGVhc2UuIiIiCisgICAgICAgIGJidiA9IEJpdGJha2VWZXJzaW9uLm9iamVjdHMuY3JlYXRlKFwKKyAgICAgICAgICAgICAgICAgIG5hbWU9Im1hc3RlciIsIGdpdHVybD0iZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSIpCisgICAgICAgIFJlbGVhc2Uub2JqZWN0cy5jcmVhdGUobmFtZT0iZGVmYXVsdC1yZWxlYXNlIiwgYml0YmFrZV92ZXJzaW9uPWJidiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2hfbmFtZT0ibWFzdGVyIikKKworICAgIGRlZiB0ZXN0X3VwZGF0ZShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgaWYgTGF5ZXJTb3VyY2UudXBkYXRlIGNhbiBmZXRjaCBicmFuY2hlcy4iIiIKKyAgICAgICAgdXJsID0gb3MuZ2V0ZW52KCJUVFNfTEFZRVJfSU5ERVgiLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0iaHR0cDovL2xheWVycy5vcGVuZW1iZWRkZWQub3JnLyIpCisKKyAgICAgICAgbHNvYmogPSBMYXllclNvdXJjZS5vYmplY3RzLmNyZWF0ZShcCisgICAgICAgICAgICAgICAgICAgIG5hbWU9ImIxIiwgc291cmNldHlwZT1MYXllclNvdXJjZS5UWVBFX0xBWUVSSU5ERVgsCisgICAgICAgICAgICAgICAgICAgIGFwaXVybD11cmwgKyAibGF5ZXJpbmRleC9hcGkvIikKKyAgICAgICAgbHNvYmoudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxzb2JqLmJyYW5jaF9zZXQuYWxsKCkuY291bnQoKSA+IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAibm8gYnJhbmNoZXMgZmV0Y2hlZCIpCisKK2NsYXNzIExheWVyVmVyc2lvbkVxdWl2YWxlbmNlVGVzdENhc2UoVGVzdENhc2UpOgorICAgICIiIlZlcmlmeSBMYXllcl9WZXJzaW9uIHByaW9yaXR5IHNlbGVjdGlvbi4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIiIiQ3JlYXRlIHJlcXVpcmVkIG9iamVjdHMuIiIiCisgICAgICAgICMgY3JlYXRlIGxheWVyIHNvdXJjZQorICAgICAgICBzZWxmLmxzcmMgPSBMYXllclNvdXJjZS5vYmplY3RzLmNyZWF0ZShuYW1lPSJkdW1teS1sYXllcnNvdXJjZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXR5cGU9TGF5ZXJTb3VyY2UuVFlQRV9MT0NBTCkKKyAgICAgICAgIyBjcmVhdGUgcmVsZWFzZQorICAgICAgICBiYnYgPSBCaXRiYWtlVmVyc2lvbi5vYmplY3RzLmNyZWF0ZShcCisgICAgICAgICAgICAgICAgICBuYW1lPSJtYXN0ZXIiLCBnaXR1cmw9ImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UiKQorICAgICAgICBzZWxmLnJlbGVhc2UgPSBSZWxlYXNlLm9iamVjdHMuY3JlYXRlKG5hbWU9ImRlZmF1bHQtcmVsZWFzZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0YmFrZV92ZXJzaW9uPWJidiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2hfbmFtZT0ibWFzdGVyIikKKyAgICAgICAgIyBhdHRhY2ggbGF5ZXIgc291cmNlIHRvIHJlbGVhc2UKKyAgICAgICAgUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHkub2JqZWN0cy5jcmVhdGUoXAorICAgICAgICAgICAgcmVsZWFzZT1zZWxmLnJlbGVhc2UsIGxheWVyX3NvdXJjZT1zZWxmLmxzcmMsIHByaW9yaXR5PTEpCisKKyAgICAgICAgIyBjcmVhdGUgYSBsYXllciB2ZXJzaW9uIGZvciB0aGUgbGF5ZXIgb24gdGhlIHNwZWNpZmllZCBicmFuY2gKKyAgICAgICAgc2VsZi5sYXllciA9IExheWVyLm9iamVjdHMuY3JlYXRlKG5hbWU9Im1ldGEtdGVzdGxheWVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyX3NvdXJjZT1zZWxmLmxzcmMpCisgICAgICAgIHNlbGYuYnJhbmNoID0gQnJhbmNoLm9iamVjdHMuY3JlYXRlKG5hbWU9Im1hc3RlciIsIGxheWVyX3NvdXJjZT1zZWxmLmxzcmMpCisgICAgICAgIHNlbGYubHZlciA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5jcmVhdGUoXAorICAgICAgICAgICAgbGF5ZXI9c2VsZi5sYXllciwgbGF5ZXJfc291cmNlPXNlbGYubHNyYywgdXBfYnJhbmNoPXNlbGYuYnJhbmNoKQorCisgICAgICAgICMgY3JlYXRlIHByb2plY3QgYW5kIHByb2plY3QgbGF5ZXIKKyAgICAgICAgc2VsZi5wcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmNyZWF0ZV9wcm9qZWN0KG5hbWU9InRlc3QtcHJvamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlPXNlbGYucmVsZWFzZSkKKyAgICAgICAgUHJvamVjdExheWVyLm9iamVjdHMuY3JlYXRlKHByb2plY3Q9c2VsZi5wcm9qZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJjb21taXQ9c2VsZi5sdmVyKQorCisgICAgICAgICMgY3JlYXRlIHNwb29mIGxheWVyIHRoYXQgc2hvdWxkIG5vdCBhcHBlYXIgaW4gdGhlIHNlYXJjaCByZXN1bHRzCisgICAgICAgIGxheWVyID0gTGF5ZXIub2JqZWN0cy5jcmVhdGUobmFtZT0ibWV0YS1ub3R2YWxpZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJfc291cmNlPXNlbGYubHNyYykKKyAgICAgICAgc2VsZi5sdmVyMiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5jcmVhdGUobGF5ZXI9bGF5ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyX3NvdXJjZT1zZWxmLmxzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwX2JyYW5jaD1zZWxmLmJyYW5jaCkKKworICAgIGRlZiB0ZXN0X3NpbmdsZV9sYXllcnNvdXJjZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZW4gd2UgaGF2ZSBhIHNpbmdsZSBsYXllciB2ZXJzaW9uLAorICAgICAgICBnZXRfZXF1aXZhbGVudHNfd3ByaW9yaXR5KCkgc2hvdWxkIHJldHVybiBhIGxpc3Qgd2l0aAorICAgICAgICBqdXN0IHRoaXMgbGF5ZXJfdmVyc2lvbi4KKyAgICAgICAgIiIiCisgICAgICAgIGVxdWl2cXMgPSBzZWxmLmx2ZXIuZ2V0X2VxdWl2YWxlbnRzX3dwcmlvcml0eShzZWxmLnByb2plY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChlcXVpdnFzKSwgW3NlbGYubHZlcl0pCisKKyAgICBkZWYgdGVzdF9kdWFsX2xheWVyc291cmNlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgSWYgd2UgaGF2ZSB0d28gbGF5ZXJzIHdpdGggdGhlIHNhbWUgbmFtZSwgZnJvbSBkaWZmZXJlbnQgbGF5ZXIgc291cmNlcywKKyAgICAgICAgd2UgZXhwZWN0IGJvdGggbGF5ZXJzIGluLCBpbiBpbmNyZWFzaW5nIHByaW9yaXR5IG9mIHRoZSBsYXllciBzb3VyY2UuCisgICAgICAgICIiIgorICAgICAgICBsc3JjMiA9IExheWVyU291cmNlLm9iamVjdHMuY3JlYXRlKFwKKyAgICAgICAgICAgICAgICAgICAgbmFtZT0iZHVtbXktbGF5ZXJzb3VyY2UyIiwKKyAgICAgICAgICAgICAgICAgICAgc291cmNldHlwZT1MYXllclNvdXJjZS5UWVBFX0xPQ0FMLAorICAgICAgICAgICAgICAgICAgICBhcGl1cmw9InRlc3QiKQorCisgICAgICAgICMgYXNzaWduIGEgbG93ZXIgcHJpb3JpdHkgZm9yIHRoZSBzZWNvbmQgbGF5ZXIgc291cmNlCisgICAgICAgIHNlbGYucmVsZWFzZS5yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eV9zZXQuY3JlYXRlKGxheWVyX3NvdXJjZT1sc3JjMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHk9MikKKworICAgICAgICAjIGNyZWF0ZSBhIG5ldyBsYXllcl92ZXJzaW9uIGZvciBhIGxheWVyIHdpdGggdGhlIHNhbWUgbmFtZQorICAgICAgICAjIGNvbWluZyBmcm9tIHRoZSBzZWNvbmQgbGF5ZXIgc291cmNlCisgICAgICAgIGxheWVyMiA9IExheWVyLm9iamVjdHMuY3JlYXRlKG5hbWU9Im1ldGEtdGVzdGxheWVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJfc291cmNlPWxzcmMyKQorICAgICAgICBsdmVyMiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5jcmVhdGUobGF5ZXI9bGF5ZXIyLCBsYXllcl9zb3VyY2U9bHNyYzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cF9icmFuY2g9c2VsZi5icmFuY2gpCisKKyAgICAgICAgIyBleHBlY3QgdHdvIGxheWVyIHZlcnNpb25zLCBpbiB0aGUgcHJpb3JpdHkgb3JkZXIKKyAgICAgICAgZXF1aXZxcyA9IHNlbGYubHZlci5nZXRfZXF1aXZhbGVudHNfd3ByaW9yaXR5KHNlbGYucHJvamVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGVxdWl2cXMpLCBbbHZlcjIsIHNlbGYubHZlcl0pCisKKyAgICBkZWYgdGVzdF9idWlsZF9sYXllcnZlcnNpb24oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBBbnkgbGF5ZXIgdmVyc2lvbiBjb21pbmcgZnJvbSB0aGUgYnVpbGQgc2hvdWxkIHNob3cgdXAKKyAgICAgICAgYmVmb3JlIGFueSBsYXllciB2ZXJzaW9uIGNvbWluZyBmcm9tIHVwc3RyZWFtCisgICAgICAgICIiIgorICAgICAgICBidWlsZCA9IEJ1aWxkLm9iamVjdHMuY3JlYXRlKHByb2plY3Q9c2VsZi5wcm9qZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWRfb249dGltZXpvbmUubm93KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkX29uPXRpbWV6b25lLm5vdygpKQorICAgICAgICBsdmIgPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuY3JlYXRlKGxheWVyPXNlbGYubGF5ZXIsIGJ1aWxkPWJ1aWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdD0iZGVhZGJlZWYiKQorCisgICAgICAgICMgYSBidWlsZCBsYXllcnZlcnNpb24gbXVzdCBiZSBpbiB0aGUgZXF1aXZhbGVuY2UKKyAgICAgICAgIyBsaXN0IGZvciB0aGUgb3JpZ2luYWwgbGF5ZXJ2ZXJzaW9uCisgICAgICAgIGVxdWl2cXMgPSBzZWxmLmx2ZXIuZ2V0X2VxdWl2YWxlbnRzX3dwcmlvcml0eShzZWxmLnByb2plY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZXF1aXZxcykgPT0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVxdWl2cXNbMF0gPT0gc2VsZi5sdmVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXF1aXZxc1sxXSA9PSBsdmIpCisKKyAgICAgICAgIyBnZXR0aW5nIHRoZSBidWlsZCBsYXllcnZlcnNpb24gZXF1aXZhbGVudCBsaXN0IG11c3QKKyAgICAgICAgIyByZXR1cm4gdGhlIHNhbWUgbGlzdCBhcyB0aGUgb3JpZ2luYWwgbGF5ZXIKKyAgICAgICAgYmVxdWl2cXMgPSBsdmIuZ2V0X2VxdWl2YWxlbnRzX3dwcmlvcml0eShzZWxmLnByb2plY3QpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGVxdWl2cXMpLCBsaXN0KGJlcXVpdnFzKSkKKworICAgIGRlZiB0ZXN0X2NvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZW4gd2UgaGF2ZSBhIDIgbGF5ZXIgdmVyc2lvbnMsIGNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucygpCisgICAgICAgIHNob3VsZCByZXR1cm4gYSBxdWVyeXNldCB3aXRoIGJvdGguCisgICAgICAgICIiIgorICAgICAgICBjb21wYXRfbHYgPSBzZWxmLnByb2plY3QuY29tcGF0aWJsZV9sYXllcnZlcnNpb25zKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvbXBhdF9sdiksIFtzZWxmLmx2ZXIsIHNlbGYubHZlcjJdKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9ib290c3RyYXAtcmVzcG9uc2l2ZS5taW4uY3NzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9ib290c3RyYXAtcmVzcG9uc2l2ZS5taW4uY3NzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA1OTc4NjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2Jvb3RzdHJhcC1yZXNwb25zaXZlLm1pbi5jc3MKQEAgLTAsMCArMSw5IEBACisvKiEKKyAqIEJvb3RzdHJhcCBSZXNwb25zaXZlIHYyLjMuMAorICoKKyAqIENvcHlyaWdodCAyMDEyIFR3aXR0ZXIsIEluYworICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIHYyLjAKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIERlc2lnbmVkIGFuZCBidWlsdCB3aXRoIGFsbCB0aGUgbG92ZSBpbiB0aGUgd29ybGQgQHR3aXR0ZXIgYnkgQG1kbyBhbmQgQGZhdC4KKyAqLy5jbGVhcmZpeHsqem9vbToxfS5jbGVhcmZpeDpiZWZvcmUsLmNsZWFyZml4OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5jbGVhcmZpeDphZnRlcntjbGVhcjpib3RofS5oaWRlLXRleHR7Zm9udDowLzAgYTtjb2xvcjp0cmFuc3BhcmVudDt0ZXh0LXNoYWRvdzpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyOjB9LmlucHV0LWJsb2NrLWxldmVse2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjMwcHg7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fUAtbXMtdmlld3BvcnR7d2lkdGg6ZGV2aWNlLXdpZHRofS5oaWRkZW57ZGlzcGxheTpub25lO3Zpc2liaWxpdHk6aGlkZGVufS52aXNpYmxlLXBob25le2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LnZpc2libGUtdGFibGV0e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmhpZGRlbi1kZXNrdG9we2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LnZpc2libGUtZGVza3RvcHtkaXNwbGF5OmluaGVyaXQhaW1wb3J0YW50fUBtZWRpYShtaW4td2lkdGg6NzY4cHgpIGFuZCAobWF4LXdpZHRoOjk3OXB4KXsuaGlkZGVuLWRlc2t0b3B7ZGlzcGxheTppbmhlcml0IWltcG9ydGFudH0udmlzaWJsZS1kZXNrdG9we2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LnZpc2libGUtdGFibGV0e2Rpc3BsYXk6aW5oZXJpdCFpbXBvcnRhbnR9LmhpZGRlbi10YWJsZXR7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhKG1heC13aWR0aDo3NjdweCl7LmhpZGRlbi1kZXNrdG9we2Rpc3BsYXk6aW5oZXJpdCFpbXBvcnRhbnR9LnZpc2libGUtZGVza3RvcHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS52aXNpYmxlLXBob25le2Rpc3BsYXk6aW5oZXJpdCFpbXBvcnRhbnR9LmhpZGRlbi1waG9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX0udmlzaWJsZS1wcmludHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fUBtZWRpYSBwcmludHsudmlzaWJsZS1wcmludHtkaXNwbGF5OmluaGVyaXQhaW1wb3J0YW50fS5oaWRkZW4tcHJpbnR7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpey5yb3d7bWFyZ2luLWxlZnQ6LTMwcHg7Knpvb206MX0ucm93OmJlZm9yZSwucm93OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5yb3c6YWZ0ZXJ7Y2xlYXI6Ym90aH1bY2xhc3MqPSJzcGFuIl17ZmxvYXQ6bGVmdDttaW4taGVpZ2h0OjFweDttYXJnaW4tbGVmdDozMHB4fS5jb250YWluZXIsLm5hdmJhci1zdGF0aWMtdG9wIC5jb250YWluZXIsLm5hdmJhci1maXhlZC10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZpeGVkLWJvdHRvbSAuY29udGFpbmVye3dpZHRoOjExNzBweH0uc3BhbjEye3dpZHRoOjExNzBweH0uc3BhbjExe3dpZHRoOjEwNzBweH0uc3BhbjEwe3dpZHRoOjk3MHB4fS5zcGFuOXt3aWR0aDo4NzBweH0uc3Bhbjh7d2lkdGg6NzcwcHh9LnNwYW43e3dpZHRoOjY3MHB4fS5zcGFuNnt3aWR0aDo1NzBweH0uc3BhbjV7d2lkdGg6NDcwcHh9LnNwYW40e3dpZHRoOjM3MHB4fS5zcGFuM3t3aWR0aDoyNzBweH0uc3BhbjJ7d2lkdGg6MTcwcHh9LnNwYW4xe3dpZHRoOjcwcHh9Lm9mZnNldDEye21hcmdpbi1sZWZ0OjEyMzBweH0ub2Zmc2V0MTF7bWFyZ2luLWxlZnQ6MTEzMHB4fS5vZmZzZXQxMHttYXJnaW4tbGVmdDoxMDMwcHh9Lm9mZnNldDl7bWFyZ2luLWxlZnQ6OTMwcHh9Lm9mZnNldDh7bWFyZ2luLWxlZnQ6ODMwcHh9Lm9mZnNldDd7bWFyZ2luLWxlZnQ6NzMwcHh9Lm9mZnNldDZ7bWFyZ2luLWxlZnQ6NjMwcHh9Lm9mZnNldDV7bWFyZ2luLWxlZnQ6NTMwcHh9Lm9mZnNldDR7bWFyZ2luLWxlZnQ6NDMwcHh9Lm9mZnNldDN7bWFyZ2luLWxlZnQ6MzMwcHh9Lm9mZnNldDJ7bWFyZ2luLWxlZnQ6MjMwcHh9Lm9mZnNldDF7bWFyZ2luLWxlZnQ6MTMwcHh9LnJvdy1mbHVpZHt3aWR0aDoxMDAlOyp6b29tOjF9LnJvdy1mbHVpZDpiZWZvcmUsLnJvdy1mbHVpZDphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ucm93LWZsdWlkOmFmdGVye2NsZWFyOmJvdGh9LnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl17ZGlzcGxheTpibG9jaztmbG9hdDpsZWZ0O3dpZHRoOjEwMCU7bWluLWhlaWdodDozMHB4O21hcmdpbi1sZWZ0OjIuNTY0MTAyNTY0MTAyNTY0JTsqbWFyZ2luLWxlZnQ6Mi41MTA5MTEwNzQ3NDA4NjE2JTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl06Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MH0ucm93LWZsdWlkIC5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdK1tjbGFzcyo9InNwYW4iXXttYXJnaW4tbGVmdDoyLjU2NDEwMjU2NDEwMjU2NCV9LnJvdy1mbHVpZCAuc3BhbjEye3dpZHRoOjEwMCU7KndpZHRoOjk5Ljk0NjgwODUxMDYzODI5JX0ucm93LWZsdWlkIC5zcGFuMTF7d2lkdGg6OTEuNDUyOTkxNDUyOTkxNDUlOyp3aWR0aDo5MS4zOTk3OTk5NjM2Mjk3NSV9LnJvdy1mbHVpZCAuc3BhbjEwe3dpZHRoOjgyLjkwNTk4MjkwNTk4MjkxJTsqd2lkdGg6ODIuODUyNzkxNDE2NjIxMiV9LnJvdy1mbHVpZCAuc3Bhbjl7d2lkdGg6NzQuMzU4OTc0MzU4OTc0MzYlOyp3aWR0aDo3NC4zMDU3ODI4Njk2MTI2NiV9LnJvdy1mbHVpZCAuc3Bhbjh7d2lkdGg6NjUuODExOTY1ODExOTY1ODIlOyp3aWR0aDo2NS43NTg3NzQzMjI2MDQxMSV9LnJvdy1mbHVpZCAuc3Bhbjd7d2lkdGg6NTcuMjY0OTU3MjY0OTU3MjYlOyp3aWR0aDo1Ny4yMTE3NjU3NzU1OTU1NiV9LnJvdy1mbHVpZCAuc3BhbjZ7d2lkdGg6NDguNzE3OTQ4NzE3OTQ4NzE1JTsqd2lkdGg6NDguNjY0NzU3MjI4NTg3MDE0JX0ucm93LWZsdWlkIC5zcGFuNXt3aWR0aDo0MC4xNzA5NDAxNzA5NDAxNyU7KndpZHRoOjQwLjExNzc0ODY4MTU3ODQ3JX0ucm93LWZsdWlkIC5zcGFuNHt3aWR0aDozMS42MjM5MzE2MjM5MzE2MjUlOyp3aWR0aDozMS41NzA3NDAxMzQ1Njk5MjQlfS5yb3ctZmx1aWQgLnNwYW4ze3dpZHRoOjIzLjA3NjkyMzA3NjkyMzA3NyU7KndpZHRoOjIzLjAyMzczMTU4NzU2MTM3NSV9LnJvdy1mbHVpZCAuc3BhbjJ7d2lkdGg6MTQuNTI5OTE0NTI5OTE0NTMlOyp3aWR0aDoxNC40NzY3MjMwNDA1NTI4MjglfS5yb3ctZmx1aWQgLnNwYW4xe3dpZHRoOjUuOTgyOTA1OTgyOTA1OTgzJTsqd2lkdGg6NS45Mjk3MTQ0OTM1NDQyODElfS5yb3ctZmx1aWQgLm9mZnNldDEye21hcmdpbi1sZWZ0OjEwNS4xMjgyMDUxMjgyMDUxMiU7Km1hcmdpbi1sZWZ0OjEwNS4wMjE4MjIxNDk0ODE3MSV9LnJvdy1mbHVpZCAub2Zmc2V0MTI6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MTAyLjU2NDEwMjU2NDEwMjU3JTsqbWFyZ2luLWxlZnQ6MTAyLjQ1NzcxOTU4NTM3OTE1JX0ucm93LWZsdWlkIC5vZmZzZXQxMXttYXJnaW4tbGVmdDo5Ni41ODExOTY1ODExOTY1OCU7Km1hcmdpbi1sZWZ0Ojk2LjQ3NDgxMzYwMjQ3MzE2JX0ucm93LWZsdWlkIC5vZmZzZXQxMTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo5NC4wMTcwOTQwMTcwOTQwMiU7Km1hcmdpbi1sZWZ0OjkzLjkxMDcxMTAzODM3MDYxJX0ucm93LWZsdWlkIC5vZmZzZXQxMHttYXJnaW4tbGVmdDo4OC4wMzQxODgwMzQxODgwMyU7Km1hcmdpbi1sZWZ0Ojg3LjkyNzgwNTA1NTQ2NDYyJX0ucm93LWZsdWlkIC5vZmZzZXQxMDpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo4NS40NzAwODU0NzAwODU0OCU7Km1hcmdpbi1sZWZ0Ojg1LjM2MzcwMjQ5MTM2MjA2JX0ucm93LWZsdWlkIC5vZmZzZXQ5e21hcmdpbi1sZWZ0Ojc5LjQ4NzE3OTQ4NzE3OTQ5JTsqbWFyZ2luLWxlZnQ6NzkuMzgwNzk2NTA4NDU2MDclfS5yb3ctZmx1aWQgLm9mZnNldDk6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NzYuOTIzMDc2OTIzMDc2OTMlOyptYXJnaW4tbGVmdDo3Ni44MTY2OTM5NDQzNTM1MiV9LnJvdy1mbHVpZCAub2Zmc2V0OHttYXJnaW4tbGVmdDo3MC45NDAxNzA5NDAxNzA5NCU7Km1hcmdpbi1sZWZ0OjcwLjgzMzc4Nzk2MTQ0NzUzJX0ucm93LWZsdWlkIC5vZmZzZXQ4OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjY4LjM3NjA2ODM3NjA2ODM5JTsqbWFyZ2luLWxlZnQ6NjguMjY5Njg1Mzk3MzQ0OTclfS5yb3ctZmx1aWQgLm9mZnNldDd7bWFyZ2luLWxlZnQ6NjIuMzkzMTYyMzkzMTYyMzg1JTsqbWFyZ2luLWxlZnQ6NjIuMjg2Nzc5NDE0NDM4OTklfS5yb3ctZmx1aWQgLm9mZnNldDc6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NTkuODI5MDU5ODI5MDU5ODIlOyptYXJnaW4tbGVmdDo1OS43MjI2NzY4NTAzMzY0MiV9LnJvdy1mbHVpZCAub2Zmc2V0NnttYXJnaW4tbGVmdDo1My44NDYxNTM4NDYxNTM4NCU7Km1hcmdpbi1sZWZ0OjUzLjczOTc3MDg2NzQzMDQ0NCV9LnJvdy1mbHVpZCAub2Zmc2V0NjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo1MS4yODIwNTEyODIwNTEyOCU7Km1hcmdpbi1sZWZ0OjUxLjE3NTY2ODMwMzMyNzg3NSV9LnJvdy1mbHVpZCAub2Zmc2V0NXttYXJnaW4tbGVmdDo0NS4yOTkxNDUyOTkxNDUyOTUlOyptYXJnaW4tbGVmdDo0NS4xOTI3NjIzMjA0MjE5JX0ucm93LWZsdWlkIC5vZmZzZXQ1OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjQyLjczNTA0MjczNTA0MjczJTsqbWFyZ2luLWxlZnQ6NDIuNjI4NjU5NzU2MzE5MzMlfS5yb3ctZmx1aWQgLm9mZnNldDR7bWFyZ2luLWxlZnQ6MzYuNzUyMTM2NzUyMTM2NzUlOyptYXJnaW4tbGVmdDozNi42NDU3NTM3NzM0MTMzNTQlfS5yb3ctZmx1aWQgLm9mZnNldDQ6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MzQuMTg4MDM0MTg4MDM0MTklOyptYXJnaW4tbGVmdDozNC4wODE2NTEyMDkzMTA3ODUlfS5yb3ctZmx1aWQgLm9mZnNldDN7bWFyZ2luLWxlZnQ6MjguMjA1MTI4MjA1MTI4MjA0JTsqbWFyZ2luLWxlZnQ6MjguMDk4NzQ1MjI2NDA0OCV9LnJvdy1mbHVpZCAub2Zmc2V0MzpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDoyNS42NDEwMjU2NDEwMjU2NDIlOyptYXJnaW4tbGVmdDoyNS41MzQ2NDI2NjIzMDIyNCV9LnJvdy1mbHVpZCAub2Zmc2V0MnttYXJnaW4tbGVmdDoxOS42NTgxMTk2NTgxMTk2NiU7Km1hcmdpbi1sZWZ0OjE5LjU1MTczNjY3OTM5NjI1NyV9LnJvdy1mbHVpZCAub2Zmc2V0MjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDoxNy4wOTQwMTcwOTQwMTcwOTQlOyptYXJnaW4tbGVmdDoxNi45ODc2MzQxMTUyOTM2OSV9LnJvdy1mbHVpZCAub2Zmc2V0MXttYXJnaW4tbGVmdDoxMS4xMTExMTExMTExMTExMSU7Km1hcmdpbi1sZWZ0OjExLjAwNDcyODEzMjM4NzcwOCV9LnJvdy1mbHVpZCAub2Zmc2V0MTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo4LjU0NzAwODU0NzAwODU0NyU7Km1hcmdpbi1sZWZ0OjguNDQwNjI1NTY4Mjg1MTQyJX1pbnB1dCx0ZXh0YXJlYSwudW5lZGl0YWJsZS1pbnB1dHttYXJnaW4tbGVmdDowfS5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdK1tjbGFzcyo9InNwYW4iXXttYXJnaW4tbGVmdDozMHB4fWlucHV0LnNwYW4xMix0ZXh0YXJlYS5zcGFuMTIsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEye3dpZHRoOjExNTZweH1pbnB1dC5zcGFuMTEsdGV4dGFyZWEuc3BhbjExLC51bmVkaXRhYmxlLWlucHV0LnNwYW4xMXt3aWR0aDoxMDU2cHh9aW5wdXQuc3BhbjEwLHRleHRhcmVhLnNwYW4xMCwudW5lZGl0YWJsZS1pbnB1dC5zcGFuMTB7d2lkdGg6OTU2cHh9aW5wdXQuc3BhbjksdGV4dGFyZWEuc3BhbjksLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjl7d2lkdGg6ODU2cHh9aW5wdXQuc3BhbjgsdGV4dGFyZWEuc3BhbjgsLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjh7d2lkdGg6NzU2cHh9aW5wdXQuc3BhbjcsdGV4dGFyZWEuc3BhbjcsLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjd7d2lkdGg6NjU2cHh9aW5wdXQuc3BhbjYsdGV4dGFyZWEuc3BhbjYsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjZ7d2lkdGg6NTU2cHh9aW5wdXQuc3BhbjUsdGV4dGFyZWEuc3BhbjUsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjV7d2lkdGg6NDU2cHh9aW5wdXQuc3BhbjQsdGV4dGFyZWEuc3BhbjQsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjR7d2lkdGg6MzU2cHh9aW5wdXQuc3BhbjMsdGV4dGFyZWEuc3BhbjMsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjN7d2lkdGg6MjU2cHh9aW5wdXQuc3BhbjIsdGV4dGFyZWEuc3BhbjIsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjJ7d2lkdGg6MTU2cHh9aW5wdXQuc3BhbjEsdGV4dGFyZWEuc3BhbjEsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjF7d2lkdGg6NTZweH0udGh1bWJuYWlsc3ttYXJnaW4tbGVmdDotMzBweH0udGh1bWJuYWlscz5saXttYXJnaW4tbGVmdDozMHB4fS5yb3ctZmx1aWQgLnRodW1ibmFpbHN7bWFyZ2luLWxlZnQ6MH19QG1lZGlhKG1pbi13aWR0aDo3NjhweCkgYW5kIChtYXgtd2lkdGg6OTc5cHgpey5yb3d7bWFyZ2luLWxlZnQ6LTIwcHg7Knpvb206MX0ucm93OmJlZm9yZSwucm93OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5yb3c6YWZ0ZXJ7Y2xlYXI6Ym90aH1bY2xhc3MqPSJzcGFuIl17ZmxvYXQ6bGVmdDttaW4taGVpZ2h0OjFweDttYXJnaW4tbGVmdDoyMHB4fS5jb250YWluZXIsLm5hdmJhci1zdGF0aWMtdG9wIC5jb250YWluZXIsLm5hdmJhci1maXhlZC10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZpeGVkLWJvdHRvbSAuY29udGFpbmVye3dpZHRoOjcyNHB4fS5zcGFuMTJ7d2lkdGg6NzI0cHh9LnNwYW4xMXt3aWR0aDo2NjJweH0uc3BhbjEwe3dpZHRoOjYwMHB4fS5zcGFuOXt3aWR0aDo1MzhweH0uc3Bhbjh7d2lkdGg6NDc2cHh9LnNwYW43e3dpZHRoOjQxNHB4fS5zcGFuNnt3aWR0aDozNTJweH0uc3BhbjV7d2lkdGg6MjkwcHh9LnNwYW40e3dpZHRoOjIyOHB4fS5zcGFuM3t3aWR0aDoxNjZweH0uc3BhbjJ7d2lkdGg6MTA0cHh9LnNwYW4xe3dpZHRoOjQycHh9Lm9mZnNldDEye21hcmdpbi1sZWZ0Ojc2NHB4fS5vZmZzZXQxMXttYXJnaW4tbGVmdDo3MDJweH0ub2Zmc2V0MTB7bWFyZ2luLWxlZnQ6NjQwcHh9Lm9mZnNldDl7bWFyZ2luLWxlZnQ6NTc4cHh9Lm9mZnNldDh7bWFyZ2luLWxlZnQ6NTE2cHh9Lm9mZnNldDd7bWFyZ2luLWxlZnQ6NDU0cHh9Lm9mZnNldDZ7bWFyZ2luLWxlZnQ6MzkycHh9Lm9mZnNldDV7bWFyZ2luLWxlZnQ6MzMwcHh9Lm9mZnNldDR7bWFyZ2luLWxlZnQ6MjY4cHh9Lm9mZnNldDN7bWFyZ2luLWxlZnQ6MjA2cHh9Lm9mZnNldDJ7bWFyZ2luLWxlZnQ6MTQ0cHh9Lm9mZnNldDF7bWFyZ2luLWxlZnQ6ODJweH0ucm93LWZsdWlke3dpZHRoOjEwMCU7Knpvb206MX0ucm93LWZsdWlkOmJlZm9yZSwucm93LWZsdWlkOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5yb3ctZmx1aWQ6YWZ0ZXJ7Y2xlYXI6Ym90aH0ucm93LWZsdWlkIFtjbGFzcyo9InNwYW4iXXtkaXNwbGF5OmJsb2NrO2Zsb2F0OmxlZnQ7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjMwcHg7bWFyZ2luLWxlZnQ6Mi43NjI0MzA5MzkyMjY1MTk0JTsqbWFyZ2luLWxlZnQ6Mi43MDkyMzk0NDk4NjQ4MTclOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0ucm93LWZsdWlkIFtjbGFzcyo9InNwYW4iXTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDowfS5yb3ctZmx1aWQgLmNvbnRyb2xzLXJvdyBbY2xhc3MqPSJzcGFuIl0rW2NsYXNzKj0ic3BhbiJde21hcmdpbi1sZWZ0OjIuNzYyNDMwOTM5MjI2NTE5NCV9LnJvdy1mbHVpZCAuc3BhbjEye3dpZHRoOjEwMCU7KndpZHRoOjk5Ljk0NjgwODUxMDYzODI5JX0ucm93LWZsdWlkIC5zcGFuMTF7d2lkdGg6OTEuNDM2NDY0MDg4Mzk3NzglOyp3aWR0aDo5MS4zODMyNzI1OTkwMzYwOCV9LnJvdy1mbHVpZCAuc3BhbjEwe3dpZHRoOjgyLjg3MjkyODE3Njc5NTU4JTsqd2lkdGg6ODIuODE5NzM2Njg3NDMzODclfS5yb3ctZmx1aWQgLnNwYW45e3dpZHRoOjc0LjMwOTM5MjI2NTE5MzM3JTsqd2lkdGg6NzQuMjU2MjAwNzc1ODMxNjYlfS5yb3ctZmx1aWQgLnNwYW44e3dpZHRoOjY1Ljc0NTg1NjM1MzU5MTE3JTsqd2lkdGg6NjUuNjkyNjY0ODY0MjI5NDYlfS5yb3ctZmx1aWQgLnNwYW43e3dpZHRoOjU3LjE4MjMyMDQ0MTk4ODk1JTsqd2lkdGg6NTcuMTI5MTI4OTUyNjI3MjUlfS5yb3ctZmx1aWQgLnNwYW42e3dpZHRoOjQ4LjYxODc4NDUzMDM4Njc0JTsqd2lkdGg6NDguNTY1NTkzMDQxMDI1MDQlfS5yb3ctZmx1aWQgLnNwYW41e3dpZHRoOjQwLjA1NTI0ODYxODc4NDUzJTsqd2lkdGg6NDAuMDAyMDU3MTI5NDIyODMlfS5yb3ctZmx1aWQgLnNwYW40e3dpZHRoOjMxLjQ5MTcxMjcwNzE4MjMyMyU7KndpZHRoOjMxLjQzODUyMTIxNzgyMDYyJX0ucm93LWZsdWlkIC5zcGFuM3t3aWR0aDoyMi45MjgxNzY3OTU1ODAxMSU7KndpZHRoOjIyLjg3NDk4NTMwNjIxODQxJX0ucm93LWZsdWlkIC5zcGFuMnt3aWR0aDoxNC4zNjQ2NDA4ODM5Nzc5JTsqd2lkdGg6MTQuMzExNDQ5Mzk0NjE2MTk5JX0ucm93LWZsdWlkIC5zcGFuMXt3aWR0aDo1LjgwMTEwNDk3MjM3NTY5MSU7KndpZHRoOjUuNzQ3OTEzNDgzMDEzOTg4JX0ucm93LWZsdWlkIC5vZmZzZXQxMnttYXJnaW4tbGVmdDoxMDUuNTI0ODYxODc4NDUzMDQlOyptYXJnaW4tbGVmdDoxMDUuNDE4NDc4ODk5NzI5NjIlfS5yb3ctZmx1aWQgLm9mZnNldDEyOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjEwMi43NjI0MzA5MzkyMjY1MiU7Km1hcmdpbi1sZWZ0OjEwMi42NTYwNDc5NjA1MDMxJX0ucm93LWZsdWlkIC5vZmZzZXQxMXttYXJnaW4tbGVmdDo5Ni45NjEzMjU5NjY4NTA4MiU7Km1hcmdpbi1sZWZ0Ojk2Ljg1NDk0Mjk4ODEyNzQlfS5yb3ctZmx1aWQgLm9mZnNldDExOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0Ojk0LjE5ODg5NTAyNzYyNDMlOyptYXJnaW4tbGVmdDo5NC4wOTI1MTIwNDg5MDA4OSV9LnJvdy1mbHVpZCAub2Zmc2V0MTB7bWFyZ2luLWxlZnQ6ODguMzk3NzkwMDU1MjQ4NjIlOyptYXJnaW4tbGVmdDo4OC4yOTE0MDcwNzY1MjUyJX0ucm93LWZsdWlkIC5vZmZzZXQxMDpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo4NS42MzUzNTkxMTYwMjIxJTsqbWFyZ2luLWxlZnQ6ODUuNTI4OTc2MTM3Mjk4NjglfS5yb3ctZmx1aWQgLm9mZnNldDl7bWFyZ2luLWxlZnQ6NzkuODM0MjU0MTQzNjQ2NCU7Km1hcmdpbi1sZWZ0Ojc5LjcyNzg3MTE2NDkyMjk5JX0ucm93LWZsdWlkIC5vZmZzZXQ5OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0Ojc3LjA3MTgyMzIwNDQxOTg5JTsqbWFyZ2luLWxlZnQ6NzYuOTY1NDQwMjI1Njk2NDclfS5yb3ctZmx1aWQgLm9mZnNldDh7bWFyZ2luLWxlZnQ6NzEuMjcwNzE4MjMyMDQ0MiU7Km1hcmdpbi1sZWZ0OjcxLjE2NDMzNTI1MzMyMDc5JX0ucm93LWZsdWlkIC5vZmZzZXQ4OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjY4LjUwODI4NzI5MjgxNzY4JTsqbWFyZ2luLWxlZnQ6NjguNDAxOTA0MzE0MDk0MjclfS5yb3ctZmx1aWQgLm9mZnNldDd7bWFyZ2luLWxlZnQ6NjIuNzA3MTgyMzIwNDQxOTklOyptYXJnaW4tbGVmdDo2Mi42MDA3OTkzNDE3MTg1ODQlfS5yb3ctZmx1aWQgLm9mZnNldDc6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NTkuOTQ0NzUxMzgxMjE1NDclOyptYXJnaW4tbGVmdDo1OS44MzgzNjg0MDI0OTIwNjUlfS5yb3ctZmx1aWQgLm9mZnNldDZ7bWFyZ2luLWxlZnQ6NTQuMTQzNjQ2NDA4ODM5NzglOyptYXJnaW4tbGVmdDo1NC4wMzcyNjM0MzAxMTYzNzYlfS5yb3ctZmx1aWQgLm9mZnNldDY6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NTEuMzgxMjE1NDY5NjEzMjYlOyptYXJnaW4tbGVmdDo1MS4yNzQ4MzI0OTA4ODk4NiV9LnJvdy1mbHVpZCAub2Zmc2V0NXttYXJnaW4tbGVmdDo0NS41ODAxMTA0OTcyMzc1NyU7Km1hcmdpbi1sZWZ0OjQ1LjQ3MzcyNzUxODUxNDE3JX0ucm93LWZsdWlkIC5vZmZzZXQ1OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjQyLjgxNzY3OTU1ODAxMTA1JTsqbWFyZ2luLWxlZnQ6NDIuNzExMjk2NTc5Mjg3NjUlfS5yb3ctZmx1aWQgLm9mZnNldDR7bWFyZ2luLWxlZnQ6MzcuMDE2NTc0NTg1NjM1MzYlOyptYXJnaW4tbGVmdDozNi45MTAxOTE2MDY5MTE5NiV9LnJvdy1mbHVpZCAub2Zmc2V0NDpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDozNC4yNTQxNDM2NDY0MDg4NCU7Km1hcmdpbi1sZWZ0OjM0LjE0Nzc2MDY2NzY4NTQ0JX0ucm93LWZsdWlkIC5vZmZzZXQze21hcmdpbi1sZWZ0OjI4LjQ1MzAzODY3NDAzMzE1JTsqbWFyZ2luLWxlZnQ6MjguMzQ2NjU1Njk1MzA5NzQ2JX0ucm93LWZsdWlkIC5vZmZzZXQzOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjI1LjY5MDYwNzczNDgwNjYzJTsqbWFyZ2luLWxlZnQ6MjUuNTg0MjI0NzU2MDgzMjI3JX0ucm93LWZsdWlkIC5vZmZzZXQye21hcmdpbi1sZWZ0OjE5Ljg4OTUwMjc2MjQzMDk0JTsqbWFyZ2luLWxlZnQ6MTkuNzgzMTE5NzgzNzA3NTM3JX0ucm93LWZsdWlkIC5vZmZzZXQyOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjE3LjEyNzA3MTgyMzIwNDQyJTsqbWFyZ2luLWxlZnQ6MTcuMDIwNjg4ODQ0NDgxMDIlfS5yb3ctZmx1aWQgLm9mZnNldDF7bWFyZ2luLWxlZnQ6MTEuMzI1OTY2ODUwODI4NzMlOyptYXJnaW4tbGVmdDoxMS4yMTk1ODM4NzIxMDUzMjUlfS5yb3ctZmx1aWQgLm9mZnNldDE6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6OC41NjM1MzU5MTE2MDIyMSU7Km1hcmdpbi1sZWZ0OjguNDU3MTUyOTMyODc4ODA2JX1pbnB1dCx0ZXh0YXJlYSwudW5lZGl0YWJsZS1pbnB1dHttYXJnaW4tbGVmdDowfS5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdK1tjbGFzcyo9InNwYW4iXXttYXJnaW4tbGVmdDoyMHB4fWlucHV0LnNwYW4xMix0ZXh0YXJlYS5zcGFuMTIsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEye3dpZHRoOjcxMHB4fWlucHV0LnNwYW4xMSx0ZXh0YXJlYS5zcGFuMTEsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjExe3dpZHRoOjY0OHB4fWlucHV0LnNwYW4xMCx0ZXh0YXJlYS5zcGFuMTAsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEwe3dpZHRoOjU4NnB4fWlucHV0LnNwYW45LHRleHRhcmVhLnNwYW45LC51bmVkaXRhYmxlLWlucHV0LnNwYW45e3dpZHRoOjUyNHB4fWlucHV0LnNwYW44LHRleHRhcmVhLnNwYW44LC51bmVkaXRhYmxlLWlucHV0LnNwYW44e3dpZHRoOjQ2MnB4fWlucHV0LnNwYW43LHRleHRhcmVhLnNwYW43LC51bmVkaXRhYmxlLWlucHV0LnNwYW43e3dpZHRoOjQwMHB4fWlucHV0LnNwYW42LHRleHRhcmVhLnNwYW42LC51bmVkaXRhYmxlLWlucHV0LnNwYW42e3dpZHRoOjMzOHB4fWlucHV0LnNwYW41LHRleHRhcmVhLnNwYW41LC51bmVkaXRhYmxlLWlucHV0LnNwYW41e3dpZHRoOjI3NnB4fWlucHV0LnNwYW40LHRleHRhcmVhLnNwYW40LC51bmVkaXRhYmxlLWlucHV0LnNwYW40e3dpZHRoOjIxNHB4fWlucHV0LnNwYW4zLHRleHRhcmVhLnNwYW4zLC51bmVkaXRhYmxlLWlucHV0LnNwYW4ze3dpZHRoOjE1MnB4fWlucHV0LnNwYW4yLHRleHRhcmVhLnNwYW4yLC51bmVkaXRhYmxlLWlucHV0LnNwYW4ye3dpZHRoOjkwcHh9aW5wdXQuc3BhbjEsdGV4dGFyZWEuc3BhbjEsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjF7d2lkdGg6MjhweH19QG1lZGlhKG1heC13aWR0aDo3NjdweCl7Ym9keXtwYWRkaW5nLXJpZ2h0OjIwcHg7cGFkZGluZy1sZWZ0OjIwcHh9Lm5hdmJhci1maXhlZC10b3AsLm5hdmJhci1maXhlZC1ib3R0b20sLm5hdmJhci1zdGF0aWMtdG9we21hcmdpbi1yaWdodDotMjBweDttYXJnaW4tbGVmdDotMjBweH0uY29udGFpbmVyLWZsdWlke3BhZGRpbmc6MH0uZGwtaG9yaXpvbnRhbCBkdHtmbG9hdDpub25lO3dpZHRoOmF1dG87Y2xlYXI6bm9uZTt0ZXh0LWFsaWduOmxlZnR9LmRsLWhvcml6b250YWwgZGR7bWFyZ2luLWxlZnQ6MH0uY29udGFpbmVye3dpZHRoOmF1dG99LnJvdy1mbHVpZHt3aWR0aDoxMDAlfS5yb3csLnRodW1ibmFpbHN7bWFyZ2luLWxlZnQ6MH0udGh1bWJuYWlscz5saXtmbG9hdDpub25lO21hcmdpbi1sZWZ0OjB9W2NsYXNzKj0ic3BhbiJdLC51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgW2NsYXNzKj0ic3BhbiJde2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bm9uZTt3aWR0aDoxMDAlO21hcmdpbi1sZWZ0OjA7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5zcGFuMTIsLnJvdy1mbHVpZCAuc3BhbjEye3dpZHRoOjEwMCU7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5yb3ctZmx1aWQgW2NsYXNzKj0ib2Zmc2V0Il06Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MH0uaW5wdXQtbGFyZ2UsLmlucHV0LXhsYXJnZSwuaW5wdXQteHhsYXJnZSxpbnB1dFtjbGFzcyo9InNwYW4iXSxzZWxlY3RbY2xhc3MqPSJzcGFuIl0sdGV4dGFyZWFbY2xhc3MqPSJzcGFuIl0sLnVuZWRpdGFibGUtaW5wdXR7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MzBweDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmlucHV0LXByZXBlbmQgaW5wdXQsLmlucHV0LWFwcGVuZCBpbnB1dCwuaW5wdXQtcHJlcGVuZCBpbnB1dFtjbGFzcyo9InNwYW4iXSwuaW5wdXQtYXBwZW5kIGlucHV0W2NsYXNzKj0ic3BhbiJde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOmF1dG99LmNvbnRyb2xzLXJvdyBbY2xhc3MqPSJzcGFuIl0rW2NsYXNzKj0ic3BhbiJde21hcmdpbi1sZWZ0OjB9Lm1vZGFse3Bvc2l0aW9uOmZpeGVkO3RvcDoyMHB4O3JpZ2h0OjIwcHg7bGVmdDoyMHB4O3dpZHRoOmF1dG87bWFyZ2luOjB9Lm1vZGFsLmZhZGV7dG9wOi0xMDBweH0ubW9kYWwuZmFkZS5pbnt0b3A6MjBweH19QG1lZGlhKG1heC13aWR0aDo0ODBweCl7Lm5hdi1jb2xsYXBzZXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCl9LnBhZ2UtaGVhZGVyIGgxIHNtYWxse2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6MjBweH1pbnB1dFt0eXBlPSJjaGVja2JveCJdLGlucHV0W3R5cGU9InJhZGlvIl17Ym9yZGVyOjFweCBzb2xpZCAjY2NjfS5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtbGFiZWx7ZmxvYXQ6bm9uZTt3aWR0aDphdXRvO3BhZGRpbmctdG9wOjA7dGV4dC1hbGlnbjpsZWZ0fS5mb3JtLWhvcml6b250YWwgLmNvbnRyb2xze21hcmdpbi1sZWZ0OjB9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1saXN0e3BhZGRpbmctdG9wOjB9LmZvcm0taG9yaXpvbnRhbCAuZm9ybS1hY3Rpb25ze3BhZGRpbmctcmlnaHQ6MTBweDtwYWRkaW5nLWxlZnQ6MTBweH0ubWVkaWEgLnB1bGwtbGVmdCwubWVkaWEgLnB1bGwtcmlnaHR7ZGlzcGxheTpibG9jaztmbG9hdDpub25lO21hcmdpbi1ib3R0b206MTBweH0ubWVkaWEtb2JqZWN0e21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjB9Lm1vZGFse3RvcDoxMHB4O3JpZ2h0OjEwcHg7bGVmdDoxMHB4fS5tb2RhbC1oZWFkZXIgLmNsb3Nle3BhZGRpbmc6MTBweDttYXJnaW46LTEwcHh9LmNhcm91c2VsLWNhcHRpb257cG9zaXRpb246c3RhdGljfX1AbWVkaWEobWF4LXdpZHRoOjk3OXB4KXtib2R5e3BhZGRpbmctdG9wOjB9Lm5hdmJhci1maXhlZC10b3AsLm5hdmJhci1maXhlZC1ib3R0b217cG9zaXRpb246c3RhdGljfS5uYXZiYXItZml4ZWQtdG9we21hcmdpbi1ib3R0b206MjBweH0ubmF2YmFyLWZpeGVkLWJvdHRvbXttYXJnaW4tdG9wOjIwcHh9Lm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1pbm5lciwubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLWlubmVye3BhZGRpbmc6NXB4fS5uYXZiYXIgLmNvbnRhaW5lcnt3aWR0aDphdXRvO3BhZGRpbmc6MH0ubmF2YmFyIC5icmFuZHtwYWRkaW5nLXJpZ2h0OjEwcHg7cGFkZGluZy1sZWZ0OjEwcHg7bWFyZ2luOjAgMCAwIC01cHh9Lm5hdi1jb2xsYXBzZXtjbGVhcjpib3RofS5uYXYtY29sbGFwc2UgLm5hdntmbG9hdDpub25lO21hcmdpbjowIDAgMTBweH0ubmF2LWNvbGxhcHNlIC5uYXY+bGl7ZmxvYXQ6bm9uZX0ubmF2LWNvbGxhcHNlIC5uYXY+bGk+YXttYXJnaW4tYm90dG9tOjJweH0ubmF2LWNvbGxhcHNlIC5uYXY+LmRpdmlkZXItdmVydGljYWx7ZGlzcGxheTpub25lfS5uYXYtY29sbGFwc2UgLm5hdiAubmF2LWhlYWRlcntjb2xvcjojNzc3O3RleHQtc2hhZG93Om5vbmV9Lm5hdi1jb2xsYXBzZSAubmF2PmxpPmEsLm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudSBhe3BhZGRpbmc6OXB4IDE1cHg7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojNzc3Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzOjNweDtib3JkZXItcmFkaXVzOjNweH0ubmF2LWNvbGxhcHNlIC5idG57cGFkZGluZzo0cHggMTBweCA0cHg7Zm9udC13ZWlnaHQ6bm9ybWFsOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweH0ubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51IGxpK2xpIGF7bWFyZ2luLWJvdHRvbToycHh9Lm5hdi1jb2xsYXBzZSAubmF2PmxpPmE6aG92ZXIsLm5hdi1jb2xsYXBzZSAubmF2PmxpPmE6Zm9jdXMsLm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudSBhOmhvdmVyLC5uYXYtY29sbGFwc2UgLmRyb3Bkb3duLW1lbnUgYTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOiNmMmYyZjJ9Lm5hdmJhci1pbnZlcnNlIC5uYXYtY29sbGFwc2UgLm5hdj5saT5hLC5uYXZiYXItaW52ZXJzZSAubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51IGF7Y29sb3I6Izk5OX0ubmF2YmFyLWludmVyc2UgLm5hdi1jb2xsYXBzZSAubmF2PmxpPmE6aG92ZXIsLm5hdmJhci1pbnZlcnNlIC5uYXYtY29sbGFwc2UgLm5hdj5saT5hOmZvY3VzLC5uYXZiYXItaW52ZXJzZSAubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51IGE6aG92ZXIsLm5hdmJhci1pbnZlcnNlIC5uYXYtY29sbGFwc2UgLmRyb3Bkb3duLW1lbnUgYTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOiMxMTF9Lm5hdi1jb2xsYXBzZS5pbiAuYnRuLWdyb3Vwe3BhZGRpbmc6MDttYXJnaW4tdG9wOjVweH0ubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51e3Bvc2l0aW9uOnN0YXRpYzt0b3A6YXV0bztsZWZ0OmF1dG87ZGlzcGxheTpub25lO2Zsb2F0Om5vbmU7bWF4LXdpZHRoOm5vbmU7cGFkZGluZzowO21hcmdpbjowIDE1cHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXI6MDstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjA7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7LW1vei1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRvdzpub25lfS5uYXYtY29sbGFwc2UgLm9wZW4+LmRyb3Bkb3duLW1lbnV7ZGlzcGxheTpibG9ja30ubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51OmJlZm9yZSwubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51OmFmdGVye2Rpc3BsYXk6bm9uZX0ubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51IC5kaXZpZGVye2Rpc3BsYXk6bm9uZX0ubmF2LWNvbGxhcHNlIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnU6YmVmb3JlLC5uYXYtY29sbGFwc2UgLm5hdj5saT4uZHJvcGRvd24tbWVudTphZnRlcntkaXNwbGF5Om5vbmV9Lm5hdi1jb2xsYXBzZSAubmF2YmFyLWZvcm0sLm5hdi1jb2xsYXBzZSAubmF2YmFyLXNlYXJjaHtmbG9hdDpub25lO3BhZGRpbmc6MTBweCAxNXB4O21hcmdpbjoxMHB4IDA7Ym9yZGVyLXRvcDoxcHggc29saWQgI2YyZjJmMjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjJmMmYyOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKX0ubmF2YmFyLWludmVyc2UgLm5hdi1jb2xsYXBzZSAubmF2YmFyLWZvcm0sLm5hdmJhci1pbnZlcnNlIC5uYXYtY29sbGFwc2UgLm5hdmJhci1zZWFyY2h7Ym9yZGVyLXRvcC1jb2xvcjojMTExO2JvcmRlci1ib3R0b20tY29sb3I6IzExMX0ubmF2YmFyIC5uYXYtY29sbGFwc2UgLm5hdi5wdWxsLXJpZ2h0e2Zsb2F0Om5vbmU7bWFyZ2luLWxlZnQ6MH0ubmF2LWNvbGxhcHNlLC5uYXYtY29sbGFwc2UuY29sbGFwc2V7aGVpZ2h0OjA7b3ZlcmZsb3c6aGlkZGVufS5uYXZiYXIgLmJ0bi1uYXZiYXJ7ZGlzcGxheTpibG9ja30ubmF2YmFyLXN0YXRpYyAubmF2YmFyLWlubmVye3BhZGRpbmctcmlnaHQ6MTBweDtwYWRkaW5nLWxlZnQ6MTBweH19QG1lZGlhKG1pbi13aWR0aDo5ODBweCl7Lm5hdi1jb2xsYXBzZS5jb2xsYXBzZXtoZWlnaHQ6YXV0byFpbXBvcnRhbnQ7b3ZlcmZsb3c6dmlzaWJsZSFpbXBvcnRhbnR9fQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9ib290c3RyYXAubWluLmNzcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvYm9vdHN0cmFwLm1pbi5jc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmI5MjdmOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvYm9vdHN0cmFwLm1pbi5jc3MKQEAgLTAsMCArMSw5IEBACisvKiEKKyAqIEJvb3RzdHJhcCB2Mi4zLjAKKyAqCisgKiBDb3B5cmlnaHQgMjAxMiBUd2l0dGVyLCBJbmMKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSB2Mi4wCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBEZXNpZ25lZCBhbmQgYnVpbHQgd2l0aCBhbGwgdGhlIGxvdmUgaW4gdGhlIHdvcmxkIEB0d2l0dGVyIGJ5IEBtZG8gYW5kIEBmYXQuCisgKi8uY2xlYXJmaXh7Knpvb206MX0uY2xlYXJmaXg6YmVmb3JlLC5jbGVhcmZpeDphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0uY2xlYXJmaXg6YWZ0ZXJ7Y2xlYXI6Ym90aH0uaGlkZS10ZXh0e2ZvbnQ6MC8wIGE7Y29sb3I6dHJhbnNwYXJlbnQ7dGV4dC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlcjowfS5pbnB1dC1ibG9jay1sZXZlbHtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7bWluLWhlaWdodDozMHB4Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH1hcnRpY2xlLGFzaWRlLGRldGFpbHMsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGhlYWRlcixoZ3JvdXAsbmF2LHNlY3Rpb257ZGlzcGxheTpibG9ja31hdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lOyp6b29tOjF9YXVkaW86bm90KFtjb250cm9sc10pe2Rpc3BsYXk6bm9uZX1odG1se2ZvbnQtc2l6ZToxMDAlOy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tcy10ZXh0LXNpemUtYWRqdXN0OjEwMCV9YTpmb2N1c3tvdXRsaW5lOnRoaW4gZG90dGVkICMzMzM7b3V0bGluZTo1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6LTJweH1hOmhvdmVyLGE6YWN0aXZle291dGxpbmU6MH1zdWIsc3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1zdXB7dG9wOi0wLjVlbX1zdWJ7Ym90dG9tOi0wLjI1ZW19aW1ne3dpZHRoOmF1dG9cOTtoZWlnaHQ6YXV0bzttYXgtd2lkdGg6MTAwJTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym9yZGVyOjA7LW1zLWludGVycG9sYXRpb24tbW9kZTpiaWN1YmljfSNtYXBfY2FudmFzIGltZywuZ29vZ2xlLW1hcHMgaW1ne21heC13aWR0aDpub25lfWJ1dHRvbixpbnB1dCxzZWxlY3QsdGV4dGFyZWF7bWFyZ2luOjA7Zm9udC1zaXplOjEwMCU7dmVydGljYWwtYWxpZ246bWlkZGxlfWJ1dHRvbixpbnB1dHsqb3ZlcmZsb3c6dmlzaWJsZTtsaW5lLWhlaWdodDpub3JtYWx9YnV0dG9uOjotbW96LWZvY3VzLWlubmVyLGlucHV0OjotbW96LWZvY3VzLWlubmVye3BhZGRpbmc6MDtib3JkZXI6MH1idXR0b24saHRtbCBpbnB1dFt0eXBlPSJidXR0b24iXSxpbnB1dFt0eXBlPSJyZXNldCJdLGlucHV0W3R5cGU9InN1Ym1pdCJde2N1cnNvcjpwb2ludGVyOy13ZWJraXQtYXBwZWFyYW5jZTpidXR0b259bGFiZWwsc2VsZWN0LGJ1dHRvbixpbnB1dFt0eXBlPSJidXR0b24iXSxpbnB1dFt0eXBlPSJyZXNldCJdLGlucHV0W3R5cGU9InN1Ym1pdCJdLGlucHV0W3R5cGU9InJhZGlvIl0saW5wdXRbdHlwZT0iY2hlY2tib3giXXtjdXJzb3I6cG9pbnRlcn1pbnB1dFt0eXBlPSJzZWFyY2giXXstd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7LW1vei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3g7LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZH1pbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbixpbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX10ZXh0YXJlYXtvdmVyZmxvdzphdXRvO3ZlcnRpY2FsLWFsaWduOnRvcH1AbWVkaWEgcHJpbnR7Kntjb2xvcjojMDAwIWltcG9ydGFudDt0ZXh0LXNoYWRvdzpub25lIWltcG9ydGFudDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IWltcG9ydGFudDtib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50fWEsYTp2aXNpdGVke3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9YVtocmVmXTphZnRlcntjb250ZW50OiIgKCIgYXR0cihocmVmKSAiKSJ9YWJiclt0aXRsZV06YWZ0ZXJ7Y29udGVudDoiICgiIGF0dHIodGl0bGUpICIpIn0uaXIgYTphZnRlcixhW2hyZWZePSJqYXZhc2NyaXB0OiJdOmFmdGVyLGFbaHJlZl49IiMiXTphZnRlcntjb250ZW50OiIifXByZSxibG9ja3F1b3Rle2JvcmRlcjoxcHggc29saWQgIzk5OTtwYWdlLWJyZWFrLWluc2lkZTphdm9pZH10aGVhZHtkaXNwbGF5OnRhYmxlLWhlYWRlci1ncm91cH10cixpbWd7cGFnZS1icmVhay1pbnNpZGU6YXZvaWR9aW1ne21heC13aWR0aDoxMDAlIWltcG9ydGFudH1AcGFnZXttYXJnaW46LjVjbX1wLGgyLGgze29ycGhhbnM6Mzt3aWRvd3M6M31oMixoM3twYWdlLWJyZWFrLWFmdGVyOmF2b2lkfX1ib2R5e21hcmdpbjowO2ZvbnQtZmFtaWx5OiJIZWx2ZXRpY2EgTmV1ZSIsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZmZn1he2NvbG9yOiMwOGM7dGV4dC1kZWNvcmF0aW9uOm5vbmV9YTpob3ZlcixhOmZvY3Vze2NvbG9yOiMwMDU1ODA7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uaW1nLXJvdW5kZWR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4O2JvcmRlci1yYWRpdXM6NnB4fS5pbWctcG9sYXJvaWR7cGFkZGluZzo0cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4yKTstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4xKTstbW96LWJveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4xKTtib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMSl9LmltZy1jaXJjbGV7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjUwMHB4Oy1tb3otYm9yZGVyLXJhZGl1czo1MDBweDtib3JkZXItcmFkaXVzOjUwMHB4fS5yb3d7bWFyZ2luLWxlZnQ6LTIwcHg7Knpvb206MX0ucm93OmJlZm9yZSwucm93OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5yb3c6YWZ0ZXJ7Y2xlYXI6Ym90aH1bY2xhc3MqPSJzcGFuIl17ZmxvYXQ6bGVmdDttaW4taGVpZ2h0OjFweDttYXJnaW4tbGVmdDoyMHB4fS5jb250YWluZXIsLm5hdmJhci1zdGF0aWMtdG9wIC5jb250YWluZXIsLm5hdmJhci1maXhlZC10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZpeGVkLWJvdHRvbSAuY29udGFpbmVye3dpZHRoOjk0MHB4fS5zcGFuMTJ7d2lkdGg6OTQwcHh9LnNwYW4xMXt3aWR0aDo4NjBweH0uc3BhbjEwe3dpZHRoOjc4MHB4fS5zcGFuOXt3aWR0aDo3MDBweH0uc3Bhbjh7d2lkdGg6NjIwcHh9LnNwYW43e3dpZHRoOjU0MHB4fS5zcGFuNnt3aWR0aDo0NjBweH0uc3BhbjV7d2lkdGg6MzgwcHh9LnNwYW40e3dpZHRoOjMwMHB4fS5zcGFuM3t3aWR0aDoyMjBweH0uc3BhbjJ7d2lkdGg6MTQwcHh9LnNwYW4xe3dpZHRoOjYwcHh9Lm9mZnNldDEye21hcmdpbi1sZWZ0Ojk4MHB4fS5vZmZzZXQxMXttYXJnaW4tbGVmdDo5MDBweH0ub2Zmc2V0MTB7bWFyZ2luLWxlZnQ6ODIwcHh9Lm9mZnNldDl7bWFyZ2luLWxlZnQ6NzQwcHh9Lm9mZnNldDh7bWFyZ2luLWxlZnQ6NjYwcHh9Lm9mZnNldDd7bWFyZ2luLWxlZnQ6NTgwcHh9Lm9mZnNldDZ7bWFyZ2luLWxlZnQ6NTAwcHh9Lm9mZnNldDV7bWFyZ2luLWxlZnQ6NDIwcHh9Lm9mZnNldDR7bWFyZ2luLWxlZnQ6MzQwcHh9Lm9mZnNldDN7bWFyZ2luLWxlZnQ6MjYwcHh9Lm9mZnNldDJ7bWFyZ2luLWxlZnQ6MTgwcHh9Lm9mZnNldDF7bWFyZ2luLWxlZnQ6MTAwcHh9LnJvdy1mbHVpZHt3aWR0aDoxMDAlOyp6b29tOjF9LnJvdy1mbHVpZDpiZWZvcmUsLnJvdy1mbHVpZDphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ucm93LWZsdWlkOmFmdGVye2NsZWFyOmJvdGh9LnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl17ZGlzcGxheTpibG9jaztmbG9hdDpsZWZ0O3dpZHRoOjEwMCU7bWluLWhlaWdodDozMHB4O21hcmdpbi1sZWZ0OjIuMTI3NjU5NTc0NDY4MDg1JTsqbWFyZ2luLWxlZnQ6Mi4wNzQ0NjgwODUxMDYzODMlOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0ucm93LWZsdWlkIFtjbGFzcyo9InNwYW4iXTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDowfS5yb3ctZmx1aWQgLmNvbnRyb2xzLXJvdyBbY2xhc3MqPSJzcGFuIl0rW2NsYXNzKj0ic3BhbiJde21hcmdpbi1sZWZ0OjIuMTI3NjU5NTc0NDY4MDg1JX0ucm93LWZsdWlkIC5zcGFuMTJ7d2lkdGg6MTAwJTsqd2lkdGg6OTkuOTQ2ODA4NTEwNjM4MjklfS5yb3ctZmx1aWQgLnNwYW4xMXt3aWR0aDo5MS40ODkzNjE3MDIxMjc2NSU7KndpZHRoOjkxLjQzNjE3MDIxMjc2NTk0JX0ucm93LWZsdWlkIC5zcGFuMTB7d2lkdGg6ODIuOTc4NzIzNDA0MjU1MzIlOyp3aWR0aDo4Mi45MjU1MzE5MTQ4OTM2MSV9LnJvdy1mbHVpZCAuc3Bhbjl7d2lkdGg6NzQuNDY4MDg1MTA2MzgyOTclOyp3aWR0aDo3NC40MTQ4OTM2MTcwMjEyNiV9LnJvdy1mbHVpZCAuc3Bhbjh7d2lkdGg6NjUuOTU3NDQ2ODA4NTEwNjQlOyp3aWR0aDo2NS45MDQyNTUzMTkxNDg5MyV9LnJvdy1mbHVpZCAuc3Bhbjd7d2lkdGg6NTcuNDQ2ODA4NTEwNjM4MjklOyp3aWR0aDo1Ny4zOTM2MTcwMjEyNzY1OSV9LnJvdy1mbHVpZCAuc3BhbjZ7d2lkdGg6NDguOTM2MTcwMjEyNzY1OTUlOyp3aWR0aDo0OC44ODI5Nzg3MjM0MDQyNSV9LnJvdy1mbHVpZCAuc3BhbjV7d2lkdGg6NDAuNDI1NTMxOTE0ODkzNjIlOyp3aWR0aDo0MC4zNzIzNDA0MjU1MzE5MiV9LnJvdy1mbHVpZCAuc3BhbjR7d2lkdGg6MzEuOTE0ODkzNjE3MDIxMjc4JTsqd2lkdGg6MzEuODYxNzAyMTI3NjU5NTc2JX0ucm93LWZsdWlkIC5zcGFuM3t3aWR0aDoyMy40MDQyNTUzMTkxNDg5MzQlOyp3aWR0aDoyMy4zNTEwNjM4Mjk3ODcyMzMlfS5yb3ctZmx1aWQgLnNwYW4ye3dpZHRoOjE0Ljg5MzYxNzAyMTI3NjU5NSU7KndpZHRoOjE0Ljg0MDQyNTUzMTkxNDg5NCV9LnJvdy1mbHVpZCAuc3BhbjF7d2lkdGg6Ni4zODI5Nzg3MjM0MDQyNTUlOyp3aWR0aDo2LjMyOTc4NzIzNDA0MjU1MyV9LnJvdy1mbHVpZCAub2Zmc2V0MTJ7bWFyZ2luLWxlZnQ6MTA0LjI1NTMxOTE0ODkzNjE3JTsqbWFyZ2luLWxlZnQ6MTA0LjE0ODkzNjE3MDIxMjc1JX0ucm93LWZsdWlkIC5vZmZzZXQxMjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDoxMDIuMTI3NjU5NTc0NDY4MDglOyptYXJnaW4tbGVmdDoxMDIuMDIxMjc2NTk1NzQ0NjclfS5yb3ctZmx1aWQgLm9mZnNldDExe21hcmdpbi1sZWZ0Ojk1Ljc0NDY4MDg1MTA2MzgyJTsqbWFyZ2luLWxlZnQ6OTUuNjM4Mjk3ODcyMzQwNCV9LnJvdy1mbHVpZCAub2Zmc2V0MTE6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6OTMuNjE3MDIxMjc2NTk1NzQlOyptYXJnaW4tbGVmdDo5My41MTA2MzgyOTc4NzIzMiV9LnJvdy1mbHVpZCAub2Zmc2V0MTB7bWFyZ2luLWxlZnQ6ODcuMjM0MDQyNTUzMTkxNDklOyptYXJnaW4tbGVmdDo4Ny4xMjc2NTk1NzQ0NjgwNyV9LnJvdy1mbHVpZCAub2Zmc2V0MTA6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6ODUuMTA2MzgyOTc4NzIzNCU7Km1hcmdpbi1sZWZ0Ojg0Ljk5OTk5OTk5OTk5OTk5JX0ucm93LWZsdWlkIC5vZmZzZXQ5e21hcmdpbi1sZWZ0Ojc4LjcyMzQwNDI1NTMxOTE0JTsqbWFyZ2luLWxlZnQ6NzguNjE3MDIxMjc2NTk1NzIlfS5yb3ctZmx1aWQgLm9mZnNldDk6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NzYuNTk1NzQ0NjgwODUxMDYlOyptYXJnaW4tbGVmdDo3Ni40ODkzNjE3MDIxMjc2NCV9LnJvdy1mbHVpZCAub2Zmc2V0OHttYXJnaW4tbGVmdDo3MC4yMTI3NjU5NTc0NDY4JTsqbWFyZ2luLWxlZnQ6NzAuMTA2MzgyOTc4NzIzMzklfS5yb3ctZmx1aWQgLm9mZnNldDg6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NjguMDg1MTA2MzgyOTc4NzIlOyptYXJnaW4tbGVmdDo2Ny45Nzg3MjM0MDQyNTUzJX0ucm93LWZsdWlkIC5vZmZzZXQ3e21hcmdpbi1sZWZ0OjYxLjcwMjEyNzY1OTU3NDQ2JTsqbWFyZ2luLWxlZnQ6NjEuNTk1NzQ0NjgwODUxMDYlfS5yb3ctZmx1aWQgLm9mZnNldDc6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NTkuNTc0NDY4MDg1MTA2Mzc1JTsqbWFyZ2luLWxlZnQ6NTkuNDY4MDg1MTA2MzgyOTclfS5yb3ctZmx1aWQgLm9mZnNldDZ7bWFyZ2luLWxlZnQ6NTMuMTkxNDg5MzYxNzAyMTI1JTsqbWFyZ2luLWxlZnQ6NTMuMDg1MTA2MzgyOTc4NzE1JX0ucm93LWZsdWlkIC5vZmZzZXQ2OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjUxLjA2MzgyOTc4NzIzNDAzNSU7Km1hcmdpbi1sZWZ0OjUwLjk1NzQ0NjgwODUxMDYzJX0ucm93LWZsdWlkIC5vZmZzZXQ1e21hcmdpbi1sZWZ0OjQ0LjY4MDg1MTA2MzgyOTc5JTsqbWFyZ2luLWxlZnQ6NDQuNTc0NDY4MDg1MTA2MzglfS5yb3ctZmx1aWQgLm9mZnNldDU6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NDIuNTUzMTkxNDg5MzYxNyU7Km1hcmdpbi1sZWZ0OjQyLjQ0NjgwODUxMDYzODMlfS5yb3ctZmx1aWQgLm9mZnNldDR7bWFyZ2luLWxlZnQ6MzYuMTcwMjEyNzY1OTU3NDQ0JTsqbWFyZ2luLWxlZnQ6MzYuMDYzODI5Nzg3MjM0MDUlfS5yb3ctZmx1aWQgLm9mZnNldDQ6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MzQuMDQyNTUzMTkxNDg5MzYlOyptYXJnaW4tbGVmdDozMy45MzYxNzAyMTI3NjU5NiV9LnJvdy1mbHVpZCAub2Zmc2V0M3ttYXJnaW4tbGVmdDoyNy42NTk1NzQ0NjgwODUxMDQlOyptYXJnaW4tbGVmdDoyNy41NTMxOTE0ODkzNjE3JX0ucm93LWZsdWlkIC5vZmZzZXQzOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjI1LjUzMTkxNDg5MzYxNzAyJTsqbWFyZ2luLWxlZnQ6MjUuNDI1NTMxOTE0ODkzNjE4JX0ucm93LWZsdWlkIC5vZmZzZXQye21hcmdpbi1sZWZ0OjE5LjE0ODkzNjE3MDIxMjc2NCU7Km1hcmdpbi1sZWZ0OjE5LjA0MjU1MzE5MTQ4OTM2JX0ucm93LWZsdWlkIC5vZmZzZXQyOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjE3LjAyMTI3NjU5NTc0NDY4JTsqbWFyZ2luLWxlZnQ6MTYuOTE0ODkzNjE3MDIxMjc4JX0ucm93LWZsdWlkIC5vZmZzZXQxe21hcmdpbi1sZWZ0OjEwLjYzODI5Nzg3MjM0MDQyNSU7Km1hcmdpbi1sZWZ0OjEwLjUzMTkxNDg5MzYxNzAyJX0ucm93LWZsdWlkIC5vZmZzZXQxOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjguNTEwNjM4Mjk3ODcyMzQlOyptYXJnaW4tbGVmdDo4LjQwNDI1NTMxOTE0ODkzOCV9W2NsYXNzKj0ic3BhbiJdLmhpZGUsLnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl0uaGlkZXtkaXNwbGF5Om5vbmV9W2NsYXNzKj0ic3BhbiJdLnB1bGwtcmlnaHQsLnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl0ucHVsbC1yaWdodHtmbG9hdDpyaWdodH0uY29udGFpbmVye21hcmdpbi1yaWdodDphdXRvO21hcmdpbi1sZWZ0OmF1dG87Knpvb206MX0uY29udGFpbmVyOmJlZm9yZSwuY29udGFpbmVyOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5jb250YWluZXI6YWZ0ZXJ7Y2xlYXI6Ym90aH0uY29udGFpbmVyLWZsdWlke3BhZGRpbmctcmlnaHQ6MjBweDtwYWRkaW5nLWxlZnQ6MjBweDsqem9vbToxfS5jb250YWluZXItZmx1aWQ6YmVmb3JlLC5jb250YWluZXItZmx1aWQ6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LmNvbnRhaW5lci1mbHVpZDphZnRlcntjbGVhcjpib3RofXB7bWFyZ2luOjAgMCAxMHB4fS5sZWFke21hcmdpbi1ib3R0b206MjBweDtmb250LXNpemU6MjFweDtmb250LXdlaWdodDoyMDA7bGluZS1oZWlnaHQ6MzBweH1zbWFsbHtmb250LXNpemU6ODUlfXN0cm9uZ3tmb250LXdlaWdodDpib2xkfWVte2ZvbnQtc3R5bGU6aXRhbGljfWNpdGV7Zm9udC1zdHlsZTpub3JtYWx9Lm11dGVke2NvbG9yOiM5OTl9YS5tdXRlZDpob3ZlcixhLm11dGVkOmZvY3Vze2NvbG9yOiM4MDgwODB9LnRleHQtd2FybmluZ3tjb2xvcjojYzA5ODUzfWEudGV4dC13YXJuaW5nOmhvdmVyLGEudGV4dC13YXJuaW5nOmZvY3Vze2NvbG9yOiNhNDdlM2N9LnRleHQtZXJyb3J7Y29sb3I6I2I5NGE0OH1hLnRleHQtZXJyb3I6aG92ZXIsYS50ZXh0LWVycm9yOmZvY3Vze2NvbG9yOiM5NTNiMzl9LnRleHQtaW5mb3tjb2xvcjojM2E4N2FkfWEudGV4dC1pbmZvOmhvdmVyLGEudGV4dC1pbmZvOmZvY3Vze2NvbG9yOiMyZDY5ODd9LnRleHQtc3VjY2Vzc3tjb2xvcjojNDY4ODQ3fWEudGV4dC1zdWNjZXNzOmhvdmVyLGEudGV4dC1zdWNjZXNzOmZvY3Vze2NvbG9yOiMzNTY2MzV9LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9aDEsaDIsaDMsaDQsaDUsaDZ7bWFyZ2luOjEwcHggMDtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtd2VpZ2h0OmJvbGQ7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjppbmhlcml0O3RleHQtcmVuZGVyaW5nOm9wdGltaXplbGVnaWJpbGl0eX1oMSBzbWFsbCxoMiBzbWFsbCxoMyBzbWFsbCxoNCBzbWFsbCxoNSBzbWFsbCxoNiBzbWFsbHtmb250LXdlaWdodDpub3JtYWw7bGluZS1oZWlnaHQ6MTtjb2xvcjojOTk5fWgxLGgyLGgze2xpbmUtaGVpZ2h0OjQwcHh9aDF7Zm9udC1zaXplOjM4LjVweH1oMntmb250LXNpemU6MzEuNXB4fWgze2ZvbnQtc2l6ZToyNC41cHh9aDR7Zm9udC1zaXplOjE3LjVweH1oNXtmb250LXNpemU6MTRweH1oNntmb250LXNpemU6MTEuOXB4fWgxIHNtYWxse2ZvbnQtc2l6ZToyNC41cHh9aDIgc21hbGx7Zm9udC1zaXplOjE3LjVweH1oMyBzbWFsbHtmb250LXNpemU6MTRweH1oNCBzbWFsbHtmb250LXNpemU6MTRweH0ucGFnZS1oZWFkZXJ7cGFkZGluZy1ib3R0b206OXB4O21hcmdpbjoyMHB4IDAgMzBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWVlfXVsLG9se3BhZGRpbmc6MDttYXJnaW46MCAwIDEwcHggMjVweH11bCB1bCx1bCBvbCxvbCBvbCxvbCB1bHttYXJnaW4tYm90dG9tOjB9bGl7bGluZS1oZWlnaHQ6MjBweH11bC51bnN0eWxlZCxvbC51bnN0eWxlZHttYXJnaW4tbGVmdDowO2xpc3Qtc3R5bGU6bm9uZX11bC5pbmxpbmUsb2wuaW5saW5le21hcmdpbi1sZWZ0OjA7bGlzdC1zdHlsZTpub25lfXVsLmlubGluZT5saSxvbC5pbmxpbmU+bGl7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lO3BhZGRpbmctcmlnaHQ6NXB4O3BhZGRpbmctbGVmdDo1cHg7Knpvb206MX1kbHttYXJnaW4tYm90dG9tOjIwcHh9ZHQsZGR7bGluZS1oZWlnaHQ6MjBweH1kdHtmb250LXdlaWdodDpib2xkfWRke21hcmdpbi1sZWZ0OjEwcHh9LmRsLWhvcml6b250YWx7Knpvb206MX0uZGwtaG9yaXpvbnRhbDpiZWZvcmUsLmRsLWhvcml6b250YWw6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LmRsLWhvcml6b250YWw6YWZ0ZXJ7Y2xlYXI6Ym90aH0uZGwtaG9yaXpvbnRhbCBkdHtmbG9hdDpsZWZ0O3dpZHRoOjIwMHB4O292ZXJmbG93OmhpZGRlbjtjbGVhcjpsZWZ0O3RleHQtYWxpZ246cmlnaHQ7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9LmRsLWhvcml6b250YWwgZGR7bWFyZ2luLWxlZnQ6MjIwcHh9aHJ7bWFyZ2luOjIwcHggMDtib3JkZXI6MDtib3JkZXItdG9wOjFweCBzb2xpZCAjZWVlO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmZmZ9YWJiclt0aXRsZV0sYWJicltkYXRhLW9yaWdpbmFsLXRpdGxlXXtjdXJzb3I6aGVscDtib3JkZXItYm90dG9tOjFweCBkb3R0ZWQgIzk5OX1hYmJyLmluaXRpYWxpc217Zm9udC1zaXplOjkwJTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9YmxvY2txdW90ZXtwYWRkaW5nOjAgMCAwIDE1cHg7bWFyZ2luOjAgMCAyMHB4O2JvcmRlci1sZWZ0OjVweCBzb2xpZCAjZWVlfWJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjA7Zm9udC1zaXplOjE3LjVweDtmb250LXdlaWdodDozMDA7bGluZS1oZWlnaHQ6MS4yNX1ibG9ja3F1b3RlIHNtYWxse2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojOTk5fWJsb2NrcXVvdGUgc21hbGw6YmVmb3Jle2NvbnRlbnQ6J1wyMDE0IFwwMEEwJ31ibG9ja3F1b3RlLnB1bGwtcmlnaHR7ZmxvYXQ6cmlnaHQ7cGFkZGluZy1yaWdodDoxNXB4O3BhZGRpbmctbGVmdDowO2JvcmRlci1yaWdodDo1cHggc29saWQgI2VlZTtib3JkZXItbGVmdDowfWJsb2NrcXVvdGUucHVsbC1yaWdodCBwLGJsb2NrcXVvdGUucHVsbC1yaWdodCBzbWFsbHt0ZXh0LWFsaWduOnJpZ2h0fWJsb2NrcXVvdGUucHVsbC1yaWdodCBzbWFsbDpiZWZvcmV7Y29udGVudDonJ31ibG9ja3F1b3RlLnB1bGwtcmlnaHQgc21hbGw6YWZ0ZXJ7Y29udGVudDonXDAwQTAgXDIwMTQnfXE6YmVmb3JlLHE6YWZ0ZXIsYmxvY2txdW90ZTpiZWZvcmUsYmxvY2txdW90ZTphZnRlcntjb250ZW50OiIifWFkZHJlc3N7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjIwcHg7Zm9udC1zdHlsZTpub3JtYWw7bGluZS1oZWlnaHQ6MjBweH1jb2RlLHByZXtwYWRkaW5nOjAgM3B4IDJweDtmb250LWZhbWlseTpNb25hY28sTWVubG8sQ29uc29sYXMsIkNvdXJpZXIgTmV3Iixtb25vc3BhY2U7Zm9udC1zaXplOjEycHg7Y29sb3I6IzMzMzstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7Ym9yZGVyLXJhZGl1czozcHh9Y29kZXtwYWRkaW5nOjJweCA0cHg7Y29sb3I6I2QxNDt3aGl0ZS1zcGFjZTpub3dyYXA7YmFja2dyb3VuZC1jb2xvcjojZjdmN2Y5O2JvcmRlcjoxcHggc29saWQgI2UxZTFlOH1wcmV7ZGlzcGxheTpibG9jaztwYWRkaW5nOjkuNXB4O21hcmdpbjowIDAgMTBweDtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoyMHB4O3dvcmQtYnJlYWs6YnJlYWstYWxsO3dvcmQtd3JhcDpicmVhay13b3JkO3doaXRlLXNwYWNlOnByZTt3aGl0ZS1zcGFjZTpwcmUtd3JhcDtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwwLjE1KTstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHh9cHJlLnByZXR0eXByaW50e21hcmdpbi1ib3R0b206MjBweH1wcmUgY29kZXtwYWRkaW5nOjA7Y29sb3I6aW5oZXJpdDt3aGl0ZS1zcGFjZTpwcmU7d2hpdGUtc3BhY2U6cHJlLXdyYXA7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXI6MH0ucHJlLXNjcm9sbGFibGV7bWF4LWhlaWdodDozNDBweDtvdmVyZmxvdy15OnNjcm9sbH1mb3Jte21hcmdpbjowIDAgMjBweH1maWVsZHNldHtwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjB9bGVnZW5ke2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtwYWRkaW5nOjA7bWFyZ2luLWJvdHRvbToyMHB4O2ZvbnQtc2l6ZToyMXB4O2xpbmUtaGVpZ2h0OjQwcHg7Y29sb3I6IzMzMztib3JkZXI6MDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTVlNWU1fWxlZ2VuZCBzbWFsbHtmb250LXNpemU6MTVweDtjb2xvcjojOTk5fWxhYmVsLGlucHV0LGJ1dHRvbixzZWxlY3QsdGV4dGFyZWF7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjIwcHh9aW5wdXQsYnV0dG9uLHNlbGVjdCx0ZXh0YXJlYXtmb250LWZhbWlseToiSGVsdmV0aWNhIE5ldWUiLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmfWxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo1cHh9c2VsZWN0LHRleHRhcmVhLGlucHV0W3R5cGU9InRleHQiXSxpbnB1dFt0eXBlPSJwYXNzd29yZCJdLGlucHV0W3R5cGU9ImRhdGV0aW1lIl0saW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXSxpbnB1dFt0eXBlPSJkYXRlIl0saW5wdXRbdHlwZT0ibW9udGgiXSxpbnB1dFt0eXBlPSJ0aW1lIl0saW5wdXRbdHlwZT0id2VlayJdLGlucHV0W3R5cGU9Im51bWJlciJdLGlucHV0W3R5cGU9ImVtYWlsIl0saW5wdXRbdHlwZT0idXJsIl0saW5wdXRbdHlwZT0ic2VhcmNoIl0saW5wdXRbdHlwZT0idGVsIl0saW5wdXRbdHlwZT0iY29sb3IiXSwudW5lZGl0YWJsZS1pbnB1dHtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MjBweDtwYWRkaW5nOjRweCA2cHg7bWFyZ2luLWJvdHRvbToxMHB4O2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzU1NTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fWlucHV0LHRleHRhcmVhLC51bmVkaXRhYmxlLWlucHV0e3dpZHRoOjIwNnB4fXRleHRhcmVhe2hlaWdodDphdXRvfXRleHRhcmVhLGlucHV0W3R5cGU9InRleHQiXSxpbnB1dFt0eXBlPSJwYXNzd29yZCJdLGlucHV0W3R5cGU9ImRhdGV0aW1lIl0saW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXSxpbnB1dFt0eXBlPSJkYXRlIl0saW5wdXRbdHlwZT0ibW9udGgiXSxpbnB1dFt0eXBlPSJ0aW1lIl0saW5wdXRbdHlwZT0id2VlayJdLGlucHV0W3R5cGU9Im51bWJlciJdLGlucHV0W3R5cGU9ImVtYWlsIl0saW5wdXRbdHlwZT0idXJsIl0saW5wdXRbdHlwZT0ic2VhcmNoIl0saW5wdXRbdHlwZT0idGVsIl0saW5wdXRbdHlwZT0iY29sb3IiXSwudW5lZGl0YWJsZS1pbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTstd2Via2l0LXRyYW5zaXRpb246Ym9yZGVyIGxpbmVhciAuMnMsYm94LXNoYWRvdyBsaW5lYXIgLjJzOy1tb3otdHJhbnNpdGlvbjpib3JkZXIgbGluZWFyIC4ycyxib3gtc2hhZG93IGxpbmVhciAuMnM7LW8tdHJhbnNpdGlvbjpib3JkZXIgbGluZWFyIC4ycyxib3gtc2hhZG93IGxpbmVhciAuMnM7dHJhbnNpdGlvbjpib3JkZXIgbGluZWFyIC4ycyxib3gtc2hhZG93IGxpbmVhciAuMnN9dGV4dGFyZWE6Zm9jdXMsaW5wdXRbdHlwZT0idGV4dCJdOmZvY3VzLGlucHV0W3R5cGU9InBhc3N3b3JkIl06Zm9jdXMsaW5wdXRbdHlwZT0iZGF0ZXRpbWUiXTpmb2N1cyxpbnB1dFt0eXBlPSJkYXRldGltZS1sb2NhbCJdOmZvY3VzLGlucHV0W3R5cGU9ImRhdGUiXTpmb2N1cyxpbnB1dFt0eXBlPSJtb250aCJdOmZvY3VzLGlucHV0W3R5cGU9InRpbWUiXTpmb2N1cyxpbnB1dFt0eXBlPSJ3ZWVrIl06Zm9jdXMsaW5wdXRbdHlwZT0ibnVtYmVyIl06Zm9jdXMsaW5wdXRbdHlwZT0iZW1haWwiXTpmb2N1cyxpbnB1dFt0eXBlPSJ1cmwiXTpmb2N1cyxpbnB1dFt0eXBlPSJzZWFyY2giXTpmb2N1cyxpbnB1dFt0eXBlPSJ0ZWwiXTpmb2N1cyxpbnB1dFt0eXBlPSJjb2xvciJdOmZvY3VzLC51bmVkaXRhYmxlLWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjpyZ2JhKDgyLDE2OCwyMzYsMC44KTtvdXRsaW5lOjA7b3V0bGluZTp0aGluIGRvdHRlZCBcOTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA4cHggcmdiYSg4MiwxNjgsMjM2LDAuNik7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgOHB4IHJnYmEoODIsMTY4LDIzNiwwLjYpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA4cHggcmdiYSg4MiwxNjgsMjM2LDAuNil9aW5wdXRbdHlwZT0icmFkaW8iXSxpbnB1dFt0eXBlPSJjaGVja2JveCJde21hcmdpbjo0cHggMCAwO21hcmdpbi10b3A6MXB4IFw5OyptYXJnaW4tdG9wOjA7bGluZS1oZWlnaHQ6bm9ybWFsfWlucHV0W3R5cGU9ImZpbGUiXSxpbnB1dFt0eXBlPSJpbWFnZSJdLGlucHV0W3R5cGU9InN1Ym1pdCJdLGlucHV0W3R5cGU9InJlc2V0Il0saW5wdXRbdHlwZT0iYnV0dG9uIl0saW5wdXRbdHlwZT0icmFkaW8iXSxpbnB1dFt0eXBlPSJjaGVja2JveCJde3dpZHRoOmF1dG99c2VsZWN0LGlucHV0W3R5cGU9ImZpbGUiXXtoZWlnaHQ6MzBweDsqbWFyZ2luLXRvcDo0cHg7bGluZS1oZWlnaHQ6MzBweH1zZWxlY3R7d2lkdGg6MjIwcHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjY31zZWxlY3RbbXVsdGlwbGVdLHNlbGVjdFtzaXplXXtoZWlnaHQ6YXV0b31zZWxlY3Q6Zm9jdXMsaW5wdXRbdHlwZT0iZmlsZSJdOmZvY3VzLGlucHV0W3R5cGU9InJhZGlvIl06Zm9jdXMsaW5wdXRbdHlwZT0iY2hlY2tib3giXTpmb2N1c3tvdXRsaW5lOnRoaW4gZG90dGVkICMzMzM7b3V0bGluZTo1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6LTJweH0udW5lZGl0YWJsZS1pbnB1dCwudW5lZGl0YWJsZS10ZXh0YXJlYXtjb2xvcjojOTk5O2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOiNmY2ZjZmM7Ym9yZGVyLWNvbG9yOiNjY2M7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDI1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wMjUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wMjUpfS51bmVkaXRhYmxlLWlucHV0e292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9LnVuZWRpdGFibGUtdGV4dGFyZWF7d2lkdGg6YXV0bztoZWlnaHQ6YXV0b31pbnB1dDotbW96LXBsYWNlaG9sZGVyLHRleHRhcmVhOi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6Izk5OX1pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXIsdGV4dGFyZWE6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiM5OTl9aW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIsdGV4dGFyZWE6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6Izk5OX0ucmFkaW8sLmNoZWNrYm94e21pbi1oZWlnaHQ6MjBweDtwYWRkaW5nLWxlZnQ6MjBweH0ucmFkaW8gaW5wdXRbdHlwZT0icmFkaW8iXSwuY2hlY2tib3ggaW5wdXRbdHlwZT0iY2hlY2tib3giXXtmbG9hdDpsZWZ0O21hcmdpbi1sZWZ0Oi0yMHB4fS5jb250cm9scz4ucmFkaW86Zmlyc3QtY2hpbGQsLmNvbnRyb2xzPi5jaGVja2JveDpmaXJzdC1jaGlsZHtwYWRkaW5nLXRvcDo1cHh9LnJhZGlvLmlubGluZSwuY2hlY2tib3guaW5saW5le2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmctdG9wOjVweDttYXJnaW4tYm90dG9tOjA7dmVydGljYWwtYWxpZ246bWlkZGxlfS5yYWRpby5pbmxpbmUrLnJhZGlvLmlubGluZSwuY2hlY2tib3guaW5saW5lKy5jaGVja2JveC5pbmxpbmV7bWFyZ2luLWxlZnQ6MTBweH0uaW5wdXQtbWluaXt3aWR0aDo2MHB4fS5pbnB1dC1zbWFsbHt3aWR0aDo5MHB4fS5pbnB1dC1tZWRpdW17d2lkdGg6MTUwcHh9LmlucHV0LWxhcmdle3dpZHRoOjIxMHB4fS5pbnB1dC14bGFyZ2V7d2lkdGg6MjcwcHh9LmlucHV0LXh4bGFyZ2V7d2lkdGg6NTMwcHh9aW5wdXRbY2xhc3MqPSJzcGFuIl0sc2VsZWN0W2NsYXNzKj0ic3BhbiJdLHRleHRhcmVhW2NsYXNzKj0ic3BhbiJdLC51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgaW5wdXRbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCBzZWxlY3RbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCB0ZXh0YXJlYVtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIC51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj0ic3BhbiJde2Zsb2F0Om5vbmU7bWFyZ2luLWxlZnQ6MH0uaW5wdXQtYXBwZW5kIGlucHV0W2NsYXNzKj0ic3BhbiJdLC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXRbY2xhc3MqPSJzcGFuIl0sLmlucHV0LXByZXBlbmQgaW5wdXRbY2xhc3MqPSJzcGFuIl0sLmlucHV0LXByZXBlbmQgLnVuZWRpdGFibGUtaW5wdXRbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCBpbnB1dFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIHNlbGVjdFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIHRleHRhcmVhW2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgLnVuZWRpdGFibGUtaW5wdXRbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCAuaW5wdXQtcHJlcGVuZCBbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCAuaW5wdXQtYXBwZW5kIFtjbGFzcyo9InNwYW4iXXtkaXNwbGF5OmlubGluZS1ibG9ja31pbnB1dCx0ZXh0YXJlYSwudW5lZGl0YWJsZS1pbnB1dHttYXJnaW4tbGVmdDowfS5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdK1tjbGFzcyo9InNwYW4iXXttYXJnaW4tbGVmdDoyMHB4fWlucHV0LnNwYW4xMix0ZXh0YXJlYS5zcGFuMTIsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEye3dpZHRoOjkyNnB4fWlucHV0LnNwYW4xMSx0ZXh0YXJlYS5zcGFuMTEsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjExe3dpZHRoOjg0NnB4fWlucHV0LnNwYW4xMCx0ZXh0YXJlYS5zcGFuMTAsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEwe3dpZHRoOjc2NnB4fWlucHV0LnNwYW45LHRleHRhcmVhLnNwYW45LC51bmVkaXRhYmxlLWlucHV0LnNwYW45e3dpZHRoOjY4NnB4fWlucHV0LnNwYW44LHRleHRhcmVhLnNwYW44LC51bmVkaXRhYmxlLWlucHV0LnNwYW44e3dpZHRoOjYwNnB4fWlucHV0LnNwYW43LHRleHRhcmVhLnNwYW43LC51bmVkaXRhYmxlLWlucHV0LnNwYW43e3dpZHRoOjUyNnB4fWlucHV0LnNwYW42LHRleHRhcmVhLnNwYW42LC51bmVkaXRhYmxlLWlucHV0LnNwYW42e3dpZHRoOjQ0NnB4fWlucHV0LnNwYW41LHRleHRhcmVhLnNwYW41LC51bmVkaXRhYmxlLWlucHV0LnNwYW41e3dpZHRoOjM2NnB4fWlucHV0LnNwYW40LHRleHRhcmVhLnNwYW40LC51bmVkaXRhYmxlLWlucHV0LnNwYW40e3dpZHRoOjI4NnB4fWlucHV0LnNwYW4zLHRleHRhcmVhLnNwYW4zLC51bmVkaXRhYmxlLWlucHV0LnNwYW4ze3dpZHRoOjIwNnB4fWlucHV0LnNwYW4yLHRleHRhcmVhLnNwYW4yLC51bmVkaXRhYmxlLWlucHV0LnNwYW4ye3dpZHRoOjEyNnB4fWlucHV0LnNwYW4xLHRleHRhcmVhLnNwYW4xLC51bmVkaXRhYmxlLWlucHV0LnNwYW4xe3dpZHRoOjQ2cHh9LmNvbnRyb2xzLXJvd3sqem9vbToxfS5jb250cm9scy1yb3c6YmVmb3JlLC5jb250cm9scy1yb3c6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LmNvbnRyb2xzLXJvdzphZnRlcntjbGVhcjpib3RofS5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgLmNvbnRyb2xzLXJvdyBbY2xhc3MqPSJzcGFuIl17ZmxvYXQ6bGVmdH0uY29udHJvbHMtcm93IC5jaGVja2JveFtjbGFzcyo9InNwYW4iXSwuY29udHJvbHMtcm93IC5yYWRpb1tjbGFzcyo9InNwYW4iXXtwYWRkaW5nLXRvcDo1cHh9aW5wdXRbZGlzYWJsZWRdLHNlbGVjdFtkaXNhYmxlZF0sdGV4dGFyZWFbZGlzYWJsZWRdLGlucHV0W3JlYWRvbmx5XSxzZWxlY3RbcmVhZG9ubHldLHRleHRhcmVhW3JlYWRvbmx5XXtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjojZWVlfWlucHV0W3R5cGU9InJhZGlvIl1bZGlzYWJsZWRdLGlucHV0W3R5cGU9ImNoZWNrYm94Il1bZGlzYWJsZWRdLGlucHV0W3R5cGU9InJhZGlvIl1bcmVhZG9ubHldLGlucHV0W3R5cGU9ImNoZWNrYm94Il1bcmVhZG9ubHlde2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmNvbnRyb2wtZ3JvdXAud2FybmluZyAuY29udHJvbC1sYWJlbCwuY29udHJvbC1ncm91cC53YXJuaW5nIC5oZWxwLWJsb2NrLC5jb250cm9sLWdyb3VwLndhcm5pbmcgLmhlbHAtaW5saW5le2NvbG9yOiNjMDk4NTN9LmNvbnRyb2wtZ3JvdXAud2FybmluZyAuY2hlY2tib3gsLmNvbnRyb2wtZ3JvdXAud2FybmluZyAucmFkaW8sLmNvbnRyb2wtZ3JvdXAud2FybmluZyBpbnB1dCwuY29udHJvbC1ncm91cC53YXJuaW5nIHNlbGVjdCwuY29udHJvbC1ncm91cC53YXJuaW5nIHRleHRhcmVhe2NvbG9yOiNjMDk4NTN9LmNvbnRyb2wtZ3JvdXAud2FybmluZyBpbnB1dCwuY29udHJvbC1ncm91cC53YXJuaW5nIHNlbGVjdCwuY29udHJvbC1ncm91cC53YXJuaW5nIHRleHRhcmVhe2JvcmRlci1jb2xvcjojYzA5ODUzOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KX0uY29udHJvbC1ncm91cC53YXJuaW5nIGlucHV0OmZvY3VzLC5jb250cm9sLWdyb3VwLndhcm5pbmcgc2VsZWN0OmZvY3VzLC5jb250cm9sLWdyb3VwLndhcm5pbmcgdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNhNDdlM2M7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICNkYmM1OWU7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICNkYmM1OWU7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjZGJjNTllfS5jb250cm9sLWdyb3VwLndhcm5pbmcgLmlucHV0LXByZXBlbmQgLmFkZC1vbiwuY29udHJvbC1ncm91cC53YXJuaW5nIC5pbnB1dC1hcHBlbmQgLmFkZC1vbntjb2xvcjojYzA5ODUzO2JhY2tncm91bmQtY29sb3I6I2ZjZjhlMztib3JkZXItY29sb3I6I2MwOTg1M30uY29udHJvbC1ncm91cC5lcnJvciAuY29udHJvbC1sYWJlbCwuY29udHJvbC1ncm91cC5lcnJvciAuaGVscC1ibG9jaywuY29udHJvbC1ncm91cC5lcnJvciAuaGVscC1pbmxpbmV7Y29sb3I6I2I5NGE0OH0uY29udHJvbC1ncm91cC5lcnJvciAuY2hlY2tib3gsLmNvbnRyb2wtZ3JvdXAuZXJyb3IgLnJhZGlvLC5jb250cm9sLWdyb3VwLmVycm9yIGlucHV0LC5jb250cm9sLWdyb3VwLmVycm9yIHNlbGVjdCwuY29udHJvbC1ncm91cC5lcnJvciB0ZXh0YXJlYXtjb2xvcjojYjk0YTQ4fS5jb250cm9sLWdyb3VwLmVycm9yIGlucHV0LC5jb250cm9sLWdyb3VwLmVycm9yIHNlbGVjdCwuY29udHJvbC1ncm91cC5lcnJvciB0ZXh0YXJlYXtib3JkZXItY29sb3I6I2I5NGE0ODstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSl9LmNvbnRyb2wtZ3JvdXAuZXJyb3IgaW5wdXQ6Zm9jdXMsLmNvbnRyb2wtZ3JvdXAuZXJyb3Igc2VsZWN0OmZvY3VzLC5jb250cm9sLWdyb3VwLmVycm9yIHRleHRhcmVhOmZvY3Vze2JvcmRlci1jb2xvcjojOTUzYjM5Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjZDU5MzkyOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjZDU5MzkyO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggI2Q1OTM5Mn0uY29udHJvbC1ncm91cC5lcnJvciAuaW5wdXQtcHJlcGVuZCAuYWRkLW9uLC5jb250cm9sLWdyb3VwLmVycm9yIC5pbnB1dC1hcHBlbmQgLmFkZC1vbntjb2xvcjojYjk0YTQ4O2JhY2tncm91bmQtY29sb3I6I2YyZGVkZTtib3JkZXItY29sb3I6I2I5NGE0OH0uY29udHJvbC1ncm91cC5zdWNjZXNzIC5jb250cm9sLWxhYmVsLC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmhlbHAtYmxvY2ssLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAuaGVscC1pbmxpbmV7Y29sb3I6IzQ2ODg0N30uY29udHJvbC1ncm91cC5zdWNjZXNzIC5jaGVja2JveCwuY29udHJvbC1ncm91cC5zdWNjZXNzIC5yYWRpbywuY29udHJvbC1ncm91cC5zdWNjZXNzIGlucHV0LC5jb250cm9sLWdyb3VwLnN1Y2Nlc3Mgc2VsZWN0LC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgdGV4dGFyZWF7Y29sb3I6IzQ2ODg0N30uY29udHJvbC1ncm91cC5zdWNjZXNzIGlucHV0LC5jb250cm9sLWdyb3VwLnN1Y2Nlc3Mgc2VsZWN0LC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgdGV4dGFyZWF7Ym9yZGVyLWNvbG9yOiM0Njg4NDc7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpfS5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgaW5wdXQ6Zm9jdXMsLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyBzZWxlY3Q6Zm9jdXMsLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyB0ZXh0YXJlYTpmb2N1c3tib3JkZXItY29sb3I6IzM1NjYzNTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggIzdhYmE3YjstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggIzdhYmE3Yjtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICM3YWJhN2J9LmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAuaW5wdXQtcHJlcGVuZCAuYWRkLW9uLC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmlucHV0LWFwcGVuZCAuYWRkLW9ue2NvbG9yOiM0Njg4NDc7YmFja2dyb3VuZC1jb2xvcjojZGZmMGQ4O2JvcmRlci1jb2xvcjojNDY4ODQ3fS5jb250cm9sLWdyb3VwLmluZm8gLmNvbnRyb2wtbGFiZWwsLmNvbnRyb2wtZ3JvdXAuaW5mbyAuaGVscC1ibG9jaywuY29udHJvbC1ncm91cC5pbmZvIC5oZWxwLWlubGluZXtjb2xvcjojM2E4N2FkfS5jb250cm9sLWdyb3VwLmluZm8gLmNoZWNrYm94LC5jb250cm9sLWdyb3VwLmluZm8gLnJhZGlvLC5jb250cm9sLWdyb3VwLmluZm8gaW5wdXQsLmNvbnRyb2wtZ3JvdXAuaW5mbyBzZWxlY3QsLmNvbnRyb2wtZ3JvdXAuaW5mbyB0ZXh0YXJlYXtjb2xvcjojM2E4N2FkfS5jb250cm9sLWdyb3VwLmluZm8gaW5wdXQsLmNvbnRyb2wtZ3JvdXAuaW5mbyBzZWxlY3QsLmNvbnRyb2wtZ3JvdXAuaW5mbyB0ZXh0YXJlYXtib3JkZXItY29sb3I6IzNhODdhZDstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSl9LmNvbnRyb2wtZ3JvdXAuaW5mbyBpbnB1dDpmb2N1cywuY29udHJvbC1ncm91cC5pbmZvIHNlbGVjdDpmb2N1cywuY29udHJvbC1ncm91cC5pbmZvIHRleHRhcmVhOmZvY3Vze2JvcmRlci1jb2xvcjojMmQ2OTg3Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjN2FiNWQzOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjN2FiNWQzO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggIzdhYjVkM30uY29udHJvbC1ncm91cC5pbmZvIC5pbnB1dC1wcmVwZW5kIC5hZGQtb24sLmNvbnRyb2wtZ3JvdXAuaW5mbyAuaW5wdXQtYXBwZW5kIC5hZGQtb257Y29sb3I6IzNhODdhZDtiYWNrZ3JvdW5kLWNvbG9yOiNkOWVkZjc7Ym9yZGVyLWNvbG9yOiMzYTg3YWR9aW5wdXQ6Zm9jdXM6aW52YWxpZCx0ZXh0YXJlYTpmb2N1czppbnZhbGlkLHNlbGVjdDpmb2N1czppbnZhbGlke2NvbG9yOiNiOTRhNDg7Ym9yZGVyLWNvbG9yOiNlZTVmNWJ9aW5wdXQ6Zm9jdXM6aW52YWxpZDpmb2N1cyx0ZXh0YXJlYTpmb2N1czppbnZhbGlkOmZvY3VzLHNlbGVjdDpmb2N1czppbnZhbGlkOmZvY3Vze2JvcmRlci1jb2xvcjojZTkzMjJkOy13ZWJraXQtYm94LXNoYWRvdzowIDAgNnB4ICNmOGI5Yjc7LW1vei1ib3gtc2hhZG93OjAgMCA2cHggI2Y4YjliNztib3gtc2hhZG93OjAgMCA2cHggI2Y4YjliN30uZm9ybS1hY3Rpb25ze3BhZGRpbmc6MTlweCAyMHB4IDIwcHg7bWFyZ2luLXRvcDoyMHB4O21hcmdpbi1ib3R0b206MjBweDtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNTsqem9vbToxfS5mb3JtLWFjdGlvbnM6YmVmb3JlLC5mb3JtLWFjdGlvbnM6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LmZvcm0tYWN0aW9uczphZnRlcntjbGVhcjpib3RofS5oZWxwLWJsb2NrLC5oZWxwLWlubGluZXtjb2xvcjojNTk1OTU5fS5oZWxwLWJsb2Nre2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbToxMHB4fS5oZWxwLWlubGluZXtkaXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7cGFkZGluZy1sZWZ0OjVweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Knpvb206MX0uaW5wdXQtYXBwZW5kLC5pbnB1dC1wcmVwZW5ke2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1ib3R0b206MTBweDtmb250LXNpemU6MDt3aGl0ZS1zcGFjZTpub3dyYXA7dmVydGljYWwtYWxpZ246bWlkZGxlfS5pbnB1dC1hcHBlbmQgaW5wdXQsLmlucHV0LXByZXBlbmQgaW5wdXQsLmlucHV0LWFwcGVuZCBzZWxlY3QsLmlucHV0LXByZXBlbmQgc2VsZWN0LC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXQsLmlucHV0LXByZXBlbmQgLnVuZWRpdGFibGUtaW5wdXQsLmlucHV0LWFwcGVuZCAuZHJvcGRvd24tbWVudSwuaW5wdXQtcHJlcGVuZCAuZHJvcGRvd24tbWVudSwuaW5wdXQtYXBwZW5kIC5wb3BvdmVyLC5pbnB1dC1wcmVwZW5kIC5wb3BvdmVye2ZvbnQtc2l6ZToxNHB4fS5pbnB1dC1hcHBlbmQgaW5wdXQsLmlucHV0LXByZXBlbmQgaW5wdXQsLmlucHV0LWFwcGVuZCBzZWxlY3QsLmlucHV0LXByZXBlbmQgc2VsZWN0LC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXQsLmlucHV0LXByZXBlbmQgLnVuZWRpdGFibGUtaW5wdXR7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLWJvdHRvbTowOyptYXJnaW4tbGVmdDowO3ZlcnRpY2FsLWFsaWduOnRvcDstd2Via2l0LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7LW1vei1ib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwO2JvcmRlci1yYWRpdXM6MCA0cHggNHB4IDB9LmlucHV0LWFwcGVuZCBpbnB1dDpmb2N1cywuaW5wdXQtcHJlcGVuZCBpbnB1dDpmb2N1cywuaW5wdXQtYXBwZW5kIHNlbGVjdDpmb2N1cywuaW5wdXQtcHJlcGVuZCBzZWxlY3Q6Zm9jdXMsLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1dDpmb2N1cywuaW5wdXQtcHJlcGVuZCAudW5lZGl0YWJsZS1pbnB1dDpmb2N1c3t6LWluZGV4OjJ9LmlucHV0LWFwcGVuZCAuYWRkLW9uLC5pbnB1dC1wcmVwZW5kIC5hZGQtb257ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6YXV0bztoZWlnaHQ6MjBweDttaW4td2lkdGg6MTZweDtwYWRkaW5nOjRweCA1cHg7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1zaGFkb3c6MCAxcHggMCAjZmZmO2JhY2tncm91bmQtY29sb3I6I2VlZTtib3JkZXI6MXB4IHNvbGlkICNjY2N9LmlucHV0LWFwcGVuZCAuYWRkLW9uLC5pbnB1dC1wcmVwZW5kIC5hZGQtb24sLmlucHV0LWFwcGVuZCAuYnRuLC5pbnB1dC1wcmVwZW5kIC5idG4sLmlucHV0LWFwcGVuZCAuYnRuLWdyb3VwPi5kcm9wZG93bi10b2dnbGUsLmlucHV0LXByZXBlbmQgLmJ0bi1ncm91cD4uZHJvcGRvd24tdG9nZ2xle3ZlcnRpY2FsLWFsaWduOnRvcDstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9LmlucHV0LWFwcGVuZCAuYWN0aXZlLC5pbnB1dC1wcmVwZW5kIC5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojYTlkYmE5O2JvcmRlci1jb2xvcjojNDZhNTQ2fS5pbnB1dC1wcmVwZW5kIC5hZGQtb24sLmlucHV0LXByZXBlbmQgLmJ0bnttYXJnaW4tcmlnaHQ6LTFweH0uaW5wdXQtcHJlcGVuZCAuYWRkLW9uOmZpcnN0LWNoaWxkLC5pbnB1dC1wcmVwZW5kIC5idG46Zmlyc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHggMCAwIDRweDtib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4fS5pbnB1dC1hcHBlbmQgaW5wdXQsLmlucHV0LWFwcGVuZCBzZWxlY3QsLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1dHstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4O2JvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHh9LmlucHV0LWFwcGVuZCBpbnB1dCsuYnRuLWdyb3VwIC5idG46bGFzdC1jaGlsZCwuaW5wdXQtYXBwZW5kIHNlbGVjdCsuYnRuLWdyb3VwIC5idG46bGFzdC1jaGlsZCwuaW5wdXQtYXBwZW5kIC51bmVkaXRhYmxlLWlucHV0Ky5idG4tZ3JvdXAgLmJ0bjpsYXN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDstbW96LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7Ym9yZGVyLXJhZGl1czowIDRweCA0cHggMH0uaW5wdXQtYXBwZW5kIC5hZGQtb24sLmlucHV0LWFwcGVuZCAuYnRuLC5pbnB1dC1hcHBlbmQgLmJ0bi1ncm91cHttYXJnaW4tbGVmdDotMXB4fS5pbnB1dC1hcHBlbmQgLmFkZC1vbjpsYXN0LWNoaWxkLC5pbnB1dC1hcHBlbmQgLmJ0bjpsYXN0LWNoaWxkLC5pbnB1dC1hcHBlbmQgLmJ0bi1ncm91cDpsYXN0LWNoaWxkPi5kcm9wZG93bi10b2dnbGV7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwOy1tb3otYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDtib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwfS5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCBpbnB1dCwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgc2VsZWN0LC5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1dHstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9LmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIGlucHV0Ky5idG4tZ3JvdXAgLmJ0biwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgc2VsZWN0Ky5idG4tZ3JvdXAgLmJ0biwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXQrLmJ0bi1ncm91cCAuYnRuey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDstbW96LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7Ym9yZGVyLXJhZGl1czowIDRweCA0cHggMH0uaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLmFkZC1vbjpmaXJzdC1jaGlsZCwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLmJ0bjpmaXJzdC1jaGlsZHttYXJnaW4tcmlnaHQ6LTFweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4O2JvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHh9LmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIC5hZGQtb246bGFzdC1jaGlsZCwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLmJ0bjpsYXN0LWNoaWxke21hcmdpbi1sZWZ0Oi0xcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwOy1tb3otYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDtib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwfS5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCAuYnRuLWdyb3VwOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjB9aW5wdXQuc2VhcmNoLXF1ZXJ5e3BhZGRpbmctcmlnaHQ6MTRweDtwYWRkaW5nLXJpZ2h0OjRweCBcOTtwYWRkaW5nLWxlZnQ6MTRweDtwYWRkaW5nLWxlZnQ6NHB4IFw5O21hcmdpbi1ib3R0b206MDstd2Via2l0LWJvcmRlci1yYWRpdXM6MTVweDstbW96LWJvcmRlci1yYWRpdXM6MTVweDtib3JkZXItcmFkaXVzOjE1cHh9LmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQgLnNlYXJjaC1xdWVyeSwuZm9ybS1zZWFyY2ggLmlucHV0LXByZXBlbmQgLnNlYXJjaC1xdWVyeXstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9LmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQgLnNlYXJjaC1xdWVyeXstd2Via2l0LWJvcmRlci1yYWRpdXM6MTRweCAwIDAgMTRweDstbW96LWJvcmRlci1yYWRpdXM6MTRweCAwIDAgMTRweDtib3JkZXItcmFkaXVzOjE0cHggMCAwIDE0cHh9LmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQgLmJ0bnstd2Via2l0LWJvcmRlci1yYWRpdXM6MCAxNHB4IDE0cHggMDstbW96LWJvcmRlci1yYWRpdXM6MCAxNHB4IDE0cHggMDtib3JkZXItcmFkaXVzOjAgMTRweCAxNHB4IDB9LmZvcm0tc2VhcmNoIC5pbnB1dC1wcmVwZW5kIC5zZWFyY2gtcXVlcnl7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgMTRweCAxNHB4IDA7LW1vei1ib3JkZXItcmFkaXVzOjAgMTRweCAxNHB4IDA7Ym9yZGVyLXJhZGl1czowIDE0cHggMTRweCAwfS5mb3JtLXNlYXJjaCAuaW5wdXQtcHJlcGVuZCAuYnRuey13ZWJraXQtYm9yZGVyLXJhZGl1czoxNHB4IDAgMCAxNHB4Oy1tb3otYm9yZGVyLXJhZGl1czoxNHB4IDAgMCAxNHB4O2JvcmRlci1yYWRpdXM6MTRweCAwIDAgMTRweH0uZm9ybS1zZWFyY2ggaW5wdXQsLmZvcm0taW5saW5lIGlucHV0LC5mb3JtLWhvcml6b250YWwgaW5wdXQsLmZvcm0tc2VhcmNoIHRleHRhcmVhLC5mb3JtLWlubGluZSB0ZXh0YXJlYSwuZm9ybS1ob3Jpem9udGFsIHRleHRhcmVhLC5mb3JtLXNlYXJjaCBzZWxlY3QsLmZvcm0taW5saW5lIHNlbGVjdCwuZm9ybS1ob3Jpem9udGFsIHNlbGVjdCwuZm9ybS1zZWFyY2ggLmhlbHAtaW5saW5lLC5mb3JtLWlubGluZSAuaGVscC1pbmxpbmUsLmZvcm0taG9yaXpvbnRhbCAuaGVscC1pbmxpbmUsLmZvcm0tc2VhcmNoIC51bmVkaXRhYmxlLWlucHV0LC5mb3JtLWlubGluZSAudW5lZGl0YWJsZS1pbnB1dCwuZm9ybS1ob3Jpem9udGFsIC51bmVkaXRhYmxlLWlucHV0LC5mb3JtLXNlYXJjaCAuaW5wdXQtcHJlcGVuZCwuZm9ybS1pbmxpbmUgLmlucHV0LXByZXBlbmQsLmZvcm0taG9yaXpvbnRhbCAuaW5wdXQtcHJlcGVuZCwuZm9ybS1zZWFyY2ggLmlucHV0LWFwcGVuZCwuZm9ybS1pbmxpbmUgLmlucHV0LWFwcGVuZCwuZm9ybS1ob3Jpem9udGFsIC5pbnB1dC1hcHBlbmR7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lO21hcmdpbi1ib3R0b206MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Knpvb206MX0uZm9ybS1zZWFyY2ggLmhpZGUsLmZvcm0taW5saW5lIC5oaWRlLC5mb3JtLWhvcml6b250YWwgLmhpZGV7ZGlzcGxheTpub25lfS5mb3JtLXNlYXJjaCBsYWJlbCwuZm9ybS1pbmxpbmUgbGFiZWwsLmZvcm0tc2VhcmNoIC5idG4tZ3JvdXAsLmZvcm0taW5saW5lIC5idG4tZ3JvdXB7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQsLmZvcm0taW5saW5lIC5pbnB1dC1hcHBlbmQsLmZvcm0tc2VhcmNoIC5pbnB1dC1wcmVwZW5kLC5mb3JtLWlubGluZSAuaW5wdXQtcHJlcGVuZHttYXJnaW4tYm90dG9tOjB9LmZvcm0tc2VhcmNoIC5yYWRpbywuZm9ybS1zZWFyY2ggLmNoZWNrYm94LC5mb3JtLWlubGluZSAucmFkaW8sLmZvcm0taW5saW5lIC5jaGVja2JveHtwYWRkaW5nLWxlZnQ6MDttYXJnaW4tYm90dG9tOjA7dmVydGljYWwtYWxpZ246bWlkZGxlfS5mb3JtLXNlYXJjaCAucmFkaW8gaW5wdXRbdHlwZT0icmFkaW8iXSwuZm9ybS1zZWFyY2ggLmNoZWNrYm94IGlucHV0W3R5cGU9ImNoZWNrYm94Il0sLmZvcm0taW5saW5lIC5yYWRpbyBpbnB1dFt0eXBlPSJyYWRpbyJdLC5mb3JtLWlubGluZSAuY2hlY2tib3ggaW5wdXRbdHlwZT0iY2hlY2tib3giXXtmbG9hdDpsZWZ0O21hcmdpbi1yaWdodDozcHg7bWFyZ2luLWxlZnQ6MH0uY29udHJvbC1ncm91cHttYXJnaW4tYm90dG9tOjEwcHh9bGVnZW5kKy5jb250cm9sLWdyb3Vwe21hcmdpbi10b3A6MjBweDstd2Via2l0LW1hcmdpbi10b3AtY29sbGFwc2U6c2VwYXJhdGV9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1ncm91cHttYXJnaW4tYm90dG9tOjIwcHg7Knpvb206MX0uZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWdyb3VwOmJlZm9yZSwuZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWdyb3VwOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtZ3JvdXA6YWZ0ZXJ7Y2xlYXI6Ym90aH0uZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWxhYmVse2Zsb2F0OmxlZnQ7d2lkdGg6MTYwcHg7cGFkZGluZy10b3A6NXB4O3RleHQtYWxpZ246cmlnaHR9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbHN7KmRpc3BsYXk6aW5saW5lLWJsb2NrOypwYWRkaW5nLWxlZnQ6MjBweDttYXJnaW4tbGVmdDoxODBweDsqbWFyZ2luLWxlZnQ6MH0uZm9ybS1ob3Jpem9udGFsIC5jb250cm9sczpmaXJzdC1jaGlsZHsqcGFkZGluZy1sZWZ0OjE4MHB4fS5mb3JtLWhvcml6b250YWwgLmhlbHAtYmxvY2t7bWFyZ2luLWJvdHRvbTowfS5mb3JtLWhvcml6b250YWwgaW5wdXQrLmhlbHAtYmxvY2ssLmZvcm0taG9yaXpvbnRhbCBzZWxlY3QrLmhlbHAtYmxvY2ssLmZvcm0taG9yaXpvbnRhbCB0ZXh0YXJlYSsuaGVscC1ibG9jaywuZm9ybS1ob3Jpem9udGFsIC51bmVkaXRhYmxlLWlucHV0Ky5oZWxwLWJsb2NrLC5mb3JtLWhvcml6b250YWwgLmlucHV0LXByZXBlbmQrLmhlbHAtYmxvY2ssLmZvcm0taG9yaXpvbnRhbCAuaW5wdXQtYXBwZW5kKy5oZWxwLWJsb2Nre21hcmdpbi10b3A6MTBweH0uZm9ybS1ob3Jpem9udGFsIC5mb3JtLWFjdGlvbnN7cGFkZGluZy1sZWZ0OjE4MHB4fXRhYmxle21heC13aWR0aDoxMDAlO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlci1zcGFjaW5nOjB9LnRhYmxle3dpZHRoOjEwMCU7bWFyZ2luLWJvdHRvbToyMHB4fS50YWJsZSB0aCwudGFibGUgdGR7cGFkZGluZzo4cHg7bGluZS1oZWlnaHQ6MjBweDt0ZXh0LWFsaWduOmxlZnQ7dmVydGljYWwtYWxpZ246dG9wO2JvcmRlci10b3A6MXB4IHNvbGlkICNkZGR9LnRhYmxlIHRoe2ZvbnQtd2VpZ2h0OmJvbGR9LnRhYmxlIHRoZWFkIHRoe3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0udGFibGUgY2FwdGlvbit0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUgY2FwdGlvbit0aGVhZCB0cjpmaXJzdC1jaGlsZCB0ZCwudGFibGUgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlIGNvbGdyb3VwK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRkLC50YWJsZSB0aGVhZDpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGR7Ym9yZGVyLXRvcDowfS50YWJsZSB0Ym9keSt0Ym9keXtib3JkZXItdG9wOjJweCBzb2xpZCAjZGRkfS50YWJsZSAudGFibGV7YmFja2dyb3VuZC1jb2xvcjojZmZmfS50YWJsZS1jb25kZW5zZWQgdGgsLnRhYmxlLWNvbmRlbnNlZCB0ZHtwYWRkaW5nOjRweCA1cHh9LnRhYmxlLWJvcmRlcmVke2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7KmJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItbGVmdDowOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweH0udGFibGUtYm9yZGVyZWQgdGgsLnRhYmxlLWJvcmRlcmVkIHRke2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZGRkfS50YWJsZS1ib3JkZXJlZCBjYXB0aW9uK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZS1ib3JkZXJlZCBjYXB0aW9uK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZS1ib3JkZXJlZCBjYXB0aW9uK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRkLC50YWJsZS1ib3JkZXJlZCBjb2xncm91cCt0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlLWJvcmRlcmVkIGNvbGdyb3VwK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRkLC50YWJsZS1ib3JkZXJlZCB0aGVhZDpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUtYm9yZGVyZWQgdGJvZHk6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlLWJvcmRlcmVkIHRib2R5OmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci10b3A6MH0udGFibGUtYm9yZGVyZWQgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQ+dGg6Zmlyc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRib2R5OmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkPnRkOmZpcnN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Ym9keTpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZD50aDpmaXJzdC1jaGlsZHstd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OjRweH0udGFibGUtYm9yZGVyZWQgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQ+dGg6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGJvZHk6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQ+dGQ6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGJvZHk6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQ+dGg6bGFzdC1jaGlsZHstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjRweH0udGFibGUtYm9yZGVyZWQgdGhlYWQ6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkPnRoOmZpcnN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQ+dGQ6Zmlyc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRib2R5Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZD50aDpmaXJzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGZvb3Q6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkPnRkOmZpcnN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Zm9vdDpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQ+dGg6Zmlyc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDo0cHh9LnRhYmxlLWJvcmRlcmVkIHRoZWFkOmxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZD50aDpsYXN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQ+dGQ6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkPnRoOmxhc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRmb290Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZD50ZDpsYXN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Zm9vdDpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQ+dGg6bGFzdC1jaGlsZHstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OjRweH0udGFibGUtYm9yZGVyZWQgdGZvb3QrdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkey13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDowfS50YWJsZS1ib3JkZXJlZCB0Zm9vdCt0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZHstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6MH0udGFibGUtYm9yZGVyZWQgY2FwdGlvbit0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgY2FwdGlvbit0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIGNvbGdyb3VwK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6NHB4fS50YWJsZS1ib3JkZXJlZCBjYXB0aW9uK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIGNhcHRpb24rdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZHstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjRweH0udGFibGUtc3RyaXBlZCB0Ym9keT50cjpudGgtY2hpbGQob2RkKT50ZCwudGFibGUtc3RyaXBlZCB0Ym9keT50cjpudGgtY2hpbGQob2RkKT50aHtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjl9LnRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVyPnRkLC50YWJsZS1ob3ZlciB0Ym9keSB0cjpob3Zlcj50aHtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjV9dGFibGUgdGRbY2xhc3MqPSJzcGFuIl0sdGFibGUgdGhbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCB0YWJsZSB0ZFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIHRhYmxlIHRoW2NsYXNzKj0ic3BhbiJde2Rpc3BsYXk6dGFibGUtY2VsbDtmbG9hdDpub25lO21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW4xLC50YWJsZSB0aC5zcGFuMXtmbG9hdDpub25lO3dpZHRoOjQ0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjIsLnRhYmxlIHRoLnNwYW4ye2Zsb2F0Om5vbmU7d2lkdGg6MTI0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjMsLnRhYmxlIHRoLnNwYW4ze2Zsb2F0Om5vbmU7d2lkdGg6MjA0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjQsLnRhYmxlIHRoLnNwYW40e2Zsb2F0Om5vbmU7d2lkdGg6Mjg0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjUsLnRhYmxlIHRoLnNwYW41e2Zsb2F0Om5vbmU7d2lkdGg6MzY0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjYsLnRhYmxlIHRoLnNwYW42e2Zsb2F0Om5vbmU7d2lkdGg6NDQ0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjcsLnRhYmxlIHRoLnNwYW43e2Zsb2F0Om5vbmU7d2lkdGg6NTI0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjgsLnRhYmxlIHRoLnNwYW44e2Zsb2F0Om5vbmU7d2lkdGg6NjA0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjksLnRhYmxlIHRoLnNwYW45e2Zsb2F0Om5vbmU7d2lkdGg6Njg0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjEwLC50YWJsZSB0aC5zcGFuMTB7ZmxvYXQ6bm9uZTt3aWR0aDo3NjRweDttYXJnaW4tbGVmdDowfS50YWJsZSB0ZC5zcGFuMTEsLnRhYmxlIHRoLnNwYW4xMXtmbG9hdDpub25lO3dpZHRoOjg0NHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW4xMiwudGFibGUgdGguc3BhbjEye2Zsb2F0Om5vbmU7d2lkdGg6OTI0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGJvZHkgdHIuc3VjY2Vzcz50ZHtiYWNrZ3JvdW5kLWNvbG9yOiNkZmYwZDh9LnRhYmxlIHRib2R5IHRyLmVycm9yPnRke2JhY2tncm91bmQtY29sb3I6I2YyZGVkZX0udGFibGUgdGJvZHkgdHIud2FybmluZz50ZHtiYWNrZ3JvdW5kLWNvbG9yOiNmY2Y4ZTN9LnRhYmxlIHRib2R5IHRyLmluZm8+dGR7YmFja2dyb3VuZC1jb2xvcjojZDllZGY3fS50YWJsZS1ob3ZlciB0Ym9keSB0ci5zdWNjZXNzOmhvdmVyPnRke2JhY2tncm91bmQtY29sb3I6I2QwZTljNn0udGFibGUtaG92ZXIgdGJvZHkgdHIuZXJyb3I6aG92ZXI+dGR7YmFja2dyb3VuZC1jb2xvcjojZWJjY2NjfS50YWJsZS1ob3ZlciB0Ym9keSB0ci53YXJuaW5nOmhvdmVyPnRke2JhY2tncm91bmQtY29sb3I6I2ZhZjJjY30udGFibGUtaG92ZXIgdGJvZHkgdHIuaW5mbzpob3Zlcj50ZHtiYWNrZ3JvdW5kLWNvbG9yOiNjNGUzZjN9W2NsYXNzXj0iaWNvbi0iXSxbY2xhc3MqPSIgaWNvbi0iXXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxNHB4O2hlaWdodDoxNHB4O21hcmdpbi10b3A6MXB4OyptYXJnaW4tcmlnaHQ6LjNlbTtsaW5lLWhlaWdodDoxNHB4O3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wO2JhY2tncm91bmQtaW1hZ2U6dXJsKCIuLi9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3MucG5nIik7YmFja2dyb3VuZC1wb3NpdGlvbjoxNHB4IDE0cHg7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fS5pY29uLXdoaXRlLC5uYXYtcGlsbHM+LmFjdGl2ZT5hPltjbGFzc149Imljb24tIl0sLm5hdi1waWxscz4uYWN0aXZlPmE+W2NsYXNzKj0iIGljb24tIl0sLm5hdi1saXN0Pi5hY3RpdmU+YT5bY2xhc3NePSJpY29uLSJdLC5uYXYtbGlzdD4uYWN0aXZlPmE+W2NsYXNzKj0iIGljb24tIl0sLm5hdmJhci1pbnZlcnNlIC5uYXY+LmFjdGl2ZT5hPltjbGFzc149Imljb24tIl0sLm5hdmJhci1pbnZlcnNlIC5uYXY+LmFjdGl2ZT5hPltjbGFzcyo9IiBpY29uLSJdLC5kcm9wZG93bi1tZW51PmxpPmE6aG92ZXI+W2NsYXNzXj0iaWNvbi0iXSwuZHJvcGRvd24tbWVudT5saT5hOmZvY3VzPltjbGFzc149Imljb24tIl0sLmRyb3Bkb3duLW1lbnU+bGk+YTpob3Zlcj5bY2xhc3MqPSIgaWNvbi0iXSwuZHJvcGRvd24tbWVudT5saT5hOmZvY3VzPltjbGFzcyo9IiBpY29uLSJdLC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YT5bY2xhc3NePSJpY29uLSJdLC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YT5bY2xhc3MqPSIgaWNvbi0iXSwuZHJvcGRvd24tc3VibWVudTpob3Zlcj5hPltjbGFzc149Imljb24tIl0sLmRyb3Bkb3duLXN1Ym1lbnU6Zm9jdXM+YT5bY2xhc3NePSJpY29uLSJdLC5kcm9wZG93bi1zdWJtZW51OmhvdmVyPmE+W2NsYXNzKj0iIGljb24tIl0sLmRyb3Bkb3duLXN1Ym1lbnU6Zm9jdXM+YT5bY2xhc3MqPSIgaWNvbi0iXXtiYWNrZ3JvdW5kLWltYWdlOnVybCgiLi4vaW1nL2dseXBoaWNvbnMtaGFsZmxpbmdzLXdoaXRlLnBuZyIpfS5pY29uLWdsYXNze2JhY2tncm91bmQtcG9zaXRpb246MCAwfS5pY29uLW11c2lje2JhY2tncm91bmQtcG9zaXRpb246LTI0cHggMH0uaWNvbi1zZWFyY2h7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAwfS5pY29uLWVudmVsb3Ble2JhY2tncm91bmQtcG9zaXRpb246LTcycHggMH0uaWNvbi1oZWFydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IDB9Lmljb24tc3RhcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAwfS5pY29uLXN0YXItZW1wdHl7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggMH0uaWNvbi11c2Vye2JhY2tncm91bmQtcG9zaXRpb246LTE2OHB4IDB9Lmljb24tZmlsbXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAwfS5pY29uLXRoLWxhcmdle2JhY2tncm91bmQtcG9zaXRpb246LTIxNnB4IDB9Lmljb24tdGh7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggMH0uaWNvbi10aC1saXN0e2JhY2tncm91bmQtcG9zaXRpb246LTI2NHB4IDB9Lmljb24tb2t7YmFja2dyb3VuZC1wb3NpdGlvbjotMjg4cHggMH0uaWNvbi1yZW1vdmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzEycHggMH0uaWNvbi16b29tLWlue2JhY2tncm91bmQtcG9zaXRpb246LTMzNnB4IDB9Lmljb24tem9vbS1vdXR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzYwcHggMH0uaWNvbi1vZmZ7YmFja2dyb3VuZC1wb3NpdGlvbjotMzg0cHggMH0uaWNvbi1zaWduYWx7YmFja2dyb3VuZC1wb3NpdGlvbjotNDA4cHggMH0uaWNvbi1jb2d7YmFja2dyb3VuZC1wb3NpdGlvbjotNDMycHggMH0uaWNvbi10cmFzaHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NTZweCAwfS5pY29uLWhvbWV7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0yNHB4fS5pY29uLWZpbGV7YmFja2dyb3VuZC1wb3NpdGlvbjotMjRweCAtMjRweH0uaWNvbi10aW1le2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTI0cHh9Lmljb24tcm9hZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi03MnB4IC0yNHB4fS5pY29uLWRvd25sb2FkLWFsdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0yNHB4fS5pY29uLWRvd25sb2Fke2JhY2tncm91bmQtcG9zaXRpb246LTEyMHB4IC0yNHB4fS5pY29uLXVwbG9hZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMjRweH0uaWNvbi1pbmJveHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjhweCAtMjRweH0uaWNvbi1wbGF5LWNpcmNsZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtMjRweH0uaWNvbi1yZXBlYXR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjE2cHggLTI0cHh9Lmljb24tcmVmcmVzaHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMjRweH0uaWNvbi1saXN0LWFsdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNjRweCAtMjRweH0uaWNvbi1sb2Nre2JhY2tncm91bmQtcG9zaXRpb246LTI4N3B4IC0yNHB4fS5pY29uLWZsYWd7YmFja2dyb3VuZC1wb3NpdGlvbjotMzEycHggLTI0cHh9Lmljb24taGVhZHBob25lc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMzZweCAtMjRweH0uaWNvbi12b2x1bWUtb2Zme2JhY2tncm91bmQtcG9zaXRpb246LTM2MHB4IC0yNHB4fS5pY29uLXZvbHVtZS1kb3due2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4IC0yNHB4fS5pY29uLXZvbHVtZS11cHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MDhweCAtMjRweH0uaWNvbi1xcmNvZGV7YmFja2dyb3VuZC1wb3NpdGlvbjotNDMycHggLTI0cHh9Lmljb24tYmFyY29kZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NTZweCAtMjRweH0uaWNvbi10YWd7YmFja2dyb3VuZC1wb3NpdGlvbjowIC00OHB4fS5pY29uLXRhZ3N7YmFja2dyb3VuZC1wb3NpdGlvbjotMjVweCAtNDhweH0uaWNvbi1ib29re2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTQ4cHh9Lmljb24tYm9va21hcmt7YmFja2dyb3VuZC1wb3NpdGlvbjotNzJweCAtNDhweH0uaWNvbi1wcmludHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC00OHB4fS5pY29uLWNhbWVyYXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtNDhweH0uaWNvbi1mb250e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC00OHB4fS5pY29uLWJvbGR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTY3cHggLTQ4cHh9Lmljb24taXRhbGlje2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC00OHB4fS5pY29uLXRleHQtaGVpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTIxNnB4IC00OHB4fS5pY29uLXRleHQtd2lkdGh7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTQ4cHh9Lmljb24tYWxpZ24tbGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNjRweCAtNDhweH0uaWNvbi1hbGlnbi1jZW50ZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMjg4cHggLTQ4cHh9Lmljb24tYWxpZ24tcmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzEycHggLTQ4cHh9Lmljb24tYWxpZ24tanVzdGlmeXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMzZweCAtNDhweH0uaWNvbi1saXN0e2JhY2tncm91bmQtcG9zaXRpb246LTM2MHB4IC00OHB4fS5pY29uLWluZGVudC1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4IC00OHB4fS5pY29uLWluZGVudC1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MDhweCAtNDhweH0uaWNvbi1mYWNldGltZS12aWRlb3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MzJweCAtNDhweH0uaWNvbi1waWN0dXJle2JhY2tncm91bmQtcG9zaXRpb246LTQ1NnB4IC00OHB4fS5pY29uLXBlbmNpbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTcycHh9Lmljb24tbWFwLW1hcmtlcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNHB4IC03MnB4fS5pY29uLWFkanVzdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC03MnB4fS5pY29uLXRpbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotNzJweCAtNzJweH0uaWNvbi1lZGl0e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTcycHh9Lmljb24tc2hhcmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggLTcycHh9Lmljb24tY2hlY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTcycHh9Lmljb24tbW92ZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjhweCAtNzJweH0uaWNvbi1zdGVwLWJhY2t3YXJke2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC03MnB4fS5pY29uLWZhc3QtYmFja3dhcmR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjE2cHggLTcycHh9Lmljb24tYmFja3dhcmR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTcycHh9Lmljb24tcGxheXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNjRweCAtNzJweH0uaWNvbi1wYXVzZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yODhweCAtNzJweH0uaWNvbi1zdG9we2JhY2tncm91bmQtcG9zaXRpb246LTMxMnB4IC03MnB4fS5pY29uLWZvcndhcmR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzM2cHggLTcycHh9Lmljb24tZmFzdC1mb3J3YXJke2JhY2tncm91bmQtcG9zaXRpb246LTM2MHB4IC03MnB4fS5pY29uLXN0ZXAtZm9yd2FyZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zODRweCAtNzJweH0uaWNvbi1lamVjdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MDhweCAtNzJweH0uaWNvbi1jaGV2cm9uLWxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotNDMycHggLTcycHh9Lmljb24tY2hldnJvbi1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NTZweCAtNzJweH0uaWNvbi1wbHVzLXNpZ257YmFja2dyb3VuZC1wb3NpdGlvbjowIC05NnB4fS5pY29uLW1pbnVzLXNpZ257YmFja2dyb3VuZC1wb3NpdGlvbjotMjRweCAtOTZweH0uaWNvbi1yZW1vdmUtc2lnbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC05NnB4fS5pY29uLW9rLXNpZ257YmFja2dyb3VuZC1wb3NpdGlvbjotNzJweCAtOTZweH0uaWNvbi1xdWVzdGlvbi1zaWdue2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTk2cHh9Lmljb24taW5mby1zaWdue2JhY2tncm91bmQtcG9zaXRpb246LTEyMHB4IC05NnB4fS5pY29uLXNjcmVlbnNob3R7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTk2cHh9Lmljb24tcmVtb3ZlLWNpcmNsZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjhweCAtOTZweH0uaWNvbi1vay1jaXJjbGV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTk2cHh9Lmljb24tYmFuLWNpcmNsZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMTZweCAtOTZweH0uaWNvbi1hcnJvdy1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC05NnB4fS5pY29uLWFycm93LXJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTI2NHB4IC05NnB4fS5pY29uLWFycm93LXVwe2JhY2tncm91bmQtcG9zaXRpb246LTI4OXB4IC05NnB4fS5pY29uLWFycm93LWRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMzEycHggLTk2cHh9Lmljb24tc2hhcmUtYWx0e2JhY2tncm91bmQtcG9zaXRpb246LTMzNnB4IC05NnB4fS5pY29uLXJlc2l6ZS1mdWxse2JhY2tncm91bmQtcG9zaXRpb246LTM2MHB4IC05NnB4fS5pY29uLXJlc2l6ZS1zbWFsbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zODRweCAtOTZweH0uaWNvbi1wbHVze2JhY2tncm91bmQtcG9zaXRpb246LTQwOHB4IC05NnB4fS5pY29uLW1pbnVze2JhY2tncm91bmQtcG9zaXRpb246LTQzM3B4IC05NnB4fS5pY29uLWFzdGVyaXNre2JhY2tncm91bmQtcG9zaXRpb246LTQ1NnB4IC05NnB4fS5pY29uLWV4Y2xhbWF0aW9uLXNpZ257YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xMjBweH0uaWNvbi1naWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTI0cHggLTEyMHB4fS5pY29uLWxlYWZ7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTIwcHh9Lmljb24tZmlyZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi03MnB4IC0xMjBweH0uaWNvbi1leWUtb3BlbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xMjBweH0uaWNvbi1leWUtY2xvc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggLTEyMHB4fS5pY29uLXdhcm5pbmctc2lnbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTIwcHh9Lmljb24tcGxhbmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTY4cHggLTEyMHB4fS5pY29uLWNhbGVuZGFye2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0xMjBweH0uaWNvbi1yYW5kb217d2lkdGg6MTZweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMTZweCAtMTIwcHh9Lmljb24tY29tbWVudHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMTIwcHh9Lmljb24tbWFnbmV0e2JhY2tncm91bmQtcG9zaXRpb246LTI2NHB4IC0xMjBweH0uaWNvbi1jaGV2cm9uLXVwe2JhY2tncm91bmQtcG9zaXRpb246LTI4OHB4IC0xMjBweH0uaWNvbi1jaGV2cm9uLWRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMzEzcHggLTExOXB4fS5pY29uLXJldHdlZXR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzM2cHggLTEyMHB4fS5pY29uLXNob3BwaW5nLWNhcnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzYwcHggLTEyMHB4fS5pY29uLWZvbGRlci1jbG9zZXt3aWR0aDoxNnB4O2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4IC0xMjBweH0uaWNvbi1mb2xkZXItb3Blbnt3aWR0aDoxNnB4O2JhY2tncm91bmQtcG9zaXRpb246LTQwOHB4IC0xMjBweH0uaWNvbi1yZXNpemUtdmVydGljYWx7YmFja2dyb3VuZC1wb3NpdGlvbjotNDMycHggLTExOXB4fS5pY29uLXJlc2l6ZS1ob3Jpem9udGFse2JhY2tncm91bmQtcG9zaXRpb246LTQ1NnB4IC0xMThweH0uaWNvbi1oZGR7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNDRweH0uaWNvbi1idWxsaG9ybntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNHB4IC0xNDRweH0uaWNvbi1iZWxse2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE0NHB4fS5pY29uLWNlcnRpZmljYXRle2JhY2tncm91bmQtcG9zaXRpb246LTcycHggLTE0NHB4fS5pY29uLXRodW1icy11cHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xNDRweH0uaWNvbi10aHVtYnMtZG93bntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtMTQ0cHh9Lmljb24taGFuZC1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTQ0cHh9Lmljb24taGFuZC1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTE2OHB4IC0xNDRweH0uaWNvbi1oYW5kLXVwe2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0xNDRweH0uaWNvbi1oYW5kLWRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMjE2cHggLTE0NHB4fS5pY29uLWNpcmNsZS1hcnJvdy1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMTQ0cHh9Lmljb24tY2lyY2xlLWFycm93LWxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjY0cHggLTE0NHB4fS5pY29uLWNpcmNsZS1hcnJvdy11cHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yODhweCAtMTQ0cHh9Lmljb24tY2lyY2xlLWFycm93LWRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMzEycHggLTE0NHB4fS5pY29uLWdsb2Jle2JhY2tncm91bmQtcG9zaXRpb246LTMzNnB4IC0xNDRweH0uaWNvbi13cmVuY2h7YmFja2dyb3VuZC1wb3NpdGlvbjotMzYwcHggLTE0NHB4fS5pY29uLXRhc2tze2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4IC0xNDRweH0uaWNvbi1maWx0ZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotNDA4cHggLTE0NHB4fS5pY29uLWJyaWVmY2FzZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MzJweCAtMTQ0cHh9Lmljb24tZnVsbHNjcmVlbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NTZweCAtMTQ0cHh9LmRyb3B1cCwuZHJvcGRvd257cG9zaXRpb246cmVsYXRpdmV9LmRyb3Bkb3duLXRvZ2dsZXsqbWFyZ2luLWJvdHRvbTotM3B4fS5kcm9wZG93bi10b2dnbGU6YWN0aXZlLC5vcGVuIC5kcm9wZG93bi10b2dnbGV7b3V0bGluZTowfS5jYXJldHtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDowO2hlaWdodDowO3ZlcnRpY2FsLWFsaWduOnRvcDtib3JkZXItdG9wOjRweCBzb2xpZCAjMDAwO2JvcmRlci1yaWdodDo0cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkIHRyYW5zcGFyZW50O2NvbnRlbnQ6IiJ9LmRyb3Bkb3duIC5jYXJldHttYXJnaW4tdG9wOjhweDttYXJnaW4tbGVmdDoycHh9LmRyb3Bkb3duLW1lbnV7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwMCU7bGVmdDowO3otaW5kZXg6MTAwMDtkaXNwbGF5Om5vbmU7ZmxvYXQ6bGVmdDttaW4td2lkdGg6MTYwcHg7cGFkZGluZzo1cHggMDttYXJnaW46MnB4IDAgMDtsaXN0LXN0eWxlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4yKTsqYm9yZGVyLXJpZ2h0LXdpZHRoOjJweDsqYm9yZGVyLWJvdHRvbS13aWR0aDoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4O2JvcmRlci1yYWRpdXM6NnB4Oy13ZWJraXQtYm94LXNoYWRvdzowIDVweCAxMHB4IHJnYmEoMCwwLDAsMC4yKTstbW96LWJveC1zaGFkb3c6MCA1cHggMTBweCByZ2JhKDAsMCwwLDAuMik7Ym94LXNoYWRvdzowIDVweCAxMHB4IHJnYmEoMCwwLDAsMC4yKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDstbW96LWJhY2tncm91bmQtY2xpcDpwYWRkaW5nO2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveH0uZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0e3JpZ2h0OjA7bGVmdDphdXRvfS5kcm9wZG93bi1tZW51IC5kaXZpZGVyeyp3aWR0aDoxMDAlO2hlaWdodDoxcHg7bWFyZ2luOjlweCAxcHg7Km1hcmdpbjotNXB4IDAgNXB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOiNlNWU1ZTU7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ZmZn0uZHJvcGRvd24tbWVudT5saT5he2Rpc3BsYXk6YmxvY2s7cGFkZGluZzozcHggMjBweDtjbGVhcjpib3RoO2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiMzMzM7d2hpdGUtc3BhY2U6bm93cmFwfS5kcm9wZG93bi1tZW51PmxpPmE6aG92ZXIsLmRyb3Bkb3duLW1lbnU+bGk+YTpmb2N1cywuZHJvcGRvd24tc3VibWVudTpob3Zlcj5hLC5kcm9wZG93bi1zdWJtZW51OmZvY3VzPmF7Y29sb3I6I2ZmZjt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDgxYzI7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIzA4YywjMDA3N2IzKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjMDhjKSx0bygjMDA3N2IzKSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIzA4YywjMDA3N2IzKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsIzA4YywjMDA3N2IzKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIzA4YywjMDA3N2IzKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjAwODhjYycsZW5kQ29sb3JzdHI9JyNmZjAwNzdiMycsR3JhZGllbnRUeXBlPTApfS5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YSwuZHJvcGRvd24tbWVudT4uYWN0aXZlPmE6aG92ZXIsLmRyb3Bkb3duLW1lbnU+LmFjdGl2ZT5hOmZvY3Vze2NvbG9yOiNmZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojMDA4MWMyO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzA4YyksdG8oIzAwNzdiMykpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7b3V0bGluZTowO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMDA4OGNjJyxlbmRDb2xvcnN0cj0nI2ZmMDA3N2IzJyxHcmFkaWVudFR5cGU9MCl9LmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmEsLmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmE6aG92ZXIsLmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmE6Zm9jdXN7Y29sb3I6Izk5OX0uZHJvcGRvd24tbWVudT4uZGlzYWJsZWQ+YTpob3ZlciwuZHJvcGRvd24tbWVudT4uZGlzYWJsZWQ+YTpmb2N1c3t0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6ZGVmYXVsdDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtaW1hZ2U6bm9uZTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5vcGVueyp6LWluZGV4OjEwMDB9Lm9wZW4+LmRyb3Bkb3duLW1lbnV7ZGlzcGxheTpibG9ja30ucHVsbC1yaWdodD4uZHJvcGRvd24tbWVudXtyaWdodDowO2xlZnQ6YXV0b30uZHJvcHVwIC5jYXJldCwubmF2YmFyLWZpeGVkLWJvdHRvbSAuZHJvcGRvd24gLmNhcmV0e2JvcmRlci10b3A6MDtib3JkZXItYm90dG9tOjRweCBzb2xpZCAjMDAwO2NvbnRlbnQ6IiJ9LmRyb3B1cCAuZHJvcGRvd24tbWVudSwubmF2YmFyLWZpeGVkLWJvdHRvbSAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnV7dG9wOmF1dG87Ym90dG9tOjEwMCU7bWFyZ2luLWJvdHRvbToxcHh9LmRyb3Bkb3duLXN1Ym1lbnV7cG9zaXRpb246cmVsYXRpdmV9LmRyb3Bkb3duLXN1Ym1lbnU+LmRyb3Bkb3duLW1lbnV7dG9wOjA7bGVmdDoxMDAlO21hcmdpbi10b3A6LTZweDttYXJnaW4tbGVmdDotMXB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czowIDZweCA2cHggNnB4Oy1tb3otYm9yZGVyLXJhZGl1czowIDZweCA2cHggNnB4O2JvcmRlci1yYWRpdXM6MCA2cHggNnB4IDZweH0uZHJvcGRvd24tc3VibWVudTpob3Zlcj4uZHJvcGRvd24tbWVudXtkaXNwbGF5OmJsb2NrfS5kcm9wdXAgLmRyb3Bkb3duLXN1Ym1lbnU+LmRyb3Bkb3duLW1lbnV7dG9wOmF1dG87Ym90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206LTJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NXB4IDVweCA1cHggMDstbW96LWJvcmRlci1yYWRpdXM6NXB4IDVweCA1cHggMDtib3JkZXItcmFkaXVzOjVweCA1cHggNXB4IDB9LmRyb3Bkb3duLXN1Ym1lbnU+YTphZnRlcntkaXNwbGF5OmJsb2NrO2Zsb2F0OnJpZ2h0O3dpZHRoOjA7aGVpZ2h0OjA7bWFyZ2luLXRvcDo1cHg7bWFyZ2luLXJpZ2h0Oi0xMHB4O2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItbGVmdC1jb2xvcjojY2NjO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6NXB4IDAgNXB4IDVweDtjb250ZW50OiIgIn0uZHJvcGRvd24tc3VibWVudTpob3Zlcj5hOmFmdGVye2JvcmRlci1sZWZ0LWNvbG9yOiNmZmZ9LmRyb3Bkb3duLXN1Ym1lbnUucHVsbC1sZWZ0e2Zsb2F0Om5vbmV9LmRyb3Bkb3duLXN1Ym1lbnUucHVsbC1sZWZ0Pi5kcm9wZG93bi1tZW51e2xlZnQ6LTEwMCU7bWFyZ2luLWxlZnQ6MTBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4IDAgNnB4IDZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4IDAgNnB4IDZweDtib3JkZXItcmFkaXVzOjZweCAwIDZweCA2cHh9LmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IC5uYXYtaGVhZGVye3BhZGRpbmctcmlnaHQ6MjBweDtwYWRkaW5nLWxlZnQ6MjBweH0udHlwZWFoZWFke3otaW5kZXg6MTA1MTttYXJnaW4tdG9wOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHh9LndlbGx7bWluLWhlaWdodDoyMHB4O3BhZGRpbmc6MTlweDttYXJnaW4tYm90dG9tOjIwcHg7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O2JvcmRlcjoxcHggc29saWQgI2UzZTNlMzstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDUpfS53ZWxsIGJsb2NrcXVvdGV7Ym9yZGVyLWNvbG9yOiNkZGQ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xNSl9LndlbGwtbGFyZ2V7cGFkZGluZzoyNHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweH0ud2VsbC1zbWFsbHtwYWRkaW5nOjlweDstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7Ym9yZGVyLXJhZGl1czozcHh9LmZhZGV7b3BhY2l0eTowOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgbGluZWFyOy1tb3otdHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgbGluZWFyOy1vLXRyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxpbmVhcjt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyBsaW5lYXJ9LmZhZGUuaW57b3BhY2l0eToxfS5jb2xsYXBzZXtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6MDtvdmVyZmxvdzpoaWRkZW47LXdlYmtpdC10cmFuc2l0aW9uOmhlaWdodCAuMzVzIGVhc2U7LW1vei10cmFuc2l0aW9uOmhlaWdodCAuMzVzIGVhc2U7LW8tdHJhbnNpdGlvbjpoZWlnaHQgLjM1cyBlYXNlO3RyYW5zaXRpb246aGVpZ2h0IC4zNXMgZWFzZX0uY29sbGFwc2UuaW57aGVpZ2h0OmF1dG99LmNsb3Nle2Zsb2F0OnJpZ2h0O2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OmJvbGQ7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojMDAwO3RleHQtc2hhZG93OjAgMXB4IDAgI2ZmZjtvcGFjaXR5Oi4yO2ZpbHRlcjphbHBoYShvcGFjaXR5PTIwKX0uY2xvc2U6aG92ZXIsLmNsb3NlOmZvY3Vze2NvbG9yOiMwMDA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOnBvaW50ZXI7b3BhY2l0eTouNDtmaWx0ZXI6YWxwaGEob3BhY2l0eT00MCl9YnV0dG9uLmNsb3Nle3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lfS5idG57ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lO3BhZGRpbmc6NHB4IDEycHg7bWFyZ2luLWJvdHRvbTowOyptYXJnaW4tbGVmdDouM2VtO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzMzMzt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LXNoYWRvdzowIDFweCAxcHggcmdiYSgyNTUsMjU1LDI1NSwwLjc1KTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1OypiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTY7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsI2ZmZiwjZTZlNmU2KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjZmZmKSx0bygjZTZlNmU2KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsI2ZmZiwjZTZlNmU2KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsI2ZmZiwjZTZlNmU2KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sI2ZmZiwjZTZlNmU2KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXI6MXB4IHNvbGlkICNjY2M7KmJvcmRlcjowO2JvcmRlci1jb2xvcjojZTZlNmU2ICNlNmU2ZTYgI2JmYmZiZjtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2JvcmRlci1ib3R0b20tY29sb3I6I2IzYjNiMzstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmZmZmZmYnLGVuZENvbG9yc3RyPScjZmZlNmU2ZTYnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpOyp6b29tOjE7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjIpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjIpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpfS5idG46aG92ZXIsLmJ0bjpmb2N1cywuYnRuOmFjdGl2ZSwuYnRuLmFjdGl2ZSwuYnRuLmRpc2FibGVkLC5idG5bZGlzYWJsZWRde2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2OypiYWNrZ3JvdW5kLWNvbG9yOiNkOWQ5ZDl9LmJ0bjphY3RpdmUsLmJ0bi5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojY2NjIFw5fS5idG46Zmlyc3QtY2hpbGR7Km1hcmdpbi1sZWZ0OjB9LmJ0bjpob3ZlciwuYnRuOmZvY3Vze2NvbG9yOiMzMzM7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNXB4Oy13ZWJraXQtdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXBvc2l0aW9uIC4xcyBsaW5lYXI7LW1vei10cmFuc2l0aW9uOmJhY2tncm91bmQtcG9zaXRpb24gLjFzIGxpbmVhcjstby10cmFuc2l0aW9uOmJhY2tncm91bmQtcG9zaXRpb24gLjFzIGxpbmVhcjt0cmFuc2l0aW9uOmJhY2tncm91bmQtcG9zaXRpb24gLjFzIGxpbmVhcn0uYnRuOmZvY3Vze291dGxpbmU6dGhpbiBkb3R0ZWQgIzMzMztvdXRsaW5lOjVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDotMnB4fS5idG4uYWN0aXZlLC5idG46YWN0aXZle2JhY2tncm91bmQtaW1hZ2U6bm9uZTtvdXRsaW5lOjA7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMTUpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDJweCA0cHggcmdiYSgwLDAsMCwwLjE1KSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93Omluc2V0IDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMTUpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpfS5idG4uZGlzYWJsZWQsLmJ0bltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHQ7YmFja2dyb3VuZC1pbWFnZTpub25lO29wYWNpdHk6LjY1O2ZpbHRlcjphbHBoYShvcGFjaXR5PTY1KTstd2Via2l0LWJveC1zaGFkb3c6bm9uZTstbW96LWJveC1zaGFkb3c6bm9uZTtib3gtc2hhZG93Om5vbmV9LmJ0bi1sYXJnZXtwYWRkaW5nOjExcHggMTlweDtmb250LXNpemU6MTcuNXB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweH0uYnRuLWxhcmdlIFtjbGFzc149Imljb24tIl0sLmJ0bi1sYXJnZSBbY2xhc3MqPSIgaWNvbi0iXXttYXJnaW4tdG9wOjRweH0uYnRuLXNtYWxse3BhZGRpbmc6MnB4IDEwcHg7Zm9udC1zaXplOjExLjlweDstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7Ym9yZGVyLXJhZGl1czozcHh9LmJ0bi1zbWFsbCBbY2xhc3NePSJpY29uLSJdLC5idG4tc21hbGwgW2NsYXNzKj0iIGljb24tIl17bWFyZ2luLXRvcDowfS5idG4tbWluaSBbY2xhc3NePSJpY29uLSJdLC5idG4tbWluaSBbY2xhc3MqPSIgaWNvbi0iXXttYXJnaW4tdG9wOi0xcHh9LmJ0bi1taW5pe3BhZGRpbmc6MCA2cHg7Zm9udC1zaXplOjEwLjVweDstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7Ym9yZGVyLXJhZGl1czozcHh9LmJ0bi1ibG9ja3tkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDowOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uYnRuLWJsb2NrKy5idG4tYmxvY2t7bWFyZ2luLXRvcDo1cHh9aW5wdXRbdHlwZT0ic3VibWl0Il0uYnRuLWJsb2NrLGlucHV0W3R5cGU9InJlc2V0Il0uYnRuLWJsb2NrLGlucHV0W3R5cGU9ImJ1dHRvbiJdLmJ0bi1ibG9ja3t3aWR0aDoxMDAlfS5idG4tcHJpbWFyeS5hY3RpdmUsLmJ0bi13YXJuaW5nLmFjdGl2ZSwuYnRuLWRhbmdlci5hY3RpdmUsLmJ0bi1zdWNjZXNzLmFjdGl2ZSwuYnRuLWluZm8uYWN0aXZlLC5idG4taW52ZXJzZS5hY3RpdmV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwwLjc1KX0uYnRuLXByaW1hcnl7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6IzAwNmRjYzsqYmFja2dyb3VuZC1jb2xvcjojMDRjO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzA0Yyk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzA4YyksdG8oIzA0YykpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzA0Yyk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzA0Yyk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCMwOGMsIzA0Yyk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiMwNGMgIzA0YyAjMDAyYTgwO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmYwMDg4Y2MnLGVuZENvbG9yc3RyPScjZmYwMDQ0Y2MnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5idG4tcHJpbWFyeTpob3ZlciwuYnRuLXByaW1hcnk6Zm9jdXMsLmJ0bi1wcmltYXJ5OmFjdGl2ZSwuYnRuLXByaW1hcnkuYWN0aXZlLC5idG4tcHJpbWFyeS5kaXNhYmxlZCwuYnRuLXByaW1hcnlbZGlzYWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMDRjOypiYWNrZ3JvdW5kLWNvbG9yOiMwMDNiYjN9LmJ0bi1wcmltYXJ5OmFjdGl2ZSwuYnRuLXByaW1hcnkuYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzAzOSBcOX0uYnRuLXdhcm5pbmd7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6I2ZhYTczMjsqYmFja2dyb3VuZC1jb2xvcjojZjg5NDA2O2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2ZiYjQ1MCksdG8oI2Y4OTQwNikpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiNmODk0MDYgI2Y4OTQwNiAjYWQ2NzA0O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmYmI0NTAnLGVuZENvbG9yc3RyPScjZmZmODk0MDYnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5idG4td2FybmluZzpob3ZlciwuYnRuLXdhcm5pbmc6Zm9jdXMsLmJ0bi13YXJuaW5nOmFjdGl2ZSwuYnRuLXdhcm5pbmcuYWN0aXZlLC5idG4td2FybmluZy5kaXNhYmxlZCwuYnRuLXdhcm5pbmdbZGlzYWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojZjg5NDA2OypiYWNrZ3JvdW5kLWNvbG9yOiNkZjg1MDV9LmJ0bi13YXJuaW5nOmFjdGl2ZSwuYnRuLXdhcm5pbmcuYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2M2NzYwNSBcOX0uYnRuLWRhbmdlcntjb2xvcjojZmZmO3RleHQtc2hhZG93OjAgLTFweCAwIHJnYmEoMCwwLDAsMC4yNSk7YmFja2dyb3VuZC1jb2xvcjojZGE0ZjQ5OypiYWNrZ3JvdW5kLWNvbG9yOiNiZDM2MmY7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsI2VlNWY1YiwjYmQzNjJmKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjZWU1ZjViKSx0bygjYmQzNjJmKSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsI2VlNWY1YiwjYmQzNjJmKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsI2VlNWY1YiwjYmQzNjJmKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sI2VlNWY1YiwjYmQzNjJmKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXItY29sb3I6I2JkMzYyZiAjYmQzNjJmICM4MDI0MjA7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjI1KTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmVlNWY1YicsZW5kQ29sb3JzdHI9JyNmZmJkMzYyZicsR3JhZGllbnRUeXBlPTApO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSl9LmJ0bi1kYW5nZXI6aG92ZXIsLmJ0bi1kYW5nZXI6Zm9jdXMsLmJ0bi1kYW5nZXI6YWN0aXZlLC5idG4tZGFuZ2VyLmFjdGl2ZSwuYnRuLWRhbmdlci5kaXNhYmxlZCwuYnRuLWRhbmdlcltkaXNhYmxlZF17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNiZDM2MmY7KmJhY2tncm91bmQtY29sb3I6I2E5MzAyYX0uYnRuLWRhbmdlcjphY3RpdmUsLmJ0bi1kYW5nZXIuYWN0aXZle2JhY2tncm91bmQtY29sb3I6Izk0MmEyNSBcOX0uYnRuLXN1Y2Nlc3N7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6IzViYjc1YjsqYmFja2dyb3VuZC1jb2xvcjojNTFhMzUxO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCM2MmM0NjIsIzUxYTM1MSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzYyYzQ2MiksdG8oIzUxYTM1MSkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCM2MmM0NjIsIzUxYTM1MSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCM2MmM0NjIsIzUxYTM1MSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCM2MmM0NjIsIzUxYTM1MSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiM1MWEzNTEgIzUxYTM1MSAjMzg3MDM4O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmY2MmM0NjInLGVuZENvbG9yc3RyPScjZmY1MWEzNTEnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5idG4tc3VjY2Vzczpob3ZlciwuYnRuLXN1Y2Nlc3M6Zm9jdXMsLmJ0bi1zdWNjZXNzOmFjdGl2ZSwuYnRuLXN1Y2Nlc3MuYWN0aXZlLC5idG4tc3VjY2Vzcy5kaXNhYmxlZCwuYnRuLXN1Y2Nlc3NbZGlzYWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNTFhMzUxOypiYWNrZ3JvdW5kLWNvbG9yOiM0OTkyNDl9LmJ0bi1zdWNjZXNzOmFjdGl2ZSwuYnRuLXN1Y2Nlc3MuYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzQwODE0MCBcOX0uYnRuLWluZm97Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6IzQ5YWZjZDsqYmFja2dyb3VuZC1jb2xvcjojMmY5NmI0O2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCM1YmMwZGUsIzJmOTZiNCk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzViYzBkZSksdG8oIzJmOTZiNCkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCM1YmMwZGUsIzJmOTZiNCk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCM1YmMwZGUsIzJmOTZiNCk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCM1YmMwZGUsIzJmOTZiNCk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiMyZjk2YjQgIzJmOTZiNCAjMWY2Mzc3O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmY1YmMwZGUnLGVuZENvbG9yc3RyPScjZmYyZjk2YjQnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5idG4taW5mbzpob3ZlciwuYnRuLWluZm86Zm9jdXMsLmJ0bi1pbmZvOmFjdGl2ZSwuYnRuLWluZm8uYWN0aXZlLC5idG4taW5mby5kaXNhYmxlZCwuYnRuLWluZm9bZGlzYWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMmY5NmI0OypiYWNrZ3JvdW5kLWNvbG9yOiMyYTg1YTB9LmJ0bi1pbmZvOmFjdGl2ZSwuYnRuLWluZm8uYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzI0NzQ4YyBcOX0uYnRuLWludmVyc2V7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6IzM2MzYzNjsqYmFja2dyb3VuZC1jb2xvcjojMjIyO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCM0NDQsIzIyMik7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzQ0NCksdG8oIzIyMikpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCM0NDQsIzIyMik7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCM0NDQsIzIyMik7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCM0NDQsIzIyMik7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiMyMjIgIzIyMiAjMDAwO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmY0NDQ0NDQnLGVuZENvbG9yc3RyPScjZmYyMjIyMjInLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5idG4taW52ZXJzZTpob3ZlciwuYnRuLWludmVyc2U6Zm9jdXMsLmJ0bi1pbnZlcnNlOmFjdGl2ZSwuYnRuLWludmVyc2UuYWN0aXZlLC5idG4taW52ZXJzZS5kaXNhYmxlZCwuYnRuLWludmVyc2VbZGlzYWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMjIyOypiYWNrZ3JvdW5kLWNvbG9yOiMxNTE1MTV9LmJ0bi1pbnZlcnNlOmFjdGl2ZSwuYnRuLWludmVyc2UuYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzA4MDgwOCBcOX1idXR0b24uYnRuLGlucHV0W3R5cGU9InN1Ym1pdCJdLmJ0bnsqcGFkZGluZy10b3A6M3B4OypwYWRkaW5nLWJvdHRvbTozcHh9YnV0dG9uLmJ0bjo6LW1vei1mb2N1cy1pbm5lcixpbnB1dFt0eXBlPSJzdWJtaXQiXS5idG46Oi1tb3otZm9jdXMtaW5uZXJ7cGFkZGluZzowO2JvcmRlcjowfWJ1dHRvbi5idG4uYnRuLWxhcmdlLGlucHV0W3R5cGU9InN1Ym1pdCJdLmJ0bi5idG4tbGFyZ2V7KnBhZGRpbmctdG9wOjdweDsqcGFkZGluZy1ib3R0b206N3B4fWJ1dHRvbi5idG4uYnRuLXNtYWxsLGlucHV0W3R5cGU9InN1Ym1pdCJdLmJ0bi5idG4tc21hbGx7KnBhZGRpbmctdG9wOjNweDsqcGFkZGluZy1ib3R0b206M3B4fWJ1dHRvbi5idG4uYnRuLW1pbmksaW5wdXRbdHlwZT0ic3VibWl0Il0uYnRuLmJ0bi1taW5peypwYWRkaW5nLXRvcDoxcHg7KnBhZGRpbmctYm90dG9tOjFweH0uYnRuLWxpbmssLmJ0bi1saW5rOmFjdGl2ZSwuYnRuLWxpbmtbZGlzYWJsZWRde2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1pbWFnZTpub25lOy13ZWJraXQtYm94LXNoYWRvdzpub25lOy1tb3otYm94LXNoYWRvdzpub25lO2JveC1zaGFkb3c6bm9uZX0uYnRuLWxpbmt7Y29sb3I6IzA4YztjdXJzb3I6cG9pbnRlcjtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1czowfS5idG4tbGluazpob3ZlciwuYnRuLWxpbms6Zm9jdXN7Y29sb3I6IzAwNTU4MDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmJ0bi1saW5rW2Rpc2FibGVkXTpob3ZlciwuYnRuLWxpbmtbZGlzYWJsZWRdOmZvY3Vze2NvbG9yOiMzMzM7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmJ0bi1ncm91cHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7Km1hcmdpbi1sZWZ0Oi4zZW07Zm9udC1zaXplOjA7d2hpdGUtc3BhY2U6bm93cmFwO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTsqem9vbToxfS5idG4tZ3JvdXA6Zmlyc3QtY2hpbGR7Km1hcmdpbi1sZWZ0OjB9LmJ0bi1ncm91cCsuYnRuLWdyb3Vwe21hcmdpbi1sZWZ0OjVweH0uYnRuLXRvb2xiYXJ7bWFyZ2luLXRvcDoxMHB4O21hcmdpbi1ib3R0b206MTBweDtmb250LXNpemU6MH0uYnRuLXRvb2xiYXI+LmJ0bisuYnRuLC5idG4tdG9vbGJhcj4uYnRuLWdyb3VwKy5idG4sLmJ0bi10b29sYmFyPi5idG4rLmJ0bi1ncm91cHttYXJnaW4tbGVmdDo1cHh9LmJ0bi1ncm91cD4uYnRue3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MH0uYnRuLWdyb3VwPi5idG4rLmJ0bnttYXJnaW4tbGVmdDotMXB4fS5idG4tZ3JvdXA+LmJ0biwuYnRuLWdyb3VwPi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXA+LnBvcG92ZXJ7Zm9udC1zaXplOjE0cHh9LmJ0bi1ncm91cD4uYnRuLW1pbml7Zm9udC1zaXplOjEwLjVweH0uYnRuLWdyb3VwPi5idG4tc21hbGx7Zm9udC1zaXplOjExLjlweH0uYnRuLWdyb3VwPi5idG4tbGFyZ2V7Zm9udC1zaXplOjE3LjVweH0uYnRuLWdyb3VwPi5idG46Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OjRweH0uYnRuLWdyb3VwPi5idG46bGFzdC1jaGlsZCwuYnRuLWdyb3VwPi5kcm9wZG93bi10b2dnbGV7LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDo0cHh9LmJ0bi1ncm91cD4uYnRuLmxhcmdlOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjA7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjZweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjZweDstd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6NnB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjZweDstbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDo2cHh9LmJ0bi1ncm91cD4uYnRuLmxhcmdlOmxhc3QtY2hpbGQsLmJ0bi1ncm91cD4ubGFyZ2UuZHJvcGRvd24tdG9nZ2xley13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NnB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjZweDstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjZweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjZweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6NnB4fS5idG4tZ3JvdXA+LmJ0bjpob3ZlciwuYnRuLWdyb3VwPi5idG46Zm9jdXMsLmJ0bi1ncm91cD4uYnRuOmFjdGl2ZSwuYnRuLWdyb3VwPi5idG4uYWN0aXZle3otaW5kZXg6Mn0uYnRuLWdyb3VwIC5kcm9wZG93bi10b2dnbGU6YWN0aXZlLC5idG4tZ3JvdXAub3BlbiAuZHJvcGRvd24tdG9nZ2xle291dGxpbmU6MH0uYnRuLWdyb3VwPi5idG4rLmRyb3Bkb3duLXRvZ2dsZXsqcGFkZGluZy10b3A6NXB4O3BhZGRpbmctcmlnaHQ6OHB4OypwYWRkaW5nLWJvdHRvbTo1cHg7cGFkZGluZy1sZWZ0OjhweDstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMXB4IDAgMCByZ2JhKDI1NSwyNTUsMjU1LDAuMTI1KSxpbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMXB4IDAgMCByZ2JhKDI1NSwyNTUsMjU1LDAuMTI1KSxpbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93Omluc2V0IDFweCAwIDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEyNSksaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMiksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSl9LmJ0bi1ncm91cD4uYnRuLW1pbmkrLmRyb3Bkb3duLXRvZ2dsZXsqcGFkZGluZy10b3A6MnB4O3BhZGRpbmctcmlnaHQ6NXB4OypwYWRkaW5nLWJvdHRvbToycHg7cGFkZGluZy1sZWZ0OjVweH0uYnRuLWdyb3VwPi5idG4tc21hbGwrLmRyb3Bkb3duLXRvZ2dsZXsqcGFkZGluZy10b3A6NXB4OypwYWRkaW5nLWJvdHRvbTo0cHh9LmJ0bi1ncm91cD4uYnRuLWxhcmdlKy5kcm9wZG93bi10b2dnbGV7KnBhZGRpbmctdG9wOjdweDtwYWRkaW5nLXJpZ2h0OjEycHg7KnBhZGRpbmctYm90dG9tOjdweDtwYWRkaW5nLWxlZnQ6MTJweH0uYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZXtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMTUpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDJweCA0cHggcmdiYSgwLDAsMCwwLjE1KSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93Omluc2V0IDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMTUpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpfS5idG4tZ3JvdXAub3BlbiAuYnRuLmRyb3Bkb3duLXRvZ2dsZXtiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTZ9LmJ0bi1ncm91cC5vcGVuIC5idG4tcHJpbWFyeS5kcm9wZG93bi10b2dnbGV7YmFja2dyb3VuZC1jb2xvcjojMDRjfS5idG4tZ3JvdXAub3BlbiAuYnRuLXdhcm5pbmcuZHJvcGRvd24tdG9nZ2xle2JhY2tncm91bmQtY29sb3I6I2Y4OTQwNn0uYnRuLWdyb3VwLm9wZW4gLmJ0bi1kYW5nZXIuZHJvcGRvd24tdG9nZ2xle2JhY2tncm91bmQtY29sb3I6I2JkMzYyZn0uYnRuLWdyb3VwLm9wZW4gLmJ0bi1zdWNjZXNzLmRyb3Bkb3duLXRvZ2dsZXtiYWNrZ3JvdW5kLWNvbG9yOiM1MWEzNTF9LmJ0bi1ncm91cC5vcGVuIC5idG4taW5mby5kcm9wZG93bi10b2dnbGV7YmFja2dyb3VuZC1jb2xvcjojMmY5NmI0fS5idG4tZ3JvdXAub3BlbiAuYnRuLWludmVyc2UuZHJvcGRvd24tdG9nZ2xle2JhY2tncm91bmQtY29sb3I6IzIyMn0uYnRuIC5jYXJldHttYXJnaW4tdG9wOjhweDttYXJnaW4tbGVmdDowfS5idG4tbGFyZ2UgLmNhcmV0e21hcmdpbi10b3A6NnB4fS5idG4tbGFyZ2UgLmNhcmV0e2JvcmRlci10b3Atd2lkdGg6NXB4O2JvcmRlci1yaWdodC13aWR0aDo1cHg7Ym9yZGVyLWxlZnQtd2lkdGg6NXB4fS5idG4tbWluaSAuY2FyZXQsLmJ0bi1zbWFsbCAuY2FyZXR7bWFyZ2luLXRvcDo4cHh9LmRyb3B1cCAuYnRuLWxhcmdlIC5jYXJldHtib3JkZXItYm90dG9tLXdpZHRoOjVweH0uYnRuLXByaW1hcnkgLmNhcmV0LC5idG4td2FybmluZyAuY2FyZXQsLmJ0bi1kYW5nZXIgLmNhcmV0LC5idG4taW5mbyAuY2FyZXQsLmJ0bi1zdWNjZXNzIC5jYXJldCwuYnRuLWludmVyc2UgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tLWNvbG9yOiNmZmZ9LmJ0bi1ncm91cC12ZXJ0aWNhbHtkaXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7Knpvb206MX0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG57ZGlzcGxheTpibG9jaztmbG9hdDpub25lO21heC13aWR0aDoxMDAlOy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MH0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4rLmJ0bnttYXJnaW4tdG9wOi0xcHg7bWFyZ2luLWxlZnQ6MH0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG46Zmlyc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweCA0cHggMCAwOy1tb3otYm9yZGVyLXJhZGl1czo0cHggNHB4IDAgMDtib3JkZXItcmFkaXVzOjRweCA0cHggMCAwfS5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bjpsYXN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDAgNHB4IDRweDstbW96LWJvcmRlci1yYWRpdXM6MCAwIDRweCA0cHg7Ym9yZGVyLXJhZGl1czowIDAgNHB4IDRweH0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tbGFyZ2U6Zmlyc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweCA2cHggMCAwOy1tb3otYm9yZGVyLXJhZGl1czo2cHggNnB4IDAgMDtib3JkZXItcmFkaXVzOjZweCA2cHggMCAwfS5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi1sYXJnZTpsYXN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDAgNnB4IDZweDstbW96LWJvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7Ym9yZGVyLXJhZGl1czowIDAgNnB4IDZweH0uYWxlcnR7cGFkZGluZzo4cHggMzVweCA4cHggMTRweDttYXJnaW4tYm90dG9tOjIwcHg7dGV4dC1zaGFkb3c6MCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuNSk7YmFja2dyb3VuZC1jb2xvcjojZmNmOGUzO2JvcmRlcjoxcHggc29saWQgI2ZiZWVkNTstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHh9LmFsZXJ0LC5hbGVydCBoNHtjb2xvcjojYzA5ODUzfS5hbGVydCBoNHttYXJnaW46MH0uYWxlcnQgLmNsb3Nle3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDotMnB4O3JpZ2h0Oi0yMXB4O2xpbmUtaGVpZ2h0OjIwcHh9LmFsZXJ0LXN1Y2Nlc3N7Y29sb3I6IzQ2ODg0NztiYWNrZ3JvdW5kLWNvbG9yOiNkZmYwZDg7Ym9yZGVyLWNvbG9yOiNkNmU5YzZ9LmFsZXJ0LXN1Y2Nlc3MgaDR7Y29sb3I6IzQ2ODg0N30uYWxlcnQtZGFuZ2VyLC5hbGVydC1lcnJvcntjb2xvcjojYjk0YTQ4O2JhY2tncm91bmQtY29sb3I6I2YyZGVkZTtib3JkZXItY29sb3I6I2VlZDNkN30uYWxlcnQtZGFuZ2VyIGg0LC5hbGVydC1lcnJvciBoNHtjb2xvcjojYjk0YTQ4fS5hbGVydC1pbmZve2NvbG9yOiMzYTg3YWQ7YmFja2dyb3VuZC1jb2xvcjojZDllZGY3O2JvcmRlci1jb2xvcjojYmNlOGYxfS5hbGVydC1pbmZvIGg0e2NvbG9yOiMzYTg3YWR9LmFsZXJ0LWJsb2Nre3BhZGRpbmctdG9wOjE0cHg7cGFkZGluZy1ib3R0b206MTRweH0uYWxlcnQtYmxvY2s+cCwuYWxlcnQtYmxvY2s+dWx7bWFyZ2luLWJvdHRvbTowfS5hbGVydC1ibG9jayBwK3B7bWFyZ2luLXRvcDo1cHh9Lm5hdnttYXJnaW4tYm90dG9tOjIwcHg7bWFyZ2luLWxlZnQ6MDtsaXN0LXN0eWxlOm5vbmV9Lm5hdj5saT5he2Rpc3BsYXk6YmxvY2t9Lm5hdj5saT5hOmhvdmVyLC5uYXY+bGk+YTpmb2N1c3t0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9Lm5hdj5saT5hPmltZ3ttYXgtd2lkdGg6bm9uZX0ubmF2Pi5wdWxsLXJpZ2h0e2Zsb2F0OnJpZ2h0fS5uYXYtaGVhZGVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZzozcHggMTVweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDpib2xkO2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6Izk5OTt0ZXh0LXNoYWRvdzowIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC41KTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9Lm5hdiBsaSsubmF2LWhlYWRlcnttYXJnaW4tdG9wOjlweH0ubmF2LWxpc3R7cGFkZGluZy1yaWdodDoxNXB4O3BhZGRpbmctbGVmdDoxNXB4O21hcmdpbi1ib3R0b206MH0ubmF2LWxpc3Q+bGk+YSwubmF2LWxpc3QgLm5hdi1oZWFkZXJ7bWFyZ2luLXJpZ2h0Oi0xNXB4O21hcmdpbi1sZWZ0Oi0xNXB4O3RleHQtc2hhZG93OjAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjUpfS5uYXYtbGlzdD5saT5he3BhZGRpbmc6M3B4IDE1cHh9Lm5hdi1saXN0Pi5hY3RpdmU+YSwubmF2LWxpc3Q+LmFjdGl2ZT5hOmhvdmVyLC5uYXYtbGlzdD4uYWN0aXZlPmE6Zm9jdXN7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMik7YmFja2dyb3VuZC1jb2xvcjojMDhjfS5uYXYtbGlzdCBbY2xhc3NePSJpY29uLSJdLC5uYXYtbGlzdCBbY2xhc3MqPSIgaWNvbi0iXXttYXJnaW4tcmlnaHQ6MnB4fS5uYXYtbGlzdCAuZGl2aWRlcnsqd2lkdGg6MTAwJTtoZWlnaHQ6MXB4O21hcmdpbjo5cHggMXB4OyptYXJnaW46LTVweCAwIDVweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjojZTVlNWU1O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmZmZ9Lm5hdi10YWJzLC5uYXYtcGlsbHN7Knpvb206MX0ubmF2LXRhYnM6YmVmb3JlLC5uYXYtcGlsbHM6YmVmb3JlLC5uYXYtdGFiczphZnRlciwubmF2LXBpbGxzOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5uYXYtdGFiczphZnRlciwubmF2LXBpbGxzOmFmdGVye2NsZWFyOmJvdGh9Lm5hdi10YWJzPmxpLC5uYXYtcGlsbHM+bGl7ZmxvYXQ6bGVmdH0ubmF2LXRhYnM+bGk+YSwubmF2LXBpbGxzPmxpPmF7cGFkZGluZy1yaWdodDoxMnB4O3BhZGRpbmctbGVmdDoxMnB4O21hcmdpbi1yaWdodDoycHg7bGluZS1oZWlnaHQ6MTRweH0ubmF2LXRhYnN7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RkZH0ubmF2LXRhYnM+bGl7bWFyZ2luLWJvdHRvbTotMXB4fS5uYXYtdGFicz5saT5he3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7bGluZS1oZWlnaHQ6MjBweDtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHggNHB4IDAgMDstbW96LWJvcmRlci1yYWRpdXM6NHB4IDRweCAwIDA7Ym9yZGVyLXJhZGl1czo0cHggNHB4IDAgMH0ubmF2LXRhYnM+bGk+YTpob3ZlciwubmF2LXRhYnM+bGk+YTpmb2N1c3tib3JkZXItY29sb3I6I2VlZSAjZWVlICNkZGR9Lm5hdi10YWJzPi5hY3RpdmU+YSwubmF2LXRhYnM+LmFjdGl2ZT5hOmhvdmVyLC5uYXYtdGFicz4uYWN0aXZlPmE6Zm9jdXN7Y29sb3I6IzU1NTtjdXJzb3I6ZGVmYXVsdDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1ib3R0b20tY29sb3I6dHJhbnNwYXJlbnR9Lm5hdi1waWxscz5saT5he3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7bWFyZ2luLXRvcDoycHg7bWFyZ2luLWJvdHRvbToycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjVweDstbW96LWJvcmRlci1yYWRpdXM6NXB4O2JvcmRlci1yYWRpdXM6NXB4fS5uYXYtcGlsbHM+LmFjdGl2ZT5hLC5uYXYtcGlsbHM+LmFjdGl2ZT5hOmhvdmVyLC5uYXYtcGlsbHM+LmFjdGl2ZT5hOmZvY3Vze2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMDhjfS5uYXYtc3RhY2tlZD5saXtmbG9hdDpub25lfS5uYXYtc3RhY2tlZD5saT5he21hcmdpbi1yaWdodDowfS5uYXYtdGFicy5uYXYtc3RhY2tlZHtib3JkZXItYm90dG9tOjB9Lm5hdi10YWJzLm5hdi1zdGFja2VkPmxpPmF7Ym9yZGVyOjFweCBzb2xpZCAjZGRkOy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MH0ubmF2LXRhYnMubmF2LXN0YWNrZWQ+bGk6Zmlyc3QtY2hpbGQ+YXstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OjRweH0ubmF2LXRhYnMubmF2LXN0YWNrZWQ+bGk6bGFzdC1jaGlsZD5hey13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6NHB4fS5uYXYtdGFicy5uYXYtc3RhY2tlZD5saT5hOmhvdmVyLC5uYXYtdGFicy5uYXYtc3RhY2tlZD5saT5hOmZvY3Vze3otaW5kZXg6Mjtib3JkZXItY29sb3I6I2RkZH0ubmF2LXBpbGxzLm5hdi1zdGFja2VkPmxpPmF7bWFyZ2luLWJvdHRvbTozcHh9Lm5hdi1waWxscy5uYXYtc3RhY2tlZD5saTpsYXN0LWNoaWxkPmF7bWFyZ2luLWJvdHRvbToxcHh9Lm5hdi10YWJzIC5kcm9wZG93bi1tZW51ey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDAgNnB4IDZweDstbW96LWJvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7Ym9yZGVyLXJhZGl1czowIDAgNnB4IDZweH0ubmF2LXBpbGxzIC5kcm9wZG93bi1tZW51ey13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweH0ubmF2IC5kcm9wZG93bi10b2dnbGUgLmNhcmV0e21hcmdpbi10b3A6NnB4O2JvcmRlci10b3AtY29sb3I6IzA4Yztib3JkZXItYm90dG9tLWNvbG9yOiMwOGN9Lm5hdiAuZHJvcGRvd24tdG9nZ2xlOmhvdmVyIC5jYXJldCwubmF2IC5kcm9wZG93bi10b2dnbGU6Zm9jdXMgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6IzAwNTU4MDtib3JkZXItYm90dG9tLWNvbG9yOiMwMDU1ODB9Lm5hdi10YWJzIC5kcm9wZG93bi10b2dnbGUgLmNhcmV0e21hcmdpbi10b3A6OHB4fS5uYXYgLmFjdGl2ZSAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmfS5uYXYtdGFicyAuYWN0aXZlIC5kcm9wZG93bi10b2dnbGUgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6IzU1NTtib3JkZXItYm90dG9tLWNvbG9yOiM1NTV9Lm5hdj4uZHJvcGRvd24uYWN0aXZlPmE6aG92ZXIsLm5hdj4uZHJvcGRvd24uYWN0aXZlPmE6Zm9jdXN7Y3Vyc29yOnBvaW50ZXJ9Lm5hdi10YWJzIC5vcGVuIC5kcm9wZG93bi10b2dnbGUsLm5hdi1waWxscyAub3BlbiAuZHJvcGRvd24tdG9nZ2xlLC5uYXY+bGkuZHJvcGRvd24ub3Blbi5hY3RpdmU+YTpob3ZlciwubmF2PmxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlPmE6Zm9jdXN7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Ym9yZGVyLWNvbG9yOiM5OTl9Lm5hdiBsaS5kcm9wZG93bi5vcGVuIC5jYXJldCwubmF2IGxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlIC5jYXJldCwubmF2IGxpLmRyb3Bkb3duLm9wZW4gYTpob3ZlciAuY2FyZXQsLm5hdiBsaS5kcm9wZG93bi5vcGVuIGE6Zm9jdXMgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tLWNvbG9yOiNmZmY7b3BhY2l0eToxO2ZpbHRlcjphbHBoYShvcGFjaXR5PTEwMCl9LnRhYnMtc3RhY2tlZCAub3Blbj5hOmhvdmVyLC50YWJzLXN0YWNrZWQgLm9wZW4+YTpmb2N1c3tib3JkZXItY29sb3I6Izk5OX0udGFiYmFibGV7Knpvb206MX0udGFiYmFibGU6YmVmb3JlLC50YWJiYWJsZTphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0udGFiYmFibGU6YWZ0ZXJ7Y2xlYXI6Ym90aH0udGFiLWNvbnRlbnR7b3ZlcmZsb3c6YXV0b30udGFicy1iZWxvdz4ubmF2LXRhYnMsLnRhYnMtcmlnaHQ+Lm5hdi10YWJzLC50YWJzLWxlZnQ+Lm5hdi10YWJze2JvcmRlci1ib3R0b206MH0udGFiLWNvbnRlbnQ+LnRhYi1wYW5lLC5waWxsLWNvbnRlbnQ+LnBpbGwtcGFuZXtkaXNwbGF5Om5vbmV9LnRhYi1jb250ZW50Pi5hY3RpdmUsLnBpbGwtY29udGVudD4uYWN0aXZle2Rpc3BsYXk6YmxvY2t9LnRhYnMtYmVsb3c+Lm5hdi10YWJze2JvcmRlci10b3A6MXB4IHNvbGlkICNkZGR9LnRhYnMtYmVsb3c+Lm5hdi10YWJzPmxpe21hcmdpbi10b3A6LTFweDttYXJnaW4tYm90dG9tOjB9LnRhYnMtYmVsb3c+Lm5hdi10YWJzPmxpPmF7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgMCA0cHggNHB4Oy1tb3otYm9yZGVyLXJhZGl1czowIDAgNHB4IDRweDtib3JkZXItcmFkaXVzOjAgMCA0cHggNHB4fS50YWJzLWJlbG93Pi5uYXYtdGFicz5saT5hOmhvdmVyLC50YWJzLWJlbG93Pi5uYXYtdGFicz5saT5hOmZvY3Vze2JvcmRlci10b3AtY29sb3I6I2RkZDtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50fS50YWJzLWJlbG93Pi5uYXYtdGFicz4uYWN0aXZlPmEsLnRhYnMtYmVsb3c+Lm5hdi10YWJzPi5hY3RpdmU+YTpob3ZlciwudGFicy1iZWxvdz4ubmF2LXRhYnM+LmFjdGl2ZT5hOmZvY3Vze2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudCAjZGRkICNkZGQgI2RkZH0udGFicy1sZWZ0Pi5uYXYtdGFicz5saSwudGFicy1yaWdodD4ubmF2LXRhYnM+bGl7ZmxvYXQ6bm9uZX0udGFicy1sZWZ0Pi5uYXYtdGFicz5saT5hLC50YWJzLXJpZ2h0Pi5uYXYtdGFicz5saT5he21pbi13aWR0aDo3NHB4O21hcmdpbi1yaWdodDowO21hcmdpbi1ib3R0b206M3B4fS50YWJzLWxlZnQ+Lm5hdi10YWJze2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0OjE5cHg7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZGRkfS50YWJzLWxlZnQ+Lm5hdi10YWJzPmxpPmF7bWFyZ2luLXJpZ2h0Oi0xcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHggMCAwIDRweDtib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4fS50YWJzLWxlZnQ+Lm5hdi10YWJzPmxpPmE6aG92ZXIsLnRhYnMtbGVmdD4ubmF2LXRhYnM+bGk+YTpmb2N1c3tib3JkZXItY29sb3I6I2VlZSAjZGRkICNlZWUgI2VlZX0udGFicy1sZWZ0Pi5uYXYtdGFicyAuYWN0aXZlPmEsLnRhYnMtbGVmdD4ubmF2LXRhYnMgLmFjdGl2ZT5hOmhvdmVyLC50YWJzLWxlZnQ+Lm5hdi10YWJzIC5hY3RpdmU+YTpmb2N1c3tib3JkZXItY29sb3I6I2RkZCB0cmFuc3BhcmVudCAjZGRkICNkZGQ7KmJvcmRlci1yaWdodC1jb2xvcjojZmZmfS50YWJzLXJpZ2h0Pi5uYXYtdGFic3tmbG9hdDpyaWdodDttYXJnaW4tbGVmdDoxOXB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZGRkfS50YWJzLXJpZ2h0Pi5uYXYtdGFicz5saT5he21hcmdpbi1sZWZ0Oi0xcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwOy1tb3otYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDtib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwfS50YWJzLXJpZ2h0Pi5uYXYtdGFicz5saT5hOmhvdmVyLC50YWJzLXJpZ2h0Pi5uYXYtdGFicz5saT5hOmZvY3Vze2JvcmRlci1jb2xvcjojZWVlICNlZWUgI2VlZSAjZGRkfS50YWJzLXJpZ2h0Pi5uYXYtdGFicyAuYWN0aXZlPmEsLnRhYnMtcmlnaHQ+Lm5hdi10YWJzIC5hY3RpdmU+YTpob3ZlciwudGFicy1yaWdodD4ubmF2LXRhYnMgLmFjdGl2ZT5hOmZvY3Vze2JvcmRlci1jb2xvcjojZGRkICNkZGQgI2RkZCB0cmFuc3BhcmVudDsqYm9yZGVyLWxlZnQtY29sb3I6I2ZmZn0ubmF2Pi5kaXNhYmxlZD5he2NvbG9yOiM5OTl9Lm5hdj4uZGlzYWJsZWQ+YTpob3ZlciwubmF2Pi5kaXNhYmxlZD5hOmZvY3Vze3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpkZWZhdWx0O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm5hdmJhcnsqcG9zaXRpb246cmVsYXRpdmU7KnotaW5kZXg6MjttYXJnaW4tYm90dG9tOjIwcHg7b3ZlcmZsb3c6dmlzaWJsZX0ubmF2YmFyLWlubmVye21pbi1oZWlnaHQ6NDBweDtwYWRkaW5nLXJpZ2h0OjIwcHg7cGFkZGluZy1sZWZ0OjIwcHg7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNmZmYsI2YyZjJmMik7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2ZmZiksdG8oI2YyZjJmMikpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNmZmYsI2YyZjJmMik7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNmZmYsI2YyZjJmMik7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNmZmYsI2YyZjJmMik7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyOjFweCBzb2xpZCAjZDRkNGQ0Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmZmZmZmZicsZW5kQ29sb3JzdHI9JyNmZmYyZjJmMicsR3JhZGllbnRUeXBlPTApOyp6b29tOjE7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMCwwLDAuMDY1KTstbW96LWJveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMCwwLDAsMC4wNjUpO2JveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMCwwLDAsMC4wNjUpfS5uYXZiYXItaW5uZXI6YmVmb3JlLC5uYXZiYXItaW5uZXI6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9Lm5hdmJhci1pbm5lcjphZnRlcntjbGVhcjpib3RofS5uYXZiYXIgLmNvbnRhaW5lcnt3aWR0aDphdXRvfS5uYXYtY29sbGFwc2UuY29sbGFwc2V7aGVpZ2h0OmF1dG87b3ZlcmZsb3c6dmlzaWJsZX0ubmF2YmFyIC5icmFuZHtkaXNwbGF5OmJsb2NrO2Zsb2F0OmxlZnQ7cGFkZGluZzoxMHB4IDIwcHggMTBweDttYXJnaW4tbGVmdDotMjBweDtmb250LXNpemU6MjBweDtmb250LXdlaWdodDoyMDA7Y29sb3I6Izc3Nzt0ZXh0LXNoYWRvdzowIDFweCAwICNmZmZ9Lm5hdmJhciAuYnJhbmQ6aG92ZXIsLm5hdmJhciAuYnJhbmQ6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOm5vbmV9Lm5hdmJhci10ZXh0e21hcmdpbi1ib3R0b206MDtsaW5lLWhlaWdodDo0MHB4O2NvbG9yOiM3Nzd9Lm5hdmJhci1saW5re2NvbG9yOiM3Nzd9Lm5hdmJhci1saW5rOmhvdmVyLC5uYXZiYXItbGluazpmb2N1c3tjb2xvcjojMzMzfS5uYXZiYXIgLmRpdmlkZXItdmVydGljYWx7aGVpZ2h0OjQwcHg7bWFyZ2luOjAgOXB4O2JvcmRlci1yaWdodDoxcHggc29saWQgI2ZmZjtib3JkZXItbGVmdDoxcHggc29saWQgI2YyZjJmMn0ubmF2YmFyIC5idG4sLm5hdmJhciAuYnRuLWdyb3Vwe21hcmdpbi10b3A6NXB4fS5uYXZiYXIgLmJ0bi1ncm91cCAuYnRuLC5uYXZiYXIgLmlucHV0LXByZXBlbmQgLmJ0biwubmF2YmFyIC5pbnB1dC1hcHBlbmQgLmJ0biwubmF2YmFyIC5pbnB1dC1wcmVwZW5kIC5idG4tZ3JvdXAsLm5hdmJhciAuaW5wdXQtYXBwZW5kIC5idG4tZ3JvdXB7bWFyZ2luLXRvcDowfS5uYXZiYXItZm9ybXttYXJnaW4tYm90dG9tOjA7Knpvb206MX0ubmF2YmFyLWZvcm06YmVmb3JlLC5uYXZiYXItZm9ybTphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ubmF2YmFyLWZvcm06YWZ0ZXJ7Y2xlYXI6Ym90aH0ubmF2YmFyLWZvcm0gaW5wdXQsLm5hdmJhci1mb3JtIHNlbGVjdCwubmF2YmFyLWZvcm0gLnJhZGlvLC5uYXZiYXItZm9ybSAuY2hlY2tib3h7bWFyZ2luLXRvcDo1cHh9Lm5hdmJhci1mb3JtIGlucHV0LC5uYXZiYXItZm9ybSBzZWxlY3QsLm5hdmJhci1mb3JtIC5idG57ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLWJvdHRvbTowfS5uYXZiYXItZm9ybSBpbnB1dFt0eXBlPSJpbWFnZSJdLC5uYXZiYXItZm9ybSBpbnB1dFt0eXBlPSJjaGVja2JveCJdLC5uYXZiYXItZm9ybSBpbnB1dFt0eXBlPSJyYWRpbyJde21hcmdpbi10b3A6M3B4fS5uYXZiYXItZm9ybSAuaW5wdXQtYXBwZW5kLC5uYXZiYXItZm9ybSAuaW5wdXQtcHJlcGVuZHttYXJnaW4tdG9wOjVweDt3aGl0ZS1zcGFjZTpub3dyYXB9Lm5hdmJhci1mb3JtIC5pbnB1dC1hcHBlbmQgaW5wdXQsLm5hdmJhci1mb3JtIC5pbnB1dC1wcmVwZW5kIGlucHV0e21hcmdpbi10b3A6MH0ubmF2YmFyLXNlYXJjaHtwb3NpdGlvbjpyZWxhdGl2ZTtmbG9hdDpsZWZ0O21hcmdpbi10b3A6NXB4O21hcmdpbi1ib3R0b206MH0ubmF2YmFyLXNlYXJjaCAuc2VhcmNoLXF1ZXJ5e3BhZGRpbmc6NHB4IDE0cHg7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OiJIZWx2ZXRpY2EgTmV1ZSIsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjE7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjE1cHg7LW1vei1ib3JkZXItcmFkaXVzOjE1cHg7Ym9yZGVyLXJhZGl1czoxNXB4fS5uYXZiYXItc3RhdGljLXRvcHtwb3NpdGlvbjpzdGF0aWM7bWFyZ2luLWJvdHRvbTowfS5uYXZiYXItc3RhdGljLXRvcCAubmF2YmFyLWlubmVyey13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MH0ubmF2YmFyLWZpeGVkLXRvcCwubmF2YmFyLWZpeGVkLWJvdHRvbXtwb3NpdGlvbjpmaXhlZDtyaWdodDowO2xlZnQ6MDt6LWluZGV4OjEwMzA7bWFyZ2luLWJvdHRvbTowfS5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItaW5uZXIsLm5hdmJhci1zdGF0aWMtdG9wIC5uYXZiYXItaW5uZXJ7Ym9yZGVyLXdpZHRoOjAgMCAxcHh9Lm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1pbm5lcntib3JkZXItd2lkdGg6MXB4IDAgMH0ubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWlubmVyLC5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItaW5uZXJ7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDowOy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MH0ubmF2YmFyLXN0YXRpYy10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZpeGVkLXRvcCAuY29udGFpbmVyLC5uYXZiYXItZml4ZWQtYm90dG9tIC5jb250YWluZXJ7d2lkdGg6OTQwcHh9Lm5hdmJhci1maXhlZC10b3B7dG9wOjB9Lm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1pbm5lciwubmF2YmFyLXN0YXRpYy10b3AgLm5hdmJhci1pbm5lcnstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMTBweCByZ2JhKDAsMCwwLDAuMSk7LW1vei1ib3gtc2hhZG93OjAgMXB4IDEwcHggcmdiYSgwLDAsMCwwLjEpO2JveC1zaGFkb3c6MCAxcHggMTBweCByZ2JhKDAsMCwwLDAuMSl9Lm5hdmJhci1maXhlZC1ib3R0b217Ym90dG9tOjB9Lm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1pbm5lcnstd2Via2l0LWJveC1zaGFkb3c6MCAtMXB4IDEwcHggcmdiYSgwLDAsMCwwLjEpOy1tb3otYm94LXNoYWRvdzowIC0xcHggMTBweCByZ2JhKDAsMCwwLDAuMSk7Ym94LXNoYWRvdzowIC0xcHggMTBweCByZ2JhKDAsMCwwLDAuMSl9Lm5hdmJhciAubmF2e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MDtkaXNwbGF5OmJsb2NrO2Zsb2F0OmxlZnQ7bWFyZ2luOjAgMTBweCAwIDB9Lm5hdmJhciAubmF2LnB1bGwtcmlnaHR7ZmxvYXQ6cmlnaHQ7bWFyZ2luLXJpZ2h0OjB9Lm5hdmJhciAubmF2Pmxpe2Zsb2F0OmxlZnR9Lm5hdmJhciAubmF2PmxpPmF7ZmxvYXQ6bm9uZTtwYWRkaW5nOjEwcHggMTVweCAxMHB4O2NvbG9yOiM3Nzc7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1zaGFkb3c6MCAxcHggMCAjZmZmfS5uYXZiYXIgLm5hdiAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldHttYXJnaW4tdG9wOjhweH0ubmF2YmFyIC5uYXY+bGk+YTpmb2N1cywubmF2YmFyIC5uYXY+bGk+YTpob3Zlcntjb2xvcjojMzMzO3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm5hdmJhciAubmF2Pi5hY3RpdmU+YSwubmF2YmFyIC5uYXY+LmFjdGl2ZT5hOmhvdmVyLC5uYXZiYXIgLm5hdj4uYWN0aXZlPmE6Zm9jdXN7Y29sb3I6IzU1NTt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNlNWU1ZTU7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgM3B4IDhweCByZ2JhKDAsMCwwLDAuMTI1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAzcHggOHB4IHJnYmEoMCwwLDAsMC4xMjUpO2JveC1zaGFkb3c6aW5zZXQgMCAzcHggOHB4IHJnYmEoMCwwLDAsMC4xMjUpfS5uYXZiYXIgLmJ0bi1uYXZiYXJ7ZGlzcGxheTpub25lO2Zsb2F0OnJpZ2h0O3BhZGRpbmc6N3B4IDEwcHg7bWFyZ2luLXJpZ2h0OjVweDttYXJnaW4tbGVmdDo1cHg7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6I2VkZWRlZDsqYmFja2dyb3VuZC1jb2xvcjojZTVlNWU1O2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNmMmYyZjIsI2U1ZTVlNSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2YyZjJmMiksdG8oI2U1ZTVlNSkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNmMmYyZjIsI2U1ZTVlNSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNmMmYyZjIsI2U1ZTVlNSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNmMmYyZjIsI2U1ZTVlNSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiNlNWU1ZTUgI2U1ZTVlNSAjYmZiZmJmO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmMmYyZjInLGVuZENvbG9yc3RyPScjZmZlNWU1ZTUnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4wNzUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4wNzUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMDc1KX0ubmF2YmFyIC5idG4tbmF2YmFyOmhvdmVyLC5uYXZiYXIgLmJ0bi1uYXZiYXI6Zm9jdXMsLm5hdmJhciAuYnRuLW5hdmJhcjphY3RpdmUsLm5hdmJhciAuYnRuLW5hdmJhci5hY3RpdmUsLm5hdmJhciAuYnRuLW5hdmJhci5kaXNhYmxlZCwubmF2YmFyIC5idG4tbmF2YmFyW2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2U1ZTVlNTsqYmFja2dyb3VuZC1jb2xvcjojZDlkOWQ5fS5uYXZiYXIgLmJ0bi1uYXZiYXI6YWN0aXZlLC5uYXZiYXIgLmJ0bi1uYXZiYXIuYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2NjYyBcOX0ubmF2YmFyIC5idG4tbmF2YmFyIC5pY29uLWJhcntkaXNwbGF5OmJsb2NrO3dpZHRoOjE4cHg7aGVpZ2h0OjJweDtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjFweDstbW96LWJvcmRlci1yYWRpdXM6MXB4O2JvcmRlci1yYWRpdXM6MXB4Oy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAwIHJnYmEoMCwwLDAsMC4yNSk7LW1vei1ib3gtc2hhZG93OjAgMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtib3gtc2hhZG93OjAgMXB4IDAgcmdiYSgwLDAsMCwwLjI1KX0uYnRuLW5hdmJhciAuaWNvbi1iYXIrLmljb24tYmFye21hcmdpbi10b3A6M3B4fS5uYXZiYXIgLm5hdj5saT4uZHJvcGRvd24tbWVudTpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7dG9wOi03cHg7bGVmdDo5cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJpZ2h0OjdweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjdweCBzb2xpZCAjY2NjO2JvcmRlci1sZWZ0OjdweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwwLDAsMC4yKTtjb250ZW50OicnfS5uYXZiYXIgLm5hdj5saT4uZHJvcGRvd24tbWVudTphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTZweDtsZWZ0OjEwcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJpZ2h0OjZweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjZweCBzb2xpZCAjZmZmO2JvcmRlci1sZWZ0OjZweCBzb2xpZCB0cmFuc3BhcmVudDtjb250ZW50OicnfS5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnU6YmVmb3Jle3RvcDphdXRvO2JvdHRvbTotN3B4O2JvcmRlci10b3A6N3B4IHNvbGlkICNjY2M7Ym9yZGVyLWJvdHRvbTowO2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwwLjIpfS5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnU6YWZ0ZXJ7dG9wOmF1dG87Ym90dG9tOi02cHg7Ym9yZGVyLXRvcDo2cHggc29saWQgI2ZmZjtib3JkZXItYm90dG9tOjB9Lm5hdmJhciAubmF2IGxpLmRyb3Bkb3duPmE6aG92ZXIgLmNhcmV0LC5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bj5hOmZvY3VzIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiMzMzM7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMzMzfS5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5vcGVuPi5kcm9wZG93bi10b2dnbGUsLm5hdmJhciAubmF2IGxpLmRyb3Bkb3duLmFjdGl2ZT4uZHJvcGRvd24tdG9nZ2xlLC5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5vcGVuLmFjdGl2ZT4uZHJvcGRvd24tdG9nZ2xle2NvbG9yOiM1NTU7YmFja2dyb3VuZC1jb2xvcjojZTVlNWU1fS5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiM3Nzc7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNzc3fS5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5vcGVuPi5kcm9wZG93bi10b2dnbGUgLmNhcmV0LC5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5hY3RpdmU+LmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXQsLm5hdmJhciAubmF2IGxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlPi5kcm9wZG93bi10b2dnbGUgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6IzU1NTtib3JkZXItYm90dG9tLWNvbG9yOiM1NTV9Lm5hdmJhciAucHVsbC1yaWdodD5saT4uZHJvcGRvd24tbWVudSwubmF2YmFyIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnUucHVsbC1yaWdodHtyaWdodDowO2xlZnQ6YXV0b30ubmF2YmFyIC5wdWxsLXJpZ2h0PmxpPi5kcm9wZG93bi1tZW51OmJlZm9yZSwubmF2YmFyIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnUucHVsbC1yaWdodDpiZWZvcmV7cmlnaHQ6MTJweDtsZWZ0OmF1dG99Lm5hdmJhciAucHVsbC1yaWdodD5saT4uZHJvcGRvd24tbWVudTphZnRlciwubmF2YmFyIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnUucHVsbC1yaWdodDphZnRlcntyaWdodDoxM3B4O2xlZnQ6YXV0b30ubmF2YmFyIC5wdWxsLXJpZ2h0PmxpPi5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1tZW51LC5uYXZiYXIgLm5hdj5saT4uZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0IC5kcm9wZG93bi1tZW51e3JpZ2h0OjEwMCU7bGVmdDphdXRvO21hcmdpbi1yaWdodDotMXB4O21hcmdpbi1sZWZ0OjA7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweCAwIDZweCA2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweCAwIDZweCA2cHg7Ym9yZGVyLXJhZGl1czo2cHggMCA2cHggNnB4fS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWlubmVye2JhY2tncm91bmQtY29sb3I6IzFiMWIxYjtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjMjIyLCMxMTEpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCMyMjIpLHRvKCMxMTEpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjMjIyLCMxMTEpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjMjIyLCMxMTEpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjMjIyLCMxMTEpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojMjUyNTI1O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMjIyMjIyJyxlbmRDb2xvcnN0cj0nI2ZmMTExMTExJyxHcmFkaWVudFR5cGU9MCl9Lm5hdmJhci1pbnZlcnNlIC5icmFuZCwubmF2YmFyLWludmVyc2UgLm5hdj5saT5he2NvbG9yOiM5OTk7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KX0ubmF2YmFyLWludmVyc2UgLmJyYW5kOmhvdmVyLC5uYXZiYXItaW52ZXJzZSAubmF2PmxpPmE6aG92ZXIsLm5hdmJhci1pbnZlcnNlIC5icmFuZDpmb2N1cywubmF2YmFyLWludmVyc2UgLm5hdj5saT5hOmZvY3Vze2NvbG9yOiNmZmZ9Lm5hdmJhci1pbnZlcnNlIC5icmFuZHtjb2xvcjojOTk5fS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRleHR7Y29sb3I6Izk5OX0ubmF2YmFyLWludmVyc2UgLm5hdj5saT5hOmZvY3VzLC5uYXZiYXItaW52ZXJzZSAubmF2PmxpPmE6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5uYXZiYXItaW52ZXJzZSAubmF2IC5hY3RpdmU+YSwubmF2YmFyLWludmVyc2UgLm5hdiAuYWN0aXZlPmE6aG92ZXIsLm5hdmJhci1pbnZlcnNlIC5uYXYgLmFjdGl2ZT5hOmZvY3Vze2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMTExfS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWxpbmt7Y29sb3I6Izk5OX0ubmF2YmFyLWludmVyc2UgLm5hdmJhci1saW5rOmhvdmVyLC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWxpbms6Zm9jdXN7Y29sb3I6I2ZmZn0ubmF2YmFyLWludmVyc2UgLmRpdmlkZXItdmVydGljYWx7Ym9yZGVyLXJpZ2h0LWNvbG9yOiMyMjI7Ym9yZGVyLWxlZnQtY29sb3I6IzExMX0ubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bi5vcGVuPi5kcm9wZG93bi10b2dnbGUsLm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24uYWN0aXZlPi5kcm9wZG93bi10b2dnbGUsLm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24ub3Blbi5hY3RpdmU+LmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzExMX0ubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bj5hOmhvdmVyIC5jYXJldCwubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bj5hOmZvY3VzIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmfS5uYXZiYXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGUgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6Izk5OTtib3JkZXItYm90dG9tLWNvbG9yOiM5OTl9Lm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24ub3Blbj4uZHJvcGRvd24tdG9nZ2xlIC5jYXJldCwubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bi5hY3RpdmU+LmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXQsLm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24ub3Blbi5hY3RpdmU+LmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b20tY29sb3I6I2ZmZn0ubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzUxNTE1MTtib3JkZXItY29sb3I6IzExMTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xNSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xNSk7LXdlYmtpdC10cmFuc2l0aW9uOm5vbmU7LW1vei10cmFuc2l0aW9uOm5vbmU7LW8tdHJhbnNpdGlvbjpub25lO3RyYW5zaXRpb246bm9uZX0ubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeTotbW96LXBsYWNlaG9sZGVye2NvbG9yOiNjY2N9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItc2VhcmNoIC5zZWFyY2gtcXVlcnk6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNjY2N9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItc2VhcmNoIC5zZWFyY2gtcXVlcnk6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6I2NjY30ubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeTpmb2N1cywubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeS5mb2N1c2Vke3BhZGRpbmc6NXB4IDE1cHg7Y29sb3I6IzMzMzt0ZXh0LXNoYWRvdzowIDFweCAwICNmZmY7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjowO291dGxpbmU6MDstd2Via2l0LWJveC1zaGFkb3c6MCAwIDNweCByZ2JhKDAsMCwwLDAuMTUpOy1tb3otYm94LXNoYWRvdzowIDAgM3B4IHJnYmEoMCwwLDAsMC4xNSk7Ym94LXNoYWRvdzowIDAgM3B4IHJnYmEoMCwwLDAsMC4xNSl9Lm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFye2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiMwZTBlMGU7KmJhY2tncm91bmQtY29sb3I6IzA0MDQwNDtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjMTUxNTE1LCMwNDA0MDQpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCMxNTE1MTUpLHRvKCMwNDA0MDQpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjMTUxNTE1LCMwNDA0MDQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjMTUxNTE1LCMwNDA0MDQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjMTUxNTE1LCMwNDA0MDQpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojMDQwNDA0ICMwNDA0MDQgIzAwMDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMTUxNTE1JyxlbmRDb2xvcnN0cj0nI2ZmMDQwNDA0JyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKX0ubmF2YmFyLWludmVyc2UgLmJ0bi1uYXZiYXI6aG92ZXIsLm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyOmZvY3VzLC5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhcjphY3RpdmUsLm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyLmFjdGl2ZSwubmF2YmFyLWludmVyc2UgLmJ0bi1uYXZiYXIuZGlzYWJsZWQsLm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyW2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzA0MDQwNDsqYmFja2dyb3VuZC1jb2xvcjojMDAwfS5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhcjphY3RpdmUsLm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAgXDl9LmJyZWFkY3J1bWJ7cGFkZGluZzo4cHggMTVweDttYXJnaW46MCAwIDIwcHg7bGlzdC1zdHlsZTpub25lO2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHh9LmJyZWFkY3J1bWI+bGl7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lO3RleHQtc2hhZG93OjAgMXB4IDAgI2ZmZjsqem9vbToxfS5icmVhZGNydW1iPmxpPi5kaXZpZGVye3BhZGRpbmc6MCA1cHg7Y29sb3I6I2NjY30uYnJlYWRjcnVtYj4uYWN0aXZle2NvbG9yOiM5OTl9LnBhZ2luYXRpb257bWFyZ2luOjIwcHggMH0ucGFnaW5hdGlvbiB1bHtkaXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7bWFyZ2luLWJvdHRvbTowO21hcmdpbi1sZWZ0OjA7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4Oyp6b29tOjE7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpOy1tb3otYm94LXNoYWRvdzowIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93OjAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpfS5wYWdpbmF0aW9uIHVsPmxpe2Rpc3BsYXk6aW5saW5lfS5wYWdpbmF0aW9uIHVsPmxpPmEsLnBhZ2luYXRpb24gdWw+bGk+c3BhbntmbG9hdDpsZWZ0O3BhZGRpbmc6NHB4IDEycHg7bGluZS1oZWlnaHQ6MjBweDt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1sZWZ0LXdpZHRoOjB9LnBhZ2luYXRpb24gdWw+bGk+YTpob3ZlciwucGFnaW5hdGlvbiB1bD5saT5hOmZvY3VzLC5wYWdpbmF0aW9uIHVsPi5hY3RpdmU+YSwucGFnaW5hdGlvbiB1bD4uYWN0aXZlPnNwYW57YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1fS5wYWdpbmF0aW9uIHVsPi5hY3RpdmU+YSwucGFnaW5hdGlvbiB1bD4uYWN0aXZlPnNwYW57Y29sb3I6Izk5OTtjdXJzb3I6ZGVmYXVsdH0ucGFnaW5hdGlvbiB1bD4uZGlzYWJsZWQ+c3BhbiwucGFnaW5hdGlvbiB1bD4uZGlzYWJsZWQ+YSwucGFnaW5hdGlvbiB1bD4uZGlzYWJsZWQ+YTpob3ZlciwucGFnaW5hdGlvbiB1bD4uZGlzYWJsZWQ+YTpmb2N1c3tjb2xvcjojOTk5O2N1cnNvcjpkZWZhdWx0O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LnBhZ2luYXRpb24gdWw+bGk6Zmlyc3QtY2hpbGQ+YSwucGFnaW5hdGlvbiB1bD5saTpmaXJzdC1jaGlsZD5zcGFue2JvcmRlci1sZWZ0LXdpZHRoOjFweDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OjRweH0ucGFnaW5hdGlvbiB1bD5saTpsYXN0LWNoaWxkPmEsLnBhZ2luYXRpb24gdWw+bGk6bGFzdC1jaGlsZD5zcGFuey13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjRweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6NHB4fS5wYWdpbmF0aW9uLWNlbnRlcmVke3RleHQtYWxpZ246Y2VudGVyfS5wYWdpbmF0aW9uLXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LnBhZ2luYXRpb24tbGFyZ2UgdWw+bGk+YSwucGFnaW5hdGlvbi1sYXJnZSB1bD5saT5zcGFue3BhZGRpbmc6MTFweCAxOXB4O2ZvbnQtc2l6ZToxNy41cHh9LnBhZ2luYXRpb24tbGFyZ2UgdWw+bGk6Zmlyc3QtY2hpbGQ+YSwucGFnaW5hdGlvbi1sYXJnZSB1bD5saTpmaXJzdC1jaGlsZD5zcGFuey13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo2cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo2cHg7LXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOjZweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDo2cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6NnB4fS5wYWdpbmF0aW9uLWxhcmdlIHVsPmxpOmxhc3QtY2hpbGQ+YSwucGFnaW5hdGlvbi1sYXJnZSB1bD5saTpsYXN0LWNoaWxkPnNwYW57LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo2cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NnB4Oy13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NnB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6NnB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDo2cHh9LnBhZ2luYXRpb24tbWluaSB1bD5saTpmaXJzdC1jaGlsZD5hLC5wYWdpbmF0aW9uLXNtYWxsIHVsPmxpOmZpcnN0LWNoaWxkPmEsLnBhZ2luYXRpb24tbWluaSB1bD5saTpmaXJzdC1jaGlsZD5zcGFuLC5wYWdpbmF0aW9uLXNtYWxsIHVsPmxpOmZpcnN0LWNoaWxkPnNwYW57LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDstd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjNweDstbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDozcHh9LnBhZ2luYXRpb24tbWluaSB1bD5saTpsYXN0LWNoaWxkPmEsLnBhZ2luYXRpb24tc21hbGwgdWw+bGk6bGFzdC1jaGlsZD5hLC5wYWdpbmF0aW9uLW1pbmkgdWw+bGk6bGFzdC1jaGlsZD5zcGFuLC5wYWdpbmF0aW9uLXNtYWxsIHVsPmxpOmxhc3QtY2hpbGQ+c3Bhbnstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHg7LXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czozcHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDozcHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OjNweH0ucGFnaW5hdGlvbi1zbWFsbCB1bD5saT5hLC5wYWdpbmF0aW9uLXNtYWxsIHVsPmxpPnNwYW57cGFkZGluZzoycHggMTBweDtmb250LXNpemU6MTEuOXB4fS5wYWdpbmF0aW9uLW1pbmkgdWw+bGk+YSwucGFnaW5hdGlvbi1taW5pIHVsPmxpPnNwYW57cGFkZGluZzowIDZweDtmb250LXNpemU6MTAuNXB4fS5wYWdlcnttYXJnaW46MjBweCAwO3RleHQtYWxpZ246Y2VudGVyO2xpc3Qtc3R5bGU6bm9uZTsqem9vbToxfS5wYWdlcjpiZWZvcmUsLnBhZ2VyOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5wYWdlcjphZnRlcntjbGVhcjpib3RofS5wYWdlciBsaXtkaXNwbGF5OmlubGluZX0ucGFnZXIgbGk+YSwucGFnZXIgbGk+c3BhbntkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjVweCAxNHB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkZGQ7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjE1cHg7LW1vei1ib3JkZXItcmFkaXVzOjE1cHg7Ym9yZGVyLXJhZGl1czoxNXB4fS5wYWdlciBsaT5hOmhvdmVyLC5wYWdlciBsaT5hOmZvY3Vze3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNX0ucGFnZXIgLm5leHQ+YSwucGFnZXIgLm5leHQ+c3BhbntmbG9hdDpyaWdodH0ucGFnZXIgLnByZXZpb3VzPmEsLnBhZ2VyIC5wcmV2aW91cz5zcGFue2Zsb2F0OmxlZnR9LnBhZ2VyIC5kaXNhYmxlZD5hLC5wYWdlciAuZGlzYWJsZWQ+YTpob3ZlciwucGFnZXIgLmRpc2FibGVkPmE6Zm9jdXMsLnBhZ2VyIC5kaXNhYmxlZD5zcGFue2NvbG9yOiM5OTk7Y3Vyc29yOmRlZmF1bHQ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tb2RhbC1iYWNrZHJvcHtwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDt6LWluZGV4OjEwNDA7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tb2RhbC1iYWNrZHJvcC5mYWRle29wYWNpdHk6MH0ubW9kYWwtYmFja2Ryb3AsLm1vZGFsLWJhY2tkcm9wLmZhZGUuaW57b3BhY2l0eTouODtmaWx0ZXI6YWxwaGEob3BhY2l0eT04MCl9Lm1vZGFse3Bvc2l0aW9uOmZpeGVkO3RvcDoxMCU7bGVmdDo1MCU7ei1pbmRleDoxMDUwO3dpZHRoOjU2MHB4O21hcmdpbi1sZWZ0Oi0yODBweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwwLjMpOypib3JkZXI6MXB4IHNvbGlkICM5OTk7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4O2JvcmRlci1yYWRpdXM6NnB4O291dGxpbmU6MDstd2Via2l0LWJveC1zaGFkb3c6MCAzcHggN3B4IHJnYmEoMCwwLDAsMC4zKTstbW96LWJveC1zaGFkb3c6MCAzcHggN3B4IHJnYmEoMCwwLDAsMC4zKTtib3gtc2hhZG93OjAgM3B4IDdweCByZ2JhKDAsMCwwLDAuMyk7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7LW1vei1iYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7YmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94fS5tb2RhbC5mYWRle3RvcDotMjUlOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBsaW5lYXIsdG9wIC4zcyBlYXNlLW91dDstbW96LXRyYW5zaXRpb246b3BhY2l0eSAuM3MgbGluZWFyLHRvcCAuM3MgZWFzZS1vdXQ7LW8tdHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBsaW5lYXIsdG9wIC4zcyBlYXNlLW91dDt0cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGxpbmVhcix0b3AgLjNzIGVhc2Utb3V0fS5tb2RhbC5mYWRlLmlue3RvcDoxMCV9Lm1vZGFsLWhlYWRlcntwYWRkaW5nOjlweCAxNXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlZWV9Lm1vZGFsLWhlYWRlciAuY2xvc2V7bWFyZ2luLXRvcDoycHh9Lm1vZGFsLWhlYWRlciBoM3ttYXJnaW46MDtsaW5lLWhlaWdodDozMHB4fS5tb2RhbC1ib2R5e3Bvc2l0aW9uOnJlbGF0aXZlO21heC1oZWlnaHQ6NDAwcHg7cGFkZGluZzoxNXB4O292ZXJmbG93LXk6YXV0b30ubW9kYWwtZm9ybXttYXJnaW4tYm90dG9tOjB9Lm1vZGFsLWZvb3RlcntwYWRkaW5nOjE0cHggMTVweCAxNXB4O21hcmdpbi1ib3R0b206MDt0ZXh0LWFsaWduOnJpZ2h0O2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTtib3JkZXItdG9wOjFweCBzb2xpZCAjZGRkOy13ZWJraXQtYm9yZGVyLXJhZGl1czowIDAgNnB4IDZweDstbW96LWJvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7Ym9yZGVyLXJhZGl1czowIDAgNnB4IDZweDsqem9vbToxOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAwICNmZmY7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgI2ZmZjtib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgI2ZmZn0ubW9kYWwtZm9vdGVyOmJlZm9yZSwubW9kYWwtZm9vdGVyOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5tb2RhbC1mb290ZXI6YWZ0ZXJ7Y2xlYXI6Ym90aH0ubW9kYWwtZm9vdGVyIC5idG4rLmJ0bnttYXJnaW4tYm90dG9tOjA7bWFyZ2luLWxlZnQ6NXB4fS5tb2RhbC1mb290ZXIgLmJ0bi1ncm91cCAuYnRuKy5idG57bWFyZ2luLWxlZnQ6LTFweH0ubW9kYWwtZm9vdGVyIC5idG4tYmxvY2srLmJ0bi1ibG9ja3ttYXJnaW4tbGVmdDowfS50b29sdGlwe3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAzMDtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMXB4O2xpbmUtaGVpZ2h0OjEuNDtvcGFjaXR5OjA7ZmlsdGVyOmFscGhhKG9wYWNpdHk9MCk7dmlzaWJpbGl0eTp2aXNpYmxlfS50b29sdGlwLmlue29wYWNpdHk6Ljg7ZmlsdGVyOmFscGhhKG9wYWNpdHk9ODApfS50b29sdGlwLnRvcHtwYWRkaW5nOjVweCAwO21hcmdpbi10b3A6LTNweH0udG9vbHRpcC5yaWdodHtwYWRkaW5nOjAgNXB4O21hcmdpbi1sZWZ0OjNweH0udG9vbHRpcC5ib3R0b217cGFkZGluZzo1cHggMDttYXJnaW4tdG9wOjNweH0udG9vbHRpcC5sZWZ0e3BhZGRpbmc6MCA1cHg7bWFyZ2luLWxlZnQ6LTNweH0udG9vbHRpcC1pbm5lcnttYXgtd2lkdGg6MjAwcHg7cGFkZGluZzo4cHg7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fS50b29sdGlwLWFycm93e3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1zdHlsZTpzb2xpZH0udG9vbHRpcC50b3AgLnRvb2x0aXAtYXJyb3d7Ym90dG9tOjA7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTVweDtib3JkZXItdG9wLWNvbG9yOiMwMDA7Ym9yZGVyLXdpZHRoOjVweCA1cHggMH0udG9vbHRpcC5yaWdodCAudG9vbHRpcC1hcnJvd3t0b3A6NTAlO2xlZnQ6MDttYXJnaW4tdG9wOi01cHg7Ym9yZGVyLXJpZ2h0LWNvbG9yOiMwMDA7Ym9yZGVyLXdpZHRoOjVweCA1cHggNXB4IDB9LnRvb2x0aXAubGVmdCAudG9vbHRpcC1hcnJvd3t0b3A6NTAlO3JpZ2h0OjA7bWFyZ2luLXRvcDotNXB4O2JvcmRlci1sZWZ0LWNvbG9yOiMwMDA7Ym9yZGVyLXdpZHRoOjVweCAwIDVweCA1cHh9LnRvb2x0aXAuYm90dG9tIC50b29sdGlwLWFycm93e3RvcDowO2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi01cHg7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDAwO2JvcmRlci13aWR0aDowIDVweCA1cHh9LnBvcG92ZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3otaW5kZXg6MTAxMDtkaXNwbGF5Om5vbmU7bWF4LXdpZHRoOjQwMHB4O3BhZGRpbmc6MXB4O3RleHQtYWxpZ246bGVmdDt3aGl0ZS1zcGFjZTpub3JtYWw7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4yKTstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyLXJhZGl1czo2cHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgNXB4IDEwcHggcmdiYSgwLDAsMCwwLjIpOy1tb3otYm94LXNoYWRvdzowIDVweCAxMHB4IHJnYmEoMCwwLDAsMC4yKTtib3gtc2hhZG93OjAgNXB4IDEwcHggcmdiYSgwLDAsMCwwLjIpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94Oy1tb3otYmFja2dyb3VuZC1jbGlwOnBhZGRpbmc7YmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94fS5wb3BvdmVyLnRvcHttYXJnaW4tdG9wOi0xMHB4fS5wb3BvdmVyLnJpZ2h0e21hcmdpbi1sZWZ0OjEwcHh9LnBvcG92ZXIuYm90dG9te21hcmdpbi10b3A6MTBweH0ucG9wb3Zlci5sZWZ0e21hcmdpbi1sZWZ0Oi0xMHB4fS5wb3BvdmVyLXRpdGxle3BhZGRpbmc6OHB4IDE0cHg7bWFyZ2luOjA7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjE4cHg7YmFja2dyb3VuZC1jb2xvcjojZjdmN2Y3O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjVweCA1cHggMCAwOy1tb3otYm9yZGVyLXJhZGl1czo1cHggNXB4IDAgMDtib3JkZXItcmFkaXVzOjVweCA1cHggMCAwfS5wb3BvdmVyLXRpdGxlOmVtcHR5e2Rpc3BsYXk6bm9uZX0ucG9wb3Zlci1jb250ZW50e3BhZGRpbmc6OXB4IDE0cHh9LnBvcG92ZXIgLmFycm93LC5wb3BvdmVyIC5hcnJvdzphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1zdHlsZTpzb2xpZH0ucG9wb3ZlciAuYXJyb3d7Ym9yZGVyLXdpZHRoOjExcHh9LnBvcG92ZXIgLmFycm93OmFmdGVye2JvcmRlci13aWR0aDoxMHB4O2NvbnRlbnQ6IiJ9LnBvcG92ZXIudG9wIC5hcnJvd3tib3R0b206LTExcHg7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTExcHg7Ym9yZGVyLXRvcC1jb2xvcjojOTk5O2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwwLjI1KTtib3JkZXItYm90dG9tLXdpZHRoOjB9LnBvcG92ZXIudG9wIC5hcnJvdzphZnRlcntib3R0b206MXB4O21hcmdpbi1sZWZ0Oi0xMHB4O2JvcmRlci10b3AtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tLXdpZHRoOjB9LnBvcG92ZXIucmlnaHQgLmFycm93e3RvcDo1MCU7bGVmdDotMTFweDttYXJnaW4tdG9wOi0xMXB4O2JvcmRlci1yaWdodC1jb2xvcjojOTk5O2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDAuMjUpO2JvcmRlci1sZWZ0LXdpZHRoOjB9LnBvcG92ZXIucmlnaHQgLmFycm93OmFmdGVye2JvdHRvbTotMTBweDtsZWZ0OjFweDtib3JkZXItcmlnaHQtY29sb3I6I2ZmZjtib3JkZXItbGVmdC13aWR0aDowfS5wb3BvdmVyLmJvdHRvbSAuYXJyb3d7dG9wOi0xMXB4O2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi0xMXB4O2JvcmRlci1ib3R0b20tY29sb3I6Izk5OTtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwwLDAsMC4yNSk7Ym9yZGVyLXRvcC13aWR0aDowfS5wb3BvdmVyLmJvdHRvbSAuYXJyb3c6YWZ0ZXJ7dG9wOjFweDttYXJnaW4tbGVmdDotMTBweDtib3JkZXItYm90dG9tLWNvbG9yOiNmZmY7Ym9yZGVyLXRvcC13aWR0aDowfS5wb3BvdmVyLmxlZnQgLmFycm93e3RvcDo1MCU7cmlnaHQ6LTExcHg7bWFyZ2luLXRvcDotMTFweDtib3JkZXItbGVmdC1jb2xvcjojOTk5O2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMCwwLDAsMC4yNSk7Ym9yZGVyLXJpZ2h0LXdpZHRoOjB9LnBvcG92ZXIubGVmdCAuYXJyb3c6YWZ0ZXJ7cmlnaHQ6MXB4O2JvdHRvbTotMTBweDtib3JkZXItbGVmdC1jb2xvcjojZmZmO2JvcmRlci1yaWdodC13aWR0aDowfS50aHVtYm5haWxze21hcmdpbi1sZWZ0Oi0yMHB4O2xpc3Qtc3R5bGU6bm9uZTsqem9vbToxfS50aHVtYm5haWxzOmJlZm9yZSwudGh1bWJuYWlsczphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0udGh1bWJuYWlsczphZnRlcntjbGVhcjpib3RofS5yb3ctZmx1aWQgLnRodW1ibmFpbHN7bWFyZ2luLWxlZnQ6MH0udGh1bWJuYWlscz5saXtmbG9hdDpsZWZ0O21hcmdpbi1ib3R0b206MjBweDttYXJnaW4tbGVmdDoyMHB4fS50aHVtYm5haWx7ZGlzcGxheTpibG9jaztwYWRkaW5nOjRweDtsaW5lLWhlaWdodDoyMHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMDU1KTstbW96LWJveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4wNTUpO2JveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4wNTUpOy13ZWJraXQtdHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0Oy1tb3otdHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0Oy1vLXRyYW5zaXRpb246YWxsIC4ycyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOmFsbCAuMnMgZWFzZS1pbi1vdXR9YS50aHVtYm5haWw6aG92ZXIsYS50aHVtYm5haWw6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwOGM7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMTA1LDIxNCwwLjI1KTstbW96LWJveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMCwxMDUsMjE0LDAuMjUpO2JveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMCwxMDUsMjE0LDAuMjUpfS50aHVtYm5haWw+aW1ne2Rpc3BsYXk6YmxvY2s7bWF4LXdpZHRoOjEwMCU7bWFyZ2luLXJpZ2h0OmF1dG87bWFyZ2luLWxlZnQ6YXV0b30udGh1bWJuYWlsIC5jYXB0aW9ue3BhZGRpbmc6OXB4O2NvbG9yOiM1NTV9Lm1lZGlhLC5tZWRpYS1ib2R5e292ZXJmbG93OmhpZGRlbjsqb3ZlcmZsb3c6dmlzaWJsZTt6b29tOjF9Lm1lZGlhLC5tZWRpYSAubWVkaWF7bWFyZ2luLXRvcDoxNXB4fS5tZWRpYTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1lZGlhLW9iamVjdHtkaXNwbGF5OmJsb2NrfS5tZWRpYS1oZWFkaW5ne21hcmdpbjowIDAgNXB4fS5tZWRpYT4ucHVsbC1sZWZ0e21hcmdpbi1yaWdodDoxMHB4fS5tZWRpYT4ucHVsbC1yaWdodHttYXJnaW4tbGVmdDoxMHB4fS5tZWRpYS1saXN0e21hcmdpbi1sZWZ0OjA7bGlzdC1zdHlsZTpub25lfS5sYWJlbCwuYmFkZ2V7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzoycHggNHB4O2ZvbnQtc2l6ZToxMS44NDRweDtmb250LXdlaWdodDpib2xkO2xpbmUtaGVpZ2h0OjE0cHg7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO3doaXRlLXNwYWNlOm5vd3JhcDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtiYWNrZ3JvdW5kLWNvbG9yOiM5OTl9LmxhYmVsey13ZWJraXQtYm9yZGVyLXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzOjNweDtib3JkZXItcmFkaXVzOjNweH0uYmFkZ2V7cGFkZGluZy1yaWdodDo5cHg7cGFkZGluZy1sZWZ0OjlweDstd2Via2l0LWJvcmRlci1yYWRpdXM6OXB4Oy1tb3otYm9yZGVyLXJhZGl1czo5cHg7Ym9yZGVyLXJhZGl1czo5cHh9LmxhYmVsOmVtcHR5LC5iYWRnZTplbXB0eXtkaXNwbGF5Om5vbmV9YS5sYWJlbDpob3ZlcixhLmxhYmVsOmZvY3VzLGEuYmFkZ2U6aG92ZXIsYS5iYWRnZTpmb2N1c3tjb2xvcjojZmZmO3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpwb2ludGVyfS5sYWJlbC1pbXBvcnRhbnQsLmJhZGdlLWltcG9ydGFudHtiYWNrZ3JvdW5kLWNvbG9yOiNiOTRhNDh9LmxhYmVsLWltcG9ydGFudFtocmVmXSwuYmFkZ2UtaW1wb3J0YW50W2hyZWZde2JhY2tncm91bmQtY29sb3I6Izk1M2IzOX0ubGFiZWwtd2FybmluZywuYmFkZ2Utd2FybmluZ3tiYWNrZ3JvdW5kLWNvbG9yOiNmODk0MDZ9LmxhYmVsLXdhcm5pbmdbaHJlZl0sLmJhZGdlLXdhcm5pbmdbaHJlZl17YmFja2dyb3VuZC1jb2xvcjojYzY3NjA1fS5sYWJlbC1zdWNjZXNzLC5iYWRnZS1zdWNjZXNze2JhY2tncm91bmQtY29sb3I6IzQ2ODg0N30ubGFiZWwtc3VjY2Vzc1tocmVmXSwuYmFkZ2Utc3VjY2Vzc1tocmVmXXtiYWNrZ3JvdW5kLWNvbG9yOiMzNTY2MzV9LmxhYmVsLWluZm8sLmJhZGdlLWluZm97YmFja2dyb3VuZC1jb2xvcjojM2E4N2FkfS5sYWJlbC1pbmZvW2hyZWZdLC5iYWRnZS1pbmZvW2hyZWZde2JhY2tncm91bmQtY29sb3I6IzJkNjk4N30ubGFiZWwtaW52ZXJzZSwuYmFkZ2UtaW52ZXJzZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMzN9LmxhYmVsLWludmVyc2VbaHJlZl0sLmJhZGdlLWludmVyc2VbaHJlZl17YmFja2dyb3VuZC1jb2xvcjojMWExYTFhfS5idG4gLmxhYmVsLC5idG4gLmJhZGdle3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDotMXB4fS5idG4tbWluaSAubGFiZWwsLmJ0bi1taW5pIC5iYWRnZXt0b3A6MH1ALXdlYmtpdC1rZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXN7ZnJvbXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjQwcHggMH10b3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH19QC1tb3ota2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVze2Zyb217YmFja2dyb3VuZC1wb3NpdGlvbjo0MHB4IDB9dG97YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9fUAtbXMta2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVze2Zyb217YmFja2dyb3VuZC1wb3NpdGlvbjo0MHB4IDB9dG97YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9fUAtby1rZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXN7ZnJvbXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH10b3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjQwcHggMH19QGtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlc3tmcm9te2JhY2tncm91bmQtcG9zaXRpb246NDBweCAwfXRve2JhY2tncm91bmQtcG9zaXRpb246MCAwfX0ucHJvZ3Jlc3N7aGVpZ2h0OjIwcHg7bWFyZ2luLWJvdHRvbToyMHB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOiNmN2Y3Zjc7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsI2Y1ZjVmNSwjZjlmOWY5KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjZjVmNWY1KSx0bygjZjlmOWY5KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsI2Y1ZjVmNSwjZjlmOWY5KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsI2Y1ZjVmNSwjZjlmOWY5KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sI2Y1ZjVmNSwjZjlmOWY5KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmNWY1ZjUnLGVuZENvbG9yc3RyPScjZmZmOWY5ZjknLEdyYWRpZW50VHlwZT0wKTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4xKTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4xKTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMSl9LnByb2dyZXNzIC5iYXJ7ZmxvYXQ6bGVmdDt3aWR0aDowO2hlaWdodDoxMDAlO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiMwZTkwZDI7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIzE0OWJkZiwjMDQ4MGJlKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjMTQ5YmRmKSx0bygjMDQ4MGJlKSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIzE0OWJkZiwjMDQ4MGJlKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsIzE0OWJkZiwjMDQ4MGJlKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIzE0OWJkZiwjMDQ4MGJlKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjE0OWJkZicsZW5kQ29sb3JzdHI9JyNmZjA0ODBiZScsR3JhZGllbnRUeXBlPTApOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLDAuMTUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLDAuMTUpO2JveC1zaGFkb3c6aW5zZXQgMCAtMXB4IDAgcmdiYSgwLDAsMCwwLjE1KTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC10cmFuc2l0aW9uOndpZHRoIC42cyBlYXNlOy1tb3otdHJhbnNpdGlvbjp3aWR0aCAuNnMgZWFzZTstby10cmFuc2l0aW9uOndpZHRoIC42cyBlYXNlO3RyYW5zaXRpb246d2lkdGggLjZzIGVhc2V9LnByb2dyZXNzIC5iYXIrLmJhcnstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMXB4IDAgMCByZ2JhKDAsMCwwLDAuMTUpLGluc2V0IDAgLTFweCAwIHJnYmEoMCwwLDAsMC4xNSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDFweCAwIDAgcmdiYSgwLDAsMCwwLjE1KSxpbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLDAuMTUpO2JveC1zaGFkb3c6aW5zZXQgMXB4IDAgMCByZ2JhKDAsMCwwLDAuMTUpLGluc2V0IDAgLTFweCAwIHJnYmEoMCwwLDAsMC4xNSl9LnByb2dyZXNzLXN0cmlwZWQgLmJhcntiYWNrZ3JvdW5kLWNvbG9yOiMxNDliZGY7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDEwMCUsMTAwJSAwLGNvbG9yLXN0b3AoMC4yNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuMjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHRyYW5zcGFyZW50KSx0byh0cmFuc3BhcmVudCkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7LXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6NDBweCA0MHB4Oy1tb3otYmFja2dyb3VuZC1zaXplOjQwcHggNDBweDstby1iYWNrZ3JvdW5kLXNpemU6NDBweCA0MHB4O2JhY2tncm91bmQtc2l6ZTo0MHB4IDQwcHh9LnByb2dyZXNzLmFjdGl2ZSAuYmFyey13ZWJraXQtYW5pbWF0aW9uOnByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZTstbW96LWFuaW1hdGlvbjpwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGU7LW1zLWFuaW1hdGlvbjpwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGU7LW8tYW5pbWF0aW9uOnByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZTthbmltYXRpb246cHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlfS5wcm9ncmVzcy1kYW5nZXIgLmJhciwucHJvZ3Jlc3MgLmJhci1kYW5nZXJ7YmFja2dyb3VuZC1jb2xvcjojZGQ1MTRjO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNlZTVmNWIsI2M0M2MzNSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2VlNWY1YiksdG8oI2M0M2MzNSkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNlZTVmNWIsI2M0M2MzNSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNlZTVmNWIsI2M0M2MzNSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNlZTVmNWIsI2M0M2MzNSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZlZTVmNWInLGVuZENvbG9yc3RyPScjZmZjNDNjMzUnLEdyYWRpZW50VHlwZT0wKX0ucHJvZ3Jlc3MtZGFuZ2VyLnByb2dyZXNzLXN0cmlwZWQgLmJhciwucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLWRhbmdlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZTVmNWI7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDEwMCUsMTAwJSAwLGNvbG9yLXN0b3AoMC4yNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuMjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHRyYW5zcGFyZW50KSx0byh0cmFuc3BhcmVudCkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCl9LnByb2dyZXNzLXN1Y2Nlc3MgLmJhciwucHJvZ3Jlc3MgLmJhci1zdWNjZXNze2JhY2tncm91bmQtY29sb3I6IzVlYjk1ZTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjNjJjNDYyLCM1N2E5NTcpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCM2MmM0NjIpLHRvKCM1N2E5NTcpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjNjJjNDYyLCM1N2E5NTcpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjNjJjNDYyLCM1N2E5NTcpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjNjJjNDYyLCM1N2E5NTcpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmNjJjNDYyJyxlbmRDb2xvcnN0cj0nI2ZmNTdhOTU3JyxHcmFkaWVudFR5cGU9MCl9LnByb2dyZXNzLXN1Y2Nlc3MucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLC5wcm9ncmVzcy1zdHJpcGVkIC5iYXItc3VjY2Vzc3tiYWNrZ3JvdW5kLWNvbG9yOiM2MmM0NjI7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDEwMCUsMTAwJSAwLGNvbG9yLXN0b3AoMC4yNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuMjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHRyYW5zcGFyZW50KSx0byh0cmFuc3BhcmVudCkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCl9LnByb2dyZXNzLWluZm8gLmJhciwucHJvZ3Jlc3MgLmJhci1pbmZve2JhY2tncm91bmQtY29sb3I6IzRiYjFjZjtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjNWJjMGRlLCMzMzliYjkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCM1YmMwZGUpLHRvKCMzMzliYjkpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjNWJjMGRlLCMzMzliYjkpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjNWJjMGRlLCMzMzliYjkpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjNWJjMGRlLCMzMzliYjkpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmNWJjMGRlJyxlbmRDb2xvcnN0cj0nI2ZmMzM5YmI5JyxHcmFkaWVudFR5cGU9MCl9LnByb2dyZXNzLWluZm8ucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLC5wcm9ncmVzcy1zdHJpcGVkIC5iYXItaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiM1YmMwZGU7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDEwMCUsMTAwJSAwLGNvbG9yLXN0b3AoMC4yNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuMjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHRyYW5zcGFyZW50KSx0byh0cmFuc3BhcmVudCkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCl9LnByb2dyZXNzLXdhcm5pbmcgLmJhciwucHJvZ3Jlc3MgLmJhci13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2ZhYTczMjtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjZmJiNDUwLCNmODk0MDYpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCNmYmI0NTApLHRvKCNmODk0MDYpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjZmJiNDUwLCNmODk0MDYpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjZmJiNDUwLCNmODk0MDYpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjZmJiNDUwLCNmODk0MDYpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZmJiNDUwJyxlbmRDb2xvcnN0cj0nI2ZmZjg5NDA2JyxHcmFkaWVudFR5cGU9MCl9LnByb2dyZXNzLXdhcm5pbmcucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLC5wcm9ncmVzcy1zdHJpcGVkIC5iYXItd2FybmluZ3tiYWNrZ3JvdW5kLWNvbG9yOiNmYmI0NTA7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDEwMCUsMTAwJSAwLGNvbG9yLXN0b3AoMC4yNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuMjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHRyYW5zcGFyZW50KSx0byh0cmFuc3BhcmVudCkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCl9LmFjY29yZGlvbnttYXJnaW4tYm90dG9tOjIwcHh9LmFjY29yZGlvbi1ncm91cHttYXJnaW4tYm90dG9tOjJweDtib3JkZXI6MXB4IHNvbGlkICNlNWU1ZTU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fS5hY2NvcmRpb24taGVhZGluZ3tib3JkZXItYm90dG9tOjB9LmFjY29yZGlvbi1oZWFkaW5nIC5hY2NvcmRpb24tdG9nZ2xle2Rpc3BsYXk6YmxvY2s7cGFkZGluZzo4cHggMTVweH0uYWNjb3JkaW9uLXRvZ2dsZXtjdXJzb3I6cG9pbnRlcn0uYWNjb3JkaW9uLWlubmVye3BhZGRpbmc6OXB4IDE1cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNX0uY2Fyb3VzZWx7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLWJvdHRvbToyMHB4O2xpbmUtaGVpZ2h0OjF9LmNhcm91c2VsLWlubmVye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVufS5jYXJvdXNlbC1pbm5lcj4uaXRlbXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5Om5vbmU7LXdlYmtpdC10cmFuc2l0aW9uOi42cyBlYXNlLWluLW91dCBsZWZ0Oy1tb3otdHJhbnNpdGlvbjouNnMgZWFzZS1pbi1vdXQgbGVmdDstby10cmFuc2l0aW9uOi42cyBlYXNlLWluLW91dCBsZWZ0O3RyYW5zaXRpb246LjZzIGVhc2UtaW4tb3V0IGxlZnR9LmNhcm91c2VsLWlubmVyPi5pdGVtPmltZywuY2Fyb3VzZWwtaW5uZXI+Lml0ZW0+YT5pbWd7ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDoxfS5jYXJvdXNlbC1pbm5lcj4uYWN0aXZlLC5jYXJvdXNlbC1pbm5lcj4ubmV4dCwuY2Fyb3VzZWwtaW5uZXI+LnByZXZ7ZGlzcGxheTpibG9ja30uY2Fyb3VzZWwtaW5uZXI+LmFjdGl2ZXtsZWZ0OjB9LmNhcm91c2VsLWlubmVyPi5uZXh0LC5jYXJvdXNlbC1pbm5lcj4ucHJldntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMDAlfS5jYXJvdXNlbC1pbm5lcj4ubmV4dHtsZWZ0OjEwMCV9LmNhcm91c2VsLWlubmVyPi5wcmV2e2xlZnQ6LTEwMCV9LmNhcm91c2VsLWlubmVyPi5uZXh0LmxlZnQsLmNhcm91c2VsLWlubmVyPi5wcmV2LnJpZ2h0e2xlZnQ6MH0uY2Fyb3VzZWwtaW5uZXI+LmFjdGl2ZS5sZWZ0e2xlZnQ6LTEwMCV9LmNhcm91c2VsLWlubmVyPi5hY3RpdmUucmlnaHR7bGVmdDoxMDAlfS5jYXJvdXNlbC1jb250cm9se3Bvc2l0aW9uOmFic29sdXRlO3RvcDo0MCU7bGVmdDoxNXB4O3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLXRvcDotMjBweDtmb250LXNpemU6NjBweDtmb250LXdlaWdodDoxMDA7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQ6IzIyMjtib3JkZXI6M3B4IHNvbGlkICNmZmY7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjIzcHg7LW1vei1ib3JkZXItcmFkaXVzOjIzcHg7Ym9yZGVyLXJhZGl1czoyM3B4O29wYWNpdHk6LjU7ZmlsdGVyOmFscGhhKG9wYWNpdHk9NTApfS5jYXJvdXNlbC1jb250cm9sLnJpZ2h0e3JpZ2h0OjE1cHg7bGVmdDphdXRvfS5jYXJvdXNlbC1jb250cm9sOmhvdmVyLC5jYXJvdXNlbC1jb250cm9sOmZvY3Vze2NvbG9yOiNmZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7b3BhY2l0eTouOTtmaWx0ZXI6YWxwaGEob3BhY2l0eT05MCl9LmNhcm91c2VsLWluZGljYXRvcnN7cG9zaXRpb246YWJzb2x1dGU7dG9wOjE1cHg7cmlnaHQ6MTVweDt6LWluZGV4OjU7bWFyZ2luOjA7bGlzdC1zdHlsZTpub25lfS5jYXJvdXNlbC1pbmRpY2F0b3JzIGxpe2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bGVmdDt3aWR0aDoxMHB4O2hlaWdodDoxMHB4O21hcmdpbi1sZWZ0OjVweDt0ZXh0LWluZGVudDotOTk5cHg7YmFja2dyb3VuZC1jb2xvcjojY2NjO2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwwLjI1KTtib3JkZXItcmFkaXVzOjVweH0uY2Fyb3VzZWwtaW5kaWNhdG9ycyAuYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2ZmZn0uY2Fyb3VzZWwtY2FwdGlvbntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDtwYWRkaW5nOjE1cHg7YmFja2dyb3VuZDojMzMzO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjc1KX0uY2Fyb3VzZWwtY2FwdGlvbiBoNCwuY2Fyb3VzZWwtY2FwdGlvbiBwe2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6I2ZmZn0uY2Fyb3VzZWwtY2FwdGlvbiBoNHttYXJnaW46MCAwIDVweH0uY2Fyb3VzZWwtY2FwdGlvbiBwe21hcmdpbi1ib3R0b206MH0uaGVyby11bml0e3BhZGRpbmc6NjBweDttYXJnaW4tYm90dG9tOjMwcHg7Zm9udC1zaXplOjE4cHg7Zm9udC13ZWlnaHQ6MjAwO2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4O2JvcmRlci1yYWRpdXM6NnB4fS5oZXJvLXVuaXQgaDF7bWFyZ2luLWJvdHRvbTowO2ZvbnQtc2l6ZTo2MHB4O2xpbmUtaGVpZ2h0OjE7bGV0dGVyLXNwYWNpbmc6LTFweDtjb2xvcjppbmhlcml0fS5oZXJvLXVuaXQgbGl7bGluZS1oZWlnaHQ6MzBweH0ucHVsbC1yaWdodHtmbG9hdDpyaWdodH0ucHVsbC1sZWZ0e2Zsb2F0OmxlZnR9LmhpZGV7ZGlzcGxheTpub25lfS5zaG93e2Rpc3BsYXk6YmxvY2t9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0uYWZmaXh7cG9zaXRpb246Zml4ZWR9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2RlZmF1bHQuY3NzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9kZWZhdWx0LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2UzZTMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9kZWZhdWx0LmNzcwpAQCAtMCwwICsxLDMzMCBAQAorLyogU3R5bGUgdGhlIFlvY3RvIFByb2plY3QgbG9nbyAqLworLmxvZ28gaW1nIHsgaGVpZ2h0OiAzMHB4OyB3aWR0aDogYXV0byAhaW1wb3J0YW50OyB9CisubG9nbyB7IHBhZGRpbmctdG9wOiA0cHggIWltcG9ydGFudDsgcGFkZGluZy1ib3R0b206MHB4ICFpbXBvcnRhbnQ7IH0KKworLyogc3R5bGUgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKy5icmFuZCA+IGEgeyBjb2xvcjogIzc3NzsgfQorLmJyYW5kID4gYTpob3ZlciB7IGNvbG9yOiAjOTk5OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0KKy5pY29uLWluZm8tc2lnbiB7IGNvbG9yOiAjNzc3OyBmb250LXNpemU6IDE2cHg7IG1hcmdpbi1sZWZ0OiA1cHg7fQorLmljb24taW5mby1zaWduOmhvdmVyIHsgY29sb3I6ICM5OTk7IGN1cnNvcjogcG9pbnRlcjsgfQorCisvKiBTdHlsZSB0aGUgYnJlYWRjcnVtYiAqLworLmJyZWFkY3J1bWIgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9CisuYnJlYWRjcnVtYiBsaTpmaXJzdC1jaGlsZCB7IHBhZGRpbmctcmlnaHQ6IDEwcHg7IH0KKworLyogU3R5bGVzIGZvciB0aGUgaGVscCBpbmZvcm1hdGlvbiAqLworLmdldC1oZWxwIHsgY29sb3I6ICNDQ0NDQ0M7IH0KKy5nZXQtaGVscDpob3ZlciwgLmljb24tcGx1cy1zaWduOmhvdmVyIHsgY29sb3I6ICM5OTk5OTk7IGN1cnNvcjogcG9pbnRlcjsgfQorLmdldC1oZWxwLWJsdWUgeyBjb2xvcjogIzNBODdBRDsgfQorLmdldC1oZWxwLWJsdWU6aG92ZXIgeyBjb2xvcjogIzAwNTU4MDsgY3Vyc29yOiBwb2ludGVyOyB9CisuZ2V0LWhlbHAteWVsbG93IHsgY29sb3I6ICNDMDk4NTM7IH0KKy5nZXQtaGVscC15ZWxsb3c6aG92ZXIgeyBjb2xvcjogI0IzODk0MjsgY3Vyc29yOiBwb2ludGVyOyB9CisuZ2V0LWhlbHAtcmVkIHsgY29sb3I6ICNCOTRBNDg7IGZvbnQtc2l6ZTogMTZweDsgcGFkZGluZy1sZWZ0OiAycHg7IH0KKy5nZXQtaGVscC1yZWQ6aG92ZXIgeyBjb2xvcjogIzk0M0EzODsgY3Vyc29yOiBwb2ludGVyOyB9CisuYnVpbGQtZm9ybT5pOmZpcnN0LW9mLXR5cGUgeyBtYXJnaW4tbGVmdDogNXB4OyB9CisubWFudWFsIHsgbWFyZ2luOiAxMXB4IDE1cHggMCAxMXB4O30KKy5oZWFkaW5nLWhlbHAgeyBmb250LXNpemU6IDE0cHg7IH0KKworLyogU3R5bGVzIGZvciB0aGUgZXh0ZXJuYWwgbGluayAqLworLmdldC1pbmZvIHsgY29sb3I6ICMwMDg4Q0M7IH0KKy5nZXQtaW5mbzpob3ZlciB7IGNvbG9yOiAjMDA1NTgwOyBjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQorCisvKiBTdHlsZXMgZm9yIGNvZGUgYW5kIHByZSB0YWdzICovCitjb2RlIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IGJvcmRlcjogbm9uZTsgY29sb3I6ICMzMzMzMzM7IH0KK2RkIGNvZGUsIC5hbGVydCBjb2RlIHsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyB3b3JkLWJyZWFrOiBicmVhay1hbGw7IHdvcmQtd3JhcDogYnJlYWstd29yZDsgfQorLmFsZXJ0LXdhcm5pbmcgY29kZSwgLmFsZXJ0LXdhcm5pbmcgcHJlIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IGJvcmRlcjogbm9uZTsgY29sb3I6ICNDMDk4NTM7IG1hcmdpbi1ib3R0b206IDBweDsgfQorLmFsZXJ0LWVycm9yIGNvZGUgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgYm9yZGVyOiBub25lOyBjb2xvcjogI0I5NEE0ODsgbWFyZ2luLWJvdHRvbTowcHg7IH0KKy5hbGVydC1lcnJvciBwcmUgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgYm9yZGVyOiBub25lOyBjb2xvcjogI0I5NEE0ODsgd29yZC1icmVhazogbm9ybWFsOyBtYXJnaW4tYm90dG9tOiAwcHg7IH0KKy5hbGVydC13YXJuaW5nIHByZSB7IHdvcmQtYnJlYWs6IG5vcm1hbDsgfQorLmFsZXJ0LWluZm8gYSB7IGZvbnQtd2VpZ2h0OiAzMDA7IH0KKy5hbGVydC1pbmZvIGNvZGUgeyBjb2xvcjogIzNBODdBRDsgfQorLnRvb2x0aXAgY29kZSB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyBjb2xvcjogI0ZGRkZGRjsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgYm9yZGVyOiBub25lOyBmb250LXNpemU6IDFlbTsgfQorCisvKiBTdHlsZSBmb3IgZGVmaW5pdGlvbiBsaXN0cyAqLworZGQgdWwgeyBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7IG1hcmdpbjogMHB4OyB9CitkdCwgZGQgIHtsaW5lLWhlaWdodDogMjVweDsgfQorZGQgbGkgeyBsaW5lLWhlaWdodDogMjVweDsgfQorLml0ZW0taW5mbyBkZCB7IGxpbmUtaGVpZ2h0OiAyMHB4OyBtYXJnaW4tYm90dG9tOiAxMHB4OyB9CisKKy8qIFN0eWxlIHRoZSBmaWx0ZXIgbW9kYWwgZGlhbG9ncyAqLworLm1vZGFsIHsgd2lkdGg6IDgwMHB4OyBtYXJnaW4tbGVmdDogLTQwMHB4OyB9CisubW9kYWwtZm9vdGVyIC5idG4geyBmbG9hdDogbGVmdDsgfQorCisvKiBIb3ZlciBzdHlsZSBmb3IgdGhlIGNsZWFyIHNlYXJjaCBpY29uICovCisuaWNvbi1yZW1vdmUtc2lnbjpob3ZlciB7IGNvbG9yOiAjOTk5OTk5OyBjdXJzb3I6IHBvaW50ZXI7IH0KKworLyogU29tZSBleHRyYSBzcGFjZSBiZWZvcmUgaGVhZGluZ3Mgd2hlbiBuZWVkZWQgKi8KKy5kZXRhaWxzIHsgbWFyZ2luLXRvcDogMzBweDsgfQorLmFpciB7IG1hcmdpbi10b3A6IDMwcHg7IH0KKworLyogUmVxdWlyZWQgY2xhc3NlcyBmb3IgdGhlIGhpZ2hsaWdodCBiZWhhdmlvdXIgaW4gdGFibGVzICovCisuaGlnaGxpZ2h0IHsgLXdlYmtpdC1hbmltYXRpb246IHRhcmdldC1mYWRlIDEwcyAxOyAtbW96LWFuaW1hdGlvbjogdGFyZ2V0LWZhZGUgMTBzIDE7IGFuaW1hdGlvbjogdGFyZ2V0LWZhZGUgMTBzIDE7IH0KK0Atd2Via2l0LWtleWZyYW1lcyB0YXJnZXQtZmFkZSB7IDAlIHsgYmFja2dyb3VuZC1jb2xvcjogI0Q5RURGNzsgfSAyNSUgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRDlFREY3OyB9IDEwMCUgeyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgfSB9CitALW1vei1rZXlmcmFtZXMgdGFyZ2V0LWZhZGUgeyAwJSB7IGJhY2tncm91bmQtY29sb3I6ICNEOUVERjc7IH0gMjUlIHsgYmFja2dyb3VuZC1jb2xvcjogI0Q5RURGNzsgfSAxMDAlIHsgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7IH0gfQorQGtleWZyYW1lcyB0YXJnZXQtZmFkZSB7IDAlIHsgYmFja2dyb3VuZC1jb2xvcjogI0Q5RURGNzsgfSAyNSUgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRDlFREY3OyB9IDEwMCUgeyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgfSB9CisKKy8qIFRoaXMgbWFrZXMgdG9vbHRpcHMgd29yayBpbnNpZGUgbW9kYWwgZGlhbG9ncyAqLworLnRvb2x0aXAgeyB6LWluZGV4OiAyMDAwICFpbXBvcnRhbnQ7IH0KKworLyogT3ZlcnJpZGUgZGVmYXVsdCBUd2l0dGVyIEJvb3N0cmFwIHN0eWxlcyBmb3IgYW5jaG9yIHRhZ3MgaW5zaWRlIHRhYmxlcyAqLwordGQgYSwgdGQgYSA+IGNvZGUgeyBjb2xvcjogIzMzMzMzMzsgfQordGQgY29kZSB7IHdoaXRlLXNwYWNlOiBub3JtYWw7IH0KK3RkIGE6aG92ZXIsIHRkIGEgPiBjb2RlOmhvdmVyIHsgY29sb3I6ICMwMDAwMDA7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9CisKKy8qIE92ZXJyaWRlIGRlZmF1bHQgVHdpdHRlciBCb290c3RyYXAgc3R5bGVzIGZvciB0ci5lcnJvciAqLworLnRhYmxlIHRib2R5IHRyLmVycm9yID4gdGQgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfSAvKiBvdmVycmlkZSBkZWZhdWx0IEJvb3RzdHJhcCBiZWhhdmlvdXIgKi8KKy50YWJsZS1ob3ZlciB0Ym9keSB0ci5lcnJvcjpob3ZlciA+IHRkIHsgYmFja2dyb3VuZC1jb2xvcjogI0Y1RjVGNTt9IC8qIG92ZXJyaWRlIGRlZmF1bHQgQm9vdHN0cmFwIGJlaGF2aW91ciAqLworCisvKiBSaWdodCBqdXN0aWZ5IEJvb3RzdHJhcCB0YWJsZSBjb2x1bW5zIGZvciBzaXplIGZpZWxkcyAqLworLnRhYmxlIC5zaXplY29sIHsgdGV4dC1hbGlnbjogcmlnaHQ7IH0KKworLyogU2V0IGVycm9yLCB3YXJuaW5nLCBzdWNjZXNzIGFuZCBtdXRlZCBzdHlsZXMgKi8KKy5lcnJvciwgLnJlZCwgdGQuZXJyb3IgYSwgdHIuZXJyb3IgYSB7IGNvbG9yOiAjYjk0YTQ4OyB9CithLmVycm9yOmhvdmVyLCBhLmVycm9yOmZvY3VzLCB0ci5lcnJvciBhOmhvdmVyIHsgY29sb3I6ICM5NDNBMzg7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9Cisud2FybmluZywgLnllbGxvdyB7IGNvbG9yOiAjYzA5ODUzO30KK2Eud2FybmluZyB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9CithLndhcm5pbmc6aG92ZXIsIGEud2FybmluZzpmb2N1cyB7IGNvbG9yOiAjQjM4OTQyOyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfQorLnN1Y2Nlc3MsIC5ncmVlbiB7IGNvbG9yOiAjNDY4ODQ3O30KKy5zdWNjZXNzOmhvdmVyIHsgY29sb3I6ICMzNDcxMzI7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9Cit0ZCA+IC5zdWNjZXNzOmhvdmVyIHsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0KKy5tdXRlZCBhIHsgY29sb3I6Izk5OTk5OTsgfQorLm11dGVkIGE6aG92ZXIgeyBjb2xvcjojOTk5OTk5OyB9CisKKy8qIFNvcnRpbmcgZnVuY3Rpb25hbGl0eSBzdHlsZXMgZm9yIHRhYmxlIGhlYWRpbmdzICovCisuc29ydGVkIHsgY29sb3I6ICMzMzMzMzM7IGZvbnQtd2VpZ2h0OiBib2xkOyB9Cisuc29ydGVkOmhvdmVyIHsgY29sb3I6ICMwMDAwMDA7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9Cit0aCA+IGEsIHRoID4gc3BhbiB7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IH0KKworLyogRm9yY2UgbG9uZyBzdHJpbmdzIGxpa2UgY29tbWl0IGhhc2hlcyB0byB3cmFwICovCisuaXNjb21taXQgeyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsgd29yZC13cmFwOiBicmVhay13b3JkO30KKworLyogTWFrZSB0aGUgcG9wb3ZlcnMgc2Nyb2xsYWJsZSBpZiB0aGV5IGFyZSB0b28gbG9uZyAqLworLnBvcG92ZXItY29udGVudCB7IG1heC1oZWlnaHQ6IDMwZW07IG92ZXJmbG93LXk6IHNjcm9sbDsgfQorCisvKiBTdHlsZXMgZm9yIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIHRhYmxlLiBXZSdsbCBwcm9iYWJseSB3b24ndCB1c2UgdGhvc2UgaW4gcHJvZHVjdGlvbiAqLworLm9uZSB7IHBhZGRpbmctbGVmdDogMThweCAhaW1wb3J0YW50OyB9CisudHdvIHsgcGFkZGluZy1sZWZ0OiAzNnB4ICFpbXBvcnRhbnQ7IH0KKy50aHJlZSB7IHBhZGRpbmctbGVmdDogNTRweCAhaW1wb3J0YW50OyB9CisuY29udGVudC1kaXJlY3RvcnkgYSB7IGNvbG9yOiAjMDA4OENDOyB9CisuY29udGVudC1kaXJlY3RvcnkgYTpob3ZlciB7IGNvbG9yOiAjMDA1NTgwOyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfQorLnN5bWxpbmsgeyBjb2xvcjogI0NDQ0NDQzsgfQorCisvKiBTdHlsZXMgZm9yIHRoZSBuYXZiYXIgYWN0aW9ucyAqLworLmJ0bi1ncm91cCArIC5idG4tZ3JvdXAgeyBtYXJnaW4tcmlnaHQ6IDEwcHg7IH0KKy5uYXZiYXItaW5uZXIgPiAuYnRuLWdyb3VwIHsgbWFyZ2luLXRvcDogNnB4OyB9CisKKy8qIFN0eWxlcyBmb3IgdGhlIHBhcmVudCBpdGVtIGluIHRoZSBsZWZ0IG5hdmlnYXRpb24gKi8KKworLm5hdiA+IGxpID4gYS5uYXYtcGFyZW50IHsgZm9udC1zaXplOiAxOHB4OyBsaW5lLWhlaWdodDogMjVweDsgIH0KKworLyogT3RoZXIgc3R5bGVzICovCisuZHJvcGRvd24tbWVudSB7IHBhZGRpbmc6IDEwcHg7IH0KK3NlbGVjdCB7IHdpZHRoOiBhdXRvOyB9CisucGFnZS1oZWFkZXIgeyBjb2xvcjogIzVBNUE1QTsgfQorLnRvcC1haXIgeyBtYXJnaW4tdG9wOiA0MHB4O30KKy5wcm9ncmVzcyB7IG1hcmdpbi1ib3R0b206IDBweDsgfQorLmxlYWQgLmJhZGdlIHsgZm9udC1zaXplOiAxOHB4OyBmb250LXdlaWdodDogbm9ybWFsOyBib3JkZXItcmFkaXVzOiAxNXB4OyBwYWRkaW5nOiA5cHg7IH0KKy5sZWFkIG9sLCAubGVhZCB1bCB7IHBhZGRpbmc6IDEwcHggMCAwIDIwcHg7IH0KKy5sZWFkIG9sID4gbGksIC5sZWFkIHVsID4gbGkgeworICAgIGxpbmUtaGVpZ2h0OiAzNXB4OworfQorLndlbGwgPiAubGVhZCwgLmFsZXJ0IC5sZWFkIHsgbWFyZ2luLWJvdHRvbTogMHB4OyB9Cisud2VsbC10cmFuc3BhcmVudCB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9Cisubm8tcmVzdWx0cyB7IG1hcmdpbjogMTBweCAwOyB9CisudGFzay1uYW1lIHsgbWFyZ2luLWxlZnQ6IDdweDsgfQorLmljb24taGFuZC1yaWdodCB7Y29sb3I6ICNDQ0NDQ0M7IH0KKy5oZWxwLWlubGluZSB7IG1hcmdpbjogNXB4OyB9CisuZGFzaGJvYXJkLXNlY3Rpb24geyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfQorCisvKiBzdHlsZXMgZm9yIGxhbmRpbmcgcGFnZSAtIGFuYWx5c2lzIG1vZGUgKi8KKy5oZXJvLXVuaXQgeyBtYXJnaW46IDIwcHggMCAzMHB4OyB9CisuaGVyby11bml0ID4gLmNsb3NlIHsgZm9udC1zaXplOjQwcHg7IH0KKy5oZXJvLWFjdGlvbnMgeyBtYXJnaW4tdG9wOiAzMHB4OyB9CisKKy8qIHN0eWxlcyBmb3IgbGFuZGluZyBwYWdlIC0gYnVpbGQgbW9kZSAqLworLmhlcm8tdW5pdCBwIHsgbGluZS1oZWlnaHQ6IDI1cHg7IH0KKy5oZXJvLXVuaXQgcCwgLmhlcm8tdW5pdCAuYnRuLWxhcmdlIHsgbWFyZ2luLXRvcDogMTVweDsgfQorLmhlcm8tdW5pdCB1bCB7IG1hcmdpbi10b3A6IDIwcHg7IH0KKy5oZXJvLXVuaXQgbGkgeyBsaW5lLWhlaWdodDogMzBweDsgfQorLmhlcm8tdW5pdCBpbWcgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOyBtYXJnaW4tdG9wOiAxNXB4OyB9CisKKy8qIG1ha2UgdGFibGVzIENocm9tZS1oYXBweSAobWUsIG5vdCBzbyBtdWNoKSAqLwordGFibGUgeyB0YWJsZS1sYXlvdXQ6IGZpeGVkOyB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IH0KKworLyogc3R5bGVzIGZvciB0aGUgbmV3IGJ1aWxkIGJ1dHRvbiAqLworLm5ldy1idWlsZCAuYnRuLXByaW1hcnkgeyBwYWRkaW5nOiA0cHggMzBweDsgfQorLm5ldy1idWlsZCAuYWxlcnQgeyBtYXJnaW4tdG9wOiAxMHB4OyB9CisubmV3LWJ1aWxkIC5hbGVydCBwIHsgbWFyZ2luLXRvcDogMTBweDsgfQorCisvKiBzdHlsZXMgZm9yIHNob3dpbmcgdGhlIHByb2plY3QgbmFtZSBpbiBidWlsZCBtb2RlICovCisucHJvamVjdC1uYW1lIHsgcGFkZGluZy10b3A6IDA7IH0KKy5wcm9qZWN0LW5hbWUgLmxhYmVsIHsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbWFyZ2luLWJvdHRvbTogNXB4OyBtYXJnaW4tbGVmdDogLTE1cHg7IHBhZGRpbmc6IDVweDsgfQorLnByb2plY3QtbmFtZSAubGFiZWwgPiBhIHsgY29sb3I6ICNmZmY7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IH0KKworLyogUmVtb3ZlIGJvdHRvbSBtYXJnaW4gZm9yIGZvcm1zIGluc2lkZSBtb2RhbCBkaWFsb2dzICovCisjZGVwZW5kZW5jaWVzLW1vZGFsLWZvcm0geyBtYXJnaW4tYm90dG9tOiAwcHg7IH0KKworLyogQ29uZmlndXJhdGlvbiBzdHlsZXMgKi8KKy5pY29uLXRyYXNoIHsgY29sb3I6ICNCOTRBNDg7IGZvbnQtc2l6ZTogMTZweDsgcGFkZGluZy1sZWZ0OiA1cHg7IH0KKy5pY29uLXRyYXNoOmhvdmVyIHsgY29sb3I6ICM5NDNBMzg7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgY3Vyc29yOiBwb2ludGVyOyB9CisuaWNvbi1wZW5jaWwsIC5pY29uLWRvd25sb2FkLWFsdCwgLmljb24tcmVmcmVzaCwgLmljb24tc3Rhci1lbXB0eSwgLmljb24tc3RhciAgeyBmb250LXNpemU6IDE2cHg7IGNvbG9yOiAjMDA4OENDOyBwYWRkaW5nLWxlZnQ6IDJweDsgfQorLmljb24tcGVuY2lsOmhvdmVyLCAuaWNvbi1kb3dubG9hZC1hbHQ6aG92ZXIsIC5pY29uLXJlZnJlc2g6aG92ZXIsIC5pY29uLXN0YXItZW1wdHk6aG92ZXIsIC5pY29uLXN0YXI6aG92ZXIsIC5pY29uLXRhc2tzOmhvdmVyIHsgY29sb3I6ICMwMDU1ODA7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgY3Vyc29yOiBwb2ludGVyOyB9CisuaWNvbi1zaGFyZSB7IHBhZGRpbmctbGVmdDogMnB4OyB9CisuYWxlcnQtc3VjY2VzcyAuaWNvbi1yZWZyZXNoLCAuYWxlcnQtc3VjY2VzcyAuaWNvbi10YXNrcyB7IGNvbG9yOiAjNDY4ODQ3OyB9CisuYWxlcnQtc3VjY2VzcyAuaWNvbi1yZWZyZXNoOmhvdmVyLCAuYWxlcnQtc3VjY2VzcyAuaWNvbi10YXNrczpob3ZlciB7IGNvbG9yOiAjMzQ3MTMyOyB9CisuYWxlcnQtZXJyb3IgLmljb24tcmVmcmVzaCwgLmFsZXJ0LWVycm9yIC5pY29uLXRhc2tzIHsgY29sb3I6ICNiOTRhNDg7IH0KKy5hbGVydC1lcnJvciAuaWNvbi1yZWZyZXNoOmhvdmVyLCAuYWxlcnQtZXJyb3IgLmljb24tdGFza3M6aG92ZXIgeyBjb2xvcjogIzk0M0EzODsgfQorLmNvbmZpZ3VyYXRpb24tbGlzdCBsaSwgLmNvbmZpZ3VyYXRpb24tbGlzdCBsYWJlbCB7IGxpbmUtaGVpZ2h0OiAzNXB4OyBmb250LXNpemU6IDIxcHg7IGZvbnQtd2VpZ2h0OiAyMDA7IG1hcmdpbi1ib3R0b206IDBweDt9CisuY29uZmlndXJhdGlvbi1saXN0IHsgZm9udC1zaXplOiAxNnB4OyBtYXJnaW4tYm90dG9tOiAxLjVlbTsgfQorLmNvbmZpZ3VyYXRpb24tbGlzdCBpIHsgZm9udC1zaXplOiAxNnB4OyB9CisvKi5jb25maWd1cmF0aW9uLWxheWVycyB7IGhlaWdodDogMTM1cHg7IG92ZXJmbG93OiBzY3JvbGw7IH0qLworLmNvdW50ZXIgeyBmb250LXdlaWdodDogbm9ybWFsOyB9Cisud2VsbC1hbGVydCB7IGJhY2tncm91bmQtY29sb3I6ICNGQ0Y4RTM7IGJvcmRlcjogMXB4IHNvbGlkICNGQkVFRDU7IGJvcmRlci1yYWRpdXM6IDRweDsgfQorLndlbGwtYWxlcnQgPiAubGVhZCB7IGNvbG9yOiAjQzA5ODUzOyBwYWRkaW5nLWJvdHRvbTogLjc1ZW07IH0KKy5jb25maWd1cmF0aW9uLWFsZXJ0IHsgbWFyZ2luLWJvdHRvbTogMHB4OyBwYWRkaW5nOiA4cHggMTRweDsgfQorLmNvbmZpZ3VyYXRpb24tYWxlcnQgcCB7IG1hcmdpbi1ib3R0b206IDBweDsgfQorLnByb2plY3QtZm9ybSB7IG1hcmdpbi10b3A6IDEwcHg7IH0KKy5hZGQtbGF5ZXJzIC5idG4tYmxvY2sgKyAuYnRuLWJsb2NrLCAuYnVpbGQgLmJ0bi1ibG9jayArIC5idG4tYmxvY2sgeyBtYXJnaW4tdG9wOiAwcHg7IH0KK2lucHV0Lmh1Z2UgeyBmb250LXNpemU6IDE3LjVweDsgcGFkZGluZzogMTFweCAxOXB4OyB9CisuYnVpbGQtZm9ybSB7IG1hcmdpbi1ib3R0b206IDBweDsgfQorLmJ1aWxkLWZvcm0gLmlucHV0LWFwcGVuZCB7IG1hcmdpbi1ib3R0b206IDBweDsgfQorLmJ1aWxkLWZvcm0gLmJ0bi1sYXJnZSB7IHBhZGRpbmc6IDExcHggMzVweDsgfQorLmJ1aWxkLWZvcm0gcCB7IGZvbnQtc2l6ZToxNy41cHggO21hcmdpbjoxMnB4IDAgMCAxMHB4O30KKyNsYXllci1jb250YWluZXIgZm9ybSwgI3RhcmdldC1jb250YWluZXIgZm9ybSB7IG1hcmdpbi1ib3R0b206IDBweDsgfQorLmJ0bi1wcmltYXJ5IC5pY29uLXF1ZXN0aW9uLXNpZ24sIC5idG4tZGFuZ2VyIC5pY29uLXF1ZXN0aW9uLXNpZ24geyBjb2xvcjogI2ZmZjsgfQorLmJ0bi1wcmltYXJ5IC5pY29uLXF1ZXN0aW9uLXNpZ246aG92ZXIsIC5idG4tZGFuZ2VyIC5pY29uLXF1ZXN0aW9uLXNpZ246aG92ZXIgeyBjb2xvcjogIzk5OTsgfQorYSBjb2RlIHsgY29sb3I6ICMwMDg4Q0M7IH0KK2EgY29kZTpob3ZlciB7IGNvbG9yOiAjMDA1NTgwOyB9CisubG9jYWxjb25mIHsgZm9udC1zaXplOiAxNy41cHg7IG1hcmdpbi10b3A6IDQwcHg7IH0KKy5sb2NhbGNvbmYgY29kZSB7IGZvbnQtc2l6ZTogMTcuNXB4OyB9CisjYWRkLWxheWVyLWRlcGVuZGVuY2llcyB7ICBtYXJnaW4tdG9wOiA1cHg7IH0KKy5saW5rLWFjdGlvbiB7IGZvbnQtc2l6ZTogMTcuNXB4OyBtYXJnaW4tdG9wOiA0MHB4OyB9CisubGluay1hY3Rpb24gY29kZSB7IGZvbnQtc2l6ZTogMTcuNXB4OyB9CisuYXJ0aWZhY3QgeyB3aWR0aDogOWVtOyB9CisuY29udHJvbC1ncm91cCB7IG1hcmdpbi1ib3R0b206IDBweDsgfQorI3Byb2plY3QtZGV0YWlscyBmb3JtIHsgbWFyZ2luOiAwcHg7IH0KK2RkIGZvcm0geyBtYXJnaW46IDEwcHggMCAwIDA7IH0KK2RsIHRleHRhcmVhIHsgcmVzaXplOiB2ZXJ0aWNhbDsgfQorLm5hdmJhci1maXhlZC10b3AgeyAgei1pbmRleDogMTsgfQorLnBvcG92ZXIgeyB6LWluZGV4OiAyOyB9CisuYnRuLWRhbmdlciAuaWNvbi10cmFzaCB7IGNvbG9yOiAjZmZmOyB9CisuYmJhcHBlbmRzIHsgbGlzdC1zdHlsZS10eXBlOiBub25lOyBtYXJnaW4tbGVmdDogMDsgfQorLmJiYXBwZW5kcyBsaSB7IGxpbmUtaGVpZ2h0OiAyNXB4OyB9CisuY29uZmlndXJhdGlvbi1saXN0IGlucHV0W3R5cGU9ImNoZWNrYm94Il0geyBtYXJnaW4tdG9wOjEzcHg7bWFyZ2luLXJpZ2h0OjEwcHg7IH0KKy5hbGVydCBpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsgbWFyZ2luLXRvcDogMHB4OyBtYXJnaW4tcmlnaHQ6IDNweDsgfQorLmFsZXJ0IG9sIHsgcGFkZGluZzogMTBweCAwcHggMHB4IDIwcHg7IH0KKy5hbGVydCBvbCA+IGxpIHsgbGluZS1oZWlnaHQ6IDM1cHg7IH0KKy5kbC12ZXJ0aWNhbCBmb3JtIHsgbWFyZ2luLXRvcDogMTBweDsgfQorLnNjcm9sbGluZyB7IGJvcmRlcjogMXB4IHNvbGlkICNkZGRkZGQ7IGhlaWdodDogMTU0cHg7IG92ZXJmbG93OiBhdXRvOyBwYWRkaW5nOiA4cHg7IHdpZHRoOiAyNy41JTsgbWFyZ2luLWJvdHRvbTogMTBweDsgfQorLmxlYWQgLmhlbHAtYmxvY2sgeyBmb250LXNpemU6IDE0cHg7IGxpbmUtaGVpZ2h0OiAyMHB4OyBmb250LXdlaWdodDogbm9ybWFsOyB9CisuYnV0dG9uLXBsYWNlICAuYnRuIHsgbWFyZ2luOiAwIDAgMjBweCAwOyB9CisudG9vbHRpcC1pbm5lciB7IG1heC13aWR0aDogMjUwcHg7IH0KKy5uZXctYnVpbGQgeyBwYWRkaW5nOiAyMHB4OyB9CisubmV3LWJ1aWxkIGxpIHsgbGluZS1oZWlnaHQ6IDMwcHg7IH0KKy5uZXctYnVpbGQgbGkgLmFsZXJ0IHsgbGluZS1oZWlnaHQ6IDIwcHg7IHdpZHRoOiAyMDBweDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgfQorLm5ldy1idWlsZCBoNiB7IG1hcmdpbjogMTBweCAwIDAgMDsgY29sb3I6ICM1YTVhNWE7IH0KKy5uZXctYnVpbGQgaDMgeyBtYXJnaW46IDA7IGNvbG9yOiAjNWE1YTVhOyB9CisubmV3LWJ1aWxkIGZvcm0geyBtYXJnaW46IDVweCAwIDA7IH0KKy5uZXctYnVpbGQgLmlucHV0LWFwcGVuZCB7IG1hcmdpbi1ib3R0b206IDA7IH0KKyNidWlsZC1zZWxlY3RlZCB7IG1hcmdpbi10b3A6IDE1cHg7IH0KK2Rpdi5hZGQtZGVwcyB7IG1hcmdpbi10b3A6IDE1cHg7IH0KKy5idG4ubG9nIHsgbWFyZ2luLWxlZnQ6IDIwcHg7IH0KKworCisuYW5pbWF0ZS1yZXBlYXQgeworICBsaXN0LXN0eWxlOm5vbmU7CisgIGJveC1zaXppbmc6Ym9yZGVyLWJveDsKK30KKworLmFuaW1hdGUtcmVwZWF0Lm5nLW1vdmUsCisuYW5pbWF0ZS1yZXBlYXQubmctZW50ZXIsCisuYW5pbWF0ZS1yZXBlYXQubmctbGVhdmUgeworICAtd2Via2l0LXRyYW5zaXRpb246YWxsIGxpbmVhciAwLjVzOworICB0cmFuc2l0aW9uOmFsbCBsaW5lYXIgMC41czsKK30KKworLmFuaW1hdGUtcmVwZWF0Lm5nLWxlYXZlLm5nLWxlYXZlLWFjdGl2ZSwKKy5hbmltYXRlLXJlcGVhdC5uZy1tb3ZlLAorLmFuaW1hdGUtcmVwZWF0Lm5nLWVudGVyIHsKKyAgb3BhY2l0eTowOworfQorCisuYW5pbWF0ZS1yZXBlYXQubmctbGVhdmUsCisuYW5pbWF0ZS1yZXBlYXQubmctZW50ZXIubmctZW50ZXItYWN0aXZlIHsKKyAgb3BhY2l0eToxOworfQorCisudGFiLXBhbmUgdGFibGUgeyBtYXJnaW4tdG9wOiAxMHB4OyB9CisKK3RoZWFkIC5kZXNjcmlwdGlvbiwgLmdldF9kZXNjcmlwdGlvbl9vcl9zdW1tYXJ5IHsgd2lkdGg6IDM2NHB4OyB9Cit0aGVhZCAuYWRkLWRlbC1sYXllcnMgeyB3aWR0aDogMTI0cHg7IH0KKworI2xvYWRpbmctbm90aWZpY2F0aW9uIHsKKyAgcG9zaXRpb246IGZpeGVkOworICB6LWluZGV4OiAxMDE7CisgIHRvcDogMyU7CisgIGxlZnQ6IDQwJTsKKyAgcmlnaHQ6IDQwJTsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMTBweCAjYzA5ODUzOworICAtbW96LWJveC1zaGFkb3c6IDAgMCAxMHB4ICNjMDk4NTM7CisgIGJveC1zaGFkb3c6IDAgMCAxMHB4ICNjMDk4NTM7Cit9CisKKyNjaGFuZ2Utbm90aWZpY2F0aW9uIHsKKyAgcG9zaXRpb246IGZpeGVkOworICB6LWluZGV4OiAxMDE7CisgIHRvcDogMyU7CisgIGxlZnQ6IDIwJTsKKyAgcmlnaHQ6IDIwJTsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMTBweCAjM2E4N2FkOworICAtbW96LWJveC1zaGFkb3c6IDAgMCAxMHB4ICMzYTg3YWQ7CisgIGJveC1zaGFkb3c6IDAgMCAxMHB4ICMzYTg3YWQ7Cit9CisKKy8qIENvcGllZCBpbiBmcm9tIG5ld2VyIHZlcnNpb24gb2YgRm9udC1Bd2Vzb21lIDQuMy4wICovCisuZmEtc3BpbiB7CisgIC13ZWJraXQtYW5pbWF0aW9uOiBmYS1zcGluIDJzIGluZmluaXRlIGxpbmVhcjsKKyAgYW5pbWF0aW9uOiBmYS1zcGluIDJzIGluZmluaXRlIGxpbmVhcjsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorLmZhLXB1bHNlIHsKKyAgLXdlYmtpdC1hbmltYXRpb246IGZhLXNwaW4gMXMgaW5maW5pdGUgc3RlcHMoOCk7CisgIGFuaW1hdGlvbjogZmEtc3BpbiAxcyBpbmZpbml0ZSBzdGVwcyg4KTsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorCitALXdlYmtpdC1rZXlmcmFtZXMgZmEtc3BpbiB7CisgIDAlIHsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpOworICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOworICB9CisgIDEwMCUgeworICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTsKKyAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpOworICB9Cit9CisKK0BrZXlmcmFtZXMgZmEtc3BpbiB7CisgIDAlIHsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpOworICAgIC1tb3otdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CisgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CisgIH0KKyAgMTAwJSB7CisgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpOworICAgIC1tb3otdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTsKKyAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpOworICB9Cit9CisvKiBFbmQgY29waWVkIGluIGZyb20gbmV3ZXIgdmVyc2lvbiBvZiBGb250LUF3ZXNvbWUgNC4zLjAgKi8KKworLnRvcC1wYWRkZWQgeworICBwYWRkaW5nLXRvcDogNjBweDsKK30KKworaW5wdXQuaW5wdXQtbGcgeworICBmb250LXNpemU6IDE4cHg7CisgIGhlaWdodDogMjJweDsKKyAgbGluZS1oZWlnaHQ6IDEuMzMzMzM7CisgIHBhZGRpbmc6IDEwcHggMTZweDsKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZhMTVmZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzCkBAIC0wLDAgKzEsMzMgQEAKKy8qIQorICogIEZvbnQgQXdlc29tZSAzLjAuMgorICogIHRoZSBpY29uaWMgZm9udCBkZXNpZ25lZCBmb3IgdXNlIHdpdGggVHdpdHRlciBCb290c3RyYXAKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgVGhlIGZ1bGwgc3VpdGUgb2YgcGljdG9ncmFwaGljIGljb25zLCBleGFtcGxlcywgYW5kIGRvY3VtZW50YXRpb24KKyAqICBjYW4gYmUgZm91bmQgYXQ6IGh0dHA6Ly9mb3J0YXdlc29tZS5naXRodWIuY29tL0ZvbnQtQXdlc29tZS8KKyAqCisgKiAgTGljZW5zZQorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAtIFRoZSBGb250IEF3ZXNvbWUgZm9udCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgU0lMIE9wZW4gRm9udCBMaWNlbnNlIC0gaHR0cDovL3NjcmlwdHMuc2lsLm9yZy9PRkwKKyAqICAtIEZvbnQgQXdlc29tZSBDU1MsIExFU1MsIGFuZCBTQVNTIGZpbGVzIGFyZSBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgLQorICogICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLmh0bWwKKyAqICAtIFRoZSBGb250IEF3ZXNvbWUgcGljdG9ncmFtcyBhcmUgbGljZW5zZWQgdW5kZXIgdGhlIENDIEJZIDMuMCBMaWNlbnNlIC0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wLworICogIC0gQXR0cmlidXRpb24gaXMgbm8gbG9uZ2VyIHJlcXVpcmVkIGluIEZvbnQgQXdlc29tZSAzLjAsIGJ1dCBtdWNoIGFwcHJlY2lhdGVkOgorICogICAgIkZvbnQgQXdlc29tZSBieSBEYXZlIEdhbmR5IC0gaHR0cDovL2ZvcnRhd2Vzb21lLmdpdGh1Yi5jb20vRm9udC1Bd2Vzb21lIgorCisgKiAgQ29udGFjdAorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBFbWFpbDogZGF2ZUBkYXZlZ2FuZHkuY29tCisgKiAgVHdpdHRlcjogaHR0cDovL3R3aXR0ZXIuY29tL2ZvcnRhd2Vzb19tZQorICogIFdvcms6IExlYWQgUHJvZHVjdCBEZXNpZ25lciBAIGh0dHA6Ly9reXJ1dXMuY29tCisgKi8KKworQGZvbnQtZmFjZXsKKyAgZm9udC1mYW1pbHk6J0ZvbnRBd2Vzb21lJzsKKyAgc3JjOnVybCgnLi4vZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC5lb3Q/dj0zLjAuMScpOworICBzcmM6dXJsKCcuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LmVvdD8jaWVmaXgmdj0zLjAuMScpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSwKKyAgdXJsKCcuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LndvZmY/dj0zLjAuMScpIGZvcm1hdCgnd29mZicpLAorICB1cmwoJy4uL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQudHRmP3Y9My4wLjEnKSBmb3JtYXQoJ3RydWV0eXBlJyk7CisgIGZvbnQtd2VpZ2h0Om5vcm1hbDsKKyAgZm9udC1zdHlsZTpub3JtYWwgfQorCitbY2xhc3NePSJpY29uLSJdLFtjbGFzcyo9IiBpY29uLSJde2ZvbnQtZmFtaWx5OkZvbnRBd2Vzb21lO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0eWxlOm5vcm1hbDt0ZXh0LWRlY29yYXRpb246aW5oZXJpdDstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2Rpc3BsYXk6aW5saW5lO3dpZHRoOmF1dG87aGVpZ2h0OmF1dG87bGluZS1oZWlnaHQ6bm9ybWFsO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2JhY2tncm91bmQtaW1hZ2U6bm9uZTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMDtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQ7bWFyZ2luLXRvcDowfS5pY29uLXdoaXRlLC5uYXYtcGlsbHM+LmFjdGl2ZT5hPltjbGFzc149Imljb24tIl0sLm5hdi1waWxscz4uYWN0aXZlPmE+W2NsYXNzKj0iIGljb24tIl0sLm5hdi1saXN0Pi5hY3RpdmU+YT5bY2xhc3NePSJpY29uLSJdLC5uYXYtbGlzdD4uYWN0aXZlPmE+W2NsYXNzKj0iIGljb24tIl0sLm5hdmJhci1pbnZlcnNlIC5uYXY+LmFjdGl2ZT5hPltjbGFzc149Imljb24tIl0sLm5hdmJhci1pbnZlcnNlIC5uYXY+LmFjdGl2ZT5hPltjbGFzcyo9IiBpY29uLSJdLC5kcm9wZG93bi1tZW51PmxpPmE6aG92ZXI+W2NsYXNzXj0iaWNvbi0iXSwuZHJvcGRvd24tbWVudT5saT5hOmhvdmVyPltjbGFzcyo9IiBpY29uLSJdLC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YT5bY2xhc3NePSJpY29uLSJdLC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YT5bY2xhc3MqPSIgaWNvbi0iXSwuZHJvcGRvd24tc3VibWVudTpob3Zlcj5hPltjbGFzc149Imljb24tIl0sLmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXI+YT5bY2xhc3MqPSIgaWNvbi0iXXtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9W2NsYXNzXj0iaWNvbi0iXTpiZWZvcmUsW2NsYXNzKj0iIGljb24tIl06YmVmb3Jle3RleHQtZGVjb3JhdGlvbjppbmhlcml0O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3NwZWFrOm5vbmV9YSBbY2xhc3NePSJpY29uLSJdLGEgW2NsYXNzKj0iIGljb24tIl17ZGlzcGxheTppbmxpbmUtYmxvY2t9Lmljb24tbGFyZ2U6YmVmb3Jle3ZlcnRpY2FsLWFsaWduOi0xMCU7Zm9udC1zaXplOjEuMzMzMzMzMzMzMzMzMzMzM2VtfS5idG4gW2NsYXNzXj0iaWNvbi0iXSwubmF2IFtjbGFzc149Imljb24tIl0sLmJ0biBbY2xhc3MqPSIgaWNvbi0iXSwubmF2IFtjbGFzcyo9IiBpY29uLSJde2Rpc3BsYXk6aW5saW5lfS5idG4gW2NsYXNzXj0iaWNvbi0iXS5pY29uLWxhcmdlLC5uYXYgW2NsYXNzXj0iaWNvbi0iXS5pY29uLWxhcmdlLC5idG4gW2NsYXNzKj0iIGljb24tIl0uaWNvbi1sYXJnZSwubmF2IFtjbGFzcyo9IiBpY29uLSJdLmljb24tbGFyZ2V7bGluZS1oZWlnaHQ6LjllbX0uYnRuIFtjbGFzc149Imljb24tIl0uaWNvbi1zcGluLC5uYXYgW2NsYXNzXj0iaWNvbi0iXS5pY29uLXNwaW4sLmJ0biBbY2xhc3MqPSIgaWNvbi0iXS5pY29uLXNwaW4sLm5hdiBbY2xhc3MqPSIgaWNvbi0iXS5pY29uLXNwaW57ZGlzcGxheTppbmxpbmUtYmxvY2t9Lm5hdi10YWJzIFtjbGFzc149Imljb24tIl0sLm5hdi1waWxscyBbY2xhc3NePSJpY29uLSJdLC5uYXYtdGFicyBbY2xhc3MqPSIgaWNvbi0iXSwubmF2LXBpbGxzIFtjbGFzcyo9IiBpY29uLSJdLC5uYXYtdGFicyBbY2xhc3NePSJpY29uLSJdLmljb24tbGFyZ2UsLm5hdi1waWxscyBbY2xhc3NePSJpY29uLSJdLmljb24tbGFyZ2UsLm5hdi10YWJzIFtjbGFzcyo9IiBpY29uLSJdLmljb24tbGFyZ2UsLm5hdi1waWxscyBbY2xhc3MqPSIgaWNvbi0iXS5pY29uLWxhcmdle2xpbmUtaGVpZ2h0Oi45ZW19bGkgW2NsYXNzXj0iaWNvbi0iXSwubmF2IGxpIFtjbGFzc149Imljb24tIl0sbGkgW2NsYXNzKj0iIGljb24tIl0sLm5hdiBsaSBbY2xhc3MqPSIgaWNvbi0iXXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxLjI1ZW07dGV4dC1hbGlnbjpjZW50ZXJ9bGkgW2NsYXNzXj0iaWNvbi0iXS5pY29uLWxhcmdlLC5uYXYgbGkgW2NsYXNzXj0iaWNvbi0iXS5pY29uLWxhcmdlLGxpIFtjbGFzcyo9IiBpY29uLSJdLmljb24tbGFyZ2UsLm5hdiBsaSBbY2xhc3MqPSIgaWNvbi0iXS5pY29uLWxhcmdle3dpZHRoOjEuNTYyNWVtfXVsLmljb25ze2xpc3Qtc3R5bGUtdHlwZTpub25lO3RleHQtaW5kZW50Oi0wLjc1ZW19dWwuaWNvbnMgbGkgW2NsYXNzXj0iaWNvbi0iXSx1bC5pY29ucyBsaSBbY2xhc3MqPSIgaWNvbi0iXXt3aWR0aDouNzVlbX0uaWNvbi1tdXRlZHtjb2xvcjojZWVlfS5pY29uLWJvcmRlcntib3JkZXI6c29saWQgMXB4ICNlZWU7cGFkZGluZzouMmVtIC4yNWVtIC4xNWVtOy13ZWJraXQtYm9yZGVyLXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzOjNweDtib3JkZXItcmFkaXVzOjNweH0uaWNvbi0yeHtmb250LXNpemU6MmVtfS5pY29uLTJ4Lmljb24tYm9yZGVye2JvcmRlci13aWR0aDoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fS5pY29uLTN4e2ZvbnQtc2l6ZTozZW19Lmljb24tM3guaWNvbi1ib3JkZXJ7Ym9yZGVyLXdpZHRoOjNweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NXB4Oy1tb3otYm9yZGVyLXJhZGl1czo1cHg7Ym9yZGVyLXJhZGl1czo1cHh9Lmljb24tNHh7Zm9udC1zaXplOjRlbX0uaWNvbi00eC5pY29uLWJvcmRlcntib3JkZXItd2lkdGg6NHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweH0ucHVsbC1yaWdodHtmbG9hdDpyaWdodH0ucHVsbC1sZWZ0e2Zsb2F0OmxlZnR9W2NsYXNzXj0iaWNvbi0iXS5wdWxsLWxlZnQsW2NsYXNzKj0iIGljb24tIl0ucHVsbC1sZWZ0e21hcmdpbi1yaWdodDouM2VtfVtjbGFzc149Imljb24tIl0ucHVsbC1yaWdodCxbY2xhc3MqPSIgaWNvbi0iXS5wdWxsLXJpZ2h0e21hcmdpbi1sZWZ0Oi4zZW19LmJ0biBbY2xhc3NePSJpY29uLSJdLnB1bGwtbGVmdC5pY29uLTJ4LC5idG4gW2NsYXNzKj0iIGljb24tIl0ucHVsbC1sZWZ0Lmljb24tMngsLmJ0biBbY2xhc3NePSJpY29uLSJdLnB1bGwtcmlnaHQuaWNvbi0yeCwuYnRuIFtjbGFzcyo9IiBpY29uLSJdLnB1bGwtcmlnaHQuaWNvbi0yeHttYXJnaW4tdG9wOi4xOGVtfS5idG4gW2NsYXNzXj0iaWNvbi0iXS5pY29uLXNwaW4uaWNvbi1sYXJnZSwuYnRuIFtjbGFzcyo9IiBpY29uLSJdLmljb24tc3Bpbi5pY29uLWxhcmdle2xpbmUtaGVpZ2h0Oi44ZW19LmJ0bi5idG4tc21hbGwgW2NsYXNzXj0iaWNvbi0iXS5wdWxsLWxlZnQuaWNvbi0yeCwuYnRuLmJ0bi1zbWFsbCBbY2xhc3MqPSIgaWNvbi0iXS5wdWxsLWxlZnQuaWNvbi0yeCwuYnRuLmJ0bi1zbWFsbCBbY2xhc3NePSJpY29uLSJdLnB1bGwtcmlnaHQuaWNvbi0yeCwuYnRuLmJ0bi1zbWFsbCBbY2xhc3MqPSIgaWNvbi0iXS5wdWxsLXJpZ2h0Lmljb24tMnh7bWFyZ2luLXRvcDouMjVlbX0uYnRuLmJ0bi1sYXJnZSBbY2xhc3NePSJpY29uLSJdLC5idG4uYnRuLWxhcmdlIFtjbGFzcyo9IiBpY29uLSJde21hcmdpbi10b3A6MH0uYnRuLmJ0bi1sYXJnZSBbY2xhc3NePSJpY29uLSJdLnB1bGwtbGVmdC5pY29uLTJ4LC5idG4uYnRuLWxhcmdlIFtjbGFzcyo9IiBpY29uLSJdLnB1bGwtbGVmdC5pY29uLTJ4LC5idG4uYnRuLWxhcmdlIFtjbGFzc149Imljb24tIl0ucHVsbC1yaWdodC5pY29uLTJ4LC5idG4uYnRuLWxhcmdlIFtjbGFzcyo9IiBpY29uLSJdLnB1bGwtcmlnaHQuaWNvbi0yeHttYXJnaW4tdG9wOi4wNWVtfS5idG4uYnRuLWxhcmdlIFtjbGFzc149Imljb24tIl0ucHVsbC1sZWZ0Lmljb24tMngsLmJ0bi5idG4tbGFyZ2UgW2NsYXNzKj0iIGljb24tIl0ucHVsbC1sZWZ0Lmljb24tMnh7bWFyZ2luLXJpZ2h0Oi4yZW19LmJ0bi5idG4tbGFyZ2UgW2NsYXNzXj0iaWNvbi0iXS5wdWxsLXJpZ2h0Lmljb24tMngsLmJ0bi5idG4tbGFyZ2UgW2NsYXNzKj0iIGljb24tIl0ucHVsbC1yaWdodC5pY29uLTJ4e21hcmdpbi1sZWZ0Oi4yZW19Lmljb24tc3BpbntkaXNwbGF5OmlubGluZS1ibG9jazstbW96LWFuaW1hdGlvbjpzcGluIDJzIGluZmluaXRlIGxpbmVhcjstby1hbmltYXRpb246c3BpbiAycyBpbmZpbml0ZSBsaW5lYXI7LXdlYmtpdC1hbmltYXRpb246c3BpbiAycyBpbmZpbml0ZSBsaW5lYXI7YW5pbWF0aW9uOnNwaW4gMnMgaW5maW5pdGUgbGluZWFyfUAtbW96LWtleWZyYW1lcyBzcGluezAley1tb3otdHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX0xMDAley1tb3otdHJhbnNmb3JtOnJvdGF0ZSgzNTlkZWcpfX1ALXdlYmtpdC1rZXlmcmFtZXMgc3BpbnswJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMGRlZyl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMzU5ZGVnKX19QC1vLWtleWZyYW1lcyBzcGluezAley1vLXRyYW5zZm9ybTpyb3RhdGUoMGRlZyl9MTAwJXstby10cmFuc2Zvcm06cm90YXRlKDM1OWRlZyl9fUAtbXMta2V5ZnJhbWVzIHNwaW57MCV7LW1zLXRyYW5zZm9ybTpyb3RhdGUoMGRlZyl9MTAwJXstbXMtdHJhbnNmb3JtOnJvdGF0ZSgzNTlkZWcpfX1Aa2V5ZnJhbWVzIHNwaW57MCV7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX0xMDAle3RyYW5zZm9ybTpyb3RhdGUoMzU5ZGVnKX19QC1tb3otZG9jdW1lbnQgdXJsLXByZWZpeCgpey5pY29uLXNwaW57aGVpZ2h0Oi45ZW19LmJ0biAuaWNvbi1zcGlue2hlaWdodDphdXRvfS5pY29uLXNwaW4uaWNvbi1sYXJnZXtoZWlnaHQ6MS4yNWVtfS5idG4gLmljb24tc3Bpbi5pY29uLWxhcmdle2hlaWdodDouNzVlbX19Lmljb24tZ2xhc3M6YmVmb3Jle2NvbnRlbnQ6IlxmMDAwIn0uaWNvbi1tdXNpYzpiZWZvcmV7Y29udGVudDoiXGYwMDEifS5pY29uLXNlYXJjaDpiZWZvcmV7Y29udGVudDoiXGYwMDIifS5pY29uLWVudmVsb3BlOmJlZm9yZXtjb250ZW50OiJcZjAwMyJ9Lmljb24taGVhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDA0In0uaWNvbi1zdGFyOmJlZm9yZXtjb250ZW50OiJcZjAwNSJ9Lmljb24tc3Rhci1lbXB0eTpiZWZvcmV7Y29udGVudDoiXGYwMDYifS5pY29uLXVzZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMDA3In0uaWNvbi1maWxtOmJlZm9yZXtjb250ZW50OiJcZjAwOCJ9Lmljb24tdGgtbGFyZ2U6YmVmb3Jle2NvbnRlbnQ6IlxmMDA5In0uaWNvbi10aDpiZWZvcmV7Y29udGVudDoiXGYwMGEifS5pY29uLXRoLWxpc3Q6YmVmb3Jle2NvbnRlbnQ6IlxmMDBiIn0uaWNvbi1vazpiZWZvcmV7Y29udGVudDoiXGYwMGMifS5pY29uLXJlbW92ZTpiZWZvcmV7Y29udGVudDoiXGYwMGQifS5pY29uLXpvb20taW46YmVmb3Jle2NvbnRlbnQ6IlxmMDBlIn0uaWNvbi16b29tLW91dDpiZWZvcmV7Y29udGVudDoiXGYwMTAifS5pY29uLW9mZjpiZWZvcmV7Y29udGVudDoiXGYwMTEifS5pY29uLXNpZ25hbDpiZWZvcmV7Y29udGVudDoiXGYwMTIifS5pY29uLWNvZzpiZWZvcmV7Y29udGVudDoiXGYwMTMifS5pY29uLXRyYXNoOmJlZm9yZXtjb250ZW50OiJcZjAxNCJ9Lmljb24taG9tZTpiZWZvcmV7Y29udGVudDoiXGYwMTUifS5pY29uLWZpbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMDE2In0uaWNvbi10aW1lOmJlZm9yZXtjb250ZW50OiJcZjAxNyJ9Lmljb24tcm9hZDpiZWZvcmV7Y29udGVudDoiXGYwMTgifS5pY29uLWRvd25sb2FkLWFsdDpiZWZvcmV7Y29udGVudDoiXGYwMTkifS5pY29uLWRvd25sb2FkOmJlZm9yZXtjb250ZW50OiJcZjAxYSJ9Lmljb24tdXBsb2FkOmJlZm9yZXtjb250ZW50OiJcZjAxYiJ9Lmljb24taW5ib3g6YmVmb3Jle2NvbnRlbnQ6IlxmMDFjIn0uaWNvbi1wbGF5LWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGYwMWQifS5pY29uLXJlcGVhdDpiZWZvcmV7Y29udGVudDoiXGYwMWUifS5pY29uLXJlZnJlc2g6YmVmb3Jle2NvbnRlbnQ6IlxmMDIxIn0uaWNvbi1saXN0LWFsdDpiZWZvcmV7Y29udGVudDoiXGYwMjIifS5pY29uLWxvY2s6YmVmb3Jle2NvbnRlbnQ6IlxmMDIzIn0uaWNvbi1mbGFnOmJlZm9yZXtjb250ZW50OiJcZjAyNCJ9Lmljb24taGVhZHBob25lczpiZWZvcmV7Y29udGVudDoiXGYwMjUifS5pY29uLXZvbHVtZS1vZmY6YmVmb3Jle2NvbnRlbnQ6IlxmMDI2In0uaWNvbi12b2x1bWUtZG93bjpiZWZvcmV7Y29udGVudDoiXGYwMjcifS5pY29uLXZvbHVtZS11cDpiZWZvcmV7Y29udGVudDoiXGYwMjgifS5pY29uLXFyY29kZTpiZWZvcmV7Y29udGVudDoiXGYwMjkifS5pY29uLWJhcmNvZGU6YmVmb3Jle2NvbnRlbnQ6IlxmMDJhIn0uaWNvbi10YWc6YmVmb3Jle2NvbnRlbnQ6IlxmMDJiIn0uaWNvbi10YWdzOmJlZm9yZXtjb250ZW50OiJcZjAyYyJ9Lmljb24tYm9vazpiZWZvcmV7Y29udGVudDoiXGYwMmQifS5pY29uLWJvb2ttYXJrOmJlZm9yZXtjb250ZW50OiJcZjAyZSJ9Lmljb24tcHJpbnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDJmIn0uaWNvbi1jYW1lcmE6YmVmb3Jle2NvbnRlbnQ6IlxmMDMwIn0uaWNvbi1mb250OmJlZm9yZXtjb250ZW50OiJcZjAzMSJ9Lmljb24tYm9sZDpiZWZvcmV7Y29udGVudDoiXGYwMzIifS5pY29uLWl0YWxpYzpiZWZvcmV7Y29udGVudDoiXGYwMzMifS5pY29uLXRleHQtaGVpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjAzNCJ9Lmljb24tdGV4dC13aWR0aDpiZWZvcmV7Y29udGVudDoiXGYwMzUifS5pY29uLWFsaWduLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDM2In0uaWNvbi1hbGlnbi1jZW50ZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMDM3In0uaWNvbi1hbGlnbi1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYwMzgifS5pY29uLWFsaWduLWp1c3RpZnk6YmVmb3Jle2NvbnRlbnQ6IlxmMDM5In0uaWNvbi1saXN0OmJlZm9yZXtjb250ZW50OiJcZjAzYSJ9Lmljb24taW5kZW50LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDNiIn0uaWNvbi1pbmRlbnQtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDNjIn0uaWNvbi1mYWNldGltZS12aWRlbzpiZWZvcmV7Y29udGVudDoiXGYwM2QifS5pY29uLXBpY3R1cmU6YmVmb3Jle2NvbnRlbnQ6IlxmMDNlIn0uaWNvbi1wZW5jaWw6YmVmb3Jle2NvbnRlbnQ6IlxmMDQwIn0uaWNvbi1tYXAtbWFya2VyOmJlZm9yZXtjb250ZW50OiJcZjA0MSJ9Lmljb24tYWRqdXN0OmJlZm9yZXtjb250ZW50OiJcZjA0MiJ9Lmljb24tdGludDpiZWZvcmV7Y29udGVudDoiXGYwNDMifS5pY29uLWVkaXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDQ0In0uaWNvbi1zaGFyZTpiZWZvcmV7Y29udGVudDoiXGYwNDUifS5pY29uLWNoZWNrOmJlZm9yZXtjb250ZW50OiJcZjA0NiJ9Lmljb24tbW92ZTpiZWZvcmV7Y29udGVudDoiXGYwNDcifS5pY29uLXN0ZXAtYmFja3dhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDQ4In0uaWNvbi1mYXN0LWJhY2t3YXJkOmJlZm9yZXtjb250ZW50OiJcZjA0OSJ9Lmljb24tYmFja3dhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDRhIn0uaWNvbi1wbGF5OmJlZm9yZXtjb250ZW50OiJcZjA0YiJ9Lmljb24tcGF1c2U6YmVmb3Jle2NvbnRlbnQ6IlxmMDRjIn0uaWNvbi1zdG9wOmJlZm9yZXtjb250ZW50OiJcZjA0ZCJ9Lmljb24tZm9yd2FyZDpiZWZvcmV7Y29udGVudDoiXGYwNGUifS5pY29uLWZhc3QtZm9yd2FyZDpiZWZvcmV7Y29udGVudDoiXGYwNTAifS5pY29uLXN0ZXAtZm9yd2FyZDpiZWZvcmV7Y29udGVudDoiXGYwNTEifS5pY29uLWVqZWN0OmJlZm9yZXtjb250ZW50OiJcZjA1MiJ9Lmljb24tY2hldnJvbi1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjA1MyJ9Lmljb24tY2hldnJvbi1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYwNTQifS5pY29uLXBsdXMtc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwNTUifS5pY29uLW1pbnVzLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMDU2In0uaWNvbi1yZW1vdmUtc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwNTcifS5pY29uLW9rLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMDU4In0uaWNvbi1xdWVzdGlvbi1zaWduOmJlZm9yZXtjb250ZW50OiJcZjA1OSJ9Lmljb24taW5mby1zaWduOmJlZm9yZXtjb250ZW50OiJcZjA1YSJ9Lmljb24tc2NyZWVuc2hvdDpiZWZvcmV7Y29udGVudDoiXGYwNWIifS5pY29uLXJlbW92ZS1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMDVjIn0uaWNvbi1vay1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMDVkIn0uaWNvbi1iYW4tY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjA1ZSJ9Lmljb24tYXJyb3ctbGVmdDpiZWZvcmV7Y29udGVudDoiXGYwNjAifS5pY29uLWFycm93LXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjA2MSJ9Lmljb24tYXJyb3ctdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMDYyIn0uaWNvbi1hcnJvdy1kb3duOmJlZm9yZXtjb250ZW50OiJcZjA2MyJ9Lmljb24tc2hhcmUtYWx0OmJlZm9yZXtjb250ZW50OiJcZjA2NCJ9Lmljb24tcmVzaXplLWZ1bGw6YmVmb3Jle2NvbnRlbnQ6IlxmMDY1In0uaWNvbi1yZXNpemUtc21hbGw6YmVmb3Jle2NvbnRlbnQ6IlxmMDY2In0uaWNvbi1wbHVzOmJlZm9yZXtjb250ZW50OiJcZjA2NyJ9Lmljb24tbWludXM6YmVmb3Jle2NvbnRlbnQ6IlxmMDY4In0uaWNvbi1hc3RlcmlzazpiZWZvcmV7Y29udGVudDoiXGYwNjkifS5pY29uLWV4Y2xhbWF0aW9uLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMDZhIn0uaWNvbi1naWZ0OmJlZm9yZXtjb250ZW50OiJcZjA2YiJ9Lmljb24tbGVhZjpiZWZvcmV7Y29udGVudDoiXGYwNmMifS5pY29uLWZpcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMDZkIn0uaWNvbi1leWUtb3BlbjpiZWZvcmV7Y29udGVudDoiXGYwNmUifS5pY29uLWV5ZS1jbG9zZTpiZWZvcmV7Y29udGVudDoiXGYwNzAifS5pY29uLXdhcm5pbmctc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwNzEifS5pY29uLXBsYW5lOmJlZm9yZXtjb250ZW50OiJcZjA3MiJ9Lmljb24tY2FsZW5kYXI6YmVmb3Jle2NvbnRlbnQ6IlxmMDczIn0uaWNvbi1yYW5kb206YmVmb3Jle2NvbnRlbnQ6IlxmMDc0In0uaWNvbi1jb21tZW50OmJlZm9yZXtjb250ZW50OiJcZjA3NSJ9Lmljb24tbWFnbmV0OmJlZm9yZXtjb250ZW50OiJcZjA3NiJ9Lmljb24tY2hldnJvbi11cDpiZWZvcmV7Y29udGVudDoiXGYwNzcifS5pY29uLWNoZXZyb24tZG93bjpiZWZvcmV7Y29udGVudDoiXGYwNzgifS5pY29uLXJldHdlZXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDc5In0uaWNvbi1zaG9wcGluZy1jYXJ0OmJlZm9yZXtjb250ZW50OiJcZjA3YSJ9Lmljb24tZm9sZGVyLWNsb3NlOmJlZm9yZXtjb250ZW50OiJcZjA3YiJ9Lmljb24tZm9sZGVyLW9wZW46YmVmb3Jle2NvbnRlbnQ6IlxmMDdjIn0uaWNvbi1yZXNpemUtdmVydGljYWw6YmVmb3Jle2NvbnRlbnQ6IlxmMDdkIn0uaWNvbi1yZXNpemUtaG9yaXpvbnRhbDpiZWZvcmV7Y29udGVudDoiXGYwN2UifS5pY29uLWJhci1jaGFydDpiZWZvcmV7Y29udGVudDoiXGYwODAifS5pY29uLXR3aXR0ZXItc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwODEifS5pY29uLWZhY2Vib29rLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMDgyIn0uaWNvbi1jYW1lcmEtcmV0cm86YmVmb3Jle2NvbnRlbnQ6IlxmMDgzIn0uaWNvbi1rZXk6YmVmb3Jle2NvbnRlbnQ6IlxmMDg0In0uaWNvbi1jb2dzOmJlZm9yZXtjb250ZW50OiJcZjA4NSJ9Lmljb24tY29tbWVudHM6YmVmb3Jle2NvbnRlbnQ6IlxmMDg2In0uaWNvbi10aHVtYnMtdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMDg3In0uaWNvbi10aHVtYnMtZG93bjpiZWZvcmV7Y29udGVudDoiXGYwODgifS5pY29uLXN0YXItaGFsZjpiZWZvcmV7Y29udGVudDoiXGYwODkifS5pY29uLWhlYXJ0LWVtcHR5OmJlZm9yZXtjb250ZW50OiJcZjA4YSJ9Lmljb24tc2lnbm91dDpiZWZvcmV7Y29udGVudDoiXGYwOGIifS5pY29uLWxpbmtlZGluLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMDhjIn0uaWNvbi1wdXNocGluOmJlZm9yZXtjb250ZW50OiJcZjA4ZCJ9Lmljb24tZXh0ZXJuYWwtbGluazpiZWZvcmV7Y29udGVudDoiXGYwOGUifS5pY29uLXNpZ25pbjpiZWZvcmV7Y29udGVudDoiXGYwOTAifS5pY29uLXRyb3BoeTpiZWZvcmV7Y29udGVudDoiXGYwOTEifS5pY29uLWdpdGh1Yi1zaWduOmJlZm9yZXtjb250ZW50OiJcZjA5MiJ9Lmljb24tdXBsb2FkLWFsdDpiZWZvcmV7Y29udGVudDoiXGYwOTMifS5pY29uLWxlbW9uOmJlZm9yZXtjb250ZW50OiJcZjA5NCJ9Lmljb24tcGhvbmU6YmVmb3Jle2NvbnRlbnQ6IlxmMDk1In0uaWNvbi1jaGVjay1lbXB0eTpiZWZvcmV7Y29udGVudDoiXGYwOTYifS5pY29uLWJvb2ttYXJrLWVtcHR5OmJlZm9yZXtjb250ZW50OiJcZjA5NyJ9Lmljb24tcGhvbmUtc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwOTgifS5pY29uLXR3aXR0ZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMDk5In0uaWNvbi1mYWNlYm9vazpiZWZvcmV7Y29udGVudDoiXGYwOWEifS5pY29uLWdpdGh1YjpiZWZvcmV7Y29udGVudDoiXGYwOWIifS5pY29uLXVubG9jazpiZWZvcmV7Y29udGVudDoiXGYwOWMifS5pY29uLWNyZWRpdC1jYXJkOmJlZm9yZXtjb250ZW50OiJcZjA5ZCJ9Lmljb24tcnNzOmJlZm9yZXtjb250ZW50OiJcZjA5ZSJ9Lmljb24taGRkOmJlZm9yZXtjb250ZW50OiJcZjBhMCJ9Lmljb24tYnVsbGhvcm46YmVmb3Jle2NvbnRlbnQ6IlxmMGExIn0uaWNvbi1iZWxsOmJlZm9yZXtjb250ZW50OiJcZjBhMiJ9Lmljb24tY2VydGlmaWNhdGU6YmVmb3Jle2NvbnRlbnQ6IlxmMGEzIn0uaWNvbi1oYW5kLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjBhNCJ9Lmljb24taGFuZC1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjBhNSJ9Lmljb24taGFuZC11cDpiZWZvcmV7Y29udGVudDoiXGYwYTYifS5pY29uLWhhbmQtZG93bjpiZWZvcmV7Y29udGVudDoiXGYwYTcifS5pY29uLWNpcmNsZS1hcnJvdy1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjBhOCJ9Lmljb24tY2lyY2xlLWFycm93LXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjBhOSJ9Lmljb24tY2lyY2xlLWFycm93LXVwOmJlZm9yZXtjb250ZW50OiJcZjBhYSJ9Lmljb24tY2lyY2xlLWFycm93LWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMGFiIn0uaWNvbi1nbG9iZTpiZWZvcmV7Y29udGVudDoiXGYwYWMifS5pY29uLXdyZW5jaDpiZWZvcmV7Y29udGVudDoiXGYwYWQifS5pY29uLXRhc2tzOmJlZm9yZXtjb250ZW50OiJcZjBhZSJ9Lmljb24tZmlsdGVyOmJlZm9yZXtjb250ZW50OiJcZjBiMCJ9Lmljb24tYnJpZWZjYXNlOmJlZm9yZXtjb250ZW50OiJcZjBiMSJ9Lmljb24tZnVsbHNjcmVlbjpiZWZvcmV7Y29udGVudDoiXGYwYjIifS5pY29uLWdyb3VwOmJlZm9yZXtjb250ZW50OiJcZjBjMCJ9Lmljb24tbGluazpiZWZvcmV7Y29udGVudDoiXGYwYzEifS5pY29uLWNsb3VkOmJlZm9yZXtjb250ZW50OiJcZjBjMiJ9Lmljb24tYmVha2VyOmJlZm9yZXtjb250ZW50OiJcZjBjMyJ9Lmljb24tY3V0OmJlZm9yZXtjb250ZW50OiJcZjBjNCJ9Lmljb24tY29weTpiZWZvcmV7Y29udGVudDoiXGYwYzUifS5pY29uLXBhcGVyLWNsaXA6YmVmb3Jle2NvbnRlbnQ6IlxmMGM2In0uaWNvbi1zYXZlOmJlZm9yZXtjb250ZW50OiJcZjBjNyJ9Lmljb24tc2lnbi1ibGFuazpiZWZvcmV7Y29udGVudDoiXGYwYzgifS5pY29uLXJlb3JkZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMGM5In0uaWNvbi1saXN0LXVsOmJlZm9yZXtjb250ZW50OiJcZjBjYSJ9Lmljb24tbGlzdC1vbDpiZWZvcmV7Y29udGVudDoiXGYwY2IifS5pY29uLXN0cmlrZXRocm91Z2g6YmVmb3Jle2NvbnRlbnQ6IlxmMGNjIn0uaWNvbi11bmRlcmxpbmU6YmVmb3Jle2NvbnRlbnQ6IlxmMGNkIn0uaWNvbi10YWJsZTpiZWZvcmV7Y29udGVudDoiXGYwY2UifS5pY29uLW1hZ2ljOmJlZm9yZXtjb250ZW50OiJcZjBkMCJ9Lmljb24tdHJ1Y2s6YmVmb3Jle2NvbnRlbnQ6IlxmMGQxIn0uaWNvbi1waW50ZXJlc3Q6YmVmb3Jle2NvbnRlbnQ6IlxmMGQyIn0uaWNvbi1waW50ZXJlc3Qtc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwZDMifS5pY29uLWdvb2dsZS1wbHVzLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMGQ0In0uaWNvbi1nb29nbGUtcGx1czpiZWZvcmV7Y29udGVudDoiXGYwZDUifS5pY29uLW1vbmV5OmJlZm9yZXtjb250ZW50OiJcZjBkNiJ9Lmljb24tY2FyZXQtZG93bjpiZWZvcmV7Y29udGVudDoiXGYwZDcifS5pY29uLWNhcmV0LXVwOmJlZm9yZXtjb250ZW50OiJcZjBkOCJ9Lmljb24tY2FyZXQtbGVmdDpiZWZvcmV7Y29udGVudDoiXGYwZDkifS5pY29uLWNhcmV0LXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjBkYSJ9Lmljb24tY29sdW1uczpiZWZvcmV7Y29udGVudDoiXGYwZGIifS5pY29uLXNvcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGRjIn0uaWNvbi1zb3J0LWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMGRkIn0uaWNvbi1zb3J0LXVwOmJlZm9yZXtjb250ZW50OiJcZjBkZSJ9Lmljb24tZW52ZWxvcGUtYWx0OmJlZm9yZXtjb250ZW50OiJcZjBlMCJ9Lmljb24tbGlua2VkaW46YmVmb3Jle2NvbnRlbnQ6IlxmMGUxIn0uaWNvbi11bmRvOmJlZm9yZXtjb250ZW50OiJcZjBlMiJ9Lmljb24tbGVnYWw6YmVmb3Jle2NvbnRlbnQ6IlxmMGUzIn0uaWNvbi1kYXNoYm9hcmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGU0In0uaWNvbi1jb21tZW50LWFsdDpiZWZvcmV7Y29udGVudDoiXGYwZTUifS5pY29uLWNvbW1lbnRzLWFsdDpiZWZvcmV7Y29udGVudDoiXGYwZTYifS5pY29uLWJvbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGU3In0uaWNvbi1zaXRlbWFwOmJlZm9yZXtjb250ZW50OiJcZjBlOCJ9Lmljb24tdW1icmVsbGE6YmVmb3Jle2NvbnRlbnQ6IlxmMGU5In0uaWNvbi1wYXN0ZTpiZWZvcmV7Y29udGVudDoiXGYwZWEifS5pY29uLWxpZ2h0YnVsYjpiZWZvcmV7Y29udGVudDoiXGYwZWIifS5pY29uLWV4Y2hhbmdlOmJlZm9yZXtjb250ZW50OiJcZjBlYyJ9Lmljb24tY2xvdWQtZG93bmxvYWQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGVkIn0uaWNvbi1jbG91ZC11cGxvYWQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGVlIn0uaWNvbi11c2VyLW1kOmJlZm9yZXtjb250ZW50OiJcZjBmMCJ9Lmljb24tc3RldGhvc2NvcGU6YmVmb3Jle2NvbnRlbnQ6IlxmMGYxIn0uaWNvbi1zdWl0Y2FzZTpiZWZvcmV7Y29udGVudDoiXGYwZjIifS5pY29uLWJlbGwtYWx0OmJlZm9yZXtjb250ZW50OiJcZjBmMyJ9Lmljb24tY29mZmVlOmJlZm9yZXtjb250ZW50OiJcZjBmNCJ9Lmljb24tZm9vZDpiZWZvcmV7Y29udGVudDoiXGYwZjUifS5pY29uLWZpbGUtYWx0OmJlZm9yZXtjb250ZW50OiJcZjBmNiJ9Lmljb24tYnVpbGRpbmc6YmVmb3Jle2NvbnRlbnQ6IlxmMGY3In0uaWNvbi1ob3NwaXRhbDpiZWZvcmV7Y29udGVudDoiXGYwZjgifS5pY29uLWFtYnVsYW5jZTpiZWZvcmV7Y29udGVudDoiXGYwZjkifS5pY29uLW1lZGtpdDpiZWZvcmV7Y29udGVudDoiXGYwZmEifS5pY29uLWZpZ2h0ZXItamV0OmJlZm9yZXtjb250ZW50OiJcZjBmYiJ9Lmljb24tYmVlcjpiZWZvcmV7Y29udGVudDoiXGYwZmMifS5pY29uLWgtc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwZmQifS5pY29uLXBsdXMtc2lnbi1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGZlIn0uaWNvbi1kb3VibGUtYW5nbGUtbGVmdDpiZWZvcmV7Y29udGVudDoiXGYxMDAifS5pY29uLWRvdWJsZS1hbmdsZS1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYxMDEifS5pY29uLWRvdWJsZS1hbmdsZS11cDpiZWZvcmV7Y29udGVudDoiXGYxMDIifS5pY29uLWRvdWJsZS1hbmdsZS1kb3duOmJlZm9yZXtjb250ZW50OiJcZjEwMyJ9Lmljb24tYW5nbGUtbGVmdDpiZWZvcmV7Y29udGVudDoiXGYxMDQifS5pY29uLWFuZ2xlLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjEwNSJ9Lmljb24tYW5nbGUtdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMTA2In0uaWNvbi1hbmdsZS1kb3duOmJlZm9yZXtjb250ZW50OiJcZjEwNyJ9Lmljb24tZGVza3RvcDpiZWZvcmV7Y29udGVudDoiXGYxMDgifS5pY29uLWxhcHRvcDpiZWZvcmV7Y29udGVudDoiXGYxMDkifS5pY29uLXRhYmxldDpiZWZvcmV7Y29udGVudDoiXGYxMGEifS5pY29uLW1vYmlsZS1waG9uZTpiZWZvcmV7Y29udGVudDoiXGYxMGIifS5pY29uLWNpcmNsZS1ibGFuazpiZWZvcmV7Y29udGVudDoiXGYxMGMifS5pY29uLXF1b3RlLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTBkIn0uaWNvbi1xdW90ZS1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYxMGUifS5pY29uLXNwaW5uZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMTEwIn0uaWNvbi1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMTExIn0uaWNvbi1yZXBseTpiZWZvcmV7Y29udGVudDoiXGYxMTIifS5pY29uLWdpdGh1Yi1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTEzIn0uaWNvbi1mb2xkZXItY2xvc2UtYWx0OmJlZm9yZXtjb250ZW50OiJcZjExNCJ9Lmljb24tZm9sZGVyLW9wZW4tYWx0OmJlZm9yZXtjb250ZW50OiJcZjExNSJ9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19kaWFnb25hbHMtdGhpY2tfMThfYjgxOTAwXzQweDQwLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWJnX2RpYWdvbmFscy10aGlja18xOF9iODE5MDBfNDB4NDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ1ZDc4YTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19kaWFnb25hbHMtdGhpY2tfMThfYjgxOTAwXzQweDQwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19kaWFnb25hbHMtdGhpY2tfMjBfNjY2NjY2XzQweDQwLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWJnX2RpYWdvbmFscy10aGlja18yMF82NjY2NjZfNDB4NDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFiMGEwNDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19kaWFnb25hbHMtdGhpY2tfMjBfNjY2NjY2XzQweDQwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19mbGF0XzEwXzAwMDAwMF80MHgxMDAucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZmxhdF8xMF8wMDAwMDBfNDB4MTAwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNTVmOGVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZmxhdF8xMF8wMDAwMDBfNDB4MTAwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19nbGFzc18xMDBfZjZmNmY2XzF4NDAwLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWJnX2dsYXNzXzEwMF9mNmY2ZjZfMXg0MDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVhNGZhMGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19nbGFzc18xMDBfZjZmNmY2XzF4NDAwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19nbGFzc18xMDBfZmRmNWNlXzF4NDAwLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWJnX2dsYXNzXzEwMF9mZGY1Y2VfMXg0MDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJmNTllMmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19nbGFzc18xMDBfZmRmNWNlXzF4NDAwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19nbGFzc182NV9mZmZmZmZfMXg0MDAucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZ2xhc3NfNjVfZmZmZmZmXzF4NDAwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMTcyYjMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZ2xhc3NfNjVfZmZmZmZmXzF4NDAwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19nbG9zcy13YXZlXzM1X2Y2YTgyOF81MDB4MTAwLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWJnX2dsb3NzLXdhdmVfMzVfZjZhODI4XzUwMHgxMDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMzlkNTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19nbG9zcy13YXZlXzM1X2Y2YTgyOF81MDB4MTAwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19oaWdobGlnaHQtc29mdF8xMDBfZWVlZWVlXzF4MTAwLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWJnX2hpZ2hsaWdodC1zb2Z0XzEwMF9lZWVlZWVfMXgxMDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEwODliNzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19oaWdobGlnaHQtc29mdF8xMDBfZWVlZWVlXzF4MTAwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19oaWdobGlnaHQtc29mdF83NV9mZmU0NWNfMXgxMDAucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfaGlnaGxpZ2h0LXNvZnRfNzVfZmZlNDVjXzF4MTAwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NjFiN2Y4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfaGlnaGxpZ2h0LXNvZnRfNzVfZmZlNDVjXzF4MTAwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1pY29uc18yMjIyMjJfMjU2eDI0MC5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1pY29uc18yMjIyMjJfMjU2eDI0MC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTljOGUxNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWljb25zXzIyMjIyMl8yNTZ4MjQwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1pY29uc18yMjhlZjFfMjU2eDI0MC5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1pY29uc18yMjhlZjFfMjU2eDI0MC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ2OGM1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWljb25zXzIyOGVmMV8yNTZ4MjQwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1pY29uc19lZjhjMDhfMjU2eDI0MC5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1pY29uc19lZjhjMDhfMjU2eDI0MC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThiYmZlOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWljb25zX2VmOGMwOF8yNTZ4MjQwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1pY29uc19mZmQyN2FfMjU2eDI0MC5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1pY29uc19mZmQyN2FfMjU2eDI0MC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQzNWI0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWljb25zX2ZmZDI3YV8yNTZ4MjQwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1pY29uc19mZmZmZmZfMjU2eDI0MC5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1pY29uc19mZmZmZmZfMjU2eDI0MC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ2NmY1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWljb25zX2ZmZmZmZl8yNTZ4MjQwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2pxdWVyeS11aS5taW4uY3NzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9qcXVlcnktdWkubWluLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNDg2ZWMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9qcXVlcnktdWkubWluLmNzcwpAQCAtMCwwICsxLDcgQEAKKy8qISBqUXVlcnkgVUkgLSB2MS4xMS40IC0gMjAxNS0wMy0xNworKiBodHRwOi8vanF1ZXJ5dWkuY29tCisqIEluY2x1ZGVzOiBjb3JlLmNzcywgZGF0ZXBpY2tlci5jc3MsIHRoZW1lLmNzcworKiBUbyB2aWV3IGFuZCBtb2RpZnkgdGhpcyB0aGVtZSwgdmlzaXQgaHR0cDovL2pxdWVyeXVpLmNvbS90aGVtZXJvbGxlci8/ZmZEZWZhdWx0PVRyZWJ1Y2hldCUyME1TJTJDVGFob21hJTJDVmVyZGFuYSUyQ0FyaWFsJTJDc2Fucy1zZXJpZiZmd0RlZmF1bHQ9Ym9sZCZmc0RlZmF1bHQ9MS4xZW0mY29ybmVyUmFkaXVzPTRweCZiZ0NvbG9ySGVhZGVyPWY2YTgyOCZiZ1RleHR1cmVIZWFkZXI9Z2xvc3Nfd2F2ZSZiZ0ltZ09wYWNpdHlIZWFkZXI9MzUmYm9yZGVyQ29sb3JIZWFkZXI9ZTc4ZjA4JmZjSGVhZGVyPWZmZmZmZiZpY29uQ29sb3JIZWFkZXI9ZmZmZmZmJmJnQ29sb3JDb250ZW50PWVlZWVlZSZiZ1RleHR1cmVDb250ZW50PWhpZ2hsaWdodF9zb2Z0JmJnSW1nT3BhY2l0eUNvbnRlbnQ9MTAwJmJvcmRlckNvbG9yQ29udGVudD1kZGRkZGQmZmNDb250ZW50PTMzMzMzMyZpY29uQ29sb3JDb250ZW50PTIyMjIyMiZiZ0NvbG9yRGVmYXVsdD1mNmY2ZjYmYmdUZXh0dXJlRGVmYXVsdD1nbGFzcyZiZ0ltZ09wYWNpdHlEZWZhdWx0PTEwMCZib3JkZXJDb2xvckRlZmF1bHQ9Y2NjY2NjJmZjRGVmYXVsdD0xYzk0YzQmaWNvbkNvbG9yRGVmYXVsdD1lZjhjMDgmYmdDb2xvckhvdmVyPWZkZjVjZSZiZ1RleHR1cmVIb3Zlcj1nbGFzcyZiZ0ltZ09wYWNpdHlIb3Zlcj0xMDAmYm9yZGVyQ29sb3JIb3Zlcj1mYmNiMDkmZmNIb3Zlcj1jNzc0MDUmaWNvbkNvbG9ySG92ZXI9ZWY4YzA4JmJnQ29sb3JBY3RpdmU9ZmZmZmZmJmJnVGV4dHVyZUFjdGl2ZT1nbGFzcyZiZ0ltZ09wYWNpdHlBY3RpdmU9NjUmYm9yZGVyQ29sb3JBY3RpdmU9ZmJkODUwJmZjQWN0aXZlPWViOGYwMCZpY29uQ29sb3JBY3RpdmU9ZWY4YzA4JmJnQ29sb3JIaWdobGlnaHQ9ZmZlNDVjJmJnVGV4dHVyZUhpZ2hsaWdodD1oaWdobGlnaHRfc29mdCZiZ0ltZ09wYWNpdHlIaWdobGlnaHQ9NzUmYm9yZGVyQ29sb3JIaWdobGlnaHQ9ZmVkMjJmJmZjSGlnaGxpZ2h0PTM2MzYzNiZpY29uQ29sb3JIaWdobGlnaHQ9MjI4ZWYxJmJnQ29sb3JFcnJvcj1iODE5MDAmYmdUZXh0dXJlRXJyb3I9ZGlhZ29uYWxzX3RoaWNrJmJnSW1nT3BhY2l0eUVycm9yPTE4JmJvcmRlckNvbG9yRXJyb3I9Y2QwYTBhJmZjRXJyb3I9ZmZmZmZmJmljb25Db2xvckVycm9yPWZmZDI3YSZiZ0NvbG9yT3ZlcmxheT02NjY2NjYmYmdUZXh0dXJlT3ZlcmxheT1kaWFnb25hbHNfdGhpY2smYmdJbWdPcGFjaXR5T3ZlcmxheT0yMCZvcGFjaXR5T3ZlcmxheT01MCZiZ0NvbG9yU2hhZG93PTAwMDAwMCZiZ1RleHR1cmVTaGFkb3c9ZmxhdCZiZ0ltZ09wYWNpdHlTaGFkb3c9MTAmb3BhY2l0eVNoYWRvdz0yMCZ0aGlja25lc3NTaGFkb3c9NXB4Jm9mZnNldFRvcFNoYWRvdz0tNXB4Jm9mZnNldExlZnRTaGFkb3c9LTVweCZjb3JuZXJSYWRpdXNTaGFkb3c9NXB4CisqIENvcHlyaWdodCAyMDE1IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnM7IExpY2Vuc2VkIE1JVCAqLworCisudWktaGVscGVyLWhpZGRlbntkaXNwbGF5Om5vbmV9LnVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweH0udWktaGVscGVyLXJlc2V0e21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtvdXRsaW5lOjA7bGluZS1oZWlnaHQ6MS4zO3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtc2l6ZToxMDAlO2xpc3Qtc3R5bGU6bm9uZX0udWktaGVscGVyLWNsZWFyZml4OmJlZm9yZSwudWktaGVscGVyLWNsZWFyZml4OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTp0YWJsZTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2V9LnVpLWhlbHBlci1jbGVhcmZpeDphZnRlcntjbGVhcjpib3RofS51aS1oZWxwZXItY2xlYXJmaXh7bWluLWhlaWdodDowfS51aS1oZWxwZXItemZpeHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RvcDowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtvcGFjaXR5OjA7ZmlsdGVyOkFscGhhKE9wYWNpdHk9MCl9LnVpLWZyb250e3otaW5kZXg6MTAwfS51aS1zdGF0ZS1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdCFpbXBvcnRhbnR9LnVpLWljb257ZGlzcGxheTpibG9jazt0ZXh0LWluZGVudDotOTk5OTlweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fS51aS13aWRnZXQtb3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0udWktZGF0ZXBpY2tlcnt3aWR0aDoxN2VtO3BhZGRpbmc6LjJlbSAuMmVtIDA7ZGlzcGxheTpub25lfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWhlYWRlcntwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOi4yZW0gMH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LC51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjJweDt3aWR0aDoxLjhlbTtoZWlnaHQ6MS44ZW19LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciwudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0LWhvdmVye3RvcDoxcHh9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldntsZWZ0OjJweH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0e3JpZ2h0OjJweH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LWhvdmVye2xlZnQ6MXB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQtaG92ZXJ7cmlnaHQ6MXB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYgc3BhbiwudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0IHNwYW57ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjUwJTttYXJnaW4tbGVmdDotOHB4O3RvcDo1MCU7bWFyZ2luLXRvcDotOHB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXRpdGxle21hcmdpbjowIDIuM2VtO2xpbmUtaGVpZ2h0OjEuOGVtO3RleHQtYWxpZ246Y2VudGVyfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXRpdGxlIHNlbGVjdHtmb250LXNpemU6MWVtO21hcmdpbjoxcHggMH0udWktZGF0ZXBpY2tlciBzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aCwudWktZGF0ZXBpY2tlciBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFye3dpZHRoOjQ1JX0udWktZGF0ZXBpY2tlciB0YWJsZXt3aWR0aDoxMDAlO2ZvbnQtc2l6ZTouOWVtO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTttYXJnaW46MCAwIC40ZW19LnVpLWRhdGVwaWNrZXIgdGh7cGFkZGluZzouN2VtIC4zZW07dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZDtib3JkZXI6MH0udWktZGF0ZXBpY2tlciB0ZHtib3JkZXI6MDtwYWRkaW5nOjFweH0udWktZGF0ZXBpY2tlciB0ZCBzcGFuLC51aS1kYXRlcGlja2VyIHRkIGF7ZGlzcGxheTpibG9jaztwYWRkaW5nOi4yZW07dGV4dC1hbGlnbjpyaWdodDt0ZXh0LWRlY29yYXRpb246bm9uZX0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5le2JhY2tncm91bmQtaW1hZ2U6bm9uZTttYXJnaW46LjdlbSAwIDAgMDtwYWRkaW5nOjAgLjJlbTtib3JkZXItbGVmdDowO2JvcmRlci1yaWdodDowO2JvcmRlci1ib3R0b206MH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIGJ1dHRvbntmbG9hdDpyaWdodDttYXJnaW46LjVlbSAuMmVtIC40ZW07Y3Vyc29yOnBvaW50ZXI7cGFkZGluZzouMmVtIC42ZW0gLjNlbSAuNmVtO3dpZHRoOmF1dG87b3ZlcmZsb3c6dmlzaWJsZX0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIGJ1dHRvbi51aS1kYXRlcGlja2VyLWN1cnJlbnR7ZmxvYXQ6bGVmdH0udWktZGF0ZXBpY2tlci51aS1kYXRlcGlja2VyLW11bHRpe3dpZHRoOmF1dG99LnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXB7ZmxvYXQ6bGVmdH0udWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cCB0YWJsZXt3aWR0aDo5NSU7bWFyZ2luOjAgYXV0byAuNGVtfS51aS1kYXRlcGlja2VyLW11bHRpLTIgLnVpLWRhdGVwaWNrZXItZ3JvdXB7d2lkdGg6NTAlfS51aS1kYXRlcGlja2VyLW11bHRpLTMgLnVpLWRhdGVwaWNrZXItZ3JvdXB7d2lkdGg6MzMuMyV9LnVpLWRhdGVwaWNrZXItbXVsdGktNCAudWktZGF0ZXBpY2tlci1ncm91cHt3aWR0aDoyNSV9LnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbGFzdCAudWktZGF0ZXBpY2tlci1oZWFkZXIsLnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlIC51aS1kYXRlcGlja2VyLWhlYWRlcntib3JkZXItbGVmdC13aWR0aDowfS51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmV7Y2xlYXI6bGVmdH0udWktZGF0ZXBpY2tlci1yb3ctYnJlYWt7Y2xlYXI6Ym90aDt3aWR0aDoxMDAlO2ZvbnQtc2l6ZTowfS51aS1kYXRlcGlja2VyLXJ0bHtkaXJlY3Rpb246cnRsfS51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1wcmV2e3JpZ2h0OjJweDtsZWZ0OmF1dG99LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLW5leHR7bGVmdDoycHg7cmlnaHQ6YXV0b30udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItcHJldjpob3ZlcntyaWdodDoxcHg7bGVmdDphdXRvfS51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1uZXh0OmhvdmVye2xlZnQ6MXB4O3JpZ2h0OmF1dG99LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmV7Y2xlYXI6cmlnaHR9LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9ue2Zsb2F0OmxlZnR9LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9uLnVpLWRhdGVwaWNrZXItY3VycmVudCwudWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItZ3JvdXB7ZmxvYXQ6cmlnaHR9LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwLWxhc3QgLnVpLWRhdGVwaWNrZXItaGVhZGVyLC51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1ncm91cC1taWRkbGUgLnVpLWRhdGVwaWNrZXItaGVhZGVye2JvcmRlci1yaWdodC13aWR0aDowO2JvcmRlci1sZWZ0LXdpZHRoOjFweH0udWktd2lkZ2V0e2ZvbnQtZmFtaWx5OlRyZWJ1Y2hldCBNUyxUYWhvbWEsVmVyZGFuYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxLjFlbX0udWktd2lkZ2V0IC51aS13aWRnZXR7Zm9udC1zaXplOjFlbX0udWktd2lkZ2V0IGlucHV0LC51aS13aWRnZXQgc2VsZWN0LC51aS13aWRnZXQgdGV4dGFyZWEsLnVpLXdpZGdldCBidXR0b257Zm9udC1mYW1pbHk6VHJlYnVjaGV0IE1TLFRhaG9tYSxWZXJkYW5hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjFlbX0udWktd2lkZ2V0LWNvbnRlbnR7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JhY2tncm91bmQ6I2VlZSB1cmwoImltYWdlcy91aS1iZ19oaWdobGlnaHQtc29mdF8xMDBfZWVlZWVlXzF4MTAwLnBuZyIpIDUwJSB0b3AgcmVwZWF0LXg7Y29sb3I6IzMzM30udWktd2lkZ2V0LWNvbnRlbnQgYXtjb2xvcjojMzMzfS51aS13aWRnZXQtaGVhZGVye2JvcmRlcjoxcHggc29saWQgI2U3OGYwODtiYWNrZ3JvdW5kOiNmNmE4MjggdXJsKCJpbWFnZXMvdWktYmdfZ2xvc3Mtd2F2ZV8zNV9mNmE4MjhfNTAweDEwMC5wbmciKSA1MCUgNTAlIHJlcGVhdC14O2NvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6Ym9sZH0udWktd2lkZ2V0LWhlYWRlciBhe2NvbG9yOiNmZmZ9LnVpLXN0YXRlLWRlZmF1bHQsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1kZWZhdWx0LC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1kZWZhdWx0e2JvcmRlcjoxcHggc29saWQgI2NjYztiYWNrZ3JvdW5kOiNmNmY2ZjYgdXJsKCJpbWFnZXMvdWktYmdfZ2xhc3NfMTAwX2Y2ZjZmNl8xeDQwMC5wbmciKSA1MCUgNTAlIHJlcGVhdC14O2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6IzFjOTRjNH0udWktc3RhdGUtZGVmYXVsdCBhLC51aS1zdGF0ZS1kZWZhdWx0IGE6bGluaywudWktc3RhdGUtZGVmYXVsdCBhOnZpc2l0ZWR7Y29sb3I6IzFjOTRjNDt0ZXh0LWRlY29yYXRpb246bm9uZX0udWktc3RhdGUtaG92ZXIsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1ob3ZlciwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaG92ZXIsLnVpLXN0YXRlLWZvY3VzLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZm9jdXMsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWZvY3Vze2JvcmRlcjoxcHggc29saWQgI2ZiY2IwOTtiYWNrZ3JvdW5kOiNmZGY1Y2UgdXJsKCJpbWFnZXMvdWktYmdfZ2xhc3NfMTAwX2ZkZjVjZV8xeDQwMC5wbmciKSA1MCUgNTAlIHJlcGVhdC14O2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6I2M3NzQwNX0udWktc3RhdGUtaG92ZXIgYSwudWktc3RhdGUtaG92ZXIgYTpob3ZlciwudWktc3RhdGUtaG92ZXIgYTpsaW5rLC51aS1zdGF0ZS1ob3ZlciBhOnZpc2l0ZWQsLnVpLXN0YXRlLWZvY3VzIGEsLnVpLXN0YXRlLWZvY3VzIGE6aG92ZXIsLnVpLXN0YXRlLWZvY3VzIGE6bGluaywudWktc3RhdGUtZm9jdXMgYTp2aXNpdGVke2NvbG9yOiNjNzc0MDU7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVpLXN0YXRlLWFjdGl2ZSwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWFjdGl2ZSwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtYWN0aXZle2JvcmRlcjoxcHggc29saWQgI2ZiZDg1MDtiYWNrZ3JvdW5kOiNmZmYgdXJsKCJpbWFnZXMvdWktYmdfZ2xhc3NfNjVfZmZmZmZmXzF4NDAwLnBuZyIpIDUwJSA1MCUgcmVwZWF0LXg7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojZWI4ZjAwfS51aS1zdGF0ZS1hY3RpdmUgYSwudWktc3RhdGUtYWN0aXZlIGE6bGluaywudWktc3RhdGUtYWN0aXZlIGE6dmlzaXRlZHtjb2xvcjojZWI4ZjAwO3RleHQtZGVjb3JhdGlvbjpub25lfS51aS1zdGF0ZS1oaWdobGlnaHQsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1oaWdobGlnaHQsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhpZ2hsaWdodHtib3JkZXI6MXB4IHNvbGlkICNmZWQyMmY7YmFja2dyb3VuZDojZmZlNDVjIHVybCgiaW1hZ2VzL3VpLWJnX2hpZ2hsaWdodC1zb2Z0Xzc1X2ZmZTQ1Y18xeDEwMC5wbmciKSA1MCUgdG9wIHJlcGVhdC14O2NvbG9yOiMzNjM2MzZ9LnVpLXN0YXRlLWhpZ2hsaWdodCBhLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtaGlnaGxpZ2h0IGEsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhpZ2hsaWdodCBhe2NvbG9yOiMzNjM2MzZ9LnVpLXN0YXRlLWVycm9yLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZXJyb3IsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWVycm9ye2JvcmRlcjoxcHggc29saWQgI2NkMGEwYTtiYWNrZ3JvdW5kOiNiODE5MDAgdXJsKCJpbWFnZXMvdWktYmdfZGlhZ29uYWxzLXRoaWNrXzE4X2I4MTkwMF80MHg0MC5wbmciKSA1MCUgNTAlIHJlcGVhdDtjb2xvcjojZmZmfS51aS1zdGF0ZS1lcnJvciBhLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZXJyb3IgYSwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3IgYXtjb2xvcjojZmZmfS51aS1zdGF0ZS1lcnJvci10ZXh0LC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZXJyb3ItdGV4dCwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3ItdGV4dHtjb2xvcjojZmZmfS51aS1wcmlvcml0eS1wcmltYXJ5LC51aS13aWRnZXQtY29udGVudCAudWktcHJpb3JpdHktcHJpbWFyeSwudWktd2lkZ2V0LWhlYWRlciAudWktcHJpb3JpdHktcHJpbWFyeXtmb250LXdlaWdodDpib2xkfS51aS1wcmlvcml0eS1zZWNvbmRhcnksLnVpLXdpZGdldC1jb250ZW50IC51aS1wcmlvcml0eS1zZWNvbmRhcnksLnVpLXdpZGdldC1oZWFkZXIgLnVpLXByaW9yaXR5LXNlY29uZGFyeXtvcGFjaXR5Oi43O2ZpbHRlcjpBbHBoYShPcGFjaXR5PTcwKTtmb250LXdlaWdodDpub3JtYWx9LnVpLXN0YXRlLWRpc2FibGVkLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZGlzYWJsZWQsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWRpc2FibGVke29wYWNpdHk6LjM1O2ZpbHRlcjpBbHBoYShPcGFjaXR5PTM1KTtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9LnVpLXN0YXRlLWRpc2FibGVkIC51aS1pY29ue2ZpbHRlcjpBbHBoYShPcGFjaXR5PTM1KX0udWktaWNvbnt3aWR0aDoxNnB4O2hlaWdodDoxNnB4fS51aS1pY29uLC51aS13aWRnZXQtY29udGVudCAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1hZ2VzL3VpLWljb25zXzIyMjIyMl8yNTZ4MjQwLnBuZyIpfS51aS13aWRnZXQtaGVhZGVyIC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKCJpbWFnZXMvdWktaWNvbnNfZmZmZmZmXzI1NngyNDAucG5nIil9LnVpLXN0YXRlLWRlZmF1bHQgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoImltYWdlcy91aS1pY29uc19lZjhjMDhfMjU2eDI0MC5wbmciKX0udWktc3RhdGUtaG92ZXIgLnVpLWljb24sLnVpLXN0YXRlLWZvY3VzIC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKCJpbWFnZXMvdWktaWNvbnNfZWY4YzA4XzI1NngyNDAucG5nIil9LnVpLXN0YXRlLWFjdGl2ZSAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1hZ2VzL3VpLWljb25zX2VmOGMwOF8yNTZ4MjQwLnBuZyIpfS51aS1zdGF0ZS1oaWdobGlnaHQgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoImltYWdlcy91aS1pY29uc18yMjhlZjFfMjU2eDI0MC5wbmciKX0udWktc3RhdGUtZXJyb3IgLnVpLWljb24sLnVpLXN0YXRlLWVycm9yLXRleHQgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoImltYWdlcy91aS1pY29uc19mZmQyN2FfMjU2eDI0MC5wbmciKX0udWktaWNvbi1ibGFua3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjE2cHggMTZweH0udWktaWNvbi1jYXJhdC0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9LnVpLWljb24tY2FyYXQtMS1uZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IDB9LnVpLWljb24tY2FyYXQtMS1le2JhY2tncm91bmQtcG9zaXRpb246LTMycHggMH0udWktaWNvbi1jYXJhdC0xLXNle2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggMH0udWktaWNvbi1jYXJhdC0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAwfS51aS1pY29uLWNhcmF0LTEtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAwfS51aS1pY29uLWNhcmF0LTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IDB9LnVpLWljb24tY2FyYXQtMS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAwfS51aS1pY29uLWNhcmF0LTItbi1ze2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IDB9LnVpLWljb24tY2FyYXQtMi1lLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggMH0udWktaWNvbi10cmlhbmdsZS0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtbmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLXNle2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtbnd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMi1uLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMi1lLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTE2cHh9LnVpLWljb24tYXJyb3ctMS1ue2JhY2tncm91bmQtcG9zaXRpb246MCAtMzJweH0udWktaWNvbi1hcnJvdy0xLW5le2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTMycHh9LnVpLWljb24tYXJyb3ctMS1le2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTMycHh9LnVpLWljb24tYXJyb3ctMS1zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0zMnB4fS51aS1pY29uLWFycm93LTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0zMnB4fS51aS1pY29uLWFycm93LTEtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMzJweH0udWktaWNvbi1hcnJvdy0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMzJweH0udWktaWNvbi1hcnJvdy0xLW53e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0zMnB4fS51aS1pY29uLWFycm93LTItbi1ze2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC0zMnB4fS51aS1pY29uLWFycm93LTItbmUtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTMycHh9LnVpLWljb24tYXJyb3ctMi1lLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTMycHh9LnVpLWljb24tYXJyb3ctMi1zZS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtMzJweH0udWktaWNvbi1hcnJvd3N0b3AtMS1ue2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0zMnB4fS51aS1pY29uLWFycm93c3RvcC0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMjA4cHggLTMycHh9LnVpLWljb24tYXJyb3dzdG9wLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMjRweCAtMzJweH0udWktaWNvbi1hcnJvd3N0b3AtMS13e2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC0zMnB4fS51aS1pY29uLWFycm93dGhpY2stMS1ue2JhY2tncm91bmQtcG9zaXRpb246MCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtbmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLXN3e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtbnd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0yLW4tc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTItbmUtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0yLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTItc2Utbnd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS1ue2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMjI0cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS13e2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC00OHB4fS51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS13e2JhY2tncm91bmQtcG9zaXRpb246MCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1le2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTY0cHh9LnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybi0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybi0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybi0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybi0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTY0cHh9LnVpLWljb24tYXJyb3dyZWZyZXNoLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtNjRweH0udWktaWNvbi1hcnJvd3JlZnJlc2gtMS1ue2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC02NHB4fS51aS1pY29uLWFycm93cmVmcmVzaC0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTY0cHh9LnVpLWljb24tYXJyb3dyZWZyZXNoLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtNjRweH0udWktaWNvbi1hcnJvdy00e2JhY2tncm91bmQtcG9zaXRpb246MCAtODBweH0udWktaWNvbi1hcnJvdy00LWRpYWd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtODBweH0udWktaWNvbi1leHRsaW5re2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTgwcHh9LnVpLWljb24tbmV3d2lue2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTgwcHh9LnVpLWljb24tcmVmcmVzaHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC04MHB4fS51aS1pY29uLXNodWZmbGV7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtODBweH0udWktaWNvbi10cmFuc2Zlci1lLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtODBweH0udWktaWNvbi10cmFuc2ZlcnRoaWNrLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtODBweH0udWktaWNvbi1mb2xkZXItY29sbGFwc2Vke2JhY2tncm91bmQtcG9zaXRpb246MCAtOTZweH0udWktaWNvbi1mb2xkZXItb3BlbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC05NnB4fS51aS1pY29uLWRvY3VtZW50e2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTk2cHh9LnVpLWljb24tZG9jdW1lbnQtYntiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC05NnB4fS51aS1pY29uLW5vdGV7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtOTZweH0udWktaWNvbi1tYWlsLWNsb3NlZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC05NnB4fS51aS1pY29uLW1haWwtb3BlbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC05NnB4fS51aS1pY29uLXN1aXRjYXNle2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC05NnB4fS51aS1pY29uLWNvbW1lbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTk2cHh9LnVpLWljb24tcGVyc29ue2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC05NnB4fS51aS1pY29uLXByaW50e2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC05NnB4fS51aS1pY29uLXRyYXNoe2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC05NnB4fS51aS1pY29uLWxvY2tlZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtOTZweH0udWktaWNvbi11bmxvY2tlZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtOTZweH0udWktaWNvbi1ib29rbWFya3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMjRweCAtOTZweH0udWktaWNvbi10YWd7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTk2cHh9LnVpLWljb24taG9tZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTExMnB4fS51aS1pY29uLWZsYWd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTEycHh9LnVpLWljb24tY2FsZW5kYXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTEycHh9LnVpLWljb24tY2FydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xMTJweH0udWktaWNvbi1wZW5jaWx7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTEycHh9LnVpLWljb24tY2xvY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTEycHh9LnVpLWljb24tZGlza3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xMTJweH0udWktaWNvbi1jYWxjdWxhdG9ye2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0xMTJweH0udWktaWNvbi16b29taW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTExMnB4fS51aS1pY29uLXpvb21vdXR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTExMnB4fS51aS1pY29uLXNlYXJjaHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtMTEycHh9LnVpLWljb24td3JlbmNoe2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC0xMTJweH0udWktaWNvbi1nZWFye2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0xMTJweH0udWktaWNvbi1oZWFydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtMTEycHh9LnVpLWljb24tc3RhcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMjRweCAtMTEycHh9LnVpLWljb24tbGlua3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMTEycHh9LnVpLWljb24tY2FuY2Vse2JhY2tncm91bmQtcG9zaXRpb246MCAtMTI4cHh9LnVpLWljb24tcGx1c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xMjhweH0udWktaWNvbi1wbHVzdGhpY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTI4cHh9LnVpLWljb24tbWludXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTI4cHh9LnVpLWljb24tbWludXN0aGlja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xMjhweH0udWktaWNvbi1jbG9zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xMjhweH0udWktaWNvbi1jbG9zZXRoaWNre2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTEyOHB4fS51aS1pY29uLWtleXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTI4cHh9LnVpLWljb24tbGlnaHRidWxie2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC0xMjhweH0udWktaWNvbi1zY2lzc29yc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTI4cHh9LnVpLWljb24tY2xpcGJvYXJke2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC0xMjhweH0udWktaWNvbi1jb3B5e2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC0xMjhweH0udWktaWNvbi1jb250YWN0e2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0xMjhweH0udWktaWNvbi1pbWFnZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtMTI4cHh9LnVpLWljb24tdmlkZW97YmFja2dyb3VuZC1wb3NpdGlvbjotMjI0cHggLTEyOHB4fS51aS1pY29uLXNjcmlwdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMTI4cHh9LnVpLWljb24tYWxlcnR7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNDRweH0udWktaWNvbi1pbmZve2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTE0NHB4fS51aS1pY29uLW5vdGljZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xNDRweH0udWktaWNvbi1oZWxwe2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE0NHB4fS51aS1pY29uLWNoZWNre2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTE0NHB4fS51aS1pY29uLWJ1bGxldHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xNDRweH0udWktaWNvbi1yYWRpby1vbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xNDRweH0udWktaWNvbi1yYWRpby1vZmZ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTE0NHB4fS51aS1pY29uLXBpbi13e2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC0xNDRweH0udWktaWNvbi1waW4tc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTQ0cHh9LnVpLWljb24tcGxheXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE2MHB4fS51aS1pY29uLXBhdXNle2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTE2MHB4fS51aS1pY29uLXNlZWstbmV4dHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xNjBweH0udWktaWNvbi1zZWVrLXByZXZ7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTYwcHh9LnVpLWljb24tc2Vlay1lbmR7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTYwcHh9LnVpLWljb24tc2Vlay1zdGFydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xNjBweH0udWktaWNvbi1zZWVrLWZpcnN0e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE2MHB4fS51aS1pY29uLXN0b3B7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTYwcHh9LnVpLWljb24tZWplY3R7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTE2MHB4fS51aS1pY29uLXZvbHVtZS1vZmZ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTE2MHB4fS51aS1pY29uLXZvbHVtZS1vbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTYwcHh9LnVpLWljb24tcG93ZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNzZweH0udWktaWNvbi1zaWduYWwtZGlhZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xNzZweH0udWktaWNvbi1zaWduYWx7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTc2cHh9LnVpLWljb24tYmF0dGVyeS0we2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE3NnB4fS51aS1pY29uLWJhdHRlcnktMXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xNzZweH0udWktaWNvbi1iYXR0ZXJ5LTJ7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTc2cHh9LnVpLWljb24tYmF0dGVyeS0ze2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTE3NnB4fS51aS1pY29uLWNpcmNsZS1wbHVze2JhY2tncm91bmQtcG9zaXRpb246MCAtMTkycHh9LnVpLWljb24tY2lyY2xlLW1pbnVze2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1jbG9zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtYXJyb3ctZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLWFycm93LXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1hcnJvdy13e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtYXJyb3ctbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLXpvb21pbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLXpvb21vdXR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1jaGVja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtMTkycHh9LnVpLWljb24tY2lyY2xlc21hbGwtcGx1c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTIwOHB4fS51aS1pY29uLWNpcmNsZXNtYWxsLW1pbnVze2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTIwOHB4fS51aS1pY29uLWNpcmNsZXNtYWxsLWNsb3Nle2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTIwOHB4fS51aS1pY29uLXNxdWFyZXNtYWxsLXBsdXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMjA4cHh9LnVpLWljb24tc3F1YXJlc21hbGwtbWludXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMjA4cHh9LnVpLWljb24tc3F1YXJlc21hbGwtY2xvc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMjA4cHh9LnVpLWljb24tZ3JpcC1kb3R0ZWQtdmVydGljYWx7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0yMjRweH0udWktaWNvbi1ncmlwLWRvdHRlZC1ob3Jpem9udGFse2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTIyNHB4fS51aS1pY29uLWdyaXAtc29saWQtdmVydGljYWx7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMjI0cHh9LnVpLWljb24tZ3JpcC1zb2xpZC1ob3Jpem9udGFse2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTIyNHB4fS51aS1pY29uLWdyaXBzbWFsbC1kaWFnb25hbC1zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0yMjRweH0udWktaWNvbi1ncmlwLWRpYWdvbmFsLXNle2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTIyNHB4fS51aS1jb3JuZXItYWxsLC51aS1jb3JuZXItdG9wLC51aS1jb3JuZXItbGVmdCwudWktY29ybmVyLXRse2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4fS51aS1jb3JuZXItYWxsLC51aS1jb3JuZXItdG9wLC51aS1jb3JuZXItcmlnaHQsLnVpLWNvcm5lci10cntib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHh9LnVpLWNvcm5lci1hbGwsLnVpLWNvcm5lci1ib3R0b20sLnVpLWNvcm5lci1sZWZ0LC51aS1jb3JuZXItYmx7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHh9LnVpLWNvcm5lci1hbGwsLnVpLWNvcm5lci1ib3R0b20sLnVpLWNvcm5lci1yaWdodCwudWktY29ybmVyLWJye2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweH0udWktd2lkZ2V0LW92ZXJsYXl7YmFja2dyb3VuZDojNjY2IHVybCgiaW1hZ2VzL3VpLWJnX2RpYWdvbmFscy10aGlja18yMF82NjY2NjZfNDB4NDAucG5nIikgNTAlIDUwJSByZXBlYXQ7b3BhY2l0eTouNTtmaWx0ZXI6QWxwaGEoT3BhY2l0eT01MCl9LnVpLXdpZGdldC1zaGFkb3d7bWFyZ2luOi01cHggMCAwIC01cHg7cGFkZGluZzo1cHg7YmFja2dyb3VuZDojMDAwIHVybCgiaW1hZ2VzL3VpLWJnX2ZsYXRfMTBfMDAwMDAwXzQweDEwMC5wbmciKSA1MCUgNTAlIHJlcGVhdC14O29wYWNpdHk6LjI7ZmlsdGVyOkFscGhhKE9wYWNpdHk9MjApO2JvcmRlci1yYWRpdXM6NXB4fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvanF1ZXJ5LXVpLnN0cnVjdHVyZS5taW4uY3NzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9qcXVlcnktdWkuc3RydWN0dXJlLm1pbi5jc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDE1NzhhNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvanF1ZXJ5LXVpLnN0cnVjdHVyZS5taW4uY3NzCkBAIC0wLDAgKzEsNSBAQAorLyohIGpRdWVyeSBVSSAtIHYxLjExLjQgLSAyMDE1LTAzLTE1CisqIGh0dHA6Ly9qcXVlcnl1aS5jb20KKyogQ29weXJpZ2h0IDIwMTUgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yczsgTGljZW5zZWQgTUlUICovCisKKy51aS1oZWxwZXItaGlkZGVue2Rpc3BsYXk6bm9uZX0udWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxle2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4fS51aS1oZWxwZXItcmVzZXR7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO291dGxpbmU6MDtsaW5lLWhlaWdodDoxLjM7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC1zaXplOjEwMCU7bGlzdC1zdHlsZTpub25lfS51aS1oZWxwZXItY2xlYXJmaXg6YmVmb3JlLC51aS1oZWxwZXItY2xlYXJmaXg6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OnRhYmxlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX0udWktaGVscGVyLWNsZWFyZml4OmFmdGVye2NsZWFyOmJvdGh9LnVpLWhlbHBlci1jbGVhcmZpeHttaW4taGVpZ2h0OjB9LnVpLWhlbHBlci16Zml4e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6MDtmaWx0ZXI6QWxwaGEoT3BhY2l0eT0wKX0udWktZnJvbnR7ei1pbmRleDoxMDB9LnVpLXN0YXRlLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0IWltcG9ydGFudH0udWktaWNvbntkaXNwbGF5OmJsb2NrO3RleHQtaW5kZW50Oi05OTk5OXB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9LnVpLXdpZGdldC1vdmVybGF5e3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS51aS1kYXRlcGlja2Vye3dpZHRoOjE3ZW07cGFkZGluZzouMmVtIC4yZW0gMDtkaXNwbGF5Om5vbmV9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItaGVhZGVye3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6LjJlbSAwfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYsLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MnB4O3dpZHRoOjEuOGVtO2hlaWdodDoxLjhlbX0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyLC51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQtaG92ZXJ7dG9wOjFweH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2e2xlZnQ6MnB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHR7cmlnaHQ6MnB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYtaG92ZXJ7bGVmdDoxcHh9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dC1ob3ZlcntyaWdodDoxcHh9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldiBzcGFuLC51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQgc3BhbntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi04cHg7dG9wOjUwJTttYXJnaW4tdG9wOi04cHh9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItdGl0bGV7bWFyZ2luOjAgMi4zZW07bGluZS1oZWlnaHQ6MS44ZW07dGV4dC1hbGlnbjpjZW50ZXJ9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItdGl0bGUgc2VsZWN0e2ZvbnQtc2l6ZToxZW07bWFyZ2luOjFweCAwfS51aS1kYXRlcGlja2VyIHNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLC51aS1kYXRlcGlja2VyIHNlbGVjdC51aS1kYXRlcGlja2VyLXllYXJ7d2lkdGg6NDUlfS51aS1kYXRlcGlja2VyIHRhYmxle3dpZHRoOjEwMCU7Zm9udC1zaXplOi45ZW07Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO21hcmdpbjowIDAgLjRlbX0udWktZGF0ZXBpY2tlciB0aHtwYWRkaW5nOi43ZW0gLjNlbTt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDpib2xkO2JvcmRlcjowfS51aS1kYXRlcGlja2VyIHRke2JvcmRlcjowO3BhZGRpbmc6MXB4fS51aS1kYXRlcGlja2VyIHRkIHNwYW4sLnVpLWRhdGVwaWNrZXIgdGQgYXtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6LjJlbTt0ZXh0LWFsaWduOnJpZ2h0O3RleHQtZGVjb3JhdGlvbjpub25lfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmV7YmFja2dyb3VuZC1pbWFnZTpub25lO21hcmdpbjouN2VtIDAgMCAwO3BhZGRpbmc6MCAuMmVtO2JvcmRlci1sZWZ0OjA7Ym9yZGVyLXJpZ2h0OjA7Ym9yZGVyLWJvdHRvbTowfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9ue2Zsb2F0OnJpZ2h0O21hcmdpbjouNWVtIC4yZW0gLjRlbTtjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOi4yZW0gLjZlbSAuM2VtIC42ZW07d2lkdGg6YXV0bztvdmVyZmxvdzp2aXNpYmxlfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9uLnVpLWRhdGVwaWNrZXItY3VycmVudHtmbG9hdDpsZWZ0fS51aS1kYXRlcGlja2VyLnVpLWRhdGVwaWNrZXItbXVsdGl7d2lkdGg6YXV0b30udWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cHtmbG9hdDpsZWZ0fS51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3VwIHRhYmxle3dpZHRoOjk1JTttYXJnaW46MCBhdXRvIC40ZW19LnVpLWRhdGVwaWNrZXItbXVsdGktMiAudWktZGF0ZXBpY2tlci1ncm91cHt3aWR0aDo1MCV9LnVpLWRhdGVwaWNrZXItbXVsdGktMyAudWktZGF0ZXBpY2tlci1ncm91cHt3aWR0aDozMy4zJX0udWktZGF0ZXBpY2tlci1tdWx0aS00IC51aS1kYXRlcGlja2VyLWdyb3Vwe3dpZHRoOjI1JX0udWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cC1sYXN0IC51aS1kYXRlcGlja2VyLWhlYWRlciwudWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cC1taWRkbGUgLnVpLWRhdGVwaWNrZXItaGVhZGVye2JvcmRlci1sZWZ0LXdpZHRoOjB9LnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZXtjbGVhcjpsZWZ0fS51aS1kYXRlcGlja2VyLXJvdy1icmVha3tjbGVhcjpib3RoO3dpZHRoOjEwMCU7Zm9udC1zaXplOjB9LnVpLWRhdGVwaWNrZXItcnRse2RpcmVjdGlvbjpydGx9LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLXByZXZ7cmlnaHQ6MnB4O2xlZnQ6YXV0b30udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItbmV4dHtsZWZ0OjJweDtyaWdodDphdXRvfS51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1wcmV2OmhvdmVye3JpZ2h0OjFweDtsZWZ0OmF1dG99LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLW5leHQ6aG92ZXJ7bGVmdDoxcHg7cmlnaHQ6YXV0b30udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZXtjbGVhcjpyaWdodH0udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b257ZmxvYXQ6bGVmdH0udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24udWktZGF0ZXBpY2tlci1jdXJyZW50LC51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1ncm91cHtmbG9hdDpyaWdodH0udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbGFzdCAudWktZGF0ZXBpY2tlci1oZWFkZXIsLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwLW1pZGRsZSAudWktZGF0ZXBpY2tlci1oZWFkZXJ7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWxlZnQtd2lkdGg6MXB4fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvanF1ZXJ5LXVpLnRoZW1lLm1pbi5jc3MgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2pxdWVyeS11aS50aGVtZS5taW4uY3NzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM0NTQzMTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2pxdWVyeS11aS50aGVtZS5taW4uY3NzCkBAIC0wLDAgKzEsNSBAQAorLyohIGpRdWVyeSBVSSAtIHYxLjExLjQgLSAyMDE1LTAzLTE3CisqIGh0dHA6Ly9qcXVlcnl1aS5jb20KKyogQ29weXJpZ2h0IDIwMTUgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yczsgTGljZW5zZWQgTUlUICovCisKKy51aS13aWRnZXR7Zm9udC1mYW1pbHk6VHJlYnVjaGV0IE1TLFRhaG9tYSxWZXJkYW5hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEuMWVtfS51aS13aWRnZXQgLnVpLXdpZGdldHtmb250LXNpemU6MWVtfS51aS13aWRnZXQgaW5wdXQsLnVpLXdpZGdldCBzZWxlY3QsLnVpLXdpZGdldCB0ZXh0YXJlYSwudWktd2lkZ2V0IGJ1dHRvbntmb250LWZhbWlseTpUcmVidWNoZXQgTVMsVGFob21hLFZlcmRhbmEsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MWVtfS51aS13aWRnZXQtY29udGVudHtib3JkZXI6MXB4IHNvbGlkICNkZGQ7YmFja2dyb3VuZDojZWVlIHVybCgiaW1hZ2VzL3VpLWJnX2hpZ2hsaWdodC1zb2Z0XzEwMF9lZWVlZWVfMXgxMDAucG5nIikgNTAlIHRvcCByZXBlYXQteDtjb2xvcjojMzMzfS51aS13aWRnZXQtY29udGVudCBhe2NvbG9yOiMzMzN9LnVpLXdpZGdldC1oZWFkZXJ7Ym9yZGVyOjFweCBzb2xpZCAjZTc4ZjA4O2JhY2tncm91bmQ6I2Y2YTgyOCB1cmwoImltYWdlcy91aS1iZ19nbG9zcy13YXZlXzM1X2Y2YTgyOF81MDB4MTAwLnBuZyIpIDUwJSA1MCUgcmVwZWF0LXg7Y29sb3I6I2ZmZjtmb250LXdlaWdodDpib2xkfS51aS13aWRnZXQtaGVhZGVyIGF7Y29sb3I6I2ZmZn0udWktc3RhdGUtZGVmYXVsdCwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWRlZmF1bHQsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWRlZmF1bHR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JhY2tncm91bmQ6I2Y2ZjZmNiB1cmwoImltYWdlcy91aS1iZ19nbGFzc18xMDBfZjZmNmY2XzF4NDAwLnBuZyIpIDUwJSA1MCUgcmVwZWF0LXg7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojMWM5NGM0fS51aS1zdGF0ZS1kZWZhdWx0IGEsLnVpLXN0YXRlLWRlZmF1bHQgYTpsaW5rLC51aS1zdGF0ZS1kZWZhdWx0IGE6dmlzaXRlZHtjb2xvcjojMWM5NGM0O3RleHQtZGVjb3JhdGlvbjpub25lfS51aS1zdGF0ZS1ob3ZlciwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhvdmVyLC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1ob3ZlciwudWktc3RhdGUtZm9jdXMsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1mb2N1cywudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZm9jdXN7Ym9yZGVyOjFweCBzb2xpZCAjZmJjYjA5O2JhY2tncm91bmQ6I2ZkZjVjZSB1cmwoImltYWdlcy91aS1iZ19nbGFzc18xMDBfZmRmNWNlXzF4NDAwLnBuZyIpIDUwJSA1MCUgcmVwZWF0LXg7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojYzc3NDA1fS51aS1zdGF0ZS1ob3ZlciBhLC51aS1zdGF0ZS1ob3ZlciBhOmhvdmVyLC51aS1zdGF0ZS1ob3ZlciBhOmxpbmssLnVpLXN0YXRlLWhvdmVyIGE6dmlzaXRlZCwudWktc3RhdGUtZm9jdXMgYSwudWktc3RhdGUtZm9jdXMgYTpob3ZlciwudWktc3RhdGUtZm9jdXMgYTpsaW5rLC51aS1zdGF0ZS1mb2N1cyBhOnZpc2l0ZWR7Y29sb3I6I2M3NzQwNTt0ZXh0LWRlY29yYXRpb246bm9uZX0udWktc3RhdGUtYWN0aXZlLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtYWN0aXZlLC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1hY3RpdmV7Ym9yZGVyOjFweCBzb2xpZCAjZmJkODUwO2JhY2tncm91bmQ6I2ZmZiB1cmwoImltYWdlcy91aS1iZ19nbGFzc182NV9mZmZmZmZfMXg0MDAucG5nIikgNTAlIDUwJSByZXBlYXQteDtmb250LXdlaWdodDpib2xkO2NvbG9yOiNlYjhmMDB9LnVpLXN0YXRlLWFjdGl2ZSBhLC51aS1zdGF0ZS1hY3RpdmUgYTpsaW5rLC51aS1zdGF0ZS1hY3RpdmUgYTp2aXNpdGVke2NvbG9yOiNlYjhmMDA7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVpLXN0YXRlLWhpZ2hsaWdodCwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhpZ2hsaWdodCwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaGlnaGxpZ2h0e2JvcmRlcjoxcHggc29saWQgI2ZlZDIyZjtiYWNrZ3JvdW5kOiNmZmU0NWMgdXJsKCJpbWFnZXMvdWktYmdfaGlnaGxpZ2h0LXNvZnRfNzVfZmZlNDVjXzF4MTAwLnBuZyIpIDUwJSB0b3AgcmVwZWF0LXg7Y29sb3I6IzM2MzYzNn0udWktc3RhdGUtaGlnaGxpZ2h0IGEsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1oaWdobGlnaHQgYSwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaGlnaGxpZ2h0IGF7Y29sb3I6IzM2MzYzNn0udWktc3RhdGUtZXJyb3IsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvciwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3J7Ym9yZGVyOjFweCBzb2xpZCAjY2QwYTBhO2JhY2tncm91bmQ6I2I4MTkwMCB1cmwoImltYWdlcy91aS1iZ19kaWFnb25hbHMtdGhpY2tfMThfYjgxOTAwXzQweDQwLnBuZyIpIDUwJSA1MCUgcmVwZWF0O2NvbG9yOiNmZmZ9LnVpLXN0YXRlLWVycm9yIGEsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvciBhLC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvciBhe2NvbG9yOiNmZmZ9LnVpLXN0YXRlLWVycm9yLXRleHQsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvci10ZXh0LC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvci10ZXh0e2NvbG9yOiNmZmZ9LnVpLXByaW9yaXR5LXByaW1hcnksLnVpLXdpZGdldC1jb250ZW50IC51aS1wcmlvcml0eS1wcmltYXJ5LC51aS13aWRnZXQtaGVhZGVyIC51aS1wcmlvcml0eS1wcmltYXJ5e2ZvbnQtd2VpZ2h0OmJvbGR9LnVpLXByaW9yaXR5LXNlY29uZGFyeSwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXByaW9yaXR5LXNlY29uZGFyeSwudWktd2lkZ2V0LWhlYWRlciAudWktcHJpb3JpdHktc2Vjb25kYXJ5e29wYWNpdHk6Ljc7ZmlsdGVyOkFscGhhKE9wYWNpdHk9NzApO2ZvbnQtd2VpZ2h0Om5vcm1hbH0udWktc3RhdGUtZGlzYWJsZWQsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1kaXNhYmxlZCwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZGlzYWJsZWR7b3BhY2l0eTouMzU7ZmlsdGVyOkFscGhhKE9wYWNpdHk9MzUpO2JhY2tncm91bmQtaW1hZ2U6bm9uZX0udWktc3RhdGUtZGlzYWJsZWQgLnVpLWljb257ZmlsdGVyOkFscGhhKE9wYWNpdHk9MzUpfS51aS1pY29ue3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHh9LnVpLWljb24sLnVpLXdpZGdldC1jb250ZW50IC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKCJpbWFnZXMvdWktaWNvbnNfMjIyMjIyXzI1NngyNDAucG5nIil9LnVpLXdpZGdldC1oZWFkZXIgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoImltYWdlcy91aS1pY29uc19mZmZmZmZfMjU2eDI0MC5wbmciKX0udWktc3RhdGUtZGVmYXVsdCAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1hZ2VzL3VpLWljb25zX2VmOGMwOF8yNTZ4MjQwLnBuZyIpfS51aS1zdGF0ZS1ob3ZlciAudWktaWNvbiwudWktc3RhdGUtZm9jdXMgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoImltYWdlcy91aS1pY29uc19lZjhjMDhfMjU2eDI0MC5wbmciKX0udWktc3RhdGUtYWN0aXZlIC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKCJpbWFnZXMvdWktaWNvbnNfZWY4YzA4XzI1NngyNDAucG5nIil9LnVpLXN0YXRlLWhpZ2hsaWdodCAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1hZ2VzL3VpLWljb25zXzIyOGVmMV8yNTZ4MjQwLnBuZyIpfS51aS1zdGF0ZS1lcnJvciAudWktaWNvbiwudWktc3RhdGUtZXJyb3ItdGV4dCAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1hZ2VzL3VpLWljb25zX2ZmZDI3YV8yNTZ4MjQwLnBuZyIpfS51aS1pY29uLWJsYW5re2JhY2tncm91bmQtcG9zaXRpb246MTZweCAxNnB4fS51aS1pY29uLWNhcmF0LTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH0udWktaWNvbi1jYXJhdC0xLW5le2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggMH0udWktaWNvbi1jYXJhdC0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAwfS51aS1pY29uLWNhcmF0LTEtc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAwfS51aS1pY29uLWNhcmF0LTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IDB9LnVpLWljb24tY2FyYXQtMS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IDB9LnVpLWljb24tY2FyYXQtMS13e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggMH0udWktaWNvbi1jYXJhdC0xLW53e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IDB9LnVpLWljb24tY2FyYXQtMi1uLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggMH0udWktaWNvbi1jYXJhdC0yLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAwfS51aS1pY29uLXRyaWFuZ2xlLTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS1uZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLXN3e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS13e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0yLW4tc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0yLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTZweH0udWktaWNvbi1hcnJvdy0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjowIC0zMnB4fS51aS1pY29uLWFycm93LTEtbmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMzJweH0udWktaWNvbi1hcnJvdy0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMzJweH0udWktaWNvbi1hcnJvdy0xLXNle2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTMycHh9LnVpLWljb24tYXJyb3ctMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTMycHh9LnVpLWljb24tYXJyb3ctMS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0zMnB4fS51aS1pY29uLWFycm93LTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0zMnB4fS51aS1pY29uLWFycm93LTEtbnd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTMycHh9LnVpLWljb24tYXJyb3ctMi1uLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTMycHh9LnVpLWljb24tYXJyb3ctMi1uZS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMzJweH0udWktaWNvbi1hcnJvdy0yLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtMzJweH0udWktaWNvbi1hcnJvdy0yLXNlLW53e2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC0zMnB4fS51aS1pY29uLWFycm93c3RvcC0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTMycHh9LnVpLWljb24tYXJyb3dzdG9wLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtMzJweH0udWktaWNvbi1hcnJvd3N0b3AtMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTIyNHB4IC0zMnB4fS51aS1pY29uLWFycm93c3RvcC0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTMycHh9LnVpLWljb24tYXJyb3d0aGljay0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjowIC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1uZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1le2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLXNle2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTItbi1ze2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMi1uZS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTItZS13e2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMi1zZS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS1le2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMjRweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTQ4cHh9LnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjowIC02NHB4fS51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1ue2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTY0cHh9LnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJuLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJuLTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJuLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJuLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtNjRweH0udWktaWNvbi1hcnJvd3JlZnJlc2gtMS13e2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC02NHB4fS51aS1pY29uLWFycm93cmVmcmVzaC0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTY0cHh9LnVpLWljb24tYXJyb3dyZWZyZXNoLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtNjRweH0udWktaWNvbi1hcnJvd3JlZnJlc2gtMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC02NHB4fS51aS1pY29uLWFycm93LTR7YmFja2dyb3VuZC1wb3NpdGlvbjowIC04MHB4fS51aS1pY29uLWFycm93LTQtZGlhZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC04MHB4fS51aS1pY29uLWV4dGxpbmt7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtODBweH0udWktaWNvbi1uZXd3aW57YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtODBweH0udWktaWNvbi1yZWZyZXNoe2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTgwcHh9LnVpLWljb24tc2h1ZmZsZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC04MHB4fS51aS1pY29uLXRyYW5zZmVyLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC04MHB4fS51aS1pY29uLXRyYW5zZmVydGhpY2stZS13e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC04MHB4fS51aS1pY29uLWZvbGRlci1jb2xsYXBzZWR7YmFja2dyb3VuZC1wb3NpdGlvbjowIC05NnB4fS51aS1pY29uLWZvbGRlci1vcGVue2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTk2cHh9LnVpLWljb24tZG9jdW1lbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtOTZweH0udWktaWNvbi1kb2N1bWVudC1ie2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTk2cHh9LnVpLWljb24tbm90ZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC05NnB4fS51aS1pY29uLW1haWwtY2xvc2Vke2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTk2cHh9LnVpLWljb24tbWFpbC1vcGVue2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTk2cHh9LnVpLWljb24tc3VpdGNhc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTk2cHh9LnVpLWljb24tY29tbWVudHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtOTZweH0udWktaWNvbi1wZXJzb257YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTk2cHh9LnVpLWljb24tcHJpbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTk2cHh9LnVpLWljb24tdHJhc2h7YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTk2cHh9LnVpLWljb24tbG9ja2Vke2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC05NnB4fS51aS1pY29uLXVubG9ja2Vke2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC05NnB4fS51aS1pY29uLWJvb2ttYXJre2JhY2tncm91bmQtcG9zaXRpb246LTIyNHB4IC05NnB4fS51aS1pY29uLXRhZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtOTZweH0udWktaWNvbi1ob21le2JhY2tncm91bmQtcG9zaXRpb246MCAtMTEycHh9LnVpLWljb24tZmxhZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xMTJweH0udWktaWNvbi1jYWxlbmRhcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xMTJweH0udWktaWNvbi1jYXJ0e2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTExMnB4fS51aS1pY29uLXBlbmNpbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xMTJweH0udWktaWNvbi1jbG9ja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xMTJweH0udWktaWNvbi1kaXNre2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTExMnB4fS51aS1pY29uLWNhbGN1bGF0b3J7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTExMnB4fS51aS1pY29uLXpvb21pbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMTEycHh9LnVpLWljb24tem9vbW91dHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTEycHh9LnVpLWljb24tc2VhcmNoe2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC0xMTJweH0udWktaWNvbi13cmVuY2h7YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTExMnB4fS51aS1pY29uLWdlYXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTExMnB4fS51aS1pY29uLWhlYXJ0e2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC0xMTJweH0udWktaWNvbi1zdGFye2JhY2tncm91bmQtcG9zaXRpb246LTIyNHB4IC0xMTJweH0udWktaWNvbi1saW5re2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC0xMTJweH0udWktaWNvbi1jYW5jZWx7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xMjhweH0udWktaWNvbi1wbHVze2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTEyOHB4fS51aS1pY29uLXBsdXN0aGlja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xMjhweH0udWktaWNvbi1taW51c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xMjhweH0udWktaWNvbi1taW51c3RoaWNre2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTEyOHB4fS51aS1pY29uLWNsb3Nle2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTEyOHB4fS51aS1pY29uLWNsb3NldGhpY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTI4cHh9LnVpLWljb24ta2V5e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0xMjhweH0udWktaWNvbi1saWdodGJ1bGJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTEyOHB4fS51aS1pY29uLXNjaXNzb3Jze2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xMjhweH0udWktaWNvbi1jbGlwYm9hcmR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTEyOHB4fS51aS1pY29uLWNvcHl7YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTEyOHB4fS51aS1pY29uLWNvbnRhY3R7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTEyOHB4fS51aS1pY29uLWltYWdle2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC0xMjhweH0udWktaWNvbi12aWRlb3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMjRweCAtMTI4cHh9LnVpLWljb24tc2NyaXB0e2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC0xMjhweH0udWktaWNvbi1hbGVydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE0NHB4fS51aS1pY29uLWluZm97YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTQ0cHh9LnVpLWljb24tbm90aWNle2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTE0NHB4fS51aS1pY29uLWhlbHB7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTQ0cHh9LnVpLWljb24tY2hlY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTQ0cHh9LnVpLWljb24tYnVsbGV0e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE0NHB4fS51aS1pY29uLXJhZGlvLW9ue2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTE0NHB4fS51aS1pY29uLXJhZGlvLW9mZntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTQ0cHh9LnVpLWljb24tcGluLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTE0NHB4fS51aS1pY29uLXBpbi1ze2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xNDRweH0udWktaWNvbi1wbGF5e2JhY2tncm91bmQtcG9zaXRpb246MCAtMTYwcHh9LnVpLWljb24tcGF1c2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTYwcHh9LnVpLWljb24tc2Vlay1uZXh0e2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTE2MHB4fS51aS1pY29uLXNlZWstcHJldntiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xNjBweH0udWktaWNvbi1zZWVrLWVuZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xNjBweH0udWktaWNvbi1zZWVrLXN0YXJ0e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE2MHB4fS51aS1pY29uLXNlZWstZmlyc3R7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTYwcHh9LnVpLWljb24tc3RvcHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xNjBweH0udWktaWNvbi1lamVjdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTYwcHh9LnVpLWljb24tdm9sdW1lLW9mZntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMTYwcHh9LnVpLWljb24tdm9sdW1lLW9ue2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xNjBweH0udWktaWNvbi1wb3dlcntiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE3NnB4fS51aS1pY29uLXNpZ25hbC1kaWFne2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTE3NnB4fS51aS1pY29uLXNpZ25hbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xNzZweH0udWktaWNvbi1iYXR0ZXJ5LTB7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTc2cHh9LnVpLWljb24tYmF0dGVyeS0xe2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTE3NnB4fS51aS1pY29uLWJhdHRlcnktMntiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xNzZweH0udWktaWNvbi1iYXR0ZXJ5LTN7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTc2cHh9LnVpLWljb24tY2lyY2xlLXBsdXN7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xOTJweH0udWktaWNvbi1jaXJjbGUtbWludXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLWNsb3Nle2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1le2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1ze2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS10cmlhbmdsZS13e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1ue2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1hcnJvdy1le2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtYXJyb3ctc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLWFycm93LXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1hcnJvdy1ue2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtem9vbWlue2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtem9vbW91dHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLWNoZWNre2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGVzbWFsbC1wbHVze2JhY2tncm91bmQtcG9zaXRpb246MCAtMjA4cHh9LnVpLWljb24tY2lyY2xlc21hbGwtbWludXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMjA4cHh9LnVpLWljb24tY2lyY2xlc21hbGwtY2xvc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMjA4cHh9LnVpLWljb24tc3F1YXJlc21hbGwtcGx1c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0yMDhweH0udWktaWNvbi1zcXVhcmVzbWFsbC1taW51c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0yMDhweH0udWktaWNvbi1zcXVhcmVzbWFsbC1jbG9zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0yMDhweH0udWktaWNvbi1ncmlwLWRvdHRlZC12ZXJ0aWNhbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTIyNHB4fS51aS1pY29uLWdyaXAtZG90dGVkLWhvcml6b250YWx7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMjI0cHh9LnVpLWljb24tZ3JpcC1zb2xpZC12ZXJ0aWNhbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0yMjRweH0udWktaWNvbi1ncmlwLXNvbGlkLWhvcml6b250YWx7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMjI0cHh9LnVpLWljb24tZ3JpcHNtYWxsLWRpYWdvbmFsLXNle2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTIyNHB4fS51aS1pY29uLWdyaXAtZGlhZ29uYWwtc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMjI0cHh9LnVpLWNvcm5lci1hbGwsLnVpLWNvcm5lci10b3AsLnVpLWNvcm5lci1sZWZ0LC51aS1jb3JuZXItdGx7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHh9LnVpLWNvcm5lci1hbGwsLnVpLWNvcm5lci10b3AsLnVpLWNvcm5lci1yaWdodCwudWktY29ybmVyLXRye2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweH0udWktY29ybmVyLWFsbCwudWktY29ybmVyLWJvdHRvbSwudWktY29ybmVyLWxlZnQsLnVpLWNvcm5lci1ibHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweH0udWktY29ybmVyLWFsbCwudWktY29ybmVyLWJvdHRvbSwudWktY29ybmVyLXJpZ2h0LC51aS1jb3JuZXItYnJ7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4fS51aS13aWRnZXQtb3ZlcmxheXtiYWNrZ3JvdW5kOiM2NjYgdXJsKCJpbWFnZXMvdWktYmdfZGlhZ29uYWxzLXRoaWNrXzIwXzY2NjY2Nl80MHg0MC5wbmciKSA1MCUgNTAlIHJlcGVhdDtvcGFjaXR5Oi41O2ZpbHRlcjpBbHBoYShPcGFjaXR5PTUwKX0udWktd2lkZ2V0LXNoYWRvd3ttYXJnaW46LTVweCAwIDAgLTVweDtwYWRkaW5nOjVweDtiYWNrZ3JvdW5kOiMwMDAgdXJsKCJpbWFnZXMvdWktYmdfZmxhdF8xMF8wMDAwMDBfNDB4MTAwLnBuZyIpIDUwJSA1MCUgcmVwZWF0LXg7b3BhY2l0eTouMjtmaWx0ZXI6QWxwaGEoT3BhY2l0eT0yMCk7Ym9yZGVyLXJhZGl1czo1cHh9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9qcXVlcnkudHJlZXRhYmxlLmNzcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvanF1ZXJ5LnRyZWV0YWJsZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU5NWJmZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvanF1ZXJ5LnRyZWV0YWJsZS5jc3MKQEAgLTAsMCArMSwyOCBAQAordGFibGUudHJlZXRhYmxlIHNwYW4uaW5kZW50ZXIgeworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIG1hcmdpbjogMDsKKyAgcGFkZGluZzogMDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7CisKKyAgLyogRGlzYWJsZSB0ZXh0IHNlbGVjdGlvbiBvZiBub2RlcyAoZm9yIGJldHRlciBEJkQgVVgpICovCisgIHVzZXItc2VsZWN0OiBub25lOworICAta2h0bWwtdXNlci1zZWxlY3Q6IG5vbmU7CisgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CisgIC1vLXVzZXItc2VsZWN0OiBub25lOworICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOworCisgIC8qIEZvcmNlIGNvbnRlbnQtYm94IGJveCBtb2RlbCBmb3IgaW5kZW50ZXIgKEJvb3RzdHJhcCBjb21wYXRpYmlsaXR5KSAqLworICAtd2Via2l0LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OworICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OworICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKKworICB3aWR0aDogMTlweDsKK30KKwordGFibGUudHJlZXRhYmxlIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyOworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgd2lkdGg6IDE5cHg7Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2pxdWVyeS50cmVldGFibGUudGhlbWUuZGVmYXVsdC5jc3MgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2pxdWVyeS50cmVldGFibGUudGhlbWUuZGVmYXVsdC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgyODliYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvanF1ZXJ5LnRyZWV0YWJsZS50aGVtZS5kZWZhdWx0LmNzcwpAQCAtMCwwICsxLDY0IEBACit0YWJsZS50cmVldGFibGUgeworICBib3JkZXI6IDFweCBzb2xpZCAjODg4OworICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOworICBmb250LXNpemU6IC44ZW07CisgIGxpbmUtaGVpZ2h0OiAxOworICBtYXJnaW46IC42ZW0gMCAxLjhlbSAwOworICB3aWR0aDogMTAwJTsKK30KKwordGFibGUudHJlZXRhYmxlIGNhcHRpb24geworICBmb250LXNpemU6IC45ZW07CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICBtYXJnaW4tYm90dG9tOiAuMmVtOworfQorCit0YWJsZS50cmVldGFibGUgdGJvZHkgdHIgdGQgeworICBjdXJzb3I6IGRlZmF1bHQ7CisgIHBhZGRpbmc6IC4zZW0gMWVtOworfQorCit0YWJsZS50cmVldGFibGUgc3BhbiB7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBsZWZ0OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBwYWRkaW5nOiAuMmVtIDAgLjJlbSAxLjVlbTsKK30KKwordGFibGUudHJlZXRhYmxlIHNwYW4uZmlsZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVFBQUFDMStqZnFBQUFBQkdkQlRVRUFBSy9JTndXSzZRQUFBQmwwUlZoMFUyOW1kSGRoY21VQVFXUnZZbVVnU1cxaFoyVlNaV0ZrZVhISlpUd0FBQURvU1VSQlZCZ1pCY0V4YmxOQkdBYkEyY2VlZ1RSQnVJS09naWloU1pOVGNDNUxVSEFpaE5KUjBrR0tDRGNZSlk2RDMvNzdNZE9pblR2ekFnQ3c4eXNUaEl2bi9Wb2pJeU1qSXlQUCtiUzFzVVFJVjJzOTVwQkREdm1iUC9tZGtmdDgzdHBZZ3VacTVKaC9PZWFZaCt5enk4aFRIdk5sYXhOTmN6bStsYTlPVGxhcjFVZEEvK0MyQTR0clJDbkQzalM4QkIxb2JxMkdrNkdVNlFiUUFTNEJVYVlTUUFmNGJoaEtLVEZkQXpyQU93QXhFVUFIK0tFTTAxU1kzZ002d0JzRUFRQjBnSittYVpvQzNnSTZpUFlhQUlCSnNpUm1IVTBBQUxPZUZDM2FLMmNXQUFDVVhlNytBd08wbGM5ZVRIWVRBQUFBQUVsRlRrU3VRbUNDKTsKK30KKwordGFibGUudHJlZXRhYmxlIHNwYW4uZm9sZGVyIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFCR2RCVFVFQUFLL0lOd1dLNlFBQUFCbDBSVmgwVTI5bWRIZGhjbVVBUVdSdlltVWdTVzFoWjJWU1pXRmtlWEhKWlR3QUFBR3JTVVJCVkRqTHhaTzdpaFJCRklhLzZ1MFpXN0dIQlVWMFVRUVRaemQzUWRoTVF4T2Z3TVJYRUFOQk1OUVgwTXpBekZBd0V6SHdBUmJORkRkd0VkMzFNajNYN2E2dU9yOUJ0ek5qWWpLQko2bmljUDd2M0txY0pGYXhoQlZ0WlVBSzhPSGxsZDJzdDdYbDNESlBWT05QK3pFVVY0SHFMNVVEWUhyNXh2dVFBamdsL1FzN1R6dk9PVkFqeGpsQytlUFN3ZTZEZmJWZWdMVnVUNHIxNGVUcjZ6dkE4eFNBb0JMeng2cHZqNGwrRFpJZXp1VmtHOWZZMkg3WVJRSU1aSUJ3eWNtekgxL3MzRjhBYXBmSVBORjNrUWs3K2t3OVBXQnkrSVpPZGc1VWczbWtBQVR5L3QwdXNvdnpHZUNVV1RqQ3owQitTajBla2ZkdmtaM2FiQnYrVTRHYUN0SjFpRW02QU5RSjZmRXpyRy9lbmdjS3cvd1hRdkVLeFNFS1F4UkdLRTdJenQrRFNpd0JKTVVTbTcxcmd1TVloUUtyQnlnT0lSU3RmNFRpRkZSQnZiUkdLaVFMV1AyOXlSU0hLQlR0ZmRCbUhzMEJVcGd2dGdGNHlSRlIrTlVLaTBYWmNZakNlQ0cyc21rekxBSGtiUkJtUDAvVWsyNk81WW5VQWN0QnAxR3NBSStTNW5SSkpKYWw1SzFhQU1ycTBkNlRtOXVJNnpqeWY3NWRBZTZ0eC9Tc1dlRC8vbzIvQWI2SUgzL2gyNXBPQUFBQUFFbEZUa1N1UW1DQyk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5jb2xsYXBzZWQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNEQUFENS93QUFnT2tBQUhVd0FBRHFZQUFBT3BnQUFCZHZrbC9GUmdBQUFIbEpSRUZVZU5yY1Uxc05nREFRNndnbWNBTTJNSUNHR2xnMWdKbk56V1FjdndRR3kxajRvVWwvN3RIMG1wd3pNN1NnUXlPK0VaQVVXaDJNa2t6U1doSnd1UkFsSFlzSndFd3l2czFnQUJEdXpxb0pjVHc1cXhhSUpOMGJnUVJnSWpubG1uMWhlU081UEU2WTJZWGUrNUNyNStoKytnczEyQWNBUzZGUys3WU9zajRBQUFBQVNVVk9SSzVDWUlJPSk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5leHBhbmRlZCBzcGFuLmluZGVudGVyIGEgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQUhGSlJFRlVlTnBpL1AvL1B3TWxnSW1CUXNBNDRDNmd2aGZhMjl2M016QXdPT0RSYzZDeXN0SVJieGkwdDdmakRKakt5a3BHWXJ3d2kxaHhuTEhRM3Q3K2pJR0JRUkpKNkhsbFphVVVLWUVZUllCUE9CMGdCU2hLd0tHQS8vLy80OFZ0YlczLzhjbFRuQklIM2dDS2t6SmdBR3ZCWDBkRG0wc0NBQUFBQUVsRlRrU3VRbUNDKTsKK30KKworCisKK3RhYmxlLnRyZWV0YWJsZSB0ci5jb2xsYXBzZWQuc2VsZWN0ZWQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNEQUFENS93QUFnT2tBQUhVd0FBRHFZQUFBT3BnQUFCZHZrbC9GUmdBQUFGcEpSRUZVZU5waS9QLy9Qd01sZ0hIQURXRDQvLzgvTnR5QVF4d0Q0NUtBQVFkS0Rmai8vLy8vL2ZnTUlzWUFaSU13MURLUkVGd09EQXdNLzRrTlJLcTY0QUFEQTRNakZET1E2Z0t5WTRIb2RNQTQ5UE1DeFFZQUJnQVZZSHNqeVoxeDdRQUFBQUJKUlU1RXJrSmdnZz09KTsKK30KKwordGFibGUudHJlZXRhYmxlIHRyLmV4cGFuZGVkLnNlbGVjdGVkIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBS1QybERRMUJRYUc5MGIzTm9iM0FnU1VORElIQnliMlpwYkdVQUFIamFuVk5uVkZQcEZqMzMzdlJDUzRpQWxFdHZVaFVJSUZKQ2k0QVVrU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFNcVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQmVOTUxDQURBVFp2QU1CeUgvdy9xUXBsY0FZQ0VBY0Iwa1RoTENJQVVBRUI2amtLbUFFQkdBWUNkbUNaVEFLQUVBR0RMWTJMakFGQXRBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzQU1ET0VBdXlBQWdNQURCUmlJVXBBQVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFBRDUvd0FBZ09rQUFIVXdBQURxWUFBQU9wZ0FBQmR2a2wvRlJnQUFBRnRKUkVGVWVOcGkvUC8vUHdNbGdJbUJRc0E0NEM2Z2lRRU5EQXdNLy9IZ0JtTENBRi9BTUJMakJVZWl4Zi8vLzQ4TDcvK1BDdlpqVTRmUEFBYzBBeHl3cWNNWEN3ZWdHSjFOY2tMNmp4NXdwS1lEeHFHWEVra0NnQUVBbXJxQkllamRnbmdBQUFBQVNVVk9SSzVDWUlJPSk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5hY2NlcHQgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTNiY2U0OworICBjb2xvcjogI2ZmZgorfQorCit0YWJsZS50cmVldGFibGUgdHIuY29sbGFwc2VkLmFjY2VwdCB0ZCBzcGFuLmluZGVudGVyIGEgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS94LXBuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBS1QybERRMUJRYUc5MGIzTm9iM0FnU1VORElIQnliMlpwYkdVQUFIamFuVk5uVkZQcEZqMzMzdlJDUzRpQWxFdHZVaFVJSUZKQ2k0QVVrU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFNcVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQmVOTUxDQURBVFp2QU1CeUgvdy9xUXBsY0FZQ0VBY0Iwa1RoTENJQVVBRUI2amtLbUFFQkdBWUNkbUNaVEFLQUVBR0RMWTJMakFGQXRBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzQU1ET0VBdXlBQWdNQURCUmlJVXBBQVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFBRDUvd0FBZ09rQUFIVXdBQURxWUFBQU9wZ0FBQmR2a2wvRlJnQUFBRnBKUkVGVWVOcGkvUC8vUHdNbGdISEFEV0Q0Ly84L050eUFReHdENDVLQUFRZEtEZmovLy8vLy9mZ01Jc1lBWklNdzFES1JFRndPREF3TS80a05SS3E2NEFBREE0TWpGRE9RNmdLeVk0SG9kTUE0OVBNQ3hRWUFCZ0FWWUhzanlaMXg3UUFBQUFCSlJVNUVya0pnZ2c9PSk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5leHBhbmRlZC5hY2NlcHQgdGQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UveC1wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQUZ0SlJFRlVlTnBpL1AvL1B3TWxnSW1CUXNBNDRDNmdpUUVOREF3TS8vSGdCbUxDQUYvQU1CTGpCVWVpeGYvLy80OEw3LytQQ3ZaalU0ZlBBQWMwQXh5d3FjTVhDd2VnR0oxTmNrTDZqeDV3cEtZRHhxR1hFa2tDZ0FFQW1ycUJJZWpkZ25nQUFBQUFTVVZPUks1Q1lJST0pOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9qcXVlcnkudHJlZXRhYmxlLnRoZW1lLnRvYXN0ZXIuY3NzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9qcXVlcnkudHJlZXRhYmxlLnRoZW1lLnRvYXN0ZXIuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NTUyZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2pxdWVyeS50cmVldGFibGUudGhlbWUudG9hc3Rlci5jc3MKQEAgLTAsMCArMSwzOCBAQAordGFibGUudHJlZXRhYmxlIHNwYW4uZmlsZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVFBQUFDMStqZnFBQUFBQkdkQlRVRUFBSy9JTndXSzZRQUFBQmwwUlZoMFUyOW1kSGRoY21VQVFXUnZZbVVnU1cxaFoyVlNaV0ZrZVhISlpUd0FBQURvU1VSQlZCZ1pCY0V4YmxOQkdBYkEyY2VlZ1RSQnVJS09naWloU1pOVGNDNUxVSEFpaE5KUjBrR0tDRGNZSlk2RDMvNzdNZE9pblR2ekFnQ3c4eXNUaEl2bi9Wb2pJeU1qSXlQUCtiUzFzVVFJVjJzOTVwQkREdm1iUC9tZGtmdDgzdHBZZ3VacTVKaC9PZWFZaCt5enk4aFRIdk5sYXhOTmN6bStsYTlPVGxhcjFVZEEvK0MyQTR0clJDbkQzalM4QkIxb2JxMkdrNkdVNlFiUUFTNEJVYVlTUUFmNGJoaEtLVEZkQXpyQU93QXhFVUFIK0tFTTAxU1kzZ002d0JzRUFRQjBnSittYVpvQzNnSTZpUFlhQUlCSnNpUm1IVTBBQUxPZUZDM2FLMmNXQUFDVVhlNytBd08wbGM5ZVRIWVRBQUFBQUVsRlRrU3VRbUNDKTsKK30KKwordGFibGUudHJlZXRhYmxlIHNwYW4uZm9sZGVyIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFCR2RCVFVFQUFLL0lOd1dLNlFBQUFCbDBSVmgwVTI5bWRIZGhjbVVBUVdSdlltVWdTVzFoWjJWU1pXRmtlWEhKWlR3QUFBR3JTVVJCVkRqTHhaTzdpaFJCRklhLzZ1MFpXN0dIQlVWMFVRUVRaemQzUWRoTVF4T2Z3TVJYRUFOQk1OUVgwTXpBekZBd0V6SHdBUmJORkRkd0VkMzFNajNYN2E2dU9yOUJ0ek5qWWpLQko2bmljUDd2M0txY0pGYXhoQlZ0WlVBSzhPSGxsZDJzdDdYbDNESlBWT05QK3pFVVY0SHFMNVVEWUhyNXh2dVFBamdsL1FzN1R6dk9PVkFqeGpsQytlUFN3ZTZEZmJWZWdMVnVUNHIxNGVUcjZ6dkE4eFNBb0JMeng2cHZqNGwrRFpJZXp1VmtHOWZZMkg3WVJRSU1aSUJ3eWNtekgxL3MzRjhBYXBmSVBORjNrUWs3K2t3OVBXQnkrSVpPZGc1VWczbWtBQVR5L3QwdXNvdnpHZUNVV1RqQ3owQitTajBla2ZkdmtaM2FiQnYrVTRHYUN0SjFpRW02QU5RSjZmRXpyRy9lbmdjS3cvd1hRdkVLeFNFS1F4UkdLRTdJenQrRFNpd0JKTVVTbTcxcmd1TVloUUtyQnlnT0lSU3RmNFRpRkZSQnZiUkdLaVFMV1AyOXlSU0hLQlR0ZmRCbUhzMEJVcGd2dGdGNHlSRlIrTlVLaTBYWmNZakNlQ0cyc21rekxBSGtiUkJtUDAvVWsyNk81WW5VQWN0QnAxR3NBSStTNW5SSkpKYWw1SzFhQU1ycTBkNlRtOXVJNnpqeWY3NWRBZTZ0eC9Tc1dlRC8vbzIvQWI2SUgzL2gyNXBPQUFBQUFFbEZUa1N1UW1DQyk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5jb2xsYXBzZWQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNEQUFENS93QUFnT2tBQUhVd0FBRHFZQUFBT3BnQUFCZHZrbC9GUmdBQUFIbEpSRUZVZU5yY1Uxc05nREFRNndnbWNBTTJNSUNHR2xnMWdKbk56V1FjdndRR3kxajRvVWwvN3RIMG1wd3pNN1NnUXlPK0VaQVVXaDJNa2t6U1doSnd1UkFsSFlzSndFd3l2czFnQUJEdXpxb0pjVHc1cXhhSUpOMGJnUVJnSWpubG1uMWhlU081UEU2WTJZWGUrNUNyNStoKytnczEyQWNBUzZGUys3WU9zajRBQUFBQVNVVk9SSzVDWUlJPSk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5leHBhbmRlZCBzcGFuLmluZGVudGVyIGEgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQUhGSlJFRlVlTnBpL1AvL1B3TWxnSW1CUXNBNDRDNmd2aGZhMjl2M016QXdPT0RSYzZDeXN0SVJieGkwdDdmakRKakt5a3BHWXJ3d2kxaHhuTEhRM3Q3K2pJR0JRUkpKNkhsbFphVVVLWUVZUllCUE9CMGdCU2hLd0tHQS8vLy80OFZ0YlczLzhjbFRuQklIM2dDS2t6SmdBR3ZCWDBkRG0wc0NBQUFBQUVsRlRrU3VRbUNDKTsKK30KKworCisKK3RhYmxlLnRyZWV0YWJsZSB0ci5jb2xsYXBzZWQuc2VsZWN0ZWQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNEQUFENS93QUFnT2tBQUhVd0FBRHFZQUFBT3BnQUFCZHZrbC9GUmdBQUFGcEpSRUZVZU5waS9QLy9Qd01sZ0hIQURXRDQvLzgvTnR5QVF4d0Q0NUtBQVFkS0Rmai8vLy8vL2ZnTUlzWUFaSU13MURLUkVGd09EQXdNLzRrTlJLcTY0QUFEQTRNakZET1E2Z0t5WTRIb2RNQTQ5UE1DeFFZQUJnQVZZSHNqeVoxeDdRQUFBQUJKUlU1RXJrSmdnZz09KTsKK30KKwordGFibGUudHJlZXRhYmxlIHRyLmV4cGFuZGVkLnNlbGVjdGVkIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBS1QybERRMUJRYUc5MGIzTm9iM0FnU1VORElIQnliMlpwYkdVQUFIamFuVk5uVkZQcEZqMzMzdlJDUzRpQWxFdHZVaFVJSUZKQ2k0QVVrU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFNcVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQmVOTUxDQURBVFp2QU1CeUgvdy9xUXBsY0FZQ0VBY0Iwa1RoTENJQVVBRUI2amtLbUFFQkdBWUNkbUNaVEFLQUVBR0RMWTJMakFGQXRBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzQU1ET0VBdXlBQWdNQURCUmlJVXBBQVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFBRDUvd0FBZ09rQUFIVXdBQURxWUFBQU9wZ0FBQmR2a2wvRlJnQUFBRnRKUkVGVWVOcGkvUC8vUHdNbGdJbUJRc0E0NEM2Z2lRRU5EQXdNLy9IZ0JtTENBRi9BTUJMakJVZWl4Zi8vLzQ4TDcvK1BDdlpqVTRmUEFBYzBBeHl3cWNNWEN3ZWdHSjFOY2tMNmp4NXdwS1lEeHFHWEVra0NnQUVBbXJxQkllamRnbmdBQUFBQVNVVk9SSzVDWUlJPSk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5hY2NlcHQgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTNiY2U0OworICBjb2xvcjogI2ZmZgorfQorCit0YWJsZS50cmVldGFibGUgdHIuY29sbGFwc2VkLmFjY2VwdCB0ZCBzcGFuLmluZGVudGVyIGEgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS94LXBuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBS1QybERRMUJRYUc5MGIzTm9iM0FnU1VORElIQnliMlpwYkdVQUFIamFuVk5uVkZQcEZqMzMzdlJDUzRpQWxFdHZVaFVJSUZKQ2k0QVVrU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFNcVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQmVOTUxDQURBVFp2QU1CeUgvdy9xUXBsY0FZQ0VBY0Iwa1RoTENJQVVBRUI2amtLbUFFQkdBWUNkbUNaVEFLQUVBR0RMWTJMakFGQXRBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzQU1ET0VBdXlBQWdNQURCUmlJVXBBQVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFBRDUvd0FBZ09rQUFIVXdBQURxWUFBQU9wZ0FBQmR2a2wvRlJnQUFBRnBKUkVGVWVOcGkvUC8vUHdNbGdISEFEV0Q0Ly84L050eUFReHdENDVLQUFRZEtEZmovLy8vLy9mZ01Jc1lBWklNdzFES1JFRndPREF3TS80a05SS3E2NEFBREE0TWpGRE9RNmdLeVk0SG9kTUE0OVBNQ3hRWUFCZ0FWWUhzanlaMXg3UUFBQUFCSlJVNUVya0pnZ2c9PSk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5leHBhbmRlZC5hY2NlcHQgdGQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UveC1wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQUZ0SlJFRlVlTnBpL1AvL1B3TWxnSW1CUXNBNDRDNmdpUUVOREF3TS8vSGdCbUxDQUYvQU1CTGpCVWVpeGYvLy80OEw3LytQQ3ZaalU0ZlBBQWMwQXh5d3FjTVhDd2VnR0oxTmNrTDZqeDV3cEtZRHhxR1hFa2tDZ0FFQW1ycUJJZWpkZ25nQUFBQUFTVVZPUks1Q1lJST0pOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9wcmV0dGlmeS5jc3MgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL3ByZXR0aWZ5LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMzE3YTdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9wcmV0dGlmeS5jc3MKQEAgLTAsMCArMSBAQAorLnBsbntjb2xvcjojMDAwfUBtZWRpYSBzY3JlZW57LnN0cntjb2xvcjojMDgwfS5rd2R7Y29sb3I6IzAwOH0uY29te2NvbG9yOiM4MDB9LnR5cHtjb2xvcjojNjA2fS5saXR7Y29sb3I6IzA2Nn0ucHVuLC5vcG4sLmNsb3tjb2xvcjojNjYwfS50YWd7Y29sb3I6IzAwOH0uYXRue2NvbG9yOiM2MDZ9LmF0dntjb2xvcjojMDgwfS5kZWMsLnZhcntjb2xvcjojNjA2fS5mdW57Y29sb3I6cmVkfX1AbWVkaWEgcHJpbnQscHJvamVjdGlvbnsuc3Rye2NvbG9yOiMwNjB9Lmt3ZHtjb2xvcjojMDA2O2ZvbnQtd2VpZ2h0OmJvbGR9LmNvbXtjb2xvcjojNjAwO2ZvbnQtc3R5bGU6aXRhbGljfS50eXB7Y29sb3I6IzQwNDtmb250LXdlaWdodDpib2xkfS5saXR7Y29sb3I6IzA0NH0ucHVuLC5vcG4sLmNsb3tjb2xvcjojNDQwfS50YWd7Y29sb3I6IzAwNjtmb250LXdlaWdodDpib2xkfS5hdG57Y29sb3I6IzQwNH0uYXR2e2NvbG9yOiMwNjB9fXByZS5wcmV0dHlwcmludHtwYWRkaW5nOjJweDtib3JkZXI6MXB4IHNvbGlkICM4ODh9b2wubGluZW51bXN7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MH1saS5MMCxsaS5MMSxsaS5MMixsaS5MMyxsaS5MNSxsaS5MNixsaS5MNyxsaS5MOHtsaXN0LXN0eWxlLXR5cGU6bm9uZX1saS5MMSxsaS5MMyxsaS5MNSxsaS5MNyxsaS5MOXtiYWNrZ3JvdW5kOiNlZWV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL3NjcmVlbi5jc3MgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL3NjcmVlbi5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIzM2VmNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3Mvc2NyZWVuLmNzcwpAQCAtMCwwICsxLDI4IEBACitib2R5IHsKKyAgYmFja2dyb3VuZDogI2RkZDsKKyAgY29sb3I6ICMwMDA7CisgIGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOworICBsaW5lLWhlaWdodDogMS41OworICBtYXJnaW46IDA7CisgIHBhZGRpbmc6IDA7Cit9CisKKyNtYWluIHsKKyAgYmFja2dyb3VuZDogI2ZmZjsKKyAgYm9yZGVyLWxlZnQ6IDIwcHggc29saWQgI2VlZTsKKyAgYm9yZGVyLXJpZ2h0OiAyMHB4IHNvbGlkICNlZWU7CisgIG1hcmdpbjogMCBhdXRvOworICBtYXgtd2lkdGg6IDgwMHB4OworICBwYWRkaW5nOiAyMHB4OworfQorCitwcmUubGlzdGluZyB7CisgIGJhY2tncm91bmQ6ICNlZWU7CisgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7CisgIG1hcmdpbjogLjZlbSAwIC4zZW0gMDsKKyAgcGFkZGluZzogLjFlbSAuM2VtOworfQorCitwcmUubGlzdGluZyBiIHsKKyAgY29sb3I6ICNmMDA7Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvRm9udEF3ZXNvbWUub3RmIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL0ZvbnRBd2Vzb21lLm90ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDA0OWJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL0ZvbnRBd2Vzb21lLm90ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC5lb3QgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC5lb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q4MTAxOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9mb250YXdlc29tZS13ZWJmb250LmVvdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC5zdmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEwYWZlNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9mb250YXdlc29tZS13ZWJmb250LnN2ZwpAQCAtMCwwICsxLDI4NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PgorPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+Cis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+Cis8bWV0YWRhdGE+PC9tZXRhZGF0YT4KKzxkZWZzPgorPGZvbnQgaWQ9ImZvbnRhd2Vzb21lcmVndWxhciIgaG9yaXotYWR2LXg9IjE1MzYiID4KKzxmb250LWZhY2UgdW5pdHMtcGVyLWVtPSIxNzkyIiBhc2NlbnQ9IjE1MzYiIGRlc2NlbnQ9Ii0yNTYiIC8+Cis8bWlzc2luZy1nbHlwaCBob3Jpei1hZHYteD0iNDQ4IiAvPgorPGdseXBoIHVuaWNvZGU9IiAiICBob3Jpei1hZHYteD0iNDQ4IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDA5OyIgaG9yaXotYWR2LXg9IjQ0OCIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hhMDsiIGhvcml6LWFkdi14PSI0NDgiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4YTg7IiBob3Jpei1hZHYteD0iMTc5MiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hhOTsiIGhvcml6LWFkdi14PSIxNzkyIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGFlOyIgaG9yaXotYWR2LXg9IjE3OTIiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4YjQ7IiBob3Jpei1hZHYteD0iMTc5MiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hjNjsiIGhvcml6LWFkdi14PSIxNzkyIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDA7IiBob3Jpei1hZHYteD0iNzY4IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDE7IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDI7IiBob3Jpei1hZHYteD0iNzY4IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDM7IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDQ7IiBob3Jpei1hZHYteD0iNTEyIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDU7IiBob3Jpei1hZHYteD0iMzg0IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDY7IiBob3Jpei1hZHYteD0iMjU2IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDc7IiBob3Jpei1hZHYteD0iMjU2IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDg7IiBob3Jpei1hZHYteD0iMTkyIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDk7IiBob3Jpei1hZHYteD0iMzA3IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMGE7IiBob3Jpei1hZHYteD0iODUiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjAyZjsiIGhvcml6LWFkdi14PSIzMDciIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjA1ZjsiIGhvcml6LWFkdi14PSIzODQiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjEyMjsiIGhvcml6LWFkdi14PSIxNzkyIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIyMWU7IiBob3Jpei1hZHYteD0iMTc5MiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMjYwOyIgaG9yaXotYWR2LXg9IjE3OTIiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMDsiIGhvcml6LWFkdi14PSI1MDAiIGQ9Ik0wIDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMDA7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE2OTkgMTM1MHEwIC0zNSAtNDMgLTc4bC02MzIgLTYzMnYtNzY4aDMyMHEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NXQtNDUgLTE5aC04OTZxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOWgzMjB2NzY4bC02MzIgNjMycS00MyA0MyAtNDMgNzhxMCAyMyAxOCAzNi41dDM4IDE3LjV0NDMgNGgxNDA4cTIzIDAgNDMgLTR0MzggLTE3LjV0MTggLTM2LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMDE7IiBkPSJNMTUzNiAxMzEydi0xMTIwcTAgLTUwIC0zNCAtODl0LTg2IC02MC41dC0xMDMuNSAtMzJ0LTk2LjUgLTEwLjV0LTk2LjUgMTAuNXQtMTAzLjUgMzJ0LTg2IDYwLjV0LTM0IDg5dDM0IDg5dDg2IDYwLjV0MTAzLjUgMzJ0OTYuNSAxMC41cTEwNSAwIDE5MiAtMzl2NTM3bC03NjggLTIzN3YtNzA5cTAgLTUwIC0zNCAtODl0LTg2IC02MC41dC0xMDMuNSAtMzJ0LTk2LjUgLTEwLjV0LTk2LjUgMTAuNXQtMTAzLjUgMzJ0LTg2IDYwLjV0LTM0IDg5IHQzNCA4OXQ4NiA2MC41dDEwMy41IDMydDk2LjUgMTAuNXExMDUgMCAxOTIgLTM5djk2N3EwIDMxIDE5IDU2LjV0NDkgMzUuNWw4MzIgMjU2cTEyIDQgMjggNHE0MCAwIDY4IC0yOHQyOCAtNjh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMDI7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTExNTIgNzA0cTAgMTg1IC0xMzEuNSAzMTYuNXQtMzE2LjUgMTMxLjV0LTMxNi41IC0xMzEuNXQtMTMxLjUgLTMxNi41dDEzMS41IC0zMTYuNXQzMTYuNSAtMTMxLjV0MzE2LjUgMTMxLjV0MTMxLjUgMzE2LjV6TTE2NjQgLTEyOHEwIC01MiAtMzggLTkwdC05MCAtMzhxLTU0IDAgLTkwIDM4bC0zNDMgMzQycS0xNzkgLTEyNCAtMzk5IC0xMjRxLTE0MyAwIC0yNzMuNSA1NS41dC0yMjUgMTUwdC0xNTAgMjI1dC01NS41IDI3My41IHQ1NS41IDI3My41dDE1MCAyMjV0MjI1IDE1MHQyNzMuNSA1NS41dDI3My41IC01NS41dDIyNSAtMTUwdDE1MCAtMjI1dDU1LjUgLTI3My41cTAgLTIyMCAtMTI0IC0zOTlsMzQzIC0zNDNxMzcgLTM3IDM3IC05MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAwMzsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTY2NCAzMnY3NjhxLTMyIC0zNiAtNjkgLTY2cS0yNjggLTIwNiAtNDI2IC0zMzhxLTUxIC00MyAtODMgLTY3dC04Ni41IC00OC41dC0xMDIuNSAtMjQuNWgtMWgtMXEtNDggMCAtMTAyLjUgMjQuNXQtODYuNSA0OC41dC04MyA2N3EtMTU4IDEzMiAtNDI2IDMzOHEtMzcgMzAgLTY5IDY2di03NjhxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxNDcycTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTE2NjQgMTA4M3YxMXYxMy41dC0wLjUgMTMgdC0zIDEyLjV0LTUuNSA5dC05IDcuNXQtMTQgMi41aC0xNDcycS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXEwIC0xNjggMTQ3IC0yODRxMTkzIC0xNTIgNDAxIC0zMTdxNiAtNSAzNSAtMjkuNXQ0NiAtMzcuNXQ0NC41IC0zMS41dDUwLjUgLTI3LjV0NDMgLTloMWgxcTIwIDAgNDMgOXQ1MC41IDI3LjV0NDQuNSAzMS41dDQ2IDM3LjV0MzUgMjkuNXEyMDggMTY1IDQwMSAzMTdxNTQgNDMgMTAwLjUgMTE1LjV0NDYuNSAxMzEuNXogTTE3OTIgMTEyMHYtMTA4OHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTQ3MnEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MTA4OHEwIDY2IDQ3IDExM3QxMTMgNDdoMTQ3MnE2NiAwIDExMyAtNDd0NDcgLTExM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAwNDsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNODk2IC0xMjhxLTI2IDAgLTQ0IDE4bC02MjQgNjAycS0xMCA4IC0yNy41IDI2dC01NS41IDY1LjV0LTY4IDk3LjV0LTUzLjUgMTIxdC0yMy41IDEzOHEwIDIyMCAxMjcgMzQ0dDM1MSAxMjRxNjIgMCAxMjYuNSAtMjEuNXQxMjAgLTU4dDk1LjUgLTY4LjV0NzYgLTY4cTM2IDM2IDc2IDY4dDk1LjUgNjguNXQxMjAgNTh0MTI2LjUgMjEuNXEyMjQgMCAzNTEgLTEyNHQxMjcgLTM0NHEwIC0yMjEgLTIyOSAtNDUwbC02MjMgLTYwMCBxLTE4IC0xOCAtNDQgLTE4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDA1OyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xNjY0IDg4OXEwIC0yMiAtMjYgLTQ4bC0zNjMgLTM1NGw4NiAtNTAwcTEgLTcgMSAtMjBxMCAtMjEgLTEwLjUgLTM1LjV0LTMwLjUgLTE0LjVxLTE5IDAgLTQwIDEybC00NDkgMjM2bC00NDkgLTIzNnEtMjIgLTEyIC00MCAtMTJxLTIxIDAgLTMxLjUgMTQuNXQtMTAuNSAzNS41cTAgNiAyIDIwbDg2IDUwMGwtMzY0IDM1NHEtMjUgMjcgLTI1IDQ4cTAgMzcgNTYgNDZsNTAyIDczbDIyNSA0NTVxMTkgNDEgNDkgNDF0NDkgLTQxbDIyNSAtNDU1IGw1MDIgLTczcTU2IC05IDU2IC00NnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAwNjsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTEzNyA1MzJsMzA2IDI5N2wtNDIyIDYybC0xODkgMzgybC0xODkgLTM4MmwtNDIyIC02MmwzMDYgLTI5N2wtNzMgLTQyMWwzNzggMTk5bDM3NyAtMTk5ek0xNjY0IDg4OXEwIC0yMiAtMjYgLTQ4bC0zNjMgLTM1NGw4NiAtNTAwcTEgLTcgMSAtMjBxMCAtNTAgLTQxIC01MHEtMTkgMCAtNDAgMTJsLTQ0OSAyMzZsLTQ0OSAtMjM2cS0yMiAtMTIgLTQwIC0xMnEtMjEgMCAtMzEuNSAxNC41dC0xMC41IDM1LjVxMCA2IDIgMjBsODYgNTAwIGwtMzY0IDM1NHEtMjUgMjcgLTI1IDQ4cTAgMzcgNTYgNDZsNTAyIDczbDIyNSA0NTVxMTkgNDEgNDkgNDF0NDkgLTQxbDIyNSAtNDU1bDUwMiAtNzNxNTYgLTkgNTYgLTQ2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDA3OyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xNDA4IDEzMXEwIC0xMjAgLTczIC0xODkuNXQtMTk0IC02OS41aC04NzRxLTEyMSAwIC0xOTQgNjkuNXQtNzMgMTg5LjVxMCA1MyAzLjUgMTAzLjV0MTQgMTA5dDI2LjUgMTA4LjV0NDMgOTcuNXQ2MiA4MXQ4NS41IDUzLjV0MTExLjUgMjBxOSAwIDQyIC0yMS41dDc0LjUgLTQ4dDEwOCAtNDh0MTMzLjUgLTIxLjV0MTMzLjUgMjEuNXQxMDggNDh0NzQuNSA0OHQ0MiAyMS41cTYxIDAgMTExLjUgLTIwdDg1LjUgLTUzLjV0NjIgLTgxIHQ0MyAtOTcuNXQyNi41IC0xMDguNXQxNCAtMTA5dDMuNSAtMTAzLjV6TTEwODggMTAyNHEwIC0xNTkgLTExMi41IC0yNzEuNXQtMjcxLjUgLTExMi41dC0yNzEuNSAxMTIuNXQtMTEyLjUgMjcxLjV0MTEyLjUgMjcxLjV0MjcxLjUgMTEyLjV0MjcxLjUgLTExMi41dDExMi41IC0yNzEuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAwODsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNMzg0IC02NHYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXpNMzg0IDMyMHYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXpNMzg0IDcwNHYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjggcS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMTI4cTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV6TTE0MDggLTY0djUxMnEwIDI2IC0xOSA0NXQtNDUgMTloLTc2OHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTUxMnEwIC0yNiAxOSAtNDV0NDUgLTE5aDc2OHEyNiAwIDQ1IDE5dDE5IDQ1ek0zODQgMTA4OHYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1IHQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV6TTE3OTIgLTY0djEyOHEwIDI2IC0xOSA0NXQtNDUgMTloLTEyOHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTEyOHEwIC0yNiAxOSAtNDV0NDUgLTE5aDEyOHEyNiAwIDQ1IDE5dDE5IDQ1ek0xNDA4IDcwNHY1MTJxMCAyNiAtMTkgNDV0LTQ1IDE5aC03NjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di01MTJxMCAtMjYgMTkgLTQ1dDQ1IC0xOWg3NjhxMjYgMCA0NSAxOXQxOSA0NXpNMTc5MiAzMjB2MTI4IHEwIDI2IC0xOSA0NXQtNDUgMTloLTEyOHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTEyOHEwIC0yNiAxOSAtNDV0NDUgLTE5aDEyOHEyNiAwIDQ1IDE5dDE5IDQ1ek0xNzkyIDcwNHYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXpNMTc5MiAxMDg4djEyOHEwIDI2IC0xOSA0NXQtNDUgMTloLTEyOHEtMjYgMCAtNDUgLTE5IHQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXpNMTkyMCAxMjQ4di0xMzQ0cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xNjAwcS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMzQ0cTAgNjYgNDcgMTEzdDExMyA0N2gxNjAwcTY2IDAgMTEzIC00N3Q0NyAtMTEzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDA5OyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik03NjggNTEydi0zODRxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC01MTJxLTUyIDAgLTkwIDM4dC0zOCA5MHYzODRxMCA1MiAzOCA5MHQ5MCAzOGg1MTJxNTIgMCA5MCAtMzh0MzggLTkwek03NjggMTI4MHYtMzg0cTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtNTEycS01MiAwIC05MCAzOHQtMzggOTB2Mzg0cTAgNTIgMzggOTB0OTAgMzhoNTEycTUyIDAgOTAgLTM4dDM4IC05MHpNMTY2NCA1MTJ2LTM4NHEwIC01MiAtMzggLTkwdC05MCAtMzggaC01MTJxLTUyIDAgLTkwIDM4dC0zOCA5MHYzODRxMCA1MiAzOCA5MHQ5MCAzOGg1MTJxNTIgMCA5MCAtMzh0MzggLTkwek0xNjY0IDEyODB2LTM4NHEwIC01MiAtMzggLTkwdC05MCAtMzhoLTUxMnEtNTIgMCAtOTAgMzh0LTM4IDkwdjM4NHEwIDUyIDM4IDkwdDkwIDM4aDUxMnE1MiAwIDkwIC0zOHQzOCAtOTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMGE7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTUxMiAyODh2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTUxMiA4MDB2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTExNTIgMjg4di0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjAgcS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoMzIwcTQwIDAgNjggLTI4dDI4IC02OHpNNTEyIDEzMTJ2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTExNTIgODAwdi0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOCBoMzIwcTQwIDAgNjggLTI4dDI4IC02OHpNMTc5MiAyODh2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTExNTIgMTMxMnYtMTkycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMzIwcS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoMzIwcTQwIDAgNjggLTI4dDI4IC02OHpNMTc5MiA4MDB2LTE5MiBxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgzMjBxNDAgMCA2OCAtMjh0MjggLTY4ek0xNzkyIDEzMTJ2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMGI7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTUxMiAyODh2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTUxMiA4MDB2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTE3OTIgMjg4di0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC05NjAgcS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoOTYwcTQwIDAgNjggLTI4dDI4IC02OHpNNTEyIDEzMTJ2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTE3OTIgODAwdi0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC05NjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOCBoOTYwcTQwIDAgNjggLTI4dDI4IC02OHpNMTc5MiAxMzEydi0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC05NjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGg5NjBxNDAgMCA2OCAtMjh0MjggLTY4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDBjOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNjcxIDk3MHEwIC00MCAtMjggLTY4bC03MjQgLTcyNGwtMTM2IC0xMzZxLTI4IC0yOCAtNjggLTI4dC02OCAyOGwtMTM2IDEzNmwtMzYyIDM2MnEtMjggMjggLTI4IDY4dDI4IDY4bDEzNiAxMzZxMjggMjggNjggMjh0NjggLTI4bDI5NCAtMjk1bDY1NiA2NTdxMjggMjggNjggMjh0NjggLTI4bDEzNiAtMTM2cTI4IC0yOCAyOCAtNjh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMGQ7IiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTEyOTggMjE0cTAgLTQwIC0yOCAtNjhsLTEzNiAtMTM2cS0yOCAtMjggLTY4IC0yOHQtNjggMjhsLTI5NCAyOTRsLTI5NCAtMjk0cS0yOCAtMjggLTY4IC0yOHQtNjggMjhsLTEzNiAxMzZxLTI4IDI4IC0yOCA2OHQyOCA2OGwyOTQgMjk0bC0yOTQgMjk0cS0yOCAyOCAtMjggNjh0MjggNjhsMTM2IDEzNnEyOCAyOCA2OCAyOHQ2OCAtMjhsMjk0IC0yOTRsMjk0IDI5NHEyOCAyOCA2OCAyOHQ2OCAtMjhsMTM2IC0xMzZxMjggLTI4IDI4IC02OCB0LTI4IC02OGwtMjk0IC0yOTRsMjk0IC0yOTRxMjggLTI4IDI4IC02OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAwZTsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTAyNCA3MzZ2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMjI0di0yMjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djIyNGgtMjI0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgyMjR2MjI0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41di0yMjRoMjI0IHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTExNTIgNzA0cTAgMTg1IC0xMzEuNSAzMTYuNXQtMzE2LjUgMTMxLjV0LTMxNi41IC0xMzEuNXQtMTMxLjUgLTMxNi41dDEzMS41IC0zMTYuNXQzMTYuNSAtMTMxLjV0MzE2LjUgMTMxLjV0MTMxLjUgMzE2LjV6TTE2NjQgLTEyOHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXEtNTQgMCAtOTAgMzhsLTM0MyAzNDJxLTE3OSAtMTI0IC0zOTkgLTEyNHEtMTQzIDAgLTI3My41IDU1LjUgdC0yMjUgMTUwdC0xNTAgMjI1dC01NS41IDI3My41dDU1LjUgMjczLjV0MTUwIDIyNXQyMjUgMTUwdDI3My41IDU1LjV0MjczLjUgLTU1LjV0MjI1IC0xNTB0MTUwIC0yMjV0NTUuNSAtMjczLjVxMCAtMjIwIC0xMjQgLTM5OWwzNDMgLTM0M3EzNyAtMzcgMzcgLTkweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDEwOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xMDI0IDczNnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC01NzZxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDU3NnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTExNTIgNzA0cTAgMTg1IC0xMzEuNSAzMTYuNXQtMzE2LjUgMTMxLjV0LTMxNi41IC0xMzEuNXQtMTMxLjUgLTMxNi41dDEzMS41IC0zMTYuNXQzMTYuNSAtMTMxLjV0MzE2LjUgMTMxLjV0MTMxLjUgMzE2LjV6IE0xNjY0IC0xMjhxMCAtNTMgLTM3LjUgLTkwLjV0LTkwLjUgLTM3LjVxLTU0IDAgLTkwIDM4bC0zNDMgMzQycS0xNzkgLTEyNCAtMzk5IC0xMjRxLTE0MyAwIC0yNzMuNSA1NS41dC0yMjUgMTUwdC0xNTAgMjI1dC01NS41IDI3My41dDU1LjUgMjczLjV0MTUwIDIyNXQyMjUgMTUwdDI3My41IDU1LjV0MjczLjUgLTU1LjV0MjI1IC0xNTB0MTUwIC0yMjV0NTUuNSAtMjczLjVxMCAtMjIwIC0xMjQgLTM5OWwzNDMgLTM0M3EzNyAtMzcgMzcgLTkweiAiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAxMTsiIGQ9Ik0xNTM2IDY0MHEwIC0xNTYgLTYxIC0yOTh0LTE2NCAtMjQ1dC0yNDUgLTE2NHQtMjk4IC02MXQtMjk4IDYxdC0yNDUgMTY0dC0xNjQgMjQ1dC02MSAyOThxMCAxODIgODAuNSAzNDN0MjI2LjUgMjcwcTQzIDMyIDk1LjUgMjV0ODMuNSAtNTBxMzIgLTQyIDI0LjUgLTk0LjV0LTQ5LjUgLTg0LjVxLTk4IC03NCAtMTUxLjUgLTE4MXQtNTMuNSAtMjI4cTAgLTEwNCA0MC41IC0xOTguNXQxMDkuNSAtMTYzLjV0MTYzLjUgLTEwOS41IHQxOTguNSAtNDAuNXQxOTguNSA0MC41dDE2My41IDEwOS41dDEwOS41IDE2My41dDQwLjUgMTk4LjVxMCAxMjEgLTUzLjUgMjI4dC0xNTEuNSAxODFxLTQyIDMyIC00OS41IDg0LjV0MjQuNSA5NC41cTMxIDQzIDg0IDUwdDk1IC0yNXExNDYgLTEwOSAyMjYuNSAtMjcwdDgwLjUgLTM0M3pNODk2IDE0MDh2LTY0MHEwIC01MiAtMzggLTkwdC05MCAtMzh0LTkwIDM4dC0zOCA5MHY2NDBxMCA1MiAzOCA5MHQ5MCAzOHQ5MCAtMzh0MzggLTkweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDEyOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0yNTYgOTZ2LTE5MnEwIC0xNCAtOSAtMjN0LTIzIC05aC0xOTJxLTE0IDAgLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzIC05dDkgLTIzek02NDAgMjI0di0zMjBxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTkycS0xNCAwIC0yMyA5dC05IDIzdjMyMHEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3pNMTAyNCA0ODB2LTU3NnEwIC0xNCAtOSAtMjN0LTIzIC05aC0xOTJxLTE0IDAgLTIzIDl0LTkgMjMgdjU3NnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3pNMTQwOCA4NjR2LTk2MHEwIC0xNCAtOSAtMjN0LTIzIC05aC0xOTJxLTE0IDAgLTIzIDl0LTkgMjN2OTYwcTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzIC05dDkgLTIzek0xNzkyIDEzNzZ2LTE0NzJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTkycS0xNCAwIC0yMyA5dC05IDIzdjE0NzJxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMgLTl0OSAtMjN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMTM7IiBkPSJNMTAyNCA2NDBxMCAxMDYgLTc1IDE4MXQtMTgxIDc1dC0xODEgLTc1dC03NSAtMTgxdDc1IC0xODF0MTgxIC03NXQxODEgNzV0NzUgMTgxek0xNTM2IDc0OXYtMjIycTAgLTEyIC04IC0yM3QtMjAgLTEzbC0xODUgLTI4cS0xOSAtNTQgLTM5IC05MXEzNSAtNTAgMTA3IC0xMzhxMTAgLTEyIDEwIC0yNXQtOSAtMjNxLTI3IC0zNyAtOTkgLTEwOHQtOTQgLTcxcS0xMiAwIC0yNiA5bC0xMzggMTA4cS00NCAtMjMgLTkxIC0zOCBxLTE2IC0xMzYgLTI5IC0xODZxLTcgLTI4IC0zNiAtMjhoLTIyMnEtMTQgMCAtMjQuNSA4LjV0LTExLjUgMjEuNWwtMjggMTg0cS00OSAxNiAtOTAgMzdsLTE0MSAtMTA3cS0xMCAtOSAtMjUgLTlxLTE0IDAgLTI1IDExcS0xMjYgMTE0IC0xNjUgMTY4cS03IDEwIC03IDIzcTAgMTIgOCAyM3ExNSAyMSA1MSA2Ni41dDU0IDcwLjVxLTI3IDUwIC00MSA5OWwtMTgzIDI3cS0xMyAyIC0yMSAxMi41dC04IDIzLjV2MjIycTAgMTIgOCAyM3QxOSAxMyBsMTg2IDI4cTE0IDQ2IDM5IDkycS00MCA1NyAtMTA3IDEzOHEtMTAgMTIgLTEwIDI0cTAgMTAgOSAyM3EyNiAzNiA5OC41IDEwNy41dDk0LjUgNzEuNXExMyAwIDI2IC0xMGwxMzggLTEwN3E0NCAyMyA5MSAzOHExNiAxMzYgMjkgMTg2cTcgMjggMzYgMjhoMjIycTE0IDAgMjQuNSAtOC41dDExLjUgLTIxLjVsMjggLTE4NHE0OSAtMTYgOTAgLTM3bDE0MiAxMDdxOSA5IDI0IDlxMTMgMCAyNSAtMTBxMTI5IC0xMTkgMTY1IC0xNzBxNyAtOCA3IC0yMiBxMCAtMTIgLTggLTIzcS0xNSAtMjEgLTUxIC02Ni41dC01NCAtNzAuNXEyNiAtNTAgNDEgLTk4bDE4MyAtMjhxMTMgLTIgMjEgLTEyLjV0OCAtMjMuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAxNDsiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNNTEyIDgwMHYtNTc2cTAgLTE0IC05IC0yM3QtMjMgLTloLTY0cS0xNCAwIC0yMyA5dC05IDIzdjU3NnEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzIC05dDkgLTIzek03NjggODAwdi01NzZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2NTc2cTAgMTQgOSAyM3QyMyA5aDY0cTE0IDAgMjMgLTl0OSAtMjN6TTEwMjQgODAwdi01NzZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2NTc2IHEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzIC05dDkgLTIzek0xMTUyIDc2djk0OGgtODk2di05NDhxMCAtMjIgNyAtNDAuNXQxNC41IC0yN3QxMC41IC04LjVoODMycTMgMCAxMC41IDguNXQxNC41IDI3dDcgNDAuNXpNNDgwIDExNTJoNDQ4bC00OCAxMTdxLTcgOSAtMTcgMTFoLTMxN3EtMTAgLTIgLTE3IC0xMXpNMTQwOCAxMTIwdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC05NnYtOTQ4cTAgLTgzIC00NyAtMTQzLjV0LTExMyAtNjAuNWgtODMyIHEtNjYgMCAtMTEzIDU4LjV0LTQ3IDE0MS41djk1MmgtOTZxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloMzA5bDcwIDE2N3ExNSAzNyA1NCA2M3Q3OSAyNmgzMjBxNDAgMCA3OSAtMjZ0NTQgLTYzbDcwIC0xNjdoMzA5cTE0IDAgMjMgLTl0OSAtMjN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMTU7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE0MDggNTQ0di00ODBxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0zODR2Mzg0aC0yNTZ2LTM4NGgtMzg0cS0yNiAwIC00NSAxOXQtMTkgNDV2NDgwcTAgMSAwLjUgM3QwLjUgM2w1NzUgNDc0bDU3NSAtNDc0cTEgLTIgMSAtNnpNMTYzMSA2MTNsLTYyIC03NHEtOCAtOSAtMjEgLTExaC0zcS0xMyAwIC0yMSA3bC02OTIgNTc3bC02OTIgLTU3N3EtMTIgLTggLTI0IC03cS0xMyAyIC0yMSAxMWwtNjIgNzRxLTggMTAgLTcgMjMuNXQxMSAyMS41IGw3MTkgNTk5cTMyIDI2IDc2IDI2dDc2IC0yNmwyNDQgLTIwNHYxOTVxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMgLTl0OSAtMjN2LTQwOGwyMTkgLTE4MnExMCAtOCAxMSAtMjEuNXQtNyAtMjMuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAxNjsiIGhvcml6LWFkdi14PSIxMjgwIiBkPSJNMTI4IDBoMTAyNHY3NjhoLTQxNnEtNDAgMCAtNjggMjh0LTI4IDY4djQxNmgtNTEydi0xMjgwek03NjggODk2aDI5OWwtMjk5IDI5OXYtMjk5ek0xMjgwIDc2OHYtODAwcTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTA4OHEtNDAgMCAtNjggMjh0LTI4IDY4djEzNDRxMCA0MCAyOCA2OHQ2OCAyOGg1NDRxNDAgMCA4OCAtMjB0NzYgLTQ4bDQwOCAtNDA4cTI4IC0yOCA0OCAtNzZ0MjAgLTg4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDE3OyIgZD0iTTEwODggNjA4di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTM4NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djQ0OHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXYtMzUyaDI4OHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTEyODAgNjQwcTAgMTA0IC00MC41IDE5OC41dC0xMDkuNSAxNjMuNXQtMTYzLjUgMTA5LjV0LTE5OC41IDQwLjV0LTE5OC41IC00MC41IHQtMTYzLjUgLTEwOS41dC0xMDkuNSAtMTYzLjV0LTQwLjUgLTE5OC41dDQwLjUgLTE5OC41dDEwOS41IC0xNjMuNXQxNjMuNSAtMTA5LjV0MTk4LjUgLTQwLjV0MTk4LjUgNDAuNXQxNjMuNSAxMDkuNXQxMDkuNSAxNjMuNXQ0MC41IDE5OC41ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNSB0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMTg7IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTExMTEgNTQwdjRsLTI0IDMyMHEtMSAxMyAtMTEgMjIuNXQtMjMgOS41aC0xODZxLTEzIDAgLTIzIC05LjV0LTExIC0yMi41bC0yNCAtMzIwdi00cS0xIC0xMiA4IC0yMHQyMSAtOGgyNDRxMTIgMCAyMSA4dDggMjB6TTE4NzAgNzNxMCAtNzMgLTQ2IC03M2gtNzA0cTEzIDAgMjIgOS41dDggMjIuNWwtMjAgMjU2cS0xIDEzIC0xMSAyMi41dC0yMyA5LjVoLTI3MnEtMTMgMCAtMjMgLTkuNXQtMTEgLTIyLjVsLTIwIC0yNTYgcS0xIC0xMyA4IC0yMi41dDIyIC05LjVoLTcwNHEtNDYgMCAtNDYgNzNxMCA1NCAyNiAxMTZsNDE3IDEwNDRxOCAxOSAyNiAzM3QzOCAxNGgzMzlxLTEzIDAgLTIzIC05LjV0LTExIC0yMi41bC0xNSAtMTkycS0xIC0xNCA4IC0yM3QyMiAtOWgxNjZxMTMgMCAyMiA5dDggMjNsLTE1IDE5MnEtMSAxMyAtMTEgMjIuNXQtMjMgOS41aDMzOXEyMCAwIDM4IC0xNHQyNiAtMzNsNDE3IC0xMDQ0cTI2IC02MiAyNiAtMTE2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDE5OyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xMzM5IDcyOXExNyAtNDEgLTE0IC03MGwtNDQ4IC00NDhxLTE4IC0xOSAtNDUgLTE5dC00NSAxOWwtNDQ4IDQ0OHEtMzEgMjkgLTE0IDcwcTE3IDM5IDU5IDM5aDI1NnY0NDhxMCAyNiAxOSA0NXQ0NSAxOWgyNTZxMjYgMCA0NSAtMTl0MTkgLTQ1di00NDhoMjU2cTQyIDAgNTkgLTM5ek0xNjMyIDUxMnExNCAwIDIzIC05dDkgLTIzdi01NzZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTYwMHEtMTQgMCAtMjMgOXQtOSAyM3Y1NzZxMCAxNCA5IDIzIHQyMyA5aDE5MnExNCAwIDIzIC05dDkgLTIzdi0zNTJoMTE1MnYzNTJxMCAxNCA5IDIzdDIzIDloMTkyeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDFhOyIgZD0iTTExMjAgNjA4cTAgLTEyIC0xMCAtMjRsLTMxOSAtMzE5cS05IC05IC0yMyAtOXQtMjMgOWwtMzIwIDMyMHEtOSA5IC05IDIzcTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTkydjM1MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDE5MnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV2LTM1MmgxOTJxMTQgMCAyMyAtOXQ5IC0yM3pNMTI4MCA2NDBxMCAxMDQgLTQwLjUgMTk4LjV0LTEwOS41IDE2My41dC0xNjMuNSAxMDkuNXQtMTk4LjUgNDAuNSB0LTE5OC41IC00MC41dC0xNjMuNSAtMTA5LjV0LTEwOS41IC0xNjMuNXQtNDAuNSAtMTk4LjV0NDAuNSAtMTk4LjV0MTA5LjUgLTE2My41dDE2My41IC0xMDkuNXQxOTguNSAtNDAuNXQxOTguNSA0MC41dDE2My41IDEwOS41dDEwOS41IDE2My41dDQwLjUgMTk4LjV6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41IHQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAxYjsiIGQ9Ik0xMTIwIDY3MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE5MnYtMzUycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTkycS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MzUyaC0xOTJxLTE0IDAgLTIzIDl0LTkgMjNxMCAxMiAxMCAyNGwzMTkgMzE5cTkgOSAyMyA5dDIzIC05bDMyMCAtMzIwcTkgLTkgOSAtMjN6TTEyODAgNjQwcTAgMTA0IC00MC41IDE5OC41dC0xMDkuNSAxNjMuNXQtMTYzLjUgMTA5LjUgdC0xOTguNSA0MC41dC0xOTguNSAtNDAuNXQtMTYzLjUgLTEwOS41dC0xMDkuNSAtMTYzLjV0LTQwLjUgLTE5OC41dDQwLjUgLTE5OC41dDEwOS41IC0xNjMuNXQxNjMuNSAtMTA5LjV0MTk4LjUgLTQwLjV0MTk4LjUgNDAuNXQxNjMuNSAxMDkuNXQxMDkuNSAxNjMuNXQ0MC41IDE5OC41ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41IHQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMWM7IiBkPSJNMTAyMyA1NzZoMzE2cS0xIDMgLTIuNSA4dC0yLjUgOGwtMjEyIDQ5NmgtNzA4bC0yMTIgLTQ5NnEtMSAtMiAtMi41IC04dC0yLjUgLThoMzE2bDk1IC0xOTJoMzIwek0xNTM2IDU0NnYtNDgycTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTQwOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djQ4MnEwIDYyIDI1IDEyM2wyMzggNTUycTEwIDI1IDM2LjUgNDJ0NTIuNSAxN2g4MzJxMjYgMCA1Mi41IC0xN3QzNi41IC00MmwyMzggLTU1MiBxMjUgLTYxIDI1IC0xMjN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMWQ7IiBkPSJNMTE1MiA2NDBxMCAtMzcgLTMzIC01NmwtNTEyIC0yODhxLTE0IC04IC0zMSAtOHQtMzIgOXEtMzIgMTggLTMyIDU1djU3NnEwIDM3IDMyIDU1cTMxIDIwIDYzIDFsNTEyIC0yODhxMzMgLTE5IDMzIC01NnpNMTI4MCA2NDBxMCAxMDQgLTQwLjUgMTk4LjV0LTEwOS41IDE2My41dC0xNjMuNSAxMDkuNXQtMTk4LjUgNDAuNXQtMTk4LjUgLTQwLjV0LTE2My41IC0xMDkuNXQtMTA5LjUgLTE2My41dC00MC41IC0xOTguNXQ0MC41IC0xOTguNSB0MTA5LjUgLTE2My41dDE2My41IC0xMDkuNXQxOTguNSAtNDAuNXQxOTguNSA0MC41dDE2My41IDEwOS41dDEwOS41IDE2My41dDQwLjUgMTk4LjV6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDFlOyIgZD0iTTE1MzYgMTI4MHYtNDQ4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtNDQ4cS00MiAwIC01OSA0MHEtMTcgMzkgMTQgNjlsMTM4IDEzOHEtMTQ4IDEzNyAtMzQ5IDEzN3EtMTA0IDAgLTE5OC41IC00MC41dC0xNjMuNSAtMTA5LjV0LTEwOS41IC0xNjMuNXQtNDAuNSAtMTk4LjV0NDAuNSAtMTk4LjV0MTA5LjUgLTE2My41dDE2My41IC0xMDkuNXQxOTguNSAtNDAuNXExNjkgMCAzMDQgOTkuNXQxODUgMjYxLjVxNyAyMyAzMCAyM2gxOTkgcTE2IDAgMjUgLTEycTEwIC0xMyA3IC0yN3EtMzkgLTE3NSAtMTQ3LjUgLTMxMnQtMjY2IC0yMTN0LTMzNi41IC03NnEtMTU2IDAgLTI5OCA2MXQtMjQ1IDE2NHQtMTY0IDI0NXQtNjEgMjk4dDYxIDI5OHQxNjQgMjQ1dDI0NSAxNjR0Mjk4IDYxcTE0NyAwIDI4NC41IC01NS41dDI0NC41IC0xNTYuNWwxMzAgMTI5cTI5IDMxIDcwIDE0cTM5IC0xNyAzOSAtNTl6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMjE7IiBkPSJNMTUxMSA0ODBxMCAtNSAtMSAtN3EtNjQgLTI2OCAtMjY4IC00MzQuNXQtNDc4IC0xNjYuNXEtMTQ2IDAgLTI4Mi41IDU1dC0yNDMuNSAxNTdsLTEyOSAtMTI5cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTl0LTE5IDQ1djQ0OHEwIDI2IDE5IDQ1dDQ1IDE5aDQ0OHEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NWwtMTM3IC0xMzdxNzEgLTY2IDE2MSAtMTAydDE4NyAtMzZxMTM0IDAgMjUwIDY1dDE4NiAxNzlxMTEgMTcgNTMgMTE3IHE4IDIzIDMwIDIzaDE5MnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE1MzYgMTI4MHYtNDQ4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtNDQ4cS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDVsMTM4IDEzOHEtMTQ4IDEzNyAtMzQ5IDEzN3EtMTM0IDAgLTI1MCAtNjV0LTE4NiAtMTc5cS0xMSAtMTcgLTUzIC0xMTdxLTggLTIzIC0zMCAtMjNoLTE5OXEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djdxNjUgMjY4IDI3MCA0MzQuNXQ0ODAgMTY2LjUgcTE0NiAwIDI4NCAtNTUuNXQyNDUgLTE1Ni41bDEzMCAxMjlxMTkgMTkgNDUgMTl0NDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyMjsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMzg0IDM1MnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0zODQgNjA4di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE0zODQgODY0di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE1MzYgMzUydi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTk2MHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoOTYwcTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXogTTE1MzYgNjA4di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTk2MHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoOTYwcTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTUzNiA4NjR2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtOTYwcS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg5NjBxMTMgMCAyMi41IC05LjUgdDkuNSAtMjIuNXpNMTY2NCAxNjB2ODMycTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtMTQ3MnEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTgzMnEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDE0NzJxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTc5MiAxMjQ4di0xMDg4cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xNDcycS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMDg4cTAgNjYgNDcgMTEzdDExMyA0N2gxNDcycTY2IDAgMTEzIC00NyB0NDcgLTExM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyMzsiIGhvcml6LWFkdi14PSIxMTUyIiBkPSJNNzA0IDUxMnEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXEwIC0zNyAxOSAtNjd0NTEgLTQ3bC02OSAtMjI5cS01IC0xNSA1IC0yOHQyNiAtMTNoMTkycTE2IDAgMjYgMTN0NSAyOGwtNjkgMjI5cTMyIDE3IDUxIDQ3dDE5IDY3ek0zMjAgNzY4aDUxMnYxOTJxMCAxMDYgLTc1IDE4MXQtMTgxIDc1dC0xODEgLTc1dC03NSAtMTgxdi0xOTJ6TTExNTIgNjcydi01NzZxMCAtNDAgLTI4IC02OCB0LTY4IC0yOGgtOTYwcS00MCAwIC02OCAyOHQtMjggNjh2NTc2cTAgNDAgMjggNjh0NjggMjhoMzJ2MTkycTAgMTg0IDEzMiAzMTZ0MzE2IDEzMnQzMTYgLTEzMnQxMzIgLTMxNnYtMTkyaDMycTQwIDAgNjggLTI4dDI4IC02OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyNDsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMzIwIDEyODBxMCAtNzIgLTY0IC0xMTB2LTEyNjZxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djEyNjZxLTY0IDM4IC02NCAxMTBxMCA1MyAzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNMTc5MiAxMjE2di03NjNxMCAtMjUgLTEyLjUgLTM4LjV0LTM5LjUgLTI3LjVxLTIxNSAtMTE2IC0zNjkgLTExNnEtNjEgMCAtMTIzLjUgMjJ0LTEwOC41IDQ4IHQtMTE1LjUgNDh0LTE0Mi41IDIycS0xOTIgMCAtNDY0IC0xNDZxLTE3IC05IC0zMyAtOXEtMjYgMCAtNDUgMTl0LTE5IDQ1djc0MnEwIDMyIDMxIDU1cTIxIDE0IDc5IDQzcTIzNiAxMjAgNDIxIDEyMHExMDcgMCAyMDAgLTI5dDIxOSAtODhxMzggLTE5IDg4IC0xOXE1NCAwIDExNy41IDIxdDExMCA0N3Q4OCA0N3Q1NC41IDIxcTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyNTsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTY2NCA2NTBxMCAtMTY2IC02MCAtMzE0bC0yMCAtNDlsLTE4NSAtMzNxLTIyIC04MyAtOTAuNSAtMTM2LjV0LTE1Ni41IC01My41di0zMnEwIC0xNCAtOSAtMjN0LTIzIC05aC02NHEtMTQgMCAtMjMgOXQtOSAyM3Y1NzZxMCAxNCA5IDIzdDIzIDloNjRxMTQgMCAyMyAtOXQ5IC0yM3YtMzJxNzEgMCAxMzAgLTM1LjV0OTMgLTk1LjVsNjggMTJxMjkgOTUgMjkgMTkzcTAgMTQ4IC04OCAyNzl0LTIzNi41IDIwOXQtMzE1LjUgNzggdC0zMTUuNSAtNzh0LTIzNi41IC0yMDl0LTg4IC0yNzlxMCAtOTggMjkgLTE5M2w2OCAtMTJxMzQgNjAgOTMgOTUuNXQxMzAgMzUuNXYzMnEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzIC05dDkgLTIzdi01NzZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2MzJxLTg4IDAgLTE1Ni41IDUzLjV0LTkwLjUgMTM2LjVsLTE4NSAzM2wtMjAgNDlxLTYwIDE0OCAtNjAgMzE0cTAgMTUxIDY3IDI5MXQxNzkgMjQyLjUgdDI2NiAxNjMuNXQzMjAgNjF0MzIwIC02MXQyNjYgLTE2My41dDE3OSAtMjQyLjV0NjcgLTI5MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyNjsiIGhvcml6LWFkdi14PSI3NjgiIGQ9Ik03NjggMTE4NHYtMTA4OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5bC0zMzMgMzMzaC0yNjJxLTI2IDAgLTQ1IDE5dC0xOSA0NXYzODRxMCAyNiAxOSA0NXQ0NSAxOWgyNjJsMzMzIDMzM3ExOSAxOSA0NSAxOXQ0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDI3OyIgaG9yaXotYWR2LXg9IjExNTIiIGQ9Ik03NjggMTE4NHYtMTA4OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5bC0zMzMgMzMzaC0yNjJxLTI2IDAgLTQ1IDE5dC0xOSA0NXYzODRxMCAyNiAxOSA0NXQ0NSAxOWgyNjJsMzMzIDMzM3ExOSAxOSA0NSAxOXQ0NSAtMTl0MTkgLTQ1ek0xMTUyIDY0MHEwIC03NiAtNDIuNSAtMTQxLjV0LTExMi41IC05My41cS0xMCAtNSAtMjUgLTVxLTI2IDAgLTQ1IDE4LjV0LTE5IDQ1LjVxMCAyMSAxMiAzNS41dDI5IDI1dDM0IDIzdDI5IDM1LjUgdDEyIDU3dC0xMiA1N3QtMjkgMzUuNXQtMzQgMjN0LTI5IDI1dC0xMiAzNS41cTAgMjcgMTkgNDUuNXQ0NSAxOC41cTE1IDAgMjUgLTVxNzAgLTI3IDExMi41IC05M3Q0Mi41IC0xNDJ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMjg7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTc2OCAxMTg0di0xMDg4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTlsLTMzMyAzMzNoLTI2MnEtMjYgMCAtNDUgMTl0LTE5IDQ1djM4NHEwIDI2IDE5IDQ1dDQ1IDE5aDI2MmwzMzMgMzMzcTE5IDE5IDQ1IDE5dDQ1IC0xOXQxOSAtNDV6TTExNTIgNjQwcTAgLTc2IC00Mi41IC0xNDEuNXQtMTEyLjUgLTkzLjVxLTEwIC01IC0yNSAtNXEtMjYgMCAtNDUgMTguNXQtMTkgNDUuNXEwIDIxIDEyIDM1LjV0MjkgMjV0MzQgMjN0MjkgMzUuNSB0MTIgNTd0LTEyIDU3dC0yOSAzNS41dC0zNCAyM3QtMjkgMjV0LTEyIDM1LjVxMCAyNyAxOSA0NS41dDQ1IDE4LjVxMTUgMCAyNSAtNXE3MCAtMjcgMTEyLjUgLTkzdDQyLjUgLTE0MnpNMTQwOCA2NDBxMCAtMTUzIC04NSAtMjgyLjV0LTIyNSAtMTg4LjVxLTEzIC01IC0yNSAtNXEtMjcgMCAtNDYgMTl0LTE5IDQ1cTAgMzkgMzkgNTlxNTYgMjkgNzYgNDRxNzQgNTQgMTE1LjUgMTM1LjV0NDEuNSAxNzMuNXQtNDEuNSAxNzMuNSB0LTExNS41IDEzNS41cS0yMCAxNSAtNzYgNDRxLTM5IDIwIC0zOSA1OXEwIDI2IDE5IDQ1dDQ1IDE5cTEzIDAgMjYgLTVxMTQwIC01OSAyMjUgLTE4OC41dDg1IC0yODIuNXpNMTY2NCA2NDBxMCAtMjMwIC0xMjcgLTQyMi41dC0zMzggLTI4My41cS0xMyAtNSAtMjYgLTVxLTI2IDAgLTQ1IDE5dC0xOSA0NXEwIDM2IDM5IDU5cTcgNCAyMi41IDEwLjV0MjIuNSAxMC41cTQ2IDI1IDgyIDUxcTEyMyA5MSAxOTIgMjI3dDY5IDI4OXQtNjkgMjg5IHQtMTkyIDIyN3EtMzYgMjYgLTgyIDUxcS03IDQgLTIyLjUgMTAuNXQtMjIuNSAxMC41cS0zOSAyMyAtMzkgNTlxMCAyNiAxOSA0NXQ0NSAxOXExMyAwIDI2IC01cTIxMSAtOTEgMzM4IC0yODMuNXQxMjcgLTQyMi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDI5OyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0zODQgMzg0di0xMjhoLTEyOHYxMjhoMTI4ek0zODQgMTE1MnYtMTI4aC0xMjh2MTI4aDEyOHpNMTE1MiAxMTUydi0xMjhoLTEyOHYxMjhoMTI4ek0xMjggMTI5aDM4NHYzODNoLTM4NHYtMzgzek0xMjggODk2aDM4NHYzODRoLTM4NHYtMzg0ek04OTYgODk2aDM4NHYzODRoLTM4NHYtMzg0ek02NDAgNjQwdi02NDBoLTY0MHY2NDBoNjQwek0xMTUyIDEyOHYtMTI4aC0xMjh2MTI4aDEyOHpNMTQwOCAxMjh2LTEyOGgtMTI4djEyOGgxMjh6IE0xNDA4IDY0MHYtMzg0aC0zODR2MTI4aC0xMjh2LTM4NGgtMTI4djY0MGgzODR2LTEyOGgxMjh2MTI4aDEyOHpNNjQwIDE0MDh2LTY0MGgtNjQwdjY0MGg2NDB6TTE0MDggMTQwOHYtNjQwaC02NDB2NjQwaDY0MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyYTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNjcyIDE0MDh2LTE1MzZoLTY0djE1MzZoNjR6TTE0MDggMTQwOHYtMTUzNmgtNjR2MTUzNmg2NHpNMTU2OCAxNDA4di0xNTM2aC02NHYxNTM2aDY0ek01NzYgMTQwOHYtMTUzNmgtNjR2MTUzNmg2NHpNMTI4MCAxNDA4di0xNTM2aC0yNTZ2MTUzNmgyNTZ6TTg5NiAxNDA4di0xNTM2aC0xMjh2MTUzNmgxMjh6TTQ0OCAxNDA4di0xNTM2aC0xMjh2MTUzNmgxMjh6TTE3OTIgMTQwOHYtMTUzNmgtMTI4djE1MzZoMTI4ek0yNTYgMTQwOHYtMTUzNiBoLTI1NnYxNTM2aDI1NnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyYjsiIGQ9Ik00NDggMTA4OHEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTUxNSA1MTJxMCAtNTMgLTM3IC05MGwtNDkxIC00OTJxLTM5IC0zNyAtOTEgLTM3cS01MyAwIC05MCAzN2wtNzE1IDcxNnEtMzggMzcgLTY0LjUgMTAxdC0yNi41IDExN3Y0MTZxMCA1MiAzOCA5MHQ5MCAzOGg0MTZxNTMgMCAxMTcgLTI2LjV0MTAyIC02NC41IGw3MTUgLTcxNHEzNyAtMzkgMzcgLTkxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDJjOyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik00NDggMTA4OHEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTUxNSA1MTJxMCAtNTMgLTM3IC05MGwtNDkxIC00OTJxLTM5IC0zNyAtOTEgLTM3cS01MyAwIC05MCAzN2wtNzE1IDcxNnEtMzggMzcgLTY0LjUgMTAxdC0yNi41IDExN3Y0MTZxMCA1MiAzOCA5MHQ5MCAzOGg0MTZxNTMgMCAxMTcgLTI2LjV0MTAyIC02NC41IGw3MTUgLTcxNHEzNyAtMzkgMzcgLTkxek0xODk5IDUxMnEwIC01MyAtMzcgLTkwbC00OTEgLTQ5MnEtMzkgLTM3IC05MSAtMzdxLTM2IDAgLTU5IDE0dC01MyA0NWw0NzAgNDcwcTM3IDM3IDM3IDkwcTAgNTIgLTM3IDkxbC03MTUgNzE0cS0zOCAzOCAtMTAyIDY0LjV0LTExNyAyNi41aDIyNHE1MyAwIDExNyAtMjYuNXQxMDIgLTY0LjVsNzE1IC03MTRxMzcgLTM5IDM3IC05MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyZDsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTYzOSAxMDU4cTQwIC01NyAxOCAtMTI5bC0yNzUgLTkwNnEtMTkgLTY0IC03Ni41IC0xMDcuNXQtMTIyLjUgLTQzLjVoLTkyM3EtNzcgMCAtMTQ4LjUgNTMuNXQtOTkuNSAxMzEuNXEtMjQgNjcgLTIgMTI3cTAgNCAzIDI3dDQgMzdxMSA4IC0zIDIxLjV0LTMgMTkuNXEyIDExIDggMjF0MTYuNSAyMy41dDE2LjUgMjMuNXEyMyAzOCA0NSA5MS41dDMwIDkxLjVxMyAxMCAwLjUgMzB0LTAuNSAyOHEzIDExIDE3IDI4dDE3IDIzIHEyMSAzNiA0MiA5MnQyNSA5MHExIDkgLTIuNSAzMnQwLjUgMjhxNCAxMyAyMiAzMC41dDIyIDIyLjVxMTkgMjYgNDIuNSA4NC41dDI3LjUgOTYuNXExIDggLTMgMjUuNXQtMiAyNi41cTIgOCA5IDE4dDE4IDIzdDE3IDIxcTggMTIgMTYuNSAzMC41dDE1IDM1dDE2IDM2dDE5LjUgMzJ0MjYuNSAyMy41dDM2IDExLjV0NDcuNSAtNS41bC0xIC0zcTM4IDkgNTEgOWg3NjFxNzQgMCAxMTQgLTU2dDE4IC0xMzBsLTI3NCAtOTA2IHEtMzYgLTExOSAtNzEuNSAtMTUzLjV0LTEyOC41IC0zNC41aC04NjlxLTI3IDAgLTM4IC0xNXEtMTEgLTE2IC0xIC00M3EyNCAtNzAgMTQ0IC03MGg5MjNxMjkgMCA1NiAxNS41dDM1IDQxLjVsMzAwIDk4N3E3IDIyIDUgNTdxMzggLTE1IDU5IC00M3pNNTc1IDEwNTZxLTQgLTEzIDIgLTIyLjV0MjAgLTkuNWg2MDhxMTMgMCAyNS41IDkuNXQxNi41IDIyLjVsMjEgNjRxNCAxMyAtMiAyMi41dC0yMCA5LjVoLTYwOHEtMTMgMCAtMjUuNSAtOS41IHQtMTYuNSAtMjIuNXpNNDkyIDgwMHEtNCAtMTMgMiAtMjIuNXQyMCAtOS41aDYwOHExMyAwIDI1LjUgOS41dDE2LjUgMjIuNWwyMSA2NHE0IDEzIC0yIDIyLjV0LTIwIDkuNWgtNjA4cS0xMyAwIC0yNS41IC05LjV0LTE2LjUgLTIyLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMmU7IiBob3Jpei1hZHYteD0iMTI4MCIgZD0iTTExNjQgMTQwOHEyMyAwIDQ0IC05cTMzIC0xMyA1Mi41IC00MXQxOS41IC02MnYtMTI4OXEwIC0zNCAtMTkuNSAtNjJ0LTUyLjUgLTQxcS0xOSAtOCAtNDQgLThxLTQ4IDAgLTgzIDMybC00NDEgNDI0bC00NDEgLTQyNHEtMzYgLTMzIC04MyAtMzNxLTIzIDAgLTQ0IDlxLTMzIDEzIC01Mi41IDQxdC0xOS41IDYydjEyODlxMCAzNCAxOS41IDYydDUyLjUgNDFxMjEgOSA0NCA5aDEwNDh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMmY7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTM4NCAwaDg5NnYyNTZoLTg5NnYtMjU2ek0zODQgNjQwaDg5NnYzODRoLTE2MHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MGgtNjQwdi02NDB6TTE1MzYgNTc2cTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTY2NCA1NzZ2LTQxNnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTIyNHYtMTYwcTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtOTYwcS00MCAwIC02OCAyOHQtMjggNjggdjE2MGgtMjI0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NDE2cTAgNzkgNTYuNSAxMzUuNXQxMzUuNSA1Ni41aDY0djU0NHEwIDQwIDI4IDY4dDY4IDI4aDY3MnE0MCAwIDg4IC0yMHQ3NiAtNDhsMTUyIC0xNTJxMjggLTI4IDQ4IC03NnQyMCAtODh2LTI1Nmg2NHE3OSAwIDEzNS41IC01Ni41dDU2LjUgLTEzNS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDMwOyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik05NjAgODY0cTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41dC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjV0LTIwMy41IDg0LjV0LTg0LjUgMjAzLjV0ODQuNSAyMDMuNXQyMDMuNSA4NC41ek0xNjY0IDEyODBxMTA2IDAgMTgxIC03NXQ3NSAtMTgxdi04OTZxMCAtMTA2IC03NSAtMTgxdC0xODEgLTc1aC0xNDA4cS0xMDYgMCAtMTgxIDc1dC03NSAxODF2ODk2cTAgMTA2IDc1IDE4MXQxODEgNzVoMjI0bDUxIDEzNiBxMTkgNDkgNjkuNSA4NC41dDEwMy41IDM1LjVoNTEycTUzIDAgMTAzLjUgLTM1LjV0NjkuNSAtODQuNWw1MSAtMTM2aDIyNHpNOTYwIDEyOHExODUgMCAzMTYuNSAxMzEuNXQxMzEuNSAzMTYuNXQtMTMxLjUgMzE2LjV0LTMxNi41IDEzMS41dC0zMTYuNSAtMTMxLjV0LTEzMS41IC0zMTYuNXQxMzEuNSAtMzE2LjV0MzE2LjUgLTEzMS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDMxOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik03MjUgOTc3bC0xNzAgLTQ1MHE3MyAtMSAxNTMuNSAtMnQxMTkgLTEuNXQ1Mi41IC0wLjVsMjkgMnEtMzIgOTUgLTkyIDI0MXEtNTMgMTMyIC05MiAyMTF6TTIxIC0xMjhoLTIxbDIgNzlxMjIgNyA4MCAxOHE4OSAxNiAxMTAgMzFxMjAgMTYgNDggNjhsMjM3IDYxNmwyODAgNzI0aDc1aDUzbDExIC0yMWwyMDUgLTQ4MHExMDMgLTI0MiAxMjQgLTI5N3EzOSAtMTAyIDk2IC0yMzVxMjYgLTU4IDY1IC0xNjRxMjQgLTY3IDY1IC0xNDkgcTIyIC00OSAzNSAtNTdxMjIgLTE5IDY5IC0yM3E0NyAtNiAxMDMgLTI3cTYgLTM5IDYgLTU3cTAgLTE0IC0xIC0yNnEtODAgMCAtMTkyIDhxLTkzIDggLTE4OSA4cS03OSAwIC0xMzUgLTJsLTIwMCAtMTFsLTU4IC0ycTAgNDUgNCA3OGwxMzEgMjhxNTYgMTMgNjggMjNxMTIgMTIgMTIgMjd0LTYgMzJsLTQ3IDExNGwtOTIgMjI4bC00NTAgMnEtMjkgLTY1IC0xMDQgLTI3NHEtMjMgLTY0IC0yMyAtODRxMCAtMzEgMTcgLTQzIHEyNiAtMjEgMTAzIC0zMnEzIDAgMTMuNSAtMnQzMCAtNXQ0MC41IC02cTEgLTI4IDEgLTU4cTAgLTE3IC0yIC0yN3EtNjYgMCAtMzQ5IDIwbC00OCAtOHEtODEgLTE0IC0xNjcgLTE0eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDMyOyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik01NTUgMTVxNzYgLTMyIDE0MCAtMzJxMTMxIDAgMjE2IDQxdDEyMiAxMTNxMzggNzAgMzggMTgxcTAgMTE0IC00MSAxODBxLTU4IDk0IC0xNDEgMTI2cS04MCAzMiAtMjQ3IDMycS03NCAwIC0xMDEgLTEwdi0xNDRsLTEgLTE3M2wzIC0yNzBxMCAtMTUgMTIgLTQ0ek01NDEgNzYxcTQzIC03IDEwOSAtN3ExNzUgMCAyNjQgNjV0ODkgMjI0cTAgMTEyIC04NSAxODdxLTg0IDc1IC0yNTUgNzVxLTUyIDAgLTEzMCAtMTNxMCAtNDQgMiAtNzcgcTcgLTEyMiA2IC0yNzlsLTEgLTk4cTAgLTQzIDEgLTc3ek0wIC0xMjhsMiA5NHE0NSA5IDY4IDEycTc3IDEyIDEyMyAzMXExNyAyNyAyMSA1MXE5IDY2IDkgMTk0bC0yIDQ5N3EtNSAyNTYgLTkgNDA0cS0xIDg3IC0xMSAxMDlxLTEgNCAtMTIgMTJxLTE4IDEyIC02OSAxNXEtMzAgMiAtMTE0IDEzbC00IDgzbDI2MCA2bDM4MCAxM2w0NSAxcTUgMCAxNCAwLjV0MTQgMC41cTEgMCAyMS41IC0wLjV0NDAuNSAtMC41aDc0cTg4IDAgMTkxIC0yNyBxNDMgLTEzIDk2IC0zOXE1NyAtMjkgMTAyIC03NnE0NCAtNDcgNjUgLTEwNHQyMSAtMTIycTAgLTcwIC0zMiAtMTI4dC05NSAtMTA1cS0yNiAtMjAgLTE1MCAtNzdxMTc3IC00MSAyNjcgLTE0NnE5MiAtMTA2IDkyIC0yMzZxMCAtNzYgLTI5IC0xNjFxLTIxIC02MiAtNzEgLTExN3EtNjYgLTcyIC0xNDAgLTEwOHEtNzMgLTM2IC0yMDMgLTYwcS04MiAtMTUgLTE5OCAtMTFsLTE5NyA0cS04NCAyIC0yOTggLTExcS0zMyAtMyAtMjcyIC0xMXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAzMzsiIGhvcml6LWFkdi14PSIxMDI0IiBkPSJNMCAtMTI2bDE3IDg1cTQgMSA3NyAyMHE3NiAxOSAxMTYgMzlxMjkgMzcgNDEgMTAxbDI3IDEzOWw1NiAyNjhsMTIgNjRxOCA0NCAxNyA4NC41dDE2IDY3dDEyLjUgNDYuNXQ5IDMwLjV0My41IDExLjVsMjkgMTU3bDE2IDYzbDIyIDEzNWw4IDUwdjM4cS00MSAyMiAtMTQ0IDI4cS0yOCAyIC0zOCA0bDE5IDEwM2wzMTcgLTE0cTM5IC0yIDczIC0ycTY2IDAgMjE0IDlxMzMgMiA2OCA0LjV0MzYgMi41cS0yIC0xOSAtNiAtMzggcS03IC0yOSAtMTMgLTUxcS01NSAtMTkgLTEwOSAtMzFxLTY0IC0xNiAtMTAxIC0zMXEtMTIgLTMxIC0yNCAtODhxLTkgLTQ0IC0xMyAtODJxLTQ0IC0xOTkgLTY2IC0zMDZsLTYxIC0zMTFsLTM4IC0xNThsLTQzIC0yMzVsLTEyIC00NXEtMiAtNyAxIC0yN3E2NCAtMTUgMTE5IC0yMXEzNiAtNSA2NiAtMTBxLTEgLTI5IC03IC01OHEtNyAtMzEgLTkgLTQxcS0xOCAwIC0yMyAtMXEtMjQgLTIgLTQyIC0ycS05IDAgLTI4IDNxLTE5IDQgLTE0NSAxNyBsLTE5OCAycS00MSAxIC0xNzQgLTExcS03NCAtNyAtOTggLTl6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMzQ7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTgxIDE0MDdsNTQgLTI3cTIwIC01IDIxMSAtNWgxMzBsMTkgM2wxMTUgMWwyMTUgLTFoMjkzbDM0IC0ycTE0IC0xIDI4IDd0MjEgMTZsNyA4bDQyIDFxMTUgMCAyOCAtMXYtMTA0LjV0MSAtMTMxLjVsMSAtMTAwbC0xIC01OHEwIC0zMiAtNCAtNTFxLTM5IC0xNSAtNjggLTE4cS0yNSA0MyAtNTQgMTI4cS04IDI0IC0xNS41IDYyLjV0LTExLjUgNjUuNXQtNiAyOXEtMTMgMTUgLTI3IDE5cS03IDIgLTQyLjUgMnQtMTAzLjUgLTF0LTExMSAtMSBxLTM0IDAgLTY3IC01cS0xMCAtOTcgLTggLTEzNmwxIC0xNTJ2LTMzMmwzIC0zNTlsLTEgLTE0N3EtMSAtNDYgMTEgLTg1cTQ5IC0yNSA4OSAtMzJxMiAwIDE4IC01dDQ0IC0xM3Q0MyAtMTJxMzAgLTggNTAgLTE4cTUgLTQ1IDUgLTUwcTAgLTEwIC0zIC0yOXEtMTQgLTEgLTM0IC0xcS0xMTAgMCAtMTg3IDEwcS03MiA4IC0yMzggOHEtODggMCAtMjMzIC0xNHEtNDggLTQgLTcwIC00cS0yIDIyIC0yIDI2bC0xIDI2djlxMjEgMzMgNzkgNDkgcTEzOSAzOCAxNTkgNTBxOSAyMSAxMiA1NnE4IDE5MiA2IDQzM2wtNSA0MjhxLTEgNjIgLTAuNSAxMTguNXQwLjUgMTAyLjV0LTIgNTd0LTYgMTVxLTYgNSAtMTQgNnEtMzggNiAtMTQ4IDZxLTQzIDAgLTEwMCAtMTMuNXQtNzMgLTI0LjVxLTEzIC05IC0yMiAtMzN0LTIyIC03NXQtMjQgLTg0cS02IC0xOSAtMTkuNSAtMzJ0LTIwLjUgLTEzcS00NCAyNyAtNTYgNDR2Mjk3djg2ek0xNzQ0IDEyOHEzMyAwIDQyIC0xOC41dC0xMSAtNDQuNSBsLTEyNiAtMTYycS0yMCAtMjYgLTQ5IC0yNnQtNDkgMjZsLTEyNiAxNjJxLTIwIDI2IC0xMSA0NC41dDQyIDE4LjVoODB2MTAyNGgtODBxLTMzIDAgLTQyIDE4LjV0MTEgNDQuNWwxMjYgMTYycTIwIDI2IDQ5IDI2dDQ5IC0yNmwxMjYgLTE2MnEyMCAtMjYgMTEgLTQ0LjV0LTQyIC0xOC41aC04MHYtMTAyNGg4MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAzNTsiIGQ9Ik04MSAxNDA3bDU0IC0yN3EyMCAtNSAyMTEgLTVoMTMwbDE5IDNsMTE1IDFsNDQ2IC0xaDMxOGwzNCAtMnExNCAtMSAyOCA3dDIxIDE2bDcgOGw0MiAxcTE1IDAgMjggLTF2LTEwNC41dDEgLTEzMS41bDEgLTEwMGwtMSAtNThxMCAtMzIgLTQgLTUxcS0zOSAtMTUgLTY4IC0xOHEtMjUgNDMgLTU0IDEyOHEtOCAyNCAtMTUuNSA2Mi41dC0xMS41IDY1LjV0LTYgMjlxLTEzIDE1IC0yNyAxOXEtNyAyIC01OC41IDJ0LTEzOC41IC0xdC0xMjggLTEgcS05NCAwIC0xMjcgLTVxLTEwIC05NyAtOCAtMTM2bDEgLTE1MnY1MmwzIC0zNTlsLTEgLTE0N3EtMSAtNDYgMTEgLTg1cTQ5IC0yNSA4OSAtMzJxMiAwIDE4IC01dDQ0IC0xM3Q0MyAtMTJxMzAgLTggNTAgLTE4cTUgLTQ1IDUgLTUwcTAgLTEwIC0zIC0yOXEtMTQgLTEgLTM0IC0xcS0xMTAgMCAtMTg3IDEwcS03MiA4IC0yMzggOHEtODIgMCAtMjMzIC0xM3EtNDUgLTUgLTcwIC01cS0yIDIyIC0yIDI2bC0xIDI2djlxMjEgMzMgNzkgNDkgcTEzOSAzOCAxNTkgNTBxOSAyMSAxMiA1NnE2IDEzNyA2IDQzM2wtNSA0NHEwIDI2NSAtMiAyNzhxLTIgMTEgLTYgMTVxLTYgNSAtMTQgNnEtMzggNiAtMTQ4IDZxLTUwIDAgLTE2OC41IC0xNHQtMTMyLjUgLTI0cS0xMyAtOSAtMjIgLTMzdC0yMiAtNzV0LTI0IC04NHEtNiAtMTkgLTE5LjUgLTMydC0yMC41IC0xM3EtNDQgMjcgLTU2IDQ0djI5N3Y4NnpNMTUwNSAxMTNxMjYgLTIwIDI2IC00OXQtMjYgLTQ5bC0xNjIgLTEyNiBxLTI2IC0yMCAtNDQuNSAtMTF0LTE4LjUgNDJ2ODBoLTEwMjR2LTgwcTAgLTMzIC0xOC41IC00MnQtNDQuNSAxMWwtMTYyIDEyNnEtMjYgMjAgLTI2IDQ5dDI2IDQ5bDE2MiAxMjZxMjYgMjAgNDQuNSAxMXQxOC41IC00MnYtODBoMTAyNHY4MHEwIDMzIDE4LjUgNDJ0NDQuNSAtMTF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMzY7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgMTkydi0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNjY0cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE0MDggNTc2di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjgwcS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTI4MHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE2NjQgOTYwdi0xMjhxMCAtMjYgLTE5IC00NSB0LTQ1IC0xOWgtMTUzNnEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE1MzZxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xMjgwIDEzNDR2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTExNTJxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxMTUycTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAzNzsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc5MiAxOTJ2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE2NjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNjY0cTI2IDAgNDUgLTE5dDE5IC00NXpNMTQwOCA1NzZ2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTg5NnEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDg5NnEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE2NjQgOTYwdi0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5IGgtMTQwOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE0MDhxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xMjgwIDEzNDR2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTY0MHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDY0MHEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMzg7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgMTkydi0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNjY0cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE3OTIgNTc2di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjgwcS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTI4MHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE3OTIgOTYwdi0xMjhxMCAtMjYgLTE5IC00NSB0LTQ1IC0xOWgtMTUzNnEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE1MzZxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNzkyIDEzNDR2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTExNTJxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxMTUycTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAzOTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc5MiAxOTJ2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE2NjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNjY0cTI2IDAgNDUgLTE5dDE5IC00NXpNMTc5MiA1NzZ2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE2NjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNjY0cTI2IDAgNDUgLTE5dDE5IC00NXpNMTc5MiA5NjB2LTEyOHEwIC0yNiAtMTkgLTQ1IHQtNDUgLTE5aC0xNjY0cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE3OTIgMTM0NHYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTY2NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE2NjRxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDNhOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0yNTYgMjI0di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xOTJxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxOTJxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0yNTYgNjA4di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xOTJxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxOTJxMTMgMCAyMi41IC05LjUgdDkuNSAtMjIuNXpNMjU2IDk5MnYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTkycS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTkycTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTc5MiAyMjR2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEzNDRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxMzQ0IHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTI1NiAxMzc2di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xOTJxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxOTJxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNzkyIDYwOHYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTM0NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41IHQyMi41IDkuNWgxMzQ0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTc5MiA5OTJ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEzNDRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxMzQ0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTc5MiAxMzc2di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMzQ0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkyIHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEzNDRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDNiOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0zODQgOTkydi01NzZxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41cS0xNCAwIC0yMyA5bC0yODggMjg4cS05IDkgLTkgMjN0OSAyM2wyODggMjg4cTkgOSAyMyA5cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTc5MiAyMjR2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE3MjhxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxNzI4cTEzIDAgMjIuNSAtOS41IHQ5LjUgLTIyLjV6TTE3OTIgNjA4di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMDg4cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTA4OHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE3OTIgOTkydi0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMDg4cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTA4OCBxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNzkyIDEzNzZ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE3MjhxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxNzI4cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAzYzsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMzUyIDcwNHEwIC0xNCAtOSAtMjNsLTI4OCAtMjg4cS05IC05IC0yMyAtOXEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djU3NnEwIDEzIDkuNSAyMi41dDIyLjUgOS41cTE0IDAgMjMgLTlsMjg4IC0yODhxOSAtOSA5IC0yM3pNMTc5MiAyMjR2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE3MjhxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxNzI4cTEzIDAgMjIuNSAtOS41IHQ5LjUgLTIyLjV6TTE3OTIgNjA4di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMDg4cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTA4OHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE3OTIgOTkydi0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMDg4cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTA4OCBxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNzkyIDEzNzZ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE3MjhxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxNzI4cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAzZDsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNMTkwMCAxMjc4cTIwIC04IDIwIC0zMHYtMTIxNnEwIC0yMiAtMjAgLTMwcS04IC0yIC0xMiAtMnEtMTIgMCAtMjMgOWwtNTg1IDU4NnYtMzA3cTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC03MDRxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djcwNHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoNzA0cTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41di0zMDdsNTg1IDU4NnExNiAxNSAzNSA3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDNlOyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik02NDAgOTYwcTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnpNMTY2NCA1NzZ2LTQ0OGgtMTQwOHYxOTJsMzIwIDMyMGwxNjAgLTE2MGw1MTIgNTEyek0xNzYwIDEyODBoLTE2MDBxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di0xMjE2cTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTYwMHExMyAwIDIyLjUgOS41dDkuNSAyMi41djEyMTYgcTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNXpNMTkyMCAxMjQ4di0xMjE2cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xNjAwcS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMjE2cTAgNjYgNDcgMTEzdDExMyA0N2gxNjAwcTY2IDAgMTEzIC00N3Q0NyAtMTEzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDQwOyIgZD0iTTM2MyAwbDkxIDkxbC0yMzUgMjM1bC05MSAtOTF2LTEwN2gxMjh2LTEyOGgxMDd6TTg4NiA5MjhxMCAyMiAtMjIgMjJxLTEwIDAgLTE3IC03bC01NDIgLTU0MnEtNyAtNyAtNyAtMTdxMCAtMjIgMjIgLTIycTEwIDAgMTcgN2w1NDIgNTQycTcgNyA3IDE3ek04MzIgMTEyMGw0MTYgLTQxNmwtODMyIC04MzJoLTQxNnY0MTZ6TTE1MTUgMTAyNHEwIC01MyAtMzcgLTkwbC0xNjYgLTE2NmwtNDE2IDQxNmwxNjYgMTY1cTM2IDM4IDkwIDM4IHE1MyAwIDkxIC0zOGwyMzUgLTIzNHEzNyAtMzkgMzcgLTkxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDQxOyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik03NjggODk2cTAgMTA2IC03NSAxODF0LTE4MSA3NXQtMTgxIC03NXQtNzUgLTE4MXQ3NSAtMTgxdDE4MSAtNzV0MTgxIDc1dDc1IDE4MXpNMTAyNCA4OTZxMCAtMTA5IC0zMyAtMTc5bC0zNjQgLTc3NHEtMTYgLTMzIC00Ny41IC01MnQtNjcuNSAtMTl0LTY3LjUgMTl0LTQ2LjUgNTJsLTM2NSA3NzRxLTMzIDcwIC0zMyAxNzlxMCAyMTIgMTUwIDM2MnQzNjIgMTUwdDM2MiAtMTUwdDE1MCAtMzYyeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDQyOyIgZD0iTTc2OCAxNDA4cTIwOSAwIDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV0LTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN6TTI1NiA2NDBxMCAtMTA0IDQwLjUgLTE5OC41dDEwOS41IC0xNjMuNXQxNjMuNSAtMTA5LjV0MTk4LjUgLTQwLjV2MTAyNHEtMTA0IDAgLTE5OC41IC00MC41IHQtMTYzLjUgLTEwOS41dC0xMDkuNSAtMTYzLjV0LTQwLjUgLTE5OC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDQzOyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik01MTIgMzg0cTAgMzYgLTIwIDY5cS0xIDEgLTE1LjUgMjIuNXQtMjUuNSAzOHQtMjUgNDR0LTIxIDUwLjVxLTQgMTYgLTIxIDE2dC0yMSAtMTZxLTcgLTIzIC0yMSAtNTAuNXQtMjUgLTQ0dC0yNS41IC0zOHQtMTUuNSAtMjIuNXEtMjAgLTMzIC0yMCAtNjlxMCAtNTMgMzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTEwMjQgNTEycTAgLTIxMiAtMTUwIC0zNjJ0LTM2MiAtMTUwdC0zNjIgMTUwdC0xNTAgMzYyIHEwIDE0NSA4MSAyNzVxNiA5IDYyLjUgOTAuNXQxMDEgMTUxdDk5LjUgMTc4dDgzIDIwMS41cTkgMzAgMzQgNDd0NTEgMTd0NTEuNSAtMTd0MzMuNSAtNDdxMjggLTkzIDgzIC0yMDEuNXQ5OS41IC0xNzh0MTAxIC0xNTF0NjIuNSAtOTAuNXE4MSAtMTI3IDgxIC0yNzV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNDQ7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTg4OCAzNTJsMTE2IDExNmwtMTUyIDE1MmwtMTE2IC0xMTZ2LTU2aDk2di05Nmg1NnpNMTMyOCAxMDcycS0xNiAxNiAtMzMgLTFsLTM1MCAtMzUwcS0xNyAtMTcgLTEgLTMzdDMzIDFsMzUwIDM1MHExNyAxNyAxIDMzek0xNDA4IDQ3OHYtMTkwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC04MzJxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djgzMnEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoODMyIHE2MyAwIDExNyAtMjVxMTUgLTcgMTggLTIzcTMgLTE3IC05IC0yOWwtNDkgLTQ5cS0xNCAtMTQgLTMyIC04cS0yMyA2IC00NSA2aC04MzJxLTY2IDAgLTExMyAtNDd0LTQ3IC0xMTN2LTgzMnEwIC02NiA0NyAtMTEzdDExMyAtNDdoODMycTY2IDAgMTEzIDQ3dDQ3IDExM3YxMjZxMCAxMyA5IDIybDY0IDY0cTE1IDE1IDM1IDd0MjAgLTI5ek0xMzEyIDEyMTZsMjg4IC0yODhsLTY3MiAtNjcyaC0yODh2Mjg4ek0xNzU2IDEwODRsLTkyIC05MiBsLTI4OCAyODhsOTIgOTJxMjggMjggNjggMjh0NjggLTI4bDE1MiAtMTUycTI4IC0yOCAyOCAtNjh0LTI4IC02OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA0NTsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTQwOCA1NDd2LTI1OXEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtODMycS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY4MzJxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDI1NXYwcTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXEwIC0yNyAtMjYgLTMycS03NyAtMjYgLTEzMyAtNjBxLTEwIC00IC0xNiAtNGgtMTEycS02NiAwIC0xMTMgLTQ3dC00NyAtMTEzdi04MzJxMCAtNjYgNDcgLTExM3QxMTMgLTQ3aDgzMiBxNjYgMCAxMTMgNDd0NDcgMTEzdjIxNHEwIDE5IDE4IDI5cTI4IDEzIDU0IDM3cTE2IDE2IDM1IDhxMjEgLTkgMjEgLTI5ek0xNjQ1IDEwNDNsLTM4NCAtMzg0cS0xOCAtMTkgLTQ1IC0xOXEtMTIgMCAtMjUgNXEtMzkgMTcgLTM5IDU5djE5MmgtMTYwcS0zMjMgMCAtNDM4IC0xMzFxLTExOSAtMTM3IC03NCAtNDczcTMgLTIzIC0yMCAtMzRxLTggLTIgLTEyIC0ycS0xNiAwIC0yNiAxM3EtMTAgMTQgLTIxIDMxdC0zOS41IDY4LjV0LTQ5LjUgOTkuNSB0LTM4LjUgMTE0dC0xNy41IDEyMnEwIDQ5IDMuNSA5MXQxNCA5MHQyOCA4OHQ0NyA4MS41dDY4LjUgNzR0OTQuNSA2MS41dDEyNC41IDQ4LjV0MTU5LjUgMzAuNXQxOTYuNSAxMWgxNjB2MTkycTAgNDIgMzkgNTlxMTMgNSAyNSA1cTI2IDAgNDUgLTE5bDM4NCAtMzg0cTE5IC0xOSAxOSAtNDV0LTE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA0NjsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTQwOCA2MDZ2LTMxOHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtODMycS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY4MzJxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDgzMnE2MyAwIDExNyAtMjVxMTUgLTcgMTggLTIzcTMgLTE3IC05IC0yOWwtNDkgLTQ5cS0xMCAtMTAgLTIzIC0xMHEtMyAwIC05IDJxLTIzIDYgLTQ1IDZoLTgzMnEtNjYgMCAtMTEzIC00N3QtNDcgLTExM3YtODMyIHEwIC02NiA0NyAtMTEzdDExMyAtNDdoODMycTY2IDAgMTEzIDQ3dDQ3IDExM3YyNTRxMCAxMyA5IDIybDY0IDY0cTEwIDEwIDIzIDEwcTYgMCAxMiAtM3EyMCAtOCAyMCAtMjl6TTE2MzkgMTA5NWwtODE0IC04MTRxLTI0IC0yNCAtNTcgLTI0dC01NyAyNGwtNDMwIDQzMHEtMjQgMjQgLTI0IDU3dDI0IDU3bDExMCAxMTBxMjQgMjQgNTcgMjR0NTcgLTI0bDI2MyAtMjYzbDY0NyA2NDdxMjQgMjQgNTcgMjR0NTcgLTI0bDExMCAtMTEwIHEyNCAtMjQgMjQgLTU3dC0yNCAtNTd6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNDc7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgNjQwcTAgLTI2IC0xOSAtNDVsLTI1NiAtMjU2cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTl0LTE5IDQ1djEyOGgtMzg0di0zODRoMTI4cTI2IDAgNDUgLTE5dDE5IC00NXQtMTkgLTQ1bC0yNTYgLTI1NnEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5bC0yNTYgMjU2cS0xOSAxOSAtMTkgNDV0MTkgNDV0NDUgMTloMTI4djM4NGgtMzg0di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOWwtMjU2IDI1NnEtMTkgMTkgLTE5IDQ1IHQxOSA0NWwyNTYgMjU2cTE5IDE5IDQ1IDE5dDQ1IC0xOXQxOSAtNDV2LTEyOGgzODR2Mzg0aC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NWwyNTYgMjU2cTE5IDE5IDQ1IDE5dDQ1IC0xOWwyNTYgLTI1NnExOSAtMTkgMTkgLTQ1dC0xOSAtNDV0LTQ1IC0xOWgtMTI4di0zODRoMzg0djEyOHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOWwyNTYgLTI1NnExOSAtMTkgMTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDQ4OyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik05NzkgMTM5NXExOSAxOSAzMiAxM3QxMyAtMzJ2LTE0NzJxMCAtMjYgLTEzIC0zMnQtMzIgMTNsLTcxMCA3MTBxLTkgOSAtMTMgMTl2LTY3OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTEyOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djE0MDhxMCAyNiAxOSA0NXQ0NSAxOWgxMjhxMjYgMCA0NSAtMTl0MTkgLTQ1di02NzhxNCAxMSAxMyAxOXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA0OTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc0NyAxMzk1cTE5IDE5IDMyIDEzdDEzIC0zMnYtMTQ3MnEwIC0yNiAtMTMgLTMydC0zMiAxM2wtNzEwIDcxMHEtOSA5IC0xMyAxOXYtNzEwcTAgLTI2IC0xMyAtMzJ0LTMyIDEzbC03MTAgNzEwcS05IDkgLTEzIDE5di02NzhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxNDA4cTAgMjYgMTkgNDV0NDUgMTloMTI4cTI2IDAgNDUgLTE5dDE5IC00NXYtNjc4cTQgMTEgMTMgMTlsNzEwIDcxMCBxMTkgMTkgMzIgMTN0MTMgLTMydi03MTBxNCAxMSAxMyAxOXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA0YTsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTYxOSAxMzk1cTE5IDE5IDMyIDEzdDEzIC0zMnYtMTQ3MnEwIC0yNiAtMTMgLTMydC0zMiAxM2wtNzEwIDcxMHEtOCA5IC0xMyAxOXYtNzEwcTAgLTI2IC0xMyAtMzJ0LTMyIDEzbC03MTAgNzEwcS0xOSAxOSAtMTkgNDV0MTkgNDVsNzEwIDcxMHExOSAxOSAzMiAxM3QxMyAtMzJ2LTcxMHE1IDExIDEzIDE5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDRiOyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xMzg0IDYwOWwtMTMyOCAtNzM4cS0yMyAtMTMgLTM5LjUgLTN0LTE2LjUgMzZ2MTQ3MnEwIDI2IDE2LjUgMzZ0MzkuNSAtM2wxMzI4IC03MzhxMjMgLTEzIDIzIC0zMXQtMjMgLTMxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDRjOyIgZD0iTTE1MzYgMTM0NHYtMTQwOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTUxMnEtMjYgMCAtNDUgMTl0LTE5IDQ1djE0MDhxMCAyNiAxOSA0NXQ0NSAxOWg1MTJxMjYgMCA0NSAtMTl0MTkgLTQ1ek02NDAgMTM0NHYtMTQwOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTUxMnEtMjYgMCAtNDUgMTl0LTE5IDQ1djE0MDhxMCAyNiAxOSA0NXQ0NSAxOWg1MTJxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDRkOyIgZD0iTTE1MzYgMTM0NHYtMTQwOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE0MDhxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxNDA4cTAgMjYgMTkgNDV0NDUgMTloMTQwOHEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNGU7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTQ1IC0xMTVxLTE5IC0xOSAtMzIgLTEzdC0xMyAzMnYxNDcycTAgMjYgMTMgMzJ0MzIgLTEzbDcxMCAtNzEwcTggLTggMTMgLTE5djcxMHEwIDI2IDEzIDMydDMyIC0xM2w3MTAgLTcxMHExOSAtMTkgMTkgLTQ1dC0xOSAtNDVsLTcxMCAtNzEwcS0xOSAtMTkgLTMyIC0xM3QtMTMgMzJ2NzEwcS01IC0xMCAtMTMgLTE5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDUwOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik00NSAtMTE1cS0xOSAtMTkgLTMyIC0xM3QtMTMgMzJ2MTQ3MnEwIDI2IDEzIDMydDMyIC0xM2w3MTAgLTcxMHE4IC04IDEzIC0xOXY3MTBxMCAyNiAxMyAzMnQzMiAtMTNsNzEwIC03MTBxOCAtOCAxMyAtMTl2Njc4cTAgMjYgMTkgNDV0NDUgMTloMTI4cTI2IDAgNDUgLTE5dDE5IC00NXYtMTQwOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTEyOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djY3OHEtNSAtMTAgLTEzIC0xOWwtNzEwIC03MTAgcS0xOSAtMTkgLTMyIC0xM3QtMTMgMzJ2NzEwcS01IC0xMCAtMTMgLTE5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDUxOyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik00NSAtMTE1cS0xOSAtMTkgLTMyIC0xM3QtMTMgMzJ2MTQ3MnEwIDI2IDEzIDMydDMyIC0xM2w3MTAgLTcxMHE4IC04IDEzIC0xOXY2NzhxMCAyNiAxOSA0NXQ0NSAxOWgxMjhxMjYgMCA0NSAtMTl0MTkgLTQ1di0xNDA4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4cS0yNiAwIC00NSAxOXQtMTkgNDV2Njc4cS01IC0xMCAtMTMgLTE5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDUyOyIgaG9yaXotYWR2LXg9IjE1MzgiIGQ9Ik0xNCA1NTdsNzEwIDcxMHExOSAxOSA0NSAxOXQ0NSAtMTlsNzEwIC03MTBxMTkgLTE5IDEzIC0zMnQtMzIgLTEzaC0xNDcycS0yNiAwIC0zMiAxM3QxMyAzMnpNMTQ3MyAwaC0xNDA4cS0yNiAwIC00NSAxOXQtMTkgNDV2MjU2cTAgMjYgMTkgNDV0NDUgMTloMTQwOHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTI1NnEwIC0yNiAtMTkgLTQ1dC00NSAtMTl6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNTM7IiBob3Jpei1hZHYteD0iMTE1MiIgZD0iTTc0MiAtMzdsLTY1MiA2NTFxLTM3IDM3IC0zNyA5MC41dDM3IDkwLjVsNjUyIDY1MXEzNyAzNyA5MC41IDM3dDkwLjUgLTM3bDc1IC03NXEzNyAtMzcgMzcgLTkwLjV0LTM3IC05MC41bC00ODYgLTQ4Nmw0ODYgLTQ4NXEzNyAtMzggMzcgLTkxdC0zNyAtOTBsLTc1IC03NXEtMzcgLTM3IC05MC41IC0zN3QtOTAuNSAzN3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA1NDsiIGhvcml6LWFkdi14PSIxMTUyIiBkPSJNMTA5OSA3MDRxMCAtNTIgLTM3IC05MWwtNjUyIC02NTFxLTM3IC0zNyAtOTAgLTM3dC05MCAzN2wtNzYgNzVxLTM3IDM5IC0zNyA5MXEwIDUzIDM3IDkwbDQ4NiA0ODZsLTQ4NiA0ODVxLTM3IDM5IC0zNyA5MXEwIDUzIDM3IDkwbDc2IDc1cTM2IDM4IDkwIDM4dDkwIC0zOGw2NTIgLTY1MXEzNyAtMzcgMzcgLTkweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDU1OyIgZD0iTTEyMTYgNTc2djEyOHEwIDI2IC0xOSA0NXQtNDUgMTloLTI1NnYyNTZxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0yNTZoLTI1NnEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTEyOHEwIC0yNiAxOSAtNDV0NDUgLTE5aDI1NnYtMjU2cTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV2MjU2aDI1NnEyNiAwIDQ1IDE5dDE5IDQ1ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjUgdC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNTY7IiBkPSJNMTIxNiA1NzZ2MTI4cTAgMjYgLTE5IDQ1dC00NSAxOWgtNzY4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMTI4cTAgLTI2IDE5IC00NXQ0NSAtMTloNzY4cTI2IDAgNDUgMTl0MTkgNDV6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNSB0MTAzIC0zODUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA1NzsiIGQ9Ik0xMTQ5IDQxNHEwIDI2IC0xOSA0NWwtMTgxIDE4MWwxODEgMTgxcTE5IDE5IDE5IDQ1cTAgMjcgLTE5IDQ2bC05MCA5MHEtMTkgMTkgLTQ2IDE5cS0yNiAwIC00NSAtMTlsLTE4MSAtMTgxbC0xODEgMTgxcS0xOSAxOSAtNDUgMTlxLTI3IDAgLTQ2IC0xOWwtOTAgLTkwcS0xOSAtMTkgLTE5IC00NnEwIC0yNiAxOSAtNDVsMTgxIC0xODFsLTE4MSAtMTgxcS0xOSAtMTkgLTE5IC00NXEwIC0yNyAxOSAtNDZsOTAgLTkwcTE5IC0xOSA0NiAtMTkgcTI2IDAgNDUgMTlsMTgxIDE4MWwxODEgLTE4MXExOSAtMTkgNDUgLTE5cTI3IDAgNDYgMTlsOTAgOTBxMTkgMTkgMTkgNDZ6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDU4OyIgZD0iTTEyODQgODAycTAgMjggLTE4IDQ2bC05MSA5MHEtMTkgMTkgLTQ1IDE5dC00NSAtMTlsLTQwOCAtNDA3bC0yMjYgMjI2cS0xOSAxOSAtNDUgMTl0LTQ1IC0xOWwtOTEgLTkwcS0xOCAtMTggLTE4IC00NnEwIC0yNyAxOCAtNDVsMzYyIC0zNjJxMTkgLTE5IDQ1IC0xOXEyNyAwIDQ2IDE5bDU0MyA1NDNxMTggMTggMTggNDV6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDMgdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA1OTsiIGQ9Ik04OTYgMTYwdjE5MnEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTE5MnEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTE5MnEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDE5MnExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xMTUyIDgzMnEwIDk3IC01OC41IDE3MnQtMTQ0LjUgMTExLjV0LTE4MSAzNi41dC0xODEgLTM2LjV0LTE0NC41IC0xMTEuNXQtNTguNSAtMTcydi0xMXYtMTN0MSAtMTEuNXQzIC0xMS41dDUuNSAtOHQ5IC03IHQxMy41IC0yaDE5MnExNCAwIDIzIDl0OSAyM3EwIDEyIDExIDI3cTE5IDMxIDUwLjUgNTB0NjYuNSAxOXEzOSAwIDgzIC0yMS41dDQ0IC01Ny41cTAgLTMzIC0yNi41IC01OHQtNjMuNSAtNDR0LTc0LjUgLTQxLjV0LTY0IC02My41dC0yNi41IC05OHYtMTF2LTEzdDEgLTExLjV0MyAtMTEuNXQ1LjUgLTh0OSAtN3QxMy41IC0yaDE5MnExNyAwIDI0IDEwLjV0OCAyNC41dDEzLjUgMzN0MzcuNSAzMnE2MCAzMyA3MCAzOXE2MiA0NCA5OC41IDEwOCB0MzYuNSAxMzd6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDVhOyIgZD0iTTEwMjQgMTYwdjY0cTAgMTQgLTkgMjN0LTIzIDloLTk2djQ4MHEwIDE0IC05IDIzdC0yMyA5aC0zMjBxLTE0IDAgLTIzIC05dC05IC0yM3YtNjRxMCAtMTQgOSAtMjN0MjMgLTloOTZ2LTM4NGgtOTZxLTE0IDAgLTIzIC05dC05IC0yM3YtNjRxMCAtMTQgOSAtMjN0MjMgLTloNDQ4cTE0IDAgMjMgOXQ5IDIzek04OTYgOTI4djE5MnEwIDE0IC05IDIzdC0yMyA5aC0xOTJxLTE0IDAgLTIzIC05dC05IC0yM3YtMTkycTAgLTE0IDkgLTIzIHQyMyAtOWgxOTJxMTQgMCAyMyA5dDkgMjN6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDViOyIgZD0iTTExOTcgNTEyaC0xMDlxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxMDlxLTMyIDEwOCAtMTEyLjUgMTg4LjV0LTE4OC41IDExMi41di0xMDlxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMDlxLTEwOCAtMzIgLTE4OC41IC0xMTIuNXQtMTEyLjUgLTE4OC41aDEwOXEyNiAwIDQ1IC0xOXQxOSAtNDV2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTEwOSBxMzIgLTEwOCAxMTIuNSAtMTg4LjV0MTg4LjUgLTExMi41djEwOXEwIDI2IDE5IDQ1dDQ1IDE5aDEyOHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTEwOXExMDggMzIgMTg4LjUgMTEyLjV0MTEyLjUgMTg4LjV6TTE1MzYgNzA0di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNDNxLTM3IC0xNjEgLTE1NC41IC0yNzguNXQtMjc4LjUgLTE1NC41di0xNDNxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxNDMgcS0xNjEgMzcgLTI3OC41IDE1NC41dC0xNTQuNSAyNzguNWgtMTQzcS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTQzcTM3IDE2MSAxNTQuNSAyNzguNXQyNzguNSAxNTQuNXYxNDNxMCAyNiAxOSA0NXQ0NSAxOWgxMjhxMjYgMCA0NSAtMTl0MTkgLTQ1di0xNDNxMTYxIC0zNyAyNzguNSAtMTU0LjV0MTU0LjUgLTI3OC41aDE0M3EyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNWM7IiBkPSJNMTEyNSA0NDhxMCAtMjcgLTE4IC00NWwtMTAyIC0xMDJxLTE4IC0xOCAtNDUgLTE4dC00NSAxOGwtMTQ3IDE0N2wtMTQ3IC0xNDdxLTE4IC0xOCAtNDUgLTE4dC00NSAxOGwtMTAyIDEwMnEtMTggMTggLTE4IDQ1dDE4IDQ1bDE0NyAxNDdsLTE0NyAxNDdxLTE4IDE4IC0xOCA0NXQxOCA0NWwxMDIgMTAycTE4IDE4IDQ1IDE4dDQ1IC0xOGwxNDcgLTE0N2wxNDcgMTQ3cTE4IDE4IDQ1IDE4dDQ1IC0xOGwxMDIgLTEwMnExOCAtMTggMTggLTQ1IHQtMTggLTQ1bC0xNDcgLTE0N2wxNDcgLTE0N3ExOCAtMTggMTggLTQ1ek0xMjgwIDY0MHEwIDEwNCAtNDAuNSAxOTguNXQtMTA5LjUgMTYzLjV0LTE2My41IDEwOS41dC0xOTguNSA0MC41dC0xOTguNSAtNDAuNXQtMTYzLjUgLTEwOS41dC0xMDkuNSAtMTYzLjV0LTQwLjUgLTE5OC41dDQwLjUgLTE5OC41dDEwOS41IC0xNjMuNXQxNjMuNSAtMTA5LjV0MTk4LjUgLTQwLjV0MTk4LjUgNDAuNXQxNjMuNSAxMDkuNXQxMDkuNSAxNjMuNSB0NDAuNSAxOTguNXpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNWQ7IiBkPSJNMTE4OSA3NjhxMCAtMjcgLTE4IC00NWwtMzIwIC0zMjBsLTEwMiAtMTAycS0xOCAtMTggLTQ1IC0xOHQtNDUgMThsLTEwMiAxMDJsLTE5MiAxOTJxLTE4IDE4IC0xOCA0NXQxOCA0NWwxMDIgMTAycTE4IDE4IDQ1IDE4dDQ1IC0xOGwxNDcgLTE0N2wyNzUgMjc1cTE4IDE4IDQ1IDE4dDQ1IC0xOGwxMDIgLTEwMnExOCAtMTggMTggLTQ1ek0xMjgwIDY0MHEwIDEwNCAtNDAuNSAxOTguNXQtMTA5LjUgMTYzLjV0LTE2My41IDEwOS41IHQtMTk4LjUgNDAuNXQtMTk4LjUgLTQwLjV0LTE2My41IC0xMDkuNXQtMTA5LjUgLTE2My41dC00MC41IC0xOTguNXQ0MC41IC0xOTguNXQxMDkuNSAtMTYzLjV0MTYzLjUgLTEwOS41dDE5OC41IC00MC41dDE5OC41IDQwLjV0MTYzLjUgMTA5LjV0MTA5LjUgMTYzLjV0NDAuNSAxOTguNXpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNSB0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDVlOyIgZD0iTTEyODAgNjQwcTAgMTM5IC03MSAyNjBsLTcwMSAtNzAxcTEyMSAtNzEgMjYwIC03MXExMDQgMCAxOTguNSA0MC41dDE2My41IDEwOS41dDEwOS41IDE2My41dDQwLjUgMTk4LjV6TTMyNyAzODBsNzAxIDcwMXEtMTIxIDcxIC0yNjAgNzFxLTEwNCAwIC0xOTguNSAtNDAuNXQtMTYzLjUgLTEwOS41dC0xMDkuNSAtMTYzLjV0LTQwLjUgLTE5OC41cTAgLTEzOSA3MSAtMjYwek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjUgdC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNjA7IiBkPSJNMTUzNiA2NDB2LTEyOHEwIC01MyAtMzIuNSAtOTAuNXQtODQuNSAtMzcuNWgtNzA0bDI5MyAtMjk0cTM4IC0zNiAzOCAtOTB0LTM4IC05MGwtNzUgLTc2cS0zNyAtMzcgLTkwIC0zN3EtNTIgMCAtOTEgMzdsLTY1MSA2NTJxLTM3IDM3IC0zNyA5MHEwIDUyIDM3IDkxbDY1MSA2NTBxMzggMzggOTEgMzhxNTIgMCA5MCAtMzhsNzUgLTc0cTM4IC0zOCAzOCAtOTF0LTM4IC05MWwtMjkzIC0yOTNoNzA0cTUyIDAgODQuNSAtMzcuNSB0MzIuNSAtOTAuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA2MTsiIGQ9Ik0xNDcyIDU3NnEwIC01NCAtMzcgLTkxbC02NTEgLTY1MXEtMzkgLTM3IC05MSAtMzdxLTUxIDAgLTkwIDM3bC03NSA3NXEtMzggMzggLTM4IDkxdDM4IDkxbDI5MyAyOTNoLTcwNHEtNTIgMCAtODQuNSAzNy41dC0zMi41IDkwLjV2MTI4cTAgNTMgMzIuNSA5MC41dDg0LjUgMzcuNWg3MDRsLTI5MyAyOTRxLTM4IDM2IC0zOCA5MHQzOCA5MGw3NSA3NXEzOCAzOCA5MCAzOHE1MyAwIDkxIC0zOGw2NTEgLTY1MXEzNyAtMzUgMzcgLTkweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDYyOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xNjExIDU2NXEwIC01MSAtMzcgLTkwbC03NSAtNzVxLTM4IC0zOCAtOTEgLTM4cS01NCAwIC05MCAzOGwtMjk0IDI5M3YtNzA0cTAgLTUyIC0zNy41IC04NC41dC05MC41IC0zMi41aC0xMjhxLTUzIDAgLTkwLjUgMzIuNXQtMzcuNSA4NC41djcwNGwtMjk0IC0yOTNxLTM2IC0zOCAtOTAgLTM4dC05MCAzOGwtNzUgNzVxLTM4IDM4IC0zOCA5MHEwIDUzIDM4IDkxbDY1MSA2NTFxMzUgMzcgOTAgMzdxNTQgMCA5MSAtMzdsNjUxIC02NTEgcTM3IC0zOSAzNyAtOTF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNjM7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE2MTEgNzA0cTAgLTUzIC0zNyAtOTBsLTY1MSAtNjUycS0zOSAtMzcgLTkxIC0zN3EtNTMgMCAtOTAgMzdsLTY1MSA2NTJxLTM4IDM2IC0zOCA5MHEwIDUzIDM4IDkxbDc0IDc1cTM5IDM3IDkxIDM3cTUzIDAgOTAgLTM3bDI5NCAtMjk0djcwNHEwIDUyIDM4IDkwdDkwIDM4aDEyOHE1MiAwIDkwIC0zOHQzOCAtOTB2LTcwNGwyOTQgMjk0cTM3IDM3IDkwIDM3cTUyIDAgOTEgLTM3bDc1IC03NXEzNyAtMzkgMzcgLTkxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDY0OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzkyIDg5NnEwIC0yNiAtMTkgLTQ1bC01MTIgLTUxMnEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5dC0xOSA0NXYyNTZoLTIyNHEtOTggMCAtMTc1LjUgLTZ0LTE1NCAtMjEuNXQtMTMzIC00Mi41dC0xMDUuNSAtNjkuNXQtODAgLTEwMXQtNDguNSAtMTM4LjV0LTE3LjUgLTE4MXEwIC01NSA1IC0xMjNxMCAtNiAyLjUgLTIzLjV0Mi41IC0yNi41cTAgLTE1IC04LjUgLTI1dC0yMy41IC0xMHEtMTYgMCAtMjggMTdxLTcgOSAtMTMgMjIgdC0xMy41IDMwdC0xMC41IDI0cS0xMjcgMjg1IC0xMjcgNDUxcTAgMTk5IDUzIDMzM3ExNjIgNDAzIDg3NSA0MDNoMjI0djI1NnEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOWw1MTIgLTUxMnExOSAtMTkgMTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDY1OyIgZD0iTTc1NSA0ODBxMCAtMTMgLTEwIC0yM2wtMzMyIC0zMzJsMTQ0IC0xNDRxMTkgLTE5IDE5IC00NXQtMTkgLTQ1dC00NSAtMTloLTQ0OHEtMjYgMCAtNDUgMTl0LTE5IDQ1djQ0OHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOWwxNDQgLTE0NGwzMzIgMzMycTEwIDEwIDIzIDEwdDIzIC0xMGwxMTQgLTExNHExMCAtMTAgMTAgLTIzek0xNTM2IDEzNDR2LTQ0OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5bC0xNDQgMTQ0bC0zMzIgLTMzMiBxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtMTE0IDExNHEtMTAgMTAgLTEwIDIzdDEwIDIzbDMzMiAzMzJsLTE0NCAxNDRxLTE5IDE5IC0xOSA0NXQxOSA0NXQ0NSAxOWg0NDhxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDY2OyIgZD0iTTc2OCA1NzZ2LTQ0OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5bC0xNDQgMTQ0bC0zMzIgLTMzMnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC0xMTQgMTE0cS0xMCAxMCAtMTAgMjN0MTAgMjNsMzMyIDMzMmwtMTQ0IDE0NHEtMTkgMTkgLTE5IDQ1dDE5IDQ1dDQ1IDE5aDQ0OHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE1MjMgMTI0OHEwIC0xMyAtMTAgLTIzbC0zMzIgLTMzMmwxNDQgLTE0NHExOSAtMTkgMTkgLTQ1dC0xOSAtNDUgdC00NSAtMTloLTQ0OHEtMjYgMCAtNDUgMTl0LTE5IDQ1djQ0OHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOWwxNDQgLTE0NGwzMzIgMzMycTEwIDEwIDIzIDEwdDIzIC0xMGwxMTQgLTExNHExMCAtMTAgMTAgLTIzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDY3OyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xNDA4IDgwMHYtMTkycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtNDE2di00MTZxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0xOTJxLTQwIDAgLTY4IDI4dC0yOCA2OHY0MTZoLTQxNnEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDQxNnY0MTZxMCA0MCAyOCA2OHQ2OCAyOGgxOTJxNDAgMCA2OCAtMjh0MjggLTY4di00MTZoNDE2cTQwIDAgNjggLTI4dDI4IC02OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA2ODsiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNMTQwOCA4MDB2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTEyMTZxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgxMjE2cTQwIDAgNjggLTI4dDI4IC02OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA2OTsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTQ4MiA0ODZxNDYgLTI2IDU5LjUgLTc3LjV0LTEyLjUgLTk3LjVsLTY0IC0xMTBxLTI2IC00NiAtNzcuNSAtNTkuNXQtOTcuNSAxMi41bC0yNjYgMTUzdi0zMDdxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC0xMjhxLTUyIDAgLTkwIDM4dC0zOCA5MHYzMDdsLTI2NiAtMTUzcS00NiAtMjYgLTk3LjUgLTEyLjV0LTc3LjUgNTkuNWwtNjQgMTEwcS0yNiA0NiAtMTIuNSA5Ny41dDU5LjUgNzcuNWwyNjYgMTU0bC0yNjYgMTU0IHEtNDYgMjYgLTU5LjUgNzcuNXQxMi41IDk3LjVsNjQgMTEwcTI2IDQ2IDc3LjUgNTkuNXQ5Ny41IC0xMi41bDI2NiAtMTUzdjMwN3EwIDUyIDM4IDkwdDkwIDM4aDEyOHE1MiAwIDkwIC0zOHQzOCAtOTB2LTMwN2wyNjYgMTUzcTQ2IDI2IDk3LjUgMTIuNXQ3Ny41IC01OS41bDY0IC0xMTBxMjYgLTQ2IDEyLjUgLTk3LjV0LTU5LjUgLTc3LjVsLTI2NiAtMTU0eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDZhOyIgZD0iTTc2OCAxNDA4cTIwOSAwIDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV0LTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN6TTg5NiAxNjF2MTkwcTAgMTQgLTkgMjMuNXQtMjIgOS41aC0xOTJxLTEzIDAgLTIzIC0xMHQtMTAgLTIzdi0xOTBxMCAtMTMgMTAgLTIzdDIzIC0xMGgxOTIgcTEzIDAgMjIgOS41dDkgMjMuNXpNODk0IDUwNWwxOCA2MjFxMCAxMiAtMTAgMThxLTEwIDggLTI0IDhoLTIyMHEtMTQgMCAtMjQgLThxLTEwIC02IC0xMCAtMThsMTcgLTYyMXEwIC0xMCAxMCAtMTcuNXQyNCAtNy41aDE4NXExNCAwIDIzLjUgNy41dDEwLjUgMTcuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA2YjsiIGQ9Ik05MjggMTgwdjcxNmgtMzIwdi03MTZxMCAtMjUgMTguNSAtMzguNXQ0NS41IC0xMy41aDE5MnEyNyAwIDQ1LjUgMTMuNXQxOC41IDM4LjV6TTQ3MiAxMDI0aDE5NWwtMTI2IDE2MXEtMjQgMzEgLTY5IDMxcS00MCAwIC02OCAtMjh0LTI4IC02OHQyOCAtNjh0NjggLTI4ek0xMTYwIDExMjBxMCA0MCAtMjggNjh0LTY4IDI4cS00NSAwIC02OSAtMzFsLTEyNSAtMTYxaDE5NHE0MCAwIDY4IDI4dDI4IDY4ek0xNTM2IDg2NHYtMzIwIHEwIC0xNCAtMTAgLTIydC0yNyAtMTAuNXQtMzIgLTIuNXQtMzQuNSAxLjV0LTI0LjUgMS41di00MTZxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0xMDg4cS00MCAwIC02OCAyOHQtMjggNjh2NDE2cS01IDAgLTI0LjUgLTEuNXQtMzQuNSAtMS41dC0zMiAyLjV0LTI3IDEwLjV0LTEwIDIydjMyMHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDQ0MHEtOTMgMCAtMTU4LjUgNjUuNXQtNjUuNSAxNTguNXQ2NS41IDE1OC41dDE1OC41IDY1LjUgcTEwOCAwIDE2OCAtNzdsMTI4IC0xNjVsMTI4IDE2NXE2MCA3NyAxNjggNzdxOTMgMCAxNTguNSAtNjUuNXQ2NS41IC0xNTguNXQtNjUuNSAtMTU4LjV0LTE1OC41IC02NS41aDQ0MHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNmM7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTEyODAgODMycTAgMjYgLTE5IDQ1dC00NSAxOXEtMTcyIDAgLTMxOCAtNDkuNXQtMjU5LjUgLTEzNHQtMjM1LjUgLTIxOS41cS0xOSAtMjEgLTE5IC00NXEwIC0yNiAxOSAtNDV0NDUgLTE5cTI0IDAgNDUgMTlxMjcgMjQgNzQgNzF0NjcgNjZxMTM3IDEyNCAyNjguNSAxNzZ0MzEzLjUgNTJxMjYgMCA0NSAxOXQxOSA0NXpNMTc5MiAxMDMwcTAgLTk1IC0yMCAtMTkzcS00NiAtMjI0IC0xODQuNSAtMzgzdC0zNTcuNSAtMjY4IHEtMjE0IC0xMDggLTQzOCAtMTA4cS0xNDggMCAtMjg2IDQ3cS0xNSA1IC04OCA0MnQtOTYgMzdxLTE2IDAgLTM5LjUgLTMydC00NSAtNzB0LTUyLjUgLTcwdC02MCAtMzJxLTMwIDAgLTUxIDExdC0zMSAyNHQtMjcgNDJxLTIgNCAtNiAxMXQtNS41IDEwdC0zIDkuNXQtMS41IDEzLjVxMCAzNSAzMSA3My41dDY4IDY1LjV0NjggNTZ0MzEgNDhxMCA0IC0xNCAzOHQtMTYgNDRxLTkgNTEgLTkgMTA0cTAgMTE1IDQzLjUgMjIwdDExOSAxODQuNSB0MTcwLjUgMTM5dDIwNCA5NS41cTU1IDE4IDE0NSAyNS41dDE3OS41IDl0MTc4LjUgNnQxNjMuNSAyNHQxMTMuNSA1Ni41bDI5LjUgMjkuNXQyOS41IDI4dDI3IDIwdDM2LjUgMTZ0NDMuNSA0LjVxMzkgMCA3MC41IC00NnQ0Ny41IC0xMTJ0MjQgLTEyNHQ4IC05NnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA2ZDsiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNMTQwOCAtMTYwdi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEzNDRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEzNDRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xMTUyIDg5NnEwIC03OCAtMjQuNSAtMTQ0dC02NCAtMTEyLjV0LTg3LjUgLTg4dC05NiAtNzcuNXQtODcuNSAtNzJ0LTY0IC04MS41dC0yNC41IC05Ni41cTAgLTk2IDY3IC0yMjRsLTQgMWwxIC0xIHEtOTAgNDEgLTE2MCA4M3QtMTM4LjUgMTAwdC0xMTMuNSAxMjIuNXQtNzIuNSAxNTAuNXQtMjcuNSAxODRxMCA3OCAyNC41IDE0NHQ2NCAxMTIuNXQ4Ny41IDg4dDk2IDc3LjV0ODcuNSA3MnQ2NCA4MS41dDI0LjUgOTYuNXEwIDk0IC02NiAyMjRsMyAtMWwtMSAxcTkwIC00MSAxNjAgLTgzdDEzOC41IC0xMDB0MTEzLjUgLTEyMi41dDcyLjUgLTE1MC41dDI3LjUgLTE4NHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA2ZTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTY2NCA1NzZxLTE1MiAyMzYgLTM4MSAzNTNxNjEgLTEwNCA2MSAtMjI1cTAgLTE4NSAtMTMxLjUgLTMxNi41dC0zMTYuNSAtMTMxLjV0LTMxNi41IDEzMS41dC0xMzEuNSAzMTYuNXEwIDEyMSA2MSAyMjVxLTIyOSAtMTE3IC0zODEgLTM1M3ExMzMgLTIwNSAzMzMuNSAtMzI2LjV0NDM0LjUgLTEyMS41dDQzNC41IDEyMS41dDMzMy41IDMyNi41ek05NDQgOTYwcTAgMjAgLTE0IDM0dC0zNCAxNHEtMTI1IDAgLTIxNC41IC04OS41IHQtODkuNSAtMjE0LjVxMCAtMjAgMTQgLTM0dDM0IC0xNHQzNCAxNHQxNCAzNHEwIDg2IDYxIDE0N3QxNDcgNjFxMjAgMCAzNCAxNHQxNCAzNHpNMTc5MiA1NzZxMCAtMzQgLTIwIC02OXEtMTQwIC0yMzAgLTM3Ni41IC0zNjguNXQtNDk5LjUgLTEzOC41dC00OTkuNSAxMzl0LTM3Ni41IDM2OHEtMjAgMzUgLTIwIDY5dDIwIDY5cTE0MCAyMjkgMzc2LjUgMzY4dDQ5OS41IDEzOXQ0OTkuNSAtMTM5dDM3Ni41IC0zNjhxMjAgLTM1IDIwIC02OXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA3MDsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNTU1IDIwMWw3OCAxNDFxLTg3IDYzIC0xMzYgMTU5dC00OSAyMDNxMCAxMjEgNjEgMjI1cS0yMjkgLTExNyAtMzgxIC0zNTNxMTY3IC0yNTggNDI3IC0zNzV6TTk0NCA5NjBxMCAyMCAtMTQgMzR0LTM0IDE0cS0xMjUgMCAtMjE0LjUgLTg5LjV0LTg5LjUgLTIxNC41cTAgLTIwIDE0IC0zNHQzNCAtMTR0MzQgMTR0MTQgMzRxMCA4NiA2MSAxNDd0MTQ3IDYxcTIwIDAgMzQgMTR0MTQgMzR6TTEzMDcgMTE1MXEwIC03IC0xIC05IHEtMTA1IC0xODggLTMxNSAtNTY2dC0zMTYgLTU2N2wtNDkgLTg5cS0xMCAtMTYgLTI4IC0xNnEtMTIgMCAtMTM0IDcwcS0xNiAxMCAtMTYgMjhxMCAxMiA0NCA4N3EtMTQzIDY1IC0yNjMuNSAxNzN0LTIwOC41IDI0NXEtMjAgMzEgLTIwIDY5dDIwIDY5cTE1MyAyMzUgMzgwIDM3MXQ0OTYgMTM2cTg5IDAgMTgwIC0xN2w1NCA5N3ExMCAxNiAyOCAxNnE1IDAgMTggLTZ0MzEgLTE1LjV0MzMgLTE4LjV0MzEuNSAtMTguNXQxOS41IC0xMS41IHExNiAtMTAgMTYgLTI3ek0xMzQ0IDcwNHEwIC0xMzkgLTc5IC0yNTMuNXQtMjA5IC0xNjQuNWwyODAgNTAycTggLTQ1IDggLTg0ek0xNzkyIDU3NnEwIC0zNSAtMjAgLTY5cS0zOSAtNjQgLTEwOSAtMTQ1cS0xNTAgLTE3MiAtMzQ3LjUgLTI2N3QtNDE5LjUgLTk1bDc0IDEzMnEyMTIgMTggMzkyLjUgMTM3dDMwMS41IDMwN3EtMTE1IDE3OSAtMjgyIDI5NGw2MyAxMTJxOTUgLTY0IDE4Mi41IC0xNTN0MTQ0LjUgLTE4NHEyMCAtMzQgMjAgLTY5eiAiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA3MTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTAyNCAxNjF2MTkwcTAgMTQgLTkuNSAyMy41dC0yMi41IDkuNWgtMTkycS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjMuNXYtMTkwcTAgLTE0IDkuNSAtMjMuNXQyMi41IC05LjVoMTkycTEzIDAgMjIuNSA5LjV0OS41IDIzLjV6TTEwMjIgNTM1bDE4IDQ1OXEwIDEyIC0xMCAxOXEtMTMgMTEgLTI0IDExaC0yMjBxLTExIDAgLTI0IC0xMXEtMTAgLTcgLTEwIC0yMWwxNyAtNDU3cTAgLTEwIDEwIC0xNi41dDI0IC02LjVoMTg1IHExNCAwIDIzLjUgNi41dDEwLjUgMTYuNXpNMTAwOCAxNDY5bDc2OCAtMTQwOHEzNSAtNjMgLTIgLTEyNnEtMTcgLTI5IC00Ni41IC00NnQtNjMuNSAtMTdoLTE1MzZxLTM0IDAgLTYzLjUgMTd0LTQ2LjUgNDZxLTM3IDYzIC0yIDEyNmw3NjggMTQwOHExNyAzMSA0NyA0OXQ2NSAxOHQ2NSAtMTh0NDcgLTQ5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDcyOyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xMzk3IDEzMjRxMCAtODcgLTE0OSAtMjM2bC0yNDAgLTI0MGwxNDMgLTc0NmwxIC02cTAgLTE0IC05IC0yM2wtNjQgLTY0cS05IC05IC0yMyAtOXEtMjEgMCAtMjkgMThsLTI3NCA1NzVsLTI0NSAtMjQ1cTY4IC0yMzggNjggLTI1MnQtOSAtMjNsLTY0IC02NHEtOSAtOSAtMjMgLTlxLTE4IDAgLTI4IDE2bC0xNTUgMjgwbC0yODAgMTU1cS0xNyA5IC0xNyAyOHEwIDE0IDkgMjNsNjQgNjVxOSA5IDIzIDl0MjUyIC02OGwyNDUgMjQ1IGwtNTc1IDI3NHEtMTggOCAtMTggMjlxMCAxNCA5IDIzbDY0IDY0cTkgOSAyMyA5cTQgMCA2IC0xbDc0NiAtMTQzbDI0MCAyNDBxMTQ5IDE0OSAyMzYgMTQ5cTMyIDAgNTIuNSAtMjAuNXQyMC41IC01Mi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDczOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xMjggLTEyOGgyODh2Mjg4aC0yODh2LTI4OHpNNDgwIC0xMjhoMzIwdjI4OGgtMzIwdi0yODh6TTEyOCAyMjRoMjg4djMyMGgtMjg4di0zMjB6TTQ4MCAyMjRoMzIwdjMyMGgtMzIwdi0zMjB6TTEyOCA2MDhoMjg4djI4OGgtMjg4di0yODh6TTg2NCAtMTI4aDMyMHYyODhoLTMyMHYtMjg4ek00ODAgNjA4aDMyMHYyODhoLTMyMHYtMjg4ek0xMjQ4IC0xMjhoMjg4djI4OGgtMjg4di0yODh6TTg2NCAyMjRoMzIwdjMyMGgtMzIwdi0zMjB6IE01MTIgMTA4OHYyODhxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC02NHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTI4OHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDY0cTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTEyNDggMjI0aDI4OHYzMjBoLTI4OHYtMzIwek04NjQgNjA4aDMyMHYyODhoLTMyMHYtMjg4ek0xMjQ4IDYwOGgyODh2Mjg4aC0yODh2LTI4OHpNMTI4MCAxMDg4djI4OHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTY0IHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTI4OHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDY0cTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTE2NjQgMTE1MnYtMTI4MHEwIC01MiAtMzggLTkwdC05MCAtMzhoLTE0MDhxLTUyIDAgLTkwIDM4dC0zOCA5MHYxMjgwcTAgNTIgMzggOTB0OTAgMzhoMTI4djk2cTAgNjYgNDcgMTEzdDExMyA0N2g2NHE2NiAwIDExMyAtNDd0NDcgLTExM3YtOTZoMzg0djk2cTAgNjYgNDcgMTEzdDExMyA0NyBoNjRxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN2LTk2aDEyOHE1MiAwIDkwIC0zOHQzOCAtOTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNzQ7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTY2NiAxMDU1cS02MCAtOTIgLTEzNyAtMjczcS0yMiA0NSAtMzcgNzIuNXQtNDAuNSA2My41dC01MSA1Ni41dC02MyAzNXQtODEuNSAxNC41aC0yMjRxLTE0IDAgLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDIyNHEyNTAgMCA0MTAgLTIyNXpNMTc5MiAyNTZxMCAtMTQgLTkgLTIzbC0zMjAgLTMyMHEtOSAtOSAtMjMgLTlxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxLTMyIDAgLTg1IC0wLjV0LTgxIC0xdC03MyAxIHQtNzEgNXQtNjQgMTAuNXQtNjMgMTguNXQtNTggMjguNXQtNTkgNDB0LTU1IDUzLjV0LTU2IDY5LjVxNTkgOTMgMTM2IDI3M3EyMiAtNDUgMzcgLTcyLjV0NDAuNSAtNjMuNXQ1MSAtNTYuNXQ2MyAtMzV0ODEuNSAtMTQuNWgyNTZ2MTkycTAgMTQgOSAyM3QyMyA5cTEyIDAgMjQgLTEwbDMxOSAtMzE5cTkgLTkgOSAtMjN6TTE3OTIgMTE1MnEwIC0xNCAtOSAtMjNsLTMyMCAtMzIwcS05IC05IC0yMyAtOXEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41IHYxOTJoLTI1NnEtNDggMCAtODcgLTE1dC02OSAtNDV0LTUxIC02MS41dC00NSAtNzcuNXEtMzIgLTYyIC03OCAtMTcxcS0yOSAtNjYgLTQ5LjUgLTExMXQtNTQgLTEwNXQtNjQgLTEwMHQtNzQgLTgzdC05MCAtNjguNXQtMTA2LjUgLTQydC0xMjggLTE2LjVoLTIyNHEtMTQgMCAtMjMgOXQtOSAyM3YxOTJxMCAxNCA5IDIzdDIzIDloMjI0cTQ4IDAgODcgMTV0NjkgNDV0NTEgNjEuNXQ0NSA3Ny41cTMyIDYyIDc4IDE3MXEyOSA2NiA0OS41IDExMSB0NTQgMTA1dDY0IDEwMHQ3NCA4M3Q5MCA2OC41dDEwNi41IDQydDEyOCAxNi41aDI1NnYxOTJxMCAxNCA5IDIzdDIzIDlxMTIgMCAyNCAtMTBsMzE5IC0zMTlxOSAtOSA5IC0yM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA3NTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc5MiA2NDBxMCAtMTc0IC0xMjAgLTMyMS41dC0zMjYgLTIzM3QtNDUwIC04NS41cS03MCAwIC0xNDUgOHEtMTk4IC0xNzUgLTQ2MCAtMjQycS00OSAtMTQgLTExNCAtMjJxLTE3IC0yIC0zMC41IDl0LTE3LjUgMjl2MXEtMyA0IC0wLjUgMTJ0MiAxMHQ0LjUgOS41bDYgOXQ3IDguNXQ4IDlxNyA4IDMxIDM0LjV0MzQuNSAzOHQzMSAzOS41dDMyLjUgNTF0MjcgNTl0MjYgNzZxLTE1NyA4OSAtMjQ3LjUgMjIwdC05MC41IDI4MSBxMCAxMzAgNzEgMjQ4LjV0MTkxIDIwNC41dDI4NiAxMzYuNXQzNDggNTAuNXEyNDQgMCA0NTAgLTg1LjV0MzI2IC0yMzN0MTIwIC0zMjEuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA3NjsiIGQ9Ik0xNTM2IDcwNHYtMTI4cTAgLTIwMSAtOTguNSAtMzYydC0yNzQgLTI1MS41dC0zOTUuNSAtOTAuNXQtMzk1LjUgOTAuNXQtMjc0IDI1MS41dC05OC41IDM2MnYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgzODRxMjYgMCA0NSAtMTl0MTkgLTQ1di0xMjhxMCAtNTIgMjMuNSAtOTB0NTMuNSAtNTd0NzEgLTMwdDY0IC0xM3Q0NCAtMnQ0NCAydDY0IDEzdDcxIDMwdDUzLjUgNTd0MjMuNSA5MHYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgzODQgcTI2IDAgNDUgLTE5dDE5IC00NXpNNTEyIDEzNDR2LTM4NHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTM4NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djM4NHEwIDI2IDE5IDQ1dDQ1IDE5aDM4NHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE1MzYgMTM0NHYtMzg0cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMzg0cS0yNiAwIC00NSAxOXQtMTkgNDV2Mzg0cTAgMjYgMTkgNDV0NDUgMTloMzg0cTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA3NzsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTYxMSAzMjBxMCAtNTMgLTM3IC05MGwtNzUgLTc1cS0zOCAtMzggLTkxIC0zOHEtNTQgMCAtOTAgMzhsLTQ4NiA0ODVsLTQ4NiAtNDg1cS0zNiAtMzggLTkwIC0zOHQtOTAgMzhsLTc1IDc1cS0zOCAzNiAtMzggOTBxMCA1MyAzOCA5MWw2NTEgNjUxcTM3IDM3IDkwIDM3cTUyIDAgOTEgLTM3bDY1MCAtNjUxcTM4IC0zOCAzOCAtOTF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNzg7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE2MTEgODMycTAgLTUzIC0zNyAtOTBsLTY1MSAtNjUxcS0zOCAtMzggLTkxIC0zOHEtNTQgMCAtOTAgMzhsLTY1MSA2NTFxLTM4IDM2IC0zOCA5MHEwIDUzIDM4IDkxbDc0IDc1cTM5IDM3IDkxIDM3cTUzIDAgOTAgLTM3bDQ4NiAtNDg2bDQ4NiA0ODZxMzcgMzcgOTAgMzdxNTIgMCA5MSAtMzdsNzUgLTc1cTM3IC0zOSAzNyAtOTF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNzk7IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTEyODAgMzJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC05NjBxLTggMCAtMTMuNSAydC05IDd0LTUuNSA4dC0zIDExLjV0LTEgMTEuNXYxM3YxMXYxNjB2NDE2aC0xOTJxLTI2IDAgLTQ1IDE5dC0xOSA0NXEwIDI0IDE1IDQxbDMyMCAzODRxMTkgMjIgNDkgMjJ0NDkgLTIybDMyMCAtMzg0cTE1IC0xNyAxNSAtNDFxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xOTJ2LTM4NGg1NzZxMTYgMCAyNSAtMTFsMTYwIC0xOTJxNyAtMTEgNyAtMjEgek0xOTIwIDQ0OHEwIC0yNCAtMTUgLTQxbC0zMjAgLTM4NHEtMjAgLTIzIC00OSAtMjN0LTQ5IDIzbC0zMjAgMzg0cS0xNSAxNyAtMTUgNDFxMCAyNiAxOSA0NXQ0NSAxOWgxOTJ2Mzg0aC01NzZxLTE2IDAgLTI1IDEybC0xNjAgMTkycS03IDkgLTcgMjBxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg5NjBxOCAwIDEzLjUgLTJ0OSAtN3Q1LjUgLTh0MyAtMTEuNXQxIC0xMS41di0xM3YtMTF2LTE2MHYtNDE2aDE5MnEyNiAwIDQ1IC0xOXQxOSAtNDV6ICIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDdhOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik02NDAgMHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXQtOTAuNSAzNy41dC0zNy41IDkwLjV0MzcuNSA5MC41dDkwLjUgMzcuNXQ5MC41IC0zNy41dDM3LjUgLTkwLjV6TTE1MzYgMHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXQtOTAuNSAzNy41dC0zNy41IDkwLjV0MzcuNSA5MC41dDkwLjUgMzcuNXQ5MC41IC0zNy41dDM3LjUgLTkwLjV6TTE2NjQgMTA4OHYtNTEycTAgLTI0IC0xNiAtNDIuNXQtNDEgLTIxLjUgbC0xMDQ0IC0xMjJxMSAtNyA0LjUgLTIxLjV0NiAtMjYuNXQyLjUgLTIycTAgLTE2IC0yNCAtNjRoOTIwcTI2IDAgNDUgLTE5dDE5IC00NXQtMTkgLTQ1dC00NSAtMTloLTEwMjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXEwIDE0IDExIDM5LjV0MjkuNSA1OS41dDIwLjUgMzhsLTE3NyA4MjNoLTIwNHEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5aDI1NnExNiAwIDI4LjUgLTYuNXQyMCAtMTUuNXQxMyAtMjQuNXQ3LjUgLTI2LjUgdDUuNSAtMjkuNXQ0LjUgLTI1LjVoMTIwMXEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwN2I7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE2NjQgOTI4di03MDRxMCAtOTIgLTY2IC0xNTh0LTE1OCAtNjZoLTEyMTZxLTkyIDAgLTE1OCA2NnQtNjYgMTU4djk2MHEwIDkyIDY2IDE1OHQxNTggNjZoMzIwcTkyIDAgMTU4IC02NnQ2NiAtMTU4di0zMmg2NzJxOTIgMCAxNTggLTY2dDY2IC0xNTh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwN2M7IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTE4NzkgNTg0cTAgLTMxIC0zMSAtNjZsLTMzNiAtMzk2cS00MyAtNTEgLTEyMC41IC04Ni41dC0xNDMuNSAtMzUuNWgtMTA4OHEtMzQgMCAtNjAuNSAxM3QtMjYuNSA0M3EwIDMxIDMxIDY2bDMzNiAzOTZxNDMgNTEgMTIwLjUgODYuNXQxNDMuNSAzNS41aDEwODhxMzQgMCA2MC41IC0xM3QyNi41IC00M3pNMTUzNiA5Mjh2LTE2MGgtODMycS05NCAwIC0xOTcgLTQ3LjV0LTE2NCAtMTE5LjVsLTMzNyAtMzk2bC01IC02cTAgNCAtMC41IDEyLjUgdC0wLjUgMTIuNXY5NjBxMCA5MiA2NiAxNTh0MTU4IDY2aDMyMHE5MiAwIDE1OCAtNjZ0NjYgLTE1OHYtMzJoNTQ0cTkyIDAgMTU4IC02NnQ2NiAtMTU4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDdkOyIgaG9yaXotYWR2LXg9Ijc2OCIgZD0iTTcwNCAxMjE2cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4di0xMDI0aDEyOHEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NWwtMjU2IC0yNTZxLTE5IC0xOSAtNDUgLTE5dC00NSAxOWwtMjU2IDI1NnEtMTkgMTkgLTE5IDQ1dDE5IDQ1dDQ1IDE5aDEyOHYxMDI0aC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NWwyNTYgMjU2cTE5IDE5IDQ1IDE5dDQ1IC0xOWwyNTYgLTI1NnExOSAtMTkgMTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDdlOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzkyIDY0MHEwIC0yNiAtMTkgLTQ1bC0yNTYgLTI1NnEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5dC0xOSA0NXYxMjhoLTEwMjR2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5bC0yNTYgMjU2cS0xOSAxOSAtMTkgNDV0MTkgNDVsMjU2IDI1NnExOSAxOSA0NSAxOXQ0NSAtMTl0MTkgLTQ1di0xMjhoMTAyNHYxMjhxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTlsMjU2IC0yNTZxMTkgLTE5IDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4MDsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNNTEyIDUxMnYtMzg0aC0yNTZ2Mzg0aDI1NnpNODk2IDEwMjR2LTg5NmgtMjU2djg5NmgyNTZ6TTEyODAgNzY4di02NDBoLTI1NnY2NDBoMjU2ek0xNjY0IDExNTJ2LTEwMjRoLTI1NnYxMDI0aDI1NnpNMTc5MiAzMnYxMjE2cTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtMTYwMHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTEyMTZxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxNjAwcTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6IE0xOTIwIDEyNDh2LTEyMTZxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE2MDBxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjEyMTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDE2MDBxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwODE7IiBkPSJNMTI4MCA5NThxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41cS01IDAgLTE1IC00cTIwIDM0IDIwIDU1cTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNXEtNyAwIC0xNyAtNXEtNjAgLTM0IC05NyAtNDNxLTY1IDYzIC0xNTQgNjNxLTk4IDAgLTE2NC41IC03Mi41dC02NC41IC0xNjkuNXYtMTJxLTEwNyAxNCAtMTg3LjUgNjR0LTE1Ni41IDEzOXEtMTAgMTIgLTI4IDEycS0yNiAwIC00MSAtNTAuNXQtMTUgLTg2LjVxMCAtNjIgMjkgLTExNyBxLTEzIC0yIC0yMS41IC0xMS41dC04LjUgLTIyLjVxMCAtMTEyIDgxIC0xODVxLTEyIC04IC0xMiAtMjVxMCAtNiAxIC05cTE1IC01MSA1MC41IC05MS41dDg0LjUgLTYwLjVxLTc3IC00MyAtMTY1IC00M3EtOCAwIC0yNCAxLjV0LTIzIDEuNXEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjVxMCAtMTcgMTQgLTI2cTYzIC00NyAxNTAgLTczLjV0MTcwIC0yNi41cTEzMCAwIDI0OCA1OHExNjYgNzkgMjU2IDIzMi41dDg4IDMzOS41djEyIHEyNyAyMiA2Mi41IDYzdDM1LjUgNjF6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDgyOyIgZD0iTTEyNDggMTQwOHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC0zNTBxLTIgMCAtMiAxdjY3MWgxNzdxMzEgMCAzMiAyM2wxMiAxNjRxMiAxNSAtOCAyNXEtMTAgMTIgLTI0IDEyaC0xODl2NzJxMCA0NCAxMS41IDU3dDU0LjUgMTNxNTcgMCAxMTcgLTEzcTEzIC0zIDI2IDVxMTEgOCAxMyAyMmwyMyAxNjZxMiAxMiAtNS41IDIyLjV0LTE5LjUgMTMuNSBxLTkzIDI2IC0xOTcgMjZxLTMxMSAwIC0zMTEgLTI5OXYtODVoLTk1cS0xMyAwIC0yMyAtMTAuNXQtMTAgLTI0LjV2LTE3MnEwIC04IDUuNSAtMTJ0MTAgLTQuNXQxNy41IC0wLjVoOTV2LTY3MWwxMCAtMWgtMzMwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4MzsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNOTI4IDcwNHEwIDE0IC05IDIzdC0yMyA5cS02NiAwIC0xMTMgLTQ3dC00NyAtMTEzcTAgLTE0IDkgLTIzdDIzIC05dDIzIDl0OSAyM3EwIDQwIDI4IDY4dDY4IDI4cTE0IDAgMjMgOXQ5IDIzek0xMTUyIDU3NHEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxdDc1IDE4MXQxODEgNzV0MTgxIC03NXQ3NSAtMTgxek0xMjggMGgxNTM2djEyOGgtMTUzNnYtMTI4ek0xMjgwIDU3NHEwIDE1OSAtMTEyLjUgMjcxLjUgdC0yNzEuNSAxMTIuNXQtMjcxLjUgLTExMi41dC0xMTIuNSAtMjcxLjV0MTEyLjUgLTI3MS41dDI3MS41IC0xMTIuNXQyNzEuNSAxMTIuNXQxMTIuNSAyNzEuNXpNMjU2IDEyMTZoMzg0djEyOGgtMzg0di0xMjh6TTEyOCAxMDI0aDE1MzZ2MTE4djEzOGgtODI4bC02NCAtMTI4aC02NDR2LTEyOHpNMTc5MiAxMjgwdi0xMjgwcTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41aC0xNTM2cS01MyAwIC05MC41IDM3LjV0LTM3LjUgOTAuNXYxMjgwIHEwIDUzIDM3LjUgOTAuNXQ5MC41IDM3LjVoMTUzNnE1MyAwIDkwLjUgLTM3LjV0MzcuNSAtOTAuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4NDsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNODMyIDEwMjRxMCA4MCAtNTYgMTM2dC0xMzYgNTZ0LTEzNiAtNTZ0LTU2IC0xMzZxMCAtNDIgMTkgLTgzcS00MSAxOSAtODMgMTlxLTgwIDAgLTEzNiAtNTZ0LTU2IC0xMzZ0NTYgLTEzNnQxMzYgLTU2dDEzNiA1NnQ1NiAxMzZxMCA0MiAtMTkgODNxNDEgLTE5IDgzIC0xOXE4MCAwIDEzNiA1NnQ1NiAxMzZ6TTE2ODMgMzIwcTAgLTE3IC00OSAtNjZ0LTY2IC00OXEtOSAwIC0yOC41IDE2dC0zNi41IDMzdC0zOC41IDQwdC0yNC41IDI2IGwtOTYgLTk2bDIyMCAtMjIwcTI4IC0yOCAyOCAtNjhxMCAtNDIgLTM5IC04MXQtODEgLTM5cS00MCAwIC02OCAyOGwtNjcxIDY3MXEtMTc2IC0xMzEgLTM2NSAtMTMxcS0xNjMgMCAtMjY1LjUgMTAyLjV0LTEwMi41IDI2NS41cTAgMTYwIDk1IDMxM3QyNDggMjQ4dDMxMyA5NXExNjMgMCAyNjUuNSAtMTAyLjV0MTAyLjUgLTI2NS41cTAgLTE4OSAtMTMxIC0zNjVsMzU1IC0zNTVsOTYgOTZxLTMgMyAtMjYgMjQuNXQtNDAgMzguNXQtMzMgMzYuNSB0LTE2IDI4LjVxMCAxNyA0OSA2NnQ2NiA0OXExMyAwIDIzIC0xMHE2IC02IDQ2IC00NC41dDgyIC03OS41dDg2LjUgLTg2dDczIC03OHQyOC41IC00MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4NTsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNODk2IDY0MHEwIDEwNiAtNzUgMTgxdC0xODEgNzV0LTE4MSAtNzV0LTc1IC0xODF0NzUgLTE4MXQxODEgLTc1dDE4MSA3NXQ3NSAxODF6TTE2NjQgMTI4cTAgNTIgLTM4IDkwdC05MCAzOHQtOTAgLTM4dC0zOCAtOTBxMCAtNTMgMzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTE2NjQgMTE1MnEwIDUyIC0zOCA5MHQtOTAgMzh0LTkwIC0zOHQtMzggLTkwcTAgLTUzIDM3LjUgLTkwLjV0OTAuNSAtMzcuNSB0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTI4MCA3MzF2LTE4NXEwIC0xMCAtNyAtMTkuNXQtMTYgLTEwLjVsLTE1NSAtMjRxLTExIC0zNSAtMzIgLTc2cTM0IC00OCA5MCAtMTE1cTcgLTEwIDcgLTIwcTAgLTEyIC03IC0xOXEtMjMgLTMwIC04Mi41IC04OS41dC03OC41IC01OS41cS0xMSAwIC0yMSA3bC0xMTUgOTBxLTM3IC0xOSAtNzcgLTMxcS0xMSAtMTA4IC0yMyAtMTU1cS03IC0yNCAtMzAgLTI0aC0xODZxLTExIDAgLTIwIDcuNXQtMTAgMTcuNSBsLTIzIDE1M3EtMzQgMTAgLTc1IDMxbC0xMTggLTg5cS03IC03IC0yMCAtN3EtMTEgMCAtMjEgOHEtMTQ0IDEzMyAtMTQ0IDE2MHEwIDkgNyAxOXExMCAxNCA0MSA1M3Q0NyA2MXEtMjMgNDQgLTM1IDgybC0xNTIgMjRxLTEwIDEgLTE3IDkuNXQtNyAxOS41djE4NXEwIDEwIDcgMTkuNXQxNiAxMC41bDE1NSAyNHExMSAzNSAzMiA3NnEtMzQgNDggLTkwIDExNXEtNyAxMSAtNyAyMHEwIDEyIDcgMjBxMjIgMzAgODIgODl0NzkgNTlxMTEgMCAyMSAtNyBsMTE1IC05MHEzNCAxOCA3NyAzMnExMSAxMDggMjMgMTU0cTcgMjQgMzAgMjRoMTg2cTExIDAgMjAgLTcuNXQxMCAtMTcuNWwyMyAtMTUzcTM0IC0xMCA3NSAtMzFsMTE4IDg5cTggNyAyMCA3cTExIDAgMjEgLThxMTQ0IC0xMzMgMTQ0IC0xNjBxMCAtOSAtNyAtMTlxLTEyIC0xNiAtNDIgLTU0dC00NSAtNjBxMjMgLTQ4IDM0IC04MmwxNTIgLTIzcTEwIC0yIDE3IC0xMC41dDcgLTE5LjV6TTE5MjAgMTk4di0xNDBxMCAtMTYgLTE0OSAtMzEgcS0xMiAtMjcgLTMwIC01MnE1MSAtMTEzIDUxIC0xMzhxMCAtNCAtNCAtN3EtMTIyIC03MSAtMTI0IC03MXEtOCAwIC00NiA0N3QtNTIgNjhxLTIwIC0yIC0zMCAtMnQtMzAgMnEtMTQgLTIxIC01MiAtNjh0LTQ2IC00N3EtMiAwIC0xMjQgNzFxLTQgMyAtNCA3cTAgMjUgNTEgMTM4cS0xOCAyNSAtMzAgNTJxLTE0OSAxNSAtMTQ5IDMxdjE0MHEwIDE2IDE0OSAzMXExMyAyOSAzMCA1MnEtNTEgMTEzIC01MSAxMzhxMCA0IDQgN3E0IDIgMzUgMjAgdDU5IDM0dDMwIDE2cTggMCA0NiAtNDYuNXQ1MiAtNjcuNXEyMCAyIDMwIDJ0MzAgLTJxNTEgNzEgOTIgMTEybDYgMnE0IDAgMTI0IC03MHE0IC0zIDQgLTdxMCAtMjUgLTUxIC0xMzhxMTcgLTIzIDMwIC01MnExNDkgLTE1IDE0OSAtMzF6TTE5MjAgMTIyMnYtMTQwcTAgLTE2IC0xNDkgLTMxcS0xMiAtMjcgLTMwIC01MnE1MSAtMTEzIDUxIC0xMzhxMCAtNCAtNCAtN3EtMTIyIC03MSAtMTI0IC03MXEtOCAwIC00NiA0N3QtNTIgNjggcS0yMCAtMiAtMzAgLTJ0LTMwIDJxLTE0IC0yMSAtNTIgLTY4dC00NiAtNDdxLTIgMCAtMTI0IDcxcS00IDMgLTQgN3EwIDI1IDUxIDEzOHEtMTggMjUgLTMwIDUycS0xNDkgMTUgLTE0OSAzMXYxNDBxMCAxNiAxNDkgMzFxMTMgMjkgMzAgNTJxLTUxIDExMyAtNTEgMTM4cTAgNCA0IDdxNCAyIDM1IDIwdDU5IDM0dDMwIDE2cTggMCA0NiAtNDYuNXQ1MiAtNjcuNXEyMCAyIDMwIDJ0MzAgLTJxNTEgNzEgOTIgMTEybDYgMnE0IDAgMTI0IC03MCBxNCAtMyA0IC03cTAgLTI1IC01MSAtMTM4cTE3IC0yMyAzMCAtNTJxMTQ5IC0xNSAxNDkgLTMxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDg2OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNDA4IDc2OHEwIC0xMzkgLTk0IC0yNTd0LTI1Ni41IC0xODYuNXQtMzUzLjUgLTY4LjVxLTg2IDAgLTE3NiAxNnEtMTI0IC04OCAtMjc4IC0xMjhxLTM2IC05IC04NiAtMTZoLTNxLTExIDAgLTIwLjUgOHQtMTEuNSAyMXEtMSAzIC0xIDYuNXQwLjUgNi41dDIgNmwyLjUgNXQzLjUgNS41dDQgNXQ0LjUgNXQ0IDQuNXE1IDYgMjMgMjV0MjYgMjkuNXQyMi41IDI5dDI1IDM4LjV0MjAuNSA0NHEtMTI0IDcyIC0xOTUgMTc3dC03MSAyMjQgcTAgMTM5IDk0IDI1N3QyNTYuNSAxODYuNXQzNTMuNSA2OC41dDM1My41IC02OC41dDI1Ni41IC0xODYuNXQ5NCAtMjU3ek0xNzkyIDUxMnEwIC0xMjAgLTcxIC0yMjQuNXQtMTk1IC0xNzYuNXExMCAtMjQgMjAuNSAtNDR0MjUgLTM4LjV0MjIuNSAtMjl0MjYgLTI5LjV0MjMgLTI1cTEgLTEgNCAtNC41dDQuNSAtNXQ0IC01dDMuNSAtNS41bDIuNSAtNXQyIC02dDAuNSAtNi41dC0xIC02LjVxLTMgLTE0IC0xMyAtMjJ0LTIyIC03IHEtNTAgNyAtODYgMTZxLTE1NCA0MCAtMjc4IDEyOHEtOTAgLTE2IC0xNzYgLTE2cS0yNzEgMCAtNDcyIDEzMnE1OCAtNCA4OCAtNHExNjEgMCAzMDkgNDV0MjY0IDEyOXExMjUgOTIgMTkyIDIxMnQ2NyAyNTRxMCA3NyAtMjMgMTUycTEyOSAtNzEgMjA0IC0xNzh0NzUgLTIzMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4NzsiIGQ9Ik0yNTYgMTkycTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTQwOCA3NjhxMCA1MSAtMzkgODkuNXQtODkgMzguNWgtMzUycTAgNTggNDggMTU5LjV0NDggMTYwLjVxMCA5OCAtMzIgMTQ1dC0xMjggNDdxLTI2IC0yNiAtMzggLTg1dC0zMC41IC0xMjUuNXQtNTkuNSAtMTA5LjVxLTIyIC0yMyAtNzcgLTkxcS00IC01IC0yMyAtMzB0LTMxLjUgLTQxdC0zNC41IC00Mi41IHQtNDAgLTQ0dC0zOC41IC0zNS41dC00MCAtMjd0LTM1LjUgLTloLTMydi02NDBoMzJxMTMgMCAzMS41IC0zdDMzIC02LjV0MzggLTExdDM1IC0xMS41dDM1LjUgLTEyLjV0MjkgLTEwLjVxMjExIC03MyAzNDIgLTczaDEyMXExOTIgMCAxOTIgMTY3cTAgMjYgLTUgNTZxMzAgMTYgNDcuNSA1Mi41dDE3LjUgNzMuNXQtMTggNjlxNTMgNTAgNTMgMTE5cTAgMjUgLTEwIDU1LjV0LTI1IDQ3LjVxMzIgMSA1My41IDQ3dDIxLjUgODF6TTE1MzYgNzY5IHEwIC04OSAtNDkgLTE2M3E5IC0zMyA5IC02OXEwIC03NyAtMzggLTE0NHEzIC0yMSAzIC00M3EwIC0xMDEgLTYwIC0xNzhxMSAtMTM5IC04NSAtMjE5LjV0LTIyNyAtODAuNWgtMzZoLTkzcS05NiAwIC0xODkuNSAyMi41dC0yMTYuNSA2NS41cS0xMTYgNDAgLTEzOCA0MGgtMjg4cS01MyAwIC05MC41IDM3LjV0LTM3LjUgOTAuNXY2NDBxMCA1MyAzNy41IDkwLjV0OTAuNSAzNy41aDI3NHEzNiAyNCAxMzcgMTU1cTU4IDc1IDEwNyAxMjggcTI0IDI1IDM1LjUgODUuNXQzMC41IDEyNi41dDYyIDEwOHEzOSAzNyA5MCAzN3E4NCAwIDE1MSAtMzIuNXQxMDIgLTEwMS41dDM1IC0xODZxMCAtOTMgLTQ4IC0xOTJoMTc2cTEwNCAwIDE4MCAtNzZ0NzYgLTE3OXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4ODsiIGQ9Ik0yNTYgMTA4OHEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTE0MDggNTEycTAgMzUgLTIxLjUgODF0LTUzLjUgNDdxMTUgMTcgMjUgNDcuNXQxMCA1NS41cTAgNjkgLTUzIDExOXExOCAzMiAxOCA2OXQtMTcuNSA3My41dC00Ny41IDUyLjVxNSAzMCA1IDU2cTAgODUgLTQ5IDEyNnQtMTM2IDQxaC0xMjhxLTEzMSAwIC0zNDIgLTczcS01IC0yIC0yOSAtMTAuNSB0LTM1LjUgLTEyLjV0LTM1IC0xMS41dC0zOCAtMTF0LTMzIC02LjV0LTMxLjUgLTNoLTMydi02NDBoMzJxMTYgMCAzNS41IC05dDQwIC0yN3QzOC41IC0zNS41dDQwIC00NHQzNC41IC00Mi41dDMxLjUgLTQxdDIzIC0zMHE1NSAtNjggNzcgLTkxcTQxIC00MyA1OS41IC0xMDkuNXQzMC41IC0xMjUuNXQzOCAtODVxOTYgMCAxMjggNDd0MzIgMTQ1cTAgNTkgLTQ4IDE2MC41dC00OCAxNTkuNWgzNTJxNTAgMCA4OSAzOC41dDM5IDg5LjV6IE0xNTM2IDUxMXEwIC0xMDMgLTc2IC0xNzl0LTE4MCAtNzZoLTE3NnE0OCAtOTkgNDggLTE5MnEwIC0xMTggLTM1IC0xODZxLTM1IC02OSAtMTAyIC0xMDEuNXQtMTUxIC0zMi41cS01MSAwIC05MCAzN3EtMzQgMzMgLTU0IDgydC0yNS41IDkwLjV0LTE3LjUgODQuNXQtMzEgNjRxLTQ4IDUwIC0xMDcgMTI3cS0xMDEgMTMxIC0xMzcgMTU1aC0yNzRxLTUzIDAgLTkwLjUgMzcuNXQtMzcuNSA5MC41djY0MHEwIDUzIDM3LjUgOTAuNXQ5MC41IDM3LjUgaDI4OHEyMiAwIDEzOCA0MHExMjggNDQgMjIzIDY2dDIwMCAyMmgxMTJxMTQwIDAgMjI2LjUgLTc5dDg1LjUgLTIxNnYtNXE2MCAtNzcgNjAgLTE3OHEwIC0yMiAtMyAtNDNxMzggLTY3IDM4IC0xNDRxMCAtMzYgLTkgLTY5cTQ5IC03NCA0OSAtMTYzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDg5OyIgaG9yaXotYWR2LXg9Ijg5NiIgZD0iTTgzMiAxNTA0di0xMzM5bC00NDkgLTIzNnEtMjIgLTEyIC00MCAtMTJxLTIxIDAgLTMxLjUgMTQuNXQtMTAuNSAzNS41cTAgNiAyIDIwbDg2IDUwMGwtMzY0IDM1NHEtMjUgMjcgLTI1IDQ4cTAgMzcgNTYgNDZsNTAyIDczbDIyNSA0NTVxMTkgNDEgNDkgNDF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwOGE7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE2NjQgOTQwcTAgODEgLTIxLjUgMTQzdC01NSA5OC41dC04MS41IDU5LjV0LTk0IDMxdC05OCA4dC0xMTIgLTI1LjV0LTExMC41IC02NHQtODYuNSAtNzJ0LTYwIC02MS41cS0xOCAtMjIgLTQ5IC0yMnQtNDkgMjJxLTI0IDI4IC02MCA2MS41dC04Ni41IDcydC0xMTAuNSA2NHQtMTEyIDI1LjV0LTk4IC04dC05NCAtMzF0LTgxLjUgLTU5LjV0LTU1IC05OC41dC0yMS41IC0xNDNxMCAtMTY4IDE4NyAtMzU1bDU4MSAtNTYwbDU4MCA1NTkgcTE4OCAxODggMTg4IDM1NnpNMTc5MiA5NDBxMCAtMjIxIC0yMjkgLTQ1MGwtNjIzIC02MDBxLTE4IC0xOCAtNDQgLTE4dC00NCAxOGwtNjI0IDYwMnEtMTAgOCAtMjcuNSAyNnQtNTUuNSA2NS41dC02OCA5Ny41dC01My41IDEyMXQtMjMuNSAxMzhxMCAyMjAgMTI3IDM0NHQzNTEgMTI0cTYyIDAgMTI2LjUgLTIxLjV0MTIwIC01OHQ5NS41IC02OC41dDc2IC02OHEzNiAzNiA3NiA2OHQ5NS41IDY4LjV0MTIwIDU4dDEyNi41IDIxLjUgcTIyNCAwIDM1MSAtMTI0dDEyNyAtMzQ0eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDhiOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik02NDAgOTZxMCAtNCAxIC0yMHQwLjUgLTI2LjV0LTMgLTIzLjV0LTEwIC0xOS41dC0yMC41IC02LjVoLTMyMHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2NzA0cTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWgzMjBxMTMgMCAyMi41IC05LjV0OS41IC0yMi41cTAgLTQgMSAtMjB0MC41IC0yNi41dC0zIC0yMy41dC0xMCAtMTkuNXQtMjAuNSAtNi41aC0zMjBxLTY2IDAgLTExMyAtNDd0LTQ3IC0xMTN2LTcwNCBxMCAtNjYgNDcgLTExM3QxMTMgLTQ3aDI4OGgxMWgxM3QxMS41IC0xdDExLjUgLTN0OCAtNS41dDcgLTl0MiAtMTMuNXpNMTU2OCA2NDBxMCAtMjYgLTE5IC00NWwtNTQ0IC01NDRxLTE5IC0xOSAtNDUgLTE5dC00NSAxOXQtMTkgNDV2Mjg4aC00NDhxLTI2IDAgLTQ1IDE5dC0xOSA0NXYzODRxMCAyNiAxOSA0NXQ0NSAxOWg0NDh2Mjg4cTAgMjYgMTkgNDV0NDUgMTl0NDUgLTE5bDU0NCAtNTQ0cTE5IC0xOSAxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwOGM7IiBkPSJNNTEyIDE2MHY2NDBxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC0xOTJxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di02NDBxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxOTJxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNNTAzIDEwMjhxMCA1MSAtMzYgODcuNXQtODggMzYuNXEtNTEgMCAtODcgLTM2LjV0LTM2IC04Ny41dDM2IC04Ny41dDg3IC0zNi41cTUyIDAgODggMzYuNXQzNiA4Ny41ek0xMjgwIDE2MHY0MzUgcTAgMTI3IC03My41IDE5Mi41dC0yMDIuNSA2NS41cS05MCAwIC0xNTggLTQ1cS0xMiAtOCAtMTQgLTEycTAgMzYgLTM1IDM2aC0xNzZxLTE0IDAgLTI5LjUgLTcuNXQtMTUuNSAtMjAuNXYtNjQ0cTAgLTEzIDE1LjUgLTIyLjV0MjkuNSAtOS41aDE4MnExMiAwIDIwLjUgOS41dDguNSAyMi41djM0OXEwIDE0MCAxMTQgMTQwcTQ5IDAgNjMuNSAtMjIuNXQxNC41IC03My41di0zOTNxMCAtMTMgMTIgLTIyLjV0MjYgLTkuNWgxODYgcTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDhkOyIgaG9yaXotYWR2LXg9IjExNTIiIGQ9Ik00ODAgNjcydjQ0OHEwIDE0IC05IDIzdC0yMyA5dC0yMyAtOXQtOSAtMjN2LTQ0OHEwIC0xNCA5IC0yM3QyMyAtOXQyMyA5dDkgMjN6TTExNTIgMzIwcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtNDI5bC01MSAtNDgzcS0yIC0xMiAtMTAuNSAtMjAuNXQtMjAuNSAtOC41aC0xcS0yNyAwIC0zMiAyN2wtNzYgNDg1aC00MDRxLTI2IDAgLTQ1IDE5dC0xOSA0NXEwIDEyMyA3OC41IDIyMS41dDE3Ny41IDk4LjV2NTEycS01MiAwIC05MCAzOCB0LTM4IDkwdDM4IDkwdDkwIDM4aDY0MHE1MiAwIDkwIC0zOHQzOCAtOTB0LTM4IC05MHQtOTAgLTM4di01MTJxOTkgMCAxNzcuNSAtOTguNXQ3OC41IC0yMjEuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4ZTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTQwOCA2MDh2LTMyMHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtODMycS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY4MzJxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDcwNHExNCAwIDIzIC05dDkgLTIzdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC03MDRxLTY2IDAgLTExMyAtNDd0LTQ3IC0xMTN2LTgzMnEwIC02NiA0NyAtMTEzdDExMyAtNDdoODMycTY2IDAgMTEzIDQ3dDQ3IDExM3YzMjAgcTAgMTQgOSAyM3QyMyA5aDY0cTE0IDAgMjMgLTl0OSAtMjN6TTE3OTIgMTQ3MnYtNTEycTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTlsLTE3NiAxNzZsLTY1MiAtNjUycS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTExNCAxMTRxLTEwIDEwIC0xMCAyM3QxMCAyM2w2NTIgNjUybC0xNzYgMTc2cS0xOSAxOSAtMTkgNDV0MTkgNDV0NDUgMTloNTEycTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5MDsiIGQ9Ik0xMTg0IDY0MHEwIC0yNiAtMTkgLTQ1bC01NDQgLTU0NHEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5dC0xOSA0NXYyODhoLTQ0OHEtMjYgMCAtNDUgMTl0LTE5IDQ1djM4NHEwIDI2IDE5IDQ1dDQ1IDE5aDQ0OHYyODhxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTlsNTQ0IC01NDRxMTkgLTE5IDE5IC00NXpNMTUzNiA5OTJ2LTcwNHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtMzIwcS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjUgcTAgNCAtMSAyMHQtMC41IDI2LjV0MyAyMy41dDEwIDE5LjV0MjAuNSA2LjVoMzIwcTY2IDAgMTEzIDQ3dDQ3IDExM3Y3MDRxMCA2NiAtNDcgMTEzdC0xMTMgNDdoLTI4OGgtMTFoLTEzdC0xMS41IDF0LTExLjUgM3QtOCA1LjV0LTcgOXQtMiAxMy41cTAgNCAtMSAyMHQtMC41IDI2LjV0MyAyMy41dDEwIDE5LjV0MjAuNSA2LjVoMzIwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDkxOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik00NTggNjUzcS03NCAxNjIgLTc0IDM3MWgtMjU2di05NnEwIC03OCA5NC41IC0xNjJ0MjM1LjUgLTExM3pNMTUzNiA5Mjh2OTZoLTI1NnEwIC0yMDkgLTc0IC0zNzFxMTQxIDI5IDIzNS41IDExM3Q5NC41IDE2MnpNMTY2NCAxMDU2di0xMjhxMCAtNzEgLTQxLjUgLTE0M3QtMTEyIC0xMzB0LTE3MyAtOTcuNXQtMjE1LjUgLTQ0LjVxLTQyIC01NCAtOTUgLTk1cS0zOCAtMzQgLTUyLjUgLTcyLjV0LTE0LjUgLTg5LjVxMCAtNTQgMzAuNSAtOTEgdDk3LjUgLTM3cTc1IDAgMTMzLjUgLTQ1LjV0NTguNSAtMTE0LjV2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTgzMnEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDY5IDU4LjUgMTE0LjV0MTMzLjUgNDUuNXE2NyAwIDk3LjUgMzd0MzAuNSA5MXEwIDUxIC0xNC41IDg5LjV0LTUyLjUgNzIuNXEtNTMgNDEgLTk1IDk1cS0xMTMgNSAtMjE1LjUgNDQuNXQtMTczIDk3LjV0LTExMiAxMzB0LTQxLjUgMTQzdjEyOHEwIDQwIDI4IDY4dDY4IDI4aDI4OHY5NiBxMCA2NiA0NyAxMTN0MTEzIDQ3aDU3NnE2NiAwIDExMyAtNDd0NDcgLTExM3YtOTZoMjg4cTQwIDAgNjggLTI4dDI4IC02OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5MjsiIGQ9Ik01ODIgMjI4cTAgLTY2IC05MyAtNjZxLTEwNyAwIC0xMDcgNjNxMCA2NCA5OCA2NHExMDIgMCAxMDIgLTYxek01NDYgNjk0cTAgLTg1IC03NCAtODVxLTc3IDAgLTc3IDg0cTAgOTAgNzcgOTBxMzYgMCA1NSAtMjZ0MTkgLTYzek03MTIgNzY5djEyNXEtNzggLTI5IC0xMzUgLTI5cS01MCAyOSAtMTEwIDI5cS04NiAwIC0xNDUgLTU3dC01OSAtMTQzcTAgLTUwIDI5LjUgLTEwMnQ3My41IC02N3YtM3EtMzggLTE3IC0zOCAtODUgcTAgLTUyIDQxIC03N3YtM3EtMTEzIC0zNyAtMTEzIC0xMzlxMCAtNjAgMzYgLTk4dDg0IC01MXQxMDcgLTEzcTIyNCAwIDIyNCAxODdxMCA0OCAtMjUuNSA3OHQtNjIuNSA0Mi41dC03NCAyMS41dC02Mi41IDIzLjV0LTI1LjUgMzkuNXEwIDQ0IDQ5IDUycTc3IDE1IDEyMiA3MHQ0NSAxMzRxMCAyNCAtMTAgNTJxMzAgNyA0OSAxM3pNNzcxIDM1MGgxMzdxLTIgMjAgLTIgOTB2MzcycTAgNTkgMiA3NmgtMTM3cTMgLTI2IDMgLTc5di0zNzcgcTAgLTU1IC0zIC04MnpNMTI4MCAzNjZ2MTIxcS0zMCAtMjEgLTY4IC0yMXEtNTMgMCAtNTMgODJ2MjI1aDUycTkgMCAyNi41IC0xdDI2LjUgLTF2MTE3aC0xMDVxMCA4MiAzIDEwMmgtMTQwcTQgLTI0IDQgLTU1di00N2gtNjB2LTExN3EzNiAzIDM3IDNxNCAwIDExLjUgLTAuNXQxMS41IC0wLjV2LTJoLTJ2LTIxN3EwIC0zNyAyLjUgLTY0dDExLjUgLTU2LjV0MjQuNSAtNDguNXQ0My41IC0zMXQ2NiAtMTJxNjQgMCAxMDggMjR6TTkyNCAxMDcyIHEwIDM2IC0yNCA2My41dC02MCAyNy41dC02MC41IC0yN3QtMjQuNSAtNjRxMCAtMzYgMjUgLTYyLjV0NjAgLTI2LjV0NTkuNSAyN3QyNC41IDYyek0xNTM2IDExMjB2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5MzsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTY2NCA0ODB2LTU3NnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE2MDBxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY1NzZxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxOTJxMTMgMCAyMi41IC05LjV0OS41IC0yMi41di0zNTJoMTE1MnYzNTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxOTJxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xMzQ0IDgzMnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTI1NnYtNDQ4IHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTI1NnEtMjYgMCAtNDUgMTl0LTE5IDQ1djQ0OGgtMjU2cS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDVsNDQ4IDQ0OHExOSAxOSA0NSAxOXQ0NSAtMTlsNDQ4IC00NDhxMTkgLTE5IDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5NDsiIGQ9Ik0xNDA3IDcxMHEwIDQ0IC03IDExMy41dC0xOCA5Ni41cS0xMiAzMCAtMTcgNDR0LTkgMzYuNXQtNCA0OC41cTAgMjMgNSA2OC41dDUgNjcuNXEwIDM3IC0xMCA1NXEtNCAxIC0xMyAxcS0xOSAwIC01OCAtNC41dC01OSAtNC41cS02MCAwIC0xNzYgMjR0LTE3NSAyNHEtNDMgMCAtOTQuNSAtMTEuNXQtODUgLTIzLjV0LTg5LjUgLTM0cS0xMzcgLTU0IC0yMDIgLTEwM3EtOTYgLTczIC0xNTkuNSAtMTg5LjV0LTg4IC0yMzZ0LTI0LjUgLTI0OC41IHEwIC00MCAxMi41IC0xMjB0MTIuNSAtMTIxcTAgLTIzIC0xMSAtNjYuNXQtMTEgLTY1LjV0MTIgLTM2LjV0MzQgLTE0LjVxMjQgMCA3Mi41IDExdDczLjUgMTFxNTcgMCAxNjkuNSAtMTUuNXQxNjkuNSAtMTUuNXExODEgMCAyODQgMzZxMTI5IDQ1IDIzNS41IDE1Mi41dDE2NiAyNDUuNXQ1OS41IDI3NXpNMTUzNSA3MTJxMCAtMTY1IC03MCAtMzI3LjV0LTE5NiAtMjg4dC0yODEgLTE4MC41cS0xMjQgLTQ0IC0zMjYgLTQ0IHEtNTcgMCAtMTcwIDE0LjV0LTE2OSAxNC41cS0yNCAwIC03Mi41IC0xNC41dC03My41IC0xNC41cS03MyAwIC0xMjMuNSA1NS41dC01MC41IDEyOC41cTAgMjQgMTEgNjh0MTEgNjdxMCA0MCAtMTIuNSAxMjAuNXQtMTIuNSAxMjEuNXEwIDExMSAxOCAyMTcuNXQ1NC41IDIwOS41dDEwMC41IDE5NHQxNTAgMTU2cTc4IDU5IDIzMiAxMjBxMTk0IDc4IDMxNiA3OHE2MCAwIDE3NS41IC0yNHQxNzMuNSAtMjRxMTkgMCA1NyA1dDU4IDUgcTgxIDAgMTE4IC01MC41dDM3IC0xMzQuNXEwIC0yMyAtNSAtNjh0LTUgLTY4cTAgLTEwIDEgLTE4LjV0MyAtMTd0NCAtMTMuNXQ2LjUgLTE2dDYuNSAtMTdxMTYgLTQwIDI1IC0xMTguNXQ5IC0xMzYuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5NTsiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNMTQwOCAyOTZxMCAtMjcgLTEwIC03MC41dC0yMSAtNjguNXEtMjEgLTUwIC0xMjIgLTEwNnEtOTQgLTUxIC0xODYgLTUxcS0yNyAwIC01Mi41IDMuNXQtNTcuNSAxMi41dC00Ny41IDE0LjV0LTU1LjUgMjAuNXQtNDkgMThxLTk4IDM1IC0xNzUgODNxLTEyOCA3OSAtMjY0LjUgMjE1LjV0LTIxNS41IDI2NC41cS00OCA3NyAtODMgMTc1cS0zIDkgLTE4IDQ5dC0yMC41IDU1LjV0LTE0LjUgNDcuNXQtMTIuNSA1Ny41dC0zLjUgNTIuNSBxMCA5MiA1MSAxODZxNTYgMTAxIDEwNiAxMjJxMjUgMTEgNjguNSAyMXQ3MC41IDEwcTE0IDAgMjEgLTNxMTggLTYgNTMgLTc2cTExIC0xOSAzMCAtNTR0MzUgLTYzLjV0MzEgLTUzLjVxMyAtNCAxNy41IC0yNXQyMS41IC0zNS41dDcgLTI4LjVxMCAtMjAgLTI4LjUgLTUwdC02MiAtNTV0LTYyIC01M3QtMjguNSAtNDZxMCAtOSA1IC0yMi41dDguNSAtMjAuNXQxNCAtMjR0MTEuNSAtMTlxNzYgLTEzNyAxNzQgLTIzNXQyMzUgLTE3NCBxMiAtMSAxOSAtMTEuNXQyNCAtMTR0MjAuNSAtOC41dDIyLjUgLTVxMTggMCA0NiAyOC41dDUzIDYydDU1IDYydDUwIDI4LjVxMTQgMCAyOC41IC03dDM1LjUgLTIxLjV0MjUgLTE3LjVxMjUgLTE1IDUzLjUgLTMxdDYzLjUgLTM1dDU0IC0zMHE3MCAtMzUgNzYgLTUzcTMgLTcgMyAtMjF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwOTY7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTExMjAgMTI4MGgtODMycS02NiAwIC0xMTMgLTQ3dC00NyAtMTEzdi04MzJxMCAtNjYgNDcgLTExM3QxMTMgLTQ3aDgzMnE2NiAwIDExMyA0N3Q0NyAxMTN2ODMycTAgNjYgLTQ3IDExM3QtMTEzIDQ3ek0xNDA4IDExMjB2LTgzMnEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtODMycS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY4MzJxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDgzMiBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwOTc7IiBob3Jpei1hZHYteD0iMTI4MCIgZD0iTTExNTIgMTI4MGgtMTAyNHYtMTI0Mmw0MjMgNDA2bDg5IDg1bDg5IC04NWw0MjMgLTQwNnYxMjQyek0xMTY0IDE0MDhxMjMgMCA0NCAtOXEzMyAtMTMgNTIuNSAtNDF0MTkuNSAtNjJ2LTEyODlxMCAtMzQgLTE5LjUgLTYydC01Mi41IC00MXEtMTkgLTggLTQ0IC04cS00OCAwIC04MyAzMmwtNDQxIDQyNGwtNDQxIC00MjRxLTM2IC0zMyAtODMgLTMzcS0yMyAwIC00NCA5cS0zMyAxMyAtNTIuNSA0MXQtMTkuNSA2MnYxMjg5IHEwIDM0IDE5LjUgNjJ0NTIuNSA0MXEyMSA5IDQ0IDloMTA0OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5ODsiIGQ9Ik0xMjgwIDM0M3EwIDExIC0yIDE2cS0zIDggLTM4LjUgMjkuNXQtODguNSA0OS41bC01MyAyOXEtNSAzIC0xOSAxM3QtMjUgMTV0LTIxIDVxLTE4IDAgLTQ3IC0zMi41dC01NyAtNjUuNXQtNDQgLTMzcS03IDAgLTE2LjUgMy41dC0xNS41IDYuNXQtMTcgOS41dC0xNCA4LjVxLTk5IDU1IC0xNzAuNSAxMjYuNXQtMTI2LjUgMTcwLjVxLTIgMyAtOC41IDE0dC05LjUgMTd0LTYuNSAxNS41dC0zLjUgMTYuNXEwIDEzIDIwLjUgMzMuNXQ0NSAzOC41IHQ0NSAzOS41dDIwLjUgMzYuNXEwIDEwIC01IDIxdC0xNSAyNXQtMTMgMTlxLTMgNiAtMTUgMjguNXQtMjUgNDUuNXQtMjYuNSA0Ny41dC0yNSA0MC41dC0xNi41IDE4dC0xNiAycS00OCAwIC0xMDEgLTIycS00NiAtMjEgLTgwIC05NC41dC0zNCAtMTMwLjVxMCAtMTYgMi41IC0zNHQ1IC0zMC41dDkgLTMzdDEwIC0yOS41dDEyLjUgLTMzdDExIC0zMHE2MCAtMTY0IDIxNi41IC0zMjAuNXQzMjAuNSAtMjE2LjVxNiAtMiAzMCAtMTF0MzMgLTEyLjUgdDI5LjUgLTEwdDMzIC05dDMwLjUgLTV0MzQgLTIuNXE1NyAwIDEzMC41IDM0dDk0LjUgODBxMjIgNTMgMjIgMTAxek0xNTM2IDExMjB2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5OTsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNMTg3NSAxMjAycTAgLTEwIC01IC0xOHEtNjQgLTEwNCAtMTc5IC0xOTB2LTMzcTQgLTIyNyAtMTAwIC00NTdxLTEzNCAtMjk3IC0zOTcuNSAtNDY0LjV0LTU5MS41IC0xNjcuNXEtMjY1IDAgLTUwMCAxMjJxLTY0IDMzIC04NyA1MHEtMTUgMTIgLTE1IDI3cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVxMTQgMCA0NCAtMi41dDQ1IC0yLjVxMjA0IDAgMzc1IDEwNnEtMTAzIDI0IC0xODEgOTZ0LTExMSAxNzNxLTIgOCAtMiAxMXEwIDEyIDkgMjEuNSB0MjIgOS41cTUgMCAxNCAtMnQxMiAtMnEtODkgNTUgLTE0MiAxNDd0LTUzIDE5NnEwIDE1IDExLjUgMjUuNXQyNy41IDEwLjVxMTAgMCAzNSAtMTEuNXQzMCAtMTMuNXEtOTIgMTEwIC05MiAyNTZxMCA1MSAxNC41IDEwOHQ0MC41IDk1cTEwIDE2IDI1IDE2cTE2IDAgMjcgLTEycTc2IC04NCAxMTAgLTExNXExMjMgLTExMSAyNzYgLTE3Ny41dDMxNyAtODAuNXEtNCAyMSAtNCA0OXEwIDE2NyAxMTguNSAyODUuNXQyODUuNSAxMTguNSBxMTYzIDAgMjgyIC0xMTRxOTUgMjAgMjA5IDgycTggNSAxNiA1cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXEwIC0yNCAtMjggLTczdC01MSAtNzZxNyAyIDMwIDEwLjV0NDMgMTZ0MjQgNy41cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5YTsiIGhvcml6LWFkdi14PSI3NjgiIGQ9Ik01NjAgMTEyNXEtNDkgMCAtNjIgLTE1LjV0LTEzIC02Ni41di04OGgyMTdxMTYgMCAyNyAtMTJxMTEgLTEzIDEwIC0yOWwtMTQgLTIwMHEtMiAtMTUgLTEyLjUgLTI1LjV0LTI1LjUgLTEwLjVoLTIwMnYtNzY4cTAgLTE2IC0xMSAtMjd0LTI2IC0xMWgtMjUwcS0xNiAwIC0yNyAxMXQtMTEgMjd2NzY4aC0xMjJxLTE2IDAgLTI3IDExLjV0LTExIDI3LjV2MjAwcTAgMTYgMTEgMjd0MjcgMTFoMTIydjEwM3EwIDE3NyA4OCAyNjMuNSB0MjY3IDg2LjVxMTIwIDAgMjI1IC0zMHExNCAtNCAyMiAtMTZ0NiAtMjZsLTI3IC0xOTVxLTIgLTE2IC0xNiAtMjZxLTE0IC05IC0zMCAtNnEtNzYgMTYgLTEzNSAxNnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5YjsiIGQ9Ik0xNDA4IDY0MHEwIDEzMCAtNTEgMjQ4LjV0LTEzNi41IDIwNHQtMjA0IDEzNi41dC0yNDguNSA1MXQtMjQ4LjUgLTUxdC0yMDQgLTEzNi41dC0xMzYuNSAtMjA0dC01MSAtMjQ4LjVxMCAtMjA5IDEyNC41IC0zNzguNXQzMjMuNSAtMjMxLjV2MTY5cS01NCAtNyAtNjkgLTdxLTExMCAwIC0xNTMgMTAwcS0xNSAzOCAtMzYgNjNxLTUgNiAtMjEgMTl0LTI4LjUgMjR0LTEyLjUgMTZxMCAxMiAyOCAxMnEyOSAwIDUxLjUgLTE0LjV0MzggLTM1IHQzMS41IC00MS41dDQwLjUgLTM1LjV0NTYuNSAtMTQuNXE0MiAwIDgxIDE0cTE2IDU3IDYzIDg5cS0xNjYgMTYgLTI0NiA4My41dC04MCAyMjQuNXEwIDExOCA3MyAxOThxLTE0IDQyIC0xNCA4NHEwIDU4IDI3IDEwOXE1NyAwIDEwMSAtMTkuNXQxMDEgLTYwLjVxNzYgMTggMTY5IDE4cTgwIDAgMTUzIC0xNnE1NyA0MCAxMDAuNSA1OXQ5OS41IDE5cTI3IC01MSAyNyAtMTA5cTAgLTQzIC0xNCAtODNxNzMgLTgyIDczIC0xOTkgcTAgLTE1NyAtODAgLTIyNS41dC0yNDUgLTgzLjVxNjkgLTQ3IDY5IC0xMzF2LTIyNnExOTkgNjIgMzIzLjUgMjMxLjV0MTI0LjUgMzc4LjV6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDljOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik03MDQgMTYwcTAgNiAtMTUgNTd0LTM1IDExNS41dC0yMCA2NS41cTMyIDE2IDUxIDQ3dDE5IDY3cTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41cTAgLTM2IDE5IC02Ni41dDUxIC00Ny41cTAgLTIgLTIwIC02NnQtMzUgLTExNXQtMTUgLTU3cTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTkycTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTE2NjQgOTYwdi0yNTZxMCAtMjYgLTE5IC00NXQtNDUgLTE5IGgtNjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYyNTZxMCAxMDYgLTc1IDE4MXQtMTgxIDc1dC0xODEgLTc1dC03NSAtMTgxdi0xOTJoOTZxNDAgMCA2OCAtMjh0MjggLTY4di01NzZxMCAtNDAgLTI4IC02OHQtNjggLTI4aC05NjBxLTQwIDAgLTY4IDI4dC0yOCA2OHY1NzZxMCA0MCAyOCA2OHQ2OCAyOGg2NzJ2MTkycTAgMTg1IDEzMS41IDMxNi41dDMxNi41IDEzMS41dDMxNi41IC0xMzEuNXQxMzEuNSAtMzE2LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwOWQ7IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTE3NjAgMTQwOHE2NiAwIDExMyAtNDd0NDcgLTExM3YtMTIxNnEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTYwMHEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MTIxNnEwIDY2IDQ3IDExM3QxMTMgNDdoMTYwMHpNMTYwIDEyODBxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di0yMjRoMTY2NHYyMjRxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC0xNjAwek0xNzYwIDBxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXY2MDhoLTE2NjR2LTYwOCBxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxNjAwek0yNTYgMTI4djEyOGgyNTZ2LTEyOGgtMjU2ek02NDAgMTI4djEyOGgzODR2LTEyOGgtMzg0eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDllOyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0zODQgMTkycTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnpNODk2IDY5cTIgLTI4IC0xNyAtNDhxLTE4IC0yMSAtNDcgLTIxaC0xMzVxLTI1IDAgLTQzIDE2LjV0LTIwIDQxLjVxLTIyIDIyOSAtMTg0LjUgMzkxLjV0LTM5MS41IDE4NC41cS0yNSAyIC00MS41IDIwdC0xNi41IDQzdjEzNXEwIDI5IDIxIDQ3cTE3IDE3IDQzIDE3aDVxMTYwIC0xMyAzMDYgLTgwLjUgdDI1OSAtMTgxLjVxMTE0IC0xMTMgMTgxLjUgLTI1OXQ4MC41IC0zMDZ6TTE0MDggNjdxMiAtMjcgLTE4IC00N3EtMTggLTIwIC00NiAtMjBoLTE0M3EtMjYgMCAtNDQuNSAxNy41dC0xOS41IDQyLjVxLTEyIDIxNSAtMTAxIDQwOC41dC0yMzEuNSAzMzZ0LTMzNiAyMzEuNXQtNDA4LjUgMTAycS0yNSAxIC00Mi41IDE5LjV0LTE3LjUgNDMuNXYxNDNxMCAyOCAyMCA0NnExOCAxOCA0NCAxOGgzcTI2MiAtMTMgNTAxLjUgLTEyMHQ0MjUuNSAtMjk0IHExODcgLTE4NiAyOTQgLTQyNS41dDEyMCAtNTAxLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYTA7IiBkPSJNMTA0MCAzMjBxMCAtMzMgLTIzLjUgLTU2LjV0LTU2LjUgLTIzLjV0LTU2LjUgMjMuNXQtMjMuNSA1Ni41dDIzLjUgNTYuNXQ1Ni41IDIzLjV0NTYuNSAtMjMuNXQyMy41IC01Ni41ek0xMjk2IDMyMHEwIC0zMyAtMjMuNSAtNTYuNXQtNTYuNSAtMjMuNXQtNTYuNSAyMy41dC0yMy41IDU2LjV0MjMuNSA1Ni41dDU2LjUgMjMuNXQ1Ni41IC0yMy41dDIzLjUgLTU2LjV6TTE0MDggMTYwdjMyMHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjUgaC0xMjE2cS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXYtMzIwcTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTIxNnExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xNzggNjQwaDExODBsLTE1NyA0ODJxLTQgMTMgLTE2IDIxLjV0LTI2IDguNWgtNzgycS0xNCAwIC0yNiAtOC41dC0xNiAtMjEuNXpNMTUzNiA0ODB2LTMyMHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTIxNnEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MzIwcTAgMjUgMTYgNzUgbDE5NyA2MDZxMTcgNTMgNjMgODZ0MTAxIDMzaDc4MnE1NSAwIDEwMSAtMzN0NjMgLTg2bDE5NyAtNjA2cTE2IC01MCAxNiAtNzV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYTE7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE2NjQgODk2cTUzIDAgOTAuNSAtMzcuNXQzNy41IC05MC41dC0zNy41IC05MC41dC05MC41IC0zNy41di0zODRxMCAtNTIgLTM4IC05MHQtOTAgLTM4cS00MTcgMzQ3IC04MTIgMzgwcS01OCAtMTkgLTkxIC02NnQtMzEgLTEwMC41dDQwIC05Mi41cS0yMCAtMzMgLTIzIC02NS41dDYgLTU4dDMzLjUgLTU1dDQ4IC01MHQ2MS41IC01MC41cS0yOSAtNTggLTExMS41IC04M3QtMTY4LjUgLTExLjV0LTEzMiA1NS41cS03IDIzIC0yOS41IDg3LjUgdC0zMiA5NC41dC0yMyA4OXQtMTUgMTAxdDMuNSA5OC41dDIyIDExMC41aC0xMjJxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjE5MnEwIDY2IDQ3IDExM3QxMTMgNDdoNDgwcTQzNSAwIDg5NiAzODRxNTIgMCA5MCAtMzh0MzggLTkwdi0zODR6TTE1MzYgMjkydjk1NHEtMzk0IC0zMDIgLTc2OCAtMzQzdi0yNzBxMzc3IC00MiA3NjggLTM0MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBhMjsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNODQ4IC0xNjBxMCAxNiAtMTYgMTZxLTU5IDAgLTEwMS41IDQyLjV0LTQyLjUgMTAxLjVxMCAxNiAtMTYgMTZ0LTE2IC0xNnEwIC03MyA1MS41IC0xMjQuNXQxMjQuNSAtNTEuNXExNiAwIDE2IDE2ek0xODMgMTI4aDEyOThxLTE2NCAxODEgLTI0Ni41IDQxMS41dC04Mi41IDQ4NC41cTAgMjU2IC0zMjAgMjU2dC0zMjAgLTI1NnEwIC0yNTQgLTgyLjUgLTQ4NC41dC0yNDYuNSAtNDExLjV6TTE2NjQgMTI4cTAgLTUyIC0zOCAtOTB0LTkwIC0zOCBoLTQ0OHEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxaC00NDhxLTUyIDAgLTkwIDM4dC0zOCA5MHExOTAgMTYxIDI4NyAzOTcuNXQ5NyA0OTguNXEwIDE2NSA5NiAyNjJ0MjY0IDExN3EtOCAxOCAtOCAzN3EwIDQwIDI4IDY4dDY4IDI4dDY4IC0yOHQyOCAtNjhxMCAtMTkgLTggLTM3cTE2OCAtMjAgMjY0IC0xMTd0OTYgLTI2MnEwIC0yNjIgOTcgLTQ5OC41dDI4NyAtMzk3LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYTM7IiBkPSJNMTM3NiA2NDBsMTM4IC0xMzVxMzAgLTI4IDIwIC03MHEtMTIgLTQxIC01MiAtNTFsLTE4OCAtNDhsNTMgLTE4NnExMiAtNDEgLTE5IC03MHEtMjkgLTMxIC03MCAtMTlsLTE4NiA1M2wtNDggLTE4OHEtMTAgLTQwIC01MSAtNTJxLTEyIC0yIC0xOSAtMnEtMzEgMCAtNTEgMjJsLTEzNSAxMzhsLTEzNSAtMTM4cS0yOCAtMzAgLTcwIC0yMHEtNDEgMTEgLTUxIDUybC00OCAxODhsLTE4NiAtNTNxLTQxIC0xMiAtNzAgMTlxLTMxIDI5IC0xOSA3MCBsNTMgMTg2bC0xODggNDhxLTQwIDEwIC01MiA1MXEtMTAgNDIgMjAgNzBsMTM4IDEzNWwtMTM4IDEzNXEtMzAgMjggLTIwIDcwcTEyIDQxIDUyIDUxbDE4OCA0OGwtNTMgMTg2cS0xMiA0MSAxOSA3MHEyOSAzMSA3MCAxOWwxODYgLTUzbDQ4IDE4OHExMCA0MSA1MSA1MXE0MSAxMiA3MCAtMTlsMTM1IC0xMzlsMTM1IDEzOXEyOSAzMCA3MCAxOXE0MSAtMTAgNTEgLTUxbDQ4IC0xODhsMTg2IDUzcTQxIDEyIDcwIC0xOXEzMSAtMjkgMTkgLTcwIGwtNTMgLTE4NmwxODggLTQ4cTQwIC0xMCA1MiAtNTFxMTAgLTQyIC0yMCAtNzB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYTQ7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTI1NiAxOTJxMCAyNiAtMTkgNDV0LTQ1IDE5dC00NSAtMTl0LTE5IC00NXQxOSAtNDV0NDUgLTE5dDQ1IDE5dDE5IDQ1ek0xNjY0IDc2OHEwIDUxIC0zOSA4OS41dC04OSAzOC41aC01NzZxMCAyMCAxNSA0OC41dDMzIDU1dDMzIDY4dDE1IDg0LjVxMCA2NyAtNDQuNSA5Ny41dC0xMTUuNSAzMC41cS0yNCAwIC05MCAtMTM5cS0yNCAtNDQgLTM3IC02NXEtNDAgLTY0IC0xMTIgLTE0NXEtNzEgLTgxIC0xMDEgLTEwNiBxLTY5IC01NyAtMTQwIC01N2gtMzJ2LTY0MGgzMnE3MiAwIDE2NyAtMzJ0MTkzLjUgLTY0dDE3OS41IC0zMnExODkgMCAxODkgMTY3cTAgMjYgLTUgNTZxMzAgMTYgNDcuNSA1Mi41dDE3LjUgNzMuNXQtMTggNjlxNTMgNTAgNTMgMTE5cTAgMjUgLTEwIDU1LjV0LTI1IDQ3LjVoMzMxcTUyIDAgOTAgMzh0MzggOTB6TTE3OTIgNzY5cTAgLTEwNSAtNzUuNSAtMTgxdC0xODAuNSAtNzZoLTE2OXEtNCAtNjIgLTM3IC0xMTlxMyAtMjEgMyAtNDMgcTAgLTEwMSAtNjAgLTE3OHExIC0xMzkgLTg1IC0yMTkuNXQtMjI3IC04MC41cS0xMzMgMCAtMzIyIDY5cS0xNjQgNTkgLTIyMyA1OWgtMjg4cS01MyAwIC05MC41IDM3LjV0LTM3LjUgOTAuNXY2NDBxMCA1MyAzNy41IDkwLjV0OTAuNSAzNy41aDI4OHExMCAwIDIxLjUgNC41dDIzLjUgMTR0MjIuNSAxOHQyNCAyMi41dDIwLjUgMjEuNXQxOSAyMS41dDE0IDE3cTY1IDc0IDEwMCAxMjlxMTMgMjEgMzMgNjJ0MzcgNzJ0NDAuNSA2M3Q1NSA0OS41IHQ2OS41IDE3LjVxMTI1IDAgMjA2LjUgLTY3dDgxLjUgLTE4OXEwIC02OCAtMjIgLTEyOGgzNzRxMTA0IDAgMTgwIC03NnQ3NiAtMTc5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGE1OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xMzc2IDEyOGgzMnY2NDBoLTMycS0zNSAwIC02NyAxMS41dC02NCAzOC41dC00OCA0NHQtNTAgNTVxLTIgMyAtMy41IDQuNXQtNCA0LjV0LTQuNSA1cS03MiA4MSAtMTEyIDE0NXEtMTQgMjIgLTM4IDY4cS0xIDMgLTEwLjUgMjIuNXQtMTguNSAzNnQtMjAgMzUuNXQtMjEuNSAzMC41dC0xOC41IDExLjVxLTcxIDAgLTExNS41IC0zMC41dC00NC41IC05Ny41cTAgLTQzIDE1IC04NC41dDMzIC02OHQzMyAtNTV0MTUgLTQ4LjVoLTU3NiBxLTUwIDAgLTg5IC0zOC41dC0zOSAtODkuNXEwIC01MiAzOCAtOTB0OTAgLTM4aDMzMXEtMTUgLTE3IC0yNSAtNDcuNXQtMTAgLTU1LjVxMCAtNjkgNTMgLTExOXEtMTggLTMyIC0xOCAtNjl0MTcuNSAtNzMuNXQ0Ny41IC01Mi41cS00IC0yNCAtNCAtNTZxMCAtODUgNDguNSAtMTI2dDEzNS41IC00MXE4NCAwIDE4MyAzMnQxOTQgNjR0MTY3IDMyek0xNjY0IDE5MnEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NSB0NDUgLTE5dDQ1IDE5dDE5IDQ1ek0xNzkyIDc2OHYtNjQwcTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41aC0yODhxLTU5IDAgLTIyMyAtNTlxLTE5MCAtNjkgLTMxNyAtNjlxLTE0MiAwIC0yMzAgNzcuNXQtODcgMjE3LjVsMSA1cS02MSA3NiAtNjEgMTc4cTAgMjIgMyA0M3EtMzMgNTcgLTM3IDExOWgtMTY5cS0xMDUgMCAtMTgwLjUgNzZ0LTc1LjUgMTgxcTAgMTAzIDc2IDE3OXQxODAgNzZoMzc0cS0yMiA2MCAtMjIgMTI4IHEwIDEyMiA4MS41IDE4OXQyMDYuNSA2N3EzOCAwIDY5LjUgLTE3LjV0NTUgLTQ5LjV0NDAuNSAtNjN0MzcgLTcydDMzIC02MnEzNSAtNTUgMTAwIC0xMjlxMiAtMyAxNCAtMTd0MTkgLTIxLjV0MjAuNSAtMjEuNXQyNCAtMjIuNXQyMi41IC0xOHQyMy41IC0xNHQyMS41IC00LjVoMjg4cTUzIDAgOTAuNSAtMzcuNXQzNy41IC05MC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGE2OyIgZD0iTTEyODAgLTY0cTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTQwOCA3MDBxMCAxODkgLTE2NyAxODlxLTI2IDAgLTU2IC01cS0xNiAzMCAtNTIuNSA0Ny41dC03My41IDE3LjV0LTY5IC0xOHEtNTAgNTMgLTExOSA1M3EtMjUgMCAtNTUuNSAtMTB0LTQ3LjUgLTI1djMzMXEwIDUyIC0zOCA5MHQtOTAgMzhxLTUxIDAgLTg5LjUgLTM5dC0zOC41IC04OXYtNTc2IHEtMjAgMCAtNDguNSAxNXQtNTUgMzN0LTY4IDMzdC04NC41IDE1cS02NyAwIC05Ny41IC00NC41dC0zMC41IC0xMTUuNXEwIC0yNCAxMzkgLTkwcTQ0IC0yNCA2NSAtMzdxNjQgLTQwIDE0NSAtMTEycTgxIC03MSAxMDYgLTEwMXE1NyAtNjkgNTcgLTE0MHYtMzJoNjQwdjMycTAgNzIgMzIgMTY3dDY0IDE5My41dDMyIDE3OS41ek0xNTM2IDcwNXEwIC0xMzMgLTY5IC0zMjJxLTU5IC0xNjQgLTU5IC0yMjN2LTI4OHEwIC01MyAtMzcuNSAtOTAuNSB0LTkwLjUgLTM3LjVoLTY0MHEtNTMgMCAtOTAuNSAzNy41dC0zNy41IDkwLjV2Mjg4cTAgMTAgLTQuNSAyMS41dC0xNCAyMy41dC0xOCAyMi41dC0yMi41IDI0dC0yMS41IDIwLjV0LTIxLjUgMTl0LTE3IDE0cS03NCA2NSAtMTI5IDEwMHEtMjEgMTMgLTYyIDMzdC03MiAzN3QtNjMgNDAuNXQtNDkuNSA1NXQtMTcuNSA2OS41cTAgMTI1IDY3IDIwNi41dDE4OSA4MS41cTY4IDAgMTI4IC0yMnYzNzRxMCAxMDQgNzYgMTgwdDE3OSA3NiBxMTA1IDAgMTgxIC03NS41dDc2IC0xODAuNXYtMTY5cTYyIC00IDExOSAtMzdxMjEgMyA0MyAzcTEwMSAwIDE3OCAtNjBxMTM5IDEgMjE5LjUgLTg1dDgwLjUgLTIyN3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBhNzsiIGQ9Ik0xNDA4IDU3NnEwIDg0IC0zMiAxODN0LTY0IDE5NHQtMzIgMTY3djMyaC02NDB2LTMycTAgLTQ2IC0yNSAtOTF0LTUyIC03MnQtNzIgLTY2cS05IC04IC0xNCAtMTJxLTgxIC03MiAtMTQ1IC0xMTJxLTIyIC0xNCAtNjggLTM4cS0zIC0xIC0yMi41IC0xMC41dC0zNiAtMTguNXQtMzUuNSAtMjB0LTMwLjUgLTIxLjV0LTExLjUgLTE4LjVxMCAtNzEgMzAuNSAtMTE1LjV0OTcuNSAtNDQuNXE0MyAwIDg0LjUgMTV0NjggMzN0NTUgMzMgdDQ4LjUgMTV2LTU3NnEwIC01MCAzOC41IC04OXQ4OS41IC0zOXE1MiAwIDkwIDM4dDM4IDkwdjMzMXE0NiAtMzUgMTAzIC0zNXE2OSAwIDExOSA1M3EzMiAtMTggNjkgLTE4dDczLjUgMTcuNXQ1Mi41IDQ3LjVxMjQgLTQgNTYgLTRxODUgMCAxMjYgNDguNXQ0MSAxMzUuNXpNMTI4MCAxMzQ0cTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTUzNiA1ODBxMCAtMTQyIC03Ny41IC0yMzAgdC0yMTcuNSAtODdsLTUgMXEtNzYgLTYxIC0xNzggLTYxcS0yMiAwIC00MyAzcS01NCAtMzAgLTExOSAtMzd2LTE2OXEwIC0xMDUgLTc2IC0xODAuNXQtMTgxIC03NS41cS0xMDMgMCAtMTc5IDc2dC03NiAxODB2Mzc0cS01NCAtMjIgLTEyOCAtMjJxLTEyMSAwIC0xODguNSA4MS41dC02Ny41IDIwNi41cTAgMzggMTcuNSA2OS41dDQ5LjUgNTV0NjMgNDAuNXQ3MiAzN3Q2MiAzM3E1NSAzNSAxMjkgMTAwcTMgMiAxNyAxNHQyMS41IDE5IHQyMS41IDIwLjV0MjIuNSAyNHQxOCAyMi41dDE0IDIzLjV0NC41IDIxLjV2Mjg4cTAgNTMgMzcuNSA5MC41dDkwLjUgMzcuNWg2NDBxNTMgMCA5MC41IC0zNy41dDM3LjUgLTkwLjV2LTI4OHEwIC01OSA1OSAtMjIzcTY5IC0xOTAgNjkgLTMxN3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBhODsiIGQ9Ik0xMjgwIDU3NnYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC01MDJsMTg5IDE4OXExOSAxOSAxOSA0NXQtMTkgNDVsLTkxIDkxcS0xOCAxOCAtNDUgMTh0LTQ1IC0xOGwtMzYyIC0zNjJsLTkxIC05MXEtMTggLTE4IC0xOCAtNDV0MTggLTQ1bDkxIC05MWwzNjIgLTM2MnExOCAtMTggNDUgLTE4dDQ1IDE4bDkxIDkxcTE4IDE4IDE4IDQ1dC0xOCA0NWwtMTg5IDE4OWg1MDJxMjYgMCA0NSAxOXQxOSA0NXpNMTUzNiA2NDAgcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGE5OyIgZD0iTTEyODUgNjQwcTAgMjcgLTE4IDQ1bC05MSA5MWwtMzYyIDM2MnEtMTggMTggLTQ1IDE4dC00NSAtMThsLTkxIC05MXEtMTggLTE4IC0xOCAtNDV0MTggLTQ1bDE4OSAtMTg5aC01MDJxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWg1MDJsLTE4OSAtMTg5cS0xOSAtMTkgLTE5IC00NXQxOSAtNDVsOTEgLTkxcTE4IC0xOCA0NSAtMTh0NDUgMThsMzYyIDM2Mmw5MSA5MXExOCAxOCAxOCA0NXpNMTUzNiA2NDAgcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGFhOyIgZD0iTTEyODQgNjQxcTAgMjcgLTE4IDQ1bC0zNjIgMzYybC05MSA5MXEtMTggMTggLTQ1IDE4dC00NSAtMThsLTkxIC05MWwtMzYyIC0zNjJxLTE4IC0xOCAtMTggLTQ1dDE4IC00NWw5MSAtOTFxMTggLTE4IDQ1IC0xOHQ0NSAxOGwxODkgMTg5di01MDJxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXY1MDJsMTg5IC0xODlxMTkgLTE5IDQ1IC0xOXQ0NSAxOWw5MSA5MXExOCAxOCAxOCA0NXpNMTUzNiA2NDAgcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGFiOyIgZD0iTTEyODQgNjM5cTAgMjcgLTE4IDQ1bC05MSA5MXEtMTggMTggLTQ1IDE4dC00NSAtMThsLTE4OSAtMTg5djUwMnEwIDI2IC0xOSA0NXQtNDUgMTloLTEyOHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTUwMmwtMTg5IDE4OXEtMTkgMTkgLTQ1IDE5dC00NSAtMTlsLTkxIC05MXEtMTggLTE4IC0xOCAtNDV0MTggLTQ1bDM2MiAtMzYybDkxIC05MXExOCAtMTggNDUgLTE4dDQ1IDE4bDkxIDkxbDM2MiAzNjJxMTggMTggMTggNDV6TTE1MzYgNjQwIHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBhYzsiIGQ9Ik0xMTkzIDk5M3ExMSA3IDI1IDIydi0xcTAgLTIgLTkuNSAtMTB0LTExLjUgLTEycS0xIDEgLTQgMXpNMTE4NyA5OTJxLTEgMSAtMi41IDN0LTEuNSAzcTMgLTIgMTAgLTVxLTYgLTQgLTYgLTF6TTcyOCAxMTc1cS0xNiAyIC0yNiA1cTEgMCA2LjUgLTF0MTAuNSAtMnQ5IC0yek03NzMgMTIxMnE3IDQgMTMuNSAyLjV0Ny41IC03LjVxLTUgMyAtMjEgNXpNNzY1IDEyMDZsLTMgMnEtMiAzIC01LjUgNXQtNC41IDJxMiAtMSAyMSAtMyBxLTYgLTQgLTggLTZ6TTY2MyAxMjkwdjJxMSAtMiAzIC01LjV0MyAtNS41ek01NTggMTI1MHEwIC0yIC0xIC0ybC0xIDJoMnpNOTMzIDIwNnYtMXYxek03NjggMTQwOHEyMDkgMCAzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41dC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzek0xMjQwIDE2MiBsNSA1cS03IDEwIC0yOSAxMnExIDEyIC0xNCAyNi41dC0yNyAxNS41cTAgNCAtMTAuNSAxMXQtMTcuNSA4cS05IDIgLTI3IC05cS03IC0zIC00IC01cS0zIDMgLTEyIDExdC0xNiAxMXEtMiAxIC03LjUgMXQtOC41IDJxLTEgMSAtNiA0LjV0LTcgNC41dC02LjUgM3QtNy41IDEuNXQtNy41IC0yLjV0LTguNSAtNnQtNC41IC0xNS41dC0yLjUgLTE0LjVxLTggNiAtMC41IDIwdDEuNSAyMHEtNyA3IC0yMSAwLjV0LTIxIC0xNS41IHEtMSAtMSAtOS41IC01LjV0LTExLjUgLTcuNXEtNCAtNiAtOSAtMTcuNXQtNiAtMTMuNXEwIDIgLTIuNSA2LjV0LTIuNSA2LjVxLTEyIC0yIC0xNiAzcTUgLTE2IDggLTE3bC00IDJxLTEgLTYgMyAtMTV0NCAtMTFxMSAtNSAtMS41IC0xM3QtMi41IC0xMXEwIC0yIDUgLTExcTQgLTE5IC0yIC0zMnEwIC0xIC0zLjUgLTd0LTYuNSAtMTFsLTIgLTVsLTIgMXEtMSAxIC0yIDBxLTEgLTYgLTkgLTEzdC0xMCAtMTFxLTE1IC0yMyAtOSAtMzggcTMgLTggMTAgLTEwcTMgLTEgMyAycTEgLTkgLTExIC0yN3ExIC0xIDQgLTNxLTE3IDAgLTEwIC0xNHEyMDIgMzYgMzUyIDE4MWgtM3pNNjgwIDM0N3ExNiAzIDMwLjUgLTE2dDIyLjUgLTIzcTQxIC0yMCA1OSAtMTFxMCAtOSAxNCAtMjhxMyAtNCA2LjUgLTExLjV0NS41IC0xMC41cTUgLTcgMTkgLTE2dDE5IC0xNnE2IDMgOSA5cTEzIC0zNSAyNCAtMzRxNSAwIDggOHEwIC0xIC0wLjUgLTN0LTEuNSAtM3E3IDE1IDUgMjZsNiA0cTUgNCA1IDUgcS02IDYgLTkgLTNxLTMwIC0xNCAtNDggMjJxLTIgMyAtNC41IDh0LTUgMTJ0LTEuNSAxMS41dDYgNC41cTExIDAgMTIuNSAxLjV0LTIuNSA2dC00IDcuNXEtMSA0IC0xLjUgMTIuNXQtMS41IDEyLjVsLTUgNnEtNSA2IC0xMS41IDEzLjV0LTcuNSA5LjVxLTQgLTEwIC0xNi41IC04LjV0LTE4LjUgOS41cTEgLTIgLTAuNSAtNi41dC0xLjUgLTYuNXEtMTQgMCAtMTcgMXExIDYgMyAyMXQ0IDIycTEgNSA1LjUgMTMuNXQ4IDE1LjV0NC41IDE0IHQtNC41IDEwLjV0LTE4LjUgMi41cS0yMCAtMSAtMjkgLTIycS0xIC0zIC0zIC0xMS41dC01IC0xMi41dC05IC03cS04IC0zIC0yNyAtMnQtMjYgNXEtMTQgOCAtMjQgMzAuNXQtMTEgNDEuNXEwIDEwIDMgMjcuNXQzIDI3dC02IDI2LjVxMyAyIDEwIDEwLjV0MTEgMTEuNXEyIDIgNSAyaDV0NCAydDMgNnEtMSAxIC00IDNxLTMgMyAtNCAzcTQgLTMgMTkgLTF0MTkgMnEwIDEgMjIgMHExNyAtMTMgMjQgMnEwIDEgLTIuNSAxMC41dC0wLjUgMTQuNSBxNSAtMjkgMzIgLTEwcTMgLTQgMTYuNSAtNnQxOC41IC01cTMgLTIgNyAtNS41dDYgLTV0NiAtMC41dDkgN3ExMSAtMTcgMTMgLTI1cTExIC00MyAyMCAtNDhxOCAtMiAxMi41IC0ydDUgMTAuNXQwIDE1LjV0LTEuNSAxM2wtMiAzN3EtMTYgMyAtMjAgMTIuNXQxLjUgMjB0MTYuNSAxOS41cTEgMSAxNi41IDh0MjEuNSAxMnEyNCAxOSAxNyAzOXE5IC0yIDExIDlsLTUgM3EtNCAzIC04IDUuNXQtNSAxLjVxMTEgNyAyIDE4cTUgMyA4IDExLjUgdDkgMTEuNXE5IC0xNCAyMiAtM3E4IDkgMiAxOHE1IDggMjIgMTEuNXQyMCA5LjVxNSAtMSA3IDB0MiA0LjV2Ny41dDEgOC41dDMgNy41cTQgNiAxNiAxMC41dDE0IDUuNWwxOSAxMnE0IDQgMCA0cTE4IC0yIDMyIDExcTEzIDEyIC01IDIzcTIgNyAtNCAxMC41dC0xNiA1LjVxMyAxIDEyIDAuNXQxMiAxLjVxMTUgMTEgLTcgMTdxLTIwIDUgLTQ3IC0xM3EtMyAtMiAtMTMgLTEydC0xNyAtMTFxMTUgMTggNSAyMnE4IC0xIDIyLjUgOXQxNS41IDExIHE0IDIgMTAuNSAyLjV0OC41IDEuNXE3MSAyNSA5MiAtMXE4IDExIDExIDE1dDkuNSA5dDE1LjUgOHEyMSA3IDIzIDlsMSAyM3EtMTIgLTEgLTE4IDh0LTcgMjJsLTYgLThxMCA2IC0zLjUgNy41dC03LjUgMC41dC05LjUgLTJ0LTcuNSAwcS05IDIgLTE5LjUgMTUuNXQtMTQuNSAxNi41cTkgMCA5IDVxLTIgNSAtMTAgOHExIDYgLTIgOHQtOSAwcS0yIDEyIC0xIDEzcS02IDEgLTExIDExdC04IDEwcS0yIDAgLTQuNSAtMnQtNSAtNS41bC01IC03IHQtMy41IC01LjVsLTIgLTJxLTEyIDYgLTI0IC0xMHEtOSAxIC0xNyAtMnExNSA2IDIgMTNxLTExIDUgLTIxIDJxMTIgNSAxMCAxNHQtMTIgMTZxMSAwIDQgLTF0NCAtMXEtMSA1IC05LjUgOS41dC0xOS41IDl0LTE0IDYuNXEtNyA1IC0zNiAxMC41dC0zNiAxLjVxLTUgLTMgLTYgLTZ0MS41IC04LjV0My41IC04LjVxNiAtMjMgNSAtMjdxLTEgLTMgLTguNSAtOHQtNS41IC0xMnExIC00IDExLjUgLTEwdDEyLjUgLTEycTUgLTEzIC00IC0yNSBxLTQgLTUgLTE1IC0xMXQtMTQgLTEwcS01IC01IC0zLjUgLTExLjV0MC41IC05LjVxMSAxIDEgMi41dDEgMi41cTAgLTEzIDExIC0yMnE4IC02IC0xNiAtMThxLTIwIC0xMSAtMjAgLTRxMSA4IC03LjUgMTZ0LTEwLjUgMTJ0LTMuNSAxOXQtOS41IDIxcS02IDQgLTE5IDR0LTE4IC01cTAgMTAgLTQ5IDMwcS0xNyA4IC01OCA0cTcgMSAwIDE3cS04IDE2IC0yMSAxMnEtOCAyNSAtNCAzNXEyIDUgOSAxNHQ5IDE1cTEgMyAxNS41IDZ0MTYuNSA4IHExIDQgLTIuNSA2LjV0LTkuNSA0LjVxNTMgLTYgNjMgMThxNSA5IDMgMTRxMCAtMSAyIC0xdDIgLTFxMTIgMyA3IDE3cTE5IDggMjYgOHE1IC0xIDExIC02dDEwIC01cTE3IC0zIDIxLjUgMTB0LTkuNSAyM3E3IC00IDcgNnEtMSAxMyAtNyAxOXEtMyAyIC02LjUgMi41dC02LjUgMHQtNyAwLjVxLTEgMCAtOCAycS0xIC0xIC0yIC0xaC04cS00IC0yIC00IC01di0xcS0xIC0zIDQgLTZsNSAtMWwzIC0ycS0xIDAgLTIuNSAtMi41dC0yLjUgLTIuNSBxMCAtMyAzIC01cS0yIC0xIC0xNCAtNy41dC0xNyAtMTAuNXEtMSAtMSAtNCAtMi41dC00IC0yLjVxLTIgLTEgLTQgMnQtNCA5dC00IDExLjV0LTQuNSAxMHQtNS41IDQuNXEtMTIgMCAtMTggLTE3cTMgMTAgLTEzIDE3LjV0LTI1IDcuNXEyMCAxNSAtOSAzMGwtMSAxcS0zMCAtNCAtNDUgLTdxLTIgLTYgMyAtMTJxLTEgLTcgNiAtOXEwIC0xIDAuNSAtMXQwLjUgLTFxMCAxIC0wLjUgMXQtMC41IDFxMyAtMSAxMC41IC0xLjV0OS41IC0xLjUgcTMgLTEgNC41IC0ybDcuNSAtNXQ1LjUgLTZ0LTIuNSAtNXEtMiAtMSAtOSAtNHQtMTIuNSAtNS41dC02LjUgLTMuNXEtMyAtNSAwIC0xNnQtMiAtMTVxLTUgNSAtMTAgMTguNXQtOCAxNy41cTggLTkgLTMwIC02bC04IDFxLTQgMCAtMTUgLTJ0LTE2IC0xcS03IDAgLTI5IDZxNyAxNyA1IDI1cTUgMCA3IDJsLTYgM3EtMyAtMSAtMjUgLTlxMiAtMyA4IC05LjV0OSAtMTEuNXEtMjIgNiAtMjcgLTJxMCAtMSAtOSAwcS0yNSAxIC0yNCAtNyBxMSAtNCA5IC0xMnEwIC05IC0xIC05cS0yNyAyMiAtMzAgMjNxLTE3MiAtODMgLTI3NiAtMjQ4cTEgLTIgMi41IC0xMXQzLjUgLTguNXQxMSA0LjVxOSAtOSAzIC0yMXEyIDIgMzYgLTIxcTU2IC00MCAyMiAtNTN2NS41dDEgNi41cS05IC0xIC0xOSA1cS0zIC02IDAuNSAtMjB0MTEuNSAtMTRxLTggMCAtMTAuNSAtMTd0LTIuNSAtMzguNXQtMSAtMjUuNWwyIC0xcS0zIC0xMyA2IC0zNy41dDI0IC0yMC41cS00IC0xOCA1IC0yMXEtMSAtNCAwIC04IHQ0LjUgLTguNXQ2IC03bDcuNSAtNy41bDYgLTZxMjggLTExIDQxIC0yOXE0IC02IDEwLjUgLTI0LjV0MTUuNSAtMjUuNXEtMiAtNiAxMCAtMjEuNXQxMSAtMjUuNXEtMSAwIC0yLjUgLTAuNXQtMi41IC0wLjVxMyAtOCAxNi41IC0xNnQxNi41IC0xNHEyIC0zIDIuNSAtMTAuNXQzIC0xMnQ4LjUgLTIuNXEzIDI0IC0yNiA2OHEtMTYgMjcgLTE4IDMxcS0zIDUgLTUuNSAxNi41dC00LjUgMTUuNXEyNyAtOSAyNiAtMTNxLTUgLTEwIDI2IC01MiBxMiAtMyAxMCAtMTB0MTEgLTEycTMgLTQgOS41IC0xNC41dDEwLjUgLTE1LjVxLTEgMCAtMyAtMmwtMyAtM3E0IC0yIDkgLTV0OCAtNC41dDcuNSAtNXQ3LjUgLTcuNXExNiAtMTggMjAgLTMzcTEgLTQgMC41IC0xNS41dDEuNSAtMTYuNXEyIC02IDYgLTExdDExLjUgLTEwdDExLjUgLTd0MTQuNSAtNi41dDExLjUgLTUuNXEyIC0xIDE4IC0xMXQyNSAtMTRxMTAgLTQgMTYuNSAtNC41dDE2IDIuNXQxNS41IDR6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYWQ7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTM4NCA2NHEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTEwMjggNDg0bC02ODIgLTY4MnEtMzcgLTM3IC05MCAtMzdxLTUyIDAgLTkxIDM3bC0xMDYgMTA4cS0zOCAzNiAtMzggOTBxMCA1MyAzOCA5MWw2ODEgNjgxcTM5IC05OCAxMTQuNSAtMTczLjV0MTczLjUgLTExNC41ek0xNjYyIDkxOXEwIC0zOSAtMjMgLTEwNnEtNDcgLTEzNCAtMTY0LjUgLTIxNy41IHQtMjU4LjUgLTgzLjVxLTE4NSAwIC0zMTYuNSAxMzEuNXQtMTMxLjUgMzE2LjV0MTMxLjUgMzE2LjV0MzE2LjUgMTMxLjVxNTggMCAxMjEuNSAtMTYuNXQxMDcuNSAtNDYuNXExNiAtMTEgMTYgLTI4dC0xNiAtMjhsLTI5MyAtMTY5di0yMjRsMTkzIC0xMDdxNSAzIDc5IDQ4LjV0MTM1LjUgODF0NzAuNSAzNS41cTE1IDAgMjMuNSAtMTB0OC41IC0yNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBhZTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTAyNCAxMjhoNjQwdjEyOGgtNjQwdi0xMjh6TTY0MCA2NDBoMTAyNHYxMjhoLTEwMjR2LTEyOHpNMTI4MCAxMTUyaDM4NHYxMjhoLTM4NHYtMTI4ek0xNzkyIDMyMHYtMjU2cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTY2NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djI1NnEwIDI2IDE5IDQ1dDQ1IDE5aDE2NjRxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNzkyIDgzMnYtMjU2cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTY2NHEtMjYgMCAtNDUgMTkgdC0xOSA0NXYyNTZxMCAyNiAxOSA0NXQ0NSAxOWgxNjY0cTI2IDAgNDUgLTE5dDE5IC00NXpNMTc5MiAxMzQ0di0yNTZxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNjY0cS0yNiAwIC00NSAxOXQtMTkgNDV2MjU2cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYjA7IiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTE0MDMgMTI0MXExNyAtNDEgLTE0IC03MGwtNDkzIC00OTN2LTc0MnEwIC00MiAtMzkgLTU5cS0xMyAtNSAtMjUgLTVxLTI3IDAgLTQ1IDE5bC0yNTYgMjU2cS0xOSAxOSAtMTkgNDV2NDg2bC00OTMgNDkzcS0zMSAyOSAtMTQgNzBxMTcgMzkgNTkgMzloMTI4MHE0MiAwIDU5IC0zOXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBiMTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNjQwIDExNTJoNTEydjEyOGgtNTEydi0xMjh6TTE3OTIgNTEydi00ODBxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE0NzJxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjQ4MGg2NzJ2LTE2MHEwIC0yNiAxOSAtNDV0NDUgLTE5aDMyMHEyNiAwIDQ1IDE5dDE5IDQ1djE2MGg2NzJ6TTEwMjQgNTEydi0xMjhoLTI1NnYxMjhoMjU2ek0xNzkyIDk5MnYtMzg0aC0xNzkydjM4NHEwIDY2IDQ3IDExM3QxMTMgNDdoMzUydjE2MHEwIDQwIDI4IDY4IHQ2OCAyOGg1NzZxNDAgMCA2OCAtMjh0MjggLTY4di0xNjBoMzUycTY2IDAgMTEzIC00N3Q0NyAtMTEzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGIyOyIgZD0iTTEyODMgOTk1bC0zNTUgLTM1NWwzNTUgLTM1NWwxNDQgMTQ0cTI5IDMxIDcwIDE0cTM5IC0xNyAzOSAtNTl2LTQ0OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTQ0OHEtNDIgMCAtNTkgNDBxLTE3IDM5IDE0IDY5bDE0NCAxNDRsLTM1NSAzNTVsLTM1NSAtMzU1bDE0NCAtMTQ0cTMxIC0zMCAxNCAtNjlxLTE3IC00MCAtNTkgLTQwaC00NDhxLTI2IDAgLTQ1IDE5dC0xOSA0NXY0NDhxMCA0MiA0MCA1OXEzOSAxNyA2OSAtMTRsMTQ0IC0xNDQgbDM1NSAzNTVsLTM1NSAzNTVsLTE0NCAtMTQ0cS0xOSAtMTkgLTQ1IC0xOXEtMTIgMCAtMjQgNXEtNDAgMTcgLTQwIDU5djQ0OHEwIDI2IDE5IDQ1dDQ1IDE5aDQ0OHE0MiAwIDU5IC00MHExNyAtMzkgLTE0IC02OWwtMTQ0IC0xNDRsMzU1IC0zNTVsMzU1IDM1NWwtMTQ0IDE0NHEtMzEgMzAgLTE0IDY5cTE3IDQwIDU5IDQwaDQ0OHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTQ0OHEwIC00MiAtMzkgLTU5cS0xMyAtNSAtMjUgLTVxLTI2IDAgLTQ1IDE5eiAiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBjMDsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNNTkzIDY0MHEtMTYyIC01IC0yNjUgLTEyOGgtMTM0cS04MiAwIC0xMzggNDAuNXQtNTYgMTE4LjVxMCAzNTMgMTI0IDM1M3E2IDAgNDMuNSAtMjF0OTcuNSAtNDIuNXQxMTkgLTIxLjVxNjcgMCAxMzMgMjNxLTUgLTM3IC01IC02NnEwIC0xMzkgODEgLTI1NnpNMTY2NCAzcTAgLTEyMCAtNzMgLTE4OS41dC0xOTQgLTY5LjVoLTg3NHEtMTIxIDAgLTE5NCA2OS41dC03MyAxODkuNXEwIDUzIDMuNSAxMDMuNXQxNCAxMDl0MjYuNSAxMDguNSB0NDMgOTcuNXQ2MiA4MXQ4NS41IDUzLjV0MTExLjUgMjBxMTAgMCA0MyAtMjEuNXQ3MyAtNDh0MTA3IC00OHQxMzUgLTIxLjV0MTM1IDIxLjV0MTA3IDQ4dDczIDQ4dDQzIDIxLjVxNjEgMCAxMTEuNSAtMjB0ODUuNSAtNTMuNXQ2MiAtODF0NDMgLTk3LjV0MjYuNSAtMTA4LjV0MTQgLTEwOXQzLjUgLTEwMy41ek02NDAgMTI4MHEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxdDc1IDE4MXQxODEgNzV0MTgxIC03NSB0NzUgLTE4MXpNMTM0NCA4OTZxMCAtMTU5IC0xMTIuNSAtMjcxLjV0LTI3MS41IC0xMTIuNXQtMjcxLjUgMTEyLjV0LTExMi41IDI3MS41dDExMi41IDI3MS41dDI3MS41IDExMi41dDI3MS41IC0xMTIuNXQxMTIuNSAtMjcxLjV6TTE5MjAgNjcxcTAgLTc4IC01NiAtMTE4LjV0LTEzOCAtNDAuNWgtMTM0cS0xMDMgMTIzIC0yNjUgMTI4cTgxIDExNyA4MSAyNTZxMCAyOSAtNSA2NnE2NiAtMjMgMTMzIC0yM3E1OSAwIDExOSAyMS41dDk3LjUgNDIuNSB0NDMuNSAyMXExMjQgMCAxMjQgLTM1M3pNMTc5MiAxMjgwcTAgLTEwNiAtNzUgLTE4MXQtMTgxIC03NXQtMTgxIDc1dC03NSAxODF0NzUgMTgxdDE4MSA3NXQxODEgLTc1dDc1IC0xODF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYzE7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE0NTYgMzIwcTAgNDAgLTI4IDY4bC0yMDggMjA4cS0yOCAyOCAtNjggMjhxLTQyIDAgLTcyIC0zMnEzIC0zIDE5IC0xOC41dDIxLjUgLTIxLjV0MTUgLTE5dDEzIC0yNS41dDMuNSAtMjcuNXEwIC00MCAtMjggLTY4dC02OCAtMjhxLTE1IDAgLTI3LjUgMy41dC0yNS41IDEzdC0xOSAxNXQtMjEuNSAyMS41dC0xOC41IDE5cS0zMyAtMzEgLTMzIC03M3EwIC00MCAyOCAtNjhsMjA2IC0yMDdxMjcgLTI3IDY4IC0yN3E0MCAwIDY4IDI2IGwxNDcgMTQ2cTI4IDI4IDI4IDY3ek03NTMgMTAyNXEwIDQwIC0yOCA2OGwtMjA2IDIwN3EtMjggMjggLTY4IDI4cS0zOSAwIC02OCAtMjdsLTE0NyAtMTQ2cS0yOCAtMjggLTI4IC02N3EwIC00MCAyOCAtNjhsMjA4IC0yMDhxMjcgLTI3IDY4IC0yN3E0MiAwIDcyIDMxcS0zIDMgLTE5IDE4LjV0LTIxLjUgMjEuNXQtMTUgMTl0LTEzIDI1LjV0LTMuNSAyNy41cTAgNDAgMjggNjh0NjggMjhxMTUgMCAyNy41IC0zLjV0MjUuNSAtMTN0MTkgLTE1IHQyMS41IC0yMS41dDE4LjUgLTE5cTMzIDMxIDMzIDczek0xNjQ4IDMyMHEwIC0xMjAgLTg1IC0yMDNsLTE0NyAtMTQ2cS04MyAtODMgLTIwMyAtODNxLTEyMSAwIC0yMDQgODVsLTIwNiAyMDdxLTgzIDgzIC04MyAyMDNxMCAxMjMgODggMjA5bC04OCA4OHEtODYgLTg4IC0yMDggLTg4cS0xMjAgMCAtMjA0IDg0bC0yMDggMjA4cS04NCA4NCAtODQgMjA0dDg1IDIwM2wxNDcgMTQ2cTgzIDgzIDIwMyA4M3ExMjEgMCAyMDQgLTg1bDIwNiAtMjA3IHE4MyAtODMgODMgLTIwM3EwIC0xMjMgLTg4IC0yMDlsODggLTg4cTg2IDg4IDIwOCA4OHExMjAgMCAyMDQgLTg0bDIwOCAtMjA4cTg0IC04NCA4NCAtMjA0eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGMyOyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xOTIwIDM4NHEwIC0xNTkgLTExMi41IC0yNzEuNXQtMjcxLjUgLTExMi41aC0xMDg4cS0xODUgMCAtMzE2LjUgMTMxLjV0LTEzMS41IDMxNi41cTAgMTMyIDcxIDI0MS41dDE4NyAxNjMuNXEtMiAyOCAtMiA0M3EwIDIxMiAxNTAgMzYydDM2MiAxNTBxMTU4IDAgMjg2LjUgLTg4dDE4Ny41IC0yMzBxNzAgNjIgMTY2IDYycTEwNiAwIDE4MSAtNzV0NzUgLTE4MXEwIC03NSAtNDEgLTEzOHExMjkgLTMwIDIxMyAtMTM0LjV0ODQgLTIzOS41eiAiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBjMzsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTUyNyA4OHE1NiAtODkgMjEuNSAtMTUyLjV0LTE0MC41IC02My41aC0xMTUycS0xMDYgMCAtMTQwLjUgNjMuNXQyMS41IDE1Mi41bDUwMyA3OTN2Mzk5aC02NHEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5aDUxMnEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NXQtNDUgLTE5aC02NHYtMzk5ek03NDggODEzbC0yNzIgLTQyOWg3MTJsLTI3MiA0MjlsLTIwIDMxdjM3djM5OWgtMTI4di0zOTl2LTM3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGM0OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik05NjAgNjQwcTI2IDAgNDUgLTE5dDE5IC00NXQtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOXpNMTI2MCA1NzZsNTA3IC0zOThxMjggLTIwIDI1IC01NnEtNSAtMzUgLTM1IC01MWwtMTI4IC02NHEtMTMgLTcgLTI5IC03cS0xNyAwIC0zMSA4bC02OTAgMzg3bC0xMTAgLTY2cS04IC00IC0xMiAtNXExNCAtNDkgMTAgLTk3cS03IC03NyAtNTYgLTE0Ny41dC0xMzIgLTEyMy41cS0xMzIgLTg0IC0yNzcgLTg0IHEtMTM2IDAgLTIyMiA3OHEtOTAgODQgLTc5IDIwN3E3IDc2IDU2IDE0N3QxMzEgMTI0cTEzMiA4NCAyNzggODRxODMgMCAxNTEgLTMxcTkgMTMgMjIgMjJsMTIyIDczbC0xMjIgNzNxLTEzIDkgLTIyIDIycS02OCAtMzEgLTE1MSAtMzFxLTE0NiAwIC0yNzggODRxLTgyIDUzIC0xMzEgMTI0dC01NiAxNDdxLTUgNTkgMTUuNSAxMTN0NjMuNSA5M3E4NSA3OSAyMjIgNzlxMTQ1IDAgMjc3IC04NHE4MyAtNTIgMTMyIC0xMjN0NTYgLTE0OCBxNCAtNDggLTEwIC05N3E0IC0xIDEyIC01bDExMCAtNjZsNjkwIDM4N3ExNCA4IDMxIDhxMTYgMCAyOSAtN2wxMjggLTY0cTMwIC0xNiAzNSAtNTFxMyAtMzYgLTI1IC01NnpNNTc5IDgzNnE0NiA0MiAyMSAxMDh0LTEwNiAxMTdxLTkyIDU5IC0xOTIgNTlxLTc0IDAgLTExMyAtMzZxLTQ2IC00MiAtMjEgLTEwOHQxMDYgLTExN3E5MiAtNTkgMTkyIC01OXE3NCAwIDExMyAzNnpNNDk0IDkxcTgxIDUxIDEwNiAxMTd0LTIxIDEwOCBxLTM5IDM2IC0xMTMgMzZxLTEwMCAwIC0xOTIgLTU5cS04MSAtNTEgLTEwNiAtMTE3dDIxIC0xMDhxMzkgLTM2IDExMyAtMzZxMTAwIDAgMTkyIDU5ek02NzIgNzA0bDk2IC01OHYxMXEwIDM2IDMzIDU2bDE0IDhsLTc5IDQ3bC0yNiAtMjZxLTMgLTMgLTEwIC0xMXQtMTIgLTEycS0yIC0yIC00IC0zLjV0LTMgLTIuNXpNODk2IDQ4MGw5NiAtMzJsNzM2IDU3NmwtMTI4IDY0bC03NjggLTQzMXYtMTEzbC0xNjAgLTk2bDkgLThxMiAtMiA3IC02IHE0IC00IDExIC0xMnQxMSAtMTJsMjYgLTI2ek0xNjAwIDY0bDEyOCA2NGwtNTIwIDQwOGwtMTc3IC0xMzhxLTIgLTMgLTEzIC03eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGM1OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNjk2IDExNTJxNDAgMCA2OCAtMjh0MjggLTY4di0xMjE2cTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtOTYwcS00MCAwIC02OCAyOHQtMjggNjh2Mjg4aC01NDRxLTQwIDAgLTY4IDI4dC0yOCA2OHY2NzJxMCA0MCAyMCA4OHQ0OCA3Nmw0MDggNDA4cTI4IDI4IDc2IDQ4dDg4IDIwaDQxNnE0MCAwIDY4IC0yOHQyOCAtNjh2LTMyOHE2OCA0MCAxMjggNDBoNDE2ek0xMTUyIDkzOWwtMjk5IC0yOTloMjk5djI5OXpNNTEyIDEzMjNsLTI5OSAtMjk5IGgyOTl2Mjk5ek03MDggNjc2bDMxNiAzMTZ2NDE2aC0zODR2LTQxNnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTQxNnYtNjQwaDUxMnYyNTZxMCA0MCAyMCA4OHQ0OCA3NnpNMTY2NCAtMTI4djExNTJoLTM4NHYtNDE2cTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtNDE2di02NDBoODk2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGM2OyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xNDA0IDE1MXEwIC0xMTcgLTc5IC0xOTZ0LTE5NiAtNzlxLTEzNSAwIC0yMzUgMTAwbC03NzcgNzc2cS0xMTMgMTE1IC0xMTMgMjcxcTAgMTU5IDExMCAyNzB0MjY5IDExMXExNTggMCAyNzMgLTExM2w2MDUgLTYwNnExMCAtMTAgMTAgLTIycTAgLTE2IC0zMC41IC00Ni41dC00Ni41IC0zMC41cS0xMyAwIC0yMyAxMGwtNjA2IDYwN3EtNzkgNzcgLTE4MSA3N3EtMTA2IDAgLTE3OSAtNzV0LTczIC0xODFxMCAtMTA1IDc2IC0xODEgbDc3NiAtNzc3cTYzIC02MyAxNDUgLTYzcTY0IDAgMTA2IDQydDQyIDEwNnEwIDgyIC02MyAxNDVsLTU4MSA1ODFxLTI2IDI0IC02MCAyNHEtMjkgMCAtNDggLTE5dC0xOSAtNDhxMCAtMzIgMjUgLTU5bDQxMCAtNDEwcTEwIC0xMCAxMCAtMjJxMCAtMTYgLTMxIC00N3QtNDcgLTMxcS0xMiAwIC0yMiAxMGwtNDEwIDQxMHEtNjMgNjEgLTYzIDE0OXEwIDgyIDU3IDEzOXQxMzkgNTdxODggMCAxNDkgLTYzbDU4MSAtNTgxcTEwMCAtOTggMTAwIC0yMzUgeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGM3OyIgZD0iTTM4NCAwaDc2OHYzODRoLTc2OHYtMzg0ek0xMjgwIDBoMTI4djg5NnEwIDE0IC0xMCAzOC41dC0yMCAzNC41bC0yODEgMjgxcS0xMCAxMCAtMzQgMjB0LTM5IDEwdi00MTZxMCAtNDAgLTI4IC02OHQtNjggLTI4aC01NzZxLTQwIDAgLTY4IDI4dC0yOCA2OHY0MTZoLTEyOHYtMTI4MGgxMjh2NDE2cTAgNDAgMjggNjh0NjggMjhoODMycTQwIDAgNjggLTI4dDI4IC02OHYtNDE2ek04OTYgOTI4djMyMHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjUgaC0xOTJxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di0zMjBxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxOTJxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTUzNiA4OTZ2LTkyOHEwIC00MCAtMjggLTY4dC02OCAtMjhoLTEzNDRxLTQwIDAgLTY4IDI4dC0yOCA2OHYxMzQ0cTAgNDAgMjggNjh0NjggMjhoOTI4cTQwIDAgODggLTIwdDc2IC00OGwyODAgLTI4MHEyOCAtMjggNDggLTc2dDIwIC04OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBjODsiIGQ9Ik0xNTM2IDExMjB2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBjOTsiIGQ9Ik0xNTM2IDE5MnYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTQwOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE0MDhxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNTM2IDcwNHYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTQwOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE0MDhxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNTM2IDEyMTZ2LTEyOHEwIC0yNiAtMTkgLTQ1IHQtNDUgLTE5aC0xNDA4cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTQwOHEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwY2E7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTM4NCAxMjhxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1NnQtNTYgMTM2dDU2IDEzNnQxMzYgNTZ0MTM2IC01NnQ1NiAtMTM2ek0zODQgNjQwcTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnpNMTc5MiAyMjR2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEyMTZxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNSB0MjIuNSA5LjVoMTIxNnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTM4NCAxMTUycTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnpNMTc5MiA3MzZ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEyMTZxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxMjE2cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXogTTE3OTIgMTI0OHYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTIxNnEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEyMTZxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGNiOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0zODEgLTg0cTAgLTgwIC01NC41IC0xMjZ0LTEzNS41IC00NnEtMTA2IDAgLTE3MiA2Nmw1NyA4OHE0OSAtNDUgMTA2IC00NXEyOSAwIDUwLjUgMTQuNXQyMS41IDQyLjVxMCA2NCAtMTA1IDU2bC0yNiA1NnE4IDEwIDMyLjUgNDMuNXQ0Mi41IDU0dDM3IDM4LjV2MXEtMTYgMCAtNDguNSAtMXQtNDguNSAtMXYtNTNoLTEwNnYxNTJoMzMzdi04OGwtOTUgLTExNXE1MSAtMTIgODEgLTQ5dDMwIC04OHpNMzgzIDU0M3YtMTU5aC0zNjIgcS02IDM2IC02IDU0cTAgNTEgMjMuNSA5M3Q1Ni41IDY4dDY2IDQ3LjV0NTYuNSA0My41dDIzLjUgNDVxMCAyNSAtMTQuNSAzOC41dC0zOS41IDEzLjVxLTQ2IDAgLTgxIC01OGwtODUgNTlxMjQgNTEgNzEuNSA3OS41dDEwNS41IDI4LjVxNzMgMCAxMjMgLTQxLjV0NTAgLTExMi41cTAgLTUwIC0zNCAtOTEuNXQtNzUgLTY0LjV0LTc1LjUgLTUwLjV0LTM1LjUgLTUyLjVoMTI3djYwaDEwNXpNMTc5MiAyMjR2LTE5MnEwIC0xMyAtOS41IC0yMi41IHQtMjIuNSAtOS41aC0xMjE2cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTQgOSAyM3QyMyA5aDEyMTZxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0zODQgMTEyM3YtOTloLTMzNXY5OWgxMDdxMCA0MSAwLjUgMTIydDAuNSAxMjF2MTJoLTJxLTggLTE3IC01MCAtNTRsLTcxIDc2bDEzNiAxMjdoMTA2di00MDRoMTA4ek0xNzkyIDczNnYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTIxNnEtMTMgMCAtMjIuNSA5LjUgdC05LjUgMjIuNXYxOTJxMCAxNCA5IDIzdDIzIDloMTIxNnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE3OTIgMTI0OHYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTIxNnEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEyMTZxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGNjOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzYwIDY0MHExNCAwIDIzIC05dDkgLTIzdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC0xNzI4cS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDE3Mjh6TTQ4MyA3MDRxLTI4IDM1IC01MSA4MHEtNDggOTcgLTQ4IDE4OHEwIDE4MSAxMzQgMzA5cTEzMyAxMjcgMzkzIDEyN3E1MCAwIDE2NyAtMTlxNjYgLTEyIDE3NyAtNDhxMTAgLTM4IDIxIC0xMThxMTQgLTEyMyAxNCAtMTgzcTAgLTE4IC01IC00NWwtMTIgLTNsLTg0IDYgbC0xNCAycS01MCAxNDkgLTEwMyAyMDVxLTg4IDkxIC0yMTAgOTFxLTExNCAwIC0xODIgLTU5cS02NyAtNTggLTY3IC0xNDZxMCAtNzMgNjYgLTE0MHQyNzkgLTEyOXE2OSAtMjAgMTczIC02NnE1OCAtMjggOTUgLTUyaC03NDN6TTk5MCA0NDhoNDExcTcgLTM5IDcgLTkycTAgLTExMSAtNDEgLTIxMnEtMjMgLTU1IC03MSAtMTA0cS0zNyAtMzUgLTEwOSAtODFxLTgwIC00OCAtMTUzIC02NnEtODAgLTIxIC0yMDMgLTIxcS0xMTQgMCAtMTk1IDIzIGwtMTQwIDQwcS01NyAxNiAtNzIgMjhxLTggOCAtOCAyMnYxM3EwIDEwOCAtMiAxNTZxLTEgMzAgMCA2OGwyIDM3djQ0bDEwMiAycTE1IC0zNCAzMCAtNzF0MjIuNSAtNTZ0MTIuNSAtMjdxMzUgLTU3IDgwIC05NHE0MyAtMzYgMTA1IC01N3E1OSAtMjIgMTMyIC0yMnE2NCAwIDEzOSAyN3E3NyAyNiAxMjIgODZxNDcgNjEgNDcgMTI5cTAgODQgLTgxIDE1N3EtMzQgMjkgLTEzNyA3MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBjZDsiIGQ9Ik00OCAxMzEzcS0zNyAyIC00NSA0bC0zIDg4cTEzIDEgNDAgMXE2MCAwIDExMiAtNHExMzIgLTcgMTY2IC03cTg2IDAgMTY4IDNxMTE2IDQgMTQ2IDVxNTYgMCA4NiAybC0xIC0xNGwyIC02NHYtOXEtNjAgLTkgLTEyNCAtOXEtNjAgMCAtNzkgLTI1cS0xMyAtMTQgLTEzIC0xMzJxMCAtMTMgMC41IC0zMi41dDAuNSAtMjUuNWwxIC0yMjlsMTQgLTI4MHE2IC0xMjQgNTEgLTIwMnEzNSAtNTkgOTYgLTkycTg4IC00NyAxNzcgLTQ3IHExMDQgMCAxOTEgMjhxNTYgMTggOTkgNTFxNDggMzYgNjUgNjRxMzYgNTYgNTMgMTE0cTIxIDczIDIxIDIyOXEwIDc5IC0zLjUgMTI4dC0xMSAxMjIuNXQtMTMuNSAxNTkuNWwtNCA1OXEtNSA2NyAtMjQgODhxLTM0IDM1IC03NyAzNGwtMTAwIC0ybC0xNCAzbDIgODZoODRsMjA1IC0xMHE3NiAtMyAxOTYgMTBsMTggLTJxNiAtMzggNiAtNTFxMCAtNyAtNCAtMzFxLTQ1IC0xMiAtODQgLTEzcS03MyAtMTEgLTc5IC0xN3EtMTUgLTE1IC0xNSAtNDEgcTAgLTcgMS41IC0yN3QxLjUgLTMxcTggLTE5IDIyIC0zOTZxNiAtMTk1IC0xNSAtMzA0cS0xNSAtNzYgLTQxIC0xMjJxLTM4IC02NSAtMTEyIC0xMjNxLTc1IC01NyAtMTgyIC04OXEtMTA5IC0zMyAtMjU1IC0zM3EtMTY3IDAgLTI4NCA0NnEtMTE5IDQ3IC0xNzkgMTIycS02MSA3NiAtODMgMTk1cS0xNiA4MCAtMTYgMjM3djMzM3EwIDE4OCAtMTcgMjEzcS0yNSAzNiAtMTQ3IDM5ek0xNTM2IC05NnY2NHEwIDE0IC05IDIzdC0yMyA5aC0xNDcyIHEtMTQgMCAtMjMgLTl0LTkgLTIzdi02NHEwIC0xNCA5IC0yM3QyMyAtOWgxNDcycTE0IDAgMjMgOXQ5IDIzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGNlOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik01MTIgMTYwdjE5MnEwIDE0IC05IDIzdC0yMyA5aC0zMjBxLTE0IDAgLTIzIC05dC05IC0yM3YtMTkycTAgLTE0IDkgLTIzdDIzIC05aDMyMHExNCAwIDIzIDl0OSAyM3pNNTEyIDU0NHYxOTJxMCAxNCAtOSAyM3QtMjMgOWgtMzIwcS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgzMjBxMTQgMCAyMyA5dDkgMjN6TTEwMjQgMTYwdjE5MnEwIDE0IC05IDIzdC0yMyA5aC0zMjBxLTE0IDAgLTIzIC05dC05IC0yMyB2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgzMjBxMTQgMCAyMyA5dDkgMjN6TTUxMiA5Mjh2MTkycTAgMTQgLTkgMjN0LTIzIDloLTMyMHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xOTJxMCAtMTQgOSAtMjN0MjMgLTloMzIwcTE0IDAgMjMgOXQ5IDIzek0xMDI0IDU0NHYxOTJxMCAxNCAtOSAyM3QtMjMgOWgtMzIwcS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgzMjBxMTQgMCAyMyA5dDkgMjN6TTE1MzYgMTYwdjE5MiBxMCAxNCAtOSAyM3QtMjMgOWgtMzIwcS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgzMjBxMTQgMCAyMyA5dDkgMjN6TTEwMjQgOTI4djE5MnEwIDE0IC05IDIzdC0yMyA5aC0zMjBxLTE0IDAgLTIzIC05dC05IC0yM3YtMTkycTAgLTE0IDkgLTIzdDIzIC05aDMyMHExNCAwIDIzIDl0OSAyM3pNMTUzNiA1NDR2MTkycTAgMTQgLTkgMjN0LTIzIDloLTMyMHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xOTIgcTAgLTE0IDkgLTIzdDIzIC05aDMyMHExNCAwIDIzIDl0OSAyM3pNMTUzNiA5Mjh2MTkycTAgMTQgLTkgMjN0LTIzIDloLTMyMHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xOTJxMCAtMTQgOSAtMjN0MjMgLTloMzIwcTE0IDAgMjMgOXQ5IDIzek0xNjY0IDEyNDh2LTEwODhxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTEzNDRxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjEwODhxMCA2NiA0NyAxMTN0MTEzIDQ3aDEzNDRxNjYgMCAxMTMgLTQ3dDQ3IC0xMTMgeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGQwOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xMTkwIDk1NWwyOTMgMjkzbC0xMDcgMTA3bC0yOTMgLTI5M3pNMTYzNyAxMjQ4cTAgLTI3IC0xOCAtNDVsLTEyODYgLTEyODZxLTE4IC0xOCAtNDUgLTE4dC00NSAxOGwtMTk4IDE5OHEtMTggMTggLTE4IDQ1dDE4IDQ1bDEyODYgMTI4NnExOCAxOCA0NSAxOHQ0NSAtMThsMTk4IC0xOThxMTggLTE4IDE4IC00NXpNMjg2IDE0MzhsOTggLTMwbC05OCAtMzBsLTMwIC05OGwtMzAgOThsLTk4IDMwbDk4IDMwbDMwIDk4ek02MzYgMTI3NiBsMTk2IC02MGwtMTk2IC02MGwtNjAgLTE5NmwtNjAgMTk2bC0xOTYgNjBsMTk2IDYwbDYwIDE5NnpNMTU2NiA3OThsOTggLTMwbC05OCAtMzBsLTMwIC05OGwtMzAgOThsLTk4IDMwbDk4IDMwbDMwIDk4ek05MjYgMTQzOGw5OCAtMzBsLTk4IC0zMGwtMzAgLTk4bC0zMCA5OGwtOTggMzBsOTggMzBsMzAgOTh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZDE7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTY0MCAxMjhxMCA1MiAtMzggOTB0LTkwIDM4dC05MCAtMzh0LTM4IC05MHQzOCAtOTB0OTAgLTM4dDkwIDM4dDM4IDkwek0yNTYgNjQwaDM4NHYyNTZoLTE1OHEtMTMgMCAtMjIgLTlsLTE5NSAtMTk1cS05IC05IC05IC0yMnYtMzB6TTE1MzYgMTI4cTAgNTIgLTM4IDkwdC05MCAzOHQtOTAgLTM4dC0zOCAtOTB0MzggLTkwdDkwIC0zOHQ5MCAzOHQzOCA5MHpNMTc5MiAxMjE2di0xMDI0cTAgLTE1IC00IC0yNi41dC0xMy41IC0xOC41IHQtMTYuNSAtMTEuNXQtMjMuNSAtNnQtMjIuNSAtMnQtMjUuNSAwdC0yMi41IDAuNXEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxaC0zODRxMCAtMTA2IC03NSAtMTgxdC0xODEgLTc1dC0xODEgNzV0LTc1IDE4MWgtNjRxLTMgMCAtMjIuNSAtMC41dC0yNS41IDB0LTIyLjUgMnQtMjMuNSA2dC0xNi41IDExLjV0LTEzLjUgMTguNXQtNCAyNi41cTAgMjYgMTkgNDV0NDUgMTl2MzIwcTAgOCAtMC41IDM1dDAgMzggdDIuNSAzNC41dDYuNSAzN3QxNCAzMC41dDIyLjUgMzBsMTk4IDE5OHExOSAxOSA1MC41IDMydDU4LjUgMTNoMTYwdjE5MnEwIDI2IDE5IDQ1dDQ1IDE5aDEwMjRxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGQyOyIgZD0iTTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzcS0xMTEgMCAtMjE4IDMycTU5IDkzIDc4IDE2NHE5IDM0IDU0IDIxMXEyMCAtMzkgNzMgLTY3LjV0MTE0IC0yOC41cTEyMSAwIDIxNiA2OC41dDE0NyAxODguNXQ1MiAyNzBxMCAxMTQgLTU5LjUgMjE0dC0xNzIuNSAxNjN0LTI1NSA2M3EtMTA1IDAgLTE5NiAtMjl0LTE1NC41IC03N3QtMTA5IC0xMTAuNXQtNjcgLTEyOS41dC0yMS41IC0xMzQgcTAgLTEwNCA0MCAtMTgzdDExNyAtMTExcTMwIC0xMiAzOCAyMHEyIDcgOCAzMXQ4IDMwcTYgMjMgLTExIDQzcS01MSA2MSAtNTEgMTUxcTAgMTUxIDEwNC41IDI1OS41dDI3My41IDEwOC41cTE1MSAwIDIzNS41IC04MnQ4NC41IC0yMTNxMCAtMTcwIC02OC41IC0yODl0LTE3NS41IC0xMTlxLTYxIDAgLTk4IDQzLjV0LTIzIDEwNC41cTggMzUgMjYuNSA5My41dDMwIDEwM3QxMS41IDc1LjVxMCA1MCAtMjcgODN0LTc3IDMzIHEtNjIgMCAtMTA1IC01N3QtNDMgLTE0MnEwIC03MyAyNSAtMTIybC05OSAtNDE4cS0xNyAtNzAgLTEzIC0xNzdxLTIwNiA5MSAtMzMzIDI4MXQtMTI3IDQyM3EwIDIwOSAxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZDM7IiBkPSJNMTI0OCAxNDA4cTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41di05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTcyNXE4NSAxMjIgMTA4IDIxMHE5IDM0IDUzIDIwOXEyMSAtMzkgNzMuNSAtNjd0MTEyLjUgLTI4cTE4MSAwIDI5NS41IDE0Ny41dDExNC41IDM3My41cTAgODQgLTM1IDE2Mi41dC05Ni41IDEzOXQtMTUyLjUgOTd0LTE5NyAzNi41cS0xMDQgMCAtMTk0LjUgLTI4LjV0LTE1MyAtNzYuNSB0LTEwNy41IC0xMDkuNXQtNjYuNSAtMTI4dC0yMS41IC0xMzIuNXEwIC0xMDIgMzkuNSAtMTgwdDExNi41IC0xMTBxMTMgLTUgMjMuNSAwdDE0LjUgMTlxMTAgNDQgMTUgNjFxNiAyMyAtMTEgNDJxLTUwIDYyIC01MCAxNTBxMCAxNTAgMTAzLjUgMjU2LjV0MjcwLjUgMTA2LjVxMTQ5IDAgMjMyLjUgLTgxdDgzLjUgLTIxMHEwIC0xNjggLTY3LjUgLTI4NnQtMTczLjUgLTExOHEtNjAgMCAtOTcgNDMuNXQtMjMgMTAzLjVxOCAzNCAyNi41IDkyLjUgdDI5LjUgMTAydDExIDc0LjVxMCA0OSAtMjYuNSA4MS41dC03NS41IDMyLjVxLTYxIDAgLTEwMy41IC01Ni41dC00Mi41IC0xMzkuNXEwIC03MiAyNCAtMTIxbC05OCAtNDE0cS0yNCAtMTAwIC03IC0yNTRoLTE4M3EtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZDQ7IiBkPSJNNjc4IC01N3EwIC0zOCAtMTAgLTcxaC0zODBxLTk1IDAgLTE3MS41IDU2LjV0LTEwMy41IDE0Ny41cTI0IDQ1IDY5IDc3LjV0MTAwIDQ5LjV0MTA3IDI0dDEwNyA3cTMyIDAgNDkgLTJxNiAtNCAzMC41IC0yMXQzMyAtMjN0MzEgLTIzdDMyIC0yNS41dDI3LjUgLTI1LjV0MjYuNSAtMjkuNXQyMSAtMzAuNXQxNy41IC0zNC41dDkuNSAtMzZ0NC41IC00MC41ek0zODUgMjk0cS0yMzQgLTcgLTM4NSAtODV2NDMzcTEwMyAtMTE4IDI3MyAtMTE4IHEzMiAwIDcwIDVxLTIxIC02MSAtMjEgLTg2cTAgLTY3IDYzIC0xNDl6TTU1OCA4MDVxMCAtMTAwIC00My41IC0xNjAuNXQtMTQwLjUgLTYwLjVxLTUxIDAgLTk3IDI2dC03OCA2Ny41dC01NiA5My41dC0zNS41IDEwNHQtMTEuNSA5OXEwIDk2IDUxLjUgMTY1dDE0NC41IDY5cTY2IDAgMTE5IC00MXQ4NCAtMTA0dDQ3IC0xMzB0MTYgLTEyOHpNMTUzNiA4OTZ2LTczNnEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtNDY4IHEzOSA3MyAzOSAxNTdxMCA2NiAtMjIgMTIyLjV0LTU1LjUgOTN0LTcyIDcxdC03MiA1OS41dC01NS41IDU0LjV0LTIyIDU5LjVxMCAzNiAyMyA2OHQ1NiA2MS41dDY1LjUgNjQuNXQ1NS41IDkzdDIzIDEzMXQtMjYuNSAxNDUuNXQtNzUuNSAxMTguNXEtNiA2IC0xNCAxMXQtMTIuNSA3LjV0LTEwIDkuNXQtMTAuNSAxN2gxMzVsMTM1IDY0aC00MzdxLTEzOCAwIC0yNDQuNSAtMzguNXQtMTgyLjUgLTEzMy41cTAgMTI2IDgxIDIxM3QyMDcgODdoOTYwIHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXYtOTZoLTI1NnYyNTZoLTEyOHYtMjU2aC0yNTZ2LTEyOGgyNTZ2LTI1NmgxMjh2MjU2aDI1NnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBkNTsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNODc2IDcxcTAgMjEgLTQuNSA0MC41dC05LjUgMzZ0LTE3LjUgMzQuNXQtMjEgMzAuNXQtMjYuNSAyOS41dC0yNy41IDI1LjV0LTMyIDI1LjV0LTMxIDIzdC0zMyAyM3QtMzAuNSAyMXEtMTcgMiAtNTAgMnEtNTQgMCAtMTA2IC03dC0xMDggLTI1dC05OCAtNDZ0LTY5IC03NXQtMjcgLTEwN3EwIC02OCAzNS41IC0xMjEuNXQ5MyAtODR0MTIwLjUgLTQ1LjV0MTI3IC0xNXE1OSAwIDExMi41IDEyLjV0MTAwLjUgMzl0NzQuNSA3My41IHQyNy41IDExMHpNNzU2IDkzM3EwIDYwIC0xNi41IDEyNy41dC00NyAxMzAuNXQtODQgMTA0dC0xMTkuNSA0MXEtOTMgMCAtMTQ0IC02OXQtNTEgLTE2NXEwIC00NyAxMS41IC05OXQzNS41IC0xMDR0NTYgLTkzLjV0NzggLTY3LjV0OTcgLTI2cTk3IDAgMTQwLjUgNjAuNXQ0My41IDE2MC41ek02MjUgMTQwOGg0MzdsLTEzNSAtNzloLTEzNXE3MSAtNDUgMTEwIC0xMjZ0MzkgLTE2OXEwIC03NCAtMjMgLTEzMS41dC01NiAtOTIuNXQtNjYgLTY0LjUgdC01NiAtNjF0LTIzIC02Ny41cTAgLTI2IDE2LjUgLTUxdDQzIC00OHQ1OC41IC00OHQ2NCAtNTUuNXQ1OC41IC02NnQ0MyAtODV0MTYuNSAtMTA2LjVxMCAtMTYwIC0xNDAgLTI4MnEtMTUyIC0xMzEgLTQyMCAtMTMxcS01OSAwIC0xMTkuNSAxMHQtMTIyIDMzLjV0LTEwOC41IDU4dC03NyA4OXQtMzAgMTIxLjVxMCA2MSAzNyAxMzVxMzIgNjQgOTYgMTEwLjV0MTQ1IDcxdDE1NSAzNnQxNTAgMTMuNXEtNjQgODMgLTY0IDE0OXEwIDEyIDIgMjMuNSB0NSAxOS41dDggMjEuNXQ3IDIxLjVxLTQwIC01IC03MCAtNXEtMTQ5IDAgLTI1NS41IDk4dC0xMDYuNSAyNDZxMCAxNDAgOTUgMjUwLjV0MjM0IDE0MS41cTk0IDIwIDE4NyAyMHpNMTY2NCAxMTUydi0xMjhoLTI1NnYtMjU2aC0xMjh2MjU2aC0yNTZ2MTI4aDI1NnYyNTZoMTI4di0yNTZoMjU2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGQ2OyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik03NjggMzg0aDM4NHY5NmgtMTI4djQ0OGgtMTE0bC0xNDggLTEzN2w3NyAtODBxNDIgMzcgNTUgNTdoMnYtMjg4aC0xMjh2LTk2ek0xMjgwIDY0MHEwIC03MCAtMjEgLTE0MnQtNTkuNSAtMTM0dC0xMDEuNSAtMTAxdC0xMzggLTM5dC0xMzggMzl0LTEwMS41IDEwMXQtNTkuNSAxMzR0LTIxIDE0MnQyMSAxNDJ0NTkuNSAxMzR0MTAxLjUgMTAxdDEzOCAzOXQxMzggLTM5dDEwMS41IC0xMDF0NTkuNSAtMTM0dDIxIC0xNDJ6TTE3OTIgMzg0IHY1MTJxLTEwNiAwIC0xODEgNzV0LTc1IDE4MWgtMTE1MnEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV2LTUxMnExMDYgMCAxODEgLTc1dDc1IC0xODFoMTE1MnEwIDEwNiA3NSAxODF0MTgxIDc1ek0xOTIwIDEyMTZ2LTExNTJxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNzkycS0yNiAwIC00NSAxOXQtMTkgNDV2MTE1MnEwIDI2IDE5IDQ1dDQ1IDE5aDE3OTJxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGQ3OyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik0xMDI0IDgzMnEwIC0yNiAtMTkgLTQ1bC00NDggLTQ0OHEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5bC00NDggNDQ4cS0xOSAxOSAtMTkgNDV0MTkgNDV0NDUgMTloODk2cTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBkODsiIGhvcml6LWFkdi14PSIxMDI0IiBkPSJNMTAyNCAzMjBxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC04OTZxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NWw0NDggNDQ4cTE5IDE5IDQ1IDE5dDQ1IC0xOWw0NDggLTQ0OHExOSAtMTkgMTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGQ5OyIgaG9yaXotYWR2LXg9IjY0MCIgZD0iTTY0MCAxMDg4di04OTZxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOWwtNDQ4IDQ0OHEtMTkgMTkgLTE5IDQ1dDE5IDQ1bDQ0OCA0NDhxMTkgMTkgNDUgMTl0NDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBkYTsiIGhvcml6LWFkdi14PSI2NDAiIGQ9Ik01NzYgNjQwcTAgLTI2IC0xOSAtNDVsLTQ0OCAtNDQ4cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTl0LTE5IDQ1djg5NnEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOWw0NDggLTQ0OHExOSAtMTkgMTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGRiOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xNjAgMGg2MDh2MTE1MmgtNjQwdi0xMTIwcTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjV6TTE1MzYgMzJ2MTEyMGgtNjQwdi0xMTUyaDYwOHExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xNjY0IDEyNDh2LTEyMTZxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTEzNDRxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjEyMTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDEzNDRxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZGM7IiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTEwMjQgNDQ4cTAgLTI2IC0xOSAtNDVsLTQ0OCAtNDQ4cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTlsLTQ0OCA0NDhxLTE5IDE5IC0xOSA0NXQxOSA0NXQ0NSAxOWg4OTZxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xMDI0IDgzMnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTg5NnEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1bDQ0OCA0NDhxMTkgMTkgNDUgMTl0NDUgLTE5bDQ0OCAtNDQ4cTE5IC0xOSAxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZGQ7IiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTEwMjQgNDQ4cTAgLTI2IC0xOSAtNDVsLTQ0OCAtNDQ4cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTlsLTQ0OCA0NDhxLTE5IDE5IC0xOSA0NXQxOSA0NXQ0NSAxOWg4OTZxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGRlOyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik0xMDI0IDgzMnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTg5NnEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1bDQ0OCA0NDhxMTkgMTkgNDUgMTl0NDUgLTE5bDQ0OCAtNDQ4cTE5IC0xOSAxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZTA7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgODI2di03OTRxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE0NzJxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjc5NHE0NCAtNDkgMTAxIC04N3EzNjIgLTI0NiA0OTcgLTM0NXE1NyAtNDIgOTIuNSAtNjUuNXQ5NC41IC00OHQxMTAgLTI0LjVoMWgxcTUxIDAgMTEwIDI0LjV0OTQuNSA0OHQ5Mi41IDY1LjVxMTcwIDEyMyA0OTggMzQ1cTU3IDM5IDEwMCA4N3pNMTc5MiAxMTIwcTAgLTc5IC00OSAtMTUxdC0xMjIgLTEyMyBxLTM3NiAtMjYxIC00NjggLTMyNXEtMTAgLTcgLTQyLjUgLTMwLjV0LTU0IC0zOHQtNTIgLTMyLjV0LTU3LjUgLTI3dC01MCAtOWgtMWgtMXEtMjMgMCAtNTAgOXQtNTcuNSAyN3QtNTIgMzIuNXQtNTQgMzh0LTQyLjUgMzAuNXEtOTEgNjQgLTI2MiAxODIuNXQtMjA1IDE0Mi41cS02MiA0MiAtMTE3IDExNS41dC01NSAxMzYuNXEwIDc4IDQxLjUgMTMwdDExOC41IDUyaDE0NzJxNjUgMCAxMTIuNSAtNDd0NDcuNSAtMTEzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGUxOyIgaG9yaXotYWR2LXg9IjEzNzkiIGQ9Ik0xMDE0IDk2MXExNzEgMCAyNjggLTg1LjV0OTcgLTI1NC41di01ODZxMCAtMTQgLTEwLjUgLTI0LjV0LTI0LjUgLTEwLjVoLTI1MnEtMTQgMCAtMjQuNSAxMC41dC0xMC41IDI0LjV2NTI5cTAgNzEgLTI2LjUgMTA0dC05NS41IDMzcS04OCAwIC0xMjMuNSAtNTEuNXQtMzUuNSAtMTQzLjV2LTQ3MXEwIC0xNCAtMTAuNSAtMjQuNXQtMjUuNSAtMTAuNWgtMjQ2cS0xNCAwIC0yNC41IDEwLjV0LTEwLjUgMjQuNXY4NjhxMCAxNCAxMC41IDI0LjUgdDI0LjUgMTAuNWgyMzlxMTMgMCAyMSAtNXQxMC41IC0xOC41dDMgLTE4dDAuNSAtMjIuNXE5MyA4NyAyNDYgODd6TTI5MCA5MzhxMTQgMCAyNC41IC0xMC41dDEwLjUgLTI0LjV2LTg2OHEwIC0xNCAtMTAuNSAtMjQuNXQtMjQuNSAtMTAuNWgtMjQ2cS0xNCAwIC0yNC41IDEwLjV0LTEwLjUgMjQuNXY4NjhxMCAxNCAxMC41IDI0LjV0MjQuNSAxMC41aDI0NnpNMTY3IDEzNzFxNjkgMCAxMTggLTQ5dDQ5IC0xMTh0LTQ5IC0xMTh0LTExOCAtNDkgdC0xMTggNDl0LTQ5IDExOHQ0OSAxMTh0MTE4IDQ5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGUyOyIgZD0iTTE1MzYgNjQwcTAgLTE1NiAtNjEgLTI5OHQtMTY0IC0yNDV0LTI0NSAtMTY0dC0yOTggLTYxcS0xNzkgMCAtMzM2LjUgNzZ0LTI2NiAyMTN0LTE0Ny41IDMxMnEtMyAxNCA3IDI3cTkgMTIgMjUgMTJoMTk5cTIzIDAgMzAgLTIzcTUwIC0xNjIgMTg1IC0yNjEuNXQzMDQgLTk5LjVxMTA0IDAgMTk4LjUgNDAuNXQxNjMuNSAxMDkuNXQxMDkuNSAxNjMuNXQ0MC41IDE5OC41dC00MC41IDE5OC41dC0xMDkuNSAxNjMuNXQtMTYzLjUgMTA5LjUgdC0xOTguNSA0MC41cS05OCAwIC0xODggLTM1LjV0LTE2MCAtMTAxLjVsMTM3IC0xMzhxMzEgLTMwIDE0IC02OXEtMTcgLTQwIC01OSAtNDBoLTQ0OHEtMjYgMCAtNDUgMTl0LTE5IDQ1djQ0OHEwIDQyIDQwIDU5cTM5IDE3IDY5IC0xNGwxMzAgLTEyOXExMDcgMTAxIDI0NC41IDE1Ni41dDI4NC41IDU1LjVxMTU2IDAgMjk4IC02MXQyNDUgLTE2NHQxNjQgLTI0NXQ2MSAtMjk4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGUzOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzcxIDBxMCAtNTMgLTM3IC05MGwtMTA3IC0xMDhxLTM5IC0zNyAtOTEgLTM3cS01MyAwIC05MCAzN2wtMzYzIDM2NHEtMzggMzYgLTM4IDkwcTAgNTMgNDMgOTZsLTI1NiAyNTZsLTEyNiAtMTI2cS0xNCAtMTQgLTM0IC0xNHQtMzQgMTRxMiAtMiAxMi41IC0xMnQxMi41IC0xM3QxMCAtMTEuNXQxMCAtMTMuNXQ2IC0xMy41dDUuNSAtMTYuNXQxLjUgLTE4cTAgLTM4IC0yOCAtNjhxLTMgLTMgLTE2LjUgLTE4dC0xOSAtMjAuNSB0LTE4LjUgLTE2LjV0LTIyIC0xNS41dC0yMiAtOXQtMjYgLTQuNXEtNDAgMCAtNjggMjhsLTQwOCA0MDhxLTI4IDI4IC0yOCA2OHEwIDEzIDQuNSAyNnQ5IDIydDE1LjUgMjJ0MTYuNSAxOC41dDIwLjUgMTl0MTggMTYuNXEzMCAyOCA2OCAyOHExMCAwIDE4IC0xLjV0MTYuNSAtNS41dDEzLjUgLTZ0MTMuNSAtMTB0MTEuNSAtMTB0MTMgLTEyLjV0MTIgLTEyLjVxLTE0IDE0IC0xNCAzNHQxNCAzNGwzNDggMzQ4cTE0IDE0IDM0IDE0dDM0IC0xNCBxLTIgMiAtMTIuNSAxMnQtMTIuNSAxM3QtMTAgMTEuNXQtMTAgMTMuNXQtNiAxMy41dC01LjUgMTYuNXQtMS41IDE4cTAgMzggMjggNjhxMyAzIDE2LjUgMTh0MTkgMjAuNXQxOC41IDE2LjV0MjIgMTUuNXQyMiA5dDI2IDQuNXE0MCAwIDY4IC0yOGw0MDggLTQwOHEyOCAtMjggMjggLTY4cTAgLTEzIC00LjUgLTI2dC05IC0yMnQtMTUuNSAtMjJ0LTE2LjUgLTE4LjV0LTIwLjUgLTE5dC0xOCAtMTYuNXEtMzAgLTI4IC02OCAtMjggcS0xMCAwIC0xOCAxLjV0LTE2LjUgNS41dC0xMy41IDZ0LTEzLjUgMTB0LTExLjUgMTB0LTEzIDEyLjV0LTEyIDEyLjVxMTQgLTE0IDE0IC0zNHQtMTQgLTM0bC0xMjYgLTEyNmwyNTYgLTI1NnE0MyA0MyA5NiA0M3E1MiAwIDkxIC0zN2wzNjMgLTM2M3EzNyAtMzkgMzcgLTkxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGU0OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0zODQgMzg0cTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek01NzYgODMycTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0xMDA0IDM1MWwxMDEgMzgycTYgMjYgLTcuNSA0OC41dC0zOC41IDI5LjUgdC00OCAtNi41dC0zMCAtMzkuNWwtMTAxIC0zODJxLTYwIC01IC0xMDcgLTQzLjV0LTYzIC05OC41cS0yMCAtNzcgMjAgLTE0NnQxMTcgLTg5dDE0NiAyMHQ4OSAxMTdxMTYgNjAgLTYgMTE3dC03MiA5MXpNMTY2NCAzODRxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTEwMjQgMTAyNHEwIDUzIC0zNy41IDkwLjUgdC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTE0NzIgODMycTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0xNzkyIDM4NHEwIC0yNjEgLTE0MSAtNDgzcS0xOSAtMjkgLTU0IC0yOWgtMTQwMnEtMzUgMCAtNTQgMjkgcS0xNDEgMjIxIC0xNDEgNDgzcTAgMTgyIDcxIDM0OHQxOTEgMjg2dDI4NiAxOTF0MzQ4IDcxdDM0OCAtNzF0Mjg2IC0xOTF0MTkxIC0yODZ0NzEgLTM0OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBlNTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNODk2IDExNTJxLTIwNCAwIC0zODEuNSAtNjkuNXQtMjgyIC0xODcuNXQtMTA0LjUgLTI1NXEwIC0xMTIgNzEuNSAtMjEzLjV0MjAxLjUgLTE3NS41bDg3IC01MGwtMjcgLTk2cS0yNCAtOTEgLTcwIC0xNzJxMTUyIDYzIDI3NSAxNzFsNDMgMzhsNTcgLTZxNjkgLTggMTMwIC04cTIwNCAwIDM4MS41IDY5LjV0MjgyIDE4Ny41dDEwNC41IDI1NXQtMTA0LjUgMjU1dC0yODIgMTg3LjV0LTM4MS41IDY5LjV6TTE3OTIgNjQwIHEwIC0xNzQgLTEyMCAtMzIxLjV0LTMyNiAtMjMzdC00NTAgLTg1LjVxLTcwIDAgLTE0NSA4cS0xOTggLTE3NSAtNDYwIC0yNDJxLTQ5IC0xNCAtMTE0IC0yMmgtNXEtMTUgMCAtMjcgMTAuNXQtMTYgMjcuNXYxcS0zIDQgLTAuNSAxMnQyIDEwdDQuNSA5LjVsNiA5dDcgOC41dDggOXE3IDggMzEgMzQuNXQzNC41IDM4dDMxIDM5LjV0MzIuNSA1MXQyNyA1OXQyNiA3NnEtMTU3IDg5IC0yNDcuNSAyMjB0LTkwLjUgMjgxcTAgMTc0IDEyMCAzMjEuNSB0MzI2IDIzM3Q0NTAgODUuNXQ0NTAgLTg1LjV0MzI2IC0yMzN0MTIwIC0zMjEuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBlNjsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNzA0IDExNTJxLTE1MyAwIC0yODYgLTUydC0yMTEuNSAtMTQxdC03OC41IC0xOTFxMCAtODIgNTMgLTE1OHQxNDkgLTEzMmw5NyAtNTZsLTM1IC04NHEzNCAyMCA2MiAzOWw0NCAzMWw1MyAtMTBxNzggLTE0IDE1MyAtMTRxMTUzIDAgMjg2IDUydDIxMS41IDE0MXQ3OC41IDE5MXQtNzguNSAxOTF0LTIxMS41IDE0MXQtMjg2IDUyek03MDQgMTI4MHExOTEgMCAzNTMuNSAtNjguNXQyNTYuNSAtMTg2LjV0OTQgLTI1N3QtOTQgLTI1NyB0LTI1Ni41IC0xODYuNXQtMzUzLjUgLTY4LjVxLTg2IDAgLTE3NiAxNnEtMTI0IC04OCAtMjc4IC0xMjhxLTM2IC05IC04NiAtMTZoLTNxLTExIDAgLTIwLjUgOHQtMTEuNSAyMXEtMSAzIC0xIDYuNXQwLjUgNi41dDIgNmwyLjUgNXQzLjUgNS41dDQgNXQ0LjUgNXQ0IDQuNXE1IDYgMjMgMjV0MjYgMjkuNXQyMi41IDI5dDI1IDM4LjV0MjAuNSA0NHEtMTI0IDcyIC0xOTUgMTc3dC03MSAyMjRxMCAxMzkgOTQgMjU3dDI1Ni41IDE4Ni41IHQzNTMuNSA2OC41ek0xNTI2IDExMXExMCAtMjQgMjAuNSAtNDR0MjUgLTM4LjV0MjIuNSAtMjl0MjYgLTI5LjV0MjMgLTI1cTEgLTEgNCAtNC41dDQuNSAtNXQ0IC01dDMuNSAtNS41bDIuNSAtNXQyIC02dDAuNSAtNi41dC0xIC02LjVxLTMgLTE0IC0xMyAtMjJ0LTIyIC03cS01MCA3IC04NiAxNnEtMTU0IDQwIC0yNzggMTI4cS05MCAtMTYgLTE3NiAtMTZxLTI3MSAwIC00NzIgMTMycTU4IC00IDg4IC00cTE2MSAwIDMwOSA0NXQyNjQgMTI5IHExMjUgOTIgMTkyIDIxMnQ2NyAyNTRxMCA3NyAtMjMgMTUycTEyOSAtNzEgMjA0IC0xNzh0NzUgLTIzMHEwIC0xMjAgLTcxIC0yMjQuNXQtMTk1IC0xNzYuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBlNzsiIGhvcml6LWFkdi14PSI4OTYiIGQ9Ik04ODUgOTcwcTE4IC0yMCA3IC00NGwtNTQwIC0xMTU3cS0xMyAtMjUgLTQyIC0yNXEtNCAwIC0xNCAycS0xNyA1IC0yNS41IDE5dC00LjUgMzBsMTk3IDgwOGwtNDA2IC0xMDFxLTQgLTEgLTEyIC0xcS0xOCAwIC0zMSAxMXEtMTggMTUgLTEzIDM5bDIwMSA4MjVxNCAxNCAxNiAyM3QyOCA5aDMyOHExOSAwIDMyIC0xMi41dDEzIC0yOS41cTAgLTggLTUgLTE4bC0xNzEgLTQ2M2wzOTYgOThxOCAyIDEyIDJxMTkgMCAzNCAtMTV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZTg7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgMjg4di0zMjBxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYzMjBxMCA0MCAyOCA2OHQ2OCAyOGg5NnYxOTJoLTUxMnYtMTkyaDk2cTQwIDAgNjggLTI4dDI4IC02OHYtMzIwcTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMzIwcS00MCAwIC02OCAyOHQtMjggNjh2MzIwcTAgNDAgMjggNjh0NjggMjhoOTZ2MTkyaC01MTJ2LTE5Mmg5NnE0MCAwIDY4IC0yOHQyOCAtNjh2LTMyMCBxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYzMjBxMCA0MCAyOCA2OHQ2OCAyOGg5NnYxOTJxMCA1MiAzOCA5MHQ5MCAzOGg1MTJ2MTkyaC05NnEtNDAgMCAtNjggMjh0LTI4IDY4djMyMHEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh2LTMyMHEwIC00MCAtMjggLTY4dC02OCAtMjhoLTk2di0xOTJoNTEycTUyIDAgOTAgLTM4dDM4IC05MHYtMTkyaDk2cTQwIDAgNjggLTI4dDI4IC02OCB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZTk7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTg5NiA3MDh2LTU4MHEwIC0xMDQgLTc2IC0xODB0LTE4MCAtNzZ0LTE4MCA3NnQtNzYgMTgwcTAgMjYgMTkgNDV0NDUgMTl0NDUgLTE5dDE5IC00NXEwIC01MCAzOSAtODl0ODkgLTM5dDg5IDM5dDM5IDg5djU4MHEzMyAxMSA2NCAxMXQ2NCAtMTF6TTE2NjQgNjgxcTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNXEtMTEgMCAtMjMgMTBxLTQ5IDQ2IC05MyA2OXQtMTAyIDIzcS02OCAwIC0xMjggLTM3dC0xMDMgLTk3IHEtNyAtMTAgLTE3LjUgLTI4dC0xNC41IC0yNHEtMTEgLTE3IC0yOCAtMTdxLTE4IDAgLTI5IDE3cS00IDYgLTE0LjUgMjR0LTE3LjUgMjhxLTQzIDYwIC0xMDIuNSA5N3QtMTI3LjUgMzd0LTEyNy41IC0zN3QtMTAyLjUgLTk3cS03IC0xMCAtMTcuNSAtMjh0LTE0LjUgLTI0cS0xMSAtMTcgLTI5IC0xN3EtMTcgMCAtMjggMTdxLTQgNiAtMTQuNSAyNHQtMTcuNSAyOHEtNDMgNjAgLTEwMyA5N3QtMTI4IDM3cS01OCAwIC0xMDIgLTIzdC05MyAtNjkgcS0xMiAtMTAgLTIzIC0xMHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41cTAgNSAxIDdxNDUgMTgzIDE3Mi41IDMxOS41dDI5OCAyMDQuNXQzNjAuNSA2OHExNDAgMCAyNzQuNSAtNDB0MjQ2LjUgLTExMy41dDE5NC41IC0xODd0MTE1LjUgLTI1MS41cTEgLTIgMSAtN3pNODk2IDE0MDh2LTk4cS00MiAyIC02NCAydC02NCAtMnY5OHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZWE7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTc2OCAtMTI4aDg5NnY2NDBoLTQxNnEtNDAgMCAtNjggMjh0LTI4IDY4djQxNmgtMzg0di0xMTUyek0xMDI0IDEzMTJ2NjRxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC03MDRxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di02NHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDcwNHExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xMjgwIDY0MGgyOTlsLTI5OSAyOTl2LTI5OXpNMTc5MiA1MTJ2LTY3MnEwIC00MCAtMjggLTY4dC02OCAtMjggaC05NjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxNjBoLTU0NHEtNDAgMCAtNjggMjh0LTI4IDY4djEzNDRxMCA0MCAyOCA2OHQ2OCAyOGgxMDg4cTQwIDAgNjggLTI4dDI4IC02OHYtMzI4cTIxIC0xMyAzNiAtMjhsNDA4IC00MDhxMjggLTI4IDQ4IC03NnQyMCAtODh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZWI7IiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTczNiA5NjBxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41dC0yMi41IDkuNXQtOS41IDIyLjVxMCA0NiAtNTQgNzF0LTEwNiAyNXEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41dDkuNSAyMi41dDIyLjUgOS41cTUwIDAgOTkuNSAtMTZ0ODcgLTU0dDM3LjUgLTkwek04OTYgOTYwcTAgNzIgLTM0LjUgMTM0dC05MCAxMDEuNXQtMTIzIDYydC0xMzYuNSAyMi41dC0xMzYuNSAtMjIuNXQtMTIzIC02MnQtOTAgLTEwMS41dC0zNC41IC0xMzQgcTAgLTEwMSA2OCAtMTgwcTEwIC0xMSAzMC41IC0zM3QzMC41IC0zM3ExMjggLTE1MyAxNDEgLTI5OGgyMjhxMTMgMTQ1IDE0MSAyOThxMTAgMTEgMzAuNSAzM3QzMC41IDMzcTY4IDc5IDY4IDE4MHpNMTAyNCA5NjBxMCAtMTU1IC0xMDMgLTI2OHEtNDUgLTQ5IC03NC41IC04N3QtNTkuNSAtOTUuNXQtMzQgLTEwNy41cTQ3IC0yOCA0NyAtODJxMCAtMzcgLTI1IC02NHEyNSAtMjcgMjUgLTY0cTAgLTUyIC00NSAtODFxMTMgLTIzIDEzIC00NyBxMCAtNDYgLTMxLjUgLTcxdC03Ny41IC0yNXEtMjAgLTQ0IC02MCAtNzB0LTg3IC0yNnQtODcgMjZ0LTYwIDcwcS00NiAwIC03Ny41IDI1dC0zMS41IDcxcTAgMjQgMTMgNDdxLTQ1IDI5IC00NSA4MXEwIDM3IDI1IDY0cS0yNSAyNyAtMjUgNjRxMCA1NCA0NyA4MnEtNCA1MCAtMzQgMTA3LjV0LTU5LjUgOTUuNXQtNzQuNSA4N3EtMTAzIDExMyAtMTAzIDI2OHEwIDk5IDQ0LjUgMTg0LjV0MTE3IDE0MnQxNjQgODl0MTg2LjUgMzIuNSB0MTg2LjUgLTMyLjV0MTY0IC04OXQxMTcgLTE0MnQ0NC41IC0xODQuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBlYzsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc5MiAzNTJ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEzNzZ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVxLTEyIDAgLTI0IDEwbC0zMTkgMzIwcS05IDkgLTkgMjJxMCAxNCA5IDIzbDMyMCAzMjBxOSA5IDIzIDlxMTMgMCAyMi41IC05LjV0OS41IC0yMi41di0xOTJoMTM3NnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE3OTIgODk2cTAgLTE0IC05IC0yM2wtMzIwIC0zMjBxLTkgLTkgLTIzIC05IHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MmgtMTM3NnEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEzNzZ2MTkycTAgMTQgOSAyM3QyMyA5cTEyIDAgMjQgLTEwbDMxOSAtMzE5cTkgLTkgOSAtMjN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZWQ7IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTEyODAgNjA4cTAgMTQgLTkgMjN0LTIzIDloLTIyNHYzNTJxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC0xOTJxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di0zNTJoLTIyNHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjVxMCAtMTQgOSAtMjNsMzUyIC0zNTJxOSAtOSAyMyAtOXQyMyA5bDM1MSAzNTFxMTAgMTIgMTAgMjR6TTE5MjAgMzg0cTAgLTE1OSAtMTEyLjUgLTI3MS41dC0yNzEuNSAtMTEyLjVoLTEwODggcS0xODUgMCAtMzE2LjUgMTMxLjV0LTEzMS41IDMxNi41cTAgMTMwIDcwIDI0MHQxODggMTY1cS0yIDMwIC0yIDQzcTAgMjEyIDE1MCAzNjJ0MzYyIDE1MHExNTYgMCAyODUuNSAtODd0MTg4LjUgLTIzMXE3MSA2MiAxNjYgNjJxMTA2IDAgMTgxIC03NXQ3NSAtMTgxcTAgLTc2IC00MSAtMTM4cTEzMCAtMzEgMjEzLjUgLTEzNS41dDgzLjUgLTIzOC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGVlOyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xMjgwIDY3MnEwIDE0IC05IDIzbC0zNTIgMzUycS05IDkgLTIzIDl0LTIzIC05bC0zNTEgLTM1MXEtMTAgLTEyIC0xMCAtMjRxMCAtMTQgOSAtMjN0MjMgLTloMjI0di0zNTJxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxOTJxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXYzNTJoMjI0cTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTE5MjAgMzg0cTAgLTE1OSAtMTEyLjUgLTI3MS41dC0yNzEuNSAtMTEyLjVoLTEwODggcS0xODUgMCAtMzE2LjUgMTMxLjV0LTEzMS41IDMxNi41cTAgMTMwIDcwIDI0MHQxODggMTY1cS0yIDMwIC0yIDQzcTAgMjEyIDE1MCAzNjJ0MzYyIDE1MHExNTYgMCAyODUuNSAtODd0MTg4LjUgLTIzMXE3MSA2MiAxNjYgNjJxMTA2IDAgMTgxIC03NXQ3NSAtMTgxcTAgLTc2IC00MSAtMTM4cTEzMCAtMzEgMjEzLjUgLTEzNS41dDgzLjUgLTIzOC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGYwOyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0zODQgMTkycTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDV6TTE0MDggMTMxcTAgLTEyMSAtNzMgLTE5MHQtMTk0IC02OWgtODc0cS0xMjEgMCAtMTk0IDY5dC03MyAxOTBxMCA2OCA1LjUgMTMxdDI0IDEzOHQ0Ny41IDEzMi41dDgxIDEwM3QxMjAgNjAuNXEtMjIgLTUyIC0yMiAtMTIwdi0yMDNxLTU4IC0yMCAtOTMgLTcwdC0zNSAtMTExcTAgLTgwIDU2IC0xMzZ0MTM2IC01NiB0MTM2IDU2dDU2IDEzNnEwIDYxIC0zNS41IDExMXQtOTIuNSA3MHYyMDNxMCA2MiAyNSA5M3ExMzIgLTEwNCAyOTUgLTEwNHQyOTUgMTA0cTI1IC0zMSAyNSAtOTN2LTY0cS0xMDYgMCAtMTgxIC03NXQtNzUgLTE4MXYtODlxLTMyIC0yOSAtMzIgLTcxcTAgLTQwIDI4IC02OHQ2OCAtMjh0NjggMjh0MjggNjhxMCA0MiAtMzIgNzF2ODlxMCA1MiAzOCA5MHQ5MCAzOHQ5MCAtMzh0MzggLTkwdi04OXEtMzIgLTI5IC0zMiAtNzFxMCAtNDAgMjggLTY4IHQ2OCAtMjh0NjggMjh0MjggNjhxMCA0MiAtMzIgNzF2ODlxMCA2OCAtMzQuNSAxMjcuNXQtOTMuNSA5My41cTAgMTAgMC41IDQyLjV0MCA0OHQtMi41IDQxLjV0LTcgNDd0LTEzIDQwcTY4IC0xNSAxMjAgLTYwLjV0ODEgLTEwM3Q0Ny41IC0xMzIuNXQyNCAtMTM4dDUuNSAtMTMxek0xMDg4IDEwMjRxMCAtMTU5IC0xMTIuNSAtMjcxLjV0LTI3MS41IC0xMTIuNXQtMjcxLjUgMTEyLjV0LTExMi41IDI3MS41dDExMi41IDI3MS41dDI3MS41IDExMi41IHQyNzEuNSAtMTEyLjV0MTEyLjUgLTI3MS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGYxOyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xMjgwIDgzMnEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTE0MDggODMycTAgLTYyIC0zNS41IC0xMTF0LTkyLjUgLTcwdi0zOTVxMCAtMTU5IC0xMzEuNSAtMjcxLjV0LTMxNi41IC0xMTIuNXQtMzE2LjUgMTEyLjV0LTEzMS41IDI3MS41djEzMnEtMTY0IDIwIC0yNzQgMTI4dC0xMTAgMjUydjUxMnEwIDI2IDE5IDQ1dDQ1IDE5cTYgMCAxNiAtMnExNyAzMCA0NyA0OCB0NjUgMThxNTMgMCA5MC41IC0zNy41dDM3LjUgLTkwLjV0LTM3LjUgLTkwLjV0LTkwLjUgLTM3LjVxLTMzIDAgLTY0IDE4di00MDJxMCAtMTA2IDk0IC0xODF0MjI2IC03NXQyMjYgNzV0OTQgMTgxdjQwMnEtMzEgLTE4IC02NCAtMThxLTUzIDAgLTkwLjUgMzcuNXQtMzcuNSA5MC41dDM3LjUgOTAuNXQ5MC41IDM3LjVxMzUgMCA2NSAtMTh0NDcgLTQ4cTEwIDIgMTYgMnEyNiAwIDQ1IC0xOXQxOSAtNDV2LTUxMnEwIC0xNDQgLTExMCAtMjUyIHQtMjc0IC0xMjh2LTEzMnEwIC0xMDYgOTQgLTE4MXQyMjYgLTc1dDIyNiA3NXQ5NCAxODF2Mzk1cS01NyAyMSAtOTIuNSA3MHQtMzUuNSAxMTFxMCA4MCA1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBmMjsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNjQwIDExNTJoNTEydjEyOGgtNTEydi0xMjh6TTI4OCAxMTUydi0xMjgwaC02NHEtOTIgMCAtMTU4IDY2dC02NiAxNTh2ODMycTAgOTIgNjYgMTU4dDE1OCA2Nmg2NHpNMTQwOCAxMTUydi0xMjgwaC0xMDI0djEyODBoMTI4djE2MHEwIDQwIDI4IDY4dDY4IDI4aDU3NnE0MCAwIDY4IC0yOHQyOCAtNjh2LTE2MGgxMjh6TTE3OTIgOTI4di04MzJxMCAtOTIgLTY2IC0xNTh0LTE1OCAtNjZoLTY0djEyODBoNjRxOTIgMCAxNTggLTY2IHQ2NiAtMTU4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGYzOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik04NDggLTE2MHEwIDE2IC0xNiAxNnEtNTkgMCAtMTAxLjUgNDIuNXQtNDIuNSAxMDEuNXEwIDE2IC0xNiAxNnQtMTYgLTE2cTAgLTczIDUxLjUgLTEyNC41dDEyNC41IC01MS41cTE2IDAgMTYgMTZ6TTE2NjQgMTI4cTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtNDQ4cTAgLTEwNiAtNzUgLTE4MXQtMTgxIC03NXQtMTgxIDc1dC03NSAxODFoLTQ0OHEtNTIgMCAtOTAgMzh0LTM4IDkwcTE5MCAxNjEgMjg3IDM5Ny41dDk3IDQ5OC41IHEwIDE2NSA5NiAyNjJ0MjY0IDExN3EtOCAxOCAtOCAzN3EwIDQwIDI4IDY4dDY4IDI4dDY4IC0yOHQyOCAtNjhxMCAtMTkgLTggLTM3cTE2OCAtMjAgMjY0IC0xMTd0OTYgLTI2MnEwIC0yNjIgOTcgLTQ5OC41dDI4NyAtMzk3LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZjQ7IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTE2NjQgODk2cTAgODAgLTU2IDEzNnQtMTM2IDU2aC02NHYtMzg0aDY0cTgwIDAgMTM2IDU2dDU2IDEzNnpNMCAxMjhoMTc5MnEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzVoLTEyODBxLTEwNiAwIC0xODEgNzV0LTc1IDE4MXpNMTg1NiA4OTZxMCAtMTU5IC0xMTIuNSAtMjcxLjV0LTI3MS41IC0xMTIuNWgtNjR2LTMycTAgLTkyIC02NiAtMTU4dC0xNTggLTY2aC03MDRxLTkyIDAgLTE1OCA2NnQtNjYgMTU4djczNnEwIDI2IDE5IDQ1IHQ0NSAxOWgxMTUycTE1OSAwIDI3MS41IC0xMTIuNXQxMTIuNSAtMjcxLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZjU7IiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTY0MCAxNDcydi02NDBxMCAtNjEgLTM1LjUgLTExMXQtOTIuNSAtNzB2LTc3OXEwIC01MiAtMzggLTkwdC05MCAtMzhoLTEyOHEtNTIgMCAtOTAgMzh0LTM4IDkwdjc3OXEtNTcgMjAgLTkyLjUgNzB0LTM1LjUgMTExdjY0MHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDV2LTQxNnEwIC0yNiAxOSAtNDV0NDUgLTE5dDQ1IDE5dDE5IDQ1djQxNnEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDV2LTQxNnEwIC0yNiAxOSAtNDUgdDQ1IC0xOXQ0NSAxOXQxOSA0NXY0MTZxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTl0MTkgLTQ1ek0xNDA4IDE0NzJ2LTE2MDBxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC0xMjhxLTUyIDAgLTkwIDM4dC0zOCA5MHY1MTJoLTIyNHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djgwMHEwIDEzMiA5NCAyMjZ0MjI2IDk0aDI1NnEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZjY7IiBob3Jpei1hZHYteD0iMTI4MCIgZD0iTTEwMjQgMzUydi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC03MDRxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloNzA0cTE0IDAgMjMgLTl0OSAtMjN6TTEwMjQgNjA4di02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC03MDRxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloNzA0cTE0IDAgMjMgLTl0OSAtMjN6TTEyOCAwaDEwMjR2NzY4aC00MTZxLTQwIDAgLTY4IDI4dC0yOCA2OHY0MTZoLTUxMnYtMTI4MHogTTc2OCA4OTZoMjk5bC0yOTkgMjk5di0yOTl6TTEyODAgNzY4di04MDBxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0xMDg4cS00MCAwIC02OCAyOHQtMjggNjh2MTM0NHEwIDQwIDI4IDY4dDY4IDI4aDU0NHE0MCAwIDg4IC0yMHQ3NiAtNDhsNDA4IC00MDhxMjggLTI4IDQ4IC03NnQyMCAtODh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZjc7IiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTM4NCAyMjR2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMzg0IDQ4MHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiBNNjQwIDQ4MHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0zODQgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE0xMTUyIDIyNHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek04OTYgNDgwdi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE02NDAgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTM4NCA5OTJ2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXogTTExNTIgNDgwdi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTg5NiA3MzZ2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXogTTY0MCA5OTJ2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMzg0IDEyNDh2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXogTTExNTIgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTg5NiA5OTJ2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXogTTY0MCAxMjQ4di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTExNTIgOTkydi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE04OTYgMTI0OHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xMTUyIDEyNDh2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXogTTg5NiAtMTI4aDM4NHYxNTM2aC0xMTUydi0xNTM2aDM4NHYyMjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgzMjBxMTMgMCAyMi41IC05LjV0OS41IC0yMi41di0yMjR6TTE0MDggMTQ3MnYtMTY2NHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTEyODBxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxNjY0cTAgMjYgMTkgNDV0NDUgMTloMTI4MHEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZjg7IiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTM4NCAyMjR2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMzg0IDQ4MHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiBNNjQwIDQ4MHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0zODQgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE0xMTUyIDIyNHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek04OTYgNDgwdi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE02NDAgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTExNTIgNDgwdi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE04OTYgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTExNTIgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE04OTYgLTEyOGgzODR2MTE1MmgtMjU2di0zMnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTQ0OHEtNDAgMCAtNjggMjh0LTI4IDY4djMyaC0yNTZ2LTExNTJoMzg0djIyNHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDMyMHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV2LTIyNHpNODk2IDEwNTZ2MzIwcTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtNjRxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di05NmgtMTI4djk2cTAgMTMgLTkuNSAyMi41IHQtMjIuNSA5LjVoLTY0cS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXYtMzIwcTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoNjRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXY5NmgxMjh2LTk2cTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoNjRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTQwOCAxMDg4di0xMjgwcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4MHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyODBxMCAyNiAxOSA0NXQ0NSAxOWgzMjAgdjI4OHEwIDQwIDI4IDY4dDY4IDI4aDQ0OHE0MCAwIDY4IC0yOHQyOCAtNjh2LTI4OGgzMjBxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGY5OyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik02NDAgMTI4cTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0yNTYgNjQwaDM4NHYyNTZoLTE1OHEtMTQgLTIgLTIyIC05bC0xOTUgLTE5NXEtNyAtMTIgLTkgLTIydi0zMHpNMTUzNiAxMjhxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41IHQ5MC41IDM3LjV0MzcuNSA5MC41ek0xNjY0IDgwMHYxOTJxMCAxNCAtOSAyM3QtMjMgOWgtMjI0djIyNHEwIDE0IC05IDIzdC0yMyA5aC0xOTJxLTE0IDAgLTIzIC05dC05IC0yM3YtMjI0aC0yMjRxLTE0IDAgLTIzIC05dC05IC0yM3YtMTkycTAgLTE0IDkgLTIzdDIzIC05aDIyNHYtMjI0cTAgLTE0IDkgLTIzdDIzIC05aDE5MnExNCAwIDIzIDl0OSAyM3YyMjRoMjI0cTE0IDAgMjMgOXQ5IDIzek0xOTIwIDEzNDR2LTExNTIgcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTkycTAgLTEwNiAtNzUgLTE4MXQtMTgxIC03NXQtMTgxIDc1dC03NSAxODFoLTM4NHEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxaC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOXY0MTZxMCAyNiAxMyA1OHQzMiA1MWwxOTggMTk4cTE5IDE5IDUxIDMydDU4IDEzaDE2MHYzMjBxMCAyNiAxOSA0NXQ0NSAxOWgxMTUycTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBmYTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTI4MCA0MTZ2MTkycTAgMTQgLTkgMjN0LTIzIDloLTIyNHYyMjRxMCAxNCAtOSAyM3QtMjMgOWgtMTkycS0xNCAwIC0yMyAtOXQtOSAtMjN2LTIyNGgtMjI0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgyMjR2LTIyNHEwIC0xNCA5IC0yM3QyMyAtOWgxOTJxMTQgMCAyMyA5dDkgMjN2MjI0aDIyNHExNCAwIDIzIDl0OSAyM3pNNjQwIDExNTJoNTEydjEyOGgtNTEydi0xMjh6TTI1NiAxMTUydi0xMjgwaC0zMiBxLTkyIDAgLTE1OCA2NnQtNjYgMTU4djgzMnEwIDkyIDY2IDE1OHQxNTggNjZoMzJ6TTE0NDAgMTE1MnYtMTI4MGgtMTA4OHYxMjgwaDE2MHYxNjBxMCA0MCAyOCA2OHQ2OCAyOGg1NzZxNDAgMCA2OCAtMjh0MjggLTY4di0xNjBoMTYwek0xNzkyIDkyOHYtODMycTAgLTkyIC02NiAtMTU4dC0xNTggLTY2aC0zMnYxMjgwaDMycTkyIDAgMTU4IC02NnQ2NiAtMTU4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGZiOyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xNjMyIDgwMHEyNjEgLTU4IDI4NyAtOTNsMSAtM3EtMSAtMzIgLTI4OCAtOTZsLTM1MiAtMzJsLTIyNCAtNjRoLTY0bC0yOTMgLTM1Mmg2OXEyNiAwIDQ1IC00LjV0MTkgLTExLjV0LTE5IC0xMS41dC00NSAtNC41aC05NmgtMTYwaC02NHYzMmg2NHY0MTZoLTE2MGwtMTkyIC0yMjRoLTk2bC0zMiAzMnYxOTJoMzJ2MzJoMTI4djhsLTE5MiAyNHYxMjhsMTkyIDI0djhoLTEyOHYzMmgtMzJ2MTkybDMyIDMyaDk2bDE5MiAtMjI0aDE2MHY0MTYgaC02NHYzMmg2NGgxNjBoOTZxMjYgMCA0NSAtNC41dDE5IC0xMS41dC0xOSAtMTEuNXQtNDUgLTQuNWgtNjlsMjkzIC0zNTJoNjRsMjI0IC02NHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBmYzsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNNjQwIDY0MHYzODRoLTI1NnYtMTYwcTAgLTQ1IDIgLTc2dDcuNSAtNTYuNXQxNC41IC00MHQyMyAtMjYuNXQzMy41IC0xNS41dDQ1IC03LjV0NTggLTIuNXQ3Mi41IDAuNXpNMTY2NCAxOTJ2LTE5MmgtMTE1MnYxOTJsMTI4IDE5MmgtOTdxLTIxMSAwIC0zMTMgMTAyLjV0LTEwMiAzMTQuNXYyODdsLTY0IDY0bDMyIDEyOGg0ODBsMzIgMTI4aDk2MGwzMiAtMTkybC02NCAtMzJ2LTgwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBmZDsiIGQ9Ik0xMjgwIDE5MnY4OTZxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0zMjBoLTUxMnYzMjBxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di04OTZxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXYzMjBoNTEydi0zMjBxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXpNMTUzNiAxMTIwdi05NjAgcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGZlOyIgZD0iTTEyODAgNTc2djEyOHEwIDI2IC0xOSA0NXQtNDUgMTloLTMyMHYzMjBxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0zMjBoLTMyMHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTEyOHEwIC0yNiAxOSAtNDV0NDUgLTE5aDMyMHYtMzIwcTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV2MzIwaDMyMHEyNiAwIDQ1IDE5dDE5IDQ1ek0xNTM2IDExMjB2LTk2MCBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYxMDA7IiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTYyNyAxNjBxMCAtMTMgLTEwIC0yM2wtNTAgLTUwcS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTQ2NiA0NjZxLTEwIDEwIC0xMCAyM3QxMCAyM2w0NjYgNDY2cTEwIDEwIDIzIDEwdDIzIC0xMGw1MCAtNTBxMTAgLTEwIDEwIC0yM3QtMTAgLTIzbC0zOTMgLTM5M2wzOTMgLTM5M3ExMCAtMTAgMTAgLTIzek0xMDExIDE2MHEwIC0xMyAtMTAgLTIzbC01MCAtNTBxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtNDY2IDQ2NnEtMTAgMTAgLTEwIDIzIHQxMCAyM2w0NjYgNDY2cTEwIDEwIDIzIDEwdDIzIC0xMGw1MCAtNTBxMTAgLTEwIDEwIC0yM3QtMTAgLTIzbC0zOTMgLTM5M2wzOTMgLTM5M3ExMCAtMTAgMTAgLTIzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTAxOyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik01OTUgNTc2cTAgLTEzIC0xMCAtMjNsLTQ2NiAtNDY2cS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTUwIDUwcS0xMCAxMCAtMTAgMjN0MTAgMjNsMzkzIDM5M2wtMzkzIDM5M3EtMTAgMTAgLTEwIDIzdDEwIDIzbDUwIDUwcTEwIDEwIDIzIDEwdDIzIC0xMGw0NjYgLTQ2NnExMCAtMTAgMTAgLTIzek05NzkgNTc2cTAgLTEzIC0xMCAtMjNsLTQ2NiAtNDY2cS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTUwIDUwcS0xMCAxMCAtMTAgMjN0MTAgMjMgbDM5MyAzOTNsLTM5MyAzOTNxLTEwIDEwIC0xMCAyM3QxMCAyM2w1MCA1MHExMCAxMCAyMyAxMHQyMyAtMTBsNDY2IC00NjZxMTAgLTEwIDEwIC0yM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjEwMjsiIGhvcml6LWFkdi14PSIxMTUyIiBkPSJNMTA3NSAyMjRxMCAtMTMgLTEwIC0yM2wtNTAgLTUwcS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTM5MyAzOTNsLTM5MyAtMzkzcS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTUwIDUwcS0xMCAxMCAtMTAgMjN0MTAgMjNsNDY2IDQ2NnExMCAxMCAyMyAxMHQyMyAtMTBsNDY2IC00NjZxMTAgLTEwIDEwIC0yM3pNMTA3NSA2MDhxMCAtMTMgLTEwIC0yM2wtNTAgLTUwcS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTM5MyAzOTNsLTM5MyAtMzkzIHEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC01MCA1MHEtMTAgMTAgLTEwIDIzdDEwIDIzbDQ2NiA0NjZxMTAgMTAgMjMgMTB0MjMgLTEwbDQ2NiAtNDY2cTEwIC0xMCAxMCAtMjN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYxMDM7IiBob3Jpei1hZHYteD0iMTE1MiIgZD0iTTEwNzUgNjcycTAgLTEzIC0xMCAtMjNsLTQ2NiAtNDY2cS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTQ2NiA0NjZxLTEwIDEwIC0xMCAyM3QxMCAyM2w1MCA1MHExMCAxMCAyMyAxMHQyMyAtMTBsMzkzIC0zOTNsMzkzIDM5M3ExMCAxMCAyMyAxMHQyMyAtMTBsNTAgLTUwcTEwIC0xMCAxMCAtMjN6TTEwNzUgMTA1NnEwIC0xMyAtMTAgLTIzbC00NjYgLTQ2NnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC00NjYgNDY2cS0xMCAxMCAtMTAgMjMgdDEwIDIzbDUwIDUwcTEwIDEwIDIzIDEwdDIzIC0xMGwzOTMgLTM5M2wzOTMgMzkzcTEwIDEwIDIzIDEwdDIzIC0xMGw1MCAtNTBxMTAgLTEwIDEwIC0yM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjEwNDsiIGhvcml6LWFkdi14PSI2NDAiIGQ9Ik02MjcgOTkycTAgLTEzIC0xMCAtMjNsLTM5MyAtMzkzbDM5MyAtMzkzcTEwIC0xMCAxMCAtMjN0LTEwIC0yM2wtNTAgLTUwcS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTQ2NiA0NjZxLTEwIDEwIC0xMCAyM3QxMCAyM2w0NjYgNDY2cTEwIDEwIDIzIDEwdDIzIC0xMGw1MCAtNTBxMTAgLTEwIDEwIC0yM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjEwNTsiIGhvcml6LWFkdi14PSI2NDAiIGQ9Ik01OTUgNTc2cTAgLTEzIC0xMCAtMjNsLTQ2NiAtNDY2cS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTUwIDUwcS0xMCAxMCAtMTAgMjN0MTAgMjNsMzkzIDM5M2wtMzkzIDM5M3EtMTAgMTAgLTEwIDIzdDEwIDIzbDUwIDUwcTEwIDEwIDIzIDEwdDIzIC0xMGw0NjYgLTQ2NnExMCAtMTAgMTAgLTIzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTA2OyIgaG9yaXotYWR2LXg9IjExNTIiIGQ9Ik0xMDc1IDM1MnEwIC0xMyAtMTAgLTIzbC01MCAtNTBxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtMzkzIDM5M2wtMzkzIC0zOTNxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtNTAgNTBxLTEwIDEwIC0xMCAyM3QxMCAyM2w0NjYgNDY2cTEwIDEwIDIzIDEwdDIzIC0xMGw0NjYgLTQ2NnExMCAtMTAgMTAgLTIzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTA3OyIgaG9yaXotYWR2LXg9IjExNTIiIGQ9Ik0xMDc1IDgwMHEwIC0xMyAtMTAgLTIzbC00NjYgLTQ2NnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC00NjYgNDY2cS0xMCAxMCAtMTAgMjN0MTAgMjNsNTAgNTBxMTAgMTAgMjMgMTB0MjMgLTEwbDM5MyAtMzkzbDM5MyAzOTNxMTAgMTAgMjMgMTB0MjMgLTEwbDUwIC01MHExMCAtMTAgMTAgLTIzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTA4OyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xNzkyIDU0NHY4MzJxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC0xNjAwcS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXYtODMycTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTYwMHExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xOTIwIDEzNzZ2LTEwODhxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTU0NHEwIC0zNyAxNiAtNzcuNXQzMiAtNzF0MTYgLTQzLjVxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC01MTJxLTI2IDAgLTQ1IDE5IHQtMTkgNDVxMCAxNCAxNiA0NHQzMiA3MHQxNiA3OGgtNTQ0cS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMDg4cTAgNjYgNDcgMTEzdDExMyA0N2gxNjAwcTY2IDAgMTEzIC00N3Q0NyAtMTEzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTA5OyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik00MTYgMjU2cS02NiAwIC0xMTMgNDd0LTQ3IDExM3Y3MDRxMCA2NiA0NyAxMTN0MTEzIDQ3aDEwODhxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN2LTcwNHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTA4OHpNMzg0IDExMjB2LTcwNHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDEwODhxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXY3MDRxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC0xMDg4cS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXogTTE3NjAgMTkyaDE2MHYtOTZxMCAtNDAgLTQ3IC02OHQtMTEzIC0yOGgtMTYwMHEtNjYgMCAtMTEzIDI4dC00NyA2OHY5NmgxNjBoMTYwMHpNMTA0MCA5NnExNiAwIDE2IDE2dC0xNiAxNmgtMTYwcS0xNiAwIC0xNiAtMTZ0MTYgLTE2aDE2MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjEwYTsiIGhvcml6LWFkdi14PSIxMTUyIiBkPSJNNjQwIDEyOHEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTEwMjQgMjg4djk2MHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTgzMnEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTk2MHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDgzMnExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xMTUyIDEyNDh2LTEwODhxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTgzMiBxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjEwODhxMCA2NiA0NyAxMTN0MTEzIDQ3aDgzMnE2NiAwIDExMyAtNDd0NDcgLTExM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjEwYjsiIGhvcml6LWFkdi14PSI3NjgiIGQ9Ik00NjQgMTI4cTAgMzMgLTIzLjUgNTYuNXQtNTYuNSAyMy41dC01Ni41IC0yMy41dC0yMy41IC01Ni41dDIzLjUgLTU2LjV0NTYuNSAtMjMuNXQ1Ni41IDIzLjV0MjMuNSA1Ni41ek02NzIgMjg4djcwNHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTUxMnEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTcwNHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDUxMnExMyAwIDIyLjUgOS41dDkuNSAyMi41ek00ODAgMTEzNiBxMCAxNiAtMTYgMTZoLTE2MHEtMTYgMCAtMTYgLTE2dDE2IC0xNmgxNjBxMTYgMCAxNiAxNnpNNzY4IDExNTJ2LTEwMjRxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC01MTJxLTUyIDAgLTkwIDM4dC0zOCA5MHYxMDI0cTAgNTIgMzggOTB0OTAgMzhoNTEycTUyIDAgOTAgLTM4dDM4IC05MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjEwYzsiIGQ9Ik0xMjgwIDY0MHEwIDEwNCAtNDAuNSAxOTguNXQtMTA5LjUgMTYzLjV0LTE2My41IDEwOS41dC0xOTguNSA0MC41dC0xOTguNSAtNDAuNXQtMTYzLjUgLTEwOS41dC0xMDkuNSAtMTYzLjV0LTQwLjUgLTE5OC41dDQwLjUgLTE5OC41dDEwOS41IC0xNjMuNXQxNjMuNSAtMTA5LjV0MTk4LjUgLTQwLjV0MTk4LjUgNDAuNXQxNjMuNSAxMDkuNXQxMDkuNSAxNjMuNXQ0MC41IDE5OC41ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjUgdC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYxMGQ7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTc2OCA1NzZ2LTM4NHEwIC04MCAtNTYgLTEzNnQtMTM2IC01NmgtMzg0cS04MCAwIC0xMzYgNTZ0LTU2IDEzNnY3MDRxMCAxMDQgNDAuNSAxOTguNXQxMDkuNSAxNjMuNXQxNjMuNSAxMDkuNXQxOTguNSA0MC41aDY0cTI2IDAgNDUgLTE5dDE5IC00NXYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtNjRxLTEwNiAwIC0xODEgLTc1dC03NSAtMTgxdi0zMnEwIC00MCAyOCAtNjh0NjggLTI4aDIyNHE4MCAwIDEzNiAtNTZ0NTYgLTEzNnogTTE2NjQgNTc2di0zODRxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZoLTM4NHEtODAgMCAtMTM2IDU2dC01NiAxMzZ2NzA0cTAgMTA0IDQwLjUgMTk4LjV0MTA5LjUgMTYzLjV0MTYzLjUgMTA5LjV0MTk4LjUgNDAuNWg2NHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTY0cS0xMDYgMCAtMTgxIC03NXQtNzUgLTE4MXYtMzJxMCAtNDAgMjggLTY4dDY4IC0yOGgyMjRxODAgMCAxMzYgLTU2dDU2IC0xMzZ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYxMGU7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTc2OCAxMjE2di03MDRxMCAtMTA0IC00MC41IC0xOTguNXQtMTA5LjUgLTE2My41dC0xNjMuNSAtMTA5LjV0LTE5OC41IC00MC41aC02NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDY0cTEwNiAwIDE4MSA3NXQ3NSAxODF2MzJxMCA0MCAtMjggNjh0LTY4IDI4aC0yMjRxLTgwIDAgLTEzNiA1NnQtNTYgMTM2djM4NHEwIDgwIDU2IDEzNnQxMzYgNTZoMzg0cTgwIDAgMTM2IC01NnQ1NiAtMTM2ek0xNjY0IDEyMTYgdi03MDRxMCAtMTA0IC00MC41IC0xOTguNXQtMTA5LjUgLTE2My41dC0xNjMuNSAtMTA5LjV0LTE5OC41IC00MC41aC02NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDY0cTEwNiAwIDE4MSA3NXQ3NSAxODF2MzJxMCA0MCAtMjggNjh0LTY4IDI4aC0yMjRxLTgwIDAgLTEzNiA1NnQtNTYgMTM2djM4NHEwIDgwIDU2IDEzNnQxMzYgNTZoMzg0cTgwIDAgMTM2IC01NnQ1NiAtMTM2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTEwOyIgaG9yaXotYWR2LXg9IjE1NjgiIGQ9Ik00OTYgMTkycTAgLTYwIC00Mi41IC0xMDJ0LTEwMS41IC00MnEtNjAgMCAtMTAyIDQydC00MiAxMDJ0NDIgMTAydDEwMiA0MnE1OSAwIDEwMS41IC00MnQ0Mi41IC0xMDJ6TTkyOCAwcTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41dC05MC41IDM3LjV0LTM3LjUgOTAuNXQzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNMzIwIDY0MHEwIC02NiAtNDcgLTExM3QtMTEzIC00N3QtMTEzIDQ3dC00NyAxMTMgdDQ3IDExM3QxMTMgNDd0MTEzIC00N3Q0NyAtMTEzek0xMzYwIDE5MnEwIC00NiAtMzMgLTc5dC03OSAtMzN0LTc5IDMzdC0zMyA3OXQzMyA3OXQ3OSAzM3Q3OSAtMzN0MzMgLTc5ek01MjggMTA4OHEwIC03MyAtNTEuNSAtMTI0LjV0LTEyNC41IC01MS41dC0xMjQuNSA1MS41dC01MS41IDEyNC41dDUxLjUgMTI0LjV0MTI0LjUgNTEuNXQxMjQuNSAtNTEuNXQ1MS41IC0xMjQuNXpNOTkyIDEyODBxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTYgdC0xMzYgNTZ0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnpNMTUzNiA2NDBxMCAtNDAgLTI4IC02OHQtNjggLTI4dC02OCAyOHQtMjggNjh0MjggNjh0NjggMjh0NjggLTI4dDI4IC02OHpNMTMyOCAxMDg4cTAgLTMzIC0yMy41IC01Ni41dC01Ni41IC0yMy41dC01Ni41IDIzLjV0LTIzLjUgNTYuNXQyMy41IDU2LjV0NTYuNSAyMy41dDU2LjUgLTIzLjV0MjMuNSAtNTYuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjExMTsiIGQ9Ik0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjExMjsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc5MiA0MTZxMCAtMTY2IC0xMjcgLTQ1MXEtMyAtNyAtMTAuNSAtMjR0LTEzLjUgLTMwdC0xMyAtMjJxLTEyIC0xNyAtMjggLTE3cS0xNSAwIC0yMy41IDEwdC04LjUgMjVxMCA5IDIuNSAyNi41dDIuNSAyMy41cTUgNjggNSAxMjNxMCAxMDEgLTE3LjUgMTgxdC00OC41IDEzOC41dC04MCAxMDF0LTEwNS41IDY5LjV0LTEzMyA0Mi41dC0xNTQgMjEuNXQtMTc1LjUgNmgtMjI0di0yNTZxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOSBsLTUxMiA1MTJxLTE5IDE5IC0xOSA0NXQxOSA0NWw1MTIgNTEycTE5IDE5IDQ1IDE5dDQ1IC0xOXQxOSAtNDV2LTI1NmgyMjRxNzEzIDAgODc1IC00MDNxNTMgLTEzNCA1MyAtMzMzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTEzOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik02NDAgMzIwcTAgLTQwIC0xMi41IC04MnQtNDMgLTc2dC03Mi41IC0zNHQtNzIuNSAzNHQtNDMgNzZ0LTEyLjUgODJ0MTIuNSA4MnQ0MyA3NnQ3Mi41IDM0dDcyLjUgLTM0dDQzIC03NnQxMi41IC04MnpNMTI4MCAzMjBxMCAtNDAgLTEyLjUgLTgydC00MyAtNzZ0LTcyLjUgLTM0dC03Mi41IDM0dC00MyA3NnQtMTIuNSA4MnQxMi41IDgydDQzIDc2dDcyLjUgMzR0NzIuNSAtMzR0NDMgLTc2dDEyLjUgLTgyek0xNDQwIDMyMCBxMCAxMjAgLTY5IDIwNHQtMTg3IDg0cS00MSAwIC0xOTUgLTIxcS03MSAtMTEgLTE1NyAtMTF0LTE1NyAxMXEtMTUyIDIxIC0xOTUgMjFxLTExOCAwIC0xODcgLTg0dC02OSAtMjA0cTAgLTg4IDMyIC0xNTMuNXQ4MSAtMTAzdDEyMiAtNjB0MTQwIC0yOS41dDE0OSAtN2gxNjhxODIgMCAxNDkgN3QxNDAgMjkuNXQxMjIgNjB0ODEgMTAzdDMyIDE1My41ek0xNjY0IDQ5NnEwIC0yMDcgLTYxIC0zMzFxLTM4IC03NyAtMTA1LjUgLTEzM3QtMTQxIC04NiB0LTE3MCAtNDcuNXQtMTcxLjUgLTIydC0xNjcgLTQuNXEtNzggMCAtMTQyIDN0LTE0Ny41IDEyLjV0LTE1Mi41IDMwdC0xMzcgNTEuNXQtMTIxIDgxdC04NiAxMTVxLTYyIDEyMyAtNjIgMzMxcTAgMjM3IDEzNiAzOTZxLTI3IDgyIC0yNyAxNzBxMCAxMTYgNTEgMjE4cTEwOCAwIDE5MCAtMzkuNXQxODkgLTEyMy41cTE0NyAzNSAzMDkgMzVxMTQ4IDAgMjgwIC0zMnExMDUgODIgMTg3IDEyMXQxODkgMzlxNTEgLTEwMiA1MSAtMjE4IHEwIC04NyAtMjcgLTE2OHExMzYgLTE2MCAxMzYgLTM5OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjExNDsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTUzNiAyMjR2NzA0cTAgNDAgLTI4IDY4dC02OCAyOGgtNzA0cS00MCAwIC02OCAyOHQtMjggNjh2NjRxMCA0MCAtMjggNjh0LTY4IDI4aC0zMjBxLTQwIDAgLTY4IC0yOHQtMjggLTY4di05NjBxMCAtNDAgMjggLTY4dDY4IC0yOGgxMjE2cTQwIDAgNjggMjh0MjggNjh6TTE2NjQgOTI4di03MDRxMCAtOTIgLTY2IC0xNTh0LTE1OCAtNjZoLTEyMTZxLTkyIDAgLTE1OCA2NnQtNjYgMTU4djk2MHEwIDkyIDY2IDE1OHQxNTggNjZoMzIwIHE5MiAwIDE1OCAtNjZ0NjYgLTE1OHYtMzJoNjcycTkyIDAgMTU4IC02NnQ2NiAtMTU4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTE1OyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xNzgxIDYwNXEwIDM1IC01MyAzNWgtMTA4OHEtNDAgMCAtODUuNSAtMjEuNXQtNzEuNSAtNTIuNWwtMjk0IC0zNjNxLTE4IC0yNCAtMTggLTQwcTAgLTM1IDUzIC0zNWgxMDg4cTQwIDAgODYgMjJ0NzEgNTNsMjk0IDM2M3ExOCAyMiAxOCAzOXpNNjQwIDc2OGg3Njh2MTYwcTAgNDAgLTI4IDY4dC02OCAyOGgtNTc2cS00MCAwIC02OCAyOHQtMjggNjh2NjRxMCA0MCAtMjggNjh0LTY4IDI4aC0zMjBxLTQwIDAgLTY4IC0yOHQtMjggLTY4IHYtODUzbDI1NiAzMTVxNDQgNTMgMTE2IDg3LjV0MTQwIDM0LjV6TTE5MDkgNjA1cTAgLTYyIC00NiAtMTIwbC0yOTUgLTM2M3EtNDMgLTUzIC0xMTYgLTg3LjV0LTE0MCAtMzQuNWgtMTA4OHEtOTIgMCAtMTU4IDY2dC02NiAxNTh2OTYwcTAgOTIgNjYgMTU4dDE1OCA2NmgzMjBxOTIgMCAxNTggLTY2dDY2IC0xNTh2LTMyaDU0NHE5MiAwIDE1OCAtNjZ0NjYgLTE1OHYtMTYwaDE5MnE1NCAwIDk5IC0yNC41dDY3IC03MC41cTE1IC0zMiAxNSAtNjh6ICIgLz4KKzwvZm9udD4KKzwvZGVmcz48L3N2Zz4gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQudHRmIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQudHRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NjE3MjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC50dGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQud29mZiBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9mb250YXdlc29tZS13ZWJmb250LndvZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M4OWFlMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9mb250YXdlc29tZS13ZWJmb250LndvZmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIuZW90IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIuZW90Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyM2JkNWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci5lb3QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIuc3ZnIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIuc3ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0Njk0ODgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci5zdmcKQEAgLTAsMCArMSwyMjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgc3RhbmRhbG9uZT0ibm8iPz4KKzwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCIgPgorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgorPG1ldGFkYXRhPjwvbWV0YWRhdGE+Cis8ZGVmcz4KKzxmb250IGlkPSJnbHlwaGljb25zX2hhbGZsaW5nc3JlZ3VsYXIiIGhvcml6LWFkdi14PSIxMjAwIiA+Cis8Zm9udC1mYWNlIHVuaXRzLXBlci1lbT0iMTIwMCIgYXNjZW50PSI5NjAiIGRlc2NlbnQ9Ii0yNDAiIC8+Cis8bWlzc2luZy1nbHlwaCBob3Jpei1hZHYteD0iNTAwIiAvPgorPGdseXBoIC8+Cis8Z2x5cGggLz4KKzxnbHlwaCB1bmljb2RlPSImI3hkOyIgLz4KKzxnbHlwaCB1bmljb2RlPSIgIiAvPgorPGdseXBoIHVuaWNvZGU9IioiIGQ9Ik0xMDAgNTAwdjIwMGgyNTlsLTE4MyAxODNsMTQxIDE0MWwxODMgLTE4M3YyNTloMjAwdi0yNTlsMTgzIDE4M2wxNDEgLTE0MWwtMTgzIC0xODNoMjU5di0yMDBoLTI1OWwxODMgLTE4M2wtMTQxIC0xNDFsLTE4MyAxODN2LTI1OWgtMjAwdjI1OWwtMTgzIC0xODNsLTE0MSAxNDFsMTgzIDE4M2gtMjU5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSIrIiBkPSJNMCA0MDB2MzAwaDQwMHY0MDBoMzAwdi00MDBoNDAwdi0zMDBoLTQwMHYtNDAwaC0zMDB2NDAwaC00MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGEwOyIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDAwOyIgaG9yaXotYWR2LXg9IjY1MiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDAxOyIgaG9yaXotYWR2LXg9IjEzMDQiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjAwMjsiIGhvcml6LWFkdi14PSI2NTIiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjAwMzsiIGhvcml6LWFkdi14PSIxMzA0IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDQ7IiBob3Jpei1hZHYteD0iNDM0IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDU7IiBob3Jpei1hZHYteD0iMzI2IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDY7IiBob3Jpei1hZHYteD0iMjE3IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDc7IiBob3Jpei1hZHYteD0iMjE3IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDg7IiBob3Jpei1hZHYteD0iMTYzIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDk7IiBob3Jpei1hZHYteD0iMjYwIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMGE7IiBob3Jpei1hZHYteD0iNzIiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjAyZjsiIGhvcml6LWFkdi14PSIyNjAiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjA1ZjsiIGhvcml6LWFkdi14PSIzMjYiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjBhYzsiIGQ9Ik0xMDAgNTAwbDEwMCAxMDBoMTEzcTAgNDcgNSAxMDBoLTIxOGwxMDAgMTAwaDEzNXEzNyAxNjcgMTEyIDI1N3ExMTcgMTQxIDI5NyAxNDFxMjQyIDAgMzU0IC0xODlxNjAgLTEwMyA2NiAtMjA5aC0xODFxMCA1NSAtMjUuNSA5OXQtNjMuNSA2OHQtNzUgMzYuNXQtNjcgMTIuNXEtMjQgMCAtNTIuNSAtMTB0LTYyLjUgLTMydC02NS41IC02N3QtNTAuNSAtMTA3aDM3OWwtMTAwIC0xMDBoLTMwMHEtNiAtNDYgLTYgLTEwMGg0MDZsLTEwMCAtMTAwIGgtMzAwcTkgLTc0IDMzIC0xMzJ0NTIuNSAtOTF0NjIgLTU0LjV0NTkgLTI5dDQ2LjUgLTcuNXEyOSAwIDY2IDEzdDc1IDM3dDYzLjUgNjcuNXQyNS41IDk2LjVoMTc0cS0zMSAtMTcyIC0xMjggLTI3OHEtMTA3IC0xMTcgLTI3NCAtMTE3cS0yMDUgMCAtMzI0IDE1OHEtMzYgNDYgLTY5IDEzMS41dC00NSAyMDUuNWgtMjE3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMjEyOyIgZD0iTTIwMCA0MDBoOTAwdjMwMGgtOTAwdi0zMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDI2MDE7IiBkPSJNLTE0IDQ5NHEwIC04MCA1Ni41IC0xMzd0MTM1LjUgLTU3aDc1MHExMjAgMCAyMDUgODZ0ODUgMjA4cTAgMTIwIC04NSAyMDYuNXQtMjA1IDg2LjVxLTQ2IDAgLTkwIC0xNHEtNDQgOTcgLTEzNC41IDE1Ni41dC0yMDAuNSA1OS41cS0xNTIgMCAtMjYwIC0xMDcuNXQtMTA4IC0yNjAuNXEwIC0yNSAyIC0zN3EtNjYgLTE0IC0xMDguNSAtNjcuNXQtNDIuNSAtMTIyLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDI3MDk7IiBkPSJNMCAxMDBsNDAwIDQwMGwyMDAgLTIwMGwyMDAgMjAwbDQwMCAtNDAwaC0xMjAwek0wIDMwMHY2MDBsMzAwIC0zMDB6TTAgMTEwMGw2MDAgLTYwM2w2MDAgNjAzaC0xMjAwek05MDAgNjAwbDMwMCAzMDB2LTYwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjcwZjsiIGQ9Ik0tMTMgLTEzbDMzMyAxMTJsLTIyMyAyMjN6TTE4NyA0MDNsMjE0IC0yMTRsNjE0IDYxNGwtMjE0IDIxNHpNODg3IDExMDNsMjE0IC0yMTRsOTkgOTJxMTMgMTMgMTMgMzIuNXQtMTMgMzMuNWwtMTUzIDE1M3EtMTUgMTMgLTMzIDEzdC0zMyAtMTN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMDA7IiBob3Jpei1hZHYteD0iNTAwIiBkPSJNMCAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDAxOyIgZD0iTTAgMTIwMGgxMjAwbC01MDAgLTU1MHYtNTUwaDMwMHYtMTAwaC04MDB2MTAwaDMwMHY1NTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMDI7IiBkPSJNMTQgODRxMTggLTU1IDg2IC03NS41dDE0NyA1LjVxNjUgMjEgMTA5IDY5dDQ0IDkwdjYwNmw2MDAgMTU1di01MjFxLTY0IDE2IC0xMzggLTdxLTc5IC0yNiAtMTIyLjUgLTgzdC0yNS41IC0xMTFxMTcgLTU1IDg1LjUgLTc1LjV0MTQ3LjUgNC41cTcwIDIzIDExMS41IDYzLjV0NDEuNSA5NS41djg4MXEwIDEwIC03IDE1LjV0LTE3IDIuNWwtNzUyIC0xOTNxLTEwIC0zIC0xNyAtMTIuNXQtNyAtMTkuNXYtNjg5cS02NCAxNyAtMTM4IC03IHEtNzkgLTI1IC0xMjIuNSAtODJ0LTI1LjUgLTExMnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMzsiIGQ9Ik0yMyA2OTNxMCAyMDAgMTQyIDM0MnQzNDIgMTQydDM0MiAtMTQydDE0MiAtMzQycTAgLTE0MiAtNzggLTI2MWwzMDAgLTMwMHE3IC04IDcgLTE4dC03IC0xOGwtMTA5IC0xMDlxLTggLTcgLTE4IC03dC0xOCA3bC0zMDAgMzAwcS0xMTkgLTc4IC0yNjEgLTc4cS0yMDAgMCAtMzQyIDE0MnQtMTQyIDM0MnpNMTc2IDY5M3EwIC0xMzYgOTcgLTIzM3QyMzQgLTk3dDIzMy41IDk2LjV0OTYuNSAyMzMuNXQtOTYuNSAyMzMuNXQtMjMzLjUgOTYuNSB0LTIzNCAtOTd0LTk3IC0yMzN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMDU7IiBkPSJNMTAwIDc4NHEwIDY0IDI4IDEyM3Q3MyAxMDAuNXQxMDQuNSA2NHQxMTkgMjAuNXQxMjAgLTM4LjV0MTA0LjUgLTEwNC41cTQ4IDY5IDEwOS41IDEwNXQxMjEuNSAzOHQxMTguNSAtMjAuNXQxMDIuNSAtNjR0NzEgLTEwMC41dDI3IC0xMjNxMCAtNTcgLTMzLjUgLTExNy41dC05NCAtMTI0LjV0LTEyNi41IC0xMjcuNXQtMTUwIC0xNTIuNXQtMTQ2IC0xNzRxLTYyIDg1IC0xNDUuNSAxNzR0LTE0OS41IDE1Mi41dC0xMjYuNSAxMjcuNSB0LTk0IDEyNC41dC0zMy41IDExNy41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDA2OyIgZD0iTS03MiA4MDBoNDc5bDE0NiA0MDBoMmwxNDYgLTQwMGg0NzJsLTM4MiAtMjc4bDE0NSAtNDQ5bC0zODQgMjc1bC0zODIgLTI3NWwxNDYgNDQ3ek0xNjggNzFsMiAxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDA3OyIgZD0iTS03MiA4MDBoNDc5bDE0NiA0MDBoMmwxNDYgLTQwMGg0NzJsLTM4MiAtMjc4bDE0NSAtNDQ5bC0zODQgMjc1bC0zODIgLTI3NWwxNDYgNDQ3ek0xNjggNzFsMiAxek0yMzcgNzAwbDE5NiAtMTQybC03MyAtMjI2bDE5MiAxNDBsMTk1IC0xNDFsLTc0IDIyOWwxOTMgMTQwaC0yMzVsLTc3IDIxMWwtNzggLTIxMWgtMjM5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDA4OyIgZD0iTTAgMHYxNDNsNDAwIDI1N3YxMDBxLTM3IDAgLTY4LjUgNzQuNXQtMzEuNSAxMjUuNXYyMDBxMCAxMjQgODggMjEydDIxMiA4OHQyMTIgLTg4dDg4IC0yMTJ2LTIwMHEwIC01MSAtMzEuNSAtMTI1LjV0LTY4LjUgLTc0LjV2LTEwMGw0MDAgLTI1N3YtMTQzaC0xMjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDA5OyIgZD0iTTAgMHYxMTAwaDEyMDB2LTExMDBoLTEyMDB6TTEwMCAxMDBoMTAwdjEwMGgtMTAwdi0xMDB6TTEwMCAzMDBoMTAwdjEwMGgtMTAwdi0xMDB6TTEwMCA1MDBoMTAwdjEwMGgtMTAwdi0xMDB6TTEwMCA3MDBoMTAwdjEwMGgtMTAwdi0xMDB6TTEwMCA5MDBoMTAwdjEwMGgtMTAwdi0xMDB6TTMwMCAxMDBoNjAwdjQwMGgtNjAwdi00MDB6TTMwMCA2MDBoNjAwdjQwMGgtNjAwdi00MDB6TTEwMDAgMTAwaDEwMHYxMDBoLTEwMHYtMTAweiBNMTAwMCAzMDBoMTAwdjEwMGgtMTAwdi0xMDB6TTEwMDAgNTAwaDEwMHYxMDBoLTEwMHYtMTAwek0xMDAwIDcwMGgxMDB2MTAwaC0xMDB2LTEwMHpNMTAwMCA5MDBoMTAwdjEwMGgtMTAwdi0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMTA7IiBkPSJNMCA1MHY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek0wIDY1MHY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDAgcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNjAwIDUwdjQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTYwMCA2NTB2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMTE7IiBkPSJNMCA1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek0wIDQ1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDAgcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNMCA4NTB2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNDAwIDUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjUgdC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek00MDAgNDUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTQwMCA4NTB2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjUgdi0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTgwMCA1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek04MDAgNDUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjAwIHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek04MDAgODUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMTI7IiBkPSJNMCA1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek0wIDQ1MHEwIC0yMSAxNC41IC0zNS41dDM1LjUgLTE0LjVoMjAwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXYyMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTIwMHEtMjEgMCAtMzUuNSAtMTQuNSB0LTE0LjUgLTM1LjV2LTIwMHpNMCA4NTB2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNDAwIDUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNzAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjUgdC0zNS41IC0xNC41aC03MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek00MDAgNDUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNzAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTcwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTQwMCA4NTB2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjUgdi0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTcwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMTM7IiBkPSJNMjkgNDU0bDQxOSAtNDIwbDgxOCA4MjBsLTIxMiAyMTJsLTYwNyAtNjA3bC0yMDYgMjA3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDE0OyIgZD0iTTEwNiAzMThsMjgyIDI4MmwtMjgyIDI4MmwyMTIgMjEybDI4MiAtMjgybDI4MiAyODJsMjEyIC0yMTJsLTI4MiAtMjgybDI4MiAtMjgybC0yMTIgLTIxMmwtMjgyIDI4MmwtMjgyIC0yODJ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMTU7IiBkPSJNMjMgNjkzcTAgMjAwIDE0MiAzNDJ0MzQyIDE0MnQzNDIgLTE0MnQxNDIgLTM0MnEwIC0xNDIgLTc4IC0yNjFsMzAwIC0zMDBxNyAtOCA3IC0xOHQtNyAtMThsLTEwOSAtMTA5cS04IC03IC0xOCAtN3QtMTggN2wtMzAwIDMwMHEtMTE5IC03OCAtMjYxIC03OHEtMjAwIDAgLTM0MiAxNDJ0LTE0MiAzNDJ6TTE3NiA2OTNxMCAtMTM2IDk3IC0yMzN0MjM0IC05N3QyMzMuNSA5Ni41dDk2LjUgMjMzLjV0LTk2LjUgMjMzLjV0LTIzMy41IDk2LjUgdC0yMzQgLTk3dC05NyAtMjMzek0zMDAgNjAwdjIwMGgxMDB2MTAwaDIwMHYtMTAwaDEwMHYtMjAwaC0xMDB2LTEwMGgtMjAwdjEwMGgtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDE2OyIgZD0iTTIzIDY5NHEwIDIwMCAxNDIgMzQydDM0MiAxNDJ0MzQyIC0xNDJ0MTQyIC0zNDJxMCAtMTQxIC03OCAtMjYybDMwMCAtMjk5cTcgLTcgNyAtMTh0LTcgLTE4bC0xMDkgLTEwOXEtOCAtOCAtMTggLTh0LTE4IDhsLTMwMCAyOTlxLTEyMCAtNzcgLTI2MSAtNzdxLTIwMCAwIC0zNDIgMTQydC0xNDIgMzQyek0xNzYgNjk0cTAgLTEzNiA5NyAtMjMzdDIzNCAtOTd0MjMzLjUgOTd0OTYuNSAyMzN0LTk2LjUgMjMzdC0yMzMuNSA5N3QtMjM0IC05NyB0LTk3IC0yMzN6TTMwMCA2MDFoNDAwdjIwMGgtNDAwdi0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMTc7IiBkPSJNMjMgNjAwcTAgMTgzIDEwNSAzMzF0MjcyIDIxMHYtMTY2cS0xMDMgLTU1IC0xNjUgLTE1NXQtNjIgLTIyMHEwIC0xNzcgMTI1IC0zMDJ0MzAyIC0xMjV0MzAyIDEyNXQxMjUgMzAycTAgMTIwIC02MiAyMjB0LTE2NSAxNTV2MTY2cTE2NyAtNjIgMjcyIC0yMTB0MTA1IC0zMzFxMCAtMTE4IC00NS41IC0yMjQuNXQtMTIzIC0xODR0LTE4NCAtMTIzdC0yMjQuNSAtNDUuNXQtMjI0LjUgNDUuNXQtMTg0IDEyM3QtMTIzIDE4NHQtNDUuNSAyMjQuNSB6TTUwMCA3NTBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41aDEwMHEyMSAwIDM1LjUgMTQuNXQxNC41IDM1LjV2NDAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC0xMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTQwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAxODsiIGQ9Ik0xMDAgMWgyMDB2MzAwaC0yMDB2LTMwMHpNNDAwIDF2NTAwaDIwMHYtNTAwaC0yMDB6TTcwMCAxdjgwMGgyMDB2LTgwMGgtMjAwek0xMDAwIDF2MTIwMGgyMDB2LTEyMDBoLTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAxOTsiIGQ9Ik0yNiA2MDFxMCAtMzMgNiAtNzRsMTUxIC0zOGwyIC02cTE0IC00OSAzOCAtOTNsMyAtNWwtODAgLTEzNHE0NSAtNTkgMTA1IC0xMDVsMTMzIDgxbDUgLTNxNDUgLTI2IDk0IC0zOWw1IC0ybDM4IC0xNTFxNDAgLTUgNzQgLTVxMjcgMCA3NCA1bDM4IDE1MWw2IDJxNDYgMTMgOTMgMzlsNSAzbDEzNCAtODFxNTYgNDQgMTA0IDEwNWwtODAgMTM0bDMgNXEyNCA0NCAzOSA5M2wxIDZsMTUyIDM4cTUgNDAgNSA3NHEwIDI4IC01IDczbC0xNTIgMzggbC0xIDZxLTE2IDUxIC0zOSA5M2wtMyA1bDgwIDEzNHEtNDQgNTggLTEwNCAxMDVsLTEzNCAtODFsLTUgM3EtNDUgMjUgLTkzIDM5bC02IDFsLTM4IDE1MnEtNDAgNSAtNzQgNXEtMjcgMCAtNzQgLTVsLTM4IC0xNTJsLTUgLTFxLTUwIC0xNCAtOTQgLTM5bC01IC0zbC0xMzMgODFxLTU5IC00NyAtMTA1IC0xMDVsODAgLTEzNGwtMyAtNXEtMjUgLTQ3IC0zOCAtOTNsLTIgLTZsLTE1MSAtMzhxLTYgLTQ4IC02IC03M3pNMzg1IDYwMSBxMCA4OCA2MyAxNTF0MTUyIDYzdDE1MiAtNjN0NjMgLTE1MXEwIC04OSAtNjMgLTE1MnQtMTUyIC02M3QtMTUyIDYzdC02MyAxNTJ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMjA7IiBkPSJNMTAwIDEwMjV2NTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgyNzV2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgzMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMGgyNzVxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di01MHEwIC0xMSAtNyAtMTh0LTE4IC03aC0xMDUwcS0xMSAwIC0xOCA3dC03IDE4ek0yMDAgMTAwdjgwMGg5MDB2LTgwMHEwIC00MSAtMjkuNSAtNzF0LTcwLjUgLTMwaC03MDBxLTQxIDAgLTcwLjUgMzAgdC0yOS41IDcxek0zMDAgMTAwaDEwMHY3MDBoLTEwMHYtNzAwek01MDAgMTAwaDEwMHY3MDBoLTEwMHYtNzAwek01MDAgMTEwMGgzMDB2MTAwaC0zMDB2LTEwMHpNNzAwIDEwMGgxMDB2NzAwaC0xMDB2LTcwMHpNOTAwIDEwMGgxMDB2NzAwaC0xMDB2LTcwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAyMTsiIGQ9Ik0xIDYwMWw2NTYgNjQ0bDY0NCAtNjQ0aC0yMDB2LTYwMGgtMzAwdjQwMGgtMzAwdi00MDBoLTMwMHY2MDBoLTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAyMjsiIGQ9Ik0xMDAgMjV2MTE1MHEwIDExIDcgMTh0MTggN2g0NzV2LTUwMGg0MDB2LTY3NXEwIC0xMSAtNyAtMTh0LTE4IC03aC04NTBxLTExIDAgLTE4IDd0LTcgMTh6TTcwMCA4MDB2MzAwbDMwMCAtMzAwaC0zMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMjM7IiBkPSJNNCA2MDBxMCAxNjIgODAgMjk5dDIxNyAyMTd0Mjk5IDgwdDI5OSAtODB0MjE3IC0yMTd0ODAgLTI5OXQtODAgLTI5OXQtMjE3IC0yMTd0LTI5OSAtODB0LTI5OSA4MHQtMjE3IDIxN3QtODAgMjk5ek0xODYgNjAwcTAgLTE3MSAxMjEuNSAtMjkyLjV0MjkyLjUgLTEyMS41dDI5Mi41IDEyMS41dDEyMS41IDI5Mi41dC0xMjEuNSAyOTIuNXQtMjkyLjUgMTIxLjV0LTI5Mi41IC0xMjEuNXQtMTIxLjUgLTI5Mi41ek01MDAgNTAwdjQwMGgxMDAgdi0zMDBoMjAwdi0xMDBoLTMwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAyNDsiIGQ9Ik0tMTAwIDBsNDMxIDEyMDBoMjA5bC0yMSAtMzAwaDE2MmwtMjAgMzAwaDIwOGw0MzEgLTEyMDBoLTUzOGwtNDEgNDAwaC0yNDJsLTQwIC00MDBoLTUzOXpNNDg4IDUwMGgyMjRsLTI3IDMwMGgtMTcweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDI1OyIgZD0iTTAgMHY0MDBoNDkwbC0yOTAgMzAwaDIwMHY1MDBoMzAwdi01MDBoMjAwbC0yOTAgLTMwMGg0OTB2LTQwMGgtMTEwMHpNODEzIDIwMGgxNzV2MTAwaC0xNzV2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAyNjsiIGQ9Ik0xIDYwMHEwIDEyMiA0Ny41IDIzM3QxMjcuNSAxOTF0MTkxIDEyNy41dDIzMyA0Ny41dDIzMyAtNDcuNXQxOTEgLTEyNy41dDEyNy41IC0xOTF0NDcuNSAtMjMzdC00Ny41IC0yMzN0LTEyNy41IC0xOTF0LTE5MSAtMTI3LjV0LTIzMyAtNDcuNXQtMjMzIDQ3LjV0LTE5MSAxMjcuNXQtMTI3LjUgMTkxdC00Ny41IDIzM3pNMTg4IDYwMHEwIC0xNzAgMTIxIC0yOTF0MjkxIC0xMjF0MjkxIDEyMXQxMjEgMjkxdC0xMjEgMjkxdC0yOTEgMTIxIHQtMjkxIC0xMjF0LTEyMSAtMjkxek0zNTAgNjAwaDE1MHYzMDBoMjAwdi0zMDBoMTUwbC0yNTAgLTMwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAyNzsiIGQ9Ik00IDYwMHEwIDE2MiA4MCAyOTl0MjE3IDIxN3QyOTkgODB0Mjk5IC04MHQyMTcgLTIxN3Q4MCAtMjk5dC04MCAtMjk5dC0yMTcgLTIxN3QtMjk5IC04MHQtMjk5IDgwdC0yMTcgMjE3dC04MCAyOTl6TTE4NiA2MDBxMCAtMTcxIDEyMS41IC0yOTIuNXQyOTIuNSAtMTIxLjV0MjkyLjUgMTIxLjV0MTIxLjUgMjkyLjV0LTEyMS41IDI5Mi41dC0yOTIuNSAxMjEuNXQtMjkyLjUgLTEyMS41dC0xMjEuNSAtMjkyLjV6TTM1MCA2MDBsMjUwIDMwMCBsMjUwIC0zMDBoLTE1MHYtMzAwaC0yMDB2MzAwaC0xNTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMjg7IiBkPSJNMCAyNXY0NzVsMjAwIDcwMGg4MDBxMTk5IC03MDAgMjAwIC03MDB2LTQ3NXEwIC0xMSAtNyAtMTh0LTE4IC03aC0xMTUwcS0xMSAwIC0xOCA3dC03IDE4ek0yMDAgNTAwaDIwMGw1MCAtMjAwaDMwMGw1MCAyMDBoMjAwbC05NyA1MDBoLTYwNnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAyOTsiIGQ9Ik00IDYwMHEwIDE2MiA4MCAyOTl0MjE3IDIxN3QyOTkgODB0Mjk5IC04MHQyMTcgLTIxN3Q4MCAtMjk5dC04MCAtMjk5dC0yMTcgLTIxN3QtMjk5IC04MHQtMjk5IDgwdC0yMTcgMjE3dC04MCAyOTl6TTE4NiA2MDBxMCAtMTcyIDEyMS41IC0yOTN0MjkyLjUgLTEyMXQyOTIuNSAxMjF0MTIxLjUgMjkzcTAgMTcxIC0xMjEuNSAyOTIuNXQtMjkyLjUgMTIxLjV0LTI5Mi41IC0xMjEuNXQtMTIxLjUgLTI5Mi41ek01MDAgMzk3djQwMSBsMjk3IC0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMzA7IiBkPSJNMjMgNjAwcTAgLTExOCA0NS41IC0yMjQuNXQxMjMgLTE4NHQxODQgLTEyM3QyMjQuNSAtNDUuNXQyMjQuNSA0NS41dDE4NCAxMjN0MTIzIDE4NHQ0NS41IDIyNC41aC0xNTBxMCAtMTc3IC0xMjUgLTMwMnQtMzAyIC0xMjV0LTMwMiAxMjV0LTEyNSAzMDJ0MTI1IDMwMnQzMDIgMTI1cTEzNiAwIDI0NiAtODFsLTE0NiAtMTQ2aDQwMHY0MDBsLTE0NSAtMTQ1cS0xNTcgMTIyIC0zNTUgMTIycS0xMTggMCAtMjI0LjUgLTQ1LjV0LTE4NCAtMTIzIHQtMTIzIC0xODR0LTQ1LjUgLTIyNC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDMxOyIgZD0iTTIzIDYwMHEwIDExOCA0NS41IDIyNC41dDEyMyAxODR0MTg0IDEyM3QyMjQuNSA0NS41cTE5OCAwIDM1NSAtMTIybDE0NSAxNDV2LTQwMGgtNDAwbDE0NyAxNDdxLTExMiA4MCAtMjQ3IDgwcS0xNzcgMCAtMzAyIC0xMjV0LTEyNSAtMzAyaC0xNTB6TTEwMCAwdjQwMGg0MDBsLTE0NyAtMTQ3cTExMiAtODAgMjQ3IC04MHExNzcgMCAzMDIgMTI1dDEyNSAzMDJoMTUwcTAgLTExOCAtNDUuNSAtMjI0LjV0LTEyMyAtMTg0dC0xODQgLTEyMyB0LTIyNC41IC00NS41cS0xOTggMCAtMzU1IDEyMnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAzMjsiIGQ9Ik0xMDAgMGgxMTAwdjEyMDBoLTExMDB2LTEyMDB6TTIwMCAxMDB2OTAwaDkwMHYtOTAwaC05MDB6TTMwMCAyMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTMwMCA0MDB2MTAwaDEwMHYtMTAwaC0xMDB6TTMwMCA2MDB2MTAwaDEwMHYtMTAwaC0xMDB6TTMwMCA4MDB2MTAwaDEwMHYtMTAwaC0xMDB6TTUwMCAyMDBoNTAwdjEwMGgtNTAwdi0xMDB6TTUwMCA0MDB2MTAwaDUwMHYtMTAwaC01MDB6TTUwMCA2MDB2MTAwaDUwMHYtMTAwaC01MDB6IE01MDAgODAwdjEwMGg1MDB2LTEwMGgtNTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDMzOyIgZD0iTTAgMTAwdjYwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTAwdjIwMHEwIDgyIDU5IDE0MXQxNDEgNTloMzAwcTgyIDAgMTQxIC01OXQ1OSAtMTQxdi0yMDBoMTAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di02MDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTkwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV6TTQwMCA4MDBoMzAwdjE1MHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMjAwIHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTUweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDM0OyIgZD0iTTEwMCAwdjExMDBoMTAwdi0xMTAwaC0xMDB6TTMwMCA0MDBxNjAgNjAgMTI3LjUgODR0MTI3LjUgMTcuNXQxMjIgLTIzdDExOSAtMzB0MTEwIC0xMXQxMDMgNDJ0OTEgMTIwLjV2NTAwcS00MCAtODEgLTEwMS41IC0xMTUuNXQtMTI3LjUgLTI5LjV0LTEzOCAyNXQtMTM5LjUgNDB0LTEyNS41IDI1dC0xMDMgLTI5LjV0LTY1IC0xMTUuNXYtNTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDM1OyIgZD0iTTAgMjc1cTAgLTExIDcgLTE4dDE4IC03aDUwcTExIDAgMTggN3Q3IDE4djMwMHEwIDEyNyA3MC41IDIzMS41dDE4NC41IDE2MS41dDI0NSA1N3QyNDUgLTU3dDE4NC41IC0xNjEuNXQ3MC41IC0yMzEuNXYtMzAwcTAgLTExIDcgLTE4dDE4IC03aDUwcTExIDAgMTggN3Q3IDE4djMwMHEwIDExNiAtNDkuNSAyMjd0LTEzMSAxOTIuNXQtMTkyLjUgMTMxdC0yMjcgNDkuNXQtMjI3IC00OS41dC0xOTIuNSAtMTMxdC0xMzEgLTE5Mi41IHQtNDkuNSAtMjI3di0zMDB6TTIwMCAyMHY0NjBxMCA4IDYgMTR0MTQgNmgxNjBxOCAwIDE0IC02dDYgLTE0di00NjBxMCAtOCAtNiAtMTR0LTE0IC02aC0xNjBxLTggMCAtMTQgNnQtNiAxNHpNODAwIDIwdjQ2MHEwIDggNiAxNHQxNCA2aDE2MHE4IDAgMTQgLTZ0NiAtMTR2LTQ2MHEwIC04IC02IC0xNHQtMTQgLTZoLTE2MHEtOCAwIC0xNCA2dC02IDE0eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDM2OyIgZD0iTTAgNDAwaDMwMGwzMDAgLTIwMHY4MDBsLTMwMCAtMjAwaC0zMDB2LTQwMHpNNjg4IDQ1OWwxNDEgMTQxbC0xNDEgMTQxbDcxIDcxbDE0MSAtMTQxbDE0MSAxNDFsNzEgLTcxbC0xNDEgLTE0MWwxNDEgLTE0MWwtNzEgLTcxbC0xNDEgMTQxbC0xNDEgLTE0MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAzNzsiIGQ9Ik0wIDQwMGgzMDBsMzAwIC0yMDB2ODAwbC0zMDAgLTIwMGgtMzAwdi00MDB6TTcwMCA4NTdsNjkgNTNxMTExIC0xMzUgMTExIC0zMTBxMCAtMTY5IC0xMDYgLTMwMmwtNjcgNTRxODYgMTEwIDg2IDI0OHEwIDE0NiAtOTMgMjU3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDM4OyIgZD0iTTAgNDAxdjQwMGgzMDBsMzAwIDIwMHYtODAwbC0zMDAgMjAwaC0zMDB6TTcwMiA4NThsNjkgNTNxMTExIC0xMzUgMTExIC0zMTBxMCAtMTcwIC0xMDYgLTMwM2wtNjcgNTVxODYgMTEwIDg2IDI0OHEwIDE0NSAtOTMgMjU3ek04ODkgOTUxbDcgLThxMTIzIC0xNTEgMTIzIC0zNDRxMCAtMTg5IC0xMTkgLTMzOWwtNyAtOGw4MSAtNjZsNiA4cTE0MiAxNzggMTQyIDQwNXEwIDIzMCAtMTQ0IDQwOGwtNiA4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDM5OyIgZD0iTTAgMGg1MDB2NTAwaC0yMDB2MTAwaC0xMDB2LTEwMGgtMjAwdi01MDB6TTAgNjAwaDEwMHYxMDBoNDAwdjEwMGgxMDB2MTAwaC0xMDB2MzAwaC01MDB2LTYwMHpNMTAwIDEwMHYzMDBoMzAwdi0zMDBoLTMwMHpNMTAwIDgwMHYzMDBoMzAwdi0zMDBoLTMwMHpNMjAwIDIwMHYxMDBoMTAwdi0xMDBoLTEwMHpNMjAwIDkwMGgxMDB2MTAwaC0xMDB2LTEwMHpNNTAwIDUwMHYxMDBoMzAwdi0zMDBoMjAwdi0xMDBoLTEwMHYtMTAwaC0yMDB2MTAwIGgtMTAwdjEwMGgxMDB2MjAwaC0yMDB6TTYwMCAwdjEwMGgxMDB2LTEwMGgtMTAwek02MDAgMTAwMGgxMDB2LTMwMGgyMDB2LTMwMGgzMDB2MjAwaC0yMDB2MTAwaDIwMHY1MDBoLTYwMHYtMjAwek04MDAgODAwdjMwMGgzMDB2LTMwMGgtMzAwek05MDAgMHYxMDBoMzAwdi0xMDBoLTMwMHpNOTAwIDkwMHYxMDBoMTAwdi0xMDBoLTEwMHpNMTEwMCAyMDB2MTAwaDEwMHYtMTAwaC0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNDA7IiBkPSJNMCAyMDBoMTAwdjEwMDBoLTEwMHYtMTAwMHpNMTAwIDB2MTAwaDMwMHYtMTAwaC0zMDB6TTIwMCAyMDB2MTAwMGgxMDB2LTEwMDBoLTEwMHpNNTAwIDB2OTFoMTAwdi05MWgtMTAwek01MDAgMjAwdjEwMDBoMjAwdi0xMDAwaC0yMDB6TTcwMCAwdjkxaDEwMHYtOTFoLTEwMHpNODAwIDIwMHYxMDAwaDEwMHYtMTAwMGgtMTAwek05MDAgMHY5MWgyMDB2LTkxaC0yMDB6TTEwMDAgMjAwdjEwMDBoMjAwdi0xMDAwaC0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNDE7IiBkPSJNMSA3MDB2NDc1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNDc0bDcwMCAtNzAwbC01MDAgLTUwMHpNMTQ4IDk1M3EwIC00MiAyOSAtNzFxMzAgLTMwIDcxLjUgLTMwdDcxLjUgMzBxMjkgMjkgMjkgNzF0LTI5IDcxcS0zMCAzMCAtNzEuNSAzMHQtNzEuNSAtMzBxLTI5IC0yOSAtMjkgLTcxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDQyOyIgZD0iTTIgNzAwdjQ3NXEwIDExIDcgMTh0MTggN2g0NzRsNzAwIC03MDBsLTUwMCAtNTAwek0xNDggOTUzcTAgLTQyIDMwIC03MXEyOSAtMzAgNzEgLTMwdDcxIDMwcTMwIDI5IDMwIDcxdC0zMCA3MXEtMjkgMzAgLTcxIDMwdC03MSAtMzBxLTMwIC0yOSAtMzAgLTcxek03MDEgMTIwMGgxMDBsNzAwIC03MDBsLTUwMCAtNTAwbC01MCA1MGw0NTAgNDUweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDQzOyIgZD0iTTEwMCAwdjEwMjVsMTc1IDE3NWg5MjV2LTEwMDBsLTEwMCAtMTAwdjEwMDBoLTc1MGwtMTAwIC0xMDBoNzUwdi0xMDAwaC05MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNDQ7IiBkPSJNMjAwIDBsNDUwIDQ0NGw0NTAgLTQ0M3YxMTUwcTAgMjAgLTE0LjUgMzV0LTM1LjUgMTVoLTgwMHEtMjEgMCAtMzUuNSAtMTV0LTE0LjUgLTM1di0xMTUxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDQ1OyIgZD0iTTAgMTAwdjcwMGgyMDBsMTAwIC0yMDBoNjAwbDEwMCAyMDBoMjAwdi03MDBoLTIwMHYyMDBoLTgwMHYtMjAwaC0yMDB6TTI1MyA4MjlsNDAgLTEyNGg1OTJsNjIgMTI0bC05NCAzNDZxLTIgMTEgLTEwIDE4dC0xOCA3aC00NTBxLTEwIDAgLTE4IC03dC0xMCAtMTh6TTI4MSAyNGwzOCAxNTJxMiAxMCAxMS41IDE3dDE5LjUgN2g1MDBxMTAgMCAxOS41IC03dDExLjUgLTE3bDM4IC0xNTJxMiAtMTAgLTMuNSAtMTd0LTE1LjUgLTdoLTYwMCBxLTEwIDAgLTE1LjUgN3QtMy41IDE3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDQ2OyIgZD0iTTAgMjAwcTAgLTQxIDI5LjUgLTcwLjV0NzAuNSAtMjkuNWgxMDAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY2MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjVoLTE1MHEtNCA4IC0xMS41IDIxLjV0LTMzIDQ4dC01MyA2MXQtNjkgNDh0LTgzLjUgMjEuNWgtMjAwcS00MSAwIC04MiAtMjAuNXQtNzAgLTUwdC01MiAtNTl0LTM0IC01MC41bC0xMiAtMjBoLTE1MHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNjAweiBNMzU2IDUwMHEwIDEwMCA3MiAxNzJ0MTcyIDcydDE3MiAtNzJ0NzIgLTE3MnQtNzIgLTE3MnQtMTcyIC03MnQtMTcyIDcydC03MiAxNzJ6TTQ5NCA1MDBxMCAtNDQgMzEgLTc1dDc1IC0zMXQ3NSAzMXQzMSA3NXQtMzEgNzV0LTc1IDMxdC03NSAtMzF0LTMxIC03NXpNOTAwIDcwMHYxMDBoMTAwdi0xMDBoLTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA0NzsiIGQ9Ik01MyAwaDM2NXY2NnEtNDEgMCAtNzIgMTF0LTQ5IDM4dDEgNzFsOTIgMjM0aDM5MWw4MiAtMjIycTE2IC00NSAtNS41IC04OC41dC03NC41IC00My41di02Nmg0MTd2NjZxLTM0IDEgLTc0IDQzcS0xOCAxOSAtMzMgNDJ0LTIxIDM3bC02IDEzbC0zODUgOTk4aC05M2wtMzk5IC0xMDA2cS0yNCAtNDggLTUyIC03NXEtMTIgLTEyIC0zMyAtMjV0LTM2IC0yMGwtMTUgLTd2LTY2ek00MTYgNTIxbDE3OCA0NTdsNDYgLTE0MGwxMTYgLTMxN2gtMzQwIHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA0ODsiIGQ9Ik0xMDAgMHY4OXE0MSA3IDcwLjUgMzIuNXQyOS41IDY1LjV2ODI3cTAgMjggLTEgMzkuNXQtNS41IDI2dC0xNS41IDIxdC0yOSAxNHQtNDkgMTQuNXY3MGg0NzFxMTIwIDAgMjEzIC04OHQ5MyAtMjI4cTAgLTU1IC0xMS41IC0xMDEuNXQtMjggLTc0dC0zMy41IC00Ny41dC0yOCAtMjhsLTEyIC03cTggLTMgMjEuNSAtOXQ0OCAtMzEuNXQ2MC41IC01OHQ0Ny41IC05MS41dDIxLjUgLTEyOXEwIC04NCAtNTkgLTE1Ni41dC0xNDIgLTExMSB0LTE2MiAtMzguNWgtNTAwek00MDAgMjAwaDE2MXE4OSAwIDE1MyA0OC41dDY0IDEzMi41cTAgOTAgLTYyLjUgMTU0LjV0LTE1Ni41IDY0LjVoLTE1OXYtNDAwek00MDAgNzAwaDEzOXE3NiAwIDEzMCA2MS41dDU0IDEzOC41cTAgODIgLTg0IDEzMC41dC0yMzkgNDguNXYtMzc5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDQ5OyIgZD0iTTIwMCAwdjU3cTc3IDcgMTM0LjUgNDAuNXQ2NS41IDgwLjVsMTczIDg0OXExMCA1NiAtMTAgNzR0LTkxIDM3cS02IDEgLTEwLjUgMi41dC05LjUgMi41djU3aDQyNWwyIC01N3EtMzMgLTggLTYyIC0yNS41dC00NiAtMzd0LTI5LjUgLTM4dC0xNy41IC0zMC41bC01IC0xMmwtMTI4IC04MjVxLTEwIC01MiAxNCAtODJ0OTUgLTM2di01N2gtNTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDUwOyIgZD0iTS03NSAyMDBoNzV2ODAwaC03NWwxMjUgMTY3bDEyNSAtMTY3aC03NXYtODAwaDc1bC0xMjUgLTE2N3pNMzAwIDkwMHYzMDBoMTUwaDcwMGgxNTB2LTMwMGgtNTBxMCAyOSAtOCA0OC41dC0xOC41IDMwdC0zMy41IDE1dC0zOS41IDUuNXQtNTAuNSAxaC0yMDB2LTg1MGwxMDAgLTUwdi0xMDBoLTQwMHYxMDBsMTAwIDUwdjg1MGgtMjAwcS0zNCAwIC01MC41IC0xdC00MCAtNS41dC0zMy41IC0xNXQtMTguNSAtMzB0LTguNSAtNDguNWgtNDl6ICIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDUxOyIgZD0iTTMzIDUxbDE2NyAxMjV2LTc1aDgwMHY3NWwxNjcgLTEyNWwtMTY3IC0xMjV2NzVoLTgwMHYtNzV6TTEwMCA5MDF2MzAwaDE1MGg3MDBoMTUwdi0zMDBoLTUwcTAgMjkgLTggNDguNXQtMTggMzB0LTMzLjUgMTV0LTQwIDUuNXQtNTAuNSAxaC0yMDB2LTY1MGwxMDAgLTUwdi0xMDBoLTQwMHYxMDBsMTAwIDUwdjY1MGgtMjAwcS0zNCAwIC01MC41IC0xdC0zOS41IC01LjV0LTMzLjUgLTE1dC0xOC41IC0zMHQtOCAtNDguNWgtNTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNTI7IiBkPSJNMCA1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgxMTAwcTIxIDAgMzUuNSAxNXQxNC41IDM1djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMTEwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwek0wIDM1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWg4MDBxMjEgMCAzNS41IDE1dDE0LjUgMzV2MTAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC04MDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjUgdi0xMDB6TTAgNjUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDEwMDBxMjEgMCAzNS41IDE1dDE0LjUgMzV2MTAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC0xMDAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDB6TTAgOTUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDYwMHEyMSAwIDM1LjUgMTV0MTQuNSAzNXYxMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTYwMHEtMjEgMCAtMzUuNSAtMTQuNSB0LTE0LjUgLTM1LjV2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MzsiIGQ9Ik0wIDUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDExMDBxMjEgMCAzNS41IDE1dDE0LjUgMzV2MTAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC0xMTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDB6TTAgNjUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDExMDBxMjEgMCAzNS41IDE1dDE0LjUgMzV2MTAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC0xMTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41IHYtMTAwek0yMDAgMzUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDcwMHEyMSAwIDM1LjUgMTV0MTQuNSAzNXYxMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTcwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwek0yMDAgOTUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDcwMHEyMSAwIDM1LjUgMTV0MTQuNSAzNXYxMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTcwMHEtMjEgMCAtMzUuNSAtMTQuNSB0LTE0LjUgLTM1LjV2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA1NDsiIGQ9Ik0wIDUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTExMDBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6TTEwMCA2NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtMTAwMHEtMjEgMCAtMzUuNSAxNSB0LTE0LjUgMzV6TTMwMCAzNTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg4MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1aC04MDBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6TTUwMCA5NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg2MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1aC02MDAgcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDU1OyIgZD0iTTAgNTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtMTEwMHEtMjEgMCAtMzUuNSAxNXQtMTQuNSAzNXpNMCAzNTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtMTEwMHEtMjEgMCAtMzUuNSAxNSB0LTE0LjUgMzV6TTAgNjUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTExMDBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6TTAgOTUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTExMDAgcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDU2OyIgZD0iTTAgNTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1aC0xMDBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6TTAgMzUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtMTAwcS0yMSAwIC0zNS41IDE1IHQtMTQuNSAzNXpNMCA2NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1aC0xMDBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6TTAgOTUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtMTAwcS0yMSAwIC0zNS41IDE1IHQtMTQuNSAzNXpNMzAwIDUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtODAwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1ek0zMDAgMzUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtODAwIHEtMjEgMCAtMzUuNSAxNXQtMTQuNSAzNXpNMzAwIDY1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTgwMHEtMjEgMCAtMzUuNSAxNXQtMTQuNSAzNXpNMzAwIDk1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTUgaC04MDBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNTc7IiBkPSJNLTEwMSA1MDB2MTAwaDIwMXY3NWwxNjYgLTEyNWwtMTY2IC0xMjV2NzVoLTIwMXpNMzAwIDBoMTAwdjExMDBoLTEwMHYtMTEwMHpNNTAwIDUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDYwMHEyMCAwIDM1IDE1dDE1IDM1djEwMHEwIDIxIC0xNSAzNS41dC0zNSAxNC41aC02MDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTEwMHpNNTAwIDM1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgzMDBxMjAgMCAzNSAxNXQxNSAzNSB2MTAwcTAgMjEgLTE1IDM1LjV0LTM1IDE0LjVoLTMwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwek01MDAgNjUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDUwMHEyMCAwIDM1IDE1dDE1IDM1djEwMHEwIDIxIC0xNSAzNS41dC0zNSAxNC41aC01MDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTEwMHpNNTAwIDk1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgxMDBxMjAgMCAzNSAxNXQxNSAzNXYxMDAgcTAgMjEgLTE1IDM1LjV0LTM1IDE0LjVoLTEwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDU4OyIgZD0iTTEgNTBxMCAtMjAgMTQuNSAtMzV0MzUuNSAtMTVoNjAwcTIwIDAgMzUgMTV0MTUgMzV2MTAwcTAgMjEgLTE1IDM1LjV0LTM1IDE0LjVoLTYwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwek0xIDM1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgzMDBxMjAgMCAzNSAxNXQxNSAzNXYxMDBxMCAyMSAtMTUgMzUuNXQtMzUgMTQuNWgtMzAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDB6TTEgNjUwIHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWg1MDBxMjAgMCAzNSAxNXQxNSAzNXYxMDBxMCAyMSAtMTUgMzUuNXQtMzUgMTQuNWgtNTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDB6TTEgOTUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDEwMHEyMCAwIDM1IDE1dDE1IDM1djEwMHEwIDIxIC0xNSAzNS41dC0zNSAxNC41aC0xMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTEwMHpNODAxIDB2MTEwMGgxMDB2LTExMDAgaC0xMDB6TTkzNCA1NTBsMTY3IC0xMjV2NzVoMjAwdjEwMGgtMjAwdjc1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDU5OyIgZD0iTTAgMjc1djY1MHEwIDMxIDIyIDUzdDUzIDIyaDc1MHEzMSAwIDUzIC0yMnQyMiAtNTN2LTY1MHEwIC0zMSAtMjIgLTUzdC01MyAtMjJoLTc1MHEtMzEgMCAtNTMgMjJ0LTIyIDUzek05MDAgNjAwbDMwMCAzMDB2LTYwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA2MDsiIGQ9Ik0wIDQ0djEwMTJxMCAxOCAxMyAzMXQzMSAxM2gxMTEycTE5IDAgMzEuNSAtMTN0MTIuNSAtMzF2LTEwMTJxMCAtMTggLTEyLjUgLTMxdC0zMS41IC0xM2gtMTExMnEtMTggMCAtMzEgMTN0LTEzIDMxek0xMDAgMjYzbDI0NyAxODJsMjk4IC0xMzFsLTc0IDE1NmwyOTMgMzE4bDIzNiAtMjg4djUwMGgtMTAwMHYtNzM3ek0yMDggNzUwcTAgNTYgMzkgOTV0OTUgMzl0OTUgLTM5dDM5IC05NXQtMzkgLTk1dC05NSAtMzl0LTk1IDM5dC0zOSA5NXogIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNjI7IiBkPSJNMTQ4IDc0NXEwIDEyNCA2MC41IDIzMS41dDE2NSAxNzJ0MjI2LjUgNjQuNXExMjMgMCAyMjcgLTYzdDE2NC41IC0xNjkuNXQ2MC41IC0yMjkuNXQtNzMgLTI3MnEtNzMgLTExNCAtMTY2LjUgLTIzN3QtMTUwLjUgLTE4OWwtNTcgLTY2cS0xMCA5IC0yNyAyNnQtNjYuNSA3MC41dC05NiAxMDl0LTEwNCAxMzUuNXQtMTAwLjUgMTU1cS02MyAxMzkgLTYzIDI2MnpNMzQyIDc3MnEwIC0xMDcgNzUuNSAtMTgyLjV0MTgxLjUgLTc1LjUgcTEwNyAwIDE4Mi41IDc1LjV0NzUuNSAxODIuNXQtNzUuNSAxODJ0LTE4Mi41IDc1dC0xODIgLTc1LjV0LTc1IC0xODEuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA2MzsiIGQ9Ik0xIDYwMHEwIDEyMiA0Ny41IDIzM3QxMjcuNSAxOTF0MTkxIDEyNy41dDIzMyA0Ny41dDIzMyAtNDcuNXQxOTEgLTEyNy41dDEyNy41IC0xOTF0NDcuNSAtMjMzdC00Ny41IC0yMzN0LTEyNy41IC0xOTF0LTE5MSAtMTI3LjV0LTIzMyAtNDcuNXQtMjMzIDQ3LjV0LTE5MSAxMjcuNXQtMTI3LjUgMTkxdC00Ny41IDIzM3pNMTczIDYwMHEwIC0xNzcgMTI1LjUgLTMwMnQzMDEuNSAtMTI1djg1NHEtMTc2IDAgLTMwMS41IC0xMjUgdC0xMjUuNSAtMzAyeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDY0OyIgZD0iTTExNyA0MDZxMCA5NCAzNCAxODZ0ODguNSAxNzIuNXQxMTIgMTU5dDExNSAxNzd0ODcuNSAxOTQuNXEyMSAtNzEgNTcuNSAtMTQyLjV0NzYgLTEzMC41dDgzIC0xMTguNXQ4MiAtMTE3dDcwIC0xMTZ0NTAgLTEyNS41dDE4LjUgLTEzNnEwIC04OSAtMzkgLTE2NS41dC0xMDIgLTEyNi41dC0xNDAgLTc5LjV0LTE1NiAtMzMuNXEtMTE0IDYgLTIxMS41IDUzdC0xNjEuNSAxMzguNXQtNjQgMjEwLjV6TTI0MyA0MTRxMTQgLTgyIDU5LjUgLTEzNiB0MTM2LjUgLTgwbDE2IDk4cS03IDYgLTE4IDE3dC0zNCA0OHQtMzMgNzdxLTE1IDczIC0xNCAxNDMuNXQxMCAxMjIuNWw5IDUxcS05MiAtMTEwIC0xMTkuNSAtMTg1dC0xMi41IC0xNTZ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNjU7IiBkPSJNMCA0MDB2MzAwcTAgMTY1IDExNy41IDI4Mi41dDI4Mi41IDExNy41cTM2NiAtNiAzOTcgLTE0bC0xODYgLTE4NmgtMzExcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2MTI1bDIwMCAyMDB2LTIyNXEwIC0xNjUgLTExNy41IC0yODIuNXQtMjgyLjUgLTExNy41aC0zMDBxLTE2NSAwIC0yODIuNSAxMTcuNSB0LTExNy41IDI4Mi41ek00MzYgMzQxbDE2MSA1MGw0MTIgNDEybC0xMTQgMTEzbC00MDUgLTQwNXpNOTk1IDEwMTVsMTEzIC0xMTNsMTEzIDExM2wtMjEgODVsLTkyIDI4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDY2OyIgZD0iTTAgNDAwdjMwMHEwIDE2NSAxMTcuNSAyODIuNXQyODIuNSAxMTcuNWgyNjFsMiAtODBxLTEzMyAtMzIgLTIxOCAtMTIwaC0xNDVxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNWwyMDAgMTUzdi01M3EwIC0xNjUgLTExNy41IC0yODIuNXQtMjgyLjUgLTExNy41aC0zMDBxLTE2NSAwIC0yODIuNSAxMTcuNXQtMTE3LjUgMjgyLjUgek00MjMgNTI0cTMwIDM4IDgxLjUgNjR0MTAzIDM1LjV0OTkgMTR0NzcuNSAzLjVsMjkgLTF2LTIwOWwzNjAgMzI0bC0zNTkgMzE4di0yMTZxLTcgMCAtMTkgLTF0LTQ4IC04dC02OS41IC0xOC41dC03Ni41IC0zN3QtNzYuNSAtNTl0LTYyIC04OHQtMzkuNSAtMTIxLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNjc7IiBkPSJNMCA0MDB2MzAwcTAgMTY1IDExNy41IDI4Mi41dDI4Mi41IDExNy41aDMwMHE2MCAwIDEyNyAtMjNsLTE3OCAtMTc3aC0zNDlxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY2OWwyMDAgMjAwdi0xNjlxMCAtMTY1IC0xMTcuNSAtMjgyLjV0LTI4Mi41IC0xMTcuNWgtMzAwcS0xNjUgMCAtMjgyLjUgMTE3LjUgdC0xMTcuNSAyODIuNXpNMzQyIDYzMmwyODMgLTI4NGw1NjYgNTY3bC0xMzYgMTM3bC00MzAgLTQzMWwtMTQ3IDE0N3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA2ODsiIGQ9Ik0wIDYwM2wzMDAgMjk2di0xOThoMjAwdjIwMGgtMjAwbDMwMCAzMDBsMjk1IC0zMDBoLTE5NXYtMjAwaDIwMHYxOThsMzAwIC0yOTZsLTMwMCAtMzAwdjE5OGgtMjAwdi0yMDBoMTk1bC0yOTUgLTMwMGwtMzAwIDMwMGgyMDB2MjAwaC0yMDB2LTE5OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA2OTsiIGQ9Ik0yMDAgNTB2MTAwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MzdsNTAwIDQ4N3YtMTEwMGwtNTAwIDQ4OHYtNDM4cTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDcwOyIgZD0iTTAgNTB2MTAwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MzdsNTAwIDQ4N3YtNDg3bDUwMCA0ODd2LTExMDBsLTUwMCA0ODh2LTQ4OGwtNTAwIDQ4OHYtNDM4cTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDcxOyIgZD0iTTEzNiA1NTBsNTY0IDU1MHYtNDg3bDUwMCA0ODd2LTExMDBsLTUwMCA0ODh2LTQ4OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA3MjsiIGQ9Ik0yMDAgMGw5MDAgNTUwbC05MDAgNTUwdi0xMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDczOyIgZD0iTTIwMCAxNTBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41aDIwMHEyMSAwIDM1LjUgMTQuNXQxNC41IDM1LjV2ODAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC0yMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTgwMHpNNjAwIDE1MHEwIC0yMSAxNC41IC0zNS41dDM1LjUgLTE0LjVoMjAwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXY4MDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTIwMCBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTgwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA3NDsiIGQ9Ik0yMDAgMTUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDgwMHEyMSAwIDM1LjUgMTV0MTQuNSAzNXY4MDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTgwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtODAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDc1OyIgZD0iTTAgMHYxMTAwbDUwMCAtNDg3djQ4N2w1NjQgLTU1MGwtNTY0IC01NTB2NDg4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDc2OyIgZD0iTTAgMHYxMTAwbDUwMCAtNDg3djQ4N2w1MDAgLTQ4N3Y0MzdxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MzhsLTUwMCAtNDg4djQ4OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA3NzsiIGQ9Ik0zMDAgMHYxMTAwbDUwMCAtNDg3djQzN3EwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQzOHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA3ODsiIGQ9Ik0xMDAgMjUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNMTAwIDUwMGgxMTAwbC01NTAgNTY0eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDc5OyIgZD0iTTE4NSA1OTlsNTkyIC01OTJsMjQwIDI0MGwtMzUzIDM1M2wzNTMgMzUzbC0yNDAgMjQweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDgwOyIgZD0iTTI3MiAxOTRsMzUzIDM1M2wtMzUzIDM1M2wyNDEgMjQwbDU3MiAtNTcxbDIxIC0yMmwtMSAtMXYtMWwtNTkyIC01OTF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwODE7IiBkPSJNMyA2MDBxMCAxNjIgODAgMjk5LjV0MjE3LjUgMjE3LjV0Mjk5LjUgODB0Mjk5LjUgLTgwdDIxNy41IC0yMTcuNXQ4MCAtMjk5LjV0LTgwIC0zMDB0LTIxNy41IC0yMTh0LTI5OS41IC04MHQtMjk5LjUgODB0LTIxNy41IDIxOHQtODAgMzAwek0zMDAgNTAwaDIwMHYtMjAwaDIwMHYyMDBoMjAwdjIwMGgtMjAwdjIwMGgtMjAwdi0yMDBoLTIwMHYtMjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDgyOyIgZD0iTTMgNjAwcTAgMTYyIDgwIDI5OS41dDIxNy41IDIxNy41dDI5OS41IDgwdDI5OS41IC04MHQyMTcuNSAtMjE3LjV0ODAgLTI5OS41dC04MCAtMzAwdC0yMTcuNSAtMjE4dC0yOTkuNSAtODB0LTI5OS41IDgwdC0yMTcuNSAyMTh0LTgwIDMwMHpNMzAwIDUwMGg2MDB2MjAwaC02MDB2LTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA4MzsiIGQ9Ik0zIDYwMHEwIDE2MiA4MCAyOTkuNXQyMTcuNSAyMTcuNXQyOTkuNSA4MHQyOTkuNSAtODB0MjE3LjUgLTIxNy41dDgwIC0yOTkuNXQtODAgLTMwMHQtMjE3LjUgLTIxOHQtMjk5LjUgLTgwdC0yOTkuNSA4MHQtMjE3LjUgMjE4dC04MCAzMDB6TTI0NiA0NTlsMjEzIC0yMTNsMTQxIDE0MmwxNDEgLTE0MmwyMTMgMjEzbC0xNDIgMTQxbDE0MiAxNDFsLTIxMyAyMTJsLTE0MSAtMTQxbC0xNDEgMTQybC0yMTIgLTIxM2wxNDEgLTE0MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA4NDsiIGQ9Ik0zIDYwMHEwIDE2MiA4MCAyOTkuNXQyMTcuNSAyMTcuNXQyOTkuNSA4MHQyOTkuNSAtODB0MjE3LjUgLTIxNy41dDgwIC0yOTkuNXQtODAgLTI5OS41dC0yMTcuNSAtMjE3LjV0LTI5OS41IC04MHQtMjk5LjUgODB0LTIxNy41IDIxNy41dC04MCAyOTkuNXpNMjcwIDU1MWwyNzYgLTI3N2w0MTEgNDExbC0xNzUgMTc0bC0yMzYgLTIzNmwtMTAyIDEwMnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA4NTsiIGQ9Ik0zIDYwMHEwIDE2MiA4MCAyOTkuNXQyMTcuNSAyMTcuNXQyOTkuNSA4MHQyOTkuNSAtODB0MjE3LjUgLTIxNy41dDgwIC0yOTkuNXQtODAgLTMwMHQtMjE3LjUgLTIxOHQtMjk5LjUgLTgwdC0yOTkuNSA4MHQtMjE3LjUgMjE4dC04MCAzMDB6TTM2MyA3MDBoMTQ0cTQgMCAxMS41IC0xdDExIC0xdDYuNSAzdDMgOXQxIDExdDMuNSA4LjV0My41IDZ0NS41IDR0Ni41IDIuNXQ5IDEuNXQ5IDAuNWgxMS41aDEyLjVxMTkgMCAzMCAtMTB0MTEgLTI2IHEwIC0yMiAtNCAtMjh0LTI3IC0yMnEtNSAtMSAtMTIuNSAtM3QtMjcgLTEzLjV0LTM0IC0yN3QtMjYuNSAtNDZ0LTExIC02OC41aDIwMHE1IDMgMTQgOHQzMS41IDI1LjV0MzkuNSA0NS41dDMxIDY5dDE0IDk0cTAgNTEgLTE3LjUgODl0LTQyIDU4dC01OC41IDMydC01OC41IDE1dC01MS41IDNxLTEwNSAwIC0xNzIgLTU2dC02NyAtMTgzek01MDAgMzAwaDIwMHYxMDBoLTIwMHYtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDg2OyIgZD0iTTMgNjAwcTAgMTYyIDgwIDI5OS41dDIxNy41IDIxNy41dDI5OS41IDgwdDI5OS41IC04MHQyMTcuNSAtMjE3LjV0ODAgLTI5OS41dC04MCAtMzAwdC0yMTcuNSAtMjE4dC0yOTkuNSAtODB0LTI5OS41IDgwdC0yMTcuNSAyMTh0LTgwIDMwMHpNNDAwIDMwMGg0MDB2MTAwaC0xMDB2MzAwaC0zMDB2LTEwMGgxMDB2LTIwMGgtMTAwdi0xMDB6TTUwMCA4MDBoMjAwdjEwMGgtMjAwdi0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwODc7IiBkPSJNMCA1MDB2MjAwaDE5NHExNSA2MCAzNiAxMDQuNXQ1NS41IDg2dDg4IDY5dDEyNi41IDQwLjV2MjAwaDIwMHYtMjAwcTU0IC0yMCAxMTMgLTYwdDExMi41IC0xMDUuNXQ3MS41IC0xMzQuNWgyMDN2LTIwMGgtMjAzcS0yNSAtMTAyIC0xMTYuNSAtMTg2dC0xODAuNSAtMTE3di0xOTdoLTIwMHYxOTdxLTE0MCAyNyAtMjA4IDEwMi41dC05OCAyMDAuNWgtMTk0ek0yOTAgNTAwcTI0IC03MyA3OS41IC0xMjcuNXQxMzAuNSAtNzguNXYyMDZoMjAwIHYtMjA2cTE0OSA0OCAyMDEgMjA2aC0yMDF2MjAwaDIwMHEtMjUgNzQgLTc2IDEyNy41dC0xMjQgNzYuNXYtMjA0aC0yMDB2MjAzcS03NSAtMjQgLTEzMCAtNzcuNXQtNzkgLTEyNS41aDIwOXYtMjAwaC0yMTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwODg7IiBkPSJNNCA2MDBxMCAxNjIgODAgMjk5dDIxNyAyMTd0Mjk5IDgwdDI5OSAtODB0MjE3IC0yMTd0ODAgLTI5OXQtODAgLTI5OXQtMjE3IC0yMTd0LTI5OSAtODB0LTI5OSA4MHQtMjE3IDIxN3QtODAgMjk5ek0xODYgNjAwcTAgLTE3MSAxMjEuNSAtMjkyLjV0MjkyLjUgLTEyMS41dDI5Mi41IDEyMS41dDEyMS41IDI5Mi41dC0xMjEuNSAyOTIuNXQtMjkyLjUgMTIxLjV0LTI5Mi41IC0xMjEuNXQtMTIxLjUgLTI5Mi41ek0zNTYgNDY1bDEzNSAxMzUgbC0xMzUgMTM1bDEwOSAxMDlsMTM1IC0xMzVsMTM1IDEzNWwxMDkgLTEwOWwtMTM1IC0xMzVsMTM1IC0xMzVsLTEwOSAtMTA5bC0xMzUgMTM1bC0xMzUgLTEzNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA4OTsiIGQ9Ik00IDYwMHEwIDE2MiA4MCAyOTl0MjE3IDIxN3QyOTkgODB0Mjk5IC04MHQyMTcgLTIxN3Q4MCAtMjk5dC04MCAtMjk5dC0yMTcgLTIxN3QtMjk5IC04MHQtMjk5IDgwdC0yMTcgMjE3dC04MCAyOTl6TTE4NiA2MDBxMCAtMTcxIDEyMS41IC0yOTIuNXQyOTIuNSAtMTIxLjV0MjkyLjUgMTIxLjV0MTIxLjUgMjkyLjV0LTEyMS41IDI5Mi41dC0yOTIuNSAxMjEuNXQtMjkyLjUgLTEyMS41dC0xMjEuNSAtMjkyLjV6TTMyMiA1MzdsMTQxIDE0MSBsODcgLTg3bDIwNCAyMDVsMTQyIC0xNDJsLTM0NiAtMzQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDkwOyIgZD0iTTQgNjAwcTAgMTYyIDgwIDI5OXQyMTcgMjE3dDI5OSA4MHQyOTkgLTgwdDIxNyAtMjE3dDgwIC0yOTl0LTgwIC0yOTl0LTIxNyAtMjE3dC0yOTkgLTgwdC0yOTkgODB0LTIxNyAyMTd0LTgwIDI5OXpNMTg2IDYwMHEwIC0xMTUgNjIgLTIxNWw1NjggNTY3cS0xMDAgNjIgLTIxNiA2MnEtMTcxIDAgLTI5Mi41IC0xMjEuNXQtMTIxLjUgLTI5Mi41ek0zOTEgMjQ1cTk3IC01OSAyMDkgLTU5cTE3MSAwIDI5Mi41IDEyMS41dDEyMS41IDI5Mi41IHEwIDExMiAtNTkgMjA5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDkxOyIgZD0iTTAgNTQ3bDYwMCA0NTN2LTMwMGg2MDB2LTMwMGgtNjAwdi0zMDF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwOTI7IiBkPSJNMCA0MDB2MzAwaDYwMHYzMDBsNjAwIC00NTNsLTYwMCAtNDQ4djMwMWgtNjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDkzOyIgZD0iTTIwNCA2MDBsNDUwIDYwMGw0NDQgLTYwMGgtMjk4di02MDBoLTMwMHY2MDBoLTI5NnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA5NDsiIGQ9Ik0xMDQgNjAwaDI5NnY2MDBoMzAwdi02MDBoMjk4bC00NDkgLTYwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA5NTsiIGQ9Ik0wIDIwMHE2IDEzMiA0MSAyMzguNXQxMDMuNSAxOTN0MTg0IDEzOHQyNzEuNSA1OS41djI3MWw2MDAgLTQ1M2wtNjAwIC00NDh2MzAxcS05NSAtMiAtMTgzIC0yMHQtMTcwIC01MnQtMTQ3IC05Mi41dC0xMDAgLTEzNS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDk2OyIgZD0iTTAgMHY0MDBsMTI5IC0xMjlsMjk0IDI5NGwxNDIgLTE0MmwtMjk0IC0yOTRsMTI5IC0xMjloLTQwMHpNNjM1IDc3N2wxNDIgLTE0MmwyOTQgMjk0bDEyOSAtMTI5djQwMGgtNDAwbDEyOSAtMTI5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDk3OyIgZD0iTTM0IDE3NmwyOTUgMjk1bC0xMjkgMTI5aDQwMHYtNDAwbC0xMjkgMTMwbC0yOTUgLTI5NXpNNjAwIDYwMHY0MDBsMTI5IC0xMjlsMjk1IDI5NWwxNDIgLTE0MWwtMjk1IC0yOTVsMTI5IC0xMzBoLTQwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEwMTsiIGQ9Ik0yMyA2MDBxMCAxMTggNDUuNSAyMjQuNXQxMjMgMTg0dDE4NCAxMjN0MjI0LjUgNDUuNXQyMjQuNSAtNDUuNXQxODQgLTEyM3QxMjMgLTE4NHQ0NS41IC0yMjQuNXQtNDUuNSAtMjI0LjV0LTEyMyAtMTg0dC0xODQgLTEyM3QtMjI0LjUgLTQ1LjV0LTIyNC41IDQ1LjV0LTE4NCAxMjN0LTEyMyAxODR0LTQ1LjUgMjI0LjV6TTQ1NiA4NTFsNTggLTMwMnE0IC0yMCAyMS41IC0zNC41dDM3LjUgLTE0LjVoNTRxMjAgMCAzNy41IDE0LjUgdDIxLjUgMzQuNWw1OCAzMDJxNCAyMCAtOCAzNC41dC0zMyAxNC41aC0yMDdxLTIwIDAgLTMyIC0xNC41dC04IC0zNC41ek01MDAgMzAwaDIwMHYxMDBoLTIwMHYtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTAyOyIgZD0iTTAgODAwaDEwMHYtMjAwaDQwMHYzMDBoMjAwdi0zMDBoNDAwdjIwMGgxMDB2MTAwaC0xMTF2NnQtMSAxNXQtMyAxOGwtMzQgMTcycS0xMSAzOSAtNDEuNSA2M3QtNjkuNSAyNHEtMzIgMCAtNjEgLTE3bC0yMzkgLTE0NHEtMjIgLTEzIC00MCAtMzVxLTE5IDI0IC00MCAzNmwtMjM4IDE0NHEtMzMgMTggLTYyIDE4cS0zOSAwIC02OS41IC0yM3QtNDAuNSAtNjFsLTM1IC0xNzdxLTIgLTggLTMgLTE4dC0xIC0xNXYtNmgtMTExdi0xMDB6IE0xMDAgMGg0MDB2NDAwaC00MDB2LTQwMHpNMjAwIDkwMHEtMyAwIDE0IDQ4dDM1IDk2bDE4IDQ3bDIxNCAtMTkxaC0yODF6TTcwMCAwdjQwMGg0MDB2LTQwMGgtNDAwek03MzEgOTAwbDIwMiAxOTdxNSAtMTIgMTIgLTMyLjV0MjMgLTY0dDI1IC03MnQ3IC0yOC41aC0yNjl6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMDM7IiBkPSJNMCAtMjJ2MTQzbDIxNiAxOTNxLTkgNTMgLTEzIDgzdC01LjUgOTR0OSAxMTN0MzguNSAxMTR0NzQgMTI0cTQ3IDYwIDk5LjUgMTAyLjV0MTAzIDY4dDEyNy41IDQ4dDE0NS41IDM3LjV0MTg0LjUgNDMuNXQyMjAgNTguNXEwIC0xODkgLTIyIC0zNDN0LTU5IC0yNTh0LTg5IC0xODEuNXQtMTA4LjUgLTEyMHQtMTIyIC02OHQtMTI1LjUgLTMwdC0xMjEuNSAtMS41dC0xMDcuNSAxMi41dC04Ny41IDE3dC01Ni41IDcuNWwtOTkgLTU1eiBNMjM4LjUgMzAwLjVxMTkuNSAtNi41IDg2LjUgNzYuNXE1NSA2NiAzNjcgMjM0cTcwIDM4IDExOC41IDY5LjV0MTAyIDc5dDk5IDExMS41dDg2LjUgMTQ4cTIyIDUwIDI0IDYwdC02IDE5cS03IDUgLTE3IDV0LTI2LjUgLTE0LjV0LTMzLjUgLTM5LjVxLTM1IC01MSAtMTEzLjUgLTEwOC41dC0xMzkuNSAtODkuNWwtNjEgLTMycS0zNjkgLTE5NyAtNDU4IC00MDFxLTQ4IC0xMTEgLTI4LjUgLTExNy41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTA0OyIgZD0iTTExMSA0MDhxMCAtMzMgNSAtNjNxOSAtNTYgNDQgLTExOS41dDEwNSAtMTA4LjVxMzEgLTIxIDY0IC0xNnQ2MiAyMy41dDU3IDQ5LjV0NDggNjEuNXQzNSA2MC41cTMyIDY2IDM5IDE4NC41dC0xMyAxNTcuNXE3OSAtODAgMTIyIC0xNjR0MjYgLTE4NHEtNSAtMzMgLTIwLjUgLTY5LjV0LTM3LjUgLTgwLjVxLTEwIC0xOSAtMTQuNSAtMjl0LTEyIC0yNnQtOSAtMjMuNXQtMyAtMTl0Mi41IC0xNS41dDExIC05LjV0MTkuNSAtNXQzMC41IDIuNSB0NDIgOHE1NyAyMCA5MSAzNHQ4Ny41IDQ0LjV0ODcgNjR0NjUuNSA4OC41dDQ3IDEyMnEzOCAxNzIgLTQ0LjUgMzQxLjV0LTI0Ni41IDI3OC41cTIyIC00NCA0MyAtMTI5cTM5IC0xNTkgLTMyIC0xNTRxLTE1IDIgLTMzIDlxLTc5IDMzIC0xMjAuNSAxMDB0LTQ0IDE3NS41dDQ4LjUgMjU3LjVxLTEzIC04IC0zNCAtMjMuNXQtNzIuNSAtNjYuNXQtODguNSAtMTA1LjV0LTYwIC0xMzh0LTggLTE2Ni41cTIgLTEyIDggLTQxLjV0OCAtNDN0NiAtMzkuNSB0My41IC0zOS41dC0xIC0zMy41dC02IC0zMS41dC0xMy41IC0yNHQtMjEgLTIwLjV0LTMxIC0xMnEtMzggLTEwIC02NyAxM3QtNDAuNSA2MS41dC0xNSA4MS41dDEwLjUgNzVxLTUyIC00NiAtODMuNSAtMTAxdC0zOSAtMTA3dC03LjUgLTg1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTA1OyIgZD0iTS02MSA2MDBsMjYgNDBxNiAxMCAyMCAzMHQ0OSA2My41dDc0LjUgODUuNXQ5NyA5MHQxMTYuNSA4My41dDEzMi41IDU5dDE0NS41IDIzLjV0MTQ1LjUgLTIzLjV0MTMyLjUgLTU5dDExNi41IC04My41dDk3IC05MHQ3NC41IC04NS41dDQ5IC02My41dDIwIC0zMGwyNiAtNDBsLTI2IC00MHEtNiAtMTAgLTIwIC0zMHQtNDkgLTYzLjV0LTc0LjUgLTg1LjV0LTk3IC05MHQtMTE2LjUgLTgzLjV0LTEzMi41IC01OXQtMTQ1LjUgLTIzLjUgdC0xNDUuNSAyMy41dC0xMzIuNSA1OXQtMTE2LjUgODMuNXQtOTcgOTB0LTc0LjUgODUuNXQtNDkgNjMuNXQtMjAgMzB6TTEyMCA2MDBxNyAtMTAgNDAuNSAtNTh0NTYgLTc4LjV0NjggLTc3LjV0ODcuNSAtNzV0MTAzIC00OS41dDEyNSAtMjEuNXQxMjMuNSAyMHQxMDAuNSA0NS41dDg1LjUgNzEuNXQ2Ni41IDc1LjV0NTggODEuNXQ0NyA2NnEtMSAxIC0yOC41IDM3LjV0LTQyIDU1dC00My41IDUzdC01Ny41IDYzLjV0LTU4LjUgNTQgcTQ5IC03NCA0OSAtMTYzcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OHQtMjEyIDg4dC04OCAyMTJxMCA4NSA0NiAxNThxLTEwMiAtODcgLTIyNiAtMjU4ek0zNzcgNjU2cTQ5IC0xMjQgMTU0IC0xOTFsMTA1IDEwNXEtMzcgMjQgLTc1IDcydC01NyA4NGwtMjAgMzZ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMDY7IiBkPSJNLTYxIDYwMGwyNiA0MHE2IDEwIDIwIDMwdDQ5IDYzLjV0NzQuNSA4NS41dDk3IDkwdDExNi41IDgzLjV0MTMyLjUgNTl0MTQ1LjUgMjMuNXE2MSAwIDEyMSAtMTdsMzcgMTQyaDE0OGwtMzE0IC0xMjAwaC0xNDhsMzcgMTQzcS04MiAyMSAtMTY1IDcxLjV0LTE0MCAxMDJ0LTEwOS41IDExMnQtNzIgODguNXQtMjkuNSA0M3pNMTIwIDYwMHEyMTAgLTI4MiAzOTMgLTMzNmwzNyAxNDFxLTEwNyAxOCAtMTc4LjUgMTAxLjV0LTcxLjUgMTkzLjUgcTAgODUgNDYgMTU4cS0xMDIgLTg3IC0yMjYgLTI1OHpNMzc3IDY1NnE0OSAtMTI0IDE1NCAtMTkxbDQ3IDQ3bDIzIDg3cS0zMCAyOCAtNTkgNjl0LTQ0IDY4bC0xNCAyNnpNNzgwIDE2MWwzOCAxNDVxMjIgMTUgNDQuNSAzNHQ0NiA0NHQ0MC41IDQ0dDQxIDUwLjV0MzMuNSA0My41dDMzIDQ0dDI0LjUgMzRxLTk3IDEyNyAtMTQwIDE3NWwzOSAxNDZxNjcgLTU0IDEzMS41IC0xMjUuNXQ4Ny41IC0xMDMuNXQzNiAtNTJsMjYgLTQwbC0yNiAtNDAgcS03IC0xMiAtMjUuNSAtMzh0LTYzLjUgLTc5LjV0LTk1LjUgLTEwMi41dC0xMjQgLTEwMHQtMTQ2LjUgLTc5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTA3OyIgZD0iTS05Ny41IDM0cTEzLjUgLTM0IDUwLjUgLTM0aDEyOTRxMzcgMCA1MC41IDM1LjV0LTcuNSA2Ny41bC02NDIgMTA1NnEtMjAgMzMgLTQ4IDM2dC00OCAtMjlsLTY0MiAtMTA2NnEtMjEgLTMyIC03LjUgLTY2ek0xNTUgMjAwbDQ0NSA3MjNsNDQ1IC03MjNoLTM0NXYxMDBoLTIwMHYtMTAwaC0zNDV6TTUwMCA2MDBsMTAwIC0zMDBsMTAwIDMwMHYxMDBoLTIwMHYtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTA4OyIgZD0iTTEwMCAyNjJ2NDFxMCAyMCAxMSA0NC41dDI2IDM4LjVsMzYzIDMyNXYzMzlxMCA2MiA0NCAxMDZ0MTA2IDQ0dDEwNiAtNDR0NDQgLTEwNnYtMzM5bDM2MyAtMzI1cTE1IC0xNCAyNiAtMzguNXQxMSAtNDQuNXYtNDFxMCAtMjAgLTEyIC0yNi41dC0yOSA1LjVsLTM1OSAyNDl2LTI2M3ExMDAgLTkxIDEwMCAtMTEzdi02NHEwIC0yMSAtMTMgLTI5dC0zMiAxbC05NCA3OGgtMjIybC05NCAtNzhxLTE5IC05IC0zMiAtMXQtMTMgMjl2NjQgcTAgMjIgMTAwIDExM3YyNjNsLTM1OSAtMjQ5cS0xNyAtMTIgLTI5IC01LjV0LTEyIDI2LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMDk7IiBkPSJNMCA1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgxMDAwcTIxIDAgMzUuNSAxNXQxNC41IDM1djc1MGgtMTEwMHYtNzUwek0wIDkwMGgxMTAwdjE1MHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMTUwdjEwMGgtMTAwdi0xMDBoLTUwMHYxMDBoLTEwMHYtMTAwaC0xNTBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTE1MHpNMTAwIDEwMHYxMDBoMTAwdi0xMDBoLTEwMHpNMTAwIDMwMHYxMDBoMTAwdi0xMDBoLTEwMHogTTEwMCA1MDB2MTAwaDEwMHYtMTAwaC0xMDB6TTMwMCAxMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTMwMCAzMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTMwMCA1MDB2MTAwaDEwMHYtMTAwaC0xMDB6TTUwMCAxMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTUwMCAzMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTUwMCA1MDB2MTAwaDEwMHYtMTAwaC0xMDB6TTcwMCAxMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTcwMCAzMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTcwMCA1MDAgdjEwMGgxMDB2LTEwMGgtMTAwek05MDAgMTAwdjEwMGgxMDB2LTEwMGgtMTAwek05MDAgMzAwdjEwMGgxMDB2LTEwMGgtMTAwek05MDAgNTAwdjEwMGgxMDB2LTEwMGgtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTEwOyIgZD0iTTAgMjAwdjIwMGgyNTlsNjAwIDYwMGgyNDF2MTk4bDMwMCAtMjk1bC0zMDAgLTMwMHYxOTdoLTE1OWwtNjAwIC02MDBoLTM0MXpNMCA4MDBoMjU5bDEyMiAtMTIybDE0MSAxNDJsLTE4MSAxODBoLTM0MXYtMjAwek02NzggMzgxbDE0MSAxNDJsMTIyIC0xMjNoMTU5djE5OGwzMDAgLTI5NWwtMzAwIC0zMDB2MTk3aC0yNDF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMTE7IiBkPSJNMCA0MDB2NjAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxMDAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di02MDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTU5NmwtMzA0IC0zMDB2MzAwaC0xMDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTEyOyIgZD0iTTEwMCA2MDB2MjAwaDMwMHYtMjUwcTAgLTExMyA2IC0xNDVxMTcgLTkyIDEwMiAtMTE3cTM5IC0xMSA5MiAtMTFxMzcgMCA2Ni41IDUuNXQ1MCAxNS41dDM2IDI0dDI0IDMxLjV0MTQgMzcuNXQ3IDQydDIuNSA0NXQwIDQ3djI1djI1MGgzMDB2LTIwMHEwIC00MiAtMyAtODN0LTE1IC0xMDR0LTMxLjUgLTExNnQtNTggLTEwOS41dC04OSAtOTYuNXQtMTI5IC02NS41dC0xNzQuNSAtMjUuNXQtMTc0LjUgMjUuNXQtMTI5IDY1LjV0LTg5IDk2LjUgdC01OCAxMDkuNXQtMzEuNSAxMTZ0LTE1IDEwNHQtMyA4M3pNMTAwIDkwMHYzMDBoMzAwdi0zMDBoLTMwMHpNODAwIDkwMHYzMDBoMzAwdi0zMDBoLTMwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTExMzsiIGQ9Ik0tMzAgNDExbDIyNyAtMjI3bDM1MiAzNTNsMzUzIC0zNTNsMjI2IDIyN2wtNTc4IDU3OXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTExNDsiIGQ9Ik03MCA3OTdsNTgwIC01NzlsNTc4IDU3OWwtMjI2IDIyN2wtMzUzIC0zNTNsLTM1MiAzNTN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMTU7IiBkPSJNLTE5OCA3MDBsMjk5IDI4M2wzMDAgLTI4M2gtMjAzdi00MDBoMzg1bDIxNSAtMjAwaC04MDB2NjAwaC0xOTZ6TTQwMiAxMDAwbDIxNSAtMjAwaDM4MXYtNDAwaC0xOThsMjk5IC0yODNsMjk5IDI4M2gtMjAwdjYwMGgtNzk2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTE2OyIgZD0iTTE4IDkzOXEtNSAyNCAxMCA0MnExNCAxOSAzOSAxOWg4OTZsMzggMTYycTUgMTcgMTguNSAyNy41dDMwLjUgMTAuNWg5NHEyMCAwIDM1IC0xNC41dDE1IC0zNS41dC0xNSAtMzUuNXQtMzUgLTE0LjVoLTU0bC0yMDEgLTk2MXEtMiAtNCAtNiAtMTAuNXQtMTkgLTE3LjV0LTMzIC0xMWgtMzF2LTUwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTV0LTM1LjUgMTV0LTE0LjUgMzV2NTBoLTMwMHYtNTBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNSB0LTM1LjUgMTV0LTE0LjUgMzV2NTBoLTUwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1cTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg1MzVsNDggMjAwaC02MzNxLTMyIDAgLTU0LjUgMjF0LTI3LjUgNDN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMTc7IiBkPSJNMCAwdjgwMGgxMjAwdi04MDBoLTEyMDB6TTAgOTAwdjEwMGgyMDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41aDMwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNWg1MDB2LTEwMGgtMTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTExODsiIGQ9Ik0xIDBsMzAwIDcwMGgxMjAwbC0zMDAgLTcwMGgtMTIwMHpNMSA0MDB2NjAwaDIwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMzAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41aDUwMHYtMjAwaC0xMDAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTE5OyIgZD0iTTMwMiAzMDBoMTk4djYwMGgtMTk4bDI5OCAzMDBsMjk4IC0zMDBoLTE5OHYtNjAwaDE5OGwtMjk4IC0zMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMjA7IiBkPSJNMCA2MDBsMzAwIDI5OHYtMTk4aDYwMHYxOThsMzAwIC0yOThsLTMwMCAtMjk3djE5N2gtNjAwdi0xOTd6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMjE7IiBkPSJNMCAxMDB2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxMDAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di0xMDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTEwMDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41ek0zMSA0MDBsMTcyIDczOXE1IDIyIDIzIDQxLjV0MzggMTkuNWg2NzJxMTkgMCAzNy41IC0yMi41dDIzLjUgLTQ1LjVsMTcyIC03MzJoLTExMzh6TTgwMCAxMDBoMTAwdjEwMGgtMTAwdi0xMDB6IE0xMDAwIDEwMGgxMDB2MTAwaC0xMDB2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEyMjsiIGQ9Ik0tMTAxIDYwMHY1MHEwIDI0IDI1IDQ5dDUwIDM4bDI1IDEzdi0yNTBsLTExIDUuNXQtMjQgMTR0LTMwIDIxLjV0LTI0IDI3LjV0LTExIDMxLjV6TTk5IDUwMHYyNTB2NXEwIDEzIDAuNSAxOC41dDIuNSAxM3Q4IDEwLjV0MTUgM2gyMDBsNjc1IDI1MHYtODUwbC02NzUgMjAwaC0zOGw0NyAtMjc2cTIgLTEyIC0zIC0xNy41dC0xMSAtNnQtMjEgLTAuNWgtOGgtODNxLTIwIDAgLTM0LjUgMTR0LTE4LjUgMzVxLTU2IDMzNyAtNTYgMzUxeiBNMTEwMCAyMDB2ODUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXEyMCAwIDM1IC0xNC41dDE1IC0zNS41di04NTBxMCAtMjAgLTE1IC0zNXQtMzUgLTE1cS0yMSAwIC0zNS41IDE1dC0xNC41IDM1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTIzOyIgZD0iTTc0IDM1MHEwIDIxIDEzLjUgMzUuNXQzMy41IDE0LjVoMTdsMTE4IDE3M2w2MyAzMjdxMTUgNzcgNzYgMTQwdDE0NCA4M2wtMTggMzJxLTYgMTkgMyAzMnQyOSAxM2g5NHEyMCAwIDI5IC0xMC41dDMgLTI5LjVsLTE4IC0zN3E4MyAtMTkgMTQ0IC04Mi41dDc2IC0xNDAuNWw2MyAtMzI3bDExOCAtMTczaDE3cTIwIDAgMzMuNSAtMTQuNXQxMy41IC0zNS41cTAgLTIwIC0xMyAtNDB0LTMxIC0yN3EtMjIgLTkgLTYzIC0yM3QtMTY3LjUgLTM3IHQtMjUxLjUgLTIzdC0yNDUuNSAyMC41dC0xNzguNSA0MS41bC01OCAyMHEtMTggNyAtMzEgMjcuNXQtMTMgNDAuNXpNNDk3IDExMHExMiAtNDkgNDAgLTc5LjV0NjMgLTMwLjV0NjMgMzAuNXQzOSA3OS41cS00OCAtNiAtMTAyIC02dC0xMDMgNnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEyNDsiIGQ9Ik0yMSA0NDVsMjMzIC00NWwtNzggLTIyNGwyMjQgNzhsNDUgLTIzM2wxNTUgMTc5bDE1NSAtMTc5bDQ1IDIzM2wyMjQgLTc4bC03OCAyMjRsMjM0IDQ1bC0xODAgMTU1bDE4MCAxNTZsLTIzNCA0NGw3OCAyMjVsLTIyNCAtNzhsLTQ1IDIzM2wtMTU1IC0xODBsLTE1NSAxODBsLTQ1IC0yMzNsLTIyNCA3OGw3OCAtMjI1bC0yMzMgLTQ0bDE3OSAtMTU2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTI1OyIgZD0iTTAgMjAwaDIwMHY2MDBoLTIwMHYtNjAwek0zMDAgMjc1cTAgLTc1IDEwMCAtNzVoNjFxMTIzIC0xMDAgMTM5IC0xMDBoMjUwcTQ2IDAgODMgNTdsMjM4IDM0NHEyOSAzMSAyOSA3NHYxMDBxMCA0NCAtMzAuNSA4NC41dC02OS41IDQwLjVoLTMyOHEyOCAxMTggMjggMTI1djE1MHEwIDQ0IC0zMC41IDg0LjV0LTY5LjUgNDAuNWgtNTBxLTI3IDAgLTUxIC0yMHQtMzggLTQ4bC05NiAtMTk4bC0xNDUgLTE5NnEtMjAgLTI2IC0yMCAtNjN2LTQwMHogTTQwMCAzMDB2Mzc1bDE1MCAyMTJsMTAwIDIxM2g1MHYtMTc1bC01MCAtMjI1aDQ1MHYtMTI1bC0yNTAgLTM3NWgtMjE0bC0xMzYgMTAwaC0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMjY7IiBkPSJNMCA0MDB2NjAwaDIwMHYtNjAwaC0yMDB6TTMwMCA1MjV2NDAwcTAgNzUgMTAwIDc1aDYxcTEyMyAxMDAgMTM5IDEwMGgyNTBxNDYgMCA4MyAtNTdsMjM4IC0zNDRxMjkgLTMxIDI5IC03NHYtMTAwcTAgLTQ0IC0zMC41IC04NC41dC02OS41IC00MC41aC0zMjhxMjggLTExOCAyOCAtMTI1di0xNTBxMCAtNDQgLTMwLjUgLTg0LjV0LTY5LjUgLTQwLjVoLTUwcS0yNyAwIC01MSAyMHQtMzggNDhsLTk2IDE5OGwtMTQ1IDE5NiBxLTIwIDI2IC0yMCA2M3pNNDAwIDUyNWwxNTAgLTIxMmwxMDAgLTIxM2g1MHYxNzVsLTUwIDIyNWg0NTB2MTI1bC0yNTAgMzc1aC0yMTRsLTEzNiAtMTAwaC0xMDB2LTM3NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEyNzsiIGQ9Ik04IDIwMHY2MDBoMjAwdi02MDBoLTIwMHpNMzA4IDI3NXY1MjVxMCAxNyAxNCAzNS41dDI4IDI4LjVsMTQgOWwzNjIgMjMwcTE0IDYgMjUgNnExNyAwIDI5IC0xMmwxMDkgLTExMnExNCAtMTQgMTQgLTM0cTAgLTE4IC0xMSAtMzJsLTg1IC0xMjFoMzAycTg1IDAgMTM4LjUgLTM4dDUzLjUgLTExMHQtNTQuNSAtMTExdC0xMzguNSAtMzloLTEwN2wtMTMwIC0zMzlxLTcgLTIyIC0yMC41IC00MS41dC0yOC41IC0xOS41aC0zNDEgcS03IDAgLTkwIDgxdC04MyA5NHpNNDA4IDI4OWwxMDAgLTg5aDI5M2wxMzEgMzM5cTYgMjEgMTkuNSA0MXQyOC41IDIwaDIwM3ExNiAwIDI1IDE1dDkgMzZxMCAyMCAtOSAzNC41dC0yNSAxNC41aC00NTdoLTYuNWgtNy41dC02LjUgMC41dC02IDF0LTUgMS41dC01LjUgMi41dC00IDR0LTQgNS41cS01IDEyIC01IDIwcTAgMTQgMTAgMjdsMTQ3IDE4M2wtODYgODNsLTMzOSAtMjM2di01MDN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMjg7IiBkPSJNLTEwMSA2NTFxMCA3MiA1NCAxMTB0MTM5IDM3aDMwMmwtODUgMTIxcS0xMSAxNiAtMTEgMzJxMCAyMSAxNCAzNGwxMDkgMTEzcTEzIDEyIDI5IDEycTExIDAgMjUgLTZsMzY1IC0yMzBxNyAtNCAxNi41IC0xMC41dDI2IC0yNnQxNi41IC0zNi41di01MjZxMCAtMTMgLTg1LjUgLTkzLjV0LTkzLjUgLTgwLjVoLTM0MnEtMTUgMCAtMjguNSAyMHQtMTkuNSA0MWwtMTMxIDMzOWgtMTA2cS04NCAwIC0xMzkgMzl0LTU1IDExMXpNLTEgNjAxaDIyMiBxMTUgMCAyOC41IC0yMC41dDE5LjUgLTQwLjVsMTMxIC0zMzloMjkzbDEwNiA4OXY1MDJsLTM0MiAyMzdsLTg3IC04M2wxNDUgLTE4NHExMCAtMTEgMTAgLTI2cTAgLTExIC01IC0yMHEtMSAtMyAtMy41IC01LjVsLTQgLTR0LTUgLTIuNXQtNS41IC0xLjV0LTYuNSAtMXQtNi41IC0wLjVoLTcuNWgtNi41aC00NzZ2LTEwMHpNOTk5IDIwMXY2MDBoMjAwdi02MDBoLTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEyOTsiIGQ9Ik05NyA3MTlsMjMwIC0zNjNxNCAtNiAxMC41IC0xNS41dDI2IC0yNXQzNi41IC0xNS41aDUyNXExMyAwIDk0IDgzdDgxIDkwdjM0MnEwIDE1IC0yMCAyOC41dC00MSAxOS41bC0zMzkgMTMxdjEwNnEwIDg0IC0zOSAxMzl0LTExMSA1NXQtMTEwIC01My41dC0zOCAtMTM4LjV2LTMwMmwtMTIxIDg0cS0xNSAxMiAtMzMuNSAxMS41dC0zMi41IC0xMy41bC0xMTIgLTExMHEtMjIgLTIyIC02IC01M3pNMTcyIDczOWw4MyA4NmwxODMgLTE0NiBxMjIgLTE4IDQ3IC01cTMgMSA1LjUgMy41bDQgNHQyLjUgNXQxLjUgNS41dDEgNi41dDAuNSA2djcuNXY3djQ1NnEwIDIyIDI1IDMxdDUwIC0wLjV0MjUgLTMwLjV2LTIwMnEwIC0xNiAyMCAtMjkuNXQ0MSAtMTkuNWwzMzkgLTEzMHYtMjk0bC04OSAtMTAwaC01MDN6TTQwMCAwdjIwMGg2MDB2LTIwMGgtNjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTMwOyIgZD0iTTEgNTg1cS0xNSAtMzEgNyAtNTNsMTEyIC0xMTBxMTMgLTEzIDMyIC0xMy41dDM0IDEwLjVsMTIxIDg1bC0xIC0zMDJxMCAtODQgMzguNSAtMTM4dDExMC41IC01NHQxMTEgNTV0MzkgMTM5djEwNmwzMzkgMTMxcTIwIDYgNDAuNSAxOS41dDIwLjUgMjguNXYzNDJxMCA3IC04MSA5MHQtOTQgODNoLTUyNXEtMTcgMCAtMzUuNSAtMTR0LTI4LjUgLTI4bC0xMCAtMTV6TTc2IDU2NWwyMzcgMzM5aDUwM2w4OSAtMTAwdi0yOTRsLTM0MCAtMTMwIHEtMjAgLTYgLTQwIC0yMHQtMjAgLTI5di0yMDJxMCAtMjIgLTI1IC0zMXQtNTAgMHQtMjUgMzF2NDU2djE0LjV0LTEuNSAxMS41dC01IDEydC05LjUgN3EtMjQgMTMgLTQ2IC01bC0xODQgLTE0NnpNMzA1IDExMDR2MjAwaDYwMHYtMjAwaC02MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMzE7IiBkPSJNNSA1OTdxMCAxMjIgNDcuNSAyMzIuNXQxMjcuNSAxOTAuNXQxOTAuNSAxMjcuNXQyMzIuNSA0Ny41cTE2MiAwIDI5OS41IC04MHQyMTcuNSAtMjE4dDgwIC0zMDB0LTgwIC0yOTkuNXQtMjE3LjUgLTIxNy41dC0yOTkuNSAtODB0LTMwMCA4MHQtMjE4IDIxNy41dC04MCAyOTkuNXpNMzAwIDUwMGgzMDBsLTIgLTE5NGw0MDIgMjk0bC00MDIgMjk4di0xOTdoLTI5OHYtMjAxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTMyOyIgZD0iTTAgNTk3cTAgMTIyIDQ3LjUgMjMyLjV0MTI3LjUgMTkwLjV0MTkwLjUgMTI3LjV0MjMxLjUgNDcuNXExMjIgMCAyMzIuNSAtNDcuNXQxOTAuNSAtMTI3LjV0MTI3LjUgLTE5MC41dDQ3LjUgLTIzMi41cTAgLTE2MiAtODAgLTI5OS41dC0yMTggLTIxNy41dC0zMDAgLTgwdC0yOTkuNSA4MHQtMjE3LjUgMjE3LjV0LTgwIDI5OS41ek0yMDAgNjAwbDQwMCAtMjk0djE5NGgzMDJ2MjAxaC0zMDB2MTk3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTMzOyIgZD0iTTUgNTk3cTAgMTIyIDQ3LjUgMjMyLjV0MTI3LjUgMTkwLjV0MTkwLjUgMTI3LjV0MjMyLjUgNDcuNXExMjEgMCAyMzEuNSAtNDcuNXQxOTAuNSAtMTI3LjV0MTI3LjUgLTE5MC41dDQ3LjUgLTIzMi41cTAgLTE2MiAtODAgLTI5OS41dC0yMTcuNSAtMjE3LjV0LTI5OS41IC04MHQtMzAwIDgwdC0yMTggMjE3LjV0LTgwIDI5OS41ek0zMDAgNjAwaDIwMHYtMzAwaDIwMHYzMDBoMjAwbC0zMDAgNDAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTM0OyIgZD0iTTUgNTk3cTAgMTIyIDQ3LjUgMjMyLjV0MTI3LjUgMTkwLjV0MTkwLjUgMTI3LjV0MjMyLjUgNDcuNXExMjEgMCAyMzEuNSAtNDcuNXQxOTAuNSAtMTI3LjV0MTI3LjUgLTE5MC41dDQ3LjUgLTIzMi41cTAgLTE2MiAtODAgLTI5OS41dC0yMTcuNSAtMjE3LjV0LTI5OS41IC04MHQtMzAwIDgwdC0yMTggMjE3LjV0LTgwIDI5OS41ek0zMDAgNjAwbDMwMCAtNDAwbDMwMCA0MDBoLTIwMHYzMDBoLTIwMHYtMzAwaC0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMzU7IiBkPSJNNSA1OTdxMCAxMjIgNDcuNSAyMzIuNXQxMjcuNSAxOTAuNXQxOTAuNSAxMjcuNXQyMzIuNSA0Ny41cTEyMSAwIDIzMS41IC00Ny41dDE5MC41IC0xMjcuNXQxMjcuNSAtMTkwLjV0NDcuNSAtMjMyLjVxMCAtMTYyIC04MCAtMjk5LjV0LTIxNy41IC0yMTcuNXQtMjk5LjUgLTgwdC0zMDAgODB0LTIxOCAyMTcuNXQtODAgMjk5LjV6TTI1NCA3ODBxLTggLTM0IDUuNSAtOTN0Ny41IC04N3EwIC05IDE3IC00NHQxNiAtNjBxMTIgMCAyMyAtNS41IHQyMyAtMTV0MjAgLTEzLjVxMjAgLTEwIDEwOCAtNDJxMjIgLTggNTMgLTMxLjV0NTkuNSAtMzguNXQ1Ny41IC0xMXE4IC0xOCAtMTUgLTU1LjV0LTIwIC01Ny41cTEyIC0yMSAyMi41IC0zNC41dDI4IC0yN3QzNi41IC0xNy41cTAgLTYgLTMgLTE1LjV0LTMuNSAtMTQuNXQ0LjUgLTE3cTEwMSAtMiAyMjEgMTExcTMxIDMwIDQ3IDQ4dDM0IDQ5dDIxIDYycS0xNCA5IC0zNy41IDkuNXQtMzUuNSA3LjVxLTE0IDcgLTQ5IDE1dC01MiAxOSBxLTkgMCAtMzkuNSAtMC41dC00Ni41IC0xLjV0LTM5IC02LjV0LTM5IC0xNi41cS01MCAtMzUgLTY2IC0xMnEtNCAyIC0zLjUgMjUuNXQwLjUgMjUuNXEtNiAxMyAtMjYuNSAxN3QtMjQuNSA3cTIgMjIgLTIgNDF0LTE2LjUgMjh0LTM4LjUgLTIwcS0yMyAtMjUgLTQyIDRxLTE5IDI4IC04IDU4cTggMTYgMjIgMjJxNiAtMSAyNiAtMS41dDMzLjUgLTQuNXQxOS41IC0xM3ExMiAtMTkgMzIgLTM3LjV0MzQgLTI3LjVsMTQgLThxMCAzIDkuNSAzOS41IHQ1LjUgNTcuNXEtNCAyMyAxNC41IDQ0LjV0MjIuNSAzMS41cTUgMTQgMTAgMzV0OC41IDMxdDE1LjUgMjIuNXQzNCAyMS41cS02IDE4IDEwIDM3cTggMCAyMy41IC0xLjV0MjQuNSAtMS41dDIwLjUgNC41dDIwLjUgMTUuNXEtMTAgMjMgLTMwLjUgNDIuNXQtMzggMzB0LTQ5IDI2LjV0LTQzLjUgMjNxMTEgNDEgMSA0NHEzMSAtMTMgNTguNSAtMTQuNXQzOS41IDMuNWwxMSA0cTYgMzYgLTE3IDUzLjV0LTY0IDI4LjV0LTU2IDIzIHEtMTkgLTMgLTM3IDBxLTE1IC0xMiAtMzYuNSAtMjF0LTM0LjUgLTEydC00NCAtOHQtMzkgLTZxLTE1IC0zIC00NiAwdC00NSAtM3EtMjAgLTYgLTUxLjUgLTI1LjV0LTM0LjUgLTM0LjVxLTMgLTExIDYuNSAtMjIuNXQ4LjUgLTE4LjVxLTMgLTM0IC0yNy41IC05MXQtMjkuNSAtNzl6TTUxOCA5MTVxMyAxMiAxNiAzMC41dDE2IDI1LjVxMTAgLTEwIDE4LjUgLTEwdDE0IDZ0MTQuNSAxNC41dDE2IDEyLjVxMCAtMTggOCAtNDIuNXQxNi41IC00NCB0OS41IC0yMy41cS02IDEgLTM5IDV0LTUzLjUgMTB0LTM2LjUgMTZ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMzY7IiBkPSJNMCAxNjQuNXEwIDIxLjUgMTUgMzcuNWw2MDAgNTk5cS0zMyAxMDEgNiAyMDEuNXQxMzUgMTU0LjVxMTY0IDkyIDMwNiAtOWwtMjU5IC0xMzhsMTQ1IC0yMzJsMjUxIDEyNnExMyAtMTc1IC0xNTEgLTI2N3EtMTIzIC03MCAtMjUzIC0yM2wtNTk2IC01OTZxLTE1IC0xNiAtMzYuNSAtMTZ0LTM2LjUgMTZsLTExMSAxMTBxLTE1IDE1IC0xNSAzNi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTM3OyIgaG9yaXotYWR2LXg9IjEyMjAiIGQ9Ik0wIDE5NnYxMDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41aDEwMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV6TTAgNTk2djEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTAwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtMTAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0xMDAwIHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV6TTAgOTk2djEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTAwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtMTAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0xMDAwcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXpNNjAwIDU5Nmg1MDB2MTAwaC01MDB2LTEwMHpNODAwIDE5NmgzMDB2MTAwaC0zMDB2LTEwMHpNOTAwIDk5NmgyMDB2MTAwaC0yMDB2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEzODsiIGQ9Ik0xMDAgMTEwMHYxMDBoMTAwMHYtMTAwaC0xMDAwek0xNTAgMTAwMGg5MDBsLTM1MCAtNTAwdi0zMDBsLTIwMCAtMjAwdjUwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEzOTsiIGQ9Ik0wIDIwMHYyMDBoMTIwMHYtMjAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0xMDAwcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXpNMCA1MDB2NDAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgzMDB2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgyMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMGgzMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTQwMGgtNTAwdjEwMGgtMjAwdi0xMDBoLTUwMHogTTUwMCAxMDAwaDIwMHYxMDBoLTIwMHYtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTQwOyIgZD0iTTAgMHY0MDBsMTI5IC0xMjlsMjAwIDIwMGwxNDIgLTE0MmwtMjAwIC0yMDBsMTI5IC0xMjloLTQwMHpNMCA4MDBsMTI5IDEyOWwyMDAgLTIwMGwxNDIgMTQybC0yMDAgMjAwbDEyOSAxMjloLTQwMHYtNDAwek03MjkgMzI5bDE0MiAxNDJsMjAwIC0yMDBsMTI5IDEyOXYtNDAwaC00MDBsMTI5IDEyOXpNNzI5IDg3MWwyMDAgMjAwbC0xMjkgMTI5aDQwMHYtNDAwbC0xMjkgMTI5bC0yMDAgLTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE0MTsiIGQ9Ik0wIDU5NnEwIDE2MiA4MCAyOTl0MjE3IDIxN3QyOTkgODB0Mjk5IC04MHQyMTcgLTIxN3Q4MCAtMjk5dC04MCAtMjk5dC0yMTcgLTIxN3QtMjk5IC04MHQtMjk5IDgwdC0yMTcgMjE3dC04MCAyOTl6TTE4MiA1OTZxMCAtMTcyIDEyMS41IC0yOTN0MjkyLjUgLTEyMXQyOTIuNSAxMjF0MTIxLjUgMjkzcTAgMTcxIC0xMjEuNSAyOTIuNXQtMjkyLjUgMTIxLjV0LTI5Mi41IC0xMjEuNXQtMTIxLjUgLTI5Mi41ek0yOTEgNjU1IHEwIDIzIDE1LjUgMzguNXQzOC41IDE1LjV0MzkgLTE2dDE2IC0zOHEwIC0yMyAtMTYgLTM5dC0zOSAtMTZxLTIyIDAgLTM4IDE2dC0xNiAzOXpNNDAwIDg1MHEwIDIyIDE2IDM4LjV0MzkgMTYuNXEyMiAwIDM4IC0xNnQxNiAtMzl0LTE2IC0zOXQtMzggLTE2cS0yMyAwIC0zOSAxNi41dC0xNiAzOC41ek01MTMgNjA5cTAgMzIgMjEgNTYuNXQ1MiAyOS41bDEyMiAxMjZsMSAxcS05IDE0IC05IDI4cTAgMjIgMTYgMzguNXQzOSAxNi41IHEyMiAwIDM4IC0xNnQxNiAtMzl0LTE2IC0zOXQtMzggLTE2cS0xNiAwIC0yOSAxMGwtNTUgLTE0NXExNyAtMjIgMTcgLTUxcTAgLTM2IC0yNS41IC02MS41dC02MS41IC0yNS41cS0zNyAwIC02Mi41IDI1LjV0LTI1LjUgNjEuNXpNODAwIDY1NXEwIDIyIDE2IDM4dDM5IDE2dDM4LjUgLTE1LjV0MTUuNSAtMzguNXQtMTYgLTM5dC0zOCAtMTZxLTIzIDAgLTM5IDE2dC0xNiAzOXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE0MjsiIGQ9Ik0tNDAgMzc1cS0xMyAtOTUgMzUgLTE3M3EzNSAtNTcgOTQgLTg5dDEyOSAtMzJxNjMgMCAxMTkgMjhxMzMgMTYgNjUgNDAuNXQ1Mi41IDQ1LjV0NTkuNSA2NHE0MCA0NCA1NyA2MWwzOTQgMzk0cTM1IDM1IDQ3IDg0dC0zIDk2cS0yNyA4NyAtMTE3IDEwNHEtMjAgMiAtMjkgMnEtNDYgMCAtNzkuNSAtMTd0LTY3LjUgLTUxbC0zODggLTM5NmwtNyAtN2w2OSAtNjdsMzc3IDM3M3EyMCAyMiAzOSAzOHEyMyAyMyA1MCAyM3EzOCAwIDUzIC0zNiBxMTYgLTM5IC0yMCAtNzVsLTU0NyAtNTQ3cS01MiAtNTIgLTEyNSAtNTJxLTU1IDAgLTEwMCAzM3QtNTQgOTZxLTUgMzUgMi41IDY2dDMxLjUgNjN0NDIgNTB0NTYgNTRxMjQgMjEgNDQgNDFsMzQ4IDM0OHE1MiA1MiA4Mi41IDc5LjV0ODQgNTR0MTA3LjUgMjYuNXEyNSAwIDQ4IC00cTk1IC0xNyAxNTQgLTk0LjV0NTEgLTE3NS41cS03IC0xMDEgLTk4IC0xOTJsLTI1MiAtMjQ5bC0yNTMgLTI1Nmw3IC03bDY5IC02MGw1MTcgNTExIHE2NyA2NyA5NSAxNTd0MTEgMTgzcS0xNiA4NyAtNjcgMTU0dC0xMzAgMTAzcS02OSAzMyAtMTUyIDMzcS0xMDcgMCAtMTk3IC01NXEtNDAgLTI0IC0xMTEgLTk1bC01MTIgLTUxMnEtNjggLTY4IC04MSAtMTYzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTQzOyIgZD0iTTc5IDc4NHEwIDEzMSA5OSAyMjkuNXQyMzAgOTguNXExNDQgMCAyNDIgLTEyOXExMDMgMTI5IDI0NSAxMjlxMTMwIDAgMjI3IC05OC41dDk3IC0yMjkuNXEwIC00NiAtMTcuNSAtOTF0LTYxIC05OXQtNzcgLTg5LjV0LTEwNC41IC0xMDUuNXEtMTk3IC0xOTEgLTI5MyAtMzIybC0xNyAtMjNsLTE2IDIzcS00MyA1OCAtMTAwIDEyMi41dC05MiA5OS41dC0xMDEgMTAwbC04NC41IDg0LjV0LTY4IDc0dC02MCA3OHQtMzMuNSA3MC41dC0xNSA3OHogTTI1MCA3ODRxMCAtMjcgMzAuNSAtNzB0NjEuNSAtNzUuNXQ5NSAtOTQuNWwyMiAtMjJxOTMgLTkwIDE5MCAtMjAxcTgyIDkyIDE5NSAyMDNsMTIgMTJxNjQgNjIgOTcuNSA5N3Q2NC41IDc5dDMxIDcycTAgNzEgLTQ4IDExOS41dC0xMDYgNDguNXEtNzMgMCAtMTMxIC04M2wtMTE4IC0xNzFsLTExNCAxNzRxLTUxIDgwIC0xMjQgODBxLTU5IDAgLTEwOC41IC00OS41dC00OS41IC0xMTguNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE0NDsiIGQ9Ik01NyAzNTNxMCAtOTQgNjYgLTE2MGwxNDEgLTE0MXE2NiAtNjYgMTU5IC02NnE5NSAwIDE1OSA2NmwyODMgMjgzcTY2IDY2IDY2IDE1OXQtNjYgMTU5bC0xNDEgMTQxcS0xMiAxMiAtMTkgMTdsLTEwNSAtMTA1bDIxMiAtMjEybC0zODkgLTM4OWwtMjQ3IDI0OGw5NSA5NWwtMTggMThxLTQ2IDQ1IC03NSAxMDFsLTU1IC01NXEtNjYgLTY2IC02NiAtMTU5ek0yNjkgNzA2cTAgLTkzIDY2IC0xNTlsMTQxIC0xNDFsMTkgLTE3bDEwNSAxMDUgbC0yMTIgMjEybDM4OSAzODlsMjQ3IC0yNDdsLTk1IC05NmwxOCAtMThxNDYgLTQ2IDc3IC05OWwyOSAyOXEzNSAzNSA2Mi41IDg4dDI3LjUgOTZxMCA5MyAtNjYgMTU5bC0xNDEgMTQxcS02NiA2NiAtMTU5IDY2cS05NSAwIC0xNTkgLTY2bC0yODMgLTI4M3EtNjYgLTY0IC02NiAtMTU5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTQ1OyIgZD0iTTIwMCAxMDB2OTUzcTAgMjEgMzAgNDZ0ODEgNDh0MTI5IDM4dDE2MyAxNXQxNjIgLTE1dDEyNyAtMzh0NzkgLTQ4dDI5IC00NnYtOTUzcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC02MDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41ek0zMDAgMzAwaDYwMHY3MDBoLTYwMHYtNzAwek00OTYgMTUwcTAgLTQzIDMwLjUgLTczLjV0NzMuNSAtMzAuNXQ3My41IDMwLjV0MzAuNSA3My41dC0zMC41IDczLjV0LTczLjUgMzAuNSB0LTczLjUgLTMwLjV0LTMwLjUgLTczLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNDY7IiBkPSJNMCAwbDMwMyAzODBsMjA3IDIwOGwtMjEwIDIxMmgzMDBsMjY3IDI3OWwtMzUgMzZxLTE1IDE0IC0xNSAzNXQxNSAzNXExNCAxNSAzNSAxNXQzNSAtMTVsMjgzIC0yODJxMTUgLTE1IDE1IC0zNnQtMTUgLTM1cS0xNCAtMTUgLTM1IC0xNXQtMzUgMTVsLTM2IDM1bC0yNzkgLTI2N3YtMzAwbC0yMTIgMjEwbC0yMDggLTIwN3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE0ODsiIGQ9Ik0yOTUgNDMzaDEzOXE1IC03NyA0OC41IC0xMjYuNXQxMTcuNSAtNjQuNXYzMzVsLTI3IDdxLTQ2IDE0IC03OSAyNi41dC03MiAzNnQtNjIuNSA1MnQtNDAgNzIuNXQtMTYuNSA5OXEwIDkyIDQ0IDE1OS41dDEwOSAxMDF0MTQ0IDQwLjV2NzhoMTAwdi03OXEzOCAtNCA3Mi41IC0xMy41dDc1LjUgLTMxLjV0NzEgLTUzLjV0NTEuNSAtODR0MjQuNSAtMTE4LjVoLTE1OXEtOCA3MiAtMzUgMTA5LjV0LTEwMSA1MC41di0zMDdsNjQgLTE0IHEzNCAtNyA2NCAtMTYuNXQ3MCAtMzEuNXQ2Ny41IC01MnQ0Ny41IC04MC41dDIwIC0xMTIuNXEwIC0xMzkgLTg5IC0yMjR0LTI0NCAtOTZ2LTc3aC0xMDB2NzhxLTE1MiAxNyAtMjM3IDEwNHEtNDAgNDAgLTUyLjUgOTMuNXQtMTUuNSAxMzkuNXpNNDY2IDg4OXEwIC0yOSA4IC01MXQxNi41IC0zNHQyOS41IC0yMi41dDMxIC0xMy41dDM4IC0xMHE3IC0yIDExIC0zdjI3NHEtNjEgLTggLTk3LjUgLTM3LjV0LTM2LjUgLTEwMi41ek03MDAgMjM3IHExNzAgMTggMTcwIDE1MXEwIDY0IC00NCA5OS41dC0xMjYgNjAuNXYtMzExeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTQ5OyIgZD0iTTEwMCA2MDB2MTAwaDE2NnEtMjQgNDkgLTQ0IDEwNHEtMTAgMjYgLTE0LjUgNTUuNXQtMyA3Mi41dDI1IDkwdDY4LjUgODdxOTcgODggMjYzIDg4cTEyOSAwIDIzMCAtODl0MTAxIC0yMDhoLTE1M3EwIDUyIC0zNCA4OS41dC03NCA1MS41dC03NiAxNHEtMzcgMCAtNzkgLTE0LjV0LTYyIC0zNS41cS00MSAtNDQgLTQxIC0xMDFxMCAtMTEgMi41IC0yNC41dDUuNSAtMjR0OS41IC0yNi41dDEwLjUgLTI1dDE0IC0yNy41dDE0IC0yNS41IHQxNS41IC0yN3QxMy41IC0yNGgyNDJ2LTEwMGgtMTk3cTggLTUwIC0yLjUgLTExNXQtMzEuNSAtOTRxLTQxIC01OSAtOTkgLTExM3EzNSAxMSA4NCAxOHQ3MCA3cTMyIDEgMTAyIC0xNnQxMDQgLTE3cTc2IDAgMTM2IDMwbDUwIC0xNDdxLTQxIC0yNSAtODAuNSAtMzYuNXQtNTkgLTEzdC02MS41IC0xLjVxLTIzIDAgLTEyOCAzM3QtMTU1IDI5cS0zOSAtNCAtODIgLTE3dC02NiAtMjVsLTI0IC0xMWwtNTUgMTQ1bDE2LjUgMTF0MTUuNSAxMCB0MTMuNSA5LjV0MTQuNSAxMnQxNC41IDE0dDE3LjUgMTguNXE0OCA1NSA1NCAxMjYuNXQtMzAgMTQyLjVoLTIyMXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE1MDsiIGQ9Ik0yIDMwMGwyOTggLTMwMGwyOTggMzAwaC0xOTh2OTAwaC0yMDB2LTkwMGgtMTk4ek02MDIgOTAwbDI5OCAzMDBsMjk4IC0zMDBoLTE5OHYtOTAwaC0yMDB2OTAwaC0xOTh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNTE7IiBkPSJNMiAzMDBoMTk4djkwMGgyMDB2LTkwMGgxOThsLTI5OCAtMzAwek03MDAgMHYyMDBoMTAwdi0xMDBoMjAwdi0xMDBoLTMwMHpNNzAwIDQwMHYxMDBoMzAwdi0yMDBoLTk5di0xMDBoLTEwMHYxMDBoOTl2MTAwaC0yMDB6TTcwMCA3MDB2NTAwaDMwMHYtNTAwaC0xMDB2MTAwaC0xMDB2LTEwMGgtMTAwek04MDEgOTAwaDEwMHYyMDBoLTEwMHYtMjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTUyOyIgZD0iTTIgMzAwaDE5OHY5MDBoMjAwdi05MDBoMTk4bC0yOTggLTMwMHpNNzAwIDB2NTAwaDMwMHYtNTAwaC0xMDB2MTAwaC0xMDB2LTEwMGgtMTAwek03MDAgNzAwdjIwMGgxMDB2LTEwMGgyMDB2LTEwMGgtMzAwek03MDAgMTEwMHYxMDBoMzAwdi0yMDBoLTk5di0xMDBoLTEwMHYxMDBoOTl2MTAwaC0yMDB6TTgwMSAyMDBoMTAwdjIwMGgtMTAwdi0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNTM7IiBkPSJNMiAzMDBsMjk4IC0zMDBsMjk4IDMwMGgtMTk4djkwMGgtMjAwdi05MDBoLTE5OHpNODAwIDEwMHY0MDBoMzAwdi01MDBoLTEwMHYxMDBoLTIwMHpNODAwIDExMDB2MTAwaDIwMHYtNTAwaC0xMDB2NDAwaC0xMDB6TTkwMSAyMDBoMTAwdjIwMGgtMTAwdi0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNTQ7IiBkPSJNMiAzMDBsMjk4IC0zMDBsMjk4IDMwMGgtMTk4djkwMGgtMjAwdi05MDBoLTE5OHpNODAwIDQwMHYxMDBoMjAwdi01MDBoLTEwMHY0MDBoLTEwMHpNODAwIDgwMHY0MDBoMzAwdi01MDBoLTEwMHYxMDBoLTIwMHpNOTAxIDkwMGgxMDB2MjAwaC0xMDB2LTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE1NTsiIGQ9Ik0yIDMwMGwyOTggLTMwMGwyOTggMzAwaC0xOTh2OTAwaC0yMDB2LTkwMGgtMTk4ek03MDAgMTAwdjIwMGg1MDB2LTIwMGgtNTAwek03MDAgNDAwdjIwMGg0MDB2LTIwMGgtNDAwek03MDAgNzAwdjIwMGgzMDB2LTIwMGgtMzAwek03MDAgMTAwMHYyMDBoMjAwdi0yMDBoLTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE1NjsiIGQ9Ik0yIDMwMGwyOTggLTMwMGwyOTggMzAwaC0xOTh2OTAwaC0yMDB2LTkwMGgtMTk4ek03MDAgMTAwdjIwMGgyMDB2LTIwMGgtMjAwek03MDAgNDAwdjIwMGgzMDB2LTIwMGgtMzAwek03MDAgNzAwdjIwMGg0MDB2LTIwMGgtNDAwek03MDAgMTAwMHYyMDBoNTAwdi0yMDBoLTUwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE1NzsiIGQ9Ik0wIDQwMHYzMDBxMCAxNjUgMTE3LjUgMjgyLjV0MjgyLjUgMTE3LjVoMzAwcTE2MiAwIDI4MSAtMTE4LjV0MTE5IC0yODEuNXYtMzAwcTAgLTE2NSAtMTE4LjUgLTI4Mi41dC0yODEuNSAtMTE3LjVoLTMwMHEtMTY1IDAgLTI4Mi41IDExNy41dC0xMTcuNSAyODIuNXpNMjAwIDMwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY1MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjUgaC01MDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE1ODsiIGQ9Ik0wIDQwMHYzMDBxMCAxNjMgMTE5IDI4MS41dDI4MSAxMTguNWgzMDBxMTY1IDAgMjgyLjUgLTExNy41dDExNy41IC0yODIuNXYtMzAwcTAgLTE2NSAtMTE3LjUgLTI4Mi41dC0yODIuNSAtMTE3LjVoLTMwMHEtMTYzIDAgLTI4MS41IDExNy41dC0xMTguNSAyODIuNXpNMjAwIDMwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY1MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjUgaC01MDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHpNNDAwIDMwMGwzMzMgMjUwbC0zMzMgMjUwdi01MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNTk7IiBkPSJNMCA0MDB2MzAwcTAgMTYzIDExNy41IDI4MS41dDI4Mi41IDExOC41aDMwMHExNjMgMCAyODEuNSAtMTE5dDExOC41IC0yODF2LTMwMHEwIC0xNjUgLTExNy41IC0yODIuNXQtMjgyLjUgLTExNy41aC0zMDBxLTE2NSAwIC0yODIuNSAxMTcuNXQtMTE3LjUgMjgyLjV6TTIwMCAzMDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41IGgtNTAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDB6TTMwMCA3MDBsMjUwIC0zMzNsMjUwIDMzM2gtNTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTYwOyIgZD0iTTAgNDAwdjMwMHEwIDE2NSAxMTcuNSAyODIuNXQyODIuNSAxMTcuNWgzMDBxMTY1IDAgMjgyLjUgLTExNy41dDExNy41IC0yODIuNXYtMzAwcTAgLTE2MiAtMTE4LjUgLTI4MXQtMjgxLjUgLTExOWgtMzAwcS0xNjUgMCAtMjgyLjUgMTE4LjV0LTExNy41IDI4MS41ek0yMDAgMzAwcTAgLTQxIDI5LjUgLTcwLjV0NzAuNSAtMjkuNWg1MDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41djUwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNSBoLTUwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNTAwek0zMDAgNDAwaDUwMGwtMjUwIDMzM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE2MTsiIGQ9Ik0wIDQwMHYzMDBoMzAwdjIwMGw0MDAgLTM1MGwtNDAwIC0zNTB2MjAwaC0zMDB6TTUwMCAwdjIwMGg1MDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41djUwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNWgtNTAwdjIwMGg0MDBxMTY1IDAgMjgyLjUgLTExNy41dDExNy41IC0yODIuNXYtMzAwcTAgLTE2NSAtMTE3LjUgLTI4Mi41dC0yODIuNSAtMTE3LjVoLTQwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE2MjsiIGQ9Ik0yMTYgNTE5cTEwIC0xOSAzMiAtMTloMzAycS0xNTUgLTQzOCAtMTYwIC00NThxLTUgLTIxIDQgLTMybDkgLThsOSAtMXExMyAwIDI2IDE2bDUzOCA2MzBxMTUgMTkgNiAzNnEtOCAxOCAtMzIgMTZoLTMwMHExIDQgNzggMjE5LjV0NzkgMjI3LjVxMiAxNyAtNiAyN2wtOCA4aC05cS0xNiAwIC0yNSAtMTVxLTQgLTUgLTk4LjUgLTExMS41dC0yMjggLTI1N3QtMjA5LjUgLTIzOC41cS0xNyAtMTkgLTcgLTQweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTYzOyIgZD0iTTAgNDAwcTAgLTE2NSAxMTcuNSAtMjgyLjV0MjgyLjUgLTExNy41aDMwMHE0NyAwIDEwMCAxNXYxODVoLTUwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2NTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWg1MDB2MTg1cS0xNCA0IC0xMTQgNy41dC0xOTMgNS41bC05MyAycS0xNjUgMCAtMjgyLjUgLTExNy41dC0xMTcuNSAtMjgyLjV2LTMwMHpNNjAwIDQwMHYzMDBoMzAwdjIwMGw0MDAgLTM1MGwtNDAwIC0zNTB2MjAwaC0zMDB6ICIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTY0OyIgZD0iTTAgNDAwcTAgLTE2NSAxMTcuNSAtMjgyLjV0MjgyLjUgLTExNy41aDMwMHExNjMgMCAyODEuNSAxMTcuNXQxMTguNSAyODIuNXY5OGwtNzggNzNsLTEyMiAtMTIzdi0xNDhxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTUwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2NTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxNTZsMTE4IDEyMmwtNzQgNzhoLTEwMHEtMTY1IDAgLTI4Mi41IC0xMTcuNXQtMTE3LjUgLTI4Mi41IHYtMzAwek00OTYgNzA5bDM1MyAzNDJsLTE0OSAxNDloNTAwdi01MDBsLTE0OSAxNDlsLTM0MiAtMzUzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTY1OyIgZD0iTTQgNjAwcTAgMTYyIDgwIDI5OXQyMTcgMjE3dDI5OSA4MHQyOTkgLTgwdDIxNyAtMjE3dDgwIC0yOTl0LTgwIC0yOTl0LTIxNyAtMjE3dC0yOTkgLTgwdC0yOTkgODB0LTIxNyAyMTd0LTgwIDI5OXpNMTg2IDYwMHEwIC0xNzEgMTIxLjUgLTI5Mi41dDI5Mi41IC0xMjEuNXQyOTIuNSAxMjEuNXQxMjEuNSAyOTIuNXQtMTIxLjUgMjkyLjV0LTI5Mi41IDEyMS41dC0yOTIuNSAtMTIxLjV0LTEyMS41IC0yOTIuNXpNNDA2IDYwMCBxMCA4MCA1NyAxMzd0MTM3IDU3dDEzNyAtNTd0NTcgLTEzN3QtNTcgLTEzN3QtMTM3IC01N3QtMTM3IDU3dC01NyAxMzd6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNjY7IiBkPSJNMCAwdjI3NXEwIDExIDcgMTh0MTggN2gxMDQ4cTExIDAgMTkgLTcuNXQ4IC0xNy41di0yNzVoLTExMDB6TTEwMCA4MDBsNDQ1IC01MDBsNDUwIDUwMGgtMjk1djQwMGgtMzAwdi00MDBoLTMwMHpNOTAwIDE1MGgxMDB2NTBoLTEwMHYtNTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNjc7IiBkPSJNMCAwdjI3NXEwIDExIDcgMTh0MTggN2gxMDQ4cTExIDAgMTkgLTcuNXQ4IC0xNy41di0yNzVoLTExMDB6TTEwMCA3MDBoMzAwdi0zMDBoMzAwdjMwMGgyOTVsLTQ0NSA1MDB6TTkwMCAxNTBoMTAwdjUwaC0xMDB2LTUweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTY4OyIgZD0iTTAgMHYyNzVxMCAxMSA3IDE4dDE4IDdoMTA0OHExMSAwIDE5IC03LjV0OCAtMTcuNXYtMjc1aC0xMTAwek0xMDAgNzA1bDMwNSAtMzA1bDU5NiA1OTZsLTE1NCAxNTVsLTQ0MiAtNDQybC0xNTAgMTUxek05MDAgMTUwaDEwMHY1MGgtMTAwdi01MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE2OTsiIGQ9Ik0wIDB2Mjc1cTAgMTEgNyAxOHQxOCA3aDEwNDhxMTEgMCAxOSAtNy41dDggLTE3LjV2LTI3NWgtMTEwMHpNMTAwIDk4OGw5NyAtOThsMjEyIDIxM2wtOTcgOTd6TTIwMCA0MDFoNzAwdjY5OWwtMjUwIC0yMzlsLTE0OSAxNDlsLTIxMiAtMjEybDE0OSAtMTQ5ek05MDAgMTUwaDEwMHY1MGgtMTAwdi01MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE3MDsiIGQ9Ik0wIDB2Mjc1cTAgMTEgNyAxOHQxOCA3aDEwNDhxMTEgMCAxOSAtNy41dDggLTE3LjV2LTI3NWgtMTEwMHpNMjAwIDYxMmwyMTIgLTIxMmw5OCA5N2wtMjEzIDIxMnpNMzAwIDEyMDBsMjM5IC0yNTBsLTE0OSAtMTQ5bDIxMiAtMjEybDE0OSAxNDhsMjQ4IC0yMzd2NzAwaC02OTl6TTkwMCAxNTBoMTAwdjUwaC0xMDB2LTUweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTcxOyIgZD0iTTIzIDQxNWwxMTc3IDc4NHYtMTA3OWwtNDc1IDI3MmwtMzEwIC0zOTN2NDE2aC0zOTJ6TTQ5NCAyMTBsNjcyIDkzOGwtNjcyIC03MTJ2LTIyNnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE3MjsiIGQ9Ik0wIDE1MHYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwbDIwMCAtMjAwdi04NTBxMCAtMjEgLTE1IC0zNS41dC0zNSAtMTQuNWgtMTUwdjQwMGgtNzAwdi00MDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTYwMCAxMDAwaDEwMHYyMDBoLTEwMHYtMjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTczOyIgZD0iTTAgMTUwdjEwMDBxMCAyMCAxNC41IDM1dDM1LjUgMTVoMjUwdi0zMDBoNTAwdjMwMGgxMDBsMjAwIC0yMDB2LTIxOGwtMjc2IC0yNzVsLTEyMCAxMjBsLTEyNiAtMTI3aC0zNzh2LTQwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNTgxIDMwNmwxMjMgMTIzbDEyMCAtMTIwbDM1MyAzNTJsMTIzIC0xMjNsLTQ3NSAtNDc2ek02MDAgMTAwMGgxMDB2MjAwaC0xMDB2LTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NDsiIGQ9Ik0wIDE1MHYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwbDIwMCAtMjAwdi0yNjlsLTEwMyAtMTAzbC0xNzAgMTcwbC0yOTggLTI5OGgtMzI5di00MDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTYwMCAxMDAwaDEwMHYyMDBoLTEwMHYtMjAwek03MDAgMTMzbDE3MCAxNzBsLTE3MCAxNzBsMTI3IDEyN2wxNzAgLTE3MGwxNzAgMTcwbDEyNyAtMTI4bC0xNzAgLTE2OWwxNzAgLTE3MCBsLTEyNyAtMTI3bC0xNzAgMTcwbC0xNzAgLTE3MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NTsiIGQ9Ik0wIDE1MHYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwbDIwMCAtMjAwdi0zMDBoLTQwMHYtMjAwaC01MDB2LTQwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNjAwIDMwMGwzMDAgLTMwMGwzMDAgMzAwaC0yMDB2MzAwaC0yMDB2LTMwMGgtMjAwek02MDAgMTAwMHYyMDBoMTAwdi0yMDBoLTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NjsiIGQ9Ik0wIDE1MHYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwbDIwMCAtMjAwdi00MDJsLTIwMCAyMDBsLTI5OCAtMjk4aC00MDJ2LTQwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNjAwIDMwMGgyMDB2LTMwMGgyMDB2MzAwaDIwMGwtMzAwIDMwMHpNNjAwIDEwMDB2MjAwaDEwMHYtMjAwaC0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNzc7IiBkPSJNMCAyNTBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41aDExMDBxMjEgMCAzNS41IDE0LjV0MTQuNSAzNS41djU1MGgtMTIwMHYtNTUwek0wIDkwMGgxMjAwdjE1MHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMTEwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTUwek0xMDAgMzAwdjIwMGg0MDB2LTIwMGgtNDAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTc4OyIgZD0iTTAgNDAwbDMwMCAyOTh2LTE5OGg0MDB2LTIwMGgtNDAwdi0xOTh6TTEwMCA4MDB2MjAwaDEwMHYtMjAwaC0xMDB6TTMwMCA4MDB2MjAwaDEwMHYtMjAwaC0xMDB6TTUwMCA4MDB2MjAwaDQwMHYxOThsMzAwIC0yOThsLTMwMCAtMjk4djE5OGgtNDAwek04MDAgMzAwdjIwMGgxMDB2LTIwMGgtMTAwek0xMDAwIDMwMGgxMDB2MjAwaC0xMDB2LTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE3OTsiIGQ9Ik0xMDAgNzAwdjQwMGw1MCAxMDBsNTAgLTEwMHYtMzAwaDEwMHYzMDBsNTAgMTAwbDUwIC0xMDB2LTMwMGgxMDB2MzAwbDUwIDEwMGw1MCAtMTAwdi00MDBsLTEwMCAtMjAzdi00NDdxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDQ3ek04MDAgNTk3cTAgLTI5IDEwLjUgLTU1LjV0MjUgLTQzdDI5IC0yOC41dDI1LjUgLTE4bDEwIC01di0zOTdxMCAtMjEgMTQuNSAtMzUuNSB0MzUuNSAtMTQuNWgyMDBxMjEgMCAzNS41IDE0LjV0MTQuNSAzNS41djExMDZxMCAzMSAtMTggNDAuNXQtNDQgLTcuNWwtMjc2IC0xMTdxLTI1IC0xNiAtNDMuNSAtNTAuNXQtMTguNSAtNjUuNXYtMzU5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTgwOyIgZD0iTTEwMCAwaDQwMHY1NnEtNzUgMCAtODcuNSA2dC0xMi41IDQ0djM5NGg1MDB2LTM5NHEwIC0zOCAtMTIuNSAtNDR0LTg3LjUgLTZ2LTU2aDQwMHY1NnEtNCAwIC0xMSAwLjV0LTI0IDN0LTMwIDd0LTI0IDE1dC0xMSAyNC41djg4OHEwIDIyIDI1IDM0LjV0NTAgMTMuNWwyNSAydjU2aC00MDB2LTU2cTc1IDAgODcuNSAtNnQxMi41IC00NHYtMzk0aC01MDB2Mzk0cTAgMzggMTIuNSA0NHQ4Ny41IDZ2NTZoLTQwMHYtNTZxNCAwIDExIC0wLjUgdDI0IC0zdDMwIC03dDI0IC0xNXQxMSAtMjQuNXYtODg4cTAgLTIyIC0yNSAtMzQuNXQtNTAgLTEzLjVsLTI1IC0ydi01NnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE4MTsiIGQ9Ik0wIDMwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoMzAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY1MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjVoLTMwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNTAwek0xMDAgMTAwaDQwMGwyMDAgMjAwaDEwNWwyOTUgOTh2LTI5OGgtNDI1bC0xMDAgLTEwMGgtMzc1ek0xMDAgMzAwdjIwMGgzMDB2LTIwMGgtMzAwek0xMDAgNjAwdjIwMGgzMDB2LTIwMGgtMzAweiBNMTAwIDEwMDBoNDAwbDIwMCAtMjAwdi05OGwyOTUgOThoMTA1djIwMGgtNDI1bC0xMDAgMTAwaC0zNzV6TTcwMCA0MDJ2MTYzbDQwMCAxMzN2LTE2M3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE4MjsiIGQ9Ik0xNi41IDk3NC41cTAuNSAtMjEuNSAxNiAtOTB0NDYuNSAtMTQwdDEwNCAtMTc3LjV0MTc1IC0yMDhxMTAzIC0xMDMgMjA3LjUgLTE3NnQxODAgLTEwMy41dDEzNyAtNDd0OTIuNSAtMTYuNWwzMSAxbDE2MyAxNjJxMTYgMTcgMTMgNDAuNXQtMjIgMzcuNWwtMTkyIDEzNnEtMTkgMTQgLTQ1IDEydC00MiAtMTlsLTExOSAtMTE4cS0xNDMgMTAzIC0yNjcgMjI3cS0xMjYgMTI2IC0yMjcgMjY4bDExOCAxMThxMTcgMTcgMjAgNDEuNSB0LTExIDQ0LjVsLTEzOSAxOTRxLTE0IDE5IC0zNi41IDIydC00MC41IC0xNGwtMTYyIC0xNjJxLTEgLTExIC0wLjUgLTMyLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxODM7IiBkPSJNMCA1MHYyMTJxMCAyMCAxMC41IDQ1LjV0MjQuNSAzOS41bDM2NSAzMDN2NTBxMCA0IDEgMTAuNXQxMiAyMi41dDMwIDI4LjV0NjAgMjN0OTcgMTAuNXQ5NyAtMTB0NjAgLTIzLjV0MzAgLTI3LjV0MTIgLTI0bDEgLTEwdi01MGwzNjUgLTMwM3ExNCAtMTQgMjQuNSAtMzkuNXQxMC41IC00NS41di0yMTJxMCAtMjEgLTE1IC0zNS41dC0zNSAtMTQuNWgtMTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTAgNzEyIHEwIC0yMSAxNC41IC0zMy41dDM0LjUgLTguNWwyMDIgMzNxMjAgNCAzNC41IDIxdDE0LjUgMzh2MTQ2cTE0MSAyNCAzMDAgMjR0MzAwIC0yNHYtMTQ2cTAgLTIxIDE0LjUgLTM4dDM0LjUgLTIxbDIwMiAtMzNxMjAgLTQgMzQuNSA4LjV0MTQuNSAzMy41djIwMHEtNiA4IC0xOSAyMC41dC02MyA0NXQtMTEyIDU3dC0xNzEgNDV0LTIzNSAyMC41cS05MiAwIC0xNzUgLTEwLjV0LTE0MS41IC0yN3QtMTA4LjUgLTM2LjV0LTgxLjUgLTQwIHQtNTMuNSAtMzYuNXQtMzEgLTI3LjVsLTkgLTEwdi0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxODQ7IiBkPSJNMTAwIDB2MTAwaDExMDB2LTEwMGgtMTEwMHpNMTc1IDIwMGg5NTBsLTEyNSAxNTB2MjUwbDEwMCAxMDB2NDAwaC0xMDB2LTIwMGgtMTAwdjIwMGgtMjAwdi0yMDBoLTEwMHYyMDBoLTIwMHYtMjAwaC0xMDB2MjAwaC0xMDB2LTQwMGwxMDAgLTEwMHYtMjUweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTg1OyIgZD0iTTEwMCAwaDMwMHY0MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjVoLTEwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNDAwek01MDAgMHYxMDAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMDBoLTMwMHpNOTAwIDB2NzAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTcwMGgtMzAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTg2OyIgZD0iTS0xMDAgMzAwdjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4aDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEyek0xMDAgMjAwaDkwMHY3MDBoLTkwMHYtNzAwek0yMDAgMzAwaDMwMHYzMDBoLTIwMHYxMDBoMjAwdjEwMGgtMzAwdi0zMDBoMjAwdi0xMDBoLTIwMHYtMTAwek02MDAgMzAwaDIwMHYxMDBoMTAwdjMwMGgtMTAwdjEwMGgtMjAwdi01MDAgek03MDAgNDAwdjMwMGgxMDB2LTMwMGgtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTg3OyIgZD0iTS0xMDAgMzAwdjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4aDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEyek0xMDAgMjAwaDkwMHY3MDBoLTkwMHYtNzAwek0yMDAgMzAwaDEwMHYyMDBoMTAwdi0yMDBoMTAwdjUwMGgtMTAwdi0yMDBoLTEwMHYyMDBoLTEwMHYtNTAwek02MDAgMzAwaDIwMHYxMDBoMTAwdjMwMGgtMTAwdjEwMGgtMjAwdi01MDAgek03MDAgNDAwdjMwMGgxMDB2LTMwMGgtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTg4OyIgZD0iTS0xMDAgMzAwdjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4aDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEyek0xMDAgMjAwaDkwMHY3MDBoLTkwMHYtNzAwek0yMDAgMzAwaDMwMHYxMDBoLTIwMHYzMDBoMjAwdjEwMGgtMzAwdi01MDB6TTYwMCAzMDBoMzAwdjEwMGgtMjAwdjMwMGgyMDB2MTAwaC0zMDB2LTUwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE4OTsiIGQ9Ik0tMTAwIDMwMHY1MDBxMCAxMjQgODggMjEydDIxMiA4OGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnpNMTAwIDIwMGg5MDB2NzAwaC05MDB2LTcwMHpNMjAwIDU1MGwzMDAgLTE1MHYzMDB6TTYwMCA0MDBsMzAwIDE1MGwtMzAwIDE1MHYtMzAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTkwOyIgZD0iTS0xMDAgMzAwdjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4aDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEyek0xMDAgMjAwaDkwMHY3MDBoLTkwMHYtNzAwek0yMDAgMzAwdjUwMGg3MDB2LTUwMGgtNzAwek0zMDAgNDAwaDEzMHE0MSAwIDY4IDQydDI3IDEwN3QtMjguNSAxMDh0LTY2LjUgNDNoLTEzMHYtMzAwek01NzUgNTQ5IHEwIC02NSAyNyAtMTA3dDY4IC00MmgxMzB2MzAwaC0xMzBxLTM4IDAgLTY2LjUgLTQzdC0yOC41IC0xMDh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxOTE7IiBkPSJNLTEwMCAzMDB2NTAwcTAgMTI0IDg4IDIxMnQyMTIgODhoNzAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnYtNTAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OGgtNzAwcS0xMjQgMCAtMjEyIDg4dC04OCAyMTJ6TTEwMCAyMDBoOTAwdjcwMGgtOTAwdi03MDB6TTIwMCAzMDBoMzAwdjMwMGgtMjAwdjEwMGgyMDB2MTAwaC0zMDB2LTMwMGgyMDB2LTEwMGgtMjAwdi0xMDB6TTYwMSAzMDBoMTAwdjEwMGgtMTAwdi0xMDB6TTcwMCA3MDBoMTAwIHYtNDAwaDEwMHY1MDBoLTIwMHYtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTkyOyIgZD0iTS0xMDAgMzAwdjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4aDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEyek0xMDAgMjAwaDkwMHY3MDBoLTkwMHYtNzAwek0yMDAgMzAwaDMwMHY0MDBoLTIwMHYxMDBoLTEwMHYtNTAwek0zMDEgNDAwdjIwMGgxMDB2LTIwMGgtMTAwek02MDEgMzAwaDEwMHYxMDBoLTEwMHYtMTAwek03MDAgNzAwaDEwMCB2LTQwMGgxMDB2NTAwaC0yMDB2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE5MzsiIGQ9Ik0tMTAwIDMwMHY1MDBxMCAxMjQgODggMjEydDIxMiA4OGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnpNMTAwIDIwMGg5MDB2NzAwaC05MDB2LTcwMHpNMjAwIDcwMHYxMDBoMzAwdi0zMDBoLTk5di0xMDBoLTEwMHYxMDBoOTl2MjAwaC0yMDB6TTIwMSAzMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTYwMSAzMDB2MTAwaDEwMHYtMTAwaC0xMDB6IE03MDAgNzAwdjEwMGgyMDB2LTUwMGgtMTAwdjQwMGgtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTk0OyIgZD0iTTQgNjAwcTAgMTYyIDgwIDI5OXQyMTcgMjE3dDI5OSA4MHQyOTkgLTgwdDIxNyAtMjE3dDgwIC0yOTl0LTgwIC0yOTl0LTIxNyAtMjE3dC0yOTkgLTgwdC0yOTkgODB0LTIxNyAyMTd0LTgwIDI5OXpNMTg2IDYwMHEwIC0xNzEgMTIxLjUgLTI5Mi41dDI5Mi41IC0xMjEuNXQyOTIuNSAxMjEuNXQxMjEuNSAyOTIuNXQtMTIxLjUgMjkyLjV0LTI5Mi41IDEyMS41dC0yOTIuNSAtMTIxLjV0LTEyMS41IC0yOTIuNXpNNDAwIDUwMHYyMDAgbDEwMCAxMDBoMzAwdi0xMDBoLTMwMHYtMjAwaDMwMHYtMTAwaC0zMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxOTU7IiBkPSJNMCA2MDBxMCAxNjIgODAgMjk5dDIxNyAyMTd0Mjk5IDgwdDI5OSAtODB0MjE3IC0yMTd0ODAgLTI5OXQtODAgLTI5OXQtMjE3IC0yMTd0LTI5OSAtODB0LTI5OSA4MHQtMjE3IDIxN3QtODAgMjk5ek0xODIgNjAwcTAgLTE3MSAxMjEuNSAtMjkyLjV0MjkyLjUgLTEyMS41dDI5Mi41IDEyMS41dDEyMS41IDI5Mi41dC0xMjEuNSAyOTIuNXQtMjkyLjUgMTIxLjV0LTI5Mi41IC0xMjEuNXQtMTIxLjUgLTI5Mi41ek00MDAgNDAwdjQwMGgzMDAgbDEwMCAtMTAwdi0xMDBoLTEwMHYxMDBoLTIwMHYtMTAwaDIwMHYtMTAwaC0yMDB2LTEwMGgtMTAwek03MDAgNDAwdjEwMGgxMDB2LTEwMGgtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTk3OyIgZD0iTS0xNCA0OTRxMCAtODAgNTYuNSAtMTM3dDEzNS41IC01N2gyMjJ2MzAwaDQwMHYtMzAwaDEyOHExMjAgMCAyMDUgODZ0ODUgMjA4cTAgMTIwIC04NSAyMDYuNXQtMjA1IDg2LjVxLTQ2IDAgLTkwIC0xNHEtNDQgOTcgLTEzNC41IDE1Ni41dC0yMDAuNSA1OS41cS0xNTIgMCAtMjYwIC0xMDcuNXQtMTA4IC0yNjAuNXEwIC0yNSAyIC0zN3EtNjYgLTE0IC0xMDguNSAtNjcuNXQtNDIuNSAtMTIyLjV6TTMwMCAyMDBoMjAwdjMwMGgyMDB2LTMwMCBoMjAwbC0zMDAgLTMwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE5ODsiIGQ9Ik0tMTQgNDk0cTAgLTgwIDU2LjUgLTEzN3QxMzUuNSAtNTdoOGw0MTQgNDE0bDQwMyAtNDAzcTk0IDI2IDE1NC41IDEwNHQ2MC41IDE3OHEwIDEyMSAtODUgMjA3LjV0LTIwNSA4Ni41cS00NiAwIC05MCAtMTRxLTQ0IDk3IC0xMzQuNSAxNTYuNXQtMjAwLjUgNTkuNXEtMTUyIDAgLTI2MCAtMTA3LjV0LTEwOCAtMjYwLjVxMCAtMjUgMiAtMzdxLTY2IC0xNCAtMTA4LjUgLTY3LjV0LTQyLjUgLTEyMi41ek0zMDAgMjAwbDMwMCAzMDAgbDMwMCAtMzAwaC0yMDB2LTMwMGgtMjAwdjMwMGgtMjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTk5OyIgZD0iTTEwMCAyMDBoNDAwdi0xNTVsLTc1IC00NWgzNTBsLTc1IDQ1djE1NWg0MDBsLTI3MCAzMDBoMTcwbC0yNzAgMzAwaDE3MGwtMzAwIDMzM2wtMzAwIC0zMzNoMTcwbC0yNzAgLTMwMGgxNzB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUyMDA7IiBkPSJNMTIxIDcwMHEwIC01MyAyOC41IC05N3Q3NS41IC02NXEtNCAtMTYgLTQgLTM4cTAgLTc0IDUyLjUgLTEyNi41dDEyNi41IC01Mi41cTU2IDAgMTAwIDMwdi0zMDZsLTc1IC00NWgzNTBsLTc1IDQ1djMwNnE0NiAtMzAgMTAwIC0zMHE3NCAwIDEyNi41IDUyLjV0NTIuNSAxMjYuNXEwIDI0IC05IDU1cTUwIDMyIDc5LjUgODN0MjkuNSAxMTJxMCA5MCAtNjEuNSAxNTUuNXQtMTUwLjUgNzEuNXEtMjYgODkgLTk5LjUgMTQ1LjUgdC0xNjcuNSA1Ni41cS0xMTYgMCAtMTk3LjUgLTgxLjV0LTgxLjUgLTE5Ny41cTAgLTQgMSAtMTJ0MSAtMTFxLTE0IDIgLTIzIDJxLTc0IDAgLTEyNi41IC01Mi41dC01Mi41IC0xMjYuNXoiIC8+Cis8L2ZvbnQ+Cis8L2RlZnM+PC9zdmc+IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLnR0ZiBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLnR0ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDk4ZWY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIudHRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLndvZmYgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci53b2ZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4M2M1MzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci53b2ZmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9odG1sL2xheWVyX2RlcHNfbW9kYWwuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9odG1sL2xheWVyX2RlcHNfbW9kYWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWRiYTQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2h0bWwvbGF5ZXJfZGVwc19tb2RhbC5odG1sCkBAIC0wLDAgKzEsMTcgQEAKKzxkaXYgaWQ9ImRlcGVuZGVuY2llcy1tb2RhbCIgY2xhc3M9Im1vZGFsIGhpZGUgZmFkZSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtaGlkZGVuPSJmYWxzZSI+CisgIDxmb3JtIGlkPSJkZXBlbmRlbmNpZXMtbW9kYWwtZm9ybSI+CisgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KKyAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGFyaWEtaGlkZGVuPSJ0cnVlIj54PC9idXR0b24+CisgICAgICA8aDM+PHNwYW4gaWQ9InRpdGxlIj48L3NwYW4+IGRlcGVuZGVuY2llczwvaDM+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CisgICAgICA8cCBpZD0iYm9keS10ZXh0Ij4gPHN0cm9uZyBpZD0ibGF5ZXItbmFtZSI+PC9zdHJvbmc+IGRlcGVuZHMgb24gc29tZSBsYXllcnMgdGhhdCBhcmUgbm90IGFkZGVkIHRvIHlvdXIgcHJvamVjdC4gU2VsZWN0IHRoZSBvbmVzIHlvdSB3YW50IHRvIGFkZDo8L3A+CisgICAgICA8dWwgY2xhc3M9InVuc3R5bGVkIiBpZD0iZGVwZW5kZW5jaWVzLWxpc3QiPgorICAgICAgPC91bD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgorICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiB0eXBlPSJzdWJtaXQiPkFkZCBsYXllcnM8L2J1dHRvbj4KKyAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgdHlwZT0icmVzZXQiIGRhdGEtZGlzbWlzcz0ibW9kYWwiPkNhbmNlbDwvYnV0dG9uPgorICAgIDwvZGl2PgorICA8L2Zvcm0+Cis8L2Rpdj4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3Mtd2hpdGUucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ltZy9nbHlwaGljb25zLWhhbGZsaW5ncy13aGl0ZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JmNjQ4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3Mtd2hpdGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3MucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ltZy9nbHlwaGljb25zLWhhbGZsaW5ncy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk5Njk5OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3MucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9pbWcvbG9nby5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaW1nL2xvZ28ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1YWQ3MzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaW1nL2xvZ28ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9pbWcvdG9hc3Rlcl9idy5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaW1nL3RvYXN0ZXJfYncucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NjU5MDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaW1nL3RvYXN0ZXJfYncucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcXVlcnktdHJlZXRhYmxlLWxpY2Vuc2UvR1BMLUxJQ0VOU0UudHh0IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pxdWVyeS10cmVldGFibGUtbGljZW5zZS9HUEwtTElDRU5TRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY5MjdmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcXVlcnktdHJlZXRhYmxlLWxpY2Vuc2UvR1BMLUxJQ0VOU0UudHh0CkBAIC0wLDAgKzEsMjc4IEBACisgICAgICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICAgICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKyAgICAgICAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisKKyAgICAgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworICAgICAgICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanF1ZXJ5LXRyZWV0YWJsZS1saWNlbnNlL01JVC1MSUNFTlNFLnR4dCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcXVlcnktdHJlZXRhYmxlLWxpY2Vuc2UvTUlULUxJQ0VOU0UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZTgyNGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanF1ZXJ5LXRyZWV0YWJsZS1saWNlbnNlL01JVC1MSUNFTlNFLnR4dApAQCAtMCwwICsxLDIwIEBACitDb3B5cmlnaHQgKGMpIDIwMTMgTHVkbyB2YW4gZGVuIEJvb20sIGh0dHA6Ly9sdWRvdmFuZGVuYm9vbS5jb20KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCithIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCit0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCitpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECitOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCitMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCitPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pxdWVyeS10cmVldGFibGUtbGljZW5zZS9SRUFETUUubWQgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanF1ZXJ5LXRyZWV0YWJsZS1saWNlbnNlL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2U3YWZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pxdWVyeS10cmVldGFibGUtbGljZW5zZS9SRUFETUUubWQKQEAgLTAsMCArMSwyMCBAQAorIyBqUXVlcnkgdHJlZXRhYmxlCisKK2pRdWVyeSB0cmVldGFibGUgaXMgYSBwbHVnaW4gZm9yIGpRdWVyeSwgdGhlICdXcml0ZSBMZXNzLCBEbyBNb3JlLCBKYXZhU2NyaXB0CitMaWJyYXJ5Jy4gV2l0aCB0aGlzIHBsdWdpbiB5b3UgY2FuIGRpc3BsYXkgYSB0cmVlIGluIGFuIEhUTUwgdGFibGUsIGUuZy4gYQorZGlyZWN0b3J5IHN0cnVjdHVyZSBvciBhIG5lc3RlZCBsaXN0LiBXaHkgbm90IHVzZSBhIGxpc3QsIHlvdSBzYXk/IEJlY2F1c2UgbGlzdHMKK2FyZSBncmVhdCBmb3IgZGlzcGxheWluZyBhIHRyZWUsIGFuZCB0YWJsZXMgYXJlIG5vdC4gT2ggd2FpdCwgYnV0IHRoaXMgcGx1Z2luCit1c2VzIHRhYmxlcywgZG9lc24ndCBpdD8gWWVzLiBXaHkgZG8gSSB1c2UgYSB0YWJsZSB0byBkaXNwbGF5IGEgbGlzdD8gQmVjYXVzZSBJCituZWVkIG11bHRpcGxlIGNvbHVtbnMgdG8gZGlzcGxheSBhZGRpdGlvbmFsIGRhdGEgYmVzaWRlcyB0aGUgdHJlZS4KKworRG93bmxvYWQgdGhlIGxhdGVzdCByZWxlYXNlIGZyb20gdGhlIGpRdWVyeSBQbHVnaW4gUmVnaXN0cnkgb3IgZ3JhYiB0aGUgc291cmNlCitjb2RlIGZyb20gR2l0aHViLiBQbGVhc2UgcmVwb3J0IGlzc3VlcyB0aHJvdWdoIEdpdGh1YiBpc3N1ZXMuIFRoaXMgcGx1Z2luIGlzCityZWxlYXNlZCB1bmRlciBib3RoIHRoZSBNSVQgYW5kIHRoZSBHUEx2MiBsaWNlbnNlIGJ5IEx1ZG8gdmFuIGRlbiBCb29tLgorCisjIyBEb2N1bWVudGF0aW9uIGFuZCBFeGFtcGxlcworCitTZWUgaW5kZXguaHRtbCBmb3IgdGVjaG5pY2FsIGRvY3VtZW50YXRpb24gYW5kIGV4YW1wbGVzLiBUaGUgbW9zdCByZWNlbnQgdmVyc2lvbgorb2YgdGhpcyBkb2N1bWVudCBpcyBhbHNvIGF2YWlsYWJsZSBvbmxpbmUgYXQKK2h0dHA6Ly9sdWRvLmN1YmljcGh1c2UubmwvanF1ZXJ5LXRyZWV0YWJsZS4gQW4gQUpBWCBlbmFibGVkIGV4YW1wbGUgYnVpbHQgd2l0aAorUnVieSBvbiBSYWlscyBjYW4gYmUgZm91bmQgYXQKK2h0dHBzOi8vZ2l0aHViLmNvbS9sdWRvL2pxdWVyeS10cmVldGFibGUtYWpheC1leGFtcGxlLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pxdWVyeS50cmVldGFibGUudGhlbWUudG9hc3Rlci5jc3MgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanF1ZXJ5LnRyZWV0YWJsZS50aGVtZS50b2FzdGVyLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTk0YjIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pxdWVyeS50cmVldGFibGUudGhlbWUudG9hc3Rlci5jc3MKQEAgLTAsMCArMSw2NiBAQAorLyoKK3RhYmxlLnRyZWV0YWJsZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkICM4ODg7IAorICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOworICBmb250LXNpemU6IC44ZW07CisgIGxpbmUtaGVpZ2h0OiAxOworICBtYXJnaW46IC42ZW0gMCAxLjhlbSAwOworICB3aWR0aDogMTAwJTsKK30KKwordGFibGUudHJlZXRhYmxlIGNhcHRpb24geworICBmb250LXNpemU6IC45ZW07CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICBtYXJnaW4tYm90dG9tOiAuMmVtOworfQorCit0YWJsZS50cmVldGFibGUgdGJvZHkgdHIgdGQgeworICBjdXJzb3I6IGRlZmF1bHQ7CisgIHBhZGRpbmc6IC4zZW0gMWVtOworfQorCit0YWJsZS50cmVldGFibGUgc3BhbiB7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBsZWZ0OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBwYWRkaW5nOiAuMmVtIDAgLjJlbSAxLjVlbTsKK30KKyovCisKK3RhYmxlLnRyZWV0YWJsZSBzcGFuLmZpbGUgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FRQUFBQzEramZxQUFBQUJHZEJUVUVBQUsvSU53V0s2UUFBQUJsMFJWaDBVMjltZEhkaGNtVUFRV1J2WW1VZ1NXMWhaMlZTWldGa2VYSEpaVHdBQUFEb1NVUkJWQmdaQmNFeGJsTkJHQWJBMmNlZWdUUkJ1SUtPZ2lpaFNaTlRjQzVMVUhBaWhOSlIwa0dLQ0RjWUpZNkQzLzc3TWRPaW5UdnpBZ0N3OHlzVGhJdm4vVm9qSXlNakl5UFArYlMxc1VRSVYyczk1cEJERHZtYlAvbWRrZnQ4M3RwWWd1WnE1SmgvT2VhWWgreXp5OGhUSHZObGF4Tk5jem0rbGE5T1RsYXIxVWRBLytDMkE0dHJSQ25EM2pTOEJCMW9icTJHazZHVTZRYlFBUzRCVWFZU1FBZjRiaGhLS1RGZEF6ckFPd0F4RVVBSCtLRU0wMVNZM2dNNndCc0VBUUIwZ0orbWFab0MzZ0k2aVBZYUFJQkpzaVJtSFUwQUFMT2VGQzNhSzJjV0FBQ1VYZTcrQXdPMGxjOWVUSFlUQUFBQUFFbEZUa1N1UW1DQyk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSBzcGFuLmZvbGRlciB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQkdkQlRVRUFBSy9JTndXSzZRQUFBQmwwUlZoMFUyOW1kSGRoY21VQVFXUnZZbVVnU1cxaFoyVlNaV0ZrZVhISlpUd0FBQUdyU1VSQlZEakx4Wk83aWhSQkZJYS82dTBaVzdHSEJVVjBVUVFUWnpkM1FkaE1ReE9md01SWEVBTkJNTlFYME16QXpGQXdFekh3QVJiTkZEZHdFZDMxTWozWDdhNnVPcjlCdHpOallqS0JKNm5pY1A3djNLcWNKRmF4aEJWdFpVQUs4T0hsbGQyc3Q3WGwzREpQVk9OUCt6RVVWNEhxTDVVRFlIcjV4dnVRQWpnbC9RczdUenZPT1ZBanhqbEMrZVBTd2U2RGZiVmVnTFZ1VDRyMTRlVHI2enZBOHhTQW9CTHp4NnB2ajRsK0RaSWV6dVZrRzlmWTJIN1lSUUlNWklCd3ljbXpIMS9zM0Y4QWFwZklQTkYza1FrNytrdzlQV0J5K0laT2RnNVVnM21rQUFUeS90MHVzb3Z6R2VDVVdUakN6MEIrU2owZWtmZHZrWjNhYkJ2K1U0R2FDdEoxaUVtNkFOUUo2ZkV6ckcvZW5nY0t3L3dYUXZFS3hTRUtReFJHS0U3SXp0K0RTaXdCSk1VU203MXJndU1ZaFFLckJ5Z09JUlN0ZjRUaUZGUkJ2YlJHS2lRTFdQMjl5UlNIS0JUdGZkQm1IczBCVXBndnRnRjR5UkZSK05VS2kwWFpjWWpDZUNHMnNta3pMQUhrYlJCbVAwL1VrMjZPNVluVUFjdEJwMUdzQUkrUzVuUkpKSmFsNUsxYUFNcnEwZDZUbTl1STZ6anlmNzVkQWU2dHgvU3NXZUQvL28yL0FiNklIMy9oMjVwT0FBQUFBRWxGVGtTdVFtQ0MpOworfQorCit0YWJsZS50cmVldGFibGUgdHIuY29sbGFwc2VkIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBS1QybERRMUJRYUc5MGIzTm9iM0FnU1VORElIQnliMlpwYkdVQUFIamFuVk5uVkZQcEZqMzMzdlJDUzRpQWxFdHZVaFVJSUZKQ2k0QVVrU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFNcVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQmVOTUxDQURBVFp2QU1CeUgvdy9xUXBsY0FZQ0VBY0Iwa1RoTENJQVVBRUI2amtLbUFFQkdBWUNkbUNaVEFLQUVBR0RMWTJMakFGQXRBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzQU1ET0VBdXlBQWdNQURCUmlJVXBBQVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFBRDUvd0FBZ09rQUFIVXdBQURxWUFBQU9wZ0FBQmR2a2wvRlJnQUFBSGxKUkVGVWVOcmNVMXNOZ0RBUTZ3Z21jQU0yTUlDR0dsZzFnSm5OeldRY3Z3UUd5MWo0b1VsLzd0SDBtcHd6TTdTZ1F5TytFWkFVV2gyTWtrelNXaEp3dVJBbEhZc0p3RXd5dnMxZ0FCRHV6cW9KY1R3NXF4YUlKTjBiZ1FSZ0lqbmxtbjFoZVNPNVBFNlkyWVhlKzVDcjUraCsrZ3MxMkFjQVM2RlMrN1lPc2o0QUFBQUFTVVZPUks1Q1lJST0pOworfQorCit0YWJsZS50cmVldGFibGUgdHIuZXhwYW5kZWQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNEQUFENS93QUFnT2tBQUhVd0FBRHFZQUFBT3BnQUFCZHZrbC9GUmdBQUFIRkpSRUZVZU5waS9QLy9Qd01sZ0ltQlFzQTQ0QzZndmhmYTI5djNNekF3T09EUmM2Q3lzdElSYnhpMHQ3ZmpESmpLeWtwR1lyd3dpMWh4bkxIUTN0NytqSUdCUVJKSjZIbGxaYVVVS1lFWVJZQlBPQjBnQlNoS3dLR0EvLy8vNDhWdGJXMy84Y2xUbkJJSDNnQ0trekpnQUd2QlgwZERtMHNDQUFBQUFFbEZUa1N1UW1DQyk7Cit9CisKKworCit0YWJsZS50cmVldGFibGUgdHIuY29sbGFwc2VkLnNlbGVjdGVkIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBS1QybERRMUJRYUc5MGIzTm9iM0FnU1VORElIQnliMlpwYkdVQUFIamFuVk5uVkZQcEZqMzMzdlJDUzRpQWxFdHZVaFVJSUZKQ2k0QVVrU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFNcVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQmVOTUxDQURBVFp2QU1CeUgvdy9xUXBsY0FZQ0VBY0Iwa1RoTENJQVVBRUI2amtLbUFFQkdBWUNkbUNaVEFLQUVBR0RMWTJMakFGQXRBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzQU1ET0VBdXlBQWdNQURCUmlJVXBBQVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFBRDUvd0FBZ09rQUFIVXdBQURxWUFBQU9wZ0FBQmR2a2wvRlJnQUFBRnBKUkVGVWVOcGkvUC8vUHdNbGdISEFEV0Q0Ly84L050eUFReHdENDVLQUFRZEtEZmovLy8vLy9mZ01Jc1lBWklNdzFES1JFRndPREF3TS80a05SS3E2NEFBREE0TWpGRE9RNmdLeVk0SG9kTUE0OVBNQ3hRWUFCZ0FWWUhzanlaMXg3UUFBQUFCSlJVNUVya0pnZ2c9PSk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5leHBhbmRlZC5zZWxlY3RlZCBzcGFuLmluZGVudGVyIGEgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQUZ0SlJFRlVlTnBpL1AvL1B3TWxnSW1CUXNBNDRDNmdpUUVOREF3TS8vSGdCbUxDQUYvQU1CTGpCVWVpeGYvLy80OEw3LytQQ3ZaalU0ZlBBQWMwQXh5d3FjTVhDd2VnR0oxTmNrTDZqeDV3cEtZRHhxR1hFa2tDZ0FFQW1ycUJJZWpkZ25nQUFBQUFTVVZPUks1Q1lJST0pOworfQorCit0YWJsZS50cmVldGFibGUgdHIuYWNjZXB0IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2EzYmNlNDsKKyAgY29sb3I6ICNmZmYKK30KKwordGFibGUudHJlZXRhYmxlIHRyLmNvbGxhcHNlZC5hY2NlcHQgdGQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UveC1wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQUZwSlJFRlVlTnBpL1AvL1B3TWxnSEhBRFdENC8vOC9OdHlBUXh3RDQ1S0FBUWRLRGZqLy8vLy8vZmdNSXNZQVpJTXcxREtSRUZ3T0RBd00vNGtOUktxNjRBQURBNE1qRkRPUTZnS3lZNEhvZE1BNDlQTUN4UVlBQmdBVllIc2p5WjF4N1FBQUFBQkpSVTVFcmtKZ2dnPT0pOworfQorCit0YWJsZS50cmVldGFibGUgdHIuZXhwYW5kZWQuYWNjZXB0IHRkIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3gtcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNEQUFENS93QUFnT2tBQUhVd0FBRHFZQUFBT3BnQUFCZHZrbC9GUmdBQUFGdEpSRUZVZU5waS9QLy9Qd01sZ0ltQlFzQTQ0QzZnaVFFTkRBd00vL0hnQm1MQ0FGL0FNQkxqQlVlaXhmLy8vNDhMNy8rUEN2WmpVNGZQQUFjMEF4eXdxY01YQ3dlZ0dKMU5ja0w2ang1d3BLWUR4cUdYRWtrQ2dBRUFtcnFCSWVqZGduZ0FBQUFBU1VWT1JLNUNZSUk9KTsKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy8uanNoaW50cmMgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvLmpzaGludHJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMmYzZWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvLmpzaGludHJjCkBAIC0wLDAgKzEsMTEgQEAKK3sKKyAgImN1cmx5IiA6IGZhbHNlLAorICAicHJlZGVmIiA6IFsgIiQiLCJsaWJ0b2FzdGVyIiwgInByZXR0eVByaW50IiBdLAorICAiZXFudWxsIjogdHJ1ZSwKKyAgInBsdXNwbHVzIiA6IGZhbHNlLAorICAiYnJvd3NlciIgOiB0cnVlLAorICAianF1ZXJ5IiA6IHRydWUsCisgICJkZXZlbCIgOiB0cnVlLAorICAidW51c2VkIiA6IHRydWUsCisgICJtYXhlcnIiIDogNjAKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9iYXNlLmpzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBkZjQ2MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9iYXNlLmpzCkBAIC0wLDAgKzEsMjMxIEBACisndXNlIHN0cmljdCc7CisKK2Z1bmN0aW9uIGJhc2VQYWdlSW5pdChjdHgpIHsKKworICB2YXIgbmV3QnVpbGRCdXR0b24gPSAkKCIjbmV3LWJ1aWxkLWJ1dHRvbiIpOworICB2YXIgbmV3QnVpbGRUYXJnZXRJbnB1dDsKKyAgdmFyIG5ld0J1aWxkVGFyZ2V0QnVpbGRCdG47CisgIHZhciBwcm9qZWN0TmFtZUZvcm0gPSAkKCIjcHJvamVjdC1uYW1lLWNoYW5nZS1mb3JtIik7CisgIHZhciBwcm9qZWN0TmFtZSA9ICQoIiNwcm9qZWN0LW5hbWUiKTsKKyAgdmFyIHByb2plY3ROYW1lRm9ybVRvZ2dsZSA9ICQoIiNwcm9qZWN0LWNoYW5nZS1mb3JtLXRvZ2dsZSIpOworICB2YXIgcHJvamVjdE5hbWVDaGFuZ2VDYW5jZWwgPSAkKCIjcHJvamVjdC1uYW1lLWNoYW5nZS1jYW5jZWwiKTsKKworICAvKiBpbml0aWFsbHkgdGhlIGN1cnJlbnQgcHJvamVjdCBpcyB1c2VkIHVubGVzcyBvdmVycmlkZGVuIGJ5IHRoZSBuZXcgYnVpbGQKKyAgICogYnV0dG9uIGluIHRvcCByaWdodCBuYXYKKyAgICovCisgIHZhciBzZWxlY3RlZFByb2plY3QgPSBsaWJ0b2FzdGVyLmN0eDsKKworICB2YXIgc2VsZWN0ZWRUYXJnZXQ7CisKKyAgdmFyIG5ld0J1aWxkUHJvamVjdElucHV0ID0gJCgiI25ldy1idWlsZC1idXR0b24gI3Byb2plY3QtbmFtZS1pbnB1dCIpOworICB2YXIgbmV3QnVpbGRQcm9qZWN0U2F2ZUJ0biA9ICQoIiNuZXctYnVpbGQtYnV0dG9uICNzYXZlLXByb2plY3QtYnV0dG9uIik7CisKKyAgLyogUHJvamVjdCBuYW1lIGNoYW5nZSBmdW5jdGlvbmFsaXR5ICovCisgIHByb2plY3ROYW1lRm9ybVRvZ2dsZS5jbGljayhmdW5jdGlvbihlKXsKKyAgICBlLnByZXZlbnREZWZhdWx0KCk7CisKKyAgICAkKHRoaXMpLmFkZChwcm9qZWN0TmFtZSkuaGlkZSgpOworICAgIHByb2plY3ROYW1lRm9ybS5mYWRlSW4oKTsKKyAgfSk7CisKKyAgcHJvamVjdE5hbWVDaGFuZ2VDYW5jZWwuY2xpY2soZnVuY3Rpb24oZSl7CisgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworCisgICAgcHJvamVjdE5hbWVGb3JtLmhpZGUoKTsKKyAgICBwcm9qZWN0TmFtZS5hZGQocHJvamVjdE5hbWVGb3JtVG9nZ2xlKS5mYWRlSW4oKTsKKyAgfSk7CisKKyAgJCgiI3Byb2plY3QtbmFtZS1jaGFuZ2UtYnRuIikuY2xpY2soZnVuY3Rpb24oZSl7CisgICAgdmFyIG5ld1Byb2plY3ROYW1lID0gJCgiI3Byb2plY3QtbmFtZS1jaGFuZ2UtaW5wdXQiKS52YWwoKTsKKworICAgIGxpYnRvYXN0ZXIuZWRpdEN1cnJlbnRQcm9qZWN0KHsgcHJvamVjdE5hbWU6IG5ld1Byb2plY3ROYW1lIH0sZnVuY3Rpb24gKCl7CisKKyAgICAgIHByb2plY3ROYW1lLnRleHQobmV3UHJvamVjdE5hbWUpOworICAgICAgbGlidG9hc3Rlci5jdHgucHJvamVjdE5hbWUgPSBuZXdQcm9qZWN0TmFtZTsKKyAgICAgIHByb2plY3ROYW1lQ2hhbmdlQ2FuY2VsLmNsaWNrKCk7CisgICAgfSk7CisgIH0pOworCisgIF9jaGVja1Byb2plY3RCdWlsZGFibGUoKTsKKworICAkKCIjcHJvamVjdC10b3BiYXIgLm5hdiBsaSBhIikuZWFjaChmdW5jdGlvbigpeworICAgIGlmICh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgPT09ICQodGhpcykuYXR0cignaHJlZicpKQorICAgICAgJCh0aGlzKS5wYXJlbnQoKS5hZGRDbGFzcygnYWN0aXZlJyk7CisgICAgZWxzZQorICAgICAgJCh0aGlzKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7CisgIH0pOworCisgIGlmICgkKCIudG90YWwtYnVpbGRzIikubGVuZ3RoICE9PSAwKXsKKyAgICBsaWJ0b2FzdGVyLmdldFByb2plY3RJbmZvKGxpYnRvYXN0ZXIuY3R4LnByb2plY3RQYWdlVXJsLCBmdW5jdGlvbihwcmpJbmZvKXsKKyAgICAgIGlmIChwcmpJbmZvLmJ1aWxkcykKKyAgICAgICAgJCgiLnRvdGFsLWJ1aWxkcyIpLnRleHQocHJqSW5mby5idWlsZHMubGVuZ3RoKTsKKyAgICB9KTsKKyAgfQorCisgIC8qIEhpZGUgdGhlIGJ1dHRvbiBpZiB3ZSdyZSBvbiB0aGUgcHJvamVjdCxuZXdwcm9qZWN0IG9yIGltcG9ydGx5YWVyIHBhZ2UKKyAgICogb3IgaWYgdGhlcmUgYXJlIG5vIHByb2plY3RzIHlldCBkZWZpbmVkCisgICAqIG9ubHkgc2hvdyBpZiB0aGVyZSBpc24ndCBhbHJlYWR5IGEgYnVpbGQtdGFyZ2V0LWlucHV0IGFscmVhZHkKKyAgICovCisgIGlmIChjdHgubnVtUHJvamVjdHMgPiAwICYmCisgICAgICBjdHguY3VycmVudFVybC5zZWFyY2goJ25ld3Byb2plY3QnKSA8IDAgJiYKKyAgICAgICQoIi5idWlsZC10YXJnZXQtaW5wdXQiKS5sZW5ndGggPT09IDEpIHsKKworICAgIG5ld0J1aWxkVGFyZ2V0SW5wdXQgPSAkKCIjbmV3LWJ1aWxkLWJ1dHRvbiAuYnVpbGQtdGFyZ2V0LWlucHV0Iik7CisgICAgbmV3QnVpbGRUYXJnZXRCdWlsZEJ0biA9ICQoIiNuZXctYnVpbGQtYnV0dG9uIikuZmluZCgiLmJ1aWxkLWJ1dHRvbiIpOworCisgICAgX3NldHVwTmV3QnVpbGRCdXR0b24oKTsKKyAgICBuZXdCdWlsZEJ1dHRvbi5zaG93KCk7CisgIH0gZWxzZSBpZiAoJCgiLmJ1aWxkLXRhcmdldC1pbnB1dCIpLmxlbmd0aCA+IDApIHsKKyAgICBuZXdCdWlsZFRhcmdldElucHV0ID0gJCgiI3Byb2plY3QtdG9wYmFyIC5idWlsZC10YXJnZXQtaW5wdXQiKTsKKyAgICBuZXdCdWlsZFRhcmdldEJ1aWxkQnRuID0gJCgiI3Byb2plY3QtdG9wYmFyIC5idWlsZC1idXR0b24iKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm47CisgIH0KKworICAvKiBIaWRlIHRoZSBjaGFuZ2UgcHJvamVjdCBpY29uIHdoZW4gdGhlcmUgaXMgb25seSBvbmUgcHJvamVjdCAqLworICBpZiAoY3R4Lm51bVByb2plY3RzID09PSAxKSB7CisgICAgJCgnI3Byb2plY3QgLmljb24tcGVuY2lsJykuaGlkZSgpOworICB9CisKKyAgLyogSWYgd2UgaGF2ZSBhIHByb2plY3Qgc2V0dXAgdGhlIHR5cGVhaGVhZCAqLworICBpZiAoc2VsZWN0ZWRQcm9qZWN0LnJlY2lwZXNUeXBlQWhlYWRVcmwpeworICAgIGxpYnRvYXN0ZXIubWFrZVR5cGVhaGVhZChuZXdCdWlsZFRhcmdldElucHV0LCBzZWxlY3RlZFByb2plY3QucmVjaXBlc1R5cGVBaGVhZFVybCwgeyBmb3JtYXQ6ICJqc29uIiB9LCBmdW5jdGlvbiAoaXRlbSkgeworICAgICAgc2VsZWN0ZWRUYXJnZXQgPSBpdGVtOworICAgICAgbmV3QnVpbGRUYXJnZXRCdWlsZEJ0bi5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgIH0pOworICB9CisKKyAgbmV3QnVpbGRUYXJnZXRJbnB1dC5vbignaW5wdXQnLCBmdW5jdGlvbiAoKSB7CisgICAgaWYgKCQodGhpcykudmFsKCkubGVuZ3RoID09PSAwKSB7CisgICAgICBuZXdCdWlsZFRhcmdldEJ1aWxkQnRuLmF0dHIoImRpc2FibGVkIiwgImRpc2FibGVkIik7CisgICAgfSBlbHNlIHsKKyAgICAgIG5ld0J1aWxkVGFyZ2V0QnVpbGRCdG4ucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgICB9CisgIH0pOworCisgIG5ld0J1aWxkVGFyZ2V0QnVpbGRCdG4uY2xpY2soZnVuY3Rpb24gKGUpIHsKKyAgICBlLnByZXZlbnREZWZhdWx0KCk7CisKKyAgICBpZiAoIW5ld0J1aWxkVGFyZ2V0SW5wdXQudmFsKCkpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBXZSB1c2UgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCBmaWVsZCBzbyBhcyB0byBtYWludGFpbiBhbnkgY29tbWFuZCBhbHNvCisgICAgICogYWRkZWQgZS5nLiBjb3JlLWltYWdlLW1pbmltYWw6Y2xlYW4KKyAgICAgKi8KKyAgICBzZWxlY3RlZFRhcmdldCA9IHsgbmFtZTogbmV3QnVpbGRUYXJnZXRJbnB1dC52YWwoKSB9OworCisgICAgLyogRmlyZSBvZmYgdGhlIGJ1aWxkICovCisgICAgbGlidG9hc3Rlci5zdGFydEFCdWlsZChzZWxlY3RlZFByb2plY3QucHJvamVjdEJ1aWxkc1VybCwKKyAgICAgIHNlbGVjdGVkUHJvamVjdC5wcm9qZWN0SWQsIHNlbGVjdGVkVGFyZ2V0Lm5hbWUsIGZ1bmN0aW9uKCl7CisgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShzZWxlY3RlZFByb2plY3QucHJvamVjdEJ1aWxkc1VybCk7CisgICAgfSwgbnVsbCk7CisgIH0pOworCisgIGZ1bmN0aW9uIF9jaGVja1Byb2plY3RCdWlsZGFibGUoKSB7CisgICAgaWYgKHNlbGVjdGVkUHJvamVjdC5wcm9qZWN0SWQgPT09IHVuZGVmaW5lZCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGxpYnRvYXN0ZXIuZ2V0UHJvamVjdEluZm8oc2VsZWN0ZWRQcm9qZWN0LnByb2plY3RQYWdlVXJsLAorICAgICAgZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgaWYgKGRhdGEubWFjaGluZSA9PT0gbnVsbCB8fCBkYXRhLm1hY2hpbmUubmFtZSA9PT0gdW5kZWZpbmVkIHx8IGRhdGEubGF5ZXJzLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgIC8qIHdlIGNhbid0IGJ1aWxkIGFueXRoaW5nIHdpdGggb3V0IGEgbWFjaGluZSBhbmQgc29tZSBsYXllcnMgKi8KKyAgICAgICAgICAkKCIjbmV3LWJ1aWxkLWJ1dHRvbiAjdGFyZ2V0cy1mb3JtIikuaGlkZSgpOworICAgICAgICAgICQoIiNuZXctYnVpbGQtYnV0dG9uIC5hbGVydCIpLnNob3coKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAkKCIjbmV3LWJ1aWxkLWJ1dHRvbiAjdGFyZ2V0cy1mb3JtIikuc2hvdygpOworICAgICAgICAgICQoIiNuZXctYnVpbGQtYnV0dG9uIC5hbGVydCIpLmhpZGUoKTsKKworICAgICAgICAgIC8qIHdlIGNhbiBidWlsZCB0aGlzIHByb2plY3Q7IGVuYWJsZSBpbnB1dCBmaWVsZHMgKi8KKyAgICAgICAgICBuZXdCdWlsZFRhcmdldElucHV0LnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgICAgfQorICAgICAgfSwgbnVsbCk7CisgIH0KKworICAvKiBTZXR1cCBOZXcgYnVpbGQgYnV0dG9uIGluIHRoZSB0b3AgbmF2IGJhciAqLworICBmdW5jdGlvbiBfc2V0dXBOZXdCdWlsZEJ1dHRvbigpIHsKKworICAgIC8qIElmIHdlIGRvbid0IGhhdmUgYSBjdXJyZW50IHByb2plY3QgdGhlbiBwcmVzZW50IHRoZSBzZXQgcHJvamVjdAorICAgICAqIGZvcm0uCisgICAgICovCisgICAgaWYgKHNlbGVjdGVkUHJvamVjdC5wcm9qZWN0SWQgPT09IHVuZGVmaW5lZCkgeworICAgICAgJCgnI2NoYW5nZS1wcm9qZWN0LWZvcm0nKS5zaG93KCk7CisgICAgICAkKCcjcHJvamVjdCAuaWNvbi1wZW5jaWwnKS5oaWRlKCk7CisgICAgfQorCisgICAgbGlidG9hc3Rlci5tYWtlVHlwZWFoZWFkKG5ld0J1aWxkUHJvamVjdElucHV0LCBzZWxlY3RlZFByb2plY3QucHJvamVjdHNUeXBlQWhlYWRVcmwsIHsgZm9ybWF0IDogImpzb24iIH0sIGZ1bmN0aW9uIChpdGVtKSB7CisgICAgICAvKiBzdWNjZXNzZnVsbHkgc2VsZWN0ZWQgYSBwcm9qZWN0ICovCisgICAgICBuZXdCdWlsZFByb2plY3RTYXZlQnRuLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgICBzZWxlY3RlZFByb2plY3QgPSBpdGVtOworICAgIH0pOworCisgICAgLyogQW55IHR5cGluZyBpbiB0aGUgaW5wdXQgYXBhcnQgZnJvbSBlbnRlciBrZXkgaXMgZ29pbmcgdG8gaW52YWxpZGF0ZQorICAgICAqIHRoZSB2YWx1ZSB0aGF0IGhhcyBiZWVuIHNldCBieSBzZWxlY3RpbmcgYSBzdWdnZXN0aW9uIGZyb20gdGhlIHR5cGVhaGVhZAorICAgICAqLworICAgIG5ld0J1aWxkUHJvamVjdElucHV0Lm9uKCdpbnB1dCcsIGZ1bmN0aW9uIChldmVudCkgeworICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDEzKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIG5ld0J1aWxkUHJvamVjdFNhdmVCdG4uYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKKyAgICB9KTsKKworCisgICAgbmV3QnVpbGRQcm9qZWN0U2F2ZUJ0bi5jbGljayhmdW5jdGlvbiAoKSB7CisgICAgICBzZWxlY3RlZFByb2plY3QucHJvamVjdElkID0gc2VsZWN0ZWRQcm9qZWN0LmlkOworICAgICAgLyogVXBkYXRlIHRoZSB0eXBlYWhlYWQgcHJvamVjdF9pZCBwYXJhbWF0ZXIgKi8KKyAgICAgIF9jaGVja1Byb2plY3RCdWlsZGFibGUoKTsKKworICAgICAgbmV3QnVpbGRUYXJnZXRJbnB1dC5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworCisgICAgICAvKiBXZSd2ZSBnb3QgYSBuZXcgcHJvamVjdCBzbyBub3cgd2UgbmVlZCB0byB1cGRhdGUgdGhlCisgICAgICAgKiB0YXJnZXQgdXJscy4gV2UgY2FuIGdldCB0aGlzIGZyb20gdGhlIG5ldyBwcm9qZWN0J3MgaW5mbworICAgICAgICovCisgICAgICAkLmdldEpTT04oc2VsZWN0ZWRQcm9qZWN0LnByb2plY3RQYWdlVXJsLCB7IGZvcm1hdDogImpzb24iIH0sCisgICAgICAgIGZ1bmN0aW9uKHByb2plY3RJbmZvKXsKKyAgICAgICAgICAvKiBVcGRhdGUgdGhlIHR5cGVhaGVhZCB0byB1c2UgdGhlIG5ldyBzZWxlY3RlZFByb2plY3QgKi8KKyAgICAgICAgICBzZWxlY3RlZFByb2plY3QgPSBwcm9qZWN0SW5mbzsKKworICAgICAgICAgIGxpYnRvYXN0ZXIubWFrZVR5cGVhaGVhZChuZXdCdWlsZFRhcmdldElucHV0LCBzZWxlY3RlZFByb2plY3QucmVjaXBlc1R5cGVBaGVhZFVybCwgeyBmb3JtYXQ6ICJqc29uIiB9LCBmdW5jdGlvbiAoaXRlbSkgeworICAgICAgICAgICAgICAvKiBzdWNjZXNzZnVsbHkgc2VsZWN0ZWQgYSB0YXJnZXQgKi8KKyAgICAgICAgICAgICAgc2VsZWN0ZWRUYXJnZXQgPSBpdGVtOworICAgICAgICAgICAgICBuZXdCdWlsZFRhcmdldEJ1aWxkQnRuLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgICAgICAgfSk7CisKKyAgICAgIH0pOworICAgICAgbmV3QnVpbGRUYXJnZXRJbnB1dC52YWwoIiIpOworCisgICAgICAvKiBzZXQgdXAgbmV3IGZvcm0gYXNwZWN0ICovCisgICAgICAkKCIjbmV3LWJ1aWxkLWJ1dHRvbiAjcHJvamVjdCBhIikudGV4dChzZWxlY3RlZFByb2plY3QubmFtZSkuYXR0cignaHJlZicsIHNlbGVjdGVkUHJvamVjdC5wcm9qZWN0UGFnZVVybCk7CisgICAgICAkKCIjbmV3LWJ1aWxkLWJ1dHRvbiAuYWxlcnQgYSIpLmF0dHIoJ2hyZWYnLCBzZWxlY3RlZFByb2plY3QucHJvamVjdFBhZ2VVcmwpOworICAgICAgJCgiI3Byb2plY3QgLmljb24tcGVuY2lsIikuc2hvdygpOworCisgICAgICAkKCIjY2hhbmdlLXByb2plY3QtZm9ybSIpLnNsaWRlVXAoeyAnY29tcGxldGUnIDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICQoIiNuZXctYnVpbGQtYnV0dG9uICNwcm9qZWN0Iikuc2hvdygpOworICAgICAgfX0pOworICAgIH0pOworCisgICAgJCgnI25ldy1idWlsZC1idXR0b24gI3Byb2plY3QgLmljb24tcGVuY2lsJykuY2xpY2soZnVuY3Rpb24gKCkgeworICAgICAgbmV3QnVpbGRQcm9qZWN0U2F2ZUJ0bi5hdHRyKCJkaXNhYmxlZCIsICJkaXNhYmxlZCIpOworICAgICAgbmV3QnVpbGRQcm9qZWN0SW5wdXQudmFsKCQoIiNuZXctYnVpbGQtYnV0dG9uICNwcm9qZWN0IGEiKS50ZXh0KCkpOworICAgICAgJCgiI2NhbmNlbC1jaGFuZ2UtcHJvamVjdCIpLnNob3coKTsKKyAgICAgICQodGhpcykucGFyZW50KCkuaGlkZSgpOworICAgICAgJCgiI2NoYW5nZS1wcm9qZWN0LWZvcm0iKS5zbGlkZURvd24oKTsKKyAgICB9KTsKKworICAgICQoIiNuZXctYnVpbGQtYnV0dG9uICNjYW5jZWwtY2hhbmdlLXByb2plY3QiKS5jbGljayhmdW5jdGlvbiAoKSB7CisgICAgICAkKCIjY2hhbmdlLXByb2plY3QtZm9ybSIpLmhpZGUoZnVuY3Rpb24gKCkgeworICAgICAgICAkKCcjbmV3LWJ1aWxkLWJ1dHRvbiAjcHJvamVjdCcpLnNob3coKTsKKyAgICAgIH0pOworCisgICAgICBuZXdCdWlsZFByb2plY3RJbnB1dC52YWwoIiIpOworICAgICAgbmV3QnVpbGRQcm9qZWN0U2F2ZUJ0bi5hdHRyKCJkaXNhYmxlZCIsICJkaXNhYmxlZCIpOworICAgIH0pOworCisgICAgLyogS2VlcCB0aGUgZHJvcGRvd24gb3BlbiBldmVuIHVubGVzcyB3ZSBjbGljayBvdXRzaWRlIHRoZSBkcm9wZG93biBhcmVhICovCisgICAgJCgiLm5ldy1idWlsZCIpLmNsaWNrIChmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgIH0pOworICB9OworCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvYm9vdHN0cmFwLm1pbi5qcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9ib290c3RyYXAubWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ODI1OGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvYm9vdHN0cmFwLm1pbi5qcwpAQCAtMCwwICsxLDYgQEAKKy8qIQorKiBCb290c3RyYXAuanMgYnkgQGZhdCAmIEBtZG8KKyogQ29weXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5jLgorKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAudHh0CisqLworIWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtlKGZ1bmN0aW9uKCl7ZS5zdXBwb3J0LnRyYW5zaXRpb249ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJvb3RzdHJhcCIpLHQ9e1dlYmtpdFRyYW5zaXRpb246IndlYmtpdFRyYW5zaXRpb25FbmQiLE1velRyYW5zaXRpb246InRyYW5zaXRpb25lbmQiLE9UcmFuc2l0aW9uOiJvVHJhbnNpdGlvbkVuZCBvdHJhbnNpdGlvbmVuZCIsdHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCJ9LG47Zm9yKG4gaW4gdClpZihlLnN0eWxlW25dIT09dW5kZWZpbmVkKXJldHVybiB0W25dfSgpO3JldHVybiBlJiZ7ZW5kOmV9fSgpfSl9KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIHQ9J1tkYXRhLWRpc21pc3M9ImFsZXJ0Il0nLG49ZnVuY3Rpb24obil7ZShuKS5vbigiY2xpY2siLHQsdGhpcy5jbG9zZSl9O24ucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHMoKXtpLnRyaWdnZXIoImNsb3NlZCIpLnJlbW92ZSgpfXZhciBuPWUodGhpcykscj1uLmF0dHIoImRhdGEtdGFyZ2V0IiksaTtyfHwocj1uLmF0dHIoImhyZWYiKSxyPXImJnIucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCIiKSksaT1lKHIpLHQmJnQucHJldmVudERlZmF1bHQoKSxpLmxlbmd0aHx8KGk9bi5oYXNDbGFzcygiYWxlcnQiKT9uOm4ucGFyZW50KCkpLGkudHJpZ2dlcih0PWUuRXZlbnQoImNsb3NlIikpO2lmKHQuaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO2kucmVtb3ZlQ2xhc3MoImluIiksZS5zdXBwb3J0LnRyYW5zaXRpb24mJmkuaGFzQ2xhc3MoImZhZGUiKT9pLm9uKGUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxzKTpzKCl9O3ZhciByPWUuZm4uYWxlcnQ7ZS5mbi5hbGVydD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKSxpPXIuZGF0YSgiYWxlcnQiKTtpfHxyLmRhdGEoImFsZXJ0IixpPW5ldyBuKHRoaXMpKSx0eXBlb2YgdD09InN0cmluZyImJmlbdF0uY2FsbChyKX0pfSxlLmZuLmFsZXJ0LkNvbnN0cnVjdG9yPW4sZS5mbi5hbGVydC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4uYWxlcnQ9cix0aGlzfSxlKGRvY3VtZW50KS5vbigiY2xpY2suYWxlcnQuZGF0YS1hcGkiLHQsbi5wcm90b3R5cGUuY2xvc2UpfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKHQsbil7dGhpcy4kZWxlbWVudD1lKHQpLHRoaXMub3B0aW9ucz1lLmV4dGVuZCh7fSxlLmZuLmJ1dHRvbi5kZWZhdWx0cyxuKX07dC5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ImRpc2FibGVkIixuPXRoaXMuJGVsZW1lbnQscj1uLmRhdGEoKSxpPW4uaXMoImlucHV0Iik/InZhbCI6Imh0bWwiO2UrPSJUZXh0IixyLnJlc2V0VGV4dHx8bi5kYXRhKCJyZXNldFRleHQiLG5baV0oKSksbltpXShyW2VdfHx0aGlzLm9wdGlvbnNbZV0pLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlPT0ibG9hZGluZ1RleHQiP24uYWRkQ2xhc3ModCkuYXR0cih0LHQpOm4ucmVtb3ZlQ2xhc3ModCkucmVtb3ZlQXR0cih0KX0sMCl9LHQucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuJGVsZW1lbnQuY2xvc2VzdCgnW2RhdGEtdG9nZ2xlPSJidXR0b25zLXJhZGlvIl0nKTtlJiZlLmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcygiYWN0aXZlIil9O3ZhciBuPWUuZm4uYnV0dG9uO2UuZm4uYnV0dG9uPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLGk9ci5kYXRhKCJidXR0b24iKSxzPXR5cGVvZiBuPT0ib2JqZWN0IiYmbjtpfHxyLmRhdGEoImJ1dHRvbiIsaT1uZXcgdCh0aGlzLHMpKSxuPT0idG9nZ2xlIj9pLnRvZ2dsZSgpOm4mJmkuc2V0U3RhdGUobil9KX0sZS5mbi5idXR0b24uZGVmYXVsdHM9e2xvYWRpbmdUZXh0OiJsb2FkaW5nLi4uIn0sZS5mbi5idXR0b24uQ29uc3RydWN0b3I9dCxlLmZuLmJ1dHRvbi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4uYnV0dG9uPW4sdGhpc30sZShkb2N1bWVudCkub24oImNsaWNrLmJ1dHRvbi5kYXRhLWFwaSIsIltkYXRhLXRvZ2dsZV49YnV0dG9uXSIsZnVuY3Rpb24odCl7dmFyIG49ZSh0LnRhcmdldCk7bi5oYXNDbGFzcygiYnRuIil8fChuPW4uY2xvc2VzdCgiLmJ0biIpKSxuLmJ1dHRvbigidG9nZ2xlIil9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1mdW5jdGlvbih0LG4pe3RoaXMuJGVsZW1lbnQ9ZSh0KSx0aGlzLiRpbmRpY2F0b3JzPXRoaXMuJGVsZW1lbnQuZmluZCgiLmNhcm91c2VsLWluZGljYXRvcnMiKSx0aGlzLm9wdGlvbnM9bix0aGlzLm9wdGlvbnMucGF1c2U9PSJob3ZlciImJnRoaXMuJGVsZW1lbnQub24oIm1vdXNlZW50ZXIiLGUucHJveHkodGhpcy5wYXVzZSx0aGlzKSkub24oIm1vdXNlbGVhdmUiLGUucHJveHkodGhpcy5jeWNsZSx0aGlzKSl9O3QucHJvdG90eXBlPXtjeWNsZTpmdW5jdGlvbih0KXtyZXR1cm4gdHx8KHRoaXMucGF1c2VkPSExKSx0aGlzLmludGVydmFsJiZjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXMub3B0aW9ucy5pbnRlcnZhbCYmIXRoaXMucGF1c2VkJiYodGhpcy5pbnRlcnZhbD1zZXRJbnRlcnZhbChlLnByb3h5KHRoaXMubmV4dCx0aGlzKSx0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpKSx0aGlzfSxnZXRBY3RpdmVJbmRleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRhY3RpdmU9dGhpcy4kZWxlbWVudC5maW5kKCIuaXRlbS5hY3RpdmUiKSx0aGlzLiRpdGVtcz10aGlzLiRhY3RpdmUucGFyZW50KCkuY2hpbGRyZW4oKSx0aGlzLiRpdGVtcy5pbmRleCh0aGlzLiRhY3RpdmUpfSx0bzpmdW5jdGlvbih0KXt2YXIgbj10aGlzLmdldEFjdGl2ZUluZGV4KCkscj10aGlzO2lmKHQ+dGhpcy4kaXRlbXMubGVuZ3RoLTF8fHQ8MClyZXR1cm47cmV0dXJuIHRoaXMuc2xpZGluZz90aGlzLiRlbGVtZW50Lm9uZSgic2xpZCIsZnVuY3Rpb24oKXtyLnRvKHQpfSk6bj09dD90aGlzLnBhdXNlKCkuY3ljbGUoKTp0aGlzLnNsaWRlKHQ+bj8ibmV4dCI6InByZXYiLGUodGhpcy4kaXRlbXNbdF0pKX0scGF1c2U6ZnVuY3Rpb24odCl7cmV0dXJuIHR8fCh0aGlzLnBhdXNlZD0hMCksdGhpcy4kZWxlbWVudC5maW5kKCIubmV4dCwgLnByZXYiKS5sZW5ndGgmJmUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCYmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihlLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQpLHRoaXMuY3ljbGUoITApKSxjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXMuaW50ZXJ2YWw9bnVsbCx0aGlzfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5zbGlkaW5nKXJldHVybjtyZXR1cm4gdGhpcy5zbGlkZSgibmV4dCIpfSxwcmV2OmZ1bmN0aW9uKCl7aWYodGhpcy5zbGlkaW5nKXJldHVybjtyZXR1cm4gdGhpcy5zbGlkZSgicHJldiIpfSxzbGlkZTpmdW5jdGlvbih0LG4pe3ZhciByPXRoaXMuJGVsZW1lbnQuZmluZCgiLml0ZW0uYWN0aXZlIiksaT1ufHxyW3RdKCkscz10aGlzLmludGVydmFsLG89dD09Im5leHQiPyJsZWZ0IjoicmlnaHQiLHU9dD09Im5leHQiPyJmaXJzdCI6Imxhc3QiLGE9dGhpcyxmO3RoaXMuc2xpZGluZz0hMCxzJiZ0aGlzLnBhdXNlKCksaT1pLmxlbmd0aD9pOnRoaXMuJGVsZW1lbnQuZmluZCgiLml0ZW0iKVt1XSgpLGY9ZS5FdmVudCgic2xpZGUiLHtyZWxhdGVkVGFyZ2V0OmlbMF0sZGlyZWN0aW9uOm99KTtpZihpLmhhc0NsYXNzKCJhY3RpdmUiKSlyZXR1cm47dGhpcy4kaW5kaWNhdG9ycy5sZW5ndGgmJih0aGlzLiRpbmRpY2F0b3JzLmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksdGhpcy4kZWxlbWVudC5vbmUoInNsaWQiLGZ1bmN0aW9uKCl7dmFyIHQ9ZShhLiRpbmRpY2F0b3JzLmNoaWxkcmVuKClbYS5nZXRBY3RpdmVJbmRleCgpXSk7dCYmdC5hZGRDbGFzcygiYWN0aXZlIil9KSk7aWYoZS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoInNsaWRlIikpe3RoaXMuJGVsZW1lbnQudHJpZ2dlcihmKTtpZihmLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjtpLmFkZENsYXNzKHQpLGlbMF0ub2Zmc2V0V2lkdGgsci5hZGRDbGFzcyhvKSxpLmFkZENsYXNzKG8pLHRoaXMuJGVsZW1lbnQub25lKGUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxmdW5jdGlvbigpe2kucmVtb3ZlQ2xhc3MoW3Qsb10uam9pbigiICIpKS5hZGRDbGFzcygiYWN0aXZlIiksci5yZW1vdmVDbGFzcyhbImFjdGl2ZSIsb10uam9pbigiICIpKSxhLnNsaWRpbmc9ITEsc2V0VGltZW91dChmdW5jdGlvbigpe2EuJGVsZW1lbnQudHJpZ2dlcigic2xpZCIpfSwwKX0pfWVsc2V7dGhpcy4kZWxlbWVudC50cmlnZ2VyKGYpO2lmKGYuaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO3IucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLGkuYWRkQ2xhc3MoImFjdGl2ZSIpLHRoaXMuc2xpZGluZz0hMSx0aGlzLiRlbGVtZW50LnRyaWdnZXIoInNsaWQiKX1yZXR1cm4gcyYmdGhpcy5jeWNsZSgpLHRoaXN9fTt2YXIgbj1lLmZuLmNhcm91c2VsO2UuZm4uY2Fyb3VzZWw9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciByPWUodGhpcyksaT1yLmRhdGEoImNhcm91c2VsIikscz1lLmV4dGVuZCh7fSxlLmZuLmNhcm91c2VsLmRlZmF1bHRzLHR5cGVvZiBuPT0ib2JqZWN0IiYmbiksbz10eXBlb2Ygbj09InN0cmluZyI/bjpzLnNsaWRlO2l8fHIuZGF0YSgiY2Fyb3VzZWwiLGk9bmV3IHQodGhpcyxzKSksdHlwZW9mIG49PSJudW1iZXIiP2kudG8obik6bz9pW29dKCk6cy5pbnRlcnZhbCYmaS5wYXVzZSgpLmN5Y2xlKCl9KX0sZS5mbi5jYXJvdXNlbC5kZWZhdWx0cz17aW50ZXJ2YWw6NWUzLHBhdXNlOiJob3ZlciJ9LGUuZm4uY2Fyb3VzZWwuQ29uc3RydWN0b3I9dCxlLmZuLmNhcm91c2VsLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5mbi5jYXJvdXNlbD1uLHRoaXN9LGUoZG9jdW1lbnQpLm9uKCJjbGljay5jYXJvdXNlbC5kYXRhLWFwaSIsIltkYXRhLXNsaWRlXSwgW2RhdGEtc2xpZGUtdG9dIixmdW5jdGlvbih0KXt2YXIgbj1lKHRoaXMpLHIsaT1lKG4uYXR0cigiZGF0YS10YXJnZXQiKXx8KHI9bi5hdHRyKCJocmVmIikpJiZyLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIikpLHM9ZS5leHRlbmQoe30saS5kYXRhKCksbi5kYXRhKCkpLG87aS5jYXJvdXNlbChzKSwobz1uLmF0dHIoImRhdGEtc2xpZGUtdG8iKSkmJmkuZGF0YSgiY2Fyb3VzZWwiKS5wYXVzZSgpLnRvKG8pLmN5Y2xlKCksdC5wcmV2ZW50RGVmYXVsdCgpfSl9KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIHQ9ZnVuY3Rpb24odCxuKXt0aGlzLiRlbGVtZW50PWUodCksdGhpcy5vcHRpb25zPWUuZXh0ZW5kKHt9LGUuZm4uY29sbGFwc2UuZGVmYXVsdHMsbiksdGhpcy5vcHRpb25zLnBhcmVudCYmKHRoaXMuJHBhcmVudD1lKHRoaXMub3B0aW9ucy5wYXJlbnQpKSx0aGlzLm9wdGlvbnMudG9nZ2xlJiZ0aGlzLnRvZ2dsZSgpfTt0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dCxkaW1lbnNpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJ3aWR0aCIpO3JldHVybiBlPyJ3aWR0aCI6ImhlaWdodCJ9LHNob3c6ZnVuY3Rpb24oKXt2YXIgdCxuLHIsaTtpZih0aGlzLnRyYW5zaXRpb25pbmd8fHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImluIikpcmV0dXJuO3Q9dGhpcy5kaW1lbnNpb24oKSxuPWUuY2FtZWxDYXNlKFsic2Nyb2xsIix0XS5qb2luKCItIikpLHI9dGhpcy4kcGFyZW50JiZ0aGlzLiRwYXJlbnQuZmluZCgiPiAuYWNjb3JkaW9uLWdyb3VwID4gLmluIik7aWYociYmci5sZW5ndGgpe2k9ci5kYXRhKCJjb2xsYXBzZSIpO2lmKGkmJmkudHJhbnNpdGlvbmluZylyZXR1cm47ci5jb2xsYXBzZSgiaGlkZSIpLGl8fHIuZGF0YSgiY29sbGFwc2UiLG51bGwpfXRoaXMuJGVsZW1lbnRbdF0oMCksdGhpcy50cmFuc2l0aW9uKCJhZGRDbGFzcyIsZS5FdmVudCgic2hvdyIpLCJzaG93biIpLGUuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50W3RdKHRoaXMuJGVsZW1lbnRbMF1bbl0pfSxoaWRlOmZ1bmN0aW9uKCl7dmFyIHQ7aWYodGhpcy50cmFuc2l0aW9uaW5nfHwhdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiaW4iKSlyZXR1cm47dD10aGlzLmRpbWVuc2lvbigpLHRoaXMucmVzZXQodGhpcy4kZWxlbWVudFt0XSgpKSx0aGlzLnRyYW5zaXRpb24oInJlbW92ZUNsYXNzIixlLkV2ZW50KCJoaWRlIiksImhpZGRlbiIpLHRoaXMuJGVsZW1lbnRbdF0oMCl9LHJlc2V0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZGltZW5zaW9uKCk7cmV0dXJuIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoImNvbGxhcHNlIilbdF0oZXx8ImF1dG8iKVswXS5vZmZzZXRXaWR0aCx0aGlzLiRlbGVtZW50W2UhPT1udWxsPyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oImNvbGxhcHNlIiksdGhpc30sdHJhbnNpdGlvbjpmdW5jdGlvbih0LG4scil7dmFyIGk9dGhpcyxzPWZ1bmN0aW9uKCl7bi50eXBlPT0ic2hvdyImJmkucmVzZXQoKSxpLnRyYW5zaXRpb25pbmc9MCxpLiRlbGVtZW50LnRyaWdnZXIocil9O3RoaXMuJGVsZW1lbnQudHJpZ2dlcihuKTtpZihuLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjt0aGlzLnRyYW5zaXRpb25pbmc9MSx0aGlzLiRlbGVtZW50W3RdKCJpbiIpLGUuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJjb2xsYXBzZSIpP3RoaXMuJGVsZW1lbnQub25lKGUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxzKTpzKCl9LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXNbdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiaW4iKT8iaGlkZSI6InNob3ciXSgpfX07dmFyIG49ZS5mbi5jb2xsYXBzZTtlLmZuLmNvbGxhcHNlPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLGk9ci5kYXRhKCJjb2xsYXBzZSIpLHM9ZS5leHRlbmQoe30sZS5mbi5jb2xsYXBzZS5kZWZhdWx0cyxyLmRhdGEoKSx0eXBlb2Ygbj09Im9iamVjdCImJm4pO2l8fHIuZGF0YSgiY29sbGFwc2UiLGk9bmV3IHQodGhpcyxzKSksdHlwZW9mIG49PSJzdHJpbmciJiZpW25dKCl9KX0sZS5mbi5jb2xsYXBzZS5kZWZhdWx0cz17dG9nZ2xlOiEwfSxlLmZuLmNvbGxhcHNlLkNvbnN0cnVjdG9yPXQsZS5mbi5jb2xsYXBzZS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4uY29sbGFwc2U9bix0aGlzfSxlKGRvY3VtZW50KS5vbigiY2xpY2suY29sbGFwc2UuZGF0YS1hcGkiLCJbZGF0YS10b2dnbGU9Y29sbGFwc2VdIixmdW5jdGlvbih0KXt2YXIgbj1lKHRoaXMpLHIsaT1uLmF0dHIoImRhdGEtdGFyZ2V0Iil8fHQucHJldmVudERlZmF1bHQoKXx8KHI9bi5hdHRyKCJocmVmIikpJiZyLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIikscz1lKGkpLmRhdGEoImNvbGxhcHNlIik/InRvZ2dsZSI6bi5kYXRhKCk7bltlKGkpLmhhc0NsYXNzKCJpbiIpPyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oImNvbGxhcHNlZCIpLGUoaSkuY29sbGFwc2Uocyl9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7ZSgiLmRyb3Bkb3duLWJhY2tkcm9wIikucmVtb3ZlKCksZSh0KS5lYWNoKGZ1bmN0aW9uKCl7aShlKHRoaXMpKS5yZW1vdmVDbGFzcygib3BlbiIpfSl9ZnVuY3Rpb24gaSh0KXt2YXIgbj10LmF0dHIoImRhdGEtdGFyZ2V0IikscjtufHwobj10LmF0dHIoImhyZWYiKSxuPW4mJi8jLy50ZXN0KG4pJiZuLnJlcGxhY2UoLy4qKD89I1teXHNdKiQpLywiIikpLHI9biYmZShuKTtpZighcnx8IXIubGVuZ3RoKXI9dC5wYXJlbnQoKTtyZXR1cm4gcn12YXIgdD0iW2RhdGEtdG9nZ2xlPWRyb3Bkb3duXSIsbj1mdW5jdGlvbih0KXt2YXIgbj1lKHQpLm9uKCJjbGljay5kcm9wZG93bi5kYXRhLWFwaSIsdGhpcy50b2dnbGUpO2UoImh0bWwiKS5vbigiY2xpY2suZHJvcGRvd24uZGF0YS1hcGkiLGZ1bmN0aW9uKCl7bi5wYXJlbnQoKS5yZW1vdmVDbGFzcygib3BlbiIpfSl9O24ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpuLHRvZ2dsZTpmdW5jdGlvbih0KXt2YXIgbj1lKHRoaXMpLHMsbztpZihuLmlzKCIuZGlzYWJsZWQsIDpkaXNhYmxlZCIpKXJldHVybjtyZXR1cm4gcz1pKG4pLG89cy5oYXNDbGFzcygib3BlbiIpLHIoKSxvfHwoIm9udG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmUoJzxkaXYgY2xhc3M9ImRyb3Bkb3duLWJhY2tkcm9wIi8+JykuaW5zZXJ0QmVmb3JlKGUodGhpcykpLm9uKCJjbGljayIscikscy50b2dnbGVDbGFzcygib3BlbiIpKSxuLmZvY3VzKCksITF9LGtleWRvd246ZnVuY3Rpb24obil7dmFyIHIscyxvLHUsYSxmO2lmKCEvKDM4fDQwfDI3KS8udGVzdChuLmtleUNvZGUpKXJldHVybjtyPWUodGhpcyksbi5wcmV2ZW50RGVmYXVsdCgpLG4uc3RvcFByb3BhZ2F0aW9uKCk7aWYoci5pcygiLmRpc2FibGVkLCA6ZGlzYWJsZWQiKSlyZXR1cm47dT1pKHIpLGE9dS5oYXNDbGFzcygib3BlbiIpO2lmKCFhfHxhJiZuLmtleUNvZGU9PTI3KXJldHVybiBuLndoaWNoPT0yNyYmdS5maW5kKHQpLmZvY3VzKCksci5jbGljaygpO3M9ZSgiW3JvbGU9bWVudV0gbGk6bm90KC5kaXZpZGVyKTp2aXNpYmxlIGEiLHUpO2lmKCFzLmxlbmd0aClyZXR1cm47Zj1zLmluZGV4KHMuZmlsdGVyKCI6Zm9jdXMiKSksbi5rZXlDb2RlPT0zOCYmZj4wJiZmLS0sbi5rZXlDb2RlPT00MCYmZjxzLmxlbmd0aC0xJiZmKyssfmZ8fChmPTApLHMuZXEoZikuZm9jdXMoKX19O3ZhciBzPWUuZm4uZHJvcGRvd247ZS5mbi5kcm9wZG93bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKSxpPXIuZGF0YSgiZHJvcGRvd24iKTtpfHxyLmRhdGEoImRyb3Bkb3duIixpPW5ldyBuKHRoaXMpKSx0eXBlb2YgdD09InN0cmluZyImJmlbdF0uY2FsbChyKX0pfSxlLmZuLmRyb3Bkb3duLkNvbnN0cnVjdG9yPW4sZS5mbi5kcm9wZG93bi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4uZHJvcGRvd249cyx0aGlzfSxlKGRvY3VtZW50KS5vbigiY2xpY2suZHJvcGRvd24uZGF0YS1hcGkiLHIpLm9uKCJjbGljay5kcm9wZG93bi5kYXRhLWFwaSIsIi5kcm9wZG93biBmb3JtIixmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpfSkub24oImNsaWNrLmRyb3Bkb3duLmRhdGEtYXBpIix0LG4ucHJvdG90eXBlLnRvZ2dsZSkub24oImtleWRvd24uZHJvcGRvd24uZGF0YS1hcGkiLHQrIiwgW3JvbGU9bWVudV0iLG4ucHJvdG90eXBlLmtleWRvd24pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKHQsbil7dGhpcy5vcHRpb25zPW4sdGhpcy4kZWxlbWVudD1lKHQpLmRlbGVnYXRlKCdbZGF0YS1kaXNtaXNzPSJtb2RhbCJdJywiY2xpY2suZGlzbWlzcy5tb2RhbCIsZS5wcm94eSh0aGlzLmhpZGUsdGhpcykpLHRoaXMub3B0aW9ucy5yZW1vdGUmJnRoaXMuJGVsZW1lbnQuZmluZCgiLm1vZGFsLWJvZHkiKS5sb2FkKHRoaXMub3B0aW9ucy5yZW1vdGUpfTt0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dCx0b2dnbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0aGlzLmlzU2hvd24/ImhpZGUiOiJzaG93Il0oKX0sc2hvdzpmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1lLkV2ZW50KCJzaG93Iik7dGhpcy4kZWxlbWVudC50cmlnZ2VyKG4pO2lmKHRoaXMuaXNTaG93bnx8bi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47dGhpcy5pc1Nob3duPSEwLHRoaXMuZXNjYXBlKCksdGhpcy5iYWNrZHJvcChmdW5jdGlvbigpe3ZhciBuPWUuc3VwcG9ydC50cmFuc2l0aW9uJiZ0LiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik7dC4kZWxlbWVudC5wYXJlbnQoKS5sZW5ndGh8fHQuJGVsZW1lbnQuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSksdC4kZWxlbWVudC5zaG93KCksbiYmdC4kZWxlbWVudFswXS5vZmZzZXRXaWR0aCx0LiRlbGVtZW50LmFkZENsYXNzKCJpbiIpLmF0dHIoImFyaWEtaGlkZGVuIiwhMSksdC5lbmZvcmNlRm9jdXMoKSxuP3QuJGVsZW1lbnQub25lKGUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxmdW5jdGlvbigpe3QuJGVsZW1lbnQuZm9jdXMoKS50cmlnZ2VyKCJzaG93biIpfSk6dC4kZWxlbWVudC5mb2N1cygpLnRyaWdnZXIoInNob3duIil9KX0saGlkZTpmdW5jdGlvbih0KXt0JiZ0LnByZXZlbnREZWZhdWx0KCk7dmFyIG49dGhpczt0PWUuRXZlbnQoImhpZGUiKSx0aGlzLiRlbGVtZW50LnRyaWdnZXIodCk7aWYoIXRoaXMuaXNTaG93bnx8dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47dGhpcy5pc1Nob3duPSExLHRoaXMuZXNjYXBlKCksZShkb2N1bWVudCkub2ZmKCJmb2N1c2luLm1vZGFsIiksdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygiaW4iKS5hdHRyKCJhcmlhLWhpZGRlbiIsITApLGUuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik/dGhpcy5oaWRlV2l0aFRyYW5zaXRpb24oKTp0aGlzLmhpZGVNb2RhbCgpfSxlbmZvcmNlRm9jdXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2UoZG9jdW1lbnQpLm9uKCJmb2N1c2luLm1vZGFsIixmdW5jdGlvbihlKXt0LiRlbGVtZW50WzBdIT09ZS50YXJnZXQmJiF0LiRlbGVtZW50LmhhcyhlLnRhcmdldCkubGVuZ3RoJiZ0LiRlbGVtZW50LmZvY3VzKCl9KX0sZXNjYXBlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmlzU2hvd24mJnRoaXMub3B0aW9ucy5rZXlib2FyZD90aGlzLiRlbGVtZW50Lm9uKCJrZXl1cC5kaXNtaXNzLm1vZGFsIixmdW5jdGlvbih0KXt0LndoaWNoPT0yNyYmZS5oaWRlKCl9KTp0aGlzLmlzU2hvd258fHRoaXMuJGVsZW1lbnQub2ZmKCJrZXl1cC5kaXNtaXNzLm1vZGFsIil9LGhpZGVXaXRoVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC4kZWxlbWVudC5vZmYoZS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKSx0LmhpZGVNb2RhbCgpfSw1MDApO3RoaXMuJGVsZW1lbnQub25lKGUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxmdW5jdGlvbigpe2NsZWFyVGltZW91dChuKSx0LmhpZGVNb2RhbCgpfSl9LGhpZGVNb2RhbDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kZWxlbWVudC5oaWRlKCksdGhpcy5iYWNrZHJvcChmdW5jdGlvbigpe2UucmVtb3ZlQmFja2Ryb3AoKSxlLiRlbGVtZW50LnRyaWdnZXIoImhpZGRlbiIpfSl9LHJlbW92ZUJhY2tkcm9wOmZ1bmN0aW9uKCl7dGhpcy4kYmFja2Ryb3AmJnRoaXMuJGJhY2tkcm9wLnJlbW92ZSgpLHRoaXMuJGJhY2tkcm9wPW51bGx9LGJhY2tkcm9wOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMscj10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik/ImZhZGUiOiIiO2lmKHRoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmJhY2tkcm9wKXt2YXIgaT1lLnN1cHBvcnQudHJhbnNpdGlvbiYmcjt0aGlzLiRiYWNrZHJvcD1lKCc8ZGl2IGNsYXNzPSJtb2RhbC1iYWNrZHJvcCAnK3IrJyIgLz4nKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KSx0aGlzLiRiYWNrZHJvcC5jbGljayh0aGlzLm9wdGlvbnMuYmFja2Ryb3A9PSJzdGF0aWMiP2UucHJveHkodGhpcy4kZWxlbWVudFswXS5mb2N1cyx0aGlzLiRlbGVtZW50WzBdKTplLnByb3h5KHRoaXMuaGlkZSx0aGlzKSksaSYmdGhpcy4kYmFja2Ryb3BbMF0ub2Zmc2V0V2lkdGgsdGhpcy4kYmFja2Ryb3AuYWRkQ2xhc3MoImluIik7aWYoIXQpcmV0dXJuO2k/dGhpcy4kYmFja2Ryb3Aub25lKGUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCx0KTp0KCl9ZWxzZSF0aGlzLmlzU2hvd24mJnRoaXMuJGJhY2tkcm9wPyh0aGlzLiRiYWNrZHJvcC5yZW1vdmVDbGFzcygiaW4iKSxlLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpP3RoaXMuJGJhY2tkcm9wLm9uZShlLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsdCk6dCgpKTp0JiZ0KCl9fTt2YXIgbj1lLmZuLm1vZGFsO2UuZm4ubW9kYWw9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciByPWUodGhpcyksaT1yLmRhdGEoIm1vZGFsIikscz1lLmV4dGVuZCh7fSxlLmZuLm1vZGFsLmRlZmF1bHRzLHIuZGF0YSgpLHR5cGVvZiBuPT0ib2JqZWN0IiYmbik7aXx8ci5kYXRhKCJtb2RhbCIsaT1uZXcgdCh0aGlzLHMpKSx0eXBlb2Ygbj09InN0cmluZyI/aVtuXSgpOnMuc2hvdyYmaS5zaG93KCl9KX0sZS5mbi5tb2RhbC5kZWZhdWx0cz17YmFja2Ryb3A6ITAsa2V5Ym9hcmQ6ITAsc2hvdzohMH0sZS5mbi5tb2RhbC5Db25zdHJ1Y3Rvcj10LGUuZm4ubW9kYWwubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBlLmZuLm1vZGFsPW4sdGhpc30sZShkb2N1bWVudCkub24oImNsaWNrLm1vZGFsLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlPSJtb2RhbCJdJyxmdW5jdGlvbih0KXt2YXIgbj1lKHRoaXMpLHI9bi5hdHRyKCJocmVmIiksaT1lKG4uYXR0cigiZGF0YS10YXJnZXQiKXx8ciYmci5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpKSxzPWkuZGF0YSgibW9kYWwiKT8idG9nZ2xlIjplLmV4dGVuZCh7cmVtb3RlOiEvIy8udGVzdChyKSYmcn0saS5kYXRhKCksbi5kYXRhKCkpO3QucHJldmVudERlZmF1bHQoKSxpLm1vZGFsKHMpLm9uZSgiaGlkZSIsZnVuY3Rpb24oKXtuLmZvY3VzKCl9KX0pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKGUsdCl7dGhpcy5pbml0KCJ0b29sdGlwIixlLHQpfTt0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dCxpbml0OmZ1bmN0aW9uKHQsbixyKXt2YXIgaSxzLG8sdSxhO3RoaXMudHlwZT10LHRoaXMuJGVsZW1lbnQ9ZShuKSx0aGlzLm9wdGlvbnM9dGhpcy5nZXRPcHRpb25zKHIpLHRoaXMuZW5hYmxlZD0hMCxvPXRoaXMub3B0aW9ucy50cmlnZ2VyLnNwbGl0KCIgIik7Zm9yKGE9by5sZW5ndGg7YS0tOyl1PW9bYV0sdT09ImNsaWNrIj90aGlzLiRlbGVtZW50Lm9uKCJjbGljay4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsZS5wcm94eSh0aGlzLnRvZ2dsZSx0aGlzKSk6dSE9Im1hbnVhbCImJihpPXU9PSJob3ZlciI/Im1vdXNlZW50ZXIiOiJmb2N1cyIscz11PT0iaG92ZXIiPyJtb3VzZWxlYXZlIjoiYmx1ciIsdGhpcy4kZWxlbWVudC5vbihpKyIuIit0aGlzLnR5cGUsdGhpcy5vcHRpb25zLnNlbGVjdG9yLGUucHJveHkodGhpcy5lbnRlcix0aGlzKSksdGhpcy4kZWxlbWVudC5vbihzKyIuIit0aGlzLnR5cGUsdGhpcy5vcHRpb25zLnNlbGVjdG9yLGUucHJveHkodGhpcy5sZWF2ZSx0aGlzKSkpO3RoaXMub3B0aW9ucy5zZWxlY3Rvcj90aGlzLl9vcHRpb25zPWUuZXh0ZW5kKHt9LHRoaXMub3B0aW9ucyx7dHJpZ2dlcjoibWFudWFsIixzZWxlY3RvcjoiIn0pOnRoaXMuZml4VGl0bGUoKX0sZ2V0T3B0aW9uczpmdW5jdGlvbih0KXtyZXR1cm4gdD1lLmV4dGVuZCh7fSxlLmZuW3RoaXMudHlwZV0uZGVmYXVsdHMsdGhpcy4kZWxlbWVudC5kYXRhKCksdCksdC5kZWxheSYmdHlwZW9mIHQuZGVsYXk9PSJudW1iZXIiJiYodC5kZWxheT17c2hvdzp0LmRlbGF5LGhpZGU6dC5kZWxheX0pLHR9LGVudGVyOmZ1bmN0aW9uKHQpe3ZhciBuPWUuZm5bdGhpcy50eXBlXS5kZWZhdWx0cyxyPXt9LGk7dGhpcy5fb3B0aW9ucyYmZS5lYWNoKHRoaXMuX29wdGlvbnMsZnVuY3Rpb24oZSx0KXtuW2VdIT10JiYocltlXT10KX0sdGhpcyksaT1lKHQuY3VycmVudFRhcmdldClbdGhpcy50eXBlXShyKS5kYXRhKHRoaXMudHlwZSk7aWYoIWkub3B0aW9ucy5kZWxheXx8IWkub3B0aW9ucy5kZWxheS5zaG93KXJldHVybiBpLnNob3coKTtjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KSxpLmhvdmVyU3RhdGU9ImluIix0aGlzLnRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2kuaG92ZXJTdGF0ZT09ImluIiYmaS5zaG93KCl9LGkub3B0aW9ucy5kZWxheS5zaG93KX0sbGVhdmU6ZnVuY3Rpb24odCl7dmFyIG49ZSh0LmN1cnJlbnRUYXJnZXQpW3RoaXMudHlwZV0odGhpcy5fb3B0aW9ucykuZGF0YSh0aGlzLnR5cGUpO3RoaXMudGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7aWYoIW4ub3B0aW9ucy5kZWxheXx8IW4ub3B0aW9ucy5kZWxheS5oaWRlKXJldHVybiBuLmhpZGUoKTtuLmhvdmVyU3RhdGU9Im91dCIsdGhpcy50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLmhvdmVyU3RhdGU9PSJvdXQiJiZuLmhpZGUoKX0sbi5vcHRpb25zLmRlbGF5LmhpZGUpfSxzaG93OmZ1bmN0aW9uKCl7dmFyIHQsbixyLGkscyxvLHU9ZS5FdmVudCgic2hvdyIpO2lmKHRoaXMuaGFzQ29udGVudCgpJiZ0aGlzLmVuYWJsZWQpe3RoaXMuJGVsZW1lbnQudHJpZ2dlcih1KTtpZih1LmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjt0PXRoaXMudGlwKCksdGhpcy5zZXRDb250ZW50KCksdGhpcy5vcHRpb25zLmFuaW1hdGlvbiYmdC5hZGRDbGFzcygiZmFkZSIpLHM9dHlwZW9mIHRoaXMub3B0aW9ucy5wbGFjZW1lbnQ9PSJmdW5jdGlvbiI/dGhpcy5vcHRpb25zLnBsYWNlbWVudC5jYWxsKHRoaXMsdFswXSx0aGlzLiRlbGVtZW50WzBdKTp0aGlzLm9wdGlvbnMucGxhY2VtZW50LHQuZGV0YWNoKCkuY3NzKHt0b3A6MCxsZWZ0OjAsZGlzcGxheToiYmxvY2sifSksdGhpcy5vcHRpb25zLmNvbnRhaW5lcj90LmFwcGVuZFRvKHRoaXMub3B0aW9ucy5jb250YWluZXIpOnQuaW5zZXJ0QWZ0ZXIodGhpcy4kZWxlbWVudCksbj10aGlzLmdldFBvc2l0aW9uKCkscj10WzBdLm9mZnNldFdpZHRoLGk9dFswXS5vZmZzZXRIZWlnaHQ7c3dpdGNoKHMpe2Nhc2UiYm90dG9tIjpvPXt0b3A6bi50b3Arbi5oZWlnaHQsbGVmdDpuLmxlZnQrbi53aWR0aC8yLXIvMn07YnJlYWs7Y2FzZSJ0b3AiOm89e3RvcDpuLnRvcC1pLGxlZnQ6bi5sZWZ0K24ud2lkdGgvMi1yLzJ9O2JyZWFrO2Nhc2UibGVmdCI6bz17dG9wOm4udG9wK24uaGVpZ2h0LzItaS8yLGxlZnQ6bi5sZWZ0LXJ9O2JyZWFrO2Nhc2UicmlnaHQiOm89e3RvcDpuLnRvcCtuLmhlaWdodC8yLWkvMixsZWZ0Om4ubGVmdCtuLndpZHRofX10aGlzLmFwcGx5UGxhY2VtZW50KG8scyksdGhpcy4kZWxlbWVudC50cmlnZ2VyKCJzaG93biIpfX0sYXBwbHlQbGFjZW1lbnQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnRpcCgpLHI9blswXS5vZmZzZXRXaWR0aCxpPW5bMF0ub2Zmc2V0SGVpZ2h0LHMsbyx1LGE7bi5vZmZzZXQoZSkuYWRkQ2xhc3ModCkuYWRkQ2xhc3MoImluIikscz1uWzBdLm9mZnNldFdpZHRoLG89blswXS5vZmZzZXRIZWlnaHQsdD09InRvcCImJm8hPWkmJihlLnRvcD1lLnRvcCtpLW8sYT0hMCksdD09ImJvdHRvbSJ8fHQ9PSJ0b3AiPyh1PTAsZS5sZWZ0PDAmJih1PWUubGVmdCotMixlLmxlZnQ9MCxuLm9mZnNldChlKSxzPW5bMF0ub2Zmc2V0V2lkdGgsbz1uWzBdLm9mZnNldEhlaWdodCksdGhpcy5yZXBsYWNlQXJyb3codS1yK3MscywibGVmdCIpKTp0aGlzLnJlcGxhY2VBcnJvdyhvLWksbywidG9wIiksYSYmbi5vZmZzZXQoZSl9LHJlcGxhY2VBcnJvdzpmdW5jdGlvbihlLHQsbil7dGhpcy5hcnJvdygpLmNzcyhuLGU/NTAqKDEtZS90KSsiJSI6IiIpfSxzZXRDb250ZW50OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50aXAoKSx0PXRoaXMuZ2V0VGl0bGUoKTtlLmZpbmQoIi50b29sdGlwLWlubmVyIilbdGhpcy5vcHRpb25zLmh0bWw/Imh0bWwiOiJ0ZXh0Il0odCksZS5yZW1vdmVDbGFzcygiZmFkZSBpbiB0b3AgYm90dG9tIGxlZnQgcmlnaHQiKX0saGlkZTpmdW5jdGlvbigpe2Z1bmN0aW9uIGkoKXt2YXIgdD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5vZmYoZS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKS5kZXRhY2goKX0sNTAwKTtuLm9uZShlLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodCksbi5kZXRhY2goKX0pfXZhciB0PXRoaXMsbj10aGlzLnRpcCgpLHI9ZS5FdmVudCgiaGlkZSIpO3RoaXMuJGVsZW1lbnQudHJpZ2dlcihyKTtpZihyLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjtyZXR1cm4gbi5yZW1vdmVDbGFzcygiaW4iKSxlLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kdGlwLmhhc0NsYXNzKCJmYWRlIik/aSgpOm4uZGV0YWNoKCksdGhpcy4kZWxlbWVudC50cmlnZ2VyKCJoaWRkZW4iKSx0aGlzfSxmaXhUaXRsZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJGVsZW1lbnQ7KGUuYXR0cigidGl0bGUiKXx8dHlwZW9mIGUuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIpIT0ic3RyaW5nIikmJmUuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIsZS5hdHRyKCJ0aXRsZSIpfHwiIikuYXR0cigidGl0bGUiLCIiKX0saGFzQ29udGVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kZWxlbWVudFswXTtyZXR1cm4gZS5leHRlbmQoe30sdHlwZW9mIHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0PT0iZnVuY3Rpb24iP3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6e3dpZHRoOnQub2Zmc2V0V2lkdGgsaGVpZ2h0OnQub2Zmc2V0SGVpZ2h0fSx0aGlzLiRlbGVtZW50Lm9mZnNldCgpKX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuJGVsZW1lbnQsbj10aGlzLm9wdGlvbnM7cmV0dXJuIGU9dC5hdHRyKCJkYXRhLW9yaWdpbmFsLXRpdGxlIil8fCh0eXBlb2Ygbi50aXRsZT09ImZ1bmN0aW9uIj9uLnRpdGxlLmNhbGwodFswXSk6bi50aXRsZSksZX0sdGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHRpcD10aGlzLiR0aXB8fGUodGhpcy5vcHRpb25zLnRlbXBsYXRlKX0sYXJyb3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kYXJyb3c9dGhpcy4kYXJyb3d8fHRoaXMudGlwKCkuZmluZCgiLnRvb2x0aXAtYXJyb3ciKX0sdmFsaWRhdGU6ZnVuY3Rpb24oKXt0aGlzLiRlbGVtZW50WzBdLnBhcmVudE5vZGV8fCh0aGlzLmhpZGUoKSx0aGlzLiRlbGVtZW50PW51bGwsdGhpcy5vcHRpb25zPW51bGwpfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9ITB9LGRpc2FibGU6ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9ITF9LHRvZ2dsZUVuYWJsZWQ6ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9IXRoaXMuZW5hYmxlZH0sdG9nZ2xlOmZ1bmN0aW9uKHQpe3ZhciBuPXQ/ZSh0LmN1cnJlbnRUYXJnZXQpW3RoaXMudHlwZV0odGhpcy5fb3B0aW9ucykuZGF0YSh0aGlzLnR5cGUpOnRoaXM7bi50aXAoKS5oYXNDbGFzcygiaW4iKT9uLmhpZGUoKTpuLnNob3coKX0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuaGlkZSgpLiRlbGVtZW50Lm9mZigiLiIrdGhpcy50eXBlKS5yZW1vdmVEYXRhKHRoaXMudHlwZSl9fTt2YXIgbj1lLmZuLnRvb2x0aXA7ZS5mbi50b29sdGlwPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLGk9ci5kYXRhKCJ0b29sdGlwIikscz10eXBlb2Ygbj09Im9iamVjdCImJm47aXx8ci5kYXRhKCJ0b29sdGlwIixpPW5ldyB0KHRoaXMscykpLHR5cGVvZiBuPT0ic3RyaW5nIiYmaVtuXSgpfSl9LGUuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvcj10LGUuZm4udG9vbHRpcC5kZWZhdWx0cz17YW5pbWF0aW9uOiEwLHBsYWNlbWVudDoidG9wIixzZWxlY3RvcjohMSx0ZW1wbGF0ZTonPGRpdiBjbGFzcz0idG9vbHRpcCI+PGRpdiBjbGFzcz0idG9vbHRpcC1hcnJvdyI+PC9kaXY+PGRpdiBjbGFzcz0idG9vbHRpcC1pbm5lciI+PC9kaXY+PC9kaXY+Jyx0cmlnZ2VyOiJob3ZlciBmb2N1cyIsdGl0bGU6IiIsZGVsYXk6MCxodG1sOiExLGNvbnRhaW5lcjohMX0sZS5mbi50b29sdGlwLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5mbi50b29sdGlwPW4sdGhpc319KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIHQ9ZnVuY3Rpb24oZSx0KXt0aGlzLmluaXQoInBvcG92ZXIiLGUsdCl9O3QucHJvdG90eXBlPWUuZXh0ZW5kKHt9LGUuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnQsc2V0Q29udGVudDpmdW5jdGlvbigpe3ZhciBlPXRoaXMudGlwKCksdD10aGlzLmdldFRpdGxlKCksbj10aGlzLmdldENvbnRlbnQoKTtlLmZpbmQoIi5wb3BvdmVyLXRpdGxlIilbdGhpcy5vcHRpb25zLmh0bWw/Imh0bWwiOiJ0ZXh0Il0odCksZS5maW5kKCIucG9wb3Zlci1jb250ZW50IilbdGhpcy5vcHRpb25zLmh0bWw/Imh0bWwiOiJ0ZXh0Il0obiksZS5yZW1vdmVDbGFzcygiZmFkZSB0b3AgYm90dG9tIGxlZnQgcmlnaHQgaW4iKX0saGFzQ29udGVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl8fHRoaXMuZ2V0Q29udGVudCgpfSxnZXRDb250ZW50OmZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLiRlbGVtZW50LG49dGhpcy5vcHRpb25zO3JldHVybiBlPSh0eXBlb2Ygbi5jb250ZW50PT0iZnVuY3Rpb24iP24uY29udGVudC5jYWxsKHRbMF0pOm4uY29udGVudCl8fHQuYXR0cigiZGF0YS1jb250ZW50IiksZX0sdGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHRpcHx8KHRoaXMuJHRpcD1lKHRoaXMub3B0aW9ucy50ZW1wbGF0ZSkpLHRoaXMuJHRpcH0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuaGlkZSgpLiRlbGVtZW50Lm9mZigiLiIrdGhpcy50eXBlKS5yZW1vdmVEYXRhKHRoaXMudHlwZSl9fSk7dmFyIG49ZS5mbi5wb3BvdmVyO2UuZm4ucG9wb3Zlcj1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKSxpPXIuZGF0YSgicG9wb3ZlciIpLHM9dHlwZW9mIG49PSJvYmplY3QiJiZuO2l8fHIuZGF0YSgicG9wb3ZlciIsaT1uZXcgdCh0aGlzLHMpKSx0eXBlb2Ygbj09InN0cmluZyImJmlbbl0oKX0pfSxlLmZuLnBvcG92ZXIuQ29uc3RydWN0b3I9dCxlLmZuLnBvcG92ZXIuZGVmYXVsdHM9ZS5leHRlbmQoe30sZS5mbi50b29sdGlwLmRlZmF1bHRzLHtwbGFjZW1lbnQ6InJpZ2h0Iix0cmlnZ2VyOiJjbGljayIsY29udGVudDoiIix0ZW1wbGF0ZTonPGRpdiBjbGFzcz0icG9wb3ZlciI+PGRpdiBjbGFzcz0iYXJyb3ciPjwvZGl2PjxoMyBjbGFzcz0icG9wb3Zlci10aXRsZSI+PC9oMz48ZGl2IGNsYXNzPSJwb3BvdmVyLWNvbnRlbnQiPjwvZGl2PjwvZGl2Pid9KSxlLmZuLnBvcG92ZXIubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBlLmZuLnBvcG92ZXI9bix0aGlzfX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KHQsbil7dmFyIHI9ZS5wcm94eSh0aGlzLnByb2Nlc3MsdGhpcyksaT1lKHQpLmlzKCJib2R5Iik/ZSh3aW5kb3cpOmUodCksczt0aGlzLm9wdGlvbnM9ZS5leHRlbmQoe30sZS5mbi5zY3JvbGxzcHkuZGVmYXVsdHMsbiksdGhpcy4kc2Nyb2xsRWxlbWVudD1pLm9uKCJzY3JvbGwuc2Nyb2xsLXNweS5kYXRhLWFwaSIsciksdGhpcy5zZWxlY3Rvcj0odGhpcy5vcHRpb25zLnRhcmdldHx8KHM9ZSh0KS5hdHRyKCJocmVmIikpJiZzLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIil8fCIiKSsiIC5uYXYgbGkgPiBhIix0aGlzLiRib2R5PWUoImJvZHkiKSx0aGlzLnJlZnJlc2goKSx0aGlzLnByb2Nlc3MoKX10LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dCxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuO3RoaXMub2Zmc2V0cz1lKFtdKSx0aGlzLnRhcmdldHM9ZShbXSksbj10aGlzLiRib2R5LmZpbmQodGhpcy5zZWxlY3RvcikubWFwKGZ1bmN0aW9uKCl7dmFyIG49ZSh0aGlzKSxyPW4uZGF0YSgidGFyZ2V0Iil8fG4uYXR0cigiaHJlZiIpLGk9L14jXHcvLnRlc3QocikmJmUocik7cmV0dXJuIGkmJmkubGVuZ3RoJiZbW2kucG9zaXRpb24oKS50b3ArKCFlLmlzV2luZG93KHQuJHNjcm9sbEVsZW1lbnQuZ2V0KDApKSYmdC4kc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKSkscl1dfHxudWxsfSkuc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBlWzBdLXRbMF19KS5lYWNoKGZ1bmN0aW9uKCl7dC5vZmZzZXRzLnB1c2godGhpc1swXSksdC50YXJnZXRzLnB1c2godGhpc1sxXSl9KX0scHJvY2VzczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCkrdGhpcy5vcHRpb25zLm9mZnNldCx0PXRoaXMuJHNjcm9sbEVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0fHx0aGlzLiRib2R5WzBdLnNjcm9sbEhlaWdodCxuPXQtdGhpcy4kc2Nyb2xsRWxlbWVudC5oZWlnaHQoKSxyPXRoaXMub2Zmc2V0cyxpPXRoaXMudGFyZ2V0cyxzPXRoaXMuYWN0aXZlVGFyZ2V0LG87aWYoZT49bilyZXR1cm4gcyE9KG89aS5sYXN0KClbMF0pJiZ0aGlzLmFjdGl2YXRlKG8pO2ZvcihvPXIubGVuZ3RoO28tLTspcyE9aVtvXSYmZT49cltvXSYmKCFyW28rMV18fGU8PXJbbysxXSkmJnRoaXMuYWN0aXZhdGUoaVtvXSl9LGFjdGl2YXRlOmZ1bmN0aW9uKHQpe3ZhciBuLHI7dGhpcy5hY3RpdmVUYXJnZXQ9dCxlKHRoaXMuc2VsZWN0b3IpLnBhcmVudCgiLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSxyPXRoaXMuc2VsZWN0b3IrJ1tkYXRhLXRhcmdldD0iJyt0KyciXSwnK3RoaXMuc2VsZWN0b3IrJ1tocmVmPSInK3QrJyJdJyxuPWUocikucGFyZW50KCJsaSIpLmFkZENsYXNzKCJhY3RpdmUiKSxuLnBhcmVudCgiLmRyb3Bkb3duLW1lbnUiKS5sZW5ndGgmJihuPW4uY2xvc2VzdCgibGkuZHJvcGRvd24iKS5hZGRDbGFzcygiYWN0aXZlIikpLG4udHJpZ2dlcigiYWN0aXZhdGUiKX19O3ZhciBuPWUuZm4uc2Nyb2xsc3B5O2UuZm4uc2Nyb2xsc3B5PWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLGk9ci5kYXRhKCJzY3JvbGxzcHkiKSxzPXR5cGVvZiBuPT0ib2JqZWN0IiYmbjtpfHxyLmRhdGEoInNjcm9sbHNweSIsaT1uZXcgdCh0aGlzLHMpKSx0eXBlb2Ygbj09InN0cmluZyImJmlbbl0oKX0pfSxlLmZuLnNjcm9sbHNweS5Db25zdHJ1Y3Rvcj10LGUuZm4uc2Nyb2xsc3B5LmRlZmF1bHRzPXtvZmZzZXQ6MTB9LGUuZm4uc2Nyb2xsc3B5Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5mbi5zY3JvbGxzcHk9bix0aGlzfSxlKHdpbmRvdykub24oImxvYWQiLGZ1bmN0aW9uKCl7ZSgnW2RhdGEtc3B5PSJzY3JvbGwiXScpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3Quc2Nyb2xsc3B5KHQuZGF0YSgpKX0pfSl9KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIHQ9ZnVuY3Rpb24odCl7dGhpcy5lbGVtZW50PWUodCl9O3QucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp0LHNob3c6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQsbj10LmNsb3Nlc3QoInVsOm5vdCguZHJvcGRvd24tbWVudSkiKSxyPXQuYXR0cigiZGF0YS10YXJnZXQiKSxpLHMsbztyfHwocj10LmF0dHIoImhyZWYiKSxyPXImJnIucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCIiKSk7aWYodC5wYXJlbnQoImxpIikuaGFzQ2xhc3MoImFjdGl2ZSIpKXJldHVybjtpPW4uZmluZCgiLmFjdGl2ZTpsYXN0IGEiKVswXSxvPWUuRXZlbnQoInNob3ciLHtyZWxhdGVkVGFyZ2V0Oml9KSx0LnRyaWdnZXIobyk7aWYoby5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47cz1lKHIpLHRoaXMuYWN0aXZhdGUodC5wYXJlbnQoImxpIiksbiksdGhpcy5hY3RpdmF0ZShzLHMucGFyZW50KCksZnVuY3Rpb24oKXt0LnRyaWdnZXIoe3R5cGU6InNob3duIixyZWxhdGVkVGFyZ2V0Oml9KX0pfSxhY3RpdmF0ZTpmdW5jdGlvbih0LG4scil7ZnVuY3Rpb24gbygpe2kucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLmZpbmQoIj4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLHQuYWRkQ2xhc3MoImFjdGl2ZSIpLHM/KHRbMF0ub2Zmc2V0V2lkdGgsdC5hZGRDbGFzcygiaW4iKSk6dC5yZW1vdmVDbGFzcygiZmFkZSIpLHQucGFyZW50KCIuZHJvcGRvd24tbWVudSIpJiZ0LmNsb3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xhc3MoImFjdGl2ZSIpLHImJnIoKX12YXIgaT1uLmZpbmQoIj4gLmFjdGl2ZSIpLHM9ciYmZS5zdXBwb3J0LnRyYW5zaXRpb24mJmkuaGFzQ2xhc3MoImZhZGUiKTtzP2kub25lKGUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxvKTpvKCksaS5yZW1vdmVDbGFzcygiaW4iKX19O3ZhciBuPWUuZm4udGFiO2UuZm4udGFiPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLGk9ci5kYXRhKCJ0YWIiKTtpfHxyLmRhdGEoInRhYiIsaT1uZXcgdCh0aGlzKSksdHlwZW9mIG49PSJzdHJpbmciJiZpW25dKCl9KX0sZS5mbi50YWIuQ29uc3RydWN0b3I9dCxlLmZuLnRhYi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4udGFiPW4sdGhpc30sZShkb2N1bWVudCkub24oImNsaWNrLnRhYi5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZT0idGFiIl0sIFtkYXRhLXRvZ2dsZT0icGlsbCJdJyxmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksZSh0aGlzKS50YWIoInNob3ciKX0pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKHQsbil7dGhpcy4kZWxlbWVudD1lKHQpLHRoaXMub3B0aW9ucz1lLmV4dGVuZCh7fSxlLmZuLnR5cGVhaGVhZC5kZWZhdWx0cyxuKSx0aGlzLm1hdGNoZXI9dGhpcy5vcHRpb25zLm1hdGNoZXJ8fHRoaXMubWF0Y2hlcix0aGlzLnNvcnRlcj10aGlzLm9wdGlvbnMuc29ydGVyfHx0aGlzLnNvcnRlcix0aGlzLmhpZ2hsaWdodGVyPXRoaXMub3B0aW9ucy5oaWdobGlnaHRlcnx8dGhpcy5oaWdobGlnaHRlcix0aGlzLnVwZGF0ZXI9dGhpcy5vcHRpb25zLnVwZGF0ZXJ8fHRoaXMudXBkYXRlcix0aGlzLnNvdXJjZT10aGlzLm9wdGlvbnMuc291cmNlLHRoaXMuJG1lbnU9ZSh0aGlzLm9wdGlvbnMubWVudSksdGhpcy5zaG93bj0hMSx0aGlzLmxpc3RlbigpfTt0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dCxzZWxlY3Q6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRtZW51LmZpbmQoIi5hY3RpdmUiKS5hdHRyKCJkYXRhLXZhbHVlIik7cmV0dXJuIHRoaXMuJGVsZW1lbnQudmFsKHRoaXMudXBkYXRlcihlKSkuY2hhbmdlKCksdGhpcy5oaWRlKCl9LHVwZGF0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHNob3c6ZnVuY3Rpb24oKXt2YXIgdD1lLmV4dGVuZCh7fSx0aGlzLiRlbGVtZW50LnBvc2l0aW9uKCkse2hlaWdodDp0aGlzLiRlbGVtZW50WzBdLm9mZnNldEhlaWdodH0pO3JldHVybiB0aGlzLiRtZW51Lmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQpLmNzcyh7dG9wOnQudG9wK3QuaGVpZ2h0LGxlZnQ6dC5sZWZ0fSkuc2hvdygpLHRoaXMuc2hvd249ITAsdGhpc30saGlkZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRtZW51LmhpZGUoKSx0aGlzLnNob3duPSExLHRoaXN9LGxvb2t1cDpmdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gdGhpcy5xdWVyeT10aGlzLiRlbGVtZW50LnZhbCgpLCF0aGlzLnF1ZXJ5fHx0aGlzLnF1ZXJ5Lmxlbmd0aDx0aGlzLm9wdGlvbnMubWluTGVuZ3RoP3RoaXMuc2hvd24/dGhpcy5oaWRlKCk6dGhpczoobj1lLmlzRnVuY3Rpb24odGhpcy5zb3VyY2UpP3RoaXMuc291cmNlKHRoaXMucXVlcnksZS5wcm94eSh0aGlzLnByb2Nlc3MsdGhpcykpOnRoaXMuc291cmNlLG4/dGhpcy5wcm9jZXNzKG4pOnRoaXMpfSxwcm9jZXNzOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7cmV0dXJuIHQ9ZS5ncmVwKHQsZnVuY3Rpb24oZSl7cmV0dXJuIG4ubWF0Y2hlcihlKX0pLHQ9dGhpcy5zb3J0ZXIodCksdC5sZW5ndGg/dGhpcy5yZW5kZXIodC5zbGljZSgwLHRoaXMub3B0aW9ucy5pdGVtcykpLnNob3coKTp0aGlzLnNob3duP3RoaXMuaGlkZSgpOnRoaXN9LG1hdGNoZXI6ZnVuY3Rpb24oZSl7cmV0dXJufmUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMucXVlcnkudG9Mb3dlckNhc2UoKSl9LHNvcnRlcjpmdW5jdGlvbihlKXt2YXIgdD1bXSxuPVtdLHI9W10saTt3aGlsZShpPWUuc2hpZnQoKSlpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0aGlzLnF1ZXJ5LnRvTG93ZXJDYXNlKCkpP35pLmluZGV4T2YodGhpcy5xdWVyeSk/bi5wdXNoKGkpOnIucHVzaChpKTp0LnB1c2goaSk7cmV0dXJuIHQuY29uY2F0KG4scil9LGhpZ2hsaWdodGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucXVlcnkucmVwbGFjZSgvW1wtXFtcXXt9KCkqKz8uLFxcXF4kfCNcc10vZywiXFwkJiIpO3JldHVybiBlLnJlcGxhY2UobmV3IFJlZ0V4cCgiKCIrdCsiKSIsImlnIiksZnVuY3Rpb24oZSx0KXtyZXR1cm4iPHN0cm9uZz4iK3QrIjwvc3Ryb25nPiJ9KX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7cmV0dXJuIHQ9ZSh0KS5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm4gdD1lKG4ub3B0aW9ucy5pdGVtKS5hdHRyKCJkYXRhLXZhbHVlIixyKSx0LmZpbmQoImEiKS5odG1sKG4uaGlnaGxpZ2h0ZXIocikpLHRbMF19KSx0LmZpcnN0KCkuYWRkQ2xhc3MoImFjdGl2ZSIpLHRoaXMuJG1lbnUuaHRtbCh0KSx0aGlzfSxuZXh0OmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuJG1lbnUuZmluZCgiLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSxyPW4ubmV4dCgpO3IubGVuZ3RofHwocj1lKHRoaXMuJG1lbnUuZmluZCgibGkiKVswXSkpLHIuYWRkQ2xhc3MoImFjdGl2ZSIpfSxwcmV2OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJG1lbnUuZmluZCgiLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSxuPXQucHJldigpO24ubGVuZ3RofHwobj10aGlzLiRtZW51LmZpbmQoImxpIikubGFzdCgpKSxuLmFkZENsYXNzKCJhY3RpdmUiKX0sbGlzdGVuOmZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5vbigiZm9jdXMiLGUucHJveHkodGhpcy5mb2N1cyx0aGlzKSkub24oImJsdXIiLGUucHJveHkodGhpcy5ibHVyLHRoaXMpKS5vbigia2V5cHJlc3MiLGUucHJveHkodGhpcy5rZXlwcmVzcyx0aGlzKSkub24oImtleXVwIixlLnByb3h5KHRoaXMua2V5dXAsdGhpcykpLHRoaXMuZXZlbnRTdXBwb3J0ZWQoImtleWRvd24iKSYmdGhpcy4kZWxlbWVudC5vbigia2V5ZG93biIsZS5wcm94eSh0aGlzLmtleWRvd24sdGhpcykpLHRoaXMuJG1lbnUub24oImNsaWNrIixlLnByb3h5KHRoaXMuY2xpY2ssdGhpcykpLm9uKCJtb3VzZWVudGVyIiwibGkiLGUucHJveHkodGhpcy5tb3VzZWVudGVyLHRoaXMpKS5vbigibW91c2VsZWF2ZSIsImxpIixlLnByb3h5KHRoaXMubW91c2VsZWF2ZSx0aGlzKSl9LGV2ZW50U3VwcG9ydGVkOmZ1bmN0aW9uKGUpe3ZhciB0PWUgaW4gdGhpcy4kZWxlbWVudDtyZXR1cm4gdHx8KHRoaXMuJGVsZW1lbnQuc2V0QXR0cmlidXRlKGUsInJldHVybjsiKSx0PXR5cGVvZiB0aGlzLiRlbGVtZW50W2VdPT0iZnVuY3Rpb24iKSx0fSxtb3ZlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLnNob3duKXJldHVybjtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDk6Y2FzZSAxMzpjYXNlIDI3OmUucHJldmVudERlZmF1bHQoKTticmVhaztjYXNlIDM4OmUucHJldmVudERlZmF1bHQoKSx0aGlzLnByZXYoKTticmVhaztjYXNlIDQwOmUucHJldmVudERlZmF1bHQoKSx0aGlzLm5leHQoKX1lLnN0b3BQcm9wYWdhdGlvbigpfSxrZXlkb3duOmZ1bmN0aW9uKHQpe3RoaXMuc3VwcHJlc3NLZXlQcmVzc1JlcGVhdD1+ZS5pbkFycmF5KHQua2V5Q29kZSxbNDAsMzgsOSwxMywyN10pLHRoaXMubW92ZSh0KX0sa2V5cHJlc3M6ZnVuY3Rpb24oZSl7aWYodGhpcy5zdXBwcmVzc0tleVByZXNzUmVwZWF0KXJldHVybjt0aGlzLm1vdmUoZSl9LGtleXVwOmZ1bmN0aW9uKGUpe3N3aXRjaChlLmtleUNvZGUpe2Nhc2UgNDA6Y2FzZSAzODpjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpicmVhaztjYXNlIDk6Y2FzZSAxMzppZighdGhpcy5zaG93bilyZXR1cm47dGhpcy5zZWxlY3QoKTticmVhaztjYXNlIDI3OmlmKCF0aGlzLnNob3duKXJldHVybjt0aGlzLmhpZGUoKTticmVhaztkZWZhdWx0OnRoaXMubG9va3VwKCl9ZS5zdG9wUHJvcGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCl9LGZvY3VzOmZ1bmN0aW9uKGUpe3RoaXMuZm9jdXNlZD0hMH0sYmx1cjpmdW5jdGlvbihlKXt0aGlzLmZvY3VzZWQ9ITEsIXRoaXMubW91c2Vkb3ZlciYmdGhpcy5zaG93biYmdGhpcy5oaWRlKCl9LGNsaWNrOmZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2VsZWN0KCksdGhpcy4kZWxlbWVudC5mb2N1cygpfSxtb3VzZWVudGVyOmZ1bmN0aW9uKHQpe3RoaXMubW91c2Vkb3Zlcj0hMCx0aGlzLiRtZW51LmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksZSh0LmN1cnJlbnRUYXJnZXQpLmFkZENsYXNzKCJhY3RpdmUiKX0sbW91c2VsZWF2ZTpmdW5jdGlvbihlKXt0aGlzLm1vdXNlZG92ZXI9ITEsIXRoaXMuZm9jdXNlZCYmdGhpcy5zaG93biYmdGhpcy5oaWRlKCl9fTt2YXIgbj1lLmZuLnR5cGVhaGVhZDtlLmZuLnR5cGVhaGVhZD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKSxpPXIuZGF0YSgidHlwZWFoZWFkIikscz10eXBlb2Ygbj09Im9iamVjdCImJm47aXx8ci5kYXRhKCJ0eXBlYWhlYWQiLGk9bmV3IHQodGhpcyxzKSksdHlwZW9mIG49PSJzdHJpbmciJiZpW25dKCl9KX0sZS5mbi50eXBlYWhlYWQuZGVmYXVsdHM9e3NvdXJjZTpbXSxpdGVtczo4LG1lbnU6Jzx1bCBjbGFzcz0idHlwZWFoZWFkIGRyb3Bkb3duLW1lbnUiPjwvdWw+JyxpdGVtOic8bGk+PGEgaHJlZj0iIyI+PC9hPjwvbGk+JyxtaW5MZW5ndGg6MX0sZS5mbi50eXBlYWhlYWQuQ29uc3RydWN0b3I9dCxlLmZuLnR5cGVhaGVhZC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4udHlwZWFoZWFkPW4sdGhpc30sZShkb2N1bWVudCkub24oImZvY3VzLnR5cGVhaGVhZC5kYXRhLWFwaSIsJ1tkYXRhLXByb3ZpZGU9InR5cGVhaGVhZCJdJyxmdW5jdGlvbih0KXt2YXIgbj1lKHRoaXMpO2lmKG4uZGF0YSgidHlwZWFoZWFkIikpcmV0dXJuO24udHlwZWFoZWFkKG4uZGF0YSgpKX0pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKHQsbil7dGhpcy5vcHRpb25zPWUuZXh0ZW5kKHt9LGUuZm4uYWZmaXguZGVmYXVsdHMsbiksdGhpcy4kd2luZG93PWUod2luZG93KS5vbigic2Nyb2xsLmFmZml4LmRhdGEtYXBpIixlLnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbix0aGlzKSkub24oImNsaWNrLmFmZml4LmRhdGEtYXBpIixlLnByb3h5KGZ1bmN0aW9uKCl7c2V0VGltZW91dChlLnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbix0aGlzKSwxKX0sdGhpcykpLHRoaXMuJGVsZW1lbnQ9ZSh0KSx0aGlzLmNoZWNrUG9zaXRpb24oKX07dC5wcm90b3R5cGUuY2hlY2tQb3NpdGlvbj1mdW5jdGlvbigpe2lmKCF0aGlzLiRlbGVtZW50LmlzKCI6dmlzaWJsZSIpKXJldHVybjt2YXIgdD1lKGRvY3VtZW50KS5oZWlnaHQoKSxuPXRoaXMuJHdpbmRvdy5zY3JvbGxUb3AoKSxyPXRoaXMuJGVsZW1lbnQub2Zmc2V0KCksaT10aGlzLm9wdGlvbnMub2Zmc2V0LHM9aS5ib3R0b20sbz1pLnRvcCx1PSJhZmZpeCBhZmZpeC10b3AgYWZmaXgtYm90dG9tIixhO3R5cGVvZiBpIT0ib2JqZWN0IiYmKHM9bz1pKSx0eXBlb2Ygbz09ImZ1bmN0aW9uIiYmKG89aS50b3AoKSksdHlwZW9mIHM9PSJmdW5jdGlvbiImJihzPWkuYm90dG9tKCkpLGE9dGhpcy51bnBpbiE9bnVsbCYmbit0aGlzLnVucGluPD1yLnRvcD8hMTpzIT1udWxsJiZyLnRvcCt0aGlzLiRlbGVtZW50LmhlaWdodCgpPj10LXM/ImJvdHRvbSI6byE9bnVsbCYmbjw9bz8idG9wIjohMTtpZih0aGlzLmFmZml4ZWQ9PT1hKXJldHVybjt0aGlzLmFmZml4ZWQ9YSx0aGlzLnVucGluPWE9PSJib3R0b20iP3IudG9wLW46bnVsbCx0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHUpLmFkZENsYXNzKCJhZmZpeCIrKGE/Ii0iK2E6IiIpKX07dmFyIG49ZS5mbi5hZmZpeDtlLmZuLmFmZml4PWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLGk9ci5kYXRhKCJhZmZpeCIpLHM9dHlwZW9mIG49PSJvYmplY3QiJiZuO2l8fHIuZGF0YSgiYWZmaXgiLGk9bmV3IHQodGhpcyxzKSksdHlwZW9mIG49PSJzdHJpbmciJiZpW25dKCl9KX0sZS5mbi5hZmZpeC5Db25zdHJ1Y3Rvcj10LGUuZm4uYWZmaXguZGVmYXVsdHM9e29mZnNldDowfSxlLmZuLmFmZml4Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5mbi5hZmZpeD1uLHRoaXN9LGUod2luZG93KS5vbigibG9hZCIsZnVuY3Rpb24oKXtlKCdbZGF0YS1zcHk9ImFmZml4Il0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKSxuPXQuZGF0YSgpO24ub2Zmc2V0PW4ub2Zmc2V0fHx7fSxuLm9mZnNldEJvdHRvbSYmKG4ub2Zmc2V0LmJvdHRvbT1uLm9mZnNldEJvdHRvbSksbi5vZmZzZXRUb3AmJihuLm9mZnNldC50b3A9bi5vZmZzZXRUb3ApLHQuYWZmaXgobil9KX0pfSh3aW5kb3cualF1ZXJ5KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvZmlsdGVyc25pcHBldC5qcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9maWx0ZXJzbmlwcGV0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJiODRjNTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvZmlsdGVyc25pcHBldC5qcwpAQCAtMCwwICsxLDk0IEBACisidXNlIHN0cmljdCIKKworLy8gVGhlIGRpc2FibGUgcmVtb3ZlcyB0aGUgJ2RhdGVwaWNrZXInIGF0dHJpYnV0ZSBhbmQKKy8vIHNldHRpbmdzLCBzbyB5b3UgaGF2ZSB0byByZS1pbml0aWFsaXplIGl0IGVhY2ggdGltZQorLy8gdGhlIGRhdGUgcmFuZ2UgaXMgc2VsZWN0ZWQgYW5kIGVuYWJsZWQKKy8vIERPTSBpcyB1c2VkIGluc3RlYWQgb2YgalF1ZXJ5IHRvIGZpbmQgdGhlIGVsZW1lbnRzCisvLyBpbiBhbGwgY29udGV4dHMKK2Z1bmN0aW9uIGRhdGVfZW5hYmxlIChrZXksIGFjdGlvbikgeworCisgICAgdmFyIGVsZW1Gcm9tPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkYXRlX2Zyb21fIitrZXkpOworICAgIHZhciBlbGVtVG89ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRhdGVfdG9fIitrZXkpOworCisgICAgaWYgKCdlbmFibGUnID09IGFjdGlvbikgeworICAgICAgICBlbGVtRnJvbS5yZW1vdmVBdHRyaWJ1dGUoImRpc2FibGVkIik7CisgICAgICAgIGVsZW1Uby5yZW1vdmVBdHRyaWJ1dGUoImRpc2FibGVkIik7CisKKyAgICAgICAgJChlbGVtRnJvbSkuZGF0ZXBpY2tlcigpOworICAgICAgICAkKGVsZW1UbykuZGF0ZXBpY2tlcigpOworCisgICAgICAgICQoZWxlbUZyb20pLmRhdGVwaWNrZXIoICJvcHRpb24iLCAiZGF0ZUZvcm1hdCIsICJkZC9tbS95eSIgKTsKKyAgICAgICAgJChlbGVtVG8pLmRhdGVwaWNrZXIoICJvcHRpb24iLCAiZGF0ZUZvcm1hdCIsICJkZC9tbS95eSIgKTsKKworICAgICAgICAkKGVsZW1Gcm9tKS5kYXRlcGlja2VyKCAic2V0RGF0ZSIsIGVsZW1Gcm9tLmdldEF0dHJpYnV0ZSggImRhdGEtc2V0RGF0ZSIpICk7CisgICAgICAgICQoZWxlbVRvKS5kYXRlcGlja2VyKCAic2V0RGF0ZSIsIGVsZW1Uby5nZXRBdHRyaWJ1dGUoICJkYXRhLXNldERhdGUiKSApOworICAgICAgICAkKGVsZW1Gcm9tKS5kYXRlcGlja2VyKCAib3B0aW9uIiwgIm1pbkRhdGUiLCBlbGVtRnJvbS5nZXRBdHRyaWJ1dGUoICJkYXRhLW1pbkRhdGUiKSk7CisgICAgICAgICQoZWxlbVRvKS5kYXRlcGlja2VyKCAib3B0aW9uIiwgIm1pbkRhdGUiLCAgZWxlbVRvLmdldEF0dHJpYnV0ZSggImRhdGEtbWluRGF0ZSIpKTsKKyAgICAgICAgJChlbGVtRnJvbSkuZGF0ZXBpY2tlciggIm9wdGlvbiIsICJtYXhEYXRlIiwgZWxlbUZyb20uZ2V0QXR0cmlidXRlKCAiZGF0YS1tYXhEYXRlIikpOworICAgICAgICAkKGVsZW1UbykuZGF0ZXBpY2tlciggIm9wdGlvbiIsICJtYXhEYXRlIiwgZWxlbVRvLmdldEF0dHJpYnV0ZSggImRhdGEtbWF4RGF0ZSIpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbGVtRnJvbS5zZXRBdHRyaWJ1dGUoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKyAgICAgICAgZWxlbVRvLnNldEF0dHJpYnV0ZSgiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICAgIH0KK30KKworLy8gSW5pdGlhbGl6ZSB0aGUgZGF0ZSBwaWNrZXIgZWxlbWVudHMgd2l0aCB0aGVpciBkZWZhdWx0IHN0YXRlIHZhcmlhYmxlcywgYW5kCisvLyByZWdpc3RlciB0aGUgcmFkaW8gYnV0dG9uIGFuZCBmb3JtIGFjdGlvbnMKK2Z1bmN0aW9uIGRhdGVfaW5pdCAoa2V5LCBmcm9tX2RhdGUsIHRvX2RhdGUsIG1pbl9kYXRlLCBtYXhfZGF0ZSwgaW5pdGlhbF9lbmFibGUpIHsKKworICAgIHZhciBlbGVtRnJvbT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGF0ZV9mcm9tXyIra2V5KTsKKyAgICB2YXIgZWxlbVRvPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkYXRlX3RvXyIra2V5KTsKKworICAgIC8vIFdlcmUgdGhlcmUgYW55IGRhdGVyYW5nZSBmaWx0ZXJzIGluc3RhbnRpYXRlZD8gKGUuZy4gbm8gYnVpbGRzIGZvdW5kKQorICAgIGlmIChudWxsID09IGVsZW1Gcm9tKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBpbml0IHRoZSBkYXRlcGlja2VyIGNvbnRleHQgZGF0YQorICAgIGVsZW1Gcm9tLnNldEF0dHJpYnV0ZSggImRhdGEtc2V0RGF0ZSIsIGZyb21fZGF0ZSApOworICAgIGVsZW1Uby5zZXRBdHRyaWJ1dGUoICJkYXRhLXNldERhdGUiLCB0b19kYXRlICk7CisgICAgZWxlbUZyb20uc2V0QXR0cmlidXRlKCAiZGF0YS1taW5EYXRlIiwgbWluX2RhdGUpOworICAgIGVsZW1Uby5zZXRBdHRyaWJ1dGUoICJkYXRhLW1pbkRhdGUiLCAgbWluX2RhdGUpOworICAgIGVsZW1Gcm9tLnNldEF0dHJpYnV0ZSggImRhdGEtbWF4RGF0ZSIsIG1heF9kYXRlKTsKKyAgICBlbGVtVG8uc2V0QXR0cmlidXRlKCAiZGF0YS1tYXhEYXRlIiwgbWF4X2RhdGUpOworCisgICAgLy8gZG9lcyB0aGUgZGF0ZSBzZXQgc3RhcnQgZW5hYmxlZD8KKyAgICBpZiAoa2V5ID09IGluaXRpYWxfZW5hYmxlKSB7CisgICAgICAgIGRhdGVfZW5hYmxlIChrZXksICJlbmFibGUiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkYXRlX2VuYWJsZSAoa2V5LCAiZGlzYWJsZSIpOworICAgIH0KKworICAgIC8vIGNhdGNoIHRoZSByYWRpbyBidXR0b24gc2VsZWN0cyBmb3IgZW5hYmxlL2Rpc2FibGUKKyAgICAkKCdpbnB1dDpyYWRpb1tuYW1lPSJmaWx0ZXIiXScpLmNoYW5nZShmdW5jdGlvbigpeworICAgICAgICBpZiAoJCh0aGlzKS52YWwoKSA9PSAnZGF0ZXJhbmdlJykgeworICAgICAgICAgICAga2V5PSQodGhpcykuYXR0cigiZGF0YS1rZXkiKTsKKyAgICAgICAgICAgIGRhdGVfZW5hYmxlIChrZXksICdlbmFibGUnKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGtleT0kKHRoaXMpLmF0dHIoImRhdGEta2V5Iik7CisgICAgICAgICAgICBkYXRlX2VuYWJsZSAoa2V5LCAnZGlzYWJsZScpOworICAgICAgICB9CisgICAgfSk7CisKKyAgICAvLyBjYXRjaCBhbnkgbmV3ICdmcm9tJyBkYXRlIGFzIG1pbkRhdGUgZm9yICd0bycgZGF0ZQorICAgICQoIiNkYXRlX2Zyb21fIitrZXkpLmNoYW5nZShmdW5jdGlvbigpeworICAgICAgICBmcm9tX2RhdGUgPSAkKCIjZGF0ZV9mcm9tXyIra2V5KS52YWwoKTsKKyAgICAgICAgJCgiI2RhdGVfdG9fIitrZXkpLmRhdGVwaWNrZXIoICJvcHRpb24iLCAibWluRGF0ZSIsIGZyb21fZGF0ZSApOworICAgIH0pOworCisgICAgLy8gY2F0Y2ggdGhlIHN1Ym1pdCAoanVzdCBvbmNlKQorICAgICQoImZvcm0iKS51bmJpbmQoJ3N1Ym1pdCcpOworICAgICQoImZvcm0iKS5zdWJtaXQoZnVuY3Rpb24oZSkgeworICAgICAgICAvLyBmb3JtYXQgYSBjb21wb3NpdGUgZGF0ZXJhbmdlIGZpbHRlciB2YWx1ZSBzbyB0aGF0IGl0IGNhbiBiZSBwYXJzZWQgYW5kIHBvc3QtcHJvY2Vzc2VkIGluIHRoZSB2aWV3CisgICAgICAgIGlmIChrZXkgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgaWYgKCQoIiNkYXRlX2Zyb21fIitrZXkpLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIHZhciBmaWx0ZXI9a2V5KyJfX2d0ZSEiK2tleSsiX19sdDoiKyQoIiNkYXRlX2Zyb21fIitrZXkpLnZhbCgpKyIhIiskKCIjZGF0ZV90b18iK2tleSkudmFsKCkrIl9kYXRlcmFuZ2UiOworICAgICAgICAgICAgICAgICQoIiNsYXN0X2RhdGVfZnJvbV8iK2tleSkudmFsKCQoIiNkYXRlX2Zyb21fIitrZXkpLnZhbCgpKTsKKyAgICAgICAgICAgICAgICAkKCIjbGFzdF9kYXRlX3RvXyIra2V5KS52YWwoJCgiI2RhdGVfdG9fIitrZXkpLnZhbCgpKTsKKyAgICAgICAgICAgICAgICAkKCIjZmlsdGVyX3ZhbHVlXyIra2V5KS52YWwoZmlsdGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9KTsKKworfTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9pbXBvcnRsYXllci5qcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9pbXBvcnRsYXllci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmFkYmMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2ltcG9ydGxheWVyLmpzCkBAIC0wLDAgKzEsMjc2IEBACisidXNlIHN0cmljdCIKKworZnVuY3Rpb24gaW1wb3J0TGF5ZXJQYWdlSW5pdCAoY3R4KSB7CisKKyAgdmFyIGxheWVyRGVwQnRuID0gJCgiI2FkZC1sYXllci1kZXBlbmRlbmN5LWJ0biIpOworICB2YXIgaW1wb3J0QW5kQWRkQnRuID0gJCgiI2ltcG9ydC1hbmQtYWRkLWJ0biIpOworICB2YXIgbGF5ZXJOYW1lSW5wdXQgPSAkKCIjaW1wb3J0LWxheWVyLW5hbWUiKTsKKyAgdmFyIHZjc1VSTElucHV0ID0gJCgiI2xheWVyLWdpdC1yZXBvLXVybCIpOworICB2YXIgZ2l0UmVmSW5wdXQgPSAkKCIjbGF5ZXItZ2l0LXJlZiIpOworICB2YXIgbGF5ZXJEZXBJbnB1dCA9ICQoIiNsYXllci1kZXBlbmRlbmN5Iik7CisgIHZhciBsYXllck5hbWVDdHJsID0gJCgiI2xheWVyLW5hbWUtY3RybCIpOworICB2YXIgZHVwbGljYXRlZExheWVyTmFtZSA9ICQoIiNkdXBsaWNhdGVkLWxheWVyLW5hbWUtaGludCIpOworCisgIHZhciBsYXllckRlcHMgPSB7fTsKKyAgdmFyIGxheWVyRGVwc0RlcHMgPSB7fTsKKyAgdmFyIGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbjsKKyAgdmFyIHZhbGlkTGF5ZXJOYW1lID0gL14oXHd8LSkrJC87CisKKyAgbGlidG9hc3Rlci5tYWtlVHlwZWFoZWFkKGxheWVyRGVwSW5wdXQsIGxpYnRvYXN0ZXIuY3R4LmxheWVyc1R5cGVBaGVhZFVybCwgeyBpbmNsdWRlX2FkZGVkOiAidHJ1ZSIgfSwgZnVuY3Rpb24oaXRlbSl7CisgICAgY3VycmVudExheWVyRGVwU2VsZWN0aW9uID0gaXRlbTsKKworICAgIGxheWVyRGVwQnRuLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgIH0pOworCisKKyAgLyogV2UgYXV0b21hdGljYWxseSBhZGQgIm9wZW5lbWJlZGRlZC1jb3JlIiBsYXllciBmb3IgY29udmVuaWVuY2UgYXMgYQorICAgKiBkZXBlbmRlbmN5IGFzIHByZXR0eSBtdWNoIGFsbCBsYXllcnMgZGVwZW5kIG9uIHRoaXMgb25lCisgICAqLworICAkLmdldEpTT04obGlidG9hc3Rlci5jdHgubGF5ZXJzVHlwZUFoZWFkVXJsLAorICAgIHsgaW5jbHVkZV9hZGRlZDogInRydWUiICwgc2VhcmNoOiAib3BlbmVtYmVkZGVkLWNvcmUiIH0sCisgICAgZnVuY3Rpb24obGF5ZXIpIHsKKyAgICBpZiAobGF5ZXIucmVzdWx0cy5sZW5ndGggPiAwKSB7CisgICAgICBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24gPSBsYXllci5yZXN1bHRzWzBdOworICAgICAgbGF5ZXJEZXBCdG4uY2xpY2soKTsKKyAgICB9CisgIH0pOworCisgIGxheWVyRGVwQnRuLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgaWYgKGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbiA9PSB1bmRlZmluZWQpCisgICAgICByZXR1cm47CisKKyAgICBsYXllckRlcHNbY3VycmVudExheWVyRGVwU2VsZWN0aW9uLmlkXSA9IGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbjsKKworICAgIC8qIE1ha2UgYSBsaXN0IGl0ZW0gZm9yIHRoZSBuZXcgbGF5ZXIgZGVwZW5kZW5jeSAqLworICAgIHZhciBuZXdMYXllckRlcCA9ICQoIjxsaT48YT48L2E+PHNwYW4gY2xhc3M9XCJpY29uLXRyYXNoXCIgZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgdGl0bGU9XCJEZWxldGVcIj48L3NwYW4+PC9saT4iKTsKKworICAgIG5ld0xheWVyRGVwLmRhdGEoJ2xheWVyLWlkJywgY3VycmVudExheWVyRGVwU2VsZWN0aW9uLmlkKTsKKyAgICBuZXdMYXllckRlcC5jaGlsZHJlbigic3BhbiIpLnRvb2x0aXAoKTsKKworICAgIHZhciBsaW5rID0gbmV3TGF5ZXJEZXAuY2hpbGRyZW4oImEiKTsKKyAgICBsaW5rLmF0dHIoImhyZWYiLCBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24ubGF5ZXJkZXRhaWx1cmwpOworICAgIGxpbmsudGV4dChjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24ubmFtZSk7CisgICAgbGluay50b29sdGlwKHt0aXRsZTogY3VycmVudExheWVyRGVwU2VsZWN0aW9uLnRvb2x0aXAsIHBsYWNlbWVudDogInJpZ2h0In0pOworCisgICAgdmFyIHRyYXNoSXRlbSA9IG5ld0xheWVyRGVwLmNoaWxkcmVuKCJzcGFuIik7CisgICAgdHJhc2hJdGVtLmNsaWNrKGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciB0b1JlbW92ZSA9ICQodGhpcykucGFyZW50KCkuZGF0YSgnbGF5ZXItaWQnKTsKKyAgICAgIGRlbGV0ZSBsYXllckRlcHNbdG9SZW1vdmVdOworICAgICAgJCh0aGlzKS5wYXJlbnQoKS5mYWRlT3V0KGZ1bmN0aW9uICgpeworICAgICAgICAkKHRoaXMpLnJlbW92ZSgpOworICAgICAgfSk7CisgICAgfSk7CisKKyAgICAkKCIjbGF5ZXItZGVwcy1saXN0IikuYXBwZW5kKG5ld0xheWVyRGVwKTsKKworICAgIGxpYnRvYXN0ZXIuZ2V0TGF5ZXJEZXBzRm9yUHJvamVjdChjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24ubGF5ZXJkZXRhaWx1cmwsIGZ1bmN0aW9uIChkYXRhKXsKKyAgICAgICAgLyogVGhlc2UgYXJlIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGxheWVyIGFkZGVkIGFzIGEgZGVwZW5kZW5jeSAqLworICAgICAgICBpZiAoZGF0YS5saXN0Lmxlbmd0aCA+IDApIHsKKyAgICAgICAgICBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24udXJsID0gY3VycmVudExheWVyRGVwU2VsZWN0aW9uLmxheWVyZGV0YWlsdXJsOworICAgICAgICAgIGxheWVyRGVwc1tjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24uaWRdLmRlcHMgPSBkYXRhLmxpc3Q7CisgICAgICAgIH0KKworICAgICAgICAvKiBDbGVhciB0aGUgY3VycmVudCBzZWxlY3Rpb24gKi8KKyAgICAgICAgbGF5ZXJEZXBJbnB1dC52YWwoIiIpOworICAgICAgICBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24gPSB1bmRlZmluZWQ7CisgICAgICAgIGxheWVyRGVwQnRuLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKyAgICAgIH0sIG51bGwpOworICB9KTsKKworICBpbXBvcnRBbmRBZGRCdG4uY2xpY2soZnVuY3Rpb24oKXsKKyAgICAvKiBUaGlzIGlzIGEgbGlzdCBvZiB0aGUgbmFtZXMgZnJvbSBsYXllckRlcHMgZm9yIHRoZSBsYXllciBkZXBzCisgICAgICogbW9kYWwgZGlhbG9nIGJvZHkKKyAgICAgKi8KKyAgICB2YXIgZGVwTmFtZXMgPSBbXTsKKworICAgIC8qIGFycnJheSBvZiBhbGwgbGF5ZXIgZGVwIGlkcyBpbmNsdWRlcyBwYXJlbnQgYW5kIGNoaWxkIGRlcHMgKi8KKyAgICB2YXIgYWxsRGVwcyA9IFtdOworCisgICAgLyogdGVtcG9yYXJ5IG9iamVjdCB0byB1c2UgdG8gZG8gYSByZWR1Y2Ugb24gdGhlIGRlcGVuZGVuY2llcyBmb3IgZWFjaAorICAgICAqIGxheWVyIGRlcGVuZGVuY3kgYWRkZWQKKyAgICAgKi8KKyAgICB2YXIgZGVwRGVwcyA9IHt9OworCisgICAgLyogdGhlIGxheWVycyB0aGF0IGhhdmUgZGVwZW5kZW5jaWVzIGhhdmUgYW4gZXh0cmEgcHJvcGVydHkgImRlcHMiCisgICAgICogbG9vayBpbiB0aGlzIGZvciBlYWNoIGxheWVyIGFuZCByZWR1Y2UgdGhpcyB0byBhIHVucXVpZSBvYmplY3QKKyAgICAgKiBvZiBkZXBzLgorICAgICAqLworICAgIGZvciAodmFyIGtleSBpbiBsYXllckRlcHMpeworICAgICAgaWYgKGxheWVyRGVwc1trZXldLmhhc093blByb3BlcnR5KCdkZXBzJykpeworICAgICAgICBmb3IgKHZhciBkZXAgaW4gbGF5ZXJEZXBzW2tleV0uZGVwcyl7CisgICAgICAgICAgdmFyIGxheWVyID0gbGF5ZXJEZXBzW2tleV0uZGVwc1tkZXBdOworICAgICAgICAgIGRlcERlcHNbbGF5ZXIuaWRdID0gbGF5ZXI7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGRlcE5hbWVzLnB1c2gobGF5ZXJEZXBzW2tleV0ubmFtZSk7CisgICAgICBhbGxEZXBzLnB1c2gobGF5ZXJEZXBzW2tleV0uaWQpOworICAgIH0KKworICAgIC8qIHdlIGFjdHVhbGx5IHdhbnQgaXQgYXMgYW4gYXJyYXkgc28gY29udmVydCBpdCBub3cgKi8KKyAgICB2YXIgZGVwRGVwc0FycmF5ID0gW107CisgICAgZm9yICh2YXIga2V5IGluIGRlcERlcHMpCisgICAgICBkZXBEZXBzQXJyYXkucHVzaCAoZGVwRGVwc1trZXldKTsKKworICAgIGlmIChkZXBEZXBzQXJyYXkubGVuZ3RoID4gMCkgeworICAgICAgdmFyIGxheWVyID0geyBuYW1lOiBsYXllck5hbWVJbnB1dC52YWwoKSwgdXJsOiAiIyIsIGlkOiAtMSB9OworICAgICAgdmFyIHRpdGxlID0gIkxheWVyIjsKKyAgICAgIHZhciBib2R5ID0gIjxzdHJvbmc+IitsYXllci5uYW1lKyI8L3N0cm9uZz4ncyBkZXBlbmRlbmNpZXMgKCIrCisgICAgICAgIGRlcE5hbWVzLmpvaW4oIiwgIikrIjwvc3Bhbj4pIHJlcXVpcmUgc29tZSBsYXllcnMgdGhhdCBhcmUgbm90IGFkZGVkIHRvIHlvdXIgcHJvamVjdC4gU2VsZWN0IHRoZSBvbmVzIHlvdSB3YW50IHRvIGFkZDo8L3A+IjsKKworICAgICAgc2hvd0xheWVyRGVwc01vZGFsKGxheWVyLCBkZXBEZXBzQXJyYXksIHRpdGxlLCBib2R5LCBmYWxzZSwgZnVuY3Rpb24obGF5ZXJPYnNMaXN0KXsKKyAgICAgICAgLyogQWRkIHRoZSBhY2NlcHRlZCBsYXllciBkZXBlbmRlbmNpZXMnIGlkcyB0byB0aGUgYWxsRGVwcyBhcnJheSAqLworICAgICAgICBmb3IgKHZhciBrZXkgaW4gbGF5ZXJPYnNMaXN0KXsKKyAgICAgICAgICBhbGxEZXBzLnB1c2gobGF5ZXJPYnNMaXN0W2tleV0uaWQpOworICAgICAgICB9CisgICAgICAgIGltcG9ydF9hbmRfYWRkICgpOworICAgICAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGltcG9ydF9hbmRfYWRkICgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGltcG9ydF9hbmRfYWRkICgpIHsKKyAgICAgIC8qIGNvbnZlcnQgdG8gYSBjc3Ygb2YgYWxsIHRoZSBkZXBzIHRvIGJlIGFkZGVkICovCisgICAgICB2YXIgbGF5ZXJEZXBzQ3N2ID0gYWxsRGVwcy5qb2luKCIsIik7CisKKyAgICAgIHZhciBsYXllckRhdGEgPSB7CisgICAgICAgIG5hbWU6IGxheWVyTmFtZUlucHV0LnZhbCgpLAorICAgICAgICB2Y3NfdXJsOiB2Y3NVUkxJbnB1dC52YWwoKSwKKyAgICAgICAgZ2l0X3JlZjogZ2l0UmVmSW5wdXQudmFsKCksCisgICAgICAgIGRpcl9wYXRoOiAkKCIjbGF5ZXItc3ViZGlyIikudmFsKCksCisgICAgICAgIHByb2plY3RfaWQ6IGxpYnRvYXN0ZXIuY3R4LnByb2plY3RJZCwKKyAgICAgICAgbGF5ZXJfZGVwczogbGF5ZXJEZXBzQ3N2LAorICAgICAgfTsKKworICAgICAgJC5hamF4KHsKKyAgICAgICAgICB0eXBlOiAiUE9TVCIsCisgICAgICAgICAgdXJsOiBjdHgueGhySW1wb3J0TGF5ZXJVcmwsCisgICAgICAgICAgZGF0YTogbGF5ZXJEYXRhLAorICAgICAgICAgIGhlYWRlcnM6IHsgJ1gtQ1NSRlRva2VuJyA6ICQuY29va2llKCdjc3JmdG9rZW4nKX0sCisgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICAgIGlmIChkYXRhLmVycm9yICE9ICJvayIpIHsKKyAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YS5lcnJvcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAvKiBTdWNjZXNzIGxheWVyIGltcG9ydCBub3cgZ28gdG8gdGhlIHByb2plY3QgcGFnZSAqLworICAgICAgICAgICAgICAkLmNvb2tpZSgnbGF5ZXItaW1wb3J0ZWQtYWxlcnQnLCBKU09OLnN0cmluZ2lmeShkYXRhKSwgeyBwYXRoOiAnLyd9KTsKKyAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UobGlidG9hc3Rlci5jdHgucHJvamVjdFBhZ2VVcmwrJz9ub3RpZnk9bGF5ZXItaW1wb3J0ZWQnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9LAorICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgICAgY29uc29sZS5sb2coIkNhbGwgZmFpbGVkIik7CisgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTsKKyAgICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisgIH0pOworCisgIGZ1bmN0aW9uIGVuYWJsZV9pbXBvcnRfYnRuKGVuYWJsZWQpIHsKKyAgICB2YXIgaW1wb3J0QW5kQWRkSGludCA9ICQoIiNpbXBvcnQtYW5kLWFkZC1oaW50Iik7CisKKyAgICBpZiAoZW5hYmxlZCkgeworICAgICAgaW1wb3J0QW5kQWRkQnRuLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgICBpbXBvcnRBbmRBZGRIaW50LmhpZGUoKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbXBvcnRBbmRBZGRCdG4uYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKKyAgICBpbXBvcnRBbmRBZGRIaW50LnNob3coKTsKKyAgfQorCisgIGZ1bmN0aW9uIGNoZWNrX2Zvcm0oKSB7CisgICAgdmFyIHZhbGlkID0gZmFsc2U7CisgICAgdmFyIGlucHV0cyA9ICQoImlucHV0OnJlcXVpcmVkIik7CisKKyAgICBmb3IgKHZhciBpPTA7IGk8aW5wdXRzLmxlbmd0aDsgaSsrKXsKKyAgICAgIGlmICghKHZhbGlkID0gaW5wdXRzW2ldLnZhbHVlKSl7CisgICAgICAgIGVuYWJsZV9pbXBvcnRfYnRuKGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHZhbGlkKQorICAgICAgZW5hYmxlX2ltcG9ydF9idG4odHJ1ZSk7CisgIH0KKworICBmdW5jdGlvbiBsYXllckV4aXN0c0Vycm9yKGxheWVyKXsKKyAgICB2YXIgZHVwTGF5ZXJJbmZvID0gJCgiI2R1cGxpY2F0ZS1sYXllci1pbmZvIik7CisgICAgZHVwTGF5ZXJJbmZvLmZpbmQoIi5kdXAtbGF5ZXItbmFtZSIpLnRleHQobGF5ZXIubmFtZSk7CisgICAgZHVwTGF5ZXJJbmZvLmZpbmQoIi5kdXAtbGF5ZXItbGluayIpLmF0dHIoImhyZWYiLCBsYXllci5sYXllcmRldGFpbHVybCk7CisgICAgZHVwTGF5ZXJJbmZvLmZpbmQoIiNkdXAtbGF5ZXItdmNzLXVybCIpLnRleHQobGF5ZXIubGF5ZXJfX3Zjc191cmwpOworICAgIGR1cExheWVySW5mby5maW5kKCIjZHVwLWxheWVyLXJldmlzaW9uIikudGV4dChsYXllci5yZXZpc2lvbi5jb21taXQpOworCisgICAgJCgiLmZpZWxkcy1hcGFydC1mcm9tLWxheWVyLW5hbWUiKS5mYWRlT3V0KGZ1bmN0aW9uKCl7CisKKyAgICAgIGR1cExheWVySW5mby5mYWRlSW4oKTsKKyAgICB9KTsKKyAgfQorCisgIGxheWVyTmFtZUlucHV0Lm9uKCdibHVyJywgZnVuY3Rpb24oKSB7CisgICAgICBpZiAoISQodGhpcykudmFsKCkpeworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICB2YXIgbmFtZSA9ICQodGhpcykudmFsKCk7CisKKyAgICAgIC8qIENoZWNrIGlmIHRoZSBsYXllciBuYW1lIGV4aXN0cyAqLworICAgICAgJC5nZXRKU09OKGxpYnRvYXN0ZXIuY3R4LmxheWVyc1R5cGVBaGVhZFVybCwKKyAgICAgICAgeyBpbmNsdWRlX2FkZGVkOiAidHJ1ZSIgLCBzZWFyY2g6IG5hbWUsIGZvcm1hdDogImpzb24iIH0sCisgICAgICAgIGZ1bmN0aW9uKGxheWVyKSB7CisgICAgICAgICAgaWYgKGxheWVyLnJvd3MubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBsYXllci5yb3dzKXsKKyAgICAgICAgICAgICAgaWYgKGxheWVyLnJvd3NbaV0ubmFtZSA9PSBuYW1lKSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobGF5ZXIucm93c1tpXSkKKyAgICAgICAgICAgICAgICBsYXllckV4aXN0c0Vycm9yKGxheWVyLnJvd3NbaV0pOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgfSk7CisgIH0pOworCisgIHZjc1VSTElucHV0Lm9uKCdpbnB1dCcsIGZ1bmN0aW9uKCkgeworICAgIGNoZWNrX2Zvcm0oKTsKKyAgfSk7CisKKyAgZ2l0UmVmSW5wdXQub24oJ2lucHV0JywgZnVuY3Rpb24oKSB7CisgICAgY2hlY2tfZm9ybSgpOworICB9KTsKKworICBsYXllck5hbWVJbnB1dC5vbignaW5wdXQnLCBmdW5jdGlvbigpIHsKKyAgICBpZiAoJCh0aGlzKS52YWwoKSAmJiAhdmFsaWRMYXllck5hbWUudGVzdCgkKHRoaXMpLnZhbCgpKSl7CisgICAgICBsYXllck5hbWVDdHJsLmFkZENsYXNzKCJlcnJvciIpCisgICAgICAkKCIjaW52YWxpZC1sYXllci1uYW1lLWhpbnQiKS5zaG93KCk7CisgICAgICBlbmFibGVfaW1wb3J0X2J0bihmYWxzZSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCQoIiNkdXBsaWNhdGUtbGF5ZXItaW5mbyIpLmNzcygiZGlzcGxheSIpICE9ICJOb25lIil7CisgICAgICAkKCIjZHVwbGljYXRlLWxheWVyLWluZm8iKS5mYWRlT3V0KGZ1bmN0aW9uKCl7CisgICAgICAgICQoIi5maWVsZHMtYXBhcnQtZnJvbS1sYXllci1uYW1lIikuc2hvdygpOworICAgICAgfSk7CisKKyAgICB9CisKKyAgICAvKiBEb24ndCByZW1vdmUgdGhlIGVycm9yIGNsYXNzIGlmIHdlJ3JlIGRpc3BsYXlpbmcgdGhlIGVycm9yIGZvciBhbm90aGVyCisgICAgICogcmVhc29uLgorICAgICAqLworICAgIGlmICghZHVwbGljYXRlZExheWVyTmFtZS5pcygiOnZpc2libGUiKSkKKyAgICAgIGxheWVyTmFtZUN0cmwucmVtb3ZlQ2xhc3MoImVycm9yIikKKworICAgICQoIiNpbnZhbGlkLWxheWVyLW5hbWUtaGludCIpLmhpZGUoKTsKKyAgICBjaGVja19mb3JtKCk7CisgIH0pOworCisgIC8qIEhhdmUgYSBndWVzcyBhdCB0aGUgbGF5ZXIgbmFtZSAqLworICB2Y3NVUkxJbnB1dC5mb2N1c291dChmdW5jdGlvbiAoKXsKKyAgICAvKiBJZiB3ZSBhIGxheWVyIG5hbWUgc3BlY2lmaWVkIGRvbid0IG92ZXJ3cml0ZSBpdCBvciBpZiB0aGVyZSBpc24ndCBhCisgICAgICogdXJsIHR5cGVkIGluIHlldCByZXR1cm4KKyAgICAgKi8KKyAgICBpZiAobGF5ZXJOYW1lSW5wdXQudmFsKCkgfHwgISQodGhpcykudmFsKCkpCisgICAgICByZXR1cm47CisKKyAgICBpZiAoJCh0aGlzKS52YWwoKS5zZWFyY2goIi8iKSl7CisgICAgICB2YXIgdXJsUHRzID0gJCh0aGlzKS52YWwoKS5zcGxpdCgiLyIpOworICAgICAgdmFyIHN1Z2dlc3Rpb24gPSB1cmxQdHNbdXJsUHRzLmxlbmd0aC0xXS5yZXBsYWNlKCIuZ2l0IiwiIik7CisgICAgICBsYXllck5hbWVJbnB1dC52YWwoc3VnZ2VzdGlvbik7CisgICAgfQorICB9KTsKKworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2pxdWVyeS0yLjAuMy5taW4uanMgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvanF1ZXJ5LTIuMC4zLm1pbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmUyMDlkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2pxdWVyeS0yLjAuMy5taW4uanMKQEAgLTAsMCArMSw2IEBACisvKiEgalF1ZXJ5IHYyLjAuMyB8IChjKSAyMDA1LCAyMDEzIGpRdWVyeSBGb3VuZGF0aW9uLCBJbmMuIHwganF1ZXJ5Lm9yZy9saWNlbnNlCisvL0Agc291cmNlTWFwcGluZ1VSTD1qcXVlcnktMi4wLjMubWluLm1hcAorKi8KKyhmdW5jdGlvbihlLHVuZGVmaW5lZCl7dmFyIHQsbixyPXR5cGVvZiB1bmRlZmluZWQsaT1lLmxvY2F0aW9uLG89ZS5kb2N1bWVudCxzPW8uZG9jdW1lbnRFbGVtZW50LGE9ZS5qUXVlcnksdT1lLiQsbD17fSxjPVtdLHA9IjIuMC4zIixmPWMuY29uY2F0LGg9Yy5wdXNoLGQ9Yy5zbGljZSxnPWMuaW5kZXhPZixtPWwudG9TdHJpbmcseT1sLmhhc093blByb3BlcnR5LHY9cC50cmltLHg9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IHguZm4uaW5pdChlLG4sdCl9LGI9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2Usdz0vXFMrL2csVD0vXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQvLEM9L148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLyxrPS9eLW1zLS8sTj0vLShbXGRhLXpdKS9naSxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX0sUz1mdW5jdGlvbigpe28ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsUywhMSksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixTLCExKSx4LnJlYWR5KCl9O3guZm49eC5wcm90b3R5cGU9e2pxdWVyeTpwLGNvbnN0cnVjdG9yOngsaW5pdDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZighZSlyZXR1cm4gdGhpcztpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKHI9IjwiPT09ZS5jaGFyQXQoMCkmJiI+Ij09PWUuY2hhckF0KGUubGVuZ3RoLTEpJiZlLmxlbmd0aD49Mz9bbnVsbCxlLG51bGxdOlQuZXhlYyhlKSwhcnx8IXJbMV0mJnQpcmV0dXJuIXR8fHQuanF1ZXJ5Pyh0fHxuKS5maW5kKGUpOnRoaXMuY29uc3RydWN0b3IodCkuZmluZChlKTtpZihyWzFdKXtpZih0PXQgaW5zdGFuY2VvZiB4P3RbMF06dCx4Lm1lcmdlKHRoaXMseC5wYXJzZUhUTUwoclsxXSx0JiZ0Lm5vZGVUeXBlP3Qub3duZXJEb2N1bWVudHx8dDpvLCEwKSksQy50ZXN0KHJbMV0pJiZ4LmlzUGxhaW5PYmplY3QodCkpZm9yKHIgaW4gdCl4LmlzRnVuY3Rpb24odGhpc1tyXSk/dGhpc1tyXSh0W3JdKTp0aGlzLmF0dHIocix0W3JdKTtyZXR1cm4gdGhpc31yZXR1cm4gaT1vLmdldEVsZW1lbnRCeUlkKHJbMl0pLGkmJmkucGFyZW50Tm9kZSYmKHRoaXMubGVuZ3RoPTEsdGhpc1swXT1pKSx0aGlzLmNvbnRleHQ9byx0aGlzLnNlbGVjdG9yPWUsdGhpc31yZXR1cm4gZS5ub2RlVHlwZT8odGhpcy5jb250ZXh0PXRoaXNbMF09ZSx0aGlzLmxlbmd0aD0xLHRoaXMpOnguaXNGdW5jdGlvbihlKT9uLnJlYWR5KGUpOihlLnNlbGVjdG9yIT09dW5kZWZpbmVkJiYodGhpcy5zZWxlY3Rvcj1lLnNlbGVjdG9yLHRoaXMuY29udGV4dD1lLmNvbnRleHQpLHgubWFrZUFycmF5KGUsdGhpcykpfSxzZWxlY3RvcjoiIixsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIGQuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3RoaXMudG9BcnJheSgpOjA+ZT90aGlzW3RoaXMubGVuZ3RoK2VdOnRoaXNbZV19LHB1c2hTdGFjazpmdW5jdGlvbihlKXt2YXIgdD14Lm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxlKTtyZXR1cm4gdC5wcmV2T2JqZWN0PXRoaXMsdC5jb250ZXh0PXRoaXMuY29udGV4dCx0fSxlYWNoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHguZWFjaCh0aGlzLGUsdCl9LHJlYWR5OmZ1bmN0aW9uKGUpe3JldHVybiB4LnJlYWR5LnByb21pc2UoKS5kb25lKGUpLHRoaXN9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sZXE6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sZW5ndGgsbj0rZSsoMD5lP3Q6MCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG4+PTAmJnQ+bj9bdGhpc1tuXV06W10pfSxtYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgubWFwKHRoaXMsZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5jYWxsKHQsbix0KX0pKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcihudWxsKX0scHVzaDpoLHNvcnQ6W10uc29ydCxzcGxpY2U6W10uc3BsaWNlfSx4LmZuLmluaXQucHJvdG90eXBlPXguZm4seC5leHRlbmQ9eC5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixpLG8scz1hcmd1bWVudHNbMF18fHt9LGE9MSx1PWFyZ3VtZW50cy5sZW5ndGgsbD0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgcyYmKGw9cyxzPWFyZ3VtZW50c1sxXXx8e30sYT0yKSwib2JqZWN0Ij09dHlwZW9mIHN8fHguaXNGdW5jdGlvbihzKXx8KHM9e30pLHU9PT1hJiYocz10aGlzLC0tYSk7dT5hO2ErKylpZihudWxsIT0oZT1hcmd1bWVudHNbYV0pKWZvcih0IGluIGUpbj1zW3RdLHI9ZVt0XSxzIT09ciYmKGwmJnImJih4LmlzUGxhaW5PYmplY3Qocil8fChpPXguaXNBcnJheShyKSkpPyhpPyhpPSExLG89biYmeC5pc0FycmF5KG4pP246W10pOm89biYmeC5pc1BsYWluT2JqZWN0KG4pP246e30sc1t0XT14LmV4dGVuZChsLG8scikpOnIhPT11bmRlZmluZWQmJihzW3RdPXIpKTtyZXR1cm4gc30seC5leHRlbmQoe2V4cGFuZG86ImpRdWVyeSIrKHArTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksbm9Db25mbGljdDpmdW5jdGlvbih0KXtyZXR1cm4gZS4kPT09eCYmKGUuJD11KSx0JiZlLmpRdWVyeT09PXgmJihlLmpRdWVyeT1hKSx4fSxpc1JlYWR5OiExLHJlYWR5V2FpdDoxLGhvbGRSZWFkeTpmdW5jdGlvbihlKXtlP3gucmVhZHlXYWl0Kys6eC5yZWFkeSghMCl9LHJlYWR5OmZ1bmN0aW9uKGUpeyhlPT09ITA/LS14LnJlYWR5V2FpdDp4LmlzUmVhZHkpfHwoeC5pc1JlYWR5PSEwLGUhPT0hMCYmLS14LnJlYWR5V2FpdD4wfHwobi5yZXNvbHZlV2l0aChvLFt4XSkseC5mbi50cmlnZ2VyJiZ4KG8pLnRyaWdnZXIoInJlYWR5Iikub2ZmKCJyZWFkeSIpKSl9LGlzRnVuY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09PXgudHlwZShlKX0saXNBcnJheTpBcnJheS5pc0FycmF5LGlzV2luZG93OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiZlPT09ZS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihlKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChlKSkmJmlzRmluaXRlKGUpfSx0eXBlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP2UrIiI6Im9iamVjdCI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9sW20uY2FsbChlKV18fCJvYmplY3QiOnR5cGVvZiBlfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGUpe2lmKCJvYmplY3QiIT09eC50eXBlKGUpfHxlLm5vZGVUeXBlfHx4LmlzV2luZG93KGUpKXJldHVybiExO3RyeXtpZihlLmNvbnN0cnVjdG9yJiYheS5jYWxsKGUuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2godCl7cmV0dXJuITF9cmV0dXJuITB9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKHQgaW4gZSlyZXR1cm4hMTtyZXR1cm4hMH0sZXJyb3I6ZnVuY3Rpb24oZSl7dGhyb3cgRXJyb3IoZSl9LHBhcnNlSFRNTDpmdW5jdGlvbihlLHQsbil7aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDsiYm9vbGVhbiI9PXR5cGVvZiB0JiYobj10LHQ9ITEpLHQ9dHx8bzt2YXIgcj1DLmV4ZWMoZSksaT0hbiYmW107cmV0dXJuIHI/W3QuY3JlYXRlRWxlbWVudChyWzFdKV06KHI9eC5idWlsZEZyYWdtZW50KFtlXSx0LGkpLGkmJngoaSkucmVtb3ZlKCkseC5tZXJnZShbXSxyLmNoaWxkTm9kZXMpKX0scGFyc2VKU09OOkpTT04ucGFyc2UscGFyc2VYTUw6ZnVuY3Rpb24oZSl7dmFyIHQsbjtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBudWxsO3RyeXtuPW5ldyBET01QYXJzZXIsdD1uLnBhcnNlRnJvbVN0cmluZyhlLCJ0ZXh0L3htbCIpfWNhdGNoKHIpe3Q9dW5kZWZpbmVkfXJldHVybighdHx8dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5ndGgpJiZ4LmVycm9yKCJJbnZhbGlkIFhNTDogIitlKSx0fSxub29wOmZ1bmN0aW9uKCl7fSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGUpe3ZhciB0LG49ZXZhbDtlPXgudHJpbShlKSxlJiYoMT09PWUuaW5kZXhPZigidXNlIHN0cmljdCIpPyh0PW8uY3JlYXRlRWxlbWVudCgic2NyaXB0IiksdC50ZXh0PWUsby5oZWFkLmFwcGVuZENoaWxkKHQpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCkpOm4oZSkpfSxjYW1lbENhc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShrLCJtcy0iKS5yZXBsYWNlKE4sRSl9LG5vZGVOYW1lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKX0sZWFjaDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaT0wLG89ZS5sZW5ndGgscz1qKGUpO2lmKG4pe2lmKHMpe2Zvcig7bz5pO2krKylpZihyPXQuYXBwbHkoZVtpXSxuKSxyPT09ITEpYnJlYWt9ZWxzZSBmb3IoaSBpbiBlKWlmKHI9dC5hcHBseShlW2ldLG4pLHI9PT0hMSlicmVha31lbHNlIGlmKHMpe2Zvcig7bz5pO2krKylpZihyPXQuY2FsbChlW2ldLGksZVtpXSkscj09PSExKWJyZWFrfWVsc2UgZm9yKGkgaW4gZSlpZihyPXQuY2FsbChlW2ldLGksZVtpXSkscj09PSExKWJyZWFrO3JldHVybiBlfSx0cmltOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOnYuY2FsbChlKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGUsdCl7dmFyIG49dHx8W107cmV0dXJuIG51bGwhPWUmJihqKE9iamVjdChlKSk/eC5tZXJnZShuLCJzdHJpbmciPT10eXBlb2YgZT9bZV06ZSk6aC5jYWxsKG4sZSkpLG59LGluQXJyYXk6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBudWxsPT10Py0xOmcuY2FsbCh0LGUsbil9LG1lcmdlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5sZW5ndGgscj1lLmxlbmd0aCxpPTA7aWYoIm51bWJlciI9PXR5cGVvZiBuKWZvcig7bj5pO2krKyllW3IrK109dFtpXTtlbHNlIHdoaWxlKHRbaV0hPT11bmRlZmluZWQpZVtyKytdPXRbaSsrXTtyZXR1cm4gZS5sZW5ndGg9cixlfSxncmVwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPVtdLG89MCxzPWUubGVuZ3RoO2ZvcihuPSEhbjtzPm87bysrKXI9ISF0KGVbb10sbyksbiE9PXImJmkucHVzaChlW29dKTtyZXR1cm4gaX0sbWFwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPTAsbz1lLmxlbmd0aCxzPWooZSksYT1bXTtpZihzKWZvcig7bz5pO2krKylyPXQoZVtpXSxpLG4pLG51bGwhPXImJihhW2EubGVuZ3RoXT1yKTtlbHNlIGZvcihpIGluIGUpcj10KGVbaV0saSxuKSxudWxsIT1yJiYoYVthLmxlbmd0aF09cik7cmV0dXJuIGYuYXBwbHkoW10sYSl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJihuPWVbdF0sdD1lLGU9bikseC5pc0Z1bmN0aW9uKGUpPyhyPWQuY2FsbChhcmd1bWVudHMsMiksaT1mdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHR8fHRoaXMsci5jb25jYXQoZC5jYWxsKGFyZ3VtZW50cykpKX0saS5ndWlkPWUuZ3VpZD1lLmd1aWR8fHguZ3VpZCsrLGkpOnVuZGVmaW5lZH0sYWNjZXNzOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMpe3ZhciBhPTAsdT1lLmxlbmd0aCxsPW51bGw9PW47aWYoIm9iamVjdCI9PT14LnR5cGUobikpe2k9ITA7Zm9yKGEgaW4gbil4LmFjY2VzcyhlLHQsYSxuW2FdLCEwLG8scyl9ZWxzZSBpZihyIT09dW5kZWZpbmVkJiYoaT0hMCx4LmlzRnVuY3Rpb24ocil8fChzPSEwKSxsJiYocz8odC5jYWxsKGUsciksdD1udWxsKToobD10LHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBsLmNhbGwoeChlKSxuKX0pKSx0KSlmb3IoO3U+YTthKyspdChlW2FdLG4scz9yOnIuY2FsbChlW2FdLGEsdChlW2FdLG4pKSk7cmV0dXJuIGk/ZTpsP3QuY2FsbChlKTp1P3QoZVswXSxuKTpvfSxub3c6RGF0ZS5ub3csc3dhcDpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLHM9e307Zm9yKG8gaW4gdClzW29dPWUuc3R5bGVbb10sZS5zdHlsZVtvXT10W29dO2k9bi5hcHBseShlLHJ8fFtdKTtmb3IobyBpbiB0KWUuc3R5bGVbb109c1tvXTtyZXR1cm4gaX19KSx4LnJlYWR5LnByb21pc2U9ZnVuY3Rpb24odCl7cmV0dXJuIG58fChuPXguRGVmZXJyZWQoKSwiY29tcGxldGUiPT09by5yZWFkeVN0YXRlP3NldFRpbWVvdXQoeC5yZWFkeSk6KG8uYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsUywhMSksZS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixTLCExKSkpLG4ucHJvbWlzZSh0KX0seC5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7bFsiW29iamVjdCAiK3QrIl0iXT10LnRvTG93ZXJDYXNlKCl9KTtmdW5jdGlvbiBqKGUpe3ZhciB0PWUubGVuZ3RoLG49eC50eXBlKGUpO3JldHVybiB4LmlzV2luZG93KGUpPyExOjE9PT1lLm5vZGVUeXBlJiZ0PyEwOiJhcnJheSI9PT1ufHwiZnVuY3Rpb24iIT09biYmKDA9PT10fHwibnVtYmVyIj09dHlwZW9mIHQmJnQ+MCYmdC0xIGluIGUpfXQ9eChvKSxmdW5jdGlvbihlLHVuZGVmaW5lZCl7dmFyIHQsbixyLGksbyxzLGEsdSxsLGMscCxmLGgsZCxnLG0seSx2PSJzaXp6bGUiKy1uZXcgRGF0ZSxiPWUuZG9jdW1lbnQsdz0wLFQ9MCxDPXN0KCksaz1zdCgpLE49c3QoKSxFPSExLFM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXQ/KEU9ITAsMCk6MH0saj10eXBlb2YgdW5kZWZpbmVkLEQ9MTw8MzEsQT17fS5oYXNPd25Qcm9wZXJ0eSxMPVtdLHE9TC5wb3AsSD1MLnB1c2gsTz1MLnB1c2gsRj1MLnNsaWNlLFA9TC5pbmRleE9mfHxmdW5jdGlvbihlKXt2YXIgdD0wLG49dGhpcy5sZW5ndGg7Zm9yKDtuPnQ7dCsrKWlmKHRoaXNbdF09PT1lKXJldHVybiB0O3JldHVybi0xfSxSPSJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsTT0iW1xceDIwXFx0XFxyXFxuXFxmXSIsVz0iKD86XFxcXC58W1xcdy1dfFteXFx4MDAtXFx4YTBdKSsiLCQ9Vy5yZXBsYWNlKCJ3IiwidyMiKSxCPSJcXFsiK00rIiooIitXKyIpIitNKyIqKD86KFsqXiR8IX5dPz0pIitNKyIqKD86KFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcM3woIiskKyIpfCl8KSIrTSsiKlxcXSIsST0iOigiK1crIikoPzpcXCgoKFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcM3woKD86XFxcXC58W15cXFxcKClbXFxdXXwiK0IucmVwbGFjZSgzLDgpKyIpKil8LiopXFwpfCkiLHo9UmVnRXhwKCJeIitNKyIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiK00rIiskIiwiZyIpLF89UmVnRXhwKCJeIitNKyIqLCIrTSsiKiIpLFg9UmVnRXhwKCJeIitNKyIqKFs+K35dfCIrTSsiKSIrTSsiKiIpLFU9UmVnRXhwKE0rIipbK35dIiksWT1SZWdFeHAoIj0iK00rIiooW15cXF0nXCJdKikiK00rIipcXF0iLCJnIiksVj1SZWdFeHAoSSksRz1SZWdFeHAoIl4iKyQrIiQiKSxKPXtJRDpSZWdFeHAoIl4jKCIrVysiKSIpLENMQVNTOlJlZ0V4cCgiXlxcLigiK1crIikiKSxUQUc6UmVnRXhwKCJeKCIrVy5yZXBsYWNlKCJ3IiwidyoiKSsiKSIpLEFUVFI6UmVnRXhwKCJeIitCKSxQU0VVRE86UmVnRXhwKCJeIitJKSxDSElMRDpSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrTSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTSsiKig/OihbKy1dfCkiK00rIiooXFxkKyl8KSkiK00rIipcXCl8KSIsImkiKSxib29sOlJlZ0V4cCgiXig/OiIrUisiKSQiLCJpIiksbmVlZHNDb250ZXh0OlJlZ0V4cCgiXiIrTSsiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIitNKyIqKCg/Oi1cXGQpP1xcZCopIitNKyIqXFwpfCkoPz1bXi1dfCQpIiwiaSIpfSxRPS9eW157XStce1xzKlxbbmF0aXZlIFx3LyxLPS9eKD86IyhbXHctXSspfChcdyspfFwuKFtcdy1dKykpJC8sWj0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLGV0PS9eaFxkJC9pLHR0PS8nfFxcL2csbnQ9UmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK00rIj98KCIrTSsiKXwuKSIsImlnIikscnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSIweCIrdC02NTUzNjtyZXR1cm4gciE9PXJ8fG4/dDowPnI/U3RyaW5nLmZyb21DaGFyQ29kZShyKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fHI+PjEwLDU2MzIwfDEwMjMmcil9O3RyeXtPLmFwcGx5KEw9Ri5jYWxsKGIuY2hpbGROb2RlcyksYi5jaGlsZE5vZGVzKSxMW2IuY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlfWNhdGNoKGl0KXtPPXthcHBseTpMLmxlbmd0aD9mdW5jdGlvbihlLHQpe0guYXBwbHkoZSxGLmNhbGwodCkpfTpmdW5jdGlvbihlLHQpe3ZhciBuPWUubGVuZ3RoLHI9MDt3aGlsZShlW24rK109dFtyKytdKTtlLmxlbmd0aD1uLTF9fX1mdW5jdGlvbiBvdChlLHQscixpKXt2YXIgbyxzLGEsdSxsLGYsZyxtLHgsdztpZigodD90Lm93bmVyRG9jdW1lbnR8fHQ6YikhPT1wJiZjKHQpLHQ9dHx8cCxyPXJ8fFtdLCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIHI7aWYoMSE9PSh1PXQubm9kZVR5cGUpJiY5IT09dSlyZXR1cm5bXTtpZihoJiYhaSl7aWYobz1LLmV4ZWMoZSkpaWYoYT1vWzFdKXtpZig5PT09dSl7aWYocz10LmdldEVsZW1lbnRCeUlkKGEpLCFzfHwhcy5wYXJlbnROb2RlKXJldHVybiByO2lmKHMuaWQ9PT1hKXJldHVybiByLnB1c2gocykscn1lbHNlIGlmKHQub3duZXJEb2N1bWVudCYmKHM9dC5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpKSYmeSh0LHMpJiZzLmlkPT09YSlyZXR1cm4gci5wdXNoKHMpLHJ9ZWxzZXtpZihvWzJdKXJldHVybiBPLmFwcGx5KHIsdC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKSkscjtpZigoYT1vWzNdKSYmbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZ0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIE8uYXBwbHkocix0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYSkpLHJ9aWYobi5xc2EmJighZHx8IWQudGVzdChlKSkpe2lmKG09Zz12LHg9dCx3PTk9PT11JiZlLDE9PT11JiYib2JqZWN0IiE9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7Zj1ndChlKSwoZz10LmdldEF0dHJpYnV0ZSgiaWQiKSk/bT1nLnJlcGxhY2UodHQsIlxcJCYiKTp0LnNldEF0dHJpYnV0ZSgiaWQiLG0pLG09IltpZD0nIittKyInXSAiLGw9Zi5sZW5ndGg7d2hpbGUobC0tKWZbbF09bSttdChmW2xdKTt4PVUudGVzdChlKSYmdC5wYXJlbnROb2RlfHx0LHc9Zi5qb2luKCIsIil9aWYodyl0cnl7cmV0dXJuIE8uYXBwbHkocix4LnF1ZXJ5U2VsZWN0b3JBbGwodykpLHJ9Y2F0Y2goVCl7fWZpbmFsbHl7Z3x8dC5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fX1yZXR1cm4ga3QoZS5yZXBsYWNlKHosIiQxIiksdCxyLGkpfWZ1bmN0aW9uIHN0KCl7dmFyIGU9W107ZnVuY3Rpb24gdChuLHIpe3JldHVybiBlLnB1c2gobis9IiAiKT5pLmNhY2hlTGVuZ3RoJiZkZWxldGUgdFtlLnNoaWZ0KCldLHRbbl09cn1yZXR1cm4gdH1mdW5jdGlvbiBhdChlKXtyZXR1cm4gZVt2XT0hMCxlfWZ1bmN0aW9uIHV0KGUpe3ZhciB0PXAuY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e3JldHVybiEhZSh0KX1jYXRjaChuKXtyZXR1cm4hMX1maW5hbGx5e3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLHQ9bnVsbH19ZnVuY3Rpb24gbHQoZSx0KXt2YXIgbj1lLnNwbGl0KCJ8Iikscj1lLmxlbmd0aDt3aGlsZShyLS0paS5hdHRySGFuZGxlW25bcl1dPXR9ZnVuY3Rpb24gY3QoZSx0KXt2YXIgbj10JiZlLHI9biYmMT09PWUubm9kZVR5cGUmJjE9PT10Lm5vZGVUeXBlJiYofnQuc291cmNlSW5kZXh8fEQpLSh+ZS5zb3VyY2VJbmRleHx8RCk7aWYocilyZXR1cm4gcjtpZihuKXdoaWxlKG49bi5uZXh0U2libGluZylpZihuPT09dClyZXR1cm4tMTtyZXR1cm4gZT8xOi0xfWZ1bmN0aW9uIHB0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PW4mJnQudHlwZT09PWV9fWZ1bmN0aW9uIGZ0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT1ufHwiYnV0dG9uIj09PW4pJiZ0LnR5cGU9PT1lfX1mdW5jdGlvbiBodChlKXtyZXR1cm4gYXQoZnVuY3Rpb24odCl7cmV0dXJuIHQ9K3QsYXQoZnVuY3Rpb24obixyKXt2YXIgaSxvPWUoW10sbi5sZW5ndGgsdCkscz1vLmxlbmd0aDt3aGlsZShzLS0pbltpPW9bc11dJiYobltpXT0hKHJbaV09bltpXSkpfSl9KX1zPW90LmlzWE1MPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJihlLm93bmVyRG9jdW1lbnR8fGUpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gdD8iSFRNTCIhPT10Lm5vZGVOYW1lOiExfSxuPW90LnN1cHBvcnQ9e30sYz1vdC5zZXREb2N1bWVudD1mdW5jdGlvbihlKXt2YXIgdD1lP2Uub3duZXJEb2N1bWVudHx8ZTpiLHI9dC5kZWZhdWx0VmlldztyZXR1cm4gdCE9PXAmJjk9PT10Lm5vZGVUeXBlJiZ0LmRvY3VtZW50RWxlbWVudD8ocD10LGY9dC5kb2N1bWVudEVsZW1lbnQsaD0hcyh0KSxyJiZyLmF0dGFjaEV2ZW50JiZyIT09ci50b3AmJnIuYXR0YWNoRXZlbnQoIm9uYmVmb3JldW5sb2FkIixmdW5jdGlvbigpe2MoKX0pLG4uYXR0cmlidXRlcz11dChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc05hbWU9ImkiLCFlLmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIil9KSxuLmdldEVsZW1lbnRzQnlUYWdOYW1lPXV0KGZ1bmN0aW9uKGUpe3JldHVybiBlLmFwcGVuZENoaWxkKHQuY3JlYXRlQ29tbWVudCgiIikpLCFlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPXV0KGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGRpdiBjbGFzcz0nYSc+PC9kaXY+PGRpdiBjbGFzcz0nYSBpJz48L2Rpdj4iLGUuZmlyc3RDaGlsZC5jbGFzc05hbWU9ImkiLDI9PT1lLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImkiKS5sZW5ndGh9KSxuLmdldEJ5SWQ9dXQoZnVuY3Rpb24oZSl7cmV0dXJuIGYuYXBwZW5kQ2hpbGQoZSkuaWQ9diwhdC5nZXRFbGVtZW50c0J5TmFtZXx8IXQuZ2V0RWxlbWVudHNCeU5hbWUodikubGVuZ3RofSksbi5nZXRCeUlkPyhpLmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgdC5nZXRFbGVtZW50QnlJZCE9PWomJmgpe3ZhciBuPXQuZ2V0RWxlbWVudEJ5SWQoZSk7cmV0dXJuIG4mJm4ucGFyZW50Tm9kZT9bbl06W119fSxpLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UobnQscnQpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUoImlkIik9PT10fX0pOihkZWxldGUgaS5maW5kLklELGkuZmlsdGVyLklEPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShudCxydCk7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPXR5cGVvZiBlLmdldEF0dHJpYnV0ZU5vZGUhPT1qJiZlLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIG4mJm4udmFsdWU9PT10fX0pLGkuZmluZC5UQUc9bi5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihlLHQpe3JldHVybiB0eXBlb2YgdC5nZXRFbGVtZW50c0J5VGFnTmFtZSE9PWo/dC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKTp1bmRlZmluZWR9OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPTAsbz10LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpO2lmKCIqIj09PWUpe3doaWxlKG49b1tpKytdKTE9PT1uLm5vZGVUeXBlJiZyLnB1c2gobik7cmV0dXJuIHJ9cmV0dXJuIG99LGkuZmluZC5DTEFTUz1uLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR5cGVvZiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUhPT1qJiZoP3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKTp1bmRlZmluZWR9LGc9W10sZD1bXSwobi5xc2E9US50ZXN0KHQucXVlcnlTZWxlY3RvckFsbCkpJiYodXQoZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9IjxzZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGUucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8ZC5wdXNoKCJcXFsiK00rIiooPzp2YWx1ZXwiK1IrIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxkLnB1c2goIjpjaGVja2VkIil9KSx1dChmdW5jdGlvbihlKXt2YXIgbj10LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7bi5zZXRBdHRyaWJ1dGUoInR5cGUiLCJoaWRkZW4iKSxlLmFwcGVuZENoaWxkKG4pLnNldEF0dHJpYnV0ZSgidCIsIiIpLGUucXVlcnlTZWxlY3RvckFsbCgiW3RePScnXSIpLmxlbmd0aCYmZC5wdXNoKCJbKl4kXT0iK00rIiooPzonJ3xcIlwiKSIpLGUucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGh8fGQucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSxkLnB1c2goIiwuKjoiKX0pKSwobi5tYXRjaGVzU2VsZWN0b3I9US50ZXN0KG09Zi53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGYubW96TWF0Y2hlc1NlbGVjdG9yfHxmLm9NYXRjaGVzU2VsZWN0b3J8fGYubXNNYXRjaGVzU2VsZWN0b3IpKSYmdXQoZnVuY3Rpb24oZSl7bi5kaXNjb25uZWN0ZWRNYXRjaD1tLmNhbGwoZSwiZGl2IiksbS5jYWxsKGUsIltzIT0nJ106eCIpLGcucHVzaCgiIT0iLEkpfSksZD1kLmxlbmd0aCYmUmVnRXhwKGQuam9pbigifCIpKSxnPWcubGVuZ3RoJiZSZWdFeHAoZy5qb2luKCJ8IikpLHk9US50ZXN0KGYuY29udGFpbnMpfHxmLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2Z1bmN0aW9uKGUsdCl7dmFyIG49OT09PWUubm9kZVR5cGU/ZS5kb2N1bWVudEVsZW1lbnQ6ZSxyPXQmJnQucGFyZW50Tm9kZTtyZXR1cm4gZT09PXJ8fCEoIXJ8fDEhPT1yLm5vZGVUeXBlfHwhKG4uY29udGFpbnM/bi5jb250YWlucyhyKTplLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYxNiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpKSl9OmZ1bmN0aW9uKGUsdCl7aWYodCl3aGlsZSh0PXQucGFyZW50Tm9kZSlpZih0PT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sUz1mLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2Z1bmN0aW9uKGUscil7aWYoZT09PXIpcmV0dXJuIEU9ITAsMDt2YXIgaT1yLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpO3JldHVybiBpPzEmaXx8IW4uc29ydERldGFjaGVkJiZyLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpPT09aT9lPT09dHx8eShiLGUpPy0xOnI9PT10fHx5KGIscik/MTpsP1AuY2FsbChsLGUpLVAuY2FsbChsLHIpOjA6NCZpPy0xOjE6ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8tMToxfTpmdW5jdGlvbihlLG4pe3ZhciByLGk9MCxvPWUucGFyZW50Tm9kZSxzPW4ucGFyZW50Tm9kZSxhPVtlXSx1PVtuXTtpZihlPT09bilyZXR1cm4gRT0hMCwwO2lmKCFvfHwhcylyZXR1cm4gZT09PXQ/LTE6bj09PXQ/MTpvPy0xOnM/MTpsP1AuY2FsbChsLGUpLVAuY2FsbChsLG4pOjA7aWYobz09PXMpcmV0dXJuIGN0KGUsbik7cj1lO3doaWxlKHI9ci5wYXJlbnROb2RlKWEudW5zaGlmdChyKTtyPW47d2hpbGUocj1yLnBhcmVudE5vZGUpdS51bnNoaWZ0KHIpO3doaWxlKGFbaV09PT11W2ldKWkrKztyZXR1cm4gaT9jdChhW2ldLHVbaV0pOmFbaV09PT1iPy0xOnVbaV09PT1iPzE6MH0sdCk6cH0sb3QubWF0Y2hlcz1mdW5jdGlvbihlLHQpe3JldHVybiBvdChlLG51bGwsbnVsbCx0KX0sb3QubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGUsdCl7aWYoKGUub3duZXJEb2N1bWVudHx8ZSkhPT1wJiZjKGUpLHQ9dC5yZXBsYWNlKFksIj0nJDEnXSIpLCEoIW4ubWF0Y2hlc1NlbGVjdG9yfHwhaHx8ZyYmZy50ZXN0KHQpfHxkJiZkLnRlc3QodCkpKXRyeXt2YXIgcj1tLmNhbGwoZSx0KTtpZihyfHxuLmRpc2Nvbm5lY3RlZE1hdGNofHxlLmRvY3VtZW50JiYxMSE9PWUuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIHJ9Y2F0Y2goaSl7fXJldHVybiBvdCh0LHAsbnVsbCxbZV0pLmxlbmd0aD4wfSxvdC5jb250YWlucz1mdW5jdGlvbihlLHQpe3JldHVybihlLm93bmVyRG9jdW1lbnR8fGUpIT09cCYmYyhlKSx5KGUsdCl9LG90LmF0dHI9ZnVuY3Rpb24oZSx0KXsoZS5vd25lckRvY3VtZW50fHxlKSE9PXAmJmMoZSk7dmFyIHI9aS5hdHRySGFuZGxlW3QudG9Mb3dlckNhc2UoKV0sbz1yJiZBLmNhbGwoaS5hdHRySGFuZGxlLHQudG9Mb3dlckNhc2UoKSk/cihlLHQsIWgpOnVuZGVmaW5lZDtyZXR1cm4gbz09PXVuZGVmaW5lZD9uLmF0dHJpYnV0ZXN8fCFoP2UuZ2V0QXR0cmlidXRlKHQpOihvPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJm8uc3BlY2lmaWVkP28udmFsdWU6bnVsbDpvfSxvdC5lcnJvcj1mdW5jdGlvbihlKXt0aHJvdyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIitlKX0sb3QudW5pcXVlU29ydD1mdW5jdGlvbihlKXt2YXIgdCxyPVtdLGk9MCxvPTA7aWYoRT0hbi5kZXRlY3REdXBsaWNhdGVzLGw9IW4uc29ydFN0YWJsZSYmZS5zbGljZSgwKSxlLnNvcnQoUyksRSl7d2hpbGUodD1lW28rK10pdD09PWVbb10mJihpPXIucHVzaChvKSk7d2hpbGUoaS0tKWUuc3BsaWNlKHJbaV0sMSl9cmV0dXJuIGV9LG89b3QuZ2V0VGV4dD1mdW5jdGlvbihlKXt2YXIgdCxuPSIiLHI9MCxpPWUubm9kZVR5cGU7aWYoaSl7aWYoMT09PWl8fDk9PT1pfHwxMT09PWkpe2lmKCJzdHJpbmciPT10eXBlb2YgZS50ZXh0Q29udGVudClyZXR1cm4gZS50ZXh0Q29udGVudDtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpbis9byhlKX1lbHNlIGlmKDM9PT1pfHw0PT09aSlyZXR1cm4gZS5ub2RlVmFsdWV9ZWxzZSBmb3IoO3Q9ZVtyXTtyKyspbis9byh0KTtyZXR1cm4gbn0saT1vdC5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzphdCxtYXRjaDpKLGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7Ij4iOntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnJlcGxhY2UobnQscnQpLGVbM109KGVbNF18fGVbNV18fCIiKS5yZXBsYWNlKG50LHJ0KSwifj0iPT09ZVsyXSYmKGVbM109IiAiK2VbM10rIiAiKSxlLnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPWVbMV0udG9Mb3dlckNhc2UoKSwibnRoIj09PWVbMV0uc2xpY2UoMCwzKT8oZVszXXx8b3QuZXJyb3IoZVswXSksZVs0XT0rKGVbNF0/ZVs1XSsoZVs2XXx8MSk6MiooImV2ZW4iPT09ZVszXXx8Im9kZCI9PT1lWzNdKSksZVs1XT0rKGVbN10rZVs4XXx8Im9kZCI9PT1lWzNdKSk6ZVszXSYmb3QuZXJyb3IoZVswXSksZX0sUFNFVURPOmZ1bmN0aW9uKGUpe3ZhciB0LG49IWVbNV0mJmVbMl07cmV0dXJuIEouQ0hJTEQudGVzdChlWzBdKT9udWxsOihlWzNdJiZlWzRdIT09dW5kZWZpbmVkP2VbMl09ZVs0XTpuJiZWLnRlc3QobikmJih0PWd0KG4sITApKSYmKHQ9bi5pbmRleE9mKCIpIixuLmxlbmd0aC10KS1uLmxlbmd0aCkmJihlWzBdPWVbMF0uc2xpY2UoMCx0KSxlWzJdPW4uc2xpY2UoMCx0KSksZS5zbGljZSgwLDMpKX19LGZpbHRlcjp7VEFHOmZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShudCxydCkudG9Mb3dlckNhc2UoKTtyZXR1cm4iKiI9PT1lP2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9uKGUpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10fX0sQ0xBU1M6ZnVuY3Rpb24oZSl7dmFyIHQ9Q1tlKyIgIl07cmV0dXJuIHR8fCh0PVJlZ0V4cCgiKF58IitNKyIpIitlKyIoIitNKyJ8JCkiKSkmJkMoZSxmdW5jdGlvbihlKXtyZXR1cm4gdC50ZXN0KCJzdHJpbmciPT10eXBlb2YgZS5jbGFzc05hbWUmJmUuY2xhc3NOYW1lfHx0eXBlb2YgZS5nZXRBdHRyaWJ1dGUhPT1qJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfSl9LEFUVFI6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXt2YXIgaT1vdC5hdHRyKHIsZSk7cmV0dXJuIG51bGw9PWk/IiE9Ij09PXQ6dD8oaSs9IiIsIj0iPT09dD9pPT09bjoiIT0iPT09dD9pIT09bjoiXj0iPT09dD9uJiYwPT09aS5pbmRleE9mKG4pOiIqPSI9PT10P24mJmkuaW5kZXhPZihuKT4tMToiJD0iPT09dD9uJiZpLnNsaWNlKC1uLmxlbmd0aCk9PT1uOiJ+PSI9PT10PygiICIraSsiICIpLmluZGV4T2Yobik+LTE6Inw9Ij09PXQ/aT09PW58fGkuc2xpY2UoMCxuLmxlbmd0aCsxKT09PW4rIi0iOiExKTohMH19LENISUxEOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89Im50aCIhPT1lLnNsaWNlKDAsMykscz0ibGFzdCIhPT1lLnNsaWNlKC00KSxhPSJvZi10eXBlIj09PXQ7cmV0dXJuIDE9PT1yJiYwPT09aT9mdW5jdGlvbihlKXtyZXR1cm4hIWUucGFyZW50Tm9kZX06ZnVuY3Rpb24odCxuLHUpe3ZhciBsLGMscCxmLGgsZCxnPW8hPT1zPyJuZXh0U2libGluZyI6InByZXZpb3VzU2libGluZyIsbT10LnBhcmVudE5vZGUseT1hJiZ0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkseD0hdSYmIWE7aWYobSl7aWYobyl7d2hpbGUoZyl7cD10O3doaWxlKHA9cFtnXSlpZihhP3Aubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXk6MT09PXAubm9kZVR5cGUpcmV0dXJuITE7ZD1nPSJvbmx5Ij09PWUmJiFkJiYibmV4dFNpYmxpbmcifXJldHVybiEwfWlmKGQ9W3M/bS5maXJzdENoaWxkOm0ubGFzdENoaWxkXSxzJiZ4KXtjPW1bdl18fChtW3ZdPXt9KSxsPWNbZV18fFtdLGg9bFswXT09PXcmJmxbMV0sZj1sWzBdPT09dyYmbFsyXSxwPWgmJm0uY2hpbGROb2Rlc1toXTt3aGlsZShwPSsraCYmcCYmcFtnXXx8KGY9aD0wKXx8ZC5wb3AoKSlpZigxPT09cC5ub2RlVHlwZSYmKytmJiZwPT09dCl7Y1tlXT1bdyxoLGZdO2JyZWFrfX1lbHNlIGlmKHgmJihsPSh0W3ZdfHwodFt2XT17fSkpW2VdKSYmbFswXT09PXcpZj1sWzFdO2Vsc2Ugd2hpbGUocD0rK2gmJnAmJnBbZ118fChmPWg9MCl8fGQucG9wKCkpaWYoKGE/cC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09eToxPT09cC5ub2RlVHlwZSkmJisrZiYmKHgmJigocFt2XXx8KHBbdl09e30pKVtlXT1bdyxmXSkscD09PXQpKWJyZWFrO3JldHVybiBmLT1pLGY9PT1yfHwwPT09ZiVyJiZmL3I+PTB9fX0sUFNFVURPOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1pLnBzZXVkb3NbZV18fGkuc2V0RmlsdGVyc1tlLnRvTG93ZXJDYXNlKCldfHxvdC5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2UpO3JldHVybiByW3ZdP3IodCk6ci5sZW5ndGg+MT8obj1bZSxlLCIiLHRdLGkuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpP2F0KGZ1bmN0aW9uKGUsbil7dmFyIGksbz1yKGUsdCkscz1vLmxlbmd0aDt3aGlsZShzLS0paT1QLmNhbGwoZSxvW3NdKSxlW2ldPSEobltpXT1vW3NdKX0pOmZ1bmN0aW9uKGUpe3JldHVybiByKGUsMCxuKX0pOnJ9fSxwc2V1ZG9zOntub3Q6YXQoZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1bXSxyPWEoZS5yZXBsYWNlKHosIiQxIikpO3JldHVybiByW3ZdP2F0KGZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBvLHM9cihlLG51bGwsaSxbXSksYT1lLmxlbmd0aDt3aGlsZShhLS0pKG89c1thXSkmJihlW2FdPSEodFthXT1vKSl9KTpmdW5jdGlvbihlLGksbyl7cmV0dXJuIHRbMF09ZSxyKHQsbnVsbCxvLG4pLCFuLnBvcCgpfX0pLGhhczphdChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG90KGUsdCkubGVuZ3RoPjB9fSksY29udGFpbnM6YXQoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybih0LnRleHRDb250ZW50fHx0LmlubmVyVGV4dHx8byh0KSkuaW5kZXhPZihlKT4tMX19KSxsYW5nOmF0KGZ1bmN0aW9uKGUpe3JldHVybiBHLnRlc3QoZXx8IiIpfHxvdC5lcnJvcigidW5zdXBwb3J0ZWQgbGFuZzogIitlKSxlPWUucmVwbGFjZShudCxydCkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbih0KXt2YXIgbjtkbyBpZihuPWg/dC5sYW5nOnQuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpfHx0LmdldEF0dHJpYnV0ZSgibGFuZyIpKXJldHVybiBuPW4udG9Mb3dlckNhc2UoKSxuPT09ZXx8MD09PW4uaW5kZXhPZihlKyItIik7d2hpbGUoKHQ9dC5wYXJlbnROb2RlKSYmMT09PXQubm9kZVR5cGUpO3JldHVybiExfX0pLHRhcmdldDpmdW5jdGlvbih0KXt2YXIgbj1lLmxvY2F0aW9uJiZlLmxvY2F0aW9uLmhhc2g7cmV0dXJuIG4mJm4uc2xpY2UoMSk9PT10LmlkfSxyb290OmZ1bmN0aW9uKGUpe3JldHVybiBlPT09Zn0sZm9jdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1wLmFjdGl2ZUVsZW1lbnQmJighcC5oYXNGb2N1c3x8cC5oYXNGb2N1cygpKSYmISEoZS50eXBlfHxlLmhyZWZ8fH5lLnRhYkluZGV4KX0sZW5hYmxlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD09PSExfSxkaXNhYmxlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD09PSEwfSxjaGVja2VkOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09dCYmISFlLmNoZWNrZWR8fCJvcHRpb24iPT09dCYmISFlLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxlLnNlbGVjdGVkPT09ITB9LGVtcHR5OmZ1bmN0aW9uKGUpe2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZylpZihlLm5vZGVOYW1lPiJAInx8Mz09PWUubm9kZVR5cGV8fDQ9PT1lLm5vZGVUeXBlKXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIWkucHNldWRvcy5lbXB0eShlKX0saGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBldC50ZXN0KGUubm9kZU5hbWUpfSxpbnB1dDpmdW5jdGlvbihlKXtyZXR1cm4gWi50ZXN0KGUubm9kZU5hbWUpfSxidXR0b246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT10JiYiYnV0dG9uIj09PWUudHlwZXx8ImJ1dHRvbiI9PT10fSx0ZXh0OmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiJpbnB1dCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJiJ0ZXh0Ij09PWUudHlwZSYmKG51bGw9PSh0PWUuZ2V0QXR0cmlidXRlKCJ0eXBlIikpfHx0LnRvTG93ZXJDYXNlKCk9PT1lLnR5cGUpfSxmaXJzdDpodChmdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6aHQoZnVuY3Rpb24oZSx0KXtyZXR1cm5bdC0xXX0pLGVxOmh0KGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm5bMD5uP24rdDpuXX0pLGV2ZW46aHQoZnVuY3Rpb24oZSx0KXt2YXIgbj0wO2Zvcig7dD5uO24rPTIpZS5wdXNoKG4pO3JldHVybiBlfSksb2RkOmh0KGZ1bmN0aW9uKGUsdCl7dmFyIG49MTtmb3IoO3Q+bjtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLGx0Omh0KGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0wPm4/bit0Om47Zm9yKDstLXI+PTA7KWUucHVzaChyKTtyZXR1cm4gZX0pLGd0Omh0KGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0wPm4/bit0Om47Zm9yKDt0PisrcjspZS5wdXNoKHIpO3JldHVybiBlfSl9fSxpLnBzZXVkb3MubnRoPWkucHNldWRvcy5lcTtmb3IodCBpbntyYWRpbzohMCxjaGVja2JveDohMCxmaWxlOiEwLHBhc3N3b3JkOiEwLGltYWdlOiEwfSlpLnBzZXVkb3NbdF09cHQodCk7Zm9yKHQgaW57c3VibWl0OiEwLHJlc2V0OiEwfSlpLnBzZXVkb3NbdF09ZnQodCk7ZnVuY3Rpb24gZHQoKXt9ZHQucHJvdG90eXBlPWkuZmlsdGVycz1pLnBzZXVkb3MsaS5zZXRGaWx0ZXJzPW5ldyBkdDtmdW5jdGlvbiBndChlLHQpe3ZhciBuLHIsbyxzLGEsdSxsLGM9a1tlKyIgIl07aWYoYylyZXR1cm4gdD8wOmMuc2xpY2UoMCk7YT1lLHU9W10sbD1pLnByZUZpbHRlcjt3aGlsZShhKXsoIW58fChyPV8uZXhlYyhhKSkpJiYociYmKGE9YS5zbGljZShyWzBdLmxlbmd0aCl8fGEpLHUucHVzaChvPVtdKSksbj0hMSwocj1YLmV4ZWMoYSkpJiYobj1yLnNoaWZ0KCksby5wdXNoKHt2YWx1ZTpuLHR5cGU6clswXS5yZXBsYWNlKHosIiAiKX0pLGE9YS5zbGljZShuLmxlbmd0aCkpO2ZvcihzIGluIGkuZmlsdGVyKSEocj1KW3NdLmV4ZWMoYSkpfHxsW3NdJiYhKHI9bFtzXShyKSl8fChuPXIuc2hpZnQoKSxvLnB1c2goe3ZhbHVlOm4sdHlwZTpzLG1hdGNoZXM6cn0pLGE9YS5zbGljZShuLmxlbmd0aCkpO2lmKCFuKWJyZWFrfXJldHVybiB0P2EubGVuZ3RoOmE/b3QuZXJyb3IoZSk6ayhlLHUpLnNsaWNlKDApfWZ1bmN0aW9uIG10KGUpe3ZhciB0PTAsbj1lLmxlbmd0aCxyPSIiO2Zvcig7bj50O3QrKylyKz1lW3RdLnZhbHVlO3JldHVybiByfWZ1bmN0aW9uIHl0KGUsdCxuKXt2YXIgaT10LmRpcixvPW4mJiJwYXJlbnROb2RlIj09PWkscz1UKys7cmV0dXJuIHQuZmlyc3Q/ZnVuY3Rpb24odCxuLHIpe3doaWxlKHQ9dFtpXSlpZigxPT09dC5ub2RlVHlwZXx8bylyZXR1cm4gZSh0LG4scil9OmZ1bmN0aW9uKHQsbixhKXt2YXIgdSxsLGMscD13KyIgIitzO2lmKGEpe3doaWxlKHQ9dFtpXSlpZigoMT09PXQubm9kZVR5cGV8fG8pJiZlKHQsbixhKSlyZXR1cm4hMH1lbHNlIHdoaWxlKHQ9dFtpXSlpZigxPT09dC5ub2RlVHlwZXx8bylpZihjPXRbdl18fCh0W3ZdPXt9KSwobD1jW2ldKSYmbFswXT09PXApe2lmKCh1PWxbMV0pPT09ITB8fHU9PT1yKXJldHVybiB1PT09ITB9ZWxzZSBpZihsPWNbaV09W3BdLGxbMV09ZSh0LG4sYSl8fHIsbFsxXT09PSEwKXJldHVybiEwfX1mdW5jdGlvbiB2dChlKXtyZXR1cm4gZS5sZW5ndGg+MT9mdW5jdGlvbih0LG4scil7dmFyIGk9ZS5sZW5ndGg7d2hpbGUoaS0tKWlmKCFlW2ldKHQsbixyKSlyZXR1cm4hMTtyZXR1cm4hMH06ZVswXX1mdW5jdGlvbiB4dChlLHQsbixyLGkpe3ZhciBvLHM9W10sYT0wLHU9ZS5sZW5ndGgsbD1udWxsIT10O2Zvcig7dT5hO2ErKykobz1lW2FdKSYmKCFufHxuKG8scixpKSkmJihzLnB1c2gobyksbCYmdC5wdXNoKGEpKTtyZXR1cm4gc31mdW5jdGlvbiBidChlLHQsbixyLGksbyl7cmV0dXJuIHImJiFyW3ZdJiYocj1idChyKSksaSYmIWlbdl0mJihpPWJ0KGksbykpLGF0KGZ1bmN0aW9uKG8scyxhLHUpe3ZhciBsLGMscCxmPVtdLGg9W10sZD1zLmxlbmd0aCxnPW98fEN0KHR8fCIqIixhLm5vZGVUeXBlP1thXTphLFtdKSxtPSFlfHwhbyYmdD9nOnh0KGcsZixlLGEsdSkseT1uP2l8fChvP2U6ZHx8cik/W106czptO2lmKG4mJm4obSx5LGEsdSkscil7bD14dCh5LGgpLHIobCxbXSxhLHUpLGM9bC5sZW5ndGg7d2hpbGUoYy0tKShwPWxbY10pJiYoeVtoW2NdXT0hKG1baFtjXV09cCkpfWlmKG8pe2lmKGl8fGUpe2lmKGkpe2w9W10sYz15Lmxlbmd0aDt3aGlsZShjLS0pKHA9eVtjXSkmJmwucHVzaChtW2NdPXApO2kobnVsbCx5PVtdLGwsdSl9Yz15Lmxlbmd0aDt3aGlsZShjLS0pKHA9eVtjXSkmJihsPWk/UC5jYWxsKG8scCk6ZltjXSk+LTEmJihvW2xdPSEoc1tsXT1wKSl9fWVsc2UgeT14dCh5PT09cz95LnNwbGljZShkLHkubGVuZ3RoKTp5KSxpP2kobnVsbCxzLHksdSk6Ty5hcHBseShzLHkpfSl9ZnVuY3Rpb24gd3QoZSl7dmFyIHQsbixyLG89ZS5sZW5ndGgscz1pLnJlbGF0aXZlW2VbMF0udHlwZV0sYT1zfHxpLnJlbGF0aXZlWyIgIl0sbD1zPzE6MCxjPXl0KGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dH0sYSwhMCkscD15dChmdW5jdGlvbihlKXtyZXR1cm4gUC5jYWxsKHQsZSk+LTF9LGEsITApLGY9W2Z1bmN0aW9uKGUsbixyKXtyZXR1cm4hcyYmKHJ8fG4hPT11KXx8KCh0PW4pLm5vZGVUeXBlP2MoZSxuLHIpOnAoZSxuLHIpKX1dO2Zvcig7bz5sO2wrKylpZihuPWkucmVsYXRpdmVbZVtsXS50eXBlXSlmPVt5dCh2dChmKSxuKV07ZWxzZXtpZihuPWkuZmlsdGVyW2VbbF0udHlwZV0uYXBwbHkobnVsbCxlW2xdLm1hdGNoZXMpLG5bdl0pe2ZvcihyPSsrbDtvPnI7cisrKWlmKGkucmVsYXRpdmVbZVtyXS50eXBlXSlicmVhaztyZXR1cm4gYnQobD4xJiZ2dChmKSxsPjEmJm10KGUuc2xpY2UoMCxsLTEpLmNvbmNhdCh7dmFsdWU6IiAiPT09ZVtsLTJdLnR5cGU/IioiOiIifSkpLnJlcGxhY2UoeiwiJDEiKSxuLHI+bCYmd3QoZS5zbGljZShsLHIpKSxvPnImJnd0KGU9ZS5zbGljZShyKSksbz5yJiZtdChlKSl9Zi5wdXNoKG4pfXJldHVybiB2dChmKX1mdW5jdGlvbiBUdChlLHQpe3ZhciBuPTAsbz10Lmxlbmd0aD4wLHM9ZS5sZW5ndGg+MCxhPWZ1bmN0aW9uKGEsbCxjLGYsaCl7dmFyIGQsZyxtLHk9W10sdj0wLHg9IjAiLGI9YSYmW10sVD1udWxsIT1oLEM9dSxrPWF8fHMmJmkuZmluZC5UQUcoIioiLGgmJmwucGFyZW50Tm9kZXx8bCksTj13Kz1udWxsPT1DPzE6TWF0aC5yYW5kb20oKXx8LjE7Zm9yKFQmJih1PWwhPT1wJiZsLHI9bik7bnVsbCE9KGQ9a1t4XSk7eCsrKXtpZihzJiZkKXtnPTA7d2hpbGUobT1lW2crK10paWYobShkLGwsYykpe2YucHVzaChkKTticmVha31UJiYodz1OLHI9KytuKX1vJiYoKGQ9IW0mJmQpJiZ2LS0sYSYmYi5wdXNoKGQpKX1pZih2Kz14LG8mJnghPT12KXtnPTA7d2hpbGUobT10W2crK10pbShiLHksbCxjKTtpZihhKXtpZih2PjApd2hpbGUoeC0tKWJbeF18fHlbeF18fCh5W3hdPXEuY2FsbChmKSk7eT14dCh5KX1PLmFwcGx5KGYseSksVCYmIWEmJnkubGVuZ3RoPjAmJnYrdC5sZW5ndGg+MSYmb3QudW5pcXVlU29ydChmKX1yZXR1cm4gVCYmKHc9Tix1PUMpLGJ9O3JldHVybiBvP2F0KGEpOmF9YT1vdC5jb21waWxlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPVtdLG89TltlKyIgIl07aWYoIW8pe3R8fCh0PWd0KGUpKSxuPXQubGVuZ3RoO3doaWxlKG4tLSlvPXd0KHRbbl0pLG9bdl0/ci5wdXNoKG8pOmkucHVzaChvKTtvPU4oZSxUdChpLHIpKX1yZXR1cm4gb307ZnVuY3Rpb24gQ3QoZSx0LG4pe3ZhciByPTAsaT10Lmxlbmd0aDtmb3IoO2k+cjtyKyspb3QoZSx0W3JdLG4pO3JldHVybiBufWZ1bmN0aW9uIGt0KGUsdCxyLG8pe3ZhciBzLHUsbCxjLHAsZj1ndChlKTtpZighbyYmMT09PWYubGVuZ3RoKXtpZih1PWZbMF09ZlswXS5zbGljZSgwKSx1Lmxlbmd0aD4yJiYiSUQiPT09KGw9dVswXSkudHlwZSYmbi5nZXRCeUlkJiY5PT09dC5ub2RlVHlwZSYmaCYmaS5yZWxhdGl2ZVt1WzFdLnR5cGVdKXtpZih0PShpLmZpbmQuSUQobC5tYXRjaGVzWzBdLnJlcGxhY2UobnQscnQpLHQpfHxbXSlbMF0sIXQpcmV0dXJuIHI7ZT1lLnNsaWNlKHUuc2hpZnQoKS52YWx1ZS5sZW5ndGgpfXM9Si5uZWVkc0NvbnRleHQudGVzdChlKT8wOnUubGVuZ3RoO3doaWxlKHMtLSl7aWYobD11W3NdLGkucmVsYXRpdmVbYz1sLnR5cGVdKWJyZWFrO2lmKChwPWkuZmluZFtjXSkmJihvPXAobC5tYXRjaGVzWzBdLnJlcGxhY2UobnQscnQpLFUudGVzdCh1WzBdLnR5cGUpJiZ0LnBhcmVudE5vZGV8fHQpKSl7aWYodS5zcGxpY2UocywxKSxlPW8ubGVuZ3RoJiZtdCh1KSwhZSlyZXR1cm4gTy5hcHBseShyLG8pLHI7YnJlYWt9fX1yZXR1cm4gYShlLGYpKG8sdCwhaCxyLFUudGVzdChlKSkscn1uLnNvcnRTdGFibGU9di5zcGxpdCgiIikuc29ydChTKS5qb2luKCIiKT09PXYsbi5kZXRlY3REdXBsaWNhdGVzPUUsYygpLG4uc29ydERldGFjaGVkPXV0KGZ1bmN0aW9uKGUpe3JldHVybiAxJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocC5jcmVhdGVFbGVtZW50KCJkaXYiKSl9KSx1dChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLCIjIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKX0pfHxsdCgidHlwZXxocmVmfGhlaWdodHx3aWR0aCIsZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuP3VuZGVmaW5lZDplLmdldEF0dHJpYnV0ZSh0LCJ0eXBlIj09PXQudG9Mb3dlckNhc2UoKT8xOjIpfSksbi5hdHRyaWJ1dGVzJiZ1dChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxpbnB1dC8+IixlLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIpLCIiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgidmFsdWUiKX0pfHxsdCgidmFsdWUiLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnx8ImlucHV0IiE9PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT91bmRlZmluZWQ6ZS5kZWZhdWx0VmFsdWV9KSx1dChmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIil9KXx8bHQoUixmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIG4/dW5kZWZpbmVkOihyPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJnIuc3BlY2lmaWVkP3IudmFsdWU6ZVt0XT09PSEwP3QudG9Mb3dlckNhc2UoKTpudWxsfSkseC5maW5kPW90LHguZXhwcj1vdC5zZWxlY3RvcnMseC5leHByWyI6Il09eC5leHByLnBzZXVkb3MseC51bmlxdWU9b3QudW5pcXVlU29ydCx4LnRleHQ9b3QuZ2V0VGV4dCx4LmlzWE1MRG9jPW90LmlzWE1MLHguY29udGFpbnM9b3QuY29udGFpbnN9KGUpO3ZhciBEPXt9O2Z1bmN0aW9uIEEoZSl7dmFyIHQ9RFtlXT17fTtyZXR1cm4geC5lYWNoKGUubWF0Y2godyl8fFtdLGZ1bmN0aW9uKGUsbil7dFtuXT0hMH0pLHR9eC5DYWxsYmFja3M9ZnVuY3Rpb24oZSl7ZT0ic3RyaW5nIj09dHlwZW9mIGU/RFtlXXx8QShlKTp4LmV4dGVuZCh7fSxlKTt2YXIgdCxuLHIsaSxvLHMsYT1bXSx1PSFlLm9uY2UmJltdLGw9ZnVuY3Rpb24ocCl7Zm9yKHQ9ZS5tZW1vcnkmJnAsbj0hMCxzPWl8fDAsaT0wLG89YS5sZW5ndGgscj0hMDthJiZvPnM7cysrKWlmKGFbc10uYXBwbHkocFswXSxwWzFdKT09PSExJiZlLnN0b3BPbkZhbHNlKXt0PSExO2JyZWFrfXI9ITEsYSYmKHU/dS5sZW5ndGgmJmwodS5zaGlmdCgpKTp0P2E9W106Yy5kaXNhYmxlKCkpfSxjPXthZGQ6ZnVuY3Rpb24oKXtpZihhKXt2YXIgbj1hLmxlbmd0aDsoZnVuY3Rpb24gcyh0KXt4LmVhY2godCxmdW5jdGlvbih0LG4pe3ZhciByPXgudHlwZShuKTsiZnVuY3Rpb24iPT09cj9lLnVuaXF1ZSYmYy5oYXMobil8fGEucHVzaChuKTpuJiZuLmxlbmd0aCYmInN0cmluZyIhPT1yJiZzKG4pfSl9KShhcmd1bWVudHMpLHI/bz1hLmxlbmd0aDp0JiYoaT1uLGwodCkpfXJldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gYSYmeC5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihlLHQpe3ZhciBuO3doaWxlKChuPXguaW5BcnJheSh0LGEsbikpPi0xKWEuc3BsaWNlKG4sMSksciYmKG8+PW4mJm8tLSxzPj1uJiZzLS0pfSksdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBlP3guaW5BcnJheShlLGEpPi0xOiEoIWF8fCFhLmxlbmd0aCl9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIGE9W10sbz0wLHRoaXN9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gYT11PXQ9dW5kZWZpbmVkLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWF9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdT11bmRlZmluZWQsdHx8Yy5kaXNhYmxlKCksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIXV9LGZpcmVXaXRoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIWF8fG4mJiF1fHwodD10fHxbXSx0PVtlLHQuc2xpY2U/dC5zbGljZSgpOnRdLHI/dS5wdXNoKHQpOmwodCkpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gYy5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIW59fTtyZXR1cm4gY30seC5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGUpe3ZhciB0PVtbInJlc29sdmUiLCJkb25lIix4LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVzb2x2ZWQiXSxbInJlamVjdCIsImZhaWwiLHguQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZWplY3RlZCJdLFsibm90aWZ5IiwicHJvZ3Jlc3MiLHguQ2FsbGJhY2tzKCJtZW1vcnkiKV1dLG49InBlbmRpbmciLHI9e3N0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG59LGFsd2F5czpmdW5jdGlvbigpe3JldHVybiBpLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFyZ3VtZW50cyksdGhpc30sdGhlbjpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cztyZXR1cm4geC5EZWZlcnJlZChmdW5jdGlvbihuKXt4LmVhY2godCxmdW5jdGlvbih0LG8pe3ZhciBzPW9bMF0sYT14LmlzRnVuY3Rpb24oZVt0XSkmJmVbdF07aVtvWzFdXShmdW5jdGlvbigpe3ZhciBlPWEmJmEuYXBwbHkodGhpcyxhcmd1bWVudHMpO2UmJnguaXNGdW5jdGlvbihlLnByb21pc2UpP2UucHJvbWlzZSgpLmRvbmUobi5yZXNvbHZlKS5mYWlsKG4ucmVqZWN0KS5wcm9ncmVzcyhuLm5vdGlmeSk6bltzKyJXaXRoIl0odGhpcz09PXI/bi5wcm9taXNlKCk6dGhpcyxhP1tlXTphcmd1bWVudHMpfSl9KSxlPW51bGx9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWU/eC5leHRlbmQoZSxyKTpyfX0saT17fTtyZXR1cm4gci5waXBlPXIudGhlbix4LmVhY2godCxmdW5jdGlvbihlLG8pe3ZhciBzPW9bMl0sYT1vWzNdO3Jbb1sxXV09cy5hZGQsYSYmcy5hZGQoZnVuY3Rpb24oKXtuPWF9LHRbMV5lXVsyXS5kaXNhYmxlLHRbMl1bMl0ubG9jayksaVtvWzBdXT1mdW5jdGlvbigpe3JldHVybiBpW29bMF0rIldpdGgiXSh0aGlzPT09aT9yOnRoaXMsYXJndW1lbnRzKSx0aGlzfSxpW29bMF0rIldpdGgiXT1zLmZpcmVXaXRofSksci5wcm9taXNlKGkpLGUmJmUuY2FsbChpLGkpLGl9LHdoZW46ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPWQuY2FsbChhcmd1bWVudHMpLHI9bi5sZW5ndGgsaT0xIT09cnx8ZSYmeC5pc0Z1bmN0aW9uKGUucHJvbWlzZSk/cjowLG89MT09PWk/ZTp4LkRlZmVycmVkKCkscz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3RbZV09dGhpcyxuW2VdPWFyZ3VtZW50cy5sZW5ndGg+MT9kLmNhbGwoYXJndW1lbnRzKTpyLG49PT1hP28ubm90aWZ5V2l0aCh0LG4pOi0taXx8by5yZXNvbHZlV2l0aCh0LG4pfX0sYSx1LGw7aWYocj4xKWZvcihhPUFycmF5KHIpLHU9QXJyYXkociksbD1BcnJheShyKTtyPnQ7dCsrKW5bdF0mJnguaXNGdW5jdGlvbihuW3RdLnByb21pc2UpP25bdF0ucHJvbWlzZSgpLmRvbmUocyh0LGwsbikpLmZhaWwoby5yZWplY3QpLnByb2dyZXNzKHModCx1LGEpKTotLWk7cmV0dXJuIGl8fG8ucmVzb2x2ZVdpdGgobCxuKSxvLnByb21pc2UoKX19KSx4LnN1cHBvcnQ9ZnVuY3Rpb24odCl7dmFyIG49by5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLHI9by5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaT1vLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHM9by5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSxhPXMuYXBwZW5kQ2hpbGQoby5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSk7cmV0dXJuIG4udHlwZT8obi50eXBlPSJjaGVja2JveCIsdC5jaGVja09uPSIiIT09bi52YWx1ZSx0Lm9wdFNlbGVjdGVkPWEuc2VsZWN0ZWQsdC5yZWxpYWJsZU1hcmdpblJpZ2h0PSEwLHQuYm94U2l6aW5nUmVsaWFibGU9ITAsdC5waXhlbFBvc2l0aW9uPSExLG4uY2hlY2tlZD0hMCx0Lm5vQ2xvbmVDaGVja2VkPW4uY2xvbmVOb2RlKCEwKS5jaGVja2VkLHMuZGlzYWJsZWQ9ITAsdC5vcHREaXNhYmxlZD0hYS5kaXNhYmxlZCxuPW8uY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxuLnZhbHVlPSJ0IixuLnR5cGU9InJhZGlvIix0LnJhZGlvVmFsdWU9InQiPT09bi52YWx1ZSxuLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsInQiKSxuLnNldEF0dHJpYnV0ZSgibmFtZSIsInQiKSxyLmFwcGVuZENoaWxkKG4pLHQuY2hlY2tDbG9uZT1yLmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCx0LmZvY3VzaW5CdWJibGVzPSJvbmZvY3VzaW4iaW4gZSxpLnN0eWxlLmJhY2tncm91bmRDbGlwPSJjb250ZW50LWJveCIsaS5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPSIiLHQuY2xlYXJDbG9uZVN0eWxlPSJjb250ZW50LWJveCI9PT1pLnN0eWxlLmJhY2tncm91bmRDbGlwLHgoZnVuY3Rpb24oKXt2YXIgbixyLHM9InBhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MDtkaXNwbGF5OmJsb2NrOy13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveCIsYT1vLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07YSYmKG49by5jcmVhdGVFbGVtZW50KCJkaXYiKSxuLnN0eWxlLmNzc1RleHQ9ImJvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDotOTk5OXB4O21hcmdpbi10b3A6MXB4IixhLmFwcGVuZENoaWxkKG4pLmFwcGVuZENoaWxkKGkpLGkuaW5uZXJIVE1MPSIiLGkuc3R5bGUuY3NzVGV4dD0iLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MXB4O2JvcmRlcjoxcHg7ZGlzcGxheTpibG9jazt3aWR0aDo0cHg7bWFyZ2luLXRvcDoxJTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MSUiLHguc3dhcChhLG51bGwhPWEuc3R5bGUuem9vbT97em9vbToxfTp7fSxmdW5jdGlvbigpe3QuYm94U2l6aW5nPTQ9PT1pLm9mZnNldFdpZHRofSksZS5nZXRDb21wdXRlZFN0eWxlJiYodC5waXhlbFBvc2l0aW9uPSIxJSIhPT0oZS5nZXRDb21wdXRlZFN0eWxlKGksbnVsbCl8fHt9KS50b3AsdC5ib3hTaXppbmdSZWxpYWJsZT0iNHB4Ij09PShlLmdldENvbXB1dGVkU3R5bGUoaSxudWxsKXx8e3dpZHRoOiI0cHgifSkud2lkdGgscj1pLmFwcGVuZENoaWxkKG8uY3JlYXRlRWxlbWVudCgiZGl2IikpLHIuc3R5bGUuY3NzVGV4dD1pLnN0eWxlLmNzc1RleHQ9cyxyLnN0eWxlLm1hcmdpblJpZ2h0PXIuc3R5bGUud2lkdGg9IjAiLGkuc3R5bGUud2lkdGg9IjFweCIsdC5yZWxpYWJsZU1hcmdpblJpZ2h0PSFwYXJzZUZsb2F0KChlLmdldENvbXB1dGVkU3R5bGUocixudWxsKXx8e30pLm1hcmdpblJpZ2h0KSksYS5yZW1vdmVDaGlsZChuKSl9KSx0KTp0fSh7fSk7dmFyIEwscSxIPS8oPzpce1tcc1xTXSpcfXxcW1tcc1xTXSpcXSkkLyxPPS8oW0EtWl0pL2c7ZnVuY3Rpb24gRigpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLmNhY2hlPXt9LDAse2dldDpmdW5jdGlvbigpe3JldHVybnt9fX0pLHRoaXMuZXhwYW5kbz14LmV4cGFuZG8rTWF0aC5yYW5kb20oKX1GLnVpZD0xLEYuYWNjZXB0cz1mdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlVHlwZT8xPT09ZS5ub2RlVHlwZXx8OT09PWUubm9kZVR5cGU6ITB9LEYucHJvdG90eXBlPXtrZXk6ZnVuY3Rpb24oZSl7aWYoIUYuYWNjZXB0cyhlKSlyZXR1cm4gMDt2YXIgdD17fSxuPWVbdGhpcy5leHBhbmRvXTtpZighbil7bj1GLnVpZCsrO3RyeXt0W3RoaXMuZXhwYW5kb109e3ZhbHVlOm59LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsdCl9Y2F0Y2gocil7dFt0aGlzLmV4cGFuZG9dPW4seC5leHRlbmQoZSx0KX19cmV0dXJuIHRoaXMuY2FjaGVbbl18fCh0aGlzLmNhY2hlW25dPXt9KSxufSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9dGhpcy5rZXkoZSksbz10aGlzLmNhY2hlW2ldO2lmKCJzdHJpbmciPT10eXBlb2YgdClvW3RdPW47ZWxzZSBpZih4LmlzRW1wdHlPYmplY3QobykpeC5leHRlbmQodGhpcy5jYWNoZVtpXSx0KTtlbHNlIGZvcihyIGluIHQpb1tyXT10W3JdO3JldHVybiBvfSxnZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNhY2hlW3RoaXMua2V5KGUpXTtyZXR1cm4gdD09PXVuZGVmaW5lZD9uOm5bdF19LGFjY2VzczpmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIHQ9PT11bmRlZmluZWR8fHQmJiJzdHJpbmciPT10eXBlb2YgdCYmbj09PXVuZGVmaW5lZD8ocj10aGlzLmdldChlLHQpLHIhPT11bmRlZmluZWQ/cjp0aGlzLmdldChlLHguY2FtZWxDYXNlKHQpKSk6KHRoaXMuc2V0KGUsdCxuKSxuIT09dW5kZWZpbmVkP246dCl9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvPXRoaXMua2V5KGUpLHM9dGhpcy5jYWNoZVtvXTtpZih0PT09dW5kZWZpbmVkKXRoaXMuY2FjaGVbb109e307ZWxzZXt4LmlzQXJyYXkodCk/cj10LmNvbmNhdCh0Lm1hcCh4LmNhbWVsQ2FzZSkpOihpPXguY2FtZWxDYXNlKHQpLHQgaW4gcz9yPVt0LGldOihyPWkscj1yIGluIHM/W3JdOnIubWF0Y2godyl8fFtdKSksbj1yLmxlbmd0aDt3aGlsZShuLS0pZGVsZXRlIHNbcltuXV19fSxoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiF4LmlzRW1wdHlPYmplY3QodGhpcy5jYWNoZVtlW3RoaXMuZXhwYW5kb11dfHx7fSl9LGRpc2NhcmQ6ZnVuY3Rpb24oZSl7ZVt0aGlzLmV4cGFuZG9dJiZkZWxldGUgdGhpcy5jYWNoZVtlW3RoaXMuZXhwYW5kb11dfX0sTD1uZXcgRixxPW5ldyBGLHguZXh0ZW5kKHthY2NlcHREYXRhOkYuYWNjZXB0cyxoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBMLmhhc0RhdGEoZSl8fHEuaGFzRGF0YShlKX0sZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEwuYWNjZXNzKGUsdCxuKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe0wucmVtb3ZlKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gcS5hY2Nlc3MoZSx0LG4pfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe3EucmVtb3ZlKGUsdCl9fSkseC5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9dGhpc1swXSxvPTAscz1udWxsO2lmKGU9PT11bmRlZmluZWQpe2lmKHRoaXMubGVuZ3RoJiYocz1MLmdldChpKSwxPT09aS5ub2RlVHlwZSYmIXEuZ2V0KGksImhhc0RhdGFBdHRycyIpKSl7Zm9yKG49aS5hdHRyaWJ1dGVzO24ubGVuZ3RoPm87bysrKXI9bltvXS5uYW1lLDA9PT1yLmluZGV4T2YoImRhdGEtIikmJihyPXguY2FtZWxDYXNlKHIuc2xpY2UoNSkpLFAoaSxyLHNbcl0pKTtxLnNldChpLCJoYXNEYXRhQXR0cnMiLCEwKX1yZXR1cm4gc31yZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGU/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7TC5zZXQodGhpcyxlKX0pOnguYWNjZXNzKHRoaXMsZnVuY3Rpb24odCl7dmFyIG4scj14LmNhbWVsQ2FzZShlKTtpZihpJiZ0PT09dW5kZWZpbmVkKXtpZihuPUwuZ2V0KGksZSksbiE9PXVuZGVmaW5lZClyZXR1cm4gbjtpZihuPUwuZ2V0KGksciksbiE9PXVuZGVmaW5lZClyZXR1cm4gbjtpZihuPVAoaSxyLHVuZGVmaW5lZCksbiE9PXVuZGVmaW5lZClyZXR1cm4gbn1lbHNlIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBuPUwuZ2V0KHRoaXMscik7TC5zZXQodGhpcyxyLHQpLC0xIT09ZS5pbmRleE9mKCItIikmJm4hPT11bmRlZmluZWQmJkwuc2V0KHRoaXMsZSx0KX0pfSxudWxsLHQsYXJndW1lbnRzLmxlbmd0aD4xLG51bGwsITApfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtMLnJlbW92ZSh0aGlzLGUpfSl9fSk7ZnVuY3Rpb24gUChlLHQsbil7dmFyIHI7aWYobj09PXVuZGVmaW5lZCYmMT09PWUubm9kZVR5cGUpaWYocj0iZGF0YS0iK3QucmVwbGFjZShPLCItJDEiKS50b0xvd2VyQ2FzZSgpLG49ZS5nZXRBdHRyaWJ1dGUociksInN0cmluZyI9PXR5cGVvZiBuKXt0cnl7bj0idHJ1ZSI9PT1uPyEwOiJmYWxzZSI9PT1uPyExOiJudWxsIj09PW4/bnVsbDorbisiIj09PW4/K246SC50ZXN0KG4pP0pTT04ucGFyc2Uobik6bn1jYXRjaChpKXt9TC5zZXQoZSx0LG4pfWVsc2Ugbj11bmRlZmluZWQ7cmV0dXJuIG59eC5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtyZXR1cm4gZT8odD0odHx8ImZ4IikrInF1ZXVlIixyPXEuZ2V0KGUsdCksbiYmKCFyfHx4LmlzQXJyYXkobik/cj1xLmFjY2VzcyhlLHQseC5tYWtlQXJyYXkobikpOnIucHVzaChuKSkscnx8W10pOnVuZGVmaW5lZH0sZGVxdWV1ZTpmdW5jdGlvbihlLHQpe3Q9dHx8ImZ4Ijt2YXIgbj14LnF1ZXVlKGUsdCkscj1uLmxlbmd0aCxpPW4uc2hpZnQoKSxvPXguX3F1ZXVlSG9va3MoZSx0KSxzPWZ1bmN0aW9uKCl7eC5kZXF1ZXVlKGUsdCkKK307ImlucHJvZ3Jlc3MiPT09aSYmKGk9bi5zaGlmdCgpLHItLSksaSYmKCJmeCI9PT10JiZuLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgby5zdG9wLGkuY2FsbChlLHMsbykpLCFyJiZvJiZvLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10KyJxdWV1ZUhvb2tzIjtyZXR1cm4gcS5nZXQoZSxuKXx8cS5hY2Nlc3MoZSxuLHtlbXB0eTp4LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtxLnJlbW92ZShlLFt0KyJxdWV1ZSIsbl0pfSl9KX19KSx4LmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgZSYmKHQ9ZSxlPSJmeCIsbi0tKSxuPmFyZ3VtZW50cy5sZW5ndGg/eC5xdWV1ZSh0aGlzWzBdLGUpOnQ9PT11bmRlZmluZWQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbj14LnF1ZXVlKHRoaXMsZSx0KTt4Ll9xdWV1ZUhvb2tzKHRoaXMsZSksImZ4Ij09PWUmJiJpbnByb2dyZXNzIiE9PW5bMF0mJnguZGVxdWV1ZSh0aGlzLGUpfSl9LGRlcXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3guZGVxdWV1ZSh0aGlzLGUpfSl9LGRlbGF5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9eC5meD94LmZ4LnNwZWVkc1tlXXx8ZTplLHQ9dHx8ImZ4Iix0aGlzLnF1ZXVlKHQsZnVuY3Rpb24odCxuKXt2YXIgcj1zZXRUaW1lb3V0KHQsZSk7bi5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHIpfX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnF1ZXVlKGV8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0xLGk9eC5EZWZlcnJlZCgpLG89dGhpcyxzPXRoaXMubGVuZ3RoLGE9ZnVuY3Rpb24oKXstLXJ8fGkucmVzb2x2ZVdpdGgobyxbb10pfTsic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT11bmRlZmluZWQpLGU9ZXx8ImZ4Ijt3aGlsZShzLS0pbj1xLmdldChvW3NdLGUrInF1ZXVlSG9va3MiKSxuJiZuLmVtcHR5JiYocisrLG4uZW1wdHkuYWRkKGEpKTtyZXR1cm4gYSgpLGkucHJvbWlzZSh0KX19KTt2YXIgUixNLFc9L1tcdFxyXG5cZl0vZywkPS9cci9nLEI9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaTt4LmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQpe3JldHVybiB4LmFjY2Vzcyh0aGlzLHguYXR0cixlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5yZW1vdmVBdHRyKHRoaXMsZSl9KX0scHJvcDpmdW5jdGlvbihlLHQpe3JldHVybiB4LmFjY2Vzcyh0aGlzLHgucHJvcCxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbeC5wcm9wRml4W2VdfHxlXX0pfSxhZGRDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHM9MCxhPXRoaXMubGVuZ3RoLHU9InN0cmluZyI9PXR5cGVvZiBlJiZlO2lmKHguaXNGdW5jdGlvbihlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3godGhpcykuYWRkQ2xhc3MoZS5jYWxsKHRoaXMsdCx0aGlzLmNsYXNzTmFtZSkpfSk7aWYodSlmb3IodD0oZXx8IiIpLm1hdGNoKHcpfHxbXTthPnM7cysrKWlmKG49dGhpc1tzXSxyPTE9PT1uLm5vZGVUeXBlJiYobi5jbGFzc05hbWU/KCIgIituLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoVywiICIpOiIgIikpe289MDt3aGlsZShpPXRbbysrXSkwPnIuaW5kZXhPZigiICIraSsiICIpJiYocis9aSsiICIpO24uY2xhc3NOYW1lPXgudHJpbShyKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxzPTAsYT10aGlzLmxlbmd0aCx1PTA9PT1hcmd1bWVudHMubGVuZ3RofHwic3RyaW5nIj09dHlwZW9mIGUmJmU7aWYoeC5pc0Z1bmN0aW9uKGUpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7eCh0aGlzKS5yZW1vdmVDbGFzcyhlLmNhbGwodGhpcyx0LHRoaXMuY2xhc3NOYW1lKSl9KTtpZih1KWZvcih0PShlfHwiIikubWF0Y2godyl8fFtdO2E+cztzKyspaWYobj10aGlzW3NdLHI9MT09PW4ubm9kZVR5cGUmJihuLmNsYXNzTmFtZT8oIiAiK24uY2xhc3NOYW1lKyIgIikucmVwbGFjZShXLCIgIik6IiIpKXtvPTA7d2hpbGUoaT10W28rK10pd2hpbGUoci5pbmRleE9mKCIgIitpKyIgIik+PTApcj1yLnJlcGxhY2UoIiAiK2krIiAiLCIgIik7bi5jbGFzc05hbWU9ZT94LnRyaW0ocik6IiJ9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dHlwZW9mIGU7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdCYmInN0cmluZyI9PT1uP3Q/dGhpcy5hZGRDbGFzcyhlKTp0aGlzLnJlbW92ZUNsYXNzKGUpOnguaXNGdW5jdGlvbihlKT90aGlzLmVhY2goZnVuY3Rpb24obil7eCh0aGlzKS50b2dnbGVDbGFzcyhlLmNhbGwodGhpcyxuLHRoaXMuY2xhc3NOYW1lLHQpLHQpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYoInN0cmluZyI9PT1uKXt2YXIgdCxpPTAsbz14KHRoaXMpLHM9ZS5tYXRjaCh3KXx8W107d2hpbGUodD1zW2krK10pby5oYXNDbGFzcyh0KT9vLnJlbW92ZUNsYXNzKHQpOm8uYWRkQ2xhc3ModCl9ZWxzZShuPT09cnx8ImJvb2xlYW4iPT09bikmJih0aGlzLmNsYXNzTmFtZSYmcS5zZXQodGhpcywiX19jbGFzc05hbWVfXyIsdGhpcy5jbGFzc05hbWUpLHRoaXMuY2xhc3NOYW1lPXRoaXMuY2xhc3NOYW1lfHxlPT09ITE/IiI6cS5nZXQodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIil9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQ9IiAiK2UrIiAiLG49MCxyPXRoaXMubGVuZ3RoO2Zvcig7cj5uO24rKylpZigxPT09dGhpc1tuXS5ub2RlVHlwZSYmKCIgIit0aGlzW25dLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoVywiICIpLmluZGV4T2YodCk+PTApcmV0dXJuITA7cmV0dXJuITF9LHZhbDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaT10aGlzWzBdO3tpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiByPXguaXNGdW5jdGlvbihlKSx0aGlzLmVhY2goZnVuY3Rpb24obil7dmFyIGk7MT09PXRoaXMubm9kZVR5cGUmJihpPXI/ZS5jYWxsKHRoaXMsbix4KHRoaXMpLnZhbCgpKTplLG51bGw9PWk/aT0iIjoibnVtYmVyIj09dHlwZW9mIGk/aSs9IiI6eC5pc0FycmF5KGkpJiYoaT14Lm1hcChpLGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOmUrIiJ9KSksdD14LnZhbEhvb2tzW3RoaXMudHlwZV18fHgudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSx0JiYic2V0ImluIHQmJnQuc2V0KHRoaXMsaSwidmFsdWUiKSE9PXVuZGVmaW5lZHx8KHRoaXMudmFsdWU9aSkpfSk7aWYoaSlyZXR1cm4gdD14LnZhbEhvb2tzW2kudHlwZV18fHgudmFsSG9va3NbaS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSx0JiYiZ2V0ImluIHQmJihuPXQuZ2V0KGksInZhbHVlIikpIT09dW5kZWZpbmVkP246KG49aS52YWx1ZSwic3RyaW5nIj09dHlwZW9mIG4/bi5yZXBsYWNlKCQsIiIpOm51bGw9PW4/IiI6bil9fX0pLHguZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hdHRyaWJ1dGVzLnZhbHVlO3JldHVybiF0fHx0LnNwZWNpZmllZD9lLnZhbHVlOmUudGV4dH19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scj1lLm9wdGlvbnMsaT1lLnNlbGVjdGVkSW5kZXgsbz0ic2VsZWN0LW9uZSI9PT1lLnR5cGV8fDA+aSxzPW8/bnVsbDpbXSxhPW8/aSsxOnIubGVuZ3RoLHU9MD5pP2E6bz9pOjA7Zm9yKDthPnU7dSsrKWlmKG49clt1XSwhKCFuLnNlbGVjdGVkJiZ1IT09aXx8KHguc3VwcG9ydC5vcHREaXNhYmxlZD9uLmRpc2FibGVkOm51bGwhPT1uLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKSl8fG4ucGFyZW50Tm9kZS5kaXNhYmxlZCYmeC5ub2RlTmFtZShuLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXtpZih0PXgobikudmFsKCksbylyZXR1cm4gdDtzLnB1c2godCl9cmV0dXJuIHN9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT1lLm9wdGlvbnMsbz14Lm1ha2VBcnJheSh0KSxzPWkubGVuZ3RoO3doaWxlKHMtLSlyPWlbc10sKHIuc2VsZWN0ZWQ9eC5pbkFycmF5KHgocikudmFsKCksbyk+PTApJiYobj0hMCk7cmV0dXJuIG58fChlLnNlbGVjdGVkSW5kZXg9LTEpLG99fX0sYXR0cjpmdW5jdGlvbihlLHQsbil7dmFyIGksbyxzPWUubm9kZVR5cGU7aWYoZSYmMyE9PXMmJjghPT1zJiYyIT09cylyZXR1cm4gdHlwZW9mIGUuZ2V0QXR0cmlidXRlPT09cj94LnByb3AoZSx0LG4pOigxPT09cyYmeC5pc1hNTERvYyhlKXx8KHQ9dC50b0xvd2VyQ2FzZSgpLGk9eC5hdHRySG9va3NbdF18fCh4LmV4cHIubWF0Y2guYm9vbC50ZXN0KHQpP006UikpLG49PT11bmRlZmluZWQ/aSYmImdldCJpbiBpJiZudWxsIT09KG89aS5nZXQoZSx0KSk/bzoobz14LmZpbmQuYXR0cihlLHQpLG51bGw9PW8/dW5kZWZpbmVkOm8pOm51bGwhPT1uP2kmJiJzZXQiaW4gaSYmKG89aS5zZXQoZSxuLHQpKSE9PXVuZGVmaW5lZD9vOihlLnNldEF0dHJpYnV0ZSh0LG4rIiIpLG4pOih4LnJlbW92ZUF0dHIoZSx0KSx1bmRlZmluZWQpKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT0wLG89dCYmdC5tYXRjaCh3KTtpZihvJiYxPT09ZS5ub2RlVHlwZSl3aGlsZShuPW9baSsrXSlyPXgucHJvcEZpeFtuXXx8bix4LmV4cHIubWF0Y2guYm9vbC50ZXN0KG4pJiYoZVtyXT0hMSksZS5yZW1vdmVBdHRyaWJ1dGUobil9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGUsdCl7aWYoIXguc3VwcG9ydC5yYWRpb1ZhbHVlJiYicmFkaW8iPT09dCYmeC5ub2RlTmFtZShlLCJpbnB1dCIpKXt2YXIgbj1lLnZhbHVlO3JldHVybiBlLnNldEF0dHJpYnV0ZSgidHlwZSIsdCksbiYmKGUudmFsdWU9biksdH19fX0scHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9LHByb3A6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxzPWUubm9kZVR5cGU7aWYoZSYmMyE9PXMmJjghPT1zJiYyIT09cylyZXR1cm4gbz0xIT09c3x8IXguaXNYTUxEb2MoZSksbyYmKHQ9eC5wcm9wRml4W3RdfHx0LGk9eC5wcm9wSG9va3NbdF0pLG4hPT11bmRlZmluZWQ/aSYmInNldCJpbiBpJiYocj1pLnNldChlLG4sdCkpIT09dW5kZWZpbmVkP3I6ZVt0XT1uOmkmJiJnZXQiaW4gaSYmbnVsbCE9PShyPWkuZ2V0KGUsdCkpP3I6ZVt0XX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGUpe3JldHVybiBlLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKXx8Qi50ZXN0KGUubm9kZU5hbWUpfHxlLmhyZWY/ZS50YWJJbmRleDotMX19fX0pLE09e3NldDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9PT0hMT94LnJlbW92ZUF0dHIoZSxuKTplLnNldEF0dHJpYnV0ZShuLG4pLG59fSx4LmVhY2goeC5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKC9cdysvZyksZnVuY3Rpb24oZSx0KXt2YXIgbj14LmV4cHIuYXR0ckhhbmRsZVt0XXx8eC5maW5kLmF0dHI7eC5leHByLmF0dHJIYW5kbGVbdF09ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPXguZXhwci5hdHRySGFuZGxlW3RdLG89cj91bmRlZmluZWQ6KHguZXhwci5hdHRySGFuZGxlW3RdPXVuZGVmaW5lZCkhPW4oZSx0LHIpP3QudG9Mb3dlckNhc2UoKTpudWxsO3JldHVybiB4LmV4cHIuYXR0ckhhbmRsZVt0XT1pLG99fSkseC5zdXBwb3J0Lm9wdFNlbGVjdGVkfHwoeC5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJnQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsbnVsbH19KSx4LmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe3gucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSx4LmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXt4LnZhbEhvb2tzW3RoaXNdPXtzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geC5pc0FycmF5KHQpP2UuY2hlY2tlZD14LmluQXJyYXkoeChlKS52YWwoKSx0KT49MDp1bmRlZmluZWR9fSx4LnN1cHBvcnQuY2hlY2tPbnx8KHgudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjplLnZhbHVlfSl9KTt2YXIgST0vXmtleS8sej0vXig/Om1vdXNlfGNvbnRleHRtZW51KXxjbGljay8sXz0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sWD0vXihbXi5dKikoPzpcLiguKyl8KSQvO2Z1bmN0aW9uIFUoKXtyZXR1cm4hMH1mdW5jdGlvbiBZKCl7cmV0dXJuITF9ZnVuY3Rpb24gVigpe3RyeXtyZXR1cm4gby5hY3RpdmVFbGVtZW50fWNhdGNoKGUpe319eC5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbihlLHQsbixpLG8pe3ZhciBzLGEsdSxsLGMscCxmLGgsZCxnLG0seT1xLmdldChlKTtpZih5KXtuLmhhbmRsZXImJihzPW4sbj1zLmhhbmRsZXIsbz1zLnNlbGVjdG9yKSxuLmd1aWR8fChuLmd1aWQ9eC5ndWlkKyspLChsPXkuZXZlbnRzKXx8KGw9eS5ldmVudHM9e30pLChhPXkuaGFuZGxlKXx8KGE9eS5oYW5kbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiB4PT09cnx8ZSYmeC5ldmVudC50cmlnZ2VyZWQ9PT1lLnR5cGU/dW5kZWZpbmVkOnguZXZlbnQuZGlzcGF0Y2guYXBwbHkoYS5lbGVtLGFyZ3VtZW50cyl9LGEuZWxlbT1lKSx0PSh0fHwiIikubWF0Y2godyl8fFsiIl0sYz10Lmxlbmd0aDt3aGlsZShjLS0pdT1YLmV4ZWModFtjXSl8fFtdLGQ9bT11WzFdLGc9KHVbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkJiYoZj14LmV2ZW50LnNwZWNpYWxbZF18fHt9LGQ9KG8/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlwZSl8fGQsZj14LmV2ZW50LnNwZWNpYWxbZF18fHt9LHA9eC5leHRlbmQoe3R5cGU6ZCxvcmlnVHlwZTptLGRhdGE6aSxoYW5kbGVyOm4sZ3VpZDpuLmd1aWQsc2VsZWN0b3I6byxuZWVkc0NvbnRleHQ6byYmeC5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KG8pLG5hbWVzcGFjZTpnLmpvaW4oIi4iKX0scyksKGg9bFtkXSl8fChoPWxbZF09W10saC5kZWxlZ2F0ZUNvdW50PTAsZi5zZXR1cCYmZi5zZXR1cC5jYWxsKGUsaSxnLGEpIT09ITF8fGUuYWRkRXZlbnRMaXN0ZW5lciYmZS5hZGRFdmVudExpc3RlbmVyKGQsYSwhMSkpLGYuYWRkJiYoZi5hZGQuY2FsbChlLHApLHAuaGFuZGxlci5ndWlkfHwocC5oYW5kbGVyLmd1aWQ9bi5ndWlkKSksbz9oLnNwbGljZShoLmRlbGVnYXRlQ291bnQrKywwLHApOmgucHVzaChwKSx4LmV2ZW50Lmdsb2JhbFtkXT0hMCk7ZT1udWxsfX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG8scyxhLHUsbCxjLHAsZixoLGQsZyxtPXEuaGFzRGF0YShlKSYmcS5nZXQoZSk7aWYobSYmKHU9bS5ldmVudHMpKXt0PSh0fHwiIikubWF0Y2godyl8fFsiIl0sbD10Lmxlbmd0aDt3aGlsZShsLS0paWYoYT1YLmV4ZWModFtsXSl8fFtdLGg9Zz1hWzFdLGQ9KGFbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxoKXtwPXguZXZlbnQuc3BlY2lhbFtoXXx8e30saD0ocj9wLmRlbGVnYXRlVHlwZTpwLmJpbmRUeXBlKXx8aCxmPXVbaF18fFtdLGE9YVsyXSYmUmVnRXhwKCIoXnxcXC4pIitkLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpLHM9bz1mLmxlbmd0aDt3aGlsZShvLS0pYz1mW29dLCFpJiZnIT09Yy5vcmlnVHlwZXx8biYmbi5ndWlkIT09Yy5ndWlkfHxhJiYhYS50ZXN0KGMubmFtZXNwYWNlKXx8ciYmciE9PWMuc2VsZWN0b3ImJigiKioiIT09cnx8IWMuc2VsZWN0b3IpfHwoZi5zcGxpY2UobywxKSxjLnNlbGVjdG9yJiZmLmRlbGVnYXRlQ291bnQtLSxwLnJlbW92ZSYmcC5yZW1vdmUuY2FsbChlLGMpKTtzJiYhZi5sZW5ndGgmJihwLnRlYXJkb3duJiZwLnRlYXJkb3duLmNhbGwoZSxkLG0uaGFuZGxlKSE9PSExfHx4LnJlbW92ZUV2ZW50KGUsaCxtLmhhbmRsZSksZGVsZXRlIHVbaF0pfWVsc2UgZm9yKGggaW4gdSl4LmV2ZW50LnJlbW92ZShlLGgrdFtsXSxuLHIsITApO3guaXNFbXB0eU9iamVjdCh1KSYmKGRlbGV0ZSBtLmhhbmRsZSxxLnJlbW92ZShlLCJldmVudHMiKSl9fSx0cmlnZ2VyOmZ1bmN0aW9uKHQsbixyLGkpe3ZhciBzLGEsdSxsLGMscCxmLGg9W3J8fG9dLGQ9eS5jYWxsKHQsInR5cGUiKT90LnR5cGU6dCxnPXkuY2FsbCh0LCJuYW1lc3BhY2UiKT90Lm5hbWVzcGFjZS5zcGxpdCgiLiIpOltdO2lmKGE9dT1yPXJ8fG8sMyE9PXIubm9kZVR5cGUmJjghPT1yLm5vZGVUeXBlJiYhXy50ZXN0KGQreC5ldmVudC50cmlnZ2VyZWQpJiYoZC5pbmRleE9mKCIuIik+PTAmJihnPWQuc3BsaXQoIi4iKSxkPWcuc2hpZnQoKSxnLnNvcnQoKSksYz0wPmQuaW5kZXhPZigiOiIpJiYib24iK2QsdD10W3guZXhwYW5kb10/dDpuZXcgeC5FdmVudChkLCJvYmplY3QiPT10eXBlb2YgdCYmdCksdC5pc1RyaWdnZXI9aT8yOjMsdC5uYW1lc3BhY2U9Zy5qb2luKCIuIiksdC5uYW1lc3BhY2VfcmU9dC5uYW1lc3BhY2U/UmVnRXhwKCIoXnxcXC4pIitnLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsdC5yZXN1bHQ9dW5kZWZpbmVkLHQudGFyZ2V0fHwodC50YXJnZXQ9ciksbj1udWxsPT1uP1t0XTp4Lm1ha2VBcnJheShuLFt0XSksZj14LmV2ZW50LnNwZWNpYWxbZF18fHt9LGl8fCFmLnRyaWdnZXJ8fGYudHJpZ2dlci5hcHBseShyLG4pIT09ITEpKXtpZighaSYmIWYubm9CdWJibGUmJiF4LmlzV2luZG93KHIpKXtmb3IobD1mLmRlbGVnYXRlVHlwZXx8ZCxfLnRlc3QobCtkKXx8KGE9YS5wYXJlbnROb2RlKTthO2E9YS5wYXJlbnROb2RlKWgucHVzaChhKSx1PWE7dT09PShyLm93bmVyRG9jdW1lbnR8fG8pJiZoLnB1c2godS5kZWZhdWx0Vmlld3x8dS5wYXJlbnRXaW5kb3d8fGUpfXM9MDt3aGlsZSgoYT1oW3MrK10pJiYhdC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXQudHlwZT1zPjE/bDpmLmJpbmRUeXBlfHxkLHA9KHEuZ2V0KGEsImV2ZW50cyIpfHx7fSlbdC50eXBlXSYmcS5nZXQoYSwiaGFuZGxlIikscCYmcC5hcHBseShhLG4pLHA9YyYmYVtjXSxwJiZ4LmFjY2VwdERhdGEoYSkmJnAuYXBwbHkmJnAuYXBwbHkoYSxuKT09PSExJiZ0LnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIHQudHlwZT1kLGl8fHQuaXNEZWZhdWx0UHJldmVudGVkKCl8fGYuX2RlZmF1bHQmJmYuX2RlZmF1bHQuYXBwbHkoaC5wb3AoKSxuKSE9PSExfHwheC5hY2NlcHREYXRhKHIpfHxjJiZ4LmlzRnVuY3Rpb24ocltkXSkmJiF4LmlzV2luZG93KHIpJiYodT1yW2NdLHUmJihyW2NdPW51bGwpLHguZXZlbnQudHJpZ2dlcmVkPWQscltkXSgpLHguZXZlbnQudHJpZ2dlcmVkPXVuZGVmaW5lZCx1JiYocltjXT11KSksdC5yZXN1bHR9fSxkaXNwYXRjaDpmdW5jdGlvbihlKXtlPXguZXZlbnQuZml4KGUpO3ZhciB0LG4scixpLG8scz1bXSxhPWQuY2FsbChhcmd1bWVudHMpLHU9KHEuZ2V0KHRoaXMsImV2ZW50cyIpfHx7fSlbZS50eXBlXXx8W10sbD14LmV2ZW50LnNwZWNpYWxbZS50eXBlXXx8e307aWYoYVswXT1lLGUuZGVsZWdhdGVUYXJnZXQ9dGhpcywhbC5wcmVEaXNwYXRjaHx8bC5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsZSkhPT0hMSl7cz14LmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcyxlLHUpLHQ9MDt3aGlsZSgoaT1zW3QrK10pJiYhZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXtlLmN1cnJlbnRUYXJnZXQ9aS5lbGVtLG49MDt3aGlsZSgobz1pLmhhbmRsZXJzW24rK10pJiYhZS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKSghZS5uYW1lc3BhY2VfcmV8fGUubmFtZXNwYWNlX3JlLnRlc3Qoby5uYW1lc3BhY2UpKSYmKGUuaGFuZGxlT2JqPW8sZS5kYXRhPW8uZGF0YSxyPSgoeC5ldmVudC5zcGVjaWFsW28ub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxvLmhhbmRsZXIpLmFwcGx5KGkuZWxlbSxhKSxyIT09dW5kZWZpbmVkJiYoZS5yZXN1bHQ9cik9PT0hMSYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGwucG9zdERpc3BhdGNoJiZsLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsZSksZS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLHM9W10sYT10LmRlbGVnYXRlQ291bnQsdT1lLnRhcmdldDtpZihhJiZ1Lm5vZGVUeXBlJiYoIWUuYnV0dG9ufHwiY2xpY2siIT09ZS50eXBlKSlmb3IoO3UhPT10aGlzO3U9dS5wYXJlbnROb2RlfHx0aGlzKWlmKHUuZGlzYWJsZWQhPT0hMHx8ImNsaWNrIiE9PWUudHlwZSl7Zm9yKHI9W10sbj0wO2E+bjtuKyspbz10W25dLGk9by5zZWxlY3RvcisiICIscltpXT09PXVuZGVmaW5lZCYmKHJbaV09by5uZWVkc0NvbnRleHQ/eChpLHRoaXMpLmluZGV4KHUpPj0wOnguZmluZChpLHRoaXMsbnVsbCxbdV0pLmxlbmd0aCkscltpXSYmci5wdXNoKG8pO3IubGVuZ3RoJiZzLnB1c2goe2VsZW06dSxoYW5kbGVyczpyfSl9cmV0dXJuIHQubGVuZ3RoPmEmJnMucHVzaCh7ZWxlbTp0aGlzLGhhbmRsZXJzOnQuc2xpY2UoYSl9KSxzfSxwcm9wczoiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLGZpeEhvb2tzOnt9LGtleUhvb2tzOntwcm9wczoiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZS53aGljaCYmKGUud2hpY2g9bnVsbCE9dC5jaGFyQ29kZT90LmNoYXJDb2RlOnQua2V5Q29kZSksZX19LG1vdXNlSG9va3M6e3Byb3BzOiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLHM9dC5idXR0b247cmV0dXJuIG51bGw9PWUucGFnZVgmJm51bGwhPXQuY2xpZW50WCYmKG49ZS50YXJnZXQub3duZXJEb2N1bWVudHx8byxyPW4uZG9jdW1lbnRFbGVtZW50LGk9bi5ib2R5LGUucGFnZVg9dC5jbGllbnRYKyhyJiZyLnNjcm9sbExlZnR8fGkmJmkuc2Nyb2xsTGVmdHx8MCktKHImJnIuY2xpZW50TGVmdHx8aSYmaS5jbGllbnRMZWZ0fHwwKSxlLnBhZ2VZPXQuY2xpZW50WSsociYmci5zY3JvbGxUb3B8fGkmJmkuc2Nyb2xsVG9wfHwwKS0ociYmci5jbGllbnRUb3B8fGkmJmkuY2xpZW50VG9wfHwwKSksZS53aGljaHx8cz09PXVuZGVmaW5lZHx8KGUud2hpY2g9MSZzPzE6MiZzPzM6NCZzPzI6MCksZX19LGZpeDpmdW5jdGlvbihlKXtpZihlW3guZXhwYW5kb10pcmV0dXJuIGU7dmFyIHQsbixyLGk9ZS50eXBlLHM9ZSxhPXRoaXMuZml4SG9va3NbaV07YXx8KHRoaXMuZml4SG9va3NbaV09YT16LnRlc3QoaSk/dGhpcy5tb3VzZUhvb2tzOkkudGVzdChpKT90aGlzLmtleUhvb2tzOnt9KSxyPWEucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoYS5wcm9wcyk6dGhpcy5wcm9wcyxlPW5ldyB4LkV2ZW50KHMpLHQ9ci5sZW5ndGg7d2hpbGUodC0tKW49clt0XSxlW25dPXNbbl07cmV0dXJuIGUudGFyZ2V0fHwoZS50YXJnZXQ9byksMz09PWUudGFyZ2V0Lm5vZGVUeXBlJiYoZS50YXJnZXQ9ZS50YXJnZXQucGFyZW50Tm9kZSksYS5maWx0ZXI/YS5maWx0ZXIoZSxzKTplfSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcyE9PVYoKSYmdGhpcy5mb2N1cz8odGhpcy5mb2N1cygpLCExKTp1bmRlZmluZWR9LGRlbGVnYXRlVHlwZToiZm9jdXNpbiJ9LGJsdXI6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09PVYoKSYmdGhpcy5ibHVyPyh0aGlzLmJsdXIoKSwhMSk6dW5kZWZpbmVkfSxkZWxlZ2F0ZVR5cGU6ImZvY3Vzb3V0In0sY2xpY2s6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4iY2hlY2tib3giPT09dGhpcy50eXBlJiZ0aGlzLmNsaWNrJiZ4Lm5vZGVOYW1lKHRoaXMsImlucHV0Iik/KHRoaXMuY2xpY2soKSwhMSk6dW5kZWZpbmVkfSxfZGVmYXVsdDpmdW5jdGlvbihlKXtyZXR1cm4geC5ub2RlTmFtZShlLnRhcmdldCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7ZS5yZXN1bHQhPT11bmRlZmluZWQmJihlLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9ZS5yZXN1bHQpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXguZXh0ZW5kKG5ldyB4LkV2ZW50LG4se3R5cGU6ZSxpc1NpbXVsYXRlZDohMCxvcmlnaW5hbEV2ZW50Ont9fSk7cj94LmV2ZW50LnRyaWdnZXIoaSxudWxsLHQpOnguZXZlbnQuZGlzcGF0Y2guY2FsbCh0LGkpLGkuaXNEZWZhdWx0UHJldmVudGVkKCkmJm4ucHJldmVudERlZmF1bHQoKX19LHgucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbiwhMSl9LHguRXZlbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHguRXZlbnQ/KGUmJmUudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWUsdGhpcy50eXBlPWUudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1lLmRlZmF1bHRQcmV2ZW50ZWR8fGUuZ2V0UHJldmVudERlZmF1bHQmJmUuZ2V0UHJldmVudERlZmF1bHQoKT9VOlkpOnRoaXMudHlwZT1lLHQmJnguZXh0ZW5kKHRoaXMsdCksdGhpcy50aW1lU3RhbXA9ZSYmZS50aW1lU3RhbXB8fHgubm93KCksdGhpc1t4LmV4cGFuZG9dPSEwLHVuZGVmaW5lZCk6bmV3IHguRXZlbnQoZSx0KX0seC5FdmVudC5wcm90b3R5cGU9e2lzRGVmYXVsdFByZXZlbnRlZDpZLGlzUHJvcGFnYXRpb25TdG9wcGVkOlksaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6WSxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1VLGUmJmUucHJldmVudERlZmF1bHQmJmUucHJldmVudERlZmF1bHQoKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9VSxlJiZlLnN0b3BQcm9wYWdhdGlvbiYmZS5zdG9wUHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1VLHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9fSx4LmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSxmdW5jdGlvbihlLHQpe3guZXZlbnQuc3BlY2lhbFtlXT17ZGVsZWdhdGVUeXBlOnQsYmluZFR5cGU6dCxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIG4scj10aGlzLGk9ZS5yZWxhdGVkVGFyZ2V0LG89ZS5oYW5kbGVPYmo7cmV0dXJuKCFpfHxpIT09ciYmIXguY29udGFpbnMocixpKSkmJihlLnR5cGU9by5vcmlnVHlwZSxuPW8uaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS50eXBlPXQpLG59fX0pLHguc3VwcG9ydC5mb2N1c2luQnViYmxlc3x8eC5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihlLHQpe3ZhciBuPTAscj1mdW5jdGlvbihlKXt4LmV2ZW50LnNpbXVsYXRlKHQsZS50YXJnZXQseC5ldmVudC5maXgoZSksITApfTt4LmV2ZW50LnNwZWNpYWxbdF09e3NldHVwOmZ1bmN0aW9uKCl7MD09PW4rKyYmby5hZGRFdmVudExpc3RlbmVyKGUsciwhMCl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7MD09PS0tbiYmby5yZW1vdmVFdmVudExpc3RlbmVyKGUsciwhMCl9fX0pLHguZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvLHM7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXsic3RyaW5nIiE9dHlwZW9mIHQmJihuPW58fHQsdD11bmRlZmluZWQpO2ZvcihzIGluIGUpdGhpcy5vbihzLHQsbixlW3NdLGkpO3JldHVybiB0aGlzfWlmKG51bGw9PW4mJm51bGw9PXI/KHI9dCxuPXQ9dW5kZWZpbmVkKTpudWxsPT1yJiYoInN0cmluZyI9PXR5cGVvZiB0PyhyPW4sbj11bmRlZmluZWQpOihyPW4sbj10LHQ9dW5kZWZpbmVkKSkscj09PSExKXI9WTtlbHNlIGlmKCFyKXJldHVybiB0aGlzO3JldHVybiAxPT09aSYmKG89cixyPWZ1bmN0aW9uKGUpe3JldHVybiB4KCkub2ZmKGUpLG8uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxyLmd1aWQ9by5ndWlkfHwoby5ndWlkPXguZ3VpZCsrKSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5ldmVudC5hZGQodGhpcyxlLHIsbix0KX0pfSxvbmU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24oZSx0LG4sciwxKX0sb2ZmOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpO2lmKGUmJmUucHJldmVudERlZmF1bHQmJmUuaGFuZGxlT2JqKXJldHVybiByPWUuaGFuZGxlT2JqLHgoZS5kZWxlZ2F0ZVRhcmdldCkub2ZmKHIubmFtZXNwYWNlP3Iub3JpZ1R5cGUrIi4iK3IubmFtZXNwYWNlOnIub3JpZ1R5cGUsci5zZWxlY3RvcixyLmhhbmRsZXIpLHRoaXM7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtmb3IoaSBpbiBlKXRoaXMub2ZmKGksdCxlW2ldKTtyZXR1cm4gdGhpc31yZXR1cm4odD09PSExfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkmJihuPXQsdD11bmRlZmluZWQpLG49PT0hMSYmKG49WSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5ldmVudC5yZW1vdmUodGhpcyxlLG4sdCl9KX0sdHJpZ2dlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt4LmV2ZW50LnRyaWdnZXIoZSx0LHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpc1swXTtyZXR1cm4gbj94LmV2ZW50LnRyaWdnZXIoZSx0LG4sITApOnVuZGVmaW5lZH19KTt2YXIgRz0vXi5bXjojXFtcLixdKiQvLEo9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sUT14LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LEs9e2NoaWxkcmVuOiEwLGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH07eC5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXSxyPXRoaXMsaT1yLmxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIHRoaXMucHVzaFN0YWNrKHgoZSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHQ9MDtpPnQ7dCsrKWlmKHguY29udGFpbnMoclt0XSx0aGlzKSlyZXR1cm4hMH0pKTtmb3IodD0wO2k+dDt0KyspeC5maW5kKGUsclt0XSxuKTtyZXR1cm4gbj10aGlzLnB1c2hTdGFjayhpPjE/eC51bmlxdWUobik6biksbi5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yP3RoaXMuc2VsZWN0b3IrIiAiK2U6ZSxufSxoYXM6ZnVuY3Rpb24oZSl7dmFyIHQ9eChlLHRoaXMpLG49dC5sZW5ndGg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9MDtmb3IoO24+ZTtlKyspaWYoeC5jb250YWlucyh0aGlzLHRbZV0pKXJldHVybiEwfSl9LG5vdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZXQodGhpcyxlfHxbXSwhMCkpfSxmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGV0KHRoaXMsZXx8W10sITEpKX0saXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFldCh0aGlzLCJzdHJpbmciPT10eXBlb2YgZSYmUS50ZXN0KGUpP3goZSk6ZXx8W10sITEpLmxlbmd0aH0sY2xvc2VzdDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXRoaXMubGVuZ3RoLG89W10scz1RLnRlc3QoZSl8fCJzdHJpbmciIT10eXBlb2YgZT94KGUsdHx8dGhpcy5jb250ZXh0KTowO2Zvcig7aT5yO3IrKylmb3Iobj10aGlzW3JdO24mJm4hPT10O249bi5wYXJlbnROb2RlKWlmKDExPm4ubm9kZVR5cGUmJihzP3MuaW5kZXgobik+LTE6MT09PW4ubm9kZVR5cGUmJnguZmluZC5tYXRjaGVzU2VsZWN0b3IobixlKSkpe249by5wdXNoKG4pO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjayhvLmxlbmd0aD4xP3gudW5pcXVlKG8pOm8pfSxpbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gZT8ic3RyaW5nIj09dHlwZW9mIGU/Zy5jYWxsKHgoZSksdGhpc1swXSk6Zy5jYWxsKHRoaXMsZS5qcXVlcnk/ZVswXTplKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihlLHQpe3ZhciBuPSJzdHJpbmciPT10eXBlb2YgZT94KGUsdCk6eC5tYWtlQXJyYXkoZSYmZS5ub2RlVHlwZT9bZV06ZSkscj14Lm1lcmdlKHRoaXMuZ2V0KCksbik7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgudW5pcXVlKHIpKX0sYWRkQmFjazpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9fSk7ZnVuY3Rpb24gWihlLHQpe3doaWxlKChlPWVbdF0pJiYxIT09ZS5ub2RlVHlwZSk7cmV0dXJuIGV9eC5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiYxMSE9PXQubm9kZVR5cGU/dDpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiB4LmRpcihlLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHguZGlyKGUsInBhcmVudE5vZGUiLG4pfSxuZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBaKGUsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oZSl7cmV0dXJuIFooZSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHguZGlyKGUsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHguZGlyKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB4LmRpcihlLCJuZXh0U2libGluZyIsbil9LHByZXZVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHguZGlyKGUsInByZXZpb3VzU2libGluZyIsbil9LHNpYmxpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiB4LnNpYmxpbmcoKGUucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsZSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGUpe3JldHVybiB4LnNpYmxpbmcoZS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29udGVudERvY3VtZW50fHx4Lm1lcmdlKFtdLGUuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihlLHQpe3guZm5bZV09ZnVuY3Rpb24obixyKXt2YXIgaT14Lm1hcCh0aGlzLHQsbik7cmV0dXJuIlVudGlsIiE9PWUuc2xpY2UoLTUpJiYocj1uKSxyJiYic3RyaW5nIj09dHlwZW9mIHImJihpPXguZmlsdGVyKHIsaSkpLHRoaXMubGVuZ3RoPjEmJihLW2VdfHx4LnVuaXF1ZShpKSxKLnRlc3QoZSkmJmkucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhpKX19KSx4LmV4dGVuZCh7ZmlsdGVyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10WzBdO3JldHVybiBuJiYoZT0iOm5vdCgiK2UrIikiKSwxPT09dC5sZW5ndGgmJjE9PT1yLm5vZGVUeXBlP3guZmluZC5tYXRjaGVzU2VsZWN0b3IocixlKT9bcl06W106eC5maW5kLm1hdGNoZXMoZSx4LmdyZXAodCxmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV9KSl9LGRpcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9W10saT1uIT09dW5kZWZpbmVkO3doaWxlKChlPWVbdF0pJiY5IT09ZS5ub2RlVHlwZSlpZigxPT09ZS5ub2RlVHlwZSl7aWYoaSYmeChlKS5pcyhuKSlicmVhaztyLnB1c2goZSl9cmV0dXJuIHJ9LHNpYmxpbmc6ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtmb3IoO2U7ZT1lLm5leHRTaWJsaW5nKTE9PT1lLm5vZGVUeXBlJiZlIT09dCYmbi5wdXNoKGUpO3JldHVybiBufX0pO2Z1bmN0aW9uIGV0KGUsdCxuKXtpZih4LmlzRnVuY3Rpb24odCkpcmV0dXJuIHguZ3JlcChlLGZ1bmN0aW9uKGUscil7cmV0dXJuISF0LmNhbGwoZSxyLGUpIT09bn0pO2lmKHQubm9kZVR5cGUpcmV0dXJuIHguZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dCE9PW59KTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKEcudGVzdCh0KSlyZXR1cm4geC5maWx0ZXIodCxlLG4pO3Q9eC5maWx0ZXIodCxlKX1yZXR1cm4geC5ncmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGcuY2FsbCh0LGUpPj0wIT09bn0pfXZhciB0dD0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2dpLG50PS88KFtcdzpdKykvLHJ0PS88fCYjP1x3KzsvLGl0PS88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksb3Q9L14oPzpjaGVja2JveHxyYWRpbykkL2ksc3Q9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksYXQ9L14kfFwvKD86amF2YXxlY21hKXNjcmlwdC9pLHV0PS9edHJ1ZVwvKC4qKS8sbHQ9L15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nLGN0PXtvcHRpb246WzEsIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCI8L3NlbGVjdD4iXSx0aGVhZDpbMSwiPHRhYmxlPiIsIjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSx0cjpbMiwiPHRhYmxlPjx0Ym9keT4iLCI8L3Rib2R5PjwvdGFibGU+Il0sdGQ6WzMsIjx0YWJsZT48dGJvZHk+PHRyPiIsIjwvdHI+PC90Ym9keT48L3RhYmxlPiJdLF9kZWZhdWx0OlswLCIiLCIiXX07Y3Qub3B0Z3JvdXA9Y3Qub3B0aW9uLGN0LnRib2R5PWN0LnRmb290PWN0LmNvbGdyb3VwPWN0LmNhcHRpb249Y3QudGhlYWQsY3QudGg9Y3QudGQseC5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHguYWNjZXNzKHRoaXMsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT11bmRlZmluZWQ/eC50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5hcHBlbmQoKHRoaXNbMF0mJnRoaXNbMF0ub3duZXJEb2N1bWVudHx8bykuY3JlYXRlVGV4dE5vZGUoZSkpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIHQ9cHQodGhpcyxlKTt0LmFwcGVuZENoaWxkKGUpfX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgdD1wdCh0aGlzLGUpO3QuaW5zZXJ0QmVmb3JlKGUsdC5maXJzdENoaWxkKX19KX0sYmVmb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMpfSl9LGFmdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpfSl9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9ZT94LmZpbHRlcihlLHRoaXMpOnRoaXMsaT0wO2Zvcig7bnVsbCE9KG49cltpXSk7aSsrKXR8fDEhPT1uLm5vZGVUeXBlfHx4LmNsZWFuRGF0YShtdChuKSksbi5wYXJlbnROb2RlJiYodCYmeC5jb250YWlucyhuLm93bmVyRG9jdW1lbnQsbikmJmR0KG10KG4sInNjcmlwdCIpKSxuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobikpO3JldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigpe3ZhciBlLHQ9MDtmb3IoO251bGwhPShlPXRoaXNbdF0pO3QrKykxPT09ZS5ub2RlVHlwZSYmKHguY2xlYW5EYXRhKG10KGUsITEpKSxlLnRleHRDb250ZW50PSIiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1udWxsPT1lPyExOmUsdD1udWxsPT10P2U6dCx0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiB4LmNsb25lKHRoaXMsZSx0KX0pfSxodG1sOmZ1bmN0aW9uKGUpe3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbMF18fHt9LG49MCxyPXRoaXMubGVuZ3RoO2lmKGU9PT11bmRlZmluZWQmJjE9PT10Lm5vZGVUeXBlKXJldHVybiB0LmlubmVySFRNTDtpZigic3RyaW5nIj09dHlwZW9mIGUmJiFpdC50ZXN0KGUpJiYhY3RbKG50LmV4ZWMoZSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKXtlPWUucmVwbGFjZSh0dCwiPCQxPjwvJDI+Iik7dHJ5e2Zvcig7cj5uO24rKyl0PXRoaXNbbl18fHt9LDE9PT10Lm5vZGVUeXBlJiYoeC5jbGVhbkRhdGEobXQodCwhMSkpLHQuaW5uZXJIVE1MPWUpO3Q9MH1jYXRjaChpKXt9fXQmJnRoaXMuZW1wdHkoKS5hcHBlbmQoZSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIgZT14Lm1hcCh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybltlLm5leHRTaWJsaW5nLGUucGFyZW50Tm9kZV19KSx0PTA7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKG4pe3ZhciByPWVbdCsrXSxpPWVbdCsrXTtpJiYociYmci5wYXJlbnROb2RlIT09aSYmKHI9dGhpcy5uZXh0U2libGluZykseCh0aGlzKS5yZW1vdmUoKSxpLmluc2VydEJlZm9yZShuLHIpKX0sITApLHQ/dGhpczp0aGlzLnJlbW92ZSgpfSxkZXRhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVtb3ZlKGUsITApfSxkb21NYW5pcDpmdW5jdGlvbihlLHQsbil7ZT1mLmFwcGx5KFtdLGUpO3ZhciByLGksbyxzLGEsdSxsPTAsYz10aGlzLmxlbmd0aCxwPXRoaXMsaD1jLTEsZD1lWzBdLGc9eC5pc0Z1bmN0aW9uKGQpO2lmKGd8fCEoMT49Y3x8InN0cmluZyIhPXR5cGVvZiBkfHx4LnN1cHBvcnQuY2hlY2tDbG9uZSkmJnN0LnRlc3QoZCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihyKXt2YXIgaT1wLmVxKHIpO2cmJihlWzBdPWQuY2FsbCh0aGlzLHIsaS5odG1sKCkpKSxpLmRvbU1hbmlwKGUsdCxuKX0pO2lmKGMmJihyPXguYnVpbGRGcmFnbWVudChlLHRoaXNbMF0ub3duZXJEb2N1bWVudCwhMSwhbiYmdGhpcyksaT1yLmZpcnN0Q2hpbGQsMT09PXIuY2hpbGROb2Rlcy5sZW5ndGgmJihyPWkpLGkpKXtmb3Iobz14Lm1hcChtdChyLCJzY3JpcHQiKSxmdCkscz1vLmxlbmd0aDtjPmw7bCsrKWE9cixsIT09aCYmKGE9eC5jbG9uZShhLCEwLCEwKSxzJiZ4Lm1lcmdlKG8sbXQoYSwic2NyaXB0IikpKSx0LmNhbGwodGhpc1tsXSxhLGwpO2lmKHMpZm9yKHU9b1tvLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LHgubWFwKG8saHQpLGw9MDtzPmw7bCsrKWE9b1tsXSxhdC50ZXN0KGEudHlwZXx8IiIpJiYhcS5hY2Nlc3MoYSwiZ2xvYmFsRXZhbCIpJiZ4LmNvbnRhaW5zKHUsYSkmJihhLnNyYz94Ll9ldmFsVXJsKGEuc3JjKTp4Lmdsb2JhbEV2YWwoYS50ZXh0Q29udGVudC5yZXBsYWNlKGx0LCIiKSkpfXJldHVybiB0aGlzfX0pLHguZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGUsdCl7eC5mbltlXT1mdW5jdGlvbihlKXt2YXIgbixyPVtdLGk9eChlKSxvPWkubGVuZ3RoLTEscz0wO2Zvcig7bz49cztzKyspbj1zPT09bz90aGlzOnRoaXMuY2xvbmUoITApLHgoaVtzXSlbdF0obiksaC5hcHBseShyLG4uZ2V0KCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhyKX19KSx4LmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxzLGE9ZS5jbG9uZU5vZGUoITApLHU9eC5jb250YWlucyhlLm93bmVyRG9jdW1lbnQsZSk7aWYoISh4LnN1cHBvcnQubm9DbG9uZUNoZWNrZWR8fDEhPT1lLm5vZGVUeXBlJiYxMSE9PWUubm9kZVR5cGV8fHguaXNYTUxEb2MoZSkpKWZvcihzPW10KGEpLG89bXQoZSkscj0wLGk9by5sZW5ndGg7aT5yO3IrKyl5dChvW3JdLHNbcl0pO2lmKHQpaWYobilmb3Iobz1vfHxtdChlKSxzPXN8fG10KGEpLHI9MCxpPW8ubGVuZ3RoO2k+cjtyKyspZ3Qob1tyXSxzW3JdKTtlbHNlIGd0KGUsYSk7cmV0dXJuIHM9bXQoYSwic2NyaXB0Iikscy5sZW5ndGg+MCYmZHQocywhdSYmbXQoZSwic2NyaXB0IikpLGF9LGJ1aWxkRnJhZ21lbnQ6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxzLGEsdSxsLGM9MCxwPWUubGVuZ3RoLGY9dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1bXTtmb3IoO3A+YztjKyspaWYoaT1lW2NdLGl8fDA9PT1pKWlmKCJvYmplY3QiPT09eC50eXBlKGkpKXgubWVyZ2UoaCxpLm5vZGVUeXBlP1tpXTppKTtlbHNlIGlmKHJ0LnRlc3QoaSkpe289b3x8Zi5hcHBlbmRDaGlsZCh0LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxzPShudC5leGVjKGkpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLGE9Y3Rbc118fGN0Ll9kZWZhdWx0LG8uaW5uZXJIVE1MPWFbMV0raS5yZXBsYWNlKHR0LCI8JDE+PC8kMj4iKSthWzJdLGw9YVswXTt3aGlsZShsLS0pbz1vLmxhc3RDaGlsZDt4Lm1lcmdlKGgsby5jaGlsZE5vZGVzKSxvPWYuZmlyc3RDaGlsZCxvLnRleHRDb250ZW50PSIifWVsc2UgaC5wdXNoKHQuY3JlYXRlVGV4dE5vZGUoaSkpO2YudGV4dENvbnRlbnQ9IiIsYz0wO3doaWxlKGk9aFtjKytdKWlmKCghcnx8LTE9PT14LmluQXJyYXkoaSxyKSkmJih1PXguY29udGFpbnMoaS5vd25lckRvY3VtZW50LGkpLG89bXQoZi5hcHBlbmRDaGlsZChpKSwic2NyaXB0IiksdSYmZHQobyksbikpe2w9MDt3aGlsZShpPW9bbCsrXSlhdC50ZXN0KGkudHlwZXx8IiIpJiZuLnB1c2goaSl9cmV0dXJuIGZ9LGNsZWFuRGF0YTpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHMsYT14LmV2ZW50LnNwZWNpYWwsdT0wO2Zvcig7KG49ZVt1XSkhPT11bmRlZmluZWQ7dSsrKXtpZihGLmFjY2VwdHMobikmJihvPW5bcS5leHBhbmRvXSxvJiYodD1xLmNhY2hlW29dKSkpe2lmKHI9T2JqZWN0LmtleXModC5ldmVudHN8fHt9KSxyLmxlbmd0aClmb3Iocz0wOyhpPXJbc10pIT09dW5kZWZpbmVkO3MrKylhW2ldP3guZXZlbnQucmVtb3ZlKG4saSk6eC5yZW1vdmVFdmVudChuLGksdC5oYW5kbGUpO3EuY2FjaGVbb10mJmRlbGV0ZSBxLmNhY2hlW29dfWRlbGV0ZSBMLmNhY2hlW25bTC5leHBhbmRvXV19fSxfZXZhbFVybDpmdW5jdGlvbihlKXtyZXR1cm4geC5hamF4KHt1cmw6ZSx0eXBlOiJHRVQiLGRhdGFUeXBlOiJzY3JpcHQiLGFzeW5jOiExLGdsb2JhbDohMSwidGhyb3dzIjohMH0pfX0pO2Z1bmN0aW9uIHB0KGUsdCl7cmV0dXJuIHgubm9kZU5hbWUoZSwidGFibGUiKSYmeC5ub2RlTmFtZSgxPT09dC5ub2RlVHlwZT90OnQuZmlyc3RDaGlsZCwidHIiKT9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpWzBdfHxlLmFwcGVuZENoaWxkKGUub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpKTplfWZ1bmN0aW9uIGZ0KGUpe3JldHVybiBlLnR5cGU9KG51bGwhPT1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKSsiLyIrZS50eXBlLGV9ZnVuY3Rpb24gaHQoZSl7dmFyIHQ9dXQuZXhlYyhlLnR5cGUpO3JldHVybiB0P2UudHlwZT10WzFdOmUucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksZX1mdW5jdGlvbiBkdChlLHQpe3ZhciBuPWUubGVuZ3RoLHI9MDtmb3IoO24+cjtyKyspcS5zZXQoZVtyXSwiZ2xvYmFsRXZhbCIsIXR8fHEuZ2V0KHRbcl0sImdsb2JhbEV2YWwiKSl9ZnVuY3Rpb24gZ3QoZSx0KXt2YXIgbixyLGksbyxzLGEsdSxsO2lmKDE9PT10Lm5vZGVUeXBlKXtpZihxLmhhc0RhdGEoZSkmJihvPXEuYWNjZXNzKGUpLHM9cS5zZXQodCxvKSxsPW8uZXZlbnRzKSl7ZGVsZXRlIHMuaGFuZGxlLHMuZXZlbnRzPXt9O2ZvcihpIGluIGwpZm9yKG49MCxyPWxbaV0ubGVuZ3RoO3I+bjtuKyspeC5ldmVudC5hZGQodCxpLGxbaV1bbl0pfUwuaGFzRGF0YShlKSYmKGE9TC5hY2Nlc3MoZSksdT14LmV4dGVuZCh7fSxhKSxMLnNldCh0LHUpKX19ZnVuY3Rpb24gbXQoZSx0KXt2YXIgbj1lLmdldEVsZW1lbnRzQnlUYWdOYW1lP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUodHx8IioiKTplLnF1ZXJ5U2VsZWN0b3JBbGw/ZS5xdWVyeVNlbGVjdG9yQWxsKHR8fCIqIik6W107cmV0dXJuIHQ9PT11bmRlZmluZWR8fHQmJngubm9kZU5hbWUoZSx0KT94Lm1lcmdlKFtlXSxuKTpufWZ1bmN0aW9uIHl0KGUsdCl7dmFyIG49dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyJpbnB1dCI9PT1uJiZvdC50ZXN0KGUudHlwZSk/dC5jaGVja2VkPWUuY2hlY2tlZDooImlucHV0Ij09PW58fCJ0ZXh0YXJlYSI9PT1uKSYmKHQuZGVmYXVsdFZhbHVlPWUuZGVmYXVsdFZhbHVlKX14LmZuLmV4dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4geC5pc0Z1bmN0aW9uKGUpP3RoaXMuZWFjaChmdW5jdGlvbih0KXt4KHRoaXMpLndyYXBBbGwoZS5jYWxsKHRoaXMsdCkpfSk6KHRoaXNbMF0mJih0PXgoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSx0aGlzWzBdLnBhcmVudE5vZGUmJnQuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLHQubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpczt3aGlsZShlLmZpcnN0RWxlbWVudENoaWxkKWU9ZS5maXJzdEVsZW1lbnRDaGlsZDtyZXR1cm4gZX0pLmFwcGVuZCh0aGlzKSksdGhpcyl9LHdyYXBJbm5lcjpmdW5jdGlvbihlKXtyZXR1cm4geC5pc0Z1bmN0aW9uKGUpP3RoaXMuZWFjaChmdW5jdGlvbih0KXt4KHRoaXMpLndyYXBJbm5lcihlLmNhbGwodGhpcyx0KSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD14KHRoaXMpLG49dC5jb250ZW50cygpO24ubGVuZ3RoP24ud3JhcEFsbChlKTp0LmFwcGVuZChlKX0pfSx3cmFwOmZ1bmN0aW9uKGUpe3ZhciB0PXguaXNGdW5jdGlvbihlKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3godGhpcykud3JhcEFsbCh0P2UuY2FsbCh0aGlzLG4pOmUpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKXt4Lm5vZGVOYW1lKHRoaXMsImJvZHkiKXx8eCh0aGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpfSkuZW5kKCl9fSk7dmFyIHZ0LHh0LGJ0PS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyx3dD0vXm1hcmdpbi8sVHQ9UmVnRXhwKCJeKCIrYisiKSguKikkIiwiaSIpLEN0PVJlZ0V4cCgiXigiK2IrIikoPyFweClbYS16JV0rJCIsImkiKSxrdD1SZWdFeHAoIl4oWystXSk9KCIrYisiKSIsImkiKSxOdD17Qk9EWToiYmxvY2sifSxFdD17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sU3Q9e2xldHRlclNwYWNpbmc6MCxmb250V2VpZ2h0OjQwMH0sanQ9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxEdD1bIldlYmtpdCIsIk8iLCJNb3oiLCJtcyJdO2Z1bmN0aW9uIEF0KGUsdCl7aWYodCBpbiBlKXJldHVybiB0O3ZhciBuPXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKSxyPXQsaT1EdC5sZW5ndGg7d2hpbGUoaS0tKWlmKHQ9RHRbaV0rbix0IGluIGUpcmV0dXJuIHQ7cmV0dXJuIHJ9ZnVuY3Rpb24gTHQoZSx0KXtyZXR1cm4gZT10fHxlLCJub25lIj09PXguY3NzKGUsImRpc3BsYXkiKXx8IXguY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfWZ1bmN0aW9uIHF0KHQpe3JldHVybiBlLmdldENvbXB1dGVkU3R5bGUodCxudWxsKX1mdW5jdGlvbiBIdChlLHQpe3ZhciBuLHIsaSxvPVtdLHM9MCxhPWUubGVuZ3RoO2Zvcig7YT5zO3MrKylyPWVbc10sci5zdHlsZSYmKG9bc109cS5nZXQociwib2xkZGlzcGxheSIpLG49ci5zdHlsZS5kaXNwbGF5LHQ/KG9bc118fCJub25lIiE9PW58fChyLnN0eWxlLmRpc3BsYXk9IiIpLCIiPT09ci5zdHlsZS5kaXNwbGF5JiZMdChyKSYmKG9bc109cS5hY2Nlc3Mociwib2xkZGlzcGxheSIsUnQoci5ub2RlTmFtZSkpKSk6b1tzXXx8KGk9THQociksKG4mJiJub25lIiE9PW58fCFpKSYmcS5zZXQociwib2xkZGlzcGxheSIsaT9uOnguY3NzKHIsImRpc3BsYXkiKSkpKTtmb3Iocz0wO2E+cztzKyspcj1lW3NdLHIuc3R5bGUmJih0JiYibm9uZSIhPT1yLnN0eWxlLmRpc3BsYXkmJiIiIT09ci5zdHlsZS5kaXNwbGF5fHwoci5zdHlsZS5kaXNwbGF5PXQ/b1tzXXx8IiI6Im5vbmUiKSk7cmV0dXJuIGV9eC5mbi5leHRlbmQoe2NzczpmdW5jdGlvbihlLHQpe3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89e30scz0wO2lmKHguaXNBcnJheSh0KSl7Zm9yKHI9cXQoZSksaT10Lmxlbmd0aDtpPnM7cysrKW9bdFtzXV09eC5jc3MoZSx0W3NdLCExLHIpO3JldHVybiBvfXJldHVybiBuIT09dW5kZWZpbmVkP3guc3R5bGUoZSx0LG4pOnguY3NzKGUsdCl9LGUsdCxhcmd1bWVudHMubGVuZ3RoPjEpfSxzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIEh0KHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIEh0KHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZT9lP3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe0x0KHRoaXMpP3godGhpcykuc2hvdygpOngodGhpcykuaGlkZSgpfSl9fSkseC5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oZSx0KXtpZih0KXt2YXIgbj12dChlLCJvcGFjaXR5Iik7cmV0dXJuIiI9PT1uPyIxIjpufX19fSxjc3NOdW1iZXI6e2NvbHVtbkNvdW50OiEwLGZpbGxPcGFjaXR5OiEwLGZvbnRXZWlnaHQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7ImZsb2F0IjoiY3NzRmxvYXQifSxzdHlsZTpmdW5jdGlvbihlLHQsbixyKXtpZihlJiYzIT09ZS5ub2RlVHlwZSYmOCE9PWUubm9kZVR5cGUmJmUuc3R5bGUpe3ZhciBpLG8scyxhPXguY2FtZWxDYXNlKHQpLHU9ZS5zdHlsZTtyZXR1cm4gdD14LmNzc1Byb3BzW2FdfHwoeC5jc3NQcm9wc1thXT1BdCh1LGEpKSxzPXguY3NzSG9va3NbdF18fHguY3NzSG9va3NbYV0sbj09PXVuZGVmaW5lZD9zJiYiZ2V0ImluIHMmJihpPXMuZ2V0KGUsITEscikpIT09dW5kZWZpbmVkP2k6dVt0XToobz10eXBlb2Ygbiwic3RyaW5nIj09PW8mJihpPWt0LmV4ZWMobikpJiYobj0oaVsxXSsxKSppWzJdK3BhcnNlRmxvYXQoeC5jc3MoZSx0KSksbz0ibnVtYmVyIiksbnVsbD09bnx8Im51bWJlciI9PT1vJiZpc05hTihuKXx8KCJudW1iZXIiIT09b3x8eC5jc3NOdW1iZXJbYV18fChuKz0icHgiKSx4LnN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlfHwiIiE9PW58fDAhPT10LmluZGV4T2YoImJhY2tncm91bmQiKXx8KHVbdF09ImluaGVyaXQiKSxzJiYic2V0ImluIHMmJihuPXMuc2V0KGUsbixyKSk9PT11bmRlZmluZWR8fCh1W3RdPW4pKSx1bmRlZmluZWQpfX0sY3NzOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8scyxhPXguY2FtZWxDYXNlKHQpO3JldHVybiB0PXguY3NzUHJvcHNbYV18fCh4LmNzc1Byb3BzW2FdPUF0KGUuc3R5bGUsYSkpLHM9eC5jc3NIb29rc1t0XXx8eC5jc3NIb29rc1thXSxzJiYiZ2V0ImluIHMmJihpPXMuZ2V0KGUsITAsbikpLGk9PT11bmRlZmluZWQmJihpPXZ0KGUsdCxyKSksIm5vcm1hbCI9PT1pJiZ0IGluIFN0JiYoaT1TdFt0XSksIiI9PT1ufHxuPyhvPXBhcnNlRmxvYXQoaSksbj09PSEwfHx4LmlzTnVtZXJpYyhvKT9vfHwwOmkpOml9fSksdnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxzPW58fHF0KGUpLGE9cz9zLmdldFByb3BlcnR5VmFsdWUodCl8fHNbdF06dW5kZWZpbmVkLHU9ZS5zdHlsZTtyZXR1cm4gcyYmKCIiIT09YXx8eC5jb250YWlucyhlLm93bmVyRG9jdW1lbnQsZSl8fChhPXguc3R5bGUoZSx0KSksQ3QudGVzdChhKSYmd3QudGVzdCh0KSYmKHI9dS53aWR0aCxpPXUubWluV2lkdGgsbz11Lm1heFdpZHRoLHUubWluV2lkdGg9dS5tYXhXaWR0aD11LndpZHRoPWEsYT1zLndpZHRoLHUud2lkdGg9cix1Lm1pbldpZHRoPWksdS5tYXhXaWR0aD1vKSksYX07ZnVuY3Rpb24gT3QoZSx0LG4pe3ZhciByPVR0LmV4ZWModCk7cmV0dXJuIHI/TWF0aC5tYXgoMCxyWzFdLShufHwwKSkrKHJbMl18fCJweCIpOnR9ZnVuY3Rpb24gRnQoZSx0LG4scixpKXt2YXIgbz1uPT09KHI/ImJvcmRlciI6ImNvbnRlbnQiKT80OiJ3aWR0aCI9PT10PzE6MCxzPTA7Zm9yKDs0Pm87bys9MikibWFyZ2luIj09PW4mJihzKz14LmNzcyhlLG4ranRbb10sITAsaSkpLHI/KCJjb250ZW50Ij09PW4mJihzLT14LmNzcyhlLCJwYWRkaW5nIitqdFtvXSwhMCxpKSksIm1hcmdpbiIhPT1uJiYocy09eC5jc3MoZSwiYm9yZGVyIitqdFtvXSsiV2lkdGgiLCEwLGkpKSk6KHMrPXguY3NzKGUsInBhZGRpbmciK2p0W29dLCEwLGkpLCJwYWRkaW5nIiE9PW4mJihzKz14LmNzcyhlLCJib3JkZXIiK2p0W29dKyJXaWR0aCIsITAsaSkpKTtyZXR1cm4gc31mdW5jdGlvbiBQdChlLHQsbil7dmFyIHI9ITAsaT0id2lkdGgiPT09dD9lLm9mZnNldFdpZHRoOmUub2Zmc2V0SGVpZ2h0LG89cXQoZSkscz14LnN1cHBvcnQuYm94U2l6aW5nJiYiYm9yZGVyLWJveCI9PT14LmNzcyhlLCJib3hTaXppbmciLCExLG8pO2lmKDA+PWl8fG51bGw9PWkpe2lmKGk9dnQoZSx0LG8pLCgwPml8fG51bGw9PWkpJiYoaT1lLnN0eWxlW3RdKSxDdC50ZXN0KGkpKXJldHVybiBpO3I9cyYmKHguc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZXx8aT09PWUuc3R5bGVbdF0pLGk9cGFyc2VGbG9hdChpKXx8MH1yZXR1cm4gaStGdChlLHQsbnx8KHM/ImJvcmRlciI6ImNvbnRlbnQiKSxyLG8pKyJweCJ9ZnVuY3Rpb24gUnQoZSl7dmFyIHQ9byxuPU50W2VdO3JldHVybiBufHwobj1NdChlLHQpLCJub25lIiE9PW4mJm58fCh4dD0oeHR8fHgoIjxpZnJhbWUgZnJhbWVib3JkZXI9JzAnIHdpZHRoPScwJyBoZWlnaHQ9JzAnLz4iKS5jc3MoImNzc1RleHQiLCJkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnQiKSkuYXBwZW5kVG8odC5kb2N1bWVudEVsZW1lbnQpLHQ9KHh0WzBdLmNvbnRlbnRXaW5kb3d8fHh0WzBdLmNvbnRlbnREb2N1bWVudCkuZG9jdW1lbnQsdC53cml0ZSgiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGJvZHk+IiksdC5jbG9zZSgpLG49TXQoZSx0KSx4dC5kZXRhY2goKSksTnRbZV09biksbn1mdW5jdGlvbiBNdChlLHQpe3ZhciBuPXgodC5jcmVhdGVFbGVtZW50KGUpKS5hcHBlbmRUbyh0LmJvZHkpLHI9eC5jc3MoblswXSwiZGlzcGxheSIpO3JldHVybiBuLnJlbW92ZSgpLHJ9eC5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihlLHQpe3guY3NzSG9va3NbdF09e2dldDpmdW5jdGlvbihlLG4scil7cmV0dXJuIG4/MD09PWUub2Zmc2V0V2lkdGgmJmJ0LnRlc3QoeC5jc3MoZSwiZGlzcGxheSIpKT94LnN3YXAoZSxFdCxmdW5jdGlvbigpe3JldHVybiBQdChlLHQscil9KTpQdChlLHQscik6dW5kZWZpbmVkfSxzZXQ6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpPXImJnF0KGUpO3JldHVybiBPdChlLG4scj9GdChlLHQscix4LnN1cHBvcnQuYm94U2l6aW5nJiYiYm9yZGVyLWJveCI9PT14LmNzcyhlLCJib3hTaXppbmciLCExLGkpLGkpOjApfX19KSx4KGZ1bmN0aW9uKCl7eC5zdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHR8fCh4LmNzc0hvb2tzLm1hcmdpblJpZ2h0PXtnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD94LnN3YXAoZSx7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0sdnQsW2UsIm1hcmdpblJpZ2h0Il0pOnVuZGVmaW5lZH19KSwheC5zdXBwb3J0LnBpeGVsUG9zaXRpb24mJnguZm4ucG9zaXRpb24mJnguZWFjaChbInRvcCIsImxlZnQiXSxmdW5jdGlvbihlLHQpe3guY3NzSG9va3NbdF09e2dldDpmdW5jdGlvbihlLG4pe3JldHVybiBuPyhuPXZ0KGUsdCksQ3QudGVzdChuKT94KGUpLnBvc2l0aW9uKClbdF0rInB4IjpuKTp1bmRlZmluZWR9fX0pfSkseC5leHByJiZ4LmV4cHIuZmlsdGVycyYmKHguZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4gMD49ZS5vZmZzZXRXaWR0aCYmMD49ZS5vZmZzZXRIZWlnaHR9LHguZXhwci5maWx0ZXJzLnZpc2libGU9ZnVuY3Rpb24oZSl7cmV0dXJuIXguZXhwci5maWx0ZXJzLmhpZGRlbihlKX0pLHguZWFjaCh7bWFyZ2luOiIiLHBhZGRpbmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGUsdCl7eC5jc3NIb29rc1tlK3RdPXtleHBhbmQ6ZnVuY3Rpb24obil7dmFyIHI9MCxpPXt9LG89InN0cmluZyI9PXR5cGVvZiBuP24uc3BsaXQoIiAiKTpbbl07Zm9yKDs0PnI7cisrKWlbZStqdFtyXSt0XT1vW3JdfHxvW3ItMl18fG9bMF07cmV0dXJuIGl9fSx3dC50ZXN0KGUpfHwoeC5jc3NIb29rc1tlK3RdLnNldD1PdCl9KTt2YXIgV3Q9LyUyMC9nLCR0PS9cW1xdJC8sQnQ9L1xyP1xuL2csSXQ9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLHp0PS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTt4LmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHgucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT14LnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gZT94Lm1ha2VBcnJheShlKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiF4KHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmenQudGVzdCh0aGlzLm5vZGVOYW1lKSYmIUl0LnRlc3QoZSkmJih0aGlzLmNoZWNrZWR8fCFvdC50ZXN0KGUpKX0pLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuPXgodGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDp4LmlzQXJyYXkobik/eC5tYXAobixmdW5jdGlvbihlKXtyZXR1cm57bmFtZTp0Lm5hbWUsdmFsdWU6ZS5yZXBsYWNlKEJ0LCJcclxuIil9fSk6e25hbWU6dC5uYW1lLHZhbHVlOm4ucmVwbGFjZShCdCwiXHJcbiIpfX0pLmdldCgpfX0pLHgucGFyYW09ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9ZnVuY3Rpb24oZSx0KXt0PXguaXNGdW5jdGlvbih0KT90KCk6bnVsbD09dD8iIjp0LHJbci5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChlKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpfTtpZih0PT09dW5kZWZpbmVkJiYodD14LmFqYXhTZXR0aW5ncyYmeC5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpLHguaXNBcnJheShlKXx8ZS5qcXVlcnkmJiF4LmlzUGxhaW5PYmplY3QoZSkpeC5lYWNoKGUsZnVuY3Rpb24oKXtpKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKG4gaW4gZSlfdChuLGVbbl0sdCxpKTtyZXR1cm4gci5qb2luKCImIikucmVwbGFjZShXdCwiKyIpfTtmdW5jdGlvbiBfdChlLHQsbixyKXt2YXIgaTtpZih4LmlzQXJyYXkodCkpeC5lYWNoKHQsZnVuY3Rpb24odCxpKXtufHwkdC50ZXN0KGUpP3IoZSxpKTpfdChlKyJbIisoIm9iamVjdCI9PXR5cGVvZiBpP3Q6IiIpKyJdIixpLG4scil9KTtlbHNlIGlmKG58fCJvYmplY3QiIT09eC50eXBlKHQpKXIoZSx0KTtlbHNlIGZvcihpIGluIHQpX3QoZSsiWyIraSsiXSIsdFtpXSxuLHIpfXguZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe3guZm5bdF09ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMub24odCxudWxsLGUsbik6dGhpcy50cmlnZ2VyKHQpfX0pLHguZm4uZXh0ZW5kKHtob3ZlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoZSkubW91c2VsZWF2ZSh0fHxlKX0sYmluZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMub24oZSxudWxsLHQsbil9LHVuYmluZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm9mZihlLG51bGwsdCkKK30sZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24odCxlLG4scil9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLm9mZihlLCIqKiIpOnRoaXMub2ZmKHQsZXx8IioqIixuKX19KTt2YXIgWHQsVXQsWXQ9eC5ub3coKSxWdD0vXD8vLEd0PS8jLiokLyxKdD0vKFs/Jl0pXz1bXiZdKi8sUXQ9L14oLio/KTpbIFx0XSooW15cclxuXSopJC9nbSxLdD0vXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxadD0vXig/OkdFVHxIRUFEKSQvLGVuPS9eXC9cLy8sdG49L14oW1x3ListXSs6KSg/OlwvXC8oW15cLz8jOl0qKSg/OjooXGQrKXwpfCkvLG5uPXguZm4ubG9hZCxybj17fSxvbj17fSxzbj0iKi8iLmNvbmNhdCgiKiIpO3RyeXtVdD1pLmhyZWZ9Y2F0Y2goYW4pe1V0PW8uY3JlYXRlRWxlbWVudCgiYSIpLFV0LmhyZWY9IiIsVXQ9VXQuaHJlZn1YdD10bi5leGVjKFV0LnRvTG93ZXJDYXNlKCkpfHxbXTtmdW5jdGlvbiB1bihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXsic3RyaW5nIiE9dHlwZW9mIHQmJihuPXQsdD0iKiIpO3ZhciByLGk9MCxvPXQudG9Mb3dlckNhc2UoKS5tYXRjaCh3KXx8W107aWYoeC5pc0Z1bmN0aW9uKG4pKXdoaWxlKHI9b1tpKytdKSIrIj09PXJbMF0/KHI9ci5zbGljZSgxKXx8IioiLChlW3JdPWVbcl18fFtdKS51bnNoaWZ0KG4pKTooZVtyXT1lW3JdfHxbXSkucHVzaChuKX19ZnVuY3Rpb24gbG4oZSx0LG4scil7dmFyIGk9e30sbz1lPT09b247ZnVuY3Rpb24gcyhhKXt2YXIgdTtyZXR1cm4gaVthXT0hMCx4LmVhY2goZVthXXx8W10sZnVuY3Rpb24oZSxhKXt2YXIgbD1hKHQsbixyKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGx8fG98fGlbbF0/bz8hKHU9bCk6dW5kZWZpbmVkOih0LmRhdGFUeXBlcy51bnNoaWZ0KGwpLHMobCksITEpfSksdX1yZXR1cm4gcyh0LmRhdGFUeXBlc1swXSl8fCFpWyIqIl0mJnMoIioiKX1mdW5jdGlvbiBjbihlLHQpe3ZhciBuLHIsaT14LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKG4gaW4gdCl0W25dIT09dW5kZWZpbmVkJiYoKGlbbl0/ZTpyfHwocj17fSkpW25dPXRbbl0pO3JldHVybiByJiZ4LmV4dGVuZCghMCxlLHIpLGV9eC5mbi5sb2FkPWZ1bmN0aW9uKGUsdCxuKXtpZigic3RyaW5nIiE9dHlwZW9mIGUmJm5uKXJldHVybiBubi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIHIsaSxvLHM9dGhpcyxhPWUuaW5kZXhPZigiICIpO3JldHVybiBhPj0wJiYocj1lLnNsaWNlKGEpLGU9ZS5zbGljZSgwLGEpKSx4LmlzRnVuY3Rpb24odCk/KG49dCx0PXVuZGVmaW5lZCk6dCYmIm9iamVjdCI9PXR5cGVvZiB0JiYoaT0iUE9TVCIpLHMubGVuZ3RoPjAmJnguYWpheCh7dXJsOmUsdHlwZTppLGRhdGFUeXBlOiJodG1sIixkYXRhOnR9KS5kb25lKGZ1bmN0aW9uKGUpe289YXJndW1lbnRzLHMuaHRtbChyP3goIjxkaXY+IikuYXBwZW5kKHgucGFyc2VIVE1MKGUpKS5maW5kKHIpOmUpfSkuY29tcGxldGUobiYmZnVuY3Rpb24oZSx0KXtzLmVhY2gobixvfHxbZS5yZXNwb25zZVRleHQsdCxlXSl9KSx0aGlzfSx4LmVhY2goWyJhamF4U3RhcnQiLCJhamF4U3RvcCIsImFqYXhDb21wbGV0ZSIsImFqYXhFcnJvciIsImFqYXhTdWNjZXNzIiwiYWpheFNlbmQiXSxmdW5jdGlvbihlLHQpe3guZm5bdF09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub24odCxlKX19KSx4LmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6VXQsdHlwZToiR0VUIixpc0xvY2FsOkt0LnRlc3QoWHRbMV0pLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6c24sdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjp4LnBhcnNlSlNPTiwidGV4dCB4bWwiOngucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpmdW5jdGlvbihlLHQpe3JldHVybiB0P2NuKGNuKGUseC5hamF4U2V0dGluZ3MpLHQpOmNuKHguYWpheFNldHRpbmdzLGUpfSxhamF4UHJlZmlsdGVyOnVuKHJuKSxhamF4VHJhbnNwb3J0OnVuKG9uKSxhamF4OmZ1bmN0aW9uKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBlJiYodD1lLGU9dW5kZWZpbmVkKSx0PXR8fHt9O3ZhciBuLHIsaSxvLHMsYSx1LGwsYz14LmFqYXhTZXR1cCh7fSx0KSxwPWMuY29udGV4dHx8YyxmPWMuY29udGV4dCYmKHAubm9kZVR5cGV8fHAuanF1ZXJ5KT94KHApOnguZXZlbnQsaD14LkRlZmVycmVkKCksZD14LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxnPWMuc3RhdHVzQ29kZXx8e30sbT17fSx5PXt9LHY9MCxiPSJjYW5jZWxlZCIsVD17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKDI9PT12KXtpZighbyl7bz17fTt3aGlsZSh0PVF0LmV4ZWMoaSkpb1t0WzFdLnRvTG93ZXJDYXNlKCldPXRbMl19dD1vW2UudG9Mb3dlckNhc2UoKV19cmV0dXJuIG51bGw9PXQ/bnVsbDp0fSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gMj09PXY/aTpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS50b0xvd2VyQ2FzZSgpO3JldHVybiB2fHwoZT15W25dPXlbbl18fGUsbVtlXT10KSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiB2fHwoYy5taW1lVHlwZT1lKSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKGUpaWYoMj52KWZvcih0IGluIGUpZ1t0XT1bZ1t0XSxlW3RdXTtlbHNlIFQuYWx3YXlzKGVbVC5zdGF0dXNdKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8YjtyZXR1cm4gbiYmbi5hYm9ydCh0KSxrKDAsdCksdGhpc319O2lmKGgucHJvbWlzZShUKS5jb21wbGV0ZT1kLmFkZCxULnN1Y2Nlc3M9VC5kb25lLFQuZXJyb3I9VC5mYWlsLGMudXJsPSgoZXx8Yy51cmx8fFV0KSsiIikucmVwbGFjZShHdCwiIikucmVwbGFjZShlbixYdFsxXSsiLy8iKSxjLnR5cGU9dC5tZXRob2R8fHQudHlwZXx8Yy5tZXRob2R8fGMudHlwZSxjLmRhdGFUeXBlcz14LnRyaW0oYy5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKHcpfHxbIiJdLG51bGw9PWMuY3Jvc3NEb21haW4mJihhPXRuLmV4ZWMoYy51cmwudG9Mb3dlckNhc2UoKSksYy5jcm9zc0RvbWFpbj0hKCFhfHxhWzFdPT09WHRbMV0mJmFbMl09PT1YdFsyXSYmKGFbM118fCgiaHR0cDoiPT09YVsxXT8iODAiOiI0NDMiKSk9PT0oWHRbM118fCgiaHR0cDoiPT09WHRbMV0/IjgwIjoiNDQzIikpKSksYy5kYXRhJiZjLnByb2Nlc3NEYXRhJiYic3RyaW5nIiE9dHlwZW9mIGMuZGF0YSYmKGMuZGF0YT14LnBhcmFtKGMuZGF0YSxjLnRyYWRpdGlvbmFsKSksbG4ocm4sYyx0LFQpLDI9PT12KXJldHVybiBUO3U9Yy5nbG9iYWwsdSYmMD09PXguYWN0aXZlKysmJnguZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0IiksYy50eXBlPWMudHlwZS50b1VwcGVyQ2FzZSgpLGMuaGFzQ29udGVudD0hWnQudGVzdChjLnR5cGUpLHI9Yy51cmwsYy5oYXNDb250ZW50fHwoYy5kYXRhJiYocj1jLnVybCs9KFZ0LnRlc3Qocik/IiYiOiI/IikrYy5kYXRhLGRlbGV0ZSBjLmRhdGEpLGMuY2FjaGU9PT0hMSYmKGMudXJsPUp0LnRlc3Qocik/ci5yZXBsYWNlKEp0LCIkMV89IitZdCsrKTpyKyhWdC50ZXN0KHIpPyImIjoiPyIpKyJfPSIrWXQrKykpLGMuaWZNb2RpZmllZCYmKHgubGFzdE1vZGlmaWVkW3JdJiZULnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIix4Lmxhc3RNb2RpZmllZFtyXSkseC5ldGFnW3JdJiZULnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLHguZXRhZ1tyXSkpLChjLmRhdGEmJmMuaGFzQ29udGVudCYmYy5jb250ZW50VHlwZSE9PSExfHx0LmNvbnRlbnRUeXBlKSYmVC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGMuY29udGVudFR5cGUpLFQuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixjLmRhdGFUeXBlc1swXSYmYy5hY2NlcHRzW2MuZGF0YVR5cGVzWzBdXT9jLmFjY2VwdHNbYy5kYXRhVHlwZXNbMF1dKygiKiIhPT1jLmRhdGFUeXBlc1swXT8iLCAiK3NuKyI7IHE9MC4wMSI6IiIpOmMuYWNjZXB0c1siKiJdKTtmb3IobCBpbiBjLmhlYWRlcnMpVC5zZXRSZXF1ZXN0SGVhZGVyKGwsYy5oZWFkZXJzW2xdKTtpZihjLmJlZm9yZVNlbmQmJihjLmJlZm9yZVNlbmQuY2FsbChwLFQsYyk9PT0hMXx8Mj09PXYpKXJldHVybiBULmFib3J0KCk7Yj0iYWJvcnQiO2ZvcihsIGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KVRbbF0oY1tsXSk7aWYobj1sbihvbixjLHQsVCkpe1QucmVhZHlTdGF0ZT0xLHUmJmYudHJpZ2dlcigiYWpheFNlbmQiLFtULGNdKSxjLmFzeW5jJiZjLnRpbWVvdXQ+MCYmKHM9c2V0VGltZW91dChmdW5jdGlvbigpe1QuYWJvcnQoInRpbWVvdXQiKX0sYy50aW1lb3V0KSk7dHJ5e3Y9MSxuLnNlbmQobSxrKX1jYXRjaChDKXtpZighKDI+dikpdGhyb3cgQztrKC0xLEMpfX1lbHNlIGsoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0aW9uIGsoZSx0LG8sYSl7dmFyIGwsbSx5LGIsdyxDPXQ7MiE9PXYmJih2PTIscyYmY2xlYXJUaW1lb3V0KHMpLG49dW5kZWZpbmVkLGk9YXx8IiIsVC5yZWFkeVN0YXRlPWU+MD80OjAsbD1lPj0yMDAmJjMwMD5lfHwzMDQ9PT1lLG8mJihiPXBuKGMsVCxvKSksYj1mbihjLGIsVCxsKSxsPyhjLmlmTW9kaWZpZWQmJih3PVQuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSx3JiYoeC5sYXN0TW9kaWZpZWRbcl09dyksdz1ULmdldFJlc3BvbnNlSGVhZGVyKCJldGFnIiksdyYmKHguZXRhZ1tyXT13KSksMjA0PT09ZXx8IkhFQUQiPT09Yy50eXBlP0M9Im5vY29udGVudCI6MzA0PT09ZT9DPSJub3Rtb2RpZmllZCI6KEM9Yi5zdGF0ZSxtPWIuZGF0YSx5PWIuZXJyb3IsbD0heSkpOih5PUMsKGV8fCFDKSYmKEM9ImVycm9yIiwwPmUmJihlPTApKSksVC5zdGF0dXM9ZSxULnN0YXR1c1RleHQ9KHR8fEMpKyIiLGw/aC5yZXNvbHZlV2l0aChwLFttLEMsVF0pOmgucmVqZWN0V2l0aChwLFtULEMseV0pLFQuc3RhdHVzQ29kZShnKSxnPXVuZGVmaW5lZCx1JiZmLnRyaWdnZXIobD8iYWpheFN1Y2Nlc3MiOiJhamF4RXJyb3IiLFtULGMsbD9tOnldKSxkLmZpcmVXaXRoKHAsW1QsQ10pLHUmJihmLnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW1QsY10pLC0teC5hY3RpdmV8fHguZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKSkpfXJldHVybiBUfSxnZXRKU09OOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4geC5nZXQoZSx0LG4sImpzb24iKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHguZ2V0KGUsdW5kZWZpbmVkLHQsInNjcmlwdCIpfX0pLHguZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihlLHQpe3hbdF09ZnVuY3Rpb24oZSxuLHIsaSl7cmV0dXJuIHguaXNGdW5jdGlvbihuKSYmKGk9aXx8cixyPW4sbj11bmRlZmluZWQpLHguYWpheCh7dXJsOmUsdHlwZTp0LGRhdGFUeXBlOmksZGF0YTpuLHN1Y2Nlc3M6cn0pfX0pO2Z1bmN0aW9uIHBuKGUsdCxuKXt2YXIgcixpLG8scyxhPWUuY29udGVudHMsdT1lLmRhdGFUeXBlczt3aGlsZSgiKiI9PT11WzBdKXUuc2hpZnQoKSxyPT09dW5kZWZpbmVkJiYocj1lLm1pbWVUeXBlfHx0LmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKSk7aWYocilmb3IoaSBpbiBhKWlmKGFbaV0mJmFbaV0udGVzdChyKSl7dS51bnNoaWZ0KGkpO2JyZWFrfWlmKHVbMF1pbiBuKW89dVswXTtlbHNle2ZvcihpIGluIG4pe2lmKCF1WzBdfHxlLmNvbnZlcnRlcnNbaSsiICIrdVswXV0pe289aTticmVha31zfHwocz1pKX1vPW98fHN9cmV0dXJuIG8/KG8hPT11WzBdJiZ1LnVuc2hpZnQobyksbltvXSk6dW5kZWZpbmVkfWZ1bmN0aW9uIGZuKGUsdCxuLHIpe3ZhciBpLG8scyxhLHUsbD17fSxjPWUuZGF0YVR5cGVzLnNsaWNlKCk7aWYoY1sxXSlmb3IocyBpbiBlLmNvbnZlcnRlcnMpbFtzLnRvTG93ZXJDYXNlKCldPWUuY29udmVydGVyc1tzXTtvPWMuc2hpZnQoKTt3aGlsZShvKWlmKGUucmVzcG9uc2VGaWVsZHNbb10mJihuW2UucmVzcG9uc2VGaWVsZHNbb11dPXQpLCF1JiZyJiZlLmRhdGFGaWx0ZXImJih0PWUuZGF0YUZpbHRlcih0LGUuZGF0YVR5cGUpKSx1PW8sbz1jLnNoaWZ0KCkpaWYoIioiPT09bylvPXU7ZWxzZSBpZigiKiIhPT11JiZ1IT09byl7aWYocz1sW3UrIiAiK29dfHxsWyIqICIrb10sIXMpZm9yKGkgaW4gbClpZihhPWkuc3BsaXQoIiAiKSxhWzFdPT09byYmKHM9bFt1KyIgIithWzBdXXx8bFsiKiAiK2FbMF1dKSl7cz09PSEwP3M9bFtpXTpsW2ldIT09ITAmJihvPWFbMF0sYy51bnNoaWZ0KGFbMV0pKTticmVha31pZihzIT09ITApaWYocyYmZVsidGhyb3dzIl0pdD1zKHQpO2Vsc2UgdHJ5e3Q9cyh0KX1jYXRjaChwKXtyZXR1cm57c3RhdGU6InBhcnNlcmVycm9yIixlcnJvcjpzP3A6Ik5vIGNvbnZlcnNpb24gZnJvbSAiK3UrIiB0byAiK299fX1yZXR1cm57c3RhdGU6InN1Y2Nlc3MiLGRhdGE6dH19eC5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi8oPzpqYXZhfGVjbWEpc2NyaXB0L30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihlKXtyZXR1cm4geC5nbG9iYWxFdmFsKGUpLGV9fX0pLHguYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihlKXtlLmNhY2hlPT09dW5kZWZpbmVkJiYoZS5jYWNoZT0hMSksZS5jcm9zc0RvbWFpbiYmKGUudHlwZT0iR0VUIil9KSx4LmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24oZSl7aWYoZS5jcm9zc0RvbWFpbil7dmFyIHQsbjtyZXR1cm57c2VuZDpmdW5jdGlvbihyLGkpe3Q9eCgiPHNjcmlwdD4iKS5wcm9wKHthc3luYzohMCxjaGFyc2V0OmUuc2NyaXB0Q2hhcnNldCxzcmM6ZS51cmx9KS5vbigibG9hZCBlcnJvciIsbj1mdW5jdGlvbihlKXt0LnJlbW92ZSgpLG49bnVsbCxlJiZpKCJlcnJvciI9PT1lLnR5cGU/NDA0OjIwMCxlLnR5cGUpfSksby5oZWFkLmFwcGVuZENoaWxkKHRbMF0pfSxhYm9ydDpmdW5jdGlvbigpe24mJm4oKX19fX0pO3ZhciBobj1bXSxkbj0vKD0pXD8oPz0mfCQpfFw/XD8vO3guYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgZT1obi5wb3AoKXx8eC5leHBhbmRvKyJfIitZdCsrO3JldHVybiB0aGlzW2VdPSEwLGV9fSkseC5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbih0LG4scil7dmFyIGksbyxzLGE9dC5qc29ucCE9PSExJiYoZG4udGVzdCh0LnVybCk/InVybCI6InN0cmluZyI9PXR5cGVvZiB0LmRhdGEmJiEodC5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiZkbi50ZXN0KHQuZGF0YSkmJiJkYXRhIik7cmV0dXJuIGF8fCJqc29ucCI9PT10LmRhdGFUeXBlc1swXT8oaT10Lmpzb25wQ2FsbGJhY2s9eC5pc0Z1bmN0aW9uKHQuanNvbnBDYWxsYmFjayk/dC5qc29ucENhbGxiYWNrKCk6dC5qc29ucENhbGxiYWNrLGE/dFthXT10W2FdLnJlcGxhY2UoZG4sIiQxIitpKTp0Lmpzb25wIT09ITEmJih0LnVybCs9KFZ0LnRlc3QodC51cmwpPyImIjoiPyIpK3QuanNvbnArIj0iK2kpLHQuY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigpe3JldHVybiBzfHx4LmVycm9yKGkrIiB3YXMgbm90IGNhbGxlZCIpLHNbMF19LHQuZGF0YVR5cGVzWzBdPSJqc29uIixvPWVbaV0sZVtpXT1mdW5jdGlvbigpe3M9YXJndW1lbnRzfSxyLmFsd2F5cyhmdW5jdGlvbigpe2VbaV09byx0W2ldJiYodC5qc29ucENhbGxiYWNrPW4uanNvbnBDYWxsYmFjayxobi5wdXNoKGkpKSxzJiZ4LmlzRnVuY3Rpb24obykmJm8oc1swXSkscz1vPXVuZGVmaW5lZH0pLCJzY3JpcHQiKTp1bmRlZmluZWR9KSx4LmFqYXhTZXR0aW5ncy54aHI9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH1jYXRjaChlKXt9fTt2YXIgZ249eC5hamF4U2V0dGluZ3MueGhyKCksbW49ezA6MjAwLDEyMjM6MjA0fSx5bj0wLHZuPXt9O2UuQWN0aXZlWE9iamVjdCYmeChlKS5vbigidW5sb2FkIixmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB2bil2bltlXSgpO3ZuPXVuZGVmaW5lZH0pLHguc3VwcG9ydC5jb3JzPSEhZ24mJiJ3aXRoQ3JlZGVudGlhbHMiaW4gZ24seC5zdXBwb3J0LmFqYXg9Z249ISFnbix4LmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIHguc3VwcG9ydC5jb3JzfHxnbiYmIWUuY3Jvc3NEb21haW4/e3NlbmQ6ZnVuY3Rpb24obixyKXt2YXIgaSxvLHM9ZS54aHIoKTtpZihzLm9wZW4oZS50eXBlLGUudXJsLGUuYXN5bmMsZS51c2VybmFtZSxlLnBhc3N3b3JkKSxlLnhockZpZWxkcylmb3IoaSBpbiBlLnhockZpZWxkcylzW2ldPWUueGhyRmllbGRzW2ldO2UubWltZVR5cGUmJnMub3ZlcnJpZGVNaW1lVHlwZSYmcy5vdmVycmlkZU1pbWVUeXBlKGUubWltZVR5cGUpLGUuY3Jvc3NEb21haW58fG5bIlgtUmVxdWVzdGVkLVdpdGgiXXx8KG5bIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTtmb3IoaSBpbiBuKXMuc2V0UmVxdWVzdEhlYWRlcihpLG5baV0pO3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dCYmKGRlbGV0ZSB2bltvXSx0PXMub25sb2FkPXMub25lcnJvcj1udWxsLCJhYm9ydCI9PT1lP3MuYWJvcnQoKToiZXJyb3IiPT09ZT9yKHMuc3RhdHVzfHw0MDQscy5zdGF0dXNUZXh0KTpyKG1uW3Muc3RhdHVzXXx8cy5zdGF0dXMscy5zdGF0dXNUZXh0LCJzdHJpbmciPT10eXBlb2Ygcy5yZXNwb25zZVRleHQ/e3RleHQ6cy5yZXNwb25zZVRleHR9OnVuZGVmaW5lZCxzLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSl9fSxzLm9ubG9hZD10KCkscy5vbmVycm9yPXQoImVycm9yIiksdD12bltvPXluKytdPXQoImFib3J0Iikscy5zZW5kKGUuaGFzQ29udGVudCYmZS5kYXRhfHxudWxsKX0sYWJvcnQ6ZnVuY3Rpb24oKXt0JiZ0KCl9fTp1bmRlZmluZWR9KTt2YXIgeG4sYm4sd249L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLFRuPVJlZ0V4cCgiXig/OihbKy1dKT18KSgiK2IrIikoW2EteiVdKikkIiwiaSIpLENuPS9xdWV1ZUhvb2tzJC8sa249W0FuXSxObj17IioiOltmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuY3JlYXRlVHdlZW4oZSx0KSxyPW4uY3VyKCksaT1Ubi5leGVjKHQpLG89aSYmaVszXXx8KHguY3NzTnVtYmVyW2VdPyIiOiJweCIpLHM9KHguY3NzTnVtYmVyW2VdfHwicHgiIT09byYmK3IpJiZUbi5leGVjKHguY3NzKG4uZWxlbSxlKSksYT0xLHU9MjA7aWYocyYmc1szXSE9PW8pe289b3x8c1szXSxpPWl8fFtdLHM9K3J8fDE7ZG8gYT1hfHwiLjUiLHMvPWEseC5zdHlsZShuLmVsZW0sZSxzK28pO3doaWxlKGEhPT0oYT1uLmN1cigpL3IpJiYxIT09YSYmLS11KX1yZXR1cm4gaSYmKHM9bi5zdGFydD0rc3x8K3J8fDAsbi51bml0PW8sbi5lbmQ9aVsxXT9zKyhpWzFdKzEpKmlbMl06K2lbMl0pLG59XX07ZnVuY3Rpb24gRW4oKXtyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe3huPXVuZGVmaW5lZH0pLHhuPXgubm93KCl9ZnVuY3Rpb24gU24oZSx0LG4pe3ZhciByLGk9KE5uW3RdfHxbXSkuY29uY2F0KE5uWyIqIl0pLG89MCxzPWkubGVuZ3RoO2Zvcig7cz5vO28rKylpZihyPWlbb10uY2FsbChuLHQsZSkpcmV0dXJuIHJ9ZnVuY3Rpb24gam4oZSx0LG4pe3ZhciByLGksbz0wLHM9a24ubGVuZ3RoLGE9eC5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSB1LmVsZW19KSx1PWZ1bmN0aW9uKCl7aWYoaSlyZXR1cm4hMTt2YXIgdD14bnx8RW4oKSxuPU1hdGgubWF4KDAsbC5zdGFydFRpbWUrbC5kdXJhdGlvbi10KSxyPW4vbC5kdXJhdGlvbnx8MCxvPTEtcixzPTAsdT1sLnR3ZWVucy5sZW5ndGg7Zm9yKDt1PnM7cysrKWwudHdlZW5zW3NdLnJ1bihvKTtyZXR1cm4gYS5ub3RpZnlXaXRoKGUsW2wsbyxuXSksMT5vJiZ1P246KGEucmVzb2x2ZVdpdGgoZSxbbF0pLCExKX0sbD1hLnByb21pc2Uoe2VsZW06ZSxwcm9wczp4LmV4dGVuZCh7fSx0KSxvcHRzOnguZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9fSxuKSxvcmlnaW5hbFByb3BlcnRpZXM6dCxvcmlnaW5hbE9wdGlvbnM6bixzdGFydFRpbWU6eG58fEVuKCksZHVyYXRpb246bi5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24odCxuKXt2YXIgcj14LlR3ZWVuKGUsbC5vcHRzLHQsbixsLm9wdHMuc3BlY2lhbEVhc2luZ1t0XXx8bC5vcHRzLmVhc2luZyk7cmV0dXJuIGwudHdlZW5zLnB1c2gocikscn0sc3RvcDpmdW5jdGlvbih0KXt2YXIgbj0wLHI9dD9sLnR3ZWVucy5sZW5ndGg6MDtpZihpKXJldHVybiB0aGlzO2ZvcihpPSEwO3I+bjtuKyspbC50d2VlbnNbbl0ucnVuKDEpO3JldHVybiB0P2EucmVzb2x2ZVdpdGgoZSxbbCx0XSk6YS5yZWplY3RXaXRoKGUsW2wsdF0pLHRoaXN9fSksYz1sLnByb3BzO2ZvcihEbihjLGwub3B0cy5zcGVjaWFsRWFzaW5nKTtzPm87bysrKWlmKHI9a25bb10uY2FsbChsLGUsYyxsLm9wdHMpKXJldHVybiByO3JldHVybiB4Lm1hcChjLFNuLGwpLHguaXNGdW5jdGlvbihsLm9wdHMuc3RhcnQpJiZsLm9wdHMuc3RhcnQuY2FsbChlLGwpLHguZngudGltZXIoeC5leHRlbmQodSx7ZWxlbTplLGFuaW06bCxxdWV1ZTpsLm9wdHMucXVldWV9KSksbC5wcm9ncmVzcyhsLm9wdHMucHJvZ3Jlc3MpLmRvbmUobC5vcHRzLmRvbmUsbC5vcHRzLmNvbXBsZXRlKS5mYWlsKGwub3B0cy5mYWlsKS5hbHdheXMobC5vcHRzLmFsd2F5cyl9ZnVuY3Rpb24gRG4oZSx0KXt2YXIgbixyLGksbyxzO2ZvcihuIGluIGUpaWYocj14LmNhbWVsQ2FzZShuKSxpPXRbcl0sbz1lW25dLHguaXNBcnJheShvKSYmKGk9b1sxXSxvPWVbbl09b1swXSksbiE9PXImJihlW3JdPW8sZGVsZXRlIGVbbl0pLHM9eC5jc3NIb29rc1tyXSxzJiYiZXhwYW5kImluIHMpe289cy5leHBhbmQobyksZGVsZXRlIGVbcl07Zm9yKG4gaW4gbyluIGluIGV8fChlW25dPW9bbl0sdFtuXT1pKX1lbHNlIHRbcl09aX14LkFuaW1hdGlvbj14LmV4dGVuZChqbix7dHdlZW5lcjpmdW5jdGlvbihlLHQpe3guaXNGdW5jdGlvbihlKT8odD1lLGU9WyIqIl0pOmU9ZS5zcGxpdCgiICIpO3ZhciBuLHI9MCxpPWUubGVuZ3RoO2Zvcig7aT5yO3IrKyluPWVbcl0sTm5bbl09Tm5bbl18fFtdLE5uW25dLnVuc2hpZnQodCl9LHByZWZpbHRlcjpmdW5jdGlvbihlLHQpe3Q/a24udW5zaGlmdChlKTprbi5wdXNoKGUpfX0pO2Z1bmN0aW9uIEFuKGUsdCxuKXt2YXIgcixpLG8scyxhLHUsbD10aGlzLGM9e30scD1lLnN0eWxlLGY9ZS5ub2RlVHlwZSYmTHQoZSksaD1xLmdldChlLCJmeHNob3ciKTtuLnF1ZXVlfHwoYT14Ll9xdWV1ZUhvb2tzKGUsImZ4IiksbnVsbD09YS51bnF1ZXVlZCYmKGEudW5xdWV1ZWQ9MCx1PWEuZW1wdHkuZmlyZSxhLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXthLnVucXVldWVkfHx1KCl9KSxhLnVucXVldWVkKyssbC5hbHdheXMoZnVuY3Rpb24oKXtsLmFsd2F5cyhmdW5jdGlvbigpe2EudW5xdWV1ZWQtLSx4LnF1ZXVlKGUsImZ4IikubGVuZ3RofHxhLmVtcHR5LmZpcmUoKX0pfSkpLDE9PT1lLm5vZGVUeXBlJiYoImhlaWdodCJpbiB0fHwid2lkdGgiaW4gdCkmJihuLm92ZXJmbG93PVtwLm92ZXJmbG93LHAub3ZlcmZsb3dYLHAub3ZlcmZsb3dZXSwiaW5saW5lIj09PXguY3NzKGUsImRpc3BsYXkiKSYmIm5vbmUiPT09eC5jc3MoZSwiZmxvYXQiKSYmKHAuZGlzcGxheT0iaW5saW5lLWJsb2NrIikpLG4ub3ZlcmZsb3cmJihwLm92ZXJmbG93PSJoaWRkZW4iLGwuYWx3YXlzKGZ1bmN0aW9uKCl7cC5vdmVyZmxvdz1uLm92ZXJmbG93WzBdLHAub3ZlcmZsb3dYPW4ub3ZlcmZsb3dbMV0scC5vdmVyZmxvd1k9bi5vdmVyZmxvd1syXX0pKTtmb3IociBpbiB0KWlmKGk9dFtyXSx3bi5leGVjKGkpKXtpZihkZWxldGUgdFtyXSxvPW98fCJ0b2dnbGUiPT09aSxpPT09KGY/ImhpZGUiOiJzaG93Iikpe2lmKCJzaG93IiE9PWl8fCFofHxoW3JdPT09dW5kZWZpbmVkKWNvbnRpbnVlO2Y9ITB9Y1tyXT1oJiZoW3JdfHx4LnN0eWxlKGUscil9aWYoIXguaXNFbXB0eU9iamVjdChjKSl7aD8iaGlkZGVuImluIGgmJihmPWguaGlkZGVuKTpoPXEuYWNjZXNzKGUsImZ4c2hvdyIse30pLG8mJihoLmhpZGRlbj0hZiksZj94KGUpLnNob3coKTpsLmRvbmUoZnVuY3Rpb24oKXt4KGUpLmhpZGUoKX0pLGwuZG9uZShmdW5jdGlvbigpe3ZhciB0O3EucmVtb3ZlKGUsImZ4c2hvdyIpO2Zvcih0IGluIGMpeC5zdHlsZShlLHQsY1t0XSl9KTtmb3IociBpbiBjKXM9U24oZj9oW3JdOjAscixsKSxyIGluIGh8fChoW3JdPXMuc3RhcnQsZiYmKHMuZW5kPXMuc3RhcnQscy5zdGFydD0id2lkdGgiPT09cnx8ImhlaWdodCI9PT1yPzE6MCkpfX1mdW5jdGlvbiBMbihlLHQsbixyLGkpe3JldHVybiBuZXcgTG4ucHJvdG90eXBlLmluaXQoZSx0LG4scixpKX14LlR3ZWVuPUxuLExuLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TG4saW5pdDpmdW5jdGlvbihlLHQsbixyLGksbyl7dGhpcy5lbGVtPWUsdGhpcy5wcm9wPW4sdGhpcy5lYXNpbmc9aXx8InN3aW5nIix0aGlzLm9wdGlvbnM9dCx0aGlzLnN0YXJ0PXRoaXMubm93PXRoaXMuY3VyKCksdGhpcy5lbmQ9cix0aGlzLnVuaXQ9b3x8KHguY3NzTnVtYmVyW25dPyIiOiJweCIpfSxjdXI6ZnVuY3Rpb24oKXt2YXIgZT1Mbi5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gZSYmZS5nZXQ/ZS5nZXQodGhpcyk6TG4ucHJvcEhvb2tzLl9kZWZhdWx0LmdldCh0aGlzKX0scnVuOmZ1bmN0aW9uKGUpe3ZhciB0LG49TG4ucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIHRoaXMucG9zPXQ9dGhpcy5vcHRpb25zLmR1cmF0aW9uP3guZWFzaW5nW3RoaXMuZWFzaW5nXShlLHRoaXMub3B0aW9ucy5kdXJhdGlvbiplLDAsMSx0aGlzLm9wdGlvbnMuZHVyYXRpb24pOmUsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKnQrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksbiYmbi5zZXQ/bi5zZXQodGhpcyk6TG4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0sTG4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlPUxuLnByb3RvdHlwZSxMbi5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG51bGw9PWUuZWxlbVtlLnByb3BdfHxlLmVsZW0uc3R5bGUmJm51bGwhPWUuZWxlbS5zdHlsZVtlLnByb3BdPyh0PXguY3NzKGUuZWxlbSxlLnByb3AsIiIpLHQmJiJhdXRvIiE9PXQ/dDowKTplLmVsZW1bZS5wcm9wXX0sc2V0OmZ1bmN0aW9uKGUpe3guZnguc3RlcFtlLnByb3BdP3guZnguc3RlcFtlLnByb3BdKGUpOmUuZWxlbS5zdHlsZSYmKG51bGwhPWUuZWxlbS5zdHlsZVt4LmNzc1Byb3BzW2UucHJvcF1dfHx4LmNzc0hvb2tzW2UucHJvcF0pP3guc3R5bGUoZS5lbGVtLGUucHJvcCxlLm5vdytlLnVuaXQpOmUuZWxlbVtlLnByb3BdPWUubm93fX19LExuLnByb3BIb29rcy5zY3JvbGxUb3A9TG4ucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihlKXtlLmVsZW0ubm9kZVR5cGUmJmUuZWxlbS5wYXJlbnROb2RlJiYoZS5lbGVtW2UucHJvcF09ZS5ub3cpfX0seC5lYWNoKFsidG9nZ2xlIiwic2hvdyIsImhpZGUiXSxmdW5jdGlvbihlLHQpe3ZhciBuPXguZm5bdF07eC5mblt0XT1mdW5jdGlvbihlLHIsaSl7cmV0dXJuIG51bGw9PWV8fCJib29sZWFuIj09dHlwZW9mIGU/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKHFuKHQsITApLGUscixpKX19KSx4LmZuLmV4dGVuZCh7ZmFkZVRvOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLmZpbHRlcihMdCkuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTp0fSxlLG4scil9LGFuaW1hdGU6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9eC5pc0VtcHR5T2JqZWN0KGUpLG89eC5zcGVlZCh0LG4scikscz1mdW5jdGlvbigpe3ZhciB0PWpuKHRoaXMseC5leHRlbmQoe30sZSksbyk7KGl8fHEuZ2V0KHRoaXMsImZpbmlzaCIpKSYmdC5zdG9wKCEwKX07cmV0dXJuIHMuZmluaXNoPXMsaXx8by5xdWV1ZT09PSExP3RoaXMuZWFjaChzKTp0aGlzLnF1ZXVlKG8ucXVldWUscyl9LHN0b3A6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc3RvcDtkZWxldGUgZS5zdG9wLHQobil9O3JldHVybiJzdHJpbmciIT10eXBlb2YgZSYmKG49dCx0PWUsZT11bmRlZmluZWQpLHQmJmUhPT0hMSYmdGhpcy5xdWV1ZShlfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD0hMCxpPW51bGwhPWUmJmUrInF1ZXVlSG9va3MiLG89eC50aW1lcnMscz1xLmdldCh0aGlzKTtpZihpKXNbaV0mJnNbaV0uc3RvcCYmcihzW2ldKTtlbHNlIGZvcihpIGluIHMpc1tpXSYmc1tpXS5zdG9wJiZDbi50ZXN0KGkpJiZyKHNbaV0pO2ZvcihpPW8ubGVuZ3RoO2ktLTspb1tpXS5lbGVtIT09dGhpc3x8bnVsbCE9ZSYmb1tpXS5xdWV1ZSE9PWV8fChvW2ldLmFuaW0uc3RvcChuKSx0PSExLG8uc3BsaWNlKGksMSkpOyh0fHwhbikmJnguZGVxdWV1ZSh0aGlzLGUpfSl9LGZpbmlzaDpmdW5jdGlvbihlKXtyZXR1cm4gZSE9PSExJiYoZT1lfHwiZngiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdCxuPXEuZ2V0KHRoaXMpLHI9bltlKyJxdWV1ZSJdLGk9bltlKyJxdWV1ZUhvb2tzIl0sbz14LnRpbWVycyxzPXI/ci5sZW5ndGg6MDtmb3Iobi5maW5pc2g9ITAseC5xdWV1ZSh0aGlzLGUsW10pLGkmJmkuc3RvcCYmaS5zdG9wLmNhbGwodGhpcywhMCksdD1vLmxlbmd0aDt0LS07KW9bdF0uZWxlbT09PXRoaXMmJm9bdF0ucXVldWU9PT1lJiYob1t0XS5hbmltLnN0b3AoITApLG8uc3BsaWNlKHQsMSkpO2Zvcih0PTA7cz50O3QrKylyW3RdJiZyW3RdLmZpbmlzaCYmclt0XS5maW5pc2guY2FsbCh0aGlzKTtkZWxldGUgbi5maW5pc2h9KX19KTtmdW5jdGlvbiBxbihlLHQpe3ZhciBuLHI9e2hlaWdodDplfSxpPTA7Zm9yKHQ9dD8xOjA7ND5pO2krPTItdCluPWp0W2ldLHJbIm1hcmdpbiIrbl09clsicGFkZGluZyIrbl09ZTtyZXR1cm4gdCYmKHIub3BhY2l0eT1yLndpZHRoPWUpLHJ9eC5lYWNoKHtzbGlkZURvd246cW4oInNob3ciKSxzbGlkZVVwOnFuKCJoaWRlIiksc2xpZGVUb2dnbGU6cW4oInRvZ2dsZSIpLGZhZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xlOntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oZSx0KXt4LmZuW2VdPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdGhpcy5hbmltYXRlKHQsZSxuLHIpfX0pLHguc3BlZWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUmJiJvYmplY3QiPT10eXBlb2YgZT94LmV4dGVuZCh7fSxlKTp7Y29tcGxldGU6bnx8IW4mJnR8fHguaXNGdW5jdGlvbihlKSYmZSxkdXJhdGlvbjplLGVhc2luZzpuJiZ0fHx0JiYheC5pc0Z1bmN0aW9uKHQpJiZ0fTtyZXR1cm4gci5kdXJhdGlvbj14LmZ4Lm9mZj8wOiJudW1iZXIiPT10eXBlb2Ygci5kdXJhdGlvbj9yLmR1cmF0aW9uOnIuZHVyYXRpb24gaW4geC5meC5zcGVlZHM/eC5meC5zcGVlZHNbci5kdXJhdGlvbl06eC5meC5zcGVlZHMuX2RlZmF1bHQsKG51bGw9PXIucXVldWV8fHIucXVldWU9PT0hMCkmJihyLnF1ZXVlPSJmeCIpLHIub2xkPXIuY29tcGxldGUsci5jb21wbGV0ZT1mdW5jdGlvbigpe3guaXNGdW5jdGlvbihyLm9sZCkmJnIub2xkLmNhbGwodGhpcyksci5xdWV1ZSYmeC5kZXF1ZXVlKHRoaXMsci5xdWV1ZSl9LHJ9LHguZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHN3aW5nOmZ1bmN0aW9uKGUpe3JldHVybi41LU1hdGguY29zKGUqTWF0aC5QSSkvMn19LHgudGltZXJzPVtdLHguZng9TG4ucHJvdG90eXBlLmluaXQseC5meC50aWNrPWZ1bmN0aW9uKCl7dmFyIGUsdD14LnRpbWVycyxuPTA7Zm9yKHhuPXgubm93KCk7dC5sZW5ndGg+bjtuKyspZT10W25dLGUoKXx8dFtuXSE9PWV8fHQuc3BsaWNlKG4tLSwxKTt0Lmxlbmd0aHx8eC5meC5zdG9wKCkseG49dW5kZWZpbmVkfSx4LmZ4LnRpbWVyPWZ1bmN0aW9uKGUpe2UoKSYmeC50aW1lcnMucHVzaChlKSYmeC5meC5zdGFydCgpfSx4LmZ4LmludGVydmFsPTEzLHguZnguc3RhcnQ9ZnVuY3Rpb24oKXtibnx8KGJuPXNldEludGVydmFsKHguZngudGljayx4LmZ4LmludGVydmFsKSl9LHguZnguc3RvcD1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwoYm4pLGJuPW51bGx9LHguZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LHguZnguc3RlcD17fSx4LmV4cHImJnguZXhwci5maWx0ZXJzJiYoeC5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHguZ3JlcCh4LnRpbWVycyxmdW5jdGlvbih0KXtyZXR1cm4gZT09PXQuZWxlbX0pLmxlbmd0aH0pLHguZm4ub2Zmc2V0PWZ1bmN0aW9uKGUpe2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGU9PT11bmRlZmluZWQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24odCl7eC5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsZSx0KX0pO3ZhciB0LG4saT10aGlzWzBdLG89e3RvcDowLGxlZnQ6MH0scz1pJiZpLm93bmVyRG9jdW1lbnQ7aWYocylyZXR1cm4gdD1zLmRvY3VtZW50RWxlbWVudCx4LmNvbnRhaW5zKHQsaSk/KHR5cGVvZiBpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCE9PXImJihvPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLG49SG4ocykse3RvcDpvLnRvcCtuLnBhZ2VZT2Zmc2V0LXQuY2xpZW50VG9wLGxlZnQ6by5sZWZ0K24ucGFnZVhPZmZzZXQtdC5jbGllbnRMZWZ0fSk6b30seC5vZmZzZXQ9e3NldE9mZnNldDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLHMsYSx1LGwsYz14LmNzcyhlLCJwb3NpdGlvbiIpLHA9eChlKSxmPXt9OyJzdGF0aWMiPT09YyYmKGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksYT1wLm9mZnNldCgpLG89eC5jc3MoZSwidG9wIiksdT14LmNzcyhlLCJsZWZ0IiksbD0oImFic29sdXRlIj09PWN8fCJmaXhlZCI9PT1jKSYmKG8rdSkuaW5kZXhPZigiYXV0byIpPi0xLGw/KHI9cC5wb3NpdGlvbigpLHM9ci50b3AsaT1yLmxlZnQpOihzPXBhcnNlRmxvYXQobyl8fDAsaT1wYXJzZUZsb2F0KHUpfHwwKSx4LmlzRnVuY3Rpb24odCkmJih0PXQuY2FsbChlLG4sYSkpLG51bGwhPXQudG9wJiYoZi50b3A9dC50b3AtYS50b3ArcyksbnVsbCE9dC5sZWZ0JiYoZi5sZWZ0PXQubGVmdC1hLmxlZnQraSksInVzaW5nImluIHQ/dC51c2luZy5jYWxsKGUsZik6cC5jc3MoZil9fSx4LmZuLmV4dGVuZCh7cG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgZSx0LG49dGhpc1swXSxyPXt0b3A6MCxsZWZ0OjB9O3JldHVybiJmaXhlZCI9PT14LmNzcyhuLCJwb3NpdGlvbiIpP3Q9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTooZT10aGlzLm9mZnNldFBhcmVudCgpLHQ9dGhpcy5vZmZzZXQoKSx4Lm5vZGVOYW1lKGVbMF0sImh0bWwiKXx8KHI9ZS5vZmZzZXQoKSksci50b3ArPXguY3NzKGVbMF0sImJvcmRlclRvcFdpZHRoIiwhMCksci5sZWZ0Kz14LmNzcyhlWzBdLCJib3JkZXJMZWZ0V2lkdGgiLCEwKSkse3RvcDp0LnRvcC1yLnRvcC14LmNzcyhuLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OnQubGVmdC1yLmxlZnQteC5jc3MobiwibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXMub2Zmc2V0UGFyZW50fHxzO3doaWxlKGUmJiF4Lm5vZGVOYW1lKGUsImh0bWwiKSYmInN0YXRpYyI9PT14LmNzcyhlLCJwb3NpdGlvbiIpKWU9ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGV8fHN9KX19KSx4LmVhY2goe3Njcm9sbExlZnQ6InBhZ2VYT2Zmc2V0IixzY3JvbGxUb3A6InBhZ2VZT2Zmc2V0In0sZnVuY3Rpb24odCxuKXt2YXIgcj0icGFnZVlPZmZzZXQiPT09bjt4LmZuW3RdPWZ1bmN0aW9uKGkpe3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKHQsaSxvKXt2YXIgcz1Ibih0KTtyZXR1cm4gbz09PXVuZGVmaW5lZD9zP3Nbbl06dFtpXToocz9zLnNjcm9sbFRvKHI/ZS5wYWdlWE9mZnNldDpvLHI/bzplLnBhZ2VZT2Zmc2V0KTp0W2ldPW8sdW5kZWZpbmVkKX0sdCxpLGFyZ3VtZW50cy5sZW5ndGgsbnVsbCl9fSk7ZnVuY3Rpb24gSG4oZSl7cmV0dXJuIHguaXNXaW5kb3coZSk/ZTo5PT09ZS5ub2RlVHlwZSYmZS5kZWZhdWx0Vmlld314LmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihlLHQpe3guZWFjaCh7cGFkZGluZzoiaW5uZXIiK2UsY29udGVudDp0LCIiOiJvdXRlciIrZX0sZnVuY3Rpb24obixyKXt4LmZuW3JdPWZ1bmN0aW9uKHIsaSl7dmFyIG89YXJndW1lbnRzLmxlbmd0aCYmKG58fCJib29sZWFuIiE9dHlwZW9mIHIpLHM9bnx8KHI9PT0hMHx8aT09PSEwPyJtYXJnaW4iOiJib3JkZXIiKTtyZXR1cm4geC5hY2Nlc3ModGhpcyxmdW5jdGlvbih0LG4scil7dmFyIGk7cmV0dXJuIHguaXNXaW5kb3codCk/dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrZV06OT09PXQubm9kZVR5cGU/KGk9dC5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgodC5ib2R5WyJzY3JvbGwiK2VdLGlbInNjcm9sbCIrZV0sdC5ib2R5WyJvZmZzZXQiK2VdLGlbIm9mZnNldCIrZV0saVsiY2xpZW50IitlXSkpOnI9PT11bmRlZmluZWQ/eC5jc3ModCxuLHMpOnguc3R5bGUodCxuLHIscyl9LHQsbz9yOnVuZGVmaW5lZCxvLG51bGwpfX0pfSkseC5mbi5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSx4LmZuLmFuZFNlbGY9eC5mbi5hZGRCYWNrLCJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9eDoiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4geH0pLCJvYmplY3QiPT10eXBlb2YgZSYmIm9iamVjdCI9PXR5cGVvZiBlLmRvY3VtZW50JiYoZS5qUXVlcnk9ZS4kPXgpfSkod2luZG93KTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnktMi4wLjMubWluLm1hcCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnktMi4wLjMubWluLm1hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWRlY2QxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2pxdWVyeS0yLjAuMy5taW4ubWFwCkBAIC0wLDAgKzEgQEAKK3sidmVyc2lvbiI6MywiZmlsZSI6ImpxdWVyeS0yLjAuMy5taW4uanMiLCJzb3VyY2VzIjpbImpxdWVyeS0yLjAuMy5qcyJdLCJuYW1lcyI6WyJ3aW5kb3ciLCJ1bmRlZmluZWQiLCJyb290alF1ZXJ5IiwicmVhZHlMaXN0IiwiY29yZV9zdHJ1bmRlZmluZWQiLCJsb2NhdGlvbiIsImRvY3VtZW50IiwiZG9jRWxlbSIsImRvY3VtZW50RWxlbWVudCIsIl9qUXVlcnkiLCJqUXVlcnkiLCJfJCIsIiQiLCJjbGFzczJ0eXBlIiwiY29yZV9kZWxldGVkSWRzIiwiY29yZV92ZXJzaW9uIiwiY29yZV9jb25jYXQiLCJjb25jYXQiLCJjb3JlX3B1c2giLCJwdXNoIiwiY29yZV9zbGljZSIsInNsaWNlIiwiY29yZV9pbmRleE9mIiwiaW5kZXhPZiIsImNvcmVfdG9TdHJpbmciLCJ0b1N0cmluZyIsImNvcmVfaGFzT3duIiwiaGFzT3duUHJvcGVydHkiLCJjb3JlX3RyaW0iLCJ0cmltIiwic2VsZWN0b3IiLCJjb250ZXh0IiwiZm4iLCJpbml0IiwiY29yZV9wbnVtIiwic291cmNlIiwiY29yZV9ybm90d2hpdGUiLCJycXVpY2tFeHByIiwicnNpbmdsZVRhZyIsInJtc1ByZWZpeCIsInJkYXNoQWxwaGEiLCJmY2FtZWxDYXNlIiwiYWxsIiwibGV0dGVyIiwidG9VcHBlckNhc2UiLCJjb21wbGV0ZWQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwicmVhZHkiLCJwcm90b3R5cGUiLCJqcXVlcnkiLCJjb25zdHJ1Y3RvciIsIm1hdGNoIiwiZWxlbSIsInRoaXMiLCJjaGFyQXQiLCJsZW5ndGgiLCJleGVjIiwiZmluZCIsIm1lcmdlIiwicGFyc2VIVE1MIiwibm9kZVR5cGUiLCJvd25lckRvY3VtZW50IiwidGVzdCIsImlzUGxhaW5PYmplY3QiLCJpc0Z1bmN0aW9uIiwiYXR0ciIsImdldEVsZW1lbnRCeUlkIiwicGFyZW50Tm9kZSIsIm1ha2VBcnJheSIsInRvQXJyYXkiLCJjYWxsIiwiZ2V0IiwibnVtIiwicHVzaFN0YWNrIiwiZWxlbXMiLCJyZXQiLCJwcmV2T2JqZWN0IiwiZWFjaCIsImNhbGxiYWNrIiwiYXJncyIsInByb21pc2UiLCJkb25lIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJmaXJzdCIsImVxIiwibGFzdCIsImkiLCJsZW4iLCJqIiwibWFwIiwiZW5kIiwic29ydCIsInNwbGljZSIsImV4dGVuZCIsIm9wdGlvbnMiLCJuYW1lIiwic3JjIiwiY29weSIsImNvcHlJc0FycmF5IiwiY2xvbmUiLCJ0YXJnZXQiLCJkZWVwIiwiaXNBcnJheSIsImV4cGFuZG8iLCJNYXRoIiwicmFuZG9tIiwicmVwbGFjZSIsIm5vQ29uZmxpY3QiLCJpc1JlYWR5IiwicmVhZHlXYWl0IiwiaG9sZFJlYWR5IiwiaG9sZCIsIndhaXQiLCJyZXNvbHZlV2l0aCIsInRyaWdnZXIiLCJvZmYiLCJvYmoiLCJ0eXBlIiwiQXJyYXkiLCJpc1dpbmRvdyIsImlzTnVtZXJpYyIsImlzTmFOIiwicGFyc2VGbG9hdCIsImlzRmluaXRlIiwiU3RyaW5nIiwiZSIsImlzRW1wdHlPYmplY3QiLCJlcnJvciIsIm1zZyIsIkVycm9yIiwiZGF0YSIsImtlZXBTY3JpcHRzIiwicGFyc2VkIiwic2NyaXB0cyIsImNyZWF0ZUVsZW1lbnQiLCJidWlsZEZyYWdtZW50IiwicmVtb3ZlIiwiY2hpbGROb2RlcyIsInBhcnNlSlNPTiIsIkpTT04iLCJwYXJzZSIsInBhcnNlWE1MIiwieG1sIiwidG1wIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJub29wIiwiZ2xvYmFsRXZhbCIsImNvZGUiLCJzY3JpcHQiLCJpbmRpcmVjdCIsImV2YWwiLCJ0ZXh0IiwiaGVhZCIsImFwcGVuZENoaWxkIiwicmVtb3ZlQ2hpbGQiLCJjYW1lbENhc2UiLCJzdHJpbmciLCJub2RlTmFtZSIsInRvTG93ZXJDYXNlIiwidmFsdWUiLCJpc0FycmF5bGlrZSIsImFyciIsInJlc3VsdHMiLCJPYmplY3QiLCJpbkFycmF5Iiwic2Vjb25kIiwibCIsImdyZXAiLCJpbnYiLCJyZXRWYWwiLCJhcmciLCJndWlkIiwicHJveHkiLCJhY2Nlc3MiLCJrZXkiLCJjaGFpbmFibGUiLCJlbXB0eUdldCIsInJhdyIsImJ1bGsiLCJub3ciLCJEYXRlIiwic3dhcCIsIm9sZCIsInN0eWxlIiwiRGVmZXJyZWQiLCJyZWFkeVN0YXRlIiwic2V0VGltZW91dCIsImFkZEV2ZW50TGlzdGVuZXIiLCJzcGxpdCIsInN1cHBvcnQiLCJjYWNoZWRydW5zIiwiRXhwciIsImdldFRleHQiLCJpc1hNTCIsImNvbXBpbGUiLCJvdXRlcm1vc3RDb250ZXh0Iiwic29ydElucHV0Iiwic2V0RG9jdW1lbnQiLCJkb2N1bWVudElzSFRNTCIsInJidWdneVFTQSIsInJidWdneU1hdGNoZXMiLCJtYXRjaGVzIiwiY29udGFpbnMiLCJwcmVmZXJyZWREb2MiLCJkaXJydW5zIiwiY2xhc3NDYWNoZSIsImNyZWF0ZUNhY2hlIiwidG9rZW5DYWNoZSIsImNvbXBpbGVyQ2FjaGUiLCJoYXNEdXBsaWNhdGUiLCJzb3J0T3JkZXIiLCJhIiwiYiIsInN0cnVuZGVmaW5lZCIsIk1BWF9ORUdBVElWRSIsImhhc093biIsInBvcCIsInB1c2hfbmF0aXZlIiwiYm9vbGVhbnMiLCJ3aGl0ZXNwYWNlIiwiY2hhcmFjdGVyRW5jb2RpbmciLCJpZGVudGlmaWVyIiwiYXR0cmlidXRlcyIsInBzZXVkb3MiLCJydHJpbSIsIlJlZ0V4cCIsInJjb21tYSIsInJjb21iaW5hdG9ycyIsInJzaWJsaW5nIiwicmF0dHJpYnV0ZVF1b3RlcyIsInJwc2V1ZG8iLCJyaWRlbnRpZmllciIsIm1hdGNoRXhwciIsIklEIiwiQ0xBU1MiLCJUQUciLCJBVFRSIiwiUFNFVURPIiwiQ0hJTEQiLCJib29sIiwibmVlZHNDb250ZXh0Iiwicm5hdGl2ZSIsInJpbnB1dHMiLCJyaGVhZGVyIiwicmVzY2FwZSIsInJ1bmVzY2FwZSIsImZ1bmVzY2FwZSIsIl8iLCJlc2NhcGVkIiwiZXNjYXBlZFdoaXRlc3BhY2UiLCJoaWdoIiwiZnJvbUNoYXJDb2RlIiwiZWxzIiwiU2l6emxlIiwic2VlZCIsIm0iLCJncm91cHMiLCJuaWQiLCJuZXdDb250ZXh0IiwibmV3U2VsZWN0b3IiLCJpZCIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJxc2EiLCJ0b2tlbml6ZSIsImdldEF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsInRvU2VsZWN0b3IiLCJqb2luIiwicXVlcnlTZWxlY3RvckFsbCIsInFzYUVycm9yIiwicmVtb3ZlQXR0cmlidXRlIiwic2VsZWN0Iiwia2V5cyIsImNhY2hlIiwiY2FjaGVMZW5ndGgiLCJzaGlmdCIsIm1hcmtGdW5jdGlvbiIsImFzc2VydCIsImRpdiIsImFkZEhhbmRsZSIsImF0dHJzIiwiaGFuZGxlciIsImF0dHJIYW5kbGUiLCJzaWJsaW5nQ2hlY2siLCJjdXIiLCJkaWZmIiwic291cmNlSW5kZXgiLCJuZXh0U2libGluZyIsImNyZWF0ZUlucHV0UHNldWRvIiwiY3JlYXRlQnV0dG9uUHNldWRvIiwiY3JlYXRlUG9zaXRpb25hbFBzZXVkbyIsImFyZ3VtZW50IiwibWF0Y2hJbmRleGVzIiwibm9kZSIsImRvYyIsInBhcmVudCIsImRlZmF1bHRWaWV3IiwiYXR0YWNoRXZlbnQiLCJ0b3AiLCJjbGFzc05hbWUiLCJjcmVhdGVDb21tZW50IiwiaW5uZXJIVE1MIiwiZmlyc3RDaGlsZCIsImdldEJ5SWQiLCJnZXRFbGVtZW50c0J5TmFtZSIsImZpbHRlciIsImF0dHJJZCIsImdldEF0dHJpYnV0ZU5vZGUiLCJ0YWciLCJpbnB1dCIsIm1hdGNoZXNTZWxlY3RvciIsIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsIm1vek1hdGNoZXNTZWxlY3RvciIsIm9NYXRjaGVzU2VsZWN0b3IiLCJtc01hdGNoZXNTZWxlY3RvciIsImRpc2Nvbm5lY3RlZE1hdGNoIiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJhZG93biIsImJ1cCIsImNvbXBhcmUiLCJzb3J0RGV0YWNoZWQiLCJhdXAiLCJhcCIsImJwIiwidW5zaGlmdCIsImV4cHIiLCJlbGVtZW50cyIsInZhbCIsInNwZWNpZmllZCIsInVuaXF1ZVNvcnQiLCJkdXBsaWNhdGVzIiwiZGV0ZWN0RHVwbGljYXRlcyIsInNvcnRTdGFibGUiLCJ0ZXh0Q29udGVudCIsIm5vZGVWYWx1ZSIsInNlbGVjdG9ycyIsImNyZWF0ZVBzZXVkbyIsInJlbGF0aXZlIiwiPiIsImRpciIsIiAiLCIrIiwifiIsInByZUZpbHRlciIsImV4Y2VzcyIsInVucXVvdGVkIiwibm9kZU5hbWVTZWxlY3RvciIsInBhdHRlcm4iLCJvcGVyYXRvciIsImNoZWNrIiwicmVzdWx0Iiwid2hhdCIsInNpbXBsZSIsImZvcndhcmQiLCJvZlR5cGUiLCJvdXRlckNhY2hlIiwibm9kZUluZGV4Iiwic3RhcnQiLCJ1c2VDYWNoZSIsImxhc3RDaGlsZCIsInBzZXVkbyIsInNldEZpbHRlcnMiLCJpZHgiLCJtYXRjaGVkIiwibm90IiwibWF0Y2hlciIsInVubWF0Y2hlZCIsImhhcyIsImlubmVyVGV4dCIsImxhbmciLCJlbGVtTGFuZyIsImhhc2giLCJyb290IiwiZm9jdXMiLCJhY3RpdmVFbGVtZW50IiwiaGFzRm9jdXMiLCJocmVmIiwidGFiSW5kZXgiLCJlbmFibGVkIiwiZGlzYWJsZWQiLCJjaGVja2VkIiwic2VsZWN0ZWQiLCJzZWxlY3RlZEluZGV4IiwiZW1wdHkiLCJoZWFkZXIiLCJidXR0b24iLCJldmVuIiwib2RkIiwibHQiLCJndCIsInJhZGlvIiwiY2hlY2tib3giLCJmaWxlIiwicGFzc3dvcmQiLCJpbWFnZSIsInN1Ym1pdCIsInJlc2V0IiwiZmlsdGVycyIsInBhcnNlT25seSIsInRva2VucyIsInNvRmFyIiwicHJlRmlsdGVycyIsImNhY2hlZCIsImFkZENvbWJpbmF0b3IiLCJjb21iaW5hdG9yIiwiYmFzZSIsImNoZWNrTm9uRWxlbWVudHMiLCJkb25lTmFtZSIsImRpcmtleSIsImVsZW1lbnRNYXRjaGVyIiwibWF0Y2hlcnMiLCJjb25kZW5zZSIsIm5ld1VubWF0Y2hlZCIsIm1hcHBlZCIsInNldE1hdGNoZXIiLCJwb3N0RmlsdGVyIiwicG9zdEZpbmRlciIsInBvc3RTZWxlY3RvciIsInRlbXAiLCJwcmVNYXAiLCJwb3N0TWFwIiwicHJlZXhpc3RpbmciLCJtdWx0aXBsZUNvbnRleHRzIiwibWF0Y2hlckluIiwibWF0Y2hlck91dCIsIm1hdGNoZXJGcm9tVG9rZW5zIiwiY2hlY2tDb250ZXh0IiwibGVhZGluZ1JlbGF0aXZlIiwiaW1wbGljaXRSZWxhdGl2ZSIsIm1hdGNoQ29udGV4dCIsIm1hdGNoQW55Q29udGV4dCIsIm1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyIsImVsZW1lbnRNYXRjaGVycyIsInNldE1hdGNoZXJzIiwibWF0Y2hlckNhY2hlZFJ1bnMiLCJieVNldCIsImJ5RWxlbWVudCIsInN1cGVyTWF0Y2hlciIsImV4cGFuZENvbnRleHQiLCJzZXRNYXRjaGVkIiwibWF0Y2hlZENvdW50Iiwib3V0ZXJtb3N0IiwiY29udGV4dEJhY2t1cCIsImRpcnJ1bnNVbmlxdWUiLCJncm91cCIsImNvbnRleHRzIiwidG9rZW4iLCJkaXYxIiwiZGVmYXVsdFZhbHVlIiwidW5pcXVlIiwiaXNYTUxEb2MiLCJvcHRpb25zQ2FjaGUiLCJjcmVhdGVPcHRpb25zIiwib2JqZWN0IiwiZmxhZyIsIkNhbGxiYWNrcyIsIm1lbW9yeSIsImZpcmVkIiwiZmlyaW5nIiwiZmlyaW5nU3RhcnQiLCJmaXJpbmdMZW5ndGgiLCJmaXJpbmdJbmRleCIsImxpc3QiLCJzdGFjayIsIm9uY2UiLCJmaXJlIiwic3RvcE9uRmFsc2UiLCJzZWxmIiwiZGlzYWJsZSIsImFkZCIsImluZGV4IiwibG9jayIsImxvY2tlZCIsImZpcmVXaXRoIiwiZnVuYyIsInR1cGxlcyIsInN0YXRlIiwiYWx3YXlzIiwiZGVmZXJyZWQiLCJmYWlsIiwidGhlbiIsImZucyIsIm5ld0RlZmVyIiwidHVwbGUiLCJhY3Rpb24iLCJyZXR1cm5lZCIsInJlc29sdmUiLCJyZWplY3QiLCJwcm9ncmVzcyIsIm5vdGlmeSIsInBpcGUiLCJzdGF0ZVN0cmluZyIsIndoZW4iLCJzdWJvcmRpbmF0ZSIsInJlc29sdmVWYWx1ZXMiLCJyZW1haW5pbmciLCJ1cGRhdGVGdW5jIiwidmFsdWVzIiwicHJvZ3Jlc3NWYWx1ZXMiLCJub3RpZnlXaXRoIiwicHJvZ3Jlc3NDb250ZXh0cyIsInJlc29sdmVDb250ZXh0cyIsImZyYWdtZW50IiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsIm9wdCIsImNoZWNrT24iLCJvcHRTZWxlY3RlZCIsInJlbGlhYmxlTWFyZ2luUmlnaHQiLCJib3hTaXppbmdSZWxpYWJsZSIsInBpeGVsUG9zaXRpb24iLCJub0Nsb25lQ2hlY2tlZCIsImNsb25lTm9kZSIsIm9wdERpc2FibGVkIiwicmFkaW9WYWx1ZSIsImNoZWNrQ2xvbmUiLCJmb2N1c2luQnViYmxlcyIsImJhY2tncm91bmRDbGlwIiwiY2xlYXJDbG9uZVN0eWxlIiwiY29udGFpbmVyIiwibWFyZ2luRGl2IiwiZGl2UmVzZXQiLCJib2R5IiwiY3NzVGV4dCIsInpvb20iLCJib3hTaXppbmciLCJvZmZzZXRXaWR0aCIsImdldENvbXB1dGVkU3R5bGUiLCJ3aWR0aCIsIm1hcmdpblJpZ2h0IiwiZGF0YV91c2VyIiwiZGF0YV9wcml2IiwicmJyYWNlIiwicm11bHRpRGFzaCIsIkRhdGEiLCJkZWZpbmVQcm9wZXJ0eSIsInVpZCIsImFjY2VwdHMiLCJvd25lciIsImRlc2NyaXB0b3IiLCJ1bmxvY2siLCJkZWZpbmVQcm9wZXJ0aWVzIiwic2V0IiwicHJvcCIsInN0b3JlZCIsImNhbWVsIiwiaGFzRGF0YSIsImRpc2NhcmQiLCJhY2NlcHREYXRhIiwicmVtb3ZlRGF0YSIsIl9kYXRhIiwiX3JlbW92ZURhdGEiLCJkYXRhQXR0ciIsImNhbWVsS2V5IiwicXVldWUiLCJkZXF1ZXVlIiwic3RhcnRMZW5ndGgiLCJob29rcyIsIl9xdWV1ZUhvb2tzIiwibmV4dCIsInN0b3AiLCJzZXR0ZXIiLCJkZWxheSIsInRpbWUiLCJmeCIsInNwZWVkcyIsInRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJjbGVhclF1ZXVlIiwiY291bnQiLCJkZWZlciIsIm5vZGVIb29rIiwiYm9vbEhvb2siLCJyY2xhc3MiLCJycmV0dXJuIiwicmZvY3VzYWJsZSIsInJlbW92ZUF0dHIiLCJyZW1vdmVQcm9wIiwicHJvcEZpeCIsImFkZENsYXNzIiwiY2xhc3NlcyIsImNsYXp6IiwicHJvY2VlZCIsInJlbW92ZUNsYXNzIiwidG9nZ2xlQ2xhc3MiLCJzdGF0ZVZhbCIsImNsYXNzTmFtZXMiLCJoYXNDbGFzcyIsInZhbEhvb2tzIiwib3B0aW9uIiwib25lIiwibWF4Iiwib3B0aW9uU2V0IiwiblR5cGUiLCJhdHRySG9va3MiLCJwcm9wTmFtZSIsImF0dHJOYW1lcyIsImZvciIsImNsYXNzIiwibm90eG1sIiwicHJvcEhvb2tzIiwiaGFzQXR0cmlidXRlIiwiZ2V0dGVyIiwicmtleUV2ZW50Iiwicm1vdXNlRXZlbnQiLCJyZm9jdXNNb3JwaCIsInJ0eXBlbmFtZXNwYWNlIiwicmV0dXJuVHJ1ZSIsInJldHVybkZhbHNlIiwic2FmZUFjdGl2ZUVsZW1lbnQiLCJlcnIiLCJldmVudCIsImdsb2JhbCIsInR5cGVzIiwiaGFuZGxlT2JqSW4iLCJldmVudEhhbmRsZSIsImV2ZW50cyIsInQiLCJoYW5kbGVPYmoiLCJzcGVjaWFsIiwiaGFuZGxlcnMiLCJuYW1lc3BhY2VzIiwib3JpZ1R5cGUiLCJlbGVtRGF0YSIsImhhbmRsZSIsInRyaWdnZXJlZCIsImRpc3BhdGNoIiwiZGVsZWdhdGVUeXBlIiwiYmluZFR5cGUiLCJuYW1lc3BhY2UiLCJkZWxlZ2F0ZUNvdW50Iiwic2V0dXAiLCJtYXBwZWRUeXBlcyIsIm9yaWdDb3VudCIsInRlYXJkb3duIiwicmVtb3ZlRXZlbnQiLCJvbmx5SGFuZGxlcnMiLCJidWJibGVUeXBlIiwib250eXBlIiwiZXZlbnRQYXRoIiwiRXZlbnQiLCJpc1RyaWdnZXIiLCJuYW1lc3BhY2VfcmUiLCJub0J1YmJsZSIsInBhcmVudFdpbmRvdyIsImlzUHJvcGFnYXRpb25TdG9wcGVkIiwicHJldmVudERlZmF1bHQiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJfZGVmYXVsdCIsImZpeCIsImhhbmRsZXJRdWV1ZSIsImRlbGVnYXRlVGFyZ2V0IiwicHJlRGlzcGF0Y2giLCJjdXJyZW50VGFyZ2V0IiwiaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQiLCJzdG9wUHJvcGFnYXRpb24iLCJwb3N0RGlzcGF0Y2giLCJzZWwiLCJwcm9wcyIsImZpeEhvb2tzIiwia2V5SG9va3MiLCJvcmlnaW5hbCIsIndoaWNoIiwiY2hhckNvZGUiLCJrZXlDb2RlIiwibW91c2VIb29rcyIsImV2ZW50RG9jIiwicGFnZVgiLCJjbGllbnRYIiwic2Nyb2xsTGVmdCIsImNsaWVudExlZnQiLCJwYWdlWSIsImNsaWVudFkiLCJzY3JvbGxUb3AiLCJjbGllbnRUb3AiLCJvcmlnaW5hbEV2ZW50IiwiZml4SG9vayIsImxvYWQiLCJibHVyIiwiY2xpY2siLCJiZWZvcmV1bmxvYWQiLCJyZXR1cm5WYWx1ZSIsInNpbXVsYXRlIiwiYnViYmxlIiwiaXNTaW11bGF0ZWQiLCJkZWZhdWx0UHJldmVudGVkIiwiZ2V0UHJldmVudERlZmF1bHQiLCJ0aW1lU3RhbXAiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsIm9yaWciLCJyZWxhdGVkIiwicmVsYXRlZFRhcmdldCIsImF0dGFjaGVzIiwib24iLCJvcmlnRm4iLCJ0cmlnZ2VySGFuZGxlciIsImlzU2ltcGxlIiwicnBhcmVudHNwcmV2Iiwicm5lZWRzQ29udGV4dCIsImd1YXJhbnRlZWRVbmlxdWUiLCJjaGlsZHJlbiIsImNvbnRlbnRzIiwicHJldiIsInRhcmdldHMiLCJ3aW5ub3ciLCJpcyIsImNsb3Nlc3QiLCJwb3MiLCJwcmV2QWxsIiwiYWRkQmFjayIsInNpYmxpbmciLCJwYXJlbnRzIiwicGFyZW50c1VudGlsIiwidW50aWwiLCJuZXh0QWxsIiwibmV4dFVudGlsIiwicHJldlVudGlsIiwic2libGluZ3MiLCJjb250ZW50RG9jdW1lbnQiLCJyZXZlcnNlIiwidHJ1bmNhdGUiLCJuIiwicXVhbGlmaWVyIiwicnhodG1sVGFnIiwicnRhZ05hbWUiLCJyaHRtbCIsInJub0lubmVyaHRtbCIsIm1hbmlwdWxhdGlvbl9yY2hlY2thYmxlVHlwZSIsInJjaGVja2VkIiwicnNjcmlwdFR5cGUiLCJyc2NyaXB0VHlwZU1hc2tlZCIsInJjbGVhblNjcmlwdCIsIndyYXBNYXAiLCJ0aGVhZCIsImNvbCIsInRyIiwidGQiLCJvcHRncm91cCIsInRib2R5IiwidGZvb3QiLCJjb2xncm91cCIsImNhcHRpb24iLCJ0aCIsImFwcGVuZCIsImNyZWF0ZVRleHROb2RlIiwiZG9tTWFuaXAiLCJtYW5pcHVsYXRpb25UYXJnZXQiLCJwcmVwZW5kIiwiaW5zZXJ0QmVmb3JlIiwiYmVmb3JlIiwiYWZ0ZXIiLCJrZWVwRGF0YSIsImNsZWFuRGF0YSIsImdldEFsbCIsInNldEdsb2JhbEV2YWwiLCJkYXRhQW5kRXZlbnRzIiwiZGVlcERhdGFBbmRFdmVudHMiLCJodG1sIiwicmVwbGFjZVdpdGgiLCJkZXRhY2giLCJhbGxvd0ludGVyc2VjdGlvbiIsImhhc1NjcmlwdHMiLCJpTm9DbG9uZSIsImRpc2FibGVTY3JpcHQiLCJyZXN0b3JlU2NyaXB0IiwiX2V2YWxVcmwiLCJhcHBlbmRUbyIsInByZXBlbmRUbyIsImluc2VydEFmdGVyIiwicmVwbGFjZUFsbCIsImluc2VydCIsInNyY0VsZW1lbnRzIiwiZGVzdEVsZW1lbnRzIiwiaW5QYWdlIiwiZml4SW5wdXQiLCJjbG9uZUNvcHlFdmVudCIsInNlbGVjdGlvbiIsIndyYXAiLCJub2RlcyIsInVybCIsImFqYXgiLCJkYXRhVHlwZSIsImFzeW5jIiwidGhyb3dzIiwiY29udGVudCIsInJlZkVsZW1lbnRzIiwiZGVzdCIsInBkYXRhT2xkIiwicGRhdGFDdXIiLCJ1ZGF0YU9sZCIsInVkYXRhQ3VyIiwid3JhcEFsbCIsImZpcnN0RWxlbWVudENoaWxkIiwid3JhcElubmVyIiwidW53cmFwIiwiY3VyQ1NTIiwiaWZyYW1lIiwicmRpc3BsYXlzd2FwIiwicm1hcmdpbiIsInJudW1zcGxpdCIsInJudW1ub25weCIsInJyZWxOdW0iLCJlbGVtZGlzcGxheSIsIkJPRFkiLCJjc3NTaG93IiwicG9zaXRpb24iLCJ2aXNpYmlsaXR5IiwiZGlzcGxheSIsImNzc05vcm1hbFRyYW5zZm9ybSIsImxldHRlclNwYWNpbmciLCJmb250V2VpZ2h0IiwiY3NzRXhwYW5kIiwiY3NzUHJlZml4ZXMiLCJ2ZW5kb3JQcm9wTmFtZSIsImNhcE5hbWUiLCJvcmlnTmFtZSIsImlzSGlkZGVuIiwiZWwiLCJjc3MiLCJnZXRTdHlsZXMiLCJzaG93SGlkZSIsInNob3ciLCJoaWRkZW4iLCJjc3NfZGVmYXVsdERpc3BsYXkiLCJzdHlsZXMiLCJoaWRlIiwidG9nZ2xlIiwiY3NzSG9va3MiLCJvcGFjaXR5IiwiY29tcHV0ZWQiLCJjc3NOdW1iZXIiLCJjb2x1bW5Db3VudCIsImZpbGxPcGFjaXR5IiwibGluZUhlaWdodCIsIm9yZGVyIiwib3JwaGFucyIsIndpZG93cyIsInpJbmRleCIsImNzc1Byb3BzIiwiZmxvYXQiLCJleHRyYSIsIl9jb21wdXRlZCIsIm1pbldpZHRoIiwibWF4V2lkdGgiLCJnZXRQcm9wZXJ0eVZhbHVlIiwic2V0UG9zaXRpdmVOdW1iZXIiLCJzdWJ0cmFjdCIsImF1Z21lbnRXaWR0aE9ySGVpZ2h0IiwiaXNCb3JkZXJCb3giLCJnZXRXaWR0aE9ySGVpZ2h0IiwidmFsdWVJc0JvcmRlckJveCIsIm9mZnNldEhlaWdodCIsImFjdHVhbERpc3BsYXkiLCJjb250ZW50V2luZG93Iiwid3JpdGUiLCJjbG9zZSIsInZpc2libGUiLCJtYXJnaW4iLCJwYWRkaW5nIiwiYm9yZGVyIiwicHJlZml4Iiwic3VmZml4IiwiZXhwYW5kIiwiZXhwYW5kZWQiLCJwYXJ0cyIsInIyMCIsInJicmFja2V0IiwickNSTEYiLCJyc3VibWl0dGVyVHlwZXMiLCJyc3VibWl0dGFibGUiLCJzZXJpYWxpemUiLCJwYXJhbSIsInNlcmlhbGl6ZUFycmF5IiwidHJhZGl0aW9uYWwiLCJzIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiYWpheFNldHRpbmdzIiwiYnVpbGRQYXJhbXMiLCJ2IiwiaG92ZXIiLCJmbk92ZXIiLCJmbk91dCIsImJpbmQiLCJ1bmJpbmQiLCJkZWxlZ2F0ZSIsInVuZGVsZWdhdGUiLCJhamF4TG9jUGFydHMiLCJhamF4TG9jYXRpb24iLCJhamF4X25vbmNlIiwiYWpheF9ycXVlcnkiLCJyaGFzaCIsInJ0cyIsInJoZWFkZXJzIiwicmxvY2FsUHJvdG9jb2wiLCJybm9Db250ZW50IiwicnByb3RvY29sIiwicnVybCIsIl9sb2FkIiwicHJlZmlsdGVycyIsInRyYW5zcG9ydHMiLCJhbGxUeXBlcyIsImFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyIsInN0cnVjdHVyZSIsImRhdGFUeXBlRXhwcmVzc2lvbiIsImRhdGFUeXBlcyIsImluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzIiwib3JpZ2luYWxPcHRpb25zIiwianFYSFIiLCJpbnNwZWN0ZWQiLCJzZWVraW5nVHJhbnNwb3J0IiwiaW5zcGVjdCIsInByZWZpbHRlck9yRmFjdG9yeSIsImRhdGFUeXBlT3JUcmFuc3BvcnQiLCJhamF4RXh0ZW5kIiwiZmxhdE9wdGlvbnMiLCJwYXJhbXMiLCJyZXNwb25zZSIsInJlc3BvbnNlVGV4dCIsImNvbXBsZXRlIiwic3RhdHVzIiwiYWN0aXZlIiwibGFzdE1vZGlmaWVkIiwiZXRhZyIsImlzTG9jYWwiLCJwcm9jZXNzRGF0YSIsImNvbnRlbnRUeXBlIiwiKiIsImpzb24iLCJyZXNwb25zZUZpZWxkcyIsImNvbnZlcnRlcnMiLCIqIHRleHQiLCJ0ZXh0IGh0bWwiLCJ0ZXh0IGpzb24iLCJ0ZXh0IHhtbCIsImFqYXhTZXR1cCIsInNldHRpbmdzIiwiYWpheFByZWZpbHRlciIsImFqYXhUcmFuc3BvcnQiLCJ0cmFuc3BvcnQiLCJjYWNoZVVSTCIsInJlc3BvbnNlSGVhZGVyc1N0cmluZyIsInJlc3BvbnNlSGVhZGVycyIsInRpbWVvdXRUaW1lciIsImZpcmVHbG9iYWxzIiwiY2FsbGJhY2tDb250ZXh0IiwiZ2xvYmFsRXZlbnRDb250ZXh0IiwiY29tcGxldGVEZWZlcnJlZCIsInN0YXR1c0NvZGUiLCJyZXF1ZXN0SGVhZGVycyIsInJlcXVlc3RIZWFkZXJzTmFtZXMiLCJzdHJBYm9ydCIsImdldFJlc3BvbnNlSGVhZGVyIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwic2V0UmVxdWVzdEhlYWRlciIsImxuYW1lIiwib3ZlcnJpZGVNaW1lVHlwZSIsIm1pbWVUeXBlIiwiYWJvcnQiLCJzdGF0dXNUZXh0IiwiZmluYWxUZXh0Iiwic3VjY2VzcyIsIm1ldGhvZCIsImNyb3NzRG9tYWluIiwiaGFzQ29udGVudCIsImlmTW9kaWZpZWQiLCJoZWFkZXJzIiwiYmVmb3JlU2VuZCIsInNlbmQiLCJuYXRpdmVTdGF0dXNUZXh0IiwicmVzcG9uc2VzIiwiaXNTdWNjZXNzIiwibW9kaWZpZWQiLCJhamF4SGFuZGxlUmVzcG9uc2VzIiwiYWpheENvbnZlcnQiLCJyZWplY3RXaXRoIiwiZ2V0SlNPTiIsImdldFNjcmlwdCIsImN0IiwiZmluYWxEYXRhVHlwZSIsImZpcnN0RGF0YVR5cGUiLCJjb252MiIsImN1cnJlbnQiLCJjb252IiwiZGF0YUZpbHRlciIsInRleHQgc2NyaXB0IiwiY2hhcnNldCIsInNjcmlwdENoYXJzZXQiLCJldnQiLCJvbGRDYWxsYmFja3MiLCJyanNvbnAiLCJqc29ucCIsImpzb25wQ2FsbGJhY2siLCJvcmlnaW5hbFNldHRpbmdzIiwiY2FsbGJhY2tOYW1lIiwib3ZlcndyaXR0ZW4iLCJyZXNwb25zZUNvbnRhaW5lciIsImpzb25Qcm9wIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJ4aHJTdXBwb3J0ZWQiLCJ4aHJTdWNjZXNzU3RhdHVzIiwxMjIzLCJ4aHJJZCIsInhockNhbGxiYWNrcyIsIkFjdGl2ZVhPYmplY3QiLCJjb3JzIiwib3BlbiIsInVzZXJuYW1lIiwieGhyRmllbGRzIiwib25sb2FkIiwib25lcnJvciIsImZ4Tm93IiwidGltZXJJZCIsInJmeHR5cGVzIiwicmZ4bnVtIiwicnJ1biIsImFuaW1hdGlvblByZWZpbHRlcnMiLCJkZWZhdWx0UHJlZmlsdGVyIiwidHdlZW5lcnMiLCJ0d2VlbiIsImNyZWF0ZVR3ZWVuIiwidW5pdCIsInNjYWxlIiwibWF4SXRlcmF0aW9ucyIsImNyZWF0ZUZ4Tm93IiwiYW5pbWF0aW9uIiwiY29sbGVjdGlvbiIsIkFuaW1hdGlvbiIsInByb3BlcnRpZXMiLCJzdG9wcGVkIiwidGljayIsImN1cnJlbnRUaW1lIiwic3RhcnRUaW1lIiwiZHVyYXRpb24iLCJwZXJjZW50IiwidHdlZW5zIiwicnVuIiwib3B0cyIsInNwZWNpYWxFYXNpbmciLCJvcmlnaW5hbFByb3BlcnRpZXMiLCJUd2VlbiIsImVhc2luZyIsImdvdG9FbmQiLCJwcm9wRmlsdGVyIiwidGltZXIiLCJhbmltIiwidHdlZW5lciIsInByZWZpbHRlciIsIm9sZGZpcmUiLCJkYXRhU2hvdyIsInVucXVldWVkIiwib3ZlcmZsb3ciLCJvdmVyZmxvd1giLCJvdmVyZmxvd1kiLCJlYXNlZCIsInN0ZXAiLCJjc3NGbiIsInNwZWVkIiwiYW5pbWF0ZSIsImdlbkZ4IiwiZmFkZVRvIiwidG8iLCJvcHRhbGwiLCJkb0FuaW1hdGlvbiIsImZpbmlzaCIsInN0b3BRdWV1ZSIsInRpbWVycyIsImluY2x1ZGVXaWR0aCIsImhlaWdodCIsInNsaWRlRG93biIsInNsaWRlVXAiLCJzbGlkZVRvZ2dsZSIsImZhZGVJbiIsImZhZGVPdXQiLCJmYWRlVG9nZ2xlIiwibGluZWFyIiwicCIsInN3aW5nIiwiY29zIiwiUEkiLCJpbnRlcnZhbCIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsInNsb3ciLCJmYXN0IiwiYW5pbWF0ZWQiLCJvZmZzZXQiLCJzZXRPZmZzZXQiLCJ3aW4iLCJib3giLCJsZWZ0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiZ2V0V2luZG93IiwicGFnZVlPZmZzZXQiLCJwYWdlWE9mZnNldCIsImN1clBvc2l0aW9uIiwiY3VyTGVmdCIsImN1ckNTU1RvcCIsImN1clRvcCIsImN1ck9mZnNldCIsImN1ckNTU0xlZnQiLCJjYWxjdWxhdGVQb3NpdGlvbiIsImN1ckVsZW0iLCJ1c2luZyIsIm9mZnNldFBhcmVudCIsInBhcmVudE9mZnNldCIsInNjcm9sbFRvIiwiSGVpZ2h0IiwiV2lkdGgiLCJkZWZhdWx0RXh0cmEiLCJmdW5jTmFtZSIsInNpemUiLCJhbmRTZWxmIiwibW9kdWxlIiwiZXhwb3J0cyIsImRlZmluZSIsImFtZCJdLCJtYXBwaW5ncyI6Ijs7O0NBYUEsU0FBV0EsRUFBUUMsV0FPbkIsR0FFQ0MsR0FHQUMsRUFJQUMsUUFBMkJILFdBRzNCSSxFQUFXTCxFQUFPSyxTQUNsQkMsRUFBV04sRUFBT00sU0FDbEJDLEVBQVVELEVBQVNFLGdCQUduQkMsRUFBVVQsRUFBT1UsT0FHakJDLEVBQUtYLEVBQU9ZLEVBR1pDLEtBR0FDLEtBRUFDLEVBQWUsUUFHZkMsRUFBY0YsRUFBZ0JHLE9BQzlCQyxFQUFZSixFQUFnQkssS0FDNUJDLEVBQWFOLEVBQWdCTyxNQUM3QkMsRUFBZVIsRUFBZ0JTLFFBQy9CQyxFQUFnQlgsRUFBV1ksU0FDM0JDLEVBQWNiLEVBQVdjLGVBQ3pCQyxFQUFZYixFQUFhYyxLQUd6Qm5CLEVBQVMsU0FBVW9CLEVBQVVDLEdBRTVCLE1BQU8sSUFBSXJCLEdBQU9zQixHQUFHQyxLQUFNSCxFQUFVQyxFQUFTN0IsSUFJL0NnQyxFQUFZLHNDQUFzQ0MsT0FHbERDLEVBQWlCLE9BS2pCQyxFQUFhLHNDQUdiQyxFQUFhLDZCQUdiQyxFQUFZLFFBQ1pDLEVBQWEsZUFHYkMsRUFBYSxTQUFVQyxFQUFLQyxHQUMzQixNQUFPQSxHQUFPQyxlQUlmQyxFQUFZLFdBQ1h2QyxFQUFTd0Msb0JBQXFCLG1CQUFvQkQsR0FBVyxHQUM3RDdDLEVBQU84QyxvQkFBcUIsT0FBUUQsR0FBVyxHQUMvQ25DLEVBQU9xQyxRQUdUckMsR0FBT3NCLEdBQUt0QixFQUFPc0MsV0FFbEJDLE9BQVFsQyxFQUVSbUMsWUFBYXhDLEVBQ2J1QixLQUFNLFNBQVVILEVBQVVDLEVBQVM3QixHQUNsQyxHQUFJaUQsR0FBT0MsQ0FHWCxLQUFNdEIsRUFDTCxNQUFPdUIsS0FJUixJQUF5QixnQkFBYnZCLEdBQXdCLENBVW5DLEdBUENxQixFQUYyQixNQUF2QnJCLEVBQVN3QixPQUFPLElBQXlELE1BQTNDeEIsRUFBU3dCLE9BQVF4QixFQUFTeUIsT0FBUyxJQUFlekIsRUFBU3lCLFFBQVUsR0FFN0YsS0FBTXpCLEVBQVUsTUFHbEJPLEVBQVdtQixLQUFNMUIsSUFJckJxQixJQUFVQSxFQUFNLElBQU9wQixFQStDckIsT0FBTUEsR0FBV0EsRUFBUWtCLFFBQ3RCbEIsR0FBVzdCLEdBQWF1RCxLQUFNM0IsR0FLaEN1QixLQUFLSCxZQUFhbkIsR0FBVTBCLEtBQU0zQixFQWxEekMsSUFBS3FCLEVBQU0sR0FBSyxDQVdmLEdBVkFwQixFQUFVQSxZQUFtQnJCLEdBQVNxQixFQUFRLEdBQUtBLEVBR25EckIsRUFBT2dELE1BQU9MLEtBQU0zQyxFQUFPaUQsVUFDMUJSLEVBQU0sR0FDTnBCLEdBQVdBLEVBQVE2QixTQUFXN0IsRUFBUThCLGVBQWlCOUIsRUFBVXpCLEdBQ2pFLElBSUlnQyxFQUFXd0IsS0FBTVgsRUFBTSxLQUFRekMsRUFBT3FELGNBQWVoQyxHQUN6RCxJQUFNb0IsSUFBU3BCLEdBRVRyQixFQUFPc0QsV0FBWVgsS0FBTUYsSUFDN0JFLEtBQU1GLEdBQVNwQixFQUFTb0IsSUFJeEJFLEtBQUtZLEtBQU1kLEVBQU9wQixFQUFTb0IsR0FLOUIsT0FBT0UsTUFnQlAsTUFaQUQsR0FBTzlDLEVBQVM0RCxlQUFnQmYsRUFBTSxJQUlqQ0MsR0FBUUEsRUFBS2UsYUFFakJkLEtBQUtFLE9BQVMsRUFDZEYsS0FBSyxHQUFLRCxHQUdYQyxLQUFLdEIsUUFBVXpCLEVBQ2YrQyxLQUFLdkIsU0FBV0EsRUFDVHVCLEtBY0gsTUFBS3ZCLEdBQVM4QixVQUNwQlAsS0FBS3RCLFFBQVVzQixLQUFLLEdBQUt2QixFQUN6QnVCLEtBQUtFLE9BQVMsRUFDUEYsTUFJSTNDLEVBQU9zRCxXQUFZbEMsR0FDdkI1QixFQUFXNkMsTUFBT2pCLElBR3JCQSxFQUFTQSxXQUFhN0IsWUFDMUJvRCxLQUFLdkIsU0FBV0EsRUFBU0EsU0FDekJ1QixLQUFLdEIsUUFBVUQsRUFBU0MsU0FHbEJyQixFQUFPMEQsVUFBV3RDLEVBQVV1QixRQUlwQ3ZCLFNBQVUsR0FHVnlCLE9BQVEsRUFFUmMsUUFBUyxXQUNSLE1BQU9qRCxHQUFXa0QsS0FBTWpCLE9BS3pCa0IsSUFBSyxTQUFVQyxHQUNkLE1BQWMsT0FBUEEsRUFHTm5CLEtBQUtnQixVQUdHLEVBQU5HLEVBQVVuQixLQUFNQSxLQUFLRSxPQUFTaUIsR0FBUW5CLEtBQU1tQixJQUtoREMsVUFBVyxTQUFVQyxHQUdwQixHQUFJQyxHQUFNakUsRUFBT2dELE1BQU9MLEtBQUtILGNBQWV3QixFQU81QyxPQUpBQyxHQUFJQyxXQUFhdkIsS0FDakJzQixFQUFJNUMsUUFBVXNCLEtBQUt0QixRQUdaNEMsR0FNUkUsS0FBTSxTQUFVQyxFQUFVQyxHQUN6QixNQUFPckUsR0FBT21FLEtBQU14QixLQUFNeUIsRUFBVUMsSUFHckNoQyxNQUFPLFNBQVVmLEdBSWhCLE1BRkF0QixHQUFPcUMsTUFBTWlDLFVBQVVDLEtBQU1qRCxHQUV0QnFCLE1BR1JoQyxNQUFPLFdBQ04sTUFBT2dDLE1BQUtvQixVQUFXckQsRUFBVzhELE1BQU83QixLQUFNOEIsYUFHaERDLE1BQU8sV0FDTixNQUFPL0IsTUFBS2dDLEdBQUksSUFHakJDLEtBQU0sV0FDTCxNQUFPakMsTUFBS2dDLEdBQUksS0FHakJBLEdBQUksU0FBVUUsR0FDYixHQUFJQyxHQUFNbkMsS0FBS0UsT0FDZGtDLEdBQUtGLEdBQVUsRUFBSkEsRUFBUUMsRUFBTSxFQUMxQixPQUFPbkMsTUFBS29CLFVBQVdnQixHQUFLLEdBQVNELEVBQUpDLEdBQVlwQyxLQUFLb0MsU0FHbkRDLElBQUssU0FBVVosR0FDZCxNQUFPekIsTUFBS29CLFVBQVcvRCxFQUFPZ0YsSUFBSXJDLEtBQU0sU0FBVUQsRUFBTW1DLEdBQ3ZELE1BQU9ULEdBQVNSLEtBQU1sQixFQUFNbUMsRUFBR25DLE9BSWpDdUMsSUFBSyxXQUNKLE1BQU90QyxNQUFLdUIsWUFBY3ZCLEtBQUtILFlBQVksT0FLNUMvQixLQUFNRCxFQUNOMEUsUUFBU0EsS0FDVEMsVUFBV0EsUUFJWm5GLEVBQU9zQixHQUFHQyxLQUFLZSxVQUFZdEMsRUFBT3NCLEdBRWxDdEIsRUFBT29GLE9BQVNwRixFQUFPc0IsR0FBRzhELE9BQVMsV0FDbEMsR0FBSUMsR0FBU0MsRUFBTUMsRUFBS0MsRUFBTUMsRUFBYUMsRUFDMUNDLEVBQVNsQixVQUFVLE9BQ25CSSxFQUFJLEVBQ0poQyxFQUFTNEIsVUFBVTVCLE9BQ25CK0MsR0FBTyxDQXFCUixLQWxCdUIsaUJBQVhELEtBQ1hDLEVBQU9ELEVBQ1BBLEVBQVNsQixVQUFVLE9BRW5CSSxFQUFJLEdBSWtCLGdCQUFYYyxJQUF3QjNGLEVBQU9zRCxXQUFXcUMsS0FDckRBLE1BSUk5QyxJQUFXZ0MsSUFDZmMsRUFBU2hELE9BQ1BrQyxHQUdTaEMsRUFBSmdDLEVBQVlBLElBRW5CLEdBQW1DLE9BQTdCUSxFQUFVWixVQUFXSSxJQUUxQixJQUFNUyxJQUFRRCxHQUNiRSxFQUFNSSxFQUFRTCxHQUNkRSxFQUFPSCxFQUFTQyxHQUdYSyxJQUFXSCxJQUtYSSxHQUFRSixJQUFVeEYsRUFBT3FELGNBQWNtQyxLQUFVQyxFQUFjekYsRUFBTzZGLFFBQVFMLE1BQzdFQyxHQUNKQSxHQUFjLEVBQ2RDLEVBQVFILEdBQU92RixFQUFPNkYsUUFBUU4sR0FBT0EsTUFHckNHLEVBQVFILEdBQU92RixFQUFPcUQsY0FBY2tDLEdBQU9BLEtBSTVDSSxFQUFRTCxHQUFTdEYsRUFBT29GLE9BQVFRLEVBQU1GLEVBQU9GLElBR2xDQSxJQUFTakcsWUFDcEJvRyxFQUFRTCxHQUFTRSxHQU9yQixPQUFPRyxJQUdSM0YsRUFBT29GLFFBRU5VLFFBQVMsVUFBYXpGLEVBQWUwRixLQUFLQyxVQUFXQyxRQUFTLE1BQU8sSUFFckVDLFdBQVksU0FBVU4sR0FTckIsTUFSS3RHLEdBQU9ZLElBQU1GLElBQ2pCVixFQUFPWSxFQUFJRCxHQUdQMkYsR0FBUXRHLEVBQU9VLFNBQVdBLElBQzlCVixFQUFPVSxPQUFTRCxHQUdWQyxHQUlSbUcsU0FBUyxFQUlUQyxVQUFXLEVBR1hDLFVBQVcsU0FBVUMsR0FDZkEsRUFDSnRHLEVBQU9vRyxZQUVQcEcsRUFBT3FDLE9BQU8sSUFLaEJBLE1BQU8sU0FBVWtFLElBR1hBLEtBQVMsSUFBU3ZHLEVBQU9vRyxVQUFZcEcsRUFBT21HLFdBS2pEbkcsRUFBT21HLFNBQVUsRUFHWkksS0FBUyxLQUFVdkcsRUFBT29HLFVBQVksSUFLM0MzRyxFQUFVK0csWUFBYTVHLEdBQVlJLElBRzlCQSxFQUFPc0IsR0FBR21GLFNBQ2R6RyxFQUFRSixHQUFXNkcsUUFBUSxTQUFTQyxJQUFJLFlBTzFDcEQsV0FBWSxTQUFVcUQsR0FDckIsTUFBNEIsYUFBckIzRyxFQUFPNEcsS0FBS0QsSUFHcEJkLFFBQVNnQixNQUFNaEIsUUFFZmlCLFNBQVUsU0FBVUgsR0FDbkIsTUFBYyxPQUFQQSxHQUFlQSxJQUFRQSxFQUFJckgsUUFHbkN5SCxVQUFXLFNBQVVKLEdBQ3BCLE9BQVFLLE1BQU9DLFdBQVdOLEtBQVVPLFNBQVVQLElBRy9DQyxLQUFNLFNBQVVELEdBQ2YsTUFBWSxPQUFQQSxFQUNXQSxFQUFSUSxHQUdjLGdCQUFSUixJQUFtQyxrQkFBUkEsR0FDeEN4RyxFQUFZVyxFQUFjOEMsS0FBSytDLEtBQVUsZUFDbENBLElBR1R0RCxjQUFlLFNBQVVzRCxHQUt4QixHQUE0QixXQUF2QjNHLEVBQU80RyxLQUFNRCxJQUFzQkEsRUFBSXpELFVBQVlsRCxFQUFPOEcsU0FBVUgsR0FDeEUsT0FBTyxDQU9SLEtBQ0MsR0FBS0EsRUFBSW5FLGNBQ054QixFQUFZNEMsS0FBTStDLEVBQUluRSxZQUFZRixVQUFXLGlCQUMvQyxPQUFPLEVBRVAsTUFBUThFLEdBQ1QsT0FBTyxFQUtSLE9BQU8sR0FHUkMsY0FBZSxTQUFVVixHQUN4QixHQUFJckIsRUFDSixLQUFNQSxJQUFRcUIsR0FDYixPQUFPLENBRVIsUUFBTyxHQUdSVyxNQUFPLFNBQVVDLEdBQ2hCLEtBQVVDLE9BQU9ELElBTWxCdEUsVUFBVyxTQUFVd0UsRUFBTXBHLEVBQVNxRyxHQUNuQyxJQUFNRCxHQUF3QixnQkFBVEEsR0FDcEIsTUFBTyxLQUVnQixrQkFBWnBHLEtBQ1hxRyxFQUFjckcsRUFDZEEsR0FBVSxHQUVYQSxFQUFVQSxHQUFXekIsQ0FFckIsSUFBSStILEdBQVMvRixFQUFXa0IsS0FBTTJFLEdBQzdCRyxHQUFXRixLQUdaLE9BQUtDLElBQ0t0RyxFQUFRd0csY0FBZUYsRUFBTyxNQUd4Q0EsRUFBUzNILEVBQU84SCxlQUFpQkwsR0FBUXBHLEVBQVN1RyxHQUU3Q0EsR0FDSjVILEVBQVE0SCxHQUFVRyxTQUdaL0gsRUFBT2dELFNBQVcyRSxFQUFPSyxjQUdqQ0MsVUFBV0MsS0FBS0MsTUFHaEJDLFNBQVUsU0FBVVgsR0FDbkIsR0FBSVksR0FBS0MsQ0FDVCxLQUFNYixHQUF3QixnQkFBVEEsR0FDcEIsTUFBTyxLQUlSLEtBQ0NhLEVBQU0sR0FBSUMsV0FDVkYsRUFBTUMsRUFBSUUsZ0JBQWlCZixFQUFPLFlBQ2pDLE1BQVFMLEdBQ1RpQixFQUFNOUksVUFNUCxRQUhNOEksR0FBT0EsRUFBSUkscUJBQXNCLGVBQWdCNUYsU0FDdEQ3QyxFQUFPc0gsTUFBTyxnQkFBa0JHLEdBRTFCWSxHQUdSSyxLQUFNLGFBR05DLFdBQVksU0FBVUMsR0FDckIsR0FBSUMsR0FDRkMsRUFBV0MsSUFFYkgsR0FBTzVJLEVBQU9tQixLQUFNeUgsR0FFZkEsSUFJZ0MsSUFBL0JBLEVBQUsvSCxRQUFRLGVBQ2pCZ0ksRUFBU2pKLEVBQVNpSSxjQUFjLFVBQ2hDZ0IsRUFBT0csS0FBT0osRUFDZGhKLEVBQVNxSixLQUFLQyxZQUFhTCxHQUFTcEYsV0FBVzBGLFlBQWFOLElBSTVEQyxFQUFVRixLQU9iUSxVQUFXLFNBQVVDLEdBQ3BCLE1BQU9BLEdBQU9wRCxRQUFTcEUsRUFBVyxPQUFRb0UsUUFBU25FLEVBQVlDLElBR2hFdUgsU0FBVSxTQUFVNUcsRUFBTTRDLEdBQ3pCLE1BQU81QyxHQUFLNEcsVUFBWTVHLEVBQUs0RyxTQUFTQyxnQkFBa0JqRSxFQUFLaUUsZUFJOURwRixLQUFNLFNBQVV3QyxFQUFLdkMsRUFBVUMsR0FDOUIsR0FBSW1GLEdBQ0gzRSxFQUFJLEVBQ0poQyxFQUFTOEQsRUFBSTlELE9BQ2JnRCxFQUFVNEQsRUFBYTlDLEVBRXhCLElBQUt0QyxHQUNKLEdBQUt3QixHQUNKLEtBQVloRCxFQUFKZ0MsRUFBWUEsSUFHbkIsR0FGQTJFLEVBQVFwRixFQUFTSSxNQUFPbUMsRUFBSzlCLEdBQUtSLEdBRTdCbUYsS0FBVSxFQUNkLFVBSUYsS0FBTTNFLElBQUs4QixHQUdWLEdBRkE2QyxFQUFRcEYsRUFBU0ksTUFBT21DLEVBQUs5QixHQUFLUixHQUU3Qm1GLEtBQVUsRUFDZCxVQU9ILElBQUszRCxHQUNKLEtBQVloRCxFQUFKZ0MsRUFBWUEsSUFHbkIsR0FGQTJFLEVBQVFwRixFQUFTUixLQUFNK0MsRUFBSzlCLEdBQUtBLEVBQUc4QixFQUFLOUIsSUFFcEMyRSxLQUFVLEVBQ2QsVUFJRixLQUFNM0UsSUFBSzhCLEdBR1YsR0FGQTZDLEVBQVFwRixFQUFTUixLQUFNK0MsRUFBSzlCLEdBQUtBLEVBQUc4QixFQUFLOUIsSUFFcEMyRSxLQUFVLEVBQ2QsS0FNSixPQUFPN0MsSUFHUnhGLEtBQU0sU0FBVTZILEdBQ2YsTUFBZSxPQUFSQSxFQUFlLEdBQUs5SCxFQUFVMEMsS0FBTW9GLElBSTVDdEYsVUFBVyxTQUFVZ0csRUFBS0MsR0FDekIsR0FBSTFGLEdBQU0wRixLQWFWLE9BWFksT0FBUEQsSUFDQ0QsRUFBYUcsT0FBT0YsSUFDeEIxSixFQUFPZ0QsTUFBT2lCLEVBQ0UsZ0JBQVJ5RixJQUNMQSxHQUFRQSxHQUdYbEosRUFBVW9ELEtBQU1LLEVBQUt5RixJQUloQnpGLEdBR1I0RixRQUFTLFNBQVVuSCxFQUFNZ0gsRUFBSzdFLEdBQzdCLE1BQWMsT0FBUDZFLEVBQWMsR0FBSzlJLEVBQWFnRCxLQUFNOEYsRUFBS2hILEVBQU1tQyxJQUd6RDdCLE1BQU8sU0FBVTBCLEVBQU9vRixHQUN2QixHQUFJQyxHQUFJRCxFQUFPakgsT0FDZGdDLEVBQUlILEVBQU03QixPQUNWa0MsRUFBSSxDQUVMLElBQWtCLGdCQUFOZ0YsR0FDWCxLQUFZQSxFQUFKaEYsRUFBT0EsSUFDZEwsRUFBT0csS0FBUWlGLEVBQVEvRSxPQUd4QixPQUFRK0UsRUFBTy9FLEtBQU94RixVQUNyQm1GLEVBQU9HLEtBQVFpRixFQUFRL0UsSUFNekIsT0FGQUwsR0FBTTdCLE9BQVNnQyxFQUVSSCxHQUdSc0YsS0FBTSxTQUFVaEcsRUFBT0ksRUFBVTZGLEdBQ2hDLEdBQUlDLEdBQ0hqRyxLQUNBWSxFQUFJLEVBQ0poQyxFQUFTbUIsRUFBTW5CLE1BS2hCLEtBSkFvSCxJQUFRQSxFQUlJcEgsRUFBSmdDLEVBQVlBLElBQ25CcUYsSUFBVzlGLEVBQVVKLEVBQU9hLEdBQUtBLEdBQzVCb0YsSUFBUUMsR0FDWmpHLEVBQUl4RCxLQUFNdUQsRUFBT2EsR0FJbkIsT0FBT1osSUFJUmUsSUFBSyxTQUFVaEIsRUFBT0ksRUFBVStGLEdBQy9CLEdBQUlYLEdBQ0gzRSxFQUFJLEVBQ0poQyxFQUFTbUIsRUFBTW5CLE9BQ2ZnRCxFQUFVNEQsRUFBYXpGLEdBQ3ZCQyxJQUdELElBQUs0QixFQUNKLEtBQVloRCxFQUFKZ0MsRUFBWUEsSUFDbkIyRSxFQUFRcEYsRUFBVUosRUFBT2EsR0FBS0EsRUFBR3NGLEdBRW5CLE1BQVRYLElBQ0p2RixFQUFLQSxFQUFJcEIsUUFBVzJHLE9BTXRCLEtBQU0zRSxJQUFLYixHQUNWd0YsRUFBUXBGLEVBQVVKLEVBQU9hLEdBQUtBLEVBQUdzRixHQUVuQixNQUFUWCxJQUNKdkYsRUFBS0EsRUFBSXBCLFFBQVcyRyxFQU12QixPQUFPbEosR0FBWWtFLFNBQVdQLElBSS9CbUcsS0FBTSxFQUlOQyxNQUFPLFNBQVUvSSxFQUFJRCxHQUNwQixHQUFJaUgsR0FBS2pFLEVBQU1nRyxDQVVmLE9BUndCLGdCQUFaaEosS0FDWGlILEVBQU1oSCxFQUFJRCxHQUNWQSxFQUFVQyxFQUNWQSxFQUFLZ0gsR0FLQXRJLEVBQU9zRCxXQUFZaEMsSUFLekIrQyxFQUFPM0QsRUFBV2tELEtBQU1hLFVBQVcsR0FDbkM0RixFQUFRLFdBQ1AsTUFBTy9JLEdBQUdrRCxNQUFPbkQsR0FBV3NCLEtBQU0wQixFQUFLOUQsT0FBUUcsRUFBV2tELEtBQU1hLGNBSWpFNEYsRUFBTUQsS0FBTzlJLEVBQUc4SSxLQUFPOUksRUFBRzhJLE1BQVFwSyxFQUFPb0ssT0FFbENDLEdBWkM5SyxXQWlCVCtLLE9BQVEsU0FBVXRHLEVBQU8xQyxFQUFJaUosRUFBS2YsRUFBT2dCLEVBQVdDLEVBQVVDLEdBQzdELEdBQUk3RixHQUFJLEVBQ1BoQyxFQUFTbUIsRUFBTW5CLE9BQ2Y4SCxFQUFjLE1BQVBKLENBR1IsSUFBNEIsV0FBdkJ2SyxFQUFPNEcsS0FBTTJELEdBQXFCLENBQ3RDQyxHQUFZLENBQ1osS0FBTTNGLElBQUswRixHQUNWdkssRUFBT3NLLE9BQVF0RyxFQUFPMUMsRUFBSXVELEVBQUcwRixFQUFJMUYsSUFBSSxFQUFNNEYsRUFBVUMsT0FJaEQsSUFBS2xCLElBQVVqSyxZQUNyQmlMLEdBQVksRUFFTnhLLEVBQU9zRCxXQUFZa0csS0FDeEJrQixHQUFNLEdBR0ZDLElBRUNELEdBQ0pwSixFQUFHc0MsS0FBTUksRUFBT3dGLEdBQ2hCbEksRUFBSyxPQUlMcUosRUFBT3JKLEVBQ1BBLEVBQUssU0FBVW9CLEVBQU02SCxFQUFLZixHQUN6QixNQUFPbUIsR0FBSy9HLEtBQU01RCxFQUFRMEMsR0FBUThHLE1BS2hDbEksR0FDSixLQUFZdUIsRUFBSmdDLEVBQVlBLElBQ25CdkQsRUFBSTBDLEVBQU1hLEdBQUkwRixFQUFLRyxFQUFNbEIsRUFBUUEsRUFBTTVGLEtBQU1JLEVBQU1hLEdBQUlBLEVBQUd2RCxFQUFJMEMsRUFBTWEsR0FBSTBGLElBSzNFLE9BQU9DLEdBQ054RyxFQUdBMkcsRUFDQ3JKLEVBQUdzQyxLQUFNSSxHQUNUbkIsRUFBU3ZCLEVBQUkwQyxFQUFNLEdBQUl1RyxHQUFRRSxHQUdsQ0csSUFBS0MsS0FBS0QsSUFLVkUsS0FBTSxTQUFVcEksRUFBTTJDLEVBQVNqQixFQUFVQyxHQUN4QyxHQUFJSixHQUFLcUIsRUFDUnlGLElBR0QsS0FBTXpGLElBQVFELEdBQ2IwRixFQUFLekYsR0FBUzVDLEVBQUtzSSxNQUFPMUYsR0FDMUI1QyxFQUFLc0ksTUFBTzFGLEdBQVNELEVBQVNDLEVBRy9CckIsR0FBTUcsRUFBU0ksTUFBTzlCLEVBQU0yQixNQUc1QixLQUFNaUIsSUFBUUQsR0FDYjNDLEVBQUtzSSxNQUFPMUYsR0FBU3lGLEVBQUt6RixFQUczQixPQUFPckIsTUFJVGpFLEVBQU9xQyxNQUFNaUMsUUFBVSxTQUFVcUMsR0FxQmhDLE1BcEJNbEgsS0FFTEEsRUFBWU8sRUFBT2lMLFdBS1UsYUFBeEJyTCxFQUFTc0wsV0FFYkMsV0FBWW5MLEVBQU9xQyxRQUtuQnpDLEVBQVN3TCxpQkFBa0IsbUJBQW9CakosR0FBVyxHQUcxRDdDLEVBQU84TCxpQkFBa0IsT0FBUWpKLEdBQVcsS0FHdkMxQyxFQUFVNkUsUUFBU3FDLElBSTNCM0csRUFBT21FLEtBQUssZ0VBQWdFa0gsTUFBTSxLQUFNLFNBQVN4RyxFQUFHUyxHQUNuR25GLEVBQVksV0FBYW1GLEVBQU8sS0FBUUEsRUFBS2lFLGVBRzlDLFNBQVNFLEdBQWE5QyxHQUNyQixHQUFJOUQsR0FBUzhELEVBQUk5RCxPQUNoQitELEVBQU81RyxFQUFPNEcsS0FBTUQsRUFFckIsT0FBSzNHLEdBQU84RyxTQUFVSCxJQUNkLEVBR2MsSUFBakJBLEVBQUl6RCxVQUFrQkwsR0FDbkIsRUFHUSxVQUFUK0QsR0FBNkIsYUFBVEEsSUFDYixJQUFYL0QsR0FDZ0IsZ0JBQVhBLElBQXVCQSxFQUFTLEdBQU9BLEVBQVMsSUFBTzhELElBSWhFbkgsRUFBYVEsRUFBT0osR0FXcEIsU0FBV04sRUFBUUMsV0FFbkIsR0FBSXNGLEdBQ0h5RyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUdBQyxFQUNBbE0sRUFDQUMsRUFDQWtNLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBR0FyRyxFQUFVLFVBQVksR0FBSytFLE1BQzNCdUIsRUFBZTlNLEVBQU9NLFNBQ3RCeU0sRUFBVSxFQUNWOUgsRUFBTyxFQUNQK0gsRUFBYUMsS0FDYkMsRUFBYUQsS0FDYkUsRUFBZ0JGLEtBQ2hCRyxHQUFlLEVBQ2ZDLEVBQVksU0FBVUMsRUFBR0MsR0FDeEIsTUFBS0QsS0FBTUMsR0FDVkgsR0FBZSxFQUNSLEdBRUQsR0FJUkksUUFBc0J2TixXQUN0QndOLEVBQWUsR0FBSyxHQUdwQkMsS0FBYy9MLGVBQ2R5SSxLQUNBdUQsRUFBTXZELEVBQUl1RCxJQUNWQyxFQUFjeEQsRUFBSWpKLEtBQ2xCQSxFQUFPaUosRUFBSWpKLEtBQ1hFLEVBQVErSSxFQUFJL0ksTUFFWkUsRUFBVTZJLEVBQUk3SSxTQUFXLFNBQVU2QixHQUNsQyxHQUFJbUMsR0FBSSxFQUNQQyxFQUFNbkMsS0FBS0UsTUFDWixNQUFZaUMsRUFBSkQsRUFBU0EsSUFDaEIsR0FBS2xDLEtBQUtrQyxLQUFPbkMsRUFDaEIsTUFBT21DLEVBR1QsT0FBTyxJQUdSc0ksRUFBVyw2SEFLWEMsRUFBYSxzQkFFYkMsRUFBb0IsbUNBS3BCQyxFQUFhRCxFQUFrQnBILFFBQVMsSUFBSyxNQUc3Q3NILEVBQWEsTUFBUUgsRUFBYSxLQUFPQyxFQUFvQixJQUFNRCxFQUNsRSxtQkFBcUJBLEVBQWEsd0NBQTBDRSxFQUFhLFFBQVVGLEVBQWEsT0FRakhJLEVBQVUsS0FBT0gsRUFBb0IsbUVBQXFFRSxFQUFXdEgsUUFBUyxFQUFHLEdBQU0sZUFHdkl3SCxFQUFZQyxPQUFRLElBQU1OLEVBQWEsOEJBQWdDQSxFQUFhLEtBQU0sS0FFMUZPLEVBQWFELE9BQVEsSUFBTU4sRUFBYSxLQUFPQSxFQUFhLEtBQzVEUSxFQUFtQkYsT0FBUSxJQUFNTixFQUFhLFdBQWFBLEVBQWEsSUFBTUEsRUFBYSxLQUUzRlMsRUFBZUgsT0FBUU4sRUFBYSxTQUNwQ1UsRUFBdUJKLE9BQVEsSUFBTU4sRUFBYSxnQkFBa0JBLEVBQWEsT0FBUSxLQUV6RlcsRUFBY0wsT0FBUUYsR0FDdEJRLEVBQWtCTixPQUFRLElBQU1KLEVBQWEsS0FFN0NXLEdBQ0NDLEdBQVVSLE9BQVEsTUFBUUwsRUFBb0IsS0FDOUNjLE1BQWFULE9BQVEsUUFBVUwsRUFBb0IsS0FDbkRlLElBQVdWLE9BQVEsS0FBT0wsRUFBa0JwSCxRQUFTLElBQUssTUFBUyxLQUNuRW9JLEtBQVlYLE9BQVEsSUFBTUgsR0FDMUJlLE9BQWNaLE9BQVEsSUFBTUYsR0FDNUJlLE1BQWFiLE9BQVEseURBQTJETixFQUMvRSwrQkFBaUNBLEVBQWEsY0FBZ0JBLEVBQzlELGFBQWVBLEVBQWEsU0FBVSxLQUN2Q29CLEtBQVlkLE9BQVEsT0FBU1AsRUFBVyxLQUFNLEtBRzlDc0IsYUFBb0JmLE9BQVEsSUFBTU4sRUFBYSxtREFDOUNBLEVBQWEsbUJBQXFCQSxFQUFhLG1CQUFvQixNQUdyRXNCLEVBQVUseUJBR1YvTSxFQUFhLG1DQUViZ04sRUFBVSxzQ0FDVkMsR0FBVSxTQUVWQyxHQUFVLFFBR1ZDLEdBQWdCcEIsT0FBUSxxQkFBdUJOLEVBQWEsTUFBUUEsRUFBYSxPQUFRLE1BQ3pGMkIsR0FBWSxTQUFVQyxFQUFHQyxFQUFTQyxHQUNqQyxHQUFJQyxHQUFPLEtBQU9GLEVBQVUsS0FJNUIsT0FBT0UsS0FBU0EsR0FBUUQsRUFDdkJELEVBRU8sRUFBUEUsRUFDQ2hJLE9BQU9pSSxhQUFjRCxFQUFPLE9BRTVCaEksT0FBT2lJLGFBQTJCLE1BQWJELEdBQVEsR0FBNEIsTUFBUixLQUFQQSxHQUk5QyxLQUNDMU8sRUFBSytELE1BQ0hrRixFQUFNL0ksRUFBTWlELEtBQU13SSxFQUFhcEUsWUFDaENvRSxFQUFhcEUsWUFJZDBCLEVBQUswQyxFQUFhcEUsV0FBV25GLFFBQVNLLFNBQ3JDLE1BQVFrRSxJQUNUM0csR0FBUytELE1BQU9rRixFQUFJN0csT0FHbkIsU0FBVThDLEVBQVEwSixHQUNqQm5DLEVBQVkxSSxNQUFPbUIsRUFBUWhGLEVBQU1pRCxLQUFLeUwsS0FLdkMsU0FBVTFKLEVBQVEwSixHQUNqQixHQUFJdEssR0FBSVksRUFBTzlDLE9BQ2RnQyxFQUFJLENBRUwsT0FBU2MsRUFBT1osS0FBT3NLLEVBQUl4SyxNQUMzQmMsRUFBTzlDLE9BQVNrQyxFQUFJLElBS3ZCLFFBQVN1SyxJQUFRbE8sRUFBVUMsRUFBU3NJLEVBQVM0RixHQUM1QyxHQUFJOU0sR0FBT0MsRUFBTThNLEVBQUd0TSxFQUVuQjJCLEVBQUc0SyxFQUFRMUUsRUFBSzJFLEVBQUtDLEVBQVlDLENBU2xDLEtBUE92TyxFQUFVQSxFQUFROEIsZUFBaUI5QixFQUFVK0ssS0FBbUJ4TSxHQUN0RWtNLEVBQWF6SyxHQUdkQSxFQUFVQSxHQUFXekIsRUFDckIrSixFQUFVQSxPQUVKdkksR0FBZ0MsZ0JBQWJBLEdBQ3hCLE1BQU91SSxFQUdSLElBQXVDLEtBQWpDekcsRUFBVzdCLEVBQVE2QixXQUFnQyxJQUFiQSxFQUMzQyxRQUdELElBQUs2SSxJQUFtQndELEVBQU8sQ0FHOUIsR0FBTTlNLEVBQVFkLEVBQVdtQixLQUFNMUIsR0FFOUIsR0FBTW9PLEVBQUkvTSxFQUFNLElBQ2YsR0FBa0IsSUFBYlMsRUFBaUIsQ0FJckIsR0FIQVIsRUFBT3JCLEVBQVFtQyxlQUFnQmdNLElBRzFCOU0sSUFBUUEsRUFBS2UsV0FRakIsTUFBT2tHLEVBTFAsSUFBS2pILEVBQUttTixLQUFPTCxFQUVoQixNQURBN0YsR0FBUWxKLEtBQU1pQyxHQUNQaUgsTUFPVCxJQUFLdEksRUFBUThCLGdCQUFrQlQsRUFBT3JCLEVBQVE4QixjQUFjSyxlQUFnQmdNLEtBQzNFckQsRUFBVTlLLEVBQVNxQixJQUFVQSxFQUFLbU4sS0FBT0wsRUFFekMsTUFEQTdGLEdBQVFsSixLQUFNaUMsR0FDUGlILE1BS0gsQ0FBQSxHQUFLbEgsRUFBTSxHQUVqQixNQURBaEMsR0FBSytELE1BQU9tRixFQUFTdEksRUFBUW9ILHFCQUFzQnJILElBQzVDdUksQ0FHRCxLQUFNNkYsRUFBSS9NLEVBQU0sS0FBTzZJLEVBQVF3RSx3QkFBMEJ6TyxFQUFReU8sdUJBRXZFLE1BREFyUCxHQUFLK0QsTUFBT21GLEVBQVN0SSxFQUFReU8sdUJBQXdCTixJQUM5QzdGLEVBS1QsR0FBSzJCLEVBQVF5RSxPQUFTL0QsSUFBY0EsRUFBVTVJLEtBQU1oQyxJQUFjLENBU2pFLEdBUkFzTyxFQUFNM0UsRUFBTWpGLEVBQ1o2SixFQUFhdE8sRUFDYnVPLEVBQTJCLElBQWIxTSxHQUFrQjlCLEVBTWQsSUFBYjhCLEdBQXFELFdBQW5DN0IsRUFBUWlJLFNBQVNDLGNBQTZCLENBQ3BFa0csRUFBU08sR0FBVTVPLElBRWIySixFQUFNMUosRUFBUTRPLGFBQWEsT0FDaENQLEVBQU0zRSxFQUFJOUUsUUFBUzRJLEdBQVMsUUFFNUJ4TixFQUFRNk8sYUFBYyxLQUFNUixHQUU3QkEsRUFBTSxRQUFVQSxFQUFNLE1BRXRCN0ssRUFBSTRLLEVBQU81TSxNQUNYLE9BQVFnQyxJQUNQNEssRUFBTzVLLEdBQUs2SyxFQUFNUyxHQUFZVixFQUFPNUssR0FFdEM4SyxHQUFhOUIsRUFBU3pLLEtBQU1oQyxJQUFjQyxFQUFRb0MsWUFBY3BDLEVBQ2hFdU8sRUFBY0gsRUFBT1csS0FBSyxLQUczQixHQUFLUixFQUNKLElBSUMsTUFIQW5QLEdBQUsrRCxNQUFPbUYsRUFDWGdHLEVBQVdVLGlCQUFrQlQsSUFFdkJqRyxFQUNOLE1BQU0yRyxJQUNOLFFBQ0t2RixHQUNMMUosRUFBUWtQLGdCQUFnQixRQVE3QixNQUFPQyxJQUFRcFAsRUFBUzZFLFFBQVN3SCxFQUFPLE1BQVFwTSxFQUFTc0ksRUFBUzRGLEdBU25FLFFBQVNoRCxNQUNSLEdBQUlrRSxLQUVKLFNBQVNDLEdBQU9uRyxFQUFLZixHQU1wQixNQUpLaUgsR0FBS2hRLEtBQU04SixHQUFPLEtBQVFpQixFQUFLbUYsbUJBRTVCRCxHQUFPRCxFQUFLRyxTQUVaRixFQUFPbkcsR0FBUWYsRUFFeEIsTUFBT2tILEdBT1IsUUFBU0csSUFBY3ZQLEdBRXRCLE1BREFBLEdBQUl3RSxJQUFZLEVBQ1R4RSxFQU9SLFFBQVN3UCxJQUFReFAsR0FDaEIsR0FBSXlQLEdBQU1uUixFQUFTaUksY0FBYyxNQUVqQyxLQUNDLFFBQVN2RyxFQUFJeVAsR0FDWixNQUFPM0osR0FDUixPQUFPLEVBQ04sUUFFSTJKLEVBQUl0TixZQUNSc04sRUFBSXROLFdBQVcwRixZQUFhNEgsR0FHN0JBLEVBQU0sTUFTUixRQUFTQyxJQUFXQyxFQUFPQyxHQUMxQixHQUFJeEgsR0FBTXVILEVBQU01RixNQUFNLEtBQ3JCeEcsRUFBSW9NLEVBQU1wTyxNQUVYLE9BQVFnQyxJQUNQMkcsRUFBSzJGLFdBQVl6SCxFQUFJN0UsSUFBT3FNLEVBVTlCLFFBQVNFLElBQWN4RSxFQUFHQyxHQUN6QixHQUFJd0UsR0FBTXhFLEdBQUtELEVBQ2QwRSxFQUFPRCxHQUFzQixJQUFmekUsRUFBRTFKLFVBQWlDLElBQWYySixFQUFFM0osWUFDaEMySixFQUFFMEUsYUFBZXhFLEtBQ2pCSCxFQUFFMkUsYUFBZXhFLEVBR3RCLElBQUt1RSxFQUNKLE1BQU9BLEVBSVIsSUFBS0QsRUFDSixNQUFTQSxFQUFNQSxFQUFJRyxZQUNsQixHQUFLSCxJQUFReEUsRUFDWixNQUFPLEVBS1YsT0FBT0QsR0FBSSxFQUFJLEdBT2hCLFFBQVM2RSxJQUFtQjdLLEdBQzNCLE1BQU8sVUFBVWxFLEdBQ2hCLEdBQUk0QyxHQUFPNUMsRUFBSzRHLFNBQVNDLGFBQ3pCLE9BQWdCLFVBQVRqRSxHQUFvQjVDLEVBQUtrRSxPQUFTQSxHQVEzQyxRQUFTOEssSUFBb0I5SyxHQUM1QixNQUFPLFVBQVVsRSxHQUNoQixHQUFJNEMsR0FBTzVDLEVBQUs0RyxTQUFTQyxhQUN6QixRQUFpQixVQUFUakUsR0FBNkIsV0FBVEEsSUFBc0I1QyxFQUFLa0UsT0FBU0EsR0FRbEUsUUFBUytLLElBQXdCclEsR0FDaEMsTUFBT3VQLElBQWEsU0FBVWUsR0FFN0IsTUFEQUEsSUFBWUEsRUFDTGYsR0FBYSxTQUFVdEIsRUFBTXJELEdBQ25DLEdBQUluSCxHQUNIOE0sRUFBZXZRLEtBQVFpTyxFQUFLMU0sT0FBUStPLEdBQ3BDL00sRUFBSWdOLEVBQWFoUCxNQUdsQixPQUFRZ0MsSUFDRjBLLEVBQU94SyxFQUFJOE0sRUFBYWhOLE1BQzVCMEssRUFBS3hLLEtBQU9tSCxFQUFRbkgsR0FBS3dLLEVBQUt4SyxTQVduQzJHLEVBQVE0RCxHQUFPNUQsTUFBUSxTQUFVaEosR0FHaEMsR0FBSTVDLEdBQWtCNEMsSUFBU0EsRUFBS1MsZUFBaUJULEdBQU01QyxlQUMzRCxPQUFPQSxHQUErQyxTQUE3QkEsRUFBZ0J3SixVQUFzQixHQUloRWdDLEVBQVVnRSxHQUFPaEUsV0FPakJRLEVBQWN3RCxHQUFPeEQsWUFBYyxTQUFVZ0csR0FDNUMsR0FBSUMsR0FBTUQsRUFBT0EsRUFBSzNPLGVBQWlCMk8sRUFBTzFGLEVBQzdDNEYsRUFBU0QsRUFBSUUsV0FHZCxPQUFLRixLQUFRblMsR0FBNkIsSUFBakJtUyxFQUFJN08sVUFBbUI2TyxFQUFJalMsaUJBS3BERixFQUFXbVMsRUFDWGxTLEVBQVVrUyxFQUFJalMsZ0JBR2RpTSxHQUFrQkwsRUFBT3FHLEdBTXBCQyxHQUFVQSxFQUFPRSxhQUFlRixJQUFXQSxFQUFPRyxLQUN0REgsRUFBT0UsWUFBYSxpQkFBa0IsV0FDckNwRyxNQVNGUixFQUFRaUMsV0FBYXVELEdBQU8sU0FBVUMsR0FFckMsTUFEQUEsR0FBSXFCLFVBQVksS0FDUnJCLEVBQUlkLGFBQWEsZUFPMUIzRSxFQUFRN0MscUJBQXVCcUksR0FBTyxTQUFVQyxHQUUvQyxNQURBQSxHQUFJN0gsWUFBYTZJLEVBQUlNLGNBQWMsTUFDM0J0QixFQUFJdEkscUJBQXFCLEtBQUs1RixTQUl2Q3lJLEVBQVF3RSx1QkFBeUJnQixHQUFPLFNBQVVDLEdBUWpELE1BUEFBLEdBQUl1QixVQUFZLCtDQUloQnZCLEVBQUl3QixXQUFXSCxVQUFZLElBR3VCLElBQTNDckIsRUFBSWpCLHVCQUF1QixLQUFLak4sU0FPeEN5SSxFQUFRa0gsUUFBVTFCLEdBQU8sU0FBVUMsR0FFbEMsTUFEQWxSLEdBQVFxSixZQUFhNkgsR0FBTWxCLEdBQUsvSixHQUN4QmlNLEVBQUlVLG9CQUFzQlYsRUFBSVUsa0JBQW1CM00sR0FBVWpELFNBSS9EeUksRUFBUWtILFNBQ1poSCxFQUFLekksS0FBUyxHQUFJLFNBQVU4TSxFQUFJeE8sR0FDL0IsU0FBWUEsR0FBUW1DLGlCQUFtQnNKLEdBQWdCZixFQUFpQixDQUN2RSxHQUFJeUQsR0FBSW5PLEVBQVFtQyxlQUFnQnFNLEVBR2hDLE9BQU9MLElBQUtBLEVBQUUvTCxZQUFjK0wsUUFHOUJoRSxFQUFLa0gsT0FBVyxHQUFJLFNBQVU3QyxHQUM3QixHQUFJOEMsR0FBUzlDLEVBQUc1SixRQUFTNkksR0FBV0MsR0FDcEMsT0FBTyxVQUFVck0sR0FDaEIsTUFBT0EsR0FBS3VOLGFBQWEsUUFBVTBDLFlBTTlCbkgsR0FBS3pJLEtBQVMsR0FFckJ5SSxFQUFLa0gsT0FBVyxHQUFLLFNBQVU3QyxHQUM5QixHQUFJOEMsR0FBUzlDLEVBQUc1SixRQUFTNkksR0FBV0MsR0FDcEMsT0FBTyxVQUFVck0sR0FDaEIsR0FBSW9QLFNBQWNwUCxHQUFLa1EsbUJBQXFCOUYsR0FBZ0JwSyxFQUFLa1EsaUJBQWlCLEtBQ2xGLE9BQU9kLElBQVFBLEVBQUt0SSxRQUFVbUosS0FNakNuSCxFQUFLekksS0FBVSxJQUFJdUksRUFBUTdDLHFCQUMxQixTQUFVb0ssRUFBS3hSLEdBQ2QsYUFBWUEsR0FBUW9ILHVCQUF5QnFFLEVBQ3JDekwsRUFBUW9ILHFCQUFzQm9LLEdBRHRDLFdBSUQsU0FBVUEsRUFBS3hSLEdBQ2QsR0FBSXFCLEdBQ0g0RixLQUNBekQsRUFBSSxFQUNKOEUsRUFBVXRJLEVBQVFvSCxxQkFBc0JvSyxFQUd6QyxJQUFhLE1BQVJBLEVBQWMsQ0FDbEIsTUFBU25RLEVBQU9pSCxFQUFROUUsS0FDQSxJQUFsQm5DLEVBQUtRLFVBQ1RvRixFQUFJN0gsS0FBTWlDLEVBSVosT0FBTzRGLEdBRVIsTUFBT3FCLElBSVQ2QixFQUFLekksS0FBWSxNQUFJdUksRUFBUXdFLHdCQUEwQixTQUFVc0MsRUFBVy9RLEdBQzNFLGFBQVlBLEdBQVF5Tyx5QkFBMkJoRCxHQUFnQmYsRUFDdkQxSyxFQUFReU8sdUJBQXdCc0MsR0FEeEMsV0FXRG5HLEtBT0FELE1BRU1WLEVBQVF5RSxJQUFNckIsRUFBUXRMLEtBQU0yTyxFQUFJMUIscUJBR3JDUyxHQUFPLFNBQVVDLEdBTWhCQSxFQUFJdUIsVUFBWSxpREFJVnZCLEVBQUlWLGlCQUFpQixjQUFjeE4sUUFDeENtSixFQUFVdkwsS0FBTSxNQUFRMk0sRUFBYSxhQUFlRCxFQUFXLEtBTTFENEQsRUFBSVYsaUJBQWlCLFlBQVl4TixRQUN0Q21KLEVBQVV2TCxLQUFLLGNBSWpCcVEsR0FBTyxTQUFVQyxHQU9oQixHQUFJK0IsR0FBUWYsRUFBSWxLLGNBQWMsUUFDOUJpTCxHQUFNNUMsYUFBYyxPQUFRLFVBQzVCYSxFQUFJN0gsWUFBYTRKLEdBQVE1QyxhQUFjLElBQUssSUFFdkNhLEVBQUlWLGlCQUFpQixXQUFXeE4sUUFDcENtSixFQUFVdkwsS0FBTSxTQUFXMk0sRUFBYSxnQkFLbkMyRCxFQUFJVixpQkFBaUIsWUFBWXhOLFFBQ3RDbUosRUFBVXZMLEtBQU0sV0FBWSxhQUk3QnNRLEVBQUlWLGlCQUFpQixRQUNyQnJFLEVBQVV2TCxLQUFLLFlBSVg2SyxFQUFReUgsZ0JBQWtCckUsRUFBUXRMLEtBQU84SSxFQUFVck0sRUFBUW1ULHVCQUNoRW5ULEVBQVFvVCxvQkFDUnBULEVBQVFxVCxrQkFDUnJULEVBQVFzVCxxQkFFUnJDLEdBQU8sU0FBVUMsR0FHaEJ6RixFQUFROEgsa0JBQW9CbEgsRUFBUXRJLEtBQU1tTixFQUFLLE9BSS9DN0UsRUFBUXRJLEtBQU1tTixFQUFLLGFBQ25COUUsRUFBY3hMLEtBQU0sS0FBTStNLEtBSTVCeEIsRUFBWUEsRUFBVW5KLFFBQWM2SyxPQUFRMUIsRUFBVW9FLEtBQUssTUFDM0RuRSxFQUFnQkEsRUFBY3BKLFFBQWM2SyxPQUFRekIsRUFBY21FLEtBQUssTUFRdkVqRSxFQUFXdUMsRUFBUXRMLEtBQU12RCxFQUFRc00sV0FBY3RNLEVBQVF3VCx3QkFDdEQsU0FBVXpHLEVBQUdDLEdBQ1osR0FBSXlHLEdBQXVCLElBQWYxRyxFQUFFMUosU0FBaUIwSixFQUFFOU0sZ0JBQWtCOE0sRUFDbEQyRyxFQUFNMUcsR0FBS0EsRUFBRXBKLFVBQ2QsT0FBT21KLEtBQU0yRyxNQUFXQSxHQUF3QixJQUFqQkEsRUFBSXJRLFlBQ2xDb1EsRUFBTW5ILFNBQ0xtSCxFQUFNbkgsU0FBVW9ILEdBQ2hCM0csRUFBRXlHLHlCQUE4RCxHQUFuQ3pHLEVBQUV5Ryx3QkFBeUJFLE1BRzNELFNBQVUzRyxFQUFHQyxHQUNaLEdBQUtBLEVBQ0osTUFBU0EsRUFBSUEsRUFBRXBKLFdBQ2QsR0FBS29KLElBQU1ELEVBQ1YsT0FBTyxDQUlWLFFBQU8sR0FPVEQsRUFBWTlNLEVBQVF3VCx3QkFDcEIsU0FBVXpHLEVBQUdDLEdBR1osR0FBS0QsSUFBTUMsRUFFVixNQURBSCxJQUFlLEVBQ1IsQ0FHUixJQUFJOEcsR0FBVTNHLEVBQUV3Ryx5QkFBMkJ6RyxFQUFFeUcseUJBQTJCekcsRUFBRXlHLHdCQUF5QnhHLEVBRW5HLE9BQUsyRyxHQUVXLEVBQVZBLElBQ0ZsSSxFQUFRbUksY0FBZ0I1RyxFQUFFd0csd0JBQXlCekcsS0FBUTRHLEVBR3hENUcsSUFBTW1GLEdBQU81RixFQUFTQyxFQUFjUSxHQUNqQyxHQUVIQyxJQUFNa0YsR0FBTzVGLEVBQVNDLEVBQWNTLEdBQ2pDLEVBSURoQixFQUNKaEwsRUFBUStDLEtBQU1pSSxFQUFXZSxHQUFNL0wsRUFBUStDLEtBQU1pSSxFQUFXZ0IsR0FDMUQsRUFHZSxFQUFWMkcsRUFBYyxHQUFLLEVBSXBCNUcsRUFBRXlHLHdCQUEwQixHQUFLLEdBRXpDLFNBQVV6RyxFQUFHQyxHQUNaLEdBQUl3RSxHQUNIeE0sRUFBSSxFQUNKNk8sRUFBTTlHLEVBQUVuSixXQUNSOFAsRUFBTTFHLEVBQUVwSixXQUNSa1EsR0FBTy9HLEdBQ1BnSCxHQUFPL0csRUFHUixJQUFLRCxJQUFNQyxFQUVWLE1BREFILElBQWUsRUFDUixDQUdELEtBQU1nSCxJQUFRSCxFQUNwQixNQUFPM0csS0FBTW1GLEVBQU0sR0FDbEJsRixJQUFNa0YsRUFBTSxFQUNaMkIsRUFBTSxHQUNOSCxFQUFNLEVBQ04xSCxFQUNFaEwsRUFBUStDLEtBQU1pSSxFQUFXZSxHQUFNL0wsRUFBUStDLEtBQU1pSSxFQUFXZ0IsR0FDMUQsQ0FHSyxJQUFLNkcsSUFBUUgsRUFDbkIsTUFBT25DLElBQWN4RSxFQUFHQyxFQUl6QndFLEdBQU16RSxDQUNOLE9BQVN5RSxFQUFNQSxFQUFJNU4sV0FDbEJrUSxFQUFHRSxRQUFTeEMsRUFFYkEsR0FBTXhFLENBQ04sT0FBU3dFLEVBQU1BLEVBQUk1TixXQUNsQm1RLEVBQUdDLFFBQVN4QyxFQUliLE9BQVFzQyxFQUFHOU8sS0FBTytPLEVBQUcvTyxHQUNwQkEsR0FHRCxPQUFPQSxHQUVOdU0sR0FBY3VDLEVBQUc5TyxHQUFJK08sRUFBRy9PLElBR3hCOE8sRUFBRzlPLEtBQU91SCxFQUFlLEdBQ3pCd0gsRUFBRy9PLEtBQU91SCxFQUFlLEVBQ3pCLEdBR0syRixHQTFVQ25TLEdBNlVUMFAsR0FBT3BELFFBQVUsU0FBVTRILEVBQU1DLEdBQ2hDLE1BQU96RSxJQUFRd0UsRUFBTSxLQUFNLEtBQU1DLElBR2xDekUsR0FBT3lELGdCQUFrQixTQUFVclEsRUFBTW9SLEdBU3hDLElBUE9wUixFQUFLUyxlQUFpQlQsS0FBVzlDLEdBQ3ZDa00sRUFBYXBKLEdBSWRvUixFQUFPQSxFQUFLN04sUUFBUzZILEVBQWtCLGFBRWxDeEMsRUFBUXlILGtCQUFtQmhILEdBQzVCRSxHQUFrQkEsRUFBYzdJLEtBQU0wUSxJQUN0QzlILEdBQWtCQSxFQUFVNUksS0FBTTBRLElBRXJDLElBQ0MsR0FBSTdQLEdBQU1pSSxFQUFRdEksS0FBTWxCLEVBQU1vUixFQUc5QixJQUFLN1AsR0FBT3FILEVBQVE4SCxtQkFHbEIxUSxFQUFLOUMsVUFBdUMsS0FBM0I4QyxFQUFLOUMsU0FBU3NELFNBQ2hDLE1BQU9lLEdBRVAsTUFBTW1ELElBR1QsTUFBT2tJLElBQVF3RSxFQUFNbFUsRUFBVSxNQUFPOEMsSUFBUUcsT0FBUyxHQUd4RHlNLEdBQU9uRCxTQUFXLFNBQVU5SyxFQUFTcUIsR0FLcEMsT0FIT3JCLEVBQVE4QixlQUFpQjlCLEtBQWN6QixHQUM3Q2tNLEVBQWF6SyxHQUVQOEssRUFBVTlLLEVBQVNxQixJQUczQjRNLEdBQU8vTCxLQUFPLFNBQVViLEVBQU00QyxJQUV0QjVDLEVBQUtTLGVBQWlCVCxLQUFXOUMsR0FDdkNrTSxFQUFhcEosRUFHZCxJQUFJcEIsR0FBS2tLLEVBQUsyRixXQUFZN0wsRUFBS2lFLGVBRTlCeUssRUFBTTFTLEdBQU0wTCxFQUFPcEosS0FBTTRILEVBQUsyRixXQUFZN0wsRUFBS2lFLGVBQzlDakksRUFBSW9CLEVBQU00QyxHQUFPeUcsR0FDakJ4TSxTQUVGLE9BQU95VSxLQUFRelUsVUFDZCtMLEVBQVFpQyxhQUFleEIsRUFDdEJySixFQUFLdU4sYUFBYzNLLElBQ2xCME8sRUFBTXRSLEVBQUtrUSxpQkFBaUJ0TixLQUFVME8sRUFBSUMsVUFDMUNELEVBQUl4SyxNQUNKLEtBQ0Z3SyxHQUdGMUUsR0FBT2hJLE1BQVEsU0FBVUMsR0FDeEIsS0FBVUMsT0FBTywwQ0FBNENELElBTzlEK0gsR0FBTzRFLFdBQWEsU0FBVXZLLEdBQzdCLEdBQUlqSCxHQUNIeVIsS0FDQXBQLEVBQUksRUFDSkYsRUFBSSxDQU9MLElBSkE2SCxHQUFnQnBCLEVBQVE4SSxpQkFDeEJ2SSxHQUFhUCxFQUFRK0ksWUFBYzFLLEVBQVFoSixNQUFPLEdBQ2xEZ0osRUFBUXpFLEtBQU15SCxHQUVURCxFQUFlLENBQ25CLE1BQVNoSyxFQUFPaUgsRUFBUTlFLEtBQ2xCbkMsSUFBU2lILEVBQVM5RSxLQUN0QkUsRUFBSW9QLEVBQVcxVCxLQUFNb0UsR0FHdkIsT0FBUUUsSUFDUDRFLEVBQVF4RSxPQUFRZ1AsRUFBWXBQLEdBQUssR0FJbkMsTUFBTzRFLElBT1I4QixFQUFVNkQsR0FBTzdELFFBQVUsU0FBVS9JLEdBQ3BDLEdBQUlvUCxHQUNIN04sRUFBTSxHQUNOWSxFQUFJLEVBQ0ozQixFQUFXUixFQUFLUSxRQUVqQixJQUFNQSxHQU1DLEdBQWtCLElBQWJBLEdBQStCLElBQWJBLEdBQStCLEtBQWJBLEVBQWtCLENBR2pFLEdBQWlDLGdCQUFyQlIsR0FBSzRSLFlBQ2hCLE1BQU81UixHQUFLNFIsV0FHWixLQUFNNVIsRUFBT0EsRUFBSzZQLFdBQVk3UCxFQUFNQSxFQUFPQSxFQUFLOE8sWUFDL0N2TixHQUFPd0gsRUFBUy9JLE9BR1osSUFBa0IsSUFBYlEsR0FBK0IsSUFBYkEsRUFDN0IsTUFBT1IsR0FBSzZSLGNBaEJaLE1BQVN6QyxFQUFPcFAsRUFBS21DLEdBQUtBLElBRXpCWixHQUFPd0gsRUFBU3FHLEVBa0JsQixPQUFPN04sSUFHUnVILEVBQU84RCxHQUFPa0YsV0FHYjdELFlBQWEsR0FFYjhELGFBQWM1RCxHQUVkcE8sTUFBT3dMLEVBRVBrRCxjQUVBcE8sUUFFQTJSLFVBQ0NDLEtBQU9DLElBQUssYUFBY2xRLE9BQU8sR0FDakNtUSxLQUFPRCxJQUFLLGNBQ1pFLEtBQU9GLElBQUssa0JBQW1CbFEsT0FBTyxHQUN0Q3FRLEtBQU9ILElBQUssb0JBR2JJLFdBQ0MzRyxLQUFRLFNBQVU1TCxHQVVqQixNQVRBQSxHQUFNLEdBQUtBLEVBQU0sR0FBR3dELFFBQVM2SSxHQUFXQyxJQUd4Q3RNLEVBQU0sSUFBT0EsRUFBTSxJQUFNQSxFQUFNLElBQU0sSUFBS3dELFFBQVM2SSxHQUFXQyxJQUU1QyxPQUFidE0sRUFBTSxLQUNWQSxFQUFNLEdBQUssSUFBTUEsRUFBTSxHQUFLLEtBR3RCQSxFQUFNOUIsTUFBTyxFQUFHLElBR3hCNE4sTUFBUyxTQUFVOUwsR0E2QmxCLE1BbEJBQSxHQUFNLEdBQUtBLEVBQU0sR0FBRzhHLGNBRVksUUFBM0I5RyxFQUFNLEdBQUc5QixNQUFPLEVBQUcsSUFFakI4QixFQUFNLElBQ1g2TSxHQUFPaEksTUFBTzdFLEVBQU0sSUFLckJBLEVBQU0sS0FBUUEsRUFBTSxHQUFLQSxFQUFNLElBQU1BLEVBQU0sSUFBTSxHQUFLLEdBQW1CLFNBQWJBLEVBQU0sSUFBOEIsUUFBYkEsRUFBTSxLQUN6RkEsRUFBTSxLQUFVQSxFQUFNLEdBQUtBLEVBQU0sSUFBcUIsUUFBYkEsRUFBTSxLQUdwQ0EsRUFBTSxJQUNqQjZNLEdBQU9oSSxNQUFPN0UsRUFBTSxJQUdkQSxHQUdSNkwsT0FBVSxTQUFVN0wsR0FDbkIsR0FBSXdTLEdBQ0hDLEdBQVl6UyxFQUFNLElBQU1BLEVBQU0sRUFFL0IsT0FBS3dMLEdBQWlCLE1BQUU3SyxLQUFNWCxFQUFNLElBQzVCLE1BSUhBLEVBQU0sSUFBTUEsRUFBTSxLQUFPbEQsVUFDN0JrRCxFQUFNLEdBQUtBLEVBQU0sR0FHTnlTLEdBQVluSCxFQUFRM0ssS0FBTThSLEtBRXBDRCxFQUFTakYsR0FBVWtGLEdBQVUsTUFFN0JELEVBQVNDLEVBQVNyVSxRQUFTLElBQUtxVSxFQUFTclMsT0FBU29TLEdBQVdDLEVBQVNyUyxVQUd2RUosRUFBTSxHQUFLQSxFQUFNLEdBQUc5QixNQUFPLEVBQUdzVSxHQUM5QnhTLEVBQU0sR0FBS3lTLEVBQVN2VSxNQUFPLEVBQUdzVSxJQUl4QnhTLEVBQU05QixNQUFPLEVBQUcsTUFJekIrUixRQUVDdEUsSUFBTyxTQUFVK0csR0FDaEIsR0FBSTdMLEdBQVc2TCxFQUFpQmxQLFFBQVM2SSxHQUFXQyxJQUFZeEYsYUFDaEUsT0FBNEIsTUFBckI0TCxFQUNOLFdBQWEsT0FBTyxHQUNwQixTQUFVelMsR0FDVCxNQUFPQSxHQUFLNEcsVUFBWTVHLEVBQUs0RyxTQUFTQyxnQkFBa0JELElBSTNENkUsTUFBUyxTQUFVaUUsR0FDbEIsR0FBSWdELEdBQVU5SSxFQUFZOEYsRUFBWSxJQUV0QyxPQUFPZ0QsS0FDTEEsRUFBYzFILE9BQVEsTUFBUU4sRUFBYSxJQUFNZ0YsRUFBWSxJQUFNaEYsRUFBYSxTQUNqRmQsRUFBWThGLEVBQVcsU0FBVTFQLEdBQ2hDLE1BQU8wUyxHQUFRaFMsS0FBZ0MsZ0JBQW5CVixHQUFLMFAsV0FBMEIxUCxFQUFLMFAsaUJBQW9CMVAsR0FBS3VOLGVBQWlCbkQsR0FBZ0JwSyxFQUFLdU4sYUFBYSxVQUFZLE9BSTNKNUIsS0FBUSxTQUFVL0ksRUFBTStQLEVBQVVDLEdBQ2pDLE1BQU8sVUFBVTVTLEdBQ2hCLEdBQUk2UyxHQUFTakcsR0FBTy9MLEtBQU1iLEVBQU00QyxFQUVoQyxPQUFlLE9BQVZpUSxFQUNnQixPQUFiRixFQUVGQSxHQUlORSxHQUFVLEdBRVUsTUFBYkYsRUFBbUJFLElBQVdELEVBQ3ZCLE9BQWJELEVBQW9CRSxJQUFXRCxFQUNsQixPQUFiRCxFQUFvQkMsR0FBcUMsSUFBNUJDLEVBQU8xVSxRQUFTeVUsR0FDaEMsT0FBYkQsRUFBb0JDLEdBQVNDLEVBQU8xVSxRQUFTeVUsR0FBVSxHQUMxQyxPQUFiRCxFQUFvQkMsR0FBU0MsRUFBTzVVLE9BQVEyVSxFQUFNelMsVUFBYXlTLEVBQ2xELE9BQWJELEdBQXNCLElBQU1FLEVBQVMsS0FBTTFVLFFBQVN5VSxHQUFVLEdBQ2pELE9BQWJELEVBQW9CRSxJQUFXRCxHQUFTQyxFQUFPNVUsTUFBTyxFQUFHMlUsRUFBTXpTLE9BQVMsS0FBUXlTLEVBQVEsS0FDeEYsSUFaTyxJQWdCVi9HLE1BQVMsU0FBVTNILEVBQU00TyxFQUFNNUQsRUFBVWxOLEVBQU9FLEdBQy9DLEdBQUk2USxHQUFnQyxRQUF2QjdPLEVBQUtqRyxNQUFPLEVBQUcsR0FDM0IrVSxFQUErQixTQUFyQjlPLEVBQUtqRyxNQUFPLElBQ3RCZ1YsRUFBa0IsWUFBVEgsQ0FFVixPQUFpQixLQUFWOVEsR0FBd0IsSUFBVEUsRUFHckIsU0FBVWxDLEdBQ1QsUUFBU0EsRUFBS2UsWUFHZixTQUFVZixFQUFNckIsRUFBU2dILEdBQ3hCLEdBQUlxSSxHQUFPa0YsRUFBWTlELEVBQU1SLEVBQU11RSxFQUFXQyxFQUM3Q2xCLEVBQU1hLElBQVdDLEVBQVUsY0FBZ0Isa0JBQzNDMUQsRUFBU3RQLEVBQUtlLFdBQ2Q2QixFQUFPcVEsR0FBVWpULEVBQUs0RyxTQUFTQyxjQUMvQndNLEdBQVkxTixJQUFRc04sQ0FFckIsSUFBSzNELEVBQVMsQ0FHYixHQUFLeUQsRUFBUyxDQUNiLE1BQVFiLEVBQU0sQ0FDYjlDLEVBQU9wUCxDQUNQLE9BQVNvUCxFQUFPQSxFQUFNOEMsR0FDckIsR0FBS2UsRUFBUzdELEVBQUt4SSxTQUFTQyxnQkFBa0JqRSxFQUF5QixJQUFsQndNLEVBQUs1TyxTQUN6RCxPQUFPLENBSVQ0UyxHQUFRbEIsRUFBZSxTQUFUaE8sSUFBb0JrUCxHQUFTLGNBRTVDLE9BQU8sRUFNUixHQUhBQSxHQUFVSixFQUFVMUQsRUFBT08sV0FBYVAsRUFBT2dFLFdBRzFDTixHQUFXSyxFQUFXLENBRTFCSCxFQUFhNUQsRUFBUWxNLEtBQWNrTSxFQUFRbE0sT0FDM0M0SyxFQUFRa0YsRUFBWWhQLE9BQ3BCaVAsRUFBWW5GLEVBQU0sS0FBT3JFLEdBQVdxRSxFQUFNLEdBQzFDWSxFQUFPWixFQUFNLEtBQU9yRSxHQUFXcUUsRUFBTSxHQUNyQ29CLEVBQU8rRCxHQUFhN0QsRUFBT2hLLFdBQVk2TixFQUV2QyxPQUFTL0QsSUFBUytELEdBQWEvRCxHQUFRQSxFQUFNOEMsS0FHM0N0RCxFQUFPdUUsRUFBWSxJQUFNQyxFQUFNN0ksTUFHaEMsR0FBdUIsSUFBbEI2RSxFQUFLNU8sWUFBb0JvTyxHQUFRUSxJQUFTcFAsRUFBTyxDQUNyRGtULEVBQVloUCxJQUFXeUYsRUFBU3dKLEVBQVd2RSxFQUMzQyxZQUtJLElBQUt5RSxJQUFhckYsR0FBU2hPLEVBQU1vRCxLQUFjcEQsRUFBTW9ELFFBQWtCYyxLQUFXOEosRUFBTSxLQUFPckUsRUFDckdpRixFQUFPWixFQUFNLE9BS2IsT0FBU29CLElBQVMrRCxHQUFhL0QsR0FBUUEsRUFBTThDLEtBQzNDdEQsRUFBT3VFLEVBQVksSUFBTUMsRUFBTTdJLE1BRWhDLElBQU8wSSxFQUFTN0QsRUFBS3hJLFNBQVNDLGdCQUFrQmpFLEVBQXlCLElBQWxCd00sRUFBSzVPLGFBQXNCb08sSUFFNUV5RSxLQUNIakUsRUFBTWhNLEtBQWNnTSxFQUFNaE0sUUFBa0JjLElBQVd5RixFQUFTaUYsSUFHN0RRLElBQVNwUCxHQUNiLEtBUUosT0FEQTRPLElBQVExTSxFQUNEME0sSUFBUzVNLEdBQTRCLElBQWpCNE0sRUFBTzVNLEdBQWU0TSxFQUFPNU0sR0FBUyxLQUtyRTRKLE9BQVUsU0FBVTJILEVBQVFyRSxHQUszQixHQUFJdk4sR0FDSC9DLEVBQUtrSyxFQUFLZ0MsUUFBU3lJLElBQVl6SyxFQUFLMEssV0FBWUQsRUFBTzFNLGdCQUN0RCtGLEdBQU9oSSxNQUFPLHVCQUF5QjJPLEVBS3pDLE9BQUszVSxHQUFJd0UsR0FDRHhFLEVBQUlzUSxHQUlQdFEsRUFBR3VCLE9BQVMsR0FDaEJ3QixHQUFTNFIsRUFBUUEsRUFBUSxHQUFJckUsR0FDdEJwRyxFQUFLMEssV0FBV2pWLGVBQWdCZ1YsRUFBTzFNLGVBQzdDc0gsR0FBYSxTQUFVdEIsRUFBTXJELEdBQzVCLEdBQUlpSyxHQUNIQyxFQUFVOVUsRUFBSWlPLEVBQU1xQyxHQUNwQi9NLEVBQUl1UixFQUFRdlQsTUFDYixPQUFRZ0MsSUFDUHNSLEVBQU10VixFQUFRK0MsS0FBTTJMLEVBQU02RyxFQUFRdlIsSUFDbEMwSyxFQUFNNEcsS0FBV2pLLEVBQVNpSyxHQUFRQyxFQUFRdlIsTUFHNUMsU0FBVW5DLEdBQ1QsTUFBT3BCLEdBQUlvQixFQUFNLEVBQUcyQixLQUloQi9DLElBSVRrTSxTQUVDNkksSUFBT3hGLEdBQWEsU0FBVXpQLEdBSTdCLEdBQUkwUixNQUNIbkosS0FDQTJNLEVBQVUzSyxFQUFTdkssRUFBUzZFLFFBQVN3SCxFQUFPLE1BRTdDLE9BQU82SSxHQUFTeFEsR0FDZitLLEdBQWEsU0FBVXRCLEVBQU1yRCxFQUFTN0ssRUFBU2dILEdBQzlDLEdBQUkzRixHQUNINlQsRUFBWUQsRUFBUy9HLEVBQU0sS0FBTWxILE1BQ2pDeEQsRUFBSTBLLEVBQUsxTSxNQUdWLE9BQVFnQyxLQUNEbkMsRUFBTzZULEVBQVUxUixNQUN0QjBLLEVBQUsxSyxLQUFPcUgsRUFBUXJILEdBQUtuQyxNQUk1QixTQUFVQSxFQUFNckIsRUFBU2dILEdBR3hCLE1BRkF5SyxHQUFNLEdBQUtwUSxFQUNYNFQsRUFBU3hELEVBQU8sS0FBTXpLLEVBQUtzQixJQUNuQkEsRUFBUXNELFNBSW5CdUosSUFBTzNGLEdBQWEsU0FBVXpQLEdBQzdCLE1BQU8sVUFBVXNCLEdBQ2hCLE1BQU80TSxJQUFRbE8sRUFBVXNCLEdBQU9HLE9BQVMsS0FJM0NzSixTQUFZMEUsR0FBYSxTQUFVN0gsR0FDbEMsTUFBTyxVQUFVdEcsR0FDaEIsT0FBU0EsRUFBSzRSLGFBQWU1UixFQUFLK1QsV0FBYWhMLEVBQVMvSSxJQUFTN0IsUUFBU21JLEdBQVMsTUFXckYwTixLQUFRN0YsR0FBYyxTQUFVNkYsR0FNL0IsTUFKTTFJLEdBQVk1SyxLQUFLc1QsR0FBUSxLQUM5QnBILEdBQU9oSSxNQUFPLHFCQUF1Qm9QLEdBRXRDQSxFQUFPQSxFQUFLelEsUUFBUzZJLEdBQVdDLElBQVl4RixjQUNyQyxTQUFVN0csR0FDaEIsR0FBSWlVLEVBQ0osR0FDQyxJQUFNQSxFQUFXNUssRUFDaEJySixFQUFLZ1UsS0FDTGhVLEVBQUt1TixhQUFhLGFBQWV2TixFQUFLdU4sYUFBYSxRQUduRCxNQURBMEcsR0FBV0EsRUFBU3BOLGNBQ2JvTixJQUFhRCxHQUEyQyxJQUFuQ0MsRUFBUzlWLFFBQVM2VixFQUFPLFlBRTVDaFUsRUFBT0EsRUFBS2UsYUFBaUMsSUFBbEJmLEVBQUtRLFNBQzNDLFFBQU8sS0FLVHlDLE9BQVUsU0FBVWpELEdBQ25CLEdBQUlrVSxHQUFPdFgsRUFBT0ssVUFBWUwsRUFBT0ssU0FBU2lYLElBQzlDLE9BQU9BLElBQVFBLEVBQUtqVyxNQUFPLEtBQVErQixFQUFLbU4sSUFHekNnSCxLQUFRLFNBQVVuVSxHQUNqQixNQUFPQSxLQUFTN0MsR0FHakJpWCxNQUFTLFNBQVVwVSxHQUNsQixNQUFPQSxLQUFTOUMsRUFBU21YLGlCQUFtQm5YLEVBQVNvWCxVQUFZcFgsRUFBU29YLGdCQUFrQnRVLEVBQUtrRSxNQUFRbEUsRUFBS3VVLE9BQVN2VSxFQUFLd1UsV0FJN0hDLFFBQVcsU0FBVXpVLEdBQ3BCLE1BQU9BLEdBQUswVSxZQUFhLEdBRzFCQSxTQUFZLFNBQVUxVSxHQUNyQixNQUFPQSxHQUFLMFUsWUFBYSxHQUcxQkMsUUFBVyxTQUFVM1UsR0FHcEIsR0FBSTRHLEdBQVc1RyxFQUFLNEcsU0FBU0MsYUFDN0IsT0FBcUIsVUFBYkQsS0FBMEI1RyxFQUFLMlUsU0FBMEIsV0FBYi9OLEtBQTJCNUcsRUFBSzRVLFVBR3JGQSxTQUFZLFNBQVU1VSxHQU9yQixNQUpLQSxHQUFLZSxZQUNUZixFQUFLZSxXQUFXOFQsY0FHVjdVLEVBQUs0VSxZQUFhLEdBSTFCRSxNQUFTLFNBQVU5VSxHQU1sQixJQUFNQSxFQUFPQSxFQUFLNlAsV0FBWTdQLEVBQU1BLEVBQU9BLEVBQUs4TyxZQUMvQyxHQUFLOU8sRUFBSzRHLFNBQVcsS0FBeUIsSUFBbEI1RyxFQUFLUSxVQUFvQyxJQUFsQlIsRUFBS1EsU0FDdkQsT0FBTyxDQUdULFFBQU8sR0FHUjhPLE9BQVUsU0FBVXRQLEdBQ25CLE9BQVE4SSxFQUFLZ0MsUUFBZSxNQUFHOUssSUFJaEMrVSxPQUFVLFNBQVUvVSxHQUNuQixNQUFPa00sSUFBUXhMLEtBQU1WLEVBQUs0RyxXQUczQndKLE1BQVMsU0FBVXBRLEdBQ2xCLE1BQU9pTSxHQUFRdkwsS0FBTVYsRUFBSzRHLFdBRzNCb08sT0FBVSxTQUFVaFYsR0FDbkIsR0FBSTRDLEdBQU81QyxFQUFLNEcsU0FBU0MsYUFDekIsT0FBZ0IsVUFBVGpFLEdBQWtDLFdBQWQ1QyxFQUFLa0UsTUFBOEIsV0FBVHRCLEdBR3REMEQsS0FBUSxTQUFVdEcsR0FDakIsR0FBSWEsRUFHSixPQUF1QyxVQUFoQ2IsRUFBSzRHLFNBQVNDLGVBQ04sU0FBZDdHLEVBQUtrRSxPQUNtQyxPQUFyQ3JELEVBQU9iLEVBQUt1TixhQUFhLFVBQW9CMU0sRUFBS2dHLGdCQUFrQjdHLEVBQUtrRSxPQUk5RWxDLE1BQVNpTixHQUF1QixXQUMvQixPQUFTLEtBR1YvTSxLQUFRK00sR0FBdUIsU0FBVUUsRUFBY2hQLEdBQ3RELE9BQVNBLEVBQVMsS0FHbkI4QixHQUFNZ04sR0FBdUIsU0FBVUUsRUFBY2hQLEVBQVErTyxHQUM1RCxPQUFvQixFQUFYQSxFQUFlQSxFQUFXL08sRUFBUytPLEtBRzdDK0YsS0FBUWhHLEdBQXVCLFNBQVVFLEVBQWNoUCxHQUN0RCxHQUFJZ0MsR0FBSSxDQUNSLE1BQVloQyxFQUFKZ0MsRUFBWUEsR0FBSyxFQUN4QmdOLEVBQWFwUixLQUFNb0UsRUFFcEIsT0FBT2dOLEtBR1IrRixJQUFPakcsR0FBdUIsU0FBVUUsRUFBY2hQLEdBQ3JELEdBQUlnQyxHQUFJLENBQ1IsTUFBWWhDLEVBQUpnQyxFQUFZQSxHQUFLLEVBQ3hCZ04sRUFBYXBSLEtBQU1vRSxFQUVwQixPQUFPZ04sS0FHUmdHLEdBQU1sRyxHQUF1QixTQUFVRSxFQUFjaFAsRUFBUStPLEdBQzVELEdBQUkvTSxHQUFlLEVBQVgrTSxFQUFlQSxFQUFXL08sRUFBUytPLENBQzNDLFFBQVUvTSxHQUFLLEdBQ2RnTixFQUFhcFIsS0FBTW9FLEVBRXBCLE9BQU9nTixLQUdSaUcsR0FBTW5HLEdBQXVCLFNBQVVFLEVBQWNoUCxFQUFRK08sR0FDNUQsR0FBSS9NLEdBQWUsRUFBWCtNLEVBQWVBLEVBQVcvTyxFQUFTK08sQ0FDM0MsTUFBYy9PLElBQUpnQyxHQUNUZ04sRUFBYXBSLEtBQU1vRSxFQUVwQixPQUFPZ04sT0FLVnJHLEVBQUtnQyxRQUFhLElBQUloQyxFQUFLZ0MsUUFBWSxFQUd2QyxLQUFNM0ksS0FBT2tULE9BQU8sRUFBTUMsVUFBVSxFQUFNQyxNQUFNLEVBQU1DLFVBQVUsRUFBTUMsT0FBTyxHQUM1RTNNLEVBQUtnQyxRQUFTM0ksR0FBTTRNLEdBQW1CNU0sRUFFeEMsS0FBTUEsS0FBT3VULFFBQVEsRUFBTUMsT0FBTyxHQUNqQzdNLEVBQUtnQyxRQUFTM0ksR0FBTTZNLEdBQW9CN00sRUFJekMsU0FBU3FSLE9BQ1RBLEdBQVc1VCxVQUFZa0osRUFBSzhNLFFBQVU5TSxFQUFLZ0MsUUFDM0NoQyxFQUFLMEssV0FBYSxHQUFJQSxHQUV0QixTQUFTbEcsSUFBVTVPLEVBQVVtWCxHQUM1QixHQUFJbkMsR0FBUzNULEVBQU8rVixFQUFRNVIsRUFDM0I2UixFQUFPaEosRUFBUWlKLEVBQ2ZDLEVBQVNuTSxFQUFZcEwsRUFBVyxJQUVqQyxJQUFLdVgsRUFDSixNQUFPSixHQUFZLEVBQUlJLEVBQU9oWSxNQUFPLEVBR3RDOFgsR0FBUXJYLEVBQ1JxTyxLQUNBaUosRUFBYWxOLEVBQUt3SixTQUVsQixPQUFReUQsRUFBUSxHQUdUckMsSUFBWTNULEVBQVFrTCxFQUFPN0ssS0FBTTJWLE9BQ2pDaFcsSUFFSmdXLEVBQVFBLEVBQU05WCxNQUFPOEIsRUFBTSxHQUFHSSxTQUFZNFYsR0FFM0NoSixFQUFPaFAsS0FBTStYLE9BR2RwQyxHQUFVLEdBR0ozVCxFQUFRbUwsRUFBYTlLLEtBQU0yVixNQUNoQ3JDLEVBQVUzVCxFQUFNbU8sUUFDaEI0SCxFQUFPL1gsTUFDTitJLE1BQU80TSxFQUVQeFAsS0FBTW5FLEVBQU0sR0FBR3dELFFBQVN3SCxFQUFPLE9BRWhDZ0wsRUFBUUEsRUFBTTlYLE1BQU95VixFQUFRdlQsUUFJOUIsS0FBTStELElBQVE0RSxHQUFLa0gsU0FDWmpRLEVBQVF3TCxFQUFXckgsR0FBTzlELEtBQU0yVixLQUFjQyxFQUFZOVIsTUFDOURuRSxFQUFRaVcsRUFBWTlSLEdBQVFuRSxNQUM3QjJULEVBQVUzVCxFQUFNbU8sUUFDaEI0SCxFQUFPL1gsTUFDTitJLE1BQU80TSxFQUNQeFAsS0FBTUEsRUFDTnNGLFFBQVN6SixJQUVWZ1csRUFBUUEsRUFBTTlYLE1BQU95VixFQUFRdlQsUUFJL0IsS0FBTXVULEVBQ0wsTUFPRixNQUFPbUMsR0FDTkUsRUFBTTVWLE9BQ040VixFQUNDbkosR0FBT2hJLE1BQU9sRyxHQUVkb0wsRUFBWXBMLEVBQVVxTyxHQUFTOU8sTUFBTyxHQUd6QyxRQUFTd1AsSUFBWXFJLEdBQ3BCLEdBQUkzVCxHQUFJLEVBQ1BDLEVBQU0wVCxFQUFPM1YsT0FDYnpCLEVBQVcsRUFDWixNQUFZMEQsRUFBSkQsRUFBU0EsSUFDaEJ6RCxHQUFZb1gsRUFBTzNULEdBQUcyRSxLQUV2QixPQUFPcEksR0FHUixRQUFTd1gsSUFBZXRDLEVBQVN1QyxFQUFZQyxHQUM1QyxHQUFJbEUsR0FBTWlFLEVBQVdqRSxJQUNwQm1FLEVBQW1CRCxHQUFnQixlQUFSbEUsRUFDM0JvRSxFQUFXelUsR0FFWixPQUFPc1UsR0FBV25VLE1BRWpCLFNBQVVoQyxFQUFNckIsRUFBU2dILEdBQ3hCLE1BQVMzRixFQUFPQSxFQUFNa1MsR0FDckIsR0FBdUIsSUFBbEJsUyxFQUFLUSxVQUFrQjZWLEVBQzNCLE1BQU96QyxHQUFTNVQsRUFBTXJCLEVBQVNnSCxJQU1sQyxTQUFVM0YsRUFBTXJCLEVBQVNnSCxHQUN4QixHQUFJWixHQUFNaUosRUFBT2tGLEVBQ2hCcUQsRUFBUzVNLEVBQVUsSUFBTTJNLENBRzFCLElBQUszUSxHQUNKLE1BQVMzRixFQUFPQSxFQUFNa1MsR0FDckIsSUFBdUIsSUFBbEJsUyxFQUFLUSxVQUFrQjZWLElBQ3RCekMsRUFBUzVULEVBQU1yQixFQUFTZ0gsR0FDNUIsT0FBTyxNQUtWLE9BQVMzRixFQUFPQSxFQUFNa1MsR0FDckIsR0FBdUIsSUFBbEJsUyxFQUFLUSxVQUFrQjZWLEVBRTNCLEdBREFuRCxFQUFhbFQsRUFBTW9ELEtBQWNwRCxFQUFNb0QsUUFDakM0SyxFQUFRa0YsRUFBWWhCLEtBQVVsRSxFQUFNLEtBQU91SSxHQUNoRCxJQUFNeFIsRUFBT2lKLEVBQU0sT0FBUSxHQUFRakosSUFBUzhELEVBQzNDLE1BQU85RCxNQUFTLE1BS2pCLElBRkFpSixFQUFRa0YsRUFBWWhCLElBQVVxRSxHQUM5QnZJLEVBQU0sR0FBSzRGLEVBQVM1VCxFQUFNckIsRUFBU2dILElBQVNrRCxFQUN2Q21GLEVBQU0sTUFBTyxFQUNqQixPQUFPLEdBU2YsUUFBU3dJLElBQWdCQyxHQUN4QixNQUFPQSxHQUFTdFcsT0FBUyxFQUN4QixTQUFVSCxFQUFNckIsRUFBU2dILEdBQ3hCLEdBQUl4RCxHQUFJc1UsRUFBU3RXLE1BQ2pCLE9BQVFnQyxJQUNQLElBQU1zVSxFQUFTdFUsR0FBSW5DLEVBQU1yQixFQUFTZ0gsR0FDakMsT0FBTyxDQUdULFFBQU8sR0FFUjhRLEVBQVMsR0FHWCxRQUFTQyxJQUFVN0MsRUFBV3ZSLEVBQUswTixFQUFRclIsRUFBU2dILEdBQ25ELEdBQUkzRixHQUNIMlcsS0FDQXhVLEVBQUksRUFDSkMsRUFBTXlSLEVBQVUxVCxPQUNoQnlXLEVBQWdCLE1BQVB0VSxDQUVWLE1BQVlGLEVBQUpELEVBQVNBLEtBQ1ZuQyxFQUFPNlQsRUFBVTFSLE9BQ2hCNk4sR0FBVUEsRUFBUWhRLEVBQU1yQixFQUFTZ0gsTUFDdENnUixFQUFhNVksS0FBTWlDLEdBQ2Q0VyxHQUNKdFUsRUFBSXZFLEtBQU1vRSxHQU1kLE9BQU93VSxHQUdSLFFBQVNFLElBQVl2RSxFQUFXNVQsRUFBVWtWLEVBQVNrRCxFQUFZQyxFQUFZQyxHQU8xRSxNQU5LRixLQUFlQSxFQUFZMVQsS0FDL0IwVCxFQUFhRCxHQUFZQyxJQUVyQkMsSUFBZUEsRUFBWTNULEtBQy9CMlQsRUFBYUYsR0FBWUUsRUFBWUMsSUFFL0I3SSxHQUFhLFNBQVV0QixFQUFNNUYsRUFBU3RJLEVBQVNnSCxHQUNyRCxHQUFJc1IsR0FBTTlVLEVBQUduQyxFQUNaa1gsS0FDQUMsS0FDQUMsRUFBY25RLEVBQVE5RyxPQUd0Qm1CLEVBQVF1TCxHQUFRd0ssR0FBa0IzWSxHQUFZLElBQUtDLEVBQVE2QixVQUFhN0IsR0FBWUEsTUFHcEYyWSxHQUFZaEYsSUFBZXpGLEdBQVNuTyxFQUVuQzRDLEVBREFvVixHQUFVcFYsRUFBTzRWLEVBQVE1RSxFQUFXM1QsRUFBU2dILEdBRzlDNFIsRUFBYTNELEVBRVptRCxJQUFnQmxLLEVBQU95RixFQUFZOEUsR0FBZU4sTUFNakQ3UCxFQUNEcVEsQ0FRRixJQUxLMUQsR0FDSkEsRUFBUzBELEVBQVdDLEVBQVk1WSxFQUFTZ0gsR0FJckNtUixFQUFhLENBQ2pCRyxFQUFPUCxHQUFVYSxFQUFZSixHQUM3QkwsRUFBWUcsS0FBVXRZLEVBQVNnSCxHQUcvQnhELEVBQUk4VSxFQUFLOVcsTUFDVCxPQUFRZ0MsS0FDRG5DLEVBQU9pWCxFQUFLOVUsTUFDakJvVixFQUFZSixFQUFRaFYsTUFBU21WLEVBQVdILEVBQVFoVixJQUFPbkMsSUFLMUQsR0FBSzZNLEdBQ0osR0FBS2tLLEdBQWN6RSxFQUFZLENBQzlCLEdBQUt5RSxFQUFhLENBRWpCRSxLQUNBOVUsRUFBSW9WLEVBQVdwWCxNQUNmLE9BQVFnQyxLQUNEbkMsRUFBT3VYLEVBQVdwVixLQUV2QjhVLEVBQUtsWixLQUFPdVosRUFBVW5WLEdBQUtuQyxFQUc3QitXLEdBQVksS0FBT1EsS0FBa0JOLEVBQU10UixHQUk1Q3hELEVBQUlvVixFQUFXcFgsTUFDZixPQUFRZ0MsS0FDRG5DLEVBQU91WCxFQUFXcFYsTUFDdEI4VSxFQUFPRixFQUFhNVksRUFBUStDLEtBQU0yTCxFQUFNN00sR0FBU2tYLEVBQU8vVSxJQUFNLEtBRS9EMEssRUFBS29LLEtBQVVoUSxFQUFRZ1EsR0FBUWpYLFNBT2xDdVgsR0FBYWIsR0FDWmEsSUFBZXRRLEVBQ2RzUSxFQUFXOVUsT0FBUTJVLEVBQWFHLEVBQVdwWCxRQUMzQ29YLEdBRUdSLEVBQ0pBLEVBQVksS0FBTTlQLEVBQVNzUSxFQUFZNVIsR0FFdkM1SCxFQUFLK0QsTUFBT21GLEVBQVNzUSxLQU16QixRQUFTQyxJQUFtQjFCLEdBQzNCLEdBQUkyQixHQUFjN0QsRUFBU3ZSLEVBQzFCRCxFQUFNMFQsRUFBTzNWLE9BQ2J1WCxFQUFrQjVPLEVBQUtrSixTQUFVOEQsRUFBTyxHQUFHNVIsTUFDM0N5VCxFQUFtQkQsR0FBbUI1TyxFQUFLa0osU0FBUyxLQUNwRDdQLEVBQUl1VixFQUFrQixFQUFJLEVBRzFCRSxFQUFlMUIsR0FBZSxTQUFVbFcsR0FDdkMsTUFBT0EsS0FBU3lYLEdBQ2RFLEdBQWtCLEdBQ3JCRSxFQUFrQjNCLEdBQWUsU0FBVWxXLEdBQzFDLE1BQU83QixHQUFRK0MsS0FBTXVXLEVBQWN6WCxHQUFTLElBQzFDMlgsR0FBa0IsR0FDckJsQixHQUFhLFNBQVV6VyxFQUFNckIsRUFBU2dILEdBQ3JDLE9BQVUrUixJQUFxQi9SLEdBQU9oSCxJQUFZdUssTUFDaER1TyxFQUFlOVksR0FBUzZCLFNBQ3hCb1gsRUFBYzVYLEVBQU1yQixFQUFTZ0gsR0FDN0JrUyxFQUFpQjdYLEVBQU1yQixFQUFTZ0gsS0FHcEMsTUFBWXZELEVBQUpELEVBQVNBLElBQ2hCLEdBQU15UixFQUFVOUssRUFBS2tKLFNBQVU4RCxFQUFPM1QsR0FBRytCLE1BQ3hDdVMsR0FBYVAsR0FBY00sR0FBZ0JDLEdBQVk3QyxRQUNqRCxDQUlOLEdBSEFBLEVBQVU5SyxFQUFLa0gsT0FBUThGLEVBQU8zVCxHQUFHK0IsTUFBT3BDLE1BQU8sS0FBTWdVLEVBQU8zVCxHQUFHcUgsU0FHMURvSyxFQUFTeFEsR0FBWSxDQUd6QixJQURBZixJQUFNRixFQUNNQyxFQUFKQyxFQUFTQSxJQUNoQixHQUFLeUcsRUFBS2tKLFNBQVU4RCxFQUFPelQsR0FBRzZCLE1BQzdCLEtBR0YsT0FBTzJTLElBQ04xVSxFQUFJLEdBQUtxVSxHQUFnQkMsR0FDekJ0VSxFQUFJLEdBQUtzTCxHQUVScUksRUFBTzdYLE1BQU8sRUFBR2tFLEVBQUksR0FBSXRFLFFBQVNpSixNQUFnQyxNQUF6QmdQLEVBQVEzVCxFQUFJLEdBQUkrQixLQUFlLElBQU0sTUFDN0VYLFFBQVN3SCxFQUFPLE1BQ2xCNkksRUFDSXZSLEVBQUpGLEdBQVNxVixHQUFtQjFCLEVBQU83WCxNQUFPa0UsRUFBR0UsSUFDekNELEVBQUpDLEdBQVdtVixHQUFvQjFCLEVBQVNBLEVBQU83WCxNQUFPb0UsSUFDbERELEVBQUpDLEdBQVdvTCxHQUFZcUksSUFHekJXLEVBQVMxWSxLQUFNNlYsR0FJakIsTUFBTzRDLElBQWdCQyxHQUd4QixRQUFTcUIsSUFBMEJDLEVBQWlCQyxHQUVuRCxHQUFJQyxHQUFvQixFQUN2QkMsRUFBUUYsRUFBWTdYLE9BQVMsRUFDN0JnWSxFQUFZSixFQUFnQjVYLE9BQVMsRUFDckNpWSxFQUFlLFNBQVV2TCxFQUFNbE8sRUFBU2dILEVBQUtzQixFQUFTb1IsR0FDckQsR0FBSXJZLEdBQU1xQyxFQUFHdVIsRUFDWjBFLEtBQ0FDLEVBQWUsRUFDZnBXLEVBQUksSUFDSjBSLEVBQVloSCxNQUNaMkwsRUFBNkIsTUFBakJILEVBQ1pJLEVBQWdCdlAsRUFFaEI1SCxFQUFRdUwsR0FBUXNMLEdBQWFyUCxFQUFLekksS0FBVSxJQUFHLElBQUtnWSxHQUFpQjFaLEVBQVFvQyxZQUFjcEMsR0FFM0YrWixFQUFpQi9PLEdBQTRCLE1BQWpCOE8sRUFBd0IsRUFBSXBWLEtBQUtDLFVBQVksRUFTMUUsS0FQS2tWLElBQ0p0UCxFQUFtQnZLLElBQVl6QixHQUFZeUIsRUFDM0NrSyxFQUFhb1AsR0FLZSxPQUFwQmpZLEVBQU9zQixFQUFNYSxJQUFhQSxJQUFNLENBQ3hDLEdBQUtnVyxHQUFhblksRUFBTyxDQUN4QnFDLEVBQUksQ0FDSixPQUFTdVIsRUFBVW1FLEVBQWdCMVYsS0FDbEMsR0FBS3VSLEVBQVM1VCxFQUFNckIsRUFBU2dILEdBQVEsQ0FDcENzQixFQUFRbEosS0FBTWlDLEVBQ2QsT0FHR3dZLElBQ0o3TyxFQUFVK08sRUFDVjdQLElBQWVvUCxHQUtaQyxLQUVFbFksR0FBUTRULEdBQVc1VCxJQUN4QnVZLElBSUkxTCxHQUNKZ0gsRUFBVTlWLEtBQU1pQyxJQU9uQixHQURBdVksR0FBZ0JwVyxFQUNYK1YsR0FBUy9WLElBQU1vVyxFQUFlLENBQ2xDbFcsRUFBSSxDQUNKLE9BQVN1UixFQUFVb0UsRUFBWTNWLEtBQzlCdVIsRUFBU0MsRUFBV3lFLEVBQVkzWixFQUFTZ0gsRUFHMUMsSUFBS2tILEVBQU8sQ0FFWCxHQUFLMEwsRUFBZSxFQUNuQixNQUFRcFcsSUFDQTBSLEVBQVUxUixJQUFNbVcsRUFBV25XLEtBQ2pDbVcsRUFBV25XLEdBQUtvSSxFQUFJckosS0FBTStGLEdBTTdCcVIsR0FBYTVCLEdBQVU0QixHQUl4QnZhLEVBQUsrRCxNQUFPbUYsRUFBU3FSLEdBR2hCRSxJQUFjM0wsR0FBUXlMLEVBQVduWSxPQUFTLEdBQzVDb1ksRUFBZVAsRUFBWTdYLE9BQVcsR0FFeEN5TSxHQUFPNEUsV0FBWXZLLEdBVXJCLE1BTEt1UixLQUNKN08sRUFBVStPLEVBQ1Z4UCxFQUFtQnVQLEdBR2I1RSxFQUdULE9BQU9xRSxHQUNOL0osR0FBY2lLLEdBQ2RBLEVBR0ZuUCxFQUFVMkQsR0FBTzNELFFBQVUsU0FBVXZLLEVBQVVpYSxHQUM5QyxHQUFJeFcsR0FDSDZWLEtBQ0FELEtBQ0E5QixFQUFTbE0sRUFBZXJMLEVBQVcsSUFFcEMsS0FBTXVYLEVBQVMsQ0FFUjBDLElBQ0xBLEVBQVFyTCxHQUFVNU8sSUFFbkJ5RCxFQUFJd1csRUFBTXhZLE1BQ1YsT0FBUWdDLElBQ1A4VCxFQUFTdUIsR0FBbUJtQixFQUFNeFcsSUFDN0I4VCxFQUFRN1MsR0FDWjRVLEVBQVlqYSxLQUFNa1ksR0FFbEI4QixFQUFnQmhhLEtBQU1rWSxFQUt4QkEsR0FBU2xNLEVBQWVyTCxFQUFVb1osR0FBMEJDLEVBQWlCQyxJQUU5RSxNQUFPL0IsR0FHUixTQUFTb0IsSUFBa0IzWSxFQUFVa2EsRUFBVTNSLEdBQzlDLEdBQUk5RSxHQUFJLEVBQ1BDLEVBQU13VyxFQUFTelksTUFDaEIsTUFBWWlDLEVBQUpELEVBQVNBLElBQ2hCeUssR0FBUWxPLEVBQVVrYSxFQUFTelcsR0FBSThFLEVBRWhDLE9BQU9BLEdBR1IsUUFBUzZHLElBQVFwUCxFQUFVQyxFQUFTc0ksRUFBUzRGLEdBQzVDLEdBQUkxSyxHQUFHMlQsRUFBUStDLEVBQU8zVSxFQUFNN0QsRUFDM0JOLEVBQVF1TixHQUFVNU8sRUFFbkIsS0FBTW1PLEdBRWlCLElBQWpCOU0sRUFBTUksT0FBZSxDQUl6QixHQURBMlYsRUFBUy9WLEVBQU0sR0FBS0EsRUFBTSxHQUFHOUIsTUFBTyxHQUMvQjZYLEVBQU8zVixPQUFTLEdBQWtDLFFBQTVCMFksRUFBUS9DLEVBQU8sSUFBSTVSLE1BQzVDMEUsRUFBUWtILFNBQWdDLElBQXJCblIsRUFBUTZCLFVBQWtCNkksR0FDN0NQLEVBQUtrSixTQUFVOEQsRUFBTyxHQUFHNVIsTUFBUyxDQUduQyxHQURBdkYsR0FBWW1LLEVBQUt6SSxLQUFTLEdBQUd3WSxFQUFNclAsUUFBUSxHQUFHakcsUUFBUTZJLEdBQVdDLElBQVkxTixRQUFrQixJQUN6RkEsRUFDTCxNQUFPc0ksRUFFUnZJLEdBQVdBLEVBQVNULE1BQU82WCxFQUFPNUgsUUFBUXBILE1BQU0zRyxRQUlqRGdDLEVBQUlvSixFQUF3QixhQUFFN0ssS0FBTWhDLEdBQWEsRUFBSW9YLEVBQU8zVixNQUM1RCxPQUFRZ0MsSUFBTSxDQUliLEdBSEEwVyxFQUFRL0MsRUFBTzNULEdBR1YyRyxFQUFLa0osU0FBVzlOLEVBQU8yVSxFQUFNM1UsTUFDakMsS0FFRCxLQUFNN0QsRUFBT3lJLEVBQUt6SSxLQUFNNkQsTUFFakIySSxFQUFPeE0sRUFDWndZLEVBQU1yUCxRQUFRLEdBQUdqRyxRQUFTNkksR0FBV0MsSUFDckNsQixFQUFTekssS0FBTW9WLEVBQU8sR0FBRzVSLE9BQVV2RixFQUFRb0MsWUFBY3BDLElBQ3JELENBS0osR0FGQW1YLEVBQU9yVCxPQUFRTixFQUFHLEdBQ2xCekQsRUFBV21PLEVBQUsxTSxRQUFVc04sR0FBWXFJLElBQ2hDcFgsRUFFTCxNQURBWCxHQUFLK0QsTUFBT21GLEVBQVM0RixHQUNkNUYsQ0FHUixTQWdCTCxNQVBBZ0MsR0FBU3ZLLEVBQVVxQixHQUNsQjhNLEVBQ0FsTyxHQUNDMEssRUFDRHBDLEVBQ0FrRSxFQUFTekssS0FBTWhDLElBRVR1SSxFQU1SMkIsRUFBUStJLFdBQWF2TyxFQUFRdUYsTUFBTSxJQUFJbkcsS0FBTXlILEdBQVl5RCxLQUFLLE1BQVF0SyxFQUl0RXdGLEVBQVE4SSxpQkFBbUIxSCxFQUczQlosSUFJQVIsRUFBUW1JLGFBQWUzQyxHQUFPLFNBQVUwSyxHQUV2QyxNQUF1RSxHQUFoRUEsRUFBS25JLHdCQUF5QnpULEVBQVNpSSxjQUFjLFVBTXZEaUosR0FBTyxTQUFVQyxHQUV0QixNQURBQSxHQUFJdUIsVUFBWSxtQkFDK0IsTUFBeEN2QixFQUFJd0IsV0FBV3RDLGFBQWEsV0FFbkNlLEdBQVcseUJBQTBCLFNBQVV0TyxFQUFNNEMsRUFBTW9HLEdBQzFELE1BQU1BLEdBQU4sVUFDUWhKLEVBQUt1TixhQUFjM0ssRUFBNkIsU0FBdkJBLEVBQUtpRSxjQUEyQixFQUFJLEtBT2pFK0IsRUFBUWlDLFlBQWV1RCxHQUFPLFNBQVVDLEdBRzdDLE1BRkFBLEdBQUl1QixVQUFZLFdBQ2hCdkIsRUFBSXdCLFdBQVdyQyxhQUFjLFFBQVMsSUFDWSxLQUEzQ2EsRUFBSXdCLFdBQVd0QyxhQUFjLFlBRXBDZSxHQUFXLFFBQVMsU0FBVXRPLEVBQU00QyxFQUFNb0csR0FDekMsTUFBTUEsSUFBeUMsVUFBaENoSixFQUFLNEcsU0FBU0MsY0FBN0IsVUFDUTdHLEVBQUsrWSxlQU9UM0ssR0FBTyxTQUFVQyxHQUN0QixNQUF1QyxPQUFoQ0EsRUFBSWQsYUFBYSxlQUV4QmUsR0FBVzdELEVBQVUsU0FBVXpLLEVBQU00QyxFQUFNb0csR0FDMUMsR0FBSXNJLEVBQ0osT0FBTXRJLEdBQU4sV0FDU3NJLEVBQU10UixFQUFLa1EsaUJBQWtCdE4sS0FBVzBPLEVBQUlDLFVBQ25ERCxFQUFJeEssTUFDSjlHLEVBQU00QyxNQUFXLEVBQU9BLEVBQUtpRSxjQUFnQixPQUtqRHZKLEVBQU8rQyxLQUFPdU0sR0FDZHRQLEVBQU84VCxLQUFPeEUsR0FBT2tGLFVBQ3JCeFUsRUFBTzhULEtBQUssS0FBTzlULEVBQU84VCxLQUFLdEcsUUFDL0J4TixFQUFPMGIsT0FBU3BNLEdBQU80RSxXQUN2QmxVLEVBQU9nSixLQUFPc0csR0FBTzdELFFBQ3JCekwsRUFBTzJiLFNBQVdyTSxHQUFPNUQsTUFDekIxTCxFQUFPbU0sU0FBV21ELEdBQU9uRCxVQUdyQjdNLEVBRUosSUFBSXNjLEtBR0osU0FBU0MsR0FBZXhXLEdBQ3ZCLEdBQUl5VyxHQUFTRixFQUFjdlcsS0FJM0IsT0FIQXJGLEdBQU9tRSxLQUFNa0IsRUFBUTVDLE1BQU9mLE9BQXdCLFNBQVVzTixFQUFHK00sR0FDaEVELEVBQVFDLElBQVMsSUFFWEQsRUF5QlI5YixFQUFPZ2MsVUFBWSxTQUFVM1csR0FJNUJBLEVBQTZCLGdCQUFaQSxHQUNkdVcsRUFBY3ZXLElBQWF3VyxFQUFleFcsR0FDNUNyRixFQUFPb0YsVUFBWUMsRUFFcEIsSUFDQzRXLEdBRUFDLEVBRUFDLEVBRUFDLEVBRUFDLEVBRUFDLEVBRUFDLEtBRUFDLEdBQVNuWCxFQUFRb1gsU0FFakJDLEVBQU8sU0FBVWpWLEdBT2hCLElBTkF3VSxFQUFTNVcsRUFBUTRXLFFBQVV4VSxFQUMzQnlVLEdBQVEsRUFDUkksRUFBY0YsR0FBZSxFQUM3QkEsRUFBYyxFQUNkQyxFQUFlRSxFQUFLMVosT0FDcEJzWixHQUFTLEVBQ0RJLEdBQXNCRixFQUFkQyxFQUE0QkEsSUFDM0MsR0FBS0MsRUFBTUQsR0FBYzlYLE1BQU9pRCxFQUFNLEdBQUtBLEVBQU0sT0FBVSxHQUFTcEMsRUFBUXNYLFlBQWMsQ0FDekZWLEdBQVMsQ0FDVCxPQUdGRSxHQUFTLEVBQ0pJLElBQ0NDLEVBQ0NBLEVBQU0zWixRQUNWNlosRUFBTUYsRUFBTTVMLFNBRUZxTCxFQUNYTSxLQUVBSyxFQUFLQyxZQUtSRCxHQUVDRSxJQUFLLFdBQ0osR0FBS1AsRUFBTyxDQUVYLEdBQUl6RyxHQUFReUcsRUFBSzFaLFFBQ2pCLFFBQVVpYSxHQUFLelksR0FDZHJFLEVBQU9tRSxLQUFNRSxFQUFNLFNBQVUySyxFQUFHN0UsR0FDL0IsR0FBSXZELEdBQU81RyxFQUFPNEcsS0FBTXVELEVBQ1YsY0FBVHZELEVBQ0V2QixFQUFRcVcsUUFBV2tCLEVBQUtwRyxJQUFLck0sSUFDbENvUyxFQUFLOWIsS0FBTTBKLEdBRURBLEdBQU9BLEVBQUl0SCxRQUFtQixXQUFUK0QsR0FFaENrVyxFQUFLM1MsT0FHSjFGLFdBR0MwWCxFQUNKRSxFQUFlRSxFQUFLMVosT0FHVG9aLElBQ1hHLEVBQWN0RyxFQUNkNEcsRUFBTVQsSUFHUixNQUFPdFosT0FHUm9GLE9BQVEsV0FrQlAsTUFqQkt3VSxJQUNKdmMsRUFBT21FLEtBQU1NLFVBQVcsU0FBVXVLLEVBQUc3RSxHQUNwQyxHQUFJNFMsRUFDSixRQUFTQSxFQUFRL2MsRUFBTzZKLFFBQVNNLEVBQUtvUyxFQUFNUSxJQUFZLEdBQ3ZEUixFQUFLcFgsT0FBUTRYLEVBQU8sR0FFZlosSUFDVUUsR0FBVFUsR0FDSlYsSUFFYUMsR0FBVFMsR0FDSlQsT0FNRTNaLE1BSVI2VCxJQUFLLFNBQVVsVixHQUNkLE1BQU9BLEdBQUt0QixFQUFPNkosUUFBU3ZJLEVBQUlpYixHQUFTLE1BQVNBLElBQVFBLEVBQUsxWixTQUdoRTJVLE1BQU8sV0FHTixNQUZBK0UsTUFDQUYsRUFBZSxFQUNSMVosTUFHUmthLFFBQVMsV0FFUixNQURBTixHQUFPQyxFQUFRUCxFQUFTMWMsVUFDakJvRCxNQUdSeVUsU0FBVSxXQUNULE9BQVFtRixHQUdUUyxLQUFNLFdBS0wsTUFKQVIsR0FBUWpkLFVBQ0YwYyxHQUNMVyxFQUFLQyxVQUVDbGEsTUFHUnNhLE9BQVEsV0FDUCxPQUFRVCxHQUdUVSxTQUFVLFNBQVU3YixFQUFTZ0QsR0FVNUIsT0FUS2tZLEdBQVdMLElBQVNNLElBQ3hCblksRUFBT0EsTUFDUEEsR0FBU2hELEVBQVNnRCxFQUFLMUQsTUFBUTBELEVBQUsxRCxRQUFVMEQsR0FDekM4WCxFQUNKSyxFQUFNL2IsS0FBTTRELEdBRVpxWSxFQUFNclksSUFHRDFCLE1BR1IrWixLQUFNLFdBRUwsTUFEQUUsR0FBS00sU0FBVXZhLEtBQU04QixXQUNkOUIsTUFHUnVaLE1BQU8sV0FDTixRQUFTQSxHQUlaLE9BQU9VLElBRVI1YyxFQUFPb0YsUUFFTjZGLFNBQVUsU0FBVWtTLEdBQ25CLEdBQUlDLEtBRUEsVUFBVyxPQUFRcGQsRUFBT2djLFVBQVUsZUFBZ0IsYUFDcEQsU0FBVSxPQUFRaGMsRUFBT2djLFVBQVUsZUFBZ0IsYUFDbkQsU0FBVSxXQUFZaGMsRUFBT2djLFVBQVUsWUFFMUNxQixFQUFRLFVBQ1IvWSxHQUNDK1ksTUFBTyxXQUNOLE1BQU9BLElBRVJDLE9BQVEsV0FFUCxNQURBQyxHQUFTaFosS0FBTUUsV0FBWStZLEtBQU0vWSxXQUMxQjlCLE1BRVI4YSxLQUFNLFdBQ0wsR0FBSUMsR0FBTWpaLFNBQ1YsT0FBT3pFLEdBQU9pTCxTQUFTLFNBQVUwUyxHQUNoQzNkLEVBQU9tRSxLQUFNaVosRUFBUSxTQUFVdlksRUFBRytZLEdBQ2pDLEdBQUlDLEdBQVNELEVBQU8sR0FDbkJ0YyxFQUFLdEIsRUFBT3NELFdBQVlvYSxFQUFLN1ksS0FBUzZZLEVBQUs3WSxFQUU1QzBZLEdBQVVLLEVBQU0sSUFBSyxXQUNwQixHQUFJRSxHQUFXeGMsR0FBTUEsRUFBR2tELE1BQU83QixLQUFNOEIsVUFDaENxWixJQUFZOWQsRUFBT3NELFdBQVl3YSxFQUFTeFosU0FDNUN3WixFQUFTeFosVUFDUEMsS0FBTW9aLEVBQVNJLFNBQ2ZQLEtBQU1HLEVBQVNLLFFBQ2ZDLFNBQVVOLEVBQVNPLFFBRXJCUCxFQUFVRSxFQUFTLFFBQVVsYixPQUFTMkIsRUFBVXFaLEVBQVNyWixVQUFZM0IsS0FBTXJCLEdBQU93YyxHQUFhclosZUFJbEdpWixFQUFNLE9BQ0pwWixXQUlKQSxRQUFTLFNBQVVxQyxHQUNsQixNQUFjLE9BQVBBLEVBQWMzRyxFQUFPb0YsT0FBUXVCLEVBQUtyQyxHQUFZQSxJQUd2RGlaLElBd0NELE9BckNBalosR0FBUTZaLEtBQU83WixFQUFRbVosS0FHdkJ6ZCxFQUFPbUUsS0FBTWlaLEVBQVEsU0FBVXZZLEVBQUcrWSxHQUNqQyxHQUFJckIsR0FBT3FCLEVBQU8sR0FDakJRLEVBQWNSLEVBQU8sRUFHdEJ0WixHQUFTc1osRUFBTSxJQUFPckIsRUFBS08sSUFHdEJzQixHQUNKN0IsRUFBS08sSUFBSSxXQUVSTyxFQUFRZSxHQUdOaEIsRUFBWSxFQUFKdlksR0FBUyxHQUFJZ1ksUUFBU08sRUFBUSxHQUFLLEdBQUlKLE1BSW5ETyxFQUFVSyxFQUFNLElBQU8sV0FFdEIsTUFEQUwsR0FBVUssRUFBTSxHQUFLLFFBQVVqYixPQUFTNGEsRUFBV2paLEVBQVUzQixLQUFNOEIsV0FDNUQ5QixNQUVSNGEsRUFBVUssRUFBTSxHQUFLLFFBQVdyQixFQUFLVyxXQUl0QzVZLEVBQVFBLFFBQVNpWixHQUdaSixHQUNKQSxFQUFLdlosS0FBTTJaLEVBQVVBLEdBSWZBLEdBSVJjLEtBQU0sU0FBVUMsR0FDZixHQUFJelosR0FBSSxFQUNQMFosRUFBZ0I3ZCxFQUFXa0QsS0FBTWEsV0FDakM1QixFQUFTMGIsRUFBYzFiLE9BR3ZCMmIsRUFBdUIsSUFBWDNiLEdBQWtCeWIsR0FBZXRlLEVBQU9zRCxXQUFZZ2IsRUFBWWhhLFNBQWN6QixFQUFTLEVBR25HMGEsRUFBeUIsSUFBZGlCLEVBQWtCRixFQUFjdGUsRUFBT2lMLFdBR2xEd1QsRUFBYSxTQUFVNVosRUFBR3lXLEVBQVVvRCxHQUNuQyxNQUFPLFVBQVVsVixHQUNoQjhSLEVBQVV6VyxHQUFNbEMsS0FDaEIrYixFQUFRN1osR0FBTUosVUFBVTVCLE9BQVMsRUFBSW5DLEVBQVdrRCxLQUFNYSxXQUFjK0UsRUFDaEVrVixJQUFXQyxFQUNkcEIsRUFBU3FCLFdBQVl0RCxFQUFVb0QsS0FDZkYsR0FDaEJqQixFQUFTL1csWUFBYThVLEVBQVVvRCxLQUtuQ0MsRUFBZ0JFLEVBQWtCQyxDQUduQyxJQUFLamMsRUFBUyxFQUliLElBSEE4YixFQUFxQjlYLE1BQU9oRSxHQUM1QmdjLEVBQXVCaFksTUFBT2hFLEdBQzlCaWMsRUFBc0JqWSxNQUFPaEUsR0FDakJBLEVBQUpnQyxFQUFZQSxJQUNkMFosRUFBZTFaLElBQU83RSxFQUFPc0QsV0FBWWliLEVBQWUxWixHQUFJUCxTQUNoRWlhLEVBQWUxWixHQUFJUCxVQUNqQkMsS0FBTWthLEVBQVk1WixFQUFHaWEsRUFBaUJQLElBQ3RDZixLQUFNRCxFQUFTUyxRQUNmQyxTQUFVUSxFQUFZNVosRUFBR2dhLEVBQWtCRixNQUUzQ0gsQ0FVTCxPQUpNQSxJQUNMakIsRUFBUy9XLFlBQWFzWSxFQUFpQlAsR0FHakNoQixFQUFTalosYUFHbEJ0RSxFQUFPc0wsUUFBVSxTQUFXQSxHQUMzQixHQUFJd0gsR0FBUWxULEVBQVNpSSxjQUFjLFNBQ2xDa1gsRUFBV25mLEVBQVNvZix5QkFDcEJqTyxFQUFNblIsRUFBU2lJLGNBQWMsT0FDN0IySSxFQUFTNVEsRUFBU2lJLGNBQWMsVUFDaENvWCxFQUFNek8sRUFBT3RILFlBQWF0SixFQUFTaUksY0FBYyxVQUdsRCxPQUFNaUwsR0FBTWxNLE1BSVprTSxFQUFNbE0sS0FBTyxXQUliMEUsRUFBUTRULFFBQTBCLEtBQWhCcE0sRUFBTXRKLE1BSXhCOEIsRUFBUTZULFlBQWNGLEVBQUkzSCxTQUcxQmhNLEVBQVE4VCxxQkFBc0IsRUFDOUI5VCxFQUFRK1QsbUJBQW9CLEVBQzVCL1QsRUFBUWdVLGVBQWdCLEVBSXhCeE0sRUFBTXVFLFNBQVUsRUFDaEIvTCxFQUFRaVUsZUFBaUJ6TSxFQUFNME0sV0FBVyxHQUFPbkksUUFJakQ3RyxFQUFPNEcsVUFBVyxFQUNsQjlMLEVBQVFtVSxhQUFlUixFQUFJN0gsU0FJM0J0RSxFQUFRbFQsRUFBU2lJLGNBQWMsU0FDL0JpTCxFQUFNdEosTUFBUSxJQUNkc0osRUFBTWxNLEtBQU8sUUFDYjBFLEVBQVFvVSxXQUE2QixNQUFoQjVNLEVBQU10SixNQUczQnNKLEVBQU01QyxhQUFjLFVBQVcsS0FDL0I0QyxFQUFNNUMsYUFBYyxPQUFRLEtBRTVCNk8sRUFBUzdWLFlBQWE0SixHQUl0QnhILEVBQVFxVSxXQUFhWixFQUFTUyxXQUFXLEdBQU9BLFdBQVcsR0FBT3hKLFVBQVVxQixRQUk1RS9MLEVBQVFzVSxlQUFpQixhQUFldGdCLEdBRXhDeVIsRUFBSS9GLE1BQU02VSxlQUFpQixjQUMzQjlPLEVBQUl5TyxXQUFXLEdBQU94VSxNQUFNNlUsZUFBaUIsR0FDN0N2VSxFQUFRd1UsZ0JBQStDLGdCQUE3Qi9PLEVBQUkvRixNQUFNNlUsZUFHcEM3ZixFQUFPLFdBQ04sR0FBSStmLEdBQVdDLEVBRWRDLEVBQVcsOEhBQ1hDLEVBQU90Z0IsRUFBUzZJLHFCQUFxQixRQUFTLEVBRXpDeVgsS0FLTkgsRUFBWW5nQixFQUFTaUksY0FBYyxPQUNuQ2tZLEVBQVUvVSxNQUFNbVYsUUFBVSxnRkFHMUJELEVBQUtoWCxZQUFhNlcsR0FBWTdXLFlBQWE2SCxHQUMzQ0EsRUFBSXVCLFVBQVksR0FFaEJ2QixFQUFJL0YsTUFBTW1WLFFBQVUsdUtBSXBCbmdCLEVBQU84SyxLQUFNb1YsRUFBeUIsTUFBbkJBLEVBQUtsVixNQUFNb1YsTUFBaUJBLEtBQU0sTUFBVSxXQUM5RDlVLEVBQVErVSxVQUFnQyxJQUFwQnRQLEVBQUl1UCxjQUlwQmhoQixFQUFPaWhCLG1CQUNYalYsRUFBUWdVLGNBQXVFLFFBQXJEaGdCLEVBQU9paEIsaUJBQWtCeFAsRUFBSyxXQUFlb0IsSUFDdkU3RyxFQUFRK1Qsa0JBQTJGLFNBQXJFL2YsRUFBT2loQixpQkFBa0J4UCxFQUFLLFFBQVl5UCxNQUFPLFFBQVVBLE1BTXpGUixFQUFZalAsRUFBSTdILFlBQWF0SixFQUFTaUksY0FBYyxRQUNwRG1ZLEVBQVVoVixNQUFNbVYsUUFBVXBQLEVBQUkvRixNQUFNbVYsUUFBVUYsRUFDOUNELEVBQVVoVixNQUFNeVYsWUFBY1QsRUFBVWhWLE1BQU13VixNQUFRLElBQ3REelAsRUFBSS9GLE1BQU13VixNQUFRLE1BRWxCbFYsRUFBUThULHFCQUNOblksWUFBYzNILEVBQU9paEIsaUJBQWtCUCxFQUFXLFdBQWVTLGNBR3BFUCxFQUFLL1csWUFBYTRXLE1BR1p6VSxHQXJHQ0EsTUFtSFQsSUFBSW9WLEdBQVdDLEVBQ2RDLEVBQVMsK0JBQ1RDLEVBQWEsVUFFZCxTQUFTQyxLQUlSbFgsT0FBT21YLGVBQWdCcGUsS0FBSytOLFNBQVksR0FDdkM3TSxJQUFLLFdBQ0osWUFJRmxCLEtBQUttRCxRQUFVOUYsRUFBTzhGLFFBQVVDLEtBQUtDLFNBR3RDOGEsRUFBS0UsSUFBTSxFQUVYRixFQUFLRyxRQUFVLFNBQVVDLEdBT3hCLE1BQU9BLEdBQU1oZSxTQUNPLElBQW5CZ2UsRUFBTWhlLFVBQXFDLElBQW5CZ2UsRUFBTWhlLFVBQWlCLEdBR2pENGQsRUFBS3hlLFdBQ0ppSSxJQUFLLFNBQVUyVyxHQUlkLElBQU1KLEVBQUtHLFFBQVNDLEdBQ25CLE1BQU8sRUFHUixJQUFJQyxNQUVIQyxFQUFTRixFQUFPdmUsS0FBS21ELFFBR3RCLEtBQU1zYixFQUFTLENBQ2RBLEVBQVNOLEVBQUtFLEtBR2QsS0FDQ0csRUFBWXhlLEtBQUttRCxVQUFjMEQsTUFBTzRYLEdBQ3RDeFgsT0FBT3lYLGlCQUFrQkgsRUFBT0MsR0FJL0IsTUFBUS9aLEdBQ1QrWixFQUFZeGUsS0FBS21ELFNBQVlzYixFQUM3QnBoQixFQUFPb0YsT0FBUThiLEVBQU9DLElBU3hCLE1BSk14ZSxNQUFLK04sTUFBTzBRLEtBQ2pCemUsS0FBSytOLE1BQU8wUSxPQUdOQSxHQUVSRSxJQUFLLFNBQVVKLEVBQU96WixFQUFNK0IsR0FDM0IsR0FBSStYLEdBSUhILEVBQVN6ZSxLQUFLNEgsSUFBSzJXLEdBQ25CeFEsRUFBUS9OLEtBQUsrTixNQUFPMFEsRUFHckIsSUFBcUIsZ0JBQVQzWixHQUNYaUosRUFBT2pKLEdBQVMrQixNQUtoQixJQUFLeEosRUFBT3FILGNBQWVxSixHQUMxQjFRLEVBQU9vRixPQUFRekMsS0FBSytOLE1BQU8wUSxHQUFVM1osT0FHckMsS0FBTThaLElBQVE5WixHQUNiaUosRUFBTzZRLEdBQVM5WixFQUFNOFosRUFJekIsT0FBTzdRLElBRVI3TSxJQUFLLFNBQVVxZCxFQUFPM1csR0FLckIsR0FBSW1HLEdBQVEvTixLQUFLK04sTUFBTy9OLEtBQUs0SCxJQUFLMlcsR0FFbEMsT0FBTzNXLEtBQVFoTCxVQUNkbVIsRUFBUUEsRUFBT25HLElBRWpCRCxPQUFRLFNBQVU0VyxFQUFPM1csRUFBS2YsR0FDN0IsR0FBSWdZLEVBWUosT0FBS2pYLEtBQVFoTCxXQUNUZ0wsR0FBc0IsZ0JBQVJBLElBQXFCZixJQUFVakssV0FFaERpaUIsRUFBUzdlLEtBQUtrQixJQUFLcWQsRUFBTzNXLEdBRW5CaVgsSUFBV2ppQixVQUNqQmlpQixFQUFTN2UsS0FBS2tCLElBQUtxZCxFQUFPbGhCLEVBQU9vSixVQUFVbUIsTUFTN0M1SCxLQUFLMmUsSUFBS0osRUFBTzNXLEVBQUtmLEdBSWZBLElBQVVqSyxVQUFZaUssRUFBUWUsSUFFdEN4QyxPQUFRLFNBQVVtWixFQUFPM1csR0FDeEIsR0FBSTFGLEdBQUdTLEVBQU1tYyxFQUNaTCxFQUFTemUsS0FBSzRILElBQUsyVyxHQUNuQnhRLEVBQVEvTixLQUFLK04sTUFBTzBRLEVBRXJCLElBQUs3VyxJQUFRaEwsVUFDWm9ELEtBQUsrTixNQUFPMFEsVUFFTixDQUVEcGhCLEVBQU82RixRQUFTMEUsR0FPcEJqRixFQUFPaUYsRUFBSWhLLE9BQVFnSyxFQUFJdkYsSUFBS2hGLEVBQU9vSixhQUVuQ3FZLEVBQVF6aEIsRUFBT29KLFVBQVdtQixHQUVyQkEsSUFBT21HLEdBQ1hwTCxHQUFTaUYsRUFBS2tYLElBSWRuYyxFQUFPbWMsRUFDUG5jLEVBQU9BLElBQVFvTCxJQUNacEwsR0FBV0EsRUFBSzdDLE1BQU9mLFNBSTVCbUQsRUFBSVMsRUFBS3pDLE1BQ1QsT0FBUWdDLFVBQ0E2TCxHQUFPcEwsRUFBTVQsTUFJdkI2YyxRQUFTLFNBQVVSLEdBQ2xCLE9BQVFsaEIsRUFBT3FILGNBQ2QxRSxLQUFLK04sTUFBT3dRLEVBQU92ZSxLQUFLbUQsZ0JBRzFCNmIsUUFBUyxTQUFVVCxHQUNiQSxFQUFPdmUsS0FBS21ELGdCQUNUbkQsTUFBSytOLE1BQU93USxFQUFPdmUsS0FBS21ELFlBTWxDNGEsRUFBWSxHQUFJSSxHQUNoQkgsRUFBWSxHQUFJRyxHQUdoQjlnQixFQUFPb0YsUUFDTndjLFdBQVlkLEVBQUtHLFFBRWpCUyxRQUFTLFNBQVVoZixHQUNsQixNQUFPZ2UsR0FBVWdCLFFBQVNoZixJQUFVaWUsRUFBVWUsUUFBU2hmLElBR3hEK0UsS0FBTSxTQUFVL0UsRUFBTTRDLEVBQU1tQyxHQUMzQixNQUFPaVosR0FBVXBXLE9BQVE1SCxFQUFNNEMsRUFBTW1DLElBR3RDb2EsV0FBWSxTQUFVbmYsRUFBTTRDLEdBQzNCb2IsRUFBVTNZLE9BQVFyRixFQUFNNEMsSUFLekJ3YyxNQUFPLFNBQVVwZixFQUFNNEMsRUFBTW1DLEdBQzVCLE1BQU9rWixHQUFVclcsT0FBUTVILEVBQU00QyxFQUFNbUMsSUFHdENzYSxZQUFhLFNBQVVyZixFQUFNNEMsR0FDNUJxYixFQUFVNVksT0FBUXJGLEVBQU00QyxNQUkxQnRGLEVBQU9zQixHQUFHOEQsUUFDVHFDLEtBQU0sU0FBVThDLEVBQUtmLEdBQ3BCLEdBQUl5SCxHQUFPM0wsRUFDVjVDLEVBQU9DLEtBQU0sR0FDYmtDLEVBQUksRUFDSjRDLEVBQU8sSUFHUixJQUFLOEMsSUFBUWhMLFVBQVksQ0FDeEIsR0FBS29ELEtBQUtFLFNBQ1Q0RSxFQUFPaVosRUFBVTdjLElBQUtuQixHQUVDLElBQWxCQSxFQUFLUSxXQUFtQnlkLEVBQVU5YyxJQUFLbkIsRUFBTSxpQkFBbUIsQ0FFcEUsSUFEQXVPLEVBQVF2TyxFQUFLNkssV0FDRDBELEVBQU1wTyxPQUFWZ0MsRUFBa0JBLElBQ3pCUyxFQUFPMkwsRUFBT3BNLEdBQUlTLEtBRWUsSUFBNUJBLEVBQUt6RSxRQUFTLFdBQ2xCeUUsRUFBT3RGLEVBQU9vSixVQUFXOUQsRUFBSzNFLE1BQU0sSUFDcENxaEIsRUFBVXRmLEVBQU00QyxFQUFNbUMsRUFBTW5DLElBRzlCcWIsR0FBVVcsSUFBSzVlLEVBQU0sZ0JBQWdCLEdBSXZDLE1BQU8rRSxHQUlSLE1BQW9CLGdCQUFSOEMsR0FDSjVILEtBQUt3QixLQUFLLFdBQ2hCdWMsRUFBVVksSUFBSzNlLEtBQU00SCxLQUloQnZLLEVBQU9zSyxPQUFRM0gsS0FBTSxTQUFVNkcsR0FDckMsR0FBSS9CLEdBQ0h3YSxFQUFXamlCLEVBQU9vSixVQUFXbUIsRUFPOUIsSUFBSzdILEdBQVE4RyxJQUFVakssVUFBdkIsQ0FJQyxHQURBa0ksRUFBT2laLEVBQVU3YyxJQUFLbkIsRUFBTTZILEdBQ3ZCOUMsSUFBU2xJLFVBQ2IsTUFBT2tJLEVBTVIsSUFEQUEsRUFBT2laLEVBQVU3YyxJQUFLbkIsRUFBTXVmLEdBQ3ZCeGEsSUFBU2xJLFVBQ2IsTUFBT2tJLEVBTVIsSUFEQUEsRUFBT3VhLEVBQVV0ZixFQUFNdWYsRUFBVTFpQixXQUM1QmtJLElBQVNsSSxVQUNiLE1BQU9rSSxPQVFUOUUsTUFBS3dCLEtBQUssV0FHVCxHQUFJc0QsR0FBT2laLEVBQVU3YyxJQUFLbEIsS0FBTXNmLEVBS2hDdkIsR0FBVVksSUFBSzNlLEtBQU1zZixFQUFVelksR0FLTCxLQUFyQmUsRUFBSTFKLFFBQVEsTUFBZTRHLElBQVNsSSxXQUN4Q21oQixFQUFVWSxJQUFLM2UsS0FBTTRILEVBQUtmLE1BRzFCLEtBQU1BLEVBQU8vRSxVQUFVNUIsT0FBUyxFQUFHLE1BQU0sSUFHN0NnZixXQUFZLFNBQVV0WCxHQUNyQixNQUFPNUgsTUFBS3dCLEtBQUssV0FDaEJ1YyxFQUFVM1ksT0FBUXBGLEtBQU00SCxPQUszQixTQUFTeVgsR0FBVXRmLEVBQU02SCxFQUFLOUMsR0FDN0IsR0FBSW5DLEVBSUosSUFBS21DLElBQVNsSSxXQUErQixJQUFsQm1ELEVBQUtRLFNBSS9CLEdBSEFvQyxFQUFPLFFBQVVpRixFQUFJdEUsUUFBUzRhLEVBQVksT0FBUXRYLGNBQ2xEOUIsRUFBTy9FLEVBQUt1TixhQUFjM0ssR0FFTCxnQkFBVG1DLEdBQW9CLENBQy9CLElBQ0NBLEVBQWdCLFNBQVRBLEdBQWtCLEVBQ2YsVUFBVEEsR0FBbUIsRUFDVixTQUFUQSxFQUFrQixNQUVqQkEsRUFBTyxLQUFPQSxHQUFRQSxFQUN2Qm1aLEVBQU94ZCxLQUFNcUUsR0FBU1MsS0FBS0MsTUFBT1YsR0FDbENBLEVBQ0EsTUFBT0wsSUFHVHNaLEVBQVVZLElBQUs1ZSxFQUFNNkgsRUFBSzlDLE9BRTFCQSxHQUFPbEksU0FHVCxPQUFPa0ksR0FFUnpILEVBQU9vRixRQUNOOGMsTUFBTyxTQUFVeGYsRUFBTWtFLEVBQU1hLEdBQzVCLEdBQUl5YSxFQUVKLE9BQUt4ZixJQUNKa0UsR0FBU0EsR0FBUSxNQUFTLFFBQzFCc2IsRUFBUXZCLEVBQVU5YyxJQUFLbkIsRUFBTWtFLEdBR3hCYSxLQUNFeWEsR0FBU2xpQixFQUFPNkYsUUFBUzRCLEdBQzlCeWEsRUFBUXZCLEVBQVVyVyxPQUFRNUgsRUFBTWtFLEVBQU01RyxFQUFPMEQsVUFBVStELElBRXZEeWEsRUFBTXpoQixLQUFNZ0gsSUFHUHlhLE9BWlIsV0FnQkRDLFFBQVMsU0FBVXpmLEVBQU1rRSxHQUN4QkEsRUFBT0EsR0FBUSxJQUVmLElBQUlzYixHQUFRbGlCLEVBQU9raUIsTUFBT3hmLEVBQU1rRSxHQUMvQndiLEVBQWNGLEVBQU1yZixPQUNwQnZCLEVBQUs0Z0IsRUFBTXRSLFFBQ1h5UixFQUFRcmlCLEVBQU9zaUIsWUFBYTVmLEVBQU1rRSxHQUNsQzJiLEVBQU8sV0FDTnZpQixFQUFPbWlCLFFBQVN6ZixFQUFNa0U7Q0FJWixnQkFBUHRGLElBQ0pBLEVBQUs0Z0IsRUFBTXRSLFFBQ1h3UixLQUdJOWdCLElBSVUsT0FBVHNGLEdBQ0pzYixFQUFNck8sUUFBUyxvQkFJVHdPLEdBQU1HLEtBQ2JsaEIsRUFBR3NDLEtBQU1sQixFQUFNNmYsRUFBTUYsS0FHaEJELEdBQWVDLEdBQ3BCQSxFQUFNN0ssTUFBTWtGLFFBS2Q0RixZQUFhLFNBQVU1ZixFQUFNa0UsR0FDNUIsR0FBSTJELEdBQU0zRCxFQUFPLFlBQ2pCLE9BQU8rWixHQUFVOWMsSUFBS25CLEVBQU02SCxJQUFTb1csRUFBVXJXLE9BQVE1SCxFQUFNNkgsR0FDNURpTixNQUFPeFgsRUFBT2djLFVBQVUsZUFBZWMsSUFBSSxXQUMxQzZELEVBQVU1WSxPQUFRckYsR0FBUWtFLEVBQU8sUUFBUzJELFdBTTlDdkssRUFBT3NCLEdBQUc4RCxRQUNUOGMsTUFBTyxTQUFVdGIsRUFBTWEsR0FDdEIsR0FBSWdiLEdBQVMsQ0FRYixPQU5xQixnQkFBVDdiLEtBQ1hhLEVBQU9iLEVBQ1BBLEVBQU8sS0FDUDZiLEtBR3VCQSxFQUFuQmhlLFVBQVU1QixPQUNQN0MsRUFBT2tpQixNQUFPdmYsS0FBSyxHQUFJaUUsR0FHeEJhLElBQVNsSSxVQUNmb0QsS0FDQUEsS0FBS3dCLEtBQUssV0FDVCxHQUFJK2QsR0FBUWxpQixFQUFPa2lCLE1BQU92ZixLQUFNaUUsRUFBTWEsRUFHdEN6SCxHQUFPc2lCLFlBQWEzZixLQUFNaUUsR0FFWixPQUFUQSxHQUE4QixlQUFic2IsRUFBTSxJQUMzQmxpQixFQUFPbWlCLFFBQVN4ZixLQUFNaUUsTUFJMUJ1YixRQUFTLFNBQVV2YixHQUNsQixNQUFPakUsTUFBS3dCLEtBQUssV0FDaEJuRSxFQUFPbWlCLFFBQVN4ZixLQUFNaUUsTUFLeEI4YixNQUFPLFNBQVVDLEVBQU0vYixHQUl0QixNQUhBK2IsR0FBTzNpQixFQUFPNGlCLEdBQUs1aUIsRUFBTzRpQixHQUFHQyxPQUFRRixJQUFVQSxFQUFPQSxFQUN0RC9iLEVBQU9BLEdBQVEsS0FFUmpFLEtBQUt1ZixNQUFPdGIsRUFBTSxTQUFVMmIsRUFBTUYsR0FDeEMsR0FBSVMsR0FBVTNYLFdBQVlvWCxFQUFNSSxFQUNoQ04sR0FBTUcsS0FBTyxXQUNaTyxhQUFjRCxPQUlqQkUsV0FBWSxTQUFVcGMsR0FDckIsTUFBT2pFLE1BQUt1ZixNQUFPdGIsR0FBUSxVQUk1QnRDLFFBQVMsU0FBVXNDLEVBQU1ELEdBQ3hCLEdBQUkyQixHQUNIMmEsRUFBUSxFQUNSQyxFQUFRbGpCLEVBQU9pTCxXQUNmOEksRUFBV3BSLEtBQ1hrQyxFQUFJbEMsS0FBS0UsT0FDVGtiLEVBQVUsYUFDQ2tGLEdBQ1RDLEVBQU0xYyxZQUFhdU4sR0FBWUEsSUFJYixpQkFBVG5OLEtBQ1hELEVBQU1DLEVBQ05BLEVBQU9ySCxXQUVScUgsRUFBT0EsR0FBUSxJQUVmLE9BQU8vQixJQUNOeUQsRUFBTXFZLEVBQVU5YyxJQUFLa1EsRUFBVWxQLEdBQUsrQixFQUFPLGNBQ3RDMEIsR0FBT0EsRUFBSWtQLFFBQ2Z5TCxJQUNBM2EsRUFBSWtQLE1BQU1zRixJQUFLaUIsR0FJakIsT0FEQUEsS0FDT21GLEVBQU01ZSxRQUFTcUMsS0FHeEIsSUFBSXdjLEdBQVVDLEVBQ2JDLEVBQVMsY0FDVEMsRUFBVSxNQUNWQyxFQUFhLHFDQUVkdmpCLEdBQU9zQixHQUFHOEQsUUFDVDdCLEtBQU0sU0FBVStCLEVBQU1rRSxHQUNyQixNQUFPeEosR0FBT3NLLE9BQVEzSCxLQUFNM0MsRUFBT3VELEtBQU0rQixFQUFNa0UsRUFBTy9FLFVBQVU1QixPQUFTLElBRzFFMmdCLFdBQVksU0FBVWxlLEdBQ3JCLE1BQU8zQyxNQUFLd0IsS0FBSyxXQUNoQm5FLEVBQU93akIsV0FBWTdnQixLQUFNMkMsTUFJM0JpYyxLQUFNLFNBQVVqYyxFQUFNa0UsR0FDckIsTUFBT3hKLEdBQU9zSyxPQUFRM0gsS0FBTTNDLEVBQU91aEIsS0FBTWpjLEVBQU1rRSxFQUFPL0UsVUFBVTVCLE9BQVMsSUFHMUU0Z0IsV0FBWSxTQUFVbmUsR0FDckIsTUFBTzNDLE1BQUt3QixLQUFLLGlCQUNUeEIsTUFBTTNDLEVBQU8wakIsUUFBU3BlLElBQVVBLE1BSXpDcWUsU0FBVSxTQUFVbmEsR0FDbkIsR0FBSW9hLEdBQVNsaEIsRUFBTTJPLEVBQUt3UyxFQUFPOWUsRUFDOUJGLEVBQUksRUFDSkMsRUFBTW5DLEtBQUtFLE9BQ1hpaEIsRUFBMkIsZ0JBQVZ0YSxJQUFzQkEsQ0FFeEMsSUFBS3hKLEVBQU9zRCxXQUFZa0csR0FDdkIsTUFBTzdHLE1BQUt3QixLQUFLLFNBQVVZLEdBQzFCL0UsRUFBUTJDLE1BQU9naEIsU0FBVW5hLEVBQU01RixLQUFNakIsS0FBTW9DLEVBQUdwQyxLQUFLeVAsYUFJckQsSUFBSzBSLEVBSUosSUFGQUYsR0FBWXBhLEdBQVMsSUFBSy9HLE1BQU9mLE9BRXJCb0QsRUFBSkQsRUFBU0EsSUFPaEIsR0FOQW5DLEVBQU9DLEtBQU1rQyxHQUNid00sRUFBd0IsSUFBbEIzTyxFQUFLUSxXQUFvQlIsRUFBSzBQLFdBQ2pDLElBQU0xUCxFQUFLMFAsVUFBWSxLQUFNbk0sUUFBU29kLEVBQVEsS0FDaEQsS0FHVSxDQUNWdGUsRUFBSSxDQUNKLE9BQVM4ZSxFQUFRRCxFQUFRN2UsS0FDZ0IsRUFBbkNzTSxFQUFJeFEsUUFBUyxJQUFNZ2pCLEVBQVEsT0FDL0J4UyxHQUFPd1MsRUFBUSxJQUdqQm5oQixHQUFLMFAsVUFBWXBTLEVBQU9tQixLQUFNa1EsR0FNakMsTUFBTzFPLE9BR1JvaEIsWUFBYSxTQUFVdmEsR0FDdEIsR0FBSW9hLEdBQVNsaEIsRUFBTTJPLEVBQUt3UyxFQUFPOWUsRUFDOUJGLEVBQUksRUFDSkMsRUFBTW5DLEtBQUtFLE9BQ1hpaEIsRUFBK0IsSUFBckJyZixVQUFVNUIsUUFBaUMsZ0JBQVYyRyxJQUFzQkEsQ0FFbEUsSUFBS3hKLEVBQU9zRCxXQUFZa0csR0FDdkIsTUFBTzdHLE1BQUt3QixLQUFLLFNBQVVZLEdBQzFCL0UsRUFBUTJDLE1BQU9vaEIsWUFBYXZhLEVBQU01RixLQUFNakIsS0FBTW9DLEVBQUdwQyxLQUFLeVAsYUFHeEQsSUFBSzBSLEVBR0osSUFGQUYsR0FBWXBhLEdBQVMsSUFBSy9HLE1BQU9mLE9BRXJCb0QsRUFBSkQsRUFBU0EsSUFRaEIsR0FQQW5DLEVBQU9DLEtBQU1rQyxHQUVid00sRUFBd0IsSUFBbEIzTyxFQUFLUSxXQUFvQlIsRUFBSzBQLFdBQ2pDLElBQU0xUCxFQUFLMFAsVUFBWSxLQUFNbk0sUUFBU29kLEVBQVEsS0FDaEQsSUFHVSxDQUNWdGUsRUFBSSxDQUNKLE9BQVM4ZSxFQUFRRCxFQUFRN2UsS0FFeEIsTUFBUXNNLEVBQUl4USxRQUFTLElBQU1nakIsRUFBUSxNQUFTLEVBQzNDeFMsRUFBTUEsRUFBSXBMLFFBQVMsSUFBTTRkLEVBQVEsSUFBSyxJQUd4Q25oQixHQUFLMFAsVUFBWTVJLEVBQVF4SixFQUFPbUIsS0FBTWtRLEdBQVEsR0FLakQsTUFBTzFPLE9BR1JxaEIsWUFBYSxTQUFVeGEsRUFBT3lhLEdBQzdCLEdBQUlyZCxTQUFjNEMsRUFFbEIsT0FBeUIsaUJBQWJ5YSxJQUFtQyxXQUFUcmQsRUFDOUJxZCxFQUFXdGhCLEtBQUtnaEIsU0FBVW5hLEdBQVU3RyxLQUFLb2hCLFlBQWF2YSxHQUd6RHhKLEVBQU9zRCxXQUFZa0csR0FDaEI3RyxLQUFLd0IsS0FBSyxTQUFVVSxHQUMxQjdFLEVBQVEyQyxNQUFPcWhCLFlBQWF4YSxFQUFNNUYsS0FBS2pCLEtBQU1rQyxFQUFHbEMsS0FBS3lQLFVBQVc2UixHQUFXQSxLQUl0RXRoQixLQUFLd0IsS0FBSyxXQUNoQixHQUFjLFdBQVR5QyxFQUFvQixDQUV4QixHQUFJd0wsR0FDSHZOLEVBQUksRUFDSitYLEVBQU81YyxFQUFRMkMsTUFDZnVoQixFQUFhMWEsRUFBTS9HLE1BQU9mLE1BRTNCLE9BQVMwUSxFQUFZOFIsRUFBWXJmLEtBRTNCK1gsRUFBS3VILFNBQVUvUixHQUNuQndLLEVBQUttSCxZQUFhM1IsR0FFbEJ3SyxFQUFLK0csU0FBVXZSLFFBS054TCxJQUFTbEgsR0FBOEIsWUFBVGtILEtBQ3BDakUsS0FBS3lQLFdBRVR1TyxFQUFVVyxJQUFLM2UsS0FBTSxnQkFBaUJBLEtBQUt5UCxXQU81Q3pQLEtBQUt5UCxVQUFZelAsS0FBS3lQLFdBQWE1SSxLQUFVLEVBQVEsR0FBS21YLEVBQVU5YyxJQUFLbEIsS0FBTSxrQkFBcUIsT0FLdkd3aEIsU0FBVSxTQUFVL2lCLEdBQ25CLEdBQUlnUixHQUFZLElBQU1oUixFQUFXLElBQ2hDeUQsRUFBSSxFQUNKa0YsRUFBSXBILEtBQUtFLE1BQ1YsTUFBWWtILEVBQUpsRixFQUFPQSxJQUNkLEdBQTBCLElBQXJCbEMsS0FBS2tDLEdBQUczQixXQUFtQixJQUFNUCxLQUFLa0MsR0FBR3VOLFVBQVksS0FBS25NLFFBQVFvZCxFQUFRLEtBQUt4aUIsUUFBU3VSLElBQWUsRUFDM0csT0FBTyxDQUlULFFBQU8sR0FHUjRCLElBQUssU0FBVXhLLEdBQ2QsR0FBSTZZLEdBQU9wZSxFQUFLWCxFQUNmWixFQUFPQyxLQUFLLEVBRWIsRUFBQSxHQUFNOEIsVUFBVTVCLE9Bc0JoQixNQUZBUyxHQUFhdEQsRUFBT3NELFdBQVlrRyxHQUV6QjdHLEtBQUt3QixLQUFLLFNBQVVVLEdBQzFCLEdBQUltUCxFQUVtQixLQUFsQnJSLEtBQUtPLFdBS1Q4USxFQURJMVEsRUFDRWtHLEVBQU01RixLQUFNakIsS0FBTWtDLEVBQUc3RSxFQUFRMkMsTUFBT3FSLE9BRXBDeEssRUFJSyxNQUFQd0ssRUFDSkEsRUFBTSxHQUNvQixnQkFBUkEsR0FDbEJBLEdBQU8sR0FDSWhVLEVBQU82RixRQUFTbU8sS0FDM0JBLEVBQU1oVSxFQUFPZ0YsSUFBSWdQLEVBQUssU0FBV3hLLEdBQ2hDLE1BQWdCLE9BQVRBLEVBQWdCLEdBQUtBLEVBQVEsTUFJdEM2WSxFQUFRcmlCLEVBQU9va0IsU0FBVXpoQixLQUFLaUUsT0FBVTVHLEVBQU9va0IsU0FBVXpoQixLQUFLMkcsU0FBU0MsZUFHakU4WSxHQUFXLE9BQVNBLElBQVVBLEVBQU1mLElBQUszZSxLQUFNcVIsRUFBSyxXQUFjelUsWUFDdkVvRCxLQUFLNkcsTUFBUXdLLEtBakRkLElBQUt0UixFQUdKLE1BRkEyZixHQUFRcmlCLEVBQU9va0IsU0FBVTFoQixFQUFLa0UsT0FBVTVHLEVBQU9va0IsU0FBVTFoQixFQUFLNEcsU0FBU0MsZUFFbEU4WSxHQUFTLE9BQVNBLEtBQVVwZSxFQUFNb2UsRUFBTXhlLElBQUtuQixFQUFNLFlBQWVuRCxVQUMvRDBFLEdBR1JBLEVBQU12QixFQUFLOEcsTUFFVyxnQkFBUnZGLEdBRWJBLEVBQUlnQyxRQUFRcWQsRUFBUyxJQUVkLE1BQVByZixFQUFjLEdBQUtBLE9BMEN4QmpFLEVBQU9vRixRQUNOZ2YsVUFDQ0MsUUFDQ3hnQixJQUFLLFNBQVVuQixHQUdkLEdBQUlzUixHQUFNdFIsRUFBSzZLLFdBQVcvRCxLQUMxQixRQUFRd0ssR0FBT0EsRUFBSUMsVUFBWXZSLEVBQUs4RyxNQUFROUcsRUFBS3NHLE9BR25Ed0gsUUFDQzNNLElBQUssU0FBVW5CLEdBQ2QsR0FBSThHLEdBQU82YSxFQUNWaGYsRUFBVTNDLEVBQUsyQyxRQUNmMFgsRUFBUXJhLEVBQUs2VSxjQUNiK00sRUFBb0IsZUFBZDVoQixFQUFLa0UsTUFBaUMsRUFBUm1XLEVBQ3BDMkIsRUFBUzRGLEVBQU0sUUFDZkMsRUFBTUQsRUFBTXZILEVBQVEsRUFBSTFYLEVBQVF4QyxPQUNoQ2dDLEVBQVksRUFBUmtZLEVBQ0h3SCxFQUNBRCxFQUFNdkgsRUFBUSxDQUdoQixNQUFZd0gsRUFBSjFmLEVBQVNBLElBSWhCLEdBSEF3ZixFQUFTaGYsRUFBU1IsTUFHWHdmLEVBQU8vTSxVQUFZelMsSUFBTWtZLElBRTVCL2MsRUFBT3NMLFFBQVFtVSxZQUFlNEUsRUFBT2pOLFNBQStDLE9BQXBDaU4sRUFBT3BVLGFBQWEsY0FDbkVvVSxFQUFPNWdCLFdBQVcyVCxVQUFhcFgsRUFBT3NKLFNBQVUrYSxFQUFPNWdCLFdBQVksYUFBaUIsQ0FNeEYsR0FIQStGLEVBQVF4SixFQUFRcWtCLEdBQVNyUSxNQUdwQnNRLEVBQ0osTUFBTzlhLEVBSVJrVixHQUFPamUsS0FBTStJLEdBSWYsTUFBT2tWLElBR1I0QyxJQUFLLFNBQVU1ZSxFQUFNOEcsR0FDcEIsR0FBSWdiLEdBQVdILEVBQ2RoZixFQUFVM0MsRUFBSzJDLFFBQ2ZxWixFQUFTMWUsRUFBTzBELFVBQVc4RixHQUMzQjNFLEVBQUlRLEVBQVF4QyxNQUViLE9BQVFnQyxJQUNQd2YsRUFBU2hmLEVBQVNSLElBQ1p3ZixFQUFPL00sU0FBV3RYLEVBQU82SixRQUFTN0osRUFBT3FrQixHQUFRclEsTUFBTzBLLElBQVksS0FDekU4RixHQUFZLEVBUWQsT0FITUEsS0FDTDloQixFQUFLNlUsY0FBZ0IsSUFFZm1ILEtBS1ZuYixLQUFNLFNBQVViLEVBQU00QyxFQUFNa0UsR0FDM0IsR0FBSTZZLEdBQU9wZSxFQUNWd2dCLEVBQVEvaEIsRUFBS1EsUUFHZCxJQUFNUixHQUFrQixJQUFWK2hCLEdBQXlCLElBQVZBLEdBQXlCLElBQVZBLEVBSzVDLGFBQVkvaEIsR0FBS3VOLGVBQWlCdlEsRUFDMUJNLEVBQU91aEIsS0FBTTdlLEVBQU00QyxFQUFNa0UsSUFLbEIsSUFBVmliLEdBQWdCemtCLEVBQU8yYixTQUFValosS0FDckM0QyxFQUFPQSxFQUFLaUUsY0FDWjhZLEVBQVFyaUIsRUFBTzBrQixVQUFXcGYsS0FDdkJ0RixFQUFPOFQsS0FBS3JSLE1BQU0rTCxLQUFLcEwsS0FBTWtDLEdBQVM4ZCxFQUFXRCxJQUdoRDNaLElBQVVqSyxVQWFIOGlCLEdBQVMsT0FBU0EsSUFBNkMsUUFBbkNwZSxFQUFNb2UsRUFBTXhlLElBQUtuQixFQUFNNEMsSUFDdkRyQixHQUdQQSxFQUFNakUsRUFBTytDLEtBQUtRLEtBQU1iLEVBQU00QyxHQUdoQixNQUFQckIsRUFDTjFFLFVBQ0EwRSxHQXBCYyxPQUFWdUYsRUFHTzZZLEdBQVMsT0FBU0EsS0FBVXBlLEVBQU1vZSxFQUFNZixJQUFLNWUsRUFBTThHLEVBQU9sRSxNQUFZL0YsVUFDMUUwRSxHQUdQdkIsRUFBS3dOLGFBQWM1SyxFQUFNa0UsRUFBUSxJQUMxQkEsSUFQUHhKLEVBQU93akIsV0FBWTlnQixFQUFNNEMsR0FBekJ0RixhQXVCSHdqQixXQUFZLFNBQVU5Z0IsRUFBTThHLEdBQzNCLEdBQUlsRSxHQUFNcWYsRUFDVDlmLEVBQUksRUFDSitmLEVBQVlwYixHQUFTQSxFQUFNL0csTUFBT2YsRUFFbkMsSUFBS2tqQixHQUErQixJQUFsQmxpQixFQUFLUSxTQUN0QixNQUFTb0MsRUFBT3NmLEVBQVUvZixLQUN6QjhmLEVBQVcza0IsRUFBTzBqQixRQUFTcGUsSUFBVUEsRUFHaEN0RixFQUFPOFQsS0FBS3JSLE1BQU0rTCxLQUFLcEwsS0FBTWtDLEtBRWpDNUMsRUFBTWlpQixJQUFhLEdBR3BCamlCLEVBQUs2TixnQkFBaUJqTCxJQUt6Qm9mLFdBQ0M5ZCxNQUNDMGEsSUFBSyxTQUFVNWUsRUFBTThHLEdBQ3BCLElBQU14SixFQUFPc0wsUUFBUW9VLFlBQXdCLFVBQVZsVyxHQUFxQnhKLEVBQU9zSixTQUFTNUcsRUFBTSxTQUFXLENBR3hGLEdBQUlzUixHQUFNdFIsRUFBSzhHLEtBS2YsT0FKQTlHLEdBQUt3TixhQUFjLE9BQVExRyxHQUN0QndLLElBQ0p0UixFQUFLOEcsTUFBUXdLLEdBRVB4SyxNQU1Ya2EsU0FDQ21CLE1BQU8sVUFDUEMsUUFBUyxhQUdWdkQsS0FBTSxTQUFVN2UsRUFBTTRDLEVBQU1rRSxHQUMzQixHQUFJdkYsR0FBS29lLEVBQU8wQyxFQUNmTixFQUFRL2hCLEVBQUtRLFFBR2QsSUFBTVIsR0FBa0IsSUFBVitoQixHQUF5QixJQUFWQSxHQUF5QixJQUFWQSxFQVk1QyxNQVJBTSxHQUFtQixJQUFWTixJQUFnQnprQixFQUFPMmIsU0FBVWpaLEdBRXJDcWlCLElBRUp6ZixFQUFPdEYsRUFBTzBqQixRQUFTcGUsSUFBVUEsRUFDakMrYyxFQUFRcmlCLEVBQU9nbEIsVUFBVzFmLElBR3RCa0UsSUFBVWpLLFVBQ1A4aUIsR0FBUyxPQUFTQSxLQUFVcGUsRUFBTW9lLEVBQU1mLElBQUs1ZSxFQUFNOEcsRUFBT2xFLE1BQVkvRixVQUM1RTBFLEVBQ0V2QixFQUFNNEMsR0FBU2tFLEVBR1g2WSxHQUFTLE9BQVNBLElBQTZDLFFBQW5DcGUsRUFBTW9lLEVBQU14ZSxJQUFLbkIsRUFBTTRDLElBQ3pEckIsRUFDQXZCLEVBQU00QyxJQUlUMGYsV0FDQzlOLFVBQ0NyVCxJQUFLLFNBQVVuQixHQUNkLE1BQU9BLEdBQUt1aUIsYUFBYyxhQUFnQjFCLEVBQVduZ0IsS0FBTVYsRUFBSzRHLFdBQWM1RyxFQUFLdVUsS0FDbEZ2VSxFQUFLd1UsU0FDTCxRQU9Ma00sR0FDQzlCLElBQUssU0FBVTVlLEVBQU04RyxFQUFPbEUsR0FPM0IsTUFOS2tFLE1BQVUsRUFFZHhKLEVBQU93akIsV0FBWTlnQixFQUFNNEMsR0FFekI1QyxFQUFLd04sYUFBYzVLLEVBQU1BLEdBRW5CQSxJQUdUdEYsRUFBT21FLEtBQU1uRSxFQUFPOFQsS0FBS3JSLE1BQU0rTCxLQUFLL00sT0FBT2dCLE1BQU8sUUFBVSxTQUFVb0MsRUFBR1MsR0FDeEUsR0FBSTRmLEdBQVNsbEIsRUFBTzhULEtBQUszQyxXQUFZN0wsSUFBVXRGLEVBQU8rQyxLQUFLUSxJQUUzRHZELEdBQU84VCxLQUFLM0MsV0FBWTdMLEdBQVMsU0FBVTVDLEVBQU00QyxFQUFNb0csR0FDdEQsR0FBSXBLLEdBQUt0QixFQUFPOFQsS0FBSzNDLFdBQVk3TCxHQUNoQ3JCLEVBQU15SCxFQUNMbk0sV0FHQ1MsRUFBTzhULEtBQUszQyxXQUFZN0wsR0FBUy9GLFlBQ2pDMmxCLEVBQVF4aUIsRUFBTTRDLEVBQU1vRyxHQUVwQnBHLEVBQUtpRSxjQUNMLElBS0gsT0FGQXZKLEdBQU84VCxLQUFLM0MsV0FBWTdMLEdBQVNoRSxFQUUxQjJDLEtBTUhqRSxFQUFPc0wsUUFBUTZULGNBQ3BCbmYsRUFBT2dsQixVQUFVMU4sVUFDaEJ6VCxJQUFLLFNBQVVuQixHQUNkLEdBQUlzUCxHQUFTdFAsRUFBS2UsVUFJbEIsT0FIS3VPLElBQVVBLEVBQU92TyxZQUNyQnVPLEVBQU92TyxXQUFXOFQsY0FFWixRQUtWdlgsRUFBT21FLE1BQ04sV0FDQSxXQUNBLFlBQ0EsY0FDQSxjQUNBLFVBQ0EsVUFDQSxTQUNBLGNBQ0EsbUJBQ0UsV0FDRm5FLEVBQU8wakIsUUFBUy9nQixLQUFLNEcsZUFBa0I1RyxPQUl4QzNDLEVBQU9tRSxNQUFPLFFBQVMsWUFBYyxXQUNwQ25FLEVBQU9va0IsU0FBVXpoQixPQUNoQjJlLElBQUssU0FBVTVlLEVBQU04RyxHQUNwQixNQUFLeEosR0FBTzZGLFFBQVMyRCxHQUNYOUcsRUFBSzJVLFFBQVVyWCxFQUFPNkosUUFBUzdKLEVBQU8wQyxHQUFNc1IsTUFBT3hLLElBQVcsRUFEeEUsWUFLSXhKLEVBQU9zTCxRQUFRNFQsVUFDcEJsZixFQUFPb2tCLFNBQVV6aEIsTUFBT2tCLElBQU0sU0FBVW5CLEdBR3ZDLE1BQXNDLFFBQS9CQSxFQUFLdU4sYUFBYSxTQUFvQixLQUFPdk4sRUFBSzhHLFNBSTVELElBQUkyYixHQUFZLE9BQ2ZDLEVBQWMsK0JBQ2RDLEVBQWMsa0NBQ2RDLEVBQWlCLHNCQUVsQixTQUFTQyxLQUNSLE9BQU8sRUFHUixRQUFTQyxLQUNSLE9BQU8sRUFHUixRQUFTQyxLQUNSLElBQ0MsTUFBTzdsQixHQUFTbVgsY0FDZixNQUFRMk8sS0FPWDFsQixFQUFPMmxCLE9BRU5DLFVBRUE5SSxJQUFLLFNBQVVwYSxFQUFNbWpCLEVBQU8zVSxFQUFTekosRUFBTXJHLEdBRTFDLEdBQUkwa0IsR0FBYUMsRUFBYXpkLEVBQzdCMGQsRUFBUUMsRUFBR0MsRUFDWEMsRUFBU0MsRUFBVXhmLEVBQU15ZixFQUFZQyxFQUNyQ0MsRUFBVzVGLEVBQVU5YyxJQUFLbkIsRUFHM0IsSUFBTTZqQixFQUFOLENBS0tyVixFQUFRQSxVQUNaNFUsRUFBYzVVLEVBQ2RBLEVBQVU0VSxFQUFZNVUsUUFDdEI5UCxFQUFXMGtCLEVBQVkxa0IsVUFJbEI4UCxFQUFROUcsT0FDYjhHLEVBQVE5RyxLQUFPcEssRUFBT29LLFNBSWhCNGIsRUFBU08sRUFBU1AsVUFDeEJBLEVBQVNPLEVBQVNQLFlBRVpELEVBQWNRLEVBQVNDLFVBQzdCVCxFQUFjUSxFQUFTQyxPQUFTLFNBQVVwZixHQUd6QyxhQUFjcEgsS0FBV04sR0FBdUIwSCxHQUFLcEgsRUFBTzJsQixNQUFNYyxZQUFjcmYsRUFBRVIsS0FFakZySCxVQURBUyxFQUFPMmxCLE1BQU1lLFNBQVNsaUIsTUFBT3VoQixFQUFZcmpCLEtBQU0rQixZQUlqRHNoQixFQUFZcmpCLEtBQU9BLEdBSXBCbWpCLEdBQVVBLEdBQVMsSUFBS3BqQixNQUFPZixLQUFxQixJQUNwRHVrQixFQUFJSixFQUFNaGpCLE1BQ1YsT0FBUW9qQixJQUNQM2QsRUFBTWdkLEVBQWV4aUIsS0FBTStpQixFQUFNSSxRQUNqQ3JmLEVBQU8wZixFQUFXaGUsRUFBSSxHQUN0QitkLEdBQWUvZCxFQUFJLElBQU0sSUFBSytDLE1BQU8sS0FBTW5HLE9BR3JDMEIsSUFLTnVmLEVBQVVubUIsRUFBTzJsQixNQUFNUSxRQUFTdmYsT0FHaENBLEdBQVN4RixFQUFXK2tCLEVBQVFRLGFBQWVSLEVBQVFTLFdBQWNoZ0IsRUFHakV1ZixFQUFVbm1CLEVBQU8ybEIsTUFBTVEsUUFBU3ZmLE9BR2hDc2YsRUFBWWxtQixFQUFPb0YsUUFDbEJ3QixLQUFNQSxFQUNOMGYsU0FBVUEsRUFDVjdlLEtBQU1BLEVBQ055SixRQUFTQSxFQUNUOUcsS0FBTThHLEVBQVE5RyxLQUNkaEosU0FBVUEsRUFDVnFOLGFBQWNyTixHQUFZcEIsRUFBTzhULEtBQUtyUixNQUFNZ00sYUFBYXJMLEtBQU1oQyxHQUMvRHlsQixVQUFXUixFQUFXalcsS0FBSyxNQUN6QjBWLElBR0lNLEVBQVdKLEVBQVFwZixNQUN6QndmLEVBQVdKLEVBQVFwZixNQUNuQndmLEVBQVNVLGNBQWdCLEVBR25CWCxFQUFRWSxPQUFTWixFQUFRWSxNQUFNbmpCLEtBQU1sQixFQUFNK0UsRUFBTTRlLEVBQVlOLE1BQWtCLEdBQy9FcmpCLEVBQUswSSxrQkFDVDFJLEVBQUswSSxpQkFBa0J4RSxFQUFNbWYsR0FBYSxJQUt4Q0ksRUFBUXJKLE1BQ1pxSixFQUFRckosSUFBSWxaLEtBQU1sQixFQUFNd2pCLEdBRWxCQSxFQUFVaFYsUUFBUTlHLE9BQ3ZCOGIsRUFBVWhWLFFBQVE5RyxLQUFPOEcsRUFBUTlHLE9BSzlCaEosRUFDSmdsQixFQUFTamhCLE9BQVFpaEIsRUFBU1UsZ0JBQWlCLEVBQUdaLEdBRTlDRSxFQUFTM2xCLEtBQU15bEIsR0FJaEJsbUIsRUFBTzJsQixNQUFNQyxPQUFRaGYsSUFBUyxFQUkvQmxFLEdBQU8sT0FJUnFGLE9BQVEsU0FBVXJGLEVBQU1takIsRUFBTzNVLEVBQVM5UCxFQUFVNGxCLEdBRWpELEdBQUlqaUIsR0FBR2tpQixFQUFXM2UsRUFDakIwZCxFQUFRQyxFQUFHQyxFQUNYQyxFQUFTQyxFQUFVeGYsRUFBTXlmLEVBQVlDLEVBQ3JDQyxFQUFXNUYsRUFBVWUsUUFBU2hmLElBQVVpZSxFQUFVOWMsSUFBS25CLEVBRXhELElBQU02akIsSUFBY1AsRUFBU08sRUFBU1AsUUFBdEMsQ0FLQUgsR0FBVUEsR0FBUyxJQUFLcGpCLE1BQU9mLEtBQXFCLElBQ3BEdWtCLEVBQUlKLEVBQU1oakIsTUFDVixPQUFRb2pCLElBTVAsR0FMQTNkLEVBQU1nZCxFQUFleGlCLEtBQU0raUIsRUFBTUksUUFDakNyZixFQUFPMGYsRUFBV2hlLEVBQUksR0FDdEIrZCxHQUFlL2QsRUFBSSxJQUFNLElBQUsrQyxNQUFPLEtBQU1uRyxPQUdyQzBCLEVBQU4sQ0FPQXVmLEVBQVVubUIsRUFBTzJsQixNQUFNUSxRQUFTdmYsT0FDaENBLEdBQVN4RixFQUFXK2tCLEVBQVFRLGFBQWVSLEVBQVFTLFdBQWNoZ0IsRUFDakV3ZixFQUFXSixFQUFRcGYsT0FDbkIwQixFQUFNQSxFQUFJLElBQVVvRixPQUFRLFVBQVkyWSxFQUFXalcsS0FBSyxpQkFBbUIsV0FHM0U2VyxFQUFZbGlCLEVBQUlxaEIsRUFBU3ZqQixNQUN6QixPQUFRa0MsSUFDUG1oQixFQUFZRSxFQUFVcmhCLElBRWZpaUIsR0FBZVYsSUFBYUosRUFBVUksVUFDekNwVixHQUFXQSxFQUFROUcsT0FBUzhiLEVBQVU5YixNQUN0QzlCLElBQU9BLEVBQUlsRixLQUFNOGlCLEVBQVVXLFlBQzNCemxCLEdBQVlBLElBQWE4a0IsRUFBVTlrQixXQUF5QixPQUFiQSxJQUFxQjhrQixFQUFVOWtCLFlBQ2pGZ2xCLEVBQVNqaEIsT0FBUUosRUFBRyxHQUVmbWhCLEVBQVU5a0IsVUFDZGdsQixFQUFTVSxnQkFFTFgsRUFBUXBlLFFBQ1pvZSxFQUFRcGUsT0FBT25FLEtBQU1sQixFQUFNd2pCLEdBT3pCZSxLQUFjYixFQUFTdmpCLFNBQ3JCc2pCLEVBQVFlLFVBQVlmLEVBQVFlLFNBQVN0akIsS0FBTWxCLEVBQU0yakIsRUFBWUUsRUFBU0MsV0FBYSxHQUN4RnhtQixFQUFPbW5CLFlBQWF6a0IsRUFBTWtFLEVBQU0yZixFQUFTQyxjQUduQ1IsR0FBUXBmLFFBdENmLEtBQU1BLElBQVFvZixHQUNiaG1CLEVBQU8ybEIsTUFBTTVkLE9BQVFyRixFQUFNa0UsRUFBT2lmLEVBQU9JLEdBQUsvVSxFQUFTOVAsR0FBVSxFQTBDL0RwQixHQUFPcUgsY0FBZTJlLFdBQ25CTyxHQUFTQyxPQUNoQjdGLEVBQVU1WSxPQUFRckYsRUFBTSxhQUkxQitELFFBQVMsU0FBVWtmLEVBQU9sZSxFQUFNL0UsRUFBTTBrQixHQUVyQyxHQUFJdmlCLEdBQUd3TSxFQUFLL0ksRUFBSytlLEVBQVlDLEVBQVFkLEVBQVFMLEVBQzVDb0IsR0FBYzdrQixHQUFROUMsR0FDdEJnSCxFQUFPNUYsRUFBWTRDLEtBQU0raEIsRUFBTyxRQUFXQSxFQUFNL2UsS0FBTytlLEVBQ3hEVSxFQUFhcmxCLEVBQVk0QyxLQUFNK2hCLEVBQU8sYUFBZ0JBLEVBQU1rQixVQUFVeGIsTUFBTSxPQUs3RSxJQUhBZ0csRUFBTS9JLEVBQU01RixFQUFPQSxHQUFROUMsRUFHSixJQUFsQjhDLEVBQUtRLFVBQW9DLElBQWxCUixFQUFLUSxXQUs1Qm1pQixFQUFZamlCLEtBQU13RCxFQUFPNUcsRUFBTzJsQixNQUFNYyxhQUl0QzdmLEVBQUsvRixRQUFRLE1BQVEsSUFFekJ3bEIsRUFBYXpmLEVBQUt5RSxNQUFNLEtBQ3hCekUsRUFBT3lmLEVBQVd6VixRQUNsQnlWLEVBQVduaEIsUUFFWm9pQixFQUE2QixFQUFwQjFnQixFQUFLL0YsUUFBUSxNQUFZLEtBQU8rRixFQUd6QytlLEVBQVFBLEVBQU8zbEIsRUFBTzhGLFNBQ3JCNmYsRUFDQSxHQUFJM2xCLEdBQU93bkIsTUFBTzVnQixFQUF1QixnQkFBVitlLElBQXNCQSxHQUd0REEsRUFBTThCLFVBQVlMLEVBQWUsRUFBSSxFQUNyQ3pCLEVBQU1rQixVQUFZUixFQUFXalcsS0FBSyxLQUNsQ3VWLEVBQU0rQixhQUFlL0IsRUFBTWtCLFVBQ3RCblosT0FBUSxVQUFZMlksRUFBV2pXLEtBQUssaUJBQW1CLFdBQzNELEtBR0R1VixFQUFNcFEsT0FBU2hXLFVBQ1RvbUIsRUFBTWhnQixTQUNYZ2dCLEVBQU1oZ0IsT0FBU2pELEdBSWhCK0UsRUFBZSxNQUFSQSxHQUNKa2UsR0FDRjNsQixFQUFPMEQsVUFBVytELEdBQVFrZSxJQUczQlEsRUFBVW5tQixFQUFPMmxCLE1BQU1RLFFBQVN2ZixPQUMxQndnQixJQUFnQmpCLEVBQVExZixTQUFXMGYsRUFBUTFmLFFBQVFqQyxNQUFPOUIsRUFBTStFLE1BQVcsR0FBakYsQ0FNQSxJQUFNMmYsSUFBaUJqQixFQUFRd0IsV0FBYTNuQixFQUFPOEcsU0FBVXBFLEdBQVMsQ0FNckUsSUFKQTJrQixFQUFhbEIsRUFBUVEsY0FBZ0IvZixFQUMvQnllLEVBQVlqaUIsS0FBTWlrQixFQUFhemdCLEtBQ3BDeUssRUFBTUEsRUFBSTVOLFlBRUg0TixFQUFLQSxFQUFNQSxFQUFJNU4sV0FDdEI4akIsRUFBVTltQixLQUFNNFEsR0FDaEIvSSxFQUFNK0ksQ0FJRi9JLE1BQVM1RixFQUFLUyxlQUFpQnZELElBQ25DMm5CLEVBQVU5bUIsS0FBTTZILEVBQUkySixhQUFlM0osRUFBSXNmLGNBQWdCdG9CLEdBS3pEdUYsRUFBSSxDQUNKLFFBQVN3TSxFQUFNa1csRUFBVTFpQixRQUFVOGdCLEVBQU1rQyx1QkFFeENsQyxFQUFNL2UsS0FBTy9CLEVBQUksRUFDaEJ3aUIsRUFDQWxCLEVBQVFTLFVBQVloZ0IsRUFHckI0ZixHQUFXN0YsRUFBVTljLElBQUt3TixFQUFLLGVBQW9Cc1UsRUFBTS9lLE9BQVUrWixFQUFVOWMsSUFBS3dOLEVBQUssVUFDbEZtVixHQUNKQSxFQUFPaGlCLE1BQU82TSxFQUFLNUosR0FJcEIrZSxFQUFTYyxHQUFValcsRUFBS2lXLEdBQ25CZCxHQUFVeG1CLEVBQU80aEIsV0FBWXZRLElBQVNtVixFQUFPaGlCLE9BQVNnaUIsRUFBT2hpQixNQUFPNk0sRUFBSzVKLE1BQVcsR0FDeEZrZSxFQUFNbUMsZ0JBa0NSLE9BL0JBbkMsR0FBTS9lLEtBQU9BLEVBR1B3Z0IsR0FBaUJ6QixFQUFNb0Msc0JBRXJCNUIsRUFBUTZCLFVBQVk3QixFQUFRNkIsU0FBU3hqQixNQUFPK2lCLEVBQVV0YSxNQUFPeEYsTUFBVyxJQUM5RXpILEVBQU80aEIsV0FBWWxmLElBSWQ0a0IsR0FBVXRuQixFQUFPc0QsV0FBWVosRUFBTWtFLE1BQWE1RyxFQUFPOEcsU0FBVXBFLEtBR3JFNEYsRUFBTTVGLEVBQU00a0IsR0FFUGhmLElBQ0o1RixFQUFNNGtCLEdBQVcsTUFJbEJ0bkIsRUFBTzJsQixNQUFNYyxVQUFZN2YsRUFDekJsRSxFQUFNa0UsS0FDTjVHLEVBQU8ybEIsTUFBTWMsVUFBWWxuQixVQUVwQitJLElBQ0o1RixFQUFNNGtCLEdBQVdoZixJQU1kcWQsRUFBTXBRLFNBR2RtUixTQUFVLFNBQVVmLEdBR25CQSxFQUFRM2xCLEVBQU8ybEIsTUFBTXNDLElBQUt0QyxFQUUxQixJQUFJOWdCLEdBQUdFLEVBQUdkLEVBQUttUyxFQUFTOFAsRUFDdkJnQyxLQUNBN2pCLEVBQU8zRCxFQUFXa0QsS0FBTWEsV0FDeEIyaEIsR0FBYXpGLEVBQVU5YyxJQUFLbEIsS0FBTSxlQUFvQmdqQixFQUFNL2UsVUFDNUR1ZixFQUFVbm1CLEVBQU8ybEIsTUFBTVEsUUFBU1IsRUFBTS9lLFNBT3ZDLElBSkF2QyxFQUFLLEdBQUtzaEIsRUFDVkEsRUFBTXdDLGVBQWlCeGxCLE1BR2xCd2pCLEVBQVFpQyxhQUFlakMsRUFBUWlDLFlBQVl4a0IsS0FBTWpCLEtBQU1nakIsTUFBWSxFQUF4RSxDQUtBdUMsRUFBZWxvQixFQUFPMmxCLE1BQU1TLFNBQVN4aUIsS0FBTWpCLEtBQU1nakIsRUFBT1MsR0FHeER2aEIsRUFBSSxDQUNKLFFBQVN1UixFQUFVOFIsRUFBY3JqQixRQUFXOGdCLEVBQU1rQyx1QkFBeUIsQ0FDMUVsQyxFQUFNMEMsY0FBZ0JqUyxFQUFRMVQsS0FFOUJxQyxFQUFJLENBQ0osUUFBU21oQixFQUFZOVAsRUFBUWdRLFNBQVVyaEIsUUFBVzRnQixFQUFNMkMsa0NBSWpEM0MsRUFBTStCLGNBQWdCL0IsRUFBTStCLGFBQWF0a0IsS0FBTThpQixFQUFVVyxjQUU5RGxCLEVBQU1PLFVBQVlBLEVBQ2xCUCxFQUFNbGUsS0FBT3llLEVBQVV6ZSxLQUV2QnhELElBQVNqRSxFQUFPMmxCLE1BQU1RLFFBQVNELEVBQVVJLGVBQWtCRSxRQUFVTixFQUFVaFYsU0FDNUUxTSxNQUFPNFIsRUFBUTFULEtBQU0yQixHQUVuQkosSUFBUTFFLFlBQ05vbUIsRUFBTXBRLE9BQVN0UixNQUFTLElBQzdCMGhCLEVBQU1tQyxpQkFDTm5DLEVBQU00QyxvQkFZWCxNQUpLcEMsR0FBUXFDLGNBQ1pyQyxFQUFRcUMsYUFBYTVrQixLQUFNakIsS0FBTWdqQixHQUczQkEsRUFBTXBRLFNBR2Q2USxTQUFVLFNBQVVULEVBQU9TLEdBQzFCLEdBQUl2aEIsR0FBR3FILEVBQVN1YyxFQUFLdkMsRUFDcEJnQyxLQUNBcEIsRUFBZ0JWLEVBQVNVLGNBQ3pCelYsRUFBTXNVLEVBQU1oZ0IsTUFLYixJQUFLbWhCLEdBQWlCelYsRUFBSW5PLFlBQWN5aUIsRUFBTWpPLFFBQXlCLFVBQWZpTyxFQUFNL2UsTUFFN0QsS0FBUXlLLElBQVExTyxLQUFNME8sRUFBTUEsRUFBSTVOLFlBQWNkLEtBRzdDLEdBQUswTyxFQUFJK0YsWUFBYSxHQUF1QixVQUFmdU8sRUFBTS9lLEtBQW1CLENBRXRELElBREFzRixLQUNNckgsRUFBSSxFQUFPaWlCLEVBQUpqaUIsRUFBbUJBLElBQy9CcWhCLEVBQVlFLEVBQVV2aEIsR0FHdEI0akIsRUFBTXZDLEVBQVU5a0IsU0FBVyxJQUV0QjhLLEVBQVN1YyxLQUFVbHBCLFlBQ3ZCMk0sRUFBU3VjLEdBQVF2QyxFQUFVelgsYUFDMUJ6TyxFQUFReW9CLEVBQUs5bEIsTUFBT29hLE1BQU8xTCxJQUFTLEVBQ3BDclIsRUFBTytDLEtBQU0wbEIsRUFBSzlsQixLQUFNLE1BQVEwTyxJQUFReE8sUUFFckNxSixFQUFTdWMsSUFDYnZjLEVBQVF6TCxLQUFNeWxCLEVBR1hoYSxHQUFRckosUUFDWnFsQixFQUFhem5CLE1BQU9pQyxLQUFNMk8sRUFBSytVLFNBQVVsYSxJQVc3QyxNQUpxQmthLEdBQVN2akIsT0FBekJpa0IsR0FDSm9CLEVBQWF6bkIsTUFBT2lDLEtBQU1DLEtBQU15akIsU0FBVUEsRUFBU3psQixNQUFPbW1CLEtBR3BEb0IsR0FJUlEsTUFBTyx3SEFBd0hyZCxNQUFNLEtBRXJJc2QsWUFFQUMsVUFDQ0YsTUFBTyw0QkFBNEJyZCxNQUFNLEtBQ3pDcUgsT0FBUSxTQUFVaVQsRUFBT2tELEdBT3hCLE1BSm9CLE9BQWZsRCxFQUFNbUQsUUFDVm5ELEVBQU1tRCxNQUE2QixNQUFyQkQsRUFBU0UsU0FBbUJGLEVBQVNFLFNBQVdGLEVBQVNHLFNBR2pFckQsSUFJVHNELFlBQ0NQLE1BQU8sdUZBQXVGcmQsTUFBTSxLQUNwR3FILE9BQVEsU0FBVWlULEVBQU9rRCxHQUN4QixHQUFJSyxHQUFVblgsRUFBS21PLEVBQ2xCeEksRUFBU21SLEVBQVNuUixNQWtCbkIsT0Fmb0IsT0FBZmlPLEVBQU13RCxPQUFxQyxNQUFwQk4sRUFBU08sVUFDcENGLEVBQVd2RCxFQUFNaGdCLE9BQU94QyxlQUFpQnZELEVBQ3pDbVMsRUFBTW1YLEVBQVNwcEIsZ0JBQ2ZvZ0IsRUFBT2dKLEVBQVNoSixLQUVoQnlGLEVBQU13RCxNQUFRTixFQUFTTyxTQUFZclgsR0FBT0EsRUFBSXNYLFlBQWNuSixHQUFRQSxFQUFLbUosWUFBYyxJQUFRdFgsR0FBT0EsRUFBSXVYLFlBQWNwSixHQUFRQSxFQUFLb0osWUFBYyxHQUNuSjNELEVBQU00RCxNQUFRVixFQUFTVyxTQUFZelgsR0FBT0EsRUFBSTBYLFdBQWN2SixHQUFRQSxFQUFLdUosV0FBYyxJQUFRMVgsR0FBT0EsRUFBSTJYLFdBQWN4SixHQUFRQSxFQUFLd0osV0FBYyxJQUs5SS9ELEVBQU1tRCxPQUFTcFIsSUFBV25ZLFlBQy9Cb21CLEVBQU1tRCxNQUFtQixFQUFUcFIsRUFBYSxFQUFlLEVBQVRBLEVBQWEsRUFBZSxFQUFUQSxFQUFhLEVBQUksR0FHakVpTyxJQUlUc0MsSUFBSyxTQUFVdEMsR0FDZCxHQUFLQSxFQUFPM2xCLEVBQU84RixTQUNsQixNQUFPNmYsRUFJUixJQUFJOWdCLEdBQUcwYyxFQUFNL2IsRUFDWm9CLEVBQU8rZSxFQUFNL2UsS0FDYitpQixFQUFnQmhFLEVBQ2hCaUUsRUFBVWpuQixLQUFLZ21CLFNBQVUvaEIsRUFFcEJnakIsS0FDTGpuQixLQUFLZ21CLFNBQVUvaEIsR0FBU2dqQixFQUN2QnhFLEVBQVloaUIsS0FBTXdELEdBQVNqRSxLQUFLc21CLFdBQ2hDOUQsRUFBVS9oQixLQUFNd0QsR0FBU2pFLEtBQUtpbUIsYUFHaENwakIsRUFBT29rQixFQUFRbEIsTUFBUS9sQixLQUFLK2xCLE1BQU1ub0IsT0FBUXFwQixFQUFRbEIsT0FBVS9sQixLQUFLK2xCLE1BRWpFL0MsRUFBUSxHQUFJM2xCLEdBQU93bkIsTUFBT21DLEdBRTFCOWtCLEVBQUlXLEVBQUszQyxNQUNULE9BQVFnQyxJQUNQMGMsRUFBTy9iLEVBQU1YLEdBQ2I4Z0IsRUFBT3BFLEdBQVNvSSxFQUFlcEksRUFlaEMsT0FWTW9FLEdBQU1oZ0IsU0FDWGdnQixFQUFNaGdCLE9BQVMvRixHQUtlLElBQTFCK2xCLEVBQU1oZ0IsT0FBT3pDLFdBQ2pCeWlCLEVBQU1oZ0IsT0FBU2dnQixFQUFNaGdCLE9BQU9sQyxZQUd0Qm1tQixFQUFRbFgsT0FBUWtYLEVBQVFsWCxPQUFRaVQsRUFBT2dFLEdBQWtCaEUsR0FHakVRLFNBQ0MwRCxNQUVDbEMsVUFBVSxHQUVYN1EsT0FFQ3JRLFFBQVMsV0FDUixNQUFLOUQsUUFBUzhpQixLQUF1QjlpQixLQUFLbVUsT0FDekNuVSxLQUFLbVUsU0FDRSxHQUZSLFdBS0Q2UCxhQUFjLFdBRWZtRCxNQUNDcmpCLFFBQVMsV0FDUixNQUFLOUQsUUFBUzhpQixLQUF1QjlpQixLQUFLbW5CLE1BQ3pDbm5CLEtBQUttbkIsUUFDRSxHQUZSLFdBS0RuRCxhQUFjLFlBRWZvRCxPQUVDdGpCLFFBQVMsV0FDUixNQUFtQixhQUFkOUQsS0FBS2lFLE1BQXVCakUsS0FBS29uQixPQUFTL3BCLEVBQU9zSixTQUFVM0csS0FBTSxVQUNyRUEsS0FBS29uQixTQUNFLEdBRlIsV0FPRC9CLFNBQVUsU0FBVXJDLEdBQ25CLE1BQU8zbEIsR0FBT3NKLFNBQVVxYyxFQUFNaGdCLE9BQVEsT0FJeENxa0IsY0FDQ3hCLGFBQWMsU0FBVTdDLEdBSWxCQSxFQUFNcFEsU0FBV2hXLFlBQ3JCb21CLEVBQU1nRSxjQUFjTSxZQUFjdEUsRUFBTXBRLFdBTTVDMlUsU0FBVSxTQUFVdGpCLEVBQU1sRSxFQUFNaWpCLEVBQU93RSxHQUl0QyxHQUFJL2lCLEdBQUlwSCxFQUFPb0YsT0FDZCxHQUFJcEYsR0FBT3duQixNQUNYN0IsR0FFQy9lLEtBQU1BLEVBQ053akIsYUFBYSxFQUNiVCxrQkFHR1EsR0FDSm5xQixFQUFPMmxCLE1BQU1sZixRQUFTVyxFQUFHLEtBQU0xRSxHQUUvQjFDLEVBQU8ybEIsTUFBTWUsU0FBUzlpQixLQUFNbEIsRUFBTTBFLEdBRTlCQSxFQUFFMmdCLHNCQUNOcEMsRUFBTW1DLG1CQUtUOW5CLEVBQU9tbkIsWUFBYyxTQUFVemtCLEVBQU1rRSxFQUFNNGYsR0FDckM5akIsRUFBS04scUJBQ1RNLEVBQUtOLG9CQUFxQndFLEVBQU00ZixHQUFRLElBSTFDeG1CLEVBQU93bkIsTUFBUSxTQUFVamlCLEVBQUttakIsR0FFN0IsTUFBTy9sQixnQkFBZ0IzQyxHQUFPd25CLE9BS3pCamlCLEdBQU9BLEVBQUlxQixNQUNmakUsS0FBS2duQixjQUFnQnBrQixFQUNyQjVDLEtBQUtpRSxLQUFPckIsRUFBSXFCLEtBSWhCakUsS0FBS29sQixtQkFBdUJ4aUIsRUFBSThrQixrQkFDL0I5a0IsRUFBSStrQixtQkFBcUIva0IsRUFBSStrQixvQkFBd0IvRSxFQUFhQyxHQUluRTdpQixLQUFLaUUsS0FBT3JCLEVBSVJtakIsR0FDSjFvQixFQUFPb0YsT0FBUXpDLEtBQU0rbEIsR0FJdEIvbEIsS0FBSzRuQixVQUFZaGxCLEdBQU9BLEVBQUlnbEIsV0FBYXZxQixFQUFPNEssTUFHaERqSSxLQUFNM0MsRUFBTzhGLFVBQVksRUF2QnpCLFdBSlEsR0FBSTlGLEdBQU93bkIsTUFBT2ppQixFQUFLbWpCLElBZ0NoQzFvQixFQUFPd25CLE1BQU1sbEIsV0FDWnlsQixtQkFBb0J2QyxFQUNwQnFDLHFCQUFzQnJDLEVBQ3RCOEMsOEJBQStCOUMsRUFFL0JzQyxlQUFnQixXQUNmLEdBQUkxZ0IsR0FBSXpFLEtBQUtnbkIsYUFFYmhuQixNQUFLb2xCLG1CQUFxQnhDLEVBRXJCbmUsR0FBS0EsRUFBRTBnQixnQkFDWDFnQixFQUFFMGdCLGtCQUdKUyxnQkFBaUIsV0FDaEIsR0FBSW5oQixHQUFJekUsS0FBS2duQixhQUViaG5CLE1BQUtrbEIscUJBQXVCdEMsRUFFdkJuZSxHQUFLQSxFQUFFbWhCLGlCQUNYbmhCLEVBQUVtaEIsbUJBR0ppQyx5QkFBMEIsV0FDekI3bkIsS0FBSzJsQiw4QkFBZ0MvQyxFQUNyQzVpQixLQUFLNGxCLG9CQU1Qdm9CLEVBQU9tRSxNQUNOc21CLFdBQVksWUFDWkMsV0FBWSxZQUNWLFNBQVVDLEVBQU0xQyxHQUNsQmpvQixFQUFPMmxCLE1BQU1RLFFBQVN3RSxJQUNyQmhFLGFBQWNzQixFQUNkckIsU0FBVXFCLEVBRVZ6QixPQUFRLFNBQVViLEdBQ2pCLEdBQUkxaEIsR0FDSDBCLEVBQVNoRCxLQUNUaW9CLEVBQVVqRixFQUFNa0YsY0FDaEIzRSxFQUFZUCxFQUFNTyxTQVNuQixTQUxNMEUsR0FBWUEsSUFBWWpsQixJQUFXM0YsRUFBT21NLFNBQVV4RyxFQUFRaWxCLE1BQ2pFakYsRUFBTS9lLEtBQU9zZixFQUFVSSxTQUN2QnJpQixFQUFNaWlCLEVBQVVoVixRQUFRMU0sTUFBTzdCLEtBQU04QixXQUNyQ2toQixFQUFNL2UsS0FBT3FoQixHQUVQaGtCLE1BT0pqRSxFQUFPc0wsUUFBUXNVLGdCQUNwQjVmLEVBQU9tRSxNQUFPMlMsTUFBTyxVQUFXZ1QsS0FBTSxZQUFjLFNBQVVhLEVBQU0xQyxHQUduRSxHQUFJNkMsR0FBVyxFQUNkNVosRUFBVSxTQUFVeVUsR0FDbkIzbEIsRUFBTzJsQixNQUFNdUUsU0FBVWpDLEVBQUt0QyxFQUFNaGdCLE9BQVEzRixFQUFPMmxCLE1BQU1zQyxJQUFLdEMsSUFBUyxHQUd2RTNsQixHQUFPMmxCLE1BQU1RLFFBQVM4QixJQUNyQmxCLE1BQU8sV0FDYyxJQUFmK0QsS0FDSmxyQixFQUFTd0wsaUJBQWtCdWYsRUFBTXpaLEdBQVMsSUFHNUNnVyxTQUFVLFdBQ1csTUFBYjRELEdBQ05sckIsRUFBU3dDLG9CQUFxQnVvQixFQUFNelosR0FBUyxPQU9sRGxSLEVBQU9zQixHQUFHOEQsUUFFVDJsQixHQUFJLFNBQVVsRixFQUFPemtCLEVBQVVxRyxFQUFNbkcsRUFBaUJnakIsR0FDckQsR0FBSTBHLEdBQVFwa0IsQ0FHWixJQUFzQixnQkFBVmlmLEdBQXFCLENBRVAsZ0JBQWJ6a0IsS0FFWHFHLEVBQU9BLEdBQVFyRyxFQUNmQSxFQUFXN0IsVUFFWixLQUFNcUgsSUFBUWlmLEdBQ2JsakIsS0FBS29vQixHQUFJbmtCLEVBQU14RixFQUFVcUcsRUFBTW9lLEVBQU9qZixHQUFRMGQsRUFFL0MsT0FBTzNoQixNQW1CUixHQWhCYSxNQUFSOEUsR0FBc0IsTUFBTm5HLEdBRXBCQSxFQUFLRixFQUNMcUcsRUFBT3JHLEVBQVc3QixXQUNELE1BQU4rQixJQUNjLGdCQUFiRixJQUVYRSxFQUFLbUcsRUFDTEEsRUFBT2xJLFlBR1ArQixFQUFLbUcsRUFDTEEsRUFBT3JHLEVBQ1BBLEVBQVc3QixZQUdSK0IsS0FBTyxFQUNYQSxFQUFLa2tCLE1BQ0MsS0FBTWxrQixFQUNaLE1BQU9xQixLQWFSLE9BVmEsS0FBUjJoQixJQUNKMEcsRUFBUzFwQixFQUNUQSxFQUFLLFNBQVVxa0IsR0FHZCxNQURBM2xCLEtBQVMwRyxJQUFLaWYsR0FDUHFGLEVBQU94bUIsTUFBTzdCLEtBQU04QixZQUc1Qm5ELEVBQUc4SSxLQUFPNGdCLEVBQU81Z0IsT0FBVTRnQixFQUFPNWdCLEtBQU9wSyxFQUFPb0ssU0FFMUN6SCxLQUFLd0IsS0FBTSxXQUNqQm5FLEVBQU8ybEIsTUFBTTdJLElBQUtuYSxLQUFNa2pCLEVBQU92a0IsRUFBSW1HLEVBQU1yRyxNQUczQ2tqQixJQUFLLFNBQVV1QixFQUFPemtCLEVBQVVxRyxFQUFNbkcsR0FDckMsTUFBT3FCLE1BQUtvb0IsR0FBSWxGLEVBQU96a0IsRUFBVXFHLEVBQU1uRyxFQUFJLElBRTVDb0YsSUFBSyxTQUFVbWYsRUFBT3prQixFQUFVRSxHQUMvQixHQUFJNGtCLEdBQVd0ZixDQUNmLElBQUtpZixHQUFTQSxFQUFNaUMsZ0JBQWtCakMsRUFBTUssVUFRM0MsTUFOQUEsR0FBWUwsRUFBTUssVUFDbEJsbUIsRUFBUTZsQixFQUFNc0MsZ0JBQWlCemhCLElBQzlCd2YsRUFBVVcsVUFBWVgsRUFBVUksU0FBVyxJQUFNSixFQUFVVyxVQUFZWCxFQUFVSSxTQUNqRkosRUFBVTlrQixTQUNWOGtCLEVBQVVoVixTQUVKdk8sSUFFUixJQUFzQixnQkFBVmtqQixHQUFxQixDQUVoQyxJQUFNamYsSUFBUWlmLEdBQ2JsakIsS0FBSytELElBQUtFLEVBQU14RixFQUFVeWtCLEVBQU9qZixHQUVsQyxPQUFPakUsTUFVUixPQVJLdkIsS0FBYSxHQUE2QixrQkFBYkEsTUFFakNFLEVBQUtGLEVBQ0xBLEVBQVc3QixXQUVQK0IsS0FBTyxJQUNYQSxFQUFLa2tCLEdBRUM3aUIsS0FBS3dCLEtBQUssV0FDaEJuRSxFQUFPMmxCLE1BQU01ZCxPQUFRcEYsS0FBTWtqQixFQUFPdmtCLEVBQUlGLE1BSXhDcUYsUUFBUyxTQUFVRyxFQUFNYSxHQUN4QixNQUFPOUUsTUFBS3dCLEtBQUssV0FDaEJuRSxFQUFPMmxCLE1BQU1sZixRQUFTRyxFQUFNYSxFQUFNOUUsU0FHcENzb0IsZUFBZ0IsU0FBVXJrQixFQUFNYSxHQUMvQixHQUFJL0UsR0FBT0MsS0FBSyxFQUNoQixPQUFLRCxHQUNHMUMsRUFBTzJsQixNQUFNbGYsUUFBU0csRUFBTWEsRUFBTS9FLEdBQU0sR0FEaEQsWUFLRixJQUFJd29CLEdBQVcsaUJBQ2RDLEVBQWUsaUNBQ2ZDLEVBQWdCcHJCLEVBQU84VCxLQUFLclIsTUFBTWdNLGFBRWxDNGMsR0FDQ0MsVUFBVSxFQUNWQyxVQUFVLEVBQ1ZoSixNQUFNLEVBQ05pSixNQUFNLEVBR1J4ckIsR0FBT3NCLEdBQUc4RCxRQUNUckMsS0FBTSxTQUFVM0IsR0FDZixHQUFJeUQsR0FDSFosS0FDQTJZLEVBQU9qYSxLQUNQbUMsRUFBTThYLEVBQUsvWixNQUVaLElBQXlCLGdCQUFiekIsR0FDWCxNQUFPdUIsTUFBS29CLFVBQVcvRCxFQUFRb0IsR0FBV3NSLE9BQU8sV0FDaEQsSUFBTTdOLEVBQUksRUFBT0MsRUFBSkQsRUFBU0EsSUFDckIsR0FBSzdFLEVBQU9tTSxTQUFVeVEsRUFBTS9YLEdBQUtsQyxNQUNoQyxPQUFPLElBTVgsS0FBTWtDLEVBQUksRUFBT0MsRUFBSkQsRUFBU0EsSUFDckI3RSxFQUFPK0MsS0FBTTNCLEVBQVV3YixFQUFNL1gsR0FBS1osRUFNbkMsT0FGQUEsR0FBTXRCLEtBQUtvQixVQUFXZSxFQUFNLEVBQUk5RSxFQUFPMGIsT0FBUXpYLEdBQVFBLEdBQ3ZEQSxFQUFJN0MsU0FBV3VCLEtBQUt2QixTQUFXdUIsS0FBS3ZCLFNBQVcsSUFBTUEsRUFBV0EsRUFDekQ2QyxHQUdSdVMsSUFBSyxTQUFVN1EsR0FDZCxHQUFJOGxCLEdBQVV6ckIsRUFBUTJGLEVBQVFoRCxNQUM3Qm9ILEVBQUkwaEIsRUFBUTVvQixNQUViLE9BQU9GLE1BQUsrUCxPQUFPLFdBQ2xCLEdBQUk3TixHQUFJLENBQ1IsTUFBWWtGLEVBQUpsRixFQUFPQSxJQUNkLEdBQUs3RSxFQUFPbU0sU0FBVXhKLEtBQU04b0IsRUFBUTVtQixJQUNuQyxPQUFPLEtBTVh3UixJQUFLLFNBQVVqVixHQUNkLE1BQU91QixNQUFLb0IsVUFBVzJuQixHQUFPL29CLEtBQU12QixPQUFnQixLQUdyRHNSLE9BQVEsU0FBVXRSLEdBQ2pCLE1BQU91QixNQUFLb0IsVUFBVzJuQixHQUFPL29CLEtBQU12QixPQUFnQixLQUdyRHVxQixHQUFJLFNBQVV2cUIsR0FDYixRQUFTc3FCLEdBQ1Ivb0IsS0FJb0IsZ0JBQWJ2QixJQUF5QmdxQixFQUFjaG9CLEtBQU1oQyxHQUNuRHBCLEVBQVFvQixHQUNSQSxPQUNELEdBQ0N5QixRQUdIK29CLFFBQVMsU0FBVXBYLEVBQVduVCxHQUM3QixHQUFJZ1EsR0FDSHhNLEVBQUksRUFDSmtGLEVBQUlwSCxLQUFLRSxPQUNUdVQsS0FDQXlWLEVBQVFULEVBQWNob0IsS0FBTW9SLElBQW9DLGdCQUFkQSxHQUNqRHhVLEVBQVF3VSxFQUFXblQsR0FBV3NCLEtBQUt0QixTQUNuQyxDQUVGLE1BQVkwSSxFQUFKbEYsRUFBT0EsSUFDZCxJQUFNd00sRUFBTTFPLEtBQUtrQyxHQUFJd00sR0FBT0EsSUFBUWhRLEVBQVNnUSxFQUFNQSxFQUFJNU4sV0FFdEQsR0FBb0IsR0FBZjROLEVBQUluTyxXQUFrQjJvQixFQUMxQkEsRUFBSTlPLE1BQU0xTCxHQUFPLEdBR0EsSUFBakJBLEVBQUluTyxVQUNIbEQsRUFBTytDLEtBQUtnUSxnQkFBZ0IxQixFQUFLbUQsSUFBYyxDQUVoRG5ELEVBQU0rRSxFQUFRM1YsS0FBTTRRLEVBQ3BCLE9BS0gsTUFBTzFPLE1BQUtvQixVQUFXcVMsRUFBUXZULE9BQVMsRUFBSTdDLEVBQU8wYixPQUFRdEYsR0FBWUEsSUFLeEUyRyxNQUFPLFNBQVVyYSxHQUdoQixNQUFNQSxHQUtlLGdCQUFUQSxHQUNKOUIsRUFBYWdELEtBQU01RCxFQUFRMEMsR0FBUUMsS0FBTSxJQUkxQy9CLEVBQWFnRCxLQUFNakIsS0FHekJELEVBQUtILE9BQVNHLEVBQU0sR0FBTUEsR0FaakJDLEtBQU0sSUFBT0EsS0FBTSxHQUFJYyxXQUFlZCxLQUFLK0IsUUFBUW9uQixVQUFVanBCLE9BQVMsSUFnQmpGaWEsSUFBSyxTQUFVMWIsRUFBVUMsR0FDeEIsR0FBSWlnQixHQUEwQixnQkFBYmxnQixHQUNmcEIsRUFBUW9CLEVBQVVDLEdBQ2xCckIsRUFBTzBELFVBQVd0QyxHQUFZQSxFQUFTOEIsVUFBYTlCLEdBQWFBLEdBQ2xFWSxFQUFNaEMsRUFBT2dELE1BQU9MLEtBQUtrQixNQUFPeWQsRUFFakMsT0FBTzNlLE1BQUtvQixVQUFXL0QsRUFBTzBiLE9BQU8xWixLQUd0QytwQixRQUFTLFNBQVUzcUIsR0FDbEIsTUFBT3VCLE1BQUttYSxJQUFpQixNQUFaMWIsRUFDaEJ1QixLQUFLdUIsV0FBYXZCLEtBQUt1QixXQUFXd08sT0FBT3RSLE1BSzVDLFNBQVM0cUIsR0FBUzNhLEVBQUt1RCxHQUN0QixPQUFTdkQsRUFBTUEsRUFBSXVELEtBQTBCLElBQWpCdkQsRUFBSW5PLFVBRWhDLE1BQU9tTyxHQUdSclIsRUFBT21FLE1BQ042TixPQUFRLFNBQVV0UCxHQUNqQixHQUFJc1AsR0FBU3RQLEVBQUtlLFVBQ2xCLE9BQU91TyxJQUE4QixLQUFwQkEsRUFBTzlPLFNBQWtCOE8sRUFBUyxNQUVwRGlhLFFBQVMsU0FBVXZwQixHQUNsQixNQUFPMUMsR0FBTzRVLElBQUtsUyxFQUFNLGVBRTFCd3BCLGFBQWMsU0FBVXhwQixFQUFNbUMsRUFBR3NuQixHQUNoQyxNQUFPbnNCLEdBQU80VSxJQUFLbFMsRUFBTSxhQUFjeXBCLElBRXhDNUosS0FBTSxTQUFVN2YsR0FDZixNQUFPc3BCLEdBQVN0cEIsRUFBTSxnQkFFdkI4b0IsS0FBTSxTQUFVOW9CLEdBQ2YsTUFBT3NwQixHQUFTdHBCLEVBQU0sb0JBRXZCMHBCLFFBQVMsU0FBVTFwQixHQUNsQixNQUFPMUMsR0FBTzRVLElBQUtsUyxFQUFNLGdCQUUxQm9wQixRQUFTLFNBQVVwcEIsR0FDbEIsTUFBTzFDLEdBQU80VSxJQUFLbFMsRUFBTSxvQkFFMUIycEIsVUFBVyxTQUFVM3BCLEVBQU1tQyxFQUFHc25CLEdBQzdCLE1BQU9uc0IsR0FBTzRVLElBQUtsUyxFQUFNLGNBQWV5cEIsSUFFekNHLFVBQVcsU0FBVTVwQixFQUFNbUMsRUFBR3NuQixHQUM3QixNQUFPbnNCLEdBQU80VSxJQUFLbFMsRUFBTSxrQkFBbUJ5cEIsSUFFN0NJLFNBQVUsU0FBVTdwQixHQUNuQixNQUFPMUMsR0FBT2dzQixTQUFXdHBCLEVBQUtlLGdCQUFtQjhPLFdBQVk3UCxJQUU5RDRvQixTQUFVLFNBQVU1b0IsR0FDbkIsTUFBTzFDLEdBQU9nc0IsUUFBU3RwQixFQUFLNlAsYUFFN0JnWixTQUFVLFNBQVU3b0IsR0FDbkIsTUFBT0EsR0FBSzhwQixpQkFBbUJ4c0IsRUFBT2dELFNBQVdOLEVBQUtzRixjQUVyRCxTQUFVMUMsRUFBTWhFLEdBQ2xCdEIsRUFBT3NCLEdBQUlnRSxHQUFTLFNBQVU2bUIsRUFBTy9xQixHQUNwQyxHQUFJZ1YsR0FBVXBXLEVBQU9nRixJQUFLckMsS0FBTXJCLEVBQUk2cUIsRUFzQnBDLE9BcEIwQixVQUFyQjdtQixFQUFLM0UsTUFBTyxNQUNoQlMsRUFBVytxQixHQUdQL3FCLEdBQWdDLGdCQUFiQSxLQUN2QmdWLEVBQVVwVyxFQUFPMFMsT0FBUXRSLEVBQVVnVixJQUcvQnpULEtBQUtFLE9BQVMsSUFFWndvQixFQUFrQi9sQixJQUN2QnRGLEVBQU8wYixPQUFRdEYsR0FJWCtVLEVBQWEvbkIsS0FBTWtDLElBQ3ZCOFEsRUFBUXFXLFdBSUg5cEIsS0FBS29CLFVBQVdxUyxNQUl6QnBXLEVBQU9vRixRQUNOc04sT0FBUSxTQUFVb0IsRUFBTTlQLEVBQU9xUyxHQUM5QixHQUFJM1QsR0FBT3NCLEVBQU8sRUFNbEIsT0FKS3FTLEtBQ0p2QyxFQUFPLFFBQVVBLEVBQU8sS0FHRCxJQUFqQjlQLEVBQU1uQixRQUFrQyxJQUFsQkgsRUFBS1EsU0FDakNsRCxFQUFPK0MsS0FBS2dRLGdCQUFpQnJRLEVBQU1vUixJQUFXcFIsTUFDOUMxQyxFQUFPK0MsS0FBS21KLFFBQVM0SCxFQUFNOVQsRUFBT2dLLEtBQU1oRyxFQUFPLFNBQVV0QixHQUN4RCxNQUF5QixLQUFsQkEsRUFBS1EsYUFJZjBSLElBQUssU0FBVWxTLEVBQU1rUyxFQUFLdVgsR0FDekIsR0FBSS9WLE1BQ0hzVyxFQUFXUCxJQUFVNXNCLFNBRXRCLFFBQVNtRCxFQUFPQSxFQUFNa1MsS0FBNEIsSUFBbEJsUyxFQUFLUSxTQUNwQyxHQUF1QixJQUFsQlIsRUFBS1EsU0FBaUIsQ0FDMUIsR0FBS3dwQixHQUFZMXNCLEVBQVEwQyxHQUFPaXBCLEdBQUlRLEdBQ25DLEtBRUQvVixHQUFRM1YsS0FBTWlDLEdBR2hCLE1BQU8wVCxJQUdSNFYsUUFBUyxTQUFVVyxFQUFHanFCLEdBQ3JCLEdBQUkwVCxLQUVKLE1BQVF1VyxFQUFHQSxFQUFJQSxFQUFFbmIsWUFDSSxJQUFmbWIsRUFBRXpwQixVQUFrQnlwQixJQUFNanFCLEdBQzlCMFQsRUFBUTNWLEtBQU1rc0IsRUFJaEIsT0FBT3ZXLEtBS1QsU0FBU3NWLElBQVEzWCxFQUFVNlksRUFBV3ZXLEdBQ3JDLEdBQUtyVyxFQUFPc0QsV0FBWXNwQixHQUN2QixNQUFPNXNCLEdBQU9nSyxLQUFNK0osRUFBVSxTQUFVclIsRUFBTW1DLEdBRTdDLFFBQVMrbkIsRUFBVWhwQixLQUFNbEIsRUFBTW1DLEVBQUduQyxLQUFXMlQsR0FLL0MsSUFBS3VXLEVBQVUxcEIsU0FDZCxNQUFPbEQsR0FBT2dLLEtBQU0rSixFQUFVLFNBQVVyUixHQUN2QyxNQUFTQSxLQUFTa3FCLElBQWdCdlcsR0FLcEMsSUFBMEIsZ0JBQWR1VyxHQUF5QixDQUNwQyxHQUFLMUIsRUFBUzluQixLQUFNd3BCLEdBQ25CLE1BQU81c0IsR0FBTzBTLE9BQVFrYSxFQUFXN1ksRUFBVXNDLEVBRzVDdVcsR0FBWTVzQixFQUFPMFMsT0FBUWthLEVBQVc3WSxHQUd2QyxNQUFPL1QsR0FBT2dLLEtBQU0rSixFQUFVLFNBQVVyUixHQUN2QyxNQUFTOUIsR0FBYWdELEtBQU1ncEIsRUFBV2xxQixJQUFVLElBQVEyVCxJQUczRCxHQUFJd1csSUFBWSwwRUFDZkMsR0FBVyxZQUNYQyxHQUFRLFlBQ1JDLEdBQWUsMEJBQ2ZDLEdBQThCLHdCQUU5QkMsR0FBVyxvQ0FDWEMsR0FBYyw0QkFDZEMsR0FBb0IsY0FDcEJDLEdBQWUsMkNBR2ZDLElBR0NqSixRQUFVLEVBQUcsK0JBQWdDLGFBRTdDa0osT0FBUyxFQUFHLFVBQVcsWUFDdkJDLEtBQU8sRUFBRyxvQkFBcUIsdUJBQy9CQyxJQUFNLEVBQUcsaUJBQWtCLG9CQUMzQkMsSUFBTSxFQUFHLHFCQUFzQix5QkFFL0IxRixVQUFZLEVBQUcsR0FBSSxJQUlyQnNGLElBQVFLLFNBQVdMLEdBQVFqSixPQUUzQmlKLEdBQVFNLE1BQVFOLEdBQVFPLE1BQVFQLEdBQVFRLFNBQVdSLEdBQVFTLFFBQVVULEdBQVFDLE1BQzdFRCxHQUFRVSxHQUFLVixHQUFRSSxHQUVyQjF0QixFQUFPc0IsR0FBRzhELFFBQ1Q0RCxLQUFNLFNBQVVRLEdBQ2YsTUFBT3hKLEdBQU9zSyxPQUFRM0gsS0FBTSxTQUFVNkcsR0FDckMsTUFBT0EsS0FBVWpLLFVBQ2hCUyxFQUFPZ0osS0FBTXJHLE1BQ2JBLEtBQUs2VSxRQUFReVcsUUFBVXRyQixLQUFNLElBQU9BLEtBQU0sR0FBSVEsZUFBaUJ2RCxHQUFXc3VCLGVBQWdCMWtCLEtBQ3pGLEtBQU1BLEVBQU8vRSxVQUFVNUIsU0FHM0JvckIsT0FBUSxXQUNQLE1BQU90ckIsTUFBS3dyQixTQUFVMXBCLFVBQVcsU0FBVS9CLEdBQzFDLEdBQXVCLElBQWxCQyxLQUFLTyxVQUFvQyxLQUFsQlAsS0FBS08sVUFBcUMsSUFBbEJQLEtBQUtPLFNBQWlCLENBQ3pFLEdBQUl5QyxHQUFTeW9CLEdBQW9CenJCLEtBQU1ELEVBQ3ZDaUQsR0FBT3VELFlBQWF4RyxPQUt2QjJyQixRQUFTLFdBQ1IsTUFBTzFyQixNQUFLd3JCLFNBQVUxcEIsVUFBVyxTQUFVL0IsR0FDMUMsR0FBdUIsSUFBbEJDLEtBQUtPLFVBQW9DLEtBQWxCUCxLQUFLTyxVQUFxQyxJQUFsQlAsS0FBS08sU0FBaUIsQ0FDekUsR0FBSXlDLEdBQVN5b0IsR0FBb0J6ckIsS0FBTUQsRUFDdkNpRCxHQUFPMm9CLGFBQWM1ckIsRUFBTWlELEVBQU80TSxnQkFLckNnYyxPQUFRLFdBQ1AsTUFBTzVyQixNQUFLd3JCLFNBQVUxcEIsVUFBVyxTQUFVL0IsR0FDckNDLEtBQUtjLFlBQ1RkLEtBQUtjLFdBQVc2cUIsYUFBYzVyQixFQUFNQyxTQUt2QzZyQixNQUFPLFdBQ04sTUFBTzdyQixNQUFLd3JCLFNBQVUxcEIsVUFBVyxTQUFVL0IsR0FDckNDLEtBQUtjLFlBQ1RkLEtBQUtjLFdBQVc2cUIsYUFBYzVyQixFQUFNQyxLQUFLNk8sZ0JBTTVDekosT0FBUSxTQUFVM0csRUFBVXF0QixHQUMzQixHQUFJL3JCLEdBQ0hzQixFQUFRNUMsRUFBV3BCLEVBQU8wUyxPQUFRdFIsRUFBVXVCLE1BQVNBLEtBQ3JEa0MsRUFBSSxDQUVMLE1BQTZCLE9BQXBCbkMsRUFBT3NCLEVBQU1hLElBQWFBLElBQzVCNHBCLEdBQThCLElBQWxCL3JCLEVBQUtRLFVBQ3RCbEQsRUFBTzB1QixVQUFXQyxHQUFRanNCLElBR3RCQSxFQUFLZSxhQUNKZ3JCLEdBQVl6dUIsRUFBT21NLFNBQVV6SixFQUFLUyxjQUFlVCxJQUNyRGtzQixHQUFlRCxHQUFRanNCLEVBQU0sV0FFOUJBLEVBQUtlLFdBQVcwRixZQUFhekcsR0FJL0IsT0FBT0MsT0FHUjZVLE1BQU8sV0FDTixHQUFJOVUsR0FDSG1DLEVBQUksQ0FFTCxNQUE0QixPQUFuQm5DLEVBQU9DLEtBQUtrQyxJQUFhQSxJQUNWLElBQWxCbkMsRUFBS1EsV0FHVGxELEVBQU8wdUIsVUFBV0MsR0FBUWpzQixHQUFNLElBR2hDQSxFQUFLNFIsWUFBYyxHQUlyQixPQUFPM1IsT0FHUitDLE1BQU8sU0FBVW1wQixFQUFlQyxHQUkvQixNQUhBRCxHQUFpQyxNQUFqQkEsR0FBd0IsRUFBUUEsRUFDaERDLEVBQXlDLE1BQXJCQSxFQUE0QkQsRUFBZ0JDLEVBRXpEbnNCLEtBQUtxQyxJQUFLLFdBQ2hCLE1BQU9oRixHQUFPMEYsTUFBTy9DLEtBQU1rc0IsRUFBZUMsTUFJNUNDLEtBQU0sU0FBVXZsQixHQUNmLE1BQU94SixHQUFPc0ssT0FBUTNILEtBQU0sU0FBVTZHLEdBQ3JDLEdBQUk5RyxHQUFPQyxLQUFNLE9BQ2hCa0MsRUFBSSxFQUNKa0YsRUFBSXBILEtBQUtFLE1BRVYsSUFBSzJHLElBQVVqSyxXQUErQixJQUFsQm1ELEVBQUtRLFNBQ2hDLE1BQU9SLEdBQUs0UCxTQUliLElBQXNCLGdCQUFWOUksS0FBdUJ3akIsR0FBYTVwQixLQUFNb0csS0FDcEQ4akIsSUFBV1IsR0FBU2hxQixLQUFNMEcsS0FBYSxHQUFJLEtBQVEsR0FBSUQsZUFBa0IsQ0FFMUVDLEVBQVFBLEVBQU12RCxRQUFTNG1CLEdBQVcsWUFFbEMsS0FDQyxLQUFZOWlCLEVBQUpsRixFQUFPQSxJQUNkbkMsRUFBT0MsS0FBTWtDLE9BR1UsSUFBbEJuQyxFQUFLUSxXQUNUbEQsRUFBTzB1QixVQUFXQyxHQUFRanNCLEdBQU0sSUFDaENBLEVBQUs0UCxVQUFZOUksRUFJbkI5RyxHQUFPLEVBR04sTUFBTzBFLEtBR0wxRSxHQUNKQyxLQUFLNlUsUUFBUXlXLE9BQVF6a0IsSUFFcEIsS0FBTUEsRUFBTy9FLFVBQVU1QixTQUczQm1zQixZQUFhLFdBQ1osR0FFQzNxQixHQUFPckUsRUFBT2dGLElBQUtyQyxLQUFNLFNBQVVELEdBQ2xDLE9BQVNBLEVBQUs4TyxZQUFhOU8sRUFBS2UsY0FFakNvQixFQUFJLENBbUJMLE9BaEJBbEMsTUFBS3dyQixTQUFVMXBCLFVBQVcsU0FBVS9CLEdBQ25DLEdBQUk2ZixHQUFPbGUsRUFBTVEsS0FDaEJtTixFQUFTM04sRUFBTVEsSUFFWG1OLEtBRUN1USxHQUFRQSxFQUFLOWUsYUFBZXVPLElBQ2hDdVEsRUFBTzVmLEtBQUs2TyxhQUVieFIsRUFBUTJDLE1BQU9vRixTQUNmaUssRUFBT3NjLGFBQWM1ckIsRUFBTTZmLE1BRzFCLEdBR0kxZCxFQUFJbEMsS0FBT0EsS0FBS29GLFVBR3hCa25CLE9BQVEsU0FBVTd0QixHQUNqQixNQUFPdUIsTUFBS29GLE9BQVEzRyxHQUFVLElBRy9CK3NCLFNBQVUsU0FBVTlwQixFQUFNRCxFQUFVOHFCLEdBR25DN3FCLEVBQU8vRCxFQUFZa0UsU0FBV0gsRUFFOUIsSUFBSTBhLEdBQVVyYSxFQUFPa0QsRUFBU3VuQixFQUFZcmQsRUFBTUMsRUFDL0NsTixFQUFJLEVBQ0prRixFQUFJcEgsS0FBS0UsT0FDVHllLEVBQU0zZSxLQUNOeXNCLEVBQVdybEIsRUFBSSxFQUNmUCxFQUFRbkYsRUFBTSxHQUNkZixFQUFhdEQsRUFBT3NELFdBQVlrRyxFQUdqQyxJQUFLbEcsS0FBc0IsR0FBTHlHLEdBQTJCLGdCQUFWUCxJQUFzQnhKLEVBQU9zTCxRQUFRcVUsYUFBZXVOLEdBQVM5cEIsS0FBTW9HLEdBQ3pHLE1BQU83RyxNQUFLd0IsS0FBSyxTQUFVNFksR0FDMUIsR0FBSUgsR0FBTzBFLEVBQUkzYyxHQUFJb1ksRUFDZHpaLEtBQ0plLEVBQU0sR0FBTW1GLEVBQU01RixLQUFNakIsS0FBTW9hLEVBQU9ILEVBQUttUyxTQUUzQ25TLEVBQUt1UixTQUFVOXBCLEVBQU1ELEVBQVU4cUIsSUFJakMsSUFBS25sQixJQUNKZ1YsRUFBVy9lLEVBQU84SCxjQUFlekQsRUFBTTFCLEtBQU0sR0FBSVEsZUFBZSxHQUFRK3JCLEdBQXFCdnNCLE1BQzdGK0IsRUFBUXFhLEVBQVN4TSxXQUVtQixJQUEvQndNLEVBQVMvVyxXQUFXbkYsU0FDeEJrYyxFQUFXcmEsR0FHUEEsR0FBUSxDQU1aLElBTEFrRCxFQUFVNUgsRUFBT2dGLElBQUsycEIsR0FBUTVQLEVBQVUsVUFBWXNRLElBQ3BERixFQUFhdm5CLEVBQVEvRSxPQUlUa0gsRUFBSmxGLEVBQU9BLElBQ2RpTixFQUFPaU4sRUFFRmxhLElBQU11cUIsSUFDVnRkLEVBQU85UixFQUFPMEYsTUFBT29NLEdBQU0sR0FBTSxHQUc1QnFkLEdBR0pudkIsRUFBT2dELE1BQU80RSxFQUFTK21CLEdBQVE3YyxFQUFNLFlBSXZDMU4sRUFBU1IsS0FBTWpCLEtBQU1rQyxHQUFLaU4sRUFBTWpOLEVBR2pDLElBQUtzcUIsRUFPSixJQU5BcGQsRUFBTW5LLEVBQVNBLEVBQVEvRSxPQUFTLEdBQUlNLGNBR3BDbkQsRUFBT2dGLElBQUs0QyxFQUFTMG5CLElBR2Z6cUIsRUFBSSxFQUFPc3FCLEVBQUp0cUIsRUFBZ0JBLElBQzVCaU4sRUFBT2xLLEVBQVMvQyxHQUNYc29CLEdBQVkvcEIsS0FBTTBPLEVBQUtsTCxNQUFRLE1BQ2xDK1osRUFBVXJXLE9BQVF3SCxFQUFNLGVBQWtCOVIsRUFBT21NLFNBQVU0RixFQUFLRCxLQUU1REEsRUFBS3ZNLElBRVR2RixFQUFPdXZCLFNBQVV6ZCxFQUFLdk0sS0FFdEJ2RixFQUFPMkksV0FBWW1KLEVBQUt3QyxZQUFZck8sUUFBU29uQixHQUFjLE1BUWpFLE1BQU8xcUIsU0FJVDNDLEVBQU9tRSxNQUNOcXJCLFNBQVUsU0FDVkMsVUFBVyxVQUNYbkIsYUFBYyxTQUNkb0IsWUFBYSxRQUNiQyxXQUFZLGVBQ1YsU0FBVXJxQixFQUFNdWpCLEdBQ2xCN29CLEVBQU9zQixHQUFJZ0UsR0FBUyxTQUFVbEUsR0FDN0IsR0FBSTRDLEdBQ0hDLEtBQ0EyckIsRUFBUzV2QixFQUFRb0IsR0FDakJ3RCxFQUFPZ3JCLEVBQU8vc0IsT0FBUyxFQUN2QmdDLEVBQUksQ0FFTCxNQUFhRCxHQUFMQyxFQUFXQSxJQUNsQmIsRUFBUWEsSUFBTUQsRUFBT2pDLEtBQU9BLEtBQUsrQyxPQUFPLEdBQ3hDMUYsRUFBUTR2QixFQUFRL3FCLElBQU9na0IsR0FBWTdrQixHQUluQ3hELEVBQVVnRSxNQUFPUCxFQUFLRCxFQUFNSCxNQUc3QixPQUFPbEIsTUFBS29CLFVBQVdFLE1BSXpCakUsRUFBT29GLFFBQ05NLE1BQU8sU0FBVWhELEVBQU1tc0IsRUFBZUMsR0FDckMsR0FBSWpxQixHQUFHa0YsRUFBRzhsQixFQUFhQyxFQUN0QnBxQixFQUFRaEQsRUFBSzhjLFdBQVcsR0FDeEJ1USxFQUFTL3ZCLEVBQU9tTSxTQUFVekosRUFBS1MsY0FBZVQsRUFJL0MsTUFBTTFDLEVBQU9zTCxRQUFRaVUsZ0JBQXNDLElBQWxCN2MsRUFBS1EsVUFBb0MsS0FBbEJSLEVBQUtRLFVBQXNCbEQsRUFBTzJiLFNBQVVqWixJQU0zRyxJQUhBb3RCLEVBQWVuQixHQUFRanBCLEdBQ3ZCbXFCLEVBQWNsQixHQUFRanNCLEdBRWhCbUMsRUFBSSxFQUFHa0YsRUFBSThsQixFQUFZaHRCLE9BQVlrSCxFQUFKbEYsRUFBT0EsSUFDM0NtckIsR0FBVUgsRUFBYWhyQixHQUFLaXJCLEVBQWNqckIsR0FLNUMsSUFBS2dxQixFQUNKLEdBQUtDLEVBSUosSUFIQWUsRUFBY0EsR0FBZWxCLEdBQVFqc0IsR0FDckNvdEIsRUFBZUEsR0FBZ0JuQixHQUFRanBCLEdBRWpDYixFQUFJLEVBQUdrRixFQUFJOGxCLEVBQVlodEIsT0FBWWtILEVBQUpsRixFQUFPQSxJQUMzQ29yQixHQUFnQkosRUFBYWhyQixHQUFLaXJCLEVBQWNqckIsUUFHakRvckIsSUFBZ0J2dEIsRUFBTWdELEVBV3hCLE9BTkFvcUIsR0FBZW5CLEdBQVFqcEIsRUFBTyxVQUN6Qm9xQixFQUFhanRCLE9BQVMsR0FDMUIrckIsR0FBZWtCLEdBQWVDLEdBQVVwQixHQUFRanNCLEVBQU0sV0FJaERnRCxHQUdSb0MsY0FBZSxTQUFVOUQsRUFBTzNDLEVBQVN1RyxFQUFTc29CLEdBQ2pELEdBQUl4dEIsR0FBTTRGLEVBQUt1SyxFQUFLc2QsRUFBTWhrQixFQUFVcEgsRUFDbkNGLEVBQUksRUFDSmtGLEVBQUkvRixFQUFNbkIsT0FDVmtjLEVBQVcxZCxFQUFRMmQseUJBQ25Cb1IsSUFFRCxNQUFZcm1CLEVBQUpsRixFQUFPQSxJQUdkLEdBRkFuQyxFQUFPc0IsRUFBT2EsR0FFVG5DLEdBQWlCLElBQVRBLEVBR1osR0FBNkIsV0FBeEIxQyxFQUFPNEcsS0FBTWxFLEdBR2pCMUMsRUFBT2dELE1BQU9vdEIsRUFBTzF0QixFQUFLUSxVQUFhUixHQUFTQSxPQUcxQyxJQUFNcXFCLEdBQU0zcEIsS0FBTVYsR0FJbEIsQ0FDTjRGLEVBQU1BLEdBQU95VyxFQUFTN1YsWUFBYTdILEVBQVF3RyxjQUFjLFFBR3pEZ0wsR0FBUWlhLEdBQVNocUIsS0FBTUosS0FBVyxHQUFJLEtBQU8sR0FBSTZHLGNBQ2pENG1CLEVBQU83QyxHQUFTemEsSUFBU3lhLEdBQVF0RixTQUNqQzFmLEVBQUlnSyxVQUFZNmQsRUFBTSxHQUFNenRCLEVBQUt1RCxRQUFTNG1CLEdBQVcsYUFBZ0JzRCxFQUFNLEdBRzNFcHJCLEVBQUlvckIsRUFBTSxFQUNWLE9BQVFwckIsSUFDUHVELEVBQU1BLEVBQUkwTixTQUtYaFcsR0FBT2dELE1BQU9vdEIsRUFBTzluQixFQUFJTixZQUd6Qk0sRUFBTXlXLEVBQVN4TSxXQUlmakssRUFBSWdNLFlBQWMsT0ExQmxCOGIsR0FBTTN2QixLQUFNWSxFQUFRNnNCLGVBQWdCeHJCLEdBZ0N2Q3FjLEdBQVN6SyxZQUFjLEdBRXZCelAsRUFBSSxDQUNKLE9BQVNuQyxFQUFPMHRCLEVBQU92ckIsS0FJdEIsS0FBS3FyQixHQUFtRCxLQUF0Q2x3QixFQUFPNkosUUFBU25ILEVBQU13dEIsTUFJeEMvakIsRUFBV25NLEVBQU9tTSxTQUFVekosRUFBS1MsY0FBZVQsR0FHaEQ0RixFQUFNcW1CLEdBQVE1UCxFQUFTN1YsWUFBYXhHLEdBQVEsVUFHdkN5SixHQUNKeWlCLEdBQWV0bUIsR0FJWFYsR0FBVSxDQUNkN0MsRUFBSSxDQUNKLE9BQVNyQyxFQUFPNEYsRUFBS3ZELEtBQ2Zvb0IsR0FBWS9wQixLQUFNVixFQUFLa0UsTUFBUSxLQUNuQ2dCLEVBQVFuSCxLQUFNaUMsR0FNbEIsTUFBT3FjLElBR1IyUCxVQUFXLFNBQVUxcUIsR0FDcEIsR0FBSXlELEdBQU0vRSxFQUFNc2pCLEVBQVFwZixFQUFNMkQsRUFBS3hGLEVBQ2xDb2hCLEVBQVVubUIsRUFBTzJsQixNQUFNUSxRQUN2QnRoQixFQUFJLENBRUwsT0FBU25DLEVBQU9zQixFQUFPYSxNQUFTdEYsVUFBV3NGLElBQU0sQ0FDaEQsR0FBS2ljLEVBQUtHLFFBQVN2ZSxLQUNsQjZILEVBQU03SCxFQUFNaWUsRUFBVTdhLFNBRWpCeUUsSUFBUTlDLEVBQU9rWixFQUFValEsTUFBT25HLEtBQVMsQ0FFN0MsR0FEQXliLEVBQVNwYyxPQUFPNkcsS0FBTWhKLEVBQUt1ZSxZQUN0QkEsRUFBT25qQixPQUNYLElBQU1rQyxFQUFJLEdBQUk2QixFQUFPb2YsRUFBT2poQixNQUFReEYsVUFBV3dGLElBQ3pDb2hCLEVBQVN2ZixHQUNiNUcsRUFBTzJsQixNQUFNNWQsT0FBUXJGLEVBQU1rRSxHQUkzQjVHLEVBQU9tbkIsWUFBYXprQixFQUFNa0UsRUFBTWEsRUFBSytlLE9BSW5DN0YsR0FBVWpRLE1BQU9uRyxVQUVkb1csR0FBVWpRLE1BQU9uRyxTQUtwQm1XLEdBQVVoUSxNQUFPaE8sRUFBTWdlLEVBQVU1YSxZQUkxQ3lwQixTQUFVLFNBQVVjLEdBQ25CLE1BQU9yd0IsR0FBT3N3QixNQUNiRCxJQUFLQSxFQUNMenBCLEtBQU0sTUFDTjJwQixTQUFVLFNBQ1ZDLE9BQU8sRUFDUDVLLFFBQVEsRUFDUjZLLFVBQVUsTUFPYixTQUFTckMsSUFBb0IxckIsRUFBTWd1QixHQUNsQyxNQUFPMXdCLEdBQU9zSixTQUFVNUcsRUFBTSxVQUM3QjFDLEVBQU9zSixTQUErQixJQUFyQm9uQixFQUFReHRCLFNBQWlCd3RCLEVBQVVBLEVBQVFuZSxXQUFZLE1BRXhFN1AsRUFBSytGLHFCQUFxQixTQUFTLElBQ2xDL0YsRUFBS3dHLFlBQWF4RyxFQUFLUyxjQUFjMEUsY0FBYyxVQUNwRG5GLEVBSUYsUUFBUzJzQixJQUFlM3NCLEdBRXZCLE1BREFBLEdBQUtrRSxNQUFzQyxPQUE5QmxFLEVBQUt1TixhQUFhLFNBQW9CLElBQU12TixFQUFLa0UsS0FDdkRsRSxFQUVSLFFBQVM0c0IsSUFBZTVzQixHQUN2QixHQUFJRCxHQUFRMnFCLEdBQWtCdHFCLEtBQU1KLEVBQUtrRSxLQVF6QyxPQU5LbkUsR0FDSkMsRUFBS2tFLEtBQU9uRSxFQUFPLEdBRW5CQyxFQUFLNk4sZ0JBQWdCLFFBR2Y3TixFQUlSLFFBQVNrc0IsSUFBZTVxQixFQUFPMnNCLEdBQzlCLEdBQUk1bUIsR0FBSS9GLEVBQU1uQixPQUNiZ0MsRUFBSSxDQUVMLE1BQVlrRixFQUFKbEYsRUFBT0EsSUFDZDhiLEVBQVVXLElBQ1R0ZCxFQUFPYSxHQUFLLGNBQWU4ckIsR0FBZWhRLEVBQVU5YyxJQUFLOHNCLEVBQWE5ckIsR0FBSyxlQUs5RSxRQUFTb3JCLElBQWdCMXFCLEVBQUtxckIsR0FDN0IsR0FBSS9yQixHQUFHa0YsRUFBR25ELEVBQU1pcUIsRUFBVUMsRUFBVUMsRUFBVUMsRUFBVWhMLENBRXhELElBQXVCLElBQWxCNEssRUFBSzF0QixTQUFWLENBS0EsR0FBS3lkLEVBQVVlLFFBQVNuYyxLQUN2QnNyQixFQUFXbFEsRUFBVXJXLE9BQVEvRSxHQUM3QnVyQixFQUFXblEsRUFBVVcsSUFBS3NQLEVBQU1DLEdBQ2hDN0ssRUFBUzZLLEVBQVM3SyxRQUVKLE9BQ044SyxHQUFTdEssT0FDaEJzSyxFQUFTOUssU0FFVCxLQUFNcGYsSUFBUW9mLEdBQ2IsSUFBTW5oQixFQUFJLEVBQUdrRixFQUFJaWMsRUFBUXBmLEdBQU8vRCxPQUFZa0gsRUFBSmxGLEVBQU9BLElBQzlDN0UsRUFBTzJsQixNQUFNN0ksSUFBSzhULEVBQU1ocUIsRUFBTW9mLEVBQVFwZixHQUFRL0IsSUFPN0M2YixFQUFVZ0IsUUFBU25jLEtBQ3ZCd3JCLEVBQVdyUSxFQUFVcFcsT0FBUS9FLEdBQzdCeXJCLEVBQVdoeEIsRUFBT29GLFVBQVkyckIsR0FFOUJyUSxFQUFVWSxJQUFLc1AsRUFBTUksS0FLdkIsUUFBU3JDLElBQVF0dEIsRUFBU3dSLEdBQ3pCLEdBQUk1TyxHQUFNNUMsRUFBUW9ILHFCQUF1QnBILEVBQVFvSCxxQkFBc0JvSyxHQUFPLEtBQzVFeFIsRUFBUWdQLGlCQUFtQmhQLEVBQVFnUCxpQkFBa0J3QyxHQUFPLE9BRzlELE9BQU9BLEtBQVF0VCxXQUFhc1QsR0FBTzdTLEVBQU9zSixTQUFVakksRUFBU3dSLEdBQzVEN1MsRUFBT2dELE9BQVMzQixHQUFXNEMsR0FDM0JBLEVBSUYsUUFBUytyQixJQUFVenFCLEVBQUtxckIsR0FDdkIsR0FBSXRuQixHQUFXc25CLEVBQUt0bkIsU0FBU0MsYUFHWCxXQUFiRCxHQUF3QjJqQixHQUE0QjdwQixLQUFNbUMsRUFBSXFCLE1BQ2xFZ3FCLEVBQUt2WixRQUFVOVIsRUFBSThSLFNBR0ssVUFBYi9OLEdBQXFDLGFBQWJBLEtBQ25Dc25CLEVBQUtuVixhQUFlbFcsRUFBSWtXLGNBRzFCemIsRUFBT3NCLEdBQUc4RCxRQUNUNnJCLFFBQVMsU0FBVWxDLEdBQ2xCLEdBQUlvQixFQUVKLE9BQUtud0IsR0FBT3NELFdBQVl5ckIsR0FDaEJwc0IsS0FBS3dCLEtBQUssU0FBVVUsR0FDMUI3RSxFQUFRMkMsTUFBT3N1QixRQUFTbEMsRUFBS25yQixLQUFLakIsS0FBTWtDLE9BSXJDbEMsS0FBTSxLQUdWd3RCLEVBQU9ud0IsRUFBUSt1QixFQUFNcHNCLEtBQU0sR0FBSVEsZUFBZ0J3QixHQUFJLEdBQUllLE9BQU8sR0FFekQvQyxLQUFNLEdBQUljLFlBQ2Qwc0IsRUFBSzdCLGFBQWMzckIsS0FBTSxJQUcxQnd0QixFQUFLbnJCLElBQUksV0FDUixHQUFJdEMsR0FBT0MsSUFFWCxPQUFRRCxFQUFLd3VCLGtCQUNaeHVCLEVBQU9BLEVBQUt3dUIsaUJBR2IsT0FBT3h1QixLQUNMdXJCLE9BQVF0ckIsT0FHTEEsT0FHUnd1QixVQUFXLFNBQVVwQyxHQUNwQixNQUFLL3VCLEdBQU9zRCxXQUFZeXJCLEdBQ2hCcHNCLEtBQUt3QixLQUFLLFNBQVVVLEdBQzFCN0UsRUFBUTJDLE1BQU93dUIsVUFBV3BDLEVBQUtuckIsS0FBS2pCLEtBQU1rQyxNQUlyQ2xDLEtBQUt3QixLQUFLLFdBQ2hCLEdBQUl5WSxHQUFPNWMsRUFBUTJDLE1BQ2xCNG9CLEVBQVczTyxFQUFLMk8sVUFFWkEsR0FBUzFvQixPQUNiMG9CLEVBQVMwRixRQUFTbEMsR0FHbEJuUyxFQUFLcVIsT0FBUWMsTUFLaEJvQixLQUFNLFNBQVVwQixHQUNmLEdBQUl6ckIsR0FBYXRELEVBQU9zRCxXQUFZeXJCLEVBRXBDLE9BQU9wc0IsTUFBS3dCLEtBQUssU0FBVVUsR0FDMUI3RSxFQUFRMkMsTUFBT3N1QixRQUFTM3RCLEVBQWF5ckIsRUFBS25yQixLQUFLakIsS0FBTWtDLEdBQUtrcUIsTUFJNURxQyxPQUFRLFdBQ1AsTUFBT3p1QixNQUFLcVAsU0FBUzdOLEtBQUssV0FDbkJuRSxFQUFPc0osU0FBVTNHLEtBQU0sU0FDNUIzQyxFQUFRMkMsTUFBT3FzQixZQUFhcnNCLEtBQUtxRixjQUVoQy9DLFFBR0wsSUFBSW9zQixJQUFRQyxHQUdYQyxHQUFlLDRCQUNmQyxHQUFVLFVBQ1ZDLEdBQWdCL2pCLE9BQVEsS0FBT2xNLEVBQVksU0FBVSxLQUNyRGt3QixHQUFnQmhrQixPQUFRLEtBQU9sTSxFQUFZLGtCQUFtQixLQUM5RG13QixHQUFjamtCLE9BQVEsWUFBY2xNLEVBQVksSUFBSyxLQUNyRG93QixJQUFnQkMsS0FBTSxTQUV0QkMsSUFBWUMsU0FBVSxXQUFZQyxXQUFZLFNBQVVDLFFBQVMsU0FDakVDLElBQ0NDLGNBQWUsRUFDZkMsV0FBWSxLQUdiQyxJQUFjLE1BQU8sUUFBUyxTQUFVLFFBQ3hDQyxJQUFnQixTQUFVLElBQUssTUFBTyxLQUd2QyxTQUFTQyxJQUFnQnZuQixFQUFPMUYsR0FHL0IsR0FBS0EsSUFBUTBGLEdBQ1osTUFBTzFGLEVBSVIsSUFBSWt0QixHQUFVbHRCLEVBQUsxQyxPQUFPLEdBQUdWLGNBQWdCb0QsRUFBSzNFLE1BQU0sR0FDdkQ4eEIsRUFBV250QixFQUNYVCxFQUFJeXRCLEdBQVl6dkIsTUFFakIsT0FBUWdDLElBRVAsR0FEQVMsRUFBT2d0QixHQUFhenRCLEdBQU0ydEIsRUFDckJsdEIsSUFBUTBGLEdBQ1osTUFBTzFGLEVBSVQsT0FBT210QixHQUdSLFFBQVNDLElBQVVod0IsRUFBTWl3QixHQUl4QixNQURBandCLEdBQU9pd0IsR0FBTWp3QixFQUM0QixTQUFsQzFDLEVBQU80eUIsSUFBS2x3QixFQUFNLGFBQTJCMUMsRUFBT21NLFNBQVV6SixFQUFLUyxjQUFlVCxHQUsxRixRQUFTbXdCLElBQVdud0IsR0FDbkIsTUFBT3BELEdBQU9paEIsaUJBQWtCN2QsRUFBTSxNQUd2QyxRQUFTb3dCLElBQVUvZSxFQUFVZ2YsR0FDNUIsR0FBSWQsR0FBU3Z2QixFQUFNc3dCLEVBQ2xCdFUsS0FDQTNCLEVBQVEsRUFDUmxhLEVBQVNrUixFQUFTbFIsTUFFbkIsTUFBZ0JBLEVBQVJrYSxFQUFnQkEsSUFDdkJyYSxFQUFPcVIsRUFBVWdKLEdBQ1hyYSxFQUFLc0ksUUFJWDBULEVBQVEzQixHQUFVNEQsRUFBVTljLElBQUtuQixFQUFNLGNBQ3ZDdXZCLEVBQVV2dkIsRUFBS3NJLE1BQU1pbkIsUUFDaEJjLEdBR0VyVSxFQUFRM0IsSUFBdUIsU0FBWmtWLElBQ3hCdnZCLEVBQUtzSSxNQUFNaW5CLFFBQVUsSUFNTSxLQUF2QnZ2QixFQUFLc0ksTUFBTWluQixTQUFrQlMsR0FBVWh3QixLQUMzQ2djLEVBQVEzQixHQUFVNEQsRUFBVXJXLE9BQVE1SCxFQUFNLGFBQWN1d0IsR0FBbUJ2d0IsRUFBSzRHLGFBSTNFb1YsRUFBUTNCLEtBQ2JpVyxFQUFTTixHQUFVaHdCLElBRWR1dkIsR0FBdUIsU0FBWkEsSUFBdUJlLElBQ3RDclMsRUFBVVcsSUFBSzVlLEVBQU0sYUFBY3N3QixFQUFTZixFQUFVanlCLEVBQU80eUIsSUFBSWx3QixFQUFNLGFBUTNFLEtBQU1xYSxFQUFRLEVBQVdsYSxFQUFSa2EsRUFBZ0JBLElBQ2hDcmEsRUFBT3FSLEVBQVVnSixHQUNYcmEsRUFBS3NJLFFBR0wrbkIsR0FBK0IsU0FBdkJyd0IsRUFBS3NJLE1BQU1pbkIsU0FBNkMsS0FBdkJ2dkIsRUFBS3NJLE1BQU1pbkIsVUFDekR2dkIsRUFBS3NJLE1BQU1pbkIsUUFBVWMsRUFBT3JVLEVBQVEzQixJQUFXLEdBQUssUUFJdEQsT0FBT2hKLEdBR1IvVCxFQUFPc0IsR0FBRzhELFFBQ1R3dEIsSUFBSyxTQUFVdHRCLEVBQU1rRSxHQUNwQixNQUFPeEosR0FBT3NLLE9BQVEzSCxLQUFNLFNBQVVELEVBQU00QyxFQUFNa0UsR0FDakQsR0FBSTBwQixHQUFRcHVCLEVBQ1hFLEtBQ0FILEVBQUksQ0FFTCxJQUFLN0UsRUFBTzZGLFFBQVNQLEdBQVMsQ0FJN0IsSUFIQTR0QixFQUFTTCxHQUFXbndCLEdBQ3BCb0MsRUFBTVEsRUFBS3pDLE9BRUNpQyxFQUFKRCxFQUFTQSxJQUNoQkcsRUFBS00sRUFBTVQsSUFBUTdFLEVBQU80eUIsSUFBS2x3QixFQUFNNEMsRUFBTVQsSUFBSyxFQUFPcXVCLEVBR3hELE9BQU9sdUIsR0FHUixNQUFPd0UsS0FBVWpLLFVBQ2hCUyxFQUFPZ0wsTUFBT3RJLEVBQU00QyxFQUFNa0UsR0FDMUJ4SixFQUFPNHlCLElBQUtsd0IsRUFBTTRDLElBQ2pCQSxFQUFNa0UsRUFBTy9FLFVBQVU1QixPQUFTLElBRXBDa3dCLEtBQU0sV0FDTCxNQUFPRCxJQUFVbndCLE1BQU0sSUFFeEJ3d0IsS0FBTSxXQUNMLE1BQU9MLElBQVVud0IsT0FFbEJ5d0IsT0FBUSxTQUFVL1YsR0FDakIsTUFBc0IsaUJBQVZBLEdBQ0pBLEVBQVExYSxLQUFLb3dCLE9BQVNwd0IsS0FBS3d3QixPQUc1Qnh3QixLQUFLd0IsS0FBSyxXQUNYdXVCLEdBQVUvdkIsTUFDZDNDLEVBQVEyQyxNQUFPb3dCLE9BRWYveUIsRUFBUTJDLE1BQU93d0IsWUFNbkJuekIsRUFBT29GLFFBR05pdUIsVUFDQ0MsU0FDQ3p2QixJQUFLLFNBQVVuQixFQUFNNndCLEdBQ3BCLEdBQUtBLEVBQVcsQ0FFZixHQUFJdHZCLEdBQU1vdEIsR0FBUTN1QixFQUFNLFVBQ3hCLE9BQWUsS0FBUnVCLEVBQWEsSUFBTUEsTUFPOUJ1dkIsV0FDQ0MsYUFBZSxFQUNmQyxhQUFlLEVBQ2Z0QixZQUFjLEVBQ2R1QixZQUFjLEVBQ2RMLFNBQVcsRUFDWE0sT0FBUyxFQUNUQyxTQUFXLEVBQ1hDLFFBQVUsRUFDVkMsUUFBVSxFQUNWM1QsTUFBUSxHQUtUNFQsVUFFQ0MsUUFBUyxZQUlWanBCLE1BQU8sU0FBVXRJLEVBQU00QyxFQUFNa0UsRUFBTzBxQixHQUVuQyxHQUFNeHhCLEdBQTBCLElBQWxCQSxFQUFLUSxVQUFvQyxJQUFsQlIsRUFBS1EsVUFBbUJSLEVBQUtzSSxNQUFsRSxDQUtBLEdBQUkvRyxHQUFLMkMsRUFBTXliLEVBQ2RvUSxFQUFXenlCLEVBQU9vSixVQUFXOUQsR0FDN0IwRixFQUFRdEksRUFBS3NJLEtBU2QsT0FQQTFGLEdBQU90RixFQUFPZzBCLFNBQVV2QixLQUFnQnp5QixFQUFPZzBCLFNBQVV2QixHQUFhRixHQUFnQnZuQixFQUFPeW5CLElBSTdGcFEsRUFBUXJpQixFQUFPcXpCLFNBQVUvdEIsSUFBVXRGLEVBQU9xekIsU0FBVVosR0FHL0NqcEIsSUFBVWpLLFVBaUNUOGlCLEdBQVMsT0FBU0EsS0FBVXBlLEVBQU1vZSxFQUFNeGUsSUFBS25CLEdBQU0sRUFBT3d4QixNQUFhMzBCLFVBQ3BFMEUsRUFJRCtHLEVBQU8xRixJQXJDZHNCLFFBQWM0QyxHQUdBLFdBQVQ1QyxJQUFzQjNDLEVBQU0wdEIsR0FBUTd1QixLQUFNMEcsTUFDOUNBLEdBQVV2RixFQUFJLEdBQUssR0FBTUEsRUFBSSxHQUFLZ0QsV0FBWWpILEVBQU80eUIsSUFBS2x3QixFQUFNNEMsSUFFaEVzQixFQUFPLFVBSU0sTUFBVDRDLEdBQTBCLFdBQVQ1QyxHQUFxQkksTUFBT3dDLEtBS3BDLFdBQVQ1QyxHQUFzQjVHLEVBQU93ekIsVUFBV2YsS0FDNUNqcEIsR0FBUyxNQUtKeEosRUFBT3NMLFFBQVF3VSxpQkFBNkIsS0FBVnRXLEdBQStDLElBQS9CbEUsRUFBS3pFLFFBQVEsZ0JBQ3BFbUssRUFBTzFGLEdBQVMsV0FJWCtjLEdBQVcsT0FBU0EsS0FBVzdZLEVBQVE2WSxFQUFNZixJQUFLNWUsRUFBTThHLEVBQU8wcUIsTUFBYTMwQixZQUNqRnlMLEVBQU8xRixHQUFTa0UsSUFqQmpCLGFBK0JGb3BCLElBQUssU0FBVWx3QixFQUFNNEMsRUFBTTR1QixFQUFPaEIsR0FDakMsR0FBSWxmLEdBQUtsUSxFQUFLdWUsRUFDYm9RLEVBQVd6eUIsRUFBT29KLFVBQVc5RCxFQXlCOUIsT0F0QkFBLEdBQU90RixFQUFPZzBCLFNBQVV2QixLQUFnQnp5QixFQUFPZzBCLFNBQVV2QixHQUFhRixHQUFnQjd2QixFQUFLc0ksTUFBT3luQixJQUlsR3BRLEVBQVFyaUIsRUFBT3F6QixTQUFVL3RCLElBQVV0RixFQUFPcXpCLFNBQVVaLEdBRy9DcFEsR0FBUyxPQUFTQSxLQUN0QnJPLEVBQU1xTyxFQUFNeGUsSUFBS25CLEdBQU0sRUFBTXd4QixJQUl6QmxnQixJQUFRelUsWUFDWnlVLEVBQU1xZCxHQUFRM3VCLEVBQU00QyxFQUFNNHRCLElBSWQsV0FBUmxmLEdBQW9CMU8sSUFBUTRzQixNQUNoQ2xlLEVBQU1rZSxHQUFvQjVzQixJQUlaLEtBQVY0dUIsR0FBZ0JBLEdBQ3BCcHdCLEVBQU1tRCxXQUFZK00sR0FDWGtnQixLQUFVLEdBQVFsMEIsRUFBTytHLFVBQVdqRCxHQUFRQSxHQUFPLEVBQUlrUSxHQUV4REEsS0FJVHFkLEdBQVMsU0FBVTN1QixFQUFNNEMsRUFBTTZ1QixHQUM5QixHQUFJM1QsR0FBTzRULEVBQVVDLEVBQ3BCZCxFQUFXWSxHQUFhdEIsR0FBV253QixHQUluQ3VCLEVBQU1zdkIsRUFBV0EsRUFBU2UsaUJBQWtCaHZCLElBQVVpdUIsRUFBVWp1QixHQUFTL0YsVUFDekV5TCxFQUFRdEksRUFBS3NJLEtBOEJkLE9BNUJLdW9CLEtBRVMsS0FBUnR2QixHQUFlakUsRUFBT21NLFNBQVV6SixFQUFLUyxjQUFlVCxLQUN4RHVCLEVBQU1qRSxFQUFPZ0wsTUFBT3RJLEVBQU00QyxJQU90Qm9zQixHQUFVdHVCLEtBQU1hLElBQVN1dEIsR0FBUXB1QixLQUFNa0MsS0FHM0NrYixFQUFReFYsRUFBTXdWLE1BQ2Q0VCxFQUFXcHBCLEVBQU1vcEIsU0FDakJDLEVBQVdycEIsRUFBTXFwQixTQUdqQnJwQixFQUFNb3BCLFNBQVdwcEIsRUFBTXFwQixTQUFXcnBCLEVBQU13VixNQUFRdmMsRUFDaERBLEVBQU1zdkIsRUFBUy9TLE1BR2Z4VixFQUFNd1YsTUFBUUEsRUFDZHhWLEVBQU1vcEIsU0FBV0EsRUFDakJwcEIsRUFBTXFwQixTQUFXQSxJQUlacHdCLEVBSVIsU0FBU3N3QixJQUFtQjd4QixFQUFNOEcsRUFBT2dyQixHQUN4QyxHQUFJdG9CLEdBQVV1bEIsR0FBVTN1QixLQUFNMEcsRUFDOUIsT0FBTzBDLEdBRU5uRyxLQUFLd2UsSUFBSyxFQUFHclksRUFBUyxJQUFRc29CLEdBQVksS0FBVXRvQixFQUFTLElBQU8sTUFDcEUxQyxFQUdGLFFBQVNpckIsSUFBc0IveEIsRUFBTTRDLEVBQU00dUIsRUFBT1EsRUFBYXhCLEdBQzlELEdBQUlydUIsR0FBSXF2QixLQUFZUSxFQUFjLFNBQVcsV0FFNUMsRUFFUyxVQUFUcHZCLEVBQW1CLEVBQUksRUFFdkIwTyxFQUFNLENBRVAsTUFBWSxFQUFKblAsRUFBT0EsR0FBSyxFQUVKLFdBQVZxdkIsSUFDSmxnQixHQUFPaFUsRUFBTzR5QixJQUFLbHdCLEVBQU13eEIsRUFBUTdCLEdBQVd4dEIsSUFBSyxFQUFNcXVCLElBR25Ed0IsR0FFVyxZQUFWUixJQUNKbGdCLEdBQU9oVSxFQUFPNHlCLElBQUtsd0IsRUFBTSxVQUFZMnZCLEdBQVd4dEIsSUFBSyxFQUFNcXVCLElBSTdDLFdBQVZnQixJQUNKbGdCLEdBQU9oVSxFQUFPNHlCLElBQUtsd0IsRUFBTSxTQUFXMnZCLEdBQVd4dEIsR0FBTSxTQUFTLEVBQU1xdUIsTUFJckVsZixHQUFPaFUsRUFBTzR5QixJQUFLbHdCLEVBQU0sVUFBWTJ2QixHQUFXeHRCLElBQUssRUFBTXF1QixHQUc1QyxZQUFWZ0IsSUFDSmxnQixHQUFPaFUsRUFBTzR5QixJQUFLbHdCLEVBQU0sU0FBVzJ2QixHQUFXeHRCLEdBQU0sU0FBUyxFQUFNcXVCLElBS3ZFLE9BQU9sZixHQUdSLFFBQVMyZ0IsSUFBa0JqeUIsRUFBTTRDLEVBQU00dUIsR0FHdEMsR0FBSVUsSUFBbUIsRUFDdEI1Z0IsRUFBZSxVQUFUMU8sRUFBbUI1QyxFQUFLNGQsWUFBYzVkLEVBQUtteUIsYUFDakQzQixFQUFTTCxHQUFXbndCLEdBQ3BCZ3lCLEVBQWMxMEIsRUFBT3NMLFFBQVErVSxXQUFnRSxlQUFuRHJnQixFQUFPNHlCLElBQUtsd0IsRUFBTSxhQUFhLEVBQU93d0IsRUFLakYsSUFBWSxHQUFQbGYsR0FBbUIsTUFBUEEsRUFBYyxDQVE5QixHQU5BQSxFQUFNcWQsR0FBUTN1QixFQUFNNEMsRUFBTTR0QixJQUNmLEVBQU5sZixHQUFrQixNQUFQQSxLQUNmQSxFQUFNdFIsRUFBS3NJLE1BQU8xRixJQUlkb3NCLEdBQVV0dUIsS0FBSzRRLEdBQ25CLE1BQU9BLEVBS1I0Z0IsR0FBbUJGLElBQWlCMTBCLEVBQU9zTCxRQUFRK1QsbUJBQXFCckwsSUFBUXRSLEVBQUtzSSxNQUFPMUYsSUFHNUYwTyxFQUFNL00sV0FBWStNLElBQVMsRUFJNUIsTUFBU0EsR0FDUnlnQixHQUNDL3hCLEVBQ0E0QyxFQUNBNHVCLElBQVdRLEVBQWMsU0FBVyxXQUNwQ0UsRUFDQTFCLEdBRUUsS0FJTCxRQUFTRCxJQUFvQjNwQixHQUM1QixHQUFJeUksR0FBTW5TLEVBQ1RxeUIsRUFBVUwsR0FBYXRvQixFQTBCeEIsT0F4Qk0yb0IsS0FDTEEsRUFBVTZDLEdBQWV4ckIsRUFBVXlJLEdBR2xCLFNBQVprZ0IsR0FBdUJBLElBRTNCWCxJQUFXQSxJQUNWdHhCLEVBQU8sa0RBQ040eUIsSUFBSyxVQUFXLDZCQUNoQnBELFNBQVV6ZCxFQUFJalMsaUJBR2hCaVMsR0FBUXVmLEdBQU8sR0FBR3lELGVBQWlCekQsR0FBTyxHQUFHOUUsaUJBQWtCNXNCLFNBQy9EbVMsRUFBSWlqQixNQUFNLCtCQUNWampCLEVBQUlrakIsUUFFSmhELEVBQVU2QyxHQUFleHJCLEVBQVV5SSxHQUNuQ3VmLEdBQU9yQyxVQUlSMkMsR0FBYXRvQixHQUFhMm9CLEdBR3BCQSxFQUlSLFFBQVM2QyxJQUFleHZCLEVBQU15TSxHQUM3QixHQUFJclAsR0FBTzFDLEVBQVErUixFQUFJbEssY0FBZXZDLElBQVNrcUIsU0FBVXpkLEVBQUltTyxNQUM1RCtSLEVBQVVqeUIsRUFBTzR5QixJQUFLbHdCLEVBQUssR0FBSSxVQUVoQyxPQURBQSxHQUFLcUYsU0FDRWtxQixFQUdSanlCLEVBQU9tRSxNQUFPLFNBQVUsU0FBVyxTQUFVVSxFQUFHUyxHQUMvQ3RGLEVBQU9xekIsU0FBVS90QixJQUNoQnpCLElBQUssU0FBVW5CLEVBQU02d0IsRUFBVVcsR0FDOUIsTUFBS1gsR0FHd0IsSUFBckI3d0IsRUFBSzRkLGFBQXFCaVIsR0FBYW51QixLQUFNcEQsRUFBTzR5QixJQUFLbHdCLEVBQU0sWUFDckUxQyxFQUFPOEssS0FBTXBJLEVBQU1vdkIsR0FBUyxXQUMzQixNQUFPNkMsSUFBa0JqeUIsRUFBTTRDLEVBQU00dUIsS0FFdENTLEdBQWtCanlCLEVBQU00QyxFQUFNNHVCLEdBUGhDLFdBV0Q1UyxJQUFLLFNBQVU1ZSxFQUFNOEcsRUFBTzBxQixHQUMzQixHQUFJaEIsR0FBU2dCLEdBQVNyQixHQUFXbndCLEVBQ2pDLE9BQU82eEIsSUFBbUI3eEIsRUFBTThHLEVBQU8wcUIsRUFDdENPLEdBQ0MveEIsRUFDQTRDLEVBQ0E0dUIsRUFDQWwwQixFQUFPc0wsUUFBUStVLFdBQWdFLGVBQW5EcmdCLEVBQU80eUIsSUFBS2x3QixFQUFNLGFBQWEsRUFBT3d3QixHQUNsRUEsR0FDRyxPQVFSbHpCLEVBQU8sV0FFQUEsRUFBT3NMLFFBQVE4VCxzQkFDcEJwZixFQUFPcXpCLFNBQVM1UyxhQUNmNWMsSUFBSyxTQUFVbkIsRUFBTTZ3QixHQUNwQixNQUFLQSxHQUlHdnpCLEVBQU84SyxLQUFNcEksR0FBUXV2QixRQUFXLGdCQUN0Q1osSUFBVTN1QixFQUFNLGdCQUxsQixjQWNHMUMsRUFBT3NMLFFBQVFnVSxlQUFpQnRmLEVBQU9zQixHQUFHeXdCLFVBQy9DL3hCLEVBQU9tRSxNQUFRLE1BQU8sUUFBVSxTQUFVVSxFQUFHMGMsR0FDNUN2aEIsRUFBT3F6QixTQUFVOVIsSUFDaEIxZCxJQUFLLFNBQVVuQixFQUFNNndCLEdBQ3BCLE1BQUtBLElBQ0pBLEVBQVdsQyxHQUFRM3VCLEVBQU02ZSxHQUVsQm1RLEdBQVV0dUIsS0FBTW13QixHQUN0QnZ6QixFQUFRMEMsR0FBT3F2QixXQUFZeFEsR0FBUyxLQUNwQ2dTLEdBTEYsZ0JBY0F2ekIsRUFBTzhULE1BQVE5VCxFQUFPOFQsS0FBS3dFLFVBQy9CdFksRUFBTzhULEtBQUt3RSxRQUFRMGEsT0FBUyxTQUFVdHdCLEdBR3RDLE1BQTJCLElBQXBCQSxFQUFLNGQsYUFBeUMsR0FBckI1ZCxFQUFLbXlCLGNBR3RDNzBCLEVBQU84VCxLQUFLd0UsUUFBUTRjLFFBQVUsU0FBVXh5QixHQUN2QyxPQUFRMUMsRUFBTzhULEtBQUt3RSxRQUFRMGEsT0FBUXR3QixLQUt0QzFDLEVBQU9tRSxNQUNOZ3hCLE9BQVEsR0FDUkMsUUFBUyxHQUNUQyxPQUFRLFNBQ04sU0FBVUMsRUFBUUMsR0FDcEJ2MUIsRUFBT3F6QixTQUFVaUMsRUFBU0MsSUFDekJDLE9BQVEsU0FBVWhzQixHQUNqQixHQUFJM0UsR0FBSSxFQUNQNHdCLEtBR0FDLEVBQXlCLGdCQUFWbHNCLEdBQXFCQSxFQUFNNkIsTUFBTSxNQUFTN0IsRUFFMUQsTUFBWSxFQUFKM0UsRUFBT0EsSUFDZDR3QixFQUFVSCxFQUFTakQsR0FBV3h0QixHQUFNMHdCLEdBQ25DRyxFQUFPN3dCLElBQU82d0IsRUFBTzd3QixFQUFJLElBQU82d0IsRUFBTyxFQUd6QyxPQUFPRCxLQUlIakUsR0FBUXB1QixLQUFNa3lCLEtBQ25CdDFCLEVBQU9xekIsU0FBVWlDLEVBQVNDLEdBQVNqVSxJQUFNaVQsS0FHM0MsSUFBSW9CLElBQU0sT0FDVEMsR0FBVyxRQUNYQyxHQUFRLFNBQ1JDLEdBQWtCLHdDQUNsQkMsR0FBZSxvQ0FFaEIvMUIsR0FBT3NCLEdBQUc4RCxRQUNUNHdCLFVBQVcsV0FDVixNQUFPaDJCLEdBQU9pMkIsTUFBT3R6QixLQUFLdXpCLG1CQUUzQkEsZUFBZ0IsV0FDZixNQUFPdnpCLE1BQUtxQyxJQUFJLFdBRWYsR0FBSStPLEdBQVcvVCxFQUFPdWhCLEtBQU01ZSxLQUFNLFdBQ2xDLE9BQU9vUixHQUFXL1QsRUFBTzBELFVBQVdxUSxHQUFhcFIsT0FFakQrUCxPQUFPLFdBQ1AsR0FBSTlMLEdBQU9qRSxLQUFLaUUsSUFFaEIsT0FBT2pFLE1BQUsyQyxPQUFTdEYsRUFBUTJDLE1BQU9ncEIsR0FBSSxjQUN2Q29LLEdBQWEzeUIsS0FBTVQsS0FBSzJHLFlBQWV3c0IsR0FBZ0IxeUIsS0FBTXdELEtBQzNEakUsS0FBSzBVLFVBQVk0VixHQUE0QjdwQixLQUFNd0QsTUFFdEQ1QixJQUFJLFNBQVVILEVBQUduQyxHQUNqQixHQUFJc1IsR0FBTWhVLEVBQVEyQyxNQUFPcVIsS0FFekIsT0FBYyxPQUFQQSxFQUNOLEtBQ0FoVSxFQUFPNkYsUUFBU21PLEdBQ2ZoVSxFQUFPZ0YsSUFBS2dQLEVBQUssU0FBVUEsR0FDMUIsT0FBUzFPLEtBQU01QyxFQUFLNEMsS0FBTWtFLE1BQU93SyxFQUFJL04sUUFBUzR2QixHQUFPLFlBRXBEdndCLEtBQU01QyxFQUFLNEMsS0FBTWtFLE1BQU93SyxFQUFJL04sUUFBUzR2QixHQUFPLFdBQzlDaHlCLFNBTUw3RCxFQUFPaTJCLE1BQVEsU0FBVXJwQixFQUFHdXBCLEdBQzNCLEdBQUliLEdBQ0hjLEtBQ0F0WixFQUFNLFNBQVV2UyxFQUFLZixHQUVwQkEsRUFBUXhKLEVBQU9zRCxXQUFZa0csR0FBVUEsSUFBcUIsTUFBVEEsRUFBZ0IsR0FBS0EsRUFDdEU0c0IsRUFBR0EsRUFBRXZ6QixRQUFXd3pCLG1CQUFvQjlyQixHQUFRLElBQU04ckIsbUJBQW9CN3NCLEdBU3hFLElBTEsyc0IsSUFBZ0I1MkIsWUFDcEI0MkIsRUFBY24yQixFQUFPczJCLGNBQWdCdDJCLEVBQU9zMkIsYUFBYUgsYUFJckRuMkIsRUFBTzZGLFFBQVMrRyxJQUFTQSxFQUFFckssU0FBV3ZDLEVBQU9xRCxjQUFldUosR0FFaEU1TSxFQUFPbUUsS0FBTXlJLEVBQUcsV0FDZmtRLEVBQUtuYSxLQUFLMkMsS0FBTTNDLEtBQUs2RyxhQU10QixLQUFNOHJCLElBQVUxb0IsR0FDZjJwQixHQUFhakIsRUFBUTFvQixFQUFHMG9CLEdBQVVhLEVBQWFyWixFQUtqRCxPQUFPc1osR0FBRWhtQixLQUFNLEtBQU1uSyxRQUFTMHZCLEdBQUssS0FHcEMsU0FBU1ksSUFBYWpCLEVBQVEzdUIsRUFBS3d2QixFQUFhclosR0FDL0MsR0FBSXhYLEVBRUosSUFBS3RGLEVBQU82RixRQUFTYyxHQUVwQjNHLEVBQU9tRSxLQUFNd0MsRUFBSyxTQUFVOUIsRUFBRzJ4QixHQUN6QkwsR0FBZVAsR0FBU3h5QixLQUFNa3lCLEdBRWxDeFksRUFBS3dZLEVBQVFrQixHQUliRCxHQUFhakIsRUFBUyxLQUFxQixnQkFBTmtCLEdBQWlCM3hCLEVBQUksSUFBTyxJQUFLMnhCLEVBQUdMLEVBQWFyWixTQUlsRixJQUFNcVosR0FBc0MsV0FBdkJuMkIsRUFBTzRHLEtBQU1ELEdBUXhDbVcsRUFBS3dZLEVBQVEzdUIsT0FOYixLQUFNckIsSUFBUXFCLEdBQ2I0dkIsR0FBYWpCLEVBQVMsSUFBTWh3QixFQUFPLElBQUtxQixFQUFLckIsR0FBUTZ3QixFQUFhclosR0FRckU5YyxFQUFPbUUsS0FBTSwwTUFFcURrSCxNQUFNLEtBQU0sU0FBVXhHLEVBQUdTLEdBRzFGdEYsRUFBT3NCLEdBQUlnRSxHQUFTLFNBQVVtQyxFQUFNbkcsR0FDbkMsTUFBT21ELFdBQVU1QixPQUFTLEVBQ3pCRixLQUFLb29CLEdBQUl6bEIsRUFBTSxLQUFNbUMsRUFBTW5HLEdBQzNCcUIsS0FBSzhELFFBQVNuQixNQUlqQnRGLEVBQU9zQixHQUFHOEQsUUFDVHF4QixNQUFPLFNBQVVDLEVBQVFDLEdBQ3hCLE1BQU9oMEIsTUFBSzhuQixXQUFZaU0sR0FBU2hNLFdBQVlpTSxHQUFTRCxJQUd2REUsS0FBTSxTQUFVL1EsRUFBT3BlLEVBQU1uRyxHQUM1QixNQUFPcUIsTUFBS29vQixHQUFJbEYsRUFBTyxLQUFNcGUsRUFBTW5HLElBRXBDdTFCLE9BQVEsU0FBVWhSLEVBQU92a0IsR0FDeEIsTUFBT3FCLE1BQUsrRCxJQUFLbWYsRUFBTyxLQUFNdmtCO0VBRy9CdzFCLFNBQVUsU0FBVTExQixFQUFVeWtCLEVBQU9wZSxFQUFNbkcsR0FDMUMsTUFBT3FCLE1BQUtvb0IsR0FBSWxGLEVBQU96a0IsRUFBVXFHLEVBQU1uRyxJQUV4Q3kxQixXQUFZLFNBQVUzMUIsRUFBVXlrQixFQUFPdmtCLEdBRXRDLE1BQTRCLEtBQXJCbUQsVUFBVTVCLE9BQWVGLEtBQUsrRCxJQUFLdEYsRUFBVSxNQUFTdUIsS0FBSytELElBQUttZixFQUFPemtCLEdBQVksS0FBTUUsS0FHbEcsSUFFQzAxQixJQUNBQyxHQUVBQyxHQUFhbDNCLEVBQU80SyxNQUVwQnVzQixHQUFjLEtBQ2RDLEdBQVEsT0FDUkMsR0FBTSxnQkFDTkMsR0FBVyw2QkFFWEMsR0FBaUIsNERBQ2pCQyxHQUFhLGlCQUNiQyxHQUFZLFFBQ1pDLEdBQU8sOENBR1BDLEdBQVEzM0IsRUFBT3NCLEdBQUd1b0IsS0FXbEIrTixNQU9BQyxNQUdBQyxHQUFXLEtBQUt2M0IsT0FBTyxJQUl4QixLQUNDMDJCLEdBQWV0M0IsRUFBU3NYLEtBQ3ZCLE1BQU83UCxJQUdSNnZCLEdBQWVyM0IsRUFBU2lJLGNBQWUsS0FDdkNvdkIsR0FBYWhnQixLQUFPLEdBQ3BCZ2dCLEdBQWVBLEdBQWFoZ0IsS0FJN0IrZixHQUFlVSxHQUFLNTBCLEtBQU1tMEIsR0FBYTF0QixrQkFHdkMsU0FBU3d1QixJQUE2QkMsR0FHckMsTUFBTyxVQUFVQyxFQUFvQjlhLEdBRUQsZ0JBQXZCOGEsS0FDWDlhLEVBQU84YSxFQUNQQSxFQUFxQixJQUd0QixJQUFJMUgsR0FDSDFyQixFQUFJLEVBQ0pxekIsRUFBWUQsRUFBbUIxdUIsY0FBYzlHLE1BQU9mLE1BRXJELElBQUsxQixFQUFPc0QsV0FBWTZaLEdBRXZCLE1BQVNvVCxFQUFXMkgsRUFBVXJ6QixLQUVSLE1BQWhCMHJCLEVBQVMsSUFDYkEsRUFBV0EsRUFBUzV2QixNQUFPLElBQU8sS0FDakNxM0IsRUFBV3pILEdBQWF5SCxFQUFXekgsUUFBa0IxYyxRQUFTc0osS0FJOUQ2YSxFQUFXekgsR0FBYXlILEVBQVd6SCxRQUFrQjl2QixLQUFNMGMsSUFRakUsUUFBU2diLElBQStCSCxFQUFXM3lCLEVBQVMreUIsRUFBaUJDLEdBRTVFLEdBQUlDLE1BQ0hDLEVBQXFCUCxJQUFjSCxFQUVwQyxTQUFTVyxHQUFTakksR0FDakIsR0FBSWpaLEVBWUosT0FYQWdoQixHQUFXL0gsSUFBYSxFQUN4QnZ3QixFQUFPbUUsS0FBTTZ6QixFQUFXekgsT0FBa0IsU0FBVXZoQixFQUFHeXBCLEdBQ3RELEdBQUlDLEdBQXNCRCxFQUFvQnB6QixFQUFTK3lCLEVBQWlCQyxFQUN4RSxPQUFtQyxnQkFBeEJLLElBQXFDSCxHQUFxQkQsRUFBV0ksR0FJcEVILElBQ0RqaEIsRUFBV29oQixHQURmLFdBSE5yekIsRUFBUTZ5QixVQUFVcmtCLFFBQVM2a0IsR0FDM0JGLEVBQVNFLElBQ0YsS0FLRnBoQixFQUdSLE1BQU9raEIsR0FBU256QixFQUFRNnlCLFVBQVcsTUFBVUksRUFBVyxNQUFTRSxFQUFTLEtBTTNFLFFBQVNHLElBQVloekIsRUFBUUosR0FDNUIsR0FBSWdGLEdBQUszRSxFQUNSZ3pCLEVBQWM1NEIsRUFBT3MyQixhQUFhc0MsZUFFbkMsS0FBTXJ1QixJQUFPaEYsR0FDUEEsRUFBS2dGLEtBQVVoTCxhQUNqQnE1QixFQUFhcnVCLEdBQVE1RSxFQUFXQyxJQUFTQSxPQUFnQjJFLEdBQVFoRixFQUFLZ0YsR0FPMUUsT0FKSzNFLElBQ0o1RixFQUFPb0YsUUFBUSxFQUFNTyxFQUFRQyxHQUd2QkQsRUFHUjNGLEVBQU9zQixHQUFHdW9CLEtBQU8sU0FBVXdHLEVBQUt3SSxFQUFRejBCLEdBQ3ZDLEdBQW9CLGdCQUFSaXNCLElBQW9Cc0gsR0FDL0IsTUFBT0EsSUFBTW56QixNQUFPN0IsS0FBTThCLFVBRzNCLElBQUlyRCxHQUFVd0YsRUFBTWt5QixFQUNuQmxjLEVBQU9qYSxLQUNQK0QsRUFBTTJwQixFQUFJeHZCLFFBQVEsSUErQ25CLE9BN0NLNkYsSUFBTyxJQUNYdEYsRUFBV2l2QixFQUFJMXZCLE1BQU8rRixHQUN0QjJwQixFQUFNQSxFQUFJMXZCLE1BQU8sRUFBRytGLElBSWhCMUcsRUFBT3NELFdBQVl1MUIsSUFHdkJ6MEIsRUFBV3kwQixFQUNYQSxFQUFTdDVCLFdBR0VzNUIsR0FBNEIsZ0JBQVhBLEtBQzVCanlCLEVBQU8sUUFJSGdXLEVBQUsvWixPQUFTLEdBQ2xCN0MsRUFBT3N3QixNQUNORCxJQUFLQSxFQUdMenBCLEtBQU1BLEVBQ04ycEIsU0FBVSxPQUNWOW9CLEtBQU1veEIsSUFDSnQwQixLQUFLLFNBQVV3MEIsR0FHakJELEVBQVdyMEIsVUFFWG1ZLEVBQUttUyxLQUFNM3RCLEVBSVZwQixFQUFPLFNBQVNpdUIsT0FBUWp1QixFQUFPaUQsVUFBVzgxQixJQUFpQmgyQixLQUFNM0IsR0FHakUyM0IsS0FFQ0MsU0FBVTUwQixHQUFZLFNBQVVpMEIsRUFBT1ksR0FDekNyYyxFQUFLelksS0FBTUMsRUFBVTAwQixJQUFjVCxFQUFNVSxhQUFjRSxFQUFRWixNQUkxRDExQixNQUlSM0MsRUFBT21FLE1BQVEsWUFBYSxXQUFZLGVBQWdCLFlBQWEsY0FBZSxZQUFjLFNBQVVVLEVBQUcrQixHQUM5RzVHLEVBQU9zQixHQUFJc0YsR0FBUyxTQUFVdEYsR0FDN0IsTUFBT3FCLE1BQUtvb0IsR0FBSW5rQixFQUFNdEYsTUFJeEJ0QixFQUFPb0YsUUFHTjh6QixPQUFRLEVBR1JDLGdCQUNBQyxRQUVBOUMsY0FDQ2pHLElBQUs0RyxHQUNMcndCLEtBQU0sTUFDTnl5QixRQUFTOUIsR0FBZW4wQixLQUFNNHpCLEdBQWMsSUFDNUNwUixRQUFRLEVBQ1IwVCxhQUFhLEVBQ2I5SSxPQUFPLEVBQ1ArSSxZQUFhLG1EQWFidFksU0FDQ3VZLElBQUsxQixHQUNMOXVCLEtBQU0sYUFDTitsQixLQUFNLFlBQ04xbUIsSUFBSyw0QkFDTG94QixLQUFNLHFDQUdQbE8sVUFDQ2xqQixJQUFLLE1BQ0wwbUIsS0FBTSxPQUNOMEssS0FBTSxRQUdQQyxnQkFDQ3J4QixJQUFLLGNBQ0xXLEtBQU0sZUFDTnl3QixLQUFNLGdCQUtQRSxZQUdDQyxTQUFVenlCLE9BR1YweUIsYUFBYSxFQUdiQyxZQUFhOTVCLEVBQU9pSSxVQUdwQjh4QixXQUFZLzVCLEVBQU9vSSxVQU9wQnd3QixhQUNDdkksS0FBSyxFQUNMaHZCLFNBQVMsSUFPWDI0QixVQUFXLFNBQVVyMEIsRUFBUXMwQixHQUM1QixNQUFPQSxHQUdOdEIsR0FBWUEsR0FBWWh6QixFQUFRM0YsRUFBT3MyQixjQUFnQjJELEdBR3ZEdEIsR0FBWTM0QixFQUFPczJCLGFBQWMzd0IsSUFHbkN1MEIsY0FBZW5DLEdBQTZCSCxJQUM1Q3VDLGNBQWVwQyxHQUE2QkYsSUFHNUN2SCxLQUFNLFNBQVVELEVBQUtockIsR0FHQSxnQkFBUmdyQixLQUNYaHJCLEVBQVVnckIsRUFDVkEsRUFBTTl3QixXQUlQOEYsRUFBVUEsS0FFVixJQUFJKzBCLEdBRUhDLEVBRUFDLEVBQ0FDLEVBRUFDLEVBRUE5RSxFQUVBK0UsRUFFQTUxQixFQUVBdXhCLEVBQUlwMkIsRUFBT2c2QixhQUFlMzBCLEdBRTFCcTFCLEVBQWtCdEUsRUFBRS8wQixTQUFXKzBCLEVBRS9CdUUsRUFBcUJ2RSxFQUFFLzBCLFVBQWFxNUIsRUFBZ0J4M0IsVUFBWXczQixFQUFnQm40QixRQUMvRXZDLEVBQVEwNkIsR0FDUjE2QixFQUFPMmxCLE1BRVJwSSxFQUFXdmQsRUFBT2lMLFdBQ2xCMnZCLEVBQW1CNTZCLEVBQU9nYyxVQUFVLGVBRXBDNmUsRUFBYXpFLEVBQUV5RSxlQUVmQyxLQUNBQyxLQUVBMWQsRUFBUSxFQUVSMmQsRUFBVyxXQUVYM0MsR0FDQ250QixXQUFZLEVBR1ordkIsa0JBQW1CLFNBQVUxd0IsR0FDNUIsR0FBSTlILEVBQ0osSUFBZSxJQUFWNGEsRUFBYyxDQUNsQixJQUFNa2QsRUFBa0IsQ0FDdkJBLElBQ0EsT0FBUzkzQixFQUFRNjBCLEdBQVN4MEIsS0FBTXczQixHQUMvQkMsRUFBaUI5M0IsRUFBTSxHQUFHOEcsZUFBa0I5RyxFQUFPLEdBR3JEQSxFQUFRODNCLEVBQWlCaHdCLEVBQUloQixlQUU5QixNQUFnQixPQUFUOUcsRUFBZ0IsS0FBT0EsR0FJL0J5NEIsc0JBQXVCLFdBQ3RCLE1BQWlCLEtBQVY3ZCxFQUFjaWQsRUFBd0IsTUFJOUNhLGlCQUFrQixTQUFVNzFCLEVBQU1rRSxHQUNqQyxHQUFJNHhCLEdBQVE5MUIsRUFBS2lFLGFBS2pCLE9BSk04VCxLQUNML1gsRUFBT3kxQixFQUFxQkssR0FBVUwsRUFBcUJLLElBQVc5MUIsRUFDdEV3MUIsRUFBZ0J4MUIsR0FBU2tFLEdBRW5CN0csTUFJUjA0QixpQkFBa0IsU0FBVXowQixHQUkzQixNQUhNeVcsS0FDTCtZLEVBQUVrRixTQUFXMTBCLEdBRVBqRSxNQUlSazRCLFdBQVksU0FBVTcxQixHQUNyQixHQUFJNEQsRUFDSixJQUFLNUQsRUFDSixHQUFhLEVBQVJxWSxFQUNKLElBQU16VSxJQUFRNUQsR0FFYjYxQixFQUFZanlCLElBQVdpeUIsRUFBWWp5QixHQUFRNUQsRUFBSzRELFFBSWpEeXZCLEdBQU0vYSxPQUFRdFksRUFBS3F6QixFQUFNWSxRQUczQixPQUFPdDJCLE9BSVI0NEIsTUFBTyxTQUFVQyxHQUNoQixHQUFJQyxHQUFZRCxHQUFjUixDQUs5QixPQUpLWixJQUNKQSxFQUFVbUIsTUFBT0UsR0FFbEJsM0IsRUFBTSxFQUFHazNCLEdBQ0Y5NEIsTUF5Q1YsSUFwQ0E0YSxFQUFTalosUUFBUyt6QixHQUFRVyxTQUFXNEIsRUFBaUI5ZCxJQUN0RHViLEVBQU1xRCxRQUFVckQsRUFBTTl6QixLQUN0Qjh6QixFQUFNL3dCLE1BQVErd0IsRUFBTTdhLEtBTXBCNFksRUFBRS9GLE1BQVVBLEdBQU8rRixFQUFFL0YsS0FBTzRHLElBQWlCLElBQUtoeEIsUUFBU214QixHQUFPLElBQ2hFbnhCLFFBQVN3eEIsR0FBV1QsR0FBYyxHQUFNLE1BRzFDWixFQUFFeHZCLEtBQU92QixFQUFRczJCLFFBQVV0MkIsRUFBUXVCLE1BQVF3dkIsRUFBRXVGLFFBQVV2RixFQUFFeHZCLEtBR3pEd3ZCLEVBQUU4QixVQUFZbDRCLEVBQU9tQixLQUFNaTFCLEVBQUU3RixVQUFZLEtBQU1obkIsY0FBYzlHLE1BQU9mLEtBQXFCLElBR25FLE1BQWpCMDBCLEVBQUV3RixjQUNObEcsRUFBUWdDLEdBQUs1MEIsS0FBTXN6QixFQUFFL0YsSUFBSTltQixlQUN6QjZzQixFQUFFd0YsZUFBa0JsRyxHQUNqQkEsRUFBTyxLQUFRc0IsR0FBYyxJQUFPdEIsRUFBTyxLQUFRc0IsR0FBYyxLQUNoRXRCLEVBQU8sS0FBd0IsVUFBZkEsRUFBTyxHQUFrQixLQUFPLFdBQy9Dc0IsR0FBYyxLQUErQixVQUF0QkEsR0FBYyxHQUFrQixLQUFPLFVBSy9EWixFQUFFM3VCLE1BQVEydUIsRUFBRWtELGFBQWlDLGdCQUFYbEQsR0FBRTN1QixPQUN4QzJ1QixFQUFFM3VCLEtBQU96SCxFQUFPaTJCLE1BQU9HLEVBQUUzdUIsS0FBTTJ1QixFQUFFRCxjQUlsQ2dDLEdBQStCUCxHQUFZeEIsRUFBRy93QixFQUFTZ3pCLEdBR3hDLElBQVZoYixFQUNKLE1BQU9nYixFQUlSb0MsR0FBY3JFLEVBQUV4USxPQUdYNlUsR0FBbUMsSUFBcEJ6NkIsRUFBT2s1QixVQUMxQmw1QixFQUFPMmxCLE1BQU1sZixRQUFRLGFBSXRCMnZCLEVBQUV4dkIsS0FBT3d2QixFQUFFeHZCLEtBQUsxRSxjQUdoQmswQixFQUFFeUYsWUFBY3JFLEdBQVdwMEIsS0FBTWd6QixFQUFFeHZCLE1BSW5DeXpCLEVBQVdqRSxFQUFFL0YsSUFHUCtGLEVBQUV5RixhQUdGekYsRUFBRTN1QixPQUNONHlCLEVBQWFqRSxFQUFFL0YsTUFBUzhHLEdBQVkvekIsS0FBTWkzQixHQUFhLElBQU0sS0FBUWpFLEVBQUUzdUIsV0FFaEUydUIsR0FBRTN1QixNQUlMMnVCLEVBQUUxbEIsU0FBVSxJQUNoQjBsQixFQUFFL0YsSUFBTWdILEdBQUlqMEIsS0FBTWkzQixHQUdqQkEsRUFBU3AwQixRQUFTb3hCLEdBQUssT0FBU0gsTUFHaENtRCxHQUFhbEQsR0FBWS96QixLQUFNaTNCLEdBQWEsSUFBTSxLQUFRLEtBQU9uRCxPQUsvRGQsRUFBRTBGLGFBQ0Q5N0IsRUFBT201QixhQUFja0IsSUFDekJoQyxFQUFNOEMsaUJBQWtCLG9CQUFxQm43QixFQUFPbTVCLGFBQWNrQixJQUU5RHI2QixFQUFPbzVCLEtBQU1pQixJQUNqQmhDLEVBQU04QyxpQkFBa0IsZ0JBQWlCbjdCLEVBQU9vNUIsS0FBTWlCLE1BS25EakUsRUFBRTN1QixNQUFRMnVCLEVBQUV5RixZQUFjekYsRUFBRW1ELGVBQWdCLEdBQVNsMEIsRUFBUWswQixjQUNqRWxCLEVBQU04QyxpQkFBa0IsZUFBZ0IvRSxFQUFFbUQsYUFJM0NsQixFQUFNOEMsaUJBQ0wsU0FDQS9FLEVBQUU4QixVQUFXLElBQU85QixFQUFFblYsUUFBU21WLEVBQUU4QixVQUFVLElBQzFDOUIsRUFBRW5WLFFBQVNtVixFQUFFOEIsVUFBVSxLQUE4QixNQUFyQjlCLEVBQUU4QixVQUFXLEdBQWMsS0FBT0osR0FBVyxXQUFhLElBQzFGMUIsRUFBRW5WLFFBQVMsS0FJYixLQUFNcGMsSUFBS3V4QixHQUFFMkYsUUFDWjFELEVBQU04QyxpQkFBa0J0MkIsRUFBR3V4QixFQUFFMkYsUUFBU2wzQixHQUl2QyxJQUFLdXhCLEVBQUU0RixhQUFnQjVGLEVBQUU0RixXQUFXcDRCLEtBQU04MkIsRUFBaUJyQyxFQUFPakMsTUFBUSxHQUFtQixJQUFWL1ksR0FFbEYsTUFBT2diLEdBQU1rRCxPQUlkUCxHQUFXLE9BR1gsS0FBTW4yQixLQUFPNjJCLFFBQVMsRUFBR3AwQixNQUFPLEVBQUcweEIsU0FBVSxHQUM1Q1gsRUFBT3h6QixHQUFLdXhCLEVBQUd2eEIsR0FPaEIsSUFIQXUxQixFQUFZakMsR0FBK0JOLEdBQVl6QixFQUFHL3dCLEVBQVNnekIsR0FLNUQsQ0FDTkEsRUFBTW50QixXQUFhLEVBR2R1dkIsR0FDSkUsRUFBbUJsMEIsUUFBUyxZQUFjNHhCLEVBQU9qQyxJQUc3Q0EsRUFBRTVGLE9BQVM0RixFQUFFdFQsUUFBVSxJQUMzQjBYLEVBQWVydkIsV0FBVyxXQUN6Qmt0QixFQUFNa0QsTUFBTSxZQUNWbkYsRUFBRXRULFNBR04sS0FDQ3pGLEVBQVEsRUFDUitjLEVBQVU2QixLQUFNbkIsRUFBZ0J2MkIsR0FDL0IsTUFBUTZDLEdBRVQsS0FBYSxFQUFSaVcsR0FJSixLQUFNalcsRUFITjdDLEdBQU0sR0FBSTZDLFFBckJaN0MsR0FBTSxHQUFJLGVBOEJYLFNBQVNBLEdBQU0wMEIsRUFBUWlELEVBQWtCQyxFQUFXSixHQUNuRCxHQUFJSyxHQUFXVixFQUFTcDBCLEVBQU93eEIsRUFBVXVELEVBQ3hDYixFQUFhVSxDQUdDLEtBQVY3ZSxJQUtMQSxFQUFRLEVBR0htZCxHQUNKelgsYUFBY3lYLEdBS2ZKLEVBQVk3NkIsVUFHWis2QixFQUF3QnlCLEdBQVcsR0FHbkMxRCxFQUFNbnRCLFdBQWErdEIsRUFBUyxFQUFJLEVBQUksRUFHcENtRCxFQUFZbkQsR0FBVSxLQUFnQixJQUFUQSxHQUEyQixNQUFYQSxFQUd4Q2tELElBQ0pyRCxFQUFXd0QsR0FBcUJsRyxFQUFHaUMsRUFBTzhELElBSTNDckQsRUFBV3lELEdBQWFuRyxFQUFHMEMsRUFBVVQsRUFBTytELEdBR3ZDQSxHQUdDaEcsRUFBRTBGLGFBQ05PLEVBQVdoRSxFQUFNNEMsa0JBQWtCLGlCQUM5Qm9CLElBQ0pyOEIsRUFBT201QixhQUFja0IsR0FBYWdDLEdBRW5DQSxFQUFXaEUsRUFBTTRDLGtCQUFrQixRQUM5Qm9CLElBQ0pyOEIsRUFBT281QixLQUFNaUIsR0FBYWdDLElBS1osTUFBWHBELEdBQTZCLFNBQVg3QyxFQUFFeHZCLEtBQ3hCNDBCLEVBQWEsWUFHUyxNQUFYdkMsRUFDWHVDLEVBQWEsZUFJYkEsRUFBYTFDLEVBQVN6YixNQUN0QnFlLEVBQVU1QyxFQUFTcnhCLEtBQ25CSCxFQUFRd3hCLEVBQVN4eEIsTUFDakI4MEIsR0FBYTkwQixLQUtkQSxFQUFRazBCLEdBQ0h2QyxJQUFXdUMsS0FDZkEsRUFBYSxRQUNDLEVBQVR2QyxJQUNKQSxFQUFTLEtBTVpaLEVBQU1ZLE9BQVNBLEVBQ2ZaLEVBQU1tRCxZQUFlVSxHQUFvQlYsR0FBZSxHQUduRFksRUFDSjdlLEVBQVMvVyxZQUFhazBCLEdBQW1CZ0IsRUFBU0YsRUFBWW5ELElBRTlEOWEsRUFBU2lmLFdBQVk5QixHQUFtQnJDLEVBQU9tRCxFQUFZbDBCLElBSTVEK3dCLEVBQU13QyxXQUFZQSxHQUNsQkEsRUFBYXQ3QixVQUVSazdCLEdBQ0pFLEVBQW1CbDBCLFFBQVMyMUIsRUFBWSxjQUFnQixhQUNyRC9ELEVBQU9qQyxFQUFHZ0csRUFBWVYsRUFBVXAwQixJQUlwQ3N6QixFQUFpQjFkLFNBQVV3ZCxHQUFtQnJDLEVBQU9tRCxJQUVoRGYsSUFDSkUsRUFBbUJsMEIsUUFBUyxnQkFBa0I0eEIsRUFBT2pDLE1BRTNDcDJCLEVBQU9rNUIsUUFDaEJsNUIsRUFBTzJsQixNQUFNbGYsUUFBUSxjQUt4QixNQUFPNHhCLElBR1JvRSxRQUFTLFNBQVVwTSxFQUFLNW9CLEVBQU1yRCxHQUM3QixNQUFPcEUsR0FBTzZELElBQUt3c0IsRUFBSzVvQixFQUFNckQsRUFBVSxTQUd6Q3M0QixVQUFXLFNBQVVyTSxFQUFLanNCLEdBQ3pCLE1BQU9wRSxHQUFPNkQsSUFBS3dzQixFQUFLOXdCLFVBQVc2RSxFQUFVLGFBSS9DcEUsRUFBT21FLE1BQVEsTUFBTyxRQUFVLFNBQVVVLEVBQUc4MkIsR0FDNUMzN0IsRUFBUTI3QixHQUFXLFNBQVV0TCxFQUFLNW9CLEVBQU1yRCxFQUFVd0MsR0FRakQsTUFOSzVHLEdBQU9zRCxXQUFZbUUsS0FDdkJiLEVBQU9BLEdBQVF4QyxFQUNmQSxFQUFXcUQsRUFDWEEsRUFBT2xJLFdBR0RTLEVBQU9zd0IsTUFDYkQsSUFBS0EsRUFDTHpwQixLQUFNKzBCLEVBQ05wTCxTQUFVM3BCLEVBQ1ZhLEtBQU1BLEVBQ05pMEIsUUFBU3QzQixNQVNaLFNBQVNrNEIsSUFBcUJsRyxFQUFHaUMsRUFBTzhELEdBRXZDLEdBQUlRLEdBQUkvMUIsRUFBTWcyQixFQUFlQyxFQUM1QnRSLEVBQVc2SyxFQUFFN0ssU0FDYjJNLEVBQVk5QixFQUFFOEIsU0FHZixPQUEwQixNQUFuQkEsRUFBVyxHQUNqQkEsRUFBVXRuQixRQUNMK3JCLElBQU9wOUIsWUFDWG85QixFQUFLdkcsRUFBRWtGLFVBQVlqRCxFQUFNNEMsa0JBQWtCLGdCQUs3QyxJQUFLMEIsRUFDSixJQUFNLzFCLElBQVEya0IsR0FDYixHQUFLQSxFQUFVM2tCLElBQVUya0IsRUFBVTNrQixHQUFPeEQsS0FBTXU1QixHQUFPLENBQ3REekUsRUFBVXJrQixRQUFTak4sRUFDbkIsT0FNSCxHQUFLc3hCLEVBQVcsSUFBT2lFLEdBQ3RCUyxFQUFnQjFFLEVBQVcsT0FDckIsQ0FFTixJQUFNdHhCLElBQVF1MUIsR0FBWSxDQUN6QixJQUFNakUsRUFBVyxJQUFPOUIsRUFBRXVELFdBQVkveUIsRUFBTyxJQUFNc3hCLEVBQVUsSUFBTyxDQUNuRTBFLEVBQWdCaDJCLENBQ2hCLE9BRUtpMkIsSUFDTEEsRUFBZ0JqMkIsR0FJbEJnMkIsRUFBZ0JBLEdBQWlCQyxFQU1sQyxNQUFLRCxJQUNDQSxJQUFrQjFFLEVBQVcsSUFDakNBLEVBQVVya0IsUUFBUytvQixHQUViVCxFQUFXUyxJQUpuQixVQVdELFFBQVNMLElBQWFuRyxFQUFHMEMsRUFBVVQsRUFBTytELEdBQ3pDLEdBQUlVLEdBQU9DLEVBQVNDLEVBQU0xMEIsRUFBS2tqQixFQUM5Qm1PLEtBRUF6QixFQUFZOUIsRUFBRThCLFVBQVV2M0IsT0FHekIsSUFBS3UzQixFQUFXLEdBQ2YsSUFBTThFLElBQVE1RyxHQUFFdUQsV0FDZkEsRUFBWXFELEVBQUt6ekIsZUFBa0I2c0IsRUFBRXVELFdBQVlxRCxFQUluREQsR0FBVTdFLEVBQVV0bkIsT0FHcEIsT0FBUW1zQixFQWNQLEdBWkszRyxFQUFFc0QsZUFBZ0JxRCxLQUN0QjFFLEVBQU9qQyxFQUFFc0QsZUFBZ0JxRCxJQUFjakUsSUFJbEN0TixHQUFRNFEsR0FBYWhHLEVBQUU2RyxhQUM1Qm5FLEVBQVcxQyxFQUFFNkcsV0FBWW5FLEVBQVUxQyxFQUFFN0YsV0FHdEMvRSxFQUFPdVIsRUFDUEEsRUFBVTdFLEVBQVV0bkIsUUFLbkIsR0FBaUIsTUFBWm1zQixFQUVKQSxFQUFVdlIsTUFHSixJQUFjLE1BQVRBLEdBQWdCQSxJQUFTdVIsRUFBVSxDQU05QyxHQUhBQyxFQUFPckQsRUFBWW5PLEVBQU8sSUFBTXVSLElBQWFwRCxFQUFZLEtBQU9vRCxJQUcxREMsRUFDTCxJQUFNRixJQUFTbkQsR0FJZCxHQURBcnhCLEVBQU13MEIsRUFBTXp4QixNQUFPLEtBQ2QvQyxFQUFLLEtBQVF5MEIsSUFHakJDLEVBQU9yRCxFQUFZbk8sRUFBTyxJQUFNbGpCLEVBQUssS0FDcENxeEIsRUFBWSxLQUFPcnhCLEVBQUssS0FDYixDQUVOMDBCLEtBQVMsRUFDYkEsRUFBT3JELEVBQVltRCxHQUdSbkQsRUFBWW1ELE1BQVksSUFDbkNDLEVBQVV6MEIsRUFBSyxHQUNmNHZCLEVBQVVya0IsUUFBU3ZMLEVBQUssSUFFekIsT0FPSixHQUFLMDBCLEtBQVMsRUFHYixHQUFLQSxHQUFRNUcsRUFBRyxVQUNmMEMsRUFBV2tFLEVBQU1sRSxPQUVqQixLQUNDQSxFQUFXa0UsRUFBTWxFLEdBQ2hCLE1BQVExeEIsR0FDVCxPQUFTaVcsTUFBTyxjQUFlL1YsTUFBTzAxQixFQUFPNTFCLEVBQUksc0JBQXdCb2tCLEVBQU8sT0FBU3VSLElBUS9GLE9BQVMxZixNQUFPLFVBQVc1VixLQUFNcXhCLEdBR2xDOTRCLEVBQU9nNkIsV0FDTi9ZLFNBQ0NwWSxPQUFRLDZGQUVUMGlCLFVBQ0MxaUIsT0FBUSx1QkFFVDh3QixZQUNDdUQsY0FBZSxTQUFVbDBCLEdBRXhCLE1BREFoSixHQUFPMkksV0FBWUssR0FDWkEsTUFNVmhKLEVBQU9rNkIsY0FBZSxTQUFVLFNBQVU5RCxHQUNwQ0EsRUFBRTFsQixRQUFVblIsWUFDaEI2MkIsRUFBRTFsQixPQUFRLEdBRU4wbEIsRUFBRXdGLGNBQ054RixFQUFFeHZCLEtBQU8sU0FLWDVHLEVBQU9tNkIsY0FBZSxTQUFVLFNBQVUvRCxHQUV6QyxHQUFLQSxFQUFFd0YsWUFBYyxDQUNwQixHQUFJL3lCLEdBQVF6RSxDQUNaLFFBQ0M2M0IsS0FBTSxTQUFVanRCLEVBQUdncUIsR0FDbEJud0IsRUFBUzdJLEVBQU8sWUFBWXVoQixNQUMzQmlQLE9BQU8sRUFDUDJNLFFBQVMvRyxFQUFFZ0gsY0FDWDczQixJQUFLNndCLEVBQUUvRixNQUNMdEYsR0FDRixhQUNBM21CLEVBQVcsU0FBVWk1QixHQUNwQngwQixFQUFPZCxTQUNQM0QsRUFBVyxLQUNOaTVCLEdBQ0pyRSxFQUF1QixVQUFicUUsRUFBSXoyQixLQUFtQixJQUFNLElBQUt5MkIsRUFBSXoyQixRQUluRGhILEVBQVNxSixLQUFLQyxZQUFhTCxFQUFRLEtBRXBDMHlCLE1BQU8sV0FDRG4zQixHQUNKQSxRQU1MLElBQUlrNUIsT0FDSEMsR0FBUyxtQkFHVnY5QixHQUFPZzZCLFdBQ053RCxNQUFPLFdBQ1BDLGNBQWUsV0FDZCxHQUFJcjVCLEdBQVdrNUIsR0FBYXJ3QixPQUFXak4sRUFBTzhGLFFBQVUsSUFBUW94QixJQUVoRSxPQURBdjBCLE1BQU15QixJQUFhLEVBQ1pBLEtBS1RwRSxFQUFPazZCLGNBQWUsYUFBYyxTQUFVOUQsRUFBR3NILEVBQWtCckYsR0FFbEUsR0FBSXNGLEdBQWNDLEVBQWFDLEVBQzlCQyxFQUFXMUgsRUFBRW9ILFNBQVUsSUFBV0QsR0FBT242QixLQUFNZ3pCLEVBQUUvRixLQUNoRCxNQUNrQixnQkFBWCtGLEdBQUUzdUIsUUFBd0IydUIsRUFBRW1ELGFBQWUsSUFBSzE0QixRQUFRLHNDQUF3QzA4QixHQUFPbjZCLEtBQU1nekIsRUFBRTN1QixPQUFVLE9BSWxJLE9BQUtxMkIsSUFBaUMsVUFBckIxSCxFQUFFOEIsVUFBVyxJQUc3QnlGLEVBQWV2SCxFQUFFcUgsY0FBZ0J6OUIsRUFBT3NELFdBQVk4eUIsRUFBRXFILGVBQ3JEckgsRUFBRXFILGdCQUNGckgsRUFBRXFILGNBR0VLLEVBQ0oxSCxFQUFHMEgsR0FBYTFILEVBQUcwSCxHQUFXNzNCLFFBQVNzM0IsR0FBUSxLQUFPSSxHQUMzQ3ZILEVBQUVvSCxTQUFVLElBQ3ZCcEgsRUFBRS9GLE1BQVM4RyxHQUFZL3pCLEtBQU1nekIsRUFBRS9GLEtBQVEsSUFBTSxLQUFRK0YsRUFBRW9ILE1BQVEsSUFBTUcsR0FJdEV2SCxFQUFFdUQsV0FBVyxlQUFpQixXQUk3QixNQUhNa0UsSUFDTDc5QixFQUFPc0gsTUFBT3EyQixFQUFlLG1CQUV2QkUsRUFBbUIsSUFJM0J6SCxFQUFFOEIsVUFBVyxHQUFNLE9BR25CMEYsRUFBY3QrQixFQUFRcStCLEdBQ3RCcitCLEVBQVFxK0IsR0FBaUIsV0FDeEJFLEVBQW9CcDVCLFdBSXJCNHpCLEVBQU0vYSxPQUFPLFdBRVpoZSxFQUFRcStCLEdBQWlCQyxFQUdwQnhILEVBQUd1SCxLQUVQdkgsRUFBRXFILGNBQWdCQyxFQUFpQkQsY0FHbkNILEdBQWE3OEIsS0FBTWs5QixJQUlmRSxHQUFxQjc5QixFQUFPc0QsV0FBWXM2QixJQUM1Q0EsRUFBYUMsRUFBbUIsSUFHakNBLEVBQW9CRCxFQUFjcitCLFlBSTVCLFVBdERSLFlBeUREUyxFQUFPczJCLGFBQWF5SCxJQUFNLFdBQ3pCLElBQ0MsTUFBTyxJQUFJQyxnQkFDVixNQUFPNTJCLEtBR1YsSUFBSTYyQixJQUFlaitCLEVBQU9zMkIsYUFBYXlILE1BQ3RDRyxJQUVDLEVBQUcsSUFHSEMsS0FBTSxLQUtQQyxHQUFRLEVBQ1JDLEtBRUkvK0IsR0FBT2cvQixlQUNYdCtCLEVBQVFWLEdBQVN5ckIsR0FBSSxTQUFVLFdBQzlCLElBQUssR0FBSXhnQixLQUFPOHpCLElBQ2ZBLEdBQWM5ekIsSUFFZjh6QixJQUFlOStCLFlBSWpCUyxFQUFPc0wsUUFBUWl6QixPQUFTTixJQUFrQixtQkFBcUJBLElBQy9EaitCLEVBQU9zTCxRQUFRZ2xCLEtBQU8yTixLQUFpQkEsR0FFdkNqK0IsRUFBT202QixjQUFjLFNBQVU5MEIsR0FDOUIsR0FBSWpCLEVBRUosT0FBS3BFLEdBQU9zTCxRQUFRaXpCLE1BQVFOLEtBQWlCNTRCLEVBQVF1MkIsYUFFbkRLLEtBQU0sU0FBVUYsRUFBUy9DLEdBQ3hCLEdBQUluMEIsR0FBR2dMLEVBQ05rdUIsRUFBTTE0QixFQUFRMDRCLEtBR2YsSUFGQUEsRUFBSVMsS0FBTW41QixFQUFRdUIsS0FBTXZCLEVBQVFnckIsSUFBS2hyQixFQUFRbXJCLE1BQU9uckIsRUFBUW81QixTQUFVcDVCLEVBQVE2UyxVQUV6RTdTLEVBQVFxNUIsVUFDWixJQUFNNzVCLElBQUtRLEdBQVFxNUIsVUFDbEJYLEVBQUtsNUIsR0FBTVEsRUFBUXE1QixVQUFXNzVCLEVBSTNCUSxHQUFRaTJCLFVBQVl5QyxFQUFJMUMsa0JBQzVCMEMsRUFBSTFDLGlCQUFrQmgyQixFQUFRaTJCLFVBT3pCajJCLEVBQVF1MkIsYUFBZ0JHLEVBQVEsc0JBQ3JDQSxFQUFRLG9CQUFzQixpQkFHL0IsS0FBTWwzQixJQUFLazNCLEdBQ1ZnQyxFQUFJNUMsaUJBQWtCdDJCLEVBQUdrM0IsRUFBU2wzQixHQUduQ1QsR0FBVyxTQUFVd0MsR0FDcEIsTUFBTyxZQUNEeEMsVUFDR2k2QixJQUFjeHVCLEdBQ3JCekwsRUFBVzI1QixFQUFJWSxPQUFTWixFQUFJYSxRQUFVLEtBQ3hCLFVBQVRoNEIsRUFDSm0zQixFQUFJeEMsUUFDZ0IsVUFBVDMwQixFQUNYb3lCLEVBRUMrRSxFQUFJOUUsUUFBVSxJQUNkOEUsRUFBSXZDLFlBR0x4QyxFQUNDa0YsR0FBa0JILEVBQUk5RSxTQUFZOEUsRUFBSTlFLE9BQ3RDOEUsRUFBSXZDLFdBSXdCLGdCQUFyQnVDLEdBQUloRixjQUNWL3ZCLEtBQU0rMEIsRUFBSWhGLGNBQ1B4NUIsVUFDSncrQixFQUFJN0MsNEJBT1Q2QyxFQUFJWSxPQUFTdjZCLElBQ2IyNUIsRUFBSWEsUUFBVXg2QixFQUFTLFNBRXZCQSxFQUFXaTZCLEdBQWV4dUIsRUFBS3V1QixNQUFhaDZCLEVBQVMsU0FJckQyNUIsRUFBSTlCLEtBQU01MkIsRUFBUXcyQixZQUFjeDJCLEVBQVFvQyxNQUFRLE9BRWpEOHpCLE1BQU8sV0FDRG4zQixHQUNKQSxNQXRFSixXQTRFRCxJQUFJeTZCLElBQU9DLEdBQ1ZDLEdBQVcseUJBQ1hDLEdBQWF0eEIsT0FBUSxpQkFBbUJsTSxFQUFZLGNBQWUsS0FDbkV5OUIsR0FBTyxjQUNQQyxJQUF3QkMsSUFDeEJDLElBQ0M1RixLQUFNLFNBQVVqWSxFQUFNL1gsR0FDckIsR0FBSTYxQixHQUFRMThCLEtBQUsyOEIsWUFBYS9kLEVBQU0vWCxHQUNuQzdELEVBQVMwNUIsRUFBTWh1QixNQUNmcWtCLEVBQVFzSixHQUFPbDhCLEtBQU0wRyxHQUNyQisxQixFQUFPN0osR0FBU0EsRUFBTyxLQUFTMTFCLEVBQU93ekIsVUFBV2pTLEdBQVMsR0FBSyxNQUdoRXpMLEdBQVU5VixFQUFPd3pCLFVBQVdqUyxJQUFtQixPQUFUZ2UsSUFBa0I1NUIsSUFDdkRxNUIsR0FBT2w4QixLQUFNOUMsRUFBTzR5QixJQUFLeU0sRUFBTTM4QixLQUFNNmUsSUFDdENpZSxFQUFRLEVBQ1JDLEVBQWdCLEVBRWpCLElBQUszcEIsR0FBU0EsRUFBTyxLQUFReXBCLEVBQU8sQ0FFbkNBLEVBQU9BLEdBQVF6cEIsRUFBTyxHQUd0QjRmLEVBQVFBLE1BR1I1ZixHQUFTblEsR0FBVSxDQUVuQixHQUdDNjVCLEdBQVFBLEdBQVMsS0FHakIxcEIsR0FBZ0IwcEIsRUFDaEJ4L0IsRUFBT2dMLE1BQU9xMEIsRUFBTTM4QixLQUFNNmUsRUFBTXpMLEVBQVF5cEIsU0FJL0JDLEtBQVdBLEVBQVFILEVBQU1odUIsTUFBUTFMLElBQXFCLElBQVY2NUIsS0FBaUJDLEdBYXhFLE1BVEsvSixLQUNKNWYsRUFBUXVwQixFQUFNdnBCLE9BQVNBLElBQVVuUSxHQUFVLEVBQzNDMDVCLEVBQU1FLEtBQU9BLEVBRWJGLEVBQU1wNkIsSUFBTXl3QixFQUFPLEdBQ2xCNWYsR0FBVTRmLEVBQU8sR0FBTSxHQUFNQSxFQUFPLElBQ25DQSxFQUFPLElBR0gySixJQUtWLFNBQVNLLE1BSVIsTUFIQXYwQixZQUFXLFdBQ1YwekIsR0FBUXQvQixZQUVBcy9CLEdBQVE3K0IsRUFBTzRLLE1BR3pCLFFBQVMwMEIsSUFBYTkxQixFQUFPK1gsRUFBTW9lLEdBQ2xDLEdBQUlOLEdBQ0hPLEdBQWVSLEdBQVU3ZCxRQUFlaGhCLE9BQVE2K0IsR0FBVSxNQUMxRHJpQixFQUFRLEVBQ1JsYSxFQUFTKzhCLEVBQVcvOEIsTUFDckIsTUFBZ0JBLEVBQVJrYSxFQUFnQkEsSUFDdkIsR0FBTXNpQixFQUFRTyxFQUFZN2lCLEdBQVFuWixLQUFNKzdCLEVBQVdwZSxFQUFNL1gsR0FHeEQsTUFBTzYxQixHQUtWLFFBQVNRLElBQVduOUIsRUFBTW85QixFQUFZejZCLEdBQ3JDLEdBQUlrUSxHQUNId3FCLEVBQ0FoakIsRUFBUSxFQUNSbGEsRUFBU3E4QixHQUFvQnI4QixPQUM3QjBhLEVBQVd2ZCxFQUFPaUwsV0FBV3FTLE9BQVEsaUJBRTdCMGlCLEdBQUt0OUIsT0FFYnM5QixFQUFPLFdBQ04sR0FBS0QsRUFDSixPQUFPLENBRVIsSUFBSUUsR0FBY3BCLElBQVNhLEtBQzFCbGhCLEVBQVl6WSxLQUFLd2UsSUFBSyxFQUFHb2IsRUFBVU8sVUFBWVAsRUFBVVEsU0FBV0YsR0FFcEV0bUIsRUFBTzZFLEVBQVltaEIsRUFBVVEsVUFBWSxFQUN6Q0MsRUFBVSxFQUFJem1CLEVBQ2RvRCxFQUFRLEVBQ1JsYSxFQUFTODhCLEVBQVVVLE9BQU94OUIsTUFFM0IsTUFBZ0JBLEVBQVJrYSxFQUFpQkEsSUFDeEI0aUIsRUFBVVUsT0FBUXRqQixHQUFRdWpCLElBQUtGLEVBS2hDLE9BRkE3aUIsR0FBU3FCLFdBQVlsYyxHQUFRaTlCLEVBQVdTLEVBQVM1aEIsSUFFbEMsRUFBVjRoQixHQUFldjlCLEVBQ1oyYixHQUVQakIsRUFBUy9XLFlBQWE5RCxHQUFRaTlCLEtBQ3ZCLElBR1RBLEVBQVlwaUIsRUFBU2paLFNBQ3BCNUIsS0FBTUEsRUFDTmdtQixNQUFPMW9CLEVBQU9vRixVQUFZMDZCLEdBQzFCUyxLQUFNdmdDLEVBQU9vRixRQUFRLEdBQVFvN0Isa0JBQXFCbjdCLEdBQ2xEbzdCLG1CQUFvQlgsRUFDcEIxSCxnQkFBaUIveUIsRUFDakI2NkIsVUFBV3JCLElBQVNhLEtBQ3BCUyxTQUFVOTZCLEVBQVE4NkIsU0FDbEJFLFVBQ0FmLFlBQWEsU0FBVS9kLEVBQU10YyxHQUM1QixHQUFJbzZCLEdBQVFyL0IsRUFBTzBnQyxNQUFPaCtCLEVBQU1pOUIsRUFBVVksS0FBTWhmLEVBQU10YyxFQUNwRDA2QixFQUFVWSxLQUFLQyxjQUFlamYsSUFBVW9lLEVBQVVZLEtBQUtJLE9BRXpELE9BREFoQixHQUFVVSxPQUFPNS9CLEtBQU00K0IsR0FDaEJBLEdBRVI3YyxLQUFNLFNBQVVvZSxHQUNmLEdBQUk3akIsR0FBUSxFQUdYbGEsRUFBUys5QixFQUFVakIsRUFBVVUsT0FBT3g5QixPQUFTLENBQzlDLElBQUtrOUIsRUFDSixNQUFPcDlCLEtBR1IsS0FEQW85QixHQUFVLEVBQ01sOUIsRUFBUmthLEVBQWlCQSxJQUN4QjRpQixFQUFVVSxPQUFRdGpCLEdBQVF1akIsSUFBSyxFQVVoQyxPQUxLTSxHQUNKcmpCLEVBQVMvVyxZQUFhOUQsR0FBUWk5QixFQUFXaUIsSUFFekNyakIsRUFBU2lmLFdBQVk5NUIsR0FBUWk5QixFQUFXaUIsSUFFbENqK0IsUUFHVCtsQixFQUFRaVgsRUFBVWpYLEtBSW5CLEtBRkFtWSxHQUFZblksRUFBT2lYLEVBQVVZLEtBQUtDLGVBRWxCMzlCLEVBQVJrYSxFQUFpQkEsSUFFeEIsR0FEQXhILEVBQVMycEIsR0FBcUJuaUIsR0FBUW5aLEtBQU0rN0IsRUFBV2o5QixFQUFNZ21CLEVBQU9pWCxFQUFVWSxNQUU3RSxNQUFPaHJCLEVBbUJULE9BZkF2VixHQUFPZ0YsSUFBSzBqQixFQUFPNFcsR0FBYUssR0FFM0IzL0IsRUFBT3NELFdBQVlxOEIsRUFBVVksS0FBS3pxQixRQUN0QzZwQixFQUFVWSxLQUFLenFCLE1BQU1sUyxLQUFNbEIsRUFBTWk5QixHQUdsQzMvQixFQUFPNGlCLEdBQUdrZSxNQUNUOWdDLEVBQU9vRixPQUFRNDZCLEdBQ2R0OUIsS0FBTUEsRUFDTnErQixLQUFNcEIsRUFDTnpkLE1BQU95ZCxFQUFVWSxLQUFLcmUsU0FLakJ5ZCxFQUFVMWhCLFNBQVUwaEIsRUFBVVksS0FBS3RpQixVQUN4QzFaLEtBQU1vN0IsRUFBVVksS0FBS2g4QixLQUFNbzdCLEVBQVVZLEtBQUt2SCxVQUMxQ3hiLEtBQU1taUIsRUFBVVksS0FBSy9pQixNQUNyQkYsT0FBUXFpQixFQUFVWSxLQUFLampCLFFBRzFCLFFBQVN1akIsSUFBWW5ZLEVBQU84WCxHQUMzQixHQUFJempCLEdBQU96WCxFQUFNcTdCLEVBQVFuM0IsRUFBTzZZLENBR2hDLEtBQU10RixJQUFTMkwsR0FlZCxHQWRBcGpCLEVBQU90RixFQUFPb0osVUFBVzJULEdBQ3pCNGpCLEVBQVNILEVBQWVsN0IsR0FDeEJrRSxFQUFRa2YsRUFBTzNMLEdBQ1YvYyxFQUFPNkYsUUFBUzJELEtBQ3BCbTNCLEVBQVNuM0IsRUFBTyxHQUNoQkEsRUFBUWtmLEVBQU8zTCxHQUFVdlQsRUFBTyxJQUc1QnVULElBQVV6WCxJQUNkb2pCLEVBQU9wakIsR0FBU2tFLFFBQ1RrZixHQUFPM0wsSUFHZnNGLEVBQVFyaUIsRUFBT3F6QixTQUFVL3RCLEdBQ3BCK2MsR0FBUyxVQUFZQSxHQUFRLENBQ2pDN1ksRUFBUTZZLEVBQU1tVCxPQUFRaHNCLFNBQ2ZrZixHQUFPcGpCLEVBSWQsS0FBTXlYLElBQVN2VCxHQUNOdVQsSUFBUzJMLEtBQ2hCQSxFQUFPM0wsR0FBVXZULEVBQU91VCxHQUN4QnlqQixFQUFlempCLEdBQVU0akIsT0FJM0JILEdBQWVsN0IsR0FBU3E3QixFQUszQjNnQyxFQUFPNi9CLFVBQVk3L0IsRUFBT29GLE9BQVF5NkIsSUFFakNtQixRQUFTLFNBQVV0WSxFQUFPdGtCLEdBQ3BCcEUsRUFBT3NELFdBQVlvbEIsSUFDdkJ0a0IsRUFBV3NrQixFQUNYQSxHQUFVLE1BRVZBLEVBQVFBLEVBQU1yZCxNQUFNLElBR3JCLElBQUlrVyxHQUNIeEUsRUFBUSxFQUNSbGEsRUFBUzZsQixFQUFNN2xCLE1BRWhCLE1BQWdCQSxFQUFSa2EsRUFBaUJBLElBQ3hCd0UsRUFBT21ILEVBQU8zTCxHQUNkcWlCLEdBQVU3ZCxHQUFTNmQsR0FBVTdkLE9BQzdCNmQsR0FBVTdkLEdBQU8xTixRQUFTelAsSUFJNUI2OEIsVUFBVyxTQUFVNzhCLEVBQVVpcUIsR0FDekJBLEVBQ0o2USxHQUFvQnJyQixRQUFTelAsR0FFN0I4NkIsR0FBb0J6K0IsS0FBTTJELEtBSzdCLFNBQVMrNkIsSUFBa0J6OEIsRUFBTWdtQixFQUFPNlgsR0FFdkMsR0FBSWhmLEdBQU0vWCxFQUFPNHBCLEVBQVFpTSxFQUFPaGQsRUFBTzZlLEVBQ3RDSCxFQUFPcCtCLEtBQ1Bnb0IsS0FDQTNmLEVBQVF0SSxFQUFLc0ksTUFDYmdvQixFQUFTdHdCLEVBQUtRLFVBQVl3dkIsR0FBVWh3QixHQUNwQ3krQixFQUFXeGdCLEVBQVU5YyxJQUFLbkIsRUFBTSxTQUczQjY5QixHQUFLcmUsUUFDVkcsRUFBUXJpQixFQUFPc2lCLFlBQWE1ZixFQUFNLE1BQ1gsTUFBbEIyZixFQUFNK2UsV0FDVi9lLEVBQU0rZSxTQUFXLEVBQ2pCRixFQUFVN2UsRUFBTTdLLE1BQU1rRixLQUN0QjJGLEVBQU03SyxNQUFNa0YsS0FBTyxXQUNaMkYsRUFBTStlLFVBQ1hGLE1BSUg3ZSxFQUFNK2UsV0FFTkwsRUFBS3pqQixPQUFPLFdBR1h5akIsRUFBS3pqQixPQUFPLFdBQ1grRSxFQUFNK2UsV0FDQXBoQyxFQUFPa2lCLE1BQU94ZixFQUFNLE1BQU9HLFFBQ2hDd2YsRUFBTTdLLE1BQU1rRixZQU9PLElBQWxCaGEsRUFBS1EsV0FBb0IsVUFBWXdsQixJQUFTLFNBQVdBLE1BSzdENlgsRUFBS2MsVUFBYXIyQixFQUFNcTJCLFNBQVVyMkIsRUFBTXMyQixVQUFXdDJCLEVBQU11MkIsV0FJbEIsV0FBbEN2aEMsRUFBTzR5QixJQUFLbHdCLEVBQU0sWUFDVyxTQUFoQzFDLEVBQU80eUIsSUFBS2x3QixFQUFNLFdBRW5Cc0ksRUFBTWluQixRQUFVLGlCQUlic08sRUFBS2MsV0FDVHIyQixFQUFNcTJCLFNBQVcsU0FDakJOLEVBQUt6akIsT0FBTyxXQUNYdFMsRUFBTXEyQixTQUFXZCxFQUFLYyxTQUFVLEdBQ2hDcjJCLEVBQU1zMkIsVUFBWWYsRUFBS2MsU0FBVSxHQUNqQ3IyQixFQUFNdTJCLFVBQVloQixFQUFLYyxTQUFVLEtBTW5DLEtBQU05ZixJQUFRbUgsR0FFYixHQURBbGYsRUFBUWtmLEVBQU9uSCxHQUNWd2QsR0FBU2o4QixLQUFNMEcsR0FBVSxDQUc3QixTQUZPa2YsR0FBT25ILEdBQ2Q2UixFQUFTQSxHQUFvQixXQUFWNXBCLEVBQ2RBLEtBQVl3cEIsRUFBUyxPQUFTLFFBQVcsQ0FHN0MsR0FBZSxTQUFWeHBCLElBQW9CMjNCLEdBQVlBLEVBQVU1ZixLQUFXaGlCLFVBR3pELFFBRkF5ekIsSUFBUyxFQUtYckksRUFBTXBKLEdBQVM0ZixHQUFZQSxFQUFVNWYsSUFBVXZoQixFQUFPZ0wsTUFBT3RJLEVBQU02ZSxHQUlyRSxJQUFNdmhCLEVBQU9xSCxjQUFlc2pCLEdBQVMsQ0FDL0J3VyxFQUNDLFVBQVlBLEtBQ2hCbk8sRUFBU21PLEVBQVNuTyxRQUduQm1PLEVBQVd4Z0IsRUFBVXJXLE9BQVE1SCxFQUFNLGFBSS9CMHdCLElBQ0orTixFQUFTbk8sUUFBVUEsR0FFZkEsRUFDSmh6QixFQUFRMEMsR0FBT3F3QixPQUVmZ08sRUFBS3g4QixLQUFLLFdBQ1R2RSxFQUFRMEMsR0FBT3l3QixTQUdqQjROLEVBQUt4OEIsS0FBSyxXQUNULEdBQUlnZCxFQUVKWixHQUFVNVksT0FBUXJGLEVBQU0sU0FDeEIsS0FBTTZlLElBQVFvSixHQUNiM3FCLEVBQU9nTCxNQUFPdEksRUFBTTZlLEVBQU1vSixFQUFNcEosS0FHbEMsS0FBTUEsSUFBUW9KLEdBQ2IwVSxFQUFRQyxHQUFhdE0sRUFBU21PLEVBQVU1ZixHQUFTLEVBQUdBLEVBQU13ZixHQUVsRHhmLElBQVE0ZixLQUNmQSxFQUFVNWYsR0FBUzhkLEVBQU12cEIsTUFDcEJrZCxJQUNKcU0sRUFBTXA2QixJQUFNbzZCLEVBQU12cEIsTUFDbEJ1cEIsRUFBTXZwQixNQUFpQixVQUFUeUwsR0FBNkIsV0FBVEEsRUFBb0IsRUFBSSxLQU8vRCxRQUFTbWYsSUFBT2grQixFQUFNMkMsRUFBU2tjLEVBQU10YyxFQUFLMDdCLEdBQ3pDLE1BQU8sSUFBSUQsSUFBTXArQixVQUFVZixLQUFNbUIsRUFBTTJDLEVBQVNrYyxFQUFNdGMsRUFBSzA3QixHQUU1RDNnQyxFQUFPMGdDLE1BQVFBLEdBRWZBLEdBQU1wK0IsV0FDTEUsWUFBYWsrQixHQUNibi9CLEtBQU0sU0FBVW1CLEVBQU0yQyxFQUFTa2MsRUFBTXRjLEVBQUswN0IsRUFBUXBCLEdBQ2pENThCLEtBQUtELEtBQU9BLEVBQ1pDLEtBQUs0ZSxLQUFPQSxFQUNaNWUsS0FBS2crQixPQUFTQSxHQUFVLFFBQ3hCaCtCLEtBQUswQyxRQUFVQSxFQUNmMUMsS0FBS21ULE1BQVFuVCxLQUFLaUksSUFBTWpJLEtBQUswTyxNQUM3QjFPLEtBQUtzQyxJQUFNQSxFQUNYdEMsS0FBSzQ4QixLQUFPQSxJQUFVdi9CLEVBQU93ekIsVUFBV2pTLEdBQVMsR0FBSyxPQUV2RGxRLElBQUssV0FDSixHQUFJZ1IsR0FBUXFlLEdBQU0xYixVQUFXcmlCLEtBQUs0ZSxLQUVsQyxPQUFPYyxJQUFTQSxFQUFNeGUsSUFDckJ3ZSxFQUFNeGUsSUFBS2xCLE1BQ1grOUIsR0FBTTFiLFVBQVVnRCxTQUFTbmtCLElBQUtsQixPQUVoQzI5QixJQUFLLFNBQVVGLEdBQ2QsR0FBSW9CLEdBQ0huZixFQUFRcWUsR0FBTTFiLFVBQVdyaUIsS0FBSzRlLEtBb0IvQixPQWpCQzVlLE1BQUtrcEIsSUFBTTJWLEVBRFA3K0IsS0FBSzBDLFFBQVE4NkIsU0FDRW5nQyxFQUFPMmdDLE9BQVFoK0IsS0FBS2crQixRQUN0Q1AsRUFBU3o5QixLQUFLMEMsUUFBUTg2QixTQUFXQyxFQUFTLEVBQUcsRUFBR3o5QixLQUFLMEMsUUFBUTg2QixVQUczQ0MsRUFFcEJ6OUIsS0FBS2lJLEtBQVFqSSxLQUFLc0MsSUFBTXRDLEtBQUttVCxPQUFVMHJCLEVBQVE3K0IsS0FBS21ULE1BRS9DblQsS0FBSzBDLFFBQVFvOEIsTUFDakI5K0IsS0FBSzBDLFFBQVFvOEIsS0FBSzc5QixLQUFNakIsS0FBS0QsS0FBTUMsS0FBS2lJLElBQUtqSSxNQUd6QzBmLEdBQVNBLEVBQU1mLElBQ25CZSxFQUFNZixJQUFLM2UsTUFFWCs5QixHQUFNMWIsVUFBVWdELFNBQVMxRyxJQUFLM2UsTUFFeEJBLE9BSVQrOUIsR0FBTXArQixVQUFVZixLQUFLZSxVQUFZbytCLEdBQU1wK0IsVUFFdkNvK0IsR0FBTTFiLFdBQ0xnRCxVQUNDbmtCLElBQUssU0FBVXc3QixHQUNkLEdBQUk5cEIsRUFFSixPQUFpQyxPQUE1QjhwQixFQUFNMzhCLEtBQU0yOEIsRUFBTTlkLE9BQ3BCOGQsRUFBTTM4QixLQUFLc0ksT0FBMkMsTUFBbENxMEIsRUFBTTM4QixLQUFLc0ksTUFBT3EwQixFQUFNOWQsT0FRL0NoTSxFQUFTdlYsRUFBTzR5QixJQUFLeU0sRUFBTTM4QixLQUFNMjhCLEVBQU05ZCxLQUFNLElBRXJDaE0sR0FBcUIsU0FBWEEsRUFBd0JBLEVBQUosR0FUOUI4cEIsRUFBTTM4QixLQUFNMjhCLEVBQU05ZCxPQVczQkQsSUFBSyxTQUFVK2QsR0FHVHIvQixFQUFPNGlCLEdBQUc2ZSxLQUFNcEMsRUFBTTlkLE1BQzFCdmhCLEVBQU80aUIsR0FBRzZlLEtBQU1wQyxFQUFNOWQsTUFBUThkLEdBQ25CQSxFQUFNMzhCLEtBQUtzSSxRQUFnRSxNQUFyRHEwQixFQUFNMzhCLEtBQUtzSSxNQUFPaEwsRUFBT2cwQixTQUFVcUwsRUFBTTlkLFFBQW9CdmhCLEVBQU9xekIsU0FBVWdNLEVBQU05ZCxPQUNySHZoQixFQUFPZ0wsTUFBT3EwQixFQUFNMzhCLEtBQU0yOEIsRUFBTTlkLEtBQU04ZCxFQUFNejBCLElBQU15MEIsRUFBTUUsTUFFeERGLEVBQU0zOEIsS0FBTTI4QixFQUFNOWQsTUFBUzhkLEVBQU16MEIsT0FTckM4MUIsR0FBTTFiLFVBQVV5RSxVQUFZaVgsR0FBTTFiLFVBQVVxRSxZQUMzQy9ILElBQUssU0FBVStkLEdBQ1RBLEVBQU0zOEIsS0FBS1EsVUFBWW04QixFQUFNMzhCLEtBQUtlLGFBQ3RDNDdCLEVBQU0zOEIsS0FBTTI4QixFQUFNOWQsTUFBUzhkLEVBQU16MEIsT0FLcEM1SyxFQUFPbUUsTUFBTyxTQUFVLE9BQVEsUUFBVSxTQUFVVSxFQUFHUyxHQUN0RCxHQUFJbzhCLEdBQVExaEMsRUFBT3NCLEdBQUlnRSxFQUN2QnRGLEdBQU9zQixHQUFJZ0UsR0FBUyxTQUFVcThCLEVBQU9oQixFQUFRdjhCLEdBQzVDLE1BQWdCLE9BQVR1OUIsR0FBa0MsaUJBQVZBLEdBQzlCRCxFQUFNbDlCLE1BQU83QixLQUFNOEIsV0FDbkI5QixLQUFLaS9CLFFBQVNDLEdBQU92OEIsR0FBTSxHQUFRcThCLEVBQU9oQixFQUFRdjhCLE1BSXJEcEUsRUFBT3NCLEdBQUc4RCxRQUNUMDhCLE9BQVEsU0FBVUgsRUFBT0ksRUFBSXBCLEVBQVF2OEIsR0FHcEMsTUFBT3pCLE1BQUsrUCxPQUFRZ2dCLElBQVdFLElBQUssVUFBVyxHQUFJRyxPQUdqRDl0QixNQUFNMjhCLFNBQVV0TyxRQUFTeU8sR0FBTUosRUFBT2hCLEVBQVF2OEIsSUFFakR3OUIsUUFBUyxTQUFVcmdCLEVBQU1vZ0IsRUFBT2hCLEVBQVF2OEIsR0FDdkMsR0FBSW9ULEdBQVF4WCxFQUFPcUgsY0FBZWthLEdBQ2pDeWdCLEVBQVNoaUMsRUFBTzJoQyxNQUFPQSxFQUFPaEIsRUFBUXY4QixHQUN0QzY5QixFQUFjLFdBRWIsR0FBSWxCLEdBQU9sQixHQUFXbDlCLEtBQU0zQyxFQUFPb0YsVUFBWW1jLEdBQVF5Z0IsSUFHbER4cUIsR0FBU21KLEVBQVU5YyxJQUFLbEIsS0FBTSxZQUNsQ28rQixFQUFLdmUsTUFBTSxHQUtkLE9BRkN5ZixHQUFZQyxPQUFTRCxFQUVmenFCLEdBQVN3cUIsRUFBTzlmLFNBQVUsRUFDaEN2ZixLQUFLd0IsS0FBTTg5QixHQUNYdC9CLEtBQUt1ZixNQUFPOGYsRUFBTzlmLE1BQU8rZixJQUU1QnpmLEtBQU0sU0FBVTViLEVBQU1vYyxFQUFZNGQsR0FDakMsR0FBSXVCLEdBQVksU0FBVTlmLEdBQ3pCLEdBQUlHLEdBQU9ILEVBQU1HLFdBQ1ZILEdBQU1HLEtBQ2JBLEVBQU1vZSxHQVlQLE9BVHFCLGdCQUFUaDZCLEtBQ1hnNkIsRUFBVTVkLEVBQ1ZBLEVBQWFwYyxFQUNiQSxFQUFPckgsV0FFSHlqQixHQUFjcGMsS0FBUyxHQUMzQmpFLEtBQUt1ZixNQUFPdGIsR0FBUSxTQUdkakUsS0FBS3dCLEtBQUssV0FDaEIsR0FBSWdlLElBQVUsRUFDYnBGLEVBQWdCLE1BQVJuVyxHQUFnQkEsRUFBTyxhQUMvQnc3QixFQUFTcGlDLEVBQU9vaUMsT0FDaEIzNkIsRUFBT2taLEVBQVU5YyxJQUFLbEIsS0FFdkIsSUFBS29hLEVBQ0N0VixFQUFNc1YsSUFBV3RWLEVBQU1zVixHQUFReUYsTUFDbkMyZixFQUFXMTZCLEVBQU1zVixRQUdsQixLQUFNQSxJQUFTdFYsR0FDVEEsRUFBTXNWLElBQVd0VixFQUFNc1YsR0FBUXlGLE1BQVF5YyxHQUFLNzdCLEtBQU0yWixJQUN0RG9sQixFQUFXMTZCLEVBQU1zVixHQUtwQixLQUFNQSxFQUFRcWxCLEVBQU92L0IsT0FBUWthLEtBQ3ZCcWxCLEVBQVFybEIsR0FBUXJhLE9BQVNDLE1BQWlCLE1BQVJpRSxHQUFnQnc3QixFQUFRcmxCLEdBQVFtRixRQUFVdGIsSUFDaEZ3N0IsRUFBUXJsQixHQUFRZ2tCLEtBQUt2ZSxLQUFNb2UsR0FDM0J6ZSxHQUFVLEVBQ1ZpZ0IsRUFBT2o5QixPQUFRNFgsRUFBTyxLQU9uQm9GLElBQVl5ZSxJQUNoQjVnQyxFQUFPbWlCLFFBQVN4ZixLQUFNaUUsTUFJekJzN0IsT0FBUSxTQUFVdDdCLEdBSWpCLE1BSEtBLE1BQVMsSUFDYkEsRUFBT0EsR0FBUSxNQUVUakUsS0FBS3dCLEtBQUssV0FDaEIsR0FBSTRZLEdBQ0h0VixFQUFPa1osRUFBVTljLElBQUtsQixNQUN0QnVmLEVBQVF6YSxFQUFNYixFQUFPLFNBQ3JCeWIsRUFBUTVhLEVBQU1iLEVBQU8sY0FDckJ3N0IsRUFBU3BpQyxFQUFPb2lDLE9BQ2hCdi9CLEVBQVNxZixFQUFRQSxFQUFNcmYsT0FBUyxDQWFqQyxLQVZBNEUsRUFBS3k2QixRQUFTLEVBR2RsaUMsRUFBT2tpQixNQUFPdmYsS0FBTWlFLE1BRWZ5YixHQUFTQSxFQUFNRyxNQUNuQkgsRUFBTUcsS0FBSzVlLEtBQU1qQixNQUFNLEdBSWxCb2EsRUFBUXFsQixFQUFPdi9CLE9BQVFrYSxLQUN2QnFsQixFQUFRcmxCLEdBQVFyYSxPQUFTQyxNQUFReS9CLEVBQVFybEIsR0FBUW1GLFFBQVV0YixJQUMvRHc3QixFQUFRcmxCLEdBQVFna0IsS0FBS3ZlLE1BQU0sR0FDM0I0ZixFQUFPajlCLE9BQVE0WCxFQUFPLEdBS3hCLEtBQU1BLEVBQVEsRUFBV2xhLEVBQVJrYSxFQUFnQkEsSUFDM0JtRixFQUFPbkYsSUFBV21GLEVBQU9uRixHQUFRbWxCLFFBQ3JDaGdCLEVBQU9uRixHQUFRbWxCLE9BQU90K0IsS0FBTWpCLFlBS3ZCOEUsR0FBS3k2QixXQU1mLFNBQVNMLElBQU9qN0IsRUFBTXk3QixHQUNyQixHQUFJdlosR0FDSDdYLEdBQVVxeEIsT0FBUTE3QixHQUNsQi9CLEVBQUksQ0FLTCxLQURBdzlCLEVBQWVBLEVBQWMsRUFBSSxFQUN0QixFQUFKeDlCLEVBQVFBLEdBQUssRUFBSXc5QixFQUN2QnZaLEVBQVF1SixHQUFXeHRCLEdBQ25Cb00sRUFBTyxTQUFXNlgsR0FBVTdYLEVBQU8sVUFBWTZYLEdBQVVsaUIsQ0FPMUQsT0FKS3k3QixLQUNKcHhCLEVBQU1xaUIsUUFBVXJpQixFQUFNdVAsTUFBUTVaLEdBR3hCcUssRUFJUmpSLEVBQU9tRSxNQUNObytCLFVBQVdWLEdBQU0sUUFDakJXLFFBQVNYLEdBQU0sUUFDZlksWUFBYVosR0FBTSxVQUNuQmEsUUFBVXBQLFFBQVMsUUFDbkJxUCxTQUFXclAsUUFBUyxRQUNwQnNQLFlBQWN0UCxRQUFTLFdBQ3JCLFNBQVVodUIsRUFBTW9qQixHQUNsQjFvQixFQUFPc0IsR0FBSWdFLEdBQVMsU0FBVXE4QixFQUFPaEIsRUFBUXY4QixHQUM1QyxNQUFPekIsTUFBS2kvQixRQUFTbFosRUFBT2laLEVBQU9oQixFQUFRdjhCLE1BSTdDcEUsRUFBTzJoQyxNQUFRLFNBQVVBLEVBQU9oQixFQUFRci9CLEdBQ3ZDLEdBQUkyZCxHQUFNMGlCLEdBQTBCLGdCQUFWQSxHQUFxQjNoQyxFQUFPb0YsVUFBWXU4QixJQUNqRTNJLFNBQVUxM0IsSUFBT0EsR0FBTXEvQixHQUN0QjNnQyxFQUFPc0QsV0FBWXErQixJQUFXQSxFQUMvQnhCLFNBQVV3QixFQUNWaEIsT0FBUXIvQixHQUFNcS9CLEdBQVVBLElBQVczZ0MsRUFBT3NELFdBQVlxOUIsSUFBWUEsRUF3Qm5FLE9BckJBMWhCLEdBQUlraEIsU0FBV25nQyxFQUFPNGlCLEdBQUdsYyxJQUFNLEVBQTRCLGdCQUFqQnVZLEdBQUlraEIsU0FBd0JsaEIsRUFBSWtoQixTQUN6RWxoQixFQUFJa2hCLFdBQVluZ0MsR0FBTzRpQixHQUFHQyxPQUFTN2lCLEVBQU80aUIsR0FBR0MsT0FBUTVELEVBQUlraEIsVUFBYW5nQyxFQUFPNGlCLEdBQUdDLE9BQU9tRixVQUd0RSxNQUFiL0ksRUFBSWlELE9BQWlCakQsRUFBSWlELFNBQVUsS0FDdkNqRCxFQUFJaUQsTUFBUSxNQUliakQsRUFBSWxVLElBQU1rVSxFQUFJK1osU0FFZC9aLEVBQUkrWixTQUFXLFdBQ1RoNUIsRUFBT3NELFdBQVkyYixFQUFJbFUsTUFDM0JrVSxFQUFJbFUsSUFBSW5ILEtBQU1qQixNQUdWc2MsRUFBSWlELE9BQ1JsaUIsRUFBT21pQixRQUFTeGYsS0FBTXNjLEVBQUlpRCxRQUlyQmpELEdBR1JqZixFQUFPMmdDLFFBQ05rQyxPQUFRLFNBQVVDLEdBQ2pCLE1BQU9BLElBRVJDLE1BQU8sU0FBVUQsR0FDaEIsTUFBTyxHQUFNLzhCLEtBQUtpOUIsSUFBS0YsRUFBRS84QixLQUFLazlCLElBQU8sSUFJdkNqakMsRUFBT29pQyxVQUNQcGlDLEVBQU80aUIsR0FBSzhkLEdBQU1wK0IsVUFBVWYsS0FDNUJ2QixFQUFPNGlCLEdBQUdvZCxLQUFPLFdBQ2hCLEdBQUljLEdBQ0hzQixFQUFTcGlDLEVBQU9vaUMsT0FDaEJ2OUIsRUFBSSxDQUlMLEtBRkFnNkIsR0FBUTcrQixFQUFPNEssTUFFSHczQixFQUFPdi9CLE9BQVhnQyxFQUFtQkEsSUFDMUJpOEIsRUFBUXNCLEVBQVF2OUIsR0FFVmk4QixLQUFXc0IsRUFBUXY5QixLQUFRaThCLEdBQ2hDc0IsRUFBT2o5QixPQUFRTixJQUFLLEVBSWhCdTlCLEdBQU92L0IsUUFDWjdDLEVBQU80aUIsR0FBR0osT0FFWHFjLEdBQVF0L0IsV0FHVFMsRUFBTzRpQixHQUFHa2UsTUFBUSxTQUFVQSxHQUN0QkEsS0FBVzlnQyxFQUFPb2lDLE9BQU8zaEMsS0FBTXFnQyxJQUNuQzlnQyxFQUFPNGlCLEdBQUc5TSxTQUlaOVYsRUFBTzRpQixHQUFHc2dCLFNBQVcsR0FFckJsakMsRUFBTzRpQixHQUFHOU0sTUFBUSxXQUNYZ3BCLEtBQ0xBLEdBQVVxRSxZQUFhbmpDLEVBQU80aUIsR0FBR29kLEtBQU1oZ0MsRUFBTzRpQixHQUFHc2dCLFlBSW5EbGpDLEVBQU80aUIsR0FBR0osS0FBTyxXQUNoQjRnQixjQUFldEUsSUFDZkEsR0FBVSxNQUdYOStCLEVBQU80aUIsR0FBR0MsUUFDVHdnQixLQUFNLElBQ05DLEtBQU0sSUFFTnRiLFNBQVUsS0FJWGhvQixFQUFPNGlCLEdBQUc2ZSxRQUVMemhDLEVBQU84VCxNQUFROVQsRUFBTzhULEtBQUt3RSxVQUMvQnRZLEVBQU84VCxLQUFLd0UsUUFBUWlyQixTQUFXLFNBQVU3Z0MsR0FDeEMsTUFBTzFDLEdBQU9nSyxLQUFLaEssRUFBT29pQyxPQUFRLFNBQVU5Z0MsR0FDM0MsTUFBT29CLEtBQVNwQixFQUFHb0IsT0FDakJHLFNBR0w3QyxFQUFPc0IsR0FBR2tpQyxPQUFTLFNBQVVuK0IsR0FDNUIsR0FBS1osVUFBVTVCLE9BQ2QsTUFBT3dDLEtBQVk5RixVQUNsQm9ELEtBQ0FBLEtBQUt3QixLQUFLLFNBQVVVLEdBQ25CN0UsRUFBT3dqQyxPQUFPQyxVQUFXOWdDLEtBQU0wQyxFQUFTUixJQUkzQyxJQUFJaEYsR0FBUzZqQyxFQUNaaGhDLEVBQU9DLEtBQU0sR0FDYmdoQyxHQUFReHhCLElBQUssRUFBR3l4QixLQUFNLEdBQ3RCN3hCLEVBQU1yUCxHQUFRQSxFQUFLUyxhQUVwQixJQUFNNE8sRUFPTixNQUhBbFMsR0FBVWtTLEVBQUlqUyxnQkFHUkUsRUFBT21NLFNBQVV0TSxFQUFTNkMsVUFNcEJBLEdBQUttaEMsd0JBQTBCbmtDLElBQzFDaWtDLEVBQU1qaEMsRUFBS21oQyx5QkFFWkgsRUFBTUksR0FBVy94QixJQUVoQkksSUFBS3d4QixFQUFJeHhCLElBQU11eEIsRUFBSUssWUFBY2xrQyxFQUFRNnBCLFVBQ3pDa2EsS0FBTUQsRUFBSUMsS0FBT0YsRUFBSU0sWUFBY25rQyxFQUFReXBCLGFBWHBDcWEsR0FlVDNqQyxFQUFPd2pDLFFBRU5DLFVBQVcsU0FBVS9nQyxFQUFNMkMsRUFBU1IsR0FDbkMsR0FBSW8vQixHQUFhQyxFQUFTQyxFQUFXQyxFQUFRQyxFQUFXQyxFQUFZQyxFQUNuRXhTLEVBQVcveEIsRUFBTzR5QixJQUFLbHdCLEVBQU0sWUFDN0I4aEMsRUFBVXhrQyxFQUFRMEMsR0FDbEJnbUIsSUFHaUIsWUFBYnFKLElBQ0pydkIsRUFBS3NJLE1BQU0rbUIsU0FBVyxZQUd2QnNTLEVBQVlHLEVBQVFoQixTQUNwQlcsRUFBWW5rQyxFQUFPNHlCLElBQUtsd0IsRUFBTSxPQUM5QjRoQyxFQUFhdGtDLEVBQU80eUIsSUFBS2x3QixFQUFNLFFBQy9CNmhDLEdBQW1DLGFBQWJ4UyxHQUF3QyxVQUFiQSxLQUE0Qm9TLEVBQVlHLEdBQWF6akMsUUFBUSxRQUFVLEdBR25IMGpDLEdBQ0pOLEVBQWNPLEVBQVF6UyxXQUN0QnFTLEVBQVNILEVBQVk5eEIsSUFDckIreEIsRUFBVUQsRUFBWUwsT0FHdEJRLEVBQVNuOUIsV0FBWWs5QixJQUFlLEVBQ3BDRCxFQUFVajlCLFdBQVlxOUIsSUFBZ0IsR0FHbEN0a0MsRUFBT3NELFdBQVkrQixLQUN2QkEsRUFBVUEsRUFBUXpCLEtBQU1sQixFQUFNbUMsRUFBR3cvQixJQUdkLE1BQWZoL0IsRUFBUThNLE1BQ1p1VyxFQUFNdlcsSUFBUTlNLEVBQVE4TSxJQUFNa3lCLEVBQVVseUIsSUFBUWl5QixHQUUxQixNQUFoQi8rQixFQUFRdStCLE9BQ1psYixFQUFNa2IsS0FBU3YrQixFQUFRdStCLEtBQU9TLEVBQVVULEtBQVNNLEdBRzdDLFNBQVc3K0IsR0FDZkEsRUFBUW8vQixNQUFNN2dDLEtBQU1sQixFQUFNZ21CLEdBRzFCOGIsRUFBUTVSLElBQUtsSyxLQU1oQjFvQixFQUFPc0IsR0FBRzhELFFBRVQyc0IsU0FBVSxXQUNULEdBQU1wdkIsS0FBTSxHQUFaLENBSUEsR0FBSStoQyxHQUFjbEIsRUFDakI5Z0MsRUFBT0MsS0FBTSxHQUNiZ2lDLEdBQWlCeHlCLElBQUssRUFBR3l4QixLQUFNLEVBdUJoQyxPQXBCd0MsVUFBbkM1akMsRUFBTzR5QixJQUFLbHdCLEVBQU0sWUFFdEI4Z0MsRUFBUzlnQyxFQUFLbWhDLHlCQUlkYSxFQUFlL2hDLEtBQUsraEMsZUFHcEJsQixFQUFTN2dDLEtBQUs2Z0MsU0FDUnhqQyxFQUFPc0osU0FBVW83QixFQUFjLEdBQUssVUFDekNDLEVBQWVELEVBQWFsQixVQUk3Qm1CLEVBQWF4eUIsS0FBT25TLEVBQU80eUIsSUFBSzhSLEVBQWMsR0FBSyxrQkFBa0IsR0FDckVDLEVBQWFmLE1BQVE1akMsRUFBTzR5QixJQUFLOFIsRUFBYyxHQUFLLG1CQUFtQixLQUt2RXZ5QixJQUFLcXhCLEVBQU9yeEIsSUFBTXd5QixFQUFheHlCLElBQU1uUyxFQUFPNHlCLElBQUtsd0IsRUFBTSxhQUFhLEdBQ3BFa2hDLEtBQU1KLEVBQU9JLEtBQU9lLEVBQWFmLEtBQU81akMsRUFBTzR5QixJQUFLbHdCLEVBQU0sY0FBYyxNQUkxRWdpQyxhQUFjLFdBQ2IsTUFBTy9oQyxNQUFLcUMsSUFBSSxXQUNmLEdBQUkwL0IsR0FBZS9oQyxLQUFLK2hDLGNBQWdCN2tDLENBRXhDLE9BQVE2a0MsSUFBbUIxa0MsRUFBT3NKLFNBQVVvN0IsRUFBYyxTQUFzRCxXQUExQzFrQyxFQUFPNHlCLElBQUs4UixFQUFjLFlBQy9GQSxFQUFlQSxFQUFhQSxZQUc3QixPQUFPQSxJQUFnQjdrQyxPQU8xQkcsRUFBT21FLE1BQU9rbEIsV0FBWSxjQUFlSSxVQUFXLGVBQWdCLFNBQVVrUyxFQUFRcGEsR0FDckYsR0FBSXBQLEdBQU0sZ0JBQWtCb1AsQ0FFNUJ2aEIsR0FBT3NCLEdBQUlxNkIsR0FBVyxTQUFVM25CLEdBQy9CLE1BQU9oVSxHQUFPc0ssT0FBUTNILEtBQU0sU0FBVUQsRUFBTWk1QixFQUFRM25CLEdBQ25ELEdBQUkwdkIsR0FBTUksR0FBV3BoQyxFQUVyQixPQUFLc1IsS0FBUXpVLFVBQ0xta0MsRUFBTUEsRUFBS25pQixHQUFTN2UsRUFBTWk1QixJQUc3QitILEVBQ0pBLEVBQUlrQixTQUNGenlCLEVBQVk3UyxFQUFPMGtDLFlBQWJod0IsRUFDUDdCLEVBQU02QixFQUFNMVUsRUFBT3lrQyxhQUlwQnJoQyxFQUFNaTVCLEdBQVczbkIsRUFQbEIsWUFTRTJuQixFQUFRM25CLEVBQUt2UCxVQUFVNUIsT0FBUSxRQUlwQyxTQUFTaWhDLElBQVdwaEMsR0FDbkIsTUFBTzFDLEdBQU84RyxTQUFVcEUsR0FBU0EsRUFBeUIsSUFBbEJBLEVBQUtRLFVBQWtCUixFQUFLdVAsWUFHckVqUyxFQUFPbUUsTUFBUTBnQyxPQUFRLFNBQVVDLE1BQU8sU0FBVyxTQUFVeC9CLEVBQU1zQixHQUNsRTVHLEVBQU9tRSxNQUFRaXhCLFFBQVMsUUFBVTl2QixFQUFNb3JCLFFBQVM5cEIsRUFBTSxHQUFJLFFBQVV0QixHQUFRLFNBQVV5L0IsRUFBY0MsR0FFcEdobEMsRUFBT3NCLEdBQUkwakMsR0FBYSxTQUFVN1AsRUFBUTNyQixHQUN6QyxHQUFJZ0IsR0FBWS9GLFVBQVU1QixTQUFZa2lDLEdBQWtDLGlCQUFYNVAsSUFDNURqQixFQUFRNlEsSUFBa0I1UCxLQUFXLEdBQVEzckIsS0FBVSxFQUFPLFNBQVcsU0FFMUUsT0FBT3hKLEdBQU9zSyxPQUFRM0gsS0FBTSxTQUFVRCxFQUFNa0UsRUFBTTRDLEdBQ2pELEdBQUl1SSxFQUVKLE9BQUsvUixHQUFPOEcsU0FBVXBFLEdBSWRBLEVBQUs5QyxTQUFTRSxnQkFBaUIsU0FBV3dGLEdBSTNCLElBQWxCNUMsRUFBS1EsVUFDVDZPLEVBQU1yUCxFQUFLNUMsZ0JBSUppRyxLQUFLd2UsSUFDWDdoQixFQUFLd2QsS0FBTSxTQUFXNWEsR0FBUXlNLEVBQUssU0FBV3pNLEdBQzlDNUMsRUFBS3dkLEtBQU0sU0FBVzVhLEdBQVF5TSxFQUFLLFNBQVd6TSxHQUM5Q3lNLEVBQUssU0FBV3pNLEtBSVhrRSxJQUFVakssVUFFaEJTLEVBQU80eUIsSUFBS2x3QixFQUFNa0UsRUFBTXN0QixHQUd4QmwwQixFQUFPZ0wsTUFBT3RJLEVBQU1rRSxFQUFNNEMsRUFBTzBxQixJQUNoQ3R0QixFQUFNNEQsRUFBWTJxQixFQUFTNTFCLFVBQVdpTCxFQUFXLFdBUXZEeEssRUFBT3NCLEdBQUcyakMsS0FBTyxXQUNoQixNQUFPdGlDLE1BQUtFLFFBR2I3QyxFQUFPc0IsR0FBRzRqQyxRQUFVbGxDLEVBQU9zQixHQUFHeXFCLFFBR1AsZ0JBQVhvWixTQUF1QkEsUUFBb0MsZ0JBQW5CQSxRQUFPQyxRQUsxREQsT0FBT0MsUUFBVXBsQyxFQVNNLGtCQUFYcWxDLFNBQXlCQSxPQUFPQyxLQUMzQ0QsT0FBUSxZQUFjLFdBQWMsTUFBT3JsQyxLQU10QixnQkFBWFYsSUFBa0QsZ0JBQXBCQSxHQUFPTSxXQUNoRE4sRUFBT1UsT0FBU1YsRUFBT1ksRUFBSUYsS0FHeEJWIn0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnktdWkubWluLmpzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2pxdWVyeS11aS5taW4uanMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGU2Mzk2YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnktdWkubWluLmpzCkBAIC0wLDAgKzEsNyBAQAorLyohIGpRdWVyeSBVSSAtIHYxLjExLjQgLSAyMDE1LTAzLTE1CisqIGh0dHA6Ly9qcXVlcnl1aS5jb20KKyogSW5jbHVkZXM6IGNvcmUuanMsIGRhdGVwaWNrZXIuanMKKyogQ29weXJpZ2h0IDIwMTUgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yczsgTGljZW5zZWQgTUlUICovCisKKyhmdW5jdGlvbihlKXsiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImpxdWVyeSJdLGUpOmUoalF1ZXJ5KX0pKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxzKXt2YXIgYSxuLHIsbz10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImFyZWEiPT09bz8oYT10LnBhcmVudE5vZGUsbj1hLm5hbWUsdC5ocmVmJiZuJiYibWFwIj09PWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT8ocj1lKCJpbWdbdXNlbWFwPScjIituKyInXSIpWzBdLCEhciYmaShyKSk6ITEpOigvXihpbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkkLy50ZXN0KG8pPyF0LmRpc2FibGVkOiJhIj09PW8/dC5ocmVmfHxzOnMpJiZpKHQpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGUuZXhwci5maWx0ZXJzLnZpc2libGUodCkmJiFlKHQpLnBhcmVudHMoKS5hZGRCYWNrKCkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuImhpZGRlbiI9PT1lLmNzcyh0aGlzLCJ2aXNpYmlsaXR5Iil9KS5sZW5ndGh9ZnVuY3Rpb24gcyhlKXtmb3IodmFyIHQsaTtlLmxlbmd0aCYmZVswXSE9PWRvY3VtZW50Oyl7aWYodD1lLmNzcygicG9zaXRpb24iKSwoImFic29sdXRlIj09PXR8fCJyZWxhdGl2ZSI9PT10fHwiZml4ZWQiPT09dCkmJihpPXBhcnNlSW50KGUuY3NzKCJ6SW5kZXgiKSwxMCksIWlzTmFOKGkpJiYwIT09aSkpcmV0dXJuIGk7ZT1lLnBhcmVudCgpfXJldHVybiAwfWZ1bmN0aW9uIGEoKXt0aGlzLl9jdXJJbnN0PW51bGwsdGhpcy5fa2V5RXZlbnQ9ITEsdGhpcy5fZGlzYWJsZWRJbnB1dHM9W10sdGhpcy5fZGF0ZXBpY2tlclNob3dpbmc9ITEsdGhpcy5faW5EaWFsb2c9ITEsdGhpcy5fbWFpbkRpdklkPSJ1aS1kYXRlcGlja2VyLWRpdiIsdGhpcy5faW5saW5lQ2xhc3M9InVpLWRhdGVwaWNrZXItaW5saW5lIix0aGlzLl9hcHBlbmRDbGFzcz0idWktZGF0ZXBpY2tlci1hcHBlbmQiLHRoaXMuX3RyaWdnZXJDbGFzcz0idWktZGF0ZXBpY2tlci10cmlnZ2VyIix0aGlzLl9kaWFsb2dDbGFzcz0idWktZGF0ZXBpY2tlci1kaWFsb2ciLHRoaXMuX2Rpc2FibGVDbGFzcz0idWktZGF0ZXBpY2tlci1kaXNhYmxlZCIsdGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3M9InVpLWRhdGVwaWNrZXItdW5zZWxlY3RhYmxlIix0aGlzLl9jdXJyZW50Q2xhc3M9InVpLWRhdGVwaWNrZXItY3VycmVudC1kYXkiLHRoaXMuX2RheU92ZXJDbGFzcz0idWktZGF0ZXBpY2tlci1kYXlzLWNlbGwtb3ZlciIsdGhpcy5yZWdpb25hbD1bXSx0aGlzLnJlZ2lvbmFsWyIiXT17Y2xvc2VUZXh0OiJEb25lIixwcmV2VGV4dDoiUHJldiIsbmV4dFRleHQ6Ik5leHQiLGN1cnJlbnRUZXh0OiJUb2RheSIsbW9udGhOYW1lczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sd2Vla0hlYWRlcjoiV2siLGRhdGVGb3JtYXQ6Im1tL2RkL3l5IixmaXJzdERheTowLGlzUlRMOiExLHNob3dNb250aEFmdGVyWWVhcjohMSx5ZWFyU3VmZml4OiIifSx0aGlzLl9kZWZhdWx0cz17c2hvd09uOiJmb2N1cyIsc2hvd0FuaW06ImZhZGVJbiIsc2hvd09wdGlvbnM6e30sZGVmYXVsdERhdGU6bnVsbCxhcHBlbmRUZXh0OiIiLGJ1dHRvblRleHQ6Ii4uLiIsYnV0dG9uSW1hZ2U6IiIsYnV0dG9uSW1hZ2VPbmx5OiExLGhpZGVJZk5vUHJldk5leHQ6ITEsbmF2aWdhdGlvbkFzRGF0ZUZvcm1hdDohMSxnb3RvQ3VycmVudDohMSxjaGFuZ2VNb250aDohMSxjaGFuZ2VZZWFyOiExLHllYXJSYW5nZToiYy0xMDpjKzEwIixzaG93T3RoZXJNb250aHM6ITEsc2VsZWN0T3RoZXJNb250aHM6ITEsc2hvd1dlZWs6ITEsY2FsY3VsYXRlV2Vlazp0aGlzLmlzbzg2MDFXZWVrLHNob3J0WWVhckN1dG9mZjoiKzEwIixtaW5EYXRlOm51bGwsbWF4RGF0ZTpudWxsLGR1cmF0aW9uOiJmYXN0IixiZWZvcmVTaG93RGF5Om51bGwsYmVmb3JlU2hvdzpudWxsLG9uU2VsZWN0Om51bGwsb25DaGFuZ2VNb250aFllYXI6bnVsbCxvbkNsb3NlOm51bGwsbnVtYmVyT2ZNb250aHM6MSxzaG93Q3VycmVudEF0UG9zOjAsc3RlcE1vbnRoczoxLHN0ZXBCaWdNb250aHM6MTIsYWx0RmllbGQ6IiIsYWx0Rm9ybWF0OiIiLGNvbnN0cmFpbklucHV0OiEwLHNob3dCdXR0b25QYW5lbDohMSxhdXRvU2l6ZTohMSxkaXNhYmxlZDohMX0sZS5leHRlbmQodGhpcy5fZGVmYXVsdHMsdGhpcy5yZWdpb25hbFsiIl0pLHRoaXMucmVnaW9uYWwuZW49ZS5leHRlbmQoITAse30sdGhpcy5yZWdpb25hbFsiIl0pLHRoaXMucmVnaW9uYWxbImVuLVVTIl09ZS5leHRlbmQoITAse30sdGhpcy5yZWdpb25hbC5lbiksdGhpcy5kcERpdj1uKGUoIjxkaXYgaWQ9JyIrdGhpcy5fbWFpbkRpdklkKyInIGNsYXNzPSd1aS1kYXRlcGlja2VyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbCc+PC9kaXY+IikpfWZ1bmN0aW9uIG4odCl7dmFyIGk9ImJ1dHRvbiwgLnVpLWRhdGVwaWNrZXItcHJldiwgLnVpLWRhdGVwaWNrZXItbmV4dCwgLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdGQgYSI7cmV0dXJuIHQuZGVsZWdhdGUoaSwibW91c2VvdXQiLGZ1bmN0aW9uKCl7ZSh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItcHJldiIpJiZlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1kYXRlcGlja2VyLXByZXYtaG92ZXIiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItbmV4dCIpJiZlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1kYXRlcGlja2VyLW5leHQtaG92ZXIiKX0pLmRlbGVnYXRlKGksIm1vdXNlb3ZlciIscil9ZnVuY3Rpb24gcigpe2UuZGF0ZXBpY2tlci5faXNEaXNhYmxlZERhdGVwaWNrZXIoaC5pbmxpbmU/aC5kcERpdi5wYXJlbnQoKVswXTpoLmlucHV0WzBdKXx8KGUodGhpcykucGFyZW50cygiLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIiKS5maW5kKCJhIikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIiksZSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtaG92ZXIiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItcHJldiIpJiZlKHRoaXMpLmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLXByZXYtaG92ZXIiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItbmV4dCIpJiZlKHRoaXMpLmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLW5leHQtaG92ZXIiKSl9ZnVuY3Rpb24gbyh0LGkpe2UuZXh0ZW5kKHQsaSk7Zm9yKHZhciBzIGluIGkpbnVsbD09aVtzXSYmKHRbc109aVtzXSk7cmV0dXJuIHR9ZS51aT1lLnVpfHx7fSxlLmV4dGVuZChlLnVpLHt2ZXJzaW9uOiIxLjExLjQiLGtleUNvZGU6e0JBQ0tTUEFDRTo4LENPTU1BOjE4OCxERUxFVEU6NDYsRE9XTjo0MCxFTkQ6MzUsRU5URVI6MTMsRVNDQVBFOjI3LEhPTUU6MzYsTEVGVDozNyxQQUdFX0RPV046MzQsUEFHRV9VUDozMyxQRVJJT0Q6MTkwLFJJR0hUOjM5LFNQQUNFOjMyLFRBQjo5LFVQOjM4fX0pLGUuZm4uZXh0ZW5kKHtzY3JvbGxQYXJlbnQ6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5jc3MoInBvc2l0aW9uIikscz0iYWJzb2x1dGUiPT09aSxhPXQ/LyhhdXRvfHNjcm9sbHxoaWRkZW4pLzovKGF1dG98c2Nyb2xsKS8sbj10aGlzLnBhcmVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3JldHVybiBzJiYic3RhdGljIj09PXQuY3NzKCJwb3NpdGlvbiIpPyExOmEudGVzdCh0LmNzcygib3ZlcmZsb3ciKSt0LmNzcygib3ZlcmZsb3cteSIpK3QuY3NzKCJvdmVyZmxvdy14IikpfSkuZXEoMCk7cmV0dXJuImZpeGVkIiE9PWkmJm4ubGVuZ3RoP246ZSh0aGlzWzBdLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50KX0sdW5pcXVlSWQ6ZnVuY3Rpb24oKXt2YXIgZT0wO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0aGlzLmlkfHwodGhpcy5pZD0idWktaWQtIisgKytlKX0pfX0oKSxyZW1vdmVVbmlxdWVJZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXsvXnVpLWlkLVxkKyQvLnRlc3QodGhpcy5pZCkmJmUodGhpcykucmVtb3ZlQXR0cigiaWQiKX0pfX0pLGUuZXh0ZW5kKGUuZXhwclsiOiJdLHtkYXRhOmUuZXhwci5jcmVhdGVQc2V1ZG8/ZS5leHByLmNyZWF0ZVBzZXVkbyhmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuISFlLmRhdGEoaSx0KX19KTpmdW5jdGlvbih0LGkscyl7cmV0dXJuISFlLmRhdGEodCxzWzNdKX0sZm9jdXNhYmxlOmZ1bmN0aW9uKGkpe3JldHVybiB0KGksIWlzTmFOKGUuYXR0cihpLCJ0YWJpbmRleCIpKSl9LHRhYmJhYmxlOmZ1bmN0aW9uKGkpe3ZhciBzPWUuYXR0cihpLCJ0YWJpbmRleCIpLGE9aXNOYU4ocyk7cmV0dXJuKGF8fHM+PTApJiZ0KGksIWEpfX0pLGUoIjxhPiIpLm91dGVyV2lkdGgoMSkuanF1ZXJ5fHxlLmVhY2goWyJXaWR0aCIsIkhlaWdodCJdLGZ1bmN0aW9uKHQsaSl7ZnVuY3Rpb24gcyh0LGkscyxuKXtyZXR1cm4gZS5lYWNoKGEsZnVuY3Rpb24oKXtpLT1wYXJzZUZsb2F0KGUuY3NzKHQsInBhZGRpbmciK3RoaXMpKXx8MCxzJiYoaS09cGFyc2VGbG9hdChlLmNzcyh0LCJib3JkZXIiK3RoaXMrIldpZHRoIikpfHwwKSxuJiYoaS09cGFyc2VGbG9hdChlLmNzcyh0LCJtYXJnaW4iK3RoaXMpKXx8MCl9KSxpfXZhciBhPSJXaWR0aCI9PT1pP1siTGVmdCIsIlJpZ2h0Il06WyJUb3AiLCJCb3R0b20iXSxuPWkudG9Mb3dlckNhc2UoKSxyPXtpbm5lcldpZHRoOmUuZm4uaW5uZXJXaWR0aCxpbm5lckhlaWdodDplLmZuLmlubmVySGVpZ2h0LG91dGVyV2lkdGg6ZS5mbi5vdXRlcldpZHRoLG91dGVySGVpZ2h0OmUuZm4ub3V0ZXJIZWlnaHR9O2UuZm5bImlubmVyIitpXT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD9yWyJpbm5lciIraV0uY2FsbCh0aGlzKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmNzcyhuLHModGhpcyx0KSsicHgiKX0pfSxlLmZuWyJvdXRlciIraV09ZnVuY3Rpb24odCxhKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQ/clsib3V0ZXIiK2ldLmNhbGwodGhpcyx0KTp0aGlzLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmNzcyhuLHModGhpcyx0LCEwLGEpKyJweCIpfSl9fSksZS5mbi5hZGRCYWNrfHwoZS5mbi5hZGRCYWNrPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFkZChudWxsPT1lP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKGUpKX0pLGUoIjxhPiIpLmRhdGEoImEtYiIsImEiKS5yZW1vdmVEYXRhKCJhLWIiKS5kYXRhKCJhLWIiKSYmKGUuZm4ucmVtb3ZlRGF0YT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dC5jYWxsKHRoaXMsZS5jYW1lbENhc2UoaSkpOnQuY2FsbCh0aGlzKX19KGUuZm4ucmVtb3ZlRGF0YSkpLGUudWkuaWU9ISEvbXNpZSBbXHcuXSsvLmV4ZWMobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKSxlLmZuLmV4dGVuZCh7Zm9jdXM6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGkscyl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBpP3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe2UodCkuZm9jdXMoKSxzJiZzLmNhbGwodCl9LGkpfSk6dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fShlLmZuLmZvY3VzKSxkaXNhYmxlU2VsZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9Im9uc2VsZWN0c3RhcnQiaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik/InNlbGVjdHN0YXJ0IjoibW91c2Vkb3duIjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iaW5kKGUrIi51aS1kaXNhYmxlU2VsZWN0aW9uIixmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCl9KX19KCksZW5hYmxlU2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5iaW5kKCIudWktZGlzYWJsZVNlbGVjdGlvbiIpfSx6SW5kZXg6ZnVuY3Rpb24odCl7aWYodm9pZCAwIT09dClyZXR1cm4gdGhpcy5jc3MoInpJbmRleCIsdCk7aWYodGhpcy5sZW5ndGgpZm9yKHZhciBpLHMsYT1lKHRoaXNbMF0pO2EubGVuZ3RoJiZhWzBdIT09ZG9jdW1lbnQ7KXtpZihpPWEuY3NzKCJwb3NpdGlvbiIpLCgiYWJzb2x1dGUiPT09aXx8InJlbGF0aXZlIj09PWl8fCJmaXhlZCI9PT1pKSYmKHM9cGFyc2VJbnQoYS5jc3MoInpJbmRleCIpLDEwKSwhaXNOYU4ocykmJjAhPT1zKSlyZXR1cm4gczthPWEucGFyZW50KCl9cmV0dXJuIDB9fSksZS51aS5wbHVnaW49e2FkZDpmdW5jdGlvbih0LGkscyl7dmFyIGEsbj1lLnVpW3RdLnByb3RvdHlwZTtmb3IoYSBpbiBzKW4ucGx1Z2luc1thXT1uLnBsdWdpbnNbYV18fFtdLG4ucGx1Z2luc1thXS5wdXNoKFtpLHNbYV1dKX0sY2FsbDpmdW5jdGlvbihlLHQsaSxzKXt2YXIgYSxuPWUucGx1Z2luc1t0XTtpZihuJiYoc3x8ZS5lbGVtZW50WzBdLnBhcmVudE5vZGUmJjExIT09ZS5lbGVtZW50WzBdLnBhcmVudE5vZGUubm9kZVR5cGUpKWZvcihhPTA7bi5sZW5ndGg+YTthKyspZS5vcHRpb25zW25bYV1bMF1dJiZuW2FdWzFdLmFwcGx5KGUuZWxlbWVudCxpKX19LGUuZXh0ZW5kKGUudWkse2RhdGVwaWNrZXI6e3ZlcnNpb246IjEuMTEuNCJ9fSk7dmFyIGg7ZS5leHRlbmQoYS5wcm90b3R5cGUse21hcmtlckNsYXNzTmFtZToiaGFzRGF0ZXBpY2tlciIsbWF4Um93czo0LF93aWRnZXREYXRlcGlja2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZHBEaXZ9LHNldERlZmF1bHRzOmZ1bmN0aW9uKGUpe3JldHVybiBvKHRoaXMuX2RlZmF1bHRzLGV8fHt9KSx0aGlzfSxfYXR0YWNoRGF0ZXBpY2tlcjpmdW5jdGlvbih0LGkpe3ZhciBzLGEsbjtzPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxhPSJkaXYiPT09c3x8InNwYW4iPT09cyx0LmlkfHwodGhpcy51dWlkKz0xLHQuaWQ9ImRwIit0aGlzLnV1aWQpLG49dGhpcy5fbmV3SW5zdChlKHQpLGEpLG4uc2V0dGluZ3M9ZS5leHRlbmQoe30saXx8e30pLCJpbnB1dCI9PT1zP3RoaXMuX2Nvbm5lY3REYXRlcGlja2VyKHQsbik6YSYmdGhpcy5faW5saW5lRGF0ZXBpY2tlcih0LG4pfSxfbmV3SW5zdDpmdW5jdGlvbih0LGkpe3ZhciBzPXRbMF0uaWQucmVwbGFjZSgvKFteQS1aYS16MC05X1wtXSkvZywiXFxcXCQxIik7cmV0dXJue2lkOnMsaW5wdXQ6dCxzZWxlY3RlZERheTowLHNlbGVjdGVkTW9udGg6MCxzZWxlY3RlZFllYXI6MCxkcmF3TW9udGg6MCxkcmF3WWVhcjowLGlubGluZTppLGRwRGl2Omk/bihlKCI8ZGl2IGNsYXNzPSciK3RoaXMuX2lubGluZUNsYXNzKyIgdWktZGF0ZXBpY2tlciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1hbGwnPjwvZGl2PiIpKTp0aGlzLmRwRGl2fX0sX2Nvbm5lY3REYXRlcGlja2VyOmZ1bmN0aW9uKHQsaSl7dmFyIHM9ZSh0KTtpLmFwcGVuZD1lKFtdKSxpLnRyaWdnZXI9ZShbXSkscy5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSl8fCh0aGlzLl9hdHRhY2htZW50cyhzLGkpLHMuYWRkQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmtleWRvd24odGhpcy5fZG9LZXlEb3duKS5rZXlwcmVzcyh0aGlzLl9kb0tleVByZXNzKS5rZXl1cCh0aGlzLl9kb0tleVVwKSx0aGlzLl9hdXRvU2l6ZShpKSxlLmRhdGEodCwiZGF0ZXBpY2tlciIsaSksaS5zZXR0aW5ncy5kaXNhYmxlZCYmdGhpcy5fZGlzYWJsZURhdGVwaWNrZXIodCkpfSxfYXR0YWNobWVudHM6ZnVuY3Rpb24odCxpKXt2YXIgcyxhLG4scj10aGlzLl9nZXQoaSwiYXBwZW5kVGV4dCIpLG89dGhpcy5fZ2V0KGksImlzUlRMIik7aS5hcHBlbmQmJmkuYXBwZW5kLnJlbW92ZSgpLHImJihpLmFwcGVuZD1lKCI8c3BhbiBjbGFzcz0nIit0aGlzLl9hcHBlbmRDbGFzcysiJz4iK3IrIjwvc3Bhbj4iKSx0W28/ImJlZm9yZSI6ImFmdGVyIl0oaS5hcHBlbmQpKSx0LnVuYmluZCgiZm9jdXMiLHRoaXMuX3Nob3dEYXRlcGlja2VyKSxpLnRyaWdnZXImJmkudHJpZ2dlci5yZW1vdmUoKSxzPXRoaXMuX2dldChpLCJzaG93T24iKSwoImZvY3VzIj09PXN8fCJib3RoIj09PXMpJiZ0LmZvY3VzKHRoaXMuX3Nob3dEYXRlcGlja2VyKSwoImJ1dHRvbiI9PT1zfHwiYm90aCI9PT1zKSYmKGE9dGhpcy5fZ2V0KGksImJ1dHRvblRleHQiKSxuPXRoaXMuX2dldChpLCJidXR0b25JbWFnZSIpLGkudHJpZ2dlcj1lKHRoaXMuX2dldChpLCJidXR0b25JbWFnZU9ubHkiKT9lKCI8aW1nLz4iKS5hZGRDbGFzcyh0aGlzLl90cmlnZ2VyQ2xhc3MpLmF0dHIoe3NyYzpuLGFsdDphLHRpdGxlOmF9KTplKCI8YnV0dG9uIHR5cGU9J2J1dHRvbic+PC9idXR0b24+IikuYWRkQ2xhc3ModGhpcy5fdHJpZ2dlckNsYXNzKS5odG1sKG4/ZSgiPGltZy8+IikuYXR0cih7c3JjOm4sYWx0OmEsdGl0bGU6YX0pOmEpKSx0W28/ImJlZm9yZSI6ImFmdGVyIl0oaS50cmlnZ2VyKSxpLnRyaWdnZXIuY2xpY2soZnVuY3Rpb24oKXtyZXR1cm4gZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmZS5kYXRlcGlja2VyLl9sYXN0SW5wdXQ9PT10WzBdP2UuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTplLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiZlLmRhdGVwaWNrZXIuX2xhc3RJbnB1dCE9PXRbMF0/KGUuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKSxlLmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKHRbMF0pKTplLmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKHRbMF0pLCExfSkpfSxfYXV0b1NpemU6ZnVuY3Rpb24oZSl7aWYodGhpcy5fZ2V0KGUsImF1dG9TaXplIikmJiFlLmlubGluZSl7dmFyIHQsaSxzLGEsbj1uZXcgRGF0ZSgyMDA5LDExLDIwKSxyPXRoaXMuX2dldChlLCJkYXRlRm9ybWF0Iik7ci5tYXRjaCgvW0RNXS8pJiYodD1mdW5jdGlvbihlKXtmb3IoaT0wLHM9MCxhPTA7ZS5sZW5ndGg+YTthKyspZVthXS5sZW5ndGg+aSYmKGk9ZVthXS5sZW5ndGgscz1hKTtyZXR1cm4gc30sbi5zZXRNb250aCh0KHRoaXMuX2dldChlLHIubWF0Y2goL01NLyk/Im1vbnRoTmFtZXMiOiJtb250aE5hbWVzU2hvcnQiKSkpLG4uc2V0RGF0ZSh0KHRoaXMuX2dldChlLHIubWF0Y2goL0RELyk/ImRheU5hbWVzIjoiZGF5TmFtZXNTaG9ydCIpKSsyMC1uLmdldERheSgpKSksZS5pbnB1dC5hdHRyKCJzaXplIix0aGlzLl9mb3JtYXREYXRlKGUsbikubGVuZ3RoKX19LF9pbmxpbmVEYXRlcGlja2VyOmZ1bmN0aW9uKHQsaSl7dmFyIHM9ZSh0KTtzLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKXx8KHMuYWRkQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmFwcGVuZChpLmRwRGl2KSxlLmRhdGEodCwiZGF0ZXBpY2tlciIsaSksdGhpcy5fc2V0RGF0ZShpLHRoaXMuX2dldERlZmF1bHREYXRlKGkpLCEwKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKGkpLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShpKSxpLnNldHRpbmdzLmRpc2FibGVkJiZ0aGlzLl9kaXNhYmxlRGF0ZXBpY2tlcih0KSxpLmRwRGl2LmNzcygiZGlzcGxheSIsImJsb2NrIikpfSxfZGlhbG9nRGF0ZXBpY2tlcjpmdW5jdGlvbih0LGkscyxhLG4pe3ZhciByLGgsbCx1LGQsYz10aGlzLl9kaWFsb2dJbnN0O3JldHVybiBjfHwodGhpcy51dWlkKz0xLHI9ImRwIit0aGlzLnV1aWQsdGhpcy5fZGlhbG9nSW5wdXQ9ZSgiPGlucHV0IHR5cGU9J3RleHQnIGlkPSciK3IrIicgc3R5bGU9J3Bvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAtMTAwcHg7IHdpZHRoOiAwcHg7Jy8+IiksdGhpcy5fZGlhbG9nSW5wdXQua2V5ZG93bih0aGlzLl9kb0tleURvd24pLGUoImJvZHkiKS5hcHBlbmQodGhpcy5fZGlhbG9nSW5wdXQpLGM9dGhpcy5fZGlhbG9nSW5zdD10aGlzLl9uZXdJbnN0KHRoaXMuX2RpYWxvZ0lucHV0LCExKSxjLnNldHRpbmdzPXt9LGUuZGF0YSh0aGlzLl9kaWFsb2dJbnB1dFswXSwiZGF0ZXBpY2tlciIsYykpLG8oYy5zZXR0aW5ncyxhfHx7fSksaT1pJiZpLmNvbnN0cnVjdG9yPT09RGF0ZT90aGlzLl9mb3JtYXREYXRlKGMsaSk6aSx0aGlzLl9kaWFsb2dJbnB1dC52YWwoaSksdGhpcy5fcG9zPW4/bi5sZW5ndGg/bjpbbi5wYWdlWCxuLnBhZ2VZXTpudWxsLHRoaXMuX3Bvc3x8KGg9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLGw9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCx1PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0fHxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQsZD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCx0aGlzLl9wb3M9W2gvMi0xMDArdSxsLzItMTUwK2RdKSx0aGlzLl9kaWFsb2dJbnB1dC5jc3MoImxlZnQiLHRoaXMuX3Bvc1swXSsyMCsicHgiKS5jc3MoInRvcCIsdGhpcy5fcG9zWzFdKyJweCIpLGMuc2V0dGluZ3Mub25TZWxlY3Q9cyx0aGlzLl9pbkRpYWxvZz0hMCx0aGlzLmRwRGl2LmFkZENsYXNzKHRoaXMuX2RpYWxvZ0NsYXNzKSx0aGlzLl9zaG93RGF0ZXBpY2tlcih0aGlzLl9kaWFsb2dJbnB1dFswXSksZS5ibG9ja1VJJiZlLmJsb2NrVUkodGhpcy5kcERpdiksZS5kYXRhKHRoaXMuX2RpYWxvZ0lucHV0WzBdLCJkYXRlcGlja2VyIixjKSx0aGlzfSxfZGVzdHJveURhdGVwaWNrZXI6ZnVuY3Rpb24odCl7dmFyIGkscz1lKHQpLGE9ZS5kYXRhKHQsImRhdGVwaWNrZXIiKTtzLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSYmKGk9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGUucmVtb3ZlRGF0YSh0LCJkYXRlcGlja2VyIiksImlucHV0Ij09PWk/KGEuYXBwZW5kLnJlbW92ZSgpLGEudHJpZ2dlci5yZW1vdmUoKSxzLnJlbW92ZUNsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS51bmJpbmQoImZvY3VzIix0aGlzLl9zaG93RGF0ZXBpY2tlcikudW5iaW5kKCJrZXlkb3duIix0aGlzLl9kb0tleURvd24pLnVuYmluZCgia2V5cHJlc3MiLHRoaXMuX2RvS2V5UHJlc3MpLnVuYmluZCgia2V5dXAiLHRoaXMuX2RvS2V5VXApKTooImRpdiI9PT1pfHwic3BhbiI9PT1pKSYmcy5yZW1vdmVDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkuZW1wdHkoKSxoPT09YSYmKGg9bnVsbCkpfSxfZW5hYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbih0KXt2YXIgaSxzLGE9ZSh0KSxuPWUuZGF0YSh0LCJkYXRlcGlja2VyIik7YS5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkmJihpPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwiaW5wdXQiPT09aT8odC5kaXNhYmxlZD0hMSxuLnRyaWdnZXIuZmlsdGVyKCJidXR0b24iKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD0hMX0pLmVuZCgpLmZpbHRlcigiaW1nIikuY3NzKHtvcGFjaXR5OiIxLjAiLGN1cnNvcjoiIn0pKTooImRpdiI9PT1pfHwic3BhbiI9PT1pKSYmKHM9YS5jaGlsZHJlbigiLiIrdGhpcy5faW5saW5lQ2xhc3MpLHMuY2hpbGRyZW4oKS5yZW1vdmVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKSxzLmZpbmQoInNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLCBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyIikucHJvcCgiZGlzYWJsZWQiLCExKSksdGhpcy5fZGlzYWJsZWRJbnB1dHM9ZS5tYXAodGhpcy5fZGlzYWJsZWRJbnB1dHMsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10P251bGw6ZX0pKX0sX2Rpc2FibGVEYXRlcGlja2VyOmZ1bmN0aW9uKHQpe3ZhciBpLHMsYT1lKHQpLG49ZS5kYXRhKHQsImRhdGVwaWNrZXIiKTthLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSYmKGk9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCJpbnB1dCI9PT1pPyh0LmRpc2FibGVkPSEwLG4udHJpZ2dlci5maWx0ZXIoImJ1dHRvbiIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkPSEwfSkuZW5kKCkuZmlsdGVyKCJpbWciKS5jc3Moe29wYWNpdHk6IjAuNSIsY3Vyc29yOiJkZWZhdWx0In0pKTooImRpdiI9PT1pfHwic3BhbiI9PT1pKSYmKHM9YS5jaGlsZHJlbigiLiIrdGhpcy5faW5saW5lQ2xhc3MpLHMuY2hpbGRyZW4oKS5hZGRDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKSxzLmZpbmQoInNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLCBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyIikucHJvcCgiZGlzYWJsZWQiLCEwKSksdGhpcy5fZGlzYWJsZWRJbnB1dHM9ZS5tYXAodGhpcy5fZGlzYWJsZWRJbnB1dHMsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10P251bGw6ZX0pLHRoaXMuX2Rpc2FibGVkSW5wdXRzW3RoaXMuX2Rpc2FibGVkSW5wdXRzLmxlbmd0aF09dCl9LF9pc0Rpc2FibGVkRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXtpZighZSlyZXR1cm4hMTtmb3IodmFyIHQ9MDt0aGlzLl9kaXNhYmxlZElucHV0cy5sZW5ndGg+dDt0KyspaWYodGhpcy5fZGlzYWJsZWRJbnB1dHNbdF09PT1lKXJldHVybiEwO3JldHVybiExfSxfZ2V0SW5zdDpmdW5jdGlvbih0KXt0cnl7cmV0dXJuIGUuZGF0YSh0LCJkYXRlcGlja2VyIil9Y2F0Y2goaSl7dGhyb3ciTWlzc2luZyBpbnN0YW5jZSBkYXRhIGZvciB0aGlzIGRhdGVwaWNrZXIifX0sX29wdGlvbkRhdGVwaWNrZXI6ZnVuY3Rpb24odCxpLHMpe3ZhciBhLG4scixoLGw9dGhpcy5fZ2V0SW5zdCh0KTtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgaT8iZGVmYXVsdHMiPT09aT9lLmV4dGVuZCh7fSxlLmRhdGVwaWNrZXIuX2RlZmF1bHRzKTpsPyJhbGwiPT09aT9lLmV4dGVuZCh7fSxsLnNldHRpbmdzKTp0aGlzLl9nZXQobCxpKTpudWxsOihhPWl8fHt9LCJzdHJpbmciPT10eXBlb2YgaSYmKGE9e30sYVtpXT1zKSxsJiYodGhpcy5fY3VySW5zdD09PWwmJnRoaXMuX2hpZGVEYXRlcGlja2VyKCksbj10aGlzLl9nZXREYXRlRGF0ZXBpY2tlcih0LCEwKSxyPXRoaXMuX2dldE1pbk1heERhdGUobCwibWluIiksaD10aGlzLl9nZXRNaW5NYXhEYXRlKGwsIm1heCIpLG8obC5zZXR0aW5ncyxhKSxudWxsIT09ciYmdm9pZCAwIT09YS5kYXRlRm9ybWF0JiZ2b2lkIDA9PT1hLm1pbkRhdGUmJihsLnNldHRpbmdzLm1pbkRhdGU9dGhpcy5fZm9ybWF0RGF0ZShsLHIpKSxudWxsIT09aCYmdm9pZCAwIT09YS5kYXRlRm9ybWF0JiZ2b2lkIDA9PT1hLm1heERhdGUmJihsLnNldHRpbmdzLm1heERhdGU9dGhpcy5fZm9ybWF0RGF0ZShsLGgpKSwiZGlzYWJsZWQiaW4gYSYmKGEuZGlzYWJsZWQ/dGhpcy5fZGlzYWJsZURhdGVwaWNrZXIodCk6dGhpcy5fZW5hYmxlRGF0ZXBpY2tlcih0KSksdGhpcy5fYXR0YWNobWVudHMoZSh0KSxsKSx0aGlzLl9hdXRvU2l6ZShsKSx0aGlzLl9zZXREYXRlKGwsbiksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGwpLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIobCkpLHZvaWQgMCl9LF9jaGFuZ2VEYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCxpKXt0aGlzLl9vcHRpb25EYXRlcGlja2VyKGUsdCxpKX0sX3JlZnJlc2hEYXRlcGlja2VyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldEluc3QoZSk7dCYmdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcih0KX0sX3NldERhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5fZ2V0SW5zdChlKTtpJiYodGhpcy5fc2V0RGF0ZShpLHQpLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaSksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGkpKX0sX2dldERhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5fZ2V0SW5zdChlKTtyZXR1cm4gaSYmIWkuaW5saW5lJiZ0aGlzLl9zZXREYXRlRnJvbUZpZWxkKGksdCksaT90aGlzLl9nZXREYXRlKGkpOm51bGx9LF9kb0tleURvd246ZnVuY3Rpb24odCl7dmFyIGkscyxhLG49ZS5kYXRlcGlja2VyLl9nZXRJbnN0KHQudGFyZ2V0KSxyPSEwLG89bi5kcERpdi5pcygiLnVpLWRhdGVwaWNrZXItcnRsIik7aWYobi5fa2V5RXZlbnQ9ITAsZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZylzd2l0Y2godC5rZXlDb2RlKXtjYXNlIDk6ZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLHI9ITE7YnJlYWs7Y2FzZSAxMzpyZXR1cm4gYT1lKCJ0ZC4iK2UuZGF0ZXBpY2tlci5fZGF5T3ZlckNsYXNzKyI6bm90KC4iK2UuZGF0ZXBpY2tlci5fY3VycmVudENsYXNzKyIpIixuLmRwRGl2KSxhWzBdJiZlLmRhdGVwaWNrZXIuX3NlbGVjdERheSh0LnRhcmdldCxuLnNlbGVjdGVkTW9udGgsbi5zZWxlY3RlZFllYXIsYVswXSksaT1lLmRhdGVwaWNrZXIuX2dldChuLCJvblNlbGVjdCIpLGk/KHM9ZS5kYXRlcGlja2VyLl9mb3JtYXREYXRlKG4pLGkuYXBwbHkobi5pbnB1dD9uLmlucHV0WzBdOm51bGwsW3Msbl0pKTplLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCksITE7Y2FzZSAyNzplLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk7YnJlYWs7Y2FzZSAzMzplLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsdC5jdHJsS2V5Py1lLmRhdGVwaWNrZXIuX2dldChuLCJzdGVwQmlnTW9udGhzIik6LWUuZGF0ZXBpY2tlci5fZ2V0KG4sInN0ZXBNb250aHMiKSwiTSIpO2JyZWFrO2Nhc2UgMzQ6ZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHQudGFyZ2V0LHQuY3RybEtleT8rZS5kYXRlcGlja2VyLl9nZXQobiwic3RlcEJpZ01vbnRocyIpOitlLmRhdGVwaWNrZXIuX2dldChuLCJzdGVwTW9udGhzIiksIk0iKTticmVhaztjYXNlIDM1Oih0LmN0cmxLZXl8fHQubWV0YUtleSkmJmUuZGF0ZXBpY2tlci5fY2xlYXJEYXRlKHQudGFyZ2V0KSxyPXQuY3RybEtleXx8dC5tZXRhS2V5O2JyZWFrO2Nhc2UgMzY6KHQuY3RybEtleXx8dC5tZXRhS2V5KSYmZS5kYXRlcGlja2VyLl9nb3RvVG9kYXkodC50YXJnZXQpLHI9dC5jdHJsS2V5fHx0Lm1ldGFLZXk7YnJlYWs7Y2FzZSAzNzoodC5jdHJsS2V5fHx0Lm1ldGFLZXkpJiZlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsbz8xOi0xLCJEIikscj10LmN0cmxLZXl8fHQubWV0YUtleSx0Lm9yaWdpbmFsRXZlbnQuYWx0S2V5JiZlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsdC5jdHJsS2V5Py1lLmRhdGVwaWNrZXIuX2dldChuLCJzdGVwQmlnTW9udGhzIik6LWUuZGF0ZXBpY2tlci5fZ2V0KG4sInN0ZXBNb250aHMiKSwiTSIpO2JyZWFrO2Nhc2UgMzg6KHQuY3RybEtleXx8dC5tZXRhS2V5KSYmZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHQudGFyZ2V0LC03LCJEIikscj10LmN0cmxLZXl8fHQubWV0YUtleTticmVhaztjYXNlIDM5Oih0LmN0cmxLZXl8fHQubWV0YUtleSkmJmUuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSh0LnRhcmdldCxvPy0xOjEsIkQiKSxyPXQuY3RybEtleXx8dC5tZXRhS2V5LHQub3JpZ2luYWxFdmVudC5hbHRLZXkmJmUuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSh0LnRhcmdldCx0LmN0cmxLZXk/K2UuZGF0ZXBpY2tlci5fZ2V0KG4sInN0ZXBCaWdNb250aHMiKTorZS5kYXRlcGlja2VyLl9nZXQobiwic3RlcE1vbnRocyIpLCJNIik7YnJlYWs7Y2FzZSA0MDoodC5jdHJsS2V5fHx0Lm1ldGFLZXkpJiZlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsNywiRCIpLHI9dC5jdHJsS2V5fHx0Lm1ldGFLZXk7YnJlYWs7ZGVmYXVsdDpyPSExfWVsc2UgMzY9PT10LmtleUNvZGUmJnQuY3RybEtleT9lLmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKHRoaXMpOnI9ITE7ciYmKHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpKX0sX2RvS2V5UHJlc3M6ZnVuY3Rpb24odCl7dmFyIGkscyxhPWUuZGF0ZXBpY2tlci5fZ2V0SW5zdCh0LnRhcmdldCk7cmV0dXJuIGUuZGF0ZXBpY2tlci5fZ2V0KGEsImNvbnN0cmFpbklucHV0Iik/KGk9ZS5kYXRlcGlja2VyLl9wb3NzaWJsZUNoYXJzKGUuZGF0ZXBpY2tlci5fZ2V0KGEsImRhdGVGb3JtYXQiKSkscz1TdHJpbmcuZnJvbUNoYXJDb2RlKG51bGw9PXQuY2hhckNvZGU/dC5rZXlDb2RlOnQuY2hhckNvZGUpLHQuY3RybEtleXx8dC5tZXRhS2V5fHwiICI+c3x8IWl8fGkuaW5kZXhPZihzKT4tMSk6dm9pZCAwfSxfZG9LZXlVcDpmdW5jdGlvbih0KXt2YXIgaSxzPWUuZGF0ZXBpY2tlci5fZ2V0SW5zdCh0LnRhcmdldCk7aWYocy5pbnB1dC52YWwoKSE9PXMubGFzdFZhbCl0cnl7aT1lLmRhdGVwaWNrZXIucGFyc2VEYXRlKGUuZGF0ZXBpY2tlci5fZ2V0KHMsImRhdGVGb3JtYXQiKSxzLmlucHV0P3MuaW5wdXQudmFsKCk6bnVsbCxlLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyhzKSksaSYmKGUuZGF0ZXBpY2tlci5fc2V0RGF0ZUZyb21GaWVsZChzKSxlLmRhdGVwaWNrZXIuX3VwZGF0ZUFsdGVybmF0ZShzKSxlLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXIocykpfWNhdGNoKGEpe31yZXR1cm4hMH0sX3Nob3dEYXRlcGlja2VyOmZ1bmN0aW9uKHQpe2lmKHQ9dC50YXJnZXR8fHQsImlucHV0IiE9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmKHQ9ZSgiaW5wdXQiLHQucGFyZW50Tm9kZSlbMF0pLCFlLmRhdGVwaWNrZXIuX2lzRGlzYWJsZWREYXRlcGlja2VyKHQpJiZlLmRhdGVwaWNrZXIuX2xhc3RJbnB1dCE9PXQpe3ZhciBpLGEsbixyLGgsbCx1O2k9ZS5kYXRlcGlja2VyLl9nZXRJbnN0KHQpLGUuZGF0ZXBpY2tlci5fY3VySW5zdCYmZS5kYXRlcGlja2VyLl9jdXJJbnN0IT09aSYmKGUuZGF0ZXBpY2tlci5fY3VySW5zdC5kcERpdi5zdG9wKCEwLCEwKSxpJiZlLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiZlLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKGUuZGF0ZXBpY2tlci5fY3VySW5zdC5pbnB1dFswXSkpLGE9ZS5kYXRlcGlja2VyLl9nZXQoaSwiYmVmb3JlU2hvdyIpLG49YT9hLmFwcGx5KHQsW3QsaV0pOnt9LG4hPT0hMSYmKG8oaS5zZXR0aW5ncyxuKSxpLmxhc3RWYWw9bnVsbCxlLmRhdGVwaWNrZXIuX2xhc3RJbnB1dD10LGUuZGF0ZXBpY2tlci5fc2V0RGF0ZUZyb21GaWVsZChpKSxlLmRhdGVwaWNrZXIuX2luRGlhbG9nJiYodC52YWx1ZT0iIiksZS5kYXRlcGlja2VyLl9wb3N8fChlLmRhdGVwaWNrZXIuX3Bvcz1lLmRhdGVwaWNrZXIuX2ZpbmRQb3ModCksZS5kYXRlcGlja2VyLl9wb3NbMV0rPXQub2Zmc2V0SGVpZ2h0KSxyPSExLGUodCkucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4gcnw9ImZpeGVkIj09PWUodGhpcykuY3NzKCJwb3NpdGlvbiIpLCFyfSksaD17bGVmdDplLmRhdGVwaWNrZXIuX3Bvc1swXSx0b3A6ZS5kYXRlcGlja2VyLl9wb3NbMV19LGUuZGF0ZXBpY2tlci5fcG9zPW51bGwsaS5kcERpdi5lbXB0eSgpLGkuZHBEaXYuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGRpc3BsYXk6ImJsb2NrIix0b3A6Ii0xMDAwcHgifSksZS5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKGkpLGg9ZS5kYXRlcGlja2VyLl9jaGVja09mZnNldChpLGgsciksaS5kcERpdi5jc3Moe3Bvc2l0aW9uOmUuZGF0ZXBpY2tlci5faW5EaWFsb2cmJmUuYmxvY2tVST8ic3RhdGljIjpyPyJmaXhlZCI6ImFic29sdXRlIixkaXNwbGF5OiJub25lIixsZWZ0OmgubGVmdCsicHgiLHRvcDpoLnRvcCsicHgifSksaS5pbmxpbmV8fChsPWUuZGF0ZXBpY2tlci5fZ2V0KGksInNob3dBbmltIiksdT1lLmRhdGVwaWNrZXIuX2dldChpLCJkdXJhdGlvbiIpLGkuZHBEaXYuY3NzKCJ6LWluZGV4IixzKGUodCkpKzEpLGUuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmc9ITAsZS5lZmZlY3RzJiZlLmVmZmVjdHMuZWZmZWN0W2xdP2kuZHBEaXYuc2hvdyhsLGUuZGF0ZXBpY2tlci5fZ2V0KGksInNob3dPcHRpb25zIiksdSk6aS5kcERpdltsfHwic2hvdyJdKGw/dTpudWxsKSxlLmRhdGVwaWNrZXIuX3Nob3VsZEZvY3VzSW5wdXQoaSkmJmkuaW5wdXQuZm9jdXMoKSxlLmRhdGVwaWNrZXIuX2N1ckluc3Q9aSkpfX0sX3VwZGF0ZURhdGVwaWNrZXI6ZnVuY3Rpb24odCl7dGhpcy5tYXhSb3dzPTQsaD10LHQuZHBEaXYuZW1wdHkoKS5hcHBlbmQodGhpcy5fZ2VuZXJhdGVIVE1MKHQpKSx0aGlzLl9hdHRhY2hIYW5kbGVycyh0KTt2YXIgaSxzPXRoaXMuX2dldE51bWJlck9mTW9udGhzKHQpLGE9c1sxXSxuPTE3LG89dC5kcERpdi5maW5kKCIuIit0aGlzLl9kYXlPdmVyQ2xhc3MrIiBhIik7by5sZW5ndGg+MCYmci5hcHBseShvLmdldCgwKSksdC5kcERpdi5yZW1vdmVDbGFzcygidWktZGF0ZXBpY2tlci1tdWx0aS0yIHVpLWRhdGVwaWNrZXItbXVsdGktMyB1aS1kYXRlcGlja2VyLW11bHRpLTQiKS53aWR0aCgiIiksYT4xJiZ0LmRwRGl2LmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLW11bHRpLSIrYSkuY3NzKCJ3aWR0aCIsbiphKyJlbSIpLHQuZHBEaXZbKDEhPT1zWzBdfHwxIT09c1sxXT8iYWRkIjoicmVtb3ZlIikrIkNsYXNzIl0oInVpLWRhdGVwaWNrZXItbXVsdGkiKSx0LmRwRGl2Wyh0aGlzLl9nZXQodCwiaXNSVEwiKT8iYWRkIjoicmVtb3ZlIikrIkNsYXNzIl0oInVpLWRhdGVwaWNrZXItcnRsIiksdD09PWUuZGF0ZXBpY2tlci5fY3VySW5zdCYmZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmZS5kYXRlcGlja2VyLl9zaG91bGRGb2N1c0lucHV0KHQpJiZ0LmlucHV0LmZvY3VzKCksdC55ZWFyc2h0bWwmJihpPXQueWVhcnNodG1sLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpPT09dC55ZWFyc2h0bWwmJnQueWVhcnNodG1sJiZ0LmRwRGl2LmZpbmQoInNlbGVjdC51aS1kYXRlcGlja2VyLXllYXI6Zmlyc3QiKS5yZXBsYWNlV2l0aCh0LnllYXJzaHRtbCksaT10LnllYXJzaHRtbD1udWxsfSwwKSl9LF9zaG91bGRGb2N1c0lucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlLmlucHV0JiZlLmlucHV0LmlzKCI6dmlzaWJsZSIpJiYhZS5pbnB1dC5pcygiOmRpc2FibGVkIikmJiFlLmlucHV0LmlzKCI6Zm9jdXMiKX0sX2NoZWNrT2Zmc2V0OmZ1bmN0aW9uKHQsaSxzKXt2YXIgYT10LmRwRGl2Lm91dGVyV2lkdGgoKSxuPXQuZHBEaXYub3V0ZXJIZWlnaHQoKSxyPXQuaW5wdXQ/dC5pbnB1dC5vdXRlcldpZHRoKCk6MCxvPXQuaW5wdXQ/dC5pbnB1dC5vdXRlckhlaWdodCgpOjAsaD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgrKHM/MDplKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkpLGw9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCsocz8wOmUoZG9jdW1lbnQpLnNjcm9sbFRvcCgpKTtyZXR1cm4gaS5sZWZ0LT10aGlzLl9nZXQodCwiaXNSVEwiKT9hLXI6MCxpLmxlZnQtPXMmJmkubGVmdD09PXQuaW5wdXQub2Zmc2V0KCkubGVmdD9lKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCk6MCxpLnRvcC09cyYmaS50b3A9PT10LmlucHV0Lm9mZnNldCgpLnRvcCtvP2UoZG9jdW1lbnQpLnNjcm9sbFRvcCgpOjAsaS5sZWZ0LT1NYXRoLm1pbihpLmxlZnQsaS5sZWZ0K2E+aCYmaD5hP01hdGguYWJzKGkubGVmdCthLWgpOjApLGkudG9wLT1NYXRoLm1pbihpLnRvcCxpLnRvcCtuPmwmJmw+bj9NYXRoLmFicyhuK28pOjApLGl9LF9maW5kUG9zOmZ1bmN0aW9uKHQpe2Zvcih2YXIgaSxzPXRoaXMuX2dldEluc3QodCksYT10aGlzLl9nZXQocywiaXNSVEwiKTt0JiYoImhpZGRlbiI9PT10LnR5cGV8fDEhPT10Lm5vZGVUeXBlfHxlLmV4cHIuZmlsdGVycy5oaWRkZW4odCkpOyl0PXRbYT8icHJldmlvdXNTaWJsaW5nIjoibmV4dFNpYmxpbmciXTtyZXR1cm4gaT1lKHQpLm9mZnNldCgpLFtpLmxlZnQsaS50b3BdfSxfaGlkZURhdGVwaWNrZXI6ZnVuY3Rpb24odCl7dmFyIGkscyxhLG4scj10aGlzLl9jdXJJbnN0OyFyfHx0JiZyIT09ZS5kYXRhKHQsImRhdGVwaWNrZXIiKXx8dGhpcy5fZGF0ZXBpY2tlclNob3dpbmcmJihpPXRoaXMuX2dldChyLCJzaG93QW5pbSIpLHM9dGhpcy5fZ2V0KHIsImR1cmF0aW9uIiksYT1mdW5jdGlvbigpe2UuZGF0ZXBpY2tlci5fdGlkeURpYWxvZyhyKX0sZS5lZmZlY3RzJiYoZS5lZmZlY3RzLmVmZmVjdFtpXXx8ZS5lZmZlY3RzW2ldKT9yLmRwRGl2LmhpZGUoaSxlLmRhdGVwaWNrZXIuX2dldChyLCJzaG93T3B0aW9ucyIpLHMsYSk6ci5kcERpdlsic2xpZGVEb3duIj09PWk/InNsaWRlVXAiOiJmYWRlSW4iPT09aT8iZmFkZU91dCI6ImhpZGUiXShpP3M6bnVsbCxhKSxpfHxhKCksdGhpcy5fZGF0ZXBpY2tlclNob3dpbmc9ITEsbj10aGlzLl9nZXQociwib25DbG9zZSIpLG4mJm4uYXBwbHkoci5pbnB1dD9yLmlucHV0WzBdOm51bGwsW3IuaW5wdXQ/ci5pbnB1dC52YWwoKToiIixyXSksdGhpcy5fbGFzdElucHV0PW51bGwsdGhpcy5faW5EaWFsb2cmJih0aGlzLl9kaWFsb2dJbnB1dC5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiMCIsdG9wOiItMTAwcHgifSksZS5ibG9ja1VJJiYoZS51bmJsb2NrVUkoKSxlKCJib2R5IikuYXBwZW5kKHRoaXMuZHBEaXYpKSksdGhpcy5faW5EaWFsb2c9ITEpfSxfdGlkeURpYWxvZzpmdW5jdGlvbihlKXtlLmRwRGl2LnJlbW92ZUNsYXNzKHRoaXMuX2RpYWxvZ0NsYXNzKS51bmJpbmQoIi51aS1kYXRlcGlja2VyLWNhbGVuZGFyIil9LF9jaGVja0V4dGVybmFsQ2xpY2s6ZnVuY3Rpb24odCl7aWYoZS5kYXRlcGlja2VyLl9jdXJJbnN0KXt2YXIgaT1lKHQudGFyZ2V0KSxzPWUuZGF0ZXBpY2tlci5fZ2V0SW5zdChpWzBdKTsoaVswXS5pZCE9PWUuZGF0ZXBpY2tlci5fbWFpbkRpdklkJiYwPT09aS5wYXJlbnRzKCIjIitlLmRhdGVwaWNrZXIuX21haW5EaXZJZCkubGVuZ3RoJiYhaS5oYXNDbGFzcyhlLmRhdGVwaWNrZXIubWFya2VyQ2xhc3NOYW1lKSYmIWkuY2xvc2VzdCgiLiIrZS5kYXRlcGlja2VyLl90cmlnZ2VyQ2xhc3MpLmxlbmd0aCYmZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmKCFlLmRhdGVwaWNrZXIuX2luRGlhbG9nfHwhZS5ibG9ja1VJKXx8aS5oYXNDbGFzcyhlLmRhdGVwaWNrZXIubWFya2VyQ2xhc3NOYW1lKSYmZS5kYXRlcGlja2VyLl9jdXJJbnN0IT09cykmJmUuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKX19LF9hZGp1c3REYXRlOmZ1bmN0aW9uKHQsaSxzKXt2YXIgYT1lKHQpLG49dGhpcy5fZ2V0SW5zdChhWzBdKTt0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihhWzBdKXx8KHRoaXMuX2FkanVzdEluc3REYXRlKG4saSsoIk0iPT09cz90aGlzLl9nZXQobiwic2hvd0N1cnJlbnRBdFBvcyIpOjApLHMpLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIobikpfSxfZ290b1RvZGF5OmZ1bmN0aW9uKHQpe3ZhciBpLHM9ZSh0KSxhPXRoaXMuX2dldEluc3Qoc1swXSk7dGhpcy5fZ2V0KGEsImdvdG9DdXJyZW50IikmJmEuY3VycmVudERheT8oYS5zZWxlY3RlZERheT1hLmN1cnJlbnREYXksYS5kcmF3TW9udGg9YS5zZWxlY3RlZE1vbnRoPWEuY3VycmVudE1vbnRoLGEuZHJhd1llYXI9YS5zZWxlY3RlZFllYXI9YS5jdXJyZW50WWVhcik6KGk9bmV3IERhdGUsYS5zZWxlY3RlZERheT1pLmdldERhdGUoKSxhLmRyYXdNb250aD1hLnNlbGVjdGVkTW9udGg9aS5nZXRNb250aCgpLGEuZHJhd1llYXI9YS5zZWxlY3RlZFllYXI9aS5nZXRGdWxsWWVhcigpKSx0aGlzLl9ub3RpZnlDaGFuZ2UoYSksdGhpcy5fYWRqdXN0RGF0ZShzKX0sX3NlbGVjdE1vbnRoWWVhcjpmdW5jdGlvbih0LGkscyl7dmFyIGE9ZSh0KSxuPXRoaXMuX2dldEluc3QoYVswXSk7blsic2VsZWN0ZWQiKygiTSI9PT1zPyJNb250aCI6IlllYXIiKV09blsiZHJhdyIrKCJNIj09PXM/Ik1vbnRoIjoiWWVhciIpXT1wYXJzZUludChpLm9wdGlvbnNbaS5zZWxlY3RlZEluZGV4XS52YWx1ZSwxMCksdGhpcy5fbm90aWZ5Q2hhbmdlKG4pLHRoaXMuX2FkanVzdERhdGUoYSl9LF9zZWxlY3REYXk6ZnVuY3Rpb24odCxpLHMsYSl7dmFyIG4scj1lKHQpO2UoYSkuaGFzQ2xhc3ModGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3MpfHx0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihyWzBdKXx8KG49dGhpcy5fZ2V0SW5zdChyWzBdKSxuLnNlbGVjdGVkRGF5PW4uY3VycmVudERheT1lKCJhIixhKS5odG1sKCksbi5zZWxlY3RlZE1vbnRoPW4uY3VycmVudE1vbnRoPWksbi5zZWxlY3RlZFllYXI9bi5jdXJyZW50WWVhcj1zLHRoaXMuX3NlbGVjdERhdGUodCx0aGlzLl9mb3JtYXREYXRlKG4sbi5jdXJyZW50RGF5LG4uY3VycmVudE1vbnRoLG4uY3VycmVudFllYXIpKSl9LF9jbGVhckRhdGU6ZnVuY3Rpb24odCl7dmFyIGk9ZSh0KTt0aGlzLl9zZWxlY3REYXRlKGksIiIpfSxfc2VsZWN0RGF0ZTpmdW5jdGlvbih0LGkpe3ZhciBzLGE9ZSh0KSxuPXRoaXMuX2dldEluc3QoYVswXSk7aT1udWxsIT1pP2k6dGhpcy5fZm9ybWF0RGF0ZShuKSxuLmlucHV0JiZuLmlucHV0LnZhbChpKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUobikscz10aGlzLl9nZXQobiwib25TZWxlY3QiKSxzP3MuYXBwbHkobi5pbnB1dD9uLmlucHV0WzBdOm51bGwsW2ksbl0pOm4uaW5wdXQmJm4uaW5wdXQudHJpZ2dlcigiY2hhbmdlIiksbi5pbmxpbmU/dGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihuKToodGhpcy5faGlkZURhdGVwaWNrZXIoKSx0aGlzLl9sYXN0SW5wdXQ9bi5pbnB1dFswXSwib2JqZWN0IiE9dHlwZW9mIG4uaW5wdXRbMF0mJm4uaW5wdXQuZm9jdXMoKSx0aGlzLl9sYXN0SW5wdXQ9bnVsbCl9LF91cGRhdGVBbHRlcm5hdGU6ZnVuY3Rpb24odCl7dmFyIGkscyxhLG49dGhpcy5fZ2V0KHQsImFsdEZpZWxkIik7biYmKGk9dGhpcy5fZ2V0KHQsImFsdEZvcm1hdCIpfHx0aGlzLl9nZXQodCwiZGF0ZUZvcm1hdCIpLHM9dGhpcy5fZ2V0RGF0ZSh0KSxhPXRoaXMuZm9ybWF0RGF0ZShpLHMsdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKHQpKSxlKG4pLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLnZhbChhKX0pKX0sbm9XZWVrZW5kczpmdW5jdGlvbihlKXt2YXIgdD1lLmdldERheSgpO3JldHVyblt0PjAmJjY+dCwiIl19LGlzbzg2MDFXZWVrOmZ1bmN0aW9uKGUpe3ZhciB0LGk9bmV3IERhdGUoZS5nZXRUaW1lKCkpO3JldHVybiBpLnNldERhdGUoaS5nZXREYXRlKCkrNC0oaS5nZXREYXkoKXx8NykpLHQ9aS5nZXRUaW1lKCksaS5zZXRNb250aCgwKSxpLnNldERhdGUoMSksTWF0aC5mbG9vcihNYXRoLnJvdW5kKCh0LWkpLzg2NGU1KS83KSsxfSxwYXJzZURhdGU6ZnVuY3Rpb24odCxpLHMpe2lmKG51bGw9PXR8fG51bGw9PWkpdGhyb3ciSW52YWxpZCBhcmd1bWVudHMiO2lmKGk9Im9iamVjdCI9PXR5cGVvZiBpPyIiK2k6aSsiIiwiIj09PWkpcmV0dXJuIG51bGw7dmFyIGEsbixyLG8saD0wLGw9KHM/cy5zaG9ydFllYXJDdXRvZmY6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLnNob3J0WWVhckN1dG9mZix1PSJzdHJpbmciIT10eXBlb2YgbD9sOihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSUxMDArcGFyc2VJbnQobCwxMCksZD0ocz9zLmRheU5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzU2hvcnQsYz0ocz9zLmRheU5hbWVzOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5kYXlOYW1lcyxwPShzP3MubW9udGhOYW1lc1Nob3J0Om51bGwpfHx0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzU2hvcnQsZj0ocz9zLm1vbnRoTmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXMsbT0tMSxnPS0xLHY9LTEseT0tMSxiPSExLF89ZnVuY3Rpb24oZSl7dmFyIGk9dC5sZW5ndGg+YSsxJiZ0LmNoYXJBdChhKzEpPT09ZTtyZXR1cm4gaSYmYSsrLGl9LHg9ZnVuY3Rpb24oZSl7dmFyIHQ9XyhlKSxzPSJAIj09PWU/MTQ6IiEiPT09ZT8yMDoieSI9PT1lJiZ0PzQ6Im8iPT09ZT8zOjIsYT0ieSI9PT1lP3M6MSxuPVJlZ0V4cCgiXlxcZHsiK2ErIiwiK3MrIn0iKSxyPWkuc3Vic3RyaW5nKGgpLm1hdGNoKG4pO2lmKCFyKXRocm93Ik1pc3NpbmcgbnVtYmVyIGF0IHBvc2l0aW9uICIraDtyZXR1cm4gaCs9clswXS5sZW5ndGgscGFyc2VJbnQoclswXSwxMCl9LGs9ZnVuY3Rpb24odCxzLGEpe3ZhciBuPS0xLHI9ZS5tYXAoXyh0KT9hOnMsZnVuY3Rpb24oZSx0KXtyZXR1cm5bW3QsZV1dfSkuc29ydChmdW5jdGlvbihlLHQpe3JldHVybi0oZVsxXS5sZW5ndGgtdFsxXS5sZW5ndGgpfSk7aWYoZS5lYWNoKHIsZnVuY3Rpb24oZSx0KXt2YXIgcz10WzFdO3JldHVybiBpLnN1YnN0cihoLHMubGVuZ3RoKS50b0xvd2VyQ2FzZSgpPT09cy50b0xvd2VyQ2FzZSgpPyhuPXRbMF0saCs9cy5sZW5ndGgsITEpOnZvaWQgMH0pLC0xIT09bilyZXR1cm4gbisxO3Rocm93IlVua25vd24gbmFtZSBhdCBwb3NpdGlvbiAiK2h9LHc9ZnVuY3Rpb24oKXtpZihpLmNoYXJBdChoKSE9PXQuY2hhckF0KGEpKXRocm93IlVuZXhwZWN0ZWQgbGl0ZXJhbCBhdCBwb3NpdGlvbiAiK2g7aCsrfTtmb3IoYT0wO3QubGVuZ3RoPmE7YSsrKWlmKGIpIiciIT09dC5jaGFyQXQoYSl8fF8oIiciKT93KCk6Yj0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdChhKSl7Y2FzZSJkIjp2PXgoImQiKTticmVhaztjYXNlIkQiOmsoIkQiLGQsYyk7YnJlYWs7Y2FzZSJvIjp5PXgoIm8iKTticmVhaztjYXNlIm0iOmc9eCgibSIpO2JyZWFrO2Nhc2UiTSI6Zz1rKCJNIixwLGYpO2JyZWFrO2Nhc2UieSI6bT14KCJ5Iik7YnJlYWs7Y2FzZSJAIjpvPW5ldyBEYXRlKHgoIkAiKSksbT1vLmdldEZ1bGxZZWFyKCksZz1vLmdldE1vbnRoKCkrMSx2PW8uZ2V0RGF0ZSgpO2JyZWFrO2Nhc2UiISI6bz1uZXcgRGF0ZSgoeCgiISIpLXRoaXMuX3RpY2tzVG8xOTcwKS8xZTQpLG09by5nZXRGdWxsWWVhcigpLGc9by5nZXRNb250aCgpKzEsdj1vLmdldERhdGUoKTticmVhaztjYXNlIiciOl8oIiciKT93KCk6Yj0hMDticmVhaztkZWZhdWx0OncoKX1pZihpLmxlbmd0aD5oJiYocj1pLnN1YnN0cihoKSwhL15ccysvLnRlc3QocikpKXRocm93IkV4dHJhL3VucGFyc2VkIGNoYXJhY3RlcnMgZm91bmQgaW4gZGF0ZTogIityO2lmKC0xPT09bT9tPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKToxMDA+bSYmKG0rPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKS0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCklMTAwKyh1Pj1tPzA6LTEwMCkpLHk+LTEpZm9yKGc9MSx2PXk7Oyl7aWYobj10aGlzLl9nZXREYXlzSW5Nb250aChtLGctMSksbj49dilicmVhaztnKyssdi09bn1pZihvPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKG0sZy0xLHYpKSxvLmdldEZ1bGxZZWFyKCkhPT1tfHxvLmdldE1vbnRoKCkrMSE9PWd8fG8uZ2V0RGF0ZSgpIT09dil0aHJvdyJJbnZhbGlkIGRhdGUiO3JldHVybiBvfSxBVE9NOiJ5eS1tbS1kZCIsQ09PS0lFOiJELCBkZCBNIHl5IixJU09fODYwMToieXktbW0tZGQiLFJGQ184MjI6IkQsIGQgTSB5IixSRkNfODUwOiJERCwgZGQtTS15IixSRkNfMTAzNjoiRCwgZCBNIHkiLFJGQ18xMTIzOiJELCBkIE0geXkiLFJGQ18yODIyOiJELCBkIE0geXkiLFJTUzoiRCwgZCBNIHkiLFRJQ0tTOiIhIixUSU1FU1RBTVA6IkAiLFczQzoieXktbW0tZGQiLF90aWNrc1RvMTk3MDoxZTcqNjAqNjAqMjQqKDcxODY4NStNYXRoLmZsb29yKDQ5Mi41KS1NYXRoLmZsb29yKDE5LjcpK01hdGguZmxvb3IoNC45MjUpKSxmb3JtYXREYXRlOmZ1bmN0aW9uKGUsdCxpKXtpZighdClyZXR1cm4iIjt2YXIgcyxhPShpP2kuZGF5TmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXNTaG9ydCxuPShpP2kuZGF5TmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzLHI9KGk/aS5tb250aE5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXNTaG9ydCxvPShpP2kubW9udGhOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lcyxoPWZ1bmN0aW9uKHQpe3ZhciBpPWUubGVuZ3RoPnMrMSYmZS5jaGFyQXQocysxKT09PXQ7cmV0dXJuIGkmJnMrKyxpfSxsPWZ1bmN0aW9uKGUsdCxpKXt2YXIgcz0iIit0O2lmKGgoZSkpZm9yKDtpPnMubGVuZ3RoOylzPSIwIitzO3JldHVybiBzfSx1PWZ1bmN0aW9uKGUsdCxpLHMpe3JldHVybiBoKGUpP3NbdF06aVt0XX0sZD0iIixjPSExO2lmKHQpZm9yKHM9MDtlLmxlbmd0aD5zO3MrKylpZihjKSInIiE9PWUuY2hhckF0KHMpfHxoKCInIik/ZCs9ZS5jaGFyQXQocyk6Yz0hMTtlbHNlIHN3aXRjaChlLmNoYXJBdChzKSl7Y2FzZSJkIjpkKz1sKCJkIix0LmdldERhdGUoKSwyKTticmVhaztjYXNlIkQiOmQrPXUoIkQiLHQuZ2V0RGF5KCksYSxuKTticmVhaztjYXNlIm8iOmQrPWwoIm8iLE1hdGgucm91bmQoKG5ldyBEYXRlKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCksdC5nZXREYXRlKCkpLmdldFRpbWUoKS1uZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksMCwwKS5nZXRUaW1lKCkpLzg2NGU1KSwzKTticmVhaztjYXNlIm0iOmQrPWwoIm0iLHQuZ2V0TW9udGgoKSsxLDIpO2JyZWFrO2Nhc2UiTSI6ZCs9dSgiTSIsdC5nZXRNb250aCgpLHIsbyk7YnJlYWs7Y2FzZSJ5IjpkKz1oKCJ5Iik/dC5nZXRGdWxsWWVhcigpOigxMD50LmdldFllYXIoKSUxMDA/IjAiOiIiKSt0LmdldFllYXIoKSUxMDA7YnJlYWs7Y2FzZSJAIjpkKz10LmdldFRpbWUoKTticmVhaztjYXNlIiEiOmQrPTFlNCp0LmdldFRpbWUoKSt0aGlzLl90aWNrc1RvMTk3MDticmVhaztjYXNlIiciOmgoIiciKT9kKz0iJyI6Yz0hMDticmVhaztkZWZhdWx0OmQrPWUuY2hhckF0KHMpfXJldHVybiBkfSxfcG9zc2libGVDaGFyczpmdW5jdGlvbihlKXt2YXIgdCxpPSIiLHM9ITEsYT1mdW5jdGlvbihpKXt2YXIgcz1lLmxlbmd0aD50KzEmJmUuY2hhckF0KHQrMSk9PT1pO3JldHVybiBzJiZ0Kyssc307Zm9yKHQ9MDtlLmxlbmd0aD50O3QrKylpZihzKSInIiE9PWUuY2hhckF0KHQpfHxhKCInIik/aSs9ZS5jaGFyQXQodCk6cz0hMTtlbHNlIHN3aXRjaChlLmNoYXJBdCh0KSl7Y2FzZSJkIjpjYXNlIm0iOmNhc2UieSI6Y2FzZSJAIjppKz0iMDEyMzQ1Njc4OSI7YnJlYWs7Y2FzZSJEIjpjYXNlIk0iOnJldHVybiBudWxsO2Nhc2UiJyI6YSgiJyIpP2krPSInIjpzPSEwO2JyZWFrO2RlZmF1bHQ6aSs9ZS5jaGFyQXQodCl9cmV0dXJuIGl9LF9nZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwIT09ZS5zZXR0aW5nc1t0XT9lLnNldHRpbmdzW3RdOnRoaXMuX2RlZmF1bHRzW3RdfSxfc2V0RGF0ZUZyb21GaWVsZDpmdW5jdGlvbihlLHQpe2lmKGUuaW5wdXQudmFsKCkhPT1lLmxhc3RWYWwpe3ZhciBpPXRoaXMuX2dldChlLCJkYXRlRm9ybWF0Iikscz1lLmxhc3RWYWw9ZS5pbnB1dD9lLmlucHV0LnZhbCgpOm51bGwsYT10aGlzLl9nZXREZWZhdWx0RGF0ZShlKSxuPWEscj10aGlzLl9nZXRGb3JtYXRDb25maWcoZSk7dHJ5e249dGhpcy5wYXJzZURhdGUoaSxzLHIpfHxhfWNhdGNoKG8pe3M9dD8iIjpzfWUuc2VsZWN0ZWREYXk9bi5nZXREYXRlKCksZS5kcmF3TW9udGg9ZS5zZWxlY3RlZE1vbnRoPW4uZ2V0TW9udGgoKSxlLmRyYXdZZWFyPWUuc2VsZWN0ZWRZZWFyPW4uZ2V0RnVsbFllYXIoKSxlLmN1cnJlbnREYXk9cz9uLmdldERhdGUoKTowLGUuY3VycmVudE1vbnRoPXM/bi5nZXRNb250aCgpOjAsZS5jdXJyZW50WWVhcj1zP24uZ2V0RnVsbFllYXIoKTowLHRoaXMuX2FkanVzdEluc3REYXRlKGUpfX0sX2dldERlZmF1bHREYXRlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yZXN0cmljdE1pbk1heChlLHRoaXMuX2RldGVybWluZURhdGUoZSx0aGlzLl9nZXQoZSwiZGVmYXVsdERhdGUiKSxuZXcgRGF0ZSkpfSxfZGV0ZXJtaW5lRGF0ZTpmdW5jdGlvbih0LGkscyl7dmFyIGE9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IERhdGU7cmV0dXJuIHQuc2V0RGF0ZSh0LmdldERhdGUoKStlKSx0fSxuPWZ1bmN0aW9uKGkpe3RyeXtyZXR1cm4gZS5kYXRlcGlja2VyLnBhcnNlRGF0ZShlLmRhdGVwaWNrZXIuX2dldCh0LCJkYXRlRm9ybWF0IiksaSxlLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyh0KSl9Y2F0Y2gocyl7fWZvcih2YXIgYT0oaS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9eYy8pP2UuZGF0ZXBpY2tlci5fZ2V0RGF0ZSh0KTpudWxsKXx8bmV3IERhdGUsbj1hLmdldEZ1bGxZZWFyKCkscj1hLmdldE1vbnRoKCksbz1hLmdldERhdGUoKSxoPS8oWytcLV0/WzAtOV0rKVxzKihkfER8d3xXfG18TXx5fFkpPy9nLGw9aC5leGVjKGkpO2w7KXtzd2l0Y2gobFsyXXx8ImQiKXtjYXNlImQiOmNhc2UiRCI6bys9cGFyc2VJbnQobFsxXSwxMCk7YnJlYWs7Y2FzZSJ3IjpjYXNlIlciOm8rPTcqcGFyc2VJbnQobFsxXSwxMCk7YnJlYWs7Y2FzZSJtIjpjYXNlIk0iOnIrPXBhcnNlSW50KGxbMV0sMTApLG89TWF0aC5taW4obyxlLmRhdGVwaWNrZXIuX2dldERheXNJbk1vbnRoKG4scikpO2JyZWFrO2Nhc2UieSI6Y2FzZSJZIjpuKz1wYXJzZUludChsWzFdLDEwKSxvPU1hdGgubWluKG8sZS5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aChuLHIpKX1sPWguZXhlYyhpKX1yZXR1cm4gbmV3IERhdGUobixyLG8pfSxyPW51bGw9PWl8fCIiPT09aT9zOiJzdHJpbmciPT10eXBlb2YgaT9uKGkpOiJudW1iZXIiPT10eXBlb2YgaT9pc05hTihpKT9zOmEoaSk6bmV3IERhdGUoaS5nZXRUaW1lKCkpO3JldHVybiByPXImJiJJbnZhbGlkIERhdGUiPT0iIityP3M6cixyJiYoci5zZXRIb3VycygwKSxyLnNldE1pbnV0ZXMoMCksci5zZXRTZWNvbmRzKDApLHIuc2V0TWlsbGlzZWNvbmRzKDApKSx0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChyKX0sX2RheWxpZ2h0U2F2aW5nQWRqdXN0OmZ1bmN0aW9uKGUpe3JldHVybiBlPyhlLnNldEhvdXJzKGUuZ2V0SG91cnMoKT4xMj9lLmdldEhvdXJzKCkrMjowKSxlKTpudWxsfSxfc2V0RGF0ZTpmdW5jdGlvbihlLHQsaSl7dmFyIHM9IXQsYT1lLnNlbGVjdGVkTW9udGgsbj1lLnNlbGVjdGVkWWVhcixyPXRoaXMuX3Jlc3RyaWN0TWluTWF4KGUsdGhpcy5fZGV0ZXJtaW5lRGF0ZShlLHQsbmV3IERhdGUpKTtlLnNlbGVjdGVkRGF5PWUuY3VycmVudERheT1yLmdldERhdGUoKSxlLmRyYXdNb250aD1lLnNlbGVjdGVkTW9udGg9ZS5jdXJyZW50TW9udGg9ci5nZXRNb250aCgpLGUuZHJhd1llYXI9ZS5zZWxlY3RlZFllYXI9ZS5jdXJyZW50WWVhcj1yLmdldEZ1bGxZZWFyKCksYT09PWUuc2VsZWN0ZWRNb250aCYmbj09PWUuc2VsZWN0ZWRZZWFyfHxpfHx0aGlzLl9ub3RpZnlDaGFuZ2UoZSksdGhpcy5fYWRqdXN0SW5zdERhdGUoZSksZS5pbnB1dCYmZS5pbnB1dC52YWwocz8iIjp0aGlzLl9mb3JtYXREYXRlKGUpKX0sX2dldERhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9IWUuY3VycmVudFllYXJ8fGUuaW5wdXQmJiIiPT09ZS5pbnB1dC52YWwoKT9udWxsOnRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGUuY3VycmVudFllYXIsZS5jdXJyZW50TW9udGgsZS5jdXJyZW50RGF5KSk7cmV0dXJuIHR9LF9hdHRhY2hIYW5kbGVyczpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9nZXQodCwic3RlcE1vbnRocyIpLHM9IiMiK3QuaWQucmVwbGFjZSgvXFxcXC9nLCJcXCIpO3QuZHBEaXYuZmluZCgiW2RhdGEtaGFuZGxlcl0iKS5tYXAoZnVuY3Rpb24oKXt2YXIgdD17cHJldjpmdW5jdGlvbigpe2UuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShzLC1pLCJNIil9LG5leHQ6ZnVuY3Rpb24oKXtlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUocywraSwiTSIpfSxoaWRlOmZ1bmN0aW9uKCl7ZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpfSx0b2RheTpmdW5jdGlvbigpe2UuZGF0ZXBpY2tlci5fZ290b1RvZGF5KHMpfSxzZWxlY3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4gZS5kYXRlcGlja2VyLl9zZWxlY3REYXkocywrdGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtbW9udGgiKSwrdGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEteWVhciIpLHRoaXMpLCExfSxzZWxlY3RNb250aDpmdW5jdGlvbigpe3JldHVybiBlLmRhdGVwaWNrZXIuX3NlbGVjdE1vbnRoWWVhcihzLHRoaXMsIk0iKSwhMX0sc2VsZWN0WWVhcjpmdW5jdGlvbigpe3JldHVybiBlLmRhdGVwaWNrZXIuX3NlbGVjdE1vbnRoWWVhcihzLHRoaXMsIlkiKSwhMX19O2UodGhpcykuYmluZCh0aGlzLmdldEF0dHJpYnV0ZSgiZGF0YS1ldmVudCIpLHRbdGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtaGFuZGxlciIpXSl9KX0sX2dlbmVyYXRlSFRNTDpmdW5jdGlvbihlKXt2YXIgdCxpLHMsYSxuLHIsbyxoLGwsdSxkLGMscCxmLG0sZyx2LHksYixfLHgsayx3LFQsUyxELE4sTSxDLEEsUCxJLEgsRixqLHosRSxPLEwsVz1uZXcgRGF0ZSxSPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKFcuZ2V0RnVsbFllYXIoKSxXLmdldE1vbnRoKCksVy5nZXREYXRlKCkpKSxZPXRoaXMuX2dldChlLCJpc1JUTCIpLEo9dGhpcy5fZ2V0KGUsInNob3dCdXR0b25QYW5lbCIpLEI9dGhpcy5fZ2V0KGUsImhpZGVJZk5vUHJldk5leHQiKSxLPXRoaXMuX2dldChlLCJuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0IiksVj10aGlzLl9nZXROdW1iZXJPZk1vbnRocyhlKSxxPXRoaXMuX2dldChlLCJzaG93Q3VycmVudEF0UG9zIiksUT10aGlzLl9nZXQoZSwic3RlcE1vbnRocyIpLFU9MSE9PVZbMF18fDEhPT1WWzFdLEc9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoZS5jdXJyZW50RGF5P25ldyBEYXRlKGUuY3VycmVudFllYXIsZS5jdXJyZW50TW9udGgsZS5jdXJyZW50RGF5KTpuZXcgRGF0ZSg5OTk5LDksOSkpLFg9dGhpcy5fZ2V0TWluTWF4RGF0ZShlLCJtaW4iKSwkPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWF4IiksWj1lLmRyYXdNb250aC1xLGV0PWUuZHJhd1llYXI7aWYoMD5aJiYoWis9MTIsZXQtLSksJClmb3IodD10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSgkLmdldEZ1bGxZZWFyKCksJC5nZXRNb250aCgpLVZbMF0qVlsxXSsxLCQuZ2V0RGF0ZSgpKSksdD1YJiZYPnQ/WDp0O3RoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGV0LFosMSkpPnQ7KVotLSwwPlomJihaPTExLGV0LS0pO2ZvcihlLmRyYXdNb250aD1aLGUuZHJhd1llYXI9ZXQsaT10aGlzLl9nZXQoZSwicHJldlRleHQiKSxpPUs/dGhpcy5mb3JtYXREYXRlKGksdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZXQsWi1RLDEpKSx0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpOmkscz10aGlzLl9jYW5BZGp1c3RNb250aChlLC0xLGV0LFopPyI8YSBjbGFzcz0ndWktZGF0ZXBpY2tlci1wcmV2IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0ncHJldicgZGF0YS1ldmVudD0nY2xpY2snIHRpdGxlPSciK2krIic+PHNwYW4gY2xhc3M9J3VpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtIisoWT8iZSI6InciKSsiJz4iK2krIjwvc3Bhbj48L2E+IjpCPyIiOiI8YSBjbGFzcz0ndWktZGF0ZXBpY2tlci1wcmV2IHVpLWNvcm5lci1hbGwgdWktc3RhdGUtZGlzYWJsZWQnIHRpdGxlPSciK2krIic+PHNwYW4gY2xhc3M9J3VpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtIisoWT8iZSI6InciKSsiJz4iK2krIjwvc3Bhbj48L2E+IixhPXRoaXMuX2dldChlLCJuZXh0VGV4dCIpLGE9Sz90aGlzLmZvcm1hdERhdGUoYSx0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShldCxaK1EsMSkpLHRoaXMuX2dldEZvcm1hdENvbmZpZyhlKSk6YSxuPXRoaXMuX2NhbkFkanVzdE1vbnRoKGUsMSxldCxaKT8iPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItbmV4dCB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J25leHQnIGRhdGEtZXZlbnQ9J2NsaWNrJyB0aXRsZT0nIithKyInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLSIrKFk/InciOiJlIikrIic+IithKyI8L3NwYW4+PC9hPiI6Qj8iIjoiPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItbmV4dCB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWRpc2FibGVkJyB0aXRsZT0nIithKyInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLSIrKFk/InciOiJlIikrIic+IithKyI8L3NwYW4+PC9hPiIscj10aGlzLl9nZXQoZSwiY3VycmVudFRleHQiKSxvPXRoaXMuX2dldChlLCJnb3RvQ3VycmVudCIpJiZlLmN1cnJlbnREYXk/RzpSLHI9Sz90aGlzLmZvcm1hdERhdGUocixvLHRoaXMuX2dldEZvcm1hdENvbmZpZyhlKSk6cixoPWUuaW5saW5lPyIiOiI8YnV0dG9uIHR5cGU9J2J1dHRvbicgY2xhc3M9J3VpLWRhdGVwaWNrZXItY2xvc2UgdWktc3RhdGUtZGVmYXVsdCB1aS1wcmlvcml0eS1wcmltYXJ5IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0naGlkZScgZGF0YS1ldmVudD0nY2xpY2snPiIrdGhpcy5fZ2V0KGUsImNsb3NlVGV4dCIpKyI8L2J1dHRvbj4iLGw9Sj8iPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci1idXR0b25wYW5lIHVpLXdpZGdldC1jb250ZW50Jz4iKyhZP2g6IiIpKyh0aGlzLl9pc0luUmFuZ2UoZSxvKT8iPGJ1dHRvbiB0eXBlPSdidXR0b24nIGNsYXNzPSd1aS1kYXRlcGlja2VyLWN1cnJlbnQgdWktc3RhdGUtZGVmYXVsdCB1aS1wcmlvcml0eS1zZWNvbmRhcnkgdWktY29ybmVyLWFsbCcgZGF0YS1oYW5kbGVyPSd0b2RheScgZGF0YS1ldmVudD0nY2xpY2snPiIrcisiPC9idXR0b24+IjoiIikrKFk/IiI6aCkrIjwvZGl2PiI6IiIsdT1wYXJzZUludCh0aGlzLl9nZXQoZSwiZmlyc3REYXkiKSwxMCksdT1pc05hTih1KT8wOnUsZD10aGlzLl9nZXQoZSwic2hvd1dlZWsiKSxjPXRoaXMuX2dldChlLCJkYXlOYW1lcyIpLHA9dGhpcy5fZ2V0KGUsImRheU5hbWVzTWluIiksZj10aGlzLl9nZXQoZSwibW9udGhOYW1lcyIpLG09dGhpcy5fZ2V0KGUsIm1vbnRoTmFtZXNTaG9ydCIpLGc9dGhpcy5fZ2V0KGUsImJlZm9yZVNob3dEYXkiKSx2PXRoaXMuX2dldChlLCJzaG93T3RoZXJNb250aHMiKSx5PXRoaXMuX2dldChlLCJzZWxlY3RPdGhlck1vbnRocyIpLGI9dGhpcy5fZ2V0RGVmYXVsdERhdGUoZSksXz0iIixrPTA7VlswXT5rO2srKyl7Zm9yKHc9IiIsdGhpcy5tYXhSb3dzPTQsVD0wO1ZbMV0+VDtUKyspe2lmKFM9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZXQsWixlLnNlbGVjdGVkRGF5KSksRD0iIHVpLWNvcm5lci1hbGwiLE49IiIsVSl7aWYoTis9IjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItZ3JvdXAiLFZbMV0+MSlzd2l0Y2goVCl7Y2FzZSAwOk4rPSIgdWktZGF0ZXBpY2tlci1ncm91cC1maXJzdCIsRD0iIHVpLWNvcm5lci0iKyhZPyJyaWdodCI6ImxlZnQiKTsKK2JyZWFrO2Nhc2UgVlsxXS0xOk4rPSIgdWktZGF0ZXBpY2tlci1ncm91cC1sYXN0IixEPSIgdWktY29ybmVyLSIrKFk/ImxlZnQiOiJyaWdodCIpO2JyZWFrO2RlZmF1bHQ6Tis9IiB1aS1kYXRlcGlja2VyLWdyb3VwLW1pZGRsZSIsRD0iIn1OKz0iJz4ifWZvcihOKz0iPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci1oZWFkZXIgdWktd2lkZ2V0LWhlYWRlciB1aS1oZWxwZXItY2xlYXJmaXgiK0QrIic+IisoL2FsbHxsZWZ0Ly50ZXN0KEQpJiYwPT09az9ZP246czoiIikrKC9hbGx8cmlnaHQvLnRlc3QoRCkmJjA9PT1rP1k/czpuOiIiKSt0aGlzLl9nZW5lcmF0ZU1vbnRoWWVhckhlYWRlcihlLFosZXQsWCwkLGs+MHx8VD4wLGYsbSkrIjwvZGl2Pjx0YWJsZSBjbGFzcz0ndWktZGF0ZXBpY2tlci1jYWxlbmRhcic+PHRoZWFkPiIrIjx0cj4iLE09ZD8iPHRoIGNsYXNzPSd1aS1kYXRlcGlja2VyLXdlZWstY29sJz4iK3RoaXMuX2dldChlLCJ3ZWVrSGVhZGVyIikrIjwvdGg+IjoiIix4PTA7Nz54O3grKylDPSh4K3UpJTcsTSs9Ijx0aCBzY29wZT0nY29sJyIrKCh4K3UrNiklNz49NT8iIGNsYXNzPSd1aS1kYXRlcGlja2VyLXdlZWstZW5kJyI6IiIpKyI+IisiPHNwYW4gdGl0bGU9JyIrY1tDXSsiJz4iK3BbQ10rIjwvc3Bhbj48L3RoPiI7Zm9yKE4rPU0rIjwvdHI+PC90aGVhZD48dGJvZHk+IixBPXRoaXMuX2dldERheXNJbk1vbnRoKGV0LFopLGV0PT09ZS5zZWxlY3RlZFllYXImJlo9PT1lLnNlbGVjdGVkTW9udGgmJihlLnNlbGVjdGVkRGF5PU1hdGgubWluKGUuc2VsZWN0ZWREYXksQSkpLFA9KHRoaXMuX2dldEZpcnN0RGF5T2ZNb250aChldCxaKS11KzcpJTcsST1NYXRoLmNlaWwoKFArQSkvNyksSD1VP3RoaXMubWF4Um93cz5JP3RoaXMubWF4Um93czpJOkksdGhpcy5tYXhSb3dzPUgsRj10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShldCxaLDEtUCkpLGo9MDtIPmo7aisrKXtmb3IoTis9Ijx0cj4iLHo9ZD8iPHRkIGNsYXNzPSd1aS1kYXRlcGlja2VyLXdlZWstY29sJz4iK3RoaXMuX2dldChlLCJjYWxjdWxhdGVXZWVrIikoRikrIjwvdGQ+IjoiIix4PTA7Nz54O3grKylFPWc/Zy5hcHBseShlLmlucHV0P2UuaW5wdXRbMF06bnVsbCxbRl0pOlshMCwiIl0sTz1GLmdldE1vbnRoKCkhPT1aLEw9TyYmIXl8fCFFWzBdfHxYJiZYPkZ8fCQmJkY+JCx6Kz0iPHRkIGNsYXNzPSciKygoeCt1KzYpJTc+PTU/IiB1aS1kYXRlcGlja2VyLXdlZWstZW5kIjoiIikrKE8/IiB1aS1kYXRlcGlja2VyLW90aGVyLW1vbnRoIjoiIikrKEYuZ2V0VGltZSgpPT09Uy5nZXRUaW1lKCkmJlo9PT1lLnNlbGVjdGVkTW9udGgmJmUuX2tleUV2ZW50fHxiLmdldFRpbWUoKT09PUYuZ2V0VGltZSgpJiZiLmdldFRpbWUoKT09PVMuZ2V0VGltZSgpPyIgIit0aGlzLl9kYXlPdmVyQ2xhc3M6IiIpKyhMPyIgIit0aGlzLl91bnNlbGVjdGFibGVDbGFzcysiIHVpLXN0YXRlLWRpc2FibGVkIjoiIikrKE8mJiF2PyIiOiIgIitFWzFdKyhGLmdldFRpbWUoKT09PUcuZ2V0VGltZSgpPyIgIit0aGlzLl9jdXJyZW50Q2xhc3M6IiIpKyhGLmdldFRpbWUoKT09PVIuZ2V0VGltZSgpPyIgdWktZGF0ZXBpY2tlci10b2RheSI6IiIpKSsiJyIrKE8mJiF2fHwhRVsyXT8iIjoiIHRpdGxlPSciK0VbMl0ucmVwbGFjZSgvJy9nLCImIzM5OyIpKyInIikrKEw/IiI6IiBkYXRhLWhhbmRsZXI9J3NlbGVjdERheScgZGF0YS1ldmVudD0nY2xpY2snIGRhdGEtbW9udGg9JyIrRi5nZXRNb250aCgpKyInIGRhdGEteWVhcj0nIitGLmdldEZ1bGxZZWFyKCkrIiciKSsiPiIrKE8mJiF2PyImI3hhMDsiOkw/IjxzcGFuIGNsYXNzPSd1aS1zdGF0ZS1kZWZhdWx0Jz4iK0YuZ2V0RGF0ZSgpKyI8L3NwYW4+IjoiPGEgY2xhc3M9J3VpLXN0YXRlLWRlZmF1bHQiKyhGLmdldFRpbWUoKT09PVIuZ2V0VGltZSgpPyIgdWktc3RhdGUtaGlnaGxpZ2h0IjoiIikrKEYuZ2V0VGltZSgpPT09Ry5nZXRUaW1lKCk/IiB1aS1zdGF0ZS1hY3RpdmUiOiIiKSsoTz8iIHVpLXByaW9yaXR5LXNlY29uZGFyeSI6IiIpKyInIGhyZWY9JyMnPiIrRi5nZXREYXRlKCkrIjwvYT4iKSsiPC90ZD4iLEYuc2V0RGF0ZShGLmdldERhdGUoKSsxKSxGPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KEYpO04rPXorIjwvdHI+In1aKyssWj4xMSYmKFo9MCxldCsrKSxOKz0iPC90Ym9keT48L3RhYmxlPiIrKFU/IjwvZGl2PiIrKFZbMF0+MCYmVD09PVZbMV0tMT8iPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci1yb3ctYnJlYWsnPjwvZGl2PiI6IiIpOiIiKSx3Kz1OfV8rPXd9cmV0dXJuIF8rPWwsZS5fa2V5RXZlbnQ9ITEsX30sX2dlbmVyYXRlTW9udGhZZWFySGVhZGVyOmZ1bmN0aW9uKGUsdCxpLHMsYSxuLHIsbyl7dmFyIGgsbCx1LGQsYyxwLGYsbSxnPXRoaXMuX2dldChlLCJjaGFuZ2VNb250aCIpLHY9dGhpcy5fZ2V0KGUsImNoYW5nZVllYXIiKSx5PXRoaXMuX2dldChlLCJzaG93TW9udGhBZnRlclllYXIiKSxiPSI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLXRpdGxlJz4iLF89IiI7aWYobnx8IWcpXys9IjxzcGFuIGNsYXNzPSd1aS1kYXRlcGlja2VyLW1vbnRoJz4iK3JbdF0rIjwvc3Bhbj4iO2Vsc2V7Zm9yKGg9cyYmcy5nZXRGdWxsWWVhcigpPT09aSxsPWEmJmEuZ2V0RnVsbFllYXIoKT09PWksXys9IjxzZWxlY3QgY2xhc3M9J3VpLWRhdGVwaWNrZXItbW9udGgnIGRhdGEtaGFuZGxlcj0nc2VsZWN0TW9udGgnIGRhdGEtZXZlbnQ9J2NoYW5nZSc+Iix1PTA7MTI+dTt1KyspKCFofHx1Pj1zLmdldE1vbnRoKCkpJiYoIWx8fGEuZ2V0TW9udGgoKT49dSkmJihfKz0iPG9wdGlvbiB2YWx1ZT0nIit1KyInIisodT09PXQ/IiBzZWxlY3RlZD0nc2VsZWN0ZWQnIjoiIikrIj4iK29bdV0rIjwvb3B0aW9uPiIpO18rPSI8L3NlbGVjdD4ifWlmKHl8fChiKz1fKyghbiYmZyYmdj8iIjoiJiN4YTA7IikpLCFlLnllYXJzaHRtbClpZihlLnllYXJzaHRtbD0iIixufHwhdiliKz0iPHNwYW4gY2xhc3M9J3VpLWRhdGVwaWNrZXIteWVhcic+IitpKyI8L3NwYW4+IjtlbHNle2ZvcihkPXRoaXMuX2dldChlLCJ5ZWFyUmFuZ2UiKS5zcGxpdCgiOiIpLGM9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLHA9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXRjaCgvY1srXC1dLiovKT9pK3BhcnNlSW50KGUuc3Vic3RyaW5nKDEpLDEwKTplLm1hdGNoKC9bK1wtXS4qLyk/YytwYXJzZUludChlLDEwKTpwYXJzZUludChlLDEwKTtyZXR1cm4gaXNOYU4odCk/Yzp0fSxmPXAoZFswXSksbT1NYXRoLm1heChmLHAoZFsxXXx8IiIpKSxmPXM/TWF0aC5tYXgoZixzLmdldEZ1bGxZZWFyKCkpOmYsbT1hP01hdGgubWluKG0sYS5nZXRGdWxsWWVhcigpKTptLGUueWVhcnNodG1sKz0iPHNlbGVjdCBjbGFzcz0ndWktZGF0ZXBpY2tlci15ZWFyJyBkYXRhLWhhbmRsZXI9J3NlbGVjdFllYXInIGRhdGEtZXZlbnQ9J2NoYW5nZSc+IjttPj1mO2YrKyllLnllYXJzaHRtbCs9IjxvcHRpb24gdmFsdWU9JyIrZisiJyIrKGY9PT1pPyIgc2VsZWN0ZWQ9J3NlbGVjdGVkJyI6IiIpKyI+IitmKyI8L29wdGlvbj4iO2UueWVhcnNodG1sKz0iPC9zZWxlY3Q+IixiKz1lLnllYXJzaHRtbCxlLnllYXJzaHRtbD1udWxsfXJldHVybiBiKz10aGlzLl9nZXQoZSwieWVhclN1ZmZpeCIpLHkmJihiKz0oIW4mJmcmJnY/IiI6IiYjeGEwOyIpK18pLGIrPSI8L2Rpdj4ifSxfYWRqdXN0SW5zdERhdGU6ZnVuY3Rpb24oZSx0LGkpe3ZhciBzPWUuZHJhd1llYXIrKCJZIj09PWk/dDowKSxhPWUuZHJhd01vbnRoKygiTSI9PT1pP3Q6MCksbj1NYXRoLm1pbihlLnNlbGVjdGVkRGF5LHRoaXMuX2dldERheXNJbk1vbnRoKHMsYSkpKygiRCI9PT1pP3Q6MCkscj10aGlzLl9yZXN0cmljdE1pbk1heChlLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHMsYSxuKSkpO2Uuc2VsZWN0ZWREYXk9ci5nZXREYXRlKCksZS5kcmF3TW9udGg9ZS5zZWxlY3RlZE1vbnRoPXIuZ2V0TW9udGgoKSxlLmRyYXdZZWFyPWUuc2VsZWN0ZWRZZWFyPXIuZ2V0RnVsbFllYXIoKSwoIk0iPT09aXx8IlkiPT09aSkmJnRoaXMuX25vdGlmeUNoYW5nZShlKX0sX3Jlc3RyaWN0TWluTWF4OmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5fZ2V0TWluTWF4RGF0ZShlLCJtaW4iKSxzPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWF4IiksYT1pJiZpPnQ/aTp0O3JldHVybiBzJiZhPnM/czphfSxfbm90aWZ5Q2hhbmdlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldChlLCJvbkNoYW5nZU1vbnRoWWVhciIpO3QmJnQuYXBwbHkoZS5pbnB1dD9lLmlucHV0WzBdOm51bGwsW2Uuc2VsZWN0ZWRZZWFyLGUuc2VsZWN0ZWRNb250aCsxLGVdKX0sX2dldE51bWJlck9mTW9udGhzOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldChlLCJudW1iZXJPZk1vbnRocyIpO3JldHVybiBudWxsPT10P1sxLDFdOiJudW1iZXIiPT10eXBlb2YgdD9bMSx0XTp0fSxfZ2V0TWluTWF4RGF0ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9kZXRlcm1pbmVEYXRlKGUsdGhpcy5fZ2V0KGUsdCsiRGF0ZSIpLG51bGwpfSxfZ2V0RGF5c0luTW9udGg6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMzItdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZSx0LDMyKSkuZ2V0RGF0ZSgpfSxfZ2V0Rmlyc3REYXlPZk1vbnRoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBEYXRlKGUsdCwxKS5nZXREYXkoKX0sX2NhbkFkanVzdE1vbnRoOmZ1bmN0aW9uKGUsdCxpLHMpe3ZhciBhPXRoaXMuX2dldE51bWJlck9mTW9udGhzKGUpLG49dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoaSxzKygwPnQ/dDphWzBdKmFbMV0pLDEpKTtyZXR1cm4gMD50JiZuLnNldERhdGUodGhpcy5fZ2V0RGF5c0luTW9udGgobi5nZXRGdWxsWWVhcigpLG4uZ2V0TW9udGgoKSkpLHRoaXMuX2lzSW5SYW5nZShlLG4pfSxfaXNJblJhbmdlOmZ1bmN0aW9uKGUsdCl7dmFyIGkscyxhPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWluIiksbj10aGlzLl9nZXRNaW5NYXhEYXRlKGUsIm1heCIpLHI9bnVsbCxvPW51bGwsaD10aGlzLl9nZXQoZSwieWVhclJhbmdlIik7cmV0dXJuIGgmJihpPWguc3BsaXQoIjoiKSxzPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSxyPXBhcnNlSW50KGlbMF0sMTApLG89cGFyc2VJbnQoaVsxXSwxMCksaVswXS5tYXRjaCgvWytcLV0uKi8pJiYocis9cyksaVsxXS5tYXRjaCgvWytcLV0uKi8pJiYobys9cykpLCghYXx8dC5nZXRUaW1lKCk+PWEuZ2V0VGltZSgpKSYmKCFufHx0LmdldFRpbWUoKTw9bi5nZXRUaW1lKCkpJiYoIXJ8fHQuZ2V0RnVsbFllYXIoKT49cikmJighb3x8bz49dC5nZXRGdWxsWWVhcigpKX0sX2dldEZvcm1hdENvbmZpZzpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nZXQoZSwic2hvcnRZZWFyQ3V0b2ZmIik7cmV0dXJuIHQ9InN0cmluZyIhPXR5cGVvZiB0P3Q6KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpJTEwMCtwYXJzZUludCh0LDEwKSx7c2hvcnRZZWFyQ3V0b2ZmOnQsZGF5TmFtZXNTaG9ydDp0aGlzLl9nZXQoZSwiZGF5TmFtZXNTaG9ydCIpLGRheU5hbWVzOnRoaXMuX2dldChlLCJkYXlOYW1lcyIpLG1vbnRoTmFtZXNTaG9ydDp0aGlzLl9nZXQoZSwibW9udGhOYW1lc1Nob3J0IiksbW9udGhOYW1lczp0aGlzLl9nZXQoZSwibW9udGhOYW1lcyIpfX0sX2Zvcm1hdERhdGU6ZnVuY3Rpb24oZSx0LGkscyl7dHx8KGUuY3VycmVudERheT1lLnNlbGVjdGVkRGF5LGUuY3VycmVudE1vbnRoPWUuc2VsZWN0ZWRNb250aCxlLmN1cnJlbnRZZWFyPWUuc2VsZWN0ZWRZZWFyKTt2YXIgYT10PyJvYmplY3QiPT10eXBlb2YgdD90OnRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHMsaSx0KSk6dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZS5jdXJyZW50WWVhcixlLmN1cnJlbnRNb250aCxlLmN1cnJlbnREYXkpKTtyZXR1cm4gdGhpcy5mb3JtYXREYXRlKHRoaXMuX2dldChlLCJkYXRlRm9ybWF0IiksYSx0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpfX0pLGUuZm4uZGF0ZXBpY2tlcj1mdW5jdGlvbih0KXtpZighdGhpcy5sZW5ndGgpcmV0dXJuIHRoaXM7ZS5kYXRlcGlja2VyLmluaXRpYWxpemVkfHwoZShkb2N1bWVudCkubW91c2Vkb3duKGUuZGF0ZXBpY2tlci5fY2hlY2tFeHRlcm5hbENsaWNrKSxlLmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWQ9ITApLDA9PT1lKCIjIitlLmRhdGVwaWNrZXIuX21haW5EaXZJZCkubGVuZ3RoJiZlKCJib2R5IikuYXBwZW5kKGUuZGF0ZXBpY2tlci5kcERpdik7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiJzdHJpbmciIT10eXBlb2YgdHx8ImlzRGlzYWJsZWQiIT09dCYmImdldERhdGUiIT09dCYmIndpZGdldCIhPT10PyJvcHRpb24iPT09dCYmMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgYXJndW1lbnRzWzFdP2UuZGF0ZXBpY2tlclsiXyIrdCsiRGF0ZXBpY2tlciJdLmFwcGx5KGUuZGF0ZXBpY2tlcixbdGhpc1swXV0uY29uY2F0KGkpKTp0aGlzLmVhY2goZnVuY3Rpb24oKXsic3RyaW5nIj09dHlwZW9mIHQ/ZS5kYXRlcGlja2VyWyJfIit0KyJEYXRlcGlja2VyIl0uYXBwbHkoZS5kYXRlcGlja2VyLFt0aGlzXS5jb25jYXQoaSkpOmUuZGF0ZXBpY2tlci5fYXR0YWNoRGF0ZXBpY2tlcih0aGlzLHQpfSk6ZS5kYXRlcGlja2VyWyJfIit0KyJEYXRlcGlja2VyIl0uYXBwbHkoZS5kYXRlcGlja2VyLFt0aGlzWzBdXS5jb25jYXQoaSkpfSxlLmRhdGVwaWNrZXI9bmV3IGEsZS5kYXRlcGlja2VyLmluaXRpYWxpemVkPSExLGUuZGF0ZXBpY2tlci51dWlkPShuZXcgRGF0ZSkuZ2V0VGltZSgpLGUuZGF0ZXBpY2tlci52ZXJzaW9uPSIxLjExLjQiLGUuZGF0ZXBpY2tlcn0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnkuY29va2llLmpzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2pxdWVyeS5jb29raWUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI3MTkwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnkuY29va2llLmpzCkBAIC0wLDAgKzEsMTE3IEBACisvKiEKKyAqIGpRdWVyeSBDb29raWUgUGx1Z2luIHYxLjQuMAorICogaHR0cHM6Ly9naXRodWIuY29tL2NhcmhhcnRsL2pxdWVyeS1jb29raWUKKyAqCisgKiBDb3B5cmlnaHQgMjAxMyBLbGF1cyBIYXJ0bAorICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCisgKi8KKyhmdW5jdGlvbiAoZmFjdG9yeSkgeworCWlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHsKKwkJLy8gQU1ELiBSZWdpc3RlciBhcyBhbm9ueW1vdXMgbW9kdWxlLgorCQlkZWZpbmUoWydqcXVlcnknXSwgZmFjdG9yeSk7CisJfSBlbHNlIHsKKwkJLy8gQnJvd3NlciBnbG9iYWxzLgorCQlmYWN0b3J5KGpRdWVyeSk7CisJfQorfShmdW5jdGlvbiAoJCkgeworCisJdmFyIHBsdXNlcyA9IC9cKy9nOworCisJZnVuY3Rpb24gZW5jb2RlKHMpIHsKKwkJcmV0dXJuIGNvbmZpZy5yYXcgPyBzIDogZW5jb2RlVVJJQ29tcG9uZW50KHMpOworCX0KKworCWZ1bmN0aW9uIGRlY29kZShzKSB7CisJCXJldHVybiBjb25maWcucmF3ID8gcyA6IGRlY29kZVVSSUNvbXBvbmVudChzKTsKKwl9CisKKwlmdW5jdGlvbiBzdHJpbmdpZnlDb29raWVWYWx1ZSh2YWx1ZSkgeworCQlyZXR1cm4gZW5jb2RlKGNvbmZpZy5qc29uID8gSlNPTi5zdHJpbmdpZnkodmFsdWUpIDogU3RyaW5nKHZhbHVlKSk7CisJfQorCisJZnVuY3Rpb24gcGFyc2VDb29raWVWYWx1ZShzKSB7CisJCWlmIChzLmluZGV4T2YoJyInKSA9PT0gMCkgeworCQkJLy8gVGhpcyBpcyBhIHF1b3RlZCBjb29raWUgYXMgYWNjb3JkaW5nIHRvIFJGQzIwNjgsIHVuZXNjYXBlLi4uCisJCQlzID0gcy5zbGljZSgxLCAtMSkucmVwbGFjZSgvXFwiL2csICciJykucmVwbGFjZSgvXFxcXC9nLCAnXFwnKTsKKwkJfQorCisJCXRyeSB7CisJCQkvLyBSZXBsYWNlIHNlcnZlci1zaWRlIHdyaXR0ZW4gcGx1c2VzIHdpdGggc3BhY2VzLgorCQkJLy8gSWYgd2UgY2FuJ3QgZGVjb2RlIHRoZSBjb29raWUsIGlnbm9yZSBpdCwgaXQncyB1bnVzYWJsZS4KKwkJCXMgPSBkZWNvZGVVUklDb21wb25lbnQocy5yZXBsYWNlKHBsdXNlcywgJyAnKSk7CisJCX0gY2F0Y2goZSkgeworCQkJcmV0dXJuOworCQl9CisKKwkJdHJ5IHsKKwkJCS8vIElmIHdlIGNhbid0IHBhcnNlIHRoZSBjb29raWUsIGlnbm9yZSBpdCwgaXQncyB1bnVzYWJsZS4KKwkJCXJldHVybiBjb25maWcuanNvbiA/IEpTT04ucGFyc2UocykgOiBzOworCQl9IGNhdGNoKGUpIHt9CisJfQorCisJZnVuY3Rpb24gcmVhZChzLCBjb252ZXJ0ZXIpIHsKKwkJdmFyIHZhbHVlID0gY29uZmlnLnJhdyA/IHMgOiBwYXJzZUNvb2tpZVZhbHVlKHMpOworCQlyZXR1cm4gJC5pc0Z1bmN0aW9uKGNvbnZlcnRlcikgPyBjb252ZXJ0ZXIodmFsdWUpIDogdmFsdWU7CisJfQorCisJdmFyIGNvbmZpZyA9ICQuY29va2llID0gZnVuY3Rpb24gKGtleSwgdmFsdWUsIG9wdGlvbnMpIHsKKworCQkvLyBXcml0ZQorCQlpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhJC5pc0Z1bmN0aW9uKHZhbHVlKSkgeworCQkJb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBjb25maWcuZGVmYXVsdHMsIG9wdGlvbnMpOworCisJCQlpZiAodHlwZW9mIG9wdGlvbnMuZXhwaXJlcyA9PT0gJ251bWJlcicpIHsKKwkJCQl2YXIgZGF5cyA9IG9wdGlvbnMuZXhwaXJlcywgdCA9IG9wdGlvbnMuZXhwaXJlcyA9IG5ldyBEYXRlKCk7CisJCQkJdC5zZXREYXRlKHQuZ2V0RGF0ZSgpICsgZGF5cyk7CisJCQl9CisKKwkJCXJldHVybiAoZG9jdW1lbnQuY29va2llID0gWworCQkJCWVuY29kZShrZXkpLCAnPScsIHN0cmluZ2lmeUNvb2tpZVZhbHVlKHZhbHVlKSwKKwkJCQlvcHRpb25zLmV4cGlyZXMgPyAnOyBleHBpcmVzPScgKyBvcHRpb25zLmV4cGlyZXMudG9VVENTdHJpbmcoKSA6ICcnLCAvLyB1c2UgZXhwaXJlcyBhdHRyaWJ1dGUsIG1heC1hZ2UgaXMgbm90IHN1cHBvcnRlZCBieSBJRQorCQkJCW9wdGlvbnMucGF0aCAgICA/ICc7IHBhdGg9JyArIG9wdGlvbnMucGF0aCA6ICcnLAorCQkJCW9wdGlvbnMuZG9tYWluICA/ICc7IGRvbWFpbj0nICsgb3B0aW9ucy5kb21haW4gOiAnJywKKwkJCQlvcHRpb25zLnNlY3VyZSAgPyAnOyBzZWN1cmUnIDogJycKKwkJCV0uam9pbignJykpOworCQl9CisKKwkJLy8gUmVhZAorCisJCXZhciByZXN1bHQgPSBrZXkgPyB1bmRlZmluZWQgOiB7fTsKKworCQkvLyBUbyBwcmV2ZW50IHRoZSBmb3IgbG9vcCBpbiB0aGUgZmlyc3QgcGxhY2UgYXNzaWduIGFuIGVtcHR5IGFycmF5CisJCS8vIGluIGNhc2UgdGhlcmUgYXJlIG5vIGNvb2tpZXMgYXQgYWxsLiBBbHNvIHByZXZlbnRzIG9kZCByZXN1bHQgd2hlbgorCQkvLyBjYWxsaW5nICQuY29va2llKCkuCisJCXZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llID8gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7ICcpIDogW107CisKKwkJZm9yICh2YXIgaSA9IDAsIGwgPSBjb29raWVzLmxlbmd0aDsgaSA8IGw7IGkrKykgeworCQkJdmFyIHBhcnRzID0gY29va2llc1tpXS5zcGxpdCgnPScpOworCQkJdmFyIG5hbWUgPSBkZWNvZGUocGFydHMuc2hpZnQoKSk7CisJCQl2YXIgY29va2llID0gcGFydHMuam9pbignPScpOworCisJCQlpZiAoa2V5ICYmIGtleSA9PT0gbmFtZSkgeworCQkJCS8vIElmIHNlY29uZCBhcmd1bWVudCAodmFsdWUpIGlzIGEgZnVuY3Rpb24gaXQncyBhIGNvbnZlcnRlci4uLgorCQkJCXJlc3VsdCA9IHJlYWQoY29va2llLCB2YWx1ZSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8vIFByZXZlbnQgc3RvcmluZyBhIGNvb2tpZSB0aGF0IHdlIGNvdWxkbid0IGRlY29kZS4KKwkJCWlmICgha2V5ICYmIChjb29raWUgPSByZWFkKGNvb2tpZSkpICE9PSB1bmRlZmluZWQpIHsKKwkJCQlyZXN1bHRbbmFtZV0gPSBjb29raWU7CisJCQl9CisJCX0KKworCQlyZXR1cm4gcmVzdWx0OworCX07CisKKwljb25maWcuZGVmYXVsdHMgPSB7fTsKKworCSQucmVtb3ZlQ29va2llID0gZnVuY3Rpb24gKGtleSwgb3B0aW9ucykgeworCQlpZiAoJC5jb29raWUoa2V5KSAhPT0gdW5kZWZpbmVkKSB7CisJCQkvLyBNdXN0IG5vdCBhbHRlciBvcHRpb25zLCB0aHVzIGV4dGVuZGluZyBhIGZyZXNoIG9iamVjdC4uLgorCQkJJC5jb29raWUoa2V5LCAnJywgJC5leHRlbmQoe30sIG9wdGlvbnMsIHsgZXhwaXJlczogLTEgfSkpOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX07CisKK30pKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnkudHJlZXRhYmxlLmpzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2pxdWVyeS50cmVldGFibGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJlNzQyNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnkudHJlZXRhYmxlLmpzCkBAIC0wLDAgKzEsNjIwIEBACisvKgorICogalF1ZXJ5IHRyZWV0YWJsZSBQbHVnaW4gMy4xLjAKKyAqIGh0dHA6Ly9sdWRvLmN1YmljcGh1c2UubmwvanF1ZXJ5LXRyZWV0YWJsZQorICoKKyAqIENvcHlyaWdodCAyMDEzLCBMdWRvIHZhbiBkZW4gQm9vbQorICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJzaW9uIDIgbGljZW5zZXMuCisgKi8KKyhmdW5jdGlvbigpIHsKKyAgdmFyICQsIE5vZGUsIFRyZWUsIG1ldGhvZHM7CisKKyAgJCA9IGpRdWVyeTsKKworICBOb2RlID0gKGZ1bmN0aW9uKCkgeworICAgIGZ1bmN0aW9uIE5vZGUocm93LCB0cmVlLCBzZXR0aW5ncykgeworICAgICAgdmFyIHBhcmVudElkOworCisgICAgICB0aGlzLnJvdyA9IHJvdzsKKyAgICAgIHRoaXMudHJlZSA9IHRyZWU7CisgICAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7CisKKyAgICAgIC8vIFRPRE8gRW5zdXJlIGlkL3BhcmVudElkIGlzIGFsd2F5cyBhIHN0cmluZyAobm90IGludCkKKyAgICAgIHRoaXMuaWQgPSB0aGlzLnJvdy5kYXRhKHRoaXMuc2V0dGluZ3Mubm9kZUlkQXR0cik7CisKKyAgICAgIC8vIFRPRE8gTW92ZSB0aGlzIHRvIGEgc2V0UGFyZW50SWQgZnVuY3Rpb24/CisgICAgICBwYXJlbnRJZCA9IHRoaXMucm93LmRhdGEodGhpcy5zZXR0aW5ncy5wYXJlbnRJZEF0dHIpOworICAgICAgaWYgKHBhcmVudElkICE9IG51bGwgJiYgcGFyZW50SWQgIT09ICIiKSB7CisgICAgICAgIHRoaXMucGFyZW50SWQgPSBwYXJlbnRJZDsKKyAgICAgIH0KKworICAgICAgdGhpcy50cmVlQ2VsbCA9ICQodGhpcy5yb3cuY2hpbGRyZW4odGhpcy5zZXR0aW5ncy5jb2x1bW5FbFR5cGUpW3RoaXMuc2V0dGluZ3MuY29sdW1uXSk7CisgICAgICB0aGlzLmV4cGFuZGVyID0gJCh0aGlzLnNldHRpbmdzLmV4cGFuZGVyVGVtcGxhdGUpOworICAgICAgdGhpcy5pbmRlbnRlciA9ICQodGhpcy5zZXR0aW5ncy5pbmRlbnRlclRlbXBsYXRlKTsKKyAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTsKKyAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICAgIHRoaXMudHJlZUNlbGwucHJlcGVuZCh0aGlzLmluZGVudGVyKTsKKyAgICB9CisKKyAgICBOb2RlLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uKGNoaWxkKSB7CisgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTsKKyAgICB9OworCisgICAgTm9kZS5wcm90b3R5cGUuYW5jZXN0b3JzID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgYW5jZXN0b3JzLCBub2RlOworICAgICAgbm9kZSA9IHRoaXM7CisgICAgICBhbmNlc3RvcnMgPSBbXTsKKyAgICAgIHdoaWxlIChub2RlID0gbm9kZS5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgYW5jZXN0b3JzLnB1c2gobm9kZSk7CisgICAgICB9CisgICAgICByZXR1cm4gYW5jZXN0b3JzOworICAgIH07CisKKyAgICBOb2RlLnByb3RvdHlwZS5jb2xsYXBzZSA9IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKHRoaXMuY29sbGFwc2VkKCkpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICB9CisKKyAgICAgIHRoaXMucm93LnJlbW92ZUNsYXNzKCJleHBhbmRlZCIpLmFkZENsYXNzKCJjb2xsYXBzZWQiKTsKKworICAgICAgdGhpcy5faGlkZUNoaWxkcmVuKCk7CisgICAgICB0aGlzLmV4cGFuZGVyLmF0dHIoInRpdGxlIiwgdGhpcy5zZXR0aW5ncy5zdHJpbmdFeHBhbmQpOworCisgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCAmJiB0aGlzLnNldHRpbmdzLm9uTm9kZUNvbGxhcHNlICE9IG51bGwpIHsKKyAgICAgICAgdGhpcy5zZXR0aW5ncy5vbk5vZGVDb2xsYXBzZS5hcHBseSh0aGlzKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKworICAgIE5vZGUucHJvdG90eXBlLmNvbGxhcHNlZCA9IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIHRoaXMucm93Lmhhc0NsYXNzKCJjb2xsYXBzZWQiKTsKKyAgICB9OworCisgICAgLy8gVE9ETyBkZXN0cm95OiByZW1vdmUgZXZlbnQgaGFuZGxlcnMsIGV4cGFuZGVyLCBpbmRlbnRlciwgZXRjLgorCisgICAgTm9kZS5wcm90b3R5cGUuZXhwYW5kID0gZnVuY3Rpb24oKSB7CisgICAgICBpZiAodGhpcy5leHBhbmRlZCgpKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgICAgfQorCisgICAgICB0aGlzLnJvdy5yZW1vdmVDbGFzcygiY29sbGFwc2VkIikuYWRkQ2xhc3MoImV4cGFuZGVkIik7CisKKyAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkICYmIHRoaXMuc2V0dGluZ3Mub25Ob2RlRXhwYW5kICE9IG51bGwpIHsKKyAgICAgICAgdGhpcy5zZXR0aW5ncy5vbk5vZGVFeHBhbmQuYXBwbHkodGhpcyk7CisgICAgICB9CisKKyAgICAgIGlmICgkKHRoaXMucm93KS5pcygiOnZpc2libGUiKSkgeworICAgICAgICB0aGlzLl9zaG93Q2hpbGRyZW4oKTsKKyAgICAgIH0KKworICAgICAgdGhpcy5leHBhbmRlci5hdHRyKCJ0aXRsZSIsIHRoaXMuc2V0dGluZ3Muc3RyaW5nQ29sbGFwc2UpOworCisgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworCisgICAgTm9kZS5wcm90b3R5cGUuZXhwYW5kZWQgPSBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiB0aGlzLnJvdy5oYXNDbGFzcygiZXhwYW5kZWQiKTsKKyAgICB9OworCisgICAgTm9kZS5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uKCkgeworICAgICAgdGhpcy5faGlkZUNoaWxkcmVuKCk7CisgICAgICB0aGlzLnJvdy5oaWRlKCk7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworCisgICAgTm9kZS5wcm90b3R5cGUuaXNCcmFuY2hOb2RlID0gZnVuY3Rpb24oKSB7CisgICAgICBpZih0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDAgfHwgdGhpcy5yb3cuZGF0YSh0aGlzLnNldHRpbmdzLmJyYW5jaEF0dHIpID09PSB0cnVlKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH07CisKKyAgICBOb2RlLnByb3RvdHlwZS51cGRhdGVCcmFuY2hMZWFmQ2xhc3MgPSBmdW5jdGlvbigpeworICAgICAgdGhpcy5yb3cucmVtb3ZlQ2xhc3MoJ2JyYW5jaCcpOworICAgICAgdGhpcy5yb3cucmVtb3ZlQ2xhc3MoJ2xlYWYnKTsKKyAgICAgIHRoaXMucm93LmFkZENsYXNzKHRoaXMuaXNCcmFuY2hOb2RlKCkgPyAnYnJhbmNoJyA6ICdsZWFmJyk7CisgICAgfTsKKworICAgIE5vZGUucHJvdG90eXBlLmxldmVsID0gZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gdGhpcy5hbmNlc3RvcnMoKS5sZW5ndGg7CisgICAgfTsKKworICAgIE5vZGUucHJvdG90eXBlLnBhcmVudE5vZGUgPSBmdW5jdGlvbigpIHsKKyAgICAgIGlmICh0aGlzLnBhcmVudElkICE9IG51bGwpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMudHJlZVt0aGlzLnBhcmVudElkXTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfQorICAgIH07CisKKyAgICBOb2RlLnByb3RvdHlwZS5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uKGNoaWxkKSB7CisgICAgICB2YXIgaSA9ICQuaW5BcnJheShjaGlsZCwgdGhpcy5jaGlsZHJlbik7CisgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5zcGxpY2UoaSwgMSkKKyAgICB9OworCisgICAgTm9kZS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgaGFuZGxlciwKKyAgICAgICAgICBzZXR0aW5ncyA9IHRoaXMuc2V0dGluZ3MsCisgICAgICAgICAgdGFyZ2V0OworCisgICAgICBpZiAoc2V0dGluZ3MuZXhwYW5kYWJsZSA9PT0gdHJ1ZSAmJiB0aGlzLmlzQnJhbmNoTm9kZSgpKSB7CisgICAgICAgIGhhbmRsZXIgPSBmdW5jdGlvbihlKSB7CisgICAgICAgICAgJCh0aGlzKS5wYXJlbnRzKCJ0YWJsZSIpLnRyZWV0YWJsZSgibm9kZSIsICQodGhpcykucGFyZW50cygidHIiKS5kYXRhKHNldHRpbmdzLm5vZGVJZEF0dHIpKS50b2dnbGUoKTsKKyAgICAgICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB9OworCisgICAgICAgIHRoaXMuaW5kZW50ZXIuaHRtbCh0aGlzLmV4cGFuZGVyKTsKKyAgICAgICAgdGFyZ2V0ID0gc2V0dGluZ3MuY2xpY2thYmxlTm9kZU5hbWVzID09PSB0cnVlID8gdGhpcy50cmVlQ2VsbCA6IHRoaXMuZXhwYW5kZXI7CisKKyAgICAgICAgdGFyZ2V0Lm9mZigiY2xpY2sudHJlZXRhYmxlIikub24oImNsaWNrLnRyZWV0YWJsZSIsIGhhbmRsZXIpOworICAgICAgICB0YXJnZXQub2ZmKCJrZXlkb3duLnRyZWV0YWJsZSIpLm9uKCJrZXlkb3duLnRyZWV0YWJsZSIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICBpZiAoZS5rZXlDb2RlID09IDEzKSB7CisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5KHRoaXMsIFtlXSk7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0KKworICAgICAgdGhpcy5pbmRlbnRlclswXS5zdHlsZS5wYWRkaW5nTGVmdCA9ICIiICsgKHRoaXMubGV2ZWwoKSAqIHNldHRpbmdzLmluZGVudCkgKyAicHgiOworCisgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworCisgICAgTm9kZS5wcm90b3R5cGUucmV2ZWFsID0gZnVuY3Rpb24oKSB7CisgICAgICBpZiAodGhpcy5wYXJlbnRJZCAhPSBudWxsKSB7CisgICAgICAgIHRoaXMucGFyZW50Tm9kZSgpLnJldmVhbCgpOworICAgICAgfQorICAgICAgcmV0dXJuIHRoaXMuZXhwYW5kKCk7CisgICAgfTsKKworICAgIE5vZGUucHJvdG90eXBlLnNldFBhcmVudCA9IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgIGlmICh0aGlzLnBhcmVudElkICE9IG51bGwpIHsKKyAgICAgICAgdGhpcy50cmVlW3RoaXMucGFyZW50SWRdLnJlbW92ZUNoaWxkKHRoaXMpOworICAgICAgfQorICAgICAgdGhpcy5wYXJlbnRJZCA9IG5vZGUuaWQ7CisgICAgICB0aGlzLnJvdy5kYXRhKHRoaXMuc2V0dGluZ3MucGFyZW50SWRBdHRyLCBub2RlLmlkKTsKKyAgICAgIHJldHVybiBub2RlLmFkZENoaWxkKHRoaXMpOworICAgIH07CisKKyAgICBOb2RlLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24oKSB7CisgICAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgdGhpcy5faW5pdGlhbGl6ZSgpOworICAgICAgfQorICAgICAgdGhpcy5yb3cuc2hvdygpOworICAgICAgaWYgKHRoaXMuZXhwYW5kZWQoKSkgeworICAgICAgICB0aGlzLl9zaG93Q2hpbGRyZW4oKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzOworICAgIH07CisKKyAgICBOb2RlLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbigpIHsKKyAgICAgIGlmICh0aGlzLmV4cGFuZGVkKCkpIHsKKyAgICAgICAgdGhpcy5jb2xsYXBzZSgpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy5leHBhbmQoKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzOworICAgIH07CisKKyAgICBOb2RlLnByb3RvdHlwZS5faGlkZUNoaWxkcmVuID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgY2hpbGQsIF9pLCBfbGVuLCBfcmVmLCBfcmVzdWx0czsKKyAgICAgIF9yZWYgPSB0aGlzLmNoaWxkcmVuOworICAgICAgX3Jlc3VsdHMgPSBbXTsKKyAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAgICBjaGlsZCA9IF9yZWZbX2ldOworICAgICAgICBfcmVzdWx0cy5wdXNoKGNoaWxkLmhpZGUoKSk7CisgICAgICB9CisgICAgICByZXR1cm4gX3Jlc3VsdHM7CisgICAgfTsKKworICAgIE5vZGUucHJvdG90eXBlLl9pbml0aWFsaXplID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgc2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzOworCisgICAgICB0aGlzLnJlbmRlcigpOworCisgICAgICBpZiAoc2V0dGluZ3MuZXhwYW5kYWJsZSA9PT0gdHJ1ZSAmJiBzZXR0aW5ncy5pbml0aWFsU3RhdGUgPT09ICJjb2xsYXBzZWQiKSB7CisgICAgICAgIHRoaXMuY29sbGFwc2UoKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMuZXhwYW5kKCk7CisgICAgICB9CisKKyAgICAgIGlmIChzZXR0aW5ncy5vbk5vZGVJbml0aWFsaXplZCAhPSBudWxsKSB7CisgICAgICAgIHNldHRpbmdzLm9uTm9kZUluaXRpYWxpemVkLmFwcGx5KHRoaXMpOworICAgICAgfQorCisgICAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplZCA9IHRydWU7CisgICAgfTsKKworICAgIE5vZGUucHJvdG90eXBlLl9zaG93Q2hpbGRyZW4gPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBjaGlsZCwgX2ksIF9sZW4sIF9yZWYsIF9yZXN1bHRzOworICAgICAgX3JlZiA9IHRoaXMuY2hpbGRyZW47CisgICAgICBfcmVzdWx0cyA9IFtdOworICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgIGNoaWxkID0gX3JlZltfaV07CisgICAgICAgIF9yZXN1bHRzLnB1c2goY2hpbGQuc2hvdygpKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBfcmVzdWx0czsKKyAgICB9OworCisgICAgcmV0dXJuIE5vZGU7CisgIH0pKCk7CisKKyAgVHJlZSA9IChmdW5jdGlvbigpIHsKKyAgICBmdW5jdGlvbiBUcmVlKHRhYmxlLCBzZXR0aW5ncykgeworICAgICAgdGhpcy50YWJsZSA9IHRhYmxlOworICAgICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzOworICAgICAgdGhpcy50cmVlID0ge307CisKKyAgICAgIC8vIENhY2hlIHRoZSBub2RlcyBhbmQgcm9vdHMgaW4gc2ltcGxlIGFycmF5cyBmb3IgcXVpY2sgYWNjZXNzL2l0ZXJhdGlvbgorICAgICAgdGhpcy5ub2RlcyA9IFtdOworICAgICAgdGhpcy5yb290cyA9IFtdOworICAgIH0KKworICAgIFRyZWUucHJvdG90eXBlLmNvbGxhcHNlQWxsID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgbm9kZSwgX2ksIF9sZW4sIF9yZWYsIF9yZXN1bHRzOworICAgICAgX3JlZiA9IHRoaXMubm9kZXM7CisgICAgICBfcmVzdWx0cyA9IFtdOworICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgIG5vZGUgPSBfcmVmW19pXTsKKyAgICAgICAgX3Jlc3VsdHMucHVzaChub2RlLmNvbGxhcHNlKCkpOworICAgICAgfQorICAgICAgcmV0dXJuIF9yZXN1bHRzOworICAgIH07CisKKyAgICBUcmVlLnByb3RvdHlwZS5leHBhbmRBbGwgPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBub2RlLCBfaSwgX2xlbiwgX3JlZiwgX3Jlc3VsdHM7CisgICAgICBfcmVmID0gdGhpcy5ub2RlczsKKyAgICAgIF9yZXN1bHRzID0gW107CisgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAgbm9kZSA9IF9yZWZbX2ldOworICAgICAgICBfcmVzdWx0cy5wdXNoKG5vZGUuZXhwYW5kKCkpOworICAgICAgfQorICAgICAgcmV0dXJuIF9yZXN1bHRzOworICAgIH07CisKKyAgICBUcmVlLnByb3RvdHlwZS5maW5kTGFzdE5vZGUgPSBmdW5jdGlvbiAobm9kZSkgeworICAgICAgaWYgKG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkgeworICAgICAgICByZXR1cm4gdGhpcy5maW5kTGFzdE5vZGUobm9kZS5jaGlsZHJlbltub2RlLmNoaWxkcmVuLmxlbmd0aCAtIDFdKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBub2RlOworICAgICAgfQorICAgIH07CisKKyAgICBUcmVlLnByb3RvdHlwZS5sb2FkUm93cyA9IGZ1bmN0aW9uKHJvd3MpIHsKKyAgICAgIHZhciBub2RlLCByb3csIGk7CisKKyAgICAgIGlmIChyb3dzICE9IG51bGwpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICByb3cgPSAkKHJvd3NbaV0pOworCisgICAgICAgICAgaWYgKHJvdy5kYXRhKHRoaXMuc2V0dGluZ3Mubm9kZUlkQXR0cikgIT0gbnVsbCkgeworICAgICAgICAgICAgbm9kZSA9IG5ldyBOb2RlKHJvdywgdGhpcy50cmVlLCB0aGlzLnNldHRpbmdzKTsKKyAgICAgICAgICAgIHRoaXMubm9kZXMucHVzaChub2RlKTsKKyAgICAgICAgICAgIHRoaXMudHJlZVtub2RlLmlkXSA9IG5vZGU7CisKKyAgICAgICAgICAgIGlmIChub2RlLnBhcmVudElkICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgdGhpcy50cmVlW25vZGUucGFyZW50SWRdLmFkZENoaWxkKG5vZGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgdGhpcy5yb290cy5wdXNoKG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5ub2Rlcy5sZW5ndGg7IGkrKykgeworICAgICAgICBub2RlID0gdGhpcy5ub2Rlc1tpXS51cGRhdGVCcmFuY2hMZWFmQ2xhc3MoKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKworICAgIFRyZWUucHJvdG90eXBlLm1vdmUgPSBmdW5jdGlvbihub2RlLCBkZXN0aW5hdGlvbikgeworICAgICAgLy8gQ29uZGl0aW9uczoKKyAgICAgIC8vIDE6ICtub2RlKyBzaG91bGQgbm90IGJlIGluc2VydGVkIGFzIGEgY2hpbGQgb2YgK25vZGUrIGl0c2VsZi4KKyAgICAgIC8vIDI6ICtkZXN0aW5hdGlvbisgc2hvdWxkIG5vdCBiZSB0aGUgc2FtZSBhcyArbm9kZSsncyBjdXJyZW50IHBhcmVudCAodGhpcworICAgICAgLy8gICAgcHJldmVudHMgK25vZGUrIGZyb20gYmVpbmcgbW92ZWQgdG8gdGhlIHNhbWUgbG9jYXRpb24gd2hlcmUgaXQgYWxyZWFkeQorICAgICAgLy8gICAgaXMpLgorICAgICAgLy8gMzogK25vZGUrIHNob3VsZCBub3QgYmUgaW5zZXJ0ZWQgaW4gYSBsb2NhdGlvbiBpbiBhIGJyYW5jaCBpZiB0aGlzIHdvdWxkCisgICAgICAvLyAgICByZXN1bHQgaW4gK25vZGUrIGJlaW5nIGFuIGFuY2VzdG9yIG9mIGl0c2VsZi4KKyAgICAgIHZhciBub2RlUGFyZW50ID0gbm9kZS5wYXJlbnROb2RlKCk7CisgICAgICBpZiAobm9kZSAhPT0gZGVzdGluYXRpb24gJiYgZGVzdGluYXRpb24uaWQgIT09IG5vZGUucGFyZW50SWQgJiYgJC5pbkFycmF5KG5vZGUsIGRlc3RpbmF0aW9uLmFuY2VzdG9ycygpKSA9PT0gLTEpIHsKKyAgICAgICAgbm9kZS5zZXRQYXJlbnQoZGVzdGluYXRpb24pOworICAgICAgICB0aGlzLl9tb3ZlUm93cyhub2RlLCBkZXN0aW5hdGlvbik7CisKKyAgICAgICAgLy8gUmUtcmVuZGVyIHBhcmVudE5vZGUgaWYgdGhpcyBpcyBpdHMgZmlyc3QgY2hpbGQgbm9kZSwgYW5kIHRoZXJlZm9yZQorICAgICAgICAvLyBkb2Vzbid0IGhhdmUgdGhlIGV4cGFuZGVyIHlldC4KKyAgICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZSgpLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSkgeworICAgICAgICAgIG5vZGUucGFyZW50Tm9kZSgpLnJlbmRlcigpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmKG5vZGVQYXJlbnQpeworICAgICAgICBub2RlUGFyZW50LnVwZGF0ZUJyYW5jaExlYWZDbGFzcygpOworICAgICAgfQorICAgICAgaWYobm9kZS5wYXJlbnROb2RlKCkpeworICAgICAgICBub2RlLnBhcmVudE5vZGUoKS51cGRhdGVCcmFuY2hMZWFmQ2xhc3MoKTsKKyAgICAgIH0KKyAgICAgIG5vZGUudXBkYXRlQnJhbmNoTGVhZkNsYXNzKCk7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworCisgICAgVHJlZS5wcm90b3R5cGUucmVtb3ZlTm9kZSA9IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgIC8vIFJlY3Vyc2l2ZWx5IHJlbW92ZSBhbGwgZGVzY2VuZGFudHMgb2YgK25vZGUrCisgICAgICB0aGlzLnVubG9hZEJyYW5jaChub2RlKTsKKworICAgICAgLy8gUmVtb3ZlIG5vZGUgZnJvbSBET00gKDx0cj4pCisgICAgICBub2RlLnJvdy5yZW1vdmUoKTsKKworICAgICAgLy8gQ2xlYW4gdXAgVHJlZSBvYmplY3QgKHNvIE5vZGUgb2JqZWN0cyBhcmUgR0MtZWQpCisgICAgICBkZWxldGUgdGhpcy50cmVlW25vZGUuaWRdOworICAgICAgdGhpcy5ub2Rlcy5zcGxpY2UoJC5pbkFycmF5KG5vZGUsIHRoaXMubm9kZXMpLCAxKTsKKyAgICB9CisKKyAgICBUcmVlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciByb290LCBfaSwgX2xlbiwgX3JlZjsKKyAgICAgIF9yZWYgPSB0aGlzLnJvb3RzOworICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgIHJvb3QgPSBfcmVmW19pXTsKKworICAgICAgICAvLyBOYW1pbmcgaXMgY29uZnVzaW5nIChzaG93L3JlbmRlcikuIEkgZG8gbm90IGNhbGwgcmVuZGVyIG9uIG5vZGUgZnJvbQorICAgICAgICAvLyBoZXJlLgorICAgICAgICByb290LnNob3coKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzOworICAgIH07CisKKyAgICBUcmVlLnByb3RvdHlwZS5zb3J0QnJhbmNoID0gZnVuY3Rpb24obm9kZSwgc29ydEZ1bikgeworICAgICAgLy8gRmlyc3Qgc29ydCBpbnRlcm5hbCBhcnJheSBvZiBjaGlsZHJlbgorICAgICAgbm9kZS5jaGlsZHJlbi5zb3J0KHNvcnRGdW4pOworCisgICAgICAvLyBOZXh0IHJlbmRlciByb3dzIGluIGNvcnJlY3Qgb3JkZXIgb24gcGFnZQorICAgICAgdGhpcy5fc29ydENoaWxkUm93cyhub2RlKTsKKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKworICAgIFRyZWUucHJvdG90eXBlLnVubG9hZEJyYW5jaCA9IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgIHZhciBjaGlsZHJlbiwgaTsKKworICAgICAgZm9yIChpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdGhpcy5yZW1vdmVOb2RlKG5vZGUuY2hpbGRyZW5baV0pOworICAgICAgfQorCisgICAgICAvLyBSZXNldCBub2RlJ3MgY29sbGVjdGlvbiBvZiBjaGlsZHJlbgorICAgICAgbm9kZS5jaGlsZHJlbiA9IFtdOworCisgICAgICBub2RlLnVwZGF0ZUJyYW5jaExlYWZDbGFzcygpOworCisgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworCisgICAgVHJlZS5wcm90b3R5cGUuX21vdmVSb3dzID0gZnVuY3Rpb24obm9kZSwgZGVzdGluYXRpb24pIHsKKyAgICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4sIGk7CisKKyAgICAgIG5vZGUucm93Lmluc2VydEFmdGVyKGRlc3RpbmF0aW9uLnJvdyk7CisgICAgICBub2RlLnJlbmRlcigpOworCisgICAgICAvLyBMb29wIGJhY2t3YXJkcyB0aHJvdWdoIGNoaWxkcmVuIHRvIGhhdmUgdGhlbSBlbmQgdXAgb24gVUkgaW4gY29ycmVjdAorICAgICAgLy8gb3JkZXIgKHNlZSAjMTEyKQorICAgICAgZm9yIChpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgdGhpcy5fbW92ZVJvd3MoY2hpbGRyZW5baV0sIG5vZGUpOworICAgICAgfQorICAgIH07CisKKyAgICAvLyBTcGVjaWFsIF9tb3ZlUm93cyBjYXNlLCBtb3ZlIGNoaWxkcmVuIHRvIGl0c2VsZiB0byBmb3JjZSBzb3J0aW5nCisgICAgVHJlZS5wcm90b3R5cGUuX3NvcnRDaGlsZFJvd3MgPSBmdW5jdGlvbihwYXJlbnROb2RlKSB7CisgICAgICByZXR1cm4gdGhpcy5fbW92ZVJvd3MocGFyZW50Tm9kZSwgcGFyZW50Tm9kZSk7CisgICAgfTsKKworICAgIHJldHVybiBUcmVlOworICB9KSgpOworCisgIC8vIGpRdWVyeSBQbHVnaW4KKyAgbWV0aG9kcyA9IHsKKyAgICBpbml0OiBmdW5jdGlvbihvcHRpb25zLCBmb3JjZSkgeworICAgICAgdmFyIHNldHRpbmdzOworCisgICAgICBzZXR0aW5ncyA9ICQuZXh0ZW5kKHsKKyAgICAgICAgYnJhbmNoQXR0cjogInR0QnJhbmNoIiwKKyAgICAgICAgY2xpY2thYmxlTm9kZU5hbWVzOiBmYWxzZSwKKyAgICAgICAgY29sdW1uOiAwLAorICAgICAgICBjb2x1bW5FbFR5cGU6ICJ0ZCIsIC8vIGkuZS4gJ3RkJywgJ3RoJyBvciAndGQsdGgnCisgICAgICAgIGV4cGFuZGFibGU6IGZhbHNlLAorICAgICAgICBleHBhbmRlclRlbXBsYXRlOiAiPGEgaHJlZj0nIyc+Jm5ic3A7PC9hPiIsCisgICAgICAgIGluZGVudDogMTksCisgICAgICAgIGluZGVudGVyVGVtcGxhdGU6ICI8c3BhbiBjbGFzcz0naW5kZW50ZXInPjwvc3Bhbj4iLAorICAgICAgICBpbml0aWFsU3RhdGU6ICJjb2xsYXBzZWQiLAorICAgICAgICBub2RlSWRBdHRyOiAidHRJZCIsIC8vIG1hcHMgdG8gZGF0YS10dC1pZAorICAgICAgICBwYXJlbnRJZEF0dHI6ICJ0dFBhcmVudElkIiwgLy8gbWFwcyB0byBkYXRhLXR0LXBhcmVudC1pZAorICAgICAgICBzdHJpbmdFeHBhbmQ6ICJFeHBhbmQiLAorICAgICAgICBzdHJpbmdDb2xsYXBzZTogIkNvbGxhcHNlIiwKKworICAgICAgICAvLyBFdmVudHMKKyAgICAgICAgb25Jbml0aWFsaXplZDogbnVsbCwKKyAgICAgICAgb25Ob2RlQ29sbGFwc2U6IG51bGwsCisgICAgICAgIG9uTm9kZUV4cGFuZDogbnVsbCwKKyAgICAgICAgb25Ob2RlSW5pdGlhbGl6ZWQ6IG51bGwKKyAgICAgIH0sIG9wdGlvbnMpOworCisgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZWwgPSAkKHRoaXMpLCB0cmVlOworCisgICAgICAgIGlmIChmb3JjZSB8fCBlbC5kYXRhKCJ0cmVldGFibGUiKSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgdHJlZSA9IG5ldyBUcmVlKHRoaXMsIHNldHRpbmdzKTsKKyAgICAgICAgICB0cmVlLmxvYWRSb3dzKHRoaXMucm93cykucmVuZGVyKCk7CisKKyAgICAgICAgICBlbC5hZGRDbGFzcygidHJlZXRhYmxlIikuZGF0YSgidHJlZXRhYmxlIiwgdHJlZSk7CisKKyAgICAgICAgICBpZiAoc2V0dGluZ3Mub25Jbml0aWFsaXplZCAhPSBudWxsKSB7CisgICAgICAgICAgICBzZXR0aW5ncy5vbkluaXRpYWxpemVkLmFwcGx5KHRyZWUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBlbDsKKyAgICAgIH0pOworICAgIH0sCisKKyAgICBkZXN0cm95OiBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiAkKHRoaXMpLnJlbW92ZURhdGEoInRyZWV0YWJsZSIpLnJlbW92ZUNsYXNzKCJ0cmVldGFibGUiKTsKKyAgICAgIH0pOworICAgIH0sCisKKyAgICBjb2xsYXBzZUFsbDogZnVuY3Rpb24oKSB7CisgICAgICB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLmNvbGxhcHNlQWxsKCk7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgY29sbGFwc2VOb2RlOiBmdW5jdGlvbihpZCkgeworICAgICAgdmFyIG5vZGUgPSB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLnRyZWVbaWRdOworCisgICAgICBpZiAobm9kZSkgeworICAgICAgICBub2RlLmNvbGxhcHNlKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbm9kZSAnIiArIGlkICsgIiciKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIGV4cGFuZEFsbDogZnVuY3Rpb24oKSB7CisgICAgICB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLmV4cGFuZEFsbCgpOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIGV4cGFuZE5vZGU6IGZ1bmN0aW9uKGlkKSB7CisgICAgICB2YXIgbm9kZSA9IHRoaXMuZGF0YSgidHJlZXRhYmxlIikudHJlZVtpZF07CisKKyAgICAgIGlmIChub2RlKSB7CisgICAgICAgIGlmICghbm9kZS5pbml0aWFsaXplZCkgeworICAgICAgICAgIG5vZGUuX2luaXRpYWxpemUoKTsKKyAgICAgICAgfQorCisgICAgICAgIG5vZGUuZXhwYW5kKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbm9kZSAnIiArIGlkICsgIiciKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIGxvYWRCcmFuY2g6IGZ1bmN0aW9uKG5vZGUsIHJvd3MpIHsKKyAgICAgIHZhciBzZXR0aW5ncyA9IHRoaXMuZGF0YSgidHJlZXRhYmxlIikuc2V0dGluZ3MsCisgICAgICAgICAgdHJlZSA9IHRoaXMuZGF0YSgidHJlZXRhYmxlIikudHJlZTsKKworICAgICAgLy8gVE9ETyBTd2l0Y2ggdG8gJC5wYXJzZUhUTUwKKyAgICAgIHJvd3MgPSAkKHJvd3MpOworCisgICAgICBpZiAobm9kZSA9PSBudWxsKSB7IC8vIEluc2VydGluZyBuZXcgcm9vdCBub2RlcworICAgICAgICB0aGlzLmFwcGVuZChyb3dzKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHZhciBsYXN0Tm9kZSA9IHRoaXMuZGF0YSgidHJlZXRhYmxlIikuZmluZExhc3ROb2RlKG5vZGUpOworICAgICAgICByb3dzLmluc2VydEFmdGVyKGxhc3ROb2RlLnJvdyk7CisgICAgICB9CisKKyAgICAgIHRoaXMuZGF0YSgidHJlZXRhYmxlIikubG9hZFJvd3Mocm93cyk7CisKKyAgICAgIC8vIE1ha2Ugc3VyZSBub2RlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQKKyAgICAgIHJvd3MuZmlsdGVyKCJ0ciIpLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgIHRyZWVbJCh0aGlzKS5kYXRhKHNldHRpbmdzLm5vZGVJZEF0dHIpXS5zaG93KCk7CisgICAgICB9KTsKKworICAgICAgaWYgKG5vZGUgIT0gbnVsbCkgeworICAgICAgICAvLyBSZS1yZW5kZXIgcGFyZW50IHRvIGVuc3VyZSBleHBhbmRlciBpY29uIGlzIHNob3duICgjNzkpCisgICAgICAgIG5vZGUucmVuZGVyKCkuZXhwYW5kKCk7CisgICAgICB9CisKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICBtb3ZlOiBmdW5jdGlvbihub2RlSWQsIGRlc3RpbmF0aW9uSWQpIHsKKyAgICAgIHZhciBkZXN0aW5hdGlvbiwgbm9kZTsKKworICAgICAgbm9kZSA9IHRoaXMuZGF0YSgidHJlZXRhYmxlIikudHJlZVtub2RlSWRdOworICAgICAgZGVzdGluYXRpb24gPSB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLnRyZWVbZGVzdGluYXRpb25JZF07CisgICAgICB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLm1vdmUobm9kZSwgZGVzdGluYXRpb24pOworCisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgbm9kZTogZnVuY3Rpb24oaWQpIHsKKyAgICAgIHJldHVybiB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLnRyZWVbaWRdOworICAgIH0sCisKKyAgICByZW1vdmVOb2RlOiBmdW5jdGlvbihpZCkgeworICAgICAgdmFyIG5vZGUgPSB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLnRyZWVbaWRdOworCisgICAgICBpZiAobm9kZSkgeworICAgICAgICB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLnJlbW92ZU5vZGUobm9kZSk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbm9kZSAnIiArIGlkICsgIiciKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIHJldmVhbDogZnVuY3Rpb24oaWQpIHsKKyAgICAgIHZhciBub2RlID0gdGhpcy5kYXRhKCJ0cmVldGFibGUiKS50cmVlW2lkXTsKKworICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgbm9kZS5yZXZlYWwoKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBub2RlICciICsgaWQgKyAiJyIpOworICAgICAgfQorCisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgc29ydEJyYW5jaDogZnVuY3Rpb24obm9kZSwgY29sdW1uT3JGdW5jdGlvbikgeworICAgICAgdmFyIHNldHRpbmdzID0gdGhpcy5kYXRhKCJ0cmVldGFibGUiKS5zZXR0aW5ncywKKyAgICAgICAgICBwcmVwVmFsdWUsCisgICAgICAgICAgc29ydEZ1bjsKKworICAgICAgY29sdW1uT3JGdW5jdGlvbiA9IGNvbHVtbk9yRnVuY3Rpb24gfHwgc2V0dGluZ3MuY29sdW1uOworICAgICAgc29ydEZ1biA9IGNvbHVtbk9yRnVuY3Rpb247CisKKyAgICAgIGlmICgkLmlzTnVtZXJpYyhjb2x1bW5PckZ1bmN0aW9uKSkgeworICAgICAgICBzb3J0RnVuID0gZnVuY3Rpb24oYSwgYikgeworICAgICAgICAgIHZhciBleHRyYWN0VmFsdWUsIHZhbEEsIHZhbEI7CisKKyAgICAgICAgICBleHRyYWN0VmFsdWUgPSBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgdmFsID0gbm9kZS5yb3cuZmluZCgidGQ6ZXEoIiArIGNvbHVtbk9yRnVuY3Rpb24gKyAiKSIpLnRleHQoKTsKKyAgICAgICAgICAgIC8vIElnbm9yZSB0cmFpbGluZy9sZWFkaW5nIHdoaXRlc3BhY2UgYW5kIHVzZSB1cHBlcmNhc2UgdmFsdWVzIGZvcgorICAgICAgICAgICAgLy8gY2FzZSBpbnNlbnNpdGl2ZSBvcmRlcmluZworICAgICAgICAgICAgcmV0dXJuICQudHJpbSh2YWwpLnRvVXBwZXJDYXNlKCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgdmFsQSA9IGV4dHJhY3RWYWx1ZShhKTsKKyAgICAgICAgICB2YWxCID0gZXh0cmFjdFZhbHVlKGIpOworCisgICAgICAgICAgaWYgKHZhbEEgPCB2YWxCKSByZXR1cm4gLTE7CisgICAgICAgICAgaWYgKHZhbEEgPiB2YWxCKSByZXR1cm4gMTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfTsKKyAgICAgIH0KKworICAgICAgdGhpcy5kYXRhKCJ0cmVldGFibGUiKS5zb3J0QnJhbmNoKG5vZGUsIHNvcnRGdW4pOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIHVubG9hZEJyYW5jaDogZnVuY3Rpb24obm9kZSkgeworICAgICAgdGhpcy5kYXRhKCJ0cmVldGFibGUiKS51bmxvYWRCcmFuY2gobm9kZSk7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisgIH07CisKKyAgJC5mbi50cmVldGFibGUgPSBmdW5jdGlvbihtZXRob2QpIHsKKyAgICBpZiAobWV0aG9kc1ttZXRob2RdKSB7CisgICAgICByZXR1cm4gbWV0aG9kc1ttZXRob2RdLmFwcGx5KHRoaXMsIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpOworICAgIH0gZWxzZSBpZiAodHlwZW9mIG1ldGhvZCA9PT0gJ29iamVjdCcgfHwgIW1ldGhvZCkgeworICAgICAgcmV0dXJuIG1ldGhvZHMuaW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gJC5lcnJvcigiTWV0aG9kICIgKyBtZXRob2QgKyAiIGRvZXMgbm90IGV4aXN0IG9uIGpRdWVyeS50cmVldGFibGUiKTsKKyAgICB9CisgIH07CisKKyAgLy8gRXhwb3NlIGNsYXNzZXMgdG8gd29ybGQKKyAgdGhpcy5UcmVlVGFibGUgfHwgKHRoaXMuVHJlZVRhYmxlID0ge30pOworICB0aGlzLlRyZWVUYWJsZS5Ob2RlID0gTm9kZTsKKyAgdGhpcy5UcmVlVGFibGUuVHJlZSA9IFRyZWU7Cit9KS5jYWxsKHRoaXMpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2xheWVyQnRuLmpzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2xheWVyQnRuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNTA5ZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvbGF5ZXJCdG4uanMKQEAgLTAsMCArMSw3NyBAQAorInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBsYXllckJ0bnNJbml0KGN0eCkgeworCisgIC8qIFJlbW92ZSBhbnkgY3VycmVudCBiaW5kaW5ncyB0byBhdm9pZCBkdXBsaWNhdGVkIGJpbmRzICovCisgICQoIi5sYXllcmJ0biIpLnVuYmluZCgnY2xpY2snKTsKKworICAkKCIubGF5ZXJidG4iKS5jbGljayhmdW5jdGlvbiAoKXsKKyAgICB2YXIgbGF5ZXJPYmogPSAkKHRoaXMpLmRhdGEoImxheWVyIik7CisgICAgdmFyIGFkZCA9ICgkKHRoaXMpLmRhdGEoJ2RpcmVjdGl2ZScpID09PSAiYWRkIik7CisgICAgdmFyIHRoaXNCdG4gPSAkKHRoaXMpOworCisgICAgbGlidG9hc3Rlci5hZGRSbUxheWVyKGxheWVyT2JqLCBhZGQsIGZ1bmN0aW9uIChsYXllckRlcHNMaXN0KXsKKyAgICAgIGxpYnRvYXN0ZXIuc2hvd0NoYW5nZU5vdGlmaWNhdGlvbihsaWJ0b2FzdGVyLm1ha2VMYXllckFkZFJtQWxlcnRNc2cobGF5ZXJPYmosIGxheWVyRGVwc0xpc3QsIGFkZCkpOworCisgICAgICAvKiBJbi1jZWxsIG5vdGlmaWNhdGlvbiAqLworICAgICAgdmFyIG5vdGlmaWNhdGlvbiA9ICQoJzxkaXYgaWQ9InRlbXAtaW5saW5lLW5vdGlmeSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IGZvbnQtc2l6ZTogMTFweDsgbGluZS1oZWlnaHQ6IDEuMzsiIGNsYXNzPSJ0b29sdGlwLWlubmVyIj48L2Rpdj4nKTsKKyAgICAgIHRoaXNCdG4ucGFyZW50KCkuYXBwZW5kKG5vdGlmaWNhdGlvbik7CisKKyAgICAgIGlmIChhZGQpeworICAgICAgICBpZiAobGF5ZXJEZXBzTGlzdC5sZW5ndGggPiAwKQorICAgICAgICAgIG5vdGlmaWNhdGlvbi50ZXh0KFN0cmluZyhsYXllckRlcHNMaXN0Lmxlbmd0aCArIDEpICsgIiBsYXllcnMgYWRkZWQiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIG5vdGlmaWNhdGlvbi50ZXh0KCIxIGxheWVyIGFkZGVkIik7CisKKyAgICAgICAgdmFyIGxheWVyQnRuc0ZhZGVPdXQgPSAkKCk7CisgICAgICAgIHZhciBsYXllckV4aXN0c0J0bkZhZGVJbiA9ICQoKTsKKworICAgICAgICBsYXllckJ0bnNGYWRlT3V0ID0gbGF5ZXJCdG5zRmFkZU91dC5hZGQoIi5sYXllci1hZGQtIiArIGxheWVyT2JqLmlkKTsKKyAgICAgICAgbGF5ZXJFeGlzdHNCdG5GYWRlSW4gPSBsYXllckV4aXN0c0J0bkZhZGVJbi5hZGQoIi5sYXllci1leGlzdHMtIiArIGxheWVyT2JqLmlkKTsKKworICAgICAgICBmb3IgKHZhciBpIGluIGxheWVyRGVwc0xpc3QpeworICAgICAgICAgIGxheWVyQnRuc0ZhZGVPdXQgPSBsYXllckJ0bnNGYWRlT3V0LmFkZCgiLmxheWVyLWFkZC0iICsgbGF5ZXJEZXBzTGlzdFtpXS5pZCk7CisgICAgICAgICAgbGF5ZXJFeGlzdHNCdG5GYWRlSW4gPSBsYXllckV4aXN0c0J0bkZhZGVJbi5hZGQoIi5sYXllci1leGlzdHMtIiArIGxheWVyRGVwc0xpc3RbaV0uaWQpOworICAgICAgICB9CisKKyAgICAgICAgbGF5ZXJCdG5zRmFkZU91dC5mYWRlT3V0KCkucHJvbWlzZSgpLmRvbmUoZnVuY3Rpb24oKXsKKyAgICAgICAgICBub3RpZmljYXRpb24uZmFkZUluKCkuZGVsYXkoNTAwKS5mYWRlT3V0KGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAvKiBGYWRlIGluIHRoZSBidXR0b25zICovCisgICAgICAgICAgICBsYXllckV4aXN0c0J0bkZhZGVJbi5mYWRlSW4oKTsKKyAgICAgICAgICAgIG5vdGlmaWNhdGlvbi5yZW1vdmUoKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBub3RpZmljYXRpb24udGV4dCgiMSBsYXllciBkZWxldGVkIik7CisgICAgICAgIC8qIERlbGV0aW5nIGEgbGF5ZXIgd2Ugb25seSBoYW5sZGUgdGhlIG9uZSBidXR0b24gKi8KKyAgICAgICAgdGhpc0J0bi5mYWRlT3V0KGZ1bmN0aW9uKCl7CisgICAgICAgICAgbm90aWZpY2F0aW9uLmZhZGVJbigpLmRlbGF5KDUwMCkuZmFkZU91dChmdW5jdGlvbigpeworICAgICAgICAgICAgJCgiLmxheWVyLWFkZC0iICsgbGF5ZXJPYmouaWQpLmZhZGVJbigpOworICAgICAgICAgICAgbm90aWZpY2F0aW9uLnJlbW92ZSgpOworICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICAgIH0KKworICAgIH0pOworICB9KTsKKworICAkKCIuYnVpbGQtcmVjaXBlLWJ0biIpLnVuYmluZCgnY2xpY2snKTsKKyAgJCgiLmJ1aWxkLXJlY2lwZS1idG4iKS5jbGljayhmdW5jdGlvbihlKXsKKyAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgdmFyIHJlY2lwZSA9ICQodGhpcykuZGF0YSgncmVjaXBlLW5hbWUnKTsKKworICAgIGxpYnRvYXN0ZXIuc3RhcnRBQnVpbGQobGlidG9hc3Rlci5jdHgucHJvamVjdEJ1aWxkc1VybCwKKyAgICAgIGxpYnRvYXN0ZXIuY3R4LnByb2plY3RJZCwgcmVjaXBlLAorICAgICAgZnVuY3Rpb24oKXsKKyAgICAgICAgLyogU3VjY2VzcyAqLworICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0QnVpbGRzVXJsKTsKKyAgICAgIH0pOworICB9KTsKKworICAvKiBTZXR1cCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgYnV0dG9ucyAqLworCisgIGZvciAodmFyIGkgaW4gY3R4LnByb2plY3RMYXllcnMpeworICAgICAgJCgiLmxheWVyLWV4aXN0cy0iICsgY3R4LnByb2plY3RMYXllcnNbaV0pLnNob3coKTsKKyAgICAgICQoIi5sYXllci1hZGQtIiArIGN0eC5wcm9qZWN0TGF5ZXJzW2ldKS5oaWRlKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9sYXllckRlcHNNb2RhbC5qcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9sYXllckRlcHNNb2RhbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjVmOWRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2xheWVyRGVwc01vZGFsLmpzCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBsYXllcjogT2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcGFyZW50IGxheWVyIHsgaWQ6IC4uIG5hbWU6IC4uLiB1cmwgfQorICogZGVwZW5kZW5jaWVzOiBhcnJheSBvZiBkZXBlbmRlbmN5IGxheWVyIG9iamVjdHMgeyBpZDogLi4gbmFtZTogLi59CisgKiB0aXRsZTogb3B0aW9uYWwgb3ZlcnJpZGUgZm9yIHRpdGxlCisgKiBib2R5OiBvcHRpb25hbCBvdmVycmlkZSBmb3IgYm9keQorICogYWRkVG9Qcm9qZWN0OiBXaGV0aGVyIHRvIGFkZCBsYXllcnMgdG8gcHJvamVjdCBvbiBhY2NlcHQKKyAqIHN1Y2Nlc3NBZGQ6IGZ1bmN0aW9uIHRvIHJ1biBvbiBzdWNjZXNzCisgKi8KK2Z1bmN0aW9uIHNob3dMYXllckRlcHNNb2RhbChsYXllciwgZGVwZW5kZW5jaWVzLCB0aXRsZSwgYm9keSwgYWRkVG9Qcm9qZWN0LCBzdWNjZXNzQWRkKSB7CisKKyAgaWYgKCQoIiNkZXBlbmRlbmNpZXMtbW9kYWwiKS5sZW5ndGggPT09IDApIHsKKyAgICAkLmdldChsaWJ0b2FzdGVyLmN0eC5odG1sVXJsICsgIi9sYXllcl9kZXBzX21vZGFsLmh0bWwiLCBmdW5jdGlvbihodG1sKXsKKyAgICAgICQoImJvZHkiKS5hcHBlbmQoaHRtbCk7CisgICAgICBzZXR1cE1vZGFsKCk7CisgICAgfSk7CisgIH0gZWxzZSB7CisgICAgc2V0dXBNb2RhbCgpOworICB9CisKKyAgZnVuY3Rpb24gc2V0dXBNb2RhbCgpeworCisgICAgaWYgKHRpdGxlKSB7CisgICAgICAkKCcjZGVwZW5kZW5jaWVzLW1vZGFsICN0aXRsZScpLnRleHQodGl0bGUpOworICAgIH0gZWxzZSB7CisgICAgICAkKCcjZGVwZW5kZW5jaWVzLW1vZGFsICN0aXRsZScpLnRleHQobGF5ZXIubmFtZSk7CisgICAgfQorCisgICAgaWYgKGJvZHkpIHsKKyAgICAgICQoIiNkZXBlbmRlbmNpZXMtbW9kYWwgI2JvZHktdGV4dCIpLmh0bWwoYm9keSk7CisgICAgfSBlbHNlIHsKKyAgICAgICQoIiNkZXBlbmRlbmNpZXMtbW9kYWwgI2xheWVyLW5hbWUiKS50ZXh0KGxheWVyLm5hbWUpOworICAgIH0KKworICAgIHZhciBkZXBsaXN0SHRtbCA9ICIiOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICBkZXBsaXN0SHRtbCArPSAiPGxpPjxsYWJlbCBjbGFzcz1cImNoZWNrYm94XCI+PGlucHV0IG5hbWU9XCJkZXBlbmRlbmNpZXNcIiB2YWx1ZT1cIiI7CisgICAgICBkZXBsaXN0SHRtbCArPSBkZXBlbmRlbmNpZXNbaV0uaWQ7CisgICAgICBkZXBsaXN0SHRtbCArPSJcIiB0eXBlPVwiY2hlY2tib3hcIiBjaGVja2VkPVwiY2hlY2tlZFwiLz4iOworICAgICAgZGVwbGlzdEh0bWwgKz0gZGVwZW5kZW5jaWVzW2ldLm5hbWU7CisgICAgICBkZXBsaXN0SHRtbCArPSAiPC9sYWJlbD48L2xpPiI7CisgICAgfQorICAgICQoJyNkZXBlbmRlbmNpZXMtbGlzdCcpLmh0bWwoZGVwbGlzdEh0bWwpOworCisgICAgJCgiI2RlcGVuZGVuY2llcy1tb2RhbCIpLmRhdGEoImRlcHMiLCBkZXBlbmRlbmNpZXMpOworCisgICAgJCgnI2RlcGVuZGVuY2llcy1tb2RhbCcpLm1vZGFsKCdzaG93Jyk7CisKKyAgICAvKiBEaXNjYXJkIHRoZSBvbGQgc3VibWlzc2lvbiBmdW5jdGlvbiAqLworICAgICQoIiNkZXBlbmRlbmNpZXMtbW9kYWwtZm9ybSIpLnVuYmluZCgnc3VibWl0Jyk7CisKKyAgICAkKCIjZGVwZW5kZW5jaWVzLW1vZGFsLWZvcm0iKS5zdWJtaXQoZnVuY3Rpb24gKGUpIHsKKyAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICAgIHZhciBzZWxlY3RlZExheWVySWRzID0gW107CisgICAgICB2YXIgc2VsZWN0ZWRMYXllcnMgPSBbXTsKKworICAgICAgJCgiaW5wdXRbbmFtZT0nZGVwZW5kZW5jaWVzJ106Y2hlY2tlZCIpLmVhY2goZnVuY3Rpb24gKCkgeworICAgICAgICBzZWxlY3RlZExheWVySWRzLnB1c2gocGFyc2VJbnQoJCh0aGlzKS52YWwoKSkpOworICAgICAgfSk7CisKKyAgICAgIC8qIC0xIGlzIGEgc3BlY2lhbCBkdW1teSBJZCB3aGljaCB3ZSB1c2Ugd2hlbiB0aGUgbGF5ZXIgaXNuJ3QgeWV0IGluIHRoZQorICAgICAgICogc3lzdGVtLCBub3JtYWxseSB3ZSB3b3VsZCBhZGQgdGhlIGN1cnJlbnQgbGF5ZXIgdG8gdGhlIHNlbGVjdGlvbi4KKyAgICAgICAqLworICAgICAgaWYgKGxheWVyLmlkICE9IC0xKQorICAgICAgICBzZWxlY3RlZExheWVySWRzLnB1c2gobGF5ZXIuaWQpOworCisgICAgICAvKiBGaW5kIHRoZSBzZWxlY3RlZCBsYXllciBvYmplY3RzIGZyb20gb3VyIG9yaWdpbmFsIGxpc3QgKi8KKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0ZWRMYXllcklkcy5sZW5ndGg7IGkrKykgeworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRlcGVuZGVuY2llcy5sZW5ndGg7IGorKykgeworICAgICAgICAgIGlmIChkZXBlbmRlbmNpZXNbal0uaWQgPT0gc2VsZWN0ZWRMYXllcklkc1tpXSkgeworICAgICAgICAgICAgc2VsZWN0ZWRMYXllcnMucHVzaChkZXBlbmRlbmNpZXNbal0pOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoYWRkVG9Qcm9qZWN0KSB7CisgICAgICAgIGxpYnRvYXN0ZXIuZWRpdEN1cnJlbnRQcm9qZWN0KHsgJ2xheWVyQWRkJzogc2VsZWN0ZWRMYXllcklkcy5qb2luKCIsIikgfSwgZnVuY3Rpb24gKCkgeworICAgICAgICAgIGlmIChzdWNjZXNzQWRkKSB7CisgICAgICAgICAgICBzdWNjZXNzQWRkKHNlbGVjdGVkTGF5ZXJzKTsKKyAgICAgICAgICB9CisgICAgICAgIH0sIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICBjb25zb2xlLndhcm4oIkFkZGluZyBsYXllcnMgdG8gcHJvamVjdCBmYWlsZWQiKTsKKyAgICAgICAgfSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBzdWNjZXNzQWRkKHNlbGVjdGVkTGF5ZXJzKTsKKyAgICAgIH0KKworICAgICAgJCgnI2RlcGVuZGVuY2llcy1tb2RhbCcpLm1vZGFsKCdoaWRlJyk7CisgICAgfSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9sYXllcmRldGFpbHMuanMgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvbGF5ZXJkZXRhaWxzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMGU4MDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvbGF5ZXJkZXRhaWxzLmpzCkBAIC0wLDAgKzEsMzkyIEBACisidXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIGxheWVyRGV0YWlsc1BhZ2VJbml0IChjdHgpIHsKKworICB2YXIgbGF5ZXJEZXBJbnB1dCA9ICQoIiNsYXllci1kZXAtaW5wdXQiKTsKKyAgdmFyIGxheWVyRGVwQnRuID0gJCgiI2FkZC1sYXllci1kZXBlbmRlbmN5LWJ0biIpOworICB2YXIgbGF5ZXJEZXBzTGlzdCA9ICQoIiNsYXllci1kZXBzLWxpc3QiKTsKKyAgdmFyIGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbjsKKyAgdmFyIGFkZFJtTGF5ZXJCdG4gPSAkKCIjYWRkLXJlbW92ZS1sYXllci1idG4iKTsKKworICAvKiBzZXR1cCB0aGUgZGVwZW5kZW5jaWVzIHR5cGVhaGVhZCAqLworICBsaWJ0b2FzdGVyLm1ha2VUeXBlYWhlYWQobGF5ZXJEZXBJbnB1dCwgbGlidG9hc3Rlci5jdHgubGF5ZXJzVHlwZUFoZWFkVXJsLCB7IGluY2x1ZGVfYWRkZWQ6ICJ0cnVlIiB9LCBmdW5jdGlvbihpdGVtKXsKKyAgICBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24gPSBpdGVtOworCisgICAgbGF5ZXJEZXBCdG4ucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgfSk7CisKKyAgJCgiLmJyZWFkY3J1bWIgbGk6Zmlyc3QgYSIpLmNsaWNrKGZ1bmN0aW9uKGUpeworICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICAvKiBCeSBkZWZhdWx0IHRoaXMgbGluayBnb2VzIHRvIHRoZSBwcm9qZWN0IGNvbmZpZ3VyYXRpb24gcGFnZS4gSG93ZXZlcgorICAgICAqIGlmIHdlIGhhdmUgc29tZSBidWlsZHMgd2UgZ28gdGhlcmUgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBocmVmCisgICAgICovCisgICAgbGlidG9hc3Rlci5nZXRQcm9qZWN0SW5mbyhsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0UGFnZVVybCwgZnVuY3Rpb24ocHJqSW5mbyl7CisgICAgICBpZiAocHJqSW5mby5idWlsZHMgJiYgcHJqSW5mby5idWlsZHMubGVuZ3RoID4gMCkgeworICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0QnVpbGRzVXJsKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKGxpYnRvYXN0ZXIuY3R4LnByb2plY3RQYWdlVXJsKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfSk7CisKKyAgZnVuY3Rpb24gYWRkUmVtb3ZlRGVwKGRlcExheWVySWQsIGFkZCwgZG9uZUNiKSB7CisgICAgdmFyIGRhdGEgPSB7IGxheWVyX3ZlcnNpb25faWQgOiBjdHgubGF5ZXJWZXJzaW9uLmlkIH07CisgICAgaWYgKGFkZCkKKyAgICAgIGRhdGEuYWRkX2RlcCA9IGRlcExheWVySWQ7CisgICAgZWxzZQorICAgICAgZGF0YS5ybV9kZXAgPSBkZXBMYXllcklkOworCisgICAgJC5hamF4KHsKKyAgICAgICAgdHlwZTogIlBPU1QiLAorICAgICAgICB1cmw6IGN0eC54aHJVcGRhdGVMYXllclVybCwKKyAgICAgICAgZGF0YTogZGF0YSwKKyAgICAgICAgaGVhZGVyczogeyAnWC1DU1JGVG9rZW4nIDogJC5jb29raWUoJ2NzcmZ0b2tlbicpfSwKKyAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICBpZiAoZGF0YS5lcnJvciAhPSAib2siKSB7CisgICAgICAgICAgICBjb25zb2xlLndhcm4oZGF0YS5lcnJvcik7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRvbmVDYigpOworICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgICAgY29uc29sZS53YXJuKCJDYWxsIGZhaWxlZCIpOworICAgICAgICAgIGNvbnNvbGUud2FybihkYXRhKTsKKyAgICAgICAgfQorICAgIH0pOworICB9CisKKyAgZnVuY3Rpb24gbGF5ZXJEZXBSZW1vdmVDbGljaygpIHsKKyAgICB2YXIgdG9SZW1vdmUgPSAkKHRoaXMpLnBhcmVudCgpLmRhdGEoJ2xheWVyLWlkJyk7CisgICAgdmFyIGxheWVyRGVwSXRlbSA9ICQodGhpcyk7CisKKyAgICBhZGRSZW1vdmVEZXAodG9SZW1vdmUsIGZhbHNlLCBmdW5jdGlvbigpeworICAgICAgbGF5ZXJEZXBJdGVtLnBhcmVudCgpLmZhZGVPdXQoZnVuY3Rpb24gKCl7CisgICAgICAgIGxheWVyRGVwSXRlbS5yZW1vdmUoKTsKKyAgICAgIH0pOworICAgIH0pOworICB9CisKKyAgLyogQWRkIGRlcGVuZGVuY3kgbGF5ZXIgYnV0dG9uIGNsaWNrIGhhbmRsZXIgKi8KKyAgbGF5ZXJEZXBCdG4uY2xpY2soZnVuY3Rpb24oKXsKKyAgICBpZiAoY3VycmVudExheWVyRGVwU2VsZWN0aW9uID09PSB1bmRlZmluZWQpCisgICAgICByZXR1cm47CisKKyAgICBhZGRSZW1vdmVEZXAoY3VycmVudExheWVyRGVwU2VsZWN0aW9uLmlkLCB0cnVlLCBmdW5jdGlvbigpeworICAgICAgLyogTWFrZSBhIGxpc3QgaXRlbSBmb3IgdGhlIG5ldyBsYXllciBkZXBlbmRlbmN5ICovCisgICAgICB2YXIgbmV3TGF5ZXJEZXAgPSAkKCI8bGk+PGE+PC9hPjxzcGFuIGNsYXNzPVwiaWNvbi10cmFzaFwiIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiIHRpdGxlPVwiRGVsZXRlXCI+PC9zcGFuPjwvbGk+Iik7CisKKyAgICAgIG5ld0xheWVyRGVwLmRhdGEoJ2xheWVyLWlkJywgY3VycmVudExheWVyRGVwU2VsZWN0aW9uLmlkKTsKKyAgICAgIG5ld0xheWVyRGVwLmNoaWxkcmVuKCJzcGFuIikudG9vbHRpcCgpOworCisgICAgICB2YXIgbGluayA9IG5ld0xheWVyRGVwLmNoaWxkcmVuKCJhIik7CisgICAgICBsaW5rLmF0dHIoImhyZWYiLCBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24ubGF5ZXJkZXRhaWx1cmwpOworICAgICAgbGluay50ZXh0KGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbi5uYW1lKTsKKyAgICAgIGxpbmsudG9vbHRpcCh7dGl0bGU6IGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbi50b29sdGlwLCBwbGFjZW1lbnQ6ICJyaWdodCJ9KTsKKworICAgICAgLyogQ29ubmVjdCB1cCB0aGUgdGFzaCBpY29uICovCisgICAgICB2YXIgdHJhc2hJdGVtID0gbmV3TGF5ZXJEZXAuY2hpbGRyZW4oInNwYW4iKTsKKyAgICAgIHRyYXNoSXRlbS5jbGljayhsYXllckRlcFJlbW92ZUNsaWNrKTsKKworICAgICAgbGF5ZXJEZXBzTGlzdC5hcHBlbmQobmV3TGF5ZXJEZXApOworICAgICAgLyogQ2xlYXIgdGhlIGN1cnJlbnQgc2VsZWN0aW9uICovCisgICAgICBsYXllckRlcElucHV0LnZhbCgiIik7CisgICAgICBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24gPSB1bmRlZmluZWQ7CisgICAgICBsYXllckRlcEJ0bi5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7CisgICAgfSk7CisgIH0pOworCisgICQoIi5pY29uLXBlbmNpbCIpLmNsaWNrKGZ1bmN0aW9uICgpeworICAgIHZhciBtUGFyZW50ID0gJCh0aGlzKS5wYXJlbnQoImRkIik7CisgICAgbVBhcmVudC5wcmV2KCkuY3NzKCJtYXJnaW4tdG9wIiwgIjEwcHgiKTsKKyAgICBtUGFyZW50LmNoaWxkcmVuKCJmb3JtIikuc2xpZGVEb3duKCk7CisgICAgdmFyIGN1cnJlbnRWYWwgPSBtUGFyZW50LmNoaWxkcmVuKCIuY3VycmVudC12YWx1ZSIpOworICAgIGN1cnJlbnRWYWwuaGlkZSgpOworICAgIC8qIFNldCB0aGUgY3VycmVudCB2YWx1ZSB0byB0aGUgaW5wdXQgZmllbGQgKi8KKyAgICBtUGFyZW50LmZpbmQoInRleHRhcmVhLGlucHV0IikudmFsKGN1cnJlbnRWYWwudGV4dCgpKTsKKyAgICAvKiBIaWRlcyB0aGUgIk5vdCBzZXQiIHRleHQgKi8KKyAgICBtUGFyZW50LmNoaWxkcmVuKCIubXV0ZWQiKS5oaWRlKCk7CisgICAgLyogV2UncmUgZWRpdGluZyBzbyBoaWRlIHRoZSBkZWxldGUgaWNvbiAqLworICAgIG1QYXJlbnQuY2hpbGRyZW4oIi5kZWxldGUtY3VycmVudC12YWx1ZSIpLmhpZGUoKTsKKyAgICBtUGFyZW50LmZpbmQoIi5jYW5jZWwiKS5zaG93KCk7CisgICAgJCh0aGlzKS5oaWRlKCk7CisgIH0pOworCisgICQoIi5kZWxldGUtY3VycmVudC12YWx1ZSIpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgdmFyIG1QYXJlbnQgPSAkKHRoaXMpLnBhcmVudCgiZGQiKTsKKyAgICBtUGFyZW50LmZpbmQoImlucHV0IikudmFsKCIiKTsKKyAgICBtUGFyZW50LmZpbmQoInRleHRhcmVhIikudmFsKCIiKTsKKyAgICBtUGFyZW50LmZpbmQoIi5jaGFuZ2UtYnRuIikuY2xpY2soKTsKKyAgfSk7CisKKyAgJCgiLmNhbmNlbCIpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgdmFyIG1QYXJlbnQgPSAkKHRoaXMpLnBhcmVudHMoImRkIik7CisgICAgJCh0aGlzKS5oaWRlKCk7CisgICAgbVBhcmVudC5jaGlsZHJlbigiZm9ybSIpLnNsaWRlVXAoZnVuY3Rpb24oKXsKKyAgICAgIG1QYXJlbnQuY2hpbGRyZW4oIi5jdXJyZW50LXZhbHVlIikuc2hvdygpOworICAgICAgLyogU2hvdyB0aGUgIk5vdCBzZXQiIHRleHQgaWYgd2UgZW5kZWQgdXAgd2l0aCBubyB2YWx1ZSAqLworICAgICAgaWYgKCFtUGFyZW50LmNoaWxkcmVuKCIuY3VycmVudC12YWx1ZSIpLmh0bWwoKSl7CisgICAgICAgIG1QYXJlbnQuY2hpbGRyZW4oIi5tdXRlZCIpLmZhZGVJbigpOworICAgICAgICBtUGFyZW50LmNoaWxkcmVuKCIuZGVsZXRlLWN1cnJlbnQtdmFsdWUiKS5oaWRlKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBtUGFyZW50LmNoaWxkcmVuKCIuZGVsZXRlLWN1cnJlbnQtdmFsdWUiKS5zaG93KCk7CisgICAgICB9CisKKyAgICAgIG1QYXJlbnQuY2hpbGRyZW4oIi5pY29uLXBlbmNpbCIpLnNob3coKTsKKyAgICAgIG1QYXJlbnQucHJldigpLmNzcygibWFyZ2luLXRvcCIsICIwcHgiKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgZnVuY3Rpb24gZGVmYXVsdEFkZEJ0blRleHQoKXsKKyAgICAgIHZhciB0ZXh0ID0gIiBBZGQgdGhlICIrY3R4LmxheWVyVmVyc2lvbi5uYW1lKyIgbGF5ZXIgdG8geW91ciBwcm9qZWN0IjsKKyAgICAgIGFkZFJtTGF5ZXJCdG4udGV4dCh0ZXh0KTsKKyAgICAgIGFkZFJtTGF5ZXJCdG4ucHJlcGVuZCgiPHNwYW4gY2xhc3M9XCJpY29uLXBsdXNcIj48L3NwYW4+Iik7CisgICAgICBhZGRSbUxheWVyQnRuLnJlbW92ZUNsYXNzKCJidG4tZGFuZ2VyIik7CisgIH0KKworICAkKCIjZGV0YWlscy10YWIiKS5vbignc2hvdycsIGZ1bmN0aW9uKCl7CisgICAgaWYgKCFjdHgubGF5ZXJWZXJzaW9uLmluQ3VycmVudFByaikKKyAgICAgIGRlZmF1bHRBZGRCdG5UZXh0KCk7CisKKyAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9ICJkZXRhaWxzIjsKKyAgfSk7CisKKyAgZnVuY3Rpb24gdGFyZ2V0c1RhYlNob3coKXsKKyAgICBpZiAoIWN0eC5sYXllclZlcnNpb24uaW5DdXJyZW50UHJqKXsKKyAgICAgIGlmIChjdHgubnVtVGFyZ2V0cyA+IDApIHsKKyAgICAgICAgdmFyIHRleHQgPSAiIEFkZCB0aGUgIitjdHgubGF5ZXJWZXJzaW9uLm5hbWUrIiBsYXllciB0byB5b3VyIHByb2plY3QgIisKKyAgICAgICAgICAidG8gZW5hYmxlIHRoZXNlIHJlY2lwZXMiOworICAgICAgICBhZGRSbUxheWVyQnRuLnRleHQodGV4dCk7CisgICAgICAgIGFkZFJtTGF5ZXJCdG4ucHJlcGVuZCgiPHNwYW4gY2xhc3M9XCJpY29uLXBsdXNcIj48L3NwYW4+Iik7CisgICAgICB9IGVsc2UgeworICAgICAgICBkZWZhdWx0QWRkQnRuVGV4dCgpOworICAgICAgfQorICAgIH0KKworICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gInJlY2lwZXMiOworICB9CisKKyAgJCgiI3JlY2lwZXN0YWJsZSIpLm9uKCd0YWJsZS1kb25lJywgZnVuY3Rpb24oZSwgdG90YWwsIHRhYmxlUGFyYW1zKXsKKyAgICBjdHgubnVtVGFyZ2V0cyA9IHRvdGFsOworCisgICAgaWYgKHRvdGFsID09PSAwICYmICF0YWJsZVBhcmFtcy5zZWFyY2gpIHsKKyAgICAgICQoIiNuby1yZWNpcGVzLXlldCIpLnNob3coKTsKKyAgICB9IGVsc2UgeworICAgICAgJCgiI25vLXJlY2lwZXMteWV0IikuaGlkZSgpOworICAgIH0KKworICAgICQoIiN0YXJnZXRzLXRhYiIpLnJlbW92ZUNsYXNzKCJtdXRlZCIpOworICAgIGlmICh3aW5kb3cubG9jYXRpb24uaGFzaCA9PT0gIiNyZWNpcGVzIil7CisgICAgICAvKiByZSBydW4gdGhlIG1hY2hpbmVzVGFiU2hvdyB0byB1cGRhdGUgdGhlIHRleHQgKi8KKyAgICAgIHRhcmdldHNUYWJTaG93KCk7CisgICAgfQorICB9KTsKKworICAkKCIjbWFjaGluZXN0YWJsZSIpLm9uKCd0YWJsZS1kb25lJywgZnVuY3Rpb24oZSwgdG90YWwsIHRhYmxlUGFyYW1zKXsKKyAgICBjdHgubnVtTWFjaGluZXMgPSB0b3RhbDsKKworICAgIGlmICh0b3RhbCA9PT0gMCAmJiAhdGFibGVQYXJhbXMuc2VhcmNoKQorICAgICAgJCgiI25vLW1hY2hpbmVzLXlldCIpLnNob3coKTsKKyAgICBlbHNlCisgICAgICAkKCIjbm8tbWFjaGluZXMteWV0IikuaGlkZSgpOworCisgICAgJCgiI21hY2hpbmVzLXRhYiIpLnJlbW92ZUNsYXNzKCJtdXRlZCIpOworICAgIGlmICh3aW5kb3cubG9jYXRpb24uaGFzaCA9PT0gIiNtYWNoaW5lcyIpeworICAgICAgLyogcmUgcnVuIHRoZSBtYWNoaW5lc1RhYlNob3cgdG8gdXBkYXRlIHRoZSB0ZXh0ICovCisgICAgICBtYWNoaW5lc1RhYlNob3coKTsKKyAgICB9CisKKyAgICAkKCIuc2VsZWN0LW1hY2hpbmUtYnRuIikuY2xpY2soZnVuY3Rpb24oZSl7CisgICAgICBpZiAoJCh0aGlzKS5hdHRyKCJkaXNhYmxlZCIpID09PSAiZGlzYWJsZWQiKQorICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgfSk7CisKKyAgfSk7CisKKyAgJCgiI3RhcmdldHMtdGFiIikub24oJ3Nob3cnLCB0YXJnZXRzVGFiU2hvdyk7CisKKyAgZnVuY3Rpb24gbWFjaGluZXNUYWJTaG93KCl7CisgICAgaWYgKCFjdHgubGF5ZXJWZXJzaW9uLmluQ3VycmVudFByaikgeworICAgICAgaWYgKGN0eC5udW1NYWNoaW5lcyA+IDApeworICAgICAgICB2YXIgdGV4dCA9ICIgQWRkIHRoZSAiK2N0eC5sYXllclZlcnNpb24ubmFtZSsiIGxheWVyIHRvIHlvdXIgcHJvamVjdCAiICsKKyAgICAgICAgICAidG8gZW5hYmxlIHRoZXNlIG1hY2hpbmVzIjsKKyAgICAgICAgYWRkUm1MYXllckJ0bi50ZXh0KHRleHQpOworICAgICAgICBhZGRSbUxheWVyQnRuLnByZXBlbmQoIjxzcGFuIGNsYXNzPVwiaWNvbi1wbHVzXCI+PC9zcGFuPiIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZGVmYXVsdEFkZEJ0blRleHQoKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9ICJtYWNoaW5lcyI7CisgIH0KKworICAkKCIjbWFjaGluZXMtdGFiIikub24oJ3Nob3cnLCBtYWNoaW5lc1RhYlNob3cpOworCisgICQoIi5wYWdlc2l6ZSIpLmNoYW5nZShmdW5jdGlvbigpeworICAgIHZhciBzZWFyY2ggPSBsaWJ0b2FzdGVyLnBhcnNlVXJsUGFyYW1zKCk7CisgICAgc2VhcmNoLmxpbWl0ID0gdGhpcy52YWx1ZTsKKworICAgIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggPSBsaWJ0b2FzdGVyLmR1bXBzVXJsUGFyYW1zKHNlYXJjaCk7CisgIH0pOworCisgIC8qIEVuYWJsZXMgdGhlIEJ1aWxkIHRhcmdldCBhbmQgU2VsZWN0IE1hY2hpbmUgYnV0dG9ucyBhbmQgc3dpdGNoZXMgdGhlCisgICAqIGFkZC9yZW1vdmUgYnV0dG9uCisgICAqLworICBmdW5jdGlvbiBzZXRMYXllckluQ3VycmVudFByaihhZGRlZCkgeworICAgIGN0eC5sYXllclZlcnNpb24uaW5DdXJyZW50UHJqID0gYWRkZWQ7CisKKyAgICBpZiAoYWRkZWQpeworICAgICAgLyogZW5hYmxlIGFuZCBzd2l0Y2ggYWxsIHRoZSBidXR0b24gc3RhdGVzICovCisgICAgICAkKCIuYnVpbGQtdGFyZ2V0LWJ0biIpLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgICAkKCIuc2VsZWN0LW1hY2hpbmUtYnRuIikucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgICAgIGFkZFJtTGF5ZXJCdG4uYWRkQ2xhc3MoImJ0bi1kYW5nZXIiKTsKKyAgICAgIGFkZFJtTGF5ZXJCdG4uZGF0YSgnZGlyZWN0aXZlJywgInJlbW92ZSIpOworICAgICAgYWRkUm1MYXllckJ0bi50ZXh0KCIgRGVsZXRlIHRoZSAiK2N0eC5sYXllclZlcnNpb24ubmFtZSsiIGxheWVyIGZyb20geW91ciBwcm9qZWN0Iik7CisgICAgICBhZGRSbUxheWVyQnRuLnByZXBlbmQoIjxzcGFuIGNsYXNzPVwiaWNvbi10cmFzaFwiPjwvc3Bhbj4iKTsKKworICAgIH0gZWxzZSB7CisgICAgICAvKiBkaXNhYmxlIGFuZCBzd2l0Y2ggYWxsIHRoZSBidXR0b24gc3RhdGVzICovCisgICAgICAkKCIuYnVpbGQtdGFyZ2V0LWJ0biIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKyAgICAgICQoIi5zZWxlY3QtbWFjaGluZS1idG4iKS5hdHRyKCJkaXNhYmxlZCIsICJkaXNhYmxlZCIpOworICAgICAgYWRkUm1MYXllckJ0bi5yZW1vdmVDbGFzcygiYnRuLWRhbmdlciIpOworICAgICAgYWRkUm1MYXllckJ0bi5kYXRhKCdkaXJlY3RpdmUnLCAiYWRkIik7CisKKyAgICAgIC8qICJzcGVjaWFsIiBoYW5kbGVyIHNvIHRoYXQgd2UgZ2V0IHRoZSBjb3JyZWN0IGJ1dHRvbiB0ZXh0IHdoaWNoIGRlcGVuZHMKKyAgICAgICAqIG9uIHdoaWNoIHRhYiBpcyBjdXJyZW50bHkgdmlzaWJsZS4gVW5mb3J0dW5hdGVseSB3ZSBjYW4ndCBqdXN0IGNhbGwKKyAgICAgICAqIHRhYignc2hvdycpIGFzIGlmIGl0J3MgYWxyZWFkeSB2aXNpYmxlIGl0IGRvZXNuJ3QgcnVuIHRoZSBldmVudC4KKyAgICAgICAqLworICAgICAgc3dpdGNoICgkKCIubmF2LXBpbGxzIC5hY3RpdmUgYSIpLnByb3AoJ2lkJykpeworICAgICAgICBjYXNlICdtYWNoaW5lcy10YWInOgorICAgICAgICAgIG1hY2hpbmVzVGFiU2hvdygpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd0YXJnZXRzLXRhYic6CisgICAgICAgICAgdGFyZ2V0c1RhYlNob3coKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBkZWZhdWx0QWRkQnRuVGV4dCgpOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfQorCisgICQoIiNkaXNtaXNzLWFsZXJ0IikuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAkKHRoaXMpLnBhcmVudCgpLmZhZGVPdXQoKTsKKyAgfSk7CisKKyAgLyogQWRkIG9yIHJlbW92ZSB0aGlzIGxheWVyIGZyb20gdGhlIHByb2plY3QgKi8KKyAgYWRkUm1MYXllckJ0bi5jbGljayhmdW5jdGlvbigpIHsKKworICAgIHZhciBhZGQgPSAoJCh0aGlzKS5kYXRhKCdkaXJlY3RpdmUnKSA9PT0gImFkZCIpOworCisgICAgbGlidG9hc3Rlci5hZGRSbUxheWVyKGN0eC5sYXllclZlcnNpb24sIGFkZCwgZnVuY3Rpb24gKGxheWVyc0xpc3QpeworICAgICAgdmFyIGFsZXJ0TXNnID0gJCgiI2FsZXJ0LW1zZyIpOworICAgICAgYWxlcnRNc2cuaHRtbChsaWJ0b2FzdGVyLm1ha2VMYXllckFkZFJtQWxlcnRNc2coY3R4LmxheWVyVmVyc2lvbiwgbGF5ZXJzTGlzdCwgYWRkKSk7CisKKyAgICAgIHNldExheWVySW5DdXJyZW50UHJqKGFkZCk7CisKKyAgICAgICQoIiNhbGVydC1hcmVhIikuc2hvdygpOworICAgIH0pOworICB9KTsKKworICAvKiBIYW5kbGVyIGZvciBhbGwgb2YgdGhlIENoYW5nZSBidXR0b25zICovCisgICQoIi5jaGFuZ2UtYnRuIikuY2xpY2soZnVuY3Rpb24oKXsKKyAgICB2YXIgbVBhcmVudCA9ICQodGhpcykucGFyZW50KCk7CisgICAgdmFyIHByb3AgPSAkKHRoaXMpLmRhdGEoJ2xheWVyLXByb3AnKTsKKworICAgIC8qIFdlIGhhdmUgaW5wdXRzLCBzZWxlY3QgYW5kIHRleHRhcmVhcyB0byBwb3RlbnRpYWxseSBncmFiIHRoZSB2YWx1ZQorICAgICAqIGZyb20uCisgICAgICovCisgICAgdmFyIGVudHJ5RWxlbWVudCA9IG1QYXJlbnQuZmluZCgiaW5wdXQiKTsKKyAgICBpZiAoZW50cnlFbGVtZW50Lmxlbmd0aCA9PT0gMCkKKyAgICAgIGVudHJ5RWxlbWVudCA9IG1QYXJlbnQuZmluZCgidGV4dGFyZWEiKTsKKyAgICBpZiAoZW50cnlFbGVtZW50Lmxlbmd0aCA9PT0gMCkgeworICAgICAgY29uc29sZS53YXJuKCJDb3VsZCBub3QgZmluZCBlbGVtZW50IHRvIGdldCBkYXRhIGZyb20gZm9yIHRoaXMgY2hhbmdlIik7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgdmFyIGRhdGEgPSB7IGxheWVyX3ZlcnNpb25faWQ6IGN0eC5sYXllclZlcnNpb24uaWQgfTsKKyAgICBkYXRhW3Byb3BdID0gZW50cnlFbGVtZW50LnZhbCgpOworCisgICAgJC5hamF4KHsKKyAgICAgICAgdHlwZTogIlBPU1QiLAorICAgICAgICB1cmw6IGN0eC54aHJVcGRhdGVMYXllclVybCwKKyAgICAgICAgZGF0YTogZGF0YSwKKyAgICAgICAgaGVhZGVyczogeyAnWC1DU1JGVG9rZW4nIDogJC5jb29raWUoJ2NzcmZ0b2tlbicpfSwKKyAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICBpZiAoZGF0YS5lcnJvciAhPSAib2siKSB7CisgICAgICAgICAgICBjb25zb2xlLndhcm4oZGF0YS5lcnJvcik7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIHN1Y2Nlc3MgbGF5ZXIgcHJvcGVydHkgY2hhbmdlZCAqLworICAgICAgICAgICAgdmFyIGlucHV0QXJlYSA9IG1QYXJlbnQucGFyZW50cygiZGQiKTsKKyAgICAgICAgICAgIHZhciB0ZXh0OworCisgICAgICAgICAgICB0ZXh0ID0gZW50cnlFbGVtZW50LnZhbCgpOworCisgICAgICAgICAgICAvKiBIaWRlIHRoZSAiTm90IHNldCIgdGV4dCBpZiBpdCdzIHZpc2libGUgKi8KKyAgICAgICAgICAgIGlucHV0QXJlYS5maW5kKCIubXV0ZWQiKS5oaWRlKCk7CisgICAgICAgICAgICBpbnB1dEFyZWEuZmluZCgiLmN1cnJlbnQtdmFsdWUiKS50ZXh0KHRleHQpOworICAgICAgICAgICAgLyogU2FtZSBiZWhhdmlvdXIgYXMgY2FuY2VsIGluIHRoYXQgd2UgaGlkZSB0aGUgZm9ybS9zaG93IGN1cnJlbnQKKyAgICAgICAgICAgICAqIHZhbHVlLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpbnB1dEFyZWEuZmluZCgiLmNhbmNlbCIpLmNsaWNrKCk7CisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICBjb25zb2xlLndhcm4oIkNhbGwgZmFpbGVkIik7CisgICAgICAgICAgY29uc29sZS53YXJuKGRhdGEpOworICAgICAgICB9CisgICAgfSk7CisgIH0pOworCisgIC8qIERpc2FibGUgdGhlIGNoYW5nZSBidXR0b24gd2hlbiB3ZSBoYXZlIG5vIGRhdGEgaW4gdGhlIGlucHV0ICovCisgICQoImRsIGlucHV0LCBkbCB0ZXh0YXJlYSIpLm9uKCJpbnB1dCIsZnVuY3Rpb24oKSB7CisgICAgaWYgKCQodGhpcykudmFsKCkubGVuZ3RoID09PSAwKQorICAgICAgJCh0aGlzKS5wYXJlbnQoKS5jaGlsZHJlbigiLmNoYW5nZS1idG4iKS5hdHRyKCJkaXNhYmxlZCIsICJkaXNhYmxlZCIpOworICAgIGVsc2UKKyAgICAgICQodGhpcykucGFyZW50KCkuY2hpbGRyZW4oIi5jaGFuZ2UtYnRuIikucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgfSk7CisKKyAgLyogVGhpcyBjaGVja3MgdG8gc2VlIGlmIHRoZSBkdCdzIGRkIGhhcyBkYXRhIGluIGl0IG9yIGlmIHRoZSBjaGFuZ2UgZGF0YQorICAgKiBmb3JtIGlzIHZpc2libGUsIG90aGVyd2lzZSBoaWRlIGl0CisgICAqLworICAkKCJkbCIpLmNoaWxkcmVuKCkuZWFjaChmdW5jdGlvbiAoKXsKKyAgICBpZiAoJCh0aGlzKS5pcygiZHQiKSkgeworICAgICAgdmFyIGRkID0gJCh0aGlzKS5uZXh0KCJkZCIpOworICAgICAgaWYgKCFkZC5jaGlsZHJlbigiZm9ybTp2aXNpYmxlIil8fCAhZGQuZmluZCgiLmN1cnJlbnQtdmFsdWUiKS5odG1sKCkpeworICAgICAgICBpZiAoY3R4LmxheWVyVmVyc2lvbi5zb3VyY2VJZCA9PSAzKXsKKyAgICAgICAgLyogVGhlcmUncyBubyBjdXJyZW50IHZhbHVlIGFuZCB0aGUgbGF5ZXIgaXMgZWRpdGFibGUKKyAgICAgICAgICogc28gc2hvdyB0aGUgIk5vdCBzZXQiIGFuZCBoaWRlIHRoZSBkZWxldGUgaWNvbgorICAgICAgICAgKi8KKyAgICAgICAgZGQuZmluZCgiLm11dGVkIikuc2hvdygpOworICAgICAgICBkZC5maW5kKCIuZGVsZXRlLWN1cnJlbnQtdmFsdWUiKS5oaWRlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgLyogV2UncmUgbm90IHZpZXdpbmcgYW4gZWRpdGFibGUgbGF5ZXIgc28gaGlkZSB0aGUgZW1wdHkgZGQvZGwgcGFpciAqLworICAgICAgICAgICQodGhpcykuaGlkZSgpOworICAgICAgICAgIGRkLmhpZGUoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfSk7CisKKyAgLyogSGlkZSB0aGUgcmlnaHQgY29sdW1uIGlmIGl0IGNvbnRhaW5zIG5vIGluZm9ybWF0aW9uICovCisgIGlmICgkKCJkbC5pdGVtLWluZm8iKS5jaGlsZHJlbignOnZpc2libGUnKS5sZW5ndGggPT09IDApIHsKKyAgICAkKCJkbC5pdGVtLWluZm8iKS5wYXJlbnQoKS5oaWRlKCk7CisgIH0KKworICAvKiBDbGVhciB0aGUgY3VycmVudCBzZWFyY2ggc2VsZWN0aW9uIGFuZCByZWxvYWQgdGhlIHJlc3VsdHMgKi8KKyAgJCgiLnRhcmdldC1zZWFyY2gtY2xlYXIiKS5jbGljayhmdW5jdGlvbigpeworICAgICQoIiN0YXJnZXQtc2VhcmNoIikudmFsKCIiKTsKKyAgICAkKHRoaXMpLnBhcmVudHMoImZvcm0iKS5zdWJtaXQoKTsKKyAgfSk7CisKKyAgJCgiLm1hY2hpbmUtc2VhcmNoLWNsZWFyIikuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAkKCIjbWFjaGluZS1zZWFyY2giKS52YWwoIiIpOworICAgICQodGhpcykucGFyZW50cygiZm9ybSIpLnN1Ym1pdCgpOworICB9KTsKKworCisgIGxheWVyRGVwc0xpc3QuZmluZCgiLmljb24tdHJhc2giKS5jbGljayhsYXllckRlcFJlbW92ZUNsaWNrKTsKKyAgbGF5ZXJEZXBzTGlzdC5maW5kKCJhIikudG9vbHRpcCgpOworICAkKCIuaWNvbi10cmFzaCIpLnRvb2x0aXAoKTsKKyAgJCgiLmNvbW1pdCIpLnRvb2x0aXAoKTsKKworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2xpYnRvYXN0ZXIuanMgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvbGlidG9hc3Rlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDRmN2FiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2xpYnRvYXN0ZXIuanMKQEAgLTAsMCArMSw1NzQgQEAKKyJ1c2Ugc3RyaWN0IjsKKy8qIEFsbCBzaGFyZWQgZnVuY3Rpb25hbGl0eSB0byBnbyBpbiBsaWJ0b2FzdGVyIG9iamVjdC4KKyAqIFRoaXMgb2JqZWN0IHJlYWxseSBqdXN0IGhlbHBzIHJlYWRhYmlsaXR5IHNpbmNlIHdlIGNhbiB0aGVuIGhhdmUKKyAqIGEgdHJhY2VhYmxlIG5hbWVzcGFjZS4KKyAqLwordmFyIGxpYnRvYXN0ZXIgPSAoZnVuY3Rpb24gKCl7CisKKyAgLyogbWFrZVR5cGVhaGVhZCBwYXJhbWV0ZXJzCisgICAqIGVsZW1lbnRTZWxlY3RvcjogSlF1ZXJ5IGVsZW1lbnRTZWxlY3RvciBzdHJpbmcKKyAgICogeGhyVXJsOiB0aGUgdXJsIHRvIGdldCB0aGUgSlNPTiBmcm9tIGV4cGVjdHMgSlNPTiBpbiB0aGUgZm9ybToKKyAgICogIHsgImxpc3QiOiBbIHsgIm5hbWUiOiAidGVzdCIsICJkZXRhaWwiIDogImEgdGVzdCB0aGluZyIgIH0sIC4uLi4gXSB9CisgICAqIHhoclBhcmFtczogdGhlIGRhdGEvcGFyYW1ldGVycyB0byBwYXNzIHRvIHRoZSBnZXRKU09OIHVybCBlLmcuCisgICAqICB7ICd0eXBlJyA6ICdwcm9qZWN0cycgfSB0aGUgdGV4dCB0eXBlZCB3aWxsIGJlIHBhc3NlZCBhcyAnc2VhcmNoJy4KKyAgICogIHNlbGVjdGVkQ0I6IGZ1bmN0aW9uIHRvIGNhbGwgb25jZSBhbiBpdGVtIGhhcyBiZWVuIHNlbGVjdGVkIG9uZQorICAgKiAgYXJnIG9mIHRoZSBpdGVtLgorICAgKi8KKyAgZnVuY3Rpb24gX21ha2VUeXBlYWhlYWQgKGpRRWxlbWVudCwgeGhyVXJsLCB4aHJQYXJhbXMsIHNlbGVjdGVkQ0IpIHsKKyAgICBpZiAoIXhoclVybCB8fCB4aHJVcmwubGVuZ3RoID09PSAwKQorICAgICAgdGhyb3coIk5vIHVybCB0byB0eXBlYWhlYWQgc3VwcGxpZWQiKTsKKworICAgIHZhciB4aHJSZXE7CisKKyAgICBqUUVsZW1lbnQudHlwZWFoZWFkKHsKKyAgICAgICAgc291cmNlOiBmdW5jdGlvbihxdWVyeSwgcHJvY2Vzcyl7CisgICAgICAgICAgeGhyUGFyYW1zLnNlYXJjaCA9IHF1ZXJ5OworCisgICAgICAgICAgLyogSWYgd2UgaGF2ZSBhIHJlcXVlc3QgaW4gcHJvZ3Jlc3MgZG9uJ3QgZmlyZSBvZmYgYW5vdGhlciBvbmUqLworICAgICAgICAgIGlmICh4aHJSZXEpCisgICAgICAgICAgICB4aHJSZXEuYWJvcnQoKTsKKworICAgICAgICAgIHhoclJlcSA9ICQuZ2V0SlNPTih4aHJVcmwsIHRoaXMub3B0aW9ucy54aHJQYXJhbXMsIGZ1bmN0aW9uKGRhdGEpeworICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3IgIT09ICJvayIpIHsKKyAgICAgICAgICAgICAgY29uc29sZS5sb2coIkVycm9yIGdldHRpbmcgZGF0YSBmcm9tIHNlcnZlciAiK2RhdGEuZXJyb3IpOworICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHhoclJlcSA9IG51bGw7CisKKyAgICAgICAgICAgIHJldHVybiBwcm9jZXNzKGRhdGEucmVzdWx0cyk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0sCisgICAgICAgIHVwZGF0ZXI6IGZ1bmN0aW9uKGl0ZW0pIHsKKyAgICAgICAgICB2YXIgaXRlbU9iaiA9IHRoaXMuJG1lbnUuZmluZCgnLmFjdGl2ZScpLmRhdGEoJ2l0ZW1PYmplY3QnKTsKKyAgICAgICAgICBzZWxlY3RlZENCKGl0ZW1PYmopOworICAgICAgICAgIHJldHVybiBpdGVtOworICAgICAgICB9LAorICAgICAgICBtYXRjaGVyOiBmdW5jdGlvbihpdGVtKSB7CisgICAgICAgICAgaWYgKCFpdGVtLmhhc093blByb3BlcnR5KCduYW1lJykpIHsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCJOYW1lIHByb3BlcnR5IG1pc3NpbmcgaW4gZGF0YSIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKHRoaXMuJGVsZW1lbnQudmFsKCkubGVuZ3RoID09PSAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfSwKKyAgICAgICAgaGlnaGxpZ2h0ZXI6IGZ1bmN0aW9uIChpdGVtKSB7CisgICAgICAgICAgLyogVXNlIGpxdWVyeSB0byBlc2NhcGUgdGhlIGl0ZW0gbmFtZSBhbmQgZGV0YWlsICovCisgICAgICAgICAgdmFyIGN1cnJlbnQgPSAkKCI8c3Bhbj48L3NwYW4+IikudGV4dChpdGVtLm5hbWUgKyAnICcraXRlbS5kZXRhaWwpOworICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lmh0bWwoKTsKKworICAgICAgICAgIHZhciBxdWVyeSA9IHRoaXMucXVlcnkucmVwbGFjZSgvW1wtXFtcXXt9KCkqKz8uLFxcXF4kfCNcc10vZywgJ1xcJCYnKQorICAgICAgICAgIHJldHVybiBjdXJyZW50LnJlcGxhY2UobmV3IFJlZ0V4cCgnKCcgKyBxdWVyeSArICcpJywgJ2lnJyksIGZ1bmN0aW9uICgkMSwgbWF0Y2gpIHsKKyAgICAgICAgICAgIHJldHVybiAnPHN0cm9uZz4nICsgbWF0Y2ggKyAnPC9zdHJvbmc+JworICAgICAgICAgIH0pCisgICAgICAgIH0sCisgICAgICAgIHNvcnRlcjogZnVuY3Rpb24gKGl0ZW1zKSB7IHJldHVybiBpdGVtczsgfSwKKyAgICAgICAgeGhyVXJsOiB4aHJVcmwsCisgICAgICAgIHhoclBhcmFtczogeGhyUGFyYW1zLAorICAgICAgICB4aHJSZXE6IHhoclJlcSwKKyAgICB9KTsKKworCisgICAgLyogQ29weSBvZiBib290c3RyYXAncyByZW5kZXIgZnVuYyBidXQgc2V0cyBzZWxlY3RlZE9iamVjdCB2YWx1ZSAqLworICAgIGZ1bmN0aW9uIGN1c3RvbVJlbmRlckZ1bmMgKGl0ZW1zKSB7CisgICAgICB2YXIgdGhhdCA9IHRoaXM7CisKKyAgICAgIGl0ZW1zID0gJChpdGVtcykubWFwKGZ1bmN0aW9uIChpLCBpdGVtKSB7CisgICAgICAgIGkgPSAkKHRoYXQub3B0aW9ucy5pdGVtKS5hdHRyKCdkYXRhLXZhbHVlJywgaXRlbS5uYW1lKS5kYXRhKCdpdGVtT2JqZWN0JywgaXRlbSk7CisgICAgICAgIGkuZmluZCgnYScpLmh0bWwodGhhdC5oaWdobGlnaHRlcihpdGVtKSk7CisgICAgICAgIHJldHVybiBpWzBdOworICAgICAgfSk7CisKKyAgICAgIGl0ZW1zLmZpcnN0KCkuYWRkQ2xhc3MoJ2FjdGl2ZScpOworICAgICAgdGhpcy4kbWVudS5odG1sKGl0ZW1zKTsKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworICAgIGpRRWxlbWVudC5kYXRhKCd0eXBlYWhlYWQnKS5yZW5kZXIgPSBjdXN0b21SZW5kZXJGdW5jOworICB9CisKKyAgLyoKKyAgICogdXJsIC0gdGhlIHVybCBvZiB0aGUgeGhyIGJ1aWxkICovCisgIGZ1bmN0aW9uIF9zdGFydEFCdWlsZCAodXJsLCBwcm9qZWN0X2lkLCB0YXJnZXRzLCBvbnN1Y2Nlc3MsIG9uZmFpbCkgeworCisgICAgdmFyIGRhdGEgPSB7CisgICAgICBwcm9qZWN0X2lkIDogcHJvamVjdF9pZCwKKyAgICAgIHRhcmdldHMgOiB0YXJnZXRzLAorICAgIH0KKworICAgICQuYWpheCggeworICAgICAgICB0eXBlOiAiUE9TVCIsCisgICAgICAgIHVybDogdXJsLAorICAgICAgICBkYXRhOiBkYXRhLAorICAgICAgICBoZWFkZXJzOiB7ICdYLUNTUkZUb2tlbicgOiAkLmNvb2tpZSgnY3NyZnRva2VuJyl9LAorICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoX2RhdGEpIHsKKyAgICAgICAgICAvKiBObyBwcm9wZXIgcmVwb25zZSBZT0NUTyAjNzk5NQorICAgICAgICAgIGlmIChfZGF0YS5lcnJvciAhPT0gIm9rIikgeworICAgICAgICAgICAgY29uc29sZS53YXJuKF9kYXRhLmVycm9yKTsKKyAgICAgICAgICB9IGVsc2UgeyAqLworICAgICAgICAgICAgaWYgKG9uc3VjY2VzcyAhPT0gdW5kZWZpbmVkKSBvbnN1Y2Nlc3MoX2RhdGEpOworICAgICAgICAvLyAgfQorICAgICAgICB9LAorICAgICAgICBlcnJvcjogZnVuY3Rpb24gKF9kYXRhKSB7CisgICAgICAgICAgY29uc29sZS53YXJuKCJDYWxsIGZhaWxlZCIpOworICAgICAgICAgIGNvbnNvbGUud2FybihfZGF0YSk7CisgICAgICAgICAgaWYgKG9uZmFpbCkgb25mYWlsKGRhdGEpOworICAgIH0gfSk7CisgIH0KKworICAvKiBjYW5jZWxBQnVpbGQ6CisgICAqIHVybDogcHJvamVjdGJ1aWxkcworICAgKiBidWlsZHNfaWRzOiBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBidWlsZCByZXF1ZXN0IGlkcworICAgKiBvbnN1Y2Nlc3M6IGNhbGxiYWNrIGZvciBzdWNjZXNzZnVsIGV4ZWN1dGlvbgorICAgKiBvbmZhaWw6IGNhbGxiYWNrIGZvciBmYWlsZWQgZXhlY3V0aW9uCisgICAqLworICBmdW5jdGlvbiBfY2FuY2VsQUJ1aWxkKHVybCwgYnVpbGRfaWRzLCBvbnN1Y2Nlc3MsIG9uZmFpbCl7CisgICAgJC5hamF4KCB7CisgICAgICAgIHR5cGU6ICJQT1NUIiwKKyAgICAgICAgdXJsOiB1cmwsCisgICAgICAgIGRhdGE6IHsgJ2J1aWxkQ2FuY2VsJzogYnVpbGRfaWRzIH0sCisgICAgICAgIGhlYWRlcnM6IHsgJ1gtQ1NSRlRva2VuJyA6ICQuY29va2llKCdjc3JmdG9rZW4nKX0sCisgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChfZGF0YSkgeworICAgICAgICAgIGlmIChfZGF0YS5lcnJvciAhPT0gIm9rIikgeworICAgICAgICAgICAgY29uc29sZS53YXJuKF9kYXRhLmVycm9yKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG9uc3VjY2VzcyAhPT0gdW5kZWZpbmVkKSBvbnN1Y2Nlc3MoX2RhdGEpOworICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChfZGF0YSkgeworICAgICAgICAgIGNvbnNvbGUud2FybigiQ2FsbCBmYWlsZWQiKTsKKyAgICAgICAgICBjb25zb2xlLndhcm4oX2RhdGEpOworICAgICAgICAgIGlmIChvbmZhaWwpIG9uZmFpbChfZGF0YSk7CisgICAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIC8qIEdldCBhIHByb2plY3QncyBjb25maWd1cmF0aW9uIGluZm8gKi8KKyAgZnVuY3Rpb24gX2dldFByb2plY3RJbmZvKHVybCwgb25zdWNjZXNzLCBvbmZhaWwpeworICAgICQuYWpheCh7CisgICAgICAgIHR5cGU6ICJHRVQiLAorICAgICAgICBkYXRhIDogeyBmb3JtYXQ6ICJqc29uIiB9LAorICAgICAgICB1cmw6IHVybCwKKyAgICAgICAgaGVhZGVyczogeyAnWC1DU1JGVG9rZW4nIDogJC5jb29raWUoJ2NzcmZ0b2tlbicpfSwKKyAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKF9kYXRhKSB7CisgICAgICAgICAgaWYgKF9kYXRhLmVycm9yICE9PSAib2siKSB7CisgICAgICAgICAgICBjb25zb2xlLndhcm4oX2RhdGEuZXJyb3IpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAob25zdWNjZXNzICE9PSB1bmRlZmluZWQpIG9uc3VjY2VzcyhfZGF0YSk7CisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlcnJvcjogZnVuY3Rpb24gKF9kYXRhKSB7CisgICAgICAgICAgY29uc29sZS53YXJuKF9kYXRhKTsKKyAgICAgICAgICBpZiAob25mYWlsKSBvbmZhaWwoX2RhdGEpOworICAgICAgICB9CisgICAgfSk7CisgIH0KKworICAvKiBQcm9wZXJ0aWVzIGZvciBkYXRhIGNhbiBiZToKKyAgICogbGF5ZXJEZWwgKGNzdikKKyAgICogbGF5ZXJBZGQgKGNzdikKKyAgICogcHJvamVjdE5hbWUKKyAgICogcHJvamVjdFZlcnNpb24KKyAgICogbWFjaGluZU5hbWUKKyAgICovCisgIGZ1bmN0aW9uIF9lZGl0Q3VycmVudFByb2plY3QoZGF0YSwgb25TdWNjZXNzLCBvbkZhaWwpeworICAgICQuYWpheCh7CisgICAgICAgIHR5cGU6ICJQT1NUIiwKKyAgICAgICAgdXJsOiBsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0UGFnZVVybCArICI/Zm9ybWF0PWpzb24iLAorICAgICAgICBkYXRhOiBkYXRhLAorICAgICAgICBoZWFkZXJzOiB7ICdYLUNTUkZUb2tlbicgOiAkLmNvb2tpZSgnY3NyZnRva2VuJyl9LAorICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgIGlmIChkYXRhLmVycm9yICE9ICJvayIpIHsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEuZXJyb3IpOworICAgICAgICAgICAgaWYgKG9uRmFpbCAhPT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgICBvbkZhaWwoZGF0YSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgIT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgICAgb25TdWNjZXNzKGRhdGEpOworICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgICAgY29uc29sZS5sb2coIkNhbGwgZmFpbGVkIik7CisgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7CisgICAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIGZ1bmN0aW9uIF9nZXRMYXllckRlcHNGb3JQcm9qZWN0KHVybCwgb25TdWNjZXNzLCBvbkZhaWwpeworICAgIC8qIENoZWNrIGZvciBkZXBlbmRlbmNpZXMgbm90IGluIHRoZSBjdXJyZW50IHByb2plY3QgKi8KKyAgICAkLmdldEpTT04odXJsLAorICAgICAgeyBmb3JtYXQ6ICdqc29uJyB9LAorICAgICAgZnVuY3Rpb24oZGF0YSkgeworICAgICAgICBpZiAoZGF0YS5lcnJvciAhPSAib2siKSB7CisgICAgICAgICAgY29uc29sZS5sb2coZGF0YS5lcnJvcik7CisgICAgICAgICAgaWYgKG9uRmFpbCAhPT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgb25GYWlsKGRhdGEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHZhciBkZXBzID0ge307CisgICAgICAgICAgLyogRmlsdGVyIG91dCBsYXllciBkZXAgaWRzIHdoaWNoIGFyZSBpbiB0aGUKKyAgICAgICAgICAgKiBwcm9qZWN0IGFscmVhZHkuCisgICAgICAgICAgICovCisgICAgICAgICAgZGVwcy5saXN0ID0gZGF0YS5sYXllcmRlcHMubGlzdC5maWx0ZXIoZnVuY3Rpb24obGF5ZXJPYmopeworICAgICAgICAgICAgcmV0dXJuIChkYXRhLnByb2plY3RsYXllcnMubGFzdEluZGV4T2YobGF5ZXJPYmouaWQpIDwgMCk7CisgICAgICAgICAgfSk7CisKKyAgICAgICAgICBvblN1Y2Nlc3MoZGVwcyk7CisgICAgICAgIH0KKyAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBjb25zb2xlLmxvZygiRTogRmFpbGVkIHRvIG1ha2UgcmVxdWVzdCIpOworICAgIH0pOworICB9CisKKyAgLyogcGFyc2VzIHRoZSBxdWVyeSBzdHJpbmcgb2YgdGhlIGN1cnJlbnQgd2luZG93LmxvY2F0aW9uIHRvIGFuIG9iamVjdCAqLworICBmdW5jdGlvbiBfcGFyc2VVcmxQYXJhbXMoKSB7CisgICAgdmFyIHN0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7CisgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cigxKTsKKyAgICB2YXIgc3RyaW5nQXJyYXkgPSBzdHJpbmcuc3BsaXQgKCImIik7CisgICAgdmFyIG9iaiA9IHt9OworCisgICAgZm9yICh2YXIgaSBpbiBzdHJpbmdBcnJheSkgeworICAgICAgdmFyIGtleVZhbCA9IHN0cmluZ0FycmF5W2ldLnNwbGl0ICgiPSIpOworICAgICAgb2JqW2tleVZhbFswXV0gPSBrZXlWYWxbMV07CisgICAgfQorCisgICAgcmV0dXJuIG9iajsKKyAgfQorCisgIC8qIHRha2VzIGEgZmxhdCBvYmplY3QgYW5kIG91dHB1dHMgaXQgYXMgYSBxdWVyeSBzdHJpbmcKKyAgICogZS5nLiB0aGUgb3V0cHV0IG9mIGR1bXBzVXJsUGFyYW1zCisgICAqLworICBmdW5jdGlvbiBfZHVtcHNVcmxQYXJhbXMob2JqKSB7CisgICAgdmFyIHN0ciA9ICI/IjsKKworICAgIGZvciAodmFyIGtleSBpbiBvYmopeworICAgICAgaWYgKCFvYmpba2V5XSkKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIHN0ciArPSBrZXkrICI9IitvYmpba2V5XS50b1N0cmluZygpOworICAgICAgc3RyICs9ICImIjsKKyAgICB9CisKKyAgICAvKiBNYWludGFpbiB0aGUgY3VycmVudCBoYXNoICovCisgICAgc3RyICs9IHdpbmRvdy5sb2NhdGlvbi5oYXNoOworCisgICAgcmV0dXJuIHN0cjsKKyAgfQorCisgIGZ1bmN0aW9uIF9hZGRSbUxheWVyKGxheWVyT2JqLCBhZGQsIGRvbmVDYil7CisgICAgaWYgKGFkZCA9PT0gdHJ1ZSkgeworICAgICAgLyogSWYgYWRkaW5nIGdldCB0aGUgZGVwcyBmb3IgdGhpcyBsYXllciAqLworICAgICAgbGlidG9hc3Rlci5nZXRMYXllckRlcHNGb3JQcm9qZWN0KGxheWVyT2JqLmxheWVyZGV0YWlsdXJsLAorICAgICAgICBmdW5jdGlvbiAobGF5ZXJzKSB7CisKKyAgICAgICAgLyogZ290IHJlc3VsdCBmb3IgZGVwZW5kZW5jaWVzICovCisgICAgICAgIGlmIChsYXllcnMubGlzdC5sZW5ndGggPT09IDApeworICAgICAgICAgIHZhciBlZGl0RGF0YSA9IHsgbGF5ZXJBZGQgOiBsYXllck9iai5pZCB9OworICAgICAgICAgIGxpYnRvYXN0ZXIuZWRpdEN1cnJlbnRQcm9qZWN0KGVkaXREYXRhLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRvbmVDYihbXSk7CisgICAgICAgICAgfSk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzaG93TGF5ZXJEZXBzTW9kYWwobGF5ZXJPYmosIGxheWVycy5saXN0LCBudWxsLCBudWxsLCAgdHJ1ZSwgZG9uZUNiKTsKKyAgICAgICAgICB9ICBjYXRjaCAoZSkgeworICAgICAgICAgICAgJC5nZXRTY3JpcHQobGlidG9hc3Rlci5jdHguanNVcmwgKyAibGF5ZXJEZXBzTW9kYWwuanMiLCBmdW5jdGlvbigpeworICAgICAgICAgICAgICBzaG93TGF5ZXJEZXBzTW9kYWwobGF5ZXJPYmosIGxheWVycy5saXN0LCBudWxsLCBudWxsLCAgdHJ1ZSwgZG9uZUNiKTsKKyAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgIGNvbnNvbGUud2FybigiRmFpbGVkIHRvIGxvYWQgbGF5ZXJEZXBzTW9kYWwiKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSwgbnVsbCk7CisgICAgfSBlbHNlIGlmIChhZGQgPT09IGZhbHNlKSB7CisgICAgICB2YXIgZWRpdERhdGEgPSB7IGxheWVyRGVsIDogbGF5ZXJPYmouaWQgfTsKKworICAgICAgbGlidG9hc3Rlci5lZGl0Q3VycmVudFByb2plY3QoZWRpdERhdGEsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZG9uZUNiKFtdKTsKKyAgICAgIH0sIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgY29uc29sZS53YXJuICgiUmVtb3ZpbmcgbGF5ZXIgZnJvbSBwcm9qZWN0IGZhaWxlZCIpOworICAgICAgICBkb25lQ2IobnVsbCk7CisgICAgICB9KTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBfbWFrZUxheWVyQWRkUm1BbGVydE1zZyhsYXllciwgbGF5ZXJEZXBzTGlzdCwgYWRkKSB7CisgICAgdmFyIGFsZXJ0TXNnOworCisgICAgaWYgKGxheWVyRGVwc0xpc3QubGVuZ3RoID4gMCAmJiBhZGQgPT09IHRydWUpIHsKKyAgICAgIGFsZXJ0TXNnID0gJCgiPHNwYW4+WW91IGhhdmUgYWRkZWQgPHN0cm9uZz4iKyhsYXllckRlcHNMaXN0Lmxlbmd0aCsxKSsiPC9zdHJvbmc+IGxheWVycyB0byB5b3VyIHByb2plY3Q6IDxhIGlkPVwibGF5ZXItYWZmZWN0ZWQtbmFtZVwiPjwvYT4gYW5kIGl0cyBkZXBlbmRlbmNpZXMgPC9zcGFuPiIpOworCisgICAgICAvKiBCdWlsZCB0aGUgbGF5ZXIgZGVwcyBsaXN0ICovCisgICAgICBsYXllckRlcHNMaXN0Lm1hcChmdW5jdGlvbihsYXllciwgaSl7CisgICAgICAgIHZhciBsaW5rID0gJCgiPGE+PC9hPiIpOworCisgICAgICAgIGxpbmsuYXR0cigiaHJlZiIsIGxheWVyLmxheWVyZGV0YWlsdXJsKTsKKyAgICAgICAgbGluay50ZXh0KGxheWVyLm5hbWUpOworICAgICAgICBsaW5rLnRvb2x0aXAoe3RpdGxlOiBsYXllci50b29sdGlwfSk7CisKKyAgICAgICAgaWYgKGkgIT09IDApCisgICAgICAgICAgYWxlcnRNc2cuYXBwZW5kKCIsICIpOworCisgICAgICAgIGFsZXJ0TXNnLmFwcGVuZChsaW5rKTsKKyAgICAgIH0pOworICAgIH0gZWxzZSBpZiAobGF5ZXJEZXBzTGlzdC5sZW5ndGggPT09IDAgJiYgYWRkID09PSB0cnVlKSB7CisgICAgICBhbGVydE1zZyA9ICQoIjxzcGFuPllvdSBoYXZlIGFkZGVkIDxzdHJvbmc+MTwvc3Ryb25nPiBsYXllciB0byB5b3VyIHByb2plY3Q6IDxhIGlkPVwibGF5ZXItYWZmZWN0ZWQtbmFtZVwiPjwvYT48L3NwYW4+PC9zcGFuPiIpOworICAgIH0gZWxzZSBpZiAoYWRkID09PSBmYWxzZSkgeworICAgICAgYWxlcnRNc2cgPSAkKCI8c3Bhbj5Zb3UgaGF2ZSBkZWxldGVkIDxzdHJvbmc+MTwvc3Ryb25nPiBsYXllciBmcm9tIHlvdXIgcHJvamVjdDogPGEgaWQ9XCJsYXllci1hZmZlY3RlZC1uYW1lXCI+PC9hPjwvc3Bhbj4iKTsKKyAgICB9CisKKyAgICBhbGVydE1zZy5jaGlsZHJlbigiI2xheWVyLWFmZmVjdGVkLW5hbWUiKS50ZXh0KGxheWVyLm5hbWUpOworICAgIGFsZXJ0TXNnLmNoaWxkcmVuKCIjbGF5ZXItYWZmZWN0ZWQtbmFtZSIpLmF0dHIoImhyZWYiLCBsYXllci5sYXllcmRldGFpbHVybCk7CisKKyAgICByZXR1cm4gYWxlcnRNc2cuaHRtbCgpOworICB9CisKKyAgZnVuY3Rpb24gX3Nob3dDaGFuZ2VOb3RpZmljYXRpb24obWVzc2FnZSl7CisgICAgdmFyIGFsZXJ0TXNnID0gJCgiI2NoYW5nZS1ub3RpZmljYXRpb24tbXNnIik7CisKKyAgICBhbGVydE1zZy5odG1sKG1lc3NhZ2UpOworICAgICQoIiNjaGFuZ2Utbm90aWZpY2F0aW9uLCAjY2hhbmdlLW5vdGlmaWNhdGlvbiAqIikuZmFkZUluKCk7CisgIH0KKworCisgIHJldHVybiB7CisgICAgcmVsb2FkX3BhcmFtcyA6IHJlbG9hZF9wYXJhbXMsCisgICAgc3RhcnRBQnVpbGQgOiBfc3RhcnRBQnVpbGQsCisgICAgY2FuY2VsQUJ1aWxkIDogX2NhbmNlbEFCdWlsZCwKKyAgICBtYWtlVHlwZWFoZWFkIDogX21ha2VUeXBlYWhlYWQsCisgICAgZ2V0UHJvamVjdEluZm86IF9nZXRQcm9qZWN0SW5mbywKKyAgICBnZXRMYXllckRlcHNGb3JQcm9qZWN0IDogX2dldExheWVyRGVwc0ZvclByb2plY3QsCisgICAgZWRpdEN1cnJlbnRQcm9qZWN0IDogX2VkaXRDdXJyZW50UHJvamVjdCwKKyAgICBkZWJ1ZzogZmFsc2UsCisgICAgcGFyc2VVcmxQYXJhbXMgOiBfcGFyc2VVcmxQYXJhbXMsCisgICAgZHVtcHNVcmxQYXJhbXMgOiBfZHVtcHNVcmxQYXJhbXMsCisgICAgYWRkUm1MYXllciA6IF9hZGRSbUxheWVyLAorICAgIG1ha2VMYXllckFkZFJtQWxlcnRNc2cgOiBfbWFrZUxheWVyQWRkUm1BbGVydE1zZywKKyAgICBzaG93Q2hhbmdlTm90aWZpY2F0aW9uIDogX3Nob3dDaGFuZ2VOb3RpZmljYXRpb24sCisgIH07Cit9KSgpOworCisvKiBrZWVwIHRoaXMgaW4gdGhlIGdsb2JhbCBzY29wZSBmb3IgY29tcGF0YWJpbGl0eSAqLworZnVuY3Rpb24gcmVsb2FkX3BhcmFtcyhwYXJhbXMpIHsKKyAgICB2YXIgdXJpID0gd2luZG93LmxvY2F0aW9uLmhyZWY7CisgICAgdmFyIHNwbGl0bGlzdCA9IHVyaS5zcGxpdCgiPyIpOworICAgIHZhciB1cmwgPSBzcGxpdGxpc3RbMF07CisgICAgdmFyIHBhcmFtZXRlcnMgPSBzcGxpdGxpc3RbMV07CisgICAgLy8gZGVzZXJpYWxpemUgdGhlIGNhbGwgcGFyYW1ldGVycworICAgIHZhciBjcGFyYW1zID0gW107CisgICAgaWYocGFyYW1ldGVycykKKyAgICAgIGNwYXJhbXMgPSBwYXJhbWV0ZXJzLnNwbGl0KCImIik7CisKKyAgICB2YXIgbnBhcmFtcyA9IHt9OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY3BhcmFtcy5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgdGVtcCA9IGNwYXJhbXNbaV0uc3BsaXQoIj0iKTsKKyAgICAgICAgbnBhcmFtc1t0ZW1wWzBdXSA9IHRlbXBbMV07CisgICAgfQorICAgIC8vIHVwZGF0ZSBwYXJhbWV0ZXIgdmFsdWVzCisgICAgZm9yIChpIGluIHBhcmFtcykgeworICAgICAgICBucGFyYW1zW2VuY29kZVVSSUNvbXBvbmVudChpKV0gPSBlbmNvZGVVUklDb21wb25lbnQocGFyYW1zW2ldKTsKKyAgICB9CisgICAgLy8gc2VyaWFsaXplIHRoZSBzdHJ1Y3R1cmUKKyAgICB2YXIgY2FsbHBhcmFtcyA9IFtdOworICAgIGZvciAoaSBpbiBucGFyYW1zKSB7CisgICAgICAgIGNhbGxwYXJhbXMucHVzaChpKyI9IitucGFyYW1zW2ldKTsKKyAgICB9CisgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmwrIj8iK2NhbGxwYXJhbXMuam9pbignJicpOworfQorCisKKy8qIFRoaW5ncyB0aGF0IGhhcHBlbiBmb3IgYWxsIHBhZ2VzICovCiskKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKKworICB2YXIgYWpheExvYWRpbmdUaW1lcjsKKworICAvKiBJZiB3ZSBkb24ndCBoYXZlIGEgY29uc29sZSBvYmplY3Qgd2hpY2ggbWlnaHQgYmUgdGhlIGNhc2UgaW4gc29tZQorICAgICAqIGJyb3dzZXJzLCBuby1vcCBpdCB0byBhdm9pZCB1bmRlZmluZWQgZXJyb3JzLgorICAgICAqLworICAgIGlmICghd2luZG93LmNvbnNvbGUpIHsKKyAgICAgIHdpbmRvdy5jb25zb2xlID0ge307CisgICAgICB3aW5kb3cuY29uc29sZS53YXJuID0gZnVuY3Rpb24oKSB7fTsKKyAgICAgIHdpbmRvdy5jb25zb2xlLmVycm9yID0gZnVuY3Rpb24oKSB7fTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFByZXR0eVByaW50IHBsdWdpbi4KKyAgICAgKgorICAgICAqLworICAgIC8vIEluaXQKKyAgICBwcmV0dHlQcmludCgpOworCisgICAgLy8gUHJldmVudCBpbnZhbGlkIGxpbmtzIGZyb20ganVtcGluZyBwYWdlIHNjcm9sbAorICAgICQoJ2FbaHJlZj0jXScpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSk7CisKKworICAgIC8qIFNUQVJUIFRPRE8gRGVsZXRlIHRoaXMgc2VjdGlvbiBub3cgcmVkdW5kYW50ICovCisgICAgLyogQmVsZW4ncyBhZGRpdGlvbnMgKi8KKworICAgIC8vIHR1cm4gRWRpdCBjb2x1bW5zIGRyb3Bkb3duIGludG8gYSBtdWx0aXNlbGVjdCBtZW51CisgICAgJCgnLmRyb3Bkb3duLW1lbnUgaW5wdXQsIC5kcm9wZG93bi1tZW51IGxhYmVsJykuY2xpY2soZnVuY3Rpb24oZSkgeworICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAgIH0pOworCisgICAgLy8gZW5hYmxlIHBvcG92ZXJzIGluIGFueSB0YWJsZSBjZWxscyB0aGF0IGNvbnRhaW4gYW4gYW5jaG9yIHdpdGggdGhlCisgICAgLy8gLmJ0biBjbGFzcyBhcHBsaWVkLCBhbmQgbWFrZSBzdXJlIHBvcG92ZXJzIHdvcmsgb24gY2xpY2ssIGFyZSBtdXR1YWxseQorICAgIC8vIGV4Y2x1c2l2ZSBhbmQgdGhleSBjbG9zZSB3aGVuIHlvdXIgY2xpY2sgb3V0c2lkZSB0aGVpciBhcmVhCisKKyAgICAkKCdodG1sJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgJCgndGQgPiBhLmJ0bicpLnBvcG92ZXIoJ2hpZGUnKTsKKyAgICB9KTsKKworICAgICQoJ3RkID4gYS5idG4nKS5wb3BvdmVyKHsKKyAgICAgICAgaHRtbDp0cnVlLAorICAgICAgICBwbGFjZW1lbnQ6J2xlZnQnLAorICAgICAgICBjb250YWluZXI6J2JvZHknLAorICAgICAgICB0cmlnZ2VyOidtYW51YWwnCisgICAgfSkuY2xpY2soZnVuY3Rpb24oZSl7CisgICAgICAgICQoJ3RkID4gYS5idG4nKS5ub3QodGhpcykucG9wb3ZlcignaGlkZScpOworICAgICAgICAvLyBpZGVhbGx5IHdlIHdvdWxkIHVzZSAndG9nZ2xlJyBoZXJlCisgICAgICAgIC8vIGJ1dCBpdCBzZWVtcyBidWdneSBpbiBvdXIgQm9vdHN0cmFwIHZlcnNpb24KKyAgICAgICAgJCh0aGlzKS5wb3BvdmVyKCdzaG93Jyk7CisgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgfSk7CisKKyAgICAvLyBlbmFibGUgdG9vbHRpcHMgZm9yIGFwcGxpZWQgZmlsdGVycworICAgICQoJ3RoIGEuYnRuLXByaW1hcnknKS50b29sdGlwKHtjb250YWluZXI6J2JvZHknLCBodG1sOnRydWUsIHBsYWNlbWVudDonYm90dG9tJywgZGVsYXk6e2hpZGU6MTUwMH19KTsKKworICAgIC8vIGhpZGUgYXBwbGllZCBmaWx0ZXIgdG9vbHRpcCB3aGVuIHlvdSBjbGljayBvbiB0aGUgZmlsdGVyIGJ1dHRvbgorICAgICQoJ3RoIGEuYnRuLXByaW1hcnknKS5jbGljayhmdW5jdGlvbiAoKSB7CisgICAgICAgICQoJy50b29sdGlwJykuaGlkZSgpOworICAgIH0pOworCisgICAgLy8gZW5hYmxlIGhlbHAgaW5mb3JtYXRpb24gdG9vbHRpcAorICAgICQoIi5nZXQtaGVscCIpLnRvb2x0aXAoe2NvbnRhaW5lcjonYm9keScsIGh0bWw6dHJ1ZSwgZGVsYXk6e3Nob3c6MzAwfX0pOworCisgICAgLy8gc2hvdyBoZWxwIGJ1YmJsZSBvbmx5IG9uIGhvdmVyIGluc2lkZSB0YWJsZXMKKyAgICAkKCIuaG92ZXItaGVscCIpLmNzcygidmlzaWJpbGl0eSIsImhpZGRlbiIpOworICAgICQoInRoLCB0ZCIpLmhvdmVyKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgJCh0aGlzKS5maW5kKCIuaG92ZXItaGVscCIpLmNzcygidmlzaWJpbGl0eSIsInZpc2libGUiKTsKKyAgICB9KTsKKyAgICAkKCJ0aCwgdGQiKS5tb3VzZWxlYXZlKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgJCh0aGlzKS5maW5kKCIuaG92ZXItaGVscCIpLmNzcygidmlzaWJpbGl0eSIsImhpZGRlbiIpOworICAgIH0pOworCisgICAgLyogRU5EIFRPRE8gRGVsZXRlIHRoaXMgc2VjdGlvbiBub3cgcmVkdW5kYW50ICovCisKKyAgICAvLyBzaG93IHRhc2sgdHlwZSBhbmQgb3V0Y29tZSBpbiB0YXNrIGRldGFpbHMgcGFnZXMKKyAgICAkKCIudGFzay1pbmZvIikudG9vbHRpcCh7IGNvbnRhaW5lcjogJ2JvZHknLCBodG1sOiB0cnVlLCBkZWxheToge3Nob3c6IDIwMH0sIHBsYWNlbWVudDogJ3JpZ2h0JyB9KTsKKworICAgIC8vIGluaXRpYWxpc2UgdGhlIHRvb2x0aXBzIGZvciB0aGUgaWNvbi1wZW5jaWwgaWNvbnMKKyAgICAkKCIuaWNvbi1wZW5jaWwiKS50b29sdGlwKHsgY29udGFpbmVyOiAnYm9keScsIGh0bWw6IHRydWUsIGRlbGF5OiB7c2hvdzogNDAwfSwgdGl0bGU6ICJDaGFuZ2UiIH0pOworCisgICAgLy8gaW5pdGlhbGlzZSB0aGUgdG9vbHRpcHMgZm9yIHRoZSBkb3dubG9hZCBpY29ucworICAgICQoIi5pY29uLWRvd25sb2FkLWFsdCIpLnRvb2x0aXAoeyBjb250YWluZXI6ICdib2R5JywgaHRtbDogdHJ1ZSwgZGVsYXk6IHsgc2hvdzogMjAwIH0gfSk7CisKKyAgICAvLyBpbml0aWFsaXNlIHBvcG92ZXIgZm9yIGRlYnVnIGluZm9ybWF0aW9uCisgICAgJCgiLmljb24taW5mby1zaWduIikucG9wb3ZlciggeyBwbGFjZW1lbnQ6ICdib3R0b20nLCBodG1sOiB0cnVlLCBjb250YWluZXI6ICdib2R5JyB9KTsKKworICAgIC8vIGxpbmtpbmcgZGlyZWN0bHkgdG8gdGFicworICAgICQoZnVuY3Rpb24oKXsKKyAgICAgICAgICB2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoOworICAgICAgICAgICQoJ3VsLm5hdiBhW2hyZWY9IicgKyBoYXNoICsgJyJdJykudGFiKCdzaG93Jyk7CisKKyAgICAgICAgICAkKCcubmF2LXRhYnMgYScpLmNsaWNrKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICQodGhpcykudGFiKCdzaG93Jyk7CisgICAgICAgICAgICAkKCdib2R5Jykuc2Nyb2xsVG9wKCk7CisgICAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICAvLyB0b2dnbGUgZm9yIGxvbmcgY29udGVudCAodmFyaWFibGVzLCBweXRob24gc3RhY2sgdHJhY2UsIGV0YykKKyAgICAkKCcuZnVsbCwgLmZ1bGwtaGlkZScpLmhpZGUoKTsKKyAgICAkKCcuZnVsbC1zaG93JykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgJCgnLmZ1bGwnKS5zbGlkZURvd24oZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICQoJy5mdWxsLWhpZGUnKS5zaG93KCk7CisgICAgICAgIH0pOworICAgICAgICAkKHRoaXMpLmhpZGUoKTsKKyAgICB9KTsKKyAgICAkKCcuZnVsbC1oaWRlJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgJCh0aGlzKS5oaWRlKCk7CisgICAgICAgICQoJy5mdWxsJykuc2xpZGVVcChmdW5jdGlvbigpeworICAgICAgICAgICAgJCgnLmZ1bGwtc2hvdycpLnNob3coKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICAvL3RvZ2dsZSB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBzZWN0aW9ucworICAgICQoJy5zaG93LWVycm9ycycpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICAkKCcjY29sbGFwc2UtZXJyb3JzJykuYWRkQ2xhc3MoJ2luJyk7CisgICAgfSk7CisgICAgJCgnLnRvZ2dsZS1lcnJvcnMnKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgJCgnI2NvbGxhcHNlLWVycm9ycycpLnRvZ2dsZUNsYXNzKCdpbicpOworICAgIH0pOworICAgICQoJy5zaG93LXdhcm5pbmdzJykuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgICAgICQoJyNjb2xsYXBzZS13YXJuaW5ncycpLmFkZENsYXNzKCdpbicpOworICAgIH0pOworICAgICQoJy50b2dnbGUtd2FybmluZ3MnKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgJCgnI2NvbGxhcHNlLXdhcm5pbmdzJykudG9nZ2xlQ2xhc3MoJ2luJyk7CisgICAgfSk7CisgICAgJCgnLnNob3ctZXhjZXB0aW9ucycpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICAkKCcjY29sbGFwc2UtZXhjZXB0aW9ucycpLmFkZENsYXNzKCdpbicpOworICAgIH0pOworICAgICQoJy50b2dnbGUtZXhjZXB0aW9ucycpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICAkKCcjY29sbGFwc2UtZXhjZXB0aW9ucycpLnRvZ2dsZUNsYXNzKCdpbicpOworICAgIH0pOworCisKKyAgICAkKCIjaGlkZS1hbGVydCIpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgICAkKHRoaXMpLnBhcmVudCgpLmZhZGVPdXQoKTsKKyAgICB9KTsKKworICAgIC8vc2hvdyB3YXJuaW5ncyBzZWN0aW9uIHdoZW4gcmVxdWVzdGVkIGZyb20gdGhlIHByZXZpb3VzIHBhZ2UKKyAgICBpZiAobG9jYXRpb24uaHJlZi5zZWFyY2goJyN3YXJuaW5ncycpID4gLTEpIHsKKyAgICAgICAgJCgnI2NvbGxhcHNlLXdhcm5pbmdzJykuYWRkQ2xhc3MoJ2luJyk7CisgICAgfQorCisgICAgLyogU2hvdyB0aGUgbG9hZGluZyBub3RpZmljYXRpb24gaWYgbm90aGluZyBoYXMgaGFwcGVuZCBhZnRlciAxLjUKKyAgICAgKiBzZWNvbmRzCisgICAgICovCisgICAgJChkb2N1bWVudCkuYmluZCgiYWpheFN0YXJ0IiwgZnVuY3Rpb24oKXsKKyAgICAgIGlmIChhamF4TG9hZGluZ1RpbWVyKQorICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KGFqYXhMb2FkaW5nVGltZXIpOworCisgICAgICBhamF4TG9hZGluZ1RpbWVyID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICQoIiNsb2FkaW5nLW5vdGlmaWNhdGlvbiIpLmZhZGVJbigpOworICAgICAgfSwgMTIwMCk7CisgICAgfSk7CisKKyAgICAkKGRvY3VtZW50KS5iaW5kKCJhamF4U3RvcCIsIGZ1bmN0aW9uKCl7CisgICAgICBpZiAoYWpheExvYWRpbmdUaW1lcikKKyAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChhamF4TG9hZGluZ1RpbWVyKTsKKworICAgICAgJCgiI2xvYWRpbmctbm90aWZpY2F0aW9uIikuZmFkZU91dCgpOworICAgIH0pOworCisgICAgJChkb2N1bWVudCkuYWpheEVycm9yKGZ1bmN0aW9uKGV2ZW50LCBqcXhociwgc2V0dGluZ3MsIGVyck1zZyl7CisgICAgICBpZiAoZXJyTXNnID09PSAnYWJvcnQnKQorICAgICAgICByZXR1cm47CisKKyAgICAgIGNvbnNvbGUud2FybigiUHJvYmxlbSB3aXRoIHhociBjYWxsIik7CisgICAgICBjb25zb2xlLndhcm4oZXJyTXNnKTsKKyAgICAgIGNvbnNvbGUud2FybihqcXhoci5yZXNwb25zZVRleHQpOworICAgIH0pOworCisgICAgZnVuY3Rpb24gY2hlY2tfZm9yX2R1cGxpY2F0ZV9pZHMgKCkgeworICAgICAgLyogd2FybiBhYm91dCBkdXBsaWNhdGUgZWxlbWVudCBpZHMgKi8KKyAgICAgIHZhciBpZHMgPSB7fTsKKyAgICAgICQoIltpZF0iKS5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAodGhpcy5pZCAmJiBpZHNbdGhpcy5pZF0pIHsKKyAgICAgICAgICBjb25zb2xlLndhcm4oJ0R1cGxpY2F0ZSBlbGVtZW50IGlkICMnK3RoaXMuaWQpOworICAgICAgICB9CisgICAgICAgIGlkc1t0aGlzLmlkXSA9IHRydWU7CisgICAgICB9KTsKKyAgICB9CisKKyAgICBpZiAobGlidG9hc3Rlci5kZWJ1ZykgeworICAgICAgY2hlY2tfZm9yX2R1cGxpY2F0ZV9pZHMoKTsKKyAgICB9IGVsc2UgeworICAgICAgLyogRGVidWcgaXMgZmFsc2Ugc28gc3VwcmVzcyB3YXJuaW5ncyBieSBvdmVycmlkaW5nIHRoZSBmdW5jdGlvbnMgKi8KKyAgICAgIHdpbmRvdy5jb25zb2xlLndhcm4gPSBmdW5jdGlvbiAoKSB7fTsKKyAgICAgIHdpbmRvdy5jb25zb2xlLmVycm9yID0gZnVuY3Rpb24gKCkge307CisgICB9Cit9KTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9wcmV0dGlmeS5qcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9wcmV0dGlmeS5qcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZWY1YWQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3ByZXR0aWZ5LmpzCkBAIC0wLDAgKzEsMjggQEAKK3ZhciBxPW51bGw7d2luZG93LlBSX1NIT1VMRF9VU0VfQ09OVElOVUFUSU9OPSEwOworKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gTChhKXtmdW5jdGlvbiBtKGEpe3ZhciBmPWEuY2hhckNvZGVBdCgwKTtpZihmIT09OTIpcmV0dXJuIGY7dmFyIGI9YS5jaGFyQXQoMSk7cmV0dXJuKGY9cltiXSk/ZjoiMCI8PWImJmI8PSI3Ij9wYXJzZUludChhLnN1YnN0cmluZygxKSw4KTpiPT09InUifHxiPT09IngiP3BhcnNlSW50KGEuc3Vic3RyaW5nKDIpLDE2KTphLmNoYXJDb2RlQXQoMSl9ZnVuY3Rpb24gZShhKXtpZihhPDMyKXJldHVybihhPDE2PyJcXHgwIjoiXFx4IikrYS50b1N0cmluZygxNik7YT1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpO2lmKGE9PT0iXFwifHxhPT09Ii0ifHxhPT09IlsifHxhPT09Il0iKWE9IlxcIithO3JldHVybiBhfWZ1bmN0aW9uIGgoYSl7Zm9yKHZhciBmPWEuc3Vic3RyaW5nKDEsYS5sZW5ndGgtMSkubWF0Y2goL1xcdVtcZEEtRmEtZl17NH18XFx4W1xkQS1GYS1mXXsyfXxcXFswLTNdWzAtN117MCwyfXxcXFswLTddezEsMn18XFxbXFNcc118W15cXF0vZyksYT0KK1tdLGI9W10sbz1mWzBdPT09Il4iLGM9bz8xOjAsaT1mLmxlbmd0aDtjPGk7KytjKXt2YXIgaj1mW2NdO2lmKC9cXFtiZHN3XS9pLnRlc3QoaikpYS5wdXNoKGopO2Vsc2V7dmFyIGo9bShqKSxkO2MrMjxpJiYiLSI9PT1mW2MrMV0/KGQ9bShmW2MrMl0pLGMrPTIpOmQ9ajtiLnB1c2goW2osZF0pO2Q8NjV8fGo+MTIyfHwoZDw2NXx8aj45MHx8Yi5wdXNoKFtNYXRoLm1heCg2NSxqKXwzMixNYXRoLm1pbihkLDkwKXwzMl0pLGQ8OTd8fGo+MTIyfHxiLnB1c2goW01hdGgubWF4KDk3LGopJi0zMyxNYXRoLm1pbihkLDEyMikmLTMzXSkpfX1iLnNvcnQoZnVuY3Rpb24oYSxmKXtyZXR1cm4gYVswXS1mWzBdfHxmWzFdLWFbMV19KTtmPVtdO2o9W05hTixOYU5dO2ZvcihjPTA7YzxiLmxlbmd0aDsrK2MpaT1iW2NdLGlbMF08PWpbMV0rMT9qWzFdPU1hdGgubWF4KGpbMV0saVsxXSk6Zi5wdXNoKGo9aSk7Yj1bIlsiXTtvJiZiLnB1c2goIl4iKTtiLnB1c2guYXBwbHkoYixhKTtmb3IoYz0wO2M8CitmLmxlbmd0aDsrK2MpaT1mW2NdLGIucHVzaChlKGlbMF0pKSxpWzFdPmlbMF0mJihpWzFdKzE+aVswXSYmYi5wdXNoKCItIiksYi5wdXNoKGUoaVsxXSkpKTtiLnB1c2goIl0iKTtyZXR1cm4gYi5qb2luKCIiKX1mdW5jdGlvbiB5KGEpe2Zvcih2YXIgZj1hLnNvdXJjZS5tYXRjaCgvXFsoPzpbXlxcXF1dfFxcW1xTXHNdKSpdfFxcdVtcZEEtRmEtZl17NH18XFx4W1xkQS1GYS1mXXsyfXxcXFxkK3xcXFteXGR1eF18XChcP1shOj1dfFsoKV5dfFteKClbXFxeXSsvZyksYj1mLmxlbmd0aCxkPVtdLGM9MCxpPTA7YzxiOysrYyl7dmFyIGo9ZltjXTtqPT09IigiPysraToiXFwiPT09ai5jaGFyQXQoMCkmJihqPStqLnN1YnN0cmluZygxKSkmJmo8PWkmJihkW2pdPS0xKX1mb3IoYz0xO2M8ZC5sZW5ndGg7KytjKS0xPT09ZFtjXSYmKGRbY109Kyt0KTtmb3IoaT1jPTA7YzxiOysrYylqPWZbY10saj09PSIoIj8oKytpLGRbaV09PT12b2lkIDAmJihmW2NdPSIoPzoiKSk6IlxcIj09PWouY2hhckF0KDApJiYKKyhqPStqLnN1YnN0cmluZygxKSkmJmo8PWkmJihmW2NdPSJcXCIrZFtpXSk7Zm9yKGk9Yz0wO2M8YjsrK2MpIl4iPT09ZltjXSYmIl4iIT09ZltjKzFdJiYoZltjXT0iIik7aWYoYS5pZ25vcmVDYXNlJiZzKWZvcihjPTA7YzxiOysrYylqPWZbY10sYT1qLmNoYXJBdCgwKSxqLmxlbmd0aD49MiYmYT09PSJbIj9mW2NdPWgoaik6YSE9PSJcXCImJihmW2NdPWoucmVwbGFjZSgvW0EtWmEtel0vZyxmdW5jdGlvbihhKXthPWEuY2hhckNvZGVBdCgwKTtyZXR1cm4iWyIrU3RyaW5nLmZyb21DaGFyQ29kZShhJi0zMyxhfDMyKSsiXSJ9KSk7cmV0dXJuIGYuam9pbigiIil9Zm9yKHZhciB0PTAscz0hMSxsPSExLHA9MCxkPWEubGVuZ3RoO3A8ZDsrK3Ape3ZhciBnPWFbcF07aWYoZy5pZ25vcmVDYXNlKWw9ITA7ZWxzZSBpZigvW2Etel0vaS50ZXN0KGcuc291cmNlLnJlcGxhY2UoL1xcdVtcZGEtZl17NH18XFx4W1xkYS1mXXsyfXxcXFteVVh1eF0vZ2ksIiIpKSl7cz0hMDtsPSExO2JyZWFrfX1mb3IodmFyIHI9Cit7Yjo4LHQ6OSxuOjEwLHY6MTEsZjoxMixyOjEzfSxuPVtdLHA9MCxkPWEubGVuZ3RoO3A8ZDsrK3Ape2c9YVtwXTtpZihnLmdsb2JhbHx8Zy5tdWx0aWxpbmUpdGhyb3cgRXJyb3IoIiIrZyk7bi5wdXNoKCIoPzoiK3koZykrIikiKX1yZXR1cm4gUmVnRXhwKG4uam9pbigifCIpLGw/ImdpIjoiZyIpfWZ1bmN0aW9uIE0oYSl7ZnVuY3Rpb24gbShhKXtzd2l0Y2goYS5ub2RlVHlwZSl7Y2FzZSAxOmlmKGUudGVzdChhLmNsYXNzTmFtZSkpYnJlYWs7Zm9yKHZhciBnPWEuZmlyc3RDaGlsZDtnO2c9Zy5uZXh0U2libGluZyltKGcpO2c9YS5ub2RlTmFtZTtpZigiQlIiPT09Z3x8IkxJIj09PWcpaFtzXT0iXG4iLHRbczw8MV09eSsrLHRbcysrPDwxfDFdPWE7YnJlYWs7Y2FzZSAzOmNhc2UgNDpnPWEubm9kZVZhbHVlLGcubGVuZ3RoJiYoZz1wP2cucmVwbGFjZSgvXHJcbj8vZywiXG4iKTpnLnJlcGxhY2UoL1tcdFxuXHIgXSsvZywiICIpLGhbc109Zyx0W3M8PDFdPXkseSs9Zy5sZW5ndGgsCit0W3MrKzw8MXwxXT1hKX19dmFyIGU9Lyg/Ol58XHMpbm9jb2RlKD86XHN8JCkvLGg9W10seT0wLHQ9W10scz0wLGw7YS5jdXJyZW50U3R5bGU/bD1hLmN1cnJlbnRTdHlsZS53aGl0ZVNwYWNlOndpbmRvdy5nZXRDb21wdXRlZFN0eWxlJiYobD1kb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGEscSkuZ2V0UHJvcGVydHlWYWx1ZSgid2hpdGUtc3BhY2UiKSk7dmFyIHA9bCYmInByZSI9PT1sLnN1YnN0cmluZygwLDMpO20oYSk7cmV0dXJue2E6aC5qb2luKCIiKS5yZXBsYWNlKC9cbiQvLCIiKSxjOnR9fWZ1bmN0aW9uIEIoYSxtLGUsaCl7bSYmKGE9e2E6bSxkOmF9LGUoYSksaC5wdXNoLmFwcGx5KGgsYS5lKSl9ZnVuY3Rpb24geChhLG0pe2Z1bmN0aW9uIGUoYSl7Zm9yKHZhciBsPWEuZCxwPVtsLCJwbG4iXSxkPTAsZz1hLmEubWF0Y2goeSl8fFtdLHI9e30sbj0wLHo9Zy5sZW5ndGg7bjx6Oysrbil7dmFyIGY9Z1tuXSxiPXJbZl0sbz12b2lkIDAsYztpZih0eXBlb2YgYj09PQorInN0cmluZyIpYz0hMTtlbHNle3ZhciBpPWhbZi5jaGFyQXQoMCldO2lmKGkpbz1mLm1hdGNoKGlbMV0pLGI9aVswXTtlbHNle2ZvcihjPTA7Yzx0OysrYylpZihpPW1bY10sbz1mLm1hdGNoKGlbMV0pKXtiPWlbMF07YnJlYWt9b3x8KGI9InBsbiIpfWlmKChjPWIubGVuZ3RoPj01JiYibGFuZy0iPT09Yi5zdWJzdHJpbmcoMCw1KSkmJiEobyYmdHlwZW9mIG9bMV09PT0ic3RyaW5nIikpYz0hMSxiPSJzcmMiO2N8fChyW2ZdPWIpfWk9ZDtkKz1mLmxlbmd0aDtpZihjKXtjPW9bMV07dmFyIGo9Zi5pbmRleE9mKGMpLGs9aitjLmxlbmd0aDtvWzJdJiYoaz1mLmxlbmd0aC1vWzJdLmxlbmd0aCxqPWstYy5sZW5ndGgpO2I9Yi5zdWJzdHJpbmcoNSk7QihsK2ksZi5zdWJzdHJpbmcoMCxqKSxlLHApO0IobCtpK2osYyxDKGIsYykscCk7QihsK2krayxmLnN1YnN0cmluZyhrKSxlLHApfWVsc2UgcC5wdXNoKGwraSxiKX1hLmU9cH12YXIgaD17fSx5OyhmdW5jdGlvbigpe2Zvcih2YXIgZT1hLmNvbmNhdChtKSwKK2w9W10scD17fSxkPTAsZz1lLmxlbmd0aDtkPGc7KytkKXt2YXIgcj1lW2RdLG49clszXTtpZihuKWZvcih2YXIgaz1uLmxlbmd0aDstLWs+PTA7KWhbbi5jaGFyQXQoayldPXI7cj1yWzFdO249IiIrcjtwLmhhc093blByb3BlcnR5KG4pfHwobC5wdXNoKHIpLHBbbl09cSl9bC5wdXNoKC9bXFNcc10vKTt5PUwobCl9KSgpO3ZhciB0PW0ubGVuZ3RoO3JldHVybiBlfWZ1bmN0aW9uIHUoYSl7dmFyIG09W10sZT1bXTthLnRyaXBsZVF1b3RlZFN0cmluZ3M/bS5wdXNoKFsic3RyIiwvXig/OicnJyg/OlteJ1xcXXxcXFtcU1xzXXwnJz8oPz1bXiddKSkqKD86JycnfCQpfCIiIig/OlteIlxcXXxcXFtcU1xzXXwiIj8oPz1bXiJdKSkqKD86IiIifCQpfCcoPzpbXidcXF18XFxbXFNcc10pKig/Oid8JCl8Iig/OlteIlxcXXxcXFtcU1xzXSkqKD86InwkKSkvLHEsIidcIiJdKTphLm11bHRpTGluZVN0cmluZ3M/bS5wdXNoKFsic3RyIiwvXig/OicoPzpbXidcXF18XFxbXFNcc10pKig/Oid8JCl8Iig/OlteIlxcXXxcXFtcU1xzXSkqKD86InwkKXxgKD86W15cXGBdfFxcW1xTXHNdKSooPzpgfCQpKS8sCitxLCInXCJgIl0pOm0ucHVzaChbInN0ciIsL14oPzonKD86W15cblxyJ1xcXXxcXC4pKig/Oid8JCl8Iig/OlteXG5cciJcXF18XFwuKSooPzoifCQpKS8scSwiXCInIl0pO2EudmVyYmF0aW1TdHJpbmdzJiZlLnB1c2goWyJzdHIiLC9eQCIoPzpbXiJdfCIiKSooPzoifCQpLyxxXSk7dmFyIGg9YS5oYXNoQ29tbWVudHM7aCYmKGEuY1N0eWxlQ29tbWVudHM/KGg+MT9tLnB1c2goWyJjb20iLC9eIyg/OiMjKD86W14jXXwjKD8hIyMpKSooPzojIyN8JCl8LiopLyxxLCIjIl0pOm0ucHVzaChbImNvbSIsL14jKD86KD86ZGVmaW5lfGVsaWZ8ZWxzZXxlbmRpZnxlcnJvcnxpZmRlZnxpbmNsdWRlfGlmbmRlZnxsaW5lfHByYWdtYXx1bmRlZnx3YXJuaW5nKVxifFteXG5ccl0qKS8scSwiIyJdKSxlLnB1c2goWyJzdHIiLC9ePCg/Oig/Oig/OlwuXC5cLykqfFwvPykoPzpbXHctXSsoPzpcL1tcdy1dKykrKT9bXHctXStcLmh8W2Etel1cdyopPi8scV0pKTptLnB1c2goWyJjb20iLC9eI1teXG5ccl0qLywKK3EsIiMiXSkpO2EuY1N0eWxlQ29tbWVudHMmJihlLnB1c2goWyJjb20iLC9eXC9cL1teXG5ccl0qLyxxXSksZS5wdXNoKFsiY29tIiwvXlwvXCpbXFNcc10qPyg/OlwqXC98JCkvLHFdKSk7YS5yZWdleExpdGVyYWxzJiZlLnB1c2goWyJsYW5nLXJlZ2V4IiwvXig/Ol5eXC4/fFshKy1dfCE9fCE9PXwjfCV8JT18JnwmJnwmJj18Jj18XCh8XCp8XCo9fFwrPXwsfC09fC0+fFwvfFwvPXw6fDo6fDt8PHw8PHw8PD18PD18PXw9PXw9PT18Pnw+PXw+Pnw+Pj18Pj4+fD4+Pj18Wz9AW15dfFxePXxcXlxefFxeXF49fHt8XHx8XHw9fFx8XHx8XHxcfD18fnxicmVha3xjYXNlfGNvbnRpbnVlfGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8aW5zdGFuY2VvZnxyZXR1cm58dGhyb3d8dHJ5fHR5cGVvZilccyooXC8oPz1bXiovXSkoPzpbXi9bXFxdfFxcW1xTXHNdfFxbKD86W15cXFxdXXxcXFtcU1xzXSkqKD86XXwkKSkrXC8pL10pOyhoPWEudHlwZXMpJiZlLnB1c2goWyJ0eXAiLGhdKTthPSgiIithLmtleXdvcmRzKS5yZXBsYWNlKC9eIHwgJC9nLAorIiIpO2EubGVuZ3RoJiZlLnB1c2goWyJrd2QiLFJlZ0V4cCgiXig/OiIrYS5yZXBsYWNlKC9bXHMsXSsvZywifCIpKyIpXFxiIikscV0pO20ucHVzaChbInBsbiIsL15ccysvLHEsIiBcclxuXHRceGEwIl0pO2UucHVzaChbImxpdCIsL15AWyRfYS16XVtcdyRAXSovaSxxXSxbInR5cCIsL14oPzpbQF9dP1tBLVpdK1thLXpdW1x3JEBdKnxcdytfdFxiKS8scV0sWyJwbG4iLC9eWyRfYS16XVtcdyRAXSovaSxxXSxbImxpdCIsL14oPzoweFtcZGEtZl0rfCg/OlxkKD86X1xkKykqXGQqKD86XC5cZCopP3xcLlxkXCspKD86ZVsrLV0/XGQrKT8pW2Etel0qL2kscSwiMDEyMzQ1Njc4OSJdLFsicGxuIiwvXlxcW1xTXHNdPy8scV0sWyJwdW4iLC9eLlteXHNcdyItJCcuL0BcXGBdKi8scV0pO3JldHVybiB4KG0sZSl9ZnVuY3Rpb24gRChhLG0pe2Z1bmN0aW9uIGUoYSl7c3dpdGNoKGEubm9kZVR5cGUpe2Nhc2UgMTppZihrLnRlc3QoYS5jbGFzc05hbWUpKWJyZWFrO2lmKCJCUiI9PT1hLm5vZGVOYW1lKWgoYSksCithLnBhcmVudE5vZGUmJmEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhKTtlbHNlIGZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZyllKGEpO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6aWYocCl7dmFyIGI9YS5ub2RlVmFsdWUsZD1iLm1hdGNoKHQpO2lmKGQpe3ZhciBjPWIuc3Vic3RyaW5nKDAsZC5pbmRleCk7YS5ub2RlVmFsdWU9YzsoYj1iLnN1YnN0cmluZyhkLmluZGV4K2RbMF0ubGVuZ3RoKSkmJmEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocy5jcmVhdGVUZXh0Tm9kZShiKSxhLm5leHRTaWJsaW5nKTtoKGEpO2N8fGEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhKX19fX1mdW5jdGlvbiBoKGEpe2Z1bmN0aW9uIGIoYSxkKXt2YXIgZT1kP2EuY2xvbmVOb2RlKCExKTphLGY9YS5wYXJlbnROb2RlO2lmKGYpe3ZhciBmPWIoZiwxKSxnPWEubmV4dFNpYmxpbmc7Zi5hcHBlbmRDaGlsZChlKTtmb3IodmFyIGg9ZztoO2g9ZylnPWgubmV4dFNpYmxpbmcsZi5hcHBlbmRDaGlsZChoKX1yZXR1cm4gZX0KK2Zvcig7IWEubmV4dFNpYmxpbmc7KWlmKGE9YS5wYXJlbnROb2RlLCFhKXJldHVybjtmb3IodmFyIGE9YihhLm5leHRTaWJsaW5nLDApLGU7KGU9YS5wYXJlbnROb2RlKSYmZS5ub2RlVHlwZT09PTE7KWE9ZTtkLnB1c2goYSl9dmFyIGs9Lyg/Ol58XHMpbm9jb2RlKD86XHN8JCkvLHQ9L1xyXG4/fFxuLyxzPWEub3duZXJEb2N1bWVudCxsO2EuY3VycmVudFN0eWxlP2w9YS5jdXJyZW50U3R5bGUud2hpdGVTcGFjZTp3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSYmKGw9cy5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGEscSkuZ2V0UHJvcGVydHlWYWx1ZSgid2hpdGUtc3BhY2UiKSk7dmFyIHA9bCYmInByZSI9PT1sLnN1YnN0cmluZygwLDMpO2ZvcihsPXMuY3JlYXRlRWxlbWVudCgiTEkiKTthLmZpcnN0Q2hpbGQ7KWwuYXBwZW5kQ2hpbGQoYS5maXJzdENoaWxkKTtmb3IodmFyIGQ9W2xdLGc9MDtnPGQubGVuZ3RoOysrZyllKGRbZ10pO209PT0obXwwKSYmZFswXS5zZXRBdHRyaWJ1dGUoInZhbHVlIiwKK20pO3ZhciByPXMuY3JlYXRlRWxlbWVudCgiT0wiKTtyLmNsYXNzTmFtZT0ibGluZW51bXMiO2Zvcih2YXIgbj1NYXRoLm1heCgwLG0tMXwwKXx8MCxnPTAsej1kLmxlbmd0aDtnPHo7KytnKWw9ZFtnXSxsLmNsYXNzTmFtZT0iTCIrKGcrbiklMTAsbC5maXJzdENoaWxkfHxsLmFwcGVuZENoaWxkKHMuY3JlYXRlVGV4dE5vZGUoIlx4YTAiKSksci5hcHBlbmRDaGlsZChsKTthLmFwcGVuZENoaWxkKHIpfWZ1bmN0aW9uIGsoYSxtKXtmb3IodmFyIGU9bS5sZW5ndGg7LS1lPj0wOyl7dmFyIGg9bVtlXTtBLmhhc093blByb3BlcnR5KGgpP3dpbmRvdy5jb25zb2xlJiZjb25zb2xlLndhcm4oImNhbm5vdCBvdmVycmlkZSBsYW5ndWFnZSBoYW5kbGVyICVzIixoKTpBW2hdPWF9fWZ1bmN0aW9uIEMoYSxtKXtpZighYXx8IUEuaGFzT3duUHJvcGVydHkoYSkpYT0vXlxzKjwvLnRlc3QobSk/ImRlZmF1bHQtbWFya3VwIjoiZGVmYXVsdC1jb2RlIjtyZXR1cm4gQVthXX1mdW5jdGlvbiBFKGEpe3ZhciBtPQorYS5nO3RyeXt2YXIgZT1NKGEuaCksaD1lLmE7YS5hPWg7YS5jPWUuYzthLmQ9MDtDKG0saCkoYSk7dmFyIGs9L1xiTVNJRVxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLG09L1xuL2csdD1hLmEscz10Lmxlbmd0aCxlPTAsbD1hLmMscD1sLmxlbmd0aCxoPTAsZD1hLmUsZz1kLmxlbmd0aCxhPTA7ZFtnXT1zO3ZhciByLG47Zm9yKG49cj0wO248ZzspZFtuXSE9PWRbbisyXT8oZFtyKytdPWRbbisrXSxkW3IrK109ZFtuKytdKTpuKz0yO2c9cjtmb3Iobj1yPTA7bjxnOyl7Zm9yKHZhciB6PWRbbl0sZj1kW24rMV0sYj1uKzI7YisyPD1nJiZkW2IrMV09PT1mOyliKz0yO2RbcisrXT16O2RbcisrXT1mO249Yn1mb3IoZC5sZW5ndGg9cjtoPHA7KXt2YXIgbz1sW2grMl18fHMsYz1kW2ErMl18fHMsYj1NYXRoLm1pbihvLGMpLGk9bFtoKzFdLGo7aWYoaS5ub2RlVHlwZSE9PTEmJihqPXQuc3Vic3RyaW5nKGUsYikpKXtrJiYoaj1qLnJlcGxhY2UobSwiXHIiKSk7aS5ub2RlVmFsdWU9CitqO3ZhciB1PWkub3duZXJEb2N1bWVudCx2PXUuY3JlYXRlRWxlbWVudCgiU1BBTiIpO3YuY2xhc3NOYW1lPWRbYSsxXTt2YXIgeD1pLnBhcmVudE5vZGU7eC5yZXBsYWNlQ2hpbGQodixpKTt2LmFwcGVuZENoaWxkKGkpO2U8byYmKGxbaCsxXT1pPXUuY3JlYXRlVGV4dE5vZGUodC5zdWJzdHJpbmcoYixvKSkseC5pbnNlcnRCZWZvcmUoaSx2Lm5leHRTaWJsaW5nKSl9ZT1iO2U+PW8mJihoKz0yKTtlPj1jJiYoYSs9Mil9fWNhdGNoKHcpeyJjb25zb2xlImluIHdpbmRvdyYmY29uc29sZS5sb2codyYmdy5zdGFjaz93LnN0YWNrOncpfX12YXIgdj1bImJyZWFrLGNvbnRpbnVlLGRvLGVsc2UsZm9yLGlmLHJldHVybix3aGlsZSJdLHc9W1t2LCJhdXRvLGNhc2UsY2hhcixjb25zdCxkZWZhdWx0LGRvdWJsZSxlbnVtLGV4dGVybixmbG9hdCxnb3RvLGludCxsb25nLHJlZ2lzdGVyLHNob3J0LHNpZ25lZCxzaXplb2Ysc3RhdGljLHN0cnVjdCxzd2l0Y2gsdHlwZWRlZix1bmlvbix1bnNpZ25lZCx2b2lkLHZvbGF0aWxlIl0sCisiY2F0Y2gsY2xhc3MsZGVsZXRlLGZhbHNlLGltcG9ydCxuZXcsb3BlcmF0b3IscHJpdmF0ZSxwcm90ZWN0ZWQscHVibGljLHRoaXMsdGhyb3csdHJ1ZSx0cnksdHlwZW9mIl0sRj1bdywiYWxpZ25vZixhbGlnbl91bmlvbixhc20sYXhpb20sYm9vbCxjb25jZXB0LGNvbmNlcHRfbWFwLGNvbnN0X2Nhc3QsY29uc3RleHByLGRlY2x0eXBlLGR5bmFtaWNfY2FzdCxleHBsaWNpdCxleHBvcnQsZnJpZW5kLGlubGluZSxsYXRlX2NoZWNrLG11dGFibGUsbmFtZXNwYWNlLG51bGxwdHIscmVpbnRlcnByZXRfY2FzdCxzdGF0aWNfYXNzZXJ0LHN0YXRpY19jYXN0LHRlbXBsYXRlLHR5cGVpZCx0eXBlbmFtZSx1c2luZyx2aXJ0dWFsLHdoZXJlIl0sRz1bdywiYWJzdHJhY3QsYm9vbGVhbixieXRlLGV4dGVuZHMsZmluYWwsZmluYWxseSxpbXBsZW1lbnRzLGltcG9ydCxpbnN0YW5jZW9mLG51bGwsbmF0aXZlLHBhY2thZ2Usc3RyaWN0ZnAsc3VwZXIsc3luY2hyb25pemVkLHRocm93cyx0cmFuc2llbnQiXSwKK0g9W0csImFzLGJhc2UsYnksY2hlY2tlZCxkZWNpbWFsLGRlbGVnYXRlLGRlc2NlbmRpbmcsZHluYW1pYyxldmVudCxmaXhlZCxmb3JlYWNoLGZyb20sZ3JvdXAsaW1wbGljaXQsaW4saW50ZXJmYWNlLGludGVybmFsLGludG8saXMsbG9jayxvYmplY3Qsb3V0LG92ZXJyaWRlLG9yZGVyYnkscGFyYW1zLHBhcnRpYWwscmVhZG9ubHkscmVmLHNieXRlLHNlYWxlZCxzdGFja2FsbG9jLHN0cmluZyxzZWxlY3QsdWludCx1bG9uZyx1bmNoZWNrZWQsdW5zYWZlLHVzaG9ydCx2YXIiXSx3PVt3LCJkZWJ1Z2dlcixldmFsLGV4cG9ydCxmdW5jdGlvbixnZXQsbnVsbCxzZXQsdW5kZWZpbmVkLHZhcix3aXRoLEluZmluaXR5LE5hTiJdLEk9W3YsImFuZCxhcyxhc3NlcnQsY2xhc3MsZGVmLGRlbCxlbGlmLGV4Y2VwdCxleGVjLGZpbmFsbHksZnJvbSxnbG9iYWwsaW1wb3J0LGluLGlzLGxhbWJkYSxub25sb2NhbCxub3Qsb3IscGFzcyxwcmludCxyYWlzZSx0cnksd2l0aCx5aWVsZCxGYWxzZSxUcnVlLE5vbmUiXSwKK0o9W3YsImFsaWFzLGFuZCxiZWdpbixjYXNlLGNsYXNzLGRlZixkZWZpbmVkLGVsc2lmLGVuZCxlbnN1cmUsZmFsc2UsaW4sbW9kdWxlLG5leHQsbmlsLG5vdCxvcixyZWRvLHJlc2N1ZSxyZXRyeSxzZWxmLHN1cGVyLHRoZW4sdHJ1ZSx1bmRlZix1bmxlc3MsdW50aWwsd2hlbix5aWVsZCxCRUdJTixFTkQiXSx2PVt2LCJjYXNlLGRvbmUsZWxpZixlc2FjLGV2YWwsZmksZnVuY3Rpb24saW4sbG9jYWwsc2V0LHRoZW4sdW50aWwiXSxLPS9eKERJUnxGSUxFfHZlY3RvcnwoZGV8cHJpb3JpdHlfKT9xdWV1ZXxsaXN0fHN0YWNrfChjb25zdF8pP2l0ZXJhdG9yfChtdWx0aSk/KHNldHxtYXApfGJpdHNldHx1PyhpbnR8ZmxvYXQpXGQqKS8sTj0vXFMvLE89dSh7a2V5d29yZHM6W0YsSCx3LCJjYWxsZXIsZGVsZXRlLGRpZSxkbyxkdW1wLGVsc2lmLGV2YWwsZXhpdCxmb3JlYWNoLGZvcixnb3RvLGlmLGltcG9ydCxsYXN0LGxvY2FsLG15LG5leHQsbm8sb3VyLHByaW50LHBhY2thZ2UscmVkbyxyZXF1aXJlLHN1Yix1bmRlZix1bmxlc3MsdW50aWwsdXNlLHdhbnRhcnJheSx3aGlsZSxCRUdJTixFTkQiKworSSxKLHZdLGhhc2hDb21tZW50czohMCxjU3R5bGVDb21tZW50czohMCxtdWx0aUxpbmVTdHJpbmdzOiEwLHJlZ2V4TGl0ZXJhbHM6ITB9KSxBPXt9O2soTyxbImRlZmF1bHQtY29kZSJdKTtrKHgoW10sW1sicGxuIiwvXltePD9dKy9dLFsiZGVjIiwvXjwhXHdbXj5dKig/Oj58JCkvXSxbImNvbSIsL148XCEtLVtcU1xzXSo/KD86LS1cPnwkKS9dLFsibGFuZy0iLC9ePFw/KFtcU1xzXSs/KSg/Olw/PnwkKS9dLFsibGFuZy0iLC9ePCUoW1xTXHNdKz8pKD86JT58JCkvXSxbInB1biIsL14oPzo8WyU/XXxbJT9dPikvXSxbImxhbmctIiwvXjx4bXBcYltePl0qPihbXFNcc10rPyk8XC94bXBcYltePl0qPi9pXSxbImxhbmctanMiLC9ePHNjcmlwdFxiW14+XSo+KFtcU1xzXSo/KSg8XC9zY3JpcHRcYltePl0qPikvaV0sWyJsYW5nLWNzcyIsL148c3R5bGVcYltePl0qPihbXFNcc10qPykoPFwvc3R5bGVcYltePl0qPikvaV0sWyJsYW5nLWluLnRhZyIsL14oPFwvP1thLXpdW148Pl0qPikvaV1dKSwKK1siZGVmYXVsdC1tYXJrdXAiLCJodG0iLCJodG1sIiwibXhtbCIsInhodG1sIiwieG1sIiwieHNsIl0pO2soeChbWyJwbG4iLC9eXHMrLyxxLCIgXHRcclxuIl0sWyJhdHYiLC9eKD86IlteIl0qIj98J1teJ10qJz8pLyxxLCJcIiciXV0sW1sidGFnIiwvXl48XC8/W2Etel0oPzpbXHctLjpdKlx3KT98XC8/PiQvaV0sWyJhdG4iLC9eKD8hc3R5bGVbXHM9XXxvbilbYS16XSg/OltcdzotXSpcdyk/L2ldLFsibGFuZy11cS52YWwiLC9ePVxzKihbXlxzIic+XSooPzpbXlxzIicvPl18XC8oPz1ccykpKS9dLFsicHVuIiwvXlsvPC0+XSsvXSxbImxhbmctanMiLC9eb25cdytccyo9XHMqIihbXiJdKykiL2ldLFsibGFuZy1qcyIsL15vblx3K1xzKj1ccyonKFteJ10rKScvaV0sWyJsYW5nLWpzIiwvXm9uXHcrXHMqPVxzKihbXlxzIic+XSspL2ldLFsibGFuZy1jc3MiLC9ec3R5bGVccyo9XHMqIihbXiJdKykiL2ldLFsibGFuZy1jc3MiLC9ec3R5bGVccyo9XHMqJyhbXiddKyknL2ldLFsibGFuZy1jc3MiLAorL15zdHlsZVxzKj1ccyooW15ccyInPl0rKS9pXV0pLFsiaW4udGFnIl0pO2soeChbXSxbWyJhdHYiLC9eW1xTXHNdKy9dXSksWyJ1cS52YWwiXSk7ayh1KHtrZXl3b3JkczpGLGhhc2hDb21tZW50czohMCxjU3R5bGVDb21tZW50czohMCx0eXBlczpLfSksWyJjIiwiY2MiLCJjcHAiLCJjeHgiLCJjeWMiLCJtIl0pO2sodSh7a2V5d29yZHM6Im51bGwsdHJ1ZSxmYWxzZSJ9KSxbImpzb24iXSk7ayh1KHtrZXl3b3JkczpILGhhc2hDb21tZW50czohMCxjU3R5bGVDb21tZW50czohMCx2ZXJiYXRpbVN0cmluZ3M6ITAsdHlwZXM6S30pLFsiY3MiXSk7ayh1KHtrZXl3b3JkczpHLGNTdHlsZUNvbW1lbnRzOiEwfSksWyJqYXZhIl0pO2sodSh7a2V5d29yZHM6dixoYXNoQ29tbWVudHM6ITAsbXVsdGlMaW5lU3RyaW5nczohMH0pLFsiYnNoIiwiY3NoIiwic2giXSk7ayh1KHtrZXl3b3JkczpJLGhhc2hDb21tZW50czohMCxtdWx0aUxpbmVTdHJpbmdzOiEwLHRyaXBsZVF1b3RlZFN0cmluZ3M6ITB9KSwKK1siY3YiLCJweSJdKTtrKHUoe2tleXdvcmRzOiJjYWxsZXIsZGVsZXRlLGRpZSxkbyxkdW1wLGVsc2lmLGV2YWwsZXhpdCxmb3JlYWNoLGZvcixnb3RvLGlmLGltcG9ydCxsYXN0LGxvY2FsLG15LG5leHQsbm8sb3VyLHByaW50LHBhY2thZ2UscmVkbyxyZXF1aXJlLHN1Yix1bmRlZix1bmxlc3MsdW50aWwsdXNlLHdhbnRhcnJheSx3aGlsZSxCRUdJTixFTkQiLGhhc2hDb21tZW50czohMCxtdWx0aUxpbmVTdHJpbmdzOiEwLHJlZ2V4TGl0ZXJhbHM6ITB9KSxbInBlcmwiLCJwbCIsInBtIl0pO2sodSh7a2V5d29yZHM6SixoYXNoQ29tbWVudHM6ITAsbXVsdGlMaW5lU3RyaW5nczohMCxyZWdleExpdGVyYWxzOiEwfSksWyJyYiJdKTtrKHUoe2tleXdvcmRzOncsY1N0eWxlQ29tbWVudHM6ITAscmVnZXhMaXRlcmFsczohMH0pLFsianMiXSk7ayh1KHtrZXl3b3JkczoiYWxsLGFuZCxieSxjYXRjaCxjbGFzcyxlbHNlLGV4dGVuZHMsZmFsc2UsZmluYWxseSxmb3IsaWYsaW4saXMsaXNudCxsb29wLG5ldyxubyxub3QsbnVsbCxvZixvZmYsb24sb3IscmV0dXJuLHN1cGVyLHRoZW4sdHJ1ZSx0cnksdW5sZXNzLHVudGlsLHdoZW4sd2hpbGUseWVzIiwKK2hhc2hDb21tZW50czozLGNTdHlsZUNvbW1lbnRzOiEwLG11bHRpbGluZVN0cmluZ3M6ITAsdHJpcGxlUXVvdGVkU3RyaW5nczohMCxyZWdleExpdGVyYWxzOiEwfSksWyJjb2ZmZWUiXSk7ayh4KFtdLFtbInN0ciIsL15bXFNcc10rL11dKSxbInJlZ2V4Il0pO3dpbmRvdy5wcmV0dHlQcmludE9uZT1mdW5jdGlvbihhLG0sZSl7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUFJFIik7aC5pbm5lckhUTUw9YTtlJiZEKGgsZSk7RSh7ZzptLGk6ZSxoOmh9KTtyZXR1cm4gaC5pbm5lckhUTUx9O3dpbmRvdy5wcmV0dHlQcmludD1mdW5jdGlvbihhKXtmdW5jdGlvbiBtKCl7Zm9yKHZhciBlPXdpbmRvdy5QUl9TSE9VTERfVVNFX0NPTlRJTlVBVElPTj9sLm5vdygpKzI1MDpJbmZpbml0eTtwPGgubGVuZ3RoJiZsLm5vdygpPGU7cCsrKXt2YXIgbj1oW3BdLGs9bi5jbGFzc05hbWU7aWYoay5pbmRleE9mKCJwcmV0dHlwcmludCIpPj0wKXt2YXIgaz1rLm1hdGNoKGcpLGYsYjtpZihiPQorIWspe2I9bjtmb3IodmFyIG89dm9pZCAwLGM9Yi5maXJzdENoaWxkO2M7Yz1jLm5leHRTaWJsaW5nKXZhciBpPWMubm9kZVR5cGUsbz1pPT09MT9vP2I6YzppPT09Mz9OLnRlc3QoYy5ub2RlVmFsdWUpP2I6bzpvO2I9KGY9bz09PWI/dm9pZCAwOm8pJiYiQ09ERSI9PT1mLnRhZ05hbWV9YiYmKGs9Zi5jbGFzc05hbWUubWF0Y2goZykpO2smJihrPWtbMV0pO2I9ITE7Zm9yKG89bi5wYXJlbnROb2RlO287bz1vLnBhcmVudE5vZGUpaWYoKG8udGFnTmFtZT09PSJwcmUifHxvLnRhZ05hbWU9PT0iY29kZSJ8fG8udGFnTmFtZT09PSJ4bXAiKSYmby5jbGFzc05hbWUmJm8uY2xhc3NOYW1lLmluZGV4T2YoInByZXR0eXByaW50Iik+PTApe2I9ITA7YnJlYWt9Ynx8KChiPShiPW4uY2xhc3NOYW1lLm1hdGNoKC9cYmxpbmVudW1zXGIoPzo6KFxkKykpPy8pKT9iWzFdJiZiWzFdLmxlbmd0aD8rYlsxXTohMDohMSkmJkQobixiKSxkPXtnOmssaDpuLGk6Yn0sRShkKSl9fXA8aC5sZW5ndGg/c2V0VGltZW91dChtLAorMjUwKTphJiZhKCl9Zm9yKHZhciBlPVtkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicHJlIiksZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImNvZGUiKSxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgieG1wIildLGg9W10saz0wO2s8ZS5sZW5ndGg7KytrKWZvcih2YXIgdD0wLHM9ZVtrXS5sZW5ndGg7dDxzOysrdCloLnB1c2goZVtrXVt0XSk7dmFyIGU9cSxsPURhdGU7bC5ub3d8fChsPXtub3c6ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9fSk7dmFyIHA9MCxkLGc9L1xibGFuZyg/OnVhZ2UpPy0oW1x3Ll0rKSg/IVxTKS87bSgpfTt3aW5kb3cuUFI9e2NyZWF0ZVNpbXBsZUxleGVyOngscmVnaXN0ZXJMYW5nSGFuZGxlcjprLHNvdXJjZURlY29yYXRvcjp1LFBSX0FUVFJJQl9OQU1FOiJhdG4iLFBSX0FUVFJJQl9WQUxVRToiYXR2IixQUl9DT01NRU5UOiJjb20iLFBSX0RFQ0xBUkFUSU9OOiJkZWMiLFBSX0tFWVdPUkQ6Imt3ZCIsUFJfTElURVJBTDoibGl0IiwKK1BSX05PQ09ERToibm9jb2RlIixQUl9QTEFJTjoicGxuIixQUl9QVU5DVFVBVElPTjoicHVuIixQUl9TT1VSQ0U6InNyYyIsUFJfU1RSSU5HOiJzdHIiLFBSX1RBRzoidGFnIixQUl9UWVBFOiJ0eXAifX0pKCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvcHJvamVjdHBhZ2UuanMgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvcHJvamVjdHBhZ2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM2NzA0NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9wcm9qZWN0cGFnZS5qcwpAQCAtMCwwICsxLDQyOCBAQAorInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBwcm9qZWN0UGFnZUluaXQoY3R4KSB7CisKKyAgdmFyIGxheWVyQWRkSW5wdXQgPSAkKCIjbGF5ZXItYWRkLWlucHV0Iik7CisgIHZhciBsYXllcnNJblByakxpc3QgPSAkKCIjbGF5ZXJzLWluLXByb2plY3QtbGlzdCIpOworICB2YXIgbGF5ZXJBZGRCdG4gPSAkKCIjYWRkLWxheWVyLWJ0biIpOworCisgIHZhciBtYWNoaW5lQ2hhbmdlSW5wdXQgPSAkKCIjbWFjaGluZS1jaGFuZ2UtaW5wdXQiKTsKKyAgdmFyIG1hY2hpbmVDaGFuZ2VCdG4gPSAkKCIjbWFjaGluZS1jaGFuZ2UtYnRuIik7CisgIHZhciBtYWNoaW5lRm9ybSA9ICQoIiNzZWxlY3QtbWFjaGluZS1mb3JtIik7CisgIHZhciBtYWNoaW5lQ2hhbmdlRm9ybVRvZ2dsZSA9ICQoIiNjaGFuZ2UtbWFjaGluZS10b2dnbGUiKTsKKyAgdmFyIG1hY2hpbmVOYW1lVGl0bGUgPSAkKCIjcHJvamVjdC1tYWNoaW5lLW5hbWUiKTsKKyAgdmFyIG1hY2hpbmVDaGFuZ2VDYW5jZWwgPSAkKCIjY2FuY2VsLW1hY2hpbmUtY2hhbmdlIik7CisKKyAgdmFyIGZyZXFCdWlsZEJ0biA9ICAkKCIjZnJlcS1idWlsZC1idG4iKTsKKyAgdmFyIGZyZXFCdWlsZExpc3QgPSAkKCIjZnJlcS1idWlsZC1saXN0Iik7CisKKyAgdmFyIHJlbGVhc2VDaGFuZ2VGb3JtVG9nZ2xlID0gJCgiI3JlbGVhc2UtY2hhbmdlLXRvZ2dsZSIpOworICB2YXIgcmVsZWFzZVRpdGxlID0gJCgiI3Byb2plY3QtcmVsZWFzZS10aXRsZSIpOworICB2YXIgcmVsZWFzZUZvcm0gPSAkKCIjY2hhbmdlLXJlbGVhc2UtZm9ybSIpOworICB2YXIgcmVsZWFzZU1vZGFsID0gJCgiI2NoYW5nZS1yZWxlYXNlLW1vZGFsIik7CisgIHZhciBjYW5jZWxSZWxlYXNlQ2hhbmdlID0gJCgiI2NhbmNlbC1yZWxlYXNlLWNoYW5nZSIpOworCisgIHZhciBjdXJyZW50TGF5ZXJBZGRTZWxlY3Rpb247CisgIHZhciBjdXJyZW50TWFjaGluZUFkZFNlbGVjdGlvbiA9IHt9OworCisgIHZhciB1cmxQYXJhbXMgPSBsaWJ0b2FzdGVyLnBhcnNlVXJsUGFyYW1zKCk7CisKKyAgbGlidG9hc3Rlci5nZXRQcm9qZWN0SW5mbyhsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0UGFnZVVybCwgZnVuY3Rpb24ocHJqSW5mbyl7CisgICAgdXBkYXRlUHJvamVjdExheWVycyhwcmpJbmZvLmxheWVycyk7CisgICAgdXBkYXRlRnJlcUJ1aWxkUmVjaXBlcyhwcmpJbmZvLmZyZXF0YXJnZXRzKTsKKyAgICB1cGRhdGVQcm9qZWN0UmVsZWFzZShwcmpJbmZvLnJlbGVhc2UpOworICAgIHVwZGF0ZVByb2plY3RSZWxlYXNlcyhwcmpJbmZvLnJlbGVhc2VzLCBwcmpJbmZvLnJlbGVhc2UpOworCisgICAgLyogSWYgd2UncmUgcmVjZWl2aW5nIGEgbWFjaGluZSBzZXQgZnJvbSB0aGUgdXJsIGFuZCBpdCdzIGRpZmZlcmVudCBmcm9tCisgICAgICogb3VyIGN1cnJlbnQgbWFjaGluZSB0aGVuIGFjdGl2YXRlIHNldCBtYWNoaW5lIHNlcXVlbmNlLgorICAgICAqLworICAgIGlmICh1cmxQYXJhbXMuaGFzT3duUHJvcGVydHkoJ3NldE1hY2hpbmUnKSAmJgorICAgICAgICB1cmxQYXJhbXMuc2V0TWFjaGluZSAhPT0gcHJqSW5mby5tYWNoaW5lLm5hbWUpeworICAgICAgICBjdXJyZW50TWFjaGluZUFkZFNlbGVjdGlvbi5uYW1lID0gdXJsUGFyYW1zLnNldE1hY2hpbmU7CisgICAgICAgIG1hY2hpbmVDaGFuZ2VCdG4uY2xpY2soKTsKKyAgICB9IGVsc2UgeworICAgICAgdXBkYXRlTWFjaGluZU5hbWUocHJqSW5mby5tYWNoaW5lLm5hbWUpOworICAgIH0KKworICAgLyogTm93IHdlJ3JlIHJlYWxseSByZWFkeSBzaG93IHRoZSBwYWdlICovCisgICAgJCgiI3Byb2plY3QtcGFnZSIpLnNob3coKTsKKyAgfSk7CisKKyAgKGZ1bmN0aW9uIG5vdGlmaWNhdGlvblJlcXVlc3QoKXsKKworICAgIGlmICh1cmxQYXJhbXMuaGFzT3duUHJvcGVydHkoJ25vdGlmeScpKXsKKyAgICAgIHN3aXRjaCAodXJsUGFyYW1zLm5vdGlmeSl7CisgICAgICAgIGNhc2UgJ25ldy1wcm9qZWN0JzoKKyAgICAgICAgICAkKCIjcHJvamVjdC1jcmVhdGVkLW5vdGlmaWNhdGlvbiIpLnNob3coKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnbGF5ZXItaW1wb3J0ZWQnOgorICAgICAgICAgIGxheWVySW1wb3J0ZWROb3RpZmljYXRpb24oKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgIH0pKCk7CisKKyAgLyogTGF5ZXIgaW1wb3J0ZWQgbm90aWZpY2F0aW9uICovCisgIGZ1bmN0aW9uIGxheWVySW1wb3J0ZWROb3RpZmljYXRpb24oKXsKKyAgICB2YXIgaW1wb3J0ZWQgPSAkLmNvb2tpZSgibGF5ZXItaW1wb3J0ZWQtYWxlcnQiKTsKKyAgICB2YXIgbWVzc2FnZSA9ICJMYXllciBpbXBvcnRlZCI7CisKKyAgICBpZiAoIWltcG9ydGVkKQorICAgICAgcmV0dXJuOworICAgIGVsc2UKKyAgICAgIGltcG9ydGVkID0gSlNPTi5wYXJzZShpbXBvcnRlZCk7CisKKyAgICBpZiAoaW1wb3J0ZWQuZGVwc19hZGRlZC5sZW5ndGggPT09IDApIHsKKyAgICAgIG1lc3NhZ2UgPSAiWW91IGhhdmUgaW1wb3J0ZWQgPHN0cm9uZz48YSBocmVmPVwiIitpbXBvcnRlZC5pbXBvcnRlZF9sYXllci5sYXllcmRldGFpbHVybCsiXCI+IitpbXBvcnRlZC5pbXBvcnRlZF9sYXllci5uYW1lKyI8L2E+PC9zdHJvbmc+IGFuZCBhZGRlZCBpdCB0byB5b3VyIHByb2plY3QuIjsKKyAgICB9IGVsc2UgeworCisgICAgICB2YXIgbGlua3MgPSAiPGEgaHJlZj1cIiIraW1wb3J0ZWQuaW1wb3J0ZWRfbGF5ZXIubGF5ZXJkZXRhaWx1cmwrIlwiPiIraW1wb3J0ZWQuaW1wb3J0ZWRfbGF5ZXIubmFtZSsiPC9hPiwgIjsKKworICAgICAgaW1wb3J0ZWQuZGVwc19hZGRlZC5tYXAgKGZ1bmN0aW9uKGl0ZW0sIGluZGV4KXsKKyAgICAgICAgbGlua3MgKz0nPGEgaHJlZj0iJytpdGVtLmxheWVyZGV0YWlsdXJsKyciPicraXRlbS5uYW1lKyc8L2E+JzsKKyAgICAgICAgLypJZiB3ZSdyZSBhdCB0aGUgbGFzdCBlbGVtZW50IHdlIGRvbid0IHdhbnQgdGhlIHRyYWlsaW5nIGNvbW1hICovCisgICAgICAgIGlmIChpbXBvcnRlZC5kZXBzX2FkZGVkW2luZGV4KzFdICE9PSB1bmRlZmluZWQpCisgICAgICAgICAgbGlua3MgKz0gJywgJzsKKyAgICAgIH0pOworCisgICAgICAvKiBMZW5ndGggKyAxIGhlcmUgdG8gZG8gZGVwcyArIHRoZSBpbXBvcnRlZCBsYXllciAqLworICAgICAgbWVzc2FnZSA9ICdZb3UgaGF2ZSBpbXBvcnRlZCA8c3Ryb25nPjxhIGhyZWY9IicraW1wb3J0ZWQuaW1wb3J0ZWRfbGF5ZXIubGF5ZXJkZXRhaWx1cmwrJyI+JytpbXBvcnRlZC5pbXBvcnRlZF9sYXllci5uYW1lKyc8L2E+PC9zdHJvbmc+IGFuZCBhZGRlZCA8c3Ryb25nPicrKGltcG9ydGVkLmRlcHNfYWRkZWQubGVuZ3RoKzEpKyc8L3N0cm9uZz4gbGF5ZXJzIHRvIHlvdXIgcHJvamVjdDogPHN0cm9uZz4nK2xpbmtzKyc8L3N0cm9uZz4nOworICAgIH0KKworICAgIGxpYnRvYXN0ZXIuc2hvd0NoYW5nZU5vdGlmaWNhdGlvbihtZXNzYWdlKTsKKworICAgICQucmVtb3ZlQ29va2llKCJsYXllci1pbXBvcnRlZC1hbGVydCIsIHsgcGF0aDogIi8ifSk7CisgIH0KKworICAvKiBBZGQvUm0gbGF5ZXIgZnVuY3Rpb25hbGl0eSAqLworCisgIGxpYnRvYXN0ZXIubWFrZVR5cGVhaGVhZChsYXllckFkZElucHV0LCBsaWJ0b2FzdGVyLmN0eC5sYXllcnNUeXBlQWhlYWRVcmwsIHsgaW5jbHVkZV9hZGRlZDogImZhbHNlIiB9LCBmdW5jdGlvbihpdGVtKXsKKyAgICBjdXJyZW50TGF5ZXJBZGRTZWxlY3Rpb24gPSBpdGVtOworICAgIGxheWVyQWRkQnRuLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgIH0pOworCisgIGxheWVyQWRkQnRuLmNsaWNrKGZ1bmN0aW9uKGUpeworICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICB2YXIgbGF5ZXJPYmogPSBjdXJyZW50TGF5ZXJBZGRTZWxlY3Rpb247CisKKyAgICBhZGRSbUxheWVyKGxheWVyT2JqLCB0cnVlKTsKKyAgICAvKiBSZXNldCB0aGUgdGV4dCBpbnB1dCAqLworICAgIGxheWVyQWRkSW5wdXQudmFsKCIiKTsKKyAgfSk7CisKKyAgZnVuY3Rpb24gYWRkUm1MYXllcihsYXllck9iaiwgYWRkKXsKKworICAgIGxpYnRvYXN0ZXIuYWRkUm1MYXllcihsYXllck9iaiwgYWRkLCBmdW5jdGlvbihsYXllckRlcHNMaXN0KXsKKyAgICAgIGlmIChhZGQpeworICAgICAgICB1cGRhdGVQcm9qZWN0TGF5ZXJzKFtsYXllck9ial0pOworICAgICAgICB1cGRhdGVQcm9qZWN0TGF5ZXJzKGxheWVyRGVwc0xpc3QpOworICAgICAgfQorCisgICAgICAvKiBTaG93IHRoZSBhbGVydCBtZXNzYWdlICovCisgICAgICB2YXIgbWVzc2FnZSA9IGxpYnRvYXN0ZXIubWFrZUxheWVyQWRkUm1BbGVydE1zZyhsYXllck9iaiwgbGF5ZXJEZXBzTGlzdCwgYWRkKTsKKyAgICAgIGxpYnRvYXN0ZXIuc2hvd0NoYW5nZU5vdGlmaWNhdGlvbihtZXNzYWdlKTsKKyAgICB9KTsKKyAgfQorCisgIGZ1bmN0aW9uIHVwZGF0ZVByb2plY3RMYXllcnMobGF5ZXJzKXsKKworICAgIC8qIE5vIGxheWVycyB0byBhZGQgKi8KKyAgICBpZiAobGF5ZXJzLmxlbmd0aCA9PT0gMCl7CisgICAgICB1cGRhdGVMYXllcnNDb3VudCgpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAodmFyIGkgaW4gbGF5ZXJzKXsKKyAgICAgIHZhciBsYXllck9iaiA9IGxheWVyc1tpXTsKKworICAgICAgdmFyIHByb2plY3RMYXllciA9ICQoIjxsaT48YT48L2E+PHNwYW4gY2xhc3M9XCJpY29uLXRyYXNoXCIgZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgdGl0bGU9XCJEZWxldGVcIj48L3NwYW4+PC9saT4iKTsKKworICAgICAgcHJvamVjdExheWVyLmRhdGEoJ2xheWVyJywgbGF5ZXJPYmopOworICAgICAgcHJvamVjdExheWVyLmNoaWxkcmVuKCJzcGFuIikudG9vbHRpcCgpOworCisgICAgICB2YXIgbGluayA9IHByb2plY3RMYXllci5jaGlsZHJlbigiYSIpOworCisgICAgICBsaW5rLmF0dHIoImhyZWYiLCBsYXllck9iai5sYXllcmRldGFpbHVybCk7CisgICAgICBsaW5rLnRleHQobGF5ZXJPYmoubmFtZSk7CisgICAgICAvKiBZT0NUTyAjODAyNAorICAgICAgICBsaW5rLnRvb2x0aXAoe3RpdGxlOiBsYXllck9iai5naXR1cmwgKyAiIHwgIisgbGF5ZXJPYmouYnJhbmNoLm5hbWUsIHBsYWNlbWVudDogInJpZ2h0In0pOworICAgICAgICBicmFuY2ggbmFtZSBub3QgYWNjZXNzaWJsZSBzb21ldGltZXMgaXQgaXMgcmV2aXNpb24gaW5zdGVhZAorICAgICAgKi8KKworICAgICAgdmFyIHRyYXNoSXRlbSA9IHByb2plY3RMYXllci5jaGlsZHJlbigic3BhbiIpOworICAgICAgdHJhc2hJdGVtLmNsaWNrKGZ1bmN0aW9uIChlKSB7CisgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgdmFyIGxheWVyT2JqVG9SbSA9ICQodGhpcykucGFyZW50KCkuZGF0YSgnbGF5ZXInKTsKKworICAgICAgICBhZGRSbUxheWVyKGxheWVyT2JqVG9SbSwgZmFsc2UpOworCisgICAgICAgICQodGhpcykucGFyZW50KCkuZmFkZU91dChmdW5jdGlvbiAoKXsKKyAgICAgICAgICAkKHRoaXMpLnJlbW92ZSgpOworICAgICAgICAgIHVwZGF0ZUxheWVyc0NvdW50KCk7CisgICAgICAgIH0pOworICAgICAgfSk7CisKKyAgICAgIGxheWVyc0luUHJqTGlzdC5hcHBlbmQocHJvamVjdExheWVyKTsKKworICAgICAgdXBkYXRlTGF5ZXJzQ291bnQoKTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiB1cGRhdGVMYXllcnNDb3VudCgpeworICAgIHZhciBjb3VudCA9ICQoIiNsYXllcnMtaW4tcHJvamVjdC1saXN0IikuY2hpbGRyZW4oKS5sZW5ndGg7CisKKyAgICBpZiAoY291bnQgPT09IDApCisgICAgICAkKCIjbm8tbGF5ZXJzLWluLXByb2plY3QiKS5mYWRlSW4oKTsKKyAgICBlbHNlCisgICAgICAkKCIjbm8tbGF5ZXJzLWluLXByb2plY3QiKS5oaWRlKCk7CisKKyAgICAkKCIjcHJvamVjdC1sYXllcnMtY291bnQiKS50ZXh0KGNvdW50KTsKKworICAgIHJldHVybiBjb3VudDsKKyAgfQorCisgIC8qIEZyZXF1ZW50IGJ1aWxkcyBmdW5jdGlvbmFsaXR5ICovCisgIGZ1bmN0aW9uIHVwZGF0ZUZyZXFCdWlsZFJlY2lwZXMocmVjaXBlcykgeworICAgIHZhciBub01vc3RCdWlsdCA9ICQoIiNuby1tb3N0LWJ1aWx0Iik7CisKKyAgICBpZiAocmVjaXBlcy5sZW5ndGggPT09IDApeworICAgICAgbm9Nb3N0QnVpbHQuc2hvdygpOworICAgICAgZnJlcUJ1aWxkQnRuLmhpZGUoKTsKKyAgICB9IGVsc2UgeworICAgICAgbm9Nb3N0QnVpbHQuaGlkZSgpOworICAgICAgZnJlcUJ1aWxkQnRuLnNob3coKTsKKyAgICB9CisKKyAgICBmb3IgKHZhciBpIGluIHJlY2lwZXMpeworICAgICAgdmFyIGZyZXFUYXJnZXRDaGVjayA9ICQoJzxsaT48bGFiZWwgY2xhc3M9ImNoZWNrYm94Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIC8+PHNwYW4gY2xhc3M9ImZyZXEtdGFyZ2V0LW5hbWUiPjwvc3Bhbj48L2xhYmVsPjwvbGk+Jyk7CisgICAgICBmcmVxVGFyZ2V0Q2hlY2suZmluZCgiLmZyZXEtdGFyZ2V0LW5hbWUiKS50ZXh0KHJlY2lwZXNbaV0pOworICAgICAgZnJlcVRhcmdldENoZWNrLmZpbmQoImlucHV0IikudmFsKHJlY2lwZXNbaV0pOworICAgICAgZnJlcVRhcmdldENoZWNrLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgICAgIGlmIChmcmVxQnVpbGRMaXN0LmZpbmQoIjpjaGVja2VkIikubGVuZ3RoID4gMCkKKyAgICAgICAgICBmcmVxQnVpbGRCdG4ucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGZyZXFCdWlsZEJ0bi5hdHRyKCJkaXNhYmxlZCIsICJkaXNhYmxlZCIpOworICAgICAgfSk7CisKKyAgICAgIGZyZXFCdWlsZExpc3QuYXBwZW5kKGZyZXFUYXJnZXRDaGVjayk7CisgICAgfQorICB9CisKKyAgZnJlcUJ1aWxkQnRuLmNsaWNrKGZ1bmN0aW9uKGUpeworICAgIGUucHJldmVudERlZmF1bHQoKTsKKworICAgIHZhciB0b0J1aWxkID0gIiI7CisgICAgZnJlcUJ1aWxkTGlzdC5maW5kKCI6Y2hlY2tlZCIpLmVhY2goZnVuY3Rpb24oKXsKKyAgICAgIHRvQnVpbGQgKz0gJCh0aGlzKS52YWwoKTsKKyAgICB9KTsKKworICAgIGxpYnRvYXN0ZXIuc3RhcnRBQnVpbGQobGlidG9hc3Rlci5jdHgucHJvamVjdEJ1aWxkc1VybCwgbGlidG9hc3Rlci5jdHgucHJvamVjdElkLCB0b0J1aWxkLCBmdW5jdGlvbigpeworICAgICAgLyogQnVpbGQgc3RhcnRlZCAqLworICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UobGlidG9hc3Rlci5jdHgucHJvamVjdEJ1aWxkc1VybCk7CisgICAgfSwKKyAgICBmdW5jdGlvbigpeworICAgICAgLyogQnVpbGQgc3RhcnQgZmFpbGVkICovCisgICAgICAvKiBbWU9DVE8gIzc5OTVdICovCisgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0QnVpbGRzVXJsKTsKKyAgICB9KTsKKyAgfSk7CisKKworICAvKiBDaGFuZ2UgbWFjaGluZSBmdW5jdGlvbmFsaXR5ICovCisKKyAgbWFjaGluZUNoYW5nZUZvcm1Ub2dnbGUuY2xpY2soZnVuY3Rpb24oKXsKKyAgICBtYWNoaW5lRm9ybS5zbGlkZURvd24oKTsKKyAgICBtYWNoaW5lTmFtZVRpdGxlLmhpZGUoKTsKKyAgICAkKHRoaXMpLmhpZGUoKTsKKyAgfSk7CisKKyAgbWFjaGluZUNoYW5nZUNhbmNlbC5jbGljayhmdW5jdGlvbigpeworICAgIG1hY2hpbmVGb3JtLnNsaWRlVXAoZnVuY3Rpb24oKXsKKyAgICAgIG1hY2hpbmVOYW1lVGl0bGUuc2hvdygpOworICAgICAgbWFjaGluZUNoYW5nZUZvcm1Ub2dnbGUuc2hvdygpOworICAgIH0pOworICB9KTsKKworICBmdW5jdGlvbiB1cGRhdGVNYWNoaW5lTmFtZShtYWNoaW5lTmFtZSl7CisgICAgbWFjaGluZUNoYW5nZUlucHV0LnZhbChtYWNoaW5lTmFtZSk7CisgICAgbWFjaGluZU5hbWVUaXRsZS50ZXh0KG1hY2hpbmVOYW1lKTsKKyAgfQorCisgIGxpYnRvYXN0ZXIubWFrZVR5cGVhaGVhZChtYWNoaW5lQ2hhbmdlSW5wdXQsIGxpYnRvYXN0ZXIuY3R4Lm1hY2hpbmVzVHlwZUFoZWFkVXJsLCB7IH0sIGZ1bmN0aW9uKGl0ZW0peworICAgIGN1cnJlbnRNYWNoaW5lQWRkU2VsZWN0aW9uID0gaXRlbTsKKyAgICBtYWNoaW5lQ2hhbmdlQnRuLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgIH0pOworCisgIG1hY2hpbmVDaGFuZ2VCdG4uY2xpY2soZnVuY3Rpb24oZSl7CisgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgIGlmIChjdXJyZW50TWFjaGluZUFkZFNlbGVjdGlvbi5uYW1lID09PSB1bmRlZmluZWQpCisgICAgICByZXR1cm47CisKKyAgICBsaWJ0b2FzdGVyLmVkaXRDdXJyZW50UHJvamVjdCh7IG1hY2hpbmVOYW1lIDogY3VycmVudE1hY2hpbmVBZGRTZWxlY3Rpb24ubmFtZSB9LAorICAgICAgZnVuY3Rpb24oKXsKKyAgICAgICAgLyogU3VjY2VzcyBtYWNoaW5lIGNoYW5nZWQgKi8KKyAgICAgICAgdXBkYXRlTWFjaGluZU5hbWUoY3VycmVudE1hY2hpbmVBZGRTZWxlY3Rpb24ubmFtZSk7CisgICAgICAgIG1hY2hpbmVDaGFuZ2VDYW5jZWwuY2xpY2soKTsKKworICAgICAgICAvKiBTaG93IHRoZSBhbGVydCBtZXNzYWdlICovCisgICAgICAgIHZhciBtZXNzYWdlID0gJCgnPHNwYW4gY2xhc3M9ImxlYWQiPllvdSBoYXZlIGNoYW5nZWQgdGhlIG1hY2hpbmUgdG86IDxzdHJvbmc+PHNwYW4gaWQ9Im5vdGlmeS1tYWNoaW5lLW5hbWUiPjwvc3Bhbj48L3N0cm9uZz48L3NwYW4+Jyk7CisgICAgICAgIG1lc3NhZ2UuZmluZCgiI25vdGlmeS1tYWNoaW5lLW5hbWUiKS50ZXh0KGN1cnJlbnRNYWNoaW5lQWRkU2VsZWN0aW9uLm5hbWUpOworICAgICAgICBsaWJ0b2FzdGVyLnNob3dDaGFuZ2VOb3RpZmljYXRpb24obWVzc2FnZSk7CisgICAgfSwKKyAgICAgIGZ1bmN0aW9uKCl7CisgICAgICAgIC8qIEZhaWxlZCBtYWNoaW5lIGNoYW5nZWQgKi8KKyAgICAgICAgY29uc29sZS5sb2coImZhaWxlZCB0byBjaGFuZ2UgbWFjaGluZSIpOworICAgIH0pOworICB9KTsKKworCisgIC8qIENoYW5nZSByZWxlYXNlIGZ1bmN0aW9uYWxpdHkgKi8KKyAgZnVuY3Rpb24gdXBkYXRlUHJvamVjdFJlbGVhc2UocmVsZWFzZSl7CisgICAgcmVsZWFzZVRpdGxlLnRleHQocmVsZWFzZS5kZXNjcmlwdGlvbik7CisgIH0KKworICBmdW5jdGlvbiB1cGRhdGVQcm9qZWN0UmVsZWFzZXMocmVsZWFzZXMsIGN1cnJlbnQpeworICAgIGZvciAodmFyIGkgaW4gcmVsZWFzZXMpeworICAgICAgdmFyIHJlbGVhc2VPcHRpb24gPSAkKCI8b3B0aW9uPjwvb3B0aW9uPiIpOworCisgICAgICByZWxlYXNlT3B0aW9uLnZhbChyZWxlYXNlc1tpXS5pZCk7CisgICAgICByZWxlYXNlT3B0aW9uLnRleHQocmVsZWFzZXNbaV0uZGVzY3JpcHRpb24pOworICAgICAgcmVsZWFzZU9wdGlvbi5kYXRhKCdyZWxlYXNlJywgcmVsZWFzZXNbaV0pOworCisgICAgICBpZiAocmVsZWFzZXNbaV0uaWQgPT0gY3VycmVudC5pZCkKKyAgICAgICAgcmVsZWFzZU9wdGlvbi5hdHRyKCJzZWxlY3RlZCIsICJzZWxlY3RlZCIpOworCisgICAgICByZWxlYXNlRm9ybS5jaGlsZHJlbigic2VsZWN0IikuYXBwZW5kKHJlbGVhc2VPcHRpb24pOworICAgIH0KKyAgfQorCisgIHJlbGVhc2VDaGFuZ2VGb3JtVG9nZ2xlLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgcmVsZWFzZUZvcm0uc2xpZGVEb3duKCk7CisgICAgcmVsZWFzZVRpdGxlLmhpZGUoKTsKKyAgICAkKHRoaXMpLmhpZGUoKTsKKyAgfSk7CisKKyAgY2FuY2VsUmVsZWFzZUNoYW5nZS5jbGljayhmdW5jdGlvbihlKXsKKyAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgcmVsZWFzZUZvcm0uc2xpZGVVcChmdW5jdGlvbigpeworICAgICAgcmVsZWFzZVRpdGxlLnNob3coKTsKKyAgICAgIHJlbGVhc2VDaGFuZ2VGb3JtVG9nZ2xlLnNob3coKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgZnVuY3Rpb24gY2hhbmdlUHJvamVjdFJlbGVhc2UocmVsZWFzZSwgbGF5ZXJzVG9SbSl7CisgICAgbGlidG9hc3Rlci5lZGl0Q3VycmVudFByb2plY3QoeyBwcm9qZWN0VmVyc2lvbiA6IHJlbGVhc2UuaWQgfSwKKyAgICAgIGZ1bmN0aW9uKCl7CisgICAgICAgIC8qIFN1Y2Nlc3MgKi8KKyAgICAgICAgLyogVXBkYXRlIGxheWVycyBsaXN0IHdpdGggbmV3IGxheWVycyAqLworICAgICAgICBsYXllcnNJblByakxpc3QuYWRkQ2xhc3MoJ211dGVkJyk7CisgICAgICAgIGxpYnRvYXN0ZXIuZ2V0UHJvamVjdEluZm8obGlidG9hc3Rlci5jdHgucHJvamVjdFBhZ2VVcmwsCisgICAgICAgICAgICBmdW5jdGlvbihwcmpJbmZvKXsKKyAgICAgICAgICAgICAgbGF5ZXJzSW5QcmpMaXN0LmNoaWxkcmVuKCkucmVtb3ZlKCk7CisgICAgICAgICAgICAgIHVwZGF0ZVByb2plY3RMYXllcnMocHJqSW5mby5sYXllcnMpOworICAgICAgICAgICAgICBsYXllcnNJblByakxpc3QucmVtb3ZlQ2xhc3MoJ211dGVkJyk7CisgICAgICAgICAgICAgIHJlbGVhc2VDaGFuZ2VkTm90aWZpY2F0aW9uKHJlbGVhc2UsIHByakluZm8ubGF5ZXJzLCBsYXllcnNUb1JtKTsKKyAgICAgICAgfSk7CisgICAgICAgIHVwZGF0ZVByb2plY3RSZWxlYXNlKHJlbGVhc2UpOworICAgICAgICBjYW5jZWxSZWxlYXNlQ2hhbmdlLmNsaWNrKCk7CisgICAgfSk7CisgIH0KKworICAvKiBDcmVhdGUgYSBub3RpZmljYXRpb24gdG8gc2hvdyB0aGUgY2hhbmdlcyB0byB0aGUgbGF5ZXIgY29uZmlndXJhdGlvbgorICAgKiBjYXVzZWQgYnkgY2hhbmdpbmcgYSByZWxlYXNlLgorICAgKi8KKworICBmdW5jdGlvbiByZWxlYXNlQ2hhbmdlZE5vdGlmaWNhdGlvbihyZWxlYXNlLCBsYXllcnMsIGxheWVyc1RvUm0peworCisgICAgdmFyIG1lc3NhZ2U7CisKKyAgICBpZiAobGF5ZXJzLmxlbmd0aCA9PT0gMCAmJiBsYXllcnNUb1JtLmxlbmd0aCA9PT0gMCl7CisgICAgICBtZXNzYWdlID0gJCgnPHNwYW4+PHNwYW4gY2xhc3M9ImxlYWQiPllvdSBoYXZlIGNoYW5nZWQgdGhlIHByb2plY3QgcmVsZWFzZSB0bzogPHN0cm9uZz48c3BhbiBpZD0ibm90aWZ5LXJlbGVhc2UtbmFtZSI+PC9zcGFuPjwvc3Ryb25nPi4nKTsKKyAgICAgIG1lc3NhZ2UuZmluZCgiI25vdGlmeS1yZWxlYXNlLW5hbWUiKS50ZXh0KHJlbGVhc2UuZGVzY3JpcHRpb24pOworICAgICAgbGlidG9hc3Rlci5zaG93Q2hhbmdlTm90aWZpY2F0aW9uKG1lc3NhZ2UpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIENyZWF0ZSB0aGUgd2hpdGVzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBsYXllcnMgcmVtb3ZlZCAqLworICAgIHZhciBsYXllcnNEZWxMaXN0ID0gIiI7CisKKyAgICBsYXllcnNUb1JtLm1hcChmdW5jdGlvbihsYXllciwgaSl7CisgICAgICBsYXllcnNEZWxMaXN0ICs9IGxheWVyLm5hbWU7CisgICAgICBpZiAobGF5ZXJzVG9SbVtpKzFdICE9PSB1bmRlZmluZWQpCisgICAgICAgIGxheWVyc0RlbExpc3QgKz0gJywgJzsKKyAgICB9KTsKKworICAgIG1lc3NhZ2UgPSAkKCc8c3Bhbj48c3BhbiBjbGFzcz0ibGVhZCI+WW91IGhhdmUgY2hhbmdlZCB0aGUgcHJvamVjdCByZWxlYXNlIHRvOiA8c3Ryb25nPjxzcGFuIGlkPSJub3RpZnktcmVsZWFzZS1uYW1lIj48L3NwYW4+PC9zdHJvbmc+LiBUaGlzIGhhcyBjYXVzZWQgdGhlIGZvbGxvd2luZyBjaGFuZ2VzIGluIHlvdXIgcHJvamVjdCBsYXllcnM6PC9zcGFuPjx1bCBpZD0ibm90aWZ5LWxheWVycy1jaGFuZ2VkLWxpc3QiPjwvdWw+PC9zcGFuPicpOworCisgICAgdmFyIGNoYW5nZWRMaXN0ID0gbWVzc2FnZS5maW5kKCIjbm90aWZ5LWxheWVycy1jaGFuZ2VkLWxpc3QiKTsKKworICAgIG1lc3NhZ2UuZmluZCgiI25vdGlmeS1yZWxlYXNlLW5hbWUiKS50ZXh0KHJlbGVhc2UuZGVzY3JpcHRpb24pOworCisgICAgLyogTWFudWFsbHkgY29uc3RydWN0IHRoZSBsaXN0IGl0ZW0gZm9yIGNoYW5nZWQgbGF5ZXJzICovCisgICAgdmFyIGxpID0gJzxsaT48c3Ryb25nPicrbGF5ZXJzLmxlbmd0aCsnPC9zdHJvbmc+IGxheWVycyBjaGFuZ2VkIHRvIHRoZSA8c3Ryb25nPicrcmVsZWFzZS5uYW1lKyc8L3N0cm9uZz4gcmVsZWFzZTogJzsKKyAgICBmb3IgKHZhciBpIGluIGxheWVycyl7CisgICAgICBsaSArPSAnPGEgaHJlZj0nK2xheWVyc1tpXS5sYXllcmRldGFpbHVybCsnPicrbGF5ZXJzW2ldLm5hbWUrJzwvYT4nOworICAgICAgaWYgKGkgIT09IDApCisgICAgICAgIGxpICs9ICcsICc7CisgICAgfQorCisgICAgY2hhbmdlZExpc3QuYXBwZW5kKCQobGkpKTsKKworICAgIC8qIExheWVycyByZW1vdmVkICovCisgICAgaWYgKGxheWVyc1RvUm0gJiYgbGF5ZXJzVG9SbS5sZW5ndGggPiAwKXsKKyAgICAgIGlmIChsYXllcnNUb1JtLmxlbmd0aCA9PSAxKQorICAgICAgICBsaSA9ICc8bGk+PHN0cm9uZz4xPC9zdHJvbmc+IGxheWVyIGRlbGV0ZWQ6ICcrbGF5ZXJzVG9SbVswXS5uYW1lKyc8L2xpPic7CisgICAgICBlbHNlCisgICAgICAgIGxpID0gJzxsaT48c3Ryb25nPicrbGF5ZXJzVG9SbS5sZW5ndGgrJzwvc3Ryb25nPiBsYXllcnMgZGVsZXRlZDogJytsYXllcnNEZWxMaXN0Kyc8L2xpPic7CisKKyAgICAgIGNoYW5nZWRMaXN0LmFwcGVuZCgkKGxpKSk7CisgICAgfQorCisgICAgbGlidG9hc3Rlci5zaG93Q2hhbmdlTm90aWZpY2F0aW9uKG1lc3NhZ2UpOworICB9CisKKyAgLyogU2hvdyB0aGUgbW9kYWwgZGlhbG9nIHdoaWNoIGdpdmVzIHRoZSBvcHRpb24gdG8gcmVtb3ZlIGxheWVycyB3aGljaAorICAgKiBhcmVuJ3QgY29tcGF0aWJsZSB3aXRoIHRoZSBwcm9wb3NlZCByZWxlYXNlCisgICAqLworICBmdW5jdGlvbiBzaG93UmVsZWFzZUxheWVyQ2hhbmdlTW9kYWwocmVsZWFzZSwgbGF5ZXJzKXsKKyAgICB2YXIgbGF5ZXJzVG9SbUxpc3QgPSByZWxlYXNlTW9kYWwuZmluZCgiI2xheWVycy10by1yZW1vdmUtbGlzdCIpOworICAgIGxheWVyc1RvUm1MaXN0LnRleHQoIiIpOworCisgICAgcmVsZWFzZU1vZGFsLmZpbmQoIi5wcm9wb3NlZC1yZWxlYXNlLWNoYW5nZS1uYW1lIikudGV4dChyZWxlYXNlLmRlc2NyaXB0aW9uKTsKKyAgICByZWxlYXNlTW9kYWwuZGF0YSgibGF5ZXJzIiwgbGF5ZXJzKTsKKyAgICByZWxlYXNlTW9kYWwuZGF0YSgicmVsZWFzZSIsIHJlbGVhc2UpOworCisgICAgZm9yICh2YXIgaSBpbiBsYXllcnMpeworICAgICAgbGF5ZXJzVG9SbUxpc3QuYXBwZW5kKCQoIjxsaT48L2xpPiIpLnRleHQobGF5ZXJzW2ldLm5hbWUpKTsKKyAgICB9CisgICAgcmVsZWFzZU1vZGFsLm1vZGFsKCdzaG93Jyk7CisgIH0KKworICAkKCIjY2hhbmdlLXJlbGVhc2UtYnRuIikuY2xpY2soZnVuY3Rpb24oZSl7CisgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworCisgICAgdmFyIG5ld1JlbGVhc2UgPSByZWxlYXNlRm9ybS5maW5kKCJvcHRpb246c2VsZWN0ZWQiKS5kYXRhKCdyZWxlYXNlJyk7CisKKyAgICAkLmdldEpTT04oY3R4LnRlc3RSZWxlYXNlQ2hhbmdlVXJsLAorICAgICAgeyBuZXdfcmVsZWFzZV9pZDogbmV3UmVsZWFzZS5pZCB9LAorICAgICAgZnVuY3Rpb24obGF5ZXJzKSB7CisgICAgICAgIGlmIChsYXllcnMucm93cy5sZW5ndGggPT09IDApeworICAgICAgICAgIC8qIE5vIGxheWVycyB0byBjaGFuZ2UgZm9yIHRoaXMgcmVsZWFzZSAqLworICAgICAgICAgIGNoYW5nZVByb2plY3RSZWxlYXNlKG5ld1JlbGVhc2UsIFtdKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzaG93UmVsZWFzZUxheWVyQ2hhbmdlTW9kYWwobmV3UmVsZWFzZSwgbGF5ZXJzLnJvd3MpOworICAgICAgICB9CisgICAgfSk7CisgIH0pOworCisgIC8qIFJlbGVhc2UgY2hhbmdlIG1vZGFsIGFjY2VwdCAqLworICAkKCIjY2hhbmdlLXJlbGVhc2UtYW5kLXJtLWxheWVycyIpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgdmFyIGxheWVycyA9IHJlbGVhc2VNb2RhbC5kYXRhKCJsYXllcnMiKTsKKyAgICB2YXIgcmVsZWFzZSA9ICByZWxlYXNlTW9kYWwuZGF0YSgicmVsZWFzZSIpOworCisgICAgY2hhbmdlUHJvamVjdFJlbGVhc2UocmVsZWFzZSwgbGF5ZXJzKTsKKyAgfSk7CisKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy90YWJsZS5qcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy90YWJsZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTgwMzRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3RhYmxlLmpzCkBAIC0wLDAgKzEsNTU0IEBACisndXNlIHN0cmljdCc7CisKK2Z1bmN0aW9uIHRhYmxlSW5pdChjdHgpeworCisgIGlmIChjdHgudXJsLmxlbmd0aCA9PT0gMCkgeworICAgIHRocm93ICJObyB1cmwgc3VwcGxpZWQgZm9yIHJldHJlaXZpbmcgZGF0YSI7CisgIH0KKworICB2YXIgdGFibGVDaHJvbWVEb25lID0gZmFsc2U7CisgIHZhciB0YWJsZVRvdGFsID0gMDsKKworICB2YXIgdGFibGVQYXJhbXMgPSB7CisgICAgbGltaXQgOiAyNSwKKyAgICBwYWdlIDogMSwKKyAgICBvcmRlcmJ5IDogbnVsbCwKKyAgICBmaWx0ZXIgOiBudWxsLAorICAgIHNlYXJjaCA6IG51bGwsCisgIH07CisKKyAgdmFyIGRlZmF1bHRIaWRkZW5Db2xzID0gW107CisKKyAgdmFyIHRhYmxlID0gICQoIiMiICsgY3R4LnRhYmxlTmFtZSk7CisKKyAgLyogaWYgd2UncmUgbG9hZGluZyBjbGVhbiBmcm9tIGEgdXJsIHVzZSBpdCdzIHBhcmFtZXRlcnMgYXMgdGhlIGRlZmF1bHQgKi8KKyAgdmFyIHVybFBhcmFtcyA9IGxpYnRvYXN0ZXIucGFyc2VVcmxQYXJhbXMoKTsKKworICAvKiBNZXJnZSB0aGUgdGFibGVQYXJhbXMgYW5kIHVybFBhcmFtcyBvYmplY3QgcHJvcGVydGllcyAgKi8KKyAgdGFibGVQYXJhbXMgPSAkLmV4dGVuZCh0YWJsZVBhcmFtcywgdXJsUGFyYW1zKTsKKworICAvKiBOb3cgZml4IHRoZSB0eXBlcyB0aGF0IC5leHRlbmQgY2hhbmdlZCBmb3IgdXMgKi8KKyAgdGFibGVQYXJhbXMubGltaXQgPSBOdW1iZXIodGFibGVQYXJhbXMubGltaXQpOworICB0YWJsZVBhcmFtcy5wYWdlID0gTnVtYmVyKHRhYmxlUGFyYW1zLnBhZ2UpOworCisgIGxvYWREYXRhKHRhYmxlUGFyYW1zKTsKKworICB3aW5kb3cub25wb3BzdGF0ZSA9IGZ1bmN0aW9uKGV2ZW50KXsKKyAgICBpZiAoZXZlbnQuc3RhdGUpeworICAgICAgdGFibGVQYXJhbXMgPSBldmVudC5zdGF0ZS50YWJsZVBhcmFtczsKKyAgICAgIC8qIFdlIHNraXAgbG9hZERhdGEgYW5kIGp1c3QgdXBkYXRlIHRoZSB0YWJsZSAqLworICAgICAgdXBkYXRlVGFibGUoZXZlbnQuc3RhdGUudGFibGVEYXRhKTsKKyAgICB9CisgIH07CisKKyAgZnVuY3Rpb24gbG9hZERhdGEodGFibGVQYXJhbXMpeworICAgICQuYWpheCh7CisgICAgICAgIHR5cGU6ICJHRVQiLAorICAgICAgICB1cmw6IGN0eC51cmwsCisgICAgICAgIGRhdGE6IHRhYmxlUGFyYW1zLAorICAgICAgICBoZWFkZXJzOiB7ICdYLUNTUkZUb2tlbicgOiAkLmNvb2tpZSgnY3NyZnRva2VuJyl9LAorICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbih0YWJsZURhdGEpIHsKKyAgICAgICAgICB1cGRhdGVUYWJsZSh0YWJsZURhdGEpOworICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSh7CisgICAgICAgICAgICAgIHRhYmxlRGF0YTogdGFibGVEYXRhLAorICAgICAgICAgICAgICB0YWJsZVBhcmFtczogdGFibGVQYXJhbXMKKyAgICAgICAgICB9LCBudWxsLCBsaWJ0b2FzdGVyLmR1bXBzVXJsUGFyYW1zKHRhYmxlUGFyYW1zKSk7CisgICAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIGZ1bmN0aW9uIHVwZGF0ZVRhYmxlKHRhYmxlRGF0YSkgeworICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5jaGlsZHJlbigidGJvZHkiKTsKKyAgICB2YXIgcGFnaW5hdGlvbiA9ICQoJyNwYWdpbmF0aW9uLScrY3R4LnRhYmxlTmFtZSk7CisgICAgdmFyIHBhZ2luYXRpb25CdG5zID0gcGFnaW5hdGlvbi5jaGlsZHJlbigndWwnKTsKKyAgICB2YXIgdGFibGVDb250YWluZXIgPSAkKCIjdGFibGUtY29udGFpbmVyLSIrY3R4LnRhYmxlTmFtZSk7CisKKyAgICB0YWJsZUNvbnRhaW5lci5jc3MoInZpc2liaWxpdHkiLCAiaGlkZGVuIik7CisgICAgLyogVG8gYXZvaWQgcGFnZSByZS1sYXlvdXQgZmxpY2tlciB3aGVuIHBhZ2luZyBzZXQgZml4ZWQgaGVpZ2h0ICovCisgICAgdGFibGUuY3NzKCJwYWRkaW5nLWJvdHRvbSIsIHRhYmxlLmhlaWdodCgpKTsKKworICAgIC8qIFJlc2V0IHRhYmxlIGNvbXBvbmVudHMgKi8KKyAgICB0YWJsZUJvZHkuaHRtbCgiIik7CisgICAgcGFnaW5hdGlvbkJ0bnMuaHRtbCgiIik7CisKKyAgICBpZiAodGFibGVQYXJhbXMuc2VhcmNoKQorICAgICAgJCgnLnJlbW92ZS1zZWFyY2gtYnRuLScrY3R4LnRhYmxlTmFtZSkuc2hvdygpOworICAgIGVsc2UKKyAgICAgICQoJy5yZW1vdmUtc2VhcmNoLWJ0bi0nK2N0eC50YWJsZU5hbWUpLmhpZGUoKTsKKworICAgICQoJy50YWJsZS1jb3VudC0nICsgY3R4LnRhYmxlTmFtZSkudGV4dCh0YWJsZURhdGEudG90YWwpOworICAgIHRhYmxlVG90YWwgPSB0YWJsZURhdGEudG90YWw7CisKKyAgICBpZiAodGFibGVEYXRhLnRvdGFsID09PSAwKXsKKyAgICAgIHRhYmxlQ29udGFpbmVyLmhpZGUoKTsKKyAgICAgIC8qIElmIHdlIHdlcmUgc2VhcmNoaW5nIHNob3cgdGhlIG5ldyBzZWFyY2ggYmFyIGFuZCByZXR1cm4gKi8KKyAgICAgIGlmICh0YWJsZVBhcmFtcy5zZWFyY2gpeworICAgICAgICAkKCIjbmV3LXNlYXJjaC1pbnB1dC0iK2N0eC50YWJsZU5hbWUpLnZhbCh0YWJsZVBhcmFtcy5zZWFyY2gpOworICAgICAgICAkKCIjbm8tcmVzdWx0cy0iK2N0eC50YWJsZU5hbWUpLnNob3coKTsKKyAgICAgIH0KKyAgICAgIHRhYmxlLnRyaWdnZXIoInRhYmxlLWRvbmUiLCBbdGFibGVEYXRhLnRvdGFsLCB0YWJsZVBhcmFtc10pOworCisgICAgICByZXR1cm47CisKKyAgICAvKiBXZSBkb24ndCB3YW50IHRvIGNsdXR0ZXIgdGhlIHBsYWNlIHdpdGggdGhlIHRhYmxlIGNocm9tZSBpZiB0aGVyZQorICAgICAqIGFyZSBvbmx5IGEgZmV3IHJlc3VsdHMgKi8KKyAgICB9IGVsc2UgaWYgKHRhYmxlRGF0YS50b3RhbCA8PSAxMCAmJgorICAgICAgICAgICAgICAgIXRhYmxlUGFyYW1zLmZpbHRlciAmJgorICAgICAgICAgICAgICAgIXRhYmxlUGFyYW1zLnNlYXJjaCl7CisgICAgICAkKCIjdGFibGUtY2hyb21lLSIrY3R4LnRhYmxlTmFtZSkuaGlkZSgpOworICAgICAgcGFnaW5hdGlvbi5oaWRlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRhYmxlQ29udGFpbmVyLnNob3coKTsKKyAgICAgICQoIiNuby1yZXN1bHRzLSIrY3R4LnRhYmxlTmFtZSkuaGlkZSgpOworICAgIH0KKworICAgIHNldHVwVGFibGVDaHJvbWUodGFibGVEYXRhKTsKKworICAgIC8qIEFkZCB0YWJsZSBkYXRhIHJvd3MgKi8KKyAgICB2YXIgY29sdW1uX2luZGV4OworICAgIGZvciAodmFyIGkgaW4gdGFibGVEYXRhLnJvd3MpeworICAgICAgLyogb25seSBkaXNwbGF5IGlmIHRoZSBjb2x1bW4gaXMgZGlzcGxheS1hYmxlICovCisgICAgICB2YXIgcm93ID0gJCgiPHRyPjwvdHI+Iik7CisgICAgICBjb2x1bW5faW5kZXggPSAtMTsKKyAgICAgIGZvciAodmFyIGtleV9qIGluIHRhYmxlRGF0YS5yb3dzW2ldKXsKKworICAgICAgICAvKiBpZiB3ZSBoYXZlIGEgc3RhdGljOiB2ZXJzaW9uIG9mIGEga2V5LCBwcmVmZXIgdGhlIHN0YXRpYzogdmVyc2lvbiBmb3IgcmVuZGVyaW5nICovCisgICAgICAgIHZhciBvcmlnX2tleV9qID0ga2V5X2o7CisKKyAgICAgICAgaWYgKGtleV9qLmluZGV4T2YoInN0YXRpYzoiKSA9PT0gMCkgeworICAgICAgICAgIGlmIChrZXlfai5zdWJzdHIoInN0YXRpYzoiLmxlbmd0aCkgaW4gdGFibGVEYXRhLnJvd3NbaV0pIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKyAgICAgICAgICBvcmlnX2tleV9qID0ga2V5X2ouc3Vic3RyKCJzdGF0aWM6Ii5sZW5ndGgpCisgICAgICAgIH0gZWxzZSBpZiAoKCJzdGF0aWM6IiArIGtleV9qKSBpbiB0YWJsZURhdGEucm93c1tpXSkgeworICAgICAgICAgIGtleV9qID0gInN0YXRpYzoiICsga2V5X2o7CisgICAgICAgIH0KKworICAgICAgICAvKiB3ZSBza2lwIG92ZXIgdW4tZGlzcGxheWFibGUgY29sdW1uIGVudHJpZXMgKi8KKyAgICAgICAgY29sdW1uX2luZGV4ICs9IDE7CisgICAgICAgIGlmICghIHRhYmxlRGF0YS5jb2x1bW5zW2NvbHVtbl9pbmRleF0uZGlzcGxheWFibGUpIHsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB0ZCA9ICQoIjx0ZD48L3RkPiIpOworICAgICAgICB0ZC5wcm9wKCJjbGFzcyIsIG9yaWdfa2V5X2opOworICAgICAgICBpZiAodGFibGVEYXRhLnJvd3NbaV1ba2V5X2pdKXsKKyAgICAgICAgICB0ZC5odG1sKHRhYmxlRGF0YS5yb3dzW2ldW2tleV9qXSk7CisgICAgICAgIH0KKyAgICAgICAgcm93LmFwcGVuZCh0ZCk7CisgICAgICB9CisgICAgICB0YWJsZUJvZHkuYXBwZW5kKHJvdyk7CisKKyAgICAgIC8qIElmIHdlIGhhdmUgbGF5ZXJidG5zIHRoZW4gaW5pdGlhbGlzZSB0aGVtICovCisgICAgICBsYXllckJ0bnNJbml0KGN0eCk7CisKKyAgICAgIC8qIElmIHdlIGhhdmUgcG9wb3ZlcnMgaW5pdGlhbGlzZSB0aGVtIG5vdyAqLworICAgICAgJCgndGQgPiBhLmJ0bicpLnBvcG92ZXIoeworICAgICAgICBodG1sOnRydWUsCisgICAgICAgIHBsYWNlbWVudDonbGVmdCcsCisgICAgICAgIGNvbnRhaW5lcjonYm9keScsCisgICAgICAgIHRyaWdnZXI6J21hbnVhbCcKKyAgICAgIH0pLmNsaWNrKGZ1bmN0aW9uKGUpeworICAgICAgICAkKCd0ZCA+IGEuYnRuJykubm90KHRoaXMpLnBvcG92ZXIoJ2hpZGUnKTsKKyAgICAgICAgLyogaWRlYWxseSB3ZSB3b3VsZCB1c2UgJ3RvZ2dsZScgaGVyZQorICAgICAgICAgKiBidXQgaXQgc2VlbXMgYnVnZ3kgaW4gb3VyIEJvb3RzdHJhcCB2ZXJzaW9uCisgICAgICAgICAqLworICAgICAgICAkKHRoaXMpLnBvcG92ZXIoJ3Nob3cnKTsKKyAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgIH0pOworCisgICAgICAvKiBlbmFibGUgaGVscCBpbmZvcm1hdGlvbiB0b29sdGlwICovCisgICAgICAkKCIuZ2V0LWhlbHAiKS50b29sdGlwKHtjb250YWluZXI6J2JvZHknLCBodG1sOnRydWUsIGRlbGF5OntzaG93OjMwMH19KTsKKyAgICB9CisKKyAgICAvKiBTZXR1cCB0aGUgcGFnaW5hdGlvbiBjb250cm9scyAqLworCisgICAgdmFyIHN0YXJ0ID0gdGFibGVQYXJhbXMucGFnZSAtIDI7CisgICAgdmFyIGVuZCA9IHRhYmxlUGFyYW1zLnBhZ2UgKyAyOworICAgIHZhciBudW1QYWdlcyA9IE1hdGguY2VpbCh0YWJsZURhdGEudG90YWwvdGFibGVQYXJhbXMubGltaXQpOworCisgICAgaWYgKG51bVBhZ2VzID4gIDEpeworICAgICAgaWYgKHRhYmxlUGFyYW1zLnBhZ2UgPCAzKQorICAgICAgICBlbmQgPSA1OworCisgICAgICBmb3IgKHZhciBwYWdlX2k9MTsgcGFnZV9pIDw9IG51bVBhZ2VzOyAgcGFnZV9pKyspeworICAgICAgICBpZiAocGFnZV9pID49IHN0YXJ0ICYmIHBhZ2VfaSA8PSBlbmQpeworICAgICAgICAgIHZhciBidG4gPSAkKCc8bGk+PGEgaHJlZj0iIyIgY2xhc3M9InBhZ2UiPicrcGFnZV9pKyc8L2E+PC9saT4nKTsKKworICAgICAgICAgIGlmIChwYWdlX2kgPT09IHRhYmxlUGFyYW1zLnBhZ2UpeworICAgICAgICAgICAgYnRuLmFkZENsYXNzKCJhY3RpdmUiKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBBZGQgdGhlIGNsaWNrIGhhbmRsZXIgKi8KKyAgICAgICAgICBidG4uY2xpY2socGFnZUJ1dHRvbkNsaWNrZWQpOworICAgICAgICAgIHBhZ2luYXRpb25CdG5zLmFwcGVuZChidG4pOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgbG9hZENvbHVtbnNQcmVmZXJlbmNlKCk7CisKKyAgICB0YWJsZS5jc3MoInBhZGRpbmctYm90dG9tIiwgMCk7CisgICAgdGFibGVDb250YWluZXIuY3NzKCJ2aXNpYmlsaXR5IiwgInZpc2libGUiKTsKKworICAgIHRhYmxlLnRyaWdnZXIoInRhYmxlLWRvbmUiLCBbdGFibGVEYXRhLnRvdGFsLCB0YWJsZVBhcmFtc10pOworICB9CisKKyAgZnVuY3Rpb24gc2V0dXBUYWJsZUNocm9tZSh0YWJsZURhdGEpeworICAgIGlmICh0YWJsZUNocm9tZURvbmUgPT09IHRydWUpCisgICAgICByZXR1cm47CisKKyAgICB2YXIgdGFibGVIZWFkUm93ID0gdGFibGUuZmluZCgidGhlYWQiKTsKKyAgICB2YXIgZWRpdENvbE1lbnUgPSAkKCIjdGFibGUtY2hyb21lLSIrY3R4LnRhYmxlTmFtZSkuZmluZCgiLmVkaXRjb2wiKTsKKworICAgIHRhYmxlSGVhZFJvdy5odG1sKCIiKTsKKyAgICBlZGl0Q29sTWVudS5odG1sKCIiKTsKKworICAgIGlmICghdGFibGVQYXJhbXMub3JkZXJieSAmJiB0YWJsZURhdGEuZGVmYXVsdF9vcmRlcmJ5KXsKKyAgICAgIHRhYmxlUGFyYW1zLm9yZGVyYnkgPSB0YWJsZURhdGEuZGVmYXVsdF9vcmRlcmJ5OworICAgIH0KKworICAgIC8qIEFkZCB0YWJsZSBoZWFkZXIgYW5kIGNvbHVtbiB0b2dnbGUgbWVudSAqLworICAgIGZvciAodmFyIGkgaW4gdGFibGVEYXRhLmNvbHVtbnMpeworICAgICAgdmFyIGNvbCA9IHRhYmxlRGF0YS5jb2x1bW5zW2ldOworICAgICAgaWYgKGNvbC5kaXNwbGF5YWJsZSA9PT0gZmFsc2UpIHsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICB2YXIgaGVhZGVyID0gJCgiPHRoPjwvdGg+Iik7CisgICAgICBoZWFkZXIucHJvcCgiY2xhc3MiLCBjb2wuZmllbGRfbmFtZSk7CisKKyAgICAgIC8qIFNldHVwIHRoZSBoZWxwIHRleHQgKi8KKyAgICAgIGlmIChjb2wuaGVscF90ZXh0Lmxlbmd0aCA+IDApIHsKKyAgICAgICAgdmFyIGhlbHBfdGV4dCA9ICQoJzxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiPiA8L2k+Jyk7CisgICAgICAgIGhlbHBfdGV4dC50b29sdGlwKHt0aXRsZTogY29sLmhlbHBfdGV4dH0pOworICAgICAgICBoZWFkZXIuYXBwZW5kKGhlbHBfdGV4dCk7CisgICAgICB9CisKKyAgICAgIC8qIFNldHVwIHRoZSBvcmRlcmFibGUgdGl0bGUgKi8KKyAgICAgIGlmIChjb2wub3JkZXJhYmxlKSB7CisgICAgICAgIHZhciB0aXRsZSA9ICQoJzxhIGhyZWY9XCIjXCIgPjwvYT4nKTsKKworICAgICAgICB0aXRsZS5kYXRhKCdmaWVsZC1uYW1lJywgY29sLmZpZWxkX25hbWUpOworICAgICAgICB0aXRsZS50ZXh0KGNvbC50aXRsZSk7CisgICAgICAgIHRpdGxlLmNsaWNrKHNvcnRDb2x1bW5DbGlja2VkKTsKKworICAgICAgICBoZWFkZXIuYXBwZW5kKHRpdGxlKTsKKworICAgICAgICBoZWFkZXIuYXBwZW5kKCcgPGkgY2xhc3M9Imljb24tY2FyZXQtZG93biIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+PC9pPicpOworICAgICAgICBoZWFkZXIuYXBwZW5kKCcgPGkgY2xhc3M9Imljb24tY2FyZXQtdXAiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjwvaT4nKTsKKworICAgICAgICAvKiBJZiB3ZSdyZSBjdXJyZW50bHkgb3JkZXJlZCBzZXR1cCB0aGUgdmlzdWFsIGluZGljYXRvciAqLworICAgICAgICBpZiAoY29sLmZpZWxkX25hbWUgPT09IHRhYmxlUGFyYW1zLm9yZGVyYnkgfHwKKyAgICAgICAgICAnLScgKyBjb2wuZmllbGRfbmFtZSA9PT0gdGFibGVQYXJhbXMub3JkZXJieSl7CisgICAgICAgICAgaGVhZGVyLmNoaWxkcmVuKCJhIikuYWRkQ2xhc3MoInNvcnRlZCIpOworCisgICAgICAgICAgaWYgKHRhYmxlUGFyYW1zLm9yZGVyYnkuaW5kZXhPZigiLSIpID09PSAtMSl7CisgICAgICAgICAgICBoZWFkZXIuZmluZCgnLmljb24tY2FyZXQtZG93bicpLnNob3coKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaGVhZGVyLmZpbmQoJy5pY29uLWNhcmV0LXVwJykuc2hvdygpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICB9IGVsc2UgeworICAgICAgICAvKiBOb3Qgb3JkZXJhYmxlICovCisgICAgICAgIGhlYWRlci5hZGRDbGFzcygibXV0ZWQiKTsKKyAgICAgICAgaGVhZGVyLmNzcygiZm9udC13ZWlnaHQiLCAibm9ybWFsIik7CisgICAgICAgIGhlYWRlci5hcHBlbmQoY29sLnRpdGxlKycgJyk7CisgICAgICB9CisKKyAgICAgIC8qIFNldHVwIHRoZSBmaWx0ZXIgYnV0dG9uICovCisgICAgICBpZiAoY29sLmZpbHRlcl9uYW1lKXsKKyAgICAgICAgdmFyIGZpbHRlckJ0biA9ICQoJzxhIGhyZWY9IiMiIHJvbGU9ImJ1dHRvbiIgY2xhc3M9InB1bGwtcmlnaHQgYnRuIGJ0bi1taW5pIiBkYXRhLXRvZ2dsZT0ibW9kYWwiPjxpIGNsYXNzPSJpY29uLWZpbHRlciBmaWx0ZXJlZCI+PC9pPjwvYT4nKTsKKworICAgICAgICBmaWx0ZXJCdG4uZGF0YSgnZmlsdGVyLW5hbWUnLCBjb2wuZmlsdGVyX25hbWUpOworICAgICAgICBmaWx0ZXJCdG4ucHJvcCgnaWQnLCBjb2wuZmlsdGVyX25hbWUpOworICAgICAgICBmaWx0ZXJCdG4uY2xpY2soZmlsdGVyT3BlbkNsaWNrZWQpOworCisgICAgICAgIC8qIElmIHdlJ3JlIGN1cnJlbnRseSBiZWluZyBmaWx0ZXJlZCBzZXR1cCB0aGUgdmlzaWFsIGluZGljYXRvciAqLworICAgICAgICBpZiAodGFibGVQYXJhbXMuZmlsdGVyICYmCisgICAgICAgICAgICB0YWJsZVBhcmFtcy5maWx0ZXIubWF0Y2goJ14nK2NvbC5maWx0ZXJfbmFtZSkpIHsKKworICAgICAgICAgICAgZmlsdGVyQnRuQWN0aXZlKGZpbHRlckJ0biwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgaGVhZGVyLmFwcGVuZChmaWx0ZXJCdG4pOworICAgICAgfQorCisgICAgICAvKiBEb25lIG1ha2luZyB0aGUgaGVhZGVyIG5vdyBhZGQgaXQgKi8KKyAgICAgIHRhYmxlSGVhZFJvdy5hcHBlbmQoaGVhZGVyKTsKKworICAgICAgLyogTm93IHNldHVwIHRoZSBjaGVja2JveCBzdGF0ZSBhbmQgY2xpY2sgaGFuZGxlciAqLworICAgICAgdmFyIHRvZ2dsZXIgPSAkKCc8bGk+PGxhYmVsIGNsYXNzPSJjaGVja2JveCI+Jytjb2wudGl0bGUrJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNoZWNrYm94LScrIGNvbC5maWVsZF9uYW1lICsnIiBjbGFzcz0iY29sLXRvZ2dsZSIgdmFsdWU9IicrY29sLmZpZWxkX25hbWUrJyIgLz48L2xhYmVsPjwvbGk+Jyk7CisKKyAgICAgIHZhciB0b2dnbGVySW5wdXQgPSB0b2dnbGVyLmZpbmQoImlucHV0Iik7CisKKyAgICAgIHRvZ2dsZXJJbnB1dC5hdHRyKCJjaGVja2VkIiwiY2hlY2tlZCIpOworCisgICAgICAvKiBJZiB3ZSBjYW4gaGlkZSB0aGUgY29sdW1uIGVuYWJsZSB0aGUgY2hlY2tib3ggYWN0aW9uICovCisgICAgICBpZiAoY29sLmhpZGVhYmxlKXsKKyAgICAgICAgdG9nZ2xlcklucHV0LmNsaWNrKGNvbFRvZ2dsZUNsaWNrZWQpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdG9nZ2xlci5maW5kKCJsYWJlbCIpLmFkZENsYXNzKCJtdXRlZCIpOworICAgICAgICB0b2dnbGVySW5wdXQuYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKKyAgICAgIH0KKworICAgICAgaWYgKGNvbC5oaWRkZW4pIHsKKyAgICAgICAgZGVmYXVsdEhpZGRlbkNvbHMucHVzaChjb2wuZmllbGRfbmFtZSk7CisgICAgICB9CisKKyAgICAgIGVkaXRDb2xNZW51LmFwcGVuZCh0b2dnbGVyKTsKKyAgICB9IC8qIEVuZCBmb3IgZWFjaCBjb2x1bW4gKi8KKworICAgIHRhYmxlQ2hyb21lRG9uZSA9IHRydWU7CisgIH0KKworICAvKiBUb2dnbGVzIHRoZSBhY3RpdmUgc3RhdGUgb2YgdGhlIGZpbHRlciBidXR0b24gKi8KKyAgZnVuY3Rpb24gZmlsdGVyQnRuQWN0aXZlKGZpbHRlckJ0biwgYWN0aXZlKXsKKyAgICBpZiAoYWN0aXZlKSB7CisgICAgICBmaWx0ZXJCdG4uYWRkQ2xhc3MoImJ0bi1wcmltYXJ5Iik7CisKKyAgICAgIGZpbHRlckJ0bi50b29sdGlwKHsKKyAgICAgICAgICBodG1sOiB0cnVlLAorICAgICAgICAgIHRpdGxlOiAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zbWFsbCBidG4tcHJpbWFyeSIgb25DbGljaz1cJyQoIiNjbGVhci1maWx0ZXItYnRuLScrIGN0eC50YWJsZU5hbWUgKyciKS5jbGljaygpO1wnPkNsZWFyIGZpbHRlcjwvYnV0dG9uPicsCisgICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tJywKKyAgICAgICAgICBkZWxheTogeworICAgICAgICAgICAgaGlkZTogMTUwMCwKKyAgICAgICAgICAgIHNob3c6IDQwMCwKKyAgICAgICAgICB9LAorICAgICAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGZpbHRlckJ0bi5yZW1vdmVDbGFzcygiYnRuLXByaW1hcnkiKTsKKyAgICAgIGZpbHRlckJ0bi50b29sdGlwKCdkZXN0cm95Jyk7CisgICAgfQorICB9CisKKyAgLyogRGlzcGxheSBvciBoaWRlIHRhYmxlIGNvbHVtbnMgYmFzZWQgb24gdGhlIGNvb2tpZSBwcmVmZXJlbmNlIG9yIGRlZmF1bHRzICovCisgIGZ1bmN0aW9uIGxvYWRDb2x1bW5zUHJlZmVyZW5jZSgpeworICAgIHZhciBjb29raWVfZGF0YSA9ICQuY29va2llKCJjb2xzIik7CisKKyAgICBpZiAoY29va2llX2RhdGEpIHsKKyAgICAgIHZhciBjb2xzX2hpZGRlbiA9IEpTT04ucGFyc2UoJC5jb29raWUoImNvbHMiKSk7CisKKyAgICAgIC8qIEZvciBlYWNoIG9mIHRoZSBjb2x1bW5zIGNoZWNrIGlmIHdlIHNob3VsZCBoaWRlIHRoZW0KKyAgICAgICAqIGFsc28gdXBkYXRlIHRoZSBjaGVja2VkIHN0YXR1cyBpbiB0aGUgRWRpdCBjb2x1bW5zIG1lbnUKKyAgICAgICAqLworICAgICAgJCgiIyIrY3R4LnRhYmxlTmFtZSsiIHRoIikuZWFjaChmdW5jdGlvbigpeworICAgICAgICBmb3IgKHZhciBpIGluIGNvbHNfaGlkZGVuKXsKKyAgICAgICAgICBpZiAoJCh0aGlzKS5oYXNDbGFzcyhjb2xzX2hpZGRlbltpXSkpeworICAgICAgICAgICAgJCgiLiIrY29sc19oaWRkZW5baV0pLmhpZGUoKTsKKyAgICAgICAgICAgICQoIiNjaGVja2JveC0iK2NvbHNfaGlkZGVuW2ldKS5yZW1vdmVBdHRyKCJjaGVja2VkIik7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8qIERpc2FibGUgdGhlc2UgY29sdW1ucyBieSBkZWZhdWx0IHdoZW4gd2UgaGF2ZSBubyBjb2x1bW5zCisgICAgICAgICAqIHVzZXIgc2V0dGluZy4KKyAgICAgICAgICovCisgICAgICAgIGZvciAodmFyIGkgaW4gZGVmYXVsdEhpZGRlbkNvbHMpIHsKKyAgICAgICAgICAkKCIuIitkZWZhdWx0SGlkZGVuQ29sc1tpXSkuaGlkZSgpOworICAgICAgICAgICQoIiNjaGVja2JveC0iK2RlZmF1bHRIaWRkZW5Db2xzW2ldKS5yZW1vdmVBdHRyKCJjaGVja2VkIik7CisgICAgICAgIH0KKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBzb3J0Q29sdW1uQ2xpY2tlZCgpeworCisgICAgLyogV2Ugb25seSBoYXZlIG9uZSBzb3J0IGF0IGEgdGltZSBzbyByZW1vdmUgYW55IGV4aXN0aW5nIHNvcnQgaW5kaWNhdG9ycyAqLworICAgICQoIiMiK2N0eC50YWJsZU5hbWUrIiB0aCAuaWNvbi1jYXJldC1kb3duIikuaGlkZSgpOworICAgICQoIiMiK2N0eC50YWJsZU5hbWUrIiB0aCAuaWNvbi1jYXJldC11cCIpLmhpZGUoKTsKKyAgICAkKCIjIitjdHgudGFibGVOYW1lKyIgdGggYSIpLnJlbW92ZUNsYXNzKCJzb3J0ZWQiKTsKKworICAgIHZhciBmaWVsZE5hbWUgPSAkKHRoaXMpLmRhdGEoJ2ZpZWxkLW5hbWUnKTsKKworICAgIC8qIGlmIHdlJ3JlIGFscmVhZHkgc29ydGVkIHNvcnQgdGhlIG90aGVyIHdheSAqLworICAgIGlmICh0YWJsZVBhcmFtcy5vcmRlcmJ5ID09PSBmaWVsZE5hbWUgJiYKKyAgICAgICAgdGFibGVQYXJhbXMub3JkZXJieS5pbmRleE9mKCctJykgPT09IC0xKSB7CisgICAgICB0YWJsZVBhcmFtcy5vcmRlcmJ5ID0gJy0nICsgJCh0aGlzKS5kYXRhKCdmaWVsZC1uYW1lJyk7CisgICAgICAkKHRoaXMpLnBhcmVudCgpLmNoaWxkcmVuKCcuaWNvbi1jYXJldC11cCcpLnNob3coKTsKKyAgICB9IGVsc2UgeworICAgICAgdGFibGVQYXJhbXMub3JkZXJieSA9ICQodGhpcykuZGF0YSgnZmllbGQtbmFtZScpOworICAgICAgJCh0aGlzKS5wYXJlbnQoKS5jaGlsZHJlbignLmljb24tY2FyZXQtZG93bicpLnNob3coKTsKKyAgICB9CisKKyAgICAkKHRoaXMpLmFkZENsYXNzKCJzb3J0ZWQiKTsKKworICAgIGxvYWREYXRhKHRhYmxlUGFyYW1zKTsKKyAgfQorCisgIGZ1bmN0aW9uIHBhZ2VCdXR0b25DbGlja2VkKGUpIHsKKyAgICB0YWJsZVBhcmFtcy5wYWdlID0gTnVtYmVyKCQodGhpcykudGV4dCgpKTsKKyAgICBsb2FkRGF0YSh0YWJsZVBhcmFtcyk7CisgICAgLyogU3RvcCBwYWdlIGp1bXBzIHdoZW4gY2xpY2tpbmcgb24gIyBsaW5rcyAqLworICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgfQorCisgIC8qIFRvZ2dsZSBhIHRhYmxlIGNvbHVtbiAqLworICBmdW5jdGlvbiBjb2xUb2dnbGVDbGlja2VkICgpeworICAgIHZhciBjb2wgPSAkKHRoaXMpLnZhbCgpOworICAgIHZhciBkaXNhYmxlZF9jb2xzID0gW107CisKKyAgICBpZiAoJCh0aGlzKS5wcm9wKCJjaGVja2VkIikpIHsKKyAgICAgICQoIi4iK2NvbCkuc2hvdygpOworICAgIH0gIGVsc2UgeworICAgICAgJCgiLiIrY29sKS5oaWRlKCk7CisgICAgICAvKiBJZiB3ZSdyZSBvcmRlcmVkIGJ5IHRoZSBjb2x1bW4gd2UncmUgaGlkaW5nIHJlbW92ZSB0aGUgb3JkZXIgYnkgKi8KKyAgICAgIGlmIChjb2wgPT09IHRhYmxlUGFyYW1zLm9yZGVyYnkgfHwKKyAgICAgICAgICAnLScgKyBjb2wgPT09IHRhYmxlUGFyYW1zLm9yZGVyYnkpeworICAgICAgICB0YWJsZVBhcmFtcy5vcmRlcmJ5ID0gbnVsbDsKKyAgICAgICAgbG9hZERhdGEodGFibGVQYXJhbXMpOworICAgICAgfQorICAgIH0KKworICAgIC8qIFVwZGF0ZSB0aGUgY29va2llIHdpdGggdGhlIHVuY2hlY2tlZCBjb2x1bW5zICovCisgICAgJCgiLmNvbC10b2dnbGUiKS5ub3QoIjpjaGVja2VkIikubWFwKGZ1bmN0aW9uKCl7CisgICAgICBkaXNhYmxlZF9jb2xzLnB1c2goJCh0aGlzKS52YWwoKSk7CisgICAgfSk7CisKKyAgICAkLmNvb2tpZSgiY29scyIsIEpTT04uc3RyaW5naWZ5KGRpc2FibGVkX2NvbHMpKTsKKyAgfQorCisgIGZ1bmN0aW9uIGZpbHRlck9wZW5DbGlja2VkKCl7CisgICAgdmFyIGZpbHRlck5hbWUgPSAkKHRoaXMpLmRhdGEoJ2ZpbHRlci1uYW1lJyk7CisKKyAgICAvKiBXZSBuZWVkIHRvIHBhc3MgaW4gdGhlIGN1cnJlbiBzZWFyY2ggc28gdGhhdCB0aGUgZmlsdGVyIGNvdW50cyB0YWtlCisgICAgICogaW50byBhY2NvdW50IHRoZSBjdXJyZW50IHNlYXJjaCBmaWx0ZXIKKyAgICAgKi8KKyAgICB2YXIgcGFyYW1zID0geworICAgICAgJ25hbWUnIDogZmlsdGVyTmFtZSwKKyAgICAgICdzZWFyY2gnOiB0YWJsZVBhcmFtcy5zZWFyY2gsCisgICAgICAnY21kJzogJ2ZpbHRlcmluZm8nLAorICAgIH07CisKKyAgICAkLmFqYXgoeworICAgICAgICB0eXBlOiAiR0VUIiwKKyAgICAgICAgdXJsOiBjdHgudXJsLAorICAgICAgICBkYXRhOiBwYXJhbXMsCisgICAgICAgIGhlYWRlcnM6IHsgJ1gtQ1NSRlRva2VuJyA6ICQuY29va2llKCdjc3JmdG9rZW4nKX0sCisgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChmaWx0ZXJEYXRhKSB7CisgICAgICAgICAgdmFyIGZpbHRlckFjdGlvblJhZGlvcyA9ICQoJyNmaWx0ZXItYWN0aW9ucy0nK2N0eC50YWJsZU5hbWUpOworCisgICAgICAgICAgJCgnI2ZpbHRlci1tb2RhbC10aXRsZS0nK2N0eC50YWJsZU5hbWUpLnRleHQoZmlsdGVyRGF0YS50aXRsZSk7CisKKyAgICAgICAgICBmaWx0ZXJBY3Rpb25SYWRpb3MudGV4dCgiIik7CisKKyAgICAgICAgICBmb3IgKHZhciBpIGluIGZpbHRlckRhdGEuZmlsdGVyX2FjdGlvbnMpeworICAgICAgICAgICAgdmFyIGZpbHRlckFjdGlvbiA9IGZpbHRlckRhdGEuZmlsdGVyX2FjdGlvbnNbaV07CisKKyAgICAgICAgICAgIHZhciBhY3Rpb24gPSAkKCc8bGFiZWwgY2xhc3M9InJhZGlvIj48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9ImZpbHRlciIgdmFsdWU9IiI+PHNwYW4gY2xhc3M9ImZpbHRlci10aXRsZSI+PC9zcGFuPjwvbGFiZWw+Jyk7CisgICAgICAgICAgICB2YXIgYWN0aW9uVGl0bGUgPSBmaWx0ZXJBY3Rpb24udGl0bGUgKyAnICgnICsgZmlsdGVyQWN0aW9uLmNvdW50ICsgJyknOworCisgICAgICAgICAgICB2YXIgcmFkaW9JbnB1dCA9IGFjdGlvbi5jaGlsZHJlbigiaW5wdXQiKTsKKworICAgICAgICAgICAgaWYgKE51bWJlcihmaWx0ZXJBY3Rpb24uY291bnQpID09IDApeworICAgICAgICAgICAgICByYWRpb0lucHV0LmF0dHIoImRpc2FibGVkIiwgImRpc2FibGVkIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGFjdGlvbi5jaGlsZHJlbigiLmZpbHRlci10aXRsZSIpLnRleHQoYWN0aW9uVGl0bGUpOworCisgICAgICAgICAgICByYWRpb0lucHV0LnZhbChmaWx0ZXJOYW1lICsgJzonICsgZmlsdGVyQWN0aW9uLm5hbWUpOworCisgICAgICAgICAgICAvKiBTZXR1cCB0aGUgY3VycmVudCBzZWxlY3RlZCBmaWx0ZXIsIGRlZmF1bHQgdG8gJ2FsbCcgaWYKKyAgICAgICAgICAgICAqIG5vIGN1cnJlbnQgZmlsdGVyIHNlbGVjdGVkLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoKHRhYmxlUGFyYW1zLmZpbHRlciAmJgorICAgICAgICAgICAgICAgIHRhYmxlUGFyYW1zLmZpbHRlciA9PT0gcmFkaW9JbnB1dC52YWwoKSkgfHwKKyAgICAgICAgICAgICAgICBmaWx0ZXJBY3Rpb24ubmFtZSA9PSAnYWxsJykgeworICAgICAgICAgICAgICAgIHJhZGlvSW5wdXQuYXR0cigiY2hlY2tlZCIsICJjaGVja2VkIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZpbHRlckFjdGlvblJhZGlvcy5hcHBlbmQoYWN0aW9uKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAkKCcjZmlsdGVyLW1vZGFsLScrY3R4LnRhYmxlTmFtZSkubW9kYWwoJ3Nob3cnKTsKKyAgICAgICAgfQorICAgIH0pOworICB9CisKKworICAkKCIuZ2V0LWhlbHAiKS50b29sdGlwKHtjb250YWluZXI6J2JvZHknLCBodG1sOnRydWUsIGRlbGF5OntzaG93OjMwMH19KTsKKworICAvKiBLZWVwIHRoZSBFZGl0IGNvbHVtbnMgbWVudSBvcGVuIGFmdGVyIGNsaWNrIGJ5IGVhdGluZyB0aGUgZXZlbnQgKi8KKyAgJCgnLmRyb3Bkb3duLW1lbnUnKS5jbGljayhmdW5jdGlvbihlKSB7CisgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAgfSk7CisKKyAgJCgiLnBhZ2VzaXplLSIrY3R4LnRhYmxlTmFtZSkudmFsKHRhYmxlUGFyYW1zLmxpbWl0KTsKKworICAvKiBwYWdlIHNpemUgc2VsZWN0b3IgICovCisgICQoIi5wYWdlc2l6ZS0iK2N0eC50YWJsZU5hbWUpLmNoYW5nZShmdW5jdGlvbihlKXsKKyAgICB0YWJsZVBhcmFtcy5saW1pdCA9IE51bWJlcih0aGlzLnZhbHVlKTsKKyAgICBpZiAoKHRhYmxlUGFyYW1zLnBhZ2UgKiB0YWJsZVBhcmFtcy5saW1pdCkgPiB0YWJsZVRvdGFsKQorICAgICAgdGFibGVQYXJhbXMucGFnZSA9IDE7CisKKyAgICBsb2FkRGF0YSh0YWJsZVBhcmFtcyk7CisgICAgLyogc3luYyB0aGUgb3RoZXIgc2VsZWN0b3JzIG9uIHRoZSBwYWdlICovCisgICAgJCgiLnBhZ2VzaXplLSIrY3R4LnRhYmxlTmFtZSkudmFsKHRoaXMudmFsdWUpOworICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgfSk7CisKKyAgJCgiI3NlYXJjaC1zdWJtaXQtIitjdHgudGFibGVOYW1lKS5jbGljayhmdW5jdGlvbihlKXsKKyAgICB2YXIgc2VhcmNoVGVybSA9ICQoIiNzZWFyY2gtaW5wdXQtIitjdHgudGFibGVOYW1lKS52YWwoKTsKKworICAgIHRhYmxlUGFyYW1zLnBhZ2UgPSAxOworICAgIHRhYmxlUGFyYW1zLnNlYXJjaCA9IHNlYXJjaFRlcm07CisKKyAgICAvKiBJZiBhIGZpbHRlciB3YXMgYWN0aXZlIHdlIHJlbW92ZSBpdCAqLworICAgIGlmICh0YWJsZVBhcmFtcy5maWx0ZXIpIHsKKyAgICAgIHZhciBmaWx0ZXJCdG4gPSAkKCIjIiArIHRhYmxlUGFyYW1zLmZpbHRlci5zcGxpdCgiOiIpWzBdKTsKKyAgICAgIGZpbHRlckJ0bkFjdGl2ZShmaWx0ZXJCdG4sIGZhbHNlKTsKKyAgICAgIHRhYmxlUGFyYW1zLmZpbHRlciA9IG51bGw7CisgICAgfQorCisgICAgbG9hZERhdGEodGFibGVQYXJhbXMpOworCisgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICB9KTsKKworICAkKCcucmVtb3ZlLXNlYXJjaC1idG4tJytjdHgudGFibGVOYW1lKS5jbGljayhmdW5jdGlvbihlKXsKKyAgICBlLnByZXZlbnREZWZhdWx0KCk7CisKKyAgICB0YWJsZVBhcmFtcy5wYWdlID0gMTsKKyAgICB0YWJsZVBhcmFtcy5zZWFyY2ggPSBudWxsOworICAgIGxvYWREYXRhKHRhYmxlUGFyYW1zKTsKKworICAgICQoIiNzZWFyY2gtaW5wdXQtIitjdHgudGFibGVOYW1lKS52YWwoIiIpOworICAgICQodGhpcykuaGlkZSgpOworICB9KTsKKworICAkKCIjc2VhcmNoLWlucHV0LSIrY3R4LnRhYmxlTmFtZSkua2V5dXAoZnVuY3Rpb24oZSl7CisgICAgaWYgKGUud2hpY2ggPT09IDEzKQorICAgICAgJCgnI3NlYXJjaC1zdWJtaXQtJytjdHgudGFibGVOYW1lKS5jbGljaygpOworICB9KTsKKworICAvKiBTdG9wIHBhZ2UganVtcHMgd2hlbiBjbGlja2luZyBvbiAjIGxpbmtzICovCisgICQoJ2FbaHJlZj0iIyJdJykuY2xpY2soZnVuY3Rpb24oZSl7CisgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICB9KTsKKworICAkKCIjY2xlYXItZmlsdGVyLWJ0bi0iK2N0eC50YWJsZU5hbWUpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgdmFyIGZpbHRlckJ0biA9ICQoIiMiICsgdGFibGVQYXJhbXMuZmlsdGVyLnNwbGl0KCI6IilbMF0pOworICAgIGZpbHRlckJ0bkFjdGl2ZShmaWx0ZXJCdG4sIGZhbHNlKTsKKworICAgIHRhYmxlUGFyYW1zLmZpbHRlciA9IG51bGw7CisgICAgbG9hZERhdGEodGFibGVQYXJhbXMpOworICB9KTsKKworICAkKCIjZmlsdGVyLW1vZGFsLWZvcm0tIitjdHgudGFibGVOYW1lKS5zdWJtaXQoZnVuY3Rpb24oZSl7CisgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworCisgICAgdGFibGVQYXJhbXMuZmlsdGVyID0gJCh0aGlzKS5maW5kKCJpbnB1dFt0eXBlPSdyYWRpbyddOmNoZWNrZWQiKS52YWwoKTsKKworICAgIHZhciBmaWx0ZXJCdG4gPSAkKCIjIiArIHRhYmxlUGFyYW1zLmZpbHRlci5zcGxpdCgiOiIpWzBdKTsKKworICAgIC8qIEFsbCA9PT0gcmVtb3ZlIGZpbHRlciAqLworICAgIGlmICh0YWJsZVBhcmFtcy5maWx0ZXIubWF0Y2goIjphbGwkIikpIHsKKyAgICAgIHRhYmxlUGFyYW1zLmZpbHRlciA9IG51bGw7CisgICAgICBmaWx0ZXJCdG5BY3RpdmUoZmlsdGVyQnRuLCBmYWxzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGZpbHRlckJ0bkFjdGl2ZShmaWx0ZXJCdG4sIHRydWUpOworICAgIH0KKworICAgIGxvYWREYXRhKHRhYmxlUGFyYW1zKTsKKworICAgICQodGhpcykucGFyZW50KCkubW9kYWwoJ2hpZGUnKTsKKyAgfSk7Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvdGVzdHMvdGVzdC5qcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy90ZXN0cy90ZXN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MTAxMTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvdGVzdHMvdGVzdC5qcwpAQCAtMCwwICsxLDE3NSBAQAorInVzZSBzdHJpY3QiOworLyogVW5pdCB0ZXN0cyBmb3IgVG9hc3RlcidzIEpTICovCisKKy8qIGxpYnRvYXN0ZXIgdGVzdHMgKi8KKworUVVuaXQudGVzdCgiTGF5ZXIgYWxlcnQgbm90aWZpY2F0aW9uIiwgZnVuY3Rpb24oYXNzZXJ0KSB7CisgIHZhciBsYXllciA9IHsKKyAgICAibGF5ZXJkZXRhaWx1cmwiOiIvdG9hc3Rlcmd1aS9wcm9qZWN0LzEvbGF5ZXIvMjIiLAorICAgICJ2Y3NfdXJsIjoiZ2l0Oi8vZXhhbXBsZS5jb20vZXhhbXBsZS5naXQiLAorICAgICJkZXRhaWwiOiJbIGdpdDovL2V4YW1wbGUuY29tL2V4YW1wbGUuZ2l0IHwgbWFzdGVyIF0iLAorICAgICJ2Y3NfcmVmZXJlbmNlIjoibWFzdGVyIiwKKyAgICAiaWQiOiAyMiwKKyAgICAibmFtZSI6Im1ldGEtZXhhbXBsZSIKKyAgfTsKKworICB2YXIgY29ycmVjdFJlc3BvbnNlID0gIllvdSBoYXZlIGFkZGVkIDxzdHJvbmc+Mzwvc3Ryb25nPiBsYXllcnMgdG8geW91ciBwcm9qZWN0OiA8YSBpZD1cImxheWVyLWFmZmVjdGVkLW5hbWVcIiBocmVmPVwiL3RvYXN0ZXJndWkvcHJvamVjdC8xL2xheWVyLzIyXCI+bWV0YS1leGFtcGxlPC9hPiBhbmQgaXRzIGRlcGVuZGVuY2llcyA8YSBocmVmPVwiL3RvYXN0ZXJndWkvcHJvamVjdC8xL2xheWVyLzlcIiBkYXRhLW9yaWdpbmFsLXRpdGxlPVwiXCIgdGl0bGU9XCJcIj5tZXRhLWV4YW1wbGUtdHdvPC9hPiwgPGEgaHJlZj1cIi90b2FzdGVyZ3VpL3Byb2plY3QvMS9sYXllci85XCIgZGF0YS1vcmlnaW5hbC10aXRsZT1cIlwiIHRpdGxlPVwiXCI+bWV0YS1leGFtcGxlLXRocmVlPC9hPiI7CisKKyAgdmFyIGxheWVyRGVwc0xpc3QgPSBbCisgICAgeworICAgICJsYXllcmRldGFpbHVybCI6Ii90b2FzdGVyZ3VpL3Byb2plY3QvMS9sYXllci85IiwKKyAgICAidmNzX3VybCI6ImdpdDovL2V4YW1wbGUuY29tL2V4YW1wbGUuZ2l0IiwKKyAgICAiZGV0YWlsIjoiWyBnaXQ6Ly9leGFtcGxlLmNvbS9leGFtcGxlLmdpdCB8IG1hc3RlciBdIiwKKyAgICAidmNzX3JlZmVyZW5jZSI6Im1hc3RlciIsCisgICAgImlkIjogOSwKKyAgICAibmFtZSI6Im1ldGEtZXhhbXBsZS10d28iCisgICAgfSwKKyAgICB7CisgICAgImxheWVyZGV0YWlsdXJsIjoiL3RvYXN0ZXJndWkvcHJvamVjdC8xL2xheWVyLzkiLAorICAgICJ2Y3NfdXJsIjoiZ2l0Oi8vZXhhbXBsZS5jb20vZXhhbXBsZS5naXQiLAorICAgICJkZXRhaWwiOiJbIGdpdDovL2V4YW1wbGUuY29tL2V4YW1wbGUuZ2l0IHwgbWFzdGVyIF0iLAorICAgICJ2Y3NfcmVmZXJlbmNlIjoibWFzdGVyIiwKKyAgICAiaWQiOiAxMCwKKyAgICAibmFtZSI6Im1ldGEtZXhhbXBsZS10aHJlZSIKKyAgICB9LAorICBdOworCisgIHZhciBtc2cgPSBsaWJ0b2FzdGVyLm1ha2VMYXllckFkZFJtQWxlcnRNc2cobGF5ZXIsIGxheWVyRGVwc0xpc3QsIHRydWUpOworICB2YXIgdGVzdCA9ICQoIjxkaXY+PC9kaXY+Iik7CisKKyAgdGVzdC5odG1sKG1zZyk7CisKKyAgYXNzZXJ0LmVxdWFsKHRlc3QuY2hpbGRyZW4oInN0cm9uZyIpLnRleHQoKSwgIjMiKTsKKyAgYXNzZXJ0LmVxdWFsKHRlc3QuY2hpbGRyZW4oImEiKS5sZW5ndGgsIDMpOworfSk7CisKK1FVbml0LnRlc3QoIlByb2plY3QgaW5mbyIsIGZ1bmN0aW9uKGFzc2VydCl7CisgIHZhciBkb25lID0gYXNzZXJ0LmFzeW5jKCk7CisgIGxpYnRvYXN0ZXIuZ2V0UHJvamVjdEluZm8obGlidG9hc3Rlci5jdHgucHJvamVjdFBhZ2VVcmwsIGZ1bmN0aW9uKHByakluZm8peworICAgIGFzc2VydC5vayhwcmpJbmZvLm1hY2hpbmUubmFtZSk7CisgICAgYXNzZXJ0Lm9rKHByakluZm8ucmVsZWFzZXMubGVuZ3RoID4gMCk7CisgICAgYXNzZXJ0Lm9rKHByakluZm8ubGF5ZXJzLmxlbmd0aCA+IDApOworICAgIGFzc2VydC5vayhwcmpJbmZvLmZyZXF0YXJnZXRzKTsKKyAgICBhc3NlcnQub2socHJqSW5mby5yZWxlYXNlKTsKKyAgICBkb25lKCk7CisgIH0pOworfSk7CisKK1FVbml0LnRlc3QoIlNob3cgbm90aWZpY2F0aW9uIiwgZnVuY3Rpb24oYXNzZXJ0KXsKKyAgdmFyIG1zZyA9ICJUZXN0aW5nIjsKKyAgdmFyIGVsZW1lbnQgPSAkKCIjY2hhbmdlLW5vdGlmaWNhdGlvbi1tc2ciKTsKKworICBsaWJ0b2FzdGVyLnNob3dDaGFuZ2VOb3RpZmljYXRpb24obXNnKTsKKworICBhc3NlcnQuZXF1YWwoZWxlbWVudC50ZXh0KCksIG1zZyk7CisgIGFzc2VydC5vayhlbGVtZW50LmlzKCI6dmlzaWJsZSIpKTsKKworICAkKCIjY2hhbmdlLW5vdGlmaWNhdGlvbiIpLmhpZGUoKTsKK30pOworCit2YXIgbGF5ZXIgPSB7CisgICJpZCI6IDkxLAorICAibmFtZSI6ICAibWV0YS1jcnlzdGFsZm9yZXN0IiwKKyAgImxheWVyZGV0YWlsdXJsIjogIi90b2FzdGVyZ3VpL3Byb2plY3QvNC9sYXllci85MSIKK307CisKK1FVbml0LnRlc3QoIkFkZCBsYXllciIsIGZ1bmN0aW9uKGFzc2VydCl7CisgIHZhciBkb25lID0gYXNzZXJ0LmFzeW5jKCk7CisKKyAgLyogV2FpdCBmb3IgdGhlIG1vZGFsIHRvIGJlIGFkZGVkIHRvIHRoZSBkb20gKi8KKyAgdmFyIGNoZWNrTW9kYWwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpeworICAgIGlmICgkKCIjZGVwZW5kZW5jaWVzLW1vZGFsIikubGVuZ3RoID4gMCkgeworICAgICAgJCgiI2RlcGVuZGVuY2llcy1tb2RhbCAuYnRuLXByaW1hcnkiKS5jbGljaygpOworICAgICAgY2xlYXJJbnRlcnZhbChjaGVja01vZGFsKTsKKyAgICB9CisgIH0sIDIwMCk7CisKKyAgbGlidG9hc3Rlci5hZGRSbUxheWVyKGxheWVyLCB0cnVlLCBmdW5jdGlvbihkZXBzKXsKKyAgICBhc3NlcnQuZXF1YWwoZGVwcy5sZW5ndGgsIDEpOworICAgIGRvbmUoKTsKKyAgfSk7CisKK30pOworCitRVW5pdC50ZXN0KCJSbSBsYXllciIsIGZ1bmN0aW9uKGFzc2VydCl7CisgIHZhciBkb25lID0gYXNzZXJ0LmFzeW5jKCk7CisKKyAgbGlidG9hc3Rlci5hZGRSbUxheWVyKGxheWVyLCBmYWxzZSwgZnVuY3Rpb24oZGVwcyl7CisgICAgYXNzZXJ0LmVxdWFsKGRlcHMubGVuZ3RoLCAwKTsKKyAgICBkb25lKCk7CisgIH0pOworCit9KTsKKworUVVuaXQudGVzdCgiUGFyc2UgdXJsIHBhcmFtcyIsIGZ1bmN0aW9uKGFzc2VydCl7CisgIHZhciBwYXJhbXMgPSBsaWJ0b2FzdGVyLnBhcnNlVXJsUGFyYW1zKCk7CisgIGFzc2VydC5vayhwYXJhbXMpOworfSk7CisKK1FVbml0LnRlc3QoIkR1bXAgdXJsIHBhcmFtcyIsIGZ1bmN0aW9uKGFzc2VydCl7CisgIHZhciBwYXJhbXMgPSBsaWJ0b2FzdGVyLmR1bXBzVXJsUGFyYW1zKCk7CisgIGFzc2VydC5vayhwYXJhbXMpOworfSk7CisKK1FVbml0LnRlc3QoIk1ha2UgdHlwZWFoZWFkcyIsIGZ1bmN0aW9uKGFzc2VydCl7CisgIHZhciBsYXllcnNUID0gJCgiI2xheWVycyIpOworICB2YXIgbWFjaGluZXNUID0gJCgiI21hY2hpbmVzIik7CisgIHZhciBwcm9qZWN0c1QgPSAkKCIjcHJvamVjdHMiKTsKKyAgdmFyIHJlY2lwZXNUID0gJCgiI3JlY2lwZXMiKTsKKworICBsaWJ0b2FzdGVyLm1ha2VUeXBlYWhlYWQobGF5ZXJzVCwKKyAgICBsaWJ0b2FzdGVyLmN0eC5sYXllcnNUeXBlQWhlYWRVcmwsIHt9LCBmdW5jdGlvbigpe30pOworCisgIGxpYnRvYXN0ZXIubWFrZVR5cGVhaGVhZChtYWNoaW5lc1QsCisgICAgbGlidG9hc3Rlci5jdHgubWFjaGluZXNUeXBlQWhlYWRVcmwsIHt9LCBmdW5jdGlvbigpe30pOworCisgIGxpYnRvYXN0ZXIubWFrZVR5cGVhaGVhZChwcm9qZWN0c1QsCisgICAgbGlidG9hc3Rlci5jdHgucHJvamVjdHNUeXBlQWhlYWRVcmwsIHt9LCBmdW5jdGlvbigpe30pOworCisgIGxpYnRvYXN0ZXIubWFrZVR5cGVhaGVhZChyZWNpcGVzVCwKKyAgICBsaWJ0b2FzdGVyLmN0eC5yZWNpcGVzVHlwZUFoZWFkVXJsLCB7fSwgZnVuY3Rpb24oKXt9KTsKKworICBhc3NlcnQub2socmVjaXBlc1QuZGF0YSgndHlwZWFoZWFkJykpOworICBhc3NlcnQub2sobGF5ZXJzVC5kYXRhKCd0eXBlYWhlYWQnKSk7CisgIGFzc2VydC5vayhwcm9qZWN0c1QuZGF0YSgndHlwZWFoZWFkJykpOworICBhc3NlcnQub2socmVjaXBlc1QuZGF0YSgndHlwZWFoZWFkJykpOworfSk7CisKKworCisvKiBQYWdlIGluaXQgZnVuY3Rpb25zICovCisKK1FVbml0LnRlc3QoIkltcG9ydCBsYXllciBwYWdlIGluaXQiLCBmdW5jdGlvbihhc3NlcnQpeworICBhc3NlcnQudGhyb3dzKGltcG9ydExheWVyUGFnZUluaXQoKSk7Cit9KTsKKworUVVuaXQudGVzdCgiUHJvamVjdCBwYWdlIGluaXQiLCBmdW5jdGlvbihhc3NlcnQpeworICBhc3NlcnQudGhyb3dzKHByb2plY3RQYWdlSW5pdCgpKTsKK30pOworCitRVW5pdC50ZXN0KCJMYXllciBkZXRhaWxzIHBhZ2UgaW5pdCIsIGZ1bmN0aW9uKGFzc2VydCl7CisgIGFzc2VydC50aHJvd3MobGF5ZXJEZXRhaWxzUGFnZUluaXQoKSk7Cit9KTsKKworUVVuaXQudGVzdCgiTGF5ZXIgYnRucyBpbml0IiwgZnVuY3Rpb24oYXNzZXJ0KXsKKyAgYXNzZXJ0LnRocm93cyhsYXllckJ0bnNJbml0KHsgcHJvamVjdExheWVycyA6IFtdIH0pKTsKK30pOworCitRVW5pdC50ZXN0KCJUYWJsZSBpbml0IiwgZnVuY3Rpb24oYXNzZXJ0KXsKKyAgYXNzZXJ0LnRocm93cyh0YWJsZUluaXQoeyB1cmwgOiB0YWJsZVVybCB9KSk7Cit9KTsKKworJChkb2N1bWVudCkuYWpheEVycm9yKGZ1bmN0aW9uKGV2ZW50LCBqcXhociwgc2V0dGluZ3MsIGVyck1zZyl7CisgIGlmIChlcnJNc2cgPT09ICdhYm9ydCcpCisgICAgcmV0dXJuOworCisgIFFVbml0LnRlc3QoIkFqYXggZXJyb3IiLCBmdW5jdGlvbihhc3NlcnQpeworICAgIGFzc2VydC5ub3RPayhqcXhoci5yZXNwb25zZVRleHQpOworICB9KTsKK30pOworCisKKworCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3VpLWJvb3RzdHJhcC10cGxzLTAuMTEuMC5qcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy91aS1ib290c3RyYXAtdHBscy0wLjExLjAuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE2YTg2MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy91aS1ib290c3RyYXAtdHBscy0wLjExLjAuanMKQEAgLTAsMCArMSwxMCBAQAorLyoKKyAqIGFuZ3VsYXItdWktYm9vdHN0cmFwCisgKiBodHRwOi8vYW5ndWxhci11aS5naXRodWIuaW8vYm9vdHN0cmFwLworCisgKiBWZXJzaW9uOiAwLjExLjAgLSAyMDE0LTA1LTAxCisgKiBMaWNlbnNlOiBNSVQKKyAqLworYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcCIsWyJ1aS5ib290c3RyYXAudHBscyIsInVpLmJvb3RzdHJhcC50cmFuc2l0aW9uIiwidWkuYm9vdHN0cmFwLmNvbGxhcHNlIiwidWkuYm9vdHN0cmFwLmFjY29yZGlvbiIsInVpLmJvb3RzdHJhcC5hbGVydCIsInVpLmJvb3RzdHJhcC5iaW5kSHRtbCIsInVpLmJvb3RzdHJhcC5idXR0b25zIiwidWkuYm9vdHN0cmFwLmNhcm91c2VsIiwidWkuYm9vdHN0cmFwLmRhdGVwYXJzZXIiLCJ1aS5ib290c3RyYXAucG9zaXRpb24iLCJ1aS5ib290c3RyYXAuZGF0ZXBpY2tlciIsInVpLmJvb3RzdHJhcC5kcm9wZG93biIsInVpLmJvb3RzdHJhcC5tb2RhbCIsInVpLmJvb3RzdHJhcC5wYWdpbmF0aW9uIiwidWkuYm9vdHN0cmFwLnRvb2x0aXAiLCJ1aS5ib290c3RyYXAucG9wb3ZlciIsInVpLmJvb3RzdHJhcC5wcm9ncmVzc2JhciIsInVpLmJvb3RzdHJhcC5yYXRpbmciLCJ1aS5ib290c3RyYXAudGFicyIsInVpLmJvb3RzdHJhcC50aW1lcGlja2VyIiwidWkuYm9vdHN0cmFwLnR5cGVhaGVhZCJdKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnRwbHMiLFsidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi1ncm91cC5odG1sIiwidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi5odG1sIiwidGVtcGxhdGUvYWxlcnQvYWxlcnQuaHRtbCIsInRlbXBsYXRlL2Nhcm91c2VsL2Nhcm91c2VsLmh0bWwiLCJ0ZW1wbGF0ZS9jYXJvdXNlbC9zbGlkZS5odG1sIiwidGVtcGxhdGUvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmh0bWwiLCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL2RheS5odG1sIiwidGVtcGxhdGUvZGF0ZXBpY2tlci9tb250aC5odG1sIiwidGVtcGxhdGUvZGF0ZXBpY2tlci9wb3B1cC5odG1sIiwidGVtcGxhdGUvZGF0ZXBpY2tlci95ZWFyLmh0bWwiLCJ0ZW1wbGF0ZS9tb2RhbC9iYWNrZHJvcC5odG1sIiwidGVtcGxhdGUvbW9kYWwvd2luZG93Lmh0bWwiLCJ0ZW1wbGF0ZS9wYWdpbmF0aW9uL3BhZ2VyLmh0bWwiLCJ0ZW1wbGF0ZS9wYWdpbmF0aW9uL3BhZ2luYXRpb24uaHRtbCIsInRlbXBsYXRlL3Rvb2x0aXAvdG9vbHRpcC1odG1sLXVuc2FmZS1wb3B1cC5odG1sIiwidGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLXBvcHVwLmh0bWwiLCJ0ZW1wbGF0ZS9wb3BvdmVyL3BvcG92ZXIuaHRtbCIsInRlbXBsYXRlL3Byb2dyZXNzYmFyL2Jhci5odG1sIiwidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3MuaHRtbCIsInRlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzYmFyLmh0bWwiLCJ0ZW1wbGF0ZS9yYXRpbmcvcmF0aW5nLmh0bWwiLCJ0ZW1wbGF0ZS90YWJzL3RhYi5odG1sIiwidGVtcGxhdGUvdGFicy90YWJzZXQuaHRtbCIsInRlbXBsYXRlL3RpbWVwaWNrZXIvdGltZXBpY2tlci5odG1sIiwidGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1tYXRjaC5odG1sIiwidGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1wb3B1cC5odG1sIl0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAudHJhbnNpdGlvbiIsW10pLmZhY3RvcnkoIiR0cmFuc2l0aW9uIixbIiRxIiwiJHRpbWVvdXQiLCIkcm9vdFNjb3BlIixmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXtmb3IodmFyIGIgaW4gYSlpZih2b2lkIDAhPT1mLnN0eWxlW2JdKXJldHVybiBhW2JdfXZhciBlPWZ1bmN0aW9uKGQsZixnKXtnPWd8fHt9O3ZhciBoPWEuZGVmZXIoKSxpPWVbZy5hbmltYXRpb24/ImFuaW1hdGlvbkVuZEV2ZW50TmFtZSI6InRyYW5zaXRpb25FbmRFdmVudE5hbWUiXSxqPWZ1bmN0aW9uKCl7Yy4kYXBwbHkoZnVuY3Rpb24oKXtkLnVuYmluZChpLGopLGgucmVzb2x2ZShkKX0pfTtyZXR1cm4gaSYmZC5iaW5kKGksaiksYihmdW5jdGlvbigpe2FuZ3VsYXIuaXNTdHJpbmcoZik/ZC5hZGRDbGFzcyhmKTphbmd1bGFyLmlzRnVuY3Rpb24oZik/ZihkKTphbmd1bGFyLmlzT2JqZWN0KGYpJiZkLmNzcyhmKSxpfHxoLnJlc29sdmUoZCl9KSxoLnByb21pc2UuY2FuY2VsPWZ1bmN0aW9uKCl7aSYmZC51bmJpbmQoaSxqKSxoLnJlamVjdCgiVHJhbnNpdGlvbiBjYW5jZWxsZWQiKX0saC5wcm9taXNlfSxmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyYW5zIiksZz17V2Via2l0VHJhbnNpdGlvbjoid2Via2l0VHJhbnNpdGlvbkVuZCIsTW96VHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCIsT1RyYW5zaXRpb246Im9UcmFuc2l0aW9uRW5kIix0cmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIn0saD17V2Via2l0VHJhbnNpdGlvbjoid2Via2l0QW5pbWF0aW9uRW5kIixNb3pUcmFuc2l0aW9uOiJhbmltYXRpb25lbmQiLE9UcmFuc2l0aW9uOiJvQW5pbWF0aW9uRW5kIix0cmFuc2l0aW9uOiJhbmltYXRpb25lbmQifTtyZXR1cm4gZS50cmFuc2l0aW9uRW5kRXZlbnROYW1lPWQoZyksZS5hbmltYXRpb25FbmRFdmVudE5hbWU9ZChoKSxlfV0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAuY29sbGFwc2UiLFsidWkuYm9vdHN0cmFwLnRyYW5zaXRpb24iXSkuZGlyZWN0aXZlKCJjb2xsYXBzZSIsWyIkdHJhbnNpdGlvbiIsZnVuY3Rpb24oYSl7cmV0dXJue2xpbms6ZnVuY3Rpb24oYixjLGQpe2Z1bmN0aW9uIGUoYil7ZnVuY3Rpb24gZCgpe2o9PT1lJiYoaj12b2lkIDApfXZhciBlPWEoYyxiKTtyZXR1cm4gaiYmai5jYW5jZWwoKSxqPWUsZS50aGVuKGQsZCksZX1mdW5jdGlvbiBmKCl7az8oaz0hMSxnKCkpOihjLnJlbW92ZUNsYXNzKCJjb2xsYXBzZSIpLmFkZENsYXNzKCJjb2xsYXBzaW5nIiksZSh7aGVpZ2h0OmNbMF0uc2Nyb2xsSGVpZ2h0KyJweCJ9KS50aGVuKGcpKX1mdW5jdGlvbiBnKCl7Yy5yZW1vdmVDbGFzcygiY29sbGFwc2luZyIpLGMuYWRkQ2xhc3MoImNvbGxhcHNlIGluIiksYy5jc3Moe2hlaWdodDoiYXV0byJ9KX1mdW5jdGlvbiBoKCl7aWYoaylrPSExLGkoKSxjLmNzcyh7aGVpZ2h0OjB9KTtlbHNle2MuY3NzKHtoZWlnaHQ6Y1swXS5zY3JvbGxIZWlnaHQrInB4In0pO3tjWzBdLm9mZnNldFdpZHRofWMucmVtb3ZlQ2xhc3MoImNvbGxhcHNlIGluIikuYWRkQ2xhc3MoImNvbGxhcHNpbmciKSxlKHtoZWlnaHQ6MH0pLnRoZW4oaSl9fWZ1bmN0aW9uIGkoKXtjLnJlbW92ZUNsYXNzKCJjb2xsYXBzaW5nIiksYy5hZGRDbGFzcygiY29sbGFwc2UiKX12YXIgaixrPSEwO2IuJHdhdGNoKGQuY29sbGFwc2UsZnVuY3Rpb24oYSl7YT9oKCk6ZigpfSl9fX1dKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLmFjY29yZGlvbiIsWyJ1aS5ib290c3RyYXAuY29sbGFwc2UiXSkuY29uc3RhbnQoImFjY29yZGlvbkNvbmZpZyIse2Nsb3NlT3RoZXJzOiEwfSkuY29udHJvbGxlcigiQWNjb3JkaW9uQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLCJhY2NvcmRpb25Db25maWciLGZ1bmN0aW9uKGEsYixjKXt0aGlzLmdyb3Vwcz1bXSx0aGlzLmNsb3NlT3RoZXJzPWZ1bmN0aW9uKGQpe3ZhciBlPWFuZ3VsYXIuaXNEZWZpbmVkKGIuY2xvc2VPdGhlcnMpP2EuJGV2YWwoYi5jbG9zZU90aGVycyk6Yy5jbG9zZU90aGVycztlJiZhbmd1bGFyLmZvckVhY2godGhpcy5ncm91cHMsZnVuY3Rpb24oYSl7YSE9PWQmJihhLmlzT3Blbj0hMSl9KX0sdGhpcy5hZGRHcm91cD1mdW5jdGlvbihhKXt2YXIgYj10aGlzO3RoaXMuZ3JvdXBzLnB1c2goYSksYS4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2IucmVtb3ZlR3JvdXAoYSl9KX0sdGhpcy5yZW1vdmVHcm91cD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmdyb3Vwcy5pbmRleE9mKGEpOy0xIT09YiYmdGhpcy5ncm91cHMuc3BsaWNlKGIsMSl9fV0pLmRpcmVjdGl2ZSgiYWNjb3JkaW9uIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLGNvbnRyb2xsZXI6IkFjY29yZGlvbkNvbnRyb2xsZXIiLHRyYW5zY2x1ZGU6ITAscmVwbGFjZTohMSx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi5odG1sIn19KS5kaXJlY3RpdmUoImFjY29yZGlvbkdyb3VwIixmdW5jdGlvbigpe3JldHVybntyZXF1aXJlOiJeYWNjb3JkaW9uIixyZXN0cmljdDoiRUEiLHRyYW5zY2x1ZGU6ITAscmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi1ncm91cC5odG1sIixzY29wZTp7aGVhZGluZzoiQCIsaXNPcGVuOiI9PyIsaXNEaXNhYmxlZDoiPT8ifSxjb250cm9sbGVyOmZ1bmN0aW9uKCl7dGhpcy5zZXRIZWFkaW5nPWZ1bmN0aW9uKGEpe3RoaXMuaGVhZGluZz1hfX0sbGluazpmdW5jdGlvbihhLGIsYyxkKXtkLmFkZEdyb3VwKGEpLGEuJHdhdGNoKCJpc09wZW4iLGZ1bmN0aW9uKGIpe2ImJmQuY2xvc2VPdGhlcnMoYSl9KSxhLnRvZ2dsZU9wZW49ZnVuY3Rpb24oKXthLmlzRGlzYWJsZWR8fChhLmlzT3Blbj0hYS5pc09wZW4pfX19fSkuZGlyZWN0aXZlKCJhY2NvcmRpb25IZWFkaW5nIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHRyYW5zY2x1ZGU6ITAsdGVtcGxhdGU6IiIscmVwbGFjZTohMCxyZXF1aXJlOiJeYWNjb3JkaW9uR3JvdXAiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCxlKXtkLnNldEhlYWRpbmcoZShhLGZ1bmN0aW9uKCl7fSkpfX19KS5kaXJlY3RpdmUoImFjY29yZGlvblRyYW5zY2x1ZGUiLGZ1bmN0aW9uKCl7cmV0dXJue3JlcXVpcmU6Il5hY2NvcmRpb25Hcm91cCIsbGluazpmdW5jdGlvbihhLGIsYyxkKXthLiR3YXRjaChmdW5jdGlvbigpe3JldHVybiBkW2MuYWNjb3JkaW9uVHJhbnNjbHVkZV19LGZ1bmN0aW9uKGEpe2EmJihiLmh0bWwoIiIpLGIuYXBwZW5kKGEpKX0pfX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLmFsZXJ0IixbXSkuY29udHJvbGxlcigiQWxlcnRDb250cm9sbGVyIixbIiRzY29wZSIsIiRhdHRycyIsZnVuY3Rpb24oYSxiKXthLmNsb3NlYWJsZT0iY2xvc2UiaW4gYn1dKS5kaXJlY3RpdmUoImFsZXJ0IixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLGNvbnRyb2xsZXI6IkFsZXJ0Q29udHJvbGxlciIsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2FsZXJ0L2FsZXJ0Lmh0bWwiLHRyYW5zY2x1ZGU6ITAscmVwbGFjZTohMCxzY29wZTp7dHlwZToiQCIsY2xvc2U6IiYifX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLmJpbmRIdG1sIixbXSkuZGlyZWN0aXZlKCJiaW5kSHRtbFVuc2FmZSIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oYSxiLGMpe2IuYWRkQ2xhc3MoIm5nLWJpbmRpbmciKS5kYXRhKCIkYmluZGluZyIsYy5iaW5kSHRtbFVuc2FmZSksYS4kd2F0Y2goYy5iaW5kSHRtbFVuc2FmZSxmdW5jdGlvbihhKXtiLmh0bWwoYXx8IiIpfSl9fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5idXR0b25zIixbXSkuY29uc3RhbnQoImJ1dHRvbkNvbmZpZyIse2FjdGl2ZUNsYXNzOiJhY3RpdmUiLHRvZ2dsZUV2ZW50OiJjbGljayJ9KS5jb250cm9sbGVyKCJCdXR0b25zQ29udHJvbGxlciIsWyJidXR0b25Db25maWciLGZ1bmN0aW9uKGEpe3RoaXMuYWN0aXZlQ2xhc3M9YS5hY3RpdmVDbGFzc3x8ImFjdGl2ZSIsdGhpcy50b2dnbGVFdmVudD1hLnRvZ2dsZUV2ZW50fHwiY2xpY2sifV0pLmRpcmVjdGl2ZSgiYnRuUmFkaW8iLGZ1bmN0aW9uKCl7cmV0dXJue3JlcXVpcmU6WyJidG5SYWRpbyIsIm5nTW9kZWwiXSxjb250cm9sbGVyOiJCdXR0b25zQ29udHJvbGxlciIsbGluazpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1kWzBdLGY9ZFsxXTtmLiRyZW5kZXI9ZnVuY3Rpb24oKXtiLnRvZ2dsZUNsYXNzKGUuYWN0aXZlQ2xhc3MsYW5ndWxhci5lcXVhbHMoZi4kbW9kZWxWYWx1ZSxhLiRldmFsKGMuYnRuUmFkaW8pKSl9LGIuYmluZChlLnRvZ2dsZUV2ZW50LGZ1bmN0aW9uKCl7dmFyIGQ9Yi5oYXNDbGFzcyhlLmFjdGl2ZUNsYXNzKTsoIWR8fGFuZ3VsYXIuaXNEZWZpbmVkKGMudW5jaGVja2FibGUpKSYmYS4kYXBwbHkoZnVuY3Rpb24oKXtmLiRzZXRWaWV3VmFsdWUoZD9udWxsOmEuJGV2YWwoYy5idG5SYWRpbykpLGYuJHJlbmRlcigpfSl9KX19fSkuZGlyZWN0aXZlKCJidG5DaGVja2JveCIsZnVuY3Rpb24oKXtyZXR1cm57cmVxdWlyZTpbImJ0bkNoZWNrYm94IiwibmdNb2RlbCJdLGNvbnRyb2xsZXI6IkJ1dHRvbnNDb250cm9sbGVyIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gZyhjLmJ0bkNoZWNrYm94VHJ1ZSwhMCl9ZnVuY3Rpb24gZigpe3JldHVybiBnKGMuYnRuQ2hlY2tib3hGYWxzZSwhMSl9ZnVuY3Rpb24gZyhiLGMpe3ZhciBkPWEuJGV2YWwoYik7cmV0dXJuIGFuZ3VsYXIuaXNEZWZpbmVkKGQpP2Q6Y312YXIgaD1kWzBdLGk9ZFsxXTtpLiRyZW5kZXI9ZnVuY3Rpb24oKXtiLnRvZ2dsZUNsYXNzKGguYWN0aXZlQ2xhc3MsYW5ndWxhci5lcXVhbHMoaS4kbW9kZWxWYWx1ZSxlKCkpKX0sYi5iaW5kKGgudG9nZ2xlRXZlbnQsZnVuY3Rpb24oKXthLiRhcHBseShmdW5jdGlvbigpe2kuJHNldFZpZXdWYWx1ZShiLmhhc0NsYXNzKGguYWN0aXZlQ2xhc3MpP2YoKTplKCkpLGkuJHJlbmRlcigpfSl9KX19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5jYXJvdXNlbCIsWyJ1aS5ib290c3RyYXAudHJhbnNpdGlvbiJdKS5jb250cm9sbGVyKCJDYXJvdXNlbENvbnRyb2xsZXIiLFsiJHNjb3BlIiwiJHRpbWVvdXQiLCIkdHJhbnNpdGlvbiIsZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoKXtlKCk7dmFyIGM9K2EuaW50ZXJ2YWw7IWlzTmFOKGMpJiZjPj0wJiYoZz1iKGYsYykpfWZ1bmN0aW9uIGUoKXtnJiYoYi5jYW5jZWwoZyksZz1udWxsKX1mdW5jdGlvbiBmKCl7aD8oYS5uZXh0KCksZCgpKTphLnBhdXNlKCl9dmFyIGcsaCxpPXRoaXMsaj1pLnNsaWRlcz1hLnNsaWRlcz1bXSxrPS0xO2kuY3VycmVudFNsaWRlPW51bGw7dmFyIGw9ITE7aS5zZWxlY3Q9YS5zZWxlY3Q9ZnVuY3Rpb24oZSxmKXtmdW5jdGlvbiBnKCl7aWYoIWwpe2lmKGkuY3VycmVudFNsaWRlJiZhbmd1bGFyLmlzU3RyaW5nKGYpJiYhYS5ub1RyYW5zaXRpb24mJmUuJGVsZW1lbnQpe2UuJGVsZW1lbnQuYWRkQ2xhc3MoZik7e2UuJGVsZW1lbnRbMF0ub2Zmc2V0V2lkdGh9YW5ndWxhci5mb3JFYWNoKGosZnVuY3Rpb24oYSl7YW5ndWxhci5leHRlbmQoYSx7ZGlyZWN0aW9uOiIiLGVudGVyaW5nOiExLGxlYXZpbmc6ITEsYWN0aXZlOiExfSl9KSxhbmd1bGFyLmV4dGVuZChlLHtkaXJlY3Rpb246ZixhY3RpdmU6ITAsZW50ZXJpbmc6ITB9KSxhbmd1bGFyLmV4dGVuZChpLmN1cnJlbnRTbGlkZXx8e30se2RpcmVjdGlvbjpmLGxlYXZpbmc6ITB9KSxhLiRjdXJyZW50VHJhbnNpdGlvbj1jKGUuJGVsZW1lbnQse30pLGZ1bmN0aW9uKGIsYyl7YS4kY3VycmVudFRyYW5zaXRpb24udGhlbihmdW5jdGlvbigpe2goYixjKX0sZnVuY3Rpb24oKXtoKGIsYyl9KX0oZSxpLmN1cnJlbnRTbGlkZSl9ZWxzZSBoKGUsaS5jdXJyZW50U2xpZGUpO2kuY3VycmVudFNsaWRlPWUsaz1tLGQoKX19ZnVuY3Rpb24gaChiLGMpe2FuZ3VsYXIuZXh0ZW5kKGIse2RpcmVjdGlvbjoiIixhY3RpdmU6ITAsbGVhdmluZzohMSxlbnRlcmluZzohMX0pLGFuZ3VsYXIuZXh0ZW5kKGN8fHt9LHtkaXJlY3Rpb246IiIsYWN0aXZlOiExLGxlYXZpbmc6ITEsZW50ZXJpbmc6ITF9KSxhLiRjdXJyZW50VHJhbnNpdGlvbj1udWxsfXZhciBtPWouaW5kZXhPZihlKTt2b2lkIDA9PT1mJiYoZj1tPms/Im5leHQiOiJwcmV2IiksZSYmZSE9PWkuY3VycmVudFNsaWRlJiYoYS4kY3VycmVudFRyYW5zaXRpb24/KGEuJGN1cnJlbnRUcmFuc2l0aW9uLmNhbmNlbCgpLGIoZykpOmcoKSl9LGEuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXtsPSEwfSksaS5pbmRleE9mU2xpZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGouaW5kZXhPZihhKX0sYS5uZXh0PWZ1bmN0aW9uKCl7dmFyIGI9KGsrMSklai5sZW5ndGg7cmV0dXJuIGEuJGN1cnJlbnRUcmFuc2l0aW9uP3ZvaWQgMDppLnNlbGVjdChqW2JdLCJuZXh0Iil9LGEucHJldj1mdW5jdGlvbigpe3ZhciBiPTA+ay0xP2oubGVuZ3RoLTE6ay0xO3JldHVybiBhLiRjdXJyZW50VHJhbnNpdGlvbj92b2lkIDA6aS5zZWxlY3QoaltiXSwicHJldiIpfSxhLmlzQWN0aXZlPWZ1bmN0aW9uKGEpe3JldHVybiBpLmN1cnJlbnRTbGlkZT09PWF9LGEuJHdhdGNoKCJpbnRlcnZhbCIsZCksYS4kb24oIiRkZXN0cm95IixlKSxhLnBsYXk9ZnVuY3Rpb24oKXtofHwoaD0hMCxkKCkpfSxhLnBhdXNlPWZ1bmN0aW9uKCl7YS5ub1BhdXNlfHwoaD0hMSxlKCkpfSxpLmFkZFNsaWRlPWZ1bmN0aW9uKGIsYyl7Yi4kZWxlbWVudD1jLGoucHVzaChiKSwxPT09ai5sZW5ndGh8fGIuYWN0aXZlPyhpLnNlbGVjdChqW2oubGVuZ3RoLTFdKSwxPT1qLmxlbmd0aCYmYS5wbGF5KCkpOmIuYWN0aXZlPSExfSxpLnJlbW92ZVNsaWRlPWZ1bmN0aW9uKGEpe3ZhciBiPWouaW5kZXhPZihhKTtqLnNwbGljZShiLDEpLGoubGVuZ3RoPjAmJmEuYWN0aXZlP2kuc2VsZWN0KGI+PWoubGVuZ3RoP2pbYi0xXTpqW2JdKTprPmImJmstLX19XSkuZGlyZWN0aXZlKCJjYXJvdXNlbCIsW2Z1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIsdHJhbnNjbHVkZTohMCxyZXBsYWNlOiEwLGNvbnRyb2xsZXI6IkNhcm91c2VsQ29udHJvbGxlciIscmVxdWlyZToiY2Fyb3VzZWwiLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9jYXJvdXNlbC9jYXJvdXNlbC5odG1sIixzY29wZTp7aW50ZXJ2YWw6Ij0iLG5vVHJhbnNpdGlvbjoiPSIsbm9QYXVzZToiPSJ9fX1dKS5kaXJlY3RpdmUoInNsaWRlIixmdW5jdGlvbigpe3JldHVybntyZXF1aXJlOiJeY2Fyb3VzZWwiLHJlc3RyaWN0OiJFQSIsdHJhbnNjbHVkZTohMCxyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9jYXJvdXNlbC9zbGlkZS5odG1sIixzY29wZTp7YWN0aXZlOiI9PyJ9LGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7ZC5hZGRTbGlkZShhLGIpLGEuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXtkLnJlbW92ZVNsaWRlKGEpfSksYS4kd2F0Y2goImFjdGl2ZSIsZnVuY3Rpb24oYil7YiYmZC5zZWxlY3QoYSl9KX19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5kYXRlcGFyc2VyIixbXSkuc2VydmljZSgiZGF0ZVBhcnNlciIsWyIkbG9jYWxlIiwib3JkZXJCeUZpbHRlciIsZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYixjKXtyZXR1cm4gMT09PWImJmM+Mjg/Mjk9PT1jJiYoYSU0PT09MCYmYSUxMDAhPT0wfHxhJTQwMD09PTApOjM9PT1ifHw1PT09Ynx8OD09PWJ8fDEwPT09Yj8zMT5jOiEwfXRoaXMucGFyc2Vycz17fTt2YXIgZD17eXl5eTp7cmVnZXg6IlxcZHs0fSIsYXBwbHk6ZnVuY3Rpb24oYSl7dGhpcy55ZWFyPSthfX0seXk6e3JlZ2V4OiJcXGR7Mn0iLGFwcGx5OmZ1bmN0aW9uKGEpe3RoaXMueWVhcj0rYSsyZTN9fSx5OntyZWdleDoiXFxkezEsNH0iLGFwcGx5OmZ1bmN0aW9uKGEpe3RoaXMueWVhcj0rYX19LE1NTU06e3JlZ2V4OmEuREFURVRJTUVfRk9STUFUUy5NT05USC5qb2luKCJ8IiksYXBwbHk6ZnVuY3Rpb24oYil7dGhpcy5tb250aD1hLkRBVEVUSU1FX0ZPUk1BVFMuTU9OVEguaW5kZXhPZihiKX19LE1NTTp7cmVnZXg6YS5EQVRFVElNRV9GT1JNQVRTLlNIT1JUTU9OVEguam9pbigifCIpLGFwcGx5OmZ1bmN0aW9uKGIpe3RoaXMubW9udGg9YS5EQVRFVElNRV9GT1JNQVRTLlNIT1JUTU9OVEguaW5kZXhPZihiKX19LE1NOntyZWdleDoiMFsxLTldfDFbMC0yXSIsYXBwbHk6ZnVuY3Rpb24oYSl7dGhpcy5tb250aD1hLTF9fSxNOntyZWdleDoiWzEtOV18MVswLTJdIixhcHBseTpmdW5jdGlvbihhKXt0aGlzLm1vbnRoPWEtMX19LGRkOntyZWdleDoiWzAtMl1bMC05XXsxfXwzWzAtMV17MX0iLGFwcGx5OmZ1bmN0aW9uKGEpe3RoaXMuZGF0ZT0rYX19LGQ6e3JlZ2V4OiJbMS0yXT9bMC05XXsxfXwzWzAtMV17MX0iLGFwcGx5OmZ1bmN0aW9uKGEpe3RoaXMuZGF0ZT0rYX19LEVFRUU6e3JlZ2V4OmEuREFURVRJTUVfRk9STUFUUy5EQVkuam9pbigifCIpfSxFRUU6e3JlZ2V4OmEuREFURVRJTUVfRk9STUFUUy5TSE9SVERBWS5qb2luKCJ8Iil9fTt0aGlzLmNyZWF0ZVBhcnNlcj1mdW5jdGlvbihhKXt2YXIgYz1bXSxlPWEuc3BsaXQoIiIpO3JldHVybiBhbmd1bGFyLmZvckVhY2goZCxmdW5jdGlvbihiLGQpe3ZhciBmPWEuaW5kZXhPZihkKTtpZihmPi0xKXthPWEuc3BsaXQoIiIpLGVbZl09IigiK2IucmVnZXgrIikiLGFbZl09IiQiO2Zvcih2YXIgZz1mKzEsaD1mK2QubGVuZ3RoO2g+ZztnKyspZVtnXT0iIixhW2ddPSIkIjthPWEuam9pbigiIiksYy5wdXNoKHtpbmRleDpmLGFwcGx5OmIuYXBwbHl9KX19KSx7cmVnZXg6bmV3IFJlZ0V4cCgiXiIrZS5qb2luKCIiKSsiJCIpLG1hcDpiKGMsImluZGV4Iil9fSx0aGlzLnBhcnNlPWZ1bmN0aW9uKGIsZCl7aWYoIWFuZ3VsYXIuaXNTdHJpbmcoYikpcmV0dXJuIGI7ZD1hLkRBVEVUSU1FX0ZPUk1BVFNbZF18fGQsdGhpcy5wYXJzZXJzW2RdfHwodGhpcy5wYXJzZXJzW2RdPXRoaXMuY3JlYXRlUGFyc2VyKGQpKTt2YXIgZT10aGlzLnBhcnNlcnNbZF0sZj1lLnJlZ2V4LGc9ZS5tYXAsaD1iLm1hdGNoKGYpO2lmKGgmJmgubGVuZ3RoKXtmb3IodmFyIGksaj17eWVhcjoxOTAwLG1vbnRoOjAsZGF0ZToxLGhvdXJzOjB9LGs9MSxsPWgubGVuZ3RoO2w+aztrKyspe3ZhciBtPWdbay0xXTttLmFwcGx5JiZtLmFwcGx5LmNhbGwoaixoW2tdKX1yZXR1cm4gYyhqLnllYXIsai5tb250aCxqLmRhdGUpJiYoaT1uZXcgRGF0ZShqLnllYXIsai5tb250aCxqLmRhdGUsai5ob3VycykpLGl9fX1dKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnBvc2l0aW9uIixbXSkuZmFjdG9yeSgiJHBvc2l0aW9uIixbIiRkb2N1bWVudCIsIiR3aW5kb3ciLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGMpe3JldHVybiBhLmN1cnJlbnRTdHlsZT9hLmN1cnJlbnRTdHlsZVtjXTpiLmdldENvbXB1dGVkU3R5bGU/Yi5nZXRDb21wdXRlZFN0eWxlKGEpW2NdOmEuc3R5bGVbY119ZnVuY3Rpb24gZChhKXtyZXR1cm4ic3RhdGljIj09PShjKGEsInBvc2l0aW9uIil8fCJzdGF0aWMiKX12YXIgZT1mdW5jdGlvbihiKXtmb3IodmFyIGM9YVswXSxlPWIub2Zmc2V0UGFyZW50fHxjO2UmJmUhPT1jJiZkKGUpOyllPWUub2Zmc2V0UGFyZW50O3JldHVybiBlfHxjfTtyZXR1cm57cG9zaXRpb246ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5vZmZzZXQoYiksZD17dG9wOjAsbGVmdDowfSxmPWUoYlswXSk7ZiE9YVswXSYmKGQ9dGhpcy5vZmZzZXQoYW5ndWxhci5lbGVtZW50KGYpKSxkLnRvcCs9Zi5jbGllbnRUb3AtZi5zY3JvbGxUb3AsZC5sZWZ0Kz1mLmNsaWVudExlZnQtZi5zY3JvbGxMZWZ0KTt2YXIgZz1iWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt3aWR0aDpnLndpZHRofHxiLnByb3AoIm9mZnNldFdpZHRoIiksaGVpZ2h0OmcuaGVpZ2h0fHxiLnByb3AoIm9mZnNldEhlaWdodCIpLHRvcDpjLnRvcC1kLnRvcCxsZWZ0OmMubGVmdC1kLmxlZnR9fSxvZmZzZXQ6ZnVuY3Rpb24oYyl7dmFyIGQ9Y1swXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57d2lkdGg6ZC53aWR0aHx8Yy5wcm9wKCJvZmZzZXRXaWR0aCIpLGhlaWdodDpkLmhlaWdodHx8Yy5wcm9wKCJvZmZzZXRIZWlnaHQiKSx0b3A6ZC50b3ArKGIucGFnZVlPZmZzZXR8fGFbMF0uZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCksbGVmdDpkLmxlZnQrKGIucGFnZVhPZmZzZXR8fGFbMF0uZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQpfX0scG9zaXRpb25FbGVtZW50czpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpPWMuc3BsaXQoIi0iKSxqPWlbMF0saz1pWzFdfHwiY2VudGVyIjtlPWQ/dGhpcy5vZmZzZXQoYSk6dGhpcy5wb3NpdGlvbihhKSxmPWIucHJvcCgib2Zmc2V0V2lkdGgiKSxnPWIucHJvcCgib2Zmc2V0SGVpZ2h0Iik7dmFyIGw9e2NlbnRlcjpmdW5jdGlvbigpe3JldHVybiBlLmxlZnQrZS53aWR0aC8yLWYvMn0sbGVmdDpmdW5jdGlvbigpe3JldHVybiBlLmxlZnR9LHJpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIGUubGVmdCtlLndpZHRofX0sbT17Y2VudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIGUudG9wK2UuaGVpZ2h0LzItZy8yfSx0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gZS50b3B9LGJvdHRvbTpmdW5jdGlvbigpe3JldHVybiBlLnRvcCtlLmhlaWdodH19O3N3aXRjaChqKXtjYXNlInJpZ2h0IjpoPXt0b3A6bVtrXSgpLGxlZnQ6bFtqXSgpfTticmVhaztjYXNlImxlZnQiOmg9e3RvcDptW2tdKCksbGVmdDplLmxlZnQtZn07YnJlYWs7Y2FzZSJib3R0b20iOmg9e3RvcDptW2pdKCksbGVmdDpsW2tdKCl9O2JyZWFrO2RlZmF1bHQ6aD17dG9wOmUudG9wLWcsbGVmdDpsW2tdKCl9fXJldHVybiBofX19XSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5kYXRlcGlja2VyIixbInVpLmJvb3RzdHJhcC5kYXRlcGFyc2VyIiwidWkuYm9vdHN0cmFwLnBvc2l0aW9uIl0pLmNvbnN0YW50KCJkYXRlcGlja2VyQ29uZmlnIix7Zm9ybWF0RGF5OiJkZCIsZm9ybWF0TW9udGg6Ik1NTU0iLGZvcm1hdFllYXI6Inl5eXkiLGZvcm1hdERheUhlYWRlcjoiRUVFIixmb3JtYXREYXlUaXRsZToiTU1NTSB5eXl5Iixmb3JtYXRNb250aFRpdGxlOiJ5eXl5IixkYXRlcGlja2VyTW9kZToiZGF5IixtaW5Nb2RlOiJkYXkiLG1heE1vZGU6InllYXIiLHNob3dXZWVrczohMCxzdGFydGluZ0RheTowLHllYXJSYW5nZToyMCxtaW5EYXRlOm51bGwsbWF4RGF0ZTpudWxsfSkuY29udHJvbGxlcigiRGF0ZXBpY2tlckNvbnRyb2xsZXIiLFsiJHNjb3BlIiwiJGF0dHJzIiwiJHBhcnNlIiwiJGludGVycG9sYXRlIiwiJHRpbWVvdXQiLCIkbG9nIiwiZGF0ZUZpbHRlciIsImRhdGVwaWNrZXJDb25maWciLGZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCl7dmFyIGk9dGhpcyxqPXskc2V0Vmlld1ZhbHVlOmFuZ3VsYXIubm9vcH07dGhpcy5tb2Rlcz1bImRheSIsIm1vbnRoIiwieWVhciJdLGFuZ3VsYXIuZm9yRWFjaChbImZvcm1hdERheSIsImZvcm1hdE1vbnRoIiwiZm9ybWF0WWVhciIsImZvcm1hdERheUhlYWRlciIsImZvcm1hdERheVRpdGxlIiwiZm9ybWF0TW9udGhUaXRsZSIsIm1pbk1vZGUiLCJtYXhNb2RlIiwic2hvd1dlZWtzIiwic3RhcnRpbmdEYXkiLCJ5ZWFyUmFuZ2UiXSxmdW5jdGlvbihjLGUpe2lbY109YW5ndWxhci5pc0RlZmluZWQoYltjXSk/OD5lP2QoYltjXSkoYS4kcGFyZW50KTphLiRwYXJlbnQuJGV2YWwoYltjXSk6aFtjXX0pLGFuZ3VsYXIuZm9yRWFjaChbIm1pbkRhdGUiLCJtYXhEYXRlIl0sZnVuY3Rpb24oZCl7YltkXT9hLiRwYXJlbnQuJHdhdGNoKGMoYltkXSksZnVuY3Rpb24oYSl7aVtkXT1hP25ldyBEYXRlKGEpOm51bGwsaS5yZWZyZXNoVmlldygpfSk6aVtkXT1oW2RdP25ldyBEYXRlKGhbZF0pOm51bGx9KSxhLmRhdGVwaWNrZXJNb2RlPWEuZGF0ZXBpY2tlck1vZGV8fGguZGF0ZXBpY2tlck1vZGUsYS51bmlxdWVJZD0iZGF0ZXBpY2tlci0iK2EuJGlkKyItIitNYXRoLmZsb29yKDFlNCpNYXRoLnJhbmRvbSgpKSx0aGlzLmFjdGl2ZURhdGU9YW5ndWxhci5pc0RlZmluZWQoYi5pbml0RGF0ZSk/YS4kcGFyZW50LiRldmFsKGIuaW5pdERhdGUpOm5ldyBEYXRlLGEuaXNBY3RpdmU9ZnVuY3Rpb24oYil7cmV0dXJuIDA9PT1pLmNvbXBhcmUoYi5kYXRlLGkuYWN0aXZlRGF0ZSk/KGEuYWN0aXZlRGF0ZUlkPWIudWlkLCEwKTohMX0sdGhpcy5pbml0PWZ1bmN0aW9uKGEpe2o9YSxqLiRyZW5kZXI9ZnVuY3Rpb24oKXtpLnJlbmRlcigpfX0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24oKXtpZihqLiRtb2RlbFZhbHVlKXt2YXIgYT1uZXcgRGF0ZShqLiRtb2RlbFZhbHVlKSxiPSFpc05hTihhKTtiP3RoaXMuYWN0aXZlRGF0ZT1hOmYuZXJyb3IoJ0RhdGVwaWNrZXIgZGlyZWN0aXZlOiAibmctbW9kZWwiIHZhbHVlIG11c3QgYmUgYSBEYXRlIG9iamVjdCwgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIDAxLjAxLjE5NzAgb3IgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGFuIFJGQzI4MjIgb3IgSVNPIDg2MDEgZGF0ZS4nKSxqLiRzZXRWYWxpZGl0eSgiZGF0ZSIsYil9dGhpcy5yZWZyZXNoVmlldygpfSx0aGlzLnJlZnJlc2hWaWV3PWZ1bmN0aW9uKCl7aWYodGhpcy5lbGVtZW50KXt0aGlzLl9yZWZyZXNoVmlldygpO3ZhciBhPWouJG1vZGVsVmFsdWU/bmV3IERhdGUoai4kbW9kZWxWYWx1ZSk6bnVsbDtqLiRzZXRWYWxpZGl0eSgiZGF0ZS1kaXNhYmxlZCIsIWF8fHRoaXMuZWxlbWVudCYmIXRoaXMuaXNEaXNhYmxlZChhKSl9fSx0aGlzLmNyZWF0ZURhdGVPYmplY3Q9ZnVuY3Rpb24oYSxiKXt2YXIgYz1qLiRtb2RlbFZhbHVlP25ldyBEYXRlKGouJG1vZGVsVmFsdWUpOm51bGw7cmV0dXJue2RhdGU6YSxsYWJlbDpnKGEsYiksc2VsZWN0ZWQ6YyYmMD09PXRoaXMuY29tcGFyZShhLGMpLGRpc2FibGVkOnRoaXMuaXNEaXNhYmxlZChhKSxjdXJyZW50OjA9PT10aGlzLmNvbXBhcmUoYSxuZXcgRGF0ZSl9fSx0aGlzLmlzRGlzYWJsZWQ9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMubWluRGF0ZSYmdGhpcy5jb21wYXJlKGMsdGhpcy5taW5EYXRlKTwwfHx0aGlzLm1heERhdGUmJnRoaXMuY29tcGFyZShjLHRoaXMubWF4RGF0ZSk+MHx8Yi5kYXRlRGlzYWJsZWQmJmEuZGF0ZURpc2FibGVkKHtkYXRlOmMsbW9kZTphLmRhdGVwaWNrZXJNb2RlfSl9LHRoaXMuc3BsaXQ9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9W107YS5sZW5ndGg+MDspYy5wdXNoKGEuc3BsaWNlKDAsYikpO3JldHVybiBjfSxhLnNlbGVjdD1mdW5jdGlvbihiKXtpZihhLmRhdGVwaWNrZXJNb2RlPT09aS5taW5Nb2RlKXt2YXIgYz1qLiRtb2RlbFZhbHVlP25ldyBEYXRlKGouJG1vZGVsVmFsdWUpOm5ldyBEYXRlKDAsMCwwLDAsMCwwLDApO2Muc2V0RnVsbFllYXIoYi5nZXRGdWxsWWVhcigpLGIuZ2V0TW9udGgoKSxiLmdldERhdGUoKSksai4kc2V0Vmlld1ZhbHVlKGMpLGouJHJlbmRlcigpfWVsc2UgaS5hY3RpdmVEYXRlPWIsYS5kYXRlcGlja2VyTW9kZT1pLm1vZGVzW2kubW9kZXMuaW5kZXhPZihhLmRhdGVwaWNrZXJNb2RlKS0xXX0sYS5tb3ZlPWZ1bmN0aW9uKGEpe3ZhciBiPWkuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpK2EqKGkuc3RlcC55ZWFyc3x8MCksYz1pLmFjdGl2ZURhdGUuZ2V0TW9udGgoKSthKihpLnN0ZXAubW9udGhzfHwwKTtpLmFjdGl2ZURhdGUuc2V0RnVsbFllYXIoYixjLDEpLGkucmVmcmVzaFZpZXcoKX0sYS50b2dnbGVNb2RlPWZ1bmN0aW9uKGIpe2I9Ynx8MSxhLmRhdGVwaWNrZXJNb2RlPT09aS5tYXhNb2RlJiYxPT09Ynx8YS5kYXRlcGlja2VyTW9kZT09PWkubWluTW9kZSYmLTE9PT1ifHwoYS5kYXRlcGlja2VyTW9kZT1pLm1vZGVzW2kubW9kZXMuaW5kZXhPZihhLmRhdGVwaWNrZXJNb2RlKStiXSl9LGEua2V5cz17MTM6ImVudGVyIiwzMjoic3BhY2UiLDMzOiJwYWdldXAiLDM0OiJwYWdlZG93biIsMzU6ImVuZCIsMzY6ImhvbWUiLDM3OiJsZWZ0IiwzODoidXAiLDM5OiJyaWdodCIsNDA6ImRvd24ifTt2YXIgaz1mdW5jdGlvbigpe2UoZnVuY3Rpb24oKXtpLmVsZW1lbnRbMF0uZm9jdXMoKX0sMCwhMSl9O2EuJG9uKCJkYXRlcGlja2VyLmZvY3VzIixrKSxhLmtleWRvd249ZnVuY3Rpb24oYil7dmFyIGM9YS5rZXlzW2Iud2hpY2hdO2lmKGMmJiFiLnNoaWZ0S2V5JiYhYi5hbHRLZXkpaWYoYi5wcmV2ZW50RGVmYXVsdCgpLGIuc3RvcFByb3BhZ2F0aW9uKCksImVudGVyIj09PWN8fCJzcGFjZSI9PT1jKXtpZihpLmlzRGlzYWJsZWQoaS5hY3RpdmVEYXRlKSlyZXR1cm47YS5zZWxlY3QoaS5hY3RpdmVEYXRlKSxrKCl9ZWxzZSFiLmN0cmxLZXl8fCJ1cCIhPT1jJiYiZG93biIhPT1jPyhpLmhhbmRsZUtleURvd24oYyxiKSxpLnJlZnJlc2hWaWV3KCkpOihhLnRvZ2dsZU1vZGUoInVwIj09PWM/MTotMSksaygpKX19XSkuZGlyZWN0aXZlKCJkYXRlcGlja2VyIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5odG1sIixzY29wZTp7ZGF0ZXBpY2tlck1vZGU6Ij0/IixkYXRlRGlzYWJsZWQ6IiYifSxyZXF1aXJlOlsiZGF0ZXBpY2tlciIsIj9ebmdNb2RlbCJdLGNvbnRyb2xsZXI6IkRhdGVwaWNrZXJDb250cm9sbGVyIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWRbMF0sZj1kWzFdO2YmJmUuaW5pdChmKX19fSkuZGlyZWN0aXZlKCJkYXlwaWNrZXIiLFsiZGF0ZUZpbHRlciIsZnVuY3Rpb24oYSl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvZGF0ZXBpY2tlci9kYXkuaHRtbCIscmVxdWlyZToiXmRhdGVwaWNrZXIiLGxpbms6ZnVuY3Rpb24oYixjLGQsZSl7ZnVuY3Rpb24gZihhLGIpe3JldHVybiAxIT09Ynx8YSU0IT09MHx8YSUxMDA9PT0wJiZhJTQwMCE9PTA/aVtiXToyOX1mdW5jdGlvbiBnKGEsYil7dmFyIGM9bmV3IEFycmF5KGIpLGQ9bmV3IERhdGUoYSksZT0wO2ZvcihkLnNldEhvdXJzKDEyKTtiPmU7KWNbZSsrXT1uZXcgRGF0ZShkKSxkLnNldERhdGUoZC5nZXREYXRlKCkrMSk7cmV0dXJuIGN9ZnVuY3Rpb24gaChhKXt2YXIgYj1uZXcgRGF0ZShhKTtiLnNldERhdGUoYi5nZXREYXRlKCkrNC0oYi5nZXREYXkoKXx8NykpO3ZhciBjPWIuZ2V0VGltZSgpO3JldHVybiBiLnNldE1vbnRoKDApLGIuc2V0RGF0ZSgxKSxNYXRoLmZsb29yKE1hdGgucm91bmQoKGMtYikvODY0ZTUpLzcpKzF9Yi5zaG93V2Vla3M9ZS5zaG93V2Vla3MsZS5zdGVwPXttb250aHM6MX0sZS5lbGVtZW50PWM7dmFyIGk9WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXTtlLl9yZWZyZXNoVmlldz1mdW5jdGlvbigpe3ZhciBjPWUuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpLGQ9ZS5hY3RpdmVEYXRlLmdldE1vbnRoKCksZj1uZXcgRGF0ZShjLGQsMSksaT1lLnN0YXJ0aW5nRGF5LWYuZ2V0RGF5KCksaj1pPjA/Ny1pOi1pLGs9bmV3IERhdGUoZik7aj4wJiZrLnNldERhdGUoLWorMSk7Zm9yKHZhciBsPWcoayw0MiksbT0wOzQyPm07bSsrKWxbbV09YW5ndWxhci5leHRlbmQoZS5jcmVhdGVEYXRlT2JqZWN0KGxbbV0sZS5mb3JtYXREYXkpLHtzZWNvbmRhcnk6bFttXS5nZXRNb250aCgpIT09ZCx1aWQ6Yi51bmlxdWVJZCsiLSIrbX0pO2IubGFiZWxzPW5ldyBBcnJheSg3KTtmb3IodmFyIG49MDs3Pm47bisrKWIubGFiZWxzW25dPXthYmJyOmEobFtuXS5kYXRlLGUuZm9ybWF0RGF5SGVhZGVyKSxmdWxsOmEobFtuXS5kYXRlLCJFRUVFIil9O2lmKGIudGl0bGU9YShlLmFjdGl2ZURhdGUsZS5mb3JtYXREYXlUaXRsZSksYi5yb3dzPWUuc3BsaXQobCw3KSxiLnNob3dXZWVrcyl7Yi53ZWVrTnVtYmVycz1bXTtmb3IodmFyIG89aChiLnJvd3NbMF1bMF0uZGF0ZSkscD1iLnJvd3MubGVuZ3RoO2Iud2Vla051bWJlcnMucHVzaChvKyspPHA7KTt9fSxlLmNvbXBhcmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IERhdGUoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSxhLmdldERhdGUoKSktbmV3IERhdGUoYi5nZXRGdWxsWWVhcigpLGIuZ2V0TW9udGgoKSxiLmdldERhdGUoKSl9LGUuaGFuZGxlS2V5RG93bj1mdW5jdGlvbihhKXt2YXIgYj1lLmFjdGl2ZURhdGUuZ2V0RGF0ZSgpO2lmKCJsZWZ0Ij09PWEpYi09MTtlbHNlIGlmKCJ1cCI9PT1hKWItPTc7ZWxzZSBpZigicmlnaHQiPT09YSliKz0xO2Vsc2UgaWYoImRvd24iPT09YSliKz03O2Vsc2UgaWYoInBhZ2V1cCI9PT1hfHwicGFnZWRvd24iPT09YSl7dmFyIGM9ZS5hY3RpdmVEYXRlLmdldE1vbnRoKCkrKCJwYWdldXAiPT09YT8tMToxKTtlLmFjdGl2ZURhdGUuc2V0TW9udGgoYywxKSxiPU1hdGgubWluKGYoZS5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksZS5hY3RpdmVEYXRlLmdldE1vbnRoKCkpLGIpfWVsc2UiaG9tZSI9PT1hP2I9MToiZW5kIj09PWEmJihiPWYoZS5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksZS5hY3RpdmVEYXRlLmdldE1vbnRoKCkpKTtlLmFjdGl2ZURhdGUuc2V0RGF0ZShiKX0sZS5yZWZyZXNoVmlldygpfX19XSkuZGlyZWN0aXZlKCJtb250aHBpY2tlciIsWyJkYXRlRmlsdGVyIixmdW5jdGlvbihhKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9kYXRlcGlja2VyL21vbnRoLmh0bWwiLHJlcXVpcmU6Il5kYXRlcGlja2VyIixsaW5rOmZ1bmN0aW9uKGIsYyxkLGUpe2Uuc3RlcD17eWVhcnM6MX0sZS5lbGVtZW50PWMsZS5fcmVmcmVzaFZpZXc9ZnVuY3Rpb24oKXtmb3IodmFyIGM9bmV3IEFycmF5KDEyKSxkPWUuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpLGY9MDsxMj5mO2YrKyljW2ZdPWFuZ3VsYXIuZXh0ZW5kKGUuY3JlYXRlRGF0ZU9iamVjdChuZXcgRGF0ZShkLGYsMSksZS5mb3JtYXRNb250aCkse3VpZDpiLnVuaXF1ZUlkKyItIitmfSk7Yi50aXRsZT1hKGUuYWN0aXZlRGF0ZSxlLmZvcm1hdE1vbnRoVGl0bGUpLGIucm93cz1lLnNwbGl0KGMsMyl9LGUuY29tcGFyZT1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgRGF0ZShhLmdldEZ1bGxZZWFyKCksYS5nZXRNb250aCgpKS1uZXcgRGF0ZShiLmdldEZ1bGxZZWFyKCksYi5nZXRNb250aCgpKX0sZS5oYW5kbGVLZXlEb3duPWZ1bmN0aW9uKGEpe3ZhciBiPWUuYWN0aXZlRGF0ZS5nZXRNb250aCgpO2lmKCJsZWZ0Ij09PWEpYi09MTtlbHNlIGlmKCJ1cCI9PT1hKWItPTM7ZWxzZSBpZigicmlnaHQiPT09YSliKz0xO2Vsc2UgaWYoImRvd24iPT09YSliKz0zO2Vsc2UgaWYoInBhZ2V1cCI9PT1hfHwicGFnZWRvd24iPT09YSl7dmFyIGM9ZS5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCkrKCJwYWdldXAiPT09YT8tMToxKTtlLmFjdGl2ZURhdGUuc2V0RnVsbFllYXIoYyl9ZWxzZSJob21lIj09PWE/Yj0wOiJlbmQiPT09YSYmKGI9MTEpO2UuYWN0aXZlRGF0ZS5zZXRNb250aChiKX0sZS5yZWZyZXNoVmlldygpfX19XSkuZGlyZWN0aXZlKCJ5ZWFycGlja2VyIixbImRhdGVGaWx0ZXIiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvZGF0ZXBpY2tlci95ZWFyLmh0bWwiLHJlcXVpcmU6Il5kYXRlcGlja2VyIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2Z1bmN0aW9uIGUoYSl7cmV0dXJuIHBhcnNlSW50KChhLTEpL2YsMTApKmYrMX12YXIgZj1kLnllYXJSYW5nZTtkLnN0ZXA9e3llYXJzOmZ9LGQuZWxlbWVudD1iLGQuX3JlZnJlc2hWaWV3PWZ1bmN0aW9uKCl7Zm9yKHZhciBiPW5ldyBBcnJheShmKSxjPTAsZz1lKGQuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpKTtmPmM7YysrKWJbY109YW5ndWxhci5leHRlbmQoZC5jcmVhdGVEYXRlT2JqZWN0KG5ldyBEYXRlKGcrYywwLDEpLGQuZm9ybWF0WWVhcikse3VpZDphLnVuaXF1ZUlkKyItIitjfSk7YS50aXRsZT1bYlswXS5sYWJlbCxiW2YtMV0ubGFiZWxdLmpvaW4oIiAtICIpLGEucm93cz1kLnNwbGl0KGIsNSl9LGQuY29tcGFyZT1mdW5jdGlvbihhLGIpe3JldHVybiBhLmdldEZ1bGxZZWFyKCktYi5nZXRGdWxsWWVhcigpfSxkLmhhbmRsZUtleURvd249ZnVuY3Rpb24oYSl7dmFyIGI9ZC5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCk7ImxlZnQiPT09YT9iLT0xOiJ1cCI9PT1hP2ItPTU6InJpZ2h0Ij09PWE/Yis9MToiZG93biI9PT1hP2IrPTU6InBhZ2V1cCI9PT1hfHwicGFnZWRvd24iPT09YT9iKz0oInBhZ2V1cCI9PT1hPy0xOjEpKmQuc3RlcC55ZWFyczoiaG9tZSI9PT1hP2I9ZShkLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSk6ImVuZCI9PT1hJiYoYj1lKGQuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpKStmLTEpLGQuYWN0aXZlRGF0ZS5zZXRGdWxsWWVhcihiKX0sZC5yZWZyZXNoVmlldygpfX19XSkuY29uc3RhbnQoImRhdGVwaWNrZXJQb3B1cENvbmZpZyIse2RhdGVwaWNrZXJQb3B1cDoieXl5eS1NTS1kZCIsY3VycmVudFRleHQ6IlRvZGF5IixjbGVhclRleHQ6IkNsZWFyIixjbG9zZVRleHQ6IkRvbmUiLGNsb3NlT25EYXRlU2VsZWN0aW9uOiEwLGFwcGVuZFRvQm9keTohMSxzaG93QnV0dG9uQmFyOiEwfSkuZGlyZWN0aXZlKCJkYXRlcGlja2VyUG9wdXAiLFsiJGNvbXBpbGUiLCIkcGFyc2UiLCIkZG9jdW1lbnQiLCIkcG9zaXRpb24iLCJkYXRlRmlsdGVyIiwiZGF0ZVBhcnNlciIsImRhdGVwaWNrZXJQb3B1cENvbmZpZyIsZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVxdWlyZToibmdNb2RlbCIsc2NvcGU6e2lzT3BlbjoiPT8iLGN1cnJlbnRUZXh0OiJAIixjbGVhclRleHQ6IkAiLGNsb3NlVGV4dDoiQCIsZGF0ZURpc2FibGVkOiImIn0sbGluazpmdW5jdGlvbihoLGksaixrKXtmdW5jdGlvbiBsKGEpe3JldHVybiBhLnJlcGxhY2UoLyhbQS1aXSkvZyxmdW5jdGlvbihhKXtyZXR1cm4iLSIrYS50b0xvd2VyQ2FzZSgpfSl9ZnVuY3Rpb24gbShhKXtpZihhKXtpZihhbmd1bGFyLmlzRGF0ZShhKSYmIWlzTmFOKGEpKXJldHVybiBrLiRzZXRWYWxpZGl0eSgiZGF0ZSIsITApLGE7aWYoYW5ndWxhci5pc1N0cmluZyhhKSl7dmFyIGI9Zi5wYXJzZShhLG4pfHxuZXcgRGF0ZShhKTtyZXR1cm4gaXNOYU4oYik/dm9pZCBrLiRzZXRWYWxpZGl0eSgiZGF0ZSIsITEpOihrLiRzZXRWYWxpZGl0eSgiZGF0ZSIsITApLGIpfXJldHVybiB2b2lkIGsuJHNldFZhbGlkaXR5KCJkYXRlIiwhMSl9cmV0dXJuIGsuJHNldFZhbGlkaXR5KCJkYXRlIiwhMCksbnVsbH12YXIgbixvPWFuZ3VsYXIuaXNEZWZpbmVkKGouY2xvc2VPbkRhdGVTZWxlY3Rpb24pP2guJHBhcmVudC4kZXZhbChqLmNsb3NlT25EYXRlU2VsZWN0aW9uKTpnLmNsb3NlT25EYXRlU2VsZWN0aW9uLHA9YW5ndWxhci5pc0RlZmluZWQoai5kYXRlcGlja2VyQXBwZW5kVG9Cb2R5KT9oLiRwYXJlbnQuJGV2YWwoai5kYXRlcGlja2VyQXBwZW5kVG9Cb2R5KTpnLmFwcGVuZFRvQm9keTtoLnNob3dCdXR0b25CYXI9YW5ndWxhci5pc0RlZmluZWQoai5zaG93QnV0dG9uQmFyKT9oLiRwYXJlbnQuJGV2YWwoai5zaG93QnV0dG9uQmFyKTpnLnNob3dCdXR0b25CYXIsaC5nZXRUZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBoW2ErIlRleHQiXXx8Z1thKyJUZXh0Il19LGouJG9ic2VydmUoImRhdGVwaWNrZXJQb3B1cCIsZnVuY3Rpb24oYSl7bj1hfHxnLmRhdGVwaWNrZXJQb3B1cCxrLiRyZW5kZXIoKX0pO3ZhciBxPWFuZ3VsYXIuZWxlbWVudCgiPGRpdiBkYXRlcGlja2VyLXBvcHVwLXdyYXA+PGRpdiBkYXRlcGlja2VyPjwvZGl2PjwvZGl2PiIpO3EuYXR0cih7Im5nLW1vZGVsIjoiZGF0ZSIsIm5nLWNoYW5nZSI6ImRhdGVTZWxlY3Rpb24oKSJ9KTt2YXIgcj1hbmd1bGFyLmVsZW1lbnQocS5jaGlsZHJlbigpWzBdKTtqLmRhdGVwaWNrZXJPcHRpb25zJiZhbmd1bGFyLmZvckVhY2goaC4kcGFyZW50LiRldmFsKGouZGF0ZXBpY2tlck9wdGlvbnMpLGZ1bmN0aW9uKGEsYil7ci5hdHRyKGwoYiksYSl9KSxhbmd1bGFyLmZvckVhY2goWyJtaW5EYXRlIiwibWF4RGF0ZSJdLGZ1bmN0aW9uKGEpe2pbYV0mJihoLiRwYXJlbnQuJHdhdGNoKGIoalthXSksZnVuY3Rpb24oYil7aFthXT1ifSksci5hdHRyKGwoYSksYSkpfSksai5kYXRlRGlzYWJsZWQmJnIuYXR0cigiZGF0ZS1kaXNhYmxlZCIsImRhdGVEaXNhYmxlZCh7IGRhdGU6IGRhdGUsIG1vZGU6IG1vZGUgfSkiKSxrLiRwYXJzZXJzLnVuc2hpZnQobSksaC5kYXRlU2VsZWN0aW9uPWZ1bmN0aW9uKGEpe2FuZ3VsYXIuaXNEZWZpbmVkKGEpJiYoaC5kYXRlPWEpLGsuJHNldFZpZXdWYWx1ZShoLmRhdGUpLGsuJHJlbmRlcigpLG8mJihoLmlzT3Blbj0hMSxpWzBdLmZvY3VzKCkpfSxpLmJpbmQoImlucHV0IGNoYW5nZSBrZXl1cCIsZnVuY3Rpb24oKXtoLiRhcHBseShmdW5jdGlvbigpe2guZGF0ZT1rLiRtb2RlbFZhbHVlfSl9KSxrLiRyZW5kZXI9ZnVuY3Rpb24oKXt2YXIgYT1rLiR2aWV3VmFsdWU/ZShrLiR2aWV3VmFsdWUsbik6IiI7aS52YWwoYSksaC5kYXRlPW0oay4kbW9kZWxWYWx1ZSl9O3ZhciBzPWZ1bmN0aW9uKGEpe2guaXNPcGVuJiZhLnRhcmdldCE9PWlbMF0mJmguJGFwcGx5KGZ1bmN0aW9uKCl7aC5pc09wZW49ITF9KX0sdD1mdW5jdGlvbihhKXtoLmtleWRvd24oYSl9O2kuYmluZCgia2V5ZG93biIsdCksaC5rZXlkb3duPWZ1bmN0aW9uKGEpezI3PT09YS53aGljaD8oYS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCksaC5jbG9zZSgpKTo0MCE9PWEud2hpY2h8fGguaXNPcGVufHwoaC5pc09wZW49ITApfSxoLiR3YXRjaCgiaXNPcGVuIixmdW5jdGlvbihhKXthPyhoLiRicm9hZGNhc3QoImRhdGVwaWNrZXIuZm9jdXMiKSxoLnBvc2l0aW9uPXA/ZC5vZmZzZXQoaSk6ZC5wb3NpdGlvbihpKSxoLnBvc2l0aW9uLnRvcD1oLnBvc2l0aW9uLnRvcCtpLnByb3AoIm9mZnNldEhlaWdodCIpLGMuYmluZCgiY2xpY2siLHMpKTpjLnVuYmluZCgiY2xpY2siLHMpfSksaC5zZWxlY3Q9ZnVuY3Rpb24oYSl7aWYoInRvZGF5Ij09PWEpe3ZhciBiPW5ldyBEYXRlO2FuZ3VsYXIuaXNEYXRlKGsuJG1vZGVsVmFsdWUpPyhhPW5ldyBEYXRlKGsuJG1vZGVsVmFsdWUpLGEuc2V0RnVsbFllYXIoYi5nZXRGdWxsWWVhcigpLGIuZ2V0TW9udGgoKSxiLmdldERhdGUoKSkpOmE9bmV3IERhdGUoYi5zZXRIb3VycygwLDAsMCwwKSl9aC5kYXRlU2VsZWN0aW9uKGEpfSxoLmNsb3NlPWZ1bmN0aW9uKCl7aC5pc09wZW49ITEsaVswXS5mb2N1cygpfTt2YXIgdT1hKHEpKGgpO3A/Yy5maW5kKCJib2R5IikuYXBwZW5kKHUpOmkuYWZ0ZXIodSksaC4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe3UucmVtb3ZlKCksaS51bmJpbmQoImtleWRvd24iLHQpLGMudW5iaW5kKCJjbGljayIscyl9KX19fV0pLmRpcmVjdGl2ZSgiZGF0ZXBpY2tlclBvcHVwV3JhcCIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRyYW5zY2x1ZGU6ITAsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2RhdGVwaWNrZXIvcG9wdXAuaHRtbCIsbGluazpmdW5jdGlvbihhLGIpe2IuYmluZCgiY2xpY2siLGZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpfSl9fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAuZHJvcGRvd24iLFtdKS5jb25zdGFudCgiZHJvcGRvd25Db25maWciLHtvcGVuQ2xhc3M6Im9wZW4ifSkuc2VydmljZSgiZHJvcGRvd25TZXJ2aWNlIixbIiRkb2N1bWVudCIsZnVuY3Rpb24oYSl7dmFyIGI9bnVsbDt0aGlzLm9wZW49ZnVuY3Rpb24oZSl7Ynx8KGEuYmluZCgiY2xpY2siLGMpLGEuYmluZCgia2V5ZG93biIsZCkpLGImJmIhPT1lJiYoYi5pc09wZW49ITEpLGI9ZX0sdGhpcy5jbG9zZT1mdW5jdGlvbihlKXtiPT09ZSYmKGI9bnVsbCxhLnVuYmluZCgiY2xpY2siLGMpLGEudW5iaW5kKCJrZXlkb3duIixkKSl9O3ZhciBjPWZ1bmN0aW9uKGEpe2EmJmEuaXNEZWZhdWx0UHJldmVudGVkKCl8fGIuJGFwcGx5KGZ1bmN0aW9uKCl7Yi5pc09wZW49ITF9KX0sZD1mdW5jdGlvbihhKXsyNz09PWEud2hpY2gmJihiLmZvY3VzVG9nZ2xlRWxlbWVudCgpLGMoKSl9fV0pLmNvbnRyb2xsZXIoIkRyb3Bkb3duQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLCIkcGFyc2UiLCJkcm9wZG93bkNvbmZpZyIsImRyb3Bkb3duU2VydmljZSIsIiRhbmltYXRlIixmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGcsaD10aGlzLGk9YS4kbmV3KCksaj1kLm9wZW5DbGFzcyxrPWFuZ3VsYXIubm9vcCxsPWIub25Ub2dnbGU/YyhiLm9uVG9nZ2xlKTphbmd1bGFyLm5vb3A7dGhpcy5pbml0PWZ1bmN0aW9uKGQpe2guJGVsZW1lbnQ9ZCxiLmlzT3BlbiYmKGc9YyhiLmlzT3Blbiksaz1nLmFzc2lnbixhLiR3YXRjaChnLGZ1bmN0aW9uKGEpe2kuaXNPcGVuPSEhYX0pKX0sdGhpcy50b2dnbGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGkuaXNPcGVuPWFyZ3VtZW50cy5sZW5ndGg/ISFhOiFpLmlzT3Blbn0sdGhpcy5pc09wZW49ZnVuY3Rpb24oKXtyZXR1cm4gaS5pc09wZW59LGkuZm9jdXNUb2dnbGVFbGVtZW50PWZ1bmN0aW9uKCl7aC50b2dnbGVFbGVtZW50JiZoLnRvZ2dsZUVsZW1lbnRbMF0uZm9jdXMoKX0saS4kd2F0Y2goImlzT3BlbiIsZnVuY3Rpb24oYixjKXtmW2I/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXShoLiRlbGVtZW50LGopLGI/KGkuZm9jdXNUb2dnbGVFbGVtZW50KCksZS5vcGVuKGkpKTplLmNsb3NlKGkpLGsoYSxiKSxhbmd1bGFyLmlzRGVmaW5lZChiKSYmYiE9PWMmJmwoYSx7b3BlbjohIWJ9KX0pLGEuJG9uKCIkbG9jYXRpb25DaGFuZ2VTdWNjZXNzIixmdW5jdGlvbigpe2kuaXNPcGVuPSExfSksYS4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2kuJGRlc3Ryb3koKX0pfV0pLmRpcmVjdGl2ZSgiZHJvcGRvd24iLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJDQSIsY29udHJvbGxlcjoiRHJvcGRvd25Db250cm9sbGVyIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2QuaW5pdChiKX19fSkuZGlyZWN0aXZlKCJkcm9wZG93blRvZ2dsZSIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkNBIixyZXF1aXJlOiI/XmRyb3Bkb3duIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2lmKGQpe2QudG9nZ2xlRWxlbWVudD1iO3ZhciBlPWZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxiLmhhc0NsYXNzKCJkaXNhYmxlZCIpfHxjLmRpc2FibGVkfHxhLiRhcHBseShmdW5jdGlvbigpe2QudG9nZ2xlKCl9KX07Yi5iaW5kKCJjbGljayIsZSksYi5hdHRyKHsiYXJpYS1oYXNwb3B1cCI6ITAsImFyaWEtZXhwYW5kZWQiOiExfSksYS4kd2F0Y2goZC5pc09wZW4sZnVuY3Rpb24oYSl7Yi5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhIWEpfSksYS4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2IudW5iaW5kKCJjbGljayIsZSl9KX19fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAubW9kYWwiLFsidWkuYm9vdHN0cmFwLnRyYW5zaXRpb24iXSkuZmFjdG9yeSgiJCRzdGFja2VkTWFwIixmdW5jdGlvbigpe3JldHVybntjcmVhdGVOZXc6ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm57YWRkOmZ1bmN0aW9uKGIsYyl7YS5wdXNoKHtrZXk6Yix2YWx1ZTpjfSl9LGdldDpmdW5jdGlvbihiKXtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKylpZihiPT1hW2NdLmtleSlyZXR1cm4gYVtjXX0sa2V5czpmdW5jdGlvbigpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKyspYi5wdXNoKGFbY10ua2V5KTtyZXR1cm4gYn0sdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGFbYS5sZW5ndGgtMV19LHJlbW92ZTpmdW5jdGlvbihiKXtmb3IodmFyIGM9LTEsZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKGI9PWFbZF0ua2V5KXtjPWQ7YnJlYWt9cmV0dXJuIGEuc3BsaWNlKGMsMSlbMF19LHJlbW92ZVRvcDpmdW5jdGlvbigpe3JldHVybiBhLnNwbGljZShhLmxlbmd0aC0xLDEpWzBdfSxsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gYS5sZW5ndGh9fX19fSkuZGlyZWN0aXZlKCJtb2RhbEJhY2tkcm9wIixbIiR0aW1lb3V0IixmdW5jdGlvbihhKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9tb2RhbC9iYWNrZHJvcC5odG1sIixsaW5rOmZ1bmN0aW9uKGIpe2IuYW5pbWF0ZT0hMSxhKGZ1bmN0aW9uKCl7Yi5hbmltYXRlPSEwfSl9fX1dKS5kaXJlY3RpdmUoIm1vZGFsV2luZG93IixbIiRtb2RhbFN0YWNrIiwiJHRpbWVvdXQiLGZ1bmN0aW9uKGEsYil7cmV0dXJue3Jlc3RyaWN0OiJFQSIsc2NvcGU6e2luZGV4OiJAIixhbmltYXRlOiI9In0scmVwbGFjZTohMCx0cmFuc2NsdWRlOiEwLHRlbXBsYXRlVXJsOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGIudGVtcGxhdGVVcmx8fCJ0ZW1wbGF0ZS9tb2RhbC93aW5kb3cuaHRtbCJ9LGxpbms6ZnVuY3Rpb24oYyxkLGUpe2QuYWRkQ2xhc3MoZS53aW5kb3dDbGFzc3x8IiIpLGMuc2l6ZT1lLnNpemUsYihmdW5jdGlvbigpe2MuYW5pbWF0ZT0hMCxkWzBdLmZvY3VzKCl9KSxjLmNsb3NlPWZ1bmN0aW9uKGIpe3ZhciBjPWEuZ2V0VG9wKCk7YyYmYy52YWx1ZS5iYWNrZHJvcCYmInN0YXRpYyIhPWMudmFsdWUuYmFja2Ryb3AmJmIudGFyZ2V0PT09Yi5jdXJyZW50VGFyZ2V0JiYoYi5wcmV2ZW50RGVmYXVsdCgpLGIuc3RvcFByb3BhZ2F0aW9uKCksYS5kaXNtaXNzKGMua2V5LCJiYWNrZHJvcCBjbGljayIpKX19fX1dKS5mYWN0b3J5KCIkbW9kYWxTdGFjayIsWyIkdHJhbnNpdGlvbiIsIiR0aW1lb3V0IiwiJGRvY3VtZW50IiwiJGNvbXBpbGUiLCIkcm9vdFNjb3BlIiwiJCRzdGFja2VkTWFwIixmdW5jdGlvbihhLGIsYyxkLGUsZil7ZnVuY3Rpb24gZygpe2Zvcih2YXIgYT0tMSxiPW4ua2V5cygpLGM9MDtjPGIubGVuZ3RoO2MrKyluLmdldChiW2NdKS52YWx1ZS5iYWNrZHJvcCYmKGE9Yyk7cmV0dXJuIGF9ZnVuY3Rpb24gaChhKXt2YXIgYj1jLmZpbmQoImJvZHkiKS5lcSgwKSxkPW4uZ2V0KGEpLnZhbHVlO24ucmVtb3ZlKGEpLGooZC5tb2RhbERvbUVsLGQubW9kYWxTY29wZSwzMDAsZnVuY3Rpb24oKXtkLm1vZGFsU2NvcGUuJGRlc3Ryb3koKSxiLnRvZ2dsZUNsYXNzKG0sbi5sZW5ndGgoKT4wKSxpKCl9KX1mdW5jdGlvbiBpKCl7aWYoayYmLTE9PWcoKSl7dmFyIGE9bDtqKGssbCwxNTAsZnVuY3Rpb24oKXthLiRkZXN0cm95KCksYT1udWxsfSksaz12b2lkIDAsbD12b2lkIDB9fWZ1bmN0aW9uIGooYyxkLGUsZil7ZnVuY3Rpb24gZygpe2cuZG9uZXx8KGcuZG9uZT0hMCxjLnJlbW92ZSgpLGYmJmYoKSl9ZC5hbmltYXRlPSExO3ZhciBoPWEudHJhbnNpdGlvbkVuZEV2ZW50TmFtZTtpZihoKXt2YXIgaT1iKGcsZSk7Yy5iaW5kKGgsZnVuY3Rpb24oKXtiLmNhbmNlbChpKSxnKCksZC4kYXBwbHkoKX0pfWVsc2UgYihnLDApfXZhciBrLGwsbT0ibW9kYWwtb3BlbiIsbj1mLmNyZWF0ZU5ldygpLG89e307cmV0dXJuIGUuJHdhdGNoKGcsZnVuY3Rpb24oYSl7bCYmKGwuaW5kZXg9YSl9KSxjLmJpbmQoImtleWRvd24iLGZ1bmN0aW9uKGEpe3ZhciBiOzI3PT09YS53aGljaCYmKGI9bi50b3AoKSxiJiZiLnZhbHVlLmtleWJvYXJkJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGUuJGFwcGx5KGZ1bmN0aW9uKCl7by5kaXNtaXNzKGIua2V5LCJlc2NhcGUga2V5IHByZXNzIil9KSkpfSksby5vcGVuPWZ1bmN0aW9uKGEsYil7bi5hZGQoYSx7ZGVmZXJyZWQ6Yi5kZWZlcnJlZCxtb2RhbFNjb3BlOmIuc2NvcGUsYmFja2Ryb3A6Yi5iYWNrZHJvcCxrZXlib2FyZDpiLmtleWJvYXJkfSk7dmFyIGY9Yy5maW5kKCJib2R5IikuZXEoMCksaD1nKCk7aD49MCYmIWsmJihsPWUuJG5ldyghMCksbC5pbmRleD1oLGs9ZCgiPGRpdiBtb2RhbC1iYWNrZHJvcD48L2Rpdj4iKShsKSxmLmFwcGVuZChrKSk7dmFyIGk9YW5ndWxhci5lbGVtZW50KCI8ZGl2IG1vZGFsLXdpbmRvdz48L2Rpdj4iKTtpLmF0dHIoeyJ0ZW1wbGF0ZS11cmwiOmIud2luZG93VGVtcGxhdGVVcmwsIndpbmRvdy1jbGFzcyI6Yi53aW5kb3dDbGFzcyxzaXplOmIuc2l6ZSxpbmRleDpuLmxlbmd0aCgpLTEsYW5pbWF0ZToiYW5pbWF0ZSJ9KS5odG1sKGIuY29udGVudCk7dmFyIGo9ZChpKShiLnNjb3BlKTtuLnRvcCgpLnZhbHVlLm1vZGFsRG9tRWw9aixmLmFwcGVuZChqKSxmLmFkZENsYXNzKG0pfSxvLmNsb3NlPWZ1bmN0aW9uKGEsYil7dmFyIGM9bi5nZXQoYSkudmFsdWU7YyYmKGMuZGVmZXJyZWQucmVzb2x2ZShiKSxoKGEpKX0sby5kaXNtaXNzPWZ1bmN0aW9uKGEsYil7dmFyIGM9bi5nZXQoYSkudmFsdWU7YyYmKGMuZGVmZXJyZWQucmVqZWN0KGIpLGgoYSkpfSxvLmRpc21pc3NBbGw9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMuZ2V0VG9wKCk7YjspdGhpcy5kaXNtaXNzKGIua2V5LGEpLGI9dGhpcy5nZXRUb3AoKX0sby5nZXRUb3A9ZnVuY3Rpb24oKXtyZXR1cm4gbi50b3AoKX0sb31dKS5wcm92aWRlcigiJG1vZGFsIixmdW5jdGlvbigpe3ZhciBhPXtvcHRpb25zOntiYWNrZHJvcDohMCxrZXlib2FyZDohMH0sJGdldDpbIiRpbmplY3RvciIsIiRyb290U2NvcGUiLCIkcSIsIiRodHRwIiwiJHRlbXBsYXRlQ2FjaGUiLCIkY29udHJvbGxlciIsIiRtb2RhbFN0YWNrIixmdW5jdGlvbihiLGMsZCxlLGYsZyxoKXtmdW5jdGlvbiBpKGEpe3JldHVybiBhLnRlbXBsYXRlP2Qud2hlbihhLnRlbXBsYXRlKTplLmdldChhLnRlbXBsYXRlVXJsLHtjYWNoZTpmfSkudGhlbihmdW5jdGlvbihhKXtyZXR1cm4gYS5kYXRhfSl9ZnVuY3Rpb24gaihhKXt2YXIgYz1bXTtyZXR1cm4gYW5ndWxhci5mb3JFYWNoKGEsZnVuY3Rpb24oYSl7KGFuZ3VsYXIuaXNGdW5jdGlvbihhKXx8YW5ndWxhci5pc0FycmF5KGEpKSYmYy5wdXNoKGQud2hlbihiLmludm9rZShhKSkpfSksY312YXIgaz17fTtyZXR1cm4gay5vcGVuPWZ1bmN0aW9uKGIpe3ZhciBlPWQuZGVmZXIoKSxmPWQuZGVmZXIoKSxrPXtyZXN1bHQ6ZS5wcm9taXNlLG9wZW5lZDpmLnByb21pc2UsY2xvc2U6ZnVuY3Rpb24oYSl7aC5jbG9zZShrLGEpfSxkaXNtaXNzOmZ1bmN0aW9uKGEpe2guZGlzbWlzcyhrLGEpfX07aWYoYj1hbmd1bGFyLmV4dGVuZCh7fSxhLm9wdGlvbnMsYiksYi5yZXNvbHZlPWIucmVzb2x2ZXx8e30sIWIudGVtcGxhdGUmJiFiLnRlbXBsYXRlVXJsKXRocm93IG5ldyBFcnJvcigiT25lIG9mIHRlbXBsYXRlIG9yIHRlbXBsYXRlVXJsIG9wdGlvbnMgaXMgcmVxdWlyZWQuIik7dmFyIGw9ZC5hbGwoW2koYildLmNvbmNhdChqKGIucmVzb2x2ZSkpKTtyZXR1cm4gbC50aGVuKGZ1bmN0aW9uKGEpe3ZhciBkPShiLnNjb3BlfHxjKS4kbmV3KCk7ZC4kY2xvc2U9ay5jbG9zZSxkLiRkaXNtaXNzPWsuZGlzbWlzczt2YXIgZixpPXt9LGo9MTtiLmNvbnRyb2xsZXImJihpLiRzY29wZT1kLGkuJG1vZGFsSW5zdGFuY2U9ayxhbmd1bGFyLmZvckVhY2goYi5yZXNvbHZlLGZ1bmN0aW9uKGIsYyl7aVtjXT1hW2orK119KSxmPWcoYi5jb250cm9sbGVyLGkpKSxoLm9wZW4oayx7c2NvcGU6ZCxkZWZlcnJlZDplLGNvbnRlbnQ6YVswXSxiYWNrZHJvcDpiLmJhY2tkcm9wLGtleWJvYXJkOmIua2V5Ym9hcmQsd2luZG93Q2xhc3M6Yi53aW5kb3dDbGFzcyx3aW5kb3dUZW1wbGF0ZVVybDpiLndpbmRvd1RlbXBsYXRlVXJsLHNpemU6Yi5zaXplfSl9LGZ1bmN0aW9uKGEpe2UucmVqZWN0KGEpfSksbC50aGVuKGZ1bmN0aW9uKCl7Zi5yZXNvbHZlKCEwKX0sZnVuY3Rpb24oKXtmLnJlamVjdCghMSl9KSxrfSxrfV19O3JldHVybiBhfSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5wYWdpbmF0aW9uIixbXSkuY29udHJvbGxlcigiUGFnaW5hdGlvbkNvbnRyb2xsZXIiLFsiJHNjb3BlIiwiJGF0dHJzIiwiJHBhcnNlIixmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcyxlPXskc2V0Vmlld1ZhbHVlOmFuZ3VsYXIubm9vcH0sZj1iLm51bVBhZ2VzP2MoYi5udW1QYWdlcykuYXNzaWduOmFuZ3VsYXIubm9vcDt0aGlzLmluaXQ9ZnVuY3Rpb24oZixnKXtlPWYsdGhpcy5jb25maWc9ZyxlLiRyZW5kZXI9ZnVuY3Rpb24oKXtkLnJlbmRlcigpfSxiLml0ZW1zUGVyUGFnZT9hLiRwYXJlbnQuJHdhdGNoKGMoYi5pdGVtc1BlclBhZ2UpLGZ1bmN0aW9uKGIpe2QuaXRlbXNQZXJQYWdlPXBhcnNlSW50KGIsMTApLGEudG90YWxQYWdlcz1kLmNhbGN1bGF0ZVRvdGFsUGFnZXMoKX0pOnRoaXMuaXRlbXNQZXJQYWdlPWcuaXRlbXNQZXJQYWdlfSx0aGlzLmNhbGN1bGF0ZVRvdGFsUGFnZXM9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLml0ZW1zUGVyUGFnZTwxPzE6TWF0aC5jZWlsKGEudG90YWxJdGVtcy90aGlzLml0ZW1zUGVyUGFnZSk7cmV0dXJuIE1hdGgubWF4KGJ8fDAsMSl9LHRoaXMucmVuZGVyPWZ1bmN0aW9uKCl7YS5wYWdlPXBhcnNlSW50KGUuJHZpZXdWYWx1ZSwxMCl8fDF9LGEuc2VsZWN0UGFnZT1mdW5jdGlvbihiKXthLnBhZ2UhPT1iJiZiPjAmJmI8PWEudG90YWxQYWdlcyYmKGUuJHNldFZpZXdWYWx1ZShiKSxlLiRyZW5kZXIoKSl9LGEuZ2V0VGV4dD1mdW5jdGlvbihiKXtyZXR1cm4gYVtiKyJUZXh0Il18fGQuY29uZmlnW2IrIlRleHQiXX0sYS5ub1ByZXZpb3VzPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT1hLnBhZ2V9LGEubm9OZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIGEucGFnZT09PWEudG90YWxQYWdlc30sYS4kd2F0Y2goInRvdGFsSXRlbXMiLGZ1bmN0aW9uKCl7YS50b3RhbFBhZ2VzPWQuY2FsY3VsYXRlVG90YWxQYWdlcygpfSksYS4kd2F0Y2goInRvdGFsUGFnZXMiLGZ1bmN0aW9uKGIpe2YoYS4kcGFyZW50LGIpLGEucGFnZT5iP2Euc2VsZWN0UGFnZShiKTplLiRyZW5kZXIoKX0pfV0pLmNvbnN0YW50KCJwYWdpbmF0aW9uQ29uZmlnIix7aXRlbXNQZXJQYWdlOjEwLGJvdW5kYXJ5TGlua3M6ITEsZGlyZWN0aW9uTGlua3M6ITAsZmlyc3RUZXh0OiJGaXJzdCIscHJldmlvdXNUZXh0OiJQcmV2aW91cyIsbmV4dFRleHQ6Ik5leHQiLGxhc3RUZXh0OiJMYXN0Iixyb3RhdGU6ITB9KS5kaXJlY3RpdmUoInBhZ2luYXRpb24iLFsiJHBhcnNlIiwicGFnaW5hdGlvbkNvbmZpZyIsZnVuY3Rpb24oYSxiKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixzY29wZTp7dG90YWxJdGVtczoiPSIsZmlyc3RUZXh0OiJAIixwcmV2aW91c1RleHQ6IkAiLG5leHRUZXh0OiJAIixsYXN0VGV4dDoiQCJ9LHJlcXVpcmU6WyJwYWdpbmF0aW9uIiwiP25nTW9kZWwiXSxjb250cm9sbGVyOiJQYWdpbmF0aW9uQ29udHJvbGxlciIsdGVtcGxhdGVVcmw6InRlbXBsYXRlL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5odG1sIixyZXBsYWNlOiEwLGxpbms6ZnVuY3Rpb24oYyxkLGUsZil7ZnVuY3Rpb24gZyhhLGIsYyl7cmV0dXJue251bWJlcjphLHRleHQ6YixhY3RpdmU6Y319ZnVuY3Rpb24gaChhLGIpe3ZhciBjPVtdLGQ9MSxlPWIsZj1hbmd1bGFyLmlzRGVmaW5lZChrKSYmYj5rO2YmJihsPyhkPU1hdGgubWF4KGEtTWF0aC5mbG9vcihrLzIpLDEpLGU9ZCtrLTEsZT5iJiYoZT1iLGQ9ZS1rKzEpKTooZD0oTWF0aC5jZWlsKGEvayktMSkqaysxLGU9TWF0aC5taW4oZCtrLTEsYikpKTtmb3IodmFyIGg9ZDtlPj1oO2grKyl7dmFyIGk9ZyhoLGgsaD09PWEpO2MucHVzaChpKX1pZihmJiYhbCl7aWYoZD4xKXt2YXIgaj1nKGQtMSwiLi4uIiwhMSk7Yy51bnNoaWZ0KGopfWlmKGI+ZSl7dmFyIG09ZyhlKzEsIi4uLiIsITEpO2MucHVzaChtKX19cmV0dXJuIGN9dmFyIGk9ZlswXSxqPWZbMV07aWYoail7dmFyIGs9YW5ndWxhci5pc0RlZmluZWQoZS5tYXhTaXplKT9jLiRwYXJlbnQuJGV2YWwoZS5tYXhTaXplKTpiLm1heFNpemUsbD1hbmd1bGFyLmlzRGVmaW5lZChlLnJvdGF0ZSk/Yy4kcGFyZW50LiRldmFsKGUucm90YXRlKTpiLnJvdGF0ZTtjLmJvdW5kYXJ5TGlua3M9YW5ndWxhci5pc0RlZmluZWQoZS5ib3VuZGFyeUxpbmtzKT9jLiRwYXJlbnQuJGV2YWwoZS5ib3VuZGFyeUxpbmtzKTpiLmJvdW5kYXJ5TGlua3MsYy5kaXJlY3Rpb25MaW5rcz1hbmd1bGFyLmlzRGVmaW5lZChlLmRpcmVjdGlvbkxpbmtzKT9jLiRwYXJlbnQuJGV2YWwoZS5kaXJlY3Rpb25MaW5rcyk6Yi5kaXJlY3Rpb25MaW5rcyxpLmluaXQoaixiKSxlLm1heFNpemUmJmMuJHBhcmVudC4kd2F0Y2goYShlLm1heFNpemUpLGZ1bmN0aW9uKGEpe2s9cGFyc2VJbnQoYSwxMCksaS5yZW5kZXIoKX0pO3ZhciBtPWkucmVuZGVyO2kucmVuZGVyPWZ1bmN0aW9uKCl7bSgpLGMucGFnZT4wJiZjLnBhZ2U8PWMudG90YWxQYWdlcyYmKGMucGFnZXM9aChjLnBhZ2UsYy50b3RhbFBhZ2VzKSl9fX19fV0pLmNvbnN0YW50KCJwYWdlckNvbmZpZyIse2l0ZW1zUGVyUGFnZToxMCxwcmV2aW91c1RleHQ6IsKrIFByZXZpb3VzIixuZXh0VGV4dDoiTmV4dCDCuyIsYWxpZ246ITB9KS5kaXJlY3RpdmUoInBhZ2VyIixbInBhZ2VyQ29uZmlnIixmdW5jdGlvbihhKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixzY29wZTp7dG90YWxJdGVtczoiPSIscHJldmlvdXNUZXh0OiJAIixuZXh0VGV4dDoiQCJ9LHJlcXVpcmU6WyJwYWdlciIsIj9uZ01vZGVsIl0sY29udHJvbGxlcjoiUGFnaW5hdGlvbkNvbnRyb2xsZXIiLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9wYWdpbmF0aW9uL3BhZ2VyLmh0bWwiLHJlcGxhY2U6ITAsbGluazpmdW5jdGlvbihiLGMsZCxlKXt2YXIgZj1lWzBdLGc9ZVsxXTtnJiYoYi5hbGlnbj1hbmd1bGFyLmlzRGVmaW5lZChkLmFsaWduKT9iLiRwYXJlbnQuJGV2YWwoZC5hbGlnbik6YS5hbGlnbixmLmluaXQoZyxhKSl9fX1dKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnRvb2x0aXAiLFsidWkuYm9vdHN0cmFwLnBvc2l0aW9uIiwidWkuYm9vdHN0cmFwLmJpbmRIdG1sIl0pLnByb3ZpZGVyKCIkdG9vbHRpcCIsZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEpe3ZhciBiPS9bQS1aXS9nLGM9Ii0iOworcmV0dXJuIGEucmVwbGFjZShiLGZ1bmN0aW9uKGEsYil7cmV0dXJuKGI/YzoiIikrYS50b0xvd2VyQ2FzZSgpfSl9dmFyIGI9e3BsYWNlbWVudDoidG9wIixhbmltYXRpb246ITAscG9wdXBEZWxheTowfSxjPXttb3VzZWVudGVyOiJtb3VzZWxlYXZlIixjbGljazoiY2xpY2siLGZvY3VzOiJibHVyIn0sZD17fTt0aGlzLm9wdGlvbnM9ZnVuY3Rpb24oYSl7YW5ndWxhci5leHRlbmQoZCxhKX0sdGhpcy5zZXRUcmlnZ2Vycz1mdW5jdGlvbihhKXthbmd1bGFyLmV4dGVuZChjLGEpfSx0aGlzLiRnZXQ9WyIkd2luZG93IiwiJGNvbXBpbGUiLCIkdGltZW91dCIsIiRwYXJzZSIsIiRkb2N1bWVudCIsIiRwb3NpdGlvbiIsIiRpbnRlcnBvbGF0ZSIsZnVuY3Rpb24oZSxmLGcsaCxpLGosayl7cmV0dXJuIGZ1bmN0aW9uKGUsbCxtKXtmdW5jdGlvbiBuKGEpe3ZhciBiPWF8fG8udHJpZ2dlcnx8bSxkPWNbYl18fGI7cmV0dXJue3Nob3c6YixoaWRlOmR9fXZhciBvPWFuZ3VsYXIuZXh0ZW5kKHt9LGIsZCkscD1hKGUpLHE9ay5zdGFydFN5bWJvbCgpLHI9ay5lbmRTeW1ib2woKSxzPSI8ZGl2ICIrcCsnLXBvcHVwIHRpdGxlPSInK3ErInR0X3RpdGxlIityKyciIGNvbnRlbnQ9IicrcSsidHRfY29udGVudCIrcisnIiBwbGFjZW1lbnQ9IicrcSsidHRfcGxhY2VtZW50IityKyciIGFuaW1hdGlvbj0idHRfYW5pbWF0aW9uIiBpcy1vcGVuPSJ0dF9pc09wZW4iPjwvZGl2Pic7cmV0dXJue3Jlc3RyaWN0OiJFQSIsc2NvcGU6ITAsY29tcGlsZTpmdW5jdGlvbigpe3ZhciBhPWYocyk7cmV0dXJuIGZ1bmN0aW9uKGIsYyxkKXtmdW5jdGlvbiBmKCl7Yi50dF9pc09wZW4/bSgpOmsoKX1mdW5jdGlvbiBrKCl7KCF5fHxiLiRldmFsKGRbbCsiRW5hYmxlIl0pKSYmKGIudHRfcG9wdXBEZWxheT92fHwodj1nKHAsYi50dF9wb3B1cERlbGF5LCExKSx2LnRoZW4oZnVuY3Rpb24oYSl7YSgpfSkpOnAoKSgpKX1mdW5jdGlvbiBtKCl7Yi4kYXBwbHkoZnVuY3Rpb24oKXtxKCl9KX1mdW5jdGlvbiBwKCl7cmV0dXJuIHY9bnVsbCx1JiYoZy5jYW5jZWwodSksdT1udWxsKSxiLnR0X2NvbnRlbnQ/KHIoKSx0LmNzcyh7dG9wOjAsbGVmdDowLGRpc3BsYXk6ImJsb2NrIn0pLHc/aS5maW5kKCJib2R5IikuYXBwZW5kKHQpOmMuYWZ0ZXIodCkseigpLGIudHRfaXNPcGVuPSEwLGIuJGRpZ2VzdCgpLHopOmFuZ3VsYXIubm9vcH1mdW5jdGlvbiBxKCl7Yi50dF9pc09wZW49ITEsZy5jYW5jZWwodiksdj1udWxsLGIudHRfYW5pbWF0aW9uP3V8fCh1PWcocyw1MDApKTpzKCl9ZnVuY3Rpb24gcigpe3QmJnMoKSx0PWEoYixmdW5jdGlvbigpe30pLGIuJGRpZ2VzdCgpfWZ1bmN0aW9uIHMoKXt1PW51bGwsdCYmKHQucmVtb3ZlKCksdD1udWxsKX12YXIgdCx1LHYsdz1hbmd1bGFyLmlzRGVmaW5lZChvLmFwcGVuZFRvQm9keSk/by5hcHBlbmRUb0JvZHk6ITEseD1uKHZvaWQgMCkseT1hbmd1bGFyLmlzRGVmaW5lZChkW2wrIkVuYWJsZSJdKSx6PWZ1bmN0aW9uKCl7dmFyIGE9ai5wb3NpdGlvbkVsZW1lbnRzKGMsdCxiLnR0X3BsYWNlbWVudCx3KTthLnRvcCs9InB4IixhLmxlZnQrPSJweCIsdC5jc3MoYSl9O2IudHRfaXNPcGVuPSExLGQuJG9ic2VydmUoZSxmdW5jdGlvbihhKXtiLnR0X2NvbnRlbnQ9YSwhYSYmYi50dF9pc09wZW4mJnEoKX0pLGQuJG9ic2VydmUobCsiVGl0bGUiLGZ1bmN0aW9uKGEpe2IudHRfdGl0bGU9YX0pLGQuJG9ic2VydmUobCsiUGxhY2VtZW50IixmdW5jdGlvbihhKXtiLnR0X3BsYWNlbWVudD1hbmd1bGFyLmlzRGVmaW5lZChhKT9hOm8ucGxhY2VtZW50fSksZC4kb2JzZXJ2ZShsKyJQb3B1cERlbGF5IixmdW5jdGlvbihhKXt2YXIgYz1wYXJzZUludChhLDEwKTtiLnR0X3BvcHVwRGVsYXk9aXNOYU4oYyk/by5wb3B1cERlbGF5OmN9KTt2YXIgQT1mdW5jdGlvbigpe2MudW5iaW5kKHguc2hvdyxrKSxjLnVuYmluZCh4LmhpZGUsbSl9O2QuJG9ic2VydmUobCsiVHJpZ2dlciIsZnVuY3Rpb24oYSl7QSgpLHg9bihhKSx4LnNob3c9PT14LmhpZGU/Yy5iaW5kKHguc2hvdyxmKTooYy5iaW5kKHguc2hvdyxrKSxjLmJpbmQoeC5oaWRlLG0pKX0pO3ZhciBCPWIuJGV2YWwoZFtsKyJBbmltYXRpb24iXSk7Yi50dF9hbmltYXRpb249YW5ndWxhci5pc0RlZmluZWQoQik/ISFCOm8uYW5pbWF0aW9uLGQuJG9ic2VydmUobCsiQXBwZW5kVG9Cb2R5IixmdW5jdGlvbihhKXt3PWFuZ3VsYXIuaXNEZWZpbmVkKGEpP2goYSkoYik6d30pLHcmJmIuJG9uKCIkbG9jYXRpb25DaGFuZ2VTdWNjZXNzIixmdW5jdGlvbigpe2IudHRfaXNPcGVuJiZxKCl9KSxiLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7Zy5jYW5jZWwodSksZy5jYW5jZWwodiksQSgpLHMoKX0pfX19fX1dfSkuZGlyZWN0aXZlKCJ0b29sdGlwUG9wdXAiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCxzY29wZTp7Y29udGVudDoiQCIscGxhY2VtZW50OiJAIixhbmltYXRpb246IiYiLGlzT3BlbjoiJiJ9LHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS90b29sdGlwL3Rvb2x0aXAtcG9wdXAuaHRtbCJ9fSkuZGlyZWN0aXZlKCJ0b29sdGlwIixbIiR0b29sdGlwIixmdW5jdGlvbihhKXtyZXR1cm4gYSgidG9vbHRpcCIsInRvb2x0aXAiLCJtb3VzZWVudGVyIil9XSkuZGlyZWN0aXZlKCJ0b29sdGlwSHRtbFVuc2FmZVBvcHVwIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsc2NvcGU6e2NvbnRlbnQ6IkAiLHBsYWNlbWVudDoiQCIsYW5pbWF0aW9uOiImIixpc09wZW46IiYifSx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLWh0bWwtdW5zYWZlLXBvcHVwLmh0bWwifX0pLmRpcmVjdGl2ZSgidG9vbHRpcEh0bWxVbnNhZmUiLFsiJHRvb2x0aXAiLGZ1bmN0aW9uKGEpe3JldHVybiBhKCJ0b29sdGlwSHRtbFVuc2FmZSIsInRvb2x0aXAiLCJtb3VzZWVudGVyIil9XSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5wb3BvdmVyIixbInVpLmJvb3RzdHJhcC50b29sdGlwIl0pLmRpcmVjdGl2ZSgicG9wb3ZlclBvcHVwIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsc2NvcGU6e3RpdGxlOiJAIixjb250ZW50OiJAIixwbGFjZW1lbnQ6IkAiLGFuaW1hdGlvbjoiJiIsaXNPcGVuOiImIn0sdGVtcGxhdGVVcmw6InRlbXBsYXRlL3BvcG92ZXIvcG9wb3Zlci5odG1sIn19KS5kaXJlY3RpdmUoInBvcG92ZXIiLFsiJHRvb2x0aXAiLGZ1bmN0aW9uKGEpe3JldHVybiBhKCJwb3BvdmVyIiwicG9wb3ZlciIsImNsaWNrIil9XSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5wcm9ncmVzc2JhciIsW10pLmNvbnN0YW50KCJwcm9ncmVzc0NvbmZpZyIse2FuaW1hdGU6ITAsbWF4OjEwMH0pLmNvbnRyb2xsZXIoIlByb2dyZXNzQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLCJwcm9ncmVzc0NvbmZpZyIsZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMsZT1hbmd1bGFyLmlzRGVmaW5lZChiLmFuaW1hdGUpP2EuJHBhcmVudC4kZXZhbChiLmFuaW1hdGUpOmMuYW5pbWF0ZTt0aGlzLmJhcnM9W10sYS5tYXg9YW5ndWxhci5pc0RlZmluZWQoYi5tYXgpP2EuJHBhcmVudC4kZXZhbChiLm1heCk6Yy5tYXgsdGhpcy5hZGRCYXI9ZnVuY3Rpb24oYixjKXtlfHxjLmNzcyh7dHJhbnNpdGlvbjoibm9uZSJ9KSx0aGlzLmJhcnMucHVzaChiKSxiLiR3YXRjaCgidmFsdWUiLGZ1bmN0aW9uKGMpe2IucGVyY2VudD0rKDEwMCpjL2EubWF4KS50b0ZpeGVkKDIpfSksYi4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2M9bnVsbCxkLnJlbW92ZUJhcihiKX0pfSx0aGlzLnJlbW92ZUJhcj1mdW5jdGlvbihhKXt0aGlzLmJhcnMuc3BsaWNlKHRoaXMuYmFycy5pbmRleE9mKGEpLDEpfX1dKS5kaXJlY3RpdmUoInByb2dyZXNzIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsdHJhbnNjbHVkZTohMCxjb250cm9sbGVyOiJQcm9ncmVzc0NvbnRyb2xsZXIiLHJlcXVpcmU6InByb2dyZXNzIixzY29wZTp7fSx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3MuaHRtbCJ9fSkuZGlyZWN0aXZlKCJiYXIiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0cmFuc2NsdWRlOiEwLHJlcXVpcmU6Il5wcm9ncmVzcyIsc2NvcGU6e3ZhbHVlOiI9Iix0eXBlOiJAIn0sdGVtcGxhdGVVcmw6InRlbXBsYXRlL3Byb2dyZXNzYmFyL2Jhci5odG1sIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2QuYWRkQmFyKGEsYil9fX0pLmRpcmVjdGl2ZSgicHJvZ3Jlc3NiYXIiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0cmFuc2NsdWRlOiEwLGNvbnRyb2xsZXI6IlByb2dyZXNzQ29udHJvbGxlciIsc2NvcGU6e3ZhbHVlOiI9Iix0eXBlOiJAIn0sdGVtcGxhdGVVcmw6InRlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzYmFyLmh0bWwiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7ZC5hZGRCYXIoYSxhbmd1bGFyLmVsZW1lbnQoYi5jaGlsZHJlbigpWzBdKSl9fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAucmF0aW5nIixbXSkuY29uc3RhbnQoInJhdGluZ0NvbmZpZyIse21heDo1LHN0YXRlT246bnVsbCxzdGF0ZU9mZjpudWxsfSkuY29udHJvbGxlcigiUmF0aW5nQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLCJyYXRpbmdDb25maWciLGZ1bmN0aW9uKGEsYixjKXt2YXIgZD17JHNldFZpZXdWYWx1ZTphbmd1bGFyLm5vb3B9O3RoaXMuaW5pdD1mdW5jdGlvbihlKXtkPWUsZC4kcmVuZGVyPXRoaXMucmVuZGVyLHRoaXMuc3RhdGVPbj1hbmd1bGFyLmlzRGVmaW5lZChiLnN0YXRlT24pP2EuJHBhcmVudC4kZXZhbChiLnN0YXRlT24pOmMuc3RhdGVPbix0aGlzLnN0YXRlT2ZmPWFuZ3VsYXIuaXNEZWZpbmVkKGIuc3RhdGVPZmYpP2EuJHBhcmVudC4kZXZhbChiLnN0YXRlT2ZmKTpjLnN0YXRlT2ZmO3ZhciBmPWFuZ3VsYXIuaXNEZWZpbmVkKGIucmF0aW5nU3RhdGVzKT9hLiRwYXJlbnQuJGV2YWwoYi5yYXRpbmdTdGF0ZXMpOm5ldyBBcnJheShhbmd1bGFyLmlzRGVmaW5lZChiLm1heCk/YS4kcGFyZW50LiRldmFsKGIubWF4KTpjLm1heCk7YS5yYW5nZT10aGlzLmJ1aWxkVGVtcGxhdGVPYmplY3RzKGYpfSx0aGlzLmJ1aWxkVGVtcGxhdGVPYmplY3RzPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0wLGM9YS5sZW5ndGg7Yz5iO2IrKylhW2JdPWFuZ3VsYXIuZXh0ZW5kKHtpbmRleDpifSx7c3RhdGVPbjp0aGlzLnN0YXRlT24sc3RhdGVPZmY6dGhpcy5zdGF0ZU9mZn0sYVtiXSk7cmV0dXJuIGF9LGEucmF0ZT1mdW5jdGlvbihiKXshYS5yZWFkb25seSYmYj49MCYmYjw9YS5yYW5nZS5sZW5ndGgmJihkLiRzZXRWaWV3VmFsdWUoYiksZC4kcmVuZGVyKCkpfSxhLmVudGVyPWZ1bmN0aW9uKGIpe2EucmVhZG9ubHl8fChhLnZhbHVlPWIpLGEub25Ib3Zlcih7dmFsdWU6Yn0pfSxhLnJlc2V0PWZ1bmN0aW9uKCl7YS52YWx1ZT1kLiR2aWV3VmFsdWUsYS5vbkxlYXZlKCl9LGEub25LZXlkb3duPWZ1bmN0aW9uKGIpey8oMzd8Mzh8Mzl8NDApLy50ZXN0KGIud2hpY2gpJiYoYi5wcmV2ZW50RGVmYXVsdCgpLGIuc3RvcFByb3BhZ2F0aW9uKCksYS5yYXRlKGEudmFsdWUrKDM4PT09Yi53aGljaHx8Mzk9PT1iLndoaWNoPzE6LTEpKSl9LHRoaXMucmVuZGVyPWZ1bmN0aW9uKCl7YS52YWx1ZT1kLiR2aWV3VmFsdWV9fV0pLmRpcmVjdGl2ZSgicmF0aW5nIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcXVpcmU6WyJyYXRpbmciLCJuZ01vZGVsIl0sc2NvcGU6e3JlYWRvbmx5OiI9PyIsb25Ib3ZlcjoiJiIsb25MZWF2ZToiJiJ9LGNvbnRyb2xsZXI6IlJhdGluZ0NvbnRyb2xsZXIiLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9yYXRpbmcvcmF0aW5nLmh0bWwiLHJlcGxhY2U6ITAsbGluazpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1kWzBdLGY9ZFsxXTtmJiZlLmluaXQoZil9fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAudGFicyIsW10pLmNvbnRyb2xsZXIoIlRhYnNldENvbnRyb2xsZXIiLFsiJHNjb3BlIixmdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9Yi50YWJzPWEudGFicz1bXTtiLnNlbGVjdD1mdW5jdGlvbihhKXthbmd1bGFyLmZvckVhY2goYyxmdW5jdGlvbihiKXtiLmFjdGl2ZSYmYiE9PWEmJihiLmFjdGl2ZT0hMSxiLm9uRGVzZWxlY3QoKSl9KSxhLmFjdGl2ZT0hMCxhLm9uU2VsZWN0KCl9LGIuYWRkVGFiPWZ1bmN0aW9uKGEpe2MucHVzaChhKSwxPT09Yy5sZW5ndGg/YS5hY3RpdmU9ITA6YS5hY3RpdmUmJmIuc2VsZWN0KGEpfSxiLnJlbW92ZVRhYj1mdW5jdGlvbihhKXt2YXIgZD1jLmluZGV4T2YoYSk7aWYoYS5hY3RpdmUmJmMubGVuZ3RoPjEpe3ZhciBlPWQ9PWMubGVuZ3RoLTE/ZC0xOmQrMTtiLnNlbGVjdChjW2VdKX1jLnNwbGljZShkLDEpfX1dKS5kaXJlY3RpdmUoInRhYnNldCIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIix0cmFuc2NsdWRlOiEwLHJlcGxhY2U6ITAsc2NvcGU6e3R5cGU6IkAifSxjb250cm9sbGVyOiJUYWJzZXRDb250cm9sbGVyIix0ZW1wbGF0ZVVybDoidGVtcGxhdGUvdGFicy90YWJzZXQuaHRtbCIsbGluazpmdW5jdGlvbihhLGIsYyl7YS52ZXJ0aWNhbD1hbmd1bGFyLmlzRGVmaW5lZChjLnZlcnRpY2FsKT9hLiRwYXJlbnQuJGV2YWwoYy52ZXJ0aWNhbCk6ITEsYS5qdXN0aWZpZWQ9YW5ndWxhci5pc0RlZmluZWQoYy5qdXN0aWZpZWQpP2EuJHBhcmVudC4kZXZhbChjLmp1c3RpZmllZCk6ITF9fX0pLmRpcmVjdGl2ZSgidGFiIixbIiRwYXJzZSIsZnVuY3Rpb24oYSl7cmV0dXJue3JlcXVpcmU6Il50YWJzZXQiLHJlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvdGFicy90YWIuaHRtbCIsdHJhbnNjbHVkZTohMCxzY29wZTp7YWN0aXZlOiI9PyIsaGVhZGluZzoiQCIsb25TZWxlY3Q6IiZzZWxlY3QiLG9uRGVzZWxlY3Q6IiZkZXNlbGVjdCJ9LGNvbnRyb2xsZXI6ZnVuY3Rpb24oKXt9LGNvbXBpbGU6ZnVuY3Rpb24oYixjLGQpe3JldHVybiBmdW5jdGlvbihiLGMsZSxmKXtiLiR3YXRjaCgiYWN0aXZlIixmdW5jdGlvbihhKXthJiZmLnNlbGVjdChiKX0pLGIuZGlzYWJsZWQ9ITEsZS5kaXNhYmxlZCYmYi4kcGFyZW50LiR3YXRjaChhKGUuZGlzYWJsZWQpLGZ1bmN0aW9uKGEpe2IuZGlzYWJsZWQ9ISFhfSksYi5zZWxlY3Q9ZnVuY3Rpb24oKXtiLmRpc2FibGVkfHwoYi5hY3RpdmU9ITApfSxmLmFkZFRhYihiKSxiLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7Zi5yZW1vdmVUYWIoYil9KSxiLiR0cmFuc2NsdWRlRm49ZH19fX1dKS5kaXJlY3RpdmUoInRhYkhlYWRpbmdUcmFuc2NsdWRlIixbZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkEiLHJlcXVpcmU6Il50YWIiLGxpbms6ZnVuY3Rpb24oYSxiKXthLiR3YXRjaCgiaGVhZGluZ0VsZW1lbnQiLGZ1bmN0aW9uKGEpe2EmJihiLmh0bWwoIiIpLGIuYXBwZW5kKGEpKX0pfX19XSkuZGlyZWN0aXZlKCJ0YWJDb250ZW50VHJhbnNjbHVkZSIsZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEpe3JldHVybiBhLnRhZ05hbWUmJihhLmhhc0F0dHJpYnV0ZSgidGFiLWhlYWRpbmciKXx8YS5oYXNBdHRyaWJ1dGUoImRhdGEtdGFiLWhlYWRpbmciKXx8InRhYi1oZWFkaW5nIj09PWEudGFnTmFtZS50b0xvd2VyQ2FzZSgpfHwiZGF0YS10YWItaGVhZGluZyI9PT1hLnRhZ05hbWUudG9Mb3dlckNhc2UoKSl9cmV0dXJue3Jlc3RyaWN0OiJBIixyZXF1aXJlOiJedGFic2V0IixsaW5rOmZ1bmN0aW9uKGIsYyxkKXt2YXIgZT1iLiRldmFsKGQudGFiQ29udGVudFRyYW5zY2x1ZGUpO2UuJHRyYW5zY2x1ZGVGbihlLiRwYXJlbnQsZnVuY3Rpb24oYil7YW5ndWxhci5mb3JFYWNoKGIsZnVuY3Rpb24oYil7YShiKT9lLmhlYWRpbmdFbGVtZW50PWI6Yy5hcHBlbmQoYil9KX0pfX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnRpbWVwaWNrZXIiLFtdKS5jb25zdGFudCgidGltZXBpY2tlckNvbmZpZyIse2hvdXJTdGVwOjEsbWludXRlU3RlcDoxLHNob3dNZXJpZGlhbjohMCxtZXJpZGlhbnM6bnVsbCxyZWFkb25seUlucHV0OiExLG1vdXNld2hlZWw6ITB9KS5jb250cm9sbGVyKCJUaW1lcGlja2VyQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLCIkcGFyc2UiLCIkbG9nIiwiJGxvY2FsZSIsInRpbWVwaWNrZXJDb25maWciLGZ1bmN0aW9uKGEsYixjLGQsZSxmKXtmdW5jdGlvbiBnKCl7dmFyIGI9cGFyc2VJbnQoYS5ob3VycywxMCksYz1hLnNob3dNZXJpZGlhbj9iPjAmJjEzPmI6Yj49MCYmMjQ+YjtyZXR1cm4gYz8oYS5zaG93TWVyaWRpYW4mJigxMj09PWImJihiPTApLGEubWVyaWRpYW49PT1wWzFdJiYoYis9MTIpKSxiKTp2b2lkIDB9ZnVuY3Rpb24gaCgpe3ZhciBiPXBhcnNlSW50KGEubWludXRlcywxMCk7cmV0dXJuIGI+PTAmJjYwPmI/Yjp2b2lkIDB9ZnVuY3Rpb24gaShhKXtyZXR1cm4gYW5ndWxhci5pc0RlZmluZWQoYSkmJmEudG9TdHJpbmcoKS5sZW5ndGg8Mj8iMCIrYTphfWZ1bmN0aW9uIGooYSl7aygpLG8uJHNldFZpZXdWYWx1ZShuZXcgRGF0ZShuKSksbChhKX1mdW5jdGlvbiBrKCl7by4kc2V0VmFsaWRpdHkoInRpbWUiLCEwKSxhLmludmFsaWRIb3Vycz0hMSxhLmludmFsaWRNaW51dGVzPSExfWZ1bmN0aW9uIGwoYil7dmFyIGM9bi5nZXRIb3VycygpLGQ9bi5nZXRNaW51dGVzKCk7YS5zaG93TWVyaWRpYW4mJihjPTA9PT1jfHwxMj09PWM/MTI6YyUxMiksYS5ob3Vycz0iaCI9PT1iP2M6aShjKSxhLm1pbnV0ZXM9Im0iPT09Yj9kOmkoZCksYS5tZXJpZGlhbj1uLmdldEhvdXJzKCk8MTI/cFswXTpwWzFdfWZ1bmN0aW9uIG0oYSl7dmFyIGI9bmV3IERhdGUobi5nZXRUaW1lKCkrNmU0KmEpO24uc2V0SG91cnMoYi5nZXRIb3VycygpLGIuZ2V0TWludXRlcygpKSxqKCl9dmFyIG49bmV3IERhdGUsbz17JHNldFZpZXdWYWx1ZTphbmd1bGFyLm5vb3B9LHA9YW5ndWxhci5pc0RlZmluZWQoYi5tZXJpZGlhbnMpP2EuJHBhcmVudC4kZXZhbChiLm1lcmlkaWFucyk6Zi5tZXJpZGlhbnN8fGUuREFURVRJTUVfRk9STUFUUy5BTVBNUzt0aGlzLmluaXQ9ZnVuY3Rpb24oYyxkKXtvPWMsby4kcmVuZGVyPXRoaXMucmVuZGVyO3ZhciBlPWQuZXEoMCksZz1kLmVxKDEpLGg9YW5ndWxhci5pc0RlZmluZWQoYi5tb3VzZXdoZWVsKT9hLiRwYXJlbnQuJGV2YWwoYi5tb3VzZXdoZWVsKTpmLm1vdXNld2hlZWw7aCYmdGhpcy5zZXR1cE1vdXNld2hlZWxFdmVudHMoZSxnKSxhLnJlYWRvbmx5SW5wdXQ9YW5ndWxhci5pc0RlZmluZWQoYi5yZWFkb25seUlucHV0KT9hLiRwYXJlbnQuJGV2YWwoYi5yZWFkb25seUlucHV0KTpmLnJlYWRvbmx5SW5wdXQsdGhpcy5zZXR1cElucHV0RXZlbnRzKGUsZyl9O3ZhciBxPWYuaG91clN0ZXA7Yi5ob3VyU3RlcCYmYS4kcGFyZW50LiR3YXRjaChjKGIuaG91clN0ZXApLGZ1bmN0aW9uKGEpe3E9cGFyc2VJbnQoYSwxMCl9KTt2YXIgcj1mLm1pbnV0ZVN0ZXA7Yi5taW51dGVTdGVwJiZhLiRwYXJlbnQuJHdhdGNoKGMoYi5taW51dGVTdGVwKSxmdW5jdGlvbihhKXtyPXBhcnNlSW50KGEsMTApfSksYS5zaG93TWVyaWRpYW49Zi5zaG93TWVyaWRpYW4sYi5zaG93TWVyaWRpYW4mJmEuJHBhcmVudC4kd2F0Y2goYyhiLnNob3dNZXJpZGlhbiksZnVuY3Rpb24oYil7aWYoYS5zaG93TWVyaWRpYW49ISFiLG8uJGVycm9yLnRpbWUpe3ZhciBjPWcoKSxkPWgoKTthbmd1bGFyLmlzRGVmaW5lZChjKSYmYW5ndWxhci5pc0RlZmluZWQoZCkmJihuLnNldEhvdXJzKGMpLGooKSl9ZWxzZSBsKCl9KSx0aGlzLnNldHVwTW91c2V3aGVlbEV2ZW50cz1mdW5jdGlvbihiLGMpe3ZhciBkPWZ1bmN0aW9uKGEpe2Eub3JpZ2luYWxFdmVudCYmKGE9YS5vcmlnaW5hbEV2ZW50KTt2YXIgYj1hLndoZWVsRGVsdGE/YS53aGVlbERlbHRhOi1hLmRlbHRhWTtyZXR1cm4gYS5kZXRhaWx8fGI+MH07Yi5iaW5kKCJtb3VzZXdoZWVsIHdoZWVsIixmdW5jdGlvbihiKXthLiRhcHBseShkKGIpP2EuaW5jcmVtZW50SG91cnMoKTphLmRlY3JlbWVudEhvdXJzKCkpLGIucHJldmVudERlZmF1bHQoKX0pLGMuYmluZCgibW91c2V3aGVlbCB3aGVlbCIsZnVuY3Rpb24oYil7YS4kYXBwbHkoZChiKT9hLmluY3JlbWVudE1pbnV0ZXMoKTphLmRlY3JlbWVudE1pbnV0ZXMoKSksYi5wcmV2ZW50RGVmYXVsdCgpfSl9LHRoaXMuc2V0dXBJbnB1dEV2ZW50cz1mdW5jdGlvbihiLGMpe2lmKGEucmVhZG9ubHlJbnB1dClyZXR1cm4gYS51cGRhdGVIb3Vycz1hbmd1bGFyLm5vb3Asdm9pZChhLnVwZGF0ZU1pbnV0ZXM9YW5ndWxhci5ub29wKTt2YXIgZD1mdW5jdGlvbihiLGMpe28uJHNldFZpZXdWYWx1ZShudWxsKSxvLiRzZXRWYWxpZGl0eSgidGltZSIsITEpLGFuZ3VsYXIuaXNEZWZpbmVkKGIpJiYoYS5pbnZhbGlkSG91cnM9YiksYW5ndWxhci5pc0RlZmluZWQoYykmJihhLmludmFsaWRNaW51dGVzPWMpfTthLnVwZGF0ZUhvdXJzPWZ1bmN0aW9uKCl7dmFyIGE9ZygpO2FuZ3VsYXIuaXNEZWZpbmVkKGEpPyhuLnNldEhvdXJzKGEpLGooImgiKSk6ZCghMCl9LGIuYmluZCgiYmx1ciIsZnVuY3Rpb24oKXshYS5pbnZhbGlkSG91cnMmJmEuaG91cnM8MTAmJmEuJGFwcGx5KGZ1bmN0aW9uKCl7YS5ob3Vycz1pKGEuaG91cnMpfSl9KSxhLnVwZGF0ZU1pbnV0ZXM9ZnVuY3Rpb24oKXt2YXIgYT1oKCk7YW5ndWxhci5pc0RlZmluZWQoYSk/KG4uc2V0TWludXRlcyhhKSxqKCJtIikpOmQodm9pZCAwLCEwKX0sYy5iaW5kKCJibHVyIixmdW5jdGlvbigpeyFhLmludmFsaWRNaW51dGVzJiZhLm1pbnV0ZXM8MTAmJmEuJGFwcGx5KGZ1bmN0aW9uKCl7YS5taW51dGVzPWkoYS5taW51dGVzKX0pfSl9LHRoaXMucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGE9by4kbW9kZWxWYWx1ZT9uZXcgRGF0ZShvLiRtb2RlbFZhbHVlKTpudWxsO2lzTmFOKGEpPyhvLiRzZXRWYWxpZGl0eSgidGltZSIsITEpLGQuZXJyb3IoJ1RpbWVwaWNrZXIgZGlyZWN0aXZlOiAibmctbW9kZWwiIHZhbHVlIG11c3QgYmUgYSBEYXRlIG9iamVjdCwgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIDAxLjAxLjE5NzAgb3IgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGFuIFJGQzI4MjIgb3IgSVNPIDg2MDEgZGF0ZS4nKSk6KGEmJihuPWEpLGsoKSxsKCkpfSxhLmluY3JlbWVudEhvdXJzPWZ1bmN0aW9uKCl7bSg2MCpxKX0sYS5kZWNyZW1lbnRIb3Vycz1mdW5jdGlvbigpe20oNjAqLXEpfSxhLmluY3JlbWVudE1pbnV0ZXM9ZnVuY3Rpb24oKXttKHIpfSxhLmRlY3JlbWVudE1pbnV0ZXM9ZnVuY3Rpb24oKXttKC1yKX0sYS50b2dnbGVNZXJpZGlhbj1mdW5jdGlvbigpe20oNzIwKihuLmdldEhvdXJzKCk8MTI/MTotMSkpfX1dKS5kaXJlY3RpdmUoInRpbWVwaWNrZXIiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVxdWlyZTpbInRpbWVwaWNrZXIiLCI/Xm5nTW9kZWwiXSxjb250cm9sbGVyOiJUaW1lcGlja2VyQ29udHJvbGxlciIscmVwbGFjZTohMCxzY29wZTp7fSx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvdGltZXBpY2tlci90aW1lcGlja2VyLmh0bWwiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9ZFswXSxmPWRbMV07ZiYmZS5pbml0KGYsYi5maW5kKCJpbnB1dCIpKX19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC50eXBlYWhlYWQiLFsidWkuYm9vdHN0cmFwLnBvc2l0aW9uIiwidWkuYm9vdHN0cmFwLmJpbmRIdG1sIl0pLmZhY3RvcnkoInR5cGVhaGVhZFBhcnNlciIsWyIkcGFyc2UiLGZ1bmN0aW9uKGEpe3ZhciBiPS9eXHMqKC4qPykoPzpccythc1xzKyguKj8pKT9ccytmb3JccysoPzooW1wkXHddW1wkXHdcZF0qKSlccytpblxzKyguKikkLztyZXR1cm57cGFyc2U6ZnVuY3Rpb24oYyl7dmFyIGQ9Yy5tYXRjaChiKTtpZighZCl0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHR5cGVhaGVhZCBzcGVjaWZpY2F0aW9uIGluIGZvcm0gb2YgIl9tb2RlbFZhbHVlXyAoYXMgX2xhYmVsXyk/IGZvciBfaXRlbV8gaW4gX2NvbGxlY3Rpb25fIiBidXQgZ290ICInK2MrJyIuJyk7cmV0dXJue2l0ZW1OYW1lOmRbM10sc291cmNlOmEoZFs0XSksdmlld01hcHBlcjphKGRbMl18fGRbMV0pLG1vZGVsTWFwcGVyOmEoZFsxXSl9fX19XSkuZGlyZWN0aXZlKCJ0eXBlYWhlYWQiLFsiJGNvbXBpbGUiLCIkcGFyc2UiLCIkcSIsIiR0aW1lb3V0IiwiJGRvY3VtZW50IiwiJHBvc2l0aW9uIiwidHlwZWFoZWFkUGFyc2VyIixmdW5jdGlvbihhLGIsYyxkLGUsZixnKXt2YXIgaD1bOSwxMywyNywzOCw0MF07cmV0dXJue3JlcXVpcmU6Im5nTW9kZWwiLGxpbms6ZnVuY3Rpb24oaSxqLGssbCl7dmFyIG0sbj1pLiRldmFsKGsudHlwZWFoZWFkTWluTGVuZ3RoKXx8MSxvPWkuJGV2YWwoay50eXBlYWhlYWRXYWl0TXMpfHwwLHA9aS4kZXZhbChrLnR5cGVhaGVhZEVkaXRhYmxlKSE9PSExLHE9YihrLnR5cGVhaGVhZExvYWRpbmcpLmFzc2lnbnx8YW5ndWxhci5ub29wLHI9YihrLnR5cGVhaGVhZE9uU2VsZWN0KSxzPWsudHlwZWFoZWFkSW5wdXRGb3JtYXR0ZXI/YihrLnR5cGVhaGVhZElucHV0Rm9ybWF0dGVyKTp2b2lkIDAsdD1rLnR5cGVhaGVhZEFwcGVuZFRvQm9keT9pLiRldmFsKGsudHlwZWFoZWFkQXBwZW5kVG9Cb2R5KTohMSx1PWIoay5uZ01vZGVsKS5hc3NpZ24sdj1nLnBhcnNlKGsudHlwZWFoZWFkKSx3PWkuJG5ldygpO2kuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXt3LiRkZXN0cm95KCl9KTt2YXIgeD0idHlwZWFoZWFkLSIrdy4kaWQrIi0iK01hdGguZmxvb3IoMWU0Kk1hdGgucmFuZG9tKCkpO2ouYXR0cih7ImFyaWEtYXV0b2NvbXBsZXRlIjoibGlzdCIsImFyaWEtZXhwYW5kZWQiOiExLCJhcmlhLW93bnMiOnh9KTt2YXIgeT1hbmd1bGFyLmVsZW1lbnQoIjxkaXYgdHlwZWFoZWFkLXBvcHVwPjwvZGl2PiIpO3kuYXR0cih7aWQ6eCxtYXRjaGVzOiJtYXRjaGVzIixhY3RpdmU6ImFjdGl2ZUlkeCIsc2VsZWN0OiJzZWxlY3QoYWN0aXZlSWR4KSIscXVlcnk6InF1ZXJ5Iixwb3NpdGlvbjoicG9zaXRpb24ifSksYW5ndWxhci5pc0RlZmluZWQoay50eXBlYWhlYWRUZW1wbGF0ZVVybCkmJnkuYXR0cigidGVtcGxhdGUtdXJsIixrLnR5cGVhaGVhZFRlbXBsYXRlVXJsKTt2YXIgej1mdW5jdGlvbigpe3cubWF0Y2hlcz1bXSx3LmFjdGl2ZUlkeD0tMSxqLmF0dHIoImFyaWEtZXhwYW5kZWQiLCExKX0sQT1mdW5jdGlvbihhKXtyZXR1cm4geCsiLW9wdGlvbi0iK2F9O3cuJHdhdGNoKCJhY3RpdmVJZHgiLGZ1bmN0aW9uKGEpezA+YT9qLnJlbW92ZUF0dHIoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIpOmouYXR0cigiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixBKGEpKX0pO3ZhciBCPWZ1bmN0aW9uKGEpe3ZhciBiPXskdmlld1ZhbHVlOmF9O3EoaSwhMCksYy53aGVuKHYuc291cmNlKGksYikpLnRoZW4oZnVuY3Rpb24oYyl7dmFyIGQ9YT09PWwuJHZpZXdWYWx1ZTtpZihkJiZtKWlmKGMubGVuZ3RoPjApe3cuYWN0aXZlSWR4PTAsdy5tYXRjaGVzLmxlbmd0aD0wO2Zvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKWJbdi5pdGVtTmFtZV09Y1tlXSx3Lm1hdGNoZXMucHVzaCh7aWQ6QShlKSxsYWJlbDp2LnZpZXdNYXBwZXIodyxiKSxtb2RlbDpjW2VdfSk7dy5xdWVyeT1hLHcucG9zaXRpb249dD9mLm9mZnNldChqKTpmLnBvc2l0aW9uKGopLHcucG9zaXRpb24udG9wPXcucG9zaXRpb24udG9wK2oucHJvcCgib2Zmc2V0SGVpZ2h0Iiksai5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCl9ZWxzZSB6KCk7ZCYmcShpLCExKX0sZnVuY3Rpb24oKXt6KCkscShpLCExKX0pfTt6KCksdy5xdWVyeT12b2lkIDA7dmFyIEM7bC4kcGFyc2Vycy51bnNoaWZ0KGZ1bmN0aW9uKGEpe3JldHVybiBtPSEwLGEmJmEubGVuZ3RoPj1uP28+MD8oQyYmZC5jYW5jZWwoQyksQz1kKGZ1bmN0aW9uKCl7QihhKX0sbykpOkIoYSk6KHEoaSwhMSkseigpKSxwP2E6YT92b2lkIGwuJHNldFZhbGlkaXR5KCJlZGl0YWJsZSIsITEpOihsLiRzZXRWYWxpZGl0eSgiZWRpdGFibGUiLCEwKSxhKX0pLGwuJGZvcm1hdHRlcnMucHVzaChmdW5jdGlvbihhKXt2YXIgYixjLGQ9e307cmV0dXJuIHM/KGQuJG1vZGVsPWEscyhpLGQpKTooZFt2Lml0ZW1OYW1lXT1hLGI9di52aWV3TWFwcGVyKGksZCksZFt2Lml0ZW1OYW1lXT12b2lkIDAsYz12LnZpZXdNYXBwZXIoaSxkKSxiIT09Yz9iOmEpfSksdy5zZWxlY3Q9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlPXt9O2Vbdi5pdGVtTmFtZV09Yz13Lm1hdGNoZXNbYV0ubW9kZWwsYj12Lm1vZGVsTWFwcGVyKGksZSksdShpLGIpLGwuJHNldFZhbGlkaXR5KCJlZGl0YWJsZSIsITApLHIoaSx7JGl0ZW06YywkbW9kZWw6YiwkbGFiZWw6di52aWV3TWFwcGVyKGksZSl9KSx6KCksZChmdW5jdGlvbigpe2pbMF0uZm9jdXMoKX0sMCwhMSl9LGouYmluZCgia2V5ZG93biIsZnVuY3Rpb24oYSl7MCE9PXcubWF0Y2hlcy5sZW5ndGgmJi0xIT09aC5pbmRleE9mKGEud2hpY2gpJiYoYS5wcmV2ZW50RGVmYXVsdCgpLDQwPT09YS53aGljaD8ody5hY3RpdmVJZHg9KHcuYWN0aXZlSWR4KzEpJXcubWF0Y2hlcy5sZW5ndGgsdy4kZGlnZXN0KCkpOjM4PT09YS53aGljaD8ody5hY3RpdmVJZHg9KHcuYWN0aXZlSWR4P3cuYWN0aXZlSWR4OncubWF0Y2hlcy5sZW5ndGgpLTEsdy4kZGlnZXN0KCkpOjEzPT09YS53aGljaHx8OT09PWEud2hpY2g/dy4kYXBwbHkoZnVuY3Rpb24oKXt3LnNlbGVjdCh3LmFjdGl2ZUlkeCl9KToyNz09PWEud2hpY2gmJihhLnN0b3BQcm9wYWdhdGlvbigpLHooKSx3LiRkaWdlc3QoKSkpfSksai5iaW5kKCJibHVyIixmdW5jdGlvbigpe209ITF9KTt2YXIgRD1mdW5jdGlvbihhKXtqWzBdIT09YS50YXJnZXQmJih6KCksdy4kZGlnZXN0KCkpfTtlLmJpbmQoImNsaWNrIixEKSxpLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7ZS51bmJpbmQoImNsaWNrIixEKX0pO3ZhciBFPWEoeSkodyk7dD9lLmZpbmQoImJvZHkiKS5hcHBlbmQoRSk6ai5hZnRlcihFKX19fV0pLmRpcmVjdGl2ZSgidHlwZWFoZWFkUG9wdXAiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIsc2NvcGU6e21hdGNoZXM6Ij0iLHF1ZXJ5OiI9IixhY3RpdmU6Ij0iLHBvc2l0aW9uOiI9IixzZWxlY3Q6IiYifSxyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS90eXBlYWhlYWQvdHlwZWFoZWFkLXBvcHVwLmh0bWwiLGxpbms6ZnVuY3Rpb24oYSxiLGMpe2EudGVtcGxhdGVVcmw9Yy50ZW1wbGF0ZVVybCxhLmlzT3Blbj1mdW5jdGlvbigpe3JldHVybiBhLm1hdGNoZXMubGVuZ3RoPjB9LGEuaXNBY3RpdmU9ZnVuY3Rpb24oYil7cmV0dXJuIGEuYWN0aXZlPT1ifSxhLnNlbGVjdEFjdGl2ZT1mdW5jdGlvbihiKXthLmFjdGl2ZT1ifSxhLnNlbGVjdE1hdGNoPWZ1bmN0aW9uKGIpe2Euc2VsZWN0KHthY3RpdmVJZHg6Yn0pfX19fSkuZGlyZWN0aXZlKCJ0eXBlYWhlYWRNYXRjaCIsWyIkaHR0cCIsIiR0ZW1wbGF0ZUNhY2hlIiwiJGNvbXBpbGUiLCIkcGFyc2UiLGZ1bmN0aW9uKGEsYixjLGQpe3JldHVybntyZXN0cmljdDoiRUEiLHNjb3BlOntpbmRleDoiPSIsbWF0Y2g6Ij0iLHF1ZXJ5OiI9In0sbGluazpmdW5jdGlvbihlLGYsZyl7dmFyIGg9ZChnLnRlbXBsYXRlVXJsKShlLiRwYXJlbnQpfHwidGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1tYXRjaC5odG1sIjthLmdldChoLHtjYWNoZTpifSkuc3VjY2VzcyhmdW5jdGlvbihhKXtmLnJlcGxhY2VXaXRoKGMoYS50cmltKCkpKGUpKX0pfX19XSkuZmlsdGVyKCJ0eXBlYWhlYWRIaWdobGlnaHQiLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtyZXR1cm4gYS5yZXBsYWNlKC8oWy4/KiteJFtcXVxcKCl7fXwtXSkvZywiXFwkMSIpfXJldHVybiBmdW5jdGlvbihiLGMpe3JldHVybiBjPygiIitiKS5yZXBsYWNlKG5ldyBSZWdFeHAoYShjKSwiZ2kiKSwiPHN0cm9uZz4kJjwvc3Ryb25nPiIpOmJ9fSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2FjY29yZGlvbi9hY2NvcmRpb24tZ3JvdXAuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi1ncm91cC5odG1sIiwnPGRpdiBjbGFzcz0icGFuZWwgcGFuZWwtZGVmYXVsdCI+XG4gIDxkaXYgY2xhc3M9InBhbmVsLWhlYWRpbmciPlxuICAgIDxoNCBjbGFzcz0icGFuZWwtdGl0bGUiPlxuICAgICAgPGEgY2xhc3M9ImFjY29yZGlvbi10b2dnbGUiIG5nLWNsaWNrPSJ0b2dnbGVPcGVuKCkiIGFjY29yZGlvbi10cmFuc2NsdWRlPSJoZWFkaW5nIj48c3BhbiBuZy1jbGFzcz0ie1wndGV4dC1tdXRlZFwnOiBpc0Rpc2FibGVkfSI+e3toZWFkaW5nfX08L3NwYW4+PC9hPlxuICAgIDwvaDQ+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJwYW5lbC1jb2xsYXBzZSIgY29sbGFwc2U9IiFpc09wZW4iPlxuCSAgPGRpdiBjbGFzcz0icGFuZWwtYm9keSIgbmctdHJhbnNjbHVkZT48L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9hY2NvcmRpb24vYWNjb3JkaW9uLmh0bWwiLCc8ZGl2IGNsYXNzPSJwYW5lbC1ncm91cCIgbmctdHJhbnNjbHVkZT48L2Rpdj4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvYWxlcnQvYWxlcnQuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvYWxlcnQvYWxlcnQuaHRtbCIsJzxkaXYgY2xhc3M9ImFsZXJ0IiBuZy1jbGFzcz0ie1wnYWxlcnQte3t0eXBlIHx8IFwnd2FybmluZ1wnfX1cJzogdHJ1ZSwgXCdhbGVydC1kaXNtaXNzYWJsZVwnOiBjbG9zZWFibGV9IiByb2xlPSJhbGVydCI+XG4gICAgPGJ1dHRvbiBuZy1zaG93PSJjbG9zZWFibGUiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBuZy1jbGljaz0iY2xvc2UoKSI+XG4gICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mdGltZXM7PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+Q2xvc2U8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGRpdiBuZy10cmFuc2NsdWRlPjwvZGl2PlxuPC9kaXY+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvY2Fyb3VzZWwvY2Fyb3VzZWwuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvY2Fyb3VzZWwvY2Fyb3VzZWwuaHRtbCIsJzxkaXYgbmctbW91c2VlbnRlcj0icGF1c2UoKSIgbmctbW91c2VsZWF2ZT0icGxheSgpIiBjbGFzcz0iY2Fyb3VzZWwiIG5nLXN3aXBlLXJpZ2h0PSJwcmV2KCkiIG5nLXN3aXBlLWxlZnQ9Im5leHQoKSI+XG4gICAgPG9sIGNsYXNzPSJjYXJvdXNlbC1pbmRpY2F0b3JzIiBuZy1zaG93PSJzbGlkZXMubGVuZ3RoID4gMSI+XG4gICAgICAgIDxsaSBuZy1yZXBlYXQ9InNsaWRlIGluIHNsaWRlcyB0cmFjayBieSAkaW5kZXgiIG5nLWNsYXNzPSJ7YWN0aXZlOiBpc0FjdGl2ZShzbGlkZSl9IiBuZy1jbGljaz0ic2VsZWN0KHNsaWRlKSI+PC9saT5cbiAgICA8L29sPlxuICAgIDxkaXYgY2xhc3M9ImNhcm91c2VsLWlubmVyIiBuZy10cmFuc2NsdWRlPjwvZGl2PlxuICAgIDxhIGNsYXNzPSJsZWZ0IGNhcm91c2VsLWNvbnRyb2wiIG5nLWNsaWNrPSJwcmV2KCkiIG5nLXNob3c9InNsaWRlcy5sZW5ndGggPiAxIj48c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLWxlZnQiPjwvc3Bhbj48L2E+XG4gICAgPGEgY2xhc3M9InJpZ2h0IGNhcm91c2VsLWNvbnRyb2wiIG5nLWNsaWNrPSJuZXh0KCkiIG5nLXNob3c9InNsaWRlcy5sZW5ndGggPiAxIj48c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0Ij48L3NwYW4+PC9hPlxuPC9kaXY+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvY2Fyb3VzZWwvc2xpZGUuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvY2Fyb3VzZWwvc2xpZGUuaHRtbCIsIjxkaXYgbmctY2xhc3M9XCJ7XG4gICAgJ2FjdGl2ZSc6IGxlYXZpbmcgfHwgKGFjdGl2ZSAmJiAhZW50ZXJpbmcpLFxuICAgICdwcmV2JzogKG5leHQgfHwgYWN0aXZlKSAmJiBkaXJlY3Rpb249PSdwcmV2JyxcbiAgICAnbmV4dCc6IChuZXh0IHx8IGFjdGl2ZSkgJiYgZGlyZWN0aW9uPT0nbmV4dCcsXG4gICAgJ3JpZ2h0JzogZGlyZWN0aW9uPT0ncHJldicsXG4gICAgJ2xlZnQnOiBkaXJlY3Rpb249PSduZXh0J1xuICB9XCIgY2xhc3M9XCJpdGVtIHRleHQtY2VudGVyXCIgbmctdHJhbnNjbHVkZT48L2Rpdj5cbiIpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL2RhdGVwaWNrZXIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmh0bWwiLCc8ZGl2IG5nLXN3aXRjaD0iZGF0ZXBpY2tlck1vZGUiIHJvbGU9ImFwcGxpY2F0aW9uIiBuZy1rZXlkb3duPSJrZXlkb3duKCRldmVudCkiPlxuICA8ZGF5cGlja2VyIG5nLXN3aXRjaC13aGVuPSJkYXkiIHRhYmluZGV4PSIwIj48L2RheXBpY2tlcj5cbiAgPG1vbnRocGlja2VyIG5nLXN3aXRjaC13aGVuPSJtb250aCIgdGFiaW5kZXg9IjAiPjwvbW9udGhwaWNrZXI+XG4gIDx5ZWFycGlja2VyIG5nLXN3aXRjaC13aGVuPSJ5ZWFyIiB0YWJpbmRleD0iMCI+PC95ZWFycGlja2VyPlxuPC9kaXY+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2RhdGVwaWNrZXIvZGF5Lmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL2RhdGVwaWNrZXIvZGF5Lmh0bWwiLCc8dGFibGUgcm9sZT0iZ3JpZCIgYXJpYS1sYWJlbGxlZGJ5PSJ7e3VuaXF1ZUlkfX0tdGl0bGUiIGFyaWEtYWN0aXZlZGVzY2VuZGFudD0ie3thY3RpdmVEYXRlSWR9fSI+XG4gIDx0aGVhZD5cbiAgICA8dHI+XG4gICAgICA8dGg+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIHB1bGwtbGVmdCIgbmctY2xpY2s9Im1vdmUoLTEpIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tbGVmdCI+PC9pPjwvYnV0dG9uPjwvdGg+XG4gICAgICA8dGggY29sc3Bhbj0ie3s1ICsgc2hvd1dlZWtzfX0iPjxidXR0b24gaWQ9Int7dW5pcXVlSWR9fS10aXRsZSIgcm9sZT0iaGVhZGluZyIgYXJpYS1saXZlPSJhc3NlcnRpdmUiIGFyaWEtYXRvbWljPSJ0cnVlIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIiBuZy1jbGljaz0idG9nZ2xlTW9kZSgpIiB0YWJpbmRleD0iLTEiIHN0eWxlPSJ3aWR0aDoxMDAlOyI+PHN0cm9uZz57e3RpdGxlfX08L3N0cm9uZz48L2J1dHRvbj48L3RoPlxuICAgICAgPHRoPjxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBwdWxsLXJpZ2h0IiBuZy1jbGljaz0ibW92ZSgxKSIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0Ij48L2k+PC9idXR0b24+PC90aD5cbiAgICA8L3RyPlxuICAgIDx0cj5cbiAgICAgIDx0aCBuZy1zaG93PSJzaG93V2Vla3MiIGNsYXNzPSJ0ZXh0LWNlbnRlciI+PC90aD5cbiAgICAgIDx0aCBuZy1yZXBlYXQ9ImxhYmVsIGluIGxhYmVscyB0cmFjayBieSAkaW5kZXgiIGNsYXNzPSJ0ZXh0LWNlbnRlciI+PHNtYWxsIGFyaWEtbGFiZWw9Int7bGFiZWwuZnVsbH19Ij57e2xhYmVsLmFiYnJ9fTwvc21hbGw+PC90aD5cbiAgICA8L3RyPlxuICA8L3RoZWFkPlxuICA8dGJvZHk+XG4gICAgPHRyIG5nLXJlcGVhdD0icm93IGluIHJvd3MgdHJhY2sgYnkgJGluZGV4Ij5cbiAgICAgIDx0ZCBuZy1zaG93PSJzaG93V2Vla3MiIGNsYXNzPSJ0ZXh0LWNlbnRlciBoNiI+PGVtPnt7IHdlZWtOdW1iZXJzWyRpbmRleF0gfX08L2VtPjwvdGQ+XG4gICAgICA8dGQgbmctcmVwZWF0PSJkdCBpbiByb3cgdHJhY2sgYnkgZHQuZGF0ZSIgY2xhc3M9InRleHQtY2VudGVyIiByb2xlPSJncmlkY2VsbCIgaWQ9Int7ZHQudWlkfX0iIGFyaWEtZGlzYWJsZWQ9Int7ISFkdC5kaXNhYmxlZH19Ij5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIHN0eWxlPSJ3aWR0aDoxMDAlOyIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20iIG5nLWNsYXNzPSJ7XCdidG4taW5mb1wnOiBkdC5zZWxlY3RlZCwgYWN0aXZlOiBpc0FjdGl2ZShkdCl9IiBuZy1jbGljaz0ic2VsZWN0KGR0LmRhdGUpIiBuZy1kaXNhYmxlZD0iZHQuZGlzYWJsZWQiIHRhYmluZGV4PSItMSI+PHNwYW4gbmctY2xhc3M9IntcJ3RleHQtbXV0ZWRcJzogZHQuc2Vjb25kYXJ5LCBcJ3RleHQtaW5mb1wnOiBkdC5jdXJyZW50fSI+e3tkdC5sYWJlbH19PC9zcGFuPjwvYnV0dG9uPlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L3Rib2R5PlxuPC90YWJsZT5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL21vbnRoLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL2RhdGVwaWNrZXIvbW9udGguaHRtbCIsJzx0YWJsZSByb2xlPSJncmlkIiBhcmlhLWxhYmVsbGVkYnk9Int7dW5pcXVlSWR9fS10aXRsZSIgYXJpYS1hY3RpdmVkZXNjZW5kYW50PSJ7e2FjdGl2ZURhdGVJZH19Ij5cbiAgPHRoZWFkPlxuICAgIDx0cj5cbiAgICAgIDx0aD48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20gcHVsbC1sZWZ0IiBuZy1jbGljaz0ibW92ZSgtMSkiIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1sZWZ0Ij48L2k+PC9idXR0b24+PC90aD5cbiAgICAgIDx0aD48YnV0dG9uIGlkPSJ7e3VuaXF1ZUlkfX0tdGl0bGUiIHJvbGU9ImhlYWRpbmciIGFyaWEtbGl2ZT0iYXNzZXJ0aXZlIiBhcmlhLWF0b21pYz0idHJ1ZSIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSIgbmctY2xpY2s9InRvZ2dsZU1vZGUoKSIgdGFiaW5kZXg9Ii0xIiBzdHlsZT0id2lkdGg6MTAwJTsiPjxzdHJvbmc+e3t0aXRsZX19PC9zdHJvbmc+PC9idXR0b24+PC90aD5cbiAgICAgIDx0aD48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20gcHVsbC1yaWdodCIgbmctY2xpY2s9Im1vdmUoMSkiIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1yaWdodCI+PC9pPjwvYnV0dG9uPjwvdGg+XG4gICAgPC90cj5cbiAgPC90aGVhZD5cbiAgPHRib2R5PlxuICAgIDx0ciBuZy1yZXBlYXQ9InJvdyBpbiByb3dzIHRyYWNrIGJ5ICRpbmRleCI+XG4gICAgICA8dGQgbmctcmVwZWF0PSJkdCBpbiByb3cgdHJhY2sgYnkgZHQuZGF0ZSIgY2xhc3M9InRleHQtY2VudGVyIiByb2xlPSJncmlkY2VsbCIgaWQ9Int7ZHQudWlkfX0iIGFyaWEtZGlzYWJsZWQ9Int7ISFkdC5kaXNhYmxlZH19Ij5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIHN0eWxlPSJ3aWR0aDoxMDAlOyIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgbmctY2xhc3M9IntcJ2J0bi1pbmZvXCc6IGR0LnNlbGVjdGVkLCBhY3RpdmU6IGlzQWN0aXZlKGR0KX0iIG5nLWNsaWNrPSJzZWxlY3QoZHQuZGF0ZSkiIG5nLWRpc2FibGVkPSJkdC5kaXNhYmxlZCIgdGFiaW5kZXg9Ii0xIj48c3BhbiBuZy1jbGFzcz0ie1wndGV4dC1pbmZvXCc6IGR0LmN1cnJlbnR9Ij57e2R0LmxhYmVsfX08L3NwYW4+PC9idXR0b24+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvdGJvZHk+XG48L3RhYmxlPlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2RhdGVwaWNrZXIvcG9wdXAuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvZGF0ZXBpY2tlci9wb3B1cC5odG1sIiwnPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51IiBuZy1zdHlsZT0ie2Rpc3BsYXk6IChpc09wZW4gJiYgXCdibG9ja1wnKSB8fCBcJ25vbmVcJywgdG9wOiBwb3NpdGlvbi50b3ArXCdweFwnLCBsZWZ0OiBwb3NpdGlvbi5sZWZ0K1wncHhcJ30iIG5nLWtleWRvd249ImtleWRvd24oJGV2ZW50KSI+XG4JPGxpIG5nLXRyYW5zY2x1ZGU+PC9saT5cbgk8bGkgbmctaWY9InNob3dCdXR0b25CYXIiIHN0eWxlPSJwYWRkaW5nOjEwcHggOXB4IDJweCI+XG4JCTxzcGFuIGNsYXNzPSJidG4tZ3JvdXAiPlxuCQkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1pbmZvIiBuZy1jbGljaz0ic2VsZWN0KFwndG9kYXlcJykiPnt7IGdldFRleHQoXCdjdXJyZW50XCcpIH19PC9idXR0b24+XG4JCQk8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc20gYnRuLWRhbmdlciIgbmctY2xpY2s9InNlbGVjdChudWxsKSI+e3sgZ2V0VGV4dChcJ2NsZWFyXCcpIH19PC9idXR0b24+XG4JCTwvc3Bhbj5cbgkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1zdWNjZXNzIHB1bGwtcmlnaHQiIG5nLWNsaWNrPSJjbG9zZSgpIj57eyBnZXRUZXh0KFwnY2xvc2VcJykgfX08L2J1dHRvbj5cbgk8L2xpPlxuPC91bD5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL3llYXIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvZGF0ZXBpY2tlci95ZWFyLmh0bWwiLCc8dGFibGUgcm9sZT0iZ3JpZCIgYXJpYS1sYWJlbGxlZGJ5PSJ7e3VuaXF1ZUlkfX0tdGl0bGUiIGFyaWEtYWN0aXZlZGVzY2VuZGFudD0ie3thY3RpdmVEYXRlSWR9fSI+XG4gIDx0aGVhZD5cbiAgICA8dHI+XG4gICAgICA8dGg+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIHB1bGwtbGVmdCIgbmctY2xpY2s9Im1vdmUoLTEpIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tbGVmdCI+PC9pPjwvYnV0dG9uPjwvdGg+XG4gICAgICA8dGggY29sc3Bhbj0iMyI+PGJ1dHRvbiBpZD0ie3t1bmlxdWVJZH19LXRpdGxlIiByb2xlPSJoZWFkaW5nIiBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgYXJpYS1hdG9taWM9InRydWUiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20iIG5nLWNsaWNrPSJ0b2dnbGVNb2RlKCkiIHRhYmluZGV4PSItMSIgc3R5bGU9IndpZHRoOjEwMCU7Ij48c3Ryb25nPnt7dGl0bGV9fTwvc3Ryb25nPjwvYnV0dG9uPjwvdGg+XG4gICAgICA8dGg+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIHB1bGwtcmlnaHQiIG5nLWNsaWNrPSJtb3ZlKDEpIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQiPjwvaT48L2J1dHRvbj48L3RoPlxuICAgIDwvdHI+XG4gIDwvdGhlYWQ+XG4gIDx0Ym9keT5cbiAgICA8dHIgbmctcmVwZWF0PSJyb3cgaW4gcm93cyB0cmFjayBieSAkaW5kZXgiPlxuICAgICAgPHRkIG5nLXJlcGVhdD0iZHQgaW4gcm93IHRyYWNrIGJ5IGR0LmRhdGUiIGNsYXNzPSJ0ZXh0LWNlbnRlciIgcm9sZT0iZ3JpZGNlbGwiIGlkPSJ7e2R0LnVpZH19IiBhcmlhLWRpc2FibGVkPSJ7eyEhZHQuZGlzYWJsZWR9fSI+XG4gICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBzdHlsZT0id2lkdGg6MTAwJTsiIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiIG5nLWNsYXNzPSJ7XCdidG4taW5mb1wnOiBkdC5zZWxlY3RlZCwgYWN0aXZlOiBpc0FjdGl2ZShkdCl9IiBuZy1jbGljaz0ic2VsZWN0KGR0LmRhdGUpIiBuZy1kaXNhYmxlZD0iZHQuZGlzYWJsZWQiIHRhYmluZGV4PSItMSI+PHNwYW4gbmctY2xhc3M9IntcJ3RleHQtaW5mb1wnOiBkdC5jdXJyZW50fSI+e3tkdC5sYWJlbH19PC9zcGFuPjwvYnV0dG9uPlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L3Rib2R5PlxuPC90YWJsZT5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9tb2RhbC9iYWNrZHJvcC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9tb2RhbC9iYWNrZHJvcC5odG1sIiwnPGRpdiBjbGFzcz0ibW9kYWwtYmFja2Ryb3AgZmFkZSJcbiAgICAgbmctY2xhc3M9IntpbjogYW5pbWF0ZX0iXG4gICAgIG5nLXN0eWxlPSJ7XCd6LWluZGV4XCc6IDEwNDAgKyAoaW5kZXggJiYgMSB8fCAwKSArIGluZGV4KjEwfSJcbj48L2Rpdj5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9tb2RhbC93aW5kb3cuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvbW9kYWwvd2luZG93Lmh0bWwiLCc8ZGl2IHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBjbGFzcz0ibW9kYWwgZmFkZSIgbmctY2xhc3M9IntpbjogYW5pbWF0ZX0iIG5nLXN0eWxlPSJ7XCd6LWluZGV4XCc6IDEwNTAgKyBpbmRleCoxMCwgZGlzcGxheTogXCdibG9ja1wnfSIgbmctY2xpY2s9ImNsb3NlKCRldmVudCkiPlxuICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyIgbmctY2xhc3M9IntcJ21vZGFsLXNtXCc6IHNpemUgPT0gXCdzbVwnLCBcJ21vZGFsLWxnXCc6IHNpemUgPT0gXCdsZ1wnfSI+PGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCIgbmctdHJhbnNjbHVkZT48L2Rpdj48L2Rpdj5cbjwvZGl2PicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9wYWdpbmF0aW9uL3BhZ2VyLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3BhZ2luYXRpb24vcGFnZXIuaHRtbCIsJzx1bCBjbGFzcz0icGFnZXIiPlxuICA8bGkgbmctY2xhc3M9IntkaXNhYmxlZDogbm9QcmV2aW91cygpLCBwcmV2aW91czogYWxpZ259Ij48YSBocmVmIG5nLWNsaWNrPSJzZWxlY3RQYWdlKHBhZ2UgLSAxKSI+e3tnZXRUZXh0KFwncHJldmlvdXNcJyl9fTwvYT48L2xpPlxuICA8bGkgbmctY2xhc3M9IntkaXNhYmxlZDogbm9OZXh0KCksIG5leHQ6IGFsaWdufSI+PGEgaHJlZiBuZy1jbGljaz0ic2VsZWN0UGFnZShwYWdlICsgMSkiPnt7Z2V0VGV4dChcJ25leHRcJyl9fTwvYT48L2xpPlxuPC91bD4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5odG1sIiwnPHVsIGNsYXNzPSJwYWdpbmF0aW9uIj5cbiAgPGxpIG5nLWlmPSJib3VuZGFyeUxpbmtzIiBuZy1jbGFzcz0ie2Rpc2FibGVkOiBub1ByZXZpb3VzKCl9Ij48YSBocmVmIG5nLWNsaWNrPSJzZWxlY3RQYWdlKDEpIj57e2dldFRleHQoXCdmaXJzdFwnKX19PC9hPjwvbGk+XG4gIDxsaSBuZy1pZj0iZGlyZWN0aW9uTGlua3MiIG5nLWNsYXNzPSJ7ZGlzYWJsZWQ6IG5vUHJldmlvdXMoKX0iPjxhIGhyZWYgbmctY2xpY2s9InNlbGVjdFBhZ2UocGFnZSAtIDEpIj57e2dldFRleHQoXCdwcmV2aW91c1wnKX19PC9hPjwvbGk+XG4gIDxsaSBuZy1yZXBlYXQ9InBhZ2UgaW4gcGFnZXMgdHJhY2sgYnkgJGluZGV4IiBuZy1jbGFzcz0ie2FjdGl2ZTogcGFnZS5hY3RpdmV9Ij48YSBocmVmIG5nLWNsaWNrPSJzZWxlY3RQYWdlKHBhZ2UubnVtYmVyKSI+e3twYWdlLnRleHR9fTwvYT48L2xpPlxuICA8bGkgbmctaWY9ImRpcmVjdGlvbkxpbmtzIiBuZy1jbGFzcz0ie2Rpc2FibGVkOiBub05leHQoKX0iPjxhIGhyZWYgbmctY2xpY2s9InNlbGVjdFBhZ2UocGFnZSArIDEpIj57e2dldFRleHQoXCduZXh0XCcpfX08L2E+PC9saT5cbiAgPGxpIG5nLWlmPSJib3VuZGFyeUxpbmtzIiBuZy1jbGFzcz0ie2Rpc2FibGVkOiBub05leHQoKX0iPjxhIGhyZWYgbmctY2xpY2s9InNlbGVjdFBhZ2UodG90YWxQYWdlcykiPnt7Z2V0VGV4dChcJ2xhc3RcJyl9fTwvYT48L2xpPlxuPC91bD4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLWh0bWwtdW5zYWZlLXBvcHVwLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3Rvb2x0aXAvdG9vbHRpcC1odG1sLXVuc2FmZS1wb3B1cC5odG1sIiwnPGRpdiBjbGFzcz0idG9vbHRpcCB7e3BsYWNlbWVudH19IiBuZy1jbGFzcz0ieyBpbjogaXNPcGVuKCksIGZhZGU6IGFuaW1hdGlvbigpIH0iPlxuICA8ZGl2IGNsYXNzPSJ0b29sdGlwLWFycm93Ij48L2Rpdj5cbiAgPGRpdiBjbGFzcz0idG9vbHRpcC1pbm5lciIgYmluZC1odG1sLXVuc2FmZT0iY29udGVudCI+PC9kaXY+XG48L2Rpdj5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90b29sdGlwL3Rvb2x0aXAtcG9wdXAuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLXBvcHVwLmh0bWwiLCc8ZGl2IGNsYXNzPSJ0b29sdGlwIHt7cGxhY2VtZW50fX0iIG5nLWNsYXNzPSJ7IGluOiBpc09wZW4oKSwgZmFkZTogYW5pbWF0aW9uKCkgfSI+XG4gIDxkaXYgY2xhc3M9InRvb2x0aXAtYXJyb3ciPjwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0b29sdGlwLWlubmVyIiBuZy1iaW5kPSJjb250ZW50Ij48L2Rpdj5cbjwvZGl2PlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3BvcG92ZXIvcG9wb3Zlci5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9wb3BvdmVyL3BvcG92ZXIuaHRtbCIsJzxkaXYgY2xhc3M9InBvcG92ZXIge3twbGFjZW1lbnR9fSIgbmctY2xhc3M9InsgaW46IGlzT3BlbigpLCBmYWRlOiBhbmltYXRpb24oKSB9Ij5cbiAgPGRpdiBjbGFzcz0iYXJyb3ciPjwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InBvcG92ZXItaW5uZXIiPlxuICAgICAgPGgzIGNsYXNzPSJwb3BvdmVyLXRpdGxlIiBuZy1iaW5kPSJ0aXRsZSIgbmctc2hvdz0idGl0bGUiPjwvaDM+XG4gICAgICA8ZGl2IGNsYXNzPSJwb3BvdmVyLWNvbnRlbnQiIG5nLWJpbmQ9ImNvbnRlbnQiPjwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3Byb2dyZXNzYmFyL2Jhci5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9iYXIuaHRtbCIsJzxkaXYgY2xhc3M9InByb2dyZXNzLWJhciIgbmctY2xhc3M9InR5cGUgJiYgXCdwcm9ncmVzcy1iYXItXCcgKyB0eXBlIiByb2xlPSJwcm9ncmVzc2JhciIgYXJpYS12YWx1ZW5vdz0ie3t2YWx1ZX19IiBhcmlhLXZhbHVlbWluPSIwIiBhcmlhLXZhbHVlbWF4PSJ7e21heH19IiBuZy1zdHlsZT0ie3dpZHRoOiBwZXJjZW50ICsgXCclXCd9IiBhcmlhLXZhbHVldGV4dD0ie3twZXJjZW50IHwgbnVtYmVyOjB9fSUiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzLmh0bWwiLCc8ZGl2IGNsYXNzPSJwcm9ncmVzcyIgbmctdHJhbnNjbHVkZT48L2Rpdj4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3NiYXIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3NiYXIuaHRtbCIsJzxkaXYgY2xhc3M9InByb2dyZXNzIj5cbiAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIiBuZy1jbGFzcz0idHlwZSAmJiBcJ3Byb2dyZXNzLWJhci1cJyArIHR5cGUiIHJvbGU9InByb2dyZXNzYmFyIiBhcmlhLXZhbHVlbm93PSJ7e3ZhbHVlfX0iIGFyaWEtdmFsdWVtaW49IjAiIGFyaWEtdmFsdWVtYXg9Int7bWF4fX0iIG5nLXN0eWxlPSJ7d2lkdGg6IHBlcmNlbnQgKyBcJyVcJ30iIGFyaWEtdmFsdWV0ZXh0PSJ7e3BlcmNlbnQgfCBudW1iZXI6MH19JSIgbmctdHJhbnNjbHVkZT48L2Rpdj5cbjwvZGl2PicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9yYXRpbmcvcmF0aW5nLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3JhdGluZy9yYXRpbmcuaHRtbCIsJzxzcGFuIG5nLW1vdXNlbGVhdmU9InJlc2V0KCkiIG5nLWtleWRvd249Im9uS2V5ZG93bigkZXZlbnQpIiB0YWJpbmRleD0iMCIgcm9sZT0ic2xpZGVyIiBhcmlhLXZhbHVlbWluPSIwIiBhcmlhLXZhbHVlbWF4PSJ7e3JhbmdlLmxlbmd0aH19IiBhcmlhLXZhbHVlbm93PSJ7e3ZhbHVlfX0iPlxuICAgIDxpIG5nLXJlcGVhdD0iciBpbiByYW5nZSB0cmFjayBieSAkaW5kZXgiIG5nLW1vdXNlZW50ZXI9ImVudGVyKCRpbmRleCArIDEpIiBuZy1jbGljaz0icmF0ZSgkaW5kZXggKyAxKSIgY2xhc3M9ImdseXBoaWNvbiIgbmctY2xhc3M9IiRpbmRleCA8IHZhbHVlICYmIChyLnN0YXRlT24gfHwgXCdnbHlwaGljb24tc3RhclwnKSB8fCAoci5zdGF0ZU9mZiB8fCBcJ2dseXBoaWNvbi1zdGFyLWVtcHR5XCcpIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9InNyLW9ubHkiPih7eyAkaW5kZXggPCB2YWx1ZSA/IFwnKlwnIDogXCcgXCcgfX0pPC9zcGFuPlxuICAgIDwvaT5cbjwvc3Bhbj4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvdGFicy90YWIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdGFicy90YWIuaHRtbCIsJzxsaSBuZy1jbGFzcz0ie2FjdGl2ZTogYWN0aXZlLCBkaXNhYmxlZDogZGlzYWJsZWR9Ij5cbiAgPGEgbmctY2xpY2s9InNlbGVjdCgpIiB0YWItaGVhZGluZy10cmFuc2NsdWRlPnt7aGVhZGluZ319PC9hPlxuPC9saT5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90YWJzL3RhYnNldC10aXRsZXMuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdGFicy90YWJzZXQtdGl0bGVzLmh0bWwiLCI8dWwgY2xhc3M9XCJuYXYge3t0eXBlICYmICduYXYtJyArIHR5cGV9fVwiIG5nLWNsYXNzPVwieyduYXYtc3RhY2tlZCc6IHZlcnRpY2FsfVwiPlxuPC91bD5cbiIpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90YWJzL3RhYnNldC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS90YWJzL3RhYnNldC5odG1sIiwnXG48ZGl2PlxuICA8dWwgY2xhc3M9Im5hdiBuYXYte3t0eXBlIHx8IFwndGFic1wnfX0iIG5nLWNsYXNzPSJ7XCduYXYtc3RhY2tlZFwnOiB2ZXJ0aWNhbCwgXCduYXYtanVzdGlmaWVkXCc6IGp1c3RpZmllZH0iIG5nLXRyYW5zY2x1ZGU+PC91bD5cbiAgPGRpdiBjbGFzcz0idGFiLWNvbnRlbnQiPlxuICAgIDxkaXYgY2xhc3M9InRhYi1wYW5lIiBcbiAgICAgICAgIG5nLXJlcGVhdD0idGFiIGluIHRhYnMiIFxuICAgICAgICAgbmctY2xhc3M9InthY3RpdmU6IHRhYi5hY3RpdmV9IlxuICAgICAgICAgdGFiLWNvbnRlbnQtdHJhbnNjbHVkZT0idGFiIj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90aW1lcGlja2VyL3RpbWVwaWNrZXIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdGltZXBpY2tlci90aW1lcGlja2VyLmh0bWwiLCc8dGFibGU+XG4JPHRib2R5PlxuCQk8dHIgY2xhc3M9InRleHQtY2VudGVyIj5cbgkJCTx0ZD48YSBuZy1jbGljaz0iaW5jcmVtZW50SG91cnMoKSIgY2xhc3M9ImJ0biBidG4tbGluayI+PHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi11cCI+PC9zcGFuPjwvYT48L3RkPlxuCQkJPHRkPiZuYnNwOzwvdGQ+XG4JCQk8dGQ+PGEgbmctY2xpY2s9ImluY3JlbWVudE1pbnV0ZXMoKSIgY2xhc3M9ImJ0biBidG4tbGluayI+PHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi11cCI+PC9zcGFuPjwvYT48L3RkPlxuCQkJPHRkIG5nLXNob3c9InNob3dNZXJpZGlhbiI+PC90ZD5cbgkJPC90cj5cbgkJPHRyPlxuCQkJPHRkIHN0eWxlPSJ3aWR0aDo1MHB4OyIgY2xhc3M9ImZvcm0tZ3JvdXAiIG5nLWNsYXNzPSJ7XCdoYXMtZXJyb3JcJzogaW52YWxpZEhvdXJzfSI+XG4JCQkJPGlucHV0IHR5cGU9InRleHQiIG5nLW1vZGVsPSJob3VycyIgbmctY2hhbmdlPSJ1cGRhdGVIb3VycygpIiBjbGFzcz0iZm9ybS1jb250cm9sIHRleHQtY2VudGVyIiBuZy1tb3VzZXdoZWVsPSJpbmNyZW1lbnRIb3VycygpIiBuZy1yZWFkb25seT0icmVhZG9ubHlJbnB1dCIgbWF4bGVuZ3RoPSIyIj5cbgkJCTwvdGQ+XG4JCQk8dGQ+OjwvdGQ+XG4JCQk8dGQgc3R5bGU9IndpZHRoOjUwcHg7IiBjbGFzcz0iZm9ybS1ncm91cCIgbmctY2xhc3M9IntcJ2hhcy1lcnJvclwnOiBpbnZhbGlkTWludXRlc30iPlxuCQkJCTxpbnB1dCB0eXBlPSJ0ZXh0IiBuZy1tb2RlbD0ibWludXRlcyIgbmctY2hhbmdlPSJ1cGRhdGVNaW51dGVzKCkiIGNsYXNzPSJmb3JtLWNvbnRyb2wgdGV4dC1jZW50ZXIiIG5nLXJlYWRvbmx5PSJyZWFkb25seUlucHV0IiBtYXhsZW5ndGg9IjIiPlxuCQkJPC90ZD5cbgkJCTx0ZCBuZy1zaG93PSJzaG93TWVyaWRpYW4iPjxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IHRleHQtY2VudGVyIiBuZy1jbGljaz0idG9nZ2xlTWVyaWRpYW4oKSI+e3ttZXJpZGlhbn19PC9idXR0b24+PC90ZD5cbgkJPC90cj5cbgkJPHRyIGNsYXNzPSJ0ZXh0LWNlbnRlciI+XG4JCQk8dGQ+PGEgbmctY2xpY2s9ImRlY3JlbWVudEhvdXJzKCkiIGNsYXNzPSJidG4gYnRuLWxpbmsiPjxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tZG93biI+PC9zcGFuPjwvYT48L3RkPlxuCQkJPHRkPiZuYnNwOzwvdGQ+XG4JCQk8dGQ+PGEgbmctY2xpY2s9ImRlY3JlbWVudE1pbnV0ZXMoKSIgY2xhc3M9ImJ0biBidG4tbGluayI+PHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1kb3duIj48L3NwYW4+PC9hPjwvdGQ+XG4JCQk8dGQgbmctc2hvdz0ic2hvd01lcmlkaWFuIj48L3RkPlxuCQk8L3RyPlxuCTwvdGJvZHk+XG48L3RhYmxlPlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3R5cGVhaGVhZC90eXBlYWhlYWQtbWF0Y2guaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1tYXRjaC5odG1sIiwnPGEgdGFiaW5kZXg9Ii0xIiBiaW5kLWh0bWwtdW5zYWZlPSJtYXRjaC5sYWJlbCB8IHR5cGVhaGVhZEhpZ2hsaWdodDpxdWVyeSI+PC9hPicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90eXBlYWhlYWQvdHlwZWFoZWFkLXBvcHVwLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3R5cGVhaGVhZC90eXBlYWhlYWQtcG9wdXAuaHRtbCIsJzx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSIgbmctaWY9ImlzT3BlbigpIiBuZy1zdHlsZT0ie3RvcDogcG9zaXRpb24udG9wK1wncHhcJywgbGVmdDogcG9zaXRpb24ubGVmdCtcJ3B4XCd9IiBzdHlsZT0iZGlzcGxheTogYmxvY2s7IiByb2xlPSJsaXN0Ym94IiBhcmlhLWhpZGRlbj0ie3shaXNPcGVuKCl9fSI+XG4gICAgPGxpIG5nLXJlcGVhdD0ibWF0Y2ggaW4gbWF0Y2hlcyB0cmFjayBieSAkaW5kZXgiIG5nLWNsYXNzPSJ7YWN0aXZlOiBpc0FjdGl2ZSgkaW5kZXgpIH0iIG5nLW1vdXNlZW50ZXI9InNlbGVjdEFjdGl2ZSgkaW5kZXgpIiBuZy1jbGljaz0ic2VsZWN0TWF0Y2goJGluZGV4KSIgcm9sZT0ib3B0aW9uIiBpZD0ie3ttYXRjaC5pZH19Ij5cbiAgICAgICAgPGRpdiB0eXBlYWhlYWQtbWF0Y2ggaW5kZXg9IiRpbmRleCIgbWF0Y2g9Im1hdGNoIiBxdWVyeT0icXVlcnkiIHRlbXBsYXRlLXVybD0idGVtcGxhdGVVcmwiPjwvZGl2PlxuICAgIDwvbGk+XG48L3VsPicpCit9XSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3VpLWJvb3RzdHJhcC10cGxzLTAuMTEuMC5taW4uanMgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvdWktYm9vdHN0cmFwLXRwbHMtMC4xMS4wLm1pbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTZhODYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3VpLWJvb3RzdHJhcC10cGxzLTAuMTEuMC5taW4uanMKQEAgLTAsMCArMSwxMCBAQAorLyoKKyAqIGFuZ3VsYXItdWktYm9vdHN0cmFwCisgKiBodHRwOi8vYW5ndWxhci11aS5naXRodWIuaW8vYm9vdHN0cmFwLworCisgKiBWZXJzaW9uOiAwLjExLjAgLSAyMDE0LTA1LTAxCisgKiBMaWNlbnNlOiBNSVQKKyAqLworYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcCIsWyJ1aS5ib290c3RyYXAudHBscyIsInVpLmJvb3RzdHJhcC50cmFuc2l0aW9uIiwidWkuYm9vdHN0cmFwLmNvbGxhcHNlIiwidWkuYm9vdHN0cmFwLmFjY29yZGlvbiIsInVpLmJvb3RzdHJhcC5hbGVydCIsInVpLmJvb3RzdHJhcC5iaW5kSHRtbCIsInVpLmJvb3RzdHJhcC5idXR0b25zIiwidWkuYm9vdHN0cmFwLmNhcm91c2VsIiwidWkuYm9vdHN0cmFwLmRhdGVwYXJzZXIiLCJ1aS5ib290c3RyYXAucG9zaXRpb24iLCJ1aS5ib290c3RyYXAuZGF0ZXBpY2tlciIsInVpLmJvb3RzdHJhcC5kcm9wZG93biIsInVpLmJvb3RzdHJhcC5tb2RhbCIsInVpLmJvb3RzdHJhcC5wYWdpbmF0aW9uIiwidWkuYm9vdHN0cmFwLnRvb2x0aXAiLCJ1aS5ib290c3RyYXAucG9wb3ZlciIsInVpLmJvb3RzdHJhcC5wcm9ncmVzc2JhciIsInVpLmJvb3RzdHJhcC5yYXRpbmciLCJ1aS5ib290c3RyYXAudGFicyIsInVpLmJvb3RzdHJhcC50aW1lcGlja2VyIiwidWkuYm9vdHN0cmFwLnR5cGVhaGVhZCJdKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnRwbHMiLFsidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi1ncm91cC5odG1sIiwidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi5odG1sIiwidGVtcGxhdGUvYWxlcnQvYWxlcnQuaHRtbCIsInRlbXBsYXRlL2Nhcm91c2VsL2Nhcm91c2VsLmh0bWwiLCJ0ZW1wbGF0ZS9jYXJvdXNlbC9zbGlkZS5odG1sIiwidGVtcGxhdGUvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmh0bWwiLCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL2RheS5odG1sIiwidGVtcGxhdGUvZGF0ZXBpY2tlci9tb250aC5odG1sIiwidGVtcGxhdGUvZGF0ZXBpY2tlci9wb3B1cC5odG1sIiwidGVtcGxhdGUvZGF0ZXBpY2tlci95ZWFyLmh0bWwiLCJ0ZW1wbGF0ZS9tb2RhbC9iYWNrZHJvcC5odG1sIiwidGVtcGxhdGUvbW9kYWwvd2luZG93Lmh0bWwiLCJ0ZW1wbGF0ZS9wYWdpbmF0aW9uL3BhZ2VyLmh0bWwiLCJ0ZW1wbGF0ZS9wYWdpbmF0aW9uL3BhZ2luYXRpb24uaHRtbCIsInRlbXBsYXRlL3Rvb2x0aXAvdG9vbHRpcC1odG1sLXVuc2FmZS1wb3B1cC5odG1sIiwidGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLXBvcHVwLmh0bWwiLCJ0ZW1wbGF0ZS9wb3BvdmVyL3BvcG92ZXIuaHRtbCIsInRlbXBsYXRlL3Byb2dyZXNzYmFyL2Jhci5odG1sIiwidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3MuaHRtbCIsInRlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzYmFyLmh0bWwiLCJ0ZW1wbGF0ZS9yYXRpbmcvcmF0aW5nLmh0bWwiLCJ0ZW1wbGF0ZS90YWJzL3RhYi5odG1sIiwidGVtcGxhdGUvdGFicy90YWJzZXQuaHRtbCIsInRlbXBsYXRlL3RpbWVwaWNrZXIvdGltZXBpY2tlci5odG1sIiwidGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1tYXRjaC5odG1sIiwidGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1wb3B1cC5odG1sIl0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAudHJhbnNpdGlvbiIsW10pLmZhY3RvcnkoIiR0cmFuc2l0aW9uIixbIiRxIiwiJHRpbWVvdXQiLCIkcm9vdFNjb3BlIixmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXtmb3IodmFyIGIgaW4gYSlpZih2b2lkIDAhPT1mLnN0eWxlW2JdKXJldHVybiBhW2JdfXZhciBlPWZ1bmN0aW9uKGQsZixnKXtnPWd8fHt9O3ZhciBoPWEuZGVmZXIoKSxpPWVbZy5hbmltYXRpb24/ImFuaW1hdGlvbkVuZEV2ZW50TmFtZSI6InRyYW5zaXRpb25FbmRFdmVudE5hbWUiXSxqPWZ1bmN0aW9uKCl7Yy4kYXBwbHkoZnVuY3Rpb24oKXtkLnVuYmluZChpLGopLGgucmVzb2x2ZShkKX0pfTtyZXR1cm4gaSYmZC5iaW5kKGksaiksYihmdW5jdGlvbigpe2FuZ3VsYXIuaXNTdHJpbmcoZik/ZC5hZGRDbGFzcyhmKTphbmd1bGFyLmlzRnVuY3Rpb24oZik/ZihkKTphbmd1bGFyLmlzT2JqZWN0KGYpJiZkLmNzcyhmKSxpfHxoLnJlc29sdmUoZCl9KSxoLnByb21pc2UuY2FuY2VsPWZ1bmN0aW9uKCl7aSYmZC51bmJpbmQoaSxqKSxoLnJlamVjdCgiVHJhbnNpdGlvbiBjYW5jZWxsZWQiKX0saC5wcm9taXNlfSxmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyYW5zIiksZz17V2Via2l0VHJhbnNpdGlvbjoid2Via2l0VHJhbnNpdGlvbkVuZCIsTW96VHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCIsT1RyYW5zaXRpb246Im9UcmFuc2l0aW9uRW5kIix0cmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIn0saD17V2Via2l0VHJhbnNpdGlvbjoid2Via2l0QW5pbWF0aW9uRW5kIixNb3pUcmFuc2l0aW9uOiJhbmltYXRpb25lbmQiLE9UcmFuc2l0aW9uOiJvQW5pbWF0aW9uRW5kIix0cmFuc2l0aW9uOiJhbmltYXRpb25lbmQifTtyZXR1cm4gZS50cmFuc2l0aW9uRW5kRXZlbnROYW1lPWQoZyksZS5hbmltYXRpb25FbmRFdmVudE5hbWU9ZChoKSxlfV0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAuY29sbGFwc2UiLFsidWkuYm9vdHN0cmFwLnRyYW5zaXRpb24iXSkuZGlyZWN0aXZlKCJjb2xsYXBzZSIsWyIkdHJhbnNpdGlvbiIsZnVuY3Rpb24oYSl7cmV0dXJue2xpbms6ZnVuY3Rpb24oYixjLGQpe2Z1bmN0aW9uIGUoYil7ZnVuY3Rpb24gZCgpe2o9PT1lJiYoaj12b2lkIDApfXZhciBlPWEoYyxiKTtyZXR1cm4gaiYmai5jYW5jZWwoKSxqPWUsZS50aGVuKGQsZCksZX1mdW5jdGlvbiBmKCl7az8oaz0hMSxnKCkpOihjLnJlbW92ZUNsYXNzKCJjb2xsYXBzZSIpLmFkZENsYXNzKCJjb2xsYXBzaW5nIiksZSh7aGVpZ2h0OmNbMF0uc2Nyb2xsSGVpZ2h0KyJweCJ9KS50aGVuKGcpKX1mdW5jdGlvbiBnKCl7Yy5yZW1vdmVDbGFzcygiY29sbGFwc2luZyIpLGMuYWRkQ2xhc3MoImNvbGxhcHNlIGluIiksYy5jc3Moe2hlaWdodDoiYXV0byJ9KX1mdW5jdGlvbiBoKCl7aWYoaylrPSExLGkoKSxjLmNzcyh7aGVpZ2h0OjB9KTtlbHNle2MuY3NzKHtoZWlnaHQ6Y1swXS5zY3JvbGxIZWlnaHQrInB4In0pO3tjWzBdLm9mZnNldFdpZHRofWMucmVtb3ZlQ2xhc3MoImNvbGxhcHNlIGluIikuYWRkQ2xhc3MoImNvbGxhcHNpbmciKSxlKHtoZWlnaHQ6MH0pLnRoZW4oaSl9fWZ1bmN0aW9uIGkoKXtjLnJlbW92ZUNsYXNzKCJjb2xsYXBzaW5nIiksYy5hZGRDbGFzcygiY29sbGFwc2UiKX12YXIgaixrPSEwO2IuJHdhdGNoKGQuY29sbGFwc2UsZnVuY3Rpb24oYSl7YT9oKCk6ZigpfSl9fX1dKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLmFjY29yZGlvbiIsWyJ1aS5ib290c3RyYXAuY29sbGFwc2UiXSkuY29uc3RhbnQoImFjY29yZGlvbkNvbmZpZyIse2Nsb3NlT3RoZXJzOiEwfSkuY29udHJvbGxlcigiQWNjb3JkaW9uQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLCJhY2NvcmRpb25Db25maWciLGZ1bmN0aW9uKGEsYixjKXt0aGlzLmdyb3Vwcz1bXSx0aGlzLmNsb3NlT3RoZXJzPWZ1bmN0aW9uKGQpe3ZhciBlPWFuZ3VsYXIuaXNEZWZpbmVkKGIuY2xvc2VPdGhlcnMpP2EuJGV2YWwoYi5jbG9zZU90aGVycyk6Yy5jbG9zZU90aGVycztlJiZhbmd1bGFyLmZvckVhY2godGhpcy5ncm91cHMsZnVuY3Rpb24oYSl7YSE9PWQmJihhLmlzT3Blbj0hMSl9KX0sdGhpcy5hZGRHcm91cD1mdW5jdGlvbihhKXt2YXIgYj10aGlzO3RoaXMuZ3JvdXBzLnB1c2goYSksYS4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2IucmVtb3ZlR3JvdXAoYSl9KX0sdGhpcy5yZW1vdmVHcm91cD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmdyb3Vwcy5pbmRleE9mKGEpOy0xIT09YiYmdGhpcy5ncm91cHMuc3BsaWNlKGIsMSl9fV0pLmRpcmVjdGl2ZSgiYWNjb3JkaW9uIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLGNvbnRyb2xsZXI6IkFjY29yZGlvbkNvbnRyb2xsZXIiLHRyYW5zY2x1ZGU6ITAscmVwbGFjZTohMSx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi5odG1sIn19KS5kaXJlY3RpdmUoImFjY29yZGlvbkdyb3VwIixmdW5jdGlvbigpe3JldHVybntyZXF1aXJlOiJeYWNjb3JkaW9uIixyZXN0cmljdDoiRUEiLHRyYW5zY2x1ZGU6ITAscmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi1ncm91cC5odG1sIixzY29wZTp7aGVhZGluZzoiQCIsaXNPcGVuOiI9PyIsaXNEaXNhYmxlZDoiPT8ifSxjb250cm9sbGVyOmZ1bmN0aW9uKCl7dGhpcy5zZXRIZWFkaW5nPWZ1bmN0aW9uKGEpe3RoaXMuaGVhZGluZz1hfX0sbGluazpmdW5jdGlvbihhLGIsYyxkKXtkLmFkZEdyb3VwKGEpLGEuJHdhdGNoKCJpc09wZW4iLGZ1bmN0aW9uKGIpe2ImJmQuY2xvc2VPdGhlcnMoYSl9KSxhLnRvZ2dsZU9wZW49ZnVuY3Rpb24oKXthLmlzRGlzYWJsZWR8fChhLmlzT3Blbj0hYS5pc09wZW4pfX19fSkuZGlyZWN0aXZlKCJhY2NvcmRpb25IZWFkaW5nIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHRyYW5zY2x1ZGU6ITAsdGVtcGxhdGU6IiIscmVwbGFjZTohMCxyZXF1aXJlOiJeYWNjb3JkaW9uR3JvdXAiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCxlKXtkLnNldEhlYWRpbmcoZShhLGZ1bmN0aW9uKCl7fSkpfX19KS5kaXJlY3RpdmUoImFjY29yZGlvblRyYW5zY2x1ZGUiLGZ1bmN0aW9uKCl7cmV0dXJue3JlcXVpcmU6Il5hY2NvcmRpb25Hcm91cCIsbGluazpmdW5jdGlvbihhLGIsYyxkKXthLiR3YXRjaChmdW5jdGlvbigpe3JldHVybiBkW2MuYWNjb3JkaW9uVHJhbnNjbHVkZV19LGZ1bmN0aW9uKGEpe2EmJihiLmh0bWwoIiIpLGIuYXBwZW5kKGEpKX0pfX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLmFsZXJ0IixbXSkuY29udHJvbGxlcigiQWxlcnRDb250cm9sbGVyIixbIiRzY29wZSIsIiRhdHRycyIsZnVuY3Rpb24oYSxiKXthLmNsb3NlYWJsZT0iY2xvc2UiaW4gYn1dKS5kaXJlY3RpdmUoImFsZXJ0IixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLGNvbnRyb2xsZXI6IkFsZXJ0Q29udHJvbGxlciIsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2FsZXJ0L2FsZXJ0Lmh0bWwiLHRyYW5zY2x1ZGU6ITAscmVwbGFjZTohMCxzY29wZTp7dHlwZToiQCIsY2xvc2U6IiYifX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLmJpbmRIdG1sIixbXSkuZGlyZWN0aXZlKCJiaW5kSHRtbFVuc2FmZSIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oYSxiLGMpe2IuYWRkQ2xhc3MoIm5nLWJpbmRpbmciKS5kYXRhKCIkYmluZGluZyIsYy5iaW5kSHRtbFVuc2FmZSksYS4kd2F0Y2goYy5iaW5kSHRtbFVuc2FmZSxmdW5jdGlvbihhKXtiLmh0bWwoYXx8IiIpfSl9fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5idXR0b25zIixbXSkuY29uc3RhbnQoImJ1dHRvbkNvbmZpZyIse2FjdGl2ZUNsYXNzOiJhY3RpdmUiLHRvZ2dsZUV2ZW50OiJjbGljayJ9KS5jb250cm9sbGVyKCJCdXR0b25zQ29udHJvbGxlciIsWyJidXR0b25Db25maWciLGZ1bmN0aW9uKGEpe3RoaXMuYWN0aXZlQ2xhc3M9YS5hY3RpdmVDbGFzc3x8ImFjdGl2ZSIsdGhpcy50b2dnbGVFdmVudD1hLnRvZ2dsZUV2ZW50fHwiY2xpY2sifV0pLmRpcmVjdGl2ZSgiYnRuUmFkaW8iLGZ1bmN0aW9uKCl7cmV0dXJue3JlcXVpcmU6WyJidG5SYWRpbyIsIm5nTW9kZWwiXSxjb250cm9sbGVyOiJCdXR0b25zQ29udHJvbGxlciIsbGluazpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1kWzBdLGY9ZFsxXTtmLiRyZW5kZXI9ZnVuY3Rpb24oKXtiLnRvZ2dsZUNsYXNzKGUuYWN0aXZlQ2xhc3MsYW5ndWxhci5lcXVhbHMoZi4kbW9kZWxWYWx1ZSxhLiRldmFsKGMuYnRuUmFkaW8pKSl9LGIuYmluZChlLnRvZ2dsZUV2ZW50LGZ1bmN0aW9uKCl7dmFyIGQ9Yi5oYXNDbGFzcyhlLmFjdGl2ZUNsYXNzKTsoIWR8fGFuZ3VsYXIuaXNEZWZpbmVkKGMudW5jaGVja2FibGUpKSYmYS4kYXBwbHkoZnVuY3Rpb24oKXtmLiRzZXRWaWV3VmFsdWUoZD9udWxsOmEuJGV2YWwoYy5idG5SYWRpbykpLGYuJHJlbmRlcigpfSl9KX19fSkuZGlyZWN0aXZlKCJidG5DaGVja2JveCIsZnVuY3Rpb24oKXtyZXR1cm57cmVxdWlyZTpbImJ0bkNoZWNrYm94IiwibmdNb2RlbCJdLGNvbnRyb2xsZXI6IkJ1dHRvbnNDb250cm9sbGVyIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gZyhjLmJ0bkNoZWNrYm94VHJ1ZSwhMCl9ZnVuY3Rpb24gZigpe3JldHVybiBnKGMuYnRuQ2hlY2tib3hGYWxzZSwhMSl9ZnVuY3Rpb24gZyhiLGMpe3ZhciBkPWEuJGV2YWwoYik7cmV0dXJuIGFuZ3VsYXIuaXNEZWZpbmVkKGQpP2Q6Y312YXIgaD1kWzBdLGk9ZFsxXTtpLiRyZW5kZXI9ZnVuY3Rpb24oKXtiLnRvZ2dsZUNsYXNzKGguYWN0aXZlQ2xhc3MsYW5ndWxhci5lcXVhbHMoaS4kbW9kZWxWYWx1ZSxlKCkpKX0sYi5iaW5kKGgudG9nZ2xlRXZlbnQsZnVuY3Rpb24oKXthLiRhcHBseShmdW5jdGlvbigpe2kuJHNldFZpZXdWYWx1ZShiLmhhc0NsYXNzKGguYWN0aXZlQ2xhc3MpP2YoKTplKCkpLGkuJHJlbmRlcigpfSl9KX19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5jYXJvdXNlbCIsWyJ1aS5ib290c3RyYXAudHJhbnNpdGlvbiJdKS5jb250cm9sbGVyKCJDYXJvdXNlbENvbnRyb2xsZXIiLFsiJHNjb3BlIiwiJHRpbWVvdXQiLCIkdHJhbnNpdGlvbiIsZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoKXtlKCk7dmFyIGM9K2EuaW50ZXJ2YWw7IWlzTmFOKGMpJiZjPj0wJiYoZz1iKGYsYykpfWZ1bmN0aW9uIGUoKXtnJiYoYi5jYW5jZWwoZyksZz1udWxsKX1mdW5jdGlvbiBmKCl7aD8oYS5uZXh0KCksZCgpKTphLnBhdXNlKCl9dmFyIGcsaCxpPXRoaXMsaj1pLnNsaWRlcz1hLnNsaWRlcz1bXSxrPS0xO2kuY3VycmVudFNsaWRlPW51bGw7dmFyIGw9ITE7aS5zZWxlY3Q9YS5zZWxlY3Q9ZnVuY3Rpb24oZSxmKXtmdW5jdGlvbiBnKCl7aWYoIWwpe2lmKGkuY3VycmVudFNsaWRlJiZhbmd1bGFyLmlzU3RyaW5nKGYpJiYhYS5ub1RyYW5zaXRpb24mJmUuJGVsZW1lbnQpe2UuJGVsZW1lbnQuYWRkQ2xhc3MoZik7e2UuJGVsZW1lbnRbMF0ub2Zmc2V0V2lkdGh9YW5ndWxhci5mb3JFYWNoKGosZnVuY3Rpb24oYSl7YW5ndWxhci5leHRlbmQoYSx7ZGlyZWN0aW9uOiIiLGVudGVyaW5nOiExLGxlYXZpbmc6ITEsYWN0aXZlOiExfSl9KSxhbmd1bGFyLmV4dGVuZChlLHtkaXJlY3Rpb246ZixhY3RpdmU6ITAsZW50ZXJpbmc6ITB9KSxhbmd1bGFyLmV4dGVuZChpLmN1cnJlbnRTbGlkZXx8e30se2RpcmVjdGlvbjpmLGxlYXZpbmc6ITB9KSxhLiRjdXJyZW50VHJhbnNpdGlvbj1jKGUuJGVsZW1lbnQse30pLGZ1bmN0aW9uKGIsYyl7YS4kY3VycmVudFRyYW5zaXRpb24udGhlbihmdW5jdGlvbigpe2goYixjKX0sZnVuY3Rpb24oKXtoKGIsYyl9KX0oZSxpLmN1cnJlbnRTbGlkZSl9ZWxzZSBoKGUsaS5jdXJyZW50U2xpZGUpO2kuY3VycmVudFNsaWRlPWUsaz1tLGQoKX19ZnVuY3Rpb24gaChiLGMpe2FuZ3VsYXIuZXh0ZW5kKGIse2RpcmVjdGlvbjoiIixhY3RpdmU6ITAsbGVhdmluZzohMSxlbnRlcmluZzohMX0pLGFuZ3VsYXIuZXh0ZW5kKGN8fHt9LHtkaXJlY3Rpb246IiIsYWN0aXZlOiExLGxlYXZpbmc6ITEsZW50ZXJpbmc6ITF9KSxhLiRjdXJyZW50VHJhbnNpdGlvbj1udWxsfXZhciBtPWouaW5kZXhPZihlKTt2b2lkIDA9PT1mJiYoZj1tPms/Im5leHQiOiJwcmV2IiksZSYmZSE9PWkuY3VycmVudFNsaWRlJiYoYS4kY3VycmVudFRyYW5zaXRpb24/KGEuJGN1cnJlbnRUcmFuc2l0aW9uLmNhbmNlbCgpLGIoZykpOmcoKSl9LGEuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXtsPSEwfSksaS5pbmRleE9mU2xpZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGouaW5kZXhPZihhKX0sYS5uZXh0PWZ1bmN0aW9uKCl7dmFyIGI9KGsrMSklai5sZW5ndGg7cmV0dXJuIGEuJGN1cnJlbnRUcmFuc2l0aW9uP3ZvaWQgMDppLnNlbGVjdChqW2JdLCJuZXh0Iil9LGEucHJldj1mdW5jdGlvbigpe3ZhciBiPTA+ay0xP2oubGVuZ3RoLTE6ay0xO3JldHVybiBhLiRjdXJyZW50VHJhbnNpdGlvbj92b2lkIDA6aS5zZWxlY3QoaltiXSwicHJldiIpfSxhLmlzQWN0aXZlPWZ1bmN0aW9uKGEpe3JldHVybiBpLmN1cnJlbnRTbGlkZT09PWF9LGEuJHdhdGNoKCJpbnRlcnZhbCIsZCksYS4kb24oIiRkZXN0cm95IixlKSxhLnBsYXk9ZnVuY3Rpb24oKXtofHwoaD0hMCxkKCkpfSxhLnBhdXNlPWZ1bmN0aW9uKCl7YS5ub1BhdXNlfHwoaD0hMSxlKCkpfSxpLmFkZFNsaWRlPWZ1bmN0aW9uKGIsYyl7Yi4kZWxlbWVudD1jLGoucHVzaChiKSwxPT09ai5sZW5ndGh8fGIuYWN0aXZlPyhpLnNlbGVjdChqW2oubGVuZ3RoLTFdKSwxPT1qLmxlbmd0aCYmYS5wbGF5KCkpOmIuYWN0aXZlPSExfSxpLnJlbW92ZVNsaWRlPWZ1bmN0aW9uKGEpe3ZhciBiPWouaW5kZXhPZihhKTtqLnNwbGljZShiLDEpLGoubGVuZ3RoPjAmJmEuYWN0aXZlP2kuc2VsZWN0KGI+PWoubGVuZ3RoP2pbYi0xXTpqW2JdKTprPmImJmstLX19XSkuZGlyZWN0aXZlKCJjYXJvdXNlbCIsW2Z1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIsdHJhbnNjbHVkZTohMCxyZXBsYWNlOiEwLGNvbnRyb2xsZXI6IkNhcm91c2VsQ29udHJvbGxlciIscmVxdWlyZToiY2Fyb3VzZWwiLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9jYXJvdXNlbC9jYXJvdXNlbC5odG1sIixzY29wZTp7aW50ZXJ2YWw6Ij0iLG5vVHJhbnNpdGlvbjoiPSIsbm9QYXVzZToiPSJ9fX1dKS5kaXJlY3RpdmUoInNsaWRlIixmdW5jdGlvbigpe3JldHVybntyZXF1aXJlOiJeY2Fyb3VzZWwiLHJlc3RyaWN0OiJFQSIsdHJhbnNjbHVkZTohMCxyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9jYXJvdXNlbC9zbGlkZS5odG1sIixzY29wZTp7YWN0aXZlOiI9PyJ9LGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7ZC5hZGRTbGlkZShhLGIpLGEuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXtkLnJlbW92ZVNsaWRlKGEpfSksYS4kd2F0Y2goImFjdGl2ZSIsZnVuY3Rpb24oYil7YiYmZC5zZWxlY3QoYSl9KX19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5kYXRlcGFyc2VyIixbXSkuc2VydmljZSgiZGF0ZVBhcnNlciIsWyIkbG9jYWxlIiwib3JkZXJCeUZpbHRlciIsZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYixjKXtyZXR1cm4gMT09PWImJmM+Mjg/Mjk9PT1jJiYoYSU0PT09MCYmYSUxMDAhPT0wfHxhJTQwMD09PTApOjM9PT1ifHw1PT09Ynx8OD09PWJ8fDEwPT09Yj8zMT5jOiEwfXRoaXMucGFyc2Vycz17fTt2YXIgZD17eXl5eTp7cmVnZXg6IlxcZHs0fSIsYXBwbHk6ZnVuY3Rpb24oYSl7dGhpcy55ZWFyPSthfX0seXk6e3JlZ2V4OiJcXGR7Mn0iLGFwcGx5OmZ1bmN0aW9uKGEpe3RoaXMueWVhcj0rYSsyZTN9fSx5OntyZWdleDoiXFxkezEsNH0iLGFwcGx5OmZ1bmN0aW9uKGEpe3RoaXMueWVhcj0rYX19LE1NTU06e3JlZ2V4OmEuREFURVRJTUVfRk9STUFUUy5NT05USC5qb2luKCJ8IiksYXBwbHk6ZnVuY3Rpb24oYil7dGhpcy5tb250aD1hLkRBVEVUSU1FX0ZPUk1BVFMuTU9OVEguaW5kZXhPZihiKX19LE1NTTp7cmVnZXg6YS5EQVRFVElNRV9GT1JNQVRTLlNIT1JUTU9OVEguam9pbigifCIpLGFwcGx5OmZ1bmN0aW9uKGIpe3RoaXMubW9udGg9YS5EQVRFVElNRV9GT1JNQVRTLlNIT1JUTU9OVEguaW5kZXhPZihiKX19LE1NOntyZWdleDoiMFsxLTldfDFbMC0yXSIsYXBwbHk6ZnVuY3Rpb24oYSl7dGhpcy5tb250aD1hLTF9fSxNOntyZWdleDoiWzEtOV18MVswLTJdIixhcHBseTpmdW5jdGlvbihhKXt0aGlzLm1vbnRoPWEtMX19LGRkOntyZWdleDoiWzAtMl1bMC05XXsxfXwzWzAtMV17MX0iLGFwcGx5OmZ1bmN0aW9uKGEpe3RoaXMuZGF0ZT0rYX19LGQ6e3JlZ2V4OiJbMS0yXT9bMC05XXsxfXwzWzAtMV17MX0iLGFwcGx5OmZ1bmN0aW9uKGEpe3RoaXMuZGF0ZT0rYX19LEVFRUU6e3JlZ2V4OmEuREFURVRJTUVfRk9STUFUUy5EQVkuam9pbigifCIpfSxFRUU6e3JlZ2V4OmEuREFURVRJTUVfRk9STUFUUy5TSE9SVERBWS5qb2luKCJ8Iil9fTt0aGlzLmNyZWF0ZVBhcnNlcj1mdW5jdGlvbihhKXt2YXIgYz1bXSxlPWEuc3BsaXQoIiIpO3JldHVybiBhbmd1bGFyLmZvckVhY2goZCxmdW5jdGlvbihiLGQpe3ZhciBmPWEuaW5kZXhPZihkKTtpZihmPi0xKXthPWEuc3BsaXQoIiIpLGVbZl09IigiK2IucmVnZXgrIikiLGFbZl09IiQiO2Zvcih2YXIgZz1mKzEsaD1mK2QubGVuZ3RoO2g+ZztnKyspZVtnXT0iIixhW2ddPSIkIjthPWEuam9pbigiIiksYy5wdXNoKHtpbmRleDpmLGFwcGx5OmIuYXBwbHl9KX19KSx7cmVnZXg6bmV3IFJlZ0V4cCgiXiIrZS5qb2luKCIiKSsiJCIpLG1hcDpiKGMsImluZGV4Iil9fSx0aGlzLnBhcnNlPWZ1bmN0aW9uKGIsZCl7aWYoIWFuZ3VsYXIuaXNTdHJpbmcoYikpcmV0dXJuIGI7ZD1hLkRBVEVUSU1FX0ZPUk1BVFNbZF18fGQsdGhpcy5wYXJzZXJzW2RdfHwodGhpcy5wYXJzZXJzW2RdPXRoaXMuY3JlYXRlUGFyc2VyKGQpKTt2YXIgZT10aGlzLnBhcnNlcnNbZF0sZj1lLnJlZ2V4LGc9ZS5tYXAsaD1iLm1hdGNoKGYpO2lmKGgmJmgubGVuZ3RoKXtmb3IodmFyIGksaj17eWVhcjoxOTAwLG1vbnRoOjAsZGF0ZToxLGhvdXJzOjB9LGs9MSxsPWgubGVuZ3RoO2w+aztrKyspe3ZhciBtPWdbay0xXTttLmFwcGx5JiZtLmFwcGx5LmNhbGwoaixoW2tdKX1yZXR1cm4gYyhqLnllYXIsai5tb250aCxqLmRhdGUpJiYoaT1uZXcgRGF0ZShqLnllYXIsai5tb250aCxqLmRhdGUsai5ob3VycykpLGl9fX1dKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnBvc2l0aW9uIixbXSkuZmFjdG9yeSgiJHBvc2l0aW9uIixbIiRkb2N1bWVudCIsIiR3aW5kb3ciLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGMpe3JldHVybiBhLmN1cnJlbnRTdHlsZT9hLmN1cnJlbnRTdHlsZVtjXTpiLmdldENvbXB1dGVkU3R5bGU/Yi5nZXRDb21wdXRlZFN0eWxlKGEpW2NdOmEuc3R5bGVbY119ZnVuY3Rpb24gZChhKXtyZXR1cm4ic3RhdGljIj09PShjKGEsInBvc2l0aW9uIil8fCJzdGF0aWMiKX12YXIgZT1mdW5jdGlvbihiKXtmb3IodmFyIGM9YVswXSxlPWIub2Zmc2V0UGFyZW50fHxjO2UmJmUhPT1jJiZkKGUpOyllPWUub2Zmc2V0UGFyZW50O3JldHVybiBlfHxjfTtyZXR1cm57cG9zaXRpb246ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5vZmZzZXQoYiksZD17dG9wOjAsbGVmdDowfSxmPWUoYlswXSk7ZiE9YVswXSYmKGQ9dGhpcy5vZmZzZXQoYW5ndWxhci5lbGVtZW50KGYpKSxkLnRvcCs9Zi5jbGllbnRUb3AtZi5zY3JvbGxUb3AsZC5sZWZ0Kz1mLmNsaWVudExlZnQtZi5zY3JvbGxMZWZ0KTt2YXIgZz1iWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt3aWR0aDpnLndpZHRofHxiLnByb3AoIm9mZnNldFdpZHRoIiksaGVpZ2h0OmcuaGVpZ2h0fHxiLnByb3AoIm9mZnNldEhlaWdodCIpLHRvcDpjLnRvcC1kLnRvcCxsZWZ0OmMubGVmdC1kLmxlZnR9fSxvZmZzZXQ6ZnVuY3Rpb24oYyl7dmFyIGQ9Y1swXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57d2lkdGg6ZC53aWR0aHx8Yy5wcm9wKCJvZmZzZXRXaWR0aCIpLGhlaWdodDpkLmhlaWdodHx8Yy5wcm9wKCJvZmZzZXRIZWlnaHQiKSx0b3A6ZC50b3ArKGIucGFnZVlPZmZzZXR8fGFbMF0uZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCksbGVmdDpkLmxlZnQrKGIucGFnZVhPZmZzZXR8fGFbMF0uZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQpfX0scG9zaXRpb25FbGVtZW50czpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpPWMuc3BsaXQoIi0iKSxqPWlbMF0saz1pWzFdfHwiY2VudGVyIjtlPWQ/dGhpcy5vZmZzZXQoYSk6dGhpcy5wb3NpdGlvbihhKSxmPWIucHJvcCgib2Zmc2V0V2lkdGgiKSxnPWIucHJvcCgib2Zmc2V0SGVpZ2h0Iik7dmFyIGw9e2NlbnRlcjpmdW5jdGlvbigpe3JldHVybiBlLmxlZnQrZS53aWR0aC8yLWYvMn0sbGVmdDpmdW5jdGlvbigpe3JldHVybiBlLmxlZnR9LHJpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIGUubGVmdCtlLndpZHRofX0sbT17Y2VudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIGUudG9wK2UuaGVpZ2h0LzItZy8yfSx0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gZS50b3B9LGJvdHRvbTpmdW5jdGlvbigpe3JldHVybiBlLnRvcCtlLmhlaWdodH19O3N3aXRjaChqKXtjYXNlInJpZ2h0IjpoPXt0b3A6bVtrXSgpLGxlZnQ6bFtqXSgpfTticmVhaztjYXNlImxlZnQiOmg9e3RvcDptW2tdKCksbGVmdDplLmxlZnQtZn07YnJlYWs7Y2FzZSJib3R0b20iOmg9e3RvcDptW2pdKCksbGVmdDpsW2tdKCl9O2JyZWFrO2RlZmF1bHQ6aD17dG9wOmUudG9wLWcsbGVmdDpsW2tdKCl9fXJldHVybiBofX19XSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5kYXRlcGlja2VyIixbInVpLmJvb3RzdHJhcC5kYXRlcGFyc2VyIiwidWkuYm9vdHN0cmFwLnBvc2l0aW9uIl0pLmNvbnN0YW50KCJkYXRlcGlja2VyQ29uZmlnIix7Zm9ybWF0RGF5OiJkZCIsZm9ybWF0TW9udGg6Ik1NTU0iLGZvcm1hdFllYXI6Inl5eXkiLGZvcm1hdERheUhlYWRlcjoiRUVFIixmb3JtYXREYXlUaXRsZToiTU1NTSB5eXl5Iixmb3JtYXRNb250aFRpdGxlOiJ5eXl5IixkYXRlcGlja2VyTW9kZToiZGF5IixtaW5Nb2RlOiJkYXkiLG1heE1vZGU6InllYXIiLHNob3dXZWVrczohMCxzdGFydGluZ0RheTowLHllYXJSYW5nZToyMCxtaW5EYXRlOm51bGwsbWF4RGF0ZTpudWxsfSkuY29udHJvbGxlcigiRGF0ZXBpY2tlckNvbnRyb2xsZXIiLFsiJHNjb3BlIiwiJGF0dHJzIiwiJHBhcnNlIiwiJGludGVycG9sYXRlIiwiJHRpbWVvdXQiLCIkbG9nIiwiZGF0ZUZpbHRlciIsImRhdGVwaWNrZXJDb25maWciLGZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCl7dmFyIGk9dGhpcyxqPXskc2V0Vmlld1ZhbHVlOmFuZ3VsYXIubm9vcH07dGhpcy5tb2Rlcz1bImRheSIsIm1vbnRoIiwieWVhciJdLGFuZ3VsYXIuZm9yRWFjaChbImZvcm1hdERheSIsImZvcm1hdE1vbnRoIiwiZm9ybWF0WWVhciIsImZvcm1hdERheUhlYWRlciIsImZvcm1hdERheVRpdGxlIiwiZm9ybWF0TW9udGhUaXRsZSIsIm1pbk1vZGUiLCJtYXhNb2RlIiwic2hvd1dlZWtzIiwic3RhcnRpbmdEYXkiLCJ5ZWFyUmFuZ2UiXSxmdW5jdGlvbihjLGUpe2lbY109YW5ndWxhci5pc0RlZmluZWQoYltjXSk/OD5lP2QoYltjXSkoYS4kcGFyZW50KTphLiRwYXJlbnQuJGV2YWwoYltjXSk6aFtjXX0pLGFuZ3VsYXIuZm9yRWFjaChbIm1pbkRhdGUiLCJtYXhEYXRlIl0sZnVuY3Rpb24oZCl7YltkXT9hLiRwYXJlbnQuJHdhdGNoKGMoYltkXSksZnVuY3Rpb24oYSl7aVtkXT1hP25ldyBEYXRlKGEpOm51bGwsaS5yZWZyZXNoVmlldygpfSk6aVtkXT1oW2RdP25ldyBEYXRlKGhbZF0pOm51bGx9KSxhLmRhdGVwaWNrZXJNb2RlPWEuZGF0ZXBpY2tlck1vZGV8fGguZGF0ZXBpY2tlck1vZGUsYS51bmlxdWVJZD0iZGF0ZXBpY2tlci0iK2EuJGlkKyItIitNYXRoLmZsb29yKDFlNCpNYXRoLnJhbmRvbSgpKSx0aGlzLmFjdGl2ZURhdGU9YW5ndWxhci5pc0RlZmluZWQoYi5pbml0RGF0ZSk/YS4kcGFyZW50LiRldmFsKGIuaW5pdERhdGUpOm5ldyBEYXRlLGEuaXNBY3RpdmU9ZnVuY3Rpb24oYil7cmV0dXJuIDA9PT1pLmNvbXBhcmUoYi5kYXRlLGkuYWN0aXZlRGF0ZSk/KGEuYWN0aXZlRGF0ZUlkPWIudWlkLCEwKTohMX0sdGhpcy5pbml0PWZ1bmN0aW9uKGEpe2o9YSxqLiRyZW5kZXI9ZnVuY3Rpb24oKXtpLnJlbmRlcigpfX0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24oKXtpZihqLiRtb2RlbFZhbHVlKXt2YXIgYT1uZXcgRGF0ZShqLiRtb2RlbFZhbHVlKSxiPSFpc05hTihhKTtiP3RoaXMuYWN0aXZlRGF0ZT1hOmYuZXJyb3IoJ0RhdGVwaWNrZXIgZGlyZWN0aXZlOiAibmctbW9kZWwiIHZhbHVlIG11c3QgYmUgYSBEYXRlIG9iamVjdCwgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIDAxLjAxLjE5NzAgb3IgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGFuIFJGQzI4MjIgb3IgSVNPIDg2MDEgZGF0ZS4nKSxqLiRzZXRWYWxpZGl0eSgiZGF0ZSIsYil9dGhpcy5yZWZyZXNoVmlldygpfSx0aGlzLnJlZnJlc2hWaWV3PWZ1bmN0aW9uKCl7aWYodGhpcy5lbGVtZW50KXt0aGlzLl9yZWZyZXNoVmlldygpO3ZhciBhPWouJG1vZGVsVmFsdWU/bmV3IERhdGUoai4kbW9kZWxWYWx1ZSk6bnVsbDtqLiRzZXRWYWxpZGl0eSgiZGF0ZS1kaXNhYmxlZCIsIWF8fHRoaXMuZWxlbWVudCYmIXRoaXMuaXNEaXNhYmxlZChhKSl9fSx0aGlzLmNyZWF0ZURhdGVPYmplY3Q9ZnVuY3Rpb24oYSxiKXt2YXIgYz1qLiRtb2RlbFZhbHVlP25ldyBEYXRlKGouJG1vZGVsVmFsdWUpOm51bGw7cmV0dXJue2RhdGU6YSxsYWJlbDpnKGEsYiksc2VsZWN0ZWQ6YyYmMD09PXRoaXMuY29tcGFyZShhLGMpLGRpc2FibGVkOnRoaXMuaXNEaXNhYmxlZChhKSxjdXJyZW50OjA9PT10aGlzLmNvbXBhcmUoYSxuZXcgRGF0ZSl9fSx0aGlzLmlzRGlzYWJsZWQ9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMubWluRGF0ZSYmdGhpcy5jb21wYXJlKGMsdGhpcy5taW5EYXRlKTwwfHx0aGlzLm1heERhdGUmJnRoaXMuY29tcGFyZShjLHRoaXMubWF4RGF0ZSk+MHx8Yi5kYXRlRGlzYWJsZWQmJmEuZGF0ZURpc2FibGVkKHtkYXRlOmMsbW9kZTphLmRhdGVwaWNrZXJNb2RlfSl9LHRoaXMuc3BsaXQ9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9W107YS5sZW5ndGg+MDspYy5wdXNoKGEuc3BsaWNlKDAsYikpO3JldHVybiBjfSxhLnNlbGVjdD1mdW5jdGlvbihiKXtpZihhLmRhdGVwaWNrZXJNb2RlPT09aS5taW5Nb2RlKXt2YXIgYz1qLiRtb2RlbFZhbHVlP25ldyBEYXRlKGouJG1vZGVsVmFsdWUpOm5ldyBEYXRlKDAsMCwwLDAsMCwwLDApO2Muc2V0RnVsbFllYXIoYi5nZXRGdWxsWWVhcigpLGIuZ2V0TW9udGgoKSxiLmdldERhdGUoKSksai4kc2V0Vmlld1ZhbHVlKGMpLGouJHJlbmRlcigpfWVsc2UgaS5hY3RpdmVEYXRlPWIsYS5kYXRlcGlja2VyTW9kZT1pLm1vZGVzW2kubW9kZXMuaW5kZXhPZihhLmRhdGVwaWNrZXJNb2RlKS0xXX0sYS5tb3ZlPWZ1bmN0aW9uKGEpe3ZhciBiPWkuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpK2EqKGkuc3RlcC55ZWFyc3x8MCksYz1pLmFjdGl2ZURhdGUuZ2V0TW9udGgoKSthKihpLnN0ZXAubW9udGhzfHwwKTtpLmFjdGl2ZURhdGUuc2V0RnVsbFllYXIoYixjLDEpLGkucmVmcmVzaFZpZXcoKX0sYS50b2dnbGVNb2RlPWZ1bmN0aW9uKGIpe2I9Ynx8MSxhLmRhdGVwaWNrZXJNb2RlPT09aS5tYXhNb2RlJiYxPT09Ynx8YS5kYXRlcGlja2VyTW9kZT09PWkubWluTW9kZSYmLTE9PT1ifHwoYS5kYXRlcGlja2VyTW9kZT1pLm1vZGVzW2kubW9kZXMuaW5kZXhPZihhLmRhdGVwaWNrZXJNb2RlKStiXSl9LGEua2V5cz17MTM6ImVudGVyIiwzMjoic3BhY2UiLDMzOiJwYWdldXAiLDM0OiJwYWdlZG93biIsMzU6ImVuZCIsMzY6ImhvbWUiLDM3OiJsZWZ0IiwzODoidXAiLDM5OiJyaWdodCIsNDA6ImRvd24ifTt2YXIgaz1mdW5jdGlvbigpe2UoZnVuY3Rpb24oKXtpLmVsZW1lbnRbMF0uZm9jdXMoKX0sMCwhMSl9O2EuJG9uKCJkYXRlcGlja2VyLmZvY3VzIixrKSxhLmtleWRvd249ZnVuY3Rpb24oYil7dmFyIGM9YS5rZXlzW2Iud2hpY2hdO2lmKGMmJiFiLnNoaWZ0S2V5JiYhYi5hbHRLZXkpaWYoYi5wcmV2ZW50RGVmYXVsdCgpLGIuc3RvcFByb3BhZ2F0aW9uKCksImVudGVyIj09PWN8fCJzcGFjZSI9PT1jKXtpZihpLmlzRGlzYWJsZWQoaS5hY3RpdmVEYXRlKSlyZXR1cm47YS5zZWxlY3QoaS5hY3RpdmVEYXRlKSxrKCl9ZWxzZSFiLmN0cmxLZXl8fCJ1cCIhPT1jJiYiZG93biIhPT1jPyhpLmhhbmRsZUtleURvd24oYyxiKSxpLnJlZnJlc2hWaWV3KCkpOihhLnRvZ2dsZU1vZGUoInVwIj09PWM/MTotMSksaygpKX19XSkuZGlyZWN0aXZlKCJkYXRlcGlja2VyIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5odG1sIixzY29wZTp7ZGF0ZXBpY2tlck1vZGU6Ij0/IixkYXRlRGlzYWJsZWQ6IiYifSxyZXF1aXJlOlsiZGF0ZXBpY2tlciIsIj9ebmdNb2RlbCJdLGNvbnRyb2xsZXI6IkRhdGVwaWNrZXJDb250cm9sbGVyIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWRbMF0sZj1kWzFdO2YmJmUuaW5pdChmKX19fSkuZGlyZWN0aXZlKCJkYXlwaWNrZXIiLFsiZGF0ZUZpbHRlciIsZnVuY3Rpb24oYSl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvZGF0ZXBpY2tlci9kYXkuaHRtbCIscmVxdWlyZToiXmRhdGVwaWNrZXIiLGxpbms6ZnVuY3Rpb24oYixjLGQsZSl7ZnVuY3Rpb24gZihhLGIpe3JldHVybiAxIT09Ynx8YSU0IT09MHx8YSUxMDA9PT0wJiZhJTQwMCE9PTA/aVtiXToyOX1mdW5jdGlvbiBnKGEsYil7dmFyIGM9bmV3IEFycmF5KGIpLGQ9bmV3IERhdGUoYSksZT0wO2ZvcihkLnNldEhvdXJzKDEyKTtiPmU7KWNbZSsrXT1uZXcgRGF0ZShkKSxkLnNldERhdGUoZC5nZXREYXRlKCkrMSk7cmV0dXJuIGN9ZnVuY3Rpb24gaChhKXt2YXIgYj1uZXcgRGF0ZShhKTtiLnNldERhdGUoYi5nZXREYXRlKCkrNC0oYi5nZXREYXkoKXx8NykpO3ZhciBjPWIuZ2V0VGltZSgpO3JldHVybiBiLnNldE1vbnRoKDApLGIuc2V0RGF0ZSgxKSxNYXRoLmZsb29yKE1hdGgucm91bmQoKGMtYikvODY0ZTUpLzcpKzF9Yi5zaG93V2Vla3M9ZS5zaG93V2Vla3MsZS5zdGVwPXttb250aHM6MX0sZS5lbGVtZW50PWM7dmFyIGk9WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXTtlLl9yZWZyZXNoVmlldz1mdW5jdGlvbigpe3ZhciBjPWUuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpLGQ9ZS5hY3RpdmVEYXRlLmdldE1vbnRoKCksZj1uZXcgRGF0ZShjLGQsMSksaT1lLnN0YXJ0aW5nRGF5LWYuZ2V0RGF5KCksaj1pPjA/Ny1pOi1pLGs9bmV3IERhdGUoZik7aj4wJiZrLnNldERhdGUoLWorMSk7Zm9yKHZhciBsPWcoayw0MiksbT0wOzQyPm07bSsrKWxbbV09YW5ndWxhci5leHRlbmQoZS5jcmVhdGVEYXRlT2JqZWN0KGxbbV0sZS5mb3JtYXREYXkpLHtzZWNvbmRhcnk6bFttXS5nZXRNb250aCgpIT09ZCx1aWQ6Yi51bmlxdWVJZCsiLSIrbX0pO2IubGFiZWxzPW5ldyBBcnJheSg3KTtmb3IodmFyIG49MDs3Pm47bisrKWIubGFiZWxzW25dPXthYmJyOmEobFtuXS5kYXRlLGUuZm9ybWF0RGF5SGVhZGVyKSxmdWxsOmEobFtuXS5kYXRlLCJFRUVFIil9O2lmKGIudGl0bGU9YShlLmFjdGl2ZURhdGUsZS5mb3JtYXREYXlUaXRsZSksYi5yb3dzPWUuc3BsaXQobCw3KSxiLnNob3dXZWVrcyl7Yi53ZWVrTnVtYmVycz1bXTtmb3IodmFyIG89aChiLnJvd3NbMF1bMF0uZGF0ZSkscD1iLnJvd3MubGVuZ3RoO2Iud2Vla051bWJlcnMucHVzaChvKyspPHA7KTt9fSxlLmNvbXBhcmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IERhdGUoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSxhLmdldERhdGUoKSktbmV3IERhdGUoYi5nZXRGdWxsWWVhcigpLGIuZ2V0TW9udGgoKSxiLmdldERhdGUoKSl9LGUuaGFuZGxlS2V5RG93bj1mdW5jdGlvbihhKXt2YXIgYj1lLmFjdGl2ZURhdGUuZ2V0RGF0ZSgpO2lmKCJsZWZ0Ij09PWEpYi09MTtlbHNlIGlmKCJ1cCI9PT1hKWItPTc7ZWxzZSBpZigicmlnaHQiPT09YSliKz0xO2Vsc2UgaWYoImRvd24iPT09YSliKz03O2Vsc2UgaWYoInBhZ2V1cCI9PT1hfHwicGFnZWRvd24iPT09YSl7dmFyIGM9ZS5hY3RpdmVEYXRlLmdldE1vbnRoKCkrKCJwYWdldXAiPT09YT8tMToxKTtlLmFjdGl2ZURhdGUuc2V0TW9udGgoYywxKSxiPU1hdGgubWluKGYoZS5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksZS5hY3RpdmVEYXRlLmdldE1vbnRoKCkpLGIpfWVsc2UiaG9tZSI9PT1hP2I9MToiZW5kIj09PWEmJihiPWYoZS5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksZS5hY3RpdmVEYXRlLmdldE1vbnRoKCkpKTtlLmFjdGl2ZURhdGUuc2V0RGF0ZShiKX0sZS5yZWZyZXNoVmlldygpfX19XSkuZGlyZWN0aXZlKCJtb250aHBpY2tlciIsWyJkYXRlRmlsdGVyIixmdW5jdGlvbihhKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9kYXRlcGlja2VyL21vbnRoLmh0bWwiLHJlcXVpcmU6Il5kYXRlcGlja2VyIixsaW5rOmZ1bmN0aW9uKGIsYyxkLGUpe2Uuc3RlcD17eWVhcnM6MX0sZS5lbGVtZW50PWMsZS5fcmVmcmVzaFZpZXc9ZnVuY3Rpb24oKXtmb3IodmFyIGM9bmV3IEFycmF5KDEyKSxkPWUuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpLGY9MDsxMj5mO2YrKyljW2ZdPWFuZ3VsYXIuZXh0ZW5kKGUuY3JlYXRlRGF0ZU9iamVjdChuZXcgRGF0ZShkLGYsMSksZS5mb3JtYXRNb250aCkse3VpZDpiLnVuaXF1ZUlkKyItIitmfSk7Yi50aXRsZT1hKGUuYWN0aXZlRGF0ZSxlLmZvcm1hdE1vbnRoVGl0bGUpLGIucm93cz1lLnNwbGl0KGMsMyl9LGUuY29tcGFyZT1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgRGF0ZShhLmdldEZ1bGxZZWFyKCksYS5nZXRNb250aCgpKS1uZXcgRGF0ZShiLmdldEZ1bGxZZWFyKCksYi5nZXRNb250aCgpKX0sZS5oYW5kbGVLZXlEb3duPWZ1bmN0aW9uKGEpe3ZhciBiPWUuYWN0aXZlRGF0ZS5nZXRNb250aCgpO2lmKCJsZWZ0Ij09PWEpYi09MTtlbHNlIGlmKCJ1cCI9PT1hKWItPTM7ZWxzZSBpZigicmlnaHQiPT09YSliKz0xO2Vsc2UgaWYoImRvd24iPT09YSliKz0zO2Vsc2UgaWYoInBhZ2V1cCI9PT1hfHwicGFnZWRvd24iPT09YSl7dmFyIGM9ZS5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCkrKCJwYWdldXAiPT09YT8tMToxKTtlLmFjdGl2ZURhdGUuc2V0RnVsbFllYXIoYyl9ZWxzZSJob21lIj09PWE/Yj0wOiJlbmQiPT09YSYmKGI9MTEpO2UuYWN0aXZlRGF0ZS5zZXRNb250aChiKX0sZS5yZWZyZXNoVmlldygpfX19XSkuZGlyZWN0aXZlKCJ5ZWFycGlja2VyIixbImRhdGVGaWx0ZXIiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvZGF0ZXBpY2tlci95ZWFyLmh0bWwiLHJlcXVpcmU6Il5kYXRlcGlja2VyIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2Z1bmN0aW9uIGUoYSl7cmV0dXJuIHBhcnNlSW50KChhLTEpL2YsMTApKmYrMX12YXIgZj1kLnllYXJSYW5nZTtkLnN0ZXA9e3llYXJzOmZ9LGQuZWxlbWVudD1iLGQuX3JlZnJlc2hWaWV3PWZ1bmN0aW9uKCl7Zm9yKHZhciBiPW5ldyBBcnJheShmKSxjPTAsZz1lKGQuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpKTtmPmM7YysrKWJbY109YW5ndWxhci5leHRlbmQoZC5jcmVhdGVEYXRlT2JqZWN0KG5ldyBEYXRlKGcrYywwLDEpLGQuZm9ybWF0WWVhcikse3VpZDphLnVuaXF1ZUlkKyItIitjfSk7YS50aXRsZT1bYlswXS5sYWJlbCxiW2YtMV0ubGFiZWxdLmpvaW4oIiAtICIpLGEucm93cz1kLnNwbGl0KGIsNSl9LGQuY29tcGFyZT1mdW5jdGlvbihhLGIpe3JldHVybiBhLmdldEZ1bGxZZWFyKCktYi5nZXRGdWxsWWVhcigpfSxkLmhhbmRsZUtleURvd249ZnVuY3Rpb24oYSl7dmFyIGI9ZC5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCk7ImxlZnQiPT09YT9iLT0xOiJ1cCI9PT1hP2ItPTU6InJpZ2h0Ij09PWE/Yis9MToiZG93biI9PT1hP2IrPTU6InBhZ2V1cCI9PT1hfHwicGFnZWRvd24iPT09YT9iKz0oInBhZ2V1cCI9PT1hPy0xOjEpKmQuc3RlcC55ZWFyczoiaG9tZSI9PT1hP2I9ZShkLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSk6ImVuZCI9PT1hJiYoYj1lKGQuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpKStmLTEpLGQuYWN0aXZlRGF0ZS5zZXRGdWxsWWVhcihiKX0sZC5yZWZyZXNoVmlldygpfX19XSkuY29uc3RhbnQoImRhdGVwaWNrZXJQb3B1cENvbmZpZyIse2RhdGVwaWNrZXJQb3B1cDoieXl5eS1NTS1kZCIsY3VycmVudFRleHQ6IlRvZGF5IixjbGVhclRleHQ6IkNsZWFyIixjbG9zZVRleHQ6IkRvbmUiLGNsb3NlT25EYXRlU2VsZWN0aW9uOiEwLGFwcGVuZFRvQm9keTohMSxzaG93QnV0dG9uQmFyOiEwfSkuZGlyZWN0aXZlKCJkYXRlcGlja2VyUG9wdXAiLFsiJGNvbXBpbGUiLCIkcGFyc2UiLCIkZG9jdW1lbnQiLCIkcG9zaXRpb24iLCJkYXRlRmlsdGVyIiwiZGF0ZVBhcnNlciIsImRhdGVwaWNrZXJQb3B1cENvbmZpZyIsZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVxdWlyZToibmdNb2RlbCIsc2NvcGU6e2lzT3BlbjoiPT8iLGN1cnJlbnRUZXh0OiJAIixjbGVhclRleHQ6IkAiLGNsb3NlVGV4dDoiQCIsZGF0ZURpc2FibGVkOiImIn0sbGluazpmdW5jdGlvbihoLGksaixrKXtmdW5jdGlvbiBsKGEpe3JldHVybiBhLnJlcGxhY2UoLyhbQS1aXSkvZyxmdW5jdGlvbihhKXtyZXR1cm4iLSIrYS50b0xvd2VyQ2FzZSgpfSl9ZnVuY3Rpb24gbShhKXtpZihhKXtpZihhbmd1bGFyLmlzRGF0ZShhKSYmIWlzTmFOKGEpKXJldHVybiBrLiRzZXRWYWxpZGl0eSgiZGF0ZSIsITApLGE7aWYoYW5ndWxhci5pc1N0cmluZyhhKSl7dmFyIGI9Zi5wYXJzZShhLG4pfHxuZXcgRGF0ZShhKTtyZXR1cm4gaXNOYU4oYik/dm9pZCBrLiRzZXRWYWxpZGl0eSgiZGF0ZSIsITEpOihrLiRzZXRWYWxpZGl0eSgiZGF0ZSIsITApLGIpfXJldHVybiB2b2lkIGsuJHNldFZhbGlkaXR5KCJkYXRlIiwhMSl9cmV0dXJuIGsuJHNldFZhbGlkaXR5KCJkYXRlIiwhMCksbnVsbH12YXIgbixvPWFuZ3VsYXIuaXNEZWZpbmVkKGouY2xvc2VPbkRhdGVTZWxlY3Rpb24pP2guJHBhcmVudC4kZXZhbChqLmNsb3NlT25EYXRlU2VsZWN0aW9uKTpnLmNsb3NlT25EYXRlU2VsZWN0aW9uLHA9YW5ndWxhci5pc0RlZmluZWQoai5kYXRlcGlja2VyQXBwZW5kVG9Cb2R5KT9oLiRwYXJlbnQuJGV2YWwoai5kYXRlcGlja2VyQXBwZW5kVG9Cb2R5KTpnLmFwcGVuZFRvQm9keTtoLnNob3dCdXR0b25CYXI9YW5ndWxhci5pc0RlZmluZWQoai5zaG93QnV0dG9uQmFyKT9oLiRwYXJlbnQuJGV2YWwoai5zaG93QnV0dG9uQmFyKTpnLnNob3dCdXR0b25CYXIsaC5nZXRUZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBoW2ErIlRleHQiXXx8Z1thKyJUZXh0Il19LGouJG9ic2VydmUoImRhdGVwaWNrZXJQb3B1cCIsZnVuY3Rpb24oYSl7bj1hfHxnLmRhdGVwaWNrZXJQb3B1cCxrLiRyZW5kZXIoKX0pO3ZhciBxPWFuZ3VsYXIuZWxlbWVudCgiPGRpdiBkYXRlcGlja2VyLXBvcHVwLXdyYXA+PGRpdiBkYXRlcGlja2VyPjwvZGl2PjwvZGl2PiIpO3EuYXR0cih7Im5nLW1vZGVsIjoiZGF0ZSIsIm5nLWNoYW5nZSI6ImRhdGVTZWxlY3Rpb24oKSJ9KTt2YXIgcj1hbmd1bGFyLmVsZW1lbnQocS5jaGlsZHJlbigpWzBdKTtqLmRhdGVwaWNrZXJPcHRpb25zJiZhbmd1bGFyLmZvckVhY2goaC4kcGFyZW50LiRldmFsKGouZGF0ZXBpY2tlck9wdGlvbnMpLGZ1bmN0aW9uKGEsYil7ci5hdHRyKGwoYiksYSl9KSxhbmd1bGFyLmZvckVhY2goWyJtaW5EYXRlIiwibWF4RGF0ZSJdLGZ1bmN0aW9uKGEpe2pbYV0mJihoLiRwYXJlbnQuJHdhdGNoKGIoalthXSksZnVuY3Rpb24oYil7aFthXT1ifSksci5hdHRyKGwoYSksYSkpfSksai5kYXRlRGlzYWJsZWQmJnIuYXR0cigiZGF0ZS1kaXNhYmxlZCIsImRhdGVEaXNhYmxlZCh7IGRhdGU6IGRhdGUsIG1vZGU6IG1vZGUgfSkiKSxrLiRwYXJzZXJzLnVuc2hpZnQobSksaC5kYXRlU2VsZWN0aW9uPWZ1bmN0aW9uKGEpe2FuZ3VsYXIuaXNEZWZpbmVkKGEpJiYoaC5kYXRlPWEpLGsuJHNldFZpZXdWYWx1ZShoLmRhdGUpLGsuJHJlbmRlcigpLG8mJihoLmlzT3Blbj0hMSxpWzBdLmZvY3VzKCkpfSxpLmJpbmQoImlucHV0IGNoYW5nZSBrZXl1cCIsZnVuY3Rpb24oKXtoLiRhcHBseShmdW5jdGlvbigpe2guZGF0ZT1rLiRtb2RlbFZhbHVlfSl9KSxrLiRyZW5kZXI9ZnVuY3Rpb24oKXt2YXIgYT1rLiR2aWV3VmFsdWU/ZShrLiR2aWV3VmFsdWUsbik6IiI7aS52YWwoYSksaC5kYXRlPW0oay4kbW9kZWxWYWx1ZSl9O3ZhciBzPWZ1bmN0aW9uKGEpe2guaXNPcGVuJiZhLnRhcmdldCE9PWlbMF0mJmguJGFwcGx5KGZ1bmN0aW9uKCl7aC5pc09wZW49ITF9KX0sdD1mdW5jdGlvbihhKXtoLmtleWRvd24oYSl9O2kuYmluZCgia2V5ZG93biIsdCksaC5rZXlkb3duPWZ1bmN0aW9uKGEpezI3PT09YS53aGljaD8oYS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCksaC5jbG9zZSgpKTo0MCE9PWEud2hpY2h8fGguaXNPcGVufHwoaC5pc09wZW49ITApfSxoLiR3YXRjaCgiaXNPcGVuIixmdW5jdGlvbihhKXthPyhoLiRicm9hZGNhc3QoImRhdGVwaWNrZXIuZm9jdXMiKSxoLnBvc2l0aW9uPXA/ZC5vZmZzZXQoaSk6ZC5wb3NpdGlvbihpKSxoLnBvc2l0aW9uLnRvcD1oLnBvc2l0aW9uLnRvcCtpLnByb3AoIm9mZnNldEhlaWdodCIpLGMuYmluZCgiY2xpY2siLHMpKTpjLnVuYmluZCgiY2xpY2siLHMpfSksaC5zZWxlY3Q9ZnVuY3Rpb24oYSl7aWYoInRvZGF5Ij09PWEpe3ZhciBiPW5ldyBEYXRlO2FuZ3VsYXIuaXNEYXRlKGsuJG1vZGVsVmFsdWUpPyhhPW5ldyBEYXRlKGsuJG1vZGVsVmFsdWUpLGEuc2V0RnVsbFllYXIoYi5nZXRGdWxsWWVhcigpLGIuZ2V0TW9udGgoKSxiLmdldERhdGUoKSkpOmE9bmV3IERhdGUoYi5zZXRIb3VycygwLDAsMCwwKSl9aC5kYXRlU2VsZWN0aW9uKGEpfSxoLmNsb3NlPWZ1bmN0aW9uKCl7aC5pc09wZW49ITEsaVswXS5mb2N1cygpfTt2YXIgdT1hKHEpKGgpO3A/Yy5maW5kKCJib2R5IikuYXBwZW5kKHUpOmkuYWZ0ZXIodSksaC4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe3UucmVtb3ZlKCksaS51bmJpbmQoImtleWRvd24iLHQpLGMudW5iaW5kKCJjbGljayIscyl9KX19fV0pLmRpcmVjdGl2ZSgiZGF0ZXBpY2tlclBvcHVwV3JhcCIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRyYW5zY2x1ZGU6ITAsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2RhdGVwaWNrZXIvcG9wdXAuaHRtbCIsbGluazpmdW5jdGlvbihhLGIpe2IuYmluZCgiY2xpY2siLGZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpfSl9fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAuZHJvcGRvd24iLFtdKS5jb25zdGFudCgiZHJvcGRvd25Db25maWciLHtvcGVuQ2xhc3M6Im9wZW4ifSkuc2VydmljZSgiZHJvcGRvd25TZXJ2aWNlIixbIiRkb2N1bWVudCIsZnVuY3Rpb24oYSl7dmFyIGI9bnVsbDt0aGlzLm9wZW49ZnVuY3Rpb24oZSl7Ynx8KGEuYmluZCgiY2xpY2siLGMpLGEuYmluZCgia2V5ZG93biIsZCkpLGImJmIhPT1lJiYoYi5pc09wZW49ITEpLGI9ZX0sdGhpcy5jbG9zZT1mdW5jdGlvbihlKXtiPT09ZSYmKGI9bnVsbCxhLnVuYmluZCgiY2xpY2siLGMpLGEudW5iaW5kKCJrZXlkb3duIixkKSl9O3ZhciBjPWZ1bmN0aW9uKGEpe2EmJmEuaXNEZWZhdWx0UHJldmVudGVkKCl8fGIuJGFwcGx5KGZ1bmN0aW9uKCl7Yi5pc09wZW49ITF9KX0sZD1mdW5jdGlvbihhKXsyNz09PWEud2hpY2gmJihiLmZvY3VzVG9nZ2xlRWxlbWVudCgpLGMoKSl9fV0pLmNvbnRyb2xsZXIoIkRyb3Bkb3duQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLCIkcGFyc2UiLCJkcm9wZG93bkNvbmZpZyIsImRyb3Bkb3duU2VydmljZSIsIiRhbmltYXRlIixmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGcsaD10aGlzLGk9YS4kbmV3KCksaj1kLm9wZW5DbGFzcyxrPWFuZ3VsYXIubm9vcCxsPWIub25Ub2dnbGU/YyhiLm9uVG9nZ2xlKTphbmd1bGFyLm5vb3A7dGhpcy5pbml0PWZ1bmN0aW9uKGQpe2guJGVsZW1lbnQ9ZCxiLmlzT3BlbiYmKGc9YyhiLmlzT3Blbiksaz1nLmFzc2lnbixhLiR3YXRjaChnLGZ1bmN0aW9uKGEpe2kuaXNPcGVuPSEhYX0pKX0sdGhpcy50b2dnbGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGkuaXNPcGVuPWFyZ3VtZW50cy5sZW5ndGg/ISFhOiFpLmlzT3Blbn0sdGhpcy5pc09wZW49ZnVuY3Rpb24oKXtyZXR1cm4gaS5pc09wZW59LGkuZm9jdXNUb2dnbGVFbGVtZW50PWZ1bmN0aW9uKCl7aC50b2dnbGVFbGVtZW50JiZoLnRvZ2dsZUVsZW1lbnRbMF0uZm9jdXMoKX0saS4kd2F0Y2goImlzT3BlbiIsZnVuY3Rpb24oYixjKXtmW2I/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXShoLiRlbGVtZW50LGopLGI/KGkuZm9jdXNUb2dnbGVFbGVtZW50KCksZS5vcGVuKGkpKTplLmNsb3NlKGkpLGsoYSxiKSxhbmd1bGFyLmlzRGVmaW5lZChiKSYmYiE9PWMmJmwoYSx7b3BlbjohIWJ9KX0pLGEuJG9uKCIkbG9jYXRpb25DaGFuZ2VTdWNjZXNzIixmdW5jdGlvbigpe2kuaXNPcGVuPSExfSksYS4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2kuJGRlc3Ryb3koKX0pfV0pLmRpcmVjdGl2ZSgiZHJvcGRvd24iLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJDQSIsY29udHJvbGxlcjoiRHJvcGRvd25Db250cm9sbGVyIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2QuaW5pdChiKX19fSkuZGlyZWN0aXZlKCJkcm9wZG93blRvZ2dsZSIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkNBIixyZXF1aXJlOiI/XmRyb3Bkb3duIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2lmKGQpe2QudG9nZ2xlRWxlbWVudD1iO3ZhciBlPWZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxiLmhhc0NsYXNzKCJkaXNhYmxlZCIpfHxjLmRpc2FibGVkfHxhLiRhcHBseShmdW5jdGlvbigpe2QudG9nZ2xlKCl9KX07Yi5iaW5kKCJjbGljayIsZSksYi5hdHRyKHsiYXJpYS1oYXNwb3B1cCI6ITAsImFyaWEtZXhwYW5kZWQiOiExfSksYS4kd2F0Y2goZC5pc09wZW4sZnVuY3Rpb24oYSl7Yi5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhIWEpfSksYS4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2IudW5iaW5kKCJjbGljayIsZSl9KX19fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAubW9kYWwiLFsidWkuYm9vdHN0cmFwLnRyYW5zaXRpb24iXSkuZmFjdG9yeSgiJCRzdGFja2VkTWFwIixmdW5jdGlvbigpe3JldHVybntjcmVhdGVOZXc6ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm57YWRkOmZ1bmN0aW9uKGIsYyl7YS5wdXNoKHtrZXk6Yix2YWx1ZTpjfSl9LGdldDpmdW5jdGlvbihiKXtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKylpZihiPT1hW2NdLmtleSlyZXR1cm4gYVtjXX0sa2V5czpmdW5jdGlvbigpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKyspYi5wdXNoKGFbY10ua2V5KTtyZXR1cm4gYn0sdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGFbYS5sZW5ndGgtMV19LHJlbW92ZTpmdW5jdGlvbihiKXtmb3IodmFyIGM9LTEsZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKGI9PWFbZF0ua2V5KXtjPWQ7YnJlYWt9cmV0dXJuIGEuc3BsaWNlKGMsMSlbMF19LHJlbW92ZVRvcDpmdW5jdGlvbigpe3JldHVybiBhLnNwbGljZShhLmxlbmd0aC0xLDEpWzBdfSxsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gYS5sZW5ndGh9fX19fSkuZGlyZWN0aXZlKCJtb2RhbEJhY2tkcm9wIixbIiR0aW1lb3V0IixmdW5jdGlvbihhKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9tb2RhbC9iYWNrZHJvcC5odG1sIixsaW5rOmZ1bmN0aW9uKGIpe2IuYW5pbWF0ZT0hMSxhKGZ1bmN0aW9uKCl7Yi5hbmltYXRlPSEwfSl9fX1dKS5kaXJlY3RpdmUoIm1vZGFsV2luZG93IixbIiRtb2RhbFN0YWNrIiwiJHRpbWVvdXQiLGZ1bmN0aW9uKGEsYil7cmV0dXJue3Jlc3RyaWN0OiJFQSIsc2NvcGU6e2luZGV4OiJAIixhbmltYXRlOiI9In0scmVwbGFjZTohMCx0cmFuc2NsdWRlOiEwLHRlbXBsYXRlVXJsOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGIudGVtcGxhdGVVcmx8fCJ0ZW1wbGF0ZS9tb2RhbC93aW5kb3cuaHRtbCJ9LGxpbms6ZnVuY3Rpb24oYyxkLGUpe2QuYWRkQ2xhc3MoZS53aW5kb3dDbGFzc3x8IiIpLGMuc2l6ZT1lLnNpemUsYihmdW5jdGlvbigpe2MuYW5pbWF0ZT0hMCxkWzBdLmZvY3VzKCl9KSxjLmNsb3NlPWZ1bmN0aW9uKGIpe3ZhciBjPWEuZ2V0VG9wKCk7YyYmYy52YWx1ZS5iYWNrZHJvcCYmInN0YXRpYyIhPWMudmFsdWUuYmFja2Ryb3AmJmIudGFyZ2V0PT09Yi5jdXJyZW50VGFyZ2V0JiYoYi5wcmV2ZW50RGVmYXVsdCgpLGIuc3RvcFByb3BhZ2F0aW9uKCksYS5kaXNtaXNzKGMua2V5LCJiYWNrZHJvcCBjbGljayIpKX19fX1dKS5mYWN0b3J5KCIkbW9kYWxTdGFjayIsWyIkdHJhbnNpdGlvbiIsIiR0aW1lb3V0IiwiJGRvY3VtZW50IiwiJGNvbXBpbGUiLCIkcm9vdFNjb3BlIiwiJCRzdGFja2VkTWFwIixmdW5jdGlvbihhLGIsYyxkLGUsZil7ZnVuY3Rpb24gZygpe2Zvcih2YXIgYT0tMSxiPW4ua2V5cygpLGM9MDtjPGIubGVuZ3RoO2MrKyluLmdldChiW2NdKS52YWx1ZS5iYWNrZHJvcCYmKGE9Yyk7cmV0dXJuIGF9ZnVuY3Rpb24gaChhKXt2YXIgYj1jLmZpbmQoImJvZHkiKS5lcSgwKSxkPW4uZ2V0KGEpLnZhbHVlO24ucmVtb3ZlKGEpLGooZC5tb2RhbERvbUVsLGQubW9kYWxTY29wZSwzMDAsZnVuY3Rpb24oKXtkLm1vZGFsU2NvcGUuJGRlc3Ryb3koKSxiLnRvZ2dsZUNsYXNzKG0sbi5sZW5ndGgoKT4wKSxpKCl9KX1mdW5jdGlvbiBpKCl7aWYoayYmLTE9PWcoKSl7dmFyIGE9bDtqKGssbCwxNTAsZnVuY3Rpb24oKXthLiRkZXN0cm95KCksYT1udWxsfSksaz12b2lkIDAsbD12b2lkIDB9fWZ1bmN0aW9uIGooYyxkLGUsZil7ZnVuY3Rpb24gZygpe2cuZG9uZXx8KGcuZG9uZT0hMCxjLnJlbW92ZSgpLGYmJmYoKSl9ZC5hbmltYXRlPSExO3ZhciBoPWEudHJhbnNpdGlvbkVuZEV2ZW50TmFtZTtpZihoKXt2YXIgaT1iKGcsZSk7Yy5iaW5kKGgsZnVuY3Rpb24oKXtiLmNhbmNlbChpKSxnKCksZC4kYXBwbHkoKX0pfWVsc2UgYihnLDApfXZhciBrLGwsbT0ibW9kYWwtb3BlbiIsbj1mLmNyZWF0ZU5ldygpLG89e307cmV0dXJuIGUuJHdhdGNoKGcsZnVuY3Rpb24oYSl7bCYmKGwuaW5kZXg9YSl9KSxjLmJpbmQoImtleWRvd24iLGZ1bmN0aW9uKGEpe3ZhciBiOzI3PT09YS53aGljaCYmKGI9bi50b3AoKSxiJiZiLnZhbHVlLmtleWJvYXJkJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGUuJGFwcGx5KGZ1bmN0aW9uKCl7by5kaXNtaXNzKGIua2V5LCJlc2NhcGUga2V5IHByZXNzIil9KSkpfSksby5vcGVuPWZ1bmN0aW9uKGEsYil7bi5hZGQoYSx7ZGVmZXJyZWQ6Yi5kZWZlcnJlZCxtb2RhbFNjb3BlOmIuc2NvcGUsYmFja2Ryb3A6Yi5iYWNrZHJvcCxrZXlib2FyZDpiLmtleWJvYXJkfSk7dmFyIGY9Yy5maW5kKCJib2R5IikuZXEoMCksaD1nKCk7aD49MCYmIWsmJihsPWUuJG5ldyghMCksbC5pbmRleD1oLGs9ZCgiPGRpdiBtb2RhbC1iYWNrZHJvcD48L2Rpdj4iKShsKSxmLmFwcGVuZChrKSk7dmFyIGk9YW5ndWxhci5lbGVtZW50KCI8ZGl2IG1vZGFsLXdpbmRvdz48L2Rpdj4iKTtpLmF0dHIoeyJ0ZW1wbGF0ZS11cmwiOmIud2luZG93VGVtcGxhdGVVcmwsIndpbmRvdy1jbGFzcyI6Yi53aW5kb3dDbGFzcyxzaXplOmIuc2l6ZSxpbmRleDpuLmxlbmd0aCgpLTEsYW5pbWF0ZToiYW5pbWF0ZSJ9KS5odG1sKGIuY29udGVudCk7dmFyIGo9ZChpKShiLnNjb3BlKTtuLnRvcCgpLnZhbHVlLm1vZGFsRG9tRWw9aixmLmFwcGVuZChqKSxmLmFkZENsYXNzKG0pfSxvLmNsb3NlPWZ1bmN0aW9uKGEsYil7dmFyIGM9bi5nZXQoYSkudmFsdWU7YyYmKGMuZGVmZXJyZWQucmVzb2x2ZShiKSxoKGEpKX0sby5kaXNtaXNzPWZ1bmN0aW9uKGEsYil7dmFyIGM9bi5nZXQoYSkudmFsdWU7YyYmKGMuZGVmZXJyZWQucmVqZWN0KGIpLGgoYSkpfSxvLmRpc21pc3NBbGw9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMuZ2V0VG9wKCk7YjspdGhpcy5kaXNtaXNzKGIua2V5LGEpLGI9dGhpcy5nZXRUb3AoKX0sby5nZXRUb3A9ZnVuY3Rpb24oKXtyZXR1cm4gbi50b3AoKX0sb31dKS5wcm92aWRlcigiJG1vZGFsIixmdW5jdGlvbigpe3ZhciBhPXtvcHRpb25zOntiYWNrZHJvcDohMCxrZXlib2FyZDohMH0sJGdldDpbIiRpbmplY3RvciIsIiRyb290U2NvcGUiLCIkcSIsIiRodHRwIiwiJHRlbXBsYXRlQ2FjaGUiLCIkY29udHJvbGxlciIsIiRtb2RhbFN0YWNrIixmdW5jdGlvbihiLGMsZCxlLGYsZyxoKXtmdW5jdGlvbiBpKGEpe3JldHVybiBhLnRlbXBsYXRlP2Qud2hlbihhLnRlbXBsYXRlKTplLmdldChhLnRlbXBsYXRlVXJsLHtjYWNoZTpmfSkudGhlbihmdW5jdGlvbihhKXtyZXR1cm4gYS5kYXRhfSl9ZnVuY3Rpb24gaihhKXt2YXIgYz1bXTtyZXR1cm4gYW5ndWxhci5mb3JFYWNoKGEsZnVuY3Rpb24oYSl7KGFuZ3VsYXIuaXNGdW5jdGlvbihhKXx8YW5ndWxhci5pc0FycmF5KGEpKSYmYy5wdXNoKGQud2hlbihiLmludm9rZShhKSkpfSksY312YXIgaz17fTtyZXR1cm4gay5vcGVuPWZ1bmN0aW9uKGIpe3ZhciBlPWQuZGVmZXIoKSxmPWQuZGVmZXIoKSxrPXtyZXN1bHQ6ZS5wcm9taXNlLG9wZW5lZDpmLnByb21pc2UsY2xvc2U6ZnVuY3Rpb24oYSl7aC5jbG9zZShrLGEpfSxkaXNtaXNzOmZ1bmN0aW9uKGEpe2guZGlzbWlzcyhrLGEpfX07aWYoYj1hbmd1bGFyLmV4dGVuZCh7fSxhLm9wdGlvbnMsYiksYi5yZXNvbHZlPWIucmVzb2x2ZXx8e30sIWIudGVtcGxhdGUmJiFiLnRlbXBsYXRlVXJsKXRocm93IG5ldyBFcnJvcigiT25lIG9mIHRlbXBsYXRlIG9yIHRlbXBsYXRlVXJsIG9wdGlvbnMgaXMgcmVxdWlyZWQuIik7dmFyIGw9ZC5hbGwoW2koYildLmNvbmNhdChqKGIucmVzb2x2ZSkpKTtyZXR1cm4gbC50aGVuKGZ1bmN0aW9uKGEpe3ZhciBkPShiLnNjb3BlfHxjKS4kbmV3KCk7ZC4kY2xvc2U9ay5jbG9zZSxkLiRkaXNtaXNzPWsuZGlzbWlzczt2YXIgZixpPXt9LGo9MTtiLmNvbnRyb2xsZXImJihpLiRzY29wZT1kLGkuJG1vZGFsSW5zdGFuY2U9ayxhbmd1bGFyLmZvckVhY2goYi5yZXNvbHZlLGZ1bmN0aW9uKGIsYyl7aVtjXT1hW2orK119KSxmPWcoYi5jb250cm9sbGVyLGkpKSxoLm9wZW4oayx7c2NvcGU6ZCxkZWZlcnJlZDplLGNvbnRlbnQ6YVswXSxiYWNrZHJvcDpiLmJhY2tkcm9wLGtleWJvYXJkOmIua2V5Ym9hcmQsd2luZG93Q2xhc3M6Yi53aW5kb3dDbGFzcyx3aW5kb3dUZW1wbGF0ZVVybDpiLndpbmRvd1RlbXBsYXRlVXJsLHNpemU6Yi5zaXplfSl9LGZ1bmN0aW9uKGEpe2UucmVqZWN0KGEpfSksbC50aGVuKGZ1bmN0aW9uKCl7Zi5yZXNvbHZlKCEwKX0sZnVuY3Rpb24oKXtmLnJlamVjdCghMSl9KSxrfSxrfV19O3JldHVybiBhfSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5wYWdpbmF0aW9uIixbXSkuY29udHJvbGxlcigiUGFnaW5hdGlvbkNvbnRyb2xsZXIiLFsiJHNjb3BlIiwiJGF0dHJzIiwiJHBhcnNlIixmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcyxlPXskc2V0Vmlld1ZhbHVlOmFuZ3VsYXIubm9vcH0sZj1iLm51bVBhZ2VzP2MoYi5udW1QYWdlcykuYXNzaWduOmFuZ3VsYXIubm9vcDt0aGlzLmluaXQ9ZnVuY3Rpb24oZixnKXtlPWYsdGhpcy5jb25maWc9ZyxlLiRyZW5kZXI9ZnVuY3Rpb24oKXtkLnJlbmRlcigpfSxiLml0ZW1zUGVyUGFnZT9hLiRwYXJlbnQuJHdhdGNoKGMoYi5pdGVtc1BlclBhZ2UpLGZ1bmN0aW9uKGIpe2QuaXRlbXNQZXJQYWdlPXBhcnNlSW50KGIsMTApLGEudG90YWxQYWdlcz1kLmNhbGN1bGF0ZVRvdGFsUGFnZXMoKX0pOnRoaXMuaXRlbXNQZXJQYWdlPWcuaXRlbXNQZXJQYWdlfSx0aGlzLmNhbGN1bGF0ZVRvdGFsUGFnZXM9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLml0ZW1zUGVyUGFnZTwxPzE6TWF0aC5jZWlsKGEudG90YWxJdGVtcy90aGlzLml0ZW1zUGVyUGFnZSk7cmV0dXJuIE1hdGgubWF4KGJ8fDAsMSl9LHRoaXMucmVuZGVyPWZ1bmN0aW9uKCl7YS5wYWdlPXBhcnNlSW50KGUuJHZpZXdWYWx1ZSwxMCl8fDF9LGEuc2VsZWN0UGFnZT1mdW5jdGlvbihiKXthLnBhZ2UhPT1iJiZiPjAmJmI8PWEudG90YWxQYWdlcyYmKGUuJHNldFZpZXdWYWx1ZShiKSxlLiRyZW5kZXIoKSl9LGEuZ2V0VGV4dD1mdW5jdGlvbihiKXtyZXR1cm4gYVtiKyJUZXh0Il18fGQuY29uZmlnW2IrIlRleHQiXX0sYS5ub1ByZXZpb3VzPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT1hLnBhZ2V9LGEubm9OZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIGEucGFnZT09PWEudG90YWxQYWdlc30sYS4kd2F0Y2goInRvdGFsSXRlbXMiLGZ1bmN0aW9uKCl7YS50b3RhbFBhZ2VzPWQuY2FsY3VsYXRlVG90YWxQYWdlcygpfSksYS4kd2F0Y2goInRvdGFsUGFnZXMiLGZ1bmN0aW9uKGIpe2YoYS4kcGFyZW50LGIpLGEucGFnZT5iP2Euc2VsZWN0UGFnZShiKTplLiRyZW5kZXIoKX0pfV0pLmNvbnN0YW50KCJwYWdpbmF0aW9uQ29uZmlnIix7aXRlbXNQZXJQYWdlOjEwLGJvdW5kYXJ5TGlua3M6ITEsZGlyZWN0aW9uTGlua3M6ITAsZmlyc3RUZXh0OiJGaXJzdCIscHJldmlvdXNUZXh0OiJQcmV2aW91cyIsbmV4dFRleHQ6Ik5leHQiLGxhc3RUZXh0OiJMYXN0Iixyb3RhdGU6ITB9KS5kaXJlY3RpdmUoInBhZ2luYXRpb24iLFsiJHBhcnNlIiwicGFnaW5hdGlvbkNvbmZpZyIsZnVuY3Rpb24oYSxiKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixzY29wZTp7dG90YWxJdGVtczoiPSIsZmlyc3RUZXh0OiJAIixwcmV2aW91c1RleHQ6IkAiLG5leHRUZXh0OiJAIixsYXN0VGV4dDoiQCJ9LHJlcXVpcmU6WyJwYWdpbmF0aW9uIiwiP25nTW9kZWwiXSxjb250cm9sbGVyOiJQYWdpbmF0aW9uQ29udHJvbGxlciIsdGVtcGxhdGVVcmw6InRlbXBsYXRlL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5odG1sIixyZXBsYWNlOiEwLGxpbms6ZnVuY3Rpb24oYyxkLGUsZil7ZnVuY3Rpb24gZyhhLGIsYyl7cmV0dXJue251bWJlcjphLHRleHQ6YixhY3RpdmU6Y319ZnVuY3Rpb24gaChhLGIpe3ZhciBjPVtdLGQ9MSxlPWIsZj1hbmd1bGFyLmlzRGVmaW5lZChrKSYmYj5rO2YmJihsPyhkPU1hdGgubWF4KGEtTWF0aC5mbG9vcihrLzIpLDEpLGU9ZCtrLTEsZT5iJiYoZT1iLGQ9ZS1rKzEpKTooZD0oTWF0aC5jZWlsKGEvayktMSkqaysxLGU9TWF0aC5taW4oZCtrLTEsYikpKTtmb3IodmFyIGg9ZDtlPj1oO2grKyl7dmFyIGk9ZyhoLGgsaD09PWEpO2MucHVzaChpKX1pZihmJiYhbCl7aWYoZD4xKXt2YXIgaj1nKGQtMSwiLi4uIiwhMSk7Yy51bnNoaWZ0KGopfWlmKGI+ZSl7dmFyIG09ZyhlKzEsIi4uLiIsITEpO2MucHVzaChtKX19cmV0dXJuIGN9dmFyIGk9ZlswXSxqPWZbMV07aWYoail7dmFyIGs9YW5ndWxhci5pc0RlZmluZWQoZS5tYXhTaXplKT9jLiRwYXJlbnQuJGV2YWwoZS5tYXhTaXplKTpiLm1heFNpemUsbD1hbmd1bGFyLmlzRGVmaW5lZChlLnJvdGF0ZSk/Yy4kcGFyZW50LiRldmFsKGUucm90YXRlKTpiLnJvdGF0ZTtjLmJvdW5kYXJ5TGlua3M9YW5ndWxhci5pc0RlZmluZWQoZS5ib3VuZGFyeUxpbmtzKT9jLiRwYXJlbnQuJGV2YWwoZS5ib3VuZGFyeUxpbmtzKTpiLmJvdW5kYXJ5TGlua3MsYy5kaXJlY3Rpb25MaW5rcz1hbmd1bGFyLmlzRGVmaW5lZChlLmRpcmVjdGlvbkxpbmtzKT9jLiRwYXJlbnQuJGV2YWwoZS5kaXJlY3Rpb25MaW5rcyk6Yi5kaXJlY3Rpb25MaW5rcyxpLmluaXQoaixiKSxlLm1heFNpemUmJmMuJHBhcmVudC4kd2F0Y2goYShlLm1heFNpemUpLGZ1bmN0aW9uKGEpe2s9cGFyc2VJbnQoYSwxMCksaS5yZW5kZXIoKX0pO3ZhciBtPWkucmVuZGVyO2kucmVuZGVyPWZ1bmN0aW9uKCl7bSgpLGMucGFnZT4wJiZjLnBhZ2U8PWMudG90YWxQYWdlcyYmKGMucGFnZXM9aChjLnBhZ2UsYy50b3RhbFBhZ2VzKSl9fX19fV0pLmNvbnN0YW50KCJwYWdlckNvbmZpZyIse2l0ZW1zUGVyUGFnZToxMCxwcmV2aW91c1RleHQ6IsKrIFByZXZpb3VzIixuZXh0VGV4dDoiTmV4dCDCuyIsYWxpZ246ITB9KS5kaXJlY3RpdmUoInBhZ2VyIixbInBhZ2VyQ29uZmlnIixmdW5jdGlvbihhKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixzY29wZTp7dG90YWxJdGVtczoiPSIscHJldmlvdXNUZXh0OiJAIixuZXh0VGV4dDoiQCJ9LHJlcXVpcmU6WyJwYWdlciIsIj9uZ01vZGVsIl0sY29udHJvbGxlcjoiUGFnaW5hdGlvbkNvbnRyb2xsZXIiLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9wYWdpbmF0aW9uL3BhZ2VyLmh0bWwiLHJlcGxhY2U6ITAsbGluazpmdW5jdGlvbihiLGMsZCxlKXt2YXIgZj1lWzBdLGc9ZVsxXTtnJiYoYi5hbGlnbj1hbmd1bGFyLmlzRGVmaW5lZChkLmFsaWduKT9iLiRwYXJlbnQuJGV2YWwoZC5hbGlnbik6YS5hbGlnbixmLmluaXQoZyxhKSl9fX1dKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnRvb2x0aXAiLFsidWkuYm9vdHN0cmFwLnBvc2l0aW9uIiwidWkuYm9vdHN0cmFwLmJpbmRIdG1sIl0pLnByb3ZpZGVyKCIkdG9vbHRpcCIsZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEpe3ZhciBiPS9bQS1aXS9nLGM9Ii0iOworcmV0dXJuIGEucmVwbGFjZShiLGZ1bmN0aW9uKGEsYil7cmV0dXJuKGI/YzoiIikrYS50b0xvd2VyQ2FzZSgpfSl9dmFyIGI9e3BsYWNlbWVudDoidG9wIixhbmltYXRpb246ITAscG9wdXBEZWxheTowfSxjPXttb3VzZWVudGVyOiJtb3VzZWxlYXZlIixjbGljazoiY2xpY2siLGZvY3VzOiJibHVyIn0sZD17fTt0aGlzLm9wdGlvbnM9ZnVuY3Rpb24oYSl7YW5ndWxhci5leHRlbmQoZCxhKX0sdGhpcy5zZXRUcmlnZ2Vycz1mdW5jdGlvbihhKXthbmd1bGFyLmV4dGVuZChjLGEpfSx0aGlzLiRnZXQ9WyIkd2luZG93IiwiJGNvbXBpbGUiLCIkdGltZW91dCIsIiRwYXJzZSIsIiRkb2N1bWVudCIsIiRwb3NpdGlvbiIsIiRpbnRlcnBvbGF0ZSIsZnVuY3Rpb24oZSxmLGcsaCxpLGosayl7cmV0dXJuIGZ1bmN0aW9uKGUsbCxtKXtmdW5jdGlvbiBuKGEpe3ZhciBiPWF8fG8udHJpZ2dlcnx8bSxkPWNbYl18fGI7cmV0dXJue3Nob3c6YixoaWRlOmR9fXZhciBvPWFuZ3VsYXIuZXh0ZW5kKHt9LGIsZCkscD1hKGUpLHE9ay5zdGFydFN5bWJvbCgpLHI9ay5lbmRTeW1ib2woKSxzPSI8ZGl2ICIrcCsnLXBvcHVwIHRpdGxlPSInK3ErInR0X3RpdGxlIityKyciIGNvbnRlbnQ9IicrcSsidHRfY29udGVudCIrcisnIiBwbGFjZW1lbnQ9IicrcSsidHRfcGxhY2VtZW50IityKyciIGFuaW1hdGlvbj0idHRfYW5pbWF0aW9uIiBpcy1vcGVuPSJ0dF9pc09wZW4iPjwvZGl2Pic7cmV0dXJue3Jlc3RyaWN0OiJFQSIsc2NvcGU6ITAsY29tcGlsZTpmdW5jdGlvbigpe3ZhciBhPWYocyk7cmV0dXJuIGZ1bmN0aW9uKGIsYyxkKXtmdW5jdGlvbiBmKCl7Yi50dF9pc09wZW4/bSgpOmsoKX1mdW5jdGlvbiBrKCl7KCF5fHxiLiRldmFsKGRbbCsiRW5hYmxlIl0pKSYmKGIudHRfcG9wdXBEZWxheT92fHwodj1nKHAsYi50dF9wb3B1cERlbGF5LCExKSx2LnRoZW4oZnVuY3Rpb24oYSl7YSgpfSkpOnAoKSgpKX1mdW5jdGlvbiBtKCl7Yi4kYXBwbHkoZnVuY3Rpb24oKXtxKCl9KX1mdW5jdGlvbiBwKCl7cmV0dXJuIHY9bnVsbCx1JiYoZy5jYW5jZWwodSksdT1udWxsKSxiLnR0X2NvbnRlbnQ/KHIoKSx0LmNzcyh7dG9wOjAsbGVmdDowLGRpc3BsYXk6ImJsb2NrIn0pLHc/aS5maW5kKCJib2R5IikuYXBwZW5kKHQpOmMuYWZ0ZXIodCkseigpLGIudHRfaXNPcGVuPSEwLGIuJGRpZ2VzdCgpLHopOmFuZ3VsYXIubm9vcH1mdW5jdGlvbiBxKCl7Yi50dF9pc09wZW49ITEsZy5jYW5jZWwodiksdj1udWxsLGIudHRfYW5pbWF0aW9uP3V8fCh1PWcocyw1MDApKTpzKCl9ZnVuY3Rpb24gcigpe3QmJnMoKSx0PWEoYixmdW5jdGlvbigpe30pLGIuJGRpZ2VzdCgpfWZ1bmN0aW9uIHMoKXt1PW51bGwsdCYmKHQucmVtb3ZlKCksdD1udWxsKX12YXIgdCx1LHYsdz1hbmd1bGFyLmlzRGVmaW5lZChvLmFwcGVuZFRvQm9keSk/by5hcHBlbmRUb0JvZHk6ITEseD1uKHZvaWQgMCkseT1hbmd1bGFyLmlzRGVmaW5lZChkW2wrIkVuYWJsZSJdKSx6PWZ1bmN0aW9uKCl7dmFyIGE9ai5wb3NpdGlvbkVsZW1lbnRzKGMsdCxiLnR0X3BsYWNlbWVudCx3KTthLnRvcCs9InB4IixhLmxlZnQrPSJweCIsdC5jc3MoYSl9O2IudHRfaXNPcGVuPSExLGQuJG9ic2VydmUoZSxmdW5jdGlvbihhKXtiLnR0X2NvbnRlbnQ9YSwhYSYmYi50dF9pc09wZW4mJnEoKX0pLGQuJG9ic2VydmUobCsiVGl0bGUiLGZ1bmN0aW9uKGEpe2IudHRfdGl0bGU9YX0pLGQuJG9ic2VydmUobCsiUGxhY2VtZW50IixmdW5jdGlvbihhKXtiLnR0X3BsYWNlbWVudD1hbmd1bGFyLmlzRGVmaW5lZChhKT9hOm8ucGxhY2VtZW50fSksZC4kb2JzZXJ2ZShsKyJQb3B1cERlbGF5IixmdW5jdGlvbihhKXt2YXIgYz1wYXJzZUludChhLDEwKTtiLnR0X3BvcHVwRGVsYXk9aXNOYU4oYyk/by5wb3B1cERlbGF5OmN9KTt2YXIgQT1mdW5jdGlvbigpe2MudW5iaW5kKHguc2hvdyxrKSxjLnVuYmluZCh4LmhpZGUsbSl9O2QuJG9ic2VydmUobCsiVHJpZ2dlciIsZnVuY3Rpb24oYSl7QSgpLHg9bihhKSx4LnNob3c9PT14LmhpZGU/Yy5iaW5kKHguc2hvdyxmKTooYy5iaW5kKHguc2hvdyxrKSxjLmJpbmQoeC5oaWRlLG0pKX0pO3ZhciBCPWIuJGV2YWwoZFtsKyJBbmltYXRpb24iXSk7Yi50dF9hbmltYXRpb249YW5ndWxhci5pc0RlZmluZWQoQik/ISFCOm8uYW5pbWF0aW9uLGQuJG9ic2VydmUobCsiQXBwZW5kVG9Cb2R5IixmdW5jdGlvbihhKXt3PWFuZ3VsYXIuaXNEZWZpbmVkKGEpP2goYSkoYik6d30pLHcmJmIuJG9uKCIkbG9jYXRpb25DaGFuZ2VTdWNjZXNzIixmdW5jdGlvbigpe2IudHRfaXNPcGVuJiZxKCl9KSxiLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7Zy5jYW5jZWwodSksZy5jYW5jZWwodiksQSgpLHMoKX0pfX19fX1dfSkuZGlyZWN0aXZlKCJ0b29sdGlwUG9wdXAiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCxzY29wZTp7Y29udGVudDoiQCIscGxhY2VtZW50OiJAIixhbmltYXRpb246IiYiLGlzT3BlbjoiJiJ9LHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS90b29sdGlwL3Rvb2x0aXAtcG9wdXAuaHRtbCJ9fSkuZGlyZWN0aXZlKCJ0b29sdGlwIixbIiR0b29sdGlwIixmdW5jdGlvbihhKXtyZXR1cm4gYSgidG9vbHRpcCIsInRvb2x0aXAiLCJtb3VzZWVudGVyIil9XSkuZGlyZWN0aXZlKCJ0b29sdGlwSHRtbFVuc2FmZVBvcHVwIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsc2NvcGU6e2NvbnRlbnQ6IkAiLHBsYWNlbWVudDoiQCIsYW5pbWF0aW9uOiImIixpc09wZW46IiYifSx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLWh0bWwtdW5zYWZlLXBvcHVwLmh0bWwifX0pLmRpcmVjdGl2ZSgidG9vbHRpcEh0bWxVbnNhZmUiLFsiJHRvb2x0aXAiLGZ1bmN0aW9uKGEpe3JldHVybiBhKCJ0b29sdGlwSHRtbFVuc2FmZSIsInRvb2x0aXAiLCJtb3VzZWVudGVyIil9XSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5wb3BvdmVyIixbInVpLmJvb3RzdHJhcC50b29sdGlwIl0pLmRpcmVjdGl2ZSgicG9wb3ZlclBvcHVwIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsc2NvcGU6e3RpdGxlOiJAIixjb250ZW50OiJAIixwbGFjZW1lbnQ6IkAiLGFuaW1hdGlvbjoiJiIsaXNPcGVuOiImIn0sdGVtcGxhdGVVcmw6InRlbXBsYXRlL3BvcG92ZXIvcG9wb3Zlci5odG1sIn19KS5kaXJlY3RpdmUoInBvcG92ZXIiLFsiJHRvb2x0aXAiLGZ1bmN0aW9uKGEpe3JldHVybiBhKCJwb3BvdmVyIiwicG9wb3ZlciIsImNsaWNrIil9XSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5wcm9ncmVzc2JhciIsW10pLmNvbnN0YW50KCJwcm9ncmVzc0NvbmZpZyIse2FuaW1hdGU6ITAsbWF4OjEwMH0pLmNvbnRyb2xsZXIoIlByb2dyZXNzQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLCJwcm9ncmVzc0NvbmZpZyIsZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMsZT1hbmd1bGFyLmlzRGVmaW5lZChiLmFuaW1hdGUpP2EuJHBhcmVudC4kZXZhbChiLmFuaW1hdGUpOmMuYW5pbWF0ZTt0aGlzLmJhcnM9W10sYS5tYXg9YW5ndWxhci5pc0RlZmluZWQoYi5tYXgpP2EuJHBhcmVudC4kZXZhbChiLm1heCk6Yy5tYXgsdGhpcy5hZGRCYXI9ZnVuY3Rpb24oYixjKXtlfHxjLmNzcyh7dHJhbnNpdGlvbjoibm9uZSJ9KSx0aGlzLmJhcnMucHVzaChiKSxiLiR3YXRjaCgidmFsdWUiLGZ1bmN0aW9uKGMpe2IucGVyY2VudD0rKDEwMCpjL2EubWF4KS50b0ZpeGVkKDIpfSksYi4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2M9bnVsbCxkLnJlbW92ZUJhcihiKX0pfSx0aGlzLnJlbW92ZUJhcj1mdW5jdGlvbihhKXt0aGlzLmJhcnMuc3BsaWNlKHRoaXMuYmFycy5pbmRleE9mKGEpLDEpfX1dKS5kaXJlY3RpdmUoInByb2dyZXNzIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsdHJhbnNjbHVkZTohMCxjb250cm9sbGVyOiJQcm9ncmVzc0NvbnRyb2xsZXIiLHJlcXVpcmU6InByb2dyZXNzIixzY29wZTp7fSx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3MuaHRtbCJ9fSkuZGlyZWN0aXZlKCJiYXIiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0cmFuc2NsdWRlOiEwLHJlcXVpcmU6Il5wcm9ncmVzcyIsc2NvcGU6e3ZhbHVlOiI9Iix0eXBlOiJAIn0sdGVtcGxhdGVVcmw6InRlbXBsYXRlL3Byb2dyZXNzYmFyL2Jhci5odG1sIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2QuYWRkQmFyKGEsYil9fX0pLmRpcmVjdGl2ZSgicHJvZ3Jlc3NiYXIiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0cmFuc2NsdWRlOiEwLGNvbnRyb2xsZXI6IlByb2dyZXNzQ29udHJvbGxlciIsc2NvcGU6e3ZhbHVlOiI9Iix0eXBlOiJAIn0sdGVtcGxhdGVVcmw6InRlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzYmFyLmh0bWwiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7ZC5hZGRCYXIoYSxhbmd1bGFyLmVsZW1lbnQoYi5jaGlsZHJlbigpWzBdKSl9fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAucmF0aW5nIixbXSkuY29uc3RhbnQoInJhdGluZ0NvbmZpZyIse21heDo1LHN0YXRlT246bnVsbCxzdGF0ZU9mZjpudWxsfSkuY29udHJvbGxlcigiUmF0aW5nQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLCJyYXRpbmdDb25maWciLGZ1bmN0aW9uKGEsYixjKXt2YXIgZD17JHNldFZpZXdWYWx1ZTphbmd1bGFyLm5vb3B9O3RoaXMuaW5pdD1mdW5jdGlvbihlKXtkPWUsZC4kcmVuZGVyPXRoaXMucmVuZGVyLHRoaXMuc3RhdGVPbj1hbmd1bGFyLmlzRGVmaW5lZChiLnN0YXRlT24pP2EuJHBhcmVudC4kZXZhbChiLnN0YXRlT24pOmMuc3RhdGVPbix0aGlzLnN0YXRlT2ZmPWFuZ3VsYXIuaXNEZWZpbmVkKGIuc3RhdGVPZmYpP2EuJHBhcmVudC4kZXZhbChiLnN0YXRlT2ZmKTpjLnN0YXRlT2ZmO3ZhciBmPWFuZ3VsYXIuaXNEZWZpbmVkKGIucmF0aW5nU3RhdGVzKT9hLiRwYXJlbnQuJGV2YWwoYi5yYXRpbmdTdGF0ZXMpOm5ldyBBcnJheShhbmd1bGFyLmlzRGVmaW5lZChiLm1heCk/YS4kcGFyZW50LiRldmFsKGIubWF4KTpjLm1heCk7YS5yYW5nZT10aGlzLmJ1aWxkVGVtcGxhdGVPYmplY3RzKGYpfSx0aGlzLmJ1aWxkVGVtcGxhdGVPYmplY3RzPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0wLGM9YS5sZW5ndGg7Yz5iO2IrKylhW2JdPWFuZ3VsYXIuZXh0ZW5kKHtpbmRleDpifSx7c3RhdGVPbjp0aGlzLnN0YXRlT24sc3RhdGVPZmY6dGhpcy5zdGF0ZU9mZn0sYVtiXSk7cmV0dXJuIGF9LGEucmF0ZT1mdW5jdGlvbihiKXshYS5yZWFkb25seSYmYj49MCYmYjw9YS5yYW5nZS5sZW5ndGgmJihkLiRzZXRWaWV3VmFsdWUoYiksZC4kcmVuZGVyKCkpfSxhLmVudGVyPWZ1bmN0aW9uKGIpe2EucmVhZG9ubHl8fChhLnZhbHVlPWIpLGEub25Ib3Zlcih7dmFsdWU6Yn0pfSxhLnJlc2V0PWZ1bmN0aW9uKCl7YS52YWx1ZT1kLiR2aWV3VmFsdWUsYS5vbkxlYXZlKCl9LGEub25LZXlkb3duPWZ1bmN0aW9uKGIpey8oMzd8Mzh8Mzl8NDApLy50ZXN0KGIud2hpY2gpJiYoYi5wcmV2ZW50RGVmYXVsdCgpLGIuc3RvcFByb3BhZ2F0aW9uKCksYS5yYXRlKGEudmFsdWUrKDM4PT09Yi53aGljaHx8Mzk9PT1iLndoaWNoPzE6LTEpKSl9LHRoaXMucmVuZGVyPWZ1bmN0aW9uKCl7YS52YWx1ZT1kLiR2aWV3VmFsdWV9fV0pLmRpcmVjdGl2ZSgicmF0aW5nIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcXVpcmU6WyJyYXRpbmciLCJuZ01vZGVsIl0sc2NvcGU6e3JlYWRvbmx5OiI9PyIsb25Ib3ZlcjoiJiIsb25MZWF2ZToiJiJ9LGNvbnRyb2xsZXI6IlJhdGluZ0NvbnRyb2xsZXIiLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9yYXRpbmcvcmF0aW5nLmh0bWwiLHJlcGxhY2U6ITAsbGluazpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1kWzBdLGY9ZFsxXTtmJiZlLmluaXQoZil9fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAudGFicyIsW10pLmNvbnRyb2xsZXIoIlRhYnNldENvbnRyb2xsZXIiLFsiJHNjb3BlIixmdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9Yi50YWJzPWEudGFicz1bXTtiLnNlbGVjdD1mdW5jdGlvbihhKXthbmd1bGFyLmZvckVhY2goYyxmdW5jdGlvbihiKXtiLmFjdGl2ZSYmYiE9PWEmJihiLmFjdGl2ZT0hMSxiLm9uRGVzZWxlY3QoKSl9KSxhLmFjdGl2ZT0hMCxhLm9uU2VsZWN0KCl9LGIuYWRkVGFiPWZ1bmN0aW9uKGEpe2MucHVzaChhKSwxPT09Yy5sZW5ndGg/YS5hY3RpdmU9ITA6YS5hY3RpdmUmJmIuc2VsZWN0KGEpfSxiLnJlbW92ZVRhYj1mdW5jdGlvbihhKXt2YXIgZD1jLmluZGV4T2YoYSk7aWYoYS5hY3RpdmUmJmMubGVuZ3RoPjEpe3ZhciBlPWQ9PWMubGVuZ3RoLTE/ZC0xOmQrMTtiLnNlbGVjdChjW2VdKX1jLnNwbGljZShkLDEpfX1dKS5kaXJlY3RpdmUoInRhYnNldCIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIix0cmFuc2NsdWRlOiEwLHJlcGxhY2U6ITAsc2NvcGU6e3R5cGU6IkAifSxjb250cm9sbGVyOiJUYWJzZXRDb250cm9sbGVyIix0ZW1wbGF0ZVVybDoidGVtcGxhdGUvdGFicy90YWJzZXQuaHRtbCIsbGluazpmdW5jdGlvbihhLGIsYyl7YS52ZXJ0aWNhbD1hbmd1bGFyLmlzRGVmaW5lZChjLnZlcnRpY2FsKT9hLiRwYXJlbnQuJGV2YWwoYy52ZXJ0aWNhbCk6ITEsYS5qdXN0aWZpZWQ9YW5ndWxhci5pc0RlZmluZWQoYy5qdXN0aWZpZWQpP2EuJHBhcmVudC4kZXZhbChjLmp1c3RpZmllZCk6ITF9fX0pLmRpcmVjdGl2ZSgidGFiIixbIiRwYXJzZSIsZnVuY3Rpb24oYSl7cmV0dXJue3JlcXVpcmU6Il50YWJzZXQiLHJlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvdGFicy90YWIuaHRtbCIsdHJhbnNjbHVkZTohMCxzY29wZTp7YWN0aXZlOiI9PyIsaGVhZGluZzoiQCIsb25TZWxlY3Q6IiZzZWxlY3QiLG9uRGVzZWxlY3Q6IiZkZXNlbGVjdCJ9LGNvbnRyb2xsZXI6ZnVuY3Rpb24oKXt9LGNvbXBpbGU6ZnVuY3Rpb24oYixjLGQpe3JldHVybiBmdW5jdGlvbihiLGMsZSxmKXtiLiR3YXRjaCgiYWN0aXZlIixmdW5jdGlvbihhKXthJiZmLnNlbGVjdChiKX0pLGIuZGlzYWJsZWQ9ITEsZS5kaXNhYmxlZCYmYi4kcGFyZW50LiR3YXRjaChhKGUuZGlzYWJsZWQpLGZ1bmN0aW9uKGEpe2IuZGlzYWJsZWQ9ISFhfSksYi5zZWxlY3Q9ZnVuY3Rpb24oKXtiLmRpc2FibGVkfHwoYi5hY3RpdmU9ITApfSxmLmFkZFRhYihiKSxiLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7Zi5yZW1vdmVUYWIoYil9KSxiLiR0cmFuc2NsdWRlRm49ZH19fX1dKS5kaXJlY3RpdmUoInRhYkhlYWRpbmdUcmFuc2NsdWRlIixbZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkEiLHJlcXVpcmU6Il50YWIiLGxpbms6ZnVuY3Rpb24oYSxiKXthLiR3YXRjaCgiaGVhZGluZ0VsZW1lbnQiLGZ1bmN0aW9uKGEpe2EmJihiLmh0bWwoIiIpLGIuYXBwZW5kKGEpKX0pfX19XSkuZGlyZWN0aXZlKCJ0YWJDb250ZW50VHJhbnNjbHVkZSIsZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEpe3JldHVybiBhLnRhZ05hbWUmJihhLmhhc0F0dHJpYnV0ZSgidGFiLWhlYWRpbmciKXx8YS5oYXNBdHRyaWJ1dGUoImRhdGEtdGFiLWhlYWRpbmciKXx8InRhYi1oZWFkaW5nIj09PWEudGFnTmFtZS50b0xvd2VyQ2FzZSgpfHwiZGF0YS10YWItaGVhZGluZyI9PT1hLnRhZ05hbWUudG9Mb3dlckNhc2UoKSl9cmV0dXJue3Jlc3RyaWN0OiJBIixyZXF1aXJlOiJedGFic2V0IixsaW5rOmZ1bmN0aW9uKGIsYyxkKXt2YXIgZT1iLiRldmFsKGQudGFiQ29udGVudFRyYW5zY2x1ZGUpO2UuJHRyYW5zY2x1ZGVGbihlLiRwYXJlbnQsZnVuY3Rpb24oYil7YW5ndWxhci5mb3JFYWNoKGIsZnVuY3Rpb24oYil7YShiKT9lLmhlYWRpbmdFbGVtZW50PWI6Yy5hcHBlbmQoYil9KX0pfX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnRpbWVwaWNrZXIiLFtdKS5jb25zdGFudCgidGltZXBpY2tlckNvbmZpZyIse2hvdXJTdGVwOjEsbWludXRlU3RlcDoxLHNob3dNZXJpZGlhbjohMCxtZXJpZGlhbnM6bnVsbCxyZWFkb25seUlucHV0OiExLG1vdXNld2hlZWw6ITB9KS5jb250cm9sbGVyKCJUaW1lcGlja2VyQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLCIkcGFyc2UiLCIkbG9nIiwiJGxvY2FsZSIsInRpbWVwaWNrZXJDb25maWciLGZ1bmN0aW9uKGEsYixjLGQsZSxmKXtmdW5jdGlvbiBnKCl7dmFyIGI9cGFyc2VJbnQoYS5ob3VycywxMCksYz1hLnNob3dNZXJpZGlhbj9iPjAmJjEzPmI6Yj49MCYmMjQ+YjtyZXR1cm4gYz8oYS5zaG93TWVyaWRpYW4mJigxMj09PWImJihiPTApLGEubWVyaWRpYW49PT1wWzFdJiYoYis9MTIpKSxiKTp2b2lkIDB9ZnVuY3Rpb24gaCgpe3ZhciBiPXBhcnNlSW50KGEubWludXRlcywxMCk7cmV0dXJuIGI+PTAmJjYwPmI/Yjp2b2lkIDB9ZnVuY3Rpb24gaShhKXtyZXR1cm4gYW5ndWxhci5pc0RlZmluZWQoYSkmJmEudG9TdHJpbmcoKS5sZW5ndGg8Mj8iMCIrYTphfWZ1bmN0aW9uIGooYSl7aygpLG8uJHNldFZpZXdWYWx1ZShuZXcgRGF0ZShuKSksbChhKX1mdW5jdGlvbiBrKCl7by4kc2V0VmFsaWRpdHkoInRpbWUiLCEwKSxhLmludmFsaWRIb3Vycz0hMSxhLmludmFsaWRNaW51dGVzPSExfWZ1bmN0aW9uIGwoYil7dmFyIGM9bi5nZXRIb3VycygpLGQ9bi5nZXRNaW51dGVzKCk7YS5zaG93TWVyaWRpYW4mJihjPTA9PT1jfHwxMj09PWM/MTI6YyUxMiksYS5ob3Vycz0iaCI9PT1iP2M6aShjKSxhLm1pbnV0ZXM9Im0iPT09Yj9kOmkoZCksYS5tZXJpZGlhbj1uLmdldEhvdXJzKCk8MTI/cFswXTpwWzFdfWZ1bmN0aW9uIG0oYSl7dmFyIGI9bmV3IERhdGUobi5nZXRUaW1lKCkrNmU0KmEpO24uc2V0SG91cnMoYi5nZXRIb3VycygpLGIuZ2V0TWludXRlcygpKSxqKCl9dmFyIG49bmV3IERhdGUsbz17JHNldFZpZXdWYWx1ZTphbmd1bGFyLm5vb3B9LHA9YW5ndWxhci5pc0RlZmluZWQoYi5tZXJpZGlhbnMpP2EuJHBhcmVudC4kZXZhbChiLm1lcmlkaWFucyk6Zi5tZXJpZGlhbnN8fGUuREFURVRJTUVfRk9STUFUUy5BTVBNUzt0aGlzLmluaXQ9ZnVuY3Rpb24oYyxkKXtvPWMsby4kcmVuZGVyPXRoaXMucmVuZGVyO3ZhciBlPWQuZXEoMCksZz1kLmVxKDEpLGg9YW5ndWxhci5pc0RlZmluZWQoYi5tb3VzZXdoZWVsKT9hLiRwYXJlbnQuJGV2YWwoYi5tb3VzZXdoZWVsKTpmLm1vdXNld2hlZWw7aCYmdGhpcy5zZXR1cE1vdXNld2hlZWxFdmVudHMoZSxnKSxhLnJlYWRvbmx5SW5wdXQ9YW5ndWxhci5pc0RlZmluZWQoYi5yZWFkb25seUlucHV0KT9hLiRwYXJlbnQuJGV2YWwoYi5yZWFkb25seUlucHV0KTpmLnJlYWRvbmx5SW5wdXQsdGhpcy5zZXR1cElucHV0RXZlbnRzKGUsZyl9O3ZhciBxPWYuaG91clN0ZXA7Yi5ob3VyU3RlcCYmYS4kcGFyZW50LiR3YXRjaChjKGIuaG91clN0ZXApLGZ1bmN0aW9uKGEpe3E9cGFyc2VJbnQoYSwxMCl9KTt2YXIgcj1mLm1pbnV0ZVN0ZXA7Yi5taW51dGVTdGVwJiZhLiRwYXJlbnQuJHdhdGNoKGMoYi5taW51dGVTdGVwKSxmdW5jdGlvbihhKXtyPXBhcnNlSW50KGEsMTApfSksYS5zaG93TWVyaWRpYW49Zi5zaG93TWVyaWRpYW4sYi5zaG93TWVyaWRpYW4mJmEuJHBhcmVudC4kd2F0Y2goYyhiLnNob3dNZXJpZGlhbiksZnVuY3Rpb24oYil7aWYoYS5zaG93TWVyaWRpYW49ISFiLG8uJGVycm9yLnRpbWUpe3ZhciBjPWcoKSxkPWgoKTthbmd1bGFyLmlzRGVmaW5lZChjKSYmYW5ndWxhci5pc0RlZmluZWQoZCkmJihuLnNldEhvdXJzKGMpLGooKSl9ZWxzZSBsKCl9KSx0aGlzLnNldHVwTW91c2V3aGVlbEV2ZW50cz1mdW5jdGlvbihiLGMpe3ZhciBkPWZ1bmN0aW9uKGEpe2Eub3JpZ2luYWxFdmVudCYmKGE9YS5vcmlnaW5hbEV2ZW50KTt2YXIgYj1hLndoZWVsRGVsdGE/YS53aGVlbERlbHRhOi1hLmRlbHRhWTtyZXR1cm4gYS5kZXRhaWx8fGI+MH07Yi5iaW5kKCJtb3VzZXdoZWVsIHdoZWVsIixmdW5jdGlvbihiKXthLiRhcHBseShkKGIpP2EuaW5jcmVtZW50SG91cnMoKTphLmRlY3JlbWVudEhvdXJzKCkpLGIucHJldmVudERlZmF1bHQoKX0pLGMuYmluZCgibW91c2V3aGVlbCB3aGVlbCIsZnVuY3Rpb24oYil7YS4kYXBwbHkoZChiKT9hLmluY3JlbWVudE1pbnV0ZXMoKTphLmRlY3JlbWVudE1pbnV0ZXMoKSksYi5wcmV2ZW50RGVmYXVsdCgpfSl9LHRoaXMuc2V0dXBJbnB1dEV2ZW50cz1mdW5jdGlvbihiLGMpe2lmKGEucmVhZG9ubHlJbnB1dClyZXR1cm4gYS51cGRhdGVIb3Vycz1hbmd1bGFyLm5vb3Asdm9pZChhLnVwZGF0ZU1pbnV0ZXM9YW5ndWxhci5ub29wKTt2YXIgZD1mdW5jdGlvbihiLGMpe28uJHNldFZpZXdWYWx1ZShudWxsKSxvLiRzZXRWYWxpZGl0eSgidGltZSIsITEpLGFuZ3VsYXIuaXNEZWZpbmVkKGIpJiYoYS5pbnZhbGlkSG91cnM9YiksYW5ndWxhci5pc0RlZmluZWQoYykmJihhLmludmFsaWRNaW51dGVzPWMpfTthLnVwZGF0ZUhvdXJzPWZ1bmN0aW9uKCl7dmFyIGE9ZygpO2FuZ3VsYXIuaXNEZWZpbmVkKGEpPyhuLnNldEhvdXJzKGEpLGooImgiKSk6ZCghMCl9LGIuYmluZCgiYmx1ciIsZnVuY3Rpb24oKXshYS5pbnZhbGlkSG91cnMmJmEuaG91cnM8MTAmJmEuJGFwcGx5KGZ1bmN0aW9uKCl7YS5ob3Vycz1pKGEuaG91cnMpfSl9KSxhLnVwZGF0ZU1pbnV0ZXM9ZnVuY3Rpb24oKXt2YXIgYT1oKCk7YW5ndWxhci5pc0RlZmluZWQoYSk/KG4uc2V0TWludXRlcyhhKSxqKCJtIikpOmQodm9pZCAwLCEwKX0sYy5iaW5kKCJibHVyIixmdW5jdGlvbigpeyFhLmludmFsaWRNaW51dGVzJiZhLm1pbnV0ZXM8MTAmJmEuJGFwcGx5KGZ1bmN0aW9uKCl7YS5taW51dGVzPWkoYS5taW51dGVzKX0pfSl9LHRoaXMucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGE9by4kbW9kZWxWYWx1ZT9uZXcgRGF0ZShvLiRtb2RlbFZhbHVlKTpudWxsO2lzTmFOKGEpPyhvLiRzZXRWYWxpZGl0eSgidGltZSIsITEpLGQuZXJyb3IoJ1RpbWVwaWNrZXIgZGlyZWN0aXZlOiAibmctbW9kZWwiIHZhbHVlIG11c3QgYmUgYSBEYXRlIG9iamVjdCwgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIDAxLjAxLjE5NzAgb3IgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGFuIFJGQzI4MjIgb3IgSVNPIDg2MDEgZGF0ZS4nKSk6KGEmJihuPWEpLGsoKSxsKCkpfSxhLmluY3JlbWVudEhvdXJzPWZ1bmN0aW9uKCl7bSg2MCpxKX0sYS5kZWNyZW1lbnRIb3Vycz1mdW5jdGlvbigpe20oNjAqLXEpfSxhLmluY3JlbWVudE1pbnV0ZXM9ZnVuY3Rpb24oKXttKHIpfSxhLmRlY3JlbWVudE1pbnV0ZXM9ZnVuY3Rpb24oKXttKC1yKX0sYS50b2dnbGVNZXJpZGlhbj1mdW5jdGlvbigpe20oNzIwKihuLmdldEhvdXJzKCk8MTI/MTotMSkpfX1dKS5kaXJlY3RpdmUoInRpbWVwaWNrZXIiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVxdWlyZTpbInRpbWVwaWNrZXIiLCI/Xm5nTW9kZWwiXSxjb250cm9sbGVyOiJUaW1lcGlja2VyQ29udHJvbGxlciIscmVwbGFjZTohMCxzY29wZTp7fSx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvdGltZXBpY2tlci90aW1lcGlja2VyLmh0bWwiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9ZFswXSxmPWRbMV07ZiYmZS5pbml0KGYsYi5maW5kKCJpbnB1dCIpKX19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC50eXBlYWhlYWQiLFsidWkuYm9vdHN0cmFwLnBvc2l0aW9uIiwidWkuYm9vdHN0cmFwLmJpbmRIdG1sIl0pLmZhY3RvcnkoInR5cGVhaGVhZFBhcnNlciIsWyIkcGFyc2UiLGZ1bmN0aW9uKGEpe3ZhciBiPS9eXHMqKC4qPykoPzpccythc1xzKyguKj8pKT9ccytmb3JccysoPzooW1wkXHddW1wkXHdcZF0qKSlccytpblxzKyguKikkLztyZXR1cm57cGFyc2U6ZnVuY3Rpb24oYyl7dmFyIGQ9Yy5tYXRjaChiKTtpZighZCl0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHR5cGVhaGVhZCBzcGVjaWZpY2F0aW9uIGluIGZvcm0gb2YgIl9tb2RlbFZhbHVlXyAoYXMgX2xhYmVsXyk/IGZvciBfaXRlbV8gaW4gX2NvbGxlY3Rpb25fIiBidXQgZ290ICInK2MrJyIuJyk7cmV0dXJue2l0ZW1OYW1lOmRbM10sc291cmNlOmEoZFs0XSksdmlld01hcHBlcjphKGRbMl18fGRbMV0pLG1vZGVsTWFwcGVyOmEoZFsxXSl9fX19XSkuZGlyZWN0aXZlKCJ0eXBlYWhlYWQiLFsiJGNvbXBpbGUiLCIkcGFyc2UiLCIkcSIsIiR0aW1lb3V0IiwiJGRvY3VtZW50IiwiJHBvc2l0aW9uIiwidHlwZWFoZWFkUGFyc2VyIixmdW5jdGlvbihhLGIsYyxkLGUsZixnKXt2YXIgaD1bOSwxMywyNywzOCw0MF07cmV0dXJue3JlcXVpcmU6Im5nTW9kZWwiLGxpbms6ZnVuY3Rpb24oaSxqLGssbCl7dmFyIG0sbj1pLiRldmFsKGsudHlwZWFoZWFkTWluTGVuZ3RoKXx8MSxvPWkuJGV2YWwoay50eXBlYWhlYWRXYWl0TXMpfHwwLHA9aS4kZXZhbChrLnR5cGVhaGVhZEVkaXRhYmxlKSE9PSExLHE9YihrLnR5cGVhaGVhZExvYWRpbmcpLmFzc2lnbnx8YW5ndWxhci5ub29wLHI9YihrLnR5cGVhaGVhZE9uU2VsZWN0KSxzPWsudHlwZWFoZWFkSW5wdXRGb3JtYXR0ZXI/YihrLnR5cGVhaGVhZElucHV0Rm9ybWF0dGVyKTp2b2lkIDAsdD1rLnR5cGVhaGVhZEFwcGVuZFRvQm9keT9pLiRldmFsKGsudHlwZWFoZWFkQXBwZW5kVG9Cb2R5KTohMSx1PWIoay5uZ01vZGVsKS5hc3NpZ24sdj1nLnBhcnNlKGsudHlwZWFoZWFkKSx3PWkuJG5ldygpO2kuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXt3LiRkZXN0cm95KCl9KTt2YXIgeD0idHlwZWFoZWFkLSIrdy4kaWQrIi0iK01hdGguZmxvb3IoMWU0Kk1hdGgucmFuZG9tKCkpO2ouYXR0cih7ImFyaWEtYXV0b2NvbXBsZXRlIjoibGlzdCIsImFyaWEtZXhwYW5kZWQiOiExLCJhcmlhLW93bnMiOnh9KTt2YXIgeT1hbmd1bGFyLmVsZW1lbnQoIjxkaXYgdHlwZWFoZWFkLXBvcHVwPjwvZGl2PiIpO3kuYXR0cih7aWQ6eCxtYXRjaGVzOiJtYXRjaGVzIixhY3RpdmU6ImFjdGl2ZUlkeCIsc2VsZWN0OiJzZWxlY3QoYWN0aXZlSWR4KSIscXVlcnk6InF1ZXJ5Iixwb3NpdGlvbjoicG9zaXRpb24ifSksYW5ndWxhci5pc0RlZmluZWQoay50eXBlYWhlYWRUZW1wbGF0ZVVybCkmJnkuYXR0cigidGVtcGxhdGUtdXJsIixrLnR5cGVhaGVhZFRlbXBsYXRlVXJsKTt2YXIgej1mdW5jdGlvbigpe3cubWF0Y2hlcz1bXSx3LmFjdGl2ZUlkeD0tMSxqLmF0dHIoImFyaWEtZXhwYW5kZWQiLCExKX0sQT1mdW5jdGlvbihhKXtyZXR1cm4geCsiLW9wdGlvbi0iK2F9O3cuJHdhdGNoKCJhY3RpdmVJZHgiLGZ1bmN0aW9uKGEpezA+YT9qLnJlbW92ZUF0dHIoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIpOmouYXR0cigiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixBKGEpKX0pO3ZhciBCPWZ1bmN0aW9uKGEpe3ZhciBiPXskdmlld1ZhbHVlOmF9O3EoaSwhMCksYy53aGVuKHYuc291cmNlKGksYikpLnRoZW4oZnVuY3Rpb24oYyl7dmFyIGQ9YT09PWwuJHZpZXdWYWx1ZTtpZihkJiZtKWlmKGMubGVuZ3RoPjApe3cuYWN0aXZlSWR4PTAsdy5tYXRjaGVzLmxlbmd0aD0wO2Zvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKWJbdi5pdGVtTmFtZV09Y1tlXSx3Lm1hdGNoZXMucHVzaCh7aWQ6QShlKSxsYWJlbDp2LnZpZXdNYXBwZXIodyxiKSxtb2RlbDpjW2VdfSk7dy5xdWVyeT1hLHcucG9zaXRpb249dD9mLm9mZnNldChqKTpmLnBvc2l0aW9uKGopLHcucG9zaXRpb24udG9wPXcucG9zaXRpb24udG9wK2oucHJvcCgib2Zmc2V0SGVpZ2h0Iiksai5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCl9ZWxzZSB6KCk7ZCYmcShpLCExKX0sZnVuY3Rpb24oKXt6KCkscShpLCExKX0pfTt6KCksdy5xdWVyeT12b2lkIDA7dmFyIEM7bC4kcGFyc2Vycy51bnNoaWZ0KGZ1bmN0aW9uKGEpe3JldHVybiBtPSEwLGEmJmEubGVuZ3RoPj1uP28+MD8oQyYmZC5jYW5jZWwoQyksQz1kKGZ1bmN0aW9uKCl7QihhKX0sbykpOkIoYSk6KHEoaSwhMSkseigpKSxwP2E6YT92b2lkIGwuJHNldFZhbGlkaXR5KCJlZGl0YWJsZSIsITEpOihsLiRzZXRWYWxpZGl0eSgiZWRpdGFibGUiLCEwKSxhKX0pLGwuJGZvcm1hdHRlcnMucHVzaChmdW5jdGlvbihhKXt2YXIgYixjLGQ9e307cmV0dXJuIHM/KGQuJG1vZGVsPWEscyhpLGQpKTooZFt2Lml0ZW1OYW1lXT1hLGI9di52aWV3TWFwcGVyKGksZCksZFt2Lml0ZW1OYW1lXT12b2lkIDAsYz12LnZpZXdNYXBwZXIoaSxkKSxiIT09Yz9iOmEpfSksdy5zZWxlY3Q9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlPXt9O2Vbdi5pdGVtTmFtZV09Yz13Lm1hdGNoZXNbYV0ubW9kZWwsYj12Lm1vZGVsTWFwcGVyKGksZSksdShpLGIpLGwuJHNldFZhbGlkaXR5KCJlZGl0YWJsZSIsITApLHIoaSx7JGl0ZW06YywkbW9kZWw6YiwkbGFiZWw6di52aWV3TWFwcGVyKGksZSl9KSx6KCksZChmdW5jdGlvbigpe2pbMF0uZm9jdXMoKX0sMCwhMSl9LGouYmluZCgia2V5ZG93biIsZnVuY3Rpb24oYSl7MCE9PXcubWF0Y2hlcy5sZW5ndGgmJi0xIT09aC5pbmRleE9mKGEud2hpY2gpJiYoYS5wcmV2ZW50RGVmYXVsdCgpLDQwPT09YS53aGljaD8ody5hY3RpdmVJZHg9KHcuYWN0aXZlSWR4KzEpJXcubWF0Y2hlcy5sZW5ndGgsdy4kZGlnZXN0KCkpOjM4PT09YS53aGljaD8ody5hY3RpdmVJZHg9KHcuYWN0aXZlSWR4P3cuYWN0aXZlSWR4OncubWF0Y2hlcy5sZW5ndGgpLTEsdy4kZGlnZXN0KCkpOjEzPT09YS53aGljaHx8OT09PWEud2hpY2g/dy4kYXBwbHkoZnVuY3Rpb24oKXt3LnNlbGVjdCh3LmFjdGl2ZUlkeCl9KToyNz09PWEud2hpY2gmJihhLnN0b3BQcm9wYWdhdGlvbigpLHooKSx3LiRkaWdlc3QoKSkpfSksai5iaW5kKCJibHVyIixmdW5jdGlvbigpe209ITF9KTt2YXIgRD1mdW5jdGlvbihhKXtqWzBdIT09YS50YXJnZXQmJih6KCksdy4kZGlnZXN0KCkpfTtlLmJpbmQoImNsaWNrIixEKSxpLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7ZS51bmJpbmQoImNsaWNrIixEKX0pO3ZhciBFPWEoeSkodyk7dD9lLmZpbmQoImJvZHkiKS5hcHBlbmQoRSk6ai5hZnRlcihFKX19fV0pLmRpcmVjdGl2ZSgidHlwZWFoZWFkUG9wdXAiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIsc2NvcGU6e21hdGNoZXM6Ij0iLHF1ZXJ5OiI9IixhY3RpdmU6Ij0iLHBvc2l0aW9uOiI9IixzZWxlY3Q6IiYifSxyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS90eXBlYWhlYWQvdHlwZWFoZWFkLXBvcHVwLmh0bWwiLGxpbms6ZnVuY3Rpb24oYSxiLGMpe2EudGVtcGxhdGVVcmw9Yy50ZW1wbGF0ZVVybCxhLmlzT3Blbj1mdW5jdGlvbigpe3JldHVybiBhLm1hdGNoZXMubGVuZ3RoPjB9LGEuaXNBY3RpdmU9ZnVuY3Rpb24oYil7cmV0dXJuIGEuYWN0aXZlPT1ifSxhLnNlbGVjdEFjdGl2ZT1mdW5jdGlvbihiKXthLmFjdGl2ZT1ifSxhLnNlbGVjdE1hdGNoPWZ1bmN0aW9uKGIpe2Euc2VsZWN0KHthY3RpdmVJZHg6Yn0pfX19fSkuZGlyZWN0aXZlKCJ0eXBlYWhlYWRNYXRjaCIsWyIkaHR0cCIsIiR0ZW1wbGF0ZUNhY2hlIiwiJGNvbXBpbGUiLCIkcGFyc2UiLGZ1bmN0aW9uKGEsYixjLGQpe3JldHVybntyZXN0cmljdDoiRUEiLHNjb3BlOntpbmRleDoiPSIsbWF0Y2g6Ij0iLHF1ZXJ5OiI9In0sbGluazpmdW5jdGlvbihlLGYsZyl7dmFyIGg9ZChnLnRlbXBsYXRlVXJsKShlLiRwYXJlbnQpfHwidGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1tYXRjaC5odG1sIjthLmdldChoLHtjYWNoZTpifSkuc3VjY2VzcyhmdW5jdGlvbihhKXtmLnJlcGxhY2VXaXRoKGMoYS50cmltKCkpKGUpKX0pfX19XSkuZmlsdGVyKCJ0eXBlYWhlYWRIaWdobGlnaHQiLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtyZXR1cm4gYS5yZXBsYWNlKC8oWy4/KiteJFtcXVxcKCl7fXwtXSkvZywiXFwkMSIpfXJldHVybiBmdW5jdGlvbihiLGMpe3JldHVybiBjPygiIitiKS5yZXBsYWNlKG5ldyBSZWdFeHAoYShjKSwiZ2kiKSwiPHN0cm9uZz4kJjwvc3Ryb25nPiIpOmJ9fSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2FjY29yZGlvbi9hY2NvcmRpb24tZ3JvdXAuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi1ncm91cC5odG1sIiwnPGRpdiBjbGFzcz0icGFuZWwgcGFuZWwtZGVmYXVsdCI+XG4gIDxkaXYgY2xhc3M9InBhbmVsLWhlYWRpbmciPlxuICAgIDxoNCBjbGFzcz0icGFuZWwtdGl0bGUiPlxuICAgICAgPGEgY2xhc3M9ImFjY29yZGlvbi10b2dnbGUiIG5nLWNsaWNrPSJ0b2dnbGVPcGVuKCkiIGFjY29yZGlvbi10cmFuc2NsdWRlPSJoZWFkaW5nIj48c3BhbiBuZy1jbGFzcz0ie1wndGV4dC1tdXRlZFwnOiBpc0Rpc2FibGVkfSI+e3toZWFkaW5nfX08L3NwYW4+PC9hPlxuICAgIDwvaDQ+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJwYW5lbC1jb2xsYXBzZSIgY29sbGFwc2U9IiFpc09wZW4iPlxuCSAgPGRpdiBjbGFzcz0icGFuZWwtYm9keSIgbmctdHJhbnNjbHVkZT48L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9hY2NvcmRpb24vYWNjb3JkaW9uLmh0bWwiLCc8ZGl2IGNsYXNzPSJwYW5lbC1ncm91cCIgbmctdHJhbnNjbHVkZT48L2Rpdj4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvYWxlcnQvYWxlcnQuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvYWxlcnQvYWxlcnQuaHRtbCIsJzxkaXYgY2xhc3M9ImFsZXJ0IiBuZy1jbGFzcz0ie1wnYWxlcnQte3t0eXBlIHx8IFwnd2FybmluZ1wnfX1cJzogdHJ1ZSwgXCdhbGVydC1kaXNtaXNzYWJsZVwnOiBjbG9zZWFibGV9IiByb2xlPSJhbGVydCI+XG4gICAgPGJ1dHRvbiBuZy1zaG93PSJjbG9zZWFibGUiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBuZy1jbGljaz0iY2xvc2UoKSI+XG4gICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mdGltZXM7PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+Q2xvc2U8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGRpdiBuZy10cmFuc2NsdWRlPjwvZGl2PlxuPC9kaXY+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvY2Fyb3VzZWwvY2Fyb3VzZWwuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvY2Fyb3VzZWwvY2Fyb3VzZWwuaHRtbCIsJzxkaXYgbmctbW91c2VlbnRlcj0icGF1c2UoKSIgbmctbW91c2VsZWF2ZT0icGxheSgpIiBjbGFzcz0iY2Fyb3VzZWwiIG5nLXN3aXBlLXJpZ2h0PSJwcmV2KCkiIG5nLXN3aXBlLWxlZnQ9Im5leHQoKSI+XG4gICAgPG9sIGNsYXNzPSJjYXJvdXNlbC1pbmRpY2F0b3JzIiBuZy1zaG93PSJzbGlkZXMubGVuZ3RoID4gMSI+XG4gICAgICAgIDxsaSBuZy1yZXBlYXQ9InNsaWRlIGluIHNsaWRlcyB0cmFjayBieSAkaW5kZXgiIG5nLWNsYXNzPSJ7YWN0aXZlOiBpc0FjdGl2ZShzbGlkZSl9IiBuZy1jbGljaz0ic2VsZWN0KHNsaWRlKSI+PC9saT5cbiAgICA8L29sPlxuICAgIDxkaXYgY2xhc3M9ImNhcm91c2VsLWlubmVyIiBuZy10cmFuc2NsdWRlPjwvZGl2PlxuICAgIDxhIGNsYXNzPSJsZWZ0IGNhcm91c2VsLWNvbnRyb2wiIG5nLWNsaWNrPSJwcmV2KCkiIG5nLXNob3c9InNsaWRlcy5sZW5ndGggPiAxIj48c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLWxlZnQiPjwvc3Bhbj48L2E+XG4gICAgPGEgY2xhc3M9InJpZ2h0IGNhcm91c2VsLWNvbnRyb2wiIG5nLWNsaWNrPSJuZXh0KCkiIG5nLXNob3c9InNsaWRlcy5sZW5ndGggPiAxIj48c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0Ij48L3NwYW4+PC9hPlxuPC9kaXY+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvY2Fyb3VzZWwvc2xpZGUuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvY2Fyb3VzZWwvc2xpZGUuaHRtbCIsIjxkaXYgbmctY2xhc3M9XCJ7XG4gICAgJ2FjdGl2ZSc6IGxlYXZpbmcgfHwgKGFjdGl2ZSAmJiAhZW50ZXJpbmcpLFxuICAgICdwcmV2JzogKG5leHQgfHwgYWN0aXZlKSAmJiBkaXJlY3Rpb249PSdwcmV2JyxcbiAgICAnbmV4dCc6IChuZXh0IHx8IGFjdGl2ZSkgJiYgZGlyZWN0aW9uPT0nbmV4dCcsXG4gICAgJ3JpZ2h0JzogZGlyZWN0aW9uPT0ncHJldicsXG4gICAgJ2xlZnQnOiBkaXJlY3Rpb249PSduZXh0J1xuICB9XCIgY2xhc3M9XCJpdGVtIHRleHQtY2VudGVyXCIgbmctdHJhbnNjbHVkZT48L2Rpdj5cbiIpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL2RhdGVwaWNrZXIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmh0bWwiLCc8ZGl2IG5nLXN3aXRjaD0iZGF0ZXBpY2tlck1vZGUiIHJvbGU9ImFwcGxpY2F0aW9uIiBuZy1rZXlkb3duPSJrZXlkb3duKCRldmVudCkiPlxuICA8ZGF5cGlja2VyIG5nLXN3aXRjaC13aGVuPSJkYXkiIHRhYmluZGV4PSIwIj48L2RheXBpY2tlcj5cbiAgPG1vbnRocGlja2VyIG5nLXN3aXRjaC13aGVuPSJtb250aCIgdGFiaW5kZXg9IjAiPjwvbW9udGhwaWNrZXI+XG4gIDx5ZWFycGlja2VyIG5nLXN3aXRjaC13aGVuPSJ5ZWFyIiB0YWJpbmRleD0iMCI+PC95ZWFycGlja2VyPlxuPC9kaXY+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2RhdGVwaWNrZXIvZGF5Lmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL2RhdGVwaWNrZXIvZGF5Lmh0bWwiLCc8dGFibGUgcm9sZT0iZ3JpZCIgYXJpYS1sYWJlbGxlZGJ5PSJ7e3VuaXF1ZUlkfX0tdGl0bGUiIGFyaWEtYWN0aXZlZGVzY2VuZGFudD0ie3thY3RpdmVEYXRlSWR9fSI+XG4gIDx0aGVhZD5cbiAgICA8dHI+XG4gICAgICA8dGg+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIHB1bGwtbGVmdCIgbmctY2xpY2s9Im1vdmUoLTEpIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tbGVmdCI+PC9pPjwvYnV0dG9uPjwvdGg+XG4gICAgICA8dGggY29sc3Bhbj0ie3s1ICsgc2hvd1dlZWtzfX0iPjxidXR0b24gaWQ9Int7dW5pcXVlSWR9fS10aXRsZSIgcm9sZT0iaGVhZGluZyIgYXJpYS1saXZlPSJhc3NlcnRpdmUiIGFyaWEtYXRvbWljPSJ0cnVlIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIiBuZy1jbGljaz0idG9nZ2xlTW9kZSgpIiB0YWJpbmRleD0iLTEiIHN0eWxlPSJ3aWR0aDoxMDAlOyI+PHN0cm9uZz57e3RpdGxlfX08L3N0cm9uZz48L2J1dHRvbj48L3RoPlxuICAgICAgPHRoPjxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBwdWxsLXJpZ2h0IiBuZy1jbGljaz0ibW92ZSgxKSIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0Ij48L2k+PC9idXR0b24+PC90aD5cbiAgICA8L3RyPlxuICAgIDx0cj5cbiAgICAgIDx0aCBuZy1zaG93PSJzaG93V2Vla3MiIGNsYXNzPSJ0ZXh0LWNlbnRlciI+PC90aD5cbiAgICAgIDx0aCBuZy1yZXBlYXQ9ImxhYmVsIGluIGxhYmVscyB0cmFjayBieSAkaW5kZXgiIGNsYXNzPSJ0ZXh0LWNlbnRlciI+PHNtYWxsIGFyaWEtbGFiZWw9Int7bGFiZWwuZnVsbH19Ij57e2xhYmVsLmFiYnJ9fTwvc21hbGw+PC90aD5cbiAgICA8L3RyPlxuICA8L3RoZWFkPlxuICA8dGJvZHk+XG4gICAgPHRyIG5nLXJlcGVhdD0icm93IGluIHJvd3MgdHJhY2sgYnkgJGluZGV4Ij5cbiAgICAgIDx0ZCBuZy1zaG93PSJzaG93V2Vla3MiIGNsYXNzPSJ0ZXh0LWNlbnRlciBoNiI+PGVtPnt7IHdlZWtOdW1iZXJzWyRpbmRleF0gfX08L2VtPjwvdGQ+XG4gICAgICA8dGQgbmctcmVwZWF0PSJkdCBpbiByb3cgdHJhY2sgYnkgZHQuZGF0ZSIgY2xhc3M9InRleHQtY2VudGVyIiByb2xlPSJncmlkY2VsbCIgaWQ9Int7ZHQudWlkfX0iIGFyaWEtZGlzYWJsZWQ9Int7ISFkdC5kaXNhYmxlZH19Ij5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIHN0eWxlPSJ3aWR0aDoxMDAlOyIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20iIG5nLWNsYXNzPSJ7XCdidG4taW5mb1wnOiBkdC5zZWxlY3RlZCwgYWN0aXZlOiBpc0FjdGl2ZShkdCl9IiBuZy1jbGljaz0ic2VsZWN0KGR0LmRhdGUpIiBuZy1kaXNhYmxlZD0iZHQuZGlzYWJsZWQiIHRhYmluZGV4PSItMSI+PHNwYW4gbmctY2xhc3M9IntcJ3RleHQtbXV0ZWRcJzogZHQuc2Vjb25kYXJ5LCBcJ3RleHQtaW5mb1wnOiBkdC5jdXJyZW50fSI+e3tkdC5sYWJlbH19PC9zcGFuPjwvYnV0dG9uPlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L3Rib2R5PlxuPC90YWJsZT5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL21vbnRoLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL2RhdGVwaWNrZXIvbW9udGguaHRtbCIsJzx0YWJsZSByb2xlPSJncmlkIiBhcmlhLWxhYmVsbGVkYnk9Int7dW5pcXVlSWR9fS10aXRsZSIgYXJpYS1hY3RpdmVkZXNjZW5kYW50PSJ7e2FjdGl2ZURhdGVJZH19Ij5cbiAgPHRoZWFkPlxuICAgIDx0cj5cbiAgICAgIDx0aD48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20gcHVsbC1sZWZ0IiBuZy1jbGljaz0ibW92ZSgtMSkiIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1sZWZ0Ij48L2k+PC9idXR0b24+PC90aD5cbiAgICAgIDx0aD48YnV0dG9uIGlkPSJ7e3VuaXF1ZUlkfX0tdGl0bGUiIHJvbGU9ImhlYWRpbmciIGFyaWEtbGl2ZT0iYXNzZXJ0aXZlIiBhcmlhLWF0b21pYz0idHJ1ZSIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSIgbmctY2xpY2s9InRvZ2dsZU1vZGUoKSIgdGFiaW5kZXg9Ii0xIiBzdHlsZT0id2lkdGg6MTAwJTsiPjxzdHJvbmc+e3t0aXRsZX19PC9zdHJvbmc+PC9idXR0b24+PC90aD5cbiAgICAgIDx0aD48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20gcHVsbC1yaWdodCIgbmctY2xpY2s9Im1vdmUoMSkiIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1yaWdodCI+PC9pPjwvYnV0dG9uPjwvdGg+XG4gICAgPC90cj5cbiAgPC90aGVhZD5cbiAgPHRib2R5PlxuICAgIDx0ciBuZy1yZXBlYXQ9InJvdyBpbiByb3dzIHRyYWNrIGJ5ICRpbmRleCI+XG4gICAgICA8dGQgbmctcmVwZWF0PSJkdCBpbiByb3cgdHJhY2sgYnkgZHQuZGF0ZSIgY2xhc3M9InRleHQtY2VudGVyIiByb2xlPSJncmlkY2VsbCIgaWQ9Int7ZHQudWlkfX0iIGFyaWEtZGlzYWJsZWQ9Int7ISFkdC5kaXNhYmxlZH19Ij5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIHN0eWxlPSJ3aWR0aDoxMDAlOyIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgbmctY2xhc3M9IntcJ2J0bi1pbmZvXCc6IGR0LnNlbGVjdGVkLCBhY3RpdmU6IGlzQWN0aXZlKGR0KX0iIG5nLWNsaWNrPSJzZWxlY3QoZHQuZGF0ZSkiIG5nLWRpc2FibGVkPSJkdC5kaXNhYmxlZCIgdGFiaW5kZXg9Ii0xIj48c3BhbiBuZy1jbGFzcz0ie1wndGV4dC1pbmZvXCc6IGR0LmN1cnJlbnR9Ij57e2R0LmxhYmVsfX08L3NwYW4+PC9idXR0b24+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvdGJvZHk+XG48L3RhYmxlPlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2RhdGVwaWNrZXIvcG9wdXAuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvZGF0ZXBpY2tlci9wb3B1cC5odG1sIiwnPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51IiBuZy1zdHlsZT0ie2Rpc3BsYXk6IChpc09wZW4gJiYgXCdibG9ja1wnKSB8fCBcJ25vbmVcJywgdG9wOiBwb3NpdGlvbi50b3ArXCdweFwnLCBsZWZ0OiBwb3NpdGlvbi5sZWZ0K1wncHhcJ30iIG5nLWtleWRvd249ImtleWRvd24oJGV2ZW50KSI+XG4JPGxpIG5nLXRyYW5zY2x1ZGU+PC9saT5cbgk8bGkgbmctaWY9InNob3dCdXR0b25CYXIiIHN0eWxlPSJwYWRkaW5nOjEwcHggOXB4IDJweCI+XG4JCTxzcGFuIGNsYXNzPSJidG4tZ3JvdXAiPlxuCQkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1pbmZvIiBuZy1jbGljaz0ic2VsZWN0KFwndG9kYXlcJykiPnt7IGdldFRleHQoXCdjdXJyZW50XCcpIH19PC9idXR0b24+XG4JCQk8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc20gYnRuLWRhbmdlciIgbmctY2xpY2s9InNlbGVjdChudWxsKSI+e3sgZ2V0VGV4dChcJ2NsZWFyXCcpIH19PC9idXR0b24+XG4JCTwvc3Bhbj5cbgkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1zdWNjZXNzIHB1bGwtcmlnaHQiIG5nLWNsaWNrPSJjbG9zZSgpIj57eyBnZXRUZXh0KFwnY2xvc2VcJykgfX08L2J1dHRvbj5cbgk8L2xpPlxuPC91bD5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL3llYXIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvZGF0ZXBpY2tlci95ZWFyLmh0bWwiLCc8dGFibGUgcm9sZT0iZ3JpZCIgYXJpYS1sYWJlbGxlZGJ5PSJ7e3VuaXF1ZUlkfX0tdGl0bGUiIGFyaWEtYWN0aXZlZGVzY2VuZGFudD0ie3thY3RpdmVEYXRlSWR9fSI+XG4gIDx0aGVhZD5cbiAgICA8dHI+XG4gICAgICA8dGg+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIHB1bGwtbGVmdCIgbmctY2xpY2s9Im1vdmUoLTEpIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tbGVmdCI+PC9pPjwvYnV0dG9uPjwvdGg+XG4gICAgICA8dGggY29sc3Bhbj0iMyI+PGJ1dHRvbiBpZD0ie3t1bmlxdWVJZH19LXRpdGxlIiByb2xlPSJoZWFkaW5nIiBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgYXJpYS1hdG9taWM9InRydWUiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20iIG5nLWNsaWNrPSJ0b2dnbGVNb2RlKCkiIHRhYmluZGV4PSItMSIgc3R5bGU9IndpZHRoOjEwMCU7Ij48c3Ryb25nPnt7dGl0bGV9fTwvc3Ryb25nPjwvYnV0dG9uPjwvdGg+XG4gICAgICA8dGg+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIHB1bGwtcmlnaHQiIG5nLWNsaWNrPSJtb3ZlKDEpIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQiPjwvaT48L2J1dHRvbj48L3RoPlxuICAgIDwvdHI+XG4gIDwvdGhlYWQ+XG4gIDx0Ym9keT5cbiAgICA8dHIgbmctcmVwZWF0PSJyb3cgaW4gcm93cyB0cmFjayBieSAkaW5kZXgiPlxuICAgICAgPHRkIG5nLXJlcGVhdD0iZHQgaW4gcm93IHRyYWNrIGJ5IGR0LmRhdGUiIGNsYXNzPSJ0ZXh0LWNlbnRlciIgcm9sZT0iZ3JpZGNlbGwiIGlkPSJ7e2R0LnVpZH19IiBhcmlhLWRpc2FibGVkPSJ7eyEhZHQuZGlzYWJsZWR9fSI+XG4gICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBzdHlsZT0id2lkdGg6MTAwJTsiIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiIG5nLWNsYXNzPSJ7XCdidG4taW5mb1wnOiBkdC5zZWxlY3RlZCwgYWN0aXZlOiBpc0FjdGl2ZShkdCl9IiBuZy1jbGljaz0ic2VsZWN0KGR0LmRhdGUpIiBuZy1kaXNhYmxlZD0iZHQuZGlzYWJsZWQiIHRhYmluZGV4PSItMSI+PHNwYW4gbmctY2xhc3M9IntcJ3RleHQtaW5mb1wnOiBkdC5jdXJyZW50fSI+e3tkdC5sYWJlbH19PC9zcGFuPjwvYnV0dG9uPlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L3Rib2R5PlxuPC90YWJsZT5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9tb2RhbC9iYWNrZHJvcC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9tb2RhbC9iYWNrZHJvcC5odG1sIiwnPGRpdiBjbGFzcz0ibW9kYWwtYmFja2Ryb3AgZmFkZSJcbiAgICAgbmctY2xhc3M9IntpbjogYW5pbWF0ZX0iXG4gICAgIG5nLXN0eWxlPSJ7XCd6LWluZGV4XCc6IDEwNDAgKyAoaW5kZXggJiYgMSB8fCAwKSArIGluZGV4KjEwfSJcbj48L2Rpdj5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9tb2RhbC93aW5kb3cuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvbW9kYWwvd2luZG93Lmh0bWwiLCc8ZGl2IHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBjbGFzcz0ibW9kYWwgZmFkZSIgbmctY2xhc3M9IntpbjogYW5pbWF0ZX0iIG5nLXN0eWxlPSJ7XCd6LWluZGV4XCc6IDEwNTAgKyBpbmRleCoxMCwgZGlzcGxheTogXCdibG9ja1wnfSIgbmctY2xpY2s9ImNsb3NlKCRldmVudCkiPlxuICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyIgbmctY2xhc3M9IntcJ21vZGFsLXNtXCc6IHNpemUgPT0gXCdzbVwnLCBcJ21vZGFsLWxnXCc6IHNpemUgPT0gXCdsZ1wnfSI+PGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCIgbmctdHJhbnNjbHVkZT48L2Rpdj48L2Rpdj5cbjwvZGl2PicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9wYWdpbmF0aW9uL3BhZ2VyLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3BhZ2luYXRpb24vcGFnZXIuaHRtbCIsJzx1bCBjbGFzcz0icGFnZXIiPlxuICA8bGkgbmctY2xhc3M9IntkaXNhYmxlZDogbm9QcmV2aW91cygpLCBwcmV2aW91czogYWxpZ259Ij48YSBocmVmIG5nLWNsaWNrPSJzZWxlY3RQYWdlKHBhZ2UgLSAxKSI+e3tnZXRUZXh0KFwncHJldmlvdXNcJyl9fTwvYT48L2xpPlxuICA8bGkgbmctY2xhc3M9IntkaXNhYmxlZDogbm9OZXh0KCksIG5leHQ6IGFsaWdufSI+PGEgaHJlZiBuZy1jbGljaz0ic2VsZWN0UGFnZShwYWdlICsgMSkiPnt7Z2V0VGV4dChcJ25leHRcJyl9fTwvYT48L2xpPlxuPC91bD4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5odG1sIiwnPHVsIGNsYXNzPSJwYWdpbmF0aW9uIj5cbiAgPGxpIG5nLWlmPSJib3VuZGFyeUxpbmtzIiBuZy1jbGFzcz0ie2Rpc2FibGVkOiBub1ByZXZpb3VzKCl9Ij48YSBocmVmIG5nLWNsaWNrPSJzZWxlY3RQYWdlKDEpIj57e2dldFRleHQoXCdmaXJzdFwnKX19PC9hPjwvbGk+XG4gIDxsaSBuZy1pZj0iZGlyZWN0aW9uTGlua3MiIG5nLWNsYXNzPSJ7ZGlzYWJsZWQ6IG5vUHJldmlvdXMoKX0iPjxhIGhyZWYgbmctY2xpY2s9InNlbGVjdFBhZ2UocGFnZSAtIDEpIj57e2dldFRleHQoXCdwcmV2aW91c1wnKX19PC9hPjwvbGk+XG4gIDxsaSBuZy1yZXBlYXQ9InBhZ2UgaW4gcGFnZXMgdHJhY2sgYnkgJGluZGV4IiBuZy1jbGFzcz0ie2FjdGl2ZTogcGFnZS5hY3RpdmV9Ij48YSBocmVmIG5nLWNsaWNrPSJzZWxlY3RQYWdlKHBhZ2UubnVtYmVyKSI+e3twYWdlLnRleHR9fTwvYT48L2xpPlxuICA8bGkgbmctaWY9ImRpcmVjdGlvbkxpbmtzIiBuZy1jbGFzcz0ie2Rpc2FibGVkOiBub05leHQoKX0iPjxhIGhyZWYgbmctY2xpY2s9InNlbGVjdFBhZ2UocGFnZSArIDEpIj57e2dldFRleHQoXCduZXh0XCcpfX08L2E+PC9saT5cbiAgPGxpIG5nLWlmPSJib3VuZGFyeUxpbmtzIiBuZy1jbGFzcz0ie2Rpc2FibGVkOiBub05leHQoKX0iPjxhIGhyZWYgbmctY2xpY2s9InNlbGVjdFBhZ2UodG90YWxQYWdlcykiPnt7Z2V0VGV4dChcJ2xhc3RcJyl9fTwvYT48L2xpPlxuPC91bD4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLWh0bWwtdW5zYWZlLXBvcHVwLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3Rvb2x0aXAvdG9vbHRpcC1odG1sLXVuc2FmZS1wb3B1cC5odG1sIiwnPGRpdiBjbGFzcz0idG9vbHRpcCB7e3BsYWNlbWVudH19IiBuZy1jbGFzcz0ieyBpbjogaXNPcGVuKCksIGZhZGU6IGFuaW1hdGlvbigpIH0iPlxuICA8ZGl2IGNsYXNzPSJ0b29sdGlwLWFycm93Ij48L2Rpdj5cbiAgPGRpdiBjbGFzcz0idG9vbHRpcC1pbm5lciIgYmluZC1odG1sLXVuc2FmZT0iY29udGVudCI+PC9kaXY+XG48L2Rpdj5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90b29sdGlwL3Rvb2x0aXAtcG9wdXAuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLXBvcHVwLmh0bWwiLCc8ZGl2IGNsYXNzPSJ0b29sdGlwIHt7cGxhY2VtZW50fX0iIG5nLWNsYXNzPSJ7IGluOiBpc09wZW4oKSwgZmFkZTogYW5pbWF0aW9uKCkgfSI+XG4gIDxkaXYgY2xhc3M9InRvb2x0aXAtYXJyb3ciPjwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0b29sdGlwLWlubmVyIiBuZy1iaW5kPSJjb250ZW50Ij48L2Rpdj5cbjwvZGl2PlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3BvcG92ZXIvcG9wb3Zlci5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9wb3BvdmVyL3BvcG92ZXIuaHRtbCIsJzxkaXYgY2xhc3M9InBvcG92ZXIge3twbGFjZW1lbnR9fSIgbmctY2xhc3M9InsgaW46IGlzT3BlbigpLCBmYWRlOiBhbmltYXRpb24oKSB9Ij5cbiAgPGRpdiBjbGFzcz0iYXJyb3ciPjwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InBvcG92ZXItaW5uZXIiPlxuICAgICAgPGgzIGNsYXNzPSJwb3BvdmVyLXRpdGxlIiBuZy1iaW5kPSJ0aXRsZSIgbmctc2hvdz0idGl0bGUiPjwvaDM+XG4gICAgICA8ZGl2IGNsYXNzPSJwb3BvdmVyLWNvbnRlbnQiIG5nLWJpbmQ9ImNvbnRlbnQiPjwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3Byb2dyZXNzYmFyL2Jhci5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9iYXIuaHRtbCIsJzxkaXYgY2xhc3M9InByb2dyZXNzLWJhciIgbmctY2xhc3M9InR5cGUgJiYgXCdwcm9ncmVzcy1iYXItXCcgKyB0eXBlIiByb2xlPSJwcm9ncmVzc2JhciIgYXJpYS12YWx1ZW5vdz0ie3t2YWx1ZX19IiBhcmlhLXZhbHVlbWluPSIwIiBhcmlhLXZhbHVlbWF4PSJ7e21heH19IiBuZy1zdHlsZT0ie3dpZHRoOiBwZXJjZW50ICsgXCclXCd9IiBhcmlhLXZhbHVldGV4dD0ie3twZXJjZW50IHwgbnVtYmVyOjB9fSUiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzLmh0bWwiLCc8ZGl2IGNsYXNzPSJwcm9ncmVzcyIgbmctdHJhbnNjbHVkZT48L2Rpdj4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3NiYXIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3NiYXIuaHRtbCIsJzxkaXYgY2xhc3M9InByb2dyZXNzIj5cbiAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIiBuZy1jbGFzcz0idHlwZSAmJiBcJ3Byb2dyZXNzLWJhci1cJyArIHR5cGUiIHJvbGU9InByb2dyZXNzYmFyIiBhcmlhLXZhbHVlbm93PSJ7e3ZhbHVlfX0iIGFyaWEtdmFsdWVtaW49IjAiIGFyaWEtdmFsdWVtYXg9Int7bWF4fX0iIG5nLXN0eWxlPSJ7d2lkdGg6IHBlcmNlbnQgKyBcJyVcJ30iIGFyaWEtdmFsdWV0ZXh0PSJ7e3BlcmNlbnQgfCBudW1iZXI6MH19JSIgbmctdHJhbnNjbHVkZT48L2Rpdj5cbjwvZGl2PicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9yYXRpbmcvcmF0aW5nLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3JhdGluZy9yYXRpbmcuaHRtbCIsJzxzcGFuIG5nLW1vdXNlbGVhdmU9InJlc2V0KCkiIG5nLWtleWRvd249Im9uS2V5ZG93bigkZXZlbnQpIiB0YWJpbmRleD0iMCIgcm9sZT0ic2xpZGVyIiBhcmlhLXZhbHVlbWluPSIwIiBhcmlhLXZhbHVlbWF4PSJ7e3JhbmdlLmxlbmd0aH19IiBhcmlhLXZhbHVlbm93PSJ7e3ZhbHVlfX0iPlxuICAgIDxpIG5nLXJlcGVhdD0iciBpbiByYW5nZSB0cmFjayBieSAkaW5kZXgiIG5nLW1vdXNlZW50ZXI9ImVudGVyKCRpbmRleCArIDEpIiBuZy1jbGljaz0icmF0ZSgkaW5kZXggKyAxKSIgY2xhc3M9ImdseXBoaWNvbiIgbmctY2xhc3M9IiRpbmRleCA8IHZhbHVlICYmIChyLnN0YXRlT24gfHwgXCdnbHlwaGljb24tc3RhclwnKSB8fCAoci5zdGF0ZU9mZiB8fCBcJ2dseXBoaWNvbi1zdGFyLWVtcHR5XCcpIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9InNyLW9ubHkiPih7eyAkaW5kZXggPCB2YWx1ZSA/IFwnKlwnIDogXCcgXCcgfX0pPC9zcGFuPlxuICAgIDwvaT5cbjwvc3Bhbj4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvdGFicy90YWIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdGFicy90YWIuaHRtbCIsJzxsaSBuZy1jbGFzcz0ie2FjdGl2ZTogYWN0aXZlLCBkaXNhYmxlZDogZGlzYWJsZWR9Ij5cbiAgPGEgbmctY2xpY2s9InNlbGVjdCgpIiB0YWItaGVhZGluZy10cmFuc2NsdWRlPnt7aGVhZGluZ319PC9hPlxuPC9saT5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90YWJzL3RhYnNldC10aXRsZXMuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdGFicy90YWJzZXQtdGl0bGVzLmh0bWwiLCI8dWwgY2xhc3M9XCJuYXYge3t0eXBlICYmICduYXYtJyArIHR5cGV9fVwiIG5nLWNsYXNzPVwieyduYXYtc3RhY2tlZCc6IHZlcnRpY2FsfVwiPlxuPC91bD5cbiIpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90YWJzL3RhYnNldC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS90YWJzL3RhYnNldC5odG1sIiwnXG48ZGl2PlxuICA8dWwgY2xhc3M9Im5hdiBuYXYte3t0eXBlIHx8IFwndGFic1wnfX0iIG5nLWNsYXNzPSJ7XCduYXYtc3RhY2tlZFwnOiB2ZXJ0aWNhbCwgXCduYXYtanVzdGlmaWVkXCc6IGp1c3RpZmllZH0iIG5nLXRyYW5zY2x1ZGU+PC91bD5cbiAgPGRpdiBjbGFzcz0idGFiLWNvbnRlbnQiPlxuICAgIDxkaXYgY2xhc3M9InRhYi1wYW5lIiBcbiAgICAgICAgIG5nLXJlcGVhdD0idGFiIGluIHRhYnMiIFxuICAgICAgICAgbmctY2xhc3M9InthY3RpdmU6IHRhYi5hY3RpdmV9IlxuICAgICAgICAgdGFiLWNvbnRlbnQtdHJhbnNjbHVkZT0idGFiIj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90aW1lcGlja2VyL3RpbWVwaWNrZXIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdGltZXBpY2tlci90aW1lcGlja2VyLmh0bWwiLCc8dGFibGU+XG4JPHRib2R5PlxuCQk8dHIgY2xhc3M9InRleHQtY2VudGVyIj5cbgkJCTx0ZD48YSBuZy1jbGljaz0iaW5jcmVtZW50SG91cnMoKSIgY2xhc3M9ImJ0biBidG4tbGluayI+PHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi11cCI+PC9zcGFuPjwvYT48L3RkPlxuCQkJPHRkPiZuYnNwOzwvdGQ+XG4JCQk8dGQ+PGEgbmctY2xpY2s9ImluY3JlbWVudE1pbnV0ZXMoKSIgY2xhc3M9ImJ0biBidG4tbGluayI+PHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi11cCI+PC9zcGFuPjwvYT48L3RkPlxuCQkJPHRkIG5nLXNob3c9InNob3dNZXJpZGlhbiI+PC90ZD5cbgkJPC90cj5cbgkJPHRyPlxuCQkJPHRkIHN0eWxlPSJ3aWR0aDo1MHB4OyIgY2xhc3M9ImZvcm0tZ3JvdXAiIG5nLWNsYXNzPSJ7XCdoYXMtZXJyb3JcJzogaW52YWxpZEhvdXJzfSI+XG4JCQkJPGlucHV0IHR5cGU9InRleHQiIG5nLW1vZGVsPSJob3VycyIgbmctY2hhbmdlPSJ1cGRhdGVIb3VycygpIiBjbGFzcz0iZm9ybS1jb250cm9sIHRleHQtY2VudGVyIiBuZy1tb3VzZXdoZWVsPSJpbmNyZW1lbnRIb3VycygpIiBuZy1yZWFkb25seT0icmVhZG9ubHlJbnB1dCIgbWF4bGVuZ3RoPSIyIj5cbgkJCTwvdGQ+XG4JCQk8dGQ+OjwvdGQ+XG4JCQk8dGQgc3R5bGU9IndpZHRoOjUwcHg7IiBjbGFzcz0iZm9ybS1ncm91cCIgbmctY2xhc3M9IntcJ2hhcy1lcnJvclwnOiBpbnZhbGlkTWludXRlc30iPlxuCQkJCTxpbnB1dCB0eXBlPSJ0ZXh0IiBuZy1tb2RlbD0ibWludXRlcyIgbmctY2hhbmdlPSJ1cGRhdGVNaW51dGVzKCkiIGNsYXNzPSJmb3JtLWNvbnRyb2wgdGV4dC1jZW50ZXIiIG5nLXJlYWRvbmx5PSJyZWFkb25seUlucHV0IiBtYXhsZW5ndGg9IjIiPlxuCQkJPC90ZD5cbgkJCTx0ZCBuZy1zaG93PSJzaG93TWVyaWRpYW4iPjxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IHRleHQtY2VudGVyIiBuZy1jbGljaz0idG9nZ2xlTWVyaWRpYW4oKSI+e3ttZXJpZGlhbn19PC9idXR0b24+PC90ZD5cbgkJPC90cj5cbgkJPHRyIGNsYXNzPSJ0ZXh0LWNlbnRlciI+XG4JCQk8dGQ+PGEgbmctY2xpY2s9ImRlY3JlbWVudEhvdXJzKCkiIGNsYXNzPSJidG4gYnRuLWxpbmsiPjxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tZG93biI+PC9zcGFuPjwvYT48L3RkPlxuCQkJPHRkPiZuYnNwOzwvdGQ+XG4JCQk8dGQ+PGEgbmctY2xpY2s9ImRlY3JlbWVudE1pbnV0ZXMoKSIgY2xhc3M9ImJ0biBidG4tbGluayI+PHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1kb3duIj48L3NwYW4+PC9hPjwvdGQ+XG4JCQk8dGQgbmctc2hvdz0ic2hvd01lcmlkaWFuIj48L3RkPlxuCQk8L3RyPlxuCTwvdGJvZHk+XG48L3RhYmxlPlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3R5cGVhaGVhZC90eXBlYWhlYWQtbWF0Y2guaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1tYXRjaC5odG1sIiwnPGEgdGFiaW5kZXg9Ii0xIiBiaW5kLWh0bWwtdW5zYWZlPSJtYXRjaC5sYWJlbCB8IHR5cGVhaGVhZEhpZ2hsaWdodDpxdWVyeSI+PC9hPicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90eXBlYWhlYWQvdHlwZWFoZWFkLXBvcHVwLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3R5cGVhaGVhZC90eXBlYWhlYWQtcG9wdXAuaHRtbCIsJzx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSIgbmctaWY9ImlzT3BlbigpIiBuZy1zdHlsZT0ie3RvcDogcG9zaXRpb24udG9wK1wncHhcJywgbGVmdDogcG9zaXRpb24ubGVmdCtcJ3B4XCd9IiBzdHlsZT0iZGlzcGxheTogYmxvY2s7IiByb2xlPSJsaXN0Ym94IiBhcmlhLWhpZGRlbj0ie3shaXNPcGVuKCl9fSI+XG4gICAgPGxpIG5nLXJlcGVhdD0ibWF0Y2ggaW4gbWF0Y2hlcyB0cmFjayBieSAkaW5kZXgiIG5nLWNsYXNzPSJ7YWN0aXZlOiBpc0FjdGl2ZSgkaW5kZXgpIH0iIG5nLW1vdXNlZW50ZXI9InNlbGVjdEFjdGl2ZSgkaW5kZXgpIiBuZy1jbGljaz0ic2VsZWN0TWF0Y2goJGluZGV4KSIgcm9sZT0ib3B0aW9uIiBpZD0ie3ttYXRjaC5pZH19Ij5cbiAgICAgICAgPGRpdiB0eXBlYWhlYWQtbWF0Y2ggaW5kZXg9IiRpbmRleCIgbWF0Y2g9Im1hdGNoIiBxdWVyeT0icXVlcnkiIHRlbXBsYXRlLXVybD0idGVtcGxhdGVVcmwiPjwvZGl2PlxuICAgIDwvbGk+XG48L3VsPicpCit9XSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGFibGVzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGFibGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZTNiNWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90YWJsZXMucHkKQEAgLTAsMCArMSw0NTMgQEAKKyMKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTUgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitmcm9tIHRvYXN0ZXJndWkud2lkZ2V0cyBpbXBvcnQgVG9hc3RlclRhYmxlCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFJlY2lwZSwgUHJvamVjdExheWVyLCBMYXllcl9WZXJzaW9uLCBNYWNoaW5lLCBQcm9qZWN0Citmcm9tIGRqYW5nby5kYi5tb2RlbHMgaW1wb3J0IFEsIE1heAorZnJvbSBkamFuZ28uY29uZi51cmxzIGltcG9ydCB1cmwKK2Zyb20gZGphbmdvLmNvcmUudXJscmVzb2x2ZXJzIGltcG9ydCByZXZlcnNlCitmcm9tIGRqYW5nby52aWV3cy5nZW5lcmljIGltcG9ydCBUZW1wbGF0ZVZpZXcKKworCitjbGFzcyBQcm9qZWN0RmlsdGVyc01peGluKG9iamVjdCk6CisgICAgIiIiQ29tbW9uIG1peGluIGZvciByZWNpcGUsIG1hY2hpbmUgaW4gcHJvamVjdCBmaWx0ZXJzIiIiCisKKyAgICBkZWYgZmlsdGVyX2luX3Byb2plY3Qoc2VsZiwgY291bnRfb25seT1GYWxzZSk6CisgICAgICAgIHF1ZXJ5ID0gc2VsZi5xdWVyeXNldC5maWx0ZXIobGF5ZXJfdmVyc2lvbl9faW49c2VsZi5wcm9qZWN0X2xheWVycykKKyAgICAgICAgaWYgY291bnRfb25seToKKyAgICAgICAgICAgIHJldHVybiBxdWVyeS5jb3VudCgpCisKKyAgICAgICAgc2VsZi5xdWVyeXNldCA9IHF1ZXJ5CisKKyAgICBkZWYgZmlsdGVyX25vdF9pbl9wcm9qZWN0KHNlbGYsIGNvdW50X29ubHk9RmFsc2UpOgorICAgICAgICBxdWVyeSA9IHNlbGYucXVlcnlzZXQuZXhjbHVkZShsYXllcl92ZXJzaW9uX19pbj1zZWxmLnByb2plY3RfbGF5ZXJzKQorICAgICAgICBpZiBjb3VudF9vbmx5OgorICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5LmNvdW50KCkKKworICAgICAgICBzZWxmLnF1ZXJ5c2V0ID0gcXVlcnkKKworY2xhc3MgTGF5ZXJzVGFibGUoVG9hc3RlclRhYmxlKToKKyAgICAiIiJUYWJsZSBvZiBsYXllcnMgaW4gVG9hc3RlciIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKExheWVyc1RhYmxlLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuZGVmYXVsdF9vcmRlcmJ5ID0gImxheWVyX19uYW1lIgorCisgICAgZGVmIGdldF9jb250ZXh0X2RhdGEoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBjb250ZXh0ID0gc3VwZXIoTGF5ZXJzVGFibGUsIHNlbGYpLmdldF9jb250ZXh0X2RhdGEoKiprd2FyZ3MpCisKKyAgICAgICAgcHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5nZXQocGs9a3dhcmdzWydwaWQnXSkKKworICAgICAgICBjb250ZXh0Wydwcm9qZWN0J10gPSBwcm9qZWN0CisgICAgICAgIGNvbnRleHRbJ3Byb2plY3RsYXllcnMnXSA9IG1hcChsYW1iZGEgcHJqbGF5ZXI6IHByamxheWVyLmxheWVyY29tbWl0LmlkLCBQcm9qZWN0TGF5ZXIub2JqZWN0cy5maWx0ZXIocHJvamVjdD1wcm9qZWN0KSkKKworICAgICAgICByZXR1cm4gY29udGV4dAorCisKKyAgICBkZWYgc2V0dXBfZmlsdGVycyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBwcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmdldChwaz1rd2FyZ3NbJ3BpZCddKQorICAgICAgICBzZWxmLnByb2plY3RfbGF5ZXJzID0gUHJvamVjdExheWVyLm9iamVjdHMuZmlsdGVyKHByb2plY3Q9cHJvamVjdCkKKworCisgICAgICAgIHNlbGYuYWRkX2ZpbHRlcih0aXRsZT0iRmlsdGVyIGJ5IHByb2plY3QgbGF5ZXJzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ImluX2N1cnJlbnRfcHJvamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfYWN0aW9ucz1bCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWtlX2ZpbHRlcl9hY3Rpb24oImluX3Byb2plY3QiLCAiTGF5ZXJzIGFkZGVkIHRvIHRoaXMgcHJvamVjdCIsIHNlbGYuZmlsdGVyX2luX3Byb2plY3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFrZV9maWx0ZXJfYWN0aW9uKCJub3RfaW5fcHJvamVjdCIsICJMYXllcnMgbm90IGFkZGVkIHRvIHRoaXMgcHJvamVjdCIsIHNlbGYuZmlsdGVyX25vdF9pbl9wcm9qZWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgXSkKKworICAgIGRlZiBmaWx0ZXJfaW5fcHJvamVjdChzZWxmLCBjb3VudF9vbmx5PUZhbHNlKToKKyAgICAgICAgcXVlcnkgPSBzZWxmLnF1ZXJ5c2V0LmZpbHRlcihwcm9qZWN0bGF5ZXJfX2luPXNlbGYucHJvamVjdF9sYXllcnMpCisgICAgICAgIGlmIGNvdW50X29ubHk6CisgICAgICAgICAgICByZXR1cm4gcXVlcnkuY291bnQoKQorCisgICAgICAgIHNlbGYucXVlcnlzZXQgPSBxdWVyeQorCisgICAgZGVmIGZpbHRlcl9ub3RfaW5fcHJvamVjdChzZWxmLCBjb3VudF9vbmx5PUZhbHNlKToKKyAgICAgICAgcXVlcnkgPSBzZWxmLnF1ZXJ5c2V0LmV4Y2x1ZGUocHJvamVjdGxheWVyX19pbj1zZWxmLnByb2plY3RfbGF5ZXJzKQorICAgICAgICBpZiBjb3VudF9vbmx5OgorICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5LmNvdW50KCkKKworICAgICAgICBzZWxmLnF1ZXJ5c2V0ID0gcXVlcnkKKworCisgICAgZGVmIHNldHVwX3F1ZXJ5c2V0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHByaiA9IFByb2plY3Qub2JqZWN0cy5nZXQocGsgPSBrd2FyZ3NbJ3BpZCddKQorICAgICAgICBjb21wYXRpYmxlX2xheWVycyA9IHByai5jb21wYXRpYmxlX2xheWVydmVyc2lvbnMoKQorCisgICAgICAgIHNlbGYucXVlcnlzZXQgPSBjb21wYXRpYmxlX2xheWVycy5vcmRlcl9ieShzZWxmLmRlZmF1bHRfb3JkZXJieSkKKworICAgIGRlZiBzZXR1cF9jb2x1bW5zKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisKKyAgICAgICAgbGF5ZXJfbGlua190ZW1wbGF0ZSA9ICcnJworICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2xheWVyZGV0YWlscycgZXh0cmEucGlkIGRhdGEuaWQgJX0iPgorICAgICAgICAgIHt7ZGF0YS5sYXllci5uYW1lfX0KKyAgICAgICAgPC9hPgorICAgICAgICAnJycKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IkxheWVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVhYmxlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lPSJsYXllcl9fbmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT1sYXllcl9saW5rX3RlbXBsYXRlKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iU3VtbWFyeSIsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJsYXllcl9fc3VtbWFyeSIpCisKKyAgICAgICAgZ2l0X3VybF90ZW1wbGF0ZSA9ICcnJworICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2xheWVyZGV0YWlscycgZXh0cmEucGlkIGRhdGEuaWQgJX0iPgorICAgICAgICAgIDxjb2RlPnt7ZGF0YS5sYXllci52Y3NfdXJsfX08L2NvZGU+CisgICAgICAgIDwvYT4KKyAgICAgICAgeyUgaWYgZGF0YS5nZXRfdmNzX2xpbmtfdXJsICV9CisgICAgICAgIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJ7eyBkYXRhLmdldF92Y3NfbGlua191cmwgfX0iPgorICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1zaGFyZSBnZXQtaW5mbyI+PC9pPgorICAgICAgICA8L2E+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICcnJworCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iR2l0IHJlcG9zaXRvcnkgVVJMIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0iVGhlIEdpdCByZXBvc2l0b3J5IGZvciB0aGUgbGF5ZXIgc291cmNlIGNvZGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lPSJsYXllcl9fdmNzX3VybCIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT1naXRfdXJsX3RlbXBsYXRlKQorCisgICAgICAgIGdpdF9kaXJfdGVtcGxhdGUgPSAnJycKKyAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdsYXllcmRldGFpbHMnIGV4dHJhLnBpZCBkYXRhLmlkICV9Ij4KKyAgICAgICAgIDxjb2RlPnt7ZGF0YS5kaXJwYXRofX08L2NvZGU+CisgICAgICAgIDwvYT4KKyAgICAgICAgeyUgaWYgZGF0YS5kaXJwYXRoIGFuZCBkYXRhLmdldF92Y3NfZGlycGF0aF9saW5rX3VybCAlfQorICAgICAgICA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0ie3sgZGF0YS5nZXRfdmNzX2RpcnBhdGhfbGlua191cmwgfX0iPgorICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXNoYXJlIGdldC1pbmZvIj48L2k+CisgICAgICAgIDwvYT4KKyAgICAgICAgeyUgZW5kaWYgJX0nJycKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IlN1YmRpcmVjdG9yeSIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ9IlRoZSBsYXllciBkaXJlY3Rvcnkgd2l0aGluIHRoZSBHaXQgcmVwb3NpdG9yeSIsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW49VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9ImdpdF9zdWJkaXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9Z2l0X2Rpcl90ZW1wbGF0ZSkKKworICAgICAgICByZXZpc2lvbl90ZW1wbGF0ZSA9ICAnJycKKyAgICAgICAgeyUgbG9hZCBwcm9qZWN0dGFncyAgJX0KKyAgICAgICAgeyUgd2l0aCB2Y3NfcmVmPWRhdGEuZ2V0X3Zjc19yZWZlcmVuY2UgJX0KKyAgICAgICAgeyUgaWYgdmNzX3JlZnxpc19zaGFpZCAlfQorICAgICAgICA8YSBjbGFzcz0iYnRuIiBkYXRhLWNvbnRlbnQ9Ijx1bCBjbGFzcz0ndW5zdHlsZWQnPiA8bGk+e3t2Y3NfcmVmfX08L2xpPiA8L3VsPiI+CisgICAgICAgIHt7dmNzX3JlZnx0cnVuY2F0ZWNoYXJzOjEwfX0KKyAgICAgICAgPC9hPgorICAgICAgICB7JSBlbHNlICV9CisgICAgICAgIHt7dmNzX3JlZn19CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgJycnCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJSZXZpc2lvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ9IlRoZSBHaXQgYnJhbmNoLCB0YWcgb3IgY29tbWl0LiBGb3IgdGhlIGxheWVycyBmcm9tIHRoZSBPcGVuRW1iZWRkZWQgbGF5ZXIgc291cmNlLCB0aGUgcmV2aXNpb24gaXMgYWx3YXlzIHRoZSBicmFuY2ggY29tcGF0aWJsZSB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IHZlcnNpb24geW91IHNlbGVjdGVkIGZvciB0aGlzIHByb2plY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0icmV2aXNpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9cmV2aXNpb25fdGVtcGxhdGUpCisKKyAgICAgICAgZGVwc190ZW1wbGF0ZSA9ICcnJworICAgICAgICB7JSB3aXRoIG9kcz1kYXRhLmRlcGVuZGVuY2llcy5hbGwlfQorICAgICAgICB7JSBpZiBvZHMuY291bnQgJX0KKyAgICAgICAgICAgIDxhIGNsYXNzPSJidG4iIHRpdGxlPSI8YSBocmVmPSd7JSB1cmwgImxheWVyZGV0YWlscyIgZXh0cmEucGlkIGRhdGEuaWQgJX0nPnt7ZGF0YS5sYXllci5uYW1lfX08L2E+IGRlcGVuZGVuY2llcyIKKyAgICAgICAgZGF0YS1jb250ZW50PSI8dWwgY2xhc3M9J3Vuc3R5bGVkJz4KKyAgICAgICAgeyUgZm9yIGkgaW4gb2RzJX0KKyAgICAgICAgPGxpPjxhIGhyZWY9J3slIHVybCAibGF5ZXJkZXRhaWxzIiBleHRyYS5waWQgaS5kZXBlbmRzX29uLnBrICV9Jz57e2kuZGVwZW5kc19vbi5sYXllci5uYW1lfX08L2E+PC9saT4KKyAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgIDwvdWw+Ij4KKyAgICAgICAge3tvZHMuY291bnR9fQorICAgICAgICA8L2E+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgJycnCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJEZXBlbmRlbmNpZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSJPdGhlciBsYXllcnMgYSBsYXllciBkZXBlbmRzIHVwb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0iZGVwZW5kZW5jaWVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPWRlcHNfdGVtcGxhdGUpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJBZGQgfCBEZWxldGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSJBZGQgb3IgZGVsZXRlIGxheWVycyB0byAvIGZyb20geW91ciBwcm9qZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVhYmxlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyX25hbWU9ImluX2N1cnJlbnRfcHJvamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lPSJhZGQtZGVsLWxheWVycyIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT0neyUgaW5jbHVkZSAibGF5ZXJfYnRuLmh0bWwiICV9JykKKworICAgICAgICBwcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmdldChwaz1rd2FyZ3NbJ3BpZCddKQorICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IkxheWVyRGV0YWlsc1VybCIsCisgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5YWJsZSA9IEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0ibGF5ZXJkZXRhaWx1cmwiLAorICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0YXRpb24gPSBsYW1iZGEgeDogcmV2ZXJzZSgnbGF5ZXJkZXRhaWxzJywgYXJncz0ocHJvamVjdC5pZCwgeC5pZCkpKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0ibmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5YWJsZSA9IEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0ibmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRhdGlvbiA9IGxhbWJkYSB4OiB4LmxheWVyLm5hbWUpCisKKworY2xhc3MgTWFjaGluZXNUYWJsZShUb2FzdGVyVGFibGUsIFByb2plY3RGaWx0ZXJzTWl4aW4pOgorICAgICIiIlRhYmxlIG9mIE1hY2hpbmVzIGluIFRvYXN0ZXIiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihNYWNoaW5lc1RhYmxlLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuZW1wdHlfc3RhdGUgPSAiTm8gbWFjaGluZXMgbWF5YmUgeW91IG5lZWQgdG8gZG8gYSBidWlsZD8iCisgICAgICAgIHNlbGYuZGVmYXVsdF9vcmRlcmJ5ID0gIm5hbWUiCisKKyAgICBkZWYgZ2V0X2NvbnRleHRfZGF0YShzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIGNvbnRleHQgPSBzdXBlcihNYWNoaW5lc1RhYmxlLCBzZWxmKS5nZXRfY29udGV4dF9kYXRhKCoqa3dhcmdzKQorICAgICAgICBjb250ZXh0Wydwcm9qZWN0J10gPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrPWt3YXJnc1sncGlkJ10pCisgICAgICAgIGNvbnRleHRbJ3Byb2plY3RsYXllcnMnXSA9IG1hcChsYW1iZGEgcHJqbGF5ZXI6IHByamxheWVyLmxheWVyY29tbWl0LmlkLCBQcm9qZWN0TGF5ZXIub2JqZWN0cy5maWx0ZXIocHJvamVjdD1jb250ZXh0Wydwcm9qZWN0J10pKQorICAgICAgICByZXR1cm4gY29udGV4dAorCisgICAgZGVmIHNldHVwX2ZpbHRlcnMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5nZXQocGs9a3dhcmdzWydwaWQnXSkKKyAgICAgICAgc2VsZi5wcm9qZWN0X2xheWVycyA9IHByb2plY3QucHJvamVjdGxheWVyX2VxdWl2YWxlbnRfc2V0KCkKKworICAgICAgICBzZWxmLmFkZF9maWx0ZXIodGl0bGU9IkZpbHRlciBieSBwcm9qZWN0IG1hY2hpbmVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ImluX2N1cnJlbnRfcHJvamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfYWN0aW9ucz1bCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWtlX2ZpbHRlcl9hY3Rpb24oImluX3Byb2plY3QiLCAiTWFjaGluZXMgcHJvdmlkZWQgYnkgbGF5ZXJzIGFkZGVkIHRvIHRoaXMgcHJvamVjdCIsIHNlbGYuZmlsdGVyX2luX3Byb2plY3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFrZV9maWx0ZXJfYWN0aW9uKCJub3RfaW5fcHJvamVjdCIsICJNYWNoaW5lcyBwcm92aWRlZCBieSBsYXllcnMgbm90IGFkZGVkIHRvIHRoaXMgcHJvamVjdCIsIHNlbGYuZmlsdGVyX25vdF9pbl9wcm9qZWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgXSkKKworICAgIGRlZiBzZXR1cF9xdWVyeXNldChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBwcmogPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrID0ga3dhcmdzWydwaWQnXSkKKyAgICAgICAgc2VsZi5xdWVyeXNldCA9IHByai5nZXRfYWxsX2NvbXBhdGlibGVfbWFjaGluZXMoKQorICAgICAgICBzZWxmLnF1ZXJ5c2V0ID0gc2VsZi5xdWVyeXNldC5vcmRlcl9ieShzZWxmLmRlZmF1bHRfb3JkZXJieSkKKworICAgIGRlZiBzZXR1cF9jb2x1bW5zKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJNYWNoaW5lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVhYmxlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJuYW1lIikKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IkRlc2NyaXB0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9ImRlc2NyaXB0aW9uIikKKworICAgICAgICBsYXllcl9saW5rX3RlbXBsYXRlID0gJycnCisgICAgICAgIDxhIGhyZWY9InslIHVybCAnbGF5ZXJkZXRhaWxzJyBleHRyYS5waWQgZGF0YS5sYXllcl92ZXJzaW9uLmlkICV9Ij4KKyAgICAgICAge3tkYXRhLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZX19PC9hPgorICAgICAgICAnJycKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IkxheWVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9ImxheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPWxheWVyX2xpbmtfdGVtcGxhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmFibGU9VHJ1ZSkKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IlJldmlzaW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0iVGhlIEdpdCBicmFuY2gsIHRhZyBvciBjb21taXQuIEZvciB0aGUgbGF5ZXJzIGZyb20gdGhlIE9wZW5FbWJlZGRlZCBsYXllciBzb3VyY2UsIHRoZSByZXZpc2lvbiBpcyBhbHdheXMgdGhlIGJyYW5jaCBjb21wYXRpYmxlIHdpdGggdGhlIFlvY3RvIFByb2plY3QgdmVyc2lvbiB5b3Ugc2VsZWN0ZWQgZm9yIHRoaXMgcHJvamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW49VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9ImxheWVyX3ZlcnNpb25fX2dldF92Y3NfcmVmZXJlbmNlIikKKworICAgICAgICBtYWNoaW5lX2ZpbGVfdGVtcGxhdGUgPSAnJyc8Y29kZT5jb25mL21hY2hpbmUve3tkYXRhLm5hbWV9fS5jb25mPC9jb2RlPgorICAgICAgICA8YSBocmVmPSJ7e2RhdGEuZ2V0X3Zjc19tYWNoaW5lX2ZpbGVfbGlua191cmx9fSIgdGFyZ2V0PSJfYmxhbmsiPjxpIGNsYXNzPSJpY29uLXNoYXJlIGdldC1pbmZvIj48L2k+PC9hPicnJworCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iTWFjaGluZSBmaWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbj1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0ibWFjaGluZWZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9bWFjaGluZV9maWxlX3RlbXBsYXRlKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iU2VsZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0iU2V0cyB0aGUgc2VsZWN0ZWQgbWFjaGluZSBhcyB0aGUgcHJvamVjdCBtYWNoaW5lLiBZb3UgY2FuIG9ubHkgaGF2ZSBvbmUgbWFjaGluZSBwZXIgcHJvamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRlYWJsZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9uYW1lPSJpbl9jdXJyZW50X3Byb2plY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0iYWRkLWRlbC1sYXllcnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9J3slIGluY2x1ZGUgIm1hY2hpbmVfYnRuLmh0bWwiICV9JykKKworCitjbGFzcyBMYXllck1hY2hpbmVzVGFibGUoTWFjaGluZXNUYWJsZSk6CisgICAgIiIiIFNtYWxsZXIgdmVyc2lvbiBvZiB0aGUgTWFjaGluZXMgdGFibGUgZm9yIHVzZSBpbiBsYXllciBkZXRhaWxzICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKExheWVyTWFjaGluZXNUYWJsZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIGdldF9jb250ZXh0X2RhdGEoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBjb250ZXh0ID0gc3VwZXIoTGF5ZXJNYWNoaW5lc1RhYmxlLCBzZWxmKS5nZXRfY29udGV4dF9kYXRhKCoqa3dhcmdzKQorICAgICAgICBjb250ZXh0WydsYXllcnZlcnNpb24nXSA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXQocGs9a3dhcmdzWydsYXllcmlkJ10pCisgICAgICAgIHJldHVybiBjb250ZXh0CisKKworICAgIGRlZiBzZXR1cF9xdWVyeXNldChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBNYWNoaW5lc1RhYmxlLnNldHVwX3F1ZXJ5c2V0KHNlbGYsICphcmdzLCAqKmt3YXJncykKKworICAgICAgICBzZWxmLnF1ZXJ5c2V0ID0gc2VsZi5xdWVyeXNldC5maWx0ZXIobGF5ZXJfdmVyc2lvbl9fcGs9aW50KGt3YXJnc1snbGF5ZXJpZCddKSkKKyAgICAgICAgc2VsZi5zdGF0aWNfY29udGV4dF9leHRyYVsnaW5fcHJqJ10gPSBQcm9qZWN0TGF5ZXIub2JqZWN0cy5maWx0ZXIoUShwcm9qZWN0PWt3YXJnc1sncGlkJ10pICYgUShsYXllcmNvbW1pdD1rd2FyZ3NbJ2xheWVyaWQnXSkpLmNvdW50KCkKKworICAgIGRlZiBzZXR1cF9jb2x1bW5zKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iTWFjaGluZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRlYWJsZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0ibmFtZSIpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJEZXNjcmlwdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJkZXNjcmlwdGlvbiIpCisKKyAgICAgICAgc2VsZWN0X2J0bl90ZW1wbGF0ZSA9ICc8YSBocmVmPSJ7JSB1cmwgInByb2plY3QiIGV4dHJhLnBpZCAlfT9zZXRNYWNoaW5lPXt7ZGF0YS5uYW1lfX0iIGNsYXNzPSJidG4gYnRuLWJsb2NrIHNlbGVjdC1tYWNoaW5lLWJ0biIgeyUgaWYgZXh0cmEuaW5fcHJqID09IDAlfWRpc2FibGVkPSJkaXNhYmxlZCJ7JWVuZGlmJX0+U2VsZWN0IG1hY2hpbmU8L2E+JworCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iU2VsZWN0IG1hY2hpbmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0iYWRkLWRlbC1sYXllcnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9c2VsZWN0X2J0bl90ZW1wbGF0ZSkKKworCitjbGFzcyBSZWNpcGVzVGFibGUoVG9hc3RlclRhYmxlLCBQcm9qZWN0RmlsdGVyc01peGluKToKKyAgICAiIiJUYWJsZSBvZiBSZWNpcGVzIGluIFRvYXN0ZXIiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihSZWNpcGVzVGFibGUsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5lbXB0eV9zdGF0ZSA9ICJUb2FzdGVyIGhhcyBubyByZWNpcGUgaW5mb3JtYXRpb24uIFRvIGdlbmVyYXRlIHJlY2lwZSBpbmZvcm1hdGlvbiB5b3UgY2FuIGNvbmZpZ3VyZSBhIGxheWVyIHNvdXJjZSB0aGVuIHJ1biBhIGJ1aWxkLiIKKyAgICAgICAgc2VsZi5kZWZhdWx0X29yZGVyYnkgPSAibmFtZSIKKworICAgIGRlZiBnZXRfY29udGV4dF9kYXRhKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgcHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5nZXQocGs9a3dhcmdzWydwaWQnXSkKKyAgICAgICAgY29udGV4dCA9IHN1cGVyKFJlY2lwZXNUYWJsZSwgc2VsZikuZ2V0X2NvbnRleHRfZGF0YSgqKmt3YXJncykKKworICAgICAgICBjb250ZXh0Wydwcm9qZWN0J10gPSBwcm9qZWN0CisKKyAgICAgICAgY29udGV4dFsncHJvamVjdGxheWVycyddID0gbWFwKGxhbWJkYSBwcmpsYXllcjogcHJqbGF5ZXIubGF5ZXJjb21taXQuaWQsIFByb2plY3RMYXllci5vYmplY3RzLmZpbHRlcihwcm9qZWN0PWNvbnRleHRbJ3Byb2plY3QnXSkpCisKKyAgICAgICAgcmV0dXJuIGNvbnRleHQKKworICAgIGRlZiBzZXR1cF9maWx0ZXJzKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHByb2plY3QgPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrPWt3YXJnc1sncGlkJ10pCisgICAgICAgIHNlbGYucHJvamVjdF9sYXllcnMgPSBwcm9qZWN0LnByb2plY3RsYXllcl9lcXVpdmFsZW50X3NldCgpCisKKyAgICAgICAgc2VsZi5hZGRfZmlsdGVyKHRpdGxlPSJGaWx0ZXIgYnkgcHJvamVjdCByZWNpcGVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ImluX2N1cnJlbnRfcHJvamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfYWN0aW9ucz1bCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWtlX2ZpbHRlcl9hY3Rpb24oImluX3Byb2plY3QiLCAiUmVjaXBlcyBwcm92aWRlZCBieSBsYXllcnMgYWRkZWQgdG8gdGhpcyBwcm9qZWN0Iiwgc2VsZi5maWx0ZXJfaW5fcHJvamVjdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWtlX2ZpbHRlcl9hY3Rpb24oIm5vdF9pbl9wcm9qZWN0IiwgIlJlY2lwZXMgcHJvdmlkZWQgYnkgbGF5ZXJzIG5vdCBhZGRlZCB0byB0aGlzIHByb2plY3QiLCBzZWxmLmZpbHRlcl9ub3RfaW5fcHJvamVjdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIF0pCisKKworICAgIGRlZiBzZXR1cF9xdWVyeXNldChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBwcmogPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrID0ga3dhcmdzWydwaWQnXSkKKworICAgICAgICBzZWxmLnF1ZXJ5c2V0ID0gcHJqLmdldF9hbGxfY29tcGF0aWJsZV9yZWNpcGVzKCkKKyAgICAgICAgc2VsZi5xdWVyeXNldCA9IHNlbGYucXVlcnlzZXQub3JkZXJfYnkoc2VsZi5kZWZhdWx0X29yZGVyYnkpCisKKworICAgIGRlZiBzZXR1cF9jb2x1bW5zKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJSZWNpcGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSJJbmZvcm1hdGlvbiBhYm91dCBhIHNpbmdsZSBwaWVjZSBvZiBzb2Z0d2FyZSwgaW5jbHVkaW5nIHdoZXJlIHRvIGRvd25sb2FkIHRoZSBzb3VyY2UsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgaG93IHRvIGNvbXBpbGUgdGhlIHNvdXJjZSBmaWxlcyBhbmQgaG93IHRvIHBhY2thZ2UgdGhlIGNvbXBpbGVkIG91dHB1dCIsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRlYWJsZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0ibmFtZSIpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJSZWNpcGUgVmVyc2lvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW49VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9InZlcnNpb24iKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iRGVzY3JpcHRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0iZ2V0X2Rlc2NyaXB0aW9uX29yX3N1bW1hcnkiKQorCisgICAgICAgIHJlY2lwZV9maWxlX3RlbXBsYXRlID0gJycnCisgICAgICAgIDxjb2RlPnt7ZGF0YS5maWxlX3BhdGh9fTwvY29kZT4KKyAgICAgICAgPGEgaHJlZj0ie3tkYXRhLmdldF92Y3NfcmVjaXBlX2ZpbGVfbGlua191cmx9fSIgdGFyZ2V0PSJfYmxhbmsiPgorICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXNoYXJlIGdldC1pbmZvIj48L2k+CisgICAgICAgIDwvYT4KKyAgICAgICAgICcnJworCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iUmVjaXBlIGZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSJQYXRoIHRvIHRoZSByZWNpcGUgLmJiIGZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lPSJyZWNpcGUtZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT1yZWNpcGVfZmlsZV90ZW1wbGF0ZSkKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IlNlY3Rpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSJUaGUgc2VjdGlvbiBpbiB3aGljaCByZWNpcGVzIHNob3VsZCBiZSBjYXRlZ29yaXplZCIsCisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmFibGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9InNlY3Rpb24iKQorCisgICAgICAgIGxheWVyX2xpbmtfdGVtcGxhdGUgPSAnJycKKyAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdsYXllcmRldGFpbHMnIGV4dHJhLnBpZCBkYXRhLmxheWVyX3ZlcnNpb24uaWQgJX0iPgorICAgICAgICB7e2RhdGEubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX08L2E+CisgICAgICAgICcnJworCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iTGF5ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSJUaGUgbmFtZSBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lPSJsYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT1sYXllcl9saW5rX3RlbXBsYXRlKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iTGljZW5zZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ9IlRoZSBsaXN0IG9mIHNvdXJjZSBsaWNlbnNlcyBmb3IgdGhlIHJlY2lwZS4gTXVsdGlwbGUgbGljZW5zZSBuYW1lcyBzZXBhcmF0ZWQgYnkgdGhlIHBpcGUgY2hhcmFjdGVyIGluZGljYXRlcyBhIGNob2ljZSBiZXR3ZWVuIGxpY2Vuc2VzLiBNdWx0aXBsZSBsaWNlbnNlIG5hbWVzIHNlcGFyYXRlZCBieSB0aGUgYW1wZXJzYW5kIGNoYXJhY3RlciBpbmRpY2F0ZXMgbXVsdGlwbGUgbGljZW5zZXMgZXhpc3QgdGhhdCBjb3ZlciBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHNvdXJjZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmFibGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9ImxpY2Vuc2UiKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iUmV2aXNpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0ibGF5ZXJfdmVyc2lvbl9fZ2V0X3Zjc19yZWZlcmVuY2UiKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iQnVpbGQiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSJBZGQgb3IgZGVsZXRlIHJlY2lwZXMgdG8gYW5kIGZyb20geW91ciBwcm9qZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVhYmxlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyX25hbWU9ImluX2N1cnJlbnRfcHJvamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lPSJhZGQtZGVsLWxheWVycyIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT0neyUgaW5jbHVkZSAicmVjaXBlX2J0bi5odG1sIiAlfScpCisKKyAgICAgICAgcHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5nZXQocGs9a3dhcmdzWydwaWQnXSkKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJQcm9qZWN0IGNvbXBhdGlibGUgTGF5ZXIgSUQiLAorICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheWFibGUgPSBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWUgPSAicHJvamVjdGNvbXBhdGlibGVfbGF5ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0YXRpb24gPSBsYW1iZGEgeDogKHgubGF5ZXJfdmVyc2lvbi5nZXRfZXF1aXZhbGVudHNfd3ByaW9yaXR5KHByb2plY3QpWzBdKSkKKworY2xhc3MgTGF5ZXJSZWNpcGVzVGFibGUoUmVjaXBlc1RhYmxlKToKKyAgICAiIiIgU21hbGxlciB2ZXJzaW9uIG9mIHRoZSBSZWNpcGVzIHRhYmxlIGZvciB1c2UgaW4gbGF5ZXIgZGV0YWlscyAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihMYXllclJlY2lwZXNUYWJsZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIGdldF9jb250ZXh0X2RhdGEoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBjb250ZXh0ID0gc3VwZXIoTGF5ZXJSZWNpcGVzVGFibGUsIHNlbGYpLmdldF9jb250ZXh0X2RhdGEoKiprd2FyZ3MpCisgICAgICAgIGNvbnRleHRbJ2xheWVydmVyc2lvbiddID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldChwaz1rd2FyZ3NbJ2xheWVyaWQnXSkKKyAgICAgICAgcmV0dXJuIGNvbnRleHQKKworCisgICAgZGVmIHNldHVwX3F1ZXJ5c2V0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIFJlY2lwZXNUYWJsZS5zZXR1cF9xdWVyeXNldChzZWxmLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYucXVlcnlzZXQgPSBzZWxmLnF1ZXJ5c2V0LmZpbHRlcihsYXllcl92ZXJzaW9uX19waz1pbnQoa3dhcmdzWydsYXllcmlkJ10pKQorCisgICAgICAgIHNlbGYuc3RhdGljX2NvbnRleHRfZXh0cmFbJ2luX3ByaiddID0gUHJvamVjdExheWVyLm9iamVjdHMuZmlsdGVyKFEocHJvamVjdD1rd2FyZ3NbJ3BpZCddKSAmIFEobGF5ZXJjb21taXQ9a3dhcmdzWydsYXllcmlkJ10pKS5jb3VudCgpCisKKyAgICBkZWYgc2V0dXBfY29sdW1ucyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IlJlY2lwZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ9IkluZm9ybWF0aW9uIGFib3V0IGEgc2luZ2xlIHBpZWNlIG9mIHNvZnR3YXJlLCBpbmNsdWRpbmcgd2hlcmUgdG8gZG93bmxvYWQgdGhlIHNvdXJjZSwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBob3cgdG8gY29tcGlsZSB0aGUgc291cmNlIGZpbGVzIGFuZCBob3cgdG8gcGFja2FnZSB0aGUgY29tcGlsZWQgb3V0cHV0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVhYmxlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJuYW1lIikKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IkRlc2NyaXB0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9ImdldF9kZXNjcmlwdGlvbl9vcl9zdW1tYXJ5IikKKworCisgICAgICAgIGJ1aWxkX3JlY2lwZV90ZW1wbGF0ZSA9JzxidXR0b24gY2xhc3M9ImJ0biBidG4tYmxvY2sgYnVpbGQtcmVjaXBlLWJ0biIgZGF0YS1yZWNpcGUtbmFtZT0ie3tkYXRhLm5hbWV9fSIgeyVpZiBleHRyYS5pbl9wcmogPT0gMCAlfWRpc2FibGVkPSJkaXNhYmxlZCJ7JWVuZGlmJX0+QnVpbGQgcmVjaXBlPC9idXR0b24+JworCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iQnVpbGQgcmVjaXBlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9ImFkZC1kZWwtbGF5ZXJzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPWJ1aWxkX3JlY2lwZV90ZW1wbGF0ZSkKKworY2xhc3MgUHJvamVjdExheWVyc1JlY2lwZXNUYWJsZShSZWNpcGVzVGFibGUpOgorICAgICIiIiBUYWJsZSB0aGF0IGxpc3RzIG9ubHkgcmVjaXBlcyBhdmFpbGFibGUgZm9yIGxheWVycyBhZGRlZCB0byB0aGUgcHJvamVjdCAiIiIKKworICAgIGRlZiBzZXR1cF9xdWVyeXNldChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihQcm9qZWN0TGF5ZXJzUmVjaXBlc1RhYmxlLCBzZWxmKS5zZXR1cF9xdWVyeXNldCgqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHByaiA9IFByb2plY3Qub2JqZWN0cy5nZXQocGsgPSBrd2FyZ3NbJ3BpZCddKQorICAgICAgICBzZWxmLnF1ZXJ5c2V0ID0gc2VsZi5xdWVyeXNldC5maWx0ZXIobGF5ZXJfdmVyc2lvbl9faW4gPSBwcmoucHJvamVjdGxheWVyX2VxdWl2YWxlbnRfc2V0KCkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZS5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDBiYzQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2UuaHRtbApAQCAtMCwwICsxLDE4MiBAQAorPCFET0NUWVBFIGh0bWw+Cit7JSBsb2FkIHN0YXRpYyAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQorPGh0bWwgbGFuZz0iZW4iPgorICAgIDxoZWFkPgorICAgICAgICA8dGl0bGU+eyUgaWYgb2JqZWN0bmFtZSAlfSB7e29iamVjdG5hbWV8dGl0bGV9fSAtIHslIGVuZGlmICV9VG9hc3RlcjwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InslIHN0YXRpYyAnY3NzL2Jvb3RzdHJhcC5taW4uY3NzJyAlfSIgdHlwZT0idGV4dC9jc3MiLz4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ieyUgc3RhdGljICdjc3MvYm9vdHN0cmFwLXJlc3BvbnNpdmUubWluLmNzcycgJX0iIHR5cGU9J3RleHQvY3NzJy8+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InslIHN0YXRpYyAnY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzJyAlfSIgdHlwZT0ndGV4dC9jc3MnLz4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ieyUgc3RhdGljICdjc3MvcHJldHRpZnkuY3NzJyAlfSIgdHlwZT0ndGV4dC9jc3MnLz4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ieyUgc3RhdGljICdjc3MvZGVmYXVsdC5jc3MnICV9IiB0eXBlPSd0ZXh0L2NzcycvPgorCisgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7Y2hhcnNldD1VVEYtOCIgLz4KKyAgICA8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9qcXVlcnktMi4wLjMubWluLmpzJyAlfSI+CisgICAgPC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvanF1ZXJ5LmNvb2tpZS5qcycgJX0iPgorICAgIDwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL2Jvb3RzdHJhcC5taW4uanMnICV9Ij4KKyAgICA8L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9wcmV0dGlmeS5qcycgJX0iPgorICAgIDwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL2xpYnRvYXN0ZXIuanMnICV9Ij4KKyAgICA8L3NjcmlwdD4KKyAgICB7JSBpZiBERUJVRyAlfQorICAgIDxzY3JpcHQ+CisgICAgICBsaWJ0b2FzdGVyLmRlYnVnID0gdHJ1ZTsKKyAgICA8L3NjcmlwdD4KKyAgICB7JSBlbmRpZiAlfQorICAgIDxzY3JpcHQ+CisgICAgICBsaWJ0b2FzdGVyLmN0eCA9IHsKKyAgICAgICAganNVcmwgOiAieyUgc3RhdGljICdqcy8nICV9IiwKKyAgICAgICAgaHRtbFVybCA6ICJ7JSBzdGF0aWMgJ2h0bWwvJyAlfSIsCisgICAgICAgIHByb2plY3RzVXJsIDogInslIHVybCAnYWxsLXByb2plY3RzJyAlfSIsCisgICAgICAgIHByb2plY3RzVHlwZUFoZWFkVXJsOiB7JSB1cmwgJ3hocl9wcm9qZWN0c3R5cGVhaGVhZCcgYXMgcHJqdXJsJX17e3ByanVybHxqc29ufX0sCisgICAgICAgIHslIGlmIHByb2plY3QuaWQgJX0KKyAgICAgICAgcHJvamVjdElkIDoge3twcm9qZWN0LmlkfX0sCisgICAgICAgIHByb2plY3RQYWdlVXJsIDogeyUgdXJsICdwcm9qZWN0JyBwcm9qZWN0LmlkIGFzIHB1cmwlfXt7cHVybHxqc29ufX0sCisgICAgICAgIHByb2plY3ROYW1lIDoge3twcm9qZWN0Lm5hbWV8anNvbn19LAorICAgICAgICByZWNpcGVzVHlwZUFoZWFkVXJsOiB7JSB1cmwgJ3hocl9yZWNpcGVzdHlwZWFoZWFkJyBwcm9qZWN0LmlkIGFzIHBhdHVybCV9e3twYXR1cmx8anNvbn19LAorICAgICAgICBsYXllcnNUeXBlQWhlYWRVcmw6IHslIHVybCAneGhyX2xheWVyc3R5cGVhaGVhZCcgcHJvamVjdC5pZCBhcyBwYXR1cmwlfXt7cGF0dXJsfGpzb259fSwKKyAgICAgICAgbWFjaGluZXNUeXBlQWhlYWRVcmw6IHslIHVybCAneGhyX21hY2hpbmVzdHlwZWFoZWFkJyBwcm9qZWN0LmlkIGFzIHBhdHVybCV9e3twYXR1cmx8anNvbn19LAorCisgICAgICAgIHByb2plY3RCdWlsZHNVcmw6IHslIHVybCAncHJvamVjdGJ1aWxkcycgcHJvamVjdC5pZCBhcyBwYnVybCAlfXt7cGJ1cmx8anNvbn19LAorICAgICAgICBwcm9qZWN0SWQgOiB7e3Byb2plY3QuaWR9fSwKKyAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICBwcm9qZWN0SWQgOiB1bmRlZmluZWQsCisgICAgICAgIHByb2plY3RQYWdlVXJsIDogdW5kZWZpbmVkLAorICAgICAgICBwcm9qZWN0TmFtZSA6IHVuZGVmaW5lZCwKKyAgICAgICAgcHJvamVjdElkIDogdW5kZWZpbmVkLAorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgfTsKKyAgICA8L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9iYXNlLmpzJyAlfSI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLyogVmFycyBuZWVkZWQgZm9yIGJhc2UuanMgKi8KKyAgICAgICAgdmFyIGN0eCA9IHt9OworICAgICAgICBjdHgubnVtUHJvamVjdHMgPSB7e3Byb2plY3RzfGxlbmd0aH19OworICAgICAgICBjdHguY3VycmVudFVybCA9ICJ7e3JlcXVlc3QucGF0aHxlc2NhcGVqc319IjsKKworICAgICAgICBiYXNlUGFnZUluaXQoY3R4KTsKKyAgICAgIH0pOworICAgIDwvc2NyaXB0PgorCit7JSBibG9jayBleHRyYWhlYWRjb250ZW50ICV9Cit7JSBlbmRibG9jayAlfQorICAgIDwvaGVhZD4KKworPGJvZHkgc3R5bGU9ImhlaWdodDogMTAwJSI+CisKKyAgeyUgY3NyZl90b2tlbiAlfQorICA8ZGl2IGlkPSJsb2FkaW5nLW5vdGlmaWNhdGlvbiIgY2xhc3M9ImFsZXJ0IGxlYWQgdGV4dC1jZW50ZXIiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICAgIExvYWRpbmcgPGkgY2xhc3M9ImZhLXB1bHNlIGljb24tc3Bpbm5lciI+PC9pPgorICA8L2Rpdj4KKworICA8ZGl2IGlkPSJjaGFuZ2Utbm90aWZpY2F0aW9uIiBjbGFzcz0iYWxlcnQgbGVhZCBhbGVydC1pbmZvIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBpZD0iaGlkZS1hbGVydCI+JnRpbWVzOzwvYnV0dG9uPgorICAgIDxzcGFuIGlkPSJjaGFuZ2Utbm90aWZpY2F0aW9uLW1zZyI+PC9zcGFuPgorICA8L2Rpdj4KKworICAgIDxkaXYgY2xhc3M9Im5hdmJhciBuYXZiYXItZml4ZWQtdG9wIj4KKyAgICAgIDxkaXYgY2xhc3M9Im5hdmJhci1pbm5lciI+CisgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+CisgICAgICAgICAgPGEgY2xhc3M9ImJyYW5kIGxvZ28iIGhyZWY9IiMiPjxpbWcgc3JjPSJ7JSBzdGF0aWMgJ2ltZy9sb2dvLnBuZycgJX0iIGNsYXNzPSIiIGFsdD0iWW9jdG8gbG9nbyBwcm9qZWN0Ii8+PC9hPgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJicmFuZCI+CisgICAgICAgICAgICA8YSBocmVmPSIvIj5Ub2FzdGVyPC9hPgorICAgICAgICAgICAgeyUgaWYgREVCVUcgJX0KKyAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLWluZm8tc2lnbiIgdGl0bGU9IjxzdHJvbmc+VG9hc3RlciB2ZXJzaW9uIGluZm9ybWF0aW9uPC9zdHJvbmc+IiBkYXRhLWNvbnRlbnQ9IjxkbD48ZHQ+QnJhbmNoPC9kdD48ZGQ+e3tUT0FTVEVSX0JSQU5DSH19PC9kZD48ZHQ+UmV2aXNpb248L2R0PjxkZD57e1RPQVNURVJfUkVWSVNJT059fTwvZGQ+PC9kbD4iPjwvaT4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgIHslIGlmIHJlcXVlc3QucmVzb2x2ZXJfbWF0Y2gudXJsX25hbWUgIT0gJ2xhbmRpbmcnIGFuZCByZXF1ZXN0LnJlc29sdmVyX21hdGNoLnVybF9uYW1lICE9ICduZXdwcm9qZWN0JyAlfQorICAgICAgICAgIDx1bCBjbGFzcz0ibmF2Ij4KKyAgICAgICAgICAgIDxsaSAgeyUgaWYgcmVxdWVzdC5yZXNvbHZlcl9tYXRjaC51cmxfbmFtZSA9PSAnYWxsLWJ1aWxkcycgJX0KKyAgICAgICAgICAgICAgICBjbGFzcz0iYWN0aXZlIgorICAgICAgICAgICAgICAgIHslIGVuZGlmICV9PgorICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2FsbC1idWlsZHMnICV9Ij4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi10YXNrcyI+PC9pPgorICAgICAgICAgICAgICAgIEFsbCBidWlsZHMKKyAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgIDxsaSB7JSBpZiByZXF1ZXN0LnJlc29sdmVyX21hdGNoLnVybF9uYW1lID09ICdhbGwtcHJvamVjdHMnICAlfQorICAgICAgICAgICAgICAgIGNsYXNzPSJhY3RpdmUiCisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0+CisgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnYWxsLXByb2plY3RzJyAlfSI+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tZm9sZGVyLW9wZW4iPjwvaT4KKyAgICAgICAgICAgICAgICBBbGwgcHJvamVjdHMKKyAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICA8L3VsPgorICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgPHVsIGNsYXNzPSJuYXYgcHVsbC1yaWdodCI+CisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9sYXRlc3QvdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwuaHRtbCI+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tYm9vayI+PC9pPgorICAgICAgICAgICAgICAgIE1hbnVhbAorICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgIDwvdWw+CisgICAgICAgICAgPHNwYW4gY2xhc3M9InB1bGwtcmlnaHQgZGl2aWRlci12ZXJ0aWNhbCI+PC9zcGFuPgorICAgICAgICAgIDxkaXYgY2xhc3M9ImJ0bi1ncm91cCBwdWxsLXJpZ2h0Ij4KKyAgICAgICAgICAgIDxhIGNsYXNzPSJidG4iIGlkPSJuZXctcHJvamVjdC1idXR0b24iIGhyZWY9InslIHVybCAnbmV3cHJvamVjdCcgJX0iPk5ldyBwcm9qZWN0PC9hPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwhLS0gTmV3IGJ1aWxkIHBvcG92ZXIgLS0+CisgICAgICAgICAgPGRpdiBjbGFzcz0iYnRuLWdyb3VwIHB1bGwtcmlnaHQiIGlkPSJuZXctYnVpbGQtYnV0dG9uIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+CisgICAgICAgICAgICAgIE5ldyBidWlsZAorICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1jYXJldC1kb3duIj48L2k+CisgICAgICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSBuZXctYnVpbGQgbXVsdGktc2VsZWN0Ij4KKyAgICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgIDxoMz5OZXcgYnVpbGQ8L2gzPgorICAgICAgICAgICAgICAgIDxoNj5Qcm9qZWN0OjwvaDY+CisgICAgICAgICAgICAgICAgPHNwYW4gaWQ9InByb2plY3QiPgorICAgICAgICAgICAgICAgICAgeyUgaWYgcHJvamVjdC5pZCAlfQorICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxlYWQiIGhyZWY9InslIHVybCAncHJvamVjdCcgcHJvamVjdC5pZCAlfSI+e3twcm9qZWN0Lm5hbWV9fTwvYT4KKyAgICAgICAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsZWFkIiBocmVmPSIjIj48L2E+CisgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcGVuY2lsIj48L2k+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDxmb3JtIGlkPSJjaGFuZ2UtcHJvamVjdC1mb3JtIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CisgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1hcHBlbmQiPgorICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImlucHV0LW1lZGl1bSIgaWQ9InByb2plY3QtbmFtZS1pbnB1dCIgcGxhY2Vob2xkZXI9IlR5cGUgYSBwcm9qZWN0IG5hbWUiIGF1dG9jb21wbGV0ZT0ib2ZmIiBkYXRhLW1pbkxlbmd0aD0iMSIgZGF0YS1hdXRvY29tcGxldGU9Im9mZiIgZGF0YS1wcm92aWRlPSJ0eXBlYWhlYWQiLz4KKyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0ic2F2ZS1wcm9qZWN0LWJ1dHRvbiIgY2xhc3M9ImJ0biIgdHlwZT0iYnV0dG9uIj5TYXZlPC9idXR0b24+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGlkPSJjYW5jZWwtY2hhbmdlLXByb2plY3QiIGNsYXNzPSJidG4gYnRuLWxpbmsiIHN0eWxlPSJkaXNwbGF5OiBub25lIj5DYW5jZWw8L2E+CisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgIDxwPjxhIGlkPSJ2aWV3LWFsbC1wcm9qZWN0cyIgaHJlZj0ieyUgdXJsICdhbGwtcHJvamVjdHMnICV9Ij5WaWV3IGFsbCBwcm9qZWN0czwvYT48L3A+CisgICAgICAgICAgICAgICAgPC9mb3JtPgorICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKyAgICAgICAgICAgICAgICAgIDxwPlRoaXMgcHJvamVjdCBjb25maWd1cmF0aW9uIGlzIGluY29tcGxldGUsIHNvIHlvdSBjYW5ub3QgcnVuIGJ1aWxkcy48L3A+CisgICAgICAgICAgICAgICAgICA8cD48YSBocmVmPSJ7JSBpZiBwcm9qZWN0LmlkICV9eyUgdXJsICdwcm9qZWN0JyBwcm9qZWN0LmlkICV9eyUgZW5kaWYgJX0iPlZpZXcgcHJvamVjdCBjb25maWd1cmF0aW9uPC9hPjwvcD4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgPGxpIGlkPSJ0YXJnZXRzLWZvcm0iPgorICAgICAgICAgICAgICAgIDxoNj5SZWNpcGUocyk6PC9oNj4KKyAgICAgICAgICAgICAgICA8Zm9ybT4KKyAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iaW5wdXQteGxhcmdlIGJ1aWxkLXRhcmdldC1pbnB1dCIgcGxhY2Vob2xkZXI9IlR5cGUgYSByZWNpcGUgbmFtZSIgYXV0b2NvbXBsZXRlPSJvZmYiIGRhdGEtbWluTGVuZ3RoPSIxIiBkYXRhLWF1dG9jb21wbGV0ZT0ib2ZmIiBkYXRhLXByb3ZpZGU9InR5cGVhaGVhZCIgZGlzYWJsZWQvPgorICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IGJ1aWxkLWJ1dHRvbiIgZGlzYWJsZWQ+QnVpbGQ8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgPC9kaXY+CisKKworICAgIDwvZGl2PgorIDwvZGl2PgorPC9kaXY+CisKKzxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCB0b3AtcGFkZGVkIj4KKzxkaXYgY2xhc3M9InJvdy1mbHVpZCI+Cit7JSBibG9jayBwYWdlY29udGVudCAlfQoreyUgZW5kYmxvY2sgJX0KKzwvZGl2PgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlYnVpbGRkZXRhaWxwYWdlLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZWJ1aWxkZGV0YWlscGFnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyY2E1MGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZWJ1aWxkZGV0YWlscGFnZS5odG1sCkBAIC0wLDAgKzEsMjkgQEAKK3slIGV4dGVuZHMgImJhc2UuaHRtbCIgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KK3slIGJsb2NrIHBhZ2Vjb250ZW50ICV9CisKKzxkaXYgY2xhc3M9InJvdy1mbHVpZCI+Cis8IS0tIEJyZWFkY3J1bWJzIC0tPgorICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgorICAgICAgICA8dWwgY2xhc3M9ImJyZWFkY3J1bWIiIGlkPSJicmVhZGNydW1iIj4KKyAgICAgICAgICAgIDxsaSBjbGFzcz0ibXV0ZWQiPnt7YnVpbGQucHJvamVjdC5uYW1lfX06PC9saT4KKyAgICAgICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RidWlsZHMnIGJ1aWxkLnByb2plY3QuaWQgJX0iPkJ1aWxkczwvYT48L2xpPgorICAgICAgICAgICAgPGxpPjxhIGhyZWY9InsldXJsICdidWlsZGRhc2hib2FyZCcgYnVpbGQucGslfSI+e3tidWlsZC50YXJnZXRfc2V0LmFsbC4wLnRhcmdldH19IHslaWYgYnVpbGQudGFyZ2V0X3NldC5hbGwuY291bnQgPiAxJX0oKyB7e2J1aWxkLnRhcmdldF9zZXQuYWxsLmNvdW50fGFkZDoiLTEifX0peyVlbmRpZiV9ICh7e2J1aWxkLmNvbXBsZXRlZF9vbnxkYXRlOiJkL20veSBIOmkifX0pPC9hPjwvbGk+CisgICAgICAgICAgICB7JSBibG9jayBsb2NhbGJyZWFkY3J1bWIgJX17JSBlbmRibG9jayAlfQorICAgICAgICA8L3VsPgorICAgICAgICA8c2NyaXB0PgorICAgICAgICAkKCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAkKCcjYnJlYWRjcnVtYiA+IGxpJykuYXBwZW5kKCc8c3BhbiBjbGFzcz0iZGl2aWRlciI+JnJhcnI7PC9zcGFuPicpOworICAgICAgICAgICAgJCgnI2JyZWFkY3J1bWIgPiBsaTpsYXN0JykuYWRkQ2xhc3MoImFjdGl2ZSIpOworICAgICAgICAgICAgJCgnI2JyZWFkY3J1bWIgPiBsaTpsYXN0ID4gc3BhbiwgI2JyZWFkY3J1bWIgPiBsaTpmaXJzdCA+IHNwYW4nKS5yZW1vdmUoKTsKKyAgICAgICAgfSk7CisgICAgICAgIDwvc2NyaXB0PgorICAgIDwvZGl2PiA8IS0tc2VjdGlvbi0tPgorCisgICAgICAgIDwhLS0gQmVnaW4gY29udGFpbmVyIC0tPgorICAgICAgICB7JSBibG9jayBwYWdlZGV0YWlsaW5mb21haW4gJX17JSBlbmRibG9jayAlfQorICAgICAgICA8IS0tIEVuZCBjb250YWluZXIgLS0+CisKKzwvZGl2PgorCit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2VidWlsZHBhZ2UuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlYnVpbGRwYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ0MWRmOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlYnVpbGRwYWdlLmh0bWwKQEAgLTAsMCArMSw4OCBAQAoreyUgZXh0ZW5kcyAiYmFzZS5odG1sIiAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQoreyUgbG9hZCBodW1hbml6ZSAlfQoreyUgYmxvY2sgcGFnZWNvbnRlbnQgJX0KKworCisgPGRpdiBjbGFzcz0iIj4KKzwhLS0gQnJlYWRjcnVtYnMgLS0+CisgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CisgICAgICAgIDx1bCBjbGFzcz0iYnJlYWRjcnVtYiIgaWQ9ImJyZWFkY3J1bWIiPgorICAgICAgICAgICAgPGxpIGNsYXNzPSJtdXRlZCI+e3tidWlsZC5wcm9qZWN0Lm5hbWV9fTo8L2xpPgorICAgICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAncHJvamVjdGJ1aWxkcycgYnVpbGQucHJvamVjdC5pZCAlfSI+QnVpbGRzPC9hPjwvbGk+CisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICB7JSBibG9jayBwYXJlbnRicmVhZGNydW1iICV9CisgICAgICAgICAgICA8YSBocmVmPSJ7JXVybCAnYnVpbGRkYXNoYm9hcmQnIGJ1aWxkLnBrJX0iPgorICAgICAgICAgICAgICAgIHt7YnVpbGQuZ2V0X3NvcnRlZF90YXJnZXRfbGlzdC4wLnRhcmdldH19IHslaWYgYnVpbGQudGFyZ2V0X3NldC5hbGwuY291bnQgPiAxJX0oKyB7e2J1aWxkLnRhcmdldF9zZXQuYWxsLmNvdW50fGFkZDoiLTEifX0peyVlbmRpZiV9ICh7e2J1aWxkLmNvbXBsZXRlZF9vbnxkYXRlOiJkL20veSBIOmkifX0pCisgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICB7JSBlbmRibG9jayAlfQorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgIHslIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfXslIGVuZGJsb2NrICV9CisgICAgICAgIDwvdWw+CisgICAgICAgIDxzY3JpcHQ+CisgICAgICAgICQoIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICQoJyNicmVhZGNydW1iID4gbGknKS5hcHBlbmQoJzxzcGFuIGNsYXNzPSJkaXZpZGVyIj4mcmFycjs8L3NwYW4+Jyk7CisgICAgICAgICAgICAkKCcjYnJlYWRjcnVtYiA+IGxpOmxhc3QnKS5hZGRDbGFzcygiYWN0aXZlIik7CisgICAgICAgICAgICAkKCcjYnJlYWRjcnVtYiA+IGxpOmxhc3QgPiBzcGFuLCAjYnJlYWRjcnVtYiA+IGxpOmZpcnN0ID4gc3BhbicpLnJlbW92ZSgpOworCSAgICBjb25zb2xlLmxvZygiZG9uZSIpOworICAgICAgICB9KTsKKyAgICAgICAgPC9zY3JpcHQ+CisgICAgPC9kaXY+CisKKyAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorCisgICAgICAgIDwhLS0gYmVnaW4gbGVmdCBzaWRlYmFyIGNvbnRhaW5lciAtLT4KKyAgICAgICAgPGRpdiBpZD0ibmF2IiBjbGFzcz0ic3BhbjIiPgorICAgICAgICAgICAgPHVsIGNsYXNzPSJuYXYgbmF2LWxpc3Qgd2VsbCI+CisgICAgICAgICAgICAgIDxsaQorICAgICAgICAgICAgICAgIHslIGlmIHJlcXVlc3QucmVzb2x2ZXJfbWF0Y2gudXJsX25hbWUgPT0gJ2J1aWxkZGFzaGJvYXJkJyAgJX0KKyAgICAgICAgICAgICAgICAgIGNsYXNzPSJhY3RpdmUiCisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0gPgorICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJuYXYtcGFyZW50IiBocmVmPSJ7JSB1cmwgJ2J1aWxkZGFzaGJvYXJkJyBidWlsZC5wayAlfSI+QnVpbGQgc3VtbWFyeTwvYT4KKyAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgeyUgaWYgYnVpbGQudGFyZ2V0X3NldC5hbGwuMC5pc19pbWFnZSBhbmQgYnVpbGQub3V0Y29tZSA9PSAwICV9CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJuYXYtaGVhZGVyIj5JbWFnZXM8L2xpPgorICAgICAgICAgICAgICAgIHslIGJsb2NrIG5hdi10YXJnZXQgJX0KKyAgICAgICAgICAgICAgICAgIHslIGZvciB0IGluIGJ1aWxkLmdldF9zb3J0ZWRfdGFyZ2V0X2xpc3QgJX0KKyAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAndGFyZ2V0JyBidWlsZC5wayB0LnBrICV9Ij57e3QudGFyZ2V0fX08L2E+PGxpPgorICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgeyUgZW5kYmxvY2sgJX0KKyAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgPGxpIGNsYXNzPSJuYXYtaGVhZGVyIj5CdWlsZDwvbGk+CisgICAgICAgICAgICAgIHslIGJsb2NrIG5hdi1jb25maWd1cmF0aW9uICV9CisgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdjb25maWd1cmF0aW9uJyBidWlsZC5wayAlfSI+Q29uZmlndXJhdGlvbjwvYT48L2xpPgorICAgICAgICAgICAgICB7JSBlbmRibG9jayAlfQorICAgICAgICAgICAgICB7JSBibG9jayBuYXYtdGFza3MgJX0KKyAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ3Rhc2tzJyBidWlsZC5wayAlfSI+VGFza3M8L2E+PC9saT4KKyAgICAgICAgICAgICAgeyUgZW5kYmxvY2sgJX0KKyAgICAgICAgICAgICAgeyUgYmxvY2sgbmF2LXJlY2lwZXMgJX0KKyAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ3JlY2lwZXMnIGJ1aWxkLnBrICV9Ij5SZWNpcGVzPC9hPjwvbGk+CisgICAgICAgICAgICAgIHslIGVuZGJsb2NrICV9CisgICAgICAgICAgICAgIHslIGJsb2NrIG5hdi1wYWNrYWdlcyAlfQorICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAncGFja2FnZXMnIGJ1aWxkLnBrICV9Ij5QYWNrYWdlczwvYT48L2xpPgorICAgICAgICAgICAgICB7JSBlbmRibG9jayAlfQorICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJuYXYtaGVhZGVyIj5QZXJmb3JtYW5jZTwvbGk+CisgICAgICAgICAgICAgIHslIGJsb2NrIG5hdi1idWlsZHRpbWUgJX0KKyAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ2J1aWxkdGltZScgYnVpbGQucGsgJX0iPlRpbWU8L2E+PC9saT4KKyAgICAgICAgICAgICAgeyUgZW5kYmxvY2sgJX0KKyAgICAgICAgICAgICAgeyUgYmxvY2sgbmF2LWNwdXVzYWdlICV9CisgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdjcHV1c2FnZScgYnVpbGQucGsgJX0iPkNQVSB1c2FnZTwvYT48L2xpPgorICAgICAgICAgICAgICB7JSBlbmRibG9jayAlfQorICAgICAgICAgICAgICB7JSBibG9jayBuYXYtZGlza2lvICV9CisgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdkaXNraW8nIGJ1aWxkLnBrICV9Ij5EaXNrIEkvTzwvYT48L2xpPgorICAgICAgICAgICAgICB7JSBlbmRibG9jayAlfQorICAgICAgICAgICAgPC91bD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDwhLS0gZW5kIGxlZnQgc2lkZWJhciBjb250YWluZXIgLS0+CisKKyAgICAgICAgPCEtLSBCZWdpbiByaWdodCBjb250YWluZXIgLS0+CisgICAgICAgIHslIGJsb2NrIGJ1aWxkaW5mb21haW4gJX17JSBlbmRibG9jayAlfQorICAgICAgICA8IS0tIEVuZCByaWdodCBjb250YWluZXIgLS0+CisKKworICAgIDwvZGl2PgorICA8L2Rpdj4KKworCit7JSBlbmRibG9jayAlfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXByb2plY3RidWlsZHNwYWdlLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXByb2plY3RidWlsZHNwYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI5Y2QxNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlcHJvamVjdGJ1aWxkc3BhZ2UuaHRtbApAQCAtMCwwICsxLDE1IEBACit7JSBleHRlbmRzICJiYXNlLmh0bWwiICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9Cit7JSBibG9jayBwYWdlY29udGVudCAlfQorCit7JSBpbmNsdWRlICJwcm9qZWN0dG9wYmFyLmh0bWwiICV9CisKKzwhLS0gQmVnaW4gbWFpbiBwYWdlIGNvbnRhaW5lciAtLT4KKzxkaXY+CisgICAgeyUgYmxvY2sgcHJvamVjdGluZm9tYWluICV9eyUgZW5kYmxvY2sgJX0KKzwvZGl2PgorPCEtLSBFbmQgbWFpbiBjb250YWluZXIgLS0+CisKK3slIGVuZGJsb2NrICV9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlcHJvamVjdHBhZ2UuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlcHJvamVjdHBhZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjhlMGJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2Vwcm9qZWN0cGFnZS5odG1sCkBAIC0wLDAgKzEsNDAgQEAKK3slIGV4dGVuZHMgImJhc2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KK3slIGJsb2NrIHBhZ2Vjb250ZW50ICV9CisKK3slIGluY2x1ZGUgInByb2plY3R0b3BiYXIuaHRtbCIgJX0KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKKyAgICAgJCgiI2NvbmZpZy1uYXYgLm5hdiBsaSBhIikuZWFjaChmdW5jdGlvbigpeworICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgPT09ICQodGhpcykuYXR0cignaHJlZicpKQorICAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5hZGRDbGFzcygnYWN0aXZlJyk7CisgICAgICAgZWxzZQorICAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7CisgICAgIH0pOworCisgICAgICQoIiN0b3BiYXItY29uZmlndXJhdGlvbi10YWIiKS5hZGRDbGFzcygiYWN0aXZlIikKKyAgfSk7Cis8L3NjcmlwdD4KKworPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgPCEtLSBvbmx5IG9uIGNvbmZpZyBwYWdlcyAtLT4KKyAgPGRpdiBpZD0iY29uZmlnLW5hdiIgY2xhc3M9InNwYW4yIj4KKyAgICA8dWwgY2xhc3M9Im5hdiBuYXYtbGlzdCB3ZWxsIj4KKyAgICAgIDxsaT48YSBjbGFzcz0ibmF2LXBhcmVudCIgaHJlZj0ieyUgdXJsICdwcm9qZWN0JyBwcm9qZWN0LmlkICV9Ij5Db25maWd1cmF0aW9uPC9hPjwvbGk+CisgICAgICA8bGkgY2xhc3M9Im5hdi1oZWFkZXIiPkNvbXBhdGlibGUgbWV0YWRhdGE8L2xpPgorPCEtLSAgPGxpPjxhIGhyZWY9ImFsbC1pbWFnZS1yZWNpcGVzLmh0bWwiPkltYWdlIHJlY2lwZXM8L2E+PC9saT4gLS0+CisgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0dGFyZ2V0cycgcHJvamVjdC5pZCAlfSI+UmVjaXBlczwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAncHJvamVjdG1hY2hpbmVzJyBwcm9qZWN0LmlkICV9Ij5NYWNoaW5lczwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAncHJvamVjdGxheWVycycgcHJvamVjdC5pZCAlfSI+TGF5ZXJzPC9hPjwvbGk+CisgICAgICA8bGkgY2xhc3M9Im5hdi1oZWFkZXIiPkV4dHJhIGNvbmZpZ3VyYXRpb248L2xpPgorICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAncHJvamVjdGNvbmYnIHByb2plY3QuaWQgJX0iPkJpdEJha2UgdmFyaWFibGVzPC9hPjwvbGk+CisgICAgPC91bD4KKyAgPC9kaXY+CisgIDxkaXYgY2xhc3M9InNwYW4xMCI+CisgICAgeyUgYmxvY2sgcHJvamVjdGluZm9tYWluICV9eyUgZW5kYmxvY2sgJX0KKyAgPC9kaXY+Cis8L2Rpdj4KKworeyUgZW5kYmxvY2sgJX0KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2V0YWJsZV9ib3R0b20uaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNldGFibGVfYm90dG9tLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UwMjNmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNldGFibGVfYm90dG9tLmh0bWwKQEAgLTAsMCArMSw5NCBAQAorICAgIDwvdGJvZHk+CisgICAgPC90YWJsZT4KKworPCEtLSBTaG93IHBhZ2luYXRpb24gY29udHJvbHMgLS0+Cis8ZGl2IGNsYXNzPSJwYWdpbmF0aW9uIHBhZ2luYXRpb24tY2VudGVyZWQiPgorICAgPGRpdiBjbGFzcz0icHVsbC1sZWZ0Ij4KKyAgIFNob3dpbmcge3tvYmplY3RzLnN0YXJ0X2luZGV4fX0gdG8ge3tvYmplY3RzLmVuZF9pbmRleH19IG91dCBvZiB7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fX0gZW50cmllcy4KKyAgIDwvZGl2PgorCisgICA8dWwgY2xhc3M9InBhZ2luYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBibG9jay1pbmxpbmUiPgoreyVpZiBvYmplY3RzLmhhc19wcmV2aW91cyAlfQorICA8bGk+PGEgaHJlZj0iamF2YXNjcmlwdDpyZWxvYWRfcGFyYW1zKHsncGFnZSc6e3tvYmplY3RzLnByZXZpb3VzX3BhZ2VfbnVtYmVyfX19KSI+JmxhcXVvOzwvYT48L2xpPgoreyVlbHNlJX0KKyAgPGxpIGNsYXNzPSJkaXNhYmxlZCI+PGEgaHJlZj0iIyI+JmxhcXVvOzwvYT48L2xpPgoreyVlbmRpZiV9Cit7JSBmb3IgaSBpbiBvYmplY3RzLnBhZ2VfcmFuZ2UgJX0KKyAgPGxpeyVpZiBpID09IG9iamVjdHMubnVtYmVyICV9IGNsYXNzPSJhY3RpdmUiIHslZW5kaWYlfT48YSBocmVmPSJqYXZhc2NyaXB0OnJlbG9hZF9wYXJhbXMoeydwYWdlJzp7e2l9fX0pIj57e2l9fTwvYT48L2xpPgoreyUgZW5kZm9yICV9Cit7JWlmIG9iamVjdHMuaGFzX25leHQlfQorICA8bGk+PGEgaHJlZj0iamF2YXNjcmlwdDpyZWxvYWRfcGFyYW1zKHsncGFnZSc6e3tvYmplY3RzLm5leHRfcGFnZV9udW1iZXJ9fX0pIj4mcmFxdW87PC9hPjwvbGk+Cit7JWVsc2UlfQorICA8bGkgY2xhc3M9ImRpc2FibGVkIj48YSBocmVmPSIjIj4mcmFxdW87PC9hPjwvbGk+Cit7JWVuZGlmJX0KKyAgPC91bD4KKyAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+CisgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBzdHlsZT0icGFkZGluZy10b3A6NXB4OyI+U2hvdyByb3dzOjwvc3Bhbj4KKyAgICA8c2VsZWN0IHN0eWxlPSJtYXJnaW4tdG9wOjVweDttYXJnaW4tYm90dG9tOjBweDsiIGNsYXNzPSJwYWdlc2l6ZSI+CisgICAgICB7JSB3aXRoICIxMCAyNSA1MCAxMDAgMTUwIiBhcyBsaXN0JX0KKyAgICAgICAgeyUgZm9yIGkgaW4gbGlzdC5zcGxpdCAlfQorICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ie3tpfX0iPnt7aX19PC9vcHRpb24+CisgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgeyUgZW5kd2l0aCAlfQorICAgIDwvc2VsZWN0PgorICAgPC9kaXY+Cis8L2Rpdj4KKworPCEtLSBVcGRhdGUgcGFnZSBkaXNwbGF5IHNldHRpbmdzIC0tPgorCis8c2NyaXB0PgorICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworCisgICAgLy8gd2UgbG9hZCBjb29raWVzIGZvciB0aGUgY29sdW1uIGRpc3BsYXkKKyAgICBzYXZlID0gJC5jb29raWUoJ19kaXNwbGF5Y29sc197e29iamVjdG5hbWV9fScpOworICAgIGlmIChzYXZlICE9IHVuZGVmaW5lZCkgeworICAgICAgICBzZXR0aW5nID0gc2F2ZS5zcGxpdCgnOycpOworICAgICAgICBmb3IgKCBpID0gMDsgaSA8IHNldHRpbmcubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChzZXR0aW5nW2ldLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICBzcGxpdGxpc3QgPSBzZXR0aW5nW2ldLnNwbGl0KCc6Jyk7CisgICAgICAgICAgICAgICAgaWQgPSBzcGxpdGxpc3RbMF0sIHYgPSBzcGxpdGxpc3RbMV07CisgICAgICAgICAgICAgICAgaWYgKHYgPT0gJ3RydWUnKSB7CisgICAgICAgICAgICAgICAgICAgICQoJy5jaGJ4dG9nZ2xlIycraWQpLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICQoJy5jaGJ4dG9nZ2xlIycraWQpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gbG9hZCBkYXRhIGZvciBudW1iZXIgb2YgZW50cmllcyB0byBiZSBkaXNwbGF5ZWQgb24gcGFnZQorICAgIGlmICh7e3JlcXVlc3QuR0VULmNvdW50fX0gIT0gIiIpIHsKKyAgICAgIHBhZ2VzaXplID0ge3tyZXF1ZXN0LkdFVC5jb3VudH19OworICAgIH0KKworICAgICQoJy5wYWdlc2l6ZSBvcHRpb24nKS5wcm9wKCdzZWxlY3RlZCcsIGZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoJ1t2YWx1ZT0iJyArIHBhZ2VzaXplICsgJyJdJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignc2VsZWN0ZWQnLCB0cnVlKTsKKworICAgICQoJy5jaGJ4dG9nZ2xlJykuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICAgIHNob3doaWRlVGFibGVDb2x1bW4oJCh0aGlzKS5hdHRyKCdpZCcpLCAkKHRoaXMpLmlzKCc6Y2hlY2tlZCcpKQorICAgIH0pOworCisgICAgLy90dXJuIGVkaXQgY29sdW1ucyBkcm9wZG93biBpbnRvIGEgbXVsdGktc2VsZWN0IG1lbnUKKyAgICAgJCgnLmRyb3Bkb3duLW1lbnUgaW5wdXQsIC5kcm9wZG93bi1tZW51IGxhYmVsJykuY2xpY2soZnVuY3Rpb24oZSkgeworICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAgIH0pOworCisgICAgLy9zaG93IHRvb2x0aXAgd2l0aCBhcHBsaWVkIGZpbHRlcgorICAgICQoJyNmaWx0ZXJlZCcpLnRvb2x0aXAoe2NvbnRhaW5lcjondGFibGUnLCBwbGFjZW1lbnQ6J2JvdHRvbScsIGRlbGF5OntoaWRlOjE1MDB9LCBodG1sOnRydWV9KTsKKworICAgIC8vcHJvZ3Jlc3MgYmFyIHRvb2x0aXAKKyAgICAkKCcucHJvZ3Jlc3MsIC5sZWFkIHNwYW4nKS50b29sdGlwKHtjb250YWluZXI6J3RhYmxlJywgcGxhY2VtZW50Oid0b3AnfSk7CisKKyAgICAkKCIucGFnZXNpemUiKS5jaGFuZ2UoZnVuY3Rpb24gKCkgeworICAgICAgICByZWxvYWRfcGFyYW1zKHsiY291bnQiOiQodGhpcykudmFsKCl9KTsKKyAgICB9KTsKK30pOworPC9zY3JpcHQ+CisKKzwhLS0gbW9kYWwgZmlsdGVyIGJveGVzIC0tPgorICAgeyUgZm9yIHRjIGluIHRhYmxlY29scyAlfXslIGlmIHRjLmZpbHRlciAlfXslIHdpdGggb2JqZWN0bmFtZT1vYmplY3RuYW1lIGY9dGMuZmlsdGVyICV9CisgICAgICAgIHslIGluY2x1ZGUgImZpbHRlcnNuaXBwZXQuaHRtbCIgJX0KKyAgIHslIGVuZHdpdGggJX17JSBlbmRpZiAlfSB7JSBlbmRmb3IgJX0KKzwhLS0gZW5kIG1vZGFscyAtLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNldGFibGVfdG9wLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXRhYmxlX3RvcC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZWRlNjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXRhYmxlX3RvcC5odG1sCkBAIC0wLDAgKzEsMjM5IEBACit7JSBsb2FkIHByb2plY3R0YWdzICV9Cis8IS0tIGNvbXBvbmVudCB0byBkaXNwbGF5IGEgZ2VuZXJpYyB0YWJsZSAtLT4KKyAgICA8c2NyaXB0PgorCisgICAgLy8KKyAgICAvLyBtb3N0IG9mIHRoZSBmb2xsb3dpbmcgamF2YXNjcmlwdCBpcyBmb3IgbWFuYWdpbmcgdGhlICdFZGl0IENvbHVtbnMnCisgICAgLy8gcG9wLXVwIGRpYWxvZyBhbmQgYWN0aW9ucy4gdGhlIGlkZWEgaXMgdGhhdCB0aGVyZSBhcmUgMiB0eXBlcworICAgIC8vIG9mIGFjdGlvbnM6IGltbWVkaWF0ZSAtIHBlcmZvcm1lZCB3aGlsZSB0aGUgZGlhbG9nIGlzIHN0aWxsCisgICAgLy8gdmlzaWJsZSAtIGhpZGUvc2hvdyBjb2x1bW5zLCBhbmQgZGVsYXllZCAtIHBlcmZvcm1lZCB3aGVuIHRoZQorICAgIC8vIGRpYWxvZyBiZWNvbWVzIGludmlzaWJsZSAtIGFueSByZXNvcnRpbmcgaWYgbmVjZXNzYXJ5LgorICAgIC8vCisgICAgLy8gV2hlbiB0aGUgZGlhbG9nIGlzIG9wZW4sIGFuIGludGVydmFsIHRpbWVyIGlzIHNldCB1cCB0bworICAgIC8vIGRldGVybWluZSBpZiB0aGUgZGlhbG9nIGlzIHN0aWxsIHZpc2libGUuIHdoZW4gdGhlIGRpYWxvZworICAgIC8vIGNsb3NlcyAtIGdvZXMgaW52aXNpYmxlLCB0aGUgZGVsYXllZCBhY3Rpb25zIGFyZSBwZXJmb3JtZWQuCisgICAgLy8KKyAgICAvLyB0aGUgaW50ZXJ2YWwgdGltZXIgYW5kIGludGVycnVwdCBoYW5kbGVyIGlzIGEgd2F5IG9mIHNpbXVsYXRpbmcKKyAgICAvLyBhbiBvbmNsb3NlIGV2ZW50LiB0aGVyZSBpcyBwcm9iYWJseSBhIHNpbXBsZXIgd2F5IHRvIGRvIHRoaXMKKyAgICAvLyBob3dldmVyIHRoZSBwb3AtdXAgd2luZG93IGlkIHdhcyBlbHVzaXZlLgorICAgIC8vCisKKyAgICB2YXIgZWRpdENvbFRpbWVyOworICAgIHZhciBlZGl0Q29sQWN0aW9uOworCisgICAgLy8KKyAgICAvLyB0aGlzIGlzIHRoZSB0YXJnZXQgZnVuY3Rpb24gb2YgdGhlIGludGVydmFsIHRpbWVvdXQuCisgICAgLy8gY2hlY2sgdG8gc2VlIGlmIHRoZSBkaWFsb2cgaXMgdmlzaWJsZS4gaWYgdGhlIGRpYWxvZworICAgIC8vIGhhcyBnb25lIGludmlzaWJsZSBzaW5jZSB0aGUgbGFzdCBjaGVjaywgdGFrZSBhbnkgZGVsYXllZAorICAgIC8vIGFjdGlvbnMgaW5kaWNhdGVkIGluIHRoZSBhY3Rpb24gbGlzdCBhbmQgY2xlYXIgdGhlIHRpbWVyLgorICAgIC8vCisKKyAgICBmdW5jdGlvbiBjaGVja1Zpc2libGUoICkgeworICAgICAgICBlZGl0Y29sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdlZGl0Y29sJyApOworICAgICAgICBpZiAoIGVkaXRjb2wub2Zmc2V0V2lkdGggPD0gMCApIHsKKyAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoIGVkaXRDb2xUaW1lciApOworICAgICAgICAgICAgZWRpdENvbFRpbWVyID0gZmFsc2U7CisgICAgICAgICAgICBoaWRlc2hvd0NvbHVtbnMoICk7CisgICAgICAgICAgICBlZGl0Q29sQWN0aW9uID0gWyBdOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gZmlsdGVyVGFibGVSb3dzKHRlc3QpIHsKKyAgICAgICAgaWYgKHRlc3QubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgdmFyIHIgPSB0ZXN0LnNwbGl0KC9bICxdKy8pLm1hcChmdW5jdGlvbiAoZSkgeyByZXR1cm4gbmV3IFJlZ0V4cChlLCAnaScpIH0pOworICAgICAgICAgICAgJCgndHIuZGF0YScpLm1hcCggZnVuY3Rpb24gKGksIGVsKSB7CisgICAgICAgICAgICAgICAgKCEgci5tYXAoZnVuY3Rpb24gKGopIHsgcmV0dXJuIGoudGVzdCgkKGVsKS5odG1sKCkpfSkucmVkdWNlKGZ1bmN0aW9uIChjLCBwKSB7IHJldHVybiBjICYmIHA7fSApKSA/ICQoZWwpLmhpZGUoKSA6ICQoZWwpLnNob3coKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgJCgndHIuZGF0YScpLnNob3coKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vCisgICAgLy8gZGV0ZXJtaW5lIHRoZSB2YWx1ZSBvZiB0aGUgaW5kaWNhdGVkIHVybCBhcmcuCisgICAgLy8gdGhpcyBpcyBuZWVkZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSByZXNvcnQKKyAgICAvLyBpcyBuZWNlc3NhcnkuIGl0IGxvb2tzIGxpa2UgYSBsb3Qgb2YgZ29ycCBzdHVmZgorICAgIC8vIGJ1dCBpdHMgYWN0dWFsbHkgcHJldHR5IHNpbXBsZS4KKyAgICAvLworCisgICAgZnVuY3Rpb24gZ2V0VVJMUGFyYW1ldGVyKCBuYW1lICkgeworICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KChuZXcgUmVnRXhwKCdbP3wmXScgKyBuYW1lICsgJz0nICsKKyAgICAgICAgICAnKFteJjtdKz8pKCZ8I3w7fCQpJykuZXhlYyhsb2NhdGlvbi5zZWFyY2gpfHxbLCIiXSlbMV0ucmVwbGFjZSgvXCsvZywKKyAgICAgICAgICAnJTIwJykpfHxudWxsCisgICAgfQorCisgICAgLy8KKyAgICAvLyB3aGVuIHRoZSBkaWFsb2cgYm94IGdvZXMgaW52aXNpYmxlCisgICAgLy8gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gaW50ZXJwcmV0CisgICAgLy8gdGhlIGFjdGlvbiBsaXN0IGFuZCB0YWtlIGFueSBkZWxheWVkIGFjdGlvbnMgbmVjZXNzYXJ5LgorICAgIC8vIHRoZSBlZGl0Q29sQWN0aW9uIGxpc3QgaXMgYSBoYXNoIHRhYmxlIHdpdGgKKyAgICAvLyB0aGUgY29sdW1uIG5hbWUgYXMgdGhlIGhhc2gga2V5LCB0aGUgaGFzaCB2YWx1ZQorICAgIC8vIGlzIGEgMiBlbGVtZW50IGxpc3QuIHRoZSBmaXJzdCBlbGVtZW50IGlzIGEgZmxhZworICAgIC8vIGluZGljYXRpbmcgd2hldGhlciB0aGUgY29sdW1uIGlzIG9uIG9yIG9mZi4gdGhlCisgICAgLy8gMm5kIGVsZW1lbnQgaXMgdGhlIHNvcnQgb3JkZXIgaW5kaWNhdG9yIGZvciB0aGUgY29sdW1uLgorICAgIC8vCisKKyAgICBmdW5jdGlvbiBoaWRlc2hvd0NvbHVtbnMoICkgeworICAgICAgICBmb3IoIHZhciBrIGluIGVkaXRDb2xBY3Rpb24gKSB7CisgICAgICAgICAgICBzaG93aGlkZURlbGF5ZWRUYWJsZUFjdGlvbiggaywgZWRpdENvbEFjdGlvblsgayBdWyAwIF0sIGVkaXRDb2xBY3Rpb25bIGsgXVsgMSBdKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vCisgICAgLy8gdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBwZXJmb3JtcyB0aGUgZGVsYXllZCB0YWJsZSBhY3Rpb25zCisgICAgLy8gbmFtZWx5IGFueSByZXNvcnRpbmcgaWYgbmVjZXNzYXJ5CisgICAgLy8KKworICAgIGZ1bmN0aW9uIHNob3doaWRlRGVsYXllZFRhYmxlQWN0aW9uKCBjbG5hbWUsIHNoLCBvcmRlcmtleSApIHsKKyAgICAgICAgaWYgKCAhc2ggKSB7CisgICAgICAgICAgICBwID0gZ2V0VVJMUGFyYW1ldGVyKCAib3JkZXJieSIgKS5zcGxpdCggIjoiIClbIDAgXTsKKyAgICAgICAgICAgIGlmICggcCA9PSBvcmRlcmtleSApIHsKKyAgICAgICAgICAgICAgICByZWxvYWRfcGFyYW1zKHsgJ29yZGVyYnknIDogJ3t7ZGVmYXVsdF9vcmRlcmJ5fX0nfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLworICAgIC8vIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgcGVyZm9ybXMgdGhlIGltbWVkaWF0ZSB0YWJsZSBhY3Rpb25zCisgICAgLy8gbmFtZWx5IGFueSBjb2x1bXMgdGhhdCBuZWVkIHRvIGJlIGhpZGRlbi9zaG93bgorICAgIC8vCisKKyAgICBmdW5jdGlvbiBzaG93aGlkZUltbWVkaWF0ZVRhYmxlQWN0aW9uKCBjbG5hbWUsIHNoLCBvcmRlcmtleSApIHsKKyAgICAgICAgaWYgKCBzaCApIHsKKyAgICAgICAgICAgICQoICcuJyArIGNsbmFtZSApLnNob3coIDEwMCApOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgJCggJy4nICsgY2xuYW1lICkuaGlkZSggMTAwICk7CisgICAgICAgIH0KKworCS8vIHNhdmUgY29va2llIGZvciBhbGwgY2hlY2tib3hlcworCXNhdmUgPSAnJzsKKwkkKCAnLmNoYnh0b2dnbGUnICkuZWFjaChmdW5jdGlvbiggKSB7CisgICAgICAgICAgICBpZiAoICQoIHRoaXMgKS5hdHRyKCAnaWQnICkgIT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIHNhdmUgKz0gJzsnICsgJCggdGhpcyApLmF0dHIoICdpZCcgKSArJzonKyAkKCB0aGlzICkuaXMoICc6Y2hlY2tlZCcgKQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKwkkLmNvb2tpZSggJ19kaXNwbGF5Y29sc197e29iamVjdG5hbWV9fScsIHNhdmUgKTsKKwlzYXZlID0gJyc7CisgICAgfQorCisgICAgLy8KKyAgICAvLyB0aGlzIGlzIHRoZSBvbmNsaWNrIGhhbmRsZXIgZm9yIGFsbCBvZiB0aGUgY2hlY2sgYm94CisgICAgLy8gaXRlbXMgaW4gZWRpdCBjb2x1bW5zIGRpYWxvZworICAgIC8vCisKKyAgICBmdW5jdGlvbiBzaG93aGlkZVRhYmxlQ29sdW1uKCBjbG5hbWUsIHNoLCBvcmRlcmtleSApIHsKKyAgICAgICAgZWRpdGNvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnZWRpdGNvbCcgKTsKKyAgICAgICAgaWYgKCBlZGl0Y29sLm9mZnNldFdpZHRoIDw9IDAgKSB7CisKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyB0aGlzIHBhdGggaXMgdGFrZW4gd2hlbiB0aGUgcGFnZSBpcyBmaXJzdAorICAgICAgICAgICAgLy8gZ2V0dGluZyBpbml0aWFsaXplZCAtIG5vIGRpYWxvZyB2aXNpYmxlLAorICAgICAgICAgICAgLy8gcGVyZm9ybSBib3RoIHRoZSBpbW1lZGlhdGUgYW5kIGRlbGF5ZWQgYWN0aW9ucworICAgICAgICAgICAgLy8KKworICAgICAgICAgICAgc2hvd2hpZGVJbW1lZGlhdGVUYWJsZUFjdGlvbiggY2xuYW1lLCBzaCwgb3JkZXJrZXkgKTsKKyAgICAgICAgICAgIHNob3doaWRlRGVsYXllZFRhYmxlQWN0aW9uKCBjbG5hbWUsIHNoLCBvcmRlcmtleSApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICggIWVkaXRDb2xUaW1lciApIHsKKworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIHdlIGRvbid0IGhhdmUgYSB0aW1lciBhY3RpdmUgc28gc2V0IG9uZSB1cAorICAgICAgICAgICAgLy8gYW5kIGNsZWFyIHRoZSBhY3Rpb24gbGlzdAorICAgICAgICAgICAgLy8KKworICAgICAgICAgICAgZWRpdENvbFRpbWVyID0gc2V0SW50ZXJ2YWwoIGNoZWNrVmlzaWJsZSwgMjUwICk7CisgICAgICAgICAgICBlZGl0Q29sQWN0aW9uID0gWyBdOworICAgICAgICB9CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gc2F2ZSB0aGUgYWN0aW9uIHRvIGJlIHRha2VuIHdoZW4gdGhlIGRpYWxvZyBjbG9zZXMKKyAgICAgICAgLy8KKworICAgICAgICBlZGl0Q29sQWN0aW9uWyBjbG5hbWUgXSA9IFsgc2gsIG9yZGVya2V5IF07CisgICAgICAgIHNob3doaWRlSW1tZWRpYXRlVGFibGVBY3Rpb24oIGNsbmFtZSwgc2gsIG9yZGVya2V5ICk7CisgICAgfQorCisgICAgPC9zY3JpcHQ+CisKKzwhLS0gY29udHJvbCBoZWFkZXIgLS0+Cis8ZGl2IGNsYXNzPSJuYXZiYXIiPgorICAgIDxkaXYgY2xhc3M9Im5hdmJhci1pbm5lciI+CisgICAgICAgIDxmb3JtIGNsYXNzPSJuYXZiYXItc2VhcmNoIGlucHV0LWFwcGVuZCBwdWxsLWxlZnQiIGlkPSJzZWFyY2hmb3JtIj4KKyAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iaW5wdXQteHhsYXJnZSIgaWQ9InNlYXJjaCIgbmFtZT0ic2VhcmNoIiB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iU2VhcmNoIHslaWYgb2JqZWN0X3NlYXJjaF9kaXNwbGF5ICV9e3tvYmplY3Rfc2VhcmNoX2Rpc3BsYXl9fXslZWxzZSV9e3tvYmplY3RuYW1lfX17JWVuZGlmJX0iIHZhbHVlPSJ7JWlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfXt7cmVxdWVzdC5HRVQuc2VhcmNofX17JSBlbmRpZiAlfSIvPnslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfTxhIGhyZWY9ImphdmFzY3JpcHQ6JCgnI3NlYXJjaCcpLnZhbCgnJyk7c2VhcmNoZm9ybS5zdWJtaXQoKSIgY2xhc3M9ImFkZC1vbiBidG4iIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9Imljb24tcmVtb3ZlIj48L2k+PC9hPnslZW5kaWYlfQorICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ib3JkZXJieSIgdmFsdWU9Int7cmVxdWVzdC5HRVQub3JkZXJieX19Ij4KKyAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InBhZ2UiIHZhbHVlPSIxIj4KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgaWQ9InNlYXJjaC1idXR0b24iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlYXJjaCI+U2VhcmNoPC9idXR0b24+CisgICAgICAgIDwvZm9ybT4KKyAgICAgICAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+Cit7JSBpZiB0YWJsZWNvbHMgJX0KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJ0bi1ncm91cCI+CisgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iZWRpdC1jb2x1bW5zLWJ1dHRvbiIgY2xhc3M9ImJ0biBkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+RWRpdCBjb2x1bW5zCisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXJldCI+PC9zcGFuPgorICAgICAgICAgICAgICAgIDwvYnV0dG9uPgorPCEtLQorCXt7dGFibGVjb2xzfHNvcnRjb2xzfX0KKy0tPgorICAgICAgICAgICAgICAgIDx1bCBpZD0nZWRpdGNvbCcgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAgICAgICAgICAgeyUgZm9yIGkgaW4gdGFibGVjb2xzfHNvcnRjb2xzICV9CisgICAgICAgICAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCB7JSBpZiBub3QgaS5jbGNsYXNzICV9IGNsYXNzPSJjaGVja2JveCBtdXRlZCIgeyVlbHNlJX0gY2xhc3M9ImNoZWNrYm94IiB7JWVuZGlmJX0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBjbGFzcz0iY2hieHRvZ2dsZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWYgaS5jbGNsYXNzICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD0ie3tpLmNsY2xhc3N9fSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJjdHt7aS5uYW1lfX0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiBub3QgaS5oaWRkZW4gJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPSJjaGVja2VkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyVlbmRpZiV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmNsaWNrPSJzaG93aGlkZVRhYmxlQ29sdW1uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignaWQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmlzKCc6Y2hlY2tlZCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIGkub3JkZXJpY29uICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3t7aS5vcmRlcmtleX19JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyVlbHNlJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQgZGlzYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0vPiAgIHt7aS5uYW1lfX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPC9kaXY+Cit7JSBlbmRpZiAlfQorICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaXZpZGVyLXZlcnRpY2FsIj48L3NwYW4+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBzdHlsZT0icGFkZGluZy10b3A6NXB4OyI+U2hvdyByb3dzOjwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8c2VsZWN0IHN0eWxlPSJtYXJnaW4tdG9wOjVweDttYXJnaW4tYm90dG9tOjBweDsiIGNsYXNzPSJwYWdlc2l6ZSI+CisgICAgICAgICAgICAgICAgICB7JSB3aXRoICIxMCAyNSA1MCAxMDAgMTUwIiBhcyBsaXN0JX0KKyAgICAgICAgICAgICAgICAgICAgeyUgZm9yIGkgaW4gbGlzdC5zcGxpdCAlfQorICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ie3tpfX0iPnt7aX19PC9vcHRpb24+CisgICAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgICAgeyUgZW5kd2l0aCAlfQorICAgICAgICAgICAgICAgIDwvc2VsZWN0PgorICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgPC9kaXY+IDwhLS0gbmF2YmFyLWlubmVyIC0tPgorPC9kaXY+CisKKzwhLS0gdGhlIGFjdHVhbCByb3dzIG9mIHRoZSB0YWJsZSAtLT4KKyAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlc29ydGVyIiBpZD0ib3RhYmxlIj4KKyAgICA8dGhlYWQ+CisgICAgICAgIDwhLS0gVGFibGUgaGVhZGVyIHJvdzsgZ2VuZXJhdGVkIGZyb20gInRhYmxlY29scyIgZW50cnkgaW4gdGhlIGNvbnRleHQgZGljdCAtLT4KKyAgICAgICAgPHRyPgorICAgICAgICAgICAgeyUgZm9yIHRjIGluIHRhYmxlY29scyAlfTx0aCBjbGFzcz0ieyVpZiB0Yy5kY2xhc3MlfXt7dGMuZGNsYXNzfX17JWVuZGlmJX0geyUgaWYgdGMuY2xjbGFzcyAlfXt7dGMuY2xjbGFzc319eyUgZW5kaWYgJX0iPgorICAgICAgICAgICAgICAgIHslaWYgdGMucWhlbHAlfTxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJ7e3RjLnFoZWxwfX0iPjwvaT57JWVuZGlmJX0KKyAgICAgICAgICAgICAgICB7JWlmIHRjLm9yZGVyZmllbGQlfTxhIHslaWYgdGMub3JkZXJpY29uJX0gY2xhc3M9InNvcnRlZCIgeyVlbmRpZiV9aHJlZj0iamF2YXNjcmlwdDpyZWxvYWRfcGFyYW1zKHsncGFnZSc6IDEsICdvcmRlcmJ5JyA6ICd7e3RjLm9yZGVyZmllbGR9fScgfSkiPnt7dGMubmFtZX19PC9hPnslZWxzZSV9PHNwYW4gY2xhc3M9Im11dGVkIj57e3RjLm5hbWV9fTwvc3Bhbj57JWVuZGlmJX0KKyAgICAgICAgICAgICAgICB7JWlmIHRjLm9yZGVyaWNvbiV9IDxpIGNsYXNzPSJpY29uLWNhcmV0LXt7dGMub3JkZXJpY29ufX0iPjwvaT57JWVuZGlmJX0KKyAgICAgICAgICAgICAgICB7JWlmIHRjLmZpbHRlciV9PGRpdiBjbGFzcz0iYnRuLWdyb3VwIHB1bGwtcmlnaHQiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZmlsdGVyX3t7dGMuZmlsdGVyLmNsYXNzfX0iIHJvbGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tbWluaSB7JWlmIHJlcXVlc3QuR0VULmZpbHRlciV9e3t0Yy5maWx0ZXIub3B0aW9uc3xmaWx0ZXJlZF9pY29uOnJlcXVlc3QuR0VULmZpbHRlcn19IHslZW5kaWYlfSIgeyVpZiByZXF1ZXN0LkdFVC5maWx0ZXIgYW5kIHRjLmZpbHRlci5vcHRpb25zfGZpbHRlcmVkX3Rvb2x0aXA6cmVxdWVzdC5HRVQuZmlsdGVyICV9IHRpdGxlPSI8cD57e3RjLmZpbHRlci5vcHRpb25zfGZpbHRlcmVkX3Rvb2x0aXA6cmVxdWVzdC5HRVQuZmlsdGVyfX08L3A+PHA+PGEgY2xhc3M9J2J0biBidG4tc21hbGwgYnRuLXByaW1hcnknIGhyZWY9amF2YXNjcmlwdDpyZWxvYWRfcGFyYW1zKHsnZmlsdGVyJzonJ30pPlNob3cgYWxsIHslIGlmIGZpbHRlcl9zZWFyY2hfZGlzcGxheSAlfXt7ZmlsdGVyX3NlYXJjaF9kaXNwbGF5fX17JSBlbHNlICV9e3tvYmplY3RuYW1lfX17JSBlbmRpZiAlfTwvYT48L3A+IiB7JWVuZGlmJX0gZGF0YS10b2dnbGU9Im1vZGFsIj4gPGkgY2xhc3M9Imljb24tZmlsdGVyIGZpbHRlcmVkIj48L2k+IDwvYT4KKyAgICAgICAgICAgICAgICA8L2Rpdj57JWVuZGlmJX0KKyAgICAgICAgICAgIDwvdGg+eyUgZW5kZm9yICV9CisgICAgICAgIDwvdHI+CisgICAgPC90aGVhZD4KKyAgICA8dGJvZHk+CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNldGFibGVfdG9wX2xheWVycy5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2V0YWJsZV90b3BfbGF5ZXJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIyMDkxYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNldGFibGVfdG9wX2xheWVycy5odG1sCkBAIC0wLDAgKzEsNSBAQAoreyUgZXh0ZW5kcyAiYmFzZXRhYmxlX3RvcC5odG1sIiAlfQorCit7JWJsb2NrIGN1c3RvbWJ1dHRvbnMgJX0KKyAgICA8YSBjbGFzcz0iYnRuIiBocmVmPSJ7JSB1cmwgJ2ltcG9ydGxheWVyJyBwcm9qZWN0LmlkICV9IiBzdHlsZT0ibWFyZ2luLXJpZ2h0OjVweDsiPkltcG9ydCBsYXllcjwvYT4KK3slZW5kYmxvY2slfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2JmaWxlLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmZpbGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2Y1OTQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2JmaWxlLmh0bWwKQEAgLTAsMCArMSwyNCBAQAoreyUgZXh0ZW5kcyAiYmFzZWJ1aWxkcGFnZS5odG1sIiAlfQorCit7JSBibG9jayBwYWdldGl0bGUgJX1GaWxlcyBmb3IgcGFja2FnZSB7e29iamVjdHMuMC5icGFja2FnZS5uYW1lfX0geyUgZW5kYmxvY2sgJX0KK3slIGJsb2NrIHBhZ2V0YWJsZSAlfQorICAgIHslIGlmIG5vdCBvYmplY3RzICV9CisgICAgICAgIDxwPk5vIGZpbGVzIHdlcmUgcmVjb3JkZWQgZm9yIHRoaXMgcGFja2FnZSE8L3A+CisgICAgeyUgZWxzZSAlfQorCisgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICA8dGg+TmFtZTwvdGg+CisgICAgICAgICAgICA8dGg+U2l6ZSAoQnl0ZXMpPC90aD4KKyAgICAgICAgICAgIDwvdHI+CisKKyAgICAgICAgICAgIHslIGZvciBmaWxlIGluIG9iamVjdHMgJX0KKworICAgICAgICAgICAgPHRyIGNsYXNzPSJkYXRhIj4KKyAgICAgICAgICAgIDx0ZD57e2ZpbGUucGF0aH19PC90ZD4KKyAgICAgICAgICAgIDx0ZD57e2ZpbGUuc2l6ZX19PC90ZD4KKworICAgICAgICAgICAgeyUgZW5kZm9yICV9CisKKyAgICB7JSBlbmRpZiAlfQorCit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2JwYWNrYWdlLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnBhY2thZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzc1ZmVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2JwYWNrYWdlLmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKK3slIGV4dGVuZHMgImJhc2VidWlsZHBhZ2UuaHRtbCIgJX0KKworeyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCit7JSBibG9jayBsb2NhbGJyZWFkY3J1bWIgJX0KKzxsaT5QYWNrYWdlczwvbGk+Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBuYXYtcGFja2FnZXMgJX0KKyAgPGxpIGNsYXNzPSJhY3RpdmUiPjxhIGhyZWY9InslIHVybCAncGFja2FnZXMnIGJ1aWxkLnBrICV9Ij5QYWNrYWdlczwvYT48L2xpPgoreyUgZW5kYmxvY2sgJX0KKworeyUgYmxvY2sgYnVpbGRpbmZvbWFpbiAlfQorPGRpdiBjbGFzcz0ic3BhbjEwIj4KKworeyUgaWYgbm90IHJlcXVlc3QuR0VULmZpbHRlciBhbmQgbm90IHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgbm90IG9iamVjdHMucGFnaW5hdG9yLmNvdW50ICV9CisKKzwhLS0gRW1wdHkgLSBubyBkYXRhIGluIGRhdGFiYXNlIC0tPgorPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICAgIDxoMT4KKyAgICAgICAgUGFja2FnZXMKKyAgICA8L2gxPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIGxlYWQiPgorICAgIDxzdHJvbmc+Tm8gcGFja2FnZXMgd2VyZSBidWlsdC48L3N0cm9uZz4gSG93IGRpZCB0aGlzIGhhcHBlbj8gV2VsbCwgQml0QmFrZSByZXVzZXMgYXMgbXVjaCBzdHVmZiBhcyBwb3NzaWJsZS4KKyAgICBJZiBhbGwgb2YgdGhlIHBhY2thZ2VzIG5lZWRlZCB3ZXJlIGFscmVhZHkgYnVpbHQgYW5kIGF2YWlsYWJsZSBpbiB5b3VyIGJ1aWxkIGluZnJhc3RydWN0dXJlLCBCaXRCYWtlCisgICAgd2lsbCBub3QgcmVidWlsZCBhbnkgb2YgdGhlbS4gVGhpcyBtaWdodCBiZSBzbGlnaHRseSBjb25mdXNpbmcsIGJ1dCBpdCBkb2VzIG1ha2UgZXZlcnl0aGluZyBmYXN0ZXIuCis8L2Rpdj4KKworeyUgZWxzZSAlfQorCis8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+CisgIDxoMT4KKyAgeyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+IDAgICV9CisgICAgICB7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fX0gcGFja2FnZXt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR8cGx1cmFsaXplfX0gZm91bmQKKyAgeyVlbGlmIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCV9CisgICAgICBObyBwYWNrYWdlcyBmb3VuZAorICB7JWVsc2UlfQorICAgICAgUGFja2FnZXMKKyAgeyVlbmRpZiV9CisgIDwvaDE+Cis8L2Rpdj4KKworICB7JSBpZiBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgICA8ZGl2IGNsYXNzPSJhbGVydCI+CisgICAgICAgIDxmb3JtIGNsYXNzPSJuby1yZXN1bHRzIGlucHV0LWFwcGVuZCIgaWQ9InNlYXJjaGZvcm0iPgorICAgICAgICAgICAgPGlucHV0IGlkPSJzZWFyY2giIG5hbWU9InNlYXJjaCIgY2xhc3M9ImlucHV0LXh4bGFyZ2UiIHR5cGU9InRleHQiIHZhbHVlPSJ7e3JlcXVlc3QuR0VULnNlYXJjaH19Ii8+eyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9PGEgaHJlZj0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIiBjbGFzcz0iYWRkLW9uIGJ0biIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iaWNvbi1yZW1vdmUiPjwvaT48L2E+eyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2VhcmNoIj5TZWFyY2g8L2J1dHRvbj4KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tbGluayIgb25jbGljaz0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIj5TaG93IGFsbCBwYWNrYWdlczwvYnV0dG9uPgorICAgICAgICA8L2Zvcm0+CisgICAgICA8L2Rpdj4KKyAgPC9kaXY+CisKKyAgeyUgZWxzZSAlfQorICB7JSBpbmNsdWRlICJiYXNldGFibGVfdG9wLmh0bWwiICV9CisKKyAgICB7JSBmb3IgcGFja2FnZSBpbiBvYmplY3RzICV9CisKKyAgICA8dHIgY2xhc3M9ImRhdGEiPgorCisgICAgICAgIDwhLS0gUGFja2FnZSAtLT4KKyAgICAgICAgPHRkIGNsYXNzPSJwYWNrYWdlX25hbWUiPjxhIGhyZWY9InslIHVybCAicGFja2FnZV9idWlsdF9kZXRhaWwiIGJ1aWxkLnBrIHBhY2thZ2UucGsgJX0iPnt7cGFja2FnZS5uYW1lfX08L2E+PC90ZD4KKyAgICAgICAgPCEtLSBQYWNrYWdlIFZlcnNpb24gLS0+CisgICAgICAgIDx0ZCBjbGFzcz0icGFja2FnZV92ZXJzaW9uIj57JWlmIHBhY2thZ2UudmVyc2lvbiV9PGEgaHJlZj0ieyUgdXJsICJwYWNrYWdlX2J1aWx0X2RldGFpbCIgYnVpbGQucGsgcGFja2FnZS5wayAlfSI+e3twYWNrYWdlLnZlcnNpb259fS17e3BhY2thZ2UucmV2aXNpb259fTwvYT57JWVuZGlmJX08L3RkPgorICAgICAgICA8IS0tIFBhY2thZ2UgU2l6ZSAtLT4KKyAgICAgICAgPHRkIGNsYXNzPSJzaXplIHNpemVjb2wiPnt7cGFja2FnZS5zaXplfGZpbHRlcmVkX2ZpbGVzaXplZm9ybWF0fX08L3RkPgorICAgICAgICA8IS0tIExpY2Vuc2UgLS0+CisgICAgICAgIDx0ZCBjbGFzcz0ibGljZW5zZSI+e3twYWNrYWdlLmxpY2Vuc2V9fTwvdGQ+CisKKyAgICAgICAgeyVpZiBwYWNrYWdlLnJlY2lwZSV9CisgICAgICAgICAgICA8IS0tIFJlY2lwZSAtLT4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX19uYW1lIj48YSBocmVmPSJ7JSB1cmwgInJlY2lwZSIgYnVpbGQucGsgcGFja2FnZS5yZWNpcGUucGsgJX0iPnt7cGFja2FnZS5yZWNpcGUubmFtZX19PC9hPjwvdGQ+CisgICAgICAgICAgICA8IS0tIFJlY2lwZSBWZXJzaW9uIC0tPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfX3ZlcnNpb24iPjxhIGhyZWY9InslIHVybCAicmVjaXBlIiBidWlsZC5wayBwYWNrYWdlLnJlY2lwZS5wayAlfSI+e3twYWNrYWdlLnJlY2lwZS52ZXJzaW9ufX08L2E+PC90ZD4KKworICAgICAgICAgICAgPCEtLSBMYXllciAtLT4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX19sYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSI+e3twYWNrYWdlLnJlY2lwZS5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWV9fTwvdGQ+CisgICAgICAgICAgICA8IS0tIExheWVyIGJyYW5jaCAtLT4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX19sYXllcl92ZXJzaW9uX19icmFuY2giPnt7cGFja2FnZS5yZWNpcGUubGF5ZXJfdmVyc2lvbi5icmFuY2h9fTwvdGQ+CisgICAgICAgICAgICA8IS0tIExheWVyIGNvbW1pdCAtLT4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX19sYXllcl92ZXJzaW9uX19sYXllcl9fY29tbWl0Ij4KKyAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIgorICAgICAgICAgICAgICAgICAgICBkYXRhLWNvbnRlbnQ9Ijx1bCBjbGFzcz0ndW5zdHlsZWQnPgorICAgICAgICAgICAgICAgICAgICAgIDxsaT57e3BhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24uY29tbWl0fX08L2xpPgorICAgICAgICAgICAgICAgICAgICA8L3VsPiI+CisgICAgICAgICAgICAgICAgICAgIHt7cGFja2FnZS5yZWNpcGUubGF5ZXJfdmVyc2lvbi5jb21taXR8dHJ1bmNhdGVjaGFyczoxM319CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDwhLS0gTGF5ZXIgZGlyZWN0b3J5IC0tPgorICAgICAgICB7JWVsc2UlfQorICAgICAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfX25hbWUiPjwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9fdmVyc2lvbiI+PC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX19sYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSI+PC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX19sYXllcl92ZXJzaW9uX19icmFuY2giPjwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX2NvbW1pdCI+PC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX19sYXllcl92ZXJzaW9uX19sb2NhbF9wYXRoIj48L3RkPgorICAgICAgICB7JWVuZGlmJX0KKworICAgIDwvdHI+CisgICAgeyUgZW5kZm9yICV9CisKKyAgeyUgaW5jbHVkZSAiYmFzZXRhYmxlX2JvdHRvbS5odG1sIiAlfQorICB7JSBlbmRpZiAlfSB7IyBvYmplY3RzLnBhZ2luYXRvci5jb3VudCAjfQoreyUgZW5kaWYgJX0geyMgRW1wdHkgI30KKzwvZGl2PgoreyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9icnRhcmdldHMuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9icnRhcmdldHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWJkMDU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2JydGFyZ2V0cy5odG1sCkBAIC0wLDAgKzEsMjAgQEAKKzxzcGFuIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIgorICAgIHslIGlmIGJ1aWxkcmVxdWVzdC5icnRhcmdldF9zZXQuYWxsLmNvdW50ID4gMSAlfQorICAgICAgICB0aXRsZT0iVGFyZ2V0czoKKyAgICAgICAgeyUgZm9yIHRhcmdldCBpbiBidWlsZHJlcXVlc3QuYnJ0YXJnZXRfc2V0LmFsbCAlfQorICAgICAgICAgICAgeyUgaWYgdGFyZ2V0LnRhc2sgJX0KKyAgICAgICAgICAgICAgICB7e3RhcmdldC50YXJnZXR9fTp7e3RhcmdldC50YXNrfX0KKyAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICB7e3RhcmdldC50YXJnZXR9fQorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgeyVlbmRmb3IlfSIKKyAgICB7JWVuZGlmJX0+CisgICAgeyUgaWYgYnVpbGRyZXF1ZXN0LmJydGFyZ2V0X3NldC5hbGwuMC50YXNrICV9CisgICAgICAgIHt7YnVpbGRyZXF1ZXN0LmJydGFyZ2V0X3NldC5hbGwuMC50YXJnZXR9fTp7e2J1aWxkcmVxdWVzdC5icnRhcmdldF9zZXQuYWxsLjAudGFza319CisgICAgeyUgZWxzZSAlfQorICAgICAgICAge3tidWlsZHJlcXVlc3QuYnJ0YXJnZXRfc2V0LmFsbC4wLnRhcmdldH19CisgICAgeyUgZW5kaWYgJX0KKyAgICB7JSBpZiBidWlsZHJlcXVlc3QuYnJ0YXJnZXRfc2V0LmFsbC5jb3VudCA+IDEgJX0KKyAgICAgICAgKCsge3tidWlsZHJlcXVlc3QuYnJ0YXJnZXRfc2V0LmFsbC5jb3VudHxhZGQ6Ii0xIn19KQorICAgIHslIGVuZGlmICV9Cis8L3NwYW4+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnVpbGRkYXNoYm9hcmQuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9idWlsZGRhc2hib2FyZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYjhlMzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnVpbGRkYXNoYm9hcmQuaHRtbApAQCAtMCwwICsxLDMwNyBAQAoreyUgZXh0ZW5kcyAiYmFzZWJ1aWxkcGFnZS5odG1sIiAlfQoreyUgbG9hZCBodW1hbml6ZSAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCit7JSBibG9jayBwYXJlbnRicmVhZGNydW1iICV9Cit7e2J1aWxkLmdldF9zb3J0ZWRfdGFyZ2V0X2xpc3QuMC50YXJnZXR9fSB7JWlmIGJ1aWxkLnRhcmdldF9zZXQuYWxsLmNvdW50ID4gMSV9KCsge3tidWlsZC50YXJnZXRfc2V0LmFsbC5jb3VudHxhZGQ6Ii0xIn19KXslZW5kaWYlfSB7e2J1aWxkLm1hY2hpbmV9fSAoe3tidWlsZC5jb21wbGV0ZWRfb258ZGF0ZToiZC9tL3kgSDppIn19KQoreyUgZW5kYmxvY2sgJX0KKworeyUgYmxvY2sgYnVpbGRpbmZvbWFpbiAlfQorPCEtLSBwYWdlIHRpdGxlIC0tPgorPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW4xMCI+CisgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICAgICA8aDE+e3tidWlsZC50YXJnZXRfc2V0LmFsbHxkaWN0c29ydDoidGFyZ2V0Inxqb2luOiIsICJ9fSB7e2J1aWxkLm1hY2hpbmV9fTwvaDE+CisgPC9kaXY+Cis8L2Rpdj4KKworPCEtLSBidWlsZCByZXN1bHQgYmFyIC0tPgorPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW4xMCBwdWxsLXJpZ2h0Ij4KKyAgPGRpdiBjbGFzcz0iYWxlcnQgeyVpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLlNVQ0NFRURFRCV9YWxlcnQtc3VjY2Vzc3slZWxpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLkZBSUxFRCV9YWxlcnQtZXJyb3J7JWVsc2UlfWFsZXJ0LWluZm97JWVuZGlmJX0iPgorICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCBsZWFkIj4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwdWxsLWxlZnQiPjxzdHJvbmc+CisgICAgICAgICAgICAgICAgeyVpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLlNVQ0NFRURFRCV9Q29tcGxldGVkeyVlbGlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuRkFJTEVEJX1GYWlsZWR7JWVsc2UlfXslZW5kaWYlfQorICAgICAgICAgICAgICA8L3N0cm9uZz4gb24KKyAgICAgICAgICAgIHt7YnVpbGQuY29tcGxldGVkX29ufGRhdGU6ImQvbS95IEg6aSJ9fQorPC9zcGFuPgoreyUgaWYgIGJ1aWxkLndhcm5pbmdzLmNvdW50IG9yIGJ1aWxkLmVycm9ycy5jb3VudCAlfQorJm5ic3A7d2l0aAoreyUgZW5kaWYgJX0KK3slaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQgb3IgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5GQUlMRUQgJX0KK3slIGlmICBidWlsZC5lcnJvcnMuY291bnQgJX0KKyAgICAgPHNwYW4gPiA8aSBjbGFzcz0iaWNvbi1taW51cy1zaWduIHJlZCI+PC9pPjxzdHJvbmc+PGEgaHJlZj0iI2Vycm9ycyIgY2xhc3M9ImVycm9yIHNob3ctZXJyb3JzIj4ge3tidWlsZC5lcnJvcnMuY291bnR9fSBlcnJvcnt7YnVpbGQuZXJyb3JzLmNvdW50fHBsdXJhbGl6ZX19PC9hPjwvc3Ryb25nPjwvc3Bhbj4KK3slIGVuZGlmICV9Cit7JSBpZiAgYnVpbGQud2FybmluZ3MuY291bnQgJX0KK3slIGlmICBidWlsZC5lcnJvcnMuY291bnQgJX0KKyAgICBhbmQKK3slIGVuZGlmICV9CisgICAgPHNwYW4gPiA8aSBjbGFzcz0iaWNvbi13YXJuaW5nLXNpZ24geWVsbG93Ij48L2k+PHN0cm9uZz48YSBocmVmPSIjd2FybmluZ3MiIGNsYXNzPSJ3YXJuaW5nIHNob3ctd2FybmluZ3MiPiB7e2J1aWxkLndhcm5pbmdzLmNvdW50fX0gd2FybmluZ3t7YnVpbGQud2FybmluZ3MuY291bnR8cGx1cmFsaXplfX08L2E+PC9zdHJvbmc+PC9zcGFuPgoreyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwdWxsLXJpZ2h0Ij5CdWlsZCB0aW1lOiA8YSBocmVmPSJ7JSB1cmwgJ2J1aWxkdGltZScgYnVpbGQucGsgJX0iPnt7IGJ1aWxkLnRpbWVzcGVudF9zZWNvbmRzfHNlY3RvaG1zIH19PC9hPgorICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biB7JWlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEJX1idG4tc3VjY2Vzc3slZWxzZSV9YnRuLWRhbmdlcnslZW5kaWYlfSBwdWxsLXJpZ2h0IGxvZyIgaHJlZj0ieyUgdXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQuaWQgImNvb2tlcmxvZyIgYnVpbGQuaWQgJX0iPkRvd25sb2FkIGJ1aWxkIGxvZzwvYT4KKyAgICAgICAgICAgIDwvc3Bhbj4KKworeyVlbmRpZiV9CisgICAgPC9kaXY+CisgICAgeyUgaWYgYnVpbGQudG9hc3Rlcl9leGNlcHRpb25zLmNvdW50ID4gMCAlfQorICAgIDxkaXYgY2xhc3M9InJvdyI+CisgICAgICAgIDxzbWFsbCBjbGFzcz0icHVsbC1yaWdodCI+CisgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgZ2V0LWhlbHAtYmx1ZSIgdGl0bGU9IiIgZGF0YS1vcmlnaW5hbC10aXRsZT0iVG9hc3RlciBleGNlcHRpb25zIGRvIG5vdCBhZmZlY3QgeW91ciBidWlsZDogb25seSB0aGUgb3BlcmF0aW9uIG9mIFRvYXN0ZXIiPjwvaT4KKyAgICAgICAgPGEgY2xhc3M9InNob3ctZXhjZXB0aW9ucyIgaHJlZj0iI2V4Y2VwdGlvbnMiPlRvYXN0ZXIgdGhyZXcge3tidWlsZC50b2FzdGVyX2V4Y2VwdGlvbnMuY291bnR9fSBleGNlcHRpb257e2J1aWxkLnRvYXN0ZXJfZXhjZXB0aW9ucy5jb3VudHxwbHVyYWxpemV9fTwvYT4KKyAgICA8L3NtYWxsPgorICAgIDwvZGl2PgorICAgIHslIGVuZGlmICV9CisgIDwvZGl2PgorPC9kaXY+CisKK3slIGlmIGJ1aWxkLmVycm9ycy5jb3VudCAlfQorPGRpdiBjbGFzcz0iYWNjb3JkaW9uIHNwYW4xMCBwdWxsLXJpZ2h0IiBpZD0iZXJyb3JzIj4KKyAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWdyb3VwIj4KKyAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24taGVhZGluZyI+CisgICAgICAgICAgICA8YSBjbGFzcz0iYWNjb3JkaW9uLXRvZ2dsZSBlcnJvciB0b2dnbGUtZXJyb3JzIj4KKyAgICAgICAgIDxoMiBpZD0iZXJyb3ItdG9nZ2xlIj4KKyAgICAgICAgICAgPGkgY2xhc3M9Imljb24tbWludXMtc2lnbiI+PC9pPgorICAgICAgICAgICB7e2J1aWxkLmVycm9ycy5jb3VudH19IGVycm9ye3tidWlsZC5lcnJvcnMuY291bnR8cGx1cmFsaXplfX0KKyAgICAgICAgIDwvaDI+CisgICAgICA8L2E+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWJvZHkgY29sbGFwc2UgaW4iIGlkPSJjb2xsYXBzZS1lcnJvcnMiPgorICAgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWlubmVyIj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjEwIj4KKyAgICAgICAgICB7JSBmb3IgZXJyb3IgaW4gbG9nbWVzc2FnZXMgJX17JSBpZiBlcnJvci5sZXZlbCA9PSAyICV9CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1lcnJvciI+CisgICAgICAgICAgICAgIDxwcmU+e3tlcnJvci5tZXNzYWdlfX08L3ByZT4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgIDwvZGl2PgorPC9kaXY+Cit7JSBlbmRpZiAlfQorCit7JWlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEJX0KKzwhLS0gYnVpbHQgaW1hZ2VzIC0tPgoreyUgaWYgaGFzSW1hZ2VzICV9Cis8ZGl2IGNsYXNzPSJyb3ctZmx1aWQgc3BhbjEwIHB1bGwtcmlnaHQiPgorICAgIDxoMj5JbWFnZXM8L2gyPgorICAgIHslIGZvciB0YXJnZXQgaW4gdGFyZ2V0cyAlfQorICAgICAgICB7JSBpZiB0YXJnZXQudGFyZ2V0LmlzX2ltYWdlICV9CisgICAgPGRpdiBjbGFzcz0id2VsbCBkYXNoYm9hcmQtc2VjdGlvbiI+CisgICAgICAgIDxoMz48YSBocmVmPSJ7JSB1cmwgJ3RhcmdldCcgYnVpbGQucGsgdGFyZ2V0LnRhcmdldC5wayAlfSI+e3t0YXJnZXQudGFyZ2V0fX08L2E+CisgICAgICAgICAgICAgICAgPC9oMz4KKyAgICAgICAgPGRsIGNsYXNzPSJkbC1ob3Jpem9udGFsIj4KKyAgICAgICAgICAgIDxkdD5QYWNrYWdlcyBpbmNsdWRlZDwvZHQ+CisgICAgICAgICAgICA8ZGQ+PGEgaHJlZj0ieyUgdXJsICd0YXJnZXQnIGJ1aWxkLnBrIHRhcmdldC50YXJnZXQucGsgJX0iPnt7dGFyZ2V0Lm5wa2d9fTwvYT48L2RkPgorICAgICAgICAgICAgPGR0PlRvdGFsIHBhY2thZ2Ugc2l6ZTwvZHQ+CisgICAgICAgICAgICA8ZGQ+e3t0YXJnZXQucGtnc3p8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fTwvZGQ+CisgICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiB0YXJnZXQudGFyZ2V0SGFzTm9JbWFnZXMgJX0KKyAgICAgICAgICAgICAgICA8L2RsPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8gc3BhbjciPgorICAgICAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPlRoaXMgYnVpbGQgZGlkIG5vdCBjcmVhdGUgYW55IGltYWdlIGZpbGVzPC9iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgcHJvYmFibHkgYmVjYXVzZSB2YWxpZCBpbWFnZSBhbmQgbGljZW5zZSBtYW5pZmVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMgZnJvbSBhIHByZXZpb3VzIGJ1aWxkIGFscmVhZHkgZXhpc3QgaW4geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+Li4uL3Bva3kvYnVpbGQvdG1wL2RlcGxveTwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4gWW91IGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxzbyA8YSBocmVmPSJ7JSB1cmwgJ3RhcmdldHBrZycgYnVpbGQucGsgdGFyZ2V0LnRhcmdldC5wayAlfSI+dmlldyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGljZW5zZSBtYW5pZmVzdCBpbmZvcm1hdGlvbjwvYT4gaW4gVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbG9jYXRpb24gaW4gZGlzayBvZiB0aGUgbGljZW5zZSBtYW5pZmVzdCwgYSBkb2N1bWVudCBsaXN0aW5nIGFsbCBwYWNrYWdlcyBpbnN0YWxsZWQgaW4geW91ciBpbWFnZSBhbmQgdGhlaXIgbGljZW5zZXMiPjwvaT4KKworICAgICAgICAgICAgICAgIExpY2Vuc2UgbWFuaWZlc3QKKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICd0YXJnZXRwa2cnIGJ1aWxkLnBrIHRhcmdldC50YXJnZXQucGsgJX0iPlZpZXcgaW4gVG9hc3RlcjwvYT4gfAorICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnYnVpbGRfYXJ0aWZhY3QnIGJ1aWxkLnBrICdsaWNlbnNlbWFuaWZlc3QnIHRhcmdldC50YXJnZXQucGsgJX0iPkRvd25sb2FkPC9hPjwvZGQ+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkltYWdlIGZpbGVzIGFyZSBzdG9yZWQgaW4gPGNvZGU+L2J1aWxkL3RtcC9kZXBsb3kvaW1hZ2VzLzwvY29kZT4iPjwvaT4KKyAgICAgICAgICAgICAgICBJbWFnZSBmaWxlcworICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgZm9yIGkgaW4gdGFyZ2V0LmltYWdlRmlsZXMgJX0KKyAgICAgICAgICAgIHslIGlmIGJ1aWxkLnByb2plY3QgJX0KKyAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAnYnVpbGRfYXJ0aWZhY3QnIGJ1aWxkLnBrICdpbWFnZWZpbGUnIGkuaWQgJX0iPnt7aS5wYXRofX08L2E+CisgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgICAgICAgIDxsaT57e2kucGF0aH19CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICAgICAgICAoe3tpLnNpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fSk8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8L2RkPgorICAgICAgICA8L2RsPgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICA8L2Rpdj4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICB7JSBlbmRmb3IgJX0KKzwvZGl2PgoreyUgZW5kaWYgJX0KKworeyVlbHNlJX0KKzwhLS0gZXJyb3IgZHVtcCAtLT4KK3slZW5kaWYlfQorCis8IS0tIG90aGVyIGFydGlmYWN0cyAtLT4KK3slIGlmIGJ1aWxkLmJ1aWxkYXJ0aWZhY3Rfc2V0LmFsbC5jb3VudCA+IDAgJX0KKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBzcGFuMTAgcHVsbC1yaWdodCI+Cis8aDI+T3RoZXIgYXJ0aWZhY3RzPC9oMj4KKworICAgIDxkaXYgY2xhc3M9IndlbGwgZGFzaGJvYXJkLXNlY3Rpb24iPgorICAgICAgICA8ZGwgY2xhc3M9ImRsLWhvcml6b250YWwiPgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJCdWlsZCBhcnRpZmFjdHMgZGlzY292ZXJlZCBpbiA8aT50bXAvZGVwbG95L2ltYWdlczwvaT4uIFVzdWFsbHkga2VybmVsIGltYWdlcyBhbmQga2VybmVsIG1vZHVsZXMuIj48L2k+CisgICAgICAgICAgICAgICAgT3RoZXIgYXJ0aWZhY3RzPC9kdD4KKyAgICAgICAgICAgIDxkZD48ZGl2PgorICAgICAgICAgICAgICB7JSBmb3IgYmEgaW4gYnVpbGQuYnVpbGRhcnRpZmFjdF9zZXQuYWxsfGRpY3Rzb3J0OiJmaWxlX25hbWUiICV9CisgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgJ2J1aWxkX2FydGlmYWN0JyBidWlsZC5pZCAnYnVpbGRhcnRpZmFjdCcgYmEuaWQgJX0iPgorICAgICAgICAgICAgICAgICAgICB7e2JhLmdldF9sb2NhbF9maWxlX25hbWV9fQorICAgICAgICAgICAgICAgIDwvYT4KKworICAgICAgICAgICAgICAgICh7e2JhLmZpbGVfc2l6ZXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19KSA8YnIvPgorICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGQ+CisJPC9kbD4KKyAgICA8L2Rpdj4KKworPC9kaXY+Cit7JSBlbmRpZiAlfQorPCEtLSBidWlsZCBzdW1tYXJ5IC0tPgorPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW4xMCBwdWxsLXJpZ2h0Ij4KKzxoMj5CdWlsZCBzdW1tYXJ5PC9oMj4KKyAgICA8ZGl2IGNsYXNzPSJ3ZWxsIHNwYW40IGRhc2hib2FyZC1zZWN0aW9uIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4OyI+CisgICAgICAgIDxoND48YSBocmVmPSJ7JXVybCAnY29uZmlndXJhdGlvbicgYnVpbGQucGslfSI+Q29uZmlndXJhdGlvbjwvYT48L2g0PgorICAgICAgICAgICAgPGRsPgorICAgICAgICA8ZHQ+TWFjaGluZTwvZHQ+PGRkPnt7YnVpbGQubWFjaGluZX19PC9kZD4KKyAgICAgICAgPGR0PkRpc3RybzwvZHQ+PGRkPnt7YnVpbGQuZGlzdHJvfX08L2RkPgorICAgICAgICA8ZHQ+TGF5ZXJzPC9kdD57JSBmb3IgaSBpbiBidWlsZC5sYXllcl92ZXJzaW9uX2J1aWxkLmFsbHxkaWN0c29ydDoibGF5ZXIubmFtZSIgJX08ZGQ+e3tpLmxheWVyLm5hbWV9fTwvZGQ+eyVlbmRmb3IlfQorICAgICAgICAgICAgPC9kbD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJ3ZWxsIHNwYW40IGRhc2hib2FyZC1zZWN0aW9uIj4KKyAgICAgICAgPGg0PjxhIGhyZWY9InsldXJsICd0YXNrcycgYnVpbGQucGslfSI+VGFza3M8L2E+PC9oND4KKyAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgIHslIHF1ZXJ5IGJ1aWxkLnRhc2tfYnVpbGQgb3V0Y29tZT00IG9yZGVyX19ndD0wIGFzIGV4ZWN0YXNrJX0KKyAgICAgICAgICAgIHslIGlmIGV4ZWN0YXNrLmNvdW50ID4gMCAlfQorICAgICAgICAgICAgICAgIDxkdD5GYWlsZWQgdGFza3M8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICB7JSBpZiBleGVjdGFzay5jb3VudCA9PSAxICV9CisgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJlcnJvciIgaHJlZj0ieyUgdXJsICJ0YXNrIiBidWlsZC5pZCBleGVjdGFzay4wLmlkICV9Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIHt7ZXhlY3Rhc2suMC5yZWNpcGUubmFtZX19CisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFzay1uYW1lIj57e2V4ZWN0YXNrLjAudGFza19uYW1lfX08L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDwvYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQuaWQgInRhc2tsb2dmaWxlIiBleGVjdGFzay4wLmlkICV9Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1kb3dubG9hZC1hbHQiIHRpdGxlPSIiIGRhdGEtb3JpZ2luYWwtdGl0bGU9IkRvd25sb2FkIHRhc2sgbG9nIGZpbGUiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKworICAgICAgICAgICAgICAgIHslIGVsaWYgZXhlY3Rhc2suY291bnQgPiAxJX0KKyAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImVycm9yIiBocmVmPSJ7JSB1cmwgInRhc2tzIiBidWlsZC5pZCAlfT9maWx0ZXI9b3V0Y29tZSUzQTQiPnt7ZXhlY3Rhc2suY291bnR9fTwvYT4KKyAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICA8ZHQ+VG90YWwgbnVtYmVyIG9mIHRhc2tzPC9kdD48ZGQ+PGEgaHJlZj0ieyUgdXJsICd0YXNrcycgYnVpbGQucGsgJX0iPnslIHF1ZXJ5IGJ1aWxkLnRhc2tfYnVpbGQgb3JkZXJfX2d0PTAgYXMgYWxsdGFza3MgJX17e2FsbHRhc2tzLmNvdW50fX08L2E+PC9kZD4KKyAgICAgICAgPGR0PgorICAgICAgICAgICAgVGFza3MgZXhlY3V0ZWQKKyAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSInRXhlY3V0ZWQnIHRhc2tzIGFyZSB0aG9zZSB0aGF0IG5lZWQgdG8gYmUgcnVuIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSB0YXNrIG91dHB1dCI+PC9pPgorICAgICAgICA8L2R0PgorICAgICAgICA8ZGQ+PGEgaHJlZj0ieyUgdXJsICd0YXNrcycgYnVpbGQucGsgJX0/ZmlsdGVyPXRhc2tfZXhlY3V0ZWQlM0ExJmFtcDtjb3VudD0yNSZhbXA7c2VhcmNoPSZhbXA7cGFnZT0xJmFtcDtvcmRlcmJ5PW9yZGVyJTNBJTJCIj57JSBxdWVyeSBidWlsZC50YXNrX2J1aWxkIHRhc2tfZXhlY3V0ZWQ9MSBvcmRlcl9fZ3Q9MCBhcyBleGVjdGFzayV9e3tleGVjdGFzay5jb3VudH19PC9hPjwvZGQ+CisgICAgICAgIDxkdD4KKyAgICAgICAgICAgIFRhc2tzIG5vdCBleGVjdXRlZAorICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IidOb3QgZXhlY3V0ZWQnIHRhc2tzIGRvbid0IG5lZWQgdG8gcnVuIGJlY2F1c2UgdGhlaXIgb3V0Y29tZSBpcyBwcm92aWRlZCBieSBhbm90aGVyIHRhc2siPjwvaT4KKyAgICAgICAgPC9kdD4KKyAgICAgICAgPGRkPjxhIGhyZWY9InslIHVybCAndGFza3MnIGJ1aWxkLnBrICV9P2ZpbHRlcj10YXNrX2V4ZWN1dGVkJTNBMCZhbXA7Y291bnQ9MjUmYW1wO3NlYXJjaD0mYW1wO3BhZ2U9MSZhbXA7b3JkZXJieT1vcmRlciUzQSUyQiI+eyUgcXVlcnkgYnVpbGQudGFza19idWlsZCB0YXNrX2V4ZWN1dGVkPTAgb3JkZXJfX2d0PTAgYXMgbm9leGVjdGFzayV9e3tub2V4ZWN0YXNrLmNvdW50fX08L2E+PC9kZD4KKyAgICAgICAgPGR0PgorICAgICAgICAgICAgUmV1c2UKKyAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgcGVyY2VudGFnZSBvZiAnbm90IGV4ZWN1dGVkJyB0YXNrcyBvdmVyIHRoZSB0b3RhbCBudW1iZXIgb2YgdGFza3MsIHdoaWNoIGlzIGEgbWVhc3VyZSBvZiB0aGUgZWZmaWNpZW5jeSBvZiB5b3VyIGJ1aWxkIj48L2k+CisgICAgICAgIDwvZHQ+CisgICAgICAgIDxkZD4KK3slIHF1ZXJ5IGJ1aWxkLnRhc2tfYnVpbGQgb3JkZXJfX2d0PTAgYXMgdGV4ZWMgJX0KK3slIGlmIG5vZXhlY3Rhc2suY291bnR8bXVsdGlwbHk6MTAwfGRpdmlkZTp0ZXhlYy5jb3VudCA8IDAgJX0KKzAKK3slIGVsc2UgJX0KK3t7bm9leGVjdGFzay5jb3VudHxtdWx0aXBseToxMDB8ZGl2aWRlOnRleGVjLmNvdW50fX0KK3slIGVuZGlmICV9CislCisgICAgICAgIDwvZGQ+CisgICAgICAgICAgICA8L2RsPgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9IndlbGwgc3BhbjQgZGFzaGJvYXJkLXNlY3Rpb24iPgorICAgICAgICA8aDQ+PGEgaHJlZj0ieyUgdXJsICdyZWNpcGVzJyBidWlsZC5wayAlfSI+UmVjaXBlczwvYT4gJiA8YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VzJyBidWlsZC5wayAlfSI+UGFja2FnZXM8L2E+PC9oND4KKyAgICAgICAgICAgIDxkbD4KKyAgICAgICAgPGR0PlJlY2lwZXMgYnVpbHQ8L2R0PjxkZD48YSBocmVmPSJ7JSB1cmwgJ3JlY2lwZXMnIGJ1aWxkLnBrICV9Ij57e3JlY2lwZWNvdW50fX08L2E+PC9kZD4KKyAgICAgICAgPGR0PlBhY2thZ2VzIGJ1aWx0PC9kdD48ZGQ+PGEgaHJlZj0ieyUgdXJsICdwYWNrYWdlcycgYnVpbGQucGsgJX0iPnt7cGFja2FnZWNvdW50fX08L2E+PC9kZD4KKyAgICAgICAgICAgIDwvZGw+CisgICAgPC9kaXY+Cis8L2Rpdj4KKworeyUgaWYgYnVpbGQud2FybmluZ3MuY291bnQgJX0KKzxkaXYgY2xhc3M9ImFjY29yZGlvbiBzcGFuMTAgcHVsbC1yaWdodCIgaWQ9Indhcm5pbmdzIj4KKyAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWdyb3VwIj4KKyAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24taGVhZGluZyI+CisgICAgICA8YSBjbGFzcz0iYWNjb3JkaW9uLXRvZ2dsZSB3YXJuaW5nIHRvZ2dsZS13YXJuaW5ncyI+CisgICAgICAgIDxoMiBpZD0id2FybmluZy10b2dnbGUiPgorICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXdhcm5pbmctc2lnbiI+PC9pPgorICAgICAgICAgIHt7YnVpbGQud2FybmluZ3MuY291bnR9fSB3YXJuaW5ne3tidWlsZC53YXJuaW5ncy5jb3VudHxwbHVyYWxpemV9fQorICAgICAgICA8L2gyPgorICAgICAgPC9hPgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1ib2R5IGNvbGxhcHNlIiBpZD0iY29sbGFwc2Utd2FybmluZ3MiPgorICAgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWlubmVyIj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjEwIj4KKyAgICAgICAgICB7JSBmb3Igd2FybmluZyBpbiBsb2dtZXNzYWdlcyAlfXslIGlmIHdhcm5pbmcubGV2ZWwgPT0gMSAlfQorICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtd2FybmluZyI+CisgICAgICAgICAgICAgIDxwcmU+e3t3YXJuaW5nLm1lc3NhZ2V9fTwvcHJlPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgeyUgZW5kaWYgJX17JSBlbmRmb3IgJX0KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgPC9kaXY+Cis8L2Rpdj4KK3slIGVuZGlmICV9CisKKworeyUgaWYgYnVpbGQudG9hc3Rlcl9leGNlcHRpb25zLmNvdW50ID4gMCAlfQorPGRpdiBjbGFzcz0iYWNjb3JkaW9uIHNwYW4xMCBwdWxsLXJpZ2h0IiBpZD0iZXhjZXB0aW9ucyI+CisgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1ncm91cCI+CisgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWhlYWRpbmciPgorICAgICAgPGEgY2xhc3M9ImFjY29yZGlvbi10b2dnbGUgZXhjZXB0aW9uIHRvZ2dsZS1leGNlcHRpb25zIj4KKyAgICAgICAgPGgyIGlkPSJleGNlcHRpb24tdG9nZ2xlIj4KKyAgICAgICAgICA8aSBjbGFzcz0iaWNvbi13YXJuaW5nLXNpZ24iPjwvaT4KKyAgICAgICAgICB7e2J1aWxkLnRvYXN0ZXJfZXhjZXB0aW9ucy5jb3VudH19IFRvYXN0ZXIgZXhjZXB0aW9ue3tidWlsZC50b2FzdGVyX2V4Y2VwdGlvbnMuY291bnR8cGx1cmFsaXplfX0KKyAgICAgICAgPC9oMj4KKyAgICAgIDwvYT4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tYm9keSBjb2xsYXBzZSIgaWQ9ImNvbGxhcHNlLWV4Y2VwdGlvbnMiPgorICAgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWlubmVyIj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjEwIj4KKyAgICAgICAgICB7JSBmb3IgZXhjZXB0aW9uIGluIGJ1aWxkLnRvYXN0ZXJfZXhjZXB0aW9ucyAlfQorICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtZXhjZXB0aW9uIj4KKyAgICAgICAgICAgICAgPHByZT57e2V4Y2VwdGlvbi5tZXNzYWdlfX08L3ByZT4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICA8L2Rpdj4KKzwvZGl2PgoreyUgZW5kaWYgJX0KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgICAgICAvL3Nob3cgd2FybmluZ3Mgc2VjdGlvbiB3aGVuIHJlcXVlc3RlZCBmcm9tIHRoZSBwcmV2aW91cyBwYWdlCisgICAgICAgIGlmIChsb2NhdGlvbi5ocmVmLnNlYXJjaCgnI3dhcm5pbmdzJykgPiAtMSkgeworICAgICAgICAgICAgJCgnI2NvbGxhcHNlLXdhcm5pbmdzJykuYWRkQ2xhc3MoJ2luJyk7CisgICAgICAgIH0KKyAgICB9KTsKKzwvc2NyaXB0PgorCit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2J1aWxkcmVxdWVzdGRldGFpbHMuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9idWlsZHJlcXVlc3RkZXRhaWxzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBmYTFmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9idWlsZHJlcXVlc3RkZXRhaWxzLmh0bWwKQEAgLTAsMCArMSw2NCBAQAoreyUgZXh0ZW5kcyAiYmFzZXByb2plY3RwYWdlLmh0bWwiICV9CisKK3slIGxvYWQgc3RhdGljICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9CisKKworeyUgYmxvY2sgcHJvamVjdGluZm9tYWluICV9CisgICAgICA8IS0tIGJlZ2luIGNvbnRlbnQgLS0+CisKKyAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorCisgICAgICAgICAgICA8IS0tIGVuZCBsZWZ0IHNpZGViYXIgY29udGFpbmVyIC0tPgorICAgICAgICAgICAgPCEtLSBCZWdpbiByaWdodCBjb250YWluZXIgLS0+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFuMTAiPgorICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+CisgICAgICAgICAgICAgICAgPGgxPgorIDxzcGFuIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIiB7JWlmIGJ1aWxkcmVxdWVzdC5icnRhcmdldF9zZXQuYWxsLmNvdW50ID4gMSV9dGl0bGU9IlRhcmdldHM6IHslZm9yIHRhcmdldCBpbiBidWlsZHJlcXVlc3QuYnJ0YXJnZXRfc2V0LmFsbCV9e3t0YXJnZXQudGFyZ2V0fX0geyVlbmRmb3IlfSJ7JWVuZGlmJX0+e3tidWlsZHJlcXVlc3QuYnJ0YXJnZXRfc2V0LmFsbC4wLnRhcmdldH19IHslaWYgYnVpbGRyZXF1ZXN0LmJydGFyZ2V0X3NldC5hbGwuY291bnQgPiAxJX0oKyB7e2J1aWxkcmVxdWVzdC5icnRhcmdldF9zZXQuYWxsLmNvdW50fGFkZDoiLTEifX0peyVlbmRpZiV9IHt7YnVpbGRyZXF1ZXN0LmdldF9tYWNoaW5lfX0gPC9zcGFuPgorCisgICAgICAgIDwvaDE+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1lcnJvciI+CisgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImxlYWQiPgorICAgICAgICAgICAgICAgICAgPHN0cm9uZz5GYWlsZWQ8L3N0cm9uZz4KKyAgICAgICAgICAgICAgICAgICAgb24ge3sgYnVpbGRyZXF1ZXN0LnVwZGF0ZWR8ZGF0ZTonZC9tL3kgSDppJyB9fQorICAgICAgICAgICAgd2l0aAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1taW51cy1zaWduIGVycm9yIiBzdHlsZT0ibWFyZ2luLWxlZnQ6NnB4OyI+PC9pPgorICAgICAgICAgICAgICAgICAgPHN0cm9uZz48YSBjbGFzcz0iZXJyb3IgYWNjb3JkaW9uLXRvZ2dsZSB0b2dnbGUtZXJyb3JzIiBocmVmPSIjZXJyb3JzIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIHt7YnVpbGRyZXF1ZXN0LmJyZXJyb3Jfc2V0LmFsbC5jb3VudH19IGVycm9ye3tidWlsZHJlcXVlc3QuYnJlcnJvcl9zZXQuYWxsLmNvdW50fHBsdXJhbGl6ZX19CisgICAgICAgICAgICAgIDwvYT48L3N0cm9uZz4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwdWxsLXJpZ2h0Ij5CdWlsZCB0aW1lOiB7e2J1aWxkcmVxdWVzdC5nZXRfZHVyYXRpb258c2VjdG9obXN9fTwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbiIgaWQ9ImVycm9ycyI+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWdyb3VwIj4KKyAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1oZWFkaW5nIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImFjY29yZGlvbi10b2dnbGUgZXJyb3IgdG9nZ2xlLWVycm9ycyI+CisgICAgICAgICAgICAgICAgICAgICAgPGgyPgorICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tbWludXMtc2lnbiI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAge3tidWlsZHJlcXVlc3QuYnJlcnJvcl9zZXQuYWxsLmNvdW50fX0gZXJyb3J7e2J1aWxkcmVxdWVzdC5icmVycm9yX3NldC5hbGwuY291bnR8cGx1cmFsaXplfX0KKyAgICAgICAgICAgICAgICAgICAgICA8L2gyPgorICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1ib2R5IGNvbGxhcHNlIGluIiBpZD0iY29sbGFwc2UtZXJyb3JzIj4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWlubmVyIj4KKyAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFuMTAiPgorICAgICAgICAgICAgICAgeyUgZm9yIGVycm9yIGluIGJ1aWxkcmVxdWVzdC5icmVycm9yX3NldC5hbGwgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWVycm9yIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgRVJST1I6IDxkaXYgY2xhc3M9ImFpciB3ZWxsIj48cHJlPnt7ZXJyb3IuZXJybXNnfX08L3ByZT48L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+IDwhLS0gZW5kIG9mIHJvdy1mbHVpZCAtLT4KKworCit7JWVuZGJsb2NrJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9idWlsZHMuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9idWlsZHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGQwYzY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2J1aWxkcy5odG1sCkBAIC0wLDAgKzEsMTA5IEBACit7JSBleHRlbmRzICJiYXNlLmh0bWwiICV9CisKK3slIGxvYWQgc3RhdGljICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9CisKK3slIGJsb2NrIGV4dHJhaGVhZGNvbnRlbnQgJX0KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvanF1ZXJ5LXVpLm1pbi5jc3MiIHR5cGU9J3RleHQvY3NzJz4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvanF1ZXJ5LXVpLnN0cnVjdHVyZS5taW4uY3NzIiB0eXBlPSd0ZXh0L2Nzcyc+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2pxdWVyeS11aS50aGVtZS5taW4uY3NzIiB0eXBlPSd0ZXh0L2Nzcyc+Cis8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy9qcXVlcnktdWkubWluLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL2ZpbHRlcnNuaXBwZXQuanMiPjwvc2NyaXB0PgoreyUgZW5kYmxvY2sgJX0KKworeyUgYmxvY2sgcGFnZWNvbnRlbnQgJX0KKworeyUgaWYgbGFzdF9kYXRlX2Zyb20gYW5kIGxhc3RfZGF0ZV90byAlfQorPHNjcmlwdD4KKyAgICAvLyBpbml0aWFsaXplIHRoZSBkYXRlIHJhbmdlIGNvbnRyb2xzCisgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkgeworICAgICAgICBkYXRlX2luaXQoJ3N0YXJ0ZWRfb24nLCd7e2xhc3RfZGF0ZV9mcm9tfX0nLCd7e2xhc3RfZGF0ZV90b319Jywne3tkYXRlTWluX3N0YXJ0ZWRfb259fScsJ3t7ZGF0ZU1heF9zdGFydGVkX29ufX0nLCd7e2RhdGVyYW5nZV9zZWxlY3RlZH19Jyk7CisgICAgICAgIGRhdGVfaW5pdCgnY29tcGxldGVkX29uJywne3tsYXN0X2RhdGVfZnJvbX19Jywne3tsYXN0X2RhdGVfdG99fScsJ3t7ZGF0ZU1pbl9jb21wbGV0ZWRfb259fScsJ3t7ZGF0ZU1heF9jb21wbGV0ZWRfb259fScsJ3t7ZGF0ZXJhbmdlX3NlbGVjdGVkfX0nKTsKKyAgICB9KTsKKzwvc2NyaXB0PgoreyVlbmRpZiV9IHsjIGxhc3RfZGF0ZV9mcm9tIGFuZCBsYXN0X2RhdGVfdG8gI30KKworPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKworICB7JSBpbmNsdWRlICJtcmJfc2VjdGlvbi5odG1sIiAlfQorCisKKyAgeyUgaWYgMSAlfQorICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciB0b3AtYWlyIj4KKyAgICAgPGgxPgorICAgICAgeyUgaWYgcmVxdWVzdC5HRVQuZmlsdGVyIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+IDAgb3IgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+IDAgJX0KKyAgICAgICAgICB7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fX0gYnVpbGR7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fHBsdXJhbGl6ZX19IGZvdW5kCisgICAgICB7JWVsaWYgcmVxdWVzdC5HRVQuZmlsdGVyIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwIG9yIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICAgICAgICAgIE5vIGJ1aWxkcyBmb3VuZAorICAgICAgeyVlbHNlJX0KKyAgICAgICAgICBBbGwgYnVpbGRzCisgICAgICB7JWVuZGlmJX0KKyAgICAgPC9oMT4KKyAgPC9kaXY+CisKKyAgeyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgICA8ZGl2IGNsYXNzPSJhbGVydCI+CisgICAgICAgIDxmb3JtIGNsYXNzPSJuby1yZXN1bHRzIGlucHV0LWFwcGVuZCIgaWQ9InNlYXJjaGZvcm0iPgorICAgICAgICAgICAgPGlucHV0IGlkPSJzZWFyY2giIG5hbWU9InNlYXJjaCIgY2xhc3M9ImlucHV0LXh4bGFyZ2UiIHR5cGU9InRleHQiIHZhbHVlPSIKKyAgICAgICAgICAgIHslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfQorICAgICAgICAgICAgICAgIHt7cmVxdWVzdC5HRVQuc2VhcmNofX0KKyAgICAgICAgeyUgZW5kaWYgJX0iLz4KKyAgICAgICAgICAgIHslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfTxhIGhyZWY9ImphdmFzY3JpcHQ6JCgnI3NlYXJjaCcpLnZhbCgnJyk7c2VhcmNoZm9ybS5zdWJtaXQoKSIgY2xhc3M9ImFkZC1vbiBidG4iIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9Imljb24tcmVtb3ZlIj48L2k+PC9hPnslIGVuZGlmICV9CisgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlYXJjaCI+U2VhcmNoPC9idXR0b24+CisgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWxpbmsiIG9uY2xpY2s9ImphdmFzY3JpcHQ6JCgnI3NlYXJjaCcpLnZhbCgnJyk7c2VhcmNoZm9ybS5zdWJtaXQoKSI+U2hvdyBhbGwgYnVpbGRzPC9idXR0b24+CisgICAgICAgIDwvZm9ybT4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorCisKKyAgeyUgZWxzZSAlfQorICB7JSBpbmNsdWRlICJiYXNldGFibGVfdG9wLmh0bWwiICV9CisgICAgICAgIDwhLS0gVGFibGUgZGF0YSByb3dzOyB0aGUgb3JkZXIgbmVlZHMgdG8gbWF0Y2ggdGhlIG9yZGVyIG9mICJ0YWJsZWNvbHMiIGRlZmluaXRpb25zOyBhbmQgdGhlIDx0ZCBjbGFzcyB2YWx1ZSBuZWVkcyB0byBtYXRjaCB0aGUgdGFibGVjb2xzIGNsY2xhc3MgdmFsdWUgZm9yIHNob3cvaGlkZSBidXR0b25zIHRvIHdvcmsgLS0+CisgICAgICAgIHslIGZvciBidWlsZCBpbiBvYmplY3RzICV9CisgICAgICAgIDx0ciBjbGFzcz0iZGF0YSI+CisgICAgICAgICAgICA8dGQgY2xhc3M9Im91dGNvbWUiPgorICAgICAgICA8YSBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBidWlsZC5pZCAlfSI+eyVpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLlNVQ0NFRURFRCV9PGkgY2xhc3M9Imljb24tb2stc2lnbiBzdWNjZXNzIj48L2k+eyVlbGlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuRkFJTEVEJX08aSBjbGFzcz0iaWNvbi1taW51cy1zaWduIGVycm9yIj48L2k+eyVlbHNlJX17JWVuZGlmJX08L2E+ICZuYnNwOworICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YXJnZXQiPnslIGZvciB0IGluIGJ1aWxkLnRhcmdldF9zZXQuYWxsICV9IDxhIGhyZWY9InslIHVybCAiYnVpbGRkYXNoYm9hcmQiIGJ1aWxkLmlkICV9Ij4ge3t0LnRhcmdldH19IDwvYT4gPGJyIC8+eyUgZW5kZm9yICV9PC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0ibWFjaGluZSI+PGEgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgYnVpbGQuaWQgJX0iPnt7YnVpbGQubWFjaGluZX19PC9hPjwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9InN0YXJ0ZWRfb24iPjxhIGhyZWY9InslIHVybCAiYnVpbGRkYXNoYm9hcmQiIGJ1aWxkLmlkICV9Ij57e2J1aWxkLnN0YXJ0ZWRfb258ZGF0ZToiZC9tL3kgSDppIn19PC9hPjwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbXBsZXRlZF9vbiI+PGEgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgYnVpbGQuaWQgJX0iPnt7YnVpbGQuY29tcGxldGVkX29ufGRhdGU6ImQvbS95IEg6aSJ9fTwvYT48L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJmYWlsZWRfdGFza3MgZXJyb3IiPgorICAgICAgICAgICAgICAgIHslIHF1ZXJ5IGJ1aWxkLnRhc2tfYnVpbGQgb3V0Y29tZT00IG9yZGVyX19ndD0wIGFzIGV4ZWN0YXNrJX0KKyAgICAgICAgICAgICAgICAgICAgeyUgaWYgZXhlY3Rhc2suY291bnQgPT0gMSAlfQorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJ0YXNrIiBidWlsZC5pZCBleGVjdGFzay4wLmlkICV9Ij57e2V4ZWN0YXNrLjAucmVjaXBlLm5hbWV9fS57e2V4ZWN0YXNrLjAudGFza19uYW1lfX08L2E+CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2J1aWxkX2FydGlmYWN0JyBidWlsZC5pZCAidGFza2xvZ2ZpbGUiIGV4ZWN0YXNrLjAuaWQgJX0iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLWRvd25sb2FkLWFsdCIgdGl0bGU9IiIgZGF0YS1vcmlnaW5hbC10aXRsZT0iRG93bmxvYWQgdGFzayBsb2cgZmlsZSI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICB7JSBlbGlmIGV4ZWN0YXNrLmNvdW50ID4gMSV9CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgInRhc2tzIiBidWlsZC5pZCAlfT9maWx0ZXI9b3V0Y29tZSUzQTQiPnt7ZXhlY3Rhc2suY291bnR9fSB0YXNre3tleGVjdGFzay5jb3VudHxwbHVyYWxpemV9fTwvYT4KKyAgICAgICAgICAgICAgICAgICAgeyVlbmRpZiV9CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJlcnJvcnMuY291bnQgZXJyb3JzX25vIj4KKyAgICAgICAgICAgICAgICB7JSBpZiAgYnVpbGQuZXJyb3JzLmNvdW50ICV9CisgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJlcnJvcnMuY291bnQgZXJyb3IiIGhyZWY9InslIHVybCAiYnVpbGRkYXNoYm9hcmQiIGJ1aWxkLmlkICV9I2Vycm9ycyI+e3tidWlsZC5lcnJvcnMuY291bnR9fSBlcnJvcnt7YnVpbGQuZXJyb3JzLmNvdW50fHBsdXJhbGl6ZX19PC9hPgorICAgICAgICAgICAgICAgIHslZW5kaWYlfQorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0id2FybmluZ3MuY291bnQgd2FybmluZ3Nfbm8iPnslIGlmICBidWlsZC53YXJuaW5ncy5jb3VudCAlfTxhIGNsYXNzPSJ3YXJuaW5ncy5jb3VudCB3YXJuaW5nIiBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBidWlsZC5pZCAlfSN3YXJuaW5ncyI+e3tidWlsZC53YXJuaW5ncy5jb3VudH19IHdhcm5pbmd7e2J1aWxkLndhcm5pbmdzLmNvdW50fHBsdXJhbGl6ZX19PC9hPnslZW5kaWYlfTwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9InRpbWUiPjxhIGhyZWY9InslIHVybCAiYnVpbGR0aW1lIiBidWlsZC5pZCAlfSI+e3tidWlsZC50aW1lc3BlbnRfc2Vjb25kc3xzZWN0b2htc319PC9hPjwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9Im91dHB1dCI+CisgICAgICAgICAgICAgIHslIGlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEICV9CisgICAgICAgICAgICAgIDxhIGhyZWY9InsldXJsICJidWlsZGRhc2hib2FyZCIgYnVpbGQuaWQlfSNpbWFnZXMiPnt7ZnN0eXBlc3xnZXRfZGljdF92YWx1ZTpidWlsZC5pZH19PC9hPgorICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncHJvamVjdCcgYnVpbGQucHJvamVjdC5pZCAlfSI+e3tidWlsZC5wcm9qZWN0Lm5hbWV9fTwvYT4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgIDwvdHI+CisKKyAgICAgICAgeyUgZW5kZm9yICV9CisKKworICB7JSBpbmNsdWRlICJiYXNldGFibGVfYm90dG9tLmh0bWwiICV9CisgIHslIGVuZGlmICV9IHsjIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ICN9Cit7JSBlbmRpZiAlfSB7IyBlbXB0eSAjfQorPC9kaXY+PCEtLSBlbmQgcm93LWZsdWlkLS0+CisKK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnVpbGR0aW1lLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnVpbGR0aW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE4NGFlNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9idWlsZHRpbWUuaHRtbApAQCAtMCwwICsxLDQgQEAKK3slIGV4dGVuZHMgImJhc2VidWlsZHBhZ2UuaHRtbCIgJX0KK3slIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfQorPGxpPkJ1aWxkIFRpbWU8L2xpPgoreyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9jb25maWd1cmF0aW9uLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvY29uZmlndXJhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNDg5OTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvY29uZmlndXJhdGlvbi5odG1sCkBAIC0wLDAgKzEsNzEgQEAKK3slIGV4dGVuZHMgImJhc2VidWlsZHBhZ2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KKworeyUgYmxvY2sgbG9jYWxicmVhZGNydW1iICV9Cis8bGk+Q29uZmlndXJhdGlvbjwvbGk+Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBuYXYtY29uZmlndXJhdGlvbiAlfQorICA8bGkgY2xhc3M9ImFjdGl2ZSI+PGEgaHJlZj0ieyUgdXJsICdjb25maWd1cmF0aW9uJyBidWlsZC5wayAlfSI+Q29uZmlndXJhdGlvbjwvYT48L2xpPgoreyUgZW5kYmxvY2sgJX0KKworeyUgYmxvY2sgYnVpbGRpbmZvbWFpbiAlfQorPCEtLSBwYWdlIHRpdGxlIC0tPgorPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW4xMCI+CisgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICAgICA8aDE+Q29uZmlndXJhdGlvbjwvaDE+CisgPC9kaXY+Cis8L2Rpdj4KKworPCEtLSBjb25maWd1cmF0aW9uIHRhYmxlIC0tPgorPGRpdiBjbGFzcz0icm93LWZsdWlkIHB1bGwtcmlnaHQgc3BhbjEwIiBpZD0ibmF2VGFiIj4KKzx1bCBjbGFzcz0ibmF2IG5hdi1waWxscyI+CisgICAgPGxpIGNsYXNzPSJhY3RpdmUiPjxhIGhyZWY9IiMiPlN1bW1hcnk8L2E+PC9saT4KKyAgICA8bGkgY2xhc3M9IiI+PGEgaHJlZj0ieyUgdXJsICdjb25maWd2YXJzJyBidWlsZC5pZCAlfSI+Qml0QmFrZSB2YXJpYWJsZXM8L2E+PC9saT4KKzwvdWw+CisKKyAgPCEtLSBzdW1tYXJ5IC0tPgorICA8ZGl2IGlkPSJzdW1tYXJ5IiBjbGFzcz0idGFiLXBhbmUgYWN0aXZlIj4KKyAgICA8aDM+QnVpbGQgY29uZmlndXJhdGlvbjwvaDM+CisgICAgPGRsIGNsYXNzPSJkbC1ob3Jpem9udGFsIj4KKyAgICAgIHslaWYgQkJfVkVSU0lPTiAlfTxkdD5CaXRCYWtlIHZlcnNpb248L2R0PjxkZD57e0JCX1ZFUlNJT059fTwvZGQ+IHslIGVuZGlmICV9CisgICAgICB7JWlmIEJVSUxEX1NZUyAlfTxkdD5CdWlsZCBzeXN0ZW08L2R0PjxkZD57e0JVSUxEX1NZU319PC9kZD4geyUgZW5kaWYgJX0KKyAgICAgIHslaWYgTkFUSVZFTFNCU1RSSU5HICV9PGR0Pkhvc3QgZGlzdHJpYnV0aW9uPC9kdD48ZGQ+e3tOQVRJVkVMU0JTVFJJTkd9fTwvZGQ+IHslIGVuZGlmICV9CisgICAgICB7JWlmIFRBUkdFVF9TWVMgJX08ZHQ+VGFyZ2V0IHN5c3RlbTwvZHQ+PGRkPnt7VEFSR0VUX1NZU319PC9kZD4geyUgZW5kaWYgJX0KKyAgICAgIHslaWYgTUFDSElORSAlfTxkdD5NYWNoaW5lPC9kdD48ZGQ+e3tNQUNISU5FfX08L2RkPiB7JSBlbmRpZiAlfQorICAgICAgeyVpZiBESVNUUk8gJX08ZHQ+RGlzdHJvPC9kdD48ZGQ+e3tESVNUUk99fTwvZGQ+IHslIGVuZGlmICV9CisgICAgICB7JWlmIERJU1RST19WRVJTSU9OICV9PGR0PkRpc3RybyB2ZXJzaW9uPC9kdD48ZGQ+e3tESVNUUk9fVkVSU0lPTn19PC9kZD4geyUgZW5kaWYgJX0KKyAgICAgIHslaWYgVFVORV9GRUFUVVJFUyAlfTxkdD5UdW5lIGZlYXR1cmVzPC9kdD48ZGQ+e3tUVU5FX0ZFQVRVUkVTfX08L2RkPiB7JSBlbmRpZiAlfQorICAgICAgeyVpZiBUQVJHRVRfRlBVICV9PGR0PlRhcmdldCBGUFU8L2R0PjxkZD57e1RBUkdFVF9GUFV9fTwvZGQ+IHslIGVuZGlmICV9CisgICAgICB7JWlmIHRhcmdldHMuYWxsICV9PGR0PlRhcmdldChzKTwvZHQ+CisgICAgICAgICAgPGRkPiA8dWw+IHslIGZvciB0YXJnZXQgaW4gdGFyZ2V0cy5hbGwgJX0KKyAgICAgICAgICAgICAgIDxsaT57e3RhcmdldC50YXJnZXR9fXslaWYgZm9ybG9vcC5jb3VudGVyID4gMSAlfTxicj57JSBlbmRpZiAlfTwvbGk+CisgICAgICAgICAgeyUgZW5kZm9yICV9IDwvdWw+IDwvZGQ+IHslIGVuZGlmICV9CisgICAgPC9kbD4KKyAgICA8aDM+TGF5ZXJzPC9oMz4KKyAgICA8ZGl2IGNsYXNzPSJzcGFuOSIgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweDsiPgorICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIiPgorICAgICAgPHRoZWFkPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRoPkxheWVyPC90aD4KKyAgICAgICAgICA8dGg+TGF5ZXIgYnJhbmNoPC90aD4KKyAgICAgICAgICA8dGg+TGF5ZXIgY29tbWl0PC90aD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGhlYWQ+CisgICAgICA8dGJvZHk+eyUgZm9yIGx2IGluIGJ1aWxkLmxheWVyX3ZlcnNpb25fYnVpbGQuYWxsfGRpY3Rzb3J0OiJsYXllci5uYW1lIiAlfQorICAgICAgICA8dHI+CisgICAgICAgICAgICA8dGQ+e3tsdi5sYXllci5uYW1lfX08L3RkPgorICAgICAgICAgICAgPHRkPnt7bHYuYnJhbmNofX08L3RkPgorICAgICAgICAgICAgPHRkPiA8YSBjbGFzcz0iYnRuIiBkYXRhLWNvbnRlbnQ9Ijx1bCBjbGFzcz0ndW5zdHlsZWQnPgorICAgICAgICAgICAgICAgIDxsaT57e2x2LmNvbW1pdH19PC9saT4gPC91bD4iPgorICAgICAgICAgICAgICAgICAgICB7e2x2LmNvbW1pdHx0cnVuY2F0ZWNoYXJzOjEzfX0KKyAgICAgICAgICAgICAgICA8L2E+PC90ZD4KKyAgICAgICAgPC90cj57JSBlbmRmb3IgJX0KKyAgICAgIDwvdGJvZHk+CisgICAgPC90YWJsZT4KKyAgICA8L2Rpdj4KKyAgPC9kaXY+CisKKworPC9kaXY+Cit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2NvbmZpZ3ZhcnMuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9jb25maWd2YXJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE1NzJhZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9jb25maWd2YXJzLmh0bWwKQEAgLTAsMCArMSwxMzIgQEAKK3slIGV4dGVuZHMgImJhc2VidWlsZHBhZ2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KKworeyUgYmxvY2sgbG9jYWxicmVhZGNydW1iICV9Cis8bGk+Q29uZmlndXJhdGlvbjwvbGk+Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBuYXYtY29uZmlndXJhdGlvbiAlfQorICA8bGkgY2xhc3M9ImFjdGl2ZSI+PGEgaHJlZj0ieyUgdXJsICdjb25maWd1cmF0aW9uJyBidWlsZC5wayAlfSI+Q29uZmlndXJhdGlvbjwvYT48L2xpPgoreyUgZW5kYmxvY2sgJX0KKworeyUgYmxvY2sgYnVpbGRpbmZvbWFpbiAlfQorPCEtLSBwYWdlIHRpdGxlIC0tPgorPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW4xMCI+CisgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorIDxoMT4KKyAgeyUgaWYgcmVxdWVzdC5HRVQuZmlsdGVyIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+IDAgb3IgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+IDAgJX0KKyAgICAgIHt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR9fSB2YXJpYWJsZXt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR8cGx1cmFsaXplfX0gZm91bmQKKyAgeyVlbGlmIHJlcXVlc3QuR0VULmZpbHRlciBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCBvciByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgJX0KKyAgICAgIE5vIHZhcmlhYmxlcyBmb3VuZAorICB7JWVsc2UlfQorICAgICAgQ29uZmlndXJhdGlvbgorICB7JWVuZGlmJX0KKyA8L2gxPgorIDwvZGl2PgorPC9kaXY+CisKKzwhLS0gY29uZmlndXJhdGlvbiB0YWJsZSAtLT4KKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBwdWxsLXJpZ2h0IHNwYW4xMCIgaWQ9Im5hdlRhYiI+CisgIDx1bCBjbGFzcz0ibmF2IG5hdi1waWxscyI+CisgICAgPGxpIGNsYXNzPSIiPjxhIGhyZWY9InslIHVybCAnY29uZmlndXJhdGlvbicgYnVpbGQuaWQgJX0iPlN1bW1hcnk8L2E+PC9saT4KKyAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+PGEgaHJlZj0iIyIgPkJpdEJha2UgdmFyaWFibGVzPC9hPjwvbGk+CisgIDwvdWw+CisKKyAgPCEtLSB2YXJpYWJsZXMgLS0+CisgIDxkaXYgaWQ9InZhcmlhYmxlcyIgY2xhc3M9InRhYi1wYW5lIj4KKworICB7JSBpZiBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgICA8ZGl2IGNsYXNzPSJhbGVydCI+CisgICAgICAgIDxmb3JtIGNsYXNzPSJuby1yZXN1bHRzIGlucHV0LWFwcGVuZCIgaWQ9InNlYXJjaGZvcm0iPgorICAgICAgICAgICAgPGlucHV0IGlkPSJzZWFyY2giIG5hbWU9InNlYXJjaCIgY2xhc3M9ImlucHV0LXh4bGFyZ2UiIHR5cGU9InRleHQiIHZhbHVlPSJ7JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX17e3JlcXVlc3QuR0VULnNlYXJjaH19eyUgZW5kaWYgJX0iLz57JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX08YSBocmVmPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiIGNsYXNzPSJhZGQtb24gYnRuIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPjwvYT57JSBlbmRpZiAlfQorICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTZWFyY2giPlNlYXJjaDwvYnV0dG9uPgorICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1saW5rIiBvbmNsaWNrPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiPlNob3cgYWxsIHZhcmlhYmxlczwvYnV0dG9uPgorICAgICAgICA8L2Zvcm0+CisgICAgICA8L2Rpdj4KKyAgPC9kaXY+CisKKyAgeyUgZWxzZSAlfQorICB7JSBpbmNsdWRlICJiYXNldGFibGVfdG9wLmh0bWwiICV9CisKKyAgeyUgZm9yIHZhcmlhYmxlIGluIG9iamVjdHMgJX0KKyAgICA8dHIgY2xhc3M9ImRhdGEiPgorICAgICAgICA8dGQgY2xhc3M9InZhcmlhYmxlX25hbWUiPjxhIGRhdGEtdG9nZ2xlPSJtb2RhbCIgaHJlZj0iI3ZhcmlhYmxlLXt7dmFyaWFibGUucGt9fSI+e3t2YXJpYWJsZS52YXJpYWJsZV9uYW1lfX08L2E+PC90ZD4KKyAgICAgICAgPHRkIGNsYXNzPSJ2YXJpYWJsZV92YWx1ZSI+PGEgZGF0YS10b2dnbGU9Im1vZGFsIiBocmVmPSIjdmFyaWFibGUte3t2YXJpYWJsZS5wa319Ij57e3ZhcmlhYmxlLnZhcmlhYmxlX3ZhbHVlfHRydW5jYXRlY2hhcnM6MTUzfX08L2E+PC90ZD4KKyAgICAgICAgPHRkIGNsYXNzPSJmaWxlIj48YSBkYXRhLXRvZ2dsZT0ibW9kYWwiIGhyZWY9IiN2YXJpYWJsZS17e3ZhcmlhYmxlLnBrfX0iPgorICAgICAgICAgICAgeyUgaWYgdmFyaWFibGUudmhpc3RvcnkuYWxsICV9CisgICAgICAgICAgICAgICAgeyUgZm9yIHBhdGggaW4gdmFyaWFibGUudmhpc3RvcnkuYWxsfGZpbHRlcl9zZXRpbl9maWxlczpmaWxlX2ZpbHRlciAlfQorICAgICAgICAgICAgICAgICAgICB7e3BhdGh9fTxici8+CisgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICA8L2E+PC90ZD4KKyAgICAgICAgPHRkIGNsYXNzPSJkZXNjcmlwdGlvbiI+CisgICAgICAgICAgICB7JSBpZiB2YXJpYWJsZS5kZXNjcmlwdGlvbiAlfQorICAgICAgICAgICAgICAgIHt7dmFyaWFibGUuZGVzY3JpcHRpb259fQorICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzL2N1cnJlbnQvcmVmLW1hbnVhbC9yZWYtbWFudWFsLmh0bWwjdmFyLXt7dmFyaWFibGUudmFyaWFibGVfbmFtZXx2YXJpYWJsZV9wYXJlbnRfbmFtZX19IiB0YXJnZXQ9Il9ibGFuayI+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tc2hhcmUgZ2V0LWluZm8iPjwvaT48L2E+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICA8L3RkPgorICAgIDwvdHI+Cit7JSBlbmRmb3IgJX0KKworeyUgaW5jbHVkZSAiYmFzZXRhYmxlX2JvdHRvbS5odG1sIiAlfQoreyUgZW5kaWYgJX0KKzwvZGl2PiA8IS0tIGVuZHZhcmlhYmxlcyAtLT4KKworPCEtLSBmaWxlIGxpc3QgcG9wdXBzIC0tPgoreyUgZm9yIHZhcmlhYmxlIGluIG9iamVjdHMgJX0KKyAgICB7JSBpZiB2YXJpYWJsZS52aGlzdG9yeS5jb3VudCAlfQorICAgIDxkaXYgaWQ9InZhcmlhYmxlLXt7dmFyaWFibGUucGt9fSIgY2xhc3M9Im1vZGFsIGhpZGUgZmFkZSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciPgorICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgorICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1oaWRkZW49InRydWUiPng8L2J1dHRvbj4KKyAgICAgICAgICAgIDxoMz5IaXN0b3J5IG9mIHt7dmFyaWFibGUudmFyaWFibGVfbmFtZX19PC9oMz4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorICAgICAgICAgICAgeyUgaWYgdmFyaWFibGUudmFyaWFibGVfdmFsdWUgJX0KKyAgICAgICAgICAgICAgeyUgaWYgdmFyaWFibGUudmFyaWFibGVfdmFsdWV8bGVuZ3RoIDwgNTcwICV9CisgICAgICAgICAgICAgICAgPGg0Pnt7dmFyaWFibGUudmFyaWFibGVfbmFtZX19IHZhbHVlIGlzOjwvaDQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICAgIHt7dmFyaWFibGUudmFyaWFibGVfdmFsdWV9fQorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgIDxoND57e3ZhcmlhYmxlLnZhcmlhYmxlX25hbWV9fSB2YWx1ZSBpczo8L2g0PgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e3ZhcmlhYmxlLnZhcmlhYmxlX3ZhbHVlfHN0cmluZ19zbGljZTonOjU3MCd9fQorICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZ1bGwiPiB7e3ZhcmlhYmxlLnZhcmlhYmxlX3ZhbHVlfHN0cmluZ19zbGljZTonNTcwOid9fQorICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biBidG4tbWluaSBmdWxsLXNob3ciPi4uLjwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi1taW5pIGZ1bGwtaGlkZSI+Q29sbGFwc2UgdmFyaWFibGUgdmFsdWUgPGkgY2xhc3M9Imljb24tY2FyZXQtdXAiPjwvaT4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyI+VGhlIHZhbHVlIG9mIDxzdHJvbmc+e3t2YXJpYWJsZS52YXJpYWJsZV9uYW1lfX08L3N0cm9uZz4gaXMgYW4gZW1wdHkgc3RyaW5nPC9kaXY+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPGg0PlRoZSB2YWx1ZSB3YXMgc2V0IGluIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBmaWxlczo8L2g0PgorICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciI+CisgICAgICAgICAgICAgICAgPHRoZWFkPgorICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGg+T3JkZXI8L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkNvbmZpZ3VyYXRpb24gZmlsZTwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGg+T3BlcmF0aW9uPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5MaW5lIG51bWJlcjwvdGg+CisgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgPC90aGVhZD4KKyAgICAgICAgICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICAgICAgICAgIHslIGZvciB2aCBpbiB2YXJpYWJsZS52aGlzdG9yeS5hbGwgJX0KKyAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7Zm9ybG9vcC5jb3VudGVyfX08L3RkPjx0ZD57e3ZoLmZpbGVfbmFtZX19PC90ZD48dGQ+e3t2aC5vcGVyYXRpb259fTwvdGQ+PHRkPnt7dmgubGluZV9udW1iZXJ9fTwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICAgIHslZW5kZm9yJX0KKyAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgICAgeyUgZW5kaWYgJX0KK3slIGVuZGZvciAlfQorCis8L2Rpdj4gPCEtLSBidWlsZGluZm9tYWluIC0tPgorCit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2NwdXVzYWdlLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvY3B1dXNhZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmYwN2I3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2NwdXVzYWdlLmh0bWwKQEAgLTAsMCArMSw0IEBACit7JSBleHRlbmRzICJiYXNlYnVpbGRwYWdlLmh0bWwiICV9Cit7JSBibG9jayBsb2NhbGJyZWFkY3J1bWIgJX0KKzxsaT5DcHUgVXNhZ2U8L2xpPgoreyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kZXRhaWxfcGFnaW5hdGlvbl9ib3R0b20uaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kZXRhaWxfcGFnaW5hdGlvbl9ib3R0b20uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDBjMjFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2RldGFpbF9wYWdpbmF0aW9uX2JvdHRvbS5odG1sCkBAIC0wLDAgKzEsNTUgQEAKK3slIGNvbW1lbnQgJX0KKyAgICBTaG93IHBhZ2luYXRpb24gY29udHJvbHMgYXMgcGVyIHNlYXJjaC9wYWdpbmF0aW9uIHRhYmxlIGRldGFpbCBzcGVjLgorICAgIElucHV0OiBvYmplY3RzLCBzZXR1cCBmb3IgcGFnaW5hdGlvbiB1c2luZyB0aGUgc3RhbmRhcmQgbWV0aG9kIGluIHZpZXdzLgorICAgICAgICAgICBvYmplY3RfY291bnQsIGNvdW50IGZvciBjb21wbGV0ZSBsaXN0IG9mIG9iamVjdHMsIChhbGwgcGFnZXMsIG5vIHBhdHRlcm4pCit7JSBlbmRjb21tZW50ICV9CisKK3sjIG9ubHkgcGFnaW5hdGUgaWYgMTAgb3IgbW9yZSByb3dzIHVuZmlsdGVyZWQsIGFsbCBwYWdlcyAjfQoreyUgaWYgb2JqZWN0X2NvdW50ID49IDEwICV9Cis8ZGl2IGNsYXNzPSJwYWdpbmF0aW9uIj4KKyAgPHVsPgoreyVpZiBvYmplY3RzLmhhc19wcmV2aW91cyAlfQorICAgIDxsaT48YSBocmVmPSJqYXZhc2NyaXB0OnJlbG9hZF9wYXJhbXMoeydwYWdlJzp7e29iamVjdHMucHJldmlvdXNfcGFnZV9udW1iZXJ9fX0pIj4mbGFxdW87PC9hPjwvbGk+Cit7JWVsc2UlfQorICAgIDxsaSBjbGFzcz0iZGlzYWJsZWQiPjxhIGhyZWY9IiMiPiZsYXF1bzs8L2E+PC9saT4KK3slZW5kaWYlfQoreyUgZm9yIGkgaW4gb2JqZWN0cy5wYWdlX3JhbmdlICV9CisgICAgPGxpeyVpZiBpID09IG9iamVjdHMubnVtYmVyICV9IGNsYXNzPSJhY3RpdmUiIHslZW5kaWYlfT48YSBocmVmPSJqYXZhc2NyaXB0OnJlbG9hZF9wYXJhbXMoeydwYWdlJzp7e2l9fX0pIj57e2l9fTwvYT48L2xpPgoreyUgZW5kZm9yICV9Cit7JWlmIG9iamVjdHMuaGFzX25leHQlfQorICAgIDxsaT48YSBocmVmPSJqYXZhc2NyaXB0OnJlbG9hZF9wYXJhbXMoeydwYWdlJzp7e29iamVjdHMubmV4dF9wYWdlX251bWJlcn19fSkiPiZyYXF1bzs8L2E+PC9saT4KK3slZWxzZSV9CisgICAgPGxpIGNsYXNzPSJkaXNhYmxlZCI+PGEgaHJlZj0iIyI+JnJhcXVvOzwvYT48L2xpPgoreyVlbmRpZiV9CisgIDwvdWw+CisKKyAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+CisgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBzdHlsZT0icGFkZGluZy1ib3R0b206MTBweDsiPlNob3cgcm93czo8L3NwYW4+CisgICAgPHNlbGVjdCBjbGFzcz0icGFnZXNpemUiPgorICAgICAgeyUgd2l0aCAiMTAgMjUgNTAgMTAwIDE1MCIgYXMgbGlzdCV9CisgICAgICAgIHslIGZvciBpIGluIGxpc3Quc3BsaXQgJX0KKyAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ7e2l9fSI+e3tpfX08L29wdGlvbj4KKyAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICB7JSBlbmR3aXRoICV9CisgICAgPC9zZWxlY3Q+CisgIDwvZGl2PgorPC9kaXY+CisKKzwhLS0gVXBkYXRlIHBhZ2UgZGlzcGxheSBzZXR0aW5ncyAtLT4KKzxzY3JpcHQ+CisgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CisgICAgLy8gbG9hZCBkYXRhIGZvciBudW1iZXIgb2YgZW50cmllcyB0byBiZSBkaXNwbGF5ZWQgb24gcGFnZQorICAgIGlmICh7e3JlcXVlc3QuR0VULmNvdW50fX0gIT0gIiIpIHsKKyAgICAgIHBhZ2VzaXplID0ge3tyZXF1ZXN0LkdFVC5jb3VudH19OworICAgIH0KKyAgICAkKCcucGFnZXNpemUgb3B0aW9uJykucHJvcCgnc2VsZWN0ZWQnLCBmYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKCdbdmFsdWU9IicgKyBwYWdlc2l6ZSArICciXScpCisgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3NlbGVjdGVkJywgdHJ1ZSk7CisKKyAgICAkKCIucGFnZXNpemUiKS5jaGFuZ2UoZnVuY3Rpb24gKCkgeworICAgICAgICByZWxvYWRfcGFyYW1zKHsiY291bnQiOiQodGhpcykudmFsKCl9KTsKKyAgICB9KTsKK30pOworPC9zY3JpcHQ+Cit7JSBlbmRpZiAlfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGV0YWlsX3NlYXJjaF9oZWFkZXIuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kZXRhaWxfc2VhcmNoX2hlYWRlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZWEzZjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGV0YWlsX3NlYXJjaF9oZWFkZXIuaHRtbApAQCAtMCwwICsxLDY4IEBACit7JSBjb21tZW50ICV9CisgIFNob3cgYSBkZXRhaWwgdGFibGUgU2VhcmNoIGZpZWxkIGFuZCBSb3dzIHBlciBwYWdlLgorICBJbnB1dDoKKyAgICBvYmplY3RzLCBvdXIgYm9pbGVycGxhdGVkIHBhZ2luYXRlZCB3aXRoIHNlYXJjaCBmaWVsZHMgc2V0LgorICAgIG9iamVjdF9jb3VudCwgY291bnQgb2YgZnVsbCwgdW5maWx0ZXJlZCwgb2JqZWN0cyBsaXN0CisgICAgc2VhcmNoX3doYXQsIGZpbGxzIGluICJTZWFyY2ggX19fIgorICBPbmx5IHNob3cgdGhlIHNlYXJjaCBmb3JtIGlmIHdlIGhhdmUgbW9yZSB0aGFuIDEwIHJlc3VsdHMsCisgIG9yIGlmIHJldHVybiBmcm9tIGEgcHJldmlvdXMgc2VhcmNoLgoreyUgZW5kY29tbWVudCAlfQorCisKKzxzY3JpcHQ+CiskKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKKyAgLyogQ2xlYXIgdGhlIGN1cnJlbnQgc2VhcmNoIHNlbGVjdGlvbiBhbmQgcmVsb2FkIHRoZSByZXN1bHRzICovCisgICQoIi5zZWFyY2gtY2xlYXIiKS5jbGljayhmdW5jdGlvbigpeworICAgICQoIiNzZWFyY2giKS52YWwoIiIpOworICAgICQodGhpcykucGFyZW50cygiZm9ybSIpLnN1Ym1pdCgpOworICB9KTsKK30pOworPC9zY3JpcHQ+Cis8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgoreyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAxMCBvciByZXF1ZXN0LkdFVC5zZWFyY2ggJX0KKyAgeyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICA8ZGl2IGNsYXNzPSJhbGVydCI+CisgICAgPGgzPk5vIHt7c2VhcmNoX3doYXR9fSBmb3VuZDwvaDM+CisgICAgPGZvcm0gaWQ9InNlYXJjaGZvcm0iIGNsYXNzPSJpbnB1dC1hcHBlbmQiPgorICB7JSBlbHNlICV9CisgICAgPGZvcm0gaWQ9InNlYXJjaGZvcm0iIGNsYXNzPSJuYXZiYXItc2VhcmNoIGlucHV0LWFwcGVuZCBwdWxsLWxlZnQiPgorICB7JSBlbmRpZiAlfQorCisgICAgICA8aW5wdXQgaWQ9InNlYXJjaCIgY2xhc3M9ImlucHV0LXhsYXJnZSIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IlNlYXJjaCB7e3NlYXJjaF93aGF0fX0iIG5hbWU9InNlYXJjaCIgdmFsdWU9InslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfXt7cmVxdWVzdC5HRVQuc2VhcmNofX17JSBlbmRpZiAlfSI+CisgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiB2YWx1ZT0ibmFtZTorIiBuYW1lPSJvcmRlcmJ5Ij4KKyAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIHZhbHVlPSJsIiBuYW1lPSJwYWdlIj4KKyAgeyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9CisgICAgICA8YSBjbGFzcz0iYWRkLW9uIGJ0biBzZWFyY2gtY2xlYXIiPgorICAgICAgICA8aSBjbGFzcz0iaWNvbi1yZW1vdmUiPjwvaT4KKyAgICAgIDwvYT4KKyAgeyUgZW5kaWYgJX0KKyAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIj5TZWFyY2g8L2J1dHRvbj4KKyAgeyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLWxpbmsgc2VhcmNoLWNsZWFyIj4KKyAgICAgICAgU2hvdyBhbGwge3tzZWFyY2hfd2hhdH19CisgICAgICA8L2J1dHRvbj4KKyAgeyUgZW5kaWYgJX0KKyAgICA8L2Zvcm0+Cit7JSBlbmRpZiAlfQorCit7JSBpZiBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgIDwvZGl2PiB7IyBlbmQgYWxlcnQgI30KK3slIGVsc2UgJX0KKyAgeyUgaWYgb2JqZWN0X2NvdW50ID4gMTAgJX0KKyAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+CisgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBzdHlsZT0icGFkZGluZy10b3A6NXB4OyI+U2hvdyByb3dzOjwvc3Bhbj4KKyAgICA8c2VsZWN0IHN0eWxlPSJtYXJnaW4tdG9wOjVweDttYXJnaW4tYm90dG9tOjBweDsiIGNsYXNzPSJwYWdlc2l6ZSI+CisgICAgeyUgd2l0aCAiMTAgMjUgNTAgMTAwIDE1MCIgYXMgbGlzdCV9CisgICAgICB7JSBmb3IgaSBpbiBsaXN0LnNwbGl0ICV9CisgICAgICAgIHslIGlmIHJlcXVlc3Quc2Vzc2lvbi5saW1pdCA9PSBpICV9CisgICAgICA8b3B0aW9uIHZhbHVlPSJ7e2l9fSIgc2VsZWN0ZWQ+e3tpfX08L29wdGlvbj4KKyAgICAgICAgeyUgZWxzZSAlfQorICAgICAgPG9wdGlvbiB2YWx1ZT0ie3tpfX0iPnt7aX19PC9vcHRpb24+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICB7JSBlbmRmb3IgJX0KKyAgICB7JSBlbmR3aXRoICV9CisgICAgPC9zZWxlY3Q+CisgIDwvZGl2PgorICB7JSBlbmRpZiAlfQoreyUgZW5kaWYgJX0KKzwvZGl2PiB7IyByb3ctZmx1aWQgI30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kZXRhaWxfc29ydGVkX2hlYWRlci5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2RldGFpbF9zb3J0ZWRfaGVhZGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNlMjkyZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kZXRhaWxfc29ydGVkX2hlYWRlci5odG1sCkBAIC0wLDAgKzEsMjUgQEAKK3slIGNvbW1lbnQgJX0KKyAgICBBZGRzIHNvcnRlZCBjb2x1bW5zIHRvIGEgZGV0YWlsIHRhYmxlLgorICAgIE11c3QgYmUgcHJlY2VkZWQgYnkgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciB0YWJsZXNvcnRlciIgaWQ9Im90YWJsZSI+CisgICAgTXVzdCBiZSBmb2xsb3dlZCBieSA8dGJvZHk+Li4uPC90Ym9keT48L3RhYmxlPi4KKyAgICBSZXF1aXJlcyB0YWJsZWNvbHMgc2V0dXAgY29sdW1uIGZpZWxkcyBkY2xhc3MsIGNsY2xhc3MsIHFoZWxwLCBvcmRlcmZpZWxkLgoreyUgZW5kY29tbWVudCAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQoreyMgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciB0YWJsZXNvcnRlciIgaWQ9Im90YWJsZSI+ICN9CisgICAgPHRoZWFkPgorICAgICAgICA8IS0tIFRhYmxlIGhlYWRlciByb3c7IGdlbmVyYXRlZCBmcm9tICJ0YWJsZWNvbHMiIGVudHJ5IGluIHRoZSBjb250ZXh0IGRpY3QgLS0+CisgICAgICAgIDx0cj4KKyAgICAgICAgICAgIHslIGZvciB0YyBpbiB0YWJsZWNvbHMgJX08dGggY2xhc3M9InslaWYgdGMuZGNsYXNzJX17e3RjLmRjbGFzc319eyUgZW5kaWYgJX0geyVpZiB0Yy5jbGFzcyAlfXt7dGMuY2xjbGFzc319eyUgZW5kaWYgJX0iPgorICAgICAgICAgICAgICAgIHslaWYgdGMucWhlbHAlfTxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJ7e3RjLnFoZWxwfX0iPjwvaT57JWVuZGlmJX0KKyAgICAgICAgICAgICAgICB7JWlmIHRjLm9yZGVyZmllbGQlfTxhIHslaWYgdGMub3JkZXJpY29uJX0gY2xhc3M9InNvcnRlZCIgeyVlbmRpZiV9aHJlZj0iamF2YXNjcmlwdDpyZWxvYWRfcGFyYW1zKHsncGFnZSc6IDEsICdvcmRlcmJ5JyA6ICd7e3RjLm9yZGVyZmllbGR9fScgfSkiPnt7dGMubmFtZX19PC9hPnslZWxzZSV9PHNwYW4gY2xhc3M9Im11dGVkIj57e3RjLm5hbWV9fTwvc3Bhbj57JWVuZGlmJX0KKyAgICAgICAgICAgICAgICB7JWlmIHRjLm9yZGVyaWNvbiV9IDxpIGNsYXNzPSJpY29uLWNhcmV0LXt7dGMub3JkZXJpY29ufX0iPjwvaT57JWVuZGlmJX0KKyAgICAgICAgICAgICAgICB7JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIGZvcmxvb3AuZmlyc3QgJX0KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJhZGdlIGJhZGdlLWluZm8iPnt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR9fTwvc3Bhbj4KKyAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICAgIHslaWYgdGMuZmlsdGVyJX08ZGl2IGNsYXNzPSJidG4tZ3JvdXAgcHVsbC1yaWdodCI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNmaWx0ZXJfe3t0Yy5maWx0ZXIuY2xhc3N9fSIgcm9sZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1taW5pIHslaWYgcmVxdWVzdC5HRVQuZmlsdGVyJX17e3RjLmZpbHRlci5vcHRpb25zfGZpbHRlcmVkX2ljb246cmVxdWVzdC5HRVQuZmlsdGVyfX0geyVlbmRpZiV9IiB7JWlmIHJlcXVlc3QuR0VULmZpbHRlciBhbmQgdGMuZmlsdGVyLm9wdGlvbnN8ZmlsdGVyZWRfdG9vbHRpcDpyZXF1ZXN0LkdFVC5maWx0ZXIgJX0gdGl0bGU9IjxwPnt7dGMuZmlsdGVyLm9wdGlvbnN8ZmlsdGVyZWRfdG9vbHRpcDpyZXF1ZXN0LkdFVC5maWx0ZXJ9fTwvcD48cD48YSBjbGFzcz0nYnRuIGJ0bi1zbWFsbCBidG4tcHJpbWFyeScgaHJlZj1qYXZhc2NyaXB0OnJlbG9hZF9wYXJhbXMoeydmaWx0ZXInOicnfSk+U2hvdyBhbGwgeyUgaWYgZmlsdGVyX3NlYXJjaF9kaXNwbGF5ICV9e3tmaWx0ZXJfc2VhcmNoX2Rpc3BsYXl9fXslIGVsc2UgJX17e29iamVjdG5hbWV9fXslIGVuZGlmICV9PC9hPjwvcD4iIHslZW5kaWYlfSBkYXRhLXRvZ2dsZT0ibW9kYWwiPiA8aSBjbGFzcz0iaWNvbi1maWx0ZXIgZmlsdGVyZWQiPjwvaT4gPC9hPgorICAgICAgICAgICAgICAgIDwvZGl2PnslZW5kaWYlfQorICAgICAgICAgICAgPC90aD57JSBlbmRmb3IgJX0KKyAgICAgICAgPC90cj4KKyAgICA8L3RoZWFkPgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGlyaW5mby5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2RpcmluZm8uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWJjNDgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2RpcmluZm8uaHRtbApAQCAtMCwwICsxLDIzNiBAQAoreyUgZXh0ZW5kcyAiYmFzZWJ1aWxkcGFnZS5odG1sIiAlfQoreyUgYmxvY2sgZXh0cmFoZWFkY29udGVudCAlfQoreyUgbG9hZCBzdGF0aWMgJX0KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ieyUgc3RhdGljICdjc3MvanF1ZXJ5LnRyZWV0YWJsZS5jc3MnICV9IiB0eXBlPSJ0ZXh0L2NzcyI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InslIHN0YXRpYyAnY3NzL2pxdWVyeS50cmVldGFibGUudGhlbWUudG9hc3Rlci5jc3MnICV9IiB0eXBlPSJ0ZXh0L2NzcyI+Cit7JSBlbmRibG9jayBleHRyYWhlYWRjb250ZW50ICV9CisKK3slIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfQorPGxpPnt7dGFyZ2V0LnRhcmdldH19PC9saT4KK3slIGVuZGJsb2NrIGxvY2FsYnJlYWRjcnVtYiV9CisKK3slIGJsb2NrIGJ1aWxkaW5mb21haW4gJX0KKworeyUgbG9hZCBzdGF0aWMgJX0KKzxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL2pxdWVyeS50cmVldGFibGUuanMnICV9Ij4KKzwvc2NyaXB0PgoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCis8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+CisgICAgZnVuY3Rpb24gc2V0dXBUcmVldGFibGUoKSB7CisgICAgICAgICQoIiNkaXJ0YWJsZSIpLnRyZWV0YWJsZSh7CisgICAgICAgICAgICBleHBhbmRhYmxlOiB0cnVlLAorICAgICAgICAgICAgYnJhbmNoQXR0cjogInR0QnJhbmNoIiwKKyAgICAgICAgICAgIGNsaWNrYWJsZU5vZGVOYW1lczogdHJ1ZSwKKyAgICAgICAgICAgIG9uTm9kZUNvbGxhcHNlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAvKiBEbyBub3RoaW5nLCBrZWVwIGNhY2hlZCAqLworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIG9uTm9kZUV4cGFuZDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5pZDsKKyAgICAgICAgICAgICAgICB2YXIgbiA9ICQoIiNkaXJ0YWJsZSIpLnRyZWV0YWJsZSgibm9kZSIsIHN0YXJ0KTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIGFscmVhZHkgd2FzIGV4cGFuZGVkIG9uY2UgKi8KKyAgICAgICAgICAgICAgICAgICAgJCgiI2RpcnRhYmxlIikudHJlZXRhYmxlKCJyZXZlYWwiLCBzdGFydCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gInslIHVybCAiZGlyaW5mb19hamF4IiBidWlsZC5pZCB0YXJnZXQuaWQgICV9IjsKKyAgICAgICAgICAgICAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgICAgOiAiR0VUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVybCAgICAgOiB1cmwsCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhICAgIDogInN0YXJ0PSIgKyBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgOiBmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJvd3MobiwgcmVzcG9uc2UpCisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgICA6IGZ1bmN0aW9uKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93biApIHthbGVydCh0ZXh0U3RhdHVzICsgIjoiICsgZXJyb3JUaHJvd24pfSwKKyAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9LAorICAgICAgIH0pOworICAgIH0KKyAgICBmdW5jdGlvbiB0ZChkYXRhKSB7CisgICAgICAgIGlmIChkYXRhID09IG51bGwpIHsKKyAgICAgICAgICAgIGRhdGEgPSAnJzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gJzx0ZD4nICsgZGF0YSArICc8L3RkPicKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmb3JtYXRSb3cobykgeworICAgICAgICAvKiBzZXR1cCB0ci13aWRlIGZvcm1hdHRpbmcgKi8KKyAgICAgICAgdmFyIHRyID0gJzx0ciBjbGFzcz0iJzsKKyAgICAgICAgaWYgKG8ubGlua190byAhPSBudWxsKSB7CisgICAgICAgICAgICB0ciArPSAnbXV0ZWQgJzsKKyAgICAgICAgfQorICAgICAgICBpZiAoby5pc2RpciAmJiBvLmNoaWxkY291bnQpIHsKKyAgICAgICAgICAgIHRyICs9ICdicmFuY2giIGRhdGEtdHQtYnJhbmNoPSJ0cnVlIiAnOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdHIgKz0gJ2xlYWYiIGRhdGEtdHQtYnJhbmNoPSJmYWxzZSIgJzsKKyAgICAgICAgfQorICAgICAgICB0ciArPSAgICAnIGRhdGEtdHQtaWQ9IicgKyBvLmZ1bGxwYXRoICsnIiAnOworICAgICAgICBpZiAoby5wYXJlbnQgIT0gIi8iKSB7CisgICAgICAgICAgICB0ciArPSAgICAnIGRhdGEtdHQtcGFyZW50LWlkPSInICsgby5wYXJlbnQgKyciICc7CisgICAgICAgIH0KKyAgICAgICAgdHIgKz0gJz4nOworCisgICAgICAgIC8qIHNldHVwIHRkIHNwZWNpZmljIGZvcm1hdHRpbmcgKi8KKyAgICAgICAgdmFyIGxpbmtfdG8gPSB0ZChvLmxpbmtfdG8pOworICAgICAgICB2YXIgc2l6ZSA9ICc8dGQgY2xhc3MgPSAic2l6ZWNvbCI+JyArIG8uc2l6ZSArICc8L3RkPicKKyAgICAgICAgdmFyIHBlcm1pc3Npb24gPSB0ZChvLnBlcm1pc3Npb24pOworICAgICAgICB2YXIgb3duZXIgPSB0ZChvLm93bmVyKTsKKyAgICAgICAgdmFyIGdyb3VwID0gdGQoby5ncm91cCk7CisKKyAgICAgICAgLyogaGFuZGxlIHRoZSBuYW1lIGNvbHVtbiAqLworICAgICAgICB2YXIgbmFtZSA9IG51bGw7OworICAgICAgICB2YXIgbmFtZXNwYW49MTsKKyAgICAgICAgaWYgKG8uaXNkaXIpIHsKKyAgICAgICAgICAgIGlmIChvLmxpbmtfdG8gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG5hbWVzcGFuID0gMjsKKyAgICAgICAgICAgICAgICBpZiAoby5wYWNrYWdlID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgbmFtZXNwYW4gPSAzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBjb2xzcGFuID0gJ2NvbHNwYW49IicgKyBuYW1lc3BhbiArICciJzsKKyAgICAgICAgICAgIG5hbWUgPSAnPHRkIGNsYXNzPSJjb250ZW50LWRpcmVjdG9yeSInICsgY29sc3BhbiArICc+JzsKKyAgICAgICAgICAgIGlmIChvLmNoaWxkY291bnQpIHsKKyAgICAgICAgICAgICAgICBuYW1lICs9ICc8YSBocmVmPSIiPic7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBuYW1lICs9ICc8aSBjbGFzcz0iaWNvbi1mb2xkZXItY2xvc2UiPjwvaT4nOworICAgICAgICAgICAgbmFtZSArPSAnJm5ic3A7JyArIG8ubmFtZTsKKyAgICAgICAgICAgIGlmIChvLmNoaWxkY291bnQpIHsKKyAgICAgICAgICAgICAgICBuYW1lICs9ICc8L2E+JzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5hbWUgKz0gJzwvdGQ+JzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG5hbWUgPSAnPHRkPic7CisgICAgICAgICAgICBpZiAoby5saW5rX3RvID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBuYW1lICs9ICc8aSBjbGFzcz0iaWNvbi1maWxlIj48L2k+JzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG5hbWUgKz0gJzxpIGNsYXNzPSJpY29uLWhhbmQtcmlnaHQiPjwvaT4nOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbmFtZSArPSAnJm5ic3A7JyArIG8ubmFtZTsKKyAgICAgICAgICAgIG5hbWUgKz0gJzwvdGQ+JzsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGhhbmRsZSB0aGUgcGFja2FnZSBjb2x1bW4gKi8KKyAgICAgICAgdmFyIHBhY2thZ2UgPSBudWxsOworICAgICAgICBpZiAoby5wYWNrYWdlICE9IG51bGwpIHsKKyAgICAgICAgICAgIC8qIGFkZCBsaW5rIHRvIGluY2x1ZGVkIHBhY2thZ2UgcGFnZSAqLworICAgICAgICAgICAgYnVpbGRfaWQgPSB7eyBidWlsZC5pZCB9fTsKKyAgICAgICAgICAgIHRhcmdldF9pZCA9IHt7IHRhcmdldC5pZCB9fTsKKyAgICAgICAgICAgIC8qIENyZWF0ZSBhIHVybCBmb3IgYSBkdW1teSBwYWNrYWdlIGlkIG9mIDAgKi8KKyAgICAgICAgICAgIGR1bW15ID0gInslIHVybCAncGFja2FnZV9pbmNsdWRlZF9kZXRhaWwnIGJ1aWxkLmlkIHRhcmdldC5pZCAwICV9IgorICAgICAgICAgICAgLyogZmlsbCBpbiB0aGUgcGFja2FnZSBpZCAqLworICAgICAgICAgICAgdXJsID0gZHVtbXkuc3Vic3RyKDAsIGR1bW15Lmxlbmd0aC0xKSArIG8ucGFja2FnZV9pZDsKKyAgICAgICAgICAgIHBhY2thZ2UgPSAnPGEgaHJlZj0nICsgdXJsICsgJz4nIDsKKyAgICAgICAgICAgIHBhY2thZ2UgKz0gby5wYWNrYWdlOworICAgICAgICAgICAgcGFja2FnZSArPSAnPC9hPic7CisgICAgICAgICAgICBpZiAoby5pbnN0YWxsZWRfcGFja2FnZSAhPSBvLnBhY2thZ2UpIHsKKyAgICAgICAgICAgICAgICAvKiBtYWtlIGNsYXNzIG11dGVkIGFuZCBhZGQgaG92ZXIgaGVscCAqLworICAgICAgICAgICAgICAgIHBhY2thZ2UgKz0gJzxzcGFuIGNsYXNzPSJtdXRlZCI+IGFzICcgKyBvLmluc3RhbGxlZF9wYWNrYWdlICsgJyA8L3NwYW4+JzsKKyAgICAgICAgICAgICAgICBwYWNrYWdlICs9ICc8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiICc7CisgICAgICAgICAgICAgICAgcGFja2FnZSArPSAndGl0bGU9IicgKyBvLnBhY2thZ2UgKyAnIHdhcyByZW5hbWVkIGF0IHBhY2thZ2luZyB0aW1lIGFuZCB3YXMgaW5zdGFsbGVkIGluIHlvdXIgaW1hZ2UgYXMgJyArIG8uaW5zdGFsbGVkX3BhY2thZ2UgKyAnIj4nOworICAgICAgICAgICAgICAgIHBhY2thZ2UgKz0gJzwvaT4nOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHBhY2thZ2UgPSB0ZChwYWNrYWdlKTsKKworICAgICAgICB2YXIgY29sczF0bzM7CisgICAgICAgIHN3aXRjaCAobmFtZXNwYW4pIHsKKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICBjb2xzMXRvMyA9IG5hbWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICAyOgorICAgICAgICAgICAgICAgIGNvbHMxdG8zID0gbmFtZSArIHBhY2thZ2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGNvbHMxdG8zID0gbmFtZSArIGxpbmtfdG8gKyBwYWNrYWdlOworICAgICAgICB9CisgICAgICAgIHIgPSB0ciArIGNvbHMxdG8zICsgc2l6ZSArIHBlcm1pc3Npb24gKyBvd25lciArIGdyb3VwICsgIjwvdHI+IgorICAgICAgICByZXR1cm4gcjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBhZGRSb3dzKG4sIG9ianMpIHsKKyAgICAgICAgcm93cyA9ICIiOworICAgICAgICBmb3IgKGk9MDsgaTxvYmpzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICByb3dzICs9IGZvcm1hdFJvdyhvYmpzW2ldKTsKKyAgICAgICAgfQorICAgICAgICAkKCIjZGlydGFibGUiKS50cmVldGFibGUoImxvYWRCcmFuY2giLCBuLCByb3dzKTsKKyAgICB9CisKKyAgICAkLmZuLmlzT2ZmU2NyZWVuID0gZnVuY3Rpb24oKXsKKyAgICAgICAgdmFyIHdpbiA9ICQod2luZG93KTsKKyAgICAgICAgdmlld3BvcnRCb3R0b20gPSB3aW4uc2Nyb2xsVG9wKCkgKyB3aW4uaGVpZ2h0KCk7CisgICAgICAgIAorICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5vZmZzZXQoKTsKKyAgICAgICAgYm91bmRzLmJvdHRvbSA9IGJvdW5kcy50b3AgKyB0aGlzLm91dGVySGVpZ2h0KCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gKGJvdW5kcy5ib3R0b20gPiB2aWV3cG9ydEJvdHRvbSk7CisgICAgfTsKKworICAgIGZ1bmN0aW9uIHNlbGVjdFJvdyhwYXRoKSB7CisgICAgICAgIHZhciByb3cgID0gJCgndHJbZGF0YS10dC1pZD0iJyArIHBhdGggKyAnIl0nKTsKKyAgICAgICAgcm93LmFkZENsYXNzKCIgaGlnaGxpZ2h0Iik7CisgICAgICAgIGlmIChyb3cuaXNPZmZTY3JlZW4oKSkgeworICAgICAgICAgICAgJCgnaHRtbCwgYm9keScpLmFuaW1hdGUoeyBzY3JvbGxUb3A6IHJvdy5vZmZzZXQoKS50b3AgLSAxNTB9LCAyMDAwKTsKKyAgICAgICAgfQorICAgIH0KKzwvc2NyaXB0PgorCis8ZGl2IGNsYXNzPSJzcGFuMTAiPgorCisgICAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICAgICAgICA8aDE+IHt7dGFyZ2V0LnRhcmdldH19IDwvaDE+CisgICAgPC9kaXY+CisKKyAgICA8dWwgY2xhc3M9Im5hdiBuYXYtcGlsbHMiPgorICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3RhcmdldCcgYnVpbGQuaWQgdGFyZ2V0LmlkICV9Ij4KKyAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJPZiBhbGwgdGhlIHBhY2thZ2VzIGJ1aWx0LCB0aGUgc3Vic2V0IGluc3RhbGxlZCBpbiB0aGUgcm9vdCBmaWxlIHN5c3RlbSBvZiB0aGlzIGltYWdlIj48L2k+CisgICAgICAgICAgICAgICAgUGFja2FnZXMgaW5jbHVkZWQgKHt7dGFyZ2V0LnBhY2thZ2VfY291bnR9fSAtIHt7cGFja2FnZXNfc3VtfGZpbHRlcmVkX2ZpbGVzaXplZm9ybWF0fX0pCisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj4KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnZGlyaW5mbycgYnVpbGQuaWQgdGFyZ2V0LmlkICV9Ij4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIGRpcmVjdG9yaWVzIGFuZCBmaWxlcyBpbiB0aGUgcm9vdCBmaWxlIHN5c3RlbSBvZiB0aGlzIGltYWdlIj48L2k+CisgICAgICAgICAgICAgICAgRGlyZWN0b3J5IHN0cnVjdHVyZQorICAgICAgICAgICAgPC9hPgorICAgICAgICA8L2xpPgorICAgIDwvdWw+CisKKyAgICA8ZGl2IGlkPSJkaXJlY3Rvcnktc3RydWN0dXJlIiBjbGFzcz0idGFiLXBhbmUgYWN0aXZlIj4KKyAgICAgICAgPHRhYmxlIGlkPSJkaXJ0YWJsZSIgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRyZWV0YWJsZSI+CisgICAgICAgICAgICA8dGhlYWQ+CisgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICA8dGg+RGlyZWN0b3J5IC8gRmlsZTwvdGg+CisgICAgICAgICAgICAgICAgICAgIDx0aD5TeW1ib2xpYyBsaW5rIHRvPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPHRoPlNvdXJjZSBwYWNrYWdlPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPHRoPlNpemU8L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGg+UGVybWlzc2lvbnM8L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGg+T3duZXI8L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGg+R3JvdXA8L3RoPgorICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICA8L3RoZWFkPgorICAgICAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPgorICAgICAgICAgICAgICAgIHNldHVwVHJlZXRhYmxlKCk7CisgICAgICAgICAgICAgICAgYWRkUm93cyhudWxsLCB7eyBvYmplY3RzfHNhZmUgfX0gKTsKKyAgICAgICAgICAgICAgICB7JSBpZiBmaWxlX3BhdGggJX0KKyAgICAgICAgICAgICAgICAgICAgeyUgY29tbWVudCAlfQorICAgICAgICAgICAgICAgICAgICAgICAgbGluayBmcm9tIHBhY2thZ2VfaW5jbHVkZWRfZGV0YWlsIHNwZWNpZmllcyBmaWxlIHBhdGgKKyAgICAgICAgICAgICAgICAgICAgeyUgZW5kY29tbWVudCAlfQorICAgICAgICAgICAgICAgICAgICB7JSBmb3IgZGlyX2VsZW0gaW4gZGlyX2xpc3QgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICQoIiNkaXJ0YWJsZSIpLnRyZWV0YWJsZSgiZXhwYW5kTm9kZSIsICJ7e2Rpcl9lbGVtfX0iKTsKKyAgICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgICAgIHNlbGVjdFJvdygie3tmaWxlX3BhdGh9fSIpOworICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICA8L3NjcmlwdD4KKyAgICAgICAgICAgIDwvdGJvZHk+CisgICAgICAgIDwvdGFibGU+CisgICAgPC9kaXY+IDwhLS0gZGlyZWN0b3J5LXN0cnVjdHVyZSAtLT4KKzwvZGl2PiA8IS0tIHNwYW4xMCAtLT4KKworeyUgZW5kYmxvY2sgYnVpbGRpbmZvbWFpbiAlfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGlza2lvLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGlza2lvLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVjZWY2ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kaXNraW8uaHRtbApAQCAtMCwwICsxLDQgQEAKK3slIGV4dGVuZHMgImJhc2VidWlsZHBhZ2UuaHRtbCIgJX0KK3slIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfQorPGxpPkRpc2sgSS9PPC9saT4KK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZmlsdGVyc25pcHBldC5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2ZpbHRlcnNuaXBwZXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTAxYWE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2ZpbHRlcnNuaXBwZXQuaHRtbApAQCAtMCwwICsxLDU3IEBACit7JSBsb2FkIHByb2plY3R0YWdzICV9Cis8IS0tICd7e2YuY2xhc3N9fScgZmlsdGVyIC0tPgoreyUgd2l0aCBmLmNsYXNzIGFzICBrZXkgJX0KKzxmb3JtIGlkPSJmaWx0ZXJfe3tmLmNsYXNzfX0iIGNsYXNzPSJtb2RhbCBoaWRlIGZhZGUiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CisgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNlYXJjaCIgdmFsdWU9InslaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9e3tyZXF1ZXN0LkdFVC5zZWFyY2h9fXslZW5kaWYlfSIvPgorICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgorICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1oaWRkZW49InRydWUiPng8L2J1dHRvbj4KKyAgICAgICAgICAgIHslIGlmIHNlYXJjaF90ZXJtICV9CisgICAgICAgICAgICAgICAgIDxoMz5GaWx0ZXIge3t0b3RhbF9jb3VudH19IHslaWYgZmlsdGVyX3NlYXJjaF9kaXNwbGF5JX17e2ZpbHRlcl9zZWFyY2hfZGlzcGxheXx0aXRsZX19eyVlbHNlJX17e29iamVjdG5hbWV8dGl0bGV9fXslZW5kaWYlfSBtYXRjaGluZyAne3tzZWFyY2hfdGVybX19JyBieSAne3t0Yy5uYW1lfX0nPC9oMz4KKyAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICA8aDM+RmlsdGVyIHslaWYgZmlsdGVyX3NlYXJjaF9kaXNwbGF5JX17e2ZpbHRlcl9zZWFyY2hfZGlzcGxheXx0aXRsZX19eyVlbHNlJX17e29iamVjdG5hbWV8dGl0bGV9fXslZW5kaWYlfSBieSAne3t0Yy5uYW1lfX0nPC9oMz4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KKyAgICAgICAgICAgIDxwPnt7Zi5sYWJlbH19PC9wPgorICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJyYWRpbyI+CisgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJmaWx0ZXIiIHslaWYgcmVxdWVzdC5HRVQuZmlsdGVyJX17e2Yub3B0aW9uc3xjaGVja19maWx0ZXJfc3RhdHVzOnJlcXVlc3QuR0VULmZpbHRlcn19IHslZWxzZSV9IGNoZWNrZWQgeyVlbmRpZiV9IHZhbHVlPSIiIGRhdGEta2V5PSJ7e2tleX19Ij4gIEFsbCB7JWlmIGZpbHRlcl9zZWFyY2hfZGlzcGxheSV9e3tmaWx0ZXJfc2VhcmNoX2Rpc3BsYXl8dGl0bGV9fXslZWxzZSV9e3tvYmplY3RuYW1lfHRpdGxlfX17JWVuZGlmJX0KKyAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICB7JSBmb3Igb3B0aW9uIGluIGYub3B0aW9ucyAlfQorICAgICAgICAgICAgICAgIHslIGlmIG9wdGlvbi4xID09ICdkYXRlcmFuZ2UnICV9CisgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWlubGluZSI+CisgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJyYWRpbyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iZmlsdGVyIiBpZD0iZmlsdGVyX3ZhbHVlX3t7a2V5fX0iIHslaWYga2V5ID09IGRhdGVyYW5nZV9zZWxlY3RlZCAlfWNoZWNrZWR7JWVuZGlmJX0gdmFsdWU9Int7b3B0aW9uLjF9fSIgZGF0YS1rZXk9Int7a2V5fX0iPiB7e29wdGlvbi4wfX0KKyAgICAgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgICAgICB7JSBpZiAxICV9CisgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJyYWRpbyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iZmlsdGVyIiB7JWlmIHJlcXVlc3QuR0VULmZpbHRlciA9PSBvcHRpb24uMSAlfWNoZWNrZWR7JWVuZGlmJX0gIHZhbHVlPSJ7e29wdGlvbi4xfX0iIGRhdGEta2V5PSJ7e2tleX19Ij4ge3tvcHRpb24uMH19CisgICAgICAgICAgICAgICAgICB7JSBjb21tZW50ICJkbyBub3QgZGlzYWJsZSByYWRpbyBzZWxlY3Rpb25zIGJ5IGNvdW50IGZvciBub3ciICV9eyUgZWxzZSAlfQorICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0icmFkaW8gbXV0ZWQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9ImZpbHRlciIgZGlzYWJsZWQgeyVpZiByZXF1ZXN0LkdFVC5maWx0ZXIgPT0gb3B0aW9uLjEgJX1jaGVja2VkeyVlbmRpZiV9ICB2YWx1ZT0ie3tvcHRpb24uMX19IiBkYXRhLWtleT0ie3trZXl9fSI+IHt7b3B0aW9uLjB9fQorICAgICAgICAgICAgICAgICAgeyUgZW5kY29tbWVudCAlfXslIGVuZGlmICV9CisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICB7JSBpZiBvcHRpb24uMyAlfTxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIGRhdGEtcGxhY2VtZW50PSJyaWdodCIgdGl0bGU9Int7b3B0aW9uLjN9fSI+PC9pPnslIGVuZGlmICV9CisgICAgICAgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAgICAgIHslIGlmIG9wdGlvbi4xID09ICdkYXRlcmFuZ2UnICV9CisgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImRhdGVfZnJvbV97e2tleX19IiBuYW1lPSJkYXRlX2Zyb21fe3trZXl9fSIgZGlzYWJsZWQgY2xhc3M9ImlucHV0LXNtYWxsIiAvPjxsYWJlbCBjbGFzcz0iaGVscC1pbmxpbmUiPnRvPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZGF0ZV90b197e2tleX19IiBuYW1lPSJkYXRlX3RvX3t7a2V5fX0iIGRpc2FibGVkIGNsYXNzPSJpbnB1dC1zbWFsbCIgIC8+CisgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImhlbHAtaW5saW5lIGdldC1oZWxwIiA+KGRkL21tL3l5eXkpPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgPCEtLSBkYXRlcmFuZ2UgcGVyc2lzdGVuY2UgLS0+CisgICAgICAgIHslIGlmIGxhc3RfZGF0ZV9mcm9tIGFuZCBsYXN0X2RhdGVfdG8gJX0KKyAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9Imxhc3RfZGF0ZV9mcm9tX3t7a2V5fX0iIG5hbWU9Imxhc3RfZGF0ZV9mcm9tIiB2YWx1ZT0ie3tsYXN0X2RhdGVfZnJvbX19Ii8+CisgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJsYXN0X2RhdGVfdG9fe3trZXl9fSIgbmFtZT0ibGFzdF9kYXRlX3RvIiAgIHZhbHVlPSJ7e2xhc3RfZGF0ZV90b319Ii8+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgorICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIGRhdGEta2V5PSJ7e2tleX19Ij5BcHBseTwvYnV0dG9uPgorICAgICAgICAgICAgeyUgaWYgcmVxdWVzdC5HRVQuZmlsdGVyICV9CisgICAgICAgICAgICAgICAgeyUgaWYgcmVxdWVzdC5HRVQuZmlsdGVyfHN0cmluZ19yZW1vdmVfcmVnZXg6JzouKicgIT0gZi5vcHRpb25zLjAuMXxzdHJpbmdfcmVtb3ZlX3JlZ2V4Oic6LionICV9CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIHB1bGwtbGVmdCI+WW91IGNhbiBvbmx5IGFwcGx5IG9uZSBmaWx0ZXIgdG8gdGhlIHRhYmxlLiBUaGlzIGZpbHRlciB3aWxsIG92ZXJyaWRlIHRoZSBjdXJyZW50IGZpbHRlci48L3NwYW4+CisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIDwvZGl2PgorPC9mb3JtPgoreyUgZW5kd2l0aCAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2dlbmVyaWMtdG9hc3RlcnRhYmxlLXBhZ2UuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9nZW5lcmljLXRvYXN0ZXJ0YWJsZS1wYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNhYThjZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9nZW5lcmljLXRvYXN0ZXJ0YWJsZS1wYWdlLmh0bWwKQEAgLTAsMCArMSwxNyBAQAoreyUgZXh0ZW5kcyAiYmFzZXByb2plY3RwYWdlLmh0bWwiICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9Cit7JSBsb2FkIHN0YXRpYyAlfQorCit7JSBibG9jayBwcm9qZWN0aW5mb21haW4gJX0KKworPGgyPnt7dGl0bGV9fSAoPHNwYW4gY2xhc3M9InRhYmxlLWNvdW50LXt7dGFibGVfbmFtZX19Ij48L3NwYW4+KQorICB7JSBpZiBwcm9qZWN0LnJlbGVhc2UgJX0KKyAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBoZWFkaW5nLWhlbHAiIHRpdGxlPSJUaGlzIHBhZ2UgbGlzdHMge3t0aXRsZX19IGNvbXBhdGlibGUgd2l0aCB0aGUgcmVsZWFzZSBzZWxlY3RlZCBmb3IgdGhpcyBwcm9qZWN0LCB3aGljaCBpcyB7e3Byb2plY3QucmVsZWFzZS5kZXNjcmlwdGlvbn19Ij48L2k+CisgIHslIGVuZGlmICV9Cis8L2gyPgorCit7JSB1cmwgdGFibGVfbmFtZSBwcm9qZWN0LmlkIGFzIHhocl90YWJsZV91cmwgJX0KK3slIGluY2x1ZGUgInRvYXN0ZXJ0YWJsZS5odG1sIiAlfQorCit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2ltcG9ydGxheWVyLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvaW1wb3J0bGF5ZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTNkNzI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2ltcG9ydGxheWVyLmh0bWwKQEAgLTAsMCArMSwxMzggQEAKK3slIGV4dGVuZHMgImJhc2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KK3slIGxvYWQgc3RhdGljICV9Cit7JSBibG9jayBwYWdlY29udGVudCAlfQorCit7JSBpbmNsdWRlICJwcm9qZWN0dG9wYmFyLmh0bWwiICV9CisKKworICAgICAgICB7JSBpZiBwcm9qZWN0IGFuZCBwcm9qZWN0LnJlbGVhc2UgJX0KKyAgICAgICAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL2xheWVyRGVwc01vZGFsLmpzJyAlfSI+PC9zY3JpcHQ+CisgICAgICAgICAgICAgICAgICA8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9pbXBvcnRsYXllci5qcycgJX0iPjwvc2NyaXB0PgorICAgICAgICAgICAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCl7CisgICAgICAgICAgICAgICAgICAgICAgdmFyIGN0eCA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHhockltcG9ydExheWVyVXJsIDogInslIHVybCAneGhyX2ltcG9ydGxheWVyJyAlfSIsCisgICAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRMYXllclBhZ2VJbml0KGN0eCk7CisgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQud3JpdGUoIlNvcnJ5LCBBbiBlcnJvciBoYXMgb2NjdXJyZWQgbG9hZGluZyB0aGlzIHBhZ2UiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihlKTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgPC9zY3JpcHQ+CisKKyAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz0ic3BhbjExIj4KKyAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQ+CisgICAgICAgICAgICAgICAgICAgICAgPGxlZ2VuZD5MYXllciByZXBvc2l0b3J5IGluZm9ybWF0aW9uPC9sZWdlbmQ+CisgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtYmxvY2siPlRoZSBsYXllciB5b3UgYXJlIGltcG9ydGluZyBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCA8c3Ryb25nPnt7cHJvamVjdC5yZWxlYXNlLmRlc2NyaXB0aW9ufX08L3N0cm9uZz4sIHdoaWNoIGlzIHRoZSByZWxlYXNlIHlvdSBhcmUgdXNpbmcgaW4gdGhpcyBwcm9qZWN0Ljwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1lcnJvciIgaWQ9ImltcG9ydC1lcnJvciIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9ImFsZXJ0Ij4mdGltZXM7PC9idXR0b24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Jm5ic3A7PC9oMz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwPjwvcD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bD48L3VsPgorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ncm91cCIgaWQ9ImxheWVyLW5hbWUtY3RybCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImNvbnRyb2wtbGFiZWwgYWlyIiBmb3I9ImltcG9ydC1sYXllci1uYW1lIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXllciBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlNvbWV0aGluZyBsaWtlICdtZXRhLW15bGF5ZXInLiBZb3VyIGxheWVyIG5hbWUgbXVzdCBiZSB1bmlxdWUgYW5kIGNhbiBvbmx5IGluY2x1ZGUgbGV0dGVycywgbnVtYmVycyBhbmQgZGFzaGVzIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9ImltcG9ydC1sYXllci1uYW1lIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZCBhdXRvZm9jdXMgZGF0YS1hdXRvY29tcGxldGU9Im9mZiIgZGF0YS1wcm92aWRlPSJ0eXBlYWhlYWQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1pbmxpbmUiIHN0eWxlPSJkaXNwbGF5OiBub25lOyIgaWQ9ImludmFsaWQtbGF5ZXItbmFtZS1oaW50Ij5BIHZhbGlkIGxheWVyIG5hbWUgY2FuIG9ubHkgaW5jbHVkZSBsZXR0ZXJzLCBudW1iZXJzIGFuZCBkYXNoZXM8L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWlubGluZSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IiBpZD0iZHVwbGljYXRlZC1sYXllci1uYW1lLWhpbnQiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iZHVwbGljYXRlLWxheWVyLWluZm8iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgd2FybmluZyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5BIGxheWVyIGNhbGxlZCA8YSBocmVmPSIiIGNsYXNzPSJkdXAtbGF5ZXItbGluayI+PHNwYW4gY2xhc3M9ImR1cC1sYXllci1uYW1lIj48L3NwYW4+PC9hPiBhbHJlYWR5IGV4aXN0czwvaDM+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPkxheWVyIG5hbWVzIG11c3QgYmUgdW5xaXVlLiBQbGVhc2UgdXNlIGEgZGlmZmVyZW50IGxheWVyIG5hbWUuPC9wPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGw+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPHNwYW4gY2xhc3M9ImR1cC1sYXllci1uYW1lIj48L3NwYW4+IHJlcG9zaXRvcnkgdXJsIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0iZHVwLWxheWVyLXZjcy11cmwiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZD4KKworICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxzcGFuIGNsYXNzPSJkdXAtbGF5ZXItbmFtZSI+PC9zcGFuPiByZXZpc2lvbiBpcworICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImR1cC1sYXllci1yZXZpc2lvbiI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9kbD4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHA+PGEgaHJlZj0iIiBjbGFzcz0iZHVwLWxheWVyLWxpbmsiPlZpZXcgdGhlIDxzcGFuIGNsYXNzPSJkdXAtbGF5ZXItbmFtZSI+PC9zcGFuPiBsYXllciBpbmZvcm1hdGlvbjwvYT48L3A+CisKKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpZWxkcy1hcGFydC1mcm9tLWxheWVyLW5hbWUiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ibGF5ZXItZ2l0LXJlcG8tdXJsIiBjbGFzcz0icHJvamVjdC1mb3JtIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeSBVUkwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iRmV0Y2gvY2xvbmUgVVJMIG9mIHRoZSByZXBvc2l0b3J5LiBDdXJyZW50bHksIFRvYXN0ZXIgb25seSBzdXBwb3J0cyBHaXQgcmVwb3NpdG9yaWVzLiIgPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ibGF5ZXItZ2l0LXJlcG8tdXJsIiBjbGFzcz0iaW5wdXQteHhsYXJnZSIgcmVxdWlyZWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9InByb2plY3QtZm9ybSIgZm9yPSJsYXllci1zdWJkaXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcG9zaXRvcnkgc3ViZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im11dGVkIj4ob3B0aW9uYWwpPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJTdWJkaXJlY3Rvcnkgd2l0aGluIHRoZSByZXBvc2l0b3J5IHdoZXJlIHRoZSBsYXllciBpcyBsb2NhdGVkLCBpZiBub3QgaW4gdGhlIHJvb3QgKHVzdWFsbHkgb25seSB1c2VkIGlmIHRoZSByZXBvc2l0b3J5IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgbGF5ZXIpIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiICBpZD0ibGF5ZXItc3ViZGlyIj4KKworICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWdyb3VwIiBpZD0ibGF5ZXItcmV2aXNpb24tY3RybCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJjb250cm9sLWxhYmVsIHByb2plY3QtZm9ybSIgZm9yPSJsYXllci1naXQtcmVmIj5SZXZpc2lvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IllvdSBjYW4gcHJvdmlkZSBhIEdpdCBicmFuY2gsIGEgdGFnIG9yIGEgY29tbWl0IFNIQSBhcyB0aGUgcmV2aXNpb24iPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xzIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0ic3BhbjMiIGlkPSJsYXllci1naXQtcmVmIiByZXF1aXJlZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBzdHlsZT0iZGlhcGx5Om5vbmU7IiBpZD0iaW52YWxpZC1sYXllci1yZXZpc2lvbi1oaW50Ij48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgorCisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpZWxkcy1hcGFydC1mcm9tLWxheWVyLW5hbWUiPgorICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9ImFpciI+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGVnZW5kPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheWVyIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdXRlZCI+KG9wdGlvbmFsKTwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhlYWRpbmctaGVscCIgdGl0bGU9Ik90aGVyIGxheWVycyB0aGlzIGxheWVyIGRlcGVuZHMgdXBvbiI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9sZWdlbmQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9InVuc3R5bGVkIGNvbmZpZ3VyYXRpb24tbGlzdCIgaWQ9ImxheWVyLWRlcHMtbGlzdCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtYXBwZW5kIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIGRhdGEtbWluTGVuZ3RoPSIxIiBkYXRhLWF1dG9jb21wbGV0ZT0ib2ZmIiBkYXRhLXByb3ZpZGU9InR5cGVhaGVhZCIgcGxhY2Vob2xkZXI9IlR5cGUgYSBsYXllciBuYW1lIiBpZD0ibGF5ZXItZGVwZW5kZW5jeSIgY2xhc3M9ImlucHV0LXhsYXJnZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biIgaWQ9ImFkZC1sYXllci1kZXBlbmRlbmN5LWJ0biI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIj5Zb3UgY2FuIG9ubHkgYWRkIGxheWVycyBUb2FzdGVyIGtub3dzIGFib3V0PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhaXIiIGlkPSJmb3JtLWFjdGlvbnMiPgorICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcHJpbWFyeSBidG4tbGFyZ2UiIGRhdGEtdG9nZ2xlPSJtb2RhbCIgaWQ9ImltcG9ydC1hbmQtYWRkLWJ0biIgZGF0YS10YXJnZXQ9IiNkZXBlbmRlbmNpZXMtbWVzc2FnZSIgZGlzYWJsZWQ+SW1wb3J0IGFuZCBhZGQgdG8gcHJvamVjdDwvYnV0dG9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBpZD0iaW1wb3J0LWFuZC1hZGQtaGludCIgc3R5bGU9InZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ij5UbyBpbXBvcnQgYSBsYXllciB5b3UgbmVlZCB0byBlbnRlciBhIGxheWVyIG5hbWUsIGEgR2l0IHJlcG9zaXRvcnkgVVJMIGFuZCBhIHJldmlzaW9uIChicmFuY2gsIHRhZyBvciBjb21taXQpPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgPC9mb3JtPgorCisgICAgICAgICAgeyUgZWxzZSAlfSB7I3Byb2plY3QgYW5kIHByb2plY3QgcmVsZWFzZSN9CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICAgICAgICAgICAgICAgICAgICA8aDE+SW1wb3J0IGxheWVyPC9oMT4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIiBpZD0iaW1wb3J0LWVycm9yIiA+CisgICAgICAgICAgICAgICAgICAgICAgICA8aDM+VW5zdXBwb3J0ZWQgcHJvamVjdCB0eXBlPC9oMz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwPlRoaXMgcHJvamVjdCBkb2VzIG5vdCBzdXBwb3J0IGltcG9ydGluZyBsYXllcnMuPC9wPgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsPjwvdWw+CisgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICB7JSBlbmRpZiAlfQoreyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9qcy11bml0LXRlc3RzLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvanMtdW5pdC10ZXN0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViOGZkODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvanMtdW5pdC10ZXN0cy5odG1sCkBAIC0wLDAgKzEsMzkgQEAKK3slIGV4dGVuZHMgImJhc2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KK3slIGxvYWQgc3RhdGljICV9Cit7JSBibG9jayBwYWdlY29udGVudCAlfQorCis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii8vY29kZS5qcXVlcnkuY29tL3F1bml0L3F1bml0LTEuMTguMC5jc3MiIC8+CisKKzxzY3JpcHQgc3JjPSIvL2NvZGUuanF1ZXJ5LmNvbS9xdW5pdC9xdW5pdC0xLjE4LjAuanMiPjwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9sYXllckRlcHNNb2RhbC5qcycgJX0iPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvcHJvamVjdHBhZ2UuanMnICV9Ij48L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvYm9vdHN0cmFwLm1pbi5qcycgJX0iPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvZmlsdGVyc25pcHBldC5qcycgJX0iPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvaW1wb3J0bGF5ZXIuanMnICV9Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL3ByZXR0aWZ5LmpzJyAlfSI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9sYXllckJ0bi5qcycgJX0iPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvbGF5ZXJEZXBzTW9kYWwuanMnICV9Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL3Byb2plY3RwYWdlLmpzJyAlfSI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9sYXllcmRldGFpbHMuanMnICV9Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL3RhYmxlLmpzJyAlfSI+PC9zY3JpcHQ+CisKKzxzY3JpcHQ+CisgIHZhciB0YWJsZVVybCA9ICd7JSB1cmwgJ3Byb2plY3RsYXllcnMnIHByb2plY3QucGsgJX0nOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL3Rlc3RzL3Rlc3QuanMnICV9Ij48L3NjcmlwdD4KKworPGRpdiBpZD0icXVuaXQiPjwvZGl2PgorCis8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImxheWVycyIgcGxhY2Vob2xkZXI9ImxheWVycyIgPjwvaW5wdXQ+Cis8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InJlY2lwZXMiIHBsYWNlaG9sZGVyPSJyZWNpcGVzIj48L2lucHV0PgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJwcm9qZWN0cyIgcGxhY2Vob2xkZXI9InByb2plY3RzIj48L2lucHV0PgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJtYWNoaW5lcyIgcGxhY2Vob2xkZXI9Im1hY2hpbmVzIj48L2lucHV0PgorCit7JSBlbmRibG9jayAlfQorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9sYW5kaW5nLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbGFuZGluZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZTk1MzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbGFuZGluZy5odG1sCkBAIC0wLDAgKzEsNTggQEAKK3slIGV4dGVuZHMgImJhc2UuaHRtbCIgJX0KKworeyUgbG9hZCBzdGF0aWMgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KKworeyUgYmxvY2sgcGFnZWNvbnRlbnQgJX0KKworICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQiPgorICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICA8IS0tIEVtcHR5IC0gbm8gZGF0YSBpbiBkYXRhYmFzZSAtLT4KKyAgICA8ZGl2IGNsYXNzPSJoZXJvLXVuaXQgc3BhbjEyIHdlbGwtdHJhbnNwYXJlbnQiPgorICAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorICAgICAgPGRpdiBjbGFzcz0ic3BhbjYiPgorICAgICAgIDxoMT4KKyAgICAgICAgVGhpcyBpcyBUb2FzdGVyCisgICAgICAgPC9oMT4KKyAgICAgICA8cD5BIHdlYiBpbnRlcmZhY2UgdG8gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZW1iZWRkZWQub3JnIj5PcGVuRW1iZWRkZWQ8L2E+IGFuZCA8YSBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2JpdGJha2UiPkJpdEJha2U8L2E+LCB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnIj5Zb2N0byBQcm9qZWN0PC9hPiBidWlsZCBzeXN0ZW0uPC9wPgorCisKKwkJeyUgaWYgbHZzX25vcyAlfQorCQkgICAgPHAgY2xhc3M9Imhlcm8tYWN0aW9ucyI+CisJCQkgICAgPGEgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSBidG4tbGFyZ2UiIGhyZWY9InslIHVybCAnbmV3cHJvamVjdCcgJX0iPgorCQkJCSAgICBUbyBzdGFydCBidWlsZGluZywgY3JlYXRlIHlvdXIgZmlyc3QgVG9hc3RlciBwcm9qZWN0CisJCQkgICAgPC9hPgorCQkgICAgPC9wPgorCQl7JSBlbHNlICV9CisJCSAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIGxlYWQgYWlyIj4KKwkJCSAgICBUb2FzdGVyIGhhcyBubyBsYXllciBpbmZvcm1hdGlvbi4gV2l0aG91dCBsYXllciBpbmZvcm1hdGlvbiwgeW91IGNhbm5vdCBydW4gYnVpbGRzLiBUbyBnZW5lcmF0ZSBsYXllciBpbmZvcm1hdGlvbiB5b3UgY2FuOgorCQkJICAgIDx1bD4KKwkJCSAgICAgICAgPGxpPgorCQkJICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvbGF0ZXN0L3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLmh0bWwjbGF5ZXItc291cmNlIj5Db25maWd1cmUgYSBsYXllciBzb3VyY2U8L2E+CisJCQkgICAgICAgIDwvbGk+CisJCQkgICAgICAgIDxsaT4KKwkJCSAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnbmV3cHJvamVjdCcgJX0iPkNyZWF0ZSBhIHByb2plY3Q8L2E+LCB0aGVuIGltcG9ydCBsYXllcnMKKwkJCSAgICAgICAgPC9saT4KKwkJCSAgICA8L3VsPgorCQkgICAgPC9kaXY+CisJICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgICAgIDx1bCBjbGFzcz0idW5zdHlsZWQiPgorICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzL2xhdGVzdC90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC5odG1sIj5SZWFkIHRoZSBUb2FzdGVyIG1hbnVhbDwvYT4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9Db250cmlidXRlX3RvX1RvYXN0ZXIiPkNvbnRyaWJ1dGUgdG8gVG9hc3RlcjwvYT4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgIDwvdWw+CisKKyAgICAgIDwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ic3BhbjYiPgorICAgICAgICAgIDxpbWcgYWx0PSJZb2N0byBQcm9qZWN0IiBjbGFzcz0idGh1bWJuYWlsIiBzcmM9InslIHN0YXRpYyAnaW1nL3RvYXN0ZXJfYncucG5nJyAlfSIvPgorICAgICAgPC9kaXY+CisgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICAgPC9kaXY+CisKK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbGFuZGluZ19ub3RfbWFuYWdlZC5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2xhbmRpbmdfbm90X21hbmFnZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmM0MzVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2xhbmRpbmdfbm90X21hbmFnZWQuaHRtbApAQCAtMCwwICsxLDMyIEBACit7JSBleHRlbmRzICJiYXNlLmh0bWwiICV9CisKK3slIGxvYWQgc3RhdGljICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9CisKK3slIGJsb2NrIHBhZ2Vjb250ZW50ICV9CisKKyAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KKyAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgPCEtLSBFbXB0eSAtIG5vIGJ1aWxkIG1vZHVsZSAtLT4KKyAgICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciB0b3AtYWlyIj4KKyAgICAgPGgxPgorICAgICAgIFRoaXMgcGFnZSBvbmx5IHdvcmtzIHdpdGggVG9hc3RlciBpbiAnQnVpbGQnIG1vZGUKKyAgICAgPC9oMT4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIGxlYWQiPgorICAgICA8cCI+CisgICAgIFRoZSAnQnVpbGQnIG1vZGUgYWxsb3dzIHlvdSB0byBjb25maWd1cmUgYW5kIHJ1biB5b3VyIFlvY3RvIFByb2plY3QgYnVpbGRzIGZyb20gVG9hc3Rlci4KKyAgICAgPHVsPgorICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9sYXRlc3QvdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwuaHRtbCNpbnRyby1tb2RlcyI+CisgICAgICAgUmVhZCBhYm91dCB0aGUgJ0J1aWxkJyBtb2RlCisgICAgICAgPC9hPjwvbGk+CisgICAgICAgPGxpPjxhIGhyZWY9Ii8iPgorICAgICAgIFZpZXcgeW91ciBidWlsZHMKKyAgICAgICA8L2E+PC9saT4KKyAgICAgPC91bD4KKyAgICAgPC9wPgorICAgIDwvZGl2PgorICAgPC9kaXY+CisKK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbGF5ZXJfYnRuLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbGF5ZXJfYnRuLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJlOTM5MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9sYXllcl9idG4uaHRtbApAQCAtMCwwICsxLDkgQEAKKzxidXR0b24gY2xhc3M9ImJ0biBidG4tZGFuZ2VyIGJ0bi1ibG9jayBsYXllci1leGlzdHMte3tkYXRhLnBrfX0gbGF5ZXJidG4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBkYXRhLWxheWVyPSd7ICJpZCI6IHt7ZGF0YS5wa319LCAibmFtZSI6ICAie3tkYXRhLmxheWVyLm5hbWV9fSIsICJsYXllcmRldGFpbHVybCI6ICJ7JXVybCAnbGF5ZXJkZXRhaWxzJyBleHRyYS5waWQgZGF0YS5wayV9In0nIGRhdGEtZGlyZWN0aXZlPSJyZW1vdmUiID4KKyAgPGkgY2xhc3M9Imljb24tdHJhc2giPjwvaT4KKyAgRGVsZXRlIGxheWVyCis8L2J1dHRvbj4KKzxidXR0b24gY2xhc3M9ImJ0biBidG4tYmxvY2sgbGF5ZXItYWRkLXt7ZGF0YS5wa319IGxheWVyYnRuIiBkYXRhLWxheWVyPSd7ICJpZCI6IHt7ZGF0YS5wa319LCAibmFtZSI6ICAie3tkYXRhLmxheWVyLm5hbWV9fSIsICJsYXllcmRldGFpbHVybCI6ICJ7JXVybCAnbGF5ZXJkZXRhaWxzJyBleHRyYS5waWQgZGF0YS5wayV9In0nIGRhdGEtZGlyZWN0aXZlPSJhZGQiPgorICA8aSBjbGFzcz0iaWNvbi1wbHVzIj48L2k+CisgIEFkZCBsYXllcgorPC9idXR0b24+CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9sYXllcmRldGFpbHMuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9sYXllcmRldGFpbHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGQzZGIyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2xheWVyZGV0YWlscy5odG1sCkBAIC0wLDAgKzEsMjc2IEBACit7JSBleHRlbmRzICJiYXNlLmh0bWwiICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9Cit7JSBsb2FkIHN0YXRpYyAlfQorCit7JSBibG9jayBwYWdlY29udGVudCAlfQorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKyAgPHVsIGNsYXNzPSJicmVhZGNydW1iIj4KKyAgICA8bGkgY2xhc3M9Im11dGVkIj57e3Byb2plY3QubmFtZX19OjwvbGk+CisgICAgPGxpPgorICAgICAgPGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0JyBwcm9qZWN0LmlkICV9Ij5Db25maWd1cmF0aW9uPC9hPgorICAgICAgPHNwYW4gY2xhc3M9ImRpdmlkZXIiPiZyYXJyOzwvc3Bhbj4KKyAgICA8L2xpPgorICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RsYXllcnMnIHByb2plY3QuaWQgJX0iPkNvbXBhdGlibGUgbGF5ZXJzPC9hPgorICAgICAgPHNwYW4gY2xhc3M9ImRpdmlkZXIiPiZyYXJyOzwvc3Bhbj4KKyAgICA8L2xpPgorICAgIDxsaSBjbGFzcz0iYWN0aXZlIj4KKyAgICAgIHt7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fSAoe3tsYXllcnZlcnNpb24uZ2V0X3Zjc19yZWZlcmVuY2V8dHJ1bmNhdGVjaGFyczoxM319KQorICAgIDwvbGk+CisgIDwvdWw+Cis8L2Rpdj4KKworeyMgSWYgdGhpcyBpcyBub3QgYW4gaW1wb3J0ZWQgbGF5ZXIgdGhlbiBoaWRlIHRoZSBlZGl0IHVpICN9Cit7JSBpZiBub3QgbGF5ZXJ2ZXJzaW9uLmxheWVyX3NvdXJjZV9pZCBvciBsYXllcnZlcnNpb24ubGF5ZXJfc291cmNlLnNvdXJjZXR5cGUgIT0gbGF5ZXJ2ZXJzaW9uLmxheWVyX3NvdXJjZS5UWVBFX0lNUE9SVEVEICV9Cis8c3R5bGUgc2NvcGVkPgorIC5pY29uLXBlbmNpbCB7CisgICBkaXNwbGF5Om5vbmU7CisgfQorLmRlbGV0ZS1jdXJyZW50LXZhbHVleworICBkaXNwbGF5OiBub25lOworfQorIGxpIC5pY29uLXRyYXNoIHsKKyAgIGRpc3BsYXk6bm9uZTsKKyB9CisgLmFkZC1kZXBzIHsKKyAgIGRpc3BsYXk6bm9uZTsKKyB9Cis8L3N0eWxlPgoreyUgZW5kaWYgJX0KKworCis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9sYXllcmRldGFpbHMuanMnICV9Ij48L3NjcmlwdD4KKzxzY3JpcHQ+CisKKyAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCl7CisgICAgdmFyIGN0eCA9IHsKKyAgICAgIHByb2plY3RCdWlsZHNVcmwgOiAieyUgdXJsICdwcm9qZWN0YnVpbGRzJyBwcm9qZWN0LmlkICV9IiwKKyAgICAgIHhoclVwZGF0ZUxheWVyVXJsIDogInslIHVybCAneGhyX3VwZGF0ZWxheWVyJyAlfSIsCisgICAgICBsYXllclZlcnNpb24gOiB7CisgICAgICAgIG5hbWUgOiAie3tsYXllcnZlcnNpb24ubGF5ZXIubmFtZX19IiwKKyAgICAgICAgaWQgOiB7e2xheWVydmVyc2lvbi5pZH19LAorICAgICAgICBjb21taXQ6ICJ7e2xheWVydmVyc2lvbi5nZXRfdmNzX3JlZmVyZW5jZX19IiwKKyAgICAgIHslaWYgbGF5ZXJ2ZXJzaW9uLmlkIGluIHByb2plY3RsYXllcnMgJX0KKyAgICAgICAgaW5DdXJyZW50UHJqIDogdHJ1ZSwKKyAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgaW5DdXJyZW50UHJqIDogZmFsc2UsCisgICAgICB7JSBlbmRpZiAlfQorICAgICAgICBsYXllcmRldGFpbHVybCA6ICJ7JSB1cmwgJ2xheWVyZGV0YWlscycgcHJvamVjdC5pZCBsYXllcnZlcnNpb24uaWQgICV9IiwKKyAgICAgICAgc291cmNlSWQ6IHt7bGF5ZXJ2ZXJzaW9uLmxheWVyX3NvdXJjZV9pZHxqc29ufX0sCisgICAgICB9CisgICAgfTsKKworICAgIHRyeSB7CisgICAgICBsYXllckRldGFpbHNQYWdlSW5pdChjdHgpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIGRvY3VtZW50LndyaXRlKCJTb3JyeSwgQW4gZXJyb3IgaGFzIG9jY3VycmVkIGxvYWRpbmcgdGhpcyBwYWdlIik7CisgICAgICBjb25zb2xlLndhcm4oZSk7CisgICAgfQorICB9KTsKKzwvc2NyaXB0PgorCis8ZGl2IGNsYXNzPSJyb3ctZmx1aWQgc3BhbjExIj4KKyAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICAgIDxoMT57e2xheWVydmVyc2lvbi5sYXllci5uYW1lfX0gPHNtYWxsIGNsYXNzPSJjb21taXQiCisgICAgICAgICAgeyUgaWYgbGF5ZXJ2ZXJzaW9uLmdldF92Y3NfcmVmZXJlbmNlfGxlbmd0aCA+IDEzICV9CisgICAgICAgIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIiB0aXRsZT0ie3tsYXllcnZlcnNpb24uZ2V0X3Zjc19yZWZlcmVuY2V9fSIKKyAgICAgICAgeyUgZW5kaWYgJX0+CisgICAgICAgICh7e2xheWVydmVyc2lvbi5nZXRfdmNzX3JlZmVyZW5jZXx0cnVuY2F0ZWNoYXJzOjEzfX0pPC9zbWFsbD48L2gxPgorICA8L2Rpdj4KKzwvZGl2PgorCis8IS0tIGNvbnRhaW5lciBmb3IgdGFicyAtLT4KKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBzcGFuNyB0YWJiYWJsZSI+CisgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8gbGVhZCIgaWQ9ImFsZXJ0LWFyZWEiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGlkPSJkaXNtaXNzLWFsZXJ0Ij4mdGltZXM7PC9idXR0b24+CisgICAgPHNwYW4gaWQ9ImFsZXJ0LW1zZyI+PC9zcGFuPgorICA8L2Rpdj4KKyAgPHVsIGNsYXNzPSJuYXYgbmF2LXBpbGxzIj4KKyAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+CisgICAgICA8YSBkYXRhLXRvZ2dsZT0idGFiIiBocmVmPSIjaW5mb3JtYXRpb24iIGlkPSJkZXRhaWxzLXRhYiI+TGF5ZXIgZGV0YWlsczwvYT4KKyAgICA8L2xpPgorICAgIDxsaT4KKyAgICAgIDxhIGRhdGEtdG9nZ2xlPSJ0YWIiIGhyZWY9IiNyZWNpcGVzIiBjbGFzcz0ibXV0ZWQiIGlkPSJ0YXJnZXRzLXRhYiI+UmVjaXBlcyAoPHNwYW4gY2xhc3M9InRhYmxlLWNvdW50LXJlY2lwZXN0YWJsZSI+PC9zcGFuPik8L2E+CisgICAgPC9saT4KKyAgICA8bGk+CisgICAgICA8YSBkYXRhLXRvZ2dsZT0idGFiIiBocmVmPSIjbWFjaGluZXMiIGNsYXNzPSJtdXRlZCIgaWQ9Im1hY2hpbmVzLXRhYiI+TWFjaGluZXMgKDxzcGFuIGNsYXNzPSJ0YWJsZS1jb3VudC1tYWNoaW5lc3RhYmxlIj48L3NwYW4+KTwvYT4KKyAgICA8L2xpPgorICA8L3VsPgorICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+CisgICAgPHNwYW4gY2xhc3M9ImJ1dHRvbi1wbGFjZSI+CisgICAgICB7JSBpZiBsYXllcnZlcnNpb24uaWQgbm90IGluIHByb2plY3RsYXllcnMgJX0KKyAgICAgIDxidXR0b24gaWQ9ImFkZC1yZW1vdmUtbGF5ZXItYnRuIiBkYXRhLWRpcmVjdGl2ZT0iYWRkIiBjbGFzcz0iYnRuIGJ0bi1sYXJnZSBidG4tYmxvY2siPgorICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1wbHVzIj48L3NwYW4+CisgICAgICAgIEFkZCB0aGUge3tsYXllcnZlcnNpb24ubGF5ZXIubmFtZX19IGxheWVyIHRvIHlvdXIgcHJvamVjdAorICAgICAgPC9idXR0b24+CisgICAgICB7JSBlbHNlICV9CisgICAgICA8YnV0dG9uIGlkPSJhZGQtcmVtb3ZlLWxheWVyLWJ0biIgZGF0YS1kaXJlY3RpdmU9InJlbW92ZSIgY2xhc3M9ImJ0biBidG4tYmxvY2sgYnRuLWxhcmdlIGJ0bi1kYW5nZXIiPgorICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi10cmFzaCI+PC9zcGFuPgorICAgICAgICBEZWxldGUgdGhlIHt7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fSBsYXllciBmcm9tIHlvdXIgcHJvamVjdAorICAgICAgPC9idXR0b24+CisgICAgICB7JSBlbmRpZiAlfQorICAgIDwvc3Bhbj4KKworICAgIDwhLS0gbGF5ZXIgZGV0YWlscyBwYW5lIC0tPgorICAgIDxkaXYgaWQ9ImluZm9ybWF0aW9uIiBjbGFzcz0idGFiLXBhbmUgYWN0aXZlIj4KKyAgICAgIDxkbCBjbGFzcz0iZGwtaG9yaXpvbnRhbCI+CisgICAgICAgIDxkdCBjbGFzcz0iIj4KKyAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iRmV0Y2gvY2xvbmUgVVJMIG9mIHRoZSByZXBvc2l0b3J5Ij48L2k+CisgICAgICAgICAgUmVwb3NpdG9yeSBVUkwKKyAgICAgICAgPC9kdD4KKyAgICAgICAgPGRkPgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJjdXJyZW50LXZhbHVlIj57e2xheWVydmVyc2lvbi5sYXllci52Y3NfdXJsfX08L3NwYW4+CisgICAgICAgICAgeyUgaWYgbGF5ZXJ2ZXJzaW9uLmdldF92Y3NfbGlua191cmwgJX0KKyAgICAgICAgICA8YSBocmVmPSJ7e2xheWVydmVyc2lvbi5nZXRfdmNzX2xpbmtfdXJsfX0vIiBjbGFzcz0iaWNvbi1zaGFyZSBnZXQtaW5mbyIgdGFyZ2V0PSJfYmxhbmsiPjwvYT4KKyAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgIDxmb3JtIGlkPSJjaGFuZ2UtcmVwby1mb3JtIiBjbGFzcz0iY29udHJvbC1ncm91cCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1hcHBlbmQiPgorICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImlucHV0LXhsYXJnZSIgdmFsdWU9Int7bGF5ZXJ2ZXJzaW9uLmxheWVyLnZjc191cmx9fSI+CisgICAgICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLWxheWVyLXByb3A9InZjc191cmwiIGNsYXNzPSJidG4gY2hhbmdlLWJ0biIgdHlwZT0iYnV0dG9uIj5TYXZlPC9idXR0b24+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgc3R5bGU9ImRpc3BsYXk6bm9uZSIgY2xhc3M9ImJ0biBidG4tbGluayBjYW5jZWwiPkNhbmNlbDwvYT4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Zvcm0+CisgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1wZW5jaWwiID48L2k+CisgICAgICAgICAgPC9kZD4KKyAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iU3ViZGlyZWN0b3J5IHdpdGhpbiB0aGUgcmVwb3NpdG9yeSB3aGVyZSB0aGUgbGF5ZXIgaXMgbG9jYXRlZCwgaWYgbm90IGluIHRoZSByb290ICh1c3VhbGx5IG9ubHkgdXNlZCBpZiB0aGUgcmVwb3NpdG9yeSBjb250YWlucyBtb3JlIHRoYW4gb25lIGxheWVyKSI+PC9pPgorICAgICAgICAgICAgUmVwb3NpdG9yeSBzdWJkaXJlY3RvcnkKKyAgICAgICAgICA8L2R0PgorICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdXRlZCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+Tm90IHNldDwvc3Bhbj4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjdXJyZW50LXZhbHVlIj57e2xheWVydmVyc2lvbi5kaXJwYXRofX08L3NwYW4+CisgICAgICAgICAgICB7JSBpZiBsYXllcnZlcnNpb24uZ2V0X3Zjc19kaXJwYXRoX2xpbmtfdXJsICV9CisgICAgICAgICAgICA8YSBocmVmPSJ7e2xheWVydmVyc2lvbi5nZXRfdmNzX2RpcnBhdGhfbGlua191cmx9fSIgY2xhc3M9Imljb24tc2hhcmUgZ2V0LWluZm8iIHRhcmdldD0iX2JsYW5rIj48L2E+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPGZvcm0gaWQ9ImNoYW5nZS1zdWJkaXItZm9ybSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgorICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1hcHBlbmQiPgorICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiB2YWx1ZT0ie3tsYXllcnZlcnNpb24uZGlycGF0aH19Ij4KKyAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1sYXllci1wcm9wPSJkaXJwYXRoIiBjbGFzcz0iYnRuIGNoYW5nZS1idG4iIHR5cGU9ImJ1dHRvbiI+U2F2ZTwvYnV0dG9uPgorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgc3R5bGU9ImRpc3BsYXk6bm9uZSIgY2xhc3M9ImJ0biBidG4tbGluayBjYW5jZWwiPkNhbmNlbDwvYT4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9mb3JtPgorICAgICAgICAgICAgICA8aSBpZD0iY2hhbmdlLXN1YmRpciIgY2xhc3M9Imljb24tcGVuY2lsIj48L2k+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLXRyYXNoIGRlbGV0ZS1jdXJyZW50LXZhbHVlIiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgdGl0bGU9IkRlbGV0ZSI+PC9zcGFuPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBHaXQgYnJhbmNoLCB0YWcgb3IgY29tbWl0Ij48L2k+CisgICAgICAgICAgICAgIFJldmlzaW9uCisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY3VycmVudC12YWx1ZSI+e3tsYXllcnZlcnNpb24uZ2V0X3Zjc19yZWZlcmVuY2V9fTwvc3Bhbj4KKyAgICAgICAgICAgICAgPGZvcm0gc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWFwcGVuZCI+CisgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgdmFsdWU9Int7bGF5ZXJ2ZXJzaW9uLmdldF92Y3NfcmVmZXJlbmNlfX0iPgorICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICBkYXRhLWxheWVyLXByb3A9ImNvbW1pdCIgY2xhc3M9ImJ0biBjaGFuZ2UtYnRuIiB0eXBlPSJidXR0b24iPlNhdmU8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgc3R5bGU9ImRpc3BsYXk6bm9uZSIgY2xhc3M9ImJ0biBidG4tbGluayBjYW5jZWwiPkNhbmNlbDwvYT4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1wZW5jaWwiPjwvaT4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJPdGhlciBsYXllcnMgdGhpcyBsYXllciBkZXBlbmRzIHVwb24iPjwvaT4KKyAgICAgICAgICAgICAgICBMYXllciBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0idW5zdHlsZWQgY3VycmVudC12YWx1ZSIgaWQ9ImxheWVyLWRlcHMtbGlzdCI+CisgICAgICAgICAgICAgICAgICB7JSBmb3IgbGQgaW4gbGF5ZXJ2ZXJzaW9uLmRlcGVuZGVuY2llcy5hbGwgJX0KKyAgICAgICAgICAgICAgICAgIDxsaSBkYXRhLWxheWVyLWlkPSJ7e2xkLmRlcGVuZHNfb24uaWR9fSI+CisgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIiB0aXRsZT0ie3tsZC5kZXBlbmRzX29uLmxheWVyLnZjc191cmx9fSB8IHt7bGQuZGVwZW5kc19vbi5nZXRfdmNzX3JlZmVyZW5jZX19IiBocmVmPSJ7JSB1cmwgJ2xheWVyZGV0YWlscycgcHJvamVjdC5pZCBsZC5kZXBlbmRzX29uLmlkICV9Ij57e2xkLmRlcGVuZHNfb24ubGF5ZXIubmFtZX19PC9hPgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi10cmFzaCAiIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIiB0aXRsZT0iRGVsZXRlIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1hcHBlbmQgYWRkLWRlcHMiPgorICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBkYXRhLW1pbkxlbmd0aD0iMSIgZGF0YS1hdXRvY29tcGxldGU9Im9mZiIgIHBsYWNlaG9sZGVyPSJUeXBlIGEgbGF5ZXIgbmFtZSIgaWQ9ImxheWVyLWRlcC1pbnB1dCI+CisgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJidG4iIGlkPSJhZGQtbGF5ZXItZGVwZW5kZW5jeS1idG4iID4KKyAgICAgICAgICAgICAgICAgICAgICBBZGQgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1ibG9jayBhZGQtZGVwcyI+WW91IGNhbiBvbmx5IGFkZCBsYXllcnMgVG9hc3RlciBrbm93cyBhYm91dDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8L2RsPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8IS0tIGVuZCBsYXllcmRldGFpbHMgdGFiIC0tPgorICAgICAgICAgICAgPCEtLSB0YXJnZXRzIHRhYiAtLT4KKyAgICAgICAgICAgIDxkaXYgaWQ9InJlY2lwZXMiIGNsYXNzPSJ0YWItcGFuZSI+CisgICAgICAgICAgICAgIDwhLS0gUmVjaXBlIHRhYmxlIC0tPgorICAgICAgICAgICAgICA8ZGl2IGlkPSJuby1yZWNpcGVzLXlldCIgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICAgICAgICAgICAgICAgIDxwPlRvYXN0ZXIgZG9lcyBub3QgaGF2ZSByZWNpcGUgaW5mb3JtYXRpb24gZm9yIHRoZSA8c3Ryb25nPiB7e2xheWVydmVyc2lvbi5sYXllci5uYW1lfX0gPC9zdHJvbmc+IGxheWVyLjwvcD4KKyAgICAgICAgICAgICAgICA8cD5Ub2FzdGVyIGxlYXJucyBhYm91dCBsYXllcnMgd2hlbiB5b3UgYnVpbGQgdGhlbS4gSWYgdGhpcyBsYXllciBwcm92aWRlcyBhbnkgcmVjaXBlcywgdGhleSB3aWxsIGJlIGxpc3RlZCBoZXJlIGFmdGVyIHlvdSBidWlsZCB0aGUgPHN0cm9uZz4ge3tsYXllcnZlcnNpb24ubGF5ZXIubmFtZX19IDwvc3Ryb25nPiBsYXllci48L3A+CisgICAgICAgICAgICAgIDwvZGl2PgorCisKKworICAgICAgICAgICAgICB7JSB1cmwgJ2xheWVycmVjaXBlc3RhYmxlJyBwcm9qZWN0LmlkIGxheWVydmVyc2lvbi5pZCAgYXMgeGhyX3RhYmxlX3VybCAlfQorICAgICAgICAgICAgICB7JSB3aXRoICJyZWNpcGVzdGFibGUiIGFzIHRhYmxlX25hbWUgJX0KKyAgICAgICAgICAgICAgeyUgd2l0aCAiUmVjaXBlcyIgYXMgdGl0bGUgJX0KKyAgICAgICAgICAgICAgeyUgaW5jbHVkZSAndG9hc3RlcnRhYmxlLXNpbXBsZS5odG1sJyAlfQorICAgICAgICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICA8ZGl2IGlkPSJtYWNoaW5lcyIgY2xhc3M9InRhYi1wYW5lIj4KKworICAgICAgICAgICAgICA8ZGl2IGlkPSJuby1tYWNoaW5lcy15ZXQiIGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgICAgICAgICAgICAgICA8cD5Ub2FzdGVyIGRvZXMgbm90IGhhdmUgbWFjaGluZSBpbmZvcm1hdGlvbiBmb3IgdGhlIDxzdHJvbmc+IHt7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fSA8L3N0cm9uZz4gbGF5ZXIuPC9wPgorICAgICAgICAgICAgICAgIDxwPlRvYXN0ZXIgbGVhcm5zIGFib3V0IGxheWVycyB3aGVuIHlvdSBidWlsZCB0aGVtLiBJZiB0aGlzIGxheWVyIHByb3ZpZGVzIGFueSBtYWNoaW5lcywgdGhleSB3aWxsIGJlIGxpc3RlZCBoZXJlIGFmdGVyIHlvdSBidWlsZCB0aGUgPHN0cm9uZz4ge3tsYXllcnZlcnNpb24ubGF5ZXIubmFtZX19IDwvc3Ryb25nPiBsYXllci48L3A+CisgICAgICAgICAgICAgIDwvZGl2PgorCisKKyAgICAgICAgICAgICAgPCEtLSBNYWNoaW5lcyB0YWJsZSAtLT4KKyAgICAgICAgICAgICAgeyUgdXJsICdsYXllcm1hY2hpbmVzdGFibGUnIHByb2plY3QuaWQgbGF5ZXJ2ZXJzaW9uLmlkICBhcyB4aHJfdGFibGVfdXJsICV9CisgICAgICAgICAgICAgIHslIHdpdGggIm1hY2hpbmVzdGFibGUiIGFzIHRhYmxlX25hbWUgICV9CisgICAgICAgICAgICAgIHslIHdpdGggIk1hY2hpbmVzIiBhcyB0aXRsZSAgJX0KKyAgICAgICAgICAgICAgeyUgaW5jbHVkZSAndG9hc3RlcnRhYmxlLXNpbXBsZS5odG1sJyAlfQorICAgICAgICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PiA8IS0tIGVuZCB0YWIgY29udGVudCAtLT4KKyAgICAgICAgPC9kaXY+IDwhLS0gZW5kIHRhYmFibGUgLS0+CisKKyAgICAgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW40IHdlbGwiPiA8IS0tIGluZm8gc2lkZSBwYW5lbCAtLT4KKyAgICAgICAgICA8aDI+QWJvdXQge3tsYXllcnZlcnNpb24ubGF5ZXIubmFtZX19PC9oMj4KKyAgICAgICAgICA8ZGwgY2xhc3M9Iml0ZW0taW5mbyI+CisKKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgU3VtbWFyeQorICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iT25lLWxpbmUgZGVzY3JpcHRpb24gb2YgdGhlIGxheWVyIj48L2k+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibXV0ZWQiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPk5vdCBzZXQ8L3NwYW4+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjdXJyZW50LXZhbHVlIj57e2xheWVydmVyc2lvbi5sYXllci5zdW1tYXJ5fGRlZmF1bHRfaWZfbm9uZTonJ319PC9zcGFuPgorICAgICAgICAgICAgICA8Zm9ybSBzdHlsZT0iZGlzcGxheTpub25lOyBtYXJnaW4tYm90dG9tOjIwcHgiPgorICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0ic3BhbjEyIiByb3dzPSIyIj57JSBpZiBsYXllcnZlcnNpb24ubGF5ZXIuc3VtbWFyeSAlfXt7bGF5ZXJ2ZXJzaW9uLmxheWVyLnN1bW1hcnl9fXslIGVuZGlmICV9PC90ZXh0YXJlYT4KKyAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gY2hhbmdlLWJ0biIgZGF0YS1sYXllci1wcm9wPSJzdW1tYXJ5IiB0eXBlPSJidXR0b24iPlNhdmU8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iYnRuIGJ0bi1saW5rIGNhbmNlbCI+Q2FuY2VsPC9hPgorICAgICAgICAgICAgICA8L2Zvcm0+CisgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXBlbmNpbCI+PC9pPgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi10cmFzaCBkZWxldGUtY3VycmVudC12YWx1ZSIgZGF0YS10b2dnbGU9InRvb2x0aXAiIHRpdGxlPSJEZWxldGUiPjwvc3Bhbj4KKyAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgIERlc2NyaXB0aW9uCisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibXV0ZWQiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPk5vdCBzZXQ8L3NwYW4+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjdXJyZW50LXZhbHVlIj57e2xheWVydmVyc2lvbi5sYXllci5kZXNjcmlwdGlvbnxkZWZhdWx0X2lmX25vbmU6Jyd9fTwvc3Bhbj4KKyAgICAgICAgICAgICAgPGZvcm0gc3R5bGU9ImRpc3BsYXk6bm9uZTsgbWFyZ2luLWJvdHRvbToyMHB4Ij4KKyAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9InNwYW4xMiIgcm93cz0iNiI+eyUgaWYgbGF5ZXJ2ZXJzaW9uLmxheWVyLmRlc2NyaXB0aW9uICV9e3tsYXllcnZlcnNpb24ubGF5ZXIuZGVzY3JpcHRpb259fXslIGVuZGlmICV9PC90ZXh0YXJlYT4KKyAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gY2hhbmdlLWJ0biIgZGF0YS1sYXllci1wcm9wPSJkZXNjcmlwdGlvbiIgdHlwZT0iYnV0dG9uIiA+U2F2ZTwvYnV0dG9uPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJidG4gYnRuLWxpbmsgY2FuY2VsIj5DYW5jZWw8L2E+CisgICAgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcGVuY2lsIj48L2k+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLXRyYXNoIGRlbGV0ZS1jdXJyZW50LXZhbHVlIiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgdGl0bGU9IkRlbGV0ZSI+PC9zcGFuPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIHslIGlmIGxheWVydmVyc2lvbi5sYXllci51cF9pZCAlfQorICAgICAgICAgICAgPGR0PkxheWVyIGluZGV4PC9kdD4KKyAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xheWVycy5vcGVuZW1iZWRkZWQub3JnL2xheWVyaW5kZXgvYnJhbmNoL3t7bGF5ZXJ2ZXJzaW9uLnVwX2JyYW5jaC5uYW1lfX0vbGF5ZXIve3tsYXllcnZlcnNpb24ubGF5ZXIubmFtZX19Ij5sYXllciBpbmRleCBsaW5rPC9hPgorCisgICAgICAgICAgPC9kZD4KKyAgICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgICAgIDwvZGw+CisgICAgICA8L2Rpdj4KKworICAgICAgeyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9tYWNoaW5lX2J0bi5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL21hY2hpbmVfYnRuLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJjYjU1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9tYWNoaW5lX2J0bi5odG1sCkBAIC0wLDAgKzEsOCBAQAorPGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0JyBleHRyYS5waWQgJX0/c2V0TWFjaGluZT17e2RhdGEubmFtZX19IiBjbGFzcz0iYnRuIGJ0bi1ibG9jayBsYXllci1leGlzdHMte3tkYXRhLmxheWVyX3ZlcnNpb24uaWR9fSIgc3R5bGU9Im1hcmdpbi10b3A6IDVweDsgZGlzcGxheTpub25lIj4KKyAgU2VsZWN0IG1hY2hpbmU8L2E+Cis8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsb2NrIGxheWVyYnRuIGxheWVyLWFkZC17e2RhdGEubGF5ZXJfdmVyc2lvbi5pZH19IiBkYXRhLWxheWVyPSd7ICJpZCI6IHt7ZGF0YS5sYXllcl92ZXJzaW9uLmlkfX0sICJuYW1lIjogICJ7e2RhdGEubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX0iLCAibGF5ZXJkZXRhaWx1cmwiOiAieyV1cmwgJ2xheWVyZGV0YWlscycgZXh0cmEucGlkIGRhdGEubGF5ZXJfdmVyc2lvbi5pZCAlfSJ9JyBkYXRhLWRpcmVjdGl2ZT0iYWRkIj4KKyAgPGkgY2xhc3M9Imljb24tcGx1cyI+PC9pPgorICBBZGQgbGF5ZXIKKyAgPGkgdGl0bGU9IiIgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgZGF0YS1vcmlnaW5hbC10aXRsZT0iVG8gZW5hYmxlIHRoaXMgbWFjaGluZSwgeW91IG11c3QgZmlyc3QgYWRkIHRoZSB7e2RhdGEubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX0gbGF5ZXIgdG8geW91ciBwcm9qZWN0Ij48L2k+Cis8L2J1dHRvbj4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL21yYl9zZWN0aW9uLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbXJiX3NlY3Rpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTZmYjhlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL21yYl9zZWN0aW9uLmh0bWwKQEAgLTAsMCArMSwxMjEgQEAKK3slIGxvYWQgc3RhdGljICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9CisKKworeyVpZiBtcnUuY291bnQgPiAwJX0KKworICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+CisgICAgICA8aDE+CisgICAgICAgICAgTGF0ZXN0IGJ1aWxkcworICAgICAgIDwvaDE+CisgIDwvZGl2PgorICA8ZGl2IGlkPSJsYXRlc3QtYnVpbGRzIj4KKyAgeyUgZm9yIGJ1aWxkIGluIG1ydSAlfQorICAgIDxkaXYgY2xhc3M9ImFsZXJ0IHslaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQlfWFsZXJ0LXN1Y2Nlc3N7JWVsaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5GQUlMRUQlfWFsZXJ0LWVycm9yeyVlbHNlJX1hbGVydC1pbmZveyVlbmRpZiV9IHByb2plY3QtbmFtZSAiPgorICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCB7JWlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEJX1sYWJlbC1zdWNjZXNzeyVlbGlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuRkFJTEVEJX1sYWJlbC1pbXBvcnRhbnR7JWVsc2UlfWxhYmVsLWluZm97JWVuZGlmJX0iPgorICAgICAgICAgPGEgaHJlZj17JSB1cmwgJ3Byb2plY3QnIGJ1aWxkLnByb2plY3QucGsgJX0+CisgICAgICAgICAgIHt7YnVpbGQucHJvamVjdC5uYW1lfX0KKyAgICAgICAgIDwvYT4KKyAgICAgICA8L3NwYW4+CisKKyAgICAgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYW4zIGxlYWQiPgorICAgIHslaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQgb3IgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5GQUlMRUQgJX0KKyAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JXVybCAnYnVpbGRkYXNoYm9hcmQnIGJ1aWxkLnBrJX0iIGNsYXNzPSJ7JWlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEICV9c3VjY2Vzc3slZWxzZSV9ZXJyb3J7JWVuZGlmJX0iPgorICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICB7JSBpZiBidWlsZC50YXJnZXRfc2V0LmFsbC5jb3VudCA+IDAgJX0KKyAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIKKyAgICAgICAgICAgICAgICAgIHslaWYgYnVpbGQudGFyZ2V0X3NldC5hbGwuY291bnQgPiAxJX0KKyAgICAgICAgICAgICAgICAgICAgdGl0bGU9IlRhcmdldHM6IHslZm9yIHRhcmdldCBpbiBidWlsZC50YXJnZXRfc2V0LmFsbCV9e3t0YXJnZXQudGFyZ2V0fX0geyVlbmRmb3IlfSIKKyAgICAgICAgICAgICAgICAgIHslZW5kaWYlfQorICAgICAgICAgICAgICAgID4KKworICAgICAgICAgICAgICAgICAge3tidWlsZC50YXJnZXRfc2V0LmFsbC4wLnRhcmdldH19IHslaWYgYnVpbGQudGFyZ2V0X3NldC5hbGwuY291bnQgPiAxJX0oKyB7e2J1aWxkLnRhcmdldF9zZXQuYWxsLmNvdW50fGFkZDoiLTEifX0peyVlbmRpZiV9CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgeyVpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLlNVQ0NFRURFRCBvciBidWlsZC5vdXRjb21lID09IGJ1aWxkLkZBSUxFRCAlfQorICAgICAgICAgICAgICAgIDwvYT4KKyAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFuMiBsZWFkIj4KKyAgICAgICAgICAgICAgICB7JSBpZiBidWlsZC5jb21wbGV0ZWRfb258Zm9ybWF0X2J1aWxkX2RhdGUgICV9CisgICAgICAgICAgICAgICAgICAgIHt7IGJ1aWxkLmNvbXBsZXRlZF9vbnxkYXRlOidkL20veSBIOmknIH19CisgICAgICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgICAgICB7eyBidWlsZC5jb21wbGV0ZWRfb258ZGF0ZTonSDppJyB9fQorICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICA8L2Rpdj4KKyAgICB7JWlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEIG9yIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuRkFJTEVEICV9CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFuMiBsZWFkIj4KKyAgICAgIHslIGlmICBidWlsZC5lcnJvcnMuY291bnQgJX0KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1taW51cy1zaWduIHJlZCI+PC9pPiA8YSBocmVmPSJ7JXVybCAnYnVpbGRkYXNoYm9hcmQnIGJ1aWxkLnBrJX0jZXJyb3JzIiBjbGFzcz0iZXJyb3IiPnt7YnVpbGQuZXJyb3JzLmNvdW50fX0gZXJyb3J7e2J1aWxkLmVycm9ycy5jb3VudHxwbHVyYWxpemV9fTwvYT4KKyAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYW4yIGxlYWQiPgorICAgICAgeyUgaWYgIGJ1aWxkLndhcm5pbmdzLmNvdW50ICV9CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24td2FybmluZy1zaWduIHllbGxvdyI+PC9pPiA8YSBocmVmPSJ7JXVybCAnYnVpbGRkYXNoYm9hcmQnIGJ1aWxkLnBrJX0jd2FybmluZ3MiIGNsYXNzPSJ3YXJuaW5nIj57e2J1aWxkLndhcm5pbmdzLmNvdW50fX0gd2FybmluZ3t7YnVpbGQud2FybmluZ3MuY291bnR8cGx1cmFsaXplfX08L2E+CisgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWFkICI+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsZWFkIj4KKyAgICAgICAgICAgICAgICBCdWlsZCB0aW1lOiA8YSBocmVmPSJ7JSB1cmwgJ2J1aWxkdGltZScgYnVpbGQucGsgJX0iPnt7IGJ1aWxkLnRpbWVzcGVudF9zZWNvbmRzfHNlY3RvaG1zIH19PC9hPgorICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0bgorICAgICAgICAgICAgICAgICAgeyUgaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQgJX0KKyAgICAgICAgICAgICAgICAgICAgICBidG4tc3VjY2VzcworICAgICAgICAgICAgICAgICAgeyUgZWxpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLkZBSUxFRCAlfQorICAgICAgICAgICAgICAgICAgICAgIGJ0bi1kYW5nZXIKKyAgICAgICAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICAgICAgICBidG4taW5mbworICAgICAgICAgICAgICAgICAgeyVlbmRpZiV9CisgICAgICAgICAgICAgICAgICBwdWxsLXJpZ2h0IgorICAgICAgICAgICAgICAgICAgb25jbGljaz0nc2NoZWR1bGVCdWlsZCh7JSB1cmwgJ3Byb2plY3RidWlsZHMnIGJ1aWxkLnByb2plY3QuaWQgYXMgYnBpICV9e3ticGl8anNvbn19LAorICAgICAgICAgICAgICAgICAgICB7e2J1aWxkLnByb2plY3QubmFtZXxqc29ufX0sCisgICAgICAgICAgICAgICAgICAgIHslIHVybCAncHJvamVjdCcgYnVpbGQucHJvamVjdC5pZCBhcyBicHVybCAlfXt7YnB1cmx8anNvbn19LAorICAgICAgICAgICAgICAgICAgICB7e2J1aWxkLnRhcmdldF9zZXQuYWxsfGdldF90YXNrc3xqc29ufX0pJz4KKworICAgICAgICAgICAgICAgICAgICBSdW4gYWdhaW4KKyAgICAgICAgICAgICAgPC9idXR0b24+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICB7JWVuZGlmJX0KKyAgICB7JWlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuSU5fUFJPR1JFU1MgJX0KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYW40Ij4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ncmVzcyIgc3R5bGU9Im1hcmdpbi10b3A6NXB4OyIgZGF0YS10b2dnbGU9InRvb2x0aXAiIHRpdGxlPSJ7e2J1aWxkLmNvbXBsZXRlcGVyfX0lIG9mIHRhc2tzIGNvbXBsZXRlIj4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0id2lkdGg6IHt7YnVpbGQuY29tcGxldGVwZXJ9fSU7IiBjbGFzcz0iYmFyIj48L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVhZCBwdWxsLXJpZ2h0Ij57e2J1aWxkLmNvbXBsZXRlcGVyfX0lIG9mIHRhc2tzIGNvbXBsZXRlPC9kaXY+CisgICAgeyVlbmRpZiV9CisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorCisgIHslIGVuZGZvciAlfQorICA8L2Rpdj4KKworPHNjcmlwdD4KKworZnVuY3Rpb24gc2NoZWR1bGVCdWlsZCh1cmwsIHByb2plY3ROYW1lLCBwcm9qZWN0VXJsLCBidWlsZGxpc3QpIHsKKyAgY29uc29sZS5sb2coInNjaGVkdWxlQnVpbGQiKTsKKyAgbGlidG9hc3Rlci5zdGFydEFCdWlsZCh1cmwsIG51bGwsIGJ1aWxkbGlzdC5qb2luKCIgIiksIGZ1bmN0aW9uKCl7CisgICAgY29uc29sZS5sb2coInJlbG9hZGluZyBwYWdlIik7CisgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOworICB9LCBudWxsKTsKK30KKworJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKKworICAkKCIuY2FuY2VsLWJ1aWxkLWJ0biIpLmNsaWNrKGZ1bmN0aW9uICgpeworICAgIHZhciB1cmwgPSAkKHRoaXMpLmRhdGEoJ3JlcXVlc3QtdXJsJyk7CisgICAgdmFyIGJ1aWxkSWRzID0gJCh0aGlzKS5kYXRhKCdidWlsZC1pZCcpOworICAgIHZhciBidG4gPSAkKHRoaXMpOworCisgICAgbGlidG9hc3Rlci5jYW5jZWxBQnVpbGQodXJsLCBidWlsZElkcywgZnVuY3Rpb24oKXsKKyAgICAgIGJ0bi5wYXJlbnRzKCIuYWxlcnQiKS5mYWRlT3V0KCk7CisgICAgfSwgbnVsbCk7CisgIH0pOworfSk7CisKKzwvc2NyaXB0PgorCit7JWVuZGlmJX0KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL25ld3Byb2plY3QuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9uZXdwcm9qZWN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk3MzkwYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9uZXdwcm9qZWN0Lmh0bWwKQEAgLTAsMCArMSwxMzAgQEAKK3slIGV4dGVuZHMgImJhc2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KK3slIGJsb2NrIHBhZ2Vjb250ZW50ICV9Cis8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorICAgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgICAgICAgICA8aDE+Q3JlYXRlIGEgbmV3IHByb2plY3Q8L2gxPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KKyAgICB7JSBpZiBhbGVydCAlfQorICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtZXJyb3Igcm93LWZsdWlkIiByb2xlPSJhbGVydCI+e3thbGVydH19PC9kaXY+CisgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgICAgIDxkaXYgY2xhc3M9InNwYW42Ij4KKyAgICAgICAgPGZvcm0gbWV0aG9kPSJQT1NUIj57JSBjc3JmX3Rva2VuICV9CisKKyAgICAgICAgICAgIDxmaWVsZHNldD4KKyAgICAgICAgICAgICAgPGxhYmVsPlByb2plY3QgbmFtZSA8c3BhbiBjbGFzcz0ibXV0ZWQiPihyZXF1aXJlZCk8L3NwYW4+PC9sYWJlbD4KKyAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJpbnB1dC14bGFyZ2UiIHJlcXVpcmVkIGlkPSJuZXctcHJvamVjdC1uYW1lIiBuYW1lPSJwcm9qZWN0bmFtZSI+CisgICAgICAgICAgICA8L2ZpZWxkc2V0PgorPCEtLQorICAgICAgICAgICAgPGZpZWxkc2V0PgorICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0icHJvamVjdC1mb3JtIj5Qcm9qZWN0IHR5cGU8L2xhYmVsPgorICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9InByb2plY3QtZm9ybSByYWRpbyI+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJwdHlwZSIgdmFsdWU9ImFuYWx5c2lzIiBjaGVja2VkLz4gQW5hbHlzaXMgUHJvamVjdDwvbGFiZWw+CisKKyAgICAgICAgICAgICAgICB7JSBpZiByZWxlYXNlcy5jb3VudCA+IDAgJX0KKyAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJwcm9qZWN0LWZvcm0gcmFkaW8iPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0icHR5cGUiIHZhbHVlPSJidWlsZCIgY2hlY2tlZCAvPiBCdWlsZCBQcm9qZWN0PC9sYWJlbD4KKyAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICA8L2ZpZWxkc2V0PiAtLT4KKyAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icHR5cGUiIHZhbHVlPSJidWlsZCIgLz4KKworICAgICAgICB7JSBpZiByZWxlYXNlcy5jb3VudCA+IDAgJX0KKyAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0icmVsZWFzZSI+CisgICAgICAgICAgICB7JSBpZiByZWxlYXNlcy5jb3VudCA+IDEgJX0KKyAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJwcm9qZWN0LWZvcm0iPgorICAgICAgICAgICAgICAgIFJlbGVhc2UKKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHZlcnNpb24gb2YgdGhlIGJ1aWxkIHN5c3RlbSB5b3Ugd2FudCB0byB1c2UiPjwvaT4KKyAgICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJwcm9qZWN0dmVyc2lvbiIgaWQ9InByb2plY3R2ZXJzaW9uIj4KKyAgICAgICAgICAgICAgICB7JSBmb3IgcmVsZWFzZSBpbiByZWxlYXNlcyAlfQorICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ7e3JlbGVhc2UuaWR9fSIKKyAgICAgICAgICAgICAgICAgICAgICAgIHslaWYgZGVmYXVsdGJyYW5jaCA9PSByZWxlYXNlLm5hbWUgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgeyVlbmRpZiV9CisgICAgICAgICAgICAgICAgICAgICA+e3tyZWxlYXNlLmRlc2NyaXB0aW9ufX08L29wdGlvbj4KKyAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgPC9zZWxlY3Q+CisgICAgICAgICAgICAgICAgeyUgZm9yIHJlbGVhc2UgaW4gcmVsZWFzZXMgJX0KKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIGhlbHB0ZXh0IiBpZD0iZGVzY3JpcHRpb24te3tyZWxlYXNlLmlkfX0iIHN0eWxlPSJkaXNwbGF5OiBub25lIj4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1ibG9jayBzcGFuNSI+e3tyZWxlYXNlLmhlbHB0ZXh0fHNhZmV9fTwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InByb2plY3R2ZXJzaW9uIiB2YWx1ZT0ie3tyZWxlYXNlcy4wLmlkfX0iLz4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICA8L2ZpZWxkc2V0PgorICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWFjdGlvbnMiPgorICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBpZD0iY3JlYXRlLXByb2plY3QtYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sYXJnZSIgdmFsdWU9IkNyZWF0ZSBwcm9qZWN0Ii8+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWlubGluZSIgc3R5bGU9InZlcnRpY2FsLWFsaWduOm1pZGRsZTsiPlRvIGNyZWF0ZSBhIHByb2plY3QsIHlvdSBuZWVkIHRvIGVudGVyIGEgcHJvamVjdCBuYW1lPC9zcGFuPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZm9ybT4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDwhLS0KKyAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjUgd2VsbCI+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtYmxvY2siPgorICAgICAgICAgICAgICAgICA8aDQ+VG9hc3RlciBwcm9qZWN0IHR5cGVzPC9oND4KKyAgICAgICAgICAgICAgICAgPHA+V2l0aCBhIDxzdHJvbmc+YnVpbGQgcHJvamVjdDwvc3Ryb25nPiB5b3UgY29uZmlndXJlIGFuZCBydW4geW91ciBidWlsZHMgZnJvbSBUb2FzdGVyLjwvcD4KKyAgICAgICAgICAgICAgICAgPHA+V2l0aCBhbiA8c3Ryb25nPmFuYWx5c2lzIHByb2plY3Q8L3N0cm9uZz4sIHRoZSBidWlsZHMgYXJlIGNvbmZpZ3VyZWQgYW5kIHJ1biBieSBhbm90aGVyIHRvb2wKKyAgICAgICAgICAgICAgICAgKHNvbWV0aGluZyBsaWtlIEJ1aWxkYm90IG9yIEplbmtpbnMpLCBhbmQgdGhlIHByb2plY3Qgb25seSBjb2xsZWN0cyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgICAgICAgICAgICAgICAgIGJ1aWxkcyAocGFja2FnZXMsIHJlY2lwZXMsIGRlcGVuZGVuY2llcywgbG9ncywgZXRjKS4gPC9wPgorICAgICAgICAgICAgICAgICA8cD5Zb3UgY2FuIHJlYWQgbW9yZSBvbiA8YSBocmVmPSIjIj5ob3cgdG8gc2V0IHVwIGFuIGFuYWx5c2lzIHByb2plY3Q8L2E+CisgICAgICAgICAgICAgICAgIGluIHRoZSBUb2FzdGVyIG1hbnVhbC48L3A+CisgICAgICAgICAgICAgICAgIDxoND5SZWxlYXNlPC9oND4KKyAgICAgICAgICAgICAgICAgPHA+SWYgeW91IGNyZWF0ZSBhIDxzdHJvbmc+YnVpbGQgcHJvamVjdDwvc3Ryb25nPiwgeW91IHdpbGwgbmVlZCB0byBzZWxlY3QgYSA8c3Ryb25nPnJlbGVhc2U8L3N0cm9uZz4sCisgICAgICAgICAgICAgICAgIHdoaWNoIGlzIHRoZSB2ZXJzaW9uIG9mIHRoZSBidWlsZCBzeXN0ZW0geW91IHdhbnQgdG8gdXNlIHRvIHJ1biB5b3VyIGJ1aWxkcy48L3A+CisgICAgICAgICAgICAgPC9kaXY+IC0tPgorICAgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKworICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgLy8gaGlkZSB0aGUgbmV3IHByb2plY3QgYnV0dG9uCisgICAgICAgICAgICAkKCIjbmV3LXByb2plY3QtYnV0dG9uIikuaGlkZSgpOworICAgICAgICAgICAgJCgnLmJ0bi1wcmltYXJ5JykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsKKworICAgICAgICAgICAgLy8gZW5hYmxlIHN1Ym1pdCBidXR0b24gd2hlbiBhbGwgcmVxdWlyZWQgZmllbGRzIGFyZSBwb3B1bGF0ZWQKKyAgICAgICAgICAgICQoImlucHV0I25ldy1wcm9qZWN0LW5hbWUiKS5vbignaW5wdXQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoJCgiaW5wdXQjbmV3LXByb2plY3QtbmFtZSIpLnZhbCgpLmxlbmd0aCA+IDAgKXsKKyAgICAgICAgICAgICAgICAgICAgJCgnLmJ0bi1wcmltYXJ5JykucmVtb3ZlQXR0cignZGlzYWJsZWQnKTsKKyAgICAgICAgICAgICAgICAgICAgJCgiLmhlbHAtaW5saW5lIikuY3NzKCd2aXNpYmlsaXR5JywnaGlkZGVuJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAkKCcuYnRuLXByaW1hcnknKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpOworICAgICAgICAgICAgICAgICAgICAkKCIuaGVscC1pbmxpbmUiKS5jc3MoJ3Zpc2liaWxpdHknLCd2aXNpYmxlJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIHNob3cgcmVsZXZhbnQgaGVscCB0ZXh0IGZvciB0aGUgc2VsZWN0ZWQgcmVsZWFzZQorICAgICAgICAgICAgdmFyIHNlbGVjdGVkX3JlbGVhc2UgPSAkKCdzZWxlY3QnKS52YWwoKTsKKyAgICAgICAgICAgICQoIiNkZXNjcmlwdGlvbi0iICsgc2VsZWN0ZWRfcmVsZWFzZSkuc2hvdygpOworCisKKyAgICAgICAgICAgICQoJ3NlbGVjdCcpLmNoYW5nZShmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIHZhciBuZXdfcmVsZWFzZSA9ICQoJ3NlbGVjdCcpLnZhbCgpOworICAgICAgICAgICAgICAgICQoIi5oZWxwdGV4dCIpLmhpZGUoKTsKKyAgICAgICAgICAgICAgICAkKCcjZGVzY3JpcHRpb24tJyArIG5ld19yZWxlYXNlKS5mYWRlSW4oKTsKKyAgICAgICAgICAgIH0pOworCisvKgkJCS8vIEhpZGUgdGhlIHByb2plY3QgcmVsZWFzZSB3aGVuIHlvdSBzZWxlY3QgYW4gYW5hbHlzaXMgcHJvamVjdAorCQkJZnVuY3Rpb24gcHJvamVjdFR5cGUoKSB7CisJCQkJaWYgKCQoImlucHV0W3R5cGU9J3JhZGlvJ106Y2hlY2tlZCIpLnZhbCgpID09ICdidWlsZCcpIHsKKwkJCQkJJCgnLnJlbGVhc2UnKS5mYWRlSW4oKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCSQoJy5yZWxlYXNlJykuZmFkZU91dCgpOworCQkJCX0KKwkJCX0KKwkJCXByb2plY3RUeXBlKCk7CisKKwkJCSQoJ2lucHV0OnJhZGlvJykuY2hhbmdlKGZ1bmN0aW9uKCl7CisJCQkJcHJvamVjdFR5cGUoKTsKKwkJCX0pOyAqLworICAgICAgICB9KTsKKyAgICA8L3NjcmlwdD4KKworeyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2J1aWx0X2RlcGVuZGVuY2llcy5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfYnVpbHRfZGVwZW5kZW5jaWVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZmMjBjMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2J1aWx0X2RlcGVuZGVuY2llcy5odG1sCkBAIC0wLDAgKzEsOTkgQEAKK3slIGV4dGVuZHMgInBhY2thZ2VfZGV0YWlsX2Jhc2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KKworeyUgYmxvY2sgdGFiY29udGVudCAlfQorICAgICAgICA8dWwgY2xhc3M9Im5hdiBuYXYtcGlsbHMiPgorICAgICAgICAgICAgPGxpIGNsYXNzPSIiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9idWlsdF9kZXRhaWwnIGJ1aWxkLmlkIHBhY2thZ2UuaWQgJX0iPgorICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iU2hvd3MgdGhlIGZpbGVzIHByb2R1Y2VkIGJ5IHRoaXMgcGFja2FnZS4iPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGVkIGZpbGVzICh7e3BhY2thZ2UuYnVpbGRmaWxlbGlzdF9wYWNrYWdlLmNvdW50fX0pCisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VfYnVpbHRfZGVwZW5kZW5jaWVzJyBidWlsZC5pZCBwYWNrYWdlLmlkICV9Ij4KKyAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlNob3dzIHRoZSBydW50aW1lIHBhY2thZ2VzIHJlcXVpcmVkIGJ5IHRoaXMgcGFja2FnZS4iPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgUnVudGltZSBkZXBlbmRlbmNpZXMgKHt7ZGVwZW5kZW5jeV9jb3VudH19KQorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgIDwvdWw+CisgICAgICAgIDxkaXYgY2xhc3M9InRhYi1jb250ZW50Ij4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1wYW5lIGFjdGl2ZSIgaWQ9ImRlcGVuZGVuY2llcyI+CisgICAgICAgICAgICB7JSBpZmVxdWFsIHJ1bnRpbWVfZGVwc3xsZW5ndGggMCAlfQorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPgorICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7cGFja2FnZS5mdWxscGFja2FnZXNwZWN9fTwvc3Ryb25nPiBoYXMgbm8gcnVudGltZSBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyI+CisgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319PC9zdHJvbmc+IGlzIDxzdHJvbmc+bm90IGluY2x1ZGVkPC9zdHJvbmc+IGluIGFueSBpbWFnZS4gVGhpcyBwYWdlIHNob3dzIHlvdSB0aGUgcHJvamVjdGVkIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIGlmIHlvdSBpbmNsdWRlIDxzdHJvbmc+e3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319PC9zdHJvbmc+IGluIGZ1dHVyZSBidWlsZHMuCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciI+CisgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+UGFja2FnZTwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlZlcnNpb248L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2l6ZWNvbCBzcGFuMiI+U2l6ZTwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgorICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CisJCQkJCQl7JSBmb3IgcnVudGltZV9kZXAgaW4gcnVudGltZV9kZXBzICV9CisgICAgICAgICAgICAgICAgICAgICAgICA8dHIge3tydW50aW1lX2RlcC5zaXplfGZvcm1hdF92cGFja2FnZV9yb3djbGFzc319ID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiBydW50aW1lX2RlcC5zaXplICE9IC0xICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VfYnVpbHRfZGV0YWlsJyBidWlsZC5pZCBydW50aW1lX2RlcC5kZXBlbmRzX29uX2lkICV9Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cnVudGltZV9kZXAubmFtZX19CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cnVudGltZV9kZXAubmFtZXxmb3JtYXRfdnBhY2thZ2VfbmFtZWhlbHB9fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tydW50aW1lX2RlcC52ZXJzaW9ufX08L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ic2l6ZWNvbCI+e3tydW50aW1lX2RlcC5zaXplfGZpbHRlcmVkX2ZpbGVzaXplZm9ybWF0fX08L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KKwkJCQkJCXslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICB7JSBlbmRpZmVxdWFsICV9CisgICAgICAgICAgICB7JSBpZm5vdGVxdWFsIG90aGVyX2RlcHN8bGVuZ3RoIDAgJX0KKyAgICAgICAgICAgICAgICA8aDM+T3RoZXIgcnVudGltZSByZWxhdGlvbnNoaXBzPC9oMz4KKyAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIj4KKyAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5QYWNrYWdlPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+VmVyc2lvbjwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaXplY29sIHNwYW4yIj5TaXplPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJGaXZlIHJlbGF0aW9uc2hpcCB0eXBlcyBleGlzdDogcmVjb21tZW5kcywgc3VnZ2VzdHMsIHByb3ZpZGVzLCByZXBsYWNlcyBhbmQgY29uZmxpY3RzIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGF0aW9uc2hpcCB0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KKwkJCQkJCXslIGZvciBvdGhlcl9kZXAgaW4gb3RoZXJfZGVwcyAlfQorICAgICAgICAgICAgICAgICAgICAgICAgPHRyIHt7b3RoZXJfZGVwLnNpemV8Zm9ybWF0X3ZwYWNrYWdlX3Jvd2NsYXNzfX0gPgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWYgb3RoZXJfZGVwLnNpemUgIT0gLTEgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9idWlsdF9kZXRhaWwnIGJ1aWxkLmlkIG90aGVyX2RlcC5kZXBlbmRzX29uX2lkICV9Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3RoZXJfZGVwLm5hbWV9fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3RoZXJfZGVwLm5hbWV8Zm9ybWF0X3ZwYWNrYWdlX25hbWVoZWxwfX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvdGhlcl9kZXAudmVyc2lvbn19PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InNpemVjb2wiPnt7b3RoZXJfZGVwLnNpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fTwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e290aGVyX2RlcC5kZXBfdHlwZV9kaXNwbGF5fX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIiB0aXRsZT0ie3tvdGhlcl9kZXAuZGVwX3R5cGVfaGVscH19IiA+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgICAJeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CisgICAgICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgICAgICB7JSBlbmRpZm5vdGVxdWFsICV9CisgICAgICAgICAgICA8L2Rpdj4gPCEtLSB0YWItcGFuZSAtLT4KKyAgICAgICAgPC9kaXY+IDwhLS0gdGFiLWNvbnRlbnQgLS0+Cit7JSBlbmRibG9jayB0YWJjb250ZW50ICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9idWlsdF9kZXRhaWwuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2J1aWx0X2RldGFpbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZThjY2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9idWlsdF9kZXRhaWwuaHRtbApAQCAtMCwwICsxLDY1IEBACit7JSBleHRlbmRzICJwYWNrYWdlX2RldGFpbF9iYXNlLmh0bWwiICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9CisKK3slIGJsb2NrIHRhYmNvbnRlbnQgJX0KKyAgICB7JSB3aXRoIHBhY2thZ2VGaWxlQ291bnQ9cGFja2FnZS5idWlsZGZpbGVsaXN0X3BhY2thZ2UuY291bnQgJX0KKyAgICAgICAgPCEtLSBHZW5lcmF0ZWQgRmlsZXMgLS0+CisgICAgICAgIHslIGlmIHBhY2thZ2UuYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UuY291bnQgPT0gMCAlfQorICAgICAgICAgICAgeyMgTm90IGluY2x1ZGVkIGNhc2UgI30KKyAgICAgICAgICAgIDx1bCBjbGFzcz0ibmF2IG5hdi1waWxscyI+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJhY3RpdmUiPiA8YSBocmVmPSIjIj4KKyAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkZpbGVzIGFkZGVkIHRvIGEgcm9vdCBmaWxlIHN5c3RlbSB3aGVuIHlvdSBpbmNsdWRlIHt7cGFja2FnZS5uYW1lfX0gaW4gYW4gaW1hZ2UiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGVkIGZpbGVzICh7e3BhY2thZ2VGaWxlQ291bnR9fSkKKyAgICAgICAgICAgICAgICA8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IiI+PGEgaHJlZj0ieyUgdXJsICdwYWNrYWdlX2J1aWx0X2RlcGVuZGVuY2llcycgYnVpbGQuaWQgcGFja2FnZS5pZCAlfSI+CisgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJQcm9qZWN0ZWQgcnVudGltZSBkZXBlbmRlbmNpZXMgd2hlbiB5b3UgaW5jbHVkZSB7e3BhY2thZ2UubmFtZX19IGluIGFuIGltYWdlIj48L2k+CisgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWUgZGVwZW5kZW5jaWVzICh7e2RlcGVuZGVuY3lfY291bnR9fSkKKyAgICAgICAgICAgICAgICA8L2E+PC9saT4KKyAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItcGFuZSBhY3RpdmUiIGlkPSJmaWxlcyI+CisgICAgICAgICAgICA8IS0tIFBhY2thZ2UgZmlsZSBsaXN0IG9yIGlmIGVtcHR5LCBhbGVydCBwYW5lIC0tPgorICAgICAgICAgICAgeyUgaWYgcGFja2FnZUZpbGVDb3VudCA+IDAgJX0KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57e3BhY2thZ2UuZnVsbHBhY2thZ2VzcGVjfX08L3N0cm9uZz4gaXMgPHN0cm9uZz5ub3QgaW5jbHVkZWQ8L3N0cm9uZz4gaW4gYW55IGltYWdlLiBUaGlzIHBhZ2Ugc2hvd3MgeW91IHRoZSBmaWxlcyBhZGRlZCB0byBhbiBpbWFnZSByb290IGZpbGUgc3lzdGVtIGlmIHlvdSBpbmNsdWRlIDxzdHJvbmc+e3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319PC9zdHJvbmc+IGluIGZ1dHVyZSBidWlsZHMuCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgeyUgaW5jbHVkZSAidGFibGVzb3J0Lmh0bWwiICV9CisgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KKwkJCQkJCXslIGZvciBmaWxlIGluIG9iamVjdHMgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0icGF0aCI+e3tmaWxlLnBhdGh9fTwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmlsZXNpemUgc2l6ZWNvbCI+e3tmaWxlLnNpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fTwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KKwkJCQkJCXslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgICAgIDwvdGFibGU+CisKKyAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57e3BhY2thZ2UuZnVsbHBhY2thZ2VzcGVjfX08L3N0cm9uZz4gZG9lcyBub3QgZ2VuZXJhdGUgYW55IGZpbGVzLgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKworICAgICAgICAgICAgPC9kaXY+IDwhLS0gdGFiLXBhbmUgYWN0aXZlIC0tPgorICAgICAgICAgICAgPC9kaXY+IDwhLS0gdGFiLWNvbnRlbnQgLS0+CisgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgIHsjIEluY2x1ZGVkIGNhc2UgI30KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1jb250ZW50Ij4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1wYW5lIGFjdGl2ZSI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWFkIHdlbGwiPgorICAgICAgICAgICAgICAgICAgICBQYWNrYWdlIGluY2x1ZGVkIGluOgorICAgICAgICAgICAgICAgICAgICB7JSBmb3IgaXRhcmdldCBpbiBwYWNrYWdlLmJ1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlLmFsbHxkaWN0c29ydDoidGFyZ2V0LnRhcmdldCIgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9pbmNsdWRlZF9kZXRhaWwnIGJ1aWxkLmlkIGl0YXJnZXQudGFyZ2V0LmlkIHBhY2thZ2UuaWQgJX0iPgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWYgZm9ybG9vcC5jb3VudGVyMCA+IDAgICV9CisgICAgICAgICAgICAgICAgICAgICAgICAsJm5ic3A7CisgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICAgICAgICAgICAge3tpdGFyZ2V0LnRhcmdldC50YXJnZXR9fQorICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+IDwhLS0gdGFiLXBhbmUgYWN0aXZlIC0tPgorICAgICAgICAgICAgPC9kaXY+IDwhLS0gdGFiLWNvbnRlbnQgLS0+CisgICAgICAgIHslIGVuZGlmICV9CisKKyAgICB7JSBlbmR3aXRoICV9Cit7JSBlbmRibG9jayB0YWJjb250ZW50ICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9kZXRhaWxfYmFzZS5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfZGV0YWlsX2Jhc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjRiYzhlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfZGV0YWlsX2Jhc2UuaHRtbApAQCAtMCwwICsxLDE0MiBAQAoreyUgZXh0ZW5kcyAiYmFzZWJ1aWxkZGV0YWlscGFnZS5odG1sIiAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCit7JSBibG9jayBleHRyYWhlYWRjb250ZW50ICV9CisgICAgPCEtLSBmdW5jdGlvbnMgdG8gZm9ybWF0IHBhY2thZ2UgJ2luc3RhbGxlZF9wYWNrYWdlJyBhbGlhcyAtLT4KKyAgICA8c2NyaXB0PgorICAgIGZ1bmN0aW9uIGZtdEFsaWFzSGVscChwYWNrYWdlX25hbWUsIGFsaWFzLCBob3ZlcikgeworICAgICAgICB2YXIgciA9IG51bGw7CisgICAgICAgIGlmIChhbGlhcyAhPSBudWxsICYmIGFsaWFzICE9ICcnKSB7CisgICAgICAgICAgICByID0gJzxzcGFuIGNsYXNzPSJtdXRlZCI+IGFzICcgKyBhbGlhcyArICcmbmJzcCc7CisgICAgICAgICAgICByICs9ICc8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwJzsKKyAgICAgICAgICAgIGlmIChob3ZlcikgeworICAgICAgICAgICAgICAgIHIrPSAnIGhvdmVyLWhlbHAnOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcis9ICcgaGVhZGluZy1oZWxwJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHIgKz0gJyInOworICAgICAgICAgICAgdGl0bGUgPSBwYWNrYWdlX25hbWUgKyAnIHdhcyByZW5hbWVkIGF0IHBhY2thZ2luZyB0aW1lIGFuZCB3YXMgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtIGFzICcgKyBhbGlhczsKKyAgICAgICAgICAgIHIgKz0gJyB0aXRsZT0iJyArIHRpdGxlICsgJyI+JzsKKyAgICAgICAgICAgIHIgKz0gJzwvaT4nOworICAgICAgICAgICAgciArPSAnPC9zcGFuPic7CisgICAgICAgICAgICBkb2N1bWVudC53cml0ZShyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA8L3NjcmlwdD4KK3slIGVuZGJsb2NrIGV4dHJhaGVhZGNvbnRlbnQgJX0KK3slIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfQorICAgIHslIGlmIHRhcmdldCAlfQorICAgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICJ0YXJnZXQiIGJ1aWxkLmlkIHRhcmdldC5pZCAlfSI+e3t0YXJnZXQudGFyZ2V0fX08L2E+PC9saT4KKyAgICAgICAgPGxpPnt7cGFja2FnZS5mdWxscGFja2FnZXNwZWN9fSB7JSBpZiBwYWNrYWdlLmFsaWFzICV9IGFzIHt7cGFja2FnZS5hbGlhc319eyUgZW5kaWYgJX08L2xpPgorICAgIHslIGVsc2UgJX0KKyAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAicGFja2FnZXMiIGJ1aWxkLmlkICV9Ij4gUGFja2FnZXMgPC9hPjwvbGk+CisgICAgICAgIDxsaT57e3BhY2thZ2UuZnVsbHBhY2thZ2VzcGVjfX08L2xpPgorICAgIHslIGVuZGlmICV9Cit7JSBlbmRibG9jayBsb2NhbGJyZWFkY3J1bWIgJX0KKworeyUgYmxvY2sgcGFnZWRldGFpbGluZm9tYWluICV9CisgICAgPGRpdiBjbGFzcz0icm93IHNwYW4xMSI+CisgICAgICAgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgICAgICAgICAgIHslIGJsb2NrIHRpdGxlICV9CisgICAgICAgICAgICA8aDE+e3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319PC9oMT4KKyAgICAgICAgICAgIHslIGVuZGJsb2NrIHRpdGxlICV9CisgICAgICAgIDwvZGl2PiA8IS0tIHBhZ2UtaGVhZGVyIC0tPgorICAgIDwvZGl2PiA8IS0tIHJvdyBzcGFuMTEgcGFnZS1oZWFkZXIgLS0+CisKKyAgICB7JSBibG9jayB0d29jb2x1bW5zICV9CisgICAgPGRpdiBjbGFzcz0icm93IHNwYW43IHRhYmJhYmxlIj4KKyAgICAgICAgeyUgYmxvY2sgdGFiY29udGVudCAlfQorICAgICAgICB7JSBlbmRibG9jayB0YWJjb250ZW50ICV9CisgICAgPC9kaXY+IDwhLS0gcm93IHNwYW43IC0tPgorCisgICAgPGRpdiBjbGFzcz0icm93IHNwYW40IHdlbGwiPgorICAgICAgICA8aDI+UGFja2FnZSBpbmZvcm1hdGlvbjwvaDI+CisKKyAgICAgICAgPCEtLSBpbmZvIHByZXNlbnRlZCBhcyBkZWZpbml0aW9uIGxpc3QgLS0+CisgICAgICAgIDxkbCBjbGFzcz0iaXRlbS1pbmZvIj4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICBTaXplCisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBzaXplIG9mIHRoZSBwYWNrYWdlIj48L2k+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIHslIGNvbW1lbnQgJX0KKyAgICAgICAgICAgICAgICAgICAgaWYgcmVjaXBlIGlzIGFic2VudCwgZmlsZXNpemUgaXMgbm90IDAKKyAgICAgICAgICAgICAgICB7JSBlbmRjb21tZW50ICV9CisgICAgICAgICAgICAgICAgeyUgaWYgcGFja2FnZS5yZWNpcGVfaWQgPiAwICV9CisgICAgICAgICAgICAgICAgICAgIHt7cGFja2FnZS5zaXplfGZpbHRlcmVkX2ZpbGVzaXplZm9ybWF0fX0KKyAgICAgICAgICAgICAgICAgICAgeyUgaWYgdGFyZ2V0LmZpbGVfc2l6ZSAlfQorICAgICAgICAgICAgICAgICAgICAgICAgKHt7cGFja2FnZS5zaXplfG11bHRpcGx5OjEwMHxkaXZpZGU6dGFyZ2V0LmZpbGVfc2l6ZX19JSBvZiBpbmNsdWRlZCBwYWNrYWdlIHNpemUpCisgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisKKyAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPC9kZD4KKworICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIExpY2Vuc2UKKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIGxpY2Vuc2UgdW5kZXIgd2hpY2ggdGhpcyBwYWNrYWdlIGlzIGRpc3RyaWJ1dGVkIj48L2k+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPnt7cGFja2FnZS5saWNlbnNlfX08L2RkPgorCisgICAgICAgICAgICB7JSBjb21tZW50ICV9CisgICAgICAgICAgICAjIFJlbW92ZWQgcGVyIHJldmlldyBvbiAxLzE4LzIwMTQgdW50aWwgbGljZW5zZSBkYXRhIHBvcHVsYXRpb24KKyAgICAgICAgICAgICMgcHJvYmxlbXNlIGFyZSByZXNvbHZlZC4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICBMaWNlbnNlIGZpbGVzCisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlBhdGggdG8gdGhlIGxpY2Vuc2UgZmlsZXMgdGhhdCBhcHBseSB0byB0aGUgcGFja2FnZSI+PC9pPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZD48L2RkPgorICAgICAgICAgICAgeyUgZW5kY29tbWVudCAlfQorCisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgUmVjaXBlCisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBuYW1lIG9mIHRoZSByZWNpcGUgYnVpbGRpbmcgdGhpcyBwYWNrYWdlIj48L2k+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIHslIGlmIHBhY2thZ2UucmVjaXBlX2lkID4gMCAlfQorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgInJlY2lwZSIgYnVpbGQuaWQgcGFja2FnZS5yZWNpcGVfaWQgJX0iPiB7e3BhY2thZ2UucmVjaXBlLm5hbWV9fSA8L2E+CisgICAgICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgICAgICB7e3BhY2thZ2UucmVjaXBlLm5hbWV9fQorICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICA8L2RkPgorCisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgUmVjaXBlIHZlcnNpb24KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHZlcnNpb24gb2YgdGhlIHJlY2lwZSBidWlsZGluZyB0aGlzIHBhY2thZ2UiPjwvaT4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+e3twYWNrYWdlLnJlY2lwZS52ZXJzaW9ufX08L2RkPgorCisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgTGF5ZXIKKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIG5hbWUgb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlIHRoYXQgYnVpbGRzIHRoaXMgcGFja2FnZSI+PC9pPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICB7e3BhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZX19CisgICAgICAgICAgICAgICAgeyUgaWYgcGFja2FnZS5yZWNpcGUubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfGZvcm1hdF9ub25lX2FuZF96ZXJvICE9ICIiICV9CisgICAgICAgICAgICAgICAgICAgIHslIGNvbW1lbnQgJX0KKyAgICAgICAgICAgICAgICAgICAgIyBSZW1vdmVkIHBlciB0ZWFtIG1lZXRpbmcgb2YgMS8yOS8yMDE0IHVudGlsCisgICAgICAgICAgICAgICAgICAgICMgZGVjaXNpb24gb24gaW5kZXggc2VhcmNoIGFsZ29yaXRobQorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmciICB0YXJnZXQ9Il9ibGFuayI+CisgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXNoYXJlIGdldC1pbmZvIj48L2k+CisgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgeyUgZW5kY29tbWVudCAlfQorICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgeyUgaWYgcGFja2FnZS5yZWNpcGUubGF5ZXJfdmVyc2lvbi5icmFuY2ggJX0KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICBMYXllciBicmFuY2gKKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIEdpdCBicmFuY2ggb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlIHRoYXQgYnVpbGRzIHRoaXMgcGFja2FnZSI+PC9pPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZD57e3BhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24uYnJhbmNofX08L2RkPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICBMYXllciBjb21taXQKKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIEdpdCBjb21taXQgb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlIHRoYXQgYnVpbGRzIHRoaXMgcGFja2FnZSI+PC9pPgorICAgICAgICAgICAgPC9kdD4KKworICAgICAgICAgICAgPGRkIGNsYXNzPSJpc2NvbW1pdCI+e3twYWNrYWdlLnJlY2lwZS5sYXllcl92ZXJzaW9uLmNvbW1pdH19PC9kZD4KKworICAgICAgICA8L2RsPgorICAgIDwvZGl2PiA8IS0tIHJvdzQgd2VsbCAtLT4KKyAgICB7JSBlbmRibG9jayB0d29jb2x1bW5zICV9Cit7JSBlbmRibG9jayBwYWdlZGV0YWlsaW5mb21haW4gJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2luY2x1ZGVkX2RlcGVuZGVuY2llcy5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfaW5jbHVkZWRfZGVwZW5kZW5jaWVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQyY2E2OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2luY2x1ZGVkX2RlcGVuZGVuY2llcy5odG1sCkBAIC0wLDAgKzEsMTEwIEBACit7JSBleHRlbmRzICJwYWNrYWdlX2RldGFpbF9iYXNlLmh0bWwiICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9CisKK3slIGJsb2NrIHRpdGxlICV9CisgICAgPGgxPgorICAgICAgICB7e3BhY2thZ2UuZnVsbHBhY2thZ2VzcGVjfX0KKyAgICAgICAgPHNjcmlwdD4gZm10QWxpYXNIZWxwKCJ7e3BhY2thZ2UubmFtZX19IiwgInt7cGFja2FnZS5hbGlhc319IiwgZmFsc2UpIDwvc2NyaXB0PgorICAgICAgICA8c21hbGw+KHt7dGFyZ2V0LnRhcmdldH19KTwvc21hbGw+CisgICAgPC9oMT4KK3slIGVuZGJsb2NrIHRpdGxlICV9CisKK3slIGJsb2NrIHRhYmNvbnRlbnQgJX0KKyAgICB7JSB3aXRoIHBhY2thZ2VGaWxlQ291bnQ9cGFja2FnZS5idWlsZGZpbGVsaXN0X3BhY2thZ2UuY291bnQgJX0KKyAgICB7JSBpbmNsdWRlICJwYWNrYWdlX2luY2x1ZGVkX3RhYnMuaHRtbCIgd2l0aCBhY3RpdmVfdGFiPSJkZXBlbmRlbmNpZXMiICV9CisgICAgPGRpdiBjbGFzcz0idGFiLWNvbnRlbnQiPgorICAgICAgIDxkaXYgY2xhc3M9InRhYi1wYW5lIGFjdGl2ZSIgaWQ9ImRlcGVuZGVuY2llcyI+CisgICAgICAgeyUgaWZub3RlcXVhbCBydW50aW1lX2RlcHN8bGVuZ3RoIDAgJX0KKyAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIiPgorICAgICAgICAgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlBhY2thZ2U8L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlZlcnNpb248L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSdzaXplY29sIHNwYW4yJz5TaXplPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICA8L3RoZWFkPgorICAgICAgICAgICAgICAgIDx0Ym9keT4KKwkJCQkJeyUgZm9yIHJ1bnRpbWVfZGVwIGluIHJ1bnRpbWVfZGVwcyAlfQorICAgICAgICAgICAgICAgICAgICAgICAgPHRyIHt7cnVudGltZV9kZXAuc2l6ZXxmb3JtYXRfdnBhY2thZ2Vfcm93Y2xhc3N9fSA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWYgcnVudGltZV9kZXAuc2l6ZSAhPSAtMSAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VfaW5jbHVkZWRfZGV0YWlsJyBidWlsZC5pZCB0YXJnZXQuaWQgcnVudGltZV9kZXAuZGVwZW5kc19vbl9pZCAlfSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3J1bnRpbWVfZGVwLm5hbWV9fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzY3JpcHQ+Zm10QWxpYXNIZWxwKCJ7e3J1bnRpbWVfZGVwLm5hbWV9fSIsICJ7e3J1bnRpbWVfZGVwLmFsaWFzfX0iLCB0cnVlKTwvc2NyaXB0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tydW50aW1lX2RlcC5uYW1lfGZvcm1hdF92cGFja2FnZV9uYW1laGVscH19CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3J1bnRpbWVfZGVwLnZlcnNpb259fSZuYnNwOzwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSdzaXplY29sJz57e3J1bnRpbWVfZGVwLnNpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fSZuYnNwOzwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorCQkJCQl7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPgorICAgICAgICAgICAgICAgIDxzdHJvbmc+e3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319PC9zdHJvbmc+IGhhcyBubyBydW50aW1lIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICB7JSBlbmRpZm5vdGVxdWFsICV9CisKKyAgICAgICAgeyUgaWZub3RlcXVhbCBvdGhlcl9kZXBzfGxlbmd0aCAwICV9CisgICAgICAgICAgICA8aDM+T3RoZXIgcnVudGltZSByZWxhdGlvbnNoaXBzPC9oMz4KKyAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIiPgorICAgICAgICAgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlBhY2thZ2U8L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlZlcnNpb248L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSdzaXplY29sIHNwYW4yJz5TaXplPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iRml2ZSByZWxhdGlvbnNoaXAgdHlwZXMgZXhpc3Q6IHJlY29tbWVuZHMsIHN1Z2dlc3RzLCBwcm92aWRlcywgcmVwbGFjZXMgYW5kIGNvbmZsaWN0cyI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGF0aW9uc2hpcCB0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgorICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgICAgICAgPHRib2R5PgorCQkJCQl7JSBmb3Igb3RoZXJfZGVwIGluIG90aGVyX2RlcHMgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIG90aGVyX2RlcC5pbnN0YWxsZWQgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIge3tvdGhlcl9kZXAuc2l6ZXxmb3JtYXRfdnBhY2thZ2Vfcm93Y2xhc3N9fT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWYgb3RoZXJfZGVwLnNpemUgIT0gLTEgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdwYWNrYWdlX2luY2x1ZGVkX2RldGFpbCcgYnVpbGQuaWQgdGFyZ2V0LmlkIG90aGVyX2RlcC5kZXBlbmRzX29uX2lkICV9Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e290aGVyX2RlcC5uYW1lfX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2NyaXB0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdEFsaWFzSGVscCgie3tvdGhlcl9kZXAubmFtZX19Iiwie3tvdGhlcl9kZXAuYWxpYXN9fSIsIHRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zY3JpcHQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e290aGVyX2RlcC5uYW1lfGZvcm1hdF92cGFja2FnZV9uYW1laGVscH19CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvdGhlcl9kZXAudmVyc2lvbn19Jm5ic3A7PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSdzaXplY29sJz57e290aGVyX2RlcC5zaXplfGZpbHRlcmVkX2ZpbGVzaXplZm9ybWF0fX0mbmJzcDs8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e290aGVyX2RlcC5kZXBfdHlwZV9kaXNwbGF5fX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaG92ZXItaGVscCIgdGl0bGU9Int7b3RoZXJfZGVwLmRlcF90eXBlX2hlbHB9fSIgPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0ibXV0ZWQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvdGhlcl9kZXAubmFtZX19PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7b3RoZXJfZGVwLnZlcnNpb259fTwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e290aGVyX2RlcC5kZXBfdHlwZV9kaXNwbGF5fX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaG92ZXItaGVscCIgdGl0bGU9Int7b3RoZXJfZGVwLmRlcF90eXBlX2hlbHB9fSIgPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKwkJCQkJeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgIHslIGVuZGlmbm90ZXF1YWwgJX0KKyAgICAgICAgPC9kaXY+IDwhLS0gZW5kIHRhYi1wYW5lIC0tPgorICAgIDwvZGl2PiA8IS0tIGVuZCB0YWIgY29udGVudCAtLT4KKyAgICB7JSBlbmR3aXRoICV9Cit7JSBlbmRibG9jayB0YWJjb250ZW50ICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9pbmNsdWRlZF9kZXRhaWwuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2luY2x1ZGVkX2RldGFpbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYWEyNmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9pbmNsdWRlZF9kZXRhaWwuaHRtbApAQCAtMCwwICsxLDQ0IEBACit7JSBleHRlbmRzICJwYWNrYWdlX2RldGFpbF9iYXNlLmh0bWwiICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9CisKK3slIGJsb2NrIHRpdGxlICV9CisgICAgICAgIDxoMT4KKyAgICAgICAgICAgIHt7cGFja2FnZS5mdWxscGFja2FnZXNwZWN9fQorICAgICAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgICAgICAgICBmbXRBbGlhc0hlbHAoInt7cGFja2FnZS5uYW1lfX0iLCAie3twYWNrYWdlLmFsaWFzfX0iLCBmYWxzZSkKKyAgICAgICAgICAgIDwvc2NyaXB0PgorICAgICAgICAgICAgPHNtYWxsPih7e3RhcmdldC50YXJnZXR9fSk8L3NtYWxsPgorICAgICAgICA8L2gxPgoreyUgZW5kYmxvY2sgdGl0bGUgJX0KKworeyUgYmxvY2sgdGFiY29udGVudCAlfQoreyUgd2l0aCBwYWNrYWdlRmlsZUNvdW50PXBhY2thZ2UuYnVpbGRmaWxlbGlzdF9wYWNrYWdlLmNvdW50ICV9CisgICAgeyUgaW5jbHVkZSAicGFja2FnZV9pbmNsdWRlZF90YWJzLmh0bWwiIHdpdGggYWN0aXZlX3RhYj0iZGV0YWlsIiAlfQorICAgIDxkaXYgY2xhc3M9InRhYi1jb250ZW50Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0idGFiLXBhbmUgYWN0aXZlIiBpZD0iZmlsZXMiPgorICAgICAgICAgICAgeyUgaWYgcGFja2FnZUZpbGVDb3VudCA+IDAgJX0KKyAgICAgICAgICAgIHslIGluY2x1ZGUgInRhYmxlc29ydC5odG1sIiAlfQorICAgICAgICAgICAgICAgIDx0Ym9keT4KKwkJCQkJeyUgZm9yIGZpbGUgaW4gb2JqZWN0cyAlfQorICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0icGF0aCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnZGlyaW5mb19maWxlcGF0aCcgYnVpbGQuaWQgdGFyZ2V0LmlkIGZpbGUucGF0aCAlfSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZpbGUucGF0aH19CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImZpbGVzaXplIHNpemVjb2wiID57e2ZpbGUuc2l6ZXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CisJCQkJCXslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgIDwvdGJvZHk+CisgICAgICAgICAgICA8L3RhYmxlPgorCisgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgICAgICA8c3Ryb25nPnt7cGFja2FnZS5mdWxscGFja2FnZXNwZWN9fTwvc3Ryb25nPiBkb2VzIG5vdCBnZW5lcmF0ZSBhbnkgZmlsZXMuCisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIDwvZGl2PiA8IS0tIGVuZCB0YWItcGFuZSAtLT4KKyAgICA8L2Rpdj4gPCEtLSBlbmQgdGFiIGNvbnRlbnQgLS0+CisKK3slIGVuZHdpdGggJX0KK3slIGVuZGJsb2NrIHRhYmNvbnRlbnQgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2luY2x1ZGVkX3JldmVyc2VfZGVwZW5kZW5jaWVzLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9pbmNsdWRlZF9yZXZlcnNlX2RlcGVuZGVuY2llcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYzhiNDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9pbmNsdWRlZF9yZXZlcnNlX2RlcGVuZGVuY2llcy5odG1sCkBAIC0wLDAgKzEsNTAgQEAKK3slIGV4dGVuZHMgInBhY2thZ2VfZGV0YWlsX2Jhc2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KKworeyUgYmxvY2sgdGl0bGUgJX0KKyAgICAgICAgPGgxPgorICAgICAgICAgICAge3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319CisgICAgICAgICAgICA8c2NyaXB0PiBmbXRBbGlhc0hlbHAoInt7cGFja2FnZS5uYW1lfX0iLCAie3twYWNrYWdlLmFsaWFzfX0iLCBmYWxzZSkgPC9zY3JpcHQ+CisgICAgICAgICAgICA8c21hbGw+KHt7dGFyZ2V0LnRhcmdldH19KTwvc21hbGw+CisgICAgICAgIDwvaDE+Cit7JSBlbmRibG9jayB0aXRsZSAlfQorCit7JSBibG9jayB0YWJjb250ZW50ICV9CisgICAgeyUgd2l0aCBwYWNrYWdlRmlsZUNvdW50PXBhY2thZ2UuYnVpbGRmaWxlbGlzdF9wYWNrYWdlLmNvdW50ICV9CisgICAgeyUgaW5jbHVkZSAicGFja2FnZV9pbmNsdWRlZF90YWJzLmh0bWwiIHdpdGggYWN0aXZlX3RhYj0icmV2ZXJzZSIgJX0KKyAgICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+CisgICAgICAgIDxkaXYgY2xhc3M9InRhYi1wYW5lIGFjdGl2ZSIgaWQ9ImJyb3VnaHQtaW4tYnkiPgorCisgICAgICAgIHslIGlmZXF1YWwgcmV2ZXJzZV9jb3VudCAwICV9CisgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPgorICAgICAgICAgICAgICAgIDxzdHJvbmc+e3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319PC9zdHJvbmc+IGhhcyBubyByZXZlcnNlIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgIHslIGluY2x1ZGUgInRhYmxlc29ydC5odG1sIiAlfQorICAgICAgICAgICAgICAgIDx0Ym9keT4KKwkJCQkJeyUgZm9yIHJldmVyc2VfZGVwIGluIG9iamVjdHMgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ciB7JSBpZiByZXZlcnNlX2RlcC5zaXplICV9e3tyZXZlcnNlX2RlcC5zaXplfGZvcm1hdF92cGFja2FnZV9yb3djbGFzc319eyVlbmRpZiV9ID4KKyAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIHJldmVyc2VfZGVwLnNpemUgIT0gLTEgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9pbmNsdWRlZF9kZXRhaWwnIGJ1aWxkLmlkIHRhcmdldC5pZCByZXZlcnNlX2RlcC5wYWNrYWdlX2lkICV9Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cmV2ZXJzZV9kZXAucGFja2FnZS5uYW1lfX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2NyaXB0PmZtdEFsaWFzSGVscCgie3tyZXZlcnNlX2RlcC5wYWNrYWdlLm5hbWV9fSIsICJ7e3JldmVyc2VfZGVwLmFsaWFzfX0iLCB0cnVlKTwvc2NyaXB0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tyZXZlcnNlX2RlcC5uYW1lfGZvcm1hdF92cGFja2FnZV9uYW1laGVscH19CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7cmV2ZXJzZV9kZXAucGFja2FnZS52ZXJzaW9ufX0mbmJzcDs8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0nc2l6ZWNvbCc+e3tyZXZlcnNlX2RlcC5wYWNrYWdlLnNpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fSZuYnNwOzwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorCQkJCQl7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgeyUgZW5kaWZlcXVhbCAlfQorICAgICAgICA8L2Rpdj4gPCEtLSBlbmQgdGFiLXBhbmUgLS0+CisgICAgPC9kaXY+IDwhLS0gZW5kIHRhYiBjb250ZW50IC0tPgorICAgIHslIGVuZHdpdGggJX0KK3slIGVuZGJsb2NrIHRhYmNvbnRlbnQgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2luY2x1ZGVkX3RhYnMuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2luY2x1ZGVkX3RhYnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NThhYTg4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfaW5jbHVkZWRfdGFicy5odG1sCkBAIC0wLDAgKzEsMzMgQEAKKworICAgIDx1bCBjbGFzcz0ibmF2IG5hdi1waWxscyI+CisgICAgeyUgaWYgYWN0aXZlX3RhYiA9PSAiZGV0YWlsIiAlfQorICAgICAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+CisgICAgeyUgZWxzZSAlfQorICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9pbmNsdWRlZF9kZXRhaWwnIGJ1aWxkLmlkIHRhcmdldC5pZCBwYWNrYWdlLmlkICV9Ij4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIGZpbGVzIHRoaXMgcGFja2FnZSBhZGRzIHRvIHRoZSBpbWFnZSByb290IGZpbGUgc3lzdGVtIj48L2k+CisgICAgICAgICAgICAgICAgRmlsZXMgaW4gcm9vdCBmaWxlIHN5c3RlbSAoe3twYWNrYWdlRmlsZUNvdW50fX0pCisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvbGk+CisgICAgeyUgaWYgYWN0aXZlX3RhYiA9PSAiZGVwZW5kZW5jaWVzIiAlfQorICAgICAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+CisgICAgeyUgZWxzZSAlfQorICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9pbmNsdWRlZF9kZXBlbmRlbmNpZXMnIGJ1aWxkLmlkIHRhcmdldC5pZCBwYWNrYWdlLmlkICV9Ij4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iUGFja2FnZSBydW50aW1lIGRlcGVuZGVuY2llcyI+PC9pPgorICAgICAgICAgICAgICAgIFJ1bnRpbWUgZGVwZW5kZW5jaWVzICh7e2RlcGVuZGVuY3lfY291bnR9fSkKKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC9saT4KKyAgICB7JSBpZiBhY3RpdmVfdGFiID09ICJyZXZlcnNlIiAlfQorICAgICAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+CisgICAgeyUgZWxzZSAlfQorICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9pbmNsdWRlZF9yZXZlcnNlX2RlcGVuZGVuY2llcycgYnVpbGQuaWQgdGFyZ2V0LmlkIHBhY2thZ2UuaWQgJX0iPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgcGFja2FnZSBydW50aW1lIHJldmVyc2UgZGVwZW5kZW5jaWVzIChpLmUuIHRoZSBwYWNrYWdlcyBpbiB0aGlzIGltYWdlIHRoYXQgZGVwZW5kIG9uIHRoaXMgcGFja2FnZSkuIFJldmVyc2UgZGVwZW5kZW5jaWVzIHJlZmxlY3Qgb25seSB0aGUgJ2RlcGVuZHMnIGRlcGVuZGVuY3kgdHlwZSI+PC9pPgorICAgICAgICAgICAgICAgIFJldmVyc2UgcnVudGltZSBkZXBlbmRlbmNpZXMgKHt7cmV2ZXJzZV9jb3VudH19KQorICAgICAgICAgICAgPC9hPgorICAgICAgICA8L2xpPgorICAgIDwvdWw+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdC5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODM1NGZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3QuaHRtbApAQCAtMCwwICsxLDEzMCBAQAoreyUgZXh0ZW5kcyAiYmFzZXByb2plY3RwYWdlLmh0bWwiICV9CisKK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KK3slIGxvYWQgc3RhdGljICV9CisKK3slIGJsb2NrIHByb2plY3RpbmZvbWFpbiAlfQorCis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9sYXllckRlcHNNb2RhbC5qcycgJX0iPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvcHJvamVjdHBhZ2UuanMnICV9Ij48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpeworICAgIHZhciBjdHggPSB7CisgICAgICB0ZXN0UmVsZWFzZUNoYW5nZVVybDogInslIHVybCAneGhyX3Rlc3RyZWxlYXNlY2hhbmdlJyBwcm9qZWN0LmlkICV9IiwKKyAgICB9OworCisgICAgdHJ5IHsKKyAgICAgIHByb2plY3RQYWdlSW5pdChjdHgpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIGRvY3VtZW50LndyaXRlKCJTb3JyeSwgQW4gZXJyb3IgaGFzIG9jY3VycmVkIGxvYWRpbmcgdGhpcyBwYWdlIik7CisgICAgICBjb25zb2xlLndhcm4oZSk7CisgICAgfQorICB9KTsKKzwvc2NyaXB0PgorCis8ZGl2IGlkPSJjaGFuZ2UtcmVsZWFzZS1tb2RhbCIgY2xhc3M9Im1vZGFsIGhpZGUgZmFkZSBpbiIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtbGFiZWxsZWRieT0iY2hhbmdlLXJlbGVhc2UtbW9kYWwiIGFyaWEtaGlkZGVuPSJmYWxzZSI+CisgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CisgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1oaWRkZW49InRydWUiPng8L2J1dHRvbj4KKyAgICA8aDM+Q2hhbmdpbmcgWW9jdG8gUHJvamVjdCByZWxlYXNlIHRvIDxzcGFuIGNsYXNzPSJwcm9wb3NlZC1yZWxlYXNlLWNoYW5nZS1uYW1lIj48L3NwYW4+PC9oMz4KKyAgPC9kaXY+CisgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorICAgIDxwPlRoZSBmb2xsb3dpbmcgYWRkZWQgbGF5ZXJzIGRvIG5vdCBleGlzdCBmb3IgPHNwYW4gY2xhc3M9InByb3Bvc2VkLXJlbGVhc2UtY2hhbmdlLW5hbWUiPjwvc3Bhbj46IDwvcD4KKyAgICA8dWwgaWQ9ImxheWVycy10by1yZW1vdmUtbGlzdCI+CisgICAgPC91bD4KKyAgICA8cD5JZiB5b3UgY2hhbmdlIHRoZSBZb2N0byBQcm9qZWN0IHJlbGVhc2UgdG8gPHNwYW4gY2xhc3M9InByb3Bvc2VkLXJlbGVhc2UtY2hhbmdlLW5hbWUiPjwvc3Bhbj4sIHRoZSBhYm92ZSBsYXllcnMgd2lsbCBiZSBkZWxldGVkIGZyb20geW91ciBhZGRlZCBsYXllcnMuPC9wPgorICA8L2Rpdj4KKyAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KKyAgICA8YnV0dG9uIGlkPSJjaGFuZ2UtcmVsZWFzZS1hbmQtcm0tbGF5ZXJzIiBkYXRhLWRpc21pc3M9Im1vZGFsIiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiPkNoYW5nZSByZWxlYXNlIGFuZCBkZWxldGUgbGF5ZXJzPC9idXR0b24+CisgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+Q2FuY2VsPC9idXR0b24+CisgIDwvZGl2PgorPC9kaXY+CisKKworPGRpdiBjbGFzcz0icm93LWZsdWlkIiBpZD0icHJvamVjdC1wYWdlIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgPGRpdiBjbGFzcz0ic3BhbjYiPgorICAgIDxkaXYgY2xhc3M9IndlbGwgd2VsbC10cmFuc3BhcmVudCIgaWQ9Im1hY2hpbmUtc2VjdGlvbiI+CisgICAgICA8aDM+TWFjaGluZTwvaDM+CisKKyAgICAgIDxwIGNsYXNzPSJsZWFkIj48c3BhbiBpZD0icHJvamVjdC1tYWNoaW5lLW5hbWUiPjwvc3Bhbj4gPGkgdGl0bGU9IiIgZGF0YS1vcmlnaW5hbC10aXRsZT0iIiBpZD0iY2hhbmdlLW1hY2hpbmUtdG9nZ2xlIiBjbGFzcz0iaWNvbi1wZW5jaWwiPjwvaT48L3A+CisKKyAgICAgIDxmb3JtIGlkPSJzZWxlY3QtbWFjaGluZS1mb3JtIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CisgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPgorICAgICAgICAgIDxzdHJvbmc+TWFjaGluZSBjaGFuZ2VzIGhhdmUgYSBiaWcgaW1wYWN0IG9uIGJ1aWxkIG91dGNvbWUuPC9zdHJvbmc+IFlvdSBjYW5ub3QgcmVhbGx5IGNvbXBhcmUgdGhlIGJ1aWxkcyBmb3IgdGhlIG5ldyBtYWNoaW5lIHdpdGggdGhlIHByZXZpb3VzIG9uZXMuCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWFwcGVuZCI+CisgICAgICAgICAgPGlucHV0IGlkPSJtYWNoaW5lLWNoYW5nZS1pbnB1dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHZhbHVlPSIiIGRhdGEtcHJvdmlkZT0idHlwZWFoZWFkIiBkYXRhLW1pbmxlbmd0aD0iMSIgZGF0YS1hdXRvY29tcGxldGU9Im9mZiIgdHlwZT0idGV4dCI+CisgICAgICAgICAgICA8YnV0dG9uIGlkPSJtYWNoaW5lLWNoYW5nZS1idG4iIGNsYXNzPSJidG4iIHR5cGU9ImJ1dHRvbiI+U2F2ZTwvYnV0dG9uPiA8YSBocmVmPSIjIiBpZD0iY2FuY2VsLW1hY2hpbmUtY2hhbmdlIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj5DYW5jZWw8L2E+CisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxwPjxhIGhyZWY9InslIHVybCAncHJvamVjdG1hY2hpbmVzJyBwcm9qZWN0LmlkICV9IiBjbGFzcz0ibGluayI+VmlldyBjb21wYXRpYmxlIG1hY2hpbmVzPC9hPjwvcD4KKyAgICAgIDwvZm9ybT4KKyAgICA8L2Rpdj4KKworICAgIDxkaXYgY2xhc3M9IndlbGwgd2VsbC10cmFuc3BhcmVudCI+CisgICAgICA8aDM+TW9zdCBidWlsdCByZWNpcGVzPC9oMz4KKworICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyIgc3R5bGU9ImRpc3BsYXk6bm9uZSIgaWQ9Im5vLW1vc3QtYnVpbHQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibGVhZCI+WW91IGhhdmVuJ3QgYnVpbHQgYW55IHJlY2lwZXMgeWV0PC9zcGFuPgorICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLXRvcDogMTBweDsiPjxhIGhyZWY9InslIHVybCAncHJvamVjdHRhcmdldHMnIHByb2plY3QuaWQgJX0iPkNob29zZSBhIHJlY2lwZSB0byBidWlsZDwvYT48L3A+CisgICAgICA8L2Rpdj4KKworICAgICAgPHVsIGNsYXNzPSJ1bnN0eWxlZCBjb25maWd1cmF0aW9uLWxpc3QiIGlkPSJmcmVxLWJ1aWxkLWxpc3QiPgorICAgICAgPC91bD4KKyAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgaWQ9ImZyZXEtYnVpbGQtYnRuIiBkaXNhYmxlZD0iZGlzYWJsZWQiPkJ1aWxkIHNlbGVjdGVkIHJlY2lwZXM8L2J1dHRvbj4KKyAgICA8L2Rpdj4KKworICAgIDxkaXYgY2xhc3M9IndlbGwgd2VsbC10cmFuc3BhcmVudCI+CisgICAgICA8aDM+UHJvamVjdCByZWxlYXNlPC9oMz4KKworICAgICAgPHAgY2xhc3M9ImxlYWQiPjxzcGFuIGlkPSJwcm9qZWN0LXJlbGVhc2UtdGl0bGUiPjwvc3Bhbj4gPGkgdGl0bGU9IiIgZGF0YS1vcmlnaW5hbC10aXRsZT0iIiBpZD0icmVsZWFzZS1jaGFuZ2UtdG9nZ2xlIiBjbGFzcz0iaWNvbi1wZW5jaWwiPjwvaT48L3A+CisKKyAgICAgIDxmb3JtIGNsYXNzPSJmb3JtLWlubGluZSIgaWQ9ImNoYW5nZS1yZWxlYXNlLWZvcm0iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKyAgICAgICAgPHNlbGVjdD48L3NlbGVjdD4KKyAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiBzdHlsZT0ibWFyZ2luLWxlZnQ6NXB4OyIgaWQ9ImNoYW5nZS1yZWxlYXNlLWJ0biI+Q2hhbmdlPC9idXR0b24+IDxhIGhyZWY9IiMiIGlkPSJjYW5jZWwtcmVsZWFzZS1jaGFuZ2UiIGNsYXNzPSJidG4gYnRuLWxpbmsiPkNhbmNlbDwvYT4KKyAgICAgIDwvZm9ybT4KKyAgICA8L2Rpdj4KKyAgPC9kaXY+CisKKyAgPGRpdiBjbGFzcz0ic3BhbjYiPgorICAgIDxkaXYgY2xhc3M9IndlbGwgd2VsbC10cmFuc3BhcmVudCIgaWQ9ImxheWVyLWNvbnRhaW5lciI+CisgICAgICA8aDM+TGF5ZXJzIDxzcGFuIGNsYXNzPSJtdXRlZCBjb3VudGVyIj4oPHNwYW4gaWQ9InByb2plY3QtbGF5ZXJzLWNvdW50Ij48L3NwYW4+KTwvc3Bhbj4KKyAgICAgICAgPGkgZGF0YS1vcmlnaW5hbC10aXRsZT0iT3BlbkVtYmVkZGVkIG9yZ2FuaXNlcyBtZXRhZGF0YSBpbnRvIG1vZHVsZXMgY2FsbGVkICdsYXllcnMnLiBMYXllcnMgYWxsb3cgeW91IHRvIGlzb2xhdGUgZGlmZmVyZW50IHR5cGVzIG9mIGN1c3RvbWl6YXRpb25zIGZyb20gZWFjaCBvdGhlci4gPGEgaHJlZj0naHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvY3VycmVudC9kZXYtbWFudWFsL2Rldi1tYW51YWwuaHRtbCN1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnIHRhcmdldD0nX2JsYW5rJz5Nb3JlIG9uIGxheWVyczwvYT4iIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaGVhZGluZy1oZWxwIiB0aXRsZT0iIj48L2k+CisgICAgICA8L2gzPgorCisgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBsZWFkIiBpZD0ibm8tbGF5ZXJzLWluLXByb2plY3QiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICAgICAgICBZb3UgbmVlZCB0byBhZGQgc29tZSBsYXllcnMuIEZvciB0aGF0IHlvdSBjYW46CisgICAgICAgIDx1bD4KKyAgICAgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0bGF5ZXJzJyBwcm9qZWN0LmlkICV9Ij5WaWV3IGFsbCBsYXllcnMgY29tcGF0aWJsZSB3aXRoIHRoaXMgcHJvamVjdDwvYT48L2xpPgorICAgICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ2ltcG9ydGxheWVyJyBwcm9qZWN0LmlkICV9Ij5JbXBvcnQgYSBsYXllcjwvYT48L2xpPgorICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9jdXJyZW50L2Rldi1tYW51YWwvZGV2LW1hbnVhbC5odG1sI3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycyIgdGFyZ2V0PSJfYmxhbmsiPlJlYWQgYWJvdXQgbGF5ZXJzIGluIHRoZSBkb2N1bWVudGF0aW9uPC9hPjwvbGk+CisgICAgICAgIDwvdWw+CisgICAgICAgIDxwPk9yIHR5cGUgYSBsYXllciBuYW1lIGJlbG93LjwvcD4KKyAgICAgIDwvZGl2PgorCisgICAgICA8Zm9ybSBzdHlsZT0ibWFyZ2luLXRvcDoyMHB4Ij4KKyAgICAgICAgPCEtLWRpdiBjbGFzcz0iY29udHJvbC1ncm91cCBlcnJvciItLT4KKworICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1hcHBlbmQiPgorICAgICAgICAgIDxpbnB1dCBpZD0ibGF5ZXItYWRkLWlucHV0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IlR5cGUgYSBsYXllciBuYW1lIiBkYXRhLW1pbmxlbmd0aD0iMSIgZGF0YS1hdXRvY29tcGxldGU9Im9mZiIgZGF0YS1wcm92aWRlPSJ0eXBlYWhlYWQiIGRhdGEtc291cmNlPSIiIHR5cGU9InRleHQiPgorICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYWRkLWxheWVyLWJ0biIgY2xhc3M9ImJ0biIgZGlzYWJsZWQ+QWRkPC9idXR0b24+CisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9ImltcG9ydC1hbGVydCIgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKyAgICAgICAgICBUb2FzdGVyIGRvZXMgbm90IGtub3cgYWJvdXQgdGhpcyBsYXllci4gUGxlYXNlIDxhIGhyZWY9IiMiPmltcG9ydCBpdDwvYT4KKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPHA+CisgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0bGF5ZXJzJyBwcm9qZWN0LmlkICV9IiBpZD0idmlldy1jb21wYXRpYmxlLWxheWVycyI+VmlldyBjb21wYXRpYmxlIGxheWVyczwvYT4KKyAgICAgICAgICA8aSBkYXRhLW9yaWdpbmFsLXRpdGxlPSJWaWV3IGFsbCB0aGUgbGF5ZXJzIHlvdSBjYW4gYnVpbGQgd2l0aCB0aGUgcmVsZWFzZSBzZWxlY3RlZCBmb3IgdGhpcyBwcm9qZWN0LCB3aGljaCBpcyBZb2N0byBQcm9qZWN0IG1hc3RlciIgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IiI+PC9pPgorICAgICAgICAgIHwgPGEgaHJlZj0ieyUgdXJsICdpbXBvcnRsYXllcicgcHJvamVjdC5pZCAlfSI+SW1wb3J0IGxheWVyPC9hPgorICAgICAgICA8L3A+CisgICAgICA8L2Zvcm0+CisKKyAgICAgIDx1bCBjbGFzcz0idW5zdHlsZWQgY29uZmlndXJhdGlvbi1saXN0IiBpZD0ibGF5ZXJzLWluLXByb2plY3QtbGlzdCI+CisgICAgICA8L3VsPgorICAgIDwvZGl2PgorICA8L2Rpdj4KKzwvZGl2PgoreyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0YnVpbGRzLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdGJ1aWxkcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmODA5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdGJ1aWxkcy5odG1sCkBAIC0wLDAgKzEsMTAzIEBACit7JSBleHRlbmRzICJiYXNlcHJvamVjdGJ1aWxkc3BhZ2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KKworCit7JSBibG9jayBleHRyYWhlYWRjb250ZW50ICV9Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2pxdWVyeS11aS5taW4uY3NzIiB0eXBlPSd0ZXh0L2Nzcyc+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2pxdWVyeS11aS5zdHJ1Y3R1cmUubWluLmNzcyIgdHlwZT0ndGV4dC9jc3MnPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9qcXVlcnktdWkudGhlbWUubWluLmNzcyIgdHlwZT0ndGV4dC9jc3MnPgorPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvanF1ZXJ5LXVpLm1pbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy9maWx0ZXJzbmlwcGV0LmpzIj48L3NjcmlwdD4KK3slIGVuZGJsb2NrICV9CisKK3slIGJsb2NrIHByb2plY3RpbmZvbWFpbiAlfQorCis8c2NyaXB0PgorICAgIC8vIGluaXRpYWxpemUgdGhlIGRhdGUgcmFuZ2UgY29udHJvbHMKKyAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7CisgICAgICAgIGRhdGVfaW5pdCgnY3JlYXRlZCcsJ3t7bGFzdF9kYXRlX2Zyb219fScsJ3t7bGFzdF9kYXRlX3RvfX0nLCd7e2RhdGVNaW5fc3RhcnRlZF9vbn19Jywne3tkYXRlTWF4X3N0YXJ0ZWRfb259fScsJ3t7ZGF0ZXJhbmdlX3NlbGVjdGVkfX0nKTsKKyAgICAgICAgZGF0ZV9pbml0KCd1cGRhdGVkJywne3tsYXN0X2RhdGVfZnJvbX19Jywne3tsYXN0X2RhdGVfdG99fScsJ3t7ZGF0ZU1pbl9jb21wbGV0ZWRfb259fScsJ3t7ZGF0ZU1heF9jb21wbGV0ZWRfb259fScsJ3t7ZGF0ZXJhbmdlX3NlbGVjdGVkfX0nKTsKKyAgICB9KTsKKzwvc2NyaXB0PgorCisgICAgICA8aDI+CisgICAgICAgIHslIGlmIHJlcXVlc3QuR0VULmZpbHRlciBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAwIG9yIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAwICV9CisgICAgICAgICAgICB7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fX0gYnVpbGR7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fHBsdXJhbGl6ZX19IGZvdW5kCisgICAgICAgIHslZWxpZiByZXF1ZXN0LkdFVC5maWx0ZXIgYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgb3IgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgICAgICAgICAgICBObyBidWlsZHMgZm91bmQKKyAgICAgICAgeyVlbHNlJX0KKyAgICAgICAgICAgIFByb2plY3QgYnVpbGRzCisgICAgICAgIHslZW5kaWYlfQorICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhlYWRpbmctaGVscCIgdGl0bGU9IlRoaXMgcGFnZSBsaXN0cyBhbGwgdGhlIGJ1aWxkcyBmb3IgdGhlIGN1cnJlbnQgcHJvamVjdCI+PC9pPgorICAgICAgPC9oMj4KKworCisgeyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICB7JSBpZiByZXF1ZXN0LkdFVC5maWx0ZXIgb3IgcmVxdWVzdC5HRVQuc2VhcmNoICV9CisgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0Ij4KKyAgICAgICAgPGZvcm0gY2xhc3M9Im5vLXJlc3VsdHMgaW5wdXQtYXBwZW5kIiBpZD0ic2VhcmNoZm9ybSI+CisgICAgICAgICAgICA8aW5wdXQgaWQ9InNlYXJjaCIgbmFtZT0ic2VhcmNoIiBjbGFzcz0iaW5wdXQteHhsYXJnZSIgdHlwZT0idGV4dCIgdmFsdWU9Int7cmVxdWVzdC5HRVQuc2VhcmNofX0iLz57JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX08YSBocmVmPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiIGNsYXNzPSJhZGQtb24gYnRuIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPjwvYT57JSBlbmRpZiAlfQorICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTZWFyY2giPlNlYXJjaDwvYnV0dG9uPgorICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1saW5rIiBvbmNsaWNrPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiPlNob3cgYWxsIGJ1aWxkczwvYnV0dG9uPgorICAgICAgICA8L2Zvcm0+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgeyUgZWxzZSAlfQorICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPgorICAgICAgPHAgY2xhc3M9ImxlYWQiPgorICAgICAgICBUaGlzIHByb2plY3QgaGFzIG5vIGJ1aWxkcy4KKyAgICAgIDwvcD4KKyAgICA8L2Rpdj4KKyAgeyUgZW5kaWYgJX0KKworIHslIGVsc2UgJX0KKworICB7JSBpbmNsdWRlICJiYXNldGFibGVfdG9wLmh0bWwiICV9CisgICAgICAgIDwhLS0gVGFibGUgZGF0YSByb3dzOyB0aGUgb3JkZXIgbmVlZHMgdG8gbWF0Y2ggdGhlIG9yZGVyIG9mICJ0YWJsZWNvbHMiIGRlZmluaXRpb25zOyBhbmQgdGhlIDx0ZCBjbGFzcyB2YWx1ZSBuZWVkcyB0byBtYXRjaCB0aGUgdGFibGVjb2xzIGNsY2xhc3MgdmFsdWUgZm9yIHNob3cvaGlkZSBidXR0b25zIHRvIHdvcmsgLS0+CisgICAgICAgIHslIGZvciBidWlsZCBpbiBvYmplY3RzICV9IHsjIGlmIHdlIGhhdmUgYSBidWlsZCwganVzdCBkaXNwbGF5IGl0ICN9CisgICAgICAgIDx0ciBjbGFzcz0iZGF0YSI+CisgICAgICAgICAgICA8dGQgY2xhc3M9Im91dGNvbWUiPjxhIGhyZWY9InslIHVybCAiYnVpbGRkYXNoYm9hcmQiIGJ1aWxkLmlkICV9Ij57JWlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEJX08aSBjbGFzcz0iaWNvbi1vay1zaWduIHN1Y2Nlc3MiPjwvaT57JWVsaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5GQUlMRUQlfTxpIGNsYXNzPSJpY29uLW1pbnVzLXNpZ24gZXJyb3IiPjwvaT57JWVsc2UlfXslZW5kaWYlfTwvYT4KKyAgICAgICAgICAgICAgICAgICB7JSBpZiBidWlsZC5wcm9qZWN0ICV9CisgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDsgPGEgaHJlZj0ieyUgdXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQuaWQgImNvb2tlcmxvZyIgYnVpbGQuaWQgJX0iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLWRvd25sb2FkLWFsdCIgdGl0bGU9IiIgZGF0YS1vcmlnaW5hbC10aXRsZT0iRG93bmxvYWQgYnVpbGQgbG9nIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICA8L3RkPgorCisgICAgICAgICAgICA8dGQgY2xhc3M9InRhcmdldCI+eyUgZm9yIHQgaW4gYnVpbGQudGFyZ2V0X3NldC5hbGwgJX0gPGEgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgYnVpbGQuaWQgJX0iPiB7e3QudGFyZ2V0fX0gPC9hPiA8YnIgLz57JSBlbmRmb3IgJX08L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJtYWNoaW5lIj48YSBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBidWlsZC5pZCAlfSI+e3tidWlsZC5tYWNoaW5lfX08L2E+PC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0ic3RhcnRlZF9vbiI+PGEgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgYnVpbGQuaWQgJX0iPnt7YnVpbGQuc3RhcnRlZF9vbnxkYXRlOiJkL20veSBIOmkifX08L2E+PC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29tcGxldGVkX29uIj48YSBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBidWlsZC5pZCAlfSI+e3tidWlsZC5jb21wbGV0ZWRfb258ZGF0ZToiZC9tL3kgSDppIn19PC9hPjwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9ImZhaWxlZF90YXNrcyBlcnJvciI+CisgICAgICAgICAgICAgICAgeyUgcXVlcnkgYnVpbGQudGFza19idWlsZCBvdXRjb21lPTQgb3JkZXJfX2d0PTAgYXMgZXhlY3Rhc2slfQorICAgICAgICAgICAgICAgICAgICB7JSBpZiBleGVjdGFzay5jb3VudCA9PSAxICV9CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgInRhc2siIGJ1aWxkLmlkIGV4ZWN0YXNrLjAuaWQgJX0iPnt7ZXhlY3Rhc2suMC5yZWNpcGUubmFtZX19Lnt7ZXhlY3Rhc2suMC50YXNrX25hbWV9fTwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnYnVpbGRfYXJ0aWZhY3QnIGJ1aWxkLmlkICJ0YXNrbG9nZmlsZSIgZXhlY3Rhc2suMC5pZCAlfSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tZG93bmxvYWQtYWx0IiB0aXRsZT0iIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSJEb3dubG9hZCB0YXNrIGxvZyBmaWxlIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgIHslIGVsaWYgZXhlY3Rhc2suY291bnQgPiAxJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAidGFza3MiIGJ1aWxkLmlkICV9P2ZpbHRlcj1vdXRjb21lJTNBNCI+e3tleGVjdGFzay5jb3VudH19IHRhc2t7e2V4ZWN0YXNrLmNvdW50fHBsdXJhbGl6ZX19PC9hPgorICAgICAgICAgICAgICAgICAgICB7JWVuZGlmJX0KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9ImVycm9ycy5jb3VudCI+CisgICAgICAgICAgICAgICAgeyUgaWYgIGJ1aWxkLmVycm9ycy5jb3VudCAlfQorICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iZXJyb3JzLmNvdW50IGVycm9yIiBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBidWlsZC5pZCAlfSNlcnJvcnMiPnt7YnVpbGQuZXJyb3JzLmNvdW50fX0gZXJyb3J7e2J1aWxkLmVycm9ycy5jb3VudHxwbHVyYWxpemV9fTwvYT4KKyAgICAgICAgICAgICAgICB7JWVuZGlmJX0KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9Indhcm5pbmdzLmNvdW50Ij57JSBpZiAgYnVpbGQud2FybmluZ3MuY291bnQgJX08YSBjbGFzcz0id2FybmluZ3MuY291bnQgd2FybmluZyIgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgYnVpbGQuaWQgJX0jd2FybmluZ3MiPnt7YnVpbGQud2FybmluZ3MuY291bnR9fSB3YXJuaW5ne3tidWlsZC53YXJuaW5ncy5jb3VudHxwbHVyYWxpemV9fTwvYT57JWVuZGlmJX08L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJ0aW1lIj48YSBocmVmPSJ7JSB1cmwgImJ1aWxkdGltZSIgYnVpbGQuaWQgJX0iPnt7YnVpbGQudGltZXNwZW50X3NlY29uZHN8c2VjdG9obXN9fTwvYT48L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJvdXRwdXQiPgorICAgICAgICAgICAgICB7JSBpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLlNVQ0NFRURFRCAlfQorICAgICAgICAgICAgICA8YSBocmVmPSJ7JXVybCAiYnVpbGRkYXNoYm9hcmQiIGJ1aWxkLmlkJX0jaW1hZ2VzIj57e2ZzdHlwZXN8Z2V0X2RpY3RfdmFsdWU6YnVpbGQuaWR9fTwvYT4KKyAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIHslIGVuZGZvciAlfQorCisKKyAgeyUgaW5jbHVkZSAiYmFzZXRhYmxlX2JvdHRvbS5odG1sIiAlfQoreyUgZW5kaWYgJX0KKworeyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0Y29uZi5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3Rjb25mLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM1YTE4OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0Y29uZi5odG1sCkBAIC0wLDAgKzEsODQ5IEBACit7JSBleHRlbmRzICJiYXNlcHJvamVjdHBhZ2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KKworCit7JSBibG9jayBwcm9qZWN0aW5mb21haW4gJX0KKworPGgyPkJpdGJha2UgdmFyaWFibGVzPC9oMj4KKworICAgIDxkaXYgc3R5bGU9InBhZGRpbmctbGVmdDoxOXB4OyI+CisKKyAgICAgICAgPGRsIGNsYXNzPSJkbC12ZXJ0aWNhbCI+CisgICAgICAgICAgICB7JSBpZiBkaXN0cm9fZGVmaW5lZCAlfQorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJqcy1jb25maWctdmFyLW5hbWUganMtY29uZmlnLXZhci1tYW5hZ2VkLW5hbWUiPkRJU1RSTzwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHNob3J0IG5hbWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gSWYgdGhlIHZhcmlhYmxlIGlzIGJsYW5rLCBtZXRhL2NvbmYvZGlzdHJvL2RlZmF1bHRzZXR1cC5jb25mIHdpbGwgYmUgdXNlZC4gPGJyIC8+PGEgaHJlZj0naHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvMS42LjEvcmVmLW1hbnVhbC9yZWYtbWFudWFsLmh0bWwjdmFyLURJU1RSTycgdGFyZ2V0PSdfYmxhbmsnPlJlYWQgbW9yZSBpbiB0aGUgbWFudWFsPC9hPiI+PC9pPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZCBjbGFzcz0ibGVhZCI+CisgICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImRpc3RybyI+e3tkaXN0cm99fTwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1wZW5jaWwiIGlkPSJjaGFuZ2UtZGlzdHJvLWljb24iPjwvaT4KKyAgICAgICAgICAgICAgICA8Zm9ybSBpZD0iY2hhbmdlLWRpc3Ryby1mb3JtIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWFwcGVuZCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAgaWQ9ImVkaXQtZGlzdHJvLW5hbWUtZGl2IiBjbGFzcz0iY29udHJvbC1ncm91cCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJuZXctZGlzdHJvIiB2YWx1ZT0ie3tkaXN0cm99fSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYXBwbHktY2hhbmdlLWRpc3RybyIgY2xhc3M9ImJ0biIgdHlwZT0iYnV0dG9uIj5TYXZlPC9idXR0b24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iY2FuY2VsLWNoYW5nZS1kaXN0cm8iIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tbGluayI+Q2FuY2VsPC9idXR0b24+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1ibG9jayBlcnJvciIgaWQ9ImRpc3Ryby1lcnJvci1tZXNzYWdlIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgICAgICAgICB7JSBpZiBmc3R5cGVzX2RlZmluZWQgJX0KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ianMtY29uZmlnLXZhci1uYW1lIGpzLWNvbmZpZy12YXItbWFuYWdlZC1uYW1lIj5JTUFHRV9GU1RZUEVTPC9zcGFuPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJGb3JtYXRzIG9mIHJvb3QgZmlsZSBzeXN0ZW0gaW1hZ2VzIHRoYXQgeW91IHdhbnQgdG8gaGF2ZSBjcmVhdGVkIDxiciAvPjxhIGhyZWY9J2h0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuNi4xL3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci1JTUFHRV9GU1RZUEVTJyB0YXJnZXQ9J19ibGFuayc+UmVhZCBtb3JlIGluIHRoZSBtYW51YWw8L2E+Ij48L2k+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkIGNsYXNzPSJsZWFkIj4KKyAgICAgICAgICAgICAgICA8c3BhbiBpZD0iaW1hZ2VfZnN0eXBlcyI+e3tmc3R5cGVzfX08L3NwYW4+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcGVuY2lsIiBpZD0iY2hhbmdlLWltYWdlX2ZzdHlwZXMtaWNvbiI+PC9pPgorICAgICAgICAgICAgICAgIDxmb3JtIGlkPSJjaGFuZ2UtaW1hZ2VfZnN0eXBlcy1mb3JtIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CisgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iZmlsdGVyLWltYWdlX2ZzdHlwZXMiIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJTZWFyY2ggaW1hZ2UgdHlwZXMiIGNsYXNzPSJzcGFuNCI+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImFsbC1pbWFnZV9mc3R5cGVzIiBjbGFzcz0ic2Nyb2xsaW5nIj4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImFwcGx5LWNoYW5nZS1pbWFnZV9mc3R5cGVzIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4iPlNhdmU8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iY2FuY2VsLWNoYW5nZS1pbWFnZV9mc3R5cGVzIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWxpbmsiPkNhbmNlbDwvYnV0dG9uPgorICAgICAgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgICAgICAgICB7JSBpZiBpbWFnZV9pbnN0YWxsX2FwcGVuZF9kZWZpbmVkICV9CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImpzLWNvbmZpZy12YXItbmFtZSBqcy1jb25maWctdmFyLW1hbmFnZWQtbmFtZSI+SU1BR0VfSU5TVEFMTF9hcHBlbmQ8L3NwYW4+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlNwZWNpZmllcyBhZGRpdGlvbmFsIHBhY2thZ2VzIHRvIGluc3RhbGwgaW50byBhbiBpbWFnZS4gSWYgeW91ciBidWlsZCBjcmVhdGVzIG1vcmUgdGhhbiBvbmUgaW1hZ2UsIHRoZSBwYWNrYWdlcyB3aWxsIGJlIGluc3RhbGxlZCBpbiA8c3Ryb25nPmFsbCBvZiB0aGVtPC9zdHJvbmc+IDxiciAvPjxhIGhyZWY9J2h0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuNi4xL3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci1JTUFHRV9JTlNUQUxMJyB0YXJnZXQ9J19ibGFuayc+UmVhZCBtb3JlIGluIHRoZSBtYW51YWw8L2E+Ij48L2k+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkIGNsYXNzPSJsZWFkIj4KKyAgICAgICAgICAgICAgICA8c3BhbiBpZD0iaW1hZ2VfaW5zdGFsbCJ7JSBpZiBpbWFnZV9pbnN0YWxsX2FwcGVuZCAlfXslZWxzZSV9IGNsYXNzPSJtdXRlZCJ7JWVuZGlmJX0+eyUgaWYgaW1hZ2VfaW5zdGFsbF9hcHBlbmQgJX17e2ltYWdlX2luc3RhbGxfYXBwZW5kfX17JWVsc2UlfU5vdCBzZXR7JWVuZGlmJX08L3NwYW4+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcGVuY2lsIiBpZD0iY2hhbmdlLWltYWdlX2luc3RhbGwtaWNvbiI+PC9pPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXRyYXNoIiBpZD0iZGVsZXRlLWltYWdlX2luc3RhbGwtaWNvbiIgeyUgaWYgaW1hZ2VfaW5zdGFsbF9hcHBlbmQgJX17JWVsc2UlfXN0eWxlPSJkaXNwbGF5Om5vbmU7InslZW5kaWYlfT48L2k+CisgICAgICAgICAgICAgICAgPGZvcm0gaWQ9ImNoYW5nZS1pbWFnZV9pbnN0YWxsLWZvcm0iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWJsb2NrIHNwYW40Ij5UbyBzZXQgSU1BR0VfSU5TVEFMTF9hcHBlbmQgdG8gbW9yZSB0aGFuIG9uZSBwYWNrYWdlLCB0eXBlIHRoZSBwYWNrYWdlIG5hbWVzIHNlcGFyYXRlZCBieSBhIHNwYWNlLjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWFwcGVuZCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImlucHV0LXhsYXJnZSIgaWQ9Im5ldy1pbWFnZV9pbnN0YWxsIiBwbGFjZWhvbGRlcj0iVHlwZSBvbmUgb3IgbW9yZSBwYWNrYWdlIG5hbWVzIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImFwcGx5LWNoYW5nZS1pbWFnZV9pbnN0YWxsIiBjbGFzcz0iYnRuIiB0eXBlPSJidXR0b24iPlNhdmU8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImNhbmNlbC1jaGFuZ2UtaW1hZ2VfaW5zdGFsbCIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj5DYW5jZWw8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPC9mb3JtPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisKKyAgICAgICAgICAgIHslIGlmIHBhY2thZ2VfY2xhc3Nlc19kZWZpbmVkICV9CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImpzLWNvbmZpZy12YXItbmFtZSBqcy1jb25maWctdmFyLW1hbmFnZWQtbmFtZSI+UEFDS0FHRV9DTEFTU0VTPC9zcGFuPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJTcGVjaWZpZXMgdGhlIHBhY2thZ2UgbWFuYWdlciB0byB1c2Ugd2hlbiBwYWNrYWdpbmcgZGF0YSA8YnIgLz48YSBocmVmPSdodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8xLjYuMS9yZWYtbWFudWFsL3JlZi1tYW51YWwuaHRtbCN2YXItUEFDS0FHRV9DTEFTU0VTJyB0YXJnZXQ9J19ibGFuayc+UmVhZCBtb3JlIGluIHRoZSBtYW51YWw8L2E+Ij48L2k+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkIGNsYXNzPSJsZWFkIj4KKyAgICAgICAgICAgICAgICA8c3BhbiBpZD0icGFja2FnZV9jbGFzc2VzIj57e3BhY2thZ2VfY2xhc3Nlc319PC9zcGFuPgorICAgICAgICAgICAgICAgIDxpIGlkPSJjaGFuZ2UtcGFja2FnZV9jbGFzc2VzLWljb24iIGNsYXNzPSJpY29uLXBlbmNpbCI+PC9pPgorICAgICAgICAgICAgICAgIDxmb3JtIGlkPSJjaGFuZ2UtcGFja2FnZV9jbGFzc2VzLWZvcm0iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKyAgICAgICAgICAgICAgICAgICAgPGxhYmVsPgorICAgICAgICAgICAgICAgICAgICAgICAgUm9vdCBmaWxlIHN5c3RlbSBwYWNrYWdlIGZvcm1hdAorICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBwYWNrYWdlIGZvcm1hdCB1c2VkIHRvIGdlbmVyYXRlIHRoZSByb290IGZpbGUgc3lzdGVtLiBPcHRpb25zIGFyZSA8Y29kZT5kZXY8L2NvZGU+LCA8Y29kZT5pcGs8L2NvZGU+IGFuZCA8Y29kZT5ycG08L2NvZGU+Ij48L2k+CisgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9InBhY2thZ2VfY2xhc3Nlcy1zZWxlY3QiPgorICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5wYWNrYWdlX2RlYjwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5wYWNrYWdlX2lwazwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5wYWNrYWdlX3JwbTwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KKyAgICAgICAgICAgICAgICAgICAgPGxhYmVsPgorICAgICAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbCBwYWNrYWdlIGZvcm1hdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJFeHRyYSBwYWNrYWdlIGZvcm1hdHMgdG8gYnVpbGQiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJjaGVja2JveCIgaWQ9InBhY2thZ2VfY2xhc3NfMSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJwYWNrYWdlX2NsYXNzXzFfaW5wdXQiPiBwYWNrYWdlX2RlYgorICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImNoZWNrYm94IiBpZD0icGFja2FnZV9jbGFzc18yIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InBhY2thZ2VfY2xhc3NfMl9pbnB1dCI+IHBhY2thZ2VfaXBrCisgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmctdG9wOjEwcHg7Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImFwcGx5LWNoYW5nZS1wYWNrYWdlX2NsYXNzZXMiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biI+U2F2ZTwvYnV0dG9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iY2FuY2VsLWNoYW5nZS1wYWNrYWdlX2NsYXNzZXMiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tbGluayI+Q2FuY2VsPC9idXR0b24+CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgICAgICAgICB7JSBpZiBzZGtfbWFjaGluZV9kZWZpbmVkICV9CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImpzLWNvbmZpZy12YXItbmFtZSBqcy1jb25maWctdmFyLW1hbmFnZWQtbmFtZSI+U0RLTUFDSElORTwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iU3BlY2lmaWVzIHRoZSBhcmNoaXRlY3R1cmUgKGkuZS4gaTY4NiBvciB4ODZfNjQpIGZvciB3aGljaCB0byBidWlsZCBTREsgYW5kIEFEVCBpdGVtcyA8YnIgLz48YSBocmVmPSdodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8xLjYuMS9yZWYtbWFudWFsL3JlZi1tYW51YWwuaHRtbCN2YXItU0RLTUFDSElORScgdGFyZ2V0PSdfYmxhbmsnPlJlYWQgbW9yZSBpbiB0aGUgbWFudWFsPC9hPiI+PC9pPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZCBjbGFzcz0ibGVhZCI+CisgICAgICAgICAgICAgICAgPHNwYW4gaWQ9InNka21hY2hpbmUiPnt7c2RrX21hY2hpbmV9fTwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8aSBpZD0iY2hhbmdlLXNka21hY2hpbmUtaWNvbiIgY2xhc3M9Imljb24tcGVuY2lsIj48L2k+CisgICAgICAgICAgICAgICAgPGZvcm0gaWQ9ImNoYW5nZS1zZGttYWNoaW5lLWZvcm0iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKyAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJyYWRpbyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InNka21hY2hpbmUiIHZhbHVlPSJpNjg2Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIGk2ODYKKyAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJyYWRpbyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InNka21hY2hpbmUiIHZhbHVlPSJ4ODZfNjQiPgorICAgICAgICAgICAgICAgICAgICAgICAgeDg2XzY0CisgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmctdG9wOjEwcHg7Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImFwcGx5LWNoYW5nZS1zZGttYWNoaW5lIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4iPlNhdmU8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImNhbmNlbC1jaGFuZ2Utc2RrbWFjaGluZSIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj5DYW5jZWw8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPC9mb3JtPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisKKyAgICAgICAgPC9kbD4KKworICAgICAgICA8IS0tIDx1bCBjbGFzcz0idW5zdHlsZWQgY29uZmlndXJhdGlvbi1saXN0IiBpZD0iY29uZmlndmFyLWxpc3QiPiAtLT4KKyAgICAgICAgPGRsIGlkPSJjb25maWd2YXItbGlzdCI+CisgICAgICAgICAgICA8IS0tIHRoZSBhZGRlZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhcmUgaW5zZXJ0ZWQgaGVyZSAtLT4KKyAgICAgICAgPC9kbD4KKworICAgICAgICA8IS0tIHBhc3MgdGhlIGZzdHlwZXMgbGlzdCwgYmxhY2sgbGlzdCwgYW5kIGV4dGVybmFsbHkgbWFuYWdlZCB2YXJpYWJsZXMgaGVyZSAtLT4KKyAgICAgICAgeyUgZm9yIGZzdHlwZSBpbiB2YXJzX2ZzdHlwZXMgJX0KKyAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGNsYXNzPSJqcy1jaGVja2JveC1mc3R5cGVzLWxpc3QiIHZhbHVlPSJ7e2ZzdHlwZX19Ij4KKyAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgIHslIGZvciBiIGluIHZhcnNfYmxhY2tsaXN0ICV9CisgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBjbGFzcz0ianMtY29uZmlnLWJsYWNrbGlzdC1uYW1lIiB2YWx1ZT0ie3tifX0iPgorICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgeyUgZm9yIGIgaW4gdmFyc19tYW5hZ2VkICV9CisgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBjbGFzcz0ianMtY29uZmlnLW1hbmFnZWQtbmFtZSIgdmFsdWU9Int7Yn19Ij4KKyAgICAgICAgeyUgZW5kZm9yICV9CisKKyAgICAgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICAgICAgICA8Zm9ybSBpZD0idmFyaWFibGUtZm9ybSI+CisgICAgICAgICAgICA8ZmllbGRzZXQgc3R5bGU9InBhZGRpbmctbGVmdDowcHg7Ij4KKyAgICAgICAgICAgICAgICA8bGVnZW5kPkFkZCB2YXJpYWJsZTwvbGVnZW5kPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYW4zIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4OyI+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuICBpZD0iYWRkLWNvbmZpZ3Zhci1uYW1lLWRpdiIgY2xhc3M9ImNvbnRyb2wtZ3JvdXAiPgorICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICA8aSB0aXRsZT0iIiBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1vcmlnaW5hbC10aXRsZT0iVmFyaWFibGUgbmFtZXMgYXJlIGNhc2Ugc2Vuc2l0aXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fubm90IGhhdmUgc3BhY2VzLCBhbmQgY2FuIG9ubHkgaW5jbHVkZSBsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGRhc2hlcyI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJUeXBlIHZhcmlhYmxlIG5hbWUiIGlkPSJ2YXJpYWJsZSI+CisgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtYmxvY2sgZXJyb3IiIGlkPSJuZXctdmFyaWFibGUtZXJyb3ItbWVzc2FnZSI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5WYWx1ZTwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0idmFsdWUiIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJUeXBlIHZhcmlhYmxlIHZhbHVlIj48cD4KKyAgICAgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImFkZC1jb25maWd2YXItYnV0dG9uIiBjbGFzcz0iYnRuIHNhdmUiIHR5cGU9ImJ1dHRvbiIgZGlzYWJsZWQ+QWRkIHZhcmlhYmxlPC9idXR0b24+CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYW41IGhlbHAtYmxvY2siPgorICAgICAgICAgICAgICAgICAgICA8aDU+U29tZSB2YXJpYWJsZXMgYXJlIHJlc2VydmVkIGZyb20gVG9hc3RlcjwvaDU+CisgICAgICAgICAgICAgICAgICAgIDxwPlRvYXN0ZXIgY2Fubm90IHNldCBhbnkgdmFyaWFibGVzIHRoYXQgaW1wYWN0IDEpIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBidWlsZCBzZXJ2ZXJzLAorICAgICAgICAgICAgICAgICAgICBvciAyKSB3aGVyZSBhcnRpZmFjdHMgcHJvZHVjZWQgYnkgdGhlIGJ1aWxkIGFyZSBzdG9yZWQuIFN1Y2ggdmFyaWFibGVzIGluY2x1ZGU6IDwvcD4KKyAgICAgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuNi4xL3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci1CQl9ESVNLTU9OX0RJUlMiIHRhcmdldD0iX2JsYW5rIj5CQl9ESVNLTU9OX0RJUlM8L2E+PC9jb2RlPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8xLjYuMS9yZWYtbWFudWFsL3JlZi1tYW51YWwuaHRtbCN2YXItQkJfTlVNQkVSX1RIUkVBRFMiIHRhcmdldD0iX2JsYW5rIj5CQl9OVU1CRVJfVEhSRUFEUzwvYT48L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPkNWU19QUk9YWV9IT1NUPC9jb2RlPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT5DVlNfUFJPWFlfUE9SVDwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvMS42LjEvcmVmLW1hbnVhbC9yZWYtbWFudWFsLmh0bWwjdmFyLURMX0RJUiIgdGFyZ2V0PSJfYmxhbmsiPkRMX0RJUjwvYT48L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuNi4xL3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci1QQVJBTExFTF9NQUtFIiB0YXJnZXQ9Il9ibGFuayI+UEFSQUxMRUxfTUFLRTwvYT48L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuNi4xL3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci1TU1RBVEVfRElSIiB0YXJnZXQ9Il9ibGFuayI+U1NUQVRFX0RJUjwvYT48L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuNi4xL3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci1TU1RBVEVfTUlSUk9SUyIgdGFyZ2V0PSJfYmxhbmsiPlNTVEFURV9NSVJST1JTPC9hPjwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvMS42LjEvcmVmLW1hbnVhbC9yZWYtbWFudWFsLmh0bWwjdmFyLVRNUERJUiIgdGFyZ2V0PSJfYmxhbmsiPlRNUERJUjwvYT48L2NvZGU+PC9wPgorICAgICAgICAgICAgICAgICAgICA8cD5QbHVzIHRoZSBmb2xsb3dpbmcgc3RhbmRhcmQgc2hlbGwgZW52aXJvbm1lbnQgdmFyaWFibGVzOjwvcD4KKyAgICAgICAgICAgICAgICAgICAgPHA+PGNvZGU+aHR0cF9wcm94eTwvY29kZT4gPGNvZGU+ZnRwX3Byb3h5PC9jb2RlPiA8Y29kZT5odHRwc19wcm94eTwvY29kZT4gPGNvZGU+YWxsX3Byb3h5PC9jb2RlPjwvcD4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZmllbGRzZXQ+CisgICAgICAgICAgPC9mb3JtPgorICAgICAgICA8L2Rpdj4KKworICAgIDwvZGl2PgorCisgICAgPHNjcmlwdD4KKworICAgICAgICAvLyBnbG9iYWwgdmFyaWFibGVzCisgICAgICAgIHZhciBkb19yZWxvYWQ9ZmFsc2U7CisKKyAgICAgICAgLy8gdmFsaWRhdGUgbmV3IHZhcmlhYmxlIG5hbWUKKyAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVfbmV3X3ZhcmlhYmxlKCkgeworICAgICAgICAgICAgdmFyIHZhcmlhYmxlID0gJCgiaW5wdXQjdmFyaWFibGUiKS52YWwoKTsKKyAgICAgICAgICAgIHZhciB2YWx1ZSAgICA9ICQoImlucHV0I3ZhbHVlIikudmFsKCk7CisKKyAgICAgICAgICAgIC8vIHByZXN1bWVkIGlubm9jZW5jZQorICAgICAgICAgICAgJCgnI25ldy12YXJpYWJsZS1lcnJvci1tZXNzYWdlJykudGV4dCgiIik7CisgICAgICAgICAgICB2YXIgZXJyb3JfbXNnID0gIiI7CisKKyAgICAgICAgICAgIHZhciBleGlzdGluZ19jb25maWd2YXJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnanMtY29uZmlnLXZhci1uYW1lJyk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZXhpc3RpbmdfY29uZmlndmFycy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ19jb25maWd2YXJzW2ldLmlubmVySFRNTC50b1VwcGVyQ2FzZSgpID09IHZhcmlhYmxlLnRvVXBwZXJDYXNlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIlRoaXMgdmFyaWFibGUgaXMgYWxyZWFkeSBzZXQgaW4gdGhpcyBwYWdlLCBlZGl0IGl0cyB2YWx1ZSBpbnN0ZWFkIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBibGFja2xpc3RfY29uZmlndmFycyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2pzLWNvbmZpZy1ibGFja2xpc3QtbmFtZScpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGJsYWNrbGlzdF9jb25maWd2YXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGJsYWNrbGlzdF9jb25maWd2YXJzW2ldLnZhbHVlLnRvVXBwZXJDYXNlKCkgPT0gdmFyaWFibGUudG9VcHBlckNhc2UoKSkgeworICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiWW91IGNhbm5vdCBlZGl0IHRoaXMgdmFyaWFibGUgaW4gVG9hc3RlciBiZWNhdXNlIGl0IGlzIHNldCBieSB0aGUgYnVpbGQgc2VydmVycyI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgbWFuYWdlZF9jb25maWd2YXJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnanMtY29uZmlnLW1hbmFnZWQtbmFtZScpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG1hbmFnZWRfY29uZmlndmFycy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChtYW5hZ2VkX2NvbmZpZ3ZhcnNbaV0udmFsdWUudG9VcHBlckNhc2UoKSA9PSB2YXJpYWJsZS50b1VwcGVyQ2FzZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICJZb3UgY2Fubm90IHNldCB0aGlzIHZhcmlhYmxlIGhlcmUuIFBsZWFzZSBzZXQgaXQgaW4gdGhlIDxhIGhyZWY9XCJ7JSB1cmwgJ3Byb2plY3QnIHByb2plY3QuaWQgJX1cIj5wcm9qZWN0IG1haW4gcGFnZTwvYT4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGJhZF9jaGFycyAgPSAvW15hLXpBLVowLTlcLV9dLy50ZXN0KHZhcmlhYmxlKTsKKyAgICAgICAgICAgIHZhciBoYXNfc3BhY2VzID0gKDAgPD0gdmFyaWFibGUuaW5kZXhPZigiICIpKTsKKyAgICAgICAgICAgIHZhciBvbmx5X3NwYWNlcyA9ICgwIDwgdmFyaWFibGUubGVuZ3RoKSAmJiAoMCA9PSB2YXJpYWJsZS50cmltKCkubGVuZ3RoKTsKKworICAgICAgICAgICAgaWYgKG9ubHlfc3BhY2VzKSB7CisgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIkEgdmFsaWQgdmFyaWFibGUgbmFtZSBjYW5ub3QgaW5jbHVkZSBzcGFjZXMiOworICAgICAgICAgICAgfSBlbHNlIGlmIChiYWRfY2hhcnMgJiYgaGFzX3NwYWNlcykgeworICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICJBIHZhbGlkIHZhcmlhYmxlIG5hbWUgY2FuIG9ubHkgaW5jbHVkZSBsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlcywgZGFzaGVzLCBhbmQgY2Fubm90IGluY2x1ZGUgc3BhY2VzIjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYmFkX2NoYXJzKSB7CisgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIkEgdmFsaWQgdmFyaWFibGUgbmFtZSBjYW4gb25seSBpbmNsdWRlIGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzLCBhbmQgZGFzaGVzIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCIiICE9IGVycm9yX21zZykgeworICAgICAgICAgICAgICAgICQoJyNuZXctdmFyaWFibGUtZXJyb3ItbWVzc2FnZScpLmh0bWwoZXJyb3JfbXNnKTsKKyAgICAgICAgICAgICAgICAkKCIuc2F2ZSIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKworICAgICAgICAgICAgICAgIC8vIGFkZCBvbmUgKGFuZCBvbmx5IG9uZSkgZXJyb3IgY2xhc3MgYXBwZW5kCisgICAgICAgICAgICAgICAgdmFyIGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWRkLWNvbmZpZ3Zhci1uYW1lLWRpdiIpOworICAgICAgICAgICAgICAgIGQuY2xhc3NOYW1lID0gZC5jbGFzc05hbWUucmVwbGFjZSgiIGVycm9yIiwiIik7CisgICAgICAgICAgICAgICAgZC5jbGFzc05hbWUgPSBkLmNsYXNzTmFtZSArICIgZXJyb3IiOworCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHZhcmlhYmxlLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICQoIi5zYXZlIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWRkLWNvbmZpZ3Zhci1uYW1lLWRpdiIpOworICAgICAgICAgICAgZC5jbGFzc05hbWUgPSBkLmNsYXNzTmFtZS5yZXBsYWNlKCIgZXJyb3IiLCIiKTsKKworICAgICAgICAgICAgLy8gbm93IHNldCB0aGUgIlNhdmUiIGVuYWJsZW1lbnQgaWYgJ3ZhbHVlJyBhbHNvIHBhc3NlcworICAgICAgICAgICAgaWYgKHZhbHVlLnRyaW0oKS5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgJCgiLnNhdmUiKS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAkKCIuc2F2ZSIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvLyB2YWxpZGF0ZSBkaXN0cm8gbmFtZQorICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZV9kaXN0cm9fbmFtZSgpIHsKKyAgICAgICAgICAgICB2YXIgdmFsdWUgICAgPSAkKCJpbnB1dCNuZXctZGlzdHJvIikudmFsKCk7CisKKyAgICAgICAgICAgIC8vIHByZXN1bWVkIGlubm9jZW5jZQorICAgICAgICAgICAgJCgnI2Rpc3Ryby1lcnJvci1tZXNzYWdlJykudGV4dCgiIik7CisgICAgICAgICAgICB2YXIgZXJyb3JfbXNnID0gIiI7CisKKyAgICAgICAgICAgIHZhciBoYXNfc3BhY2VzID0gKDAgPD0gdmFsdWUuaW5kZXhPZigiICIpKTsKKworICAgICAgICAgICAgaWYgKGhhc19zcGFjZXMpIHsKKyAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiQSB2YWxpZCBkaXN0cm8gbmFtZSBjYW5ub3QgaW5jbHVkZSBzcGFjZXMiOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHZhbHVlLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICIgIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCIiICE9IGVycm9yX21zZykgeworICAgICAgICAgICAgICAgICQoJyNkaXN0cm8tZXJyb3ItbWVzc2FnZScpLnRleHQoZXJyb3JfbXNnKTsKKyAgICAgICAgICAgICAgICAkKCIjYXBwbHktY2hhbmdlLWRpc3RybyIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKworICAgICAgICAgICAgICAgIC8vIGFkZCBvbmUgKGFuZCBvbmx5IG9uZSkgZXJyb3IgY2xhc3MgYXBwZW5kCisgICAgICAgICAgICAgICAgdmFyIGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZWRpdC1kaXN0cm8tbmFtZS1kaXYiKTsKKyAgICAgICAgICAgICAgICBkLmNsYXNzTmFtZSA9IGQuY2xhc3NOYW1lLnJlcGxhY2UoIiBlcnJvciIsIiIpOworICAgICAgICAgICAgICAgIGQuY2xhc3NOYW1lID0gZC5jbGFzc05hbWUgKyAiIGVycm9yIjsKKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZWRpdC1kaXN0cm8tbmFtZS1kaXYiKTsKKyAgICAgICAgICAgIGQuY2xhc3NOYW1lID0gZC5jbGFzc05hbWUucmVwbGFjZSgiIGVycm9yIiwiIik7CisgICAgICAgICAgICAkKCIjYXBwbHktY2hhbmdlLWRpc3RybyIpLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRlc3QgdG8gaW5zdXJlIGF0IGxlYXN0IG9uZSBGUyBUeXBlIGlzIGNoZWNrZWQKKyAgICAgICAgZnVuY3Rpb24gZW5hYmxlRnNUeXBlc1NhdmUoKSB7CisgICAgICAgICAgICB2YXIgYW55X2NoZWNrZWQgPSAwOworICAgICAgICAgICAgJCgiLmZzLWNoZWNrYm94LWZzdHlwZXM6Y2hlY2tlZCIpLmVhY2goZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICBhbnlfY2hlY2tlZCA9IDE7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmICggMCA9PSBhbnlfY2hlY2tlZCApIHsKKyAgICAgICAgICAgICAgICAkKCIjYXBwbHktY2hhbmdlLWltYWdlX2ZzdHlwZXMiKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAkKCIjYXBwbHktY2hhbmdlLWltYWdlX2ZzdHlwZXMiKS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gUHJlc2V0IG9yIHJlc2V0IHRoZSBQYWNrYWdlIENsYXNzIGNoZWNrYm94IGxhYmVscworICAgICAgICBmdW5jdGlvbiB1cGRhdGVQYWNrYWdlQ2xhc3NDaGVja2JveGVzKCkgeworICAgICAgICAgICAgJCgnI3BhY2thZ2VfY2xhc3NfMSwgI3BhY2thZ2VfY2xhc3NfMicpLmhpZGUoKTsKKyAgICAgICAgICAgIGlmICgkKCdzZWxlY3QnKS52YWwoKSA9PSAncGFja2FnZV9kZWInKSB7CisgICAgICAgICAgICAgICAgJCgnI3BhY2thZ2VfY2xhc3NfMScpLmh0bWwoJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InBhY2thZ2VfY2xhc3NfMV9pbnB1dCI+IHBhY2thZ2VfaXBrJyk7CisgICAgICAgICAgICAgICAgJCgnI3BhY2thZ2VfY2xhc3NfMicpLmh0bWwoJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InBhY2thZ2VfY2xhc3NfMl9pbnB1dCI+IHBhY2thZ2VfcnBtJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoJCgnc2VsZWN0JykudmFsKCkgPT0gJ3BhY2thZ2VfaXBrJykgeworICAgICAgICAgICAgICAgICQoJyNwYWNrYWdlX2NsYXNzXzEnKS5odG1sKCc8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJwYWNrYWdlX2NsYXNzXzFfaW5wdXQiPiBwYWNrYWdlX2RlYicpOworICAgICAgICAgICAgICAgICQoJyNwYWNrYWdlX2NsYXNzXzInKS5odG1sKCc8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJwYWNrYWdlX2NsYXNzXzJfaW5wdXQiPiBwYWNrYWdlX3JwbScpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCQoJ3NlbGVjdCcpLnZhbCgpID09ICdwYWNrYWdlX3JwbScpIHsKKyAgICAgICAgICAgICAgICAkKCcjcGFja2FnZV9jbGFzc18xJykuaHRtbCgnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0icGFja2FnZV9jbGFzc18xX2lucHV0Ij4gcGFja2FnZV9kZWInKTsKKyAgICAgICAgICAgICAgICAkKCcjcGFja2FnZV9jbGFzc18yJykuaHRtbCgnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0icGFja2FnZV9jbGFzc18yX2lucHV0Ij4gcGFja2FnZV9pcGsnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICQoJyNwYWNrYWdlX2NsYXNzXzEsICNwYWNrYWdlX2NsYXNzXzInKS5mYWRlSW4oMTUwMCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZS1hc3NlcnQgaGFuZGxlcnMgd2hlbiB0aGUgcGFnZSBpcyBzZXJ2ZWQgYW5kL29yIHJlZnJlc2hlZCB2aWEgQWpheAorICAgICAgICBmdW5jdGlvbiBzZXRFdmVudEhhbmRsZXJzRm9yRHluYW1pY0VsZW1lbnRzKCkgeworCisgICAgICAgICAgICAvLyBjaGFuZ2UgdmFyaWFibGUgdmFsdWUKKyAgICAgICAgICAgICQoJy5qcy1pY29uLXBlbmNpbC1jb25maWdfdmFyJykuY2xpY2soZnVuY3Rpb24gKGV2dCkgeworICAgICAgICAgICAgICAgIHZhciBwayA9IGV2dC50YXJnZXQuYXR0cmlidXRlc1sieC1kYXRhIl0udmFsdWU7CisgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRfdmFsID0gJCgic3BhbiNjb25maWdfdmFyX3ZhbHVlXyIrcGspLnRleHQoKTsKKyAgICAgICAgICAgICAgICAkKCcuanMtaWNvbi1wZW5jaWwtY29uZmlnX3ZhciwgLmpzLWljb24tdHJhc2gtY29uZmlnX3ZhciwgI2NvbmZpZ192YXJfdmFsdWVfJytwaykuaGlkZSgpOworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtY29uZmlnX3Zhci1mb3JtXyIrcGspLnNsaWRlRG93bigpOworICAgICAgICAgICAgICAgICQoImlucHV0I25ldy1jb25maWdfdmFyXyIrcGspLnZhbChjdXJyZW50X3ZhbCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnLmpzLWNhbmNlbC1jaGFuZ2UtY29uZmlnX3ZhcicpLmNsaWNrKGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgICAgICAgICB2YXIgcGsgPSBldnQudGFyZ2V0LmF0dHJpYnV0ZXNbIngtZGF0YSJdLnZhbHVlOworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtY29uZmlnX3Zhci1mb3JtXyIrcGspLnNsaWRlVXAoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICQoJy5qcy1pY29uLXBlbmNpbC1jb25maWdfdmFyLCAuanMtaWNvbi10cmFzaC1jb25maWdfdmFyLCAjY29uZmlnX3Zhcl92YWx1ZV8nK3BrKS5zaG93KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgiLmpzLW5ldy1jb25maWdfdmFyIikub24oJ2lucHV0JywgZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS52YWwoKS5sZW5ndGggPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAkKCIuanMtYXBwbHktY2hhbmdlLWNvbmZpZ192YXIiKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAkKCIuanMtYXBwbHktY2hhbmdlLWNvbmZpZ192YXIiKS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAkKCcuanMtYXBwbHktY2hhbmdlLWNvbmZpZ192YXInKS5jbGljayhmdW5jdGlvbiAoZXZ0KSB7CisgICAgICAgICAgICAgICAgdmFyIHhkYXRhICAgID0gZXZ0LnRhcmdldC5hdHRyaWJ1dGVzWyJ4LWRhdGEiXS52YWx1ZS5zcGxpdCgiOiIpOworICAgICAgICAgICAgICAgIHZhciBwayAgICAgICA9IHhkYXRhWzBdOworICAgICAgICAgICAgICAgIHZhciB2YXJpYWJsZSA9IHhkYXRhWzFdOworICAgICAgICAgICAgICAgIHZhciB2YWwgICAgICA9ICQoJyNuZXctY29uZmlnX3Zhcl8nK3BrKS52YWwoKTsKKyAgICAgICAgICAgICAgICBwb3N0RWRpdEFqYXhSZXF1ZXN0KHsiY29uZmlndmFyQ2hhbmdlIiA6IHZhcmlhYmxlKyc6Jyt2YWx9KTsKKyAgICAgICAgICAgICAgICAkKCcjY29uZmlnX3Zhcl92YWx1ZV8nK3BrKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnbXV0ZWQnKTsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWNvbmZpZ192YXItZm9ybV8iK3BrKS5zbGlkZVVwKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAkKCcuanMtaWNvbi1wZW5jaWwtY29uZmlnX3ZhciwgLmpzLWljb24tdHJhc2gtY29uZmlnX3ZhciwgI2NvbmZpZ192YXJfdmFsdWVfJytwaykuc2hvdygpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIGRlbGV0ZSB2YXJpYWJsZQorICAgICAgICAgICAgJCgiLmpzLWljb24tdHJhc2gtY29uZmlnX3ZhciIpLmNsaWNrKGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgICAgICAgICB2YXIgeGRhdGEgICAgPSBldnQudGFyZ2V0LmF0dHJpYnV0ZXNbIngtZGF0YSJdLnZhbHVlLnNwbGl0KCI6Iik7CisgICAgICAgICAgICAgICAgdmFyIHBrICAgICAgID0geGRhdGFbMF07CisKKyAgICAgICAgICAgICAgICAvLyBoaWRlIHRoZSBkYW5nbGluZyB0cmFzaCB0b29sdGlwCisgICAgICAgICAgICAgICAgJCgnI2NvbmZpZ192YXJfdHJhc2hfJytwaykuaGlkZSgpOworCisgICAgICAgICAgICAgICAgLy8gZmFkZSBvdXQgdGhlIHZhcmlhYmxlK3ZhbHVlIGRpdiwgdGhlbiByZWZyZXNoIHRoZSB2YXJpYWJsZSBsaXN0CisgICAgICAgICAgICAgICAgJCgnI2NvbmZpZ192YXJfZW50cnlfJytwaykucGFyZW50KCkucGFyZW50KCkuZmFkZU91dCgxMDAwLCBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICAgICAgcG9zdEVkaXRBamF4UmVxdWVzdCh7ImNvbmZpZ3ZhckRlbCI6IGV2dC50YXJnZXQuYXR0cmlidXRlc1sieC1kYXRhIl0udmFsdWV9KTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIG9uRWRpdFBhZ2VVcGRhdGUoZGF0YSkgeworICAgICAgICAgICAgLy8gdXBkYXRlIHRhcmdldHMKKyAgICAgICAgICAgIHZhciBpOyB2YXIgb3JpZ2h0bWwgPSAiIjsKKworICAgICAgICAgICAgdmFyIGNvbmZpZ3ZhcnNfc29ydGVkID0gZGF0YS5jb25maWd2YXJzLnNvcnQoZnVuY3Rpb24oYSwgYil7cmV0dXJuIGFbMF0gPiBiWzBdfSk7CisKKyAgICAgICAgICAgIHZhciBtYW5hZ2VkX2NvbmZpZ3ZhcnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdqcy1jb25maWctdmFyLW1hbmFnZWQtbmFtZScpOworCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29uZmlndmFyc19zb3J0ZWQubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAvLyBza2lwIGlmIHRoZSB2YXJpYWJsZSBuYW1lIGhhcyBhIHNwZWNpYWwgY29udGV4dCAobm90IHVzZXIgZGVmaW5lZCkKKyAgICAgICAgICAgICAgICB2YXIgdmFyX2NvbnRleHQ9dW5kZWZpbmVkOworICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBsZW5ndGggPSBtYW5hZ2VkX2NvbmZpZ3ZhcnMubGVuZ3RoOyBqIDwgbGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChtYW5hZ2VkX2NvbmZpZ3ZhcnNbal0uaW5uZXJIVE1MID09IGNvbmZpZ3ZhcnNfc29ydGVkW2ldWzBdKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgKG1hbmFnZWRfY29uZmlndmFyc1tqXS52YWx1ZSAgICAgPT0gY29uZmlndmFyc19zb3J0ZWRbaV1bMF0pICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyX2NvbnRleHQ9J20nOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh2YXJfY29udGV4dCA9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2h0bWwgKz0gJzxkaXY+IDxkdD48c3BhbiBpZD0iY29uZmlnX3Zhcl9lbnRyeV8nK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKyciIGNsYXNzPSJqcy1jb25maWctdmFyLW5hbWUiPjwvc3Bhbj48aSBjbGFzcz0iaWNvbi10cmFzaCBqcy1pY29uLXRyYXNoLWNvbmZpZ192YXIiIGlkPSJjb25maWdfdmFyX3RyYXNoXycrY29uZmlndmFyc19zb3J0ZWRbaV1bMl0rJyIgeC1kYXRhPSInK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKyciPjwvaT4gPC9kdD4nCisgICAgICAgICAgICAgICAgICAgIG9yaWdodG1sICs9ICc8ZGQgY2xhc3M9ImxlYWQiPicKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2h0bWwgKz0gJyAgICA8c3BhbiBpZD0iY29uZmlnX3Zhcl92YWx1ZV8nK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKyciPjwvc3Bhbj4nCisgICAgICAgICAgICAgICAgICAgIG9yaWdodG1sICs9ICcgICAgPGkgY2xhc3M9Imljb24tcGVuY2lsIGpzLWljb24tcGVuY2lsLWNvbmZpZ192YXIiIHgtZGF0YT0iJytjb25maWd2YXJzX3NvcnRlZFtpXVsyXSsnIj48L2k+JworICAgICAgICAgICAgICAgICAgICBvcmlnaHRtbCArPSAnICAgIDxmb3JtIGlkPSJjaGFuZ2UtY29uZmlnX3Zhci1mb3JtXycrY29uZmlndmFyc19zb3J0ZWRbaV1bMl0rJyIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPicKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2h0bWwgKz0gJyAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtYXBwZW5kIj4nCisgICAgICAgICAgICAgICAgICAgIG9yaWdodG1sICs9ICcgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImlucHV0LXhsYXJnZSBqcy1uZXctY29uZmlnX3ZhciIgaWQ9Im5ldy1jb25maWdfdmFyXycrY29uZmlndmFyc19zb3J0ZWRbaV1bMl0rJyIgdmFsdWU9IiI+JworICAgICAgICAgICAgICAgICAgICBvcmlnaHRtbCArPSAnICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGpzLWFwcGx5LWNoYW5nZS1jb25maWdfdmFyIiB0eXBlPSJidXR0b24iIHgtZGF0YT0iJytjb25maWd2YXJzX3NvcnRlZFtpXVsyXSsnOicrY29uZmlndmFyc19zb3J0ZWRbaV1bMF0rJyIgZGlzYWJsZWQ+U2F2ZTwvYnV0dG9uPicKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2h0bWwgKz0gJyAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1saW5rIGpzLWNhbmNlbC1jaGFuZ2UtY29uZmlnX3ZhciIgeC1kYXRhPSInK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKyciPkNhbmNlbDwvYnV0dG9uPicKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2h0bWwgKz0gJyAgICAgICAgPC9kaXY+JworICAgICAgICAgICAgICAgICAgICBvcmlnaHRtbCArPSAnICAgIDwvZm9ybT4nCisgICAgICAgICAgICAgICAgICAgIG9yaWdodG1sICs9ICc8L2RkPiA8L2Rpdj4nCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB1cGRhdGUgY29uZmlndmFycyBsaXN0IEhUTUwgZnJhbWV3b3JrCisgICAgICAgICAgICAkKCJkbCNjb25maWd2YXItbGlzdCIpLmh0bWwob3JpZ2h0bWwpOworCisgICAgICAgICAgICAvLyBpbnNlcnQgdGhlIG5hbWUvdmFsdWUgcGFpcnMgc2FmZWx5IGFzIG5vbi1IVE1MCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29uZmlndmFyc19zb3J0ZWQubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAkKCcjY29uZmlnX3Zhcl9lbnRyeV8nK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKS50ZXh0KGNvbmZpZ3ZhcnNfc29ydGVkW2ldWzBdKTsKKyAgICAgICAgICAgICAgICAkKCcjY29uZmlnX3Zhcl92YWx1ZV8nK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKS50ZXh0KGNvbmZpZ3ZhcnNfc29ydGVkW2ldWzFdKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWRkIHRoZSB0b29sdGlwcworICAgICAgICAgICAgJCgiLmpzLWljb24tdHJhc2gtY29uZmlnX3ZhciIpLmVhY2goIGZ1bmN0aW9uKCl7IHNldERlbGV0ZVRvb2x0aXAoJCh0aGlzKSk7IH0pOworICAgICAgICAgICAgJCgiLmpzLWljb24tcGVuY2lsLWNvbmZpZ192YXIiKS5lYWNoKGZ1bmN0aW9uKCl7IHNldENoYW5nZVRvb2x0aXAoJCh0aGlzKSk7IH0pOworCisgICAgICAgICAgICAvLyByZS1hc3NlcnQgdGhlc2UgZXZlbnQgaGFuZGxlcnMKKyAgICAgICAgICAgIHNldEV2ZW50SGFuZGxlcnNGb3JEeW5hbWljRWxlbWVudHMoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIG9uRWRpdEFqYXhTdWNjZXNzKGRhdGEsIHRleHRzdGF0dXMpIHsKKyAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCJYSFIgcmV0dXJuZWQ6IiwgZGF0YSwgIigiICsgdGV4dHN0YXR1cyArICIpIik7CisgICAgICAgICAgICBpZiAoZGF0YS5lcnJvciAhPSAib2siKSB7CisgICAgICAgICAgICAgICAgYWxlcnQoImVycm9yIG9uIHJlcXVlc3Q6XG4iICsgZGF0YS5lcnJvcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBkZWxheWVkIHBhZ2UgcmVsb2FkPworICAgICAgICAgICAgaWYgKGRvX3JlbG9hZCkgeworICAgICAgICAgICAgICAgIGRvX3JlbG9hZD1mYWxzZTsKKyAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQodHJ1ZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG9uRWRpdFBhZ2VVcGRhdGUoZGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBvbkVkaXRBamF4RXJyb3IoanFYSFIsIHRleHRzdGF0dXMsIGVycm9yKSB7CisgICAgICAgICAgICBhbGVydCgiWEhSIGVycm9yZWQ6XG4iICsgZXJyb3IgKyAiXG4oIiArIHRleHRzdGF0dXMgKyAiKSIpOworICAgICAgICAgICAgLy8gcmUtYXNzZXJ0IHRoZSBldmVudCBoYW5kbGVycworICAgICAgICB9CisKKyAgICAgICAgLyogZW5zdXJlIGNvb2tpZSBleGlzdHMgeyUgY3NyZl90b2tlbiAlfSAqLworICAgICAgICBmdW5jdGlvbiBwb3N0RWRpdEFqYXhSZXF1ZXN0KHJlcWRhdGEpIHsKKyAgICAgICAgICAgIHZhciBhamF4ID0gJC5hamF4KHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZToiUE9TVCIsCisgICAgICAgICAgICAgICAgICAgIGRhdGE6ICQucGFyYW0ocmVxZGF0YSksCisgICAgICAgICAgICAgICAgICAgIHVybDoieyUgdXJsICd4aHJfY29uZmlndmFyZWRpdCcgcHJvamVjdC5pZCV9IiwKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyAnWC1DU1JGVG9rZW4nOiAkLmNvb2tpZSgiY3NyZnRva2VuIil9LAorICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBvbkVkaXRBamF4U3VjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG9uRWRpdEFqYXhFcnJvciwKKyAgICAgICAgICAgIH0pCisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzZXREZWxldGVUb29sdGlwKG9iamVjdCkgeworICAgICAgICAgICAgb2JqZWN0LnRvb2x0aXAoeyBjb250YWluZXI6ICdib2R5JywgaHRtbDogdHJ1ZSwgZGVsYXk6IHtzaG93OiA0MDB9LCB0aXRsZTogIkRlbGV0ZSIgfSk7CisgICAgICAgIH0KKyAgICAgICAgZnVuY3Rpb24gc2V0Q2hhbmdlVG9vbHRpcChvYmplY3QpIHsKKyAgICAgICAgICAgIG9iamVjdC50b29sdGlwKHsgY29udGFpbmVyOiAnYm9keScsIGh0bWw6IHRydWUsIGRlbGF5OiB7c2hvdzogNDAwfSwgdGl0bGU6ICJDaGFuZ2UiIH0pOworICAgICAgICB9CisKKyAgICAgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBSZWdpc3RlciBoYW5kbGVycyBmb3Igc3RhdGljIGVsZW1lbnRzCisgICAgICAgICAgICAvLworCisgICAgICAgICAgICB7JSBpZiBkaXN0cm9fZGVmaW5lZCAlfQorICAgICAgICAgICAgLy8gY2hhbmdlIGRpc3RybyB2YXJpYWJsZQorICAgICAgICAgICAgJCgnI2NoYW5nZS1kaXN0cm8taWNvbicpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICQoJyNjaGFuZ2UtZGlzdHJvLWljb24sICNkaXN0cm8nKS5oaWRlKCk7CisgICAgICAgICAgICAgICAgJCgiI2NoYW5nZS1kaXN0cm8tZm9ybSIpLnNsaWRlRG93bigpOworICAgICAgICAgICAgICAgICQoIiNuZXctZGlzdHJvIikudmFsKCAkKCcjZGlzdHJvJykudGV4dCgpICk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnI2NhbmNlbC1jaGFuZ2UtZGlzdHJvJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWRpc3Ryby1mb3JtIikuc2xpZGVVcChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgJCgnI2Rpc3RybywgI2NoYW5nZS1kaXN0cm8taWNvbicpLnNob3coKTsKKworICAgICAgICAgICAgICAgICAgICAvLyByZXNldCBhbnkgZGFuZ2xpbmcgZXJyb3Igc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgJCgnI2Rpc3Ryby1lcnJvci1tZXNzYWdlJykudGV4dCgiIik7CisgICAgICAgICAgICAgICAgICAgIHZhciBkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVkaXQtZGlzdHJvLW5hbWUtZGl2Iik7CisgICAgICAgICAgICAgICAgICAgIGQuY2xhc3NOYW1lID0gZC5jbGFzc05hbWUucmVwbGFjZSgiIGVycm9yIiwiIik7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgLy8gdmFsaWRhdGUgbmV3IGRpc3RybyBuYW1lCisgICAgICAgICAgICAkKCJpbnB1dCNuZXctZGlzdHJvIikub24oJ2lucHV0JywgZnVuY3Rpb24gKGV2dCkgeworICAgICAgICAgICAgICAgIHZhbGlkYXRlX2Rpc3Ryb19uYW1lKCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnI2FwcGx5LWNoYW5nZS1kaXN0cm8nKS5jbGljayhmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIC8vJCgnI3JlcG8nKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnaGlnaGxpZ2h0LWdvJyk7CisgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSAkKCcjbmV3LWRpc3RybycpLnZhbCgpOworICAgICAgICAgICAgICAgIHBvc3RFZGl0QWpheFJlcXVlc3QoeyJjb25maWd2YXJDaGFuZ2UiIDogJ0RJU1RSTzonK25hbWV9KTsKKyAgICAgICAgICAgICAgICAkKCcjZGlzdHJvJykudGV4dChuYW1lKTsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWRpc3Ryby1mb3JtIikuc2xpZGVVcChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgICQoJyNkaXN0cm8sICNjaGFuZ2UtZGlzdHJvLWljb24nKS5zaG93KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHslIGVuZGlmICV9CisKKworICAgICAgICAgICAgeyUgaWYgZnN0eXBlc19kZWZpbmVkICV9CisgICAgICAgICAgICAvLyBjaGFuZ2UgSU1BR0VfRlNUWVBFUyB2YXJpYWJsZQorCisgICAgICAgICAgICAkKCcjY2hhbmdlLWltYWdlX2ZzdHlwZXMtaWNvbicpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICQoJyNjaGFuZ2UtaW1hZ2VfZnN0eXBlcy1pY29uLCAjaW1hZ2VfZnN0eXBlcycpLmhpZGUoKTsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWltYWdlX2ZzdHlwZXMtZm9ybSIpLnNsaWRlRG93bigpOworICAgICAgICAgICAgICAgIC8vIGF2b2lkIGZhbHNlIHN1YnN0cmluZyBtYXRjaGVzIGJ5IGluY2x1ZGluZyBzcGFjZSBzZXBhcmF0b3JzCisgICAgICAgICAgICAgICAgdmFyIGh0bWwgICAgICAgICA9ICIiOworICAgICAgICAgICAgICAgIHZhciBmc3R5cGVzICAgICAgPSAiICIgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW1hZ2VfZnN0eXBlcyIpLmlubmVySFRNTCArICIgIjsKKyAgICAgICAgICAgICAgICB2YXIgZnN0eXBlc19saXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnanMtY2hlY2tib3gtZnN0eXBlcy1saXN0Jyk7CisgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBjaGVja2VkIGJveGVzIGZpcnN0CisgICAgICAgICAgICAgICAgaWYgKCIgICIgIT0gZnN0eXBlcykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZnN0eXBlc19saXN0Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA8PSBmc3R5cGVzLmluZGV4T2YoIiAiK2ZzdHlwZXNfbGlzdFtpXS52YWx1ZSsiICIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxsYWJlbCBjbGFzcz0iY2hlY2tib3giPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgY2xhc3M9ImZzLWNoZWNrYm94LWZzdHlwZXMiIHZhbHVlPSInK2ZzdHlwZXNfbGlzdFtpXS52YWx1ZSsnIiBjaGVja2VkPSJjaGVja2VkIj4nK2ZzdHlwZXNfbGlzdFtpXS52YWx1ZSsnPC9sYWJlbD5cbic7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSB1bi1jaGVja2VkIGJveGVzIHNlY29uZAorICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBmc3R5cGVzX2xpc3QubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKDAgID4gZnN0eXBlcy5pbmRleE9mKCIgIitmc3R5cGVzX2xpc3RbaV0udmFsdWUrIiAiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxsYWJlbCBjbGFzcz0iY2hlY2tib3giPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgY2xhc3M9ImZzLWNoZWNrYm94LWZzdHlwZXMiIHZhbHVlPSInK2ZzdHlwZXNfbGlzdFtpXS52YWx1ZSsnIj4nK2ZzdHlwZXNfbGlzdFtpXS52YWx1ZSsnPC9sYWJlbD5cbic7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFsbC1pbWFnZV9mc3R5cGVzIikuaW5uZXJIVE1MID0gaHRtbDsKKworICAgICAgICAgICAgICAgIC8vIFdhdGNoIGVsZW1lbnRzIHRvIGRpc2FibGUgU2F2ZSB3aGVuIG5vbmUgYXJlIGNoZWNrZWQKKyAgICAgICAgICAgICAgICAkKCIuZnMtY2hlY2tib3gtZnN0eXBlcyIpLmVhY2goZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZUZzVHlwZXNTYXZlKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgLy8gY2xlYXIgdGhlIHByZXZpb3VzIGZpbHRlciB2YWx1ZXMKKyAgICAgICAgICAgICAgICAkKCJpbnB1dCNmaWx0ZXItaW1hZ2VfZnN0eXBlcyIpLnZhbCgiIik7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnI2NhbmNlbC1jaGFuZ2UtaW1hZ2VfZnN0eXBlcycpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgJCgiI2NoYW5nZS1pbWFnZV9mc3R5cGVzLWZvcm0iKS5zbGlkZVVwKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAkKCcjaW1hZ2VfZnN0eXBlcywgI2NoYW5nZS1pbWFnZV9mc3R5cGVzLWljb24nKS5zaG93KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnI2ZpbHRlci1pbWFnZV9mc3R5cGVzJykub24oJ2lucHV0JywgZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAgICB2YXIgdmFsVGhpcyA9ICQodGhpcykudmFsKCkudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgICAgICAkKCcjYWxsLWltYWdlX2ZzdHlwZXMgbGFiZWwnKS5lYWNoKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gJCh0aGlzKS50ZXh0KCkudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gdGV4dC5pbmRleE9mKHZhbFRoaXMpOworICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPj0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5zaG93KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmhpZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICQoJyNhcHBseS1jaGFuZ2UtaW1hZ2VfZnN0eXBlcycpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgLy8gZXh0cmFjdCB0aGUgc2VsZWN0ZWQgZnN0eXBlcyBhbmQgc29ydCB0aGVtCisgICAgICAgICAgICAgICAgdmFyIGZzdHlwZXNfYXJyYXkgPSBbXTsKKyAgICAgICAgICAgICAgICB2YXIgY2hlY2tib3hlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ZzLWNoZWNrYm94LWZzdHlwZXMnKTsKKyAgICAgICAgICAgICAgICAkKCIuZnMtY2hlY2tib3gtZnN0eXBlczpjaGVja2VkIikuZWFjaChmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICAgICAgICBmc3R5cGVzX2FycmF5LnB1c2goJCh0aGlzKS52YWwoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgZnN0eXBlc19hcnJheS5zb3J0KCk7CisKKyAgICAgICAgICAgICAgICAvLyBub3cgbWFrZSBhIHN0cmluZyBvZiB0aGVtCisgICAgICAgICAgICAgICAgdmFyIGZzdHlwZXMgPSAnJzsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZnN0eXBlc19hcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBmc3R5cGVzICs9IGZzdHlwZXNfYXJyYXlbaV0gKyAnICc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZzdHlwZXMgPSBmc3R5cGVzLnRyaW0oKTsKKworICAgICAgICAgICAgICAgIHBvc3RFZGl0QWpheFJlcXVlc3QoeyJjb25maWd2YXJDaGFuZ2UiIDogJ0lNQUdFX0ZTVFlQRVM6Jytmc3R5cGVzfSk7CisgICAgICAgICAgICAgICAgJCgnI2ltYWdlX2ZzdHlwZXMnKS50ZXh0KGZzdHlwZXMpOworICAgICAgICAgICAgICAgICQoJyNpbWFnZV9mc3R5cGVzJykucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ211dGVkJyk7CisKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWltYWdlX2ZzdHlwZXMtZm9ybSIpLnNsaWRlVXAoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICQoJyNpbWFnZV9mc3R5cGVzLCAjY2hhbmdlLWltYWdlX2ZzdHlwZXMtaWNvbicpLnNob3coKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgeyUgZW5kaWYgJX0KKworCisgICAgICAgICAgICB7JSBpZiBpbWFnZV9pbnN0YWxsX2FwcGVuZF9kZWZpbmVkICV9CisKKyAgICAgICAgICAgIC8vIGluaXQgSU1BR0VfSU5TVEFMTF9hcHBlbmQgdHJhc2ggaWNvbgorICAgICAgICAgICAgc2V0RGVsZXRlVG9vbHRpcCgkKCcjZGVsZXRlLWltYWdlX2luc3RhbGwtaWNvbicpKTsKKworICAgICAgICAgICAgLy8gY2hhbmdlIElNQUdFX0lOU1RBTExfYXBwZW5kIHZhcmlhYmxlCisgICAgICAgICAgICAkKCcjY2hhbmdlLWltYWdlX2luc3RhbGwtaWNvbicpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIC8vIHByZXNldCB0aGUgZWRpdCB2YWx1ZQorICAgICAgICAgICAgICAgIHZhciBjdXJyZW50X3ZhbCA9ICQoInNwYW4jaW1hZ2VfaW5zdGFsbCIpLnRleHQoKS50cmltKCk7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRfdmFsID09ICJOb3Qgc2V0IikgeworICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3ZhbD0iIjsKKyAgICAgICAgICAgICAgICAgICAgJCgiI2FwcGx5LWNoYW5nZS1pbWFnZV9pbnN0YWxsIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGluc3VyZSB0aGVzZSBub24tZW1wdHkgdmFsdWVzIGhhdmUgc2luZ2xlIHNwYWNlIHByZWZpeAorICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3ZhbD0iICIgKyBjdXJyZW50X3ZhbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgJCgiaW5wdXQjbmV3LWltYWdlX2luc3RhbGwiKS52YWwoY3VycmVudF92YWwpOworCisgICAgICAgICAgICAgICAgJCgnI2NoYW5nZS1pbWFnZV9pbnN0YWxsLWljb24sICNkZWxldGUtaW1hZ2VfaW5zdGFsbC1pY29uLCAjaW1hZ2VfaW5zdGFsbCcpLmhpZGUoKTsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWltYWdlX2luc3RhbGwtZm9ybSIpLnNsaWRlRG93bigpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICQoJyNjYW5jZWwtY2hhbmdlLWltYWdlX2luc3RhbGwnKS5jbGljayhmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtaW1hZ2VfaW5zdGFsbC1mb3JtIikuc2xpZGVVcChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgJCgnI2ltYWdlX2luc3RhbGwsICNjaGFuZ2UtaW1hZ2VfaW5zdGFsbC1pY29uJykuc2hvdygpOworICAgICAgICAgICAgICAgICAgICBpZiAoJCgic3BhbiNpbWFnZV9pbnN0YWxsIikudGV4dCgpICE9ICJOb3Qgc2V0IikgeworICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2RlbGV0ZS1pbWFnZV9pbnN0YWxsLWljb24nKS5zaG93KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXREZWxldGVUb29sdGlwKCQoJyNkZWxldGUtaW1hZ2VfaW5zdGFsbC1pY29uJykpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgiI25ldy1pbWFnZV9pbnN0YWxsIikub24oJ2lucHV0JywgZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS52YWwoKS50cmltKCkubGVuZ3RoID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgJCgiI2FwcGx5LWNoYW5nZS1pbWFnZV9pbnN0YWxsIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgJCgiI2FwcGx5LWNoYW5nZS1pbWFnZV9pbnN0YWxsIikucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnI2FwcGx5LWNoYW5nZS1pbWFnZV9pbnN0YWxsJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAvLyBpbnN1cmUgdGhlc2Ugbm9uLWVtcHR5IHZhbHVlcyBoYXZlIHNpbmdsZSBzcGFjZSBwcmVmaXgKKyAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSAiICIgKyAkKCcjbmV3LWltYWdlX2luc3RhbGwnKS52YWwoKS50cmltKCk7CisgICAgICAgICAgICAgICAgcG9zdEVkaXRBamF4UmVxdWVzdCh7ImNvbmZpZ3ZhckNoYW5nZSIgOiAnSU1BR0VfSU5TVEFMTF9hcHBlbmQ6Jyt2YWx1ZX0pOworICAgICAgICAgICAgICAgICQoJyNpbWFnZV9pbnN0YWxsJykudGV4dCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgJCgnI2ltYWdlX2luc3RhbGwnKS5yZW1vdmVDbGFzcygnbXV0ZWQnKTsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWltYWdlX2luc3RhbGwtZm9ybSIpLnNsaWRlVXAoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAkKCcjaW1hZ2VfaW5zdGFsbCwgI2NoYW5nZS1pbWFnZV9pbnN0YWxsLWljb24nKS5zaG93KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2RlbGV0ZS1pbWFnZV9pbnN0YWxsLWljb24nKS5zaG93KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXREZWxldGVUb29sdGlwKCQoJyNkZWxldGUtaW1hZ2VfaW5zdGFsbC1pY29uJykpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLyBkZWxldGUgSU1BR0VfSU5TVEFMTF9hcHBlbmQgdmFyaWFibGUgdmFsdWUKKyAgICAgICAgICAgICQoJyNkZWxldGUtaW1hZ2VfaW5zdGFsbC1pY29uJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAkKHRoaXMpLnRvb2x0aXAoJ2hpZGUnKTsKKyAgICAgICAgICAgICAgICBwb3N0RWRpdEFqYXhSZXF1ZXN0KHsiY29uZmlndmFyQ2hhbmdlIiA6ICdJTUFHRV9JTlNUQUxMX2FwcGVuZDonKycnfSk7CisgICAgICAgICAgICAgICAgJCgnI2ltYWdlX2luc3RhbGwnKS5wYXJlbnQoKS5mYWRlT3V0KDEwMDAsIGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAgICQoJyNpbWFnZV9pbnN0YWxsJykuYWRkQ2xhc3MoJ211dGVkJyk7CisgICAgICAgICAgICAgICAgICAgICQoJyNpbWFnZV9pbnN0YWxsJykudGV4dCgnTm90IHNldCcpOworICAgICAgICAgICAgICAgICAgICAkKCcjZGVsZXRlLWltYWdlX2luc3RhbGwtaWNvbicpLmhpZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgJCgnI2ltYWdlX2luc3RhbGwnKS5wYXJlbnQoKS5mYWRlSW4oMTAwMCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHslIGVuZGlmICV9CisKKworICAgICAgICAgICAgeyUgaWYgcGFja2FnZV9jbGFzc2VzX2RlZmluZWQgJX0KKyAgICAgICAgICAgIC8vIGNoYW5nZSBQQUNLQUdFX0NMQVNTRVMgdmFyaWFibGUKKyAgICAgICAgICAgICQoJyNjaGFuZ2UtcGFja2FnZV9jbGFzc2VzLWljb24nKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAkKCcjY2hhbmdlLXBhY2thZ2VfY2xhc3Nlcy1pY29uLCAjcGFja2FnZV9jbGFzc2VzJykuaGlkZSgpOworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtcGFja2FnZV9jbGFzc2VzLWZvcm0iKS5zbGlkZURvd24oKTsKKworICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgdGhlIHB1bGxkb3duIGFuZCBjaGVja2JveGVzCisgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gJCgiI3BhY2thZ2VfY2xhc3NlcyIpLnRleHQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIHZhbHVlLmluZGV4T2YoInBhY2thZ2VfZGViIikgPT0gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgJCgiI3BhY2thZ2VfY2xhc3Nlcy1zZWxlY3QiKS5wcm9wKCdzZWxlY3RlZEluZGV4JywgMCk7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVBhY2thZ2VDbGFzc0NoZWNrYm94ZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZS5pbmRleE9mKCJfaXBrIikgPiAwICkgeworICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3BhY2thZ2VfY2xhc3NfMV9pbnB1dCIpLmF0dHIoImNoZWNrZWQiLHRydWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUuaW5kZXhPZigiX3JwbSIpID4gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICQoIiNwYWNrYWdlX2NsYXNzXzJfaW5wdXQiKS5hdHRyKCJjaGVja2VkIix0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICggdmFsdWUuaW5kZXhPZigicGFja2FnZV9pcGsiKSA9PSAwICkgeworICAgICAgICAgICAgICAgICAgICAkKCIjcGFja2FnZV9jbGFzc2VzLXNlbGVjdCIpLnByb3AoJ3NlbGVjdGVkSW5kZXgnLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlUGFja2FnZUNsYXNzQ2hlY2tib3hlcygpOworICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlLmluZGV4T2YoIl9kZWIiKSA+IDAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcGFja2FnZV9jbGFzc18xX2lucHV0IikuYXR0cigiY2hlY2tlZCIsdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZS5pbmRleE9mKCJfcnBtIikgPiAwICkgeworICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3BhY2thZ2VfY2xhc3NfMl9pbnB1dCIpLmF0dHIoImNoZWNrZWQiLHRydWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZS5pbmRleE9mKCJwYWNrYWdlX3JwbSIpID09IDAgKSB7CisgICAgICAgICAgICAgICAgICAgICQoIiNwYWNrYWdlX2NsYXNzZXMtc2VsZWN0IikucHJvcCgnc2VsZWN0ZWRJbmRleCcsIDIpOworICAgICAgICAgICAgICAgICAgICB1cGRhdGVQYWNrYWdlQ2xhc3NDaGVja2JveGVzKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUuaW5kZXhPZigiX2RlYiIpID4gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICQoIiNwYWNrYWdlX2NsYXNzXzFfaW5wdXQiKS5hdHRyKCJjaGVja2VkIix0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlLmluZGV4T2YoIl9pcGsiKSA+IDAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcGFja2FnZV9jbGFzc18yX2lucHV0IikuYXR0cigiY2hlY2tlZCIsdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnI2NhbmNlbC1jaGFuZ2UtcGFja2FnZV9jbGFzc2VzJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLXBhY2thZ2VfY2xhc3Nlcy1mb3JtIikuc2xpZGVVcChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgJCgnI3BhY2thZ2VfY2xhc3NlcywgI2NoYW5nZS1wYWNrYWdlX2NsYXNzZXMtaWNvbicpLnNob3coKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAkKCdzZWxlY3QnKS5jaGFuZ2UoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdXBkYXRlUGFja2FnZUNsYXNzQ2hlY2tib3hlcygpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICQoJyNhcHBseS1jaGFuZ2UtcGFja2FnZV9jbGFzc2VzJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICB2YXIgZSAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhY2thZ2VfY2xhc3Nlcy1zZWxlY3QiKTsKKyAgICAgICAgICAgICAgICB2YXIgdmFsID0gZS5vcHRpb25zW2Uuc2VsZWN0ZWRJbmRleF0udGV4dDsKKworICAgICAgICAgICAgICAgIHBjMV9jaGVja2VkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhY2thZ2VfY2xhc3NfMV9pbnB1dCIpLmNoZWNrZWQ7CisgICAgICAgICAgICAgICAgcGMyX2NoZWNrZWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFja2FnZV9jbGFzc18yX2lucHV0IikuY2hlY2tlZDsKKyAgICAgICAgICAgICAgICBpZiAodmFsID09ICJwYWNrYWdlX2RlYiIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBjMV9jaGVja2VkKSB2YWwgPSB2YWwgKyAiIHBhY2thZ2VfaXBrIjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBjMl9jaGVja2VkKSB2YWwgPSB2YWwgKyAiIHBhY2thZ2VfcnBtIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAicGFja2FnZV9pcGsiKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYzFfY2hlY2tlZCkgdmFsID0gdmFsICsgIiBwYWNrYWdlX2RlYiI7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYzJfY2hlY2tlZCkgdmFsID0gdmFsICsgIiBwYWNrYWdlX3JwbSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh2YWwgPT0gInBhY2thZ2VfcnBtIikgeworICAgICAgICAgICAgICAgICAgICBpZiAocGMxX2NoZWNrZWQpIHZhbCA9IHZhbCArICIgcGFja2FnZV9kZWIiOworICAgICAgICAgICAgICAgICAgICBpZiAocGMyX2NoZWNrZWQpIHZhbCA9IHZhbCArICIgcGFja2FnZV9pcGsiOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICQoJyNwYWNrYWdlX2NsYXNzZXMnKS50ZXh0KHZhbCk7CisgICAgICAgICAgICAgICAgLy8kKCcjcGFja2FnZV9jbGFzc2VzJykucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ211dGVkJyk7CisgICAgICAgICAgICAgICAgcG9zdEVkaXRBamF4UmVxdWVzdCh7ImNvbmZpZ3ZhckNoYW5nZSIgOiAnUEFDS0FHRV9DTEFTU0VTOicrdmFsfSk7CisgICAgICAgICAgICAgICAgJCgiI2NoYW5nZS1wYWNrYWdlX2NsYXNzZXMtZm9ybSIpLnNsaWRlVXAoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICQoJyNwYWNrYWdlX2NsYXNzZXMsICNjaGFuZ2UtcGFja2FnZV9jbGFzc2VzLWljb24nKS5zaG93KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHslIGVuZGlmICV9CisKKworICAgICAgICAgICAgeyUgaWYgc2RrX21hY2hpbmVfZGVmaW5lZCAlfQorICAgICAgICAgICAgLy8gY2hhbmdlIFNES01BQ0hJTkUgdmFyaWFibGUKKyAgICAgICAgICAgICQoJyNjaGFuZ2Utc2RrbWFjaGluZS1pY29uJykuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRfdmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2RrbWFjaGluZSIpLmlubmVySFRNTDsKKyAgICAgICAgICAgICAgICB2YXIgcmFkaW9zID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoJ3Nka21hY2hpbmUnKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcmFkaW9zLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHJhZGlvc1tpXS5jaGVja2VkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGlmIChyYWRpb3NbaV0udmFsdWUgPT0gY3VycmVudF92YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmFkaW9zW2ldLmNoZWNrZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICQoJyNjaGFuZ2Utc2RrbWFjaGluZS1pY29uLCAjc2RrbWFjaGluZScpLmhpZGUoKTsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLXNka21hY2hpbmUtZm9ybSIpLnNsaWRlRG93bigpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICQoJyNjYW5jZWwtY2hhbmdlLXNka21hY2hpbmUnKS5jbGljayhmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2Utc2RrbWFjaGluZS1mb3JtIikuc2xpZGVVcChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgJCgnI3Nka21hY2hpbmUsICNjaGFuZ2Utc2RrbWFjaGluZS1pY29uJykuc2hvdygpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICQoJyNhcHBseS1jaGFuZ2Utc2RrbWFjaGluZScpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgdmFyIHZhbHVlPSIiOworICAgICAgICAgICAgICAgIHZhciByYWRpb3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgnc2RrbWFjaGluZScpOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSByYWRpb3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJhZGlvc1tpXS5jaGVja2VkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBkbyB3aGF0ZXZlciB5b3Ugd2FudCB3aXRoIHRoZSBjaGVja2VkIHJhZGlvCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1yYWRpb3NbaV0udmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwb3N0RWRpdEFqYXhSZXF1ZXN0KHsiY29uZmlndmFyQ2hhbmdlIiA6ICdTREtNQUNISU5FOicrdmFsdWV9KTsKKyAgICAgICAgICAgICAgICAkKCcjc2RrbWFjaGluZScpLnRleHQodmFsdWUpOworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2Utc2RrbWFjaGluZS1mb3JtIikuc2xpZGVVcChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgJCgnI3Nka21hY2hpbmUsICNjaGFuZ2Utc2RrbWFjaGluZS1pY29uJykuc2hvdygpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHslIGVuZGlmICV9CisKKworICAgICAgICAgICAgLy8gYWRkIG5ldyB2YXJpYWJsZQorICAgICAgICAgICAgJCgiYnV0dG9uI2FkZC1jb25maWd2YXItYnV0dG9uIikuY2xpY2soIGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgICAgICAgICB2YXIgdmFyaWFibGUgPSAkKCJpbnB1dCN2YXJpYWJsZSIpLnZhbCgpOworICAgICAgICAgICAgICAgIHZhciB2YWx1ZSAgICA9ICQoImlucHV0I3ZhbHVlIikudmFsKCk7CisKKyAgICAgICAgICAgICAgICBwb3N0RWRpdEFqYXhSZXF1ZXN0KHsiY29uZmlndmFyQWRkIiA6IHZhcmlhYmxlKyc6Jyt2YWx1ZX0pOworCisgICAgICAgICAgICAgICAgLy8gY2xlYXIgdGhlIHByZXZpb3VzIHZhbHVlcworICAgICAgICAgICAgICAgICQoImlucHV0I3ZhcmlhYmxlIikudmFsKCIiKTsKKyAgICAgICAgICAgICAgICAkKCJpbnB1dCN2YWx1ZSIpLnZhbCgiIik7CisgICAgICAgICAgICAgICAgLy8gRGlzYWJsZSBhZGQgYnV0dG9uCisgICAgICAgICAgICAgICAgJCgiLnNhdmUiKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7CisKKyAgICAgICAgICAgICAgICAvLyBSZWxvYWQgcGFnZSBpZiBhZG1pbi1yZW1vdmVkIGNvcmUgbWFuYWdlZCB2YWx1ZSBpcyBtYW51YWxseSBhZGRlZCBiYWNrIGluCisgICAgICAgICAgICAgICAgaWYgKDAgPD0gIiBESVNUUk8gSU1BR0VfRlNUWVBFUyBJTUFHRV9JTlNUQUxMX2FwcGVuZCBQQUNLQUdFX0NMQVNTRVMgU0RLTUFDSElORSAiLmluZGV4T2YoICIgIit2YXJpYWJsZSsiICIgKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBkZWxheWVkIHJlbG9hZCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbiB3aXRoIHBvc3RFZGl0QWpheFJlcXVlc3QKKyAgICAgICAgICAgICAgICAgICAgZG9fcmVsb2FkPXRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIHZhbGlkYXRlIG5ldyB2YXJpYWJsZSBuYW1lIGFuZCB2YWx1ZQorICAgICAgICAgICAgJCgiI3ZhcmlhYmxlLCAjdmFsdWUiKS5vbignaW5wdXQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZV9uZXdfdmFyaWFibGUoKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gZHJhdyBhbmQgcmVnaXN0ZXIgdGhlIGR5bmFtaWMgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYW5kIGhhbmRsZXJzCisgICAgICAgICAgICAvLworCisgICAgICAgICAgICB2YXIgZGF0YSA9IHsKKyAgICAgICAgICAgICAgICBjb25maWd2YXJzIDogW10KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICB7JSBmb3IgYyBpbiBjb25maWd2YXJzICV9CisgICAgICAgICAgICAgICAgZGF0YS5jb25maWd2YXJzLnB1c2goWyAie3tjLm5hbWV9fSIsInt7Yy52YWx1ZX19Iiwie3tjLnBrfX0iIF0pOworICAgICAgICAgICAgICAgIHslIGlmICcnICE9IHZhcnNfY29udGV4dHxnZXRfZGljdF92YWx1ZTpjLm5hbWUgJX0KKyAgICAgICAgICAgICAgICAgICAgZGF0YS52YXJzX2NvbnRleHRbICJ7e2MubmFtZX19IiBdID0gInt7dmFyc19jb250ZXh0fGdldF9kaWN0X3ZhbHVlOmMubmFtZSB9fSI7CisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIHslIGVuZGZvciAlfQorCisgICAgICAgICAgICAvLyBkcmF3IHRoZXNlIGVsZW1lbnRzIGFuZCBhc3NlcnQgdGhlaXIgZXZlbnQgaGFuZGxlcnMKKyAgICAgICAgICAgIG9uRWRpdFBhZ2VVcGRhdGUoZGF0YSk7CisgICAgICAgIH0pOworCisgICAgPC9zY3JpcHQ+CisKK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdHMuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZDc3YjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdHMuaHRtbApAQCAtMCwwICsxLDc3IEBACit7JSBleHRlbmRzICJiYXNlLmh0bWwiICV9CisKK3slIGxvYWQgc3RhdGljICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9CisKK3slIGJsb2NrIHBhZ2Vjb250ZW50ICV9CisKKworICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciB0b3AtYWlyIj4KKyAgICAgIDxoMT4KKyAgICAgIHslIGlmIHJlcXVlc3QuR0VULmZpbHRlciBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAwIG9yIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAwICV9CisgICAgICAgICAge3tvYmplY3RzLnBhZ2luYXRvci5jb3VudH19IHByb2plY3R7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fHBsdXJhbGl6ZX19IGZvdW5kCisgICAgICB7JWVsaWYgcmVxdWVzdC5HRVQuZmlsdGVyIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwIG9yIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICAgICAgICAgIE5vIHByb2plY3RzIGZvdW5kCisgICAgICB7JWVsc2UlfQorICAgICAgICAgIEFsbCBwcm9qZWN0cworICAgICAgeyVlbmRpZiV9CisgICAgICAgPC9oMT4KKyAgPC9kaXY+CisKKyAgeyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgICA8ZGl2IGNsYXNzPSJhbGVydCI+CisgICAgICAgIDxmb3JtIGNsYXNzPSJuby1yZXN1bHRzIGlucHV0LWFwcGVuZCIgaWQ9InNlYXJjaGZvcm0iPgorICAgICAgICAgICAgPGlucHV0IGlkPSJzZWFyY2giIG5hbWU9InNlYXJjaCIgY2xhc3M9ImlucHV0LXh4bGFyZ2UiIHR5cGU9InRleHQiIHZhbHVlPSIKKyAgICAgICAgICAgICAgICB7JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX0KKyAgICAgICAgICAgICAgICAgICAge3tyZXF1ZXN0LkdFVC5zZWFyY2h9fQorICAgICAgICAgICAgICAgIHslIGVuZGlmICV9Ii8+eyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9PGEgaHJlZj0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIiBjbGFzcz0iYWRkLW9uIGJ0biIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iaWNvbi1yZW1vdmUiPjwvaT48L2E+eyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2VhcmNoIj5TZWFyY2g8L2J1dHRvbj4KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tbGluayIgb25jbGljaz0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIj5TaG93IGFsbCBwcm9qZWN0czwvYnV0dG9uPgorICAgICAgICA8L2Zvcm0+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKworICB7JSBlbHNlICV9IHsjIFdlIGhhdmUgYnVpbGRzIHRvIGRpc3BsYXkgI30KKyAgeyUgaW5jbHVkZSAiYmFzZXRhYmxlX3RvcC5odG1sIiAlfQorICB7JSBmb3IgbyBpbiBvYmplY3RzICV9CisgICAgPHRyIGNsYXNzPSJkYXRhIj4KKyAgICAgIDx0ZD48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3QnIG8uaWQgJX0iPnt7by5uYW1lfX08L2E+PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0idXBkYXRlZCI+PGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0JyBvLmlkICV9Ij57e28udXBkYXRlZHxkYXRlOiJkL20veSBIOmkifX08L2E+PC90ZD4KKyAgICAgIDx0ZD4KKyAgICAgICAgeyUgaWYgby5yZWxlYXNlICV9CisgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3QnIG8uaWQgJX0jcHJvamVjdC1kZXRhaWxzIj57e28ucmVsZWFzZS5uYW1lfX08L2E+CisgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgIE5vIHJlbGVhc2UgYXZhaWxhYmxlCisgICAgICAgIHslIGVuZGlmICV9CisgICAgICA8L3RkPgorICAgICAgPHRkPjxhIGhyZWY9InslIHVybCAncHJvamVjdCcgby5pZCAlfSNtYWNoaW5lLWRpc3RybyI+e3tvLmdldF9jdXJyZW50X21hY2hpbmVfbmFtZX19PC9hPjwvdGQ+CisgICAgICB7JSBpZiBvLmdldF9udW1iZXJfb2ZfYnVpbGRzID09IDAgJX0KKyAgICAgIDx0ZCBjbGFzcz0ibXV0ZWQiPnt7by5nZXRfbnVtYmVyX29mX2J1aWxkc319PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibG91dGNvbWUiPjwvdGQ+CisgICAgICA8dGQgY2xhc3M9Imx0YXJnZXQiPjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlcnJvcnMiPjwvdGQ+CisgICAgICA8dGQgY2xhc3M9Imx3YXJuaW5ncyI+PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGltYWdlZmlsZXMiPjwvdGQ+CisgICAgICB7JSBlbHNlICV9CisgICAgICA8dGQ+PGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0YnVpbGRzJyBvLmlkICV9Ij57e28uZ2V0X251bWJlcl9vZl9idWlsZHN9fTwvYT48L3RkPgorICAgICAgPHRkIGNsYXNzPSJsb3V0Y29tZSI+PGEgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgby5nZXRfbGFzdF9idWlsZF9pZCAlfSI+eyVpZiBvLmdldF9sYXN0X291dGNvbWUgPT0gYnVpbGRfU1VDQ0VFREVEJX08aSBjbGFzcz0iaWNvbi1vay1zaWduIHN1Y2Nlc3MiPjwvaT57JWVsaWYgby5nZXRfbGFzdF9vdXRjb21lID09IGJ1aWxkX0ZBSUxFRCV9PGkgY2xhc3M9Imljb24tbWludXMtc2lnbiBlcnJvciI+PC9pPnslZWxzZSV9eyVlbmRpZiV9PC9hPjwvdGQ+CisgICAgICA8dGQgY2xhc3M9Imx0YXJnZXQiPjxhIGhyZWY9InslIHVybCAiYnVpbGRkYXNoYm9hcmQiIG8uZ2V0X2xhc3RfYnVpbGRfaWQgJX0iPnt7by5nZXRfbGFzdF90YXJnZXR9fSA8L2E+PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVycm9ycyI+eyUgaWYgby5nZXRfbGFzdF9lcnJvcnMgJX08YSBjbGFzcz0iZXJyb3JzLmNvdW50IGVycm9yIiBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBvLmdldF9sYXN0X2J1aWxkX2lkICV9I2Vycm9ycyI+e3tvLmdldF9sYXN0X2Vycm9yc319IGVycm9ye3tvLmdldF9sYXN0X2Vycm9yc3xwbHVyYWxpemV9fTwvYT57JWVuZGlmJX08L3RkPgorICAgICAgPHRkIGNsYXNzPSJsd2FybmluZ3MiPnslIGlmIG8uZ2V0X2xhc3Rfd2FybmluZ3MgJX08YSBjbGFzcz0id2FybmluZ3MuY291bnQgd2FybmluZyIgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgby5nZXRfbGFzdF9idWlsZF9pZCAlfSN3YXJuaW5ncyI+e3tvLmdldF9sYXN0X3dhcm5pbmdzfX0gd2FybmluZ3t7by5nZXRfbGFzdF93YXJuaW5nc3xwbHVyYWxpemV9fTwvYT57JWVuZGlmJX08L3RkPgorICAgICAgPHRkIGNsYXNzPSJsaW1hZ2VmaWxlcyI+CisgICAgICAgIHslIGlmIG8uZ2V0X2xhc3Rfb3V0Y29tZSA9PSBidWlsZF9TVUNDRUVERUQgJX0KKyAgICAgICAgPGEgaHJlZj0ieyV1cmwgImJ1aWxkZGFzaGJvYXJkIiBvLmdldF9sYXN0X2J1aWxkX2lkICV9I2ltYWdlcyI+e3tmc3R5cGVzfGdldF9kaWN0X3ZhbHVlOm8uaWR9fTwvYT4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgIDwvdGQ+CisKKyAgICAgIHslIGVuZGlmICV9CisgICAgPC90cj4KKyAgeyUgZW5kZm9yICV9CisgIHslIGluY2x1ZGUgImJhc2V0YWJsZV9ib3R0b20uaHRtbCIgJX0KKyAgeyUgZW5kaWYgJX0geyMgZW1wdHkgI30KKworeyUgZW5kYmxvY2sgJX0KKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdHRvcGJhci5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3R0b3BiYXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTI3NDFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3R0b3BiYXIuaHRtbApAQCAtMCwwICsxLDQ3IEBACis8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1zdWNjZXNzIGxlYWQiIGlkPSJwcm9qZWN0LWNyZWF0ZWQtbm90aWZpY2F0aW9uIiBzdHlsZT0ibWFyZ2luLXRvcDoxNXB4OyBkaXNwbGF5Om5vbmUiPgorICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9ImFsZXJ0Ij7DlzwvYnV0dG9uPgorICBZb3VyIHByb2plY3QgPHN0cm9uZz57e3Byb2plY3QubmFtZX19PC9zdHJvbmc+IGhhcyBiZWVuIGNyZWF0ZWQuIFlvdSBjYW4gbm93IDxhIGhyZWY9InslIHVybCAncHJvamVjdG1hY2hpbmVzJyBwcm9qZWN0LmlkICV9Ij5zZWxlY3QgeW91ciB0YXJnZXQgbWFjaGluZTwvYT4gYW5kIDxhIGhyZWY9InslIHVybCAncHJvamVjdHRhcmdldHMnIHByb2plY3QuaWQgJX0iPmNob29zZSBpbWFnZSByZWNpcGVzPC9hPiB0byBidWlsZC4KKzwvZGl2PgorCis8IS0tIHByb2plY3QgbmFtZSAtLT4KKzxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgPGgxPjxzcGFuIGlkPSJwcm9qZWN0LW5hbWUiPnt7cHJvamVjdC5uYW1lfX08L3NwYW4+CisgICAgPGkgY2xhc3M9Imljb24tcGVuY2lsIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSIiIGlkPSJwcm9qZWN0LWNoYW5nZS1mb3JtLXRvZ2dsZSIgdGl0bGU9IiI+PC9pPgorICA8L2gxPgorICA8Zm9ybSBpZD0icHJvamVjdC1uYW1lLWNoYW5nZS1mb3JtIiBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMHB4OyBkaXNwbGF5OiBub25lOyI+CisgICAgPGRpdiBjbGFzcz0iaW5wdXQtYXBwZW5kIj4KKyAgICAgIDxpbnB1dCBjbGFzcz0iaHVnZSBpbnB1dC14eGxhcmdlIiB0eXBlPSJ0ZXh0IiBpZD0icHJvamVjdC1uYW1lLWNoYW5nZS1pbnB1dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHZhbHVlPSJ7e3Byb2plY3QubmFtZX19Ij4KKyAgICAgICAgPGJ1dHRvbiBpZD0icHJvamVjdC1uYW1lLWNoYW5nZS1idG4iIGNsYXNzPSJidG4gYnRuLWxhcmdlIiB0eXBlPSJidXR0b24iPlNhdmU8L2J1dHRvbj4KKyAgICAgICAgPGEgaHJlZj0iIyIgaWQ9InByb2plY3QtbmFtZS1jaGFuZ2UtY2FuY2VsIiBjbGFzcz0iYnRuIGJ0bi1sYXJnZSBidG4tbGluayI+Q2FuY2VsPC9hPgorICAgIDwvZGl2PgorICA8L2Zvcm0+Cis8L2Rpdj4KKworPGRpdiBpZD0icHJvamVjdC10b3BiYXIiPgorICA8dWwgY2xhc3M9Im5hdiBuYXYtcGlsbHMiPgorICAgIDxsaT4KKyAgICAgIDxhIGhyZWY9InslIHVybCAncHJvamVjdGJ1aWxkcycgcHJvamVjdC5pZCAlfSI+CisgICAgICAgIEJ1aWxkcyAoPHNwYW4gY2xhc3M9InRvdGFsLWJ1aWxkcyI+MDwvc3Bhbj4pCisgICAgICA8L2E+CisgICAgPC9saT4KKyAgICA8bGkgaWQ9InRvcGJhci1jb25maWd1cmF0aW9uLXRhYiI+CisgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3QnIHByb2plY3QuaWQgJX0iPgorICAgICAgICBDb25maWd1cmF0aW9uCisgICAgICA8L2E+CisgICAgPC9saT4KKyAgICA8bGk+CisgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2ltcG9ydGxheWVyJyBwcm9qZWN0LmlkICV9Ij4KKyAgICAgICAgSW1wb3J0IGxheWVyCisgICAgICA8L2E+CisgICAgPC9saT4KKyAgICA8bGkgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgICAgPGZvcm0gY2xhc3M9ImZvcm0taW5saW5lIiBzdHlsZT0ibWFyZ2luLWJvdHRvbTowcHg7Ij4KKyAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBoZWFkaW5nLWhlbHAiIGRhdGEtcGxhY2VtZW50PSJsZWZ0IiB0aXRsZT0iIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSJUeXBlIHRoZSBuYW1lIG9mIG9uZSBvciBtb3JlIHJlY2lwZXMgeW91IHdhbnQgdG8gYnVpbGQsIHNlcGFyYXRlZCBieSBhIHNwYWNlLiBZb3UgY2FuIGFsc28gc3BlY2lmeSBhIHRhc2sgYnkgYXBwZW5kaW5nIGEgc2VtaWNvbG9uIGFuZCBhIHRhc2sgbmFtZSB0byB0aGUgcmVjaXBlIG5hbWUsIGxpa2Ugc286IDxjb2RlPmJ1c3lib3g6Y2xlYW48L2NvZGU+Ij48L2k+CisgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWFwcGVuZCI+CisgICAgICAgICAgPGlucHV0IGlkPSJidWlsZC1pbnB1dCIgdHlwZT0idGV4dCIgY2xhc3M9ImlucHV0LXhsYXJnZSBpbnB1dC1sZyBidWlsZC10YXJnZXQtaW5wdXQiIHBsYWNlaG9sZGVyPSJUeXBlIHRoZSByZWNpcGUgeW91IHdhbnQgdG8gYnVpbGQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBkaXNhYmxlZD4KKyAgICAgICAgICA8YnV0dG9uIGlkPSJidWlsZC1idXR0b24iIGNsYXNzPSJidG4gYnRuLXByaW1hcnkgYnRuLWxhcmdlIGJ1aWxkLWJ1dHRvbiIgZGF0YS1wcm9qZWN0LWlkPSJ7e3Byb2plY3QuaWR9fSIgZGlzYWJsZWQ+QnVpbGQ8L2J1dHRvbj4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Zvcm0+CisgICAgPC9saT4KKyAgPC91bD4KKzwvZGl2PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3JlY2lwZS5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3JlY2lwZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZTQxOTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcmVjaXBlLmh0bWwKQEAgLTAsMCArMSwyNDIgQEAKK3slIGV4dGVuZHMgImJhc2VidWlsZGRldGFpbHBhZ2UuaHRtbCIgJX0KKworeyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCit7JSBibG9jayBsb2NhbGJyZWFkY3J1bWIgJX0KKzxsaT48YSBocmVmPSJ7JSB1cmwgJ3JlY2lwZXMnIGJ1aWxkLnBrICV9Ij5SZWNpcGVzPC9hPjwvbGk+Cis8bGk+e3tvYmplY3QubmFtZX19X3t7b2JqZWN0LnZlcnNpb259fSA8L2xpPgoreyUgZW5kYmxvY2sgJX0KKworeyUgYmxvY2sgcGFnZWRldGFpbGluZm9tYWluICV9CisKKzwhLS0gQmVnaW4gY29udGFpbmVyIC0tPgorCis8ZGl2IGNsYXNzPSJyb3cgc3BhbjExIj4KKyAgICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+CisgICAgICAgIDxoMT57e29iamVjdC5uYW1lfX1fe3tvYmplY3QudmVyc2lvbn19PC9oMT4KKyAgICA8L2Rpdj4KKzwvZGl2PgorCis8ZGl2IGNsYXNzPSJyb3cgc3BhbjcgdGFiYmFibGUiPgorICAgIDx1bCBjbGFzcz0ibmF2IG5hdi1waWxscyI+CisgICAgICAgIDxsaSBjbGFzcz0ie3t0YWJfc3RhdGVzLjF9fSI+CisgICAgICAgICAgICA8YSBocmVmPSIjaW5mb3JtYXRpb24iIGRhdGEtdG9nZ2xlPSJ0YWIiPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJCdWlsZC1yZWxhdGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZWNpcGUiPjwvaT4KKyAgICAgICAgICAgICAgICBSZWNpcGUgZGV0YWlscworICAgICAgICAgICAgPC9hPgorICAgICAgICA8L2xpPgorICAgICAgICA8bGk+CisgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJyZWNpcGVfcGFja2FnZXMiIGJ1aWxkLnBrIG9iamVjdC5pZCAlfSI+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBwYWNrYWdlZCBvdXRwdXQgcmVzdWx0aW5nIGZyb20gYnVpbGRpbmcgdGhlIHJlY2lwZSI+PC9pPgorICAgICAgICAgICAgICAgIFBhY2thZ2VzICh7e3BhY2thZ2VfY291bnR9fSkKKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgICAgPGxpIGNsYXNzPSJ7e3RhYl9zdGF0ZXMuM319Ij4KKyAgICAgICAgICAgIDxhIGhyZWY9IiNkZXBlbmRlbmNpZXMiIGRhdGEtdG9nZ2xlPSJ0YWIiPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgcmVjaXBlIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzIChpLmUuIG90aGVyIHJlY2lwZXMpIj48L2k+CisgICAgICAgICAgICAgICAgQnVpbGQgZGVwZW5kZW5jaWVzICh7e29iamVjdC5yX2RlcGVuZGVuY2llc19yZWNpcGUuYWxsLmNvdW50fX0pCisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0ie3t0YWJfc3RhdGVzLjR9fSI+CisgICAgICAgICAgICA8YSBocmVmPSIjYnJvdWdodC1pbi1ieSIgZGF0YS10b2dnbGU9InRhYiI+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSByZWNpcGUgYnVpbGQtdGltZSByZXZlcnNlIGRlcGVuZGVuY2llcyAoaS5lLiB0aGUgcmVjaXBlcyB0aGF0IGRlcGVuZCBvbiB0aGlzIHJlY2lwZSkiPjwvaT4KKyAgICAgICAgICAgICAgICBSZXZlcnNlIGJ1aWxkIGRlcGVuZGVuY2llcyAoe3tvYmplY3Qucl9kZXBlbmRlbmNpZXNfZGVwZW5kcy5hbGwuY291bnR9fSkKKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC9saT4KKyAgICA8L3VsPgorICAgIDxkaXYgY2xhc3M9InRhYi1jb250ZW50Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0idGFiLXBhbmUge3t0YWJfc3RhdGVzLjF9fSIgaWQ9ImluZm9ybWF0aW9uIj4KKyAgICAgICAgICAgIDxkbCBjbGFzcz0iZGwtaG9yaXpvbnRhbCI+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIG5hbWUgb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlIj48L2k+CisgICAgICAgICAgICAgICAgICAgIExheWVyCisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+e3tsYXllci5uYW1lfX08L2RkPgorCisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iUGF0aCB0byB0aGUgcmVjaXBlIC5iYiBmaWxlIj48L2k+CisgICAgICAgICAgICAgICAgICAgIFJlY2lwZSBmaWxlCisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+PGNvZGU+e3tvYmplY3QuZmlsZV9wYXRofX0geyUgaWYgb2JqZWN0LnBhdGhmbGFncyAlfTxpPih7e29iamVjdC5wYXRoZmxhZ3N9fSk8L2k+eyUgZW5kaWYgJX08L2NvZGU+PC9kZD4KKyAgICAgICAgICAgICAgICB7JSBpZiBsYXllcl92ZXJzaW9uLmJyYW5jaCAlfQorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBHaXQgYnJhbmNoIG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZSI+PC9pPgorICAgICAgICAgICAgICAgICAgICBMYXllciBicmFuY2gKKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD57e2xheWVyX3ZlcnNpb24uYnJhbmNofX08L2RkPgorICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIEdpdCBjb21taXQgb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlIj48L2k+CisgICAgICAgICAgICAgICAgICAgIExheWVyIGNvbW1pdAorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkIGNsYXNzPSJpc2NvbW1pdCI+e3tsYXllcl92ZXJzaW9uLmNvbW1pdH19PC9kZD4KKyAgICAgICAgICAgIDwvZGw+CisKKyAgICAgICAgICAgIDxoMiBjbGFzcz0iZGV0YWlscyI+VGFza3M8L2gyPgorICAgICAgICAgICAgeyUgaWYgbm90IHRhc2tzICV9CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgICAgICA8c3Ryb25nPnt7b2JqZWN0Lm5hbWV9fV97e29iamVjdC52ZXJzaW9ufX08L3N0cm9uZz4gZG9lcyBub3QgaGF2ZSBhbnkgdGFza3MgaW4gdGhpcyBidWlsZC4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciI+CisgICAgICAgICAgICAgICAgPHRoZWFkPgorCQkgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBydW5uaW5nIHNlcXVlbmNlIG9mIGVhY2ggdGFzayBpbiB0aGUgYnVpbGQiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyCisgICAgICAgICAgICAgICAgICAgIDwvdGg+CisgICAgICAgICAgICAgICAgICAgIDx0aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbmFtZSBvZiB0aGUgdGFzayI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgVGFzaworICAgICAgICAgICAgICAgICAgICA8L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhpcyB2YWx1ZSB0ZWxscyB5b3UgaWYgYSB0YXNrIGhhZCB0byBydW4gKGV4ZWN1dGVkKSBpbiBvcmRlciB0byBnZW5lcmF0ZSB0aGUgdGFzayBvdXRwdXQsIG9yIGlmIHRoZSBvdXRwdXQgd2FzIHByb3ZpZGVkIGJ5IGFub3RoZXIgdGFzayBhbmQgdGhlcmVmb3JlIHRoZSB0YXNrIGRpZG4ndCBuZWVkIHRvIHJ1biAobm90IGV4ZWN1dGVkKSI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgRXhlY3V0ZWQKKyAgICAgICAgICAgICAgICAgICAgPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoaXMgY29sdW1uIHRlbGxzIHlvdSBpZiAnZXhlY3V0ZWQnIHRhc2tzIHN1Y2NlZWRlZCBvciBmYWlsZWQuIFRoZSBjb2x1bW4gYWxzbyB0ZWxscyB5b3Ugd2h5ICdub3QgZXhlY3V0ZWQnIHRhc2tzIGRpZCBub3QgbmVlZCB0byBydW4iPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIE91dGNvbWUKKyAgICAgICAgICAgICAgICAgICAgPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoaXMgY29sdW1uIHRlbGxzIHlvdSBpZiBhIHRhc2sgdHJpZWQgdG8gcmVzdG9yZSBvdXRwdXQgZnJvbSB0aGUgPGNvZGU+c3N0YXRlLWNhY2hlPC9jb2RlPiBkaXJlY3Rvcnkgb3IgbWlycm9ycywgYW5kIHJlcG9ydHMgdGhlIHJlc3VsdDogU3VjY2VlZGVkLCBGYWlsZWQgb3IgRmlsZSBub3QgaW4gY2FjaGUiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIENhY2hlIGF0dGVtcHQKKyAgICAgICAgICAgICAgICAgICAgPC90aD4KKwkJICA8L3RyPgorICAgICAgICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgICAgICAgPHRib2R5PgorCisgICAgICAgICAgICAgICAgICAgIHslIGZvciB0YXNrIGluIHRhc2tzICV9CisKKyAgICAgICAgICAgICAgICAgICAgPHRyIHt7IHRhc2t8dGFza19jb2xvciB9fSA+CisKKyAgICAgICAgICAgICAgICAgICAgPHRkPjxhIHt7IHRhc2t8dGFza19jb2xvciB9fSBocmVmPSJ7JSB1cmwgInRhc2siIGJ1aWxkLnBrIHRhc2sucGsgJX0iPnt7dGFzay5vcmRlcn19PC9hPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIHt7IHRhc2t8dGFza19jb2xvciB9fSBocmVmPSJ7JSB1cmwgInRhc2siIGJ1aWxkLnBrIHRhc2sucGsgJX0iPnt7dGFzay50YXNrX25hbWV9fTwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIHRhc2suZ2V0X2Rlc2NyaXB0aW9uICV9PGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIiB0aXRsZT0iIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSJ7e3Rhc2suZ2V0X2Rlc2NyaXB0aW9ufX0iPjwvaT4geyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICAgICAgPC90ZD4KKworICAgICAgICAgICAgICAgICAgICA8dGQ+PGEge3sgdGFza3x0YXNrX2NvbG9yIH19IGhyZWY9InslIHVybCAidGFzayIgYnVpbGQucGsgdGFzay5wayAlfSI+e3t0YXNrLmdldF9leGVjdXRlZF9kaXNwbGF5fX08L2E+PC90ZD4KKworICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8YSB7eyB0YXNrfHRhc2tfY29sb3IgfX0gaHJlZj0ieyUgdXJsICJ0YXNrIiBidWlsZC5wayB0YXNrLnBrICV9Ij57e3Rhc2suZ2V0X291dGNvbWVfZGlzcGxheX19IDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIHRhc2sub3V0Y29tZSA9IHRhc2suT1VUQ09NRV9GQUlMRUQgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2J1aWxkX2FydGlmYWN0JyBidWlsZC5wayAidGFza2xvZ2ZpbGUiIHRhc2sucGsgJX0iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1kb3dubG9hZC1hbHQiIHRpdGxlPSJEb3dubG9hZCB0YXNrIGxvZyBmaWxlIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaG92ZXItaGVscCIgdGl0bGU9Int7dGFzay5nZXRfb3V0Y29tZV9oZWxwfX0iPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWZub3RlcXVhbCB0YXNrLnNzdGF0ZV9yZXN1bHQgdGFzay5TU1RBVEVfTkEgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIHt7IHRhc2t8dGFza19jb2xvciB9fSBocmVmPSJ7JSB1cmwgInRhc2siIGJ1aWxkLnBrIHRhc2sucGsgJX0iPnt7dGFzay5nZXRfc3N0YXRlX3Jlc3VsdF9kaXNwbGF5fX08L2E+CisgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZm5vdGVxdWFsICV9CisgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisKKyAgICAgICAgICAgICAgICAgICAgPC90cj4KKworICAgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItcGFuZSB7e3RhYl9zdGF0ZXMuM319IiBpZD0iZGVwZW5kZW5jaWVzIj4KKworICAgICAgICAgICAgeyUgaWYgbm90IG9iamVjdC5yX2RlcGVuZGVuY2llc19yZWNpcGUuYWxsICV9CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgICAgICA8c3Ryb25nPnt7b2JqZWN0Lm5hbWV9fV97e29iamVjdC52ZXJzaW9ufX08L3N0cm9uZz4gaGFzIG5vIGJ1aWxkIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciI+CisgICAgICAgICAgICAgICAgPHRoZWFkPgorICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjaXBlCisgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CisgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgPC90aGVhZD4KKyAgICAgICAgICAgICAgICA8dGJvZHk+CisKKyAgICAgICAgICAgICAgICAgICAgeyUgZm9yIHJyIGluIG9iamVjdC5yX2RlcGVuZGVuY2llc19yZWNpcGUuYWxsfGRpY3Rzb3J0OiJkZXBlbmRzX29uLm5hbWUiICV9CisgICAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBocmVmPSJ7JSB1cmwgInJlY2lwZSIgYnVpbGQucGsgcnIuZGVwZW5kc19vbi5wayAlfSI+e3tyci5kZXBlbmRzX29uLm5hbWV9fTwvYT48L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxhIGhyZWY9InslIHVybCAicmVjaXBlIiBidWlsZC5wayByci5kZXBlbmRzX29uLnBrICV9Ij57e3JyLmRlcGVuZHNfb24udmVyc2lvbn19PC9hPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorCisgICAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItcGFuZSB7e3RhYl9zdGF0ZXMuNH19IiBpZD0iYnJvdWdodC1pbi1ieSI+CisKKyAgICAgICAgICAgIHslIGlmIG5vdCBvYmplY3Qucl9kZXBlbmRlbmNpZXNfZGVwZW5kcy5hbGwgJX0KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPgorICAgICAgICAgICAgICAgIDxzdHJvbmc+e3tvYmplY3QubmFtZX19X3t7b2JqZWN0LnZlcnNpb259fTwvc3Ryb25nPiBoYXMgbm8gcmV2ZXJzZSBidWlsZCBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIiPgorICAgICAgICAgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY2lwZQorICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgorICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgICAgICAgPHRib2R5PgorCisgICAgICAgICAgICAgICAgICAgIHslIGZvciByciBpbiBvYmplY3Qucl9kZXBlbmRlbmNpZXNfZGVwZW5kcy5hbGx8ZGljdHNvcnQ6InJlY2lwZS5uYW1lIiAlfQorICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHJyLnJlY2lwZS5wayAlfSI+e3tyci5yZWNpcGUubmFtZX19PC9hPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHJyLnJlY2lwZS5wayAlfSI+e3tyci5yZWNpcGUudmVyc2lvbn19PC9hPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorCisgICAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorPC9kaXY+CisKKzxkaXYgY2xhc3M9InJvdyBzcGFuNCB3ZWxsIj4KKyAgICA8aDI+QWJvdXQge3tvYmplY3QubmFtZX19PC9oMj4KKyAgICA8ZGwgY2xhc3M9Iml0ZW0taW5mbyI+CisgICAgICAgIHslIGlmIG9iamVjdC5zdW1tYXJ5ICV9CisgICAgICAgICAgICA8ZHQ+U3VtbWFyeTwvZHQ+CisgICAgICAgICAgICA8ZGQ+e3tvYmplY3Quc3VtbWFyeX19PC9kZD4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgeyUgaWYgb2JqZWN0LmRlc2NyaXB0aW9uICV9CisgICAgICAgICAgICA8ZHQ+RGVzY3JpcHRpb248L2R0PgorICAgICAgICAgICAgPGRkPnt7b2JqZWN0LmRlc2NyaXB0aW9ufX08L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICB7JSBpZiBvYmplY3QuaG9tZXBhZ2UgJX0KKyAgICAgICAgICAgIDxkdD5Ib21lcGFnZTwvZHQ+CisgICAgICAgICAgICA8ZGQ+PGEgaHJlZj0ie3tvYmplY3QuaG9tZXBhZ2V9fSI+e3tvYmplY3QuaG9tZXBhZ2V9fTwvYT48L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICB7JSBpZiBvYmplY3QuYnVndHJhY2tlciAlfQorICAgICAgICAgICAgPGR0PkJ1Z3RyYWNrZXI8L2R0PgorICAgICAgICAgICAgPGRkPjxhIGhyZWY9Int7b2JqZWN0LmJ1Z3RyYWNrZXJ9fSI+e3tvYmplY3QuYnVndHJhY2tlcn19PC9hPjwvZGQ+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIHslIGlmIG9iamVjdC5zZWN0aW9uICV9CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICBTZWN0aW9uCisgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHNlY3Rpb24gaW4gd2hpY2ggcmVjaXBlcyBzaG91bGQgYmUgY2F0ZWdvcml6ZWQiPjwvaT4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+e3tvYmplY3Quc2VjdGlvbn19PC9kZD4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgeyUgaWYgb2JqZWN0LmxpY2Vuc2UgJX0KKyAgICAgICAgICAgIDxkdD5MaWNlbnNlPC9kdD4KKyAgICAgICAgICAgIDxkZD57e29iamVjdC5saWNlbnNlfX08L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgIDwvZGw+Cis8L2Rpdj4KKworeyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9yZWNpcGVfYnRuLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcmVjaXBlX2J0bi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YzFiMjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcmVjaXBlX2J0bi5odG1sCkBAIC0wLDAgKzEsOCBAQAorPGJ1dHRvbiBkYXRhLXJlY2lwZS1uYW1lPSJ7e2RhdGEubmFtZX19IiBjbGFzcz0iYnRuIGJ0bi1ibG9jayBsYXllci1leGlzdHMte3tkYXRhLmxheWVyX3ZlcnNpb24ucGt9fSBidWlsZC1yZWNpcGUtYnRuIiBzdHlsZT0iZGlzcGxheTpub25lOyBtYXJnaW4tdG9wOiA1cHg7IiA+CisgIEJ1aWxkIHJlY2lwZQorPC9idXR0b24+Cis8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsb2NrIGxheWVyYnRuIGxheWVyLWFkZC17e2RhdGEubGF5ZXJfdmVyc2lvbi5wa319IiBkYXRhLWxheWVyPSd7ICJpZCI6IHt7ZGF0YS5sYXllcl92ZXJzaW9uLnBrfX0sICJuYW1lIjogICJ7e2RhdGEubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX0iLCAibGF5ZXJkZXRhaWx1cmwiOiAieyV1cmwgJ2xheWVyZGV0YWlscycgZXh0cmEucGlkIGRhdGEubGF5ZXJfdmVyc2lvbi5wayV9In0nIGRhdGEtZGlyZWN0aXZlPSJhZGQiPgorICA8aSBjbGFzcz0iaWNvbi1wbHVzIj48L2k+CisgIEFkZCBsYXllcgorICA8aSB0aXRsZT0iIiBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSJUbyBidWlsZCB0aGlzIHRhcmdldCwgeW91IG11c3QgZmlyc3QgYWRkIHRoZSB7e2RhdGEubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX0gbGF5ZXIgdG8geW91ciBwcm9qZWN0Ij48L2k+Cis8L2J1dHRvbj4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9yZWNpcGVfcGFja2FnZXMuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9yZWNpcGVfcGFja2FnZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjU4NDdiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3JlY2lwZV9wYWNrYWdlcy5odG1sCkBAIC0wLDAgKzEsMTIzIEBACit7JSBleHRlbmRzICJiYXNlYnVpbGRkZXRhaWxwYWdlLmh0bWwiICV9CisKK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KK3slIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfQorPGxpPjxhIGhyZWY9InslIHVybCAncmVjaXBlcycgYnVpbGQucGsgJX0iPlJlY2lwZXM8L2E+PC9saT4KKzxsaT57e3JlY2lwZS5uYW1lfX1fe3tyZWNpcGUudmVyc2lvbn19IDwvbGk+Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBwYWdlZGV0YWlsaW5mb21haW4gJX0KKworPCEtLSBCZWdpbiBjb250YWluZXIgLS0+CisKKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBzcGFuMTEiPgorICAgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgICAgICAgPGgxPnt7cmVjaXBlLm5hbWV9fV97e3JlY2lwZS52ZXJzaW9ufX08L2gxPgorICAgIDwvZGl2PgorPC9kaXY+CisKKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBzcGFuNyB0YWJiYWJsZSI+CisgICAgPHVsIGNsYXNzPSJuYXYgbmF2LXBpbGxzIj4KKyAgICAgICAgPGxpPgorICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHJlY2lwZS5pZCAiMSIgJX0iPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJCdWlsZC1yZWxhdGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZWNpcGUiPjwvaT4KKyAgICAgICAgICAgICAgICBSZWNpcGUgZGV0YWlscworICAgICAgICAgICAgPC9hPgorICAgICAgICA8L2xpPgorICAgICAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+CisJCQk8YSBocmVmPSIjcGFja2FnZXMtYnVpbHQiIGRhdGEtdG9nZ2xlPSJ0YWIiPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgcGFja2FnZWQgb3V0cHV0IHJlc3VsdGluZyBmcm9tIGJ1aWxkaW5nIHRoZSByZWNpcGUiPjwvaT4KKyAgICAgICAgICAgICAgICBQYWNrYWdlcyAoe3tvYmplY3RfY291bnR9fSkKKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgICAgPGxpPgorICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHJlY2lwZS5pZCAiMyIgJX0iPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgcmVjaXBlIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzIChpLmUuIG90aGVyIHJlY2lwZXMpIj48L2k+CisgICAgICAgICAgICAgICAgQnVpbGQgZGVwZW5kZW5jaWVzICh7e3JlY2lwZS5yX2RlcGVuZGVuY2llc19yZWNpcGUuYWxsLmNvdW50fX0pCisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvbGk+CisgICAgICAgIDxsaT4KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAicmVjaXBlIiBidWlsZC5wayByZWNpcGUuaWQgIjQiICV9Ij4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHJlY2lwZSBidWlsZC10aW1lIHJldmVyc2UgZGVwZW5kZW5jaWVzIChpLmUuIHRoZSByZWNpcGVzIHRoYXQgZGVwZW5kIG9uIHRoaXMgcmVjaXBlKSI+PC9pPgorICAgICAgICAgICAgICAgIFJldmVyc2UgYnVpbGQgZGVwZW5kZW5jaWVzICh7e3JlY2lwZS5yX2RlcGVuZGVuY2llc19kZXBlbmRzLmFsbC5jb3VudH19KQorICAgICAgICAgICAgPC9hPgorICAgICAgICA8L2xpPgorICAgIDwvdWw+CisgICAgPGRpdiBjbGFzcz0idGFiLWNvbnRlbnQiPgoreyMgICAgICAgIDxkaXYgY2xhc3M9InRhYi1wYW5lIGFjdGl2ZSIgaWQ9InBhY2thZ2VzLWJ1aWx0IiBuYW1lPSJwYWNrYWdlcy1idWlsdCI+I30KKyAgICAgICA8ZGl2IGNsYXNzPSJ0YWItcGFuZSBhY3RpdmUiIGlkPSJwYWNrYWdlcy1idWlsdCI+CisgICAgICAgICAgICB7JSBpZiBub3Qgb2JqZWN0cyBhbmQgbm90IHJlcXVlc3QuR0VULnNlYXJjaCAlfQorICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyI+CisgICAgICAgICAgICAgICAgPHN0cm9uZz57e3JlY2lwZS5uYW1lfX1fe3tyZWNpcGUudmVyc2lvbn19PC9zdHJvbmc+IGRvZXMgbm90IGJ1aWxkIGFueSBwYWNrYWdlcy4KKyAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICB7JSBlbGlmIG5vdCBvYmplY3RzICV9CisgICAgICAgICAgICAgICAgeyMgaGF2ZSBlbXB0eSBzZWFyY2ggcmVzdWx0cywgbm8gdGFibGUgbm9yIHBhZ2luYXRpb24gI30KKyAgICAgICAgICAgICAgICB7JSB3aXRoICJwYWNrYWdlcyIgYXMgc2VhcmNoX3doYXQgJX0KKyAgICAgICAgICAgICAgICB7JSBpbmNsdWRlICJkZXRhaWxfc2VhcmNoX2hlYWRlci5odG1sIiAlfQorICAgICAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKworICAgICAgICAgICAgeyUgZWxzZSAlfQorCisKKyAgICAgICAgICAgICAgICB7JSB3aXRoICJwYWNrYWdlcyIgYXMgc2VhcmNoX3doYXQgJX0KKyAgICAgICAgICAgICAgICB7JSBpbmNsdWRlICJkZXRhaWxfc2VhcmNoX2hlYWRlci5odG1sIiAlfQorICAgICAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIgdGFibGVzb3J0ZXIiIGlkPSJvdGFibGUiPgorICAgICAgICAgICAgICAgIHslIGluY2x1ZGUgImRldGFpbF9zb3J0ZWRfaGVhZGVyLmh0bWwiICV9CisKKyAgICAgICAgICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICAgICAgICAgIHslIGZvciBwYWNrYWdlIGluIG9iamVjdHMgJX0KKworICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgaHJlZj0ieyUgdXJsICJwYWNrYWdlX2J1aWx0X2RldGFpbCIgYnVpbGQucGsgcGFja2FnZS5wayAlfSI+e3twYWNrYWdlLm5hbWV9fTwvYT48L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxhIGhyZWY9InslIHVybCAicGFja2FnZV9idWlsdF9kZXRhaWwiIGJ1aWxkLnBrIHBhY2thZ2UucGsgJX0iPnt7cGFja2FnZS52ZXJzaW9ufX1fe3twYWNrYWdlLnJldmlzaW9ufX08L2E+PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ic2l6ZWNvbCI+PGEgaHJlZj0ieyUgdXJsICJwYWNrYWdlX2J1aWx0X2RldGFpbCIgYnVpbGQucGsgcGFja2FnZS5wayAlfSI+e3twYWNrYWdlLnNpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fTwvYT48L3RkPgorICAgICAgICAgICAgICAgICAgICA8L3RyPgorCisgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKworICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIHslIGlmIG9iamVjdHMgJX0KKyAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgICAgICB7JSBpbmNsdWRlICJkZXRhaWxfcGFnaW5hdGlvbl9ib3R0b20uaHRtbCIgJX0KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIDwvZGl2PiB7IyB0YWItcGFuZSAjfQorICAgIDwvZGl2PiB7IyB0YWItY29udGVudCAjfQorPC9kaXY+IHsjIHNwYW43ICN9CisKKzxkaXYgY2xhc3M9InJvdyBzcGFuNCB3ZWxsIj4KKyAgICA8aDI+QWJvdXQge3tyZWNpcGUubmFtZX19PC9oMj4KKyAgICA8ZGwgY2xhc3M9Iml0ZW0taW5mbyI+CisgICAgICAgIHslIGlmIHJlY2lwZS5zdW1tYXJ5ICV9CisgICAgICAgICAgICA8ZHQ+U3VtbWFyeTwvZHQ+CisgICAgICAgICAgICA8ZGQ+e3tyZWNpcGUuc3VtbWFyeX19PC9kZD4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgeyUgaWYgcmVjaXBlLmRlc2NyaXB0aW9uICV9CisgICAgICAgICAgICA8ZHQ+RGVzY3JpcHRpb248L2R0PgorICAgICAgICAgICAgPGRkPnt7cmVjaXBlLmRlc2NyaXB0aW9ufX08L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICB7JSBpZiByZWNpcGUuaG9tZXBhZ2UgJX0KKyAgICAgICAgICAgIDxkdD5Ib21lcGFnZTwvZHQ+CisgICAgICAgICAgICA8ZGQ+PGEgaHJlZj0ie3tyZWNpcGUuaG9tZXBhZ2V9fSI+e3tyZWNpcGUuaG9tZXBhZ2V9fTwvYT48L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICB7JSBpZiByZWNpcGUuYnVndHJhY2tlciAlfQorICAgICAgICAgICAgPGR0PkJ1Z3RyYWNrZXI8L2R0PgorICAgICAgICAgICAgPGRkPjxhIGhyZWY9Int7cmVjaXBlLmJ1Z3RyYWNrZXJ9fSI+e3tyZWNpcGUuYnVndHJhY2tlcn19PC9hPjwvZGQ+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIHslIGlmIHJlY2lwZS5zZWN0aW9uICV9CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICBTZWN0aW9uCisgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHNlY3Rpb24gaW4gd2hpY2ggcmVjaXBlcyBzaG91bGQgYmUgY2F0ZWdvcml6ZWQiPjwvaT4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+e3tyZWNpcGUuc2VjdGlvbn19PC9kZD4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgeyUgaWYgcmVjaXBlLmxpY2Vuc2UgJX0KKyAgICAgICAgICAgIDxkdD5MaWNlbnNlPC9kdD4KKyAgICAgICAgICAgIDxkZD57e3JlY2lwZS5saWNlbnNlfX08L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgIDwvZGw+Cis8L2Rpdj4KK3slIGVuZGJsb2NrIHBhZ2VkZXRhaWxpbmZvbWFpbiAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3JlY2lwZXMuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9yZWNpcGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNkYWM0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9yZWNpcGVzLmh0bWwKQEAgLTAsMCArMSwxMTIgQEAKK3slIGV4dGVuZHMgImJhc2VidWlsZHBhZ2UuaHRtbCIgJX0KKworeyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCit7JSBibG9jayBsb2NhbGJyZWFkY3J1bWIgJX0KKzxsaT5SZWNpcGVzPC9saT4KK3slIGVuZGJsb2NrICV9CisKK3slIGJsb2NrIG5hdi1yZWNpcGVzICV9CisgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSJ7JSB1cmwgJ3JlY2lwZXMnIGJ1aWxkLnBrICV9Ij5SZWNpcGVzPC9hPjwvbGk+Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBidWlsZGluZm9tYWluICV9Cis8ZGl2IGNsYXNzPSJzcGFuMTAiPgorPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorPGgxPgorICB7JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID4gMCAgJX0KKyAgICAgIHt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR9fSByZWNpcGV7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fHBsdXJhbGl6ZX19IGZvdW5kCisgIHslZWxpZiByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAlfQorICAgICAgTm8gcmVjaXBlcyBmb3VuZAorICB7JWVsc2UlfQorICAgICAgUmVjaXBlcworICB7JWVuZGlmJX0KKyA8L2gxPgorPC9kaXY+CisKK3slIGlmIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgJX0KKyAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0Ij4KKyAgICAgICAgPGZvcm0gY2xhc3M9Im5vLXJlc3VsdHMgaW5wdXQtYXBwZW5kIiBpZD0ic2VhcmNoZm9ybSI+CisgICAgICAgICAgICA8aW5wdXQgaWQ9InNlYXJjaCIgbmFtZT0ic2VhcmNoIiBjbGFzcz0iaW5wdXQteHhsYXJnZSIgdHlwZT0idGV4dCIgdmFsdWU9InslaWYgcmVxdWVzdC5HRVQuc2VhcmNoJX17e3JlcXVlc3QuR0VULnNlYXJjaH19eyVlbmRpZiV9Ii8+eyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9PGEgaHJlZj0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIiBjbGFzcz0iYWRkLW9uIGJ0biIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iaWNvbi1yZW1vdmUiPjwvaT48L2E+eyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2VhcmNoIj5TZWFyY2g8L2J1dHRvbj4KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tbGluayIgb25jbGljaz0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIj5TaG93IGFsbCByZWNpcGVzPC9idXR0b24+CisgICAgICAgIDwvZm9ybT4KKyAgICAgIDwvZGl2PgorICA8L2Rpdj4KKworeyUgZWxzZSAlfQoreyUgaW5jbHVkZSAiYmFzZXRhYmxlX3RvcC5odG1sIiAlfQorCisgICAgeyUgZm9yIHJlY2lwZSBpbiBvYmplY3RzICV9CisKKyAgICA8dHIgY2xhc3M9ImRhdGEiPgorICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9fbmFtZSI+CisgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgInJlY2lwZSIgYnVpbGQucGsgcmVjaXBlLnBrICV9Ij57e3JlY2lwZS5uYW1lfX08L2E+CisgICAgICAgIDwvdGQ+CisgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX192ZXJzaW9uIj4KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAicmVjaXBlIiBidWlsZC5wayByZWNpcGUucGsgJX0iPnt7cmVjaXBlLnZlcnNpb259fTwvYT4KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPCEtLSBEZXBlbmRzIC0tPgorICAgICAgICA8dGQgY2xhc3M9ImRlcGVuZHNfb24iPgorICAgICAgICAgICAgeyUgd2l0aCBkZXBzPXJlY2lwZV9kZXBzfGdldF9kaWN0X3ZhbHVlOnJlY2lwZS5wayAlfQorICAgICAgICAgICAgeyUgd2l0aCBjb3VudD1kZXBzfGxlbmd0aCAlfQorICAgICAgICAgICAgeyUgaWYgY291bnQgJX0KKyAgICAgICAgICAgIDxhIGNsYXNzPSJidG4iCisgICAgICAgICAgICAgICAgdGl0bGU9IjxhIGhyZWY9J3slIHVybCAicmVjaXBlIiBidWlsZC5wayByZWNpcGUucGsgJX0jZGVwZW5kZW5jaWVzJz57e3JlY2lwZS5uYW1lfX08L2E+IGRlcGVuZGVuY2llcyIKKyAgICAgICAgICAgICAgICBkYXRhLWNvbnRlbnQ9Ijx1bCBjbGFzcz0ndW5zdHlsZWQnPgorICAgICAgICAgICAgICAgICAgeyUgZm9yIGkgaW4gZGVwc3xkaWN0c29ydDoiZGVwZW5kc19vbi5uYW1lIiV9CisgICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSd7JSB1cmwgInJlY2lwZSIgYnVpbGQucGsgaS5kZXBlbmRzX29uLnBrICV9Jz57e2kuZGVwZW5kc19vbi5uYW1lfX08L2E+PC9saT4KKyAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgIDwvdWw+Ij4KKyAgICAgICAgICAgICAgICB7e2NvdW50fX0KKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgIDwvdGQ+CisgICAgICAgIDwhLS0gIEJyb3VnaHQgaW4gYnkgLS0+CisgICAgICAgIDx0ZCBjbGFzcz0iZGVwZW5kc19ieSI+CisgICAgICAgICAgICB7JSB3aXRoIHJldnM9cmVjaXBlX3JldnN8Z2V0X2RpY3RfdmFsdWU6cmVjaXBlLnBrICV9CisgICAgICAgICAgICB7JSB3aXRoIGNvdW50PXJldnN8bGVuZ3RoICV9CisgICAgICAgICAgICB7JSBpZiBjb3VudCAlfQorICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biIKKyAgICAgICAgICAgICAgICB0aXRsZT0iPGEgaHJlZj0neyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHJlY2lwZS5wayAlfSNicm91Z2h0LWluLWJ5Jz57e3JlY2lwZS5uYW1lfX08L2E+IHJldmVyc2UgZGVwZW5kZW5jaWVzIgorICAgICAgICAgICAgICAgIGRhdGEtY29udGVudD0iPHVsIGNsYXNzPSd1bnN0eWxlZCc+CisgICAgICAgICAgICAgICAgICB7JSBmb3IgaSBpbiByZXZzfGRpY3Rzb3J0OiJyZWNpcGUubmFtZSIgJX0KKyAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9J3slIHVybCAicmVjaXBlIiBidWlsZC5wayBpLnJlY2lwZS5wayAlfSc+e3tpLnJlY2lwZS5uYW1lfX08L2E+PC9saT4KKyAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgIDwvdWw+Ij4KKyAgICAgICAgICAgICAgICB7e2NvdW50fX0KKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgIDwvdGQ+CisgICAgICAgIDwhLS0gUmVjaXBlIGZpbGUgLS0+CisgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX2ZpbGUiPnt7cmVjaXBlLmZpbGVfcGF0aH19IHslIGlmIHJlY2lwZS5wYXRoZmxhZ3MgJX08aT4oe3tyZWNpcGUucGF0aGZsYWdzfX0pPC9pPnslIGVuZGlmICV9PC90ZD4KKyAgICAgICAgPCEtLSBTZWN0aW9uIC0tPgorICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9zZWN0aW9uIj57e3JlY2lwZS5zZWN0aW9ufX08L3RkPgorICAgICAgICA8IS0tIExpY2Vuc2UgLS0+CisgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX2xpY2Vuc2UiPnt7cmVjaXBlLmxpY2Vuc2V9fTwvdGQ+CisgICAgICAgIDwhLS0gTGF5ZXIgLS0+CisgICAgICAgIDx0ZCBjbGFzcz0ibGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiPnt7cmVjaXBlLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZX19PC90ZD4KKyAgICAgICAgPCEtLSBMYXllciBicmFuY2ggLS0+CisgICAgICAgIDx0ZCBjbGFzcz0ibGF5ZXJfdmVyc2lvbl9fYnJhbmNoIj57e3JlY2lwZS5sYXllcl92ZXJzaW9uLmJyYW5jaH19PC90ZD4KKyAgICAgICAgPCEtLSBMYXllciBjb21taXQgLS0+CisgICAgICAgIDx0ZCBjbGFzcz0ibGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX2NvbW1pdCI+CisgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIgorICAgICAgICAgICAgICAgIGRhdGEtY29udGVudD0iPHVsIGNsYXNzPSd1bnN0eWxlZCc+CisgICAgICAgICAgICAgICAgICA8bGk+e3tyZWNpcGUubGF5ZXJfdmVyc2lvbi5jb21taXR9fTwvbGk+CisgICAgICAgICAgICAgICAgPC91bD4iPgorICAgICAgICAgICAgICAgIHt7cmVjaXBlLmxheWVyX3ZlcnNpb24uY29tbWl0fHRydW5jYXRlY2hhcnM6MTN9fQorICAgICAgICAgICAgPC9hPgorICAgICAgICA8L3RkPgorICAgIDwvdHI+CisKKyAgICB7JSBlbmRmb3IgJX0KKworeyUgaW5jbHVkZSAiYmFzZXRhYmxlX2JvdHRvbS5odG1sIiAlfQoreyUgZW5kaWYgJX0KKzwvZGl2PgoreyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90YWJsZXNvcnQuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90YWJsZXNvcnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjI0NzQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RhYmxlc29ydC5odG1sCkBAIC0wLDAgKzEsMzggQEAKK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KKzwhLS0gY29tcG9uZW50IHRvIGRpc3BsYXkgYSBnZW5lcmljIHRhYmxlIC0tPgorICAgIHslIGlmIGRpc2FibGVfc29ydCAlfQorICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIiIGlkPSJkZXRhaWxfdGFibGUiPgorICAgIDx0aGVhZD4KKyAgICAgICAgPHRyPgorICAgICAgICAgICAgeyUgZm9yIHRjIGluIHRhYmxlY29scyAlfQorICAgICAgICAgICAgPHRoIGNsYXNzPSJ7JWlmIHRjLmRjbGFzcyV9e3t0Yy5kY2xhc3N9fXslZW5kaWYlfSB7JWlmIHRjLmNsY2xhc3MlfXt7dGMuY2xjbGFzc319eyVlbmRpZiV9Ij4KKyAgICAgICAgICAgICAgICB7JWlmIHRjLnFoZWxwJX08aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0ie3t0Yy5xaGVscH19Ij48L2k+eyVlbmRpZiV9CisgICAgICAgICAgICAgICAge3t0Yy5uYW1lfX0KKyAgICAgICAgICAgIDwvdGg+CisgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgPC90cj4KKyAgICA8L3RoZWFkPgorICAgIHslIGVsc2UgJX0KKyAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlc29ydGVyIiBpZD0ib3RhYmxlIj4KKyAgICA8dGhlYWQ+CisgICAgICAgIDwhLS0gVGFibGUgaGVhZGVyIHJvdzsgZ2VuZXJhdGVkIGZyb20gInRhYmxlY29scyIgZW50cnkgaW4gdGhlIGNvbnRleHQgZGljdCAtLT4KKyAgICAgICAgPHRyPgorICAgICAgICAgICAgeyUgZm9yIHRjIGluIHRhYmxlY29scyAlfQorICAgICAgICAgICAgPHRoIGNsYXNzPSJ7JWlmIHRjLmRjbGFzcyV9e3t0Yy5kY2xhc3N9fXslZW5kaWYlfSB7JWlmIHRjLmNsY2xhc3MlfXt7dGMuY2xjbGFzc319eyVlbmRpZiV9Ij4KKyAgICAgICAgICAgICAgICB7JWlmIHRjLnFoZWxwJX08aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0ie3t0Yy5xaGVscH19Ij48L2k+eyVlbmRpZiV9CisgICAgICAgICAgICAgICAgeyVpZiB0Yy5vcmRlcmZpZWxkJX0KKyAgICAgICAgICAgICAgICAgICAgPGEgeyVpZiB0Yy5vcmRlcmljb24lfSBjbGFzcz0ic29ydGVkIiB7JWVuZGlmJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9ImphdmFzY3JpcHQ6cmVsb2FkX3BhcmFtcyh7J3BhZ2UnOiAxLCAnb3JkZXJieScgOiAne3t0Yy5vcmRlcmZpZWxkfX0nIH0pIiA+CisgICAgICAgICAgICAgICAgICAgICAgICB7e3RjLm5hbWV9fQorICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgeyVlbHNlJX0KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im11dGVkIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIHt7dGMubmFtZX19CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICB7JWVuZGlmJX0KKyAgICAgICAgICAgICAgICB7JWlmIHRjLm9yZGVyaWNvbiV9IDxpIGNsYXNzPSJpY29uLWNhcmV0LXt7dGMub3JkZXJpY29ufX0iPjwvaT57JWVuZGlmJX0KKyAgICAgICAgICAgIDwvdGg+CisgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgPC90cj4KKyAgICA8L3RoZWFkPgorICAgIHslIGVuZGlmICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdGFyZ2V0Lmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdGFyZ2V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVlNmM0YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90YXJnZXQuaHRtbApAQCAtMCwwICsxLDE2MiBAQAoreyUgZXh0ZW5kcyAiYmFzZWJ1aWxkcGFnZS5odG1sIiAlfQoreyUgYmxvY2sgbG9jYWxicmVhZGNydW1iICV9Cis8bGk+e3t0YXJnZXQudGFyZ2V0fX08L2xpPgoreyUgZW5kYmxvY2sgbG9jYWxicmVhZGNydW1iJX0KKworeyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCit7JSBibG9jayBuYXYtdGFyZ2V0ICV9CisgIHslIGZvciB0IGluIGJ1aWxkLmdldF9zb3J0ZWRfdGFyZ2V0X2xpc3QgJX0KKyAgICB7JSBpZmVxdWFsIHRhcmdldC5wayB0LnBrICV9CisgICAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+PGEgaHJlZj0ieyUgdXJsICd0YXJnZXQnIGJ1aWxkLnBrIHQucGsgJX0iPnt7dC50YXJnZXR9fTwvYT48bGk+CisgICAgeyUgZWxzZSAlfQorICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAndGFyZ2V0JyBidWlsZC5wayB0LnBrICV9Ij57e3QudGFyZ2V0fX08L2E+PGxpPgorICAgIHslIGVuZGlmZXF1YWwgJX0KKyAgeyUgZW5kZm9yICV9Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBidWlsZGluZm9tYWluICV9CisKKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBzcGFuMTAiPgorICAgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgICAgICAgPGgxPgorICAgICAgICAgICAgeyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+IDAgJX0KKyAgICAgICAgICAgICAgICB7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fX0gcGFja2FnZXt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR8cGx1cmFsaXplfX0gZm91bmQKKyAgICAgICAgICAgIHslIGVsaWYgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgICAgICAgICAgICAgICAgTm8gcGFja2FnZXMgZm91bmQKKyAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICB7e3RhcmdldC50YXJnZXR9fQorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgPC9oMT4KKyAgICA8L2Rpdj4KKzwvZGl2PgorCis8ZGl2IGNsYXNzPSJyb3ctZmx1aWQgcHVsbC1yaWdodCBzcGFuMTAiIGlkPSJuYXZUYWIiPgorICAgIDx1bCBjbGFzcz0ibmF2IG5hdi1waWxscyI+CisgICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj4KKyAgICAgICAgICAgIDxhIGhyZWY9IiN0YXJnZXQiPgorICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9Ik9mIGFsbCB0aGUgcGFja2FnZXMgYnVpbHQsIHRoZSBzdWJzZXQgaW5zdGFsbGVkIGluIHRoZSByb290IGZpbGUgc3lzdGVtIG9mIHRoaXMgaW1hZ2UiPjwvaT4KKyAgICAgICAgICAgICAgICBQYWNrYWdlcyBpbmNsdWRlZCAoe3t0YXJnZXQucGFja2FnZV9jb3VudH19IC0ge3twYWNrYWdlc19zdW18ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fSkKKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgICAgPGxpPgorICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdkaXJpbmZvJyBidWlsZC5pZCB0YXJnZXQuaWQgJX0iPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGluIHRoZSByb290IGZpbGUgc3lzdGVtIG9mIHRoaXMgaW1hZ2UiPjwvaT4KKyAgICAgICAgICAgICAgICBEaXJlY3Rvcnkgc3RydWN0dXJlCisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvbGk+CisgICAgPC91bD4KKworICAgIDxkaXYgaWQ9ImltYWdlLXBhY2thZ2VzIiBjbGFzcz0idGFiLXBhbmUiPgorCisgICAgeyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0Ij4KKyAgICAgICAgICAgIDxmb3JtIGNsYXNzPSJuby1yZXN1bHRzIGlucHV0LWFwcGVuZCIgaWQ9InNlYXJjaGZvcm0iPgorICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0ic2VhcmNoIiBuYW1lPSJzZWFyY2giIGNsYXNzPSJpbnB1dC14eGxhcmdlIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ieyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9e3tyZXF1ZXN0LkdFVC5zZWFyY2h9fXslIGVuZGlmICV9Ii8+eyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9PGEgaHJlZj0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIiBjbGFzcz0iYWRkLW9uIGJ0biIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iaWNvbi1yZW1vdmUiPjwvaT48L2E+eyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlYXJjaCI+U2VhcmNoPC9idXR0b24+CisgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1saW5rIiBvbmNsaWNrPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiPlNob3cgYWxsIHBhY2thZ2VzPC9idXR0b24+CisgICAgICAgICAgICA8L2Zvcm0+CisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorCisKKyAgICB7JSBlbHNlICV9CisgICAgeyUgaW5jbHVkZSAiYmFzZXRhYmxlX3RvcC5odG1sIiAlfQorICAgIHslIGZvciBwYWNrYWdlIGluIG9iamVjdHMgJX0KKyAgICA8dHI+CisgICAgICB7IyBvcmRlciBvZiB0aGUgdGFibGUgZGF0YSBtdXN0IG1hdGNoIHRoZSBjb2x1bW5zIGRlZmluZWQgaW4gdGVtcGxhdGUncyBjb250ZXh0IHRhYmxlY29scyAgI30KKyAgICAgICAgPHRkIGNsYXNzPSJwYWNrYWdlX25hbWUiPgorICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdwYWNrYWdlX2luY2x1ZGVkX2RldGFpbCcgYnVpbGQuaWQgdGFyZ2V0LmlkIHBhY2thZ2UuaWQgJX0iPgorICAgICAgICAgICAge3twYWNrYWdlLm5hbWV9fQorICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgeyUgaWYgcGFja2FnZS5pbnN0YWxsZWRfbmFtZSBhbmQgcGFja2FnZS5uYW1lICE9IHBhY2thZ2UuaW5zdGFsbGVkX25hbWUgJX0KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdXRlZCI+IGFzIHt7cGFja2FnZS5pbnN0YWxsZWRfbmFtZX19PC9zcGFuPgorICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIiB0aXRsZT0ne3twYWNrYWdlLm5hbWV8YWRkOiIgd2FzIHJlbmFtZWQgYXQgcGFja2FnaW5nIHRpbWUgYW5kIHdhcyBpbnN0YWxsZWQgaW4geW91ciBpbWFnZSBhcyAifGFkZDpwYWNrYWdlLmluc3RhbGxlZF9uYW1lfX0nPjwvaT4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIDwvdGQ+CisgICAgICAgIDx0ZCBjbGFzcz0icGFja2FnZV92ZXJzaW9uIj4KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9pbmNsdWRlZF9kZXRhaWwnIGJ1aWxkLmlkIHRhcmdldC5pZCBwYWNrYWdlLmlkICV9Ij4KKyAgICAgICAgICAgIHt7cGFja2FnZS52ZXJzaW9ufGZpbHRlcmVkX3BhY2thZ2V2ZXJzaW9uOnBhY2thZ2UucmV2aXNpb259fQorICAgICAgICAgICAgPC9hPgorICAgICAgICA8L3RkPgorICAgICAgICA8dGQgY2xhc3M9ImxpY2Vuc2UiPgorICAgICAgICAgICAge3twYWNrYWdlLmxpY2Vuc2V9fQorICAgICAgICA8L3RkPgorICAgICAgICA8dGQgY2xhc3M9InNpemUgc2l6ZWNvbCI+CisgICAgICAgICAgICB7e3BhY2thZ2Uuc2l6ZXxmaWx0ZXJlZF9pbnN0YWxsZWRzaXplOnBhY2thZ2UuaW5zdGFsbGVkX3NpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fQorICAgICAgICA8L3RkPgorCisgICAgICAgIDx0ZCBjbGFzcz0ic2l6ZV9vdmVyX3RvdGFsIHNpemVjb2wiPgorICAgICAgICAgICAge3twYWNrYWdlfGZpbHRlcl9zaXplb3ZlcnRvdGFsOnBhY2thZ2VzX3N1bX19CisgICAgICAgIDwvdGQ+CisgICAgICAgPHRkIGNsYXNzPSJkZXBlbmRzIj4KKyAgICAgICAgICAgIHslIHdpdGggZGVwcz1wYWNrYWdlLnJ1bnRpbWVfZGVwZW5kZW5jaWVzICV9CisgICAgICAgICAgICB7JSB3aXRoIGRlcHNfY291bnQ9ZGVwc3xsZW5ndGggJX0KKyAgICAgICAgICAgIHslIGlmIGRlcHNfY291bnQgPiAwICV9CisgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIgorICAgICAgICAgICAgICAgIHRpdGxlPSI8YSBocmVmPSd7JSB1cmwgInBhY2thZ2VfaW5jbHVkZWRfZGVwZW5kZW5jaWVzIiBidWlsZC5pZCB0YXJnZXQuaWQgcGFja2FnZS5pZCAlfSc+e3twYWNrYWdlLm5hbWV9fTwvYT4gZGVwZW5kZW5jaWVzIgorICAgICAgICAgICAgICAgIGRhdGEtY29udGVudD0iPHVsIGNsYXNzPSd1bnN0eWxlZCc+CisgICAgICAgICAgICAgICAgICB7JSBmb3IgaSBpbiBkZXBzfGRpY3Rzb3J0OidkZXBlbmRzX29uLm5hbWUnICV9CisgICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSd7JSB1cmwgInBhY2thZ2VfaW5jbHVkZWRfZGV0YWlsIiBidWlsZC5wayB0YXJnZXQuaWQgaS5kZXBlbmRzX29uLnBrICV9Jz57e2kuZGVwZW5kc19vbi5uYW1lfX08L2E+PC9saT4KKyAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgIDwvdWw+Ij4KKyAgICAgICAgICAgICAgICB7e2RlcHNfY291bnR9fQorICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPHRkIGNsYXNzPSJicm91Z2h0X2luX2J5Ij4KKyAgICAgICAgICAgIHslIHdpdGggcmRlcHM9cGFja2FnZS5yZXZlcnNlX3J1bnRpbWVfZGVwZW5kZW5jaWVzICV9CisgICAgICAgICAgICB7JSB3aXRoIHJkZXBzX2NvdW50PXJkZXBzfGxlbmd0aCAlfQorICAgICAgICAgICAgeyUgaWYgcmRlcHNfY291bnQgPiAwICV9CisgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIgorICAgICAgICAgICAgICAgIHRpdGxlPSI8YSBocmVmPSd7JSB1cmwgInBhY2thZ2VfaW5jbHVkZWRfcmV2ZXJzZV9kZXBlbmRlbmNpZXMiIGJ1aWxkLmlkIHRhcmdldC5pZCBwYWNrYWdlLmlkICV9Jz57e3BhY2thZ2UubmFtZX19PC9hPiByZXZlcnNlIGRlcGVuZGVuY2llcyIKKyAgICAgICAgICAgICAgICBkYXRhLWNvbnRlbnQ9Ijx1bCBjbGFzcz0ndW5zdHlsZWQnPgorICAgICAgICAgICAgICAgICAgeyUgZm9yIGkgaW4gcmRlcHN8ZGljdHNvcnQ6J3BhY2thZ2UubmFtZScgJX0KKyAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9J3slIHVybCAicGFja2FnZV9pbmNsdWRlZF9kZXRhaWwiIGJ1aWxkLmlkIHRhcmdldC5pZCBpLnBhY2thZ2UuaWQgJX0nPnt7aS5wYWNrYWdlLm5hbWV9fTwvYT48L2xpPgorICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgPC91bD4iPgorICAgICAgICAgICAgICAgIHt7cmRlcHNfY291bnR9fQorICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfbmFtZSI+CisgICAgICAgICAgICB7JSBpZiBwYWNrYWdlLnJlY2lwZS52ZXJzaW9uICV9CisgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3JlY2lwZScgYnVpbGQuaWQgcGFja2FnZS5yZWNpcGVfaWQgJX0iPgorICAgICAgICAgICAge3sgcGFja2FnZS5yZWNpcGUubmFtZSB9fQorICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfdmVyc2lvbiI+CisgICAgICAgICAgICB7JSBpZiBwYWNrYWdlLnJlY2lwZS52ZXJzaW9uICV9CisgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3JlY2lwZScgYnVpbGQuaWQgcGFja2FnZS5yZWNpcGVfaWQgJX0iPgorICAgICAgICAgICAge3sgcGFja2FnZS5yZWNpcGUudmVyc2lvbiB9fQorICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPHRkIGNsYXNzPSJsYXllcl9uYW1lIj4KKyAgICAgICAgICAgIHt7IHBhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZSB9fQorICAgICAgICA8L3RkPgorICAgICAgICA8dGQgY2xhc3M9ImxheWVyX2JyYW5jaCI+CisgICAgICAgICAgICB7eyBwYWNrYWdlLnJlY2lwZS5sYXllcl92ZXJzaW9uLmJyYW5jaH19CisgICAgICAgIDwvdGQ+CisgICAgICAgIDx0ZCBjbGFzcz0ibGF5ZXJfY29tbWl0Ij4KKyAgICAgICAgICAgIDxhIGNsYXNzPSJidG4iCisgICAgICAgICAgICAgICAgZGF0YS1jb250ZW50PSI8dWwgY2xhc3M9J3Vuc3R5bGVkJz4KKyAgICAgICAgICAgICAgICAgIDxsaT57e3BhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24uY29tbWl0fX08L2xpPgorICAgICAgICAgICAgICAgIDwvdWw+Ij4KKyAgICAgICAgICAgICAgICB7e3BhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24uY29tbWl0fHRydW5jYXRlY2hhcnM6MTN9fQorICAgICAgICAgICAgPC9hPgorICAgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgeyUgZW5kZm9yICV9CisKKyAgICB7JSBpbmNsdWRlICJiYXNldGFibGVfYm90dG9tLmh0bWwiICV9CisgICAgeyUgZW5kaWYgJX0KKyAgICA8L2Rpdj4gPCEtLSB0YWJwYW5lIC0tPgorPC9kaXY+IDwhLS1zcGFuIDEwLS0+Cit7JSBlbmRibG9jayBidWlsZGluZm9tYWluICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdGFzay5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Rhc2suaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzUwOThhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Rhc2suaHRtbApAQCAtMCwwICsxLDI2OSBAQAoreyUgZXh0ZW5kcyAiYmFzZWJ1aWxkZGV0YWlscGFnZS5odG1sIiAlfQorCit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9CisKK3slIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfQorPGxpPjxhIGhyZWY9InslIHVybCAndGFza3MnIGJ1aWxkLnBrICV9Ij5UYXNrczwvYT48L2xpPgorPGxpPnt7dGFzay5yZWNpcGUubmFtZX19X3t7dGFzay5yZWNpcGUudmVyc2lvbn19IHt7dGFzay50YXNrX25hbWV9fTwvbGk+Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBwYWdlZGV0YWlsaW5mb21haW4gJX0KKworPGRpdiBjbGFzcz0icm93IHNwYW4xMSI+CisgICAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICAgICAgICA8aDE+PGEgaHJlZj0ieyV1cmwgJ3JlY2lwZScgYnVpbGQucGsgdGFzay5yZWNpcGUucGsgJX0iPnt7dGFzay5yZWNpcGUubmFtZX19X3t7dGFzay5yZWNpcGUudmVyc2lvbn19PC9hPiB7e3Rhc2sudGFza19uYW1lfX08L2gxPgorICAgIDwvZGl2PgorCit7IyBPdXRjb21lIHNlY3Rpb24gI30KKzxoMiB7eyB0YXNrfHRhc2tfY29sb3I6VHJ1ZSB9fT4KKyAgICB7e3Rhc2suZ2V0X291dGNvbWVfZGlzcGxheX19CisgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBoZWFkaW5nLWhlbHAiIHRpdGxlPSJ7e3Rhc2suZ2V0X291dGNvbWVfaGVscH19Ij48L2k+Cis8L2gyPgoreyVpZiB0YXNrLnRhc2tfZXhlY3V0ZWQgJX0KKyAgICB7IyBleGVjdXRlZCB0YXNrcyBvdXRjb21lICN9CisgICAgeyUgaWYgdGFzay5sb2dmaWxlICV9CisgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi1sYXJnZSIgaHJlZj0ieyUgdXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQuaWQgInRhc2tsb2dmaWxlIiB0YXNrLnBrICV9IiBzdHlsZT0ibWFyZ2luOjE1cHg7Ij5Eb3dubG9hZCB0YXNrIGxvZzwvYT4KKyAgICB7JSBlbmRpZiAlfQorICAgICAgICB7IyBzaG93IHN0YWNrIHRyYWNlIGZvciBmYWlsZWQgdGFzayAjfQorICAgICAgICB7JSBpZiB0YXNrLm91dGNvbWUgPT0gdGFzay5PVVRDT01FX0ZBSUxFRCBhbmQgbG9nX2hlYWQgJX0KKyAgICAgICAgICAgIDxoMz5QeXRob24gc3RhY2sgdHJhY2U8L2gzPgorICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPSJtaW4taGVpZ2h0OjE2MHB4OyI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPnt7bG9nX2hlYWR9fTwvY29kZT48YSBpZD0iZnVsbC10cmFjZS1zaG93IiBkYXRhLXRhcmdldD0iI2Z1bGx0cmFjZSIgZGF0YS10b2dnbGU9ImNvbGxhcHNlIiBjbGFzcz0iYnRuIGJ0bi1taW5pIj4uLi48L2E+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImZ1bGx0cmFjZSIgY2xhc3M9ImNvbGxhcHNlIiBzdHlsZT0ibWFyZ2luLXRvcDogLTIwcHg7IGhlaWdodDogMHB4OyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT57e2xvZ19ib2R5fX08L2NvZGU+PGJyPjxhIGlkPSJmdWxsLXRyYWNlLWhpZGUiIGNsYXNzPSJidG4gYnRuLW1pbmkgY29sbGFwc2VkIiBzdHlsZT0iZm9udC1mYW1pbHk6SGVsdmV0aWNhIE5ldWUiIGRhdGEtdGFyZ2V0PSIjZnVsbHRyYWNlIiBkYXRhLXRvZ2dsZT0iY29sbGFwc2UiPkNvbGxhcHNlIHN0YWNrIHRyYWNlPGkgY2xhc3M9Imljb24tY2FyZXQtdXAiPjwvaT48L2E+PC9kaXY+PC9wcmU+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgeyUgZW5kaWYgJX0KK3slIGVsc2UgJX0KK3sjIG5vdCBleGVjdXRlZCB0YXNrcyBvdXRjb21lICN9CisgICAgeyUgaWYgdGFzay5vdXRjb21lID09IHRhc2suT1VUQ09NRV9QUkVCVUlMVCAlfQorICAgICAgICB7JSBpZiBub3Qgc2hvd2luZ19tYXRjaGVzICV9CisgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIiBocmVmPSJqYXZhc2NyaXB0OnJlbG9hZF9wYXJhbXMoeydzaG93X21hdGNoZXMnIDogJ3RydWUnIH0pIj5NYXRjaCB0byB0YXNrcyBpbiBwcmV2aW91cyBidWlsZHMgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgc3R5bGU9Im1hcmdpbi10b3A6MjBweDsiIHRpdGxlPSJUaGlzIHNob3dzIHlvdSBhIGxpc3Qgb2YgdGFza3MgZnJvbSBwcmV2aW91cyBidWlsZHMgd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUgZ2VuZXJhdGVkIGZyb20gdGhlIHNhbWUgaW5wdXRzIGFzIHVzZWQgaW4gdGhlIHByZWJ1aWx0IHRhc2suIEFueSBvZiB0aGVtIGNvdWxkIGJlIHRoZSB0YXNrIHRoYXQgZ2VuZXJhdGVkIHRoZSBvdXRwdXQgdGhpcyBwcmVidWlsdCB0YXNrIGlzIHJldXNpbmciPjwvaT48L2E+CisgICAgICAgIHslIGVsaWYgbWF0Y2hpbmdfdGFza3MgJX0KKyAgICAgICAgICAgIDxoMyBjbGFzcz0iZGV0YWlscyI+UHJlYnVpbHQgdGFzayBjb3VsZCBiZSBiYXNlZCBvbgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaGVhZGluZy1oZWxwIiB0aXRsZT0iVGhpcyB0YWJsZSBzaG93cyBhIGxpc3Qgb2YgdGFza3MgZnJvbSBwcmV2aW91cyBidWlsZHMgd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUgZ2VuZXJhdGVkIGZyb20gdGhlIHNhbWUgaW5wdXRzIGFzIHVzZWQgaW4gdGhlIHByZWJ1aWx0IHRhc2suIEFueSBvZiB0aGVtIGNvdWxkIGJlIHRoZSB0YXNrIHRoYXQgZ2VuZXJhdGVkIHRoZSBvdXRwdXQgdGhpcyBwcmVidWlsdCB0YXNrIGlzIHJldXNpbmciPjwvaT4KKyAgICAgICAgICAgIDwvaDM+CisgICAgICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIj4KKyAgICAgICAgICAgICAgICA8dGhlYWQ+CisgICAgICAgICAgICAgICAgICAgIDx0aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbmFtZSBvZiB0aGUgcmVjaXBlIHRvIHdoaWNoIGVhY2ggdGFzayBhcHBsaWVzIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICBSZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBuYW1lIG9mIHRoZSB0YXNrIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICBUYXNrCisgICAgICAgICAgICAgICAgICAgIDwvdGg+CisgICAgICAgICAgICAgICAgICAgIDx0aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGlzIHZhbHVlIHRlbGxzIHlvdSBpZiBhIHRhc2sgaGFkIHRvIHJ1biAoZXhlY3V0ZWQpIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSB0YXNrIG91dHB1dCwgb3IgaWYgdGhlIG91dHB1dCB3YXMgcHJvdmlkZWQgYnkgYW5vdGhlciB0YXNrIGFuZCB0aGVyZWZvcmUgdGhlIHRhc2sgZGlkbid0IG5lZWQgdG8gcnVuIChub3QgZXhlY3V0ZWQpIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICBFeGVjdXRlZAorICAgICAgICAgICAgICAgICAgICA8L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhpcyBjb2x1bW4gdGVsbHMgeW91IGlmICdleGVjdXRlZCcgdGFza3Mgc3VjY2VlZGVkIG9yIGZhaWxlZC4gVGhlIGNvbHVtbiBhbHNvIHRlbGxzIHlvdSB3aHkgJ25vdCBleGVjdXRlZCcgdGFza3MgZGlkIG5vdCBuZWVkIHRvIHJ1biI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgT3V0Y29tZQorICAgICAgICAgICAgICAgICAgICA8L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIGRhdGUgYW5kIHRpbWUgdGhlIGJ1aWxkIGZpbmlzaGVkIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBjb21wbGV0ZWQgb24KKyAgICAgICAgICAgICAgICAgICAgPC90aD4KKyAgICAgICAgICAgICAgICA8L3RoZWFkPgorICAgICAgICAgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgICAgICAgICAgeyUgZm9yIG1hdGNoIGluIG1hdGNoaW5nX3Rhc2tzICV9CisgICAgICAgICAgICAgICAgICAgICAgICA8dHIge3sgbWF0Y2h8dGFza19jb2xvciB9fT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InsldXJsICJ0YXNrIiBtYXRjaC5idWlsZC5wayBtYXRjaC5wayV9Ij57e21hdGNoLnJlY2lwZS5uYW1lfX08L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InsldXJsICJ0YXNrIiBtYXRjaC5idWlsZC5wayBtYXRjaC5wayV9Ij57e21hdGNoLnRhc2tfbmFtZX19PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiB0YXNrLmdldF9kZXNjcmlwdGlvbiAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIiB0aXRsZT0ie3t0YXNrLmdldF9kZXNjcmlwdGlvbn19Ij48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InsldXJsICJ0YXNrIiBtYXRjaC5idWlsZC5wayBtYXRjaC5wayV9Ij57e21hdGNoLmdldF9leGVjdXRlZF9kaXNwbGF5fX08L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InsldXJsICJ0YXNrIiBtYXRjaC5idWlsZC5wayBtYXRjaC5wayV9Ij57e21hdGNoLmdldF9vdXRjb21lX2Rpc3BsYXl9fSA8L2E+PGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIiB0aXRsZT0ie3ttYXRjaC5nZXRfb3V0Y29tZV9oZWxwfX0iPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgInRhc2siIG1hdGNoLmJ1aWxkLnBrIG1hdGNoLnBrJX0iPnt7bWF0Y2guYnVpbGQuY29tcGxldGVkX29ufGRhdGU6ImQvbS95IEg6aSJ9fTwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgIDxwIGNsYXNzPSJhbGVydCI+CisgICAgICAgICAgICAgICAgPHN0cm9uZz4gV2UgaGF2ZSBmb3VuZCBubyB0YXNrcyBtYXRjaGluZyB0aGlzIHByZWJ1aWx0IHRhc2s8L3N0cm9uZz48YnIvPgorICAgICAgICAgICAgICAgIFRoZSB0YXNrIHlvdSBhcmUgbG9va2luZyBmb3IgY291bGQgYmVsb25nIHRvIGEgYnVpbGQgZm9yIHdoaWNoIFRvYXN0ZXIgaGFzIG5vIGRhdGEuCisgICAgICAgICAgICA8L3A+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgeyUgZWxpZiB0YXNrLm91dGNvbWUgPT0gdGFzay5PVVRDT01FX0NPVkVSRUQgJX0KKyAgICAgICAgPGRsIGNsYXNzPSJkbC1ob3Jpem9udGFsIj4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHRhc2socykgcHJvdmlkaW5nIHRoZSBvdXRjb21lIG9mIHRoaXMgdGFzayI+PC9pPiBUYXNrIGNvdmVyZWQgYnkKKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPHVsPgorICAgICAgICAgICAgICAgICAgeyUgZm9yIHQgaW4gY292ZXJlZF9ieSAlfQorICAgICAgICAgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgJ3Rhc2snIHQuYnVpbGQucGsgdC5wayV9IgorICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0YXNrLWluZm8iCisgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0ie3t0LmdldF9leGVjdXRlZF9kaXNwbGF5fX0gfCB7e3QuZ2V0X291dGNvbWVfZGlzcGxheX19Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIHt7dC5yZWNpcGUubmFtZX19X3t7dC5yZWNpcGUudmVyc2lvbn19CisgICAgICAgICAgICAgICAgICAgICAgICB7e3QudGFza19uYW1lfX0KKyAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgPC9kbD4KKyAgICB7JWVsaWYgdGFzay5vdXRjb21lID09IHRhc2suT1VUQ09NRV9DQUNIRUQlfQorICAgICAgICAgICAgeyUgZm9yIHQgaW4gdGFzay5nZXRfcmVsYXRlZF9zZXRzY2VuZSAlfQorICAgICAgICAgICAgICAgIHslIGlmIGZvcmxvb3AubGFzdCAlfQorICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi1sYXJnZSIgaHJlZj0ieyUgdXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQuaWQgInRhc2tsb2dmaWxlIiB0LnBrICV9IiBzdHlsZT0ibWFyZ2luOjE1cHg7Ij5Eb3dubG9hZCB0YXNrIGxvZzwvYT4KKyAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgeyUgZW5kZm9yICV9CisKKyAgICB7JWVsaWYgdGFzay5vdXRjb21lID09IHRhc2suT1VUQ09NRV9FTVBUWSV9CisgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8gZGV0YWlscyI+CisgICAgICAgICAgICBUaGlzIHRhc2sgaXMgZW1wdHkgYmVjYXVzZSBpdCBoYXMgdGhlIDxjb2RlPm5vZXhlYzwvY29kZT4gZmxhZyBzZXQgdG8gPGNvZGU+MTwvY29kZT4sIG9yIHRoZSB0YXNrIGZ1bmN0aW9uIGlzIGVtcHR5CisgICAgICAgIDwvZGl2PgorICAgIHslIGVuZGlmICV9Cit7JSBlbmRpZiAlfQorCit7IyBFeGVjdXRpb24gc2VjdGlvbiAjfQorICAgIHslIGlmIHRhc2sudGFza19leGVjdXRlZCAlfQorICAgIDxoMj4KKyAgICAgICAgRXhlY3V0ZWQKKyAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBoZWFkaW5nLWhlbHAiIHRpdGxlPSInRXhlY3V0ZWQnIHRhc2tzIGFyZSB0aG9zZSB0aGF0IG5lZWQgdG8gcnVuIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSB0YXNrIG91dHB1dCI+PC9pPgorICAgIHslIGVsc2UgJX0KKyAgICA8aDIgY2xhc3M9Im11dGVkIj4KKyAgICAgICAgTm90IEV4ZWN1dGVkCisgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaGVhZGluZy1oZWxwIiB0aXRsZT0iJ05vdCBleGVjdXRlZCcgdGFza3MgZG9uJ3QgbmVlZCB0byBydW4gYmVjYXVzZSB0aGVpciBvdXRjb21lIGlzIHByb3ZpZGVkIGJ5IGFub3RoZXIgdGFzayI+PC9pPgorICAgIHslIGVuZGlmICV9CisgICAgPC9oMj4KKworPGRsIGNsYXNzPSJkbC1ob3Jpem9udGFsIj4KKyAgICA8ZHQ+CisgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUbyBtYWtlIGJ1aWxkcyBtb3JlIGVmZmljaWVudCwgdGhlIGJ1aWxkIHN5c3RlbSBkZXRlY3RzIGNoYW5nZXMgaW4gdGhlICdpbnB1dHMnIHRvIGEgZ2l2ZW4gdGFzayBieSBjcmVhdGluZyBhICd0YXNrIHNpZ25hdHVyZScuIElmIHRoZSBzaWduYXR1cmUgY2hhbmdlcywgdGhlIGJ1aWxkIHN5c3RlbSBhc3N1bWVzIHRoZSBpbnB1dHMgaGF2ZSBjaGFuZ2VkIGFuZCB0aGUgdGFzayBuZWVkcyB0byBiZSByZXJ1biI+PC9pPgorICAgICAgICBUYXNrIGlucHV0cyBzaWduYXR1cmUKKyAgICA8L2R0PgorICAgIDxkZD4KKyAgICAgICAge3t0YXNrLnNzdGF0ZV9jaGVja3N1bX19CisgICAgPC9kZD4KKzwvZGw+CisgICAgeyUgaWYgdGFzay5zc3RhdGVfcmVzdWx0ICE9IHRhc2suU1NUQVRFX05BICV9CisgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPkF0dGVtcHRpbmcgdG8gcmVzdG9yZSBvdXRwdXQgZnJvbSBzc3RhdGUgY2FjaGUKKyAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgZ2V0LWhlbHAtYmx1ZSIgdGl0bGU9IlRoZSBidWlsZCBzeXN0ZW0gaXMgc2VhcmNoaW5nIGZvciB0aGUgdGFzayBvdXRwdXQgaW4geW91ciA8Y29kZT5zc3RhdGUtY2FjaGU8L2NvZGU+IGRpcmVjdG9yeSBhbmQgbWlycm9ycy4gSWYgdGhlIGJ1aWxkIHN5c3RlbSBmaW5kcyB0aGUgdGFzayBvdXRwdXQsIGl0IHdpbGwgcmV1c2UgaXQgaW5zdGVhZCBvZiBidWlsZGluZyBpdCBmcm9tIHNjcmF0Y2ggYnkgcnVubmluZyB0aGUgcmVhbCB0YXNrLiBSZXVzaW5nIHRoZSB0YXNrIG91dHB1dCBtYWtlcyB0aGUgYnVpbGQgZmFzdGVyIj48L2k+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGwgY2xhc3M9ImRsLWhvcml6b250YWwiPgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbmFtZSBvZiB0aGUgZmlsZSBzZWFyY2hlZCBmb3IgaW4geW91ciA8Y29kZT5zc3RhdGUtY2FjaGU8L2NvZGU+IGRpcmVjdG9yeSBhbmQgbWlycm9ycyI+PC9pPgorICAgICAgICAgICAgICAgIEZpbGUgc2VhcmNoZWQgZm9yCisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPjxjb2RlPnt7dGFzay5wYXRoX3RvX3NzdGF0ZV9vYmp9fTwvY29kZT48L2RkPgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbG9jYXRpb25zIHNlYXJjaGVkIGZvciB0aGUgYWJvdmUgZmlsZSAoaS5lLiB5b3VyIDxjb2RlPnNzdGF0ZS1jYWNoZTwvY29kZT4gZGlyZWN0b3J5IGFuZCBhbnkgbWlycm9ycyB5b3UgaGF2ZSBzZXQgdXApIj48L2k+CisgICAgICAgICAgICAgICAgVVJJKHMpIHNlYXJjaGVkCisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPjx1bD57JSBmb3IgdXJpIGluIHVyaV9saXN0ICV9PGxpPjxjb2RlPnt7dXJpfX08L2NvZGU+PC9saT57JSBlbmRmb3IgJX08L3VsPjwvZGQ+CisgICAgICAgIDwvZGw+CisgICAgeyUgZW5kaWYgJX0KKyAgICB7JSBpZiB0YXNrLnNzdGF0ZV9yZXN1bHQgPT0gdGFzay5TU1RBVEVfTUlTUyAlfQorICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgIDxzdHJvbmc+RmlsZSBub3QgaW4gc3N0YXRlIGNhY2hlLjwvc3Ryb25nPiBSdW5uaW5nIHRoZSByZWFsIHRhc2sgaW5zdGVhZC4KKyAgICAgICAgPC9kaXY+CisgICAgeyUgZWxpZiB0YXNrLnNzdGF0ZV9yZXN1bHQgPT0gdGFzay5TU1RBVEVfRkFJTEVEJX0KKyAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQiPgorICAgICAgICAgICAgPHN0cm9uZz5GYWlsZWQ8L3N0cm9uZz4gdG8gcmVzdG9yZSBvdXRwdXQgZnJvbSBzc3RhdGUgY2FjaGUuIFRoZSBmaWxlIHdhcyBmb3VuZCBidXQgY291bGQgbm90IGJlIHVucGFja2VkLgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRsIGNsYXNzPSJkbC1ob3Jpem9udGFsIj4KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnYnVpbGRfYXJ0aWZhY3QnIGJ1aWxkLmlkICJ0YXNrbG9nZmlsZSIgdGFzay5wayAlfSIgc3R5bGU9Im1hcmdpbjoxNXB4OyI+RG93bmxvYWQgbG9nPC9hPgorICAgICAgICA8L2RsPgorICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgIFJ1bm5pbmcgdGhlIHJlYWwgdGFzayBpbnN0ZWFkLgorICAgICAgICA8L2Rpdj4KKyAgICB7JSBlbGlmIHRhc2suc3N0YXRlX3Jlc3VsdCA9PSB0YXNrLlNTVEFURV9SRVNUT1JFRCAlfQorICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgIE91dHB1dCA8c3Ryb25nPnN1Y2Nlc3NmdWxseSByZXN0b3JlZDwvc3Ryb25nPiBmcm9tIHNzdGF0ZSBjYWNoZS4KKyAgICAgICAgPC9kaXY+CisgICAgeyUgZW5kaWYgJX0KKyAgICA8ZGwgY2xhc3M9ImRsLWhvcml6b250YWwiPgorICAgIDxkdD4KKyAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBydW5uaW5nIHNlcXVlbmNlIG9mIGVhY2ggdGFzayBpbiB0aGUgYnVpbGQiPjwvaT4KKyAgICAgICAgVGFzayBvcmRlcgorICAgIDwvZHQ+CisgICAgPGRkPjxhIGhyZWY9InsldXJsICJ0YXNrc190YXNrIiBidWlsZC5wayB0YXNrLm9yZGVyICV9I3t7dGFzay5vcmRlcn19Ij57e3Rhc2sub3JkZXJ9fTwvYT48L2RkPgorICAgIHslIGlmIHRhc2sudGFza19leGVjdXRlZCAlfQorICAgICAgICA8ZHQ+CisgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iSW5kaWNhdGVzIGlmIHRoaXMgdGFzayBleGVjdXRlcyBhIFB5dGhvbiBvciBTaGVsbCBmdW5jdGlvbihzKSI+PC9pPgorICAgICAgICAgICAgVGFzayBzY3JpcHQgdHlwZQorICAgICAgICA8L2R0PgorICAgICAgICA8ZGQ+e3t0YXNrLmdldF9zY3JpcHRfdHlwZV9kaXNwbGF5fX08L2RkPgorICAgIHslIGVuZGlmICV9Cis8IS0tCisgICAgPGR0PgorICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIGNvZGUgZXhlY3V0ZWQgYnkgdGhlIHRhc2siPjwvaT4KKyAgICAgICAgVGFzayBleGVjdXRhYmxlIG91dHB1dAorICAgIDwvZHQ+CisgICAgPGRkPjxjb2RlPnt7dGFzay5zb3VyY2VfdXJsfX08L2NvZGU+PC9kZD4KKy0tPgorICAgIDxkdD4KKyAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRhc2sgZGVwZW5kZW5jeSBjaGFpbiAoaS5lLiBvdGhlciB0YXNrcykiPjwvaT4KKyAgICAgICAgRGVwZW5kZW5jaWVzCisgICAgPC9kdD4KKyAgICA8ZGQ+CisgICAgICAgIDx1bD4KKyAgICAgICAgICAgIHslIGZvciBkZXAgaW4gZGVwcyAlfQorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJ7JXVybCAndGFzaycgZGVwLmJ1aWxkLnBrIGRlcC5wayV9IiBjbGFzcz0idGFzay1pbmZvIiB0aXRsZT0ie3tkZXAuZ2V0X2V4ZWN1dGVkX2Rpc3BsYXl9fSB8IHt7ZGVwLmdldF9vdXRjb21lX2Rpc3BsYXl9fSI+e3tkZXAucmVjaXBlLm5hbWV9fV97e2RlcC5yZWNpcGUudmVyc2lvbn19IDxzcGFuIGNsYXNzPSJ0YXNrLW5hbWUiPnt7ZGVwLnRhc2tfbmFtZX19PC9zcGFuPjwvYT48L2xpPgorICAgICAgICAgICAgeyUgZW1wdHkgJX0KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Im11dGVkIj5UaGlzIHRhc2sgaGFzIG5vIGRlcGVuZGVuY2llczwvbGk+CisgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgPC91bD4KKyAgICA8L2RkPgorICAgIDxkdD4KKyAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRhc2tzIHRoYXQgZGVwZW5kIG9uIHRoaXMgdGFzayI+PC9pPgorICAgICAgICBSZXZlcnNlIGRlcGVuZGVuY2llcworICAgIDwvZHQ+CisgICAgPGRkPgorICAgICAgICA8dWw+CisgICAgICAgICAgICB7JSBmb3IgZGVwIGluIHJkZXBzICV9CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InsldXJsICd0YXNrJyBkZXAuYnVpbGQucGsgZGVwLnBrJX0iIGNsYXNzPSJ0YXNrLWluZm8iIHRpdGxlPSJ7e2RlcC5nZXRfZXhlY3V0ZWRfZGlzcGxheX19IHwge3tkZXAuZ2V0X291dGNvbWVfZGlzcGxheX19Ij57e2RlcC5yZWNpcGUubmFtZX19X3t7ZGVwLnJlY2lwZS52ZXJzaW9ufX0gPHNwYW4gY2xhc3M9InRhc2stbmFtZSI+e3tkZXAudGFza19uYW1lfX08L3NwYW4+PC9hPjwvbGk+CisgICAgICAgICAgICB7JSBlbXB0eSAlfQorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibXV0ZWQiPlRoaXMgdGFzayBoYXMgbm8gcmV2ZXJzZSBkZXBlbmRlbmNpZXM8L2xpPgorICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgIDwvdWw+Cis8L2RsPgorCit7IyBQZXJmb3JtYW5jZSBzZWN0aW9uIC0gc2hvd24gb25seSBmb3IgZXhlY3V0ZWQgdGFza3MgI30KK3slaWYgdGFzay5lbGFwc2VkX3RpbWUgb3IgdGFzay5jcHVfdXNhZ2Ugb3IgdGFzay5kaXNrX2lvICV9CisgICAgPGgyIGNsYXNzPSJkZXRhaWxzIj5QZXJmb3JtYW5jZTwvaDI+Cit7JSBlbmRpZiAlfQorICAgIDxkbCBjbGFzcz0iZGwtaG9yaXpvbnRhbCI+CisgICAgICAgIHslIGlmIHRhc2suZWxhcHNlZF90aW1lICV9CisgICAgICAgIDxkdD4KKyAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJIb3cgbG9uZyBpdCB0b29rIHRoZSB0YXNrIHRvIGZpbmlzaCBpbiBzZWNvbmRzIj48L2k+CisgICAgICAgICAgICBUaW1lIChzZWNzKQorICAgICAgICA8L2R0PgorICAgICAgICA8ZGQ+e3t0YXNrLmVsYXBzZWRfdGltZXxmb3JtYXRfbm9uZV9hbmRfemVyb3xmbG9hdGZvcm1hdDoyfX08L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICB7JSBpZiB0YXNrLmNwdV91c2FnZSA+IDAgJX0KKyAgICAgICAgPGR0PgorICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBwZXJjZW50YWdlIG9mIHRhc2sgQ1BVIHV0aWxpemF0aW9uIj48L2k+CisgICAgICAgICAgICBDUFUgdXNhZ2UKKyAgICAgICAgPC9kdD4KKyAgICAgICAgPGRkPnt7dGFzay5jcHVfdXNhZ2V8Zm9ybWF0X25vbmVfYW5kX3plcm98ZmxvYXRmb3JtYXQ6Mn19JTwvZGQ+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIHslIGlmIHRhc2suZGlza19pbyA+IDAgJX0KKyAgICAgICAgPGR0PgorICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9Ik51bWJlciBvZiBtaWxpc2Vjb25kcyB0aGUgdGFzayBzcGVudCBkb2luZyBkaXNrIGlucHV0IGFuZCBvdXRwdXQiPjwvaT4KKyAgICAgICAgICAgIERpc2sgSS9PIChtcykKKyAgICAgICAgPC9kdD4KKyAgICAgICAgPGRkPnt7dGFzay5kaXNrX2lvfGZvcm1hdF9ub25lX2FuZF96ZXJvfX08L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgIDwvZGw+CisKKzwvZGl2PgoreyUgZW5kYmxvY2sgJX0KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Rhc2tzLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdGFza3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMThiNWM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Rhc2tzLmh0bWwKQEAgLTAsMCArMSwxMzYgQEAKK3slIGV4dGVuZHMgImJhc2VidWlsZHBhZ2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KKworeyUgYmxvY2sgbG9jYWxicmVhZGNydW1iICV9Cis8bGk+e3t0aXRsZX19PC9saT4KK3slIGVuZGJsb2NrICV9CisKK3slIGJsb2NrIG5hdi10YXNrcyAlfQorICB7JSBpZiAnVGFza3MnID09IHRpdGxlICV9CisgICAgPGxpIGNsYXNzPSJhY3RpdmUiPjxhIGhyZWY9InslIHVybCAndGFza3MnIGJ1aWxkLnBrICV9Ij5UYXNrczwvYT48L2xpPgorICB7JSBlbHNlICV9CisgICAgPGxpPjxhIGhyZWY9InslIHVybCAndGFza3MnIGJ1aWxkLnBrICV9Ij5UYXNrczwvYT48L2xpPgorICB7JSBlbmRpZiAlfQoreyUgZW5kYmxvY2sgJX0KK3slIGJsb2NrIG5hdi1idWlsZHRpbWUgJX0KKyAgeyUgaWYgJ1RpbWUnID09IHRpdGxlICV9CisgICAgPGxpIGNsYXNzPSJhY3RpdmUiPjxhIGhyZWY9InslIHVybCAnYnVpbGR0aW1lJyBidWlsZC5wayAlfSI+VGltZTwvYT48L2xpPgorICB7JSBlbHNlICV9CisgICAgPGxpPjxhIGhyZWY9InslIHVybCAnYnVpbGR0aW1lJyBidWlsZC5wayAlfSI+VGltZTwvYT48L2xpPgorICB7JSBlbmRpZiAlfQoreyUgZW5kYmxvY2sgJX0KK3slIGJsb2NrIG5hdi1jcHV1c2FnZSAlfQorICB7JSBpZiAnQ1BVIHVzYWdlJyA9PSB0aXRsZSAlfQorICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSJ7JSB1cmwgJ2NwdXVzYWdlJyBidWlsZC5wayAlfSI+Q1BVIHVzYWdlPC9hPjwvbGk+CisgIHslIGVsc2UgJX0KKyAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdjcHV1c2FnZScgYnVpbGQucGsgJX0iPkNQVSB1c2FnZTwvYT48L2xpPgorICB7JSBlbmRpZiAlfQoreyUgZW5kYmxvY2sgJX0KK3slIGJsb2NrIG5hdi1kaXNraW8gJX0KKyAgeyUgaWYgJ0Rpc2sgSS9PJyA9PSB0aXRsZSAlfQorICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSJ7JSB1cmwgJ2Rpc2tpbycgYnVpbGQucGsgJX0iPkRpc2sgSS9PPC9hPjwvbGk+CisgIHslIGVsc2UgJX0KKyAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdkaXNraW8nIGJ1aWxkLnBrICV9Ij5EaXNrIEkvTzwvYT48L2xpPgorICB7JSBlbmRpZiAlfQoreyUgZW5kYmxvY2sgJX0KKworeyUgYmxvY2sgYnVpbGRpbmZvbWFpbiAlfQorPGRpdiBjbGFzcz0ic3BhbjEwIj4KK3slIGlmIG5vdCByZXF1ZXN0LkdFVC5maWx0ZXIgYW5kIG5vdCByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIG5vdCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCAlfQorICA8IS0tIEVtcHR5IC0gbm8gZGF0YSBpbiBkYXRhYmFzZSAtLT4KKyAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICA8aDE+e3t0aXRsZX19PC9oMT4KKyAgPC9kaXY+CisgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8gbGVhZCI+CisgIE5vIGRhdGEgd2FzIHJlY29yZGVkIGZvciB0aGlzIGJ1aWxkLgorICA8L2Rpdj4KKworeyUgZWxzZSAlfQorCisgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgPGgxPgorICB7JSBpZiAgcmVxdWVzdC5HRVQuZmlsdGVyIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+ICAwIG9yIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAgMCAlfQorICAgICAge3tvYmplY3RzLnBhZ2luYXRvci5jb3VudH19IHRhc2t7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fHBsdXJhbGl6ZX19IGZvdW5kCisgIHslZWxpZiByZXF1ZXN0LkdFVC5maWx0ZXIgYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgb3IgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgICAgICBObyB0YXNrcyBmb3VuZAorICB7JWVsc2UlfQorICAgICAge3t0aXRsZX19CisgIHslZW5kaWYlfQorICA8L2gxPgorICA8L2Rpdj4KKworICB7JSBpZiBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgICA8ZGl2IGNsYXNzPSJhbGVydCI+CisgICAgICAgIDxmb3JtIGNsYXNzPSJuby1yZXN1bHRzIGlucHV0LWFwcGVuZCIgaWQ9InNlYXJjaGZvcm0iPgorICAgICAgICAgICAgPGlucHV0IGlkPSJzZWFyY2giIG5hbWU9InNlYXJjaCIgY2xhc3M9ImlucHV0LXh4bGFyZ2UiIHR5cGU9InRleHQiIHZhbHVlPSJ7e3JlcXVlc3QuR0VULnNlYXJjaH19Ii8+eyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9PGEgaHJlZj0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIiBjbGFzcz0iYWRkLW9uIGJ0biIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iaWNvbi1yZW1vdmUiPjwvaT48L2E+eyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2VhcmNoIj5TZWFyY2g8L2J1dHRvbj4KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tbGluayIgb25jbGljaz0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIj5TaG93IGFsbCB0YXNrczwvYnV0dG9uPgorICAgICAgICA8L2Zvcm0+CisgICAgICA8L2Rpdj4KKyAgPC9kaXY+CisKKworICB7JSBlbHNlICV9CisgIHslIGluY2x1ZGUgImJhc2V0YWJsZV90b3AuaHRtbCIgJX0KKworICAgIHslIGZvciB0YXNrIGluIG9iamVjdHMgJX0KKyAgICAgICAgPHRyIHt7IHRhc2t8dGFza19jb2xvciB9fSBpZD0ie3t0YXNrLm9yZGVyfX0iPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJvcmRlciI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgInRhc2siIGJ1aWxkLnBrIHRhc2sucGslfSI+e3t0YXNrLm9yZGVyfX08L2E+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfbmFtZSIgPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAicmVjaXBlIiBidWlsZC5wayB0YXNrLnJlY2lwZS5wayAlfSI+e3t0YXNrLnJlY2lwZS5uYW1lfX08L2E+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfdmVyc2lvbiI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHRhc2sucmVjaXBlLnBrICV9Ij57e3Rhc2sucmVjaXBlLnZlcnNpb259fTwvYT4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9InRhc2tfbmFtZSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgInRhc2siIGJ1aWxkLnBrIHRhc2sucGslfSI+e3t0YXNrLnRhc2tfbmFtZX19PC9hPiB7JSBpZiB0YXNrLmdldF9kZXNjcmlwdGlvbiAlfTxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaG92ZXItaGVscCIgdGl0bGU9Int7dGFzay5nZXRfZGVzY3JpcHRpb259fSI+PC9pPiB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0iZXhlY3V0ZWQiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9InsldXJsICJ0YXNrIiBidWlsZC5wayB0YXNrLnBrJX0iPnt7dGFzay5nZXRfZXhlY3V0ZWRfZGlzcGxheX19PC9hPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0ib3V0Y29tZSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgInRhc2siIGJ1aWxkLnBrIHRhc2sucGslfSI+e3t0YXNrLmdldF9vdXRjb21lX2Rpc3BsYXl9fSA8L2E+CisgICAgICAgICAgICAgICAgeyUgaWYgdGFzay5vdXRjb21lID0gdGFzay5PVVRDT01FX0ZBSUxFRCAlfQorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2J1aWxkX2FydGlmYWN0JyBidWlsZC5wayAidGFza2xvZ2ZpbGUiIHRhc2sucGsgJX0iPgorICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tZG93bmxvYWQtYWx0IiB0aXRsZT0iRG93bmxvYWQgdGFzayBsb2cgZmlsZSI+PC9pPgorICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiIHRpdGxlPSJ7e3Rhc2suZ2V0X291dGNvbWVfaGVscH19Ij48L2k+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJjYWNoZV9hdHRlbXB0Ij4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JXVybCAidGFzayIgYnVpbGQucGsgdGFzay5wayV9Ij57e3Rhc2suZ2V0X3NzdGF0ZV9yZXN1bHRfZGlzcGxheXxmb3JtYXRfbm9uZV9hbmRfemVyb319PC9hPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0idGltZV90YWtlbiI+CisgICAgICAgICAgICAgICAge3t0YXNrLmVsYXBzZWRfdGltZXxmb3JtYXRfbm9uZV9hbmRfemVyb3xmbG9hdGZvcm1hdDoyfX0KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9ImNwdV91c2VkIj4KKyAgICAgICAgICAgICAgICB7e3Rhc2suY3B1X3VzYWdlfGZvcm1hdF9ub25lX2FuZF96ZXJvfGZsb2F0Zm9ybWF0OjJ9fXslIGlmIHRhc2suY3B1X3VzYWdlICV9JXslIGVuZGlmICV9CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJkaXNrX2lvIj4KKyAgICAgICAgICAgICAgICB7e3Rhc2suZGlza19pb3xmb3JtYXRfbm9uZV9hbmRfemVyb319CisgICAgICAgICAgICA8L3RkPgorCisgICAgICAgIDwvdHI+CisgICAgeyUgZW5kZm9yICV9CisKKyAgeyUgaW5jbHVkZSAiYmFzZXRhYmxlX2JvdHRvbS5odG1sIiAlfQorICB7JSBlbmRpZiAlfSB7IyBvYmplY3RzLnBhZ2luYXRvci5jb3VudCAjfQoreyUgZW5kaWYgJX0geyMgZW1wdHkgI30KKzwvZGl2PgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKKyAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKKyAgICAgICAgLy8gZW5hYmxlIGJsdWUgaGlnaHRsaWdodCBhbmltYXRpb24gZm9yIHRoZSBvcmRlciBsaW5rCisgICAgICAgIGlmIChsb2NhdGlvbi5ocmVmLnNlYXJjaCgnIycpID4gLTEpIHsKKyAgICAgICAgICAgIHZhciB0YXNrX29yZGVyID0gbG9jYXRpb24uaHJlZi5zcGxpdCgnIycpWzFdOworICAgICAgICAgICAgJCgiIyIgKyB0YXNrX29yZGVyKS5hZGRDbGFzcygiaGlnaGxpZ2h0Iik7CisgICAgICAgIH0KKyAgICB9KTsKKworPC9zY3JpcHQ+CisKK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdG9hc3RlcnRhYmxlLWZpbHRlci5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RvYXN0ZXJ0YWJsZS1maWx0ZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzhkYzQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RvYXN0ZXJ0YWJsZS1maWx0ZXIuaHRtbApAQCAtMCwwICsxLDE4IEBACis8IS0tIGZpbHRlciBtb2RhbCAtLT4KKzxkaXYgaWQ9ImZpbHRlci1tb2RhbC17e3RhYmxlX25hbWV9fSIgY2xhc3M9Im1vZGFsIGhpZGUgZmFkZSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtaGlkZGVuPSJmYWxzZSI+CisgIDxmb3JtIGlkPSJmaWx0ZXItbW9kYWwtZm9ybS17e3RhYmxlX25hbWV9fSIgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBweCI+CisgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KKyAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGFyaWEtaGlkZGVuPSJ0cnVlIj54PC9idXR0b24+CisgICAgICA8aDMgaWQ9ImZpbHRlci1tb2RhbC10aXRsZS17e3RhYmxlX25hbWV9fSI+Jm5ic3A7PC9oMz4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KKyAgICAgIDxwPlNob3c6PC9wPgorICAgICAgPHNwYW4gaWQ9ImZpbHRlci1hY3Rpb25zLXt7dGFibGVfbmFtZX19Ij48L3NwYW4+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KKyAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgdHlwZT0ic3VibWl0Ij5BcHBseTwvYnV0dG9uPgorICAgIDwvZGl2PgorICA8L2Zvcm0+Cis8L2Rpdj4KKzxidXR0b24gaWQ9ImNsZWFyLWZpbHRlci1idG4te3t0YWJsZV9uYW1lfX0iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjwvYnV0dG9uPgorPCEtLSBlbmQgZmlsdGVyIG1vZGFsIC0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RvYXN0ZXJ0YWJsZS1zaW1wbGUuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90b2FzdGVydGFibGUtc2ltcGxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEyMzE4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90b2FzdGVydGFibGUtc2ltcGxlLmh0bWwKQEAgLTAsMCArMSw5NCBAQAorCit7JSBsb2FkIHN0YXRpYyAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy90YWJsZS5qcycgJX0iPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvbGF5ZXJCdG4uanMnICV9Ij48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgIChmdW5jdGlvbigpeworCisgICAgdmFyIGN0eCA9IHsKKyAgICAgIHRhYmxlTmFtZSA6ICJ7e3RhYmxlX25hbWV9fSIsCisgICAgICB1cmwgOiAie3sgeGhyX3RhYmxlX3VybCB9fT9mb3JtYXQ9anNvbiIsCisgICAgICB0aXRsZSA6ICJ7e3RpdGxlfX0iLAorICAgICAgcHJvamVjdExheWVycyA6IHt7cHJvamVjdGxheWVyc3xqc29ufX0sCisgICAgfTsKKworICAgIHRyeSB7CisgICAgICB0YWJsZUluaXQoY3R4KTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBkb2N1bWVudC53cml0ZSgiUHJvYmxlbSBsb2FkaW5nIHRhYmxlIHdpZGdldDogIiArIGUpOworICAgIH0KKyAgICB9KSgpOworICB9KTsKKzwvc2NyaXB0PgorCit7JSBpbmNsdWRlICd0b2FzdGVydGFibGUtZmlsdGVyLmh0bWwnICV9CisKKzxkaXYgY2xhc3M9InJvdy1mbHVpZCIgaWQ9Im5vLXJlc3VsdHMte3t0YWJsZV9uYW1lfX0iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICA8ZGl2IGNsYXNzPSJhbGVydCI+CisgICAgPGZvcm0gY2xhc3M9Im5vLXJlc3VsdHMgaW5wdXQtYXBwZW5kIj4KKyAgICAgIDxpbnB1dCBjbGFzcz0iaW5wdXQteGxhcmdlIiBpZD0ibmV3LXNlYXJjaC1pbnB1dC17e3RhYmxlX25hbWV9fSIgbmFtZT0ic2VhcmNoIiB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iU2VhcmNoIHt7dGl0bGV8bG93ZXJ9fSIgdmFsdWU9InslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfXt7cmVxdWVzdC5HRVQuc2VhcmNofX17JSBlbmRpZiAlfSIvPgorICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImFkZC1vbiBidG4gcmVtb3ZlLXNlYXJjaC1idG4te3t0YWJsZV9uYW1lfX0iIHRhYmluZGV4PSItMSI+CisgICAgICAgIDxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPgorICAgICAgPC9hPgorICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIHNlYXJjaC1zdWJtaXQte3t0YWJsZV9uYW1lfX0iID5TZWFyY2g8L2J1dHRvbj4KKyAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tbGluayByZW1vdmUtc2VhcmNoLWJ0bi17e3RhYmxlX25hbWV9fSI+U2hvdyB7e3RpdGxlfGxvd2VyfX0KKyAgICAgIDwvYnV0dG9uPgorICAgIDwvZm9ybT4KKyAgPC9kaXY+Cis8L2Rpdj4KKzxkaXYgaWQ9InRhYmxlLWNvbnRhaW5lci17e3RhYmxlX25hbWV9fSIgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbiI+CisgIDwhLS0gY29udHJvbCBoZWFkZXIgLS0+CisgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCIgaWQ9InRhYmxlLWNocm9tZS17e3RhYmxlX25hbWV9fSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYXZiYXItc2VhcmNoIGlucHV0LWFwcGVuZCBwdWxsLWxlZnQiPgorCisgICAgICAgIDxpbnB1dCBjbGFzcz0iaW5wdXQteGxhcmdlIiBpZD0ic2VhcmNoLWlucHV0LXt7dGFibGVfbmFtZX19IiBuYW1lPSJzZWFyY2giIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJTZWFyY2gge3t0aXRsZXxsb3dlcn19IiB2YWx1ZT0ieyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9e3tyZXF1ZXN0LkdFVC5zZWFyY2h9fXslIGVuZGlmICV9Ii8+CisgICAgICAgIDxhIGhyZWY9IiMiIHN0eWxlPSJkaXNwbGF5Om5vbmUiIGNsYXNzPSJhZGQtb24gYnRuIHJlbW92ZS1zZWFyY2gtYnRuLXt7dGFibGVfbmFtZX19IiB0YWJpbmRleD0iLTEiPgorICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPgorICAgICAgICA8L2E+CisgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgaWQ9InNlYXJjaC1zdWJtaXQte3t0YWJsZV9uYW1lfX0iID5TZWFyY2g8L2J1dHRvbj4KKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4KKworICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmlubGluZSI+CisgICAgICAgICAgPHNwYW4gY2xhc3M9ImRpdmlkZXItdmVydGljYWwiPjwvc3Bhbj4KKyAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1pbmxpbmUiIHN0eWxlPSJwYWRkaW5nLXRvcDo1cHg7Ij5TaG93IHJvd3M6PC9zcGFuPgorICAgICAgICAgIDxzZWxlY3Qgc3R5bGU9Im1hcmdpbi10b3A6NXB4O21hcmdpbi1ib3R0b206MHB4OyIgY2xhc3M9InBhZ2VzaXplLXt7dGFibGVfbmFtZX19Ij4KKyAgICAgICAgICAgIHslIHdpdGggIjEwIDI1IDUwIDEwMCAxNTAiIGFzIGxpc3QlfQorICAgICAgICAgICAgeyUgZm9yIGkgaW4gbGlzdC5zcGxpdCAlfQorICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ie3tpfX0iPnt7aX19PC9vcHRpb24+CisgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgICA8L3NlbGVjdD4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgPC9kaXY+CisKKyAgPCEtLSBUaGUgYWN0dWFsIHRhYmxlIC0tPgorICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlc29ydGVyIiBpZD0ie3t0YWJsZV9uYW1lfX0iPgorICAgIDx0aGVhZD4KKyAgICAgIDx0cj48dGg+PC90aD48L3RyPgorICAgIDwvdGhlYWQ+CisgICAgPHRib2R5PjwvdGJvZHk+CisgIDwvdGFibGU+CisKKyAgPCEtLSBQYWdpbmF0aW9uIGNvbnRyb2xzIC0tPgorICA8ZGl2IGNsYXNzPSJwYWdpbmF0aW9uIHBhZ2luYXRpb24tY2VudGVyZWQiIGlkPSJwYWdpbmF0aW9uLXt7dGFibGVfbmFtZX19Ij4KKyAgICA8dWwgY2xhc3M9InBhZ2luYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBibG9jay1pbmxpbmUiPgorICAgIDwvdWw+CisKKyAgICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4KKyAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWlubGluZSIgc3R5bGU9InBhZGRpbmctdG9wOjVweDsiPlNob3cgcm93czo8L3NwYW4+CisgICAgICA8c2VsZWN0IHN0eWxlPSJtYXJnaW4tdG9wOjVweDttYXJnaW4tYm90dG9tOjBweDsiIGNsYXNzPSJwYWdlc2l6ZS17e3RhYmxlX25hbWV9fSI+CisgICAgICAgIHslIHdpdGggIjEwIDI1IDUwIDEwMCAxNTAiIGFzIGxpc3QlfQorICAgICAgICB7JSBmb3IgaSBpbiBsaXN0LnNwbGl0ICV9CisgICAgICAgIDxvcHRpb24gdmFsdWU9Int7aX19Ij57e2l9fTwvb3B0aW9uPgorICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgeyUgZW5kd2l0aCAlfQorICAgICAgPC9zZWxlY3Q+CisgICAgPC9kaXY+CisgIDwvZGl2PgorPC9kaXY+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdG9hc3RlcnRhYmxlLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdG9hc3RlcnRhYmxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVmNGM2ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90b2FzdGVydGFibGUuaHRtbApAQCAtMCwwICsxLDEwMyBAQAorCit7JSBsb2FkIHN0YXRpYyAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy90YWJsZS5qcycgJX0iPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvbGF5ZXJCdG4uanMnICV9Ij48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgIChmdW5jdGlvbigpeworCisgICAgdmFyIGN0eCA9IHsKKyAgICAgIHRhYmxlTmFtZSA6ICJ7e3RhYmxlX25hbWV9fSIsCisgICAgICB1cmwgOiAie3sgeGhyX3RhYmxlX3VybCB9fT9mb3JtYXQ9anNvbiIsCisgICAgICB0aXRsZSA6ICJ7e3RpdGxlfX0iLAorICAgICAgcHJvamVjdExheWVycyA6IHt7cHJvamVjdGxheWVyc3xqc29ufX0sCisgICAgfTsKKworICAgIHRyeSB7CisgICAgICB0YWJsZUluaXQoY3R4KTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBkb2N1bWVudC53cml0ZSgiUHJvYmxlbSBsb2FkaW5nIHRhYmxlIHdpZGdldDogIiArIGUpOworICAgIH0KKyAgICB9KSgpOworICB9KTsKKzwvc2NyaXB0PgorCit7JSBpbmNsdWRlICd0b2FzdGVydGFibGUtZmlsdGVyLmh0bWwnICV9CisKKzxkaXYgY2xhc3M9InJvdy1mbHVpZCIgaWQ9Im5vLXJlc3VsdHMte3t0YWJsZV9uYW1lfX0iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICA8ZGl2IGNsYXNzPSJhbGVydCI+CisgICAgPGZvcm0gY2xhc3M9Im5vLXJlc3VsdHMgaW5wdXQtYXBwZW5kIj4KKyAgICAgIDxpbnB1dCBjbGFzcz0iaW5wdXQteHhsYXJnZSIgaWQ9Im5ldy1zZWFyY2gtaW5wdXQte3t0YWJsZV9uYW1lfX0iIG5hbWU9InNlYXJjaCIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IlNlYXJjaCB7e3RpdGxlfGxvd2VyfX0iIHZhbHVlPSJ7JWlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfXt7cmVxdWVzdC5HRVQuc2VhcmNofX17JWVuZGlmJX0iLz4KKyAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJhZGQtb24gYnRuIHJlbW92ZS1zZWFyY2gtYnRuLXt7dGFibGVfbmFtZX19IiB0YWJpbmRleD0iLTEiPgorICAgICAgICA8aSBjbGFzcz0iaWNvbi1yZW1vdmUiPjwvaT4KKyAgICAgIDwvYT4KKyAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBzZWFyY2gtc3VibWl0LXt7dGFibGVfbmFtZX19IiA+U2VhcmNoPC9idXR0b24+CisgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWxpbmsgcmVtb3ZlLXNlYXJjaC1idG4te3t0YWJsZV9uYW1lfX0iPlNob3cge3t0aXRsZXxsb3dlcn19CisgICAgICA8L2J1dHRvbj4KKyAgICA8L2Zvcm0+CisgIDwvZGl2PgorPC9kaXY+CisKKzxkaXYgaWQ9InRhYmxlLWNvbnRhaW5lci17e3RhYmxlX25hbWV9fSIgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbiI+CisgIDwhLS0gY29udHJvbCBoZWFkZXIgLS0+CisgIDxkaXYgY2xhc3M9Im5hdmJhciIgaWQ9InRhYmxlLWNocm9tZS17e3RhYmxlX25hbWV9fSI+CisgICAgPGRpdiBjbGFzcz0ibmF2YmFyLWlubmVyIj4KKyAgICAgIDxkaXYgY2xhc3M9Im5hdmJhci1zZWFyY2ggaW5wdXQtYXBwZW5kIHB1bGwtbGVmdCI+CisKKyAgICAgICAgPGlucHV0IGNsYXNzPSJpbnB1dC14eGxhcmdlIiBpZD0ic2VhcmNoLWlucHV0LXt7dGFibGVfbmFtZX19IiBuYW1lPSJzZWFyY2giIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJTZWFyY2gge3t0aXRsZXxsb3dlcn19IiB2YWx1ZT0ieyVpZiByZXF1ZXN0LkdFVC5zZWFyY2glfXt7cmVxdWVzdC5HRVQuc2VhcmNofX17JWVuZGlmJX0iLz4KKyAgICAgICAgPGEgaHJlZj0iIyIgc3R5bGU9ImRpc3BsYXk6bm9uZSIgY2xhc3M9ImFkZC1vbiBidG4gcmVtb3ZlLXNlYXJjaC1idG4te3t0YWJsZV9uYW1lfX0iIHRhYmluZGV4PSItMSI+CisgICAgICAgICAgPGkgY2xhc3M9Imljb24tcmVtb3ZlIj48L2k+CisgICAgICAgIDwvYT4KKyAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiBpZD0ic2VhcmNoLXN1Ym1pdC17e3RhYmxlX25hbWV9fSIgPlNlYXJjaDwvYnV0dG9uPgorICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgICAgICA8ZGl2IGNsYXNzPSJidG4tZ3JvdXAiPgorICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+RWRpdCBjb2x1bW5zCisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2FyZXQiPjwvc3Bhbj4KKyAgICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUgZWRpdGNvbCI+CisgICAgICAgICAgPC91bD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4KKyAgICAgICAgICA8c3BhbiBjbGFzcz0iZGl2aWRlci12ZXJ0aWNhbCI+PC9zcGFuPgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWlubGluZSIgc3R5bGU9InBhZGRpbmctdG9wOjVweDsiPlNob3cgcm93czo8L3NwYW4+CisgICAgICAgICAgPHNlbGVjdCBzdHlsZT0ibWFyZ2luLXRvcDo1cHg7bWFyZ2luLWJvdHRvbTowcHg7IiBjbGFzcz0icGFnZXNpemUte3t0YWJsZV9uYW1lfX0iPgorICAgICAgICAgICAgeyUgd2l0aCAiMTAgMjUgNTAgMTAwIDE1MCIgYXMgbGlzdCV9CisgICAgICAgICAgICB7JSBmb3IgaSBpbiBsaXN0LnNwbGl0ICV9CisgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ7e2l9fSI+e3tpfX08L29wdGlvbj4KKyAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgeyUgZW5kd2l0aCAlfQorICAgICAgICAgIDwvc2VsZWN0PgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICA8L2Rpdj4KKworICA8IS0tIFRoZSBhY3R1YWwgdGFibGUgLS0+CisgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIgdGFibGVzb3J0ZXIiIGlkPSJ7e3RhYmxlX25hbWV9fSI+CisgICAgPHRoZWFkPgorICAgICAgPHRyPjx0aD48L3RoPjwvdHI+CisgICAgPC90aGVhZD4KKyAgICA8dGJvZHk+PC90Ym9keT4KKyAgPC90YWJsZT4KKworICA8IS0tIFBhZ2luYXRpb24gY29udHJvbHMgLS0+CisgIDxkaXYgY2xhc3M9InBhZ2luYXRpb24gcGFnaW5hdGlvbi1jZW50ZXJlZCIgaWQ9InBhZ2luYXRpb24te3t0YWJsZV9uYW1lfX0iPgorICAgIDx1bCBjbGFzcz0icGFnaW5hdGlvbiIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrLWlubGluZSI+CisgICAgPC91bD4KKworICAgIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBzdHlsZT0icGFkZGluZy10b3A6NXB4OyI+U2hvdyByb3dzOjwvc3Bhbj4KKyAgICAgIDxzZWxlY3Qgc3R5bGU9Im1hcmdpbi10b3A6NXB4O21hcmdpbi1ib3R0b206MHB4OyIgY2xhc3M9InBhZ2VzaXplLXt7dGFibGVfbmFtZX19Ij4KKyAgICAgICAgeyUgd2l0aCAiMTAgMjUgNTAgMTAwIDE1MCIgYXMgbGlzdCV9CisgICAgICAgIHslIGZvciBpIGluIGxpc3Quc3BsaXQgJX0KKyAgICAgICAgPG9wdGlvbiB2YWx1ZT0ie3tpfX0iPnt7aX19PC9vcHRpb24+CisgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICA8L3NlbGVjdD4KKyAgICA8L2Rpdj4KKyAgPC9kaXY+Cis8L2Rpdj4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy91bmF2YWlsYWJsZV9hcnRpZmFjdC5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3VuYXZhaWxhYmxlX2FydGlmYWN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlmOGZlZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy91bmF2YWlsYWJsZV9hcnRpZmFjdC5odG1sCkBAIC0wLDAgKzEsMTUgQEAKK3slIGV4dGVuZHMgImJhc2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KK3slIGxvYWQgc3RhdGljICV9CisKK3slIGJsb2NrIHBhZ2Vjb250ZW50ICV9CisKKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBhaXIiPgorICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8gc3BhbjggbGVhZCI+CisgICAgICAgIDxwIj4gVGhlIGJ1aWxkIGFydGlmYWN0IHlvdSBhcmUgdHJ5aW5nIHRvIGRvd25sb2FkIG5vIGxvbmdlciBleGlzdHMuPC9wPgorICAgICAgICA8cD48YSBocmVmPSJqYXZhc2NyaXB0OndpbmRvdy5oaXN0b3J5LmJhY2soKSI+QmFjayB0byBwcmV2aW91cyBwYWdlPC9hPjwvcD4KKyAgICA8L2Rpdj4KKzwvZGl2PgoreyUgZW5kYmxvY2sgJX0KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGV0YWdzL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGV0YWdzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXRhZ3MvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRldGFncy9wcm9qZWN0dGFncy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRldGFncy9wcm9qZWN0dGFncy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWYyMjYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGV0YWdzL3Byb2plY3R0YWdzLnB5CkBAIC0wLDAgKzEsMjk5IEBACisjCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWVkZWx0YQorZnJvbSBvcy5wYXRoIGltcG9ydCByZWxwYXRoCitpbXBvcnQgcmUKK2Zyb20gZGphbmdvIGltcG9ydCB0ZW1wbGF0ZQorZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IHRpbWV6b25lCitmcm9tIGRqYW5nby50ZW1wbGF0ZS5kZWZhdWx0ZmlsdGVycyBpbXBvcnQgZmlsZXNpemVmb3JtYXQKK2ltcG9ydCBqc29uIGFzIEpzb25MaWIKK2Zyb20gZGphbmdvLnV0aWxzLnNhZmVzdHJpbmcgaW1wb3J0IG1hcmtfc2FmZQorCityZWdpc3RlciA9IHRlbXBsYXRlLkxpYnJhcnkoKQorCitAcmVnaXN0ZXIuc2ltcGxlX3RhZworZGVmIHRpbWVfZGlmZmVyZW5jZShzdGFydF90aW1lLCBlbmRfdGltZSk6CisgICAgcmV0dXJuIGVuZF90aW1lIC0gc3RhcnRfdGltZQorCitAcmVnaXN0ZXIuZmlsdGVyKG5hbWUgPSAnc2VjdG9obXMnKQorZGVmIHNlY3RvaG1zKHRpbWUpOgorICAgIHRyeToKKyAgICAgICAgdGRzZWMgPSBpbnQodGltZSkKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgdGRzZWMgPSAwCisgICAgaG91cnMgPSBpbnQodGRzZWMgLyAzNjAwKQorICAgIHJldHVybiAiJTAyZDolMDJkOiUwMmQiICUgKGhvdXJzLCBpbnQoKHRkc2VjIC0gKGhvdXJzICogMzYwMCkpLyA2MCksIGludCh0ZHNlYykgJSA2MCkKKworCitAcmVnaXN0ZXIuZmlsdGVyKG5hbWUgPSAnZ2V0X3Rhc2tzJykKK2RlZiBnZXRfdGFza3MocXVlcnlzZXQpOgorICAgIHJldHVybiBsaXN0KHRhcmdldCArICc6JyArIHRhc2sgaWYgdGFzayBlbHNlIHRhcmdldCBcCisgICAgICAgICAgICAgICAgICAgIGZvciB0YXJnZXQsIHRhc2sgaW4gcXVlcnlzZXQudmFsdWVzX2xpc3QoJ3RhcmdldCcsICd0YXNrJykpCisKKworQHJlZ2lzdGVyLmZpbHRlcihuYW1lID0gImpzb24iKQorZGVmIGpzb24odmFsdWUsIGRlZmF1bHQgPSBOb25lKToKKyAgICAjIEpTT04gc3BlYyBzYXlzIHRoYXQgIlwvIiBpcyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvICIvIiB0byBhbGxvdyBmb3IgSFRNTC10YWcgZW1iZWRkaW5nIGluIEpTT04gc3RyaW5ncworICAgICMgdW5mb3J0dW5hdGVseSwgSSBjYW4ndCBmaW5kIGFueSBvcHRpb24gaW4gdGhlIGpzb24gbW9kdWxlIHRvIHR1cm4gb24gZm9yd2FyZC1zbGFzaCBlc2NhcGluZywgc28gd2UgZG8KKyAgICAjIGl0IG1hbnVhbGx5IGhlcmUKKyAgICByZXR1cm4gbWFya19zYWZlKEpzb25MaWIuZHVtcHModmFsdWUsIGluZGVudD0yLCBkZWZhdWx0ID0gZGVmYXVsdCwgZW5zdXJlX2FzY2lpPUZhbHNlKS5yZXBsYWNlKCc8LycsICc8XFwvJykpCisKK0ByZWdpc3Rlci5hc3NpZ25tZW50X3RhZworZGVmIHF1ZXJ5KHFzLCAqKmt3YXJncyk6CisgICAgIiIiIHRlbXBsYXRlIHRhZyB3aGljaCBhbGxvd3MgcXVlcnlzZXQgZmlsdGVyaW5nLiBVc2FnZToKKyAgICAgICAgICB7JSBxdWVyeSBib29rcyBhdXRob3I9YXV0aG9yIGFzIG15Ym9va3MgJX0KKyAgICAgICAgICB7JSBmb3IgYm9vayBpbiBteWJvb2tzICV9CisgICAgICAgICAgICAuLi4KKyAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAiIiIKKyAgICByZXR1cm4gcXMuZmlsdGVyKCoqa3dhcmdzKQorCisKK0ByZWdpc3Rlci5maWx0ZXIoIndoaXRlc3BhY2Vfc2xpY2UiKQorZGVmIHdoaXRlc3BhY2Vfc3BhY2VfZmlsdGVyKHZhbHVlLCBhcmcpOgorICAgIHRyeToKKyAgICAgICAgYml0cyA9IFtdCisgICAgICAgIGZvciB4IGluIGFyZy5zcGxpdCgiOiIpOgorICAgICAgICAgICAgaWYgbGVuKHgpID09IDA6CisgICAgICAgICAgICAgICAgYml0cy5hcHBlbmQoTm9uZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBjb252ZXJ0IG51bWVyaWMgdmFsdWUgdG8gdGhlIGZpcnN0IHdoaXRlc3BhY2UgYWZ0ZXIKKyAgICAgICAgICAgICAgICBmaXJzdF93aGl0ZXNwYWNlID0gdmFsdWUuZmluZCgiICIsIGludCh4KSkKKyAgICAgICAgICAgICAgICBpZiBmaXJzdF93aGl0ZXNwYWNlID09IC0xOgorICAgICAgICAgICAgICAgICAgICBiaXRzLmFwcGVuZChpbnQoeCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYml0cy5hcHBlbmQoZmlyc3Rfd2hpdGVzcGFjZSkKKyAgICAgICAgcmV0dXJuIHZhbHVlW3NsaWNlKCpiaXRzKV0KKyAgICBleGNlcHQgKFZhbHVlRXJyb3IsIFR5cGVFcnJvcik6CisgICAgICAgIHJhaXNlCisKK0ByZWdpc3Rlci5maWx0ZXIKK2RlZiBkaXZpZGUodmFsdWUsIGFyZyk6CisgICAgaWYgaW50KGFyZykgPT0gMDoKKyAgICAgICAgcmV0dXJuIC0xCisgICAgcmV0dXJuIGludCh2YWx1ZSkgLyBpbnQoYXJnKQorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgbXVsdGlwbHkodmFsdWUsIGFyZyk6CisgICAgcmV0dXJuIGludCh2YWx1ZSkgKiBpbnQoYXJnKQorCitAcmVnaXN0ZXIuYXNzaWdubWVudF90YWcKK2RlZiBkYXRlY29tcHV0ZShkZWx0YSwgc3RhcnQgPSB0aW1lem9uZS5ub3coKSk6CisgICAgcmV0dXJuIHN0YXJ0ICsgdGltZWRlbHRhKGRlbHRhKQorCisKK0ByZWdpc3Rlci5maWx0ZXIobmFtZSA9ICdzb3J0Y29scycpCitkZWYgc29ydGNvbHModGFibGVjb2xzKToKKyAgICByZXR1cm4gc29ydGVkKHRhYmxlY29scywga2V5ID0gbGFtYmRhIHQ6IHRbJ25hbWUnXSkKKworQHJlZ2lzdGVyLmZpbHRlcgorZGVmIHRhc2tfY29sb3IodGFza19vYmplY3QsIHNob3dfZ3JlZW49RmFsc2UpOgorICAgICIiIiBSZXR1cm4gY3NzIGNsYXNzIGRlcGVuZGluZyBvbiBUYXNrIGV4ZWN1dGlvbiBzdGF0dXMgYW5kIGV4ZWN1dGlvbiBvdXRjb21lLgorICAgICAgICBCeSBkZWZhdWx0LCBncmVlbiBpcyBub3QgcmV0dXJuZWQgZm9yIGV4ZWN1dGVkIGFuZCBzdWNjZXNzZnVsIHRhc2tzOworICAgICAgICBzaG93X2dyZWVuIGFyZ3VtZW50IHNob3VsZCBiZSBUcnVlIHRvIGdldCBncmVlbiBjb2xvci4KKyAgICAiIiIKKyAgICBpZiBub3QgdGFza19vYmplY3QudGFza19leGVjdXRlZDoKKyAgICAgICAgcmV0dXJuICdjbGFzcz1tdXRlZCcKKyAgICBlbGlmIHRhc2tfb2JqZWN0Lm91dGNvbWUgPT0gdGFza19vYmplY3QuT1VUQ09NRV9GQUlMRUQ6CisgICAgICAgIHJldHVybiAnY2xhc3M9ZXJyb3InCisgICAgZWxpZiB0YXNrX29iamVjdC5vdXRjb21lID09IHRhc2tfb2JqZWN0Lk9VVENPTUVfU1VDQ0VTUyBhbmQgc2hvd19ncmVlbjoKKyAgICAgICAgcmV0dXJuICdjbGFzcz1ncmVlbicKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gJycKKworQHJlZ2lzdGVyLmZpbHRlcgorZGVmIGZpbHRlcmVkX2ljb24ob3B0aW9ucywgZmlsdGVyKToKKyAgICAiIiJSZXR1cm5zIGJ0bi1wcmltYXJ5IGlmIHRoZSBmaWx0ZXIgbWF0Y2hlcyBvbmUgb2YgdGhlIGZpbHRlciBvcHRpb25zCisgICAgIiIiCisgICAgZm9yIG9wdGlvbiBpbiBvcHRpb25zOgorICAgICAgICBpZiBmaWx0ZXIgPT0gb3B0aW9uWzFdOgorICAgICAgICAgICAgcmV0dXJuICJidG4tcHJpbWFyeSIKKyAgICAgICAgaWYgKCdkYXRlcmFuZ2UnID09IG9wdGlvblsxXSkgYW5kIGZpbHRlci5zdGFydHN3aXRoKG9wdGlvbls0XSk6CisgICAgICAgICAgICByZXR1cm4gImJ0bi1wcmltYXJ5IgorICAgIHJldHVybiAiIgorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZmlsdGVyZWRfdG9vbHRpcChvcHRpb25zLCBmaWx0ZXIpOgorICAgICIiIlJldHVybnMgdG9vbHRpcCBmb3IgdGhlIGZpbHRlciBpY29uIGlmIHRoZSBmaWx0ZXIgbWF0Y2hlcyBvbmUgb2YgdGhlIGZpbHRlciBvcHRpb25zCisgICAgIiIiCisgICAgZm9yIG9wdGlvbiBpbiBvcHRpb25zOgorICAgICAgICBpZiBmaWx0ZXIgPT0gb3B0aW9uWzFdOgorICAgICAgICAgICAgcmV0dXJuICJTaG93aW5nIG9ubHkgJXMiJW9wdGlvblswXQorICAgICAgICBpZiAoJ2RhdGVyYW5nZScgPT0gb3B0aW9uWzFdKSBhbmQgZmlsdGVyLnN0YXJ0c3dpdGgob3B0aW9uWzRdKToKKyAgICAgICAgICAgIHJldHVybiAiU2hvd2luZyBvbmx5ICVzIiVvcHRpb25bMF0KKyAgICByZXR1cm4gIiIKKworQHJlZ2lzdGVyLmZpbHRlcgorZGVmIGZvcm1hdF9ub25lX2FuZF96ZXJvKHZhbHVlKToKKyAgICAiIiJSZXR1cm4gZW1wdHkgc3RyaW5nIGlmIHRoZSB2YWx1ZSBpcyBOb25lLCB6ZXJvIG9yIE5vdCBBcHBsaWNhYmxlCisgICAgIiIiCisgICAgcmV0dXJuICIiIGlmIChub3QgdmFsdWUpIG9yICh2YWx1ZSA9PSAwKSBvciAodmFsdWUgPT0gIjAiKSBvciAodmFsdWUgPT0gJ05vdCBBcHBsaWNhYmxlJykgZWxzZSB2YWx1ZQorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZmlsdGVyZWRfZmlsZXNpemVmb3JtYXQodmFsdWUpOgorICAgICIiIgorICAgIElmIHRoZSB2YWx1ZSBpcyAtMSByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLiBPdGhlcndpc2UsCisgICAgY2hhbmdlIG91dHB1dCBmcm9tIGZpbGVmb3JtYXRzaXplIHRvIHN1cHByZXNzIHRyYWlsaW5nICcuMCcKKyAgICBhbmQgY2hhbmdlICdieXRlcycgdG8gJ0InLgorICAgICIiIgorICAgIGlmIHZhbHVlID09IC0xOgorICAgICAgICByZXR1cm4gJycKKworICAgIHJldHVybiBmaWxlc2l6ZWZvcm1hdCh2YWx1ZSkucmVwbGFjZSgiYnl0ZXMiLCAiQiIpCisKK0ByZWdpc3Rlci5maWx0ZXIKK2RlZiBmaWx0ZXJlZF9wYWNrYWdlc3BlYyh2YWx1ZSk6CisgICAgIiIiU3RyaXAgb2ZmIGVtcHR5IHZlcnNpb24gYW5kIHJldmlzaW9uIiIiCisgICAgcmV0dXJuIHJlLnN1YihyJygtLSQpJywgJycsIHZhbHVlKQorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgY2hlY2tfZmlsdGVyX3N0YXR1cyhvcHRpb25zLCBmaWx0ZXIpOgorICAgICIiIkNoZWNrIGlmIHRoZSBhY3RpdmUgZmlsdGVyIGlzIGFtb25nIHRoZSBhdmFpbGFibGUgb3B0aW9ucywgYW5kIHJldHVybiAnY2hlY2tlZCcKKyAgICAgICBpZiBmaWx0ZXIgaXMgbm90IGFjdGl2ZS4KKyAgICAgICBVc2VkIGluIEZpbHRlckRpYWxvZyB0byBzZWxlY3QgdGhlIGZpcnN0IHJhZGlvIGJ1dHRvbiBpZiB0aGUgZmlsdGVyIGlzIG5vdCBhY3RpdmUuCisgICAgIiIiCisgICAgZm9yIG9wdGlvbiBpbiBvcHRpb25zOgorICAgICAgICBpZiBmaWx0ZXIgPT0gb3B0aW9uWzFdOgorICAgICAgICAgICAgcmV0dXJuICIiCisgICAgcmV0dXJuICJjaGVja2VkIgorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgdmFyaWFibGVfcGFyZW50X25hbWUodmFsdWUpOgorICAgICIiIiBmaWx0ZXIgZXh0ZW5kZWQgdmFyaWFibGUgbmFtZXMgdG8gdGhlIHBhcmVudCBuYW1lCisgICAgIiIiCisgICAgdmFsdWU9cmUuc3ViKCdfXCQuKicsICcnLCB2YWx1ZSkKKyAgICByZXR1cm4gcmUuc3ViKCdfW2Etel0uKicsICcnLCB2YWx1ZSkKKworQHJlZ2lzdGVyLmZpbHRlcgorZGVmIGZpbHRlcl9zZXRpbl9maWxlcyhmaWxlX2xpc3QsIG1hdGNoc3RyKToKKyAgICAiIiJGaWx0ZXIvc2VhcmNoIHRoZSAnc2V0IGluJyBmaWxlIGxpc3RzLiIiIgorICAgIHJlc3VsdCA9IFtdCisgICAgc2VhcmNoLCBmaWx0ZXIgPSBtYXRjaHN0ci5zcGxpdCgnOicpCisgICAgZm9yIHBhdHRlcm4gaW4gKHNlYXJjaCwgZmlsdGVyKToKKyAgICAgICAgaWYgcGF0dGVybjoKKyAgICAgICAgICAgIGZvciBmb2JqIGluIGZpbGVfbGlzdDoKKyAgICAgICAgICAgICAgICBmbmFtZSA9IGZvYmouZmlsZV9uYW1lCisgICAgICAgICAgICAgICAgaWYgZm5hbWUgbm90IGluIHJlc3VsdCBhbmQgcmUuc2VhcmNoKHBhdHRlcm4sIGZuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChmbmFtZSkKKworICAgICMgbm8gZmlsdGVyLCBzaG93IGxhc3QgZmlsZSAoaWYgYW55KQorICAgIGxhc3QgPSBsaXN0KGZpbGVfbGlzdClbLTFdLmZpbGVfbmFtZQorICAgIGlmIG5vdCBmaWx0ZXIgYW5kIGxhc3Qgbm90IGluIHJlc3VsdDoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChsYXN0KQorCisgICAgcmV0dXJuIHJlc3VsdAorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgc3RyaW5nX3NsaWNlKHN0cnZhcixzbGljZXZhcik6CisgICAgIiIiIHNsaWNlIGEgc3RyaW5nIHdpdGggfHN0cmluZ19zbGljZTonW2ZpcnN0XTpbbGFzdF0nCisgICAgIiIiCisgICAgZmlyc3QsbGFzdD0gc2xpY2V2YXIucGFydGl0aW9uKCc6JylbOjoyXQorICAgIGlmIGZpcnN0PT0nJzoKKyAgICAgICAgcmV0dXJuIHN0cnZhcls6aW50KGxhc3QpXQorICAgIGVsaWYgbGFzdD09Jyc6CisgICAgICAgIHJldHVybiBzdHJ2YXJbaW50KGZpcnN0KTpdCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHN0cnZhcltpbnQoZmlyc3QpOmludChsYXN0KV0KKworQHJlZ2lzdGVyLmZpbHRlcgorZGVmIHN0cmluZ19yZW1vdmVfcmVnZXgodmFsdWUsZXgpOgorICAgICIiIiByZW1vdmUgc3ViLXN0cmluZyBvZiBzdHJpbmcgdGhhdCBtYXRjaGVzIHJlZ2V4CisgICAgIiIiCisgICAgcmV0dXJuIHJlLnN1YihleCwgJycsIHZhbHVlKQorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZmlsdGVyZWRfaW5zdGFsbGVkc2l6ZShzaXplLCBpbnN0YWxsZWRfc2l6ZSk6CisgICAgIiIiSWYgcGFja2FnZS5pbnN0YWxsZWRfc2l6ZSBub3QgbnVsbCBhbmQgbm90IGVtcHR5IHJldHVybiBpdCwKKyAgICAgICBlbHNlIHJldHVybiBwYWNrYWdlLnNpemUKKyAgICAiIiIKKyAgICByZXR1cm4gc2l6ZSBpZiAoaW5zdGFsbGVkX3NpemUgPT0gMCkgb3IgKGluc3RhbGxlZF9zaXplID09ICIiKSBvciAoaW5zdGFsbGVkX3NpemUgPT0gTm9uZSkgZWxzZSBpbnN0YWxsZWRfc2l6ZQorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZmlsdGVyZWRfcGFja2FnZXZlcnNpb24odmVyc2lvbiwgcmV2aXNpb24pOgorICAgICIiIiBFbWl0ICJ2ZXJzaW9uLXJldmlzaW9uIiBpZiB2ZXJzaW9uIGFuZCByZXZpc2lvbiBhcmUgbm90IG51bGwKKyAgICAgICAgZWxzZSAidmVyc2lvbiIgaWYgdmVyc2lvbiBpcyBub3QgbnVsbAorICAgICAgICBlbHNlICIiCisgICAgIiIiCisgICAgcmV0dXJuICIiIGlmIChub3QgdmVyc2lvbiBvciB2ZXJzaW9uID09ICIiKSBlbHNlIHZlcnNpb24gaWYgKG5vdCByZXZpc2lvbiBvciByZXZpc2lvbiA9PSAiIikgZWxzZSB2ZXJzaW9uICsgIi0iICsgcmV2aXNpb24KKworQHJlZ2lzdGVyLmZpbHRlcgorZGVmIGZpbHRlcl9zaXplb3ZlcnRvdGFsKHBhY2thZ2Vfb2JqZWN0LCB0b3RhbF9zaXplKToKKyAgICAiIiIgUmV0dXJuIHRoZSAlIHNpemUgb2YgdGhlIHBhY2thZ2Ugb3ZlciB0aGUgdG90YWwgc2l6ZSBhcmd1bWVudAorICAgICAgICBmb3JtYXR0ZWQgbmljZWx5LgorICAgICIiIgorICAgIHNpemUgPSBwYWNrYWdlX29iamVjdC5pbnN0YWxsZWRfc2l6ZQorICAgIGlmIHNpemUgPT0gTm9uZSBvciBzaXplID09ICcnOgorICAgICAgICBzaXplID0gcGFja2FnZV9vYmplY3Quc2l6ZQorCisgICAgcmV0dXJuICd7Oi4xJX0nLmZvcm1hdChmbG9hdChzaXplKS9mbG9hdCh0b3RhbF9zaXplKSkKKworZnJvbSBkamFuZ28udXRpbHMuc2FmZXN0cmluZyBpbXBvcnQgbWFya19zYWZlCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZm9ybWF0X3ZwYWNrYWdlX3Jvd2NsYXNzKHNpemUpOgorICAgIGlmIHNpemUgPT0gLTE6CisgICAgICAgIHJldHVybiBtYXJrX3NhZmUoJ2NsYXNzPSJtdXRlZCInKQorICAgIHJldHVybiAnJworCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZm9ybWF0X3ZwYWNrYWdlX25hbWVoZWxwKG5hbWUpOgorICAgIHIgPSAgbmFtZSArICcmbmJzcDsnCisgICAgciArPSAnPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIicKKyAgICByICs9ICcgdGl0bGUgPSAiJyArIG5hbWUgKyAnIGhhcyBub3QgYmVlbiBidWlsdCI+JworICAgIHIgKz0gJzwvaT4nCisgICAgcmV0dXJuIG1hcmtfc2FmZShyKQorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZ2V0X2RpY3RfdmFsdWUoZGljdGlvbmFyeSwga2V5KToKKyAgICAiIiIgcmV0dXJuIHRoZSB2YWx1ZSBvZiBhIGRpY3Rpb25hcnkga2V5CisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gZGljdGlvbmFyeVtrZXldCisgICAgZXhjZXB0IChLZXlFcnJvciwgSW5kZXhFcnJvcik6CisgICAgICAgIHJldHVybiAnJworCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZm9ybWF0X2J1aWxkX2RhdGUoY29tcGxldGVkX29uKToKKyAgICBub3cgPSB0aW1lem9uZS5ub3coKQorICAgIGRlbHRhID0gbm93IC0gY29tcGxldGVkX29uCisKKyAgICBpZiBkZWx0YS5kYXlzID49IDE6CisgICAgICAgIHJldHVybiBUcnVlCisKK0ByZWdpc3Rlci5maWx0ZXIKK2RlZiBpc19zaGFpZCh0ZXh0KToKKyAgICAiIiIgcmV0dXJuIFRydWUgaWYgdGV4dCBsZW5ndGggaXMgNDAgY2hhcmFjdGVycyBhbmQgYWxsIGhleC1kaWdpdHMKKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgIGludCh0ZXh0LCAxNikKKyAgICAgICAgaWYgbGVuKHRleHQpID09IDQwOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgIHJldHVybiBGYWxzZQorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgY3V0X3BhdGhfcHJlZml4KGZ1bGxwYXRoLCBwcmVmaXhlcyk6CisgICAgIiIiQ3V0IHBhdGggcHJlZml4IGZyb20gZnVsbHBhdGguIiIiCisgICAgZm9yIHByZWZpeCBpbiBwcmVmaXhlczoKKyAgICAgICAgaWYgZnVsbHBhdGguc3RhcnRzd2l0aChwcmVmaXgpOgorICAgICAgICAgICAgcmV0dXJuIHJlbHBhdGgoZnVsbHBhdGgsIHByZWZpeCkKKyAgICByZXR1cm4gZnVsbHBhdGgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3Rlc3RzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE4YjQ3OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3Rlc3RzLnB5CkBAIC0wLDAgKzEsMjk0IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyIiIlRlc3QgY2FzZXMgZm9yIFRvYXN0ZXIgR1VJIGFuZCBSZVNULiIiIgorCitmcm9tIGRqYW5nby50ZXN0IGltcG9ydCBUZXN0Q2FzZQorZnJvbSBkamFuZ28uY29yZS51cmxyZXNvbHZlcnMgaW1wb3J0IHJldmVyc2UKK2Zyb20gZGphbmdvLnV0aWxzIGltcG9ydCB0aW1lem9uZQorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBQcm9qZWN0LCBSZWxlYXNlLCBCaXRiYWtlVmVyc2lvbiwgQnVpbGQKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHksIExheWVyU291cmNlLCBMYXllcgorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBMYXllcl9WZXJzaW9uLCBSZWNpcGUsIE1hY2hpbmUsIFByb2plY3RMYXllcgoraW1wb3J0IGpzb24KKworUFJPSkVDVF9OQU1FID0gInRlc3QgcHJvamVjdCIKKworY2xhc3MgVmlld1Rlc3RzKFRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0byB2ZXJpZnkgdmlldyBBUElzLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBiYnYgPSBCaXRiYWtlVmVyc2lvbi5vYmplY3RzLmNyZWF0ZShuYW1lPSJ0ZXN0IGJidiIsIGdpdHVybD0iL3RtcC8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2g9Im1hc3RlciIsIGRpcnBhdGg9IiIpCisgICAgICAgIHJlbGVhc2UgPSBSZWxlYXNlLm9iamVjdHMuY3JlYXRlKG5hbWU9InRlc3QgcmVsZWFzZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdGJha2VfdmVyc2lvbj1iYnYpCisgICAgICAgIHNlbGYucHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5jcmVhdGVfcHJvamVjdChuYW1lPVBST0pFQ1RfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2U9cmVsZWFzZSkKKworICAgICAgICBsYXllcnNyYyA9IExheWVyU291cmNlLm9iamVjdHMuY3JlYXRlKHNvdXJjZXR5cGU9TGF5ZXJTb3VyY2UuVFlQRV9JTVBPUlRFRCkKKyAgICAgICAgc2VsZi5wcmlvcml0eSA9IFJlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5Lm9iamVjdHMuY3JlYXRlKHJlbGVhc2U9cmVsZWFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyX3NvdXJjZT1sYXllcnNyYykKKyAgICAgICAgbGF5ZXIgPSBMYXllci5vYmplY3RzLmNyZWF0ZShuYW1lPSJiYXNlLWxheWVyIiwgbGF5ZXJfc291cmNlPWxheWVyc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZjc191cmw9Ii90bXAvIikKKworICAgICAgICBsdmVyID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmNyZWF0ZShsYXllcj1sYXllciwgcHJvamVjdD1zZWxmLnByb2plY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyX3NvdXJjZT1sYXllcnNyYywgY29tbWl0PSJtYXN0ZXIiKQorCisgICAgICAgIFJlY2lwZS5vYmplY3RzLmNyZWF0ZShsYXllcl9zb3VyY2U9bGF5ZXJzcmMsIG5hbWU9ImJhc2UtcmVjaXBlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb249IjEuMiIsIHN1bW1hcnk9Im9uZSByZWNpcGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249InJlY2lwZSIsIGxheWVyX3ZlcnNpb249bHZlcikKKworICAgICAgICBNYWNoaW5lLm9iamVjdHMuY3JlYXRlKGxheWVyX3ZlcnNpb249bHZlciwgbmFtZT0id2lzayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249Indpc2tpbmcgbWFjaGluZSIpCisKKyAgICAgICAgUHJvamVjdExheWVyLm9iamVjdHMuY3JlYXRlKHByb2plY3Q9c2VsZi5wcm9qZWN0LCBsYXllcmNvbW1pdD1sdmVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsdmVyIGluIHNlbGYucHJvamVjdC5jb21wYXRpYmxlX2xheWVydmVyc2lvbnMoKSkKKworICAgIGRlZiB0ZXN0X2dldF9iYXNlX2NhbGxfcmV0dXJuc19odG1sKHNlbGYpOgorICAgICAgICAiIiJCYXNpYyB0ZXN0IGZvciBhbGwtcHJvamVjdHMgdmlldyIiIgorICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmdldChyZXZlcnNlKCdhbGwtcHJvamVjdHMnKSwgZm9sbG93PVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDIwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3BvbnNlWydDb250ZW50LVR5cGUnXS5zdGFydHN3aXRoKCd0ZXh0L2h0bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUZW1wbGF0ZVVzZWQocmVzcG9uc2UsICJwcm9qZWN0cy5odG1sIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFBST0pFQ1RfTkFNRSBpbiByZXNwb25zZS5jb250ZW50KQorCisgICAgZGVmIHRlc3RfZ2V0X2pzb25fY2FsbF9yZXR1cm5zX2pzb24oc2VsZik6CisgICAgICAgICIiIlRlc3QgZm9yIGFsbCBwcm9qZWN0cyBvdXRwdXQgaW4ganNvbiBmb3JtYXQiIiIKKyAgICAgICAgdXJsID0gcmV2ZXJzZSgnYWxsLXByb2plY3RzJykKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5nZXQodXJsLCB7ImZvcm1hdCI6ICJqc29uIn0sIGZvbGxvdz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAyMDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwb25zZVsnQ29udGVudC1UeXBlJ10uc3RhcnRzd2l0aCgnYXBwbGljYXRpb24vanNvbicpKQorCisgICAgICAgIGRhdGEgPSBqc29uLmxvYWRzKHJlc3BvbnNlLmNvbnRlbnQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJlcnJvciIgaW4gZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhWyJlcnJvciJdLCAib2siKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoInJvd3MiIGluIGRhdGEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFBST0pFQ1RfTkFNRSBpbiBbeFsibmFtZSJdIGZvciB4IGluIGRhdGFbInJvd3MiXV0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiaWQiIGluIGRhdGFbInJvd3MiXVswXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChkYXRhWyJyb3dzIl1bMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnYml0YmFrZV92ZXJzaW9uX2lkJywgJ2NyZWF0ZWQnLCAnaWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnaXNfZGVmYXVsdCcsICdsYXllcnNUeXBlQWhlYWRVcmwnLCAnbmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdudW1fYnVpbGRzJywgJ3Byb2plY3RCdWlsZHNVcmwnLCAncHJvamVjdFBhZ2VVcmwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAncmVjaXBlc1R5cGVBaGVhZFVybCcsICdyZWxlYXNlX2lkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJywgJ3VwZGF0ZWQnLCAndXNlcl9pZCddKQorCisgICAgZGVmIHRlc3RfdHlwZWFoZWFkcyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCB0eXBlYWhlYWQgUmVTVCBBUEkiIiIKKyAgICAgICAgbGF5ZXJzX3VybCA9IHJldmVyc2UoJ3hocl9sYXllcnN0eXBlYWhlYWQnLCBhcmdzPShzZWxmLnByb2plY3QuaWQsKSkKKyAgICAgICAgcHJqX3VybCA9IHJldmVyc2UoJ3hocl9wcm9qZWN0c3R5cGVhaGVhZCcpCisKKyAgICAgICAgdXJscyA9IFtsYXllcnNfdXJsLAorICAgICAgICAgICAgICAgIHByal91cmwsCisgICAgICAgICAgICAgICAgcmV2ZXJzZSgneGhyX3JlY2lwZXN0eXBlYWhlYWQnLCBhcmdzPShzZWxmLnByb2plY3QuaWQsKSksCisgICAgICAgICAgICAgICAgcmV2ZXJzZSgneGhyX21hY2hpbmVzdHlwZWFoZWFkJywgYXJncz0oc2VsZi5wcm9qZWN0LmlkLCkpLAorICAgICAgICAgICAgICAgXQorCisgICAgICAgIGRlZiBiYXNpY19yZXBvbnNlX2NoZWNrKHJlc3BvbnNlLCB1cmwpOgorICAgICAgICAgICAgIiIiQ2hlY2sgZGF0YSBzdHJ1Y3R1cmUgb2YgaHR0cCByZXNwb25zZS4iIiIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDIwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwb25zZVsnQ29udGVudC1UeXBlJ10uc3RhcnRzd2l0aCgnYXBwbGljYXRpb24vanNvbicpKQorCisgICAgICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhyZXNwb25zZS5jb250ZW50KQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoImVycm9yIiBpbiBkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhWyJlcnJvciJdLCAib2siKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJyZXN1bHRzIiBpbiBkYXRhKQorCisgICAgICAgICAgICAjIFdlIGdvdCBhIHJlc3VsdCBzbyBub3cgY2hlY2sgdGhlIGZpZWxkcworICAgICAgICAgICAgaWYgbGVuKGRhdGFbJ3Jlc3VsdHMnXSkgPiAwOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRhdGFbJ3Jlc3VsdHMnXVswXQorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihyZXN1bHRbJ25hbWUnXSkgPiAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiZGV0YWlsIiBpbiByZXN1bHQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdFsnaWQnXSA+IDApCisKKyAgICAgICAgICAgICAgICAjIFNwZWNpYWwgY2hlY2sgZm9yIHRoZSBsYXllcnMgdHlwZWFoZWFkJ3MgZXh0cmEgZmllbGRzCisgICAgICAgICAgICAgICAgaWYgdXJsID09IGxheWVyc191cmw6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4ocmVzdWx0WydsYXllcmRldGFpbHVybCddKSA+IDApCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4ocmVzdWx0Wyd2Y3NfdXJsJ10pID4gMCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihyZXN1bHRbJ3Zjc19yZWZlcmVuY2UnXSkgPiAwKQorICAgICAgICAgICAgICAgICMgU3BlY2lhbCBjaGVjayBmb3IgcHJvamVjdCB0eXBlYWhlYWQgZXh0cmEgZmllbGRzCisgICAgICAgICAgICAgICAgZWxpZiB1cmwgPT0gcHJqX3VybDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihyZXN1bHRbJ3Byb2plY3RQYWdlVXJsJ10pID4gMCkKKworICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGltcG9ydCBzdHJpbmcKKworICAgICAgICBmb3IgdXJsIGluIHVybHM6CisgICAgICAgICAgICByZXN1bHRzID0gRmFsc2UKKworICAgICAgICAgICAgZm9yIHR5cGVpbmcgaW4gbGlzdChzdHJpbmcuYXNjaWlfbGV0dGVycyk6CisgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5nZXQodXJsLCB7J3NlYXJjaCc6IHR5cGVpbmd9KQorICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBiYXNpY19yZXBvbnNlX2NoZWNrKHJlc3BvbnNlLCB1cmwpCisgICAgICAgICAgICAgICAgaWYgcmVzdWx0czoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgIyBBZnRlciAidHlwZWluZyIgdGhlIGFscGFiZXQgd2Ugc2hvdWxkIGhhdmUgcmVzdWx0IHRydWUKKyAgICAgICAgICAgICMgZnJvbSBlYWNoIG9mIHRoZSB1cmxzCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0cykKKworICAgIGRlZiB0ZXN0X3hocl9pbXBvcnRfbGF5ZXIoc2VsZik6CisgICAgICAgICIiIlRlc3QgeGhyX2ltcG9ydGxheWVyIEFQSSIiIgorICAgICAgICAjVGVzdCBmb3IgaW1wb3J0aW5nIGFuIGFscmVhZHkgZXhpc3RpbmcgbGF5ZXIKKyAgICAgICAgYXJncyA9IHsndmNzX3VybCcgOiAiZ2l0Oi8vZ2l0LmV4YW1wbGUuY29tL3Rlc3QiLAorICAgICAgICAgICAgICAgICduYW1lJyA6ICJiYXNlLWxheWVyIiwKKyAgICAgICAgICAgICAgICAnZ2l0X3JlZic6ICJjMTJiOTU5NmFmZDIzNjExNmIyNWNlMjZkYmUwZDc5M2RlOWRjN2NlIiwKKyAgICAgICAgICAgICAgICAncHJvamVjdF9pZCc6IDEsICdkaXJfcGF0aCcgOiAiL3BhdGgvaW4vcmVwb3NpdG9yeSJ9CisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQucG9zdChyZXZlcnNlKCd4aHJfaW1wb3J0bGF5ZXInKSwgYXJncykKKyAgICAgICAgZGF0YSA9IGpzb24ubG9hZHMocmVzcG9uc2UuY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGRhdGFbImVycm9yIl0sICJvayIpCisKKyAgICAgICAgI1Rlc3QgdG8gdmVyaWZ5IGltcG9ydCBvZiBhIGxheWVyIHN1Y2Nlc3NmdWwKKyAgICAgICAgYXJnc1snbmFtZSddID0gIm1ldGEtb2UiCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQucG9zdChyZXZlcnNlKCd4aHJfaW1wb3J0bGF5ZXInKSwgYXJncykKKyAgICAgICAgZGF0YSA9IGpzb24ubG9hZHMocmVzcG9uc2UuY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRhdGFbImVycm9yIl0sICJvayIpCisKKyAgICAgICAgI1Rlc3QgZm9yIGh0bWwgdGFnIGluIHRoZSBkYXRhCisgICAgICAgIGFyZ3NbJzwnXSA9ICJ0ZXN0aW5nIGh0bWwgdGFnIgorICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LnBvc3QocmV2ZXJzZSgneGhyX2ltcG9ydGxheWVyJyksIGFyZ3MpCisgICAgICAgIGRhdGEgPSBqc29uLmxvYWRzKHJlc3BvbnNlLmNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZGF0YVsiZXJyb3IiXSwgIm9rIikKKworICAgICAgICAjRW1wdHkgZGF0YSBwYXNzZWQKKyAgICAgICAgYXJncyA9IHt9CisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQucG9zdChyZXZlcnNlKCd4aHJfaW1wb3J0bGF5ZXInKSwgYXJncykKKyAgICAgICAgZGF0YSA9IGpzb24ubG9hZHMocmVzcG9uc2UuY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChkYXRhWyJlcnJvciJdLCAib2siKQorCitjbGFzcyBMYW5kaW5nUGFnZVRlc3RzKFRlc3RDYXNlKToKKyAgICAiIiIgVGVzdHMgZm9yIHJlZGlyZWN0cyBvbiB0aGUgbGFuZGluZyBwYWdlICIiIgorICAgICMgZGlzYWJsZSBib2d1cyBweWxpbnQgbWVzc2FnZSBlcnJvcjoKKyAgICAjICJJbnN0YW5jZSBvZiAnV1NHSVJlcXVlc3QnIGhhcyBubyAndXJsJyBtZW1iZXIgKG5vLW1lbWJlcikiCisgICAgIyAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9sYW5kc2NhcGVpby9weWxpbnQtZGphbmdvL2lzc3Vlcy80MikKKyAgICAjIHB5bGludDogZGlzYWJsZT1FMTEwMworCisgICAgTEFORElOR19QQUdFX1RJVExFID0gJ1RoaXMgaXMgVG9hc3RlcicKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIiIiIEFkZCBkZWZhdWx0IHByb2plY3QgbWFudWFsbHkgIiIiCisgICAgICAgIHNlbGYucHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5jcmVhdGVfcHJvamVjdCgnZm9vJywgTm9uZSkKKyAgICAgICAgc2VsZi5wcm9qZWN0LmlzX2RlZmF1bHQgPSBUcnVlCisgICAgICAgIHNlbGYucHJvamVjdC5zYXZlKCkKKworICAgIGRlZiB0ZXN0X29ubHlfZGVmYXVsdF9wcm9qZWN0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgTm8gcHJvamVjdHMgZXhjZXB0IGRlZmF1bHQKKyAgICAgICAgPT4gZ2V0IHRoZSBsYW5kaW5nIHBhZ2UKKyAgICAgICAgIiIiCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuZ2V0KHJldmVyc2UoJ2xhbmRpbmcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuTEFORElOR19QQUdFX1RJVExFIGluIHJlc3BvbnNlLmNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3Byb2plY3RfaGFzX2J1aWxkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgRGVmYXVsdCBwcm9qZWN0IGhhcyBhIGJ1aWxkLCBubyBvdGhlciBwcm9qZWN0cworICAgICAgICA9PiBnZXQgdGhlIGJ1aWxkcyBwYWdlCisgICAgICAgICIiIgorICAgICAgICBub3cgPSB0aW1lem9uZS5ub3coKQorICAgICAgICBidWlsZCA9IEJ1aWxkLm9iamVjdHMuY3JlYXRlKHByb2plY3Q9c2VsZi5wcm9qZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWRfb249bm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZF9vbj1ub3cpCisgICAgICAgIGJ1aWxkLnNhdmUoKQorCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuZ2V0KHJldmVyc2UoJ2xhbmRpbmcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMzAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICdyZXNwb25zZSBzaG91bGQgYmUgYSByZWRpcmVjdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnL2J1aWxkcycgaW4gcmVzcG9uc2UudXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3VsZCByZWRpcmVjdCB0byBidWlsZHMnKQorCisgICAgZGVmIHRlc3RfdXNlcl9wcm9qZWN0X2V4aXN0cyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFVzZXIgaGFzIGFkZGVkIGEgcHJvamVjdCAod2l0aG91dCBidWlsZHMpCisgICAgICAgID0+IGdldCB0aGUgcHJvamVjdHMgcGFnZQorICAgICAgICAiIiIKKyAgICAgICAgdXNlcl9wcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmNyZWF0ZV9wcm9qZWN0KCdmb28nLCBOb25lKQorICAgICAgICB1c2VyX3Byb2plY3Quc2F2ZSgpCisKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5nZXQocmV2ZXJzZSgnbGFuZGluZycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAzMDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc3BvbnNlIHNob3VsZCBiZSBhIHJlZGlyZWN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCcvcHJvamVjdHMnIGluIHJlc3BvbnNlLnVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICdzaG91bGQgcmVkaXJlY3QgdG8gcHJvamVjdHMnKQorCisgICAgZGVmIHRlc3RfdXNlcl9wcm9qZWN0X2hhc19idWlsZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFVzZXIgaGFzIGFkZGVkIGEgcHJvamVjdCAod2l0aCBidWlsZHMpCisgICAgICAgID0+IGdldCB0aGUgYnVpbGRzIHBhZ2UKKyAgICAgICAgIiIiCisgICAgICAgIHVzZXJfcHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5jcmVhdGVfcHJvamVjdCgnZm9vJywgTm9uZSkKKyAgICAgICAgdXNlcl9wcm9qZWN0LnNhdmUoKQorCisgICAgICAgIG5vdyA9IHRpbWV6b25lLm5vdygpCisgICAgICAgIGJ1aWxkID0gQnVpbGQub2JqZWN0cy5jcmVhdGUocHJvamVjdD11c2VyX3Byb2plY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZF9vbj1ub3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkX29uPW5vdykKKyAgICAgICAgYnVpbGQuc2F2ZSgpCisKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5nZXQocmV2ZXJzZSgnbGFuZGluZycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAzMDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc3BvbnNlIHNob3VsZCBiZSBhIHJlZGlyZWN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCcvYnVpbGRzJyBpbiByZXNwb25zZS51cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAnc2hvdWxkIHJlZGlyZWN0IHRvIGJ1aWxkcycpCisKK2NsYXNzIFByb2plY3RzUGFnZVRlc3RzKFRlc3RDYXNlKToKKyAgICAiIiIgVGVzdHMgZm9yIHByb2plY3RzIHBhZ2UgIiIiCisKKyAgICBQUk9KRUNUX05BTUUgPSAnY2xpIGJ1aWxkcycKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIiIiIEFkZCBkZWZhdWx0IHByb2plY3QgbWFudWFsbHkgIiIiCisgICAgICAgIHByb2plY3QgPSBQcm9qZWN0Lm9iamVjdHMuY3JlYXRlX3Byb2plY3Qoc2VsZi5QUk9KRUNUX05BTUUsIE5vbmUpCisgICAgICAgIHNlbGYuZGVmYXVsdF9wcm9qZWN0ID0gcHJvamVjdAorICAgICAgICBzZWxmLmRlZmF1bHRfcHJvamVjdC5pc19kZWZhdWx0ID0gVHJ1ZQorICAgICAgICBzZWxmLmRlZmF1bHRfcHJvamVjdC5zYXZlKCkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfcHJvamVjdF9oaWRkZW4oc2VsZik6CisgICAgICAgICIiIiBUaGUgZGVmYXVsdCBwcm9qZWN0IHNob3VsZCBiZSBoaWRkZW4gaWYgaXQgaGFzIG5vIGJ1aWxkcyAiIiIKKyAgICAgICAgcGFyYW1zID0geyJjb3VudCI6IDEwLCAib3JkZXJieSI6ICJ1cGRhdGVkOi0iLCAicGFnZSI6IDF9CisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuZ2V0KHJldmVyc2UoJ2FsbC1wcm9qZWN0cycpLCBwYXJhbXMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCgndHIgY2xhc3M9ImRhdGEiJyBpbiByZXNwb25zZS5jb250ZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdzaG91bGQgYmUgbm8gcHJvamVjdCByb3dzIGluIHRoZSBwYWdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdChzZWxmLlBST0pFQ1RfTkFNRSBpbiByZXNwb25zZS5jb250ZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdkZWZhdWx0IHByb2plY3QgImNsaSBidWlsZHMiIHNob3VsZCBub3QgYmUgaW4gcGFnZScpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3Byb2plY3RfaGFzX2J1aWxkKHNlbGYpOgorICAgICAgICAiIiIgVGhlIGRlZmF1bHQgcHJvamVjdCBzaG91bGQgYmUgc2hvd24gaWYgaXQgaGFzIGJ1aWxkcyAiIiIKKyAgICAgICAgbm93ID0gdGltZXpvbmUubm93KCkKKyAgICAgICAgYnVpbGQgPSBCdWlsZC5vYmplY3RzLmNyZWF0ZShwcm9qZWN0PXNlbGYuZGVmYXVsdF9wcm9qZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWRfb249bm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZF9vbj1ub3cpCisgICAgICAgIGJ1aWxkLnNhdmUoKQorCisgICAgICAgIHBhcmFtcyA9IHsiY291bnQiOiAxMCwgIm9yZGVyYnkiOiAidXBkYXRlZDotIiwgInBhZ2UiOiAxfQorICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmdldChyZXZlcnNlKCdhbGwtcHJvamVjdHMnKSwgcGFyYW1zKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgndHIgY2xhc3M9ImRhdGEiJyBpbiByZXNwb25zZS5jb250ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3VsZCBiZSBhIHByb2plY3Qgcm93IGluIHRoZSBwYWdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuUFJPSkVDVF9OQU1FIGluIHJlc3BvbnNlLmNvbnRlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAnZGVmYXVsdCBwcm9qZWN0ICJjbGkgYnVpbGRzIiBzaG91bGQgYmUgaW4gcGFnZScpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90eXBlYWhlYWRzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdHlwZWFoZWFkcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWJlYzU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdHlwZWFoZWFkcy5weQpAQCAtMCwwICsxLDE0NSBAQAorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE1ICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworZnJvbSB0b2FzdGVyZ3VpLndpZGdldHMgaW1wb3J0IFRvYXN0ZXJUeXBlQWhlYWQKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgUHJvamVjdAorZnJvbSBkamFuZ28uY29yZS51cmxyZXNvbHZlcnMgaW1wb3J0IHJldmVyc2UKKworY2xhc3MgTGF5ZXJzVHlwZUFoZWFkKFRvYXN0ZXJUeXBlQWhlYWQpOgorICAgICIiIiBUeXBlYWhlYWQgZm9yIGxheWVycyBhdmFpbGFibGUgYW5kIG5vdCBhZGRlZCBpbiB0aGUgY3VycmVudCBwcm9qZWN0J3MKKyAgICBjb25maWd1cmF0aW9uICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgIHN1cGVyKExheWVyc1R5cGVBaGVhZCwgc2VsZikuX19pbml0X18oKQorCisgICAgZGVmIGFwcGx5X3NlYXJjaChzZWxmLCBzZWFyY2hfdGVybSwgcHJqLCByZXF1ZXN0KToKKyAgICAgICAgbGF5ZXJzID0gcHJqLmNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucygpCisgICAgICAgIGxheWVycyA9IGxheWVycy5vcmRlcl9ieSgnbGF5ZXJfX25hbWUnKQorCisgICAgICAgICMgVW5saWtlIHRoZSBvdGhlciB0eXBlYWhlYWRzIHdlIGFsc28gZG9uJ3Qgd2FudCB0byBzaG93IHN1Z2dlc3Rpb25zCisgICAgICAgICMgZm9yIGxheWVycyBhbHJlYWR5IGluIHRoZSBwcm9qZWN0IHVubGVzcyByZXF1aXJlZCBzdWNoIGFzIHdoZW4gYWRkaW5nCisgICAgICAgICMgbGF5ZXJkZXBzIHRvIGEgbmV3IGxheWVyLgorICAgICAgICBpZiAoImluY2x1ZGVfYWRkZWQiIGluIHJlcXVlc3QuR0VUIGFuZAorICAgICAgICAgICAgICAgIHJlcXVlc3QuR0VUWydpbmNsdWRlX2FkZGVkJ10gIT0gInRydWUiKToKKyAgICAgICAgICAgIGxheWVycyA9IGxheWVycy5leGNsdWRlKHBrX19pbj1wcmoucHJvamVjdGxheWVyX2VxdWl2YWxlbnRfc2V0KQorCisgICAgICAgIHByaW1hcnlfcmVzdWx0cyA9IGxheWVycy5maWx0ZXIobGF5ZXJfX25hbWVfX2lzdGFydHN3aXRoPXNlYXJjaF90ZXJtKQorICAgICAgICBzZWNvbmRhcnlfcmVzdWx0cyA9IGxheWVycy5maWx0ZXIobGF5ZXJfX25hbWVfX2ljb250YWlucz1zZWFyY2hfdGVybSkuZXhjbHVkZShwa19faW49cHJpbWFyeV9yZXN1bHRzKQorCisgICAgICAgIHJlc3VsdHMgPSBbXQorCisgICAgICAgIGZvciBsYXllcl92ZXJzaW9uIGluIGxpc3QocHJpbWFyeV9yZXN1bHRzKSArIGxpc3Qoc2Vjb25kYXJ5X3Jlc3VsdHMpOgorICAgICAgICAgICAgdmNzX3JlZmVyZW5jZSA9IGxheWVyX3ZlcnNpb24uZ2V0X3Zjc19yZWZlcmVuY2UoKQorCisgICAgICAgICAgICBkZXRhaWwgPSAiWyAlcyB8ICVzIF0iICUgKGxheWVyX3ZlcnNpb24ubGF5ZXIudmNzX3VybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmNzX3JlZmVyZW5jZSkKKyAgICAgICAgICAgIG5lZWRlZF9maWVsZHMgPSB7CisgICAgICAgICAgICAgICAgJ2lkJyA6IGxheWVyX3ZlcnNpb24ucGssCisgICAgICAgICAgICAgICAgJ25hbWUnIDogbGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lLAorICAgICAgICAgICAgICAgICdsYXllcmRldGFpbHVybCcgOiBsYXllcl92ZXJzaW9uLmdldF9kZXRhaWxzcGFnZV91cmwocHJqLnBrKSwKKyAgICAgICAgICAgICAgICAndmNzX3VybCcgOiBsYXllcl92ZXJzaW9uLmxheWVyLnZjc191cmwsCisgICAgICAgICAgICAgICAgJ3Zjc19yZWZlcmVuY2UnIDogdmNzX3JlZmVyZW5jZSwKKyAgICAgICAgICAgICAgICAnZGV0YWlsJyA6IGRldGFpbCwKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobmVlZGVkX2ZpZWxkcykKKworICAgICAgICByZXR1cm4gcmVzdWx0cworCitjbGFzcyBNYWNoaW5lc1R5cGVBaGVhZChUb2FzdGVyVHlwZUFoZWFkKToKKyAgICAiIiIgVHlwZWFoZWFkIGZvciBhbGwgdGhlIG1hY2hpbmVzIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBwcm9qZWN0J3MKKyAgICBjb25maWd1cmF0aW9uICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoTWFjaGluZXNUeXBlQWhlYWQsIHNlbGYpLl9faW5pdF9fKCkKKworICAgIGRlZiBhcHBseV9zZWFyY2goc2VsZiwgc2VhcmNoX3Rlcm0sIHByaiwgcmVxdWVzdCk6CisgICAgICAgIG1hY2hpbmVzID0gcHJqLmdldF9hdmFpbGFibGVfbWFjaGluZXMoKQorICAgICAgICBtYWNoaW5lcyA9IG1hY2hpbmVzLm9yZGVyX2J5KCJuYW1lIikKKworICAgICAgICBwcmltYXJ5X3Jlc3VsdHMgPSBtYWNoaW5lcy5maWx0ZXIobmFtZV9faXN0YXJ0c3dpdGg9c2VhcmNoX3Rlcm0pCisgICAgICAgIHNlY29uZGFyeV9yZXN1bHRzID0gbWFjaGluZXMuZmlsdGVyKG5hbWVfX2ljb250YWlucz1zZWFyY2hfdGVybSkuZXhjbHVkZShwa19faW49cHJpbWFyeV9yZXN1bHRzKQorICAgICAgICB0ZXJ0aWFyeV9yZXN1bHRzID0gbWFjaGluZXMuZmlsdGVyKGxheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lX19pY29udGFpbnM9c2VhcmNoX3Rlcm0pLmV4Y2x1ZGUocGtfX2luPXByaW1hcnlfcmVzdWx0cykuZXhjbHVkZShwa19faW49c2Vjb25kYXJ5X3Jlc3VsdHMpCisKKyAgICAgICAgcmVzdWx0cyA9IFtdCisKKyAgICAgICAgZm9yIG1hY2hpbmUgaW4gbGlzdChwcmltYXJ5X3Jlc3VsdHMpICsgbGlzdChzZWNvbmRhcnlfcmVzdWx0cykgKyBsaXN0KHRlcnRpYXJ5X3Jlc3VsdHMpOgorCisgICAgICAgICAgICBkZXRhaWwgPSAiWyAlcyBdIiAlIChtYWNoaW5lLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZSkKKyAgICAgICAgICAgIG5lZWRlZF9maWVsZHMgPSB7CisgICAgICAgICAgICAgICAgJ2lkJyA6IG1hY2hpbmUucGssCisgICAgICAgICAgICAgICAgJ25hbWUnIDogbWFjaGluZS5uYW1lLAorICAgICAgICAgICAgICAgICdkZXRhaWwnIDogZGV0YWlsLAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChuZWVkZWRfZmllbGRzKQorCisgICAgICAgIHJldHVybiByZXN1bHRzCisKK2NsYXNzIFJlY2lwZXNUeXBlQWhlYWQoVG9hc3RlclR5cGVBaGVhZCk6CisgICAgIiIiIFR5cGVhaGVhZCBmb3IgYWxsIHRoZSByZWNpcGVzIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBwcm9qZWN0J3MKKyAgICBjb25maWd1cmF0aW9uICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoUmVjaXBlc1R5cGVBaGVhZCwgc2VsZikuX19pbml0X18oKQorCisgICAgZGVmIGFwcGx5X3NlYXJjaChzZWxmLCBzZWFyY2hfdGVybSwgcHJqLCByZXF1ZXN0KToKKyAgICAgICAgcmVjaXBlcyA9IHByai5nZXRfYXZhaWxhYmxlX3JlY2lwZXMoKQorICAgICAgICByZWNpcGVzID0gcmVjaXBlcy5vcmRlcl9ieSgibmFtZSIpCisKKworICAgICAgICBwcmltYXJ5X3Jlc3VsdHMgPSByZWNpcGVzLmZpbHRlcihuYW1lX19pc3RhcnRzd2l0aD1zZWFyY2hfdGVybSkKKyAgICAgICAgc2Vjb25kYXJ5X3Jlc3VsdHMgPSByZWNpcGVzLmZpbHRlcihuYW1lX19pY29udGFpbnM9c2VhcmNoX3Rlcm0pLmV4Y2x1ZGUocGtfX2luPXByaW1hcnlfcmVzdWx0cykKKyAgICAgICAgdGVydGlhcnlfcmVzdWx0cyA9IHJlY2lwZXMuZmlsdGVyKGxheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lX19pY29udGFpbnM9c2VhcmNoX3Rlcm0pLmV4Y2x1ZGUocGtfX2luPXByaW1hcnlfcmVzdWx0cykuZXhjbHVkZShwa19faW49c2Vjb25kYXJ5X3Jlc3VsdHMpCisKKyAgICAgICAgcmVzdWx0cyA9IFtdCisKKyAgICAgICAgZm9yIHJlY2lwZSBpbiBsaXN0KHByaW1hcnlfcmVzdWx0cykgKyBsaXN0KHNlY29uZGFyeV9yZXN1bHRzKSArIGxpc3QodGVydGlhcnlfcmVzdWx0cyk6CisKKyAgICAgICAgICAgIGRldGFpbCA9ICJbICVzIF0iICUgKHJlY2lwZS5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWUpCisgICAgICAgICAgICBuZWVkZWRfZmllbGRzID0geworICAgICAgICAgICAgICAgICdpZCcgOiByZWNpcGUucGssCisgICAgICAgICAgICAgICAgJ25hbWUnIDogcmVjaXBlLm5hbWUsCisgICAgICAgICAgICAgICAgJ2RldGFpbCcgOiBkZXRhaWwsCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG5lZWRlZF9maWVsZHMpCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMKKworY2xhc3MgUHJvamVjdHNUeXBlQWhlYWQoVG9hc3RlclR5cGVBaGVhZCk6CisgICAgIiIiIFR5cGVhaGVhZCBmb3IgYWxsIHRoZSBwcm9qZWN0cyAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKFByb2plY3RzVHlwZUFoZWFkLCBzZWxmKS5fX2luaXRfXygpCisKKyAgICBkZWYgYXBwbHlfc2VhcmNoKHNlbGYsIHNlYXJjaF90ZXJtLCBwcmosIHJlcXVlc3QpOgorICAgICAgICBwcm9qZWN0cyA9IFByb2plY3Qub2JqZWN0cy5hbGwoKS5vcmRlcl9ieSgibmFtZSIpCisKKyAgICAgICAgcHJpbWFyeV9yZXN1bHRzID0gcHJvamVjdHMuZmlsdGVyKG5hbWVfX2lzdGFydHN3aXRoPXNlYXJjaF90ZXJtKQorICAgICAgICBzZWNvbmRhcnlfcmVzdWx0cyA9IHByb2plY3RzLmZpbHRlcihuYW1lX19pY29udGFpbnM9c2VhcmNoX3Rlcm0pLmV4Y2x1ZGUocGtfX2luPXByaW1hcnlfcmVzdWx0cykKKworICAgICAgICByZXN1bHRzID0gW10KKworICAgICAgICBmb3IgcHJvamVjdCBpbiBsaXN0KHByaW1hcnlfcmVzdWx0cykgKyBsaXN0KHNlY29uZGFyeV9yZXN1bHRzKToKKyAgICAgICAgICAgIG5lZWRlZF9maWVsZHMgPSB7CisgICAgICAgICAgICAgICAgJ2lkJyA6IHByb2plY3QucGssCisgICAgICAgICAgICAgICAgJ25hbWUnIDogcHJvamVjdC5uYW1lLAorICAgICAgICAgICAgICAgICdkZXRhaWwnIDogIiIsCisgICAgICAgICAgICAgICAgJ3Byb2plY3RQYWdlVXJsJyA6IHJldmVyc2UoJ3Byb2plY3QnLCBhcmdzPShwcm9qZWN0LnBrLCkpCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG5lZWRlZF9maWVsZHMpCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3VybHMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS91cmxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZTU3NjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS91cmxzLnB5CkBAIC0wLDAgKzEsMTUzIEBACisjCisjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitmcm9tIGRqYW5nby5jb25mLnVybHMgaW1wb3J0IHBhdHRlcm5zLCBpbmNsdWRlLCB1cmwKK2Zyb20gZGphbmdvLnZpZXdzLmdlbmVyaWMgaW1wb3J0IFJlZGlyZWN0VmlldywgVGVtcGxhdGVWaWV3CisKK2Zyb20gZGphbmdvLmh0dHAgaW1wb3J0IEh0dHBSZXNwb25zZUJhZFJlcXVlc3QKK2Zyb20gdG9hc3Rlcmd1aSBpbXBvcnQgdGFibGVzCitmcm9tIHRvYXN0ZXJndWkgaW1wb3J0IHR5cGVhaGVhZHMKKwordXJscGF0dGVybnMgPSBwYXR0ZXJucygndG9hc3Rlcmd1aS52aWV3cycsCisgICAgICAgICMgbGFuZGluZyBwYWdlCisgICAgICAgIHVybChyJ15sYW5kaW5nLyQnLCAnbGFuZGluZycsIG5hbWU9J2xhbmRpbmcnKSwKKworICAgICAgICB1cmwocideYnVpbGRzLyQnLCAnYnVpbGRzJywgbmFtZT0nYWxsLWJ1aWxkcycpLAorICAgICAgICAjIGJ1aWxkIGluZm8gbmF2aWdhdGlvbgorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykkJywgJ2J1aWxkZGFzaGJvYXJkJywgbmFtZT0iYnVpbGRkYXNoYm9hcmQiKSwKKworICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvdGFza3MvJCcsICd0YXNrcycsIG5hbWU9J3Rhc2tzJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS90YXNrcy8oP1A8dGFza19pZD5cZCspLyQnLCAndGFza3NfdGFzaycsIG5hbWU9J3Rhc2tzX3Rhc2snKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3Rhc2svKD9QPHRhc2tfaWQ+XGQrKSQnLCAndGFzaycsIG5hbWU9J3Rhc2snKSwKKworICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvcmVjaXBlcy8kJywgJ3JlY2lwZXMnLCBuYW1lPSdyZWNpcGVzJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9yZWNpcGUvKD9QPHJlY2lwZV9pZD5cZCspL2FjdGl2ZV90YWIvKD9QPGFjdGl2ZV90YWI+XGR7MX0pJCcsICdyZWNpcGUnLCBuYW1lPSdyZWNpcGUnKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3JlY2lwZS8oP1A8cmVjaXBlX2lkPlxkKykkJywgJ3JlY2lwZScsIG5hbWU9J3JlY2lwZScpLAorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvcmVjaXBlX3BhY2thZ2VzLyg/UDxyZWNpcGVfaWQ+XGQrKSQnLCAncmVjaXBlX3BhY2thZ2VzJywgbmFtZT0ncmVjaXBlX3BhY2thZ2VzJyksCisKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3BhY2thZ2VzLyQnLCAnYnBhY2thZ2UnLCBuYW1lPSdwYWNrYWdlcycpLAorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvcGFja2FnZS8oP1A8cGFja2FnZV9pZD5cZCspJCcsICdwYWNrYWdlX2J1aWx0X2RldGFpbCcsCisgICAgICAgICAgICAgICAgbmFtZT0ncGFja2FnZV9idWlsdF9kZXRhaWwnKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3BhY2thZ2VfYnVpbHRfZGVwZW5kZW5jaWVzLyg/UDxwYWNrYWdlX2lkPlxkKykkJywKKyAgICAgICAgICAgICdwYWNrYWdlX2J1aWx0X2RlcGVuZGVuY2llcycsIG5hbWU9J3BhY2thZ2VfYnVpbHRfZGVwZW5kZW5jaWVzJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9wYWNrYWdlX2luY2x1ZGVkX2RldGFpbC8oP1A8dGFyZ2V0X2lkPlxkKykvKD9QPHBhY2thZ2VfaWQ+XGQrKSQnLAorICAgICAgICAgICAgJ3BhY2thZ2VfaW5jbHVkZWRfZGV0YWlsJywgbmFtZT0ncGFja2FnZV9pbmNsdWRlZF9kZXRhaWwnKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3BhY2thZ2VfaW5jbHVkZWRfZGVwZW5kZW5jaWVzLyg/UDx0YXJnZXRfaWQ+XGQrKS8oP1A8cGFja2FnZV9pZD5cZCspJCcsCisgICAgICAgICAgICAncGFja2FnZV9pbmNsdWRlZF9kZXBlbmRlbmNpZXMnLCBuYW1lPSdwYWNrYWdlX2luY2x1ZGVkX2RlcGVuZGVuY2llcycpLAorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvcGFja2FnZV9pbmNsdWRlZF9yZXZlcnNlX2RlcGVuZGVuY2llcy8oP1A8dGFyZ2V0X2lkPlxkKykvKD9QPHBhY2thZ2VfaWQ+XGQrKSQnLAorICAgICAgICAgICAgJ3BhY2thZ2VfaW5jbHVkZWRfcmV2ZXJzZV9kZXBlbmRlbmNpZXMnLCBuYW1lPSdwYWNrYWdlX2luY2x1ZGVkX3JldmVyc2VfZGVwZW5kZW5jaWVzJyksCisKKyAgICAgICAgIyBpbWFnZXMgYXJlIGtub3duIGFzIHRhcmdldHMgaW4gdGhlIGludGVybmFsIG1vZGVsCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS90YXJnZXQvKD9QPHRhcmdldF9pZD5cZCspJCcsICd0YXJnZXQnLCBuYW1lPSd0YXJnZXQnKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3RhcmdldC8oP1A8dGFyZ2V0X2lkPlxkKykvdGFyZ2V0cGtnJCcsICd0YXJnZXRwa2cnLCBuYW1lPSd0YXJnZXRwa2cnKSwKKyAgICAgICAgdXJsKHInXmRlbnRyaWVzL2J1aWxkLyg/UDxidWlsZF9pZD5cZCspL3RhcmdldC8oP1A8dGFyZ2V0X2lkPlxkKykkJywgJ3hocl9kaXJpbmZvJywgbmFtZT0nZGlyaW5mb19hamF4JyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS90YXJnZXQvKD9QPHRhcmdldF9pZD5cZCspL2RpcmluZm8kJywgJ2RpcmluZm8nLCBuYW1lPSdkaXJpbmZvJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS90YXJnZXQvKD9QPHRhcmdldF9pZD5cZCspL2RpcmluZm9fZmlsZXBhdGgvXyg/UDxmaWxlX3BhdGg+KD86L1teL1xuXSspKikkJywgJ2RpcmluZm8nLCBuYW1lPSdkaXJpbmZvX2ZpbGVwYXRoJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9jb25maWd1cmF0aW9uJCcsICdjb25maWd1cmF0aW9uJywgbmFtZT0nY29uZmlndXJhdGlvbicpLAorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvY29uZmlndmFycyQnLCAnY29uZmlndmFycycsIG5hbWU9J2NvbmZpZ3ZhcnMnKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL2J1aWxkdGltZSQnLCAnYnVpbGR0aW1lJywgbmFtZT0nYnVpbGR0aW1lJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9jcHV1c2FnZSQnLCAnY3B1dXNhZ2UnLCBuYW1lPSdjcHV1c2FnZScpLAorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvZGlza2lvJCcsICdkaXNraW8nLCBuYW1lPSdkaXNraW8nKSwKKworICAgICAgICAjIGltYWdlIGluZm9ybWF0aW9uIGRpcgorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvdGFyZ2V0Lyg/UDx0YXJnZXRfaWQ+XGQrKS9wYWNrYWdlZmlsZS8oP1A8cGFja2FnZWZpbGVfaWQ+XGQrKSQnLAorICAgICAgICAgICAgICdpbWFnZV9pbmZvcm1hdGlvbl9kaXInLCBuYW1lPSdpbWFnZV9pbmZvcm1hdGlvbl9kaXInKSwKKworICAgICAgICAjIGJ1aWxkIGRvd25sb2FkIGFydGlmYWN0CisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9hcnRpZmFjdC8oP1A8YXJ0aWZhY3RfdHlwZT5cdyspL2lkLyg/UDxhcnRpZmFjdF9pZD5cdyspJywgJ2J1aWxkX2FydGlmYWN0JywgbmFtZT0iYnVpbGRfYXJ0aWZhY3QiKSwKKworICAgICAgICAjIHByb2plY3QgVVJMcworICAgICAgICB1cmwocidebmV3cHJvamVjdC8kJywgJ25ld3Byb2plY3QnLCBuYW1lPSduZXdwcm9qZWN0JyksCisKKworICAgICAgICB1cmwocidecHJvamVjdHMvJCcsICdwcm9qZWN0cycsIG5hbWU9J2FsbC1wcm9qZWN0cycpLAorCisgICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS8kJywgJ3Byb2plY3QnLCBuYW1lPSdwcm9qZWN0JyksCisgICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS9jb25maWd1cmF0aW9uJCcsICdwcm9qZWN0Y29uZicsIG5hbWU9J3Byb2plY3Rjb25mJyksCisgICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS9idWlsZHMvJCcsICdwcm9qZWN0YnVpbGRzJywgbmFtZT0ncHJvamVjdGJ1aWxkcycpLAorCisgICAgICAgICMgdGhlIGltcG9ydCBsYXllciBpcyBhIHByb2plY3Qtc3BlY2lmaWMgZnVuY3Rpb25hbGl0eTsKKyAgICAgICAgdXJsKHInXnByb2plY3QvKD9QPHBpZD5cZCspL2ltcG9ydGxheWVyJCcsICdpbXBvcnRsYXllcicsIG5hbWU9J2ltcG9ydGxheWVyJyksCisKKyAgICAgICAgIyB0aGUgdGFibGUgcGFnZXMgdGhhdCBoYXZlIGJlZW4gY29udmVydGVkIHRvIFRvYXN0ZXJUYWJsZSB3aWRnZXQKKyAgICAgICAgdXJsKHInXnByb2plY3QvKD9QPHBpZD5cZCspL21hY2hpbmVzLyQnLAorICAgICAgICAgICAgdGFibGVzLk1hY2hpbmVzVGFibGUuYXNfdmlldyh0ZW1wbGF0ZV9uYW1lPSJnZW5lcmljLXRvYXN0ZXJ0YWJsZS1wYWdlLmh0bWwiKSwKKyAgICAgICAgICAgIHsgJ3RhYmxlX25hbWUnOiB0YWJsZXMuTWFjaGluZXNUYWJsZS5fX25hbWVfXy5sb3dlcigpLAorICAgICAgICAgICAgICAndGl0bGUnIDogJ0NvbXBhdGlibGUgbWFjaGluZXMnIH0sCisgICAgICAgICAgICBuYW1lPSJwcm9qZWN0bWFjaGluZXMiKSwKKworICAgICAgICB1cmwocidecHJvamVjdC8oP1A8cGlkPlxkKykvcmVjaXBlcy8kJywKKyAgICAgICAgICAgIHRhYmxlcy5SZWNpcGVzVGFibGUuYXNfdmlldyh0ZW1wbGF0ZV9uYW1lPSJnZW5lcmljLXRvYXN0ZXJ0YWJsZS1wYWdlLmh0bWwiKSwKKyAgICAgICAgICAgIHsgJ3RhYmxlX25hbWUnOiB0YWJsZXMuUmVjaXBlc1RhYmxlLl9fbmFtZV9fLmxvd2VyKCksCisgICAgICAgICAgICAgICd0aXRsZScgOiAnQ29tcGF0aWJsZSByZWNpcGVzJyB9LAorICAgICAgICAgICAgbmFtZT0icHJvamVjdHRhcmdldHMiKSwKKworICAgICAgICB1cmwocidecHJvamVjdC8oP1A8cGlkPlxkKykvYXZhaWxhYmxlcmVjaXBlcy8kJywKKyAgICAgICAgICAgIHRhYmxlcy5Qcm9qZWN0TGF5ZXJzUmVjaXBlc1RhYmxlLmFzX3ZpZXcodGVtcGxhdGVfbmFtZT0iZ2VuZXJpYy10b2FzdGVydGFibGUtcGFnZS5odG1sIiksCisgICAgICAgICAgICB7ICd0YWJsZV9uYW1lJzogdGFibGVzLlByb2plY3RMYXllcnNSZWNpcGVzVGFibGUuX19uYW1lX18ubG93ZXIoKSwKKyAgICAgICAgICAgICAgJ3RpdGxlJyA6ICdSZWNpcGVzIGF2YWlsYWJsZSBmb3IgbGF5ZXJzIGluIHRoZSBjdXJyZW50IHByb2plY3QnIH0sCisgICAgICAgICAgICBuYW1lPSJwcm9qZWN0YXZhaWxhYmxldGFyZ2V0cyIpLAorCisgICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS9sYXllcnMvJCcsCisgICAgICAgICAgICB0YWJsZXMuTGF5ZXJzVGFibGUuYXNfdmlldyh0ZW1wbGF0ZV9uYW1lPSJnZW5lcmljLXRvYXN0ZXJ0YWJsZS1wYWdlLmh0bWwiKSwKKyAgICAgICAgICAgIHsgJ3RhYmxlX25hbWUnOiB0YWJsZXMuTGF5ZXJzVGFibGUuX19uYW1lX18ubG93ZXIoKSwKKyAgICAgICAgICAgICAgJ3RpdGxlJyA6ICdDb21wYXRpYmxlIGxheWVycycgfSwKKyAgICAgICAgICAgIG5hbWU9InByb2plY3RsYXllcnMiKSwKKworICAgICAgICB1cmwocidecHJvamVjdC8oP1A8cGlkPlxkKykvbGF5ZXIvKD9QPGxheWVyaWQ+XGQrKSQnLAorICAgICAgICAgICAgJ2xheWVyZGV0YWlscycsIG5hbWU9J2xheWVyZGV0YWlscycpLAorCisgICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS9sYXllci8oP1A8bGF5ZXJpZD5cZCspL3JlY2lwZXMvJCcsCisgICAgICAgICAgICB0YWJsZXMuTGF5ZXJSZWNpcGVzVGFibGUuYXNfdmlldyh0ZW1wbGF0ZV9uYW1lPSJnZW5lcmljLXRvYXN0ZXJ0YWJsZS1wYWdlLmh0bWwiKSwKKyAgICAgICAgICAgIHsgJ3RhYmxlX25hbWUnOiB0YWJsZXMuTGF5ZXJSZWNpcGVzVGFibGUuX19uYW1lX18ubG93ZXIoKSwKKyAgICAgICAgICAgICAgJ3RpdGxlJyA6ICdBbGwgcmVjaXBlcyBpbiBsYXllcicgfSwKKyAgICAgICAgICAgICBuYW1lPXRhYmxlcy5MYXllclJlY2lwZXNUYWJsZS5fX25hbWVfXy5sb3dlcigpKSwKKworICAgICAgICB1cmwocidecHJvamVjdC8oP1A8cGlkPlxkKykvbGF5ZXIvKD9QPGxheWVyaWQ+XGQrKS9tYWNoaW5lcy8kJywKKyAgICAgICAgICAgIHRhYmxlcy5MYXllck1hY2hpbmVzVGFibGUuYXNfdmlldyh0ZW1wbGF0ZV9uYW1lPSJnZW5lcmljLXRvYXN0ZXJ0YWJsZS1wYWdlLmh0bWwiKSwKKyAgICAgICAgICAgIHsgJ3RhYmxlX25hbWUnOiB0YWJsZXMuTGF5ZXJNYWNoaW5lc1RhYmxlLl9fbmFtZV9fLmxvd2VyKCksCisgICAgICAgICAgICAgICd0aXRsZScgOiAnQWxsIG1hY2hpbmVzIGluIGxheWVyJyB9LAorICAgICAgICAgICAgbmFtZT10YWJsZXMuTGF5ZXJNYWNoaW5lc1RhYmxlLl9fbmFtZV9fLmxvd2VyKCkpLAorCisKKyAgICAgICAgIyB0eXBlYWhlYWQgYXBpIGVuZCBwb2ludHMKKyAgICAgICAgdXJsKHInXnhocl90eXBlYWhlYWQvKD9QPHBpZD5cZCspL2xheWVycyQnLAorICAgICAgICAgICAgdHlwZWFoZWFkcy5MYXllcnNUeXBlQWhlYWQuYXNfdmlldygpLCBuYW1lPSd4aHJfbGF5ZXJzdHlwZWFoZWFkJyksCisgICAgICAgIHVybChyJ154aHJfdHlwZWFoZWFkLyg/UDxwaWQ+XGQrKS9tYWNoaW5lcyQnLAorICAgICAgICAgICAgdHlwZWFoZWFkcy5NYWNoaW5lc1R5cGVBaGVhZC5hc192aWV3KCksIG5hbWU9J3hocl9tYWNoaW5lc3R5cGVhaGVhZCcpLAorICAgICAgICB1cmwocideeGhyX3R5cGVhaGVhZC8oP1A8cGlkPlxkKykvcmVjaXBlcyQnLAorICAgICAgICAgICAgdHlwZWFoZWFkcy5SZWNpcGVzVHlwZUFoZWFkLmFzX3ZpZXcoKSwgbmFtZT0neGhyX3JlY2lwZXN0eXBlYWhlYWQnKSwKKyAgICAgICAgdXJsKHInXnhocl90eXBlYWhlYWQvcHJvamVjdHMkJywKKyAgICAgICAgICAgIHR5cGVhaGVhZHMuUHJvamVjdHNUeXBlQWhlYWQuYXNfdmlldygpLCBuYW1lPSd4aHJfcHJvamVjdHN0eXBlYWhlYWQnKSwKKworCisKKyAgICAgICAgdXJsKHInXnhocl90ZXN0cmVsZWFzZWNoYW5nZS8oP1A8cGlkPlxkKykkJywgJ3hocl90ZXN0cmVsZWFzZWNoYW5nZScsCisgICAgICAgICAgICBuYW1lPSd4aHJfdGVzdHJlbGVhc2VjaGFuZ2UnKSwKKyAgICAgICAgdXJsKHInXnhocl9jb25maWd2YXJlZGl0Lyg/UDxwaWQ+XGQrKSQnLCAneGhyX2NvbmZpZ3ZhcmVkaXQnLAorICAgICAgICAgICAgbmFtZT0neGhyX2NvbmZpZ3ZhcmVkaXQnKSwKKworICAgICAgICB1cmwocideeGhyX2ltcG9ydGxheWVyLyQnLCAneGhyX2ltcG9ydGxheWVyJywgbmFtZT0neGhyX2ltcG9ydGxheWVyJyksCisgICAgICAgIHVybChyJ154aHJfdXBkYXRlbGF5ZXIvJCcsICd4aHJfdXBkYXRlbGF5ZXInLCBuYW1lPSd4aHJfdXBkYXRlbGF5ZXInKSwKKworICAgICAgICAjIEpTIFVuaXQgdGVzdHMKKyAgICAgICAgdXJsKHInXmpzLXVuaXQtdGVzdHMvJCcsICdqc3VuaXR0ZXN0cycsIG5hbWU9J2pzLXVuaXQtdGVzdHMnKSwKKworICAgICAgICAjIGRlZmF1bHQgcmVkaXJlY3Rpb24KKyAgICAgICAgdXJsKHInXiQnLCBSZWRpcmVjdFZpZXcuYXNfdmlldyggdXJsPSAnbGFuZGluZycpKSwKKykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3ZpZXdzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdmlld3MucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGU4ZjY5ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3ZpZXdzLnB5CkBAIC0wLDAgKzEsMjkxMiBAQAorIworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyMgcHlsaW50OiBkaXNhYmxlPW1ldGhvZC1oaWRkZW4KKyMgR2l2ZXMgRTo4NDgsIDQ6IEFuIGF0dHJpYnV0ZSBkZWZpbmVkIGluIGpzb24uZW5jb2RlciBsaW5lIDE2MiBoaWRlcyB0aGlzIG1ldGhvZCAobWV0aG9kLWhpZGRlbikKKyMgd2hpY2ggaXMgYW4gaW52YWxpZCB3YXJuaW5nCisKK2ltcG9ydCBvcGVyYXRvcixyZQorCitmcm9tIGRqYW5nby5kYi5tb2RlbHMgaW1wb3J0IEYsIFEsIFN1bSwgQ291bnQsIE1heAorZnJvbSBkamFuZ28uZGIgaW1wb3J0IEludGVncml0eUVycm9yCitmcm9tIGRqYW5nby5zaG9ydGN1dHMgaW1wb3J0IHJlbmRlciwgcmVkaXJlY3QKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgQnVpbGQsIFRhcmdldCwgVGFzaywgTGF5ZXIsIExheWVyX1ZlcnNpb24sIFJlY2lwZSwgTG9nTWVzc2FnZSwgVmFyaWFibGUKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgVGFza19EZXBlbmRlbmN5LCBSZWNpcGVfRGVwZW5kZW5jeSwgUGFja2FnZSwgUGFja2FnZV9GaWxlLCBQYWNrYWdlX0RlcGVuZGVuY3kKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlLCBUYXJnZXRfRmlsZSwgVGFyZ2V0X0ltYWdlX0ZpbGUsIEJ1aWxkQXJ0aWZhY3QKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgQml0YmFrZVZlcnNpb24KK2Zyb20gYmxkY29udHJvbCBpbXBvcnQgYmJjb250cm9sbGVyCitmcm9tIGRqYW5nby52aWV3cy5kZWNvcmF0b3JzLmNhY2hlIGltcG9ydCBjYWNoZV9jb250cm9sCitmcm9tIGRqYW5nby5jb3JlLnVybHJlc29sdmVycyBpbXBvcnQgcmV2ZXJzZSwgcmVzb2x2ZQorZnJvbSBkamFuZ28uY29yZS5leGNlcHRpb25zIGltcG9ydCBNdWx0aXBsZU9iamVjdHNSZXR1cm5lZAorZnJvbSBkamFuZ28uY29yZS5wYWdpbmF0b3IgaW1wb3J0IFBhZ2luYXRvciwgRW1wdHlQYWdlLCBQYWdlTm90QW5JbnRlZ2VyCitmcm9tIGRqYW5nby5odHRwIGltcG9ydCBIdHRwUmVzcG9uc2VCYWRSZXF1ZXN0LCBIdHRwUmVzcG9uc2VOb3RGb3VuZAorZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IHRpbWV6b25lCitmcm9tIGRqYW5nby51dGlscy5odG1sIGltcG9ydCBlc2NhcGUKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IHRpbWVkZWx0YSwgZGF0ZXRpbWUsIGRhdGUKK2Zyb20gZGphbmdvLnV0aWxzIGltcG9ydCBmb3JtYXRzCitmcm9tIHRvYXN0ZXJndWkudGVtcGxhdGV0YWdzLnByb2plY3R0YWdzIGltcG9ydCBqc29uIGFzIGpzb25maWx0ZXIKK2ltcG9ydCBqc29uCitmcm9tIG9zLnBhdGggaW1wb3J0IGRpcm5hbWUKK2ltcG9ydCBpdGVydG9vbHMKKworaW1wb3J0IGxvZ2dpbmcKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInRvYXN0ZXIiKQorCisjIGFsbCBuZXcgc2Vzc2lvbnMgc2hvdWxkIGNvbWUgdGhyb3VnaCB0aGUgbGFuZGluZyBwYWdlOworIyBkZXRlcm1pbmUgaW4gd2hpY2ggbW9kZSB3ZSBhcmUgcnVubmluZyBpbiwgYW5kIHJlZGlyZWN0IGFwcHJvcHJpYXRlbHkKK2RlZiBsYW5kaW5nKHJlcXVlc3QpOgorICAgICMgd2Ugb25seSByZWRpcmVjdCB0byBwcm9qZWN0cyBwYWdlIGlmIHRoZXJlIGlzIGEgdXNlci1nZW5lcmF0ZWQgcHJvamVjdAorICAgIHVzZXJfcHJvamVjdHMgPSBQcm9qZWN0Lm9iamVjdHMuZmlsdGVyKGlzX2RlZmF1bHQgPSBGYWxzZSkKKyAgICBoYXNfdXNlcl9wcm9qZWN0ID0gdXNlcl9wcm9qZWN0cy5jb3VudCgpID4gMAorCisgICAgaWYgQnVpbGQub2JqZWN0cy5jb3VudCgpID09IDAgYW5kIGhhc191c2VyX3Byb2plY3Q6CisgICAgICAgIHJldHVybiByZWRpcmVjdChyZXZlcnNlKCdhbGwtcHJvamVjdHMnKSwgcGVybWFuZW50ID0gRmFsc2UpCisKKyAgICBpZiBCdWlsZC5vYmplY3RzLmFsbCgpLmNvdW50KCkgPiAwOgorICAgICAgICByZXR1cm4gcmVkaXJlY3QocmV2ZXJzZSgnYWxsLWJ1aWxkcycpLCBwZXJtYW5lbnQgPSBGYWxzZSkKKworICAgIGNvbnRleHQgPSB7J2x2c19ub3MnIDogTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmFsbCgpLmNvdW50KCl9CisKKyAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICdsYW5kaW5nLmh0bWwnLCBjb250ZXh0KQorCisKKworIyByZXR1cm5zIGEgbGlzdCBmb3IgbW9zdCByZWNlbnQgYnVpbGRzOworZGVmIF9nZXRfbGF0ZXN0X2J1aWxkcyhwcmo9Tm9uZSk6CisgICAgcXVlcnlzZXQgPSBCdWlsZC5vYmplY3RzLmFsbCgpCisKKyAgICBpZiBwcmogaXMgbm90IE5vbmU6CisgICAgICAgIHF1ZXJ5c2V0ID0gcXVlcnlzZXQuZmlsdGVyKHByb2plY3QgPSBwcmopCisKKyAgICByZXR1cm4gbGlzdChpdGVydG9vbHMuY2hhaW4oCisgICAgICAgIHF1ZXJ5c2V0LmZpbHRlcihvdXRjb21lPUJ1aWxkLklOX1BST0dSRVNTKS5vcmRlcl9ieSgiLXBrIiksCisgICAgICAgIHF1ZXJ5c2V0LmZpbHRlcihvdXRjb21lX19sdD1CdWlsZC5JTl9QUk9HUkVTUykub3JkZXJfYnkoIi1wayIpWzozXSApKQorCisKKyMgYSBKU09OLWFibGUgZGljdCBvZiByZWNlbnQgYnVpbGRzOyBmb3IgdXNlIGluIHRoZSBQcm9qZWN0IHBhZ2UsIHhocl8gdXBkYXRlcywgIGFuZCBvdGhlciBwbGFjZXMsIGFzIG5lZWRlZAorZGVmIF9wcm9qZWN0X3JlY2VudF9idWlsZF9saXN0KHByaik6CisgICAgZGF0YSA9IFtdCisgICAgIyB0YWtlIHRoZSBtb3N0IHJlY2VudCAzIGNvbXBsZXRlZCBidWlsZHMsIHBsdXMgYW55IGJ1aWxkcyBpbiBwcm9ncmVzcworICAgIGZvciB4IGluIF9nZXRfbGF0ZXN0X2J1aWxkcyhwcmopOgorICAgICAgICBkID0geworICAgICAgICAgICAgImlkIjogIHgucGssCisgICAgICAgICAgICAidGFyZ2V0cyIgOiBtYXAobGFtYmRhIHk6IHsidGFyZ2V0IjogeS50YXJnZXQsICJ0YXNrIjogeS50YXNrIH0sIHgudGFyZ2V0X3NldC5hbGwoKSksICMgVE9ETzogY3JlYXRlIHRoZSB0YXNrIGVudHJ5IGluIHRoZSBUYXJnZXQgdGFibGUKKyAgICAgICAgICAgICJzdGF0dXMiOiB4LmdldF9jdXJyZW50X3N0YXR1cygpLAorICAgICAgICAgICAgImVycm9ycyI6IG1hcChsYW1iZGEgeTogeyJ0eXBlIjogeS5saW5lbm8sICJtc2ciOiB5Lm1lc3NhZ2UsICJ0YiI6IHkucGF0aG5hbWV9LCAoeC5sb2dtZXNzYWdlX3NldC5maWx0ZXIobGV2ZWxfX2d0ZT1Mb2dNZXNzYWdlLldBUk5JTkcpfHgubG9nbWVzc2FnZV9zZXQuZmlsdGVyKGxldmVsPUxvZ01lc3NhZ2UuRVhDRVBUSU9OKSkpLAorICAgICAgICAgICAgInVwZGF0ZWQiOiB4LmNvbXBsZXRlZF9vbi5zdHJmdGltZSgnJXMnKSsiMDAwIiwKKyAgICAgICAgICAgICJjb21tYW5kX3RpbWUiOiAoeC5jb21wbGV0ZWRfb24gLSB4LnN0YXJ0ZWRfb24pLnRvdGFsX3NlY29uZHMoKSwKKyAgICAgICAgICAgICJicl9wYWdlX3VybCI6IHJldmVyc2UoJ2J1aWxkZGFzaGJvYXJkJywgYXJncz0oeC5waywpICksCisgICAgICAgICAgICAiYnVpbGQiIDogbWFwKCBsYW1iZGEgeTogeyJpZCI6IHkucGssCisgICAgICAgICAgICAgICAgICAgICAgICAic3RhdHVzIjogeS5nZXRfb3V0Y29tZV9kaXNwbGF5KCksCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tcGxldGVkX29uIiA6IHkuY29tcGxldGVkX29uLnN0cmZ0aW1lKCclcycpKyIwMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgImJ1aWxkX3RpbWUiIDogKHkuY29tcGxldGVkX29uIC0geS5zdGFydGVkX29uKS50b3RhbF9zZWNvbmRzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAiYnVpbGRfcGFnZV91cmwiIDogcmV2ZXJzZSgnYnVpbGRkYXNoYm9hcmQnLCBhcmdzPSh5LnBrLCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2J1aWxkX3RpbWVfcGFnZV91cmwnOiByZXZlcnNlKCdidWlsZHRpbWUnLCBhcmdzPSh5LnBrLCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgImVycm9ycyI6IHkuZXJyb3JzLmNvdW50KCksCisgICAgICAgICAgICAgICAgICAgICAgICAid2FybmluZ3MiOiB5Lndhcm5pbmdzLmNvdW50KCksCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tcGxldGVwZXIiOiB5LmNvbXBsZXRlcGVyKCkgaWYgeS5vdXRjb21lID09IEJ1aWxkLklOX1BST0dSRVNTIGVsc2UgIjAiLAorICAgICAgICAgICAgICAgICAgICAgICAgImV0YSI6IHkuZXRhKCkuc3RyZnRpbWUoJyVzJykrIjAwMCIgaWYgeS5vdXRjb21lID09IEJ1aWxkLklOX1BST0dSRVNTIGVsc2UgIjAiLAorICAgICAgICAgICAgICAgICAgICAgICAgfSwgW3hdKSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgZGF0YS5hcHBlbmQoZCkKKworICAgIHJldHVybiBkYXRhCisKKworCitkZWYgb2JqdG9qc29uKG9iaik6CisgICAgZnJvbSBkamFuZ28uZGIubW9kZWxzLnF1ZXJ5IGltcG9ydCBRdWVyeVNldAorICAgIGZyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgTW9kZWwKKworICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBkYXRldGltZSk6CisgICAgICAgIHJldHVybiBvYmouaXNvZm9ybWF0KCkKKyAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCB0aW1lZGVsdGEpOgorICAgICAgICByZXR1cm4gb2JqLnRvdGFsX3NlY29uZHMoKQorICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIFF1ZXJ5U2V0KSBvciBpc2luc3RhbmNlKG9iaiwgc2V0KToKKyAgICAgICAgcmV0dXJuIGxpc3Qob2JqKQorICAgIGVsaWYgdHlwZShvYmopLl9fbmFtZV9fID09ICJSZWxhdGVkTWFuYWdlciI6CisgICAgICAgIHJldHVybiBbeC5wayBmb3IgeCBpbiBvYmouYWxsKCldCisgICAgZWxpZiBoYXNhdHRyKCBvYmosICdfX2RpY3RfXycpIGFuZCBpc2luc3RhbmNlKG9iaiwgTW9kZWwpOgorICAgICAgICBkID0gb2JqLl9fZGljdF9fCisgICAgICAgIG5kID0gZGljdChkKQorICAgICAgICBmb3IgZGkgaW4gZC5rZXlzKCk6CisgICAgICAgICAgICBpZiBkaS5zdGFydHN3aXRoKCJfIik6CisgICAgICAgICAgICAgICAgZGVsIG5kW2RpXQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGRbZGldLCBNb2RlbCk6CisgICAgICAgICAgICAgICAgbmRbZGldID0gZFtkaV0ucGsKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShkW2RpXSwgaW50KSBhbmQgaGFzYXR0cihvYmosICJnZXRfJXNfZGlzcGxheSIgJSBkaSk6CisgICAgICAgICAgICAgICAgbmRbZGldID0gZ2V0YXR0cihvYmosICJnZXRfJXNfZGlzcGxheSIgJSBkaSkoKQorICAgICAgICByZXR1cm4gbmQKKyAgICBlbGlmIGlzaW5zdGFuY2UoIG9iaiwgdHlwZShsYW1iZGEgeDp4KSk6CisgICAgICAgIGltcG9ydCBpbnNwZWN0CisgICAgICAgIHJldHVybiBpbnNwZWN0LmdldHNvdXJjZWxpbmVzKG9iailbMF0KKyAgICBlbHNlOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIG9iamVjdCAlcyAoJXMpIG9mIHR5cGUgJXMiICUgKCBvYmosIGRpcihvYmopLCB0eXBlKG9iaikpKQorCisKK2RlZiBfdGVtcGxhdGVfcmVuZGVyZXIodGVtcGxhdGUpOgorICAgIGRlZiBmdW5jX3dyYXBwZXIodmlldyk6CisgICAgICAgIGRlZiByZXR1cm5lZF93cmFwcGVyKHJlcXVlc3QsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY29udGV4dCA9IHZpZXcocmVxdWVzdCwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgZXhjZXB0IFJlZGlyZWN0RXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGUuZ2V0X3JlZGlyZWN0X3Jlc3BvbnNlKCkKKworICAgICAgICAgICAgaWYgcmVxdWVzdC5HRVQuZ2V0KCdmb3JtYXQnLCBOb25lKSA9PSAnanNvbic6CisgICAgICAgICAgICAgICAgIyBvYmplY3RzIGlzIGEgc3BlY2lhbCBrZXl3b3JkIC0gaXQncyBhIFBhZ2UsIGJ1dCB3ZSBuZWVkIHRoZSBhY3R1YWwgb2JqZWN0cyBoZXJlCisgICAgICAgICAgICAgICAgIyBpbiBYSFIsIHRoZSBvYmplY3RzIGNvbWUgaW4gdGhlICJyb3dzIiBwcm9wZXJ0eQorICAgICAgICAgICAgICAgIGlmICJvYmplY3RzIiBpbiBjb250ZXh0OgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0WyJyb3dzIl0gPSBjb250ZXh0WyJvYmplY3RzIl0ub2JqZWN0X2xpc3QKKyAgICAgICAgICAgICAgICAgICAgZGVsIGNvbnRleHRbIm9iamVjdHMiXQorCisgICAgICAgICAgICAgICAgIyB3ZSdyZSBhYm91dCB0byByZXR1cm47IHRvIGtlZXAgdXAgd2l0aCB0aGUgWEhSIEFQSSwgd2Ugc2V0IHRoZSBlcnJvciB0byBPSworICAgICAgICAgICAgICAgIGNvbnRleHRbImVycm9yIl0gPSAib2siCisKKyAgICAgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb25maWx0ZXIoY29udGV4dCwgZGVmYXVsdD1vYmp0b2pzb24gKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X3R5cGUgPSAiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisgICAgICAgIHJldHVybiByZXR1cm5lZF93cmFwcGVyCisgICAgcmV0dXJuIGZ1bmNfd3JhcHBlcgorCisKK2RlZiBfbHZfdG9fZGljdChwcmosIHggPSBOb25lKToKKyAgICBpZiB4IGlzIE5vbmU6CisgICAgICAgIGRlZiB3cmFwcGVyKHgpOgorICAgICAgICAgICAgcmV0dXJuIF9sdl90b19kaWN0KHByaiwgeCkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXIKKworICAgIHJldHVybiB7ImlkIjogeC5waywKKyAgICAgICAgICAgICJuYW1lIjogeC5sYXllci5uYW1lLAorICAgICAgICAgICAgInRvb2x0aXAiOiAiJXMgfCAlcyIgJSAoeC5sYXllci52Y3NfdXJsLHguZ2V0X3Zjc19yZWZlcmVuY2UoKSksCisgICAgICAgICAgICAiZGV0YWlsIjogIiglcyIgJSB4LmxheWVyLnZjc191cmwgKyAoIikiIGlmIHgudXBfYnJhbmNoID09IE5vbmUgZWxzZSAiIHwgIit4LmdldF92Y3NfcmVmZXJlbmNlKCkrIikiKSwKKyAgICAgICAgICAgICJnaXR1cmwiOiB4LmxheWVyLnZjc191cmwsCisgICAgICAgICAgICAibGF5ZXJkZXRhaWx1cmwiIDogcmV2ZXJzZSgnbGF5ZXJkZXRhaWxzJywgYXJncz0ocHJqLmlkLHgucGspKSwKKyAgICAgICAgICAgICJyZXZpc2lvbiIgOiB4LmdldF92Y3NfcmVmZXJlbmNlKCksCisgICAgICAgICAgIH0KKworCitkZWYgX2J1aWxkX3BhZ2VfcmFuZ2UocGFnaW5hdG9yLCBpbmRleCA9IDEpOgorICAgIHRyeToKKyAgICAgICAgcGFnZSA9IHBhZ2luYXRvci5wYWdlKGluZGV4KQorICAgIGV4Y2VwdCBQYWdlTm90QW5JbnRlZ2VyOgorICAgICAgICBwYWdlID0gcGFnaW5hdG9yLnBhZ2UoMSkKKyAgICBleGNlcHQgIEVtcHR5UGFnZToKKyAgICAgICAgcGFnZSA9IHBhZ2luYXRvci5wYWdlKHBhZ2luYXRvci5udW1fcGFnZXMpCisKKworICAgIHBhZ2UucGFnZV9yYW5nZSA9IFtwYWdlLm51bWJlcl0KKyAgICBjcnRfcmFuZ2UgPSAwCisgICAgZm9yIGkgaW4gcmFuZ2UoMSw1KToKKyAgICAgICAgaWYgKHBhZ2UubnVtYmVyICsgaSkgPD0gcGFnaW5hdG9yLm51bV9wYWdlczoKKyAgICAgICAgICAgIHBhZ2UucGFnZV9yYW5nZSA9IHBhZ2UucGFnZV9yYW5nZSArIFsgcGFnZS5udW1iZXIgKyBpXQorICAgICAgICAgICAgY3J0X3JhbmdlICs9MQorICAgICAgICBpZiAocGFnZS5udW1iZXIgLSBpKSA+IDA6CisgICAgICAgICAgICBwYWdlLnBhZ2VfcmFuZ2UgPSAgW3BhZ2UubnVtYmVyIC1pXSArIHBhZ2UucGFnZV9yYW5nZQorICAgICAgICAgICAgY3J0X3JhbmdlICs9MQorICAgICAgICBpZiBjcnRfcmFuZ2UgPT0gNDoKKyAgICAgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIHBhZ2UKKworCitkZWYgX3ZlcmlmeV9wYXJhbWV0ZXJzKGcsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzKToKKyAgICBtaXNzID0gW10KKyAgICBmb3IgbXAgaW4gbWFuZGF0b3J5X3BhcmFtZXRlcnM6CisgICAgICAgIGlmIG5vdCBtcCBpbiBnOgorICAgICAgICAgICAgbWlzcy5hcHBlbmQobXApCisgICAgaWYgbGVuKG1pc3MpOgorICAgICAgICByZXR1cm4gbWlzcworICAgIHJldHVybiBOb25lCisKK2RlZiBfcmVkaXJlY3RfcGFyYW1ldGVycyh2aWV3LCBnLCBtYW5kYXRvcnlfcGFyYW1ldGVycywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICBpbXBvcnQgdXJsbGliCisgICAgdXJsID0gcmV2ZXJzZSh2aWV3LCBrd2FyZ3M9a3dhcmdzKQorICAgIHBhcmFtcyA9IHt9CisgICAgZm9yIGkgaW4gZzoKKyAgICAgICAgcGFyYW1zW2ldID0gZ1tpXQorICAgIGZvciBpIGluIG1hbmRhdG9yeV9wYXJhbWV0ZXJzOgorICAgICAgICBpZiBub3QgaSBpbiBwYXJhbXM6CisgICAgICAgICAgICBwYXJhbXNbaV0gPSB1cmxsaWIudW5xdW90ZShzdHIobWFuZGF0b3J5X3BhcmFtZXRlcnNbaV0pKQorCisgICAgcmV0dXJuIHJlZGlyZWN0KHVybCArICI/JXMiICUgdXJsbGliLnVybGVuY29kZShwYXJhbXMpLCBwZXJtYW5lbnQgPSBGYWxzZSwgKiprd2FyZ3MpCisKK2NsYXNzIFJlZGlyZWN0RXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZpZXcsIGcsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihSZWRpcmVjdEV4Y2VwdGlvbiwgc2VsZikuX19pbml0X18oKQorICAgICAgICBzZWxmLnZpZXcgPSB2aWV3CisgICAgICAgIHNlbGYuZyA9IGcKKyAgICAgICAgc2VsZi5tYW5kYXRvcnlfcGFyYW1ldGVycyA9IG1hbmRhdG9yeV9wYXJhbWV0ZXJzCisgICAgICAgIHNlbGYub2FyZ3MgID0gYXJncworICAgICAgICBzZWxmLm9rd2FyZ3MgPSBrd2FyZ3MKKworICAgIGRlZiBnZXRfcmVkaXJlY3RfcmVzcG9uc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBfcmVkaXJlY3RfcGFyYW1ldGVycyhzZWxmLnZpZXcsIHNlbGYuZywgc2VsZi5tYW5kYXRvcnlfcGFyYW1ldGVycywgc2VsZi5vYXJncywgKipzZWxmLm9rd2FyZ3MpCisKK0ZJRUxEX1NFUEFSQVRPUiA9ICI6IgorQU5EX1ZBTFVFX1NFUEFSQVRPUiA9ICIhIgorT1JfVkFMVUVfU0VQQVJBVE9SID0gInwiCitERVNDRU5ESU5HID0gIi0iCisKK2RlZiBfX2dldF9xX2Zvcl92YWwobmFtZSwgdmFsdWUpOgorICAgIGlmICJPUiIgaW4gdmFsdWU6CisgICAgICAgIHJldHVybiByZWR1Y2Uob3BlcmF0b3Iub3JfLCBtYXAobGFtYmRhIHg6IF9fZ2V0X3FfZm9yX3ZhbChuYW1lLCB4KSwgWyB4IGZvciB4IGluIHZhbHVlLnNwbGl0KCJPUiIpIF0pKQorICAgIGlmICJBTkQiIGluIHZhbHVlOgorICAgICAgICByZXR1cm4gcmVkdWNlKG9wZXJhdG9yLmFuZF8sIG1hcChsYW1iZGEgeDogX19nZXRfcV9mb3JfdmFsKG5hbWUsIHgpLCBbIHggZm9yIHggaW4gdmFsdWUuc3BsaXQoIkFORCIpIF0pKQorICAgIGlmIHZhbHVlLnN0YXJ0c3dpdGgoIk5PVCIpOgorICAgICAgICB2YWx1ZSA9IHZhbHVlWzM6XQorICAgICAgICBpZiB2YWx1ZSA9PSAnTm9uZSc6CisgICAgICAgICAgICB2YWx1ZSA9IE5vbmUKKyAgICAgICAga3dhcmdzID0geyBuYW1lIDogdmFsdWUgfQorICAgICAgICByZXR1cm4gflEoKiprd2FyZ3MpCisgICAgZWxzZToKKyAgICAgICAgaWYgdmFsdWUgPT0gJ05vbmUnOgorICAgICAgICAgICAgdmFsdWUgPSBOb25lCisgICAgICAgIGt3YXJncyA9IHsgbmFtZSA6IHZhbHVlIH0KKyAgICAgICAgcmV0dXJuIFEoKiprd2FyZ3MpCisKK2RlZiBfZ2V0X2ZpbHRlcmluZ19xdWVyeShmaWx0ZXJfc3RyaW5nKToKKworICAgIHNlYXJjaF90ZXJtcyA9IGZpbHRlcl9zdHJpbmcuc3BsaXQoRklFTERfU0VQQVJBVE9SKQorICAgIGFuZF9rZXlzID0gc2VhcmNoX3Rlcm1zWzBdLnNwbGl0KEFORF9WQUxVRV9TRVBBUkFUT1IpCisgICAgYW5kX3ZhbHVlcyA9IHNlYXJjaF90ZXJtc1sxXS5zcGxpdChBTkRfVkFMVUVfU0VQQVJBVE9SKQorCisgICAgYW5kX3F1ZXJ5ID0gW10KKyAgICBmb3Iga3YgaW4gemlwKGFuZF9rZXlzLCBhbmRfdmFsdWVzKToKKyAgICAgICAgb3Jfa2V5cyA9IGt2WzBdLnNwbGl0KE9SX1ZBTFVFX1NFUEFSQVRPUikKKyAgICAgICAgb3JfdmFsdWVzID0ga3ZbMV0uc3BsaXQoT1JfVkFMVUVfU0VQQVJBVE9SKQorICAgICAgICBxdWVyeWRpY3QgPSBkaWN0KHppcChvcl9rZXlzLCBvcl92YWx1ZXMpKQorICAgICAgICBhbmRfcXVlcnkuYXBwZW5kKHJlZHVjZShvcGVyYXRvci5vcl8sIG1hcChsYW1iZGEgeDogX19nZXRfcV9mb3JfdmFsKHgsIHF1ZXJ5ZGljdFt4XSksIFtrIGZvciBrIGluIHF1ZXJ5ZGljdF0pKSkKKworICAgIHJldHVybiByZWR1Y2Uob3BlcmF0b3IuYW5kXywgW2sgZm9yIGsgaW4gYW5kX3F1ZXJ5XSkKKworZGVmIF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsIG9yZGVya2V5LCB0b2dnbGVfcmV2ZXJzZSA9IEZhbHNlKToKKyAgICBpZiB0b2dnbGVfcmV2ZXJzZToKKyAgICAgICAgcmV0dXJuICIlczorIiAlIG9yZGVya2V5IGlmIHJlcXVlc3QuR0VULmdldCgnb3JkZXJieScsICIiKSA9PSAiJXM6LSIgJSBvcmRlcmtleSBlbHNlICIlczotIiAlIG9yZGVya2V5CisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuICIlczotIiAlIG9yZGVya2V5IGlmIHJlcXVlc3QuR0VULmdldCgnb3JkZXJieScsICIiKSA9PSAiJXM6KyIgJSBvcmRlcmtleSBlbHNlICIlczorIiAlIG9yZGVya2V5CisKK2RlZiBfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsIG9yZGVya2V5KToKKyAgICBpZiByZXF1ZXN0LkdFVC5nZXQoJ29yZGVyYnknLCAiIikgPT0gIiVzOisiJW9yZGVya2V5OgorICAgICAgICByZXR1cm4gImRvd24iCisgICAgZWxpZiByZXF1ZXN0LkdFVC5nZXQoJ29yZGVyYnknLCAiIikgPT0gIiVzOi0iJW9yZGVya2V5OgorICAgICAgICByZXR1cm4gInVwIgorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBOb25lCisKKyMgd2UgY2hlY2sgdGhhdCB0aGUgaW5wdXQgY29tZXMgaW4gYSB2YWxpZCBmb3JtIHRoYXQgd2UgY2FuIHJlY29nbml6ZQorZGVmIF92YWxpZGF0ZV9pbnB1dChmaWVsZF9pbnB1dCwgbW9kZWwpOgorCisgICAgaW52YWxpZCA9IE5vbmUKKworICAgIGlmIGZpZWxkX2lucHV0OgorICAgICAgICBmaWVsZF9pbnB1dF9saXN0ID0gZmllbGRfaW5wdXQuc3BsaXQoRklFTERfU0VQQVJBVE9SKQorCisgICAgICAgICMgQ2hlY2sgd2UgaGF2ZSBvbmx5IG9uZSBjb2xvbgorICAgICAgICBpZiBsZW4oZmllbGRfaW5wdXRfbGlzdCkgIT0gMjoKKyAgICAgICAgICAgIGludmFsaWQgPSAiV2UgaGF2ZSBhbiBpbnZhbGlkIG51bWJlciBvZiBzZXBhcmF0b3JzOiAiICsgZmllbGRfaW5wdXQgKyAiIC0+ICIgKyBzdHIoZmllbGRfaW5wdXRfbGlzdCkKKyAgICAgICAgICAgIHJldHVybiBOb25lLCBpbnZhbGlkCisKKyAgICAgICAgIyBDaGVjayB3ZSBoYXZlIGFuIGVxdWFsIG51bWJlciBvZiB0ZXJtcyBib3RoIHNpZGVzIG9mIHRoZSBjb2xvbgorICAgICAgICBpZiBsZW4oZmllbGRfaW5wdXRfbGlzdFswXS5zcGxpdChBTkRfVkFMVUVfU0VQQVJBVE9SKSkgIT0gbGVuKGZpZWxkX2lucHV0X2xpc3RbMV0uc3BsaXQoQU5EX1ZBTFVFX1NFUEFSQVRPUikpOgorICAgICAgICAgICAgaW52YWxpZCA9ICJOb3QgYWxsIGFyZyBuYW1lcyBnb3QgdmFsdWVzIgorICAgICAgICAgICAgcmV0dXJuIE5vbmUsIGludmFsaWQgKyBzdHIoZmllbGRfaW5wdXRfbGlzdCkKKworICAgICAgICAjIENoZWNrIHdlIGFyZSBsb29raW5nIGZvciBhIHZhbGlkIGZpZWxkCisgICAgICAgIHZhbGlkX2ZpZWxkcyA9IG1vZGVsLl9tZXRhLmdldF9hbGxfZmllbGRfbmFtZXMoKQorICAgICAgICBmb3IgZmllbGQgaW4gZmllbGRfaW5wdXRfbGlzdFswXS5zcGxpdChBTkRfVkFMVUVfU0VQQVJBVE9SKToKKyAgICAgICAgICAgIGlmIG5vdCByZWR1Y2UobGFtYmRhIHgsIHk6IHggb3IgeSwgWyBmaWVsZC5zdGFydHN3aXRoKHgpIGZvciB4IGluIHZhbGlkX2ZpZWxkcyBdKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZSwgKGZpZWxkLCBbIHggZm9yIHggaW4gdmFsaWRfZmllbGRzIF0pCisKKyAgICByZXR1cm4gZmllbGRfaW5wdXQsIGludmFsaWQKKworIyB1c2VzIHNlYXJjaF9hbGxvd2VkX2ZpZWxkcyBpbiBvcm0vbW9kZWxzLnB5IHRvIGNyZWF0ZSBhIHNlYXJjaCBxdWVyeQorIyBmb3IgdGhlc2UgZmllbGRzIHdpdGggdGhlIHN1cHBsaWVkIGlucHV0IHRleHQKK2RlZiBfZ2V0X3NlYXJjaF9yZXN1bHRzKHNlYXJjaF90ZXJtLCBxdWVyeXNldCwgbW9kZWwpOgorICAgIHNlYXJjaF9vYmplY3RzID0gW10KKyAgICBmb3Igc3QgaW4gc2VhcmNoX3Rlcm0uc3BsaXQoIiAiKToKKyAgICAgICAgcV9tYXAgPSBtYXAobGFtYmRhIHg6IFEoKip7eCsnX19pY29udGFpbnMnOiBzdH0pLAorICAgICAgICAgICAgICAgIG1vZGVsLnNlYXJjaF9hbGxvd2VkX2ZpZWxkcykKKworICAgICAgICBzZWFyY2hfb2JqZWN0cy5hcHBlbmQocmVkdWNlKG9wZXJhdG9yLm9yXywgcV9tYXApKQorICAgIHNlYXJjaF9vYmplY3QgPSByZWR1Y2Uob3BlcmF0b3IuYW5kXywgc2VhcmNoX29iamVjdHMpCisgICAgcXVlcnlzZXQgPSBxdWVyeXNldC5maWx0ZXIoc2VhcmNoX29iamVjdCkKKworICAgIHJldHVybiBxdWVyeXNldAorCisKKyMgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUgc2VhcmNoL2ZpbHRlci9vcmRlcmluZyBwYXJhbWV0ZXJzIGZyb20gdGhlIHJlcXVlc3QKKyMgaXQgdXNlcyB0aGUgcmVxdWVzdCBhbmQgdGhlIG1vZGVsIHRvIHZhbGlkYXRlIGlucHV0IGZvciB0aGUgZmlsdGVyIGFuZCBvcmRlcmJ5IHZhbHVlcworZGVmIF9zZWFyY2hfdHVwbGUocmVxdWVzdCwgbW9kZWwpOgorICAgIG9yZGVyaW5nX3N0cmluZywgaW52YWxpZCA9IF92YWxpZGF0ZV9pbnB1dChyZXF1ZXN0LkdFVC5nZXQoJ29yZGVyYnknLCAnJyksIG1vZGVsKQorICAgIGlmIGludmFsaWQ6CisgICAgICAgIHJhaXNlIEJhc2VFeGNlcHRpb24oIkludmFsaWQgb3JkZXJpbmcgbW9kZWw6IiArIHN0cihtb2RlbCkgKyBzdHIoaW52YWxpZCkpCisKKyAgICBmaWx0ZXJfc3RyaW5nLCBpbnZhbGlkID0gX3ZhbGlkYXRlX2lucHV0KHJlcXVlc3QuR0VULmdldCgnZmlsdGVyJywgJycpLCBtb2RlbCkKKyAgICBpZiBpbnZhbGlkOgorICAgICAgICByYWlzZSBCYXNlRXhjZXB0aW9uKCJJbnZhbGlkIGZpbHRlciAiICsgc3RyKGludmFsaWQpKQorCisgICAgc2VhcmNoX3Rlcm0gPSByZXF1ZXN0LkdFVC5nZXQoJ3NlYXJjaCcsICcnKQorICAgIHJldHVybiAoZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZykKKworCisjIHJldHVybnMgYSBsYXp5LWV2YWx1YXRlZCBxdWVyeXNldCBmb3IgYSBmaWx0ZXIvc2VhcmNoL29yZGVyIGNvbWJpbmF0aW9uCitkZWYgX2dldF9xdWVyeXNldChtb2RlbCwgcXVlcnlzZXQsIGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcsIG9yZGVyaW5nX3NlY29uZGFyeT0nJyk6CisgICAgaWYgZmlsdGVyX3N0cmluZzoKKyAgICAgICAgZmlsdGVyX3F1ZXJ5ID0gX2dldF9maWx0ZXJpbmdfcXVlcnkoZmlsdGVyX3N0cmluZykKKyAgICAgICAgcXVlcnlzZXQgPSBxdWVyeXNldC5maWx0ZXIoZmlsdGVyX3F1ZXJ5KQorICAgIGVsc2U6CisgICAgICAgIHF1ZXJ5c2V0ID0gcXVlcnlzZXQuYWxsKCkKKworICAgIGlmIHNlYXJjaF90ZXJtOgorICAgICAgICBxdWVyeXNldCA9IF9nZXRfc2VhcmNoX3Jlc3VsdHMoc2VhcmNoX3Rlcm0sIHF1ZXJ5c2V0LCBtb2RlbCkKKworICAgIGlmIG9yZGVyaW5nX3N0cmluZzoKKyAgICAgICAgY29sdW1uLCBvcmRlciA9IG9yZGVyaW5nX3N0cmluZy5zcGxpdCgnOicpCisgICAgICAgIGlmIGNvbHVtbiA9PSByZS5zdWIoJy0nLCcnLG9yZGVyaW5nX3NlY29uZGFyeSk6CisgICAgICAgICAgICBvcmRlcmluZ19zZWNvbmRhcnk9JycKKyAgICAgICAgaWYgb3JkZXIubG93ZXIoKSA9PSBERVNDRU5ESU5HOgorICAgICAgICAgICAgY29sdW1uID0gJy0nICsgY29sdW1uCisgICAgICAgIGlmIG9yZGVyaW5nX3NlY29uZGFyeToKKyAgICAgICAgICAgIHF1ZXJ5c2V0ID0gcXVlcnlzZXQub3JkZXJfYnkoY29sdW1uLCBvcmRlcmluZ19zZWNvbmRhcnkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBxdWVyeXNldCA9IHF1ZXJ5c2V0Lm9yZGVyX2J5KGNvbHVtbikKKworICAgICMgaW5zdXJlIG9ubHkgZGlzdGluY3QgcmVjb3JkcyAoZS5nLiBmcm9tIG11bHRpcGxlIHNlYXJjaCBoaXRzKSBhcmUgcmV0dXJuZWQKKyAgICByZXR1cm4gcXVlcnlzZXQuZGlzdGluY3QoKQorCisjIHJldHVybnMgdGhlIHZhbHVlIG9mIGVudHJpZXMgcGVyIHBhZ2UgYW5kIHRoZSBuYW1lIG9mIHRoZSBhcHBsaWVkIHNvcnRpbmcgZmllbGQuCisjIGlmIHRoZSB2YWx1ZSBpcyBnaXZlbiBleHBsaWNpdGx5IGFzIGEgR0VUIHBhcmFtZXRlciBpdCB3aWxsIGJlIHRoZSBmaXJzdCBzZWxlY3RlZCwKKyMgb3RoZXJ3aXNlIHRoZSBjb29raWUgdmFsdWUgd2lsbCBiZSB1c2VkLgorZGVmIF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgZGVmYXVsdF9jb3VudCwgZGVmYXVsdF9vcmRlcik6CisgICAgY3VycmVudF91cmwgPSByZXNvbHZlKHJlcXVlc3QucGF0aF9pbmZvKS51cmxfbmFtZQorICAgIHBhZ2VzaXplID0gcmVxdWVzdC5HRVQuZ2V0KCdjb3VudCcsIHJlcXVlc3Quc2Vzc2lvbi5nZXQoJyVzX2NvdW50JyAlIGN1cnJlbnRfdXJsLCBkZWZhdWx0X2NvdW50KSkKKyAgICBvcmRlcmJ5ID0gcmVxdWVzdC5HRVQuZ2V0KCdvcmRlcmJ5JywgcmVxdWVzdC5zZXNzaW9uLmdldCgnJXNfb3JkZXJieScgJSBjdXJyZW50X3VybCwgZGVmYXVsdF9vcmRlcikpCisgICAgcmV0dXJuIChwYWdlc2l6ZSwgb3JkZXJieSkKKworCisjIHNldCBjb29raWVzIGZvciBwYXJhbWV0ZXJzLiB0aGlzIGlzIHVzZWZ1bGwgaW4gY2FzZSBwYXJhbWV0ZXJzIGFyZSBzZXQKKyMgbWFudWFsbHkgZnJvbSB0aGUgR0VUIHZhbHVlcyBvZiB0aGUgbGluaworZGVmIF9zZXRfcGFyYW1ldGVyc192YWx1ZXMocGFnZXNpemUsIG9yZGVyYnksIHJlcXVlc3QpOgorICAgIGZyb20gZGphbmdvLmNvcmUudXJscmVzb2x2ZXJzIGltcG9ydCByZXNvbHZlCisgICAgY3VycmVudF91cmwgPSByZXNvbHZlKHJlcXVlc3QucGF0aF9pbmZvKS51cmxfbmFtZQorICAgIHJlcXVlc3Quc2Vzc2lvblsnJXNfY291bnQnICUgY3VycmVudF91cmxdID0gcGFnZXNpemUKKyAgICByZXF1ZXN0LnNlc3Npb25bJyVzX29yZGVyYnknICUgY3VycmVudF91cmxdID1vcmRlcmJ5CisKKyMgZGF0ZSByYW5nZTogbm9ybWFsaXplIEdVSSdzIGRkL21tL3l5eXkgdG8gZGF0ZSBvYmplY3QKK2RlZiBfbm9ybWFsaXplX2lucHV0X2RhdGUoZGF0ZV9zdHIsZGVmYXVsdCk6CisgICAgZGF0ZV9zdHI9cmUuc3ViKCcvJywgJy0nLCBkYXRlX3N0cikKKyAgICAjIGFjY2VwdCBkZC9tbS95eXl5IHRvIGQvbS95eQorICAgIHRyeToKKyAgICAgICAgZGF0ZV9pbiA9IGRhdGV0aW1lLnN0cnB0aW1lKGRhdGVfc3RyLCAiJWQtJW0tJVkiKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAjIGNvdXJ0ZXN5IHRyeSB3aXRoIHR3byBkaWdpdCB5ZWFyCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGVfaW4gPSBkYXRldGltZS5zdHJwdGltZShkYXRlX3N0ciwgIiVkLSVtLSV5IikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgIGRhdGVfaW4gPSBkYXRlX2luLnJlcGxhY2UodHppbmZvPWRlZmF1bHQudHppbmZvKQorICAgIHJldHVybiBkYXRlX2luCisKKyMgY29udmVydCBhbmQgbm9ybWFsaXplIGFueSByZWNlaXZlZCBkYXRlIHJhbmdlIGZpbHRlciwgZm9yIGV4YW1wbGU6CisjICJjb21wbGV0ZWRfb25fX2d0ZSFjb21wbGV0ZWRfb25fX2x0OjAxLzAzLzIwMTUhMDIvMDMvMjAxNV9kYXRlcmFuZ2UiIHRvCisjICJjb21wbGV0ZWRfb25fX2d0ZSFjb21wbGV0ZWRfb25fX2x0OjIwMTUtMDMtMDEhMjAxNS0wMy0wMiIKK2RlZiBfbW9kaWZ5X2RhdGVfcmFuZ2VfZmlsdGVyKGZpbHRlcl9zdHJpbmcpOgorICAgICMgd2FzIHRoZSBkYXRlIHJhbmdlIHJhZGlvIGJ1dHRvbiBzZWxlY3RlZD8KKyAgICBpZiAwID4gIGZpbHRlcl9zdHJpbmcuZmluZCgnX2RhdGVyYW5nZScpOgorICAgICAgICByZXR1cm4gZmlsdGVyX3N0cmluZywnJworICAgICMgbm9ybWFsaXplIEdVSSBkYXRlcyB0byBkYXRhYmFzZSBmb3JtYXQKKyAgICBmaWx0ZXJfc3RyaW5nID0gZmlsdGVyX3N0cmluZy5yZXBsYWNlKCdfZGF0ZXJhbmdlJywnJykucmVwbGFjZSgnOicsJyEnKTsKKyAgICBmaWx0ZXJfbGlzdCA9IGZpbHRlcl9zdHJpbmcuc3BsaXQoJyEnKTsKKyAgICBpZiA0ICE9IGxlbihmaWx0ZXJfbGlzdCk6CisgICAgICAgIHJldHVybiBmaWx0ZXJfc3RyaW5nCisgICAgdG9kYXkgPSB0aW1lem9uZS5sb2NhbHRpbWUodGltZXpvbmUubm93KCkpCisgICAgZGF0ZV9pZCA9IGZpbHRlcl9saXN0WzFdCisgICAgZGF0ZV9mcm9tID0gX25vcm1hbGl6ZV9pbnB1dF9kYXRlKGZpbHRlcl9saXN0WzJdLHRvZGF5KQorICAgIGRhdGVfdG8gPSBfbm9ybWFsaXplX2lucHV0X2RhdGUoZmlsdGVyX2xpc3RbM10sdG9kYXkpCisgICAgIyBzd2FwIGRhdGVzIGlmIG1hbnVhbGx5IHNldCBkYXRlcyBhcmUgb3V0IG9mIG9yZGVyCisgICAgaWYgIGRhdGVfdG8gPCBkYXRlX2Zyb206CisgICAgICAgIGRhdGVfdG8sZGF0ZV9mcm9tID0gZGF0ZV9mcm9tLGRhdGVfdG8KKyAgICAjIGNvbnZlcnQgdG8gc3RyaW5ncywgbWFrZSAnZGF0ZV90bycgaW5jbHVzaXZlIGJ5IG1vdmluZyB0byBiZWdpbmluZyBvZiBuZXh0IGRheQorICAgIGRhdGVfZnJvbV9zdHIgPSBkYXRlX2Zyb20uc3RyZnRpbWUoIiVZLSVtLSVkIikKKyAgICBkYXRlX3RvX3N0ciA9IChkYXRlX3RvK3RpbWVkZWx0YShkYXlzPTEpKS5zdHJmdGltZSgiJVktJW0tJWQiKQorICAgIGZpbHRlcl9zdHJpbmc9ZmlsdGVyX2xpc3RbMF0rJyEnK2ZpbHRlcl9saXN0WzFdKyc6JytkYXRlX2Zyb21fc3RyKychJytkYXRlX3RvX3N0cgorICAgIGRhdGVyYW5nZV9zZWxlY3RlZCA9IHJlLnN1YignX18uKicsJycsIGRhdGVfaWQpCisgICAgcmV0dXJuIGZpbHRlcl9zdHJpbmcsZGF0ZXJhbmdlX3NlbGVjdGVkCisKK2RlZiBfYWRkX2RhdGVyYW5nZV9jb250ZXh0KHF1ZXJ5c2V0X2FsbCwgcmVxdWVzdCwgZGF0ZXJhbmdlX2xpc3QpOgorICAgICMgY2FsY3VsYXRlIHRoZSBleGFjdCBiZWdpbmluZyBvZiBsb2NhbCB0b2RheSBhbmQgeWVzdGVyZGF5CisgICAgdG9kYXlfYmVnaW4gPSB0aW1lem9uZS5sb2NhbHRpbWUodGltZXpvbmUubm93KCkpCisgICAgdG9kYXlfYmVnaW4gPSBkYXRlKHRvZGF5X2JlZ2luLnllYXIsdG9kYXlfYmVnaW4ubW9udGgsdG9kYXlfYmVnaW4uZGF5KQorICAgIHllc3RlcmRheV9iZWdpbiA9IHRvZGF5X2JlZ2luLXRpbWVkZWx0YShkYXlzPTEpCisgICAgIyBhZGQgZGF0ZXJhbmdlIHBlcnNpc3RlbnQKKyAgICBjb250ZXh0X2RhdGUgPSB7fQorICAgIGNvbnRleHRfZGF0ZVsnbGFzdF9kYXRlX2Zyb20nXSA9IHJlcXVlc3QuR0VULmdldCgnbGFzdF9kYXRlX2Zyb20nLHRpbWV6b25lLmxvY2FsdGltZSh0aW1lem9uZS5ub3coKSkuc3RyZnRpbWUoIiVkLyVtLyVZIikpCisgICAgY29udGV4dF9kYXRlWydsYXN0X2RhdGVfdG8nICBdID0gcmVxdWVzdC5HRVQuZ2V0KCdsYXN0X2RhdGVfdG8nICAsY29udGV4dF9kYXRlWydsYXN0X2RhdGVfZnJvbSddKQorICAgICMgY2FsY3VsYXRlIHRoZSBkYXRlIHJhbmdlcywgYXZvaWQgc2Vjb25kIHNvcnQgZm9yICdjcmVhdGVkJworICAgICMgZmV0Y2ggdGhlIHJlc3BlY3RpdmUgbWF4IHJhbmdlIGZyb20gdGhlIGRhdGFiYXNlCisgICAgY29udGV4dF9kYXRlWydkYXRlcmFuZ2VfZmlsdGVyJ109JycKKyAgICBmb3Iga2V5IGluIGRhdGVyYW5nZV9saXN0OgorICAgICAgICBxdWVyeXNldF9rZXkgPSBxdWVyeXNldF9hbGwub3JkZXJfYnkoa2V5KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb250ZXh0X2RhdGVbJ2RhdGVNaW5fJytrZXldPXRpbWV6b25lLmxvY2FsdGltZShnZXRhdHRyKHF1ZXJ5c2V0X2tleS5maXJzdCgpLGtleSkpLnN0cmZ0aW1lKCIlZC8lbS8lWSIpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIGNvbnRleHRfZGF0ZVsnZGF0ZU1pbl8nK2tleV09dGltZXpvbmUubG9jYWx0aW1lKHRpbWV6b25lLm5vdygpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb250ZXh0X2RhdGVbJ2RhdGVNYXhfJytrZXldPXRpbWV6b25lLmxvY2FsdGltZShnZXRhdHRyKHF1ZXJ5c2V0X2tleS5sYXN0KCksa2V5KSkuc3RyZnRpbWUoIiVkLyVtLyVZIikKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgY29udGV4dF9kYXRlWydkYXRlTWF4Xycra2V5XT10aW1lem9uZS5sb2NhbHRpbWUodGltZXpvbmUubm93KCkpCisgICAgcmV0dXJuIGNvbnRleHRfZGF0ZSx0b2RheV9iZWdpbix5ZXN0ZXJkYXlfYmVnaW4KKworCisjIworIyBidWlsZCBkYXNoYm9hcmQgZm9yIGEgc2luZ2xlIGJ1aWxkLCBjb21pbmcgaW4gYXMgYXJndW1lbnQKKyMgRWFjaCBidWlsZCBtYXkgY29udGFpbiBtdWx0aXBsZSB0YXJnZXRzIGFuZCBlYWNoIHRhcmdldAorIyBtYXkgZ2VuZXJhdGUgbXVsdGlwbGUgaW1hZ2UgZmlsZXMuIGRpc3BsYXkgdGhlbSBhbGwuCisjCitkZWYgYnVpbGRkYXNoYm9hcmQoIHJlcXVlc3QsIGJ1aWxkX2lkICk6CisgICAgdGVtcGxhdGUgPSAiYnVpbGRkYXNoYm9hcmQuaHRtbCIKKyAgICBpZiBCdWlsZC5vYmplY3RzLmZpbHRlciggcGs9YnVpbGRfaWQgKS5jb3VudCggKSA9PSAwIDoKKyAgICAgICAgcmV0dXJuIHJlZGlyZWN0KCBidWlsZHMgKQorICAgIGJ1aWxkID0gQnVpbGQub2JqZWN0cy5nZXQoIHBrID0gYnVpbGRfaWQgKTsKKyAgICBsYXllclZlcnNpb25JZCA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5maWx0ZXIoIGJ1aWxkID0gYnVpbGRfaWQgKTsKKyAgICByZWNpcGVDb3VudCA9IFJlY2lwZS5vYmplY3RzLmZpbHRlciggbGF5ZXJfdmVyc2lvbl9faWRfX2luID0gbGF5ZXJWZXJzaW9uSWQgKS5jb3VudCggKTsKKyAgICB0Z3RzID0gVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKCBidWlsZF9pZCA9IGJ1aWxkX2lkICkub3JkZXJfYnkoICd0YXJnZXQnICk7CisKKyAgICAjIworICAgICMgc2V0IHVwIGN1c3RvbSB0YXJnZXQgbGlzdCB3aXRoIGNvbXB1dGVkIHBhY2thZ2UgYW5kIGltYWdlIGRhdGEKKyAgICAjCisKKyAgICB0YXJnZXRzID0gWyBdCisgICAgbnRhcmdldHMgPSAwCisgICAgaGFzSW1hZ2VzID0gRmFsc2UKKyAgICB0YXJnZXRIYXNOb0ltYWdlcyA9IEZhbHNlCisgICAgZm9yIHQgaW4gdGd0czoKKyAgICAgICAgZWxlbSA9IHsgfQorICAgICAgICBlbGVtWyAndGFyZ2V0JyBdID0gdAorICAgICAgICBpZiAoIHQuaXNfaW1hZ2UgKToKKyAgICAgICAgICAgIGhhc0ltYWdlcyA9IFRydWUKKyAgICAgICAgbnBrZyA9IDAKKyAgICAgICAgcGtnc3ogPSAwCisgICAgICAgIHBhY2thZ2UgPSBOb25lCisgICAgICAgIGZvciBwYWNrYWdlIGluIFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoaWRfX2luID0gW3gucGFja2FnZV9pZCBmb3IgeCBpbiB0LnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZV9zZXQuYWxsKCldKToKKyAgICAgICAgICAgIHBrZ3N6ID0gcGtnc3ogKyBwYWNrYWdlLnNpemUKKyAgICAgICAgICAgIGlmICggcGFja2FnZS5pbnN0YWxsZWRfbmFtZSApOgorICAgICAgICAgICAgICAgIG5wa2cgPSBucGtnICsgMQorICAgICAgICBlbGVtWyAnbnBrZycgXSA9IG5wa2cKKyAgICAgICAgZWxlbVsgJ3BrZ3N6JyBdID0gcGtnc3oKKyAgICAgICAgdGkgPSBUYXJnZXRfSW1hZ2VfRmlsZS5vYmplY3RzLmZpbHRlciggdGFyZ2V0X2lkID0gdC5pZCApCisgICAgICAgIGltYWdlRmlsZXMgPSBbIF0KKyAgICAgICAgZm9yIGkgaW4gdGk6CisgICAgICAgICAgICBuZHggPSBpLmZpbGVfbmFtZS5yZmluZCggJy8nICkKKyAgICAgICAgICAgIGlmICggbmR4IDwgMCApOgorICAgICAgICAgICAgICAgIG5keCA9IDA7CisgICAgICAgICAgICBmID0gaS5maWxlX25hbWVbIG5keCArIDE6IF0KKyAgICAgICAgICAgIGltYWdlRmlsZXMuYXBwZW5kKHsgJ2lkJzogaS5pZCwgJ3BhdGgnOiBmLCAnc2l6ZScgOiBpLmZpbGVfc2l6ZSB9KQorICAgICAgICBpZiAoIHQuaXNfaW1hZ2UgYW5kCisgICAgICAgICAgICAgKCggbGVuKCBpbWFnZUZpbGVzICkgPD0gMCApIG9yICggbGVuKCB0LmxpY2Vuc2VfbWFuaWZlc3RfcGF0aCApIDw9IDAgKSkpOgorICAgICAgICAgICAgdGFyZ2V0SGFzTm9JbWFnZXMgPSBUcnVlCisgICAgICAgIGVsZW1bICdpbWFnZUZpbGVzJyBdID0gaW1hZ2VGaWxlcworICAgICAgICBlbGVtWyAndGFyZ2V0SGFzTm9JbWFnZXMnIF0gPSB0YXJnZXRIYXNOb0ltYWdlcworICAgICAgICB0YXJnZXRzLmFwcGVuZCggZWxlbSApCisKKyAgICAjIworICAgICMgaG93IG1hbnkgcGFja2FnZXMgaW4gdGhpcyBidWlsZCAtIGlnbm9yZSBhbm9ueW1vdXMgb25lcworICAgICMKKworICAgIHBhY2thZ2VDb3VudCA9IDAKKyAgICBwYWNrYWdlcyA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoIGJ1aWxkX2lkID0gYnVpbGRfaWQgKQorICAgIGZvciBwIGluIHBhY2thZ2VzOgorICAgICAgICBpZiAoIHAuaW5zdGFsbGVkX25hbWUgKToKKyAgICAgICAgICAgIHBhY2thZ2VDb3VudCA9IHBhY2thZ2VDb3VudCArIDEKKworICAgIGxvZ21lc3NhZ2VzID0gbGlzdChMb2dNZXNzYWdlLm9iamVjdHMuZmlsdGVyKCBidWlsZCA9IGJ1aWxkX2lkICkpCisKKyAgICBjb250ZXh0ID0geworICAgICAgICAgICAgJ2J1aWxkJyAgICAgICAgICAgOiBidWlsZCwKKyAgICAgICAgICAgICdoYXNJbWFnZXMnICAgICAgIDogaGFzSW1hZ2VzLAorICAgICAgICAgICAgJ250YXJnZXRzJyAgICAgICAgOiBudGFyZ2V0cywKKyAgICAgICAgICAgICd0YXJnZXRzJyAgICAgICAgIDogdGFyZ2V0cywKKyAgICAgICAgICAgICdyZWNpcGVjb3VudCcgICAgIDogcmVjaXBlQ291bnQsCisgICAgICAgICAgICAncGFja2FnZWNvdW50JyAgICA6IHBhY2thZ2VDb3VudCwKKyAgICAgICAgICAgICdsb2dtZXNzYWdlcycgICAgIDogbG9nbWVzc2FnZXMsCisgICAgfQorICAgIHJldHVybiByZW5kZXIoIHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0ICkKKworCisKK2RlZiBnZW5lcmF0ZUNvdmVyZWRMaXN0MiggcmV2bGlzdCA9IE5vbmUgKToKKyAgICBpZiBub3QgcmV2bGlzdDoKKyAgICAgICAgcmV2bGlzdCA9IFtdCisgICAgY292ZXJlZF9saXN0ID0gIFsgeCBmb3IgeCBpbiByZXZsaXN0IGlmIHgub3V0Y29tZSA9PSBUYXNrLk9VVENPTUVfQ09WRVJFRCBdCisgICAgd2hpbGUgbGVuKGNvdmVyZWRfbGlzdCk6CisgICAgICAgIHJldmxpc3QgPSAgWyB4IGZvciB4IGluIHJldmxpc3QgaWYgeC5vdXRjb21lICE9IFRhc2suT1VUQ09NRV9DT1ZFUkVEIF0KKyAgICAgICAgaWYgbGVuKHJldmxpc3QpID4gMDoKKyAgICAgICAgICAgIHJldHVybiByZXZsaXN0CisKKyAgICAgICAgbmV3bGlzdCA9IF9maW5kX3Rhc2tfcmV2ZGVwX2xpc3QoY292ZXJlZF9saXN0KQorCisgICAgICAgIHJldmxpc3QgPSBsaXN0KHNldChyZXZsaXN0ICsgbmV3bGlzdCkpCisgICAgICAgIGNvdmVyZWRfbGlzdCA9ICBbIHggZm9yIHggaW4gcmV2bGlzdCBpZiB4Lm91dGNvbWUgPT0gVGFzay5PVVRDT01FX0NPVkVSRUQgXQorICAgIHJldHVybiByZXZsaXN0CisKK2RlZiB0YXNrKCByZXF1ZXN0LCBidWlsZF9pZCwgdGFza19pZCApOgorICAgIHRlbXBsYXRlID0gInRhc2suaHRtbCIKKyAgICB0YXNrc19saXN0ID0gVGFzay5vYmplY3RzLmZpbHRlciggcGs9dGFza19pZCApCisgICAgaWYgdGFza3NfbGlzdC5jb3VudCggKSA9PSAwOgorICAgICAgICByZXR1cm4gcmVkaXJlY3QoIGJ1aWxkcyApCisgICAgdGFza19vYmplY3QgPSB0YXNrc19saXN0WyAwIF07CisgICAgZGVwZW5kZW5jaWVzID0gc29ydGVkKAorICAgICAgICBfZmluZF90YXNrX2RlcCggdGFza19vYmplY3QgKSwKKyAgICAgICAga2V5PWxhbWJkYSB0Oiclc18lcyAlcyclKHQucmVjaXBlLm5hbWUsIHQucmVjaXBlLnZlcnNpb24sIHQudGFza19uYW1lKSkKKyAgICByZXZlcnNlX2RlcGVuZGVuY2llcyA9IHNvcnRlZCgKKyAgICAgICAgX2ZpbmRfdGFza19yZXZkZXAoIHRhc2tfb2JqZWN0ICksCisgICAgICAgIGtleT1sYW1iZGEgdDonJXNfJXMgJXMnJSggdC5yZWNpcGUubmFtZSwgdC5yZWNpcGUudmVyc2lvbiwgdC50YXNrX25hbWUgKSkKKyAgICBjb3ZlcmVkQnkgPSAnJzsKKyAgICBpZiAoIHRhc2tfb2JqZWN0Lm91dGNvbWUgPT0gVGFzay5PVVRDT01FX0NPVkVSRUQgKToKKyMgICAgICAgIF9saXN0ID0gZ2VuZXJhdGVDb3ZlcmVkTGlzdCggdGFzayApCisgICAgICAgIGNvdmVyZWRCeSA9IHNvcnRlZChnZW5lcmF0ZUNvdmVyZWRMaXN0MiggX2ZpbmRfdGFza19yZXZkZXAoIHRhc2tfb2JqZWN0ICkgKSwga2V5ID0gbGFtYmRhIHg6IHgucmVjaXBlLm5hbWUpCisgICAgbG9nX2hlYWQgPSAnJworICAgIGxvZ19ib2R5ID0gJycKKyAgICBpZiB0YXNrX29iamVjdC5vdXRjb21lID09IHRhc2tfb2JqZWN0Lk9VVENPTUVfRkFJTEVEOgorICAgICAgICBwYXNzCisKKyAgICB1cmlfbGlzdD0gWyBdCisgICAgdmFyaWFibGVzID0gVmFyaWFibGUub2JqZWN0cy5maWx0ZXIoYnVpbGQ9YnVpbGRfaWQpCisgICAgdj12YXJpYWJsZXMuZmlsdGVyKHZhcmlhYmxlX25hbWU9J1NTVEFURV9ESVInKQorICAgIGlmIHYuY291bnQoKSA+IDA6CisgICAgICAgIHVyaV9saXN0LmFwcGVuZCh2WzBdLnZhcmlhYmxlX3ZhbHVlKQorICAgIHY9dmFyaWFibGVzLmZpbHRlcih2YXJpYWJsZV9uYW1lPSdTU1RBVEVfTUlSUk9SUycpCisgICAgaWYgKHYuY291bnQoKSA+IDApOgorICAgICAgICBmb3IgbWlycm9yIGluIHZbMF0udmFyaWFibGVfdmFsdWUuc3BsaXQoJ1xcbicpOgorICAgICAgICAgICAgcz1yZS5zdWIoJy4qICcsJycsbWlycm9yLnN0cmlwKCcgXHRcblxyJykpCisgICAgICAgICAgICBpZiBsZW4ocyk6CisgICAgICAgICAgICAgICAgdXJpX2xpc3QuYXBwZW5kKHMpCisKKyAgICBjb250ZXh0ID0geworICAgICAgICAgICAgJ2J1aWxkJyAgICAgICAgICAgOiBCdWlsZC5vYmplY3RzLmZpbHRlciggcGsgPSBidWlsZF9pZCApWyAwIF0sCisgICAgICAgICAgICAnb2JqZWN0JyAgICAgICAgICA6IHRhc2tfb2JqZWN0LAorICAgICAgICAgICAgJ3Rhc2snICAgICAgICAgICAgOiB0YXNrX29iamVjdCwKKyAgICAgICAgICAgICdjb3ZlcmVkX2J5JyAgICAgIDogY292ZXJlZEJ5LAorICAgICAgICAgICAgJ2RlcHMnICAgICAgICAgICAgOiBkZXBlbmRlbmNpZXMsCisgICAgICAgICAgICAncmRlcHMnICAgICAgICAgICA6IHJldmVyc2VfZGVwZW5kZW5jaWVzLAorICAgICAgICAgICAgJ2xvZ19oZWFkJyAgICAgICAgOiBsb2dfaGVhZCwKKyAgICAgICAgICAgICdsb2dfYm9keScgICAgICAgIDogbG9nX2JvZHksCisgICAgICAgICAgICAnc2hvd2luZ19tYXRjaGVzJyA6IEZhbHNlLAorICAgICAgICAgICAgJ3VyaV9saXN0JyAgICAgICAgOiB1cmlfbGlzdCwKKyAgICB9CisgICAgaWYgcmVxdWVzdC5HRVQuZ2V0KCAnc2hvd19tYXRjaGVzJywgIiIgKToKKyAgICAgICAgY29udGV4dFsgJ3Nob3dpbmdfbWF0Y2hlcycgXSA9IFRydWUKKyAgICAgICAgY29udGV4dFsgJ21hdGNoaW5nX3Rhc2tzJyBdID0gVGFzay5vYmplY3RzLmZpbHRlcigKKyAgICAgICAgICAgIHNzdGF0ZV9jaGVja3N1bT10YXNrX29iamVjdC5zc3RhdGVfY2hlY2tzdW0gKS5maWx0ZXIoCisgICAgICAgICAgICBidWlsZF9fY29tcGxldGVkX29uX19sdD10YXNrX29iamVjdC5idWlsZC5jb21wbGV0ZWRfb24pLmV4Y2x1ZGUoCisgICAgICAgICAgICBvcmRlcl9faXNudWxsPVRydWUpLmV4Y2x1ZGUob3V0Y29tZT1UYXNrLk9VVENPTUVfTkEpLm9yZGVyX2J5KCctYnVpbGRfX2NvbXBsZXRlZF9vbicpCisKKyAgICByZXR1cm4gcmVuZGVyKCByZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCApCisKK2RlZiByZWNpcGUocmVxdWVzdCwgYnVpbGRfaWQsIHJlY2lwZV9pZCwgYWN0aXZlX3RhYj0iMSIpOgorICAgIHRlbXBsYXRlID0gInJlY2lwZS5odG1sIgorICAgIGlmIFJlY2lwZS5vYmplY3RzLmZpbHRlcihwaz1yZWNpcGVfaWQpLmNvdW50KCkgPT0gMCA6CisgICAgICAgIHJldHVybiByZWRpcmVjdChidWlsZHMpCisKKyAgICByZWNpcGVfb2JqZWN0ID0gUmVjaXBlLm9iamVjdHMuZ2V0KHBrPXJlY2lwZV9pZCkKKyAgICBsYXllcl92ZXJzaW9uID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldChwaz1yZWNpcGVfb2JqZWN0LmxheWVyX3ZlcnNpb25faWQpCisgICAgbGF5ZXIgID0gTGF5ZXIub2JqZWN0cy5nZXQocGs9bGF5ZXJfdmVyc2lvbi5sYXllcl9pZCkKKyAgICB0YXNrc19saXN0ICA9IFRhc2sub2JqZWN0cy5maWx0ZXIocmVjaXBlX2lkID0gcmVjaXBlX2lkLCBidWlsZF9pZCA9IGJ1aWxkX2lkKS5leGNsdWRlKG9yZGVyX19pc251bGw9VHJ1ZSkuZXhjbHVkZSh0YXNrX25hbWVfX2VuZHN3aXRoPSdfc2V0c2NlbmUnKS5leGNsdWRlKG91dGNvbWU9VGFzay5PVVRDT01FX05BKQorICAgIHBhY2thZ2VfY291bnQgPSBQYWNrYWdlLm9iamVjdHMuZmlsdGVyKHJlY2lwZV9pZCA9IHJlY2lwZV9pZCkuZmlsdGVyKGJ1aWxkX2lkID0gYnVpbGRfaWQpLmZpbHRlcihzaXplX19ndGU9MCkuY291bnQoKQorCisgICAgaWYgYWN0aXZlX3RhYiAhPSAnMScgYW5kIGFjdGl2ZV90YWIgIT0gJzMnIGFuZCBhY3RpdmVfdGFiICE9ICc0JyA6CisgICAgICAgIGFjdGl2ZV90YWIgPSAnMScKKyAgICB0YWJfc3RhdGVzID0geycxJzogJycsICczJzogJycsICc0JzogJyd9CisgICAgdGFiX3N0YXRlc1thY3RpdmVfdGFiXSA9ICdhY3RpdmUnCisKKyAgICBjb250ZXh0ID0geworICAgICAgICAgICAgJ2J1aWxkJyAgIDogQnVpbGQub2JqZWN0cy5nZXQocGs9YnVpbGRfaWQpLAorICAgICAgICAgICAgJ29iamVjdCcgIDogcmVjaXBlX29iamVjdCwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJyA6IGxheWVyX3ZlcnNpb24sCisgICAgICAgICAgICAnbGF5ZXInICAgOiBsYXllciwKKyAgICAgICAgICAgICd0YXNrcycgICA6IHRhc2tzX2xpc3QsCisgICAgICAgICAgICAncGFja2FnZV9jb3VudCcgOiBwYWNrYWdlX2NvdW50LAorICAgICAgICAgICAgJ3RhYl9zdGF0ZXMnIDogdGFiX3N0YXRlcywKKyAgICB9CisgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKworZGVmIHJlY2lwZV9wYWNrYWdlcyhyZXF1ZXN0LCBidWlsZF9pZCwgcmVjaXBlX2lkKToKKyAgICB0ZW1wbGF0ZSA9ICJyZWNpcGVfcGFja2FnZXMuaHRtbCIKKyAgICBpZiBSZWNpcGUub2JqZWN0cy5maWx0ZXIocGs9cmVjaXBlX2lkKS5jb3VudCgpID09IDAgOgorICAgICAgICByZXR1cm4gcmVkaXJlY3QoYnVpbGRzKQorCisgICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMTAsICduYW1lOisnKQorICAgIG1hbmRhdG9yeV9wYXJhbWV0ZXJzID0geyAnY291bnQnOiBwYWdlc2l6ZSwgICdwYWdlJyA6IDEsICdvcmRlcmJ5Jzogb3JkZXJieSB9CisgICAgcmV0dmFsID0gX3ZlcmlmeV9wYXJhbWV0ZXJzKCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMgKQorICAgIGlmIHJldHZhbDoKKyAgICAgICAgcmV0dXJuIF9yZWRpcmVjdF9wYXJhbWV0ZXJzKCAncmVjaXBlX3BhY2thZ2VzJywgcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzLCBidWlsZF9pZCA9IGJ1aWxkX2lkLCByZWNpcGVfaWQgPSByZWNpcGVfaWQpCisgICAgKGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcpID0gX3NlYXJjaF90dXBsZShyZXF1ZXN0LCBQYWNrYWdlKQorCisgICAgcmVjaXBlX29iamVjdCA9IFJlY2lwZS5vYmplY3RzLmdldChwaz1yZWNpcGVfaWQpCisgICAgcXVlcnlzZXQgPSBQYWNrYWdlLm9iamVjdHMuZmlsdGVyKHJlY2lwZV9pZCA9IHJlY2lwZV9pZCkuZmlsdGVyKGJ1aWxkX2lkID0gYnVpbGRfaWQpLmZpbHRlcihzaXplX19ndGU9MCkKKyAgICBwYWNrYWdlX2NvdW50ID0gcXVlcnlzZXQuY291bnQoKQorICAgIHF1ZXJ5c2V0ID0gX2dldF9xdWVyeXNldChQYWNrYWdlLCBxdWVyeXNldCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJ25hbWUnKQorCisgICAgcGFja2FnZXMgPSBfYnVpbGRfcGFnZV9yYW5nZShQYWdpbmF0b3IocXVlcnlzZXQsIHBhZ2VzaXplKSxyZXF1ZXN0LkdFVC5nZXQoJ3BhZ2UnLCAxKSkKKworICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAnYnVpbGQnICAgOiBCdWlsZC5vYmplY3RzLmdldChwaz1idWlsZF9pZCksCisgICAgICAgICAgICAncmVjaXBlJyAgOiByZWNpcGVfb2JqZWN0LAorICAgICAgICAgICAgJ29iamVjdHMnICA6IHBhY2thZ2VzLAorICAgICAgICAgICAgJ29iamVjdF9jb3VudCcgOiBwYWNrYWdlX2NvdW50LAorICAgICAgICAgICAgJ3RhYmxlY29scyc6WworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgJ25hbWUnOidQYWNrYWdlJywKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCJuYW1lIiksCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOiBfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsIm5hbWUiKSwKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVya2V5JzogIm5hbWUiLAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAnbmFtZSc6J1ZlcnNpb24nLAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAnbmFtZSc6J1NpemUnLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsInNpemUiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6IF9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwic2l6ZSIpLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJrZXknOiAnc2l6ZScsCisgICAgICAgICAgICAgICAgICAgICdkY2xhc3MnOiAnc2l6ZWNvbCBzcGFuMicsCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgXQorICAgICAgIH0KKyAgICByZXNwb25zZSA9IHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKyAgICBfc2V0X3BhcmFtZXRlcnNfdmFsdWVzKHBhZ2VzaXplLCBvcmRlcmJ5LCByZXF1ZXN0KQorICAgIHJldHVybiByZXNwb25zZQorCitkZWYgdGFyZ2V0X2NvbW1vbiggcmVxdWVzdCwgYnVpbGRfaWQsIHRhcmdldF9pZCwgdmFyaWFudCApOgorICAgIHRlbXBsYXRlID0gInRhcmdldC5odG1sIgorICAgIChwYWdlc2l6ZSwgb3JkZXJieSkgPSBfZ2V0X3BhcmFtZXRlcnNfdmFsdWVzKHJlcXVlc3QsIDI1LCAnbmFtZTorJykKKyAgICBtYW5kYXRvcnlfcGFyYW1ldGVycyA9IHsgJ2NvdW50JzogcGFnZXNpemUsICAncGFnZScgOiAxLCAnb3JkZXJieSc6IG9yZGVyYnkgfQorICAgIHJldHZhbCA9IF92ZXJpZnlfcGFyYW1ldGVycyggcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzICkKKyAgICBpZiByZXR2YWw6CisgICAgICAgIHJldHVybiBfcmVkaXJlY3RfcGFyYW1ldGVycygKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFudCwgcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgICAgICBidWlsZF9pZCA9IGJ1aWxkX2lkLCB0YXJnZXRfaWQgPSB0YXJnZXRfaWQgKQorICAgICggZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZyApID0gX3NlYXJjaF90dXBsZSggcmVxdWVzdCwgUGFja2FnZSApCisKKyAgICAjIEZVVFVSRTogIGdldCByaWQgb2YgbmVzdGVkIHN1Yi1xdWVyaWVzIHJlcGxhY2luZyB3aXRoIE1hbnlUb01hbnkgZmllbGQKKyAgICBxdWVyeXNldCA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoCisgICAgICAgICAgICAgICAgICAgIHNpemVfX2d0ZSA9IDAsCisgICAgICAgICAgICAgICAgICAgIGlkX19pbiA9IFRhcmdldF9JbnN0YWxsZWRfUGFja2FnZS5vYmplY3RzLmZpbHRlcigKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9pZD10YXJnZXRfaWQgKS52YWx1ZXMoICdwYWNrYWdlX2lkJyApKQorICAgIHBhY2thZ2VzX3N1bSA9ICBxdWVyeXNldC5hZ2dyZWdhdGUoIFN1bSggJ2luc3RhbGxlZF9zaXplJyApKQorICAgIHF1ZXJ5c2V0ID0gX2dldF9xdWVyeXNldCgKKyAgICAgICAgICAgIFBhY2thZ2UsIHF1ZXJ5c2V0LCBmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nLCAnbmFtZScgKQorICAgIHF1ZXJ5c2V0ID0gcXVlcnlzZXQuc2VsZWN0X3JlbGF0ZWQoInJlY2lwZSIsICJyZWNpcGVfX2xheWVyX3ZlcnNpb24iLCAicmVjaXBlX19sYXllcl92ZXJzaW9uX19sYXllciIpCisgICAgcGFja2FnZXMgPSBfYnVpbGRfcGFnZV9yYW5nZSggUGFnaW5hdG9yKHF1ZXJ5c2V0LCBwYWdlc2l6ZSksIHJlcXVlc3QuR0VULmdldCggJ3BhZ2UnLCAxICkpCisKKworCisgICAgYnVpbGQgPSBCdWlsZC5vYmplY3RzLmdldCggcGsgPSBidWlsZF9pZCApCisKKyAgICAjIGJyaW5nIGluIHBhY2thZ2UgZGVwZW5kZW5jaWVzCisgICAgZm9yIHAgaW4gcGFja2FnZXMub2JqZWN0X2xpc3Q6CisgICAgICAgIHAucnVudGltZV9kZXBlbmRlbmNpZXMgPSBwLnBhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZS5maWx0ZXIoCisgICAgICAgICAgICB0YXJnZXRfaWQgPSB0YXJnZXRfaWQsIGRlcF90eXBlPVBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1RSREVQRU5EUyApLnNlbGVjdF9yZWxhdGVkKCJkZXBlbmRzX29uIikKKyAgICAgICAgcC5yZXZlcnNlX3J1bnRpbWVfZGVwZW5kZW5jaWVzID0gcC5wYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQuZmlsdGVyKAorICAgICAgICAgICAgdGFyZ2V0X2lkID0gdGFyZ2V0X2lkLCBkZXBfdHlwZT1QYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9UUkRFUEVORFMgKS5zZWxlY3RfcmVsYXRlZCgicGFja2FnZSIpCisgICAgdGNfcGFja2FnZSA9IHsKKyAgICAgICAgJ25hbWUnICAgICAgIDogJ1BhY2thZ2UnLAorICAgICAgICAncWhlbHAnICAgICAgOiAnUGFja2FnZWQgb3V0cHV0IHJlc3VsdGluZyBmcm9tIGJ1aWxkaW5nIGEgcmVjaXBlIGluY2x1ZGVkIGluIHRoaXMgaW1hZ2UnLAorICAgICAgICAnb3JkZXJmaWVsZCcgOiBfZ2V0X3RvZ2dsZV9vcmRlciggcmVxdWVzdCwgIm5hbWUiICksCisgICAgICAgICdvcmRlcmljb24nICA6IF9nZXRfdG9nZ2xlX29yZGVyX2ljb24oIHJlcXVlc3QsICJuYW1lIiApLAorICAgICAgICB9CisgICAgdGNfcGFja2FnZVZlcnNpb24gPSB7CisgICAgICAgICduYW1lJyAgICAgICA6ICdQYWNrYWdlIHZlcnNpb24nLAorICAgICAgICAncWhlbHAnICAgICAgOiAnVGhlIHBhY2thZ2UgdmVyc2lvbiBhbmQgcmV2aXNpb24nLAorICAgICAgICB9CisgICAgdGNfc2l6ZSA9IHsKKyAgICAgICAgJ25hbWUnICAgICAgIDogJ1NpemUnLAorICAgICAgICAncWhlbHAnICAgICAgOiAnVGhlIHNpemUgb2YgdGhlIHBhY2thZ2UnLAorICAgICAgICAnb3JkZXJmaWVsZCcgOiBfZ2V0X3RvZ2dsZV9vcmRlciggcmVxdWVzdCwgInNpemUiLCBUcnVlICksCisgICAgICAgICdvcmRlcmljb24nICA6IF9nZXRfdG9nZ2xlX29yZGVyX2ljb24oIHJlcXVlc3QsICJzaXplIiApLAorICAgICAgICAnb3JkZXJrZXknICAgOiAnc2l6ZScsCisgICAgICAgICdjbGNsYXNzJyAgICA6ICdzaXplJywKKyAgICAgICAgJ2RjbGFzcycgICAgIDogJ3NwYW4yJywKKyAgICAgICAgfQorICAgIGlmICggdmFyaWFudCA9PSAndGFyZ2V0JyApOgorICAgICAgICB0Y19zaXplWyAiaGlkZGVuIiBdID0gMAorICAgIGVsc2U6CisgICAgICAgIHRjX3NpemVbICJoaWRkZW4iIF0gPSAxCisgICAgdGNfc2l6ZVBlcmNlbnRhZ2UgPSB7CisgICAgICAgICduYW1lJyAgICAgICA6ICdTaXplIG92ZXIgdG90YWwgKCUpJywKKyAgICAgICAgJ3FoZWxwJyAgICAgIDogJ1Byb3BvcnRpb24gb2YgdGhlIG92ZXJhbGwgc2l6ZSByZXByZXNlbnRlZCBieSB0aGlzIHBhY2thZ2UnLAorICAgICAgICAnY2xjbGFzcycgICAgOiAnc2l6ZV9vdmVyX3RvdGFsJywKKyAgICAgICAgJ2hpZGRlbicgICAgIDogMSwKKyAgICAgICAgfQorICAgIHRjX2xpY2Vuc2UgPSB7CisgICAgICAgICduYW1lJyAgICAgICA6ICdMaWNlbnNlJywKKyAgICAgICAgJ3FoZWxwJyAgICAgIDogJ1RoZSBsaWNlbnNlIHVuZGVyIHdoaWNoIHRoZSBwYWNrYWdlIGlzIGRpc3RyaWJ1dGVkLiBTZXBhcmF0ZSBsaWNlbnNlIG5hbWVzIHVcCitzaW5nIHwgKHBpcGUpIG1lYW5zIHRoZXJlIGlzIGEgY2hvaWNlIGJldHdlZW4gbGljZW5zZXMuIFNlcGFyYXRlIGxpY2Vuc2UgbmFtZXMgdXNpbmcgJiAoYW1wZXJzYW5kKSBtXAorZWFucyBtdWx0aXBsZSBsaWNlbnNlcyBleGlzdCB0aGF0IGNvdmVyIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgc291cmNlJywKKyAgICAgICAgJ29yZGVyZmllbGQnIDogX2dldF90b2dnbGVfb3JkZXIoIHJlcXVlc3QsICJsaWNlbnNlIiApLAorICAgICAgICAnb3JkZXJpY29uJyAgOiBfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKCByZXF1ZXN0LCAibGljZW5zZSIgKSwKKyAgICAgICAgJ29yZGVya2V5JyAgIDogJ2xpY2Vuc2UnLAorICAgICAgICAnY2xjbGFzcycgICAgOiAnbGljZW5zZScsCisgICAgICAgIH0KKyAgICBpZiAoIHZhcmlhbnQgPT0gJ3RhcmdldCcgKToKKyAgICAgICAgdGNfbGljZW5zZVsgImhpZGRlbiIgXSA9IDEKKyAgICBlbHNlOgorICAgICAgICB0Y19saWNlbnNlWyAiaGlkZGVuIiBdID0gMAorICAgIHRjX2RlcGVuZGVuY2llcyA9IHsKKyAgICAgICAgJ25hbWUnICAgICAgIDogJ0RlcGVuZGVuY2llcycsCisgICAgICAgICdxaGVscCcgICAgICA6ICJQYWNrYWdlIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIChvdGhlciBwYWNrYWdlcykiLAorICAgICAgICAnY2xjbGFzcycgICAgOiAnZGVwZW5kcycsCisgICAgICAgIH0KKyAgICBpZiAoIHZhcmlhbnQgPT0gJ3RhcmdldCcgKToKKyAgICAgICAgdGNfZGVwZW5kZW5jaWVzWyAiaGlkZGVuIiBdID0gMAorICAgIGVsc2U6CisgICAgICAgIHRjX2RlcGVuZGVuY2llc1sgImhpZGRlbiIgXSA9IDEKKyAgICB0Y19yZGVwZW5kZW5jaWVzID0geworICAgICAgICAnbmFtZScgICAgICAgOiAnUmV2ZXJzZSBkZXBlbmRlbmNpZXMnLAorICAgICAgICAncWhlbHAnICAgICAgOiAnUGFja2FnZSBydW4tdGltZSByZXZlcnNlIGRlcGVuZGVuY2llcyAoaS5lLiB3aGljaCBvdGhlciBwYWNrYWdlcyBkZXBlbmQgb24gdGhpcyBwYWNrYWdlJywKKyAgICAgICAgJ2NsY2xhc3MnICAgIDogJ2Jyb3VnaHRfaW5fYnknLAorICAgICAgICB9CisgICAgaWYgKCB2YXJpYW50ID09ICd0YXJnZXQnICk6CisgICAgICAgIHRjX3JkZXBlbmRlbmNpZXNbICJoaWRkZW4iIF0gPSAwCisgICAgZWxzZToKKyAgICAgICAgdGNfcmRlcGVuZGVuY2llc1sgImhpZGRlbiIgXSA9IDEKKyAgICB0Y19yZWNpcGUgPSB7CisgICAgICAgICduYW1lJyAgICAgICA6ICdSZWNpcGUnLAorICAgICAgICAncWhlbHAnICAgICAgOiAnVGhlIG5hbWUgb2YgdGhlIHJlY2lwZSBidWlsZGluZyB0aGUgcGFja2FnZScsCisgICAgICAgICdvcmRlcmZpZWxkJyA6IF9nZXRfdG9nZ2xlX29yZGVyKCByZXF1ZXN0LCAicmVjaXBlX19uYW1lIiApLAorICAgICAgICAnb3JkZXJpY29uJyAgOiBfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKCByZXF1ZXN0LCAicmVjaXBlX19uYW1lIiApLAorICAgICAgICAnb3JkZXJrZXknICAgOiAicmVjaXBlX19uYW1lIiwKKyAgICAgICAgJ2NsY2xhc3MnICAgIDogJ3JlY2lwZV9uYW1lJywKKyAgICAgICAgJ2hpZGRlbicgICAgIDogMCwKKyAgICAgICAgfQorICAgIHRjX3JlY2lwZVZlcnNpb24gPSB7CisgICAgICAgICduYW1lJyAgICAgICA6ICdSZWNpcGUgdmVyc2lvbicsCisgICAgICAgICdxaGVscCcgICAgICA6ICdWZXJzaW9uIGFuZCByZXZpc2lvbiBvZiB0aGUgcmVjaXBlIGJ1aWxkaW5nIHRoZSBwYWNrYWdlJywKKyAgICAgICAgJ2NsY2xhc3MnICAgIDogJ3JlY2lwZV92ZXJzaW9uJywKKyAgICAgICAgJ2hpZGRlbicgICAgIDogMSwKKyAgICAgICAgfQorICAgIHRjX2xheWVyID0geworICAgICAgICAnbmFtZScgICAgICAgOiAnTGF5ZXInLAorICAgICAgICAncWhlbHAnICAgICAgOiAnVGhlIG5hbWUgb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlIHRoYXQgYnVpbGRzIHRoZSBwYWNrYWdlJywKKyAgICAgICAgJ29yZGVyZmllbGQnIDogX2dldF90b2dnbGVfb3JkZXIoIHJlcXVlc3QsICJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lIiApLAorICAgICAgICAnb3JkZXJpY29uJyAgOiBfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKCByZXF1ZXN0LCAicmVjaXBlX19sYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSIgKSwKKyAgICAgICAgJ29yZGVya2V5JyAgIDogInJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiLAorICAgICAgICAnY2xjbGFzcycgICAgOiAnbGF5ZXJfbmFtZScsCisgICAgICAgICdoaWRkZW4nICAgICA6IDEsCisgICAgICAgIH0KKyAgICB0Y19sYXllckJyYW5jaCA9IHsKKyAgICAgICAgJ25hbWUnICAgICAgIDogJ0xheWVyIGJyYW5jaCcsCisgICAgICAgICdxaGVscCcgICAgICA6ICdUaGUgR2l0IGJyYW5jaCBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUgdGhhdCBidWlsZHMgdGhlIHBhY2thZ2UnLAorICAgICAgICAnb3JkZXJmaWVsZCcgOiBfZ2V0X3RvZ2dsZV9vcmRlciggcmVxdWVzdCwgInJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnJhbmNoIiApLAorICAgICAgICAnb3JkZXJpY29uJyAgOiBfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKCByZXF1ZXN0LCAicmVjaXBlX19sYXllcl92ZXJzaW9uX19icmFuY2giICksCisgICAgICAgICdvcmRlcmtleScgICA6ICJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2JyYW5jaCIsCisgICAgICAgICdjbGNsYXNzJyAgICA6ICdsYXllcl9icmFuY2gnLAorICAgICAgICAnaGlkZGVuJyAgICAgOiAxLAorICAgICAgICB9CisgICAgdGNfbGF5ZXJDb21taXQgPSB7CisgICAgICAgICduYW1lJyAgICAgICA6ICdMYXllciBjb21taXQnLAorICAgICAgICAncWhlbHAnICAgICAgOiAnVGhlIEdpdCBjb21taXQgb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlIHRoYXQgYnVpbGRzIHRoZSBwYWNrYWdlJywKKyAgICAgICAgJ2NsY2xhc3MnICAgIDogJ2xheWVyX2NvbW1pdCcsCisgICAgICAgICdoaWRkZW4nICAgICA6IDEsCisgICAgICAgIH0KKworICAgIGNvbnRleHQgPSB7CisgICAgICAgICdvYmplY3RuYW1lJzogdmFyaWFudCwKKyAgICAgICAgJ2J1aWxkJyAgICAgICAgICAgICAgICA6IGJ1aWxkLAorICAgICAgICAndGFyZ2V0JyAgICAgICAgICAgICAgIDogVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKCBwayA9IHRhcmdldF9pZCApWyAwIF0sCisgICAgICAgICdvYmplY3RzJyAgICAgICAgICAgICAgOiBwYWNrYWdlcywKKyAgICAgICAgJ3BhY2thZ2VzX3N1bScgICAgICAgICA6IHBhY2thZ2VzX3N1bVsgJ2luc3RhbGxlZF9zaXplX19zdW0nIF0sCisgICAgICAgICdvYmplY3Rfc2VhcmNoX2Rpc3BsYXknOiAicGFja2FnZXMgaW5jbHVkZWQiLAorICAgICAgICAnZGVmYXVsdF9vcmRlcmJ5JyAgICAgIDogb3JkZXJieSwKKyAgICAgICAgJ3RhYmxlY29scycgICAgICAgICAgICA6IFsKKyAgICAgICAgICAgICAgICAgICAgdGNfcGFja2FnZSwKKyAgICAgICAgICAgICAgICAgICAgdGNfcGFja2FnZVZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgIHRjX2xpY2Vuc2UsCisgICAgICAgICAgICAgICAgICAgIHRjX3NpemUsCisgICAgICAgICAgICAgICAgICAgIHRjX3NpemVQZXJjZW50YWdlLAorICAgICAgICAgICAgICAgICAgICB0Y19kZXBlbmRlbmNpZXMsCisgICAgICAgICAgICAgICAgICAgIHRjX3JkZXBlbmRlbmNpZXMsCisgICAgICAgICAgICAgICAgICAgIHRjX3JlY2lwZSwKKyAgICAgICAgICAgICAgICAgICAgdGNfcmVjaXBlVmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgdGNfbGF5ZXIsCisgICAgICAgICAgICAgICAgICAgIHRjX2xheWVyQnJhbmNoLAorICAgICAgICAgICAgICAgICAgICB0Y19sYXllckNvbW1pdCwKKyAgICAgICAgICAgICAgICBdCisgICAgICAgIH0KKworCisgICAgcmVzcG9uc2UgPSByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisgICAgX3NldF9wYXJhbWV0ZXJzX3ZhbHVlcyhwYWdlc2l6ZSwgb3JkZXJieSwgcmVxdWVzdCkKKyAgICByZXR1cm4gcmVzcG9uc2UKKworZGVmIHRhcmdldCggcmVxdWVzdCwgYnVpbGRfaWQsIHRhcmdldF9pZCApOgorICAgIHJldHVybiggdGFyZ2V0X2NvbW1vbiggcmVxdWVzdCwgYnVpbGRfaWQsIHRhcmdldF9pZCwgInRhcmdldCIgKSkKKworZGVmIHRhcmdldHBrZyggcmVxdWVzdCwgYnVpbGRfaWQsIHRhcmdldF9pZCApOgorICAgIHJldHVybiggdGFyZ2V0X2NvbW1vbiggcmVxdWVzdCwgYnVpbGRfaWQsIHRhcmdldF9pZCwgInRhcmdldHBrZyIgKSkKKworZnJvbSBkamFuZ28uY29yZS5zZXJpYWxpemVycy5qc29uIGltcG9ydCBEamFuZ29KU09ORW5jb2RlcgorZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSHR0cFJlc3BvbnNlCitkZWYgeGhyX2RpcmluZm8ocmVxdWVzdCwgYnVpbGRfaWQsIHRhcmdldF9pZCk6CisgICAgdG9wID0gcmVxdWVzdC5HRVQuZ2V0KCdzdGFydCcsICcvJykKKyAgICByZXR1cm4gSHR0cFJlc3BvbnNlKF9nZXRfZGlyX2VudHJpZXMoYnVpbGRfaWQsIHRhcmdldF9pZCwgdG9wKSwgY29udGVudF90eXBlID0gImFwcGxpY2F0aW9uL2pzb24iKQorCitmcm9tIGRqYW5nby51dGlscy5mdW5jdGlvbmFsIGltcG9ydCBQcm9taXNlCitmcm9tIGRqYW5nby51dGlscy5lbmNvZGluZyBpbXBvcnQgZm9yY2VfdGV4dAorY2xhc3MgTGF6eUVuY29kZXIoanNvbi5KU09ORW5jb2Rlcik6CisgICAgZGVmIGRlZmF1bHQoc2VsZiwgb2JqKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIFByb21pc2UpOgorICAgICAgICAgICAgcmV0dXJuIGZvcmNlX3RleHQob2JqKQorICAgICAgICByZXR1cm4gc3VwZXIoTGF6eUVuY29kZXIsIHNlbGYpLmRlZmF1bHQob2JqKQorCitmcm9tIHRvYXN0ZXJndWkudGVtcGxhdGV0YWdzLnByb2plY3R0YWdzIGltcG9ydCBmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdAoraW1wb3J0IG9zCitkZWYgX2dldF9kaXJfZW50cmllcyhidWlsZF9pZCwgdGFyZ2V0X2lkLCBzdGFydCk6CisgICAgbm9kZV9zdHIgPSB7CisgICAgICAgIFRhcmdldF9GaWxlLklUWVBFX1JFR1VMQVIgICA6ICctJywKKyAgICAgICAgVGFyZ2V0X0ZpbGUuSVRZUEVfRElSRUNUT1JZIDogJ2QnLAorICAgICAgICBUYXJnZXRfRmlsZS5JVFlQRV9TWU1MSU5LICAgOiAnbCcsCisgICAgICAgIFRhcmdldF9GaWxlLklUWVBFX1NPQ0tFVCAgICA6ICdzJywKKyAgICAgICAgVGFyZ2V0X0ZpbGUuSVRZUEVfRklGTyAgICAgIDogJ3AnLAorICAgICAgICBUYXJnZXRfRmlsZS5JVFlQRV9DSEFSQUNURVIgOiAnYycsCisgICAgICAgIFRhcmdldF9GaWxlLklUWVBFX0JMT0NLICAgICA6ICdiJywKKyAgICB9CisgICAgcmVzcG9uc2UgPSBbXQorICAgIG9iamVjdHMgID0gVGFyZ2V0X0ZpbGUub2JqZWN0cy5maWx0ZXIodGFyZ2V0X19leGFjdD10YXJnZXRfaWQsIGRpcmVjdG9yeV9fcGF0aD1zdGFydCkKKyAgICB0YXJnZXRfcGFja2FnZXMgPSBUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2Uub2JqZWN0cy5maWx0ZXIodGFyZ2V0X19leGFjdD10YXJnZXRfaWQpLnZhbHVlc19saXN0KCdwYWNrYWdlX2lkJywgZmxhdD1UcnVlKQorICAgIGZvciBvIGluIG9iamVjdHM6CisgICAgICAgICMgZXhjbHVkZSByb290IGlub2RlICcvJworICAgICAgICBpZiBvLnBhdGggPT0gJy8nOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZW50cnkgPSB7fQorICAgICAgICAgICAgZW50cnlbJ3BhcmVudCddID0gc3RhcnQKKyAgICAgICAgICAgIGVudHJ5WyduYW1lJ10gPSBvcy5wYXRoLmJhc2VuYW1lKG8ucGF0aCkKKyAgICAgICAgICAgIGVudHJ5WydmdWxscGF0aCddID0gby5wYXRoCisKKyAgICAgICAgICAgICMgc2V0IGRlZmF1bHRzLCBub3QgYWxsIGRlbnRyaWVzIGhhdmUgcGFja2FnZXMKKyAgICAgICAgICAgIGVudHJ5WydpbnN0YWxsZWRfcGFja2FnZSddID0gTm9uZQorICAgICAgICAgICAgZW50cnlbJ3BhY2thZ2VfaWQnXSA9IE5vbmUKKyAgICAgICAgICAgIGVudHJ5WydwYWNrYWdlJ10gPSBOb25lCisgICAgICAgICAgICBlbnRyeVsnbGlua190byddID0gTm9uZQorICAgICAgICAgICAgaWYgby5pbm9kZXR5cGUgPT0gVGFyZ2V0X0ZpbGUuSVRZUEVfRElSRUNUT1JZOgorICAgICAgICAgICAgICAgIGVudHJ5Wydpc2RpciddID0gMQorICAgICAgICAgICAgICAgICMgaXMgdGhlcmUgY29udGVudCBpbiBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBlbnRyeVsnY2hpbGRjb3VudCddID0gVGFyZ2V0X0ZpbGUub2JqZWN0cy5maWx0ZXIodGFyZ2V0X19leGFjdD10YXJnZXRfaWQsIGRpcmVjdG9yeV9fcGF0aD1vLnBhdGgpLmFsbCgpLmNvdW50KCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZW50cnlbJ2lzZGlyJ10gPSAwCisKKyAgICAgICAgICAgICAgICAjIHJlc29sdmUgdGhlIGZpbGUgdG8gZ2V0IHRoZSBwYWNrYWdlIGZyb20gdGhlIHJlc29sdmVkIGZpbGUKKyAgICAgICAgICAgICAgICByZXNvbHZlZF9pZCA9IG8uc3ltX3RhcmdldF9pZAorICAgICAgICAgICAgICAgIHJlc29sdmVkX3BhdGggPSBvLnBhdGgKKyAgICAgICAgICAgICAgICBpZiB0YXJnZXRfcGFja2FnZXMuY291bnQoKToKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgcmVzb2x2ZWRfaWQgIT0gIiIgYW5kIHJlc29sdmVkX2lkICE9IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICB0ZiA9IFRhcmdldF9GaWxlLm9iamVjdHMuZ2V0KHBrPXJlc29sdmVkX2lkKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRfcGF0aCA9IHRmLnBhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkX2lkID0gdGYuc3ltX3RhcmdldF9pZAorCisgICAgICAgICAgICAgICAgICAgIHRoaXNmaWxlPVBhY2thZ2VfRmlsZS5vYmplY3RzLmFsbCgpLmZpbHRlcihwYXRoX19leGFjdD1yZXNvbHZlZF9wYXRoLCBwYWNrYWdlX2lkX19pbj10YXJnZXRfcGFja2FnZXMpCisgICAgICAgICAgICAgICAgICAgIGlmIHRoaXNmaWxlLmNvdW50KCk6CisgICAgICAgICAgICAgICAgICAgICAgICBwID0gUGFja2FnZS5vYmplY3RzLmdldChwaz10aGlzZmlsZVswXS5wYWNrYWdlX2lkKQorICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlbJ2luc3RhbGxlZF9wYWNrYWdlJ10gPSBwLmluc3RhbGxlZF9uYW1lCisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeVsncGFja2FnZV9pZCddID0gc3RyKHAuaWQpCisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeVsncGFja2FnZSddID0gcC5uYW1lCisgICAgICAgICAgICAgICAgIyBkb24ndCB1c2UgcmVzb2x2ZWQgcGF0aCBmcm9tIGFib3ZlLCBzaG93IGltbWVkaWF0ZSBsaW5rLXRvCisgICAgICAgICAgICAgICAgaWYgby5zeW1fdGFyZ2V0X2lkICE9ICIiIGFuZCBvLnN5bV90YXJnZXRfaWQgIT0gTm9uZToKKyAgICAgICAgICAgICAgICAgICAgZW50cnlbJ2xpbmtfdG8nXSA9IFRhcmdldF9GaWxlLm9iamVjdHMuZ2V0KHBrPW8uc3ltX3RhcmdldF9pZCkucGF0aAorICAgICAgICAgICAgZW50cnlbJ3NpemUnXSA9IGZpbHRlcmVkX2ZpbGVzaXplZm9ybWF0KG8uc2l6ZSkKKyAgICAgICAgICAgIGlmIGVudHJ5WydsaW5rX3RvJ10gIT0gTm9uZToKKyAgICAgICAgICAgICAgICBlbnRyeVsncGVybWlzc2lvbiddID0gbm9kZV9zdHJbby5pbm9kZXR5cGVdICsgby5wZXJtaXNzaW9uCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVudHJ5WydwZXJtaXNzaW9uJ10gPSBub2RlX3N0cltvLmlub2RldHlwZV0gKyBvLnBlcm1pc3Npb24KKyAgICAgICAgICAgIGVudHJ5Wydvd25lciddID0gby5vd25lcgorICAgICAgICAgICAgZW50cnlbJ2dyb3VwJ10gPSBvLmdyb3VwCisgICAgICAgICAgICByZXNwb25zZS5hcHBlbmQoZW50cnkpCisKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcHJpbnQgIkV4Y2VwdGlvbiAiLCBlCisgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGUpCisKKyAgICAjIHNvcnQgYnkgZGlyZWN0b3JpZXMgZmlyc3QsIHRoZW4gYnkgbmFtZQorICAgIHJzb3J0ZWQgPSBzb3J0ZWQocmVzcG9uc2UsIGtleT1sYW1iZGEgZW50cnkgOiAgZW50cnlbJ25hbWUnXSkKKyAgICByc29ydGVkID0gc29ydGVkKHJzb3J0ZWQsIGtleT1sYW1iZGEgZW50cnkgOiAgZW50cnlbJ2lzZGlyJ10sIHJldmVyc2U9VHJ1ZSkKKyAgICByZXR1cm4ganNvbi5kdW1wcyhyc29ydGVkLCBjbHM9TGF6eUVuY29kZXIpLnJlcGxhY2UoJzwvJywgJzxcXC8nKQorCitkZWYgZGlyaW5mbyhyZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkLCBmaWxlX3BhdGg9Tm9uZSk6CisgICAgdGVtcGxhdGUgPSAiZGlyaW5mby5odG1sIgorICAgIG9iamVjdHMgPSBfZ2V0X2Rpcl9lbnRyaWVzKGJ1aWxkX2lkLCB0YXJnZXRfaWQsICcvJykKKyAgICBwYWNrYWdlc19zdW0gPSBQYWNrYWdlLm9iamVjdHMuZmlsdGVyKGlkX19pbj1UYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2Uub2JqZWN0cy5maWx0ZXIodGFyZ2V0X2lkPXRhcmdldF9pZCkudmFsdWVzKCdwYWNrYWdlX2lkJykpLmFnZ3JlZ2F0ZShTdW0oJ2luc3RhbGxlZF9zaXplJykpCisgICAgZGlyX2xpc3QgPSBOb25lCisgICAgaWYgZmlsZV9wYXRoICE9IE5vbmU6CisgICAgICAgICIiIgorICAgICAgICBMaW5rIGZyb20gdGhlIGluY2x1ZGVkIHBhY2thZ2UgZGV0YWlsIGZpbGUgbGlzdCBwYWdlIGFuZCBpcworICAgICAgICByZXF1ZXN0aW5nIG9wZW5pbmcgdGhlIGRpciBpbmZvIHRvIGEgc3BlY2lmaWMgZmlsZSBwYXRoLgorICAgICAgICBQcm92aWRlIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIGV4cGFuZCBhbmQgdGhlIGZ1bGwgcGF0aCB0bworICAgICAgICBoaWdobGlnaHQgaW4gdGhlIHBhZ2UuCisgICAgICAgICIiIgorICAgICAgICAjIEFhc3N1bWUgdGFyZ2V0J3MgcGF0aCBzZXBhcmF0b3IgbWF0Y2hlcyBob3N0J3MsIHRoYXQgaXMsIG9zLnNlcAorICAgICAgICBzZXAgPSBvcy5zZXAKKyAgICAgICAgZGlyX2xpc3QgPSBbXQorICAgICAgICBoZWFkID0gZmlsZV9wYXRoCisgICAgICAgIHdoaWxlIGhlYWQgIT0gc2VwOgorICAgICAgICAgICAgKGhlYWQsIHRhaWwpID0gb3MucGF0aC5zcGxpdChoZWFkKQorICAgICAgICAgICAgaWYgaGVhZCAhPSBzZXA6CisgICAgICAgICAgICAgICAgZGlyX2xpc3QuaW5zZXJ0KDAsIGhlYWQpCisKKyAgICBjb250ZXh0ID0geyAnYnVpbGQnOiBCdWlsZC5vYmplY3RzLmdldChwaz1idWlsZF9pZCksCisgICAgICAgICAgICAgICAgJ3RhcmdldCc6IFRhcmdldC5vYmplY3RzLmdldChwaz10YXJnZXRfaWQpLAorICAgICAgICAgICAgICAgICdwYWNrYWdlc19zdW0nOiBwYWNrYWdlc19zdW1bJ2luc3RhbGxlZF9zaXplX19zdW0nXSwKKyAgICAgICAgICAgICAgICAnb2JqZWN0cyc6IG9iamVjdHMsCisgICAgICAgICAgICAgICAgJ2Rpcl9saXN0JzogZGlyX2xpc3QsCisgICAgICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6IGZpbGVfcGF0aCwKKyAgICAgICAgICAgICAgfQorICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisKK2RlZiBfZmluZF90YXNrX2RlcCh0YXNrX29iamVjdCk6CisgICAgcmV0dXJuIG1hcChsYW1iZGEgeDogeC5kZXBlbmRzX29uLCBUYXNrX0RlcGVuZGVuY3kub2JqZWN0cy5maWx0ZXIodGFzaz10YXNrX29iamVjdCkuZmlsdGVyKGRlcGVuZHNfb25fX29yZGVyX19ndCA9IDApLmV4Y2x1ZGUoZGVwZW5kc19vbl9fb3V0Y29tZSA9IFRhc2suT1VUQ09NRV9OQSkuc2VsZWN0X3JlbGF0ZWQoImRlcGVuZHNfb24iKSkKKworCitkZWYgX2ZpbmRfdGFza19yZXZkZXAodGFza19vYmplY3QpOgorICAgIHRwID0gW10KKyAgICB0cCA9IG1hcChsYW1iZGEgdDogdC50YXNrLCBUYXNrX0RlcGVuZGVuY3kub2JqZWN0cy5maWx0ZXIoZGVwZW5kc19vbj10YXNrX29iamVjdCkuZmlsdGVyKHRhc2tfX29yZGVyX19ndD0wKS5leGNsdWRlKHRhc2tfX291dGNvbWUgPSBUYXNrLk9VVENPTUVfTkEpLnNlbGVjdF9yZWxhdGVkKCJ0YXNrIiwgInRhc2tfX3JlY2lwZSIsICJ0YXNrX19idWlsZCIpKQorICAgIHJldHVybiB0cAorCitkZWYgX2ZpbmRfdGFza19yZXZkZXBfbGlzdCh0YXNrbGlzdCk6CisgICAgdHAgPSBbXQorICAgIHRwID0gbWFwKGxhbWJkYSB0OiB0LnRhc2ssIFRhc2tfRGVwZW5kZW5jeS5vYmplY3RzLmZpbHRlcihkZXBlbmRzX29uX19pbj10YXNrbGlzdCkuZmlsdGVyKHRhc2tfX29yZGVyX19ndD0wKS5leGNsdWRlKHRhc2tfX291dGNvbWUgPSBUYXNrLk9VVENPTUVfTkEpLnNlbGVjdF9yZWxhdGVkKCJ0YXNrIiwgInRhc2tfX3JlY2lwZSIsICJ0YXNrX19idWlsZCIpKQorICAgIHJldHVybiB0cAorCitkZWYgX2ZpbmRfdGFza19wcm92aWRlcih0YXNrX29iamVjdCk6CisgICAgdGFza19yZXZkZXBzID0gX2ZpbmRfdGFza19yZXZkZXAodGFza19vYmplY3QpCisgICAgZm9yIHRyIGluIHRhc2tfcmV2ZGVwczoKKyAgICAgICAgaWYgdHIub3V0Y29tZSAhPSBUYXNrLk9VVENPTUVfQ09WRVJFRDoKKyAgICAgICAgICAgIHJldHVybiB0cgorICAgIGZvciB0ciBpbiB0YXNrX3JldmRlcHM6CisgICAgICAgIHRyYyA9IF9maW5kX3Rhc2tfcHJvdmlkZXIodHIpCisgICAgICAgIGlmIHRyYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiB0cmMKKyAgICByZXR1cm4gTm9uZQorCitkZWYgdGFza3NfY29tbW9uKHJlcXVlc3QsIGJ1aWxkX2lkLCB2YXJpYW50LCB0YXNrX2FuY2hvcik6CisjIFRoaXMgY2xhc3MgaXMgc2hhcmVkIGJldHdlZW4gdGhlc2UgcGFnZXMKKyMKKyMgQ29sdW1uICAgIHRhc2tzICBidWlsZHRpbWUgIGRpc2tpbyAgY3B1dXNhZ2UKKyMgLS0tLS0tLS0tIC0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tCisjIENhY2hlICAgICAgZGVmCisjIENQVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluIC0KKyMgRGlzayAgICAgICAgICAgICAgICAgICAgICAgICBtaW4gLQorIyBFeGVjdXRlZCAgIGRlZiAgICAgZGVmICAgICAgIGRlZiAgICAgIGRlZgorIyBMb2cKKyMgT3JkZXIgICAgICBkZWYgKworIyBPdXRjb21lICAgIGRlZiAgICAgZGVmICAgICAgIGRlZiAgICAgIGRlZgorIyBSZWNpcGUgICAgIG1pbiAgICAgbWluICAgICAgIG1pbiAgICAgIG1pbgorIyBWZXJzaW9uCisjIFRhc2sgICAgICAgbWluICAgICBtaW4gICAgICAgbWluICAgICAgbWluCisjIFRpbWUgICAgICAgICAgICAgICBtaW4gLQorIworIyAnbWluJzpvbiBhbHdheXMsICdkZWYnOm9uIGJ5IGRlZmF1bHQsIGVsc2UgaGlkZGVuCisjICcrJyBkZWZhdWx0IGNvbHVtbiBzb3J0IHVwLCAnLScgZGVmYXVsdCBjb2x1bW4gc29ydCBkb3duCisKKyAgICBhbmNob3IgPSByZXF1ZXN0LkdFVC5nZXQoJ2FuY2hvcicsICcnKQorICAgIGlmIG5vdCBhbmNob3I6CisgICAgICAgIGFuY2hvcj10YXNrX2FuY2hvcgorCisgICAgIyBkZWZhdWx0IG9yZGVyaW5nIGRlcGVuZHMgb24gdmFyaWFudAorICAgIGlmICAgJ2J1aWxkdGltZScgPT0gdmFyaWFudDoKKyAgICAgICAgdGl0bGVfdmFyaWFudD0nVGltZScKKyAgICAgICAgb2JqZWN0X3NlYXJjaF9kaXNwbGF5PSJ0aW1lIGRhdGEiCisgICAgICAgIGZpbHRlcl9zZWFyY2hfZGlzcGxheT0idGFza3MiCisgICAgICAgIChwYWdlc2l6ZSwgb3JkZXJieSkgPSBfZ2V0X3BhcmFtZXRlcnNfdmFsdWVzKHJlcXVlc3QsIDI1LCAnZWxhcHNlZF90aW1lOi0nKQorICAgIGVsaWYgJ2Rpc2tpbycgICAgPT0gdmFyaWFudDoKKyAgICAgICAgdGl0bGVfdmFyaWFudD0nRGlzayBJL08nCisgICAgICAgIG9iamVjdF9zZWFyY2hfZGlzcGxheT0iZGlzayBJL08gZGF0YSIKKyAgICAgICAgZmlsdGVyX3NlYXJjaF9kaXNwbGF5PSJ0YXNrcyIKKyAgICAgICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMjUsICdkaXNrX2lvOi0nKQorICAgIGVsaWYgJ2NwdXVzYWdlJyAgPT0gdmFyaWFudDoKKyAgICAgICAgdGl0bGVfdmFyaWFudD0nQ1BVIHVzYWdlJworICAgICAgICBvYmplY3Rfc2VhcmNoX2Rpc3BsYXk9IkNQVSB1c2FnZSBkYXRhIgorICAgICAgICBmaWx0ZXJfc2VhcmNoX2Rpc3BsYXk9InRhc2tzIgorICAgICAgICAocGFnZXNpemUsIG9yZGVyYnkpID0gX2dldF9wYXJhbWV0ZXJzX3ZhbHVlcyhyZXF1ZXN0LCAyNSwgJ2NwdV91c2FnZTotJykKKyAgICBlbHNlIDoKKyAgICAgICAgdGl0bGVfdmFyaWFudD0nVGFza3MnCisgICAgICAgIG9iamVjdF9zZWFyY2hfZGlzcGxheT0idGFza3MiCisgICAgICAgIGZpbHRlcl9zZWFyY2hfZGlzcGxheT0idGFza3MiCisgICAgICAgIChwYWdlc2l6ZSwgb3JkZXJieSkgPSBfZ2V0X3BhcmFtZXRlcnNfdmFsdWVzKHJlcXVlc3QsIDI1LCAnb3JkZXI6KycpCisKKworICAgIG1hbmRhdG9yeV9wYXJhbWV0ZXJzID0geyAnY291bnQnOiBwYWdlc2l6ZSwgICdwYWdlJyA6IDEsICdvcmRlcmJ5Jzogb3JkZXJieSB9CisKKyAgICB0ZW1wbGF0ZSA9ICd0YXNrcy5odG1sJworICAgIHJldHZhbCA9IF92ZXJpZnlfcGFyYW1ldGVycyggcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzICkKKyAgICBpZiByZXR2YWw6CisgICAgICAgIGlmIHRhc2tfYW5jaG9yOgorICAgICAgICAgICAgbWFuZGF0b3J5X3BhcmFtZXRlcnNbJ2FuY2hvciddPXRhc2tfYW5jaG9yCisgICAgICAgIHJldHVybiBfcmVkaXJlY3RfcGFyYW1ldGVycyggdmFyaWFudCwgcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzLCBidWlsZF9pZCA9IGJ1aWxkX2lkKQorICAgIChmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nKSA9IF9zZWFyY2hfdHVwbGUocmVxdWVzdCwgVGFzaykKKyAgICBxdWVyeXNldF9hbGwgPSBUYXNrLm9iamVjdHMuZmlsdGVyKGJ1aWxkPWJ1aWxkX2lkKS5leGNsdWRlKG9yZGVyX19pc251bGw9VHJ1ZSkuZXhjbHVkZShvdXRjb21lPVRhc2suT1VUQ09NRV9OQSkKKyAgICBxdWVyeXNldF9hbGwgPSBxdWVyeXNldF9hbGwuc2VsZWN0X3JlbGF0ZWQoInJlY2lwZSIsICJidWlsZCIpCisKKyAgICBxdWVyeXNldF93aXRoX3NlYXJjaCA9IF9nZXRfcXVlcnlzZXQoVGFzaywgcXVlcnlzZXRfYWxsLCBOb25lICwgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJ29yZGVyJykKKworICAgIGlmIG9yZGVyaW5nX3N0cmluZy5zdGFydHN3aXRoKCdvdXRjb21lJyk6CisgICAgICAgIHF1ZXJ5c2V0ID0gX2dldF9xdWVyeXNldChUYXNrLCBxdWVyeXNldF9hbGwsIGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCAnb3JkZXI6KycsICdvcmRlcicpCisgICAgICAgIHF1ZXJ5c2V0ID0gc29ydGVkKHF1ZXJ5c2V0LCBrZXk9bGFtYmRhIHVyOiAodXIub3V0Y29tZV90ZXh0KSwgcmV2ZXJzZT1vcmRlcmluZ19zdHJpbmcuZW5kc3dpdGgoJy0nKSkKKyAgICBlbGlmIG9yZGVyaW5nX3N0cmluZy5zdGFydHN3aXRoKCdzc3RhdGVfcmVzdWx0Jyk6CisgICAgICAgIHF1ZXJ5c2V0ID0gX2dldF9xdWVyeXNldChUYXNrLCBxdWVyeXNldF9hbGwsIGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCAnb3JkZXI6KycsICdvcmRlcicpCisgICAgICAgIHF1ZXJ5c2V0ID0gc29ydGVkKHF1ZXJ5c2V0LCBrZXk9bGFtYmRhIHVyOiAodXIuc3N0YXRlX3RleHQpLCByZXZlcnNlPW9yZGVyaW5nX3N0cmluZy5lbmRzd2l0aCgnLScpKQorICAgIGVsc2U6CisgICAgICAgIHF1ZXJ5c2V0ID0gX2dldF9xdWVyeXNldChUYXNrLCBxdWVyeXNldF9hbGwsIGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcsICdvcmRlcicpCisKKworICAgICMgY29tcHV0ZSB0aGUgYW5jaG9yJ3MgcGFnZQorICAgIGlmIGFuY2hvcjoKKyAgICAgICAgcmVxdWVzdC5HRVQgPSByZXF1ZXN0LkdFVC5jb3B5KCkKKyAgICAgICAgZGVsIHJlcXVlc3QuR0VUWydhbmNob3InXQorICAgICAgICBpPTAKKyAgICAgICAgYT1pbnQoYW5jaG9yKQorICAgICAgICBjb3VudF9wZXJfcGFnZT1pbnQocGFnZXNpemUpCisgICAgICAgIGZvciB0YXNrX29iamVjdCBpbiBxdWVyeXNldC5pdGVyYXRvcigpOgorICAgICAgICAgICAgaWYgYSA9PSB0YXNrX29iamVjdC5vcmRlcjoKKyAgICAgICAgICAgICAgICBuZXdfcGFnZT0gKGkgLyBjb3VudF9wZXJfcGFnZSApICsgMQorICAgICAgICAgICAgICAgIHJlcXVlc3QuR0VULl9fc2V0aXRlbV9fKCdwYWdlJywgbmV3X3BhZ2UpCisgICAgICAgICAgICAgICAgbWFuZGF0b3J5X3BhcmFtZXRlcnNbJ3BhZ2UnXT1uZXdfcGFnZQorICAgICAgICAgICAgICAgIHJldHVybiBfcmVkaXJlY3RfcGFyYW1ldGVycyggdmFyaWFudCwgcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzLCBidWlsZF9pZCA9IGJ1aWxkX2lkKQorICAgICAgICAgICAgaSArPSAxCisKKyAgICB0YXNrX29iamVjdHMgPSBfYnVpbGRfcGFnZV9yYW5nZShQYWdpbmF0b3IocXVlcnlzZXQsIHBhZ2VzaXplKSxyZXF1ZXN0LkdFVC5nZXQoJ3BhZ2UnLCAxKSkKKworICAgICMgZGVmaW5lIChhbmQgbW9kaWZ5IGJ5IHZhcmlhbnRzKSB0aGUgJ3RhYmxlY29scycgbWVtYmVycworICAgIHRjX29yZGVyPXsKKyAgICAgICAgJ25hbWUnOidPcmRlcicsCisgICAgICAgICdxaGVscCc6J1RoZSBydW5uaW5nIHNlcXVlbmNlIG9mIGVhY2ggdGFzayBpbiB0aGUgYnVpbGQnLAorICAgICAgICAnY2xjbGFzcyc6ICdvcmRlcicsICdoaWRkZW4nIDogMSwKKyAgICAgICAgJ29yZGVya2V5JyA6ICdvcmRlcicsCisgICAgICAgICdvcmRlcmZpZWxkJzpfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAib3JkZXIiKSwKKyAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAib3JkZXIiKX0KKyAgICBpZiAndGFza3MnID09IHZhcmlhbnQ6CisgICAgICAgIHRjX29yZGVyWydoaWRkZW4nXT0nMCcKKyAgICAgICAgZGVsIHRjX29yZGVyWydjbGNsYXNzJ10KKworICAgIHRjX3JlY2lwZT17CisgICAgICAgICduYW1lJzonUmVjaXBlJywKKyAgICAgICAgJ3FoZWxwJzonVGhlIG5hbWUgb2YgdGhlIHJlY2lwZSB0byB3aGljaCBlYWNoIHRhc2sgYXBwbGllcycsCisgICAgICAgICdvcmRlcmtleScgOiAncmVjaXBlX19uYW1lJywKKyAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAicmVjaXBlX19uYW1lIiksCisgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInJlY2lwZV9fbmFtZSIpLAorICAgIH0KKyAgICB0Y19yZWNpcGVfdmVyc2lvbj17CisgICAgICAgICduYW1lJzonUmVjaXBlIHZlcnNpb24nLAorICAgICAgICAncWhlbHAnOidUaGUgdmVyc2lvbiBvZiB0aGUgcmVjaXBlIHRvIHdoaWNoIGVhY2ggdGFzayBhcHBsaWVzJywKKyAgICAgICAgJ2NsY2xhc3MnOiAncmVjaXBlX3ZlcnNpb24nLCAnaGlkZGVuJyA6IDEsCisgICAgfQorICAgIHRjX3Rhc2s9eworICAgICAgICAnbmFtZSc6J1Rhc2snLAorICAgICAgICAncWhlbHAnOidUaGUgbmFtZSBvZiB0aGUgdGFzaycsCisgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInRhc2tfbmFtZSIpLAorICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJ0YXNrX25hbWUiKSwKKyAgICAgICAgJ29yZGVya2V5JyA6ICd0YXNrX25hbWUnLAorICAgIH0KKyAgICB0Y19leGVjdXRlZD17CisgICAgICAgICduYW1lJzonRXhlY3V0ZWQnLAorICAgICAgICAncWhlbHAnOiJUaGlzIHZhbHVlIHRlbGxzIHlvdSBpZiBhIHRhc2sgaGFkIHRvIHJ1biAoZXhlY3V0ZWQpIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSB0YXNrIG91dHB1dCwgb3IgaWYgdGhlIG91dHB1dCB3YXMgcHJvdmlkZWQgYnkgYW5vdGhlciB0YXNrIGFuZCB0aGVyZWZvcmUgdGhlIHRhc2sgZGlkbid0IG5lZWQgdG8gcnVuIChub3QgZXhlY3V0ZWQpIiwKKyAgICAgICAgJ2NsY2xhc3MnOiAnZXhlY3V0ZWQnLCAnaGlkZGVuJyA6IDAsCisgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInRhc2tfZXhlY3V0ZWQiKSwKKyAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAidGFza19leGVjdXRlZCIpLAorICAgICAgICAnb3JkZXJrZXknIDogJ3Rhc2tfZXhlY3V0ZWQnLAorICAgICAgICAnZmlsdGVyJyA6IHsKKyAgICAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2V4ZWN1dGVkJywKKyAgICAgICAgICAgICAgICAgICAnbGFiZWwnOiAnU2hvdzonLAorICAgICAgICAgICAgICAgICAgICdvcHRpb25zJyA6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0V4ZWN1dGVkIFRhc2tzJywgJ3Rhc2tfZXhlY3V0ZWQ6MScsIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcih0YXNrX2V4ZWN1dGVkPTEpLmNvdW50KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnTm90IEV4ZWN1dGVkIFRhc2tzJywgJ3Rhc2tfZXhlY3V0ZWQ6MCcsIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcih0YXNrX2V4ZWN1dGVkPTApLmNvdW50KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICB9CisKKyAgICB9CisgICAgdGNfb3V0Y29tZT17CisgICAgICAgICduYW1lJzonT3V0Y29tZScsCisgICAgICAgICdxaGVscCc6IlRoaXMgY29sdW1uIHRlbGxzIHlvdSBpZiAnZXhlY3V0ZWQnIHRhc2tzIHN1Y2NlZWRlZCBvciBmYWlsZWQuIFRoZSBjb2x1bW4gYWxzbyB0ZWxscyB5b3Ugd2h5ICdub3QgZXhlY3V0ZWQnIHRhc2tzIGRpZCBub3QgbmVlZCB0byBydW4iLAorICAgICAgICAnY2xjbGFzcyc6ICdvdXRjb21lJywgJ2hpZGRlbicgOiAwLAorICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJvdXRjb21lIiksCisgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgIm91dGNvbWUiKSwKKyAgICAgICAgJ29yZGVya2V5JyA6ICdvdXRjb21lJywKKyAgICAgICAgJ2ZpbHRlcicgOiB7CisgICAgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdvdXRjb21lJywKKyAgICAgICAgICAgICAgICAgICAnbGFiZWwnOiAnU2hvdzonLAorICAgICAgICAgICAgICAgICAgICdvcHRpb25zJyA6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ1N1Y2NlZWRlZCBUYXNrcycsICdvdXRjb21lOiVkJyVUYXNrLk9VVENPTUVfU1VDQ0VTUywgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKG91dGNvbWU9VGFzay5PVVRDT01FX1NVQ0NFU1MpLmNvdW50KCksICInU3VjY2VlZGVkJyB0YXNrcyBhcmUgdGhvc2UgdGhhdCByYW4gYW5kIGNvbXBsZXRlZCBkdXJpbmcgdGhlIGJ1aWxkIiApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnRmFpbGVkIFRhc2tzJywgJ291dGNvbWU6JWQnJVRhc2suT1VUQ09NRV9GQUlMRUQsIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcihvdXRjb21lPVRhc2suT1VUQ09NRV9GQUlMRUQpLmNvdW50KCksICInRmFpbGVkJyB0YXNrcyBhcmUgdGhvc2UgdGhhdCByYW4gYnV0IGRpZCBub3QgY29tcGxldGUgZHVyaW5nIHRoZSBidWlsZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnQ2FjaGVkIFRhc2tzJywgJ291dGNvbWU6JWQnJVRhc2suT1VUQ09NRV9DQUNIRUQsIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcihvdXRjb21lPVRhc2suT1VUQ09NRV9DQUNIRUQpLmNvdW50KCksICdDYWNoZWQgdGFza3MgcmVzdG9yZSBvdXRwdXQgZnJvbSB0aGUgPGNvZGU+c3N0YXRlLWNhY2hlPC9jb2RlPiBkaXJlY3Rvcnkgb3IgbWlycm9ycycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnUHJlYnVpbHQgVGFza3MnLCAnb3V0Y29tZTolZCclVGFzay5PVVRDT01FX1BSRUJVSUxULCBxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIob3V0Y29tZT1UYXNrLk9VVENPTUVfUFJFQlVJTFQpLmNvdW50KCksJ1ByZWJ1aWx0IHRhc2tzIGRpZG5cJ3QgbmVlZCB0byBydW4gYmVjYXVzZSB0aGVpciBvdXRwdXQgd2FzIHJldXNlZCBmcm9tIGEgcHJldmlvdXMgYnVpbGQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0NvdmVyZWQgVGFza3MnLCAnb3V0Y29tZTolZCclVGFzay5PVVRDT01FX0NPVkVSRUQsIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcihvdXRjb21lPVRhc2suT1VUQ09NRV9DT1ZFUkVEKS5jb3VudCgpLCAnQ292ZXJlZCB0YXNrcyBkaWRuXCd0IG5lZWQgdG8gcnVuIGJlY2F1c2UgdGhlaXIgb3V0cHV0IGlzIHByb3ZpZGVkIGJ5IGFub3RoZXIgdGFzayBpbiB0aGlzIGJ1aWxkJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdFbXB0eSBUYXNrcycsICdvdXRjb21lOiVkJyVUYXNrLk9VVENPTUVfRU1QVFksIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcihvdXRjb21lPVRhc2suT1VUQ09NRV9FTVBUWSkuY291bnQoKSwgJ0VtcHR5IHRhc2tzIGhhdmUgbm8gZXhlY3V0YWJsZSBjb250ZW50JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgIH0KKworICAgIH0KKworICAgIHRjX2NhY2hlPXsKKyAgICAgICAgJ25hbWUnOidDYWNoZSBhdHRlbXB0JywKKyAgICAgICAgJ3FoZWxwJzonVGhpcyBjb2x1bW4gdGVsbHMgeW91IGlmIGEgdGFzayB0cmllZCB0byByZXN0b3JlIG91dHB1dCBmcm9tIHRoZSA8Y29kZT5zc3RhdGUtY2FjaGU8L2NvZGU+IGRpcmVjdG9yeSBvciBtaXJyb3JzLCBhbmQgcmVwb3J0cyB0aGUgcmVzdWx0OiBTdWNjZWVkZWQsIEZhaWxlZCBvciBGaWxlIG5vdCBpbiBjYWNoZScsCisgICAgICAgICdjbGNsYXNzJzogJ2NhY2hlX2F0dGVtcHQnLCAnaGlkZGVuJyA6IDAsCisgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInNzdGF0ZV9yZXN1bHQiKSwKKyAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAic3N0YXRlX3Jlc3VsdCIpLAorICAgICAgICAnb3JkZXJrZXknIDogJ3NzdGF0ZV9yZXN1bHQnLAorICAgICAgICAnZmlsdGVyJyA6IHsKKyAgICAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2NhY2hlX2F0dGVtcHQnLAorICAgICAgICAgICAgICAgICAgICdsYWJlbCc6ICdTaG93OicsCisgICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnIDogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnVGFza3Mgd2l0aCBjYWNoZSBhdHRlbXB0cycsICdzc3RhdGVfcmVzdWx0X19ndDolZCclVGFzay5TU1RBVEVfTkEsIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcihzc3RhdGVfcmVzdWx0X19ndD1UYXNrLlNTVEFURV9OQSkuY291bnQoKSwgJ1Nob3cgYWxsIHRhc2tzIHRoYXQgdHJpZWQgdG8gcmVzdG9yZSBvdXB1dCBmcm9tIHRoZSA8Y29kZT5zc3RhdGUtY2FjaGU8L2NvZGU+IGRpcmVjdG9yeSBvciBtaXJyb3JzJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJUYXNrcyB3aXRoICdGaWxlIG5vdCBpbiBjYWNoZScgYXR0ZW1wdHMiLCAnc3N0YXRlX3Jlc3VsdDolZCclVGFzay5TU1RBVEVfTUlTUywgIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcihzc3RhdGVfcmVzdWx0PVRhc2suU1NUQVRFX01JU1MpLmNvdW50KCksICdTaG93IHRhc2tzIHRoYXQgdHJpZWQgdG8gcmVzdG9yZSBvdXRwdXQsIGJ1dCBkaWQgbm90IGZpbmQgaXQgaW4gdGhlIDxjb2RlPnNzdGF0ZS1jYWNoZTwvY29kZT4gZGlyZWN0b3J5IG9yIG1pcnJvcnMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIlRhc2tzIHdpdGggJ0ZhaWxlZCcgY2FjaGUgYXR0ZW1wdHMiLCAnc3N0YXRlX3Jlc3VsdDolZCclVGFzay5TU1RBVEVfRkFJTEVELCAgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHNzdGF0ZV9yZXN1bHQ9VGFzay5TU1RBVEVfRkFJTEVEKS5jb3VudCgpLCAnU2hvdyB0YXNrcyB0aGF0IGZvdW5kIHRoZSByZXF1aXJlZCBvdXRwdXQgaW4gdGhlIDxjb2RlPnNzdGF0ZS1jYWNoZTwvY29kZT4gZGlyZWN0b3J5IG9yIG1pcnJvcnMsIGJ1dCBjb3VsZCBub3QgcmVzdG9yZSBpdCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiVGFza3Mgd2l0aCAnU3VjY2VlZGVkJyBjYWNoZSBhdHRlbXB0cyIsICdzc3RhdGVfcmVzdWx0OiVkJyVUYXNrLlNTVEFURV9SRVNUT1JFRCwgIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcihzc3RhdGVfcmVzdWx0PVRhc2suU1NUQVRFX1JFU1RPUkVEKS5jb3VudCgpLCAnU2hvdyB0YXNrcyB0aGF0IHN1Y2Nlc3NmdWxseSByZXN0b3JlZCB0aGUgcmVxdWlyZWQgb3V0cHV0IGZyb20gdGhlIDxjb2RlPnNzdGF0ZS1jYWNoZTwvY29kZT4gZGlyZWN0b3J5IG9yIG1pcnJvcnMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgfQorCisgICAgfQorICAgICNpZiAgICd0YXNrcycgPT0gdmFyaWFudDogdGNfY2FjaGVbJ2hpZGRlbiddPScwJzsKKyAgICB0Y190aW1lPXsKKyAgICAgICAgJ25hbWUnOidUaW1lIChzZWNzKScsCisgICAgICAgICdxaGVscCc6J0hvdyBsb25nIGl0IHRvb2sgdGhlIHRhc2sgdG8gZmluaXNoIGluIHNlY29uZHMnLAorICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJlbGFwc2VkX3RpbWUiLCBUcnVlKSwKKyAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAiZWxhcHNlZF90aW1lIiksCisgICAgICAgICdvcmRlcmtleScgOiAnZWxhcHNlZF90aW1lJywKKyAgICAgICAgJ2NsY2xhc3MnOiAndGltZV90YWtlbicsICdoaWRkZW4nIDogMSwKKyAgICB9CisgICAgaWYgJ2J1aWxkdGltZScgPT0gdmFyaWFudDoKKyAgICAgICAgdGNfdGltZVsnaGlkZGVuJ109JzAnCisgICAgICAgIGRlbCB0Y190aW1lWydjbGNsYXNzJ10KKyAgICAgICAgdGNfY2FjaGVbJ2hpZGRlbiddPScxJworCisgICAgdGNfY3B1PXsKKyAgICAgICAgJ25hbWUnOidDUFUgdXNhZ2UnLAorICAgICAgICAncWhlbHAnOidUaGUgcGVyY2VudGFnZSBvZiB0YXNrIENQVSB1dGlsaXphdGlvbicsCisgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgImNwdV91c2FnZSIsIFRydWUpLAorICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJjcHVfdXNhZ2UiKSwKKyAgICAgICAgJ29yZGVya2V5JyA6ICdjcHVfdXNhZ2UnLAorICAgICAgICAnY2xjbGFzcyc6ICdjcHVfdXNlZCcsICdoaWRkZW4nIDogMSwKKyAgICB9CisKKyAgICBpZiAgJ2NwdXVzYWdlJyA9PSB2YXJpYW50OgorICAgICAgICB0Y19jcHVbJ2hpZGRlbiddPScwJworICAgICAgICBkZWwgdGNfY3B1WydjbGNsYXNzJ10KKyAgICAgICAgdGNfY2FjaGVbJ2hpZGRlbiddPScxJworCisgICAgdGNfZGlza2lvPXsKKyAgICAgICAgJ25hbWUnOidEaXNrIEkvTyAobXMpJywKKyAgICAgICAgJ3FoZWxwJzonTnVtYmVyIG9mIG1pbGlzZWNvbmRzIHRoZSB0YXNrIHNwZW50IGRvaW5nIGRpc2sgaW5wdXQgYW5kIG91dHB1dCcsCisgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgImRpc2tfaW8iLCBUcnVlKSwKKyAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAiZGlza19pbyIpLAorICAgICAgICAnb3JkZXJrZXknIDogJ2Rpc2tfaW8nLAorICAgICAgICAnY2xjbGFzcyc6ICdkaXNrX2lvJywgJ2hpZGRlbicgOiAxLAorICAgIH0KKyAgICBpZiAnZGlza2lvJyA9PSB2YXJpYW50OgorICAgICAgICB0Y19kaXNraW9bJ2hpZGRlbiddPScwJworICAgICAgICBkZWwgdGNfZGlza2lvWydjbGNsYXNzJ10KKyAgICAgICAgdGNfY2FjaGVbJ2hpZGRlbiddPScxJworCisgICAgYnVpbGQgPSBCdWlsZC5vYmplY3RzLmdldChwaz1idWlsZF9pZCkKKworICAgIGNvbnRleHQgPSB7ICdvYmplY3RuYW1lJzogdmFyaWFudCwKKyAgICAgICAgICAgICAgICAnb2JqZWN0X3NlYXJjaF9kaXNwbGF5Jzogb2JqZWN0X3NlYXJjaF9kaXNwbGF5LAorICAgICAgICAgICAgICAgICdmaWx0ZXJfc2VhcmNoX2Rpc3BsYXknOiBmaWx0ZXJfc2VhcmNoX2Rpc3BsYXksCisgICAgICAgICAgICAgICAgJ3RpdGxlJzogdGl0bGVfdmFyaWFudCwKKyAgICAgICAgICAgICAgICAnYnVpbGQnOiBidWlsZCwKKyAgICAgICAgICAgICAgICAnb2JqZWN0cyc6IHRhc2tfb2JqZWN0cywKKyAgICAgICAgICAgICAgICAnZGVmYXVsdF9vcmRlcmJ5JyA6IG9yZGVyYnksCisgICAgICAgICAgICAgICAgJ3NlYXJjaF90ZXJtJzogc2VhcmNoX3Rlcm0sCisgICAgICAgICAgICAgICAgJ3RvdGFsX2NvdW50JzogcXVlcnlzZXRfd2l0aF9zZWFyY2guY291bnQoKSwKKyAgICAgICAgICAgICAgICAndGFibGVjb2xzJzpbCisgICAgICAgICAgICAgICAgICAgIHRjX29yZGVyLAorICAgICAgICAgICAgICAgICAgICB0Y19yZWNpcGUsCisgICAgICAgICAgICAgICAgICAgIHRjX3JlY2lwZV92ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICB0Y190YXNrLAorICAgICAgICAgICAgICAgICAgICB0Y19leGVjdXRlZCwKKyAgICAgICAgICAgICAgICAgICAgdGNfb3V0Y29tZSwKKyAgICAgICAgICAgICAgICAgICAgdGNfY2FjaGUsCisgICAgICAgICAgICAgICAgICAgIHRjX3RpbWUsCisgICAgICAgICAgICAgICAgICAgIHRjX2NwdSwKKyAgICAgICAgICAgICAgICAgICAgdGNfZGlza2lvLAorICAgICAgICAgICAgICAgIF19CisKKworICAgIHJlc3BvbnNlID0gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorICAgIF9zZXRfcGFyYW1ldGVyc192YWx1ZXMocGFnZXNpemUsIG9yZGVyYnksIHJlcXVlc3QpCisgICAgcmV0dXJuIHJlc3BvbnNlCisKK2RlZiB0YXNrcyhyZXF1ZXN0LCBidWlsZF9pZCk6CisgICAgcmV0dXJuIHRhc2tzX2NvbW1vbihyZXF1ZXN0LCBidWlsZF9pZCwgJ3Rhc2tzJywgJycpCisKK2RlZiB0YXNrc190YXNrKHJlcXVlc3QsIGJ1aWxkX2lkLCB0YXNrX2lkKToKKyAgICByZXR1cm4gdGFza3NfY29tbW9uKHJlcXVlc3QsIGJ1aWxkX2lkLCAndGFza3MnLCB0YXNrX2lkKQorCitkZWYgYnVpbGR0aW1lKHJlcXVlc3QsIGJ1aWxkX2lkKToKKyAgICByZXR1cm4gdGFza3NfY29tbW9uKHJlcXVlc3QsIGJ1aWxkX2lkLCAnYnVpbGR0aW1lJywgJycpCisKK2RlZiBkaXNraW8ocmVxdWVzdCwgYnVpbGRfaWQpOgorICAgIHJldHVybiB0YXNrc19jb21tb24ocmVxdWVzdCwgYnVpbGRfaWQsICdkaXNraW8nLCAnJykKKworZGVmIGNwdXVzYWdlKHJlcXVlc3QsIGJ1aWxkX2lkKToKKyAgICByZXR1cm4gdGFza3NfY29tbW9uKHJlcXVlc3QsIGJ1aWxkX2lkLCAnY3B1dXNhZ2UnLCAnJykKKworCitkZWYgcmVjaXBlcyhyZXF1ZXN0LCBidWlsZF9pZCk6CisgICAgdGVtcGxhdGUgPSAncmVjaXBlcy5odG1sJworICAgIChwYWdlc2l6ZSwgb3JkZXJieSkgPSBfZ2V0X3BhcmFtZXRlcnNfdmFsdWVzKHJlcXVlc3QsIDEwMCwgJ25hbWU6KycpCisgICAgbWFuZGF0b3J5X3BhcmFtZXRlcnMgPSB7ICdjb3VudCc6IHBhZ2VzaXplLCAgJ3BhZ2UnIDogMSwgJ29yZGVyYnknIDogb3JkZXJieSB9CisgICAgcmV0dmFsID0gX3ZlcmlmeV9wYXJhbWV0ZXJzKCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMgKQorICAgIGlmIHJldHZhbDoKKyAgICAgICAgcmV0dXJuIF9yZWRpcmVjdF9wYXJhbWV0ZXJzKCAncmVjaXBlcycsIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycywgYnVpbGRfaWQgPSBidWlsZF9pZCkKKyAgICAoZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZykgPSBfc2VhcmNoX3R1cGxlKHJlcXVlc3QsIFJlY2lwZSkKKyAgICBxdWVyeXNldCA9IFJlY2lwZS5vYmplY3RzLmZpbHRlcihsYXllcl92ZXJzaW9uX19pZF9faW49TGF5ZXJfVmVyc2lvbi5vYmplY3RzLmZpbHRlcihidWlsZD1idWlsZF9pZCkpLnNlbGVjdF9yZWxhdGVkKCJsYXllcl92ZXJzaW9uIiwgImxheWVyX3ZlcnNpb25fX2xheWVyIikKKyAgICBxdWVyeXNldCA9IF9nZXRfcXVlcnlzZXQoUmVjaXBlLCBxdWVyeXNldCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJ25hbWUnKQorCisgICAgcmVjaXBlcyA9IF9idWlsZF9wYWdlX3JhbmdlKFBhZ2luYXRvcihxdWVyeXNldCwgcGFnZXNpemUpLHJlcXVlc3QuR0VULmdldCgncGFnZScsIDEpKQorCisgICAgIyBwcmVmZXRjaCB0aGUgZm9yd2FyZCBhbmQgcmV2ZXJzZSByZWNpcGUgZGVwZW5kZW5jaWVzCisgICAgZGVwcyA9IHsgfQorICAgIHJldnMgPSB7IH0KKyAgICBxdWVyeXNldF9kZXBlbmRlbmN5PVJlY2lwZV9EZXBlbmRlbmN5Lm9iamVjdHMuZmlsdGVyKHJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnVpbGRfaWQgPSBidWlsZF9pZCkuc2VsZWN0X3JlbGF0ZWQoImRlcGVuZHNfb24iLCAicmVjaXBlIikKKyAgICBmb3IgcmVjaXBlIGluIHJlY2lwZXM6CisgICAgICAgIGRlcGxpc3QgPSBbIF0KKyAgICAgICAgZm9yIHJlY2lwZV9kZXAgaW4gW3ggZm9yIHggaW4gcXVlcnlzZXRfZGVwZW5kZW5jeSBpZiB4LnJlY2lwZV9pZCA9PSByZWNpcGUuaWRdOgorICAgICAgICAgICAgZGVwbGlzdC5hcHBlbmQocmVjaXBlX2RlcCkKKyAgICAgICAgZGVwc1tyZWNpcGUuaWRdID0gZGVwbGlzdAorICAgICAgICByZXZsaXN0ID0gWyBdCisgICAgICAgIGZvciByZWNpcGVfZGVwIGluIFt4IGZvciB4IGluIHF1ZXJ5c2V0X2RlcGVuZGVuY3kgaWYgeC5kZXBlbmRzX29uX2lkID09IHJlY2lwZS5pZF06CisgICAgICAgICAgICByZXZsaXN0LmFwcGVuZChyZWNpcGVfZGVwKQorICAgICAgICByZXZzW3JlY2lwZS5pZF0gPSByZXZsaXN0CisKKyAgICBidWlsZCA9IEJ1aWxkLm9iamVjdHMuZ2V0KHBrPWJ1aWxkX2lkKQorCisgICAgY29udGV4dCA9IHsKKyAgICAgICAgJ29iamVjdG5hbWUnOiAncmVjaXBlcycsCisgICAgICAgICdidWlsZCc6IGJ1aWxkLAorICAgICAgICAnb2JqZWN0cyc6IHJlY2lwZXMsCisgICAgICAgICdkZWZhdWx0X29yZGVyYnknIDogJ25hbWU6KycsCisgICAgICAgICdyZWNpcGVfZGVwcycgOiBkZXBzLAorICAgICAgICAncmVjaXBlX3JldnMnIDogcmV2cywKKyAgICAgICAgJ3RhYmxlY29scyc6WworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonUmVjaXBlJywKKyAgICAgICAgICAgICAgICAncWhlbHAnOidJbmZvcm1hdGlvbiBhYm91dCBhIHNpbmdsZSBwaWVjZSBvZiBzb2Z0d2FyZSwgaW5jbHVkaW5nIHdoZXJlIHRvIGRvd25sb2FkIHRoZSBzb3VyY2UsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgaG93IHRvIGNvbXBpbGUgdGhlIHNvdXJjZSBmaWxlcyBhbmQgaG93IHRvIHBhY2thZ2UgdGhlIGNvbXBpbGVkIG91dHB1dCcsCisgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAibmFtZSIpLAorICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgIm5hbWUiKSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidSZWNpcGUgdmVyc2lvbicsCisgICAgICAgICAgICAgICAgJ3FoZWxwJzonVGhlIHJlY2lwZSB2ZXJzaW9uIGFuZCByZXZpc2lvbicsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonRGVwZW5kZW5jaWVzJywKKyAgICAgICAgICAgICAgICAncWhlbHAnOidSZWNpcGUgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgKGkuZS4gb3RoZXIgcmVjaXBlcyknLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ2RlcGVuZHNfb24nLCAnaGlkZGVuJzogMSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidSZXZlcnNlIGRlcGVuZGVuY2llcycsCisgICAgICAgICAgICAgICAgJ3FoZWxwJzonUmVjaXBlIGJ1aWxkLXRpbWUgcmV2ZXJzZSBkZXBlbmRlbmNpZXMgKGkuZS4gdGhlIHJlY2lwZXMgdGhhdCBkZXBlbmQgb24gdGhpcyByZWNpcGUpJywKKyAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdkZXBlbmRzX2J5JywgJ2hpZGRlbic6IDEsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonUmVjaXBlIGZpbGUnLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1BhdGggdG8gdGhlIHJlY2lwZSAuYmIgZmlsZScsCisgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAiZmlsZV9wYXRoIiksCisgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAiZmlsZV9wYXRoIiksCisgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICdmaWxlX3BhdGgnLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ3JlY2lwZV9maWxlJywgJ2hpZGRlbic6IDAsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonU2VjdGlvbicsCisgICAgICAgICAgICAgICAgJ3FoZWxwJzonVGhlIHNlY3Rpb24gaW4gd2hpY2ggcmVjaXBlcyBzaG91bGQgYmUgY2F0ZWdvcml6ZWQnLAorICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInNlY3Rpb24iKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJzZWN0aW9uIiksCisgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICdzZWN0aW9uJywKKyAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdyZWNpcGVfc2VjdGlvbicsICdoaWRkZW4nOiAwLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAnbmFtZSc6J0xpY2Vuc2UnLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1RoZSBsaXN0IG9mIHNvdXJjZSBsaWNlbnNlcyBmb3IgdGhlIHJlY2lwZS4gTXVsdGlwbGUgbGljZW5zZSBuYW1lcyBzZXBhcmF0ZWQgYnkgdGhlIHBpcGUgY2hhcmFjdGVyIGluZGljYXRlcyBhIGNob2ljZSBiZXR3ZWVuIGxpY2Vuc2VzLiBNdWx0aXBsZSBsaWNlbnNlIG5hbWVzIHNlcGFyYXRlZCBieSB0aGUgYW1wZXJzYW5kIGNoYXJhY3RlciBpbmRpY2F0ZXMgbXVsdGlwbGUgbGljZW5zZXMgZXhpc3QgdGhhdCBjb3ZlciBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHNvdXJjZScsCisgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAibGljZW5zZSIpLAorICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgImxpY2Vuc2UiKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ2xpY2Vuc2UnLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ3JlY2lwZV9saWNlbnNlJywgJ2hpZGRlbic6IDAsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonTGF5ZXInLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1RoZSBuYW1lIG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZScsCisgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAibGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJsYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSIpLAorICAgICAgICAgICAgICAgICdvcmRlcmtleScgOiAnbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUnLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lJywgJ2hpZGRlbic6IDAsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonTGF5ZXIgYnJhbmNoJywKKyAgICAgICAgICAgICAgICAncWhlbHAnOidUaGUgR2l0IGJyYW5jaCBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUnLAorICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgImxheWVyX3ZlcnNpb25fX2JyYW5jaCIpLAorICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgImxheWVyX3ZlcnNpb25fX2JyYW5jaCIpLAorICAgICAgICAgICAgICAgICdvcmRlcmtleScgOiAnbGF5ZXJfdmVyc2lvbl9fYnJhbmNoJywKKyAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdsYXllcl92ZXJzaW9uX19icmFuY2gnLCAnaGlkZGVuJzogMSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidMYXllciBjb21taXQnLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1RoZSBHaXQgY29tbWl0IG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZScsCisgICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAnbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX2NvbW1pdCcsICdoaWRkZW4nOiAxLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorCisgICAgcmVzcG9uc2UgPSByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisgICAgX3NldF9wYXJhbWV0ZXJzX3ZhbHVlcyhwYWdlc2l6ZSwgb3JkZXJieSwgcmVxdWVzdCkKKyAgICByZXR1cm4gcmVzcG9uc2UKKworZGVmIGNvbmZpZ3VyYXRpb24ocmVxdWVzdCwgYnVpbGRfaWQpOgorICAgIHRlbXBsYXRlID0gJ2NvbmZpZ3VyYXRpb24uaHRtbCcKKworICAgIHZhcl9uYW1lcyA9ICgnQkJfVkVSU0lPTicsICdCVUlMRF9TWVMnLCAnTkFUSVZFTFNCU1RSSU5HJywgJ1RBUkdFVF9TWVMnLAorICAgICAgICAgICAgICAgICAnTUFDSElORScsICdESVNUUk8nLCAnRElTVFJPX1ZFUlNJT04nLCAnVFVORV9GRUFUVVJFUycsICdUQVJHRVRfRlBVJykKKyAgICBjb250ZXh0ID0gZGljdChWYXJpYWJsZS5vYmplY3RzLmZpbHRlcihidWlsZD1idWlsZF9pZCwgdmFyaWFibGVfbmFtZV9faW49dmFyX25hbWVzKVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVzX2xpc3QoJ3ZhcmlhYmxlX25hbWUnLCAndmFyaWFibGVfdmFsdWUnKSkKKyAgICBjb250ZXh0LnVwZGF0ZSh7J29iamVjdG5hbWUnOiAnY29uZmlndXJhdGlvbicsCisgICAgICAgICAgICAgICAgICAgICdvYmplY3Rfc2VhcmNoX2Rpc3BsYXknOid2YXJpYWJsZXMnLAorICAgICAgICAgICAgICAgICAgICAnZmlsdGVyX3NlYXJjaF9kaXNwbGF5JzondmFyaWFibGVzJywKKyAgICAgICAgICAgICAgICAgICAgJ2J1aWxkJzogQnVpbGQub2JqZWN0cy5nZXQocGs9YnVpbGRfaWQpLAorICAgICAgICAgICAgICAgICAgICAndGFyZ2V0cyc6IFRhcmdldC5vYmplY3RzLmZpbHRlcihidWlsZD1idWlsZF9pZCl9KQorICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisKKworZGVmIGNvbmZpZ3ZhcnMocmVxdWVzdCwgYnVpbGRfaWQpOgorICAgIHRlbXBsYXRlID0gJ2NvbmZpZ3ZhcnMuaHRtbCcKKyAgICAocGFnZXNpemUsIG9yZGVyYnkpID0gX2dldF9wYXJhbWV0ZXJzX3ZhbHVlcyhyZXF1ZXN0LCAxMDAsICd2YXJpYWJsZV9uYW1lOisnKQorICAgIG1hbmRhdG9yeV9wYXJhbWV0ZXJzID0geyAnY291bnQnOiBwYWdlc2l6ZSwgICdwYWdlJyA6IDEsICdvcmRlcmJ5JyA6IG9yZGVyYnksICdmaWx0ZXInIDogJ2Rlc2NyaXB0aW9uX19yZWdleDouKycgfQorICAgIHJldHZhbCA9IF92ZXJpZnlfcGFyYW1ldGVycyggcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzICkKKyAgICAoZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZykgPSBfc2VhcmNoX3R1cGxlKHJlcXVlc3QsIFZhcmlhYmxlKQorICAgIGlmIHJldHZhbDoKKyAgICAgICAgIyBpZiBuZXcgc2VhcmNoLCBjbGVhciB0aGUgZGVmYXVsdCBmaWx0ZXIKKyAgICAgICAgaWYgc2VhcmNoX3Rlcm0gYW5kIGxlbihzZWFyY2hfdGVybSk6CisgICAgICAgICAgICBtYW5kYXRvcnlfcGFyYW1ldGVyc1snZmlsdGVyJ109JycKKyAgICAgICAgcmV0dXJuIF9yZWRpcmVjdF9wYXJhbWV0ZXJzKCAnY29uZmlndmFycycsIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycywgYnVpbGRfaWQgPSBidWlsZF9pZCkKKworICAgIHF1ZXJ5c2V0ID0gVmFyaWFibGUub2JqZWN0cy5maWx0ZXIoYnVpbGQ9YnVpbGRfaWQpLmV4Y2x1ZGUodmFyaWFibGVfbmFtZV9faXN0YXJ0c3dpdGg9J0JfJykuZXhjbHVkZSh2YXJpYWJsZV9uYW1lX19pc3RhcnRzd2l0aD0nZG9fJykKKyAgICBxdWVyeXNldF93aXRoX3NlYXJjaCA9ICBfZ2V0X3F1ZXJ5c2V0KFZhcmlhYmxlLCBxdWVyeXNldCwgTm9uZSwgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJ3ZhcmlhYmxlX25hbWUnKS5leGNsdWRlKHZhcmlhYmxlX3ZhbHVlPScnLHZoaXN0b3J5X19maWxlX25hbWVfX2lzbnVsbD1UcnVlKQorICAgIHF1ZXJ5c2V0ID0gX2dldF9xdWVyeXNldChWYXJpYWJsZSwgcXVlcnlzZXQsIGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcsICd2YXJpYWJsZV9uYW1lJykKKyAgICAjIHJlbW92ZSByZWNvcmRzIHdoZXJlIHRoZSB2YWx1ZSBpcyBlbXB0eSBBTkQgdGhlcmUgYXJlIG5vIGhpc3RvcnkgZmlsZXMKKyAgICBxdWVyeXNldCA9IHF1ZXJ5c2V0LmV4Y2x1ZGUodmFyaWFibGVfdmFsdWU9Jycsdmhpc3RvcnlfX2ZpbGVfbmFtZV9faXNudWxsPVRydWUpCisKKyAgICB2YXJpYWJsZXMgPSBfYnVpbGRfcGFnZV9yYW5nZShQYWdpbmF0b3IocXVlcnlzZXQsIHBhZ2VzaXplKSwgcmVxdWVzdC5HRVQuZ2V0KCdwYWdlJywgMSkpCisKKyAgICAjIHNob3cgYWxsIG1hdGNoaW5nIGZpbGVzIChub3QganVzdCB0aGUgbGFzdCBvbmUpCisgICAgZmlsZV9maWx0ZXI9IHNlYXJjaF90ZXJtICsgIjoiCisgICAgaWYgZmlsdGVyX3N0cmluZy5maW5kKCcvY29uZi8nKSA+IDA6CisgICAgICAgIGZpbGVfZmlsdGVyICs9ICdjb25mLyhsb2NhbHxiYmxheWVycykuY29uZicKKyAgICBpZiBmaWx0ZXJfc3RyaW5nLmZpbmQoJ2NvbmYvbWFjaGluZS8nKSA+IDA6CisgICAgICAgIGZpbGVfZmlsdGVyICs9ICdjb25mL21hY2hpbmUvJworICAgIGlmIGZpbHRlcl9zdHJpbmcuZmluZCgnY29uZi9kaXN0cm8vJykgPiAwOgorICAgICAgICBmaWxlX2ZpbHRlciArPSAnY29uZi9kaXN0cm8vJworICAgIGlmIGZpbHRlcl9zdHJpbmcuZmluZCgnL2JpdGJha2UuY29uZicpID4gMDoKKyAgICAgICAgZmlsZV9maWx0ZXIgKz0gJy9iaXRiYWtlLmNvbmYnCisgICAgYnVpbGRfZGlyPXJlLnN1YigiL3RtcC9sb2cvLioiLCIiLEJ1aWxkLm9iamVjdHMuZ2V0KHBrPWJ1aWxkX2lkKS5jb29rZXJfbG9nX3BhdGgpCisKKyAgICBjb250ZXh0ID0geworICAgICAgICAgICAgICAgICdvYmplY3RuYW1lJzogJ2NvbmZpZ3ZhcnMnLAorICAgICAgICAgICAgICAgICdvYmplY3Rfc2VhcmNoX2Rpc3BsYXknOidCaXRCYWtlIHZhcmlhYmxlcycsCisgICAgICAgICAgICAgICAgJ2ZpbHRlcl9zZWFyY2hfZGlzcGxheSc6J3ZhcmlhYmxlcycsCisgICAgICAgICAgICAgICAgJ2ZpbGVfZmlsdGVyJzogZmlsZV9maWx0ZXIsCisgICAgICAgICAgICAgICAgJ2J1aWxkJzogQnVpbGQub2JqZWN0cy5nZXQocGs9YnVpbGRfaWQpLAorICAgICAgICAgICAgICAgICdvYmplY3RzJyA6IHZhcmlhYmxlcywKKyAgICAgICAgICAgICAgICAndG90YWxfY291bnQnOnF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmNvdW50KCksCisgICAgICAgICAgICAgICAgJ2RlZmF1bHRfb3JkZXJieScgOiAndmFyaWFibGVfbmFtZTorJywKKyAgICAgICAgICAgICAgICAnc2VhcmNoX3Rlcm0nOnNlYXJjaF90ZXJtLAorICAgICAgICAgICAgIyBTcGVjaWZpZXMgdGhlIGRpc3BsYXkgb2YgY29sdW1ucyBmb3IgdGhlIHRhYmxlLCBhcHBlYXJhbmNlIGluICJFZGl0IGNvbHVtbnMiIGJveCwgdG9nZ2xpbmcgZGVmYXVsdCBzaG93L2hpZGUsIGFuZCBzcGVjaWZ5aW5nIGZpbHRlcnMgZm9yIGNvbHVtbnMKKyAgICAgICAgICAgICAgICAndGFibGVjb2xzJyA6IFsKKyAgICAgICAgICAgICAgICB7J25hbWUnOiAnVmFyaWFibGUnLAorICAgICAgICAgICAgICAgICAncWhlbHAnOiAiQml0QmFrZSBpcyBhIGdlbmVyaWMgdGFzayBleGVjdXRvciB0aGF0IGNvbnNpZGVycyBhIGxpc3Qgb2YgdGFza3Mgd2l0aCBkZXBlbmRlbmNpZXMgYW5kIGhhbmRsZXMgbWV0YWRhdGEgdGhhdCBjb25zaXN0cyBvZiB2YXJpYWJsZXMgaW4gYSBjZXJ0YWluIGZvcm1hdCB0aGF0IGdldCBwYXNzZWQgdG8gdGhlIHRhc2tzIiwKKyAgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAidmFyaWFibGVfbmFtZSIpLAorICAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJ2YXJpYWJsZV9uYW1lIiksCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7J25hbWUnOiAnVmFsdWUnLAorICAgICAgICAgICAgICAgICAncWhlbHAnOiAiVGhlIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSB2YXJpYWJsZSIsCisgICAgICAgICAgICAgICAgICdkY2xhc3MnOiAic3BhbjQiLAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeyduYW1lJzogJ1NldCBpbiBmaWxlJywKKyAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIlRoZSBsYXN0IGNvbmZpZ3VyYXRpb24gZmlsZSB0aGF0IHRvdWNoZWQgdGhlIHZhcmlhYmxlIHZhbHVlIiwKKyAgICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAnZmlsZScsICdoaWRkZW4nIDogMCwKKyAgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICd2aGlzdG9yeV9fZmlsZV9uYW1lJywKKyAgICAgICAgICAgICAgICAgJ2ZpbHRlcicgOiB7CisgICAgICAgICAgICAgICAgICAgICdjbGFzcycgOiAndmhpc3RvcnlfX2ZpbGVfbmFtZScsCisgICAgICAgICAgICAgICAgICAgICdsYWJlbCc6ICdTaG93OicsCisgICAgICAgICAgICAgICAgICAgICdvcHRpb25zJyA6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0xvY2FsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzJywgJ3ZoaXN0b3J5X19maWxlX25hbWVfX2NvbnRhaW5zOicrYnVpbGRfZGlyKycvY29uZi8nLHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcih2aGlzdG9yeV9fZmlsZV9uYW1lX19jb250YWlucz1idWlsZF9kaXIrJy9jb25mLycpLmNvdW50KCksICdTZWxlY3QgdGhpcyBmaWx0ZXIgdG8gc2VlIHZhcmlhYmxlcyBzZXQgYnkgdGhlIDxjb2RlPmxvY2FsLmNvbmY8L2NvZGU+IGFuZCA8Y29kZT5iYmxheWVycy5jb25mPC9jb2RlPiBjb25maWd1cmF0aW9uIGZpbGVzIGluc2lkZSB0aGUgPGNvZGU+L2J1aWxkL2NvbmYvPC9jb2RlPiBkaXJlY3RvcnknKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ01hY2hpbmUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMnLCAndmhpc3RvcnlfX2ZpbGVfbmFtZV9fY29udGFpbnM6Y29uZi9tYWNoaW5lLycscXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHZoaXN0b3J5X19maWxlX25hbWVfX2NvbnRhaW5zPSdjb25mL21hY2hpbmUnKS5jb3VudCgpLCAnU2VsZWN0IHRoaXMgZmlsdGVyIHRvIHNlZSB2YXJpYWJsZXMgc2V0IGJ5IHRoZSBjb25maWd1cmF0aW9uIGZpbGUocykgaW5zaWRlIHlvdXIgbGF5ZXJzIDxjb2RlPi9jb25mL21hY2hpbmUvPC9jb2RlPiBkaXJlY3RvcnknKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0Rpc3RybyBjb25maWd1cmF0aW9uIHZhcmlhYmxlcycsICd2aGlzdG9yeV9fZmlsZV9uYW1lX19jb250YWluczpjb25mL2Rpc3Ryby8nLHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcih2aGlzdG9yeV9fZmlsZV9uYW1lX19jb250YWlucz0nY29uZi9kaXN0cm8nKS5jb3VudCgpLCAnU2VsZWN0IHRoaXMgZmlsdGVyIHRvIHNlZSB2YXJpYWJsZXMgc2V0IGJ5IHRoZSBjb25maWd1cmF0aW9uIGZpbGUocykgaW5zaWRlIHlvdXIgbGF5ZXJzIDxjb2RlPi9jb25mL2Rpc3Ryby88L2NvZGU+IGRpcmVjdG9yeScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnTGF5ZXIgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMnLCAndmhpc3RvcnlfX2ZpbGVfbmFtZV9fY29udGFpbnM6Y29uZi9sYXllci5jb25mJyxxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIodmhpc3RvcnlfX2ZpbGVfbmFtZV9fY29udGFpbnM9J2NvbmYvbGF5ZXIuY29uZicpLmNvdW50KCksICdTZWxlY3QgdGhpcyBmaWx0ZXIgdG8gc2VlIHZhcmlhYmxlcyBzZXQgYnkgdGhlIDxjb2RlPmxheWVyLmNvbmY8L2NvZGU+IGNvbmZpZ3VyYXRpb24gZmlsZSBpbnNpZGUgeW91ciBsYXllcnMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2JpdGJha2UuY29uZiB2YXJpYWJsZXMnLCAndmhpc3RvcnlfX2ZpbGVfbmFtZV9fY29udGFpbnM6L2JpdGJha2UuY29uZicscXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHZoaXN0b3J5X19maWxlX25hbWVfX2NvbnRhaW5zPScvYml0YmFrZS5jb25mJykuY291bnQoKSwgJ1NlbGVjdCB0aGlzIGZpbHRlciB0byBzZWUgdmFyaWFibGVzIHNldCBieSB0aGUgPGNvZGU+Yml0YmFrZS5jb25mPC9jb2RlPiBjb25maWd1cmF0aW9uIGZpbGUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7J25hbWUnOiAnRGVzY3JpcHRpb24nLAorICAgICAgICAgICAgICAgICAncWhlbHAnOiAiQSBicmllZiBleHBsYW5hdGlvbiBvZiB0aGUgdmFyaWFibGUiLAorICAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdkZXNjcmlwdGlvbicsICdoaWRkZW4nIDogMCwKKyAgICAgICAgICAgICAgICAgJ2RjbGFzcyc6ICJzcGFuNCIsCisgICAgICAgICAgICAgICAgICdmaWx0ZXInIDogeworICAgICAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2Rlc2NyaXB0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgJ2xhYmVsJzogJ1Nob3c6JywKKyAgICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnIDogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnVmFyaWFibGVzIHdpdGggZGVzY3JpcHRpb24nLCAnZGVzY3JpcHRpb25fX3JlZ2V4Oi4rJywgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKGRlc2NyaXB0aW9uX19yZWdleD0nLisnKS5jb3VudCgpLCAnV2UgcHJvdmlkZSBkZXNjcmlwdGlvbnMgZm9yIHRoZSBtb3N0IGNvbW1vbiBCaXRCYWtlIHZhcmlhYmxlcy4gVGhlIGxpc3Qgb2YgZGVzY3JpcHRpb25zIGxpdmVzIGluIDxjb2RlPm1ldGEvY29uZi9kb2N1bWVudGF0aW9uLmNvbmY8L2NvZGU+JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgfQorCisgICAgcmVzcG9uc2UgPSByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisgICAgX3NldF9wYXJhbWV0ZXJzX3ZhbHVlcyhwYWdlc2l6ZSwgb3JkZXJieSwgcmVxdWVzdCkKKyAgICByZXR1cm4gcmVzcG9uc2UKKworZGVmIGJwYWNrYWdlKHJlcXVlc3QsIGJ1aWxkX2lkKToKKyAgICB0ZW1wbGF0ZSA9ICdicGFja2FnZS5odG1sJworICAgIChwYWdlc2l6ZSwgb3JkZXJieSkgPSBfZ2V0X3BhcmFtZXRlcnNfdmFsdWVzKHJlcXVlc3QsIDEwMCwgJ25hbWU6KycpCisgICAgbWFuZGF0b3J5X3BhcmFtZXRlcnMgPSB7ICdjb3VudCcgOiBwYWdlc2l6ZSwgICdwYWdlJyA6IDEsICdvcmRlcmJ5JyA6IG9yZGVyYnkgfQorICAgIHJldHZhbCA9IF92ZXJpZnlfcGFyYW1ldGVycyggcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzICkKKyAgICBpZiByZXR2YWw6CisgICAgICAgIHJldHVybiBfcmVkaXJlY3RfcGFyYW1ldGVycyggJ3BhY2thZ2VzJywgcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzLCBidWlsZF9pZCA9IGJ1aWxkX2lkKQorICAgIChmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nKSA9IF9zZWFyY2hfdHVwbGUocmVxdWVzdCwgUGFja2FnZSkKKyAgICBxdWVyeXNldCA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoYnVpbGQgPSBidWlsZF9pZCkuZmlsdGVyKHNpemVfX2d0ZT0wKQorICAgIHF1ZXJ5c2V0ID0gX2dldF9xdWVyeXNldChQYWNrYWdlLCBxdWVyeXNldCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJ25hbWUnKQorCisgICAgcGFja2FnZXMgPSBfYnVpbGRfcGFnZV9yYW5nZShQYWdpbmF0b3IocXVlcnlzZXQsIHBhZ2VzaXplKSxyZXF1ZXN0LkdFVC5nZXQoJ3BhZ2UnLCAxKSkKKworICAgIGJ1aWxkID0gQnVpbGQub2JqZWN0cy5nZXQoIHBrID0gYnVpbGRfaWQgKQorCisgICAgY29udGV4dCA9IHsKKyAgICAgICAgJ29iamVjdG5hbWUnOiAncGFja2FnZXMgYnVpbHQnLAorICAgICAgICAnYnVpbGQnOiBidWlsZCwKKyAgICAgICAgJ29iamVjdHMnIDogcGFja2FnZXMsCisgICAgICAgICdkZWZhdWx0X29yZGVyYnknIDogJ25hbWU6KycsCisgICAgICAgICd0YWJsZWNvbHMnOlsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAnbmFtZSc6J1BhY2thZ2UnLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1BhY2thZ2VkIG91dHB1dCByZXN1bHRpbmcgZnJvbSBidWlsZGluZyBhIHJlY2lwZScsCisgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAibmFtZSIpLAorICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgIm5hbWUiKSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidQYWNrYWdlIHZlcnNpb24nLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1RoZSBwYWNrYWdlIHZlcnNpb24gYW5kIHJldmlzaW9uJywKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidTaXplJywKKyAgICAgICAgICAgICAgICAncWhlbHAnOidUaGUgc2l6ZSBvZiB0aGUgcGFja2FnZScsCisgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAic2l6ZSIsIFRydWUpLAorICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInNpemUiKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ3NpemUnLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ3NpemUnLCAnaGlkZGVuJzogMCwKKyAgICAgICAgICAgICAgICAnZGNsYXNzJyA6ICdzcGFuMicsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonTGljZW5zZScsCisgICAgICAgICAgICAgICAgJ3FoZWxwJzonVGhlIGxpY2Vuc2UgdW5kZXIgd2hpY2ggdGhlIHBhY2thZ2UgaXMgZGlzdHJpYnV0ZWQuIE11bHRpcGxlIGxpY2Vuc2UgbmFtZXMgc2VwYXJhdGVkIGJ5IHRoZSBwaXBlIGNoYXJhY3RlciBpbmRpY2F0ZXMgYSBjaG9pY2UgYmV0d2VlbiBsaWNlbnNlcy4gTXVsdGlwbGUgbGljZW5zZSBuYW1lcyBzZXBhcmF0ZWQgYnkgdGhlIGFtcGVyc2FuZCBjaGFyYWN0ZXIgaW5kaWNhdGVzIG11bHRpcGxlIGxpY2Vuc2VzIGV4aXN0IHRoYXQgY292ZXIgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzb3VyY2UnLAorICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgImxpY2Vuc2UiKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJsaWNlbnNlIiksCisgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICdsaWNlbnNlJywKKyAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdsaWNlbnNlJywgJ2hpZGRlbic6IDEsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonUmVjaXBlJywKKyAgICAgICAgICAgICAgICAncWhlbHAnOidUaGUgbmFtZSBvZiB0aGUgcmVjaXBlIGJ1aWxkaW5nIHRoZSBwYWNrYWdlJywKKyAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJyZWNpcGVfX25hbWUiKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJyZWNpcGVfX25hbWUiKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ3JlY2lwZV9fbmFtZScsCisgICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAncmVjaXBlX19uYW1lJywgJ2hpZGRlbic6IDAsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonUmVjaXBlIHZlcnNpb24nLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1ZlcnNpb24gYW5kIHJldmlzaW9uIG9mIHRoZSByZWNpcGUgYnVpbGRpbmcgdGhlIHBhY2thZ2UnLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ3JlY2lwZV9fdmVyc2lvbicsICdoaWRkZW4nOiAxLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAnbmFtZSc6J0xheWVyJywKKyAgICAgICAgICAgICAgICAncWhlbHAnOidUaGUgbmFtZSBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUgdGhhdCBidWlsZHMgdGhlIHBhY2thZ2UnLAorICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lIiksCisgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICdyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lJywKKyAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lJywgJ2hpZGRlbic6IDEsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonTGF5ZXIgYnJhbmNoJywKKyAgICAgICAgICAgICAgICAncWhlbHAnOidUaGUgR2l0IGJyYW5jaCBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUgdGhhdCBidWlsZHMgdGhlIHBhY2thZ2UnLAorICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnJhbmNoIiksCisgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAicmVjaXBlX19sYXllcl92ZXJzaW9uX19icmFuY2giKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ3JlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnJhbmNoJywKKyAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2JyYW5jaCcsICdoaWRkZW4nOiAxLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAnbmFtZSc6J0xheWVyIGNvbW1pdCcsCisgICAgICAgICAgICAgICAgJ3FoZWxwJzonVGhlIEdpdCBjb21taXQgb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlIHRoYXQgYnVpbGRzIHRoZSBwYWNrYWdlJywKKyAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19jb21taXQnLCAnaGlkZGVuJzogMSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBdCisgICAgICAgIH0KKworICAgIHJlc3BvbnNlID0gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorICAgIF9zZXRfcGFyYW1ldGVyc192YWx1ZXMocGFnZXNpemUsIG9yZGVyYnksIHJlcXVlc3QpCisgICAgcmV0dXJuIHJlc3BvbnNlCisKK2RlZiBiZmlsZShyZXF1ZXN0LCBidWlsZF9pZCwgcGFja2FnZV9pZCk6CisgICAgdGVtcGxhdGUgPSAnYmZpbGUuaHRtbCcKKyAgICBmaWxlcyA9IFBhY2thZ2VfRmlsZS5vYmplY3RzLmZpbHRlcihwYWNrYWdlID0gcGFja2FnZV9pZCkKKyAgICBjb250ZXh0ID0geydidWlsZCc6IEJ1aWxkLm9iamVjdHMuZ2V0KHBrPWJ1aWxkX2lkKSwgJ29iamVjdHMnIDogZmlsZXN9CisgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKworCisjIEEgc2V0IG9mIGRlcGVuZGVuY3kgdHlwZXMgdmFsaWQgZm9yIGJvdGggaW5jbHVkZWQgYW5kIGJ1aWx0IHBhY2thZ2Ugdmlld3MKK09USEVSX0RFUEVORFNfQkFTRSA9IFsKKyAgICBQYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9SU1VHR0VTVFMsCisgICAgUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfUlBST1ZJREVTLAorICAgIFBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1JSRVBMQUNFUywKKyAgICBQYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9SQ09ORkxJQ1RTLAorICAgIF0KKworIyB2YWx1ZSBmb3IgaW52YWxpZCByb3cgaWQKK0lOVkFMSURfS0VZID0gLTEKKworIiIiCitHaXZlbiBhIHBhY2thZ2UgaWQsIHRhcmdldF9pZCByZXRyaWV2ZXMgdHdvIHNldHMgb2YgdGhpcyBpbWFnZSBhbmQgcGFja2FnZSdzCitkZXBlbmRlbmNpZXMuICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgZGljdGlvbmFyeSBjb25zaXN0aW5nIG9mIHR3byBvdGhlcgorbGlzdHM6IGEgbGlzdCBvZiAncnVudGltZScgZGVwZW5kZW5jaWVzLCB0aGF0IGlzLCBoYXZpbmcgUkRFUEVORFMKK3ZhbHVlcyBpbiBzb3VyY2UgcGFja2FnZSdzIHJlY2lwZSwgYW5kIGEgbGlzdCBvZiBvdGhlciBkZXBlbmRlbmNpZXMsIHRoYXQgaXMKK3RoZSBsaXN0IG9mIHBvc3NpYmxlIHJlY2lwZSB2YXJpYWJsZXMgYXMgZm91bmQgaW4gT1RIRVJfREVQRU5EU19CQVNFIHBsdXMKK3RoZSBSUkVDT01NRU5EUyBvciBUUkVDT01NRU5EUyB2YWx1ZS4KK1RoZSBsaXN0cyBhcmUgYnVpbHQgaW4gdGhlIHNvcnQgb3JkZXIgc3BlY2lmaWVkIGZvciB0aGUgcGFja2FnZSBydW50aW1lCitkZXBlbmRlbmN5IHZpZXdzLgorIiIiCitkZWYgX2dldF9wYWNrYWdlX2RlcGVuZGVuY2llcyhwYWNrYWdlX2lkLCB0YXJnZXRfaWQgPSBJTlZBTElEX0tFWSk6CisgICAgcnVudGltZV9kZXBzID0gW10KKyAgICBvdGhlcl9kZXBzID0gW10KKyAgICBvdGhlcl9kZXBlbmRzX3R5cGVzID0gT1RIRVJfREVQRU5EU19CQVNFCisKKyAgICBpZiB0YXJnZXRfaWQgIT0gSU5WQUxJRF9LRVkgOgorICAgICAgICByZGVwZW5kc190eXBlID0gUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfVFJERVBFTkRTCisgICAgICAgIG90aGVyX2RlcGVuZHNfdHlwZXMgKz0gIFtQYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9UUkVDT01NRU5EU10KKyAgICBlbHNlIDoKKyAgICAgICAgcmRlcGVuZHNfdHlwZSA9IFBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1JERVBFTkRTCisgICAgICAgIG90aGVyX2RlcGVuZHNfdHlwZXMgKz0gW1BhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1JSRUNPTU1FTkRTXQorCisgICAgcGFja2FnZSA9IFBhY2thZ2Uub2JqZWN0cy5nZXQocGs9cGFja2FnZV9pZCkKKyAgICBpZiB0YXJnZXRfaWQgIT0gSU5WQUxJRF9LRVkgOgorICAgICAgICBhbGxkZXBzID0gcGFja2FnZS5wYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UuZmlsdGVyKHRhcmdldF9pZF9fZXhhY3QgPSB0YXJnZXRfaWQpCisgICAgZWxzZSA6CisgICAgICAgIGFsbGRlcHMgPSBwYWNrYWdlLnBhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZS5hbGwoKQorICAgIGZvciBpZGVwIGluIGFsbGRlcHM6CisgICAgICAgIGRlcF9wYWNrYWdlID0gUGFja2FnZS5vYmplY3RzLmdldChwaz1pZGVwLmRlcGVuZHNfb25faWQpCisgICAgICAgIGRlcF9lbnRyeSA9IFBhY2thZ2VfRGVwZW5kZW5jeS5ERVBFTkRTX0RJQ1RbaWRlcC5kZXBfdHlwZV0KKyAgICAgICAgaWYgZGVwX3BhY2thZ2UudmVyc2lvbiA9PSAnJyA6CisgICAgICAgICAgICB2ZXJzaW9uID0gJycKKyAgICAgICAgZWxzZSA6CisgICAgICAgICAgICB2ZXJzaW9uID0gZGVwX3BhY2thZ2UudmVyc2lvbiArICItIiArIGRlcF9wYWNrYWdlLnJldmlzaW9uCisgICAgICAgIGluc3RhbGxlZCA9IEZhbHNlCisgICAgICAgIGlmIHRhcmdldF9pZCAhPSBJTlZBTElEX0tFWSA6CisgICAgICAgICAgICBpZiBUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2Uub2JqZWN0cy5maWx0ZXIodGFyZ2V0X2lkX19leGFjdCA9IHRhcmdldF9pZCwgcGFja2FnZV9pZF9fZXhhY3QgPSBkZXBfcGFja2FnZS5pZCkuY291bnQoKSA+IDA6CisgICAgICAgICAgICAgICAgaW5zdGFsbGVkID0gVHJ1ZQorICAgICAgICBkZXAgPSAgIHsKKyAgICAgICAgICAgICAgICAnbmFtZScgOiBkZXBfcGFja2FnZS5uYW1lLAorICAgICAgICAgICAgICAgICd2ZXJzaW9uJyA6IHZlcnNpb24sCisgICAgICAgICAgICAgICAgJ3NpemUnIDogZGVwX3BhY2thZ2Uuc2l6ZSwKKyAgICAgICAgICAgICAgICAnZGVwX3R5cGUnIDogaWRlcC5kZXBfdHlwZSwKKyAgICAgICAgICAgICAgICAnZGVwX3R5cGVfZGlzcGxheScgOiBkZXBfZW50cnlbMF0uY2FwaXRhbGl6ZSgpLAorICAgICAgICAgICAgICAgICdkZXBfdHlwZV9oZWxwJyA6IGRlcF9lbnRyeVsxXSAlIChkZXBfcGFja2FnZS5uYW1lLCBwYWNrYWdlLm5hbWUpLAorICAgICAgICAgICAgICAgICdkZXBlbmRzX29uX2lkJyA6IGRlcF9wYWNrYWdlLmlkLAorICAgICAgICAgICAgICAgICdpbnN0YWxsZWQnIDogaW5zdGFsbGVkLAorICAgICAgICAgICAgICAgIH0KKworICAgICAgICBpZiB0YXJnZXRfaWQgIT0gSU5WQUxJRF9LRVk6CisgICAgICAgICAgICAgICAgZGVwWydhbGlhcyddID0gX2dldF9wYWNrYWdlX2FsaWFzKGRlcF9wYWNrYWdlKQorCisgICAgICAgIGlmIGlkZXAuZGVwX3R5cGUgPT0gcmRlcGVuZHNfdHlwZSA6CisgICAgICAgICAgICBydW50aW1lX2RlcHMuYXBwZW5kKGRlcCkKKyAgICAgICAgZWxpZiBpZGVwLmRlcF90eXBlIGluIG90aGVyX2RlcGVuZHNfdHlwZXMgOgorICAgICAgICAgICAgb3RoZXJfZGVwcy5hcHBlbmQoZGVwKQorCisgICAgcmRlcF9zb3J0ZWQgPSBzb3J0ZWQocnVudGltZV9kZXBzLCBrZXk9bGFtYmRhIGs6IGtbJ25hbWUnXSkKKyAgICBvZGVwX3NvcnRlZCA9IHNvcnRlZCgKKyAgICAgICAgICAgIHNvcnRlZChvdGhlcl9kZXBzLCBrZXk9bGFtYmRhIGs6IGtbJ25hbWUnXSksCisgICAgICAgICAgICBrZXk9bGFtYmRhIGs6IGtbJ2RlcF90eXBlJ10pCisgICAgcmV0dmFsdWVzID0geydydW50aW1lX2RlcHMnIDogcmRlcF9zb3J0ZWQsICdvdGhlcl9kZXBzJyA6IG9kZXBfc29ydGVkfQorICAgIHJldHVybiByZXR2YWx1ZXMKKworIyBSZXR1cm4gdGhlIGNvdW50IG9mIHBhY2thZ2VzIGRlcGVuZGVudCBvbiBwYWNrYWdlIGZvciB0aGlzIHRhcmdldF9pZCBpbWFnZQorZGVmIF9nZXRfcGFja2FnZV9yZXZlcnNlX2RlcF9jb3VudChwYWNrYWdlLCB0YXJnZXRfaWQpOgorICAgIHJldHVybiBwYWNrYWdlLnBhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldC5maWx0ZXIodGFyZ2V0X2lkX19leGFjdD10YXJnZXRfaWQsIGRlcF90eXBlX19leGFjdCA9IFBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1RSREVQRU5EUykuY291bnQoKQorCisjIFJldHVybiB0aGUgY291bnQgb2YgdGhlIHBhY2thZ2VzIHRoYXQgdGhpcyBwYWNrYWdlX2lkIGlzIGRlcGVuZGVudCBvbi4KKyMgVXNlIG9uZSBvZiB0aGUgdHdvIFJERVBFTkRTIHR5cGVzLCBlaXRoZXIgVFJERVBFTkRTIGlmIHRoZSBwYWNrYWdlIHdhcworIyBpbnN0YWxsZWQsIG9yIGVsc2UgUkRFUEVORFMgaWYgb25seSBidWlsdC4KK2RlZiBfZ2V0X3BhY2thZ2VfZGVwZW5kZW5jeV9jb3VudChwYWNrYWdlLCB0YXJnZXRfaWQsIGlzX2luc3RhbGxlZCk6CisgICAgaWYgaXNfaW5zdGFsbGVkIDoKKyAgICAgICAgcmV0dXJuIHBhY2thZ2UucGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlLmZpbHRlcih0YXJnZXRfaWRfX2V4YWN0ID0gdGFyZ2V0X2lkLAorICAgICAgICAgICAgZGVwX3R5cGVfX2V4YWN0ID0gUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfVFJERVBFTkRTKS5jb3VudCgpCisgICAgZWxzZSA6CisgICAgICAgIHJldHVybiBwYWNrYWdlLnBhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZS5maWx0ZXIoZGVwX3R5cGVfX2V4YWN0ID0gUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfUkRFUEVORFMpLmNvdW50KCkKKworZGVmIF9nZXRfcGFja2FnZV9hbGlhcyhwYWNrYWdlKToKKyAgICBhbGlhcyA9IHBhY2thZ2UuaW5zdGFsbGVkX25hbWUKKyAgICBpZiBhbGlhcyAhPSBOb25lIGFuZCBhbGlhcyAhPSAnJyBhbmQgYWxpYXMgIT0gcGFja2FnZS5uYW1lOgorICAgICAgICByZXR1cm4gYWxpYXMKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gJycKKworZGVmIF9nZXRfZnVsbHBhY2thZ2VzcGVjKHBhY2thZ2UpOgorICAgIHIgPSBwYWNrYWdlLm5hbWUKKyAgICB2ZXJzaW9uX2dvb2QgPSBwYWNrYWdlLnZlcnNpb24gIT0gTm9uZSBhbmQgIHBhY2thZ2UudmVyc2lvbiAhPSAnJworICAgIHJldmlzaW9uX2dvb2QgPSBwYWNrYWdlLnJldmlzaW9uICE9IE5vbmUgYW5kIHBhY2thZ2UucmV2aXNpb24gIT0gJycKKyAgICBpZiB2ZXJzaW9uX2dvb2Qgb3IgcmV2aXNpb25fZ29vZDoKKyAgICAgICAgciArPSAnXycKKyAgICAgICAgaWYgdmVyc2lvbl9nb29kOgorICAgICAgICAgICAgciArPSBwYWNrYWdlLnZlcnNpb24KKyAgICAgICAgICAgIGlmIHJldmlzaW9uX2dvb2Q6CisgICAgICAgICAgICAgICAgciArPSAnLScKKyAgICAgICAgaWYgcmV2aXNpb25fZ29vZDoKKyAgICAgICAgICAgIHIgKz0gcGFja2FnZS5yZXZpc2lvbgorICAgIHJldHVybiByCisKK2RlZiBwYWNrYWdlX2J1aWx0X2RldGFpbChyZXF1ZXN0LCBidWlsZF9pZCwgcGFja2FnZV9pZCk6CisgICAgdGVtcGxhdGUgPSAicGFja2FnZV9idWlsdF9kZXRhaWwuaHRtbCIKKyAgICBpZiBCdWlsZC5vYmplY3RzLmZpbHRlcihwaz1idWlsZF9pZCkuY291bnQoKSA9PSAwIDoKKyAgICAgICAgcmV0dXJuIHJlZGlyZWN0KGJ1aWxkcykKKworICAgICMgZm9sbG93IGNvbnZlbnRpb24gZm9yIHBhZ2luYXRpb24gdy8gc2VhcmNoIGFsdGhvdWdoIG5vdCB1c2VkIGZvciB0aGlzIHZpZXcKKyAgICBxdWVyeXNldCA9IFBhY2thZ2VfRmlsZS5vYmplY3RzLmZpbHRlcihwYWNrYWdlX2lkX19leGFjdD1wYWNrYWdlX2lkKQorICAgIChwYWdlc2l6ZSwgb3JkZXJieSkgPSBfZ2V0X3BhcmFtZXRlcnNfdmFsdWVzKHJlcXVlc3QsIDI1LCAncGF0aDorJykKKyAgICBtYW5kYXRvcnlfcGFyYW1ldGVycyA9IHsgJ2NvdW50JzogcGFnZXNpemUsICAncGFnZScgOiAxLCAnb3JkZXJieScgOiBvcmRlcmJ5IH0KKyAgICByZXR2YWwgPSBfdmVyaWZ5X3BhcmFtZXRlcnMoIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycyApCisgICAgaWYgcmV0dmFsOgorICAgICAgICByZXR1cm4gX3JlZGlyZWN0X3BhcmFtZXRlcnMoICdwYWNrYWdlX2J1aWx0X2RldGFpbCcsIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycywgYnVpbGRfaWQgPSBidWlsZF9pZCwgcGFja2FnZV9pZCA9IHBhY2thZ2VfaWQpCisKKyAgICAoZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZykgPSBfc2VhcmNoX3R1cGxlKHJlcXVlc3QsIFBhY2thZ2VfRmlsZSkKKyAgICBwYXRocyA9IF9nZXRfcXVlcnlzZXQoUGFja2FnZV9GaWxlLCBxdWVyeXNldCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJ3BhdGgnKQorCisgICAgcGFja2FnZSA9IFBhY2thZ2Uub2JqZWN0cy5nZXQocGs9cGFja2FnZV9pZCkKKyAgICBwYWNrYWdlLmZ1bGxwYWNrYWdlc3BlYyA9IF9nZXRfZnVsbHBhY2thZ2VzcGVjKHBhY2thZ2UpCisgICAgY29udGV4dCA9IHsKKyAgICAgICAgICAgICdidWlsZCcgOiBCdWlsZC5vYmplY3RzLmdldChwaz1idWlsZF9pZCksCisgICAgICAgICAgICAncGFja2FnZScgOiBwYWNrYWdlLAorICAgICAgICAgICAgJ2RlcGVuZGVuY3lfY291bnQnIDogX2dldF9wYWNrYWdlX2RlcGVuZGVuY3lfY291bnQocGFja2FnZSwgLTEsIEZhbHNlKSwKKyAgICAgICAgICAgICdvYmplY3RzJyA6IHBhdGhzLAorICAgICAgICAgICAgJ3RhYmxlY29scyc6WworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgJ25hbWUnOidGaWxlJywKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAicGF0aCIpLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJwYXRoIiksCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICduYW1lJzonU2l6ZScsCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInNpemUiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAic2l6ZSIpLAorICAgICAgICAgICAgICAgICAgICAnZGNsYXNzJzogJ3NpemVjb2wgc3BhbjInLAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICBdCisgICAgfQorICAgIGlmIHBhdGhzLmFsbCgpLmNvdW50KCkgPCAyOgorICAgICAgICBjb250ZXh0WydkaXNhYmxlX3NvcnQnXSA9IFRydWU7CisKKyAgICByZXNwb25zZSA9IHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKyAgICBfc2V0X3BhcmFtZXRlcnNfdmFsdWVzKHBhZ2VzaXplLCBvcmRlcmJ5LCByZXF1ZXN0KQorICAgIHJldHVybiByZXNwb25zZQorCitkZWYgcGFja2FnZV9idWlsdF9kZXBlbmRlbmNpZXMocmVxdWVzdCwgYnVpbGRfaWQsIHBhY2thZ2VfaWQpOgorICAgIHRlbXBsYXRlID0gInBhY2thZ2VfYnVpbHRfZGVwZW5kZW5jaWVzLmh0bWwiCisgICAgaWYgQnVpbGQub2JqZWN0cy5maWx0ZXIocGs9YnVpbGRfaWQpLmNvdW50KCkgPT0gMCA6CisgICAgICAgICByZXR1cm4gcmVkaXJlY3QoYnVpbGRzKQorCisgICAgcGFja2FnZSA9IFBhY2thZ2Uub2JqZWN0cy5nZXQocGs9cGFja2FnZV9pZCkKKyAgICBwYWNrYWdlLmZ1bGxwYWNrYWdlc3BlYyA9IF9nZXRfZnVsbHBhY2thZ2VzcGVjKHBhY2thZ2UpCisgICAgZGVwZW5kZW5jaWVzID0gX2dldF9wYWNrYWdlX2RlcGVuZGVuY2llcyhwYWNrYWdlX2lkKQorICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAnYnVpbGQnIDogQnVpbGQub2JqZWN0cy5nZXQocGs9YnVpbGRfaWQpLAorICAgICAgICAgICAgJ3BhY2thZ2UnIDogcGFja2FnZSwKKyAgICAgICAgICAgICdydW50aW1lX2RlcHMnIDogZGVwZW5kZW5jaWVzWydydW50aW1lX2RlcHMnXSwKKyAgICAgICAgICAgICdvdGhlcl9kZXBzJyA6ICAgZGVwZW5kZW5jaWVzWydvdGhlcl9kZXBzJ10sCisgICAgICAgICAgICAnZGVwZW5kZW5jeV9jb3VudCcgOiBfZ2V0X3BhY2thZ2VfZGVwZW5kZW5jeV9jb3VudChwYWNrYWdlLCAtMSwgIEZhbHNlKQorICAgIH0KKyAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorCisKK2RlZiBwYWNrYWdlX2luY2x1ZGVkX2RldGFpbChyZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkLCBwYWNrYWdlX2lkKToKKyAgICB0ZW1wbGF0ZSA9ICJwYWNrYWdlX2luY2x1ZGVkX2RldGFpbC5odG1sIgorICAgIGlmIEJ1aWxkLm9iamVjdHMuZmlsdGVyKHBrPWJ1aWxkX2lkKS5jb3VudCgpID09IDAgOgorICAgICAgICByZXR1cm4gcmVkaXJlY3QoYnVpbGRzKQorCisgICAgIyBmb2xsb3cgY29udmVudGlvbiBmb3IgcGFnaW5hdGlvbiB3LyBzZWFyY2ggYWx0aG91Z2ggbm90IHVzZWQgZm9yIHRoaXMgdmlldworICAgIChwYWdlc2l6ZSwgb3JkZXJieSkgPSBfZ2V0X3BhcmFtZXRlcnNfdmFsdWVzKHJlcXVlc3QsIDI1LCAncGF0aDorJykKKyAgICBtYW5kYXRvcnlfcGFyYW1ldGVycyA9IHsgJ2NvdW50JzogcGFnZXNpemUsICAncGFnZScgOiAxLCAnb3JkZXJieScgOiBvcmRlcmJ5IH0KKyAgICByZXR2YWwgPSBfdmVyaWZ5X3BhcmFtZXRlcnMoIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycyApCisgICAgaWYgcmV0dmFsOgorICAgICAgICByZXR1cm4gX3JlZGlyZWN0X3BhcmFtZXRlcnMoICdwYWNrYWdlX2luY2x1ZGVkX2RldGFpbCcsIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycywgYnVpbGRfaWQgPSBidWlsZF9pZCwgdGFyZ2V0X2lkID0gdGFyZ2V0X2lkLCBwYWNrYWdlX2lkID0gcGFja2FnZV9pZCkKKyAgICAoZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZykgPSBfc2VhcmNoX3R1cGxlKHJlcXVlc3QsIFBhY2thZ2VfRmlsZSkKKworICAgIHF1ZXJ5c2V0ID0gUGFja2FnZV9GaWxlLm9iamVjdHMuZmlsdGVyKHBhY2thZ2VfaWRfX2V4YWN0PXBhY2thZ2VfaWQpCisgICAgcGF0aHMgPSBfZ2V0X3F1ZXJ5c2V0KFBhY2thZ2VfRmlsZSwgcXVlcnlzZXQsIGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcsICdwYXRoJykKKworICAgIHBhY2thZ2UgPSBQYWNrYWdlLm9iamVjdHMuZ2V0KHBrPXBhY2thZ2VfaWQpCisgICAgcGFja2FnZS5mdWxscGFja2FnZXNwZWMgPSBfZ2V0X2Z1bGxwYWNrYWdlc3BlYyhwYWNrYWdlKQorICAgIHBhY2thZ2UuYWxpYXMgPSBfZ2V0X3BhY2thZ2VfYWxpYXMocGFja2FnZSkKKyAgICB0YXJnZXQgPSBUYXJnZXQub2JqZWN0cy5nZXQocGs9dGFyZ2V0X2lkKQorICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAnYnVpbGQnIDogQnVpbGQub2JqZWN0cy5nZXQocGs9YnVpbGRfaWQpLAorICAgICAgICAgICAgJ3RhcmdldCcgIDogdGFyZ2V0LAorICAgICAgICAgICAgJ3BhY2thZ2UnIDogcGFja2FnZSwKKyAgICAgICAgICAgICdyZXZlcnNlX2NvdW50JyA6IF9nZXRfcGFja2FnZV9yZXZlcnNlX2RlcF9jb3VudChwYWNrYWdlLCB0YXJnZXRfaWQpLAorICAgICAgICAgICAgJ2RlcGVuZGVuY3lfY291bnQnIDogX2dldF9wYWNrYWdlX2RlcGVuZGVuY3lfY291bnQocGFja2FnZSwgdGFyZ2V0X2lkLCBUcnVlKSwKKyAgICAgICAgICAgICdvYmplY3RzJzogcGF0aHMsCisgICAgICAgICAgICAndGFibGVjb2xzJzpbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAnbmFtZSc6J0ZpbGUnLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJwYXRoIiksCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInBhdGgiKSwKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgJ25hbWUnOidTaXplJywKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAic2l6ZSIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJzaXplIiksCisgICAgICAgICAgICAgICAgICAgICdkY2xhc3MnOiAnc2l6ZWNvbCBzcGFuMicsCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF0KKyAgICB9CisgICAgaWYgcGF0aHMuYWxsKCkuY291bnQoKSA8IDI6CisgICAgICAgIGNvbnRleHRbJ2Rpc2FibGVfc29ydCddID0gVHJ1ZQorICAgIHJlc3BvbnNlID0gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorICAgIF9zZXRfcGFyYW1ldGVyc192YWx1ZXMocGFnZXNpemUsIG9yZGVyYnksIHJlcXVlc3QpCisgICAgcmV0dXJuIHJlc3BvbnNlCisKK2RlZiBwYWNrYWdlX2luY2x1ZGVkX2RlcGVuZGVuY2llcyhyZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkLCBwYWNrYWdlX2lkKToKKyAgICB0ZW1wbGF0ZSA9ICJwYWNrYWdlX2luY2x1ZGVkX2RlcGVuZGVuY2llcy5odG1sIgorICAgIGlmIEJ1aWxkLm9iamVjdHMuZmlsdGVyKHBrPWJ1aWxkX2lkKS5jb3VudCgpID09IDAgOgorICAgICAgICByZXR1cm4gcmVkaXJlY3QoYnVpbGRzKQorCisgICAgcGFja2FnZSA9IFBhY2thZ2Uub2JqZWN0cy5nZXQocGs9cGFja2FnZV9pZCkKKyAgICBwYWNrYWdlLmZ1bGxwYWNrYWdlc3BlYyA9IF9nZXRfZnVsbHBhY2thZ2VzcGVjKHBhY2thZ2UpCisgICAgcGFja2FnZS5hbGlhcyA9IF9nZXRfcGFja2FnZV9hbGlhcyhwYWNrYWdlKQorICAgIHRhcmdldCA9IFRhcmdldC5vYmplY3RzLmdldChwaz10YXJnZXRfaWQpCisKKyAgICBkZXBlbmRlbmNpZXMgPSBfZ2V0X3BhY2thZ2VfZGVwZW5kZW5jaWVzKHBhY2thZ2VfaWQsIHRhcmdldF9pZCkKKyAgICBjb250ZXh0ID0geworICAgICAgICAgICAgJ2J1aWxkJyA6IEJ1aWxkLm9iamVjdHMuZ2V0KHBrPWJ1aWxkX2lkKSwKKyAgICAgICAgICAgICdwYWNrYWdlJyA6IHBhY2thZ2UsCisgICAgICAgICAgICAndGFyZ2V0JyA6IHRhcmdldCwKKyAgICAgICAgICAgICdydW50aW1lX2RlcHMnIDogZGVwZW5kZW5jaWVzWydydW50aW1lX2RlcHMnXSwKKyAgICAgICAgICAgICdvdGhlcl9kZXBzJyA6ICAgZGVwZW5kZW5jaWVzWydvdGhlcl9kZXBzJ10sCisgICAgICAgICAgICAncmV2ZXJzZV9jb3VudCcgOiBfZ2V0X3BhY2thZ2VfcmV2ZXJzZV9kZXBfY291bnQocGFja2FnZSwgdGFyZ2V0X2lkKSwKKyAgICAgICAgICAgICdkZXBlbmRlbmN5X2NvdW50JyA6IF9nZXRfcGFja2FnZV9kZXBlbmRlbmN5X2NvdW50KHBhY2thZ2UsIHRhcmdldF9pZCwgVHJ1ZSkKKyAgICB9CisgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKworZGVmIHBhY2thZ2VfaW5jbHVkZWRfcmV2ZXJzZV9kZXBlbmRlbmNpZXMocmVxdWVzdCwgYnVpbGRfaWQsIHRhcmdldF9pZCwgcGFja2FnZV9pZCk6CisgICAgdGVtcGxhdGUgPSAicGFja2FnZV9pbmNsdWRlZF9yZXZlcnNlX2RlcGVuZGVuY2llcy5odG1sIgorICAgIGlmIEJ1aWxkLm9iamVjdHMuZmlsdGVyKHBrPWJ1aWxkX2lkKS5jb3VudCgpID09IDAgOgorICAgICAgICByZXR1cm4gcmVkaXJlY3QoYnVpbGRzKQorCisgICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMjUsICdwYWNrYWdlX19uYW1lOisnKQorICAgIG1hbmRhdG9yeV9wYXJhbWV0ZXJzID0geyAnY291bnQnOiBwYWdlc2l6ZSwgICdwYWdlJyA6IDEsICdvcmRlcmJ5Jzogb3JkZXJieSB9CisgICAgcmV0dmFsID0gX3ZlcmlmeV9wYXJhbWV0ZXJzKCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMgKQorICAgIGlmIHJldHZhbDoKKyAgICAgICAgcmV0dXJuIF9yZWRpcmVjdF9wYXJhbWV0ZXJzKCAncGFja2FnZV9pbmNsdWRlZF9yZXZlcnNlX2RlcGVuZGVuY2llcycsIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycywgYnVpbGRfaWQgPSBidWlsZF9pZCwgdGFyZ2V0X2lkID0gdGFyZ2V0X2lkLCBwYWNrYWdlX2lkID0gcGFja2FnZV9pZCkKKyAgICAoZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZykgPSBfc2VhcmNoX3R1cGxlKHJlcXVlc3QsIFBhY2thZ2VfRmlsZSkKKworICAgIHF1ZXJ5c2V0ID0gUGFja2FnZV9EZXBlbmRlbmN5Lm9iamVjdHMuc2VsZWN0X3JlbGF0ZWQoJ2RlcGVuZHNfb25fX25hbWUnLCAnZGVwZW5kc19vbl9fc2l6ZScpLmZpbHRlcihkZXBlbmRzX29uPXBhY2thZ2VfaWQsIHRhcmdldF9pZD10YXJnZXRfaWQsIGRlcF90eXBlPVBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1RSREVQRU5EUykKKyAgICBvYmplY3RzID0gX2dldF9xdWVyeXNldChQYWNrYWdlX0RlcGVuZGVuY3ksIHF1ZXJ5c2V0LCBmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nLCAncGFja2FnZV9fbmFtZScpCisKKyAgICBwYWNrYWdlID0gUGFja2FnZS5vYmplY3RzLmdldChwaz1wYWNrYWdlX2lkKQorICAgIHBhY2thZ2UuZnVsbHBhY2thZ2VzcGVjID0gX2dldF9mdWxscGFja2FnZXNwZWMocGFja2FnZSkKKyAgICBwYWNrYWdlLmFsaWFzID0gX2dldF9wYWNrYWdlX2FsaWFzKHBhY2thZ2UpCisgICAgdGFyZ2V0ID0gVGFyZ2V0Lm9iamVjdHMuZ2V0KHBrPXRhcmdldF9pZCkKKyAgICBmb3IgbyBpbiBvYmplY3RzOgorICAgICAgICBpZiBvLnBhY2thZ2UudmVyc2lvbiAhPSAnJzoKKyAgICAgICAgICAgIG8ucGFja2FnZS52ZXJzaW9uICs9ICctJyArIG8ucGFja2FnZS5yZXZpc2lvbgorICAgICAgICBvLmFsaWFzID0gX2dldF9wYWNrYWdlX2FsaWFzKG8ucGFja2FnZSkKKyAgICBjb250ZXh0ID0geworICAgICAgICAgICAgJ2J1aWxkJyA6IEJ1aWxkLm9iamVjdHMuZ2V0KHBrPWJ1aWxkX2lkKSwKKyAgICAgICAgICAgICdwYWNrYWdlJyA6IHBhY2thZ2UsCisgICAgICAgICAgICAndGFyZ2V0JyA6IHRhcmdldCwKKyAgICAgICAgICAgICdvYmplY3RzJyA6IG9iamVjdHMsCisgICAgICAgICAgICAncmV2ZXJzZV9jb3VudCcgOiBfZ2V0X3BhY2thZ2VfcmV2ZXJzZV9kZXBfY291bnQocGFja2FnZSwgdGFyZ2V0X2lkKSwKKyAgICAgICAgICAgICdkZXBlbmRlbmN5X2NvdW50JyA6IF9nZXRfcGFja2FnZV9kZXBlbmRlbmN5X2NvdW50KHBhY2thZ2UsIHRhcmdldF9pZCwgVHJ1ZSksCisgICAgICAgICAgICAndGFibGVjb2xzJzpbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAnbmFtZSc6J1BhY2thZ2UnLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJwYWNrYWdlX19uYW1lIiksCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOiBfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJwYWNrYWdlX19uYW1lIiksCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICduYW1lJzonVmVyc2lvbicsCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICduYW1lJzonU2l6ZScsCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInBhY2thZ2VfX3NpemUiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6IF9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInBhY2thZ2VfX3NpemUiKSwKKyAgICAgICAgICAgICAgICAgICAgJ2RjbGFzcyc6ICdzaXplY29sIHNwYW4yJywKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgXQorICAgIH0KKyAgICBpZiBvYmplY3RzLmFsbCgpLmNvdW50KCkgPCAyOgorICAgICAgICBjb250ZXh0WydkaXNhYmxlX3NvcnQnXSA9IFRydWUKKyAgICByZXNwb25zZSA9IHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKyAgICBfc2V0X3BhcmFtZXRlcnNfdmFsdWVzKHBhZ2VzaXplLCBvcmRlcmJ5LCByZXF1ZXN0KQorICAgIHJldHVybiByZXNwb25zZQorCitkZWYgaW1hZ2VfaW5mb3JtYXRpb25fZGlyKHJlcXVlc3QsIGJ1aWxkX2lkLCB0YXJnZXRfaWQsIHBhY2thZ2VmaWxlX2lkKToKKyAgICAjIHN0dWJiZWQgZm9yIG5vdworICAgIHJldHVybiByZWRpcmVjdChidWlsZHMpCisgICAgIyB0aGUgY29udGV4dCBwcm9jZXNzb3IgdGhhdCBzdXBwbGllcyBkYXRhIHVzZWQgYWNyb3NzIGFsbCB0aGUgcGFnZXMKKworCitkZWYgbWFuYWdlZGNvbnRleHRwcm9jZXNzb3IocmVxdWVzdCk6CisgICAgcmV0ID0geworICAgICAgICAicHJvamVjdHMiOiBQcm9qZWN0Lm9iamVjdHMuYWxsKCksCisgICAgICAgICJERUJVRyIgOiB0b2FzdGVybWFpbi5zZXR0aW5ncy5ERUJVRywKKyAgICAgICAgIlRPQVNURVJfQlJBTkNIIjogdG9hc3Rlcm1haW4uc2V0dGluZ3MuVE9BU1RFUl9CUkFOQ0gsCisgICAgICAgICJUT0FTVEVSX1JFVklTSU9OIiA6IHRvYXN0ZXJtYWluLnNldHRpbmdzLlRPQVNURVJfUkVWSVNJT04sCisgICAgfQorICAgIHJldHVybiByZXQKKworCisKK2ltcG9ydCB0b2FzdGVybWFpbi5zZXR0aW5ncworCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFByb2plY3QsIFByb2plY3RMYXllciwgUHJvamVjdFRhcmdldCwgUHJvamVjdFZhcmlhYmxlCisKKyMgd2UgaGF2ZSBhIHNldCBvZiBmdW5jdGlvbnMgaWYgd2UncmUgaW4gbWFuYWdlZCBtb2RlLCBvcgorIyBhIGRlZmF1bHQgInBhZ2Ugbm90IGF2YWlsYWJsZSIgc2ltcGxlIGZ1bmN0aW9ucyBmb3IgaW50ZXJhY3RpdmUgbW9kZQorCitpZiBUcnVlOgorICAgIGZyb20gZGphbmdvLmNvbnRyaWIuYXV0aC5tb2RlbHMgaW1wb3J0IFVzZXIKKyAgICBmcm9tIGRqYW5nby5jb250cmliLmF1dGggaW1wb3J0IGF1dGhlbnRpY2F0ZSwgbG9naW4KKyAgICBmcm9tIGRqYW5nby5jb250cmliLmF1dGguZGVjb3JhdG9ycyBpbXBvcnQgbG9naW5fcmVxdWlyZWQKKworICAgIGZyb20gb3JtLm1vZGVscyBpbXBvcnQgQnJhbmNoLCBMYXllclNvdXJjZSwgVG9hc3RlclNldHRpbmcsIFJlbGVhc2UsIE1hY2hpbmUsIExheWVyVmVyc2lvbkRlcGVuZGVuY3kKKyAgICBmcm9tIGJsZGNvbnRyb2wubW9kZWxzIGltcG9ydCBCdWlsZFJlcXVlc3QKKworICAgIGltcG9ydCB0cmFjZWJhY2sKKworICAgIGNsYXNzIEJhZFBhcmFtZXRlckV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICAgICAnJycgVGhlIGV4Y2VwdGlvbiByYWlzZWQgb24gaW52YWxpZCBQT1NUIHJlcXVlc3RzICcnJworICAgICAgICBwYXNzCisKKyAgICAjIHNob3dzIHRoZSAiYWxsIGJ1aWxkcyIgcGFnZSBmb3IgbWFuYWdlZCBtb2RlOyBpdCBkaXNwbGF5cyBidWlsZCByZXF1ZXN0cyAoYXQgbGVhc3Qgc3RhcnRlZCEpIGluc3RlYWQgb2YgYWN0dWFsIGJ1aWxkcworICAgIEBfdGVtcGxhdGVfcmVuZGVyZXIoImJ1aWxkcy5odG1sIikKKyAgICBkZWYgYnVpbGRzKHJlcXVlc3QpOgorICAgICAgICAjIGRlZmluZSBoZXJlIHdoYXQgcGFyYW1ldGVycyB0aGUgdmlldyBuZWVkcyBpbiB0aGUgR0VUIHBvcnRpb24gaW4gb3JkZXIgdG8KKyAgICAgICAgIyBiZSBhYmxlIHRvIGRpc3BsYXkgc29tZXRoaW5nLiAgJ2NvdW50JyBhbmQgJ3BhZ2UnIGFyZSBtYW5kYXRvcnkgZm9yIGFsbCB2aWV3cworICAgICAgICAjIHRoYXQgdXNlIHBhZ2luYXRvcnMuCisKKyAgICAgICAgcXVlcnlzZXQgPSBCdWlsZC5vYmplY3RzLmV4Y2x1ZGUob3V0Y29tZSA9IEJ1aWxkLklOX1BST0dSRVNTKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbnRleHQsIHBhZ2VzaXplLCBvcmRlcmJ5ID0gX2J1aWxkX2xpc3RfaGVscGVyKHJlcXVlc3QsIHF1ZXJ5c2V0KQorICAgICAgICAgICAgIyBhbGwgYnVpbGRzIHBhZ2UgYXMgYSBQcm9qZWN0IGNvbHVtbgorICAgICAgICAgICAgY29udGV4dFsndGFibGVjb2xzJ10uYXBwZW5kKHsnbmFtZSc6ICdQcm9qZWN0JywgJ2NsY2Fsc3MnOiAncHJvamVjdF9jb2x1bW4nLCB9KQorICAgICAgICBleGNlcHQgUmVkaXJlY3RFeGNlcHRpb24gYXMgcmU6CisgICAgICAgICAgICAjIHJld3JpdGUgdGhlIFJlZGlyZWN0RXhjZXB0aW9uCisgICAgICAgICAgICByZS52aWV3ID0gcmVzb2x2ZShyZXF1ZXN0LnBhdGhfaW5mbykudXJsX25hbWUKKyAgICAgICAgICAgIHJhaXNlIHJlCisKKyAgICAgICAgX3NldF9wYXJhbWV0ZXJzX3ZhbHVlcyhwYWdlc2l6ZSwgb3JkZXJieSwgcmVxdWVzdCkKKyAgICAgICAgcmV0dXJuIGNvbnRleHQKKworCisgICAgIyBoZWxwZXIgZnVuY3Rpb24sIHRvIGJlIHVzZWQgb24gImFsbCBidWlsZHMiIGFuZCAicHJvamVjdCBidWlsZHMiIHBhZ2VzCisgICAgZGVmIF9idWlsZF9saXN0X2hlbHBlcihyZXF1ZXN0LCBxdWVyeXNldF9hbGwpOgorCisgICAgICAgIGRlZmF1bHRfb3JkZXJieSA9ICdjb21wbGV0ZWRfb246LScKKyAgICAgICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMTAsIGRlZmF1bHRfb3JkZXJieSkKKyAgICAgICAgbWFuZGF0b3J5X3BhcmFtZXRlcnMgPSB7ICdjb3VudCc6IHBhZ2VzaXplLCAgJ3BhZ2UnIDogMSwgJ29yZGVyYnknIDogb3JkZXJieSB9CisgICAgICAgIHJldHZhbCA9IF92ZXJpZnlfcGFyYW1ldGVycyggcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzICkKKyAgICAgICAgaWYgcmV0dmFsOgorICAgICAgICAgICAgcmFpc2UgUmVkaXJlY3RFeGNlcHRpb24oIE5vbmUsIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycykKKworICAgICAgICAjIGJvaWxlcnBsYXRlIGNvZGUgdGhhdCB0YWtlcyBhIHJlcXVlc3QgZm9yIGFuIG9iamVjdCB0eXBlIGFuZCByZXR1cm5zIGEgcXVlcnlzZXQKKyAgICAgICAgIyBmb3IgdGhhdCBvYmplY3QgdHlwZS4gY29weXBhc3RhIGZvciBhbGwgbmVlZGVkIHRhYmxlIHNlYXJjaGVzCisgICAgICAgIChmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nKSA9IF9zZWFyY2hfdHVwbGUocmVxdWVzdCwgQnVpbGQpCisgICAgICAgICMgcG9zdC1wcm9jZXNzIGFueSBkYXRlIHJhbmdlIGZpbHRlcnMKKyAgICAgICAgZmlsdGVyX3N0cmluZyxkYXRlcmFuZ2Vfc2VsZWN0ZWQgPSBfbW9kaWZ5X2RhdGVfcmFuZ2VfZmlsdGVyKGZpbHRlcl9zdHJpbmcpCisgICAgICAgIHF1ZXJ5c2V0X2FsbCA9IHF1ZXJ5c2V0X2FsbC5zZWxlY3RfcmVsYXRlZCgicHJvamVjdCIpLmFubm90YXRlKGVycm9yc19ubyA9IENvdW50KCdsb2dtZXNzYWdlJywgb25seT1RKGxvZ21lc3NhZ2VfX2xldmVsPUxvZ01lc3NhZ2UuRVJST1IpfFEobG9nbWVzc2FnZV9fbGV2ZWw9TG9nTWVzc2FnZS5FWENFUFRJT04pKSkuYW5ub3RhdGUod2FybmluZ3Nfbm8gPSBDb3VudCgnbG9nbWVzc2FnZScsIG9ubHk9UShsb2dtZXNzYWdlX19sZXZlbD1Mb2dNZXNzYWdlLldBUk5JTkcpKSkuZXh0cmEoc2VsZWN0PXsndGltZXNwZW50JzonY29tcGxldGVkX29uIC0gc3RhcnRlZF9vbid9KQorICAgICAgICBxdWVyeXNldF93aXRoX3NlYXJjaCA9IF9nZXRfcXVlcnlzZXQoQnVpbGQsIHF1ZXJ5c2V0X2FsbCwgTm9uZSwgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJy1jb21wbGV0ZWRfb24nKQorICAgICAgICBxdWVyeXNldCA9IF9nZXRfcXVlcnlzZXQoQnVpbGQsIHF1ZXJ5c2V0X2FsbCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJy1jb21wbGV0ZWRfb24nKQorCisgICAgICAgICMgcmV0cmlldmUgdGhlIG9iamVjdHMgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgdGFibGU7IGJ1aWxkcyBhIHBhZ2luYXRvciBhbmQgZ2V0cyBhIHBhZ2UgcmFuZ2UgdG8gZGlzcGxheQorICAgICAgICBidWlsZF9pbmZvID0gX2J1aWxkX3BhZ2VfcmFuZ2UoUGFnaW5hdG9yKHF1ZXJ5c2V0LCBwYWdlc2l6ZSksIHJlcXVlc3QuR0VULmdldCgncGFnZScsIDEpKQorCisgICAgICAgICMgYnVpbGQgdmlldy1zcGVjaWZpYyBpbmZvcm1hdGlvbjsgdGhpcyBpcyByZW5kZXJlZCBzcGVjaWZpY2FsbHkgaW4gdGhlIGJ1aWxkcyBwYWdlLCBhdCB0aGUgdG9wIG9mIHRoZSBwYWdlIChpLmUuIFJlY2VudCBidWlsZHMpCisgICAgICAgIGJ1aWxkX21ydSA9IEJ1aWxkLm9iamVjdHMub3JkZXJfYnkoIi1zdGFydGVkX29uIilbOjNdCisKKyAgICAgICAgIyBjYWxjdWxhdGUgdGhlIGV4YWN0IGJlZ2luaW5nIG9mIGxvY2FsIHRvZGF5IGFuZCB5ZXN0ZXJkYXksIGFwcGVuZCBjb250ZXh0CisgICAgICAgIGNvbnRleHRfZGF0ZSx0b2RheV9iZWdpbix5ZXN0ZXJkYXlfYmVnaW4gPSBfYWRkX2RhdGVyYW5nZV9jb250ZXh0KHF1ZXJ5c2V0X2FsbCwgcmVxdWVzdCwgeydzdGFydGVkX29uJywnY29tcGxldGVkX29uJ30pCisKKyAgICAgICAgIyBzZXQgdXAgbGlzdCBvZiBmc3R5cGVzIGZvciBlYWNoIGJ1aWxkCisgICAgICAgIGZzdHlwZXNfbWFwID0ge307CisgICAgICAgIGZvciBidWlsZCBpbiBidWlsZF9pbmZvOgorICAgICAgICAgICAgdGFyZ2V0cyA9IFRhcmdldC5vYmplY3RzLmZpbHRlciggYnVpbGRfaWQgPSBidWlsZC5pZCApCisgICAgICAgICAgICBjb21tYSA9ICIiOworICAgICAgICAgICAgZXh0ZW5zaW9ucyA9ICIiOworICAgICAgICAgICAgZm9yIHQgaW4gdGFyZ2V0czoKKyAgICAgICAgICAgICAgICBpZiAoIG5vdCB0LmlzX2ltYWdlICk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgdGlmID0gVGFyZ2V0X0ltYWdlX0ZpbGUub2JqZWN0cy5maWx0ZXIoIHRhcmdldF9pZCA9IHQuaWQgKQorICAgICAgICAgICAgICAgIGZvciBpIGluIHRpZjoKKyAgICAgICAgICAgICAgICAgICAgcz1yZS5zdWIoJy4qdGFyLmJ6MicsICd0YXIuYnoyJywgaS5maWxlX25hbWUpCisgICAgICAgICAgICAgICAgICAgIGlmIHMgPT0gaS5maWxlX25hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICBzPXJlLnN1YignLipcLicsICcnLCBpLmZpbGVfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgTm9uZSA9PSByZS5zZWFyY2gocyxleHRlbnNpb25zKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMgKz0gY29tbWEgKyBzCisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYSA9ICIsICIKKyAgICAgICAgICAgIGZzdHlwZXNfbWFwW2J1aWxkLmlkXT1leHRlbnNpb25zCisKKyAgICAgICAgIyBzZW5kIHRoZSBkYXRhIHRvIHRoZSB0ZW1wbGF0ZQorICAgICAgICBjb250ZXh0ID0geworICAgICAgICAgICAgICAgICMgc3BlY2lmaWMgaW5mbyBmb3IKKyAgICAgICAgICAgICAgICAgICAgJ21ydScgOiBidWlsZF9tcnUsCisgICAgICAgICAgICAgICAgIyBUT0RPOiBjb21tb24gb2JqZWN0cyBmb3IgYWxsIHRhYmxlIHZpZXdzLCBhZGFwdCBhcyBuZWVkZWQKKyAgICAgICAgICAgICAgICAgICAgJ29iamVjdHMnIDogYnVpbGRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgJ29iamVjdG5hbWUnIDogImJ1aWxkcyIsCisgICAgICAgICAgICAgICAgICAgICdkZWZhdWx0X29yZGVyYnknIDogZGVmYXVsdF9vcmRlcmJ5LAorICAgICAgICAgICAgICAgICAgICAnZnN0eXBlcycgOiBmc3R5cGVzX21hcCwKKyAgICAgICAgICAgICAgICAgICAgJ3NlYXJjaF90ZXJtJyA6IHNlYXJjaF90ZXJtLAorICAgICAgICAgICAgICAgICAgICAndG90YWxfY291bnQnIDogcXVlcnlzZXRfd2l0aF9zZWFyY2guY291bnQoKSwKKyAgICAgICAgICAgICAgICAgICAgJ2RhdGVyYW5nZV9zZWxlY3RlZCcgOiBkYXRlcmFuZ2Vfc2VsZWN0ZWQsCisgICAgICAgICAgICAgICAgIyBTcGVjaWZpZXMgdGhlIGRpc3BsYXkgb2YgY29sdW1ucyBmb3IgdGhlIHRhYmxlLCBhcHBlYXJhbmNlIGluICJFZGl0IGNvbHVtbnMiIGJveCwgdG9nZ2xpbmcgZGVmYXVsdCBzaG93L2hpZGUsIGFuZCBzcGVjaWZ5aW5nIGZpbHRlcnMgZm9yIGNvbHVtbnMKKyAgICAgICAgICAgICAgICAgICAgJ3RhYmxlY29scycgOiBbCisgICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdPdXRjb21lJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbHVtbiB3aXRoIGEgc2luZ2xlIGZpbHRlcgorICAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJyA6ICJUaGUgb3V0Y29tZSB0ZWxscyB5b3UgaWYgYSBidWlsZCBzdWNjZXNzZnVsbHkgY29tcGxldGVkIG9yIGZhaWxlZCIsICAgICAjIHRoZSBoZWxwIGJ1dHRvbiBjb250ZW50CisgICAgICAgICAgICAgICAgICAgICAnZGNsYXNzJyA6ICJzcGFuMiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbmRpY2F0aW9uIGFib3V0IGNvbHVtbiB3aWR0aDsgY29tZXMgZnJvbSB0aGUgZGVzaWduCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJvdXRjb21lIiksICAgICAgICAgICAgICAgIyBhZGRzIG9yZGVyaW5nIGJ5IHRoZSBmaWVsZCB2YWx1ZTsgZGVmYXVsdCBhc2NlbmRpbmcgdW5sZXNzIGNsaWNrZWQgZnJvbSBhc2NlbmRpbmcgaW50byBkZXNjZW5kaW5nCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJvdXRjb21lIiksCisgICAgICAgICAgICAgICAgICAgICAgIyBmaWx0ZXIgZmllbGQgd2lsbCBzZXQgYSBmaWx0ZXIgb24gdGhhdCBjb2x1bW4gd2l0aCB0aGUgc3BlY3MgaW4gdGhlIGZpbHRlciBkZXNjcmlwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICMgdGhlIGNsYXNzIGZpZWxkIGluIHRoZSBmaWx0ZXIgaGFzIG5vIHJlbGF0aW9uIHdpdGggY2xjbGFzczsgdGhlIGNvbnRyb2wgZGlmZmVyZW50IGFzcGVjdHMgb2YgdGhlIFVJCisgICAgICAgICAgICAgICAgICAgICAgIyBzdGlsbCwgaXQgaXMgcmVjb21tZW5kZWQgZm9yIHRoZSB2YWx1ZXMgdG8gYmUgaWRlbnRpY2FsIGZvciBlYXN5IHRyYWNraW5nIGluIHRoZSBnZW5lcmF0ZWQgSFRNTAorICAgICAgICAgICAgICAgICAgICAgJ2ZpbHRlcicgOiB7J2NsYXNzJyA6ICdvdXRjb21lJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYWJlbCc6ICdTaG93OicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3B0aW9ucycgOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ1N1Y2Nlc3NmdWwgYnVpbGRzJywgJ291dGNvbWU6JyArIHN0cihCdWlsZC5TVUNDRUVERUQpLCBxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIob3V0Y29tZT1zdHIoQnVpbGQuU1VDQ0VFREVEKSkuY291bnQoKSksICAjIHRoaXMgaXMgdGhlIGZpZWxkIHNlYXJjaCBleHByZXNzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0ZhaWxlZCBidWlsZHMnLCAnb3V0Y29tZTonKyBzdHIoQnVpbGQuRkFJTEVEKSwgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKG91dGNvbWU9c3RyKEJ1aWxkLkZBSUxFRCkpLmNvdW50KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdSZWNpcGUnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRlZmF1bHQgY29sdW1uLCBkaXNhYmxlZCBib3gsIHdpdGgganVzdCB0aGUgbmFtZSBpbiB0aGUgbGlzdAorICAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIldoYXQgeW91IGJ1aWx0IChpLmUuIG9uZSBvciBtb3JlIHJlY2lwZXMgb3IgaW1hZ2UgcmVjaXBlcykiLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAidGFyZ2V0X190YXJnZXQiKSwKKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInRhcmdldF9fdGFyZ2V0IiksCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdNYWNoaW5lJywKKyAgICAgICAgICAgICAgICAgICAgICdxaGVscCc6ICJUaGUgbWFjaGluZSBpcyB0aGUgaGFyZHdhcmUgZm9yIHdoaWNoIHlvdSBhcmUgYnVpbGRpbmcgYSByZWNpcGUgb3IgaW1hZ2UgcmVjaXBlIiwKKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgIm1hY2hpbmUiKSwKKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgIm1hY2hpbmUiKSwKKyAgICAgICAgICAgICAgICAgICAgICdkY2xhc3MnOiAnc3BhbjMnCisgICAgICAgICAgICAgICAgICAgIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhIHNsaWdodGx5IHdpZGVyIGNvbHVtbgorICAgICAgICAgICAgICAgICAgICB7J25hbWUnOiAnU3RhcnRlZCBvbicsICdjbGNsYXNzJzogJ3N0YXJ0ZWRfb24nLCAnaGlkZGVuJyA6IDEsICAgICAgIyB0aGlzIGlzIGFuIHVuY2hlY2tlZCBib3gsIHdoaWNoIGhpZGVzIHRoZSBjb2x1bW4KKyAgICAgICAgICAgICAgICAgICAgICdxaGVscCc6ICJUaGUgZGF0ZSBhbmQgdGltZSB5b3Ugc3RhcnRlZCB0aGUgYnVpbGQiLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAic3RhcnRlZF9vbiIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAic3RhcnRlZF9vbiIpLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICJzdGFydGVkX29uIiwKKyAgICAgICAgICAgICAgICAgICAgICdmaWx0ZXInIDogeydjbGFzcycgOiAnc3RhcnRlZF9vbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGFiZWwnOiAnU2hvdzonLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnIDogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJUb2RheSdzIGJ1aWxkcyIgLCAnc3RhcnRlZF9vbl9fZ3RlOicrdG9kYXlfYmVnaW4uc3RyZnRpbWUoIiVZLSVtLSVkIiksIHF1ZXJ5c2V0X2FsbC5maWx0ZXIoc3RhcnRlZF9vbl9fZ3RlPXRvZGF5X2JlZ2luKS5jb3VudCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiWWVzdGVyZGF5J3MgYnVpbGRzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RhcnRlZF9vbl9fZ3RlIXN0YXJ0ZWRfb25fX2x0OicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3llc3RlcmRheV9iZWdpbi5zdHJmdGltZSgiJVktJW0tJWQiKSsnIScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3RvZGF5X2JlZ2luLnN0cmZ0aW1lKCIlWS0lbS0lZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5c2V0X2FsbC5maWx0ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWRfb25fX2d0ZT15ZXN0ZXJkYXlfYmVnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWRfb25fX2x0PXRvZGF5X2JlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuY291bnQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIkJ1aWxkIGRhdGUgcmFuZ2UiLCAnZGF0ZXJhbmdlJywgMSwgJycsICdzdGFydGVkX29uJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdDb21wbGV0ZWQgb24nLAorICAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIlRoZSBkYXRlIGFuZCB0aW1lIHRoZSBidWlsZCBmaW5pc2hlZCIsCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJjb21wbGV0ZWRfb24iLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgImNvbXBsZXRlZF9vbiIpLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICdjb21wbGV0ZWRfb24nLAorICAgICAgICAgICAgICAgICAgICAgJ2ZpbHRlcicgOiB7J2NsYXNzJyA6ICdjb21wbGV0ZWRfb24nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xhYmVsJzogJ1Nob3c6JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcHRpb25zJyA6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiVG9kYXkncyBidWlsZHMiICwgJ2NvbXBsZXRlZF9vbl9fZ3RlOicrdG9kYXlfYmVnaW4uc3RyZnRpbWUoIiVZLSVtLSVkIiksIHF1ZXJ5c2V0X2FsbC5maWx0ZXIoY29tcGxldGVkX29uX19ndGU9dG9kYXlfYmVnaW4pLmNvdW50KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJZZXN0ZXJkYXkncyBidWlsZHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wbGV0ZWRfb25fX2d0ZSFjb21wbGV0ZWRfb25fX2x0OicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3llc3RlcmRheV9iZWdpbi5zdHJmdGltZSgiJVktJW0tJWQiKSsnIScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3RvZGF5X2JlZ2luLnN0cmZ0aW1lKCIlWS0lbS0lZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5c2V0X2FsbC5maWx0ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZF9vbl9fZ3RlPXllc3RlcmRheV9iZWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkX29uX19sdD10b2RheV9iZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLmNvdW50KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJCdWlsZCBkYXRlIHJhbmdlIiwgJ2RhdGVyYW5nZScsIDEsICcnLCAnY29tcGxldGVkX29uJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ0ZhaWxlZCB0YXNrcycsICdjbGNsYXNzJzogJ2ZhaWxlZF90YXNrcycsICAgICAgICAgICAgICAgICMgc3BlY2lmaW5nIGEgY2xjbGFzcyB3aWxsIGVuYWJsZSB0aGUgY2hlY2tib3gKKyAgICAgICAgICAgICAgICAgICAgICdxaGVscCc6ICJIb3cgbWFueSB0YXNrcyBmYWlsZWQgZHVyaW5nIHRoZSBidWlsZCIsCisgICAgICAgICAgICAgICAgICAgICAnZmlsdGVyJyA6IHsnY2xhc3MnIDogJ2ZhaWxlZF90YXNrcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGFiZWwnOiAnU2hvdzonLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnIDogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdCdWlsZHMgd2l0aCBmYWlsZWQgdGFza3MnLCAndGFza19idWlsZF9fb3V0Y29tZTo0JywgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHRhc2tfYnVpbGRfX291dGNvbWU9NCkuY291bnQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0J1aWxkcyB3aXRob3V0IGZhaWxlZCB0YXNrcycsICd0YXNrX2J1aWxkX19vdXRjb21lOk5PVDQnLCBxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIoflEodGFza19idWlsZF9fb3V0Y29tZT00KSkuY291bnQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ0Vycm9ycycsICdjbGNsYXNzJzogJ2Vycm9yc19ubycsCisgICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiSG93IG1hbnkgZXJyb3JzIHdlcmUgZW5jb3VudGVyZWQgZHVyaW5nIHRoZSBidWlsZCAoaWYgYW55KSIsCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJlcnJvcnNfbm8iLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgImVycm9yc19ubyIpLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICdlcnJvcnNfbm8nLAorICAgICAgICAgICAgICAgICAgICAgJ2ZpbHRlcicgOiB7J2NsYXNzJyA6ICdlcnJvcnNfbm8nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xhYmVsJzogJ1Nob3c6JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcHRpb25zJyA6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnQnVpbGRzIHdpdGggZXJyb3JzJywgJ2Vycm9yc19ub19fZ3RlOjEnLCBxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIoZXJyb3JzX25vX19ndGU9MSkuY291bnQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0J1aWxkcyB3aXRob3V0IGVycm9ycycsICdlcnJvcnNfbm86MCcsIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcihlcnJvcnNfbm89MCkuY291bnQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ1dhcm5pbmdzJywgJ2NsY2xhc3MnOiAnd2FybmluZ3Nfbm8nLAorICAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIkhvdyBtYW55IHdhcm5pbmdzIHdlcmUgZW5jb3VudGVyZWQgZHVyaW5nIHRoZSBidWlsZCAoaWYgYW55KSIsCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJ3YXJuaW5nc19ubyIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAid2FybmluZ3Nfbm8iKSwKKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmtleScgOiAnd2FybmluZ3Nfbm8nLAorICAgICAgICAgICAgICAgICAgICAgJ2ZpbHRlcicgOiB7J2NsYXNzJyA6ICd3YXJuaW5nc19ubycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGFiZWwnOiAnU2hvdzonLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnIDogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdCdWlsZHMgd2l0aCB3YXJuaW5ncycsJ3dhcm5pbmdzX25vX19ndGU6MScsIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcih3YXJuaW5nc19ub19fZ3RlPTEpLmNvdW50KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdCdWlsZHMgd2l0aG91dCB3YXJuaW5ncycsJ3dhcm5pbmdzX25vOjAnLCBxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIod2FybmluZ3Nfbm89MCkuY291bnQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ1RpbWUnLCAnY2xjbGFzcyc6ICd0aW1lJywgJ2hpZGRlbicgOiAxLAorICAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIkhvdyBsb25nIGl0IHRvb2sgdGhlIGJ1aWxkIHRvIGZpbmlzaCIsCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJ0aW1lc3BlbnQiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInRpbWVzcGVudCIpLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICd0aW1lc3BlbnQnLAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7J25hbWUnOiAnSW1hZ2UgZmlsZXMnLCAnY2xjbGFzcyc6ICdvdXRwdXQnLAorICAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIlRoZSByb290IGZpbGUgc3lzdGVtIHR5cGVzIHByb2R1Y2VkIGJ5IHRoZSBidWlsZC4gWW91IGNhbiBmaW5kIHRoZW0gaW4geW91ciA8Y29kZT4vYnVpbGQvdG1wL2RlcGxveS9pbWFnZXMvPC9jb2RlPiBkaXJlY3RvcnkiLAorICAgICAgICAgICAgICAgICAgICAgICAgIyBUT0RPOiBjb21wdXRlIGltYWdlIGZzdHlwZXMgZnJvbSBUYXJnZXRfSW1hZ2VfRmlsZQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgIyBtZXJnZSBkYXRlcmFuZ2UgdmFsdWVzCisgICAgICAgIGNvbnRleHQudXBkYXRlKGNvbnRleHRfZGF0ZSkKKyAgICAgICAgcmV0dXJuIGNvbnRleHQsIHBhZ2VzaXplLCBvcmRlcmJ5CisKKworCisgICAgIyBuZXcgcHJvamVjdAorICAgIGRlZiBuZXdwcm9qZWN0KHJlcXVlc3QpOgorICAgICAgICB0ZW1wbGF0ZSA9ICJuZXdwcm9qZWN0Lmh0bWwiCisgICAgICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAnZW1haWwnOiByZXF1ZXN0LnVzZXIuZW1haWwgaWYgcmVxdWVzdC51c2VyLmlzX2F1dGhlbnRpY2F0ZWQoKSBlbHNlICcnLAorICAgICAgICAgICAgJ3VzZXJuYW1lJzogcmVxdWVzdC51c2VyLnVzZXJuYW1lIGlmIHJlcXVlc3QudXNlci5pc19hdXRoZW50aWNhdGVkKCkgZWxzZSAnJywKKyAgICAgICAgICAgICdyZWxlYXNlcyc6IFJlbGVhc2Uub2JqZWN0cy5vcmRlcl9ieSgiZGVzY3JpcHRpb24iKSwKKyAgICAgICAgfQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbnRleHRbJ2RlZmF1bHRicmFuY2gnXSA9IFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuZ2V0KG5hbWUgPSAiREVGQVVMVF9SRUxFQVNFIikudmFsdWUKKyAgICAgICAgZXhjZXB0IFRvYXN0ZXJTZXR0aW5nLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBpZiByZXF1ZXN0Lm1ldGhvZCA9PSAiR0VUIjoKKyAgICAgICAgICAgICMgcmVuZGVyIG5ldyBwcm9qZWN0IHBhZ2UKKyAgICAgICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisgICAgICAgIGVsaWYgcmVxdWVzdC5tZXRob2QgPT0gIlBPU1QiOgorICAgICAgICAgICAgbWFuZGF0b3J5X2ZpZWxkcyA9IFsncHJvamVjdG5hbWUnLCAncHR5cGUnXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHB0eXBlID0gcmVxdWVzdC5QT1NULmdldCgncHR5cGUnKQorICAgICAgICAgICAgICAgIGlmIHB0eXBlID09ICJidWlsZCI6CisgICAgICAgICAgICAgICAgICAgIG1hbmRhdG9yeV9maWVsZHMuYXBwZW5kKCdwcm9qZWN0dmVyc2lvbicpCisgICAgICAgICAgICAgICAgIyBtYWtlIHN1cmUgd2UgaGF2ZSB2YWx1ZXMgZm9yIGFsbCBtYW5kYXRvcnlfZmllbGRzCisgICAgICAgICAgICAgICAgaWYgcmVkdWNlKCBsYW1iZGEgeCwgeTogeCBvciB5LCBtYXAobGFtYmRhIHg6IGxlbihyZXF1ZXN0LlBPU1QuZ2V0KHgsICcnKSkgPT0gMCwgbWFuZGF0b3J5X2ZpZWxkcykpOgorICAgICAgICAgICAgICAgICMgc2V0IGFsZXJ0IGZvciBtaXNzaW5nIGZpZWxkcworICAgICAgICAgICAgICAgICAgICByYWlzZSBCYWRQYXJhbWV0ZXJFeGNlcHRpb24oIkZpZWxkcyBtaXNzaW5nOiAiICsKKyAgICAgICAgICAgICIsICIuam9pbihbeCBmb3IgeCBpbiBtYW5kYXRvcnlfZmllbGRzIGlmIGxlbihyZXF1ZXN0LlBPU1QuZ2V0KHgsICcnKSkgPT0gMCBdKSkKKworICAgICAgICAgICAgICAgIGlmIG5vdCByZXF1ZXN0LnVzZXIuaXNfYXV0aGVudGljYXRlZCgpOgorICAgICAgICAgICAgICAgICAgICB1c2VyID0gYXV0aGVudGljYXRlKHVzZXJuYW1lID0gcmVxdWVzdC5QT1NULmdldCgndXNlcm5hbWUnLCAnX2Fub251c2VyJyksIHBhc3N3b3JkID0gJ25vcGFzcycpCisgICAgICAgICAgICAgICAgICAgIGlmIHVzZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIgPSBVc2VyLm9iamVjdHMuY3JlYXRlX3VzZXIodXNlcm5hbWUgPSByZXF1ZXN0LlBPU1QuZ2V0KCd1c2VybmFtZScsICdfYW5vbnVzZXInKSwgZW1haWwgPSByZXF1ZXN0LlBPU1QuZ2V0KCdlbWFpbCcsICcnKSwgcGFzc3dvcmQgPSAibm9wYXNzIikKKworICAgICAgICAgICAgICAgICAgICAgICAgdXNlciA9IGF1dGhlbnRpY2F0ZSh1c2VybmFtZSA9IHVzZXIudXNlcm5hbWUsIHBhc3N3b3JkID0gJ25vcGFzcycpCisgICAgICAgICAgICAgICAgICAgIGxvZ2luKHJlcXVlc3QsIHVzZXIpCisKKyAgICAgICAgICAgICAgICAjICBzYXZlIHRoZSBwcm9qZWN0CisgICAgICAgICAgICAgICAgaWYgcHR5cGUgPT0gImFuYWx5c2lzIjoKKyAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZWxlYXNlID0gUmVsZWFzZS5vYmplY3RzLmdldChwayA9IHJlcXVlc3QuUE9TVC5nZXQoJ3Byb2plY3R2ZXJzaW9uJywgTm9uZSApKQorCisgICAgICAgICAgICAgICAgcHJqID0gUHJvamVjdC5vYmplY3RzLmNyZWF0ZV9wcm9qZWN0KG5hbWUgPSByZXF1ZXN0LlBPU1RbJ3Byb2plY3RuYW1lJ10sIHJlbGVhc2UgPSByZWxlYXNlKQorICAgICAgICAgICAgICAgIHByai51c2VyX2lkID0gcmVxdWVzdC51c2VyLnBrCisgICAgICAgICAgICAgICAgcHJqLnNhdmUoKQorICAgICAgICAgICAgICAgIHJldHVybiByZWRpcmVjdChyZXZlcnNlKHByb2plY3QsIGFyZ3M9KHByai5waywpKSArICI/bm90aWZ5PW5ldy1wcm9qZWN0IikKKworICAgICAgICAgICAgZXhjZXB0IChJbnRlZ3JpdHlFcnJvciwgQmFkUGFyYW1ldGVyRXhjZXB0aW9uKSBhcyBlOgorICAgICAgICAgICAgICAgICMgZmlsbCBpbiBwYWdlIHdpdGggcHJldmlvdXNseSBzdWJtaXR0ZWQgdmFsdWVzCisgICAgICAgICAgICAgICAgbWFwKGxhbWJkYSB4OiBjb250ZXh0Ll9fc2V0aXRlbV9fKHgsIHJlcXVlc3QuUE9TVC5nZXQoeCwgIi0tIG1pc3NpbmciKSksIG1hbmRhdG9yeV9maWVsZHMpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlLCBJbnRlZ3JpdHlFcnJvcikgYW5kICJ1c2VybmFtZSIgaW4gc3RyKGUpOgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0WydhbGVydCddID0gIllvdXIgY2hvc2VuIHVzZXJuYW1lIGlzIGFscmVhZHkgdXNlZCIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0WydhbGVydCddID0gc3RyKGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKworICAgICAgICByYWlzZSBFeGNlcHRpb24oIkludmFsaWQgSFRUUCBtZXRob2QgZm9yIHRoaXMgcGFnZSIpCisKKworCisgICAgIyBTaG93cyB0aGUgZWRpdCBwcm9qZWN0IHBhZ2UKKyAgICBAX3RlbXBsYXRlX3JlbmRlcmVyKCdwcm9qZWN0Lmh0bWwnKQorICAgIGRlZiBwcm9qZWN0KHJlcXVlc3QsIHBpZCk6CisgICAgICAgIHByaiA9IFByb2plY3Qub2JqZWN0cy5nZXQoaWQgPSBwaWQpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHVzZXIgPSBVc2VyLm9iamVjdHMuZ2V0KGlkID0gcHJqLnVzZXJfaWQpCisgICAgICAgIGV4Y2VwdCBVc2VyLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgIHB1c2VyID0gTm9uZQorCisgICAgICAgICMgZXhlY3V0ZSBQT1NUIHJlcXVlc3RzCisgICAgICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICJQT1NUIjoKKyAgICAgICAgICAgICMgYWRkIGxheWVycworICAgICAgICAgICAgaWYgJ2xheWVyQWRkJyBpbiByZXF1ZXN0LlBPU1QgYW5kIGxlbihyZXF1ZXN0LlBPU1RbJ2xheWVyQWRkJ10pID4gMDoKKyAgICAgICAgICAgICAgICBmb3IgbGMgaW4gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmZpbHRlcihwa19faW49W2kgZm9yIGkgaW4gcmVxdWVzdC5QT1NUWydsYXllckFkZCddLnNwbGl0KCIsIikgaWYgbGVuKGkpID4gMF0pOgorICAgICAgICAgICAgICAgICAgICBQcm9qZWN0TGF5ZXIub2JqZWN0cy5nZXRfb3JfY3JlYXRlKHByb2plY3QgPSBwcmosIGxheWVyY29tbWl0ID0gbGMpCisKKyAgICAgICAgICAgICMgcmVtb3ZlIGxheWVycworICAgICAgICAgICAgaWYgJ2xheWVyRGVsJyBpbiByZXF1ZXN0LlBPU1QgYW5kIGxlbihyZXF1ZXN0LlBPU1RbJ2xheWVyRGVsJ10pID4gMDoKKyAgICAgICAgICAgICAgICBmb3IgdCBpbiByZXF1ZXN0LlBPU1RbJ2xheWVyRGVsJ10uc3RyaXAoKS5zcGxpdCgiICIpOgorICAgICAgICAgICAgICAgICAgICBwdCA9IFByb2plY3RMYXllci5vYmplY3RzLmZpbHRlcihwcm9qZWN0ID0gcHJqLCBsYXllcmNvbW1pdF9pZCA9IGludCh0KSkuZGVsZXRlKCkKKworICAgICAgICAgICAgaWYgJ3Byb2plY3ROYW1lJyBpbiByZXF1ZXN0LlBPU1Q6CisgICAgICAgICAgICAgICAgcHJqLm5hbWUgPSByZXF1ZXN0LlBPU1RbJ3Byb2plY3ROYW1lJ10KKyAgICAgICAgICAgICAgICBwcmouc2F2ZSgpOworCisgICAgICAgICAgICBpZiAncHJvamVjdFZlcnNpb24nIGluIHJlcXVlc3QuUE9TVDoKKyAgICAgICAgICAgICAgICAjIElmIHRoZSByZWxlYXNlIGlzIHRoZSBjdXJyZW50IHByb2plY3QgdGhlbiByZXR1cm4gbm93CisgICAgICAgICAgICAgICAgaWYgcHJqLnJlbGVhc2UucGsgPT0gaW50KHJlcXVlc3QuUE9TVC5nZXQoJ3Byb2plY3RWZXJzaW9uJywtMSkpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4ge30KKworICAgICAgICAgICAgICAgIHByai5yZWxlYXNlID0gUmVsZWFzZS5vYmplY3RzLmdldChwayA9IHJlcXVlc3QuUE9TVFsncHJvamVjdFZlcnNpb24nXSkKKyAgICAgICAgICAgICAgICAjIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBiaXRiYWtlIHZlcnNpb24KKyAgICAgICAgICAgICAgICBwcmouYml0YmFrZV92ZXJzaW9uID0gcHJqLnJlbGVhc2UuYml0YmFrZV92ZXJzaW9uCisgICAgICAgICAgICAgICAgcHJqLnNhdmUoKQorICAgICAgICAgICAgICAgICMgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIGxheWVycworICAgICAgICAgICAgICAgIGZvciBpIGluIHByai5wcm9qZWN0bGF5ZXJfc2V0LmFsbCgpOgorICAgICAgICAgICAgICAgICAgICAjIGZpbmQgYW5kIGFkZCBhIHNpbWlsYXJseS1uYW1lZCBsYXllciBvbiB0aGUgbmV3IGJyYW5jaAorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBsdiA9IHByai5jb21wYXRpYmxlX2xheWVydmVyc2lvbnMobGF5ZXJfbmFtZSA9IGkubGF5ZXJjb21taXQubGF5ZXIubmFtZSlbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIFByb2plY3RMYXllci5vYmplY3RzLmdldF9vcl9jcmVhdGUocHJvamVjdCA9IHByaiwgbGF5ZXJjb21taXQgPSBsdikKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGdldCByaWQgb2YgdGhlIG9sZCBlbnRyeQorICAgICAgICAgICAgICAgICAgICAgICAgaS5kZWxldGUoKQorCisgICAgICAgICAgICBpZiAnbWFjaGluZU5hbWUnIGluIHJlcXVlc3QuUE9TVDoKKyAgICAgICAgICAgICAgICBtYWNoaW5ldmFyID0gcHJqLnByb2plY3R2YXJpYWJsZV9zZXQuZ2V0KG5hbWU9Ik1BQ0hJTkUiKQorICAgICAgICAgICAgICAgIG1hY2hpbmV2YXIudmFsdWU9cmVxdWVzdC5QT1NUWydtYWNoaW5lTmFtZSddCisgICAgICAgICAgICAgICAgbWFjaGluZXZhci5zYXZlKCkKKworCisgICAgICAgICMgd2UgdXNlIGltcGxpY2l0IGtub3dsZWRnZSBvZiB0aGUgY3VycmVudCB1c2VyJ3MgcHJvamVjdCB0byBmaWx0ZXIgbGF5ZXIgaW5mb3JtYXRpb24sIGUuZy4KKyAgICAgICAgcGlkID0gcHJqLmlkCisKKyAgICAgICAgZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlcgorICAgICAgICBmcmVxdGFyZ2V0cyA9IFtdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyZXF0YXJnZXRzICs9IG1hcChsYW1iZGEgeDogeC50YXJnZXQsIHJlZHVjZShsYW1iZGEgeCwgeTogeCArIHksICAgbWFwKGxhbWJkYSB4OiBsaXN0KHgudGFyZ2V0X3NldC5hbGwoKSksIEJ1aWxkLm9iamVjdHMuZmlsdGVyKHByb2plY3QgPSBwcmosIG91dGNvbWVfX2x0ID0gQnVpbGQuSU5fUFJPR1JFU1MpKSkpCisgICAgICAgICAgICBmcmVxdGFyZ2V0cyArPSBtYXAobGFtYmRhIHg6IHgudGFyZ2V0LCByZWR1Y2UobGFtYmRhIHgsIHk6IHggKyB5LCAgIG1hcChsYW1iZGEgeDogbGlzdCh4LmJydGFyZ2V0X3NldC5hbGwoKSksIEJ1aWxkUmVxdWVzdC5vYmplY3RzLmZpbHRlcihwcm9qZWN0ID0gcHJqLCBzdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfRkFJTEVEKSkpKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmcmVxdGFyZ2V0cyA9IENvdW50ZXIoZnJlcXRhcmdldHMpCisgICAgICAgIGZyZXF0YXJnZXRzID0gc29ydGVkKGZyZXF0YXJnZXRzLCBrZXkgPSBsYW1iZGEgeDogZnJlcXRhcmdldHNbeF0sIHJldmVyc2U9VHJ1ZSkKKworICAgICAgICBjb250ZXh0ID0geworICAgICAgICAgICAgInByb2plY3QiIDogcHJqLAorICAgICAgICAgICAgImx2c19ub3MiIDogTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmFsbCgpLmNvdW50KCksCisgICAgICAgICAgICAiY29tcGxldGVkYnVpbGRzIjogQnVpbGQub2JqZWN0cy5maWx0ZXIocHJvamVjdF9pZCA9IHBpZCkuZmlsdGVyKG91dGNvbWVfX2x0ZSA9IEJ1aWxkLklOX1BST0dSRVNTKSwKKyAgICAgICAgICAgICJwcmoiIDogeyJuYW1lIjogcHJqLm5hbWUsIH0sCisgICAgICAgICAgICAiYnVpbGRyZXF1ZXN0cyIgOiBwcmouYnVpbGRfc2V0LmZpbHRlcihvdXRjb21lPUJ1aWxkLklOX1BST0dSRVNTKSwKKyAgICAgICAgICAgICJidWlsZHMiIDogX3Byb2plY3RfcmVjZW50X2J1aWxkX2xpc3QocHJqKSwKKyAgICAgICAgICAgICJsYXllcnMiIDogIG1hcChsYW1iZGEgeDogeworICAgICAgICAgICAgICAgICAgICAgICAgImlkIjogeC5sYXllcmNvbW1pdC5waywKKyAgICAgICAgICAgICAgICAgICAgICAgICJvcmRlcmlkIjogeC5waywKKyAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6IHgubGF5ZXJjb21taXQubGF5ZXIubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ2Y3NfdXJsIjogeC5sYXllcmNvbW1pdC5sYXllci52Y3NfdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgInZjc19yZWZlcmVuY2UiIDogeC5sYXllcmNvbW1pdC5nZXRfdmNzX3JlZmVyZW5jZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgInVybCI6IHgubGF5ZXJjb21taXQubGF5ZXIubGF5ZXJfaW5kZXhfdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgImxheWVyZGV0YWlsdXJsIjogeC5sYXllcmNvbW1pdC5nZXRfZGV0YWlsc3BhZ2VfdXJsKHByai5wayksCisgICAgICAgICAgICAgICAgIyBUaGlzIGJyYW5jaCBuYW1lIGlzIGFjdHVhbGx5IHRoZSByZWxlYXNlCisgICAgICAgICAgICAgICAgICAgICAgICAiYnJhbmNoIiA6IHsgIm5hbWUiIDogeC5sYXllcmNvbW1pdC5nZXRfdmNzX3JlZmVyZW5jZSgpLCAibGF5ZXJzb3VyY2UiIDogeC5sYXllcmNvbW1pdC51cF9icmFuY2gubGF5ZXJfc291cmNlLm5hbWUgaWYgeC5sYXllcmNvbW1pdC51cF9icmFuY2ggIT0gTm9uZSBlbHNlIE5vbmV9fSwKKyAgICAgICAgICAgICAgICAgICAgcHJqLnByb2plY3RsYXllcl9zZXQuYWxsKCkub3JkZXJfYnkoImlkIikpLAorICAgICAgICAgICAgInRhcmdldHMiIDogbWFwKGxhbWJkYSB4OiB7InRhcmdldCIgOiB4LnRhcmdldCwgInRhc2siIDogeC50YXNrLCAicGsiOiB4LnBrfSwgcHJqLnByb2plY3R0YXJnZXRfc2V0LmFsbCgpKSwKKyAgICAgICAgICAgICJ2YXJpYWJsZXMiOiBtYXAobGFtYmRhIHg6ICh4Lm5hbWUsIHgudmFsdWUpLCBwcmoucHJvamVjdHZhcmlhYmxlX3NldC5hbGwoKSksCisgICAgICAgICAgICAiZnJlcXRhcmdldHMiOiBmcmVxdGFyZ2V0c1s6NV0sCisgICAgICAgICAgICAicmVsZWFzZXMiOiBtYXAobGFtYmRhIHg6IHsiaWQiOiB4LnBrLCAibmFtZSI6IHgubmFtZSwgImRlc2NyaXB0aW9uIjp4LmRlc2NyaXB0aW9ufSwgUmVsZWFzZS5vYmplY3RzLmFsbCgpKSwKKyAgICAgICAgICAgICJwcm9qZWN0X2h0bWwiOiAxLAorICAgICAgICAgICAgInJlY2lwZXNUeXBlQWhlYWRVcmwiOiByZXZlcnNlKCd4aHJfcmVjaXBlc3R5cGVhaGVhZCcsIGFyZ3M9KHByai5waywpKSwKKyAgICAgICAgICAgICJwcm9qZWN0QnVpbGRzVXJsIjogcmV2ZXJzZSgncHJvamVjdGJ1aWxkcycsIGFyZ3M9KHByai5waywpKSwKKyAgICAgICAgfQorCisgICAgICAgIGlmIHByai5yZWxlYXNlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY29udGV4dFsncmVsZWFzZSddID0geyAiaWQiOiBwcmoucmVsZWFzZS5waywgIm5hbWUiOiBwcmoucmVsZWFzZS5uYW1lLCAiZGVzY3JpcHRpb24iOiBwcmoucmVsZWFzZS5kZXNjcmlwdGlvbn0KKworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbnRleHRbIm1hY2hpbmUiXSA9IHsibmFtZSI6IHByai5wcm9qZWN0dmFyaWFibGVfc2V0LmdldChuYW1lPSJNQUNISU5FIikudmFsdWV9CisgICAgICAgIGV4Y2VwdCBQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgY29udGV4dFsibWFjaGluZSJdID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb250ZXh0WyJkaXN0cm8iXSA9IHByai5wcm9qZWN0dmFyaWFibGVfc2V0LmdldChuYW1lPSJESVNUUk8iKS52YWx1ZQorICAgICAgICBleGNlcHQgUHJvamVjdFZhcmlhYmxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgIGNvbnRleHRbImRpc3RybyJdID0gIi0tIG5vdCBzZXQgeWV0IgorCisgICAgICAgIHJldHVybiBjb250ZXh0CisKKyAgICBkZWYganN1bml0dGVzdHMocmVxdWVzdCk6CisgICAgICAiIiIgUHJvdmlkZXMgYSBwYWdlIGZvciB0aGUganMgdW5pdCB0ZXN0cyAiIiIKKyAgICAgIGJidiA9IEJpdGJha2VWZXJzaW9uLm9iamVjdHMuZmlsdGVyKGJyYW5jaD0ibWFzdGVyIikuZmlyc3QoKQorICAgICAgcmVsZWFzZSA9IFJlbGVhc2Uub2JqZWN0cy5maWx0ZXIoYml0YmFrZV92ZXJzaW9uPWJidikuZmlyc3QoKQorCisgICAgICBuYW1lID0gIl9qc191bml0X3Rlc3RfcHJqXyIKKworICAgICAgIyBJZiB0aGVyZSBpcyBhbiBleGlzdGluZyBwcm9qZWN0IGJ5IHRoaXMgbmFtZSBkZWxldGUgaXQuIFdlIGRvbid0IHdhbnQKKyAgICAgICMgTG90cyBvZiBkdXBsaWNhdGVzIGNsdXR0ZXJpbmcgdXAgdGhlIHByb2plY3RzLgorICAgICAgUHJvamVjdC5vYmplY3RzLmZpbHRlcihuYW1lPW5hbWUpLmRlbGV0ZSgpCisKKyAgICAgIG5ld19wcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmNyZWF0ZV9wcm9qZWN0KG5hbWU9bmFtZSwgcmVsZWFzZT1yZWxlYXNlKQorCisgICAgICBjb250ZXh0ID0geyAncHJvamVjdCcgOiBuZXdfcHJvamVjdCB9CisgICAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICJqcy11bml0LXRlc3RzLmh0bWwiLCBjb250ZXh0KQorCisgICAgZnJvbSBkamFuZ28udmlld3MuZGVjb3JhdG9ycy5jc3JmIGltcG9ydCBjc3JmX2V4ZW1wdAorICAgIEBjc3JmX2V4ZW1wdAorICAgIGRlZiB4aHJfdGVzdHJlbGVhc2VjaGFuZ2UocmVxdWVzdCwgcGlkKToKKyAgICAgICAgZGVmIHJlc3BvbnNlKGRhdGEpOgorICAgICAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShqc29uZmlsdGVyKGRhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X3R5cGU9ImFwcGxpY2F0aW9uL2pzb24iKQorCisgICAgICAgICIiIiByZXR1cm5zIGxheWVyIHZlcnNpb25zIHRoYXQgd291bGQgYmUgZGVsZXRlZCBvbiB0aGUgbmV3CisgICAgICAgIHJlbGVhc2VfX3BrICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcmogPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrID0gcGlkKQorICAgICAgICAgICAgbmV3X3JlbGVhc2VfaWQgPSByZXF1ZXN0LkdFVFsnbmV3X3JlbGVhc2VfaWQnXQorCisgICAgICAgICAgICAjIElmIHdlJ3JlIGFscmVhZHkgb24gdGhpcyBwcm9qZWN0IGRvIG5vdGhpbmcKKyAgICAgICAgICAgIGlmIHByai5yZWxlYXNlLnBrID09IGludChuZXdfcmVsZWFzZV9pZCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlcG9uc2UoeyJlcnJvciI6ICJvayIsICJyb3dzIjogW119KQorCisgICAgICAgICAgICByZXR2YWwgPSBbXQorCisgICAgICAgICAgICBmb3IgaSBpbiBwcmoucHJvamVjdGxheWVyX3NldC5hbGwoKToKKyAgICAgICAgICAgICAgICBsdiA9IHByai5jb21wYXRpYmxlX2xheWVydmVyc2lvbnMocmVsZWFzZSA9IFJlbGVhc2Uub2JqZWN0cy5nZXQocGs9bmV3X3JlbGVhc2VfaWQpKS5maWx0ZXIobGF5ZXJfX25hbWUgPSBpLmxheWVyY29tbWl0LmxheWVyLm5hbWUpCisgICAgICAgICAgICAgICAgIyB0aGVyZSBpcyBubyBsYXllcl92ZXJzaW9uIHdpdGggdGhlIG5ldyByZWxlYXNlIGlkLAorICAgICAgICAgICAgICAgICMgYW5kIHRoZSBzYW1lIG5hbWUKKyAgICAgICAgICAgICAgICBpZiBsdi5jb3VudCgpIDwgMToKKyAgICAgICAgICAgICAgICAgICAgcmV0dmFsLmFwcGVuZChpKQorCisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UoeyJlcnJvciI6Im9rIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJvd3MiIDogbWFwKCBfbHZfdG9fZGljdChwcmopLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKGxhbWJkYSB4OiB4LmxheWVyY29tbWl0LCByZXR2YWwgKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQorCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHJldHVybiByZXNwb25zZSh7ImVycm9yIjogc3RyKGUpIH0pCisKKyAgICBkZWYgeGhyX2NvbmZpZ3ZhcmVkaXQocmVxdWVzdCwgcGlkKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJqID0gUHJvamVjdC5vYmplY3RzLmdldChpZCA9IHBpZCkKKyAgICAgICAgICAgICMgYWRkIGNvbmYgdmFyaWFibGVzCisgICAgICAgICAgICBpZiAnY29uZmlndmFyQWRkJyBpbiByZXF1ZXN0LlBPU1Q6CisgICAgICAgICAgICAgICAgdD1yZXF1ZXN0LlBPU1RbJ2NvbmZpZ3ZhckFkZCddLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiAiOiIgaW4gdDoKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHZhbHVlID0gdC5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgPSB0CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gIiIKKworICAgICAgICAgICAgICAgIHB0LCBjcmVhdGVkID0gUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShwcm9qZWN0ID0gcHJqLCBuYW1lID0gdmFyaWFibGUsIHZhbHVlID0gdmFsdWUpCisgICAgICAgICAgICAjIGNoYW5nZSBjb25mIHZhcmlhYmxlcworICAgICAgICAgICAgaWYgJ2NvbmZpZ3ZhckNoYW5nZScgaW4gcmVxdWVzdC5QT1NUOgorICAgICAgICAgICAgICAgIHQ9cmVxdWVzdC5QT1NUWydjb25maWd2YXJDaGFuZ2UnXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgaWYgIjoiIGluIHQ6CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB2YWx1ZSA9IHQuc3BsaXQoIjoiKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlID0gdAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICIiCisKKyAgICAgICAgICAgICAgICBwdCwgY3JlYXRlZCA9IFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmdldF9vcl9jcmVhdGUocHJvamVjdCA9IHByaiwgbmFtZSA9IHZhcmlhYmxlKQorICAgICAgICAgICAgICAgIHB0LnZhbHVlPXZhbHVlCisgICAgICAgICAgICAgICAgcHQuc2F2ZSgpCisgICAgICAgICAgICAjIHJlbW92ZSBjb25mIHZhcmlhYmxlcworICAgICAgICAgICAgaWYgJ2NvbmZpZ3ZhckRlbCcgaW4gcmVxdWVzdC5QT1NUOgorICAgICAgICAgICAgICAgIHQ9cmVxdWVzdC5QT1NUWydjb25maWd2YXJEZWwnXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgcHQgPSBQcm9qZWN0VmFyaWFibGUub2JqZWN0cy5nZXQocGsgPSBpbnQodCkpLmRlbGV0ZSgpCisKKyAgICAgICAgICAgICMgcmV0dXJuIGFsbCBwcm9qZWN0IHNldHRpbmdzLCBmaWx0ZXIgb3V0IGJsYWNrbGlzdCBhbmQgZWxzZXdoZXJlLW1hbmFnZWQgdmFyaWFibGVzCisgICAgICAgICAgICB2YXJzX21hbmFnZWQsdmFyc19mc3R5cGVzLHZhcnNfYmxhY2tsaXN0ID0gZ2V0X3Byb2plY3RfY29uZmlndmFyc19jb250ZXh0KCkKKyAgICAgICAgICAgIGNvbmZpZ3ZhcnNfcXVlcnkgPSBQcm9qZWN0VmFyaWFibGUub2JqZWN0cy5maWx0ZXIocHJvamVjdF9pZCA9IHBpZCkuYWxsKCkKKyAgICAgICAgICAgIGZvciB2YXIgaW4gdmFyc19tYW5hZ2VkOgorICAgICAgICAgICAgICAgIGNvbmZpZ3ZhcnNfcXVlcnkgPSBjb25maWd2YXJzX3F1ZXJ5LmV4Y2x1ZGUobmFtZSA9IHZhcikKKyAgICAgICAgICAgIGZvciB2YXIgaW4gdmFyc19ibGFja2xpc3Q6CisgICAgICAgICAgICAgICAgY29uZmlndmFyc19xdWVyeSA9IGNvbmZpZ3ZhcnNfcXVlcnkuZXhjbHVkZShuYW1lID0gdmFyKQorCisgICAgICAgICAgICByZXR1cm5fZGF0YSA9IHsKKyAgICAgICAgICAgICAgICAiZXJyb3IiOiAib2siLAorICAgICAgICAgICAgICAgICdjb25maWd2YXJzJyAgIDogbWFwKGxhbWJkYSB4OiAoeC5uYW1lLCB4LnZhbHVlLCB4LnBrKSwgY29uZmlndmFyc19xdWVyeSksCisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuX2RhdGFbJ2Rpc3RybyddID0gUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuZ2V0KHByb2plY3QgPSBwcmosIG5hbWUgPSAiRElTVFJPIikudmFsdWUsCisgICAgICAgICAgICBleGNlcHQgUHJvamVjdFZhcmlhYmxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuX2RhdGFbJ2ZzdHlwZXMnXSA9IFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmdldChwcm9qZWN0ID0gcHJqLCBuYW1lID0gIklNQUdFX0ZTVFlQRVMiKS52YWx1ZSwKKyAgICAgICAgICAgIGV4Y2VwdCBQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm5fZGF0YVsnaW1hZ2VfaW5zdGFsbF9hcHBlbmQnXSA9IFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmdldChwcm9qZWN0ID0gcHJqLCBuYW1lID0gIklNQUdFX0lOU1RBTExfYXBwZW5kIikudmFsdWUsCisgICAgICAgICAgICBleGNlcHQgUHJvamVjdFZhcmlhYmxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuX2RhdGFbJ3BhY2thZ2VfY2xhc3NlcyddID0gUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuZ2V0KHByb2plY3QgPSBwcmosIG5hbWUgPSAiUEFDS0FHRV9DTEFTU0VTIikudmFsdWUsCisgICAgICAgICAgICBleGNlcHQgUHJvamVjdFZhcmlhYmxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuX2RhdGFbJ3Nka19tYWNoaW5lJ10gPSBQcm9qZWN0VmFyaWFibGUub2JqZWN0cy5nZXQocHJvamVjdCA9IHByaiwgbmFtZSA9ICJTREtNQUNISU5FIikudmFsdWUsCisgICAgICAgICAgICBleGNlcHQgUHJvamVjdFZhcmlhYmxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbi5kdW1wcyggcmV0dXJuX2RhdGEgKSwgY29udGVudF90eXBlID0gImFwcGxpY2F0aW9uL2pzb24iKQorCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbi5kdW1wcyh7ImVycm9yIjpzdHIoZSkgKyAiXG4iICsgdHJhY2ViYWNrLmZvcm1hdF9leGMoKX0pLCBjb250ZW50X3R5cGUgPSAiYXBwbGljYXRpb24vanNvbiIpCisKKworICAgIGRlZiB4aHJfaW1wb3J0bGF5ZXIocmVxdWVzdCk6CisgICAgICAgIGlmIChub3QgcmVxdWVzdC5QT1NULmhhc19rZXkoJ3Zjc191cmwnKSBvcgorICAgICAgICAgICAgbm90IHJlcXVlc3QuUE9TVC5oYXNfa2V5KCduYW1lJykgb3IKKyAgICAgICAgICAgIG5vdCByZXF1ZXN0LlBPU1QuaGFzX2tleSgnZ2l0X3JlZicpIG9yCisgICAgICAgICAgICBub3QgcmVxdWVzdC5QT1NULmhhc19rZXkoJ3Byb2plY3RfaWQnKSk6CisgICAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShqc29uZmlsdGVyKHsiZXJyb3IiOiAiTWlzc2luZyBwYXJhbWV0ZXJzOyByZXF1aXJlcyB2Y3NfdXJsLCBuYW1lLCBnaXRfcmVmIGFuZCBwcm9qZWN0X2lkIn0pLCBjb250ZW50X3R5cGUgPSAiYXBwbGljYXRpb24vanNvbiIpCisKKyAgICAgICAgbGF5ZXJzX2FkZGVkID0gW107CisKKyAgICAgICAgIyBSdWRpbWVudGFyeSBjaGVjayBmb3IgYW55IHBvc3NpYmxlIGh0bWwgdGFncworICAgICAgICBpZiAiPCIgaW4gcmVxdWVzdC5QT1NUOgorICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbmZpbHRlcih7ImVycm9yIjogIkludmFsaWQgY2hhcmFjdGVyIDwifSksIGNvbnRlbnRfdHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uIikKKworICAgICAgICBwcmogPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrPXJlcXVlc3QuUE9TVFsncHJvamVjdF9pZCddKQorCisgICAgICAgICMgU3RyaXAgdHJhaWxpbmcvbGVhZGluZyB3aGl0ZXNwYWNlIGZyb20gYWxsIHZhbHVlcworICAgICAgICAjIHB1dCBpbnRvIGEgbmV3IGRpY3QgYmVjYXVzZSBQT1NUIG9uZSBpcyBpbW11dGFibGUKKyAgICAgICAgcG9zdF9kYXRhID0gZGljdCgpCisgICAgICAgIGZvciBrZXksdmFsIGluIHJlcXVlc3QuUE9TVC5pdGVyaXRlbXMoKToKKyAgICAgICAgICBwb3N0X2RhdGFba2V5XSA9IHZhbC5zdHJpcCgpCisKKworICAgICAgICAjIFdlIG5lZWQgdG8ga25vdyB3aGF0IHJlbGVhc2UgdGhlIGN1cnJlbnQgcHJvamVjdCBpcyBzbyB0aGF0IHdlCisgICAgICAgICMgY2FuIHNldCB0aGUgaW1wb3J0ZWQgbGF5ZXIncyB1cF9icmFuY2hfaWQKKyAgICAgICAgcHJqX2JyYW5jaF9uYW1lID0gUmVsZWFzZS5vYmplY3RzLmdldChwaz1wcmoucmVsZWFzZV9pZCkuYnJhbmNoX25hbWUKKyAgICAgICAgdXBfYnJhbmNoLCBicmFuY2hfY3JlYXRlZCA9IEJyYW5jaC5vYmplY3RzLmdldF9vcl9jcmVhdGUobmFtZT1wcmpfYnJhbmNoX25hbWUsIGxheWVyX3NvdXJjZV9pZD1MYXllclNvdXJjZS5UWVBFX0lNUE9SVEVEKQorCisgICAgICAgIGxheWVyX3NvdXJjZSA9IExheWVyU291cmNlLm9iamVjdHMuZ2V0KHNvdXJjZXR5cGU9TGF5ZXJTb3VyY2UuVFlQRV9JTVBPUlRFRCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbGF5ZXIsIGxheWVyX2NyZWF0ZWQgPSBMYXllci5vYmplY3RzLmdldF9vcl9jcmVhdGUobmFtZT1wb3N0X2RhdGFbJ25hbWUnXSkKKyAgICAgICAgZXhjZXB0IE11bHRpcGxlT2JqZWN0c1JldHVybmVkOgorICAgICAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShqc29uZmlsdGVyKHsiZXJyb3IiOiAiaGludC1sYXllci1leGlzdHMifSksIGNvbnRlbnRfdHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uIikKKworICAgICAgICBpZiBsYXllcjoKKyAgICAgICAgICAgIGlmIGxheWVyX2NyZWF0ZWQ6CisgICAgICAgICAgICAgICAgbGF5ZXIubGF5ZXJfc291cmNlID0gbGF5ZXJfc291cmNlCisgICAgICAgICAgICAgICAgbGF5ZXIudmNzX3VybCA9IHBvc3RfZGF0YVsndmNzX3VybCddCisgICAgICAgICAgICAgICAgbGF5ZXIudXBfZGF0ZSA9IHRpbWV6b25lLm5vdygpCisgICAgICAgICAgICAgICAgbGF5ZXIuc2F2ZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgV2UgaGF2ZSBhbiBleGlzdGluZyBsYXllciBieSB0aGlzIG5hbWUsIGxldCdzIHNlZSBpZiB0aGUgZ2l0CisgICAgICAgICAgICAgICAgIyB1cmwgaXMgdGhlIHNhbWUsIGlmIGl0IGlzIHRoZW4gd2UgY2FuIGp1c3QgY3JlYXRlIGEgbmV3IGxheWVyCisgICAgICAgICAgICAgICAgIyB2ZXJzaW9uIGZvciB0aGlzIGxheWVyLiBPdGhlcndpc2Ugd2UgbmVlZCB0byBiYWlsIG91dC4KKyAgICAgICAgICAgICAgICBpZiBsYXllci52Y3NfdXJsICE9IHBvc3RfZGF0YVsndmNzX3VybCddOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb25maWx0ZXIoeyJlcnJvciI6ICJoaW50LWxheWVyLWV4aXN0cy13aXRoLWRpZmZlcmVudC11cmwiICwgImN1cnJlbnRfdXJsIiA6IGxheWVyLnZjc191cmwsICJjdXJyZW50X2lkIjogbGF5ZXIuaWQgfSksIGNvbnRlbnRfdHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uIikKKworCisgICAgICAgICAgICBsYXllcl92ZXJzaW9uLCB2ZXJzaW9uX2NyZWF0ZWQgPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShsYXllcl9zb3VyY2U9bGF5ZXJfc291cmNlLCBsYXllcj1sYXllciwgcHJvamVjdD1wcmosIHVwX2JyYW5jaF9pZD11cF9icmFuY2guaWQsYnJhbmNoPXBvc3RfZGF0YVsnZ2l0X3JlZiddLCAgY29tbWl0PXBvc3RfZGF0YVsnZ2l0X3JlZiddLCBkaXJwYXRoPXBvc3RfZGF0YVsnZGlyX3BhdGgnXSkKKworICAgICAgICAgICAgaWYgbGF5ZXJfdmVyc2lvbjoKKyAgICAgICAgICAgICAgICBpZiBub3QgdmVyc2lvbl9jcmVhdGVkOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb25maWx0ZXIoeyJlcnJvciI6ICJoaW50LWxheWVyLXZlcnNpb24tZXhpc3RzIiwgImV4aXN0aW5nX2xheWVyX3ZlcnNpb24iOiBsYXllcl92ZXJzaW9uLmlkIH0pLCBjb250ZW50X3R5cGUgPSAiYXBwbGljYXRpb24vanNvbiIpCisKKyAgICAgICAgICAgICAgICBsYXllcl92ZXJzaW9uLnVwX2RhdGUgPSB0aW1lem9uZS5ub3coKQorICAgICAgICAgICAgICAgIGxheWVyX3ZlcnNpb24uc2F2ZSgpCisKKyAgICAgICAgICAgICAgICAjIEFkZCB0aGUgZGVwZW5kZW5jaWVzIHNwZWNpZmllZCBmb3IgdGhpcyBuZXcgbGF5ZXIKKyAgICAgICAgICAgICAgICBpZiAocG9zdF9kYXRhLmhhc19rZXkoImxheWVyX2RlcHMiKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbl9jcmVhdGVkIGFuZAorICAgICAgICAgICAgICAgICAgICBsZW4ocG9zdF9kYXRhWyJsYXllcl9kZXBzIl0pID4gMCk6CisgICAgICAgICAgICAgICAgICAgIGZvciBsYXllcl9kZXBfaWQgaW4gcG9zdF9kYXRhWyJsYXllcl9kZXBzIl0uc3BsaXQoIiwiKToKKworICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJfZGVwX29iaiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXQocGs9bGF5ZXJfZGVwX2lkKQorICAgICAgICAgICAgICAgICAgICAgICAgTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeS5vYmplY3RzLmdldF9vcl9jcmVhdGUobGF5ZXJfdmVyc2lvbj1sYXllcl92ZXJzaW9uLCBkZXBlbmRzX29uPWxheWVyX2RlcF9vYmopCisgICAgICAgICAgICAgICAgICAgICAgICAjIE5vdyBhZGQgdGhlbSB0byB0aGUgcHJvamVjdCwgd2UgY291bGQgZ2V0IGFuIGV4ZWNwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiB0aGUgcHJvamVjdCBub3cgY29udGFpbnMgdGhlIGV4YWN0CisgICAgICAgICAgICAgICAgICAgICAgICAjIGRlcGVuZGVuY3kgYWxyZWFkeSAobGlrZSBtb2RpZmllZCBvbiBhbm90aGVyIHBhZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJqX2xheWVyLCBwcmpfbGF5ZXJfY3JlYXRlZCA9IFByb2plY3RMYXllci5vYmplY3RzLmdldF9vcl9jcmVhdGUobGF5ZXJjb21taXQ9bGF5ZXJfZGVwX29iaiwgcHJvamVjdD1wcmopCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgSW50ZWdyaXR5RXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygiSW50ZWdyaXR5IGVycm9yIHdoaWxlIHNhdmluZyBQcm9qZWN0IExheWVyczogJXMgKG9yaWdpbmFsICVzKSIgJSAoZSwgZS5fX2NhdXNlX18pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByal9sYXllcl9jcmVhdGVkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyZGVwZGV0YWlsdXJsID0gcmV2ZXJzZSgnbGF5ZXJkZXRhaWxzJywgYXJncz0ocHJqLmlkLCBsYXllcl9kZXBfb2JqLnBrKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcnNfYWRkZWQuYXBwZW5kKHsnaWQnOiBsYXllcl9kZXBfb2JqLmlkLCAnbmFtZSc6IExheWVyLm9iamVjdHMuZ2V0KGlkPWxheWVyX2RlcF9vYmoubGF5ZXJfaWQpLm5hbWUsICdsYXllcmRldGFpbHVybCc6IGxheWVyZGVwZGV0YWlsdXJsIH0pCisKKworICAgICAgICAgICAgICAgICMgSWYgYW4gb2xkIGxheWVyIHZlcnNpb24gZXhpc3RzIGluIG91ciBwcm9qZWN0IHRoZW4gcmVtb3ZlIGl0CisgICAgICAgICAgICAgICAgZm9yIHByal9sYXllcnMgaW4gUHJvamVjdExheWVyLm9iamVjdHMuZmlsdGVyKHByb2plY3Q9cHJqKToKKyAgICAgICAgICAgICAgICAgICAgZHVwX2xheWVyX3YgPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZmlsdGVyKGlkPXByal9sYXllcnMubGF5ZXJjb21taXRfaWQsIGxheWVyX2lkPWxheWVyLmlkKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oZHVwX2xheWVyX3YpID4wIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByal9sYXllcnMuZGVsZXRlKCkKKworICAgICAgICAgICAgICAgICMgZmluYWxseSBhZGQgdGhlIGltcG9ydGVkIGxheWVyICh2ZXJzaW9uIGlkKSB0byB0aGUgcHJvamVjdAorICAgICAgICAgICAgICAgIFByb2plY3RMYXllci5vYmplY3RzLmNyZWF0ZShsYXllcmNvbW1pdD1sYXllcl92ZXJzaW9uLCBwcm9qZWN0PXByaixvcHRpb25hbD0xKQorCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgV2UgZGlkbid0IGNyZWF0ZSBhIGxheWVyIHZlcnNpb24gc28gYmFjayBvdXQgbm93IGFuZCBjbGVhbiB1cC4KKyAgICAgICAgICAgICAgICBpZiBsYXllcl9jcmVhdGVkOgorICAgICAgICAgICAgICAgICAgICBsYXllci5kZWxldGUoKQorCisgICAgICAgICAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShqc29uZmlsdGVyKHsiZXJyb3IiOiAiVW5jYXVnaHQgZXJyb3I6IENvdWxkIG5vdCBjcmVhdGUgbGF5ZXIgdmVyc2lvbiJ9KSwgY29udGVudF90eXBlID0gImFwcGxpY2F0aW9uL2pzb24iKQorCisgICAgICAgIGxheWVyZGV0YWlsdXJsID0gcmV2ZXJzZSgnbGF5ZXJkZXRhaWxzJywgYXJncz0ocHJqLmlkLCBsYXllcl92ZXJzaW9uLnBrKSkKKworICAgICAgICBqc29uX3Jlc3BvbnNlID0geyJlcnJvciI6ICJvayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydGVkX2xheWVyIiA6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6IGxheWVyLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWQiOiBsYXllcl92ZXJzaW9uLmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImxheWVyZGV0YWlsdXJsIjogbGF5ZXJkZXRhaWx1cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZGVwc19hZGRlZCI6IGxheWVyc19hZGRlZCB9CisKKyAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShqc29uZmlsdGVyKGpzb25fcmVzcG9uc2UpLCBjb250ZW50X3R5cGUgPSAiYXBwbGljYXRpb24vanNvbiIpCisKKyAgICBkZWYgeGhyX3VwZGF0ZWxheWVyKHJlcXVlc3QpOgorCisgICAgICAgIGRlZiBlcnJvcl9yZXNwb25zZShlcnJvcik6CisgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb25maWx0ZXIoeyJlcnJvciI6IGVycm9yfSksIGNvbnRlbnRfdHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uIikKKworICAgICAgICBpZiBub3QgcmVxdWVzdC5QT1NULmhhc19rZXkoImxheWVyX3ZlcnNpb25faWQiKToKKyAgICAgICAgICAgIHJldHVybiBlcnJvcl9yZXNwb25zZSgiUGxlYXNlIHNwZWNpZnkgYSBsYXllciB2ZXJzaW9uIGlkIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbl9pZCA9IHJlcXVlc3QuUE9TVFsibGF5ZXJfdmVyc2lvbl9pZCJdCisgICAgICAgICAgICBsYXllcl92ZXJzaW9uID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldChpZD1sYXllcl92ZXJzaW9uX2lkKQorICAgICAgICBleGNlcHQgTGF5ZXJfVmVyc2lvbi5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICByZXR1cm4gZXJyb3JfcmVzcG9uc2UoIkNhbm5vdCBmaW5kIGxheWVyIHRvIHVwZGF0ZSIpCisKKworICAgICAgICBpZiByZXF1ZXN0LlBPU1QuaGFzX2tleSgidmNzX3VybCIpOgorICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbi5sYXllci52Y3NfdXJsID0gcmVxdWVzdC5QT1NUWyJ2Y3NfdXJsIl0KKyAgICAgICAgaWYgcmVxdWVzdC5QT1NULmhhc19rZXkoImRpcnBhdGgiKToKKyAgICAgICAgICAgIGxheWVyX3ZlcnNpb24uZGlycGF0aCA9IHJlcXVlc3QuUE9TVFsiZGlycGF0aCJdCisgICAgICAgIGlmIHJlcXVlc3QuUE9TVC5oYXNfa2V5KCJjb21taXQiKToKKyAgICAgICAgICAgIGxheWVyX3ZlcnNpb24uY29tbWl0ID0gcmVxdWVzdC5QT1NUWyJjb21taXQiXQorICAgICAgICBpZiByZXF1ZXN0LlBPU1QuaGFzX2tleSgidXBfYnJhbmNoIik6CisgICAgICAgICAgICBsYXllcl92ZXJzaW9uLnVwX2JyYW5jaF9pZCA9IGludChyZXF1ZXN0LlBPU1RbInVwX2JyYW5jaCJdKQorCisgICAgICAgIGlmIHJlcXVlc3QuUE9TVC5oYXNfa2V5KCJhZGRfZGVwIik6CisgICAgICAgICAgICBsdmQgPSBMYXllclZlcnNpb25EZXBlbmRlbmN5KGxheWVyX3ZlcnNpb249bGF5ZXJfdmVyc2lvbiwgZGVwZW5kc19vbl9pZD1yZXF1ZXN0LlBPU1RbImFkZF9kZXAiXSkKKyAgICAgICAgICAgIGx2ZC5zYXZlKCkKKworICAgICAgICBpZiByZXF1ZXN0LlBPU1QuaGFzX2tleSgicm1fZGVwIik6CisgICAgICAgICAgICBybV9kZXAgPSBMYXllclZlcnNpb25EZXBlbmRlbmN5Lm9iamVjdHMuZ2V0KGxheWVyX3ZlcnNpb249bGF5ZXJfdmVyc2lvbiwgZGVwZW5kc19vbl9pZD1yZXF1ZXN0LlBPU1RbInJtX2RlcCJdKQorICAgICAgICAgICAgcm1fZGVwLmRlbGV0ZSgpCisKKyAgICAgICAgaWYgcmVxdWVzdC5QT1NULmhhc19rZXkoInN1bW1hcnkiKToKKyAgICAgICAgICAgIGxheWVyX3ZlcnNpb24ubGF5ZXIuc3VtbWFyeSA9IHJlcXVlc3QuUE9TVFsic3VtbWFyeSJdCisgICAgICAgIGlmIHJlcXVlc3QuUE9TVC5oYXNfa2V5KCJkZXNjcmlwdGlvbiIpOgorICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbi5sYXllci5kZXNjcmlwdGlvbiA9IHJlcXVlc3QuUE9TVFsiZGVzY3JpcHRpb24iXQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxheWVyX3ZlcnNpb24ubGF5ZXIuc2F2ZSgpCisgICAgICAgICAgICBsYXllcl92ZXJzaW9uLnNhdmUoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICByZXR1cm4gZXJyb3JfcmVzcG9uc2UoIkNvdWxkIG5vdCB1cGRhdGUgbGF5ZXIgdmVyc2lvbiBlbnRyeTogJXMiICUgZSkKKworICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb25maWx0ZXIoeyJlcnJvciI6ICJvayIsfSksIGNvbnRlbnRfdHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uIikKKworCisKKyAgICBkZWYgaW1wb3J0bGF5ZXIocmVxdWVzdCwgcGlkKToKKyAgICAgICAgdGVtcGxhdGUgPSAiaW1wb3J0bGF5ZXIuaHRtbCIKKyAgICAgICAgY29udGV4dCA9IHsKKyAgICAgICAgICAgICdwcm9qZWN0JzogUHJvamVjdC5vYmplY3RzLmdldChpZD1waWQpLAorICAgICAgICB9CisgICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisKKyAgICBAX3RlbXBsYXRlX3JlbmRlcmVyKCdsYXllcmRldGFpbHMuaHRtbCcpCisgICAgZGVmIGxheWVyZGV0YWlscyhyZXF1ZXN0LCBwaWQsIGxheWVyaWQpOgorICAgICAgICBwcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmdldChwaz1waWQpCisgICAgICAgIGxheWVyX3ZlcnNpb24gPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZ2V0KHBrPWxheWVyaWQpCisKKyAgICAgICAgY29udGV4dCA9IHsgJ3Byb2plY3QnIDogcHJvamVjdCwKKyAgICAgICAgICAgICAgICAgICAnbGF5ZXJ2ZXJzaW9uJyA6IGxheWVyX3ZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgJ2xheWVyZGVwcycgOiB7ICJsaXN0IjogWworICAgICAgICAgICAgICAgICAgICAgW3siaWQiOiB5LmlkLCAibmFtZSI6IHkubGF5ZXIubmFtZX0gZm9yIHkgaW4geC5kZXBlbmRzX29uLmdldF9lcXVpdmFsZW50c193cHJpb3JpdHkocHJvamVjdCldWzBdIGZvciB4IGluIGxheWVyX3ZlcnNpb24uZGVwZW5kZW5jaWVzLmFsbCgpXX0sCisgICAgICAgICAgICAgICAgICAgJ3Byb2plY3RsYXllcnMnOiBtYXAobGFtYmRhIHByamxheWVyOiBwcmpsYXllci5sYXllcmNvbW1pdC5pZCwgUHJvamVjdExheWVyLm9iamVjdHMuZmlsdGVyKHByb2plY3Q9cHJvamVjdCkpCisgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNvbnRleHQKKworCisgICAgZGVmIGdldF9wcm9qZWN0X2NvbmZpZ3ZhcnNfY29udGV4dCgpOgorICAgICAgICAjIFZhcnMgbWFuYWdlZCBvdXRzaWRlIG9mIHRoaXMgdmlldworICAgICAgICB2YXJzX21hbmFnZWQgPSB7CisgICAgICAgICAgICAnTUFDSElORScsICdCQkxBWUVSUycKKyAgICAgICAgfQorCisgICAgICAgIHZhcnNfYmxhY2tsaXN0ICA9IHsKKyAgICAgICAgICAgICdETF9EUicsJ1BBUkFMTEVMX01BS0UnLCdCQl9OVU1CRVJfVEhSRUFEUycsJ1NTVEFURV9ESVInLAorICAgICAgICAgICAgJ0JCX0RJU0tNT05fRElSUycsJ0JCX05VTUJFUl9USFJFQURTJywnQ1ZTX1BST1hZX0hPU1QnLCdDVlNfUFJPWFlfUE9SVCcsCisgICAgICAgICAgICAnRExfRElSJywnUEFSQUxMRUxfTUFLRScsJ1NTVEFURV9ESVInLCdTU1RBVEVfRElSJywnU1NUQVRFX01JUlJPUlMnLCdUTVBESVInLAorICAgICAgICAgICAgJ2FsbF9wcm94eScsJ2Z0cF9wcm94eScsJ2h0dHBfcHJveHkgJywnaHR0cHNfcHJveHknCisgICAgICAgICAgICB9CisKKyAgICAgICAgdmFyc19mc3R5cGVzICA9IHsKKyAgICAgICAgICAgICdidHJmcycsJ2NwaW8nLCdjcGlvLmd6JywnY3Bpby5sejQnLCdjcGlvLmx6bWEnLCdjcGlvLnh6JywnY3JhbWZzJywKKyAgICAgICAgICAgICdlbGYnLCdleHQyJywnZXh0Mi5iejInLCdleHQyLmd6JywnZXh0Mi5sem1hJywgJ2V4dDQnLCAnZXh0NC5neicsICdleHQzJywnZXh0My5neicsJ2hkZGltZycsCisgICAgICAgICAgICAnaXNvJywnamZmczInLCdqZmZzMi5zdW0nLCdzcXVhc2hmcycsJ3NxdWFzaGZzLWx6bycsJ3NxdWFzaGZzLXh6JywndGFyLmJ6MicsCisgICAgICAgICAgICAndGFyLmx6NCcsJ3Rhci54eicsJ3RhcnRhci5neicsJ3ViaScsJ3ViaWZzJywndm1kaycKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybih2YXJzX21hbmFnZWQsc29ydGVkKHZhcnNfZnN0eXBlcyksdmFyc19ibGFja2xpc3QpCisKKyAgICBAX3RlbXBsYXRlX3JlbmRlcmVyKCJwcm9qZWN0Y29uZi5odG1sIikKKyAgICBkZWYgcHJvamVjdGNvbmYocmVxdWVzdCwgcGlkKToKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBwcmogPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KGlkID0gcGlkKQorICAgICAgICBleGNlcHQgUHJvamVjdC5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlTm90Rm91bmQoIjxoMT5Qcm9qZWN0IGlkICIgKyBwaWQgKyAiIGlzIHVuYXZhaWxhYmxlPC9oMT4iKQorCisgICAgICAgICMgcmVtb3ZlIGJsYWNrbGlzdCBhbmQgZXh0ZXJuYWxseSBtYW5hZ2VkIHZhcmFpYmxlcyBmcm9tIHRoaXMgbGlzdAorICAgICAgICB2YXJzX21hbmFnZWQsdmFyc19mc3R5cGVzLHZhcnNfYmxhY2tsaXN0ID0gZ2V0X3Byb2plY3RfY29uZmlndmFyc19jb250ZXh0KCkKKyAgICAgICAgY29uZmlndmFycyA9IFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmZpbHRlcihwcm9qZWN0X2lkID0gcGlkKS5hbGwoKQorICAgICAgICBmb3IgdmFyIGluIHZhcnNfbWFuYWdlZDoKKyAgICAgICAgICAgIGNvbmZpZ3ZhcnMgPSBjb25maWd2YXJzLmV4Y2x1ZGUobmFtZSA9IHZhcikKKyAgICAgICAgZm9yIHZhciBpbiB2YXJzX2JsYWNrbGlzdDoKKyAgICAgICAgICAgIGNvbmZpZ3ZhcnMgPSBjb25maWd2YXJzLmV4Y2x1ZGUobmFtZSA9IHZhcikKKworICAgICAgICBjb250ZXh0ID0geworICAgICAgICAgICAgJ3Byb2plY3QnOiAgICAgICAgICBwcmosCisgICAgICAgICAgICAnY29uZmlndmFycyc6ICAgICAgIGNvbmZpZ3ZhcnMsCisgICAgICAgICAgICAndmFyc19tYW5hZ2VkJzogICAgIHZhcnNfbWFuYWdlZCwKKyAgICAgICAgICAgICd2YXJzX2ZzdHlwZXMnOiAgICAgdmFyc19mc3R5cGVzLAorICAgICAgICAgICAgJ3ZhcnNfYmxhY2tsaXN0JzogICB2YXJzX2JsYWNrbGlzdCwKKyAgICAgICAgfQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbnRleHRbJ2Rpc3RybyddID0gIFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmdldChwcm9qZWN0ID0gcHJqLCBuYW1lID0gIkRJU1RSTyIpLnZhbHVlCisgICAgICAgICAgICBjb250ZXh0WydkaXN0cm9fZGVmaW5lZCddID0gIjEiCisgICAgICAgIGV4Y2VwdCBQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICBjb250ZXh0Wydmc3R5cGVzJ10gPSAgUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuZ2V0KHByb2plY3QgPSBwcmosIG5hbWUgPSAiSU1BR0VfRlNUWVBFUyIpLnZhbHVlCisgICAgICAgICAgICBjb250ZXh0Wydmc3R5cGVzX2RlZmluZWQnXSA9ICIxIgorICAgICAgICBleGNlcHQgUHJvamVjdFZhcmlhYmxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29udGV4dFsnaW1hZ2VfaW5zdGFsbF9hcHBlbmQnXSA9ICBQcm9qZWN0VmFyaWFibGUub2JqZWN0cy5nZXQocHJvamVjdCA9IHByaiwgbmFtZSA9ICJJTUFHRV9JTlNUQUxMX2FwcGVuZCIpLnZhbHVlCisgICAgICAgICAgICBjb250ZXh0WydpbWFnZV9pbnN0YWxsX2FwcGVuZF9kZWZpbmVkJ10gPSAiMSIKKyAgICAgICAgZXhjZXB0IFByb2plY3RWYXJpYWJsZS5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbnRleHRbJ3BhY2thZ2VfY2xhc3NlcyddID0gIFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmdldChwcm9qZWN0ID0gcHJqLCBuYW1lID0gIlBBQ0tBR0VfQ0xBU1NFUyIpLnZhbHVlCisgICAgICAgICAgICBjb250ZXh0WydwYWNrYWdlX2NsYXNzZXNfZGVmaW5lZCddID0gIjEiCisgICAgICAgIGV4Y2VwdCBQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICBjb250ZXh0WydzZGtfbWFjaGluZSddID0gIFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmdldChwcm9qZWN0ID0gcHJqLCBuYW1lID0gIlNES01BQ0hJTkUiKS52YWx1ZQorICAgICAgICAgICAgY29udGV4dFsnc2RrX21hY2hpbmVfZGVmaW5lZCddID0gIjEiCisgICAgICAgIGV4Y2VwdCBQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJldHVybiBjb250ZXh0CisKKyAgICBAX3RlbXBsYXRlX3JlbmRlcmVyKCdwcm9qZWN0YnVpbGRzLmh0bWwnKQorICAgIGRlZiBwcm9qZWN0YnVpbGRzKHJlcXVlc3QsIHBpZCk6CisgICAgICAgIHByaiA9IFByb2plY3Qub2JqZWN0cy5nZXQoaWQgPSBwaWQpCisKKyAgICAgICAgaWYgcmVxdWVzdC5tZXRob2QgPT0gIlBPU1QiOgorICAgICAgICAgICAgIyBwcm9jZXNzIGFueSBidWlsZCByZXF1ZXN0CisKKyAgICAgICAgICAgIGlmICdidWlsZENhbmNlbCcgaW4gcmVxdWVzdC5QT1NUOgorICAgICAgICAgICAgICAgIGZvciBpIGluIHJlcXVlc3QuUE9TVFsnYnVpbGRDYW5jZWwnXS5zdHJpcCgpLnNwbGl0KCIgIik6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyID0gQnVpbGRSZXF1ZXN0Lm9iamVjdHMuc2VsZWN0X2Zvcl91cGRhdGUoKS5nZXQocHJvamVjdCA9IHByaiwgcGsgPSBpLCBzdGF0ZV9fbHRlID0gQnVpbGRSZXF1ZXN0LlJFUV9RVUVVRUQpCisgICAgICAgICAgICAgICAgICAgICAgICBici5zdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfREVMRVRFRAorICAgICAgICAgICAgICAgICAgICAgICAgYnIuc2F2ZSgpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBCdWlsZFJlcXVlc3QuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBpZiAnYnVpbGREZWxldGUnIGluIHJlcXVlc3QuUE9TVDoKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByZXF1ZXN0LlBPU1RbJ2J1aWxkRGVsZXRlJ10uc3RyaXAoKS5zcGxpdCgiICIpOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBiciA9IEJ1aWxkUmVxdWVzdC5vYmplY3RzLnNlbGVjdF9mb3JfdXBkYXRlKCkuZ2V0KHByb2plY3QgPSBwcmosIHBrID0gaSwgc3RhdGVfX2x0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfREVMRVRFRCkuZGVsZXRlKCkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEJ1aWxkUmVxdWVzdC5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIGlmICd0YXJnZXRzJyBpbiByZXF1ZXN0LlBPU1Q6CisgICAgICAgICAgICAgICAgUHJvamVjdFRhcmdldC5vYmplY3RzLmZpbHRlcihwcm9qZWN0ID0gcHJqKS5kZWxldGUoKQorICAgICAgICAgICAgICAgIHMgPSBzdHIocmVxdWVzdC5QT1NUWyd0YXJnZXRzJ10pCisgICAgICAgICAgICAgICAgZm9yIHQgaW4gcy50cmFuc2xhdGUoTm9uZSwgIjslfFwiIikuc3BsaXQoIiAiKToKKyAgICAgICAgICAgICAgICAgICAgaWYgIjoiIGluIHQ6CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQsIHRhc2sgPSB0LnNwbGl0KCI6IikKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sgPSAiIgorICAgICAgICAgICAgICAgICAgICBQcm9qZWN0VGFyZ2V0Lm9iamVjdHMuY3JlYXRlKHByb2plY3QgPSBwcmosIHRhcmdldCA9IHRhcmdldCwgdGFzayA9IHRhc2spCisKKyAgICAgICAgICAgICAgICBiciA9IHByai5zY2hlZHVsZV9idWlsZCgpCisKKworICAgICAgICBxdWVyeXNldCA9IEJ1aWxkLm9iamVjdHMuZmlsdGVyKG91dGNvbWVfX2x0ZSA9IEJ1aWxkLklOX1BST0dSRVNTKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbnRleHQsIHBhZ2VzaXplLCBvcmRlcmJ5ID0gX2J1aWxkX2xpc3RfaGVscGVyKHJlcXVlc3QsIHF1ZXJ5c2V0KQorICAgICAgICBleGNlcHQgUmVkaXJlY3RFeGNlcHRpb24gYXMgcmU6CisgICAgICAgICAgICAjIHJld3JpdGUgdGhlIFJlZGlyZWN0RXhjZXB0aW9uIHdpdGggb3VyIGN1cnJlbnQgdXJsIGluZm9ybWF0aW9uCisgICAgICAgICAgICByZS52aWV3ID0gcmVzb2x2ZShyZXF1ZXN0LnBhdGhfaW5mbykudXJsX25hbWUKKyAgICAgICAgICAgIHJlLm9rd2FyZ3MgPSB7InBpZCIgOiBwaWR9CisgICAgICAgICAgICByYWlzZSByZQorCisgICAgICAgIGNvbnRleHRbJ3Byb2plY3QnXSA9IHByagorICAgICAgICBfc2V0X3BhcmFtZXRlcnNfdmFsdWVzKHBhZ2VzaXplLCBvcmRlcmJ5LCByZXF1ZXN0KQorCisgICAgICAgIHJldHVybiBjb250ZXh0CisKKworICAgIGRlZiBfZmlsZV9uYW1lX2Zvcl9hcnRpZmFjdChiLCBhcnRpZmFjdF90eXBlLCBhcnRpZmFjdF9pZCk6CisgICAgICAgIGZpbGVfbmFtZSA9IE5vbmUKKyAgICAgICAgIyBUYXJnZXRfSW1hZ2VfRmlsZSBmaWxlX25hbWUKKyAgICAgICAgaWYgYXJ0aWZhY3RfdHlwZSA9PSAiaW1hZ2VmaWxlIjoKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IFRhcmdldF9JbWFnZV9GaWxlLm9iamVjdHMuZ2V0KHRhcmdldF9fYnVpbGQgPSBiLCBwayA9IGFydGlmYWN0X2lkKS5maWxlX25hbWUKKworICAgICAgICBlbGlmIGFydGlmYWN0X3R5cGUgPT0gImJ1aWxkYXJ0aWZhY3QiOgorICAgICAgICAgICAgZmlsZV9uYW1lID0gQnVpbGRBcnRpZmFjdC5vYmplY3RzLmdldChidWlsZCA9IGIsIHBrID0gYXJ0aWZhY3RfaWQpLmZpbGVfbmFtZQorCisgICAgICAgIGVsaWYgYXJ0aWZhY3RfdHlwZSA9PSAgImxpY2Vuc2VtYW5pZmVzdCI6CisgICAgICAgICAgICBmaWxlX25hbWUgPSBUYXJnZXQub2JqZWN0cy5nZXQoYnVpbGQgPSBiLCBwayA9IGFydGlmYWN0X2lkKS5saWNlbnNlX21hbmlmZXN0X3BhdGgKKworICAgICAgICBlbGlmIGFydGlmYWN0X3R5cGUgPT0gInRhc2tsb2dmaWxlIjoKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IFRhc2sub2JqZWN0cy5nZXQoYnVpbGQgPSBiLCBwayA9IGFydGlmYWN0X2lkKS5sb2dmaWxlCisKKyAgICAgICAgZWxpZiBhcnRpZmFjdF90eXBlID09ICJsb2dtZXNzYWdlZmlsZSI6CisgICAgICAgICAgICBmaWxlX25hbWUgPSBMb2dNZXNzYWdlLm9iamVjdHMuZ2V0KGJ1aWxkID0gYiwgcGsgPSBhcnRpZmFjdF9pZCkucGF0aG5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRklYTUU6IGFydGlmYWN0IHR5cGUgJXMgbm90IGltcGxlbWVudGVkIiAlIChhcnRpZmFjdF90eXBlKSkKKworICAgICAgICByZXR1cm4gZmlsZV9uYW1lCisKKworICAgIGRlZiBidWlsZF9hcnRpZmFjdChyZXF1ZXN0LCBidWlsZF9pZCwgYXJ0aWZhY3RfdHlwZSwgYXJ0aWZhY3RfaWQpOgorICAgICAgICBpZiBhcnRpZmFjdF90eXBlIGluIFsiY29va2VybG9nIl06CisgICAgICAgICAgICAjIHRoZXNlIGFydGlmYWN0cyBhcmUgc2F2ZWQgYWZ0ZXIgYnVpbGRpbmcsIHNvIHRoZXkgYXJlIG9uIHRoZSBzZXJ2ZXIgaXRzZWxmCisgICAgICAgICAgICBkZWYgX21pbWV0eXBlX2Zvcl9hcnRpZmFjdChwYXRoKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGltcG9ydCBtYWdpYworCisgICAgICAgICAgICAgICAgICAgICMgZmFpciB3YXJuaW5nOiB0aGlzIGlzIGEgbWVzczsgdGhlcmUgYXJlIG11bHRpcGxlIGNvbXBldGluZyBhbmQgaW5jb21wYXRpYmxlCisgICAgICAgICAgICAgICAgICAgICMgbWFnaWMgbW9kdWxlcyBmbG9hdGluZyBhcm91bmQsIHNvIHdlIHRyeSBzb21lIG9mIHRoZSBtb3N0IGNvbW1vbiBjb21iaW5hdGlvbnMKKworICAgICAgICAgICAgICAgICAgICB0cnk6ICAgICMgd2UgdHJ5IHVidW50dSdzIHB5dGhvbi1tYWdpYyA1LjQKKyAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBtYWdpYy5vcGVuKG1hZ2ljLk1BR0lDX01JTUVfVFlQRSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG0ubG9hZCgpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbS5maWxlKHBhdGgpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgICAgICAgICB0cnk6ICAgICMgd2UgdHJ5IHB5dGhvbi1tYWdpYyAwLjQuNgorICAgICAgICAgICAgICAgICAgICAgICAgbSA9IG1hZ2ljLk1hZ2ljKG1hZ2ljLk1BR0lDX01JTUUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbS5mcm9tX2ZpbGUocGF0aCkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICAgICAgICAgIHRyeTogICAgIyB3ZSB0cnkgcGlwIGZpbGVtYWdpYyAxLjYKKyAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBtYWdpYy5NYWdpYyhmbGFncz1tYWdpYy5NQUdJQ19NSU1FX1RZUEUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbS5pZF9maWxlbmFtZShwYXRoKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJiaW5hcnkvb2N0ZXQtc3RyZWFtIgorICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJiaW5hcnkvb2N0ZXQtc3RyZWFtIgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgbWF0Y2ggY29kZSB3aXRoIHJ1bmJ1aWxkcy5Db21tYW5kLmFyY2hpdmUoKQorICAgICAgICAgICAgICAgIGJ1aWxkX2FydGlmYWN0X3N0b3JhZ2VfZGlyID0gb3MucGF0aC5qb2luKFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuZ2V0KG5hbWU9IkFSVElGQUNUU19TVE9SQUdFX0RJUiIpLnZhbHVlLCAiJWQiICUgaW50KGJ1aWxkX2lkKSkKKyAgICAgICAgICAgICAgICBmaWxlX25hbWUgPSBvcy5wYXRoLmpvaW4oYnVpbGRfYXJ0aWZhY3Rfc3RvcmFnZV9kaXIsICJjb29rZXJfbG9nLnR4dCIpCisKKyAgICAgICAgICAgICAgICBmc29jayA9IG9wZW4oZmlsZV9uYW1lLCAiciIpCisgICAgICAgICAgICAgICAgY29udGVudF90eXBlPV9taW1ldHlwZV9mb3JfYXJ0aWZhY3QoZmlsZV9uYW1lKQorCisgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBIdHRwUmVzcG9uc2UoZnNvY2ssIGNvbnRlbnRfdHlwZSA9IGNvbnRlbnRfdHlwZSkKKworICAgICAgICAgICAgICAgIHJlc3BvbnNlWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPSAnYXR0YWNobWVudDsgZmlsZW5hbWU9JyArIG9zLnBhdGguYmFzZW5hbWUoZmlsZV9uYW1lKQorICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgY29udGV4dCA9IHsKKyAgICAgICAgICAgICAgICAgICAgJ2J1aWxkJyA6IEJ1aWxkLm9iamVjdHMuZ2V0KHBrID0gYnVpbGRfaWQpLAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICJ1bmF2YWlsYWJsZV9hcnRpZmFjdC5odG1sIiwgY29udGV4dCkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyByZXRyaWV2ZSB0aGUgYXJ0aWZhY3QgZGlyZWN0bHkgZnJvbSB0aGUgYnVpbGQgZW52aXJvbm1lbnQKKyAgICAgICAgICAgIHJldHVybiBfZ2V0X2JlX2FydGlmYWN0KHJlcXVlc3QsIGJ1aWxkX2lkLCBhcnRpZmFjdF90eXBlLCBhcnRpZmFjdF9pZCkKKworCisgICAgZGVmIF9nZXRfYmVfYXJ0aWZhY3QocmVxdWVzdCwgYnVpbGRfaWQsIGFydGlmYWN0X3R5cGUsIGFydGlmYWN0X2lkKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYiA9IEJ1aWxkLm9iamVjdHMuZ2V0KHBrPWJ1aWxkX2lkKQorICAgICAgICAgICAgaWYgYi5idWlsZHJlcXVlc3QgaXMgTm9uZSBvciBiLmJ1aWxkcmVxdWVzdC5lbnZpcm9ubWVudCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQXJ0aWZhY3Qgbm90IGF2YWlsYWJsZSBmb3IgZG93bmxvYWQgKG1pc3NpbmcgYnVpbGQgcmVxdWVzdCBvciBidWlsZCBlbnZpcm9ubWVudCkiKQorCisgICAgICAgICAgICBmaWxlX25hbWUgPSBfZmlsZV9uYW1lX2Zvcl9hcnRpZmFjdChiLCBhcnRpZmFjdF90eXBlLCBhcnRpZmFjdF9pZCkKKyAgICAgICAgICAgIGZzb2NrID0gTm9uZQorICAgICAgICAgICAgY29udGVudF90eXBlPSdhcHBsaWNhdGlvbi9mb3JjZS1kb3dubG9hZCcKKworICAgICAgICAgICAgaWYgZmlsZV9uYW1lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDb3VsZCBub3QgaGFuZGxlIGFydGlmYWN0ICVzIGlkICVzIiAlIChhcnRpZmFjdF90eXBlLCBhcnRpZmFjdF9pZCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbnRlbnRfdHlwZSA9IGIuYnVpbGRyZXF1ZXN0LmVudmlyb25tZW50LmdldF9hcnRpZmFjdF90eXBlKGZpbGVfbmFtZSkKKyAgICAgICAgICAgICAgICBmc29jayA9IGIuYnVpbGRyZXF1ZXN0LmVudmlyb25tZW50LmdldF9hcnRpZmFjdChmaWxlX25hbWUpCisgICAgICAgICAgICAgICAgZmlsZV9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShmaWxlX25hbWUpICMgd2UgYXNzdW1lIHRoYXQgdGhlIGJ1aWxkIGVudmlyb25tZW50IHN5c3RlbSBoYXMgdGhlIHNhbWUgcGF0aCBjb252ZW50aW9ucyBhcyBob3N0CisKKyAgICAgICAgICAgIHJlc3BvbnNlID0gSHR0cFJlc3BvbnNlKGZzb2NrLCBjb250ZW50X3R5cGUgPSBjb250ZW50X3R5cGUpCisKKyAgICAgICAgICAgICMgcmV0dXJucyBhIGZpbGUgZnJvbSB0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgICAgIHJlc3BvbnNlWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPSAnYXR0YWNobWVudDsgZmlsZW5hbWU9JyArIGZpbGVfbmFtZQorICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgY29udGV4dCA9IHsKKyAgICAgICAgICAgICAgICAnYnVpbGQnIDogQnVpbGQub2JqZWN0cy5nZXQocGsgPSBidWlsZF9pZCksCisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICJ1bmF2YWlsYWJsZV9hcnRpZmFjdC5odG1sIiwgY29udGV4dCkKKworCisKKworICAgIEBfdGVtcGxhdGVfcmVuZGVyZXIoInByb2plY3RzLmh0bWwiKQorICAgIGRlZiBwcm9qZWN0cyhyZXF1ZXN0KToKKyAgICAgICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMTAsICd1cGRhdGVkOi0nKQorICAgICAgICBtYW5kYXRvcnlfcGFyYW1ldGVycyA9IHsgJ2NvdW50JzogcGFnZXNpemUsICAncGFnZScgOiAxLCAnb3JkZXJieScgOiBvcmRlcmJ5IH0KKyAgICAgICAgcmV0dmFsID0gX3ZlcmlmeV9wYXJhbWV0ZXJzKCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMgKQorICAgICAgICBpZiByZXR2YWw6CisgICAgICAgICAgICByYWlzZSBSZWRpcmVjdEV4Y2VwdGlvbiggJ2FsbC1wcm9qZWN0cycsIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycyApCisKKyAgICAgICAgcXVlcnlzZXRfYWxsID0gUHJvamVjdC5vYmplY3RzLmFsbCgpCisKKyAgICAgICAgIyBhbm5vdGF0ZSBlYWNoIHByb2plY3Qgd2l0aCBpdHMgbnVtYmVyIG9mIGJ1aWxkcworICAgICAgICBxdWVyeXNldF9hbGwgPSBxdWVyeXNldF9hbGwuYW5ub3RhdGUobnVtX2J1aWxkcz1Db3VudCgnYnVpbGQnKSkKKworICAgICAgICAjIGV4Y2x1ZGUgdGhlIGNvbW1hbmQgbGluZSBidWlsZHMgcHJvamVjdCBpZiBpdCBoYXMgbm8gYnVpbGRzCisgICAgICAgIHFfZGVmYXVsdF93aXRoX2J1aWxkcyA9IFEoaXNfZGVmYXVsdD1UcnVlKSAmIFEobnVtX2J1aWxkc19fZ3Q9MCkKKyAgICAgICAgcXVlcnlzZXRfYWxsID0gcXVlcnlzZXRfYWxsLmZpbHRlcihRKGlzX2RlZmF1bHQ9RmFsc2UpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxX2RlZmF1bHRfd2l0aF9idWlsZHMpCisKKyAgICAgICAgIyBib2lsZXJwbGF0ZSBjb2RlIHRoYXQgdGFrZXMgYSByZXF1ZXN0IGZvciBhbiBvYmplY3QgdHlwZSBhbmQgcmV0dXJucyBhIHF1ZXJ5c2V0CisgICAgICAgICMgZm9yIHRoYXQgb2JqZWN0IHR5cGUuIGNvcHlwYXN0YSBmb3IgYWxsIG5lZWRlZCB0YWJsZSBzZWFyY2hlcworICAgICAgICAoZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZykgPSBfc2VhcmNoX3R1cGxlKHJlcXVlc3QsIFByb2plY3QpCisgICAgICAgIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoID0gX2dldF9xdWVyeXNldChQcm9qZWN0LCBxdWVyeXNldF9hbGwsIE5vbmUsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcsICctdXBkYXRlZCcpCisgICAgICAgIHF1ZXJ5c2V0ID0gX2dldF9xdWVyeXNldChQcm9qZWN0LCBxdWVyeXNldF9hbGwsIGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcsICctdXBkYXRlZCcpCisKKyAgICAgICAgIyByZXRyaWV2ZSB0aGUgb2JqZWN0cyB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSB0YWJsZTsgcHJvamVjdHMgYSBwYWdpbmF0b3IgYW5kIGdldHMgYSBwYWdlIHJhbmdlIHRvIGRpc3BsYXkKKyAgICAgICAgcHJvamVjdF9pbmZvID0gX2J1aWxkX3BhZ2VfcmFuZ2UoUGFnaW5hdG9yKHF1ZXJ5c2V0LCBwYWdlc2l6ZSksIHJlcXVlc3QuR0VULmdldCgncGFnZScsIDEpKQorCisgICAgICAgICMgYWRkIGZpZWxkcyBuZWVkZWQgaW4gSlNPTiBkdW1wcyBmb3IgQVBJIGNhbGwgc3VwcG9ydAorICAgICAgICBmb3IgcCBpbiBwcm9qZWN0X2luZm8ub2JqZWN0X2xpc3Q6CisgICAgICAgICAgICBwLmlkID0gcC5waworICAgICAgICAgICAgcC5wcm9qZWN0UGFnZVVybCA9IHJldmVyc2UoJ3Byb2plY3QnLCBhcmdzPShwLmlkLCkpCisgICAgICAgICAgICBwLmxheWVyc1R5cGVBaGVhZFVybCA9IHJldmVyc2UoJ3hocl9sYXllcnN0eXBlYWhlYWQnLCBhcmdzPShwLmlkLCkpCisgICAgICAgICAgICBwLnJlY2lwZXNUeXBlQWhlYWRVcmwgPSByZXZlcnNlKCd4aHJfcmVjaXBlc3R5cGVhaGVhZCcsIGFyZ3M9KHAuaWQsKSkKKyAgICAgICAgICAgIHAucHJvamVjdEJ1aWxkc1VybCA9IHJldmVyc2UoJ3Byb2plY3RidWlsZHMnLCBhcmdzPShwLmlkLCkpCisKKyAgICAgICAgIyBidWlsZCB2aWV3LXNwZWNpZmljIGluZm9ybWF0aW9uOyB0aGlzIGlzIHJlbmRlcmVkIHNwZWNpZmljYWxseSBpbiB0aGUgYnVpbGRzIHBhZ2UsIGF0IHRoZSB0b3Agb2YgdGhlIHBhZ2UgKGkuZS4gUmVjZW50IGJ1aWxkcykKKyAgICAgICAgYnVpbGRfbXJ1ID0gX2dldF9sYXRlc3RfYnVpbGRzKCkKKworICAgICAgICAjIHRyYW5zbGF0ZSB0aGUgcHJvamVjdCdzIGJ1aWxkIHRhcmdldCBzdHJpbmdzCisgICAgICAgIGZzdHlwZXNfbWFwID0ge307CisgICAgICAgIGZvciBwcm9qZWN0IGluIHByb2plY3RfaW5mbzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0YXJnZXRzID0gVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKCBidWlsZF9pZCA9IHByb2plY3QuZ2V0X2xhc3RfYnVpbGRfaWQoKSApCisgICAgICAgICAgICAgICAgY29tbWEgPSAiIjsKKyAgICAgICAgICAgICAgICBleHRlbnNpb25zID0gIiI7CisgICAgICAgICAgICAgICAgZm9yIHQgaW4gdGFyZ2V0czoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBub3QgdC5pc19pbWFnZSApOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgdGlmID0gVGFyZ2V0X0ltYWdlX0ZpbGUub2JqZWN0cy5maWx0ZXIoIHRhcmdldF9pZCA9IHQuaWQgKQorICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiB0aWY6CisgICAgICAgICAgICAgICAgICAgICAgICBzPXJlLnN1YignLip0YXIuYnoyJywgJ3Rhci5iejInLCBpLmZpbGVfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHMgPT0gaS5maWxlX25hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcz1yZS5zdWIoJy4qXC4nLCAnJywgaS5maWxlX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBOb25lID09IHJlLnNlYXJjaChzLGV4dGVuc2lvbnMpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMgKz0gY29tbWEgKyBzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWEgPSAiLCAiCisgICAgICAgICAgICAgICAgZnN0eXBlc19tYXBbcHJvamVjdC5pZF09ZXh0ZW5zaW9ucworICAgICAgICAgICAgZXhjZXB0IChUYXJnZXQuRG9lc05vdEV4aXN0LEluZGV4RXJyb3IpOgorICAgICAgICAgICAgICAgIGZzdHlwZXNfbWFwW3Byb2plY3QuaWRdPXByb2plY3QuZ2V0X2xhc3RfaW1nZmlsZXMKKworICAgICAgICBjb250ZXh0ID0geworICAgICAgICAgICAgICAgICdtcnUnIDogYnVpbGRfbXJ1LAorCisgICAgICAgICAgICAgICAgJ29iamVjdHMnIDogcHJvamVjdF9pbmZvLAorICAgICAgICAgICAgICAgICdvYmplY3RuYW1lJyA6ICJwcm9qZWN0cyIsCisgICAgICAgICAgICAgICAgJ2RlZmF1bHRfb3JkZXJieScgOiAnaWQ6LScsCisgICAgICAgICAgICAgICAgJ3NlYXJjaF90ZXJtJyA6IHNlYXJjaF90ZXJtLAorICAgICAgICAgICAgICAgICd0b3RhbF9jb3VudCcgOiBxdWVyeXNldF93aXRoX3NlYXJjaC5jb3VudCgpLAorICAgICAgICAgICAgICAgICdmc3R5cGVzJyA6IGZzdHlwZXNfbWFwLAorICAgICAgICAgICAgICAgICdidWlsZF9GQUlMRUQnIDogQnVpbGQuRkFJTEVELAorICAgICAgICAgICAgICAgICdidWlsZF9TVUNDRUVERUQnIDogQnVpbGQuU1VDQ0VFREVELAorICAgICAgICAgICAgICAgICd0YWJsZWNvbHMnOiBbCisgICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdQcm9qZWN0JywKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAibmFtZSIpLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJuYW1lIiksCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmtleScgOiAnbmFtZScsCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdMYXN0IGFjdGl2aXR5IG9uJywKKyAgICAgICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAndXBkYXRlZCcsCisgICAgICAgICAgICAgICAgICAgICdxaGVscCc6ICJTaG93cyB0aGUgc3RhcnRpbmcgZGF0ZSBhbmQgdGltZSBvZiB0aGUgbGFzdCBwcm9qZWN0IGJ1aWxkLiBJZiB0aGUgcHJvamVjdCBoYXMgbm8gYnVpbGRzLCBpdCBzaG93cyB0aGUgZGF0ZSB0aGUgcHJvamVjdCB3YXMgY3JlYXRlZCIsCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInVwZGF0ZWQiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAidXBkYXRlZCIpLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ3VwZGF0ZWQnLAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7J25hbWUnOiAnUmVsZWFzZScsCisgICAgICAgICAgICAgICAgICAgICdxaGVscCcgOiAiVGhlIHZlcnNpb24gb2YgdGhlIGJ1aWxkIHN5c3RlbSB1c2VkIGJ5IHRoZSBwcm9qZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAicmVsZWFzZV9fbmFtZSIpLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJyZWxlYXNlX19uYW1lIiksCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmtleScgOiAncmVsZWFzZV9fbmFtZScsCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdNYWNoaW5lJywKKyAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIlRoZSBoYXJkd2FyZSBjdXJyZW50bHkgc2VsZWN0ZWQgZm9yIHRoZSBwcm9qZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ051bWJlciBvZiBidWlsZHMnLAorICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiSG93IG1hbnkgYnVpbGRzIGhhdmUgYmVlbiBydW4gZm9yIHRoZSBwcm9qZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ0xhc3QgYnVpbGQgb3V0Y29tZScsICdjbGNsYXNzJzogJ2xvdXRjb21lJywKKyAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIlRlbGxzIHlvdSBpZiB0aGUgbGFzdCBwcm9qZWN0IGJ1aWxkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgb3IgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ1JlY2lwZScsICdjbGNsYXNzJzogJ2x0YXJnZXQnLAorICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiVGhlIGxhc3QgcmVjaXBlIHRoYXQgd2FzIGJ1aWx0IGluIHRoaXMgcHJvamVjdCIsCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdFcnJvcnMnLCAnY2xjbGFzcyc6ICdsZXJyb3JzJywKKyAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIkhvdyBtYW55IGVycm9ycyB3ZXJlIGVuY291bnRlcmVkIGR1cmluZyB0aGUgbGFzdCBwcm9qZWN0IGJ1aWxkIChpZiBhbnkpIiwKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ1dhcm5pbmdzJywgJ2NsY2xhc3MnOiAnbHdhcm5pbmdzJywKKyAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIkhvdyBtYW55IHdhcm5pZ25zIHdlcmUgZW5jb3VudGVyZWQgZHVyaW5nIHRoZSBsYXN0IHByb2plY3QgYnVpbGQgKGlmIGFueSkiLAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7J25hbWUnOiAnSW1hZ2UgZmlsZXMnLCAnY2xjbGFzcyc6ICdsaW1hZ2VmaWxlcycsICdoaWRkZW4nOiAxLAorICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiVGhlIHJvb3QgZmlsZSBzeXN0ZW0gdHlwZXMgcHJvZHVjZWQgYnkgdGhlIGxhc3QgcHJvamVjdCBidWlsZCIsCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0KKworICAgICAgICBfc2V0X3BhcmFtZXRlcnNfdmFsdWVzKHBhZ2VzaXplLCBvcmRlcmJ5LCByZXF1ZXN0KQorICAgICAgICByZXR1cm4gY29udGV4dApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvd2lkZ2V0cy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3dpZGdldHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIyOTE0ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3dpZGdldHMucHkKQEAgLTAsMCArMSw0MTEgQEAKKyMKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTUgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitmcm9tIGRqYW5nby52aWV3cy5nZW5lcmljIGltcG9ydCBWaWV3LCBUZW1wbGF0ZVZpZXcKK2Zyb20gZGphbmdvLnNob3J0Y3V0cyBpbXBvcnQgSHR0cFJlc3BvbnNlCitmcm9tIGRqYW5nby5odHRwIGltcG9ydCBIdHRwUmVzcG9uc2VCYWRSZXF1ZXN0Citmcm9tIGRqYW5nby5jb3JlIGltcG9ydCBzZXJpYWxpemVycworZnJvbSBkamFuZ28uY29yZS5jYWNoZSBpbXBvcnQgY2FjaGUKK2Zyb20gZGphbmdvLmNvcmUucGFnaW5hdG9yIGltcG9ydCBQYWdpbmF0b3IsIEVtcHR5UGFnZQorZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBRCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFByb2plY3QsIFByb2plY3RMYXllciwgTGF5ZXJfVmVyc2lvbgorZnJvbSBkamFuZ28udGVtcGxhdGUgaW1wb3J0IENvbnRleHQsIFRlbXBsYXRlCitmcm9tIGRqYW5nby5jb3JlLnNlcmlhbGl6ZXJzLmpzb24gaW1wb3J0IERqYW5nb0pTT05FbmNvZGVyCitmcm9tIGRqYW5nby5jb3JlLmV4Y2VwdGlvbnMgaW1wb3J0IEZpZWxkRXJyb3IKK2Zyb20gZGphbmdvLmNvbmYudXJscyBpbXBvcnQgdXJsLCBwYXR0ZXJucworCitpbXBvcnQgdHlwZXMKK2ltcG9ydCBqc29uCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBvcGVyYXRvcgoraW1wb3J0IHJlCisKK2Zyb20gdG9hc3Rlcmd1aS52aWV3cyBpbXBvcnQgb2JqdG9qc29uCisKK2NsYXNzIFRvYXN0ZXJUYWJsZShUZW1wbGF0ZVZpZXcpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihUb2FzdGVyVGFibGUsIHNlbGYpLl9faW5pdF9fKCkKKyAgICAgICAgaWYgJ3RlbXBsYXRlX25hbWUnIGluIGt3YXJnczoKKyAgICAgICAgICAgIHNlbGYudGVtcGxhdGVfbmFtZSA9IGt3YXJnc1sndGVtcGxhdGVfbmFtZSddCisgICAgICAgIHNlbGYudGl0bGUgPSBOb25lCisgICAgICAgIHNlbGYucXVlcnlzZXQgPSBOb25lCisgICAgICAgIHNlbGYuY29sdW1ucyA9IFtdCisgICAgICAgIHNlbGYuZmlsdGVycyA9IHt9CisgICAgICAgIHNlbGYudG90YWxfY291bnQgPSAwCisgICAgICAgIHNlbGYuc3RhdGljX2NvbnRleHRfZXh0cmEgPSB7fQorICAgICAgICBzZWxmLmZpbHRlcl9hY3Rpb25zID0ge30KKyAgICAgICAgc2VsZi5lbXB0eV9zdGF0ZSA9ICJTb3JyeSAtIG5vIGRhdGEgZm91bmQiCisgICAgICAgIHNlbGYuZGVmYXVsdF9vcmRlcmJ5ID0gIiIKKworICAgICAgICAjIGFkZCB0aGUgImlkIiBjb2x1bW4sIHVuZGlzcGxheWFibGUsIGJ5IGRlZmF1bHQKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJJZCIsCisgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5YWJsZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0iaWQiKQorCisKKyAgICBkZWYgZ2V0KHNlbGYsIHJlcXVlc3QsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIHJlcXVlc3QuR0VULmdldCgnZm9ybWF0JywgTm9uZSkgPT0gJ2pzb24nOgorCisgICAgICAgICAgICBzZWxmLnNldHVwX3F1ZXJ5c2V0KCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgICAgICMgUHV0IHRoZSBwcm9qZWN0IGlkIGludG8gdGhlIGNvbnRleHQgZm9yIHRoZSBzdGF0aWNfZGF0YV90ZW1wbGF0ZQorICAgICAgICAgICAgaWYgJ3BpZCcgaW4ga3dhcmdzOgorICAgICAgICAgICAgICAgIHNlbGYuc3RhdGljX2NvbnRleHRfZXh0cmFbJ3BpZCddID0ga3dhcmdzWydwaWQnXQorCisgICAgICAgICAgICBjbWQgPSByZXF1ZXN0LkdFVC5nZXQoJ2NtZCcsIE5vbmUpCisgICAgICAgICAgICBpZiBjbWQgYW5kICdmaWx0ZXJpbmZvJyBpbiBjbWQ6CisgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuZ2V0X2ZpbHRlcl9pbmZvKHJlcXVlc3QsICoqa3dhcmdzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIElmIG5vIGNtZCBpcyBzcGVjaWZpZWQgd2UgZ2l2ZSB5b3UgdGhlIHRhYmxlIGRhdGEKKyAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5nZXRfZGF0YShyZXF1ZXN0LCAqKmt3YXJncykKKworICAgICAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShkYXRhLCBjb250ZW50X3R5cGU9ImFwcGxpY2F0aW9uL2pzb24iKQorCisgICAgICAgIHJldHVybiBzdXBlcihUb2FzdGVyVGFibGUsIHNlbGYpLmdldChyZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgZ2V0X2ZpbHRlcl9pbmZvKHNlbGYsIHJlcXVlc3QsICoqa3dhcmdzKToKKyAgICAgICAgZGF0YSA9IE5vbmUKKworICAgICAgICBzZWxmLnNldHVwX2ZpbHRlcnMoKiprd2FyZ3MpCisKKyAgICAgICAgc2VhcmNoID0gcmVxdWVzdC5HRVQuZ2V0KCJzZWFyY2giLCBOb25lKQorICAgICAgICBpZiBzZWFyY2g6CisgICAgICAgICAgICBzZWxmLmFwcGx5X3NlYXJjaChzZWFyY2gpCisKKyAgICAgICAgbmFtZSA9IHJlcXVlc3QuR0VULmdldCgibmFtZSIsIE5vbmUpCisgICAgICAgIGlmIG5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIGRhdGEgPSBqc29uLmR1bXBzKHNlbGYuZmlsdGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudD0yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzPURqYW5nb0pTT05FbmNvZGVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGFjdGlvbnMgaW4gc2VsZi5maWx0ZXJzW25hbWVdWydmaWx0ZXJfYWN0aW9ucyddOgorICAgICAgICAgICAgICAgIGFjdGlvbnNbJ2NvdW50J10gPSBzZWxmLmZpbHRlcl9hY3Rpb25zW2FjdGlvbnNbJ25hbWUnXV0oY291bnRfb25seT1UcnVlKQorCisgICAgICAgICAgICAjIEFkZCB0aGUgIkFsbCIgaXRlbXMgZmlsdGVyIGFjdGlvbgorICAgICAgICAgICAgc2VsZi5maWx0ZXJzW25hbWVdWydmaWx0ZXJfYWN0aW9ucyddLmluc2VydCgwLCB7CisgICAgICAgICAgICAgICAgJ25hbWUnIDogJ2FsbCcsCisgICAgICAgICAgICAgICAgJ3RpdGxlJyA6ICdBbGwnLAorICAgICAgICAgICAgICAgICdjb3VudCcgOiBzZWxmLnF1ZXJ5c2V0LmNvdW50KCksCisgICAgICAgICAgICB9KQorCisgICAgICAgICAgICBkYXRhID0ganNvbi5kdW1wcyhzZWxmLmZpbHRlcnNbbmFtZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQ9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscz1EamFuZ29KU09ORW5jb2RlcikKKworICAgICAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiBzZXR1cF9jb2x1bW5zKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIiBmdW5jdGlvbiB0byBpbXBsZW1lbnQgaW4gdGhlIHN1YmNsYXNzIHdoaWNoIHNldHMgdXAgdGhlIGNvbHVtbnMgIiIiCisgICAgICAgIHBhc3MKKyAgICBkZWYgc2V0dXBfZmlsdGVycyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiIgZnVuY3Rpb24gdG8gaW1wbGVtZW50IGluIHRoZSBzdWJjbGFzcyB3aGljaCBzZXRzIHVwIHRoZSBmaWx0ZXJzICIiIgorICAgICAgICBwYXNzCisgICAgZGVmIHNldHVwX3F1ZXJ5c2V0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIiBmdW5jdGlvbiB0byBpbXBsZW1lbnQgaW4gdGhlIHN1YmNsYXNzIHdoaWNoIHNldHMgdXAgdGhlIHF1ZXJ5c2V0IiIiCisgICAgICAgIHBhc3MKKworICAgIGRlZiBhZGRfZmlsdGVyKHNlbGYsIG5hbWUsIHRpdGxlLCBmaWx0ZXJfYWN0aW9ucyk6CisgICAgICAgICIiIkFkZCBhIGZpbHRlciB0byB0aGUgdGFibGUuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIG5hbWUgKHN0cik6IFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBmaWx0ZXIuCisgICAgICAgICAgICB0aXRsZSAoc3RyKTogVGl0bGUgb2YgdGhlIGZpbHRlci4KKyAgICAgICAgICAgIGZpbHRlcl9hY3Rpb25zOiBBY3Rpb25zIGZvciBhbGwgdGhlIGZpbHRlcnMuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmZpbHRlcnNbbmFtZV0gPSB7CisgICAgICAgICAgJ3RpdGxlJyA6IHRpdGxlLAorICAgICAgICAgICdmaWx0ZXJfYWN0aW9ucycgOiBmaWx0ZXJfYWN0aW9ucywKKyAgICAgICAgfQorCisgICAgZGVmIG1ha2VfZmlsdGVyX2FjdGlvbihzZWxmLCBuYW1lLCB0aXRsZSwgYWN0aW9uX2Z1bmN0aW9uKToKKyAgICAgICAgIiIiIFV0aWxpdHkgdG8gbWFrZSBhIGZpbHRlcl9hY3Rpb24gIiIiCisKKyAgICAgICAgYWN0aW9uID0geworICAgICAgICAgICd0aXRsZScgOiB0aXRsZSwKKyAgICAgICAgICAnbmFtZScgOiBuYW1lLAorICAgICAgICB9CisKKyAgICAgICAgc2VsZi5maWx0ZXJfYWN0aW9uc1tuYW1lXSA9IGFjdGlvbl9mdW5jdGlvbgorCisgICAgICAgIHJldHVybiBhY3Rpb24KKworICAgIGRlZiBhZGRfY29sdW1uKHNlbGYsIHRpdGxlPSIiLCBoZWxwX3RleHQ9IiIsCisgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlPUZhbHNlLCBoaWRlYWJsZT1UcnVlLCBoaWRkZW49RmFsc2UsCisgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0iIiwgZmlsdGVyX25hbWU9Tm9uZSwgc3RhdGljX2RhdGFfbmFtZT1Ob25lLAorICAgICAgICAgICAgICAgICAgIGRpc3BsYXlhYmxlPVRydWUsIGNvbXB1dGF0aW9uPU5vbmUsCisgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9Tm9uZSk6CisgICAgICAgICIiIkFkZCBhIGNvbHVtbiB0byB0aGUgdGFibGUuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHRpdGxlIChzdHIpOiBUaXRsZSBmb3IgdGhlIHRhYmxlIGhlYWRlcgorICAgICAgICAgICAgaGVscF90ZXh0IChzdHIpOiBPcHRpb25hbCBoZWxwIHRleHQgdG8gZGVzY3JpYmUgdGhlIGNvbHVtbgorICAgICAgICAgICAgb3JkZXJhYmxlIChib29sKTogV2hldGhlciB0aGUgY29sdW1uIGNhbiBiZSBvcmRlcmVkLgorICAgICAgICAgICAgICAgIFdlIG9yZGVyIG9uIHRoZSBmaWVsZF9uYW1lLgorICAgICAgICAgICAgaGlkZWFibGUgKGJvb2wpOiBXaGV0aGVyIHRoZSB1c2VyIGNhbiBoaWRlIHRoZSBjb2x1bW4KKyAgICAgICAgICAgIGhpZGRlbiAoYm9vbCk6IFdoZXRoZXIgdGhlIGNvbHVtbiBpcyBkZWZhdWx0IGhpZGRlbgorICAgICAgICAgICAgZmllbGRfbmFtZSAoc3RyIG9yIGxpc3QpOiBmaWVsZChzKSByZXF1aXJlZCBmb3IgdGhpcyBjb2x1bW4ncyBkYXRhCisgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lIChzdHIsIG9wdGlvbmFsKTogVGhlIGNvbHVtbidzIG1haW4gaWRlbnRpZmllcgorICAgICAgICAgICAgICAgIHdoaWNoIHdpbGwgcmVwbGFjZSB0aGUgZmllbGRfbmFtZS4KKyAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlKHN0ciwgb3B0aW9uYWwpOiBUaGUgdGVtcGxhdGUgdG8gYmUgcmVuZGVyZWQKKyAgICAgICAgICAgICAgICBhcyBkYXRhCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuY29sdW1ucy5hcHBlbmQoeyd0aXRsZScgOiB0aXRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlbHBfdGV4dCcgOiBoZWxwX3RleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcmRlcmFibGUnIDogb3JkZXJhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGlkZWFibGUnIDogaGlkZWFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoaWRkZW4nIDogaGlkZGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmllbGRfbmFtZScgOiBmaWVsZF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsdGVyX25hbWUnIDogZmlsdGVyX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0aWNfZGF0YV9uYW1lJzogc3RhdGljX2RhdGFfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXRpY19kYXRhX3RlbXBsYXRlJzogc3RhdGljX2RhdGFfdGVtcGxhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXNwbGF5YWJsZSc6IGRpc3BsYXlhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tcHV0YXRpb24nOiBjb21wdXRhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQorCisgICAgZGVmIHJlbmRlcl9zdGF0aWNfZGF0YShzZWxmLCB0ZW1wbGF0ZSwgcm93KToKKyAgICAgICAgIiIiVXRpbGl0eSBmdW5jdGlvbiB0byByZW5kZXIgdGhlIHN0YXRpYyBkYXRhIHRlbXBsYXRlIiIiCisKKyAgICAgICAgY29udGV4dCA9IHsKKyAgICAgICAgICAnZXh0cmEnIDogc2VsZi5zdGF0aWNfY29udGV4dF9leHRyYSwKKyAgICAgICAgICAnZGF0YScgOiByb3csCisgICAgICAgIH0KKworICAgICAgICBjb250ZXh0ID0gQ29udGV4dChjb250ZXh0KQorICAgICAgICB0ZW1wbGF0ZSA9IFRlbXBsYXRlKHRlbXBsYXRlKQorCisgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5yZW5kZXIoY29udGV4dCkKKworICAgIGRlZiBhcHBseV9maWx0ZXIoc2VsZiwgZmlsdGVycywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLnNldHVwX2ZpbHRlcnMoKiprd2FyZ3MpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmlsdGVyX25hbWUsIGZpbHRlcl9hY3Rpb24gPSBmaWx0ZXJzLnNwbGl0KCc6JykKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiAiYWxsIiBpbiBmaWx0ZXJfYWN0aW9uOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5maWx0ZXJfYWN0aW9uc1tmaWx0ZXJfYWN0aW9uXSgpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICMgcGFzcyBpdCB0byB0aGUgdXNlciAtIHByb2dyYW1taW5nIGVycm9yIGhlcmUKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgYXBwbHlfb3JkZXJieShzZWxmLCBvcmRlcmJ5KToKKyAgICAgICAgIyBOb3RlIHRoYXQgZGphbmdvIHdpbGwgZXhlY3V0ZSB0aGlzIHdoZW4gd2UgdHJ5IHRvIHJldHJpZXZlIHRoZSBkYXRhCisgICAgICAgIHNlbGYucXVlcnlzZXQgPSBzZWxmLnF1ZXJ5c2V0Lm9yZGVyX2J5KG9yZGVyYnkpCisKKyAgICBkZWYgYXBwbHlfc2VhcmNoKHNlbGYsIHNlYXJjaF90ZXJtKToKKyAgICAgICAgIiIiQ3JlYXRlcyBhIHF1ZXJ5IGJhc2VkIG9uIHRoZSBtb2RlbCdzIHNlYXJjaF9hbGxvd2VkX2ZpZWxkcyIiIgorCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYucXVlcnlzZXQubW9kZWwsICdzZWFyY2hfYWxsb3dlZF9maWVsZHMnKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRXJyIFNlYXJjaCBmaWVsZHMgYXJlbid0IGRlZmluZWQgaW4gdGhlIG1vZGVsIikKKworICAgICAgICBzZWFyY2hfcXVlcmllcyA9IFtdCisgICAgICAgIGZvciBzdCBpbiBzZWFyY2hfdGVybS5zcGxpdCgiICIpOgorICAgICAgICAgICAgcV9tYXAgPSBbUSgqKntmaWVsZCArICdfX2ljb250YWlucyc6IHN0fSkKKyAgICAgICAgICAgICAgICAgICAgIGZvciBmaWVsZCBpbiBzZWxmLnF1ZXJ5c2V0Lm1vZGVsLnNlYXJjaF9hbGxvd2VkX2ZpZWxkc10KKworICAgICAgICAgICAgc2VhcmNoX3F1ZXJpZXMuYXBwZW5kKHJlZHVjZShvcGVyYXRvci5vcl8sIHFfbWFwKSkKKworICAgICAgICBzZWFyY2hfcXVlcmllcyA9IHJlZHVjZShvcGVyYXRvci5hbmRfLCBzZWFyY2hfcXVlcmllcykKKworICAgICAgICBzZWxmLnF1ZXJ5c2V0ID0gc2VsZi5xdWVyeXNldC5maWx0ZXIoc2VhcmNoX3F1ZXJpZXMpCisKKworICAgIGRlZiBnZXRfZGF0YShzZWxmLCByZXF1ZXN0LCAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGRhdGEgZm9yIHRoZSBwYWdlIHJlcXVlc3RlZCB3aXRoIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgcGFyYW1ldGVycyBhcHBsaWVkIiIiCisKKyAgICAgICAgcGFnZV9udW0gPSByZXF1ZXN0LkdFVC5nZXQoInBhZ2UiLCAxKQorICAgICAgICBsaW1pdCA9IHJlcXVlc3QuR0VULmdldCgibGltaXQiLCAxMCkKKyAgICAgICAgc2VhcmNoID0gcmVxdWVzdC5HRVQuZ2V0KCJzZWFyY2giLCBOb25lKQorICAgICAgICBmaWx0ZXJzID0gcmVxdWVzdC5HRVQuZ2V0KCJmaWx0ZXIiLCBOb25lKQorICAgICAgICBvcmRlcmJ5ID0gcmVxdWVzdC5HRVQuZ2V0KCJvcmRlcmJ5IiwgTm9uZSkKKworICAgICAgICAjIE1ha2UgYSB1bmlxdWUgY2FjaGUgbmFtZQorICAgICAgICBjYWNoZV9uYW1lID0gc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKworICAgICAgICBmb3Iga2V5LCB2YWwgaW4gcmVxdWVzdC5HRVQuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBjYWNoZV9uYW1lID0gY2FjaGVfbmFtZSArIHN0cihrZXkpICsgc3RyKHZhbCkKKworICAgICAgICBmb3Iga2V5LCB2YWwgaW4ga3dhcmdzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgY2FjaGVfbmFtZSA9IGNhY2hlX25hbWUgKyBzdHIoa2V5KSArIHN0cih2YWwpCisKKyAgICAgICAgIyBObyBzcGVjaWFsIGNoYXJzIGFsbG93ZWQgaW4gdGhlIGNhY2hlIG5hbWUgYXBhcnQgZnJvbSBkYXNoCisgICAgICAgIGNhY2hlX25hbWUgPSByZS5zdWIocidbXkEtWmEtejAtOS1dJywgIiIsIGNhY2hlX25hbWUpCisgICAgICAgIGRhdGEgPSBjYWNoZS5nZXQoY2FjaGVfbmFtZSkKKworICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgcmV0dXJuIGRhdGEKKworICAgICAgICBzZWxmLnNldHVwX2NvbHVtbnMoKiprd2FyZ3MpCisKKyAgICAgICAgaWYgc2VhcmNoOgorICAgICAgICAgICAgc2VsZi5hcHBseV9zZWFyY2goc2VhcmNoKQorICAgICAgICBpZiBmaWx0ZXJzOgorICAgICAgICAgICAgc2VsZi5hcHBseV9maWx0ZXIoZmlsdGVycywgKiprd2FyZ3MpCisgICAgICAgIGlmIG9yZGVyYnk6CisgICAgICAgICAgICBzZWxmLmFwcGx5X29yZGVyYnkob3JkZXJieSkKKworICAgICAgICBwYWdpbmF0b3IgPSBQYWdpbmF0b3Ioc2VsZi5xdWVyeXNldCwgbGltaXQpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFnZSA9IHBhZ2luYXRvci5wYWdlKHBhZ2VfbnVtKQorICAgICAgICBleGNlcHQgRW1wdHlQYWdlOgorICAgICAgICAgICAgcGFnZSA9IHBhZ2luYXRvci5wYWdlKDEpCisKKyAgICAgICAgZGF0YSA9IHsKKyAgICAgICAgICAgICd0b3RhbCcgOiBzZWxmLnF1ZXJ5c2V0LmNvdW50KCksCisgICAgICAgICAgICAnZGVmYXVsdF9vcmRlcmJ5JyA6IHNlbGYuZGVmYXVsdF9vcmRlcmJ5LAorICAgICAgICAgICAgJ2NvbHVtbnMnIDogc2VsZi5jb2x1bW5zLAorICAgICAgICAgICAgJ3Jvd3MnIDogW10sCisgICAgICAgICAgICAnZXJyb3InIDogIm9rIiwKKyAgICAgICAgfQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciByb3cgaW4gcGFnZS5vYmplY3RfbGlzdDoKKyAgICAgICAgICAgICAgICAjVXNlIGNvbGxlY3Rpb24gdG8gbWFpbnRhaW4gdGhlIG9yZGVyCisgICAgICAgICAgICAgICAgcmVxdWlyZWRfZGF0YSA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKworICAgICAgICAgICAgICAgIGZvciBjb2wgaW4gc2VsZi5jb2x1bW5zOgorICAgICAgICAgICAgICAgICAgICBmaWVsZCA9IGNvbFsnZmllbGRfbmFtZSddCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBmaWVsZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkID0gY29sWydzdGF0aWNfZGF0YV9uYW1lJ10KKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGZpZWxkOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJNdXN0IHN1cHBseSBhIGZpZWxkX25hbWUgb3Igc3RhdGljX2RhdGFfbmFtZSBmb3IgY29sdW1uICVzLiVzIiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXyxjb2wpKQorICAgICAgICAgICAgICAgICAgICAjIENoZWNrIGlmIHdlIG5lZWQgdG8gcHJvY2VzcyBzb21lIHN0YXRpYyBkYXRhCisgICAgICAgICAgICAgICAgICAgIGlmICJzdGF0aWNfZGF0YV9uYW1lIiBpbiBjb2wgYW5kIGNvbFsnc3RhdGljX2RhdGFfbmFtZSddOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRfZGF0YVsic3RhdGljOiVzIiAlIGNvbFsnc3RhdGljX2RhdGFfbmFtZSddXSA9IHNlbGYucmVuZGVyX3N0YXRpY19kYXRhKGNvbFsnc3RhdGljX2RhdGFfdGVtcGxhdGUnXSwgcm93KQorCisgICAgICAgICAgICAgICAgICAgICAgICAjIE92ZXJ3cml0ZSB0aGUgZmllbGRfbmFtZSB3aXRoIHN0YXRpY19kYXRhX25hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgc28gdGhhdCB0aGlzIGNhbiBiZSB1c2VkIGFzIHRoZSBodG1sIGNsYXNzIG5hbWUKKworICAgICAgICAgICAgICAgICAgICAgICAgY29sWydmaWVsZF9uYW1lJ10gPSBjb2xbJ3N0YXRpY19kYXRhX25hbWUnXQorCisgICAgICAgICAgICAgICAgICAgICMgY29tcHV0ZSB0aGUgY29tcHV0YXRpb24gb24gdGhlIHJhdyBkYXRhIGlmIG5lZWRlZAorICAgICAgICAgICAgICAgICAgICBtb2RlbF9kYXRhID0gcm93CisgICAgICAgICAgICAgICAgICAgIGlmIGNvbFsnY29tcHV0YXRpb24nXToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX2RhdGEgPSBjb2xbJ2NvbXB1dGF0aW9uJ10ocm93KQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBUcmF2ZXJzZSB0byBhbnkgZm9yaWVnbiBrZXkgaW4gdGhlIG9iamVjdCBoaWVyYWNoeQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHN1YmZpZWxkIGluIGZpZWxkLnNwbGl0KCJfXyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIobW9kZWxfZGF0YSwgc3ViZmllbGQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9kYXRhID0gZ2V0YXR0cihtb2RlbF9kYXRhLCBzdWJmaWVsZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIGZpZWxkIGNvdWxkIGJlIGEgZnVuY3Rpb24gb24gdGhlIG1vZGVsIHNvIGNoZWNrCisgICAgICAgICAgICAgICAgICAgICAgICAjIElmIGl0IGlzIHRoZW4gY2FsbCBpdAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtb2RlbF9kYXRhLCB0eXBlcy5NZXRob2RUeXBlKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfZGF0YSA9IG1vZGVsX2RhdGEoKQorCisgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkX2RhdGFbY29sWydmaWVsZF9uYW1lJ11dID0gbW9kZWxfZGF0YQorCisgICAgICAgICAgICAgICAgZGF0YVsncm93cyddLmFwcGVuZChyZXF1aXJlZF9kYXRhKQorCisgICAgICAgIGV4Y2VwdCBGaWVsZEVycm9yOgorICAgICAgICAgICAgIyBwYXNzICBpdCB0byB0aGUgdXNlciAtIHByb2dyYW1taW5nLWVycm9yIGhlcmUKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGRhdGEgPSBqc29uLmR1bXBzKGRhdGEsIGluZGVudD0yLCBkZWZhdWx0PW9ianRvanNvbikKKyAgICAgICAgY2FjaGUuc2V0KGNhY2hlX25hbWUsIGRhdGEsIDYwKjMwKQorCisgICAgICAgIHJldHVybiBkYXRhCisKKworY2xhc3MgVG9hc3RlclRlbXBsYXRlVmlldyhUZW1wbGF0ZVZpZXcpOgorICAgICMgcmVuZGVycyBhIGluc3RhbmNlIGluIGEgdGVtcGxhdGUsIG9yIHJldHVybnMgdGhlIGNvbnRleHQgYXMganNvbgorICAgICMgdGhlIGNsYXNzLWVxdWl2YWxlbnQgb2YgdGhlIF90ZW1wbGF0ZV9yZW5kZXJlciBkZWNvcmF0b3IgZm9yIHZpZXdzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoVG9hc3RlclRlbXBsYXRlVmlldywgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmNvbnRleHRfZW50cmllcyA9IFtdCisKKyAgICBkZWYgZ2V0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIHNlbGYucmVxdWVzdC5HRVQuZ2V0KCdmb3JtYXQnLCBOb25lKSA9PSAnanNvbic6CisgICAgICAgICAgICBmcm9tIGRqYW5nby5jb3JlLnVybHJlc29sdmVycyBpbXBvcnQgcmV2ZXJzZQorICAgICAgICAgICAgZnJvbSBkamFuZ28uc2hvcnRjdXRzIGltcG9ydCBIdHRwUmVzcG9uc2UKKyAgICAgICAgICAgIGZyb20gdmlld3MgaW1wb3J0IG9ianRvanNvbgorICAgICAgICAgICAgZnJvbSB0b2FzdGVyZ3VpLnRlbXBsYXRldGFncy5wcm9qZWN0dGFncyBpbXBvcnQganNvbiBhcyBqc29uZmlsdGVyCisKKyAgICAgICAgICAgIGNvbnRleHQgPSBzZWxmLmdldF9jb250ZXh0X2RhdGEoKiprd2FyZ3MpCisKKyAgICAgICAgICAgIGZvciB4IGluIGNvbnRleHQua2V5cygpOgorICAgICAgICAgICAgICAgIGlmIHggbm90IGluIHNlbGYuY29udGV4dF9lbnRyaWVzOgorICAgICAgICAgICAgICAgICAgICBkZWwgY29udGV4dFt4XQorCisgICAgICAgICAgICBjb250ZXh0WyJlcnJvciJdID0gIm9rIgorCisgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb25maWx0ZXIoY29udGV4dCwgIGRlZmF1bHQ9b2JqdG9qc29uICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlID0gImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgiKQorCisgICAgICAgIHJldHVybiBzdXBlcihUb2FzdGVyVGVtcGxhdGVWaWV3LCBzZWxmKS5nZXQoKmFyZ3MsICoqa3dhcmdzKQorCitjbGFzcyBUb2FzdGVyVHlwZUFoZWFkKFZpZXcpOgorICAgICIiIiBBIHR5cGVhaGVhZCBtZWNoYW5pc20gdG8gc3VwcG9ydCB0aGUgZnJvbnQgZW5kIHR5cGVhaGVhZCB3aWRnZXRzICIiIgorICAgIE1BWF9SRVNVTFRTID0gNgorCisgICAgY2xhc3MgTWlzc2luZ0ZpZWxkc0V4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoVG9hc3RlclR5cGVBaGVhZCwgc2VsZikuX19pbml0X18oKQorCisgICAgZGVmIGdldChzZWxmLCByZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBkZWYgcmVzcG9uc2UoZGF0YSk6CisgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb24uZHVtcHMoZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQ9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM9RGphbmdvSlNPTkVuY29kZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X3R5cGU9ImFwcGxpY2F0aW9uL2pzb24iKQorCisgICAgICAgIGVycm9yID0gIm9rIgorCisgICAgICAgIHNlYXJjaF90ZXJtID0gcmVxdWVzdC5HRVQuZ2V0KCJzZWFyY2giLCBOb25lKQorICAgICAgICBpZiBzZWFyY2hfdGVybSA9PSBOb25lOgorICAgICAgICAgICAgIyBXZSBnb3Qgbm8gc2VhcmNoIHZhbHVlIHNvIHJldHVybiBlbXB0eSByZXBvbnNlCisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UoeydlcnJvcicgOiBlcnJvciAsICdyZXN1bHRzJzogW119KQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByaiA9IFByb2plY3Qub2JqZWN0cy5nZXQocGs9a3dhcmdzWydwaWQnXSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcHJqID0gTm9uZQorCisgICAgICAgIHJlc3VsdHMgPSBzZWxmLmFwcGx5X3NlYXJjaChzZWFyY2hfdGVybSwgcHJqLCByZXF1ZXN0KVs6VG9hc3RlclR5cGVBaGVhZC5NQVhfUkVTVUxUU10KKworICAgICAgICBpZiBsZW4ocmVzdWx0cykgPiAwOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYudmFsaWRhdGVfZmllbGRzKHJlc3VsdHNbMF0pCisgICAgICAgICAgICBleGNlcHQgTWlzc2luZ0ZpZWxkc0V4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIGVycm9yID0gZQorCisgICAgICAgIGRhdGEgPSB7ICdyZXN1bHRzJyA6IHJlc3VsdHMsCisgICAgICAgICAgICAgICAgJ2Vycm9yJyA6IGVycm9yLAorICAgICAgICAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXNwb25zZShkYXRhKQorCisgICAgZGVmIHZhbGlkYXRlX2ZpZWxkcyhzZWxmLCByZXN1bHQpOgorICAgICAgICBpZiAnbmFtZScgaW4gcmVzdWx0ID09IEZhbHNlIG9yICdkZXRhaWwnIGluIHJlc3VsdCA9PSBGYWxzZToKKyAgICAgICAgICAgIHJhaXNlIE1pc3NpbmdGaWVsZHNFeGNlcHRpb24oIm5hbWUgYW5kIGRldGFpbCBhcmUgcmVxdWlyZWQgZmllbGRzIikKKworICAgIGRlZiBhcHBseV9zZWFyY2goc2VsZiwgc2VhcmNoX3Rlcm0sIHByaik6CisgICAgICAgICIiIiBPdmVycmlkZSB0aGlzIGZ1bmN0aW9uIHRvIGltcGxlbWVudCBzZWFyY2guIFJldHVybiBhbiBhcnJheSBvZgorICAgICAgICBkaWN0aW9uYXJpZXMgd2l0aCBhIG1pbml1bSBvZiBhIG5hbWUgYW5kIGRldGFpbCBmaWVsZCIiIgorICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL21hbmFnZW1lbnQvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL21hbmFnZW1lbnQvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L2NvbW1hbmRzL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL21hbmFnZW1lbnQvY29tbWFuZHMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L2NvbW1hbmRzL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9jb21tYW5kcy9idWlsZGRlbGV0ZS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L2NvbW1hbmRzL2J1aWxkZGVsZXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0M2QzMTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9jb21tYW5kcy9idWlsZGRlbGV0ZS5weQpAQCAtMCwwICsxLDQ5IEBACitmcm9tIGRqYW5nby5jb3JlLm1hbmFnZW1lbnQuYmFzZSBpbXBvcnQgQmFzZUNvbW1hbmQsIENvbW1hbmRFcnJvcgorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBCdWlsZAorZnJvbSBkamFuZ28uZGIgaW1wb3J0IE9wZXJhdGlvbmFsRXJyb3IKK2ltcG9ydCBvcworCisKKworY2xhc3MgQ29tbWFuZChCYXNlQ29tbWFuZCk6CisgICAgYXJncyAgICA9ICJidWlsZElkIgorICAgIGhlbHAgICAgPSAiRGVsZXRlcyBzZWxlY3RlZCBidWlsZChzKSIKKworICAgIGRlZiBoYW5kbGUoc2VsZiwgYnVpbGRJZCwgKmFyZ3MsICoqb3B0aW9ucyk6CisgICAgICAgIGZvciBiaWQgaW4gYnVpbGRJZC5zcGxpdCgiLCIpOgorICAgICAgICAgICAgYiA9IEJ1aWxkLm9iamVjdHMuZ2V0KHBrID0gYmlkKQorICAgICAgICAgICAgIyB0aGVvcmV0aWNhbGx5LCBqdXN0IGIuZGVsZXRlKCkgd291bGQgc3VmZmljZQorICAgICAgICAgICAgIyBob3dldmVyIFNRTGl0ZSBydW5zIGludG8gcHJvYmxlbXMgd2hlbiB5b3UgdHJ5IHRvCisgICAgICAgICAgICAjIGRlbGV0ZSB0b28gbWFueSByb3dzIGF0IG9uY2UsIHNvIHdlIGRlbGV0ZSBzb21lIGRpcmVjdAorICAgICAgICAgICAgIyByZWxhdGlvbnNoaXBzIGZyb20gQnVpbGQgbWFudWFsbHkuCisgICAgICAgICAgICBmb3IgdCBpbiBiLnRhcmdldF9zZXQuYWxsKCk6CisgICAgICAgICAgICAgICAgdC5kZWxldGUoKQorICAgICAgICAgICAgZm9yIHQgaW4gYi50YXNrX2J1aWxkLmFsbCgpOgorICAgICAgICAgICAgICAgIHQuZGVsZXRlKCkKKyAgICAgICAgICAgIGZvciBwIGluIGIucGFja2FnZV9zZXQuYWxsKCk6CisgICAgICAgICAgICAgICAgcC5kZWxldGUoKQorICAgICAgICAgICAgZm9yIGx2IGluIGIubGF5ZXJfdmVyc2lvbl9idWlsZC5hbGwoKToKKyAgICAgICAgICAgICAgICBsdi5kZWxldGUoKQorICAgICAgICAgICAgZm9yIHYgaW4gYi52YXJpYWJsZV9idWlsZC5hbGwoKToKKyAgICAgICAgICAgICAgICB2LmRlbGV0ZSgpCisgICAgICAgICAgICBmb3IgbCBpbiBiLmxvZ21lc3NhZ2Vfc2V0LmFsbCgpOgorICAgICAgICAgICAgICAgIGwuZGVsZXRlKCkKKworICAgICAgICAgICAgIyBkZWxldGUgdGhlIGJ1aWxkOyBzb21lIGRhdGFiYXNlcyBtaWdodCBoYXZlIGhhZCBwcm9ibGVtIHdpdGggbWlncmF0aW9uIG9mIHRoZSBibGRjb250cm9sIGFwcAorICAgICAgICAgICAgcmV0cnlfY291bnQgPSAwCisgICAgICAgICAgICBuZWVkX2JsZGNvbnRyb2xfbWlncmF0aW9uID0gRmFsc2UKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgaWYgcmV0cnlfY291bnQgPj0gNToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICByZXRyeV9jb3VudCArPSAxCisgICAgICAgICAgICAgICAgaWYgbmVlZF9ibGRjb250cm9sX21pZ3JhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgZnJvbSBkamFuZ28uY29yZSBpbXBvcnQgbWFuYWdlbWVudAorICAgICAgICAgICAgICAgICAgICBtYW5hZ2VtZW50LmNhbGxfY29tbWFuZCgnbWlncmF0ZScsICdibGRjb250cm9sJywgaW50ZXJhY3RpdmU9RmFsc2UpCisKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGIuZGVsZXRlKCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBleGNlcHQgT3BlcmF0aW9uYWxFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAjIGV4ZWN1dGUgbWlncmF0aW9ucworICAgICAgICAgICAgICAgICAgICBuZWVkX2JsZGNvbnRyb2xfbWlncmF0aW9uID0gVHJ1ZQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9jb21tYW5kcy9idWlsZHNsaXN0LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL21hbmFnZW1lbnQvY29tbWFuZHMvYnVpbGRzbGlzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWQ5ODdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL21hbmFnZW1lbnQvY29tbWFuZHMvYnVpbGRzbGlzdC5weQpAQCAtMCwwICsxLDEzIEBACitmcm9tIGRqYW5nby5jb3JlLm1hbmFnZW1lbnQuYmFzZSBpbXBvcnQgTm9BcmdzQ29tbWFuZCwgQ29tbWFuZEVycm9yCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IEJ1aWxkCitpbXBvcnQgb3MKKworCisKK2NsYXNzIENvbW1hbmQoTm9BcmdzQ29tbWFuZCk6CisgICAgYXJncyAgICA9ICIiCisgICAgaGVscCAgICA9ICJMaXN0cyBjdXJyZW50IGJ1aWxkcyIKKworICAgIGRlZiBoYW5kbGVfbm9hcmdzKHNlbGYsKipvcHRpb25zKToKKyAgICAgICAgZm9yIGIgaW4gQnVpbGQub2JqZWN0cy5hbGwoKToKKyAgICAgICAgICAgIHByaW50ICIlZDogJXMgJXMgJXMiICUgKGIucGssIGIubWFjaGluZSwgYi5kaXN0cm8sICIsIi5qb2luKFt4LnRhcmdldCBmb3IgeCBpbiBiLnRhcmdldF9zZXQuYWxsKCldKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L2NvbW1hbmRzL3BlcmYucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9jb21tYW5kcy9wZXJmLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYTQ4ZTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9jb21tYW5kcy9wZXJmLnB5CkBAIC0wLDAgKzEsNTggQEAKK2Zyb20gZGphbmdvLmNvcmUubWFuYWdlbWVudC5iYXNlIGltcG9ydCBCYXNlQ29tbWFuZAorZnJvbSBkamFuZ28udGVzdC5jbGllbnQgaW1wb3J0IENsaWVudAoraW1wb3J0IG9zLCBzeXMsIHJlCitpbXBvcnQgcmVxdWVzdHMKK2Zyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCisKKyMgcHlsaW50OiBkaXNhYmxlPUUxMTAzCisjIEluc3RhbmNlIG9mICdXU0dJUmVxdWVzdCcgaGFzIG5vICdzdGF0dXNfY29kZScgbWVtYmVyCisjIChidXQgc29tZSB0eXBlcyBjb3VsZCBub3QgYmUgaW5mZXJyZWQpIChtYXliZS1uby1tZW1iZXIpCisKKworY2xhc3MgQ29tbWFuZChCYXNlQ29tbWFuZCk6CisgICAgaGVscCAgICA9ICJUZXN0IHRoZSByZXNwb25zZSB0aW1lIGZvciBhbGwgdG9hc3RlciB1cmxzIgorCisgICAgZGVmIGhhbmRsZShzZWxmLCAqYXJncywgKipvcHRpb25zKToKKwlyb290X3VybGNvbmYgPSBfX2ltcG9ydF9fKHNldHRpbmdzLlJPT1RfVVJMQ09ORikKKwlwYXR0ZXJucyA9IHJvb3RfdXJsY29uZi51cmxzLnVybHBhdHRlcm5zCisJZ2xvYmFsIGZ1bGxfdXJsCisJZm9yIHBhdCBpbiBwYXR0ZXJuczoKKwkgICAgaWYgcGF0Ll9fY2xhc3NfXy5fX25hbWVfXyA9PSAnUmVnZXhVUkxSZXNvbHZlcic6CisJCXVybF9yb290X3JlcyA9IHN0cihwYXQpLnNwbGl0KCdeJylbMV0ucmVwbGFjZSgnPicsICcnKQorCQlpZiAnZ3VpJyBpbiB1cmxfcm9vdF9yZXM6CisJCSAgICBmb3IgdXJsX3BhdHQgaW4gcGF0LnVybF9wYXR0ZXJuczoKKwkJCWZ1bGxfdXJsID0gc2VsZi5nZXRfZnVsbF91cmwodXJsX3BhdHQsIHVybF9yb290X3JlcykKKwkJCWluZm8gPSBzZWxmLnVybF9pbmZvKGZ1bGxfdXJsKQorCQkJc3RhdHVzX2NvZGUgPSBpbmZvWzBdCisJCQlsb2FkX3RpbWUgPSBpbmZvWzFdCisJCQlwcmludCAnVHJ5aW5nIFwnJyArIGZ1bGxfdXJsICsgJ1wnLCAnICsgc3RyKHN0YXR1c19jb2RlKSArICcsICcgKyBzdHIobG9hZF90aW1lKQorCisgICAgZGVmIGdldF9mdWxsX3VybChzZWxmLCB1cmxfcGF0dCwgdXJsX3Jvb3RfcmVzKToKKwlmdWxsX3VybCA9IHN0cih1cmxfcGF0dCkuc3BsaXQoJ14nKVsxXS5yZXBsYWNlKCckPicsICcnKS5yZXBsYWNlKCcoP1A8ZmlsZV9wYXRoPig/Oi9bJywgJy9iaW4vYnVzeWJveCcpLnJlcGxhY2UoJy4qJywgJycpCisJZnVsbF91cmwgPSBzdHIodXJsX3Jvb3RfcmVzICsgZnVsbF91cmwpCisJZnVsbF91cmwgPSByZS5zdWIoJ1woXD9QPC4qPz5cXFxkXCtcKScsICcxJywgZnVsbF91cmwpCisJZnVsbF91cmwgPSAnaHR0cDovL2xvY2FsaG9zdDo4MDAwLycgKyBmdWxsX3VybAorCXJldHVybiBmdWxsX3VybAorCisgICAgZGVmIHVybF9pbmZvKHNlbGYsIGZ1bGxfdXJsKToKKwljbGllbnQgPSBDbGllbnQoKQorCWluZm8gPSBbXQorCXRyeToKKwkgICAgcmVzcCA9IGNsaWVudC5nZXQoZnVsbF91cmwsIGZvbGxvdyA9IFRydWUpCisJZXhjZXB0IEV4Y2VwdGlvbiBhcyBlX3N0YXR1c19jb2RlOgorICAgICAgICAgICAgc2VsZi5lcnJvcignVXJsOiAlcywgZXJyb3I6ICVzJyAlIChmdWxsX3VybCwgZV9zdGF0dXNfY29kZSkpCisgICAgICAgICAgICByZXNwID0gdHlwZSgnb2JqZWN0JywgKCksIHsnc3RhdHVzX2NvZGUnOjAsICdjb250ZW50Jzogc3RyKGVfc3RhdHVzX2NvZGUpfSkKKwlzdGF0dXNfY29kZSA9IHJlc3Auc3RhdHVzX2NvZGUKKwlpbmZvLmFwcGVuZChzdGF0dXNfY29kZSkKKwl0cnk6CisJICAgIHJlcSA9IHJlcXVlc3RzLmdldChmdWxsX3VybCkKKwlleGNlcHQgRXhjZXB0aW9uIGFzIGVfbG9hZF90aW1lOgorICAgICAgICAgICAgc2VsZi5lcnJvcignVXJsOiAlcywgZXJyb3I6ICVzJyAlIChmdWxsX3VybCwgZV9sb2FkX3RpbWUpKQorCWxvYWRfdGltZSA9IHJlcS5lbGFwc2VkCisJaW5mby5hcHBlbmQobG9hZF90aW1lKQorCXJldHVybiBpbmZvCisKKyAgICBkZWYgZXJyb3Ioc2VsZiwgKmFyZ3MpOgorCWZvciBhcmcgaW4gYXJnczoKKwkgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCBhcmcsCisJcHJpbnQgPj5zeXMuc3RkZXJyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vc2V0dGluZ3MucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vc2V0dGluZ3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE0OWE1ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9zZXR0aW5ncy5weQpAQCAtMCwwICsxLDQxMCBAQAorIworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyMgRGphbmdvIHNldHRpbmdzIGZvciBUb2FzdGVyIHByb2plY3QuCisKK2ltcG9ydCBvcywgcmUKKworREVCVUcgPSBUcnVlCitURU1QTEFURV9ERUJVRyA9IERFQlVHCisKKyMgU2V0IHRvIFRydWUgdG8gc2VlIHRoZSBTUUwgcXVlcmllcyBpbiBjb25zb2xlCitTUUxfREVCVUcgPSBGYWxzZQoraWYgb3MuZW52aXJvbi5nZXQoIlRPQVNURVJfU1FMREVCVUciLCBOb25lKSBpcyBub3QgTm9uZToKKyAgICBTUUxfREVCVUcgPSBUcnVlCisKKworQURNSU5TID0gKAorICAgICMgKCdZb3VyIE5hbWUnLCAneW91cl9lbWFpbEBleGFtcGxlLmNvbScpLAorKQorCitNQU5BR0VSUyA9IEFETUlOUworCitEQVRBQkFTRVMgPSB7CisgICAgJ2RlZmF1bHQnOiB7CisgICAgICAgICdFTkdJTkUnOiAnZGphbmdvLmRiLmJhY2tlbmRzLnNxbGl0ZTMnLCAjIEFkZCAncG9zdGdyZXNxbF9wc3ljb3BnMicsICdteXNxbCcsICdzcWxpdGUzJyBvciAnb3JhY2xlJy4KKyAgICAgICAgJ05BTUUnOiAndG9hc3Rlci5zcWxpdGUnLCAgICAgICAgICAgICAgICAgICAgICAjIE9yIHBhdGggdG8gZGF0YWJhc2UgZmlsZSBpZiB1c2luZyBzcWxpdGUzLgorICAgICAgICAnVVNFUic6ICcnLAorICAgICAgICAnUEFTU1dPUkQnOiAnJywKKyAgICAgICAgJ0hPU1QnOiAnMTI3LjAuMC4xJywgICAgICAgICAgICAgICAgICAgICAgIyBFbXB0eSBmb3IgbG9jYWxob3N0IHRocm91Z2ggZG9tYWluIHNvY2tldHMgb3IgJzEyNy4wLjAuMScgZm9yIGxvY2FsaG9zdCB0aHJvdWdoIFRDUC4KKyAgICAgICAgJ1BPUlQnOiAnMzMwNicsICAgICAgICAgICAgICAgICAgICAgICMgU2V0IHRvIGVtcHR5IHN0cmluZyBmb3IgZGVmYXVsdC4KKyAgICB9Cit9CisKKyMgTmVlZGVkIHdoZW4gVXNpbmcgc3FsaXRlIGVzcGVjaWFsbHkgdG8gYWRkIGEgbG9uZ2VyIHRpbWVvdXQgZm9yIHdhaXRpbmcKKyMgZm9yIHRoZSBkYXRhYmFzZSBsb2NrIHRvIGJlICByZWxlYXNlZAorIyBodHRwczovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vZW4vMS42L3JlZi9kYXRhYmFzZXMvI2RhdGFiYXNlLWlzLWxvY2tlZC1lcnJvcnMKK2lmICdzcWxpdGUnIGluIERBVEFCQVNFU1snZGVmYXVsdCddWydFTkdJTkUnXToKKyAgICBEQVRBQkFTRVNbJ2RlZmF1bHQnXVsnT1BUSU9OUyddID0geyAndGltZW91dCc6IDIwIH0KKworIyBSZWludGVycHJldCBkYXRhYmFzZSBzZXR0aW5ncyBpZiB3ZSBoYXZlIERBVEFCQVNFX1VSTCBlbnZpcm9ubWVudCB2YXJpYWJsZSBkZWZpbmVkCisKK2lmICdEQVRBQkFTRV9VUkwnIGluIG9zLmVudmlyb246CisgICAgZGJ1cmwgPSBvcy5lbnZpcm9uWydEQVRBQkFTRV9VUkwnXQorICAgIGlmIGRidXJsLnN0YXJ0c3dpdGgoJ3NxbGl0ZTM6Ly8nKToKKyAgICAgICAgcmVzdWx0ID0gcmUubWF0Y2goJ3NxbGl0ZTM6Ly8oLiopJywgZGJ1cmwpCisgICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFUlJPUjogQ291bGQgbm90IHJlYWQgc3FsaXRlIGRhdGFiYXNlIHVybDogJXMiICUgZGJ1cmwpCisgICAgICAgIERBVEFCQVNFU1snZGVmYXVsdCddID0geworICAgICAgICAgICAgJ0VOR0lORSc6ICdkamFuZ28uZGIuYmFja2VuZHMuc3FsaXRlMycsCisgICAgICAgICAgICAnTkFNRSc6IHJlc3VsdC5ncm91cCgxKSwKKyAgICAgICAgICAgICdVU0VSJzogJycsCisgICAgICAgICAgICAnUEFTU1dPUkQnOiAnJywKKyAgICAgICAgICAgICdIT1NUJzogJycsCisgICAgICAgICAgICAnUE9SVCc6ICcnLAorICAgICAgICB9CisgICAgZWxpZiBkYnVybC5zdGFydHN3aXRoKCdteXNxbDovLycpOgorICAgICAgICAjIFVSTCBtdXN0IGJlIGluIHRoaXMgZm9ybTogbXlzcWw6Ly91c2VyOnBhc3NAaG9zdDpwb3J0L25hbWUKKyAgICAgICAgcmVzdWx0ID0gcmUubWF0Y2gociJteXNxbDovLyhbXjpdKik6KFteQF0qKUAoW146XSopOihcZCspLyhbXi9dKikiLCBkYnVybCkKKyAgICAgICAgaWYgcmVzdWx0IGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkVSUk9SOiBDb3VsZCBub3QgcmVhZCBteXNxbCBkYXRhYmFzZSB1cmw6ICVzIiAlIGRidXJsKQorICAgICAgICBEQVRBQkFTRVNbJ2RlZmF1bHQnXSA9IHsKKyAgICAgICAgICAgICdFTkdJTkUnOiAnZGphbmdvLmRiLmJhY2tlbmRzLm15c3FsJywKKyAgICAgICAgICAgICdOQU1FJzogcmVzdWx0Lmdyb3VwKDUpLAorICAgICAgICAgICAgJ1VTRVInOiByZXN1bHQuZ3JvdXAoMSksCisgICAgICAgICAgICAnUEFTU1dPUkQnOiByZXN1bHQuZ3JvdXAoMiksCisgICAgICAgICAgICAnSE9TVCc6IHJlc3VsdC5ncm91cCgzKSwKKyAgICAgICAgICAgICdQT1JUJzogcmVzdWx0Lmdyb3VwKDQpLAorICAgICAgICB9CisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGSVhNRTogUGxlYXNlIGltcGxlbWVudCBtaXNzaW5nIGRhdGFiYXNlIHVybCBzY2hlbWEgZm9yIHVybDogJXMiICUgZGJ1cmwpCisKKworaWYgJ1RPQVNURVJfTUFOQUdFRCcgaW4gb3MuZW52aXJvbiBhbmQgb3MuZW52aXJvblsnVE9BU1RFUl9NQU5BR0VEJ10gPT0gIjEiOgorICAgIE1BTkFHRUQgPSBUcnVlCitlbHNlOgorICAgIE1BTkFHRUQgPSBGYWxzZQorCisjIEFsbG93cyBjdXJyZW50IGRhdGFiYXNlIHNldHRpbmdzIHRvIGJlIGV4cG9ydGVkIGFzIGEgREFUQUJBU0VfVVJMIGVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlCisKK2RlZiBnZXREQVRBQkFTRV9VUkwoKToKKyAgICBkID0gREFUQUJBU0VTWydkZWZhdWx0J10KKyAgICBpZiBkWydFTkdJTkUnXSA9PSAnZGphbmdvLmRiLmJhY2tlbmRzLnNxbGl0ZTMnOgorICAgICAgICBpZiBkWydOQU1FJ10gPT0gJzptZW1vcnk6JzoKKyAgICAgICAgICAgIHJldHVybiAnc3FsaXRlMzovLzptZW1vcnk6JworICAgICAgICBlbGlmIGRbJ05BTUUnXS5zdGFydHN3aXRoKCIvIik6CisgICAgICAgICAgICByZXR1cm4gJ3NxbGl0ZTM6Ly8nICsgZFsnTkFNRSddCisgICAgICAgIHJldHVybiAic3FsaXRlMzovLyIgKyBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIGRbJ05BTUUnXSkKKworICAgIGVsaWYgZFsnRU5HSU5FJ10gPT0gJ2RqYW5nby5kYi5iYWNrZW5kcy5teXNxbCc6CisgICAgICAgIHJldHVybiAibXlzcWw6Ly8iICsgZFsnVVNFUiddICsgIjoiICsgZFsnUEFTU1dPUkQnXSArICJAIiArIGRbJ0hPU1QnXSArICI6IiArIGRbJ1BPUlQnXSArICIvIiArIGRbJ05BTUUnXQorCisgICAgcmFpc2UgRXhjZXB0aW9uKCJGSVhNRTogUGxlYXNlIGltcGxlbWVudCBtaXNzaW5nIGRhdGFiYXNlIHVybCBzY2hlbWEgZm9yIGVuZ2luZTogJXMiICUgZFsnRU5HSU5FJ10pCisKKworCisjIEhvc3RzL2RvbWFpbiBuYW1lcyB0aGF0IGFyZSB2YWxpZCBmb3IgdGhpcyBzaXRlOyByZXF1aXJlZCBpZiBERUJVRyBpcyBGYWxzZQorIyBTZWUgaHR0cHM6Ly9kb2NzLmRqYW5nb3Byb2plY3QuY29tL2VuLzEuNS9yZWYvc2V0dGluZ3MvI2FsbG93ZWQtaG9zdHMKK0FMTE9XRURfSE9TVFMgPSBbXQorCisjIExvY2FsIHRpbWUgem9uZSBmb3IgdGhpcyBpbnN0YWxsYXRpb24uIENob2ljZXMgY2FuIGJlIGZvdW5kIGhlcmU6CisjIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGlzdF9vZl90el96b25lc19ieV9uYW1lCisjIGFsdGhvdWdoIG5vdCBhbGwgY2hvaWNlcyBtYXkgYmUgYXZhaWxhYmxlIG9uIGFsbCBvcGVyYXRpbmcgc3lzdGVtcy4KKyMgSW4gYSBXaW5kb3dzIGVudmlyb25tZW50IHRoaXMgbXVzdCBiZSBzZXQgdG8geW91ciBzeXN0ZW0gdGltZSB6b25lLgorCisjIEFsd2F5cyB1c2UgbG9jYWwgY29tcHV0ZXIncyB0aW1lIHpvbmUsIGZpbmQKK2ltcG9ydCBoYXNobGliCitpZiAnVFonIGluIG9zLmVudmlyb246CisgICAgVElNRV9aT05FID0gb3MuZW52aXJvblsnVFonXQorZWxzZToKKyAgICAjIG5lZWQgdG8gcmVhZCB0aGUgL2V0Yy9sb2NhbHRpbWUgZmlsZSB3aGljaCBpcyB0aGUgbGliYyBzdGFuZGFyZAorICAgICMgYW5kIGRvIGEgcmV2ZXJzZS1tYXBwaW5nIHRvIC91c3Ivc2hhcmUvem9uZWluZm8vOworICAgICMgc2luY2UgdGhlIHRpbWV6b25lIG1heSBtYXRjaCBhbnkgbnVtYmVyIG9mIGlkZW50aWNhbCB0aW1lem9uZSBkZWZpbml0aW9ucywKKworICAgIHpvbmVmaWxlbGlzdCA9IHt9CisgICAgWk9ORUlORk9QQVRIID0gJy91c3Ivc2hhcmUvem9uZWluZm8vJworICAgIGZvciBkaXJwYXRoLCBkaXJuYW1lcywgZmlsZW5hbWVzIGluIG9zLndhbGsoWk9ORUlORk9QQVRIKToKKyAgICAgICAgZm9yIGZuIGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgIGZpbGVwYXRoID0gb3MucGF0aC5qb2luKGRpcnBhdGgsIGZuKQorICAgICAgICAgICAgem9uZW5hbWUgPSBmaWxlcGF0aC5sc3RyaXAoWk9ORUlORk9QQVRIKS5zdHJpcCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW1wb3J0IHB5dHoKKyAgICAgICAgICAgICAgICBmcm9tIHB5dHouZXhjZXB0aW9ucyBpbXBvcnQgVW5rbm93blRpbWVab25lRXJyb3IKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpZiBweXR6LnRpbWV6b25lKHpvbmVuYW1lKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVmaWxlbGlzdFtoYXNobGliLm1kNShvcGVuKGZpbGVwYXRoKS5yZWFkKCkpLmhleGRpZ2VzdCgpXSA9IHpvbmVuYW1lCisgICAgICAgICAgICAgICAgZXhjZXB0IFVua25vd25UaW1lWm9uZUVycm9yLCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAjIHdlIGV4cGVjdCB0aW1lem9uZSBmYWlsdXJlcyBoZXJlLCBqdXN0IG1vdmUgb3ZlcgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgem9uZWZpbGVsaXN0W2hhc2hsaWIubWQ1KG9wZW4oZmlsZXBhdGgpLnJlYWQoKSkuaGV4ZGlnZXN0KCldID0gem9uZW5hbWUKKworICAgIFRJTUVfWk9ORSA9IHpvbmVmaWxlbGlzdFtoYXNobGliLm1kNShvcGVuKCcvZXRjL2xvY2FsdGltZScpLnJlYWQoKSkuaGV4ZGlnZXN0KCldCisKKyMgTGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBpbnN0YWxsYXRpb24uIEFsbCBjaG9pY2VzIGNhbiBiZSBmb3VuZCBoZXJlOgorIyBodHRwOi8vd3d3LmkxOG5ndXkuY29tL3VuaWNvZGUvbGFuZ3VhZ2UtaWRlbnRpZmllcnMuaHRtbAorTEFOR1VBR0VfQ09ERSA9ICdlbi11cycKKworU0lURV9JRCA9IDEKKworIyBJZiB5b3Ugc2V0IHRoaXMgdG8gRmFsc2UsIERqYW5nbyB3aWxsIG1ha2Ugc29tZSBvcHRpbWl6YXRpb25zIHNvIGFzIG5vdAorIyB0byBsb2FkIHRoZSBpbnRlcm5hdGlvbmFsaXphdGlvbiBtYWNoaW5lcnkuCitVU0VfSTE4TiA9IFRydWUKKworIyBJZiB5b3Ugc2V0IHRoaXMgdG8gRmFsc2UsIERqYW5nbyB3aWxsIG5vdCBmb3JtYXQgZGF0ZXMsIG51bWJlcnMgYW5kCisjIGNhbGVuZGFycyBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgbG9jYWxlLgorVVNFX0wxME4gPSBUcnVlCisKKyMgSWYgeW91IHNldCB0aGlzIHRvIEZhbHNlLCBEamFuZ28gd2lsbCBub3QgdXNlIHRpbWV6b25lLWF3YXJlIGRhdGV0aW1lcy4KK1VTRV9UWiA9IFRydWUKKworIyBBYnNvbHV0ZSBmaWxlc3lzdGVtIHBhdGggdG8gdGhlIGRpcmVjdG9yeSB0aGF0IHdpbGwgaG9sZCB1c2VyLXVwbG9hZGVkIGZpbGVzLgorIyBFeGFtcGxlOiAiL3Zhci93d3cvZXhhbXBsZS5jb20vbWVkaWEvIgorTUVESUFfUk9PVCA9ICcnCisKKyMgVVJMIHRoYXQgaGFuZGxlcyB0aGUgbWVkaWEgc2VydmVkIGZyb20gTUVESUFfUk9PVC4gTWFrZSBzdXJlIHRvIHVzZSBhCisjIHRyYWlsaW5nIHNsYXNoLgorIyBFeGFtcGxlczogImh0dHA6Ly9leGFtcGxlLmNvbS9tZWRpYS8iLCAiaHR0cDovL21lZGlhLmV4YW1wbGUuY29tLyIKK01FRElBX1VSTCA9ICcnCisKKyMgQWJzb2x1dGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHN0YXRpYyBmaWxlcyBzaG91bGQgYmUgY29sbGVjdGVkIHRvLgorIyBEb24ndCBwdXQgYW55dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkgeW91cnNlbGY7IHN0b3JlIHlvdXIgc3RhdGljIGZpbGVzCisjIGluIGFwcHMnICJzdGF0aWMvIiBzdWJkaXJlY3RvcmllcyBhbmQgaW4gU1RBVElDRklMRVNfRElSUy4KKyMgRXhhbXBsZTogIi92YXIvd3d3L2V4YW1wbGUuY29tL3N0YXRpYy8iCitTVEFUSUNfUk9PVCA9ICcnCisKKyMgVVJMIHByZWZpeCBmb3Igc3RhdGljIGZpbGVzLgorIyBFeGFtcGxlOiAiaHR0cDovL2V4YW1wbGUuY29tL3N0YXRpYy8iLCAiaHR0cDovL3N0YXRpYy5leGFtcGxlLmNvbS8iCitTVEFUSUNfVVJMID0gJy9zdGF0aWMvJworCisjIEFkZGl0aW9uYWwgbG9jYXRpb25zIG9mIHN0YXRpYyBmaWxlcworU1RBVElDRklMRVNfRElSUyA9ICgKKyAgICAjIFB1dCBzdHJpbmdzIGhlcmUsIGxpa2UgIi9ob21lL2h0bWwvc3RhdGljIiBvciAiQzovd3d3L2RqYW5nby9zdGF0aWMiLgorICAgICMgQWx3YXlzIHVzZSBmb3J3YXJkIHNsYXNoZXMsIGV2ZW4gb24gV2luZG93cy4KKyAgICAjIERvbid0IGZvcmdldCB0byB1c2UgYWJzb2x1dGUgcGF0aHMsIG5vdCByZWxhdGl2ZSBwYXRocy4KKykKKworIyBMaXN0IG9mIGZpbmRlciBjbGFzc2VzIHRoYXQga25vdyBob3cgdG8gZmluZCBzdGF0aWMgZmlsZXMgaW4KKyMgdmFyaW91cyBsb2NhdGlvbnMuCitTVEFUSUNGSUxFU19GSU5ERVJTID0gKAorICAgICdkamFuZ28uY29udHJpYi5zdGF0aWNmaWxlcy5maW5kZXJzLkZpbGVTeXN0ZW1GaW5kZXInLAorICAgICdkamFuZ28uY29udHJpYi5zdGF0aWNmaWxlcy5maW5kZXJzLkFwcERpcmVjdG9yaWVzRmluZGVyJywKKyMgICAgJ2RqYW5nby5jb250cmliLnN0YXRpY2ZpbGVzLmZpbmRlcnMuRGVmYXVsdFN0b3JhZ2VGaW5kZXInLAorKQorCisjIE1ha2UgdGhpcyB1bmlxdWUsIGFuZCBkb24ndCBzaGFyZSBpdCB3aXRoIGFueWJvZHkuCitTRUNSRVRfS0VZID0gJ05PVF9TVUlUQUJMRV9GT1JfSE9TVEVEX0RFUExPWU1FTlQnCisKKyMgTGlzdCBvZiBjYWxsYWJsZXMgdGhhdCBrbm93IGhvdyB0byBpbXBvcnQgdGVtcGxhdGVzIGZyb20gdmFyaW91cyBzb3VyY2VzLgorVEVNUExBVEVfTE9BREVSUyA9ICgKKyAgICAnZGphbmdvLnRlbXBsYXRlLmxvYWRlcnMuZmlsZXN5c3RlbS5Mb2FkZXInLAorICAgICdkamFuZ28udGVtcGxhdGUubG9hZGVycy5hcHBfZGlyZWN0b3JpZXMuTG9hZGVyJywKKyMgICAgICdkamFuZ28udGVtcGxhdGUubG9hZGVycy5lZ2dzLkxvYWRlcicsCispCisKK01JRERMRVdBUkVfQ0xBU1NFUyA9ICgKKyAgICAnZGphbmdvLm1pZGRsZXdhcmUuY29tbW9uLkNvbW1vbk1pZGRsZXdhcmUnLAorICAgICdkamFuZ28uY29udHJpYi5zZXNzaW9ucy5taWRkbGV3YXJlLlNlc3Npb25NaWRkbGV3YXJlJywKKyAgICAnZGphbmdvLm1pZGRsZXdhcmUuY3NyZi5Dc3JmVmlld01pZGRsZXdhcmUnLAorICAgICdkamFuZ28uY29udHJpYi5hdXRoLm1pZGRsZXdhcmUuQXV0aGVudGljYXRpb25NaWRkbGV3YXJlJywKKyAgICAnZGphbmdvLmNvbnRyaWIubWVzc2FnZXMubWlkZGxld2FyZS5NZXNzYWdlTWlkZGxld2FyZScsCisgICAgIyBVbmNvbW1lbnQgdGhlIG5leHQgbGluZSBmb3Igc2ltcGxlIGNsaWNramFja2luZyBwcm90ZWN0aW9uOgorICAgICMgJ2RqYW5nby5taWRkbGV3YXJlLmNsaWNramFja2luZy5YRnJhbWVPcHRpb25zTWlkZGxld2FyZScsCispCisKK0NBQ0hFUyA9IHsKKyAgICAjICAgICAgICAnZGVmYXVsdCc6IHsKKyAgICAjICAgICAgICAgICAgJ0JBQ0tFTkQnOiAnZGphbmdvLmNvcmUuY2FjaGUuYmFja2VuZHMubWVtY2FjaGVkLk1lbWNhY2hlZENhY2hlJywKKyAgICAjICAgICAgICAgICAgJ0xPQ0FUSU9OJzogJzEyNy4wLjAuMToxMTIxMScsCisgICAgIyAgICAgICAgfSwKKyAgICAgICAgICAgJ2RlZmF1bHQnOiB7CisgICAgICAgICAgICAgICAnQkFDS0VORCc6ICdkamFuZ28uY29yZS5jYWNoZS5iYWNrZW5kcy5maWxlYmFzZWQuRmlsZUJhc2VkQ2FjaGUnLAorICAgICAgICAgICAgICAgJ0xPQ0FUSU9OJzogJy90bXAvZGphbmdvLWRlZmF1bHQtY2FjaGUnLAorICAgICAgICAgICAgICAgJ1RJTUVPVVQnOiAxLAorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworCitmcm9tIG9zLnBhdGggaW1wb3J0IGRpcm5hbWUgYXMgRE4KK1NJVEVfUk9PVD1ETihETihvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSkKKworaW1wb3J0IHN1YnByb2Nlc3MKK1RPQVNURVJfQlJBTkNIID0gc3VicHJvY2Vzcy5Qb3BlbignZ2l0IGJyYW5jaCB8IGdyZXAgIl4qICIgfCB0ciAtZCAiKiAiJywgY3dkID0gU0lURV9ST09ULCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCitUT0FTVEVSX1JFVklTSU9OID0gc3VicHJvY2Vzcy5Qb3BlbignZ2l0IHJldi1wYXJzZSBIRUFEICcsIGN3ZCA9IFNJVEVfUk9PVCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQorCitST09UX1VSTENPTkYgPSAndG9hc3Rlcm1haW4udXJscycKKworIyBQeXRob24gZG90dGVkIHBhdGggdG8gdGhlIFdTR0kgYXBwbGljYXRpb24gdXNlZCBieSBEamFuZ28ncyBydW5zZXJ2ZXIuCitXU0dJX0FQUExJQ0FUSU9OID0gJ3RvYXN0ZXJtYWluLndzZ2kuYXBwbGljYXRpb24nCisKK1RFTVBMQVRFX0RJUlMgPSAoCisgICAgIyBQdXQgc3RyaW5ncyBoZXJlLCBsaWtlICIvaG9tZS9odG1sL2RqYW5nb190ZW1wbGF0ZXMiIG9yICJDOi93d3cvZGphbmdvL3RlbXBsYXRlcyIuCisgICAgIyBBbHdheXMgdXNlIGZvcndhcmQgc2xhc2hlcywgZXZlbiBvbiBXaW5kb3dzLgorICAgICMgRG9uJ3QgZm9yZ2V0IHRvIHVzZSBhYnNvbHV0ZSBwYXRocywgbm90IHJlbGF0aXZlIHBhdGhzLgorKQorCitURU1QTEFURV9DT05URVhUX1BST0NFU1NPUlMgPSAoJ2RqYW5nby5jb250cmliLmF1dGguY29udGV4dF9wcm9jZXNzb3JzLmF1dGgnLAorICdkamFuZ28uY29yZS5jb250ZXh0X3Byb2Nlc3NvcnMuZGVidWcnLAorICdkamFuZ28uY29yZS5jb250ZXh0X3Byb2Nlc3NvcnMuaTE4bicsCisgJ2RqYW5nby5jb3JlLmNvbnRleHRfcHJvY2Vzc29ycy5tZWRpYScsCisgJ2RqYW5nby5jb3JlLmNvbnRleHRfcHJvY2Vzc29ycy5zdGF0aWMnLAorICdkamFuZ28uY29yZS5jb250ZXh0X3Byb2Nlc3NvcnMudHonLAorICdkamFuZ28uY29udHJpYi5tZXNzYWdlcy5jb250ZXh0X3Byb2Nlc3NvcnMubWVzc2FnZXMnLAorICJkamFuZ28uY29yZS5jb250ZXh0X3Byb2Nlc3NvcnMucmVxdWVzdCIsCisgJ3RvYXN0ZXJndWkudmlld3MubWFuYWdlZGNvbnRleHRwcm9jZXNzb3InLAorICkKKworSU5TVEFMTEVEX0FQUFMgPSAoCisgICAgJ2RqYW5nby5jb250cmliLmF1dGgnLAorICAgICdkamFuZ28uY29udHJpYi5jb250ZW50dHlwZXMnLAorICAgICdkamFuZ28uY29udHJpYi5tZXNzYWdlcycsCisgICAgJ2RqYW5nby5jb250cmliLnNlc3Npb25zJywKKyAgICAnZGphbmdvLmNvbnRyaWIuYWRtaW4nLAorICAgICdkamFuZ28uY29udHJpYi5zdGF0aWNmaWxlcycsCisKKyAgICAjIFVuY29tbWVudCB0aGUgbmV4dCBsaW5lIHRvIGVuYWJsZSBhZG1pbiBkb2N1bWVudGF0aW9uOgorICAgICMgJ2RqYW5nby5jb250cmliLmFkbWluZG9jcycsCisgICAgJ2RqYW5nby5jb250cmliLmh1bWFuaXplJywKKyAgICAnYmxkY29sbGVjdG9yJywKKyAgICAndG9hc3Rlcm1haW4nLAorICAgICdzb3V0aCcsCispCisKKworSU5URVJOQUxfSVBTID0gWycxMjcuMC4wLjEnLCAnMTkyLjE2OC4yLjI4J10KKworIyBMb2FkIGRqYW5nby1mcmVzaCBpcyBUT0FTVEVSX0RFVkVMIGlzIHNldCwgYW5kIHRoZSBtb2R1bGUgaXMgYXZhaWxhYmxlCitGUkVTSF9FTkFCTEVEID0gRmFsc2UKK2lmIG9zLmVudmlyb24uZ2V0KCdUT0FTVEVSX0RFVkVMJywgTm9uZSkgaXMgbm90IE5vbmU6CisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgZnJlc2gKKyAgICAgICAgTUlERExFV0FSRV9DTEFTU0VTID0gKCJmcmVzaC5taWRkbGV3YXJlLkZyZXNoTWlkZGxld2FyZSIsKSArIE1JRERMRVdBUkVfQ0xBU1NFUworICAgICAgICBJTlNUQUxMRURfQVBQUyA9IElOU1RBTExFRF9BUFBTICsgKCdmcmVzaCcsKQorICAgICAgICBGUkVTSF9FTkFCTEVEID0gVHJ1ZQorICAgIGV4Y2VwdDoKKyAgICAgICAgcGFzcworCitERUJVR19QQU5FTF9FTkFCTEVEID0gRmFsc2UKK2lmIG9zLmVudmlyb24uZ2V0KCdUT0FTVEVSX0RFVkVMJywgTm9uZSkgaXMgbm90IE5vbmU6CisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgZGVidWdfdG9vbGJhciwgZGVidWdfcGFuZWwKKyAgICAgICAgTUlERExFV0FSRV9DTEFTU0VTID0gKCdkZWJ1Z19wYW5lbC5taWRkbGV3YXJlLkRlYnVnUGFuZWxNaWRkbGV3YXJlJywpICsgTUlERExFV0FSRV9DTEFTU0VTCisgICAgICAgICNNSURETEVXQVJFX0NMQVNTRVMgPSBNSURETEVXQVJFX0NMQVNTRVMgKyAoJ2RlYnVnX3Rvb2xiYXIubWlkZGxld2FyZS5EZWJ1Z1Rvb2xiYXJNaWRkbGV3YXJlJywpCisgICAgICAgIElOU1RBTExFRF9BUFBTID0gSU5TVEFMTEVEX0FQUFMgKyAoJ2RlYnVnX3Rvb2xiYXInLCdkZWJ1Z19wYW5lbCcsKQorICAgICAgICBERUJVR19QQU5FTF9FTkFCTEVEID0gVHJ1ZQorCisgICAgICAgICMgdGhpcyBjYWNoZSBiYWNrZW5kIHdpbGwgYmUgdXNlZCBieSBkamFuZ28tZGVidWctcGFuZWwKKyAgICAgICAgQ0FDSEVTWydkZWJ1Zy1wYW5lbCddID0geworICAgICAgICAgICAgICAgICdCQUNLRU5EJzogJ2RqYW5nby5jb3JlLmNhY2hlLmJhY2tlbmRzLmZpbGViYXNlZC5GaWxlQmFzZWRDYWNoZScsCisgICAgICAgICAgICAgICAgJ0xPQ0FUSU9OJzogJy92YXIvdG1wL2RlYnVnLXBhbmVsLWNhY2hlJywKKyAgICAgICAgICAgICAgICAnVElNRU9VVCc6IDMwMCwKKyAgICAgICAgICAgICAgICAnT1BUSU9OUyc6IHsKKyAgICAgICAgICAgICAgICAgICAgJ01BWF9FTlRSSUVTJzogMjAwCisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICBleGNlcHQ6CisgICAgICAgIHBhc3MKKworCitTT1VUSF9URVNUU19NSUdSQVRFID0gRmFsc2UKKworCisjIFdlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IGFuZCBpbnN0YWxsIGFwcGxpY2F0aW9ucyBoZXJlIGlmCisjIHRoZXkgaGF2ZSBhICdtb2RlbHMucHknIG9yICd2aWV3cy5weScgZmlsZQoraW1wb3J0IG9zCitjdXJyZW50ZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorZm9yIHQgaW4gb3Mud2Fsayhvcy5wYXRoLmRpcm5hbWUoY3VycmVudGRpcikpOgorICAgIG1vZHVsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHRbMF0pCisgICAgI2lmIHdlIGhhdmUgYSB2aXJ0dWFsZW52IHNraXAgaXQgdG8gYXZvaWQgaW5jb3JyZWN0IGltcG9ydHMKKyAgICBpZiBvcy5lbnZpcm9uLmhhc19rZXkoJ1ZJUlRVQUxfRU5WJykgYW5kIG9zLmVudmlyb25bJ1ZJUlRVQUxfRU5WJ10gaW4gdFswXToKKyAgICAgICAgY29udGludWUKKworICAgIGlmICgidmlld3MucHkiIGluIHRbMl0gb3IgIm1vZGVscy5weSIgaW4gdFsyXSkgYW5kIG5vdCBtb2R1bGVuYW1lIGluIElOU1RBTExFRF9BUFBTOgorICAgICAgICBJTlNUQUxMRURfQVBQUyA9IElOU1RBTExFRF9BUFBTICsgKG1vZHVsZW5hbWUsKQorCisjIEEgc2FtcGxlIGxvZ2dpbmcgY29uZmlndXJhdGlvbi4gVGhlIG9ubHkgdGFuZ2libGUgbG9nZ2luZworIyBwZXJmb3JtZWQgYnkgdGhpcyBjb25maWd1cmF0aW9uIGlzIHRvIHNlbmQgYW4gZW1haWwgdG8KKyMgdGhlIHNpdGUgYWRtaW5zIG9uIGV2ZXJ5IEhUVFAgNTAwIGVycm9yIHdoZW4gREVCVUc9RmFsc2UuCisjIFNlZSBodHRwOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS9lbi9kZXYvdG9waWNzL2xvZ2dpbmcgZm9yCisjIG1vcmUgZGV0YWlscyBvbiBob3cgdG8gY3VzdG9taXplIHlvdXIgbG9nZ2luZyBjb25maWd1cmF0aW9uLgorTE9HR0lORyA9IHsKKyAgICAndmVyc2lvbic6IDEsCisgICAgJ2Rpc2FibGVfZXhpc3RpbmdfbG9nZ2Vycyc6IEZhbHNlLAorICAgICdmaWx0ZXJzJzogeworICAgICAgICAncmVxdWlyZV9kZWJ1Z19mYWxzZSc6IHsKKyAgICAgICAgICAgICcoKSc6ICdkamFuZ28udXRpbHMubG9nLlJlcXVpcmVEZWJ1Z0ZhbHNlJworICAgICAgICB9CisgICAgfSwKKyAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgJ2RhdGV0aW1lJzogeworICAgICAgICAgICAgJ2Zvcm1hdCc6ICclKGFzY3RpbWUpcyAlKGxldmVsbmFtZSlzICUobWVzc2FnZSlzJworICAgICAgICB9CisgICAgfSwKKyAgICAnaGFuZGxlcnMnOiB7CisgICAgICAgICdtYWlsX2FkbWlucyc6IHsKKyAgICAgICAgICAgICdsZXZlbCc6ICdFUlJPUicsCisgICAgICAgICAgICAnZmlsdGVycyc6IFsncmVxdWlyZV9kZWJ1Z19mYWxzZSddLAorICAgICAgICAgICAgJ2NsYXNzJzogJ2RqYW5nby51dGlscy5sb2cuQWRtaW5FbWFpbEhhbmRsZXInCisgICAgICAgIH0sCisgICAgICAgICdjb25zb2xlJzogeworICAgICAgICAgICAgJ2xldmVsJzogJ0RFQlVHJywKKyAgICAgICAgICAgICdjbGFzcyc6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgJ2Zvcm1hdHRlcic6ICdkYXRldGltZScsCisgICAgICAgIH0KKyAgICB9LAorICAgICdsb2dnZXJzJzogeworICAgICAgICAndG9hc3RlcicgOiB7CisgICAgICAgICAgICAnaGFuZGxlcnMnOiBbJ2NvbnNvbGUnXSwKKyAgICAgICAgICAgICdsZXZlbCc6ICdERUJVRycsCisgICAgICAgIH0sCisgICAgICAgICdkamFuZ28ucmVxdWVzdCc6IHsKKyAgICAgICAgICAgICdoYW5kbGVycyc6IFsnY29uc29sZSddLAorICAgICAgICAgICAgJ2xldmVsJzogJ1dBUk4nLAorICAgICAgICAgICAgJ3Byb3BhZ2F0ZSc6IFRydWUsCisgICAgICAgIH0sCisgICAgfQorfQorCitpZiBERUJVRyBhbmQgU1FMX0RFQlVHOgorICAgIExPR0dJTkdbJ2xvZ2dlcnMnXVsnZGphbmdvLmRiLmJhY2tlbmRzJ10gPSB7CisgICAgICAgICAgICAnbGV2ZWwnOiAnREVCVUcnLAorICAgICAgICAgICAgJ2hhbmRsZXJzJzogWydjb25zb2xlJ10sCisgICAgICAgIH0KKworCisjIElmIHdlJ3JlIHVzaW5nIHNxbGl0ZSwgd2UgbmVlZCB0byB0d2VhayB0aGUgcGVyZm9ybWFuY2UgYSBiaXQKK2Zyb20gZGphbmdvLmRiLmJhY2tlbmRzLnNpZ25hbHMgaW1wb3J0IGNvbm5lY3Rpb25fY3JlYXRlZAorZGVmIGFjdGl2YXRlX3N5bmNocm9ub3VzX29mZihzZW5kZXIsIGNvbm5lY3Rpb24sICoqa3dhcmdzKToKKyAgICBpZiBjb25uZWN0aW9uLnZlbmRvciA9PSAnc3FsaXRlJzoKKyAgICAgICAgY3Vyc29yID0gY29ubmVjdGlvbi5jdXJzb3IoKQorICAgICAgICBjdXJzb3IuZXhlY3V0ZSgnUFJBR01BIHN5bmNocm9ub3VzID0gMDsnKQorY29ubmVjdGlvbl9jcmVhdGVkLmNvbm5lY3QoYWN0aXZhdGVfc3luY2hyb25vdXNfb2ZmKQorIworCisKK2NsYXNzIEludmFsaWRTdHJpbmcoc3RyKToKKyAgICBkZWYgX19tb2RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGZyb20gZGphbmdvLnRlbXBsYXRlLmJhc2UgaW1wb3J0IFRlbXBsYXRlU3ludGF4RXJyb3IKKyAgICAgICAgcmFpc2UgVGVtcGxhdGVTeW50YXhFcnJvcigKKyAgICAgICAgICAgICJVbmRlZmluZWQgdmFyaWFibGUgb3IgdW5rbm93biB2YWx1ZSBmb3I6IFwiJXNcIiIgJSBvdGhlcikKKworVEVNUExBVEVfU1RSSU5HX0lGX0lOVkFMSUQgPSBJbnZhbGlkU3RyaW5nKCIlcyIpCisKK2ltcG9ydCBzeXMKK3N5cy5wYXRoLmFwcGVuZCgKKyAgICBvcy5wYXRoLmpvaW4oCisgICAgb3MucGF0aC5qb2luKAorICAgICAgICBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKSwKKyAgICAgICAgICAgICJjb250cmliIiksCisgICAgICAgICAgICAiZGphbmdvLWFnZ3JlZ2F0ZS1pZi1tYXN0ZXIiKQorICAgICkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi91cmxzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3VybHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIxNTg4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi91cmxzLnB5CkBAIC0wLDAgKzEsOTEgQEAKKyMKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitmcm9tIGRqYW5nby5jb25mLnVybHMgaW1wb3J0IHBhdHRlcm5zLCBpbmNsdWRlLCB1cmwKK2Zyb20gZGphbmdvLnZpZXdzLmdlbmVyaWMgaW1wb3J0IFJlZGlyZWN0VmlldworZnJvbSBkamFuZ28udmlld3MuZGVjb3JhdG9ycy5jYWNoZSBpbXBvcnQgbmV2ZXJfY2FjaGUKKworaW1wb3J0IGxvZ2dpbmcKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInRvYXN0ZXIiKQorCisjIFVuY29tbWVudCB0aGUgbmV4dCB0d28gbGluZXMgdG8gZW5hYmxlIHRoZSBhZG1pbjoKK2Zyb20gZGphbmdvLmNvbnRyaWIgaW1wb3J0IGFkbWluCithZG1pbi5hdXRvZGlzY292ZXIoKQorCit1cmxwYXR0ZXJucyA9IHBhdHRlcm5zKCcnLAorCisgICAgIyBFeGFtcGxlczoKKyAgICAjIHVybChyJ150b2FzdGVyLycsIGluY2x1ZGUoJ3RvYXN0ZXIuZm9vLnVybHMnKSksCisKKyAgICAjIFVuY29tbWVudCB0aGUgYWRtaW4vZG9jIGxpbmUgYmVsb3cgdG8gZW5hYmxlIGFkbWluIGRvY3VtZW50YXRpb246CisgICAgIyB1cmwocideYWRtaW4vZG9jLycsIGluY2x1ZGUoJ2RqYW5nby5jb250cmliLmFkbWluZG9jcy51cmxzJykpLAorCisKKyAgICAjIFRoaXMgaXMgaGVyZSB0byBtYWludGFpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCB3aWxsIGJlIGRlcHJlY2F0ZWQKKyAgICAjIGluIHRoZSBmdXR1cmUuCisgICAgdXJsKHInXm9ybS9ldmVudGZpbGUkJywgJ2JsZGNvbGxlY3Rvci52aWV3cy5ldmVudGZpbGUnKSwKKworICAgICMgaWYgbm8gYXBwbGljYXRpb24gaXMgc2VsZWN0ZWQsIHdlIGhhdmUgdGhlIG1hZ2ljIHRvYXN0ZXJndWkgYXBwIGhlcmUKKyAgICB1cmwocideJCcsIG5ldmVyX2NhY2hlKFJlZGlyZWN0Vmlldy5hc192aWV3KHVybD0nL3RvYXN0ZXJndWkvJykpKSwKKykKKworaW1wb3J0IHRvYXN0ZXJtYWluLnNldHRpbmdzCisKK2lmIHRvYXN0ZXJtYWluLnNldHRpbmdzLkZSRVNIX0VOQUJMRUQ6CisgICAgdXJscGF0dGVybnMuaW5zZXJ0KDEsIHVybChyJycsIGluY2x1ZGUoJ2ZyZXNoLnVybHMnKSkpCisgICAgI2xvZ2dlci5pbmZvKCJFbmFibGVkIGRqYW5nby1mcmVzaCBleHRlbnNpb24iKQorCitpZiB0b2FzdGVybWFpbi5zZXR0aW5ncy5ERUJVR19QQU5FTF9FTkFCTEVEOgorICAgIGltcG9ydCBkZWJ1Z190b29sYmFyCisgICAgdXJscGF0dGVybnMuaW5zZXJ0KDEsIHVybChyJycsIGluY2x1ZGUoZGVidWdfdG9vbGJhci51cmxzKSkpCisgICAgI2xvZ2dlci5pbmZvKCJFbmFibGVkIGRqYW5nb190b29sYmFyIGV4dGVuc2lvbiIpCisKKworaWYgdG9hc3Rlcm1haW4uc2V0dGluZ3MuTUFOQUdFRDoKKyAgICB1cmxwYXR0ZXJucyA9IFsKKyAgICAgICAgIyBVbmNvbW1lbnQgdGhlIG5leHQgbGluZSB0byBlbmFibGUgdGhlIGFkbWluOgorICAgICAgICB1cmwocideYWRtaW4vJywgaW5jbHVkZShhZG1pbi5zaXRlLnVybHMpKSwKKyAgICBdICsgdXJscGF0dGVybnMKKyMgQXV0b21hdGljYWxseSBkaXNjb3ZlciB1cmxzLnB5IGluIHZhcmlvdXMgYXBwcywgYmVzaWRlIG91ciBvd24KKyMgYW5kIG1hcCBtb2R1bGUgZGlyZWN0b3JpZXMgdG8gdGhlIHBhdHRlcm5zCisKK2ltcG9ydCBvcworY3VycmVudGRpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKK2ZvciB0IGluIG9zLndhbGsob3MucGF0aC5kaXJuYW1lKGN1cnJlbnRkaXIpKToKKyAgICAjaWYgd2UgaGF2ZSBhIHZpcnR1YWxlbnYgc2tpcCBpdCB0byBhdm9pZCBpbmNvcnJlY3QgaW1wb3J0cworICAgIGlmIG9zLmVudmlyb24uaGFzX2tleSgnVklSVFVBTF9FTlYnKSBhbmQgb3MuZW52aXJvblsnVklSVFVBTF9FTlYnXSBpbiB0WzBdOgorICAgICAgICBjb250aW51ZQorCisgICAgaWYgInVybHMucHkiIGluIHRbMl0gYW5kIHRbMF0gIT0gY3VycmVudGRpcjoKKyAgICAgICAgbW9kdWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUodFswXSkKKyAgICAgICAgIyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSB0aGlzIG1vZHVsZSBuYW1lIGluCisgICAgICAgIGNvbmZsaWN0ID0gRmFsc2UKKyAgICAgICAgZm9yIHAgaW4gdXJscGF0dGVybnM6CisgICAgICAgICAgICBpZiBwLnJlZ2V4LnBhdHRlcm4gPT0gJ14nICsgbW9kdWxlbmFtZSArICcvJzoKKyAgICAgICAgICAgICAgICBjb25mbGljdCA9IFRydWUKKyAgICAgICAgaWYgbm90IGNvbmZsaWN0OgorICAgICAgICAgICAgdXJscGF0dGVybnMuaW5zZXJ0KDAsIHVybChyJ14nICsgbW9kdWxlbmFtZSArICcvJywgaW5jbHVkZSAoIG1vZHVsZW5hbWUgKyAnLnVybHMnKSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIud2FybigiTW9kdWxlIFwnJXNcJyBoYXMgYSByZWdleHAgY29uZmxpY3QsIHdhcyBub3QgYWRkZWQgdG8gdGhlIHVybHBhdHRlcm5zIiAlIG1vZHVsZW5hbWUpCisKK2Zyb20gcHByaW50IGltcG9ydCBwZm9ybWF0CisjbG9nZ2VyLmRlYnVnKCJ1cmxwYXR0ZXJucyBsaXN0ICVzIiwgcGZvcm1hdCh1cmxwYXR0ZXJucykpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vd3NnaS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi93c2dpLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMWIzMTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vd3NnaS5weQpAQCAtMCwwICsxLDM1IEBACisiIiIKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCitXU0dJIGNvbmZpZyBmb3IgVG9hc3RlciBwcm9qZWN0LgorCitUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgV1NHSSBhcHBsaWNhdGlvbiB1c2VkIGJ5IERqYW5nbydzIGRldmVsb3BtZW50IHNlcnZlcgorYW5kIGFueSBwcm9kdWN0aW9uIFdTR0kgZGVwbG95bWVudHMuIEl0IHNob3VsZCBleHBvc2UgYSBtb2R1bGUtbGV2ZWwgdmFyaWFibGUKK25hbWVkIGBgYXBwbGljYXRpb25gYC4gRGphbmdvJ3MgYGBydW5zZXJ2ZXJgYCBhbmQgYGBydW5mY2dpYGAgY29tbWFuZHMgZGlzY292ZXIKK3RoaXMgYXBwbGljYXRpb24gdmlhIHRoZSBgYFdTR0lfQVBQTElDQVRJT05gYCBzZXR0aW5nLgorCitVc3VhbGx5IHlvdSB3aWxsIGhhdmUgdGhlIHN0YW5kYXJkIERqYW5nbyBXU0dJIGFwcGxpY2F0aW9uIGhlcmUsIGJ1dCBpdCBhbHNvCittaWdodCBtYWtlIHNlbnNlIHRvIHJlcGxhY2UgdGhlIHdob2xlIERqYW5nbyBXU0dJIGFwcGxpY2F0aW9uIHdpdGggYSBjdXN0b20gb25lCit0aGF0IGxhdGVyIGRlbGVnYXRlcyB0byB0aGUgRGphbmdvIG9uZS4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCBpbnRyb2R1Y2UgV1NHSQorbWlkZGxld2FyZSBoZXJlLCBvciBjb21iaW5lIGEgRGphbmdvIGFwcGxpY2F0aW9uIHdpdGggYW4gYXBwbGljYXRpb24gb2YgYW5vdGhlcgorZnJhbWV3b3JrLgorCisiIiIKK2ltcG9ydCBvcworCisjIFdlIGRlZmVyIHRvIGEgREpBTkdPX1NFVFRJTkdTX01PRFVMRSBhbHJlYWR5IGluIHRoZSBlbnZpcm9ubWVudC4gVGhpcyBicmVha3MKKyMgaWYgcnVubmluZyBtdWx0aXBsZSBzaXRlcyBpbiB0aGUgc2FtZSBtb2Rfd3NnaSBwcm9jZXNzLiBUbyBmaXggdGhpcywgdXNlCisjIG1vZF93c2dpIGRhZW1vbiBtb2RlIHdpdGggZWFjaCBzaXRlIGluIGl0cyBvd24gZGFlbW9uIHByb2Nlc3MsIG9yIHVzZQorIyBvcy5lbnZpcm9uWyJESkFOR09fU0VUVElOR1NfTU9EVUxFIl0gPSAiVG9hc3Rlci5zZXR0aW5ncyIKK29zLmVudmlyb24uc2V0ZGVmYXVsdCgiREpBTkdPX1NFVFRJTkdTX01PRFVMRSIsICJ0b2FzdGVybWFpbi5zZXR0aW5ncyIpCisKKyMgVGhpcyBhcHBsaWNhdGlvbiBvYmplY3QgaXMgdXNlZCBieSBhbnkgV1NHSSBzZXJ2ZXIgY29uZmlndXJlZCB0byB1c2UgdGhpcworIyBmaWxlLiBUaGlzIGluY2x1ZGVzIERqYW5nbydzIGRldmVsb3BtZW50IHNlcnZlciwgaWYgdGhlIFdTR0lfQVBQTElDQVRJT04KKyMgc2V0dGluZyBwb2ludHMgaGVyZS4KK2Zyb20gZGphbmdvLmNvcmUud3NnaSBpbXBvcnQgZ2V0X3dzZ2lfYXBwbGljYXRpb24KK2FwcGxpY2F0aW9uID0gZ2V0X3dzZ2lfYXBwbGljYXRpb24oKQorCisjIEFwcGx5IFdTR0kgbWlkZGxld2FyZSBoZXJlLgorIyBmcm9tIGhlbGxvd29ybGQud3NnaSBpbXBvcnQgSGVsbG9Xb3JsZEFwcGxpY2F0aW9uCisjIGFwcGxpY2F0aW9uID0gSGVsbG9Xb3JsZEFwcGxpY2F0aW9uKGFwcGxpY2F0aW9uKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL3RvYXN0ZXItcmVxdWlyZW1lbnRzLnR4dCBiL3lvY3RvLXBva3kvYml0YmFrZS90b2FzdGVyLXJlcXVpcmVtZW50cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTliNTI5MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS90b2FzdGVyLXJlcXVpcmVtZW50cy50eHQKQEAgLTAsMCArMSw0IEBACitEamFuZ289PTEuNgorU291dGg9PTAuOC40CithcmdwYXJzZT09MS4yLjEKK3dzZ2lyZWY9PTAuMS4yCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vTWFrZWZpbGUgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE5N2E0MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9NYWtlZmlsZQpAQCAtMCwwICsxLDQ1OCBAQAorIyBUaGlzIGlzIGEgc2luZ2xlIE1ha2VmaWxlIHRvIGhhbmRsZSBhbGwgZ2VuZXJhdGVkIFlvY3RvIFByb2plY3QgZG9jdW1lbnRzLAorIyB3aGljaCBpbmNsdWRlcyB0aGUgQml0QmFrZSBVc2VyIE1hbnVhbCBhbmQgdGhlIFRvYXN0ZXIgVXNlciBNYW51YWwuCisjIFRoZSBNYWtlZmlsZSBuZWVkcyB0byBsaXZlIGluIHRoZSBkb2N1bWVudHMgZGlyZWN0b3J5IGFuZCBhbGwgZmlndXJlcyB1c2VkCisjIGluIGFueSBtYW51YWxzIG11c3QgYmUgLlBORyBmaWxlcyBhbmQgbGl2ZSBpbiB0aGUgaW5kaXZpZHVhbCBib29rJ3MgZmlndXJlcworIyBkaXJlY3RvcnkgYXMgd2VsbCBhcyBpbiB0aGUgZmlndXJlcyBkaXJlY3RvcnkgZm9yIHRoZSBtZWdhLW1hbnVhbC4KKyMKKyMgU29tZSBtYW51YWxzIGFyZSBhdmFpbGFibGUgYXMgbGlua2VkIGhlbHAgdGhyb3VnaCB0aGUgRWNsaXBzZSBkZXZlbG9wbWVudAorIyBzeXN0ZW0uICBUaGVzZSBtYW51YWxzIGFsc28gaW5jbHVkZSBhbiAiZWNsaXBzZSIgc3ViLWRpcmVjdG9yeSBhcyBwYXJ0IG9mCisjIHRoZSBtYWtlIHByb2Nlc3MuCisjCisjIE5vdGUgdGhhdCB0aGUgZmlndXJlcyBmb3IgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsCisjIGRpZmZlciBkZXBlbmRpbmcgb24gdGhlIEJSQU5DSCBiZWluZyBidWlsdC4KKyMKKyMgVGhlIE1ha2VmaWxlIGhhcyB0aGVzZSB0YXJnZXRzOgorIyAgICBhbGw6ICAgICAgIElmIHlvdSBsZWF2ZSBvZmYgdGhlIHRhcmdldCB0aGVuICJhbGwiIGlzIGltcGxpZWQuCisjICAgICAgICAgICAgICAgWW91IHdpbGwgZ2VuZXJhdGUgSFRNTCwgZWNsaXBzZSBoZWxwIChpZiBhcHBsaWNhYmxlKSwKKyMgICAgICAgICAgICAgICBhbmQgYSB0YXJiYWxsIG9mIGZpbGVzLgorIworIyAgICBwZGY6CWdlbmVyYXRlcyBhIFBERiB2ZXJzaW9uIG9mIGEgbWFudWFsLiAgTm90IHZhbGlkIGZvciB0aGUKKyMJCVF1aWNrIFN0YXJ0IG9yIHRoZSBtZWdhLW1hbnVhbCAoc2luZ2xlLCBsYXJnZSBIVE1MIGZpbGUKKyMJCWNvbXByaXNlZCBvZiBhbGwgWW9jdG8gUHJvamVjdCBtYW51YWxzKS4KKyMgICAgaHRtbDoJZ2VuZXJhdGVzIGFuIEhUTUwgdmVyc2lvbiBvZiBhIG1hbnVhbC4KKyMgICAgZWNsaXBzZToJZ2VuZXJhdGVzIGFuIEhUTUwgdmVyc2lvbiBvZiBhIG1hbnVhbCB0aGF0IGNhbiBiZSB1c2VkIGFzCisjCQllY2xpcHNlIGhlbHAgKGluY2x1ZGluZyBuZWNlc3NhcnkgbWV0YWRhdGEgZmlsZXMpLgorIyAgICB0YXJiYWxsOgljcmVhdGVzIGEgdGFyYmFsbCBmb3IgdGhlIGRvYyBmaWxlcy4KKyMgICAgdmFsaWRhdGU6CXZhbGlkYXRlcworIyAgICBwdWJsaXNoOglwdXNoZXMgZ2VuZXJhdGVkIGZpbGVzIHRvIHRoZSBZb2N0byBQcm9qZWN0IHdlYnNpdGUKKyMgICAgY2xlYW46CXJlbW92ZXMgZmlsZXMKKyMKKyMgVGhlIE1ha2VmaWxlIGNhbiBnZW5lcmF0ZSBhbiBIVE1MIGFuZCBQREYgdmVyc2lvbiBvZiBldmVyeSBkb2N1bWVudCBleGNlcHQgdGhlCisjIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQgYW5kIHRoZSBzaW5nbGUsIEhUTUwgbWVnYS1tYW51YWwsIHdoaWNoIGlzIGNvbXByaXNlZAorIyBvZiBhbGwgdGhlIGluZGl2aWR1YWwgWW9jdG8gUHJvamVjdCBtYW51YWxzLiAgWW91IGNhbiBnZW5lcmF0ZSB0aGVzZSB0d28gbWFudWFscworIyBpbiBIVE1MIGZvcm0gb25seS4gIFRoZSB2YXJpYWJsZSBET0MgaW5kaWNhdGVzIHRoZSBmb2xkZXIgbmFtZSBmb3IgYSBnaXZlbiBtYW51YWwuCisjIFRoZSB2YXJpYWJsZSBWRVIgcmVwcmVzZW50cyB0aGUgZGlzdHJvIHZlcnNpb24gb2YgdGhlIFlvY3RvIFJlbGVhc2UgZm9yIHdoaWNoIHRoZQorIyBtYW51YWxzIGFyZSBiZWluZyBnZW5lcmF0ZWQuICBUaGUgdmFyaWFibGUgQlJBTkNIIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlCisjIGJyYW5jaCAoZWRpc29uIG9yIGRlbnppbCkgYW5kIGlzIHVzZWQgb25seSB3aGVuIERPQz1kZXYtbWFudWFsIG9yCisjIERPQz1tZWdhLW1hbnVhbC4gIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIEJSQU5DSCwgdGhlIGRlZmF1bHQgYnJhbmNoIHVzZWQKKyMgd2lsbCBiZSBmb3IgdGhlIGxhdGVzdCBZb2N0byBQcm9qZWN0IHJlbGVhc2UuICBJZiB5b3UgYnVpbGQgZm9yIGVpdGhlcgorIyBlZGlzb24gb3IgZGVuemlsLCB5b3UgbXVzdCB1c2UgQlJBTkNILiBZb3UgZG8gbm90IG5lZWQgdG8gdXNlIEJSQU5DSCBmb3IKKyMgYW55IHJlbGVhc2UgYmV5b25kIGRlbnppbC4KKyMKKyMgVG8gYnVpbGQgYSBtYW51YWwsIHlvdSBtdXN0IGludm9rZSBNYWtlZmlsZSB3aXRoIHRoZSBET0MgYXJndW1lbnQuICBJZiB5b3UKKyMgYXJlIGdvaW5nIHRvIHB1Ymxpc2ggdGhlIG1hbnVhbCwgdGhlbiB5b3UgbXVzdCBpbnZva2UgTWFrZWZpbGUgd2l0aCBib3RoIHRoZQorIyBET0MgYW5kIHRoZSBWRVIgYXJndW1lbnQuICBGdXJ0aGVybW9yZSwgaWYgeW91IGFyZSBidWlsZGluZyBvciBwdWJsaXNoaW5nCisjIHRoZSBlZGlzb24gb3IgZGVuemlsIHZlcnNpb25zIG9mIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBvcgorIyB0aGUgbWVnYS1tYW51YWwsIHlvdSBtdXN0IGFsc28gdXNlIHRoZSBCUkFOQ0ggYXJndW1lbnQuCisjCisjIEV4YW1wbGVzOgorIworIyAgICAgbWFrZSBET0M9YnNwLWd1aWRlCisjICAgICBtYWtlIGh0bWwgRE9DPXlvY3RvLXByb2plY3QtcXMKKyMgICAgIG1ha2UgcGRmIERPQz1yZWYtbWFudWFsCisjICAgICBtYWtlIERPQz1kZXYtbWFudWFsIEJSQU5DSD1lZGlzb24KKyMgICAgIG1ha2UgRE9DPW1lZ2EtbWFudWFsIEJSQU5DSD1kZW56aWwKKyMKKyMgVGhlIGZpcnN0IGV4YW1wbGUgZ2VuZXJhdGVzIHRoZSBIVE1MIGFuZCBFY2xpcHNlIGhlbHAgdmVyc2lvbnMgb2YgdGhlIEJTUCBHdWlkZS4KKyMgVGhlIHNlY29uZCBleGFtcGxlIGdlbmVyYXRlcyB0aGUgSFRNTCB2ZXJzaW9uIG9ubHkgb2YgdGhlIFF1aWNrIFN0YXJ0LiAgTm90ZQorIyB0aGF0IHRoZSBRdWljayBTdGFydCBvbmx5IGhhcyBhbiBIVE1MIHZlcnNpb24gYXZhaWxhYmxlLiAgU28sIHRoZQorIyAnbWFrZSBET0M9eW9jdG8tcHJvamVjdC1xcycgY29tbWFuZCB3b3VsZCBiZSBlcXVpdmFsZW50LiBUaGUgdGhpcmQgZXhhbXBsZQorIyBnZW5lcmF0ZXMganVzdCB0aGUgUERGIHZlcnNpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyMgVGhlIGZvdXJ0aCBleGFtcGxlIGdlbmVyYXRlcyB0aGUgSFRNTCAnZWRpc29uJyB2ZXJzaW9uIGFuZCAoaWYgYXZhaWxhYmxlKQorIyB0aGUgRWNsaXBzZSBoZWxwIHZlcnNpb24gb2YgdGhlIFlQIERldmVsb3BtZW50IE1hbnVhbC4gIFRoZSBsYXN0IGV4YW1wbGUKKyMgZ2VuZXJhdGVzIHRoZSBIVE1MIHZlcnNpb24gb2YgdGhlIG1lZ2EtbWFudWFsIGFuZCB1c2VzIHRoZSAnZGVuemlsJworIyBicmFuY2ggd2hlbiBjaG9vc2luZyBmaWd1cmVzIGZvciB0aGUgdGFyYmFsbCBvZiBmaWd1cmVzLiAgQW55IGV4YW1wbGUgdGhhdCBkb2VzCisjIG5vdCB1c2UgdGhlIEJSQU5DSCBhcmd1bWVudCBidWlsZHMgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgbWFudWFsIHNldC4KKyMKKyMgVGhlIHB1Ymxpc2ggdGFyZ2V0IHB1c2hlcyB0aGUgZ2VuZXJhdGVkIG1hbnVhbHMgdG8gdGhlIFlvY3RvIFByb2plY3QKKyMgd2Vic2l0ZS4gIFVubGVzcyB5b3UgYXJlIGEgZGV2ZWxvcGVyIG9uIHRoZSBZUCB0ZWFtLCB5b3Ugd2lsbCBub3Qgc3VjY2VlZCBpbgorIyBwdXNoaW5nIG1hbnVhbHMgdG8gdGhpcyBzZXJ2ZXIuICBBbGwgZmlsZXMgbmVlZGVkIGZvciB0aGUgbWFudWFsJ3MgSFRNTCBmb3JtIGFyZQorIyBwdXNoZWQgYXMgd2VsbCBhcyBhcHBsaWNhYmxlIEVjbGlwc2UgdmVyc2lvbnMuCisjCisjIEV4YW1wbGVzOgorIworIyAgICBtYWtlIHB1Ymxpc2ggRE9DPWJzcC1ndWlkZSBWRVI9MS43CisjICAgIG1ha2UgcHVibGlzaCBET0M9YWR0LW1hbnVhbCBWRVI9MS42CisjICAgIG1ha2UgcHVibGlzaCBET0M9ZGV2LW1hbnVhbCBWRVI9MS4xLjEgQlJBTkNIPWVkaXNvbgorIyAgICBtYWtlIHB1Ymxpc2ggRE9DPWRldi1tYW51YWwgVkVSPTEuMiBCUkFOQ0g9ZGVuemlsCisjCisjIFRoZSBmaXJzdCBleGFtcGxlIHB1Ymxpc2hlcyB0aGUgMS43IHZlcnNpb24gb2YgYm90aCB0aGUgUERGIGFuZCBIVE1MIHZlcnNpb25zIG9mCisjIHRoZSBCU1AgR3VpZGUuICBUaGUgc2Vjb25kIGV4YW1wbGUgcHVibGlzaGVzIHRoZSAxLjYgdmVyc2lvbiBvZiBib3RoIHRoZSBQREYgYW5kCisjIEhUTUwgdmVyc2lvbnMgb2YgdGhlIEFEVCBNYW51YWwuIFRoZSB0aGlyZCBleGFtcGxlIHB1Ymxpc2hlcyB0aGUgMS4xLjEgdmVyc2lvbiBvZgorIyB0aGUgUERGIGFuZCBIVE1MIFlQIERldmVsb3BtZW50IE1hbnVhbCBmb3IgdGhlICdlZGlzb24nIGJyYW5jaC4gIFRoZSBmb3VydGggZXhhbXBsZQorIyBwdWJsaXNoZXMgdGhlIDEuMiB2ZXJzaW9uIG9mIHRoZSBQREYgYW5kIEhUTUwgWVAgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciB0aGUKKyMgJ2RlbnppbCcgYnJhbmNoLgorIworCitpZmVxICgkKERPQyksYnNwLWd1aWRlKQorWFNMVE9QVFMgPSAtLXhpbmNsdWRlCitBTExQUkVRID0gaHRtbCBlY2xpcHNlIHRhcmJhbGwKK1RBUkZJTEVTID0gYnNwLXN0eWxlLmNzcyBic3AtZ3VpZGUuaHRtbCBmaWd1cmVzL2JzcC10aXRsZS5wbmcgXAorICAgICAgICAgICBlY2xpcHNlCitNQU5VQUxTID0gJChET0MpLyQoRE9DKS5odG1sICQoRE9DKS9lY2xpcHNlCitGSUdVUkVTID0gZmlndXJlcworU1RZTEVTSEVFVCA9ICQoRE9DKS8qLmNzcworCitlbmRpZgorCitpZmVxICgkKERPQyksZGV2LW1hbnVhbCkKK1hTTFRPUFRTID0gLS14aW5jbHVkZQorQUxMUFJFUSA9IGh0bWwgZWNsaXBzZSB0YXJiYWxsCisjCisjIE5vdGUgdGhhdCB0aGUgdGFyZmlsZSBtaWdodCBwcm9kdWNlIHRoZSAiQ2Fubm90IHN0YXQ6IE5vIHN1Y2ggZmlsZSBvcgorIyBkaXJlY3RvcnkiIGVycm9yIG1lc3NhZ2UgZm9yIC5QTkcgZmlsZXMgdGhhdCBhcmUgbm90IHByZXNlbnQgd2hlbiBidWlsZGluZworIyBhIHBhcnRpY3VsYXIgYnJhbmNoLiAgVGhlIGxpc3Qgb2YgZmlsZXMgaXMgYWxsLWluY2x1c2l2ZSBmb3IgYWxsIGJyYW5jaGVzLgorIyBOb3RlLCBpZiB5b3UgZG9uJ3QgcHJvdmlkZSBhIEJSQU5DSCBvcHRpb24sIGl0IGRlZmF1bHRzIHRvIHRoZSBsYXRlc3Qgc3R1ZmYuCisjIFRoaXMgd291bGQgYmUgYXBwcm9wcmlhdGUgZm9yICJtYXN0ZXIiIGJyYW5jaC4KKyMKKworCWlmZXEgKCQoQlJBTkNIKSxlZGlzb24pCitUQVJGSUxFUyA9IGRldi1zdHlsZS5jc3MgZGV2LW1hbnVhbC5odG1sIFwKKyAgICAgICAgICAgZmlndXJlcy9hcHAtZGV2LWZsb3cucG5nIGZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvZGV2LXRpdGxlLnBuZyBmaWd1cmVzL2dpdC13b3JrZmxvdy5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2luZGV4LWRvd25sb2Fkcy5wbmcgZmlndXJlcy9rZXJuZWwtZGV2LWZsb3cucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9rZXJuZWwtZXhhbXBsZS1yZXBvcy1lZGlzb24ucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMS5wbmcgZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMi5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0zLWVkaXNvbi5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3NvdXJjZS1yZXBvcy5wbmcgZmlndXJlcy95cC1kb3dubG9hZC5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3dpcC5wbmcKKwllbHNlIGlmZXEgKCQoQlJBTkNIKSxkZW56aWwpCitUQVJGSUxFUyA9IGRldi1zdHlsZS5jc3MgZGV2LW1hbnVhbC5odG1sIFwKKyAgICAgICAgICAgZmlndXJlcy9hcHAtZGV2LWZsb3cucG5nIGZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvZGV2LXRpdGxlLnBuZyBmaWd1cmVzL2dpdC13b3JrZmxvdy5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2luZGV4LWRvd25sb2Fkcy5wbmcgZmlndXJlcy9rZXJuZWwtZGV2LWZsb3cucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9rZXJuZWwtZXhhbXBsZS1yZXBvcy1kZW56aWwucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMS5wbmcgZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMi5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0zLWRlbnppbC5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3NvdXJjZS1yZXBvcy5wbmcgZmlndXJlcy95cC1kb3dubG9hZC5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3dpcC5wbmcKKyAgICAgICAgZWxzZQorVEFSRklMRVMgPSBkZXYtc3R5bGUuY3NzIGRldi1tYW51YWwuaHRtbCBcCisgICAgICAgICAgIGZpZ3VyZXMvYXBwLWRldi1mbG93LnBuZyBmaWd1cmVzL2JzcC1kZXYtZmxvdy5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2Rldi10aXRsZS5wbmcgZmlndXJlcy9naXQtd29ya2Zsb3cucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9pbmRleC1kb3dubG9hZHMucG5nIGZpZ3VyZXMva2VybmVsLWRldi1mbG93LnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTEucG5nIGZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTItZ2VuZXJpYy5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3NvdXJjZS1yZXBvcy5wbmcgZmlndXJlcy95cC1kb3dubG9hZC5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3JlY2lwZS13b3JrZmxvdy5wbmcgZmlndXJlcy9idWlsZC13b3Jrc3BhY2UtZGlyZWN0b3J5LnBuZyBcCisgICAgICAgICAgIGVjbGlwc2UKKwllbmRpZgorCitNQU5VQUxTID0gJChET0MpLyQoRE9DKS5odG1sICQoRE9DKS9lY2xpcHNlCitGSUdVUkVTID0gZmlndXJlcworU1RZTEVTSEVFVCA9ICQoRE9DKS8qLmNzcworCitlbmRpZgorCitpZmVxICgkKERPQykseW9jdG8tcHJvamVjdC1xcykKK1hTTFRPUFRTID0gLS14aW5jbHVkZQorQUxMUFJFUSA9IGh0bWwgZWNsaXBzZSB0YXJiYWxsCitUQVJGSUxFUyA9IHlvY3RvLXByb2plY3QtcXMuaHRtbCBxcy1zdHlsZS5jc3MgZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3lvY3RvLXByb2plY3QtdHJhbnNwLnBuZyBcCisgICAgICAgICAgIGVjbGlwc2UKK01BTlVBTFMgPSAkKERPQykvJChET0MpLmh0bWwgJChET0MpL2VjbGlwc2UKK0ZJR1VSRVMgPSBmaWd1cmVzCitTVFlMRVNIRUVUID0gJChET0MpLyouY3NzCitlbmRpZgorCitpZmVxICgkKERPQyksbWVnYS1tYW51YWwpCitYU0xUT1BUUyA9IC0tc3RyaW5ncGFyYW0gaHRtbC5zdHlsZXNoZWV0IG1lZ2Etc3R5bGUuY3NzIFwKKyAgICAgICAgICAgLS1zdHJpbmdwYXJhbSAgY2hhcHRlci5hdXRvbGFiZWwgMSBcCisgICAgICAgICAgIC0tc3RyaW5ncGFyYW0gIHNlY3Rpb24uYXV0b2xhYmVsIDEgXAorICAgICAgICAgICAtLXN0cmluZ3BhcmFtICBzZWN0aW9uLmxhYmVsLmluY2x1ZGVzLmNvbXBvbmVudC5sYWJlbCAxIFwKKyAgICAgICAgICAgLS14aW5jbHVkZQorQUxMUFJFUSA9IGh0bWwgdGFyYmFsbAorCisJaWZlcSAoJChCUkFOQ0gpLGVkaXNvbikKK1RBUkZJTEVTID0gbWVnYS1tYW51YWwuaHRtbCBtZWdhLXN0eWxlLmNzcyBmaWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZyBcCisgICAgICAgIGZpZ3VyZXMvYnVpbGRpbmctYW4taW1hZ2UucG5nICBcCisJZmlndXJlcy91c2luZy1hLXByZS1idWlsdC1pbWFnZS5wbmcgXAorCWZpZ3VyZXMvcG9reS10aXRsZS5wbmcgXAorCWZpZ3VyZXMvYWR0LXRpdGxlLnBuZyBmaWd1cmVzL2JzcC10aXRsZS5wbmcgXAorCWZpZ3VyZXMva2VybmVsLXRpdGxlLnBuZyBmaWd1cmVzL2tlcm5lbC1hcmNoaXRlY3R1cmUtb3ZlcnZpZXcucG5nIFwKKwlmaWd1cmVzL2FwcC1kZXYtZmxvdy5wbmcgZmlndXJlcy9ic3AtZGV2LWZsb3cucG5nIFwKKyAgICAgICAgZmlndXJlcy9kZXYtdGl0bGUucG5nIGZpZ3VyZXMvZ2l0LXdvcmtmbG93LnBuZyBcCisgICAgICAgIGZpZ3VyZXMvaW5kZXgtZG93bmxvYWRzLnBuZyBmaWd1cmVzL2tlcm5lbC1kZXYtZmxvdy5wbmcgXAorCWZpZ3VyZXMva2VybmVsLWV4YW1wbGUtcmVwb3MtZWRpc29uLnBuZyBcCisJZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMS5wbmcgZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMi5wbmcgXAorCWZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTMtZWRpc29uLnBuZyBcCisJZmlndXJlcy9zb3VyY2UtcmVwb3MucG5nIGZpZ3VyZXMveXAtZG93bmxvYWQucG5nIFwKKwlmaWd1cmVzL3dpcC5wbmcKKwllbHNlIGlmZXEgKCQoQlJBTkNIKSxkZW56aWwpCitUQVJGSUxFUyA9IG1lZ2EtbWFudWFsLmh0bWwgbWVnYS1zdHlsZS5jc3MgZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC5wbmcgXAorICAgICAgICBmaWd1cmVzL2J1aWxkaW5nLWFuLWltYWdlLnBuZyAgXAorCWZpZ3VyZXMvdXNpbmctYS1wcmUtYnVpbHQtaW1hZ2UucG5nIFwKKwlmaWd1cmVzL3Bva3ktdGl0bGUucG5nIFwKKwlmaWd1cmVzL2FkdC10aXRsZS5wbmcgZmlndXJlcy9ic3AtdGl0bGUucG5nIFwKKwlmaWd1cmVzL2tlcm5lbC10aXRsZS5wbmcgZmlndXJlcy9rZXJuZWwtYXJjaGl0ZWN0dXJlLW92ZXJ2aWV3LnBuZyBcCisJZmlndXJlcy9hcHAtZGV2LWZsb3cucG5nIGZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZyBcCisgICAgICAgIGZpZ3VyZXMvZGV2LXRpdGxlLnBuZyBmaWd1cmVzL2dpdC13b3JrZmxvdy5wbmcgXAorICAgICAgICBmaWd1cmVzL2luZGV4LWRvd25sb2Fkcy5wbmcgZmlndXJlcy9rZXJuZWwtZGV2LWZsb3cucG5nIFwKKwlmaWd1cmVzL2tlcm5lbC1leGFtcGxlLXJlcG9zLWRlbnppbC5wbmcgXAorCWZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTEucG5nIGZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTIucG5nIFwKKwlmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0zLWRlbnppbC5wbmcgXAorCWZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZyBmaWd1cmVzL3lwLWRvd25sb2FkLnBuZyBcCisJZmlndXJlcy93aXAucG5nCisgICAgICAgIGVsc2UKK1RBUkZJTEVTID0gbWVnYS1tYW51YWwuaHRtbCBtZWdhLXN0eWxlLmNzcyBmaWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZyBcCisgICAgICAgIGZpZ3VyZXMvYnVpbGRpbmctYW4taW1hZ2UucG5nICBcCisJZmlndXJlcy91c2luZy1hLXByZS1idWlsdC1pbWFnZS5wbmcgXAorCWZpZ3VyZXMvcG9reS10aXRsZS5wbmcgZmlndXJlcy9idWlsZGhpc3RvcnkucG5nIFwKKyAgICAgICAgZmlndXJlcy9idWlsZGhpc3Rvcnktd2ViLnBuZyBcCisJZmlndXJlcy9hZHQtdGl0bGUucG5nIGZpZ3VyZXMvYnNwLXRpdGxlLnBuZyBcCisJZmlndXJlcy9rZXJuZWwtZGV2LXRpdGxlLnBuZyBmaWd1cmVzL2tlcm5lbC1hcmNoaXRlY3R1cmUtb3ZlcnZpZXcucG5nIFwKKwlmaWd1cmVzL2FwcC1kZXYtZmxvdy5wbmcgZmlndXJlcy9ic3AtZGV2LWZsb3cucG5nIFwKKyAgICAgICAgZmlndXJlcy9kZXYtdGl0bGUucG5nIFwKKwlmaWd1cmVzL2dpdC13b3JrZmxvdy5wbmcgZmlndXJlcy9pbmRleC1kb3dubG9hZHMucG5nIFwKKyAgICAgICAgZmlndXJlcy9rZXJuZWwtZGV2LWZsb3cucG5nIFwKKwlmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0xLnBuZyBmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0yLWdlbmVyaWMucG5nIFwKKwlmaWd1cmVzL3NvdXJjZS1yZXBvcy5wbmcgZmlndXJlcy95cC1kb3dubG9hZC5wbmcgXAorICAgICAgICBmaWd1cmVzL3Byb2ZpbGUtdGl0bGUucG5nIGZpZ3VyZXMva2VybmVsc2hhcmstYWxsLnBuZyBcCisgICAgICAgIGZpZ3VyZXMva2VybmVsc2hhcmstY2hvb3NlLWV2ZW50cy5wbmcgXAorICAgICAgICBmaWd1cmVzL2tlcm5lbHNoYXJrLWk5MTUtZGlzcGxheS5wbmcgXAorICAgICAgICBmaWd1cmVzL2tlcm5lbHNoYXJrLW91dHB1dC1kaXNwbGF5LnBuZyBmaWd1cmVzL2x0dG5nbWFpbjAucG5nIFwKKyAgICAgICAgZmlndXJlcy9vcHJvZmlsZXVpLWJ1c3lib3gucG5nIGZpZ3VyZXMvb3Byb2ZpbGV1aS1jb3B5LXRvLXVzZXIucG5nIFwKKyAgICAgICAgZmlndXJlcy9vcHJvZmlsZXVpLWRvd25sb2FkaW5nLnBuZyBmaWd1cmVzL29wcm9maWxldWktcHJvY2Vzc2VzLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvcGVyZi1wcm9iZS1kb19mb3JrLXByb2ZpbGUucG5nIFwKKyAgICAgICAgZmlndXJlcy9wZXJmLXJlcG9ydC1jeWNsZXMtdS5wbmcgXAorICAgICAgICBmaWd1cmVzL3BlcmYtc3lzdGVtd2lkZS5wbmcgZmlndXJlcy9wZXJmLXN5c3RlbXdpZGUtbGliYy5wbmcgXAorICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLW1lbnUucG5nIFwKKyAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS11ZGhjcGMucG5nIFwKKyAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kZWJ1Z2luZm8ucG5nIFwKKyAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kc28tem9vbS5wbmcgXAorICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLW1lbnUucG5nIFwKKyAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1leHBhbmRlZC1zdHJpcHBlZC5wbmcgXAorICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1mbGF0LXN0cmlwcGVkLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS1mcm9tLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nIFwKKyAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtZGVidWdpbmZvLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS10by11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS10by11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLXVucmVzb2x2ZWQtaGlkZGVuLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvcHlib290Y2hhcnRndWktbGludXgteW9jdG8ucG5nIFwKKyAgICAgICAgZmlndXJlcy9weWNoYXJ0LWxpbnV4LXlvY3RvLXJwbS5wbmcgXAorICAgICAgICBmaWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLW5vc3RyaXAucG5nIFwKKyAgICAgICAgZmlndXJlcy9zY2hlZC13YWtldXAtcHJvZmlsZS5wbmcgZmlndXJlcy9zeXNwcm9mLWNhbGxlcnMucG5nIFwKKyAgICAgICAgZmlndXJlcy9zeXNwcm9mLWNvcHktZnJvbS11c2VyLnBuZyBmaWd1cmVzL3N5c3Byb2YtY29weS10by11c2VyLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWlucy5wbmcgXAorCWZpZ3VyZXMveW9jdG8tZW52aXJvbm1lbnQtcmVmLnBuZyBmaWd1cmVzL3VzZXItY29uZmlndXJhdGlvbi5wbmcgXAorICAgICAgICBmaWd1cmVzL3NvdXJjZS1pbnB1dC5wbmcgZmlndXJlcy9wYWNrYWdlLWZlZWRzLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvbGF5ZXItaW5wdXQucG5nIGZpZ3VyZXMvaW1hZ2VzLnBuZyBmaWd1cmVzL3Nkay5wbmcgXAorCWZpZ3VyZXMvc291cmNlLWZldGNoaW5nLnBuZyBmaWd1cmVzL3BhdGNoaW5nLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvY29uZmlndXJhdGlvbi1jb21waWxlLWF1dG9yZWNvbmYucG5nIFwKKwlmaWd1cmVzL2FuYWx5c2lzLWZvci1wYWNrYWdlLXNwbGl0dGluZy5wbmcgXAorICAgICAgICBmaWd1cmVzL2ltYWdlLWdlbmVyYXRpb24ucG5nIFwKKwlmaWd1cmVzL3Nkay1nZW5lcmF0aW9uLnBuZyBmaWd1cmVzL3JlY2lwZS13b3JrZmxvdy5wbmcgXAorCWZpZ3VyZXMvYnVpbGQtd29ya3NwYWNlLWRpcmVjdG9yeS5wbmcgZmlndXJlcy9tZWdhLXRpdGxlLnBuZyBcCisJZmlndXJlcy90b2FzdGVyLXRpdGxlLnBuZyBmaWd1cmVzL2hvc3RlZC1zZXJ2aWNlLnBuZyBcCisJZmlndXJlcy9zaW1wbGUtY29uZmlndXJhdGlvbi5wbmcKKwllbmRpZgorCitNQU5VQUxTID0gJChET0MpLyQoRE9DKS5odG1sCitGSUdVUkVTID0gZmlndXJlcworU1RZTEVTSEVFVCA9ICQoRE9DKS8qLmNzcworCitlbmRpZgorCitpZmVxICgkKERPQykscmVmLW1hbnVhbCkKK1hTTFRPUFRTID0gLS14aW5jbHVkZQorQUxMUFJFUSA9IGh0bWwgZWNsaXBzZSB0YXJiYWxsCitUQVJGSUxFUyA9IHJlZi1tYW51YWwuaHRtbCByZWYtc3R5bGUuY3NzIGZpZ3VyZXMvcG9reS10aXRsZS5wbmcgXAorCWZpZ3VyZXMvYnVpbGRoaXN0b3J5LnBuZyBmaWd1cmVzL2J1aWxkaGlzdG9yeS13ZWIucG5nIGVjbGlwc2UgXAorICAgICAgICBmaWd1cmVzL2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbnMucG5nIGZpZ3VyZXMvbGF5ZXItaW5wdXQucG5nIFwKKwlmaWd1cmVzL3BhY2thZ2UtZmVlZHMucG5nIGZpZ3VyZXMvc291cmNlLWlucHV0LnBuZyBcCisJZmlndXJlcy91c2VyLWNvbmZpZ3VyYXRpb24ucG5nIGZpZ3VyZXMveW9jdG8tZW52aXJvbm1lbnQtcmVmLnBuZyBcCisJZmlndXJlcy9pbWFnZXMucG5nIGZpZ3VyZXMvc2RrLnBuZyBmaWd1cmVzL3NvdXJjZS1mZXRjaGluZy5wbmcgXAorCWZpZ3VyZXMvcGF0Y2hpbmcucG5nIGZpZ3VyZXMvY29uZmlndXJhdGlvbi1jb21waWxlLWF1dG9yZWNvbmYucG5nIFwKKwlmaWd1cmVzL2FuYWx5c2lzLWZvci1wYWNrYWdlLXNwbGl0dGluZy5wbmcgZmlndXJlcy9pbWFnZS1nZW5lcmF0aW9uLnBuZyBcCisJZmlndXJlcy9zZGstZ2VuZXJhdGlvbi5wbmcgZmlndXJlcy9idWlsZGluZy1hbi1pbWFnZS5wbmcKK01BTlVBTFMgPSAkKERPQykvJChET0MpLmh0bWwgJChET0MpL2VjbGlwc2UKK0ZJR1VSRVMgPSBmaWd1cmVzCitTVFlMRVNIRUVUID0gJChET0MpLyouY3NzCitlbmRpZgorCisKK2lmZXEgKCQoRE9DKSxhZHQtbWFudWFsKQorWFNMVE9QVFMgPSAtLXhpbmNsdWRlCitBTExQUkVRID0gaHRtbCBlY2xpcHNlIHRhcmJhbGwKK1RBUkZJTEVTID0gYWR0LW1hbnVhbC5odG1sIGFkdC1zdHlsZS5jc3MgZmlndXJlcy9hZHQtdGl0bGUucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy91c2luZy1hLXByZS1idWlsdC1pbWFnZS5wbmcgXAorICAgICAgICAgICBlY2xpcHNlCitNQU5VQUxTID0gJChET0MpLyQoRE9DKS5odG1sICQoRE9DKS9lY2xpcHNlCitGSUdVUkVTID0gZmlndXJlcworU1RZTEVTSEVFVCA9ICQoRE9DKS8qLmNzcworZW5kaWYKKworaWZlcSAoJChET0MpLHByb2ZpbGUtbWFudWFsKQorWFNMVE9QVFMgPSAtLXhpbmNsdWRlCitBTExQUkVRID0gaHRtbCBlY2xpcHNlIHRhcmJhbGwKK1RBUkZJTEVTID0gcHJvZmlsZS1tYW51YWwuaHRtbCBwcm9maWxlLW1hbnVhbC1zdHlsZS5jc3MgXAorICAgICAgICAgICBmaWd1cmVzL3Byb2ZpbGUtdGl0bGUucG5nIGZpZ3VyZXMva2VybmVsc2hhcmstYWxsLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMva2VybmVsc2hhcmstY2hvb3NlLWV2ZW50cy5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2tlcm5lbHNoYXJrLWk5MTUtZGlzcGxheS5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2tlcm5lbHNoYXJrLW91dHB1dC1kaXNwbGF5LnBuZyBmaWd1cmVzL2x0dG5nbWFpbjAucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9vcHJvZmlsZXVpLWJ1c3lib3gucG5nIGZpZ3VyZXMvb3Byb2ZpbGV1aS1jb3B5LXRvLXVzZXIucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9vcHJvZmlsZXVpLWRvd25sb2FkaW5nLnBuZyBmaWd1cmVzL29wcm9maWxldWktcHJvY2Vzc2VzLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvcGVyZi1wcm9iZS1kb19mb3JrLXByb2ZpbGUucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9wZXJmLXJlcG9ydC1jeWNsZXMtdS5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3BlcmYtc3lzdGVtd2lkZS5wbmcgZmlndXJlcy9wZXJmLXN5c3RlbXdpZGUtbGliYy5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLW1lbnUucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS11ZGhjcGMucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kZWJ1Z2luZm8ucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kc28tem9vbS5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLW1lbnUucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1leHBhbmRlZC1zdHJpcHBlZC5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1mbGF0LXN0cmlwcGVkLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS1mcm9tLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtZGVidWdpbmZvLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS10by11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS10by11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLXVucmVzb2x2ZWQtaGlkZGVuLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvcHlib290Y2hhcnRndWktbGludXgteW9jdG8ucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9weWNoYXJ0LWxpbnV4LXlvY3RvLXJwbS5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLW5vc3RyaXAucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9zY2hlZC13YWtldXAtcHJvZmlsZS5wbmcgZmlndXJlcy9zeXNwcm9mLWNhbGxlcnMucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9zeXNwcm9mLWNvcHktZnJvbS11c2VyLnBuZyBmaWd1cmVzL3N5c3Byb2YtY29weS10by11c2VyLnBuZyBcCisgICAgICAgICAgIGVjbGlwc2UKK01BTlVBTFMgPSAkKERPQykvJChET0MpLmh0bWwgJChET0MpL2VjbGlwc2UKK0ZJR1VSRVMgPSBmaWd1cmVzCitTVFlMRVNIRUVUID0gJChET0MpLyouY3NzCitlbmRpZgorCitpZmVxICgkKERPQyksa2VybmVsLWRldikKK1hTTFRPUFRTID0gLS14aW5jbHVkZQorQUxMUFJFUSA9IGh0bWwgZWNsaXBzZSB0YXJiYWxsCitUQVJGSUxFUyA9IGtlcm5lbC1kZXYuaHRtbCBrZXJuZWwtZGV2LXN0eWxlLmNzcyBcCisgICAgICAgICAgIGZpZ3VyZXMva2VybmVsLWRldi10aXRsZS5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2tlcm5lbC1hcmNoaXRlY3R1cmUtb3ZlcnZpZXcucG5nIFwKKyAgICAgICAgICAgZWNsaXBzZQorTUFOVUFMUyA9ICQoRE9DKS8kKERPQykuaHRtbCAkKERPQykvZWNsaXBzZQorRklHVVJFUyA9IGZpZ3VyZXMKK1NUWUxFU0hFRVQgPSAkKERPQykvKi5jc3MKK2VuZGlmCisKK2lmZXEgKCQoRE9DKSx0b2FzdGVyLW1hbnVhbCkKK1hTTFRPUFRTID0gLS14aW5jbHVkZQorQUxMUFJFUSA9IGh0bWwgdGFyYmFsbAorVEFSRklMRVMgPSB0b2FzdGVyLW1hbnVhbC5odG1sIHRvYXN0ZXItbWFudWFsLXN0eWxlLmNzcyBcCisJICAgZmlndXJlcy90b2FzdGVyLXRpdGxlLnBuZyBmaWd1cmVzL3NpbXBsZS1jb25maWd1cmF0aW9uLnBuZyBcCisJICAgZmlndXJlcy9ob3N0ZWQtc2VydmljZS5wbmcKK01BTlVBTFMgPSAkKERPQykvJChET0MpLmh0bWwgJChET0MpLyQoRE9DKS5wZGYKK0ZJR1VSRVMgPSBmaWd1cmVzCitTVFlMRVNIRUVUID0gJChET0MpLyouY3NzCitlbmRpZgorCisKKyMjCisjIFRoZXNlIFVSSSBzaG91bGQgYmUgcmV3cml0dGVuIGJ5IHlvdXIgZGlzdHJpYnV0aW9uJ3MgeG1sIGNhdGFsb2cgdG8KKyMgbWF0Y2ggeW91ciBsb2NhbGx5IGluc3RhbGxlZCBYU0wgc3R5bGVzaGVldHMuCitYU0xfQkFTRV9VUkkgID0gaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMQorWFNMX1hIVE1MX1VSSSA9ICQoWFNMX0JBU0VfVVJJKS94aHRtbC9kb2Nib29rLnhzbAorCithbGw6ICQoQUxMUFJFUSkKKworcGRmOgoraWZlcSAoJChET0MpLHlvY3RvLXByb2plY3QtcXMpCisJQGVjaG8gIiAiCisJQGVjaG8gIkVSUk9SOiBZb3UgY2Fubm90IGdlbmVyYXRlIGEgeW9jdG8tcHJvamVjdC1xcyBQREYgZmlsZS4iCisJQGVjaG8gIiAiCisKK2Vsc2UgaWZlcSAoJChET0MpLG1lZ2EtbWFudWFsKQorCUBlY2hvICIgIgorCUBlY2hvICJFUlJPUjogWW91IGNhbm5vdCBnZW5lcmF0ZSBhIG1lZ2EtbWFudWFsIFBERiBmaWxlLiIKKwlAZWNobyAiICIKKworZWxzZQorCisJY2QgJChET0MpOyAuLi90b29scy9wb2t5LWRvY2Jvb2stdG8tcGRmICQoRE9DKS54bWwgLi4vdGVtcGxhdGU7IGNkIC4uCitlbmRpZgorCitodG1sOgoraWZlcSAoJChET0MpLG1lZ2EtbWFudWFsKQorIyAgICAgICBTZWUgaHR0cDovL3d3dy5zYWdlaGlsbC5uZXQvZG9jYm9va3hzbC9IdG1sT3V0cHV0Lmh0bWwKKwlAZWNobyAiICIKKwlAZWNobyAiKioqKioqKiogQnVpbGRpbmcgIiQoRE9DKQorCUBlY2hvICIgIgorCWNkICQoRE9DKTsgeHNsdHByb2MgJChYU0xUT1BUUykgLW8gJChET0MpLmh0bWwgJChET0MpLWN1c3RvbWl6YXRpb24ueHNsICQoRE9DKS54bWw7IGNkIC4uCisJQGVjaG8gIiAiCisJQGVjaG8gIioqKioqKioqIFVzaW5nIG1lZ2EtbWFudWFsLnNlZCB0byBwcm9jZXNzIGV4dGVybmFsIGxpbmtzIgorCUBlY2hvICIgIgorCWNkICQoRE9DKTsgc2VkIC1mIC4uL3Rvb2xzL21lZ2EtbWFudWFsLnNlZCA8IG1lZ2EtbWFudWFsLmh0bWwgPiBtZWdhLW91dHB1dC5odG1sOyBjZCAuLgorCUBlY2hvICIgIgorCUBlY2hvICIqKioqKioqKiBDbGVhbmluZyB1cCB0cmFuc2llbnQgZmlsZSBtZWdhLW91dHB1dC5odG1sIgorCUBlY2hvICIgIgorCWNkICQoRE9DKTsgcm0gbWVnYS1tYW51YWwuaHRtbDsgbXYgbWVnYS1vdXRwdXQuaHRtbCBtZWdhLW1hbnVhbC5odG1sOyBjZCAuLgorZWxzZQorIyAgICAgICBTZWUgaHR0cDovL3d3dy5zYWdlaGlsbC5uZXQvZG9jYm9va3hzbC9IdG1sT3V0cHV0Lmh0bWwKKwlAZWNobyAiICIKKwlAZWNobyAiKioqKioqKiogQnVpbGRpbmcgIiQoRE9DKQorCUBlY2hvICIgIgorCWNkICQoRE9DKTsgeHNsdHByb2MgJChYU0xUT1BUUykgLW8gJChET0MpLmh0bWwgJChET0MpLWN1c3RvbWl6YXRpb24ueHNsICQoRE9DKS54bWw7IGNkIC4uCitlbmRpZgorCisKK2VjbGlwc2U6IEJBU0VfRElSID0gaHRtbC8kKERPQykvCisKK2VjbGlwc2U6IGVjbGlwc2UtZ2VuZXJhdGUgZWNsaXBzZS1yZXNvbHZlLWxpbmtzCisKKy5QSE9OWSA6IGVjbGlwc2UtZ2VuZXJhdGUgZWNsaXBzZS1yZXNvbHZlLWxpbmtzCisKK2VjbGlwc2UtZ2VuZXJhdGU6CitpZmVxICgkKGZpbHRlciAkKERPQyksIGFkdC1tYW51YWwgYnNwLWd1aWRlIGRldi1tYW51YWwga2VybmVsLWRldiBwcm9maWxlLW1hbnVhbCByZWYtbWFudWFsIHlvY3RvLXByb2plY3QtcXMpLCkKKwlAZWNobyAiICIKKwlAZWNobyAiRVJST1I6IFlvdSBjYW4gb25seSBjcmVhdGUgZWNsaXBzZSBkb2N1bWVudGF0aW9uIgorCUBlY2hvICIgICAgICAgb2YgdGhlIGZvbGxvd2luZyBkb2N1bWVudGF0aW9uIHBhcnRzOiIKKwlAZWNobyAiICAgICAgIC0gYWR0LW1hbnVhbCIKKwlAZWNobyAiICAgICAgIC0gYnNwLWd1aWRlIgorCUBlY2hvICIgICAgICAgLSBkZXYtbWFudWFsIgorCUBlY2hvICIgICAgICAgLSBrZXJuZWwtZGV2IgorCUBlY2hvICIgICAgICAgLSBwcm9maWxlLW1hbnVhbCIKKwlAZWNobyAiICAgICAgIC0gcmVmLW1hbnVhbCIKKwlAZWNobyAiICAgICAgIC0geW9jdG8tcHJvamVjdC1xcyIKKwlAZWNobyAiICIKK2Vsc2UKKwlAZWNobyAiICIKKwlAZWNobyAiKioqKioqKiogQnVpbGRpbmcgZWNsaXBzZSBoZWxwIG9mICIkKERPQykKKwlAZWNobyAiICIKKwljZCAkKERPQykgJiYgXAorCQl4c2x0cHJvYyAkKFhTTFRPUFRTKSBcCisJCQkJLS1zdHJpbmdwYXJhbSBiYXNlLmRpciAnJChCQVNFX0RJUiknIFwKKwkJCQktbyBlY2xpcHNlLyQoRE9DKS5odG1sIFwKKwkJCQkkKERPQyktZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbCAkKERPQykueG1sICYmIFwKKwkJbXYgZWNsaXBzZS90b2MueG1sIGVjbGlwc2UvJChET0MpLXRvYy54bWwgJiYgXAorCQljcCAtcmYgJChGSUdVUkVTKSBlY2xpcHNlLyQoQkFTRV9ESVIpICYmIFwKKwkJY2QgLi47CisKKwkkKGNhbGwgbW9kaWZ5LWVjbGlwc2UpCitlbmRpZgorCitlY2xpcHNlLXJlc29sdmUtbGlua3M6CisJQGVjaG8gIiAiCisJQGVjaG8gIioqKioqKioqIFVzaW5nIGVjbGlwc2UtaGVscC5zZWQgdG8gcHJvY2VzcyBleHRlcm5hbCBsaW5rcyIKKwlAZWNobyAiICIKKwkkKGZvcmVhY2ggRklMRSwgXAorCQkkKHdpbGRjYXJkICQoRE9DKS9lY2xpcHNlL2h0bWwvJChET0MpLyouaHRtbCksIFwKKwkJJChzaGVsbCBzZWQgLWkgLWYgdG9vbHMvZWNsaXBzZS1oZWxwLnNlZCAkKEZJTEUpKSkKKwordGFyYmFsbDogaHRtbAorCUBlY2hvICIgIgorCUBlY2hvICIqKioqKioqKiBDcmVhdGluZyBUYXJiYWxsIG9mIGRvY3VtZW50IGZpbGVzIgorCUBlY2hvICIgIgorCWNkICQoRE9DKTsgdGFyIC1jdnpmICQoRE9DKS50Z3ogJChUQVJGSUxFUyk7IGNkIC4uCisKK3ZhbGlkYXRlOgorCWNkICQoRE9DKTsgeG1sbGludCAtLXBvc3R2YWxpZCAtLXhpbmNsdWRlIC0tbm9vdXQgJChET0MpLnhtbDsgY2QgLi4KKworCitwdWJsaXNoOgorCUBpZiB0ZXN0IC1mICQoRE9DKS8kKERPQykuaHRtbDsgXAorCSAgdGhlbiBcCisgICAgICAgICAgICBlY2hvICIgIjsgXAorICAgICAgICAgICAgZWNobyAiKioqKioqKiogUHVibGlzaGluZyAiJChET0MpIi5odG1sIjsgXAorICAgICAgICAgICAgZWNobyAiICI7IFwKKyAgICAgICAgICAgIHNjcCAtciAkKE1BTlVBTFMpICQoU1RZTEVTSEVFVCkgZG9jcy55cDovdmFyL3d3dy93d3cueW9jdG9wcm9qZWN0Lm9yZy1kb2NzLyQoVkVSKS8kKERPQyk7IFwKKyAgICAgICAgICAgIGNkICQoRE9DKTsgc2NwIC1yICQoRklHVVJFUykgZG9jcy55cDovdmFyL3d3dy93d3cueW9jdG9wcm9qZWN0Lm9yZy1kb2NzLyQoVkVSKS8kKERPQyk7IFwKKwllbHNlIFwKKyAgICAgICAgICBlY2hvICIgIjsgXAorICAgICAgICAgIGVjaG8gJChET0MpIi5odG1sIG1pc3NpbmcuICBHZW5lcmF0ZSB0aGUgZmlsZSBmaXJzdCB0aGVuIHRyeSBhZ2Fpbi4iOyBcCisgICAgICAgICAgZWNobyAiICI7IFwKKwlmaQorCitjbGVhbjoKKwlybSAtcmYgJChNQU5VQUxTKTsgcm0gJChET0MpLyQoRE9DKS50Z3o7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vUkVBRE1FIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDE2NzhkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL1JFQURNRQpAQCAtMCwwICsxLDkxIEBACitkb2N1bWVudGF0aW9uCis9PT09PT09PT09PT09CisKK1RoaXMgaXMgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBZb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24uICBUaGUgWW9jdG8KK1Byb2plY3Qgc291cmNlIHJlcG9zaXRvcmllcyBhdCBodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC5jZ2kgaGF2ZSB0d28KK2luc3RhbmNlcyBvZiB0aGUgImRvY3VtZW50YXRpb24iIGRpcmVjdG9yeS4gIFlvdSBzaG91bGQgdW5kZXJzdGFuZCBlYWNoIG9mCit0aGVzZSBpbnN0YW5jZXMuCisKKyAgcG9reS9kb2N1bWVudGF0aW9uIC0gVGhlIGRpcmVjdG9yeSB3aXRoaW4gdGhlIHBva3kgR2l0IHJlcG9zaXRvcnkgY29udGFpbmluZworICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2V0IG9mIFlvY3RvIFByb2plY3QgbWFudWFscy4gIFdoZW4geW91IGNsb25lIHRoZQorICAgICAgICAgICAgICAgICAgICAgICBwb2t5IEdpdCByZXBvc2l0b3J5LCB0aGUgZG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgdGhlIG1hbnVhbHMuICBUaGUgc3RhdGUgb2YgdGhlIG1hbnVhbHMgaW4gdGhpcworICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaXMgZ3VhcmFudGVlZCB0byByZWZsZWN0IHRoZSBsYXRlc3QgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdCByZWxlYXNlLiAgVGhlIG1hbnVhbHMgYXQgdGhlIHRpcCBvZiB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB3aWxsIGFsc28gbGlrZWx5IGNvbnRhaW4gbW9zdCBtYW51YWwKKyAgICAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgY2hhbmdlcy4KKworICB5b2N0by1kb2NzL2RvY3VtZW50YXRpb24gLSBUaGUgR2l0IHJlcG9zaXRvcnkgZm9yIHRoZSBZb2N0byBQcm9qZWN0IG1hbnVhbHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVwb3NpdG9yeSBpcyB3aGVyZSBtYW51YWwgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2NjdXJzLiAgSWYgeW91IHBsYW4gb24gY29udHJpYnV0aW5nIGJhY2sgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbiwgeW91IHNob3VsZCBzZXQgdXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBsb2NhbCBHaXQgcmVwb3NpdG9yeSBiYXNlZCBvbiB0aGlzIHVwc3RyZWFtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgYXMgZm9sbG93czoKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpdCBjbG9uZSBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1kb2NzCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlcyBhbmQgcGF0Y2hlcyBhcmUgZmlyc3QgcHVzaGVkIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b2N0by1kb2NzIEdpdCByZXBvc2l0b3J5LiAgTGF0ZXIsIHRoZXkgbWFrZSBpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZSBwb2t5IEdpdCByZXBvc2l0b3J5IGZvdW5kIGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kuCisKK01hbnVhbCBPcmdhbml6YXRpb24KKz09PT09PT09PT09PT09PT09PT0KKworRm9sZGVycyBleGlzdCBmb3IgaW5kaXZpZHVhbCBtYW51YWxzIGFzIGZvbGxvd3M6CisKKyogYWR0LW1hbnVhbCAgICAgICAtIFRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlLgorKiBic3AtZ3VpZGUgICAgICAgIC0gVGhlIFlvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIERldmVsb3BlcidzIEd1aWRlCisqIGRldi1tYW51YWwgICAgICAgLSBUaGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwKKyoga2VybmVsLWRldiAgICAgICAtIFRoZSBZb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWwKKyogcmVmLW1hbnVhbCAgICAgICAtIFRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwKKyogeW9jdG8tcHJvamVjdC1xcyAtIFRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0CisqIG1lZ2EtbWFudWFsICAgICAgLSBBbiBhZ2dyZWdhdGVkIG1hbnVhbCBjb21wcmlzZWQgb2YgYWxsIFlQIG1hbnVhbHMgYW5kIGd1aWRlcworKiBwcm9maWxlLW1hbnVhbCAgIC0gVGhlIFlvY3RvIFByb2plY3QgUHJvZmlsZSBhbmQgVHJhY2luZyBNYW51YWwKKworRWFjaCBmb2xkZXIgaXMgc2VsZi1jb250YWluZWQgcmVnYXJkaW5nIGNvbnRlbnQgYW5kIGZpZ3VyZXMuICBOb3RlIHRoYXQgdGhlcmUKK2lzIGEgc2VkIGZpbGUgbmVlZGVkIHRvIHByb2Nlc3MgdGhlIGxpbmtzIG9mIHRoZSBtZWdhLW1hbnVhbC4gIFRoZSBzZWQgZmlsZQoraXMgbG9jYXRlZCBpbiB0aGUgdG9vbHMgZGlyZWN0b3J5LiAgQWxzbyBub3RlIHRoYXQgdGhlIGZpZ3VyZXMgZm9sZGVyIGluIHRoZQorbWVnYS1tYW51YWwgZGlyZWN0b3J5IGNvbnRhaW5zIGR1cGxpY2F0ZXMgb2YgYWxsIHRoZSBmaWd1cmVzIGluIHRoZSBZUCBmb2xkZXJzCitkaXJlY3RvcmllcyBmb3IgYWxsIFlQIG1hbnVhbHMgYW5kIGd1aWRlcy4KKworSWYgeW91IHdhbnQgdG8gZmluZCBIVE1MIHZlcnNpb25zIG9mIHRoZSBZb2N0byBQcm9qZWN0IG1hbnVhbHMgb24gdGhlIHdlYiwKK2dvIHRvIGh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZyBhbmQgY2xpY2sgb24gdGhlICJEb2N1bWVudGF0aW9uIiB0YWIuICBGcm9tCit0aGVyZSB5b3UgaGF2ZSBhY2Nlc3MgdG8gYXJjaGl2ZWQgZG9jdW1lbnRhdGlvbiBmcm9tIHByZXZpb3VzIHJlbGVhc2VzLCBjdXJyZW50Citkb2N1bWVudGF0aW9uIGZvciB0aGUgbGF0ZXN0IHJlbGVhc2UsIGFuZCAiRG9jcyBpbiBQcm9ncmVzcyIgZm9yIHRoZSByZWxlYXNlCitjdXJyZW50bHkgYmVpbmcgZGV2ZWxvcGVkLgorCitJbiBnZW5lcmFsLCB0aGUgWW9jdG8gUHJvamVjdCBzaXRlIChodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcpIGlzIGEgZ3JlYXQKK3JlZmVyZW5jZSBmb3IgYm90aCBpbmZvcm1hdGlvbiBhbmQgZG93bmxvYWRzLgorCitNYWtlZmlsZQorPT09PT09PT0KKworVGhlIE1ha2VmaWxlIHByb2Nlc3NlcyBtYW51YWwgZGlyZWN0b3JpZXMgdG8gY3JlYXRlIEhUTUwsIFBERiwKK3RhcmJhbGxzLCBldGMuICBEZXRhaWxzIG9uIGhvdyB0aGUgTWFrZWZpbGUgd29yayBhcmUgZG9jdW1lbnRlZAoraW5zaWRlIHRoZSBNYWtlZmlsZS4gIFNlZSB0aGF0IGZpbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1RvIGJ1aWxkIGEgbWFudWFsLCB5b3UgcnVuIHRoZSBtYWtlIGNvbW1hbmQgYW5kIHBhc3MgaXQgdGhlIG5hbWUKK29mIHRoZSBmb2xkZXIgY29udGFpbmluZyB0aGUgbWFudWFsJ3MgY29udGVudHMuCitGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21tYW5kIHJ1biBmcm9tIHRoZSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeQorY3JlYXRlcyBhbiBIVE1MIGFuZCBhIFBERiB2ZXJzaW9uIG9mIHRoZSBBRFQgbWFudWFsLgorVGhlIERPQyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIG1hbnVhbCB5b3UgYXJlIG1ha2luZzoKKworICAgICAkIG1ha2UgRE9DPWFkdC1tYW51YWwKKworcG9reS5lbnQKKz09PT09PT09CisKK1RoaXMgZmlsZSBkZWZpbmVzIHZhcmlhYmxlcyB1c2VkIGZvciBkb2N1bWVudGF0aW9uIHByb2R1Y3Rpb24uICBUaGUgdmFyaWFibGVzCithcmUgdXNlZCB0byBkZWZpbmUgcmVsZWFzZSBwYXRobmFtZXMsIFVSTHMgZm9yIHRoZSBwdWJsaXNoZWQgbWFudWFscywgZXRjLgorCit0ZW1wbGF0ZQorPT09PT09PT0KK0NvbnRhaW5zIHZhcmlvdXMgdGVtcGxhdGVzLCBmb250cywgYW5kIHNvbWUgb2xkIFBORyBmaWxlcy4KKwordG9vbHMKKz09PT09CitDb250YWlucyBhIHRvb2wgdG8gY29udmVydCB0aGUgRG9jQm9vayBmaWxlcyB0byBQREYgZm9ybWF0LiAgVGhpcyBmb2xkZXIgYWxzbworY29udGFpbnMgdGhlIG1lZ2EtbWFudWFsLnNlZCBmaWxlLCB3aGljaCBpcyB1c2VkIGJ5IE1ha2VmaWxlIHRvIHByb2Nlc3MKK2Nyb3NzLXJlZmVyZW5jZXMgZnJvbSB3aXRoaW4gdGhlIG1hbnVhbCB0aGF0IG5vcm1hbGx5IGdvIHRvIGFuIGV4dGVybmFsCittYW51YWwuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtY29tbWFuZC54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtY29tbWFuZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc4ZDE4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1jb21tYW5kLnhtbApAQCAtMCwwICsxLDI2NSBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J3VzaW5nLXRoZS1jb21tYW5kLWxpbmUnPgorPHRpdGxlPlVzaW5nIHRoZSBDb21tYW5kIExpbmU8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFJlY2FsbCB0aGF0IGVhcmxpZXIgdGhlIG1hbnVhbCBkaXNjdXNzZWQgaG93IHRvIHVzZSBhbiBleGlzdGluZyB0b29sY2hhaW4KKyAgICAgICAgdGFyYmFsbCB0aGF0IGhhZCBiZWVuIGluc3RhbGxlZCBpbnRvIHRoZSBkZWZhdWx0IGluc3RhbGxhdGlvbgorICAgICAgICBkaXJlY3RvcnksIDxmaWxlbmFtZT4vb3B0L3Bva3kvJkRJU1RSTzs8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgb3V0c2lkZSBvZiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAoc2VlIHRoZSBzZWN0aW9uICI8bGluayBsaW5rZW5kPSd1c2luZy1hbi1leGlzdGluZy10b29sY2hhaW4tdGFyYmFsbCc+VXNpbmcgYSBDcm9zcy1Ub29sY2hhaW4gVGFyYmFsbCk8L2xpbms+Ii4KKyAgICAgICAgQW5kLCB0aGF0IHNvdXJjaW5nIHlvdXIgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGVudmlyb25tZW50IHNldHVwIHNjcmlwdAorICAgICAgICBpbml0aWFsaXplcyBhIHN1aXRhYmxlIGNyb3NzLXRvb2xjaGFpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRHVyaW5nIHRoaXMgc2V0dXAsIGxvY2F0aW9ucyBmb3IgdGhlIGNvbXBpbGVyLCBRRU1VIHNjcmlwdHMsIFFFTVUgYmluYXJ5LAorICAgICAgICBhIHNwZWNpYWwgdmVyc2lvbiBvZiA8ZmlsZW5hbWU+cGtnY29uZmlnPC9maWxlbmFtZT4gYW5kIG90aGVyIHVzZWZ1bAorICAgICAgICB1dGlsaXRpZXMgYXJlIGFkZGVkIHRvIHRoZSA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICBBbHNvLCB2YXJpYWJsZXMgdG8gYXNzaXN0CisgICAgICAgIDxmaWxlbmFtZT5wa2djb25maWc8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+CisgICAgICAgIGFyZSBhbHNvIGRlZmluZWQgc28gdGhhdCwgZm9yIGV4YW1wbGUsIDxmaWxlbmFtZT5jb25maWd1cmUuc2g8L2ZpbGVuYW1lPgorICAgICAgICBjYW4gZmluZCBwcmUtZ2VuZXJhdGVkIHRlc3QgcmVzdWx0cyBmb3IgdGVzdHMgdGhhdCBuZWVkIHRhcmdldCBoYXJkd2FyZQorICAgICAgICBvbiB3aGljaCB0byBydW4uCisgICAgICAgIFlvdSBjYW4gc2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2V0dGluZy11cC10aGUtY3Jvc3MtZGV2ZWxvcG1lbnQtZW52aXJvbm1lbnQnPlNldHRpbmcgVXAgdGhlIENyb3NzLURldmVsb3BtZW50IEVudmlyb25tZW50PC9saW5rPiIKKyAgICAgICAgc2VjdGlvbiBmb3IgdGhlIGxpc3Qgb2YgY3Jvc3MtdG9vbGNoYWluIGVudmlyb25tZW50IHZhcmlhYmxlcworICAgICAgICBlc3RhYmxpc2hlZCBieSB0aGUgc2NyaXB0LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBDb2xsZWN0aXZlbHksIHRoZXNlIGNvbmRpdGlvbnMgYWxsb3cgeW91IHRvIGVhc2lseSB1c2UgdGhlIHRvb2xjaGFpbgorICAgICAgICBvdXRzaWRlIG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgZW52aXJvbm1lbnQgb24gYm90aCBBdXRvdG9vbHMtYmFzZWQKKyAgICAgICAgcHJvamVjdHMgYW5kIE1ha2VmaWxlLWJhc2VkIHByb2plY3RzLgorICAgICAgICBUaGlzIGNoYXB0ZXIgcHJvdmlkZXMgaW5mb3JtYXRpb24gZm9yIGJvdGggdGhlc2UgdHlwZXMgb2YgcHJvamVjdHMuCisgICAgPC9wYXJhPgorCisKKzxzZWN0aW9uIGlkPSdhdXRvdG9vbHMtYmFzZWQtcHJvamVjdHMnPgorPHRpdGxlPkF1dG90b29scy1CYXNlZCBQcm9qZWN0czwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgT25jZSB5b3UgaGF2ZSBhIHN1aXRhYmxlIGNyb3NzLXRvb2xjaGFpbiBpbnN0YWxsZWQsIGl0IGlzIHZlcnkgZWFzeSB0bworICAgICAgICBkZXZlbG9wIGEgcHJvamVjdCBvdXRzaWRlIG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICBUaGlzIHNlY3Rpb24gcHJlc2VudHMgYSBzaW1wbGUgIkhlbGxvd29ybGQiIGV4YW1wbGUgdGhhdCBzaG93cyBob3cKKyAgICAgICAgdG8gc2V0IHVwLCBjb21waWxlLCBhbmQgcnVuIHRoZSBwcm9qZWN0LgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdjcmVhdGluZy1hbmQtcnVubmluZy1hLXByb2plY3QtYmFzZWQtb24tZ251LWF1dG90b29scyc+CisgICAgICAgIDx0aXRsZT5DcmVhdGluZyBhbmQgUnVubmluZyBhIFByb2plY3QgQmFzZWQgb24gR05VIEF1dG90b29sczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gY3JlYXRlIGEgc2ltcGxlIEF1dG90b29scy1iYXNlZCBwcm9qZWN0OgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIHlvdXIgZGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENyZWF0ZSBhIGNsZWFuIGRpcmVjdG9yeSBmb3IgeW91ciBwcm9qZWN0IGFuZCB0aGVuIG1ha2UKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBkaXJlY3RvcnkgeW91ciB3b3JraW5nIGxvY2F0aW9uOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgbWtkaXIgJEhPTUUvaGVsbG93b3JsZAorICAgICAkIGNkICRIT01FL2hlbGxvd29ybGQKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UG9wdWxhdGUgdGhlIGRpcmVjdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBDcmVhdGUgPGZpbGVuYW1lPmhlbGxvLmM8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPk1ha2VmaWxlLmFtPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+Y29uZmlndXJlLmluPC9maWxlbmFtZT4gZmlsZXMgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Gb3IgPGZpbGVuYW1lPmhlbGxvLmM8L2ZpbGVuYW1lPiwgaW5jbHVkZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXNlIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisKKyAgICAgbWFpbigpCisgICAgICAgIHsKKyAgICAgICAgICAgcHJpbnRmKCJIZWxsbyBXb3JsZCFcbiIpOworICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciA8ZmlsZW5hbWU+TWFrZWZpbGUuYW08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlIHRoZXNlIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgYmluX1BST0dSQU1TID0gaGVsbG8KKyAgICAgaGVsbG9fU09VUkNFUyA9IGhlbGxvLmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rm9yIDxmaWxlbmFtZT5jb25maWd1cmUuaW48L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlIHRoZXNlIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQUNfSU5JVChoZWxsby5jKQorICAgICBBTV9JTklUX0FVVE9NQUtFKGhlbGxvLDAuMSkKKyAgICAgQUNfUFJPR19DQworICAgICBBQ19QUk9HX0lOU1RBTEwKKyAgICAgQUNfT1VUUFVUKE1ha2VmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Tb3VyY2UgdGhlIGNyb3NzLXRvb2xjaGFpbgorICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBzZXR1cCBmaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluc3RhbGxhdGlvbiBvZiB0aGUgY3Jvc3MtdG9vbGNoYWluIGNyZWF0ZXMgYSBjcm9zcy10b29sY2hhaW4KKyAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IGluIHRoZSBkaXJlY3RvcnkgdGhhdCB0aGUgQURUCisgICAgICAgICAgICAgICAgICAgIHdhcyBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgIEJlZm9yZSB5b3UgY2FuIHVzZSB0aGUgdG9vbHMgdG8gZGV2ZWxvcCB5b3VyIHByb2plY3QsIHlvdSBtdXN0CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSB0aGlzIHNldHVwIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNjcmlwdCBiZWdpbnMgd2l0aCB0aGUgc3RyaW5nICJlbnZpcm9ubWVudC1zZXR1cCIgYW5kIGNvbnRhaW5zCisgICAgICAgICAgICAgICAgICAgIHRoZSBtYWNoaW5lIGFyY2hpdGVjdHVyZSwgd2hpY2ggaXMgZm9sbG93ZWQgYnkgdGhlIHN0cmluZworICAgICAgICAgICAgICAgICAgICAicG9reS1saW51eCIuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHNvdXJjZXMgYSBzY3JpcHQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBBRFQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSB0aGF0IHVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDMyLWJpdCBJbnRlbCB4ODYgQXJjaGl0ZWN0dXJlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgJkRJU1RST19OQU1FOyBZb2N0byBQcm9qZWN0IHJlbGVhc2U6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzb3VyY2UgL29wdC9wb2t5LyZESVNUUk87L2Vudmlyb25tZW50LXNldHVwLWk1ODYtcG9reS1saW51eAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HZW5lcmF0ZSB0aGUgbG9jYWwgYWNsb2NhbC5tNAorICAgICAgICAgICAgICAgICAgICBmaWxlcyBhbmQgY3JlYXRlIHRoZSBjb25maWd1cmUgc2NyaXB0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgR05VIEF1dG90b29scyBnZW5lcmF0ZSB0aGUgbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFjbG9jYWwubTQ8L2ZpbGVuYW1lPiBmaWxlcyBhbmQgY3JlYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgc2NyaXB0OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYWNsb2NhbAorICAgICAkIGF1dG9jb25mCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkdlbmVyYXRlIGZpbGVzIG5lZWRlZCBieSBHTlUKKyAgICAgICAgICAgICAgICAgICAgY29kaW5nIHN0YW5kYXJkczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBHTlUgY29kaW5nIHN0YW5kYXJkcyByZXF1aXJlIGNlcnRhaW4gZmlsZXMgaW4gb3JkZXIgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBwcm9qZWN0IHRvIGJlIGNvbXBsaWFudC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGNyZWF0ZXMgdGhvc2UgZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB0b3VjaCBORVdTIFJFQURNRSBBVVRIT1JTIENoYW5nZUxvZworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HZW5lcmF0ZSB0aGUgY29uZmlndXJlCisgICAgICAgICAgICAgICAgICAgIGZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGdlbmVyYXRlcyB0aGUgPGZpbGVuYW1lPmNvbmZpZ3VyZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYXV0b21ha2UgLWEKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3Jvc3MtY29tcGlsZSB0aGUgcHJvamVjdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgY29tcGlsZXMgdGhlIHByb2plY3QgdXNpbmcgdGhlIGNyb3NzLWNvbXBpbGVyLgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNPTkZJR1VSRV9GTEFHUyc+PGZpbGVuYW1lPkNPTkZJR1VSRV9GTEFHUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGUgcHJvdmlkZXMgdGhlIG1pbmltYWwgYXJndW1lbnRzIGZvcgorICAgICAgICAgICAgICAgICAgICBHTlUgY29uZmlndXJlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgLi9jb25maWd1cmUgJHtDT05GSUdVUkVfRkxBR1N9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1ha2UgYW5kIGluc3RhbGwgdGhlIHByb2plY3Q6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgdHdvIGNvbW1hbmRzIGdlbmVyYXRlIGFuZCBpbnN0YWxsIHRoZSBwcm9qZWN0IGludG8gdGhlCisgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uIGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIG1ha2UKKyAgICAgJCBtYWtlIGluc3RhbGwgREVTVERJUj0uL3RtcAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5WZXJpZnkgdGhlIGluc3RhbGxhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgaXMgYSBzaW1wbGUgd2F5IHRvIHZlcmlmeSB0aGUgaW5zdGFsbGF0aW9uCisgICAgICAgICAgICAgICAgICAgIG9mIHlvdXIgcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgUnVubmluZyB0aGUgY29tbWFuZCBwcmludHMgdGhlIGFyY2hpdGVjdHVyZSBvbiB3aGljaAorICAgICAgICAgICAgICAgICAgICB0aGUgYmluYXJ5IGZpbGUgY2FuIHJ1bi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBhcmNoaXRlY3R1cmUgc2hvdWxkIGJlIHRoZSBzYW1lIGFyY2hpdGVjdHVyZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIHRoZSBpbnN0YWxsZWQgY3Jvc3MtdG9vbGNoYWluIHN1cHBvcnRzLgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZmlsZSAuL3RtcC91c3IvbG9jYWwvYmluL2hlbGxvCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkV4ZWN1dGUgeW91ciBwcm9qZWN0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRvIGV4ZWN1dGUgdGhlIHByb2plY3QgaW4gdGhlIHNoZWxsLCBzaW1wbHkgZW50ZXIgdGhlIG5hbWUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjb3VsZCBhbHNvIGNvcHkgdGhlIGJpbmFyeSB0byB0aGUgYWN0dWFsIHRhcmdldCBoYXJkd2FyZQorICAgICAgICAgICAgICAgICAgICBhbmQgcnVuIHRoZSBwcm9qZWN0IHRoZXJlIGFzIHdlbGw6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCAuL2hlbGxvCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgQXMgZXhwZWN0ZWQsIHRoZSBwcm9qZWN0IGRpc3BsYXlzIHRoZSAiSGVsbG8gV29ybGQhIiBtZXNzYWdlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncGFzc2luZy1ob3N0LW9wdGlvbnMnPgorICAgICAgICA8dGl0bGU+UGFzc2luZyBIb3N0IE9wdGlvbnM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIGFuIEF1dG90b29scy1iYXNlZCBwcm9qZWN0LCB5b3UgY2FuIHVzZSB0aGUgY3Jvc3MtdG9vbGNoYWluIGJ5IGp1c3QKKyAgICAgICAgICAgIHBhc3NpbmcgdGhlIGFwcHJvcHJpYXRlIGhvc3Qgb3B0aW9uIHRvIDxmaWxlbmFtZT5jb25maWd1cmUuc2g8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFRoZSBob3N0IG9wdGlvbiB5b3UgdXNlIGlzIGRlcml2ZWQgZnJvbSB0aGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnQgc2V0dXAKKyAgICAgICAgICAgIHNjcmlwdCBmb3VuZCBpbiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHlvdSBpbnN0YWxsZWQgdGhlIGNyb3NzLXRvb2xjaGFpbi4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgaG9zdCBvcHRpb24gZm9yIGFuIEFSTS1iYXNlZCB0YXJnZXQgdGhhdCB1c2VzIHRoZSBHTlUgRUFCSQorICAgICAgICAgICAgaXMgPGZpbGVuYW1lPmFybXY1dGUtcG9reS1saW51eC1nbnVlYWJpPC9maWxlbmFtZT4uCisgICAgICAgICAgICBZb3Ugd2lsbCBub3RpY2UgdGhhdCB0aGUgbmFtZSBvZiB0aGUgc2NyaXB0IGlzCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZW52aXJvbm1lbnQtc2V0dXAtYXJtdjV0ZS1wb2t5LWxpbnV4LWdudWVhYmk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFRodXMsIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB3b3JrcyB0byB1cGRhdGUgeW91ciBwcm9qZWN0IGFuZAorICAgICAgICAgICAgcmVidWlsZCBpdCB1c2luZyB0aGUgYXBwcm9wcmlhdGUgY3Jvc3MtdG9vbGNoYWluIHRvb2xzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIC4vY29uZmlndXJlIC0taG9zdD1hcm12NXRlLXBva3ktbGludXgtZ251ZWFiaSBcCisgICAgICAgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9PHJlcGxhY2VhYmxlPnN5c3Jvb3RfZGlyPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIElmIHRoZSA8ZmlsZW5hbWU+Y29uZmlndXJlPC9maWxlbmFtZT4gc2NyaXB0IHJlc3VsdHMgaW4gcHJvYmxlbXMgcmVjb2duaXppbmcgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9PC9maWxlbmFtZT48cmVwbGFjZWFibGU+c3lzcm9vdC1kaXI8L3JlcGxhY2VhYmxlPiBvcHRpb24sCisgICAgICAgICAgICAgICAgcmVnZW5lcmF0ZSB0aGUgc2NyaXB0IHRvIGVuYWJsZSB0aGUgc3VwcG9ydCBieSBkb2luZyB0aGUgZm9sbG93aW5nIGFuZCB0aGVuCisgICAgICAgICAgICAgICAgcnVuIHRoZSBzY3JpcHQgYWdhaW46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGxpYnRvb2xpemUgLS1hdXRvbWFrZQorICAgICAkIGFjbG9jYWwgLUkgJHtPRUNPUkVfTkFUSVZFX1NZU1JPT1R9L3Vzci9zaGFyZS9hY2xvY2FsIFwKKyAgICAgICAgWy1JIDxyZXBsYWNlYWJsZT5kaXJfY29udGFpbmluZ195b3VyX3Byb2plY3Qtc3BlY2lmaWNfbTRfbWFjcm9zPC9yZXBsYWNlYWJsZT5dCisgICAgICQgYXV0b2NvbmYKKyAgICAgJCBhdXRvaGVhZGVyCisgICAgICQgYXV0b21ha2UgLWEKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdtYWtlZmlsZS1iYXNlZC1wcm9qZWN0cyc+Cis8dGl0bGU+TWFrZWZpbGUtQmFzZWQgUHJvamVjdHM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBNYWtlZmlsZS1iYXNlZCBwcm9qZWN0cywgdGhlIGNyb3NzLXRvb2xjaGFpbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgICAgICAgZXN0YWJsaXNoZWQgYnkgcnVubmluZyB0aGUgY3Jvc3MtdG9vbGNoYWluIGVudmlyb25tZW50IHNldHVwIHNjcmlwdAorICAgICAgICBhcmUgc3ViamVjdCB0byBnZW5lcmFsIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gcnVsZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRvIGlsbHVzdHJhdGUgdGhpcywgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBmb3VyIGNyb3NzLXRvb2xjaGFpbgorICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNDJz5DQzwvdWxpbms+PWk1ODYtcG9reS1saW51eC1nY2MgLW0zMiAtbWFyY2g9aTU4NiAtLXN5c3Jvb3Q9L29wdC9wb2t5LzEuOC9zeXNyb290cy9pNTg2LXBva3ktbGludXgKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxEJz5MRDwvdWxpbms+PWk1ODYtcG9reS1saW51eC1sZCAtLXN5c3Jvb3Q9L29wdC9wb2t5LzEuOC9zeXNyb290cy9pNTg2LXBva3ktbGludXgKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNGTEFHUyc+Q0ZMQUdTPC91bGluaz49LU8yIC1waXBlIC1nIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcworICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ1hYRkxBR1MnPkNYWEZMQUdTPC91bGluaz49LU8yIC1waXBlIC1nIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcworICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIE5vdywgY29uc2lkZXIgdGhlIGZvbGxvd2luZyB0aHJlZSBjYXNlczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2FzZSAxIC0gTm8gVmFyaWFibGVzIFNldCBpbiB0aGUgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZXNlIHZhcmlhYmxlcyBhcmUgbm90IHNwZWNpZmljYWxseSBzZXQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4sIHRoZSB2YXJpYWJsZXMgcmV0YWluIHRoZWlyCisgICAgICAgICAgICAgICAgdmFsdWVzIGJhc2VkIG9uIHRoZSBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2FzZSAyIC0gVmFyaWFibGVzIFNldCBpbiB0aGUgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBTcGVjaWZpY2FsbHkgc2V0dGluZyB2YXJpYWJsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4gZHVyaW5nIHRoZSBidWlsZCByZXN1bHRzIGluIHRoZQorICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHNldHRpbmdzIG9mIHRoZSB2YXJpYWJsZXMgYmVpbmcgb3ZlcndyaXR0ZW4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNhc2UgMyAtIFZhcmlhYmxlcyBTZXQgd2hlbiB0aGUgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4gaXMgRXhlY3V0ZWQgZnJvbSB0aGUgQ29tbWFuZCBMaW5lOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgRXhlY3V0aW5nIHRoZSA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPiBmcm9tIHRoZSBjb21tYW5kCisgICAgICAgICAgICAgICAgbGluZSByZXN1bHRzIGluIHRoZSB2YXJpYWJsZXMgYmVpbmcgb3ZlcndyaXR0ZW4gd2l0aAorICAgICAgICAgICAgICAgIGNvbW1hbmQtbGluZSBjb250ZW50IHJlZ2FyZGxlc3Mgb2Ygd2hhdCBpcyBiZWluZyBzZXQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG5vdCBjb25zaWRlcmVkIHVubGVzcworICAgICAgICAgICAgICAgIHlvdSB1c2UgdGhlICItZSIgZmxhZyBkdXJpbmcgdGhlIGJ1aWxkOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBtYWtlIC1lIDxyZXBsYWNlYWJsZT5maWxlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSWYgeW91IHVzZSB0aGlzIGZsYWcsIHRoZW4gdGhlIGVudmlyb25tZW50IHZhbHVlcyBvZiB0aGUKKyAgICAgICAgICAgICAgICB2YXJpYWJsZXMgb3ZlcnJpZGUgYW55IHZhcmlhYmxlcyBzcGVjaWZpY2FsbHkgc2V0IGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NYWtlZmlsZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBGb3IgdGhlIGxpc3Qgb2YgdmFyaWFibGVzIHNldCB1cCBieSB0aGUgY3Jvc3MtdG9vbGNoYWluIGVudmlyb25tZW50CisgICAgICAgICAgICBzZXR1cCBzY3JpcHQsIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZXR0aW5nLXVwLXRoZS1jcm9zcy1kZXZlbG9wbWVudC1lbnZpcm9ubWVudCc+U2V0dGluZyBVcCB0aGUgQ3Jvc3MtRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQ8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LWludHJvLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1pbnRyby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk3YzcxMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1pbnRyby54bWwKQEAgLTAsMCArMSwxODAgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdhZHQtaW50cm8nPgorICAgIDx0aXRsZT5UaGUgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgVG9vbGtpdCAoQURUKTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgUGFydCBvZiB0aGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCBzb2x1dGlvbiBpcyBhbiBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudAorICAgICAgICBUb29sa2l0IChBRFQpLgorICAgICAgICBUaGUgQURUIHByb3ZpZGVzIHlvdSB3aXRoIGEgY3VzdG9tLWJ1aWx0LCBjcm9zcy1kZXZlbG9wbWVudAorICAgICAgICBwbGF0Zm9ybSBzdWl0ZWQgZm9yIGRldmVsb3BpbmcgYSB1c2VyLXRhcmdldGVkIHByb2R1Y3QgYXBwbGljYXRpb24uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZ1bmRhbWVudGFsbHksIHRoZSBBRFQgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY3Jvc3MtdG9vbGNoYWluIGFuZCBtYXRjaGluZworICAgICAgICAgICAgICAgIHN5c3Jvb3QgYm90aCBidWlsdCBieSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1zeXN0ZW0tdGVybSc+T3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbTwvdWxpbms+LgorICAgICAgICAgICAgICAgIFRoZSB0b29sY2hhaW4gYW5kIHN5c3Jvb3QgYXJlIGJhc2VkIG9uIGEKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPgorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gYW5kIGV4dGVuc2lvbnMsCisgICAgICAgICAgICAgICAgd2hpY2ggYWxsb3dzIHlvdSB0byBjcm9zcy1kZXZlbG9wIG9uIHRoZSBob3N0IG1hY2hpbmUgZm9yIHRoZSB0YXJnZXQgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIEVjbGlwc2UgSURFIFlvY3RvIFBsdWctaW4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIFF1aWNrIEVNVWxhdG9yIChRRU1VKSwgd2hpY2ggbGV0cyB5b3Ugc2ltdWxhdGUgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlZhcmlvdXMgdXNlci1zcGFjZSB0b29scyB0aGF0IGdyZWF0bHkgZW5oYW5jZSB5b3VyIGFwcGxpY2F0aW9uCisgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgZXhwZXJpZW5jZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3RoZS1jcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4nPgorICAgICAgICA8dGl0bGU+VGhlIENyb3NzLURldmVsb3BtZW50IFRvb2xjaGFpbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbic+Q3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluPC91bGluaz4KKyAgICAgICAgICAgIGNvbnNpc3RzIG9mIGEgY3Jvc3MtY29tcGlsZXIsIGNyb3NzLWxpbmtlciwgYW5kIGNyb3NzLWRlYnVnZ2VyCisgICAgICAgICAgICB0aGF0IGFyZSB1c2VkIHRvIGRldmVsb3AgdXNlci1zcGFjZSBhcHBsaWNhdGlvbnMgZm9yIHRhcmdldGVkCisgICAgICAgICAgICBoYXJkd2FyZS4KKyAgICAgICAgICAgIFRoaXMgdG9vbGNoYWluIGlzIGNyZWF0ZWQgZWl0aGVyIGJ5IHJ1bm5pbmcgdGhlIEFEVCBJbnN0YWxsZXIKKyAgICAgICAgICAgIHNjcmlwdCwgYSB0b29sY2hhaW4gaW5zdGFsbGVyIHNjcmlwdCwgb3IgdGhyb3VnaCBhCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICB0aGF0IGlzIGJhc2VkIG9uIHlvdXIgTWV0YWRhdGEgY29uZmlndXJhdGlvbiBvciBleHRlbnNpb24gZm9yCisgICAgICAgICAgICB5b3VyIHRhcmdldGVkIGRldmljZS4KKyAgICAgICAgICAgIFRoZSBjcm9zcy10b29sY2hhaW4gd29ya3Mgd2l0aCBhIG1hdGNoaW5nIHRhcmdldCBzeXNyb290LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N5c3Jvb3QnPgorICAgICAgICA8dGl0bGU+U3lzcm9vdDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgbWF0Y2hpbmcgdGFyZ2V0IHN5c3Jvb3QgY29udGFpbnMgbmVlZGVkIGhlYWRlcnMgYW5kIGxpYnJhcmllcyBmb3IgZ2VuZXJhdGluZworICAgICAgICAgICAgYmluYXJpZXMgdGhhdCBydW4gb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICBUaGUgc3lzcm9vdCBpcyBiYXNlZCBvbiB0aGUgdGFyZ2V0IHJvb3QgZmlsZXN5c3RlbSBpbWFnZSB0aGF0IGlzIGJ1aWx0IGJ5CisgICAgICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhbmQgdXNlcyB0aGUgc2FtZSBNZXRhZGF0YSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICB1c2VkIHRvIGJ1aWxkIHRoZSBjcm9zcy10b29sY2hhaW4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nZWNsaXBzZS1vdmVydmlldyc+CisgICAgICAgIDx0aXRsZT5FY2xpcHNlIFlvY3RvIFBsdWctaW48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIEVjbGlwc2UgSURFIGlzIGEgcG9wdWxhciBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBhbmQgaXQgZnVsbHkgc3VwcG9ydHMKKyAgICAgICAgICAgIGRldmVsb3BtZW50IHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgV2hlbiB5b3UgaW5zdGFsbCBhbmQgY29uZmlndXJlIHRoZSBFY2xpcHNlIFlvY3RvIFByb2plY3QgUGx1Zy1pbiBpbnRvCisgICAgICAgICAgICB0aGUgRWNsaXBzZSBJREUsIHlvdSBtYXhpbWl6ZSB5b3VyIFlvY3RvIFByb2plY3QgZXhwZXJpZW5jZS4KKyAgICAgICAgICAgIEluc3RhbGxpbmcgYW5kIGNvbmZpZ3VyaW5nIHRoZSBQbHVnLWluIHJlc3VsdHMgaW4gYW4gZW52aXJvbm1lbnQgdGhhdAorICAgICAgICAgICAgaGFzIGV4dGVuc2lvbnMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGxldCB5b3UgbW9yZSBlYXNpbHkgZGV2ZWxvcCBzb2Z0d2FyZS4KKyAgICAgICAgICAgIFRoZXNlIGV4dGVuc2lvbnMgYWxsb3cgZm9yIGNyb3NzLWNvbXBpbGF0aW9uLCBkZXBsb3ltZW50LCBhbmQgZXhlY3V0aW9uIG9mCisgICAgICAgICAgICB5b3VyIG91dHB1dCBpbnRvIGEgUUVNVSBlbXVsYXRpb24gc2Vzc2lvbi4KKyAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBwZXJmb3JtIGNyb3NzLWRlYnVnZ2luZyBhbmQgcHJvZmlsaW5nLgorICAgICAgICAgICAgVGhlIGVudmlyb25tZW50IGFsc28gc3VwcG9ydHMgYSBzdWl0ZSBvZiB0b29scyB0aGF0IGFsbG93cyB5b3UgdG8gcGVyZm9ybQorICAgICAgICAgICAgcmVtb3RlIHByb2ZpbGluZywgdHJhY2luZywgY29sbGVjdGlvbiBvZiBwb3dlciBkYXRhLCBjb2xsZWN0aW9uIG9mCisgICAgICAgICAgICBsYXRlbmN5IGRhdGEsIGFuZCBjb2xsZWN0aW9uIG9mIHBlcmZvcm1hbmNlIGRhdGEuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgd29ya2Zsb3cgdGhhdCB1c2VzIHRoZSBFY2xpcHNlCisgICAgICAgICAgICBJREUgYW5kIGZvciBhIGRldGFpbGVkIGV4YW1wbGUgb2YgaG93IHRvIGluc3RhbGwgYW5kIGNvbmZpZ3VyZSB0aGUgRWNsaXBzZQorICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBQbHVnLWluLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYWR0LWVjbGlwc2UnPldvcmtpbmcgV2l0aGluIEVjbGlwc2U8L3VsaW5rPiIgc2VjdGlvbgorICAgICAgICAgICAgb2YgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3RoZS1xZW11LWVtdWxhdG9yJz4KKyAgICAgICAgPHRpdGxlPlRoZSBRRU1VIEVtdWxhdG9yPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBRRU1VIGVtdWxhdG9yIGFsbG93cyB5b3UgdG8gc2ltdWxhdGUgeW91ciBoYXJkd2FyZSB3aGlsZSBydW5uaW5nIHlvdXIKKyAgICAgICAgICAgIGFwcGxpY2F0aW9uIG9yIGltYWdlLgorICAgICAgICAgICAgUUVNVSBpcyBtYWRlIGF2YWlsYWJsZSBhIG51bWJlciBvZiB3YXlzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB1c2UgdGhlIEFEVCBJbnN0YWxsZXIgc2NyaXB0IHRvIGluc3RhbGwgQURULCB5b3UgY2FuCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgd2hldGhlciBvciBub3QgdG8gaW5zdGFsbCBRRU1VLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIGNsb25lZCB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQKKyAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSB0byBjcmVhdGUgYQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kIHlvdSBoYXZlIHNvdXJjZWQgdGhlIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCwgUUVNVSBpcworICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgYW5kIGF1dG9tYXRpY2FsbHkgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIGRvd25sb2FkZWQgYSBZb2N0byBQcm9qZWN0IHJlbGVhc2UgYW5kIHVucGFja2VkCisgICAgICAgICAgICAgICAgICAgIGl0IHRvIGNyZWF0ZSBhCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgeW91IGhhdmUgc291cmNlZCB0aGUgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0LCBRRU1VIGlzCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBhbmQgYXV0b21hdGljYWxseSBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgaW5zdGFsbGVkIHRoZSBjcm9zcy10b29sY2hhaW4gdGFyYmFsbCBhbmQgeW91CisgICAgICAgICAgICAgICAgICAgIGhhdmUgc291cmNlZCB0aGUgdG9vbGNoYWluJ3Mgc2V0dXAgZW52aXJvbm1lbnQgc2NyaXB0LCBRRU1VCisgICAgICAgICAgICAgICAgICAgIGlzIGFsc28gaW5zdGFsbGVkIGFuZCBhdXRvbWF0aWNhbGx5IGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2VyLXNwYWNlLXRvb2xzJz4KKyAgICAgICAgPHRpdGxlPlVzZXItU3BhY2UgVG9vbHM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVXNlci1zcGFjZSB0b29scyBhcmUgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgIFlvdSB3aWxsIGZpbmQgdGhlc2UgdG9vbHMgaGVscGZ1bCBkdXJpbmcgZGV2ZWxvcG1lbnQuCisgICAgICAgICAgICBUaGUgdG9vbHMgaW5jbHVkZSBMYXRlbmN5VE9QLCBQb3dlclRPUCwgT1Byb2ZpbGUsIFBlcmYsIFN5c3RlbVRhcCwgYW5kIEx0dG5nLXVzdC4KKyAgICAgICAgICAgIFRoZXNlIHRvb2xzIGFyZSBjb21tb24gZGV2ZWxvcG1lbnQgdG9vbHMgZm9yIHRoZSBMaW51eCBwbGF0Zm9ybS4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5MYXRlbmN5VE9QOjwvZW1waGFzaXM+IExhdGVuY3lUT1AgZm9jdXNlcyBvbiBsYXRlbmN5CisgICAgICAgICAgICAgICAgICAgIHRoYXQgY2F1c2VzIHNraXBzIGluIGF1ZGlvLAorICAgICAgICAgICAgICAgICAgICBzdHV0dGVycyBpbiB5b3VyIGRlc2t0b3AgZXhwZXJpZW5jZSwgb3Igc2l0dWF0aW9ucyB0aGF0IG92ZXJsb2FkIHlvdXIgc2VydmVyCisgICAgICAgICAgICAgICAgICAgIGV2ZW4gd2hlbiB5b3UgaGF2ZSBwbGVudHkgb2YgQ1BVIHBvd2VyIGxlZnQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UG93ZXJUT1A6PC9lbXBoYXNpcz4gSGVscHMgeW91IGRldGVybWluZSB3aGF0CisgICAgICAgICAgICAgICAgICAgIHNvZnR3YXJlIGlzIHVzaW5nIHRoZSBtb3N0IHBvd2VyLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgb3V0IG1vcmUgYWJvdXQgUG93ZXJUT1AgYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly8wMS5vcmcvcG93ZXJ0b3AvJz48L3VsaW5rPi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk9Qcm9maWxlOjwvZW1waGFzaXM+IEEgc3lzdGVtLXdpZGUgcHJvZmlsZXIgZm9yIExpbnV4CisgICAgICAgICAgICAgICAgICAgIHN5c3RlbXMgdGhhdCBpcyBjYXBhYmxlIG9mIHByb2ZpbGluZyBhbGwgcnVubmluZyBjb2RlIGF0IGxvdyBvdmVyaGVhZC4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG91dCBtb3JlIGFib3V0IE9Qcm9maWxlIGF0CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9vcHJvZmlsZS5zb3VyY2Vmb3JnZS5uZXQvYWJvdXQvJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGVzIG9uIGhvdyB0byBzZXR1cCBhbmQgdXNlIHRoaXMgdG9vbCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUFJPRl9VUkw7I3Byb2ZpbGUtbWFudWFsLW9wcm9maWxlJz5PUHJvZmlsZTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZyBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UGVyZjo8L2VtcGhhc2lzPiBQZXJmb3JtYW5jZSBjb3VudGVycyBmb3IgTGludXggdXNlZAorICAgICAgICAgICAgICAgICAgICB0byBrZWVwIHRyYWNrIG9mIGNlcnRhaW4gdHlwZXMgb2YgaGFyZHdhcmUgYW5kIHNvZnR3YXJlIGV2ZW50cy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlc2UgdHlwZXMgb2YgY291bnRlcnMgc2VlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vcGVyZi53aWtpLmtlcm5lbC5vcmcvJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGVzIG9uIGhvdyB0byBzZXR1cCBhbmQgdXNlIHRoaXMgdG9vbCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUFJPRl9VUkw7I3Byb2ZpbGUtbWFudWFsLXBlcmYnPnBlcmY8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN5c3RlbVRhcDo8L2VtcGhhc2lzPiBBIGZyZWUgc29mdHdhcmUgaW5mcmFzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBzaW1wbGlmaWVzIGluZm9ybWF0aW9uIGdhdGhlcmluZyBhYm91dCBhIHJ1bm5pbmcgTGludXggc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGluZm9ybWF0aW9uIGhlbHBzIHlvdSBkaWFnbm9zZSBwZXJmb3JtYW5jZSBvciBmdW5jdGlvbmFsIHByb2JsZW1zLgorICAgICAgICAgICAgICAgICAgICBTeXN0ZW1UYXAgaXMgbm90IGF2YWlsYWJsZSBhcyBhIHVzZXItc3BhY2UgdG9vbCB0aHJvdWdoIHRoZSBFY2xpcHNlIElERSBZb2N0byBQbHVnLWluLgorICAgICAgICAgICAgICAgICAgICBTZWUgPHVsaW5rIHVybD0naHR0cDovL3NvdXJjZXdhcmUub3JnL3N5c3RlbXRhcCc+PC91bGluaz4gZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgb24gU3lzdGVtVGFwLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZXMgb24gaG93IHRvIHNldHVwIGFuZCB1c2UgdGhpcyB0b29sLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19QUk9GX1VSTDsjcHJvZmlsZS1tYW51YWwtc3lzdGVtdGFwJz5TeXN0ZW1UYXA8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+THR0bmctdXN0OjwvZW1waGFzaXM+IEEgVXNlci1zcGFjZSBUcmFjZXIgZGVzaWduZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB1c2VyLXNwYWNlIGFjdGl2aXR5LgorICAgICAgICAgICAgICAgICAgICBTZWUgPHVsaW5rIHVybD0naHR0cDovL2x0dG5nLm9yZy91c3QnPjwvdWxpbms+IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEx0dG5nLXVzdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODZiZTUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDI3IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiIHZlcnNpb249IjEuMCI+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9kb2Nib29rLW1pcnJvci9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKzwhLS0KKworICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9wZXJtYWxpbmtzLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvc2VjdGlvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbCIvPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9IidhZHQtc3R5bGUuY3NzJyIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaGFwdGVyLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImFwcGVuZGl4LmF1dG9sYWJlbCIgc2VsZWN0PSJBIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS5pZC5hdHRyaWJ1dGVzIiBzZWxlY3Q9IjEiIC8+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtbWFudWFsLWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtbWFudWFsLWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdiYTVmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1tYW51YWwtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDM1IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldAorCXhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorCXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgorCXhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiCisJdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL2RvY2Jvb2stbWlycm9yL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworPCEtLQorCisgIDx4c2w6aW1wb3J0IGhyZWY9Ii4uL3RlbXBsYXRlLzEuNzYuMS9kb2Nib29rLXhzbC0xLjc2LjEvZWNsaXBzZS9lY2xpcHNlMy54c2wiIC8+CisKKyAgPHhzbDppbXBvcnQKKwkgIGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEvZWNsaXBzZS9lY2xpcHNlMy54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmtlci5vdXRwdXQuaW5kZW50IiBzZWxlY3Q9Iid5ZXMnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsucXVpZXRseSIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsuZmlyc3Quc2VjdGlvbnMiIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNodW5rLnNlY3Rpb24uZGVwdGgiIHNlbGVjdD0iMTAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJ1c2UuaWQuYXMuZmlsZW5hbWUiIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9InVsaW5rLnRhcmdldCIgc2VsZWN0PSInX3NlbGYnIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImJhc2UuZGlyIiBzZWxlY3Q9IidodG1sL2FkdC1tYW51YWwvJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSInLi4vYm9vay5jc3MnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZWNsaXBzZS5tYW5pZmVzdCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY3JlYXRlLnBsdWdpbi54bWwiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InN1cHByZXNzLm5hdmlnYXRpb24iIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmluZGV4IiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaGFwdGVyLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImFwcGVuZGl4LmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwiIHNlbGVjdD0iMSIgLz4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtbWFudWFsLWludHJvLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1tYW51YWwtaW50cm8ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNGZkZmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtbWFudWFsLWludHJvLnhtbApAQCAtMCwwICsxLDMzIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0nYWR0LW1hbnVhbC1pbnRybyc+Cis8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBXZWxjb21lIHRvIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICBUaGlzIG1hbnVhbCBwcm92aWRlcyBpbmZvcm1hdGlvbiB0aGF0IGxldHMgeW91IGJlZ2luIGRldmVsb3BpbmcgYXBwbGljYXRpb25zCisgICAgICAgIHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBwcm92aWRlcyBhbiBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBiYXNlZCBvbgorICAgICAgICBhbiBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBUb29sa2l0IChBRFQpIGFuZCB0aGUgYXZhaWxhYmlsaXR5IG9mIHN0YW5kLWFsb25lCisgICAgICAgIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMgYW5kIG90aGVyIHRvb2xzLgorICAgICAgICBUaGlzIG1hbnVhbCBkZXNjcmliZXMgdGhlIEFEVCBhbmQgaG93IHlvdSBjYW4gY29uZmlndXJlIGFuZCBpbnN0YWxsIGl0LAorICAgICAgICBob3cgdG8gYWNjZXNzIGFuZCB1c2UgdGhlIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMsIGhvdyB0bworICAgICAgICBjdXN0b21pemUgdGhlIGRldmVsb3BtZW50IHBhY2thZ2VzIGluc3RhbGxhdGlvbiwKKyAgICAgICAgaG93IHRvIHVzZSBjb21tYW5kLWxpbmUgZGV2ZWxvcG1lbnQgZm9yIGJvdGggQXV0b3Rvb2xzLWJhc2VkIGFuZAorICAgICAgICBNYWtlZmlsZS1iYXNlZCBwcm9qZWN0cywgYW5kIGFuIGludHJvZHVjdGlvbiB0byB0aGUKKyAgICAgICAgPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz4gSURFIFlvY3RvIFBsdWctaW4uCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgVGhlIEFEVCBpcyBkaXN0cmlidXRpb24tbmV1dHJhbCBhbmQgZG9lcyBub3QgcmVxdWlyZSB0aGUgWW9jdG8KKyAgICAgICAgICAgIFByb2plY3QgcmVmZXJlbmNlIGRpc3RyaWJ1dGlvbiwgd2hpY2ggaXMgY2FsbGVkIFBva3kuCisgICAgICAgICAgICBUaGlzIG1hbnVhbCwgaG93ZXZlciwgdXNlcyBleGFtcGxlcyB0aGF0IHVzZSB0aGUgUG9reSBkaXN0cmlidXRpb24uCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+Cis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1tYW51YWwueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LW1hbnVhbC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNlNjJjOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1tYW51YWwueG1sCkBAIC0wLDAgKzEsMTM1IEBACis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Ym9vayBpZD0nYWR0LW1hbnVhbCcgbGFuZz0nZW4nCisgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIKKyAgICAgIHhtbG5zPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayIKKyAgICAgID4KKyAgICA8Ym9va2luZm8+CisKKyAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0nZmlndXJlcy9hZHQtdGl0bGUucG5nJworICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9J1NWRycKKyAgICAgICAgICAgICAgICAgICAgYWxpZ249J2xlZnQnIHNjYWxlZml0PScxJyB3aWR0aD0nMTAwJScvPgorICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgICAgPC9tZWRpYW9iamVjdD4KKworICAgICAgICA8dGl0bGU+CisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlCisgICAgICAgIDwvdGl0bGU+CisKKyAgICAgICAgPGF1dGhvcmdyb3VwPgorICAgICAgICAgICAgPGF1dGhvcj4KKyAgICAgICAgICAgICAgICA8Zmlyc3RuYW1lPkplc3NpY2E8L2ZpcnN0bmFtZT4gPHN1cm5hbWU+Wmhhbmc8L3N1cm5hbWU+CisgICAgICAgICAgICAgICAgPGFmZmlsaWF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8b3JnbmFtZT5JbnRlbCBDb3Jwb3JhdGlvbjwvb3JnbmFtZT4KKyAgICAgICAgICAgICAgICA8L2FmZmlsaWF0aW9uPgorICAgICAgICAgICAgICAgIDxlbWFpbD5qZXNzaWNhLnpoYW5nQGludGVsLmNvbTwvZW1haWw+CisgICAgICAgICAgICA8L2F1dGhvcj4KKyAgICAgICAgPC9hdXRob3Jncm91cD4KKworICAgICAgICA8cmV2aGlzdG9yeT4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuMDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPjYgQXByaWwgMjAxMTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS4wIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4wLjE8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT4yMyBNYXkgMjAxMTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS4wLjEgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjE8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT42IE9jdG9iZXIgMjAxMTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4yPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxMjwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS4yIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4zPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDEyPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjMgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjQ8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDEzPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjQgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjU8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTM8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNS4xPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+SmFudWFyeSAyMDE0PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjUuMSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNjwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTQ8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNiBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNzwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxNDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS43IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS44PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxNTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS44IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS45PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDE1PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjkgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgPC9yZXZoaXN0b3J5PgorCisgICAgPGNvcHlyaWdodD4KKyAgICAgIDx5ZWFyPiZDT1BZUklHSFRfWUVBUjs8L3llYXI+CisgICAgICA8aG9sZGVyPkxpbnV4IEZvdW5kYXRpb248L2hvbGRlcj4KKyAgICA8L2NvcHlyaWdodD4KKworICAgIDxsZWdhbG5vdGljZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQgdW5kZXIKKyAgICAgICAgdGhlIHRlcm1zIG9mIHRoZSA8dWxpbmsgdHlwZT0iaHR0cCIgdXJsPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8yLjAvdWsvIj5DcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlIEFsaWtlIDIuMCBVSzogRW5nbGFuZCAmYW1wOyBXYWxlczwvdWxpbms+IGFzIHB1Ymxpc2hlZCBieSBDcmVhdGl2ZSBDb21tb25zLgorICAgICAgPC9wYXJhPgorICAgICAgPG5vdGU+CisgICAgICAgICAgRm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1hbnVhbCBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSwgc2VlIHRoZQorICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7Jz5Zb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4KKyAgICAgICAgICBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IHdlYnNpdGUuCisgICAgICA8L25vdGU+CisKKyAgICA8L2xlZ2Fsbm90aWNlPgorCisgICAgPC9ib29raW5mbz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImFkdC1tYW51YWwtaW50cm8ueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJhZHQtaW50cm8ueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJhZHQtcHJlcGFyZS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImFkdC1wYWNrYWdlLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iYWR0LWNvbW1hbmQueG1sIi8+CisKKzwhLS0gICAgPGluZGV4IGlkPSdpbmRleCc+CisgICAgICA8dGl0bGU+SW5kZXg8L3RpdGxlPgorICAgIDwvaW5kZXg+CistLT4KKworPC9ib29rPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtcGFja2FnZS54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtcGFja2FnZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNmZmEwNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1wYWNrYWdlLnhtbApAQCAtMCwwICsxLDEwMiBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J2FkdC1wYWNrYWdlJz4KKzx0aXRsZT5PcHRpb25hbGx5IEN1c3RvbWl6aW5nIHRoZSBEZXZlbG9wbWVudCBQYWNrYWdlcyBJbnN0YWxsYXRpb248L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEJlY2F1c2UgdGhlIFlvY3RvIFByb2plY3QgaXMgc3VpdGVkIGZvciBlbWJlZGRlZCBMaW51eCBkZXZlbG9wbWVudCwgaXQgaXMKKyAgICAgICAgbGlrZWx5IHRoYXQgeW91IHdpbGwgbmVlZCB0byBjdXN0b21pemUgeW91ciBkZXZlbG9wbWVudCBwYWNrYWdlcyBpbnN0YWxsYXRpb24uCisgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgYXJlIGRldmVsb3BpbmcgYSBtaW5pbWFsIGltYWdlLCB0aGVuIHlvdSBtaWdodCBub3QgbmVlZAorICAgICAgICBjZXJ0YWluIHBhY2thZ2VzIChlLmcuIGdyYXBoaWNzIHN1cHBvcnQgcGFja2FnZXMpLgorICAgICAgICBUaHVzLCB5b3Ugd291bGQgbGlrZSB0byBiZSBhYmxlIHRvIHJlbW92ZSB0aG9zZSBwYWNrYWdlcyBmcm9tIHlvdXIgdGFyZ2V0IHN5c3Jvb3QuCisgICAgPC9wYXJhPgorCis8c2VjdGlvbiBpZD0ncGFja2FnZS1tYW5hZ2VtZW50LXN5c3RlbXMnPgorICAgIDx0aXRsZT5QYWNrYWdlIE1hbmFnZW1lbnQgU3lzdGVtczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc3VwcG9ydHMgdGhlIGdlbmVyYXRpb24gb2Ygc3lzcm9vdCBmaWxlcyB1c2luZworICAgICAgICB0aHJlZSBkaWZmZXJlbnQgUGFja2FnZSBNYW5hZ2VtZW50IFN5c3RlbXMgKFBNUyk6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk9QS0c6PC9lbXBoYXNpcz4gQSBsZXNzIHdlbGwga25vd24gUE1TIHdob3NlIHVzZQorICAgICAgICAgICAgICAgIG9yaWdpbmF0ZWQgaW4gdGhlIE9wZW5FbWJlZGRlZCBhbmQgT3BlbldydCBlbWJlZGRlZCBMaW51eCBwcm9qZWN0cy4KKyAgICAgICAgICAgICAgICBUaGlzIFBNUyB3b3JrcyB3aXRoIGZpbGVzIHBhY2thZ2VkIGluIGFuIDxmaWxlbmFtZT4uaXBrPC9maWxlbmFtZT4gZm9ybWF0LgorICAgICAgICAgICAgICAgIFNlZSA8dWxpbmsgdXJsPSdodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL09wa2cnPjwvdWxpbms+IGZvciBtb3JlCisgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgT1BLRy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UlBNOjwvZW1waGFzaXM+IEEgbW9yZSB3aWRlbHkga25vd24gUE1TIGludGVuZGVkIGZvciBHTlUvTGludXgKKyAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25zLgorICAgICAgICAgICAgICAgIFRoaXMgUE1TIHdvcmtzIHdpdGggZmlsZXMgcGFja2FnZWQgaW4gYW4gPGZpbGVuYW1lPi5ybXM8L2ZpbGVuYW1lPiBmb3JtYXQuCisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBjdXJyZW50bHkgaW5zdGFsbHMgdGhyb3VnaCB0aGlzIFBNUyBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIFNlZSA8dWxpbmsgdXJsPSdodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1JQTV9QYWNrYWdlX01hbmFnZXInPjwvdWxpbms+CisgICAgICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgUlBNLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5EZWJpYW46PC9lbXBoYXNpcz4gVGhlIFBNUyBmb3IgRGViaWFuLWJhc2VkIHN5c3RlbXMKKyAgICAgICAgICAgICAgICBpcyBidWlsdCBvbiBtYW55IFBNUyB0b29scy4KKyAgICAgICAgICAgICAgICBUaGUgbG93ZXItbGV2ZWwgUE1TIHRvb2wgPGZpbGVuYW1lPmRwa2c8L2ZpbGVuYW1lPiBmb3JtcyB0aGUgYmFzZSBvZiB0aGUgRGViaWFuIFBNUy4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gZHBrZyBzZWUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Rwa2cnPjwvdWxpbms+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdjb25maWd1cmluZy10aGUtcG1zJz4KKyAgICA8dGl0bGU+Q29uZmlndXJpbmcgdGhlIFBNUzwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hpY2hldmVyIFBNUyB5b3UgYXJlIHVzaW5nLCB5b3UgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgIHZhcmlhYmxlIGluIHRoZSA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgZmlsZSBpcyBzZXQgdG8gcmVmbGVjdCB0aGF0IHN5c3RlbS4KKyAgICAgICAgVGhlIGZpcnN0IHZhbHVlIHlvdSBjaG9vc2UgZm9yIHRoZSB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIHBhY2thZ2UgZmlsZSBmb3JtYXQgZm9yIHRoZSByb290CisgICAgICAgIGZpbGVzeXN0ZW0gYXQgc3lzcm9vdC4KKyAgICAgICAgQWRkaXRpb25hbCB2YWx1ZXMgc3BlY2lmeSBhZGRpdGlvbmFsIGZvcm1hdHMgZm9yIGNvbnZlbmllbmNlIG9yIHRlc3RpbmcuCisgICAgICAgIFNlZSB0aGUgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IKKyAgICAgICAgZGV0YWlscy4KKyAgICA8L3BhcmE+CisKKyAgICA8bm90ZT4KKyAgICAgICAgRm9yIGJ1aWxkIHBlcmZvcm1hbmNlIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIFBNUywgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtcGFja2FnZSc+PGZpbGVuYW1lPnBhY2thZ2UuYmJjbGFzczwvZmlsZW5hbWU+PC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICA8L25vdGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQXMgYW4gZXhhbXBsZSwgY29uc2lkZXIgYSBzY2VuYXJpbyB3aGVyZSB5b3UgYXJlIHVzaW5nIE9QS0cgYW5kIHlvdSB3YW50IHRvIGFkZAorICAgICAgICB0aGUgPGZpbGVuYW1lPmxpYmdsYWRlPC9maWxlbmFtZT4gcGFja2FnZSB0byB0aGUgdGFyZ2V0IHN5c3Jvb3QuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZpcnN0LCB5b3Ugc2hvdWxkIGdlbmVyYXRlIHRoZSBJUEsgZmlsZSBmb3IgdGhlCisgICAgICAgIDxmaWxlbmFtZT5saWJnbGFkZTwvZmlsZW5hbWU+IHBhY2thZ2UgYW5kIGFkZCBpdAorICAgICAgICBpbnRvIGEgd29ya2luZyA8ZmlsZW5hbWU+b3BrZzwvZmlsZW5hbWU+IHJlcG9zaXRvcnkuCisgICAgICAgIFVzZSB0aGVzZSBjb21tYW5kczoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbGliZ2xhZGUKKyAgICAgJCBiaXRiYWtlIHBhY2thZ2UtaW5kZXgKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBOZXh0LCBzb3VyY2UgdGhlIGNyb3NzLXRvb2xjaGFpbiBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgZm91bmQgaW4gdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgRm9sbG93IHRoYXQgYnkgc2V0dGluZyB1cCB0aGUgaW5zdGFsbGF0aW9uIGRlc3RpbmF0aW9uIHRvIHBvaW50IHRvIHlvdXIKKyAgICAgICAgc3lzcm9vdCBhcyA8cmVwbGFjZWFibGU+c3lzcm9vdF9kaXI8L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgRmluYWxseSwgaGF2ZSBhbiBPUEtHIGNvbmZpZ3VyYXRpb24gZmlsZSA8cmVwbGFjZWFibGU+Y29uZl9maWxlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgPGZpbGVuYW1lPm9wa2c8L2ZpbGVuYW1lPiByZXBvc2l0b3J5IHlvdSBoYXZlIGp1c3QgY3JlYXRlZC4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kIGZvcm1zIHNob3VsZCBub3cgd29yazoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIG9wa2ctY2wg4oCTZiA8cmVwbGFjZWFibGU+Y29uZl9maWxlPC9yZXBsYWNlYWJsZT4gLW8gPHJlcGxhY2VhYmxlPnN5c3Jvb3RfZGlyPC9yZXBsYWNlYWJsZT4gdXBkYXRlCisgICAgICQgb3BrZy1jbCDigJNmIDxyZXBsYWNlYWJsZT5jY29uZl9maWxlPC9yZXBsYWNlYWJsZT4gLW8gPHJlcGxhY2VhYmxlPnN5c3Jvb3RfZGlyPC9yZXBsYWNlYWJsZT4gXAorICAgICAgICAtLWZvcmNlLW92ZXJ3cml0ZSBpbnN0YWxsIGxpYmdsYWRlCisgICAgICQgb3BrZy1jbCDigJNmIDxyZXBsYWNlYWJsZT5jY29uZl9maWxlPC9yZXBsYWNlYWJsZT4gLW8gPHJlcGxhY2VhYmxlPnN5c3Jvb3RfZGlyPC9yZXBsYWNlYWJsZT4gXAorICAgICAgICAtLWZvcmNlLW92ZXJ3cml0ZSBpbnN0YWxsIGxpYmdsYWRlLWRiZworICAgICAkIG9wa2ctY2wg4oCTZiA8cmVwbGFjZWFibGU+Y29uZl9maWxlJmd0OyAtbyA8L3JlcGxhY2VhYmxlPnN5c3Jvb3RfZGlyJmd0OyBcCisgICAgICAgIC0tZm9yY2Utb3ZlcndyaXRlIGluc3RhbGwgbGliZ2xhZGUtZGV2CisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1wcmVwYXJlLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1wcmVwYXJlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWY1NjlmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LXByZXBhcmUueG1sCkBAIC0wLDAgKzEsOTg0IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0nYWR0LXByZXBhcmUnPgorCis8dGl0bGU+UHJlcGFyaW5nIGZvciBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudDwvdGl0bGU+CisKKzxwYXJhPgorICAgIEluIG9yZGVyIHRvIGRldmVsb3AgYXBwbGljYXRpb25zLCB5b3UgbmVlZCBzZXQgdXAgeW91ciBob3N0IGRldmVsb3BtZW50IHN5c3RlbS4KKyAgICBTZXZlcmFsIHdheXMgZXhpc3QgdGhhdCBhbGxvdyB5b3UgdG8gaW5zdGFsbCBjcm9zcy1kZXZlbG9wbWVudCB0b29scywgUUVNVSwgdGhlCisgICAgRWNsaXBzZSBZb2N0byBQbHVnLWluLCBhbmQgb3RoZXIgdG9vbHMuCisgICAgVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyBob3cgdG8gcHJlcGFyZSBmb3IgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQuCis8L3BhcmE+CisKKzxzZWN0aW9uIGlkPSdpbnN0YWxsaW5nLXRoZS1hZHQnPgorICAgIDx0aXRsZT5JbnN0YWxsaW5nIHRoZSBBRFQgYW5kIFRvb2xjaGFpbnM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBkZXNjcmliZXMgaW5zdGFsbGF0aW9uIG1ldGhvZHMgdGhhdCBzZXQgdXAgdmFyeWluZworICAgICAgICBkZWdyZWVzIG9mIHRvb2wgYXZhaWxhYmlsaXR5IG9uIHlvdXIgc3lzdGVtLgorICAgICAgICBSZWdhcmRsZXNzIG9mIHRoZSBpbnN0YWxsYXRpb24gbWV0aG9kIHlvdSBjaG9vc2UsCisgICAgICAgIHlvdSBtdXN0IDxmaWxlbmFtZT5zb3VyY2U8L2ZpbGVuYW1lPiB0aGUgY3Jvc3MtdG9vbGNoYWluCisgICAgICAgIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCwgd2hpY2ggZXN0YWJsaXNoZXMgc2V2ZXJhbCBrZXkKKyAgICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBiZWZvcmUgeW91IHVzZSBhIHRvb2xjaGFpbi4KKyAgICAgICAgU2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2V0dGluZy11cC10aGUtY3Jvc3MtZGV2ZWxvcG1lbnQtZW52aXJvbm1lbnQnPlNldHRpbmcgVXAgdGhlIENyb3NzLURldmVsb3BtZW50IEVudmlyb25tZW50PC9saW5rPiIKKyAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8bm90ZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBdm9pZCBtaXhpbmcgaW5zdGFsbGF0aW9uIG1ldGhvZHMgd2hlbiBpbnN0YWxsaW5nIHRvb2xjaGFpbnMgZm9yCisgICAgICAgICAgICBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcy4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCBhdm9pZCB1c2luZyB0aGUgQURUIEluc3RhbGxlciB0byBpbnN0YWxsIHNvbWUKKyAgICAgICAgICAgIHRvb2xjaGFpbnMgYW5kIHRoZW4gaGFuZC1pbnN0YWxsaW5nIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMKKyAgICAgICAgICAgIGJ5IHJ1bm5pbmcgdGhlIHRvb2xjaGFpbiBpbnN0YWxsZXIgZm9yIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLgorICAgICAgICAgICAgTWl4aW5nIGluc3RhbGxhdGlvbiBtZXRob2RzIGNhbiByZXN1bHQgaW4gc2l0dWF0aW9ucyB3aGVyZSB0aGUKKyAgICAgICAgICAgIEFEVCBJbnN0YWxsZXIgYmVjb21lcyB1bnJlbGlhYmxlIGFuZCBtaWdodCBub3QgaW5zdGFsbCB0aGUKKyAgICAgICAgICAgIHRvb2xjaGFpbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IG11c3QgbWl4IGluc3RhbGxhdGlvbiBtZXRob2RzLCB5b3UgbWlnaHQgYXZvaWQgcHJvYmxlbXMgYnkKKyAgICAgICAgICAgIGRlbGV0aW5nIDxmaWxlbmFtZT4vdmFyL2xpYi9vcGtnPC9maWxlbmFtZT4sIHRodXMgcHVyZ2luZyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5vcGtnPC9maWxlbmFtZT4gcGFja2FnZSBtZXRhZGF0YS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvbm90ZT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Vc2UgdGhlIEFEVCBpbnN0YWxsZXIgc2NyaXB0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhpcyBtZXRob2QgaXMgdGhlIHJlY29tbWVuZGVkIHdheSB0byBpbnN0YWxsIHRoZSBBRFQgYmVjYXVzZSBpdAorICAgICAgICAgICAgICAgIGF1dG9tYXRlcyBtdWNoIG9mIHRoZSBwcm9jZXNzIGZvciB5b3UuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gY29uZmlndXJlIHRoZSBpbnN0YWxsYXRpb24gdG8gaW5zdGFsbCB0aGUgUUVNVSBlbXVsYXRvcgorICAgICAgICAgICAgICAgIGFuZCB0aGUgdXNlci1zcGFjZSBORlMsIHNwZWNpZnkgd2hpY2ggcm9vdCBmaWxlc3lzdGVtIHByb2ZpbGVzIHRvIGRvd25sb2FkLAorICAgICAgICAgICAgICAgIGFuZCBkZWZpbmUgdGhlIHRhcmdldCBzeXNyb290IGxvY2F0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Vc2UgYW4gZXhpc3RpbmcgdG9vbGNoYWluOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVXNpbmcgdGhpcyBtZXRob2QsIHlvdSBzZWxlY3QgYW5kIGRvd25sb2FkIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYworICAgICAgICAgICAgICAgIHRvb2xjaGFpbiBpbnN0YWxsZXIgYW5kIHRoZW4gcnVuIHRoZSBzY3JpcHQgdG8gaGFuZC1pbnN0YWxsIHRoZSB0b29sY2hhaW4uCisgICAgICAgICAgICAgICAgSWYgeW91IHVzZSB0aGlzIG1ldGhvZCwgeW91IGp1c3QgZ2V0IHRoZSBjcm9zcy10b29sY2hhaW4gYW5kIFFFTVUgLSB5b3UgZG8gbm90CisgICAgICAgICAgICAgICAgZ2V0IGFueSBvZiB0aGUgb3RoZXIgbWVudGlvbmVkIGJlbmVmaXRzIGhhZCB5b3UgcnVuIHRoZSBBRFQgSW5zdGFsbGVyIHNjcmlwdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNlIHRoZSB0b29sY2hhaW4gZnJvbSB3aXRoaW4gdGhlIEJ1aWxkIERpcmVjdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIElmIHlvdSBhbHJlYWR5IGhhdmUgYQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgeW91IGNhbiBidWlsZCB0aGUgY3Jvc3MtdG9vbGNoYWluIHdpdGhpbiB0aGUgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGxpa2UgdGhlIHByZXZpb3VzIG1ldGhvZCBtZW50aW9uZWQsIHlvdSBvbmx5IGdldCB0aGUgY3Jvc3MtdG9vbGNoYWluIGFuZCBRRU1VIC0geW91CisgICAgICAgICAgICAgICAgZG8gbm90IGdldCBhbnkgb2YgdGhlIG90aGVyIGJlbmVmaXRzIHdpdGhvdXQgdGFraW5nIHNlcGFyYXRlIHN0ZXBzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmctdGhlLWFkdC1pbnN0YWxsZXInPgorICAgICAgICA8dGl0bGU+VXNpbmcgdGhlIEFEVCBJbnN0YWxsZXI8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gcnVuIHRoZSBBRFQgSW5zdGFsbGVyLCB5b3UgbmVlZCB0byBnZXQgdGhlIEFEVCBJbnN0YWxsZXIgdGFyYmFsbCwgYmUgc3VyZQorICAgICAgICAgICAgeW91IGhhdmUgdGhlIG5lY2Vzc2FyeSBob3N0IGRldmVsb3BtZW50IHBhY2thZ2VzIHRoYXQgc3VwcG9ydCB0aGUgQURUIEluc3RhbGxlciwKKyAgICAgICAgICAgIGFuZCB0aGVuIHJ1biB0aGUgQURUIEluc3RhbGxlciBTY3JpcHQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBhIGxpc3Qgb2YgdGhlIGhvc3QgcGFja2FnZXMgbmVlZGVkIHRvIHN1cHBvcnQgQURUIGluc3RhbGxhdGlvbiBhbmQgdXNlLCBzZWUgdGhlCisgICAgICAgICAgICAiQURUIEluc3RhbGxlciBFeHRyYXMiIGxpc3RzIGluIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlcXVpcmVkLXBhY2thZ2VzLWZvci10aGUtaG9zdC1kZXZlbG9wbWVudC1zeXN0ZW0nPlJlcXVpcmVkIFBhY2thZ2VzIGZvciB0aGUgSG9zdCBEZXZlbG9wbWVudCBTeXN0ZW08L3VsaW5rPiIgc2VjdGlvbgorICAgICAgICAgICAgb2YgdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdnZXR0aW5nLXRoZS1hZHQtaW5zdGFsbGVyLXRhcmJhbGwnPgorICAgICAgICAgICAgPHRpdGxlPkdldHRpbmcgdGhlIEFEVCBJbnN0YWxsZXIgVGFyYmFsbDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBBRFQgSW5zdGFsbGVyIGlzIGNvbnRhaW5lZCBpbiB0aGUgQURUIEluc3RhbGxlciB0YXJiYWxsLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZ2V0IHRoZSB0YXJiYWxsIHVzaW5nIGVpdGhlciBvZiB0aGVzZSBtZXRob2RzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RG93bmxvYWQgdGhlIFRhcmJhbGw6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZG93bmxvYWQgdGhlIHRhcmJhbGwgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0FEVElOU1RBTExFUl9ETF9VUkw7Jz48L3VsaW5rPiBpbnRvCisgICAgICAgICAgICAgICAgICAgICAgICBhbnkgZGlyZWN0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIHRoZSBUYXJiYWxsOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYml0YmFrZS10ZXJtJz5CaXRCYWtlPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGdlbmVyYXRlIHRoZSB0YXJiYWxsIGluc2lkZSBhbiBleGlzdGluZworICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSB1c2UgQml0QmFrZSB0byBnZW5lcmF0ZSB0aGUgQURUIEluc3RhbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgdGFyYmFsbCwgeW91IG11c3QgPGZpbGVuYW1lPnNvdXJjZTwvZmlsZW5hbWU+IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgICAgICAoPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4pCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGVkIGluIHRoZSBTb3VyY2UgRGlyZWN0b3J5IGJlZm9yZSBydW5uaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kIHRoYXQgY3JlYXRlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmJhbGwuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBleGFtcGxlIGNvbW1hbmRzIGVzdGFibGlzaAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICBjaGVjayBvdXQgdGhlIGN1cnJlbnQgcmVsZWFzZSBicmFuY2gsIHNldCB1cCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGVudmlyb25tZW50IHdoaWxlIGFsc28gY3JlYXRpbmcgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIERpcmVjdG9yeSwgYW5kIHJ1biB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCB0aGF0IHJlc3VsdHMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJiYWxsCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS9idWlsZC90bXAvZGVwbG95L3Nkay9hZHRfaW5zdGFsbGVyLnRhci5iejI8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJlZm9yZSB1c2luZyBCaXRCYWtlIHRvIGJ1aWxkIHRoZSBBRFQgdGFyYmFsbCwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXJlIHRvIG1ha2Ugc3VyZSB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGlzIHByb3Blcmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3VzZXItY29uZmlndXJhdGlvbic+VXNlciBDb25maWd1cmF0aW9uPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYWwgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kKKyAgICAgJCBjZCBwb2t5CisgICAgICQgZ2l0IGNoZWNrb3V0IC1iICZESVNUUk9fTkFNRTsgb3JpZ2luLyZESVNUUk9fTkFNRTsKKyAgICAgJCBzb3VyY2UgJk9FX0lOSVRfRklMRTsKKyAgICAgJCBiaXRiYWtlIGFkdC1pbnN0YWxsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjb25maWd1cmluZy1hbmQtcnVubmluZy10aGUtYWR0LWluc3RhbGxlci1zY3JpcHQnPgorICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIGFuZCBSdW5uaW5nIHRoZSBBRFQgSW5zdGFsbGVyIFNjcmlwdDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJlZm9yZSBydW5uaW5nIHRoZSBBRFQgSW5zdGFsbGVyIHNjcmlwdCwgeW91IG5lZWQgdG8gdW5wYWNrIHRoZSB0YXJiYWxsLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdW5wYWNrIHRoZSB0YXJiYWxsIGluIGFueSBkaXJlY3RvcnkgeW91IHdpc2guCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoaXMgY29tbWFuZCBjb3BpZXMgdGhlIEFEVCBJbnN0YWxsZXIgdGFyYmFsbCBmcm9tIHdoZXJlCisgICAgICAgICAgICAgICAgaXQgd2FzIGJ1aWx0IGludG8gdGhlIGhvbWUgZGlyZWN0b3J5IGFuZCB0aGVuIHVucGFja3MgdGhlIHRhcmJhbGwgaW50bworICAgICAgICAgICAgICAgIGEgdG9wLWxldmVsIGRpcmVjdG9yeSBuYW1lZCA8ZmlsZW5hbWU+YWR0LWluc3RhbGxlcjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+CisgICAgICQgY3AgcG9reS9idWlsZC90bXAvZGVwbG95L3Nkay9hZHRfaW5zdGFsbGVyLnRhci5iejIgJEhPTUUKKyAgICAgJCB0YXIgLXhqZiBhZHRfaW5zdGFsbGVyLnRhci5iejIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVW5wYWNraW5nIGl0IGNyZWF0ZXMgdGhlIGRpcmVjdG9yeSA8ZmlsZW5hbWU+YWR0LWluc3RhbGxlcjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIHdoaWNoIGNvbnRhaW5zIHRoZSBBRFQgSW5zdGFsbGVyIHNjcmlwdCAoPGZpbGVuYW1lPmFkdF9pbnN0YWxsZXI8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICBhbmQgaXRzIGNvbmZpZ3VyYXRpb24gZmlsZSAoPGZpbGVuYW1lPmFkdF9pbnN0YWxsZXIuY29uZjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQmVmb3JlIHlvdSBydW4gdGhlIHNjcmlwdCwgaG93ZXZlciwgeW91IHNob3VsZCBleGFtaW5lIHRoZSBBRFQgSW5zdGFsbGVyIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICBmaWxlIGFuZCBiZSBzdXJlIHlvdSBhcmUgZ29pbmcgdG8gZ2V0IHdoYXQgeW91IHdhbnQuCisgICAgICAgICAgICAgICAgWW91ciBjb25maWd1cmF0aW9ucyBkZXRlcm1pbmUgd2hpY2gga2VybmVsIGFuZCBmaWxlc3lzdGVtIGltYWdlIGFyZSBkb3dubG9hZGVkLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3QgZGVzY3JpYmVzIHRoZSBjb25maWd1cmF0aW9ucyB5b3UgY2FuIGRlZmluZSBmb3IgdGhlIEFEVCBJbnN0YWxsZXIuCisgICAgICAgICAgICAgICAgRm9yIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGFuZCByZXN0cmljdGlvbnMsIHNlZSB0aGUgY29tbWVudHMgaW4KKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmFkdC1pbnN0YWxsZXIuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPllPQ1RPQURUX1JFUE88L2ZpbGVuYW1lPjogVGhpcyBhcmVhCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcyB0aGUgSVBLRy1iYXNlZCBwYWNrYWdlcyBhbmQgdGhlIHJvb3QgZmlsZXN5c3RlbSB1cG9uIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5zdGFsbGF0aW9uIGlzIGJhc2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gc2V0IHVwIHlvdXIgb3duIElQS0cgcmVwb3NpdG9yeSBwb2ludGVkIHRvIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+WU9DVE9BRFRfUkVQTzwvZmlsZW5hbWU+LCB5b3UgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvbGxvd3MgdGhlIHNhbWUgbGF5b3V0IGFzIHRoZSByZWZlcmVuY2UgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdXAgYXQgPHVsaW5rIHVybD0naHR0cDovL2FkdHJlcG8ueW9jdG9wcm9qZWN0Lm9yZyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBBbHNvLCB5b3VyIHJlcG9zaXRvcnkgbmVlZHMgdG8gYmUgYWNjZXNzaWJsZSB0aHJvdWdoIEhUVFAuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+WU9DVE9BRFRfVEFSR0VUUzwvZmlsZW5hbWU+OiBUaGUgbWFjaGluZQorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGFyY2hpdGVjdHVyZXMgZm9yIHdoaWNoIHlvdSB3YW50IHRvIHNldCB1cCBjcm9zcy1kZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPllPQ1RPQURUX1FFTVU8L2ZpbGVuYW1lPjogSW5kaWNhdGVzIHdoZXRoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIG5vdCB0byBpbnN0YWxsIHRoZSBlbXVsYXRvciBRRU1VLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPllPQ1RPQURUX05GU19VVElMPC9maWxlbmFtZT46IEluZGljYXRlcyB3aGV0aGVyCisgICAgICAgICAgICAgICAgICAgICAgICBvciBub3QgdG8gaW5zdGFsbCB1c2VyLW1vZGUgTkZTLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHBsYW4gdG8gdXNlIHRoZSBFY2xpcHNlIElERSBZb2N0byBwbHVnLWluIGFnYWluc3QgUUVNVSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBzaG91bGQgaW5zdGFsbCBORlMuCisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT5UbyBib290IFFFTVUgaW1hZ2VzIHVzaW5nIG91ciB1c2Vyc3BhY2UgTkZTIHNlcnZlciwgeW91IG5lZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiZSBydW5uaW5nIDxmaWxlbmFtZT5wb3J0bWFwPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPnJwY2JpbmQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHJ1bm5pbmcgPGZpbGVuYW1lPnJwY2JpbmQ8L2ZpbGVuYW1lPiwgeW91IHdpbGwgYWxzbyBuZWVkIHRvIGFkZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWk8L2ZpbGVuYW1lPiBvcHRpb24gd2hlbiA8ZmlsZW5hbWU+cnBjYmluZDwvZmlsZW5hbWU+IHN0YXJ0cyB1cC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2UgbWFrZSBzdXJlIHlvdSB1bmRlcnN0YW5kIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMgb2YgZG9pbmcgdGhpcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbWlnaHQgYWxzbyBoYXZlIHRvIG1vZGlmeSB5b3VyIGZpcmV3YWxsIHNldHRpbmdzIHRvIGFsbG93CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkZTIGJvb3RpbmcgdG8gd29yay48L25vdGU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+WU9DVE9BRFRfUk9PVEZTXzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmFyY2g8L3JlcGxhY2VhYmxlPjogVGhlIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0gaW1hZ2VzIHlvdSB3YW50IHRvIGRvd25sb2FkIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+WU9DVE9BRFRfSVBLR19SRVBPPC9maWxlbmFtZT4gcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5ZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9JTUFHRV88L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT46IFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcGFydGljdWxhciByb290IGZpbGVzeXN0ZW0gdXNlZCB0byBleHRyYWN0IGFuZCBjcmVhdGUgdGhlIHRhcmdldCBzeXNyb290LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgbXVzdCBoYXZlIGJlZW4gc3BlY2lmaWVkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ZT0NUT0FEVF9ST09URlNfPC9maWxlbmFtZT48cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+LgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkb3dubG9hZGVkIGJvdGggPGZpbGVuYW1lPm1pbmltYWw8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zYXRvLXNkazwvZmlsZW5hbWU+IGltYWdlcyBieSBzZXR0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+WU9DVE9BRFRfUk9PVEZTXzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmFyY2g8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgdG8gIm1pbmltYWwgc2F0by1zZGsiLCB0aGVuIDxmaWxlbmFtZT5ZT0NUT0FEVF9ST09URlNfPC9maWxlbmFtZT48cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IGJlIHNldCB0byBlaXRoZXIgIm1pbmltYWwiIG9yICJzYXRvLXNkayIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5ZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9MT0NfPC9maWxlbmFtZT48cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+OiBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uIG9uIHRoZSBkZXZlbG9wbWVudCBob3N0IHdoZXJlIHRoZSB0YXJnZXQgc3lzcm9vdCBpcyBjcmVhdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFmdGVyIHlvdSBoYXZlIGNvbmZpZ3VyZWQgdGhlIDxmaWxlbmFtZT5hZHRfaW5zdGFsbGVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLAorICAgICAgICAgICAgICAgIHJ1biB0aGUgaW5zdGFsbGVyIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgYWR0LWluc3RhbGxlcgorICAgICAkIC4vYWR0X2luc3RhbGxlcgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBPbmNlIHRoZSBpbnN0YWxsZXIgYmVnaW5zIHRvIHJ1biwgeW91IGFyZSBhc2tlZCB0byBlbnRlciB0aGUKKyAgICAgICAgICAgICAgICBsb2NhdGlvbiBmb3IgY3Jvc3MtdG9vbGNoYWluIGluc3RhbGxhdGlvbi4KKyAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBsb2NhdGlvbiBpcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vb3B0L3Bva3kvPC9maWxlbmFtZT48cmVwbGFjZWFibGU+cmVsZWFzZTwvcmVwbGFjZWFibGU+LgorICAgICAgICAgICAgICAgIEFmdGVyIGVpdGhlciBhY2NlcHRpbmcgdGhlIGRlZmF1bHQgbG9jYXRpb24gb3Igc2VsZWN0aW5nIHlvdXIKKyAgICAgICAgICAgICAgICBvd24gbG9jYXRpb24sIHlvdSBhcmUgcHJvbXB0ZWQgdG8gcnVuIHRoZSBpbnN0YWxsYXRpb24gc2NyaXB0CisgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmVseSBvciBpbiBzaWxlbnQgbW9kZS4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBjbG9zZWx5IG1vbml0b3IgdGhlIGluc3RhbGxhdGlvbiwKKyAgICAgICAgICAgICAgICBjaG9vc2Ug4oCcSeKAnSBmb3IgaW50ZXJhY3RpdmUgbW9kZSByYXRoZXIgdGhhbiDigJxT4oCdIGZvciBzaWxlbnQgbW9kZS4KKyAgICAgICAgICAgICAgICBGb2xsb3cgdGhlIHByb21wdHMgZnJvbSB0aGUgc2NyaXB0IHRvIGNvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uY2UgdGhlIGluc3RhbGxhdGlvbiBjb21wbGV0ZXMsIHRoZSBBRFQsIHdoaWNoIGluY2x1ZGVzIHRoZQorICAgICAgICAgICAgICAgIGNyb3NzLXRvb2xjaGFpbiwgaXMgaW5zdGFsbGVkIGluIHRoZSBzZWxlY3RlZCBpbnN0YWxsYXRpb24KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgWW91IHdpbGwgbm90aWNlIGVudmlyb25tZW50IHNldHVwIGZpbGVzIGZvciB0aGUgY3Jvc3MtdG9vbGNoYWluCisgICAgICAgICAgICAgICAgaW4gdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnksIGFuZCBpbWFnZSB0YXJiYWxscyBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YWR0LWluc3RhbGxlcjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBhY2NvcmRpbmcgdG8geW91cgorICAgICAgICAgICAgICAgIGluc3RhbGxlciBjb25maWd1cmF0aW9ucywgYW5kIHRoZSB0YXJnZXQgc3lzcm9vdCBsb2NhdGVkCisgICAgICAgICAgICAgICAgYWNjb3JkaW5nIHRvIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9MT0NfPC9maWxlbmFtZT48cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgYWxzbyBpbiB5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmctYW4tZXhpc3RpbmctdG9vbGNoYWluLXRhcmJhbGwnPgorICAgICAgICA8dGl0bGU+VXNpbmcgYSBDcm9zcy1Ub29sY2hhaW4gVGFyYmFsbDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBzaW1wbHkgaW5zdGFsbCBhIGNyb3NzLXRvb2xjaGFpbiBieSBoYW5kLCB5b3UgY2FuCisgICAgICAgICAgICBkbyBzbyBieSBydW5uaW5nIHRoZSB0b29sY2hhaW4gaW5zdGFsbGVyLgorICAgICAgICAgICAgVGhlIGluc3RhbGxlciBpbmNsdWRlcyB0aGUgcHJlLWJ1aWx0IGNyb3NzLXRvb2xjaGFpbiwgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+IHNjcmlwdCwgYW5kIHN1cHBvcnQgZmlsZXMuCisgICAgICAgICAgICBJZiB5b3UgdXNlIHRoaXMgbWV0aG9kIHRvIGluc3RhbGwgdGhlIGNyb3NzLXRvb2xjaGFpbiwgeW91CisgICAgICAgICAgICBtaWdodCBzdGlsbCBuZWVkIHRvIGluc3RhbGwgdGhlIHRhcmdldCBzeXNyb290IGJ5IGluc3RhbGxpbmcgYW5kCisgICAgICAgICAgICBleHRyYWN0aW5nIGl0IHNlcGFyYXRlbHkuCisgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGluc3RhbGwgdGhlIHN5c3Jvb3QsIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdleHRyYWN0aW5nLXRoZS1yb290LWZpbGVzeXN0ZW0nPkV4dHJhY3RpbmcgdGhlIFJvb3QgRmlsZXN5c3RlbTwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvbGxvdyB0aGVzZSBzdGVwczoKKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkdldCB5b3VyIHRvb2xjaGFpbiBpbnN0YWxsZXIgdXNpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgbWV0aG9kczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkdvIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1RPT0xDSEFJTl9ETF9VUkw7Jz48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBmaW5kIHRoZSBmb2xkZXIgdGhhdCBtYXRjaGVzIHlvdXIgaG9zdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IHN5c3RlbSAoaS5lLiA8ZmlsZW5hbWU+aTY4NjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIDMyLWJpdCBtYWNoaW5lcyBvciA8ZmlsZW5hbWU+eDg2XzY0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgNjQtYml0IG1hY2hpbmVzKS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+R28gaW50byB0aGF0IGZvbGRlciBhbmQgZG93bmxvYWQgdGhlIHRvb2xjaGFpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlciB3aG9zZSBuYW1lIGluY2x1ZGVzIHRoZSBhcHByb3ByaWF0ZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRvb2xjaGFpbnMgcHJvdmlkZWQgYnkgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgYmFzZWQgb2ZmIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPiBpbWFnZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluIGxpYnJhcmllcyBhcHByb3ByaWF0ZSBmb3IgZGV2ZWxvcGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnYWluc3QgdGhhdCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91ciBob3N0IGRldmVsb3BtZW50IHN5c3RlbSBpcyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjQtYml0IHg4NiBzeXN0ZW0gYW5kIHlvdSBhcmUgZ29pbmcgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91ciBjcm9zcy10b29sY2hhaW4gZm9yIGEgMzItYml0IHg4NgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCwgZ28gaW50byB0aGUgPGZpbGVuYW1lPng4Nl82NDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sZGVyIGFuZCBkb3dubG9hZCB0aGUgZm9sbG93aW5nIGluc3RhbGxlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHBva3ktZ2xpYmMteDg2XzY0LWNvcmUtaW1hZ2Utc2F0by1pNTg2LXRvb2xjaGFpbi0mRElTVFJPOy5zaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CdWlsZCB5b3VyIG93biB0b29sY2hhaW4gaW5zdGFsbGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBjYXNlcyB3aGVyZSB5b3UgY2Fubm90IHVzZSBhbiBpbnN0YWxsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBkb3dubG9hZCBhcmVhLCB5b3UgY2FuIGJ1aWxkIHlvdXIgb3duIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdvcHRpb25hbGx5LWJ1aWxkaW5nLWEtdG9vbGNoYWluLWluc3RhbGxlcic+T3B0aW9uYWxseSBCdWlsZGluZyBhIFRvb2xjaGFpbiBJbnN0YWxsZXI8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+T25jZSB5b3UgaGF2ZSB0aGUgaW5zdGFsbGVyLCBydW4gaXQgdG8gaW5zdGFsbCB0aGUgdG9vbGNoYWluOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgY2hhbmdlIHRoZSBwZXJtaXNzaW9ucyBvbiB0aGUgdG9vbGNoYWluCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZXIgc2NyaXB0IHNvIHRoYXQgaXQgaXMgZXhlY3V0YWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBjb21tYW5kIHNob3dzIGhvdyB0byBydW4gdGhlIGluc3RhbGxlcgorICAgICAgICAgICAgICAgICAgICBnaXZlbiBhIHRvb2xjaGFpbiB0YXJiYWxsIGZvciBhIDY0LWJpdCB4ODYgZGV2ZWxvcG1lbnQgaG9zdAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gYW5kIGEgMzItYml0IHg4NiB0YXJnZXQgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZXhhbXBsZSBhc3N1bWVzIHRoZSB0b29sY2hhaW4gaW5zdGFsbGVyIGlzIGxvY2F0ZWQKKyAgICAgICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPn4vRG93bmxvYWRzLzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgfi9Eb3dubG9hZHMvcG9reS1nbGliYy14ODZfNjQtY29yZS1pbWFnZS1zYXRvLWk1ODYtdG9vbGNoYWluLSZESVNUUk87LnNoCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IHRoaW5nIHRoZSBpbnN0YWxsZXIgcHJvbXB0cyB5b3UgZm9yIGlzIHRoZQorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaW50byB3aGljaCB5b3Ugd2FudCB0byBpbnN0YWxsIHRoZSB0b29sY2hhaW4uCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGRpcmVjdG9yeSB1c2VkIGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vb3B0L3Bva3kvJkRJU1RSTzs8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBoYXZlIHdyaXRlIHBlcm1pc3Npb25zIGZvciB0aGUgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIGludG8gd2hpY2ggeW91IGFyZSBpbnN0YWxsaW5nIHRoZSB0b29sY2hhaW4sIHRoZQorICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW4gaW5zdGFsbGVyIG5vdGlmaWVzIHlvdSBhbmQgZXhpdHMuCisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgeW91IGhhdmUgd3JpdGUgcGVybWlzc2lvbnMgaW4gdGhlIGRpcmVjdG9yeSBhbmQKKyAgICAgICAgICAgICAgICAgICAgcnVuIHRoZSBpbnN0YWxsZXIgYWdhaW4uPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5XaGVuIHRoZSBzY3JpcHQgZmluaXNoZXMsIHRoZSBjcm9zcy10b29sY2hhaW4gaXMKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICBZb3Ugd2lsbCBub3RpY2UgZW52aXJvbm1lbnQgc2V0dXAgZmlsZXMgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBjcm9zcy10b29sY2hhaW4gaW4gdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZy10aGUtdG9vbGNoYWluLWZyb20td2l0aGluLXRoZS1idWlsZC10cmVlJz4KKyAgICAgICAgPHRpdGxlPlVzaW5nIEJpdEJha2UgYW5kIHRoZSBCdWlsZCBEaXJlY3Rvcnk8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBmaW5hbCB3YXkgb2YgbWFraW5nIHRoZSBjcm9zcy10b29sY2hhaW4gYXZhaWxhYmxlIGlzIHRvIHVzZSBCaXRCYWtlCisgICAgICAgICAgICB0byBnZW5lcmF0ZSB0aGUgdG9vbGNoYWluIHdpdGhpbiBhbiBleGlzdGluZworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIFRoaXMgbWV0aG9kIGRvZXMgbm90IGluc3RhbGwgdGhlIHRvb2xjaGFpbiBpbnRvIHRoZSBkZWZhdWx0CisgICAgICAgICAgICA8ZmlsZW5hbWU+L29wdDwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIEFzIHdpdGggdGhlIHByZXZpb3VzIG1ldGhvZCwgaWYgeW91IG5lZWQgdG8gaW5zdGFsbCB0aGUgdGFyZ2V0IHN5c3Jvb3QsIHlvdSBtdXN0CisgICAgICAgICAgICBkbyB0aGF0IHNlcGFyYXRlbHkgYXMgd2VsbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9sbG93IHRoZXNlIHN0ZXBzIHRvIGdlbmVyYXRlIHRoZSB0b29sY2hhaW4gaW50byB0aGUgQnVpbGQgRGlyZWN0b3J5OgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2V0IHVwIHRoZSBCdWlsZCBFbnZpcm9ubWVudDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBTb3VyY2UgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBlbnZpcm9ubWVudCBzZXR1cAorICAgICAgICAgICAgICAgICAgICBzY3JpcHQgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdWxpbms+KQorICAgICAgICAgICAgICAgICAgICBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2hlY2sgeW91ciBMb2NhbCBDb25maWd1cmF0aW9uIEZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQXQgdGhpcyBwb2ludCwgeW91IHNob3VsZCBiZSBzdXJlIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb2YgdGhlIEJ1aWxkIERpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgZm9yIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICBDb21tZW50cyB3aXRoaW4gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICBsaXN0IHRoZSB2YWx1ZXMgeW91IGNhbiB1c2UgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gcG9wdWxhdGUgdGhlIEJ1aWxkIERpcmVjdG9yeSB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgY3Jvc3MtdG9vbGNoYWlucyBmb3IgbW9yZSB0aGFuIGEgc2luZ2xlIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBqdXN0IG5lZWQgdG8gZWRpdCB0aGUgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlLXJ1biB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HZW5lcmF0ZSB0aGUgQ3Jvc3MtVG9vbGNoYWluOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFJ1biA8ZmlsZW5hbWU+Yml0YmFrZSBtZXRhLWlkZS1zdXBwb3J0PC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICAgICAgY29tcGxldGUgdGhlIGNyb3NzLXRvb2xjaGFpbiBnZW5lcmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgZmluaXNoZXMsCisgICAgICAgICAgICAgICAgICAgIHRoZSBjcm9zcy10b29sY2hhaW4gaXMKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkIGFuZCBwb3B1bGF0ZWQgd2l0aGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIFlvdSB3aWxsIG5vdGljZSBlbnZpcm9ubWVudCBzZXR1cCBmaWxlcyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIGNyb3NzLXRvb2xjaGFpbiB0aGF0IGNvbnRhaW4gdGhlIHN0cmluZworICAgICAgICAgICAgICAgICAgICAiPGZpbGVuYW1lPmVudmlyb25tZW50LXNldHVwPC9maWxlbmFtZT4iIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBCdWlsZCBEaXJlY3RvcnkncyA8ZmlsZW5hbWU+dG1wPC9maWxlbmFtZT4gZm9sZGVyLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+QmUgYXdhcmUgdGhhdCB3aGVuIHlvdSB1c2UgdGhpcyBtZXRob2QgdG8gaW5zdGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluLCB5b3Ugc3RpbGwgbmVlZCB0byBzZXBhcmF0ZWx5IGV4dHJhY3QgYW5kIGluc3RhbGwKKyAgICAgICAgICAgICAgICAgICAgdGhlIHN5c3Jvb3QgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBkbyB0aGlzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdleHRyYWN0aW5nLXRoZS1yb290LWZpbGVzeXN0ZW0nPkV4dHJhY3RpbmcgdGhlIFJvb3QgRmlsZXN5c3RlbTwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3NldHRpbmctdXAtdGhlLWNyb3NzLWRldmVsb3BtZW50LWVudmlyb25tZW50Jz4KKyAgICA8dGl0bGU+U2V0dGluZyBVcCB0aGUgQ3Jvc3MtRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQ8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEJlZm9yZSB5b3UgY2FuIGRldmVsb3AgdXNpbmcgdGhlIGNyb3NzLXRvb2xjaGFpbiwgeW91IG5lZWQgdG8gc2V0IHVwIHRoZQorICAgICAgICBjcm9zcy1kZXZlbG9wbWVudCBlbnZpcm9ubWVudCBieSBzb3VyY2luZyB0aGUgdG9vbGNoYWluJ3MgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0LgorICAgICAgICBJZiB5b3UgdXNlZCB0aGUgQURUIEluc3RhbGxlciBvciBoYW5kLWluc3RhbGxlZCBjcm9zcy10b29sY2hhaW4sCisgICAgICAgIHRoZW4geW91IGNhbiBmaW5kIHRoaXMgc2NyaXB0IGluIHRoZSBkaXJlY3RvcnkgeW91IGNob3NlIGZvciBpbnN0YWxsYXRpb24uCisgICAgICAgIEZvciB0aGlzIHJlbGVhc2UsIHRoZSBkZWZhdWx0IGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgaXMKKyAgICAgICAgPGZpbGVuYW1lPiZZT0NUT19BRFRQQVRIX0RJUjs8L2ZpbGVuYW1lPi4KKyAgICAgICAgSWYgeW91IGluc3RhbGxlZCB0aGUgdG9vbGNoYWluIGluIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LAorICAgICAgICB5b3UgY2FuIGZpbmQgdGhlIGVudmlyb25tZW50IHNldHVwCisgICAgICAgIHNjcmlwdCBmb3IgdGhlIHRvb2xjaGFpbiBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5J3MgPGZpbGVuYW1lPnRtcDwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQmUgc3VyZSB0byBydW4gdGhlIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCB0aGF0IG1hdGNoZXMgdGhlCisgICAgICAgIGFyY2hpdGVjdHVyZSBmb3Igd2hpY2ggeW91IGFyZSBkZXZlbG9waW5nLgorICAgICAgICBFbnZpcm9ubWVudCBzZXR1cCBzY3JpcHRzIGJlZ2luIHdpdGggdGhlIHN0cmluZworICAgICAgICAiPGZpbGVuYW1lPmVudmlyb25tZW50LXNldHVwPC9maWxlbmFtZT4iIGFuZCBpbmNsdWRlIGFzIHBhcnQgb2YgdGhlaXIKKyAgICAgICAgbmFtZSB0aGUgYXJjaGl0ZWN0dXJlLgorICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIHRvb2xjaGFpbiBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgZm9yIGEgNjQtYml0CisgICAgICAgIElBLWJhc2VkIGFyY2hpdGVjdHVyZSBpbnN0YWxsZWQgaW4gdGhlIGRlZmF1bHQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeQorICAgICAgICB3b3VsZCBiZSB0aGUgZm9sbG93aW5nOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICZZT0NUT19BRFRQQVRIX0RJUjsvZW52aXJvbm1lbnQtc2V0dXAteDg2XzY0LXBva3ktbGludXgKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICBXaGVuIHlvdSBydW4gdGhlIHNldHVwIHNjcmlwdCwgbWFueSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlCisgICAgICAgIGRlZmluZWQ6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNES1RBUkdFVFNZU1JPT1QnPjxmaWxlbmFtZT5TREtUQVJHRVRTWVNST09UPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBwYXRoIHRvIHRoZSBzeXNyb290IHVzZWQgZm9yIGNyb3NzLWNvbXBpbGF0aW9uCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QS0dfQ09ORklHX1BBVEgnPjxmaWxlbmFtZT5QS0dfQ09ORklHX1BBVEg8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIHBhdGggdG8gdGhlIHRhcmdldCBwa2ctY29uZmlnIGZpbGVzCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DT05GSUdfU0lURSc+PGZpbGVuYW1lPkNPTkZJR19TSVRFPC9maWxlbmFtZT48L3VsaW5rPiAtIEEgR05VIGF1dG9jb25mIHNpdGUgZmlsZSBwcmVjb25maWd1cmVkIGZvciB0aGUgdGFyZ2V0CisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DQyc+PGZpbGVuYW1lPkNDPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gdGhlIEMgY29tcGlsZXIKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNYWCc+PGZpbGVuYW1lPkNYWDwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuIHRoZSBDKysgY29tcGlsZXIKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNQUCc+PGZpbGVuYW1lPkNQUDwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvcgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQVMnPjxmaWxlbmFtZT5BUzwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuIHRoZSBhc3NlbWJsZXIKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxEJz48ZmlsZW5hbWU+TEQ8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biB0aGUgbGlua2VyCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1HREInPjxmaWxlbmFtZT5HREI8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biB0aGUgR05VIERlYnVnZ2VyCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TVFJJUCc+PGZpbGVuYW1lPlNUUklQPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gJ3N0cmlwJywgd2hpY2ggc3RyaXBzIHN5bWJvbHMKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJBTkxJQic+PGZpbGVuYW1lPlJBTkxJQjwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuICdyYW5saWInCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1PQkpDT1BZJz48ZmlsZW5hbWU+T0JKQ09QWTwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuICdvYmpjb3B5JworICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItT0JKRFVNUCc+PGZpbGVuYW1lPk9CSkRVTVA8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biAnb2JqZHVtcCcKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUFSJz48ZmlsZW5hbWU+QVI8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biAnYXInCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1OTSc+PGZpbGVuYW1lPk5NPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gJ25tJworICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVEFSR0VUX1BSRUZJWCc+PGZpbGVuYW1lPlRBUkdFVF9QUkVGSVg8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIHRvb2xjaGFpbiBiaW5hcnkgcHJlZml4IGZvciB0aGUgdGFyZ2V0IHRvb2xzCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DUk9TU19DT01QSUxFJz48ZmlsZW5hbWU+Q1JPU1NfQ09NUElMRTwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgdG9vbGNoYWluIGJpbmFyeSBwcmVmaXggZm9yIHRoZSB0YXJnZXQgdG9vbHMKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNPTkZJR1VSRV9GTEFHUyc+PGZpbGVuYW1lPkNPTkZJR1VSRV9GTEFHUzwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBhcmd1bWVudHMgZm9yIEdOVSBjb25maWd1cmUKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNGTEFHUyc+PGZpbGVuYW1lPkNGTEFHUzwvZmlsZW5hbWU+PC91bGluaz4gLSBTdWdnZXN0ZWQgQyBmbGFncworICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ1hYRkxBR1MnPjxmaWxlbmFtZT5DWFhGTEFHUzwvZmlsZW5hbWU+PC91bGluaz4gLSBTdWdnZXN0ZWQgQysrIGZsYWdzCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MREZMQUdTJz48ZmlsZW5hbWU+TERGTEFHUzwvZmlsZW5hbWU+PC91bGluaz4gLSBTdWdnZXN0ZWQgbGlua2VyIGZsYWdzIHdoZW4geW91IHVzZSBDQyB0byBsaW5rCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DUFBGTEFHUyc+PGZpbGVuYW1lPkNQUEZMQUdTPC9maWxlbmFtZT48L3VsaW5rPiAtIFN1Z2dlc3RlZCBwcmVwcm9jZXNzb3IgZmxhZ3MKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3NlY3VyaW5nLWtlcm5lbC1hbmQtZmlsZXN5c3RlbS1pbWFnZXMnPgorICAgIDx0aXRsZT5TZWN1cmluZyBLZXJuZWwgYW5kIEZpbGVzeXN0ZW0gSW1hZ2VzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBZb3Ugd2lsbCBuZWVkIHRvIGhhdmUgYSBrZXJuZWwgYW5kIGZpbGVzeXN0ZW0gaW1hZ2UgdG8gYm9vdCB1c2luZyB5b3VyCisgICAgICAgIGhhcmR3YXJlIG9yIHRoZSBRRU1VIGVtdWxhdG9yLgorICAgICAgICBGdXJ0aGVybW9yZSwgaWYgeW91IHBsYW4gb24gYm9vdGluZyB5b3VyIGltYWdlIHVzaW5nIE5GUyBvciB5b3Ugd2FudCB0byB1c2UgdGhlIHJvb3QgZmlsZXN5c3RlbQorICAgICAgICBhcyB0aGUgdGFyZ2V0IHN5c3Jvb3QsIHlvdSBuZWVkIHRvIGV4dHJhY3QgdGhlIHJvb3QgZmlsZXN5c3RlbS4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nZ2V0dGluZy10aGUtaW1hZ2VzJz4KKyAgICAgICAgPHRpdGxlPkdldHRpbmcgdGhlIEltYWdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBnZXQgdGhlIGtlcm5lbCBhbmQgZmlsZXN5c3RlbSBpbWFnZXMsIHlvdSBlaXRoZXIgaGF2ZSB0byBidWlsZCB0aGVtIG9yIGRvd25sb2FkCisgICAgICAgICAgICBwcmUtYnVpbHQgdmVyc2lvbnMuCisgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSBvZiBob3cgdG8gYnVpbGQgdGhlc2UgaW1hZ2VzLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyNxcy1idWlkaW5nLWltYWdlcyc+QnVpZGluZyBJbWFnZXM8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQuCisgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSBvZiBkb3dubG9hZGluZyBwcmUtYnVpbGQgdmVyc2lvbnMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1wcmUtYnVpbHQnPkV4YW1wbGUgVXNpbmcgUHJlLUJ1aWx0IEJpbmFyaWVzIGFuZCBRRU1VPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHNoaXBzIGJhc2ljIGtlcm5lbCBhbmQgZmlsZXN5c3RlbSBpbWFnZXMgZm9yIHNldmVyYWwKKyAgICAgICAgICAgIGFyY2hpdGVjdHVyZXMgKDxmaWxlbmFtZT54ODY8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPng4Ni02NDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPm1pcHM8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPnBvd2VycGM8L2ZpbGVuYW1lPiwgYW5kIDxmaWxlbmFtZT5hcm08L2ZpbGVuYW1lPikKKyAgICAgICAgICAgIHRoYXQgeW91IGNhbiB1c2UgdW5hbHRlcmVkIGluIHRoZSBRRU1VIGVtdWxhdG9yLgorICAgICAgICAgICAgVGhlc2Uga2VybmVsIGltYWdlcyByZXNpZGUgaW4gdGhlIHJlbGVhc2UKKyAgICAgICAgICAgIGFyZWEgLSA8dWxpbmsgdXJsPScmWU9DVE9fTUFDSElORVNfRExfVVJMOyc+PC91bGluaz4KKyAgICAgICAgICAgIGFuZCBhcmUgaWRlYWwgZm9yIGV4cGVyaW1lbnRhdGlvbiB1c2luZyBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBpbWFnZSB0eXBlcyB5b3UgY2FuIGJ1aWxkIHVzaW5nIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLAorICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1pbWFnZXMnPkltYWdlczwvdWxpbms+IgorICAgICAgICAgICAgY2hhcHRlciBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgYXJlIHBsYW5uaW5nIG9uIGRldmVsb3BpbmcgYWdhaW5zdCB5b3VyIGltYWdlIGFuZCB5b3UgYXJlIG5vdAorICAgICAgICAgICAgYnVpbGRpbmcgb3IgdXNpbmcgb25lIG9mIHRoZSBZb2N0byBQcm9qZWN0IGRldmVsb3BtZW50IGltYWdlcworICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPmNvcmUtaW1hZ2UtKi1kZXY8L2ZpbGVuYW1lPiksIHlvdSBtdXN0IGJlIHN1cmUgdG8KKyAgICAgICAgICAgIGluY2x1ZGUgdGhlIGRldmVsb3BtZW50IHBhY2thZ2VzIGFzIHBhcnQgb2YgeW91ciBpbWFnZSByZWNpcGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBwbGFuIG9uIHJlbW90ZWx5IGRlcGxveWluZyBhbmQgZGVidWdnaW5nIHlvdXIKKyAgICAgICAgICAgIGFwcGxpY2F0aW9uIGZyb20gd2l0aGluIHRoZSBFY2xpcHNlIElERSwgeW91IG11c3QgaGF2ZSBhbiBpbWFnZQorICAgICAgICAgICAgdGhhdCBjb250YWlucyB0aGUgWW9jdG8gVGFyZ2V0IENvbW11bmljYXRpb24gRnJhbWV3b3JrIChUQ0YpIGFnZW50CisgICAgICAgICAgICAoPGZpbGVuYW1lPnRjZi1hZ2VudDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIFlvdSBjYW4gZG8gdGhpcyBieSBpbmNsdWRpbmcgdGhlIDxmaWxlbmFtZT5lY2xpcHNlLWRlYnVnPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGltYWdlIGZlYXR1cmUuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1mZWF0dXJlcy1pbWFnZSc+SW1hZ2UgRmVhdHVyZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgZm9yIGluZm9ybWF0aW9uIG9uCisgICAgICAgICAgICAgICAgaW1hZ2UgZmVhdHVyZXMuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICBUbyBpbmNsdWRlIHRoZSA8ZmlsZW5hbWU+ZWNsaXBzZS1kZWJ1ZzwvZmlsZW5hbWU+IGltYWdlIGZlYXR1cmUsCisgICAgICAgICAgICBtb2RpZnkgeW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICBzbyB0aGF0IHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVFJBX0lNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBpbmNsdWRlcyB0aGUgImVjbGlwc2UtZGVidWciIGZlYXR1cmUuCisgICAgICAgICAgICBBZnRlciBtb2RpZnlpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSwgeW91IGNhbiByZWJ1aWxkIHRoZSBpbWFnZS4KKyAgICAgICAgICAgIE9uY2UgdGhlIGltYWdlIGlzIHJlYnVpbHQsIHRoZSA8ZmlsZW5hbWU+dGNmLWFnZW50PC9maWxlbmFtZT4KKyAgICAgICAgICAgIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGltYWdlIGFuZCBpcyBsYXVuY2hlZCBhdXRvbWF0aWNhbGx5IGFmdGVyCisgICAgICAgICAgICB0aGUgYm9vdC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdleHRyYWN0aW5nLXRoZS1yb290LWZpbGVzeXN0ZW0nPgorICAgICAgICA8dGl0bGU+RXh0cmFjdGluZyB0aGUgUm9vdCBGaWxlc3lzdGVtPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBpbnN0YWxsIHlvdXIgdG9vbGNoYWluIGJ5IGhhbmQgb3IgYnVpbGQgaXQgdXNpbmcgQml0QmFrZSBhbmQKKyAgICAgICAgICAgIHlvdSBuZWVkIGEgcm9vdCBmaWxlc3lzdGVtLCB5b3UgbmVlZCB0byBleHRyYWN0IGl0IHNlcGFyYXRlbHkuCisgICAgICAgICAgICBJZiB5b3UgdXNlIHRoZSBBRFQgSW5zdGFsbGVyIHRvIGluc3RhbGwgdGhlIEFEVCwgdGhlIHJvb3QKKyAgICAgICAgICAgIGZpbGVzeXN0ZW0gaXMgYXV0b21hdGljYWxseSBleHRyYWN0ZWQgYW5kIGluc3RhbGxlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBjYXNlcyB3aGVyZSB5b3UgbmVlZCB0byBleHRyYWN0IHRoZSByb290IGZpbGVzeXN0ZW06CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Zb3Ugd2FudCB0byBib290IHRoZSBpbWFnZSB1c2luZyBORlMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Zb3Ugd2FudCB0byB1c2UgdGhlIHJvb3QgZmlsZXN5c3RlbSBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IHN5c3Jvb3QuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgRWNsaXBzZSBJREUgZW52aXJvbm1lbnQgd2l0aCB0aGUgRWNsaXBzZQorICAgICAgICAgICAgICAgICAgICBZb2N0byBQbHVnLWluIGluc3RhbGxlZCBhbGxvd3MgeW91IHRvIHVzZSBRRU1VIHRvIGJvb3QKKyAgICAgICAgICAgICAgICAgICAgdW5kZXIgTkZTLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Zb3Ugd2FudCB0byBkZXZlbG9wIHlvdXIgdGFyZ2V0IGFwcGxpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSByb290IGZpbGVzeXN0ZW0gYXMgdGhlIHRhcmdldCBzeXNyb290LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBleHRyYWN0IHRoZSByb290IGZpbGVzeXN0ZW0sIGZpcnN0IDxmaWxlbmFtZT5zb3VyY2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgdGhlIGNyb3NzLWRldmVsb3BtZW50IGVudmlyb25tZW50IHNldHVwIHNjcmlwdCB0byBlc3RhYmxpc2gKKyAgICAgICAgICAgIG5lY2Vzc2FyeSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisgICAgICAgICAgICBJZiB5b3UgYnVpbHQgdGhlIHRvb2xjaGFpbiBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LCB5b3Ugd2lsbCBmaW5kCisgICAgICAgICAgICB0aGUgdG9vbGNoYWluIGVudmlyb25tZW50IHNjcmlwdCBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT50bXA8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICBJZiB5b3UgaW5zdGFsbGVkIHRoZSB0b29sY2hhaW4gYnkgaGFuZCwgdGhlIGVudmlyb25tZW50IHNldHVwCisgICAgICAgICAgICBzY3JpcHQgaXMgbG9jYXRlZCBpbiA8ZmlsZW5hbWU+L29wdC9wb2t5LyZESVNUUk87PC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFmdGVyIHNvdXJjaW5nIHRoZSBlbnZpcm9ubWVudCBzY3JpcHQsIHVzZSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11LWV4dHJhY3Qtc2RrPC9maWxlbmFtZT4gY29tbWFuZCBhbmQgcHJvdmlkZSB0aGUKKyAgICAgICAgICAgIGZpbGVzeXN0ZW0gaW1hZ2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgorICAgICAgICAgICAgVGhlIHNlY29uZCBjb21tYW5kIHNldHMgdXAgdGhlIGVudmlyb25tZW50LgorICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB0aGUgc2V0dXAgc2NyaXB0IGlzIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+L29wdC9wb2t5LyZESVNUUk87PC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgVGhlIHRoaXJkIGNvbW1hbmQgZXh0cmFjdHMgdGhlIHJvb3QgZmlsZXN5c3RlbSBmcm9tIGEgcHJldmlvdXNseQorICAgICAgICAgICAgYnVpbHQgZmlsZXN5c3RlbSB0aGF0IGlzIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+fi9Eb3dubG9hZHM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICBGdXJ0aGVybW9yZSwgdGhpcyBjb21tYW5kIGV4dHJhY3RzIHRoZSByb290IGZpbGVzeXN0ZW0gaW50byB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11eDg2LXNhdG88L2ZpbGVuYW1lPiBkaXJlY3Rvcnk6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgfgorICAgICAkIHNvdXJjZSAvb3B0L3Bva3kvJkRJU1RSTzsvZW52aXJvbm1lbnQtc2V0dXAtaTU4Ni1wb2t5LWxpbnV4CisgICAgICQgcnVucWVtdS1leHRyYWN0LXNkayBcCisgICAgICAgIH4vRG93bmxvYWRzL2NvcmUtaW1hZ2Utc2F0by1zZGstcWVtdXg4Ni0yMDExMDkxNDExODMxLnJvb3Rmcy50YXIuYnoyIFwKKyAgICAgICAgJEhPTUUvcWVtdXg4Ni1zYXRvCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBZb3UgY291bGQgbm93IHBvaW50IHRvIHRoZSB0YXJnZXQgc3lzcm9vdCBhdAorICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXV4ODYtc2F0bzwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nb3B0aW9uYWxseS1idWlsZGluZy1hLXRvb2xjaGFpbi1pbnN0YWxsZXInPgorICAgIDx0aXRsZT5PcHRpb25hbGx5IEJ1aWxkaW5nIGEgVG9vbGNoYWluIEluc3RhbGxlcjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQXMgYW4gYWx0ZXJuYXRpdmUgdG8gbG9jYXRpbmcgYW5kIGRvd25sb2FkaW5nIGEgdG9vbGNoYWluIGluc3RhbGxlciwKKyAgICAgICAgeW91IGNhbiBidWlsZCB0aGUgdG9vbGNoYWluIGluc3RhbGxlciBpZiB5b3UgaGF2ZSBhCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgQWx0aG91Z2ggbm90IHRoZSBwcmVmZXJyZWQgbWV0aG9kLCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UgbWV0YS10b29sY2hhaW48L2ZpbGVuYW1lPiB0byBidWlsZCB0aGUgdG9vbGNoYWluCisgICAgICAgICAgICBpbnN0YWxsZXIuCisgICAgICAgICAgICBJZiB5b3UgZG8gdXNlIHRoaXMgbWV0aG9kLCB5b3UgbXVzdCBzZXBhcmF0ZWx5IGluc3RhbGwgYW5kIGV4dHJhY3QKKyAgICAgICAgICAgIHRoZSB0YXJnZXQgc3lzcm9vdC4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaW5zdGFsbCB0aGUgc3lzcm9vdCwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2V4dHJhY3RpbmctdGhlLXJvb3QtZmlsZXN5c3RlbSc+RXh0cmFjdGluZyB0aGUgUm9vdCBGaWxlc3lzdGVtPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVG8gYnVpbGQgdGhlIHRvb2xjaGFpbiBpbnN0YWxsZXIgYW5kIHBvcHVsYXRlIHRoZSBTREsgaW1hZ2UsIHVzZSB0aGUKKyAgICAgICAgZm9sbG93aW5nIGNvbW1hbmQ6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIDxyZXBsYWNlYWJsZT5pbWFnZTwvcmVwbGFjZWFibGU+IC1jIHBvcHVsYXRlX3NkaworICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIFRoZSBjb21tYW5kIHJlc3VsdHMgaW4gYSB0b29sY2hhaW4gaW5zdGFsbGVyIHRoYXQgY29udGFpbnMgdGhlIHN5c3Jvb3QKKyAgICAgICAgdGhhdCBtYXRjaGVzIHlvdXIgdGFyZ2V0IHJvb3QgZmlsZXN5c3RlbS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQW5vdGhlciBwb3dlcmZ1bCBmZWF0dXJlIGlzIHRoYXQgdGhlIHRvb2xjaGFpbiBpcyBjb21wbGV0ZWx5CisgICAgICAgIHNlbGYtY29udGFpbmVkLgorICAgICAgICBUaGUgYmluYXJpZXMgYXJlIGxpbmtlZCBhZ2FpbnN0IHRoZWlyIG93biBjb3B5IG9mCisgICAgICAgIDxmaWxlbmFtZT5saWJjPC9maWxlbmFtZT4sIHdoaWNoIHJlc3VsdHMgaW4gbm8gZGVwZW5kZW5jaWVzCisgICAgICAgIG9uIHRoZSB0YXJnZXQgc3lzdGVtLgorICAgICAgICBUbyBhY2hpZXZlIHRoaXMsIHRoZSBwb2ludGVyIHRvIHRoZSBkeW5hbWljIGxvYWRlciBpcworICAgICAgICBjb25maWd1cmVkIGF0IGluc3RhbGwgdGltZSBzaW5jZSB0aGF0IHBhdGggY2Fubm90IGJlIGR5bmFtaWNhbGx5CisgICAgICAgIGFsdGVyZWQuCisgICAgICAgIFRoaXMgaXMgdGhlIHJlYXNvbiBmb3IgYSB3cmFwcGVyIGFyb3VuZCB0aGUKKyAgICAgICAgPGZpbGVuYW1lPnBvcHVsYXRlX3NkazwvZmlsZW5hbWU+IGFyY2hpdmUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEFub3RoZXIgZmVhdHVyZSBpcyB0aGF0IG9ubHkgb25lIHNldCBvZiBjcm9zcy1jYW5hZGlhbiB0b29sY2hhaW4KKyAgICAgICAgYmluYXJpZXMgYXJlIHByb2R1Y2VkIHBlciBhcmNoaXRlY3R1cmUuCisgICAgICAgIFRoaXMgZmVhdHVyZSB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCB0aGUgdGFyZ2V0IGhhcmR3YXJlIGNhbgorICAgICAgICBiZSBwYXNzZWQgdG8gPGZpbGVuYW1lPmdjYzwvZmlsZW5hbWU+IGFzIGEgc2V0IG9mIGNvbXBpbGVyIG9wdGlvbnMuCisgICAgICAgIFRob3NlIG9wdGlvbnMgYXJlIHNldCB1cCBieSB0aGUgZW52aXJvbm1lbnQgc2NyaXB0IGFuZCBjb250YWluZWQgaW4KKyAgICAgICAgdmFyaWFibGVzIHN1Y2ggYXMKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNDJz48ZmlsZW5hbWU+Q0M8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgIGFuZAorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTEQnPjxmaWxlbmFtZT5MRDwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgIFRoaXMgcmVkdWNlcyB0aGUgc3BhY2UgbmVlZGVkIGZvciB0aGUgdG9vbHMuCisgICAgICAgIFVuZGVyc3RhbmQsIGhvd2V2ZXIsIHRoYXQgYSBzeXNyb290IGlzIHN0aWxsIG5lZWRlZCBmb3IgZXZlcnkgdGFyZ2V0CisgICAgICAgIHNpbmNlIHRob3NlIGJpbmFyaWVzIGFyZSB0YXJnZXQtc3BlY2lmaWMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgICBSZW1lbWJlciwgYmVmb3JlIHVzaW5nIGFueSBCaXRCYWtlIGNvbW1hbmQsIHlvdQorICAgICAgICAgbXVzdCBzb3VyY2UgdGhlIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdAorICAgICAgICAgKGkuZS4KKyAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgb3IKKyAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdWxpbms+KQorICAgICAgICAgbG9jYXRlZCBpbiB0aGUgU291cmNlIERpcmVjdG9yeSBhbmQgeW91IG11c3QgbWFrZSBzdXJlIHlvdXIKKyAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiB2YXJpYWJsZXMgYXJlIGNvcnJlY3QuCisgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB5b3UgbmVlZCB0byBiZSBzdXJlIHRoZQorICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgdmFyaWFibGUgbWF0Y2hlcyB0aGUgYXJjaGl0ZWN0dXJlIGZvciB3aGljaCB5b3UgYXJlIGJ1aWxkaW5nIGFuZCB0aGF0CisgICAgICAgICB0aGUKKyAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TREtNQUNISU5FJz48ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgIHZhcmlhYmxlIGlzIGNvcnJlY3RseSBzZXQgaWYgeW91IGFyZSBidWlsZGluZyBhIHRvb2xjaGFpbiBkZXNpZ25lZCB0bworICAgICAgICAgcnVuIG9uIGFuIGFyY2hpdGVjdHVyZSB0aGF0IGRpZmZlcnMgZnJvbSB5b3VyIGN1cnJlbnQgZGV2ZWxvcG1lbnQgaG9zdAorICAgICAgICAgbWFjaGluZSAoaS5lLiB0aGUgYnVpbGQgbWFjaGluZSkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFdoZW4gdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCBjb21wbGV0ZXMsIHRoZSB0b29sY2hhaW4KKyAgICAgICAgaW5zdGFsbGVyIHdpbGwgYmUgaW4KKyAgICAgICAgPGZpbGVuYW1lPnRtcC9kZXBsb3kvc2RrPC9maWxlbmFtZT4gaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIHRvb2xjaGFpbiBkb2VzIG5vdCBidWlsZCBzdGF0aWMgYmluYXJpZXMuCisgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIHRvb2xjaGFpbiB0byBidWlsZCB0aGVzZSB0eXBlcyBvZiBsaWJyYXJpZXMsCisgICAgICAgICAgICB5b3UgbmVlZCB0byBiZSBzdXJlIHlvdXIgaW1hZ2UgaGFzIHRoZSBhcHByb3ByaWF0ZSBzdGF0aWMKKyAgICAgICAgICAgIGRldmVsb3BtZW50IGxpYnJhcmllcy4KKyAgICAgICAgICAgIFVzZSB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9JTlNUQUxMJz48ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIGluc2lkZSB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSB0bworICAgICAgICAgICAgaW5zdGFsbCB0aGUgYXBwcm9wcmlhdGUgbGlicmFyeSBwYWNrYWdlcy4KKyAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHVzaW5nIDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+IHN0YXRpYworICAgICAgICAgICAgZGV2ZWxvcG1lbnQgbGlicmFyaWVzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9JTlNUQUxMX2FwcGVuZCA9ICIgZ2xpYmMtc3RhdGljZGV2IgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nb3B0aW9uYWxseS11c2luZy1hbi1leHRlcm5hbC10b29sY2hhaW4nPgorICAgIDx0aXRsZT5PcHRpb25hbGx5IFVzaW5nIGFuIEV4dGVybmFsIFRvb2xjaGFpbjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IG1pZ2h0IHdhbnQgdG8gdXNlIGFuIGV4dGVybmFsIHRvb2xjaGFpbiBhcyBwYXJ0IG9mIHlvdXIKKyAgICAgICAgZGV2ZWxvcG1lbnQuCisgICAgICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZSBmdW5kYW1lbnRhbCBzdGVwcyB5b3UgbmVlZCB0byBhY2NvbXBsaXNoCisgICAgICAgIGFyZSBhcyBmb2xsb3dzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFVuZGVyc3RhbmQgd2hlcmUgdGhlIGluc3RhbGxlZCB0b29sY2hhaW4gcmVzaWRlcy4KKyAgICAgICAgICAgICAgICBGb3IgY2FzZXMgd2hlcmUgeW91IG5lZWQgdG8gYnVpbGQgdGhlIGV4dGVybmFsIHRvb2xjaGFpbiwgeW91CisgICAgICAgICAgICAgICAgd291bGQgbmVlZCB0byB0YWtlIHNlcGFyYXRlIHN0ZXBzIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIHRoZQorICAgICAgICAgICAgICAgIHRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBNYWtlIHN1cmUgeW91IGFkZCB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgdG9vbGNoYWluIHRvCisgICAgICAgICAgICAgICAgeW91ciA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJMQVlFUlMnPjxmaWxlbmFtZT5CQkxBWUVSUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBTZXQgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVEVSTkFMX1RPT0xDSEFJTic+PGZpbGVuYW1lPkVYVEVSTkFMX1RPT0xDSEFJTjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgIHRvIHRoZSBsb2NhdGlvbiBpbiB3aGljaCB5b3UgaW5zdGFsbGVkIHRoZSB0b29sY2hhaW4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICBBIGdvb2QgZXhhbXBsZSBvZiBhbiBleHRlcm5hbCB0b29sY2hhaW4gdXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgIGlzIDx0cmFkZW1hcmsgY2xhc3M9J3JlZ2lzdGVyZWQnPk1lbnRvciBHcmFwaGljczwvdHJhZGVtYXJrPgorICAgICAgICBTb3VyY2VyeSBHKysgVG9vbGNoYWluLgorICAgICAgICBZb3UgY2FuIHNlZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoYXQgcGFydGljdWxhciBsYXllciBpbiB0aGUKKyAgICAgICAgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+IGZpbGUgYXQKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdGh1Yi5jb20vTWVudG9yRW1iZWRkZWQvbWV0YS1zb3VyY2VyeS8nPjwvdWxpbms+LgorICAgICAgICBZb3UgY2FuIGZpbmQgZnVydGhlciBpbmZvcm1hdGlvbiBieSByZWFkaW5nIGFib3V0IHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVENNT0RFJz48ZmlsZW5hbWU+VENNT0RFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICB2YXJpYWJsZSBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsJ3MgdmFyaWFibGUgZ2xvc3NhcnkuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLXByZS1idWlsdCc+CisgICAgICAgIDx0aXRsZT5FeGFtcGxlIFVzaW5nIFByZS1CdWlsdCBCaW5hcmllcyBhbmQgUUVNVTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiBoYXJkd2FyZSwgbGlicmFyaWVzIGFuZCBzZXJ2aWNlcyBhcmUgc3RhYmxlLCB5b3UgY2FuIGdldCBzdGFydGVkIGJ5IHVzaW5nIGEgcHJlLWJ1aWx0IGJpbmFyeQorICAgICAgICAgICAgb2YgdGhlIGZpbGVzeXN0ZW0gaW1hZ2UsIGtlcm5lbCwgYW5kIHRvb2xjaGFpbiBhbmQgcnVuIGl0IHVzaW5nIHRoZSBRRU1VIGVtdWxhdG9yLgorICAgICAgICAgICAgVGhpcyBzY2VuYXJpbyBpcyB1c2VmdWwgZm9yIGRldmVsb3BpbmcgYXBwbGljYXRpb24gc29mdHdhcmUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICA8aW1hZ2VvYmplY3Q+CisgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvdXNpbmctYS1wcmUtYnVpbHQtaW1hZ2UucG5nIiBmb3JtYXQ9IlBORyIgYWxpZ249J2NlbnRlcicgc2NhbGVmaXQ9JzEnLz4KKyAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+CisgICAgICAgICAgICA8Y2FwdGlvbj4KKyAgICAgICAgICAgICAgICA8cGFyYT5Vc2luZyBhIFByZS1CdWlsdCBJbWFnZTwvcGFyYT4KKyAgICAgICAgICAgIDwvY2FwdGlvbj4KKyAgICAgICAgPC9tZWRpYW9iamVjdD4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciB0aGlzIHNjZW5hcmlvLCB5b3UgbmVlZCB0byBkbyBzZXZlcmFsIHRoaW5nczoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW5zdGFsbCB0aGUgYXBwcm9wcmlhdGUgc3RhbmQtYWxvbmUgdG9vbGNoYWluIHRhcmJhbGwuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RG93bmxvYWQgdGhlIHByZS1idWlsdCBpbWFnZSB0aGF0IHdpbGwgYm9vdCB3aXRoIFFFTVUuCisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gYmUgc3VyZSB0byBnZXQgdGhlIFFFTVUgaW1hZ2UgdGhhdCBtYXRjaGVzIHlvdXIgdGFyZ2V0IG1hY2hpbmXigJlzCisgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlIChlLmcuIHg4NiwgQVJNLCBldGMuKS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Eb3dubG9hZCB0aGUgZmlsZXN5c3RlbSBpbWFnZSBmb3IgeW91ciB0YXJnZXQgbWFjaGluZSdzIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZXQgdXAgdGhlIGVudmlyb25tZW50IHRvIGVtdWxhdGUgdGhlIGhhcmR3YXJlIGFuZCB0aGVuIHN0YXJ0IHRoZSBRRU1VIGVtdWxhdG9yLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKworICAgICAgICA8c2VjdGlvbiBpZD0naW5zdGFsbGluZy10aGUtdG9vbGNoYWluJz4KKyAgICAgICAgICAgIDx0aXRsZT5JbnN0YWxsaW5nIHRoZSBUb29sY2hhaW48L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGRvd25sb2FkIGEgdGFyYmFsbCBpbnN0YWxsZXIsIHdoaWNoIGluY2x1ZGVzIHRoZQorICAgICAgICAgICAgICAgIHByZS1idWlsdCB0b29sY2hhaW4sIHRoZSA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgc2NyaXB0LCBhbmQgc3VwcG9ydCBmaWxlcyBmcm9tIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3RvcnkgdW5kZXIKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fVE9PTENIQUlOX0RMX1VSTDsnPjwvdWxpbms+LgorICAgICAgICAgICAgICAgIFRvb2xjaGFpbnMgYXJlIGF2YWlsYWJsZSBmb3IgMzItYml0IGFuZCA2NC1iaXQgeDg2IGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgc3lzdGVtcyBmcm9tIHRoZSA8ZmlsZW5hbWU+aTY4NjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT54ODZfNjQ8L2ZpbGVuYW1lPiBkaXJlY3RvcmllcywgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgIFRoZSB0b29sY2hhaW5zIHRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIGFyZSBiYXNlZCBvZmYgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2Utc2F0bzwvZmlsZW5hbWU+IGltYWdlIGFuZCBjb250YWluCisgICAgICAgICAgICAgICAgbGlicmFyaWVzIGFwcHJvcHJpYXRlIGZvciBkZXZlbG9waW5nIGFnYWluc3QgdGhhdCBpbWFnZS4KKyAgICAgICAgICAgICAgICBFYWNoIHR5cGUgb2YgZGV2ZWxvcG1lbnQgc3lzdGVtIHN1cHBvcnRzIGZpdmUgb3IgbW9yZSB0YXJnZXQKKyAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmVzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgbmFtZXMgb2YgdGhlIHRhcmJhbGwgaW5zdGFsbGVyIHNjcmlwdHMgYXJlIHN1Y2ggdGhhdCBhCisgICAgICAgICAgICAgICAgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgaG9zdCBzeXN0ZW0gYXBwZWFycyBmaXJzdCBpbiB0aGUKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSBhbmQgdGhlbiBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIHN0cmluZworICAgICAgICAgICAgICAgIHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwb2t5LWdsaWJjLTxyZXBsYWNlYWJsZT5ob3N0X3N5c3RlbTwvcmVwbGFjZWFibGU+LTxyZXBsYWNlYWJsZT5pbWFnZV90eXBlPC9yZXBsYWNlYWJsZT4tPHJlcGxhY2VhYmxlPmFyY2g8L3JlcGxhY2VhYmxlPi10b29sY2hhaW4tPHJlcGxhY2VhYmxlPnJlbGVhc2VfdmVyc2lvbjwvcmVwbGFjZWFibGU+LnNoCisKKyAgICAgV2hlcmU6CisgICAgICAgICA8cmVwbGFjZWFibGU+aG9zdF9zeXN0ZW08L3JlcGxhY2VhYmxlPiBpcyBhIHN0cmluZyByZXByZXNlbnRpbmcgeW91ciBkZXZlbG9wbWVudCBzeXN0ZW06CisKKyAgICAgICAgICAgICAgICAgICAgaTY4NiBvciB4ODZfNjQuCisKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5pbWFnZV90eXBlPC9yZXBsYWNlYWJsZT4gaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBpbWFnZSB5b3Ugd2lzaCB0bworICAgICAgICAgICAgICAgIGRldmVsb3AgYSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBUb29sa2l0IChTREspIGZvciB1c2UgYWdhaW5zdC4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBidWlsZHMgdG9vbGNoYWluIGluc3RhbGxlcnMgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgZm9sbG93aW5nIEJpdEJha2UgY29tbWFuZDoKKworICAgICAgICAgICAgICAgICAgICBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0byAtYyBwb3B1bGF0ZV9zZGsKKworICAgICAgICAgPHJlcGxhY2VhYmxlPmFyY2g8L3JlcGxhY2VhYmxlPiBpcyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHR1bmVkIHRhcmdldCBhcmNoaXRlY3R1cmU6CisKKyAgICAgICAgICAgICAgICAgICAgaTU4NiwgeDg2XzY0LCBwb3dlcnBjLCBtaXBzLCBhcm12N2Egb3IgYXJtdjV0ZQorCisgICAgICAgICA8cmVwbGFjZWFibGU+cmVsZWFzZV92ZXJzaW9uPC9yZXBsYWNlYWJsZT4gaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSByZWxlYXNlIG51bWJlciBvZiB0aGUKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0OgorCisgICAgICAgICAgICAgICAgICAgICZESVNUUk87LCAmRElTVFJPOytzbmFwc2hvdAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyB0b29sY2hhaW4gaW5zdGFsbGVyIGlzIGZvciBhIDY0LWJpdAorICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IGhvc3Qgc3lzdGVtIGFuZCBhIGk1ODYtdHVuZWQgdGFyZ2V0IGFyY2hpdGVjdHVyZQorICAgICAgICAgICAgICAgIGJhc2VkIG9mZiB0aGUgU0RLIGZvciA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwb2t5LWdsaWJjLXg4Nl82NC1jb3JlLWltYWdlLXNhdG8taTU4Ni10b29sY2hhaW4tJkRJU1RSTzsuc2gKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvb2xjaGFpbnMgYXJlIHNlbGYtY29udGFpbmVkIGFuZCBieSBkZWZhdWx0IGFyZSBpbnN0YWxsZWQgaW50bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vb3B0L3Bva3k8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB3aGVuIHlvdSBydW4gdGhlIHRvb2xjaGFpbiBpbnN0YWxsZXIsIHlvdSBjYW4gY2hvb3NlIGFuCisgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kIHNob3dzIGhvdyB0byBydW4gdGhlIGluc3RhbGxlciBnaXZlbiBhIHRvb2xjaGFpbiB0YXJiYWxsCisgICAgICAgICAgICAgICAgZm9yIGEgNjQtYml0IHg4NiBkZXZlbG9wbWVudCBob3N0IHN5c3RlbSBhbmQgYSAzMi1iaXQgeDg2IHRhcmdldCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgWW91IG11c3QgY2hhbmdlIHRoZSBwZXJtaXNzaW9ucyBvbiB0aGUgdG9vbGNoYWluCisgICAgICAgICAgICAgICAgaW5zdGFsbGVyIHNjcmlwdCBzbyB0aGF0IGl0IGlzIGV4ZWN1dGFibGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBleGFtcGxlIGFzc3VtZXMgdGhlIHRvb2xjaGFpbiBpbnN0YWxsZXIgaXMgbG9jYXRlZCBpbiA8ZmlsZW5hbWU+fi9Eb3dubG9hZHMvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3QgaGF2ZSB3cml0ZSBwZXJtaXNzaW9ucyBmb3IgdGhlIGRpcmVjdG9yeSBpbnRvIHdoaWNoIHlvdSBhcmUgaW5zdGFsbGluZworICAgICAgICAgICAgICAgICAgICB0aGUgdG9vbGNoYWluLCB0aGUgdG9vbGNoYWluIGluc3RhbGxlciBub3RpZmllcyB5b3UgYW5kIGV4aXRzLgorICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHlvdSBoYXZlIHdyaXRlIHBlcm1pc3Npb25zIGluIHRoZSBkaXJlY3RvcnkgYW5kIHJ1biB0aGUgaW5zdGFsbGVyIGFnYWluLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIH4vRG93bmxvYWRzL3Bva3ktZ2xpYmMteDg2XzY0LWNvcmUtaW1hZ2Utc2F0by1pNTg2LXRvb2xjaGFpbi0mRElTVFJPOy5zaAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGluc3RhbGwgdGFyYmFsbHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjdXNpbmctYW4tZXhpc3RpbmctdG9vbGNoYWluLXRhcmJhbGwnPlVzaW5nIGEgQ3Jvc3MtVG9vbGNoYWluIFRhcmJhbGw8L3VsaW5rPiIgYW5kCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I3VzaW5nLXRoZS10b29sY2hhaW4tZnJvbS13aXRoaW4tdGhlLWJ1aWxkLXRyZWUnPlVzaW5nIEJpdEJha2UgYW5kIHRoZSBCdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiIgc2VjdGlvbnMgaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZG93bmxvYWRpbmctdGhlLXByZS1idWlsdC1saW51eC1rZXJuZWwnPgorICAgICAgICAgICAgPHRpdGxlPkRvd25sb2FkaW5nIHRoZSBQcmUtQnVpbHQgTGludXggS2VybmVsPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBkb3dubG9hZCB0aGUgcHJlLWJ1aWx0IExpbnV4IGtlcm5lbCBzdWl0YWJsZSBmb3IgcnVubmluZyBpbiB0aGUgUUVNVSBlbXVsYXRvciBmcm9tCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1FFTVVfRExfVVJMOyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgQmUgc3VyZSB0byB1c2UgdGhlIGtlcm5lbCB0aGF0IG1hdGNoZXMgdGhlIGFyY2hpdGVjdHVyZSB5b3Ugd2FudCB0byBzaW11bGF0ZS4KKyAgICAgICAgICAgICAgICBEb3dubG9hZCBhcmVhcyBleGlzdCBmb3IgdGhlIGZpdmUgc3VwcG9ydGVkIG1hY2hpbmUgYXJjaGl0ZWN0dXJlczoKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdWFybTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+cWVtdW1pcHM8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPnFlbXVwcGM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+LCBhbmQgPGZpbGVuYW1lPnFlbXV4ODYtNjQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTW9zdCBrZXJuZWwgZmlsZXMgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICp6SW1hZ2UtcWVtdTxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4uYmluCisgICAgIHZtbGludXgtcWVtdTxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4uYmluCisKKyAgICAgV2hlcmU6CisgICAgICAgICA8cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+IGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZToKKyAgICAgICAgICAgICAgICB4ODYsIHg4Ni02NCwgcHBjLCBtaXBzLCBvciBhcm0uCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgZG93bmxvYWRpbmcgYSBZb2N0byBQcm9qZWN0IGtlcm5lbCBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbG9jYWwta2VybmVsLWZpbGVzJz5Zb2N0byBQcm9qZWN0IEtlcm5lbDwvdWxpbms+IgorICAgICAgICAgICAgICAgIGJ1bGxldGVkIGl0ZW0gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2Rvd25sb2FkaW5nLXRoZS1maWxlc3lzdGVtJz4KKyAgICAgICAgICAgIDx0aXRsZT5Eb3dubG9hZGluZyB0aGUgRmlsZXN5c3RlbTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBkb3dubG9hZCB0aGUgZmlsZXN5c3RlbSBpbWFnZSBzdWl0YWJsZSBmb3IgeW91ciB0YXJnZXQgYXJjaGl0ZWN0dXJlIGZyb20KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fUUVNVV9ETF9VUkw7Jz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBBZ2FpbiwgYmUgc3VyZSB0byB1c2UgdGhlIGZpbGVzeXN0ZW0gdGhhdCBtYXRjaGVzIHRoZSBhcmNoaXRlY3R1cmUgeW91IHdhbnQKKyAgICAgICAgICAgICAgICB0byBzaW11bGF0ZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZpbGVzeXN0ZW0gaW1hZ2UgaGFzIHR3byB0YXJiYWxsIGZvcm1zOiA8ZmlsZW5hbWU+ZXh0MzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50YXI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBZb3UgbXVzdCB1c2UgdGhlIDxmaWxlbmFtZT5leHQzPC9maWxlbmFtZT4gZm9ybSB3aGVuIGJvb3RpbmcgYW4gaW1hZ2UgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgUUVNVSBlbXVsYXRvci4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnRhcjwvZmlsZW5hbWU+IGZvcm0gY2FuIGJlIGZsYXR0ZW5lZCBvdXQgaW4geW91ciBob3N0IGRldmVsb3BtZW50IHN5c3RlbQorICAgICAgICAgICAgICAgIGFuZCB1c2VkIGZvciBidWlsZCBwdXJwb3NlcyB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgY29yZS1pbWFnZS08cmVwbGFjZWFibGU+cHJvZmlsZTwvcmVwbGFjZWFibGU+LXFlbXU8cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+LmV4dDMKKyAgICAgY29yZS1pbWFnZS08cmVwbGFjZWFibGU+cHJvZmlsZTwvcmVwbGFjZWFibGU+LXFlbXU8cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+LnRhci5iejIKKworICAgICBXaGVyZToKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5wcm9maWxlPC9yZXBsYWNlYWJsZT4gaXMgdGhlIGZpbGVzeXN0ZW0gaW1hZ2UncyBwcm9maWxlOgorICAgICAgICAgICAgICAgICAgIGxzYiwgbHNiLWRldiwgbHNiLXNkaywgbHNiLXF0MywgbWluaW1hbCwgbWluaW1hbC1kZXYsIHNhdG8sCisgICAgICAgICAgICAgICAgICAgc2F0by1kZXYsIG9yIHNhdG8tc2RrLiBGb3IgaW5mb3JtYXRpb24gb24gdGhlc2UgdHlwZXMgb2YgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICBwcm9maWxlcywgc2VlIHRoZSAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWltYWdlcyc+SW1hZ2VzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgY2hhcHRlciBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorCisgICAgICAgICA8cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+IGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZToKKyAgICAgICAgICAgICAgICB4ODYsIHg4Ni02NCwgcHBjLCBtaXBzLCBvciBhcm0uCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NldHRpbmctdXAtdGhlLWVudmlyb25tZW50LWFuZC1zdGFydGluZy10aGUtcWVtdS1lbXVsYXRvcic+CisgICAgICAgICAgICA8dGl0bGU+U2V0dGluZyBVcCB0aGUgRW52aXJvbm1lbnQgYW5kIFN0YXJ0aW5nIHRoZSBRRU1VIEVtdWxhdG9yPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQmVmb3JlIHlvdSBzdGFydCB0aGUgUUVNVSBlbXVsYXRvciwgeW91IG5lZWQgdG8gc2V0IHVwIHRoZSBlbXVsYXRpb24gZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kIGZvcm0gc2V0cyB1cCB0aGUgZW11bGF0aW9uIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzb3VyY2UgJllPQ1RPX0FEVFBBVEhfRElSOy9lbnZpcm9ubWVudC1zZXR1cC08cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+LXBva3ktbGludXgtPHJlcGxhY2VhYmxlPmlmPC9yZXBsYWNlYWJsZT4KKworICAgICBXaGVyZToKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4gaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlOgorICAgICAgICAgICAgICAgIGk1ODYsIHg4Nl82NCwgcHBjNjAzZSwgbWlwcywgb3IgYXJtdjV0ZS4KKworICAgICAgICAgPHJlcGxhY2VhYmxlPmlmPC9yZXBsYWNlYWJsZT4gaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGFuIGVtYmVkZGVkIGFwcGxpY2F0aW9uIGJpbmFyeSBpbnRlcmZhY2UuCisgICAgICAgICAgICAgIE5vdCBhbGwgc2V0dXAgc2NyaXB0cyBpbmNsdWRlIHRoaXMgc3RyaW5nLgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRmluYWxseSwgdGhpcyBjb21tYW5kIGZvcm0gaW52b2tlcyB0aGUgUUVNVSBlbXVsYXRvcgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBydW5xZW11IDxyZXBsYWNlYWJsZT5xZW11YXJjaDwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5rZXJuZWwtaW1hZ2U8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+ZmlsZXN5c3RlbS1pbWFnZTwvcmVwbGFjZWFibGU+CisKKyAgICAgV2hlcmU6CisgICAgICAgICA8cmVwbGFjZWFibGU+cWVtdWFyY2g8L3JlcGxhY2VhYmxlPiBpcyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmU6IHFlbXV4ODYsIHFlbXV4ODYtNjQsCisgICAgICAgICAgICAgICAgICAgIHFlbXVwcGMsIHFlbXVtaXBzLCBvciBxZW11YXJtLgorCisgICAgICAgICA8cmVwbGFjZWFibGU+a2VybmVsLWltYWdlPC9yZXBsYWNlYWJsZT4gaXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBrZXJuZWwgaW1hZ2UuCisKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5maWxlc3lzdGVtLWltYWdlPC9yZXBsYWNlYWJsZT4gaXMgdGhlIC5leHQzIGZpbGVzeXN0ZW0gaW1hZ2UuCisKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIENvbnRpbnVpbmcgd2l0aCB0aGUgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyB0d28gY29tbWFuZHMgc2V0dXAgdGhlIGVtdWxhdGlvbgorICAgICAgICAgICAgICAgIGVudmlyb25tZW50IGFuZCBsYXVuY2ggUUVNVS4KKyAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgYXNzdW1lcyB0aGUgcm9vdCBmaWxlc3lzdGVtICg8ZmlsZW5hbWU+LmV4dDM8L2ZpbGVuYW1lPiBmaWxlKSBhbmQKKyAgICAgICAgICAgICAgICB0aGUgcHJlLWJ1aWx0IGtlcm5lbCBpbWFnZSBmaWxlIGJvdGggcmVzaWRlIGluIHlvdXIgaG9tZSBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgVGhlIGtlcm5lbCBhbmQgZmlsZXN5c3RlbSBhcmUgZm9yIGEgMzItYml0IHRhcmdldCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkICRIT01FCisgICAgICQgc291cmNlICZZT0NUT19BRFRQQVRIX0RJUjsvZW52aXJvbm1lbnQtc2V0dXAtaTU4Ni1wb2t5LWxpbnV4CisgICAgICQgcnVucWVtdSBxZW11eDg2IGJ6SW1hZ2UtcWVtdXg4Ni5iaW4gXAorICAgICBjb3JlLWltYWdlLXNhdG8tcWVtdXg4Ni5leHQzCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggUUVNVSBsYXVuY2hlcyB2YXJpZXMgZGVwZW5kaW5nIG9uIHRoZSBmaWxlc3lzdGVtIGltYWdlIGFuZCBvbiB0aGUKKyAgICAgICAgICAgICAgICB0YXJnZXQgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3Ugc291cmNlIHRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIEFSTSB0YXJnZXQKKyAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUgYW5kIHRoZW4gYm9vdCB0aGUgbWluaW1hbCBRRU1VIGltYWdlLCB0aGUgZW11bGF0b3IgY29tZXMgdXAgaW4gYSBuZXcKKyAgICAgICAgICAgICAgICBzaGVsbCBpbiBjb21tYW5kLWxpbmUgbW9kZS4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgYm9vdCB0aGUgU0RLIGltYWdlLCBRRU1VIGNvbWVzIHVwIHdpdGggYSBHVUkuCisgICAgICAgICAgICAgICAgPG5vdGU+Qm9vdGluZyB0aGUgUFBDIGltYWdlIHJlc3VsdHMgaW4gUUVNVSBsYXVuY2hpbmcgaW4gdGhlIHNhbWUgc2hlbGwgaW4KKyAgICAgICAgICAgICAgICBjb21tYW5kLWxpbmUgbW9kZS48L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtc3R5bGUuY3NzIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LXN0eWxlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzIyYWQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LXN0eWxlLmNzcwpAQCAtMCwwICsxLDk4NCBAQAorLyoKKyAgIEdlbmVyaWMgWEhUTUwgLyBEb2NCb29rIFhIVE1MIENTUyBTdHlsZXNoZWV0LgorCisgICBCcm93c2VyIHdyYW5nbGluZyBhbmQgdHlwb2dyYXBoaWMgZGVzaWduIGJ5CisgICAgICBPeXZpbmQgS29sYXMgLyBwaXBwaW5AZ2ltcC5vcmcKKworICAgQ3VzdG9taXNlZCBmb3IgUG9reSBieQorICAgICAgTWF0dGhldyBBbGx1bSAvIG1hbGx1bUBvLWhhbmQuY29tCisKKyAgIFRoYW5rcyB0bzoKKyAgICAgTGlhbSBSLiBFLiBRdWluCisgICAgIFdpbGxpYW0gU2thZ2dzCisgICAgIEpha3ViIFN0ZWluZXIKKworICAgU3RydWN0dXJlCisgICAtLS0tLS0tLS0KKworICAgVGhlIHN0eWxlc2hlZXQgaXMgZGl2aWRlZCBpbnRvIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnM6CisKKyAgICAgICBQb3NpdGlvbmluZworICAgICAgICAgIE1hcmdpbnMsIHBhZGRpbmdzLCB3aWR0aCwgZm9udC1zaXplLCBjbGVhcmluZy4KKyAgICAgICBEZWNvcmF0aW9ucworICAgICAgICAgIEJvcmRlcnMsIHN0eWxlCisgICAgICAgQ29sb3JzCisgICAgICAgICAgQ29sb3JzCisgICAgICAgR3JhcGhpY3MKKyAgICAgICAgICBHcmFwaGljYWwgYmFja2dyb3VuZHMKKyAgICAgICBOYXN0eSBJRSB0d2Vha3MKKyAgICAgICAgICBXb3JrYXJvdW5kcyBuZWVkZWQgdG8gbWFrZSBpdCB3b3JrIGluIGludGVybmV0IGV4cGxvcmVyLAorICAgICAgICAgIGN1cnJlbnRseSBtYWtlcyB0aGUgc3R5bGVzaGVldCBub24gdmFsaWRhdGluZywgYnV0IHVwIHVudGlsCisgICAgICAgICAgdGhpcyBwb2ludCBpdCBpcyB2YWxpZGF0aW5nLgorICAgICAgIE1vemlsbGEgZXh0ZW5zaW9ucworICAgICAgICAgIFRyYW5zcGFyZW5jeSBmb3IgZm9vdGVyCisJICBSb3VuZGVkIGNvcm5lcnMgb24gYm94ZXMKKworKi8KKworCisgIC8qKioqKioqKioqKioqKiogLworIC8gIFBvc2l0aW9uaW5nICAgLworLyAqKioqKioqKioqKioqKiovCisKK2JvZHkgeworICBmb250LWZhbWlseTogVmVyZGFuYSwgU2Fucywgc2Fucy1zZXJpZjsKKworICBtaW4td2lkdGg6IDY0MHB4OworICB3aWR0aDogODAlOworICBtYXJnaW46ICAwZW0gYXV0bzsKKyAgcGFkZGluZzogMmVtIDVlbSA1ZW0gNWVtOworICBjb2xvcjogIzMzMzsKK30KKworaDEsaDIsaDMsaDQsaDUsaDYsaDcgeworICBmb250LWZhbWlseTogQXJpYWwsIFNhbnM7CisgIGNvbG9yOiAjMDA1NTdEOworICBjbGVhcjogYm90aDsKK30KKworaDEgeworICBmb250LXNpemU6IDJlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDJlbSAwZW0gMGVtIDBlbTsKK30KKworaDIuc3VidGl0bGUgeworICBtYXJnaW46IDAuMTBlbSAwZW0gMy4wZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS44ZW07CisgIHBhZGRpbmctbGVmdDogMjAlOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK2gyIHsKKyAgbWFyZ2luOiAyZW0gMGVtIDAuNjZlbSAwZW07CisgIHBhZGRpbmc6IDAuNWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuNWVtOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDMuc3VidGl0bGUgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0Mi4xNCU7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitoMyB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDQgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTIwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g1IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNiB7CisgIG1hcmdpbjogMWVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy5hdXRob3Jncm91cCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBwYWRkaW5nLXRvcDogMjU2cHg7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy9hZHQtdGl0bGUucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgdG9wOworICBtYXJnaW4tdG9wOiAtMjU2cHg7CisgIHBhZGRpbmctcmlnaHQ6IDUwcHg7CisgIG1hcmdpbi1sZWZ0OiAwcHg7CisgIHRleHQtYWxpZ246IHJpZ2h0OworICB3aWR0aDogNzQwcHg7Cit9CisKK2gzLmF1dGhvciB7CisgIG1hcmdpbjogMGVtIDBtZSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc2l6ZTogMTAwJTsKKyAgY29sb3I6ICMzMzM7CisgIGNsZWFyOiBib3RoOworfQorCisuYXV0aG9yIHR0LmVtYWlsIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKKy50aXRsZXBhZ2UgaHIgeworICB3aWR0aDogMGVtOworICBjbGVhcjogYm90aDsKK30KKworLnJldmhpc3RvcnkgeworICBwYWRkaW5nLXRvcDogMmVtOworICBjbGVhcjogYm90aDsKK30KKworLnRvYywKKy5saXN0LW9mLXRhYmxlcywKKy5saXN0LW9mLWV4YW1wbGVzLAorLmxpc3Qtb2YtZmlndXJlcyB7CisgIHBhZGRpbmc6IDEuMzNlbSAwZW0gMi41ZW0gMGVtOworICBjb2xvcjogIzAwNTU3RDsKK30KKworLnRvYyBwLAorLmxpc3Qtb2YtdGFibGVzIHAsCisubGlzdC1vZi1maWd1cmVzIHAsCisubGlzdC1vZi1leGFtcGxlcyBwIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDAuM2VtOworICBtYXJnaW46IDEuNWVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIHAgYiwKKy5saXN0LW9mLXRhYmxlcyBwIGIsCisubGlzdC1vZi1maWd1cmVzIHAgYiwKKy5saXN0LW9mLWV4YW1wbGVzIHAgYnsKKyAgZm9udC1zaXplOiAxMDAuMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisudG9jIGRsLAorLmxpc3Qtb2YtdGFibGVzIGRsLAorLmxpc3Qtb2YtZmlndXJlcyBkbCwKKy5saXN0LW9mLWV4YW1wbGVzIGRsIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGR0IHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkZCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMi42ZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworZGl2Lmdsb3NzYXJ5IGRsLAorZGl2LnZhcmlhYmxlbGlzdCBkbCB7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHdpZHRoOiAyMGVtOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworLnZhcmlhYmxlbGlzdCBkbCBkdCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworfQorCisuZ2xvc3NhcnkgZGwgZGQsCisudmFyaWFibGVsaXN0IGRsIGRkIHsKKyAgbWFyZ2luLXRvcDogLTFlbTsKKyAgbWFyZ2luLWxlZnQ6IDI1LjVlbTsKK30KKworLmdsb3NzYXJ5IGRkIHAsCisudmFyaWFibGVsaXN0IGRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCitkaXYgcC5jb3B5cmlnaHQgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCitkaXYubGVnYWxub3RpY2UgcC5sZWdhbG5vdGljZS10aXRsZSB7CisgIG1hcmdpbi1ib3R0b206IDBlbTsKK30KKworcCB7CisgIGxpbmUtaGVpZ2h0OiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworCit9CisKK2RsIHsKKyAgcGFkZGluZy10b3A6IDBlbTsKK30KKworaHIgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworCisubWVkaWFvYmplY3QsCisubWVkaWFvYmplY3RjbyB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworaW1nIHsKKyAgYm9yZGVyOiBub25lOworfQorCit1bCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDEuNWVtOworfQorCit1bCBsaSB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKwordWwgbGkgcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK3RhYmxlIHsKKyAgd2lkdGggOjEwMCU7Cit9CisKK3RoIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBmb250LXdlaWdodDogbm9ybWFsOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCit0ZCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKworcCBhW2lkXSB7CisgIG1hcmdpbjogMHB4OworICBwYWRkaW5nOiAwcHg7CisgIGRpc3BsYXk6IGlubGluZTsKKyAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKK30KKworYSB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBjb2xvcjogIzQ0NDsKK30KKworcHJlIHsKKyAgICBvdmVyZmxvdzogYXV0bzsKK30KKworYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICAvKmZvbnQtd2VpZ2h0OiBib2xkOyovCit9CisKKy8qIFRoaXMgc3R5bGUgZGVmaW5lcyBob3cgdGhlIHBlcm1hbGluayBjaGFyYWN0ZXIKKyAgIGFwcGVhcnMgYnkgaXRzZWxmIGFuZCB3aGVuIGhvdmVyZWQgb3ZlciB3aXRoCisgICB0aGUgbW91c2UuICovCisKK1thbHQ9J1Blcm1hbGluayddIHsgY29sb3I6ICNlZWU7IH0KK1thbHQ9J1Blcm1hbGluayddOmhvdmVyIHsgY29sb3I6IGJsYWNrOyB9CisKKworZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlIHsKKyAgbWFyZ2luOiAxZW0gMGVtOworICBwYWRkaW5nOiAxZW07CisgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsKK30KKworCitkaXYuaW5mb3JtYWxmaWd1cmUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWx0YWJsZSBwLnRpdGxlIGIsCitkaXYuZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5leGFtcGxlIHAudGl0bGUgYiwKK2Rpdi50YWJsZSBwLnRpdGxlIGJ7CisgICAgcGFkZGluZy10b3A6IDBlbTsKKyAgICBtYXJnaW4tdG9wOiAwZW07CisgICAgZm9udC1zaXplOiAxMDAlOworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9CisKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiwKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiBwICB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmctdG9wOiAwLjVlbTsKKyAgcGFkZGluZy1ib3R0b206IDAuNWVtOworfQorCisuZXBpZ3JhcGggeworICBwYWRkaW5nLWxlZnQ6IDU1JTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisuZXBpZ3JhcGggcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5lcGlncmFwaCAucXVvdGUgeworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisuZXBpZ3JhcGggLmF0dHJpYnV0aW9uIHsKKyAgZm9udC1zdHlsZTogbm9ybWFsOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworc3Bhbi5hcHBsaWNhdGlvbiB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLnByb2dyYW1saXN0aW5nIHsKKyAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgZm9udC1zaXplOiA4MCU7CisgIHdoaXRlLXNwYWNlOiBwcmU7CisgIG1hcmdpbjogMS4zM2VtIDBlbTsKKyAgcGFkZGluZzogMS4zM2VtOworfQorCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgbWFyZ2luLXRvcDogMWVtOworICBtYXJnaW4tYm90dG9tOiAxZW07CisKK30KKworLyogZm9yY2UgZnVsbCB3aWR0aCBvZiB0YWJsZSB3aXRoaW4gZGl2ICovCisudGlwIHRhYmxlLAorLndhcm5pbmcgdGFibGUsCisuY2F1dGlvbiB0YWJsZSwKKy5ub3RlIHRhYmxlIHsKKyAgYm9yZGVyOiBub25lOworICB3aWR0aDogMTAwJTsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgcGFkZGluZzogMC44ZW0gMC4wZW0gMC4wZW0gMC4wZW07CisgIG1hcmdpbiA6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRpcCBwLAorLndhcm5pbmcgcCwKKy5jYXV0aW9uIHAsCisubm90ZSBwIHsKKyAgbWFyZ2luLXRvcDogMC41ZW07CisgIG1hcmdpbi1ib3R0b206IDAuNWVtOworICBwYWRkaW5nLXJpZ2h0OiAxZW07CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5hY3JvbnltIHsKKyAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgcGFkZGluZzogMC4wOWVtIDAuM2VtOworICBtYXJnaW46IDBlbTsKK30KKworLml0ZW1pemVkbGlzdCBsaSB7CisgIGNsZWFyOiBub25lOworfQorCisuZmlsZW5hbWUgeworICBmb250LXNpemU6IG1lZGl1bTsKKyAgZm9udC1mYW1pbHk6IENvdXJpZXIsIG1vbm9zcGFjZTsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgcG9zaXRpb246IGFic29sdXRlOworICBsZWZ0OiAwZW07CisgIHRvcDogMGVtOworICB3aWR0aDogMTAwJTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2NkZjsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBwb3NpdGlvbjogZml4ZWQ7CisgIGxlZnQ6IDBlbTsKKyAgYm90dG9tOiAwZW07CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIHdpZHRoOiAxMDAlOworfQorCisKK2Rpdi5uYXZoZWFkZXIgdGQsCitkaXYubmF2Zm9vdGVyIHRkIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGggeworICAvKmZvbnQtZmFtaWx5OiBHZW9yZ2lhLCBUaW1lcywgc2VyaWY7Ki8KKyAgLypmb250LXNpemU6IHgtbGFyZ2U7Ki8KKyAgZm9udC1zaXplOiA4MCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLXRvcDogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItYm90dG9tOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGEsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGEgeworICBjb2xvcjogIzc3NzsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCisvKiBub3JtYWwgdGV4dCBpbiB0aGUgZm9vdGVyICovCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIHsKKyAgY29sb3I6IGJsYWNrOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6dmlzaXRlZCwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTp2aXNpdGVkIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKKworLyogbGlua3MgaW4gaGVhZGVyIGFuZCBmb290ZXIgKi8KK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTpob3ZlciwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgY29sb3I6ICMzM2E7Cit9CisKK2Rpdi5uYXZoZWFkZXIgaHIsCitkaXYubmF2Zm9vdGVyIGhyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCisucWFuZGFzZXQgdHIucXVlc3Rpb24gdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy5xYW5kYXNldCB0ci5hbnN3ZXIgdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisuYW5zd2VyIHRkIHsKKyAgcGFkZGluZy1ib3R0b206IDEuNWVtOworfQorCisuZW1waGFzaXMgeworICBmb250LXdlaWdodDogYm9sZDsKK30KKworCisgIC8qKioqKioqKioqKioqIC8KKyAvIGRlY29yYXRpb25zICAvCisvICoqKioqKioqKioqKiovCisKKy50aXRsZXBhZ2UgeworfQorCisucGFydCAudGl0bGUgeworfQorCisuc3VidGl0bGUgeworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyoKK2gxIHsKKyAgYm9yZGVyOiBub25lOworfQorCitoMiB7CisgIGJvcmRlci10b3A6IHNvbGlkIDAuMmVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2gzIHsKKyAgYm9yZGVyLXRvcDogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g0IHsKKyAgYm9yZGVyOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDUgeworICBib3JkZXI6IDBlbTsKK30KKyovCisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworLnF1ZXN0aW9uIHRkIHsKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOworfQorCisuYW5zd2VyIHsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBib3JkZXItdG9wOiAxcHggc29saWQ7Cit9CisKKyAgLyoqKioqKioqKiAvCisgLyAgY29sb3JzICAvCisvICoqKioqKioqKi8KKworYm9keSB7CisgIGNvbG9yOiAjMzMzOworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKworYSB7CisgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OworfQorCithOmhvdmVyIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2RlZGVkZTsKK30KKworCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoNywKK2g4IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Cit9CisKK2hyIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCisKKy50aXAsIC53YXJuaW5nLCAuY2F1dGlvbiwgLm5vdGUgeworICBib3JkZXItY29sb3I6ICNmZmY7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7Cit9CisKKworLndhcm5pbmcgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy50aXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisubm90ZSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGNvbG9yOiAjMDQ0OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKK3ByZS5wcm9ncmFtbGlzdGluZyB7CisgIGNvbG9yOiBibGFjazsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworICBib3JkZXItd2lkdGg6IDJweDsKK30KKworLmd1aW1lbnUsCisuZ3VpbGFiZWwsCisuZ3VpbWVudWl0ZW0geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIGJvcmRlci1jb2xvcjogIzk5OTsKK30KKworCitkaXYubmF2aGVhZGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCitkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCisgIC8qKioqKioqKioqKiAvCisgLyAgZ3JhcGhpY3MgIC8KKy8gKioqKioqKioqKiovCisKKy8qCitib2R5IHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvYm9keV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLm5hdmhlYWRlciwKKy5ub3RlLAorLnRpcCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL25vdGVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy53YXJuaW5nLAorLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy93YXJuaW5nX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisuZmlndXJlLAorLmluZm9ybWFsZmlndXJlLAorLmV4YW1wbGUsCisuaW5mb3JtYWxleGFtcGxlLAorLnRhYmxlLAorLmluZm9ybWFsdGFibGUgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9maWd1cmVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKyovCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoN3sKK30KKworLyoKK0V4YW1wbGUgb2YgaG93IHRvIHN0aWNrIGFuIGltYWdlIGFzIHBhcnQgb2YgdGhlIHRpdGxlLgorCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvd2hpdGUtb24tYmxhY2sucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworfQorKi8KKworZGl2LnByZWZhY2UgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuY29sb3Bob24gLnRpdGxlLAorZGl2LmNoYXB0ZXIgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworfQorCitkaXYuc2VjdGlvbiBkaXYuc2VjdGlvbiAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5zZWN0MiAudGl0bGVwYWdlIC50aXRsZSB7CisgICAgYmFja2dyb3VuZDogbm9uZTsKK30KKworCitoMS50aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBoZWlnaHQ6IDI1NnB4OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworfQorCitoMi5zdWJ0aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworICB3aWR0aDogMHB4OworICBkaXNwbGF5OiBub25lOworfQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gIHBpcHBpbi5naW1wLm9yZyBzcGVjaWZpYyBhbHRlcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIGNvbG9yOiAjNzc3OworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZzogMDsKKyAgbWFyZ2luOiAwOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMHB4OworICBsZWZ0OiAwcHg7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDUwcHg7CisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9oZWFkaW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7CisgIGJvcmRlcjogbm9uZTsKK30KKworZGl2LmhlYWRpbmcgYSB7CisgIGNvbG9yOiAjNDQ0OworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlcjogbm9uZTsKKyAgY29sb3I6ICNkZGQ7CisgIGZvbnQtc2l6ZTogODAlOworICB0ZXh0LWFsaWduOnJpZ2h0OworCisgIHdpZHRoOiAxMDAlOworICBwYWRkaW5nLXRvcDogMTBweDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBib3R0b206IDBweDsKKyAgbGVmdDogMHB4OworCisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9mb290aW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworfQorKi8KKworCisKKyAgLyoqKioqKioqKioqKioqKioqKiAvCisgLyAgbmFzdHkgaWUgdHdlYWtzICAvCisvICoqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7CisgIG1hcmdpbi1sZWZ0OmV4cHJlc3Npb24oIi01ZW0iKTsKK30KK2JvZHkgeworICBwYWRkaW5nOmV4cHJlc3Npb24oIjRlbSA1ZW0gMGVtIDVlbSIpOworfQorKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyBtb3ppbGxhIHZlbmRvciBzcGVjaWZpYyBjc3MgZXh0ZW5zaW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICAtbW96LW9wYWNpdHk6IDAuOGVtOworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUsCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjVlbTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjNlbTsKK30KKyovCisKK3RhYmxlIHRyIHRkIHRhYmxlIHRyIHRkIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCitociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKK3RhYmxlIHsKKyAgYm9yZGVyOiAwZW07Cit9CisKKyAucGhvdG8geworICBmbG9hdDogcmlnaHQ7CisgIG1hcmdpbi1sZWZ0OiAgIDEuNWVtOworICBtYXJnaW4tYm90dG9tOiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXgtd2lkdGg6ICAgICAgMTdlbTsKKyAgYm9yZGVyOiAgICAgMXB4IHNvbGlkIGdyYXk7CisgIHBhZGRpbmc6ICAgIDNweDsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisgLnNlcGVyYXRvciB7CisgICBwYWRkaW5nLXRvcDogMmVtOworICAgY2xlYXI6IGJvdGg7CisgIH0KKworICAjdmFsaWRhdG9ycyB7CisgICAgICBtYXJnaW4tdG9wOiA1ZW07CisgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgIGNvbG9yOiAjNzc3OworICB9CisgIEBtZWRpYSBwcmludCB7CisgICAgICBib2R5IHsKKyAgICAgICAgICBmb250LXNpemU6IDhwdDsKKyAgICAgIH0KKyAgICAgIC5ub3ByaW50IHsKKyAgICAgICAgICBkaXNwbGF5OiBub25lOworICAgICAgfQorICB9CisKKworLnRpcCwKKy5ub3RlIHsKKyAgIGJhY2tncm91bmQ6ICNmMGYwZjI7CisgICBjb2xvcjogIzMzMzsKKyAgIHBhZGRpbmc6IDIwcHg7CisgICBtYXJnaW46IDIwcHg7Cit9CisKKy50aXAgaDMsCisubm90ZSBoMyB7CisgICBwYWRkaW5nOiAwZW07CisgICBtYXJnaW46IDBlbTsKKyAgIGZvbnQtc2l6ZTogMmVtOworICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICBjb2xvcjogIzMzMzsKK30KKworLnRpcCBhLAorLm5vdGUgYSB7CisgICBjb2xvcjogIzMzMzsKKyAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisuZm9vdG5vdGUgeworICAgZm9udC1zaXplOiBzbWFsbDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisvKiBDaGFuZ2VzIHRoZSBhbm5vdW5jZW1lbnQgdGV4dCAqLworLnRpcCBoMywKKy53YXJuaW5nIGgzLAorLmNhdXRpb24gaDMsCisubm90ZSBoMyB7CisgICBmb250LXNpemU6bGFyZ2U7CisgICBjb2xvcjogIzAwNTU3RDsKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2ZpZ3VyZXMvYWR0LXRpdGxlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2ZpZ3VyZXMvYWR0LXRpdGxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTcxZTQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvZmlndXJlcy9hZHQtdGl0bGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2ZpZ3VyZXMvdXNpbmctYS1wcmUtYnVpbHQtaW1hZ2UucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvZmlndXJlcy91c2luZy1hLXByZS1idWlsdC1pbWFnZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAzMTMwZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2ZpZ3VyZXMvdXNpbmctYS1wcmUtYnVpbHQtaW1hZ2UucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9ic3AtZ3VpZGUvYnNwLWd1aWRlLWN1c3RvbWl6YXRpb24ueHNsIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3AtZ3VpZGUtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU2NzRhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9ic3AtZ3VpZGUvYnNwLWd1aWRlLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsMjcgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIgdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL2RvY2Jvb2stbWlycm9yL2RvY2Jvb2steHNsLTEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworPCEtLQorCisgIDx4c2w6aW1wb3J0IGhyZWY9Ii4uL3RlbXBsYXRlLzEuNzYuMS9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL3Blcm1hbGlua3MueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9zZWN0aW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvY29tcG9uZW50LnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZGl2aXNpb24udGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9mb3JtYWwub2JqZWN0LmhlYWRpbmcueHNsIi8+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJodG1sLnN0eWxlc2hlZXQiIHNlbGVjdD0iJ2JzcC1zdHlsZS5jc3MnIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNoYXB0ZXIuYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYXBwZW5kaXguYXV0b2xhYmVsIiBzZWxlY3Q9IkEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmxhYmVsLmluY2x1ZGVzLmNvbXBvbmVudC5sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmlkLmF0dHJpYnV0ZXMiIHNlbGVjdD0iMSIgLz4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9ic3AtZ3VpZGUvYnNwLWd1aWRlLWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC1ndWlkZS1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MzQ2ZWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC1ndWlkZS1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0CisJeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisJeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIKKwl2ZXJzaW9uPSIxLjAiPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3IvZG9jYm9vay1taXJyb3IvZG9jYm9vay14c2wtMS43Ni4xL2VjbGlwc2UvZWNsaXBzZTMueHNsIiAvPgorCis8IS0tCisKKyAgPHhzbDppbXBvcnQgaHJlZj0iLi4vdGVtcGxhdGUvMS43Ni4xL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworICA8eHNsOmltcG9ydAorCSAgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVua2VyLm91dHB1dC5pbmRlbnQiIHNlbGVjdD0iJ3llcyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5xdWlldGx5IiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5maXJzdC5zZWN0aW9ucyIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsuc2VjdGlvbi5kZXB0aCIgc2VsZWN0PSIxMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InVzZS5pZC5hcy5maWxlbmFtZSIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0idWxpbmsudGFyZ2V0IiBzZWxlY3Q9Iidfc2VsZiciIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYmFzZS5kaXIiIHNlbGVjdD0iJ2h0bWwvYnNwLWd1aWRlLyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJodG1sLnN0eWxlc2hlZXQiIHNlbGVjdD0iJy4uL2Jvb2suY3NzJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImVjbGlwc2UubWFuaWZlc3QiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNyZWF0ZS5wbHVnaW4ueG1sIiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzdXBwcmVzcy5uYXZpZ2F0aW9uIiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS5pbmRleCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2hhcHRlci5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJhcHBlbmRpeC5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24ubGFiZWwuaW5jbHVkZXMuY29tcG9uZW50LmxhYmVsIiBzZWxlY3Q9IjEiIC8+Cis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3AtZ3VpZGUueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3AtZ3VpZGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NzdjYTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC1ndWlkZS54bWwKQEAgLTAsMCArMSwxMzggQEAKKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxib29rIGlkPSdic3AtZ3VpZGUnIGxhbmc9J2VuJworICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiCisgICAgICB4bWxucz0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siCisgICAgICA+CisgICAgPGJvb2tpbmZvPgorCisgICAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgIDxpbWFnZW9iamVjdD4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9J2ZpZ3VyZXMvYnNwLXRpdGxlLnBuZycKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSdTVkcnCisgICAgICAgICAgICAgICAgICAgIGFsaWduPSdjZW50ZXInIHNjYWxlZml0PScxJyB3aWR0aD0nMTAwJScvPgorICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgICAgPC9tZWRpYW9iamVjdD4KKworICAgICAgICA8dGl0bGU+CisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSBEZXZlbG9wZXIncyBHdWlkZQorICAgICAgICA8L3RpdGxlPgorCisgICAgICAgIDxhdXRob3Jncm91cD4KKyAgICAgICAgICAgIDxhdXRob3I+CisgICAgICAgICAgICAgICAgPGZpcnN0bmFtZT5Ub208L2ZpcnN0bmFtZT4gPHN1cm5hbWU+WmFudXNzaTwvc3VybmFtZT4KKyAgICAgICAgICAgICAgICA8YWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxvcmduYW1lPkludGVsIENvcnBvcmF0aW9uPC9vcmduYW1lPgorICAgICAgICAgICAgICAgIDwvYWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgPGVtYWlsPnRvbS56YW51c3NpQGludGVsLmNvbTwvZW1haWw+CisgICAgICAgICAgICA8L2F1dGhvcj4KKyAgICAgICAgICAgIDxhdXRob3I+CisgICAgICAgICAgICAgICAgPGZpcnN0bmFtZT5SaWNoYXJkPC9maXJzdG5hbWU+IDxzdXJuYW1lPlB1cmRpZTwvc3VybmFtZT4KKyAgICAgICAgICAgICAgICA8YWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxvcmduYW1lPkxpbnV4IEZvdW5kYXRpb248L29yZ25hbWU+CisgICAgICAgICAgICAgICAgPC9hZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICA8ZW1haWw+cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZzwvZW1haWw+CisgICAgICAgICAgICA8L2F1dGhvcj4KKyAgICAgICAgPC9hdXRob3Jncm91cD4KKworICAgICAgICA8cmV2aGlzdG9yeT4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjAuOTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPjI0IE5vdmVtYmVyIDIwMTA8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5UaGUgaW5pdGlhbCBkb2N1bWVudCBkcmFmdCByZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDAuOSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuMDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPjYgQXByaWwgMjAxMTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS4wIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4wLjE8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT4yMyBNYXkgMjAxMTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS4wLjEgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjE8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT42IE9jdG9iZXIgMjAxMTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4yPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxMjwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS4yIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4zPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDEyPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjMgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjQ8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDEzPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjQgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjU8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTM8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNS4xPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+SmFudWFyeSAyMDE0PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjUuMSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNjwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTQ8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNiBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNzwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxNDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS43IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS44PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxNTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS44IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS45PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDE1PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjkgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgIDwvcmV2aGlzdG9yeT4KKworICAgIDxjb3B5cmlnaHQ+CisgICAgICA8eWVhcj4mQ09QWVJJR0hUX1lFQVI7PC95ZWFyPgorICAgICAgPGhvbGRlcj5MaW51eCBGb3VuZGF0aW9uPC9ob2xkZXI+CisgICAgPC9jb3B5cmlnaHQ+CisKKyAgICA8bGVnYWxub3RpY2U+CisgICAgICA8cGFyYT4KKyAgICAgICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50IHVuZGVyCisgICAgICAgIHRoZSB0ZXJtcyBvZiB0aGUgPHVsaW5rIHR5cGU9Imh0dHAiIHVybD0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktbmMtc2EvMi4wL3VrLyI+Q3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1Ob24tQ29tbWVyY2lhbC1TaGFyZSBBbGlrZSAyLjAgVUs6IEVuZ2xhbmQgJmFtcDsgV2FsZXM8L3VsaW5rPiBhcyBwdWJsaXNoZWQgYnkgQ3JlYXRpdmUgQ29tbW9ucy4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxub3RlPgorICAgICAgICAgIEZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtYW51YWwgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2UsIHNlZSB0aGUKKyAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyc+WW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPgorICAgICAgICAgIGZyb20gdGhlIFlvY3RvIFByb2plY3Qgd2Vic2l0ZS4KKyAgICAgIDwvbm90ZT4KKyAgICA8L2xlZ2Fsbm90aWNlPgorCisgICAgPC9ib29raW5mbz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImJzcC54bWwiLz4KKworPCEtLSAgICA8aW5kZXggaWQ9J2luZGV4Jz4KKyAgICAgIDx0aXRsZT5JbmRleDwvdGl0bGU+CisgICAgPC9pbmRleD4KKy0tPgorCis8L2Jvb2s+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9ic3AtZ3VpZGUvYnNwLXN0eWxlLmNzcyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9ic3AtZ3VpZGUvYnNwLXN0eWxlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDA3Y2E0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3Atc3R5bGUuY3NzCkBAIC0wLDAgKzEsOTg0IEBACisvKgorICAgR2VuZXJpYyBYSFRNTCAvIERvY0Jvb2sgWEhUTUwgQ1NTIFN0eWxlc2hlZXQuCisKKyAgIEJyb3dzZXIgd3JhbmdsaW5nIGFuZCB0eXBvZ3JhcGhpYyBkZXNpZ24gYnkKKyAgICAgIE95dmluZCBLb2xhcyAvIHBpcHBpbkBnaW1wLm9yZworCisgICBDdXN0b21pc2VkIGZvciBQb2t5IGJ5CisgICAgICBNYXR0aGV3IEFsbHVtIC8gbWFsbHVtQG8taGFuZC5jb20KKworICAgVGhhbmtzIHRvOgorICAgICBMaWFtIFIuIEUuIFF1aW4KKyAgICAgV2lsbGlhbSBTa2FnZ3MKKyAgICAgSmFrdWIgU3RlaW5lcgorCisgICBTdHJ1Y3R1cmUKKyAgIC0tLS0tLS0tLQorCisgICBUaGUgc3R5bGVzaGVldCBpcyBkaXZpZGVkIGludG8gdGhlIGZvbGxvd2luZyBzZWN0aW9uczoKKworICAgICAgIFBvc2l0aW9uaW5nCisgICAgICAgICAgTWFyZ2lucywgcGFkZGluZ3MsIHdpZHRoLCBmb250LXNpemUsIGNsZWFyaW5nLgorICAgICAgIERlY29yYXRpb25zCisgICAgICAgICAgQm9yZGVycywgc3R5bGUKKyAgICAgICBDb2xvcnMKKyAgICAgICAgICBDb2xvcnMKKyAgICAgICBHcmFwaGljcworICAgICAgICAgIEdyYXBoaWNhbCBiYWNrZ3JvdW5kcworICAgICAgIE5hc3R5IElFIHR3ZWFrcworICAgICAgICAgIFdvcmthcm91bmRzIG5lZWRlZCB0byBtYWtlIGl0IHdvcmsgaW4gaW50ZXJuZXQgZXhwbG9yZXIsCisgICAgICAgICAgY3VycmVudGx5IG1ha2VzIHRoZSBzdHlsZXNoZWV0IG5vbiB2YWxpZGF0aW5nLCBidXQgdXAgdW50aWwKKyAgICAgICAgICB0aGlzIHBvaW50IGl0IGlzIHZhbGlkYXRpbmcuCisgICAgICAgTW96aWxsYSBleHRlbnNpb25zCisgICAgICAgICAgVHJhbnNwYXJlbmN5IGZvciBmb290ZXIKKwkgIFJvdW5kZWQgY29ybmVycyBvbiBib3hlcworCisqLworCisKKyAgLyoqKioqKioqKioqKioqKiAvCisgLyAgUG9zaXRpb25pbmcgICAvCisvICoqKioqKioqKioqKioqKi8KKworYm9keSB7CisgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBTYW5zLCBzYW5zLXNlcmlmOworCisgIG1pbi13aWR0aDogNjQwcHg7CisgIHdpZHRoOiA4MCU7CisgIG1hcmdpbjogIDBlbSBhdXRvOworICBwYWRkaW5nOiAyZW0gNWVtIDVlbSA1ZW07CisgIGNvbG9yOiAjMzMzOworfQorCitoMSxoMixoMyxoNCxoNSxoNixoNyB7CisgIGZvbnQtZmFtaWx5OiBBcmlhbCwgU2FuczsKKyAgY29sb3I6ICMwMDU1N0Q7CisgIGNsZWFyOiBib3RoOworfQorCitoMSB7CisgIGZvbnQtc2l6ZTogMmVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMmVtIDBlbSAwZW0gMGVtOworfQorCitoMi5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMC4xMGVtIDBlbSAzLjBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjhlbTsKKyAgcGFkZGluZy1sZWZ0OiAyMCU7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworaDIgeworICBtYXJnaW46IDJlbSAwZW0gMC42NmVtIDBlbTsKKyAgcGFkZGluZzogMC41ZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS41ZW07CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMy5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQyLjE0JTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK2gzIHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0MCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNCB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDUgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g2IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLmF1dGhvcmdyb3VwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIHBhZGRpbmctdG9wOiAyNTZweDsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL2JzcC10aXRsZS5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCB0b3A7CisgIG1hcmdpbi10b3A6IC0yNTZweDsKKyAgcGFkZGluZy1yaWdodDogNTBweDsKKyAgbWFyZ2luLWxlZnQ6IDBweDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7CisgIHdpZHRoOiA3NDBweDsKK30KKworaDMuYXV0aG9yIHsKKyAgbWFyZ2luOiAwZW0gMG1lIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zaXplOiAxMDAlOworICBjb2xvcjogIzMzMzsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5hdXRob3IgdHQuZW1haWwgeworICBmb250LXNpemU6IDY2JTsKK30KKworLnRpdGxlcGFnZSBociB7CisgIHdpZHRoOiAwZW07CisgIGNsZWFyOiBib3RoOworfQorCisucmV2aGlzdG9yeSB7CisgIHBhZGRpbmctdG9wOiAyZW07CisgIGNsZWFyOiBib3RoOworfQorCisudG9jLAorLmxpc3Qtb2YtdGFibGVzLAorLmxpc3Qtb2YtZXhhbXBsZXMsCisubGlzdC1vZi1maWd1cmVzIHsKKyAgcGFkZGluZzogMS4zM2VtIDBlbSAyLjVlbSAwZW07CisgIGNvbG9yOiAjMDA1NTdEOworfQorCisudG9jIHAsCisubGlzdC1vZi10YWJsZXMgcCwKKy5saXN0LW9mLWZpZ3VyZXMgcCwKKy5saXN0LW9mLWV4YW1wbGVzIHAgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMC4zZW07CisgIG1hcmdpbjogMS41ZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgcCBiLAorLmxpc3Qtb2YtdGFibGVzIHAgYiwKKy5saXN0LW9mLWZpZ3VyZXMgcCBiLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCBieworICBmb250LXNpemU6IDEwMC4wJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy50b2MgZGwsCisubGlzdC1vZi10YWJsZXMgZGwsCisubGlzdC1vZi1maWd1cmVzIGRsLAorLmxpc3Qtb2YtZXhhbXBsZXMgZGwgeworICBtYXJnaW46IDBlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZHQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGRkIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAyLjZlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuZ2xvc3NhcnkgZGwsCitkaXYudmFyaWFibGVsaXN0IGRsIHsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgd2lkdGg6IDIwZW07CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCisudmFyaWFibGVsaXN0IGRsIGR0IHsKKyAgbWFyZ2luLXRvcDogMC41ZW07Cit9CisKKy5nbG9zc2FyeSBkbCBkZCwKKy52YXJpYWJsZWxpc3QgZGwgZGQgeworICBtYXJnaW4tdG9wOiAtMWVtOworICBtYXJnaW4tbGVmdDogMjUuNWVtOworfQorCisuZ2xvc3NhcnkgZGQgcCwKKy52YXJpYWJsZWxpc3QgZGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKK2RpdiBwLmNvcHlyaWdodCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK2Rpdi5sZWdhbG5vdGljZSBwLmxlZ2Fsbm90aWNlLXRpdGxlIHsKKyAgbWFyZ2luLWJvdHRvbTogMGVtOworfQorCitwIHsKKyAgbGluZS1oZWlnaHQ6IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisKK30KKworZGwgeworICBwYWRkaW5nLXRvcDogMGVtOworfQorCitociB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCisKKy5tZWRpYW9iamVjdCwKKy5tZWRpYW9iamVjdGNvIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCitpbWcgeworICBib3JkZXI6IG5vbmU7Cit9CisKK3VsIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMS41ZW07Cit9CisKK3VsIGxpIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCit1bCBsaSBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKwordGFibGUgeworICB3aWR0aCA6MTAwJTsKK30KKwordGggeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3RkIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCitwIGFbaWRdIHsKKyAgbWFyZ2luOiAwcHg7CisgIHBhZGRpbmc6IDBweDsKKyAgZGlzcGxheTogaW5saW5lOworICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOworfQorCithIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGNvbG9yOiAjNDQ0OworfQorCitwcmUgeworICAgIG92ZXJmbG93OiBhdXRvOworfQorCithOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIC8qZm9udC13ZWlnaHQ6IGJvbGQ7Ki8KK30KKworLyogVGhpcyBzdHlsZSBkZWZpbmVzIGhvdyB0aGUgcGVybWFsaW5rIGNoYXJhY3RlcgorICAgYXBwZWFycyBieSBpdHNlbGYgYW5kIHdoZW4gaG92ZXJlZCBvdmVyIHdpdGgKKyAgIHRoZSBtb3VzZS4gKi8KKworW2FsdD0nUGVybWFsaW5rJ10geyBjb2xvcjogI2VlZTsgfQorW2FsdD0nUGVybWFsaW5rJ106aG92ZXIgeyBjb2xvcjogYmxhY2s7IH0KKworCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUgeworICBtYXJnaW46IDFlbSAwZW07CisgIHBhZGRpbmc6IDFlbTsKKyAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOworfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWxleGFtcGxlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbHRhYmxlIHAudGl0bGUgYiwKK2Rpdi5maWd1cmUgcC50aXRsZSBiLAorZGl2LmV4YW1wbGUgcC50aXRsZSBiLAorZGl2LnRhYmxlIHAudGl0bGUgYnsKKyAgICBwYWRkaW5nLXRvcDogMGVtOworICAgIG1hcmdpbi10b3A6IDBlbTsKKyAgICBmb250LXNpemU6IDEwMCU7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKK30KKworLm1lZGlhb2JqZWN0IC5jYXB0aW9uLAorLm1lZGlhb2JqZWN0IC5jYXB0aW9uIHAgIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZy10b3A6IDAuNWVtOworICBwYWRkaW5nLWJvdHRvbTogMC41ZW07Cit9CisKKy5lcGlncmFwaCB7CisgIHBhZGRpbmctbGVmdDogNTUlOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKy5lcGlncmFwaCBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmVwaWdyYXBoIC5xdW90ZSB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKy5lcGlncmFwaCAuYXR0cmlidXRpb24geworICBmb250LXN0eWxlOiBub3JtYWw7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitzcGFuLmFwcGxpY2F0aW9uIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCisucHJvZ3JhbWxpc3RpbmcgeworICBmb250LWZhbWlseTogbW9ub3NwYWNlOworICBmb250LXNpemU6IDgwJTsKKyAgd2hpdGUtc3BhY2U6IHByZTsKKyAgbWFyZ2luOiAxLjMzZW0gMGVtOworICBwYWRkaW5nOiAxLjMzZW07Cit9CisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBtYXJnaW4tdG9wOiAxZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKKworfQorCisvKiBmb3JjZSBmdWxsIHdpZHRoIG9mIHRhYmxlIHdpdGhpbiBkaXYgKi8KKy50aXAgdGFibGUsCisud2FybmluZyB0YWJsZSwKKy5jYXV0aW9uIHRhYmxlLAorLm5vdGUgdGFibGUgeworICBib3JkZXI6IG5vbmU7CisgIHdpZHRoOiAxMDAlOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBwYWRkaW5nOiAwLjhlbSAwLjBlbSAwLjBlbSAwLjBlbTsKKyAgbWFyZ2luIDogMGVtIDBlbSAwZW0gMGVtOworfQorCisudGlwIHAsCisud2FybmluZyBwLAorLmNhdXRpb24gcCwKKy5ub3RlIHAgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMC41ZW07CisgIHBhZGRpbmctcmlnaHQ6IDFlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmFjcm9ueW0geworICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICBwYWRkaW5nOiAwLjA5ZW0gMC4zZW07CisgIG1hcmdpbjogMGVtOworfQorCisuaXRlbWl6ZWRsaXN0IGxpIHsKKyAgY2xlYXI6IG5vbmU7Cit9CisKKy5maWxlbmFtZSB7CisgIGZvbnQtc2l6ZTogbWVkaXVtOworICBmb250LWZhbWlseTogQ291cmllciwgbW9ub3NwYWNlOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGxlZnQ6IDBlbTsKKyAgdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2RmOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAgbGVmdDogMGVtOworICBib3R0b206IDBlbTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworZGl2Lm5hdmhlYWRlciB0ZCwKK2Rpdi5uYXZmb290ZXIgdGQgeworICBmb250LXNpemU6IDY2JTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0aCB7CisgIC8qZm9udC1mYW1pbHk6IEdlb3JnaWEsIFRpbWVzLCBzZXJpZjsqLworICAvKmZvbnQtc2l6ZTogeC1sYXJnZTsqLworICBmb250LXNpemU6IDgwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci1ib3R0b206IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYSwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYSB7CisgIGNvbG9yOiAjNzc3OworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKKy8qIG5vcm1hbCB0ZXh0IGluIHRoZSBmb290ZXIgKi8KK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgeworICBjb2xvcjogYmxhY2s7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTp2aXNpdGVkLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOnZpc2l0ZWQgeworICBjb2xvcjogIzQ0NDsKK30KKworCisvKiBsaW5rcyBpbiBoZWFkZXIgYW5kIGZvb3RlciAqLworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOmhvdmVyLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBjb2xvcjogIzMzYTsKK30KKworZGl2Lm5hdmhlYWRlciBociwKK2Rpdi5uYXZmb290ZXIgaHIgeworICBkaXNwbGF5OiBub25lOworfQorCisKKy5xYW5kYXNldCB0ci5xdWVzdGlvbiB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnFhbmRhc2V0IHRyLmFuc3dlciB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKy5hbnN3ZXIgdGQgeworICBwYWRkaW5nLWJvdHRvbTogMS41ZW07Cit9CisKKy5lbXBoYXNpcyB7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisKKyAgLyoqKioqKioqKioqKiogLworIC8gZGVjb3JhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKi8KKworLnRpdGxlcGFnZSB7Cit9CisKKy5wYXJ0IC50aXRsZSB7Cit9CisKKy5zdWJ0aXRsZSB7CisgICAgYm9yZGVyOiBub25lOworfQorCisvKgoraDEgeworICBib3JkZXI6IG5vbmU7Cit9CisKK2gyIHsKKyAgYm9yZGVyLXRvcDogc29saWQgMC4yZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDMgeworICBib3JkZXItdG9wOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDQgeworICBib3JkZXI6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNSB7CisgIGJvcmRlcjogMGVtOworfQorKi8KKworLnByb2dyYW1saXN0aW5nIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisucXVlc3Rpb24gdGQgeworICBib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7Cit9CisKKy5hbnN3ZXIgeworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZDsKK30KKworICAvKioqKioqKioqIC8KKyAvICBjb2xvcnMgIC8KKy8gKioqKioqKioqLworCitib2R5IHsKKyAgY29sb3I6ICMzMzM7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorCithIHsKKyAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cit9CisKK2E6aG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVkZWRlOworfQorCisKK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3LAoraDggeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKK30KKworaHIgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKKworLnRpcCwgLndhcm5pbmcsIC5jYXV0aW9uLCAubm90ZSB7CisgIGJvcmRlci1jb2xvcjogI2ZmZjsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjsKK30KKworCisud2FybmluZyB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLnRpcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5ub3RlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgY29sb3I6ICMwNDQ7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworcHJlLnByb2dyYW1saXN0aW5nIHsKKyAgY29sb3I6IGJsYWNrOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworICBib3JkZXItY29sb3I6ICNhYWE7CisgIGJvcmRlci13aWR0aDogMnB4OworfQorCisuZ3VpbWVudSwKKy5ndWlsYWJlbCwKKy5ndWltZW51aXRlbSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgYm9yZGVyLWNvbG9yOiAjOTk5OworfQorCisKK2Rpdi5uYXZoZWFkZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKK2Rpdi5uYXZmb290ZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKKyAgLyoqKioqKioqKioqIC8KKyAvICBncmFwaGljcyAgLworLyAqKioqKioqKioqKi8KKworLyoKK2JvZHkgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ib2R5X2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisubmF2aGVhZGVyLAorLm5vdGUsCisudGlwIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvbm90ZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLndhcm5pbmcsCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL3dhcm5pbmdfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5maWd1cmUsCisuaW5mb3JtYWxmaWd1cmUsCisuZXhhbXBsZSwKKy5pbmZvcm1hbGV4YW1wbGUsCisudGFibGUsCisuaW5mb3JtYWx0YWJsZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2ZpZ3VyZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworKi8KK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3eworfQorCisvKgorRXhhbXBsZSBvZiBob3cgdG8gc3RpY2sgYW4gaW1hZ2UgYXMgcGFydCBvZiB0aGUgdGl0bGUuCisKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy93aGl0ZS1vbi1ibGFjay5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7Cit9CisqLworCitkaXYucHJlZmFjZSAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5jb2xvcGhvbiAudGl0bGUsCitkaXYuY2hhcHRlciAudGl0bGVwYWdlIC50aXRsZSB7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGJvdHRvbTsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworfQorCitkaXYuc2VjdGlvbiBkaXYuc2VjdGlvbiAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5zZWN0MiAudGl0bGVwYWdlIC50aXRsZSB7CisgICAgYmFja2dyb3VuZDogbm9uZTsKK30KKworCitoMS50aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBoZWlnaHQ6IDI1NnB4OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworfQorCitoMi5zdWJ0aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworICB3aWR0aDogMHB4OworICBkaXNwbGF5OiBub25lOworfQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gIHBpcHBpbi5naW1wLm9yZyBzcGVjaWZpYyBhbHRlcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIGNvbG9yOiAjNzc3OworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZzogMDsKKyAgbWFyZ2luOiAwOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMHB4OworICBsZWZ0OiAwcHg7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDUwcHg7CisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9oZWFkaW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7CisgIGJvcmRlcjogbm9uZTsKK30KKworZGl2LmhlYWRpbmcgYSB7CisgIGNvbG9yOiAjNDQ0OworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlcjogbm9uZTsKKyAgY29sb3I6ICNkZGQ7CisgIGZvbnQtc2l6ZTogODAlOworICB0ZXh0LWFsaWduOnJpZ2h0OworCisgIHdpZHRoOiAxMDAlOworICBwYWRkaW5nLXRvcDogMTBweDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBib3R0b206IDBweDsKKyAgbGVmdDogMHB4OworCisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9mb290aW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworfQorKi8KKworCisKKyAgLyoqKioqKioqKioqKioqKioqKiAvCisgLyAgbmFzdHkgaWUgdHdlYWtzICAvCisvICoqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7CisgIG1hcmdpbi1sZWZ0OmV4cHJlc3Npb24oIi01ZW0iKTsKK30KK2JvZHkgeworICBwYWRkaW5nOmV4cHJlc3Npb24oIjRlbSA1ZW0gMGVtIDVlbSIpOworfQorKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyBtb3ppbGxhIHZlbmRvciBzcGVjaWZpYyBjc3MgZXh0ZW5zaW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICAtbW96LW9wYWNpdHk6IDAuOGVtOworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUsCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjVlbTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjNlbTsKK30KKyovCisKK3RhYmxlIHRyIHRkIHRhYmxlIHRyIHRkIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCitociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKK3RhYmxlIHsKKyAgYm9yZGVyOiAwZW07Cit9CisKKyAucGhvdG8geworICBmbG9hdDogcmlnaHQ7CisgIG1hcmdpbi1sZWZ0OiAgIDEuNWVtOworICBtYXJnaW4tYm90dG9tOiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXgtd2lkdGg6ICAgICAgMTdlbTsKKyAgYm9yZGVyOiAgICAgMXB4IHNvbGlkIGdyYXk7CisgIHBhZGRpbmc6ICAgIDNweDsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisgLnNlcGVyYXRvciB7CisgICBwYWRkaW5nLXRvcDogMmVtOworICAgY2xlYXI6IGJvdGg7CisgIH0KKworICAjdmFsaWRhdG9ycyB7CisgICAgICBtYXJnaW4tdG9wOiA1ZW07CisgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgIGNvbG9yOiAjNzc3OworICB9CisgIEBtZWRpYSBwcmludCB7CisgICAgICBib2R5IHsKKyAgICAgICAgICBmb250LXNpemU6IDhwdDsKKyAgICAgIH0KKyAgICAgIC5ub3ByaW50IHsKKyAgICAgICAgICBkaXNwbGF5OiBub25lOworICAgICAgfQorICB9CisKKworLnRpcCwKKy5ub3RlIHsKKyAgIGJhY2tncm91bmQ6ICNmMGYwZjI7CisgICBjb2xvcjogIzMzMzsKKyAgIHBhZGRpbmc6IDIwcHg7CisgICBtYXJnaW46IDIwcHg7Cit9CisKKy50aXAgaDMsCisubm90ZSBoMyB7CisgICBwYWRkaW5nOiAwZW07CisgICBtYXJnaW46IDBlbTsKKyAgIGZvbnQtc2l6ZTogMmVtOworICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICBjb2xvcjogIzMzMzsKK30KKworLnRpcCBhLAorLm5vdGUgYSB7CisgICBjb2xvcjogIzMzMzsKKyAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisuZm9vdG5vdGUgeworICAgZm9udC1zaXplOiBzbWFsbDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisvKiBDaGFuZ2VzIHRoZSBhbm5vdW5jZW1lbnQgdGV4dCAqLworLnRpcCBoMywKKy53YXJuaW5nIGgzLAorLmNhdXRpb24gaDMsCisubm90ZSBoMyB7CisgICBmb250LXNpemU6bGFyZ2U7CisgICBjb2xvcjogIzAwNTU3RDsKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9ic3AtZ3VpZGUvYnNwLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9ic3AtZ3VpZGUvYnNwLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzM5ZWM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3AueG1sCkBAIC0wLDAgKzEsMTU1OCBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J2JzcCc+CisKKyAgICAgICAgPHRpdGxlPkJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUCkgLSBEZXZlbG9wZXIncyBHdWlkZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBpcyBhIGNvbGxlY3Rpb24gb2YgaW5mb3JtYXRpb24gdGhhdAorICAgICAgICAgICAgZGVmaW5lcyBob3cgdG8gc3VwcG9ydCBhIHBhcnRpY3VsYXIgaGFyZHdhcmUgZGV2aWNlLCBzZXQgb2YgZGV2aWNlcywgb3IKKyAgICAgICAgICAgIGhhcmR3YXJlIHBsYXRmb3JtLgorICAgICAgICAgICAgVGhlIEJTUCBpbmNsdWRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGFyZHdhcmUgZmVhdHVyZXMKKyAgICAgICAgICAgIHByZXNlbnQgb24gdGhlIGRldmljZSBhbmQga2VybmVsIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYWxvbmcgd2l0aCBhbnkKKyAgICAgICAgICAgIGFkZGl0aW9uYWwgaGFyZHdhcmUgZHJpdmVycyByZXF1aXJlZC4KKyAgICAgICAgICAgIFRoZSBCU1AgYWxzbyBsaXN0cyBhbnkgYWRkaXRpb25hbCBzb2Z0d2FyZQorICAgICAgICAgICAgY29tcG9uZW50cyByZXF1aXJlZCBpbiBhZGRpdGlvbiB0byBhIGdlbmVyaWMgTGludXggc29mdHdhcmUgc3RhY2sgZm9yIGJvdGgKKyAgICAgICAgICAgIGVzc2VudGlhbCBhbmQgb3B0aW9uYWwgcGxhdGZvcm0gZmVhdHVyZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZ3VpZGUgcHJlc2VudHMgaW5mb3JtYXRpb24gYWJvdXQgQlNQIExheWVycywgZGVmaW5lcyBhIHN0cnVjdHVyZSBmb3IgY29tcG9uZW50cworICAgICAgICAgICAgc28gdGhhdCBCU1BzIGZvbGxvdyBhIGNvbW1vbmx5IHVuZGVyc3Rvb2QgbGF5b3V0LCBkaXNjdXNzZXMgaG93IHRvIGN1c3RvbWl6ZQorICAgICAgICAgICAgYSByZWNpcGUgZm9yIGEgQlNQLCBhZGRyZXNzZXMgQlNQIGxpY2Vuc2luZywgYW5kIHByb3ZpZGVzIGluZm9ybWF0aW9uIHRoYXQKKyAgICAgICAgICAgIHNob3dzIHlvdSBob3cgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgYQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnNwLWxheWVycyc+QlNQIExheWVyPC9saW5rPiB1c2luZyB0d28gWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndXNpbmctdGhlLXlvY3RvLXByb2plY3RzLWJzcC10b29scyc+QlNQIFRvb2xzPC9saW5rPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdic3AtbGF5ZXJzJz4KKyAgICAgICAgICAgIDx0aXRsZT5CU1AgTGF5ZXJzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBCU1AgY29uc2lzdHMgb2YgYSBmaWxlIHN0cnVjdHVyZSBpbnNpZGUgYSBiYXNlIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBDb2xsZWN0aXZlbHksIHlvdSBjYW4gdGhpbmsgb2YgdGhlIGJhc2UgZGlyZWN0b3J5LCBpdHMgZmlsZSBzdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgYW5kIHRoZSBjb250ZW50cyBhcyBhIEJTUCBMYXllci4KKyAgICAgICAgICAgICAgICBBbHRob3VnaCBub3QgYSBzdHJpY3QgcmVxdWlyZW1lbnQsIGxheWVycyBpbiB0aGUgWW9jdG8gUHJvamVjdCB1c2UgdGhlCisgICAgICAgICAgICAgICAgZm9sbG93aW5nIHdlbGwtZXN0YWJsaXNoZWQgbmFtaW5nIGNvbnZlbnRpb246CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBzdHJpbmcgIm1ldGEtIiBpcyBwcmVwZW5kZWQgdG8gdGhlIG1hY2hpbmUgb3IgcGxhdGZvcm0gbmFtZSwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPiBpbiB0aGUgYWJvdmUgZm9ybS4KKyAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+VGlwPC90aXRsZT4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSB0aGUgQlNQIGxheWVyIG5hbWluZyBjb252ZW50aW9uIGlzIHdlbGwtZXN0YWJsaXNoZWQsCisgICAgICAgICAgICAgICAgICAgIGl0IGlzIGFkdmlzYWJsZSB0byBmb2xsb3cgaXQgd2hlbiBjcmVhdGluZyBsYXllcnMuCisgICAgICAgICAgICAgICAgICAgIFRlY2huaWNhbGx5IHNwZWFraW5nLCBhIEJTUCBsYXllciBuYW1lIGRvZXMgbm90IG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgc3RhcnQgd2l0aCA8ZmlsZW5hbWU+bWV0YS08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgeW91IG1pZ2h0IHJ1biBpbnRvIHNpdHVhdGlvbnMgd2hlcmUgb2JzY3VyZQorICAgICAgICAgICAgICAgICAgICBzY3JpcHRzIGFzc3VtZSB0aGlzIGNvbnZlbnRpb24uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBoZWxwIHVuZGVyc3RhbmQgdGhlIEJTUCBsYXllciBjb25jZXB0LCBjb25zaWRlciB0aGUgQlNQcyB0aGF0IHRoZQorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3Qgc3VwcG9ydHMgYW5kIHByb3ZpZGVzIHdpdGggZWFjaCByZWxlYXNlLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VlIHRoZSBsYXllcnMgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjeW9jdG8tcHJvamVjdC1yZXBvc2l0b3JpZXMnPllvY3RvIFByb2plY3QgU291cmNlIFJlcG9zaXRvcmllczwvdWxpbms+CisgICAgICAgICAgICAgICAgdGhyb3VnaCBhIHdlYiBpbnRlcmZhY2UgYXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC9jZ2l0LmNnaSc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgSWYgeW91IGdvIHRvIHRoYXQgaW50ZXJmYWNlLCB5b3Ugd2lsbCBmaW5kIG5lYXIgdGhlIGJvdHRvbSBvZiB0aGUgbGlzdAorICAgICAgICAgICAgICAgIHVuZGVyICJZb2N0byBNZXRhZGF0YSBMYXllcnMiIHNldmVyYWwgQlNQIGxheWVycyBhbGwgb2Ygd2hpY2ggYXJlCisgICAgICAgICAgICAgICAgc3VwcG9ydGVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0IChlLmcuIDxmaWxlbmFtZT5tZXRhLW1pbm5vdzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXJhc3BiZXJyeXBpPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIEVhY2ggb2YgdGhlc2UgbGF5ZXJzIGlzIGEgcmVwb3NpdG9yeSB1bnRvIGl0c2VsZiBhbmQgY2xpY2tpbmcgb24gYQorICAgICAgICAgICAgICAgIGxheWVyIHJldmVhbHMgaW5mb3JtYXRpb24gdGhhdCBpbmNsdWRlcyB0d28gbGlua3MgZnJvbSB3aGljaCB5b3UgY2FuIGNob29zZQorICAgICAgICAgICAgICAgIHRvIHNldCB1cCBhIGNsb25lIG9mIHRoZSBsYXllcidzIHJlcG9zaXRvcnkgb24geW91ciBsb2NhbCBob3N0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBjbG9uZXMgdGhlIE1pbm5vd0JvYXJkIEJTUCBsYXllcjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL21ldGEtbWlubm93CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgQlNQIGRldmVsb3BtZW50IHdvcmtmbG93LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2RldmVsb3BpbmctYS1ib2FyZC1zdXBwb3J0LXBhY2thZ2UtYnNwJz5EZXZlbG9waW5nIGEgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHNldCB1cCBhIGxvY2FsIGNvcHkgb2Ygc291cmNlIGZpbGVzCisgICAgICAgICAgICAgICAgZnJvbSBhIEdpdCByZXBvc2l0b3J5LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2dldHRpbmctc2V0dXAnPkdldHRpbmcgU2V0IFVwPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBhbHNvIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGxheWVyJ3MgYmFzZSBkaXJlY3RvcnkgKDxmaWxlbmFtZT5tZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4pIGlzIHRoZSByb290CisgICAgICAgICAgICAgICAgb2YgdGhlIEJTUCBMYXllci4KKyAgICAgICAgICAgICAgICBUaGlzIHJvb3QgaXMgd2hhdCB5b3UgYWRkIHRvIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQkxBWUVSUyc+PGZpbGVuYW1lPkJCTEFZRVJTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHRoZSA8ZmlsZW5hbWU+Y29uZi9iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LAorICAgICAgICAgICAgICAgIHdoaWNoIGlzIGVzdGFibGlzaGVkIGFmdGVyIHlvdSBydW4gb25lIG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICBzZXR1cCBzY3JpcHRzIChpLmUuCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4pLgorICAgICAgICAgICAgICAgIEFkZGluZyB0aGUgcm9vdCBhbGxvd3MgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gcmVjb2duaXplIHRoZSBCU1AKKyAgICAgICAgICAgICAgICBkZWZpbml0aW9uIGFuZCBmcm9tIGl0IGJ1aWxkIGFuIGltYWdlLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCTEFZRVJTID89ICIgXAorICAgICAgIC91c3IvbG9jYWwvc3JjL3lvY3RvL21ldGEgXAorICAgICAgIC91c3IvbG9jYWwvc3JjL3lvY3RvL21ldGEteW9jdG8gXAorICAgICAgIC91c3IvbG9jYWwvc3JjL3lvY3RvL21ldGEteW9jdG8tYnNwIFwKKyAgICAgICAvdXNyL2xvY2FsL3NyYy95b2N0by9tZXRhLW15bGF5ZXIgXAorICAgICAgICIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNvbWUgQlNQcyByZXF1aXJlIGFkZGl0aW9uYWwgbGF5ZXJzIG9uCisgICAgICAgICAgICAgICAgdG9wIG9mIHRoZSBCU1AncyByb290IGxheWVyIGluIG9yZGVyIHRvIGJlIGZ1bmN0aW9uYWwuCisgICAgICAgICAgICAgICAgRm9yIHRoZXNlIGNhc2VzLCB5b3UgYWxzbyBuZWVkIHRvIGFkZCB0aG9zZSBsYXllcnMgdG8gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCTEFZRVJTPC9maWxlbmFtZT4gdmFyaWFibGUgaW4gb3JkZXIgdG8gYnVpbGQgdGhlIEJTUC4KKyAgICAgICAgICAgICAgICBZb3UgbXVzdCBhbHNvIHNwZWNpZnkgaW4gdGhlICJEZXBlbmRlbmNpZXMiIHNlY3Rpb24gb2YgdGhlIEJTUCdzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+IGZpbGUgYW55IHJlcXVpcmVtZW50cyBmb3IgYWRkaXRpb25hbAorICAgICAgICAgICAgICAgIGxheWVycyBhbmQsIHByZWZlcmFibHksIGFueQorICAgICAgICAgICAgICAgIGJ1aWxkIGluc3RydWN0aW9ucyB0aGF0IG1pZ2h0IGJlIGNvbnRhaW5lZCBlbHNld2hlcmUKKyAgICAgICAgICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNvbWUgbGF5ZXJzIGZ1bmN0aW9uIGFzIGEgbGF5ZXIgdG8gaG9sZCBvdGhlciBCU1AgbGF5ZXJzLgorICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgb2YgdGhpcyB0eXBlIG9mIGxheWVyIGlzIHRoZSA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+IGxheWVyLAorICAgICAgICAgICAgICAgIHdoaWNoIGNvbnRhaW5zIGEgbnVtYmVyIG9mIGluZGl2aWR1YWwgQlNQIHN1Yi1sYXllcnMsIGFzIHdlbGwgYXMgYSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBuYW1lZCA8ZmlsZW5hbWU+Y29tbW9uLzwvZmlsZW5hbWU+IGZ1bGwgb2YgY29tbW9uIGNvbnRlbnQgYWNyb3NzIHRob3NlIGxheWVycy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gbGF5ZXJzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycyc+VW5kZXJzdGFuZGluZyBhbmQgQ3JlYXRpbmcgTGF5ZXJzPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworCisgICAgICAgIDxzZWN0aW9uIGlkPSJic3AtZmlsZWxheW91dCI+CisgICAgICAgICAgICA8dGl0bGU+RXhhbXBsZSBGaWxlc3lzdGVtIExheW91dDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIERlZmluaW5nIGEgY29tbW9uIEJTUCBkaXJlY3Rvcnkgc3RydWN0dXJlIGFsbG93cyBlbmQtdXNlcnMgdG8gdW5kZXJzdGFuZCBhbmQKKyAgICAgICAgICAgICAgICBiZWNvbWUgZmFtaWxpYXIgd2l0aCB0aGF0IHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICBBIGNvbW1vbiBmb3JtYXQgYWxzbyBlbmNvdXJhZ2VzIHN0YW5kYXJkaXphdGlvbiBvZiBzb2Z0d2FyZSBzdXBwb3J0IG9mIGhhcmR3YXJlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcHJvcG9zZWQgZm9ybSBkb2VzIGhhdmUgZWxlbWVudHMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlCisgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICBJdCBpcyBpbnRlbmRlZCB0aGF0IHRoaXMgaW5mb3JtYXRpb24gY2FuIGJlCisgICAgICAgICAgICAgICAgdXNlZCBieSBvdGhlciBidWlsZCBzeXN0ZW1zIGJlc2lkZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICBhbmQgdGhhdCBpdCB3aWxsIGJlIHNpbXBsZQorICAgICAgICAgICAgICAgIHRvIGV4dHJhY3QgaW5mb3JtYXRpb24gYW5kIGNvbnZlcnQgaXQgdG8gb3RoZXIgZm9ybWF0cyBpZiByZXF1aXJlZC4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSwgdGhyb3VnaCBpdHMgc3RhbmRhcmQgbGF5ZXJzIG1lY2hhbmlzbSwgY2FuIGRpcmVjdGx5CisgICAgICAgICAgICAgICAgYWNjZXB0IHRoZSBmb3JtYXQgZGVzY3JpYmVkIGFzIGEgbGF5ZXIuCisgICAgICAgICAgICAgICAgVGhlIEJTUCBjYXB0dXJlcyBhbGwKKyAgICAgICAgICAgICAgICB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgZGV0YWlscyBpbiBvbmUgcGxhY2UgaW4gYSBzdGFuZGFyZCBmb3JtYXQsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgdXNlZnVsIGZvciBhbnkgcGVyc29uIHdpc2hpbmcgdG8gdXNlIHRoZSBoYXJkd2FyZSBwbGF0Zm9ybSByZWdhcmRsZXNzIG9mCisgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIHN5c3RlbSB0aGV5IGFyZSB1c2luZy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIEJTUCBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IGluY2x1ZGUgYSBidWlsZCBzeXN0ZW0gb3Igb3RoZXIgdG9vbHMgLQorICAgICAgICAgICAgICAgIGl0IGlzIGNvbmNlcm5lZCB3aXRoIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBjb21wb25lbnRzIG9ubHkuCisgICAgICAgICAgICAgICAgQXQgdGhlIGVuZC1kaXN0cmlidXRpb24gcG9pbnQsIHlvdSBjYW4gc2hpcCB0aGUgQlNQIGNvbWJpbmVkIHdpdGggYSBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICBhbmQgb3RoZXIgdG9vbHMuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgaXQgaXMgaW1wb3J0YW50IHRvIG1haW50YWluIHRoZSBkaXN0aW5jdGlvbiB0aGF0IHRoZXNlCisgICAgICAgICAgICAgICAgYXJlIHNlcGFyYXRlIGNvbXBvbmVudHMgdGhhdCBoYXBwZW4gdG8gYmUgY29tYmluZWQgaW4gY2VydGFpbiBlbmQgcHJvZHVjdHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJlZm9yZSBsb29raW5nIGF0IHRoZSBjb21tb24gZm9ybSBmb3IgdGhlIGZpbGUgc3RydWN0dXJlIGluc2lkZSBhIEJTUCBMYXllciwKKyAgICAgICAgICAgICAgICB5b3Ugc2hvdWxkIGJlIGF3YXJlIHRoYXQgc29tZSByZXF1aXJlbWVudHMgZG8gZXhpc3QgaW4gb3JkZXIgZm9yIGEgQlNQIHRvCisgICAgICAgICAgICAgICAgYmUgY29uc2lkZXJlZCBjb21wbGlhbnQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICBGb3IgdGhhdCBsaXN0IG9mIHJlcXVpcmVtZW50cywgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWxlYXNlZC1ic3AtcmVxdWlyZW1lbnRzJz5SZWxlYXNlZCBCU1AgUmVxdWlyZW1lbnRzPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWxvdyBpcyB0aGUgY29tbW9uIGZvcm0gZm9yIHRoZSBmaWxlIHN0cnVjdHVyZSBpbnNpZGUgYSBCU1AgTGF5ZXIuCisgICAgICAgICAgICAgICAgV2hpbGUgeW91IGNhbiB1c2UgdGhpcyBiYXNpYyBmb3JtIGZvciB0aGUgc3RhbmRhcmQsIHJlYWxpemUgdGhhdCB0aGUgYWN0dWFsIHN0cnVjdHVyZXMKKyAgICAgICAgICAgICAgICBmb3Igc3BlY2lmaWMgQlNQcyBjb3VsZCBkaWZmZXIuCisKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vCisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vPHJlcGxhY2VhYmxlPmJzcF9saWNlbnNlX2ZpbGU8L3JlcGxhY2VhYmxlPgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L1JFQURNRQorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L1JFQURNRS5zb3VyY2VzCisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vYmluYXJ5LzxyZXBsYWNlYWJsZT5ib290YWJsZV9pbWFnZXM8L3JlcGxhY2VhYmxlPgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L2NvbmYvbGF5ZXIuY29uZgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L2NvbmYvbWFjaGluZS8qLmNvbmYKKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9yZWNpcGVzLWJzcC8qCisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vcmVjaXBlcy1jb3JlLyoKKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9yZWNpcGVzLWdyYXBoaWNzLyoKKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b188cmVwbGFjZWFibGU+a2VybmVsX3JldjwvcmVwbGFjZWFibGU+LmJiYXBwZW5kCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWxvdyBpcyBhbiBleGFtcGxlIG9mIHRoZSBlTWVubG93IEJTUDoKKworICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS1lbWVubG93L0NPUFlJTkcuTUlUCisgICAgIG1ldGEtZW1lbmxvdy9SRUFETUUKKyAgICAgbWV0YS1lbWVubG93L1JFQURNRS5zb3VyY2VzCisgICAgIG1ldGEtZW1lbmxvdy9iaW5hcnkvCisgICAgIG1ldGEtZW1lbmxvdy9jb25mLworICAgICBtZXRhLWVtZW5sb3cvY29uZi9sYXllci5jb25mCisgICAgIG1ldGEtZW1lbmxvdy9jb25mL21hY2hpbmUvCisgICAgIG1ldGEtZW1lbmxvdy9jb25mL21hY2hpbmUvZW1lbmxvdy1ub2VtZ2QuY29uZgorICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1ic3AvCisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yLworICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yLworICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yXzAuMC5iYmFwcGVuZAorICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL2VtZW5sb3ctbm9lbWdkLworICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL2VtZW5sb3ctbm9lbWdkL21hY2hjb25maWcKKyAgICAgbWV0YS1lbWVubG93L3JlY2lwZXMtZ3JhcGhpY3MvCisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlcgorICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZworICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZ18wLjEuYmJhcHBlbmQKKyAgICAgbWV0YS1lbWVubG93L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvZW1lbmxvdy1ub2VtZ2QKKyAgICAgbWV0YS1lbWVubG93L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvZW1lbmxvdy1ub2VtZ2QveG9yZy5jb25maWcKKyAgICAgbWV0YS1lbWVubG93L3JlY2lwZXMta2VybmVsLworICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1rZXJuZWwvbGludXgvCisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKKyAgICAgbWV0YS1lbWVubG93L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZGVzY3JpYmUgZWFjaCBwYXJ0IG9mIHRoZSBwcm9wb3NlZCBCU1AgZm9ybWF0LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0iYnNwLWZpbGVsYXlvdXQtbGljZW5zZSI+CisgICAgICAgICAgICA8dGl0bGU+TGljZW5zZSBGaWxlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGVzZSBmaWxlcyBpbiB0aGUgQlNQIExheWVyIGF0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi88cmVwbGFjZWFibGU+YnNwX2xpY2Vuc2VfZmlsZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGVzZSBvcHRpb25hbCBmaWxlcyBzYXRpc2Z5IGxpY2Vuc2luZyByZXF1aXJlbWVudHMgZm9yIHRoZSBCU1AuCisgICAgICAgICAgICAgICAgVGhlIHR5cGUgb3IgdHlwZXMgb2YgZmlsZXMgaGVyZSBjYW4gdmFyeSBkZXBlbmRpbmcgb24gdGhlIGxpY2Vuc2luZyByZXF1aXJlbWVudHMuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGluIHRoZSBlTWVubG93IEJTUCBhbGwgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBhcmUgaGFuZGxlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DT1BZSU5HLk1JVDwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIExpY2Vuc2luZyBmaWxlcyBjYW4gYmUgTUlULCBCU0QsIEdQTHYqLCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgVGhlc2UgZmlsZXMgYXJlIHJlY29tbWVuZGVkIGZvciB0aGUgQlNQIGJ1dCBhcmUgb3B0aW9uYWwgYW5kIHRvdGFsbHkgdXAgdG8gdGhlIEJTUCBkZXZlbG9wZXIuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSJic3AtZmlsZWxheW91dC1yZWFkbWUiPgorICAgICAgICAgICAgPHRpdGxlPlJFQURNRSBGaWxlPC90aXRsZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGlzIGZpbGUgaW4gdGhlIEJTUCBMYXllciBhdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vUkVBRE1FCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGZpbGUgcHJvdmlkZXMgaW5mb3JtYXRpb24gb24gaG93IHRvIGJvb3QgdGhlIGxpdmUgaW1hZ2VzIHRoYXQgYXJlIG9wdGlvbmFsbHkKKyAgICAgICAgICAgICAgICBpbmNsdWRlZCBpbiB0aGUgPGZpbGVuYW1lPmJpbmFyeS88L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPiBmaWxlIGFsc28gcHJvdmlkZXMgc3BlY2lhbCBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yCisgICAgICAgICAgICAgICAgYnVpbGRpbmcgdGhlIGltYWdlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBdCBhIG1pbmltdW0sIHRoZSA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZSBtdXN0CisgICAgICAgICAgICAgICAgY29udGFpbiBhIGxpc3Qgb2YgZGVwZW5kZW5jaWVzLCBzdWNoIGFzIHRoZSBuYW1lcyBvZgorICAgICAgICAgICAgICAgIGFueSBvdGhlciBsYXllcnMgb24gd2hpY2ggdGhlIEJTUCBkZXBlbmRzIGFuZCB0aGUgbmFtZSBvZgorICAgICAgICAgICAgICAgIHRoZSBCU1AgbWFpbnRhaW5lciB3aXRoIGhpcyBvciBoZXIgY29udGFjdCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9ImJzcC1maWxlbGF5b3V0LXJlYWRtZS1zb3VyY2VzIj4KKyAgICAgICAgICAgIDx0aXRsZT5SRUFETUUuc291cmNlcyBGaWxlPC90aXRsZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGlzIGZpbGUgaW4gdGhlIEJTUCBMYXllciBhdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vUkVBRE1FLnNvdXJjZXMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBwcm92aWRlcyBpbmZvcm1hdGlvbiBvbiB3aGVyZSB0byBsb2NhdGUgdGhlIEJTUAorICAgICAgICAgICAgICAgIHNvdXJjZSBmaWxlcyB1c2VkIHRvIGJ1aWxkIHRoZSBpbWFnZXMgKGlmIGFueSkgdGhhdCByZXNpZGUgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9iaW5hcnk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBJbWFnZXMgaW4gdGhlIDxmaWxlbmFtZT5iaW5hcnk8L2ZpbGVuYW1lPiB3b3VsZCBiZSBpbWFnZXMKKyAgICAgICAgICAgICAgICByZWxlYXNlZCB3aXRoIHRoZSBCU1AuCisgICAgICAgICAgICAgICAgVGhlIGluZm9ybWF0aW9uIGluIHRoZSA8ZmlsZW5hbWU+UkVBRE1FLnNvdXJjZXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUgYWxzbyBoZWxwcyB5b3UgZmluZCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPgorICAgICAgICAgICAgICAgIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGltYWdlcyB0aGF0IHNoaXAgd2l0aCB0aGUgQlNQLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBJZiB0aGUgQlNQJ3MgPGZpbGVuYW1lPmJpbmFyeTwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpcworICAgICAgICAgICAgICAgICAgICBtaXNzaW5nIG9yIHRoZSBkaXJlY3RvcnkgaGFzIG5vIGltYWdlcywgYW4gZXhpc3RpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJFQURNRS5zb3VyY2VzPC9maWxlbmFtZT4gZmlsZSBpcworICAgICAgICAgICAgICAgICAgICBtZWFuaW5nbGVzcy4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSJic3AtZmlsZWxheW91dC1iaW5hcnkiPgorICAgICAgICAgICAgPHRpdGxlPlByZS1idWlsdCBVc2VyIEJpbmFyaWVzPC90aXRsZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGVzZSBmaWxlcyBpbiB0aGUgQlNQIExheWVyIGF0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9iaW5hcnkvPHJlcGxhY2VhYmxlPmJvb3RhYmxlX2ltYWdlczwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbmFsIGFyZWEgY29udGFpbnMgdXNlZnVsIHByZS1idWlsdCBrZXJuZWxzIGFuZAorICAgICAgICAgICAgICAgIHVzZXItc3BhY2UgZmlsZXN5c3RlbSBpbWFnZXMgcmVsZWFzZWQgd2l0aCB0aGUgQlNQIHRoYXQgYXJlCisgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGUgdG8gdGhlIHRhcmdldCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgdHlwaWNhbGx5IGNvbnRhaW5zIGdyYXBoaWNhbCAoZS5nLiBTYXRvKSBhbmQKKyAgICAgICAgICAgICAgICBtaW5pbWFsIGxpdmUgaW1hZ2VzIHdoZW4gdGhlIEJTUCB0YXJiYWxsIGhhcyBiZWVuIGNyZWF0ZWQgYW5kCisgICAgICAgICAgICAgICAgbWFkZSBhdmFpbGFibGUgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOyc+WW9jdG8gUHJvamVjdDwvdWxpbms+IHdlYnNpdGUuCisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlc2Uga2VybmVscyBhbmQgaW1hZ2VzIHRvIGdldCBhIHN5c3RlbSBydW5uaW5nCisgICAgICAgICAgICAgICAgYW5kIHF1aWNrbHkgZ2V0IHN0YXJ0ZWQgb24gZGV2ZWxvcG1lbnQgdGFza3MuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBleGFjdCB0eXBlcyBvZiBiaW5hcmllcyBwcmVzZW50IGFyZSBoaWdobHkKKyAgICAgICAgICAgICAgICBoYXJkd2FyZS1kZXBlbmRlbnQuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPiBmaWxlIHNob3VsZCBiZSBwcmVzZW50IGluIHRoZQorICAgICAgICAgICAgICAgIEJTUCBMYXllciBhbmQgaXQgd2lsbCBleHBsYWluIGhvdyB0byB1c2UgdGhlIGltYWdlcyB3aXRoIHRoZQorICAgICAgICAgICAgICAgIHRhcmdldCBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHRoZSA8ZmlsZW5hbWU+UkVBRE1FLnNvdXJjZXM8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgc2hvdWxkIGJlIHByZXNlbnQgdG8gbG9jYXRlIHRoZSBzb3VyY2VzIHVzZWQgdG8gYnVpbGQgdGhlCisgICAgICAgICAgICAgICAgaW1hZ2VzIGFuZCBwcm92aWRlIGluZm9ybWF0aW9uIG9uIHRoZSBNZXRhZGF0YS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2JzcC1maWxlbGF5b3V0LWxheWVyJz4KKyAgICAgICAgICAgIDx0aXRsZT5MYXllciBDb25maWd1cmF0aW9uIEZpbGU8L3RpdGxlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoaXMgZmlsZSBpbiB0aGUgQlNQIExheWVyIGF0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9jb25mL2xheWVyLmNvbmYKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZSBpZGVudGlmaWVzIHRoZSBmaWxlIHN0cnVjdHVyZSBhcyBhCisgICAgICAgICAgICAgICAgbGF5ZXIsIGlkZW50aWZpZXMgdGhlCisgICAgICAgICAgICAgICAgY29udGVudHMgb2YgdGhlIGxheWVyLCBhbmQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBidWlsZAorICAgICAgICAgICAgICAgIHN5c3RlbSBzaG91bGQgdXNlIGl0LgorICAgICAgICAgICAgICAgIEdlbmVyYWxseSwgYSBzdGFuZGFyZCBib2lsZXJwbGF0ZSBmaWxlIHN1Y2ggYXMgdGhlIGZvbGxvd2luZyB3b3Jrcy4KKyAgICAgICAgICAgICAgICBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIHlvdSB3b3VsZCByZXBsYWNlICI8cmVwbGFjZWFibGU+YnNwPC9yZXBsYWNlYWJsZT4iIGFuZAorICAgICAgICAgICAgICAgICI8cmVwbGFjZWFibGU+X2JzcDwvcmVwbGFjZWFibGU+IiB3aXRoIHRoZSBhY3R1YWwgbmFtZQorICAgICAgICAgICAgICAgIG9mIHRoZSBCU1AgKGkuZS4gPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4gZnJvbSB0aGUgZXhhbXBsZSB0ZW1wbGF0ZSkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIFdlIGhhdmUgYSBjb25mIGFuZCBjbGFzc2VzIGRpcmVjdG9yeSwgYWRkIHRvIEJCUEFUSAorICAgICBCQlBBVEggLj0gIjoke0xBWUVSRElSfSIKKworICAgICAjIFdlIGhhdmUgYSByZWNpcGVzIGRpcmVjdG9yeSwgYWRkIHRvIEJCRklMRVMKKyAgICAgQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYiBcCisgICAgICAgICAgICAgJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYmFwcGVuZCIKKworICAgICBCQkZJTEVfQ09MTEVDVElPTlMgKz0gIjxyZXBsYWNlYWJsZT5ic3A8L3JlcGxhY2VhYmxlPiIKKyAgICAgQkJGSUxFX1BBVFRFUk5fPHJlcGxhY2VhYmxlPmJzcDwvcmVwbGFjZWFibGU+ID0gIl4ke0xBWUVSRElSfS8iCisgICAgIEJCRklMRV9QUklPUklUWV88cmVwbGFjZWFibGU+YnNwPC9yZXBsYWNlYWJsZT4gPSAiNiIKKworICAgICBMQVlFUkRFUEVORFNfPHJlcGxhY2VhYmxlPmJzcDwvcmVwbGFjZWFibGU+ID0gImludGVsIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gaWxsdXN0cmF0ZSB0aGUgc3RyaW5nIHN1YnN0aXR1dGlvbnMsIGhlcmUgYXJlIHRoZSBjb3JyZXNwb25kaW5nIHN0YXRlbWVudHMKKyAgICAgICAgICAgICAgICBmcm9tIHRoZSBlRW1lbmxvdyA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBXZSBoYXZlIGEgY29uZiBhbmQgY2xhc3NlcyBkaXJlY3RvcnksIGFkZCB0byBCQlBBVEgKKyAgICAgQkJQQVRIIC49ICI6JHtMQVlFUkRJUn0iCisKKyAgICAgIyBXZSBoYXZlIHJlY2lwZXMtKiBkaXJlY3RvcmllcywgYWRkIHRvIEJCRklMRVMKKyAgICAgQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYiBcCisJICAgICAke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIgorCisgICAgIEJCRklMRV9DT0xMRUNUSU9OUyArPSAiZW1lbmxvdyIKKyAgICAgQkJGSUxFX1BBVFRFUk5fZW1lbmxvdyA6PSAiXiR7TEFZRVJESVJ9LyIKKyAgICAgQkJGSUxFX1BSSU9SSVRZX2VtZW5sb3cgPSAiNiIKKworICAgICBMQVlFUkRFUEVORFNfZW1lbmxvdyA9ICJpbnRlbCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBzaW1wbHkgbWFrZXMKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNiaXRiYWtlLXRlcm0nPkJpdEJha2U8L3VsaW5rPgorICAgICAgICAgICAgICAgIGF3YXJlIG9mIHRoZSByZWNpcGVzIGFuZCBjb25maWd1cmF0aW9uIGRpcmVjdG9yaWVzLgorICAgICAgICAgICAgICAgIFRoZSBmaWxlIG11c3QgZXhpc3Qgc28gdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjYW4gcmVjb2duaXplIHRoZSBCU1AuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSJic3AtZmlsZWxheW91dC1tYWNoaW5lIj4KKyAgICAgICAgICAgIDx0aXRsZT5IYXJkd2FyZSBDb25maWd1cmF0aW9uIE9wdGlvbnM8L3RpdGxlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZXNlIGZpbGVzIGluIHRoZSBCU1AgTGF5ZXIgYXQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L2NvbmYvbWFjaGluZS8qLmNvbmYKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBtYWNoaW5lIGZpbGVzIGJpbmQgdG9nZXRoZXIgYWxsIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgZWxzZXdoZXJlCisgICAgICAgICAgICAgICAgaW4gdGhlIEJTUCBpbnRvIGEgZm9ybWF0IHRoYXQgdGhlIGJ1aWxkIHN5c3RlbSBjYW4gdW5kZXJzdGFuZC4KKyAgICAgICAgICAgICAgICBJZiB0aGUgQlNQIHN1cHBvcnRzIG11bHRpcGxlIG1hY2hpbmVzLCBtdWx0aXBsZSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZXMKKyAgICAgICAgICAgICAgICBjYW4gYmUgcHJlc2VudC4KKyAgICAgICAgICAgICAgICBUaGVzZSBmaWxlbmFtZXMgY29ycmVzcG9uZCB0byB0aGUgdmFsdWVzIHRvIHdoaWNoIHVzZXJzIGhhdmUgc2V0IHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4gdmFyaWFibGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZXNlIGZpbGVzIGRlZmluZSB0aGluZ3Mgc3VjaCBhcyB0aGUga2VybmVsIHBhY2thZ2UgdG8gdXNlCisgICAgICAgICAgICAgICAgKDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QUkVGRVJSRURfUFJPVklERVInPjxmaWxlbmFtZT5QUkVGRVJSRURfUFJPVklERVI8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgb2YgdmlydHVhbC9rZXJuZWwpLCB0aGUgaGFyZHdhcmUgZHJpdmVycyB0bworICAgICAgICAgICAgICAgIGluY2x1ZGUgaW4gZGlmZmVyZW50IHR5cGVzIG9mIGltYWdlcywgYW55IHNwZWNpYWwgc29mdHdhcmUgY29tcG9uZW50cworICAgICAgICAgICAgICAgIHRoYXQgYXJlIG5lZWRlZCwgYW55IGJvb3Rsb2FkZXIgaW5mb3JtYXRpb24sIGFuZCBhbHNvIGFueSBzcGVjaWFsIGltYWdlCisgICAgICAgICAgICAgICAgZm9ybWF0IHJlcXVpcmVtZW50cy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRWFjaCBCU1AgTGF5ZXIgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIG1hY2hpbmUgZmlsZS4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgY2FuIHN1cHBseSBtb3JlIHRoYW4gb25lIGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgY29uZmlndXJhdGlvbiBmaWxlIGNvdWxkIGFsc28gaW5jbHVkZSBhIGhhcmR3YXJlICJ0dW5pbmciCisgICAgICAgICAgICAgICAgZmlsZSB0aGF0IGlzIGNvbW1vbmx5IHVzZWQgdG8gZGVmaW5lIHRoZSBwYWNrYWdlIGFyY2hpdGVjdHVyZQorICAgICAgICAgICAgICAgIGFuZCBzcGVjaWZ5IG9wdGltaXphdGlvbiBmbGFncywgd2hpY2ggYXJlIGNhcmVmdWxseSBjaG9zZW4KKyAgICAgICAgICAgICAgICB0byBnaXZlIGJlc3QgcGVyZm9ybWFuY2Ugb24gYSBnaXZlbiBwcm9jZXNzb3IuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFR1bmluZyBmaWxlcyBhcmUgZm91bmQgaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5pYTMyLWJhc2UuaW5jPC9maWxlbmFtZT4gZmlsZSByZXNpZGVzIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyB1c2UgYW4gaW5jbHVkZSBmaWxlLCB5b3Ugc2ltcGx5IGluY2x1ZGUgdGhlbSBpbiB0aGUKKyAgICAgICAgICAgICAgICBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGVFbWVubG93IEJTUAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5lbWVubG93LW5vZW1nZC5jb25mPC9maWxlbmFtZT4gY29udGFpbnMgdGhlCisgICAgICAgICAgICAgICAgZm9sbG93aW5nIHN0YXRlbWVudHM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2ludGVsLWNvcmUyLTMyLWNvbW1vbi5pbmMKKyAgICAgcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9pbnRlbC1jb21tb24tcGtnYXJjaC5pbmMKKyAgICAgcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9tZXRhLWludGVsLmluYworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2JzcC1maWxlbGF5b3V0LW1pc2MtcmVjaXBlcyc+CisgICAgICAgICAgICA8dGl0bGU+TWlzY2VsbGFuZW91cyBCU1AtU3BlY2lmaWMgUmVjaXBlIEZpbGVzPC90aXRsZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGVzZSBmaWxlcyBpbiB0aGUgQlNQIExheWVyIGF0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9yZWNpcGVzLWJzcC8qCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbmFsIGRpcmVjdG9yeSBjb250YWlucyBtaXNjZWxsYW5lb3VzIHJlY2lwZSBmaWxlcyBmb3IKKyAgICAgICAgICAgICAgICB0aGUgQlNQLgorICAgICAgICAgICAgICAgIE1vc3Qgbm90YWJseSB3b3VsZCBiZSB0aGUgZm9ybWZhY3RvciBmaWxlcy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaW4gdGhlIGVNZW5sb3cgQlNQIHRoZXJlIGlzIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb3JtZmFjdG9yXzAuMC5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGlzIGFuCisgICAgICAgICAgICAgICAgYXBwZW5kIGZpbGUgdXNlZCB0byBhdWdtZW50IHRoZSByZWNpcGUgdGhhdCBzdGFydHMgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCB0aGVyZSBhcmUgbWFjaGluZS1zcGVjaWZpYyBzZXR0aW5ncyB1c2VkIGR1cmluZworICAgICAgICAgICAgICAgIHRoZSBidWlsZCB0aGF0IGFyZSBkZWZpbmVkIGJ5IHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYWNoY29uZmlnPC9maWxlbmFtZT4gZmlsZSBmdXJ0aGVyIGRvd24gaW4gdGhlCisgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIEluIHRoZSBlTWVubG93IGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+bWFjaGNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZSBzdXBwb3J0cyB0aGUgVmlkZW8gRWxlY3Ryb25pY3MgU3RhbmRhcmRzIEFzc29jaWF0aW9uCisgICAgICAgICAgICAgICAgKFZFU0EpIGdyYXBoaWNzIGRyaXZlcjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgQXNzdW1lIGEgVVNCIG1vdXNlIGFuZCBrZXlib2FyZCBhcmUgY29ubmVjdGVkCisgICAgIEhBVkVfVE9VQ0hTQ1JFRU49MAorICAgICBIQVZFX0tFWUJPQVJEPTEKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPjxwYXJhPgorICAgICAgICAgICAgICAgIElmIGEgQlNQIGRvZXMgbm90IGhhdmUgYSBmb3JtZmFjdG9yIGVudHJ5LCBkZWZhdWx0cyBhcmUgZXN0YWJsaXNoZWQgYWNjb3JkaW5nIHRvCisgICAgICAgICAgICAgICAgdGhlIGZvcm1mYWN0b3IgY29uZmlndXJhdGlvbiBmaWxlIHRoYXQgaXMgaW5zdGFsbGVkIGJ5IHRoZSBtYWluCisgICAgICAgICAgICAgICAgZm9ybWZhY3RvciByZWNpcGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgd2hpY2ggaXMgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgPC9wYXJhPjwvbm90ZT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2JzcC1maWxlbGF5b3V0LXJlY2lwZXMtZ3JhcGhpY3MnPgorICAgICAgICAgICAgPHRpdGxlPkRpc3BsYXkgU3VwcG9ydCBGaWxlczwvdGl0bGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlc2UgZmlsZXMgaW4gdGhlIEJTUCBMYXllciBhdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vcmVjaXBlcy1ncmFwaGljcy8qCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbmFsIGRpcmVjdG9yeSBjb250YWlucyByZWNpcGVzIGZvciB0aGUgQlNQIGlmIGl0IGhhcworICAgICAgICAgICAgICAgIHNwZWNpYWwgcmVxdWlyZW1lbnRzIGZvciBncmFwaGljcyBzdXBwb3J0LgorICAgICAgICAgICAgICAgIEFsbCBmaWxlcyB0aGF0IGFyZSBuZWVkZWQgZm9yIHRoZSBCU1AgdG8gc3VwcG9ydCBhIGRpc3BsYXkgYXJlCisgICAgICAgICAgICAgICAga2VwdCBoZXJlLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPm1ldGEtZW1lbmxvdzwvZmlsZW5hbWU+IGxheWVyLAorICAgICAgICAgICAgICAgIHdoaWNoIHN1cHBvcnRzIHRoZSBlTWVubG93IHBsYXRmb3JtIGNvbnNpc3Rpbmcgb2YgdGhlCisgICAgICAgICAgICAgICAgPHRyYWRlbWFyayBjbGFzcz0ncmVnaXN0ZXJlZCc+SW50ZWw8L3RyYWRlbWFyaz4KKyAgICAgICAgICAgICAgICA8dHJhZGVtYXJrIGNsYXNzPSd0cmFkZSc+QXRvbTwvdHJhZGVtYXJrPgorICAgICAgICAgICAgICAgIFo1eHggcHJvY2Vzc29yIHdpdGggdGhlCisgICAgICAgICAgICAgICAgPHRyYWRlbWFyayBjbGFzcz0ncmVnaXN0ZXJlZCc+SW50ZWw8L3RyYWRlbWFyaz4KKyAgICAgICAgICAgICAgICBTeXN0ZW0gQ29udHJvbGxlciBIdWIgVVMxNVcsIHVzZXMgdGhlc2UgZmlsZXMgZm9yIHN1cHBvcnRpbmcKKyAgICAgICAgICAgICAgICB0aGUgVmlkZW8gRWxlY3Ryb25pY3MgU3RhbmRhcmRzIEFzc29jaWF0aW9uIChWRVNBKSBncmFwaGljczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYmFwcGVuZAorICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9lbWVubG93LW5vZW1nZC94b3JnLmNvbmYKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdic3AtZmlsZWxheW91dC1rZXJuZWwnPgorICAgICAgICAgICAgPHRpdGxlPkxpbnV4IEtlcm5lbCBDb25maWd1cmF0aW9uPC90aXRsZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGVzZSBmaWxlcyBpbiB0aGUgQlNQIExheWVyIGF0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0byouYmJhcHBlbmQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZXNlIGZpbGVzIGFwcGVuZCB5b3VyIHNwZWNpZmljIGNoYW5nZXMgdG8gdGhlIG1haW4ga2VybmVsIHJlY2lwZSB5b3UgYXJlIHVzaW5nLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIHlvdXIgQlNQLCB5b3UgdHlwaWNhbGx5IHdhbnQgdG8gdXNlIGFuIGV4aXN0aW5nIFlvY3RvIFByb2plY3Qga2VybmVsIHJlY2lwZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICBhdCA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYXBwZW5kIHlvdXIgc3BlY2lmaWMgY2hhbmdlcyB0byB0aGUga2VybmVsIHJlY2lwZSBieSB1c2luZyBhCisgICAgICAgICAgICAgICAgc2ltaWxhcmx5IG5hbWVkIGFwcGVuZCBmaWxlLCB3aGljaCBpcyBsb2NhdGVkIGluIHRoZSBCU1AgTGF5ZXIgKGUuZy4KKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPm1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vcmVjaXBlcy1rZXJuZWwvbGludXg8L2ZpbGVuYW1lPiBkaXJlY3RvcnkpLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU3VwcG9zZSB5b3UgYXJlIHVzaW5nIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG9fMy4xNC5iYjwvZmlsZW5hbWU+IHJlY2lwZSB0byBidWlsZAorICAgICAgICAgICAgICAgIHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHlvdSBoYXZlIHNlbGVjdGVkIHRoZSBrZXJuZWwgaW4geW91cgorICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4gZmlsZSBieSBhZGRpbmcgdGhlc2UgdHlwZXMKKyAgICAgICAgICAgICAgICBvZiBzdGF0ZW1lbnRzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJsaW51eC15b2N0byIKKyAgICAgUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8gPz0gIjMuMTQlIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB0aGUgcHJlZmVycmVkIHByb3ZpZGVyIGlzIGFzc3VtZWQgYnkgZGVmYXVsdCwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUkVGRVJSRURfUFJPVklERVI8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgZG9lcyBub3QgYXBwZWFyIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIFlvdSB3b3VsZCB1c2UgdGhlIDxmaWxlbmFtZT5saW51eC15b2N0b18zLjE0LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSB0byBhcHBlbmQKKyAgICAgICAgICAgICAgICBzcGVjaWZpYyBCU1Agc2V0dGluZ3MgdG8gdGhlIGtlcm5lbCwgdGh1cyBjb25maWd1cmluZyB0aGUga2VybmVsIGZvciB5b3VyIHBhcnRpY3VsYXIgQlNQLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgbG9vayBhdCB0aGUgZXhpc3RpbmcgZU1lbmxvdyBCU1AuCisgICAgICAgICAgICAgICAgVGhlIGFwcGVuZCBmaWxlIHVzZWQgaXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3Rpbmcgc2hvd3MgdGhlIGZpbGUuCisgICAgICAgICAgICAgICAgQmUgYXdhcmUgdGhhdCB0aGUgYWN0dWFsIGNvbW1pdCBJRCBzdHJpbmdzIGluIHRoaXMgZXhhbXBsZSBsaXN0aW5nIG1pZ2h0IGJlIGRpZmZlcmVudAorICAgICAgICAgICAgICAgIHRoYW4gdGhlIGFjdHVhbCBzdHJpbmdzIGluIHRoZSBmaWxlIGZyb20gdGhlIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBHaXQgc291cmNlIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisKKyAgICAgQ09NUEFUSUJMRV9NQUNISU5FX2VtZW5sb3ctbm9lbWdkID0gImVtZW5sb3ctbm9lbWdkIgorICAgICBLTUFDSElORV9lbWVubG93LW5vZW1nZCA9ICJlbWVubG93IgorICAgICBLQlJBTkNIX2VtZW5sb3ctbm9lbWdkID0gInN0YW5kYXJkL2Jhc2UiCisgICAgIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfZW1lbmxvdy1ub2VtZ2QgPSAiIGZlYXR1cmVzL2RybS1nbWE1MDAvZHJtLWdtYTUwMC5zY2MiCisKKyAgICAgTElOVVhfVkVSU0lPTl9lbWVubG93LW5vZW1nZCA9ICIzLjE0LjE5IgorICAgICBTUkNSRVZfbWFjaGluZV9lbWVubG93LW5vZW1nZCA9ICI5MDJmMzRkMzYxMDJhNGIyMDA4Yjc3NmVjYWU2ODZmODBkMzA3ZTEyIgorICAgICBTUkNSRVZfbWV0YV9lbWVubG93LW5vZW1nZCA9ICIyOGUzOTc0MWI4YjMwMTgzMzQwMjFkOTgxMzY5ZDNmZDYxZjE4ZjViIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIGFwcGVuZCBmaWxlIGNvbnRhaW5zIHN0YXRlbWVudHMgdXNlZCB0byBzdXBwb3J0IHRoZQorICAgICAgICAgICAgICAgIGVNZW5sb3cgQlNQLgorICAgICAgICAgICAgICAgIFRoZSBmaWxlIGRlZmluZXMgbWFjaGluZXMgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNPTVBBVElCTEVfTUFDSElORSc+PGZpbGVuYW1lPkNPTVBBVElCTEVfTUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS01BQ0hJTkUnPjxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBlbnN1cmUgdGhlIG1hY2hpbmUgbmFtZSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gbWFwcyB0byB0aGUgbWFjaGluZSBuYW1lIHVzZWQgYnkgdGhlIExpbnV4IFlvY3RvCisgICAgICAgICAgICAgICAga2VybmVsLgorICAgICAgICAgICAgICAgIFRoZSBmaWxlIGFsc28gdXNlcyB0aGUgb3B0aW9uYWwKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS0JSQU5DSCc+PGZpbGVuYW1lPktCUkFOQ0g8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gZW5zdXJlIHRoZSBidWlsZCBwcm9jZXNzIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN0YW5kYXJkL2VtZW5sb3c8L2ZpbGVuYW1lPiBrZXJuZWwgYnJhbmNoLgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LRVJORUxfRkVBVFVSRVMnPjxmaWxlbmFtZT5LRVJORUxfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgZW5hYmxlcyBmZWF0dXJlcyBzcGVjaWZpYyB0byB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgKGUuZy4gSW50ZWwgR01BLTUwMCBEUk0gRHJpdmVyIGluIHRoaXMgY2FzZSkuCisgICAgICAgICAgICAgICAgVGhlIGFwcGVuZCBmaWxlIHBvaW50cyB0byBzcGVjaWZpYyBjb21taXRzIGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3J5IGFuZCB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgIGJyYW5jaGVzIHRvIGlkZW50aWZ5IHRoZSBleGFjdCBrZXJuZWwgbmVlZGVkIHRvIGJ1aWxkIHRoZQorICAgICAgICAgICAgICAgIGVNZW5sb3cgQlNQLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmUgdGhpbmcgbWlzc2luZyBpbiB0aGlzIHBhcnRpY3VsYXIgQlNQLCB3aGljaCB5b3Ugd2lsbCB0eXBpY2FsbHkgbmVlZCB3aGVuCisgICAgICAgICAgICAgICAgZGV2ZWxvcGluZyBhIEJTUCwgaXMgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUgKDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4pIGZvciB5b3VyIEJTUC4KKyAgICAgICAgICAgICAgICBXaGVuIGRldmVsb3BpbmcgYSBCU1AsIHlvdSBwcm9iYWJseSBoYXZlIGEga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSBvciBhIHNldCBvZiBrZXJuZWwKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQsIHdoZW4gdGFrZW4gdG9nZXRoZXIsIGRlZmluZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZm9yIHlvdXIgQlNQLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWNjb21wbGlzaCB0aGlzIGRlZmluaXRpb24gYnkgcHV0dGluZyB0aGUgY29uZmlndXJhdGlvbnMgaW4gYSBmaWxlIG9yIGEgc2V0IG9mIGZpbGVzCisgICAgICAgICAgICAgICAgaW5zaWRlIGEgZGlyZWN0b3J5IGxvY2F0ZWQgYXQgdGhlIHNhbWUgbGV2ZWwgYXMgeW91ciBrZXJuZWwncyBhcHBlbmQgZmlsZSBhbmQgaGF2aW5nIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgbmFtZSBhcyB0aGUga2VybmVsJ3MgbWFpbiByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICBXaXRoIGFsbCB0aGVzZSBjb25kaXRpb25zIG1ldCwgc2ltcGx5IHJlZmVyZW5jZSB0aG9zZSBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgc3RhdGVtZW50IGluIHRoZSBhcHBlbmQgZmlsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhZCBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbiBhIGZpbGUgY2FsbGVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5ldHdvcmtfY29uZmlncy5jZmc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHBsYWNlIHRoYXQgZmlsZSBpbnNpZGUgYSBkaXJlY3RvcnkgbmFtZWQgPGZpbGVuYW1lPmxpbnV4LXlvY3RvPC9maWxlbmFtZT4gYW5kIHRoZW4gYWRkCisgICAgICAgICAgICAgICAgYSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHN0YXRlbWVudCBzdWNoIGFzIHRoZSBmb2xsb3dpbmcgdG8gdGhlIGFwcGVuZCBmaWxlLgorICAgICAgICAgICAgICAgIFdoZW4gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYnVpbGRzIHRoZSBrZXJuZWwsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlCisgICAgICAgICAgICAgICAgcGlja2VkIHVwIGFuZCBhcHBsaWVkLgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSArPSAiZmlsZTovL25ldHdvcmtfY29uZmlncy5jZmciCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBncm91cCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGludG8gbXVsdGlwbGUgZmlsZXMsIHlvdSBwZXJmb3JtIGEgc2ltaWxhciBwcm9jZWR1cmUuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgZ3JvdXBzIHNlcGFyYXRlIGNvbmZpZ3VyYXRpb25zIHNwZWNpZmljYWxseSBmb3IgRXRoZXJuZXQgYW5kIGdyYXBoaWNzCisgICAgICAgICAgICAgICAgaW50byB0aGVpciBvd24gZmlsZXMgYW5kIGFkZHMgdGhlIGNvbmZpZ3VyYXRpb25zCisgICAgICAgICAgICAgICAgYnkgdXNpbmcgYSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHN0YXRlbWVudCBsaWtlIHRoZSBmb2xsb3dpbmcgaW4geW91ciBhcHBlbmQgZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly9teWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL2V0aC5jZmcgXAorICAgICAgICAgICAgZmlsZTovL2dmeC5jZmciCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTRVhUUkFQQVRIUyc+PGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBpcyBpbiBib2lsZXJwbGF0ZSBmb3JtIGluIHRoZQorICAgICAgICAgICAgICAgIHByZXZpb3VzIGV4YW1wbGUgaW4gb3JkZXIgdG8gbWFrZSBpdCBlYXN5IHRvIGRvIHRoYXQuCisgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBtdXN0IGJlIGluIHlvdXIgbGF5ZXIgb3IgQml0QmFrZSB3aWxsIG5vdCBmaW5kIHRoZSBwYXRjaGVzIG9yCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMgZXZlbiBpZiB5b3UgaGF2ZSB0aGVtIGluIHlvdXIgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGVuYWJsZXMgdGhlIGJ1aWxkIHByb2Nlc3MgdG8KKyAgICAgICAgICAgICAgICBmaW5kIHRob3NlIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBPdGhlciBtZXRob2RzIGV4aXN0IHRvIGFjY29tcGxpc2ggZ3JvdXBpbmcgYW5kIGRlZmluaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgd29ya2luZyB3aXRoIGEgbG9jYWwgY2xvbmUgb2YgdGhlIGtlcm5lbCByZXBvc2l0b3J5LAorICAgICAgICAgICAgICAgICAgICB5b3UgY291bGQgY2hlY2tvdXQgdGhlIGtlcm5lbCdzIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gYnJhbmNoLCBtYWtlIHlvdXIgY2hhbmdlcywKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZW4gcHVzaCB0aGUgY2hhbmdlcyB0byB0aGUgbG9jYWwgYmFyZSBjbG9uZSBvZiB0aGUga2VybmVsLgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVzdWx0IGlzIHRoYXQgeW91IGRpcmVjdGx5IGFkZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gYnJhbmNoIGZvciB5b3VyIEJTUC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGxpa2VseSBlbmQgdXAgaW4gdGhhdCBsb2NhdGlvbiBhbnl3YXkgaWYgdGhlIEJTUCBnZXRzCisgICAgICAgICAgICAgICAgICAgIGFkZGVkIHRvIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiBnZW5lcmFsLCBob3dldmVyLCB0aGUgWW9jdG8gUHJvamVjdCBtYWludGFpbmVycyB0YWtlIGNhcmUgb2YgbW92aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+LXNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdGhlIGtlcm5lbCdzIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICBOb3Qgb25seSBpcyBpdCBlYXNpZXIgZm9yIEJTUCBkZXZlbG9wZXJzIHRvIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0IHB1dHRpbmcgdGhvc2UKKyAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucyBpbiB0aGUgYnJhbmNoLCBidXQgaGF2aW5nIHRoZSBtYWludGFpbmVycyBkbyBpdCBhbGxvd3MgdGhlbSB0byBhcHBseQorICAgICAgICAgICAgICAgICAgICAnZ2xvYmFsJyBrbm93bGVkZ2UgYWJvdXQgdGhlIGtpbmRzIG9mIGNvbW1vbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgbXVsdGlwbGUgQlNQcyBpbgorICAgICAgICAgICAgICAgICAgICB0aGUgdHJlZSBhcmUgdHlwaWNhbGx5IHVzaW5nLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGFsbG93cyBmb3IgcHJvbW90aW9uIG9mIGNvbW1vbiBjb25maWd1cmF0aW9ucyBpbnRvIGNvbW1vbiBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncmVxdWlyZW1lbnRzLWFuZC1yZWNvbW1lbmRhdGlvbnMtZm9yLXJlbGVhc2VkLWJzcHMnPgorICAgICAgICAgICAgPHRpdGxlPlJlcXVpcmVtZW50cyBhbmQgUmVjb21tZW5kYXRpb25zIGZvciBSZWxlYXNlZCBCU1BzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQ2VydGFpbiByZXF1aXJlbWVudHMgZXhpc3QgZm9yIGEgcmVsZWFzZWQgQlNQIHRvIGJlIGNvbnNpZGVyZWQKKyAgICAgICAgICAgICAgICBjb21wbGlhbnQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHJlY29tbWVuZGF0aW9ucyBhbHNvIGV4aXN0LgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIHJlcXVpcmVtZW50cyBhbmQgcmVjb21tZW5kYXRpb25zIGZvcgorICAgICAgICAgICAgICAgIHJlbGVhc2VkIEJTUHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdyZWxlYXNlZC1ic3AtcmVxdWlyZW1lbnRzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+UmVsZWFzZWQgQlNQIFJlcXVpcmVtZW50czwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmVmb3JlIGxvb2tpbmcgYXQgQlNQIHJlcXVpcmVtZW50cywgeW91IHNob3VsZCBjb25zaWRlciB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSByZXF1aXJlbWVudHMgaGVyZSBhc3N1bWUgdGhlIEJTUCBsYXllciBpcyBhIHdlbGwtZm9ybWVkLCAibGVnYWwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIgdGhhdCBjYW4gYmUgYWRkZWQgdG8gdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGd1aWRlbGluZXMgb24gY3JlYXRpbmcgYSBsYXllciB0aGF0IG1lZXRzIHRoZXNlIGJhc2UgcmVxdWlyZW1lbnRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2JzcC1sYXllcnMnPkJTUCBMYXllcnM8L2xpbms+IiBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycyc+VW5kZXJzdGFuZGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBDcmVhdGluZyBMYXllcnMiPC91bGluaz4gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSByZXF1aXJlbWVudHMgaW4gdGhpcyBzZWN0aW9uIGFwcGx5IHJlZ2FyZGxlc3Mgb2YgaG93IHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsdGltYXRlbHkgcGFja2FnZSBhIEJTUC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGNvbnN1bHQgdGhlIHBhY2thZ2luZyBhbmQgZGlzdHJpYnV0aW9uIGd1aWRlbGluZXMgZm9yIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyByZWxlYXNlIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGFuIGV4YW1wbGUgb2YgcGFja2FnaW5nIGFuZCBkaXN0cmlidXRpb24gcmVxdWlyZW1lbnRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9J2h0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvVGhpcmRfUGFydHlfQlNQX1JlbGVhc2VfUHJvY2Vzcyc+VGhpcmQgUGFydHkgQlNQIFJlbGVhc2UgUHJvY2VzczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpa2kgcGFnZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgcmVxdWlyZW1lbnRzIGZvciB0aGUgQlNQIGFzIGl0IGlzIG1hZGUgYXZhaWxhYmxlIHRvIGEgZGV2ZWxvcGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQgb2YgdGhlIHJlbGVhc2VkIGZvcm0gb2YgdGhlIEJTUC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIEJTUCBNZXRhZGF0YSBjYW4gYmUgY29udGFpbmVkIHdpdGhpbiBhIEdpdCByZXBvc2l0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGNvdWxkIGhhdmUgYSBkaXJlY3Rvcnkgc3RydWN0dXJlIGNvbXBsZXRlbHkgZGlmZmVyZW50IGZyb20gd2hhdCBhcHBlYXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIG9mZmljaWFsbHkgcmVsZWFzZWQgQlNQIGxheWVyLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkl0IGlzIG5vdCByZXF1aXJlZCB0aGF0IHNwZWNpZmljIHBhY2thZ2VzIG9yIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmljYXRpb25zIGV4aXN0IGluIHRoZSBCU1AgbGF5ZXIsIGJleW9uZCB0aGUgcmVxdWlyZW1lbnRzIGZvciBnZW5lcmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxpYW5jZSB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBubyByZXF1aXJlbWVudCBleGlzdHMgZGljdGF0aW5nIHRoYXQgYSBzcGVjaWZpYyBrZXJuZWwgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWwgdmVyc2lvbiBiZSB1c2VkIGluIGEgZ2l2ZW4gQlNQLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSB0aGUgcmVxdWlyZW1lbnRzIGZvciBhIHJlbGVhc2VkIEJTUCB0aGF0IGNvbmZvcm1zIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0OgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5MYXllciBOYW1lOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIEJTUCBtdXN0IGhhdmUgYSBsYXllciBuYW1lIHRoYXQgZm9sbG93cyB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9qZWN0IHN0YW5kYXJkcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gQlNQIGxheWVyIG5hbWVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2JzcC1sYXllcnMnPkJTUCBMYXllcnM8L2xpbms+IiBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5GaWxlIFN5c3RlbSBMYXlvdXQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHBvc3NpYmxlLCB1c2UgdGhlIHNhbWUgZGlyZWN0b3J5IG5hbWVzIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCU1AgbGF5ZXIgYXMgbGlzdGVkIGluIHRoZSA8ZmlsZW5hbWU+cmVjaXBlcy50eHQ8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIHlvdSBzaG91bGQgcGxhY2UgcmVjaXBlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZXMpIGFuZCByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmljYXRpb25zICg8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZXMpIGludG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy0qPC9maWxlbmFtZT4gc3ViZGlyZWN0b3JpZXMgYnkgZnVuY3Rpb25hbCBhcmVhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgb3V0bGluZWQgaW4gPGZpbGVuYW1lPnJlY2lwZXMudHh0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGNhbm5vdCBmaW5kIGEgY2F0ZWdvcnkgaW4gPGZpbGVuYW1lPnJlY2lwZXMudHh0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBmaXQgYSBwYXJ0aWN1bGFyIHJlY2lwZSwgeW91IGNhbiBtYWtlIHVwIHlvdXIgb3duCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZXMtKjwvZmlsZW5hbWU+IHN1YmRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgPGZpbGVuYW1lPnJlY2lwZXMudHh0PC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGluIHRoZSBPcGVuRW1iZWRkZWQgQ29yZSBMYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+b3BlbmVtYmVkZGVkLWNvcmU8L2ZpbGVuYW1lPikgZm91bmQgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLWNvcmUvdHJlZS9tZXRhJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+V2l0aGluIGFueSBwYXJ0aWN1bGFyIDxmaWxlbmFtZT5yZWNpcGVzLSo8L2ZpbGVuYW1lPiBjYXRlZ29yeSwgdGhlIGxheW91dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBtYXRjaCB3aGF0IGlzIGZvdW5kIGluIHRoZSBPcGVuRW1iZWRkZWQgQ29yZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3J5ICg8ZmlsZW5hbWU+b3BlbmVtYmVkZGVkLWNvcmU8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciB0aGUgU291cmNlIERpcmVjdG9yeSAoPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIG1ha2Ugc3VyZSB5b3UgcGxhY2UgcmVsYXRlZCBmaWxlcyBpbiBhcHByb3ByaWF0ZWx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZCA8ZmlsZW5hbWU+cmVjaXBlcy0qPC9maWxlbmFtZT4gc3ViZGlyZWN0b3JpZXMgc3BlY2lmaWMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlJ3MgZnVuY3Rpb24sIG9yIHdpdGhpbiBhIHN1YmRpcmVjdG9yeSBjb250YWluaW5nIGEgc2V0IG9mIGNsb3NlbHktcmVsYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZXMgdGhlbXNlbHZlcyBzaG91bGQgZm9sbG93IHRoZSBnZW5lcmFsIGd1aWRlbGluZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcmVjaXBlcyB1c2VkIGluIHRoZSBZb2N0byBQcm9qZWN0IGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPSdodHRwOi8vb3BlbmVtYmVkZGVkLm9yZy93aWtpL1N0eWxlZ3VpZGUnPk9wZW5FbWJlZGRlZCBTdHlsZSBHdWlkZTwvdWxpbms+Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TGljZW5zZSBGaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgaW5jbHVkZSBhIGxpY2Vuc2UgZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGxpY2Vuc2UgY292ZXJzIHRoZSBCU1AgTWV0YWRhdGEgYXMgYSB3aG9sZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBzcGVjaWZ5IHdoaWNoIGxpY2Vuc2UgdG8gdXNlIHNpbmNlIHRoZXJlIGlzIG5vCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBsaWNlbnNlIGlmIG9uZSBpcyBub3Qgc3BlY2lmaWVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2kvbWV0YS1pbnRlbC90cmVlL21ldGEtZnJpMi9DT1BZSU5HLk1JVCc+PGZpbGVuYW1lPkNPUFlJTkcuTUlUPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgZm9yIHRoZSBGaXNoIFJpdmVyIElzbGFuZCAyIEJTUCBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtZnJpMjwvZmlsZW5hbWU+IEJTUCBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGFuIGV4YW1wbGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJFQURNRSBGaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgaW5jbHVkZSBhIDxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2kvbWV0YS1pbnRlbC90cmVlL21ldGEtZnJpMi9SRUFETUUnPjxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBmb3IgdGhlIEZpc2ggUml2ZXIgSXNsYW5kIDIgQlNQIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1mcmkyPC9maWxlbmFtZT4gQlNQIGxheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgYW4gZXhhbXBsZS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QXQgYSBtaW5pbXVtLCB0aGUgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+IGZpbGUgc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbiB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BIGJyaWVmIGRlc2NyaXB0aW9uIGFib3V0IHRoZSBoYXJkd2FyZSB0aGUgQlNQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSBsaXN0IG9mIGFsbCB0aGUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB3aGljaCBhIEJTUCBsYXllciBkZXBlbmRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlc2UgZGVwZW5kZW5jaWVzIGFyZSB0eXBpY2FsbHkgYSBsaXN0IG9mIHJlcXVpcmVkIGxheWVycyBuZWVkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJ1aWxkIHRoZSBCU1AuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGUgZGVwZW5kZW5jaWVzIHNob3VsZCBhbHNvIGNvbnRhaW4gaW5mb3JtYXRpb24gcmVnYXJkaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIHRoZSBCU1AgbWlnaHQgaGF2ZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFueSByZXF1aXJlZCBzcGVjaWFsIGxpY2Vuc2luZyBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGlzIGluZm9ybWF0aW9uIGluY2x1ZGVzIGluZm9ybWF0aW9uIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsIHZhcmlhYmxlcyBuZWVkZWQgdG8gc2F0aXNmeSBhIEVVTEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBpbnN0cnVjdGlvbnMgb24gaW5mb3JtYXRpb24gbmVlZGVkIHRvIGJ1aWxkIG9yIGRpc3RyaWJ1dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmFyaWVzIGJ1aWx0IGZyb20gdGhlIEJTUCBNZXRhZGF0YS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBuYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJTUCBsYXllciBtYWludGFpbmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgcGVyc29uIHRvIHdob20gcGF0Y2hlcyBhbmQgcXVlc3Rpb25zIHNob3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgc2VudC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZmluZCB0aGUgcmlnaHQgcGVyc29uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjaG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+SG93IHRvIFN1Ym1pdCBhIENoYW5nZTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluc3RydWN0aW9ucyBvbiBob3cgdG8gYnVpbGQgdGhlIEJTUCB1c2luZyB0aGUgQlNQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluc3RydWN0aW9ucyBvbiBob3cgdG8gYm9vdCB0aGUgQlNQIGJ1aWxkIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBCU1AgbGF5ZXIuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbnN0cnVjdGlvbnMgb24gaG93IHRvIGJvb3QgdGhlIGJpbmFyeSBpbWFnZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lZCBpbiB0aGUgPGZpbGVuYW1lPmJpbmFyeTwvZmlsZW5hbWU+IGRpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByZXNlbnQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbmZvcm1hdGlvbiBvbiBhbnkga25vd24gYnVncyBvciBpc3N1ZXMgdGhhdCB1c2VycworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGtub3cgYWJvdXQgd2hlbiBlaXRoZXIgYnVpbGRpbmcgb3IgYm9vdGluZyB0aGUgQlNQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcmllcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UkVBRE1FLnNvdXJjZXMgRmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGluY2x1ZGUgYSA8ZmlsZW5hbWU+UkVBRE1FLnNvdXJjZXM8L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZpbGUgc3BlY2lmaWVzIGV4YWN0bHkgd2hlcmUgeW91IGNhbiBmaW5kIHRoZSBzb3VyY2VzIHVzZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZSB0aGUgYmluYXJ5IGltYWdlcyBjb250YWluZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpbmFyeTwvZmlsZW5hbWU+IGRpcmVjdG9yeSwgaWYgcHJlc2VudC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpL21ldGEtaW50ZWwvdHJlZS9tZXRhLWZyaTIvUkVBRE1FLnNvdXJjZXMnPjxmaWxlbmFtZT5SRUFETUUuc291cmNlczwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGZvciB0aGUgRmlzaCBSaXZlciBJc2xhbmQgMiBCU1AgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLWZyaTI8L2ZpbGVuYW1lPiBCU1AgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhbiBleGFtcGxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5MYXllciBDb25maWd1cmF0aW9uIEZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBpbmNsdWRlIGEgPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBpZGVudGlmaWVzIHRoZSA8ZmlsZW5hbWU+bWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlNQIGxheWVyIGFzIGEgbGF5ZXIgdG8gdGhlIGJ1aWxkIHN5c3RlbS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFjaGluZSBDb25maWd1cmF0aW9uIEZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBpbmNsdWRlIG9uZSBvciBtb3JlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbWFjaGluZS88cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcyBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlc2UgY29uZmlndXJhdGlvbiBmaWxlcyBkZWZpbmUgbWFjaGluZSB0YXJnZXRzIHRoYXQgY2FuIGJlIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIEJTUCBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNdWx0aXBsZSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZXMgZGVmaW5lIHZhcmlhdGlvbnMgb2YgbWFjaGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHN1cHBvcnRlZCBieSB0aGUgQlNQLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIGEgQlNQIHN1cHBvcnRzIG11bHRpcGxlIG1hY2hpbmUgdmFyaWF0aW9ucywgeW91IG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGVxdWF0ZWx5IGRlc2NyaWJlIGVhY2ggdmFyaWF0aW9uIGluIHRoZSBCU1AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEbyBub3QgdXNlIG11bHRpcGxlIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlcyB0byBkZXNjcmliZSBkaXNwYXJhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gaGF2ZSB2ZXJ5IGRpZmZlcmVudCB0YXJnZXRzLCB5b3Ugc2hvdWxkIGNyZWF0ZSBzZXBhcmF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJTUCBsYXllcnMgZm9yIGVhY2ggdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPkl0IGlzIGNvbXBsZXRlbHkgcG9zc2libGUgZm9yIGEgZGV2ZWxvcGVyIHRvIHN0cnVjdHVyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JraW5nIHJlcG9zaXRvcnkgYXMgYSBjb25nbG9tZXJhdGlvbiBvZiB1bnJlbGF0ZWQgQlNQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMsIGFuZCB0byBwb3NzaWJseSBnZW5lcmF0ZSBCU1BzIHRhcmdldGVkIGZvciByZWxlYXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGF0IGRpcmVjdG9yeSB1c2luZyBzY3JpcHRzIG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPm1ldGEteW9jdG8tYnNwPC9maWxlbmFtZT4gbGF5ZXIpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1Y2ggY29uc2lkZXJhdGlvbnMgYXJlIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgZG9jdW1lbnQuPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdyZWxlYXNlZC1ic3AtcmVjb21tZW5kYXRpb25zJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+UmVsZWFzZWQgQlNQIFJlY29tbWVuZGF0aW9uczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSByZWNvbW1lbmRhdGlvbnMgZm9yIGEgcmVsZWFzZWQgQlNQIHRoYXQgY29uZm9ybXMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3Q6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJvb3RhYmxlIEltYWdlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJTUCByZWxlYXNlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBjb250YWluIG9uZSBvciBtb3JlIGJvb3RhYmxlIGltYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRpbmcgYm9vdGFibGUgaW1hZ2VzIGFsbG93cyB1c2VycyB0byBlYXNpbHkgdHJ5IG91dCB0aGUgQlNQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlaXIgb3duIGhhcmR3YXJlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JbiBzb21lIGNhc2VzLCBpdCBtaWdodCBub3QgYmUgY29udmVuaWVudCB0byBpbmNsdWRlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290YWJsZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHlvdSBtaWdodCB3YW50IHRvIG1ha2UgdHdvIHZlcnNpb25zIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJTUCBhdmFpbGFibGU6IG9uZSB0aGF0IGNvbnRhaW5zIGJpbmFyeSBpbWFnZXMsIGFuZCBvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGRvZXMgbm90LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB2ZXJzaW9uIHRoYXQgZG9lcyBub3QgY29udGFpbiBib290YWJsZSBpbWFnZXMgYXZvaWRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5uZWNlc3NhcnkgZG93bmxvYWQgdGltZXMgZm9yIHVzZXJzIG5vdCBpbnRlcmVzdGVkIGluIHRoZSBpbWFnZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBuZWVkIHRvIGRpc3RyaWJ1dGUgYSBCU1AgYW5kIGluY2x1ZGUgYm9vdGFibGUgaW1hZ2VzIG9yIGJ1aWxkIGtlcm5lbCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtcyBtZWFudCB0byBhbGxvdyB1c2VycyB0byBib290IHRoZSBCU1AgZm9yIGV2YWx1YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlcywgeW91IHNob3VsZCBwdXQgdGhlIGltYWdlcyBhbmQgYXJ0aWZhY3RzIHdpdGhpbiBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpbmFyeS88L2ZpbGVuYW1lPiBzdWJkaXJlY3RvcnkgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT5JZiB5b3UgZG8gaW5jbHVkZSBhIGJvb3RhYmxlIGltYWdlIGFzIHBhcnQgb2YgdGhlIEJTUCBhbmQgdGhlIGltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzIGJ1aWx0IGJ5IHNvZnR3YXJlIGNvdmVyZWQgYnkgdGhlIEdQTCBvciBvdGhlciBvcGVuIHNvdXJjZSBsaWNlbnNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBpcyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIHVuZGVyc3RhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbWVldCBhbGwgbGljZW5zaW5nIHJlcXVpcmVtZW50cywgd2hpY2ggY291bGQgaW5jbHVkZSBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBzb3VyY2UgZmlsZXMuPC9ub3RlPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Vc2UgYSBZb2N0byBMaW51eCBLZXJuZWw6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXJuZWwgcmVjaXBlcyBpbiB0aGUgQlNQIHNob3VsZCBiZSBiYXNlZCBvbiBhIFlvY3RvIExpbnV4IGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpbmcgeW91ciByZWNpcGVzIG9uIHRoZXNlIGtlcm5lbHMgcmVkdWNlcyB0aGUgY29zdHMgZm9yIG1haW50YWluaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEJTUCBhbmQgaW5jcmVhc2VzIGl0cyBzY2FsYWJpbGl0eS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIDxmaWxlbmFtZT5Zb2N0byBMaW51eCBLZXJuZWw8L2ZpbGVuYW1lPiBjYXRlZ29yeSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2knPlNvdXJjZSBSZXBvc2l0b3JpZXM8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGVzZSBrZXJuZWxzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY3VzdG9taXppbmctYS1yZWNpcGUtZm9yLWEtYnNwJz4KKyAgICAgICAgICAgIDx0aXRsZT5DdXN0b21pemluZyBhIFJlY2lwZSBmb3IgYSBCU1A8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgIElmIHlvdSBwbGFuIG9uIGN1c3RvbWl6aW5nIGEgcmVjaXBlIGZvciBhIHBhcnRpY3VsYXIgQlNQLCB5b3UgbmVlZCB0byBkbyB0aGUKKyAgICAgICAgICAgICAgIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0ZSBhIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGZvciB0aGUgbW9kaWZpZWQgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdXNpbmcgYXBwZW5kIGZpbGVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1c2luZy1iYmFwcGVuZC1maWxlcyc+VXNpbmcgLmJiYXBwZW5kIEZpbGVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgIEVuc3VyZSB5b3VyIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgaW4gdGhlIEJTUCBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHN1cHBvcnRzIHlvdXIgbWFjaGluZSBpcyBzdWNoIHRoYXQgaXQgY2FuIGJlIGZvdW5kCisgICAgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgZXhhbXBsZSBsYXRlciBpbiB0aGlzIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgUHV0IHRoZSBhcHBlbmQgZmlsZSBpbiBhIGRpcmVjdG9yeSB3aG9zZSBuYW1lIG1hdGNoZXMKKyAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hY2hpbmUncyBuYW1lIGFuZCBpcyBsb2NhdGVkIGluIGFuIGFwcHJvcHJpYXRlCisgICAgICAgICAgICAgICAgICAgICAgIHN1Yi1kaXJlY3RvcnkgaW5zaWRlIHRoZSBCU1AgbGF5ZXIgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZXMtYnNwPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5yZWNpcGVzLWdyYXBoaWNzPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZWNpcGVzLWNvcmU8L2ZpbGVuYW1lPiwgYW5kIHNvIGZvcnRoKS4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlBsYWNlIHRoZSBCU1Atc3BlY2lmaWMgZmlsZXMgaW4gdGhlIHByb3BlciBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgaW5zaWRlIHRoZSBCU1AgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgIEhvdyBleHBhbnNpdmUgdGhlIGxheWVyIGlzIGFmZmVjdHMgd2hlcmUgeW91IG11c3QgcGxhY2UgdGhlc2UgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3VyIGxheWVyIHN1cHBvcnRzIHNldmVyYWwgZGlmZmVyZW50IG1hY2hpbmUgdHlwZXMsCisgICAgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIGJlIHN1cmUgeW91ciBsYXllcidzIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgaW5jbHVkZXMgaGllcmFyY2h5CisgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgc2VwYXJhdGVzIHRoZSBmaWxlcyBvdXQgYWNjb3JkaW5nIHRvIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgbGF5ZXIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBtYWNoaW5lcywgdGhlIGxheWVyIHdvdWxkIG5vdAorICAgICAgICAgICAgICAgICAgICAgICBoYXZlIHRoYXQgYWRkaXRpb25hbCBoaWVyYXJjaHkgYW5kIHRoZSBmaWxlcyB3b3VsZCBvYnZpb3VzbHkgbm90IGJlCisgICAgICAgICAgICAgICAgICAgICAgIGFibGUgdG8gcmVzaWRlIGluIGEgbWFjaGluZS1zcGVjaWZpYyBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhIHNwZWNpZmljIGV4YW1wbGUgdG8gaGVscCB5b3UgYmV0dGVyIHVuZGVyc3RhbmQgdGhlIHByb2Nlc3MuCisgICAgICAgICAgICAgICBDb25zaWRlciBhbiBleGFtcGxlIHRoYXQgY3VzdG9taXplcyBhIHJlY2lwZSBieSBhZGRpbmcKKyAgICAgICAgICAgICAgIGEgQlNQLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZSBuYW1lZCA8ZmlsZW5hbWU+aW50ZXJmYWNlczwvZmlsZW5hbWU+IHRvIHRoZQorICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluaXQtaWZ1cGRvd25fMS4wLmJiPC9maWxlbmFtZT4gcmVjaXBlIGZvciBtYWNoaW5lICJ4eXoiIHdoZXJlIHRoZQorICAgICAgICAgICAgICAgQlNQIGxheWVyIGFsc28gc3VwcG9ydHMgc2V2ZXJhbCBvdGhlciBtYWNoaW5lcy4KKyAgICAgICAgICAgICAgIERvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVkaXQgdGhlIDxmaWxlbmFtZT5pbml0LWlmdXBkb3duXzEuMC5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgc28gdGhhdCBpdAorICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKyAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICBUaGUgYXBwZW5kIGZpbGUgbmVlZHMgdG8gYmUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXh5ei9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0ZSBhbmQgcGxhY2UgdGhlIG5ldyA8ZmlsZW5hbWU+aW50ZXJmYWNlczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUgQlNQJ3MgbGF5ZXIgaGVyZToKKyAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLXh5ei9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9maWxlcy94eXotbWFjaGluZS1vbmUvaW50ZXJmYWNlcworICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIDxmaWxlbmFtZT5tZXRhLXh5ejwvZmlsZW5hbWU+IGxheWVyIGRpZCBub3Qgc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgbWFjaGluZXMsIHlvdSB3b3VsZCBwbGFjZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbnRlcmZhY2VzPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIgaGVyZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS14eXovcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vZmlsZXMvaW50ZXJmYWNlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB0aGUgYXBwZW5kIGZpbGVzIGV4dGVuZHMgdGhlIHNlYXJjaCBwYXRoCisgICAgICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZCBzeXN0ZW0gdXNlcyB0byBmaW5kIGZpbGVzIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgZm9yIHRoaXMgZXhhbXBsZSB5b3UgbmVlZCB0byBoYXZlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZXM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaW4gdGhlIHNhbWUgbG9jYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgYXMgeW91ciBhcHBlbmQgZmlsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYnNwLWxpY2Vuc2luZy1jb25zaWRlcmF0aW9ucyc+CisgICAgICAgICAgICA8dGl0bGU+QlNQIExpY2Vuc2luZyBDb25zaWRlcmF0aW9uczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIHNvbWUgY2FzZXMsIGEgQlNQIGNvbnRhaW5zIHNlcGFyYXRlbHkgbGljZW5zZWQgSW50ZWxsZWN0dWFsIFByb3BlcnR5IChJUCkKKyAgICAgICAgICAgICAgICBmb3IgYSBjb21wb25lbnQgb3IgY29tcG9uZW50cy4KKyAgICAgICAgICAgICAgICBGb3IgdGhlc2UgY2FzZXMsIHlvdSBhcmUgcmVxdWlyZWQgdG8gYWNjZXB0IHRoZSB0ZXJtcyBvZiBhIGNvbW1lcmNpYWwgb3Igb3RoZXIKKyAgICAgICAgICAgICAgICB0eXBlIG9mIGxpY2Vuc2UgdGhhdCByZXF1aXJlcyBzb21lIGtpbmQgb2YgZXhwbGljaXQgRW5kIFVzZXIgTGljZW5zZSBBZ3JlZW1lbnQgKEVVTEEpLgorICAgICAgICAgICAgICAgIE9uY2UgdGhlIGxpY2Vuc2UgaXMgYWNjZXB0ZWQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNhbiB0aGVuIGJ1aWxkIGFuZAorICAgICAgICAgICAgICAgIGluY2x1ZGUgdGhlIGNvcnJlc3BvbmRpbmcgY29tcG9uZW50IGluIHRoZSBmaW5hbCBCU1AgaW1hZ2UuCisgICAgICAgICAgICAgICAgSWYgdGhlIEJTUCBpcyBhdmFpbGFibGUgYXMgYSBwcmUtYnVpbHQgaW1hZ2UsIHlvdSBjYW4gZG93bmxvYWQgdGhlIGltYWdlIGFmdGVyCisgICAgICAgICAgICAgICAgYWdyZWVpbmcgdG8gdGhlIGxpY2Vuc2Ugb3IgRVVMQS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNvdWxkIGZpbmQgdGhhdCBzb21lIHNlcGFyYXRlbHkgbGljZW5zZWQgY29tcG9uZW50cyB0aGF0IGFyZSBlc3NlbnRpYWwKKyAgICAgICAgICAgICAgICBmb3Igbm9ybWFsIG9wZXJhdGlvbiBvZiB0aGUgc3lzdGVtIG1pZ2h0IG5vdCBoYXZlIGFuIHVuZW5jdW1iZXJlZCAob3IgZnJlZSkKKyAgICAgICAgICAgICAgICBzdWJzdGl0dXRlLgorICAgICAgICAgICAgICAgIFdpdGhvdXQgdGhlc2UgZXNzZW50aWFsIGNvbXBvbmVudHMsIHRoZSBzeXN0ZW0gd291bGQgYmUgbm9uLWZ1bmN0aW9uYWwuCisgICAgICAgICAgICAgICAgVGhlbiBhZ2FpbiwgeW91IG1pZ2h0IGZpbmQgdGhhdCBvdGhlciBsaWNlbnNlZCBjb21wb25lbnRzIHRoYXQgYXJlIHNpbXBseQorICAgICAgICAgICAgICAgICdnb29kLXRvLWhhdmUnIG9yIHB1cmVseSBlbGVjdGl2ZSBkbyBoYXZlIGFuIHVuZW5jdW1iZXJlZCwgZnJlZSByZXBsYWNlbWVudAorICAgICAgICAgICAgICAgIGNvbXBvbmVudCB0aGF0IHlvdSBjYW4gdXNlIHJhdGhlciB0aGFuIGFncmVlaW5nIHRvIHRoZSBzZXBhcmF0ZWx5IGxpY2Vuc2VkIGNvbXBvbmVudC4KKyAgICAgICAgICAgICAgICBFdmVuIGZvciBjb21wb25lbnRzIGVzc2VudGlhbCB0byB0aGUgc3lzdGVtLCB5b3UgbWlnaHQgZmluZCBhbiB1bmVuY3VtYmVyZWQgY29tcG9uZW50CisgICAgICAgICAgICAgICAgdGhhdCBpcyBub3QgaWRlbnRpY2FsIGJ1dCB3aWxsIHdvcmsgYXMgYSBsZXNzLWNhcGFibGUgdmVyc2lvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICBsaWNlbnNlZCB2ZXJzaW9uIGluIHRoZSBCU1AgcmVjaXBlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgY2FzZXMgd2hlcmUgeW91IGNhbiBzdWJzdGl0dXRlIGEgZnJlZSBjb21wb25lbnQgYW5kIHN0aWxsCisgICAgICAgICAgICAgICAgbWFpbnRhaW4gdGhlIHN5c3RlbSdzIGZ1bmN0aW9uYWxpdHksIHRoZSAiRG93bmxvYWRzIiBwYWdlIGZyb20gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOyc+WW9jdG8gUHJvamVjdCB3ZWJzaXRlJ3M8L3VsaW5rPgorICAgICAgICAgICAgICAgIG1ha2VzIGF2YWlsYWJsZSBkZS1mZWF0dXJlZCBCU1BzCisgICAgICAgICAgICAgICAgdGhhdCBhcmUgY29tcGxldGVseSBmcmVlIG9mIGFueSBJUCBlbmN1bWJyYW5jZXMuCisgICAgICAgICAgICAgICAgRm9yIHRoZXNlIGNhc2VzLCB5b3UgY2FuIHVzZSB0aGUgc3Vic3RpdHV0aW9uIGRpcmVjdGx5IGFuZAorICAgICAgICAgICAgICAgIHdpdGhvdXQgYW55IGZ1cnRoZXIgbGljZW5zaW5nIHJlcXVpcmVtZW50cy4KKyAgICAgICAgICAgICAgICBJZiBwcmVzZW50LCB0aGVzZSBmdWxseSBkZS1mZWF0dXJlZCBCU1BzIGFyZSBuYW1lZCBhcHByb3ByaWF0ZWx5CisgICAgICAgICAgICAgICAgZGlmZmVyZW50IGFzIGNvbXBhcmVkIHRvIHRoZSBuYW1lcyBvZiB0aGUgcmVzcGVjdGl2ZQorICAgICAgICAgICAgICAgIGVuY3VtYmVyZWQgQlNQcy4KKyAgICAgICAgICAgICAgICBJZiBhdmFpbGFibGUsIHRoZXNlIHN1YnN0aXR1dGlvbnMgYXJlIHlvdXIKKyAgICAgICAgICAgICAgICBzaW1wbGVzdCBhbmQgbW9zdCBwcmVmZXJyZWQgb3B0aW9ucy4KKyAgICAgICAgICAgICAgICBVc2Ugb2YgdGhlc2Ugc3Vic3RpdHV0aW9ucyBvZiBjb3Vyc2UgYXNzdW1lcyB0aGUgcmVzdWx0aW5nIGZ1bmN0aW9uYWxpdHkgbWVldHMKKyAgICAgICAgICAgICAgICBzeXN0ZW0gcmVxdWlyZW1lbnRzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiBob3dldmVyLCBhIG5vbi1lbmN1bWJlcmVkIHZlcnNpb24gaXMgdW5hdmFpbGFibGUgb3IKKyAgICAgICAgICAgICAgICBpdCBwcm92aWRlcyB1bnN1aXRhYmxlIGZ1bmN0aW9uYWxpdHkgb3IgcXVhbGl0eSwgeW91IGNhbiB1c2UgYW4gZW5jdW1iZXJlZAorICAgICAgICAgICAgICAgIHZlcnNpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgY291cGxlIGRpZmZlcmVudCBtZXRob2RzIGV4aXN0IHdpdGhpbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0bworICAgICAgICAgICAgICAgIHNhdGlzZnkgdGhlIGxpY2Vuc2luZyByZXF1aXJlbWVudHMgZm9yIGFuIGVuY3VtYmVyZWQgQlNQLgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBkZXNjcmliZXMgdGhlbSBpbiBvcmRlciBvZiBwcmVmZXJlbmNlOgorCSAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MSUNFTlNFX0ZMQUdTJz48ZmlsZW5hbWU+TElDRU5TRV9GTEFHUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGRlZmluZSB0aGUgcmVjaXBlcyB0aGF0IGhhdmUgY29tbWVyY2lhbCBvciBvdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMgb2Ygc3BlY2lhbGx5LWxpY2Vuc2VkIHBhY2thZ2VzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZWFjaCBvZiB0aG9zZSByZWNpcGVzLCB5b3UgY2FuCisgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IGEgbWF0Y2hpbmcgbGljZW5zZSBzdHJpbmcgaW4gYQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiB2YXJpYWJsZSBuYW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUJz48ZmlsZW5hbWU+TElDRU5TRV9GTEFHU19XSElURUxJU1Q8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmeWluZyB0aGUgbWF0Y2hpbmcgbGljZW5zZSBzdHJpbmcgc2lnbmlmaWVzIHRoYXQgeW91IGFncmVlIHRvIHRoZSBsaWNlbnNlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGh1cywgdGhlIGJ1aWxkIHN5c3RlbSBjYW4gYnVpbGQgdGhlIGNvcnJlc3BvbmRpbmcgcmVjaXBlIGFuZCBpbmNsdWRlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29tcG9uZW50IGluIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNlbmFibGluZy1jb21tZXJjaWFsbHktbGljZW5zZWQtcmVjaXBlcyc+RW5hYmxpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lcmNpYWxseSBMaWNlbnNlZCBSZWNpcGVzPC91bGluaz4iIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlCisgICAgICAgICAgICAgICAgICAgICAgICBNYW51YWwgZm9yIGRldGFpbHMgb24gaG93IHRvIHVzZSB0aGVzZSB2YXJpYWJsZXMuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IGJ1aWxkIGFzIHlvdSBub3JtYWxseSB3b3VsZCwgd2l0aG91dAorCQkgICAgICAgIHNwZWNpZnlpbmcgYW55IHJlY2lwZXMgaW4gdGhlCisJCSAgICAgICAgPGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUPC9maWxlbmFtZT4sIHRoZSBidWlsZCBzdG9wcyBhbmQKKwkJICAgICAgICBwcm92aWRlcyB5b3Ugd2l0aCB0aGUgbGlzdCBvZiByZWNpcGVzIHRoYXQgeW91IGhhdmUKKwkJICAgICAgICB0cmllZCB0byBpbmNsdWRlIGluIHRoZSBpbWFnZSB0aGF0IG5lZWQgZW50cmllcyBpbgorCQkgICAgICAgIHRoZSA8ZmlsZW5hbWU+TElDRU5TRV9GTEFHU19XSElURUxJU1Q8L2ZpbGVuYW1lPi4KKwkJICAgICAgICBPbmNlIHlvdSBlbnRlciB0aGUgYXBwcm9wcmlhdGUgbGljZW5zZSBmbGFncyBpbnRvIHRoZSB3aGl0ZWxpc3QsCisJCSAgICAgICAgcmVzdGFydCB0aGUgYnVpbGQgdG8gY29udGludWUgd2hlcmUgaXQgbGVmdCBvZmYuCisJCSAgICAgICAgRHVyaW5nIHRoZSBidWlsZCwgdGhlIHByb21wdCB3aWxsIG5vdCBhcHBlYXIgYWdhaW4KKwkJICAgICAgICBzaW5jZSB5b3UgaGF2ZSBzYXRpc2ZpZWQgdGhlIHJlcXVpcmVtZW50LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPk9uY2UgdGhlIGFwcHJvcHJpYXRlIGxpY2Vuc2UgZmxhZ3MgYXJlIG9uIHRoZSB3aGl0ZSBsaXN0CisJCSAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTX1dISVRFTElTVDwvZmlsZW5hbWU+IHZhcmlhYmxlLCB5b3UKKwkJICAgICAgICBjYW4gYnVpbGQgdGhlIGVuY3VtYmVyZWQgaW1hZ2Ugd2l0aCBubyBjaGFuZ2UgYXQgYWxsCisJCSAgICAgICAgdG8gdGhlIG5vcm1hbCBidWlsZCBwcm9jZXNzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkdldCBhIHByZS1idWlsdCB2ZXJzaW9uIG9mIHRoZSBCU1A6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZ2V0IHRoaXMgdHlwZSBvZiBCU1AgYnkgdmlzaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiRG93bmxvYWRzIiBwYWdlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOyc+WW9jdG8gUHJvamVjdCB3ZWJzaXRlPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGRvd25sb2FkIEJTUCB0YXJiYWxscyB0aGF0IGNvbnRhaW4gcHJvcHJpZXRhcnkgY29tcG9uZW50cworICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgYWdyZWVpbmcgdG8gdGhlIGxpY2Vuc2luZworICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZW1lbnRzIG9mIGVhY2ggb2YgdGhlIGluZGl2aWR1YWxseSBlbmN1bWJlcmVkCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBhcyBwYXJ0IG9mIHRoZSBkb3dubG9hZCBwcm9jZXNzLgorICAgICAgICAgICAgICAgICAgICAgICAgT2J0YWluaW5nIHRoZSBCU1AgdGhpcyB3YXkgYWxsb3dzIHlvdSB0byBhY2Nlc3MgYW4gZW5jdW1iZXJlZAorICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgaW1tZWRpYXRlbHkgYWZ0ZXIgYWdyZWVpbmcgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjbGljay10aHJvdWdoIGxpY2Vuc2UgYWdyZWVtZW50cyBwcmVzZW50ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICB3ZWJzaXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgeW91cnNlbGYgdXNpbmcgdGhlIHJlY2lwZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgQlNQCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJiYWxsLCB5b3Ugd2lsbCBzdGlsbCBuZWVkIHRvIGNyZWF0ZSBhbgorICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGUgPGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUPC9maWxlbmFtZT4gdG8gbWF0Y2ggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBlbmN1bWJlcmVkIHJlY2lwZXMgaW4gdGhlIEJTUC48L3BhcmE+PC9saXN0aXRlbT4KKwkgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFByZS1jb21waWxlZCBpbWFnZXMgYXJlIGJ1bmRsZWQgd2l0aAorICAgICAgICAgICAgICAgIGEgdGltZS1saW1pdGVkIGtlcm5lbCB0aGF0IHJ1bnMgZm9yIGEKKyAgICAgICAgICAgICAgICBwcmVkZXRlcm1pbmVkIGFtb3VudCBvZiB0aW1lICgxMCBkYXlzKSBiZWZvcmUgaXQgZm9yY2VzCisgICAgICAgICAgICAgICAgdGhlIHN5c3RlbSB0byByZWJvb3QuCisgICAgICAgICAgICAgICAgVGhpcyBsaW1pdGF0aW9uIGlzIG1lYW50IHRvIGRpc2NvdXJhZ2UgZGlyZWN0IHJlZGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgb2YgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgIFlvdSBtdXN0IGV2ZW50dWFsbHkgcmVidWlsZCB0aGUgaW1hZ2UgaWYgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgcmVzdHJpY3Rpb24uCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmctdGhlLXlvY3RvLXByb2plY3RzLWJzcC10b29scyc+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgdGhlIFlvY3RvIFByb2plY3QncyBCU1AgVG9vbHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBpbmNsdWRlcyBhIGNvdXBsZSBvZiB0b29scyB0aGF0IGVuYWJsZQorICAgICAgICAgICAgICAgIHlvdSB0byBjcmVhdGUgYSA8bGluayBsaW5rZW5kPSdic3AtbGF5ZXJzJz5CU1AgbGF5ZXI8L2xpbms+CisgICAgICAgICAgICAgICAgZnJvbSBzY3JhdGNoIGFuZCBkbyBiYXNpYyBjb25maWd1cmF0aW9uIGFuZCBtYWludGVuYW5jZQorICAgICAgICAgICAgICAgIG9mIHRoZSBrZXJuZWwgd2l0aG91dCBldmVyIGxvb2tpbmcgYXQgYSBNZXRhZGF0YSBmaWxlLgorICAgICAgICAgICAgICAgIFRoZXNlIHRvb2xzIGFyZSA8ZmlsZW5hbWU+eW9jdG8tYnNwPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT55b2N0by1rZXJuZWw8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICByZXNwZWN0aXZlbHkuCisJICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBkZXNjcmliZSB0aGUgY29tbW9uIGxvY2F0aW9uIGFuZCBoZWxwIGZlYXR1cmVzIGFzIHdlbGwKKyAgICAgICAgICAgICAgICBhcyBwcm92aWRlIGRldGFpbHMgZm9yIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0by1ic3A8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPnlvY3RvLWtlcm5lbDwvZmlsZW5hbWU+IHRvb2xzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nY29tbW9uLWZlYXR1cmVzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+Q29tbW9uIEZlYXR1cmVzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZXNpZ25lZCB0byBoYXZlIGEgIGNvbW1hbmQgaW50ZXJmYWNlIHNvbWV3aGF0IGxpa2UKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZ2l0Jz5HaXQ8L3VsaW5rPiwgZWFjaAorICAgICAgICAgICAgICAgICAgICB0b29sIGlzIHN0cnVjdHVyZWQgYXMgYSBzZXQgb2Ygc3ViLWNvbW1hbmRzIHVuZGVyIGEKKyAgICAgICAgICAgICAgICAgICAgdG9wLWxldmVsIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIFRoZSB0b3AtbGV2ZWwgY29tbWFuZCAoPGZpbGVuYW1lPnlvY3RvLWJzcDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG9yIDxmaWxlbmFtZT55b2N0by1rZXJuZWw8L2ZpbGVuYW1lPikgaXRzZWxmIGRvZXMKKyAgICAgICAgICAgICAgICAgICAgbm90aGluZyBidXQgaW52b2tlIG9yIHByb3ZpZGUgaGVscCBvbiB0aGUgc3ViLWNvbW1hbmRzCisgICAgICAgICAgICAgICAgICAgIGl0IHN1cHBvcnRzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCb3RoIHRvb2xzIHJlc2lkZSBpbiB0aGUgPGZpbGVuYW1lPnNjcmlwdHMvPC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgdG8gdXNlIHRoZSBzY3JpcHRzLCB5b3UgbXVzdCA8ZmlsZW5hbWU+c291cmNlPC9maWxlbmFtZT4gdGhlCisgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IGp1c3QgYXMgeW91IHdvdWxkIHdoZW4gaW52b2tpbmcgYSBidWlsZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudiA8cmVwbGFjZWFibGU+YnVpbGRfZGlyPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgbW9zdCBpbW1lZGlhdGVseSB1c2VmdWwgZnVuY3Rpb24gaXMgdG8gZ2V0IGhlbHAgb24gYm90aCB0b29scy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWx0LWluIGhlbHAgc3lzdGVtIG1ha2VzIGl0IGVhc3kgdG8gZHJpbGwgZG93biBhdAorICAgICAgICAgICAgICAgICAgICBhbnkgdGltZSBhbmQgdmlldyB0aGUgc3ludGF4IHJlcXVpcmVkIGZvciBhbnkgc3BlY2lmaWMgY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgU2ltcGx5IGVudGVyIHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kIHdpdGggdGhlIDxmaWxlbmFtZT5oZWxwPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgeW9jdG8tYnNwIGhlbHAKKyAgICAgVXNhZ2U6CisKKyAgICAgIENyZWF0ZSBhIGN1c3RvbWl6ZWQgWW9jdG8gQlNQIGxheWVyLgorCisgICAgICB1c2FnZTogeW9jdG8tYnNwIFstLXZlcnNpb25dIFstLWhlbHBdIENPTU1BTkQgW0FSR1NdCisKKyAgICAgIEN1cnJlbnQgJ3lvY3RvLWJzcCcgY29tbWFuZHMgYXJlOgorICAgICAgICAgY3JlYXRlICAgICAgICAgICAgQ3JlYXRlIGEgbmV3IFlvY3RvIEJTUAorICAgICAgICAgbGlzdCAgICAgICAgICAgICAgTGlzdCBhdmFpbGFibGUgdmFsdWVzIGZvciBvcHRpb25zIGFuZCBCU1AgcHJvcGVydGllcworCisgICAgICBTZWUgJ3lvY3RvLWJzcCBoZWxwIENPTU1BTkQnIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGEgc3BlY2lmaWMgY29tbWFuZC4KKworCisgICAgIE9wdGlvbnM6CisgICAgICAgLS12ZXJzaW9uICAgIHNob3cgcHJvZ3JhbSdzIHZlcnNpb24gbnVtYmVyIGFuZCBleGl0CisgICAgICAgLWgsIC0taGVscCAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAtRCwgLS1kZWJ1ZyAgb3V0cHV0IGRlYnVnIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2ltaWxhcmx5LCBlbnRlcmluZyBqdXN0IHRoZSBuYW1lIG9mIGEgc3ViLWNvbW1hbmQgc2hvd3MgdGhlIGRldGFpbGVkIHVzYWdlCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGF0IHN1Yi1jb21tYW5kOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgeW9jdG8tYnNwIGNyZWF0ZQorCisgICAgIFVzYWdlOgorCisgICAgICBDcmVhdGUgYSBuZXcgWW9jdG8gQlNQCisKKyAgICAgIHVzYWdlOiB5b2N0by1ic3AgY3JlYXRlICZsdDtic3AtbmFtZSZndDsgJmx0O2thcmNoJmd0OyBbLW8gJmx0O0RJUk5BTUUmZ3Q7IHwgLS1vdXRkaXIgJmx0O0RJUk5BTUUmZ3Q7XQorICAgICAgICAgICAgIFstaSAmbHQ7SlNPTiBQUk9QRVJUWSBGSUxFJmd0OyB8IC0taW5maWxlICZsdDtKU09OIFBST1BFUlRZX0ZJTEUmZ3Q7XQorCisgICAgICBUaGlzIGNvbW1hbmQgY3JlYXRlcyBhIFlvY3RvIEJTUCBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMuCisgICAgICBUaGUgbmV3IEJTUCB3aWxsIGJlIGEgbmV3IFlvY3RvIEJTUCBsYXllciBjb250YWluZWQgYnkgZGVmYXVsdCB3aXRoaW4KKyAgICAgIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IHNwZWNpZmllZCBhcyAnbWV0YS1ic3AtbmFtZScuICBUaGUgLW8gb3B0aW9uCisgICAgICBjYW4gYmUgdXNlZCB0byBwbGFjZSB0aGUgQlNQIGxheWVyIGluIGEgZGlyZWN0b3J5IHdpdGggYSBkaWZmZXJlbnQKKyAgICAgIG5hbWUgYW5kIGxvY2F0aW9uLgorCisgICAgICAuLi4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgYW55IHN1Yi1jb21tYW5kLCB5b3UgY2FuIHVzZSB0aGUgd29yZCAiaGVscCIgb3B0aW9uIGp1c3QgYmVmb3JlIHRoZQorICAgICAgICAgICAgICAgICAgICBzdWItY29tbWFuZCB0byBnZXQgbW9yZSBleHRlbnNpdmUgZG9jdW1lbnRhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHlvY3RvLWJzcCBoZWxwIGNyZWF0ZQorCisgICAgIE5BTUUKKyAgICAgICAgIHlvY3RvLWJzcCBjcmVhdGUgLSBDcmVhdGUgYSBuZXcgWW9jdG8gQlNQCisKKyAgICAgU1lOT1BTSVMKKyAgICAgICAgIHlvY3RvLWJzcCBjcmVhdGUgJmx0O2JzcC1uYW1lJmd0OyAmbHQ7a2FyY2gmZ3Q7IFstbyAmbHQ7RElSTkFNRSZndDsgfCAtLW91dGRpciAmbHQ7RElSTkFNRSZndDtdCisgICAgICAgICAgICAgWy1pICZsdDtKU09OIFBST1BFUlRZIEZJTEUmZ3Q7IHwgLS1pbmZpbGUgJmx0O0pTT04gUFJPUEVSVFlfRklMRSZndDtdCisKKyAgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIFRoaXMgY29tbWFuZCBjcmVhdGVzIGEgWW9jdG8gQlNQIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgIHBhcmFtZXRlcnMuICBUaGUgbmV3IEJTUCB3aWxsIGJlIGEgbmV3IFlvY3RvIEJTUCBsYXllciBjb250YWluZWQKKyAgICAgICAgIGJ5IGRlZmF1bHQgd2l0aGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IHNwZWNpZmllZCBhcworICAgICAgICAgJ21ldGEtYnNwLW5hbWUnLiAgVGhlIC1vIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBwbGFjZSB0aGUgQlNQIGxheWVyCisgICAgICAgICBpbiBhIGRpcmVjdG9yeSB3aXRoIGEgZGlmZmVyZW50IG5hbWUgYW5kIGxvY2F0aW9uLgorCisgICAgICAgICBUaGUgdmFsdWUgb2YgdGhlICdrYXJjaCcgcGFyYW1ldGVyIGRldGVybWluZXMgdGhlIHNldCBvZiBmaWxlcworICAgICAgICAgdGhhdCB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgdGhlIEJTUCwgYWxvbmcgd2l0aCB0aGUgc3BlY2lmaWMgc2V0IG9mCisgICAgICAgICAncHJvcGVydGllcycgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZmlsbCBvdXQgdGhlIEJTUC1zcGVjaWZpYworICAgICAgICAgcG9ydGlvbnMgb2YgdGhlIEJTUC4gIFRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSAna2FyY2gnIHBhcmFtZXRlcgorICAgICAgICAgY2FuIGJlIGxpc3RlZCB2aWEgJ3lvY3RvLWJzcCBsaXN0IGthcmNoJy4KKworICAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTm93IHRoYXQgeW91IGtub3cgd2hlcmUgdGhlc2UgdHdvIGNvbW1hbmRzIHJlc2lkZSBhbmQgaG93IHRvIGFjY2VzcyBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgICAgICBvbiB0aGVtLCB5b3Ugc2hvdWxkIGZpbmQgaXQgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgdG8gZGlzY292ZXIgdGhlIGNvbW1hbmRzCisgICAgICAgICAgICAgICAgICAgIG5lY2Vzc2FyeSB0byBjcmVhdGUgYSBCU1AgYW5kIHBlcmZvcm0gYmFzaWMga2VybmVsIG1haW50ZW5hbmNlIG9uIHRoYXQgQlNQIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSB0b29scy4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gdXNlIHRoZSA8ZmlsZW5hbWU+eW9jdG8tbGF5ZXI8L2ZpbGVuYW1lPiB0b29sIHRvIGNyZWF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgYSAiZ2VuZXJpYyIgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhpcyB0b29sLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY3JlYXRpbmctYS1nZW5lcmFsLWxheWVyLXVzaW5nLXRoZS15b2N0by1sYXllci1zY3JpcHQnPkNyZWF0aW5nIGEgR2VuZXJhbCBMYXllciBVc2luZyB0aGUgeW9jdG8tbGF5ZXIgU2NyaXB0PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEd1aWRlLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBuZXh0IHNlY3Rpb25zIHByb3ZpZGUgYSBjb25jcmV0ZSBzdGFydGluZyBwb2ludCB0byBleHBhbmQgb24gYSBmZXcgcG9pbnRzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgbWlnaHQgbm90IGJlIGltbWVkaWF0ZWx5IG9idmlvdXMgb3IgdGhhdCBjb3VsZCB1c2UgZnVydGhlciBleHBsYW5hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLWEtbmV3LWJzcC1sYXllci11c2luZy10aGUteW9jdG8tYnNwLXNjcmlwdCc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkNyZWF0aW5nIGEgbmV3IEJTUCBMYXllciBVc2luZyB0aGUgeW9jdG8tYnNwIFNjcmlwdDwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT55b2N0by1ic3A8L2ZpbGVuYW1lPiBzY3JpcHQgY3JlYXRlcyBhIG5ldworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdic3AtbGF5ZXJzJz5CU1AgbGF5ZXI8L2xpbms+IGZvciBhbnkgYXJjaGl0ZWN0dXJlIHN1cHBvcnRlZAorICAgICAgICAgICAgICAgICAgICBieSB0aGUgWW9jdG8gUHJvamVjdCwgYXMgd2VsbCBhcyBRRU1VIHZlcnNpb25zIG9mIHRoZSBzYW1lLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBtb2RlIG9mIHRoZSBzY3JpcHQncyBvcGVyYXRpb24gaXMgdG8gcHJvbXB0IHlvdSBmb3IgaW5mb3JtYXRpb24gbmVlZGVkCisgICAgICAgICAgICAgICAgICAgIHRvIGdlbmVyYXRlIHRoZSBCU1AgbGF5ZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciB0aGUgY3VycmVudCBzZXQgb2YgQlNQcywgdGhlIHNjcmlwdCBwcm9tcHRzIHlvdSBmb3IgdmFyaW91cyBpbXBvcnRhbnQKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyBzdWNoIGFzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBrZXJuZWwgdG8gdXNlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGJyYW5jaCBvZiB0aGF0IGtlcm5lbCB0byB1c2UgKG9yIHJlLXVzZSk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGV0aGVyIG9yIG5vdCB0byB1c2UgWCwgYW5kIGlmIHNvLCB3aGljaCBkcml2ZXJzIHRvIHVzZTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZXRoZXIgdG8gdHVybiBvbiBTTVA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGV0aGVyIHRoZSBCU1AgaGFzIGEga2V5Ym9hcmQ8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGV0aGVyIHRoZSBCU1AgaGFzIGEgdG91Y2hzY3JlZW48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SZW1haW5pbmcgY29uZmlndXJhYmxlIGl0ZW1zIGFzc29jaWF0ZWQgd2l0aCB0aGUgQlNQPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgdXNlIHRoZSA8ZmlsZW5hbWU+eW9jdG8tYnNwIGNyZWF0ZTwvZmlsZW5hbWU+IHN1Yi1jb21tYW5kIHRvIGNyZWF0ZQorICAgICAgICAgICAgICAgICAgICBhIG5ldyBCU1AgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCByZXF1aXJlcyB5b3UgdG8gc3BlY2lmeSBhIHBhcnRpY3VsYXIga2VybmVsIGFyY2hpdGVjdHVyZQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmthcmNoPC9maWxlbmFtZT4pIG9uIHdoaWNoIHRvIGJhc2UgdGhlIEJTUC4KKyAgICAgICAgICAgICAgICAgICAgQXNzdW1pbmcgeW91IGhhdmUgc291cmNlZCB0aGUgZW52aXJvbm1lbnQsIHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG8tYnNwIGxpc3Qga2FyY2g8L2ZpbGVuYW1lPiBzdWItY29tbWFuZCB0byBsaXN0IHRoZQorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmVzIGF2YWlsYWJsZSBmb3IgQlNQIGNyZWF0aW9uIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB5b2N0by1ic3AgbGlzdCBrYXJjaAorICAgICBBcmNoaXRlY3R1cmVzIGF2YWlsYWJsZToKKyAgICAgICAgIHFlbXUKKyAgICAgICAgIG1pcHM2NAorICAgICAgICAgcG93ZXJwYworICAgICAgICAgeDg2XzY0CisgICAgICAgICBhcm0KKyAgICAgICAgIG1pcHMKKyAgICAgICAgIGkzODYKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgc2VjdGlvbiBwcmVzZW50cyBhbiBleGFtcGxlIHRoYXQgdXNlcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bXlhcm08L2ZpbGVuYW1lPiBhcyB0aGUgbWFjaGluZSBuYW1lIGFuZCA8ZmlsZW5hbWU+cWVtdTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFzIHRoZSBtYWNoaW5lIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgT2YgdGhlIGF2YWlsYWJsZSBhcmNoaXRlY3R1cmVzLCA8ZmlsZW5hbWU+cWVtdTwvZmlsZW5hbWU+IGlzIHRoZSBvbmx5IGFyY2hpdGVjdHVyZQorICAgICAgICAgICAgICAgICAgICB0aGF0IGNhdXNlcyB0aGUgc2NyaXB0IHRvIHByb21wdCB5b3UgZnVydGhlciBmb3IgYW4gYWN0dWFsIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgSW4gZXZlcnkgb3RoZXIgd2F5LCB0aGlzIGFyY2hpdGVjdHVyZSBpcyByZXByZXNlbnRhdGl2ZSBvZiBob3cgY3JlYXRpbmcgYSBCU1AgZm9yCisgICAgICAgICAgICAgICAgICAgIGFuIGFjdHVhbCBtYWNoaW5lIHdvdWxkIHdvcmsuCisgICAgICAgICAgICAgICAgICAgIFRoZSByZWFzb24gdGhlIGV4YW1wbGUgdXNlcyB0aGlzIGFyY2hpdGVjdHVyZSBpcyBiZWNhdXNlIGl0IGlzIGFuIGVtdWxhdGVkIGFyY2hpdGVjdHVyZQorICAgICAgICAgICAgICAgICAgICBhbmQgY2FuIGVhc2lseSBiZSBmb2xsb3dlZCB3aXRob3V0IHJlcXVpcmluZyBhY3R1YWwgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFzIHRoZSA8ZmlsZW5hbWU+eW9jdG8tYnNwIGNyZWF0ZTwvZmlsZW5hbWU+IGNvbW1hbmQgcnVucywgZGVmYXVsdCB2YWx1ZXMgZm9yCisgICAgICAgICAgICAgICAgICAgIHRoZSBwcm9tcHRzIGFwcGVhciBpbiBicmFja2V0cy4KKyAgICAgICAgICAgICAgICAgICAgUHJlc3NpbmcgZW50ZXIgd2l0aG91dCBzdXBwbHlpbmcgYW55dGhpbmcgb24gdGhlIGNvbW1hbmQgbGluZSBvciBwcmVzc2luZyBlbnRlcgorICAgICAgICAgICAgICAgICAgICB3aXRoIGFuIGludmFsaWQgcmVzcG9uc2UgY2F1c2VzIHRoZSBzY3JpcHQgdG8gYWNjZXB0IHRoZSBkZWZhdWx0IHZhbHVlLgorICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBzY3JpcHQgY29tcGxldGVzLCB0aGUgbmV3IDxmaWxlbmFtZT5tZXRhLW15YXJtPC9maWxlbmFtZT4gQlNQIGxheWVyCisgICAgICAgICAgICAgICAgICAgIGlzIGNyZWF0ZWQgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBhc3N1bWVzIHlvdSBoYXZlIHNvdXJjZWQgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBzZXR1cCBzY3JpcHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyB0aGUgY29tcGxldGUgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHlvY3RvLWJzcCBjcmVhdGUgbXlhcm0gcWVtdQorICAgICBDaGVja2luZyBiYXNpYyBnaXQgY29ubmVjdGl2aXR5Li4uCisgICAgIERvbmUuCisgICAgIFdoaWNoIHFlbXUgYXJjaGl0ZWN0dXJlIHdvdWxkIHlvdSBsaWtlIHRvIHVzZT8gW2RlZmF1bHQ6IGkzODZdCisgICAgICAgICAxKSBpMzg2ICAgICgzMi1iaXQpCisgICAgICAgICAyKSB4ODZfNjQgICg2NC1iaXQpCisgICAgICAgICAzKSBBUk0gICAgICgzMi1iaXQpCisgICAgICAgICA0KSBQb3dlclBDICgzMi1iaXQpCisgICAgICAgICA1KSBNSVBTICAgICgzMi1iaXQpCisgICAgICAgICA2KSBNSVBTNjQgICg2NC1iaXQpCisgICAgIDMKKyAgICAgV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICgzLjE5KSBrZXJuZWw/ICh5L24pIFtkZWZhdWx0OiB5XSB5CisgICAgIERvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSBbZGVmYXVsdDogeV0KKyAgICAgR2V0dGluZyBicmFuY2hlcyBmcm9tIHJlbW90ZSByZXBvIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTMuMTkuZ2l0Li4uCisgICAgIFBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHlvdXIgbmV3IEJTUCBicmFuY2ggb246IFtkZWZhdWx0OiBzdGFuZGFyZC9iYXNlXQorICAgICAgICAgMSkgc3RhbmRhcmQvYXJtLXZlcnNhdGlsZS05MjZlanMKKyAgICAgICAgIDIpIHN0YW5kYXJkL2Jhc2UKKyAgICAgICAgIDMpIHN0YW5kYXJkL2JlYWdsZWJvYXJkCisgICAgICAgICA0KSBzdGFuZGFyZC9iZWFnbGVib25lCisgICAgICAgICA1KSBzdGFuZGFyZC9jaworICAgICAgICAgNikgc3RhbmRhcmQvY29tbW9uLXBjCisgICAgICAgICA3KSBzdGFuZGFyZC9jcm93bmJheQorICAgICAgICAgOCkgc3RhbmRhcmQvZWRnZXJvdXRlcgorICAgICAgICAgOSkgc3RhbmRhcmQvZnNsLW1wYzgzMTVlLXJkYgorICAgICAgICAgMTApIHN0YW5kYXJkL210aS1tYWx0YTMyCisgICAgICAgICAxMSkgc3RhbmRhcmQvbXRpLW1hbHRhNjQKKyAgICAgICAgIDEyKSBzdGFuZGFyZC9xZW11YXJtNjQKKyAgICAgICAgIDEzKSBzdGFuZGFyZC9xZW11cHBjCisgICAgIDEKKyAgICAgV291bGQgeW91IGxpa2UgU01QIHN1cHBvcnQ/ICh5L24pIFtkZWZhdWx0OiB5XQorICAgICBEb2VzIHlvdXIgQlNQIGhhdmUgYSB0b3VjaHNjcmVlbj8gKHkvbikgW2RlZmF1bHQ6IG5dCisgICAgIERvZXMgeW91ciBCU1AgaGF2ZSBhIGtleWJvYXJkPyAoeS9uKSBbZGVmYXVsdDogeV0KKyAgICAgTmV3IHFlbXUgQlNQIGNyZWF0ZWQgaW4gbWV0YS1teWFybQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgZXhhbXBsZSBub3c6CisgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Gb3IgdGhlIFFFTVUgYXJjaGl0ZWN0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzY3JpcHQgZmlyc3QgcHJvbXB0cyB5b3UgZm9yIHdoaWNoIGVtdWxhdGVkIGFyY2hpdGVjdHVyZSB0byB1c2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhlIGV4YW1wbGUsIHdlIHVzZSB0aGUgQVJNIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgc2NyaXB0IHRoZW4gcHJvbXB0cyB5b3UgZm9yIHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgMy4xOSBrZXJuZWwgaXMgYWNjZXB0YWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTbywgdGhlIGV4YW1wbGUgYWNjZXB0cyB0aGUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZW50ZXIgJ24nLCB0aGUgc2NyaXB0IHByb21wdHMgeW91IHRvIGZ1cnRoZXIgZW50ZXIgdGhlIGtlcm5lbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBkbyB3YW50IHRvIHVzZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5OZXh0LCB0aGUgc2NyaXB0IGFza3Mgd2hldGhlciB5b3Ugd291bGQgbGlrZSB0byBoYXZlIGEgbmV3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoIGNyZWF0ZWQgZXNwZWNpYWxseSBmb3IgeW91ciBCU1AgaW4gdGhlIGxvY2FsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbG9jYWwta2VybmVsLWZpbGVzJz5MaW51eCBZb2N0byBLZXJuZWw8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3J5IC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBub3QsIHRoZW4gdGhlIHNjcmlwdCByZS11c2VzIGFuIGV4aXN0aW5nIGJyYW5jaC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SW4gdGhpcyBleGFtcGxlLCB0aGUgZGVmYXVsdCAob3IgInllcyIpIGlzIGFjY2VwdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRodXMsIGEgbmV3IGJyYW5jaCBpcyBjcmVhdGVkIGZvciB0aGUgQlNQIHJhdGhlciB0aGFuIHVzaW5nIGEgY29tbW9uLCBzaGFyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2guCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG5ldyBicmFuY2ggaXMgdGhlIGJyYW5jaCBjb21taXR0ZWQgdG8gZm9yIGFueSBwYXRjaGVzIHlvdSBtaWdodCBsYXRlciBhZGQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlYXNvbiBhIG5ldyBicmFuY2ggaXMgdGhlIGRlZmF1bHQgaXMgdGhhdCB0eXBpY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQlNQcyBkbyByZXF1aXJlIEJTUC1zcGVjaWZpYyBwYXRjaGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0b29sIHRodXMgYXNzdW1lcyB0aGF0IG1vc3Qgb2YgdGltZSBhIG5ldyBicmFuY2ggaXMgcmVxdWlyZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UmVnYXJkbGVzcyBvZiB3aGljaCBjaG9pY2UgeW91IG1ha2UgaW4gdGhlIHByZXZpb3VzIHN0ZXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IGFyZSBub3cgZ2l2ZW4gdGhlIG9wcG9ydHVuaXR5IHRvIHNlbGVjdCBhIHBhcnRpY3VsYXIgbWFjaGluZSBicmFuY2ggb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCB0byBiYXNlIHlvdXIgbmV3IEJTUC1zcGVjaWZpYyBtYWNoaW5lIGJyYW5jaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciB0byByZS11c2UgaWYgeW91IGhhZCBlbGVjdGVkIHRvIG5vdCBjcmVhdGUgYSBuZXcgYnJhbmNoKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoaXMgZXhhbXBsZSBpcyBnZW5lcmF0aW5nIGFuIEFSTS1iYXNlZCBCU1AsIHRoZSBleGFtcGxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcyA8ZmlsZW5hbWU+IzE8L2ZpbGVuYW1lPiBhdCB0aGUgcHJvbXB0LCB3aGljaCBzZWxlY3RzIHRoZSBBUk0tdmVyc2F0aWxlIGJyYW5jaC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgcmVtYWluZGVyIG9mIHRoZSBwcm9tcHRzIGFyZSByb3V0aW5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIGFyZSBhY2NlcHRlZCBmb3IgZWFjaC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CeSBkZWZhdWx0LCB0aGUgc2NyaXB0IGNyZWF0ZXMgdGhlIG5ldyBCU1AgTGF5ZXIgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPnBva3kvYnVpbGQ8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIE9uY2UgdGhlIEJTUCBMYXllciBpcyBjcmVhdGVkLCB5b3UgbXVzdCBhZGQgaXQgdG8geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQkxBWUVSUyA9ID8gIiBcCisgICAgICAgIC91c3IvbG9jYWwvc3JjL3lvY3RvL21ldGEgXAorICAgICAgICAvdXNyL2xvY2FsL3NyYy95b2N0by9tZXRhLXlvY3RvIFwKKyAgICAgICAgL3Vzci9sb2NhbC9zcmMveW9jdG8vbWV0YS15b2N0by1ic3AgXAorICAgICAgICAvdXNyL2xvY2FsL3NyYy95b2N0by9tZXRhLW15YXJtIFwKKyAgICAgICAgIgorCisgICAgIEJCTEFZRVJTX05PTl9SRU1PVkFCTEUgPz0gIiBcCisgICAgICAgIC91c3IvbG9jYWwvc3JjL3lvY3RvL21ldGEgXAorICAgICAgICAvdXNyL2xvY2FsL3NyYy95b2N0by9tZXRhLXlvY3RvIFwKKyAgICAgICAgIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEFkZGluZyB0aGUgbGF5ZXIgdG8gdGhpcyBmaWxlIGFsbG93cyB0aGUgYnVpbGQgc3lzdGVtIHRvIGJ1aWxkIHRoZSBCU1AgYW5kCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsPC9maWxlbmFtZT4gdG9vbCB0byBiZSBhYmxlIHRvIGZpbmQgdGhlIGxheWVyIGFuZAorICAgICAgICAgICAgICAgICAgICBvdGhlciBNZXRhZGF0YSBpdCBuZWVkcyBvbiB3aGljaCB0byBvcGVyYXRlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J21hbmFnaW5nLWtlcm5lbC1wYXRjaGVzLWFuZC1jb25maWctaXRlbXMtd2l0aC15b2N0by1rZXJuZWwnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5NYW5hZ2luZyBLZXJuZWwgUGF0Y2hlcyBhbmQgQ29uZmlnIEl0ZW1zIHdpdGggeW9jdG8ta2VybmVsPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBc3N1bWluZyB5b3UgaGF2ZSBjcmVhdGVkIGEgPGxpbmsgbGlua2VuZD0nYnNwLWxheWVycyc+QlNQIExheWVyPC9saW5rPiB1c2luZworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdjcmVhdGluZy1hLW5ldy1ic3AtbGF5ZXItdXNpbmctdGhlLXlvY3RvLWJzcC1zY3JpcHQnPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG8tYnNwPC9maWxlbmFtZT48L2xpbms+IGFuZCB5b3UgYWRkZWQgaXQgdG8geW91cgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJMQVlFUlMnPjxmaWxlbmFtZT5CQkxBWUVSUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSwgeW91IGNhbiBub3cgdXNlCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsPC9maWxlbmFtZT4gc2NyaXB0IHRvIGFkZCBwYXRjaGVzIGFuZCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGl0ZW1zIHRvIHRoZSBCU1AncyBrZXJuZWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsPC9maWxlbmFtZT4gc2NyaXB0IGFsbG93cyB5b3UgdG8gYWRkLCByZW1vdmUsIGFuZCBsaXN0IHBhdGNoZXMKKyAgICAgICAgICAgICAgICAgICAgYW5kIGtlcm5lbCBjb25maWcgc2V0dGluZ3MgdG8gYSBCU1AncyBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEFsbCB5b3UgbmVlZCB0byBkbyBpcyB1c2UgdGhlIGFwcHJvcHJpYXRlIHN1Yi1jb21tYW5kLgorICAgICAgICAgICAgICAgICAgICBSZWNhbGwgdGhhdCB0aGUgZWFzaWVzdCB3YXkgdG8gc2VlIGV4YWN0bHkgd2hhdCBzdWItY29tbWFuZHMgYXJlIGF2YWlsYWJsZQorICAgICAgICAgICAgICAgICAgICBpcyB0byB1c2UgdGhlIDxmaWxlbmFtZT55b2N0by1rZXJuZWw8L2ZpbGVuYW1lPiBidWlsdC1pbiBoZWxwIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB5b2N0by1rZXJuZWwgLS1oZWxwCisgICAgIFVzYWdlOgorICAgICAgTW9kaWZ5IGFuZCBsaXN0IFlvY3RvIEJTUCBrZXJuZWwgY29uZmlnIGl0ZW1zIGFuZCBwYXRjaGVzLgorICAgICAgdXNhZ2U6IHlvY3RvLWtlcm5lbCBbLS12ZXJzaW9uXSBbLS1oZWxwXSBDT01NQU5EIFtBUkdTXQorICAgICAgQ3VycmVudCAneW9jdG8ta2VybmVsJyBjb21tYW5kcyBhcmU6CisgICAgICAgIGNvbmZpZyBsaXN0ICAgICAgIExpc3QgdGhlIG1vZGlmaWFibGUgc2V0IG9mIGJhcmUga2VybmVsIGNvbmZpZyBvcHRpb25zIGZvciBhIEJTUAorICAgICAgICBjb25maWcgYWRkICAgICAgICBBZGQgb3IgbW9kaWZ5IGJhcmUga2VybmVsIGNvbmZpZyBvcHRpb25zIGZvciBhIEJTUAorICAgICAgICBjb25maWcgcm0gICAgICAgICBSZW1vdmUgYmFyZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgZnJvbSBhIEJTUAorICAgICAgICBwYXRjaCBsaXN0ICAgICAgICBMaXN0IHRoZSBwYXRjaGVzIGFzc29jaWF0ZWQgd2l0aCBhIEJTUAorICAgICAgICBwYXRjaCBhZGQgICAgICAgICBQYXRjaCB0aGUgWW9jdG8ga2VybmVsIGZvciBhIEJTUAorICAgICAgICBwYXRjaCBybSAgICAgICAgICBSZW1vdmUgcGF0Y2hlcyBmcm9tIGEgQlNQCisgICAgICAgIGZlYXR1cmUgbGlzdCAgICAgIExpc3QgdGhlIGZlYXR1cmVzIHVzZWQgYnkgYSBCU1AKKyAgICAgICAgZmVhdHVyZSBhZGQgICAgICAgSGF2ZSBhIEJTUCB1c2UgYSBmZWF0dXJlCisgICAgICAgIGZlYXR1cmUgcm0gICAgICAgIEhhdmUgYSBCU1Agc3RvcCB1c2luZyBhIGZlYXR1cmUKKyAgICAgICAgZmVhdHVyZXMgbGlzdCAgICAgTGlzdCB0aGUgZmVhdHVyZXMgYXZhaWxhYmxlIHRvIEJTUHMKKyAgICAgICAgZmVhdHVyZSBkZXNjcmliZSAgRGVzY3JpYmUgYSBwYXJ0aWN1bGFyIGZlYXR1cmUKKyAgICAgICAgZmVhdHVyZSBjcmVhdGUgICAgQ3JlYXRlIGEgbmV3IEJTUC1sb2NhbCBmZWF0dXJlCisgICAgICAgIGZlYXR1cmUgZGVzdHJveSAgIFJlbW92ZSBhIEJTUC1sb2NhbCBmZWF0dXJlCisgICAgICBTZWUgJ3lvY3RvLWtlcm5lbCBoZWxwIENPTU1BTkQnIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGEgc3BlY2lmaWMgY29tbWFuZC4KKyAgICAgT3B0aW9uczoKKyAgICAgICAtLXZlcnNpb24gICAgc2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQKKyAgICAgICAtaCwgLS1oZWxwICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgIC1ELCAtLWRlYnVnICBvdXRwdXQgZGVidWcgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnlvY3RvLWtlcm5lbCBwYXRjaCBhZGQ8L2ZpbGVuYW1lPiBzdWItY29tbWFuZCBhbGxvd3MgeW91IHRvIGFkZCBhCisgICAgICAgICAgICAgICAgICAgIHBhdGNoIHRvIGEgQlNQLgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgYWRkcyB0d28gcGF0Y2hlcyB0byB0aGUgPGZpbGVuYW1lPm15YXJtPC9maWxlbmFtZT4gQlNQOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgeW9jdG8ta2VybmVsIHBhdGNoIGFkZCBteWFybSB+L3Rlc3QucGF0Y2gKKyAgICAgQWRkZWQgcGF0Y2hlczoKKyAgICAgICB0ZXN0LnBhdGNoCisKKyAgICAgJCB5b2N0by1rZXJuZWwgcGF0Y2ggYWRkIG15YXJtIH4veW9jdG8tdGVzdG1vZC5wYXRjaAorICAgICBBZGRlZCBwYXRjaGVzOgorICAgICAgIHlvY3RvLXRlc3Rtb2QucGF0Y2gKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT5BbHRob3VnaCB0aGUgcHJldmlvdXMgZXhhbXBsZSBhZGRzIHBhdGNoZXMgb25lIGF0IGEgdGltZSwgaXQgaXMgcG9zc2libGUKKyAgICAgICAgICAgICAgICAgICAgdG8gYWRkIG11bHRpcGxlIHBhdGNoZXMgYXQgdGhlIHNhbWUgdGltZS48L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdmVyaWZ5IHBhdGNoZXMgaGF2ZSBiZWVuIGFkZGVkIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsIHBhdGNoIGxpc3Q8L2ZpbGVuYW1lPiBzdWItY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgeW9jdG8ta2VybmVsIHBhdGNoIGxpc3QgbXlhcm0KKyAgICAgVGhlIGN1cnJlbnQgc2V0IG9mIG1hY2hpbmUtc3BlY2lmaWMgcGF0Y2hlcyBmb3IgbXlhcm0gaXM6CisgICAgICAgMSkgdGVzdC5wYXRjaAorICAgICAgIDIpIHlvY3RvLXRlc3Rtb2QucGF0Y2gKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gdXNlIHRoZSA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsPC9maWxlbmFtZT4gc2NyaXB0IHRvCisgICAgICAgICAgICAgICAgICAgIHJlbW92ZSBhIHBhdGNoIHVzaW5nIHRoZSA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsIHBhdGNoIHJtPC9maWxlbmFtZT4gc3ViLWNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHlvY3RvLWtlcm5lbCBwYXRjaCBybSBteWFybQorICAgICBTcGVjaWZ5IHRoZSBwYXRjaGVzIHRvIHJlbW92ZToKKyAgICAgICAxKSB0ZXN0LnBhdGNoCisgICAgICAgMikgeW9jdG8tdGVzdG1vZC5wYXRjaAorICAgICAxCisgICAgIFJlbW92ZWQgcGF0Y2hlczoKKyAgICAgICB0ZXN0LnBhdGNoCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWdhaW4sIHVzaW5nIHRoZSA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsIHBhdGNoIGxpc3Q8L2ZpbGVuYW1lPiBzdWItY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICAgeW91IGNhbiB2ZXJpZnkgdGhhdCB0aGUgcGF0Y2ggd2FzIGluIGZhY3QgcmVtb3ZlZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHlvY3RvLWtlcm5lbCBwYXRjaCBsaXN0IG15YXJtCisgICAgIFRoZSBjdXJyZW50IHNldCBvZiBtYWNoaW5lLXNwZWNpZmljIHBhdGNoZXMgZm9yIG15YXJtIGlzOgorICAgICAgIDEpIHlvY3RvLXRlc3Rtb2QucGF0Y2gKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiBhIGNvbXBsZXRlbHkgc2ltaWxhciB3YXksIHlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsIGNvbmZpZyBhZGQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzdWItY29tbWFuZCB0byBhZGQgb25lIG9yIG1vcmUga2VybmVsIGNvbmZpZyBpdGVtIHNldHRpbmdzIHRvIGEgQlNQLgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGFkZCBhIGNvdXBsZSBvZiBjb25maWcgaXRlbXMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5teWFybTwvZmlsZW5hbWU+IEJTUDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHlvY3RvLWtlcm5lbCBjb25maWcgYWRkIG15YXJtIENPTkZJR19NSVNDX0RFVklDRVM9eQorICAgICBBZGRlZCBpdGVtOgorICAgICAgIENPTkZJR19NSVNDX0RFVklDRVM9eQorCisgICAgICQgeW9jdG8ta2VybmVsIGNvbmZpZyBhZGQgbXlhcm0gQ09ORklHX1lPQ1RPX1RFU1RNT0Q9eQorICAgICBBZGRlZCBpdGVtOgorICAgICAgIENPTkZJR19ZT0NUT19URVNUTU9EPXkKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFsdGhvdWdoIHRoZSBwcmV2aW91cyBleGFtcGxlIGFkZHMgY29uZmlnIGl0ZW1zIG9uZSBhdCBhIHRpbWUsIGl0IGlzIHBvc3NpYmxlCisgICAgICAgICAgICAgICAgICAgICAgICB0byBhZGQgbXVsdGlwbGUgY29uZmlnIGl0ZW1zIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBsaXN0IHRoZSBjb25maWcgaXRlbXMgbm93IGFzc29jaWF0ZWQgd2l0aCB0aGUgQlNQLgorICAgICAgICAgICAgICAgICAgICBEb2luZyBzbyBzaG93cyB5b3UgdGhlIGNvbmZpZyBpdGVtcyB5b3UgYWRkZWQgYXMgd2VsbCBhcyBvdGhlcnMgYXNzb2NpYXRlZAorICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBCU1A6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB5b2N0by1rZXJuZWwgY29uZmlnIGxpc3QgbXlhcm0KKyAgICAgVGhlIGN1cnJlbnQgc2V0IG9mIG1hY2hpbmUtc3BlY2lmaWMga2VybmVsIGNvbmZpZyBpdGVtcyBmb3IgbXlhcm0gaXM6CisgICAgICAgICAgICAgMSkgQ09ORklHX01JU0NfREVWSUNFUz15CisgICAgICAgICAgICAgMikgQ09ORklHX1lPQ1RPX1RFU1RNT0Q9eQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZpbmFsbHksIHlvdSBjYW4gcmVtb3ZlIG9uZSBvciBtb3JlIGNvbmZpZyBpdGVtcyB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnlvY3RvLWtlcm5lbCBjb25maWcgcm08L2ZpbGVuYW1lPiBzdWItY29tbWFuZCBpbiBhIG1hbm5lcgorICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWx5IGFuYWxvZ291cyB0byA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsIHBhdGNoIHJtPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2ZpZ3VyZXMvYnNwLXRpdGxlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9ic3AtZ3VpZGUvZmlndXJlcy9ic3AtdGl0bGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MjRkZDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2ZpZ3VyZXMvYnNwLXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLWNvbW1vbi10YXNrcy54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLWNvbW1vbi10YXNrcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkyN2E4OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtY29tbW9uLXRhc2tzLnhtbApAQCAtMCwwICsxLDEwMDQ5IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0nZXh0ZW5kcG9reSc+CisKKzx0aXRsZT5Db21tb24gVGFza3M8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIGZ1bmRhbWVudGFsIHByb2NlZHVyZXMgc3VjaCBhcyBjcmVhdGluZyBsYXllcnMsCisgICAgICAgIGFkZGluZyBuZXcgc29mdHdhcmUgcGFja2FnZXMsIGV4dGVuZGluZyBvciBjdXN0b21pemluZyBpbWFnZXMsCisgICAgICAgIHBvcnRpbmcgd29yayB0byBuZXcgaGFyZHdhcmUgKGFkZGluZyBhIG5ldyBtYWNoaW5lKSwgYW5kIHNvIGZvcnRoLgorICAgICAgICBZb3Ugd2lsbCBmaW5kIHRoYXQgdGhlIHByb2NlZHVyZXMgZG9jdW1lbnRlZCBoZXJlIG9jY3VyIG9mdGVuIGluIHRoZQorICAgICAgICBkZXZlbG9wbWVudCBjeWNsZSB1c2luZyB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0idW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzIj4KKyAgICAgICAgPHRpdGxlPlVuZGVyc3RhbmRpbmcgYW5kIENyZWF0aW5nIExheWVyczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBzdXBwb3J0cyBvcmdhbml6aW5nCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdtZXRhZGF0YSc+TWV0YWRhdGE8L2xpbms+IGludG8gbXVsdGlwbGUgbGF5ZXJzLgorICAgICAgICAgICAgTGF5ZXJzIGFsbG93IHlvdSB0byBpc29sYXRlIGRpZmZlcmVudCB0eXBlcyBvZiBjdXN0b21pemF0aW9ucyBmcm9tCisgICAgICAgICAgICBlYWNoIG90aGVyLgorICAgICAgICAgICAgWW91IG1pZ2h0IGZpbmQgaXQgdGVtcHRpbmcgdG8ga2VlcCBldmVyeXRoaW5nIGluIG9uZSBsYXllciB3aGVuCisgICAgICAgICAgICB3b3JraW5nIG9uIGEgc2luZ2xlIHByb2plY3QuCisgICAgICAgICAgICBIb3dldmVyLCB0aGUgbW9yZSBtb2R1bGFyIHlvdXIgTWV0YWRhdGEsIHRoZSBlYXNpZXIKKyAgICAgICAgICAgIGl0IGlzIHRvIGNvcGUgd2l0aCBmdXR1cmUgY2hhbmdlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gaWxsdXN0cmF0ZSBob3cgbGF5ZXJzIGFyZSB1c2VkIHRvIGtlZXAgdGhpbmdzIG1vZHVsYXIsIGNvbnNpZGVyCisgICAgICAgICAgICBtYWNoaW5lIGN1c3RvbWl6YXRpb25zLgorICAgICAgICAgICAgVGhlc2UgdHlwZXMgb2YgY3VzdG9taXphdGlvbnMgdHlwaWNhbGx5IHJlc2lkZSBpbiBhIHNwZWNpYWwgbGF5ZXIsCisgICAgICAgICAgICByYXRoZXIgdGhhbiBhIGdlbmVyYWwgbGF5ZXIsIGNhbGxlZCBhIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKQorICAgICAgICAgICAgTGF5ZXIuCisgICAgICAgICAgICBGdXJ0aGVybW9yZSwgdGhlIG1hY2hpbmUgY3VzdG9taXphdGlvbnMgc2hvdWxkIGJlIGlzb2xhdGVkIGZyb20KKyAgICAgICAgICAgIHJlY2lwZXMgYW5kIE1ldGFkYXRhIHRoYXQgc3VwcG9ydCBhIG5ldyBHVUkgZW52aXJvbm1lbnQsCisgICAgICAgICAgICBmb3IgZXhhbXBsZS4KKyAgICAgICAgICAgIFRoaXMgc2l0dWF0aW9uIGdpdmVzIHlvdSBhIGNvdXBsZSBvZiBsYXllcnM6IG9uZSBmb3IgdGhlIG1hY2hpbmUKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLCBhbmQgb25lIGZvciB0aGUgR1VJIGVudmlyb25tZW50LgorICAgICAgICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQsIGhvd2V2ZXIsIHRoYXQgdGhlIEJTUCBsYXllciBjYW4KKyAgICAgICAgICAgIHN0aWxsIG1ha2UgbWFjaGluZS1zcGVjaWZpYyBhZGRpdGlvbnMgdG8gcmVjaXBlcyB3aXRoaW4gdGhlIEdVSQorICAgICAgICAgICAgZW52aXJvbm1lbnQgbGF5ZXIgd2l0aG91dCBwb2xsdXRpbmcgdGhlIEdVSSBsYXllciBpdHNlbGYKKyAgICAgICAgICAgIHdpdGggdGhvc2UgbWFjaGluZS1zcGVjaWZpYyBjaGFuZ2VzLgorICAgICAgICAgICAgWW91IGNhbiBhY2NvbXBsaXNoIHRoaXMgdGhyb3VnaCBhIHJlY2lwZSB0aGF0IGlzIGEgQml0QmFrZSBhcHBlbmQKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4pIGZpbGUsIHdoaWNoIGlzIGRlc2NyaWJlZCBsYXRlcgorICAgICAgICAgICAgaW4gdGhpcyBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0neW9jdG8tcHJvamVjdC1sYXllcnMnPgorICAgICAgICAgICAgPHRpdGxlPkxheWVyczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgICAgIGNvbnRhaW5zIGJvdGggZ2VuZXJhbCBsYXllcnMgYW5kIEJTUAorICAgICAgICAgICAgICAgIGxheWVycyByaWdodCBvdXQgb2YgdGhlIGJveC4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGVhc2lseSBpZGVudGlmeSBsYXllcnMgdGhhdCBzaGlwIHdpdGggYQorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSBpbiB0aGUgU291cmNlIERpcmVjdG9yeSBieSB0aGVpcgorICAgICAgICAgICAgICAgIGZvbGRlciBuYW1lcy4KKyAgICAgICAgICAgICAgICBGb2xkZXJzIHRoYXQgcmVwcmVzZW50IGxheWVycyB0eXBpY2FsbHkgaGF2ZSBuYW1lcyB0aGF0IGJlZ2luIHdpdGgKKyAgICAgICAgICAgICAgICB0aGUgc3RyaW5nIDxmaWxlbmFtZT5tZXRhLTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBub3QgYSByZXF1aXJlbWVudCB0aGF0IGEgbGF5ZXIgbmFtZSBiZWdpbiB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICBwcmVmaXggPGZpbGVuYW1lPm1ldGEtPC9maWxlbmFtZT4sIGJ1dCBpdCBpcyBhIGNvbW1vbmx5CisgICAgICAgICAgICAgICAgICAgIGFjY2VwdGVkIHN0YW5kYXJkIGluIHRoZSBZb2N0byBQcm9qZWN0IGNvbW11bml0eS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHdoZW4geW91IHNldCB1cCB0aGUgU291cmNlIERpcmVjdG9yeSBzdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgeW91IHdpbGwgc2VlIHNldmVyYWwgbGF5ZXJzOgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtc2tlbGV0b248L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1zZWxmdGVzdDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvLWJzcDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEVhY2ggb2YgdGhlc2UgZm9sZGVycyByZXByZXNlbnRzIGEgZGlzdGluY3QgbGF5ZXIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIGFub3RoZXIgZXhhbXBsZSwgaWYgeW91IHNldCB1cCBhIGxvY2FsIGNvcHkgb2YgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgIGFuZCB0aGVuIGV4cGxvcmUgdGhlIGZvbGRlciBvZiB0aGF0IGdlbmVyYWwgbGF5ZXIsCisgICAgICAgICAgICAgICAgeW91IHdpbGwgZGlzY292ZXIgbWFueSBJbnRlbC1zcGVjaWZpYyBCU1AgbGF5ZXJzIGluc2lkZS4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBCU1AgbGF5ZXJzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2JzcC1sYXllcnMnPkJTUCBMYXllcnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKQorICAgICAgICAgICAgICAgIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLXlvdXItb3duLWxheWVyJz4KKyAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyBZb3VyIE93biBMYXllcjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEl0IGlzIHZlcnkgZWFzeSB0byBjcmVhdGUgeW91ciBvd24gbGF5ZXJzIHRvIHVzZSB3aXRoIHRoZQorICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3Qgc2hpcHMgd2l0aCBzY3JpcHRzIHRoYXQgc3BlZWQgdXAgY3JlYXRpbmcKKyAgICAgICAgICAgICAgICBnZW5lcmFsIGxheWVycyBhbmQgQlNQIGxheWVycy4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBzdGVwcyB5b3UgcGVyZm9ybSBieSBoYW5kIHRvIGNyZWF0ZQorICAgICAgICAgICAgICAgIGEgbGF5ZXIgc28gdGhhdCB5b3UgY2FuIGJldHRlciB1bmRlcnN0YW5kIHRoZW0uCisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsYXllci1jcmVhdGlvbiBzY3JpcHRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2NyZWF0aW5nLWEtbmV3LWJzcC1sYXllci11c2luZy10aGUteW9jdG8tYnNwLXNjcmlwdCc+Q3JlYXRpbmcgYSBOZXcgQlNQIExheWVyIFVzaW5nIHRoZSB5b2N0by1ic3AgU2NyaXB0PC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkKKyAgICAgICAgICAgICAgICBEZXZlbG9wZXIncyBHdWlkZSBhbmQgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLWEtZ2VuZXJhbC1sYXllci11c2luZy10aGUteW9jdG8tbGF5ZXItc2NyaXB0Jz5DcmVhdGluZyBhIEdlbmVyYWwgTGF5ZXIgVXNpbmcgdGhlIHlvY3RvLWxheWVyIFNjcmlwdDwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBmdXJ0aGVyIGRvd24gaW4gdGhpcyBtYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvdyB0aGVzZSBnZW5lcmFsIHN0ZXBzIHRvIGNyZWF0ZSB5b3VyIGxheWVyOgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DaGVjayBFeGlzdGluZyBMYXllcnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJlZm9yZSBjcmVhdGluZyBhIG5ldyBsYXllciwgeW91IHNob3VsZCBiZSBzdXJlIHNvbWVvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhcyBub3QgYWxyZWFkeSBjcmVhdGVkIGEgbGF5ZXIgY29udGFpbmluZyB0aGUgTWV0YWRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcvbGF5ZXJpbmRleC9sYXllcnMvJz48ZmlsZW5hbWU+T3BlbkVtYmVkZGVkIE1ldGFkYXRhIEluZGV4PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGEgbGlzdCBvZiBsYXllcnMgZnJvbSB0aGUgT3BlbkVtYmVkZGVkIGNvbW11bml0eQorICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBjYW4gYmUgdXNlZCBpbiB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0ZSBhIERpcmVjdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlIHRoZSBkaXJlY3RvcnkgZm9yIHlvdXIgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBXaGlsZSBub3Qgc3RyaWN0bHkgcmVxdWlyZWQsIHByZXBlbmQgdGhlIG5hbWUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBmb2xkZXIgd2l0aCB0aGUgc3RyaW5nIDxmaWxlbmFtZT5tZXRhLTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEtbXlsYXllcgorICAgICBtZXRhLUdVSV94eXoKKyAgICAgbWV0YS1teW1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0ZSBhIExheWVyIENvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgRmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICBJbnNpZGUgeW91ciBuZXcgbGF5ZXIgZm9sZGVyLCB5b3UgbmVlZCB0byBjcmVhdGUgYQorICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgZWFzaWVzdCB0byB0YWtlIGFuIGV4aXN0aW5nIGxheWVyIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBhbmQgY29weSB0aGF0IHRvIHlvdXIgbGF5ZXIncworICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBhbmQgdGhlbiBtb2RpZnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgYXMgbmVlZGVkLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlCisgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvLWJzcC9jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgIGRlbW9uc3RyYXRlcyB0aGUgcmVxdWlyZWQgc3ludGF4OgorICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgV2UgaGF2ZSBhIGNvbmYgYW5kIGNsYXNzZXMgZGlyZWN0b3J5LCBhZGQgdG8gQkJQQVRICisgICAgIEJCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IgorCisgICAgICMgV2UgaGF2ZSByZWNpcGVzLSogZGlyZWN0b3JpZXMsIGFkZCB0byBCQkZJTEVTCisgICAgIEJCRklMRVMgKz0gIiR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmIgXAorICAgICAgICAgICAgICAgICAke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIgorCisgICAgIEJCRklMRV9DT0xMRUNUSU9OUyArPSAieW9jdG9ic3AiCisgICAgIEJCRklMRV9QQVRURVJOX3lvY3RvYnNwID0gIl4ke0xBWUVSRElSfS8iCisgICAgIEJCRklMRV9QUklPUklUWV95b2N0b2JzcCA9ICI1IgorICAgICBMQVlFUlZFUlNJT05feW9jdG9ic3AgPSAiMyIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5IZXJlIGlzIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGNvbmZpZ3VyYXRpb24gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMgZGlyZWN0b3J5IGlzIGFwcGVuZGVkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBub24tZGlzdHJvIGxheWVycywgd2hpY2ggaW5jbHVkZSBhbGwgQlNQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcnMsIGFyZSBleHBlY3RlZCB0byBhcHBlbmQgdGhlIGxheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiB0aGUgb3RoZXIgaGFuZCwgZGlzdHJvIGxheWVycywgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG88L2ZpbGVuYW1lPiwgY2FuIGNob29zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZW5mb3JjZSB0aGVpciBvd24gcHJlY2VkZW5jZSBvdmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSBvZiB0aGF0IHN5bnRheCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5tZXRhLXlvY3RvPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIHJlY2lwZXMgZm9yIHRoZSBsYXllcnMgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZGVkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJGSUxFUyc+QkJGSUxFUzwvdWxpbms+PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQkZJTEVfQ09MTEVDVElPTlMnPkJCRklMRV9DT0xMRUNUSU9OUzwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaXMgdGhlbiBhcHBlbmRlZCB3aXRoIHRoZSBsYXllciBuYW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJGSUxFX1BBVFRFUk4nPkJCRklMRV9QQVRURVJOPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpcyBzZXQgdG8gYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgdG8gbWF0Y2ggZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+IGludG8gYSBwYXJ0aWN1bGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTEFZRVJESVInPkxBWUVSRElSPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB1c2VkIHRvIG1ha2UgPGZpbGVuYW1lPkJCRklMRV9QQVRURVJOPC9maWxlbmFtZT4gbWF0Y2ggd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcidzIHBhdGguPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUJCRklMRV9QUklPUklUWSc+QkJGSUxFX1BSSU9SSVRZPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0aGVuIGFzc2lnbnMgYSBwcmlvcml0eSB0byB0aGUgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGx5aW5nIHByaW9yaXRpZXMgaXMgdXNlZnVsIGluIHNpdHVhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgdGhlIHNhbWUgcmVjaXBlIG1pZ2h0IGFwcGVhciBpbiBtdWx0aXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcnMgYW5kIGFsbG93cyB5b3UgdG8gY2hvb3NlIHRoZSBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHRha2VzIHByZWNlZGVuY2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxBWUVSVkVSU0lPTic+TEFZRVJWRVJTSU9OPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBvcHRpb25hbGx5IHNwZWNpZmllcyB0aGUgdmVyc2lvbiBvZiBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyIGFzIGEgc2luZ2xlIG51bWJlci48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPk5vdGUgdGhlIHVzZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTEFZRVJESVInPkxBWUVSRElSPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHdoaWNoIGV4cGFuZHMgdG8gdGhlIGRpcmVjdG9yeSBvZiB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhyb3VnaCB0aGUgdXNlIG9mIHRoZSA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCBCaXRCYWtlIGxvY2F0ZXMgY2xhc3MgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPiksCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzLCBhbmQgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZXF1aXJlPC9maWxlbmFtZT4gc3RhdGVtZW50cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciB0aGVzZSBjYXNlcywgQml0QmFrZSB1c2VzIHRoZSBmaXJzdCBmaWxlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgdGhlIG5hbWUgZm91bmQgaW4gPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSB3YXkgdGhlIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIHVzZWQgZm9yIGJpbmFyaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQsIHRoZXJlZm9yZSwgdGhhdCB5b3UgdXNlIHVuaXF1ZQorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgYW5kIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lcyBpbiB5b3VyIGN1c3RvbSBsYXllci48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5BZGQgQ29udGVudDo8L2VtcGhhc2lzPiBEZXBlbmRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSB0eXBlIG9mIGxheWVyLCBhZGQgdGhlIGNvbnRlbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgbGF5ZXIgYWRkcyBzdXBwb3J0IGZvciBhIG1hY2hpbmUsIGFkZCB0aGUgbWFjaGluZQorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBpbiBhIDxmaWxlbmFtZT5jb25mL21hY2hpbmUvPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgd2l0aGluIHRoZSBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBsYXllciBhZGRzIGRpc3RybyBwb2xpY3ksIGFkZCB0aGUgZGlzdHJvCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGluIGEgPGZpbGVuYW1lPmNvbmYvZGlzdHJvLzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIHdpdGhpbiB0aGUgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgbGF5ZXIgaW50cm9kdWNlcyBuZXcgcmVjaXBlcywgcHV0IHRoZSByZWNpcGVzCisgICAgICAgICAgICAgICAgICAgICAgICB5b3UgbmVlZCBpbiA8ZmlsZW5hbWU+cmVjaXBlcy0qPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yaWVzIHdpdGhpbiB0aGUgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT5JbiBvcmRlciB0byBiZSBjb21wbGlhbnQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIGxheWVyIG11c3QgY29udGFpbiBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjYnNwLWZpbGVsYXlvdXQtcmVhZG1lJz5SRUFETUUgZmlsZS48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2Jlc3QtcHJhY3RpY2VzLXRvLWZvbGxvdy13aGVuLWNyZWF0aW5nLWxheWVycyc+CisgICAgICAgICAgICA8dGl0bGU+QmVzdCBQcmFjdGljZXMgdG8gRm9sbG93IFdoZW4gQ3JlYXRpbmcgTGF5ZXJzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gY3JlYXRlIGxheWVycyB0aGF0IGFyZSBlYXNpZXIgdG8gbWFpbnRhaW4gYW5kIHRoYXQgd2lsbAorICAgICAgICAgICAgICAgIG5vdCBpbXBhY3QgYnVpbGRzIGZvciBvdGhlciBtYWNoaW5lcywgeW91IHNob3VsZCBjb25zaWRlciB0aGUKKyAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nYXZvaWQtb3ZlcmxheWluZy1lbnRpcmUtcmVjaXBlcyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkF2b2lkICJPdmVybGF5aW5nIiBFbnRpcmUgUmVjaXBlczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXZvaWQgIm92ZXJsYXlpbmciIGVudGlyZSByZWNpcGVzIGZyb20gb3RoZXIgbGF5ZXJzIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIGRvIG5vdCBjb3B5IGFuIGVudGlyZSByZWNpcGUgaW50byB5b3VyCisgICAgICAgICAgICAgICAgICAgIGxheWVyIGFuZCB0aGVuIG1vZGlmeSBpdC4KKyAgICAgICAgICAgICAgICAgICAgUmF0aGVyLCB1c2UgYW4gYXBwZW5kIGZpbGUgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgdG8gb3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgb25seSB0aG9zZSBwYXJ0cyBvZiB0aGUgb3JpZ2luYWwgcmVjaXBlIHlvdSBuZWVkIHRvIG1vZGlmeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdhdm9pZC1kdXBsaWNhdGluZy1pbmNsdWRlLWZpbGVzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+QXZvaWQgRHVwbGljYXRpbmcgSW5jbHVkZSBGaWxlczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXZvaWQgZHVwbGljYXRpbmcgaW5jbHVkZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVXNlIGFwcGVuZCBmaWxlcyAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICBmb3IgZWFjaCByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgdGhhdCB1c2VzIGFuIGluY2x1ZGUgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgT3IsIGlmIHlvdSBhcmUgaW50cm9kdWNpbmcgYSBuZXcgcmVjaXBlIHRoYXQgcmVxdWlyZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIGluY2x1ZGVkIGZpbGUsIHVzZSB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgb3JpZ2luYWwKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIgZGlyZWN0b3J5IHRvIHJlZmVyIHRvIHRoZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZXF1aXJlIHJlY2lwZXMtY29yZS88L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5wYWNrYWdlPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+LzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmZpbGU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4uaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiA8ZmlsZW5hbWU+cmVxdWlyZSA8L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5maWxlPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UncmUgZmluZGluZyB5b3UgaGF2ZSB0byBvdmVybGF5IHRoZSBpbmNsdWRlIGZpbGUsCisgICAgICAgICAgICAgICAgICAgIGl0IGNvdWxkIGluZGljYXRlIGEgZGVmaWNpZW5jeSBpbiB0aGUgaW5jbHVkZSBmaWxlIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSBsYXllciB0byB3aGljaCBpdCBvcmlnaW5hbGx5IGJlbG9uZ3MuCisgICAgICAgICAgICAgICAgICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIHlvdSBzaG91bGQgdHJ5IHRvIGFkZHJlc3MgdGhhdAorICAgICAgICAgICAgICAgICAgICBkZWZpY2llbmN5IGluc3RlYWQgb2Ygb3ZlcmxheWluZyB0aGUgaW5jbHVkZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIGFkZHJlc3MgdGhpcyBieSBnZXR0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICBtYWludGFpbmVyIG9mIHRoZSBpbmNsdWRlIGZpbGUgdG8gYWRkIGEgdmFyaWFibGUgb3IKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIHRvIG1ha2UgaXQgZWFzeSB0byBvdmVycmlkZSB0aGUgcGFydHMgbmVlZGluZworICAgICAgICAgICAgICAgICAgICB0byBiZSBvdmVycmlkZGVuLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS15b3VyLWxheWVycyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPlN0cnVjdHVyZSBZb3VyIExheWVyczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUHJvcGVyIHVzZSBvZiBvdmVycmlkZXMgd2l0aGluIGFwcGVuZCBmaWxlcyBhbmQgcGxhY2VtZW50CisgICAgICAgICAgICAgICAgICAgIG9mIG1hY2hpbmUtc3BlY2lmaWMgZmlsZXMgd2l0aGluIHlvdXIgbGF5ZXIgY2FuIGVuc3VyZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIGEgYnVpbGQgaXMgbm90IHVzaW5nIHRoZSB3cm9uZyBNZXRhZGF0YSBhbmQgbmVnYXRpdmVseQorICAgICAgICAgICAgICAgICAgICBpbXBhY3RpbmcgYSBidWlsZCBmb3IgYSBkaWZmZXJlbnQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSBzb21lIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Nb2RpZnlpbmcgVmFyaWFibGVzIHRvIFN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIERpZmZlcmVudCBNYWNoaW5lOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9zZSB5b3UgaGF2ZSBhIGxheWVyIG5hbWVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtb25lPC9maWxlbmFtZT4gdGhhdCBhZGRzIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYnVpbGRpbmcgbWFjaGluZSAib25lIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbyBkbyBzbywgeW91IHVzZSBhbiBhcHBlbmQgZmlsZSBuYW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNlLWZpbGVzLmJiYXBwZW5kPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlIGEgZGVwZW5kZW5jeSBvbiAiZm9vIiBieSBhbHRlcmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBFTkRTID0gImZvbyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlcGVuZGVuY3kgaXMgY3JlYXRlZCBkdXJpbmcgYW55IGJ1aWxkIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcyB0aGUgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1vbmU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgbWlnaHQgbm90IHdhbnQgdGhpcyBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFsbCBtYWNoaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgYXJlIGJ1aWxkaW5nIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgInR3byIgYnV0IHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUgaGFzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9uZTwvZmlsZW5hbWU+IGxheWVyIGluY2x1ZGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIER1cmluZyB0aGUgYnVpbGQsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNlLWZpbGVzPC9maWxlbmFtZT4gZm9yIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHdvIiB3aWxsIGFsc28gaGF2ZSB0aGUgZGVwZW5kZW5jeSBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb288L2ZpbGVuYW1lPi48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VG8gbWFrZSBzdXJlIHlvdXIgY2hhbmdlcyBhcHBseSBvbmx5IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGluZyBtYWNoaW5lICJvbmUiLCB1c2UgYSBtYWNoaW5lIG92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBFTkRTX29uZSA9ICJmb28iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgZm9sbG93IHRoZSBzYW1lIHN0cmF0ZWd5IHdoZW4gdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5fcHJlcGVuZDwvZmlsZW5hbWU+IG9wZXJhdGlvbnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBFTkRTX2FwcGVuZF9vbmUgPSAiIGZvbyIKKyAgICAgREVQRU5EU19wcmVwZW5kX29uZSA9ICJmb28gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcyBhbiBhY3R1YWwgZXhhbXBsZSwgaGVyZSdzIGEgbGluZSBmcm9tIHRoZSByZWNpcGUgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIE9Qcm9maWxlIHByb2ZpbGVyLCB3aGljaCBsaXN0cyBhbiBleHRyYSBidWlsZC10aW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSB3aGVuIGJ1aWxkaW5nIHNwZWNpZmljYWxseSBmb3IgNjQtYml0IFBvd2VyUEM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBFTkRTX2FwcGVuZF9wb3dlcnBjNjQgPSAiIGxpYnBmbTQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdm9pZGluZyAiKz0iIGFuZCAiPSsiIGFuZCB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLXNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5fYXBwZW5kPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5fcHJlcGVuZDwvZmlsZW5hbWU+IG9wZXJhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgcmVjb21tZW5kZWQgYXMgd2VsbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBsYWNlIE1hY2hpbmUtU3BlY2lmaWMgRmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBNYWNoaW5lLVNwZWNpZmljIExvY2F0aW9uczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IGhhdmUgYSBiYXNlIHJlY2lwZSwgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNlLWZpbGVzLmJiPC9maWxlbmFtZT4sIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCB0byBhIGZpbGUsIHlvdSBjYW4gdXNlIGFuIGFwcGVuZCBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gY2F1c2UgdGhlIGJ1aWxkIHRvIHVzZSB5b3VyIG93biB2ZXJzaW9uIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGFuIGFwcGVuZCBmaWxlIGluIHlvdXIgbGF5ZXIgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1vbmUvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy5iYmFwcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bGQgZXh0ZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFU0VYVFJBUEFUSFMnPjxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7QlBOfToiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBmb3IgbWFjaGluZSAib25lIiB3aWxsIHBpY2sgdXAgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUtc3BlY2lmaWMgZmlsZSBhcyBsb25nIGFzIHlvdSBoYXZlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1vbmUvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgYXJlIGJ1aWxkaW5nIGZvciBhIGRpZmZlcmVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSBpbmNsdWRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bWV0YS1vbmU8L2ZpbGVuYW1lPiBsYXllciBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbG9jYXRpb24gb2YgeW91ciBtYWNoaW5lLXNwZWNpZmljIGZpbGUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlyc3QgbG9jYXRpb24gd2hlcmUgdGhhdCBmaWxlIGlzIGZvdW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW5nIHRvIDxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZHMgZm9yIGFsbCBtYWNoaW5lcyB3aWxsIGFsc28gdXNlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLXNwZWNpZmljIGZpbGUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjYW4gbWFrZSBzdXJlIHRoYXQgYSBtYWNoaW5lLXNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBpcyB1c2VkIGZvciBhIHBhcnRpY3VsYXIgbWFjaGluZSBieSBwdXR0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpbGUgaW4gYSBzdWJkaXJlY3Rvcnkgc3BlY2lmaWMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgcmF0aGVyIHRoYW4gcGxhY2luZyB0aGUgZmlsZSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9uZS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzLzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgc2hvd24gYWJvdmUsIHB1dCBpdCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9uZS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL29uZS88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3Qgb25seSBkb2VzIHRoaXMgbWFrZSBzdXJlIHRoZSBmaWxlIGlzIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5IHdoZW4gYnVpbGRpbmcgZm9yIG1hY2hpbmUgIm9uZSIsIGJ1dCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBwcm9jZXNzIGxvY2F0ZXMgdGhlIGZpbGUgbW9yZSBxdWlja2x5LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JbiBzdW1tYXJ5LCB5b3UgbmVlZCB0byBwbGFjZSBhbGwgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VkIGZyb20gPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgbWFjaGluZS1zcGVjaWZpYyBzdWJkaXJlY3Rvcnkgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyIGluIG9yZGVyIHRvIHJlc3RyaWN0IHRob3NlIGZpbGVzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZS1zcGVjaWZpYyBidWlsZHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J290aGVyLXJlY29tbWVuZGF0aW9ucyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPk90aGVyIFJlY29tbWVuZGF0aW9uczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2UgYWxzbyByZWNvbW1lbmQgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TdG9yZSBjdXN0b20gbGF5ZXJzIGluIGEgR2l0IHJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtPHJlcGxhY2VhYmxlPmxheWVyX25hbWU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+IGZvcm1hdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbG9uZSB0aGUgcmVwb3NpdG9yeSBhbG9uZ3NpZGUgb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IGRpcmVjdG9yaWVzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgdGhlc2UgcmVjb21tZW5kYXRpb25zIGtlZXBzIHlvdXIgU291cmNlIERpcmVjdG9yeSBhbmQKKyAgICAgICAgICAgICAgICAgICAgIGl0cyBjb25maWd1cmF0aW9uIGVudGlyZWx5IGluc2lkZSB0aGUgWW9jdG8gUHJvamVjdCdzIGNvcmUKKyAgICAgICAgICAgICAgICAgICAgIGJhc2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2VuYWJsaW5nLXlvdXItbGF5ZXInPgorICAgICAgICAgICAgPHRpdGxlPkVuYWJsaW5nIFlvdXIgTGF5ZXI8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWZvcmUgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2FuIHVzZSB5b3VyIG5ldyBsYXllciwKKyAgICAgICAgICAgICAgICB5b3UgbmVlZCB0byBlbmFibGUgaXQuCisgICAgICAgICAgICAgICAgVG8gZW5hYmxlIHlvdXIgbGF5ZXIsIHNpbXBseSBhZGQgeW91ciBsYXllcidzIHBhdGggdG8gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQkxBWUVSUyc+QkJMQVlFUlM8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4geW91ciA8ZmlsZW5hbWU+Y29uZi9iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSwKKyAgICAgICAgICAgICAgICB3aGljaCBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBlbmFibGUgYSBsYXllciBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW15bGF5ZXI8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExDT05GX1ZFUlNJT04gPSAiNiIKKworICAgICBCQlBBVEggPSAiJHtUT1BESVJ9IgorICAgICBCQkZJTEVTID89ICIiCisKKyAgICAgQkJMQVlFUlMgPz0gIiBcCisgICAgICAgJEhPTUUvcG9reS9tZXRhIFwKKyAgICAgICAkSE9NRS9wb2t5L21ldGEteW9jdG8gXAorICAgICAgICRIT01FL3Bva3kvbWV0YS15b2N0by1ic3AgXAorICAgICAgICRIT01FL3Bva3kvbWV0YS1teWxheWVyIFwKKyAgICAgICAiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIHBhcnNlcyBlYWNoIDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgYXMgc3BlY2lmaWVkIGluIHRoZSA8ZmlsZW5hbWU+QkJMQVlFUlM8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgPGZpbGVuYW1lPmNvbmYvYmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgRHVyaW5nIHRoZSBwcm9jZXNzaW5nIG9mIGVhY2gKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZSwgQml0QmFrZSBhZGRzIHRoZQorICAgICAgICAgICAgICAgIHJlY2lwZXMsIGNsYXNzZXMgYW5kIGNvbmZpZ3VyYXRpb25zIGNvbnRhaW5lZCB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgcGFydGljdWxhciBsYXllciB0byB0aGUgc291cmNlIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1iYmFwcGVuZC1maWxlcyc+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgLmJiYXBwZW5kIEZpbGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUmVjaXBlcyB1c2VkIHRvIGFwcGVuZCBNZXRhZGF0YSB0byBvdGhlciByZWNpcGVzIGFyZSBjYWxsZWQKKyAgICAgICAgICAgICAgICBCaXRCYWtlIGFwcGVuZCBmaWxlcy4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIGFwcGVuZCBmaWxlcyB1c2UgdGhlIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgdHlwZSBzdWZmaXgsIHdoaWxlIHRoZSBjb3JyZXNwb25kaW5nIHJlY2lwZXMgdG8gd2hpY2ggTWV0YWRhdGEKKyAgICAgICAgICAgICAgICBpcyBiZWluZyBhcHBlbmRlZCB1c2UgdGhlIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlIHR5cGUKKyAgICAgICAgICAgICAgICBzdWZmaXguCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgYWxsb3dzIHlvdXIgbGF5ZXIgdG8gbWFrZQorICAgICAgICAgICAgICAgIGFkZGl0aW9ucyBvciBjaGFuZ2VzIHRvIHRoZSBjb250ZW50IG9mIGFub3RoZXIgbGF5ZXIncyByZWNpcGUKKyAgICAgICAgICAgICAgICB3aXRob3V0IGhhdmluZyB0byBjb3B5IHRoZSBvdGhlciByZWNpcGUgaW50byB5b3VyIGxheWVyLgorICAgICAgICAgICAgICAgIFlvdXIgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgcmVzaWRlcyBpbiB5b3VyIGxheWVyLAorICAgICAgICAgICAgICAgIHdoaWxlIHRoZSBtYWluIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiByZWNpcGUgZmlsZSB0bworICAgICAgICAgICAgICAgIHdoaWNoIHlvdSBhcmUgYXBwZW5kaW5nIE1ldGFkYXRhIHJlc2lkZXMgaW4gYSBkaWZmZXJlbnQgbGF5ZXIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFwcGVuZCBmaWxlcyBtdXN0IGhhdmUgdGhlIHNhbWUgcm9vdCBuYW1lcyBhcyB0aGVpciBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICAgICAgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGFwcGVuZCBmaWxlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNvbWVhcHBfJkRJU1RSTzsuYmJhcHBlbmQ8L2ZpbGVuYW1lPiBtdXN0IGFwcGx5IHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNvbWVhcHBfJkRJU1RSTzsuYmI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGlzIG1lYW5zIHRoZSBvcmlnaW5hbCByZWNpcGUgYW5kIGFwcGVuZCBmaWxlIG5hbWVzIGFyZSB2ZXJzaW9uCisgICAgICAgICAgICAgICAgbnVtYmVyLXNwZWNpZmljLgorICAgICAgICAgICAgICAgIElmIHRoZSBjb3JyZXNwb25kaW5nIHJlY2lwZSBpcyByZW5hbWVkIHRvIHVwZGF0ZSB0byBhIG5ld2VyCisgICAgICAgICAgICAgICAgdmVyc2lvbiwgdGhlIGNvcnJlc3BvbmRpbmcgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgbXVzdAorICAgICAgICAgICAgICAgIGJlIHJlbmFtZWQgKGFuZCBwb3NzaWJseSB1cGRhdGVkKSBhcyB3ZWxsLgorICAgICAgICAgICAgICAgIER1cmluZyB0aGUgYnVpbGQgcHJvY2VzcywgQml0QmFrZSBkaXNwbGF5cyBhbiBlcnJvciBvbiBzdGFydGluZworICAgICAgICAgICAgICAgIGlmIGl0IGRldGVjdHMgYSA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSB0aGF0IGRvZXMKKyAgICAgICAgICAgICAgICBub3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgcmVjaXBlIHdpdGggYSBtYXRjaGluZyBuYW1lLgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJfREFOR0xJTkdBUFBFTkRTX1dBUk5PTkxZJz48ZmlsZW5hbWU+QkJfREFOR0xJTkdBUFBFTkRTX1dBUk5PTkxZPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaGFuZGxlIHRoaXMgZXJyb3IuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJlaW5nIGFibGUgdG8gYXBwZW5kIGluZm9ybWF0aW9uIHRvIGFuIGV4aXN0aW5nIHJlY2lwZSBub3Qgb25seQorICAgICAgICAgICAgICAgIGF2b2lkcyBkdXBsaWNhdGlvbiwgYnV0IGFsc28gYXV0b21hdGljYWxseSBhcHBsaWVzIHJlY2lwZQorICAgICAgICAgICAgICAgIGNoYW5nZXMgaW4gYSBkaWZmZXJlbnQgbGF5ZXIgdG8geW91ciBsYXllci4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2VyZSBjb3B5aW5nIHJlY2lwZXMsIHlvdSB3b3VsZCBoYXZlIHRvIG1hbnVhbGx5IG1lcmdlCisgICAgICAgICAgICAgICAgY2hhbmdlcyBhcyB0aGV5IG9jY3VyLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBjb25zaWRlciB0aGUgbWFpbiBmb3JtZmFjdG9yIHJlY2lwZSBhbmQgYQorICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgZm9ybWZhY3RvciBhcHBlbmQgZmlsZSBib3RoIGZyb20gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgbWFpbiBmb3JtZmFjdG9yIHJlY2lwZSwgd2hpY2ggaXMgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Zm9ybWZhY3Rvcl8wLjAuYmI8L2ZpbGVuYW1lPiBhbmQgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAibWV0YSIgbGF5ZXIgYXQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTVU1NQVJZID0gIkRldmljZSBmb3JtZmFjdG9yIGluZm9ybWF0aW9uIgorICAgICBTRUNUSU9OID0gImJhc2UiCisgICAgIExJQ0VOU0UgPSAiTUlUIgorICAgICBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKyAgICAgUFIgPSAicjQ1IgorCisgICAgIFNSQ19VUkkgPSAiZmlsZTovL2NvbmZpZyBmaWxlOi8vbWFjaGNvbmZpZyIKKyAgICAgUyA9ICIke1dPUktESVJ9IgorCisgICAgIFBBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisgICAgIElOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKKyAgICAgZG9faW5zdGFsbCgpIHsKKwkgICAgICMgSW5zdGFsbCBmaWxlIG9ubHkgaWYgaXQgaGFzIGNvbnRlbnRzCisgICAgICAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9mb3JtZmFjdG9yLworICAgICAgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L2NvbmZpZyAke0R9JHtzeXNjb25mZGlyfS9mb3JtZmFjdG9yLworCSAgICAgaWYgWyAtcyAiJHtTfS9tYWNoY29uZmlnIiBdOyB0aGVuCisJICAgICAgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L21hY2hjb25maWcgJHtEfSR7c3lzY29uZmRpcn0vZm9ybWZhY3Rvci8KKwkgICAgIGZpCisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW4gdGhlIG1haW4gcmVjaXBlLCBub3RlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSwgd2hpY2ggdGVsbHMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2hlcmUgdG8KKyAgICAgICAgICAgICAgICBmaW5kIGZpbGVzIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyB0aGUgYXBwZW5kIGZpbGUsIHdoaWNoIGlzIG5hbWVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvcm1mYWN0b3JfMC4wLmJiYXBwZW5kPC9maWxlbmFtZT4gYW5kIGlzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgRW1lbmxvdyBCU1AgTGF5ZXIgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbC9tZXRhLWVtZW5sb3c8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgZmlsZSBpcyBpbiA8ZmlsZW5hbWU+cmVjaXBlcy1ic3AvZm9ybWZhY3RvcjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIGJ1aWxkIHN5c3RlbSB1c2VzIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFU1BBVEgnPjxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gbG9jYXRlIGZpbGVzLgorICAgICAgICAgICAgICAgIFRoaXMgYXBwZW5kIGZpbGUgZXh0ZW5kcyB0aGUgbG9jYXRpb25zIGJ5IHNldHRpbmcgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTRVhUUkFQQVRIUyc+PGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBTZXR0aW5nIHRoaXMgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUgaXMgdGhlIG1vc3QgcmVsaWFibGUgYW5kIHJlY29tbWVuZGVkIG1ldGhvZCBmb3IgYWRkaW5nCisgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgdG8gdGhlIHNlYXJjaCBwYXRoIHVzZWQgYnkgdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIHRvIGZpbmQgZmlsZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBzdGF0ZW1lbnQgaW4gdGhpcyBleGFtcGxlIGV4dGVuZHMgdGhlIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1USElTRElSJz48ZmlsZW5hbWU+VEhJU0RJUjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fS8kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICB3aGljaCByZXNvbHZlcyB0byBhIGRpcmVjdG9yeSBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb3JtZmFjdG9yPC9maWxlbmFtZT4gaW4gdGhlIHNhbWUgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgaW4gd2hpY2ggdGhlIGFwcGVuZCBmaWxlIHJlc2lkZXMgKGkuZS4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbC9tZXRhLWVtZW5sb3cvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhpcyBpbXBsaWVzIHRoYXQgeW91IG11c3QgaGF2ZSB0aGUgc3VwcG9ydGluZyBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgc2V0IHVwIHRoYXQgd2lsbCBjb250YWluIGFueSBmaWxlcyBvciBwYXRjaGVzIHlvdQorICAgICAgICAgICAgICAgIHdpbGwgYmUgaW5jbHVkaW5nIGZyb20gdGhlIGxheWVyLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVc2luZyB0aGUgaW1tZWRpYXRlIGV4cGFuc2lvbiBhc3NpZ25tZW50IG9wZXJhdG9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjo9PC9maWxlbmFtZT4gaXMgaW1wb3J0YW50IGJlY2F1c2Ugb2YgdGhlIHJlZmVyZW5jZSB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5USElTRElSPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhlIHRyYWlsaW5nIGNvbG9uIGNoYXJhY3RlciBpcyBpbXBvcnRhbnQgYXMgaXQgZW5zdXJlcyB0aGF0CisgICAgICAgICAgICAgICAgaXRlbXMgaW4gdGhlIGxpc3QgcmVtYWluIGNvbG9uLXNlcGFyYXRlZC4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGF1dG9tYXRpY2FsbHkgZGVmaW5lcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5USElTRElSPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIG5ldmVyIHNldCB0aGlzIHZhcmlhYmxlIHlvdXJzZWxmLgorICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcgIl9wcmVwZW5kIiBhcyBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+IGVuc3VyZXMgeW91ciBwYXRoCisgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHNlYXJjaGVkIHByaW9yIHRvIG90aGVyIHBhdGhzIGluIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQWxzbywgbm90IGFsbCBhcHBlbmQgZmlsZXMgYWRkIGV4dHJhIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgTWFueSBhcHBlbmQgZmlsZXMgc2ltcGx5IGV4aXN0IHRvIGFkZCBidWlsZCBvcHRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+c3lzdGVtZDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciB0aGVzZSBjYXNlcywgeW91ciBhcHBlbmQgZmlsZSB3b3VsZCBub3QgZXZlbgorICAgICAgICAgICAgICAgICAgICAgICAgdXNlIHRoZSA8ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT4gc3RhdGVtZW50LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3ByaW9yaXRpemluZy15b3VyLWxheWVyJz4KKyAgICAgICAgICAgIDx0aXRsZT5Qcmlvcml0aXppbmcgWW91ciBMYXllcjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEVhY2ggbGF5ZXIgaXMgYXNzaWduZWQgYSBwcmlvcml0eSB2YWx1ZS4KKyAgICAgICAgICAgICAgICBQcmlvcml0eSB2YWx1ZXMgY29udHJvbCB3aGljaCBsYXllciB0YWtlcyBwcmVjZWRlbmNlIGlmIHRoZXJlCisgICAgICAgICAgICAgICAgYXJlIHJlY2lwZSBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgaW4gbXVsdGlwbGUgbGF5ZXJzLgorICAgICAgICAgICAgICAgIEZvciB0aGVzZSBjYXNlcywgdGhlIHJlY2lwZSBmaWxlIGZyb20gdGhlIGxheWVyIHdpdGggYSBoaWdoZXIKKyAgICAgICAgICAgICAgICBwcmlvcml0eSBudW1iZXIgdGFrZXMgcHJlY2VkZW5jZS4KKyAgICAgICAgICAgICAgICBQcmlvcml0eSB2YWx1ZXMgYWxzbyBhZmZlY3QgdGhlIG9yZGVyIGluIHdoaWNoIG11bHRpcGxlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGVzIGZvciB0aGUgc2FtZSByZWNpcGUgYXJlCisgICAgICAgICAgICAgICAgYXBwbGllZC4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGVpdGhlciBzcGVjaWZ5IHRoZSBwcmlvcml0eSBtYW51YWxseSwgb3IgYWxsb3cgdGhlCisgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIHRvIGNhbGN1bGF0ZSBpdCBiYXNlZCBvbiB0aGUgbGF5ZXIncyBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHNwZWNpZnkgdGhlIGxheWVyJ3MgcHJpb3JpdHkgbWFudWFsbHksIHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJGSUxFX1BSSU9SSVRZJz48ZmlsZW5hbWU+QkJGSUxFX1BSSU9SSVRZPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJGSUxFX1BSSU9SSVRZX215bGF5ZXIgPSAiMSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIDxwYXJhPkl0IGlzIHBvc3NpYmxlIGZvciBhIHJlY2lwZSB3aXRoIGEgbG93ZXIgdmVyc2lvbiBudW1iZXIKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBpbiBhIGxheWVyIHRoYXQgaGFzIGEgaGlnaGVyIHByaW9yaXR5IHRvIHRha2UgcHJlY2VkZW5jZS48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+QWxzbywgdGhlIGxheWVyIHByaW9yaXR5IGRvZXMgbm90IGN1cnJlbnRseSBhZmZlY3QgdGhlCisgICAgICAgICAgICAgICAgcHJlY2VkZW5jZSBvcmRlciBvZiA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIG9yIDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgICAgIEZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXRCYWtlIG1pZ2h0IGFkZHJlc3MgdGhpcy48L3BhcmE+CisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWFuYWdpbmctbGF5ZXJzJz4KKyAgICAgICAgICAgIDx0aXRsZT5NYW5hZ2luZyBMYXllcnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgQml0QmFrZSBsYXllciBtYW5hZ2VtZW50IHRvb2wgdG8gcHJvdmlkZSBhIHZpZXcKKyAgICAgICAgICAgICAgICBpbnRvIHRoZSBzdHJ1Y3R1cmUgb2YgcmVjaXBlcyBhY3Jvc3MgYSBtdWx0aS1sYXllciBwcm9qZWN0LgorICAgICAgICAgICAgICAgIEJlaW5nIGFibGUgdG8gZ2VuZXJhdGUgb3V0cHV0IHRoYXQgcmVwb3J0cyBvbiBjb25maWd1cmVkIGxheWVycworICAgICAgICAgICAgICAgIHdpdGggdGhlaXIgcGF0aHMgYW5kIHByaW9yaXRpZXMgYW5kIG9uCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGVzIGFuZCB0aGVpciBhcHBsaWNhYmxlCisgICAgICAgICAgICAgICAgcmVjaXBlcyBjYW4gaGVscCB0byByZXZlYWwgcG90ZW50aWFsIHByb2JsZW1zLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBmb3JtIHdoZW4gcnVubmluZyB0aGUgbGF5ZXIgbWFuYWdlbWVudCB0b29sLgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlLWxheWVycyA8cmVwbGFjZWFibGU+Y29tbWFuZDwvcmVwbGFjZWFibGU+IFs8cmVwbGFjZWFibGU+YXJndW1lbnRzPC9yZXBsYWNlYWJsZT5dCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBkZXNjcmliZXMgdGhlIGF2YWlsYWJsZSBjb21tYW5kczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxlbXBoYXNpcz5oZWxwOjwvZW1waGFzaXM+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXlzIGdlbmVyYWwgaGVscCBvciBoZWxwIG9uIGEgc3BlY2lmaWVkIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48ZW1waGFzaXM+c2hvdy1sYXllcnM6PC9lbXBoYXNpcz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgU2hvd3MgdGhlIGN1cnJlbnQgY29uZmlndXJlZCBsYXllcnMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48ZW1waGFzaXM+c2hvdy1yZWNpcGVzOjwvZW1waGFzaXM+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIExpc3RzIGF2YWlsYWJsZSByZWNpcGVzIGFuZCB0aGUgbGF5ZXJzIHRoYXQgcHJvdmlkZSB0aGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGVtcGhhc2lzPnNob3ctb3ZlcmxheWVkOjwvZW1waGFzaXM+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIExpc3RzIG92ZXJsYXllZCByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgQSByZWNpcGUgaXMgb3ZlcmxheWVkIHdoZW4gYSByZWNpcGUgd2l0aCB0aGUgc2FtZSBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICBleGlzdHMgaW4gYW5vdGhlciBsYXllciB0aGF0IGhhcyBhIGhpZ2hlciBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHkuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48ZW1waGFzaXM+c2hvdy1hcHBlbmRzOjwvZW1waGFzaXM+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIExpc3RzIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlcyBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUgZmlsZXMgdG8gd2hpY2ggdGhleSBhcHBseS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxlbXBoYXNpcz5zaG93LWNyb3NzLWRlcGVuZHM6PC9lbXBoYXNpcz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXBzIGJldHdlZW4gcmVjaXBlcyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICBjcm9zcyBsYXllciBib3VuZGFyaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGVtcGhhc2lzPmFkZC1sYXllcjo8L2VtcGhhc2lzPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBBZGRzIGEgbGF5ZXIgdG8gPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxlbXBoYXNpcz5yZW1vdmUtbGF5ZXI6PC9lbXBoYXNpcz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlcyBhIGxheWVyIGZyb20gPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGVtcGhhc2lzPmZsYXR0ZW46PC9lbXBoYXNpcz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgRmxhdHRlbnMgdGhlIGxheWVyIGNvbmZpZ3VyYXRpb24gaW50byBhIHNlcGFyYXRlIG91dHB1dAorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgRmxhdHRlbmluZyB5b3VyIGxheWVyIGNvbmZpZ3VyYXRpb24gYnVpbGRzIGEgImZsYXR0ZW5lZCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBjb250ZW50cyBvZiBhbGwgbGF5ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhbnkgb3ZlcmxheWVkIHJlY2lwZXMgcmVtb3ZlZCBhbmQgYW55CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZXMgYXBwZW5kZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbWlnaHQgaGF2ZSB0byBwZXJmb3JtIHNvbWUgbWFudWFsIGNsZWFudXAgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBmbGF0dGVuZWQgbGF5ZXIgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk5vbi1yZWNpcGUgZmlsZXMgKHN1Y2ggYXMgcGF0Y2hlcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIG92ZXJ3cml0dGVuLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmxhdHRlbiBjb21tYW5kIHNob3dzIGEgd2FybmluZyBmb3IgdGhlc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Bbnl0aGluZyBiZXlvbmQgdGhlIG5vcm1hbCBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR1cCBoYXMgYmVlbiBhZGRlZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbmx5IHRoZSBsb3dlc3QgcHJpb3JpdHkgbGF5ZXIncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGlzIHVzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5PdmVycmlkZGVuIGFuZCBhcHBlbmRlZCBpdGVtcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlcyBuZWVkIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuZWQgdXAuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb250ZW50cyBvZiBlYWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBlbmQgdXAgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXR0ZW5lZCByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHRoZXJlIGFyZSBhcHBlbmRlZCBvciBjaGFuZ2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHZhbHVlcywgeW91IG5lZWQgdG8gdGlkeSB0aGVzZSB1cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3Vyc2VsZi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZXJlLCB0aGUgPGZpbGVuYW1lPmJpdGJha2UtbGF5ZXJzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBhZGRzIHRoZSBsaW5lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4jIyMjIGJiYXBwZW5kZWQgLi4uPC9maWxlbmFtZT4gc28gdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3Uga25vdyB3aGVyZSB0aGUgZm9sbG93aW5nIGxpbmVzIG9yaWdpbmF0ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAuLi4KKyAgICAgREVTQ1JJUFRJT04gPSAiQSB1c2VmdWwgdXRpbGl0eSIKKyAgICAgLi4uCisgICAgIEVYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zb21ldGhpbmciCisgICAgIC4uLgorCisgICAgICMjIyMgYmJhcHBlbmRlZCBmcm9tIG1ldGEtYW5vdGhlcmxheWVyICMjIyMKKworICAgICBERVNDUklQVElPTiA9ICJDdXN0b21pemVkIHV0aWxpdHkiCisgICAgIEVYVFJBX09FQ09ORiArPSAiLS1lbmFibGUtc29tZXRoaW5nZWxzZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZGVhbGx5LCB5b3Ugd291bGQgdGlkeSB1cCB0aGVzZSB1dGlsaXRpZXMgYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAuLi4KKyAgICAgREVTQ1JJUFRJT04gPSAiQ3VzdG9taXplZCB1dGlsaXR5IgorICAgICAuLi4KKyAgICAgRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNvbWV0aGluZyAtLWVuYWJsZS1zb21ldGhpbmdlbHNlIgorICAgICAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmctYS1nZW5lcmFsLWxheWVyLXVzaW5nLXRoZS15b2N0by1sYXllci1zY3JpcHQnPgorICAgICAgICAgICAgPHRpdGxlPkNyZWF0aW5nIGEgR2VuZXJhbCBMYXllciBVc2luZyB0aGUgeW9jdG8tbGF5ZXIgU2NyaXB0PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT55b2N0by1sYXllcjwvZmlsZW5hbWU+IHNjcmlwdCBzaW1wbGlmaWVzCisgICAgICAgICAgICAgICAgY3JlYXRpbmcgYSBuZXcgZ2VuZXJhbCBsYXllci4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIEJTUCBsYXllcnMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2JzcC1sYXllcnMnPkJTUCBMYXllcnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTcGVjaWZpYyAoQlNQKQorICAgICAgICAgICAgICAgICAgICBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgbW9kZSBvZiB0aGUgc2NyaXB0J3Mgb3BlcmF0aW9uIGlzIHRvIHByb21wdCB5b3UgZm9yCisgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGdlbmVyYXRlIHRoZSBsYXllcjoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGxheWVyIHByaW9yaXR5LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGV0aGVyIG9yIG5vdCB0byBjcmVhdGUgYSBzYW1wbGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGV0aGVyIG9yIG5vdCB0byBjcmVhdGUgYSBzYW1wbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZCBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPnlvY3RvLWxheWVyIGNyZWF0ZTwvZmlsZW5hbWU+IHN1Yi1jb21tYW5kCisgICAgICAgICAgICAgICAgdG8gY3JlYXRlIGEgbmV3IGdlbmVyYWwgbGF5ZXIuCisgICAgICAgICAgICAgICAgSW4gaXRzIHNpbXBsZXN0IGZvcm0sIHlvdSBjYW4gY3JlYXRlIGEgbGF5ZXIgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgeW9jdG8tbGF5ZXIgY3JlYXRlIG15bGF5ZXIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIGV4YW1wbGUgY3JlYXRlcyBhIGxheWVyIG5hbWVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtbXlsYXllcjwvZmlsZW5hbWU+IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgdGhlIDxmaWxlbmFtZT55b2N0by1sYXllciBjcmVhdGU8L2ZpbGVuYW1lPiBjb21tYW5kIHJ1bnMsCisgICAgICAgICAgICAgICAgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBwcm9tcHRzIGFwcGVhciBpbiBicmFja2V0cy4KKyAgICAgICAgICAgICAgICBQcmVzc2luZyBlbnRlciB3aXRob3V0IHN1cHBseWluZyBhbnl0aGluZyBmb3IgdGhlIHByb21wdHMKKyAgICAgICAgICAgICAgICBvciBwcmVzc2luZyBlbnRlciBhbmQgcHJvdmlkaW5nIGFuIGludmFsaWQgcmVzcG9uc2UgY2F1c2VzIHRoZQorICAgICAgICAgICAgICAgIHNjcmlwdCB0byBhY2NlcHQgdGhlIGRlZmF1bHQgdmFsdWUuCisgICAgICAgICAgICAgICAgT25jZSB0aGUgc2NyaXB0IGNvbXBsZXRlcywgdGhlIG5ldyBsYXllcgorICAgICAgICAgICAgICAgIGlzIGNyZWF0ZWQgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgVGhlIHNjcmlwdCBuYW1lcyB0aGUgbGF5ZXIgYnkgcHJlcGVuZGluZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLTwvZmlsZW5hbWU+IHRvIHRoZSBuYW1lIHlvdSBwcm92aWRlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBNaW5pbWFsbHksIHRoZSBzY3JpcHQgY3JlYXRlcyB0aGUgZm9sbG93aW5nIHdpdGhpbiB0aGUgbGF5ZXI6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5UaGUgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgbGF5ZXIncyBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcm9vdCBuYW1lIGZvciB0aGUgZmlsZSBpcyB0aGUgc2FtZSBhcyB0aGUgcm9vdCBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIHByb3ZpZGVkIGZvciB0aGUgbGF5ZXIgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48cmVwbGFjZWFibGU+bGF5ZXI8L3JlcGxhY2VhYmxlPi5jb25mPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q09QWUlORy5NSVQ8L2ZpbGVuYW1lPiBmaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgY29weXJpZ2h0IGFuZCB1c2Ugbm90aWNlIGZvciB0aGUgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5UaGUgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBBIGZpbGUgZGVzY3JpYmluZyB0aGUgY29udGVudHMgb2YgeW91ciBuZXcgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IGNob29zZSB0byBnZW5lcmF0ZSBhIHNhbXBsZSByZWNpcGUgZmlsZSwgdGhlIHNjcmlwdAorICAgICAgICAgICAgICAgIHByb21wdHMgeW91IGZvciB0aGUgbmFtZSBmb3IgdGhlIHJlY2lwZSBhbmQgdGhlbiBjcmVhdGVzIGl0CisgICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5sYXllcjwvcmVwbGFjZWFibGU+L3JlY2lwZXMtZXhhbXBsZS9leGFtcGxlLzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSBzY3JpcHQgY3JlYXRlcyBhIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlIGFuZCBhCisgICAgICAgICAgICAgICAgZGlyZWN0b3J5LCB3aGljaCBjb250YWlucyBhIHNhbXBsZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5oZWxsb3dvcmxkLmM8L2ZpbGVuYW1lPiBzb3VyY2UgZmlsZSwgYWxvbmcgd2l0aAorICAgICAgICAgICAgICAgIGEgc2FtcGxlIHBhdGNoIGZpbGUuCisgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBwcm92aWRlIGEgcmVjaXBlIG5hbWUsIHRoZSBzY3JpcHQgdXNlcworICAgICAgICAgICAgICAgICJleGFtcGxlIi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IGNob29zZSB0byBnZW5lcmF0ZSBhIHNhbXBsZSBhcHBlbmQgZmlsZSwgdGhlIHNjcmlwdAorICAgICAgICAgICAgICAgIHByb21wdHMgeW91IGZvciB0aGUgbmFtZSBmb3IgdGhlIGZpbGUgYW5kIHRoZW4gY3JlYXRlcyBpdAorICAgICAgICAgICAgICAgIGluIDxmaWxlbmFtZT48cmVwbGFjZWFibGU+bGF5ZXI8L3JlcGxhY2VhYmxlPi9yZWNpcGVzLWV4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgc2NyaXB0IGNyZWF0ZXMgYSA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSBhbmQgYQorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSwgd2hpY2ggY29udGFpbnMgYSBzYW1wbGUgcGF0Y2ggZmlsZS4KKyAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHByb3ZpZGUgYSByZWNpcGUgbmFtZSwgdGhlIHNjcmlwdCB1c2VzCisgICAgICAgICAgICAgICAgImV4YW1wbGUiLgorICAgICAgICAgICAgICAgIFRoZSBzY3JpcHQgYWxzbyBwcm9tcHRzIHlvdSBmb3IgdGhlIHZlcnNpb24gb2YgdGhlIGFwcGVuZCBmaWxlLgorICAgICAgICAgICAgICAgIFRoZSB2ZXJzaW9uIHNob3VsZCBtYXRjaCB0aGUgcmVjaXBlIHRvIHdoaWNoIHRoZSBhcHBlbmQgZmlsZQorICAgICAgICAgICAgICAgIGlzIGFzc29jaWF0ZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBlYXNpZXN0IHdheSB0byBzZWUgaG93IHRoZSA8ZmlsZW5hbWU+eW9jdG8tbGF5ZXI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHNjcmlwdCB3b3JrcyBpcyB0byBleHBlcmltZW50IHdpdGggdGhlIHNjcmlwdC4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gcmVhZCB0aGUgdXNhZ2UgaW5mb3JtYXRpb24gYnkgZW50ZXJpbmcgdGhlCisgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB5b2N0by1sYXllciBoZWxwCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmNlIHlvdSBjcmVhdGUgeW91ciBnZW5lcmFsIGxheWVyLCB5b3UgbXVzdCBhZGQgaXQgdG8geW91cgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgd2hlcmUgYSBsYXllciBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW15bGF5ZXI8L2ZpbGVuYW1lPiBpcyBhZGRlZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCTEFZRVJTID0gPyIgXAorICAgICAgICAvdXNyL2xvY2FsL3NyYy95b2N0by9tZXRhIFwKKyAgICAgICAgL3Vzci9sb2NhbC9zcmMveW9jdG8vbWV0YS15b2N0byBcCisgICAgICAgIC91c3IvbG9jYWwvc3JjL3lvY3RvL21ldGEteW9jdG8tYnNwIFwKKyAgICAgICAgL3Vzci9sb2NhbC9zcmMveW9jdG8vbWV0YS1teWxheWVyIFwKKyAgICAgICAgIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBBZGRpbmcgdGhlIGxheWVyIHRvIHRoaXMgZmlsZSBlbmFibGVzIHRoZSBidWlsZCBzeXN0ZW0gdG8KKyAgICAgICAgICAgICAgICBsb2NhdGUgdGhlIGxheWVyIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1leHRlbmQtY3VzdG9taW1hZ2UnPgorICAgICAgICA8dGl0bGU+Q3VzdG9taXppbmcgSW1hZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gY3VzdG9taXplIGltYWdlcyB0byBzYXRpc2Z5IHBhcnRpY3VsYXIgcmVxdWlyZW1lbnRzLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBzZXZlcmFsIG1ldGhvZHMgYW5kIHByb3ZpZGVzIGd1aWRlbGluZXMgZm9yIGVhY2guCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWV4dGVuZC1jdXN0b21pbWFnZS1sb2NhbGNvbmYnPgorICAgICAgICAgICAgPHRpdGxlPkN1c3RvbWl6aW5nIEltYWdlcyBVc2luZyA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUHJvYmFibHkgdGhlIGVhc2llc3Qgd2F5IHRvIGN1c3RvbWl6ZSBhbiBpbWFnZSBpcyB0byBhZGQgYQorICAgICAgICAgICAgICAgIHBhY2thZ2UgYnkgd2F5IG9mIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgIEJlY2F1c2UgaXQgaXMgbGltaXRlZCB0byBsb2NhbCB1c2UsIHRoaXMgbWV0aG9kIGdlbmVyYWxseSBvbmx5CisgICAgICAgICAgICAgICAgYWxsb3dzIHlvdSB0byBhZGQgcGFja2FnZXMgYW5kIGlzIG5vdCBhcyBmbGV4aWJsZSBhcyBjcmVhdGluZworICAgICAgICAgICAgICAgIHlvdXIgb3duIGN1c3RvbWl6ZWQgaW1hZ2UuCisgICAgICAgICAgICAgICAgV2hlbiB5b3UgYWRkIHBhY2thZ2VzIHVzaW5nIGxvY2FsIHZhcmlhYmxlcyB0aGlzIHdheSwgeW91IG5lZWQKKyAgICAgICAgICAgICAgICB0byByZWFsaXplIHRoYXQgdGhlc2UgdmFyaWFibGUgY2hhbmdlcyBhcmUgaW4gZWZmZWN0IGZvciBldmVyeQorICAgICAgICAgICAgICAgIGJ1aWxkIGFuZCBjb25zZXF1ZW50bHkgYWZmZWN0IGFsbCBpbWFnZXMsIHdoaWNoIG1pZ2h0IG5vdAorICAgICAgICAgICAgICAgIGJlIHdoYXQgeW91IHJlcXVpcmUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGFkZCBhIHBhY2thZ2UgdG8geW91ciBpbWFnZSB1c2luZyB0aGUgbG9jYWwgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZpbGUsIHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlNQUdFX0lOU1RBTEwnPklNQUdFX0lOU1RBTEw8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgd2l0aCB0aGUgPGZpbGVuYW1lPl9hcHBlbmQ8L2ZpbGVuYW1lPiBvcGVyYXRvcjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX0lOU1RBTExfYXBwZW5kID0gIiBzdHJhY2UiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFVzZSBvZiB0aGUgc3ludGF4IGlzIGltcG9ydGFudCAtIHNwZWNpZmljYWxseSwgdGhlIHNwYWNlIGJldHdlZW4KKyAgICAgICAgICAgICAgICB0aGUgcXVvdGUgYW5kIHRoZSBwYWNrYWdlIG5hbWUsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN0cmFjZTwvZmlsZW5hbWU+IGluIHRoaXMgZXhhbXBsZS4KKyAgICAgICAgICAgICAgICBUaGlzIHNwYWNlIGlzIHJlcXVpcmVkIHNpbmNlIHRoZSA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgb3BlcmF0b3IgZG9lcyBub3QgYWRkIHRoZSBzcGFjZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIHlvdSBtdXN0IHVzZSA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+IGluc3RlYWQKKyAgICAgICAgICAgICAgICBvZiB0aGUgPGZpbGVuYW1lPis9PC9maWxlbmFtZT4gb3BlcmF0b3IgaWYgeW91IHdhbnQgdG8gYXZvaWQKKyAgICAgICAgICAgICAgICBvcmRlcmluZyBpc3N1ZXMuCisgICAgICAgICAgICAgICAgVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyBiZWNhdXNlIGRvaW5nIHNvIHVuY29uZGl0aW9uYWxseSBhcHBlbmRzCisgICAgICAgICAgICAgICAgdG8gdGhlIHZhcmlhYmxlIGFuZCBhdm9pZHMgb3JkZXJpbmcgcHJvYmxlbXMgZHVlIHRvIHRoZQorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGJlaW5nIHNldCBpbiBpbWFnZSByZWNpcGVzIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+IGZpbGVzIHdpdGggb3BlcmF0b3JzIGxpa2UKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Pz08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBVc2luZyA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+IGVuc3VyZXMgdGhlIG9wZXJhdGlvbiB0YWtlcworICAgICAgICAgICAgICAgIGFmZmVjdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgc2hvd24gaW4gaXRzIHNpbXBsZXN0IHVzZSwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTF9hcHBlbmQ8L2ZpbGVuYW1lPiBhZmZlY3RzIGFsbCBpbWFnZXMuCisgICAgICAgICAgICAgICAgSXQgaXMgcG9zc2libGUgdG8gZXh0ZW5kIHRoZSBzeW50YXggc28gdGhhdCB0aGUgdmFyaWFibGUKKyAgICAgICAgICAgICAgICBhcHBsaWVzIHRvIGEgc3BlY2lmaWMgaW1hZ2Ugb25seS4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9JTlNUQUxMX2FwcGVuZF9wbi1jb3JlLWltYWdlLW1pbmltYWwgPSAiIHN0cmFjZSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIGFkZHMgPGZpbGVuYW1lPnN0cmFjZTwvZmlsZW5hbWU+IHRvIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBpbWFnZSBvbmx5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFkZCBwYWNrYWdlcyB1c2luZyBhIHNpbWlsYXIgYXBwcm9hY2ggdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTCc+Q09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIElmIHlvdSB1c2UgdGhpcyB2YXJpYWJsZSwgb25seQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLSo8L2ZpbGVuYW1lPiBpbWFnZXMgYXJlIGFmZmVjdGVkLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1leHRlbmQtY3VzdG9taW1hZ2UtaW1hZ2VmZWF0dXJlcyc+CisgICAgICAgICAgICA8dGl0bGU+Q3VzdG9taXppbmcgSW1hZ2VzIFVzaW5nIEN1c3RvbSA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFub3RoZXIgbWV0aG9kIGZvciBjdXN0b21pemluZyB5b3VyIGltYWdlIGlzIHRvIGVuYWJsZSBvcgorICAgICAgICAgICAgICAgIGRpc2FibGUgaGlnaC1sZXZlbCBpbWFnZSBmZWF0dXJlcyBieSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBhbmQgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVFJBX0lNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIEFsdGhvdWdoIHRoZSBmdW5jdGlvbnMgZm9yIGJvdGggdmFyaWFibGVzIGFyZSBuZWFybHkgZXF1aXZhbGVudCwKKyAgICAgICAgICAgICAgICBiZXN0IHByYWN0aWNlcyBkaWN0YXRlIHVzaW5nIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZnJvbSB3aXRoaW4gYSByZWNpcGUgYW5kIHVzaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkVYVFJBX0lNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4gZnJvbSB3aXRoaW4KKyAgICAgICAgICAgICAgICB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmZWF0dXJlcyB3b3JrLCB0aGUgYmVzdCByZWZlcmVuY2UgaXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2NvcmUtaW1hZ2UuYmJjbGFzczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoaXMgY2xhc3MgbGlzdHMgb3V0IHRoZSBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBvZiB3aGljaCBtb3N0IG1hcCB0byBwYWNrYWdlIGdyb3VwcyB3aGlsZSBzb21lLCBzdWNoIGFzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlYnVnLXR3ZWFrczwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZWFkLW9ubHktcm9vdGZzPC9maWxlbmFtZT4sIHJlc29sdmUgYXMgZ2VuZXJhbAorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIHN1bW1hcnksIHRoZSBmaWxlIGxvb2tzIGF0IHRoZSBjb250ZW50cyBvZiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBhbmQgdGhlbiBtYXBzCisgICAgICAgICAgICAgICAgb3IgY29uZmlndXJlcyB0aGUgZmVhdHVyZSBhY2NvcmRpbmdseS4KKyAgICAgICAgICAgICAgICBCYXNlZCBvbiB0aGlzIGluZm9ybWF0aW9uLCB0aGUgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICBhZGRzIHRoZSBhcHByb3ByaWF0ZSBwYWNrYWdlcyBvciBjb25maWd1cmF0aW9ucyB0byB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfSU5TVEFMTCc+PGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgRWZmZWN0aXZlbHksIHlvdSBhcmUgZW5hYmxpbmcgZXh0cmEgZmVhdHVyZXMgYnkgZXh0ZW5kaW5nIHRoZQorICAgICAgICAgICAgICAgIGNsYXNzIG9yIGNyZWF0aW5nIGEgY3VzdG9tIGNsYXNzIGZvciB1c2Ugd2l0aCBzcGVjaWFsaXplZCBpbWFnZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGZyb20gd2l0aGluIHlvdXIgbG9jYWwgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgIFVzaW5nIGEgc2VwYXJhdGUgYXJlYSBmcm9tIHdoaWNoIHRvIGVuYWJsZSBmZWF0dXJlcyB3aXRoCisgICAgICAgICAgICAgICAgdGhpcyB2YXJpYWJsZSBoZWxwcyB5b3UgYXZvaWQgb3ZlcndyaXRpbmcgdGhlIGZlYXR1cmVzIGluIHRoZQorICAgICAgICAgICAgICAgIGltYWdlIHJlY2lwZSB0aGF0IGFyZSBlbmFibGVkIHdpdGgKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgdmFsdWUgb2YgPGZpbGVuYW1lPkVYVFJBX0lNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4gaXMgYWRkZWQKKyAgICAgICAgICAgICAgICB0byA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiB3aXRoaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBpbGx1c3RyYXRlIGhvdyB5b3UgY2FuIHVzZSB0aGVzZSB2YXJpYWJsZXMgdG8gbW9kaWZ5IHlvdXIKKyAgICAgICAgICAgICAgICBpbWFnZSwgY29uc2lkZXIgYW4gZXhhbXBsZSB0aGF0IHNlbGVjdHMgdGhlIFNTSCBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3Qgc2hpcHMgd2l0aCB0d28gU1NIIHNlcnZlcnMgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICB3aXRoIHlvdXIgaW1hZ2VzOiBEcm9wYmVhciBhbmQgT3BlblNTSC4KKyAgICAgICAgICAgICAgICBEcm9wYmVhciBpcyBhIG1pbmltYWwgU1NIIHNlcnZlciBhcHByb3ByaWF0ZSBmb3IKKyAgICAgICAgICAgICAgICByZXNvdXJjZS1jb25zdHJhaW5lZCBlbnZpcm9ubWVudHMsIHdoaWxlIE9wZW5TU0ggaXMgYQorICAgICAgICAgICAgICAgIHdlbGwta25vd24gc3RhbmRhcmQgU1NIIHNlcnZlciBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPmNvcmUtaW1hZ2Utc2F0bzwvZmlsZW5hbWU+IGltYWdlCisgICAgICAgICAgICAgICAgaXMgY29uZmlndXJlZCB0byB1c2UgRHJvcGJlYXIuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb3JlLWltYWdlLWZ1bGwtY21kbGluZTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLWxzYjwvZmlsZW5hbWU+IGltYWdlcyBib3RoCisgICAgICAgICAgICAgICAgaW5jbHVkZSBPcGVuU1NILgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gaW1hZ2UgZG9lcyBub3QKKyAgICAgICAgICAgICAgICBjb250YWluIGFuIFNTSCBzZXJ2ZXIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gY3VzdG9taXplIHlvdXIgaW1hZ2UgYW5kIGNoYW5nZSB0aGVzZSBkZWZhdWx0cy4KKyAgICAgICAgICAgICAgICBFZGl0IHRoZSA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGluIHlvdXIgcmVjaXBlIG9yIHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiBpbiB5b3VyCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHNvIHRoYXQgaXQgY29uZmlndXJlcyB0aGUKKyAgICAgICAgICAgICAgICBpbWFnZSB5b3UgYXJlIHdvcmtpbmcgd2l0aCB0byBpbmNsdWRlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNzaC1zZXJ2ZXItZHJvcGJlYXI8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zc2gtc2VydmVyLW9wZW5zc2g8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtaW1hZ2VzJz5JbWFnZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgZm9yIGEgY29tcGxldGUKKyAgICAgICAgICAgICAgICBsaXN0IG9mIGltYWdlIGZlYXR1cmVzIHRoYXQgc2hpcCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1leHRlbmQtY3VzdG9taW1hZ2UtY3VzdG9tYmInPgorICAgICAgICAgICAgPHRpdGxlPkN1c3RvbWl6aW5nIEltYWdlcyBVc2luZyBDdXN0b20gLmJiIEZpbGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGN1c3RvbWl6ZSBhbiBpbWFnZSBieSBjcmVhdGluZyBhIGN1c3RvbSByZWNpcGUKKyAgICAgICAgICAgICAgICB0aGF0IGRlZmluZXMgYWRkaXRpb25hbCBzb2Z0d2FyZSBhcyBwYXJ0IG9mIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgdGhlIGZvcm0gZm9yIHRoZSB0d28gbGluZXMgeW91IG5lZWQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9JTlNUQUxMID0gInBhY2thZ2Vncm91cC1jb3JlLXgxMS1iYXNlIHBhY2thZ2UxIHBhY2thZ2UyIgorCisgICAgIGluaGVyaXQgY29yZS1pbWFnZQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRGVmaW5pbmcgdGhlIHNvZnR3YXJlIHVzaW5nIGEgY3VzdG9tIHJlY2lwZSBnaXZlcyB5b3UgdG90YWwKKyAgICAgICAgICAgICAgICBjb250cm9sIG92ZXIgdGhlIGNvbnRlbnRzIG9mIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gdXNlIHRoZSBjb3JyZWN0IG5hbWVzIG9mIHBhY2thZ2VzIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfSU5TVEFMTCc+SU1BR0VfSU5TVEFMTDwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBZb3UgbXVzdCB1c2UgdGhlIE9wZW5FbWJlZGRlZCBub3RhdGlvbiBhbmQgbm90IHRoZSBEZWJpYW4gbm90YXRpb24gZm9yIHRoZSBuYW1lcworICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5nbGliYy1kZXY8L2ZpbGVuYW1lPiBpbnN0ZWFkIG9mIDxmaWxlbmFtZT5saWJjNi1kZXY8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBvdGhlciBtZXRob2QgZm9yIGNyZWF0aW5nIGEgY3VzdG9tIGltYWdlIGlzIHRvIGJhc2UgaXQgb24gYW4gZXhpc3RpbmcgaW1hZ2UuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGNyZWF0ZSBhbiBpbWFnZSBiYXNlZCBvbiA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBidXQgYWRkIHRoZSBhZGRpdGlvbmFsIHBhY2thZ2UgPGZpbGVuYW1lPnN0cmFjZTwvZmlsZW5hbWU+IHRvIHRoZSBpbWFnZSwKKyAgICAgICAgICAgICAgICBjb3B5IHRoZSA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLXNhdG8vaW1hZ2VzL2NvcmUtaW1hZ2Utc2F0by5iYjwvZmlsZW5hbWU+IHRvIGEKKyAgICAgICAgICAgICAgICBuZXcgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGFuZCBhZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHRoZSBlbmQgb2YgdGhlIGNvcHk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9JTlNUQUxMICs9ICJzdHJhY2UiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1leHRlbmQtY3VzdG9taW1hZ2UtY3VzdG9tdGFza3MnPgorICAgICAgICAgICAgPHRpdGxlPkN1c3RvbWl6aW5nIEltYWdlcyBVc2luZyBDdXN0b20gUGFja2FnZSBHcm91cHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgY29tcGxleCBjdXN0b20gaW1hZ2VzLCB0aGUgYmVzdCBhcHByb2FjaCBmb3IgY3VzdG9taXppbmcKKyAgICAgICAgICAgICAgICBhbiBpbWFnZSBpcyB0byBjcmVhdGUgYSBjdXN0b20gcGFja2FnZSBncm91cCByZWNpcGUgdGhhdCBpcworICAgICAgICAgICAgICAgIHVzZWQgdG8gYnVpbGQgdGhlIGltYWdlIG9yIGltYWdlcy4KKyAgICAgICAgICAgICAgICBBIGdvb2QgZXhhbXBsZSBvZiBhIHBhY2thZ2UgZ3JvdXAgcmVjaXBlIGlzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWJhc2UuYmI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IGV4YW1pbmUgdGhhdCByZWNpcGUsIHlvdSBzZWUgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VTJz5QQUNLQUdFUzwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBsaXN0cyB0aGUgcGFja2FnZSBncm91cCBwYWNrYWdlcyB0byBwcm9kdWNlLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+aW5oZXJpdCBwYWNrYWdlZ3JvdXA8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQKKyAgICAgICAgICAgICAgICBzZXRzIGFwcHJvcHJpYXRlIGRlZmF1bHQgdmFsdWVzIGFuZCBhdXRvbWF0aWNhbGx5IGFkZHMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWRldjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+LWRiZzwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LXB0ZXN0PC9maWxlbmFtZT4gY29tcGxlbWVudGFyeSBwYWNrYWdlcyBmb3IgZWFjaAorICAgICAgICAgICAgICAgIHBhY2thZ2Ugc3BlY2lmaWVkIGluIHRoZSA8ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHN0YXRlbWVudC4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5pbmhlcml0IHBhY2thZ2VzPC9maWxlbmFtZT4gc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICAgIGxvY2F0ZWQgbmVhciB0aGUgdG9wIG9mIHRoZSByZWNpcGUsIGNlcnRhaW5seSBiZWZvcmUKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+IHN0YXRlbWVudC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBlYWNoIHBhY2thZ2UgeW91IHNwZWNpZnkgaW4gPGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJERVBFTkRTJz5SREVQRU5EUzwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJSRUNPTU1FTkRTJz5SUkVDT01NRU5EUzwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBlbnRyaWVzIHRvIHByb3ZpZGUgYSBsaXN0IG9mIHBhY2thZ2VzIHRoZSBwYXJlbnQgdGFzayBwYWNrYWdlCisgICAgICAgICAgICAgICAgc2hvdWxkIGNvbnRhaW4uCisgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgZXhhbXBsZXMgb2YgdGhlc2UgZnVydGhlciBkb3duIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtYmFzZS5iYjwvZmlsZW5hbWU+IHJlY2lwZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSGVyZSBpcyBhIHNob3J0LCBmYWJyaWNhdGVkIGV4YW1wbGUgc2hvd2luZyB0aGUgc2FtZSBiYXNpYworICAgICAgICAgICAgICAgIHBpZWNlczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFU0NSSVBUSU9OID0gIk15IEN1c3RvbSBQYWNrYWdlIEdyb3VwcyIKKworICAgICBpbmhlcml0IHBhY2thZ2Vncm91cAorCisgICAgIFBBQ0tBR0VTID0gIlwKKyAgICAgICAgIHBhY2thZ2Vncm91cC1jdXN0b20tYXBwcyBcCisgICAgICAgICBwYWNrYWdlZ3JvdXAtY3VzdG9tLXRvb2xzIFwKKyAgICAgICAgICIKKworICAgICBSREVQRU5EU19wYWNrYWdlZ3JvdXAtY3VzdG9tLWFwcHMgPSAiXAorICAgICAgICAgZHJvcGJlYXIgXAorICAgICAgICAgcG9ydG1hcCBcCisgICAgICAgICBwc3BsYXNoIgorCisgICAgIFJERVBFTkRTX3BhY2thZ2Vncm91cC1jdXN0b20tdG9vbHMgPSAiXAorICAgICAgICAgb3Byb2ZpbGUgXAorICAgICAgICAgb3Byb2ZpbGV1aS1zZXJ2ZXIgXAorICAgICAgICAgbHR0bmctdG9vbHMiCisKKyAgICAgUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWN1c3RvbS10b29scyA9ICJcCisgICAgICAgICBrZXJuZWwtbW9kdWxlLW9wcm9maWxlIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsIHR3byBwYWNrYWdlIGdyb3VwIHBhY2thZ2VzIGFyZSBjcmVhdGVkIHdpdGggdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCB0aGVpcgorICAgICAgICAgICAgICAgIHJlY29tbWVuZGVkIHBhY2thZ2UgZGVwZW5kZW5jaWVzIGxpc3RlZDogPGZpbGVuYW1lPnBhY2thZ2Vncm91cC1jdXN0b20tYXBwczwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWN1c3RvbS10b29sczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRvIGJ1aWxkIGFuIGltYWdlIHVzaW5nIHRoZXNlIHBhY2thZ2UgZ3JvdXAgcGFja2FnZXMsIHlvdSBuZWVkIHRvIGFkZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtY3VzdG9tLWFwcHM8L2ZpbGVuYW1lPiBhbmQvb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWN1c3RvbS10b29sczwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9JTlNUQUxMJz5JTUFHRV9JTlNUQUxMPC91bGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBGb3Igb3RoZXIgZm9ybXMgb2YgaW1hZ2UgZGVwZW5kZW5jaWVzIHNlZSB0aGUgb3RoZXIgYXJlYXMgb2YgdGhpcyBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1leHRlbmQtY3VzdG9taW1hZ2UtaW1hZ2UtbmFtZSc+CisgICAgICAgICAgICA8dGl0bGU+Q3VzdG9taXppbmcgYW4gSW1hZ2UgSG9zdG5hbWU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgY29uZmlndXJlZCBob3N0bmFtZSAoaS5lLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL2hvc3RuYW1lPC9maWxlbmFtZT4pIGluIGFuIGltYWdlIGlzIHRoZQorICAgICAgICAgICAgICAgIHNhbWUgYXMgdGhlIG1hY2hpbmUgbmFtZS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgZXF1YWxzICJxZW11eDg2IiwgdGhlIGNvbmZpZ3VyZWQgaG9zdG5hbWUgd3JpdHRlbiB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL2hvc3RuYW1lPC9maWxlbmFtZT4gaXMgInFlbXV4ODYiLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGN1c3RvbWl6ZSB0aGlzIG5hbWUgYnkgYWx0ZXJpbmcgdGhlIHZhbHVlIG9mIHRoZQorICAgICAgICAgICAgICAgICJob3N0bmFtZSIgdmFyaWFibGUgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhc2UtZmlsZXM8L2ZpbGVuYW1lPiByZWNpcGUgdXNpbmcgZWl0aGVyCisgICAgICAgICAgICAgICAgYW4gYXBwZW5kIGZpbGUgb3IgYSBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgaW4gYW4gYXBwZW5kIGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBob3N0bmFtZT0ibXlob3N0bmFtZSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgaW4gYSBjb25maWd1cmF0aW9uIGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBob3N0bmFtZV9wbi1iYXNlLWZpbGVzID0gIm15aG9zdG5hbWUiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDaGFuZ2luZyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgImhvc3RuYW1lIiBjYW4gYmUKKyAgICAgICAgICAgICAgICB1c2VmdWwgaW4gY2VydGFpbiBzaXR1YXRpb25zLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBuZWVkIHRvIGRvIGV4dGVuc2l2ZSB0ZXN0aW5nIG9uIGFuCisgICAgICAgICAgICAgICAgaW1hZ2UgYW5kIHlvdSB3b3VsZCBsaWtlIHRvIGVhc2lseSBpZGVudGlmeSB0aGUgaW1hZ2UKKyAgICAgICAgICAgICAgICB1bmRlciB0ZXN0IGZyb20gZXhpc3RpbmcgaW1hZ2VzIHdpdGggdHlwaWNhbCBkZWZhdWx0CisgICAgICAgICAgICAgICAgaG9zdG5hbWVzLgorICAgICAgICAgICAgICAgIEluIHRoaXMgc2l0dWF0aW9uLCB5b3UgY291bGQgY2hhbmdlIHRoZSBkZWZhdWx0IGhvc3RuYW1lIHRvCisgICAgICAgICAgICAgICAgInRlc3RtZSIsIHdoaWNoIHJlc3VsdHMgaW4gYWxsIHRoZSBpbWFnZXMgdXNpbmcgdGhlIG5hbWUKKyAgICAgICAgICAgICAgICAidGVzdG1lIi4KKyAgICAgICAgICAgICAgICBPbmNlIHRlc3RpbmcgaXMgY29tcGxldGUgYW5kIHlvdSBkbyBub3QgbmVlZCB0byByZWJ1aWxkIHRoZQorICAgICAgICAgICAgICAgIGltYWdlIGZvciB0ZXN0IGFueSBsb25nZXIsIHlvdSBjYW4gZWFzaWx5IHJlc2V0IHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgaG9zdG5hbWUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFub3RoZXIgcG9pbnQgb2YgaW50ZXJlc3QgaXMgdGhhdCBpZiB5b3UgdW5zZXQgdGhlIHZhcmlhYmxlLAorICAgICAgICAgICAgICAgIHRoZSBpbWFnZSB3aWxsIGhhdmUgbm8gZGVmYXVsdCBob3N0bmFtZSBpbiB0aGUgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCB1bnNldHMgdGhlIHZhcmlhYmxlIGluIGEKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBob3N0bmFtZV9wbi1iYXNlLWZpbGVzID0gIiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSGF2aW5nIG5vIGRlZmF1bHQgaG9zdG5hbWUgaW4gdGhlIGZpbGVzeXN0ZW0gaXMgc3VpdGFibGUgZm9yCisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRzIHRoYXQgdXNlIGR5bmFtaWMgaG9zdG5hbWVzIHN1Y2ggYXMgdmlydHVhbAorICAgICAgICAgICAgICAgIG1hY2hpbmVzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtd3JpdGluZy1hLW5ldy1yZWNpcGUnPgorICAgICAgICA8dGl0bGU+V3JpdGluZyBhIE5ldyBSZWNpcGU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUmVjaXBlcyAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGVzKSBhcmUgZnVuZGFtZW50YWwgY29tcG9uZW50cworICAgICAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBFYWNoIHNvZnR3YXJlIGNvbXBvbmVudCBidWlsdCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgcmVxdWlyZXMgYSByZWNpcGUgdG8gZGVmaW5lIHRoZSBjb21wb25lbnQuCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB0byBjcmVhdGUsIHdyaXRlLCBhbmQgdGVzdCBhIG5ldworICAgICAgICAgICAgcmVjaXBlLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHZhcmlhYmxlcyB0aGF0IGFyZSB1c2VmdWwgZm9yIHJlY2lwZXMgYW5kCisgICAgICAgICAgICAgICAgZm9yIGluZm9ybWF0aW9uIGFib3V0IHJlY2lwZSBuYW1pbmcgaXNzdWVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi12YXJsb2NhbGl0eS1yZWNpcGUtcmVxdWlyZWQnPlJlcXVpcmVkPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtb3ZlcnZpZXcnPgorICAgICAgICAgICAgPHRpdGxlPk92ZXJ2aWV3PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBmaWd1cmUgc2hvd3MgdGhlIGJhc2ljIHByb2Nlc3MgZm9yIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICBuZXcgcmVjaXBlLgorICAgICAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhlIHNlY3Rpb24gcHJvdmlkZXMgZGV0YWlscyBmb3IgdGhlIHN0ZXBzLgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9yZWNpcGUtd29ya2Zsb3cucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLWxvY2F0ZS1vci1hdXRvbWF0aWNhbGx5LWNyZWF0ZS1hLWJhc2UtcmVjaXBlJz4KKyAgICAgICAgICAgIDx0aXRsZT5Mb2NhdGUgb3IgQXV0b21hdGljYWxseSBDcmVhdGUgYSBCYXNlIFJlY2lwZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWx3YXlzIHdyaXRlIGEgcmVjaXBlIGZyb20gc2NyYXRjaC4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB0d28gY2hvaWNlcyBleGlzdCB0aGF0IGNhbiBoZWxwIHlvdSBxdWlja2x5IGdldCBhCisgICAgICAgICAgICAgICAgc3RhcnQgb24gYSBuZXcgcmVjaXBlOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnJlY2lwZXRvb2w8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQSB0b29sIHByb3ZpZGVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0IHRoYXQgYXV0b21hdGVzCisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbiBvZiBhIGJhc2UgcmVjaXBlIGJhc2VkIG9uIHRoZSBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXhpc3RpbmcgUmVjaXBlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgTG9jYXRpb24gYW5kIG1vZGlmaWNhdGlvbiBvZiBhbiBleGlzdGluZyByZWNpcGUgdGhhdCBpcworICAgICAgICAgICAgICAgICAgICAgICAgc2ltaWxhciBpbiBmdW5jdGlvbiB0byB0aGUgcmVjaXBlIHlvdSBuZWVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLWNyZWF0aW5nLXRoZS1iYXNlLXJlY2lwZS11c2luZy1yZWNpcGV0b29sJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgdGhlIEJhc2UgUmVjaXBlIFVzaW5nIDxmaWxlbmFtZT5yZWNpcGV0b29sPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZWNpcGV0b29sPC9maWxlbmFtZT4gYXV0b21hdGVzIGNyZWF0aW9uIG9mCisgICAgICAgICAgICAgICAgICAgIGEgYmFzZSByZWNpcGUgZ2l2ZW4gYSBzZXQgb2Ygc291cmNlIGNvZGUgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIEFzIGxvbmcgYXMgeW91IGNhbiBleHRyYWN0IG9yIHBvaW50IHRvIHRoZSBzb3VyY2UgZmlsZXMsCisgICAgICAgICAgICAgICAgICAgIHRoZSB0b29sIHdpbGwgY29uc3RydWN0IGEgcmVjaXBlIGFuZCBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBhbGwgcHJlLWJ1aWxkIGluZm9ybWF0aW9uIGludG8gdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhdmUgYW4gYXBwbGljYXRpb24gdGhhdCBidWlsZHMKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgQXV0b3Rvb2xzLgorICAgICAgICAgICAgICAgICAgICBDcmVhdGluZyB0aGUgYmFzZSByZWNpcGUgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZXRvb2w8L2ZpbGVuYW1lPiByZXN1bHRzIGluIGEgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIHRoYXQgaGFzIHRoZSBwcmUtYnVpbGQgZGVwZW5kZW5jaWVzLCBsaWNlbnNlIHJlcXVpcmVtZW50cywKKyAgICAgICAgICAgICAgICAgICAgYW5kIGNoZWNrc3VtcyBjb25maWd1cmVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBydW4gdGhlIHRvb2wsIHlvdSBqdXN0IG5lZWQgdG8gYmUgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kIGhhdmUgc291cmNlZCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgIChpLmUuCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3VsaW5rPikuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGJhc2ljIDxmaWxlbmFtZT5yZWNpcGV0b29sPC9maWxlbmFtZT4gc3ludGF4OgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJ1bm5pbmcgPGZpbGVuYW1lPnJlY2lwZXRvb2wgLWg8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZXRvb2wgY3JlYXRlIC1oPC9maWxlbmFtZT4gcHJvZHVjZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBQeXRob24tZ2VuZXJhdGVkIGhlbHAsIHdoaWNoIHByZXNlbnRlZCBkaWZmZXJlbnRseQorICAgICAgICAgICAgICAgICAgICAgICAgdGhhbiB3aGF0IGZvbGxvd3MgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJlY2lwZXRvb2wgLWgKKyAgICAgcmVjaXBldG9vbCBjcmVhdGUgWy1oXQorICAgICByZWNpcGV0b29sIFstZF0gWy1xXSBbLS1jb2xvciBhdXRvIHwgYWx3YXlzIHwgbmV2ZXIgXSBjcmVhdGUgLW8gPHJlcGxhY2VhYmxlPk9VVEZJTEU8L3JlcGxhY2VhYmxlPiBbLW1dIFsteCA8cmVwbGFjZWFibGU+RVhURVJOQUxTUkM8L3JlcGxhY2VhYmxlPl0gPHJlcGxhY2VhYmxlPnNvdXJjZTwvcmVwbGFjZWFibGU+CisKKyAgICAgICAgICAtZCAgICAgICBFbmFibGVzIGRlYnVnIG91dHB1dC4KKyAgICAgICAgICAtcSAgICAgICBPdXRwdXRzIG9ubHkgZXJyb3JzIChxdWlldCBtb2RlKS4KKyAgICAgICAgICAtLWNvbG9yICBDb2xvcml6ZXMgdGhlIG91dHB1dCBhdXRvbWF0aWNhbGx5LCBhbHdheXMsIG9yIG5ldmVyLgorICAgICAgICAgIC1oICAgICAgIERpc3BsYXlzIFB5dGhvbiBnZW5lcmF0ZWQgc3ludGF4IGZvciByZWNpcGV0b29sLgorICAgICAgICAgIGNyZWF0ZSAgIENhdXNlcyByZWNpcGV0b29sIHRvIGNyZWF0ZSBhIGJhc2UgcmVjaXBlLiAgVGhlIGNyZWF0ZQorICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgaXMgZnVydGhlciBkZWZpbmVkIHdpdGggdGhlc2Ugb3B0aW9uczoKKworICAgICAgICAgICAgICAgICAgIC1vIDxyZXBsYWNlYWJsZT5PVVRGSUxFPC9yZXBsYWNlYWJsZT4gICAgICBTcGVjaWZpZXMgdGhlIGZ1bGwgcGF0aCBhbmQgZmlsZW5hbWUgZm9yIHRoZSBnZW5lcmF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgIC1tICAgICAgICAgICAgICBDYXVzZXMgdGhlIHJlY2lwZSB0byBiZSBtYWNoaW5lLXNwZWNpZmljIHJhdGhlciB0aGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyAoZGVmYXVsdCkuCisgICAgICAgICAgICAgICAgICAgLXggPHJlcGxhY2VhYmxlPkVYVEVSTkFMU1JDPC9yZXBsYWNlYWJsZT4gIEZldGNoZXMgYW5kIGV4dHJhY3RzIHNvdXJjZSBmaWxlcyBmcm9tIDxyZXBsYWNlYWJsZT5zb3VyY2U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgcGxhY2VzIHRoZW0gaW4gPHJlcGxhY2VhYmxlPkVYVEVSTkFMU1JDPC9yZXBsYWNlYWJsZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5zb3VyY2U8L3JlcGxhY2VhYmxlPiBtdXN0IGJlIGEgVVJMLgorICAgICAgICAgICAgICAgICAgIC1oICAgICAgICAgICAgICBEaXNwbGF5cyBQeXRob24tZ2VuZXJhdGVkIHN5bnRheCBmb3IgY3JlYXRlLgorICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5zb3VyY2U8L3JlcGxhY2VhYmxlPiAgICAgICAgICBTcGVjaWZpZXMgdGhlIHNvdXJjZSBjb2RlIG9uIHdoaWNoIHRvIGJhc2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBSdW5uaW5nIDxmaWxlbmFtZT5yZWNpcGV0b29sIGNyZWF0ZSAtbzwvZmlsZW5hbWU+Jm5ic3A7PHJlcGxhY2VhYmxlPk9VVEZJTEU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICBjcmVhdGVzIHRoZSBiYXNlIHJlY2lwZSBhbmQgbG9jYXRlcyBpdCBwcm9wZXJseSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIgdGhhdCBjb250YWlucyB5b3VyIHNvdXJjZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSBzb21lIHN5bnRheCBleGFtcGxlczoKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgc3ludGF4IHRvIGdlbmVyYXRlIGEgcmVjaXBlIGJhc2VkIG9uIDxyZXBsYWNlYWJsZT5zb3VyY2U8L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgICAgICAgICAgICAgT25jZSBnZW5lcmF0ZWQsIHRoZSByZWNpcGUgcmVzaWRlcyBpbiB0aGUgZXhpc3Rpbmcgc291cmNlCisgICAgICAgICAgICAgICAgICAgIGNvZGUgbGF5ZXI6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcmVjaXBldG9vbCBjcmVhdGUgLW8gPHJlcGxhY2VhYmxlPk9VVEZJTEU8L3JlcGxhY2VhYmxlPiZuYnNwOzxyZXBsYWNlYWJsZT5zb3VyY2U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFVzZSB0aGlzIHN5bnRheCB0byBnZW5lcmF0ZSBhIHJlY2lwZSB1c2luZyBjb2RlIHRoYXQgeW91CisgICAgICAgICAgICAgICAgICAgIGV4dHJhY3QgZnJvbSA8cmVwbGFjZWFibGU+c291cmNlPC9yZXBsYWNlYWJsZT4uCisgICAgICAgICAgICAgICAgICAgIFRoZSBleHRyYWN0ZWQgY29kZSBpcyBwbGFjZWQgaW4gaXRzIG93biBsYXllciBkZWZpbmVkCisgICAgICAgICAgICAgICAgICAgIGJ5IDxyZXBsYWNlYWJsZT5FWFRFUk5BTFNSQzwvcmVwbGFjZWFibGU+LgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJlY2lwZXRvb2wgY3JlYXRlIC1vIDxyZXBsYWNlYWJsZT5PVVRGSUxFPC9yZXBsYWNlYWJsZT4gLXggPHJlcGxhY2VhYmxlPkVYVEVSTkFMU1JDPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnNvdXJjZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgc3ludGF4IHRvIGdlbmVyYXRlIGEgcmVjaXBlIGJhc2VkIG9uIDxyZXBsYWNlYWJsZT5zb3VyY2U8L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG9wdGlvbnMgZGlyZWN0IDxmaWxlbmFtZT5yZWNpcGV0b29sPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICAgICAgcnVuIGluICJxdWlldCBtb2RlIiBhbmQgdG8gZ2VuZXJhdGUgZGVidWdnaW5nIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICBPbmNlIGdlbmVyYXRlZCwgdGhlIHJlY2lwZSByZXNpZGVzIGluIHRoZSBleGlzdGluZyBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgY29kZSBsYXllcjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByZWNpcGV0b29sIGNyZWF0ZSAtbyA8cmVwbGFjZWFibGU+T1VURklMRTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5zb3VyY2U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS1sb2NhdGluZy1hbmQtdXNpbmctYS1zaW1pbGFyLXJlY2lwZSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkxvY2F0aW5nIGFuZCBVc2luZyBhIFNpbWlsYXIgUmVjaXBlPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZWZvcmUgd3JpdGluZyBhIHJlY2lwZSBmcm9tIHNjcmF0Y2gsIGl0IGlzIG9mdGVuIHVzZWZ1bCB0bworICAgICAgICAgICAgICAgICAgICBkaXNjb3ZlciB3aGV0aGVyIHNvbWVvbmUgZWxzZSBoYXMgYWxyZWFkeSB3cml0dGVuIG9uZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIG1lZXRzIChvciBjb21lcyBjbG9zZSB0byBtZWV0aW5nKSB5b3VyIG5lZWRzLgorICAgICAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBhbmQgT3BlbkVtYmVkZGVkIGNvbW11bml0aWVzIG1haW50YWluIG1hbnkKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlcyB0aGF0IG1pZ2h0IGJlIGNhbmRpZGF0ZXMgZm9yIHdoYXQgeW91IGFyZSBkb2luZy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGEgZ29vZCBjZW50cmFsIGluZGV4IG9mIHRoZXNlIHJlY2lwZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZyc+T3BlbkVtYmVkZGVkIG1ldGFkYXRhIGluZGV4PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdvcmtpbmcgZnJvbSBhbiBleGlzdGluZyByZWNpcGUgb3IgYSBza2VsZXRvbiByZWNpcGUgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgIGJlc3Qgd2F5IHRvIGdldCBzdGFydGVkLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIHBvaW50cyBvbiBib3RoIG1ldGhvZHM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxvY2F0ZSBhbmQgbW9kaWZ5IGEgcmVjaXBlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBjbG9zZSB0byB3aGF0IHlvdSB3YW50IHRvIGRvOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRob2Qgd29ya3Mgd2hlbiB5b3UgYXJlIGZhbWlsaWFyIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCByZWNpcGUgc3BhY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1ldGhvZCBkb2VzIG5vdCB3b3JrIHNvIHdlbGwgZm9yIHRob3NlIG5ldyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IG9yIHdyaXRpbmcgcmVjaXBlcy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+U29tZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBtZXRob2QgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgYSByZWNpcGUgdGhhdCBoYXMgYXJlYXMgdG90YWxseSB1bnJlbGF0ZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGF0IHlvdSBhcmUgdHJ5aW5nIHRvIGFjY29tcGxpc2ggd2l0aCB5b3VyIHJlY2lwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgcmVjb2duaXppbmcgYXJlYXMgb2YgdGhlIHJlY2lwZSB0aGF0IHlvdSBtaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgdG8gYWRkIGZyb20gc2NyYXRjaCwgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCB0aGVzZSByaXNrcyBzdGVtIGZyb20gdW5mYW1pbGlhcml0eSB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nIHJlY2lwZSBzcGFjZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNlIGFuZCBtb2RpZnkgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrZWxldG9uIHJlY2lwZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIGZvciBzb21lIHJlYXNvbiB5b3UgZG8gbm90IHdhbnQgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZXRvb2w8L2ZpbGVuYW1lPiBhbmQgeW91IGNhbm5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmQgYW4gZXhpc3RpbmcgcmVjaXBlIHRoYXQgaXMgY2xvc2UgdG8gbWVldGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgbmVlZHMsIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZSB0aGUgZnVuZGFtZW50YWwgYXJlYXMgb2YgYSBuZXcgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgREVTQ1JJUFRJT04gPSAiIgorICAgICBIT01FUEFHRSA9ICIiCisgICAgIExJQ0VOU0UgPSAiIgorICAgICBTRUNUSU9OID0gIiIKKyAgICAgREVQRU5EUyA9ICIiCisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiIgorCisgICAgIFNSQ19VUkkgPSAiIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtc3RvcmluZy1hbmQtbmFtaW5nLXRoZS1yZWNpcGUnPgorICAgICAgICAgICAgPHRpdGxlPlN0b3JpbmcgYW5kIE5hbWluZyB0aGUgUmVjaXBlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSB5b3VyIGJhc2UgcmVjaXBlLCB5b3Ugc2hvdWxkIHB1dCBpdCBpbiB5b3VyCisgICAgICAgICAgICAgICAgb3duIGxheWVyIGFuZCBuYW1lIGl0IGFwcHJvcHJpYXRlbHkuCisgICAgICAgICAgICAgICAgTG9jYXRpbmcgaXQgY29ycmVjdGx5IGVuc3VyZXMgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgc3lzdGVtIGNhbiBmaW5kIGl0IHdoZW4geW91IHVzZSBCaXRCYWtlIHRvIHByb2Nlc3MgdGhlCisgICAgICAgICAgICAgICAgcmVjaXBlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3RvcmluZyBZb3VyIFJlY2lwZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBsb2NhdGVzIHlvdXIgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIHRocm91Z2ggdGhlIGxheWVyJ3MgPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGUgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJGSUxFUyc+PGZpbGVuYW1lPkJCRklMRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIHNldHMgdXAgYSBwYXRoIGZyb20gd2hpY2ggdGhlIGJ1aWxkIHN5c3RlbSBjYW4KKyAgICAgICAgICAgICAgICAgICAgbG9jYXRlIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIHR5cGljYWwgdXNlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCRklMRVMgKz0gIiR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmIgXAorICAgICAgICAgICAgICAgICAke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IG5lZWQgdG8gYmUgc3VyZSB5b3UgbG9jYXRlIHlvdXIgbmV3IHJlY2lwZQorICAgICAgICAgICAgICAgICAgICBpbnNpZGUgeW91ciBsYXllciBzdWNoIHRoYXQgaXQgY2FuIGJlIGZvdW5kLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IGxheWVycyBhcmUKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycyc+VW5kZXJzdGFuZGluZyBhbmQgQ3JlYXRpbmcgTGF5ZXJzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk5hbWluZyBZb3VyIFJlY2lwZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBuYW1lIHlvdXIgcmVjaXBlLCB5b3UgbmVlZCB0byBmb2xsb3cgdGhpcyBuYW1pbmcKKyAgICAgICAgICAgICAgICAgICAgY29udmVudGlvbjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+YmFzZW5hbWU8L3JlcGxhY2VhYmxlPl88cmVwbGFjZWFibGU+dmVyc2lvbjwvcmVwbGFjZWFibGU+LmJiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVXNlIGxvd2VyLWNhc2VkIGNoYXJhY3RlcnMgYW5kIGRvIG5vdCBpbmNsdWRlIHRoZSByZXNlcnZlZAorICAgICAgICAgICAgICAgICAgICBzdWZmaXhlcyA8ZmlsZW5hbWU+LW5hdGl2ZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWNyb3NzPC9maWxlbmFtZT4sIDxmaWxlbmFtZT4taW5pdGlhbDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICBvciA8ZmlsZW5hbWU+LWRldjwvZmlsZW5hbWU+IGNhc3VhbGx5IChpLmUuIGRvIG5vdCB1c2UgdGhlbQorICAgICAgICAgICAgICAgICAgICBhcyBwYXJ0IG9mIHlvdXIgcmVjaXBlIG5hbWUgdW5sZXNzIHRoZSBzdHJpbmcgYXBwbGllcykuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgY3Vwc18xLjcuMC5iYgorICAgICBnYXdrXzQuMC4yLmJiCisgICAgIGlyc3NpXzAuOC4xNi1yYzEuYmIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndW5kZXJzdGFuZGluZy1yZWNpcGUtc3ludGF4Jz4KKyAgICAgICAgICAgIDx0aXRsZT5VbmRlcnN0YW5kaW5nIFJlY2lwZSBTeW50YXg8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVbmRlcnN0YW5kaW5nIHJlY2lwZSBmaWxlIHN5bnRheCBpcyBpbXBvcnRhbnQgZm9yCisgICAgICAgICAgICAgICAgd3JpdGluZyByZWNpcGVzLgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBvdmVydmlld3MgdGhlIGJhc2ljIGl0ZW1zIHRoYXQgbWFrZSB1cCBhCisgICAgICAgICAgICAgICAgQml0QmFrZSByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBjb21wbGV0ZSBCaXRCYWtlIHN5bnRheCBkZXNjcmlwdGlvbnMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyNiaXRiYWtlLXVzZXItbWFudWFsLW1ldGFkYXRhJz5TeW50YXggYW5kIE9wZXJhdG9yczwvdWxpbms+IgorICAgICAgICAgICAgICAgIGNoYXB0ZXIgb2YgdGhlIEJpdEJha2UgVXNlciBNYW51YWwuCisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5WYXJpYWJsZSBBc3NpZ25tZW50cyBhbmQgTWFuaXB1bGF0aW9uczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUgYXNzaWdubWVudHMgYWxsb3cgYSB2YWx1ZSB0byBiZSBhc3NpZ25lZCB0byBhCisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBhc3NpZ25tZW50IGNhbiBiZSBzdGF0aWMgdGV4dCBvciBtaWdodCBpbmNsdWRlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29udGVudHMgb2Ygb3RoZXIgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gYWRkaXRpb24gdG8gdGhlIGFzc2lnbm1lbnQsIGFwcGVuZGluZyBhbmQgcHJlcGVuZGluZworICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucyBhcmUgYWxzbyBzdXBwb3J0ZWQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIHNvbWUgb2YgdGhlIHdheXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gdXNlIHZhcmlhYmxlcyBpbiByZWNpcGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTID0gIiR7V09SS0RJUn0vcG9zdGZpeC0ke1BWfSIKKyAgICAgQ0ZMQUdTICs9ICItRE5PX0FTTSIKKyAgICAgU1JDX1VSSV9hcHBlbmQgPSAiIGZpbGU6Ly9maXh1cC5wYXRjaCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkZ1bmN0aW9uczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25zIHByb3ZpZGUgYSBzZXJpZXMgb2YgYWN0aW9ucyB0byBiZSBwZXJmb3JtZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgdXN1YWxseSB1c2UgZnVuY3Rpb25zIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBvZiBhIHRhc2sgZnVuY3Rpb24gb3IgdG8gY29tcGxlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgYSBkZWZhdWx0IGZ1bmN0aW9uIChpLmUuIGFwcGVuZCBvciBwcmVwZW5kIHRvIGFuCisgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZyBmdW5jdGlvbikuCisgICAgICAgICAgICAgICAgICAgICAgICBTdGFuZGFyZCBmdW5jdGlvbnMgdXNlIDxmaWxlbmFtZT5zaDwvZmlsZW5hbWU+IHNoZWxsCisgICAgICAgICAgICAgICAgICAgICAgICBzeW50YXgsIGFsdGhvdWdoIGFjY2VzcyB0byBPcGVuRW1iZWRkZWQgdmFyaWFibGVzIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwgbWV0aG9kcyBhcmUgYWxzbyBhdmFpbGFibGUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIGZ1bmN0aW9uIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2VkPC9maWxlbmFtZT4gcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkb19pbnN0YWxsICgpIHsKKyAgICAgICAgIGF1dG90b29sc19kb19pbnN0YWxsCisgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorICAgICAgICAgbXYgJHtEfSR7YmluZGlyfS9zZWQgJHtEfSR7YmFzZV9iaW5kaXJ9L3NlZAorICAgICAgICAgcm1kaXIgJHtEfSR7YmluZGlyfS8KKyAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBpbXBsZW1lbnQgbmV3IGZ1bmN0aW9ucyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICBhcmUgY2FsbGVkIGJldHdlZW4gZXhpc3RpbmcgdGFza3MgYXMgbG9uZyBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBmdW5jdGlvbnMgYXJlIG5vdCByZXBsYWNpbmcgb3IgY29tcGxlbWVudGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgZnVuY3Rpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBpbXBsZW1lbnQgZnVuY3Rpb25zIGluIFB5dGhvbgorICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiBzaGVsbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJvdGggb2YgdGhlc2Ugb3B0aW9ucyBhcmUgbm90IHNlZW4gaW4gdGhlIG1ham9yaXR5IG9mCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPktleXdvcmRzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHJlY2lwZXMgdXNlIG9ubHkgYSBmZXcga2V5d29yZHMuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgdXNlIGtleXdvcmRzIHRvIGluY2x1ZGUgY29tbW9uCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnMgKDxmaWxlbmFtZT5pbmhlcml0PC9maWxlbmFtZT4pLCBsb2FkIHBhcnRzCisgICAgICAgICAgICAgICAgICAgICAgICBvZiBhIHJlY2lwZSBmcm9tIG90aGVyIGZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZXF1aXJlPC9maWxlbmFtZT4pIGFuZCBleHBvcnQgdmFyaWFibGVzCisgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgZW52aXJvbm1lbnQgKDxmaWxlbmFtZT5leHBvcnQ8L2ZpbGVuYW1lPikuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIHRoZSB1c2Ugb2Ygc29tZSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlc2Uga2V5d29yZHM6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGV4cG9ydCBQT1NUQ09ORiA9ICIke1NUQUdJTkdfQklORElSfS9wb3N0Y29uZiIKKyAgICAgaW5oZXJpdCBhdXRvY29uZgorICAgICByZXF1aXJlIG90aGVyZmlsZS5pbmMKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNvbW1lbnRzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBBbnkgbGluZXMgdGhhdCBiZWdpbiB3aXRoIHRoZSBoYXNoIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4jPC9maWxlbmFtZT4pIGFyZSB0cmVhdGVkIGFzIGNvbW1lbnQgbGluZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhcmUgaWdub3JlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBUaGlzIGlzIGEgY29tbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgbmV4dCBsaXN0IHN1bW1hcml6ZXMgdGhlIG1vc3QgaW1wb3J0YW50IGFuZCBtb3N0IGNvbW1vbmx5CisgICAgICAgICAgICAgICAgdXNlZCBwYXJ0cyBvZiB0aGUgcmVjaXBlIHN5bnRheC4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZSBwYXJ0cyBvZiB0aGUgc3ludGF4LCB5b3UgY2FuCisgICAgICAgICAgICAgICAgcmVmZXJlbmNlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjYml0YmFrZS11c2VyLW1hbnVhbC1tZXRhZGF0YSc+U3ludGF4IGFuZCBPcGVyYXRvcnM8L3VsaW5rPgorICAgICAgICAgICAgICAgIGNoYXB0ZXIgaW4gdGhlIEJpdEJha2UgVXNlciBNYW51YWwuCisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5MaW5lIENvbnRpbnVhdGlvbjogPGZpbGVuYW1lPlw8L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgYmFja3dhcmQgc2xhc2ggKDxmaWxlbmFtZT5cPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgdG8gc3BsaXQgYSBzdGF0ZW1lbnQgb3ZlciBtdWx0aXBsZSBsaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBsYWNlIHRoZSBzbGFzaCBjaGFyYWN0ZXIgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICBpcyB0byBiZSBjb250aW51ZWQgb24gdGhlIG5leHQgbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVkFSID0gIkEgcmVhbGx5IGxvbmcgXAorICAgICAgICAgICAgbGluZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW5ub3QgaGF2ZSBhbnkgY2hhcmFjdGVycyBpbmNsdWRpbmcgc3BhY2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgdGFicyBhZnRlciB0aGUgc2xhc2ggY2hhcmFjdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNpbmcgVmFyaWFibGVzOiA8ZmlsZW5hbWU+JHsuLi59PC9maWxlbmFtZT48L2VtcGhhc2lzPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT4kezxyZXBsYWNlYWJsZT52YXJuYW1lPC9yZXBsYWNlYWJsZT59PC9maWxlbmFtZT4gc3ludGF4IHRvCisgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3MgdGhlIGNvbnRlbnRzIG9mIGEgdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2xpYnBuZy96bGliLSR7UFZ9LnRhci5neiIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlF1b3RlIEFsbCBBc3NpZ25tZW50czogPGZpbGVuYW1lPiI8cmVwbGFjZWFibGU+dmFsdWU8L3JlcGxhY2VhYmxlPiI8L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSBkb3VibGUgcXVvdGVzIGFyb3VuZCB0aGUgdmFsdWUgaW4gYWxsIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25tZW50cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVkFSMSA9ICIke09USEVSVkFSfSIKKyAgICAgVkFSMiA9ICJUaGUgdmVyc2lvbiBpcyAke1BWfSIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNvbmRpdGlvbmFsIEFzc2lnbm1lbnQ6IDxmaWxlbmFtZT4/PTwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uYWwgYXNzaWdubWVudCBpcyB1c2VkIHRvIGFzc2lnbiBhIHZhbHVlIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBhIHZhcmlhYmxlLCBidXQgb25seSB3aGVuIHRoZSB2YXJpYWJsZSBpcyBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2V0LgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBxdWVzdGlvbiBtYXJrIGZvbGxvd2VkIGJ5IHRoZSBlcXVhbCBzaWduCisgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPj89PC9maWxlbmFtZT4pIHRvIG1ha2UgYSAic29mdCIgYXNzaWdubWVudAorICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBmb3IgY29uZGl0aW9uYWwgYXNzaWdubWVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgInNvZnQiIGFzc2lnbm1lbnRzIGFyZSB1c2VkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGZvciB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgYXJlIGFsbG93ZWQgdG8gY29tZSB0aHJvdWdoIGZyb20gdGhlIGV4dGVybmFsCisgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkhlcmUgaXMgYW4gZXhhbXBsZSB3aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlZBUjE8L2ZpbGVuYW1lPiBpcyBzZXQgdG8gIk5ldyB2YWx1ZSIgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0IGlzIGN1cnJlbnRseSBlbXB0eS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIDxmaWxlbmFtZT5WQVIxPC9maWxlbmFtZT4gaGFzIGFscmVhZHkgYmVlbgorICAgICAgICAgICAgICAgICAgICAgICAgc2V0LCBpdCByZW1haW5zIHVuY2hhbmdlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVkFSMSA/PSAiTmV3IHZhbHVlIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBuZXh0IGV4YW1wbGUsIDxmaWxlbmFtZT5WQVIxPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIGxlZnQgd2l0aCB0aGUgdmFsdWUgIk9yaWdpbmFsIHZhbHVlIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVkFSMSA9ICJPcmlnaW5hbCB2YWx1ZSIKKyAgICAgVkFSMSA/PSAiTmV3IHZhbHVlIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QXBwZW5kaW5nOiA8ZmlsZW5hbWU+Kz08L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgcGx1cyBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkgdGhlIGVxdWFscyBzaWduCisgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPis9PC9maWxlbmFtZT4pIHRvIGFwcGVuZCB2YWx1ZXMgdG8gZXhpc3RpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3BlcmF0b3IgYWRkcyBhIHNwYWNlIGJldHdlZW4gdGhlIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCBvZiB0aGUgdmFyaWFibGUgYW5kIHRoZSBuZXcgY29udGVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5IZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly9maXgtbWFrZWZpbGUucGF0Y2giCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QcmVwZW5kaW5nOiA8ZmlsZW5hbWU+PSs8L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgZXF1YWxzIHNpZ24gZm9sbG93ZWQgYnkgdGhlIHBsdXMgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPj0rPC9maWxlbmFtZT4pIHRvIHByZXBlbmQgdmFsdWVzIHRvIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG9wZXJhdG9yIGFkZHMgYSBzcGFjZSBiZXR3ZWVuIHRoZSBuZXcgY29udGVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgZXhpc3RpbmcgY29udGVudCBvZiB0aGUgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBWQVIgPSsgIlN0YXJ0cyIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFwcGVuZGluZzogPGZpbGVuYW1lPl9hcHBlbmQ8L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPl9hcHBlbmQ8L2ZpbGVuYW1lPiBvcGVyYXRvciB0bworICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kIHZhbHVlcyB0byBleGlzdGluZyB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG9wZXJhdG9yIGRvZXMgbm90IGFkZCBhbnkgYWRkaXRpb25hbCBzcGFjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFsc28sIHRoZSBvcGVyYXRvciBpcyBhcHBsaWVkIGFmdGVyIGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4rPTwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT49KzwvZmlsZW5hbWU+IG9wZXJhdG9ycyBoYXZlIGJlZW4gYXBwbGllZCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyIGFsbCA8ZmlsZW5hbWU+PTwvZmlsZW5hbWU+IGFzc2lnbm1lbnRzIGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIG9jY3VycmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIHRoZSBzcGFjZSBiZWluZworICAgICAgICAgICAgICAgICAgICAgICAgZXhwbGljaXRseSBhZGRlZCB0byB0aGUgc3RhcnQgdG8gZW5zdXJlIHRoZSBhcHBlbmRlZAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgaXMgbm90IG1lcmdlZCB3aXRoIHRoZSBleGlzdGluZyB2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSV9hcHBlbmQgPSAiIGZpbGU6Ly9maXgtbWFrZWZpbGUucGF0Y2giCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gdXNlIHRoZSA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciB3aXRoIG92ZXJyaWRlcywgd2hpY2ggcmVzdWx0cyBpbiB0aGUgYWN0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgb25seSBiZWluZyBwZXJmb3JtZWQgZm9yIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IG9yCisgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJX2FwcGVuZF9zaDQgPSAiIGZpbGU6Ly9maXgtbWFrZWZpbGUucGF0Y2giCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QcmVwZW5kaW5nOiA8ZmlsZW5hbWU+X3ByZXBlbmQ8L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPl9wcmVwZW5kPC9maWxlbmFtZT4gb3BlcmF0b3IgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQgdmFsdWVzIHRvIGV4aXN0aW5nIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3BlcmF0b3IgZG9lcyBub3QgYWRkIGFueSBhZGRpdGlvbmFsIHNwYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgQWxzbywgdGhlIG9wZXJhdG9yIGlzIGFwcGxpZWQgYWZ0ZXIgYWxsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPis9PC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPj0rPC9maWxlbmFtZT4gb3BlcmF0b3JzIGhhdmUgYmVlbiBhcHBsaWVkIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgYWxsIDxmaWxlbmFtZT49PC9maWxlbmFtZT4gYXNzaWdubWVudHMgaGF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgb2NjdXJyZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgdGhlIHNwYWNlIGJlaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBleHBsaWNpdGx5IGFkZGVkIHRvIHRoZSBlbmQgdG8gZW5zdXJlIHRoZSBwcmVwZW5kZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGlzIG5vdCBtZXJnZWQgd2l0aCB0aGUgZXhpc3RpbmcgdmFsdWU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENGTEFHU19wcmVwZW5kID0gIi1JJHtTfS9teWluY2x1ZGVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyB1c2UgdGhlIDxmaWxlbmFtZT5fcHJlcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciB3aXRoIG92ZXJyaWRlcywgd2hpY2ggcmVzdWx0cyBpbiB0aGUgYWN0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgb25seSBiZWluZyBwZXJmb3JtZWQgZm9yIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IG9yCisgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDRkxBR1NfcHJlcGVuZF9zaDQgPSAiLUkke1N9L215aW5jbHVkZXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+T3ZlcnJpZGVzOjwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIG92ZXJyaWRlcyB0byBzZXQgYSB2YWx1ZSBjb25kaXRpb25hbGx5LAorICAgICAgICAgICAgICAgICAgICAgICAgdHlwaWNhbGx5IGJhc2VkIG9uIGhvdyB0aGUgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LQlJBTkNIJz48ZmlsZW5hbWU+S0JSQU5DSDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlJ3MgdmFsdWUgdG8gInN0YW5kYXJkL2Jhc2UiIGZvciBhbnkgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IGZvciBxZW11YXJtIHdoZXJlIGl0IHNob3VsZCBiZSBzZXQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICJzdGFuZGFyZC9hcm0tdmVyc2F0aWxlLTkyNmVqcyIsIHlvdSB3b3VsZCBkbyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0JSQU5DSCA9ICJzdGFuZGFyZC9iYXNlIgorICAgICBLQlJBTkNIX3FlbXVhcm0gID0gInN0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgT3ZlcnJpZGVzIGFyZSBhbHNvIHVzZWQgdG8gc2VwYXJhdGUgYWx0ZXJuYXRlIHZhbHVlcworICAgICAgICAgICAgICAgICAgICAgICAgb2YgYSB2YXJpYWJsZSBpbiBvdGhlciBzaXR1YXRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHdoZW4gc2V0dGluZyB2YXJpYWJsZXMgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTJz48ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBhcmUgc3BlY2lmaWMgdG8gaW5kaXZpZHVhbCBwYWNrYWdlcyBwcm9kdWNlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgYSByZWNpcGUsIHlvdSBzaG91bGQgYWx3YXlzIHVzZSBhbiBvdmVycmlkZSB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbmRlbnRhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHNwYWNlcyBmb3IgaW5kZW50YXRpb24gcmF0aGVyIHRoYW4gdGhhbiB0YWJzLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHNoZWxsIGZ1bmN0aW9ucywgYm90aCBjdXJyZW50bHkgd29yay4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGl0IGlzIGEgcG9saWN5IGRlY2lzaW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgICAgICB0byB1c2UgdGFicyBpbiBzaGVsbCBmdW5jdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICBSZWFsaXplIHRoYXQgc29tZSBsYXllcnMgaGF2ZSBhIHBvbGljeSB0byB1c2Ugc3BhY2VzCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYWxsIGluZGVudGF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNpbmcgUHl0aG9uIGZvciBDb21wbGV4IE9wZXJhdGlvbnM6IDxmaWxlbmFtZT4ke0A8cmVwbGFjZWFibGU+cHl0aG9uX2NvZGU8L3JlcGxhY2VhYmxlPn08L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGFkdmFuY2VkIHByb2Nlc3NpbmcsIGl0IGlzIHBvc3NpYmxlIHRvIHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgUHl0aG9uIGNvZGUgZHVyaW5nIHZhcmlhYmxlIGFzc2lnbm1lbnRzIChlLmcuCisgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2ggYW5kIHJlcGxhY2VtZW50IG9uIGEgdmFyaWFibGUpLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBpbmRpY2F0ZSBQeXRob24gY29kZSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0A8cmVwbGFjZWFibGU+cHl0aG9uX2NvZGU8L3JlcGxhY2VhYmxlPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4IGZvciB0aGUgdmFyaWFibGUgYXNzaWdubWVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJmdHA6Ly9mdHAuaW5mby16aXAub3JnL3B1Yi9pbmZvemlwL3NyYy96aXAke0BkLmdldFZhcignUFYnLDEpLnJlcGxhY2UoJy4nLCAnJyl9LnRnegorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2hlbGwgRnVuY3Rpb24gU3ludGF4OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZSBzaGVsbCBmdW5jdGlvbnMgYXMgaWYgeW91IHdlcmUgd3JpdGluZyBhIHNoZWxsCisgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQgd2hlbiB5b3UgZGVzY3JpYmUgYSBsaXN0IG9mIGFjdGlvbnMgdG8gdGFrZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgZW5zdXJlIHRoYXQgeW91ciBzY3JpcHQgd29ya3Mgd2l0aCBhIGdlbmVyaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zaDwvZmlsZW5hbWU+IGFuZCB0aGF0IGl0IGRvZXMgbm90IHJlcXVpcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGFueSA8ZmlsZW5hbWU+YmFzaDwvZmlsZW5hbWU+IG9yIG90aGVyIHNoZWxsLXNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHNhbWUgY29uc2lkZXJhdGlvbnMgYXBwbHkgdG8gdmFyaW91cyBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxpdGllcyAoZS5nLiA8ZmlsZW5hbWU+c2VkPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z3JlcDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+YXdrPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc28gZm9ydGgpIHRoYXQgeW91IG1pZ2h0IHdpc2ggdG8gdXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgaW4gZG91YnQsIHlvdSBzaG91bGQgY2hlY2sgd2l0aCBtdWx0aXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zIC0gaW5jbHVkaW5nIHRob3NlIGZyb20gQnVzeUJveC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtcnVubmluZy1hLWJ1aWxkLW9uLXRoZS1yZWNpcGUnPgorICAgICAgICAgICAgPHRpdGxlPlJ1bm5pbmcgYSBCdWlsZCBvbiB0aGUgUmVjaXBlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQ3JlYXRpbmcgYSBuZXcgcmVjaXBlIGlzIHVzdWFsbHkgYW4gaXRlcmF0aXZlIHByb2Nlc3MgdGhhdAorICAgICAgICAgICAgICAgIHJlcXVpcmVzIHVzaW5nIEJpdEJha2UgdG8gcHJvY2VzcyB0aGUgcmVjaXBlIG11bHRpcGxlIHRpbWVzIGluCisgICAgICAgICAgICAgICAgb3JkZXIgdG8gcHJvZ3Jlc3NpdmVseSBkaXNjb3ZlciBhbmQgYWRkIGluZm9ybWF0aW9uIHRvIHRoZQorICAgICAgICAgICAgICAgIHJlY2lwZSBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBc3N1bWluZyB5b3UgaGF2ZSBzb3VyY2VkIGEgYnVpbGQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IChpLmUuCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3VsaW5rPikKKyAgICAgICAgICAgICAgICBhbmQgeW91IGFyZSBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4sCisgICAgICAgICAgICAgICAgdXNlIEJpdEJha2UgdG8gcHJvY2VzcyB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBBbGwgeW91IG5lZWQgdG8gcHJvdmlkZSBpcyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmJhc2VuYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiBvZiB0aGUgcmVjaXBlIGFzIGRlc2NyaWJlZAorICAgICAgICAgICAgICAgIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIDxyZXBsYWNlYWJsZT5iYXNlbmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIER1cmluZyB0aGUgYnVpbGQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNyZWF0ZXMgYQorICAgICAgICAgICAgICAgIHRlbXBvcmFyeSB3b3JrIGRpcmVjdG9yeSBmb3IgZWFjaCByZWNpcGUKKyAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICB3aGVyZSBpdCBrZWVwcyBleHRyYWN0ZWQgc291cmNlIGZpbGVzLCBsb2cgZmlsZXMsIGludGVybWVkaWF0ZQorICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uIGFuZCBwYWNrYWdpbmcgZmlsZXMsIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHBlci1yZWNpcGUgdGVtcG9yYXJ5IHdvcmsgZGlyZWN0b3J5IGlzIGNvbnN0cnVjdGVkIGFzIGZvbGxvd3MgYW5kCisgICAgICAgICAgICAgICAgZGVwZW5kcyBvbiBzZXZlcmFsIGZhY3RvcnM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQVNFX1dPUktESVIgPz0gIiR7VE1QRElSfS93b3JrIgorICAgICBXT1JLRElSID0gIiR7QkFTRV9XT1JLRElSfS8ke01VTFRJTUFDSF9UQVJHRVRfU1lTfS8ke1BOfS8ke0VYVEVORFBFfSR7UFZ9LSR7UFJ9IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBhc3N1bWUgYSBTb3VyY2UgRGlyZWN0b3J5IHRvcC1sZXZlbCBmb2xkZXIgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+LCBhIGRlZmF1bHQgQnVpbGQgRGlyZWN0b3J5IGF0CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3kvYnVpbGQ8L2ZpbGVuYW1lPiwgYW5kIGEKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdXg4Ni1wb2t5LWxpbnV4PC9maWxlbmFtZT4gbWFjaGluZSB0YXJnZXQgc3lzdGVtLgorICAgICAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCBzdXBwb3NlIHlvdXIgcmVjaXBlIGlzIG5hbWVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvb18xLjMuMC5iYjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgdGhlIHdvcmsgZGlyZWN0b3J5IHRoZSBidWlsZCBzeXN0ZW0gdXNlcyB0bworICAgICAgICAgICAgICAgIGJ1aWxkIHRoZSBwYWNrYWdlIHdvdWxkIGJlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwb2t5L2J1aWxkL3RtcC93b3JrL3FlbXV4ODYtcG9reS1saW51eC9mb28vMS4zLjAtcjAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW5zaWRlIHRoaXMgZGlyZWN0b3J5IHlvdSBjYW4gZmluZCBzdWItZGlyZWN0b3JpZXMgc3VjaCBhcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbWFnZTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+cGFja2FnZXMtc3BsaXQ8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPnRlbXA8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBBZnRlciB0aGUgYnVpbGQsIHlvdSBjYW4gZXhhbWluZSB0aGVzZSB0byBkZXRlcm1pbmUgaG93IHdlbGwKKyAgICAgICAgICAgICAgICB0aGUgYnVpbGQgd2VudC4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGxvZyBmaWxlcyBmb3IgZWFjaCB0YXNrIGluIHRoZSByZWNpcGUncworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dGVtcDwvZmlsZW5hbWU+IGRpcmVjdG9yeSAoZS5nLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS9idWlsZC90bXAvd29yay9xZW11eDg2LXBva3ktbGludXgvZm9vLzEuMy4wLXIwL3RlbXA8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIExvZyBmaWxlcyBhcmUgbmFtZWQgPGZpbGVuYW1lPmxvZy48cmVwbGFjZWFibGU+dGFza25hbWU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5sb2cuZG9fY29uZmlndXJlPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2cuZG9fZmV0Y2g8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2cuZG9fY29tcGlsZTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBidWlsZCBwcm9jZXNzIGluIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNjbG9zZXItbG9vayc+QSBDbG9zZXIgTG9vayBhdCB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudDwvdWxpbms+IgorICAgICAgICAgICAgICAgIGNoYXB0ZXIgb2YgdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHJlZmVyZW5jZSB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwncyBnbG9zc2FyeSBmb3IgbW9yZSBpbmZvcm1hdGlvbjoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdG9wLWxldmVsIGJ1aWxkIG91dHB1dCBkaXJlY3Rvcnk8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1VTFRJTUFDSF9UQVJHRVRfU1lTJz48ZmlsZW5hbWU+TVVMVElNQUNIX1RBUkdFVF9TWVM8L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRhcmdldCBzeXN0ZW0gaWRlbnRpZmllcjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVjaXBlIG5hbWU8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVEVORFBFJz48ZmlsZW5hbWU+RVhURU5EUEU8L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGVwb2NoIC0gKGlmCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEUnPjxmaWxlbmFtZT5QRTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBzcGVjaWZpZWQsIHdoaWNoIGlzIHVzdWFsbHkgdGhlIGNhc2UgZm9yIG1vc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMsIHRoZW4gPGZpbGVuYW1lPkVYVEVORFBFPC9maWxlbmFtZT4gaXMgYmxhbmspPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgdmVyc2lvbjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVjaXBlIHJldmlzaW9uPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLWZldGNoaW5nLWNvZGUnPgorICAgICAgICAgICAgPHRpdGxlPkZldGNoaW5nIENvZGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZmlyc3QgdGhpbmcgeW91ciByZWNpcGUgbXVzdCBkbyBpcyBzcGVjaWZ5IGhvdyB0byBmZXRjaAorICAgICAgICAgICAgICAgIHRoZSBzb3VyY2UgZmlsZXMuCisgICAgICAgICAgICAgICAgRmV0Y2hpbmcgaXMgY29udHJvbGxlZCBtYWlubHkgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgWW91ciByZWNpcGUgbXVzdCBoYXZlIGEgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgIHRoYXQgcG9pbnRzIHRvIHdoZXJlIHRoZSBzb3VyY2UgaXMgbG9jYXRlZC4KKyAgICAgICAgICAgICAgICBGb3IgYSBncmFwaGljYWwgcmVwcmVzZW50YXRpb24gb2Ygc291cmNlIGxvY2F0aW9ucywgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzb3VyY2VzLWRldi1lbnZpcm9ubWVudCc+U291cmNlczwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWZldGNoJz48ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdGFzayB1c2VzIHRoZSBwcmVmaXggb2YgZWFjaCBlbnRyeSBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHZhcmlhYmxlIHZhbHVlIHRvIGRldGVybWluZSB3aGljaAorICAgICAgICAgICAgICAgIGZldGNoZXIgdG8gdXNlIHRvIGdldCB5b3VyIHNvdXJjZSBmaWxlcy4KKyAgICAgICAgICAgICAgICBJdCBpcyB0aGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiB2YXJpYWJsZSB0aGF0IHRyaWdnZXJzCisgICAgICAgICAgICAgICAgdGhlIGZldGNoZXIuCisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLXBhdGNoJz48ZmlsZW5hbWU+ZG9fcGF0Y2g8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdGFzayB1c2VzIHRoZSB2YXJpYWJsZSBhZnRlciBzb3VyY2UgaXMgZmV0Y2hlZCB0byBhcHBseQorICAgICAgICAgICAgICAgIHBhdGNoZXMuCisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcworICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFU09WRVJSSURFUyc+PGZpbGVuYW1lPkZJTEVTT1ZFUlJJREVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGZvciBzY2FubmluZyBkaXJlY3RvcnkgbG9jYXRpb25zIGZvciBsb2NhbCBmaWxlcyBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHZhcmlhYmxlIGluIHlvdXIgcmVjaXBlIG11c3QKKyAgICAgICAgICAgICAgICBkZWZpbmUgZWFjaCB1bmlxdWUgbG9jYXRpb24gZm9yIHlvdXIgc291cmNlIGZpbGVzLgorICAgICAgICAgICAgICAgIEl0IGlzIGdvb2QgcHJhY3RpY2UgdG8gbm90IGhhcmQtY29kZSBwYXRobmFtZXMgaW4gYW4gVVJMIHVzZWQKKyAgICAgICAgICAgICAgICBpbiA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFJhdGhlciB0aGFuIGhhcmQtY29kZSB0aGVzZSBwYXRocywgdXNlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIHdoaWNoIGNhdXNlcyB0aGUgZmV0Y2ggcHJvY2VzcyB0byB1c2UgdGhlIHZlcnNpb24gc3BlY2lmaWVkIGluCisgICAgICAgICAgICAgICAgdGhlIHJlY2lwZSBmaWxlbmFtZS4KKyAgICAgICAgICAgICAgICBTcGVjaWZ5aW5nIHRoZSB2ZXJzaW9uIGluIHRoaXMgbWFubmVyIG1lYW5zIHRoYXQgdXBncmFkaW5nIHRoZQorICAgICAgICAgICAgICAgIHJlY2lwZSB0byBhIGZ1dHVyZSB2ZXJzaW9uIGlzIGFzIHNpbXBsZSBhcyByZW5hbWluZyB0aGUgcmVjaXBlCisgICAgICAgICAgICAgICAgdG8gbWF0Y2ggdGhlIG5ldyB2ZXJzaW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGEgc2ltcGxlIGV4YW1wbGUgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWRldnRvb2xzL2NkcnRvb2xzL2NkcnRvb2xzLW5hdGl2ZV8zLjAxYTIwLmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICByZWNpcGUgd2hlcmUgdGhlIHNvdXJjZSBjb21lcyBmcm9tIGEgc2luZ2xlIHRhcmJhbGwuCisgICAgICAgICAgICAgICAgTm90aWNlIHRoZSB1c2Ugb2YgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImZ0cDovL2Z0cC5iZXJsaW9zLmRlL3B1Yi9jZHJlY29yZC9hbHBoYS9jZHJ0b29scy0ke1BWfS50YXIuYnoyIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRmlsZXMgbWVudGlvbmVkIGluIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gd2hvc2UgbmFtZXMgZW5kCisgICAgICAgICAgICAgICAgaW4gYSB0eXBpY2FsIGFyY2hpdmUgZXh0ZW5zaW9uIChlLmcuIDxmaWxlbmFtZT4udGFyPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi50YXIuZ3o8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPi50YXIuYnoyPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi56aXA8L2ZpbGVuYW1lPiwgYW5kIHNvIGZvcnRoKSwgYXJlIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICBleHRyYWN0ZWQgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy11bnBhY2snPjxmaWxlbmFtZT5kb191bnBhY2s8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICBGb3IgYW5vdGhlciBleGFtcGxlIHRoYXQgc3BlY2lmaWVzIHRoZXNlIHR5cGVzIG9mIGZpbGVzLCBzZWUKKyAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbmV3LXJlY2lwZS1hdXRvdG9vbGVkLXBhY2thZ2UnPkF1dG90b29sZWQgUGFja2FnZTwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW5vdGhlciB3YXkgb2Ygc3BlY2lmeWluZyBzb3VyY2UgaXMgZnJvbSBhbiBTQ00uCisgICAgICAgICAgICAgICAgRm9yIEdpdCByZXBvc2l0b3JpZXMsIHlvdSBtdXN0IHNwZWNpZnkKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDUkVWJz48ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGFuZCB5b3Ugc2hvdWxkIHNwZWNpZnkKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB0byBpbmNsdWRlIHRoZSByZXZpc2lvbiB3aXRoCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ1BWJz48ZmlsZW5hbWU+U1JDUFY8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBmcm9tIHRoZSByZWNpcGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWtlcm5lbC9ibGt0cmFjZS9ibGt0cmFjZV9naXQuYmI8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ1JFViA9ICJkNjkxOGM4ODMyNzkzYjQyMDVlZDNiZmVkZTc4YzJmOTE1YzIzMzg1IgorCisgICAgIFBSID0gInI2IgorICAgICBQViA9ICIxLjAuNStnaXQke1NSQ1BWfSIKKworICAgICBTUkNfVVJJID0gImdpdDovL2dpdC5rZXJuZWwuZGsvYmxrdHJhY2UuZ2l0IFwKKyAgICAgICAgICAgICAgICBmaWxlOi8vbGRmbGFncy5wYXRjaCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdXIgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgaW5jbHVkZXMKKyAgICAgICAgICAgICAgICBVUkxzIHBvaW50aW5nIHRvIGluZGl2aWR1YWwgZmlsZXMgZmV0Y2hlZCBmcm9tIGEgcmVtb3RlIHNlcnZlcgorICAgICAgICAgICAgICAgIG90aGVyIHRoYW4gYSB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtLCBCaXRCYWtlIGF0dGVtcHRzIHRvCisgICAgICAgICAgICAgICAgdmVyaWZ5IHRoZSBmaWxlcyBhZ2FpbnN0IGNoZWNrc3VtcyBkZWZpbmVkIGluIHlvdXIgcmVjaXBlIHRvCisgICAgICAgICAgICAgICAgZW5zdXJlIHRoZXkgaGF2ZSBub3QgYmVlbiB0YW1wZXJlZCB3aXRoIG9yIG90aGVyd2lzZSBtb2RpZmllZAorICAgICAgICAgICAgICAgIHNpbmNlIHRoZSByZWNpcGUgd2FzIHdyaXR0ZW4uCisgICAgICAgICAgICAgICAgVHdvIGNoZWNrc3VtcyBhcmUgdXNlZDoKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSVttZDVzdW1dPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ19VUklbc2hhMjU2c3VtXTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3VyIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gdmFyaWFibGUgcG9pbnRzIHRvCisgICAgICAgICAgICAgICAgbW9yZSB0aGFuIGEgc2luZ2xlIFVSTCAoZXhjbHVkaW5nIFNDTSBVUkxzKSwgeW91IG5lZWQgdG8KKyAgICAgICAgICAgICAgICBwcm92aWRlIHRoZSA8ZmlsZW5hbWU+bWQ1PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNoYTI1NjwvZmlsZW5hbWU+IGNoZWNrc3VtcyBmb3IgZWFjaCBVUkwuCisgICAgICAgICAgICAgICAgRm9yIHRoZXNlIGNhc2VzLCB5b3UgcHJvdmlkZSBhIG5hbWUgZm9yIGVhY2ggVVJMIGFzIHBhcnQgb2YKKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBhbmQgdGhlbiByZWZlcmVuY2UgdGhhdCBuYW1lCisgICAgICAgICAgICAgICAgaW4gdGhlIHN1YnNlcXVlbnQgY2hlY2tzdW0gc3RhdGVtZW50cy4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9hL2FwbWQvYXBtZF8zLjIuMi5vcmlnLnRhci5nejtuYW1lPXRhcmJhbGwgXAorICAgICAgICAgICAgICAgICR7REVCSUFOX01JUlJPUn0vbWFpbi9hL2FwbWQvYXBtZF8ke1BWfS5kaWZmLmd6O25hbWU9cGF0Y2gKKworICAgICBTUkNfVVJJW3RhcmJhbGwubWQ1c3VtXSA9ICJiMWU2MzA5ZTgzMzFlMGY0ZTZlZmQzMTFjMmQ5N2ZhOCIKKyAgICAgU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiN2Y3ZDlmNjBiNzc2NmI4NTI4ODFkNDBiOGZmOTFkOGUzOWZjY2IwZDFkOTEzMTAyYTVjNzVhMmRiYjUyMzMyZCIKKworICAgICBTUkNfVVJJW3BhdGNoLm1kNXN1bV0gPSAiNTdlMWI2ODkyNjRlYTgwZjc4MzUzNTE5ZWVjZTBjOTIiCisgICAgIFNSQ19VUklbcGF0Y2guc2hhMjU2c3VtXSA9ICI3OTA1ZmY5NmJlOTNkNzI1NTQ0ZDAwNDBlNDI1YzQyZjljMDU1ODBkYjNjMjcyZjExY2ZmNzViOWFhODlkNDMwIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUHJvcGVyIHZhbHVlcyBmb3IgPGZpbGVuYW1lPm1kNTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zaGEyNTY8L2ZpbGVuYW1lPiBjaGVja3N1bXMgbWlnaHQgYmUgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgd2l0aCBvdGhlciBzaWduYXR1cmVzIG9uIHRoZSBkb3dubG9hZCBwYWdlIGZvciB0aGUgdXBzdHJlYW0KKyAgICAgICAgICAgICAgICBzb3VyY2UgKGUuZy4gPGZpbGVuYW1lPm1kNTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zaGExPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5zaGEyNTY8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+R1BHPC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgQmVjYXVzZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBvbmx5IGRlYWxzIHdpdGgKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2hhMjU2c3VtPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5tZDVzdW08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICB5b3Ugc2hvdWxkIHZlcmlmeSBhbGwgdGhlIHNpZ25hdHVyZXMgeW91IGZpbmQgYnkgaGFuZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgbm8gPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBjaGVja3N1bXMgYXJlIHNwZWNpZmllZAorICAgICAgICAgICAgICAgIHdoZW4geW91IGF0dGVtcHQgdG8gYnVpbGQgdGhlIHJlY2lwZSwgb3IgeW91IHByb3ZpZGUgYW4KKyAgICAgICAgICAgICAgICBpbmNvcnJlY3QgY2hlY2tzdW0sIHRoZSBidWlsZCB3aWxsIHByb2R1Y2UgYW4gZXJyb3IgZm9yIGVhY2gKKyAgICAgICAgICAgICAgICBtaXNzaW5nIG9yIGluY29ycmVjdCBjaGVja3N1bS4KKyAgICAgICAgICAgICAgICBBcyBwYXJ0IG9mIHRoZSBlcnJvciBtZXNzYWdlLCB0aGUgYnVpbGQgc3lzdGVtIHByb3ZpZGVzCisgICAgICAgICAgICAgICAgdGhlIGNoZWNrc3VtIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSBmZXRjaGVkIGZpbGUuCisgICAgICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSB0aGUgY29ycmVjdCBjaGVja3N1bXMsIHlvdSBjYW4gY29weSBhbmQgcGFzdGUKKyAgICAgICAgICAgICAgICB0aGVtIGludG8geW91ciByZWNpcGUgYW5kIHRoZW4gcnVuIHRoZSBidWlsZCBhZ2FpbiB0byBjb250aW51ZS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgQXMgbWVudGlvbmVkLCBpZiB0aGUgdXBzdHJlYW0gc291cmNlIHByb3ZpZGVzIHNpZ25hdHVyZXMKKyAgICAgICAgICAgICAgICAgICAgZm9yIHZlcmlmeWluZyB0aGUgZG93bmxvYWRlZCBzb3VyY2UgY29kZSwgeW91IHNob3VsZAorICAgICAgICAgICAgICAgICAgICB2ZXJpZnkgdGhvc2UgbWFudWFsbHkgYmVmb3JlIHNldHRpbmcgdGhlIGNoZWNrc3VtIHZhbHVlcworICAgICAgICAgICAgICAgICAgICBpbiB0aGUgcmVjaXBlIGFuZCBjb250aW51aW5nIHdpdGggdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBmaW5hbCBleGFtcGxlIGlzIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQgYW5kIGlzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGVfOS4yMC5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcmVjaXBlLgorICAgICAgICAgICAgICAgIFRoZSBleGFtcGxlJ3MgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgaWRlbnRpZmllcworICAgICAgICAgICAgICAgIG11bHRpcGxlIGZpbGVzIGFzIHRoZSBzb3VyY2UgZmlsZXMgZm9yIHRoZSByZWNpcGU6IGEgdGFyYmFsbCwgYQorICAgICAgICAgICAgICAgIHBhdGNoIGZpbGUsIGEgZGVza3RvcCBmaWxlLCBhbmQgYW4gaWNvbi4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiaHR0cDovL2Rpc3Quc2NobW9ycC5kZS9yeHZ0LXVuaWNvZGUvQXR0aWMvcnh2dC11bmljb2RlLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICAgICAgIGZpbGU6Ly94d2MucGF0Y2ggXAorICAgICAgICAgICAgICAgIGZpbGU6Ly9yeHZ0LmRlc2t0b3AgXAorICAgICAgICAgICAgICAgIGZpbGU6Ly9yeHZ0LnBuZyIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4geW91IHNwZWNpZnkgbG9jYWwgZmlsZXMgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZpbGU6Ly88L2ZpbGVuYW1lPiBVUkkgcHJvdG9jb2wsIHRoZSBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICBmZXRjaGVzIGZpbGVzIGZyb20gdGhlIGxvY2FsIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgVGhlIHBhdGggaXMgcmVsYXRpdmUgdG8gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgc2VhcmNoZXMgc3BlY2lmaWMgZGlyZWN0b3JpZXMgaW4gYSBjZXJ0YWluIG9yZGVyOgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUJQJz48ZmlsZW5hbWU+QlA8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CUE4nPjxmaWxlbmFtZT5CUE48L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmZpbGVzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yaWVzIGFyZSBhc3N1bWVkIHRvIGJlIHN1YmRpcmVjdG9yaWVzIG9mIHRoZQorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgcmVjaXBlIG9yIGFwcGVuZCBmaWxlIHJlc2lkZXMuCisgICAgICAgICAgICAgICAgRm9yIGFub3RoZXIgZXhhbXBsZSB0aGF0IHNwZWNpZmllcyB0aGVzZSB0eXBlcyBvZiBmaWxlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSduZXctcmVjaXBlLXNpbmdsZS1jLWZpbGUtcGFja2FnZS1oZWxsby13b3JsZCc+U2luZ2xlIC5jIEZpbGUgUGFja2FnZSAoSGVsbG8gV29ybGQhKTwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIGV4YW1wbGUgYWxzbyBzcGVjaWZpZXMgYSBwYXRjaCBmaWxlLgorICAgICAgICAgICAgICAgIFBhdGNoIGZpbGVzIGFyZSBmaWxlcyB3aG9zZSBuYW1lcyB1c3VhbGx5IGVuZCBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ucGF0Y2g8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+LmRpZmY8L2ZpbGVuYW1lPiBidXQKKyAgICAgICAgICAgICAgICBjYW4gZW5kIHdpdGggY29tcHJlc3NlZCBzdWZmaXhlcyBzdWNoIGFzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpZmYuZ3o8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGF0Y2guYnoyPC9maWxlbmFtZT4sIGZvciBleGFtcGxlLgorICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseSBhcHBsaWVzIHBhdGNoZXMgYXMgZGVzY3JpYmVkCisgICAgICAgICAgICAgICAgaW4gdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J25ldy1yZWNpcGUtcGF0Y2hpbmctY29kZSc+UGF0Y2hpbmcgQ29kZTwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS11bnBhY2tpbmctY29kZSc+CisgICAgICAgICAgICA8dGl0bGU+VW5wYWNraW5nIENvZGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEdXJpbmcgdGhlIGJ1aWxkLCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtdW5wYWNrJz48ZmlsZW5hbWU+ZG9fdW5wYWNrPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHRhc2sgdW5wYWNrcyB0aGUgc291cmNlIHdpdGgKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcG9pbnRpbmcgdG8gd2hlcmUgaXQgaXMgdW5wYWNrZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgZmV0Y2hpbmcgeW91ciBzb3VyY2UgZmlsZXMgZnJvbSBhbiB1cHN0cmVhbSBzb3VyY2UKKyAgICAgICAgICAgICAgICBhcmNoaXZlZCB0YXJiYWxsIGFuZCB0aGUgdGFyYmFsbCdzIGludGVybmFsIHN0cnVjdHVyZSBtYXRjaGVzCisgICAgICAgICAgICAgICAgdGhlIGNvbW1vbiBjb252ZW50aW9uIG9mIGEgdG9wLWxldmVsIHN1YmRpcmVjdG9yeSBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUJQTic+PGZpbGVuYW1lPkJQTjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fS0kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICB0aGVuIHlvdSBkbyBub3QgbmVlZCB0byBzZXQgPGZpbGVuYW1lPlM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHNwZWNpZmllcyB0byBmZXRjaAorICAgICAgICAgICAgICAgIHNvdXJjZSBmcm9tIGFuIGFyY2hpdmUgdGhhdCBkb2VzIG5vdCB1c2UgdGhpcyBjb252ZW50aW9uLAorICAgICAgICAgICAgICAgIG9yIGZyb20gYW4gU0NNIGxpa2UgR2l0IG9yIFN1YnZlcnNpb24sIHlvdXIgcmVjaXBlIG5lZWRzIHRvCisgICAgICAgICAgICAgICAgZGVmaW5lIDxmaWxlbmFtZT5TPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHByb2Nlc3NpbmcgeW91ciByZWNpcGUgdXNpbmcgQml0QmFrZSBzdWNjZXNzZnVsbHkgdW5wYWNrcworICAgICAgICAgICAgICAgIHRoZSBzb3VyY2UgZmlsZXMsIHlvdSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgcG9pbnRlZCB0byBieSA8ZmlsZW5hbWU+JHtTfTwvZmlsZW5hbWU+IG1hdGNoZXMgdGhlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgIG9mIHRoZSBzb3VyY2UuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS1wYXRjaGluZy1jb2RlJz4KKyAgICAgICAgICAgIDx0aXRsZT5QYXRjaGluZyBDb2RlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU29tZXRpbWVzIGl0IGlzIG5lY2Vzc2FyeSB0byBwYXRjaCBjb2RlIGFmdGVyIGl0IGhhcyBiZWVuCisgICAgICAgICAgICAgICAgZmV0Y2hlZC4KKyAgICAgICAgICAgICAgICBBbnkgZmlsZXMgbWVudGlvbmVkIGluIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gd2hvc2UKKyAgICAgICAgICAgICAgICBuYW1lcyBlbmQgaW4gPGZpbGVuYW1lPi5wYXRjaDwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5kaWZmPC9maWxlbmFtZT4gb3IgY29tcHJlc3NlZCB2ZXJzaW9ucyBvZiB0aGVzZQorICAgICAgICAgICAgICAgIHN1ZmZpeGVzIChlLmcuIDxmaWxlbmFtZT5kaWZmLmd6PC9maWxlbmFtZT4gYXJlIHRyZWF0ZWQgYXMKKyAgICAgICAgICAgICAgICBwYXRjaGVzLgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1wYXRjaCc+PGZpbGVuYW1lPmRvX3BhdGNoPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHRhc2sgYXV0b21hdGljYWxseSBhcHBsaWVzIHRoZXNlIHBhdGNoZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gc2hvdWxkIGJlIGFibGUgdG8gYXBwbHkgcGF0Y2hlcyB3aXRoIHRoZSAiLXAxIgorICAgICAgICAgICAgICAgIG9wdGlvbiAoaS5lLiBvbmUgZGlyZWN0b3J5IGxldmVsIGluIHRoZSBwYXRoIHdpbGwgYmUgc3RyaXBwZWQKKyAgICAgICAgICAgICAgICBvZmYpLgorICAgICAgICAgICAgICAgIElmIHlvdXIgcGF0Y2ggbmVlZHMgdG8gaGF2ZSBtb3JlIGRpcmVjdG9yeSBsZXZlbHMgc3RyaXBwZWQgb2ZmLAorICAgICAgICAgICAgICAgIHNwZWNpZnkgdGhlIG51bWJlciBvZiBsZXZlbHMgdXNpbmcgdGhlICJzdHJpcGxldmVsIiBvcHRpb24gaW4KKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBlbnRyeSBmb3IgdGhlIHBhdGNoLgorICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIGlmIHlvdXIgcGF0Y2ggbmVlZHMgdG8gYmUgYXBwbGllZCBpbiBhIHNwZWNpZmljCisgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IHRoYXQgaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgcGF0Y2ggZmlsZSwgdXNlIHRoZQorICAgICAgICAgICAgICAgICJwYXRjaGRpciIgb3B0aW9uIGluIHRoZSBlbnRyeS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgd2l0aCBhbGwgbG9jYWwgZmlsZXMgcmVmZXJlbmNlZCBpbgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB1c2luZyA8ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+LCB5b3Ugc2hvdWxkIHBsYWNlCisgICAgICAgICAgICAgICAgcGF0Y2ggZmlsZXMgaW4gYSBkaXJlY3RvcnkgbmV4dCB0byB0aGUgcmVjaXBlIGVpdGhlcgorICAgICAgICAgICAgICAgIG5hbWVkIHRoZSBzYW1lIGFzIHRoZSBiYXNlIG5hbWUgb2YgdGhlIHJlY2lwZQorICAgICAgICAgICAgICAgICg8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQlAnPjxmaWxlbmFtZT5CUDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQlBOJz48ZmlsZW5hbWU+QlBOPC9maWxlbmFtZT48L3VsaW5rPikKKyAgICAgICAgICAgICAgICBvciAiZmlsZXMiLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtbGljZW5zaW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5MaWNlbnNpbmc8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3VyIHJlY2lwZSBuZWVkcyB0byBoYXZlIGJvdGggdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJQ0VOU0UnPjxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MSUNfRklMRVNfQ0hLU1VNJz48ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZXM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+TElDRU5TRTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgbGljZW5zZSBmb3IgdGhlIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBrbm93IHRoZSBsaWNlbnNlIHVuZGVyIHdoaWNoIHRoZSBzb2Z0d2FyZQorICAgICAgICAgICAgICAgICAgICAgICAgeW91IGFyZSBidWlsZGluZyBpcyBkaXN0cmlidXRlZCwgeW91IHNob3VsZCBnbyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBjb2RlIGFuZCBsb29rIGZvciB0aGF0IGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgVHlwaWNhbCBmaWxlcyBjb250YWluaW5nIHRoaXMgaW5mb3JtYXRpb24gaW5jbHVkZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNPUFlJTkc8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNvdWxkIGFsc28gZmluZCB0aGUgaW5mb3JtYXRpb24gbmVhciB0aGUgdG9wIG9mCisgICAgICAgICAgICAgICAgICAgICAgICBhIHNvdXJjZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGdpdmVuIGEgcGllY2Ugb2Ygc29mdHdhcmUgbGljZW5zZWQgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIHlvdSB3b3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgc2V0IDxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT4gYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTElDRU5TRSA9ICJHUEx2MiIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgbGljZW5zZXMgeW91IHNwZWNpZnkgd2l0aGluCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TElDRU5TRTwvZmlsZW5hbWU+IGNhbiBoYXZlIGFueSBuYW1lIGFzIGxvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzIHlvdSBkbyBub3QgdXNlIHNwYWNlcywgc2luY2Ugc3BhY2VzIGFyZSB1c2VkIGFzCisgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3JzIGJldHdlZW4gbGljZW5zZSBuYW1lcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBzdGFuZGFyZCBsaWNlbnNlcywgdXNlIHRoZSBuYW1lcyBvZiB0aGUgZmlsZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy88L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgb3IgdGhlIDxmaWxlbmFtZT5TUERYTElDRU5TRU1BUDwvZmlsZW5hbWU+IGZsYWcgbmFtZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgaW4gPGZpbGVuYW1lPm1ldGEvY29uZi9saWNlbnNlcy5jb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRoaXMgdmFyaWFibGUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Ugc3VyZSB0aGUgbGljZW5zZSB0ZXh0IGhhcyBub3QgY2hhbmdlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIGl0IGhhcywgdGhlIGJ1aWxkIHByb2R1Y2VzIGFuIGVycm9yIGFuZCBpdCBhZmZvcmRzCisgICAgICAgICAgICAgICAgICAgICAgICB5b3UgdGhlIGNoYW5jZSB0byBmaWd1cmUgaXQgb3V0IGFuZCBjb3JyZWN0IHRoZSBwcm9ibGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IG5lZWQgdG8gc3BlY2lmeSBhbGwgYXBwbGljYWJsZSBsaWNlbnNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzIGZvciB0aGUgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgICAgICAgICBBdCB0aGUgZW5kIG9mIHRoZSBjb25maWd1cmF0aW9uIHN0ZXAsIHRoZSBidWlsZCBwcm9jZXNzCisgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGNvbXBhcmUgdGhlIGNoZWNrc3VtcyBvZiB0aGUgZmlsZXMgdG8gYmUgc3VyZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRleHQgaGFzIG5vdCBjaGFuZ2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgQW55IGRpZmZlcmVuY2VzIHJlc3VsdCBpbiBhbiBlcnJvciB3aXRoIHRoZSBtZXNzYWdlCisgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nIHRoZSBjdXJyZW50IGNoZWNrc3VtLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgZXhwbGFuYXRpb24gYW5kIGV4YW1wbGVzIG9mIGhvdyB0byBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+IHZhcmlhYmxlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdXNpbmdwb2t5LWNvbmZpZ3VyaW5nLUxJQ19GSUxFU19DSEtTVU0nPlRyYWNraW5nIExpY2Vuc2UgQ2hhbmdlczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRvIGRldGVybWluZSB0aGUgY29ycmVjdCBjaGVja3N1bSBzdHJpbmcsIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGxpc3QgdGhlIGFwcHJvcHJpYXRlIGZpbGVzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxJQ19GSUxFU19DSEtTVU08L2ZpbGVuYW1lPiB2YXJpYWJsZSB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNvcnJlY3QgbWQ1IHN0cmluZ3MsIGF0dGVtcHQgdG8gYnVpbGQgdGhlIHNvZnR3YXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZW4gbm90ZSB0aGUgcmVzdWx0aW5nIGVycm9yIG1lc3NhZ2VzIHRoYXQgd2lsbAorICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0IHRoZSBjb3JyZWN0IG1kNSBzdHJpbmdzLgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J25ldy1yZWNpcGUtZmV0Y2hpbmctY29kZSc+RmV0Y2hpbmcgQ29kZTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBhc3N1bWVzIHRoZSBzb2Z0d2FyZSBoYXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNPUFlJTkc8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT14eHgiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSB0cnkgdG8gYnVpbGQgdGhlIHNvZnR3YXJlLCB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIHByb2R1Y2UgYW4gZXJyb3IgYW5kIGdpdmUgeW91IHRoZSBjb3JyZWN0IHN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB5b3UgY2FuIHN1YnN0aXR1dGUgaW50byB0aGUgcmVjaXBlIGZpbGUgZm9yIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNlcXVlbnQgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworPCEtLQorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgdHJ5aW5nIHRoaXMgb3V0IEkgY3JlYXRlZCBhIG5ldyByZWNpcGUgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aHRvcF8xLjAuMi5iYjwvZmlsZW5hbWU+IGFuZCBwdXQgaXQgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaHRvcDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZXJlIGFyZSB0d28gbGljZW5zZSB0eXBlIHN0YXRlbWVudHMgaW4gbXkgdmVyeSBzaW1wbGUKKyAgICAgICAgICAgICAgICByZWNpcGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBMSUNFTlNFID0gIiIKKworICAgICBMSUNfRklMRVNfQ0hLU1VNID0gIiIKKworICAgICBTUkNfVVJJW21kNXN1bV0gPSAiIgorICAgICBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBFdmlkZW50bHksIHlvdSBuZWVkIHRvIHJ1biBhIDxmaWxlbmFtZT5iaXRiYWtlIC1jIGNsZWFuYWxsIGh0b3A8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBOZXh0LCB5b3UgZGVsZXRlIG9yIGNvbW1lbnQgb3V0IHRoZSB0d28gPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGxpbmVzIGF0IHRoZSBlbmQgYW5kIHRoZW4gYXR0ZW1wdCB0byBidWlsZCB0aGUgc29mdHdhcmUgd2l0aAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIGh0b3A8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBEb2luZyBzbyBjYXVzZXMgQml0QmFrZSB0byByZXBvcnQgc29tZSBlcnJvcnMgYW5kIGFuZCBnaXZlCisgICAgICAgICAgICAgICAgeW91IHRoZSBhY3R1YWwgc3RyaW5ncyB5b3UgbmVlZCBmb3IgdGhlIGxhc3QgdHdvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBsaW5lcy4KKyAgICAgICAgICAgICAgICBQcmlvciB0byB0aGlzLCB5b3UgaGF2ZSB0byBkaWcgYXJvdW5kIGluIHRoZSBob21lIHBhZ2Ugb2YgdGhlCisgICAgICAgICAgICAgICAgc291cmNlIGZvciA8ZmlsZW5hbWU+aHRvcDwvZmlsZW5hbWU+IGFuZCBkZXRlcm1pbmUgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciBHUEx2Mi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHByb3ZpZGUgdGhhdCBpbiB0aGUgPGZpbGVuYW1lPkxJQ0VOU0U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHN0YXRlbWVudC4KKyAgICAgICAgICAgICAgICBOb3cgeW91IGVkaXQgeW91ciByZWNpcGUgdG8gaGF2ZSB0aG9zZSB0d28gc3RyaW5ncyBmb3IKKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzdGF0ZW1lbnRzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTElDRU5TRSA9ICJHUEx2MiIKKworICAgICBMSUNfRklMRVNfQ0hLU1VNID0gIiIKKworICAgICBTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9odG9wL2h0b3AtJHtQVn0udGFyLmd6IgorICAgICBTUkNfVVJJW21kNXN1bV0gPSAiMGQwMWNjYThkZjMzNDljNzQ1NjljZWZlYmJkOTkxOWUiCisgICAgIFNSQ19VUklbc2hhMjU2c3VtXSA9ICJlZTYwNjU3YjA0NGVjZTBkZjA5NmMwNTMwNjBkZjdhYmYzY2NlM2E1NjhhYjM0ZDI2MDA0OWU2YTM3Y2NkOGExIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50LCB5b3UgY2FuIGJ1aWxkIHRoZSBzb2Z0d2FyZSBhZ2FpbiB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSBodG9wPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICBUaGVyZSBpcyBqdXN0IGEgc2V0IG9mIGVycm9ycyBub3cgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIGVtcHR5IDxmaWxlbmFtZT5MSUNfRklMRVNfQ0hLU1VNPC9maWxlbmFtZT4gdmFyaWFibGUgbm93LgorICAgICAgICAgICAgPC9wYXJhPgorLS0+CisKKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLWNvbmZpZ3VyaW5nLXRoZS1yZWNpcGUnPgorICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIHRoZSBSZWNpcGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBNb3N0IHNvZnR3YXJlIHByb3ZpZGVzIHNvbWUgbWVhbnMgb2Ygc2V0dGluZyBidWlsZC10aW1lCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBvcHRpb25zIGJlZm9yZSBjb21waWxhdGlvbi4KKyAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHNldHRpbmcgdGhlc2Ugb3B0aW9ucyBpcyBhY2NvbXBsaXNoZWQgYnkgcnVubmluZyBhCisgICAgICAgICAgICAgICAgY29uZmlndXJlIHNjcmlwdCB3aXRoIHNvbWUgb3B0aW9ucywgb3IgYnkgbW9kaWZ5aW5nIGEgYnVpbGQKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgbWFqb3IgcGFydCBvZiBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gaXMgYWJvdXQgY2hlY2tpbmcgZm9yCisgICAgICAgICAgICAgICAgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgYW5kIHBvc3NpYmx5IGVuYWJsaW5nIG9wdGlvbmFsCisgICAgICAgICAgICAgICAgZnVuY3Rpb25hbGl0eSBhcyBhIHJlc3VsdC4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBzcGVjaWZ5IGFueSBidWlsZC10aW1lIGRlcGVuZGVuY2llcyBmb3IgdGhlCisgICAgICAgICAgICAgICAgc29mdHdhcmUgeW91IGFyZSBidWlsZGluZyBpbiB5b3VyIHJlY2lwZSdzCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhbHVlLCBpbiB0ZXJtcyBvZiBvdGhlciByZWNpcGVzIHRoYXQgc2F0aXNmeSB0aG9zZQorICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIG9mdGVuIGZpbmQgYnVpbGQtdGltZSBvciBydW50aW1lCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzIGRlc2NyaWJlZCBpbiB0aGUgc29mdHdhcmUncyBkb2N1bWVudGF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3QgcHJvdmlkZXMgY29uZmlndXJhdGlvbiBpdGVtcyBvZiBub3RlIGJhc2VkCisgICAgICAgICAgICAgICAgb24gaG93IHlvdXIgc29mdHdhcmUgaXMgYnVpbHQ6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5BdXRvdG9vbHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgc291cmNlIGZpbGVzIGhhdmUgYQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmZpZ3VyZS5hYzwvZmlsZW5hbWU+IGZpbGUsIHRoZW4geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgc29mdHdhcmUgaXMgYnVpbHQgdXNpbmcgQXV0b3Rvb2xzLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgeW91IGp1c3QgbmVlZCB0byB3b3JyeSBhYm91dAorICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZ5aW5nIHRoZSBjb25maWd1cmF0aW9uLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPldoZW4gdXNpbmcgQXV0b3Rvb2xzLCB5b3VyIHJlY2lwZSBuZWVkcyB0byBpbmhlcml0CisgICAgICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1jbGFzc2VzLWF1dG90b29scyc+PGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIGFuZCB5b3VyIHJlY2lwZSBkb2VzIG5vdCBoYXZlIHRvIGNvbnRhaW4gYQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNvbmZpZ3VyZSc+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgbWlnaHQgc3RpbGwgd2FudCB0byBtYWtlIHNvbWUgYWRqdXN0bWVudHMuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNhbiBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1FWFRSQV9PRUNPTkYnPjxmaWxlbmFtZT5FWFRSQV9PRUNPTkY8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB0byBwYXNzIGFueSBuZWVkZWQgY29uZmlndXJlIG9wdGlvbnMgdGhhdCBhcmUgc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSByZWNpcGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q01ha2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgc291cmNlIGZpbGVzIGhhdmUgYQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNNYWtlTGlzdHMudHh0PC9maWxlbmFtZT4gZmlsZSwgdGhlbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBzb2Z0d2FyZSBpcyBidWlsdCB1c2luZyBDTWFrZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIHlvdSBqdXN0IG5lZWQgdG8gd29ycnkgYWJvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmeWluZyB0aGUgY29uZmlndXJhdGlvbi48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5XaGVuIHlvdSB1c2UgQ01ha2UsIHlvdXIgcmVjaXBlIG5lZWRzIHRvIGluaGVyaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtY21ha2UnPjxmaWxlbmFtZT5jbWFrZTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIGFuZCB5b3VyIHJlY2lwZSBkb2VzIG5vdCBoYXZlIHRvIGNvbnRhaW4gYQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNvbmZpZ3VyZSc+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG1ha2Ugc29tZSBhZGp1c3RtZW50cyBieSBzZXR0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRVhUUkFfT0VDTUFLRSc+PGZpbGVuYW1lPkVYVFJBX09FQ01BS0U8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB0byBwYXNzIGFueSBuZWVkZWQgY29uZmlndXJlIG9wdGlvbnMgdGhhdCBhcmUgc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSByZWNpcGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+T3RoZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgc291cmNlIGZpbGVzIGRvIG5vdCBoYXZlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25maWd1cmUuYWM8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNNYWtlTGlzdHMudHh0PC9maWxlbmFtZT4gZmlsZSwgdGhlbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBzb2Z0d2FyZSBpcyBidWlsdCB1c2luZyBzb21lIG1ldGhvZCBvdGhlciB0aGFuIEF1dG90b29scworICAgICAgICAgICAgICAgICAgICAgICAgb3IgQ01ha2UuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB5b3Ugbm9ybWFsbHkgbmVlZCB0byBwcm92aWRlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB0YXNrIGluIHlvdXIgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgICAgICB1bmxlc3MsIG9mIGNvdXJzZSwgdGhlcmUgaXMgbm90aGluZyB0byBjb25maWd1cmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5FdmVuIGlmIHlvdXIgc29mdHdhcmUgaXMgbm90IGJlaW5nIGJ1aWx0IGJ5CisgICAgICAgICAgICAgICAgICAgICAgICBBdXRvdG9vbHMgb3IgQ01ha2UsIHlvdSBzdGlsbCBtaWdodCBub3QgbmVlZCB0byBkZWFsCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGFueSBjb25maWd1cmF0aW9uIGlzc3Vlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGRldGVybWluZSBpZiBjb25maWd1cmF0aW9uIGlzIGV2ZW4gYSByZXF1aXJlZCBzdGVwLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG1pZ2h0IG5lZWQgdG8gbW9kaWZ5IGEgTWFrZWZpbGUgb3Igc29tZSBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgZm9yIHRoZSBidWlsZCB0byBzcGVjaWZ5IG5lY2Vzc2FyeSBidWlsZCBvcHRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgT3IsIHBlcmhhcHMgeW91IG1pZ2h0IG5lZWQgdG8gcnVuIGEgcHJvdmlkZWQsIGN1c3RvbQorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIHNjcmlwdCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBvcHRpb25zLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkZvciB0aGUgY2FzZSBpbnZvbHZpbmcgYSBjdXN0b20gY29uZmlndXJlCisgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQsIHlvdSB3b3VsZCBydW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uL2NvbmZpZ3VyZSAtLWhlbHA8L2ZpbGVuYW1lPiBhbmQgbG9vayBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBvcHRpb25zIHlvdSBuZWVkIHRvIHNldC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSBjb25maWd1cmF0aW9uIHN1Y2NlZWRzLCBpdCBpcyBhbHdheXMgZ29vZCBwcmFjdGljZSB0bworICAgICAgICAgICAgICAgIGxvb2sgYXQgdGhlIDxmaWxlbmFtZT5sb2cuZG9fY29uZmlndXJlPC9maWxlbmFtZT4gZmlsZSB0bworICAgICAgICAgICAgICAgIGVuc3VyZSB0aGF0IHRoZSBhcHByb3ByaWF0ZSBvcHRpb25zIGhhdmUgYmVlbiBlbmFibGVkIGFuZCBubworICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgbmVlZCB0byBiZSBhZGRlZCB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHRoZSBjb25maWd1cmUgc2NyaXB0IHJlcG9ydHMgdGhhdCBpdCBmb3VuZAorICAgICAgICAgICAgICAgIHNvbWV0aGluZyBub3QgbWVudGlvbmVkIGluIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4sIG9yCisgICAgICAgICAgICAgICAgdGhhdCBpdCBkaWQgbm90IGZpbmQgc29tZXRoaW5nIHRoYXQgaXQgbmVlZGVkIGZvciBzb21lCisgICAgICAgICAgICAgICAgZGVzaXJlZCBvcHRpb25hbCBmdW5jdGlvbmFsaXR5LCB0aGVuIHlvdSB3b3VsZCBuZWVkIHRvIGFkZAorICAgICAgICAgICAgICAgIHRob3NlIHRvIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgTG9va2luZyBhdCB0aGUgbG9nIG1pZ2h0IGFsc28gcmV2ZWFsIGl0ZW1zIGJlaW5nIGNoZWNrZWQgZm9yLAorICAgICAgICAgICAgICAgIGVuYWJsZWQsIG9yIGJvdGggdGhhdCB5b3UgZG8gbm90IHdhbnQsIG9yIGl0ZW1zIG5vdCBiZWluZyBmb3VuZAorICAgICAgICAgICAgICAgIHRoYXQgYXJlIGluIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4sIGluIHdoaWNoIGNhc2UKKyAgICAgICAgICAgICAgICB5b3Ugd291bGQgbmVlZCB0byBsb29rIGF0IHBhc3NpbmcgZXh0cmEgb3B0aW9ucyB0byB0aGUKKyAgICAgICAgICAgICAgICBjb25maWd1cmUgc2NyaXB0IGFzIG5lZWRlZC4KKyAgICAgICAgICAgICAgICBGb3IgcmVmZXJlbmNlIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyZSBvcHRpb25zIHNwZWNpZmljIHRvIHRoZQorICAgICAgICAgICAgICAgIHNvZnR3YXJlIHlvdSBhcmUgYnVpbGRpbmcsIHlvdSBjYW4gY29uc3VsdCB0aGUgb3V0cHV0IG9mIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uL2NvbmZpZ3VyZSAtLWhlbHA8L2ZpbGVuYW1lPiBjb21tYW5kIHdpdGhpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1N9PC9maWxlbmFtZT4gb3IgY29uc3VsdCB0aGUgc29mdHdhcmUncyB1cHN0cmVhbQorICAgICAgICAgICAgICAgIGRvY3VtZW50YXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS1jb21waWxhdGlvbic+CisgICAgICAgICAgICA8dGl0bGU+Q29tcGlsYXRpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEdXJpbmcgYSBidWlsZCwgdGhlIDxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT4gdGFzaworICAgICAgICAgICAgICAgIGhhcHBlbnMgYWZ0ZXIgc291cmNlIGlzIGZldGNoZWQsIHVucGFja2VkLCBhbmQgY29uZmlndXJlZC4KKyAgICAgICAgICAgICAgICBJZiB0aGUgcmVjaXBlIHBhc3NlcyB0aHJvdWdoIDxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHksIG5vdGhpbmcgbmVlZHMgdG8gYmUgZG9uZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgdGhlIGNvbXBpbGUgc3RlcCBmYWlscywgeW91IG5lZWQgdG8gZGlhZ25vc2UgdGhlCisgICAgICAgICAgICAgICAgZmFpbHVyZS4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGNvbW1vbiBpc3N1ZXMgdGhhdCBjYXVzZSBmYWlsdXJlczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBhcmFsbGVsIGJ1aWxkIGZhaWx1cmVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGVzZSBmYWlsdXJlcyBtYW5pZmVzdCB0aGVtc2VsdmVzIGFzIGludGVybWl0dGVudAorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLCBvciBlcnJvcnMgcmVwb3J0aW5nIHRoYXQgYSBmaWxlIG9yIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBzaG91bGQgYmUgY3JlYXRlZCBieSBzb21lIG90aGVyIHBhcnQgb2YgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzIGNvdWxkIG5vdCBiZSBmb3VuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdHlwZSBvZiBmYWlsdXJlIGNhbiBvY2N1ciBldmVuIGlmLCB1cG9uIGluc3BlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlsZSBvciBkaXJlY3RvcnkgZG9lcyBleGlzdCBhZnRlciB0aGUgYnVpbGQgaGFzCisgICAgICAgICAgICAgICAgICAgICAgICBmYWlsZWQsIGJlY2F1c2UgdGhhdCBwYXJ0IG9mIHRoZSBidWlsZCBwcm9jZXNzIGhhcHBlbmVkCisgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgd3Jvbmcgb3JkZXIuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VG8gZml4IHRoZSBwcm9ibGVtLCB5b3UgbmVlZCB0byBlaXRoZXIgc2F0aXNmeQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1pc3NpbmcgZGVwZW5kZW5jeSBpbiB0aGUgTWFrZWZpbGUgb3Igd2hhdGV2ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdCBwcm9kdWNlZCB0aGUgTWFrZWZpbGUsIG9yIChhcyBhIHdvcmthcm91bmQpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQVJBTExFTF9NQUtFJz48ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFuIGVtcHR5IHN0cmluZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFSQUxMRUxfTUFLRSA9ICIiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHBhcmFsbGVsIE1ha2VmaWxlIGlzc3Vlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdkZWJ1Z2dpbmctcGFyYWxsZWwtbWFrZS1yYWNlcyc+RGVidWdnaW5nIFBhcmFsbGVsIE1ha2UgUmFjZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW1wcm9wZXIgaG9zdCBwYXRoIHVzYWdlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZhaWx1cmUgYXBwbGllcyB0byByZWNpcGVzIGJ1aWxkaW5nIGZvciB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICBvciA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4gb25seS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmYWlsdXJlIG9jY3VycyB3aGVuIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcHJvcGVyIGhlYWRlcnMsIGxpYnJhcmllcywgb3Igb3RoZXIgZmlsZXMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvc3Qgc3lzdGVtIHdoZW4gY3Jvc3MtY29tcGlsaW5nIGZvciB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VG8gZml4IHRoZSBwcm9ibGVtLCBleGFtaW5lIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvZy5kb19jb21waWxlPC9maWxlbmFtZT4gZmlsZSB0byBpZGVudGlmeQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGhvc3QgcGF0aHMgYmVpbmcgdXNlZCAoZS5nLgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvaW5jbHVkZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvbGliPC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aCkgYW5kIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVpdGhlciBhZGQgY29uZmlndXJlIG9wdGlvbnMsIGFwcGx5IGEgcGF0Y2gsIG9yIGRvIGJvdGguCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5GYWlsdXJlIHRvIGZpbmQgcmVxdWlyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcy9oZWFkZXJzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiBhIGJ1aWxkLXRpbWUgZGVwZW5kZW5jeSBpcyBtaXNzaW5nIGJlY2F1c2UgaXQgaGFzCisgICAgICAgICAgICAgICAgICAgICAgICBub3QgYmVlbiBkZWNsYXJlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIGJlY2F1c2UgdGhlIGRlcGVuZGVuY3kgZXhpc3RzIGJ1dCB0aGUgcGF0aCB1c2VkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQgcHJvY2VzcyB0byBmaW5kIHRoZSBmaWxlIGlzIGluY29ycmVjdCBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgc3RlcCBkaWQgbm90IGRldGVjdCBpdCwgdGhlIGNvbXBpbGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzIGNvdWxkIGZhaWwuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZWl0aGVyIG9mIHRoZXNlIGZhaWx1cmVzLCB0aGUgY29tcGlsYXRpb24gcHJvY2VzcworICAgICAgICAgICAgICAgICAgICAgICAgbm90ZXMgdGhhdCBmaWxlcyBjb3VsZCBub3QgYmUgZm91bmQuCisgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGVzZSBjYXNlcywgeW91IG5lZWQgdG8gZ28gYmFjayBhbmQgYWRkIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgdG8gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgYXMgd2VsbCBhcyBwb3NzaWJseQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkIGFkZGl0aW9uYWwgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4uPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+T2NjYXNpb25hbGx5LCBpdCBpcyBuZWNlc3NhcnkgdG8gYXBwbHkgYSBwYXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHNvdXJjZSB0byBlbnN1cmUgdGhlIGNvcnJlY3QgcGF0aHMgYXJlIHVzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBzcGVjaWZ5IHBhdGhzIHRvIGZpbmQgZmlsZXMgc3RhZ2VkCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZSBzeXNyb290IGZyb20gb3RoZXIgcmVjaXBlcywgdXNlIHRoZSB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcHJvdmlkZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1RBR0lOR19CSU5ESVI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TVEFHSU5HX0lOQ0RJUjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNUQUdJTkdfREFUQURJUjwvZmlsZW5hbWU+LCBhbmQgc28gZm9ydGgpLgorPCEtLQorICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TVEFHSU5HX0JJTkRJUic+PGZpbGVuYW1lPlNUQUdJTkdfQklORElSPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TVEFHSU5HX0lOQ0RJUic+PGZpbGVuYW1lPlNUQUdJTkdfSU5DRElSPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TVEFHSU5HX0RBVEFESVInPjxmaWxlbmFtZT5TVEFHSU5HX0RBVEFESVI8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNvIGZvcnRoKS4KKy0tPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS1pbnN0YWxsaW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5JbnN0YWxsaW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRHVyaW5nIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4sIHRoZSB0YXNrIGNvcGllcyB0aGUKKyAgICAgICAgICAgICAgICBidWlsdCBmaWxlcyBhbG9uZyB3aXRoIHRoZWlyIGhpZXJhcmNoeSB0byBsb2NhdGlvbnMgdGhhdAorICAgICAgICAgICAgICAgIHdvdWxkIG1pcnJvciB0aGVpciBsb2NhdGlvbnMgb24gdGhlIHRhcmdldCBkZXZpY2UuCisgICAgICAgICAgICAgICAgVGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzIGNvcGllcyBmaWxlcyBmcm9tIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQic+PGZpbGVuYW1lPkI8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgdG8gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRCc+PGZpbGVuYW1lPkQ8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB0byBjcmVhdGUgdGhlIHN0cnVjdHVyZSBhcyBpdCBzaG91bGQgYXBwZWFyIG9uIHRoZQorICAgICAgICAgICAgICAgIHRhcmdldCBzeXN0ZW0uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhvdyB5b3VyIHNvZnR3YXJlIGlzIGJ1aWx0IGFmZmVjdHMgd2hhdCB5b3UgbXVzdCBkbyB0byBiZQorICAgICAgICAgICAgICAgIHN1cmUgeW91ciBzb2Z0d2FyZSBpcyBpbnN0YWxsZWQgY29ycmVjdGx5LgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBkZXNjcmliZXMgd2hhdCB5b3UgbXVzdCBkbyBmb3IgaW5zdGFsbGF0aW9uCisgICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGJ1aWxkIHN5c3RlbSB1c2VkIGJ5IHRoZSBzb2Z0d2FyZQorICAgICAgICAgICAgICAgIGJlaW5nIGJ1aWx0OgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QXV0b3Rvb2xzIGFuZCBDTWFrZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIHNvZnR3YXJlIHlvdXIgcmVjaXBlIGlzIGJ1aWxkaW5nIHVzZXMgQXV0b3Rvb2xzCisgICAgICAgICAgICAgICAgICAgICAgICBvciBDTWFrZSwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtIHVuZGVyc3RhbmRzIGhvdyB0byBpbnN0YWxsIHRoZSBzb2Z0d2FyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IGRvIG5vdCBoYXZlIHRvIGhhdmUgYQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiB0YXNrIGFzIHBhcnQgb2YgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGluc3RhbGwgcG9ydGlvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGNvbXBsZXRlcyB3aXRoIG5vIGlzc3Vlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSB3aXNoIHRvIGluc3RhbGwgYWRkaXRpb25hbCBmaWxlcyBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgYmVpbmcgaW5zdGFsbGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFrZSBpbnN0YWxsPC9maWxlbmFtZT4sIHlvdSBzaG91bGQgZG8gdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgYSA8ZmlsZW5hbWU+ZG9faW5zdGFsbF9hcHBlbmQ8L2ZpbGVuYW1lPiBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIGluc3RhbGwgY29tbWFuZCBhcyBkZXNjcmliZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSAiTWFudWFsIiBidWxsZXRlZCBpdGVtIGxhdGVyIGluIHRoaXMgbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk90aGVyICh1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ha2UgaW5zdGFsbDwvZmlsZW5hbWU+KTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gZGVmaW5lIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4gZnVuY3Rpb24gaW4geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIHNob3VsZCBjYWxsCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b2VfcnVubWFrZSBpbnN0YWxsPC9maWxlbmFtZT4gYW5kIHdpbGwgbGlrZWx5CisgICAgICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIHBhc3MgaW4gdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBhcyB3ZWxsLgorICAgICAgICAgICAgICAgICAgICAgICAgSG93IHlvdSBwYXNzIHRoYXQgcGF0aCBpcyBkZXBlbmRlbnQgb24gaG93IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4gYmVpbmcgcnVuIGlzIHdyaXR0ZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5ERVNURElSPSR7RH08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUkVGSVg9JHtEfTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklOU1RBTExST09UPSR7RH08L2ZpbGVuYW1lPiwgYW5kIHNvIGZvcnRoKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkZvciBhbiBleGFtcGxlIHJlY2lwZSB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ha2UgaW5zdGFsbDwvZmlsZW5hbWU+LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbmV3LXJlY2lwZS1tYWtlZmlsZS1iYXNlZC1wYWNrYWdlJz5NYWtlZmlsZS1CYXNlZCBQYWNrYWdlPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFudWFsOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBkZWZpbmUgYQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiBmdW5jdGlvbiBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZnVuY3Rpb24gbXVzdCBmaXJzdCB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbnN0YWxsIC1kPC9maWxlbmFtZT4gdG8gY3JlYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUQnPjxmaWxlbmFtZT5EPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBkaXJlY3RvcmllcyBleGlzdCwgeW91ciBmdW5jdGlvbiBjYW4gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW5zdGFsbDwvZmlsZW5hbWU+IHRvIG1hbnVhbGx5IGluc3RhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsdCBzb2Z0d2FyZSBpbnRvIHRoZSBkaXJlY3Rvcmllcy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluc3RhbGw8L2ZpbGVuYW1lPiBhdAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NvcmV1dGlscy9tYW51YWwvaHRtbF9ub2RlL2luc3RhbGwtaW52b2NhdGlvbi5odG1sJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgdGhlIHNjZW5hcmlvcyB0aGF0IGRvIG5vdCB1c2UgQXV0b3Rvb2xzIG9yCisgICAgICAgICAgICAgICAgQ01ha2UsIHlvdSBuZWVkIHRvIHRyYWNrIHRoZSBpbnN0YWxsYXRpb24KKyAgICAgICAgICAgICAgICBhbmQgZGlhZ25vc2UgYW5kIGZpeCBhbnkgaXNzdWVzIHVudGlsIGV2ZXJ5dGhpbmcgaW5zdGFsbHMKKyAgICAgICAgICAgICAgICBjb3JyZWN0bHkuCisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gbG9vayBpbiB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0R9PC9maWxlbmFtZT4sIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7V09SS0RJUn0vaW1hZ2U8L2ZpbGVuYW1lPiwgdG8gYmUgc3VyZSB5b3VyCisgICAgICAgICAgICAgICAgZmlsZXMgaGF2ZSBiZWVuIGluc3RhbGxlZCBjb3JyZWN0bHkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPjx0aXRsZT5Ob3RlczwvdGl0bGU+CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgRHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2VzcywgeW91IG1pZ2h0IG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmeSBzb21lIG9mIHRoZSBpbnN0YWxsZWQgZmlsZXMgdG8gc3VpdCB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXQuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IG1pZ2h0IG5lZWQgdG8gcmVwbGFjZSBoYXJkLWNvZGVkIHBhdGhzCisgICAgICAgICAgICAgICAgICAgICAgICBpbiBhbiBpbml0c2NyaXB0IHdpdGggdmFsdWVzIG9mIHZhcmlhYmxlcyBwcm92aWRlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIHN5c3RlbSwgc3VjaCBhcyByZXBsYWNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2Jpbi88L2ZpbGVuYW1lPiB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiaW5kaXJ9PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gcGVyZm9ybSBzdWNoIG1vZGlmaWNhdGlvbnMgZHVyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+LCBiZSBzdXJlIHRvIG1vZGlmeSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uIGZpbGUgYWZ0ZXIgY29weWluZyByYXRoZXIgdGhhbiBiZWZvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICBNb2RpZnlpbmcgYWZ0ZXIgY29weWluZyBlbnN1cmVzIHRoYXQgdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgY2FuIHJlLWV4ZWN1dGUgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiBpZgorICAgICAgICAgICAgICAgICAgICAgICAgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vZV9ydW5tYWtlIGluc3RhbGw8L2ZpbGVuYW1lPiwgd2hpY2ggY2FuIGJlCisgICAgICAgICAgICAgICAgICAgICAgICBydW4gZGlyZWN0bHkgb3IgY2FuIGJlIHJ1biBpbmRpcmVjdGx5IGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtYXV0b3Rvb2xzJz48ZmlsZW5hbWU+YXV0b3Rvb2xzPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1jbWFrZSc+PGZpbGVuYW1lPmNtYWtlPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NlcywgcnVucyA8ZmlsZW5hbWU+bWFrZSBpbnN0YWxsPC9maWxlbmFtZT4gaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFsbGVsLgorICAgICAgICAgICAgICAgICAgICAgICAgU29tZXRpbWVzLCBhIE1ha2VmaWxlIGNhbiBoYXZlIG1pc3NpbmcgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgICAgICBiZXR3ZWVuIHRhcmdldHMgdGhhdCBjYW4gcmVzdWx0IGluIHJhY2UgY29uZGl0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBleHBlcmllbmNlIGludGVybWl0dGVudCBmYWlsdXJlcyBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4sIHlvdSBtaWdodCBiZSBhYmxlIHRvCisgICAgICAgICAgICAgICAgICAgICAgICB3b3JrIGFyb3VuZCB0aGVtIGJ5IGRpc2FibGluZyBwYXJhbGxlbCBNYWtlZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbHMgYnkgYWRkaW5nIHRoZSBmb2xsb3dpbmcgdG8gdGhlIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFSQUxMRUxfTUFLRUlOU1QgPSAiIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFSQUxMRUxfTUFLRUlOU1QnPjxmaWxlbmFtZT5QQVJBTExFTF9NQUtFSU5TVDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS1lbmFibGluZy1zeXN0ZW0tc2VydmljZXMnPgorICAgICAgICAgICAgPHRpdGxlPkVuYWJsaW5nIFN5c3RlbSBTZXJ2aWNlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGluc3RhbGwgYSBzZXJ2aWNlLCB3aGljaCBpcyBhIHByb2Nlc3MgdGhhdAorICAgICAgICAgICAgICAgIHVzdWFsbHkgc3RhcnRzIG9uIGJvb3QgYW5kIHJ1bnMgaW4gdGhlIGJhY2tncm91bmQsIHRoZW4KKyAgICAgICAgICAgICAgICB5b3UgbXVzdCBpbmNsdWRlIHNvbWUgYWRkaXRpb25hbCBkZWZpbml0aW9ucyBpbiB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBhZGRpbmcgc2VydmljZXMgYW5kIHRoZSBzZXJ2aWNlIGluaXRpYWxpemF0aW9uCisgICAgICAgICAgICAgICAgc2NyaXB0IG9yIHRoZSBzZXJ2aWNlIGZpbGUgaXRzZWxmIGlzIG5vdCBpbnN0YWxsZWQsIHlvdSBtdXN0CisgICAgICAgICAgICAgICAgcHJvdmlkZSBmb3IgdGhhdCBpbnN0YWxsYXRpb24gaW4geW91ciByZWNpcGUgdXNpbmcgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbnN0YWxsX2FwcGVuZDwvZmlsZW5hbWU+IGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgIElmIHlvdXIgcmVjaXBlIGFscmVhZHkgaGFzIGEgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZ1bmN0aW9uLCB1cGRhdGUgdGhlIGZ1bmN0aW9uIG5lYXIgaXRzIGVuZCByYXRoZXIgdGhhbgorICAgICAgICAgICAgICAgIGFkZGluZyBhbiBhZGRpdGlvbmFsIDxmaWxlbmFtZT5kb19pbnN0YWxsX2FwcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZnVuY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4geW91IGNyZWF0ZSB0aGUgaW5zdGFsbGF0aW9uIGZvciB5b3VyIHNlcnZpY2VzLCB5b3UgbmVlZAorICAgICAgICAgICAgICAgIHRvIGFjY29tcGxpc2ggd2hhdCBpcyBub3JtYWxseSBkb25lIGJ5CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ha2UgaW5zdGFsbDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCBtYWtlIHN1cmUgeW91ciBpbnN0YWxsYXRpb24gYXJyYW5nZXMgdGhlIG91dHB1dAorICAgICAgICAgICAgICAgIHNpbWlsYXIgdG8gaG93IGl0IGlzIGFycmFuZ2VkIG9uIHRoZSB0YXJnZXQgc3lzdGVtLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwcm92aWRlcyBzdXBwb3J0IGZvciBzdGFydGluZworICAgICAgICAgICAgICAgIHNlcnZpY2VzIHR3byBkaWZmZXJlbnQgd2F5czoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN5c1Zpbml0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBTeXNWaW5pdCBpcyBhIHN5c3RlbSBhbmQgc2VydmljZSBtYW5hZ2VyIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZXMgdGhlIGluaXQgc3lzdGVtIHVzZWQgdG8gY29udHJvbCB0aGUgdmVyeSBiYXNpYworICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25zIG9mIHlvdXIgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGluaXQgcHJvZ3JhbSBpcyB0aGUgZmlyc3QgcHJvZ3JhbQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZCBieSB0aGUgTGludXgga2VybmVsIHdoZW4gdGhlIHN5c3RlbSBib290cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluaXQgdGhlbiBjb250cm9scyB0aGUgc3RhcnR1cCwgcnVubmluZyBhbmQgc2h1dGRvd24KKyAgICAgICAgICAgICAgICAgICAgICAgIG9mIGFsbCBvdGhlciBwcm9ncmFtcy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UbyBlbmFibGUgYSBzZXJ2aWNlIHVzaW5nIFN5c1Zpbml0LCB5b3VyIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICAgICAgbmVlZHMgdG8gaW5oZXJpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1jbGFzc2VzLXVwZGF0ZS1yYy5kJz48ZmlsZW5hbWU+dXBkYXRlLXJjLmQ8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjbGFzcyBoZWxwcyBmYWNpbGl0YXRlIHNhZmVseSBpbnN0YWxsaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBvbiB0aGUgdGFyZ2V0LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSB3aWxsIG5lZWQgdG8gc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlOSVRTQ1JJUFRfUEFDS0FHRVMnPjxmaWxlbmFtZT5JTklUU0NSSVBUX1BBQ0tBR0VTPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTklUU0NSSVBUX05BTUUnPjxmaWxlbmFtZT5JTklUU0NSSVBUX05BTUU8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU5JVFNDUklQVF9QQVJBTVMnPjxmaWxlbmFtZT5JTklUU0NSSVBUX1BBUkFNUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB3aXRoaW4geW91ciByZWNpcGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+c3lzdGVtZDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtIE1hbmFnZW1lbnQgRGFlbW9uIChzeXN0ZW1kKSB3YXMgZGVzaWduZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2UgU3lzVmluaXQgYW5kIHRvIHByb3ZpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuaGFuY2VkIG1hbmFnZW1lbnQgb2Ygc2VydmljZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzeXN0ZW1kLCBzZWUgdGhlIHN5c3RlbWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvbWVwYWdlIGF0CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvc3lzdGVtZC8nPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VG8gZW5hYmxlIGEgc2VydmljZSB1c2luZyBzeXN0ZW1kLCB5b3VyIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICAgICAgbmVlZHMgdG8gaW5oZXJpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1jbGFzc2VzLXN5c3RlbWQnPjxmaWxlbmFtZT5zeXN0ZW1kPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIDxmaWxlbmFtZT5zeXN0ZW1kLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGVkIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtcGFja2FnaW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5QYWNrYWdpbmc8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTdWNjZXNzZnVsIHBhY2thZ2luZyBpcyBhIGNvbWJpbmF0aW9uIG9mIGF1dG9tYXRlZCBwcm9jZXNzZXMKKyAgICAgICAgICAgICAgICBwZXJmb3JtZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYW5kIHNvbWUKKyAgICAgICAgICAgICAgICBzcGVjaWZpYyBzdGVwcyB5b3UgbmVlZCB0byB0YWtlLgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBkZXNjcmliZXMgdGhlIHByb2Nlc3M6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TcGxpdHRpbmcgRmlsZXM8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+IHRhc2sgc3BsaXRzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMgcHJvZHVjZWQgYnkgdGhlIHJlY2lwZSBpbnRvIGxvZ2ljYWwgY29tcG9uZW50cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW4gc29mdHdhcmUgdGhhdCBwcm9kdWNlcyBhIHNpbmdsZSBiaW5hcnkgbWlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0aWxsIGhhdmUgZGVidWcgc3ltYm9scywgZG9jdW1lbnRhdGlvbiwgYW5kIG90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsIGNvbXBvbmVudHMgdGhhdCBzaG91bGQgYmUgc3BsaXQgb3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT4gdGFzayBlbnN1cmVzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGZpbGVzIGFyZSBzcGxpdCB1cCBhbmQgcGFja2FnZWQgY29ycmVjdGx5LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UnVubmluZyBRQSBDaGVja3M8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtaW5zYW5lJz48ZmlsZW5hbWU+aW5zYW5lPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgYWRkcyBhIHN0ZXAgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwYWNrYWdlIGdlbmVyYXRpb24gcHJvY2VzcyBzbyB0aGF0IG91dHB1dCBxdWFsaXR5CisgICAgICAgICAgICAgICAgICAgICAgICBhc3N1cmFuY2UgY2hlY2tzIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzdGVwIHBlcmZvcm1zIGEgcmFuZ2Ugb2YgY2hlY2tzIHRvIGJlIHN1cmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCdzIG91dHB1dCBpcyBmcmVlIG9mIGNvbW1vbiBwcm9ibGVtcyB0aGF0IHNob3cKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwIGR1cmluZyBydW50aW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZXNlIGNoZWNrcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtaW5zYW5lJz48ZmlsZW5hbWU+aW5zYW5lPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1xYS1jaGVja3MnPlFBIEVycm9yIGFuZCBXYXJuaW5nIE1lc3NhZ2VzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFwdGVyIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5IYW5kLUNoZWNraW5nIFlvdXIgUGFja2FnZXM8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIHlvdSBidWlsZCB5b3VyIHNvZnR3YXJlLCB5b3UgbmVlZCB0byBiZSBzdXJlCisgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIHBhY2thZ2VzIGFyZSBjb3JyZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgRXhhbWluZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59L3BhY2thZ2VzLXNwbGl0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBhbmQgbWFrZSBzdXJlIGZpbGVzIGFyZSB3aGVyZSB5b3UgZXhwZWN0CisgICAgICAgICAgICAgICAgICAgICAgICB0aGVtIHRvIGJlLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRpc2NvdmVyIHByb2JsZW1zLCB5b3UgY2FuIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTJz48ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2luc3RhbGwoX2FwcGVuZCk8L2ZpbGVuYW1lPiwgYW5kIHNvIGZvcnRoIGFzCisgICAgICAgICAgICAgICAgICAgICAgICBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TcGxpdHRpbmcgYW4gQXBwbGljYXRpb24gaW50byBNdWx0aXBsZSBQYWNrYWdlczwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IG5lZWQgdG8gc3BsaXQgYW4gYXBwbGljYXRpb24gaW50byBzZXZlcmFsCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3NwbGl0dGluZy1hbi1hcHBsaWNhdGlvbi1pbnRvLW11bHRpcGxlLXBhY2thZ2VzJz5TcGxpdHRpbmcgYW4gQXBwbGljYXRpb24gaW50byBNdWx0aXBsZSBQYWNrYWdlczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBhbiBleGFtcGxlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW5zdGFsbGluZyBhIFBvc3QtSW5zdGFsbGF0aW9uIFNjcmlwdDwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGFuIGV4YW1wbGUgc2hvd2luZyBob3cgdG8gaW5zdGFsbCBhCisgICAgICAgICAgICAgICAgICAgICAgICBwb3N0LWluc3RhbGxhdGlvbiBzY3JpcHQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSduZXctcmVjaXBlLXBvc3QtaW5zdGFsbGF0aW9uLXNjcmlwdHMnPlBvc3QtSW5zdGFsbGF0aW9uIFNjcmlwdHM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1hcmtpbmcgUGFja2FnZSBBcmNoaXRlY3R1cmU8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB3aGF0IHlvdXIgcmVjaXBlIGlzIGJ1aWxkaW5nIGFuZCBob3cgaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIGNvbmZpZ3VyZWQsIGl0IG1pZ2h0IGJlIGltcG9ydGFudCB0byBtYXJrIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgcHJvZHVjZWQgYXMgYmVpbmcgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyCisgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLCBvciB0byBtYXJrIHRoZW0gYXMgbm90IGJlaW5nIHNwZWNpZmljIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBhIHBhcnRpY3VsYXIgbWFjaGluZSBvciBhcmNoaXRlY3R1cmUgYXQgYWxsLgorICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgcGFja2FnZXMgcHJvZHVjZWQgZm9yIHRoZSB0YXJnZXQgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZWQgYXMgYmVpbmcgc3BlY2lmaWMgdG8gdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCBtYWNoaW5lIGJlY2F1c2UgdGhhdCBpcyB1c3VhbGx5IHRoZSBkZXNpcmVkCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuCisgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB0aGUgcmVjaXBlIGNvbmZpZ3VyZXMgdGhlIHNvZnR3YXJlIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsdCBzcGVjaWZpYyB0byB0aGUgdGFyZ2V0IG1hY2hpbmUgKGUuZy4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBpcyBwYXNzZWQgaW50byB0aGUgY29uZmlndXJlIHNjcmlwdCBvciBhIHBhdGNoCisgICAgICAgICAgICAgICAgICAgICAgICBpcyBhcHBsaWVkIG9ubHkgZm9yIGEgcGFydGljdWxhciBtYWNoaW5lKSwgdGhlbiB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBtYXJrIHRoZSBwYWNrYWdlcyBwcm9kdWNlZCBhcyBiZWluZworICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZS1zcGVjaWZpYyBieSBhZGRpbmcgdGhlIGZvbGxvd2luZyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgcmVjaXBlIHByb2R1Y2VzIHBhY2thZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGRvIG5vdCBjb250YWluIGFueXRoaW5nIHNwZWNpZmljIHRvIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgb3IgYXJjaGl0ZWN0dXJlIGF0IGFsbCAoZS5nLiByZWNpcGVzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHNpbXBseSBwYWNrYWdlIHNjcmlwdCBmaWxlcyBvciBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcyksIHlvdSBzaG91bGQgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtYWxsYXJjaCc+PGZpbGVuYW1lPmFsbGFyY2g8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyB0byBkbyB0aGlzIGZvciB5b3UgYnkgYWRkaW5nIHRoaXMgdG8geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBpbmhlcml0IGFsbGFyY2gKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEVuc3VyaW5nIHRoYXQgdGhlIHBhY2thZ2UgYXJjaGl0ZWN0dXJlIGlzIGNvcnJlY3QgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBjcml0aWNhbCB3aGlsZSB5b3UgYXJlIGRvaW5nIHRoZSBmaXJzdCBmZXcgYnVpbGRzCisgICAgICAgICAgICAgICAgICAgICAgICBvZiB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGl0IGlzIGltcG9ydGFudCBpbiBvcmRlcgorICAgICAgICAgICAgICAgICAgICAgICAgdG8gZW5zdXJlIHRoYXQgeW91ciByZWNpcGUgcmVidWlsZHMgKG9yIGRvZXMgbm90CisgICAgICAgICAgICAgICAgICAgICAgICByZWJ1aWxkKSBhcHByb3ByaWF0ZWx5IGluIHJlc3BvbnNlIHRvIGNoYW5nZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24sIGFuZCB0byBlbnN1cmUgdGhhdCB5b3UgZ2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGUgcGFja2FnZXMgaW5zdGFsbGVkIG9uIHRoZSB0YXJnZXQgbWFjaGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY3VsYXJseSBpZiB5b3UgcnVuIHNlcGFyYXRlIGJ1aWxkcyBmb3IgbW9yZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhhbiBvbmUgdGFyZ2V0IG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwcm9wZXJseS12ZXJzaW9uaW5nLXByZS1yZWxlYXNlLXJlY2lwZXMnPgorICAgICAgICAgICAgPHRpdGxlPlByb3Blcmx5IFZlcnNpb25pbmcgUHJlLVJlbGVhc2UgUmVjaXBlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNvbWV0aW1lcyB0aGUgbmFtZSBvZiBhIHJlY2lwZSBjYW4gbGVhZCB0byB2ZXJzaW9uaW5nCisgICAgICAgICAgICAgICAgcHJvYmxlbXMgd2hlbiB0aGUgcmVjaXBlIGlzIHVwZ3JhZGVkIHRvIGEgZmluYWwgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmlyc3NpXzAuOC4xNi1yYzEuYmI8L2ZpbGVuYW1lPiByZWNpcGUgZmlsZSBpbgorICAgICAgICAgICAgICAgIHRoZSBsaXN0IG9mIGV4YW1wbGUgcmVjaXBlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbmV3LXJlY2lwZS1zdG9yaW5nLWFuZC1uYW1pbmctdGhlLXJlY2lwZSc+U3RvcmluZyBhbmQgTmFtaW5nIHRoZSBSZWNpcGU8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgVGhpcyByZWNpcGUgaXMgYXQgYSByZWxlYXNlIGNhbmRpZGF0ZSBzdGFnZSAoaS5lLgorICAgICAgICAgICAgICAgICJyYzEiKS4KKyAgICAgICAgICAgICAgICBXaGVuIHRoZSByZWNpcGUgaXMgcmVsZWFzZWQsIHRoZSByZWNpcGUgZmlsZW5hbWUgYmVjb21lcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pcnNzaV8wLjguMTYuYmI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgdmVyc2lvbiBjaGFuZ2UgZnJvbSA8ZmlsZW5hbWU+MC44LjE2LXJjMTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdG8gPGZpbGVuYW1lPjAuOC4xNjwvZmlsZW5hbWU+IGlzIHNlZW4gYXMgYSBkZWNyZWFzZSBieSB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gYW5kIHBhY2thZ2UgbWFuYWdlcnMsIHNvIHRoZSByZXN1bHRpbmcgcGFja2FnZXMKKyAgICAgICAgICAgICAgICB3aWxsIG5vdCBjb3JyZWN0bHkgdHJpZ2dlciBhbiB1cGdyYWRlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiBvcmRlciB0byBlbnN1cmUgdGhlIHZlcnNpb25zIGNvbXBhcmUgcHJvcGVybHksIHRoZQorICAgICAgICAgICAgICAgIHJlY29tbWVuZGVkIGNvbnZlbnRpb24gaXMgdG8gc2V0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgd2l0aGluIHRoZSByZWNpcGUgdG8KKyAgICAgICAgICAgICAgICAiPHJlcGxhY2VhYmxlPnByZXZpb3VzX3ZlcnNpb248L3JlcGxhY2VhYmxlPis8cmVwbGFjZWFibGU+Y3VycmVudF92ZXJzaW9uPC9yZXBsYWNlYWJsZT4iLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIGFuIGFkZGl0aW9uYWwgdmFyaWFibGUgc28gdGhhdCB5b3UgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgICAgICBjdXJyZW50IHZlcnNpb24gZWxzZXdoZXJlLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJFQUxQViA9ICIwLjguMTYtcmMxIgorICAgICBQViA9ICIwLjguMTUrJHtSRUFMUFZ9IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLXBvc3QtaW5zdGFsbGF0aW9uLXNjcmlwdHMnPgorICAgICAgICAgICAgPHRpdGxlPlBvc3QtSW5zdGFsbGF0aW9uIFNjcmlwdHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBQb3N0LWluc3RhbGxhdGlvbiBzY3JpcHRzIHJ1biBpbW1lZGlhdGVseSBhZnRlciBpbnN0YWxsaW5nCisgICAgICAgICAgICAgICAgYSBwYWNrYWdlIG9uIHRoZSB0YXJnZXQgb3IgZHVyaW5nIGltYWdlIGNyZWF0aW9uIHdoZW4gYQorICAgICAgICAgICAgICAgIHBhY2thZ2UgaXMgaW5jbHVkZWQgaW4gYW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgVG8gYWRkIGEgcG9zdC1pbnN0YWxsYXRpb24gc2NyaXB0IHRvIGEgcGFja2FnZSwgYWRkIGEKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3Bvc3RpbnN0X1BBQ0tBR0VOQU1FKCk8L2ZpbGVuYW1lPiBmdW5jdGlvbiB0bworICAgICAgICAgICAgICAgIHRoZSByZWNpcGUgZmlsZSAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+KSBhbmQgcmVwbGFjZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFTkFNRTwvZmlsZW5hbWU+IHdpdGggdGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UKKyAgICAgICAgICAgICAgICB5b3Ugd2FudCB0byBhdHRhY2ggdG8gdGhlIDxmaWxlbmFtZT5wb3N0aW5zdDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgc2NyaXB0LgorICAgICAgICAgICAgICAgIFRvIGFwcGx5IHRoZSBwb3N0LWluc3RhbGxhdGlvbiBzY3JpcHQgdG8gdGhlIG1haW4gcGFja2FnZQorICAgICAgICAgICAgICAgIGZvciB0aGUgcmVjaXBlLCB3aGljaCBpcyB1c3VhbGx5IHdoYXQgaXMgcmVxdWlyZWQsIHNwZWNpZnkKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBpbiBwbGFjZSBvZiA8ZmlsZW5hbWU+UEFDS0FHRU5BTUU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBwb3N0LWluc3RhbGxhdGlvbiBmdW5jdGlvbiBoYXMgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwa2dfcG9zdGluc3RfUEFDS0FHRU5BTUUoKSB7CisgICAgICMgQ29tbWFuZHMgdG8gY2Fycnkgb3V0CisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBzY3JpcHQgZGVmaW5lZCBpbiB0aGUgcG9zdC1pbnN0YWxsYXRpb24gZnVuY3Rpb24gaXMKKyAgICAgICAgICAgICAgICBjYWxsZWQgd2hlbiB0aGUgcm9vdCBmaWxlc3lzdGVtIGlzIGNyZWF0ZWQuCisgICAgICAgICAgICAgICAgSWYgdGhlIHNjcmlwdCBzdWNjZWVkcywgdGhlIHBhY2thZ2UgaXMgbWFya2VkIGFzIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICBJZiB0aGUgc2NyaXB0IGZhaWxzLCB0aGUgcGFja2FnZSBpcyBtYXJrZWQgYXMgdW5wYWNrZWQgYW5kCisgICAgICAgICAgICAgICAgdGhlIHNjcmlwdCBpcyBleGVjdXRlZCB3aGVuIHRoZSBpbWFnZSBib290cyBhZ2Fpbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU29tZXRpbWVzIGl0IGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGV4ZWN1dGlvbiBvZiBhCisgICAgICAgICAgICAgICAgcG9zdC1pbnN0YWxsYXRpb24gc2NyaXB0IHRvIGJlIGRlbGF5ZWQgdW50aWwgdGhlIGZpcnN0IGJvb3QuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBzY3JpcHQgbWlnaHQgbmVlZCB0byBiZSBleGVjdXRlZCBvbiB0aGUKKyAgICAgICAgICAgICAgICBkZXZpY2UgaXRzZWxmLgorICAgICAgICAgICAgICAgIFRvIGRlbGF5IHNjcmlwdCBleGVjdXRpb24gdW50aWwgYm9vdCB0aW1lLCB1c2UgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgIHN0cnVjdHVyZSBpbiB0aGUgcG9zdC1pbnN0YWxsYXRpb24gc2NyaXB0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcGtnX3Bvc3RpbnN0X1BBQ0tBR0VOQU1FKCkgeworICAgICBpZiBbIHgiJEQiID0gIngiIF07IHRoZW4KKyAgICAgICAgICAjIEFjdGlvbnMgdG8gY2Fycnkgb3V0IG9uIHRoZSBkZXZpY2UgZ28gaGVyZQorICAgICBlbHNlCisgICAgICAgICAgZXhpdCAxCisgICAgIGZpCisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBleGFtcGxlIGRlbGF5cyBleGVjdXRpb24gdW50aWwgdGhlIGltYWdlIGJvb3RzCisgICAgICAgICAgICAgICAgYWdhaW4gYmVjYXVzZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgPGZpbGVuYW1lPkQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHBvaW50cyB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGltYWdlIHdoZW4KKyAgICAgICAgICAgICAgICB0aGUgcm9vdCBmaWxlc3lzdGVtIGlzIGNyZWF0ZWQgYXQgYnVpbGQgdGltZSBidXQgaXMgdW5zZXQKKyAgICAgICAgICAgICAgICB3aGVuIGV4ZWN1dGVkIG9uIHRoZSBmaXJzdCBib290LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBFcXVpdmFsZW50IHN1cHBvcnQgZm9yIHByZS1pbnN0YWxsLCBwcmUtdW5pbnN0YWxsLCBhbmQKKyAgICAgICAgICAgICAgICBwb3N0LXVuaW5zdGFsbCBzY3JpcHRzIGV4aXN0IGJ5IHdheSBvZgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2dfcHJlaW5zdDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2dfcHJlcm08L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZ19wb3N0cm08L2ZpbGVuYW1lPiwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgIFRoZXNlIHNjcmlwcyB3b3JrIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzIGRvZXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3Bvc3RpbnN0PC9maWxlbmFtZT4gd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgdGhleQorICAgICAgICAgICAgICAgIHJ1biBhdCBkaWZmZXJlbnQgdGltZXMuCisgICAgICAgICAgICAgICAgQWxzbywgYmVjYXVzZSBvZiB3aGVuIHRoZXkgcnVuLCB0aGV5IGFyZSBub3QgYXBwbGljYWJsZSB0bworICAgICAgICAgICAgICAgIGJlaW5nIHJ1biBhdCBpbWFnZSBjcmVhdGlvbiB0aW1lIGxpa2UKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3Bvc3RpbnN0PC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS10ZXN0aW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5UZXN0aW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZpbmFsIHN0ZXAgZm9yIGNvbXBsZXRpbmcgeW91ciByZWNpcGUgaXMgdG8gYmUgc3VyZSB0aGF0CisgICAgICAgICAgICAgICAgdGhlIHNvZnR3YXJlIHlvdSBidWlsdCBydW5zIGNvcnJlY3RseS4KKyAgICAgICAgICAgICAgICBUbyBhY2NvbXBsaXNoIHJ1bnRpbWUgdGVzdGluZywgYWRkIHRoZSBidWlsZCdzIG91dHB1dAorICAgICAgICAgICAgICAgIHBhY2thZ2VzIHRvIHlvdXIgaW1hZ2UgYW5kIHRlc3QgdGhlbSBvbiB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGN1c3RvbWl6ZSB5b3VyIGltYWdlIGJ5IGFkZGluZworICAgICAgICAgICAgICAgIHNwZWNpZmljIHBhY2thZ2VzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5ncG9reS1leHRlbmQtY3VzdG9taW1hZ2UnPkN1c3RvbWl6aW5nIEltYWdlczwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLXRlc3RpbmctZXhhbXBsZXMnPgorICAgICAgICAgICAgPHRpdGxlPkV4YW1wbGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gaGVscCBzdW1tYXJpemUgaG93IHRvIHdyaXRlIGEgcmVjaXBlLCB0aGlzIHNlY3Rpb24gcHJvdmlkZXMKKyAgICAgICAgICAgICAgICBzb21lIGV4YW1wbGVzIGdpdmVuIHZhcmlvdXMgc2NlbmFyaW9zOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SZWNpcGVzIHRoYXQgdXNlIGxvY2FsIGZpbGVzPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Vc2luZyBhbiBBdXRvdG9vbGVkIHBhY2thZ2U8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVzaW5nIGEgTWFrZWZpbGUtYmFzZWQgcGFja2FnZTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U3BsaXR0aW5nIGFuIGFwcGxpY2F0aW9uIGludG8gbXVsdGlwbGUgcGFja2FnZXM8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFkZGluZyBiaW5hcmllcyB0byBhbiBpbWFnZTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS1zaW5nbGUtYy1maWxlLXBhY2thZ2UtaGVsbG8td29ybGQnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5TaW5nbGUgLmMgRmlsZSBQYWNrYWdlIChIZWxsbyBXb3JsZCEpPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCdWlsZGluZyBhbiBhcHBsaWNhdGlvbiBmcm9tIGEgc2luZ2xlIGZpbGUgdGhhdCBpcyBzdG9yZWQKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxseSAoZS5nLiB1bmRlciA8ZmlsZW5hbWU+ZmlsZXM8L2ZpbGVuYW1lPikgcmVxdWlyZXMKKyAgICAgICAgICAgICAgICAgICAgYSByZWNpcGUgdGhhdCBoYXMgdGhlIGZpbGUgbGlzdGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPlNSQ19VUkk8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHlvdSBuZWVkIHRvIG1hbnVhbGx5IHdyaXRlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+IHRhc2tzLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TJz5TPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBkZWZpbmVzIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgc291cmNlIGNvZGUsCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIHNldCB0bworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGluIHRoaXMgY2FzZSAtIHRoZSBkaXJlY3RvcnkgQml0QmFrZSB1c2VzIGZvciB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1VNTUFSWSA9ICJTaW1wbGUgaGVsbG93b3JsZCBhcHBsaWNhdGlvbiIKKyAgICAgU0VDVElPTiA9ICJleGFtcGxlcyIKKyAgICAgTElDRU5TRSA9ICJNSVQiCisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09NTU9OX0xJQ0VOU0VfRElSfS9NSVQ7bWQ1PTA4MzVhZGU2OThlMGJjZjg1MDZlY2RhMmY3YjRmMzAyIgorCisgICAgIFNSQ19VUkkgPSAiZmlsZTovL2hlbGxvd29ybGQuYyIKKworICAgICBTID0gIiR7V09SS0RJUn0iCisKKyAgICAgZG9fY29tcGlsZSgpIHsKKyAgICAgCSR7Q0N9IGhlbGxvd29ybGQuYyAtbyBoZWxsb3dvcmxkCisgICAgIH0KKworICAgICBkb19pbnN0YWxsKCkgeworICAgICAJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisgICAgIAlpbnN0YWxsIC1tIDA3NTUgaGVsbG93b3JsZCAke0R9JHtiaW5kaXJ9CisgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPmhlbGxvd29ybGQ8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmhlbGxvd29ybGQtZGJnPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aGVsbG93b3JsZC1kZXY8L2ZpbGVuYW1lPiBwYWNrYWdlcyBhcmUgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY3VzdG9taXplIHRoZSBwYWNrYWdpbmcgcHJvY2VzcywKKyAgICAgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc3BsaXR0aW5nLWFuLWFwcGxpY2F0aW9uLWludG8tbXVsdGlwbGUtcGFja2FnZXMnPlNwbGl0dGluZyBhbiBBcHBsaWNhdGlvbiBpbnRvIE11bHRpcGxlIFBhY2thZ2VzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLWF1dG90b29sZWQtcGFja2FnZSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkF1dG90b29sZWQgUGFja2FnZTwvdGl0bGU+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9ucyB0aGF0IHVzZSBBdXRvdG9vbHMgc3VjaCBhcyA8ZmlsZW5hbWU+YXV0b2NvbmY8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG9tYWtlPC9maWxlbmFtZT4gcmVxdWlyZSBhIHJlY2lwZSB0aGF0IGhhcyBhIHNvdXJjZSBhcmNoaXZlIGxpc3RlZCBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPlNSQ19VUkk8L3VsaW5rPjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICBhbHNvIGluaGVyaXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1jbGFzc2VzLWF1dG90b29scyc+PGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHdoaWNoIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBvZiBhbGwgdGhlIHN0ZXBzCisgICAgICAgICAgICAgICAgICAgIG5lZWRlZCB0byBidWlsZCBhbiBBdXRvdG9vbC1iYXNlZCBhcHBsaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJlc3VsdCBvZiB0aGUgYnVpbGQgaXMgYXV0b21hdGljYWxseSBwYWNrYWdlZC4KKyAgICAgICAgICAgICAgICAgICAgQW5kLCBpZiB0aGUgYXBwbGljYXRpb24gdXNlcyBOTFMgZm9yIGxvY2FsaXphdGlvbiwgcGFja2FnZXMgd2l0aCBsb2NhbCBpbmZvcm1hdGlvbiBhcmUKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkIChvbmUgcGFja2FnZSBwZXIgbGFuZ3VhZ2UpLgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgb25lIGV4YW1wbGU6ICg8ZmlsZW5hbWU+aGVsbG9fMi4zLmJiPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1VNTUFSWSA9ICJHTlUgSGVsbG93b3JsZCBhcHBsaWNhdGlvbiIKKyAgICAgU0VDVElPTiA9ICJleGFtcGxlcyIKKyAgICAgTElDRU5TRSA9ICJHUEx2MisiCisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCisgICAgIFNSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9oZWxsby9oZWxsby0ke1BWfS50YXIuZ3oiCisKKyAgICAgaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MSUNfRklMRVNfQ0hLU1VNJz5MSUNfRklMRVNfQ0hLU1VNPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyB1c2VkIHRvIHRyYWNrIHNvdXJjZSBsaWNlbnNlIGNoYW5nZXMgYXMgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdXNpbmdwb2t5LWNvbmZpZ3VyaW5nLUxJQ19GSUxFU19DSEtTVU0nPlRyYWNraW5nIExpY2Vuc2UgQ2hhbmdlczwvdWxpbms+IiBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHF1aWNrbHkgY3JlYXRlIEF1dG90b29sLWJhc2VkIHJlY2lwZXMgaW4gYSBtYW5uZXIgc2ltaWxhciB0byB0aGUgcHJldmlvdXMgZXhhbXBsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLW1ha2VmaWxlLWJhc2VkLXBhY2thZ2UnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5NYWtlZmlsZS1CYXNlZCBQYWNrYWdlPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbnMgdGhhdCB1c2UgR05VIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gYWxzbyByZXF1aXJlIGEgcmVjaXBlIHRoYXQgaGFzCisgICAgICAgICAgICAgICAgICAgIHRoZSBzb3VyY2UgYXJjaGl2ZSBsaXN0ZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz5TUkNfVVJJPC91bGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBuZWVkIHRvIGFkZCBhIDxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT4gc3RlcCBzaW5jZSBieSBkZWZhdWx0IEJpdEJha2UKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRzIHRoZSA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgdG8gY29tcGlsZSB0aGUgYXBwbGljYXRpb24uCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBuZWVkIGFkZGl0aW9uYWwgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiBvcHRpb25zLCB5b3Ugc2hvdWxkIHN0b3JlIHRoZW0gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRVhUUkFfT0VNQUtFJz5FWFRSQV9PRU1BS0U8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHBhc3NlcyB0aGVzZSBvcHRpb25zIGludG8gdGhlIEdOVSA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+IGludm9jYXRpb24uCisgICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCBhIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4gdGFzayBpcyBzdGlsbCByZXF1aXJlZC4KKyAgICAgICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCBCaXRCYWtlIHJ1bnMgYW4gZW1wdHkgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiB0YXNrIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU29tZSBhcHBsaWNhdGlvbnMgbWlnaHQgcmVxdWlyZSBleHRyYSBwYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCB0byB0aGUgY29tcGlsZXIuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgYXBwbGljYXRpb24gbWlnaHQgbmVlZCBhbiBhZGRpdGlvbmFsIGhlYWRlciBwYXRoLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFjY29tcGxpc2ggdGhpcyBieSBhZGRpbmcgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ0ZMQUdTJz5DRkxBR1M8L3VsaW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgdGhpczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDRkxBR1NfcHJlcGVuZCA9ICItSSAke1N9L2luY2x1ZGUgIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCA8ZmlsZW5hbWU+bXRkLXV0aWxzPC9maWxlbmFtZT4gaXMgYSBtYWtlZmlsZS1iYXNlZCBwYWNrYWdlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNVTU1BUlkgPSAiVG9vbHMgZm9yIG1hbmFnaW5nIG1lbW9yeSB0ZWNobm9sb2d5IGRldmljZXMiCisgICAgIFNFQ1RJT04gPSAiYmFzZSIKKyAgICAgREVQRU5EUyA9ICJ6bGliIGx6byBlMmZzcHJvZ3MgdXRpbC1saW51eCIKKyAgICAgSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5saW51eC1tdGQuaW5mcmFkZWFkLm9yZy8iCisgICAgIExJQ0VOU0UgPSAiR1BMdjIrIgorICAgICBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvY29tbW9uLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xNzttZDU9YmEwNWIwNzkxMmE0NGVhMmJmODFjZTQwOTM4MDA0OWMiCisKKyAgICAgIyBVc2UgdGhlIGxhdGVzdCB2ZXJzaW9uIGF0IDI2IE9jdCwgMjAxMworICAgICBTUkNSRVYgPSAiOWYxMDcxMzJhNmEwNzNjY2UzNzQzNGNhOWNkYTY5MTdkZDhkODY2YiIKKyAgICAgU1JDX1VSSSA9ICJnaXQ6Ly9naXQuaW5mcmFkZWFkLm9yZy9tdGQtdXRpbHMuZ2l0IFwKKyAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hZGQtZXhjbHVzaW9uLXRvLW1rZnMtamZmczItZ2l0LTIucGF0Y2ggXAorICAgICAiCisKKyAgICAgUFYgPSAiMS41LjErZ2l0JHtTUkNQVn0iCisKKyAgICAgUyA9ICIke1dPUktESVJ9L2dpdC8iCisKKyAgICAgRVhUUkFfT0VNQUtFID0gIidDQz0ke0NDfScgJ1JBTkxJQj0ke1JBTkxJQn0nICdBUj0ke0FSfScgJ0NGTEFHUz0ke0NGTEFHU30gLUkke1N9L2luY2x1ZGUgLURXSVRIT1VUX1hBVFRSJyAnQlVJTERESVI9JHtTfSciCisKKyAgICAgZG9faW5zdGFsbCAoKSB7CisgICAgICAgICAgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSBTQklORElSPSR7c2JpbmRpcn0gTUFORElSPSR7bWFuZGlyfSBJTkNMVURFRElSPSR7aW5jbHVkZWRpcn0KKyAgICAgfQorCisgICAgIFBBQ0tBR0VTID0rICJtdGQtdXRpbHMtamZmczIgbXRkLXV0aWxzLXViaWZzIG10ZC11dGlscy1taXNjIgorCisgICAgIEZJTEVTX210ZC11dGlscy1qZmZzMiA9ICIke3NiaW5kaXJ9L21rZnMuamZmczIgJHtzYmluZGlyfS9qZmZzMmR1bXAgJHtzYmluZGlyfS9qZmZzMnJlYWRlciAke3NiaW5kaXJ9L3N1bXRvb2wiCisgICAgIEZJTEVTX210ZC11dGlscy11YmlmcyA9ICIke3NiaW5kaXJ9L21rZnMudWJpZnMgJHtzYmluZGlyfS91YmkqIgorICAgICBGSUxFU19tdGQtdXRpbHMtbWlzYyA9ICIke3NiaW5kaXJ9L25mdGwqICR7c2JpbmRpcn0vZnRsKiAke3NiaW5kaXJ9L3JmZCogJHtzYmluZGlyfS9kb2MqICR7c2JpbmRpcn0vc2VydmVfaW1hZ2UgJHtzYmluZGlyfS9yZWN2X2ltYWdlIgorCisgICAgIFBBUkFMTEVMX01BS0UgPSAiIgorCisgICAgIEJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nc3BsaXR0aW5nLWFuLWFwcGxpY2F0aW9uLWludG8tbXVsdGlwbGUtcGFja2FnZXMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5TcGxpdHRpbmcgYW4gQXBwbGljYXRpb24gaW50byBNdWx0aXBsZSBQYWNrYWdlczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VTJz5QQUNLQUdFUzwvdWxpbms+PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVMnPkZJTEVTPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB0byBzcGxpdCBhbiBhcHBsaWNhdGlvbiBpbnRvIG11bHRpcGxlIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSB0aGF0IHVzZXMgdGhlIDxmaWxlbmFtZT5saWJ4cG08L2ZpbGVuYW1lPiByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgcmVjaXBlIGdlbmVyYXRlcyBhIHNpbmdsZSBwYWNrYWdlIHRoYXQgY29udGFpbnMgdGhlIGxpYnJhcnkgYWxvbmcKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBhIGZldyBiaW5hcmllcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBtb2RpZnkgdGhlIHJlY2lwZSB0byBzcGxpdCB0aGUgYmluYXJpZXMgaW50byBzZXBhcmF0ZSBwYWNrYWdlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworICAgICBTVU1NQVJZID0gIlhwbTogWCBQaXhtYXAgZXh0ZW5zaW9uIGxpYnJhcnkiCisgICAgIExJQ0VOU0UgPSAiQlNEIgorICAgICBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01MWY0MjcwYjAxMmVjZDRhYjFhMTY0ZjVmNGVkNmNmNyIKKyAgICAgREVQRU5EUyArPSAibGlieGV4dCBsaWJzbSBsaWJ4dCIKKyAgICAgUEUgPSAiMSIKKworICAgICBYT1JHX1BOID0gImxpYlhwbSIKKworICAgICBQQUNLQUdFUyA9KyAic3hwbSBjeHBtIgorICAgICBGSUxFU19jeHBtID0gIiR7YmluZGlyfS9jeHBtIgorICAgICBGSUxFU19zeHBtID0gIiR7YmluZGlyfS9zeHBtIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBwcmV2aW91cyBleGFtcGxlLCB3ZSB3YW50IHRvIHNoaXAgdGhlIDxmaWxlbmFtZT5zeHBtPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5jeHBtPC9maWxlbmFtZT4gYmluYXJpZXMgaW4gc2VwYXJhdGUgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIFNpbmNlIDxmaWxlbmFtZT5iaW5kaXI8L2ZpbGVuYW1lPiB3b3VsZCBiZSBwYWNrYWdlZCBpbnRvIHRoZSBtYWluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPlBOPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIGJ5IGRlZmF1bHQsIHdlIHByZXBlbmQgdGhlIDxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHNvIGFkZGl0aW9uYWwgcGFja2FnZSBuYW1lcyBhcmUgYWRkZWQgdG8gdGhlIHN0YXJ0IG9mIGxpc3QuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVzdWx0cyBpbiB0aGUgZXh0cmEgPGZpbGVuYW1lPkZJTEVTXyo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgdGhlbiBjb250YWluaW5nIGluZm9ybWF0aW9uIHRoYXQgZGVmaW5lIHdoaWNoIGZpbGVzIGFuZAorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyBnbyBpbnRvIHdoaWNoIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBGaWxlcyBpbmNsdWRlZCBieSBlYXJsaWVyIHBhY2thZ2VzIGFyZSBza2lwcGVkIGJ5IGxhdHRlciBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgVGh1cywgdGhlIG1haW4gPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4gcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBkb2VzIG5vdCBpbmNsdWRlIHRoZSBhYm92ZSBsaXN0ZWQgZmlsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0ncGFja2FnaW5nLWV4dGVybmFsbHktcHJvZHVjZWQtYmluYXJpZXMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5QYWNrYWdpbmcgRXh0ZXJuYWxseSBQcm9kdWNlZCBCaW5hcmllczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU29tZXRpbWVzLCB5b3UgbmVlZCB0byBhZGQgcHJlLWNvbXBpbGVkIGJpbmFyaWVzIHRvIGFuCisgICAgICAgICAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB0aGF0IGJpbmFyaWVzIGZvciBwcm9wcmlldGFyeSBjb2RlCisgICAgICAgICAgICAgICAgICAgIGV4aXN0LCB3aGljaCBhcmUgY3JlYXRlZCBieSBhIHBhcnRpY3VsYXIgZGl2aXNpb24gb2YgYQorICAgICAgICAgICAgICAgICAgICBjb21wYW55LgorICAgICAgICAgICAgICAgICAgICBZb3VyIHBhcnQgb2YgdGhlIGNvbXBhbnkgbmVlZHMgdG8gdXNlIHRob3NlIGJpbmFyaWVzIGFzCisgICAgICAgICAgICAgICAgICAgIHBhcnQgb2YgYW4gaW1hZ2UgdGhhdCB5b3UgYXJlIGJ1aWxkaW5nIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBTaW5jZSB5b3Ugb25seSBoYXZlIHRoZSBiaW5hcmllcyBhbmQgbm90IHRoZSBzb3VyY2UgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgeW91IGNhbm5vdCB1c2UgYSB0eXBpY2FsIHJlY2lwZSB0aGF0IGV4cGVjdHMgdG8gZmV0Y2ggdGhlCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBjb21waWxlIGl0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBPbmUgbWV0aG9kIGlzIHRvIHBhY2thZ2UgdGhlIGJpbmFyaWVzIGFuZCB0aGVuIGluc3RhbGwgdGhlbQorICAgICAgICAgICAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgR2VuZXJhbGx5LCBpdCBpcyBub3QgYSBnb29kIGlkZWEgdG8gcGFja2FnZSBiaW5hcmllcworICAgICAgICAgICAgICAgICAgICBzaW5jZSwgYW1vbmcgb3RoZXIgdGhpbmdzLCBpdCBjYW4gaGluZGVyIHRoZSBhYmlsaXR5IHRvCisgICAgICAgICAgICAgICAgICAgIHJlcHJvZHVjZSBidWlsZHMgYW5kIGNvdWxkIGxlYWQgdG8gY29tcGF0aWJpbGl0eSBwcm9ibGVtcworICAgICAgICAgICAgICAgICAgICB3aXRoIEFCSSBpbiB0aGUgZnV0dXJlLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBzb21ldGltZXMgeW91IGhhdmUgbm8gY2hvaWNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZWFzaWVzdCBzb2x1dGlvbiBpcyB0byBjcmVhdGUgYSByZWNpcGUgdGhhdCB1c2VzCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1iaW4tcGFja2FnZSc+PGZpbGVuYW1lPmJpbl9wYWNrYWdlPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBhbmQgdG8gYmUgc3VyZSB0aGF0IHlvdSBhcmUgdXNpbmcgZGVmYXVsdCBsb2NhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgZm9yIGJ1aWxkIGFydGlmYWN0cy4KKyAgICAgICAgICAgICAgICAgICAgSW4gbW9zdCBjYXNlcywgdGhlIDxmaWxlbmFtZT5iaW5fcGFja2FnZTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgICAgICAgICAgICAgIGhhbmRsZXMgInNraXBwaW5nIiB0aGUgY29uZmlndXJlIGFuZCBjb21waWxlIHN0ZXBzIGFzIHdlbGwKKyAgICAgICAgICAgICAgICAgICAgYXMgc2V0cyB0aGluZ3MgdXAgdG8gZ3JhYiBwYWNrYWdlcyBmcm9tIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAgICAgICAgICAgICBhcmVhLgorICAgICAgICAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB0aGlzIGNsYXNzIHNldHMgPGZpbGVuYW1lPm5vZXhlYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG9uIGJvdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2tzLCBzZXRzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU18ke1BOfTwvZmlsZW5hbWU+IHRvICIvIiBzbyB0aGF0IGl0IHBpY2tzCisgICAgICAgICAgICAgICAgICAgIHVwIGFsbCBmaWxlcywgYW5kIHNldHMgdXAgYQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2ssIHdoaWNoIGVmZmVjdGl2ZWx5IGNvcGllcyBhbGwgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtTfTwvZmlsZW5hbWU+IHRvIDxmaWxlbmFtZT4ke0R9PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YmluX3BhY2thZ2U8L2ZpbGVuYW1lPiBjbGFzcyB3b3JrcyB3ZWxsIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIGZpbGVzIGV4dHJhY3RlZCBpbnRvIDxmaWxlbmFtZT4ke1N9PC9maWxlbmFtZT4gYXJlCisgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgbGFpZCBvdXQgaW4gdGhlIHdheSB0aGV5IHNob3VsZCBiZSBsYWlkIG91dAorICAgICAgICAgICAgICAgICAgICBvbiB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZSB2YXJpYWJsZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTJz48ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRCc+PGZpbGVuYW1lPkQ8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsJ3MgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgZ2xvc3NhcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBjYW4ndCB1c2UgdGhlIDxmaWxlbmFtZT5iaW5fcGFja2FnZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB5b3UgbmVlZCB0byBiZSBzdXJlIHlvdSBhcmUgZG9pbmcgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DcmVhdGUgYSByZWNpcGUgd2hlcmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT4gdGFza3MgZG8gbm90aGluZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCisgICAgIGRvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIG1ha2UgdGhlc2UgdGFza3MgYW4gZW1wdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYWtlIHN1cmUgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4gdGFzayBpbnN0YWxscyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcmllcyBhcHByb3ByaWF0ZWx5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVuc3VyZSB0aGF0IHlvdSBzZXQgdXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPiAodXN1YWxseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU18ke1BOfTwvZmlsZW5hbWU+KSB0byBwb2ludCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcyB5b3UgaGF2ZSBpbnN0YWxsZWQsIHdoaWNoIG9mIGNvdXJzZSBkZXBlbmRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gd2hlcmUgeW91IGhhdmUgaW5zdGFsbGVkIHRoZW0gYW5kIHdoZXRoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aG9zZSBmaWxlcyBhcmUgaW4gZGlmZmVyZW50IGxvY2F0aW9ucyB0aGFuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1uZXdtYWNoaW5lIj4KKyAgICAgICAgPHRpdGxlPkFkZGluZyBhIE5ldyBNYWNoaW5lPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFkZGluZyBhIG5ldyBtYWNoaW5lIHRvIHRoZSBZb2N0byBQcm9qZWN0IGlzIGEgc3RyYWlnaHRmb3J3YXJkCisgICAgICAgICAgICBwcm9jZXNzLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgdG8gYWRkIG1hY2hpbmVzIHRoYXQgYXJlIHNpbWlsYXIKKyAgICAgICAgICAgIHRvIHRob3NlIHRoYXQgdGhlIFlvY3RvIFByb2plY3QgYWxyZWFkeSBzdXBwb3J0cy4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEFsdGhvdWdoIHdlbGwgd2l0aGluIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIFlvY3RvIFByb2plY3QsCisgICAgICAgICAgICAgICAgYWRkaW5nIGEgdG90YWxseSBuZXcgYXJjaGl0ZWN0dXJlIG1pZ2h0IHJlcXVpcmUKKyAgICAgICAgICAgICAgICBjaGFuZ2VzIHRvIDxmaWxlbmFtZT5nY2MvZ2xpYmM8L2ZpbGVuYW1lPiBhbmQgdG8gdGhlIHNpdGUKKyAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiwgd2hpY2ggaXMgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzIG1hbnVhbC4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIGEgY29tcGxldGUgZXhhbXBsZSB0aGF0IHNob3dzIGhvdyB0byBhZGQgYSBuZXcgbWFjaGluZSwKKyAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNjcmVhdGluZy1hLW5ldy1ic3AtbGF5ZXItdXNpbmctdGhlLXlvY3RvLWJzcC1zY3JpcHQnPkNyZWF0aW5nIGEgTmV3IEJTUCBMYXllciBVc2luZyB0aGUgeW9jdG8tYnNwIFNjcmlwdDwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1uZXdtYWNoaW5lLWNvbmZmaWxlIj4KKyAgICAgICAgICAgIDx0aXRsZT5BZGRpbmcgdGhlIE1hY2hpbmUgQ29uZmlndXJhdGlvbiBGaWxlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gYWRkIGEgbmV3IG1hY2hpbmUsIHlvdSBuZWVkIHRvIGFkZCBhIG5ldyBtYWNoaW5lCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIHRvIHRoZSBsYXllcidzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbWFjaGluZTwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBUaGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBwcm92aWRlcyBkZXRhaWxzIGFib3V0IHRoZSBkZXZpY2UKKyAgICAgICAgICAgICAgICB5b3UgYXJlIGFkZGluZy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUgcm9vdCBuYW1lIG9mIHRoZQorICAgICAgICAgICAgICAgIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlIHRvIHJlZmVyZW5jZSB0aGUgbmV3IG1hY2hpbmUuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGdpdmVuIGEgbWFjaGluZSBjb25maWd1cmF0aW9uIGZpbGUgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y3Jvd25iYXkuY29uZjwvZmlsZW5hbWU+LCB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgcmVjb2duaXplcyB0aGUgbWFjaGluZSBhcyAiY3Jvd25iYXkiLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgbW9zdCBpbXBvcnRhbnQgdmFyaWFibGVzIHlvdSBtdXN0IHNldCBpbiB5b3VyIG1hY2hpbmUKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgb3IgaW5jbHVkZSBmcm9tIGEgbG93ZXItbGV2ZWwgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZpbGUgYXJlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVEFSR0VUX0FSQ0gnPlRBUkdFVF9BUkNIPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gImFybSIpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBSRUZFUlJFRF9QUk9WSURFUic+UFJFRkVSUkVEX1BST1ZJREVSPC91bGluaz5fdmlydHVhbC9rZXJuZWw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkVfRkVBVFVSRVMnPk1BQ0hJTkVfRkVBVFVSRVM8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiAiYXBtIHNjcmVlbiB3aWZpIik8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IG1pZ2h0IGFsc28gbmVlZCB0aGVzZSB2YXJpYWJsZXM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU0VSSUFMX0NPTlNPTEVTJz5TRVJJQUxfQ09OU09MRVM8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiAiMTE1MjAwO3R0eVMwIDExNTIwMDt0dHlTMSIpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtFUk5FTF9JTUFHRVRZUEUnPktFUk5FTF9JTUFHRVRZUEU8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiAiekltYWdlIik8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfRlNUWVBFUyc+SU1BR0VfRlNUWVBFUzwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuICJ0YXIuZ3ogamZmczIiKTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgZnVsbCBkZXRhaWxzIG9uIHRoZXNlIHZhcmlhYmxlcyBpbiB0aGUgcmVmZXJlbmNlCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGxldmVyYWdlIGV4aXN0aW5nIG1hY2hpbmUgPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlcyBmcm9tIDxmaWxlbmFtZT5tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1uZXdtYWNoaW5lLWtlcm5lbCI+CisgICAgICAgICAgICA8dGl0bGU+QWRkaW5nIGEgS2VybmVsIGZvciB0aGUgTWFjaGluZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIG5lZWRzIHRvIGJlIGFibGUgdG8gYnVpbGQgYSBrZXJuZWwKKyAgICAgICAgICAgICAgICBmb3IgdGhlIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gZWl0aGVyIGNyZWF0ZSBhIG5ldyBrZXJuZWwgcmVjaXBlIGZvciB0aGlzIG1hY2hpbmUsCisgICAgICAgICAgICAgICAgb3IgZXh0ZW5kIGFuIGV4aXN0aW5nIGtlcm5lbCByZWNpcGUuCisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHNldmVyYWwga2VybmVsIHJlY2lwZSBleGFtcGxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICBTb3VyY2UgRGlyZWN0b3J5IGF0CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1rZXJuZWwvbGludXg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRoYXQgeW91IGNhbiB1c2UgYXMgcmVmZXJlbmNlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBjcmVhdGluZyBhIG5ldyBrZXJuZWwgcmVjaXBlLCBub3JtYWwgcmVjaXBlLXdyaXRpbmcKKyAgICAgICAgICAgICAgICBydWxlcyBhcHBseSBmb3Igc2V0dGluZyB1cCBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz5TUkNfVVJJPC91bGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaHVzLCB5b3UgbmVlZCB0byBzcGVjaWZ5IGFueSBuZWNlc3NhcnkgcGF0Y2hlcyBhbmQgc2V0CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TJz5TPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRvIHBvaW50IGF0IHRoZSBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBjcmVhdGUgYSA8ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT4gdGFzayB0aGF0CisgICAgICAgICAgICAgICAgY29uZmlndXJlcyB0aGUgdW5wYWNrZWQga2VybmVsIHdpdGggYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZG8gdGhpcyBieSB1c2luZyBhIDxmaWxlbmFtZT5tYWtlIGRlZmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29tbWFuZCBvciwgbW9yZSBjb21tb25seSwgYnkgY29weWluZyBpbiBhIHN1aXRhYmxlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgYW5kIHRoZW4gcnVubmluZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYWtlIG9sZGNvbmZpZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEJ5IG1ha2luZyB1c2Ugb2YgPGZpbGVuYW1lPmluaGVyaXQga2VybmVsPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgcG90ZW50aWFsbHkgc29tZSBvZiB0aGUgPGZpbGVuYW1lPmxpbnV4LSouaW5jPC9maWxlbmFtZT4gZmlsZXMsCisgICAgICAgICAgICAgICAgbW9zdCBvdGhlciBmdW5jdGlvbmFsaXR5IGlzIGNlbnRyYWxpemVkIGFuZCB0aGUgZGVmYXVsdHMgb2YgdGhlCisgICAgICAgICAgICAgICAgY2xhc3Mgbm9ybWFsbHkgd29yayB3ZWxsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGV4dGVuZGluZyBhbiBleGlzdGluZyBrZXJuZWwgcmVjaXBlLCBpdCBpcyB1c3VhbGx5CisgICAgICAgICAgICAgICAgYSBtYXR0ZXIgb2YgYWRkaW5nIGEgc3VpdGFibGUgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICBUaGUgZmlsZSBuZWVkcyB0byBiZSBhZGRlZCBpbnRvIGEgbG9jYXRpb24gc2ltaWxhciB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlcyB1c2VkIGZvciBvdGhlciBtYWNoaW5lcworICAgICAgICAgICAgICAgIGluIGEgZ2l2ZW4ga2VybmVsIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBBIHBvc3NpYmxlIHdheSB0byBkbyB0aGlzIGlzIGJ5IGxpc3RpbmcgdGhlIGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBhbmQgYWRkaW5nIHRoZSBtYWNoaW5lIHRvIHRoZQorICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNPTVBBVElCTEVfTUFDSElORSc+Q09NUEFUSUJMRV9NQUNISU5FPC91bGluaz48L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENPTVBBVElCTEVfTUFDSElORSA9ICcocWVtdXg4NnxxZW11bWlwcyknCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlcywKKyAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyNjaGFuZ2luZy10aGUtY29uZmlndXJhdGlvbic+Q2hhbmdpbmcgdGhlIENvbmZpZ3VyYXRpb248L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1uZXdtYWNoaW5lLWZvcm1mYWN0b3IiPgorICAgICAgICAgICAgPHRpdGxlPkFkZGluZyBhIEZvcm1mYWN0b3IgQ29uZmlndXJhdGlvbiBGaWxlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBmb3JtZmFjdG9yIGNvbmZpZ3VyYXRpb24gZmlsZSBwcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAgICAgICAgICAgICAgICB0YXJnZXQgaGFyZHdhcmUgZm9yIHdoaWNoIHRoZSBpbWFnZSBpcyBiZWluZyBidWlsdCBhbmQgaW5mb3JtYXRpb24gdGhhdAorICAgICAgICAgICAgICAgIHRoZSBidWlsZCBzeXN0ZW0gY2Fubm90IG9idGFpbiBmcm9tIG90aGVyIHNvdXJjZXMgc3VjaCBhcyB0aGUga2VybmVsLgorICAgICAgICAgICAgICAgIFNvbWUgZXhhbXBsZXMgb2YgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIGEgZm9ybWZhY3RvciBjb25maWd1cmF0aW9uIGZpbGUgaW5jbHVkZQorICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyIG9yaWVudGF0aW9uLCB3aGV0aGVyIG9yIG5vdCB0aGUgc3lzdGVtIGhhcyBhIGtleWJvYXJkLAorICAgICAgICAgICAgICAgIHRoZSBwb3NpdGlvbmluZyBvZiB0aGUga2V5Ym9hcmQgaW4gcmVsYXRpb24gdG8gdGhlIHNjcmVlbiwgYW5kCisgICAgICAgICAgICAgICAgdGhlIHNjcmVlbiByZXNvbHV0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIHVzZXMgcmVhc29uYWJsZSBkZWZhdWx0cyBpbiBtb3N0IGNhc2VzLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIGN1c3RvbWl6YXRpb24gaXMKKyAgICAgICAgICAgICAgICBuZWNlc3NhcnksIHlvdSBuZWVkIHRvIGNyZWF0ZSBhIDxmaWxlbmFtZT5tYWNoY29uZmlnPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgZGlyZWN0b3JpZXMgZm9yIHNwZWNpZmljIG1hY2hpbmVzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdWFybTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2V0dGluZ3MgYXZhaWxhYmxlIGFuZCB0aGUgZGVmYXVsdHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL2NvbmZpZzwvZmlsZW5hbWU+IGZpbGUgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgc2FtZSBhcmVhLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBmb3IgInFlbXVhcm0iIG1hY2hpbmU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBIQVZFX1RPVUNIU0NSRUVOPTEKKyAgICAgSEFWRV9LRVlCT0FSRD0xCisKKyAgICAgRElTUExBWV9DQU5fUk9UQVRFPTAKKyAgICAgRElTUExBWV9PUklFTlRBVElPTj0wCisgICAgICNESVNQTEFZX1dJRFRIX1BJWEVMUz02NDAKKyAgICAgI0RJU1BMQVlfSEVJR0hUX1BJWEVMUz00ODAKKyAgICAgI0RJU1BMQVlfQlBQPTE2CisgICAgIERJU1BMQVlfRFBJPTE1MAorICAgICBESVNQTEFZX1NVQlBJWEVMX09SREVSPXZyZ2IKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGxhdGRldi13b3JraW5nLXdpdGgtbGlicmFyaWVzIj4KKyAgICAgICAgPHRpdGxlPldvcmtpbmcgV2l0aCBMaWJyYXJpZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTGlicmFyaWVzIGFyZSBhbiBpbnRlZ3JhbCBwYXJ0IG9mIHlvdXIgc3lzdGVtLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBzb21lIGNvbW1vbiBwcmFjdGljZXMgeW91IG1pZ2h0IGZpbmQKKyAgICAgICAgICAgIGhlbHBmdWwgd2hlbiB3b3JraW5nIHdpdGggbGlicmFyaWVzIHRvIGJ1aWxkIHlvdXIgc3lzdGVtOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0naW5jbHVkaW5nLXN0YXRpYy1saWJyYXJ5LWZpbGVzJz5Ib3cgdG8gaW5jbHVkZSBzdGF0aWMgbGlicmFyeSBmaWxlczwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J2NvbWJpbmluZy1tdWx0aXBsZS12ZXJzaW9ucy1saWJyYXJ5LWZpbGVzLWludG8tb25lLWltYWdlJz5Ib3cgdG8gdXNlIHRoZSBNdWx0aWxpYiBmZWF0dXJlIHRvIGNvbWJpbmUgbXVsdGlwbGUgdmVyc2lvbnMgb2YgbGlicmFyeSBmaWxlcyBpbnRvIGEgc2luZ2xlIGltYWdlPC9saW5rPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0naW5zdGFsbGluZy1tdWx0aXBsZS12ZXJzaW9ucy1vZi10aGUtc2FtZS1saWJyYXJ5Jz5Ib3cgdG8gaW5zdGFsbCBtdWx0aXBsZSB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBsaWJyYXJ5IGluIHBhcmFsbGVsIG9uIHRoZSBzYW1lIHN5c3RlbTwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpbmNsdWRpbmctc3RhdGljLWxpYnJhcnktZmlsZXMnPgorICAgICAgICAgICAgPHRpdGxlPkluY2x1ZGluZyBTdGF0aWMgTGlicmFyeSBGaWxlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgYnVpbGRpbmcgYSBsaWJyYXJ5IGFuZCB0aGUgbGlicmFyeSBvZmZlcnMgc3RhdGljIGxpbmtpbmcsIHlvdSBjYW4gY29udHJvbAorICAgICAgICAgICAgICAgIHdoaWNoIHN0YXRpYyBsaWJyYXJ5IGZpbGVzICg8ZmlsZW5hbWU+Ki5hPC9maWxlbmFtZT4gZmlsZXMpIGdldCBpbmNsdWRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICBidWlsdCBsaWJyYXJ5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgYW5kIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTXyo8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGVzIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlIGRlZmluZSBob3cgZmlsZXMgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgYnkgdGhlIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4gdGFzayBhcmUgcGFja2FnZWQuCisgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGluY2x1ZGVzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7UE59LXN0YXRpY2RldjwvZmlsZW5hbWU+LCB3aGljaCByZXByZXNlbnRzIGFsbCBzdGF0aWMgbGlicmFyeSBmaWxlcy4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgU29tZSBwcmV2aW91c2x5IHJlbGVhc2VkIHZlcnNpb25zIG9mIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgdGhlIHN0YXRpYyBsaWJyYXJ5IGZpbGVzIHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7UE59LWRldjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgcGFydCBvZiB0aGUgQml0QmFrZSBjb25maWd1cmF0aW9uIGZpbGUsIHdoZXJlCisgICAgICAgICAgICAgICAgeW91IGNhbiBzZWUgaG93IHRoZSBzdGF0aWMgbGlicmFyeSBmaWxlcyBhcmUgZGVmaW5lZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VfQkVGT1JFX1BOID89ICIiCisgICAgIFBBQ0tBR0VTID0gIiR7UE59LWRiZyAke1BOfS1zdGF0aWNkZXYgJHtQTn0tZGV2ICR7UE59LWRvYyAke1BOfS1sb2NhbGUgJHtQQUNLQUdFX0JFRk9SRV9QTn0gJHtQTn0iCisgICAgIFBBQ0tBR0VTX0RZTkFNSUMgPSAiXiR7UE59LWxvY2FsZS0uKiIKKyAgICAgRklMRVMgPSAiIgorCisgICAgIEZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS8qICR7c2JpbmRpcn0vKiAke2xpYmV4ZWNkaXJ9LyogJHtsaWJkaXJ9L2xpYioke1NPTElCU30gXAorICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9ICR7c2hhcmVkc3RhdGVkaXJ9ICR7bG9jYWxzdGF0ZWRpcn0gXAorICAgICAgICAgICAgICAgICAke2Jhc2VfYmluZGlyfS8qICR7YmFzZV9zYmluZGlyfS8qIFwKKyAgICAgICAgICAgICAgICAgJHtiYXNlX2xpYmRpcn0vKiR7U09MSUJTfSBcCisgICAgICAgICAgICAgICAgICR7YmFzZV9wcmVmaXh9L2xpYi91ZGV2L3J1bGVzLmQgJHtwcmVmaXh9L2xpYi91ZGV2L3J1bGVzLmQgXAorICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9LyR7QlBOfSAke2xpYmRpcn0vJHtCUE59LyogXAorICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3BpeG1hcHMgJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMgXAorICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2lkbCAke2RhdGFkaXJ9L29tZiAke2RhdGFkaXJ9L3NvdW5kcyBcCisgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ib25vYm8vc2VydmVycyIKKworICAgICBGSUxFU18ke1BOfS1iaW4gPSAiJHtiaW5kaXJ9LyogJHtzYmluZGlyfS8qIgorCisgICAgIEZJTEVTXyR7UE59LWRvYyA9ICIke2RvY2Rpcn0gJHttYW5kaXJ9ICR7aW5mb2Rpcn0gJHtkYXRhZGlyfS9ndGstZG9jIFwKKyAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9nbm9tZS9oZWxwIgorICAgICBTRUNUSU9OXyR7UE59LWRvYyA9ICJkb2MiCisKKyAgICAgRklMRVNfU09MSUJTREVWID89ICIke2Jhc2VfbGliZGlyfS9saWIqJHtTT0xJQlNERVZ9ICR7bGliZGlyfS9saWIqJHtTT0xJQlNERVZ9IgorICAgICBGSUxFU18ke1BOfS1kZXYgPSAiJHtpbmNsdWRlZGlyfSAke0ZJTEVTX1NPTElCU0RFVn0gJHtsaWJkaXJ9LyoubGEgXAorICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9LyoubyAke2xpYmRpcn0vcGtnY29uZmlnICR7ZGF0YWRpcn0vcGtnY29uZmlnIFwKKyAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYWNsb2NhbCAke2Jhc2VfbGliZGlyfS8qLm8gXAorICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9LyR7QlBOfS8qLmxhICR7YmFzZV9saWJkaXJ9LyoubGEiCisgICAgIFNFQ1RJT05fJHtQTn0tZGV2ID0gImRldmVsIgorICAgICBBTExPV19FTVBUWV8ke1BOfS1kZXYgPSAiMSIKKyAgICAgUkRFUEVORFNfJHtQTn0tZGV2ID0gIiR7UE59ICg9ICR7RVhURU5EUEtHVn0pIgorCisgICAgIEZJTEVTXyR7UE59LXN0YXRpY2RldiA9ICIke2xpYmRpcn0vKi5hICR7YmFzZV9saWJkaXJ9LyouYSAke2xpYmRpcn0vJHtCUE59LyouYSIKKyAgICAgU0VDVElPTl8ke1BOfS1zdGF0aWNkZXYgPSAiZGV2ZWwiCisgICAgIFJERVBFTkRTXyR7UE59LXN0YXRpY2RldiA9ICIke1BOfS1kZXYgKD0gJHtFWFRFTkRQS0dWfSkiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9ImNvbWJpbmluZy1tdWx0aXBsZS12ZXJzaW9ucy1saWJyYXJ5LWZpbGVzLWludG8tb25lLWltYWdlIj4KKyAgICAgICAgICAgIDx0aXRsZT5Db21iaW5pbmcgTXVsdGlwbGUgVmVyc2lvbnMgb2YgTGlicmFyeSBGaWxlcyBpbnRvIE9uZSBJbWFnZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gb2ZmZXJzIHRoZSBhYmlsaXR5IHRvIGJ1aWxkIGxpYnJhcmllcyB3aXRoIGRpZmZlcmVudAorICAgICAgICAgICAgICAgIHRhcmdldCBvcHRpbWl6YXRpb25zIG9yIGFyY2hpdGVjdHVyZSBmb3JtYXRzIGFuZCBjb21iaW5lIHRoZXNlIHRvZ2V0aGVyCisgICAgICAgICAgICAgICAgaW50byBvbmUgc3lzdGVtIGltYWdlLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gbGluayBkaWZmZXJlbnQgYmluYXJpZXMgaW4gdGhlIGltYWdlCisgICAgICAgICAgICAgICAgYWdhaW5zdCB0aGUgZGlmZmVyZW50IGxpYnJhcmllcyBhcyBuZWVkZWQgZm9yIHNwZWNpZmljIHVzZSBjYXNlcy4KKyAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgaXMgY2FsbGVkICJNdWx0aWxpYi4iCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgd291bGQgYmUgd2hlcmUgeW91IGhhdmUgbW9zdCBvZiBhIHN5c3RlbSBjb21waWxlZCBpbiAzMi1iaXQKKyAgICAgICAgICAgICAgICBtb2RlIHVzaW5nIDMyLWJpdCBsaWJyYXJpZXMsIGJ1dCB5b3UgaGF2ZSBzb21ldGhpbmcgbGFyZ2UsIGxpa2UgYSBkYXRhYmFzZQorICAgICAgICAgICAgICAgIGVuZ2luZSwgdGhhdCBuZWVkcyB0byBiZSBhIDY0LWJpdCBhcHBsaWNhdGlvbiBhbmQgdXNlcyA2NC1iaXQgbGlicmFyaWVzLgorICAgICAgICAgICAgICAgIE11bHRpbGliIGFsbG93cyB5b3UgdG8gZ2V0IHRoZSBiZXN0IG9mIGJvdGggMzItYml0IGFuZCA2NC1iaXQgbGlicmFyaWVzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGlsZSB0aGUgTXVsdGlsaWIgZmVhdHVyZSBpcyBtb3N0IGNvbW1vbmx5IHVzZWQgZm9yIDMyIGFuZCA2NC1iaXQgZGlmZmVyZW5jZXMsCisgICAgICAgICAgICAgICAgdGhlIGFwcHJvYWNoIHRoZSBidWlsZCBzeXN0ZW0gdXNlcyBmYWNpbGl0YXRlcyBkaWZmZXJlbnQgdGFyZ2V0IG9wdGltaXphdGlvbnMuCisgICAgICAgICAgICAgICAgWW91IGNvdWxkIGNvbXBpbGUgc29tZSBiaW5hcmllcyB0byB1c2Ugb25lIHNldCBvZiBsaWJyYXJpZXMgYW5kIG90aGVyIGJpbmFyaWVzCisgICAgICAgICAgICAgICAgdG8gdXNlIGEgZGlmZmVyZW50IHNldCBvZiBsaWJyYXJpZXMuCisgICAgICAgICAgICAgICAgVGhlIGxpYnJhcmllcyBjb3VsZCBkaWZmZXIgaW4gYXJjaGl0ZWN0dXJlLCBjb21waWxlciBvcHRpb25zLCBvciBvdGhlcgorICAgICAgICAgICAgICAgIG9wdGltaXphdGlvbnMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBvdmVydmlld3MgdGhlIE11bHRpbGliIHByb2Nlc3Mgb25seS4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBkZXRhaWxzIG9uIGhvdyB0byBpbXBsZW1lbnQgTXVsdGlsaWIsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvTXVsdGlsaWInPk11bHRpbGliPC91bGluaz4gd2lraQorICAgICAgICAgICAgICAgIHBhZ2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzaWRlIGZyb20gdGhpcyB3aWtpIHBhZ2UsIHNldmVyYWwgZXhhbXBsZXMgZXhpc3QgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtc2tlbGV0b248L2ZpbGVuYW1lPiBsYXllciBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+OgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29uZi9tdWx0aWxpYi1leGFtcGxlLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29uZi9tdWx0aWxpYi1leGFtcGxlMi5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnJlY2lwZXMtbXVsdGlsaWIvaW1hZ2VzL2NvcmUtaW1hZ2UtbXVsdGlsaWItZXhhbXBsZS5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGU8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3ByZXBhcmluZy10by11c2UtbXVsdGlsaWInPgorICAgICAgICAgICAgICAgIDx0aXRsZT5QcmVwYXJpbmcgdG8gVXNlIE11bHRpbGliPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBVc2VyLXNwZWNpZmljIHJlcXVpcmVtZW50cyBkcml2ZSB0aGUgTXVsdGlsaWIgZmVhdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0aGVyZSBpcyBubyBvbmUgIm91dC1vZi10aGUtYm94IiBjb25maWd1cmF0aW9uIHRoYXQgbGlrZWx5CisgICAgICAgICAgICAgICAgICAgIGV4aXN0cyB0byBtZWV0IHlvdXIgbmVlZHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIGVuYWJsZSBNdWx0aWxpYiwgeW91IGZpcnN0IG5lZWQgdG8gZW5zdXJlIHlvdXIgcmVjaXBlIGlzCisgICAgICAgICAgICAgICAgICAgIGV4dGVuZGVkIHRvIHN1cHBvcnQgbXVsdGlwbGUgbGlicmFyaWVzLgorICAgICAgICAgICAgICAgICAgICBNYW55IHN0YW5kYXJkIHJlY2lwZXMgYXJlIGFscmVhZHkgZXh0ZW5kZWQgYW5kIHN1cHBvcnQgbXVsdGlwbGUgbGlicmFyaWVzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGNoZWNrIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9jb25mL211bHRpbGliLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+IHRvIHNlZSBob3cgdGhpcyBpcworICAgICAgICAgICAgICAgICAgICBkb25lIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJDTEFTU0VYVEVORCc+PGZpbGVuYW1lPkJCQ0xBU1NFWFRFTkQ8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBFdmVudHVhbGx5LCBhbGwgcmVjaXBlcyB3aWxsIGJlIGNvdmVyZWQgYW5kIHRoaXMgbGlzdCB3aWxsCisgICAgICAgICAgICAgICAgICAgIG5vdCBiZSBuZWVkZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciB0aGUgbW9zdCBwYXJ0LCB0aGUgTXVsdGlsaWIgY2xhc3MgZXh0ZW5zaW9uIHdvcmtzIGF1dG9tYXRpY2FsbHkgdG8KKyAgICAgICAgICAgICAgICAgICAgZXh0ZW5kIHRoZSBwYWNrYWdlIG5hbWUgZnJvbSA8ZmlsZW5hbWU+JHtQTn08L2ZpbGVuYW1lPiB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtNTFBSRUZJWH0ke1BOfTwvZmlsZW5hbWU+LCB3aGVyZSA8ZmlsZW5hbWU+TUxQUkVGSVg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyB0aGUgcGFydGljdWxhciBtdWx0aWxpYiAoZS5nLiAibGliMzItIiBvciAibGliNjQtIikuCisgICAgICAgICAgICAgICAgICAgIFN0YW5kYXJkIHZhcmlhYmxlcyBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJQUk9WSURFUyc+PGZpbGVuYW1lPlJQUk9WSURFUzwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvdWxpbms+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VTX0RZTkFNSUMnPjxmaWxlbmFtZT5QQUNLQUdFU19EWU5BTUlDPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBhcmUgYXV0b21hdGljYWxseSBleHRlbmRlZCBieSB0aGUgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGV4dGVuZGluZyBhbnkgbWFudWFsIGNvZGUgaW4gdGhlIHJlY2lwZSwgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke01MUFJFRklYfTwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvIGVuc3VyZSB0aG9zZSBuYW1lcyBhcmUgZXh0ZW5kZWQKKyAgICAgICAgICAgICAgICAgICAgY29ycmVjdGx5LgorICAgICAgICAgICAgICAgICAgICBUaGlzIGF1dG9tYXRpYyBleHRlbnNpb24gY29kZSByZXNpZGVzIGluIDxmaWxlbmFtZT5tdWx0aWxpYi5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmctbXVsdGlsaWInPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBNdWx0aWxpYjwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgeW91IGhhdmUgc2V0IHVwIHRoZSByZWNpcGVzLCB5b3UgbmVlZCB0byBkZWZpbmUgdGhlIGFjdHVhbAorICAgICAgICAgICAgICAgICAgICBjb21iaW5hdGlvbiBvZiBtdWx0aXBsZSBsaWJyYXJpZXMgeW91IHdhbnQgdG8gYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIFlvdSBhY2NvbXBsaXNoIHRoaXMgdGhyb3VnaCB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgY29uZmlndXJhdGlvbiB3b3VsZCBiZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE1BQ0hJTkUgPSAicWVtdXg4Ni02NCIKKyAgICAgcmVxdWlyZSBjb25mL211bHRpbGliLmNvbmYKKyAgICAgTVVMVElMSUJTID0gIm11bHRpbGliOmxpYjMyIgorICAgICBERUZBVUxUVFVORV92aXJ0Y2xhc3MtbXVsdGlsaWItbGliMzIgPSAieDg2IgorICAgICBJTUFHRV9JTlNUQUxMID0gImxpYjMyLWNvbm5tYW4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIGVuYWJsZXMgYW4KKyAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbCBsaWJyYXJ5IG5hbWVkIDxmaWxlbmFtZT5saWIzMjwvZmlsZW5hbWU+IGFsb25nc2lkZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgbm9ybWFsIHRhcmdldCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBjb21iaW5pbmcgdGhlc2UgImxpYjMyIiBhbHRlcm5hdGl2ZXMsIHRoZSBleGFtcGxlIHVzZXMgIng4NiIgZm9yIHR1bmluZy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoaXMgcGFydGljdWxhciB0dW5pbmcsIHNlZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9pYTMyL2FyY2gtaWEzMi5pbmM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGUgdGhlbiBpbmNsdWRlcyA8ZmlsZW5hbWU+bGliMzItY29ubm1hbjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGluIGFsbCB0aGUgaW1hZ2VzLCB3aGljaCBpbGx1c3RyYXRlcyBvbmUgbWV0aG9kIG9mIGluY2x1ZGluZyBhCisgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlIGxpYnJhcnkgZGVwZW5kZW5jeS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgYSBub3JtYWwgaW1hZ2UgYnVpbGQgdG8gaW5jbHVkZSB0aGlzIGRlcGVuZGVuY3ksCisgICAgICAgICAgICAgICAgICAgIGZvciBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBjb3JlLWltYWdlLXNhdG8KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gYnVpbGQgTXVsdGlsaWIgcGFja2FnZXMgc3BlY2lmaWNhbGx5IHdpdGggYSBjb21tYW5kIGxpa2UgdGhpczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbGliMzItY29ubm1hbgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nYWRkaXRpb25hbC1pbXBsZW1lbnRhdGlvbi1kZXRhaWxzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+QWRkaXRpb25hbCBJbXBsZW1lbnRhdGlvbiBEZXRhaWxzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEaWZmZXJlbnQgcGFja2FnaW5nIHN5c3RlbXMgaGF2ZSBkaWZmZXJlbnQgbGV2ZWxzIG9mIG5hdGl2ZSBNdWx0aWxpYgorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LgorICAgICAgICAgICAgICAgICAgICBGb3IgdGhlIFJQTSBQYWNrYWdlIE1hbmFnZW1lbnQgU3lzdGVtLCB0aGUgZm9sbG93aW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMKKyAgICAgICAgICAgICAgICAgICAgZXhpc3Q6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSB1bmlxdWUgYXJjaGl0ZWN0dXJlIGlzIGRlZmluZWQgZm9yIHRoZSBNdWx0aWxpYiBwYWNrYWdlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbG9uZyB3aXRoIGNyZWF0aW5nIGEgdW5pcXVlIGRlcGxveSBmb2xkZXIgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL2RlcGxveS9ycG08L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGNvbnNpZGVyIDxmaWxlbmFtZT5saWIzMjwvZmlsZW5hbWU+IGluIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdXg4Ni02NDwvZmlsZW5hbWU+IGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwb3NzaWJsZSBhcmNoaXRlY3R1cmVzIGluIHRoZSBzeXN0ZW0gYXJlICJhbGwiLCAicWVtdXg4Nl82NCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYjMyX3FlbXV4ODZfNjQiLCBhbmQgImxpYjMyX3g4NiIuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIDxmaWxlbmFtZT4ke01MUFJFRklYfTwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIHN0cmlwcGVkIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtQTn08L2ZpbGVuYW1lPiBkdXJpbmcgUlBNIHBhY2thZ2luZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmFtaW5nIGZvciBhIG5vcm1hbCBSUE0gcGFja2FnZSBhbmQgYSBNdWx0aWxpYiBSUE0gcGFja2FnZSBpbiBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXV4ODYtNjQ8L2ZpbGVuYW1lPiBzeXN0ZW0gcmVzb2x2ZXMgdG8gc29tZXRoaW5nIHNpbWlsYXIgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmFzaC00LjEtcjIueDg2XzY0LnJwbTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNoLTQuMS5yMi5saWIzMl94ODYucnBtPC9maWxlbmFtZT4sIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGVuIGluc3RhbGxpbmcgYSBNdWx0aWxpYiBpbWFnZSwgdGhlIFJQTSBiYWNrZW5kIGZpcnN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbHMgdGhlIGJhc2UgaW1hZ2UgYW5kIHRoZW4gaW5zdGFsbHMgdGhlIE11bHRpbGliIGxpYnJhcmllcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgYnVpbGQgc3lzdGVtIHJlbGllcyBvbiBSUE0gdG8gcmVzb2x2ZSB0aGUgaWRlbnRpY2FsIGZpbGVzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR3byAob3IgbW9yZSkgTXVsdGlsaWIgcGFja2FnZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgdGhlIElQSyBQYWNrYWdlIE1hbmFnZW1lbnQgU3lzdGVtLCB0aGUgZm9sbG93aW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZXhpc3Q6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIDxmaWxlbmFtZT4ke01MUFJFRklYfTwvZmlsZW5hbWU+IGlzIG5vdCBzdHJpcHBlZCBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7UE59PC9maWxlbmFtZT4gZHVyaW5nIElQSyBwYWNrYWdpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWluZyBmb3IgYSBub3JtYWwgUlBNIHBhY2thZ2UgYW5kIGEgTXVsdGlsaWIgSVBLIHBhY2thZ2UgaW4gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11eDg2LTY0PC9maWxlbmFtZT4gc3lzdGVtIHJlc29sdmVzIHRvIHNvbWV0aGluZyBsaWtlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhc2hfNC4xLXIyLng4Nl82NC5pcGs8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGliMzItYmFzaF80LjEtcndfeDg2LmlwazwvZmlsZW5hbWU+LCByZXNwZWN0aXZlbHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIElQSyBkZXBsb3kgZm9sZGVyIGlzIG5vdCBtb2RpZmllZCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7TUxQUkVGSVh9PC9maWxlbmFtZT4gYmVjYXVzZSBwYWNrYWdlcyB3aXRoIGFuZCB3aXRob3V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIE11bHRpbGliIGZlYXR1cmUgY2FuIGV4aXN0IGluIHRoZSBzYW1lIGZvbGRlciBkdWUgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7UE59PC9maWxlbmFtZT4gZGlmZmVyZW5jZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SVBLIGRlZmluZXMgYSBzYW5pdHkgY2hlY2sgZm9yIE11bHRpbGliIGluc3RhbGxhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIGNlcnRhaW4gcnVsZXMgZm9yIGZpbGUgY29tcGFyaXNvbiwgb3ZlcnJpZGRlbiwgZXRjLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0naW5zdGFsbGluZy1tdWx0aXBsZS12ZXJzaW9ucy1vZi10aGUtc2FtZS1saWJyYXJ5Jz4KKyAgICAgICAgICAgIDx0aXRsZT5JbnN0YWxsaW5nIE11bHRpcGxlIFZlcnNpb25zIG9mIHRoZSBTYW1lIExpYnJhcnk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTaXR1YXRpb25zIGNhbiBleGlzdCB3aGVyZSB5b3UgbmVlZCB0byBpbnN0YWxsIGFuZCB1c2UKKyAgICAgICAgICAgICAgICBtdWx0aXBsZSB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBsaWJyYXJ5IG9uIHRoZSBzYW1lIHN5c3RlbQorICAgICAgICAgICAgICAgIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAgICAgICAgICAgVGhlc2Ugc2l0dWF0aW9ucyBhbG1vc3QgYWx3YXlzIGV4aXN0IHdoZW4gYSBsaWJyYXJ5IEFQSQorICAgICAgICAgICAgICAgIGNoYW5nZXMgYW5kIHlvdSBoYXZlIG11bHRpcGxlIHBpZWNlcyBvZiBzb2Z0d2FyZSB0aGF0CisgICAgICAgICAgICAgICAgZGVwZW5kIG9uIHRoZSBzZXBhcmF0ZSB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgICAgICAgICBUbyBhY2NvbW1vZGF0ZSB0aGVzZSBzaXR1YXRpb25zLCB5b3UgY2FuIGluc3RhbGwgbXVsdGlwbGUKKyAgICAgICAgICAgICAgICB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBsaWJyYXJ5IGluIHBhcmFsbGVsIG9uIHRoZSBzYW1lIHN5c3RlbS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHByb2Nlc3MgaXMgc3RyYWlnaHRmb3J3YXJkIGFzIGxvbmcgYXMgdGhlIGxpYnJhcmllcyB1c2UKKyAgICAgICAgICAgICAgICBwcm9wZXIgdmVyc2lvbmluZy4KKyAgICAgICAgICAgICAgICBXaXRoIHByb3Blcmx5IHZlcnNpb25lZCBsaWJyYXJpZXMsIGFsbCB5b3UgbmVlZCB0byBkbyB0bworICAgICAgICAgICAgICAgIGluZGl2aWR1YWxseSBzcGVjaWZ5IHRoZSBsaWJyYXJpZXMgaXMgY3JlYXRlIHNlcGFyYXRlLAorICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlbHkgbmFtZWQgcmVjaXBlcyB3aGVyZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC91bGluaz4gcGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICBuYW1lIGluY2x1ZGVzIGEgcG9ydGlvbiB0aGF0IGRpZmZlcmVudGlhdGVzIGVhY2ggbGlicmFyeSB2ZXJzaW9uCisgICAgICAgICAgICAgICAgKGUuZy50aGUgbWFqb3IgcGFydCBvZiB0aGUgdmVyc2lvbiBudW1iZXIpLgorICAgICAgICAgICAgICAgIFRodXMsIGluc3RlYWQgb2YgaGF2aW5nIGEgc2luZ2xlIHJlY2lwZSB0aGF0IGxvYWRzIG9uZSB2ZXJzaW9uCisgICAgICAgICAgICAgICAgb2YgYSBsaWJyYXJ5IChlLmcuIDxmaWxlbmFtZT5jbHV0dGVyPC9maWxlbmFtZT4pLCB5b3UgcHJvdmlkZQorICAgICAgICAgICAgICAgIG11bHRpcGxlIHJlY2lwZXMgdGhhdCByZXN1bHQgaW4gZGlmZmVyZW50IHZlcnNpb25zCisgICAgICAgICAgICAgICAgb2YgdGhlIGxpYnJhcmllcyB5b3Ugd2FudC4KKyAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHR3byByZWNpcGVzIHdvdWxkIGFsbG93IHRoZQorICAgICAgICAgICAgICAgIHR3byBzZXBhcmF0ZSB2ZXJzaW9ucyBvZiB0aGUgPGZpbGVuYW1lPmNsdXR0ZXI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGxpYnJhcnkgdG8gY28tZXhpc3Qgb24gdGhlIHNhbWUgc3lzdGVtOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgY2x1dHRlci0xLjZfMS42LjIwLmJiCisgICAgIGNsdXR0ZXItMS44XzEuOC40LmJiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgaWYgeW91IGhhdmUgb3RoZXIgcmVjaXBlcyB0aGF0IGRlcGVuZCBvbiBhIGdpdmVuCisgICAgICAgICAgICAgICAgbGlicmFyeSwgeW91IG5lZWQgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBjcmVhdGUgdGhlIGRlcGVuZGVuY3kuCisgICAgICAgICAgICAgICAgQ29udGludWluZyB3aXRoIHRoZSBzYW1lIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGhhdmUgYSByZWNpcGUKKyAgICAgICAgICAgICAgICBkZXBlbmQgb24gdGhlIDEuOCB2ZXJzaW9uIG9mIHRoZSA8ZmlsZW5hbWU+Y2x1dHRlcjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgbGlicmFyeSwgdXNlIHRoZSBmb2xsb3dpbmcgaW4geW91ciByZWNpcGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBFTkRTID0gImNsdXR0ZXItMS44IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdjcmVhdGluZy1wYXJ0aXRpb25lZC1pbWFnZXMnPgorICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgUGFydGl0aW9uZWQgSW1hZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENyZWF0aW5nIGFuIGltYWdlIGZvciBhIHBhcnRpY3VsYXIgaGFyZHdhcmUgdGFyZ2V0IHVzaW5nIHRoZQorICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIHlvdSBjYW4gYm9vdAorICAgICAgICAgICAgdGhhdCBpbWFnZSBhcyBpcyBvbiB5b3VyIGRldmljZS4KKyAgICAgICAgICAgIFBoeXNpY2FsIGRldmljZXMgYWNjZXB0IGFuZCBib290IGltYWdlcyBpbiB2YXJpb3VzIHdheXMgZGVwZW5kaW5nCisgICAgICAgICAgICBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoZSBkZXZpY2UuCisgICAgICAgICAgICBVc3VhbGx5LCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGFyZHdhcmUgY2FuIHRlbGwgeW91IHdoYXQgaW1hZ2UKKyAgICAgICAgICAgIGZvcm1hdCB0aGUgZGV2aWNlIHJlcXVpcmVzLgorICAgICAgICAgICAgU2hvdWxkIHlvdXIgZGV2aWNlIHJlcXVpcmUgbXVsdGlwbGUgcGFydGl0aW9ucyBvbiBhbiBTRCBjYXJkLCBmbGFzaCwKKyAgICAgICAgICAgIG9yIGFuIEhERCwgeW91IGNhbiB1c2UgdGhlIE9wZW5FbWJlZGRlZCBJbWFnZSBDcmVhdG9yLAorCSAgICAgICAgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+LCB0byBjcmVhdGUgdGhlIHByb3Blcmx5IHBhcnRpdGlvbmVkIGltYWdlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGNvbW1hbmQgZ2VuZXJhdGVzIHBhcnRpdGlvbmVkIGltYWdlcworICAgICAgICAgICAgZnJvbSBleGlzdGluZyBPcGVuRW1iZWRkZWQgYnVpbGQgYXJ0aWZhY3RzLgorICAgICAgICAgICAgSW1hZ2UgZ2VuZXJhdGlvbiBpcyBkcml2ZW4gYnkgcGFydGl0aW9uaW5nIGNvbW1hbmRzIGNvbnRhaW5lZAorICAgICAgICAgICAgaW4gYW4gT3BlbmVtYmVkZGVkIGtpY2tzdGFydCBmaWxlICg8ZmlsZW5hbWU+LndrczwvZmlsZW5hbWU+KQorICAgICAgICAgICAgc3BlY2lmaWVkIGVpdGhlciBkaXJlY3RseSBvbiB0aGUgY29tbWFuZCBsaW5lIG9yIGFzIG9uZSBvZiBhCisgICAgICAgICAgICBzZWxlY3Rpb24gb2YgY2FubmVkIDxmaWxlbmFtZT4ud2tzPC9maWxlbmFtZT4gZmlsZXMgYXMgc2hvd24KKyAgICAgICAgICAgIHdpdGggdGhlIDxmaWxlbmFtZT53aWMgbGlzdCBpbWFnZXM8L2ZpbGVuYW1lPiBjb21tYW5kIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWEtcHJvdmlkZWQta2lja3N0YXJ0X2ZpbGUnPlVzaW5nIGFuIEV4aXN0aW5nIEtpY2tzdGFydCBGaWxlPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICBXaGVuIGFwcGxpZWQgdG8gYSBnaXZlbiBzZXQgb2YgYnVpbGQgYXJ0aWZhY3RzLCB0aGUgcmVzdWx0IGlzIGFuCisgICAgICAgICAgICBpbWFnZSBvciBzZXQgb2YgaW1hZ2VzIHRoYXQgY2FuIGJlIGRpcmVjdGx5IHdyaXR0ZW4gb250byBtZWRpYSBhbmQKKyAgICAgICAgICAgIHVzZWQgb24gYSBwYXJ0aWN1bGFyIHN5c3RlbS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorCSAgICAgICAgVGhlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBjb21tYW5kIGFuZCB0aGUgaW5mcmFzdHJ1Y3R1cmUKKwkgICAgICAgIGl0IGlzIGJhc2VkIG9uIGlzIGJ5IGRlZmluaXRpb24gaW5jb21wbGV0ZS4KKyAgICAgICAgICAgIEl0cyBwdXJwb3NlIGlzIHRvIGFsbG93IHRoZSBnZW5lcmF0aW9uIG9mIGN1c3RvbWl6ZWQgaW1hZ2VzLAorICAgICAgICAgICAgYW5kIGFzIHN1Y2ggd2FzIGRlc2lnbmVkIHRvIGJlIGNvbXBsZXRlbHkgZXh0ZW5zaWJsZSB0aHJvdWdoIGEKKyAgICAgICAgICAgIHBsdWdpbiBpbnRlcmZhY2UuCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nb3BlbmVtYmVkZGVkLWtpY2tzdGFydC1wbHVnaW5zJz5QbHVnaW5zPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uIG9uIHRoZXNlIHBsdWdpbnMuCisJICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBzb21lIGJhY2tncm91bmQgaW5mb3JtYXRpb24gb24KKyAgICAgICAgICAgIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiwgZGVzY3JpYmVzIHdoYXQgeW91IG5lZWQgdG8gaGF2ZSBpbgorICAgICAgICAgICAgcGxhY2UgdG8gcnVuIHRoZSB0b29sLCBwcm92aWRlcyBpbnN0cnVjdGlvbiBvbiBob3cgdG8gdXNlCisgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4sIGFuZCBwcm92aWRlcyBzZXZlcmFsIGV4YW1wbGVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3dpYy1iYWNrZ3JvdW5kJz4KKyAgICAgICAgICAgIDx0aXRsZT5CYWNrZ3JvdW5kPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIHNvbWUgYmFja2dyb3VuZCBvbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gdXRpbGl0eS4KKyAgICAgICAgICAgICAgICBXaGlsZSBub25lIG9mIHRoaXMgaW5mb3JtYXRpb24gaXMgcmVxdWlyZWQgdG8gdXNlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+LCB5b3UgbWlnaHQgZmluZCBpdCBpbnRlcmVzdGluZy4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSAid2ljIiBpcyBkZXJpdmVkIGZyb20gT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZSBDcmVhdG9yIChvZWljKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSAib2UiIGRpcGh0aG9uZyBpbiAib2VpYyIgd2FzIHByb21vdGVkIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbGV0dGVyICJ3IiwgYmVjYXVzZSAib2VpYyIgaXMgYm90aCBkaWZmaWN1bHQgdG8gcmVtZW1iZXIgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9ub3VuY2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBpcyBsb29zZWx5IGJhc2VkIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgTWVlZ28gSW1hZ2UgQ3JlYXRvciAoPGZpbGVuYW1lPm1pYzwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWV3b3JrLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlvbiBoYXMgYmVlbgorICAgICAgICAgICAgICAgICAgICAgICAgaGVhdmlseSBtb2RpZmllZCB0byBtYWtlIGRpcmVjdCB1c2Ugb2YgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBhcnRpZmFjdHMgaW5zdGVhZCBvZiBwYWNrYWdlIGluc3RhbGxhdGlvbiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGFyZSBhbHJlYWR5IGluY29ycG9yYXRlZCB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYXJ0aWZhY3RzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gaXMgYSBjb21wbGV0ZWx5IGluZGVwZW5kZW50CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFuZGFsb25lIHV0aWxpdHkgdGhhdCBpbml0aWFsbHkgcHJvdmlkZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGVhc2llci10by11c2UgYW5kIG1vcmUgZmxleGlibGUgcmVwbGFjZW1lbnRzIGZvciBhCisgICAgICAgICAgICAgICAgICAgICAgICBjb3VwbGUgYml0cyBvZiBleGlzdGluZyBmdW5jdGlvbmFsaXR5IGluIE9FIENvcmUncworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJvb3QtZGlyZWN0ZGlzay5iYmNsYXNzPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWtlZmlkaXNrLnNoPC9maWxlbmFtZT4gc2NyaXB0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBhbmQgdGhvc2UgZXhhbXBsZXMgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgd2l0aCA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IG9mIHRob3NlIHNjcmlwdHMgaXMgaW1wbGVtZW50ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGEgZ2VuZXJhbC1wdXJwb3NlIHBhcnRpdGlvbmluZyBsYW5ndWFnZSwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIFJlZGhhdCBraWNrc3RhcnQgc3ludGF4LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3dpYy1yZXF1aXJlbWVudHMnPgorICAgICAgICAgICAgPHRpdGxlPlJlcXVpcmVtZW50czwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIHVzZSB0aGUgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IHV0aWxpdHkKKyAgICAgICAgICAgICAgICB3aXRoIHRoZSBPcGVuRW1iZWRkZWQgQnVpbGQgc3lzdGVtLCB5b3VyIHN5c3RlbSBuZWVkcworICAgICAgICAgICAgICAgIHRvIG1lZXQgdGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBMaW51eCBkaXN0cmlidXRpb24gb24geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgaG9zdCBtdXN0IHN1cHBvcnQgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjZGV0YWlsZWQtc3VwcG9ydGVkLWRpc3Ryb3MnPlN1cHBvcnRlZCBMaW51eCBEaXN0cmlidXRpb25zPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgZm9yIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Qgb2YgZGlzdHJpYnV0aW9ucy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHN0YW5kYXJkIHN5c3RlbSB1dGlsaXRpZXMsIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jcDwvZmlsZW5hbWU+LCBtdXN0IGJlIGluc3RhbGxlZCBvbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBob3N0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBoYXZlIHRoZSBidWlsZCBhcnRpZmFjdHMgYWxyZWFkeQorICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlLCB3aGljaCB0eXBpY2FsbHkgbWVhbnMgdGhhdCB5b3UgbXVzdAorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSBhbHJlYWR5IGNyZWF0ZWQgYW4gaW1hZ2UgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBPcGVuZW1iZWRkZWQgYnVpbGQgc3lzdGVtIChlLmcuCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgV2hpbGUgaXQgbWlnaHQgc2VlbSByZWR1bmRhbnQgdG8gZ2VuZXJhdGUgYW4gaW1hZ2UgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyIHRvIGNyZWF0ZSBhbiBpbWFnZSB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+LCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gcmVxdWlyZXMgdGhlIGFydGlmYWN0cworICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGZvcm0gZ2VuZXJhdGVkIGJ5IHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgYnVpbGQgc2V2ZXJhbCBuYXRpdmUgdG9vbHM6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBwYXJ0ZWQtbmF0aXZlIGRvc2ZzdG9vbHMtbmF0aXZlIG10b29scy1uYXRpdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBoYXZlIHNvdXJjZWQgb25lIG9mIHRoZSBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICAgICAgc2V0dXAgc2NyaXB0cyAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4pCisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3dpYy1nZXR0aW5nLWhlbHAnPgorICAgICAgICAgICAgPHRpdGxlPkdldHRpbmcgSGVscDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZ2V0IGdlbmVyYWwgaGVscCBmb3IgdGhlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGJ5IGVudGVyaW5nIHRoZSA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gY29tbWFuZCBieSBpdHNlbGYKKyAgICAgICAgICAgICAgICBvciBieSBlbnRlcmluZyB0aGUgY29tbWFuZCB3aXRoIGEgaGVscCBhcmd1bWVudCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB3aWMgLWgKKyAgICAgJCB3aWMgLS1oZWxwCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDdXJyZW50bHksIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBzdXBwb3J0cyB0d28gY29tbWFuZHM6CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNyZWF0ZTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+bGlzdDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZ2V0IGhlbHAgZm9yIHRoZXNlIGNvbW1hbmRzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHdpYyBoZWxwIDxyZXBsYWNlYWJsZT5jb21tYW5kPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBnZXQgZGV0YWlsZWQgaGVscCBvbiBhIG51bWJlciBvZiB0b3BpY3MKKyAgICAgICAgICAgICAgICBmcm9tIHRoZSBoZWxwIHN5c3RlbS4KKyAgICAgICAgICAgICAgICBUaGUgb3V0cHV0IG9mIDxmaWxlbmFtZT53aWMgLS1oZWxwPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXNwbGF5cyBhIGxpc3Qgb2YgYXZhaWxhYmxlIGhlbHAKKyAgICAgICAgICAgICAgICB0b3BpY3MgdW5kZXIgYSAiSGVscCB0b3BpY3MiIGhlYWRpbmcuCisgICAgICAgICAgICAgICAgWW91IGNhbiBoYXZlIHRoZSBoZWxwIHN5c3RlbSBkaXNwbGF5IHRoZSBoZWxwIHRleHQgZm9yCisgICAgICAgICAgICAgICAgYSBnaXZlbiB0b3BpYyBieSBwcmVmYWNpbmcgdGhlIHRvcGljIHdpdGgKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljIGhlbHA8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgd2ljIGhlbHAgPHJlcGxhY2VhYmxlPmhlbHBfdG9waWM8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG91dCBtb3JlIGFib3V0IHRoZSBpbWFnZXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gY3JlYXRlcyB1c2luZyB0aGUgZXhpc3RpbmcKKyAgICAgICAgICAgICAgICBraWNrc3RhcnQgZmlsZXMgd2l0aCB0aGUgZm9sbG93aW5nIGZvcm0gb2YgdGhlIGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHdpYyBsaXN0IDxyZXBsYWNlYWJsZT5pbWFnZTwvcmVwbGFjZWFibGU+IGhlbHAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgd2hlcmUgPGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5pbWFnZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4gaXMgZWl0aGVyCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpcmVjdGRpc2s8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ta2VmaWRpc2s8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdvcGVyYXRpb25hbC1tb2Rlcyc+CisgICAgICAgICAgICA8dGl0bGU+T3BlcmF0aW9uYWwgTW9kZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKwkgICAgICAgICAgICBZb3UgY2FuIHVzZSA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gaW4gdHdvIGRpZmZlcmVudAorCSAgICAgICAgICAgIG1vZGVzLCBkZXBlbmRpbmcgb24gaG93IG11Y2ggY29udHJvbCB5b3UgbmVlZCBmb3IKKwkgICAgICAgICAgICBzcGVjaWZ5aW5nIHRoZSBPcGVuZW1iZWRkZWQgYnVpbGQgYXJ0aWZhY3RzIHRoYXQgYXJlCisgICAgICAgICAgICAgICAgdXNlZCBmb3IgY3JlYXRpbmcgdGhlIGltYWdlOiBSYXcgYW5kIENvb2tlZDoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJhdyBNb2RlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgZXhwbGljaXRseSBzcGVjaWZ5IGJ1aWxkIGFydGlmYWN0cyB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLWxpbmUgYXJndW1lbnRzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNvb2tlZCBNb2RlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZyBhbmQgaW1hZ2UgbmFtZSBhcmUgdXNlZCB0byBhdXRvbWF0aWNhbGx5IGxvY2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHByb3ZpZGUgdGhlIGJ1aWxkIGFydGlmYWN0cy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUmVnYXJkbGVzcyBvZiB0aGUgbW9kZSB5b3UgdXNlLCB5b3UgbmVlZCB0byBoYXZlIHRoZSBidWlsZAorICAgICAgICAgICAgICAgIGFydGlmYWN0cyByZWFkeSBhbmQgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIGVudmlyb25tZW50IG11c3QgYmUgc2V0IHVwIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBzY3JpcHQgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0ncmF3LW1vZGUnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5SYXcgTW9kZTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGdlbmVyYWwgZm9ybSBvZiB0aGUgJ3dpYycgY29tbWFuZCBpbiByYXcgbW9kZSBpczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHdpYyBjcmVhdGUgPHJlcGxhY2VhYmxlPmltYWdlX25hbWU8L3JlcGxhY2VhYmxlPi53a3MgWzxyZXBsYWNlYWJsZT5vcHRpb25zPC9yZXBsYWNlYWJsZT5dIFsuLi5dCisKKyAgICAgICAgIFdoZXJlOgorCisgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPmltYWdlX25hbWU8L3JlcGxhY2VhYmxlPi53a3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbiBPcGVuRW1iZWRkZWQga2lja3N0YXJ0IGZpbGUuICBZb3UgY2FuIHByb3ZpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIG93biBjdXN0b20gZmlsZSBvciB1c2UgYSBmaWxlIGZyb20gYSBzZXQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZyBmaWxlcyBhcyBkZXNjcmliZWQgYnkgZnVydGhlciBvcHRpb25zLgorCisgICAgICAgICAgICAgLW8gPHJlcGxhY2VhYmxlPk9VVERJUjwvcmVwbGFjZWFibGU+LCAtLW91dGRpcj08cmVwbGFjZWFibGU+T1VURElSPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiBhIGRpcmVjdG9yeSBpbiB3aGljaCB0byBjcmVhdGUgaW1hZ2UuCisKKyAgICAgICAgICAgICAtaSA8cmVwbGFjZWFibGU+UFJPUEVSVElFU19GSUxFPC9yZXBsYWNlYWJsZT4sIC0taW5maWxlPTxyZXBsYWNlYWJsZT5QUk9QRVJUSUVTX0ZJTEU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIHRoZSB2YWx1ZXMgZm9yIGltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyBhcyBhIEpTT04gZmlsZS4KKworICAgICAgICAgICAgIC1lIDxyZXBsYWNlYWJsZT5JTUFHRV9OQU1FPC9yZXBsYWNlYWJsZT4sIC0taW1hZ2UtbmFtZT08cmVwbGFjZWFibGU+SU1BR0VfTkFNRTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIGltYWdlIGZyb20gd2hpY2ggdG8gdXNlIHRoZSBhcnRpZmFjdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4pLgorCisgICAgICAgICAgICAgLXIgPHJlcGxhY2VhYmxlPlJPT1RGU19ESVI8L3JlcGxhY2VhYmxlPiwgLS1yb290ZnMtZGlyPTxyZXBsYWNlYWJsZT5ST09URlNfRElSPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aCB0byB0aGUgPGZpbGVuYW1lPi9yb290ZnM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgdG8gdXNlIGFzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ud2tzPC9maWxlbmFtZT4gcm9vdGZzIHNvdXJjZS4KKworICAgICAgICAgICAgIC1iIDxyZXBsYWNlYWJsZT5CT09USU1HX0RJUjwvcmVwbGFjZWFibGU+LCAtLWJvb3RpbWctZGlyPTxyZXBsYWNlYWJsZT5CT09USU1HX0RJUjwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBib290IGFydGlmYWN0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT4vRUZJPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPi9zeXNsaW51eDwvZmlsZW5hbWU+KSB0byB1c2UgYXMgdGhlIDxmaWxlbmFtZT4ud2tzPC9maWxlbmFtZT4gYm9vdGltZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS4KKworICAgICAgICAgICAgIC1rIDxyZXBsYWNlYWJsZT5LRVJORUxfRElSPC9yZXBsYWNlYWJsZT4sIC0ta2VybmVsLWRpcj08cmVwbGFjZWFibGU+S0VSTkVMX0RJUjwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBrZXJuZWwgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT4ud2tzPC9maWxlbmFtZT4gYm9vdCBpbWFnZS4KKworICAgICAgICAgICAgIC1uIDxyZXBsYWNlYWJsZT5OQVRJVkVfU1lTUk9PVDwvcmVwbGFjZWFibGU+LCAtLW5hdGl2ZS1zeXNyb290PTxyZXBsYWNlYWJsZT5OQVRJVkVfU1lTUk9PVDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHBhdGggdG8gdGhlIG5hdGl2ZSBzeXNyb290IGNvbnRhaW5pbmcgdGhlIHRvb2xzIHRvIHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJ1aWxkIHRoZSBpbWFnZS4KKworICAgICAgICAgICAgIC1zLCAtLXNraXAtYnVpbGQtY2hlY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa2lwcyB0aGUgYnVpbGQgY2hlY2suCisKKyAgICAgICAgICAgICAtRCwgLS1kZWJ1ZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dCBkZWJ1ZyBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgbmVlZCByb290IHByaXZpbGVnZXMgdG8gcnVuCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBJbiBmYWN0LCB5b3Ugc2hvdWxkIG5vdCBydW4gYXMgcm9vdCB3aGVuIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgdXRpbGl0eS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2Nvb2tlZC1tb2RlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+Q29va2VkIE1vZGU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBnZW5lcmFsIGZvcm0gb2YgdGhlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIHVzaW5nIENvb2tlZCBNb2RlIGlzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgd2ljIGNyZWF0ZSA8cmVwbGFjZWFibGU+a2lja3N0YXJ0X2ZpbGU8L3JlcGxhY2VhYmxlPiAtZSA8cmVwbGFjZWFibGU+aW1hZ2VfbmFtZTwvcmVwbGFjZWFibGU+CisKKyAgICAgICAgIFdoZXJlOgorCisgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPmtpY2tzdGFydF9maWxlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbiBPcGVuRW1iZWRkZWQga2lja3N0YXJ0IGZpbGUuIFlvdSBjYW4gcHJvdmlkZSB5b3VyIG93bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbSBmaWxlIG9yIHN1cHBsaWVkIGZpbGUuCisKKyAgICAgICAgICAgICA8cmVwbGFjZWFibGU+aW1hZ2VfbmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBpbWFnZSBidWlsdCB1c2luZyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgZm9ybSBpcyB0aGUgc2ltcGxlc3QgYW5kIG1vc3QgdXNlci1mcmllbmRseSwgYXMgaXQKKyAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgcmVxdWlyZSBzcGVjaWZ5aW5nIGFsbCBpbmRpdmlkdWFsIHBhcmFtZXRlcnMuCisgICAgICAgICAgICAgICAgICAgIEFsbCB5b3UgbmVlZCB0byBwcm92aWRlIGlzIHlvdXIgb3duCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ud2tzPC9maWxlbmFtZT4gZmlsZSBvciBvbmUgcHJvdmlkZWQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmctYS1wcm92aWRlZC1raWNrc3RhcnRfZmlsZSc+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgYW4gRXhpc3RpbmcgS2lja3N0YXJ0IEZpbGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHdhbnQgdG8gY3JlYXRlIHlvdXIgb3duCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi53a3M8L2ZpbGVuYW1lPiBmaWxlLCB5b3UgY2FuIHVzZSBhbiBleGlzdGluZworICAgICAgICAgICAgICAgIGZpbGUgcHJvdmlkZWQgYnkgdGhlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBpbnN0YWxsYXRpb24uCisgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBsaXN0IHRoZSBhdmFpbGFibGUgZmlsZXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHdpYyBsaXN0IGltYWdlcworICAgICBkaXJlY3RkaXNrIENyZWF0ZSBhICdwY2Jpb3MnIGRpcmVjdCBkaXNrIGltYWdlCisgICAgIG1rZWZpZGlzayBDcmVhdGUgYW4gRUZJIGRpc2sgaW1hZ2UKKyAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICBXaGVuIHlvdSB1c2UgYW4gZXhpc3RpbmcgZmlsZSwgeW91IGRvIG5vdCBoYXZlIHRvIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi53a3M8L2ZpbGVuYW1lPiBleHRlbnNpb24uCisgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBpbiBSYXcgTW9kZSB0aGF0IHVzZXMgdGhlCisgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kaXJlY3RkaXNrPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHdpYyBjcmVhdGUgZGlyZWN0ZGlzayAtciA8cmVwbGFjZWFibGU+cm9vdGZzX2RpcjwvcmVwbGFjZWFibGU+IC1iIDxyZXBsYWNlYWJsZT5ib290aW1nX2RpcjwvcmVwbGFjZWFibGU+IFwKKyAgICAgICAgICAgLWsgPHJlcGxhY2VhYmxlPmtlcm5lbF9kaXI8L3JlcGxhY2VhYmxlPiAtbiA8cmVwbGFjZWFibGU+bmF0aXZlX3N5c3Jvb3Q8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSGVyZSBhcmUgdGhlIGFjdHVhbCBwYXJ0aXRpb24gbGFuZ3VhZ2UgY29tbWFuZHMKKyAgICAgICAgICAgICAgICB1c2VkIGluIHRoZSA8ZmlsZW5hbWU+bWtlZmlkaXNrLndrczwvZmlsZW5hbWU+IGZpbGUgdG8gZ2VuZXJhdGUKKyAgICAgICAgICAgICAgICBhbiBpbWFnZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgc2hvcnQtZGVzY3JpcHRpb246IENyZWF0ZSBhbiBFRkkgZGlzayBpbWFnZQorICAgICAjIGxvbmctZGVzY3JpcHRpb246IENyZWF0ZXMgYSBwYXJ0aXRpb25lZCBFRkkgZGlzayBpbWFnZSB0aGF0IHRoZSB1c2VyCisgICAgICMgY2FuIGRpcmVjdGx5IGRkIHRvIGJvb3QgbWVkaWEuCisKKyAgICAgcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLWVmaSAtLW9uZGlzayBzZGEgLS1sYWJlbCBtc2RvcyAtLWFjdGl2ZSAtLWFsaWduIDEwMjQKKworICAgICBwYXJ0IC8gLS1zb3VyY2Ugcm9vdGZzIC0tb25kaXNrIHNkYSAtLWZzdHlwZT1leHQzIC0tbGFiZWwgcGxhdGZvcm0gLS1hbGlnbiAxMDI0CisKKyAgICAgcGFydCBzd2FwIC0tb25kaXNrIHNkYSAtLXNpemUgNDQgLS1sYWJlbCBzd2FwMSAtLWZzdHlwZT1zd2FwCisKKyAgICAgYm9vdGxvYWRlciAgLS10aW1lb3V0PTEwICAtLWFwcGVuZD0icm9vdHdhaXQgcm9vdGZzdHlwZT1leHQzIGNvbnNvbGU9dHR5UENIMCwxMTUyMDAgY29uc29sZT10dHkwIHZtYWxsb2M9MjU2TUIgc25kLWhkYS1pbnRlbC5lbmFibGVfbXNpPTAiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3dpYy11c2FnZS1leGFtcGxlcyc+CisgICAgICAgICAgICA8dGl0bGU+RXhhbXBsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgc2V2ZXJhbCBleGFtcGxlcyB0aGF0IHNob3cgaG93IHRvIHVzZQorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gdXRpbGl0eS4KKyAgICAgICAgICAgICAgICBBbGwgdGhlIGV4YW1wbGVzIGFzc3VtZSB0aGUgbGlzdCBvZiByZXF1aXJlbWVudHMgaW4gdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3dpYy1yZXF1aXJlbWVudHMnPlJlcXVpcmVtZW50czwvbGluaz4iIHNlY3Rpb24KKyAgICAgICAgICAgICAgICBoYXZlIGJlZW4gbWV0LgorICAgICAgICAgICAgICAgIFRoZSBleGFtcGxlcyBhc3N1bWUgdGhlIHByZXZpb3VzbHkgZ2VuZXJhdGVkIGltYWdlIGlzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nZ2VuZXJhdGUtYW4taW1hZ2UtdXNpbmctYS1wcm92aWRlZC1raWNrc3RhcnQtZmlsZSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkdlbmVyYXRlIGFuIEltYWdlIHVzaW5nIGFuIEV4aXN0aW5nIEtpY2tzdGFydCBGaWxlPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgcnVucyBpbiBDb29rZWQgTW9kZSBhbmQgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1rZWZpZGlzazwvZmlsZW5hbWU+IGtpY2tzdGFydCBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgd2ljIGNyZWF0ZSBta2VmaWRpc2sgLWUgY29yZS1pbWFnZS1taW5pbWFsCisgICAgIENoZWNraW5nIGJhc2ljIGJ1aWxkIGVudmlyb25tZW50Li4uCisgICAgIERvbmUuCisKKyAgICAgQ3JlYXRpbmcgaW1hZ2UocykuLi4KKworICAgICBJbmZvOiBUaGUgbmV3IGltYWdlKHMpIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgL3Zhci90bXAvd2ljL2J1aWxkL21rZWZpZGlzay0yMDEzMTAyMzA5NDYtc2RhLmRpcmVjdAorCisgICAgIFRoZSBmb2xsb3dpbmcgYnVpbGQgYXJ0aWZhY3RzIHdlcmUgdXNlZCB0byBjcmVhdGUgdGhlIGltYWdlKHMpOgorICAgICAgUk9PVEZTX0RJUjogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC93b3JrL21pbm5vdy1wb2t5LWxpbnV4L2NvcmUtaW1hZ2UtbWluaW1hbC8xLjAtcjAvcm9vdGZzCisgICAgICBCT09USU1HX0RJUjogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC93b3JrL21pbm5vdy1wb2t5LWxpbnV4L2NvcmUtaW1hZ2UtbWluaW1hbC8xLjAtcjAvY29yZS1pbWFnZS1taW5pbWFsLTEuMC9oZGRpbWcKKyAgICAgIEtFUk5FTF9ESVI6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvc3lzcm9vdHMvbWlubm93L3Vzci9zcmMva2VybmVsCisgICAgICBOQVRJVkVfU1lTUk9PVDogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgKKworCisgICAgIFRoZSBpbWFnZShzKSB3ZXJlIGNyZWF0ZWQgdXNpbmcgT0Uga2lja3N0YXJ0IGZpbGU6CisgICAgICAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2Uvc2NyaXB0cy9saWIvaW1hZ2UvY2FubmVkLXdrcy9ta2VmaWRpc2sud2tzCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIHNob3dzIHRoZSBlYXNpZXN0IHdheSB0byBjcmVhdGUgYW4gaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgYnkgcnVubmluZyBpbiBDb29rZWQgTW9kZSBhbmQgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZTwvZmlsZW5hbWU+IG9wdGlvbiB3aXRoIGFuIGV4aXN0aW5nIGtpY2tzdGFydAorICAgICAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgICAgICBBbGwgdGhhdCBpcyBuZWNlc3NhcnkgaXMgdG8gc3BlY2lmeSB0aGUgaW1hZ2UgdXNlZCB0bworICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZSB0aGUgYXJ0aWZhY3RzLgorICAgICAgICAgICAgICAgICAgICBZb3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gbmVlZHMgdG8gaGF2ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBzZXQgdG8gdGhlIG1hY2hpbmUgeW91IGFyZSB1c2luZywgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICAgICAgIm1pbm5vdyIgaW4gdGhpcyBleGFtcGxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgb3V0cHV0IHNwZWNpZmllcyB0aGUgZXhhY3QgY3JlYXRlZCBhcyB3ZWxsIGFzIHdoZXJlCisgICAgICAgICAgICAgICAgICAgIGl0IHdhcyBjcmVhdGVkLgorICAgICAgICAgICAgICAgICAgICBUaGUgb3V0cHV0IGFsc28gbmFtZXMgdGhlIGFydGlmYWN0cyB1c2VkIGFuZCB0aGUgZXhhY3QKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi53a3M8L2ZpbGVuYW1lPiBzY3JpcHQgdGhhdCB3YXMgdXNlZCB0byBnZW5lcmF0ZQorICAgICAgICAgICAgICAgICAgICB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBhbHdheXMgdmVyaWZ5IHRoZSBkZXRhaWxzIHByb3ZpZGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbWFnZSB3YXMgaW5kZWVkIGNyZWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0bHkgYXMgZXhwZWN0ZWQuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29udGludWluZyB3aXRoIHRoZSBleGFtcGxlLCB5b3UgY2FuIG5vdyBkaXJlY3RseQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGQ8L2ZpbGVuYW1lPiB0aGUgaW1hZ2UgdG8gYSBVU0Igc3RpY2ssIG9yCisgICAgICAgICAgICAgICAgICAgIHdoYXRldmVyIG1lZGlhIGZvciB3aGljaCB5b3UgYnVpbHQgeW91ciBpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgYW5kIGJvb3QgdGhlIHJlc3VsdGluZyBtZWRpYToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8gZGQgaWY9L3Zhci90bXAvd2ljL2J1aWxkL21rZWZpZGlzay0yMDEzMTAyMzA5NDYtc2RhLmRpcmVjdCBvZj0vZGV2L3NkYgorICAgICBbc3Vkb10gcGFzc3dvcmQgZm9yIHRyejoKKyAgICAgMTgyMjc0KzAgcmVjb3JkcyBpbgorICAgICAxODIyNzQrMCByZWNvcmRzIG91dAorICAgICA5MzMyNDI4OCBieXRlcyAoOTMgTUIpIGNvcGllZCwgMTQuNDc3NyBzLCA2LjQgTUIvcworICAgICBbdHJ6QGVtcGFuYWRhIH5dJCBzdWRvIGVqZWN0IC9kZXYvc2RiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1hLW1vZGlmaWVkLWtpY2tzdGFydC1maWxlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+VXNpbmcgYSBNb2RpZmllZCBLaWNrc3RhcnQgRmlsZTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gaW1hZ2UgY3JlYXRpb24gaXMgZHJpdmVuCisgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBraWNrc3RhcnQgZmlsZSwgaXQgaXMgZWFzeSB0byBhZmZlY3QgaW1hZ2UgY3JlYXRpb24KKyAgICAgICAgICAgICAgICAgICAgYnkgY2hhbmdpbmcgdGhlIHBhcmFtZXRlcnMgaW4gdGhlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbmV4dCBleGFtcGxlIGRlbW9uc3RyYXRlcyB0aGF0IHRocm91Z2ggbW9kaWZpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSA8ZmlsZW5hbWU+ZGlyZWN0ZGlzazwvZmlsZW5hbWU+IGtpY2tzdGFydCBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQgZWFybGllciwgeW91IGNhbiB1c2UgdGhlIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpYyBsaXN0IGltYWdlczwvZmlsZW5hbWU+IHRvIHNob3cgdGhlIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgb2YgZXhpc3Rpbmcga2lja3N0YXJ0IGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZXNlIGZpbGVzIHJlc2lkZSBpcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2NyaXB0cy9saWIvaW1hZ2UvY2FubmVkLXdrcy88L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSB0aGUgYXZhaWxhYmxlIGZpbGVzIHJlc2lkZSBpbiB0aGlzIGRpcmVjdG9yeSwgeW91CisgICAgICAgICAgICAgICAgICAgIGNhbiBjcmVhdGUgYW5kIGFkZCB5b3VyIG93biBjdXN0b20gZmlsZXMgdG8gdGhlIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgU3Vic2VxdWVudCB1c2Ugb2YgdGhlIDxmaWxlbmFtZT53aWMgbGlzdCBpbWFnZXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kIHdvdWxkIHRoZW4gaW5jbHVkZSB5b3VyIGtpY2tzdGFydCBmaWxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgZXhpc3RpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpcmVjdGRpc2s8L2ZpbGVuYW1lPiBmaWxlIGFscmVhZHkgZG9lcyBtb3N0CisgICAgICAgICAgICAgICAgICAgIG9mIHdoYXQgaXMgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBmb3IgdGhlIGhhcmR3YXJlIGluIHRoaXMgZXhhbXBsZSwgdGhlIGltYWdlIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBib290IGZyb20gPGZpbGVuYW1lPnNkYjwvZmlsZW5hbWU+IGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNkYTwvZmlsZW5hbWU+LCB3aGljaCBpcyB3aGF0IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlyZWN0ZGlzazwvZmlsZW5hbWU+IGtpY2tzdGFydCBmaWxlIHVzZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBleGFtcGxlIGJlZ2lucyBieSBtYWtpbmcgYSBjb3B5IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlyZWN0ZGlzay53a3M8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2NyaXB0cy9saWIvaW1hZ2UvY2FubmVkLXdrczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBhbmQgdGhlbiBjaGFuZ2luZyB0aGUgbGluZXMgdGhhdCBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgZGlzayBmcm9tIHdoaWNoIHRvIGJvb3QuCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjcCAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2Uvc2NyaXB0cy9saWIvaW1hZ2UvY2FubmVkLXdrcy9kaXJlY3RkaXNrLndrcyBcCisgICAgICAgICAgL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL3NjcmlwdHMvbGliL2ltYWdlL2Nhbm5lZC13a3MvZGlyZWN0ZGlza3NkYi53a3MKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBOZXh0LCB0aGUgZXhhbXBsZSBtb2RpZmllcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpcmVjdGRpc2tzZGIud2tzPC9maWxlbmFtZT4gZmlsZSBhbmQgY2hhbmdlcyBhbGwKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VzIG9mICI8ZmlsZW5hbWU+LS1vbmRpc2sgc2RhPC9maWxlbmFtZT4iCisgICAgICAgICAgICAgICAgICAgIHRvICI8ZmlsZW5hbWU+LS1vbmRpc2sgc2RiPC9maWxlbmFtZT4iLgorICAgICAgICAgICAgICAgICAgICBUaGUgZXhhbXBsZSBjaGFuZ2VzIHRoZSBmb2xsb3dpbmcgdHdvIGxpbmVzIGFuZCBsZWF2ZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZyBsaW5lcyB1bnRvdWNoZWQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLXBjYmlvcyAtLW9uZGlzayBzZGIgLS1sYWJlbCBib290IC0tYWN0aXZlIC0tYWxpZ24gMTAyNAorICAgICBwYXJ0IC8gLS1zb3VyY2Ugcm9vdGZzIC0tb25kaXNrIHNkYiAtLWZzdHlwZT1leHQzIC0tbGFiZWwgcGxhdGZvcm0gLS1hbGlnbiAxMDI0CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgbGluZXMgYXJlIGNoYW5nZWQsIHRoZSBleGFtcGxlIGdlbmVyYXRlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpcmVjdGRpc2tzZGI8L2ZpbGVuYW1lPiBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNvbW1hbmQgcG9pbnRzIHRoZSBwcm9jZXNzIGF0IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gYXJ0aWZhY3RzIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgTmV4dCBVbml0IG9mIENvbXB1dGluZyAobnVjKQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgd2ljIGNyZWF0ZSBkaXJlY3RkaXNrc2RiIC1lIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICBDaGVja2luZyBiYXNpYyBidWlsZCBlbnZpcm9ubWVudC4uLgorICAgICBEb25lLgorCisgICAgIENyZWF0aW5nIGltYWdlKHMpLi4uCisKKyAgICAgSW5mbzogVGhlIG5ldyBpbWFnZShzKSBjYW4gYmUgZm91bmQgaGVyZToKKyAgICAgIC92YXIvdG1wL3dpYy9idWlsZC9kaXJlY3RkaXNrc2RiLTIwMTMxMDIzMTEzMS1zZGIuZGlyZWN0CisKKyAgICAgVGhlIGZvbGxvd2luZyBidWlsZCBhcnRpZmFjdHMgd2VyZSB1c2VkIHRvIGNyZWF0ZSB0aGUgaW1hZ2Uocyk6CisgICAgICBST09URlNfRElSOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3dvcmsvbnVjLXBva3ktbGludXgvY29yZS1pbWFnZS1taW5pbWFsLzEuMC1yMC9yb290ZnMKKyAgICAgIEJPT1RJTUdfRElSOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3N5c3Jvb3RzL251Yy91c3Ivc2hhcmUKKyAgICAgIEtFUk5FTF9ESVI6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvc3lzcm9vdHMvbnVjL3Vzci9zcmMva2VybmVsCisgICAgICBOQVRJVkVfU1lTUk9PVDogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgKKworCisgICAgIFRoZSBpbWFnZShzKSB3ZXJlIGNyZWF0ZWQgdXNpbmcgT0Uga2lja3N0YXJ0IGZpbGU6CisgICAgICAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2Uvc2NyaXB0cy9saWIvaW1hZ2UvY2FubmVkLXdrcy9kaXJlY3RkaXNrc2RiLndrcworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIENvbnRpbnVpbmcgd2l0aCB0aGUgZXhhbXBsZSwgeW91IGNhbiBub3cgZGlyZWN0bHkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRkPC9maWxlbmFtZT4gdGhlIGltYWdlIHRvIGEgVVNCIHN0aWNrLCBvcgorICAgICAgICAgICAgICAgICAgICB3aGF0ZXZlciBtZWRpYSBmb3Igd2hpY2ggeW91IGJ1aWx0IHlvdXIgaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgIGFuZCBib290IHRoZSByZXN1bHRpbmcgbWVkaWE6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIGRkIGlmPS92YXIvdG1wL3dpYy9idWlsZC9kaXJlY3RkaXNrc2RiLTIwMTMxMDIzMTEzMS1zZGIuZGlyZWN0IG9mPS9kZXYvc2RiCisgICAgIDg2MDE4KzAgcmVjb3JkcyBpbgorICAgICA4NjAxOCswIHJlY29yZHMgb3V0CisgICAgIDQ0MDQxMjE2IGJ5dGVzICg0NCBNQikgY29waWVkLCAxMy4wNzM0IHMsIDMuNCBNQi9zCisgICAgIFt0cnpAZW1wYW5hZGEgdG1wXSQgc3VkbyBlamVjdCAvZGV2L3NkYgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmctYW4taW1hZ2UtYmFzZWQtb24tY29yZS1pbWFnZS1taW5pbWFsLWFuZC1jcm93bmJheS1ub2VtZ2QnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyBhbiBJbWFnZSBCYXNlZCBvbiA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5jcm93bmJheS1ub2VtZ2Q8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIGNyZWF0ZXMgYW4gaW1hZ2UgYmFzZWQgb24KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+IGFuZCBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jcm93bmJheS1ub2VtZ2Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHRoYXQgd29ya3MgcmlnaHQgb3V0IG9mIHRoZSBib3guCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB3aWMgY3JlYXRlIGRpcmVjdGRpc2sgLWUgY29yZS1pbWFnZS1taW5pbWFsCisKKyAgICAgQ2hlY2tpbmcgYmFzaWMgYnVpbGQgZW52aXJvbm1lbnQuLi4KKyAgICAgRG9uZS4KKworICAgICBDcmVhdGluZyBpbWFnZShzKS4uLgorCisgICAgIEluZm86IFRoZSBuZXcgaW1hZ2UocykgY2FuIGJlIGZvdW5kIGhlcmU6CisgICAgICAvdmFyL3RtcC93aWMvYnVpbGQvZGlyZWN0ZGlzay0yMDEzMDkyNTIzNTAtc2RhLmRpcmVjdAorCisgICAgIFRoZSBmb2xsb3dpbmcgYnVpbGQgYXJ0aWZhY3RzIHdlcmUgdXNlZCB0byBjcmVhdGUgdGhlIGltYWdlKHMpOgorCisgICAgIFJPT1RGU19ESVI6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvd29yay9jcm93bmJheV9ub2VtZ2QtcG9reS1saW51eC9jb3JlLWltYWdlLW1pbmltYWwvMS4wLXIwL3Jvb3RmcworICAgICBCT09USU1HX0RJUjogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC9zeXNyb290cy9jcm93bmJheS1ub2VtZ2QvdXNyL3NoYXJlCisgICAgIEtFUk5FTF9ESVI6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvc3lzcm9vdHMvY3Jvd25iYXktbm9lbWdkL3Vzci9zcmMva2VybmVsCisgICAgIE5BVElWRV9TWVNST09UOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3N5c3Jvb3RzL2Nyb3duYmF5LW5vZW1nZC91c3Ivc3JjL2tlcm5lbAorCisgICAgIFRoZSBpbWFnZShzKSB3ZXJlIGNyZWF0ZWQgdXNpbmcgT0Uga2lja3N0YXJ0IGZpbGU6CisgICAgICAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2Uvc2NyaXB0cy9saWIvaW1hZ2UvY2FubmVkLXdrcy9kaXJlY3RkaXNrLndrcworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmctYS1tb2RpZmllZC1raWNrc3RhcnQtZmlsZS1hbmQtcnVubmluZy1pbi1yYXctbW9kZSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPlVzaW5nIGEgTW9kaWZpZWQgS2lja3N0YXJ0IEZpbGUgYW5kIFJ1bm5pbmcgaW4gUmF3IE1vZGU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgbmV4dCBleGFtcGxlIG1hbnVhbGx5IHNwZWNpZmllcyBlYWNoIGJ1aWxkIGFydGlmYWN0CisgICAgICAgICAgICAgICAgICAgIChydW5zIGluIFJhdyBNb2RlKSBhbmQgdXNlcyBhIG1vZGlmaWVkIGtpY2tzdGFydCBmaWxlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZXhhbXBsZSBhbHNvIHVzZXMgdGhlIDxmaWxlbmFtZT4tbzwvZmlsZW5hbWU+IG9wdGlvbgorICAgICAgICAgICAgICAgICAgICB0byBjYXVzZSA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gdG8gY3JlYXRlIHRoZSBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgc29tZXdoZXJlIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi92YXIvdG1wL3dpYzwvZmlsZW5hbWU+IGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHdpYyBjcmVhdGUgfi90ZXN0LndrcyAtbyAvaG9tZS90cnovdGVzdHdpYyAtLXJvb3Rmcy1kaXIgXAorICAgICAgICAgIC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvd29yay9jcm93bmJheV9ub2VtZ2QtcG9reS1saW51eC9jb3JlLWltYWdlLW1pbmltYWwvMS4wLXIwL3Jvb3RmcyBcCisgICAgICAgICAgLS1ib290aW1nLWRpciAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3N5c3Jvb3RzL2Nyb3duYmF5LW5vZW1nZC91c3Ivc2hhcmUgXAorICAgICAgICAgIC0ta2VybmVsLWRpciAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3N5c3Jvb3RzL2Nyb3duYmF5LW5vZW1nZC91c3Ivc3JjL2tlcm5lbCBcCisgICAgICAgICAgLS1uYXRpdmUtc3lzcm9vdCAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eAorCisgICAgIENyZWF0aW5nIGltYWdlKHMpLi4uCisKKyAgICAgSW5mbzogVGhlIG5ldyBpbWFnZShzKSBjYW4gYmUgZm91bmQgaGVyZToKKyAgICAgIC9ob21lL3Ryei90ZXN0d2ljL2J1aWxkL3Rlc3QtMjAxMzA5MjYwMDMyLXNkYS5kaXJlY3QKKworICAgICBUaGUgZm9sbG93aW5nIGJ1aWxkIGFydGlmYWN0cyB3ZXJlIHVzZWQgdG8gY3JlYXRlIHRoZSBpbWFnZShzKToKKworICAgICBST09URlNfRElSOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3dvcmsvY3Jvd25iYXlfbm9lbWdkLXBva3ktbGludXgvY29yZS1pbWFnZS1taW5pbWFsLzEuMC1yMC9yb290ZnMKKyAgICAgQk9PVElNR19ESVI6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvc3lzcm9vdHMvY3Jvd25iYXktbm9lbWdkL3Vzci9zaGFyZQorICAgICBLRVJORUxfRElSOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3N5c3Jvb3RzL2Nyb3duYmF5LW5vZW1nZC91c3Ivc3JjL2tlcm5lbAorICAgICBOQVRJVkVfU1lTUk9PVDogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC9zeXNyb290cy9jcm93bmJheS1ub2VtZ2QvdXNyL3NyYy9rZXJuZWwKKworICAgICBUaGUgaW1hZ2Uocykgd2VyZSBjcmVhdGVkIHVzaW5nIE9FIGtpY2tzdGFydCBmaWxlOgorICAgICAgL2hvbWUvdHJ6L3Rlc3Qud2tzCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHRoaXMgZXhhbXBsZSwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBkaWQgbm90IGhhdmUgdG8gYmUgc3BlY2lmaWVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgc2luY2UgdGhlIGFydGlmYWN0IGlzCisgICAgICAgICAgICAgICAgICAgIG1hbnVhbGx5IHNwZWNpZmllZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nb3BlbmVtYmVkZGVkLWtpY2tzdGFydC1wbHVnaW5zJz4KKyAgICAgICAgICAgIDx0aXRsZT5QbHVnaW5zPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisJICAgICAgICAgICAgUGx1Z2lucyBhbGxvdyA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gZnVuY3Rpb25hbGl0eSB0bworCSAgICAgICAgICAgIGJlIGV4dGVuZGVkIGFuZCBzcGVjaWFsaXplZCBieSB1c2Vycy4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZG9jdW1lbnRzIHRoZSBwbHVnaW4gaW50ZXJmYWNlLCB3aGljaCBpcworICAgICAgICAgICAgICAgIGN1cnJlbnRseSByZXN0cmljdGVkIHRvIHNvdXJjZSBwbHVnaW5zLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKwkgICAgICAgICAgICBTb3VyY2UgcGx1Z2lucyBwcm92aWRlIGEgbWVjaGFuaXNtIHRvIGN1c3RvbWl6ZQorCSAgICAgICAgICAgIHZhcmlvdXMgYXNwZWN0cyBvZiB0aGUgaW1hZ2UgZ2VuZXJhdGlvbiBwcm9jZXNzIGluCisJICAgICAgICAgICAgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+LCBtYWlubHkgdGhlIGNvbnRlbnRzIG9mCisJICAgICAgICAgICAgcGFydGl0aW9ucy4KKwkgICAgICAgICAgICBUaGUgcGx1Z2lucyBwcm92aWRlIGEgbWVjaGFuaXNtIGZvciBtYXBwaW5nIHZhbHVlcworCSAgICAgICAgICAgIHNwZWNpZmllZCBpbiA8ZmlsZW5hbWU+LndrczwvZmlsZW5hbWU+IGZpbGVzIHVzaW5nIHRoZQorCSAgICAgICAgICAgIDxmaWxlbmFtZT4tLXNvdXJjZTwvZmlsZW5hbWU+IGtleXdvcmQgdG8gYQorICAgICAgICAgICAgICAgIHBhcnRpY3VsYXIgcGx1Z2luIGltcGxlbWVudGF0aW9uIHRoYXQgcG9wdWxhdGVzIGEKKyAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHBhcnRpdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisJICAgICAgICAgICAgQSBzb3VyY2UgcGx1Z2luIGlzIGNyZWF0ZWQgYXMgYSBzdWJjbGFzcyBvZgorCSAgICAgICAgICAgIDxmaWxlbmFtZT5Tb3VyY2VQbHVnaW48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgcGx1Z2luIGZpbGUgY29udGFpbmluZyBpdCBpcyBhZGRlZCB0bworCSAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzL2xpYi9taWMvcGx1Z2lucy9zb3VyY2UvPC9maWxlbmFtZT4gdG8KKwkgICAgICAgICAgICBtYWtlIHRoZSBwbHVnaW4gaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlIHRvIHRoZQorCSAgICAgICAgICAgIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlCisJICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHMvbGliL21pYy9wbHVnaW5iYXNlLnB5PC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorCSAgICAgICAgICAgIFNvdXJjZSBwbHVnaW5zIGNhbiBhbHNvIGJlIGltcGxlbWVudGVkIGFuZCBhZGRlZCBieQorCSAgICAgICAgICAgIGV4dGVybmFsIGxheWVycy4KKyAgICAgICAgICAgICAgICBBcyBzdWNoLCBhbnkgcGx1Z2lucyBmb3VuZCBpbiBhCisJICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHMvbGliL21pYy9wbHVnaW5zL3NvdXJjZS88L2ZpbGVuYW1lPgorCSAgICAgICAgICAgIGRpcmVjdG9yeSBpbiBhbiBleHRlcm5hbCBsYXllciBhcmUgYWxzbyBtYWRlCisJICAgICAgICAgICAgYXZhaWxhYmxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKwkgICAgICAgICAgICBXaGVuIHRoZSA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gaW1wbGVtZW50YXRpb24gbmVlZHMKKwkgICAgICAgICAgICB0byBpbnZva2UgYSBwYXJ0aXRpb24tc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIGl0IGxvb2tzCisJICAgICAgICAgICAgZm9yIHRoZSBwbHVnaW4gdGhhdCBoYXMgdGhlIHNhbWUgbmFtZSBhcyB0aGUKKwkgICAgICAgICAgICA8ZmlsZW5hbWU+LS1zb3VyY2U8L2ZpbGVuYW1lPiBwYXJhbWV0ZXIgZ2l2ZW4gdG8KKyAgICAgICAgICAgICAgICB0aGF0IHBhcnRpdGlvbi4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIHBhcnRpdGlvbiBpcyBzZXQgdXAgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHBhcnQgL2Jvb3QgLS1zb3VyY2UgYm9vdGltZy1wY2Jpb3MgICAuLi4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisJICAgICAgICAgICAgVGhlIG1ldGhvZHMgZGVmaW5lZCBhcyBjbGFzcyBtZW1iZXJzIG9mIHRoZSBwbHVnaW4KKwkgICAgICAgICAgICBoYXZpbmcgdGhlIG1hdGNoaW5nIDxmaWxlbmFtZT5ib290aW1nLXBjYmlvcy5uYW1lPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjbGFzcyBtZW1iZXIgYXJlIHVzZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorCSAgICAgICAgICAgIFRvIGJlIG1vcmUgY29uY3JldGUsIGhlcmUgaXMgdGhlIHBsdWdpbiBkZWZpbml0aW9uIHRoYXQKKwkgICAgICAgICAgICBtYXRjaGVzIGEKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LS1zb3VyY2UgYm9vdGltZy1wY2Jpb3M8L2ZpbGVuYW1lPiB1c2FnZSwKKyAgICAgICAgICAgICAgICBhbG9uZyB3aXRoIGFuIGV4YW1wbGUKKwkgICAgICAgICAgICBtZXRob2QgY2FsbGVkIGJ5IHRoZSA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gaW1wbGVtZW50YXRpb24KKyAgICAgICAgICAgICAgICB3aGVuIGl0IG5lZWRzIHRvIGludm9rZSBhbiBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYworCSAgICAgICAgICAgIHBhcnRpdGlvbi1wcmVwYXJhdGlvbiBmdW5jdGlvbjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgY2xhc3MgQm9vdGltZ1BjYmlvc1BsdWdpbihTb3VyY2VQbHVnaW4pOgorICAgICAgICBuYW1lID0gJ2Jvb3RpbWctcGNiaW9zJworCisgICAgQGNsYXNzbWV0aG9kCisgICAgICAgIGRlZiBkb19wcmVwYXJlX3BhcnRpdGlvbihzZWxmLCBwYXJ0LCAuLi4pCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorCSAgICAgICAgICAgIElmIHRoZSBzdWJjbGFzcyBpdHNlbGYgZG9lcyBub3QgaW1wbGVtZW50IGEgZnVuY3Rpb24sIGEKKwkgICAgICAgICAgICBkZWZhdWx0IHZlcnNpb24gaW4gYSBzdXBlcmNsYXNzIGlzIGxvY2F0ZWQgYW5kCisJICAgICAgICAgICAgdXNlZCwgd2hpY2ggaXMgd2h5IGFsbCBwbHVnaW5zIG11c3QgYmUgZGVyaXZlZCBmcm9tCisJICAgICAgICAgICAgPGZpbGVuYW1lPlNvdXJjZVBsdWdpbjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKwkgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlNvdXJjZVBsdWdpbjwvZmlsZW5hbWU+IGNsYXNzIGRlZmluZXMgdGhlCisJICAgICAgICAgICAgZm9sbG93aW5nIG1ldGhvZHMsIHdoaWNoIGlzIHRoZSBjdXJyZW50IHNldCBvZiBtZXRob2RzCisJICAgICAgICAgICAgdGhhdCBjYW4gYmUgaW1wbGVtZW50ZWQgb3Igb3ZlcnJpZGRlbiBieQorCSAgICAgICAgICAgIDxmaWxlbmFtZT4tLXNvdXJjZTwvZmlsZW5hbWU+IHBsdWdpbnMuCisgICAgICAgICAgICAgICAgQW55IG1ldGhvZHMgbm90IGltcGxlbWVudGVkIGJ5IGEKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U291cmNlUGx1Z2luPC9maWxlbmFtZT4gc3ViY2xhc3MgaW5oZXJpdCB0aGUKKyAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMgcHJlc2VudCBpbiB0aGUKKwkgICAgICAgICAgICA8ZmlsZW5hbWU+U291cmNlUGx1Z2luPC9maWxlbmFtZT4gY2xhc3MuCisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKwkgICAgICAgICAgICA8ZmlsZW5hbWU+U291cmNlUGx1Z2luPC9maWxlbmFtZT4gc291cmNlIGZvciBkZXRhaWxzOgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kb19wcmVwYXJlX3BhcnRpdGlvbigpPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIENhbGxlZCB0byBkbyB0aGUgYWN0dWFsIGNvbnRlbnQgcG9wdWxhdGlvbiBmb3IgYQorICAgICAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHRoZSBtZXRob2QgcHJlcGFyZXMgdGhlIGZpbmFsCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb24gaW1hZ2UgdGhhdCBpcyBpbmNvcnBvcmF0ZWQgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc2sgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlX3BhcnRpdGlvbigpPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIENhbGxlZCBiZWZvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wcmVwYXJlX3BhcnRpdGlvbigpPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyB0eXBpY2FsbHkgdXNlZCB0byBjcmVhdGUgY3VzdG9tCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIGZvciBhIHBhcnRpdGlvbiAoZS5nLiBzeXNsaW51eCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgZ3J1YiBjb25maWd1cmF0aW9uIGZpbGVzKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kb19pbnN0YWxsX2Rpc2soKTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBDYWxsZWQgYWZ0ZXIgYWxsIHBhcnRpdGlvbnMgaGF2ZSBiZWVuIHByZXBhcmVkIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgYXNzZW1ibGVkIGludG8gYSBkaXNrIGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRob2QgcHJvdmlkZXMgYSBob29rIHRvIGFsbG93IGZpbmFsaXphdGlvbiBvZiBhCisgICAgICAgICAgICAgICAgICAgICAgICBkaXNrIGltYWdlLCAoZS5nLiB3cml0aW5nIGFuIE1CUikuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZG9fc3RhZ2VfcGFydGl0aW9uKCk8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lhbCBjb250ZW50LXN0YWdpbmcgaG9vayBjYWxsZWQgYmVmb3JlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcHJlcGFyZV9wYXJ0aXRpb24oKTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRob2QgaXMgbm9ybWFsbHkgZW1wdHkuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VHlwaWNhbGx5LCBhIHBhcnRpdGlvbiBqdXN0IHVzZXMgdGhlIHBhc3NlZC1pbgorICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyAoZS5nLiB0aGUgdW5tb2RpZmllZCB2YWx1ZSBvZgorCQkgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJvb3RpbWdfZGlyPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaW4gc29tZSBjYXNlcyB0aGluZ3MgbWlnaHQgbmVlZCB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgbW9yZSB0YWlsb3JlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGNlcnRhaW4gZmlsZXMgbWlnaHQgYWRkaXRpb25hbGx5CisgICAgICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGJlIHRha2VuIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ib290aW1nX2RpciArIC9ib290PC9maWxlbmFtZT4uCisJCSAgICAgICAgICAgICAgICBUaGlzIGhvb2sgYWxsb3dzIHRob3NlIGZpbGVzIHRvIGJlIHN0YWdlZCBpbiBhCisJCSAgICAgICAgICAgICAgICBjdXN0b21pemVkIGZhc2hpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2V0X2JpdGJha2VfdmFyKCk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93cyB5b3UgdG8gYWNjZXNzIG5vbi1zdGFuZGFyZCB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHlvdSBtaWdodCB3YW50IHRvIHVzZSBmb3IgdGhpcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNjaGVtZSBpcyBleHRlbnNpYmxlLgorICAgICAgICAgICAgICAgIEFkZGluZyBtb3JlIGhvb2tzIGlzIGEgc2ltcGxlIG1hdHRlciBvZiBhZGRpbmcgbW9yZQorICAgICAgICAgICAgICAgIHBsdWdpbiBtZXRob2RzIHRvIDxmaWxlbmFtZT5Tb3VyY2VQbHVnaW48L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICBkZXJpdmVkIGNsYXNzZXMuCisgICAgICAgICAgICAgICAgVGhlIGNvZGUgdGhhdCB0aGVuIG5lZWRzIHRvIGNhbGwgdGhlIHBsdWdpbiBtZXRob2RzIHVzZXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGx1Z2luLmdldF9zb3VyY2VfcGx1Z2luX21ldGhvZHMoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdG8gZmluZCB0aGUgbWV0aG9kIG9yIG1ldGhvZHMgbmVlZGVkIGJ5IHRoZSBjYWxsLgorICAgICAgICAgICAgICAgIFJldHJpZXZhbCBvZiB0aG9zZSBtZXRob2RzIGlzIGFjY29tcGxpc2hlZAorICAgICAgICAgICAgICAgIGJ5IGZpbGxpbmcgdXAgYSBkaWN0IHdpdGgga2V5cworICAgICAgICAgICAgICAgIGNvbnRhaW5pbmcgdGhlIG1ldGhvZCBuYW1lcyBvZiBpbnRlcmVzdC4KKyAgICAgICAgICAgICAgICBPbiBzdWNjZXNzLCB0aGVzZSB3aWxsIGJlIGZpbGxlZCBpbiB3aXRoIHRoZSBhY3R1YWwKKyAgICAgICAgICAgICAgICBtZXRob2RzLgorICAgICAgICAgICAgICAgIFBsZWFzZSBzZWUgdGhlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIGZvciBleGFtcGxlcyBhbmQgZGV0YWlscy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdvcGVuZW1iZWRkZWQta2lja3N0YXJ0LXdrcy1yZWZlcmVuY2UnPgorICAgICAgICAgICAgPHRpdGxlPk9wZW5FbWJlZGRlZCBLaWNrc3RhcnQgKC53a3MpIFJlZmVyZW5jZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBjdXJyZW50IDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cworICAgICAgICAgICAgICAgIG9ubHkgdGhlIGJhc2ljIGtpY2tzdGFydCBwYXJ0aXRpb25pbmcgY29tbWFuZHM6CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhcnRpdGlvbjwvZmlsZW5hbWU+IChvciA8ZmlsZW5hbWU+cGFydDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZm9yIHNob3J0KSBhbmQgPGZpbGVuYW1lPmJvb3Rsb2FkZXI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRnV0dXJlIHVwZGF0ZXMgd2lsbCBpbXBsZW1lbnQgbW9yZSBjb21tYW5kcyBhbmQgb3B0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHVzZSBhbnl0aGluZyB0aGF0IGlzIG5vdCBzcGVjaWZpY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkLCByZXN1bHRzIGNhbiBiZSB1bnByZWRpY3RhYmxlLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qgb2YgdGhlIGNvbW1hbmRzLCB0aGVpciBzeW50YXgsCisgICAgICAgICAgICAgICAgYW5kIG1lYW5pbmdzLgorICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kcyBhcmUgYmFzZWQgb24gdGhlIEZlZG9yYQorICAgICAgICAgICAgICAgIGtpY2tzdGFydCB2ZXJzaW9ucyBidXQgd2l0aCBtb2RpZmljYXRpb25zIHRvCisgICAgICAgICAgICAgICAgcmVmbGVjdCA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gY2FwYWJpbGl0aWVzLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VlIHRoZSBvcmlnaW5hbCBkb2N1bWVudGF0aW9uIGZvciB0aG9zZSBjb21tYW5kcworICAgICAgICAgICAgICAgIGF0IHRoZSBmb2xsb3dpbmcgbGlua3M6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvQW5hY29uZGEvS2lja3N0YXJ0I3BhcnRfb3JfcGFydGl0aW9uJz5odHRwOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9BbmFjb25kYS9LaWNrc3RhcnQjcGFydF9vcl9wYXJ0aXRpb248L3VsaW5rPgorCQkJICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93aWtpL0FuYWNvbmRhL0tpY2tzdGFydCNib290bG9hZGVyJz5odHRwOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9BbmFjb25kYS9LaWNrc3RhcnQjYm9vdGxvYWRlcjwvdWxpbms+CisJCQkgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbW1hbmQtcGFydC1vci1wYXJ0aXRpb24nPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Db21tYW5kOiBwYXJ0IG9yIHBhcnRpdGlvbjwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgY3JlYXRlcyBhIHBhcnRpdGlvbiBvbiB0aGUgc3lzdGVtIGFuZCB1c2VzIHRoZQorICAgICAgICAgICAgICAgIGZvbGxvd2luZyBzeW50YXg6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcGFydCA8cmVwbGFjZWFibGU+bW50cG9pbnQ8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPm1udHBvaW50PC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyB3aGVyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uIHdpbGwgYmUgbW91bnRlZCBhbmQgbXVzdCBiZSBvZiBvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBmb3JtczoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+LzxyZXBsYWNlYWJsZT5wYXRoPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgPGZpbGVuYW1lPi88L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3VzcjwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2hvbWU8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5zd2FwPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHBhcnRpdGlvbiB3aWxsIGJlIHVzZWQgYXMgc3dhcCBzcGFjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgdGhlIHN1cHBvcnRlZCBvcHRpb25zOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+LS1zaXplPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWluaW11bSBwYXJ0aXRpb24gc2l6ZSBpbiBNQnl0ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmeSBhbiBpbnRlZ2VyIHZhbHVlIHN1Y2ggYXMgNTAwLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvIG5vdCBhcHBlbmQgdGhlIG51bWJlciB3aXRoICJNQiIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBuZWVkIHRoaXMgb3B0aW9uIGlmIHlvdSB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LS1zb3VyY2U8L2ZpbGVuYW1lPi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPi0tc291cmNlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBpcyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+LXNwZWNpZmljIG9wdGlvbiB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMgdGhlIHNvdXJjZSBvZiB0aGUgZGF0YSB0aGF0IHBvcHVsYXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwYXJ0aXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1vc3QgY29tbW9uIHZhbHVlIGZvciB0aGlzIG9wdGlvbiBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyb290ZnMiLCBidXQgeW91IGNhbiB1c2UgYW55IHZhbHVlIHRoYXQgbWFwcyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgdmFsaWQgc291cmNlIHBsdWdpbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIHNvdXJjZSBwbHVnaW5zLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J29wZW5lbWJlZGRlZC1raWNrc3RhcnQtcGx1Z2lucyc+UGx1Z2luczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tLXNvdXJjZSByb290ZnM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gY3JlYXRlcyBhIHBhcnRpdGlvbiBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhcmdlIGFzIG5lZWRlZCBhbmQgdG8gZmlsbCBpdCB3aXRoIHRoZSBjb250ZW50cyBvZgorCQkJICAgICAgICAgICAgICAgIHRoZSByb290IGZpbGVzeXN0ZW0gcG9pbnRlZCB0byBieSB0aGUKKwkJCSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LXI8L2ZpbGVuYW1lPiBjb21tYW5kLWxpbmUgb3B0aW9uCisJCQkgICAgICAgICAgICAgICAgb3IgdGhlIGVxdWl2YWxlbnQgcm9vdGZzIGRlcml2ZWQgZnJvbSB0aGUKKwkJCSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWU8L2ZpbGVuYW1lPiBjb21tYW5kLWxpbmUKKwkJCSAgICAgICAgICAgICAgICBvcHRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpbGVzeXN0ZW0gdHlwZSB1c2VkIHRvIGNyZWF0ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb24gaXMgZHJpdmVuIGJ5IHRoZSB2YWx1ZSBvZiB0aGUKKwkJCSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LS1mc3R5cGU8L2ZpbGVuYW1lPiBvcHRpb24KKwkJCSAgICAgICAgICAgICAgICBzcGVjaWZpZWQgZm9yIHRoZSBwYXJ0aXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSBlbnRyeSBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tLWZzdHlwZTwvZmlsZW5hbWU+IHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCQkJICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3UgdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi0tc291cmNlIDxyZXBsYWNlYWJsZT5wbHVnaW4tbmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGNyZWF0ZXMgYSBwYXJ0aXRpb24gYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXJnZSBhcyBuZWVkZWQgYW5kIGZpbGxzIGl0IHdpdGggdGhlIGNvbnRlbnRzIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBhcnRpdGlvbiB0aGF0IGlzIGdlbmVyYXRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgcGx1Z2luIG5hbWUgdXNpbmcgdGhlIGRhdGEgcG9pbnRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJ5IHRoZSA8ZmlsZW5hbWU+LXI8L2ZpbGVuYW1lPiBjb21tYW5kLWxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24gb3IgdGhlIGVxdWl2YWxlbnQgcm9vdGZzIGRlcml2ZWQgZnJvbSB0aGUKKwkJCSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWU8L2ZpbGVuYW1lPiBjb21tYW5kLWxpbmUKKwkJCSAgICAgICAgICAgICAgICBvcHRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhhY3RseSB3aGF0IHRob3NlIGNvbnRlbnRzIGFuZAorCQkJICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0gdHlwZSBlbmQgdXAgYmVpbmcgYXJlIGRlcGVuZGVudAorCQkJICAgICAgICAgICAgICAgIG9uIHRoZSBnaXZlbiBwbHVnaW4gaW1wbGVtZW50YXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT4tLW9uZGlzazwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT4tLW9uZHJpdmU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcmNlcyB0aGUgcGFydGl0aW9uIHRvIGJlIGNyZWF0ZWQgb24gYSBwYXJ0aWN1bGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzay48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPi0tZnN0eXBlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXRzIHRoZSBmaWxlIHN5c3RlbSB0eXBlIGZvciB0aGUgcGFydGl0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkIHZhbHVlcyBhcmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5leHQ0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+ZXh0MzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmV4dDI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5idHJmczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnNxdWFzaGZzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+c3dhcDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+LS1mc29wdGlvbnM8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGZyZWUtZm9ybSBzdHJpbmcgb2Ygb3B0aW9ucyB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgd2hlbiBtb3VudGluZyB0aGUgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHN0cmluZyB3aWxsIGJlIGNvcGllZCBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL2ZzdGFiPC9maWxlbmFtZT4gZmlsZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgc3lzdGVtIGFuZCBzaG91bGQgYmUgZW5jbG9zZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgImRlZmF1bHRzIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPi0tbGFiZWwgbGFiZWw8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbGFiZWwgdG8gZ2l2ZSB0byB0aGUgZmlsZXN5c3RlbSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIG1hZGUgb24gdGhlIHBhcnRpdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgZ2l2ZW4gbGFiZWwgaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0sIGEgbmV3IGxhYmVsIGlzIGNyZWF0ZWQgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPi0tYWN0aXZlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXJrcyB0aGUgcGFydGl0aW9uIGFzIGFjdGl2ZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPi0tYWxpZ24gKGluIEtCeXRlcyk8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGlzIGEgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+LXNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uIHRoYXQgc2F5cyB0byBzdGFydCBhIHBhcnRpdGlvbiBvbiBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggS0J5dGVzIGJvdW5kYXJ5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdjb21tYW5kLWJvb3Rsb2FkZXInPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Db21tYW5kOiBib290bG9hZGVyPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgc3BlY2lmaWVzIGhvdyB0aGUgYm9vdCBsb2FkZXIgc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQgYW5kIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBCb290bG9hZGVyIGZ1bmN0aW9uYWxpdHkgYW5kIGJvb3QgcGFydGl0aW9ucyBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkIGJ5IHRoZSB2YXJpb3VzCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LS1zb3VyY2U8L2ZpbGVuYW1lPgorCQkJICAgICAgICAgICAgcGx1Z2lucyB0aGF0IGltcGxlbWVudCBib290bG9hZGVyIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYm9vdGxvYWRlciBjb21tYW5kIGVzc2VudGlhbGx5IHByb3ZpZGVzIGEgbWVhbnMgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmeWluZyBib290bG9hZGVyIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPi0tdGltZW91dDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vdGxvYWRlciB0aW1lcyBvdXQgYW5kIGJvb3RzIHRoZSBkZWZhdWx0IG9wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPi0tYXBwZW5kPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMga2VybmVsIHBhcmFtZXRlcnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlc2UgcGFyYW1ldGVycyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBzeXNsaW51eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5BUFBFTkQ8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ncnViPC9maWxlbmFtZT4ga2VybmVsIGNvbW1hbmQgbGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyaW5nLXRoZS1rZXJuZWwnPgorICAgICAgICA8dGl0bGU+Q29uZmlndXJpbmcgdGhlIEtlcm5lbDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDb25maWd1cmluZyB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgY29uc2lzdHMgb2YgbWFraW5nIHN1cmUgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgaGFzIGFsbCB0aGUgcmlnaHQgaW5mb3JtYXRpb24KKyAgICAgICAgICAgIGluIGl0IGZvciB0aGUgaW1hZ2UgeW91IGFyZSBidWlsZGluZy4KKyAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+IHRvb2wgYW5kCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZyYWdtZW50cyB0byBtYWtlIHN1cmUgeW91cgorICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGlzIGp1c3QgaG93IHlvdSBuZWVkIGl0LgorICAgICAgICAgICAgWW91IGNhbiBhbHNvIHNhdmUga25vd24gY29uZmlndXJhdGlvbnMgaW4gYQorICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgdGhhdCB0aGUgYnVpbGQgc3lzdGVtIGNhbiB1c2UKKyAgICAgICAgICAgIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgdG8gdXNlIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4sCisgICAgICAgICAgICBjcmVhdGUgYW5kIHVzZSBjb25maWd1cmF0aW9uIGZyYWdtZW50cywgYW5kIGhvdyB0byBpbnRlcmFjdGl2ZWx5CisgICAgICAgICAgICBtb2RpZnkgeW91ciA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgdG8gY3JlYXRlIHRoZQorICAgICAgICAgICAgbGVhbmVzdCBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlIHBvc3NpYmxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBrZXJuZWwgY29uZmlndXJhdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyNjaGFuZ2luZy10aGUtY29uZmlndXJhdGlvbic+Q2hhbmdpbmcgdGhlIENvbmZpZ3VyYXRpb248L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1tZW51Y29uZmlnJz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyZuYnNwOyZuYnNwOzxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZWFzaWVzdCB3YXkgdG8gZGVmaW5lIGtlcm5lbCBjb25maWd1cmF0aW9ucyBpcyB0byBzZXQgdGhlbSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4gdG9vbC4KKyAgICAgICAgICAgICAgICBUaGlzIHRvb2wgcHJvdmlkZXMgYW4gaW50ZXJhY3RpdmUgbWV0aG9kIHdpdGggd2hpY2gKKyAgICAgICAgICAgICAgICB0byBzZXQga2VybmVsIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgICAgICAgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4sIHNlZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWVudWNvbmZpZyc+PC91bGluaz4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHVzZSB0aGUgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiB0b29sIGluIHRoZSBZb2N0byBQcm9qZWN0IGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQsIHlvdSBtdXN0IGxhdW5jaCBpdCB1c2luZyBCaXRCYWtlLgorICAgICAgICAgICAgICAgIFRodXMsIHRoZSBlbnZpcm9ubWVudCBtdXN0IGJlIHNldCB1cCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgc2NyaXB0IGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICBZb3UgbXVzdCBhbHNvIGJlIHN1cmUgb2YgdGhlIHN0YXRlIG9mIHlvdXIgYnVpbGQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kcyBydW4gPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGFzc3VtaW5nIHRoZSBTb3VyY2UgRGlyZWN0b3J5J3MgdG9wLWxldmVsIGZvbGRlciBpcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5+L3Bva3k8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgcG9reQorICAgICAkIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudgorICAgICAkIGJpdGJha2UgbGludXgteW9jdG8gLWMga2VybmVsX2NvbmZpZ21lIC1mCisgICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBtZW51Y29uZmlnCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE9uY2UgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiBjb21lcyB1cCwgaXRzIHN0YW5kYXJkCisgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGFsbG93cyB5b3UgdG8gaW50ZXJhY3RpdmVseSBleGFtaW5lIGFuZCBjb25maWd1cmUKKyAgICAgICAgICAgICAgICBhbGwgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCisgICAgICAgICAgICAgICAgQWZ0ZXIgbWFraW5nIHlvdXIgY2hhbmdlcywgc2ltcGx5IGV4aXQgdGhlIHRvb2wgYW5kIHNhdmUgeW91cgorICAgICAgICAgICAgICAgIGNoYW5nZXMgdG8gY3JlYXRlIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQ29uc2lkZXIgYW4gZXhhbXBsZSB0aGF0IGNvbmZpZ3VyZXMgdGhlIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBrZXJuZWwuCisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcmVjb2duaXplcyB0aGlzIGtlcm5lbCBhcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0bzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRodXMsIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgZnJvbSB0aGUgc2hlbGwgaW4gd2hpY2ggeW91IHByZXZpb3VzbHkgc291cmNlZCB0aGUKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBpbml0aWFsaXphdGlvbiBzY3JpcHQgY2xlYW5zIHRoZSBzaGFyZWQgc3RhdGUgY2FjaGUgYW5kIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgYW5kIHRoZW4gcnVucyA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGxpbnV4LXlvY3RvIC1jIG1lbnVjb25maWcKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uY2UgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiBsYXVuY2hlcywgdXNlIHRoZSBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICB0byBuYXZpZ2F0ZSB0aHJvdWdoIHRoZSBzZWxlY3Rpb25zIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgaW4KKyAgICAgICAgICAgICAgICB3aGljaCB5b3UgYXJlIGludGVyZXN0ZWQuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSA8ZmlsZW5hbWU+Q09ORklHX1NNUDwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gc2V0dGluZy4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgaXQgYXQgPGZpbGVuYW1lPlByb2Nlc3NvciBUeXBlIGFuZCBGZWF0dXJlczwvZmlsZW5hbWU+IHVuZGVyCisgICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gc2VsZWN0aW9uIDxmaWxlbmFtZT5TeW1tZXRyaWMgTXVsdGktcHJvY2Vzc2luZyBTdXBwb3J0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgQWZ0ZXIgaGlnaGxpZ2h0aW5nIHRoZSBzZWxlY3Rpb24sIHVzZSB0aGUgYXJyb3cga2V5cyB0byBzZWxlY3Qgb3IgZGVzZWxlY3QKKyAgICAgICAgICAgICAgICB0aGUgc2V0dGluZy4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSBhcmUgZmluaXNoZWQgd2l0aCBhbGwgeW91ciBzZWxlY3Rpb25zLCBleGl0IG91dCBhbmQgc2F2ZSB0aGVtLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTYXZpbmcgdGhlIHNlbGVjdGlvbnMgdXBkYXRlcyB0aGUgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgZmlsZSB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdG8gY29uZmlndXJlIHRoZQorICAgICAgICAgICAgICAgIGtlcm5lbCBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBhbmQgZXhhbWluZSB0aGlzIGZpbGUgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeSBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50bXAvd29yay88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgYWN0dWFsIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gaXMgbG9jYXRlZCBpbiB0aGUgYXJlYSB3aGVyZSB0aGUKKyAgICAgICAgICAgICAgICBzcGVjaWZpYyBrZXJuZWwgaXMgYnVpbHQuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3ZXJlIGJ1aWxkaW5nIGEgTGludXggWW9jdG8ga2VybmVsIGJhc2VkIG9uIHRoZQorICAgICAgICAgICAgICAgIExpbnV4IDMuMTQga2VybmVsIGFuZCB5b3Ugd2VyZSBidWlsZGluZyBhIFFFTVUgaW1hZ2UgdGFyZ2V0ZWQgZm9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPng4NjwvZmlsZW5hbWU+IGFyY2hpdGVjdHVyZSwgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIHdvdWxkIGJlIGxvY2F0ZWQgaGVyZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHBva3kvYnVpbGQvdG1wL3dvcmsvcWVtdXg4Ni1wb2t5LWxpbnV4L2xpbnV4LXlvY3RvLTMuMTQuMTErZ2l0MSs4NGYuLi4KKyAgICAgICAgLi4uNjU2ZWQzMC1yMS9saW51eC1xZW11eDg2LXN0YW5kYXJkLWJ1aWxkCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgcHJldmlvdXMgZXhhbXBsZSBkaXJlY3RvcnkgaXMgYXJ0aWZpY2lhbGx5IHNwbGl0IGFuZCBtYW55IG9mIHRoZSBjaGFyYWN0ZXJzCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBhY3R1YWwgZmlsZW5hbWUgYXJlIG9taXR0ZWQgaW4gb3JkZXIgdG8gbWFrZSBpdCBtb3JlIHJlYWRhYmxlLgorICAgICAgICAgICAgICAgICAgICBBbHNvLCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB5b3UgYXJlIHVzaW5nLCB0aGUgZXhhY3QgcGF0aG5hbWUKKyAgICAgICAgICAgICAgICAgICAgZm9yIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE0Li4uPC9maWxlbmFtZT4gbWlnaHQgZGlmZmVyLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2l0aGluIHRoZSA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUsIHlvdSBjYW4gc2VlIHRoZSBrZXJuZWwgc2V0dGluZ3MuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgZW50cnkgc2hvd3MgdGhhdCBzeW1tZXRyaWMgbXVsdGktcHJvY2Vzc29yIHN1cHBvcnQKKyAgICAgICAgICAgICAgICBpcyBub3Qgc2V0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgZ29vZCBtZXRob2QgdG8gaXNvbGF0ZSBjaGFuZ2VkIGNvbmZpZ3VyYXRpb25zIGlzIHRvIHVzZSBhIGNvbWJpbmF0aW9uIG9mIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4gdG9vbCBhbmQgc2ltcGxlIHNoZWxsIGNvbW1hbmRzLgorICAgICAgICAgICAgICAgIEJlZm9yZSBjaGFuZ2luZyBjb25maWd1cmF0aW9ucyB3aXRoIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4sIGNvcHkgdGhlCisgICAgICAgICAgICAgICAgZXhpc3RpbmcgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBhbmQgcmVuYW1lIGl0IHRvIHNvbWV0aGluZyBlbHNlLAorICAgICAgICAgICAgICAgIHVzZSA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+IHRvIG1ha2UKKyAgICAgICAgICAgICAgICBhcyBtYW55IGNoYW5nZXMgYXMgeW91IHdhbnQgYW5kIHNhdmUgdGhlbSwgdGhlbiBjb21wYXJlIHRoZSByZW5hbWVkIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICBmaWxlIGFnYWluc3QgdGhlIG5ld2x5IGNyZWF0ZWQgZmlsZS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgcmVzdWx0aW5nIGRpZmZlcmVuY2VzIGFzIHlvdXIgYmFzZSB0byBjcmVhdGUgY29uZmlndXJhdGlvbiBmcmFnbWVudHMKKyAgICAgICAgICAgICAgICB0byBwZXJtYW5lbnRseSBzYXZlIGluIHlvdXIga2VybmVsIGxheWVyLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIG1ha2UgYSBjb3B5IG9mIHRoZSA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGFuZCBkb24ndCBqdXN0CisgICAgICAgICAgICAgICAgICAgIHJlbmFtZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBuZWVkcyBhbiBleGlzdGluZyA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZyb20gd2hpY2ggdG8gd29yay4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmctYS1kZWZjb25maWctZmlsZSc+CisgICAgICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgYSZuYnNwOyZuYnNwOzxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBGaWxlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZSBpcyBzaW1wbHkgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gcmVuYW1lZCB0byAiZGVmY29uZmlnIi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSBhIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgdG8gcmV0YWluIGEga25vd24gc2V0IG9mIGtlcm5lbCBjb25maWd1cmF0aW9ucyBmcm9tIHdoaWNoIHRoZQorICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2FuIGRyYXcgdG8gY3JlYXRlIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgT3V0LW9mLXRoZS1ib3gsIHRoZSBZb2N0byBQcm9qZWN0IG5ldmVyIHNoaXBzIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY3JlYXRlcyB0aGUgZmluYWwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIHVzZWQgdG8gY29uZmlndXJlIHRoZQorICAgICAgICAgICAgICAgICAgICBrZXJuZWwuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBjcmVhdGUgYSA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4sIHN0YXJ0IHdpdGggYQorICAgICAgICAgICAgICAgIGNvbXBsZXRlLCB3b3JraW5nIExpbnV4IGtlcm5lbCA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICBDb3B5IHRoYXQgZmlsZSB0byB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaW4geW91ciBsYXllcidzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZXMta2VybmVsL2xpbnV4PC9maWxlbmFtZT4gZGlyZWN0b3J5LCBhbmQgcmVuYW1lCisgICAgICAgICAgICAgICAgdGhlIGNvcGllZCBmaWxlIHRvICJkZWZjb25maWciLgorICAgICAgICAgICAgICAgIFRoZW4sIGFkZCB0aGUgZm9sbG93aW5nIGxpbmVzIHRvIHRoZSBsaW51eC15b2N0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGluIHlvdXIgbGF5ZXI6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly9kZWZjb25maWciCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB0ZWxscyB0aGUgYnVpbGQgc3lzdGVtIGhvdyB0byBzZWFyY2ggZm9yIHRoZSBmaWxlLCB3aGlsZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGV4dGVuZHMgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSAoc2VhcmNoIGRpcmVjdG9yaWVzKSB0byBpbmNsdWRlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1BOfTwvZmlsZW5hbWU+IGRpcmVjdG9yeSB5b3UgY3JlYXRlZCB0byBob2xkIHRoZQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBhcHBsaWVzIHRoZSBjb25maWd1cmF0aW9ucyBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZSBiZWZvcmUgYXBwbHlpbmcgYW55CisgICAgICAgICAgICAgICAgICAgIHN1YnNlcXVlbnQgY29uZmlndXJhdGlvbiBmcmFnbWVudHMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmaW5hbCBrZXJuZWwgY29uZmlndXJhdGlvbiBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucyBpbiB0aGUgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGUgYW5kIGFueSBjb25maWd1cmF0aW9uIGZyYWdtZW50cyB5b3UgcHJvdmlkZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gcmVhbGl6ZSB0aGF0IGlmIHlvdSBoYXZlIGFueSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50cywgdGhlIGJ1aWxkIHN5c3RlbSBhcHBsaWVzIHRoZXNlIG9uIHRvcCBvZiBhbmQKKyAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgYXBwbHlpbmcgdGhlIGV4aXN0aW5nIGRlZmNvbmZpZyBmaWxlIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUga2VybmVsLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyNjaGFuZ2luZy10aGUtY29uZmlndXJhdGlvbic+Q2hhbmdpbmcgdGhlIENvbmZpZ3VyYXRpb248L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7I2dlbmVyYXRpbmctY29uZmlndXJhdGlvbi1maWxlcyc+R2VuZXJhdGluZyBDb25maWd1cmF0aW9uIEZpbGVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbnMsIGJvdGggaW4gdGhlIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50CisgICAgICAgICAgICAgICAgTWFudWFsLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLWNvbmZpZy1mcmFnbWVudHMnPgorICAgICAgICAgICAgPHRpdGxlPkNyZWF0aW5nIENvbmZpZ3VyYXRpb24gRnJhZ21lbnRzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBmcmFnbWVudHMgYXJlIHNpbXBseSBrZXJuZWwgb3B0aW9ucyB0aGF0IGFwcGVhciBpbiBhIGZpbGUKKyAgICAgICAgICAgICAgICBwbGFjZWQgd2hlcmUgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2FuIGZpbmQgYW5kIGFwcGx5IHRoZW0uCisgICAgICAgICAgICAgICAgU3ludGFjdGljYWxseSwgdGhlIGNvbmZpZ3VyYXRpb24gc3RhdGVtZW50IGlzIGlkZW50aWNhbCB0byB3aGF0IHdvdWxkIGFwcGVhcgorICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGlzIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHRtcC93b3JrLzxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4tcG9reS1saW51eC9saW51eC15b2N0by08cmVwbGFjZWFibGU+cmVsZWFzZV9zcGVjaWZpY19zdHJpbmc8L3JlcGxhY2VhYmxlPi9saW51eC08cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+LTxyZXBsYWNlYWJsZT5idWlsZF90eXBlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEl0IGlzIHNpbXBsZSB0byBjcmVhdGUgYSBjb25maWd1cmF0aW9uIGZyYWdtZW50LgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpc3N1aW5nIHRoZSBmb2xsb3dpbmcgZnJvbSB0aGUgc2hlbGwgY3JlYXRlcyBhIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQKKyAgICAgICAgICAgICAgICBmaWxlIG5hbWVkIDxmaWxlbmFtZT5teV9zbXAuY2ZnPC9maWxlbmFtZT4gdGhhdCBlbmFibGVzIG11bHRpLXByb2Nlc3NvciBzdXBwb3J0CisgICAgICAgICAgICAgICAgd2l0aGluIHRoZSBrZXJuZWw6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGVjaG8gIkNPTkZJR19TTVA9eSIgPj4gbXlfc21wLmNmZworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgQWxsIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQgZmlsZXMgbXVzdCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY2ZnPC9maWxlbmFtZT4gZXh0ZW5zaW9uIGluIG9yZGVyIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byByZWNvZ25pemUgdGhlbSBhcyBhCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVyZSBkbyB5b3UgcHV0IHlvdXIgY29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlcz8KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHBsYWNlIHRoZXNlIGZpbGVzIGluIHRoZSBzYW1lIGFyZWEgcG9pbnRlZCB0byBieQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcGlja3MgdXAgdGhlIGNvbmZpZ3VyYXRpb24gYW5kCisgICAgICAgICAgICAgICAgYWRkcyBpdCB0byB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGFkIGEgc2V0IG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworICAgICAgICAgICAgICAgIGluIGEgZmlsZSBjYWxsZWQgPGZpbGVuYW1lPm15Y29uZmlnLmNmZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIElmIHlvdSBwdXQgdGhhdCBmaWxlIGluc2lkZSBhIGRpcmVjdG9yeSBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0bzwvZmlsZW5hbWU+IHRoYXQgcmVzaWRlcyBpbiB0aGUgc2FtZQorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBhcyB0aGUga2VybmVsJ3MgYXBwZW5kIGZpbGUgYW5kIHRoZW4gYWRkIGEKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHN0YXRlbWVudCBzdWNoIGFzIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICB0byB0aGUga2VybmVsJ3MgYXBwZW5kIGZpbGUsIHRob3NlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworICAgICAgICAgICAgICAgIHdpbGwgYmUgcGlja2VkIHVwIGFuZCBhcHBsaWVkIHdoZW4gdGhlIGtlcm5lbCBpcyBidWlsdC4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly9teWNvbmZpZy5jZmciCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQgZWFybGllciwgeW91IGNhbiBncm91cCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGludG8gbXVsdGlwbGUgZmlsZXMgYW5kCisgICAgICAgICAgICAgICAgbmFtZSB0aGVtIGFsbCBpbiB0aGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgYXMgd2VsbC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIGdyb3VwIHNlcGFyYXRlIGNvbmZpZ3VyYXRpb25zIHNwZWNpZmljYWxseSBmb3IgRXRoZXJuZXQgYW5kIGdyYXBoaWNzCisgICAgICAgICAgICAgICAgaW50byB0aGVpciBvd24gZmlsZXMgYW5kIGFkZCB0aG9zZSBieSB1c2luZyBhIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gc3RhdGVtZW50IGxpa2UgdGhlCisgICAgICAgICAgICAgICAgZm9sbG93aW5nIGluIHlvdXIgYXBwZW5kIGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJICs9ICJmaWxlOi8vbXljb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ldGguY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly9nZnguY2ZnIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdmaW5lLXR1bmluZy10aGUta2VybmVsLWNvbmZpZ3VyYXRpb24tZmlsZSc+CisgICAgICAgICAgICA8dGl0bGU+RmluZS1UdW5pbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIEZpbGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIG1ha2Ugc3VyZSB0aGUgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGlzIGFzIGxlYW4gb3IgZWZmaWNpZW50IGFzCisgICAgICAgICAgICAgICAgcG9zc2libGUgYnkgcmVhZGluZyB0aGUgb3V0cHV0IG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmcmFnbWVudCBhdWRpdCwKKyAgICAgICAgICAgICAgICBub3RpbmcgYW55IGlzc3VlcywgbWFraW5nIGNoYW5nZXMgdG8gY29ycmVjdCB0aGUgaXNzdWVzLCBhbmQgdGhlbiByZXBlYXRpbmcuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIHBhcnQgb2YgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fa2VybmVsX2NvbmZpZ2NoZWNrPC9maWxlbmFtZT4gdGFzayBydW5zLgorICAgICAgICAgICAgICAgIFRoaXMgdGFzayB2YWxpZGF0ZXMgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGJ5IGNoZWNraW5nIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSBhZ2FpbnN0IHRoZSBpbnB1dCBmaWxlcy4KKyAgICAgICAgICAgICAgICBEdXJpbmcgdGhlIGNoZWNrLCB0aGUgdGFzayBwcm9kdWNlcyB3YXJuaW5nIG1lc3NhZ2VzIGZvciB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgaXNzdWVzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SZXF1ZXN0ZWQgb3B0aW9ucyB0aGF0IGRpZCBub3QgbWFrZSB0aGUgZmluYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNvbmZpZ3VyYXRpb24gaXRlbXMgdGhhdCBhcHBlYXIgdHdpY2UgaW4gdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Db25maWd1cmF0aW9uIGl0ZW1zIHRhZ2dlZCBhcyAicmVxdWlyZWQiIHRoYXQgd2VyZSBvdmVycmlkZGVuLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BIGJvYXJkIG92ZXJyaWRlcyBhIG5vbi1ib2FyZCBzcGVjaWZpYyBvcHRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5MaXN0ZWQgb3B0aW9ucyBub3QgdmFsaWQgZm9yIHRoZSBrZXJuZWwgYmVpbmcgcHJvY2Vzc2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHRoZSBvcHRpb24gZG9lcyBub3QgYXBwZWFyIGFueXdoZXJlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRvX2tlcm5lbF9jb25maWdjaGVjazwvZmlsZW5hbWU+IHRhc2sgY2FuCisgICAgICAgICAgICAgICAgICAgIGFsc28gb3B0aW9uYWxseSByZXBvcnQgaWYgYW4gb3B0aW9uIGlzIG92ZXJyaWRkZW4gZHVyaW5nCisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmcuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgZWFjaCBvdXRwdXQgd2FybmluZywgYSBtZXNzYWdlIHBvaW50cyB0byB0aGUgZmlsZQorICAgICAgICAgICAgICAgIHRoYXQgY29udGFpbnMgYSBsaXN0IG9mIHRoZSBvcHRpb25zIGFuZCBhIHBvaW50ZXIgdG8gdGhlCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmcmFnbWVudCB0aGF0IGRlZmluZXMgdGhlbS4KKyAgICAgICAgICAgICAgICBDb2xsZWN0aXZlbHksIHRoZSBmaWxlcyBhcmUgdGhlIGtleSB0byBzdHJlYW1saW5pbmcgdGhlCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gc3RyZWFtbGluZSB0aGUgY29uZmlndXJhdGlvbiwgZG8gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TdGFydCB3aXRoIGEgZnVsbCBjb25maWd1cmF0aW9uIHRoYXQgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBrbm93IHdvcmtzIC0gaXQgYnVpbGRzIGFuZCBib290cyBzdWNjZXNzZnVsbHkuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbmZpZ3VyYXRpb24gZmlsZSB3aWxsIGJlIHlvdXIgYmFzZWxpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlcGFyYXRlbHkgcnVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbmZpZ21lPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fa2VybmVsX2NvbmZpZ2NoZWNrPC9maWxlbmFtZT4gdGFza3MuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRha2UgdGhlIHJlc3VsdGluZyBsaXN0IG9mIGZpbGVzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fa2VybmVsX2NvbmZpZ2NoZWNrPC9maWxlbmFtZT4gdGFzaworICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3MgYW5kIGRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJvcCB2YWx1ZXMgdGhhdCBhcmUgcmVkZWZpbmVkIGluIHRoZSBmcmFnbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgZG8gbm90IGNoYW5nZSB0aGUgZmluYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuYWx5emUgYW5kIHBvdGVudGlhbGx5IGRyb3AgdmFsdWVzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSB0aGF0IG92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuYWx5emUgYW5kIHBvdGVudGlhbGx5IHJlbW92ZSBub24tYm9hcmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgb3B0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmUgcmVwZWF0ZWQgYW5kIGludmFsaWQgb3B0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgeW91IGhhdmUgd29ya2VkIHRocm91Z2ggdGhlIG91dHB1dCBvZiB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGF1ZGl0LCB5b3UgY2FuIHJlLXJ1biB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jb25maWdtZTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2tlcm5lbF9jb25maWdjaGVjazwvZmlsZW5hbWU+IHRhc2tzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlIHJlc3VsdHMgb2YgeW91ciBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgbW9yZSBpc3N1ZXMsIHlvdSBjYW4gZGVhbCB3aXRoIHRoZW0gYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgc3RlcC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEl0ZXJhdGl2ZWx5IHdvcmtpbmcgdGhyb3VnaCBzdGVwcyB0d28gdGhyb3VnaCBmb3VyIGV2ZW50dWFsbHkgeWllbGRzCisgICAgICAgICAgICAgICAgYSBtaW5pbWFsLCBzdHJlYW1saW5lZCBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSB0aGUgYmVzdCA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+LCB5b3UgY2FuIGJ1aWxkIHRoZSBMaW51eAorICAgICAgICAgICAgICAgIFlvY3RvIGtlcm5lbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwYXRjaGluZy10aGUta2VybmVsIj4KKyAgICAgICAgPHRpdGxlPlBhdGNoaW5nIHRoZSBLZXJuZWw8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUGF0Y2hpbmcgdGhlIGtlcm5lbCBpbnZvbHZlcyBjaGFuZ2luZyBvciBhZGRpbmcgY29uZmlndXJhdGlvbnMgdG8gYW4gZXhpc3Rpbmcga2VybmVsLAorICAgICAgICAgICAgY2hhbmdpbmcgb3IgYWRkaW5nIHJlY2lwZXMgdG8gdGhlIGtlcm5lbCB0aGF0IGFyZSBuZWVkZWQgdG8gc3VwcG9ydCBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcywKKyAgICAgICAgICAgIG9yIGV2ZW4gYWx0ZXJpbmcgdGhlIHNvdXJjZSBjb2RlIGl0c2VsZi4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsPC9maWxlbmFtZT4gc2NyaXB0CisgICAgICAgICAgICAgICAgZm91bmQgaW4gdGhlIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAgICAgdW5kZXIgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPiB0byBtYW5hZ2Uga2VybmVsIHBhdGNoZXMgYW5kIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgU2VlIHRoZSAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjbWFuYWdpbmcta2VybmVsLXBhdGNoZXMtYW5kLWNvbmZpZy1pdGVtcy13aXRoLXlvY3RvLWtlcm5lbCc+TWFuYWdpbmcga2VybmVsIFBhdGNoZXMgYW5kIENvbmZpZyBJdGVtcyB3aXRoIHlvY3RvLWtlcm5lbDwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZSBmb3IKKyAgICAgICAgICAgICAgICBtb3JlIGluZm9ybWF0aW9uLjwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBleGFtcGxlIGNyZWF0ZXMgYSBzaW1wbGUgcGF0Y2ggYnkgYWRkaW5nIHNvbWUgUUVNVSBlbXVsYXRvciBjb25zb2xlCisgICAgICAgICAgICBvdXRwdXQgYXQgYm9vdCB0aW1lIHRocm91Z2ggPGZpbGVuYW1lPnByaW50azwvZmlsZW5hbWU+IHN0YXRlbWVudHMgaW4gdGhlIGtlcm5lbCdzCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y2FsaWJyYXRlLmM8L2ZpbGVuYW1lPiBzb3VyY2UgY29kZSBmaWxlLgorICAgICAgICAgICAgQXBwbHlpbmcgdGhlIHBhdGNoIGFuZCBib290aW5nIHRoZSBtb2RpZmllZCBpbWFnZSBjYXVzZXMgdGhlIGFkZGVkCisgICAgICAgICAgICBtZXNzYWdlcyB0byBhcHBlYXIgb24gdGhlIGVtdWxhdG9yJ3MgY29uc29sZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGV4YW1wbGUgYXNzdW1lcyBhIGNsZWFuIGJ1aWxkIGV4aXN0cyBmb3IgdGhlIDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4KKyAgICAgICAgICAgIG1hY2hpbmUgaW4gYQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgIG5hbWVkIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4uCisgICAgICAgICAgICBGdXJ0aGVybW9yZSwgdGhlIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPiBpcworICAgICAgICAgICAgPGZpbGVuYW1lPmJ1aWxkPC9maWxlbmFtZT4gYW5kIGlzIGxvY2F0ZWQgaW4gPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIHRoZSBrZXJuZWwgaXMgYmFzZWQgb24gdGhlIExpbnV4IDMuNCBrZXJuZWwuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFsc28sIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhdGNoaW5nIHRoZSBrZXJuZWwsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsjYXBwbHlpbmctcGF0Y2hlcyc+QXBwbHlpbmcgUGF0Y2hlczwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0ZS1hLWxheWVyLWZvci15b3VyLWNoYW5nZXMnPgorICAgICAgICAgICAgPHRpdGxlPkNyZWF0ZSBhIExheWVyIGZvciB5b3VyIENoYW5nZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZmlyc3Qgc3RlcCBpcyB0byBjcmVhdGUgYSBsYXllciBzbyB5b3UgY2FuIGlzb2xhdGUgeW91cgorICAgICAgICAgICAgICAgIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgUmF0aGVyIHRoYW4gdXNlIHRoZSA8ZmlsZW5hbWU+eW9jdG8tbGF5ZXI8L2ZpbGVuYW1lPiBzY3JpcHQKKyAgICAgICAgICAgICAgICB0byBjcmVhdGUgdGhlIGxheWVyLCB0aGlzIGV4YW1wbGUgc3RlcHMgdGhyb3VnaCB0aGUgcHJvY2VzcworICAgICAgICAgICAgICAgIGJ5IGhhbmQuCisgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgaW5mb3JtYXRpb24gb24gdGhlIHNjcmlwdCB0aGF0IGNyZWF0ZXMgYSBnZW5lcmFsCisgICAgICAgICAgICAgICAgbGF5ZXIsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3JlYXRpbmctYS1nZW5lcmFsLWxheWVyLXVzaW5nLXRoZS15b2N0by1sYXllci1zY3JpcHQnPkNyZWF0aW5nIGEgR2VuZXJhbCBMYXllciBVc2luZyB0aGUgeW9jdG8tbGF5ZXIgU2NyaXB0PC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGVzZSB0d28gY29tbWFuZHMgY3JlYXRlIGEgZGlyZWN0b3J5IHlvdSBjYW4gdXNlIGZvciB5b3VyCisgICAgICAgICAgICAgICAgbGF5ZXI6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4vcG9reQorICAgICAkIG1rZGlyIG1ldGEtbXlsYXllcgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBDcmVhdGluZyBhIGRpcmVjdG9yeSB0aGF0IGZvbGxvd3MgdGhlIFlvY3RvIFByb2plY3QgbGF5ZXIgbmFtaW5nCisgICAgICAgICAgICAgICAgY29udmVudGlvbnMgc2V0cyB1cCB0aGUgbGF5ZXIgZm9yIHlvdXIgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICBUaGUgbGF5ZXIgaXMgd2hlcmUgeW91IHBsYWNlIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlcywgYXBwZW5kCisgICAgICAgICAgICAgICAgZmlsZXMsIGFuZCBwYXRjaCBmaWxlcy4KKyAgICAgICAgICAgICAgICBUbyBsZWFybiBtb3JlIGFib3V0IGNyZWF0aW5nIGEgbGF5ZXIgYW5kIGZpbGxpbmcgaXQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICBmaWxlcyB5b3UgbmVlZCwgc2VlIHRoZSAiPGxpbmsgbGlua2VuZD0ndW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJz5VbmRlcnN0YW5kaW5nCisgICAgICAgICAgICAgICAgYW5kIENyZWF0aW5nIExheWVyczwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZmluZGluZy10aGUta2VybmVsLXNvdXJjZS1jb2RlJz4KKyAgICAgICAgICAgIDx0aXRsZT5GaW5kaW5nIHRoZSBLZXJuZWwgU291cmNlIENvZGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBFYWNoIHRpbWUgeW91IGJ1aWxkIGEga2VybmVsIGltYWdlLCB0aGUga2VybmVsIHNvdXJjZSBjb2RlIGlzIGZldGNoZWQKKyAgICAgICAgICAgICAgICBhbmQgdW5wYWNrZWQgaW50byB0aGUgZm9sbG93aW5nIGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICR7U30vbGludXgKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0nZmluZGluZy10aGUtdGVtcG9yYXJ5LXNvdXJjZS1jb2RlJz5GaW5kaW5nIFRlbXBvcmFyeSBTb3VyY2UgQ29kZTwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBhbmQgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L3VsaW5rPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHdoZXJlIHNvdXJjZSBpcyBrZXB0IGR1cmluZyBhIGJ1aWxkLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgdGhpcyBleGFtcGxlLCB3ZSBhcmUgZ29pbmcgdG8gcGF0Y2ggdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluaXQvY2FsaWJyYXRlLmM8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgYnkgYWRkaW5nIHNvbWUgc2ltcGxlIGNvbnNvbGUgPGZpbGVuYW1lPnByaW50azwvZmlsZW5hbWU+IHN0YXRlbWVudHMgdGhhdCB3ZSBjYW4KKyAgICAgICAgICAgICAgICBzZWUgd2hlbiB3ZSBib290IHRoZSBpbWFnZSB1c2luZyBRRU1VLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLXRoZS1wYXRjaCc+CisgICAgICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgdGhlIFBhdGNoPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVHdvIG1ldGhvZHMgZXhpc3QgYnkgd2hpY2ggeW91IGNhbiBjcmVhdGUgdGhlIHBhdGNoOgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3VzaW5nLWRldnRvb2wtaW4teW91ci13b3JrZmxvdyc+PGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPjwvbGluaz4gYW5kCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndXNpbmctYS1xdWlsdC13b3JrZmxvdyc+UXVpbHQ8L2xpbms+LgorICAgICAgICAgICAgICAgIEZvciBrZXJuZWwgcGF0Y2hlcywgdGhlIEdpdCB3b3JrZmxvdyBpcyBtb3JlIGFwcHJvcHJpYXRlLgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBhc3N1bWVzIHRoZSBHaXQgd29ya2Zsb3cgYW5kIHNob3dzIHRoZSBzdGVwcyBzcGVjaWZpYyB0bworICAgICAgICAgICAgICAgIHRoaXMgZXhhbXBsZS4KKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2hhbmdlIHRoZSB3b3JraW5nIGRpcmVjdG9yeTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlIHRvIHdoZXJlIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgaXMgYmVmb3JlIG1ha2luZworICAgICAgICAgICAgICAgICAgICAgICAgeW91ciBlZGl0cyB0byB0aGUgPGZpbGVuYW1lPmNhbGlicmF0ZS5jPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L3Bva3kvYnVpbGQvdG1wL3dvcmsvcWVtdXg4Ni1wb2t5LWxpbnV4L2xpbnV4LXlvY3RvLSR7UFZ9LSR7UFJ9L2xpbnV4CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHlvdSBhcmUgd29ya2luZyBpbiBhbiBlc3RhYmxpc2hlZCBHaXQgcmVwb3NpdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBtdXN0IGJlIGluIHRoaXMgZGlyZWN0b3J5IGluIG9yZGVyIHRvIGNvbW1pdCB5b3VyIGNoYW5nZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBjcmVhdGUgdGhlIHBhdGNoIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT5UaGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvdWxpbms+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L3VsaW5rPiB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByZXNlbnQgdGhlIHZlcnNpb24gYW5kIHJldmlzaW9uIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG88L2ZpbGVuYW1lPiByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+IHZhcmlhYmxlIGluY2x1ZGVzIHRoZSBHaXQgbWV0YSBhbmQgbWFjaGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hlcywgd2hpY2ggbWFrZSB0aGUgZGlyZWN0b3J5IG5hbWUgbG9uZ2VyIHRoYW4geW91IG1pZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkVkaXQgdGhlIHNvdXJjZSBmaWxlPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBFZGl0IHRoZSA8ZmlsZW5hbWU+aW5pdC9jYWxpYnJhdGUuYzwvZmlsZW5hbWU+IGZpbGUgdG8gaGF2ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBjaGFuZ2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICB2b2lkIGNhbGlicmF0ZV9kZWxheSh2b2lkKQorICAgICB7CisgICAgICAgICB1bnNpZ25lZCBsb25nIGxwajsKKyAgICAgICAgIHN0YXRpYyBib29sIHByaW50ZWQ7CisgICAgICAgICBpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKyAgICAgICAgIHByaW50aygiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CisgICAgICAgICBwcmludGsoIiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiIpOworICAgICAgICAgcHJpbnRrKCIqICAgICAgICBIRUxMTyBZT0NUTyBLRVJORUwgICAgICAgICAqXG4iKTsKKyAgICAgICAgIHByaW50aygiKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuIik7CisgICAgICAgICBwcmludGsoIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOworCisgICAgIAlpZiAocGVyX2NwdShjcHVfbG9vcHNfcGVyX2ppZmZ5LCB0aGlzX2NwdSkpIHsKKyAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TdGFnZSBhbmQgY29tbWl0IHlvdXIgY2hhbmdlczwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlc2UgR2l0IGNvbW1hbmRzIGRpc3BsYXkgdGhlIG1vZGlmaWVkIGZpbGUsIHN0YWdlIGl0LCBhbmQgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0IHRoZSBmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBzdGF0dXMKKyAgICAgJCBnaXQgYWRkIGluaXQvY2FsaWJyYXRlLmMKKyAgICAgJCBnaXQgY29tbWl0IC1tICJjYWxpYnJhdGU6IEFkZCBwcmludGsgZXhhbXBsZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HZW5lcmF0ZSB0aGUgcGF0Y2ggZmlsZTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBHaXQgY29tbWFuZCBjcmVhdGVzIHRoZSBhIHBhdGNoIGZpbGUgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4wMDAxLWNhbGlicmF0ZS1BZGQtcHJpbnRrLWV4YW1wbGUucGF0Y2g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggLTEKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2V0LXVwLXlvdXItbGF5ZXItZm9yLXRoZS1idWlsZCc+CisgICAgICAgICAgICA8dGl0bGU+U2V0IFVwIFlvdXIgTGF5ZXIgZm9yIHRoZSBCdWlsZDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPlRoZXNlIHN0ZXBzIGdldCB5b3VyIGxheWVyIHNldCB1cCBmb3IgdGhlIGJ1aWxkOgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgYWRkaXRpb25hbCBzdHJ1Y3R1cmU8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZSB0aGUgYWRkaXRpb25hbCBsYXllciBzdHJ1Y3R1cmU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2Qgfi9wb2t5L21ldGEtbXlsYXllcgorICAgICAkIG1rZGlyIGNvbmYKKyAgICAgJCBta2RpciByZWNpcGVzLWtlcm5lbAorICAgICAkIG1rZGlyIHJlY2lwZXMta2VybmVsL2xpbnV4CisgICAgICQgbWtkaXIgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5IGhvbGRzIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlcywgd2hpbGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZXMta2VybmVsPC9maWxlbmFtZT4gZGlyZWN0b3J5IGhvbGRzIHlvdXIgYXBwZW5kIGZpbGUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgeW91ciBwYXRjaCBmaWxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0ZSB0aGUgbGF5ZXIgY29uZmlndXJhdGlvbiBmaWxlPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlIHRvIHRoZSA8ZmlsZW5hbWU+bWV0YS1teWxheWVyL2NvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYW5kIGNyZWF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIFdlIGhhdmUgYSBjb25mIGFuZCBjbGFzc2VzIGRpcmVjdG9yeSwgYWRkIHRvIEJCUEFUSAorICAgICBCQlBBVEggLj0gIjoke0xBWUVSRElSfSIKKworICAgICAjIFdlIGhhdmUgcmVjaXBlcy0qIGRpcmVjdG9yaWVzLCBhZGQgdG8gQkJGSUxFUworICAgICBCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiIFwKKyAgICAgICAgICAgICAgICAgJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYmFwcGVuZCIKKworICAgICBCQkZJTEVfQ09MTEVDVElPTlMgKz0gIm15bGF5ZXIiCisgICAgIEJCRklMRV9QQVRURVJOX215bGF5ZXIgPSAiXiR7TEFZRVJESVJ9LyIKKyAgICAgQkJGSUxFX1BSSU9SSVRZX215bGF5ZXIgPSAiNSIKKyAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgTm90aWNlIDxmaWxlbmFtZT5teWxheWVyPC9maWxlbmFtZT4gYXMgcGFydCBvZiB0aGUgbGFzdCB0aHJlZQorICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIHRoZSBrZXJuZWwgcmVjaXBlIGFwcGVuZCBmaWxlPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlIHRvIHRoZSA8ZmlsZW5hbWU+bWV0YS1teWxheWVyL3JlY2lwZXMta2VybmVsL2xpbnV4PC9maWxlbmFtZT4gZGlyZWN0b3J5IGFuZCBjcmVhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG9fMy40LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisKKyAgICAgU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtY2FsaWJyYXRlLUFkZC1wcmludGstZXhhbXBsZS5wYXRjaCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudHMgZW5hYmxlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGZpbmQgdGhlIHBhdGNoIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyBhcHBlbmQgZmlsZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1iYmFwcGVuZC1maWxlcyc+VXNpbmcgLmJiYXBwZW5kIEZpbGVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QdXQgdGhlIHBhdGNoIGZpbGUgaW4geW91ciBsYXllcjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgTW92ZSB0aGUgPGZpbGVuYW1lPjAwMDEtY2FsaWJyYXRlLUFkZC1wcmludGstZXhhbXBsZS5wYXRjaDwvZmlsZW5hbWU+IGZpbGUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bWV0YS1teWxheWVyL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NldC11cC1mb3ItdGhlLWJ1aWxkJz4KKyAgICAgICAgICAgIDx0aXRsZT5TZXQgVXAgZm9yIHRoZSBCdWlsZDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIERvIHRoZSBmb2xsb3dpbmcgdG8gbWFrZSBzdXJlIHRoZSBidWlsZCBwYXJhbWV0ZXJzIGFyZSBzZXQgdXAgZm9yIHRoZSBleGFtcGxlLgorICAgICAgICAgICAgICAgIE9uY2UgeW91IHNldCB1cCB0aGVzZSBidWlsZCBwYXJhbWV0ZXJzLCB0aGV5IGRvIG5vdCBoYXZlIHRvIGNoYW5nZSB1bmxlc3MgeW91CisgICAgICAgICAgICAgICAgY2hhbmdlIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIG9mIHRoZSBtYWNoaW5lIHlvdSBhcmUgYnVpbGRpbmc6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCBmb3IgdGhlIGNvcnJlY3QgdGFyZ2V0IGFyY2hpdGVjdHVyZTo8L2VtcGhhc2lzPiBZb3VyCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uIHdpdGhpbiB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgdXNlZCB3aGVuIGJ1aWxkaW5nIHRoZSBMaW51eCBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCA8ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+IGlzIHNldCB0bworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPiwgd2hpY2ggc3BlY2lmaWVzIGEgMzItYml0CisgICAgICAgICAgICAgICAgICAgICAgICA8dHJhZGVtYXJrIGNsYXNzPSdyZWdpc3RlcmVkJz5JbnRlbDwvdHJhZGVtYXJrPiBBcmNoaXRlY3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCBtYWNoaW5lIHN1aXRhYmxlIGZvciB0aGUgUUVNVSBlbXVsYXRvci48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JZGVudGlmeSB5b3VyIDxmaWxlbmFtZT5tZXRhLW15bGF5ZXI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXI6PC9lbXBoYXNpcz4gVGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJMQVlFUlMnPjxmaWxlbmFtZT5CQkxBWUVSUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3kvYnVpbGQvY29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBuZWVkcyB0byBoYXZlIHRoZSBwYXRoIHRvIHlvdXIgbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW15bGF5ZXI8L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+QkJMQVlFUlM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBjb250YWlucyBwYXRocyB0bworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPm1ldGEteW9jdG88L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0by1ic3A8L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICBBZGQgdGhlIHBhdGggdG8geW91ciA8ZmlsZW5hbWU+bWV0YS1teWxheWVyPC9maWxlbmFtZT4gbG9jYXRpb246CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCTEFZRVJTID89ICIgXAorICAgICAgICRIT01FL3Bva3kvbWV0YSBcCisgICAgICAgJEhPTUUvcG9reS9tZXRhLXlvY3RvIFwKKyAgICAgICAkSE9NRS9wb2t5L21ldGEteW9jdG8tYnNwIFwKKyAgICAgICAkSE9NRS9wb2t5L21ldGEtbXlsYXllciBcCisgICAgICAgIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2J1aWxkLXRoZS1tb2RpZmllZC1xZW11LWtlcm5lbC1pbWFnZSc+CisgICAgICAgICAgICA8dGl0bGU+QnVpbGQgdGhlIE1vZGlmaWVkIFFFTVUgS2VybmVsIEltYWdlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBzdGVwcyBidWlsZCB5b3VyIG1vZGlmaWVkIGtlcm5lbCBpbWFnZToKKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QmUgc3VyZSB5b3VyIGJ1aWxkIGVudmlyb25tZW50IGlzIGluaXRpYWxpemVkPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBZb3VyIGVudmlyb25tZW50IHNob3VsZCBiZSBzZXQgdXAgc2luY2UgeW91IHByZXZpb3VzbHkgc291cmNlZAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIGl0IGlzIG5vdCwgc291cmNlIHRoZSBzY3JpcHQgYWdhaW4gZnJvbSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4vcG9reQorICAgICAkIHNvdXJjZSAmT0VfSU5JVF9GSUxFOworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2xlYW4gdXA8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gY2xlYW4gdGhlIHNoYXJlZCBzdGF0ZSBvdXQgYnkgdXNpbmcgQml0QmFrZQorICAgICAgICAgICAgICAgICAgICAgICAgdG8gcnVuIGZyb20gd2l0aGluIHRoZSBCdWlsZCBEaXJlY3RvcnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtY2xlYW5zc3RhdGUnPjxmaWxlbmFtZT5kb19jbGVhbnNzdGF0ZTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1jIGNsZWFuc3N0YXRlIGxpbnV4LXlvY3RvCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXZlciByZW1vdmUgYW55IGZpbGVzIGJ5IGhhbmQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL2RlcGxveTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGluc2lkZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWx3YXlzIHVzZSB0aGUgdmFyaW91cyBCaXRCYWtlIGNsZWFuIHRhc2tzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXIgb3V0IHByZXZpb3VzIGJ1aWxkIGFydGlmYWN0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIGNsZWFuIHRhc2tzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1jbGVhbic+PGZpbGVuYW1lPmRvX2NsZWFuPC9maWxlbmFtZT48L3VsaW5rPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1jbGVhbmFsbCc+PGZpbGVuYW1lPmRvX2NsZWFuYWxsPC9maWxlbmFtZT48L3VsaW5rPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1jbGVhbnNzdGF0ZSc+PGZpbGVuYW1lPmRvX2NsZWFuc3N0YXRlPC9maWxlbmFtZT48L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9ucyBhbGwgaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgdGhlIGltYWdlPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBOZXh0LCBidWlsZCB0aGUga2VybmVsIGltYWdlIHVzaW5nIHRoaXMgY29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1rIGxpbnV4LXlvY3RvCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdib290LXRoZS1pbWFnZS1hbmQtdmVyaWZ5LXlvdXItY2hhbmdlcyc+CisgICAgICAgICAgICA8dGl0bGU+Qm9vdCB0aGUgSW1hZ2UgYW5kIFZlcmlmeSBZb3VyIENoYW5nZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGVzZSBzdGVwcyBib290IHRoZSBpbWFnZSBhbmQgYWxsb3cgeW91IHRvIHNlZSB0aGUgY2hhbmdlcworICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Cb290IHRoZSBpbWFnZTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgQm9vdCB0aGUgbW9kaWZpZWQgaW1hZ2UgaW4gdGhlIFFFTVUgZW11bGF0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoaXMgY29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBydW5xZW11IHFlbXV4ODYKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5WZXJpZnkgdGhlIGNoYW5nZXM8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZyBpbnRvIHRoZSBtYWNoaW5lIHVzaW5nIDxmaWxlbmFtZT5yb290PC9maWxlbmFtZT4gd2l0aCBubyBwYXNzd29yZCBhbmQgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgdXNlIHRoZSBmb2xsb3dpbmcgc2hlbGwgY29tbWFuZCB0byBzY3JvbGwgdGhyb3VnaCB0aGUgY29uc29sZSdzIGJvb3Qgb3V0cHV0LgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIGRtZXNnIHwgbGVzcworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBzZWUgdGhlIHJlc3VsdHMgb2YgeW91ciA8ZmlsZW5hbWU+cHJpbnRrPC9maWxlbmFtZT4gc3RhdGVtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgYXMgcGFydCBvZiB0aGUgb3V0cHV0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWFraW5nLWltYWdlcy1tb3JlLXNlY3VyZSc+CisgICAgICAgIDx0aXRsZT5NYWtpbmcgSW1hZ2VzIE1vcmUgU2VjdXJlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNlY3VyaXR5IGlzIG9mIGluY3JlYXNpbmcgY29uY2VybiBmb3IgZW1iZWRkZWQgZGV2aWNlcy4KKyAgICAgICAgICAgIENvbnNpZGVyIHRoZSBpc3N1ZXMgYW5kIHByb2JsZW1zIGRpc2N1c3NlZCBpbiBqdXN0IHRoaXMKKyAgICAgICAgICAgIHNhbXBsaW5nIG9mIHdvcmsgZm91bmQgYWNyb3NzIHRoZSBJbnRlcm5ldDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnNjaG5laWVyLmNvbS9ibG9nL2FyY2hpdmVzLzIwMTQvMDEvc2VjdXJpdHlfcmlza3NfOS5odG1sJz5TZWN1cml0eSBSaXNrcyBvZiBFbWJlZGRlZCBTeXN0ZW1zPC91bGluaz4iPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgYnkgQnJ1Y2UgU2NobmVpZXIKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9J2h0dHA6Ly9pbnRlcm5ldGNlbnN1czIwMTIuYml0YnVja2V0Lm9yZy9wYXBlci5odG1sJz5JbnRlcm5ldCBDZW5zdXMgMjAxMjwvdWxpbms+IjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIGJ5IENhcm5hIEJvdG5ldDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPSdodHRwOi8vZWxpbnV4Lm9yZy9pbWFnZXMvNi82Zi9TZWN1cml0eS1pc3N1ZXMucGRmJz5TZWN1cml0eSBJc3N1ZXMgZm9yIEVtYmVkZGVkIERldmljZXM8L3VsaW5rPiI8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBieSBKYWtlIEVkZ2UKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9J2h0dHBzOi8vd3d3Lm5jY2dyb3VwLmNvbS9tZWRpYS8xODQ3NS9leHBsb2l0aW5nX3NlY3VyaXR5X2dhdGV3YXlzX3ZpYV90aGVpcl93ZWJfaW50ZXJmYWNlcy5wZGYnPlRoZXkgb3VnaHQgdG8ga25vdyBiZXR0ZXI6IEV4cGxvaXRpbmcgU2VjdXJpdHkgR2F0ZXdheXMgdmlhIHRoZWlyIFdlYiBJbnRlcmZhY2VzPC91bGluaz4iPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgYnkgQmVuIFdpbGxpYW1zCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gc2VjdXJpbmcgeW91ciBpbWFnZSBpcyBvZiBjb25jZXJuLCB0aGVyZSBhcmUgc3RlcHMsIHRvb2xzLAorICAgICAgICAgICAgYW5kIHZhcmlhYmxlcyB0aGF0IHlvdSBjYW4gY29uc2lkZXIgdG8gaGVscCB5b3UgcmVhY2ggdGhlCisgICAgICAgICAgICBzZWN1cml0eSBnb2FscyB5b3UgbmVlZCBmb3IgeW91ciBwYXJ0aWN1bGFyIGRldmljZS4KKyAgICAgICAgICAgIE5vdCBhbGwgc2l0dWF0aW9ucyBhcmUgaWRlbnRpY2FsIHdoZW4gaXQgY29tZXMgdG8gbWFraW5nIGFuCisgICAgICAgICAgICBpbWFnZSBzZWN1cmUuCisgICAgICAgICAgICBDb25zZXF1ZW50bHksIHRoaXMgc2VjdGlvbiBwcm92aWRlcyBzb21lIGd1aWRhbmNlIGFuZCBzdWdnZXN0aW9ucworICAgICAgICAgICAgZm9yIGNvbnNpZGVyYXRpb24gd2hlbiB5b3Ugd2FudCB0byBtYWtlIHlvdXIgaW1hZ2UgbW9yZSBzZWN1cmUuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBzZWN1cml0eSByZXF1aXJlbWVudHMgYW5kIHJpc2tzIGFyZQorICAgICAgICAgICAgICAgIGRpZmZlcmVudCBmb3IgZXZlcnkgdHlwZSBvZiBkZXZpY2UsIHRoaXMgc2VjdGlvbiBjYW5ub3QKKyAgICAgICAgICAgICAgICBwcm92aWRlIGEgY29tcGxldGUgcmVmZXJlbmNlIG9uIHNlY3VyaW5nIHlvdXIgY3VzdG9tIE9TLgorICAgICAgICAgICAgICAgIEl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgeW91IGFsc28gY29uc3VsdCBvdGhlciBzb3VyY2VzCisgICAgICAgICAgICAgICAgb2YgaW5mb3JtYXRpb24gb24gZW1iZWRkZWQgTGludXggc3lzdGVtIGhhcmRlbmluZyBhbmQgb24KKyAgICAgICAgICAgICAgICBzZWN1cml0eS4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdnZW5lcmFsLWNvbnNpZGVyYXRpb25zJz4KKyAgICAgICAgICAgIDx0aXRsZT5HZW5lcmFsIENvbnNpZGVyYXRpb25zPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgR2VuZXJhbCBjb25zaWRlcmF0aW9ucyBleGlzdCB0aGF0IGhlbHAgeW91IGNyZWF0ZSBtb3JlCisgICAgICAgICAgICAgICAgc2VjdXJlIGltYWdlcy4KKyAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgc3VnZ2VzdGlvbnMgdG8gaGVscAorICAgICAgICAgICAgICAgIG1ha2UgeW91ciBkZXZpY2UgbW9yZSBzZWN1cmU6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgU2NhbiBhZGRpdGlvbmFsIGNvZGUgeW91IGFyZSBhZGRpbmcgdG8gdGhlIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gYXBwbGljYXRpb24gY29kZSkgYnkgdXNpbmcgc3RhdGljIGFuYWx5c2lzCisgICAgICAgICAgICAgICAgICAgICAgICB0b29scy4KKyAgICAgICAgICAgICAgICAgICAgICAgIExvb2sgZm9yIGJ1ZmZlciBvdmVyZmxvd3MgYW5kIG90aGVyIHBvdGVudGlhbAorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdXJpdHkgcHJvYmxlbXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBQYXkgcGFydGljdWxhciBhdHRlbnRpb24gdG8gdGhlIHNlY3VyaXR5IGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgYW55IHdlYi1iYXNlZCBhZG1pbmlzdHJhdGlvbiBpbnRlcmZhY2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5XZWIgaW50ZXJmYWNlcyB0eXBpY2FsbHkgbmVlZCB0byBwZXJmb3JtCisgICAgICAgICAgICAgICAgICAgICAgICBhZG1pbmlzdHJhdGl2ZSBmdW5jdGlvbnMgYW5kIHRlbmQgdG8gbmVlZCB0byBydW4gd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgZWxldmF0ZWQgcHJpdmlsZWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRodXMsIHRoZSBjb25zZXF1ZW5jZXMgcmVzdWx0aW5nIGZyb20gdGhlIGludGVyZmFjZSdzCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cml0eSBiZWNvbWluZyBjb21wcm9taXNlZCBjYW4gYmUgc2VyaW91cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIExvb2sgZm9yIGNvbW1vbiB3ZWIgdnVsbmVyYWJpbGl0aWVzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyb3NzLXNpdGUtc2NyaXB0aW5nIChYU1MpLCB1bnZhbGlkYXRlZCBpbnB1dHMsCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc28gZm9ydGguPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QXMgd2l0aCBzeXN0ZW0gcGFzc3dvcmRzLCB0aGUgZGVmYXVsdCBjcmVkZW50aWFscworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFjY2Vzc2luZyBhIHdlYi1iYXNlZCBpbnRlcmZhY2Ugc2hvdWxkIG5vdCBiZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNhbWUgYWNyb3NzIGFsbCBkZXZpY2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgdHJ1ZSBpZiB0aGUgaW50ZXJmYWNlIGlzIGVuYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGRlZmF1bHQgYXMgaXQgY2FuIGJlIGFzc3VtZWQgdGhhdCBtYW55IGVuZC11c2VycworICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBub3QgY2hhbmdlIHRoZSBjcmVkZW50aWFscy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEVuc3VyZSB5b3UgY2FuIHVwZGF0ZSB0aGUgc29mdHdhcmUgb24gdGhlIGRldmljZSB0bworICAgICAgICAgICAgICAgICAgICAgICAgbWl0aWdhdGUgdnVsbmVyYWJpbGl0aWVzIGRpc2NvdmVyZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY29uc2lkZXJhdGlvbiBlc3BlY2lhbGx5IGFwcGxpZXMgd2hlbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgaXMgbmV0d29yay1lbmFibGVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgRW5zdXJlIHlvdSByZW1vdmUgb3IgZGlzYWJsZSBkZWJ1Z2dpbmcgZnVuY3Rpb25hbGl0eQorICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlIHByb2R1Y2luZyB0aGUgZmluYWwgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGRvIHRoaXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjb25zaWRlcmF0aW9ucy1zcGVjaWZpYy10by10aGUtb3BlbmVtYmVkZGVkLWJ1aWxkLXN5c3RlbSc+Q29uc2lkZXJhdGlvbnMgU3BlY2lmaWMgdG8gdGhlIE9wZW5FbWJlZGRlZCBCdWlsZCBTeXN0ZW08L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBFbnN1cmUgeW91IGhhdmUgbm8gbmV0d29yayBzZXJ2aWNlcyBsaXN0ZW5pbmcgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgYXJlIG5vdCBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmUgYW55IHNvZnR3YXJlIGZyb20gdGhlIGltYWdlIHRoYXQgaXMgbm90IG5lZWRlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBoYXJkd2FyZSBzdXBwb3J0IGZvciBzZWN1cmUgYm9vdCBmdW5jdGlvbmFsaXR5CisgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHlvdXIgZGV2aWNlIHN1cHBvcnRzIHRoaXMgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2VjdXJpdHktZmxhZ3MnPgorICAgICAgICAgICAgPHRpdGxlPlNlY3VyaXR5IEZsYWdzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgaGFzIHNlY3VyaXR5IGZsYWdzIHRoYXQgeW91IGNhbiBlbmFibGUgdGhhdAorICAgICAgICAgICAgICAgIGhlbHAgbWFrZSB5b3VyIGJ1aWxkIG91dHB1dCBtb3JlIHNlY3VyZS4KKyAgICAgICAgICAgICAgICBUaGUgc2VjdXJpdHkgZmxhZ3MgYXJlIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvc2VjdXJpdHlfZmxhZ3MuaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIHJlY2lwZSwgY2VydGFpbiBzZWN1cml0eSBmbGFncyBhcmUgZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICBhbmQgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorPCEtLQorICAgICAgICAgICAgICAgIFRoZSBHQ0MvTEQgZmxhZ3MgaW4gPGZpbGVuYW1lPnNlY3VyaXR5X2ZsYWdzLmluYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZW5hYmxlIG1vcmUgc2VjdXJlIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICAgICAgICAgICAgICBCeSBpbmNsdWRpbmcgdGhlIDxmaWxlbmFtZT5zZWN1cml0eV9mbGFncy5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUsIHlvdSBlbmFibGUgZmxhZ3MgdG8gdGhlIGNvbXBpbGVyIGFuZCBsaW5rZXIgdGhhdCBjYXVzZQorICAgICAgICAgICAgICAgIHRoZW0gdG8gZ2VuZXJhdGUgbW9yZSBzZWN1cmUgY29kZS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIEdDQy9MRCBmbGFncyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0IGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS1sc2I8L2ZpbGVuYW1lPiBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorLS0+CisgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgbGluZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9yIGluIHlvdXIgY3VzdG9tCisgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBlbmFibGUgdGhlIHNlY3VyaXR5CisgICAgICAgICAgICAgICAgY29tcGlsZXIgYW5kIGxpbmtlciBmbGFncyBmb3IgeW91ciBidWlsZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJlcXVpcmUgY29uZi9kaXN0cm8vaW5jbHVkZS9zZWN1cml0eV9mbGFncy5pbmMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY29uc2lkZXJhdGlvbnMtc3BlY2lmaWMtdG8tdGhlLW9wZW5lbWJlZGRlZC1idWlsZC1zeXN0ZW0nPgorICAgICAgICAgICAgPHRpdGxlPkNvbnNpZGVyYXRpb25zIFNwZWNpZmljIHRvIHRoZSBPcGVuRW1iZWRkZWQgQnVpbGQgU3lzdGVtPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiB0YWtlIHNvbWUgc3RlcHMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlCisgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBtYWtlIHlvdXIgaW1hZ2VzIG1vcmUgc2VjdXJlOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEVuc3VyZSAiZGVidWctdHdlYWtzIiBpcyBub3Qgb25lIG9mIHlvdXIgc2VsZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gY3JlYXRpbmcgYSBuZXcgcHJvamVjdCwgdGhlIGRlZmF1bHQgaXMgdG8gcHJvdmlkZSB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYW4gaW5pdGlhbCA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlcyB0aGlzIGZlYXR1cmUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRVhUUkFfSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5FWFRSQV9JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4gdmFyaWFibGUgd2l0aCB0aGUgbGluZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEVYVFJBX0lNQUdFX0ZFQVRVUkVTID0gImRlYnVnLXR3ZWFrcyIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBUbyBkaXNhYmxlIHRoYXQgZmVhdHVyZSwgc2ltcGx5IGNvbW1lbnQgb3V0IHRoYXQgbGluZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUsIG9yCisgICAgICAgICAgICAgICAgICAgICAgICBtYWtlIHN1cmUgPGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4gZG9lcyBub3QgY29udGFpbgorICAgICAgICAgICAgICAgICAgICAgICAgImRlYnVnLXR3ZWFrcyIgYmVmb3JlIHByb2R1Y2luZyB5b3VyIGZpbmFsIGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgQW1vbmcgb3RoZXIgdGhpbmdzLCBsZWF2aW5nIHRoaXMgaW4gcGxhY2Ugc2V0cyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QgcGFzc3dvcmQgYXMgYmxhbmssIHdoaWNoIG1ha2VzIGxvZ2dpbmcgaW4gZm9yCisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z2dpbmcgb3IgaW5zcGVjdGlvbiBlYXN5IGR1cmluZworICAgICAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgYnV0IGFsc28gbWVhbnMgYW55b25lIGNhbiBlYXNpbHkgbG9nIGluCisgICAgICAgICAgICAgICAgICAgICAgICBkdXJpbmcgcHJvZHVjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBzZXQgYSByb290IHBhc3N3b3JkIGZvciB0aGUgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhbHNvIHRvIHNldCBwYXNzd29yZHMgZm9yIGFueSBleHRyYSB1c2VycyB5b3UgbWlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZCAoZS5nLiBhZG1pbmlzdHJhdGl2ZSBvciBzZXJ2aWNlIHR5cGUgdXNlcnMpLgorICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3Ugc2V0IHVwIHBhc3N3b3JkcyBmb3IgbXVsdGlwbGUgaW1hZ2VzIG9yCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VycywgeW91IHNob3VsZCBub3QgZHVwbGljYXRlIHBhc3N3b3Jkcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gc2V0IHVwIHBhc3N3b3JkcywgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtZXh0cmF1c2Vycyc+PGZpbGVuYW1lPmV4dHJhdXNlcnM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcywgd2hpY2ggaXMgdGhlIHByZWZlcnJlZCBtZXRob2QuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSBvbiBob3cgdG8gc2V0IHVwIGJvdGggcm9vdCBhbmQgdXNlcgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtZXh0cmF1c2Vycyc+PGZpbGVuYW1lPmV4dHJhdXNlcnMuYmJjbGFzczwvZmlsZW5hbWU+PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiBhZGRpbmcgZXh0cmEgdXNlciBhY2NvdW50cyBvciBzZXR0aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290IHBhc3N3b3JkLCBiZSBjYXV0aW91cyBhYm91dCBzZXR0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbWUgcGFzc3dvcmQgb24gZXZlcnkgZGV2aWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyB0aGlzLCBhbmQgdGhlIHBhc3N3b3JkIHlvdSBoYXZlIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGV4cG9zZWQsIHRoZW4gZXZlcnkgZGV2aWNlIGlzIG5vdyBwb3RlbnRpYWxseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByb21pc2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBuZWVkIHRoaXMgYWNjZXNzIGJ1dCB3YW50IHRvIGVuc3VyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyaXR5LCBjb25zaWRlciBzZXR0aW5nIGEgZGlmZmVyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSBwYXNzd29yZCBmb3IgZWFjaCBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCB5b3UgZG8gdGhpcyBhcyBhIHNlcGFyYXRlIHN0ZXAgYWZ0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3UgZGVwbG95IHRoZSBpbWFnZSBvbnRvIHRoZSBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQ29uc2lkZXIgZW5hYmxpbmcgYSBNYW5kYXRvcnkgQWNjZXNzIENvbnRyb2wgKE1BQykKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1ld29yayBzdWNoIGFzIFNNQUNLIG9yIFNFTGludXggYW5kIHR1bmluZyBpdAorICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGVseSBmb3IgeW91ciBkZXZpY2UncyB1c2FnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvbWV0YS1zZWxpbnV4Lyc+PGZpbGVuYW1lPm1ldGEtc2VsaW51eDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Rvb2xzLWZvci1oYXJkZW5pbmcteW91ci1pbWFnZSc+CisgICAgICAgICAgICA8dGl0bGU+VG9vbHMgZm9yIEhhcmRlbmluZyBZb3VyIEltYWdlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgdG9vbHMgZm9yIG1ha2luZyB5b3VyIGltYWdlCisgICAgICAgICAgICAgICAgbW9yZSBzZWN1cmUuCisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZXNlIHRvb2xzIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXNlY3VyaXR5PC9maWxlbmFtZT4gbGF5ZXIgb2YgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2knPllvY3RvIFByb2plY3QgU291cmNlIFJlcG9zaXRvcmllczwvdWxpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLXlvdXItb3duLWRpc3RyaWJ1dGlvbic+CisgICAgICAgIDx0aXRsZT5DcmVhdGluZyBZb3VyIE93biBEaXN0cmlidXRpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgYnVpbGQgYW4gaW1hZ2UgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QgYW5kCisgICAgICAgICAgICBkbyBub3QgYWx0ZXIgYW55IGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nbWV0YWRhdGEnPk1ldGFkYXRhPC9saW5rPiwgeW91IGFyZSBjcmVhdGluZyBhCisgICAgICAgICAgICBQb2t5IGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgIElmIHlvdSB3aXNoIHRvIGdhaW4gbW9yZSBjb250cm9sIG92ZXIgcGFja2FnZSBhbHRlcm5hdGl2ZQorICAgICAgICAgICAgc2VsZWN0aW9ucywgY29tcGlsZS10aW1lIG9wdGlvbnMsIGFuZCBvdGhlciBsb3ctbGV2ZWwKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLCB5b3UgY2FuIGNyZWF0ZSB5b3VyIG93biBkaXN0cmlidXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGNyZWF0ZSB5b3VyIG93biBkaXN0cmlidXRpb24sIHRoZSBiYXNpYyBzdGVwcyBjb25zaXN0IG9mCisgICAgICAgICAgICBjcmVhdGluZyB5b3VyIG93biBkaXN0cmlidXRpb24gbGF5ZXIsIGNyZWF0aW5nIHlvdXIgb3duCisgICAgICAgICAgICBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBmaWxlLCBhbmQgdGhlbiBhZGRpbmcgYW55IG5lZWRlZAorICAgICAgICAgICAgY29kZSBhbmQgTWV0YWRhdGEgdG8gdGhlIGxheWVyLgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBzdGVwcyBwcm92aWRlIHNvbWUgbW9yZSBkZXRhaWw6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIGEgbGF5ZXIgZm9yIHlvdXIgbmV3IGRpc3Rybzo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBDcmVhdGUgeW91ciBkaXN0cmlidXRpb24gbGF5ZXIgc28gdGhhdCB5b3UgY2FuIGtlZXAgeW91cgorICAgICAgICAgICAgICAgICAgICBNZXRhZGF0YSBhbmQgY29kZSBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBzZXBhcmF0ZS4KKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgY3JlYXRlIGFuZCB1c2UgeW91ciBvd24KKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIgZm9yIGNvbmZpZ3VyYXRpb24gYW5kIGNvZGUuCisgICAgICAgICAgICAgICAgICAgIFVzaW5nIHlvdXIgb3duIGxheWVyIGFzIGNvbXBhcmVkIHRvIGp1c3QgcGxhY2luZworICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucyBpbiBhIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIG1ha2VzIGl0IGVhc2llciB0byByZXByb2R1Y2UgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgY29uZmlndXJhdGlvbiB3aGVuIHVzaW5nIG11bHRpcGxlIGJ1aWxkIG1hY2hpbmVzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjcmVhdGluZy1hLWdlbmVyYWwtbGF5ZXItdXNpbmctdGhlLXlvY3RvLWxheWVyLXNjcmlwdCc+Q3JlYXRpbmcgYSBHZW5lcmFsIExheWVyIFVzaW5nIHRoZSB5b2N0by1sYXllciBTY3JpcHQ8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gcXVpY2tseSBzZXQgdXAgYSBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGZpbGUgbmVlZHMgdG8gYmUgY3JlYXRlZCBpbgorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmNvbmYvZGlzdHJvPC9maWxlbmFtZT4gZGlyZWN0b3J5IG9mIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIG5hbWUgaXQgdXNpbmcgeW91ciBkaXN0cmlidXRpb24gbmFtZQorICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+bXlkaXN0cm8uY29uZjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ESVNUUk8nPjxmaWxlbmFtZT5ESVNUUk88L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgZGV0ZXJtaW5lcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgb2YgeW91ciBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjYW4gc3BsaXQgb3V0IHBhcnRzIG9mIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgICAgICAgICAgICAgIGludG8gaW5jbHVkZSBmaWxlcyBhbmQgdGhlbiAicmVxdWlyZSIgdGhlbSBmcm9tIHdpdGhpbgorICAgICAgICAgICAgICAgICAgICB5b3VyIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gcGxhY2UgdGhlIGluY2x1ZGUgZmlsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2Rpc3Ryby9pbmNsdWRlPC9maWxlbmFtZT4gZGlyZWN0b3J5IG9mCisgICAgICAgICAgICAgICAgICAgIHlvdXIgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIEEgY29tbW9uIGV4YW1wbGUgdXNhZ2Ugb2YgaW5jbHVkZSBmaWxlcyB3b3VsZCBiZSB0bworICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZSBvdXQgdGhlIHNlbGVjdGlvbiBvZiBkZXNpcmVkIHZlcnNpb24gYW5kIHJldmlzaW9ucworICAgICAgICAgICAgICAgICAgICBmb3IgaW5kaXZpZHVhbCByZWNpcGVzLgorPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3VyIGNvbmZpZ3VyYXRpb24gZmlsZSBuZWVkcyB0byBzZXQgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICByZXF1aXJlZCB2YXJpYWJsZXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURJU1RST19OQU1FJz48ZmlsZW5hbWU+RElTVFJPX05BTUU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ESVNUUk9fVkVSU0lPTic+PGZpbGVuYW1lPkRJU1RST19WRVJTSU9OPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGZvbGxvd2luZyB2YXJpYWJsZXMgYXJlIG9wdGlvbmFsIGFuZCB5b3UgdHlwaWNhbGx5CisgICAgICAgICAgICAgICAgICAgIHNldCB0aGVtIGZyb20gdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURJU1RST19FWFRSQV9SREVQRU5EUyc+PGZpbGVuYW1lPkRJU1RST19FWFRSQV9SREVQRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURJU1RST19FWFRSQV9SUkVDT01NRU5EUyc+PGZpbGVuYW1lPkRJU1RST19FWFRSQV9SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRDTElCQyc+PGZpbGVuYW1lPlRDTElCQzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8dGlwPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gYmFzZSB5b3VyIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSB2ZXJ5IGJhc2ljIGNvbmZpZ3VyYXRpb24gZnJvbSBPRS1Db3JlLCB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2Rpc3Ryby9kZWZhdWx0c2V0dXAuY29uZjwvZmlsZW5hbWU+IGFzCisgICAgICAgICAgICAgICAgICAgICAgICBhIHJlZmVyZW5jZSBhbmQganVzdCBpbmNsdWRlIHZhcmlhYmxlcyB0aGF0IGRpZmZlcgorICAgICAgICAgICAgICAgICAgICAgICAgYXMgY29tcGFyZWQgdG8gPGZpbGVuYW1lPmRlZmF1bHRzZXR1cC5jb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGNyZWF0ZSBhIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIGZyb20gc2NyYXRjaCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZWZhdWx0c2V0dXAuY29uZjwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXMgZnJvbSBvdGhlciBkaXN0cmlidXRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICBzdWNoIGFzIFBva3kgb3IgQW5nc3Ryb20gYXMgcmVmZXJlbmNlcy4KKyAgICAgICAgICAgICAgICAgICAgPC90aXA+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Qcm92aWRlIG1pc2NlbGxhbmVvdXMgdmFyaWFibGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gZGVmaW5lIGFueSBvdGhlciB2YXJpYWJsZXMgZm9yIHdoaWNoIHlvdSB3YW50IHRvCisgICAgICAgICAgICAgICAgICAgIGNyZWF0ZSBhIGRlZmF1bHQgb3IgZW5mb3JjZSBhcyBwYXJ0IG9mIHRoZSBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBpbmNsdWRlIG5lYXJseSBhbnkgdmFyaWFibGUgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGVzIHlvdSB1c2UgYXJlIG5vdCBsaW1pdGVkIHRvIHRoZSBsaXN0IGluIHRoZQorICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyBidWxsZXRlZCBpdGVtLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UG9pbnQgdG8gWW91ciBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBmaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIHNldCB5b3VyCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ESVNUUk8nPjxmaWxlbmFtZT5ESVNUUk88L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIHBvaW50IHRvIHlvdXIgZGlzdHJpYnV0aW9uJ3MgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91ciBkaXN0cmlidXRpb24ncyBjb25maWd1cmF0aW9uIGZpbGUgaXMKKyAgICAgICAgICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPm15ZGlzdHJvLmNvbmY8L2ZpbGVuYW1lPiwgdGhlbiB5b3UgcG9pbnQKKyAgICAgICAgICAgICAgICAgICAgdG8gaXQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBESVNUUk8gPSAibXlkaXN0cm8iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFkZCBtb3JlIHRvIHRoZSBsYXllciBpZiBuZWNlc3Nhcnk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHlvdXIgbGF5ZXIgdG8gaG9sZCBvdGhlciBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRpb246CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkIHJlY2lwZXMgZm9yIGluc3RhbGxpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0cm8tc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlcyB0aGF0IGFyZSBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5IGluc3RhbGxlZCBieSBhbm90aGVyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSBkaXN0cm8tc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgYXJlIGluY2x1ZGVkIGJ5IGFuIGV4aXN0aW5nIHJlY2lwZSwgeW91IHNob3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCBhbiBhcHBlbmQgZmlsZSAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aG9zZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhbmQgcmVjb21tZW5kYXRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gaG93IHRvIGFkZCByZWNpcGVzIHRvIHlvdXIgbGF5ZXIsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3JlYXRpbmcteW91ci1vd24tbGF5ZXInPkNyZWF0aW5nIFlvdXIgT3duIExheWVyPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYmVzdC1wcmFjdGljZXMtdG8tZm9sbG93LXdoZW4tY3JlYXRpbmctbGF5ZXJzJz5CZXN0IFByYWN0aWNlcyB0byBGb2xsb3cgV2hlbiBDcmVhdGluZyBMYXllcnM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFkZCBhbnkgaW1hZ2UgcmVjaXBlcyB0aGF0IGFyZSBzcGVjaWZpYworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHlvdXIgZGlzdHJpYnV0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFkZCBhIDxmaWxlbmFtZT5wc3BsYXNoPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQgZmlsZSBmb3IgYSBicmFuZGVkIHNwbGFzaCBzY3JlZW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGFwcGVuZCBmaWxlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1iYmFwcGVuZC1maWxlcyc+VXNpbmcgLmJiYXBwZW5kIEZpbGVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFkZCBhbnkgb3RoZXIgYXBwZW5kIGZpbGVzIHRvIG1ha2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b20gY2hhbmdlcyB0aGF0IGFyZSBzcGVjaWZpYyB0byBpbmRpdmlkdWFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdjcmVhdGluZy1hLWN1c3RvbS10ZW1wbGF0ZS1jb25maWd1cmF0aW9uLWRpcmVjdG9yeSc+CisgICAgICAgIDx0aXRsZT5DcmVhdGluZyBhIEN1c3RvbSBUZW1wbGF0ZSBDb25maWd1cmF0aW9uIERpcmVjdG9yeTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgYXJlIHByb2R1Y2luZyB5b3VyIG93biBjdXN0b21pemVkIHZlcnNpb24KKyAgICAgICAgICAgIG9mIHRoZSBidWlsZCBzeXN0ZW0gZm9yIHVzZSBieSBvdGhlciB1c2VycywgeW91IG1pZ2h0CisgICAgICAgICAgICB3YW50IHRvIGN1c3RvbWl6ZSB0aGUgbWVzc2FnZSBzaG93biBieSB0aGUgc2V0dXAgc2NyaXB0IG9yCisgICAgICAgICAgICB5b3UgbWlnaHQgd2FudCB0byBjaGFuZ2UgdGhlIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXMgKGkuZS4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+KSB0aGF0IGFyZSBjcmVhdGVkIGluCisgICAgICAgICAgICBhIG5ldyBidWlsZCBkaXJlY3RvcnkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCisgICAgICAgICAgICA8ZmlsZW5hbWU+VEVNUExBVEVDT05GPC9maWxlbmFtZT4gdG8gbG9jYXRlIHRoZSBkaXJlY3RvcnkKKyAgICAgICAgICAgIGZyb20gd2hpY2ggaXQgZ2F0aGVycyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIHRoYXQgdWx0aW1hdGVseQorICAgICAgICAgICAgZW5kcyB1cCBpbiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5J3M8L2xpbms+CisgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIDxmaWxlbmFtZT5URU1QTEFURUNPTkY8L2ZpbGVuYW1lPiBpcyBzZXQgYXMKKyAgICAgICAgICAgIGZvbGxvd3MgaW4gdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gcmVwb3NpdG9yeToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVNUExBVEVDT05GPSR7VEVNUExBVEVDT05GOi1tZXRhLXlvY3RvL2NvbmZ9CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGlzIGlzIHRoZSBkaXJlY3RvcnkgdXNlZCBieSB0aGUgYnVpbGQgc3lzdGVtIHRvIGZpbmQgdGVtcGxhdGVzCisgICAgICAgICAgICBmcm9tIHdoaWNoIHRvIGJ1aWxkIHNvbWUga2V5IGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgICAgICAgICBJZiB5b3UgbG9vayBhdCB0aGlzIGRpcmVjdG9yeSwgeW91IHdpbGwgc2VlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmYuc2FtcGxlPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZi5zYW1wbGU8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi1ub3Rlcy50eHQ8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gdXNlcyB0aGVzZSBmaWxlcyB0byBmb3JtIHRoZSByZXNwZWN0aXZlCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUsCisgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUsIGFuZCBkaXNwbGF5IHRoZSBsaXN0IG9mCisgICAgICAgICAgICBCaXRCYWtlIHRhcmdldHMgd2hlbiBydW5uaW5nIHRoZSBzZXR1cCBzY3JpcHQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIG92ZXJyaWRlIHRoZXNlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlcyB3aXRoCisgICAgICAgICAgICBjb25maWd1cmF0aW9ucyB5b3Ugd2FudCB1c2VkIHdpdGhpbiBldmVyeSBuZXcKKyAgICAgICAgICAgIEJ1aWxkIERpcmVjdG9yeSwgc2ltcGx5IHNldCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5URU1QTEFURUNPTkY8L2ZpbGVuYW1lPiB2YXJpYWJsZSB0byB5b3VyIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+VEVNUExBVEVDT05GPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgc2V0IGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPi50ZW1wbGF0ZWNvbmY8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcyBpbiB0aGUKKyAgICAgICAgICAgIHRvcC1sZXZlbAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgIGZvbGRlciAoZS5nLiA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIEVkaXQgdGhlIDxmaWxlbmFtZT4udGVtcGxhdGVjb25mPC9maWxlbmFtZT4gc28gdGhhdCBpdCBjYW4gbG9jYXRlCisgICAgICAgICAgICB5b3VyIGRpcmVjdG9yeS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmVzdCBwcmFjdGljZXMgZGljdGF0ZSB0aGF0IHlvdSBzaG91bGQga2VlcCB5b3VyCisgICAgICAgICAgICB0ZW1wbGF0ZSBjb25maWd1cmF0aW9uIGRpcmVjdG9yeSBpbiB5b3VyIGN1c3RvbSBkaXN0cmlidXRpb24gbGF5ZXIuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGF2ZSBhIGxheWVyIG5hbWVkCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1teWxheWVyPC9maWxlbmFtZT4gbG9jYXRlZCBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5CisgICAgICAgICAgICBhbmQgeW91IHdhbnQgeW91ciB0ZW1wbGF0ZSBjb25maWd1cmF0aW9uIGRpcmVjdG9yeSBuYW1lZAorICAgICAgICAgICAgPGZpbGVuYW1lPm15Y29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgQ2hhbmdpbmcgdGhlIDxmaWxlbmFtZT4udGVtcGxhdGVjb25mPC9maWxlbmFtZT4gYXMgZm9sbG93cworICAgICAgICAgICAgY2F1c2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGxvb2sgaW4geW91ciBkaXJlY3RvcnkKKyAgICAgICAgICAgIGFuZCBiYXNlIGl0cyBjb25maWd1cmF0aW9uIGZpbGVzIG9uIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPiouc2FtcGxlPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlcyBpdCBmaW5kcy4KKyAgICAgICAgICAgIFRoZSBmaW5hbCBjb25maWd1cmF0aW9uIGZpbGVzIChpLmUuCisgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiB1bHRpbWF0ZWx5IHN0aWxsIGVuZCB1cCBpbgorICAgICAgICAgICAgeW91ciBCdWlsZCBEaXJlY3RvcnksIGJ1dCB0aGV5IGFyZSBiYXNlZCBvbiB5b3VyCisgICAgICAgICAgICA8ZmlsZW5hbWU+Ki5zYW1wbGU8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVNUExBVEVDT05GPSR7VEVNUExBVEVDT05GOi1tZXRhLW15bGF5ZXIvbXljb25mfQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBc2lkZSBmcm9tIHRoZSA8ZmlsZW5hbWU+Ki5zYW1wbGU8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGVzLAorICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5jb25mLW5vdGVzLnR4dDwvZmlsZW5hbWU+IGFsc28gcmVzaWRlcyBpbiB0aGUKKyAgICAgICAgICAgIGRlZmF1bHQgPGZpbGVuYW1lPm1ldGEteW9jdG8vY29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIFRoZSBzY3JpcHRzIHRoYXQgc2V0IHVwIHRoZSBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgKGkuZS4KKyAgICAgICAgICAgIDx1bGluayB1cmw9IiZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCI+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgYW5kCisgICAgICAgICAgICA8dWxpbmsgdXJsPSImWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Ij48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3VsaW5rPikKKyAgICAgICAgICAgIHVzZSB0aGlzIGZpbGUgdG8gZGlzcGxheSBCaXRCYWtlIHRhcmdldHMgYXMgcGFydCBvZiB0aGUgc2NyaXB0CisgICAgICAgICAgICBvdXRwdXQuCisgICAgICAgICAgICBDdXN0b21pemluZyB0aGlzIDxmaWxlbmFtZT5jb25mLW5vdGVzLnR4dDwvZmlsZW5hbWU+IGZpbGUgaXMgYQorICAgICAgICAgICAgZ29vZCB3YXkgdG8gbWFrZSBzdXJlIHlvdXIgbGlzdCBvZiBjdXN0b20gdGFyZ2V0cyBhcHBlYXJzCisgICAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBzY3JpcHQncyBvdXRwdXQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEhlcmUgaXMgdGhlIGRlZmF1bHQgbGlzdCBvZiB0YXJnZXRzIGRpc3BsYXllZCBhcyBhIHJlc3VsdCBvZgorICAgICAgICAgICAgcnVubmluZyBlaXRoZXIgb2YgdGhlIHNldHVwIHNjcmlwdHM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFlvdSBjYW4gbm93IHJ1biAnYml0YmFrZSAmbHQ7dGFyZ2V0Jmd0OycKKworICAgICBDb21tb24gdGFyZ2V0cyBhcmU6CisgICAgICAgICBjb3JlLWltYWdlLW1pbmltYWwKKyAgICAgICAgIGNvcmUtaW1hZ2Utc2F0bworICAgICAgICAgbWV0YS10b29sY2hhaW4KKyAgICAgICAgIGFkdC1pbnN0YWxsZXIKKyAgICAgICAgIG1ldGEtaWRlLXN1cHBvcnQKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ2hhbmdpbmcgdGhlIGxpc3RlZCBjb21tb24gdGFyZ2V0cyBpcyBhcyBlYXN5IGFzIGVkaXRpbmcgeW91cgorICAgICAgICAgICAgdmVyc2lvbiBvZiA8ZmlsZW5hbWU+Y29uZi1ub3Rlcy50eHQ8L2ZpbGVuYW1lPiBpbiB5b3VyCisgICAgICAgICAgICBjdXN0b20gdGVtcGxhdGUgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkgYW5kIG1ha2luZyBzdXJlIHlvdQorICAgICAgICAgICAgaGF2ZSA8ZmlsZW5hbWU+VEVNUExBVEVDT05GPC9maWxlbmFtZT4gc2V0IHRvIHlvdXIgZGlyZWN0b3J5LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2J1aWxkaW5nLWEtdGlueS1zeXN0ZW0nPgorICAgICAgICA8dGl0bGU+QnVpbGRpbmcgYSBUaW55IFN5c3RlbTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBWZXJ5IHNtYWxsIGRpc3RyaWJ1dGlvbnMgaGF2ZSBzb21lIHNpZ25pZmljYW50IGFkdmFudGFnZXMgc3VjaAorICAgICAgICAgICAgYXMgcmVxdWlyaW5nIGxlc3Mgb24tZGllIG9yIGluLXBhY2thZ2UgbWVtb3J5IChjaGVhcGVyKSwgYmV0dGVyCisgICAgICAgICAgICBwZXJmb3JtYW5jZSB0aHJvdWdoIGVmZmljaWVudCBjYWNoZSB1c2FnZSwgbG93ZXIgcG93ZXIgcmVxdWlyZW1lbnRzCisgICAgICAgICAgICBkdWUgdG8gbGVzcyBtZW1vcnksIGZhc3RlciBib290IHRpbWVzLCBhbmQgcmVkdWNlZCBkZXZlbG9wbWVudAorICAgICAgICAgICAgb3ZlcmhlYWQuCisgICAgICAgICAgICBTb21lIHJlYWwtd29ybGQgZXhhbXBsZXMgd2hlcmUgYSB2ZXJ5IHNtYWxsIGRpc3RyaWJ1dGlvbiBnaXZlcworICAgICAgICAgICAgeW91IGRpc3RpbmN0IGFkdmFudGFnZXMgYXJlIGRpZ2l0YWwgY2FtZXJhcywgbWVkaWNhbCBkZXZpY2VzLAorICAgICAgICAgICAgYW5kIHNtYWxsIGhlYWRsZXNzIHN5c3RlbXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcmVzZW50cyBpbmZvcm1hdGlvbiB0aGF0IHNob3dzIHlvdSBob3cgeW91IGNhbgorICAgICAgICAgICAgdHJpbSB5b3VyIGRpc3RyaWJ1dGlvbiB0byBldmVuIHNtYWxsZXIgc2l6ZXMgdGhhbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5LXRpbnk8L2ZpbGVuYW1lPiBkaXN0cmlidXRpb24sIHdoaWNoIGlzIGFyb3VuZAorICAgICAgICAgICAgNSBNYnl0ZXMsIHRoYXQgY2FuIGJlIGJ1aWx0IG91dC1vZi10aGUtYm94IHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Rpbnktc3lzdGVtLW92ZXJ2aWV3Jz4KKyAgICAgICAgICAgIDx0aXRsZT5PdmVydmlldzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBwcmVzZW50cyB0aGUgb3ZlcmFsbCBzdGVwcyB5b3UgbmVlZCB0bworICAgICAgICAgICAgICAgIGNvbnNpZGVyIGFuZCBwZXJmb3JtIHRvIGNyZWF0ZSBkaXN0cmlidXRpb25zIHdpdGggc21hbGxlcgorICAgICAgICAgICAgICAgIHJvb3QgZmlsZXN5c3RlbXMsIGFjaGlldmUgZmFzdGVyIGJvb3QgdGltZXMsIG1haW50YWluIHlvdXIgY3JpdGljYWwKKyAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5LCBhbmQgYXZvaWQgaW5pdGlhbCBSQU0gZGlza3M6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZ29hbHMtYW5kLWd1aWRpbmctcHJpbmNpcGxlcyc+RGV0ZXJtaW5lIHlvdXIgZ29hbHMgYW5kIGd1aWRpbmcgcHJpbmNpcGxlcy48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndW5kZXJzdGFuZC13aGF0LWdpdmVzLXlvdXItaW1hZ2Utc2l6ZSc+VW5kZXJzdGFuZCB3aGF0IGNvbnRyaWJ1dGVzIHRvIHlvdXIgaW1hZ2Ugc2l6ZS48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndHJpbS10aGUtcm9vdC1maWxlc3lzdGVtJz5SZWR1Y2UgdGhlIHNpemUgb2YgdGhlIHJvb3QgZmlsZXN5c3RlbS48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndHJpbS10aGUta2VybmVsJz5SZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGtlcm5lbC48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVtb3ZlLXBhY2thZ2UtbWFuYWdlbWVudC1yZXF1aXJlbWVudHMnPkVsaW1pbmF0ZSBwYWNrYWdpbmcgcmVxdWlyZW1lbnRzLjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdsb29rLWZvci1vdGhlci13YXlzLXRvLW1pbmltaXplLXNpemUnPkxvb2sgZm9yIG90aGVyIHdheXMgdG8gbWluaW1pemUgc2l6ZS48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0naXRlcmF0ZS1vbi10aGUtcHJvY2Vzcyc+SXRlcmF0ZSBvbiB0aGUgcHJvY2Vzcy48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdnb2Fscy1hbmQtZ3VpZGluZy1wcmluY2lwbGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5Hb2FscyBhbmQgR3VpZGluZyBQcmluY2lwbGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQmVmb3JlIHlvdSBjYW4gcmVhY2ggeW91ciBkZXN0aW5hdGlvbiwgeW91IG5lZWQgdG8ga25vdworICAgICAgICAgICAgICAgIHdoZXJlIHlvdSBhcmUgZ29pbmcuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGxpc3QgdGhhdCB5b3UgY2FuIHVzZSBhcyBhIGd1aWRlIHdoZW4KKyAgICAgICAgICAgICAgICBjcmVhdGluZyB2ZXJ5IHNtYWxsIGRpc3RyaWJ1dGlvbnM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRldGVybWluZSBob3cgbXVjaCBzcGFjZSB5b3UgbmVlZAorICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gYSBrZXJuZWwgdGhhdCBpcyAxIE1ieXRlIG9yIGxlc3MgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBhIHJvb3QgZmlsZXN5c3RlbSB0aGF0IGlzIDMgTWJ5dGVzIG9yIGxlc3MpLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5GaW5kIHRoZSBhcmVhcyB0aGF0IGFyZSBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRha2luZyA5MCUgb2YgdGhlIHNwYWNlIGFuZCBjb25jZW50cmF0ZSBvbiByZWR1Y2luZworICAgICAgICAgICAgICAgICAgICAgICAgdGhvc2UgYXJlYXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvIG5vdCBjcmVhdGUgYW55IGRpZmZpY3VsdCAiaGFja3MiCisgICAgICAgICAgICAgICAgICAgICAgICB0byBhY2hpZXZlIHlvdXIgZ29hbHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5MZXZlcmFnZSB0aGUgZGV2aWNlLXNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+V29yayBpbiBhIHNlcGFyYXRlIGxheWVyIHNvIHRoYXQgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBrZWVwIGNoYW5nZXMgaXNvbGF0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGNyZWF0ZSBsYXllcnMsIHNlZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlICI8bGluayBsaW5rZW5kPSd1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcgYW5kIENyZWF0aW5nIExheWVyczwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1bmRlcnN0YW5kLXdoYXQtZ2l2ZXMteW91ci1pbWFnZS1zaXplJz4KKyAgICAgICAgICAgIDx0aXRsZT5VbmRlcnN0YW5kIFdoYXQgQ29udHJpYnV0ZXMgdG8gWW91ciBJbWFnZSBTaXplPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSXQgaXMgZWFzaWVzdCB0byBoYXZlIHNvbWV0aGluZyB0byBzdGFydCB3aXRoIHdoZW4gY3JlYXRpbmcKKyAgICAgICAgICAgICAgICB5b3VyIG93biBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIFlvY3RvIFByb2plY3Qgb3V0LW9mLXRoZS1ib3ggdG8gY3JlYXRlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5LXRpbnk8L2ZpbGVuYW1lPiBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgVWx0aW1hdGVseSwgeW91IHdpbGwgd2FudCB0byBtYWtlIGNoYW5nZXMgaW4geW91ciBvd24KKyAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24gdGhhdCBhcmUgbGlrZWx5IG1vZGVsZWQgYWZ0ZXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS10aW55PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRvIHVzZSA8ZmlsZW5hbWU+cG9reS10aW55PC9maWxlbmFtZT4gaW4geW91ciBidWlsZCwKKyAgICAgICAgICAgICAgICAgICAgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRElTVFJPJz48ZmlsZW5hbWU+RElTVFJPPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSB0byAicG9reS10aW55IgorICAgICAgICAgICAgICAgICAgICBhcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjcmVhdGluZy15b3VyLW93bi1kaXN0cmlidXRpb24nPkNyZWF0aW5nIFlvdXIgT3duIERpc3RyaWJ1dGlvbjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVbmRlcnN0YW5kaW5nIHNvbWUgbWVtb3J5IGNvbmNlcHRzIHdpbGwgaGVscCB5b3UgcmVkdWNlIHRoZQorICAgICAgICAgICAgICAgIHN5c3RlbSBzaXplLgorICAgICAgICAgICAgICAgIE1lbW9yeSBjb25zaXN0cyBvZiBzdGF0aWMsIGR5bmFtaWMsIGFuZCB0ZW1wb3JhcnkgbWVtb3J5LgorICAgICAgICAgICAgICAgIFN0YXRpYyBtZW1vcnkgaXMgdGhlIFRFWFQgKGNvZGUpLCBEQVRBIChpbml0aWFsaXplZCBkYXRhCisgICAgICAgICAgICAgICAgaW4gdGhlIGNvZGUpLCBhbmQgQlNTICh1bmluaXRpYWxpemVkIGRhdGEpIHNlY3Rpb25zLgorICAgICAgICAgICAgICAgIER5bmFtaWMgbWVtb3J5IHJlcHJlc2VudHMgbWVtb3J5IHRoYXQgaXMgYWxsb2NhdGVkIGF0IHJ1bnRpbWU6CisgICAgICAgICAgICAgICAgc3RhY2tzLCBoYXNoIHRhYmxlcywgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgICAgIFRlbXBvcmFyeSBtZW1vcnkgaXMgcmVjb3ZlcmVkIGFmdGVyIHRoZSBib290IHByb2Nlc3MuCisgICAgICAgICAgICAgICAgVGhpcyBtZW1vcnkgY29uc2lzdHMgb2YgbWVtb3J5IHVzZWQgZm9yIGRlY29tcHJlc3NpbmcKKyAgICAgICAgICAgICAgICB0aGUga2VybmVsIGFuZCBmb3IgdGhlIDxmaWxlbmFtZT5fX2luaXRfXzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZnVuY3Rpb25zLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBoZWxwIHlvdSBzZWUgd2hlcmUgeW91IGN1cnJlbnRseSBhcmUgd2l0aCBrZXJuZWwgYW5kIHJvb3QKKyAgICAgICAgICAgICAgICBmaWxlc3lzdGVtIHNpemVzLCB5b3UgY2FuIHVzZSB0d28gdG9vbHMgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4gaW4KKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPnNjcmlwdHMvdGlueS88L2ZpbGVuYW1lPiBkaXJlY3Rvcnk6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5rc2l6ZS5weTwvZmlsZW5hbWU+OiBSZXBvcnRzCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQgc2l6ZXMgZm9yIHRoZSBrZXJuZWwgYnVpbGQgb2JqZWN0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmRpcnNpemUucHk8L2ZpbGVuYW1lPjogUmVwb3J0cworICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50IHNpemVzIGZvciB0aGUgcm9vdCBmaWxlc3lzdGVtLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIFRoaXMgbmV4dCB0b29sIGFuZCBjb21tYW5kIGhlbHAgeW91IG9yZ2FuaXplIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICBmcmFnbWVudHMgYW5kIHZpZXcgZmlsZSBkZXBlbmRlbmNpZXMgaW4gYSBodW1hbi1yZWFkYWJsZSBmb3JtOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+bWVyZ2VfY29uZmlnLnNoPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBIZWxwcyB5b3UgbWFuYWdlIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIGZyYWdtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluIHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgICAgICBXaXRoIHRoaXMgdG9vbCwgeW91IGNhbiBtZXJnZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50cyB0b2dldGhlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0b29sIGFsbG93cyB5b3UgdG8gbWFrZSBvdmVycmlkZXMgYW5kIHdhcm5zIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgb2YgYW55IG1pc3NpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRvb2wgaXMgaWRlYWwgZm9yIGFsbG93aW5nIHlvdSB0byBpdGVyYXRlIG9uCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucywgY3JlYXRlIG1pbmltYWwgY29uZmlndXJhdGlvbnMsIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIGRpZmZlcmVudCBtYWNoaW5lcworICAgICAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBoYXZpbmcgdG8gZHVwbGljYXRlIHlvdXIgcHJvY2Vzcy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgPGZpbGVuYW1lPm1lcmdlX2NvbmZpZy5zaDwvZmlsZW5hbWU+IHNjcmlwdCBpcworICAgICAgICAgICAgICAgICAgICAgICAgcGFydCBvZiB0aGUgTGludXggWW9jdG8ga2VybmVsIEdpdCByZXBvc2l0b3JpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE0PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xMDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuODwvZmlsZW5hbWU+LCBhbmQgc28gZm9ydGgpCisgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzL2tjb25maWc8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY29uZmlndXJhdGlvbiBmcmFnbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7I2dlbmVyYXRpbmctY29uZmlndXJhdGlvbi1maWxlcyc+R2VuZXJhdGluZyBDb25maWd1cmF0aW9uIEZpbGVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgTWFudWFsIGFuZCB0aGUgIjxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLWNvbmZpZy1mcmFnbWVudHMnPkNyZWF0aW5nIENvbmZpZ3VyYXRpb24gRnJhZ21lbnRzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24sIHdoaWNoIGlzIGluIHRoaXMgbWFudWFsLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJpdGJha2UgLXUgZGVwZXhwIC1nIDxyZXBsYWNlYWJsZT5iaXRiYWtlX3RhcmdldDwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGUgQml0QmFrZSBjb21tYW5kIHdpdGggdGhlc2Ugb3B0aW9ucyBicmluZ3MgdXAKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgRGVwZW5kZW5jeSBFeHBsb3JlciBmcm9tIHdoaWNoIHlvdSBjYW4gdmlldyBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBhbGxvd3MgeW91IHRvIG1ha2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWVkIGRlY2lzaW9ucyB3aGVuIGN1dHRpbmcgb3V0IHZhcmlvdXMgcGllY2VzIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsIGFuZCByb290IGZpbGVzeXN0ZW0uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndHJpbS10aGUtcm9vdC1maWxlc3lzdGVtJz4KKyAgICAgICAgICAgIDx0aXRsZT5UcmltIHRoZSBSb290IEZpbGVzeXN0ZW08L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcm9vdCBmaWxlc3lzdGVtIGlzIG1hZGUgdXAgb2YgcGFja2FnZXMgZm9yIGJvb3RpbmcsCisgICAgICAgICAgICAgICAgbGlicmFyaWVzLCBhbmQgYXBwbGljYXRpb25zLgorICAgICAgICAgICAgICAgIFRvIGNoYW5nZSB0aGluZ3MsIHlvdSBjYW4gY29uZmlndXJlIGhvdyB0aGUgcGFja2FnaW5nIGhhcHBlbnMsCisgICAgICAgICAgICAgICAgd2hpY2ggY2hhbmdlcyB0aGUgd2F5IHlvdSBidWlsZCB0aGVtLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBtb2RpZnkgdGhlIGZpbGVzeXN0ZW0gaXRzZWxmIG9yIHNlbGVjdCBhIGRpZmZlcmVudAorICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZpcnN0LCBmaW5kIG91dCB3aGF0IGlzIGhvZ2dpbmcgeW91ciByb290IGZpbGVzeXN0ZW0gYnkgcnVubmluZyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlyc2l6ZS5weTwvZmlsZW5hbWU+IHNjcmlwdCBmcm9tIHlvdXIgcm9vdCBkaXJlY3Rvcnk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIDxyZXBsYWNlYWJsZT5yb290LWRpcmVjdG9yeS1vZi1pbWFnZTwvcmVwbGFjZWFibGU+CisgICAgICQgZGlyc2l6ZS5weSAxMDAwMDAgPiBkaXJzaXplLTEwMGsubG9nCisgICAgICQgY2F0IGRpcnNpemUtMTAway5sb2cKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhcHBseSBhIGZpbHRlciB0byB0aGUgc2NyaXB0IHRvIGlnbm9yZSBmaWxlcyB1bmRlcgorICAgICAgICAgICAgICAgIGEgY2VydGFpbiBzaXplLgorICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBleGFtcGxlIGZpbHRlcnMgb3V0IGFueSBmaWxlcyBiZWxvdyAxMDAgS2J5dGVzLgorICAgICAgICAgICAgICAgIFRoZSBzaXplcyByZXBvcnRlZCBieSB0aGUgdG9vbCBhcmUgdW5jb21wcmVzc2VkLCBhbmQgdGh1cworICAgICAgICAgICAgICAgIHdpbGwgYmUgc21hbGxlciBieSBhIHJlbGF0aXZlbHkgY29uc3RhbnQgZmFjdG9yIGluIGEKKyAgICAgICAgICAgICAgICBjb21wcmVzc2VkIHJvb3QgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSBleGFtaW5lIHlvdXIgbG9nIGZpbGUsIHlvdSBjYW4gZm9jdXMgb24gYXJlYXMgb2YgdGhlCisgICAgICAgICAgICAgICAgcm9vdCBmaWxlc3lzdGVtIHRoYXQgdGFrZSB1cCBsYXJnZSBhbW91bnRzIG9mIG1lbW9yeS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gYmUgc3VyZSB0aGF0IHdoYXQgeW91IGVsaW1pbmF0ZSBkb2VzIG5vdCBjcmlwcGxlCisgICAgICAgICAgICAgICAgdGhlIGZ1bmN0aW9uYWxpdHkgeW91IG5lZWQuCisgICAgICAgICAgICAgICAgT25lIHdheSB0byBzZWUgaG93IHBhY2thZ2VzIHJlbGF0ZSB0byBlYWNoIG90aGVyIGlzIGJ5IHVzaW5nCisgICAgICAgICAgICAgICAgdGhlIERlcGVuZGVuY3kgRXhwbG9yZXIgVUkgd2l0aCB0aGUgQml0QmFrZSBjb21tYW5kOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCA8cmVwbGFjZWFibGU+aW1hZ2UtZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT4KKyAgICAgJCBiaXRiYWtlIC11IGRlcGV4cCAtZyA8cmVwbGFjZWFibGU+aW1hZ2U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIGludGVyZmFjZSB0byBzZWxlY3QgcG90ZW50aWFsIHBhY2thZ2VzIHlvdSB3aXNoIHRvCisgICAgICAgICAgICAgICAgZWxpbWluYXRlIGFuZCBzZWUgdGhlaXIgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXBzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIGRlY2lkaW5nIGhvdyB0byByZWR1Y2UgdGhlIHNpemUsIGdldCByaWQgb2YgcGFja2FnZXMgdGhhdAorICAgICAgICAgICAgICAgIHJlc3VsdCBpbiBtaW5pbWFsIGltcGFjdCBvbiB0aGUgZmVhdHVyZSBzZXQuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBtaWdodCBub3QgbmVlZCBhIFZHQSBkaXNwbGF5LgorICAgICAgICAgICAgICAgIE9yLCB5b3UgbWlnaHQgYmUgYWJsZSB0byBnZXQgYnkgd2l0aCA8ZmlsZW5hbWU+ZGV2dG1wZnM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+bWRldjwvZmlsZW5hbWU+IGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dWRldjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVc2UgeW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgdG8gbWFrZSBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0byBlbGltaW5hdGUgPGZpbGVuYW1lPnVkZXY8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2xpYjwvZmlsZW5hbWU+LCBzZXQgdGhlIGZvbGxvd2luZyBpbiB0aGUKKyAgICAgICAgICAgICAgICBsb2NhbCBjb25maWd1cmF0aW9uIGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBWSVJUVUFMLVJVTlRJTUVfZGV2X21hbmFnZXIgPSAiIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRmluYWxseSwgeW91IHNob3VsZCBjb25zaWRlciBleGFjdGx5IHRoZSB0eXBlIG9mIHJvb3QKKyAgICAgICAgICAgICAgICBmaWxlc3lzdGVtIHlvdSBuZWVkIHRvIG1lZXQgeW91ciBuZWVkcyB3aGlsZSBhbHNvIHJlZHVjaW5nCisgICAgICAgICAgICAgICAgaXRzIHNpemUuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGNvbnNpZGVyIDxmaWxlbmFtZT5jcmFtZnM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3F1YXNoZnM8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPnViaWZzPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmV4dDI8L2ZpbGVuYW1lPiwgb3IgYW4gPGZpbGVuYW1lPmluaXRyYW1mczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdXNpbmcgPGZpbGVuYW1lPmluaXRyYW1mczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEJlIGF3YXJlIHRoYXQgPGZpbGVuYW1lPmV4dDM8L2ZpbGVuYW1lPiByZXF1aXJlcyBhIDEgTWJ5dGUKKyAgICAgICAgICAgICAgICBqb3VybmFsLgorICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgb2theSB3aXRoIHJ1bm5pbmcgcmVhZC1vbmx5LCB5b3UgZG8gbm90IG5lZWQgdGhpcworICAgICAgICAgICAgICAgIGpvdXJuYWwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEFmdGVyIGVhY2ggcm91bmQgb2YgZWxpbWluYXRpb24sIHlvdSBuZWVkIHRvIHJlYnVpbGQgeW91cgorICAgICAgICAgICAgICAgIHN5c3RlbSBhbmQgdGhlbiB1c2UgdGhlIHRvb2xzIHRvIHNlZSB0aGUgZWZmZWN0cyBvZiB5b3VyCisgICAgICAgICAgICAgICAgcmVkdWN0aW9ucy4KKyAgICAgICAgICAgIDwvbm90ZT4KKworCisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndHJpbS10aGUta2VybmVsJz4KKyAgICAgICAgICAgIDx0aXRsZT5UcmltIHRoZSBLZXJuZWw8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUga2VybmVsIGlzIGJ1aWx0IGJ5IGluY2x1ZGluZyBwb2xpY2llcyBmb3IgaGFyZHdhcmUtaW5kZXBlbmRlbnQKKyAgICAgICAgICAgICAgICBhc3BlY3RzLgorICAgICAgICAgICAgICAgIFdoYXQgc3Vic3lzdGVtcyBkbyB5b3UgZW5hYmxlPworICAgICAgICAgICAgICAgIEZvciB3aGF0IGFyY2hpdGVjdHVyZSBhcmUgeW91IGJ1aWxkaW5nPworICAgICAgICAgICAgICAgIFdoaWNoIGRyaXZlcnMgZG8geW91IGJ1aWxkIGJ5IGRlZmF1bHQ/CisgICAgICAgICAgICAgICAgPG5vdGU+WW91IGNhbiBtb2RpZnkgdGhlIGtlcm5lbCBzb3VyY2UgaWYgeW91IHdhbnQgdG8gaGVscAorICAgICAgICAgICAgICAgICAgICB3aXRoIGJvb3QgdGltZS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFJ1biB0aGUgPGZpbGVuYW1lPmtzaXplLnB5PC9maWxlbmFtZT4gc2NyaXB0IGZyb20gdGhlIHRvcC1sZXZlbAorICAgICAgICAgICAgICAgIExpbnV4IGJ1aWxkIGRpcmVjdG9yeSB0byBnZXQgYW4gaWRlYSBvZiB3aGF0IGlzIG1ha2luZyB1cAorICAgICAgICAgICAgICAgIHRoZSBrZXJuZWw6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIDxyZXBsYWNlYWJsZT50b3AtbGV2ZWwtbGludXgtYnVpbGQtZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT4KKyAgICAgJCBrc2l6ZS5weSA+IGtzaXplLmxvZworICAgICAkIGNhdCBrc2l6ZS5sb2cKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgV2hlbiB5b3UgZXhhbWluZSB0aGUgbG9nLCB5b3Ugd2lsbCBzZWUgaG93IG11Y2ggc3BhY2UgaXMKKyAgICAgICAgICAgICAgICB0YWtlbiB1cCB3aXRoIHRoZSBidWlsdC1pbiA8ZmlsZW5hbWU+Lm88L2ZpbGVuYW1lPiBmaWxlcyBmb3IKKyAgICAgICAgICAgICAgICBkcml2ZXJzLCBuZXR3b3JraW5nLCBjb3JlIGtlcm5lbCBmaWxlcywgZmlsZXN5c3RlbSwgc291bmQsCisgICAgICAgICAgICAgICAgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgICAgIFRoZSBzaXplcyByZXBvcnRlZCBieSB0aGUgdG9vbCBhcmUgdW5jb21wcmVzc2VkLCBhbmQgdGh1cworICAgICAgICAgICAgICAgIHdpbGwgYmUgc21hbGxlciBieSBhIHJlbGF0aXZlbHkgY29uc3RhbnQgZmFjdG9yIGluIGEgY29tcHJlc3NlZAorICAgICAgICAgICAgICAgIGtlcm5lbCBpbWFnZS4KKyAgICAgICAgICAgICAgICBMb29rIHRvIHJlZHVjZSB0aGUgYXJlYXMgdGhhdCBhcmUgbGFyZ2UgYW5kIHRha2luZyB1cCBhcm91bmQKKyAgICAgICAgICAgICAgICB0aGUgIjkwJSBydWxlLiIKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gZXhhbWluZSwgb3IgZHJpbGwgZG93biwgaW50byBhbnkgcGFydGljdWxhciBhcmVhLCB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1kPC9maWxlbmFtZT4gb3B0aW9uIHdpdGggdGhlIHNjcmlwdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQga3NpemUucHkgLWQgPiBrc2l6ZS5sb2cKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVXNpbmcgdGhpcyBvcHRpb24gYnJlYWtzIG91dCB0aGUgaW5kaXZpZHVhbCBmaWxlIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgZm9yIGVhY2ggYXJlYSBvZiB0aGUga2VybmVsIChlLmcuIGRyaXZlcnMsIG5ldHdvcmtpbmcsIGFuZAorICAgICAgICAgICAgICAgIHNvIGZvcnRoKS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNlIHlvdXIgbG9nIGZpbGUgdG8gc2VlIHdoYXQgeW91IGNhbiBlbGltaW5hdGUgZnJvbSB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgYmFzZWQgb24gZmVhdHVyZXMgeW91IGNhbiBsZXQgZ28uCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgbm90IGdvaW5nIHRvIG5lZWQgc291bmQsIHlvdSBkbyBub3QKKyAgICAgICAgICAgICAgICBuZWVkIGFueSBkcml2ZXJzIHRoYXQgc3VwcG9ydCBzb3VuZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQWZ0ZXIgZmlndXJpbmcgb3V0IHdoYXQgdG8gZWxpbWluYXRlLCB5b3UgbmVlZCB0byByZWNvbmZpZ3VyZQorICAgICAgICAgICAgICAgIHRoZSBrZXJuZWwgdG8gcmVmbGVjdCB0aG9zZSBjaGFuZ2VzIGR1cmluZyB0aGUgbmV4dCBidWlsZC4KKyAgICAgICAgICAgICAgICBZb3UgY291bGQgcnVuIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4gYW5kIG1ha2UgYWxsIHlvdXIKKyAgICAgICAgICAgICAgICBjaGFuZ2VzIGF0IG9uY2UuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhhdCBtYWtlcyBpdCBkaWZmaWN1bHQgdG8gc2VlIHRoZSBlZmZlY3RzIG9mIHlvdXIKKyAgICAgICAgICAgICAgICBpbmRpdmlkdWFsIGVsaW1pbmF0aW9ucyBhbmQgYWxzbyBtYWtlcyBpdCBkaWZmaWN1bHQgdG8gcmVwbGljYXRlCisgICAgICAgICAgICAgICAgdGhlIGNoYW5nZXMgZm9yIHBlcmhhcHMgYW5vdGhlciB0YXJnZXQgZGV2aWNlLgorICAgICAgICAgICAgICAgIEEgYmV0dGVyIG1ldGhvZCBpcyB0byBzdGFydCB3aXRoIG5vIGNvbmZpZ3VyYXRpb25zIHVzaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFsbG5vY29uZmlnPC9maWxlbmFtZT4sIGNyZWF0ZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgZnJhZ21lbnRzIGZvciBpbmRpdmlkdWFsIGNoYW5nZXMsIGFuZCB0aGVuIG1hbmFnZSB0aGUKKyAgICAgICAgICAgICAgICBmcmFnbWVudHMgaW50byBhIHNpbmdsZSBjb25maWd1cmF0aW9uIGZpbGUgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWVyZ2VfY29uZmlnLnNoPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhlIHRvb2wgbWFrZXMgaXQgZWFzeSBmb3IgeW91IHRvIGl0ZXJhdGUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBjaGFuZ2UgYW5kIGJ1aWxkIGN5Y2xlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBFYWNoIHRpbWUgeW91IG1ha2UgY29uZmlndXJhdGlvbiBjaGFuZ2VzLCB5b3UgbmVlZCB0byByZWJ1aWxkCisgICAgICAgICAgICAgICAgdGhlIGtlcm5lbCBhbmQgY2hlY2sgdG8gc2VlIHdoYXQgaW1wYWN0IHlvdXIgY2hhbmdlcyBoYWQgb24KKyAgICAgICAgICAgICAgICB0aGUgb3ZlcmFsbCBzaXplLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3JlbW92ZS1wYWNrYWdlLW1hbmFnZW1lbnQtcmVxdWlyZW1lbnRzJz4KKyAgICAgICAgICAgIDx0aXRsZT5SZW1vdmUgUGFja2FnZSBNYW5hZ2VtZW50IFJlcXVpcmVtZW50czwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFBhY2thZ2luZyByZXF1aXJlbWVudHMgYWRkIHNpemUgdG8gdGhlIGltYWdlLgorICAgICAgICAgICAgICAgIE9uZSB3YXkgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBpbWFnZSBpcyB0byByZW1vdmUgYWxsIHRoZQorICAgICAgICAgICAgICAgIHBhY2thZ2luZyByZXF1aXJlbWVudHMgZnJvbSB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgVGhpcyByZWR1Y3Rpb24gaW5jbHVkZXMgYm90aCByZW1vdmluZyB0aGUgcGFja2FnZSBtYW5hZ2VyCisgICAgICAgICAgICAgICAgYW5kIGl0cyB1bmlxdWUgZGVwZW5kZW5jaWVzIGFzIHdlbGwgYXMgcmVtb3ZpbmcgdGhlIHBhY2thZ2UKKyAgICAgICAgICAgICAgICBtYW5hZ2VtZW50IGRhdGEgaXRzZWxmLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBlbGltaW5hdGUgYWxsIHRoZSBwYWNrYWdpbmcgcmVxdWlyZW1lbnRzIGZvciBhbiBpbWFnZSwKKyAgICAgICAgICAgICAgICBiZSBzdXJlIHRoYXQgInBhY2thZ2UtbWFuYWdlbWVudCIgaXMgbm90IHBhcnQgb2YgeW91cgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHN0YXRlbWVudCBmb3IgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgIFdoZW4geW91IHJlbW92ZSB0aGlzIGZlYXR1cmUsIHlvdSBhcmUgcmVtb3ZpbmcgdGhlIHBhY2thZ2UKKyAgICAgICAgICAgICAgICBtYW5hZ2VyIGFzIHdlbGwgYXMgaXRzIGRlcGVuZGVuY2llcyBmcm9tIHRoZSByb290IGZpbGVzeXN0ZW0uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbG9vay1mb3Itb3RoZXItd2F5cy10by1taW5pbWl6ZS1zaXplJz4KKyAgICAgICAgICAgIDx0aXRsZT5Mb29rIGZvciBPdGhlciBXYXlzIHRvIE1pbmltaXplIFNpemU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24geW91ciBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZXMsIG90aGVyIGFyZWFzIHRoYXQgeW91CisgICAgICAgICAgICAgICAgY2FuIHRyaW0gbGlrZWx5IGV4aXN0LgorICAgICAgICAgICAgICAgIFRoZSBrZXkgdG8gZmluZGluZyB0aGVzZSBhcmVhcyBpcyB0aHJvdWdoIHRvb2xzIGFuZCBtZXRob2RzCisgICAgICAgICAgICAgICAgZGVzY3JpYmVkIGhlcmUgY29tYmluZWQgd2l0aCBleHBlcmltZW50YXRpb24gYW5kIGl0ZXJhdGlvbi4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBhIGNvdXBsZSBvZiBhcmVhcyB0byBleHBlcmltZW50IHdpdGg6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gZ2VuZXJhbCwgZm9sbG93IHRoaXMgcHJvY2VzczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UmVtb3ZlIDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB5b3UgdGhpbmsgeW91IGRvIG5vdCBuZWVkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CdWlsZCB5b3VyIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPklmIHRoZSBidWlsZCBmYWlscyBkdWUgdG8gbWlzc2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xzIGluIGEgcGFja2FnZSwgZGV0ZXJtaW5lIGlmIHlvdSBjYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb25maWd1cmUgdGhlIHBhY2thZ2UgdG8gbm90IG5lZWQgdGhvc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBjaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb24gdG8gbm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgd2lkZSBjaGFyYWN0ZXIgc3VwcG9ydCBhcyBpcyBkb25lIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bmN1cnNlczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPciwgaWYgc3VwcG9ydCBmb3IgdGhvc2UgY2hhcmFjdGVycyBpcyBuZWVkZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGVybWluZSB3aGF0IDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIHByb3ZpZGUgdGhlIHN1cHBvcnQgYW5kIHJlc3RvcmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SZWJ1aWxkIGFuZCByZXBlYXQgdGhlIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5idXN5Ym94PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgQnVzeUJveCwgdXNlIGEgcHJvY2VzcyBzaW1pbGFyIGFzIGRlc2NyaWJlZCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgQSBkaWZmZXJlbmNlIGlzIHlvdSB3aWxsIG5lZWQgdG8gYm9vdCB0aGUgcmVzdWx0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gdG8gc2VlIGlmIHlvdSBhcmUgYWJsZSB0byBkbyBldmVyeXRoaW5nIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0IGZyb20gdGhlIHJ1bm5pbmcgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gYmUgc3VyZSB0byBpbnRlZ3JhdGUgY29uZmlndXJhdGlvbiBmcmFnbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGludG8gQnVzeWJveCBiZWNhdXNlIEJ1c3lCb3ggaGFuZGxlcyBpdHMgb3duIGNvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIGFuZCB0aGVuIGFsbG93cyB5b3UgdG8gYWRkIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50cyBvbiB0b3AuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpdGVyYXRlLW9uLXRoZS1wcm9jZXNzJz4KKyAgICAgICAgICAgIDx0aXRsZT5JdGVyYXRlIG9uIHRoZSBQcm9jZXNzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgbm90IHJlYWNoZWQgeW91ciBnb2FscyBvbiBzeXN0ZW0gc2l6ZSwgeW91IG5lZWQKKyAgICAgICAgICAgICAgICB0byBpdGVyYXRlIG9uIHRoZSBwcm9jZXNzLgorICAgICAgICAgICAgICAgIFRoZSBwcm9jZXNzIGlzIHRoZSBzYW1lLgorICAgICAgICAgICAgICAgIFVzZSB0aGUgdG9vbHMgYW5kIHNlZSBqdXN0IHdoYXQgaXMgdGFraW5nIHVwIDkwJSBvZiB0aGUgcm9vdAorICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0gYW5kIHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgRGVjaWRlIHdoYXQgeW91IGNhbiBlbGltaW5hdGUgd2l0aG91dCBsaW1pdGluZyB5b3VyIGRldmljZQorICAgICAgICAgICAgICAgIGJleW9uZCB3aGF0IHlvdSBuZWVkLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24geW91ciBzeXN0ZW0sIGEgZ29vZCBwbGFjZSB0byBsb29rIG1pZ2h0IGJlCisgICAgICAgICAgICAgICAgQnVzeWJveCwgd2hpY2ggcHJvdmlkZXMgYSBzdHJpcHBlZCBkb3duCisgICAgICAgICAgICAgICAgdmVyc2lvbiBvZiBVbml4IHRvb2xzIGluIGEgc2luZ2xlLCBleGVjdXRhYmxlIGZpbGUuCisgICAgICAgICAgICAgICAgWW91IG1pZ2h0IGJlIGFibGUgdG8gZHJvcCB2aXJ0dWFsIHRlcm1pbmFsIHNlcnZpY2VzIG9yIHBlcmhhcHMKKyAgICAgICAgICAgICAgICBpcHY2LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2J1aWxkaW5nLWltYWdlcy1mb3ItbW9yZS10aGFuLW9uZS1tYWNoaW5lJz4KKyAgICAgICAgPHRpdGxlPkJ1aWxkaW5nIEltYWdlcyBmb3IgTW9yZSB0aGFuIE9uZSBNYWNoaW5lPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgY29tbW9uIHNjZW5hcmlvIGRldmVsb3BlcnMgZmFjZSBpcyBjcmVhdGluZyBpbWFnZXMgZm9yIHNldmVyYWwKKyAgICAgICAgICAgIGRpZmZlcmVudCBtYWNoaW5lcyB0aGF0IHVzZSB0aGUgc2FtZSBzb2Z0d2FyZSBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgIEluIHRoaXMgc2l0dWF0aW9uLCBpdCBpcyB0ZW1wdGluZyB0byBzZXQgdGhlCisgICAgICAgICAgICB0dW5pbmdzIGFuZCBvcHRpbWl6YXRpb24gZmxhZ3MgZm9yIGVhY2ggYnVpbGQgc3BlY2lmaWNhbGx5IGZvcgorICAgICAgICAgICAgdGhlIHRhcmdldGVkIGhhcmR3YXJlIChpLmUuICJtYXhpbmcgb3V0IiB0aGUgdHVuaW5ncykuCisgICAgICAgICAgICBEb2luZyBzbyBjYW4gY29uc2lkZXJhYmx5IGFkZCB0byBidWlsZCB0aW1lcyBhbmQgcGFja2FnZSBmZWVkCisgICAgICAgICAgICBtYWludGVuYW5jZSBjb2xsZWN0aXZlbHkgZm9yIHRoZSBtYWNoaW5lcy4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCBzZWxlY3RpbmcgdHVuZXMgdGhhdCBhcmUgZXh0cmVtZWx5IHNwZWNpZmljIHRvIGEKKyAgICAgICAgICAgIENQVSBjb3JlIHVzZWQgaW4gYSBzeXN0ZW0gbWlnaHQgZW5hYmxlIHNvbWUgbWljcm8gb3B0aW1pemF0aW9ucworICAgICAgICAgICAgaW4gR0NDIGZvciB0aGF0IHBhcnRpY3VsYXIgc3lzdGVtIGJ1dCB3b3VsZCBvdGhlcndpc2Ugbm90IGdhaW4KKyAgICAgICAgICAgIHlvdSBtdWNoIG9mIGEgcGVyZm9ybWFuY2UgZGlmZmVyZW5jZSBhY3Jvc3MgdGhlIG90aGVyIHN5c3RlbXMKKyAgICAgICAgICAgIGFzIGNvbXBhcmVkIHRvIHVzaW5nIGEgbW9yZSBnZW5lcmFsIHR1bmluZyBhY3Jvc3MgYWxsIHRoZSBidWlsZHMKKyAgICAgICAgICAgIChlLmcuIHNldHRpbmcKKyAgICAgICAgICAgIDx1bGluayB1cmw9J3Zhci1ERUZBVUxUVFVORSc+PGZpbGVuYW1lPkRFRkFVTFRUVU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgc3BlY2lmaWNhbGx5IGZvciBlYWNoIG1hY2hpbmUncyBidWlsZCkuCisgICAgICAgICAgICBSYXRoZXIgdGhhbiAibWF4IG91dCIgZWFjaCBidWlsZCdzIHR1bmluZ3MsIHlvdSBjYW4gdGFrZSBzdGVwcyB0aGF0CisgICAgICAgICAgICBjYXVzZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byByZXVzZSBzb2Z0d2FyZSBhY3Jvc3MgdGhlCisgICAgICAgICAgICB2YXJpb3VzIG1hY2hpbmVzIHdoZXJlIGl0IG1ha2VzIHNlbnNlLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgYnVpbGQgc3BlZWQgYW5kIHBhY2thZ2UgZmVlZCBtYWludGVuYW5jZSBhcmUgY29uc2lkZXJhdGlvbnMsCisgICAgICAgICAgICB5b3Ugc2hvdWxkIGNvbnNpZGVyIHRoZSBwb2ludHMgaW4gdGhpcyBzZWN0aW9uIHRoYXQgY2FuIGhlbHAgeW91CisgICAgICAgICAgICBvcHRpbWl6ZSB5b3VyIHR1bmluZ3MgdG8gYmVzdCBjb25zaWRlciBidWlsZCB0aW1lcyBhbmQgcGFja2FnZQorICAgICAgICAgICAgZmVlZCBtYWludGVuYW5jZS4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TaGFyZSB0aGUgQnVpbGQgRGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIElmIGF0IGFsbCBwb3NzaWJsZSwgc2hhcmUgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGFjcm9zcyBidWlsZHMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHN1cHBvcnRzIHN3aXRjaGluZyBiZXR3ZWVuIGRpZmZlcmVudAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcyBpbiB0aGUgc2FtZSA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgcHJhY3RpY2UgaXMgd2VsbCBzdXBwb3J0ZWQgYW5kIHJlZ3VsYXJseSB1c2VkIGJ5CisgICAgICAgICAgICAgICAgICAgIGRldmVsb3BlcnMgd2hlbiBidWlsZGluZyBmb3IgbXVsdGlwbGUgbWFjaGluZXMuCisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHVzZSB0aGUgc2FtZSA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4gZm9yCisgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlIG1hY2hpbmUgYnVpbGRzLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjYW4KKyAgICAgICAgICAgICAgICAgICAgcmV1c2UgdGhlIGV4aXN0aW5nIG5hdGl2ZSBhbmQgb2Z0ZW4gY3Jvc3MtcmVjaXBlcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgbWFjaGluZXMuCisgICAgICAgICAgICAgICAgICAgIFRodXMsIGJ1aWxkIHRpbWUgZGVjcmVhc2VzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRElTVFJPJz48ZmlsZW5hbWU+RElTVFJPPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MgY2hhbmdlIG9yIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMgdGhlIGZpbGVzeXN0ZW0gbGF5b3V0LCB5b3UgbmVlZCB0byB3b3JrIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgY2xlYW4gPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgU2hhcmluZyA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4gdW5kZXIgdGhlc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNpcmN1bXN0YW5jZXMgbWlnaHQgd29yayBidXQgc2luY2UgaXQgaXMgbm90CisgICAgICAgICAgICAgICAgICAgICAgICBndWFyYW50ZWVkLCB5b3Ugc2hvdWxkIHVzZSBhIGNsZWFuCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FbmFibGUgdGhlIEFwcHJvcHJpYXRlIFBhY2thZ2UgQXJjaGl0ZWN0dXJlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGVuYWJsZXMgdGhyZWUKKyAgICAgICAgICAgICAgICAgICAgbGV2ZWxzIG9mIHBhY2thZ2UgYXJjaGl0ZWN0dXJlczogImFsbCIsICJ0dW5lIiBvciAicGFja2FnZSIsCisgICAgICAgICAgICAgICAgICAgIGFuZCAibWFjaGluZSIuCisgICAgICAgICAgICAgICAgICAgIEFueSBnaXZlbiByZWNpcGUgdXN1YWxseSBzZWxlY3RzIG9uZSBvZiB0aGVzZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZXMgKHR5cGVzKSBmb3IgaXRzIG91dHB1dC4KKyAgICAgICAgICAgICAgICAgICAgRGVwZW5kaW5nIGZvciB3aGF0IGEgZ2l2ZW4gcmVjaXBlIGNyZWF0ZXMgcGFja2FnZXMsIG1ha2luZworICAgICAgICAgICAgICAgICAgICBzdXJlIHlvdSBlbmFibGUgdGhlIGFwcHJvcHJpYXRlIHBhY2thZ2UgYXJjaGl0ZWN0dXJlIGNhbgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RseSBpbXBhY3QgdGhlIGJ1aWxkIHRpbWUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5BIHJlY2lwZSB0aGF0IGp1c3QgZ2VuZXJhdGVzIHNjcmlwdHMgY2FuIGVuYWJsZQorICAgICAgICAgICAgICAgICAgICAiYWxsIiBhcmNoaXRlY3R1cmUgYmVjYXVzZSB0aGVyZSBhcmUgbm8gYmluYXJpZXMgdG8gYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIFRvIHNwZWNpZmljYWxseSBlbmFibGUgImFsbCIgYXJjaGl0ZWN0dXJlLCBiZSBzdXJlIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGluaGVyaXRzIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1hbGxhcmNoJz48ZmlsZW5hbWU+YWxsYXJjaDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY2xhc3MgaXMgdXNlZnVsIGZvciAiYWxsIiBhcmNoaXRlY3R1cmVzIGJlY2F1c2UgaXQKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlcyBtYW55IHZhcmlhYmxlcyBzbyBwYWNrYWdlcyBjYW4gYmUgdXNlZCBhY3Jvc3MKKyAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdXIgcmVjaXBlIG5lZWRzIHRvIGdlbmVyYXRlIHBhY2thZ2VzIHRoYXQgYXJlCisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUtc3BlY2lmaWMgb3Igd2hlbiBvbmUgb2YgdGhlIGJ1aWxkIG9yIHJ1bnRpbWUKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzIGlzIGFscmVhZHkgbWFjaGluZS1hcmNoaXRlY3R1cmUgZGVwZW5kZW50LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBtYWtlcyB5b3VyIHJlY2lwZSBhbHNvIG1hY2hpbmUtYXJjaGl0ZWN0dXJlIGRlcGVuZGVudCwKKyAgICAgICAgICAgICAgICAgICAgbWFrZSBzdXJlIHlvdXIgcmVjaXBlIGVuYWJsZXMgdGhlICJtYWNoaW5lIiBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORV9BUkNIJz48ZmlsZW5hbWU+TUFDSElORV9BUkNIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IGRvIG5vdCBzcGVjaWZpY2FsbHkgZW5hYmxlIGEgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VfQVJDSCc+PGZpbGVuYW1lPlBBQ0tBR0VfQVJDSDwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGRlZmF1bHRzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVFVORV9QS0dBUkNIJz48ZmlsZW5hbWU+VFVORV9QS0dBUkNIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBzZXR0aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VfQVJDSCA9ICIke1RVTkVfUEtHQVJDSH0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DaG9vc2UgYSBHZW5lcmljIFR1bmluZyBGaWxlIGlmIFBvc3NpYmxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFNvbWUgdHVuZXMgYXJlIG1vcmUgZ2VuZXJpYyBhbmQgY2FuIHJ1biBvbiBtdWx0aXBsZSB0YXJnZXRzCisgICAgICAgICAgICAgICAgICAgIChlLmcuIGFuIDxmaWxlbmFtZT5hcm12NTwvZmlsZW5hbWU+IHNldCBvZiBwYWNrYWdlcyBjb3VsZAorICAgICAgICAgICAgICAgICAgICBydW4gb24gPGZpbGVuYW1lPmFybXY2PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hcm12NzwvZmlsZW5hbWU+IHByb2Nlc3NvcnMgaW4gbW9zdCBjYXNlcykuCisgICAgICAgICAgICAgICAgICAgIFNpbWlsYXJseSwgPGZpbGVuYW1lPmk0ODY8L2ZpbGVuYW1lPiBiaW5hcmllcyBjb3VsZCB3b3JrCisgICAgICAgICAgICAgICAgICAgIG9uIDxmaWxlbmFtZT5pNTg2PC9maWxlbmFtZT4gYW5kIGhpZ2hlciBwcm9jZXNzb3JzLgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHJlYWxpemUsIGhvd2V2ZXIsIHRoYXQgYWR2YW5jZXMgb24gbmV3ZXIKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc29yIHZlcnNpb25zIHdvdWxkIG5vdCBiZSB1c2VkLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IHNlbGVjdCB0aGUgc2FtZSB0dW5lIGZvciBzZXZlcmFsIGRpZmZlcmVudAorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcywgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcmV1c2VzIHNvZnR3YXJlCisgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzbHkgYnVpbHQsIHRodXMgc3BlZWRpbmcgdXAgdGhlIG92ZXJhbGwgYnVpbGQgdGltZS4KKyAgICAgICAgICAgICAgICAgICAgUmVhbGl6ZSB0aGF0IGV2ZW4gdGhvdWdoIGEgbmV3IHN5c3Jvb3QgZm9yIGVhY2ggbWFjaGluZSBpcworICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQsIHRoZSBzb2Z0d2FyZSBpcyBub3QgcmVjb21waWxlZCBhbmQgb25seSBvbmUKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBmZWVkIGV4aXN0cy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NYW5hZ2UgR3JhbnVsYXIgTGV2ZWwgUGFja2FnaW5nOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFNvbWV0aW1lcyBjYXNlcyBleGlzdCB3aGVyZSBpbmplY3RpbmcgYW5vdGhlciBsZXZlbAorICAgICAgICAgICAgICAgICAgICBvZiBwYWNrYWdlIGFyY2hpdGVjdHVyZSBiZXlvbmQgdGhlIHRocmVlIGhpZ2hlciBsZXZlbHMKKyAgICAgICAgICAgICAgICAgICAgbm90ZWQgZWFybGllciBjYW4gYmUgdXNlZnVsLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhlIDxmaWxlbmFtZT5lbWdkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3Mgc3RhY2sgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgbGF5ZXIsIGEgc3Vic2V0IG9mIHNvZnR3YXJlIGV4aXN0cyB0aGF0IGlzCisgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkIGFnYWluc3Qgc29tZXRoaW5nIGRpZmZlcmVudCBmcm9tIHRoZSByZXN0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBnZW5lcmljIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGV4YW1pbmUgdGhlIGtleSBjb2RlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaSc+U291cmNlIFJlcG9zaXRvcmllczwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICJkYWlzeSIgYnJhbmNoIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jbGFzc2VzL2VtZ2QtZ2wuYmJjbGFzczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBGb3IgYSBzcGVjaWZpYyBzZXQgb2YgcGFja2FnZXMsIHRoZSBjb2RlIHJlZGVmaW5lcworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9BUkNIJz48ZmlsZW5hbWU+UEFDS0FHRV9BUkNIPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VfRVhUUkFfQVJDSFMnPjxmaWxlbmFtZT5QQUNLQUdFX0VYVFJBX0FSQ0hTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBpcyB0aGVuIGFwcGVuZGVkIHdpdGggdGhpcyBleHRyYSB0dW5lIG5hbWUgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWwtZW1nZC5pbmM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJlc3VsdCBpcyB0aGF0IHdoZW4gc2VhcmNoaW5nIGZvciBwYWNrYWdlcywgdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSB1c2VzIGEgZm91ci1sZXZlbCBzZWFyY2ggYW5kIHRoZSBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICBpbiB0aGlzIG5ldyBsZXZlbCBhcmUgcHJlZmVycmVkIGFzIGNvbXBhcmVkIHRvIHRoZSBzdGFuZGFyZAorICAgICAgICAgICAgICAgICAgICB0dW5lLgorICAgICAgICAgICAgICAgICAgICBUaGUgb3ZlcmFsbCByZXN1bHQgaXMgdGhhdCB0aGUgYnVpbGQgc3lzdGVtIHJldXNlcyBtb3N0CisgICAgICAgICAgICAgICAgICAgIHNvZnR3YXJlIGZyb20gdGhlIGNvbW1vbiB0dW5lIGV4Y2VwdCBmb3Igc3BlY2lmaWMgY2FzZXMKKyAgICAgICAgICAgICAgICAgICAgYXMgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVzZSBUb29scyB0byBEZWJ1ZyBJc3N1ZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgU29tZXRpbWVzIHlvdSBjYW4gcnVuIGludG8gc2l0dWF0aW9ucyB3aGVyZSBzb2Z0d2FyZSBpcworICAgICAgICAgICAgICAgICAgICBiZWluZyByZWJ1aWx0IHdoZW4geW91IHRoaW5rIGl0IHNob3VsZCBub3QgYmUuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBtaWdodCBub3QgYmUKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgc2hhcmVkIHN0YXRlIGJldHdlZW4gbWFjaGluZXMgd2hlbiB5b3UgdGhpbmsgaXQKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlLgorICAgICAgICAgICAgICAgICAgICBUaGVzZSB0eXBlcyBvZiBzaXR1YXRpb25zIGFyZSB1c3VhbGx5IGR1ZSB0byByZWZlcmVuY2VzCisgICAgICAgICAgICAgICAgICAgIHRvIG1hY2hpbmUtc3BlY2lmaWMgdmFyaWFibGVzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNFUklBTF9DT05TT0xFJz48ZmlsZW5hbWU+U0VSSUFMX0NPTlNPTEU8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItWFNFUlZFUic+PGZpbGVuYW1lPlhTRVJWRVI8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORV9GRUFUVVJFUyc+PGZpbGVuYW1lPk1BQ0hJTkVfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQgc28gZm9ydGggaW4gY29kZSB0aGF0IGlzIHN1cHBvc2VkIHRvIG9ubHkgYmUKKyAgICAgICAgICAgICAgICAgICAgdHVuZS1zcGVjaWZpYyBvciB3aGVuIHRoZSByZWNpcGUgZGVwZW5kcworICAgICAgICAgICAgICAgICAgICAoPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1SU1VHR0VTVFMnPjxmaWxlbmFtZT5SU1VHR0VTVFM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQgc28gZm9ydGgpIG9uIHNvbWUgb3RoZXIgcmVjaXBlIHRoYXQgYWxyZWFkeSBoYXMKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VfQVJDSCc+PGZpbGVuYW1lPlBBQ0tBR0VfQVJDSDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBhcyAiJHtNQUNISU5FX0FSQ0h9Ii4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBQYXRjaGVzIHRvIGZpeCBhbnkgaXNzdWVzIGlkZW50aWZpZWQgYXJlIG1vc3Qgd2VsY29tZQorICAgICAgICAgICAgICAgICAgICAgICAgYXMgdGhlc2UgaXNzdWVzIG9jY2FzaW9uYWxseSBkbyBvY2N1ci4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIHN1Y2ggY2FzZXMsIHlvdSBjYW4gdXNlIHNvbWUgdG9vbHMgdG8gaGVscCB5b3UKKyAgICAgICAgICAgICAgICAgICAgc29ydCBvdXQgdGhlIHNpdHVhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnNzdGF0ZS1kaWZmLW1hY2hpbmVzLnNoPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhpcyB0b29sIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4gZGlyZWN0b3J5IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBSZXBvc2l0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSBjb21tZW50cyBpbiB0aGUgc2NyaXB0IGZvciBpbmZvcm1hdGlvbiBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdyB0byB1c2UgdGhlIHRvb2wuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJpdEJha2UncyAiLVMgcHJpbnRkaWZmIiBPcHRpb246PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGlzIG9wdGlvbiBjYXVzZXMgQml0QmFrZSB0byB0cnkgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RhYmxpc2ggdGhlIGNsb3Nlc3Qgc2lnbmF0dXJlIG1hdGNoIGl0IGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIGluIHRoZSBzaGFyZWQgc3RhdGUgY2FjaGUpIGFuZCB0aGVuIHJ1bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLWRpZmZzaWdzPC9maWxlbmFtZT4gb3ZlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzIHRvIGRldGVybWluZSB0aGUgc3RhbXBzIGFuZCBkZWx0YSB3aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXNlIHR3byBzdGFtcCB0cmVlcyBkaXZlcmdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd3b3JraW5nLXdpdGgtcGFja2FnZXMnPgorICAgICAgICA8dGl0bGU+V29ya2luZyB3aXRoIFBhY2thZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgYSBmZXcgdGFza3MgdGhhdCBpbnZvbHZlIHBhY2thZ2VzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2V4Y2x1ZGluZy1wYWNrYWdlcy1mcm9tLWFuLWltYWdlJz5FeGNsdWRpbmcgcGFja2FnZXMgZnJvbSBhbiBpbWFnZTwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdpbmNyZW1lbnRpbmctYS1wYWNrYWdlLXJldmlzaW9uLW51bWJlcic+SW5jcmVtZW50aW5nIGEgcGFja2FnZSByZXZpc2lvbiBudW1iZXI8L2xpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0naGFuZGxpbmctb3B0aW9uYWwtbW9kdWxlLXBhY2thZ2luZyc+SGFuZGxpbmcgb3B0aW9uYWwgbW9kdWxlIHBhY2thZ2luZzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd1c2luZy1ydW50aW1lLXBhY2thZ2UtbWFuYWdlbWVudCc+VXNpbmcgUnVudGltZSBQYWNrYWdlIE1hbmFnZW1lbnQ8L2xpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndGVzdGluZy1wYWNrYWdlcy13aXRoLXB0ZXN0Jz5TZXR0aW5nIHVwIGFuZCBydW5uaW5nIHBhY2thZ2UgdGVzdCAocHRlc3QpPC9saW5rPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2V4Y2x1ZGluZy1wYWNrYWdlcy1mcm9tLWFuLWltYWdlJz4KKyAgICAgICAgICAgIDx0aXRsZT5FeGNsdWRpbmcgUGFja2FnZXMgZnJvbSBhbiBJbWFnZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBtaWdodCBmaW5kIGl0IG5lY2Vzc2FyeSB0byBwcmV2ZW50IHNwZWNpZmljIHBhY2thZ2VzCisgICAgICAgICAgICAgICAgZnJvbSBiZWluZyBpbnN0YWxsZWQgaW50byBhbiBpbWFnZS4KKyAgICAgICAgICAgICAgICBJZiBzbywgeW91IGNhbiB1c2Ugc2V2ZXJhbCB2YXJpYWJsZXMgdG8gZGlyZWN0IHRoZSBidWlsZAorICAgICAgICAgICAgICAgIHN5c3RlbSB0byBlc3NlbnRpYWxseSBpZ25vcmUgaW5zdGFsbGluZyByZWNvbW1lbmRlZCBwYWNrYWdlcworICAgICAgICAgICAgICAgIG9yIHRvIG5vdCBpbnN0YWxsIGEgcGFja2FnZSBhdCBhbGwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBpbnRyb2R1Y2VzIHZhcmlhYmxlcyB5b3UgY2FuIHVzZSB0bworICAgICAgICAgICAgICAgIHByZXZlbnQgcGFja2FnZXMgZnJvbSBiZWluZyBpbnN0YWxsZWQgaW50byB5b3VyIGltYWdlLgorICAgICAgICAgICAgICAgIEVhY2ggb2YgdGhlc2UgdmFyaWFibGVzIG9ubHkgd29ya3Mgd2l0aCBJUEsgYW5kIFJQTQorICAgICAgICAgICAgICAgIHBhY2thZ2UgdHlwZXMuCisgICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgRGViaWFuIHBhY2thZ2VzIGRvZXMgbm90IGV4aXN0LgorICAgICAgICAgICAgICAgIEFsc28sIHlvdSBjYW4gdXNlIHRoZXNlIHZhcmlhYmxlcyBmcm9tIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgb3IgYXR0YWNoIHRoZW0gdG8gYQorICAgICAgICAgICAgICAgIHNwZWNpZmljIGltYWdlIHJlY2lwZSBieSB1c2luZyBhIHJlY2lwZSBuYW1lIG92ZXJyaWRlLgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGRldGFpbCBvbiB0aGUgdmFyaWFibGVzLCBzZWUgdGhlIGRlc2NyaXB0aW9ucyBpbiB0aGUKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwncyBnbG9zc2FyeSBjaGFwdGVyLgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkFEX1JFQ09NTUVOREFUSU9OUyc+PGZpbGVuYW1lPkJBRF9SRUNPTU1FTkRBVElPTlM8L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgdmFyaWFibGUgdG8gc3BlY2lmeSAicmVjb21tZW5kZWQtb25seSIKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIHRoYXQgeW91IGRvIG5vdCB3YW50IGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU5PX1JFQ09NTUVOREFUSU9OUyc+PGZpbGVuYW1lPk5PX1JFQ09NTUVOREFUSU9OUzwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhpcyB2YXJpYWJsZSB0byBwcmV2ZW50IGFsbCAicmVjb21tZW5kZWQtb25seSIKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGZyb20gYmVpbmcgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9FWENMVURFJz48ZmlsZW5hbWU+UEFDS0FHRV9FWENMVURFPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGlzIHZhcmlhYmxlIHRvIHByZXZlbnQgc3BlY2lmaWMgcGFja2FnZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgYmVpbmcgaW5zdGFsbGVkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5IGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgInJlY29tbWVuZGVkLW9ubHkiIG9yIG5vdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHJlYWxpemUgdGhhdCB0aGUgYnVpbGQgcHJvY2VzcyBjb3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgZmFpbCB3aXRoIGFuIGVycm9yIHdoZW4geW91CisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50IHRoZSBpbnN0YWxsYXRpb24gb2YgYSBwYWNrYWdlIHdob3NlIHByZXNlbmNlCisgICAgICAgICAgICAgICAgICAgICAgICBpcyByZXF1aXJlZCBieSBhbiBpbnN0YWxsZWQgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2luY3JlbWVudGluZy1hLXBhY2thZ2UtcmV2aXNpb24tbnVtYmVyJz4KKyAgICAgICAgICAgIDx0aXRsZT5JbmNyZW1lbnRpbmcgYSBQYWNrYWdlIFJldmlzaW9uIE51bWJlcjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIGEgY29tbWl0dGVkIGNoYW5nZSByZXN1bHRzIGluIGNoYW5naW5nIHRoZSBwYWNrYWdlIG91dHB1dCwKKyAgICAgICAgICAgICAgICB0aGVuIHRoZSB2YWx1ZSBvZiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBuZWVkcyB0byBiZSBpbmNyZWFzZWQgKG9yICJidW1wZWQiKS4KKyAgICAgICAgICAgICAgICBJbmNyZWFzaW5nIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IG9jY3VycyBvbmUgb2YgdHdvIHdheXM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkF1dG9tYXRpY2FsbHkgdXNpbmcgYSBQYWNrYWdlIFJldmlzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlIChQUiBTZXJ2aWNlKS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1hbnVhbGx5IGluY3JlbWVudGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IHZhcmlhYmxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBHaXZlbiB0aGF0IG9uZSBvZiB0aGUgY2hhbGxlbmdlcyBhbnkgYnVpbGQgc3lzdGVtIGFuZCBpdHMKKyAgICAgICAgICAgICAgICB1c2VycyBmYWNlIGlzIGhvdyB0byBtYWludGFpbiBhIHBhY2thZ2UgZmVlZCB0aGF0IGlzIGNvbXBhdGlibGUKKyAgICAgICAgICAgICAgICB3aXRoIGV4aXN0aW5nIHBhY2thZ2UgbWFuYWdlciBhcHBsaWNhdGlvbnMgc3VjaCBhcworICAgICAgICAgICAgICAgIFJQTSwgQVBULCBhbmQgT1BLRywgdXNpbmcgYW4gYXV0b21hdGVkIHN5c3RlbSBpcyBtdWNoCisgICAgICAgICAgICAgICAgcHJlZmVycmVkIG92ZXIgYSBtYW51YWwgc3lzdGVtLgorICAgICAgICAgICAgICAgIEluIGVpdGhlciBzeXN0ZW0sIHRoZSBtYWluIHJlcXVpcmVtZW50IGlzIHRoYXQgdmVyc2lvbgorICAgICAgICAgICAgICAgIG51bWJlcmluZyBpbmNyZWFzZXMgaW4gYSBsaW5lYXIgZmFzaGlvbiBhbmQgdGhhdCBhIG51bWJlciBvZgorICAgICAgICAgICAgICAgIHZlcnNpb24gY29tcG9uZW50cyBleGlzdCB0aGF0IHN1cHBvcnQgdGhhdCBsaW5lYXIgcHJvZ3Jlc3Npb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgdHdvIHNlY3Rpb25zIHByb3ZpZGUgaW5mb3JtYXRpb24gb24gdGhlIFBSIFNlcnZpY2UKKyAgICAgICAgICAgICAgICBhbmQgb24gbWFudWFsIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IGJ1bXBpbmcuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSd3b3JraW5nLXdpdGgtYS1wci1zZXJ2aWNlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+V29ya2luZyBXaXRoIGEgUFIgU2VydmljZTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXMgbWVudGlvbmVkLCBhdHRlbXB0aW5nIHRvIG1haW50YWluIHJldmlzaW9uIG51bWJlcnMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIGVycm9yIHByb25lLCBpbmFjY3VyYXRlLCBhbmQgY2F1c2VzIHByb2JsZW1zIGZvciBwZW9wbGUKKyAgICAgICAgICAgICAgICAgICAgc3VibWl0dGluZyByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICBDb252ZXJzZWx5LCB0aGUgUFIgU2VydmljZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlcworICAgICAgICAgICAgICAgICAgICBpbmNyZWFzaW5nIG51bWJlcnMsIHBhcnRpY3VsYXJseSB0aGUgcmV2aXNpb24gZmllbGQsCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIHJlbW92ZXMgdGhlIGh1bWFuIGVsZW1lbnQuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gdXNpbmcgYSBQUiBTZXJ2aWNlLCB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvUFJfU2VydmljZSc+UFIgU2VydmljZTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB3aWtpIHBhZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgdXNlcyB2YXJpYWJsZXMgaW4gb3JkZXIgb2YKKyAgICAgICAgICAgICAgICAgICAgZGVjcmVhc2luZyBwcmlvcml0eSB0byBmYWNpbGl0YXRlIHJldmlzaW9uIG51bWJlcmluZyAoaS5lLgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEUnPjxmaWxlbmFtZT5QRTwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L3VsaW5rPiwgYW5kCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgZXBvY2gsIHZlcnNpb24sIGFuZCByZXZpc2lvbiwgcmVzcGVjdGl2ZWx5KS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlcyBhcmUgaGlnaGx5IGRlcGVuZGVudCBvbiB0aGUgcG9saWNpZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIHByb2NlZHVyZXMgb2YgYSBnaXZlbiBkaXN0cmlidXRpb24gYW5kIHBhY2thZ2UgZmVlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNjaGVja3N1bXMnPnNpZ25hdHVyZXM8L3VsaW5rPiIsCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGFyZSB1bmlxdWUgdG8gYSBnaXZlbiBidWlsZCwgdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICBrbm93cyB3aGVuIHRvIHJlYnVpbGQgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIEFsbCB0aGUgaW5wdXRzIGludG8gYSBnaXZlbiB0YXNrIGFyZSByZXByZXNlbnRlZCBieSBhCisgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSwgd2hpY2ggY2FuIHRyaWdnZXIgYSByZWJ1aWxkIHdoZW4gZGlmZmVyZW50LgorICAgICAgICAgICAgICAgICAgICBUaHVzLCB0aGUgYnVpbGQgc3lzdGVtIGl0c2VsZiBkb2VzIG5vdCByZWx5IG9uIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPiBudW1iZXJzIHRvIHRyaWdnZXIgYSByZWJ1aWxkLgorICAgICAgICAgICAgICAgICAgICBUaGUgc2lnbmF0dXJlcywgaG93ZXZlciwgY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4gdmFsdWVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgUFIgU2VydmljZSB3b3JrcyB3aXRoIGJvdGgKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk9FQmFzaWM8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk9FQmFzaWNIYXNoPC9maWxlbmFtZT4gZ2VuZXJhdG9ycy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIG9mIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IGJ1bXBzIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGNoZWNrc3VtIGNoYW5nZXMgYW5kIHRoZSBkaWZmZXJlbnQgZ2VuZXJhdG9yIG1lY2hhbmlzbXMKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlIHNpZ25hdHVyZXMgdW5kZXIgZGlmZmVyZW50IGNpcmN1bXN0YW5jZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFzIGltcGxlbWVudGVkLCB0aGUgYnVpbGQgc3lzdGVtIGluY2x1ZGVzIHZhbHVlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgIHRoZSBQUiBTZXJ2aWNlIGludG8gdGhlIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IGZpZWxkIGFzCisgICAgICAgICAgICAgICAgICAgIGFuIGFkZGl0aW9uIHVzaW5nIHRoZSBmb3JtICI8ZmlsZW5hbWU+Lng8L2ZpbGVuYW1lPiIgc28KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnIwPC9maWxlbmFtZT4gYmVjb21lcyA8ZmlsZW5hbWU+cjAuMTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cjAuMjwvZmlsZW5hbWU+IGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBzY2hlbWUgYWxsb3dzIGV4aXN0aW5nIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IHZhbHVlcworICAgICAgICAgICAgICAgICAgICB0byBiZSB1c2VkIGZvciB3aGF0ZXZlciByZWFzb25zLCB3aGljaCBpbmNsdWRlIG1hbnVhbAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPiBidW1wcywgc2hvdWxkIGl0IGJlIG5lY2Vzc2FyeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIFBSIFNlcnZpY2UgaXMgbm90IGVuYWJsZWQgb3IgcnVubmluZy4KKyAgICAgICAgICAgICAgICAgICAgVGh1cywgdGhlIHBhY2thZ2VzIGdlbmVyYXRlZCBhcmUganVzdCAic2VsZiBjb25zaXN0ZW50Ii4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBhZGRzIGFuZCByZW1vdmVzIHBhY2thZ2VzIGFuZAorICAgICAgICAgICAgICAgICAgICB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcyBhYm91dCB1cGdyYWRlIHBhdGhzIGJ1dCBpbWFnZXMKKyAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBjb25zaXN0ZW50IGFuZCBjb3JyZWN0IHdpdGggdGhlIGxhdGVzdCBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc2ltcGxlc3QgZm9ybSBmb3IgYSBQUiBTZXJ2aWNlIGlzIGZvciBpdCB0byBleGlzdAorICAgICAgICAgICAgICAgICAgICBmb3IgYSBzaW5nbGUgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0gdGhhdCBidWlsZHMgdGhlCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgZmVlZCAoYnVpbGRpbmcgc3lzdGVtKS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHRoaXMgc2NlbmFyaW8sIHlvdSBjYW4gZW5hYmxlIGEgbG9jYWwgUFIgU2VydmljZSBieQorICAgICAgICAgICAgICAgICAgICBzZXR0aW5nCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QUlNFUlZfSE9TVCc+PGZpbGVuYW1lPlBSU0VSVl9IT1NUPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUlNFUlZfSE9TVCA9ICJsb2NhbGhvc3Q6MCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBzZXJ2aWNlIGlzIHN0YXJ0ZWQsIHBhY2thZ2VzIHdpbGwgYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgICAgICBnZXQgaW5jcmVhc2luZyA8ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPiB2YWx1ZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2Ugd2lsbCB0YWtlIGNhcmUgb2Ygc3RhcnRpbmcgYW5kIHN0b3BwaW5nIHRoZSBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIGEgbW9yZSBjb21wbGV4IHNldHVwIHdoZXJlIG11bHRpcGxlIGhvc3QKKyAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgc3lzdGVtcyB3b3JrIGFnYWluc3QgYSBjb21tb24sIHNoYXJlZCBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIGZlZWQsIHlvdSBoYXZlIGEgc2luZ2xlIFBSIFNlcnZpY2UgcnVubmluZyBhbmQgaXQgaXMKKyAgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkIHRvIGVhY2ggYnVpbGRpbmcgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBGb3IgdGhpcyBzY2VuYXJpbywgeW91IG5lZWQgdG8gc3RhcnQgdGhlIFBSIFNlcnZpY2UgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5iaXRiYWtlLXByc2VydjwvZmlsZW5hbWU+IGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgYml0YmFrZS1wcnNlcnYgLS1ob3N0IDxyZXBsYWNlYWJsZT5pcDwvcmVwbGFjZWFibGU+IC0tcG9ydCA8cmVwbGFjZWFibGU+cG9ydDwvcmVwbGFjZWFibGU+IC0tc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBJbiBhZGRpdGlvbiB0byBoYW5kLXN0YXJ0aW5nIHRoZSBzZXJ2aWNlLCB5b3UgbmVlZCB0bworICAgICAgICAgICAgICAgICAgICB1cGRhdGUgdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBvZiBlYWNoCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5nIHN5c3RlbSBhcyBkZXNjcmliZWQgZWFybGllciBzbyBlYWNoIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICBwb2ludHMgdG8gdGhlIHNlcnZlciBhbmQgcG9ydC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgYWxzbyByZWNvbW1lbmRlZCB5b3UgdXNlIGJ1aWxkIGhpc3RvcnksIHdoaWNoIGFkZHMKKyAgICAgICAgICAgICAgICAgICAgc29tZSBzYW5pdHkgY2hlY2tzIHRvIHBhY2thZ2UgdmVyc2lvbnMsIGluIGNvbmp1bmN0aW9uIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIHNlcnZlciB0aGF0IGlzIHJ1bm5pbmcgdGhlIFBSIFNlcnZpY2UuCisgICAgICAgICAgICAgICAgICAgIFRvIGVuYWJsZSBidWlsZCBoaXN0b3J5LCBhZGQgdGhlIGZvbGxvd2luZyB0byBlYWNoIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSdzIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIEl0IGlzIHJlY29tbWVuZGVkIHRvIGFjdGl2YXRlICJidWlsZGhpc3RvcnkiIGZvciB0ZXN0aW5nIHRoZSBQUiBzZXJ2aWNlCisgICAgIElOSEVSSVQgKz0gImJ1aWxkaGlzdG9yeSIKKyAgICAgQlVJTERISVNUT1JZX0NPTU1JVCA9ICIxIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBidWlsZCBoaXN0b3J5LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNtYWludGFpbmluZy1idWlsZC1vdXRwdXQtcXVhbGl0eSc+TWFpbnRhaW5pbmcgQnVpbGQgT3V0cHV0IFF1YWxpdHk8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBkb2VzIG5vdCBtYWludGFpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPiBpbmZvcm1hdGlvbiBhcyBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBzaGFyZWQgc3RhdGUgKHNzdGF0ZSkgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBtYWludGFpbiBhbiBzc3RhdGUgZmVlZCwgaXRzIGV4cGVjdGVkIHRoYXQgZWl0aGVyCisgICAgICAgICAgICAgICAgICAgIGFsbCB5b3VyIGJ1aWxkaW5nIHN5c3RlbXMgdGhhdCBjb250cmlidXRlIHRvIHRoZSBzc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgZmVlZCB1c2UgYSBzaGFyZWQgUFIgU2VydmljZSwgb3IgeW91IGRvIG5vdCBydW4gYSBQUgorICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlIG9uIGFueSBvZiB5b3VyIGJ1aWxkaW5nIHN5c3RlbXMuCisgICAgICAgICAgICAgICAgICAgIEhhdmluZyBzb21lIHN5c3RlbXMgdXNlIGEgUFIgU2VydmljZSB3aGlsZSBvdGhlcnMgZG8KKyAgICAgICAgICAgICAgICAgICAgbm90IGxlYWRzIHRvIG9idmlvdXMgcHJvYmxlbXMuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzaGFyZWQgc3RhdGUsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3NoYXJlZC1zdGF0ZS1jYWNoZSc+U2hhcmVkIFN0YXRlIENhY2hlPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC48L3BhcmE+CisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbWFudWFsbHktYnVtcGluZy1wcic+CisgICAgICAgICAgICAgICAgPHRpdGxlPk1hbnVhbGx5IEJ1bXBpbmcgUFI8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBhbHRlcm5hdGl2ZSB0byBzZXR0aW5nIHVwIGEgUFIgU2VydmljZSBpcyB0byBtYW51YWxseQorICAgICAgICAgICAgICAgICAgICBidW1wIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIGEgY29tbWl0dGVkIGNoYW5nZSByZXN1bHRzIGluIGNoYW5naW5nIHRoZSBwYWNrYWdlIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgdGhlbiB0aGUgdmFsdWUgb2YgdGhlIFBSIHZhcmlhYmxlIG5lZWRzIHRvIGJlIGluY3JlYXNlZAorICAgICAgICAgICAgICAgICAgICAob3IgImJ1bXBlZCIpIGFzIHBhcnQgb2YgdGhhdCBjb21taXQuCisgICAgICAgICAgICAgICAgICAgIEZvciBuZXcgcmVjaXBlcyB5b3Ugc2hvdWxkIGFkZCB0aGUgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYW5kIHNldCBpdHMgaW5pdGlhbCB2YWx1ZSBlcXVhbCB0byAicjAiLCB3aGljaCBpcyB0aGUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAgRXZlbiB0aG91Z2ggdGhlIGRlZmF1bHQgdmFsdWUgaXMgInIwIiwgdGhlIHByYWN0aWNlIG9mIGFkZGluZyBpdCB0byBhIG5ldyByZWNpcGUgbWFrZXMKKyAgICAgICAgICAgICAgICAgICAgaXQgaGFyZGVyIHRvIGZvcmdldCB0byBidW1wIHRoZSB2YXJpYWJsZSB3aGVuIHlvdSBtYWtlIGNoYW5nZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHJlY2lwZSBpbiBmdXR1cmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgc2hhcmluZyBhIGNvbW1vbiA8ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+IGZpbGUgd2l0aCBtdWx0aXBsZSByZWNpcGVzLAorICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIGFsc28gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlOQ19QUic+SU5DX1BSPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBlbnN1cmUgdGhhdAorICAgICAgICAgICAgICAgICAgICB0aGUgcmVjaXBlcyBzaGFyaW5nIHRoZSA8ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+IGZpbGUgYXJlIHJlYnVpbHQgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5pbmM8L2ZpbGVuYW1lPiBmaWxlIGl0c2VsZiBpcyBjaGFuZ2VkLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPi5pbmM8L2ZpbGVuYW1lPiBmaWxlIG11c3Qgc2V0IDxmaWxlbmFtZT5JTkNfUFI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAoaW5pdGlhbGx5IHRvICJyMCIpLCBhbmQgYWxsIHJlY2lwZXMgcmVmZXJyaW5nIHRvIGl0IHNob3VsZCBzZXQgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdG8gIiQoSU5DX1BSKS4wIiBpbml0aWFsbHksIGluY3JlbWVudGluZyB0aGUgbGFzdCBudW1iZXIgd2hlbiB0aGUgcmVjaXBlIGlzIGNoYW5nZWQuCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSA8ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+IGZpbGUgaXMgY2hhbmdlZCB0aGVuIGl0cworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU5DX1BSPC9maWxlbmFtZT4gc2hvdWxkIGJlIGluY3JlbWVudGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHVwZ3JhZGluZyB0aGUgdmVyc2lvbiBvZiBhIHBhY2thZ2UsIGFzc3VtaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBWJz5QVjwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlcywgdGhlIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IHZhcmlhYmxlIHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAgICByZXNldCB0byAicjAiIChvciAiJChJTkNfUFIpLjAiIGlmIHlvdSBhcmUgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklOQ19QUjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVXN1YWxseSwgdmVyc2lvbiBpbmNyZWFzZXMgb2NjdXIgb25seSB0byBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgZm9yIHNvbWUgcmVhc29uIDxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+IGNoYW5nZXMgYnV0IGRvZXMgbm90CisgICAgICAgICAgICAgICAgICAgIGluY3JlYXNlLCB5b3UgY2FuIGluY3JlYXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBFJz5QRTwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgKFBhY2thZ2UgRXBvY2gpLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlBFPC9maWxlbmFtZT4gdmFyaWFibGUgZGVmYXVsdHMgdG8gIjAiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIG51bWJlcmluZyBzdHJpdmVzIHRvIGZvbGxvdyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5kZWJpYW4ub3JnL2RvYy9kZWJpYW4tcG9saWN5L2NoLWNvbnRyb2xmaWVsZHMuaHRtbCc+CisgICAgICAgICAgICAgICAgICAgIERlYmlhbiBWZXJzaW9uIEZpZWxkIFBvbGljeSBHdWlkZWxpbmVzPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGd1aWRlbGluZXMgZGVmaW5lIGhvdyB2ZXJzaW9ucyBhcmUgY29tcGFyZWQgYW5kIHdoYXQgImluY3JlYXNpbmciIGEgdmVyc2lvbiBtZWFucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0naGFuZGxpbmctb3B0aW9uYWwtbW9kdWxlLXBhY2thZ2luZyc+CisgICAgICAgICAgICA8dGl0bGU+SGFuZGxpbmcgT3B0aW9uYWwgTW9kdWxlIFBhY2thZ2luZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE1hbnkgcGllY2VzIG9mIHNvZnR3YXJlIHNwbGl0IGZ1bmN0aW9uYWxpdHkgaW50byBvcHRpb25hbAorICAgICAgICAgICAgICAgIG1vZHVsZXMgKG9yIHBsdWctaW5zKSBhbmQgdGhlIHBsdWctaW5zIHRoYXQgYXJlIGJ1aWx0CisgICAgICAgICAgICAgICAgbWlnaHQgZGVwZW5kIG9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKyAgICAgICAgICAgICAgICBUbyBhdm9pZCBoYXZpbmcgdG8gZHVwbGljYXRlIHRoZSBsb2dpYyB0aGF0IGRldGVybWluZXMgd2hhdAorICAgICAgICAgICAgICAgIG1vZHVsZXMgYXJlIGF2YWlsYWJsZSBpbiB5b3VyIHJlY2lwZSBvciB0byBhdm9pZCBoYXZpbmcKKyAgICAgICAgICAgICAgICB0byBwYWNrYWdlIGVhY2ggbW9kdWxlIGJ5IGhhbmQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSB0byBoYW5kbGUgbW9kdWxlIHBhY2thZ2luZyBkeW5hbWljYWxseS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gaGFuZGxlIG9wdGlvbmFsIG1vZHVsZSBwYWNrYWdpbmcsIHlvdSBuZWVkIHRvIGRvIHR3byB0aGluZ3M6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVuc3VyZSB0aGUgbW9kdWxlIHBhY2thZ2luZyBpcyBhY3R1YWxseQorICAgICAgICAgICAgICAgICAgICAgICAgZG9uZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVuc3VyZSB0aGF0IGFueSBkZXBlbmRlbmNpZXMgb24gb3B0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZXMgZnJvbSBvdGhlciByZWNpcGVzIGFyZSBzYXRpc2ZpZWQgYnkgeW91ciByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J21ha2luZy1zdXJlLXRoZS1wYWNrYWdpbmctaXMtZG9uZSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPk1ha2luZyBTdXJlIHRoZSBQYWNrYWdpbmcgaXMgRG9uZTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gZW5zdXJlIHRoZSBtb2R1bGUgcGFja2FnaW5nIGFjdHVhbGx5IGdldHMgZG9uZSwgeW91IHVzZQorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmRvX3NwbGl0X3BhY2thZ2VzPC9maWxlbmFtZT4gZnVuY3Rpb24gd2l0aGluCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+cG9wdWxhdGVfcGFja2FnZXM8L2ZpbGVuYW1lPiBQeXRob24gZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgaW4geW91ciByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fc3BsaXRfcGFja2FnZXM8L2ZpbGVuYW1lPiBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICBzZWFyY2hlcyBmb3IgYSBwYXR0ZXJuIG9mIGZpbGVzIG9yIGRpcmVjdG9yaWVzIHVuZGVyIGEKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIHBhdGggYW5kIGNyZWF0ZXMgYSBwYWNrYWdlIGZvciBlYWNoIG9uZSBpdCBmaW5kcworICAgICAgICAgICAgICAgICAgICBieSBhcHBlbmRpbmcgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFUyc+PGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgc2V0dGluZyB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzIGZvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVNfcGFja2FnZW5hbWU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJERVBFTkRTX3BhY2thZ2VuYW1lPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ERVNDUklQVElPTl9wYWNrYWdlbmFtZTwvZmlsZW5hbWU+LCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBmcm9tIHRoZSA8ZmlsZW5hbWU+bGlnaHR0cGQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgICAgICAgbGlnaHR0cGRfbGliZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfScpCisgICAgICAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWdodHRwZF9saWJkaXIsICdebW9kXyguKilcLnNvJCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdsaWdodHRwZC1tb2R1bGUtJXMnLCAnTGlnaHR0cGQgbW9kdWxlIGZvciAlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9kZXBlbmRzPScnKQorICAgICB9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIGV4YW1wbGUgc3BlY2lmaWVzIGEgbnVtYmVyIG9mIHRoaW5ncyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgY2FsbCB0byA8ZmlsZW5hbWU+ZG9fc3BsaXRfcGFja2FnZXM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BIGRpcmVjdG9yeSB3aXRoaW4gdGhlIGZpbGVzIGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHlvdXIgcmVjaXBlIHRocm91Z2ggPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHdoaWNoIHRvIHNlYXJjaC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BIHJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIG1hdGNoIG1vZHVsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzIGluIHRoYXQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoZSBleGFtcGxlLCBub3RlIHRoZSBwYXJlbnRoZXNlcyAoKSB0aGF0IG1hcmsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcGFydCBvZiB0aGUgZXhwcmVzc2lvbiBmcm9tIHdoaWNoIHRoZSBtb2R1bGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIHNob3VsZCBiZSBkZXJpdmVkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgcGF0dGVybiB0byB1c2UgZm9yIHRoZSBwYWNrYWdlIG5hbWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgZGVzY3JpcHRpb24gZm9yIGVhY2ggcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BbiBlbXB0eSBzdHJpbmcgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmV4dHJhX2RlcGVuZHM8L2ZpbGVuYW1lPiwgd2hpY2ggZGlzYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCBkZXBlbmRlbmN5IG9uIHRoZSBtYWluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpZ2h0dHBkPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHVzLCBpZiBhIGZpbGUgaW4gPGZpbGVuYW1lPiR7bGliZGlyfTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVkIDxmaWxlbmFtZT5tb2RfYWxpYXMuc288L2ZpbGVuYW1lPiBpcyBmb3VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHBhY2thZ2UgY2FsbGVkIDxmaWxlbmFtZT5saWdodHRwZC1tb2R1bGUtYWxpYXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGNyZWF0ZWQgZm9yIGl0IGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItREVTQ1JJUFRJT04nPjxmaWxlbmFtZT5ERVNDUklQVElPTjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gIkxpZ2h0dHBkIG1vZHVsZSBmb3IgYWxpYXMiLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgT2Z0ZW4sIHBhY2thZ2luZyBtb2R1bGVzIGlzIGFzIHNpbXBsZSBhcyB0aGUgcHJldmlvdXMKKyAgICAgICAgICAgICAgICAgICAgZXhhbXBsZS4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgbW9yZSBhZHZhbmNlZCBvcHRpb25zIGV4aXN0IHRoYXQgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIDxmaWxlbmFtZT5kb19zcGxpdF9wYWNrYWdlczwvZmlsZW5hbWU+IHRvIG1vZGlmeSBpdHMKKyAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3IuCisgICAgICAgICAgICAgICAgICAgIEFuZCwgaWYgeW91IG5lZWQgdG8sIHlvdSBjYW4gYWRkIG1vcmUgbG9naWMgYnkgc3BlY2lmeWluZworICAgICAgICAgICAgICAgICAgICBhIGhvb2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgZm9yIGVhY2ggcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgYWxzbyBwZXJmZWN0bHkgYWNjZXB0YWJsZSB0byBjYWxsCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19zcGxpdF9wYWNrYWdlczwvZmlsZW5hbWU+IG11bHRpcGxlIHRpbWVzIGlmCisgICAgICAgICAgICAgICAgICAgIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgc2V0IG9mIG1vZHVsZXMgdG8gcGFja2FnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgZXhhbXBsZXMgdGhhdCBzaG93IGhvdyB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3NwbGl0X3BhY2thZ2VzPC9maWxlbmFtZT4sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbm5tYW4uaW5jPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi88L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgb2YgdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0neW9jdG8tcHJvamVjdC1yZXBvc2l0b3JpZXMnPnNvdXJjZSByZXBvc2l0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGZpbmQgZXhhbXBsZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY2xhc3Nlcy9rZXJuZWwuYmJjbGFzczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYSByZWZlcmVuY2UgdGhhdCBzaG93cworICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3NwbGl0X3BhY2thZ2VzPC9maWxlbmFtZT4gbWFuZGF0b3J5IGFuZAorICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBNYW5kYXRvcnkgYXJndW1lbnRzCisKKyAgICAgcm9vdAorICAgICAgICBUaGUgcGF0aCBpbiB3aGljaCB0byBzZWFyY2gKKyAgICAgZmlsZV9yZWdleAorICAgICAgICBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggc2VhcmNoZWQgZmlsZXMuCisgICAgICAgIFVzZSBwYXJlbnRoZXNlcyAoKSB0byBtYXJrIHRoZSBwYXJ0IG9mIHRoaXMKKyAgICAgICAgZXhwcmVzc2lvbiB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGRlcml2ZSB0aGUKKyAgICAgICAgbW9kdWxlIG5hbWUgKHRvIGJlIHN1YnN0aXR1dGVkIHdoZXJlICVzIGlzCisgICAgICAgIHVzZWQgaW4gb3RoZXIgZnVuY3Rpb24gYXJndW1lbnRzIGFzIG5vdGVkIGJlbG93KQorICAgICBvdXRwdXRfcGF0dGVybgorICAgICAgICBQYXR0ZXJuIHRvIHVzZSBmb3IgdGhlIHBhY2thZ2UgbmFtZXMuIE11c3QKKyAgICAgICAgaW5jbHVkZSAlcy4KKyAgICAgZGVzY3JpcHRpb24KKyAgICAgICAgRGVzY3JpcHRpb24gdG8gc2V0IGZvciBlYWNoIHBhY2thZ2UuIE11c3QKKyAgICAgICAgaW5jbHVkZSAlcy4KKworICAgICBPcHRpb25hbCBhcmd1bWVudHMKKworICAgICBwb3N0aW5zdAorICAgICAgICBQb3N0aW5zdGFsbCBzY3JpcHQgdG8gdXNlIGZvciBhbGwgcGFja2FnZXMKKyAgICAgICAgKGFzIGEgc3RyaW5nKQorICAgICByZWN1cnNpdmUKKyAgICAgICAgVHJ1ZSB0byBwZXJmb3JtIGEgcmVjdXJzaXZlIHNlYXJjaCAtIGRlZmF1bHQKKyAgICAgICAgRmFsc2UKKyAgICAgaG9vaworICAgICAgICBBIGhvb2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciBldmVyeSBtYXRjaC4KKyAgICAgICAgVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGZvbGxvd2luZworICAgICAgICBhcmd1bWVudHMgKGluIHRoZSBvcmRlciBsaXN0ZWQpOgorCisgICAgICAgIGYKKyAgICAgICAgICAgRnVsbCBwYXRoIHRvIHRoZSBmaWxlL2RpcmVjdG9yeSBtYXRjaAorICAgICAgICBwa2cKKyAgICAgICAgICAgVGhlIHBhY2thZ2UgbmFtZQorICAgICAgICBmaWxlX3JlZ2V4CisgICAgICAgICAgIEFzIGFib3ZlCisgICAgICAgIG91dHB1dF9wYXR0ZXJuCisgICAgICAgICAgIEFzIGFib3ZlCisgICAgICAgIG1vZHVsZW5hbWUKKyAgICAgICAgICAgVGhlIG1vZHVsZSBuYW1lIGRlcml2ZWQgdXNpbmcgZmlsZV9yZWdleAorCisgICAgIGV4dHJhX2RlcGVuZHMKKyAgICAgICAgRXh0cmEgcnVudGltZSBkZXBlbmRlbmNpZXMgKFJERVBFTkRTKSB0byBiZQorICAgICAgICBzZXQgZm9yIGFsbCBwYWNrYWdlcy4gVGhlIGRlZmF1bHQgdmFsdWUgb2YgTm9uZQorICAgICAgICBjYXVzZXMgYSBkZXBlbmRlbmN5IG9uIHRoZSBtYWluIHBhY2thZ2UKKyAgICAgICAgKCR7UE59KSAtIGlmIHlvdSBkbyBub3Qgd2FudCB0aGlzLCBwYXNzIGVtcHR5CisgICAgICAgIHN0cmluZyAnJyBmb3IgdGhpcyBwYXJhbWV0ZXIuCisgICAgIGF1eF9maWxlc19wYXR0ZXJuCisgICAgICAgIEV4dHJhIGl0ZW0ocykgdG8gYmUgYWRkZWQgdG8gRklMRVMgZm9yIGVhY2gKKyAgICAgICAgcGFja2FnZS4gQ2FuIGJlIGEgc2luZ2xlIHN0cmluZyBpdGVtIG9yIGEgbGlzdAorICAgICAgICBvZiBzdHJpbmdzIGZvciBtdWx0aXBsZSBpdGVtcy4gTXVzdCBpbmNsdWRlICVzLgorICAgICBwb3N0cm0KKyAgICAgICAgcG9zdHJtIHNjcmlwdCB0byB1c2UgZm9yIGFsbCBwYWNrYWdlcyAoYXMgYQorICAgICAgICBzdHJpbmcpCisgICAgIGFsbG93X2RpcnMKKyAgICAgICAgVHJ1ZSB0byBhbGxvdyBkaXJlY3RvcmllcyB0byBiZSBtYXRjaGVkIC0KKyAgICAgICAgZGVmYXVsdCBGYWxzZQorICAgICBwcmVwZW5kCisgICAgICAgIElmIFRydWUsIHByZXBlbmQgY3JlYXRlZCBwYWNrYWdlcyB0byBQQUNLQUdFUworICAgICAgICBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IEZhbHNlIHdoaWNoIGFwcGVuZHMgdGhlbQorICAgICBtYXRjaF9wYXRoCisgICAgICAgIG1hdGNoIGZpbGVfcmVnZXggb24gdGhlIHdob2xlIHJlbGF0aXZlIHBhdGggdG8KKyAgICAgICAgdGhlIHJvb3QgcmF0aGVyIHRoYW4ganVzdCB0aGUgZmlsZSBuYW1lCisgICAgIGF1eF9maWxlc19wYXR0ZXJuX3ZlcmJhdGltCisgICAgICAgIEV4dHJhIGl0ZW0ocykgdG8gYmUgYWRkZWQgdG8gRklMRVMgZm9yIGVhY2gKKyAgICAgICAgcGFja2FnZSwgdXNpbmcgdGhlIGFjdHVhbCBkZXJpdmVkIG1vZHVsZSBuYW1lCisgICAgICAgIHJhdGhlciB0aGFuIGNvbnZlcnRpbmcgaXQgdG8gc29tZXRoaW5nIGxlZ2FsCisgICAgICAgIGZvciBhIHBhY2thZ2UgbmFtZS4gQ2FuIGJlIGEgc2luZ2xlIHN0cmluZyBpdGVtCisgICAgICAgIG9yIGEgbGlzdCBvZiBzdHJpbmdzIGZvciBtdWx0aXBsZSBpdGVtcy4gTXVzdAorICAgICAgICBpbmNsdWRlICVzLgorICAgICBhbGxvd19saW5rcworICAgICAgICBUcnVlIHRvIGFsbG93IHN5bWxpbmtzIHRvIGJlIG1hdGNoZWQgLSBkZWZhdWx0CisgICAgICAgIEZhbHNlCisgICAgIHN1bW1hcnkKKyAgICAgICAgU3VtbWFyeSB0byBzZXQgZm9yIGVhY2ggcGFja2FnZS4gTXVzdCBpbmNsdWRlICVzOworICAgICAgICBkZWZhdWx0cyB0byBkZXNjcmlwdGlvbiBpZiBub3Qgc2V0LgorICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdzYXRpc2Z5aW5nLWRlcGVuZGVuY2llcyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPlNhdGlzZnlpbmcgRGVwZW5kZW5jaWVzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc2Vjb25kIHBhcnQgZm9yIGhhbmRsaW5nIG9wdGlvbmFsIG1vZHVsZSBwYWNrYWdpbmcKKyAgICAgICAgICAgICAgICAgICAgaXMgdG8gZW5zdXJlIHRoYXQgYW55IGRlcGVuZGVuY2llcyBvbiBvcHRpb25hbCBtb2R1bGVzCisgICAgICAgICAgICAgICAgICAgIGZyb20gb3RoZXIgcmVjaXBlcyBhcmUgc2F0aXNmaWVkIGJ5IHlvdXIgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGJlIHN1cmUgdGhlc2UgZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFU19EWU5BTUlDJz48ZmlsZW5hbWU+UEFDS0FHRVNfRFlOQU1JQzwvZmlsZW5hbWU+PC91bGluaz4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGNvbnRpbnVlcyB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlnaHR0cGQ8L2ZpbGVuYW1lPiByZWNpcGUgc2hvd24gZWFybGllcjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFU19EWU5BTUlDID0gImxpZ2h0dHBkLW1vZHVsZS0uKiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBzcGVjaWZpZWQgaW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBjYW4gb2YKKyAgICAgICAgICAgICAgICAgICAgY291cnNlIGJlIGFueXRoaW5nLgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIGl0IGlzIDxmaWxlbmFtZT5saWdodHRwZC1tb2R1bGUtPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kIGlzIHNwZWNpZmllZCBhcyB0aGUgcHJlZml4IHRvIGVuc3VyZSB0aGF0IGFueQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBvbiBhIHBhY2thZ2UgbmFtZSBzdGFydGluZyB3aXRoIHRoZSBwcmVmaXggYXJlIHNhdGlzZmllZAorICAgICAgICAgICAgICAgICAgICBkdXJpbmcgYnVpbGQgdGltZS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB1c2luZyA8ZmlsZW5hbWU+ZG9fc3BsaXRfcGFja2FnZXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhcyBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24sIHRoZSB2YWx1ZSB5b3UgcHV0IGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFU19EWU5BTUlDPC9maWxlbmFtZT4gc2hvdWxkIGNvcnJlc3BvbmQgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIG5hbWUgcGF0dGVybiBzcGVjaWZpZWQgaW4gdGhlIGNhbGwgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3NwbGl0X3BhY2thZ2VzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLXJ1bnRpbWUtcGFja2FnZS1tYW5hZ2VtZW50Jz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBSdW50aW1lIFBhY2thZ2UgTWFuYWdlbWVudDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIER1cmluZyBhIGJ1aWxkLCBCaXRCYWtlIGFsd2F5cyB0cmFuc2Zvcm1zIGEgcmVjaXBlIGludG8gb25lIG9yCisgICAgICAgICAgICAgICAgbW9yZSBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgQml0QmFrZSB0YWtlcyB0aGUgPGZpbGVuYW1lPmJhc2g8L2ZpbGVuYW1lPiByZWNpcGUKKyAgICAgICAgICAgICAgICBhbmQgY3VycmVudGx5IHByb2R1Y2VzIHRoZSA8ZmlsZW5hbWU+YmFzaC1kYmc8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmFzaC1zdGF0aWNkZXY8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmFzaC1kZXY8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmJhc2gtZG9jPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhc2gtbG9jYWxlPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNoPC9maWxlbmFtZT4gcGFja2FnZXMuCisgICAgICAgICAgICAgICAgTm90IGFsbCBnZW5lcmF0ZWQgcGFja2FnZXMgYXJlIGluY2x1ZGVkIGluIGFuIGltYWdlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiBzZXZlcmFsIHNpdHVhdGlvbnMsIHlvdSBtaWdodCBuZWVkIHRvIHVwZGF0ZSwgYWRkLCByZW1vdmUsCisgICAgICAgICAgICAgICAgb3IgcXVlcnkgdGhlIHBhY2thZ2VzIG9uIGEgdGFyZ2V0IGRldmljZSBhdCBydW50aW1lCisgICAgICAgICAgICAgICAgKGkuZS4gd2l0aG91dCBoYXZpbmcgdG8gZ2VuZXJhdGUgYSBuZXcgaW1hZ2UpLgorICAgICAgICAgICAgICAgIEV4YW1wbGVzIG9mIHN1Y2ggc2l0dWF0aW9ucyBpbmNsdWRlOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSB3YW50IHRvIHByb3ZpZGUgaW4tdGhlLWZpZWxkIHVwZGF0ZXMgdG8gZGVwbG95ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZXMgKGUuZy4gc2VjdXJpdHkgdXBkYXRlcykuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IHdhbnQgdG8gaGF2ZSBhIGZhc3QgdHVybi1hcm91bmQgZGV2ZWxvcG1lbnQgY3ljbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBvbmUgb3IgbW9yZSBhcHBsaWNhdGlvbnMgdGhhdCBydW4gb24geW91ciBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IHdhbnQgdG8gdGVtcG9yYXJpbHkgaW5zdGFsbCB0aGUgImRlYnVnIiBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICAgICAgb2YgdmFyaW91cyBhcHBsaWNhdGlvbnMgb24geW91ciBkZXZpY2Ugc28gdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdnaW5nIGNhbiBiZSBncmVhdGx5IGltcHJvdmVkIGJ5IGFsbG93aW5nCisgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3MgdG8gc3ltYm9scyBhbmQgc291cmNlIGRlYnVnZ2luZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugd2FudCB0byBkZXBsb3kgYSBtb3JlIG1pbmltYWwgcGFja2FnZSBzZWxlY3Rpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgZGV2aWNlIGJ1dCBhbGxvdyBpbi10aGUtZmllbGQgdXBkYXRlcyB0byBhZGQgYQorICAgICAgICAgICAgICAgICAgICAgICAgbGFyZ2VyIHNlbGVjdGlvbiBmb3IgY3VzdG9taXphdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiBhbGwgdGhlc2Ugc2l0dWF0aW9ucywgeW91IGhhdmUgc29tZXRoaW5nIHNpbWlsYXIgdG8gYSBtb3JlCisgICAgICAgICAgICAgICAgdHJhZGl0aW9uYWwgTGludXggZGlzdHJpYnV0aW9uIGluIHRoYXQgaW4tZmllbGQgZGV2aWNlcworICAgICAgICAgICAgICAgIGFyZSBhYmxlIHRvIHJlY2VpdmUgcHJlLWNvbXBpbGVkIHBhY2thZ2VzIGZyb20gYSBzZXJ2ZXIgZm9yCisgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uIG9yIHVwZGF0ZS4KKyAgICAgICAgICAgICAgICBCZWluZyBhYmxlIHRvIGluc3RhbGwgdGhlc2UgcGFja2FnZXMgb24gYSBydW5uaW5nLAorICAgICAgICAgICAgICAgIGluLWZpZWxkIGRldmljZSBpcyB3aGF0IGlzIHRlcm1lZCAicnVudGltZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgbWFuYWdlbWVudCIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIHVzZSBydW50aW1lIHBhY2thZ2UgbWFuYWdlbWVudCwgeW91CisgICAgICAgICAgICAgICAgbmVlZCBhIGhvc3Qvc2VydmVyIG1hY2hpbmUgdGhhdCBzZXJ2ZXMgdXAgdGhlIHByZS1jb21waWxlZAorICAgICAgICAgICAgICAgIHBhY2thZ2VzIHBsdXMgdGhlIHJlcXVpcmVkIG1ldGFkYXRhLgorICAgICAgICAgICAgICAgIFlvdSBhbHNvIG5lZWQgcGFja2FnZSBtYW5pcHVsYXRpb24gdG9vbHMgb24gdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICBUaGUgYnVpbGQgbWFjaGluZSBpcyBhIGxpa2VseSBjYW5kaWRhdGUgdG8gYWN0IGFzIHRoZSBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhhdCBtYWNoaW5lIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGhhdmUgdG8gYmUgdGhlCisgICAgICAgICAgICAgICAgcGFja2FnZSBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIG1hY2hpbmUgY291bGQgcHVzaCBpdHMgYXJ0aWZhY3RzIHRvIGFub3RoZXIgbWFjaGluZQorICAgICAgICAgICAgICAgIHRoYXQgYWN0cyBhcyB0aGUgc2VydmVyIChlLmcuIEludGVybmV0LWZhY2luZykuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgc2ltcGxlIGJ1aWxkIHRoYXQgdGFyZ2V0cyBqdXN0IG9uZSBkZXZpY2UgcHJvZHVjZXMKKyAgICAgICAgICAgICAgICBtb3JlIHRoYW4gb25lIHBhY2thZ2UgZGF0YWJhc2UuCisgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHRoZSBwYWNrYWdlcyBwcm9kdWNlZCBieSBhIGJ1aWxkIGFyZSBzZXBhcmF0ZWQKKyAgICAgICAgICAgICAgICBvdXQgaW50byBhIGNvdXBsZSBvZiBkaWZmZXJlbnQgcGFja2FnZSBncm91cGluZ3MgYmFzZWQgb24KKyAgICAgICAgICAgICAgICBjcml0ZXJpYSBzdWNoIGFzIHRoZSB0YXJnZXQncyBDUFUgYXJjaGl0ZWN0dXJlLCB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgYm9hcmQsIG9yIHRoZSBDIGxpYnJhcnkgdXNlZCBvbiB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBhIGJ1aWxkIHRhcmdldGluZyB0aGUgPGZpbGVuYW1lPnFlbXVhcm08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRldmljZSBwcm9kdWNlcyB0aGUgZm9sbG93aW5nIHRocmVlIHBhY2thZ2UgZGF0YWJhc2VzOgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hbGw8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmFybXY1dGU8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXVhcm08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudGVkIHlvdXIgPGZpbGVuYW1lPnFlbXVhcm08L2ZpbGVuYW1lPiBkZXZpY2UgdG8gYmUKKyAgICAgICAgICAgICAgICBhd2FyZSBvZiBhbGwgdGhlIHBhY2thZ2VzIHRoYXQgd2VyZSBhdmFpbGFibGUgdG8gaXQsCisgICAgICAgICAgICAgICAgeW91IHdvdWxkIG5lZWQgdG8gcG9pbnQgaXQgdG8gZWFjaCBvZiB0aGVzZSBkYXRhYmFzZXMKKyAgICAgICAgICAgICAgICBpbmRpdmlkdWFsbHkuCisgICAgICAgICAgICAgICAgSW4gYSBzaW1pbGFyIHdheSwgYSB0cmFkaXRpb25hbCBMaW51eCBkaXN0cmlidXRpb24gdXN1YWxseSBpcworICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQgdG8gYmUgYXdhcmUgb2YgYSBudW1iZXIgb2Ygc29mdHdhcmUgcmVwb3NpdG9yaWVzCisgICAgICAgICAgICAgICAgZnJvbSB3aGljaCBpdCByZXRyaWV2ZXMgcGFja2FnZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzaW5nIHJ1bnRpbWUgcGFja2FnZSBtYW5hZ2VtZW50IGlzIGNvbXBsZXRlbHkgb3B0aW9uYWwgYW5kCisgICAgICAgICAgICAgICAgbm90IHJlcXVpcmVkIGZvciBhIHN1Y2Nlc3NmdWwgYnVpbGQgb3IgZGVwbG95bWVudCBpbiBhbnkKKyAgICAgICAgICAgICAgICB3YXkuCisgICAgICAgICAgICAgICAgQnV0IGlmIHlvdSB3YW50IHRvIG1ha2UgdXNlIG9mIHJ1bnRpbWUgcGFja2FnZSBtYW5hZ2VtZW50LAorICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIGRvIGEgY291cGxlIHRoaW5ncyBhYm92ZSBhbmQgYmV5b25kIHRoZSBiYXNpY3MuCisgICAgICAgICAgICAgICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIHNlY3Rpb24gZGVzY3JpYmVzIHdoYXQgeW91IG5lZWQgdG8gZG8uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdydW50aW1lLXBhY2thZ2UtbWFuYWdlbWVudC1idWlsZCc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkJ1aWxkIENvbnNpZGVyYXRpb25zPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGJ1aWxkIGNvbnNpZGVyYXRpb25zIHRoYXQgeW91IG5lZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gYmUgYXdhcmUgb2YgaW4gb3JkZXIgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciBydW50aW1lCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbWFuYWdlbWVudC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBCaXRCYWtlIGdlbmVyYXRlcyBwYWNrYWdlcyBpdCBuZWVkcyB0byBrbm93CisgICAgICAgICAgICAgICAgICAgIHdoYXQgZm9ybWF0IG9yIGZvcm1hdHMgdG8gdXNlLgorICAgICAgICAgICAgICAgICAgICBJbiB5b3VyIGNvbmZpZ3VyYXRpb24sIHlvdSB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIHNwZWNpZnkgdGhlIGZvcm1hdC4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGNob29zZSB0byBoYXZlIG1vcmUgdGhhbiBvbmUgZm9ybWF0IGJ1dCB5b3UgbXVzdAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZSBhdCBsZWFzdCBvbmUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdvdWxkIGxpa2UgeW91ciBpbWFnZSB0byBzdGFydCBvZmYgd2l0aCBhIGJhc2ljCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgZGF0YWJhc2Ugb2YgdGhlIHBhY2thZ2VzIGluIHlvdXIgY3VycmVudCBidWlsZAorICAgICAgICAgICAgICAgICAgICBhcyB3ZWxsIGFzIGhhdmUgdGhlIHJlbGV2YW50IHRvb2xzIGF2YWlsYWJsZSBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGZvciBydW50aW1lIHBhY2thZ2UgbWFuYWdlbWVudCwgeW91IGNhbiBpbmNsdWRlCisgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlLW1hbmFnZW1lbnQiIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEluY2x1ZGluZyAicGFja2FnZS1tYW5hZ2VtZW50IiBpbiB0aGlzCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZW5zdXJlcyB0aGF0IHdoZW4gdGhlIGltYWdlCisgICAgICAgICAgICAgICAgICAgIGlzIGFzc2VtYmxlZCBmb3IgeW91ciB0YXJnZXQsIHRoZSBpbWFnZSBpbmNsdWRlcworICAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudGx5LWtub3duIHBhY2thZ2UgZGF0YWJhc2VzIGFzIHdlbGwgYXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIHRhcmdldC1zcGVjaWZpYyB0b29scyByZXF1aXJlZCBmb3IgcnVudGltZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG1hbmFnZW1lbnQgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoaXMgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNvdWxkIHN0YXJ0IHlvdXIgaW1hZ2Ugb2ZmIHdpdGhvdXQgYW55IGRhdGFiYXNlcworICAgICAgICAgICAgICAgICAgICBidXQgb25seSBpbmNsdWRlIHRoZSByZXF1aXJlZCBvbi10YXJnZXQgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICB0b29sKHMpLgorICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCB5b3UgY291bGQgaW5jbHVkZSAib3BrZyIgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfSU5TVEFMTCc+PGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIElQSyBwYWNrYWdlIGZvcm1hdC4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB0aGVuIGluaXRpYWxpemUgeW91ciB0YXJnZXQncyBwYWNrYWdlIGRhdGFiYXNlKHMpCisgICAgICAgICAgICAgICAgICAgIGxhdGVyIG9uY2UgeW91ciBpbWFnZSBpcyB1cCBhbmQgcnVubmluZy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbmV2ZXIgeW91IHBlcmZvcm0gYW55IHNvcnQgb2YgYnVpbGQgc3RlcCB0aGF0IGNhbgorICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxseSBnZW5lcmF0ZSBhIHBhY2thZ2Ugb3IgbW9kaWZ5IGFuIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UsIGl0IGlzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byByZS1nZW5lcmF0ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBpbmRleCB3aXRoOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgJCBiaXRiYWtlIHBhY2thZ2UtaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBSZWFsaXplIHRoYXQgaXQgaXMgbm90IHN1ZmZpY2llbnQgdG8gc2ltcGx5IGRvIHRoZQorICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAkIGJpdGJha2UgPHJlcGxhY2VhYmxlPnNvbWUtcGFja2FnZTwvcmVwbGFjZWFibGU+IHBhY2thZ2UtaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGJlY2F1c2UgQml0QmFrZSBkb2VzIG5vdCBwcm9wZXJseSBzY2hlZHVsZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2UtaW5kZXg8L2ZpbGVuYW1lPiB0YXJnZXQgZnVsbHkgYWZ0ZXIgYW55CisgICAgICAgICAgICAgICAgICAgIG90aGVyIHRhcmdldCBoYXMgY29tcGxldGVkLgorICAgICAgICAgICAgICAgICAgICBUaHVzLCBiZSBzdXJlIHRvIHJ1biB0aGUgcGFja2FnZSB1cGRhdGUgc3RlcCBzZXBhcmF0ZWx5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBcyBkZXNjcmliZWQgYmVsb3cgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdydW50aW1lLXBhY2thZ2UtbWFuYWdlbWVudC10YXJnZXQtaXBrJz5Vc2luZyBJUEs8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLCBpZiB5b3UgYXJlIHVzaW5nIElQSyBhcyB5b3VyIHBhY2thZ2UgZm9ybWF0LCB5b3UKKyAgICAgICAgICAgICAgICAgICAgY2FuIG1ha2UgdXNlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlzdHJvLWZlZWQtY29uZmlnczwvZmlsZW5hbWU+IHJlY2lwZSBwcm92aWRlZAorICAgICAgICAgICAgICAgICAgICBieSA8ZmlsZW5hbWU+bWV0YS1vZTwvZmlsZW5hbWU+IGluIG9yZGVyIHRvIGNvbmZpZ3VyZSB5b3VyCisgICAgICAgICAgICAgICAgICAgIHRhcmdldCB0byB1c2UgeW91ciBJUEsgZGF0YWJhc2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdXIgYnVpbGQgaXMgY29tcGxldGUsIHlvdXIgcGFja2FnZXMgcmVzaWRlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtUTVBESVJ9L2RlcGxveS88cmVwbGFjZWFibGU+cGFja2FnZS1mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIDxmaWxlbmFtZT4ke1RNUERJUn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyA8ZmlsZW5hbWU+dG1wPC9maWxlbmFtZT4gYW5kIHlvdXIgc2VsZWN0ZWQgcGFja2FnZSB0eXBlCisgICAgICAgICAgICAgICAgICAgIGlzIElQSywgdGhlbiB5b3VyIElQSyBwYWNrYWdlcyBhcmUgYXZhaWxhYmxlIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50bXAvZGVwbG95L2lwazwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3J1bnRpbWUtcGFja2FnZS1tYW5hZ2VtZW50LXNlcnZlcic+CisgICAgICAgICAgICAgICAgPHRpdGxlPkhvc3Qgb3IgU2VydmVyIE1hY2hpbmUgU2V0dXA8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgcGFja2FnZXMgYXJlIHNlcnZlZCBmcm9tIGEgc2VydmVyIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIEhUVFAuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIG90aGVyIHByb3RvY29scyBhcmUgcG9zc2libGUuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHVzZSBIVFRQLCB0aGVuIHNldHVwIGFuZCBjb25maWd1cmUgYQorICAgICAgICAgICAgICAgICAgICB3ZWIgc2VydmVyLCBzdWNoIGFzIEFwYWNoZSAyIG9yIGxpZ2h0dHBkLCBvbiB0aGUgbWFjaGluZQorICAgICAgICAgICAgICAgICAgICBzZXJ2aW5nIHRoZSBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXMgcHJldmlvdXNseSBtZW50aW9uZWQsIHRoZSBidWlsZCBtYWNoaW5lIGNhbiBhY3QgYXMgdGhlCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2Ugc2VydmVyLgorICAgICAgICAgICAgICAgICAgICBJbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zIHRoYXQgZGVzY3JpYmUgc2VydmVyIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgc2V0dXBzLCB0aGUgYnVpbGQgbWFjaGluZSBpcyBhc3N1bWVkIHRvIGFsc28gYmUgdGhlIHNlcnZlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0ncGFja2FnZS1zZXJ2ZXItYXBhY2hlJz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPlNlcnZpbmcgUGFja2FnZXMgdmlhIEFwYWNoZSAyPC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBhc3N1bWVzIHlvdSBhcmUgdXNpbmcgdGhlIEFwYWNoZSAyCisgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgdGhlIGRpcmVjdG9yeSB0byB5b3VyIEFwYWNoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLCB3aGljaCB5b3UgY2FuIGZpbmQgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvaHR0cGQvY29uZi9odHRwZC5jb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSBjb21tYW5kcyBzaW1pbGFyIHRvIHRoZXNlIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZXNlIGV4YW1wbGUgY29tbWFuZHMgYXNzdW1lIGEgdG9wLWxldmVsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVkIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gaW4geW91ciBob21lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGUgYWxzbyBhc3N1bWVzIGFuIFJQTSBwYWNrYWdlIHR5cGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgYSBkaWZmZXJlbnQgcGFja2FnZSB0eXBlLCBzdWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIElQSywgdXNlICJpcGsiIGluIHRoZSBwYXRobmFtZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJmx0O1ZpcnR1YWxIb3N0ICo6ODAmZ3Q7CisgICAgICAgLi4uLgorICAgICAgICAgQWxpYXMgL3JwbSB+L3Bva3kvYnVpbGQvdG1wL2RlcGxveS9ycG0KKyAgICAgICAgICZsdDtEaXJlY3RvcnkgIn4vcG9reS9idWlsZC90bXAvZGVwbG95L3JwbSImZ3Q7CisgICAgICAgICAgIE9wdGlvbnMgK0luZGV4ZXMKKyAgICAgICAgICZsdDsvRGlyZWN0b3J5Jmd0OworICAgICAmbHQ7L1ZpcnR1YWxIb3N0Jmd0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxvYWQgdGhlIEFwYWNoZSBjb25maWd1cmF0aW9uIGFzIGRlc2NyaWJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGlzIHN0ZXAuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhbGwgY29tbWFuZHMsIGJlIHN1cmUgeW91IGhhdmUgcm9vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2aWxlZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtIGlzIHVzaW5nIEZlZG9yYSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDZW50T1MsIHVzZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgc2VydmljZSBodHRwZCByZWxvYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgVWJ1bnR1IGFuZCBEZWJpYW4sIHVzZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgL2V0Yy9pbml0LmQvYXBhY2hlMiByZWxvYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgT3BlblNVU0UsIHVzZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgL2V0Yy9pbml0LmQvYXBhY2hlMiByZWxvYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB1c2luZyBTZWN1cml0eS1FbmhhbmNlZCBMaW51eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0VMaW51eCksIHlvdSBuZWVkIHRvIGxhYmVsIHRoZSBmaWxlcyBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWluZyBhY2Nlc3NpYmxlIHRocm91Z2ggQXBhY2hlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIGZyb20gdGhlIGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBhc3N1bWVzIFJQTSBwYWNrYWdlIHR5cGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgY2hjb24gLVIgLWggLXQgaHR0cGRfc3lzX2NvbnRlbnRfdCB0bXAvZGVwbG95L3JwbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3BhY2thZ2Utc2VydmVyLWxpZ2h0dHBkJz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPlNlcnZpbmcgUGFja2FnZXMgdmlhIGxpZ2h0dHBkPC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgbGlnaHR0cGQsIGFsbCB5b3UgbmVlZAorICAgICAgICAgICAgICAgICAgICAgICAgdG8gZG8gaXMgdG8gcHJvdmlkZSBhIGxpbmsgZnJvbSB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtUTVBESVJ9L2RlcGxveS88cmVwbGFjZWFibGU+cGFja2FnZS1mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgdG8gbGlnaHR0cGQncyBkb2N1bWVudC1yb290LgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkZXRlcm1pbmUgdGhlIHNwZWNpZmljcyBvZiB5b3VyIGxpZ2h0dHBkCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb24gYnkgbG9va2luZyB0aHJvdWdoIGl0cyBjb25maWd1cmF0aW9uIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyB1c3VhbGx5IGZvdW5kIGF0OgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvbGlnaHR0cGQvbGlnaHR0cGQuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSB1c2luZyBJUEssIGxpZ2h0dHBkJ3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LXJvb3QgaXMgc2V0IHRvCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Zhci93d3cvbGlnaHR0cGQ8L2ZpbGVuYW1lPiwgYW5kIHlvdSBoYWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGZvciBhIHRhcmdldCBuYW1lZCAiQk9BUkQiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiB5b3UgbWlnaHQgY3JlYXRlIGEgbGluayBmcm9tIHlvdXIgYnVpbGQgbG9jYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGxpZ2h0dHBkJ3MgZG9jdW1lbnQtcm9vdCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICMgbG4gLXMgJChQV0QpL3RtcC9kZXBsb3kvaXBrIC92YXIvd3d3L2xpZ2h0dHBkL0JPQVJELWRpcgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50LCB5b3UgbmVlZCB0byBzdGFydCB0aGUgbGlnaHR0cGQgc2VydmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1ldGhvZCB1c2VkIHRvIHN0YXJ0IHRoZSBzZXJ2ZXIgdmFyaWVzIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBvbmUgYmFzaWMgbWV0aG9kIHRoYXQgc3RhcnRzIGl0IGJ5IGhhbmQgaXM6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIyBsaWdodHRwZCAtZiAvZXRjL2xpZ2h0dHBkL2xpZ2h0dHBkLmNvbmYKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3J1bnRpbWUtcGFja2FnZS1tYW5hZ2VtZW50LXRhcmdldCc+CisgICAgICAgICAgICAgICAgPHRpdGxlPlRhcmdldCBTZXR1cDwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB1cCB0aGUgdGFyZ2V0IGRpZmZlcnMgZGVwZW5kaW5nIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG1hbmFnZW1lbnQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgaW5mb3JtYXRpb24gZm9yIFJQTSBhbmQgSVBLLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdydW50aW1lLXBhY2thZ2UtbWFuYWdlbWVudC10YXJnZXQtcnBtJz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPlVzaW5nIFJQTTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYXBwbGljYXRpb24gZm9yIHBlcmZvcm1pbmcgcnVudGltZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICAgICBtYW5hZ2VtZW50IG9mIFJQTSBwYWNrYWdlcyBvbiB0aGUgdGFyZ2V0IGlzIGNhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNtYXJ0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIHRoZSB0YXJnZXQgbWFjaGluZSwgeW91IG5lZWQgdG8gaW5mb3JtCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c21hcnQ8L2ZpbGVuYW1lPiBvZiBldmVyeSBwYWNrYWdlIGRhdGFiYXNlCisgICAgICAgICAgICAgICAgICAgICAgICB5b3Ugd2FudCB0byB1c2UuCisgICAgICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBzdXBwb3NlIHlvdXIgdGFyZ2V0IGRldmljZSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIHRocmVlIHBhY2thZ2UgZGF0YWJhc2VzIGZyb20gYSBzZXJ2ZXIgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zZXJ2ZXIubmFtZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFsbDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+aTU4NjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBHaXZlbiB0aGlzIGV4YW1wbGUsIGlzc3VlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgc21hcnQgY2hhbm5lbCAtLWFkZCBhbGwgdHlwZT1ycG0tbWQgYmFzZXVybD1odHRwOi8vc2VydmVyLm5hbWUvcnBtL2FsbAorICAgICAjIHNtYXJ0IGNoYW5uZWwgLS1hZGQgaTU4NSB0eXBlPXJwbS1tZCBiYXNldXJsPWh0dHA6Ly9zZXJ2ZXIubmFtZS9ycG0vaTU4NgorICAgICAjIHNtYXJ0IGNoYW5uZWwgLS1hZGQgcWVtdXg4NiB0eXBlPXJwbS1tZCBiYXNldXJsPWh0dHA6Ly9zZXJ2ZXIubmFtZS9ycG0vcWVtdXg4NgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgQWxzbyBmcm9tIHRoZSB0YXJnZXQgbWFjaGluZSwgZmV0Y2ggdGhlIHJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIHVzaW5nIHRoaXMgY29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBzbWFydCB1cGRhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gbm93IHVzZSB0aGUgPGZpbGVuYW1lPnNtYXJ0IHF1ZXJ5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+c21hcnQgaW5zdGFsbDwvZmlsZW5hbWU+IGNvbW1hbmRzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBmaW5kIGFuZCBpbnN0YWxsIHBhY2thZ2VzIGZyb20gdGhlIHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdydW50aW1lLXBhY2thZ2UtbWFuYWdlbWVudC10YXJnZXQtaXBrJz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPlVzaW5nIElQSzwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYXBwbGljYXRpb24gZm9yIHBlcmZvcm1pbmcgcnVudGltZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICAgICBtYW5hZ2VtZW50IG9mIElQSyBwYWNrYWdlcyBvbiB0aGUgdGFyZ2V0IGlzIGNhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9wa2c8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gaW5mb3JtIDxmaWxlbmFtZT5vcGtnPC9maWxlbmFtZT4gb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIGRhdGFiYXNlcyB5b3Ugd2FudCB0byB1c2UsIHNpbXBseSBjcmVhdGUgb25lCisgICAgICAgICAgICAgICAgICAgICAgICBvciBtb3JlIDxmaWxlbmFtZT4qLmNvbmY8L2ZpbGVuYW1lPiBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL29wa2c8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb24gdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+b3BrZzwvZmlsZW5hbWU+IGFwcGxpY2F0aW9uIHVzZXMgdGhlbQorICAgICAgICAgICAgICAgICAgICAgICAgdG8gZmluZCBpdHMgYXZhaWxhYmxlIHBhY2thZ2UgZGF0YWJhc2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgc3VwcG9zZSB5b3UgY29uZmlndXJlZCB5b3VyIEhUVFAgc2VydmVyCisgICAgICAgICAgICAgICAgICAgICAgICBvbiB5b3VyIG1hY2hpbmUgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53d3cubXlzaXRlLmNvbTwvZmlsZW5hbWU+IHRvIHNlcnZlIGZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGEgPGZpbGVuYW1lPkJPQVJELWRpcjwvZmlsZW5hbWU+IGRpcmVjdG9yeSB1bmRlcgorICAgICAgICAgICAgICAgICAgICAgICAgaXRzIGRvY3VtZW50LXJvb3QuCisgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHlvdSBtaWdodCBjcmVhdGUgYSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIG9uIHRoZSB0YXJnZXQgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2V0Yy9vcGtnL2Jhc2UtZmVlZHMuY29uZjwvZmlsZW5hbWU+IHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBzcmMvZ3ogYWxsIGh0dHA6Ly93d3cubXlzaXRlLmNvbS9CT0FSRC1kaXIvYWxsCisgICAgIHNyYy9neiBhcm12N2EgaHR0cDovL3d3dy5teXNpdGUuY29tL0JPQVJELWRpci9hcm12N2EKKyAgICAgc3JjL2d6IGJlYWdsZWJvbmUgaHR0cDovL3d3dy5teXNpdGUuY29tL0JPQVJELWRpci9iZWFnbGVib25lCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFzIGEgd2F5IG9mIG1ha2luZyBpdCBlYXNpZXIgdG8gZ2VuZXJhdGUgYW5kIG1ha2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZXNlIElQSyBjb25maWd1cmF0aW9uIGZpbGVzIGF2YWlsYWJsZSBvbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQsIHNpbXBseSBkZWZpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GRUVEX0RFUExPWURJUl9CQVNFX1VSSSc+PGZpbGVuYW1lPkZFRURfREVQTE9ZRElSX0JBU0VfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdG8gcG9pbnQgdG8geW91ciBzZXJ2ZXIgYW5kIHRoZSBsb2NhdGlvbiB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC1yb290IHdoaWNoIGNvbnRhaW5zIHRoZSBkYXRhYmFzZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZTogaWYgeW91IGFyZSBzZXJ2aW5nIHlvdXIgcGFja2FnZXMgb3ZlcgorICAgICAgICAgICAgICAgICAgICAgICAgSFRUUCwgeW91ciBzZXJ2ZXIncyBJUCBhZGRyZXNzIGlzIDE5Mi4xNjguNy4xLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgZGF0YWJhc2VzIGFyZSBsb2NhdGVkIGluIGEgZGlyZWN0b3J5IGNhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJPQVJELWRpcjwvZmlsZW5hbWU+IHVuZGVybmVhdGggeW91ciBIVFRQCisgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIncyBkb2N1bWVudC1yb290LCB5b3UgbmVlZCB0byBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GRUVEX0RFUExPWURJUl9CQVNFX1VSSTwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aHR0cDovLzE5Mi4xNjguNy4xL0JPQVJELWRpcjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgYSBzZXQgb2YgY29uZmlndXJhdGlvbiBmaWxlcyB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBpbiB5b3VyIHRhcmdldCB0byB3b3JrIHdpdGggdGhpcyBmZWVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBPbiB0aGUgdGFyZ2V0IG1hY2hpbmUsIGZldGNoIChvciByZWZyZXNoKSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgaW5mb3JtYXRpb24gdXNpbmcgdGhpcyBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIG9wa2cgdXBkYXRlCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG5vdyB1c2UgdGhlIDxmaWxlbmFtZT5vcGtnIGxpc3Q8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vcGtnIGluc3RhbGw8L2ZpbGVuYW1lPiBjb21tYW5kcyB0byBmaW5kIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCBwYWNrYWdlcyBmcm9tIHRoZSByZXBvc2l0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndGVzdGluZy1wYWNrYWdlcy13aXRoLXB0ZXN0Jz4KKyAgICAgICAgICAgIDx0aXRsZT5UZXN0aW5nIFBhY2thZ2VzIFdpdGggcHRlc3Q8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIFBhY2thZ2UgVGVzdCAocHRlc3QpIHJ1bnMgdGVzdHMgYWdhaW5zdCBwYWNrYWdlcyBidWlsdAorICAgICAgICAgICAgICAgIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIG9uIHRoZSB0YXJnZXQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICBBIHB0ZXN0IGNvbnRhaW5zIGF0IGxlYXN0IHR3byBpdGVtczogdGhlIGFjdHVhbCB0ZXN0LCBhbmQKKyAgICAgICAgICAgICAgICBhIHNoZWxsIHNjcmlwdCAoPGZpbGVuYW1lPnJ1bi1wdGVzdDwvZmlsZW5hbWU+KSB0aGF0IHN0YXJ0cworICAgICAgICAgICAgICAgIHRoZSB0ZXN0LgorICAgICAgICAgICAgICAgIFRoZSBzaGVsbCBzY3JpcHQgdGhhdCBzdGFydHMgdGhlIHRlc3QgbXVzdCBub3QgY29udGFpbgorICAgICAgICAgICAgICAgIHRoZSBhY3R1YWwgdGVzdCAtIHRoZSBzY3JpcHQgb25seSBzdGFydHMgdGhlIHRlc3QuCisgICAgICAgICAgICAgICAgT24gdGhlIG90aGVyIGhhbmQsIHRoZSB0ZXN0IGNhbiBiZSBhbnl0aGluZyBmcm9tIGEgc2ltcGxlCisgICAgICAgICAgICAgICAgc2hlbGwgc2NyaXB0IHRoYXQgcnVucyBhIGJpbmFyeSBhbmQgY2hlY2tzIHRoZSBvdXRwdXQgdG8KKyAgICAgICAgICAgICAgICBhbiBlbGFib3JhdGUgc3lzdGVtIG9mIHRlc3QgYmluYXJpZXMgYW5kIGRhdGEgZmlsZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSB0ZXN0IGdlbmVyYXRlcyBvdXRwdXQgaW4gdGhlIGZvcm1hdCB1c2VkIGJ5CisgICAgICAgICAgICAgICAgQXV0b21ha2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+cmVzdWx0PC9yZXBsYWNlYWJsZT46IDxyZXBsYWNlYWJsZT50ZXN0bmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIHdoZXJlIHRoZSByZXN1bHQgY2FuIGJlIDxmaWxlbmFtZT5QQVNTPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZBSUw8L2ZpbGVuYW1lPiwgb3IgPGZpbGVuYW1lPlNLSVA8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICBhbmQgdGhlIHRlc3RuYW1lIGNhbiBiZSBhbnkgaWRlbnRpZnlpbmcgc3RyaW5nLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgYSBsaXN0IG9mIFlvY3RvIFByb2plY3QgcmVjaXBlcyB0aGF0IGFyZSBhbHJlYWR5CisgICAgICAgICAgICAgICAgZW5hYmxlZCB3aXRoIHB0ZXN0LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9QdGVzdCc+UHRlc3Q8L3VsaW5rPgorICAgICAgICAgICAgICAgIHdpa2kgcGFnZS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgQSByZWNpcGUgaXMgInB0ZXN0LWVuYWJsZWQiIGlmIGl0IGluaGVyaXRzIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1wdGVzdCc+PGZpbGVuYW1lPnB0ZXN0PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdhZGRpbmctcHRlc3QtdG8teW91ci1idWlsZCc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkFkZGluZyBwdGVzdCB0byBZb3VyIEJ1aWxkPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBhZGQgcGFja2FnZSB0ZXN0aW5nIHRvIHlvdXIgYnVpbGQsIGFkZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1FWFRSQV9JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPkVYVFJBX0lNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgdG8geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUsCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRElTVFJPX0ZFQVRVUkVTX2FwcGVuZCA9ICIgcHRlc3QiCisgICAgIEVYVFJBX0lNQUdFX0ZFQVRVUkVTICs9ICJwdGVzdC1wa2dzIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91ciBidWlsZCBpcyBjb21wbGV0ZSwgdGhlIHB0ZXN0IGZpbGVzIGFyZSBpbnN0YWxsZWQKKyAgICAgICAgICAgICAgICAgICAgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvbGliLzxyZXBsYWNlYWJsZT5wYWNrYWdlPC9yZXBsYWNlYWJsZT4vcHRlc3Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgd2l0aGluIHRoZSBpbWFnZSwgd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5wYWNrYWdlPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyB0aGUgbmFtZSBvZiB0aGUgcGFja2FnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdydW5uaW5nLXB0ZXN0Jz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+UnVubmluZyBwdGVzdDwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5wdGVzdC1ydW5uZXI8L2ZpbGVuYW1lPiBwYWNrYWdlIGluc3RhbGxzIGEKKyAgICAgICAgICAgICAgICAgICAgc2hlbGwgc2NyaXB0IHRoYXQgbG9vcHMgdGhyb3VnaCBhbGwgaW5zdGFsbGVkIHB0ZXN0IHRlc3QKKyAgICAgICAgICAgICAgICAgICAgc3VpdGVzIGFuZCBydW5zIHRoZW0gaW4gc2VxdWVuY2UuCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IG1pZ2h0IHdhbnQgdG8gYWRkIHRoaXMgcGFja2FnZSB0bworICAgICAgICAgICAgICAgICAgICB5b3VyIGltYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2dldHRpbmcteW91ci1wYWNrYWdlLXJlYWR5Jz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+R2V0dGluZyBZb3VyIFBhY2thZ2UgUmVhZHk8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIGVuYWJsZSBhIHJlY2lwZSB0byBydW4gaW5zdGFsbGVkIHB0ZXN0cworICAgICAgICAgICAgICAgICAgICBvbiB0YXJnZXQgaGFyZHdhcmUsCisgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIHByZXBhcmUgdGhlIHJlY2lwZXMgdGhhdCBidWlsZCB0aGUgcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgeW91IHdhbnQgdG8gdGVzdC4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyB3aGF0IHlvdSBoYXZlIHRvIGRvIGZvciBlYWNoIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QmUgc3VyZSB0aGUgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdHMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtcHRlc3QnPjxmaWxlbmFtZT5wdGVzdDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGUgdGhlIGZvbGxvd2luZyBsaW5lIGluIGVhY2ggcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgaW5oZXJpdCBwdGVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIDxmaWxlbmFtZT5ydW4tcHRlc3Q8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc2NyaXB0IHN0YXJ0cyB5b3VyIHRlc3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYXRlIHRoZSBzY3JpcHQgd2hlcmUgeW91IHdpbGwgcmVmZXIgdG8gaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgc3RhcnRzIGEgdGVzdCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGJ1czwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyEvYmluL3NoCisgICAgIGNkIHRlc3QKKyAgICAgbWFrZSAtayBydW50ZXN0LVRFU1RTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FbnN1cmUgZGVwZW5kZW5jaWVzIGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSB0ZXN0IGFkZHMgYnVpbGQgb3IgcnVudGltZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IG5vcm1hbGx5IGRvIG5vdCBleGlzdCBmb3IgdGhlIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3VjaCBhcyByZXF1aXJpbmcgIm1ha2UiIHRvIHJ1biB0aGUgdGVzdCBzdWl0ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgaW4geW91ciByZWNpcGUgaW4gb3JkZXIgZm9yIHRoZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gbWVldCB0aGUgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB3aGVyZSB0aGUgcGFja2FnZSBoYXMgYSBydW50aW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSBvbiAibWFrZSI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibWFrZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFkZCBhIGZ1bmN0aW9uIHRvIGJ1aWxkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Qgc3VpdGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3QgbWFueSBwYWNrYWdlcyBzdXBwb3J0IGNyb3NzLWNvbXBpbGF0aW9uIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlaXIgdGVzdCBzdWl0ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgdXN1YWxseSBuZWVkIHRvIGFkZCBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Jvc3MtY29tcGlsYXRpb24gZnVuY3Rpb24gdG8gdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPk1hbnkgcGFja2FnZXMgYmFzZWQgb24gQXV0b21ha2UgY29tcGlsZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW4gdGhlIHRlc3Qgc3VpdGUgYnkgdXNpbmcgYSBzaW5nbGUgY29tbWFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMgPGZpbGVuYW1lPm1ha2UgY2hlY2s8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGUgbmF0aXZlIDxmaWxlbmFtZT5tYWtlIGNoZWNrPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZHMgYW5kIHJ1bnMgb24gdGhlIHNhbWUgY29tcHV0ZXIsIHdoaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Jvc3MtY29tcGlsaW5nIHJlcXVpcmVzIHRoYXQgdGhlIHBhY2thZ2UgaXMgYnVpbHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgaG9zdCBidXQgZXhlY3V0ZWQgb24gdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbHQgdmVyc2lvbiBvZiBBdXRvbWFrZSB0aGF0IHNoaXBzIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBpbmNsdWRlcyBhIHBhdGNoIHRoYXQgc2VwYXJhdGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmcgYW5kIGV4ZWN1dGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHBhY2thZ2VzIHRoYXQgdXNlIHRoZSB1bmFsdGVyZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hlZCB2ZXJzaW9uIG9mIDxmaWxlbmFtZT5tYWtlIGNoZWNrPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGNyb3NzLWNvbXBpbGVzLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5SZWdhcmRsZXNzLCB5b3Ugc3RpbGwgbXVzdCBhZGQgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jb21waWxlX3B0ZXN0PC9maWxlbmFtZT4gZnVuY3Rpb24gdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCB0aGUgdGVzdCBzdWl0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgYSBmdW5jdGlvbiBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmcgdG8geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX2NvbXBpbGVfcHRlc3QoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgYnVpbGR0ZXN0LVRFU1RTCisgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RW5zdXJlIHNwZWNpYWwgY29uZmlndXJhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgc2V0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIHBhY2thZ2UgcmVxdWlyZXMgc3BlY2lhbCBjb25maWd1cmF0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yIHRvIGNvbXBpbGluZyB0aGUgdGVzdCBjb2RlLCB5b3UgbXVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydCBhIDxmaWxlbmFtZT5kb19jb25maWd1cmVfcHRlc3Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGludG8gdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbnN0YWxsIHRoZSB0ZXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnB0ZXN0PC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGNvcGllcyB0aGUgZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ydW4tcHRlc3Q8L2ZpbGVuYW1lPiB0byB0aGUgdGFyZ2V0IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gcnVucyBtYWtlIDxmaWxlbmFtZT5pbnN0YWxsLXB0ZXN0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBydW4gdGhlIHRlc3RzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoaXMgaXMgbm90IGVub3VnaCwgeW91IG5lZWQgdG8gY3JlYXRlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9faW5zdGFsbF9wdGVzdDwvZmlsZW5hbWU+IGZ1bmN0aW9uIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Ugc3VyZSBpdCBnZXRzIGNhbGxlZCBhZnRlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWFrZSBpbnN0YWxsLXB0ZXN0IiBjb21wbGV0ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd3b3JraW5nLXdpdGgtc291cmNlLWZpbGVzJz4KKyAgICAgICAgPHRpdGxlPldvcmtpbmcgd2l0aCBTb3VyY2UgRmlsZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd29ya3Mgd2l0aCBzb3VyY2UgZmlsZXMgbG9jYXRlZAorICAgICAgICAgICAgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgV2hlbiB5b3UgYnVpbGQgc29tZXRoaW5nIHVzaW5nIEJpdEJha2UsIGEgYmlnIHBhcnQgb2YgdGhlIG9wZXJhdGlvbgorICAgICAgICAgICAgaXMgbG9jYXRpbmcgYW5kIGRvd25sb2FkaW5nIGFsbCB0aGUgc291cmNlIHRhcmJhbGxzLgorICAgICAgICAgICAgRm9yIGltYWdlcywgZG93bmxvYWRpbmcgYWxsIHRoZSBzb3VyY2UgZm9yIHZhcmlvdXMgcGFja2FnZXMgY2FuCisgICAgICAgICAgICB0YWtlIGEgc2lnbmlmaWNhbnQgYW1vdW50IG9mIHRpbWUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcmVzZW50cyBpbmZvcm1hdGlvbiBmb3Igd29ya2luZyB3aXRoIHNvdXJjZQorICAgICAgICAgICAgZmlsZXMgdGhhdCBjYW4gbGVhZCB0byBtb3JlIGVmZmljaWVudCB1c2Ugb2YgcmVzb3VyY2VzIGFuZAorICAgICAgICAgICAgdGltZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzZXR0aW5nLXVwLWVmZmVjdGl2ZS1taXJyb3JzJz4KKyAgICAgICAgICAgIDx0aXRsZT5TZXR0aW5nIHVwIEVmZmVjdGl2ZSBNaXJyb3JzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgbWVudGlvbmVkLCBhIGdvb2QgZGVhbCB0aGF0IGdvZXMgaW50byBhIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICBidWlsZCBpcyBzaW1wbHkgZG93bmxvYWRpbmcgYWxsIG9mIHRoZSBzb3VyY2UgdGFyYmFsbHMuCisgICAgICAgICAgICAgICAgTWF5YmUgeW91IGhhdmUgYmVlbiB3b3JraW5nIHdpdGggYW5vdGhlciBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAoT3BlbkVtYmVkZGVkIG9yIEFuZ3N0cm9tKSBmb3Igd2hpY2ggeW91IGhhdmUgYnVpbHQgdXAgYQorICAgICAgICAgICAgICAgIHNpemFibGUgZGlyZWN0b3J5IG9mIHNvdXJjZSB0YXJiYWxscy4KKyAgICAgICAgICAgICAgICBPciwgcGVyaGFwcyBzb21lb25lIGVsc2UgaGFzIHN1Y2ggYSBkaXJlY3RvcnkgZm9yIHdoaWNoIHlvdQorICAgICAgICAgICAgICAgIGhhdmUgcmVhZCBhY2Nlc3MuCisgICAgICAgICAgICAgICAgSWYgc28sIHlvdSBjYW4gc2F2ZSB0aW1lIGJ5IGFkZGluZyBzdGF0ZW1lbnRzIHRvIHlvdXIKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgc28gdGhhdCB0aGUgYnVpbGQgcHJvY2VzcyBjaGVja3MgbG9jYWwKKyAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyBmaXJzdCBmb3IgZXhpc3RpbmcgdGFyYmFsbHMgYmVmb3JlIGNoZWNraW5nIHRoZQorICAgICAgICAgICAgICAgIEludGVybmV0LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGVmZmljaWVudCB3YXkgdG8gc2V0IGl0IHVwIGluIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTT1VSQ0VfTUlSUk9SX1VSTCA/PSAiZmlsZTovLy9ob21lL3lvdS95b3VyLWRvd25sb2FkLWRpci8iCisgICAgIElOSEVSSVQgKz0gIm93bi1taXJyb3JzIgorICAgICBCQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMgPSAiMSIKKyAgICAgIyBCQl9OT19ORVRXT1JLID0gIjEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyc+PGZpbGVuYW1lPkJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBjYXVzZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gZ2VuZXJhdGUKKyAgICAgICAgICAgICAgICB0YXJiYWxscyBvZiB0aGUgR2l0IHJlcG9zaXRvcmllcyBhbmQgc3RvcmUgdGhlbSBpbiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBEdWUgdG8gcGVyZm9ybWFuY2UgcmVhc29ucywgZ2VuZXJhdGluZyBhbmQgc3RvcmluZyB0aGVzZQorICAgICAgICAgICAgICAgIHRhcmJhbGxzIGlzIG5vdCB0aGUgYnVpbGQgc3lzdGVtJ3MgZGVmYXVsdCBiZWhhdmlvci4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFJFTUlSUk9SUyc+PGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgRm9yIGFuIGV4YW1wbGUsIHNlZSB0aGUgdmFyaWFibGUncyBnbG9zc2FyeSBlbnRyeSBpbiB0aGUKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZ2V0dGluZy1zb3VyY2UtZmlsZXMtYW5kLXN1cHByZXNzaW5nLXRoZS1idWlsZCc+CisgICAgICAgICAgICA8dGl0bGU+R2V0dGluZyBTb3VyY2UgRmlsZXMgYW5kIFN1cHByZXNzaW5nIHRoZSBCdWlsZDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFub3RoZXIgdGVjaG5pcXVlIHlvdSBjYW4gdXNlIHRvIHJlYWR5IHlvdXJzZWxmIGZvciBhCisgICAgICAgICAgICAgICAgc3VjY2Vzc2l2ZSBzdHJpbmcgb2YgYnVpbGQgb3BlcmF0aW9ucywgaXMgdG8gcHJlLWZldGNoCisgICAgICAgICAgICAgICAgYWxsIHRoZSBzb3VyY2UgZmlsZXMgd2l0aG91dCBhY3R1YWxseSBzdGFydGluZyBhIGJ1aWxkLgorICAgICAgICAgICAgICAgIFRoaXMgdGVjaG5pcXVlIGxldHMgeW91IHdvcmsgdGhyb3VnaCBhbnkgZG93bmxvYWQgaXNzdWVzCisgICAgICAgICAgICAgICAgYW5kIHVsdGltYXRlbHkgZ2F0aGVycyBhbGwgdGhlIHNvdXJjZSBmaWxlcyBpbnRvIHlvdXIKKyAgICAgICAgICAgICAgICBkb3dubG9hZCBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtYnVpbGQtZG93bmxvYWRzJz48ZmlsZW5hbWU+YnVpbGQvZG93bmxvYWRzPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICB3aGljaCBpcyBsb2NhdGVkIHdpdGgKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgQml0QmFrZSBjb21tYW5kIGZvcm0gdG8gZmV0Y2ggYWxsIHRoZQorICAgICAgICAgICAgICAgIG5lY2Vzc2FyeSBzb3VyY2VzIHdpdGhvdXQgc3RhcnRpbmcgdGhlIGJ1aWxkOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1jIGZldGNoYWxsIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIHZhcmlhdGlvbiBvZiB0aGUgQml0QmFrZSBjb21tYW5kIGd1YXJhbnRlZXMgdGhhdCB5b3UKKyAgICAgICAgICAgICAgICBoYXZlIGFsbCB0aGUgc291cmNlcyBmb3IgdGhhdCBCaXRCYWtlIHRhcmdldCBzaG91bGQgeW91CisgICAgICAgICAgICAgICAgZGlzY29ubmVjdCBmcm9tIHRoZSBJbnRlcm5ldCBhbmQgd2FudCB0byBkbyB0aGUgYnVpbGQKKyAgICAgICAgICAgICAgICBsYXRlciBvZmZsaW5lLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImJ1aWxkaW5nLXNvZnR3YXJlLWZyb20tYW4tZXh0ZXJuYWwtc291cmNlIj4KKyAgICAgICAgPHRpdGxlPkJ1aWxkaW5nIFNvZnR3YXJlIGZyb20gYW4gRXh0ZXJuYWwgU291cmNlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4gd2hlbgorICAgICAgICAgICAgYnVpbGRpbmcgc291cmNlIGNvZGUuCisgICAgICAgICAgICBUaGUgYnVpbGQgcHJvY2VzcyBpbnZvbHZlcyBmZXRjaGluZyB0aGUgc291cmNlIGZpbGVzLCB1bnBhY2tpbmcKKyAgICAgICAgICAgIHRoZW0sIGFuZCB0aGVuIHBhdGNoaW5nIHRoZW0gaWYgbmVjZXNzYXJ5IGJlZm9yZSB0aGUgYnVpbGQgdGFrZXMKKyAgICAgICAgICAgIHBsYWNlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTaXR1YXRpb25zIGV4aXN0IHdoZXJlIHlvdSBtaWdodCB3YW50IHRvIGJ1aWxkIHNvZnR3YXJlIGZyb20gc291cmNlCisgICAgICAgICAgICBmaWxlcyB0aGF0IGFyZSBleHRlcm5hbCB0byBhbmQgdGh1cyBvdXRzaWRlIG9mIHRoZQorICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYXZlIGEgcHJvamVjdCB0aGF0IGluY2x1ZGVzIGEgbmV3IEJTUCB3aXRoCisgICAgICAgICAgICBhIGhlYXZpbHkgY3VzdG9taXplZCBrZXJuZWwuCisgICAgICAgICAgICBBbmQsIHlvdSB3YW50IHRvIG1pbmltaXplIGV4cG9zaW5nIHRoZSBidWlsZCBzeXN0ZW0gdG8gdGhlCisgICAgICAgICAgICBkZXZlbG9wbWVudCB0ZWFtIHNvIHRoYXQgdGhleSBjYW4gZm9jdXMgb24gdGhlaXIgcHJvamVjdCBhbmQKKyAgICAgICAgICAgIG1haW50YWluIGV2ZXJ5b25lJ3Mgd29ya2Zsb3cgYXMgbXVjaCBhcyBwb3NzaWJsZS4KKyAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgeW91IHdhbnQgYSBrZXJuZWwgc291cmNlIGRpcmVjdG9yeSBvbiB0aGUgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgIG1hY2hpbmUgd2hlcmUgdGhlIGRldmVsb3BtZW50IG9jY3Vycy4KKyAgICAgICAgICAgIFlvdSB3YW50IHRoZSByZWNpcGUncworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgdmFyaWFibGUgdG8gcG9pbnQgdG8gdGhlIGV4dGVybmFsIGRpcmVjdG9yeSBhbmQgdXNlIGl0IGFzIGlzLCBub3QKKyAgICAgICAgICAgIGNvcHkgaXQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGJ1aWxkIGZyb20gc29mdHdhcmUgdGhhdCBjb21lcyBmcm9tIGFuIGV4dGVybmFsIHNvdXJjZSwgYWxsIHlvdQorICAgICAgICAgICAgbmVlZCB0byBkbyBpcyBpbmhlcml0IHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtZXh0ZXJuYWxzcmMnPjxmaWxlbmFtZT5leHRlcm5hbHNyYzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgIGNsYXNzIGFuZCB0aGVuIHNldCB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1FWFRFUk5BTFNSQyc+PGZpbGVuYW1lPkVYVEVSTkFMU1JDPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgdmFyaWFibGUgdG8gcG9pbnQgdG8geW91ciBleHRlcm5hbCBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgIEhlcmUgYXJlIHRoZSBzdGF0ZW1lbnRzIHRvIHB1dCBpbiB5b3VyCisgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSEVSSVQgKz0gImV4dGVybmFsc3JjIgorICAgICBFWFRFUk5BTFNSQ19wbi08cmVwbGFjZWFibGU+bXlyZWNpcGU8L3JlcGxhY2VhYmxlPiA9ICI8cmVwbGFjZWFibGU+cGF0aC10by15b3VyLXNvdXJjZS10cmVlPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgbmV4dCBleGFtcGxlIHNob3dzIGhvdyB0byBhY2NvbXBsaXNoIHRoZSBzYW1lIHRoaW5nIGJ5IHNldHRpbmcKKyAgICAgICAgICAgIDxmaWxlbmFtZT5FWFRFUk5BTFNSQzwvZmlsZW5hbWU+IGluIHRoZSByZWNpcGUgaXRzZWxmIG9yIGluIHRoZQorICAgICAgICAgICAgcmVjaXBlJ3MgYXBwZW5kIGZpbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEVYVEVSTkFMU1JDID0gIjxyZXBsYWNlYWJsZT5wYXRoPC9yZXBsYWNlYWJsZT4iCisgICAgIEVYVEVSTkFMU1JDX0JVSUxEID0gIjxyZXBsYWNlYWJsZT5wYXRoPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBJbiBvcmRlciBmb3IgdGhlc2Ugc2V0dGluZ3MgdG8gdGFrZSBlZmZlY3QsIHlvdSBtdXN0IGdsb2JhbGx5CisgICAgICAgICAgICAgICAgb3IgbG9jYWxseSBpbmhlcml0IHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1jbGFzc2VzLWV4dGVybmFsc3JjJz48ZmlsZW5hbWU+ZXh0ZXJuYWxzcmM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIDxmaWxlbmFtZT5leHRlcm5hbHNyYy5iYmNsYXNzPC9maWxlbmFtZT4gYnVpbGRzCisgICAgICAgICAgICB0aGUgc291cmNlIGNvZGUgaW4gYSBkaXJlY3Rvcnkgc2VwYXJhdGUgZnJvbSB0aGUgZXh0ZXJuYWwgc291cmNlCisgICAgICAgICAgICBkaXJlY3RvcnkgYXMgc3BlY2lmaWVkIGJ5CisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRVhURVJOQUxTUkMnPjxmaWxlbmFtZT5FWFRFUk5BTFNSQzwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBoYXZlIHRoZSBzb3VyY2UgYnVpbHQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGluCisgICAgICAgICAgICB3aGljaCBpdCByZXNpZGVzLCBvciBzb21lIG90aGVyIG5vbWluYXRlZCBkaXJlY3RvcnksIHlvdSBjYW4gc2V0CisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRVhURVJOQUxTUkNfQlVJTEQnPjxmaWxlbmFtZT5FWFRFUk5BTFNSQ19CVUlMRDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgIHRvIHBvaW50IHRvIHRoYXQgZGlyZWN0b3J5OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBFWFRFUk5BTFNSQ19CVUlMRF9wbi08cmVwbGFjZWFibGU+bXlyZWNpcGU8L3JlcGxhY2VhYmxlPiA9ICI8cmVwbGFjZWFibGU+cGF0aC10by15b3VyLXNvdXJjZS10cmVlPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ic2VsZWN0aW5nLWFuLWluaXRpYWxpemF0aW9uLW1hbmFnZXIiPgorICAgICAgICA8dGl0bGU+U2VsZWN0aW5nIGFuIEluaXRpYWxpemF0aW9uIE1hbmFnZXI8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIFlvY3RvIFByb2plY3QgdXNlcyBTeXNWaW5pdCBhcyB0aGUgaW5pdGlhbGl6YXRpb24KKyAgICAgICAgICAgIG1hbmFnZXIuCisgICAgICAgICAgICBIb3dldmVyLCBzdXBwb3J0IGFsc28gZXhpc3RzIGZvciBzeXN0ZW1kLAorICAgICAgICAgICAgd2hpY2ggaXMgYSBmdWxsIHJlcGxhY2VtZW50IGZvciBpbml0IHdpdGgKKyAgICAgICAgICAgIHBhcmFsbGVsIHN0YXJ0aW5nIG9mIHNlcnZpY2VzLCByZWR1Y2VkIHNoZWxsIG92ZXJoZWFkIGFuZCBvdGhlcgorICAgICAgICAgICAgZmVhdHVyZXMgdGhhdCBhcmUgdXNlZCBieSBtYW55IGRpc3RyaWJ1dGlvbnMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHVzZSBTeXNWaW5pdCwgeW91IGRvCisgICAgICAgICAgICBub3QgaGF2ZSB0byBkbyBhbnl0aGluZy4KKyAgICAgICAgICAgIEJ1dCwgaWYgeW91IHdhbnQgdG8gdXNlIHN5c3RlbWQsIHlvdSBtdXN0CisgICAgICAgICAgICB0YWtlIHNvbWUgc3RlcHMgYXMgZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmctc3lzdGVtZC1leGNsdXNpdmVseSc+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgc3lzdGVtZCBFeGNsdXNpdmVseTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNldCB0aGUgdGhlc2UgdmFyaWFibGVzIGluIHlvdXIgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICBmaWxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBESVNUUk9fRkVBVFVSRVNfYXBwZW5kID0gIiBzeXN0ZW1kIgorICAgICBWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyID0gInN5c3RlbWQiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBwcmV2ZW50IHRoZSBTeXNWaW5pdAorICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiBmZWF0dXJlIGZyb20KKyAgICAgICAgICAgICAgICBiZWluZyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEID0gInN5c3Zpbml0IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBEb2luZyBzbyByZW1vdmVzIGFueSByZWR1bmRhbnQgU3lzVmluaXQgc2NyaXB0cy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gcmVtb3ZlICBpbml0c2NyaXB0cyBmcm9tIHlvdXIgaW1hZ2UgYWx0b2dldGhlciwKKyAgICAgICAgICAgICAgICBzZXQgdGhpcyB2YXJpYWJsZSBhbHNvOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVklSVFVBTC1SVU5USU1FX2luaXRzY3JpcHRzID0gIiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgYmFja2ZpbGwgdmFyaWFibGUsIHNlZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRCc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1zeXN0ZW1kLWZvci10aGUtbWFpbi1pbWFnZS1hbmQtdXNpbmctc3lzdmluaXQtZm9yLXRoZS1yZXNjdWUtaW1hZ2UnPgorICAgICAgICAgICAgPHRpdGxlPlVzaW5nIHN5c3RlbWQgZm9yIHRoZSBNYWluIEltYWdlIGFuZCBVc2luZyBTeXNWaW5pdCBmb3IgdGhlIFJlc2N1ZSBJbWFnZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNldCB0aGVzZSB2YXJpYWJsZXMgaW4geW91ciBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZpbGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERJU1RST19GRUFUVVJFU19hcHBlbmQgPSAiIHN5c3RlbWQiCisgICAgIFZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIgPSAic3lzdGVtZCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgRG9pbmcgc28gY2F1c2VzIHlvdXIgbWFpbiBpbWFnZSB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC1jb3JlLWJvb3QuYmI8L2ZpbGVuYW1lPiByZWNpcGUgYW5kCisgICAgICAgICAgICAgICAgc3lzdGVtZC4KKyAgICAgICAgICAgICAgICBUaGUgcmVzY3VlL21pbmltYWwgaW1hZ2UgY2Fubm90IHVzZSB0aGlzIHBhY2thZ2UgZ3JvdXAuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgaXQgY2FuIGluc3RhbGwgU3lzVmluaXQKKyAgICAgICAgICAgICAgICBhbmQgdGhlIGFwcHJvcHJpYXRlIHBhY2thZ2VzIHdpbGwgaGF2ZSBzdXBwb3J0IGZvciBib3RoCisgICAgICAgICAgICAgICAgc3lzdGVtZCBhbmQgU3lzVmluaXQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ic2VsZWN0aW5nLWRldi1tYW5hZ2VyIj4KKyAgICAgICAgPHRpdGxlPlNlbGVjdGluZyBhIERldmljZSBNYW5hZ2VyPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIG11bHRpcGxlIHdheXMgdG8gbWFuYWdlIHRoZSBkZXZpY2UKKyAgICAgICAgICAgIG1hbmFnZXIgKDxmaWxlbmFtZT4vZGV2PC9maWxlbmFtZT4pOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBlcnNpc3RlbnQgYW5kIFByZS1Qb3B1bGF0ZWQ8ZmlsZW5hbWU+L2RldjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEZvciB0aGlzIGNhc2UsIHRoZSA8ZmlsZW5hbWU+L2RldjwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICBpcyBwZXJzaXN0ZW50IGFuZCB0aGUgcmVxdWlyZWQgZGV2aWNlIG5vZGVzIGFyZSBjcmVhdGVkCisgICAgICAgICAgICAgICAgICAgIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNlIDxmaWxlbmFtZT5kZXZ0bXBmczwvZmlsZW5hbWU+IHdpdGggYSBEZXZpY2UgTWFuYWdlcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBGb3IgdGhpcyBjYXNlLCB0aGUgPGZpbGVuYW1lPi9kZXY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgaXMgcHJvdmlkZWQgYnkgdGhlIGtlcm5lbCBhcyBhbiBpbi1tZW1vcnkgZmlsZSBzeXN0ZW0gYW5kCisgICAgICAgICAgICAgICAgICAgIGlzIGF1dG9tYXRpY2FsbHkgcG9wdWxhdGVkIGJ5IHRoZSBrZXJuZWwgYXQgcnVudGltZS4KKyAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9mIGRldmljZSBub2RlcyBpcyBkb25lIGluIHVzZXIKKyAgICAgICAgICAgICAgICAgICAgc3BhY2UgYnkgYSBkZXZpY2UgbWFuYWdlciBsaWtlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51ZGV2PC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1c3lib3gtbWRldjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9InN0YXRpYy1kZXYtbWFuYWdlbWVudCI+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgUGVyc2lzdGVudCBhbmQgUHJlLVBvcHVsYXRlZDxmaWxlbmFtZT4vZGV2PC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyB1c2UgdGhlIHN0YXRpYyBtZXRob2QgZm9yIGRldmljZSBwb3B1bGF0aW9uLCB5b3UgbmVlZCB0bworICAgICAgICAgICAgICAgIHNldCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVVNFX0RFVkZTJz48ZmlsZW5hbWU+VVNFX0RFVkZTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvICIwIiBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVVNFX0RFVkZTID0gIjAiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgY29udGVudCBvZiB0aGUgcmVzdWx0aW5nIDxmaWxlbmFtZT4vZGV2PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaXMgZGVmaW5lZCBpbiBhIERldmljZSBUYWJsZSBmaWxlLgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9ERVZJQ0VfVEFCTEVTJz48ZmlsZW5hbWU+SU1BR0VfREVWSUNFX1RBQkxFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBkZWZpbmVzIHRoZSBEZXZpY2UgVGFibGUgdG8gdXNlIGFuZCBzaG91bGQgYmUgc2V0CisgICAgICAgICAgICAgICAgaW4gdGhlIG1hY2hpbmUgb3IgZGlzdHJvIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBkZWZpbmUgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklNQUdFX0RFVklDRV9UQUJMRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSwgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2aWNlX3RhYmxlLW1pbmltYWwudHh0PC9maWxlbmFtZT4gaXMgdXNlZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX0RFVklDRV9UQUJMRVMgPSAiZGV2aWNlX3RhYmxlLW15bWFjaGluZS50eHQiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcG9wdWxhdGlvbiBpcyBoYW5kbGVkIGJ5IHRoZSA8ZmlsZW5hbWU+bWFrZWRldnM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHV0aWxpdHkgZHVyaW5nIGltYWdlIGNyZWF0aW9uOgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9ImRldnRtcGZzLWRldi1tYW5hZ2VtZW50Ij4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyA8ZmlsZW5hbWU+ZGV2dG1wZnM8L2ZpbGVuYW1lPiBhbmQgYSBEZXZpY2UgTWFuYWdlcjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHVzZSB0aGUgZHluYW1pYyBtZXRob2QgZm9yIGRldmljZSBwb3B1bGF0aW9uLCB5b3UgbmVlZCB0bworICAgICAgICAgICAgICAgIHVzZSAob3IgYmUgc3VyZSB0byBzZXQpIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1VU0VfREVWRlMnPjxmaWxlbmFtZT5VU0VfREVWRlM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gIjEiLCB3aGljaCBpcyB0aGUgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFVTRV9ERVZGUyA9ICIxIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBXaXRoIHRoaXMgc2V0dGluZywgdGhlIHJlc3VsdGluZyA8ZmlsZW5hbWU+L2RldjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGlzIHBvcHVsYXRlZCBieSB0aGUga2VybmVsIHVzaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRtcGZzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgTWFrZSBzdXJlIHRoZSBjb3JyZXNwb25kaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNPTkZJR19ERVZUTVBGUzwvZmlsZW5hbWU+IGlzIHNldCB3aGVuIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgeW91IGJ1aWxkIGEgTGludXgga2VybmVsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBbGwgZGV2aWNlcyBjcmVhdGVkIGJ5IDxmaWxlbmFtZT5kZXZ0bXBmczwvZmlsZW5hbWU+IHdpbGwgYmUKKyAgICAgICAgICAgICAgICBvd25lZCBieSA8ZmlsZW5hbWU+cm9vdDwvZmlsZW5hbWU+IGFuZCBoYXZlIHBlcm1pc3Npb25zCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjA2MDA8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gaGF2ZSBtb3JlIGNvbnRyb2wgb3ZlciB0aGUgZGV2aWNlIG5vZGVzLCB5b3UgY2FuIHVzZSBhCisgICAgICAgICAgICAgICAgZGV2aWNlIG1hbmFnZXIgbGlrZSA8ZmlsZW5hbWU+dWRldjwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1c3lib3gtbWRldjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFlvdSBjaG9vc2UgdGhlIGRldmljZSBtYW5hZ2VyIGJ5IGRlZmluaW5nIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5WSVJUVUFMLVJVTlRJTUVfZGV2X21hbmFnZXI8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGluIHlvdXIgbWFjaGluZSBvciBkaXN0cm8gY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gc2V0IHRoaXMgdmFyaWFibGUgaW4geW91cgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVklSVFVBTC1SVU5USU1FX2Rldl9tYW5hZ2VyID0gInVkZXYiCisKKyAgICAgIyBTb21lIGFsdGVybmF0aXZlIHZhbHVlcworICAgICAjIFZJUlRVQUwtUlVOVElNRV9kZXZfbWFuYWdlciA9ICJidXN5Ym94LW1kZXYiCisgICAgICMgVklSVFVBTC1SVU5USU1FX2Rldl9tYW5hZ2VyID0gInN5c3RlbWQiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InBsYXRkZXYtYXBwZGV2LXNyY3JldiI+CisgICAgICAgIDx0aXRsZT5Vc2luZyBhbiBFeHRlcm5hbCBTQ008L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91J3JlIHdvcmtpbmcgb24gYSByZWNpcGUgdGhhdCBwdWxscyBmcm9tIGFuIGV4dGVybmFsIFNvdXJjZQorICAgICAgICAgICAgQ29kZSBNYW5hZ2VyIChTQ00pLCBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgIHN5c3RlbSBub3RpY2UgbmV3IHJlY2lwZSBjaGFuZ2VzIGFkZGVkIHRvIHRoZSBTQ00gYW5kIHRoZW4gYnVpbGQKKyAgICAgICAgICAgIHRoZSByZXN1bHRpbmcgcGFja2FnZXMgdGhhdCBkZXBlbmQgb24gdGhlIG5ldyByZWNpcGVzIGJ5IHVzaW5nCisgICAgICAgICAgICB0aGUgbGF0ZXN0IHZlcnNpb25zLgorICAgICAgICAgICAgVGhpcyBvbmx5IHdvcmtzIGZvciBTQ01zIGZyb20gd2hpY2ggaXQgaXMgcG9zc2libGUgdG8gZ2V0IGEKKyAgICAgICAgICAgIHNlbnNpYmxlIHJldmlzaW9uIG51bWJlciBmb3IgY2hhbmdlcy4KKyAgICAgICAgICAgIEN1cnJlbnRseSwgeW91IGNhbiBkbyB0aGlzIHdpdGggQXBhY2hlIFN1YnZlcnNpb24gKFNWTiksIEdpdCwgYW5kCisgICAgICAgICAgICBCYXphYXIgKEJaUikgcmVwb3NpdG9yaWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBlbmFibGUgdGhpcyBiZWhhdmlvciwgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgIG9mIHRoZSByZWNpcGUgbmVlZHMgdG8gcmVmZXJlbmNlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDUFYnPjxmaWxlbmFtZT5TUkNQVjwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBWID0gIjEuMi4zK2dpdCR7U1JDUFZ9IgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlbiwgeW91IGNhbiBhZGQgdGhlIGZvbGxvd2luZyB0byB5b3VyCisgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNSRVZfcG4tPHJlcGxhY2VhYmxlPlBOPC9yZXBsYWNlYWJsZT4gPSAiJHtBVVRPUkVWfSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgaXMgdGhlIG5hbWUgb2YgdGhlIHJlY2lwZSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gZW5hYmxlIGF1dG9tYXRpYyBzb3VyY2UKKyAgICAgICAgICAgIHJldmlzaW9uIHVwZGF0aW5nLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHdhbnQgdG8gdXBkYXRlIHlvdXIgbG9jYWwgY29uZmlndXJhdGlvbiBmaWxlLCB5b3UgY2FuCisgICAgICAgICAgICBhZGQgdGhlIGZvbGxvd2luZyBkaXJlY3RseSB0byB0aGUgcmVjaXBlIHRvIGZpbmlzaCBlbmFibGluZworICAgICAgICAgICAgdGhlIGZlYXR1cmU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ1JFViA9ICIke0FVVE9SRVZ9IgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBwcm92aWRlcyBhIGRpc3RyaWJ1dGlvbiBuYW1lZAorICAgICAgICAgICAgPGZpbGVuYW1lPnBva3ktYmxlZWRpbmc8L2ZpbGVuYW1lPiwgd2hvc2UgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgZmlsZSBjb250YWlucyB0aGUgbGluZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcmVxdWlyZSBjb25mL2Rpc3Ryby9pbmNsdWRlL3Bva3ktZmxvYXRpbmctcmV2aXNpb25zLmluYworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhpcyBsaW5lIHB1bGxzIGluIHRoZSBsaXN0ZWQgaW5jbHVkZSBmaWxlIHRoYXQgY29udGFpbnMKKyAgICAgICAgICAgIG51bWVyb3VzIGxpbmVzIG9mIGV4YWN0bHkgdGhhdCBmb3JtOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNSRVZfcG4tZ2NvbmYtZGJ1cyA/PSAiJHtBVVRPUkVWfSIKKyAgICAgU1JDUkVWX3BuLW1hdGNoYm94LWNvbW1vbiA/PSAiJHtBVVRPUkVWfSIKKyAgICAgU1JDUkVWX3BuLW1hdGNoYm94LWNvbmZpZy1ndGsgPz0gIiR7QVVUT1JFVn0iCisgICAgIFNSQ1JFVl9wbi1tYXRjaGJveC1kZXNrdG9wID89ICIke0FVVE9SRVZ9IgorICAgICBTUkNSRVZfcG4tbWF0Y2hib3gta2V5Ym9hcmQgPz0gIiR7QVVUT1JFVn0iCisgICAgIFNSQ1JFVl9wbi1tYXRjaGJveC1wYW5lbCA/PSAiJHtBVVRPUkVWfSIKKyAgICAgU1JDUkVWX3BuLW1hdGNoYm94LXBhbmVsLTIgPz0gIiR7QVVUT1JFVn0iCisgICAgIFNSQ1JFVl9wbi1tYXRjaGJveC10aGVtZXMtZXh0cmEgPz0gIiR7QVVUT1JFVn0iCisgICAgIFNSQ1JFVl9wbi1tYXRjaGJveC10ZXJtaW5hbCA/PSAiJHtBVVRPUkVWfSIKKyAgICAgU1JDUkVWX3BuLW1hdGNoYm94LXdtID89ICIke0FVVE9SRVZ9IgorICAgICBTUkNSRVZfcG4tbWF0Y2hib3gtd20tMiA/PSAiJHtBVVRPUkVWfSIKKyAgICAgU1JDUkVWX3BuLXNldHRpbmdzLWRhZW1vbiA/PSAiJHtBVVRPUkVWfSIKKyAgICAgU1JDUkVWX3BuLXNjcmVlbnNob3QgPz0gIiR7QVVUT1JFVn0iCisgICAgIFNSQ1JFVl9wbi1saWJmYWtla2V5ID89ICIke0FVVE9SRVZ9IgorICAgICBTUkNSRVZfcG4tb3Byb2ZpbGV1aSA/PSAiJHtBVVRPUkVWfSIKKyAgICAgICAgICAuCisgICAgICAgICAgLgorICAgICAgICAgIC4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZXNlIGxpbmVzIGFsbG93IHlvdSB0byBleHBlcmltZW50IHdpdGggYnVpbGRpbmcgYQorICAgICAgICAgICAgZGlzdHJpYnV0aW9uIHRoYXQgdHJhY2tzIHRoZSBsYXRlc3QgZGV2ZWxvcG1lbnQgc291cmNlCisgICAgICAgICAgICBmb3IgbnVtZXJvdXMgcGFja2FnZXMuCisgICAgICAgICAgICA8bm90ZT48dGl0bGU+Q2F1dGlvbjwvdGl0bGU+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5wb2t5LWJsZWVkaW5nPC9maWxlbmFtZT4gZGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgaXMgbm90IHRlc3RlZCBvbiBhIHJlZ3VsYXIgYmFzaXMuCisgICAgICAgICAgICAgICAgS2VlcCB0aGlzIGluIG1pbmQgaWYgeW91IHVzZSBpdC4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdjcmVhdGluZy1hLXJlYWQtb25seS1yb290LWZpbGVzeXN0ZW0nPgorICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgYSBSZWFkLU9ubHkgUm9vdCBGaWxlc3lzdGVtPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFN1cHBvc2UsIGZvciBzZWN1cml0eSByZWFzb25zLCB5b3UgbmVlZCB0byBkaXNhYmxlCisgICAgICAgICAgICB5b3VyIHRhcmdldCBkZXZpY2UncyByb290IGZpbGVzeXN0ZW0ncyB3cml0ZSBwZXJtaXNzaW9ucworICAgICAgICAgICAgKGkuZS4geW91IG5lZWQgYSByZWFkLW9ubHkgcm9vdCBmaWxlc3lzdGVtKS4KKyAgICAgICAgICAgIE9yLCBwZXJoYXBzIHlvdSBhcmUgcnVubmluZyB0aGUgZGV2aWNlJ3Mgb3BlcmF0aW5nIHN5c3RlbQorICAgICAgICAgICAgZnJvbSBhIHJlYWQtb25seSBzdG9yYWdlIGRldmljZS4KKyAgICAgICAgICAgIEZvciBlaXRoZXIgY2FzZSwgeW91IGNhbiBjdXN0b21pemUgeW91ciBpbWFnZSBmb3IKKyAgICAgICAgICAgIHRoYXQgYmVoYXZpb3IuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFN1cHBvcnRpbmcgYSByZWFkLW9ubHkgcm9vdCBmaWxlc3lzdGVtIHJlcXVpcmVzIHRoYXQgdGhlIHN5c3RlbSBhbmQKKyAgICAgICAgICAgIGFwcGxpY2F0aW9ucyBkbyBub3QgdHJ5IHRvIHdyaXRlIHRvIHRoZSByb290IGZpbGVzeXN0ZW0uCisgICAgICAgICAgICBZb3UgbXVzdCBjb25maWd1cmUgYWxsIHBhcnRzIG9mIHRoZSB0YXJnZXQgc3lzdGVtIHRvIHdyaXRlCisgICAgICAgICAgICBlbHNld2hlcmUsIG9yIHRvIGdyYWNlZnVsbHkgZmFpbCBpbiB0aGUgZXZlbnQgb2YgYXR0ZW1wdGluZyB0bworICAgICAgICAgICAgd3JpdGUgdG8gdGhlIHJvb3QgZmlsZXN5c3RlbS4KKyAgICAgICAgPC9ub3RlPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjcmVhdGluZy10aGUtcm9vdC1maWxlc3lzdGVtJz4KKyAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyB0aGUgUm9vdCBGaWxlc3lzdGVtPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gY3JlYXRlIHRoZSByZWFkLW9ubHkgcm9vdCBmaWxlc3lzdGVtLCBzaW1wbHkgYWRkIHRoZQorICAgICAgICAgICAgICAgICJyZWFkLW9ubHktcm9vdGZzIiBmZWF0dXJlIHRvIHlvdXIgaW1hZ2UuCisgICAgICAgICAgICAgICAgVXNpbmcgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50cyBpbiB5b3VyCisgICAgICAgICAgICAgICAgaW1hZ2UgcmVjaXBlIG9yIGZyb20gd2l0aGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICBjYXVzZXMgdGhlIGJ1aWxkIHN5c3RlbSB0byBjcmVhdGUgYSByZWFkLW9ubHkgcm9vdCBmaWxlc3lzdGVtOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfRkVBVFVSRVMgPSAicmVhZC1vbmx5LXJvb3RmcyIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEVYVFJBX0lNQUdFX0ZFQVRVUkVTICs9ICJyZWFkLW9ubHktcm9vdGZzIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGVzZSB2YXJpYWJsZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmdwb2t5LWV4dGVuZC1jdXN0b21pbWFnZS1pbWFnZWZlYXR1cmVzJz5DdXN0b21pemluZyBJbWFnZXMgVXNpbmcgQ3VzdG9tIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIHZhcmlhYmxlcywgc2VlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgYW5kIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1FWFRSQV9JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPkVYVFJBX0lNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwb3N0LWluc3RhbGxhdGlvbi1zY3JpcHRzJz4KKyAgICAgICAgICAgIDx0aXRsZT5Qb3N0LUluc3RhbGxhdGlvbiBTY3JpcHRzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSXQgaXMgdmVyeSBpbXBvcnRhbnQgdGhhdCB5b3UgbWFrZSBzdXJlIGFsbAorICAgICAgICAgICAgICAgIHBvc3QtSW5zdGFsbGF0aW9uICg8ZmlsZW5hbWU+cGtnX3Bvc3RpbnN0PC9maWxlbmFtZT4pIHNjcmlwdHMKKyAgICAgICAgICAgICAgICBmb3IgcGFja2FnZXMgdGhhdCBhcmUgaW5zdGFsbGVkIGludG8gdGhlIGltYWdlIGNhbiBiZSBydW4KKyAgICAgICAgICAgICAgICBhdCB0aGUgdGltZSB3aGVuIHRoZSByb290IGZpbGVzeXN0ZW0gaXMgY3JlYXRlZCBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgYnVpbGQgb24gdGhlIGhvc3Qgc3lzdGVtLgorICAgICAgICAgICAgICAgIFRoZXNlIHNjcmlwdHMgY2Fubm90IGF0dGVtcHQgdG8gcnVuIGR1cmluZyBmaXJzdC1ib290IG9uIHRoZQorICAgICAgICAgICAgICAgIHRhcmdldCBkZXZpY2UuCisgICAgICAgICAgICAgICAgV2l0aCB0aGUgInJlYWQtb25seS1yb290ZnMiIGZlYXR1cmUgZW5hYmxlZCwKKyAgICAgICAgICAgICAgICB0aGUgYnVpbGQgc3lzdGVtIGNoZWNrcyBkdXJpbmcgcm9vdCBmaWxlc3lzdGVtIGNyZWF0aW9uIHRvIG1ha2UKKyAgICAgICAgICAgICAgICBzdXJlIGFsbCBwb3N0LWluc3RhbGxhdGlvbiBzY3JpcHRzIHN1Y2NlZWQuCisgICAgICAgICAgICAgICAgSWYgYW55IG9mIHRoZXNlIHNjcmlwdHMgc3RpbGwgbmVlZCB0byBiZSBydW4gYWZ0ZXIgdGhlIHJvb3QKKyAgICAgICAgICAgICAgICBmaWxlc3lzdGVtIGlzIGNyZWF0ZWQsIHRoZSBidWlsZCBpbW1lZGlhdGVseSBmYWlscy4KKyAgICAgICAgICAgICAgICBUaGVzZSBidWlsZC10aW1lIGNoZWNrcyBlbnN1cmUgdGhhdCB0aGUgYnVpbGQgZmFpbHMKKyAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiB0aGUgdGFyZ2V0IGRldmljZSBmYWlscyBsYXRlciBkdXJpbmcgaXRzCisgICAgICAgICAgICAgICAgaW5pdGlhbCBib290IG9wZXJhdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTW9zdCBvZiB0aGUgY29tbW9uIHBvc3QtaW5zdGFsbGF0aW9uIHNjcmlwdHMgZ2VuZXJhdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBmb3IgdGhlIG91dC1vZi10aGUtYm94IFlvY3RvIFByb2plY3QgYXJlIGVuZ2luZWVyZWQKKyAgICAgICAgICAgICAgICBzbyB0aGF0IHRoZXkgY2FuIHJ1biBkdXJpbmcgcm9vdCBmaWxlc3lzdGVtIGNyZWF0aW9uCisgICAgICAgICAgICAgICAgKGUuZy4gcG9zdC1pbnN0YWxsYXRpb24gc2NyaXB0cyBmb3IgY2FjaGluZyBmb250cykuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91IGNyZWF0ZSBhbmQgYWRkIGN1c3RvbSBzY3JpcHRzLCB5b3UgbmVlZAorICAgICAgICAgICAgICAgIHRvIGJlIHN1cmUgdGhleSBjYW4gYmUgcnVuIGR1cmluZyB0aGlzIGZpbGUgc3lzdGVtIGNyZWF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGNvbW1vbiBwcm9ibGVtcyB0aGF0IHByZXZlbnQKKyAgICAgICAgICAgICAgICBwb3N0LWluc3RhbGxhdGlvbiBzY3JpcHRzIGZyb20gcnVubmluZyBkdXJpbmcgcm9vdCBmaWxlc3lzdGVtCisgICAgICAgICAgICAgICAgY3JlYXRpb246CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPk5vdCB1c2luZyAkRCBpbiBmcm9udCBvZiBhYnNvbHV0ZQorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gZGVmaW5lcworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiQ8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIHJvb3QgZmlsZXN5c3RlbSBpcyBjcmVhdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIDxmaWxlbmFtZT4kRDwvZmlsZW5hbWU+IGlzIGJsYW5rIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQgaXMgcnVuIG9uIHRoZSB0YXJnZXQgZGV2aWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpbXBsaWVzIHR3byBwdXJwb3NlcyBmb3IgPGZpbGVuYW1lPiREPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBlbnN1cmluZyBwYXRocyBhcmUgdmFsaWQgaW4gYm90aCB0aGUgaG9zdCBhbmQgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudHMsIGFuZCBjaGVja2luZyB0byBkZXRlcm1pbmUgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IGlzIGJlaW5nIHVzZWQgYXMgYSBtZXRob2QgZm9yIHRha2luZworICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGUgYWN0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+QXR0ZW1wdGluZyB0byBydW4gcHJvY2Vzc2VzIHRoYXQgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyB0byBvciBkZXBlbmRlbnQgb24gdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHdvcmsgYXJvdW5kIHRoZXNlIGF0dGVtcHRzIGJ5IHVzaW5nIG5hdGl2ZQorICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHMgdG8gYWNjb21wbGlzaCB0aGUgc2FtZSB0YXNrcywgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGFsdGVybmF0aXZlbHkgcnVubmluZyB0aGUgcHJvY2Vzc2VzIHVuZGVyIFFFTVUsCisgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBoYXMgdGhlIDxmaWxlbmFtZT5xZW11X3J1bl9iaW5hcnk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtcWVtdSc+PGZpbGVuYW1lPnFlbXU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdhcmVhcy13aXRoLXdyaXRlLWFjY2Vzcyc+CisgICAgICAgICAgICA8dGl0bGU+QXJlYXMgV2l0aCBXcml0ZSBBY2Nlc3M8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaXRoIHRoZSAicmVhZC1vbmx5LXJvb3RmcyIgZmVhdHVyZSBlbmFibGVkLAorICAgICAgICAgICAgICAgIGFueSBhdHRlbXB0IGJ5IHRoZSB0YXJnZXQgdG8gd3JpdGUgdG8gdGhlIHJvb3QgZmlsZXN5c3RlbSBhdAorICAgICAgICAgICAgICAgIHJ1bnRpbWUgZmFpbHMuCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB5b3UgY29uZmlndXJlIHByb2Nlc3NlcworICAgICAgICAgICAgICAgIGFuZCBhcHBsaWNhdGlvbnMgdGhhdCBhdHRlbXB0IHRoZXNlIHR5cGVzIG9mIHdyaXRlcyBkbyBzbworICAgICAgICAgICAgICAgIHRvIGRpcmVjdG9yaWVzIHdpdGggd3JpdGUgYWNjZXNzIChlLmcuCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi90bXA8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+L3Zhci9ydW48L2ZpbGVuYW1lPikuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGVyZm9ybWluZy1hdXRvbWF0ZWQtcnVudGltZS10ZXN0aW5nIj4KKyAgICAgICAgPHRpdGxlPlBlcmZvcm1pbmcgQXV0b21hdGVkIFJ1bnRpbWUgVGVzdGluZzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBtYWtlcyBhdmFpbGFibGUgYSBzZXJpZXMgb2YgYXV0b21hdGVkCisgICAgICAgICAgICB0ZXN0cyBmb3IgaW1hZ2VzIHRvIHZlcmlmeSBydW50aW1lIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgICAgICBZb3UgY2FuIHJ1biB0aGVzZSB0ZXN0cyBvbiBlaXRoZXIgUUVNVSBvciBhY3R1YWwgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgVGVzdHMgYXJlIHdyaXR0ZW4gaW4gUHl0aG9uIG1ha2luZyB1c2Ugb2YgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+dW5pdHRlc3Q8L2ZpbGVuYW1lPiBtb2R1bGUsIGFuZCB0aGUgbWFqb3JpdHkgb2YgdGhlbQorICAgICAgICAgICAgcnVuIGNvbW1hbmRzIG9uIHRoZSB0YXJnZXQgc3lzdGVtIG92ZXIgU1NILgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgeW91IHNldCB1cCB0aGUgZW52aXJvbm1lbnQgdG8gdXNlIHRoZXNlCisgICAgICAgICAgICB0ZXN0cywgcnVuIGF2YWlsYWJsZSB0ZXN0cywgYW5kIHdyaXRlIGFuZCBhZGQgeW91ciBvd24gdGVzdHMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZW5hYmxpbmctdGVzdHMnPgorICAgICAgICAgICAgPHRpdGxlPkVuYWJsaW5nIFRlc3RzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91IGFyZSBwbGFubmluZyB0byBydW4gdGVzdHMgdXNpbmcKKyAgICAgICAgICAgICAgICBRRU1VIG9yIG9uIHRoZSBoYXJkd2FyZSwgeW91IGhhdmUgdG8gdGFrZQorICAgICAgICAgICAgICAgIGRpZmZlcmVudCBzdGVwcyB0byBlbmFibGUgdGhlIHRlc3RzLgorICAgICAgICAgICAgICAgIFNlZSB0aGUgZm9sbG93aW5nIHN1YnNlY3Rpb25zIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8KKyAgICAgICAgICAgICAgICBlbmFibGUgYm90aCB0eXBlcyBvZiB0ZXN0cy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3FlbXUtaW1hZ2UtZW5hYmxpbmctdGVzdHMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5FbmFibGluZyBSdW50aW1lIFRlc3RzIG9uIFFFTVU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIHJ1biB0ZXN0cywgeW91IG5lZWQgdG8gZG8gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2V0IHVwIHRvIGF2b2lkIGludGVyYWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCA8ZmlsZW5hbWU+c3VkbzwvZmlsZW5hbWU+IGZvciBuZXR3b3JraW5nOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWNjb21wbGlzaCB0aGlzLCB5b3UgbXVzdCBkbyBvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BZGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5OT1BBU1NXRDwvZmlsZW5hbWU+IGZvciB5b3VyIHVzZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIDxmaWxlbmFtZT4vZXRjL3N1ZG9lcnM8L2ZpbGVuYW1lPiBlaXRoZXIgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGwgY29tbWFuZHMgb3IganVzdCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11LWlmdXA8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHByb3ZpZGUgdGhlIGZ1bGwgcGF0aCBhcyB0aGF0IGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlIGlmIHlvdSBhcmUgdXNpbmcgbXVsdGlwbGUgY2xvbmVzIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBzb21lIGRpc3RyaWJ1dGlvbnMsIHlvdSBhbHNvIG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50IG91dCAiRGVmYXVsdHMgcmVxdWlyZXR0eSIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2V0Yy9zdWRvZXJzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYW51YWxseSBjb25maWd1cmUgYSB0YXAgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeW91ciBzeXN0ZW0uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SdW4gYXMgcm9vdCB0aGUgc2NyaXB0IGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2NyaXB0cy9ydW5xZW11LWdlbi10YXBkZXZzPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBzaG91bGQgZ2VuZXJhdGUgYSBsaXN0IG9mIHRhcCBkZXZpY2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgb3B0aW9uIHR5cGljYWxseSBjaG9zZW4gZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdXRvYnVpbGRlci10eXBlIGVudmlyb25tZW50cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRJU1BMQVk8L2ZpbGVuYW1lPiB2YXJpYWJsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHNldCB0aGlzIHZhcmlhYmxlIHNvIHRoYXQgeW91IGhhdmUgYW4gWAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlciBhdmFpbGFibGUgKGUuZy4gc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dm5jc2VydmVyPC9maWxlbmFtZT4gZm9yIGEgaGVhZGxlc3MgbWFjaGluZSkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJlIHN1cmUgeW91ciBob3N0J3MgZmlyZXdhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHRzIGluY29taW5nIGNvbm5lY3Rpb25zIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTIuMTY4LjcuMC8yNDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvbWUgb2YgdGhlIHRlc3RzIChpbiBwYXJ0aWN1bGFyIHNtYXJ0IHRlc3RzKSBzdGFydCBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUVFAgc2VydmVyIG9uIGEgcmFuZG9tIGhpZ2ggbnVtYmVyIHBvcnQsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBzZXJ2ZSBmaWxlcyB0byB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzbWFydCBtb2R1bGUgc2VydmVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7REVQTE9ZX0RJUn0vcnBtPC9maWxlbmFtZT4gc28gaXQgY2FuIHJ1bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYXJ0IGNoYW5uZWwgY29tbWFuZHMuIFRoYXQgbWVhbnMgeW91ciBob3N0J3MgZmlyZXdhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IGFjY2VwdCBpbmNvbWluZyBjb25uZWN0aW9ucyBmcm9tIDE5Mi4xNjguNy4wLzI0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIHRoZSBkZWZhdWx0IElQIHJhbmdlIHVzZWQgZm9yIHRhcCBkZXZpY2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IHN0YXJ0IHJ1bm5pbmcgdGhlIHRlc3RzLCB0aGUgZm9sbG93aW5nIGhhcHBlbnM6CisgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BIGNvcHkgb2YgdGhlIHJvb3QgZmlsZXN5c3RlbSBpcyB3cml0dGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gPGZpbGVuYW1lPiR7V09SS0RJUn0vdGVzdGltYWdlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGltYWdlIGlzIGJvb3RlZCB1bmRlciBRRU1VIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gc2NyaXB0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgZGVmYXVsdCB0aW1lb3V0IG9mIDUwMCBzZWNvbmRzIG9jY3VycworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFsbG93IGZvciB0aGUgYm9vdCBwcm9jZXNzIHRvIHJlYWNoIHRoZSBsb2dpbiBwcm9tcHQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBjaGFuZ2UgdGhlIHRpbWVvdXQgcGVyaW9kIGJ5IHNldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVEVTVF9RRU1VQk9PVF9USU1FT1VUJz48ZmlsZW5hbWU+VEVTVF9RRU1VQk9PVF9USU1FT1VUPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+T25jZSB0aGUgYm9vdCBwcm9jZXNzIGlzIHJlYWNoZWQgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2luIHByb21wdCBhcHBlYXJzLCB0aGUgdGVzdHMgcnVuLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmdWxsIGJvb3QgbG9nIGlzIHdyaXR0ZW4gdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtXT1JLRElSfS90ZXN0aW1hZ2UvcWVtdV9ib290X2xvZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVhY2ggdGVzdCBtb2R1bGUgbG9hZHMgaW4gdGhlIG9yZGVyIGZvdW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPlRFU1RfU1VJVEVTPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZSBmdWxsIG91dHB1dCBvZiB0aGUgY29tbWFuZHMgcnVuIG92ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0ggaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtXT1JLRElSfS90ZXN0aW1nYWdlL3NzaF90YXJnZXRfbG9nPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SWYgbm8gZmFpbHVyZXMgb2NjdXIsIHRoZSB0YXNrIHJ1bm5pbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHMgZW5kcyBzdWNjZXNzZnVsbHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dW5pdHRlc3Q8L2ZpbGVuYW1lPiBpbiB0aGUgdGFzayBsb2cgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtXT1JLRElSfS90ZW1wL2xvZy5kb190ZXN0aW1hZ2U8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdoYXJkd2FyZS1pbWFnZS1lbmFibGluZy10ZXN0cyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkVuYWJsaW5nIFJ1bnRpbWUgVGVzdHMgb24gSGFyZHdhcmU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNhbiBydW4gdGVzdHMgb24gcmVhbAorICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZSwgYW5kIGZvciBjZXJ0YWluIGRldmljZXMgaXQgY2FuIGFsc28gZGVwbG95CisgICAgICAgICAgICAgICAgICAgIHRoZSBpbWFnZSB0byBiZSB0ZXN0ZWQgb250byB0aGUgZGV2aWNlIGJlZm9yZWhhbmQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBhdXRvbWF0ZWQgZGVwbG95bWVudCwgYSAibWFzdGVyIGltYWdlIiBpcyBpbnN0YWxsZWQKKyAgICAgICAgICAgICAgICAgICAgb250byB0aGUgaGFyZHdhcmUgb25jZSBhcyBwYXJ0IG9mIHNldHVwLgorICAgICAgICAgICAgICAgICAgICBUaGVuLCBlYWNoIHRpbWUgdGVzdHMgYXJlIHRvIGJlIHJ1biwgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICBvY2N1cnM6CisgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgbWFzdGVyIGltYWdlIGlzIGJvb3RlZCBpbnRvIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgdG8gd3JpdGUgdGhlIGltYWdlIHRvIGJlIHRlc3RlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgc2Vjb25kIHBhcnRpdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgZGV2aWNlIGlzIHRoZW4gcmVib290ZWQgdXNpbmcgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm5hbCBzY3JpcHQgdGhhdCB5b3UgbmVlZCB0byBwcm92aWRlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBkZXZpY2UgYm9vdHMgaW50byB0aGUgaW1hZ2UgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gcnVubmluZyB0ZXN0cyAoaW5kZXBlbmRlbnQgb2Ygd2hldGhlciB0aGUgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4gZGVwbG95ZWQgYXV0b21hdGljYWxseSBvciBub3QpLCB0aGUgZGV2aWNlIGlzCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkIHRvIGJlIGNvbm5lY3RlZCB0byBhIG5ldHdvcmsgb24gYQorICAgICAgICAgICAgICAgICAgICBwcmUtZGV0ZXJtaW5lZCBJUCBhZGRyZXNzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGVpdGhlciB1c2Ugc3RhdGljIElQIGFkZHJlc3NlcyB3cml0dGVuIGludG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIGltYWdlLCBvciBzZXQgdGhlIGltYWdlIHRvIHVzZSBESENQIGFuZCBoYXZlIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgREhDUCBzZXJ2ZXIgb24gdGhlIHRlc3QgbmV0d29yayBhc3NpZ24gYSBrbm93biBJUCBhZGRyZXNzCisgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIHRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgZGV2aWNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiBvcmRlciB0byBydW4gdGVzdHMgb24gaGFyZHdhcmUsIHlvdSBuZWVkIHRvIHNldAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEVTVF9UQVJHRVQ8L2ZpbGVuYW1lPiB0byBhbiBhcHByb3ByaWF0ZSB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIFFFTVUsIHlvdSBkbyBub3QgaGF2ZSB0byBjaGFuZ2UgYW55dGhpbmcsIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgIHZhbHVlIGlzICJRZW11VGFyZ2V0Ii4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHJ1bm5pbmcgdGVzdHMgb24gaGFyZHdhcmUsIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBleGlzdDoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+IlNpbXBsZVJlbW90ZVRhcmdldCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9vc2UgIlNpbXBsZVJlbW90ZVRhcmdldCIgaWYgeW91IGFyZSBnb2luZyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1biB0ZXN0cyBvbiBhIHRhcmdldCBzeXN0ZW0gdGhhdCBpcyBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyB0aGUgaW1hZ2UgdG8gYmUgdGVzdGVkIGFuZCBpcyBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgbmV0d29yay4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSAiU2ltcGxlUmVtb3RlVGFyZ2V0IiBpbiBjb25qdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggZWl0aGVyIHJlYWwgaGFyZHdhcmUgb3IgYW4gaW1hZ2UgcnVubmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBhIHNlcGFyYXRlbHkgc3RhcnRlZCBRRU1VIG9yIGFueQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyIHZpcnR1YWwgbWFjaGluZSBtYW5hZ2VyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iR3VtbWlib290VGFyZ2V0Ijo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSAiR3VtbWlib290VGFyZ2V0IiBpZiB5b3VyIGhhcmR3YXJlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gRUZJLWJhc2VkIG1hY2hpbmUgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ndW1taWJvb3Q8L2ZpbGVuYW1lPiBhcyBib290bG9hZGVyIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLXRlc3RtYXN0ZXI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciBzb21ldGhpbmcgc2ltaWxhcikgaXMgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsc28sIHlvdXIgaGFyZHdhcmUgdW5kZXIgdGVzdCBtdXN0IGJlIGluIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBESENQLWVuYWJsZWQgbmV0d29yayB0aGF0IGdpdmVzIGl0IHRoZSBzYW1lIElQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcyBmb3IgZWFjaCByZWJvb3QuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBjaG9vc2UgIkd1bW1pYm9vdFRhcmdldCIsIHRoZXJlIGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwgcmVxdWlyZW1lbnRzIGFuZCBjb25zaWRlcmF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3NlbGVjdGluZy1ndW1taWJvb3R0YXJnZXQnPlNlbGVjdGluZyBHdW1taWJvb3RUYXJnZXQ8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24sIHdoaWNoIGZvbGxvd3MsIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iQmVhZ2xlQm9uZVRhcmdldCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9vc2UgIkJlYWdsZUJvbmVUYXJnZXQiIGlmIHlvdSBhcmUgZGVwbG95aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzIGFuZCBydW5uaW5nIHRlc3RzIG9uIHRoZSBCZWFnbGVCb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJsYWNrIiBvciBvcmlnaW5hbCAiV2hpdGUiIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZXNlIHRlc3RzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMgYXQgdGhlIHRvcCBvZiB0aGUgQmVhZ2xlQm9uZVRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9iZWFnbGVib25ldGFyZ2V0LnB5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iRWRnZVJvdXRlclRhcmdldCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9vc2UgIkVkZ2VSb3V0ZXJUYXJnZXQiIGlzIHlvdSBhcmUgZGVwbG95aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzIGFuZCBydW5uaW5nIHRlc3RzIG9uIHRoZSBVYmlxdWl0aSBOZXR3b3JrcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2VSb3V0ZXIgTGl0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGVzZSB0ZXN0cywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzIGF0IHRoZSB0b3Agb2YgdGhlIEVkZ2VSb3V0ZXJUYXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0by1ic3AvbGliL29lcWEvY29udHJvbGxlcnMvZWRnZXJvdXRlcnRhcmdldC5weTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+IkdydWJUYXJnZXQiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hvb3NlIHRoZSAic3VwcG9ydHMgZGVwbG95aW5nIGltYWdlcyBhbmQgcnVubmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzIG9uIGFueSBnZW5lcmljIFBDIHRoYXQgYm9vdHMgdXNpbmcgR1JVQi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGVzZSB0ZXN0cywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzIGF0IHRoZSB0b3Agb2YgdGhlIEdydWJUYXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0by1ic3AvbGliL29lcWEvY29udHJvbGxlcnMvZ3J1YnRhcmdldC5weTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+IjxyZXBsYWNlYWJsZT55b3VyLXRhcmdldDwvcmVwbGFjZWFibGU+Ijo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZSB5b3VyIG93biBjdXN0b20gdGFyZ2V0IGlmIHlvdSB3YW50IHRvIHJ1bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzIHdoZW4geW91IGFyZSBkZXBsb3lpbmcgaW1hZ2VzIGFuZCBydW5uaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHMgb24gYSBjdXN0b20gbWFjaGluZSB3aXRoaW4geW91ciBCU1AgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gZG8gdGhpcywgeW91IG5lZWQgdG8gYWRkIGEgUHl0aG9uIHVuaXQgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMgdGhlIHRhcmdldCBjbGFzcyB1bmRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWIvb2VxYS9jb250cm9sbGVycy88L2ZpbGVuYW1lPiB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIGxheWVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGFsc28gcHJvdmlkZSBhbiBlbXB0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5fX2luaXRfXy5weTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlcywgc2VlIGZpbGVzIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG8tYnNwL2xpYi9vZXFhL2NvbnRyb2xsZXJzLzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdzZWxlY3RpbmctZ3VtbWlib290dGFyZ2V0Jz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+U2VsZWN0aW5nIEd1bW1pYm9vdFRhcmdldDwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRpZCBub3Qgc2V0IDxmaWxlbmFtZT5URVNUX1RBUkdFVDwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAgICAgICAgICJHdW1taWJvb3RUYXJnZXQiLCB0aGVuIHlvdSBkbyBub3QgbmVlZCBhbnkgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgaW4gdGhpcyBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNraXAgZG93biB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3FlbXUtaW1hZ2UtcnVubmluZy10ZXN0cyc+UnVubmluZyBUZXN0czwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkaWQgc2V0IDxmaWxlbmFtZT5URVNUX1RBUkdFVDwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAgICAgICAgICJHdW1taWJvb3RUYXJnZXQiLCB5b3UgYWxzbyBuZWVkIHRvIHBlcmZvcm0gYSBvbmUtdGltZQorICAgICAgICAgICAgICAgICAgICBzZXR1cCBvZiB5b3VyIG1hc3RlciBpbWFnZSBieSBkb2luZyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNldCA8ZmlsZW5hbWU+RUZJX1BST1ZJREVSPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRoYXQgPGZpbGVuYW1lPkVGSV9QUk9WSURFUjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEVGSV9QUk9WSURFUiA9ICJndW1taWJvb3QiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCB0aGUgbWFzdGVyIGltYWdlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgdGhlIDxmaWxlbmFtZT5jb3JlLWltYWdlLXRlc3RtYXN0ZXI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS10ZXN0bWFzdGVyPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUgaXMgcHJvdmlkZWQgYXMgYW4gZXhhbXBsZSBmb3IgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXN0ZXIiIGltYWdlIGFuZCB5b3UgY2FuIGN1c3RvbWl6ZSB0aGUgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUgYXMgeW91IHdvdWxkIGFueSBvdGhlciByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkhlcmUgYXJlIHRoZSBpbWFnZSByZWNpcGUgcmVxdWlyZW1lbnRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Jbmhlcml0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc28gdGhhdCBrZXJuZWwgbW9kdWxlcyBhcmUgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbnN0YWxscyBub3JtYWwgbGludXggdXRpbGl0aWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgYnVzeWJveCBvbmVzIChlLmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmFzaDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmV1dGlsczwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRhcjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmd6aXA8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a21vZDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VXNlcyBhIGN1c3RvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbCBSQU0gRGlzayAoaW5pdHJhbWZzKSBpbWFnZSB3aXRoIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbSBpbnN0YWxsZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIG5vcm1hbCBpbWFnZSB0aGF0IHlvdSBjYW4gaW5zdGFsbCB1c3VhbGx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVzIGEgc2luZ2xlIHJvb3RmcyBwYXJ0aXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGltYWdlIHVzZXMgYW5vdGhlciBpbnN0YWxsZXIgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlcyBhIHNwZWNpZmljIHBhcnRpdGlvbiBsYXlvdXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3QgYWxsIEJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW4gdXNlIGFuIGluc3RhbGxlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBzdWNoIGNhc2VzLCB5b3UgbmVlZCB0byBtYW51YWxseSBjcmVhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmcgcGFydGl0aW9uIGxheW91dCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZpcnN0IHBhcnRpdGlvbiBtb3VudGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIDxmaWxlbmFtZT4vYm9vdDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbGVkICJib290Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBtYWluIHJvb3RmcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb24gd2hlcmUgdGhpcyBpbWFnZSBnZXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCwgd2hpY2ggaXMgbW91bnRlZCB1bmRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QW5vdGhlciBwYXJ0aXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxlZCAidGVzdHJvb3RmcyIgd2hlcmUgdGVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMgZ2V0IGRlcGxveWVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkluc3RhbGwgaW1hZ2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsIHRoZSBpbWFnZSB0aGF0IHlvdSBqdXN0IGJ1aWx0IG9uIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmaW5hbCB0aGluZyB5b3UgbmVlZCB0byBkbyB3aGVuIHNldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRFU1RfVEFSR0VUPC9maWxlbmFtZT4gdG8gIkd1bW1pYm9vdFRhcmdldCIgaXMKKyAgICAgICAgICAgICAgICAgICAgdG8gc2V0IHVwIHRoZSB0ZXN0IGltYWdlOgorICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNldCB1cCB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2Ugc3VyZSB5b3UgaGF2ZSB0aGUgZm9sbG93aW5nIHN0YXRlbWVudHMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX0ZTVFlQRVMgKz0gInRhci5neiIKKyAgICAgSU5IRVJJVCArPSAidGVzdGltYWdlIgorICAgICBURVNUX1RBUkdFVCA9ICJHdW1taWJvb3RUYXJnZXQiCisgICAgIFRFU1RfVEFSR0VUX0lQID0gIjE5Mi4xNjguMi4zIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgeW91ciB0ZXN0IGltYWdlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIEJpdEJha2UgdG8gYnVpbGQgdGhlIGltYWdlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdwb3dlci1jb250cm9sJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+UG93ZXIgQ29udHJvbDwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vc3QgaGFyZHdhcmUgdGFyZ2V0cyBvdGhlciB0aGFuIFNpbXBsZVJlbW90ZVRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBjb250cm9sIHBvd2VyOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRFU1RfUE9XRVJDT05UUk9MX0NNRDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9nZXRoZXIgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5URVNUX1BPV0VSQ09OVFJPTF9FWFRSQV9BUkdTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhIGNvbW1hbmQgdGhhdCBydW5zIG9uIHRoZSBob3N0IGFuZCBkb2VzIHBvd2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ljbGluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdGVzdCBjb2RlIHBhc3NlcyBvbmUgYXJndW1lbnQgdG8gdGhhdCBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZiwgb24gb3IgY3ljbGUgKG9mZiB0aGVuIG9uKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBjb3VsZCBhcHBlYXIgaW4geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRFU1RfUE9XRVJDT05UUk9MX0NNRCA9ICJwb3dlcmNvbnRyb2wuZXhwIHRlc3QgMTAuMTEuMTIuMSBudWMxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSBleHBlY3Qgc2NyaXB0IGRvZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgc3NoIHRlc3RAMTAuMTEuMTIuMSAicHljdGwgbnVjMSA8cmVwbGFjZWFibGU+YXJnPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IHRoZW4gcnVucyBhIFB5dGhvbiBzY3JpcHQgdGhhdCBjb250cm9scyBwb3dlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhIGxhYmVsIGNhbGxlZCA8ZmlsZW5hbWU+bnVjMTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBjdXN0b21pemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRFU1RfUE9XRVJDT05UUk9MX0NNRDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEVTVF9QT1dFUkNPTlRST0xfRVhUUkFfQVJHUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB5b3VyIG93biBzZXR1cC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG9uZSByZXF1aXJlbWVudCBpcyB0aGF0IGl0IGFjY2VwdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9uIiwgIm9mZiIsIGFuZCAiY3ljbGUiIGFzIHRoZSBsYXN0IGFyZ3VtZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIG5vIGNvbW1hbmQgaXMgZGVmaW5lZCwgaXQgY29ubmVjdHMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIG92ZXIgU1NIIGFuZCB1c2VzIHRoZSBjbGFzc2ljIHJlYm9vdCBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gcmVib290IHRoZSBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NpYyByZWJvb3QgaXMgZmluZSBhcyBsb25nIGFzIHRoZSBtYWNoaW5lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsbHkgcmVib290cyAoaS5lLiB0aGUgU1NIIHRlc3QgaGFzIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxlZCkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgdXNlZnVsIGZvciBzY2VuYXJpb3Mgd2hlcmUgeW91IGhhdmUgYSBzaW1wbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR1cCwgdHlwaWNhbGx5IHdpdGggYSBzaW5nbGUgYm9hcmQsIGFuZCB3aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbWUgbWFudWFsIGludGVyYWN0aW9uIGlzIG9rYXkgZnJvbSB0aW1lIHRvIHRpbWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSBubyBoYXJkd2FyZSB0byBhdXRvbWF0aWNhbGx5IHBlcmZvcm0gcG93ZXIKKyAgICAgICAgICAgICAgICAgICAgY29udHJvbCBidXQgc3RpbGwgd2lzaCB0byBleHBlcmltZW50IHdpdGggYXV0b21hdGVkCisgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlIHRlc3RpbmcsIHlvdSBjYW4gdXNlIHRoZSBkaWFsb2ctcG93ZXItY29udHJvbAorICAgICAgICAgICAgICAgICAgICBzY3JpcHQgdGhhdCBzaG93cyBhIGRpYWxvZyBwcm9tcHRpbmcgeW91IHRvIHBlcmZvcm0gdGhlCisgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkIHBvd2VyIGFjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBzY3JpcHQgcmVxdWlyZXMgZWl0aGVyIEtEaWFsb2cgb3IgWmVuaXR5IHRvIGJlCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgVG8gdXNlIHRoaXMgc2NyaXB0LCBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1URVNUX1BPV0VSQ09OVFJPTF9DTUQnPjxmaWxlbmFtZT5URVNUX1BPV0VSQ09OVFJPTF9DTUQ8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVTVF9QT1dFUkNPTlRST0xfQ01EID0gIiR7Q09SRUJBU0V9L3NjcmlwdHMvY29udHJpYi9kaWFsb2ctcG93ZXItY29udHJvbCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3NlcmlhbC1jb25zb2xlLWNvbm5lY3Rpb24nPgorICAgICAgICAgICAgICAgIDx0aXRsZT5TZXJpYWwgQ29uc29sZSBDb25uZWN0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgdGVzdCB0YXJnZXQgY2xhc3NlcyByZXF1aXJpbmcgYSBzZXJpYWwgY29uc29sZQorICAgICAgICAgICAgICAgICAgICB0byBpbnRlcmFjdCB3aXRoIHRoZSBib290bG9hZGVyIChlLmcuIEJlYWdsZUJvbmVUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgIEVkZ2VSb3V0ZXJUYXJnZXQsIGFuZCBHcnViVGFyZ2V0KSwgeW91IG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSBhIGNvbW1hbmQgdG8gdXNlIHRvIGNvbm5lY3QgdG8gdGhlIHNlcmlhbCBjb25zb2xlCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSB0YXJnZXQgbWFjaGluZSBieSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRFU1RfU0VSSUFMQ09OVFJPTF9DTUQnPjxmaWxlbmFtZT5URVNUX1NFUklBTENPTlRST0xfQ01EPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgb3B0aW9uYWxseSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRFU1RfU0VSSUFMQ09OVFJPTF9FWFRSQV9BUkdTJz48ZmlsZW5hbWU+VEVTVF9TRVJJQUxDT05UUk9MX0VYVFJBX0FSR1M8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBjYXNlcyBjb3VsZCBiZSBhIHNlcmlhbCB0ZXJtaW5hbCBwcm9ncmFtIGlmIHRoZQorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lIGlzIGNvbm5lY3RlZCB0byBhIGxvY2FsIHNlcmlhbCBwb3J0LCBvciBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50ZWxuZXQ8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3NoPC9maWxlbmFtZT4gY29tbWFuZCBjb25uZWN0aW5nIHRvIGEgcmVtb3RlCisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUgc2VydmVyLgorICAgICAgICAgICAgICAgICAgICBSZWdhcmRsZXNzIG9mIHRoZSBjYXNlLCB0aGUgY29tbWFuZCBzaW1wbHkgbmVlZHMgdG8KKyAgICAgICAgICAgICAgICAgICAgY29ubmVjdCB0byB0aGUgc2VyaWFsIGNvbnNvbGUgYW5kIGZvcndhcmQgdGhhdCBjb25uZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIHRvIHN0YW5kYXJkIGlucHV0IGFuZCBvdXRwdXQgYXMgYW55IG5vcm1hbCB0ZXJtaW5hbAorICAgICAgICAgICAgICAgICAgICBwcm9ncmFtIGRvZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0byB1c2UgdGhlIHBpY29jb20gdGVybWluYWwgcHJvZ3JhbSBvbgorICAgICAgICAgICAgICAgICAgICBzZXJpYWwgZGV2aWNlIDxmaWxlbmFtZT4vZGV2L3R0eVVTQjA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhdCAxMTUyMDBicHMsIHlvdSB3b3VsZCBzZXQgdGhlIHZhcmlhYmxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVTVF9TRVJJQUxDT05UUk9MX0NNRCA9ICJwaWNvY29tIC9kZXYvdHR5VVNCMCAtYiAxMTUyMDAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGxvY2FsIGRldmljZXMgd2hlcmUgdGhlIHNlcmlhbCBwb3J0IGRldmljZSBkaXNhcHBlYXJzCisgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIGRldmljZSByZWJvb3RzLCBhbiBhZGRpdGlvbmFsICJzZXJkZXZ0cnkiIHdyYXBwZXIKKyAgICAgICAgICAgICAgICAgICAgc2NyaXB0IGlzIHByb3ZpZGVkLgorICAgICAgICAgICAgICAgICAgICBUbyB1c2UgdGhpcyB3cmFwcGVyLCBzaW1wbHkgcHJlZml4IHRoZSB0ZXJtaW5hbCBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7Q09SRUJBU0V9L3NjcmlwdHMvY29udHJpYi9zZXJkZXZ0cnk8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURVNUX1NFUklBTENPTlRST0xfQ01EID0gIiR7Q09SRUJBU0V9L3NjcmlwdHMvY29udHJpYi9zZXJkZXZ0cnkgcGljb2NvbSAtYgorMTE1MjAwIC9kZXYvdHR5VVNCMCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJxZW11LWltYWdlLXJ1bm5pbmctdGVzdHMiPgorICAgICAgICAgICAgPHRpdGxlPlJ1bm5pbmcgVGVzdHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHN0YXJ0IHRoZSB0ZXN0cyBhdXRvbWF0aWNhbGx5IG9yIG1hbnVhbGx5OgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QXV0b21hdGljYWxseSBydW5uaW5nIHRlc3RzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUbyBydW4gdGhlIHRlc3RzIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHN1Y2Nlc3NmdWxseSBjcmVhdGVzIGFuIGltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3Qgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRFU1RfSU1BR0UnPjxmaWxlbmFtZT5URVNUX0lNQUdFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gIjEiIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRFU1RfSU1BR0UgPSAiMSIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIE5leHQsIGJ1aWxkIHlvdXIgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgaW1hZ2Ugc3VjY2Vzc2Z1bGx5IGJ1aWxkcywgdGhlIHRlc3RzIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgYml0YmFrZSBjb3JlLWltYWdlLXNhdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NYW51YWxseSBydW5uaW5nIHRlc3RzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUbyBtYW51YWxseSBydW4gdGhlIHRlc3RzLCBmaXJzdCBnbG9iYWxseSBpbmhlcml0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtdGVzdGltYWdlJz48ZmlsZW5hbWU+dGVzdGltYWdlPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgYnkgZWRpdGluZyB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgSU5IRVJJVCArPSAidGVzdGltYWdlIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgTmV4dCwgdXNlIEJpdEJha2UgdG8gcnVuIHRoZSB0ZXN0czoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgYml0YmFrZSAtYyB0ZXN0aW1hZ2UgPHJlcGxhY2VhYmxlPmltYWdlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQWxsIHRlc3QgZmlsZXMgcmVzaWRlIGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvbGliL29lcWEvcnVudGltZTwvZmlsZW5hbWU+IGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgIEEgdGVzdCBuYW1lIG1hcHMgZGlyZWN0bHkgdG8gYSBQeXRob24gbW9kdWxlLgorICAgICAgICAgICAgICAgIEVhY2ggdGVzdCBtb2R1bGUgbWF5IGNvbnRhaW4gYSBudW1iZXIgb2YgaW5kaXZpZHVhbCB0ZXN0cy4KKyAgICAgICAgICAgICAgICBUZXN0cyBhcmUgdXN1YWxseSBncm91cGVkIHRvZ2V0aGVyIGJ5IHRoZSBhcmVhCisgICAgICAgICAgICAgICAgdGVzdGVkIChlLmcgdGVzdHMgZm9yIHN5c3RlbWQgcmVzaWRlIGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvbGliL29lcWEvcnVudGltZS9zeXN0ZW1kLnB5PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFkZCB0ZXN0cyB0byBhbnkgbGF5ZXIgcHJvdmlkZWQgeW91IHBsYWNlIHRoZW0gaW4gdGhlCisgICAgICAgICAgICAgICAgcHJvcGVyIGFyZWEgYW5kIHlvdSBleHRlbmQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgYXMgbm9ybWFsLgorICAgICAgICAgICAgICAgIEJlIHN1cmUgdGhhdCB0ZXN0cyByZXNpZGUgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmxheWVyPC9yZXBsYWNlYWJsZT4vbGliL29lcWEvcnVudGltZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRoYXQgbW9kdWxlIG5hbWVzIGRvIG5vdCBjb2xsaWRlIHdpdGggbW9kdWxlIG5hbWVzCisgICAgICAgICAgICAgICAgICAgIHVzZWQgaW4gdGhlIGRlZmF1bHQgc2V0IG9mIHRlc3QgbW9kdWxlcyBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9saWIvb2VxYS9ydW50aW1lPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGNoYW5nZSB0aGUgc2V0IG9mIHRlc3RzIHJ1biBieSBhcHBlbmRpbmcgb3Igb3ZlcnJpZGluZworICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1URVNUX1NVSVRFUyc+PGZpbGVuYW1lPlRFU1RfU1VJVEVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgRWFjaCBuYW1lIGluIDxmaWxlbmFtZT5URVNUX1NVSVRFUzwvZmlsZW5hbWU+IHJlcHJlc2VudHMgYQorICAgICAgICAgICAgICAgIHJlcXVpcmVkIHRlc3QgZm9yIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICBUZXN0IG1vZHVsZXMgbmFtZWQgd2l0aGluIDxmaWxlbmFtZT5URVNUX1NVSVRFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY2Fubm90IGJlIHNraXBwZWQgZXZlbiBpZiBhIHRlc3QgaXMgbm90IHN1aXRhYmxlIGZvciBhbiBpbWFnZQorICAgICAgICAgICAgICAgIChlLmcuIHJ1bm5pbmcgdGhlIFJQTSB0ZXN0cyBvbiBhbiBpbWFnZSB3aXRob3V0CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJwbTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICBBcHBlbmRpbmcgImF1dG8iIHRvIDxmaWxlbmFtZT5URVNUX1NVSVRFUzwvZmlsZW5hbWU+IGNhdXNlcyB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gdG8gdHJ5IHRvIHJ1biBhbGwgdGVzdHMgdGhhdCBhcmUgc3VpdGFibGUgZm9yIHRoZQorICAgICAgICAgICAgICAgIGltYWdlIChpLmUuIGVhY2ggdGVzdCBtb2R1bGUgbWF5IGVsZWN0IHRvIHNraXAgaXRzZWxmKS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIG9yZGVyIHlvdSBsaXN0IHRlc3RzIGluIDxmaWxlbmFtZT5URVNUX1NVSVRFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgaXMgaW1wb3J0YW50IGFuZCBpbmZsdWVuY2VzIHRlc3QgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgdGVzdHMgdGhhdCBkZXBlbmQgb24gb3RoZXIgdGVzdHMgc2hvdWxkIGJlIGFkZGVkCisgICAgICAgICAgICAgICAgYWZ0ZXIgdGhlIHRlc3Qgb24gd2hpY2ggdGhleSBkZXBlbmQuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHNpbmNlIHRoZSA8ZmlsZW5hbWU+c3NoPC9maWxlbmFtZT4gdGVzdAorICAgICAgICAgICAgICAgIGRlcGVuZHMgb24gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBpbmc8L2ZpbGVuYW1lPiB0ZXN0LCAic3NoIiBuZWVkcyB0byBjb21lIGFmdGVyCisgICAgICAgICAgICAgICAgInBpbmciIGluIHRoZSBsaXN0LgorICAgICAgICAgICAgICAgIFRoZSB0ZXN0IGNsYXNzIHByb3ZpZGVzIG5vIHJlLW9yZGVyaW5nIG9yIGRlcGVuZGVuY3kgaGFuZGxpbmcuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEVhY2ggbW9kdWxlIGNhbiBoYXZlIG11bHRpcGxlIGNsYXNzZXMgd2l0aCBtdWx0aXBsZSB0ZXN0CisgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMuCisgICAgICAgICAgICAgICAgICAgIEFuZCwgUHl0aG9uIDxmaWxlbmFtZT51bml0dGVzdDwvZmlsZW5hbWU+IHJ1bGVzIGFwcGx5LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSB0aGluZ3MgdG8ga2VlcCBpbiBtaW5kIHdoZW4gcnVubmluZyB0ZXN0czoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGRlZmF1bHQgdGVzdHMgZm9yIHRoZSBpbWFnZSBhcmUgZGVmaW5lZAorICAgICAgICAgICAgICAgICAgICAgICAgYXM6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFRkFVTFRfVEVTVF9TVUlURVNfcG4tPHJlcGxhY2VhYmxlPmltYWdlPC9yZXBsYWNlYWJsZT4gPSAicGluZyBzc2ggZGYgY29ubm1hbiBzeXNsb2cgeG9yZyBzY3Agdm5jIGRhdGUgcnBtIHNtYXJ0IGRtZXNnIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkIHlvdXIgb3duIHRlc3QgdG8gdGhlIGxpc3Qgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBieSB1c2luZyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURVNUX1NVSVRFU19hcHBlbmQgPSAiIG15dGVzdCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJ1biBhIHNwZWNpZmljIGxpc3Qgb2YgdGVzdHMgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVTVF9TVUlURVMgPSAidGVzdDEgdGVzdDIgdGVzdDMiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBSZW1lbWJlciwgb3JkZXIgaXMgaW1wb3J0YW50LgorICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBwbGFjZSBhIHRlc3QgdGhhdCBpcyBkZXBlbmRlbnQgb24gYW5vdGhlciB0ZXN0CisgICAgICAgICAgICAgICAgICAgICAgICBsYXRlciBpbiB0aGUgb3JkZXIuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0iZXhwb3J0aW5nLXRlc3RzIj4KKyAgICAgICAgICAgIDx0aXRsZT5FeHBvcnRpbmcgVGVzdHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGV4cG9ydCB0ZXN0cyBzbyB0aGF0IHRoZXkgY2FuIHJ1biBpbmRlcGVuZGVudGx5IG9mCisgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICBFeHBvcnRpbmcgdGVzdHMgaXMgcmVxdWlyZWQgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byBoYW5kCisgICAgICAgICAgICAgICAgdGhlIHRlc3QgZXhlY3V0aW9uIG9mZiB0byBhIHNjaGVkdWxlci4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIG9ubHkgZXhwb3J0IHRlc3RzIHRoYXQgYXJlIGRlZmluZWQgaW4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVEVTVF9TVUlURVMnPjxmaWxlbmFtZT5URVNUX1NVSVRFUzwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdXIgaW1hZ2UgaXMgYWxyZWFkeSBidWlsdCwgbWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcgYXJlIHNldAorICAgICAgICAgICAgICAgIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gcHJvdmlkZSB0aGUgSVAgYWRkcmVzcyB5b3UgbmVlZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRFU1RfRVhQT1JUX09OTFkgPSAiMSIKKyAgICAgVEVTVF9UQVJHRVQgPSAic2ltcGxlcmVtb3RlIgorICAgICBURVNUX1RBUkdFVF9JUCA9ICIxOTIuMTY4LjcuMiIKKyAgICAgVEVTVF9TRVJWRVJfSVAgPSAiMTkyLjE2OC43LjEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdGhlbiBleHBvcnQgdGhlIHRlc3RzIHdpdGggdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBjb3JlLWltYWdlLXNhdG8gLWMgdGVzdGltYWdlCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEV4cG9ydGluZyB0aGUgdGVzdHMgcGxhY2VzIHRoZW0gaW4gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+IGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC90ZXN0aW1hZ2UvY29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4sIHdoaWNoCisgICAgICAgICAgICAgICAgaXMgY29udHJvbGxlZCBieSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEVTVF9FWFBPUlRfRElSPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gbm93IHJ1biB0aGUgdGVzdHMgb3V0c2lkZSBvZiB0aGUgYnVpbGQgZW52aXJvbm1lbnQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIHRtcC90ZXN0aW1hZ2UvY29yZS1pbWFnZS1zYXRvCisgICAgICQgLi9ydW5leHBvcnRlZC5weSB0ZXN0ZGF0YS5qc29uCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGlzICJleHBvcnQiIGZlYXR1cmUgZG9lcyBub3QgZGVwbG95IG9yIGJvb3QgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgWW91ciB0YXJnZXQgKGJlIGl0IGEgUWVtdSBvciBoYXJkd2FyZSBvbmUpCisgICAgICAgICAgICAgICAgICAgIGhhcyB0byBhbHJlYWR5IGJlIHVwIGFuZCBydW5uaW5nIHdoZW4geW91IGNhbGwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bmV4cG9ydGVkLnB5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBleHBvcnRlZCBkYXRhIChpLmUuIDxmaWxlbmFtZT50ZXN0ZGF0YS5qc29uPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgY29udGFpbnMgcGF0aHMgdG8gdGhlIEJ1aWxkIERpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBUaHVzLCB0aGUgY29udGVudHMgb2YgdGhlIGRpcmVjdG9yeSBjYW4gYmUgbW92ZWQKKyAgICAgICAgICAgICAgICB0byBhbm90aGVyIG1hY2hpbmUgYXMgbG9uZyBhcyB5b3UgdXBkYXRlIHNvbWUgcGF0aHMgaW4gdGhlCisgICAgICAgICAgICAgICAgSlNPTi4KKyAgICAgICAgICAgICAgICBVc3VhbGx5LCB5b3Ugb25seSBjYXJlIGFib3V0IHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0RFUExPWV9ESVJ9L3JwbTwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIChhc3N1bWluZyB0aGUgUlBNIGFuZCBTbWFydCB0ZXN0cyBhcmUgZW5hYmxlZCkuCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBydW5uaW5nIHRoZSB0ZXN0cyBvbiBvdGhlciBtYWNoaW5lCisgICAgICAgICAgICAgICAgbWVhbnMgdGhhdCB5b3UgaGF2ZSB0byBtb3ZlIHRoZSBjb250ZW50cyBhbmQgY2FsbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5leHBvcnRlZC5weTwvZmlsZW5hbWU+IHdpdGgKKyAgICAgICAgICAgICAgICAiLS1kZXBsb3ktZGlyIDxyZXBsYWNlYWJsZT5wYXRoPC9yZXBsYWNlYWJsZT4iIGFzCisgICAgICAgICAgICAgICAgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIC4vcnVuZXhwb3J0ZWQucHkgLS1kZXBsb3ktZGlyIC9uZXcvcGF0aC9vbi90aGlzL21hY2hpbmUgdGVzdGRhdGEuanNvbgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cnVuZXhwb3J0ZWQucHk8L2ZpbGVuYW1lPiBhY2NlcHRzIG90aGVyIGFyZ3VtZW50cworICAgICAgICAgICAgICAgIGFzIHdlbGwgYXMgZGVzY3JpYmVkIHVzaW5nIDxmaWxlbmFtZT4tLWhlbHA8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJxZW11LWltYWdlLXdyaXRpbmctbmV3LXRlc3RzIj4KKyAgICAgICAgICAgIDx0aXRsZT5Xcml0aW5nIE5ldyBUZXN0czwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIG1lbnRpb25lZCBwcmV2aW91c2x5LCBhbGwgbmV3IHRlc3QgZmlsZXMgbmVlZCB0byBiZSBpbiB0aGUKKyAgICAgICAgICAgICAgICBwcm9wZXIgcGxhY2UgZm9yIHRoZSBidWlsZCBzeXN0ZW0gdG8gZmluZCB0aGVtLgorICAgICAgICAgICAgICAgIE5ldyB0ZXN0cyBmb3IgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5IG91dHNpZGUgb2YgdGhlIGNvcmUKKyAgICAgICAgICAgICAgICBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGxheWVyIHRoYXQgYWRkcyB0aGUgZnVuY3Rpb25hbGl0eSwgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmxheWVyPC9yZXBsYWNlYWJsZT4vbGliL29lcWEvcnVudGltZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgKGFzIGxvbmcgYXMKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGlzIGV4dGVuZGVkIGluIHRoZSBsYXllcidzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGFzIG5vcm1hbCkuCisgICAgICAgICAgICAgICAgSnVzdCByZW1lbWJlciB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5GaWxlbmFtZXMgbmVlZCB0byBtYXAgZGlyZWN0bHkgdG8gdGVzdAorICAgICAgICAgICAgICAgICAgICAgICAgKG1vZHVsZSkgbmFtZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvIG5vdCB1c2UgbW9kdWxlIG5hbWVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxpZGUgd2l0aCBleGlzdGluZyBjb3JlIHRlc3RzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NaW5pbWFsbHksIGFuIGVtcHR5CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+X19pbml0X18ucHk8L2ZpbGVuYW1lPiBmaWxlIG11c3QgZXhpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBydW50aW1lIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBjcmVhdGUgYSBuZXcgdGVzdCwgc3RhcnQgYnkgY29weWluZyBhbiBleGlzdGluZyBtb2R1bGUKKyAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+c3lzbG9nLnB5PC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2NjLnB5PC9maWxlbmFtZT4gYXJlIGdvb2Qgb25lcyB0byB1c2UpLgorICAgICAgICAgICAgICAgIFRlc3QgbW9kdWxlcyBjYW4gdXNlIGNvZGUgZnJvbQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2xpYi9vZXFhL3V0aWxzPC9maWxlbmFtZT4sIHdoaWNoIGFyZSBoZWxwZXIKKyAgICAgICAgICAgICAgICBjbGFzc2VzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUgc2hlbGwgY29tbWFuZHMgc3VjaCB0aGF0IHlvdSByZWx5IG9uIHRoZW0gYW5kIHRoZXkKKyAgICAgICAgICAgICAgICByZXR1cm4gYSBzaW5nbGUgY29kZSBmb3Igc3VjY2Vzcy4KKyAgICAgICAgICAgICAgICBCZSBhd2FyZSB0aGF0IHNvbWV0aW1lcyB5b3Ugd2lsbCBuZWVkIHRvIHBhcnNlIHRoZSBvdXRwdXQuCisgICAgICAgICAgICAgICAgU2VlIHRoZSA8ZmlsZW5hbWU+ZGYucHk8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGF0ZS5weTwvZmlsZW5hbWU+IG1vZHVsZXMgZm9yIGV4YW1wbGVzLgorICAgICAgICAgICAgPC9ub3RlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3Ugd2lsbCBub3RpY2UgdGhhdCBhbGwgdGVzdCBjbGFzc2VzIGluaGVyaXQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b2VSdW50aW1lVGVzdDwvZmlsZW5hbWU+LCB3aGljaCBpcyBmb3VuZCBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2xpYi9vZXRlc3QucHk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGlzIGJhc2UgY2xhc3Mgb2ZmZXJzIHNvbWUgaGVscGVyIGF0dHJpYnV0ZXMsIHdoaWNoIGFyZQorICAgICAgICAgICAgICAgIGRlc2NyaWJlZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zOgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0ncWVtdS1pbWFnZS13cml0aW5nLXRlc3RzLWNsYXNzLW1ldGhvZHMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5DbGFzcyBNZXRob2RzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDbGFzcyBtZXRob2RzIGFyZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+aGFzUGFja2FnZShwa2cpPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5zICJUcnVlIiBpZiA8ZmlsZW5hbWU+cGtnPC9maWxlbmFtZT4gaXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIHBhY2thZ2UgbGlzdCBvZiB0aGUgaW1hZ2UsIHdoaWNoIGlzIGJhc2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIG1hbmlmZXN0IGZpbGUgdGhhdCBpcyBnZW5lcmF0ZWQgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19yb290ZnM8L2ZpbGVuYW1lPiB0YXNrLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+aGFzRmVhdHVyZShmZWF0dXJlKTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJucyAiVHJ1ZSIgaWYgdGhlIGZlYXR1cmUgaXMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ESVNUUk9fRkVBVFVSRVMnPjxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdxZW11LWltYWdlLXdyaXRpbmctdGVzdHMtY2xhc3MtYXR0cmlidXRlcyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkNsYXNzIEF0dHJpYnV0ZXM8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENsYXNzIGF0dHJpYnV0ZXMgYXJlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wc2NtZDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXF1YWxzICJwcyAtZWYiIGlmIDxmaWxlbmFtZT5wcm9jcHM8L2ZpbGVuYW1lPiBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBpbiB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCA8ZmlsZW5hbWU+cHNjbWQ8L2ZpbGVuYW1lPiBlcXVhbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHMiIChidXN5Ym94KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnRjPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgY2FsbGVkIHRlc3QgY29udGV4dCwgd2hpY2ggZ2l2ZXMgYWNjZXNzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIEJpdEJha2UgZGF0YXN0b3JlLCB3aGljaCBhbGxvd3MgeW91IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2Ugc3R1ZmYgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIlZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIiKTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnRlc3RzbGlzdDwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+dGVzdHNyZXF1aXJlZDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VkIGludGVybmFsbHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdGVzdHMgZG8gbm90IG5lZWQgdGhlc2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZmlsZXNkaXI8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGFic29sdXRlIHBhdGggdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGNvbnRhaW5zIGhlbHBlciBmaWxlcyBmb3IgdGVzdHMgbWVhbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBjb3B5aW5nIG9uIHRoZSB0YXJnZXQgc3VjaCBhcyBzbWFsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMgd3JpdHRlbiBpbiBDIGZvciBjb21waWxhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT50YXJnZXQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRhcmdldCBjb250cm9sbGVyIG9iamVjdCB1c2VkIHRvIGRlcGxveQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHN0YXJ0IGFuIGltYWdlIG9uIGEgcGFydGljdWxhciB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIFFlbXVUYXJnZXQsIFNpbXBsZVJlbW90ZSwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdW1taWJvb3RUYXJnZXQpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdHMgdXN1YWxseSB1c2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+aXA8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdGFyZ2V0J3MgSVAgYWRkcmVzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c2VydmVyX2lwPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGhvc3QncyBJUCBhZGRyZXNzLCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c3VhbGx5IHVzZWQgYnkgdGhlICJzbWFydCIgdGVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWl0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cnVuKGNtZCwgdGltZW91dD1Ob25lKTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzaW5nbGUsIG1vc3QgdXNlZCBtZXRob2QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBpcyBhIHdyYXBwZXIgZm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3NoIHJvb3RAaG9zdCAiY21kIjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgY29tbWFuZCByZXR1cm5zIGEgdHVwbGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0dXMsIG91dHB1dCksIHdoaWNoIGFyZSB3aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWlyIG5hbWVzIGltcGx5IC0gdGhlIHJldHVybiBjb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mICJjbWQiIGFuZCB3aGF0ZXZlciBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgcHJvZHVjZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBvcHRpb25hbCB0aW1lb3V0IGFyZ3VtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0IHNob3VsZCB3YWl0IGZvciAiY21kIiB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBhcmd1bWVudCBpcyAiTm9uZSIsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0IHVzZXMgdGhlIGRlZmF1bHQgaW5zdGFuY2UncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0IHBlcmlvZCwgd2hpY2ggaXMgMzAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBhcmd1bWVudCBpcyAiMCIsIHRoZSB0ZXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnMgdW50aWwgdGhlIGNvbW1hbmQgcmV0dXJucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Y29weV90byhsb2NhbHBhdGgsIHJlbW90ZXBhdGgpPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcCBsb2NhbHBhdGggcm9vdEBpcDpyZW1vdGVwYXRoPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmNvcHlfZnJvbShyZW1vdGVwYXRoLCBsb2NhbHBhdGgpPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcCByb290QGhvc3Q6cmVtb3RlcGF0aCBsb2NhbHBhdGg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0ncWVtdS1pbWFnZS13cml0aW5nLXRlc3RzLWluc3RhbmNlLWF0dHJpYnV0ZXMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5JbnN0YW5jZSBBdHRyaWJ1dGVzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIHNpbmdsZSBpbnN0YW5jZSBhdHRyaWJ1dGUgZXhpc3RzLCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dGFyZ2V0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+dGFyZ2V0PC9maWxlbmFtZT4gaW5zdGFuY2UgYXR0cmlidXRlIGlzCisgICAgICAgICAgICAgICAgICAgIGlkZW50aWNhbCB0byB0aGUgY2xhc3MgYXR0cmlidXRlIG9mIHRoZSBzYW1lIG5hbWUsIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIGlzIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgZXhpc3RzIGFzIGJvdGggYW4gaW5zdGFuY2UgYW5kIGNsYXNzCisgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBzbyB0ZXN0cyBjYW4gdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zZWxmLnRhcmdldC5ydW4oY21kKTwvZmlsZW5hbWU+IGluIGluc3RhbmNlCisgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMgaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b2VSdW50aW1lVGVzdC50Yy50YXJnZXQucnVuKGNtZCk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1nZGItcmVtb3RlZGVidWciPgorICAgICAgICA8dGl0bGU+RGVidWdnaW5nIFdpdGggdGhlIEdOVSBQcm9qZWN0IERlYnVnZ2VyIChHREIpIFJlbW90ZWx5PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEdEQiBhbGxvd3MgeW91IHRvIGV4YW1pbmUgcnVubmluZyBwcm9ncmFtcywgd2hpY2ggaW4gdHVybiBoZWxwcyB5b3UgdG8gdW5kZXJzdGFuZCBhbmQgZml4IHByb2JsZW1zLgorICAgICAgICAgICAgSXQgYWxzbyBhbGxvd3MgeW91IHRvIHBlcmZvcm0gcG9zdC1tb3J0ZW0gc3R5bGUgYW5hbHlzaXMgb2YgcHJvZ3JhbSBjcmFzaGVzLgorICAgICAgICAgICAgR0RCIGlzIGF2YWlsYWJsZSBhcyBhIHBhY2thZ2Ugd2l0aGluIHRoZSBZb2N0byBQcm9qZWN0IGFuZCBpcworICAgICAgICAgICAgaW5zdGFsbGVkIGluIFNESyBpbWFnZXMgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgIFNlZSB0aGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1pbWFnZXMnPkltYWdlczwvdWxpbms+IiBjaGFwdGVyCisgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZXNlIGltYWdlcy4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBpbmZvcm1hdGlvbiBvbiBHREIgYXQgPHVsaW5rIHVybD0iaHR0cDovL3NvdXJjZXdhcmUub3JnL2dkYi8iLz4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8dGlwPgorICAgICAgICAgICAgRm9yIGJlc3QgcmVzdWx0cywgaW5zdGFsbCBkZWJ1ZyAoPGZpbGVuYW1lPi1kYmc8L2ZpbGVuYW1lPikgcGFja2FnZXMKKyAgICAgICAgICAgIGZvciB0aGUgYXBwbGljYXRpb25zIHlvdSBhcmUgZ29pbmcgdG8gZGVidWcuCisgICAgICAgICAgICBEb2luZyBzbyBtYWtlcyBleHRyYSBkZWJ1ZyBzeW1ib2xzIGF2YWlsYWJsZSB0aGF0IGdpdmUgeW91IG1vcmUKKyAgICAgICAgICAgIG1lYW5pbmdmdWwgb3V0cHV0LgorICAgICAgICA8L3RpcD4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNvbWV0aW1lcywgZHVlIHRvIG1lbW9yeSBvciBkaXNrIHNwYWNlIGNvbnN0cmFpbnRzLCBpdCBpcyBub3QgcG9zc2libGUKKyAgICAgICAgICAgIHRvIHVzZSBHREIgZGlyZWN0bHkgb24gdGhlIHJlbW90ZSB0YXJnZXQgdG8gZGVidWcgYXBwbGljYXRpb25zLgorICAgICAgICAgICAgVGhlc2UgY29uc3RyYWludHMgYXJpc2UgYmVjYXVzZSBHREIgbmVlZHMgdG8gbG9hZCB0aGUgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFuZCB0aGUKKyAgICAgICAgICAgIGJpbmFyaWVzIG9mIHRoZSBwcm9jZXNzIGJlaW5nIGRlYnVnZ2VkLgorICAgICAgICAgICAgQWRkaXRpb25hbGx5LCBHREIgbmVlZHMgdG8gcGVyZm9ybSBtYW55IGNvbXB1dGF0aW9ucyB0byBsb2NhdGUgaW5mb3JtYXRpb24gc3VjaCBhcyBmdW5jdGlvbgorICAgICAgICAgICAgbmFtZXMsIHZhcmlhYmxlIG5hbWVzIGFuZCB2YWx1ZXMsIHN0YWNrIHRyYWNlcyBhbmQgc28gZm9ydGggLSBldmVuIGJlZm9yZSBzdGFydGluZyB0aGUKKyAgICAgICAgICAgIGRlYnVnZ2luZyBwcm9jZXNzLgorICAgICAgICAgICAgVGhlc2UgZXh0cmEgY29tcHV0YXRpb25zIHBsYWNlIG1vcmUgbG9hZCBvbiB0aGUgdGFyZ2V0IHN5c3RlbSBhbmQgY2FuIGFsdGVyIHRoZQorICAgICAgICAgICAgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBoZWxwIGdldCBwYXN0IHRoZSBwcmV2aW91c2x5IG1lbnRpb25lZCBjb25zdHJhaW50cywgeW91IGNhbiB1c2UgR2Ric2VydmVyLgorICAgICAgICAgICAgR2Ric2VydmVyIHJ1bnMgb24gdGhlIHJlbW90ZSB0YXJnZXQgYW5kIGRvZXMgbm90IGxvYWQgYW55IGRlYnVnZ2luZyBpbmZvcm1hdGlvbgorICAgICAgICAgICAgZnJvbSB0aGUgZGVidWdnZWQgcHJvY2Vzcy4KKyAgICAgICAgICAgIEluc3RlYWQsIGEgR0RCIGluc3RhbmNlIHByb2Nlc3NlcyB0aGUgZGVidWdnaW5nIGluZm9ybWF0aW9uIHRoYXQgaXMgcnVuIG9uIGEKKyAgICAgICAgICAgIHJlbW90ZSBjb21wdXRlciAtIHRoZSBob3N0IEdEQi4KKyAgICAgICAgICAgIFRoZSBob3N0IEdEQiB0aGVuIHNlbmRzIGNvbnRyb2wgY29tbWFuZHMgdG8gR2Ric2VydmVyIHRvIG1ha2UgaXQgc3RvcCBvciBzdGFydCB0aGUgZGVidWdnZWQKKyAgICAgICAgICAgIHByb2dyYW0sIGFzIHdlbGwgYXMgcmVhZCBvciB3cml0ZSBtZW1vcnkgcmVnaW9ucyBvZiB0aGF0IGRlYnVnZ2VkIHByb2dyYW0uCisgICAgICAgICAgICBBbGwgdGhlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBsb2FkZWQgYW5kIHByb2Nlc3NlZCBhcyB3ZWxsCisgICAgICAgICAgICBhcyBhbGwgdGhlIGhlYXZ5IGRlYnVnZ2luZyBpcyBkb25lIGJ5IHRoZSBob3N0IEdEQi4KKyAgICAgICAgICAgIE9mZmxvYWRpbmcgdGhlc2UgcHJvY2Vzc2VzIGdpdmVzIHRoZSBHZGJzZXJ2ZXIgcnVubmluZyBvbiB0aGUgdGFyZ2V0IGEgY2hhbmNlIHRvIHJlbWFpbgorICAgICAgICAgICAgc21hbGwgYW5kIGZhc3QuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCBzb3VyY2UgZmlsZXMgYXJlIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiotZGJnPC9maWxlbmFtZT4gcGFja2FnZXMgaW4gb3JkZXIgdG8gZW5hYmxlIEdEQgorICAgICAgICAgICAgICAgIHRvIHNob3cgc291cmNlIGxpbmVzIGluIGl0cyBvdXRwdXQuCisgICAgICAgICAgICAgICAgWW91IGNhbiBzYXZlIGZ1cnRoZXIgc3BhY2Ugb24gdGhlIHRhcmdldCBieSBzZXR0aW5nIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxFJz48ZmlsZW5hbWU+UEFDS0FHRV9ERUJVR19TUExJVF9TVFlMRTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byAiZGVidWctd2l0aG91dC1zcmMiIHNvIHRoYXQgdGhlc2UgcGFja2FnZXMgZG8gbm90CisgICAgICAgICAgICAgICAgaW5jbHVkZSB0aGUgc291cmNlIGZpbGVzLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCZWNhdXNlIHRoZSBob3N0IEdEQiBpcyByZXNwb25zaWJsZSBmb3IgbG9hZGluZyB0aGUgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFuZAorICAgICAgICAgICAgZm9yIGRvaW5nIHRoZSBuZWNlc3NhcnkgcHJvY2Vzc2luZyB0byBtYWtlIGFjdHVhbCBkZWJ1Z2dpbmcgaGFwcGVuLAorICAgICAgICAgICAgeW91IGhhdmUgdG8gbWFrZSBzdXJlIHRoZSBob3N0IGNhbiBhY2Nlc3MgdGhlIHVuc3RyaXBwZWQgYmluYXJpZXMgY29tcGxldGUKKyAgICAgICAgICAgIHdpdGggdGhlaXIgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFuZCBhbHNvIGJlIHN1cmUgdGhlIHRhcmdldCBpcyBjb21waWxlZCB3aXRoIG5vIG9wdGltaXphdGlvbnMuCisgICAgICAgICAgICBUaGUgaG9zdCBHREIgbXVzdCBhbHNvIGhhdmUgbG9jYWwgYWNjZXNzIHRvIGFsbCB0aGUgbGlicmFyaWVzIHVzZWQgYnkgdGhlCisgICAgICAgICAgICBkZWJ1Z2dlZCBwcm9ncmFtLgorICAgICAgICAgICAgQmVjYXVzZSBHZGJzZXJ2ZXIgZG9lcyBub3QgbmVlZCBhbnkgbG9jYWwgZGVidWdnaW5nIGluZm9ybWF0aW9uLCB0aGUgYmluYXJpZXMgb24KKyAgICAgICAgICAgIHRoZSByZW1vdGUgdGFyZ2V0IGNhbiByZW1haW4gc3RyaXBwZWQuCisgICAgICAgICAgICBIb3dldmVyLCB0aGUgYmluYXJpZXMgbXVzdCBhbHNvIGJlIGNvbXBpbGVkIHdpdGhvdXQgb3B0aW1pemF0aW9uCisgICAgICAgICAgICBzbyB0aGV5IG1hdGNoIHRoZSBob3N0J3MgYmluYXJpZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIHJlbWFpbiBjb25zaXN0ZW50IHdpdGggR0RCIGRvY3VtZW50YXRpb24gYW5kIHRlcm1pbm9sb2d5LCB0aGUgYmluYXJ5IGJlaW5nIGRlYnVnZ2VkCisgICAgICAgICAgICBvbiB0aGUgcmVtb3RlIHRhcmdldCBtYWNoaW5lIGlzIHJlZmVycmVkIHRvIGFzIHRoZSAiaW5mZXJpb3IiIGJpbmFyeS4KKyAgICAgICAgICAgIEZvciBkb2N1bWVudGF0aW9uIG9uIEdEQiBzZWUgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vc291cmNld2FyZS5vcmcvZ2RiL2RvY3VtZW50YXRpb24vIj5HREIgc2l0ZTwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIHN0ZXBzIHlvdSBuZWVkIHRvIHRha2UKKyAgICAgICAgICAgIHRvIGRlYnVnIHVzaW5nIHRoZSBHTlUgcHJvamVjdCBkZWJ1Z2dlci4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwbGF0ZGV2LWdkYi1yZW1vdGVkZWJ1Zy1zZXR1cCc+CisgICAgICAgICAgICA8dGl0bGU+U2V0IFVwIHRoZSBDcm9zcy1EZXZlbG9wbWVudCBEZWJ1Z2dpbmcgRW52aXJvbm1lbnQ8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWZvcmUgeW91IGNhbiBpbml0aWF0ZSBhIHJlbW90ZSBkZWJ1Z2dpbmcgc2Vzc2lvbiwgeW91IG5lZWQKKyAgICAgICAgICAgICAgICB0byBiZSBzdXJlIHlvdSBoYXZlIHNldCB1cCB0aGUgY3Jvc3MtZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQsCisgICAgICAgICAgICAgICAgdG9vbGNoYWluLCBhbmQgc3lzcm9vdC4KKyAgICAgICAgICAgICAgICBUaGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I2FkdC1wcmVwYXJlJz5QcmVwYXJpbmcgZm9yIEFwcGxpY2F0aW9uIERldmVsb3BtZW50PC91bGluaz4iCisgICAgICAgICAgICAgICAgY2hhcHRlciBvZiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZQorICAgICAgICAgICAgICAgIGRlc2NyaWJlcyB0aGlzIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgQmUgc3VyZSB5b3UgaGF2ZSByZWFkIHRoYXQgY2hhcHRlciBhbmQgaGF2ZSBzZXQgdXAKKyAgICAgICAgICAgICAgICB5b3VyIGVudmlyb25tZW50LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9InBsYXRkZXYtZ2RiLXJlbW90ZWRlYnVnLWxhdW5jaC1nZGJzZXJ2ZXIiPgorICAgICAgICAgICAgPHRpdGxlPkxhdW5jaCBHZGJzZXJ2ZXIgb24gdGhlIFRhcmdldDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE1ha2Ugc3VyZSBHZGJzZXJ2ZXIgaXMgaW5zdGFsbGVkIG9uIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgSWYgaXQgaXMgbm90LCBpbnN0YWxsIHRoZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdkYnNlcnZlcjwvZmlsZW5hbWU+LCB3aGljaCBuZWVkcyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlidGhyZWFkLWRiMTwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSwgdGhhdCB3aGVuIGVudGVyZWQgZnJvbSB0aGUgaG9zdCwKKyAgICAgICAgICAgICAgICBjb25uZWN0cyB0byB0aGUgdGFyZ2V0IGFuZCBsYXVuY2hlcyBHZGJzZXJ2ZXIgaW4gb3JkZXIgdG8KKyAgICAgICAgICAgICAgICAiZGVidWciIGEgYmluYXJ5IG5hbWVkIDxmaWxlbmFtZT5oZWxsb3dvcmxkPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdkYnNlcnZlciBsb2NhbGhvc3Q6MjM0NSAvdXNyL2Jpbi9oZWxsb3dvcmxkCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEdkYnNlcnZlciBzaG91bGQgbm93IGJlIGxpc3RlbmluZyBvbiBwb3J0IDIzNDUgZm9yIGRlYnVnZ2luZworICAgICAgICAgICAgICAgIGNvbW1hbmRzIGNvbWluZyBmcm9tIGEgcmVtb3RlIEdEQiBwcm9jZXNzIHRoYXQgaXMgcnVubmluZyBvbgorICAgICAgICAgICAgICAgIHRoZSBob3N0IGNvbXB1dGVyLgorICAgICAgICAgICAgICAgIENvbW11bmljYXRpb24gYmV0d2VlbiBHZGJzZXJ2ZXIgYW5kIHRoZSBob3N0IEdEQiBhcmUgZG9uZQorICAgICAgICAgICAgICAgIHVzaW5nIFRDUC4KKyAgICAgICAgICAgICAgICBUbyB1c2Ugb3RoZXIgY29tbXVuaWNhdGlvbiBwcm90b2NvbHMsIHBsZWFzZSByZWZlciB0byB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2RiLyc+R2Ric2VydmVyIGRvY3VtZW50YXRpb248L3VsaW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LWdkYi1yZW1vdGVkZWJ1Zy1sYXVuY2gtZ2RiIj4KKyAgICAgICAgICAgIDx0aXRsZT5MYXVuY2ggR0RCIG9uIHRoZSBIb3N0IENvbXB1dGVyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUnVubmluZyBHREIgb24gdGhlIGhvc3QgY29tcHV0ZXIgdGFrZXMgYSBudW1iZXIgb2Ygc3RhZ2VzLCB3aGljaAorICAgICAgICAgICAgICAgIHRoaXMgc2VjdGlvbiBkZXNjcmliZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LWdkYi1yZW1vdGVkZWJ1Zy1sYXVuY2gtZ2RiLWJ1aWxkY3Jvc3MiPgorICAgICAgICAgICAgICAgIDx0aXRsZT5CdWlsZCB0aGUgQ3Jvc3MtR0RCIFBhY2thZ2U8L3RpdGxlPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIHN1aXRhYmxlIEdEQiBjcm9zcy1iaW5hcnkgaXMgcmVxdWlyZWQgdGhhdCBydW5zIG9uIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgaG9zdCBjb21wdXRlciBidXQgYWxzbyBrbm93cyBhYm91dCB0aGUgdGhlIEFCSSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVtb3RlIHRhcmdldC4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBnZXQgdGhpcyBiaW5hcnkgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluJz5Dcm9zcy1EZXZlbG9wbWVudCBUb29sY2hhaW48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgd2hlcmUgdGhlIHRvb2xjaGFpbiBoYXMgYmVlbiBpbnN0YWxsZWQKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGRlZmF1bHQgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vb3B0L3Bva3kvJkRJU1RSTzs8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAvb3B0L3Bva3kvJkRJU1RSTzsvc3lzcm9vdHMvaTY4Ni1wb2t5c2RrLWxpbnV4L3Vzci9iaW4vYXJtdjdhLXZmcC1uZW9uLXBva3ktbGludXgtZ251ZWFiaS9hcm0tcG9reS1saW51eC1nbnVlYWJpLWdkYgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIHdoZXJlIDxmaWxlbmFtZT5hcm08L2ZpbGVuYW1lPiBpcyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZQorICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmxpbnV4LWdudWVhYmk8L2ZpbGVuYW1lPiBpcyB0aGUgdGFyZ2V0IEFCSS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgQml0QmFrZSB0byBidWlsZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdkYi1jcm9zczwvZmlsZW5hbWU+IGJpbmFyeS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBnZGItY3Jvc3MKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBiaW5hcnkgaXMgYnVpbHQsIHlvdSBjYW4gZmluZCBpdCBoZXJlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHRtcC9zeXNyb290cy88cmVwbGFjZWFibGU+aG9zdC1hcmNoPC9yZXBsYWNlYWJsZT4vdXNyL2Jpbi88cmVwbGFjZWFibGU+dGFyZ2V0LXBsYXRmb3JtPC9yZXBsYWNlYWJsZT4vPHJlcGxhY2VhYmxlPnRhcmdldC1hYmk8L3JlcGxhY2VhYmxlPi1nZGIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0ZS10aGUtZ2RiLWluaXRpYWxpemF0aW9uLWZpbGUnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5DcmVhdGUgdGhlIEdEQiBJbml0aWFsaXphdGlvbiBGaWxlIGFuZCBQb2ludCB0byBZb3VyIFJvb3QgRmlsZXN5c3RlbTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXNpZGUgZnJvbSB0aGUgR0RCIGNyb3NzLWJpbmFyeSwgeW91IGFsc28gbmVlZCBhIEdEQgorICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXphdGlvbiBmaWxlIGluIHRoZSBzYW1lIHRvcCBkaXJlY3RvcnkgaW4gd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgeW91ciBiaW5hcnkgcmVzaWRlcy4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3Ugc3RhcnQgR0RCIG9uIHlvdXIgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0sIEdEQgorICAgICAgICAgICAgICAgICAgICBmaW5kcyB0aGlzIGluaXRpYWxpemF0aW9uIGZpbGUgYW5kIGV4ZWN1dGVzIGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZHMgd2l0aGluLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIDxmaWxlbmFtZT4uZ2RiaW5pdDwvZmlsZW5hbWU+LCBzZWUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9J2h0dHA6Ly9zb3VyY2V3YXJlLm9yZy9nZGIvb25saW5lZG9jcy9nZGIvJz5EZWJ1Z2dpbmcgd2l0aCBHREI8L3VsaW5rPiIsCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIG1haW50YWluZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5zb3VyY2V3YXJlLm9yZyc+c291cmNld2FyZS5vcmc8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gYWRkIGEgc3RhdGVtZW50IGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+fi8uZ2RiaW5pdDwvZmlsZW5hbWU+IGZpbGUgdGhhdCBwb2ludHMgdG8geW91cgorICAgICAgICAgICAgICAgICAgICByb290IGZpbGVzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHBvaW50cyB0byB0aGUgcm9vdCBmaWxlc3lzdGVtIGZvcgorICAgICAgICAgICAgICAgICAgICBhbiBBUk0tYmFzZWQgdGFyZ2V0IGRldmljZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBzZXQgc3lzcm9vdCB+L3N5c3Jvb3RfYXJtCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LWdkYi1yZW1vdGVkZWJ1Zy1sYXVuY2gtZ2RiLWxhdW5jaGhvc3QiPgorICAgICAgICAgICAgICAgIDx0aXRsZT5MYXVuY2ggdGhlIEhvc3QgR0RCPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZWZvcmUgbGF1bmNoaW5nIHRoZSBob3N0IEdEQiwgeW91IG5lZWQgdG8gYmUgc3VyZQorICAgICAgICAgICAgICAgICAgICB5b3UgaGF2ZSBzb3VyY2VkIHRoZSBjcm9zcy1kZWJ1Z2dpbmcgZW52aXJvbm1lbnQgc2NyaXB0LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBpZiB5b3UgaW5zdGFsbGVkIHRoZSByb290IGZpbGVzeXN0ZW0gaW4gdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gaXMgYXQgPGZpbGVuYW1lPi9vcHQvcG9reS8mRElTVFJPOzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCBiZWdpbnMgd2l0aCB0aGUgc3RyaW5nICJlbnZpcm9ubWVudC1zZXR1cCIuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyNzZXR0aW5nLXVwLXRoZS1jcm9zcy1kZXZlbG9wbWVudC1lbnZpcm9ubWVudCc+U2V0dGluZyBVcCB0aGUgQ3Jvc3MtRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncworICAgICAgICAgICAgICAgICAgICBHdWlkZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRmluYWxseSwgc3dpdGNoIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGJpbmFyeSByZXNpZGVzCisgICAgICAgICAgICAgICAgICAgIGFuZCBydW4gdGhlIDxmaWxlbmFtZT5jcm9zcy1nZGI8L2ZpbGVuYW1lPiBiaW5hcnkuCisgICAgICAgICAgICAgICAgICAgIFByb3ZpZGUgdGhlIGJpbmFyeSBmaWxlIHlvdSBhcmUgZ29pbmcgdG8gZGVidWcuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgY29udGludWVzIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIGV4YW1wbGUgdXNlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiBieSBsb2FkaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+aGVsbG93b3JsZDwvZmlsZW5hbWU+IGJpbmFyeSBhcyB3ZWxsIGFzIHRoZQorICAgICAgICAgICAgICAgICAgICBkZWJ1Z2dpbmcgaW5mb3JtYXRpb246CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBhcm0tcG9reS1saW51eC1nbnVhYmktZ2RiIGhlbGxvd29ybGQKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgY29tbWFuZHMgaW4geW91ciA8ZmlsZW5hbWU+LmdkYmluaXQ8L2ZpbGVuYW1lPiBleGVjdXRlCisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgR0RCIHByb21wdCBhcHBlYXJzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwbGF0ZGV2LWdkYi1jb25uZWN0LXRvLXRoZS1yZW1vdGUtZ2RiLXNlcnZlcic+CisgICAgICAgICAgICA8dGl0bGU+Q29ubmVjdCB0byB0aGUgUmVtb3RlIEdEQiBTZXJ2ZXI8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGcm9tIHRoZSB0YXJnZXQsIHlvdSBuZWVkIHRvIGNvbm5lY3QgdG8gdGhlIHJlbW90ZSBHREIKKyAgICAgICAgICAgICAgICBzZXJ2ZXIgdGhhdCBpcyBydW5uaW5nIG9uIHRoZSBob3N0LgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIHJlbW90ZSBob3N0IGFuZCBwb3J0LgorICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGNvbW1hbmQgY29udGludWluZyB3aXRoIHRoZSBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgdGFyZ2V0IHJlbW90ZSAxOTIuMTY4LjcuMjoyMzQ1CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9InBsYXRkZXYtZ2RiLXJlbW90ZWRlYnVnLWxhdW5jaC1nZGItdXNpbmciPgorICAgICAgICAgICAgPHRpdGxlPlVzZSB0aGUgRGVidWdnZXI8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIG5vdyBwcm9jZWVkIHdpdGggZGVidWdnaW5nIGFzIG5vcm1hbCAtIGFzIGlmIHlvdSB3ZXJlIGRlYnVnZ2luZworICAgICAgICAgICAgICAgIG9uIHRoZSBsb2NhbCBtYWNoaW5lLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0byBpbnN0cnVjdCBHREIgdG8gYnJlYWsgaW4gdGhlICJtYWluIiBmdW5jdGlvbiBhbmQgdGhlbgorICAgICAgICAgICAgICAgIGNvbnRpbnVlIHdpdGggZXhlY3V0aW9uIG9mIHRoZSBpbmZlcmlvciBiaW5hcnkgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMKKyAgICAgICAgICAgICAgICBmcm9tIHdpdGhpbiBHREI6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAoZ2RiKSBicmVhayBtYWluCisgICAgIChnZGIpIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyBHREIsIHNlZSB0aGUgcHJvamVjdCdzIG9ubGluZSBkb2N1bWVudGF0aW9uIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iaHR0cDovL3NvdXJjZXdhcmUub3JnL2dkYi9kb3dubG9hZC9vbmxpbmVkb2NzLyIvPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdkZWJ1Z2dpbmctcGFyYWxsZWwtbWFrZS1yYWNlcyc+CisgICAgICAgIDx0aXRsZT5EZWJ1Z2dpbmcgUGFyYWxsZWwgTWFrZSBSYWNlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIHBhcmFsbGVsIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gcmFjZSBvY2N1cnMgd2hlbiB0aGUgYnVpbGQKKyAgICAgICAgICAgIGNvbnNpc3RzIG9mIHNldmVyYWwgcGFydHMgdGhhdCBhcmUgcnVuIHNpbXVsdGFuZW91c2x5IGFuZAorICAgICAgICAgICAgYSBzaXR1YXRpb24gb2NjdXJzIHdoZW4gdGhlIG91dHB1dCBvciByZXN1bHQgb2Ygb25lCisgICAgICAgICAgICBwYXJ0IGlzIG5vdCByZWFkeSBmb3IgdXNlIHdpdGggYSBkaWZmZXJlbnQgcGFydCBvZiB0aGUgYnVpbGQgdGhhdAorICAgICAgICAgICAgZGVwZW5kcyBvbiB0aGF0IG91dHB1dC4KKyAgICAgICAgICAgIFBhcmFsbGVsIG1ha2UgcmFjZXMgYXJlIGFubm95aW5nIGFuZCBjYW4gc29tZXRpbWVzIGJlIGRpZmZpY3VsdAorICAgICAgICAgICAgdG8gcmVwcm9kdWNlIGFuZCBmaXguCisgICAgICAgICAgICBIb3dldmVyLCBzb21lIHNpbXBsZSB0aXBzIGFuZCB0cmlja3MgZXhpc3QgdGhhdCBjYW4gaGVscAorICAgICAgICAgICAgeW91IGRlYnVnIGFuZCBmaXggdGhlbS4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcmVzZW50cyBhIHJlYWwtd29ybGQgZXhhbXBsZSBvZiBhbiBlcnJvciBlbmNvdW50ZXJlZAorICAgICAgICAgICAgb24gdGhlIFlvY3RvIFByb2plY3QgYXV0b2J1aWxkZXIgYW5kIHRoZSBwcm9jZXNzIHVzZWQgdG8gZml4IGl0LgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgSWYgeW91IGNhbm5vdCBwcm9wZXJseSBmaXggYSA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+IHJhY2UKKyAgICAgICAgICAgICAgICBjb25kaXRpb24sIHlvdSBjYW4gd29yayBhcm91bmQgaXQgYnkgY2xlYXJpbmcgZWl0aGVyIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQVJBTExFTF9NQUtFJz48ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQVJBTExFTF9NQUtFSU5TVCc+PGZpbGVuYW1lPlBBUkFMTEVMX01BS0VJTlNUPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0aGUtZmFpbHVyZSc+CisgICAgICAgICAgICA8dGl0bGU+VGhlIEZhaWx1cmU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgdGhpcyBleGFtcGxlLCBhc3N1bWUgdGhhdCB5b3UgYXJlIGJ1aWxkaW5nIGFuIGltYWdlIHRoYXQKKyAgICAgICAgICAgICAgICBkZXBlbmRzIG9uIHRoZSAibmVhcmQiIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgQW5kLCBkdXJpbmcgdGhlIGJ1aWxkLCBCaXRCYWtlIHJ1bnMgaW50byBwcm9ibGVtcyBhbmQKKyAgICAgICAgICAgICAgICBjcmVhdGVzIHRoZSBmb2xsb3dpbmcgb3V0cHV0LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgbG9nIGZpbGUgaGFzIGxvbmdlciBsaW5lcyBhcnRpZmljaWFsbHkKKyAgICAgICAgICAgICAgICAgICAgYnJva2VuIHRvIG1ha2UgdGhlIGxpc3RpbmcgZWFzaWVyIHRvIHJlYWQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIElmIHlvdSBleGFtaW5lIHRoZSBvdXRwdXQgb3IgdGhlIGxvZyBmaWxlLCB5b3Ugc2VlIHRoZQorICAgICAgICAgICAgICAgIGZhaWx1cmUgZHVyaW5nIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICB8IERFQlVHOiBTSVRFIGZpbGVzIFsnZW5kaWFuLWxpdHRsZScsICdiaXQtMzInLCAnaXg4Ni1jb21tb24nLCAnY29tbW9uLWxpbnV4JywgJ2NvbW1vbi1nbGliYycsICdpNTg2LWxpbnV4JywgJ2NvbW1vbiddCisgICAgIHwgREVCVUc6IEV4ZWN1dGluZyBzaGVsbCBmdW5jdGlvbiBkb19jb21waWxlCisgICAgIHwgTk9URTogbWFrZSAtaiAxNgorICAgICB8IG1ha2UgLS1uby1wcmludC1kaXJlY3RvcnkgYWxsLWFtCisgICAgIHwgL2Jpbi9ta2RpciAtcCBpbmNsdWRlL25lYXIKKyAgICAgfCAvYmluL21rZGlyIC1wIGluY2x1ZGUvbmVhcgorICAgICB8IC9iaW4vbWtkaXIgLXAgaW5jbHVkZS9uZWFyCisgICAgIHwgbG4gLXMgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlL25pZ2h0bHkteDg2L2J1aWxkL2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9uZWFyZC8KKyAgICAgICAwLjE0LXIwL25lYXJkLTAuMTQvaW5jbHVkZS90eXBlcy5oIGluY2x1ZGUvbmVhci90eXBlcy5oCisgICAgIHwgbG4gLXMgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlL25pZ2h0bHkteDg2L2J1aWxkL2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9uZWFyZC8KKyAgICAgICAwLjE0LXIwL25lYXJkLTAuMTQvaW5jbHVkZS9sb2cuaCBpbmNsdWRlL25lYXIvbG9nLmgKKyAgICAgfCBsbiAtcyAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L25lYXJkLworICAgICAgIDAuMTQtcjAvbmVhcmQtMC4xNC9pbmNsdWRlL3BsdWdpbi5oIGluY2x1ZGUvbmVhci9wbHVnaW4uaAorICAgICB8IC9iaW4vbWtkaXIgLXAgaW5jbHVkZS9uZWFyCisgICAgIHwgL2Jpbi9ta2RpciAtcCBpbmNsdWRlL25lYXIKKyAgICAgfCAvYmluL21rZGlyIC1wIGluY2x1ZGUvbmVhcgorICAgICB8IGxuIC1zIC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by1zbGF2ZS9uaWdodGx5LXg4Ni9idWlsZC9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvbmVhcmQvCisgICAgICAgMC4xNC1yMC9uZWFyZC0wLjE0L2luY2x1ZGUvdGFnLmggaW5jbHVkZS9uZWFyL3RhZy5oCisgICAgIHwgL2Jpbi9ta2RpciAtcCBpbmNsdWRlL25lYXIKKyAgICAgfCBsbiAtcyAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L25lYXJkLworICAgICAgIDAuMTQtcjAvbmVhcmQtMC4xNC9pbmNsdWRlL2FkYXB0ZXIuaCBpbmNsdWRlL25lYXIvYWRhcHRlci5oCisgICAgIHwgL2Jpbi9ta2RpciAtcCBpbmNsdWRlL25lYXIKKyAgICAgfCBsbiAtcyAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L25lYXJkLworICAgICAgIDAuMTQtcjAvbmVhcmQtMC4xNC9pbmNsdWRlL25kZWYuaCBpbmNsdWRlL25lYXIvbmRlZi5oCisgICAgIHwgbG4gLXMgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlL25pZ2h0bHkteDg2L2J1aWxkL2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9uZWFyZC8KKyAgICAgICAwLjE0LXIwL25lYXJkLTAuMTQvaW5jbHVkZS90bHYuaCBpbmNsdWRlL25lYXIvdGx2LmgKKyAgICAgfCAvYmluL21rZGlyIC1wIGluY2x1ZGUvbmVhcgorICAgICB8IC9iaW4vbWtkaXIgLXAgaW5jbHVkZS9uZWFyCisgICAgIHwgbG4gLXMgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlL25pZ2h0bHkteDg2L2J1aWxkL2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9uZWFyZC8KKyAgICAgICAwLjE0LXIwL25lYXJkLTAuMTQvaW5jbHVkZS9zZXR0aW5nLmggaW5jbHVkZS9uZWFyL3NldHRpbmcuaAorICAgICB8IC9iaW4vbWtkaXIgLXAgaW5jbHVkZS9uZWFyCisgICAgIHwgL2Jpbi9ta2RpciAtcCBpbmNsdWRlL25lYXIKKyAgICAgfCAvYmluL21rZGlyIC1wIGluY2x1ZGUvbmVhcgorICAgICB8IGxuIC1zIC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by1zbGF2ZS9uaWdodGx5LXg4Ni9idWlsZC9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvbmVhcmQvCisgICAgICAgMC4xNC1yMC9uZWFyZC0wLjE0L2luY2x1ZGUvZGV2aWNlLmggaW5jbHVkZS9uZWFyL2RldmljZS5oCisgICAgIHwgbG4gLXMgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlL25pZ2h0bHkteDg2L2J1aWxkL2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9uZWFyZC8KKyAgICAgICAwLjE0LXIwL25lYXJkLTAuMTQvaW5jbHVkZS9uZmNfY29weS5oIGluY2x1ZGUvbmVhci9uZmNfY29weS5oCisgICAgIHwgbG4gLXMgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlL25pZ2h0bHkteDg2L2J1aWxkL2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9uZWFyZC8KKyAgICAgICAwLjE0LXIwL25lYXJkLTAuMTQvaW5jbHVkZS9zbmVwLmggaW5jbHVkZS9uZWFyL3NuZXAuaAorICAgICB8IGxuIC1zIC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by1zbGF2ZS9uaWdodGx5LXg4Ni9idWlsZC9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvbmVhcmQvCisgICAgICAgMC4xNC1yMC9uZWFyZC0wLjE0L2luY2x1ZGUvdmVyc2lvbi5oIGluY2x1ZGUvbmVhci92ZXJzaW9uLmgKKyAgICAgfCBsbiAtcyAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L25lYXJkLworICAgICAgIDAuMTQtcjAvbmVhcmQtMC4xNC9pbmNsdWRlL2RidXMuaCBpbmNsdWRlL25lYXIvZGJ1cy5oCisgICAgIHwgLi9zcmMvZ2VuYnVpbHRpbiBuZmN0eXBlMSBuZmN0eXBlMiBuZmN0eXBlMyBuZmN0eXBlNCBwMnAgPiBzcmMvYnVpbHRpbi5oCisgICAgIHwgaTU4Ni1wb2t5LWxpbnV4LWdjYyAgLW0zMiAtbWFyY2g9aTU4NiAtLXN5c3Jvb3Q9L2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlL25pZ2h0bHkteDg2LworICAgICAgIGJ1aWxkL2J1aWxkL3RtcC9zeXNyb290cy9xZW11eDg2IC1ESEFWRV9DT05GSUdfSCAtSS4gLUkuL2luY2x1ZGUgLUkuL3NyYyAtSS4vZ2RidXMgIC1JL2hvbWUvcG9reWJ1aWxkLworICAgICAgIHlvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlL25pZ2h0bHkteDg2L2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL2dsaWItMi4wCisgICAgICAgLUkvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3FlbXV4ODYvdXNyLworICAgICAgIGxpYi9nbGliLTIuMC9pbmNsdWRlICAtSS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by1zbGF2ZS9uaWdodGx5LXg4Ni9idWlsZC9idWlsZC8KKyAgICAgICB0bXAvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS9kYnVzLTEuMCAtSS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by1zbGF2ZS8KKyAgICAgICBuaWdodGx5LXg4Ni9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMvcWVtdXg4Ni91c3IvbGliL2RidXMtMS4wL2luY2x1ZGUgIC1JL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLworICAgICAgIHlvY3RvLXNsYXZlL25pZ2h0bHkteDg2L2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL2xpYm5sMworICAgICAgIC1ETkVBUl9QTFVHSU5fQlVJTFRJTiAtRFBMVUdJTkRJUj1cIiIvdXNyL2xpYi9uZWFyL3BsdWdpbnMiXCIKKyAgICAgICAtRENPTkZJR0RJUj1cIiIvZXRjL25lYXJkXCIiIC1PMiAtcGlwZSAtZyAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgLWMKKyAgICAgICAtbyB0b29scy9zbmVwLXNlbmQubyB0b29scy9zbmVwLXNlbmQuYworICAgICB8IEluIGZpbGUgaW5jbHVkZWQgZnJvbSB0b29scy9zbmVwLXNlbmQuYzoxNjowOgorICAgICB8IHRvb2xzLy4uL3NyYy9uZWFyLmg6NDE6MjM6IGZhdGFsIGVycm9yOiBuZWFyL2RidXMuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorICAgICB8ICAjaW5jbHVkZSAmbHQ7bmVhci9kYnVzLmgmZ3Q7CisgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICBeCisgICAgIHwgY29tcGlsYXRpb24gdGVybWluYXRlZC4KKyAgICAgfCBtYWtlWzFdOiAqKiogW3Rvb2xzL3NuZXAtc2VuZC5vXSBFcnJvciAxCisgICAgIHwgbWFrZVsxXTogKioqIFdhaXRpbmcgZm9yIHVuZmluaXNoZWQgam9icy4uLi4KKyAgICAgfCBtYWtlOiAqKiogW2FsbF0gRXJyb3IgMgorICAgICB8IEVSUk9SOiBvZV9ydW5tYWtlIGZhaWxlZAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdyZXByb2R1Y2luZy10aGUtZXJyb3InPgorICAgICAgICAgICAgPHRpdGxlPlJlcHJvZHVjaW5nIHRoZSBFcnJvcjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJlY2F1c2UgcmFjZSBjb25kaXRpb25zIGFyZSBpbnRlcm1pdHRlbnQsIHRoZXkgZG8gbm90CisgICAgICAgICAgICAgICAgbWFuaWZlc3QgdGhlbXNlbHZlcyBldmVyeSB0aW1lIHlvdSBkbyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgSW4gZmFjdCwgbW9zdCB0aW1lcyB0aGUgYnVpbGQgd2lsbCBjb21wbGV0ZSB3aXRob3V0IHByb2JsZW1zCisgICAgICAgICAgICAgICAgZXZlbiB0aG91Z2ggdGhlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBleGlzdHMuCisgICAgICAgICAgICAgICAgVGh1cywgb25jZSB0aGUgZXJyb3Igc3VyZmFjZXMsIHlvdSBuZWVkIGEgd2F5IHRvIHJlcHJvZHVjZSBpdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCBjb21waWxpbmcgdGhlICJuZWFyZCIgcGFja2FnZSBpcyBjYXVzaW5nIHRoZQorICAgICAgICAgICAgICAgIHByb2JsZW0uCisgICAgICAgICAgICAgICAgU28gdGhlIGZpcnN0IHRoaW5nIHRvIGRvIGlzIGJ1aWxkICJuZWFyZCIgbG9jYWxseS4KKyAgICAgICAgICAgICAgICBCZWZvcmUgeW91IHN0YXJ0IHRoZSBidWlsZCwgc2V0IHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQVJBTExFTF9NQUtFJz48ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSB0bworICAgICAgICAgICAgICAgIGEgaGlnaCBudW1iZXIgKGUuZy4gIi1qIDIwIikuCisgICAgICAgICAgICAgICAgVXNpbmcgYSBoaWdoIHZhbHVlIGZvciA8ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgaW5jcmVhc2VzIHRoZSBjaGFuY2VzIG9mIHRoZSByYWNlIGNvbmRpdGlvbiBzaG93aW5nIHVwOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIG5lYXJkCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmNlIHRoZSBsb2NhbCBidWlsZCBmb3IgIm5lYXJkIiBjb21wbGV0ZXMsIHN0YXJ0IGEKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPiBidWlsZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBuZWFyZCAtYyBkZXZzaGVsbAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnNoZWxsPC9maWxlbmFtZT4sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncGxhdGRldi1hcHBkZXYtZGV2c2hlbGwnPlVzaW5nIGEgRGV2ZWxvcG1lbnQgU2hlbGw8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIHRoZSA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPiwgZG8gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgbWFrZSBjbGVhbgorICAgICAkIG1ha2UgdG9vbHMvc25lcC1zZW5kLm8KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+IGNvbW1hbmRzIGNhdXNlIHRoZSBmYWlsdXJlCisgICAgICAgICAgICAgICAgdG8gY2xlYXJseSBiZSB2aXNpYmxlLgorICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgYSBtaXNzaW5nIGRlcGVuZGVuY3kgZXhpc3RzIGZvciB0aGUgIm5lYXJkIgorICAgICAgICAgICAgICAgIE1ha2VmaWxlIHRhcmdldC4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIHNvbWUgYWJicmV2aWF0ZWQsIHNhbXBsZSBvdXRwdXQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICBtaXNzaW5nIGRlcGVuZGVuY3kgY2xlYXJseSB2aXNpYmxlIGF0IHRoZSBlbmQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBpNTg2LXBva3ktbGludXgtZ2NjICAtbTMyIC1tYXJjaD1pNTg2IC0tc3lzcm9vdD0vaG9tZS9zY290dC1sZW5vdm8vLi4uLi4uCisgICAgICAgIC4KKyAgICAgICAgLgorICAgICAgICAuCisgICAgIHRvb2xzL3NuZXAtc2VuZC5jCisgICAgIEluIGZpbGUgaW5jbHVkZWQgZnJvbSB0b29scy9zbmVwLXNlbmQuYzoxNjowOgorICAgICB0b29scy8uLi9zcmMvbmVhci5oOjQxOjIzOiBmYXRhbCBlcnJvcjogbmVhci9kYnVzLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKyAgICAgICNpbmNsdWRlICZsdDtuZWFyL2RidXMuaCZndDsKKyAgICAgICAgICAgICAgICAgICAgICAgXgorICAgICBjb21waWxhdGlvbiB0ZXJtaW5hdGVkLgorICAgICBtYWtlOiAqKiogW3Rvb2xzL3NuZXAtc2VuZC5vXSBFcnJvciAxCisgICAgICQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmctYS1wYXRjaC1mb3ItdGhlLWZpeCc+CisgICAgICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgYSBQYXRjaCBmb3IgdGhlIEZpeDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlcmUgaXMgYSBtaXNzaW5nIGRlcGVuZGVuY3kgZm9yIHRoZSBNYWtlZmlsZQorICAgICAgICAgICAgICAgIHRhcmdldCwgeW91IG5lZWQgdG8gcGF0Y2ggdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1ha2VmaWxlLmFtPC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMgZ2VuZXJhdGVkCisgICAgICAgICAgICAgICAgZnJvbSA8ZmlsZW5hbWU+TWFrZWZpbGUuaW48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSBRdWlsdCB0byBjcmVhdGUgdGhlIHBhdGNoOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBxdWlsdCBuZXcgcGFyYWxsZWxtYWtlLnBhdGNoCisgICAgIFBhdGNoIHBhdGNoZXMvcGFyYWxsZWxtYWtlLnBhdGNoIGlzIG5vdyBvbiB0b3AKKyAgICAgJCBxdWlsdCBhZGQgTWFrZWZpbGUuYW0KKyAgICAgRmlsZSBNYWtlZmlsZS5hbSBhZGRlZCB0byBwYXRjaCBwYXRjaGVzL3BhcmFsbGVsbWFrZS5wYXRjaAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyBRdWlsdCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1hLXF1aWx0LXdvcmtmbG93Jz5Vc2luZyBRdWlsdCBpbiBZb3VyIFdvcmtmbG93PC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50IHlvdSBuZWVkIHRvIG1ha2UgdGhlIGVkaXRzIHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1ha2VmaWxlLmFtPC9maWxlbmFtZT4gdG8gYWRkIHRoZSBtaXNzaW5nCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jeS4KKyAgICAgICAgICAgICAgICBGb3Igb3VyIGV4YW1wbGUsIHlvdSBoYXZlIHRvIGFkZCB0aGUgZm9sbG93aW5nIGxpbmUKKyAgICAgICAgICAgICAgICB0byB0aGUgZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHRvb2xzL3NuZXAtc2VuZC4kKE9CSkVYVCk6IGluY2x1ZGUvbmVhci9kYnVzLmgKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgZWRpdGVkIHRoZSBmaWxlLCB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlZnJlc2g8L2ZpbGVuYW1lPiBjb21tYW5kIHRvIGNyZWF0ZSB0aGUgcGF0Y2g6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHF1aWx0IHJlZnJlc2gKKyAgICAgUmVmcmVzaGVkIHBhdGNoIHBhdGNoZXMvcGFyYWxsZWxtYWtlLnBhdGNoCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE9uY2UgdGhlIHBhdGNoIGZpbGUgZXhpc3RzLCB5b3UgbmVlZCB0byBhZGQgaXQgYmFjayB0byB0aGUKKyAgICAgICAgICAgICAgICBvcmlnaW5hdGluZyByZWNpcGUgZm9sZGVyLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBhc3N1bWluZyBhIHRvcC1sZXZlbAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY3AgcGF0Y2hlcy9wYXJhbGxlbG1ha2UucGF0Y2ggcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25lYXJkL25lYXJkCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBmaW5hbCB0aGluZyB5b3UgbmVlZCB0byBkbyB0byBpbXBsZW1lbnQgdGhlIGZpeCBpbiB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCBpcyB0byB1cGRhdGUgdGhlICJuZWFyZCIgcmVjaXBlIChpLmUuCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5lYXJkLTAuMTQuYmI8L2ZpbGVuYW1lPikgc28gdGhhdCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgc3RhdGVtZW50IGluY2x1ZGVzIHRoZSBwYXRjaCBmaWxlLgorICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgZmlsZSBpcyBpbiB0aGUgZm9sZGVyIGFib3ZlIHRoZSBwYXRjaC4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIHdoYXQgdGhlIGVkaXRlZCA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgc3RhdGVtZW50IHdvdWxkIGxvb2sgbGlrZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC9uZXR3b3JrL25mYy8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgICAgICBmaWxlOi8vbmVhcmQuaW4gXAorICAgICAgICAgICAgICAgIGZpbGU6Ly9uZWFyZC5zZXJ2aWNlLmluIFwKKyAgICAgICAgICAgICAgICBmaWxlOi8vcGFyYWxsZWxtYWtlLnBhdGNoIFwKKyAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdpdGggdGhlIHBhdGNoIGNvbXBsZXRlIGFuZCBtb3ZlZCB0byB0aGUgY29ycmVjdCBmb2xkZXIgYW5kCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gc3RhdGVtZW50IHVwZGF0ZWQsIHlvdSBjYW4KKyAgICAgICAgICAgICAgICBleGl0IHRoZSA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZXhpdAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0ZXN0aW5nLXRoZS1idWlsZCc+CisgICAgICAgICAgICA8dGl0bGU+VGVzdGluZyB0aGUgQnVpbGQ8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaXRoIGV2ZXJ5dGhpbmcgaW4gcGxhY2UsIHlvdSBjYW4gZ2V0IGJhY2sgdG8gdHJ5aW5nIHRoZQorICAgICAgICAgICAgICAgIGJ1aWxkIGFnYWluIGxvY2FsbHk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbmVhcmQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhpcyBidWlsZCBzaG91bGQgc3VjY2VlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTm93IHlvdSBjYW4gb3BlbiB1cCBhIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+IGFnYWluCisgICAgICAgICAgICAgICAgYW5kIHJlcGVhdCB0aGUgY2xlYW4gYW5kIG1ha2Ugb3BlcmF0aW9ucyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIG5lYXJkIC1jIGRldnNoZWxsCisgICAgICQgbWFrZSBjbGVhbgorICAgICAkIG1ha2UgdG9vbHMvc25lcC1zZW5kLm8KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHNob3VsZCB3b3JrIHdpdGhvdXQgaXNzdWUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIHdpdGggYWxsIHNvbHZlZCBwcm9ibGVtcywgaWYgdGhleSBvcmlnaW5hdGVkIHVwc3RyZWFtLCB5b3UKKyAgICAgICAgICAgICAgICBuZWVkIHRvIHN1Ym1pdCB0aGUgZml4IGZvciB0aGUgcmVjaXBlIGluIE9FLUNvcmUgYW5kIHVwc3RyZWFtCisgICAgICAgICAgICAgICAgc28gdGhhdCB0aGUgcHJvYmxlbSBpcyB0YWtlbiBjYXJlIG9mIGF0IGl0cyBzb3VyY2UuCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdob3ctdG8tc3VibWl0LWEtY2hhbmdlJz5Ib3cgdG8gU3VibWl0IGEgQ2hhbmdlPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InBsYXRkZXYtb3Byb2ZpbGUiPgorICAgICAgICA8dGl0bGU+UHJvZmlsaW5nIHdpdGggT1Byb2ZpbGU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPHVsaW5rIHVybD0iaHR0cDovL29wcm9maWxlLnNvdXJjZWZvcmdlLm5ldC8iPk9Qcm9maWxlPC91bGluaz4gaXMgYQorICAgICAgICAgICAgc3RhdGlzdGljYWwgcHJvZmlsZXIgd2VsbCBzdWl0ZWQgZm9yIGZpbmRpbmcgcGVyZm9ybWFuY2UKKyAgICAgICAgICAgIGJvdHRsZW5lY2tzIGluIGJvdGggdXNlci1zcGFjZSBzb2Z0d2FyZSBhbmQgaW4gdGhlIGtlcm5lbC4KKyAgICAgICAgICAgIFRoaXMgcHJvZmlsZXIgcHJvdmlkZXMgYW5zd2VycyB0byBxdWVzdGlvbnMgbGlrZSAiV2hpY2ggZnVuY3Rpb25zIGRvZXMgbXkgYXBwbGljYXRpb24gc3BlbmQKKyAgICAgICAgICAgIHRoZSBtb3N0IHRpbWUgaW4gd2hlbiBkb2luZyBYPyIKKyAgICAgICAgICAgIEJlY2F1c2UgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXMgd2VsbCBpbnRlZ3JhdGVkIHdpdGggT1Byb2ZpbGUsIGl0IG1ha2VzIHByb2ZpbGluZworICAgICAgICAgICAgYXBwbGljYXRpb25zIG9uIHRhcmdldCBoYXJkd2FyZSBzdHJhaWdodCBmb3J3YXJkLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHNldCB1cCBhbmQgcnVuIE9Qcm9maWxlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1BST0ZfVVJMOyNwcm9maWxlLW1hbnVhbC1vcHJvZmlsZSc+b3Byb2ZpbGU8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZyBNYW51YWwuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIHVzZSBPUHJvZmlsZSwgeW91IG5lZWQgYW4gaW1hZ2UgdGhhdCBoYXMgT1Byb2ZpbGUgaW5zdGFsbGVkLgorICAgICAgICAgICAgVGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoaXMgaXMgd2l0aCAidG9vbHMtcHJvZmlsZSIgaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlNQUdFX0ZFQVRVUkVTJz5JTUFHRV9GRUFUVVJFUzwvdWxpbms+PC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICBZb3UgYWxzbyBuZWVkIGRlYnVnZ2luZyBzeW1ib2xzIHRvIGJlIGF2YWlsYWJsZSBvbiB0aGUgc3lzdGVtIHdoZXJlIHRoZSBhbmFseXNpcworICAgICAgICAgICAgdGFrZXMgcGxhY2UuCisgICAgICAgICAgICBZb3UgY2FuIGdhaW4gYWNjZXNzIHRvIHRoZSBzeW1ib2xzIGJ5IHVzaW5nICJkYmctcGtncyIgaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBvciBieQorICAgICAgICAgICAgaW5zdGFsbGluZyB0aGUgYXBwcm9wcmlhdGUgZGVidWcgKDxmaWxlbmFtZT4tZGJnPC9maWxlbmFtZT4pCisgICAgICAgICAgICBwYWNrYWdlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIHN1Y2Nlc3NmdWwgY2FsbCBncmFwaCBhbmFseXNpcywgdGhlIGJpbmFyaWVzIG11c3QgcHJlc2VydmUgdGhlIGZyYW1lCisgICAgICAgICAgICBwb2ludGVyIHJlZ2lzdGVyIGFuZCBzaG91bGQgYWxzbyBiZSBjb21waWxlZCB3aXRoIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPi1mbm8tb21pdC1mcmFtZXBvaW50ZXI8L2ZpbGVuYW1lPiBmbGFnLgorICAgICAgICAgICAgWW91IGNhbiBhY2hpZXZlIHRoaXMgYnkgc2V0dGluZyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU0VMRUNURURfT1BUSU1JWkFUSU9OJz5TRUxFQ1RFRF9PUFRJTUlaQVRJT048L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICB2YXJpYWJsZSB3aXRoIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgLWZleHBlbnNpdmUtb3B0aW1pemF0aW9ucworICAgICAtZm5vLW9taXQtZnJhbWVwb2ludGVyCisgICAgIC1mcmVuYW1lLXJlZ2lzdGVycworICAgICAtTzIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBhY2hpZXZlIGl0IGJ5IHNldHRpbmcgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURFQlVHX0JVSUxEJz5ERUJVR19CVUlMRDwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgIHZhcmlhYmxlIHRvICIxIiBpbiB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICBJZiB5b3UgdXNlIHRoZSA8ZmlsZW5hbWU+REVCVUdfQlVJTEQ8L2ZpbGVuYW1lPiB2YXJpYWJsZSwKKyAgICAgICAgICAgIHlvdSBhbHNvIGFkZCBleHRyYSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gdGhhdCBjYW4gbWFrZSB0aGUgZGVidWcKKyAgICAgICAgICAgIHBhY2thZ2VzIGxhcmdlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9InBsYXRkZXYtb3Byb2ZpbGUtdGFyZ2V0Ij4KKyAgICAgICAgICAgIDx0aXRsZT5Qcm9maWxpbmcgb24gdGhlIFRhcmdldDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzaW5nIE9Qcm9maWxlLCB5b3UgY2FuIHBlcmZvcm0gYWxsIHRoZSBwcm9maWxpbmcgd29yayBvbiB0aGUgdGFyZ2V0IGRldmljZS4KKyAgICAgICAgICAgICAgICBBIHNpbXBsZSBPUHJvZmlsZSBzZXNzaW9uIG1pZ2h0IGxvb2sgbGlrZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgb3Bjb250cm9sIC0tcmVzZXQKKyAgICAgIyBvcGNvbnRyb2wgLS1zdGFydCAtLXNlcGFyYXRlPWxpYiAtLW5vLXZtbGludXggLWMgNQorICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgIC4KKyAgICAgICAgW2RvIHdoYXRldmVyIGlzIGJlaW5nIHByb2ZpbGVkXQorICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgIC4KKyAgICAgIyBvcGNvbnRyb2wgLS1zdG9wCisgICAgICQgb3ByZXBvcnQgLWNsCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+cmVzZXQ8L2ZpbGVuYW1lPiBjb21tYW5kIGNsZWFycyBhbnkgcHJldmlvdXNseSBwcm9maWxlZCBkYXRhLgorICAgICAgICAgICAgICAgIFRoZSBuZXh0IGNvbW1hbmQgc3RhcnRzIE9Qcm9maWxlLgorICAgICAgICAgICAgICAgIFRoZSBvcHRpb25zIHVzZWQgd2hlbiBzdGFydGluZyB0aGUgcHJvZmlsZXIgc2VwYXJhdGUgZHluYW1pYyBsaWJyYXJ5IGRhdGEKKyAgICAgICAgICAgICAgICB3aXRoaW4gYXBwbGljYXRpb25zLCBkaXNhYmxlIGtlcm5lbCBwcm9maWxpbmcsIGFuZCBlbmFibGUgY2FsbGdyYXBoaW5nIHVwIHRvCisgICAgICAgICAgICAgICAgZml2ZSBsZXZlbHMgZGVlcC4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVG8gcHJvZmlsZSB0aGUga2VybmVsLCB5b3Ugd291bGQgc3BlY2lmeSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi0tdm1saW51eD0vcGF0aC90by92bWxpbnV4PC9maWxlbmFtZT4gb3B0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnZtbGludXg8L2ZpbGVuYW1lPiBmaWxlIGlzIHVzdWFsbHkgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vYm9vdC88L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYW5kIG11c3QgbWF0Y2ggdGhlIHJ1bm5pbmcga2VybmVsLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQWZ0ZXIgeW91IHBlcmZvcm0geW91ciBwcm9maWxpbmcgdGFza3MsIHRoZSBuZXh0IGNvbW1hbmQgc3RvcHMgdGhlIHByb2ZpbGVyLgorICAgICAgICAgICAgICAgIEFmdGVyIHRoYXQsIHlvdSBjYW4gdmlldyByZXN1bHRzIHdpdGggdGhlIDxmaWxlbmFtZT5vcHJlcG9ydDwvZmlsZW5hbWU+IGNvbW1hbmQgd2l0aCBvcHRpb25zCisgICAgICAgICAgICAgICAgdG8gc2VlIHRoZSBzZXBhcmF0ZSBsaWJyYXJ5IHN5bWJvbHMgYW5kIGNhbGxncmFwaCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQ2FsbGdyYXBoaW5nIGxvZ3MgaW5mb3JtYXRpb24gYWJvdXQgdGltZSBzcGVudCBpbiBmdW5jdGlvbnMgYW5kIGFib3V0IGEgZnVuY3Rpb24ncworICAgICAgICAgICAgICAgIGNhbGxpbmcgZnVuY3Rpb24gKHBhcmVudCkgYW5kIGNhbGxlZCBmdW5jdGlvbnMgKGNoaWxkcmVuKS4KKyAgICAgICAgICAgICAgICBUaGUgaGlnaGVyIHRoZSBjYWxsZ3JhcGhpbmcgZGVwdGgsIHRoZSBtb3JlIGFjY3VyYXRlIHRoZSByZXN1bHRzLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGhpZ2hlciBkZXB0aHMgYWxzbyBpbmNyZWFzZSB0aGUgbG9nZ2luZyBvdmVyaGVhZC4KKyAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBzaG91bGQgdGFrZSBjYXJlIHdoZW4gc2V0dGluZyB0aGUgY2FsbGdyYXBoaW5nIGRlcHRoLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBPbiBBUk0sIGJpbmFyaWVzIG5lZWQgdG8gaGF2ZSB0aGUgZnJhbWUgcG9pbnRlciBlbmFibGVkIGZvciBjYWxsZ3JhcGhpbmcgdG8gd29yay4KKyAgICAgICAgICAgICAgICAgICAgVG8gYWNjb21wbGlzaCB0aGlzIHVzZSB0aGUgPGZpbGVuYW1lPi1mbm8tb21pdC1mcmFtZXBvaW50ZXI8L2ZpbGVuYW1lPiBvcHRpb24KKyAgICAgICAgICAgICAgICAgICAgd2l0aCA8ZmlsZW5hbWU+Z2NjPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyBPUHJvZmlsZSwgc2VlIHRoZSBPUHJvZmlsZQorICAgICAgICAgICAgICAgIG9ubGluZSBkb2N1bWVudGF0aW9uIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iaHR0cDovL29wcm9maWxlLnNvdXJjZWZvcmdlLm5ldC9kb2NzLyIvPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LW9wcm9maWxlLW9wcm9maWxldWkiPgorICAgICAgICAgICAgPHRpdGxlPlVzaW5nIE9Qcm9maWxlVUk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgT1Byb2ZpbGUgaXMgYWxzbyBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgWW91IGNhbiBkb3dubG9hZCBhbmQgYnVpbGQgdGhpcyBpbnRlcmZhY2UgZnJvbSB0aGUgWW9jdG8gUHJvamVjdCBhdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9IiZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaS9vcHJvZmlsZXVpLyI+PC91bGluaz4uCisgICAgICAgICAgICAgICAgSWYgdGhlICJ0b29scy1wcm9maWxlIiBpbWFnZSBmZWF0dXJlIGlzIHNlbGVjdGVkLCBhbGwgbmVjZXNzYXJ5IGJpbmFyaWVzCisgICAgICAgICAgICAgICAgYXJlIGluc3RhbGxlZCBvbnRvIHRoZSB0YXJnZXQgZGV2aWNlIGZvciBPUHJvZmlsZVVJIGludGVyYWN0aW9uLgorICAgICAgICAgICAgICAgIEZvciBhIGxpc3Qgb2YgaW1hZ2UgZmVhdHVyZXMgdGhhdCBzaGlwIHdpdGggdGhlIFlvY3RvIFByb2plY3QsCisgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtZmVhdHVyZXMtaW1hZ2UnPkltYWdlIEZlYXR1cmVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBFdmVuIHRob3VnaCB0aGUgc291cmNlIGRpcmVjdG9yeSB1c3VhbGx5IGluY2x1ZGVzIGFsbCBuZWVkZWQgcGF0Y2hlcyBvbiB0aGUgdGFyZ2V0IGRldmljZSwgeW91CisgICAgICAgICAgICAgICAgbWlnaHQgZmluZCB5b3UgbmVlZCBvdGhlciBPUHJvZmlsZSBwYXRjaGVzIGZvciByZWNlbnQgT1Byb2ZpbGVVSSBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICBJZiBzbywgc2VlIHRoZSA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2kvb3Byb2ZpbGV1aS90cmVlL1JFQURNRSc+CisgICAgICAgICAgICAgICAgT1Byb2ZpbGVVSSBSRUFETUU8L3VsaW5rPiBmb3IgdGhlIG1vc3QgcmVjZW50IGluZm9ybWF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1vcHJvZmlsZS1vcHJvZmlsZXVpLW9ubGluZSI+CisgICAgICAgICAgICAgICAgPHRpdGxlPk9ubGluZSBNb2RlPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBVc2luZyBPUHJvZmlsZSBpbiBvbmxpbmUgbW9kZSBhc3N1bWVzIGEgd29ya2luZyBuZXR3b3JrIGNvbm5lY3Rpb24gd2l0aCB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICBXaXRoIHRoaXMgY29ubmVjdGlvbiwgeW91IGp1c3QgbmVlZCB0byBydW4gIm9wcm9maWxlLXNlcnZlciIgb24gdGhlIGRldmljZS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgT1Byb2ZpbGUgbGlzdGVucyBvbiBwb3J0IDQyMjQuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBjaGFuZ2UgdGhlIHBvcnQgdXNpbmcgdGhlIDxmaWxlbmFtZT4tLXBvcnQ8L2ZpbGVuYW1lPiBjb21tYW5kLWxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgY2xpZW50IHByb2dyYW0gaXMgY2FsbGVkIDxmaWxlbmFtZT5vcHJvZmlsZS12aWV3ZXI8L2ZpbGVuYW1lPiBhbmQgaXRzIFVJIGlzIHJlbGF0aXZlbHkKKyAgICAgICAgICAgICAgICAgICAgc3RyYWlnaHQgZm9yd2FyZC4KKyAgICAgICAgICAgICAgICAgICAgWW91IGFjY2VzcyBrZXkgZnVuY3Rpb25hbGl0eSB0aHJvdWdoIHRoZSBidXR0b25zIG9uIHRoZSB0b29sYmFyLCB3aGljaAorICAgICAgICAgICAgICAgICAgICBhcmUgZHVwbGljYXRlZCBpbiB0aGUgbWVudXMuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHRoZSBidXR0b25zOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Db25uZWN0OjwvZW1waGFzaXM+IENvbm5lY3RzIHRvIHRoZSByZW1vdGUgaG9zdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gc3VwcGx5IHRoZSBJUCBhZGRyZXNzIG9yIGhvc3RuYW1lLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5EaXNjb25uZWN0OjwvZW1waGFzaXM+IERpc2Nvbm5lY3RzIGZyb20gdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3RhcnQ6PC9lbXBoYXNpcz4gU3RhcnRzIHByb2ZpbGluZyBvbiB0aGUgZGV2aWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TdG9wOjwvZW1waGFzaXM+IFN0b3BzIHByb2ZpbGluZyBvbiB0aGUgZGV2aWNlIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkcyB0aGUgZGF0YSB0byB0aGUgbG9jYWwgaG9zdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdG9wcGluZyB0aGUgcHJvZmlsZXIgZ2VuZXJhdGVzIHRoZSBwcm9maWxlIGFuZCBkaXNwbGF5cyBpdCBpbiB0aGUgdmlld2VyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Eb3dubG9hZDo8L2VtcGhhc2lzPiBEb3dubG9hZHMgdGhlIGRhdGEgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgYW5kIGdlbmVyYXRlcyB0aGUgcHJvZmlsZSwgd2hpY2ggYXBwZWFycyBpbiB0aGUgdmlld2VyLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SZXNldDo8L2VtcGhhc2lzPiBSZXNldHMgdGhlIHNhbXBsZSBkYXRhIG9uIHRoZSBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXR0aW5nIHRoZSBkYXRhIHJlbW92ZXMgc2FtcGxlIGluZm9ybWF0aW9uIGNvbGxlY3RlZCBmcm9tIHByZXZpb3VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxpbmcgcnVucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHlvdSByZXNldCB0aGUgZGF0YSBpZiB5b3UgZG8gbm90IHdhbnQgdG8gaW5jbHVkZSBvbGQgc2FtcGxlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TYXZlOjwvZW1waGFzaXM+IFNhdmVzIHRoZSBkYXRhIGRvd25sb2FkZWQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgdG8gYW5vdGhlciBkaXJlY3RvcnkgZm9yIGxhdGVyIGV4YW1pbmF0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5PcGVuOjwvZW1waGFzaXM+IExvYWRzIHByZXZpb3VzbHkgc2F2ZWQgZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBjbGllbnQgZG93bmxvYWRzIHRoZSBjb21wbGV0ZSBwcm9maWxlIGFyY2hpdmUgZnJvbQorICAgICAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0IHRvIHRoZSBob3N0IGZvciBwcm9jZXNzaW5nLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGFyY2hpdmUgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0aGUgc2FtcGxlIGRhdGEsIHRoZSBvYmplY3QgZmlsZXMsCisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgZGVidWcgaW5mb3JtYXRpb24gZm9yIHRoZSBvYmplY3QgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBhcmNoaXZlIGlzIHRoZW4gY29udmVydGVkIHVzaW5nIHRoZSA8ZmlsZW5hbWU+b3BhcmNoY29udjwvZmlsZW5hbWU+IHNjcmlwdCwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICAgICAgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoZSBzY3JpcHQgdXNlcyA8ZmlsZW5hbWU+b3BpbXBvcnQ8L2ZpbGVuYW1lPiB0byBjb252ZXJ0IHRoZSBhcmNoaXZlIGZyb20KKyAgICAgICAgICAgICAgICAgICAgdGhlIHRhcmdldCB0byBzb21ldGhpbmcgdGhhdCBjYW4gYmUgcHJvY2Vzc2VkIG9uIHRoZSBob3N0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEb3dubG9hZGVkIGFyY2hpdmVzIHJlc2lkZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+IGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50bXA8L2ZpbGVuYW1lPiBhbmQgYXJlIGNsZWFyZWQgdXAgd2hlbiB0aGV5IGFyZSBubyBsb25nZXIgaW4gdXNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2lzaCB0byBwZXJmb3JtIGtlcm5lbCBwcm9maWxpbmcsIHlvdSBuZWVkIHRvIGJlIHN1cmUKKyAgICAgICAgICAgICAgICAgICAgYSA8ZmlsZW5hbWU+dm1saW51eDwvZmlsZW5hbWU+IGZpbGUgdGhhdCBtYXRjaGVzIHRoZSBydW5uaW5nIGtlcm5lbCBpcyBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBzb3VyY2UgZGlyZWN0b3J5LCB0aGF0IGZpbGUgaXMgdXN1YWxseSBsb2NhdGVkIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vYm9vdC92bWxpbnV4LTxyZXBsYWNlYWJsZT5rZXJuZWx2ZXJzaW9uPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiwgd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5rZXJuZWx2ZXJzaW9uPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiBpcyB0aGUgdmVyc2lvbiBvZiB0aGUga2VybmVsLgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBnZW5lcmF0ZXMgc2VwYXJhdGUgPGZpbGVuYW1lPnZtbGludXg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBmb3IgZWFjaCBrZXJuZWwgaXQgYnVpbGRzLgorICAgICAgICAgICAgICAgICAgICBUaHVzLCBpdCBzaG91bGQganVzdCBiZSBhIHF1ZXN0aW9uIG9mIG1ha2luZyBzdXJlIGEgbWF0Y2hpbmcgcGFja2FnZSBpcworICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgKGUuZy4gPGZpbGVuYW1lPm9wa2cgaW5zdGFsbCBrZXJuZWwtdm1saW51eDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpbGVzIGFyZSBhdXRvbWF0aWNhbGx5IGluc3RhbGxlZCBpbnRvIGRldmVsb3BtZW50IGFuZCBwcm9maWxpbmcgaW1hZ2VzCisgICAgICAgICAgICAgICAgICAgIGFsb25nc2lkZSBPUHJvZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgQSBjb25maWd1cmF0aW9uIG9wdGlvbiBleGlzdHMgd2l0aGluIHRoZSBPUHJvZmlsZVVJIHNldHRpbmdzIHBhZ2UgdGhhdCB5b3UgY2FuIHVzZSB0bworICAgICAgICAgICAgICAgICAgICBlbnRlciB0aGUgbG9jYXRpb24gb2YgdGhlIDxmaWxlbmFtZT52bWxpbnV4PC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2FpdGluZyBmb3IgZGVidWcgc3ltYm9scyB0byB0cmFuc2ZlciBmcm9tIHRoZSBkZXZpY2UgY2FuIGJlIHNsb3csIGFuZCBpdAorICAgICAgICAgICAgICAgICAgICBpcyBub3QgYWx3YXlzIG5lY2Vzc2FyeSB0byBhY3R1YWxseSBoYXZlIHRoZW0gb24gdGhlIGRldmljZSBmb3IgT1Byb2ZpbGUgdXNlLgorICAgICAgICAgICAgICAgICAgICBBbGwgdGhhdCBpcyBuZWVkZWQgaXMgYSBjb3B5IG9mIHRoZSBmaWxlc3lzdGVtIHdpdGggdGhlIGRlYnVnIHN5bWJvbHMgcHJlc2VudAorICAgICAgICAgICAgICAgICAgICBvbiB0aGUgdmlld2VyIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgVGhlICI8bGluayBsaW5rZW5kPSdwbGF0ZGV2LWdkYi1yZW1vdGVkZWJ1Zy1sYXVuY2gtZ2RiJz5MYXVuY2ggR0RCIG9uIHRoZSBIb3N0IENvbXB1dGVyPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBjb3ZlcnMgaG93IHRvIGNyZWF0ZSBzdWNoIGEgZGlyZWN0b3J5IHdpdGhpbgorICAgICAgICAgICAgICAgICAgICB0aGUgc291cmNlIGRpcmVjdG9yeSBhbmQgaG93IHRvIHVzZSB0aGUgT1Byb2ZpbGVVSSBTZXR0aW5ncworICAgICAgICAgICAgICAgICAgICBEaWFsb2cgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24uCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBzcGVjaWZ5IHRoZSBkaXJlY3RvcnksIGl0IHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBmaWxlIGNoZWNrc3VtcworICAgICAgICAgICAgICAgICAgICBtYXRjaCB0aG9zZSBvbiB0aGUgc3lzdGVtIHlvdSBhcmUgcHJvZmlsaW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9InBsYXRkZXYtb3Byb2ZpbGUtb3Byb2ZpbGV1aS1vZmZsaW5lIj4KKyAgICAgICAgICAgICAgICA8dGl0bGU+T2ZmbGluZSBNb2RlPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiBuZXR3b3JrIGFjY2VzcyB0byB0aGUgdGFyZ2V0IGlzIHVuYXZhaWxhYmxlLCB5b3UgY2FuIGdlbmVyYXRlCisgICAgICAgICAgICAgICAgICAgIGFuIGFyY2hpdmUgZm9yIHByb2Nlc3NpbmcgaW4gPGZpbGVuYW1lPm9wcm9maWxlLXZpZXdlcjwvZmlsZW5hbWU+IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBvcGNvbnRyb2wgLS1yZXNldAorICAgICAjIG9wY29udHJvbCAtLXN0YXJ0IC0tc2VwYXJhdGU9bGliIC0tbm8tdm1saW51eCAtYyA1CisgICAgICAgICAgICAuCisgICAgICAgICAgICAuCisgICAgIFtkbyB3aGF0ZXZlciBpcyBiZWluZyBwcm9maWxlZF0KKyAgICAgICAgICAgIC4KKyAgICAgICAgICAgIC4KKyAgICAgIyBvcGNvbnRyb2wgLS1zdG9wCisgICAgICMgb3BhcmNoaXZlIC1vIG15X2FyY2hpdmUKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgPGZpbGVuYW1lPm15X2FyY2hpdmU8L2ZpbGVuYW1lPiBpcyB0aGUgbmFtZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZSBkaXJlY3Rvcnkgd2hlcmUgeW91IHdvdWxkIGxpa2UgdGhlIHByb2ZpbGUgYXJjaGl2ZSB0byBiZSBrZXB0LgorICAgICAgICAgICAgICAgICAgICBBZnRlciB0aGUgZGlyZWN0b3J5IGlzIGNyZWF0ZWQsIHlvdSBjYW4gY29weSBpdCB0byBhbm90aGVyIGhvc3QgYW5kIGxvYWQgaXQKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgPGZpbGVuYW1lPm9wcm9maWxlLXZpZXdlcjwvZmlsZW5hbWU+IG9wZW4gZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgICAgICAgICAgICAgSWYgbmVjZXNzYXJ5LCB0aGUgYXJjaGl2ZSBpcyBjb252ZXJ0ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21haW50YWluaW5nLW9wZW4tc291cmNlLWxpY2Vuc2UtY29tcGxpYW5jZS1kdXJpbmcteW91ci1wcm9kdWN0cy1saWZlY3ljbGUnPgorICAgICAgICA8dGl0bGU+TWFpbnRhaW5pbmcgT3BlbiBTb3VyY2UgTGljZW5zZSBDb21wbGlhbmNlIER1cmluZyBZb3VyIFByb2R1Y3QncyBMaWZlY3ljbGU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25lIG9mIHRoZSBjb25jZXJucyBmb3IgYSBkZXZlbG9wbWVudCBvcmdhbml6YXRpb24gdXNpbmcgb3BlbiBzb3VyY2UKKyAgICAgICAgICAgIHNvZnR3YXJlIGlzIGhvdyB0byBtYWludGFpbiBjb21wbGlhbmNlIHdpdGggdmFyaW91cyBvcGVuIHNvdXJjZQorICAgICAgICAgICAgbGljZW5zaW5nIGR1cmluZyB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBwcm9kdWN0LgorICAgICAgICAgICAgV2hpbGUgdGhpcyBzZWN0aW9uIGRvZXMgbm90IHByb3ZpZGUgbGVnYWwgYWR2aWNlIG9yCisgICAgICAgICAgICBjb21wcmVoZW5zaXZlbHkgY292ZXIgYWxsIHNjZW5hcmlvcywgaXQgZG9lcworICAgICAgICAgICAgcHJlc2VudCBtZXRob2RzIHRoYXQgeW91IGNhbiB1c2UgdG8KKyAgICAgICAgICAgIGFzc2lzdCB5b3UgaW4gbWVldGluZyB0aGUgY29tcGxpYW5jZSByZXF1aXJlbWVudHMgZHVyaW5nIGEgc29mdHdhcmUKKyAgICAgICAgICAgIHJlbGVhc2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdpdGggaHVuZHJlZHMgb2YgZGlmZmVyZW50IG9wZW4gc291cmNlIGxpY2Vuc2VzIHRoYXQgdGhlIFlvY3RvCisgICAgICAgICAgICBQcm9qZWN0IHRyYWNrcywgaXQgaXMgZGlmZmljdWx0IHRvIGtub3cgdGhlIHJlcXVpcmVtZW50cyBvZiBlYWNoCisgICAgICAgICAgICBhbmQgZXZlcnkgbGljZW5zZS4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIG1ham9yIEZMT1NTIGxpY2Vuc2VzIGNhbiBiZWdpbgorICAgICAgICAgICAgdG8gYmUgY292ZXJlZCBieQorICAgICAgICAgICAgYXNzdW1pbmcgdGhhdCB0aHJlZSBtYWluIGFyZWFzIG9mIGNvbmNlcm4gZXhpc3Q6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Tb3VyY2UgY29kZSBtdXN0IGJlIHByb3ZpZGVkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5MaWNlbnNlIHRleHQgZm9yIHRoZSBzb2Z0d2FyZSBtdXN0IGJlCisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Db21waWxhdGlvbiBzY3JpcHRzIGFuZCBtb2RpZmljYXRpb25zIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICBzb3VyY2UgY29kZSBtdXN0IGJlIHByb3ZpZGVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgVGhlcmUgYXJlIG90aGVyIHJlcXVpcmVtZW50cyBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoZXNlCisgICAgICAgICAgICB0aHJlZSBhbmQgdGhlIG1ldGhvZHMgZGVzY3JpYmVkIGluIHRoaXMgc2VjdGlvbgorICAgICAgICAgICAgKGUuZy4gdGhlIG1lY2hhbmlzbSB0aHJvdWdoIHdoaWNoIHNvdXJjZSBjb2RlIGlzIGRpc3RyaWJ1dGVkKS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgZGlmZmVyZW50IG9yZ2FuaXphdGlvbnMgaGF2ZSBkaWZmZXJlbnQgbWV0aG9kcyBvZiBjb21wbHlpbmcgd2l0aAorICAgICAgICAgICAgb3BlbiBzb3VyY2UgbGljZW5zaW5nLCB0aGlzIHNlY3Rpb24gaXMgbm90IG1lYW50IHRvIGltcGx5IHRoYXQKKyAgICAgICAgICAgIHRoZXJlIGlzIG9ubHkgb25lIHNpbmdsZSB3YXkgdG8gbWVldCB5b3VyIGNvbXBsaWFuY2Ugb2JsaWdhdGlvbnMsCisgICAgICAgICAgICBidXQgcmF0aGVyIHRvIGRlc2NyaWJlIG9uZSBtZXRob2Qgb2YgYWNoaWV2aW5nIGNvbXBsaWFuY2UuCisgICAgICAgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgc2VjdGlvbiBkZXNjcmliZXMgbWV0aG9kcyBzdXBwb3J0ZWQgdG8gbWVldCB0aGUKKyAgICAgICAgICAgIHByZXZpb3VzbHkgbWVudGlvbmVkIHRocmVlIHJlcXVpcmVtZW50cy4KKyAgICAgICAgICAgIE9uY2UgeW91IHRha2Ugc3RlcHMgdG8gbWVldCB0aGVzZSByZXF1aXJlbWVudHMsCisgICAgICAgICAgICBhbmQgcHJpb3IgdG8gcmVsZWFzaW5nIGltYWdlcywgc291cmNlcywgYW5kIHRoZSBidWlsZCBzeXN0ZW0sCisgICAgICAgICAgICB5b3Ugc2hvdWxkIGF1ZGl0IGFsbCBhcnRpZmFjdHMgdG8gZW5zdXJlIGNvbXBsZXRlbmVzcy4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGdlbmVyYXRlcyBhIGxpY2Vuc2UgbWFuaWZlc3QgZHVyaW5nCisgICAgICAgICAgICAgICAgaW1hZ2UgY3JlYXRpb24gdGhhdCBpcyBsb2NhdGVkCisgICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPiR7REVQTE9ZX0RJUn0vbGljZW5zZXMvPHJlcGxhY2VhYmxlPmltYWdlX25hbWUtZGF0ZXN0YW1wPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRvIGFzc2lzdCB3aXRoIGFueSBhdWRpdHMuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncHJvdmlkaW5nLXRoZS1zb3VyY2UtY29kZSc+CisgICAgICAgICAgICA8dGl0bGU+UHJvdmlkaW5nIHRoZSBTb3VyY2UgQ29kZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIENvbXBsaWFuY2UgYWN0aXZpdGllcyBzaG91bGQgYmVnaW4gYmVmb3JlIHlvdSBnZW5lcmF0ZSB0aGUKKyAgICAgICAgICAgICAgICBmaW5hbCBpbWFnZS4KKyAgICAgICAgICAgICAgICBUaGUgZmlyc3QgdGhpbmcgeW91IHNob3VsZCBsb29rIGF0IGlzIHRoZSByZXF1aXJlbWVudCB0aGF0CisgICAgICAgICAgICAgICAgdG9wcyB0aGUgbGlzdCBmb3IgbW9zdCBjb21wbGlhbmNlIGdyb3VwcyAtIHByb3ZpZGluZworICAgICAgICAgICAgICAgIHRoZSBzb3VyY2UuCisgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgaGFzIGEgZmV3IHdheXMgb2YgbWVldGluZyB0aGlzCisgICAgICAgICAgICAgICAgcmVxdWlyZW1lbnQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uZSBvZiB0aGUgZWFzaWVzdCB3YXlzIHRvIG1lZXQgdGhpcyByZXF1aXJlbWVudCBpcworICAgICAgICAgICAgICAgIHRvIHByb3ZpZGUgdGhlIGVudGlyZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ETF9ESVInPjxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdXNlZCBieSB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgVGhpcyBtZXRob2QsIGhvd2V2ZXIsIGhhcyBhIGZldyBpc3N1ZXMuCisgICAgICAgICAgICAgICAgVGhlIG1vc3Qgb2J2aW91cyBpcyB0aGUgc2l6ZSBvZiB0aGUgZGlyZWN0b3J5IHNpbmNlIGl0IGluY2x1ZGVzCisgICAgICAgICAgICAgICAgYWxsIHNvdXJjZXMgdXNlZCBpbiB0aGUgYnVpbGQgYW5kIG5vdCBqdXN0IHRoZSBzb3VyY2UgdXNlZCBpbgorICAgICAgICAgICAgICAgIHRoZSByZWxlYXNlZCBpbWFnZS4KKyAgICAgICAgICAgICAgICBJdCB3aWxsIGluY2x1ZGUgdG9vbGNoYWluIHNvdXJjZSwgYW5kIG90aGVyIGFydGlmYWN0cywgd2hpY2gKKyAgICAgICAgICAgICAgICB5b3Ugd291bGQgbm90IGdlbmVyYWxseSByZWxlYXNlLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBtb3JlIHNlcmlvdXMgaXNzdWUgZm9yIG1vc3QgY29tcGFuaWVzIGlzIGFjY2lkZW50YWwKKyAgICAgICAgICAgICAgICByZWxlYXNlIG9mIHByb3ByaWV0YXJ5IHNvZnR3YXJlLgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIGFuCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtYXJjaGl2ZXInPjxmaWxlbmFtZT5hcmNoaXZlcjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBjbGFzcyB0byBoZWxwIGF2b2lkIHNvbWUgb2YgdGhlc2UgY29uY2VybnMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJlZm9yZSB5b3UgZW1wbG95IDxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPiBvciB0aGUKKyAgICAgICAgICAgICAgICBhcmNoaXZlciBjbGFzcywgeW91IG5lZWQgdG8gZGVjaWRlIGhvdyB5b3UgY2hvb3NlIHRvCisgICAgICAgICAgICAgICAgcHJvdmlkZSBzb3VyY2UuCisgICAgICAgICAgICAgICAgVGhlIHNvdXJjZSBhcmNoaXZlciBjbGFzcyBjYW4gZ2VuZXJhdGUgdGFyYmFsbHMgYW5kIFNSUE1zCisgICAgICAgICAgICAgICAgYW5kIGNhbiBjcmVhdGUgdGhlbSB3aXRoIHZhcmlvdXMgbGV2ZWxzIG9mIGNvbXBsaWFuY2UgaW4gbWluZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25lIHdheSBvZiBkb2luZyB0aGlzIChidXQgY2VydGFpbmx5IG5vdCB0aGUgb25seSB3YXkpIGlzIHRvCisgICAgICAgICAgICAgICAgcmVsZWFzZSBqdXN0IHRoZSBzb3VyY2UgYXMgYSB0YXJiYWxsLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZG8gdGhpcyBieSBhZGRpbmcgdGhlIGZvbGxvd2luZyB0byB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5IRVJJVCArPSAiYXJjaGl2ZXIiCisgICAgIEFSQ0hJVkVSX01PREVbc3JjXSA9ICJvcmlnaW5hbCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgRHVyaW5nIHRoZSBjcmVhdGlvbiBvZiB5b3VyIGltYWdlLCB0aGUgc291cmNlIGZyb20gYWxsCisgICAgICAgICAgICAgICAgcmVjaXBlcyB0aGF0IGRlcGxveSBwYWNrYWdlcyB0byB0aGUgaW1hZ2UgaXMgcGxhY2VkIHdpdGhpbgorICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yaWVzIG9mCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRFUExPWV9ESVIvc291cmNlczwvZmlsZW5hbWU+IGJhc2VkIG9uIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MSUNFTlNFJz48ZmlsZW5hbWU+TElDRU5TRTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBmb3IgZWFjaCByZWNpcGUuCisgICAgICAgICAgICAgICAgUmVsZWFzaW5nIHRoZSBlbnRpcmUgZGlyZWN0b3J5IGVuYWJsZXMgeW91IHRvIGNvbXBseSB3aXRoCisgICAgICAgICAgICAgICAgcmVxdWlyZW1lbnRzIGNvbmNlcm5pbmcgcHJvdmlkaW5nIHRoZSB1bm1vZGlmaWVkIHNvdXJjZS4KKyAgICAgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZSBzaXplIG9mIHRoZSBkaXJlY3RvcnkgY2FuCisgICAgICAgICAgICAgICAgZ2V0IGxhcmdlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIHdheSB0byBoZWxwIG1pdGlnYXRlIHRoZSBzaXplIGlzc3VlIGlzIHRvIG9ubHkgcmVsZWFzZQorICAgICAgICAgICAgICAgIHRhcmJhbGxzIGZvciBsaWNlbnNlcyB0aGF0IHJlcXVpcmUgdGhlIHJlbGVhc2Ugb2YKKyAgICAgICAgICAgICAgICBzb3VyY2UuCisgICAgICAgICAgICAgICAgTGV0IHVzIGFzc3VtZSB5b3UgYXJlIG9ubHkgY29uY2VybmVkIHdpdGggR1BMIGNvZGUgYXMKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVkIHdpdGggdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgcG9reS9idWlsZC90bXAvZGVwbG95L3NvdXJjZXMKKyAgICAgJCBta2RpciB+L2dwbF9zb3VyY2VfcmVsZWFzZQorICAgICAkIGZvciBkaXIgaW4gKi8qR1BMKjsgZG8gY3AgLXIgJGRpciB+L2dwbF9zb3VyY2VfcmVsZWFzZTsgZG9uZQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50LCB5b3UgY291bGQgY3JlYXRlIGEgdGFyYmFsbCBmcm9tIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ncGxfc291cmNlX3JlbGVhc2U8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYW5kCisgICAgICAgICAgICAgICAgcHJvdmlkZSB0aGF0IHRvIHRoZSBlbmQgdXNlci4KKyAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCB3b3VsZCBiZSBhIHN0ZXAgdG93YXJkIGFjaGlldmluZyBjb21wbGlhbmNlCisgICAgICAgICAgICAgICAgd2l0aCBzZWN0aW9uIDNhIG9mIEdQTHYyIGFuZCB3aXRoIHNlY3Rpb24gNiBvZiBHUEx2My4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwcm92aWRpbmctbGljZW5zZS10ZXh0Jz4KKyAgICAgICAgICAgIDx0aXRsZT5Qcm92aWRpbmcgTGljZW5zZSBUZXh0PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25lIHJlcXVpcmVtZW50IHRoYXQgaXMgb2Z0ZW4gb3Zlcmxvb2tlZCBpcyBpbmNsdXNpb24KKyAgICAgICAgICAgICAgICBvZiBsaWNlbnNlIHRleHQuCisgICAgICAgICAgICAgICAgVGhpcyByZXF1aXJlbWVudCBhbHNvIG5lZWRzIHRvIGJlIGRlYWx0IHdpdGggcHJpb3IgdG8KKyAgICAgICAgICAgICAgICBnZW5lcmF0aW5nIHRoZSBmaW5hbCBpbWFnZS4KKyAgICAgICAgICAgICAgICBTb21lIGxpY2Vuc2VzIHJlcXVpcmUgdGhlIGxpY2Vuc2UgdGV4dCB0byBhY2NvbXBhbnkKKyAgICAgICAgICAgICAgICB0aGUgYmluYXJ5LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWNoaWV2ZSB0aGlzIGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nIHRvIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDT1BZX0xJQ19NQU5JRkVTVCA9ICIxIgorICAgICBDT1BZX0xJQ19ESVJTID0gIjEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFkZGluZyB0aGVzZSBzdGF0ZW1lbnRzIHRvIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZW5zdXJlcworICAgICAgICAgICAgICAgIHRoYXQgdGhlIGxpY2Vuc2VzIGNvbGxlY3RlZCBkdXJpbmcgcGFja2FnZSBnZW5lcmF0aW9uCisgICAgICAgICAgICAgICAgYXJlIGluY2x1ZGVkIG9uIHlvdXIgaW1hZ2UuCisgICAgICAgICAgICAgICAgQXMgdGhlIHNvdXJjZSBhcmNoaXZlciBoYXMgYWxyZWFkeSBhcmNoaXZlZCB0aGUgb3JpZ2luYWwKKyAgICAgICAgICAgICAgICB1bm1vZGlmaWVkIHNvdXJjZSB0aGF0IGNvbnRhaW5zIHRoZSBsaWNlbnNlIGZpbGVzLAorICAgICAgICAgICAgICAgIHlvdSB3b3VsZCBoYXZlIGFscmVhZHkgbWV0IHRoZSByZXF1aXJlbWVudHMgZm9yIGluY2x1c2lvbgorICAgICAgICAgICAgICAgIG9mIHRoZSBsaWNlbnNlIGluZm9ybWF0aW9uIHdpdGggc291cmNlIGFzIGRlZmluZWQgYnkgdGhlIEdQTAorICAgICAgICAgICAgICAgIGFuZCBvdGhlciBvcGVuIHNvdXJjZSBsaWNlbnNlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwcm92aWRpbmctY29tcGlsYXRpb24tc2NyaXB0cy1hbmQtc291cmNlLWNvZGUtbW9kaWZpY2F0aW9ucyc+CisgICAgICAgICAgICA8dGl0bGU+UHJvdmlkaW5nIENvbXBpbGF0aW9uIFNjcmlwdHMgYW5kIFNvdXJjZSBDb2RlIE1vZGlmaWNhdGlvbnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGFkZHJlc3NlZCBhbGwgd2UgbmVlZCB0byBhZGRyZXNzCisgICAgICAgICAgICAgICAgcHJpb3IgdG8gZ2VuZXJhdGluZyB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgVGhlIG5leHQgdHdvIHJlcXVpcmVtZW50cyBhcmUgYWRkcmVzc2VkIGR1cmluZyB0aGUgZmluYWwKKyAgICAgICAgICAgICAgICBwYWNrYWdpbmcgb2YgdGhlIHJlbGVhc2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJ5IHJlbGVhc2luZyB0aGUgdmVyc2lvbiBvZiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIGFuZCB0aGUgbGF5ZXJzIHVzZWQgZHVyaW5nIHRoZSBidWlsZCwgeW91IHdpbGwgYmUgcHJvdmlkaW5nIGJvdGgKKyAgICAgICAgICAgICAgICBjb21waWxhdGlvbiBzY3JpcHRzIGFuZCB0aGUgc291cmNlIGNvZGUgbW9kaWZpY2F0aW9ucyBpbiBvbmUKKyAgICAgICAgICAgICAgICBzdGVwLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB0aGUgZGVwbG95bWVudCB0ZWFtIGhhcyBhCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjYnNwLWxheWVycyc+QlNQIGxheWVyPC91bGluaz4KKyAgICAgICAgICAgICAgICBhbmQgYSBkaXN0cm8gbGF5ZXIsIGFuZCB0aG9zZSB0aG9zZSBsYXllcnMgYXJlIHVzZWQgdG8gcGF0Y2gsCisgICAgICAgICAgICAgICAgY29tcGlsZSwgcGFja2FnZSwgb3IgbW9kaWZ5IChpbiBhbnkgd2F5KSBhbnkgb3BlbiBzb3VyY2UKKyAgICAgICAgICAgICAgICBzb2Z0d2FyZSBpbmNsdWRlZCBpbiB5b3VyIHJlbGVhc2VkIGltYWdlcywgeW91CisgICAgICAgICAgICAgICAgbWlnaHQgYmUgcmVxdWlyZWQgdG8gdG8gcmVsZWFzZSB0aG9zZSBsYXllcnMgdW5kZXIgc2VjdGlvbiAzIG9mCisgICAgICAgICAgICAgICAgR1BMdjIgb3Igc2VjdGlvbiAxIG9mIEdQTHYzLgorICAgICAgICAgICAgICAgIE9uZSB3YXkgb2YgZG9pbmcgdGhhdCBpcyB3aXRoIGEgY2xlYW4KKyAgICAgICAgICAgICAgICBjaGVja291dCBvZiB0aGUgdmVyc2lvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBhbmQgbGF5ZXJzIHVzZWQKKyAgICAgICAgICAgICAgICBkdXJpbmcgeW91ciBidWlsZC4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIFdlIGJ1aWx0IHVzaW5nIHRoZSAmRElTVFJPX05BTUU7IGJyYW5jaCBvZiB0aGUgcG9reSByZXBvCisgICAgICQgZ2l0IGNsb25lIC1iICZESVNUUk9fTkFNRTsgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reQorICAgICAkIGNkIHBva3kKKyAgICAgIyBXZSBidWlsdCB1c2luZyB0aGUgcmVsZWFzZV9icmFuY2ggZm9yIG91ciBsYXllcnMKKyAgICAgJCBnaXQgY2xvbmUgLWIgcmVsZWFzZV9icmFuY2ggZ2l0Oi8vZ2l0Lm15Y29tcGFueS5jb20vbWV0YS1teS1ic3AtbGF5ZXIKKyAgICAgJCBnaXQgY2xvbmUgLWIgcmVsZWFzZV9icmFuY2ggZ2l0Oi8vZ2l0Lm15Y29tcGFueS5jb20vbWV0YS1teS1zb2Z0d2FyZS1sYXllcgorICAgICAjIGNsZWFuIHVwIHRoZSAuZ2l0IHJlcG9zCisgICAgICQgZmluZCAuIC1uYW1lICIuZ2l0IiAtdHlwZSBkIC1leGVjIHJtIC1yZiB7fSBcOworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBPbmUgdGhpbmcgYSBkZXZlbG9wbWVudCBvcmdhbml6YXRpb24gbWlnaHQgd2FudCB0byBjb25zaWRlcgorICAgICAgICAgICAgICAgIGZvciBlbmQtdXNlciBjb252ZW5pZW5jZSBpcyB0byBtb2RpZnkKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0by9jb25mL2JibGF5ZXJzLmNvbmYuc2FtcGxlPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICBlbnN1cmUgdGhhdCB3aGVuIHRoZSBlbmQgdXNlciB1dGlsaXplcyB0aGUgcmVsZWFzZWQgYnVpbGQKKyAgICAgICAgICAgICAgICBzeXN0ZW0gdG8gYnVpbGQgYW4gaW1hZ2UsIHRoZSBkZXZlbG9wbWVudCBvcmdhbml6YXRpb24ncworICAgICAgICAgICAgICAgIGxheWVycyBhcmUgaW5jbHVkZWQgaW4gdGhlIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlIGF1dG9tYXRpY2FsbHk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIExBWUVSX0NPTkZfVkVSU0lPTiBpcyBpbmNyZWFzZWQgZWFjaCB0aW1lIGJ1aWxkL2NvbmYvYmJsYXllcnMuY29uZgorICAgICAjIGNoYW5nZXMgaW5jb21wYXRpYmx5CisgICAgIExDT05GX1ZFUlNJT04gPSAiNiIKKworICAgICBCQlBBVEggPSAiJHtUT1BESVJ9IgorICAgICBCQkZJTEVTID89ICIiCisKKyAgICAgQkJMQVlFUlMgPz0gIiBcCisgICAgICAgIyNPRVJPT1QjIy9tZXRhIFwKKyAgICAgICAjI09FUk9PVCMjL21ldGEteW9jdG8gXAorICAgICAgICMjT0VST09UIyMvbWV0YS15b2N0by1ic3AgXAorICAgICAgICMjT0VST09UIyMvbWV0YS1teWxheWVyIFwKKyAgICAgICAiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIENyZWF0aW5nIGFuZCBwcm92aWRpbmcgYW4gYXJjaGl2ZSBvZiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdtZXRhZGF0YSc+TWV0YWRhdGE8L2xpbms+IGxheWVycworICAgICAgICAgICAgICAgIChyZWNpcGVzLCBjb25maWd1cmF0aW9uIGZpbGVzLCBhbmQgc28gZm9ydGgpCisgICAgICAgICAgICAgICAgZW5hYmxlcyB5b3UgdG8gbWVldCB5b3VyCisgICAgICAgICAgICAgICAgcmVxdWlyZW1lbnRzIHRvIGluY2x1ZGUgdGhlIHNjcmlwdHMgdG8gY29udHJvbCBjb21waWxhdGlvbgorICAgICAgICAgICAgICAgIGFzIHdlbGwgYXMgYW55IG1vZGlmaWNhdGlvbnMgdG8gdGhlIG9yaWdpbmFsIHNvdXJjZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZy10aGUtZXJyb3ItcmVwb3J0aW5nLXRvb2wnPgorICAgICAgICA8dGl0bGU+VXNpbmcgdGhlIEVycm9yIFJlcG9ydGluZyBUb29sPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBlcnJvciByZXBvcnRpbmcgdG9vbCBhbGxvd3MgeW91IHRvCisgICAgICAgICAgICBzdWJtaXQgZXJyb3JzIGVuY291bnRlcmVkIGR1cmluZyBidWlsZHMgdG8gYSBjZW50cmFsIGRhdGFiYXNlLgorICAgICAgICAgICAgT3V0c2lkZSBvZiB0aGUgYnVpbGQgZW52aXJvbm1lbnQsIHlvdSBjYW4gdXNlIGEgd2ViIGludGVyZmFjZSB0bworICAgICAgICAgICAgYnJvd3NlIGVycm9ycywgdmlldyBzdGF0aXN0aWNzLCBhbmQgcXVlcnkgZm9yIGVycm9ycy4KKyAgICAgICAgICAgIFRoZSB0b29sIHdvcmtzIHVzaW5nIGEgY2xpZW50LXNlcnZlciBzeXN0ZW0gd2hlcmUgdGhlIGNsaWVudAorICAgICAgICAgICAgcG9ydGlvbiBpcyBpbnRlZ3JhdGVkIHdpdGggdGhlIGluc3RhbGxlZCBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICBUaGUgc2VydmVyIHJlY2VpdmVzIHRoZSBpbmZvcm1hdGlvbiBjb2xsZWN0ZWQgYW5kIHNhdmVzIGl0IGluIGEKKyAgICAgICAgICAgIGRhdGFiYXNlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIGxpdmUgaW5zdGFuY2Ugb2YgdGhlIGVycm9yIHJlcG9ydGluZyBzZXJ2ZXIgZXhpc3RzIGF0CisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZXJyb3JzLnlvY3RvcHJvamVjdC5vcmcnPjwvdWxpbms+LgorICAgICAgICAgICAgVGhpcyBzZXJ2ZXIgZXhpc3RzIHNvIHRoYXQgd2hlbiB5b3Ugd2FudCB0byBnZXQgaGVscCB3aXRoCisgICAgICAgICAgICBidWlsZCBmYWlsdXJlcywgeW91IGNhbiBzdWJtaXQgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBvbiB0aGUKKyAgICAgICAgICAgIGZhaWx1cmUgZWFzaWx5IGFuZCB0aGVuIHBvaW50IHRvIHRoZSBVUkwgaW4geW91ciBidWcgcmVwb3J0CisgICAgICAgICAgICBvciBzZW5kIGFuIGVtYWlsIHRvIHRoZSBtYWlsaW5nIGxpc3QuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugc2VuZCBlcnJvciByZXBvcnRzIHRvIHRoaXMgc2VydmVyLCB0aGUgcmVwb3J0cyBiZWNvbWUKKyAgICAgICAgICAgICAgICBwdWJsaWNseSB2aXNpYmxlLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2VuYWJsaW5nLWFuZC11c2luZy10aGUtdG9vbCc+CisgICAgICAgICAgICA8dGl0bGU+RW5hYmxpbmcgYW5kIFVzaW5nIHRoZSBUb29sPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIGVycm9yIHJlcG9ydGluZyB0b29sIGlzIGRpc2FibGVkLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZW5hYmxlIGl0IGJ5IGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtcmVwb3J0LWVycm9yJz48ZmlsZW5hbWU+cmVwb3J0LWVycm9yPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGNsYXNzIGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nIHN0YXRlbWVudCB0byB0aGUgZW5kIG9mCisgICAgICAgICAgICAgICAgeW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4geW91cgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSEVSSVQgKz0gInJlcG9ydC1lcnJvciIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBlcnJvciByZXBvcnRpbmcgZmVhdHVyZSBzdG9yZXMgaW5mb3JtYXRpb24gaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MT0dfRElSJz48ZmlsZW5hbWU+TE9HX0RJUjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fS9lcnJvci1yZXBvcnQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgY2FuIHNwZWNpZnkgYSBkaXJlY3RvcnkgdG8gdXNlIGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgdG8geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBFUlJfUkVQT1JUX0RJUiA9ICJwYXRoIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBFbmFibGluZyBlcnJvciByZXBvcnRpbmcgY2F1c2VzIHRoZSBidWlsZCBwcm9jZXNzIHRvIGNvbGxlY3QKKyAgICAgICAgICAgICAgICB0aGUgZXJyb3JzIGFuZCBzdG9yZSB0aGVtIGluIGEgZmlsZSBhcyBwcmV2aW91c2x5IGRlc2NyaWJlZC4KKyAgICAgICAgICAgICAgICBXaGVuIHRoZSBidWlsZCBzeXN0ZW0gZW5jb3VudGVycyBhbiBlcnJvciwgaXQgaW5jbHVkZXMgYQorICAgICAgICAgICAgICAgIGNvbW1hbmQgYXMgcGFydCBvZiB0aGUgY29uc29sZSBvdXRwdXQuCisgICAgICAgICAgICAgICAgWW91IGNhbiBydW4gdGhlIGNvbW1hbmQgdG8gc2VuZCB0aGUgZXJyb3IgZmlsZSB0byB0aGUgc2VydmVyLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgc2VuZHMgdGhlIGVycm9ycyB0byBhbgorICAgICAgICAgICAgICAgIHVwc3RyZWFtIHNlcnZlcjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc2VuZC1lcnJvci1yZXBvcnQgL2hvbWUvYnJhbmR1c2EvcHJvamVjdC9wb2t5L2J1aWxkL3RtcC9sb2cvZXJyb3ItcmVwb3J0L2Vycm9yX3JlcG9ydF8yMDE0MDMxNDE2MTcudHh0CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIHRoZSBwcmV2aW91cyBleGFtcGxlLCB0aGUgZXJyb3JzIGFyZSBzZW50IHRvIGEgcHVibGljCisgICAgICAgICAgICAgICAgZGF0YWJhc2UgYXZhaWxhYmxlIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2Vycm9ycy55b2N0b3Byb2plY3Qub3JnJz48L3VsaW5rPiwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICB1c2VkIGJ5IHRoZSBlbnRpcmUgY29tbXVuaXR5LgorICAgICAgICAgICAgICAgIElmIHlvdSBzcGVjaWZ5IGEgcGFydGljdWxhciBzZXJ2ZXIsIHlvdSBjYW4gc2VuZCB0aGUgZXJyb3JzCisgICAgICAgICAgICAgICAgdG8gYSBkaWZmZXJlbnQgZGF0YWJhc2UuCisgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICBvcHRpb25zOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzZW5kLWVycm9yLXJlcG9ydCAtLWhlbHAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4gc2VuZGluZyB0aGUgZXJyb3IgZmlsZSwgeW91IGFyZSBwcm9tcHRlZCB0byByZXZpZXcgdGhlCisgICAgICAgICAgICAgICAgZGF0YSBiZWluZyBzZW50IGFzIHdlbGwgYXMgdG8gcHJvdmlkZSBhIG5hbWUgYW5kIG9wdGlvbmFsCisgICAgICAgICAgICAgICAgZW1haWwgYWRkcmVzcy4KKyAgICAgICAgICAgICAgICBPbmNlIHlvdSBzYXRpc2Z5IHRoZXNlIHByb21wdHMsIHRoZSBjb21tYW5kIHJldHVybnMgYSBsaW5rCisgICAgICAgICAgICAgICAgZnJvbSB0aGUgc2VydmVyIHRoYXQgY29ycmVzcG9uZHMgdG8geW91ciBlbnRyeSBpbiB0aGUgZGF0YWJhc2UuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGhlcmUgaXMgYSB0eXBpY2FsIGxpbms6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBodHRwOi8vZXJyb3JzLnlvY3RvcHJvamVjdC5vcmcvRXJyb3JzL0RldGFpbHMvOTUyMi8KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgRm9sbG93aW5nIHRoZSBsaW5rIHRha2VzIHlvdSB0byBhIHdlYiBpbnRlcmZhY2Ugd2hlcmUgeW91IGNhbgorICAgICAgICAgICAgICAgIGJyb3dzZSwgcXVlcnkgdGhlIGVycm9ycywgYW5kIHZpZXcgc3RhdGlzdGljcy4KKyAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZGlzYWJsaW5nLXRoZS10b29sJz4KKyAgICAgICAgICAgIDx0aXRsZT5EaXNhYmxpbmcgdGhlIFRvb2w8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBkaXNhYmxlIHRoZSBlcnJvciByZXBvcnRpbmcgZmVhdHVyZSwgc2ltcGx5IHJlbW92ZSBvciBjb21tZW50CisgICAgICAgICAgICAgICAgb3V0IHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50IGZyb20gdGhlIGVuZCBvZiB5b3VyCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhFUklUICs9ICJyZXBvcnQtZXJyb3IiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NldHRpbmctdXAteW91ci1vd24tZXJyb3ItcmVwb3J0aW5nLXNlcnZlcic+CisgICAgICAgICAgICA8dGl0bGU+U2V0dGluZyBVcCBZb3VyIE93biBFcnJvciBSZXBvcnRpbmcgU2VydmVyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gc2V0IHVwIHlvdXIgb3duIGVycm9yIHJlcG9ydGluZyBzZXJ2ZXIsIHlvdQorICAgICAgICAgICAgICAgIGNhbiBvYnRhaW4gdGhlIGNvZGUgZnJvbSB0aGUgR2l0IHJlcG9zaXRvcnkgYXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9lcnJvci1yZXBvcnQtd2ViLyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzZXQgaXQgdXAgYXJlIGluIHRoZSBSRUFETUUgZG9jdW1lbnQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorCis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtY3VzdG9taXphdGlvbi54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyM2VhM2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsMjcgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIgdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL2RvY2Jvb2stbWlycm9yL2RvY2Jvb2steHNsLTEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworPCEtLQorCisgIDx4c2w6aW1wb3J0IGhyZWY9Ii4uL3RlbXBsYXRlLzEuNzYuMS9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL3Blcm1hbGlua3MueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9zZWN0aW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvY29tcG9uZW50LnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZGl2aXNpb24udGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9mb3JtYWwub2JqZWN0LmhlYWRpbmcueHNsIi8+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJodG1sLnN0eWxlc2hlZXQiIHNlbGVjdD0iJ2Rldi1zdHlsZS5jc3MnIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNoYXB0ZXIuYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYXBwZW5kaXguYXV0b2xhYmVsIiBzZWxlY3Q9IkEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmxhYmVsLmluY2x1ZGVzLmNvbXBvbmVudC5sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmlkLmF0dHJpYnV0ZXMiIHNlbGVjdD0iMSIgLz4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDdiNWZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0CisJeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisJeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIKKwl2ZXJzaW9uPSIxLjAiPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3IvZG9jYm9vay1taXJyb3IvZG9jYm9vay14c2wtMS43Ni4xL2VjbGlwc2UvZWNsaXBzZTMueHNsIiAvPgorCis8IS0tCisKKyAgPHhzbDppbXBvcnQgaHJlZj0iLi4vdGVtcGxhdGUvMS43Ni4xL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworICA8eHNsOmltcG9ydAorCSAgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVua2VyLm91dHB1dC5pbmRlbnQiIHNlbGVjdD0iJ3llcyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5xdWlldGx5IiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5maXJzdC5zZWN0aW9ucyIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsuc2VjdGlvbi5kZXB0aCIgc2VsZWN0PSIxMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InVzZS5pZC5hcy5maWxlbmFtZSIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0idWxpbmsudGFyZ2V0IiBzZWxlY3Q9Iidfc2VsZiciIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYmFzZS5kaXIiIHNlbGVjdD0iJ2h0bWwvZGV2LW1hbnVhbC8nIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9IicuLi9ib29rLmNzcyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJlY2xpcHNlLm1hbmlmZXN0IiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjcmVhdGUucGx1Z2luLnhtbCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic3VwcHJlc3MubmF2aWdhdGlvbiIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUuaW5kZXgiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNoYXB0ZXIuYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYXBwZW5kaXguYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmxhYmVsLmluY2x1ZGVzLmNvbXBvbmVudC5sYWJlbCIgc2VsZWN0PSIxIiAvPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtaW50cm8ueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1pbnRyby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM1MDg4MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtaW50cm8ueG1sCkBAIC0wLDAgKzEsMjQ2IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0nZGV2LW1hbnVhbC1pbnRybyc+CisKKzx0aXRsZT5UaGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWw8L3RpdGxlPgorICAgIDxzZWN0aW9uIGlkPSdkZXYtaW50cm8nPgorICAgICAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdlbGNvbWUgdG8gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIQorICAgICAgICAgICAgVGhpcyBtYW51YWwgcHJvdmlkZXMgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGUgWW9jdG8gUHJvamVjdCB0bworICAgICAgICAgICAgZGV2ZWxvcCBlbWJlZGRlZCBMaW51eCBpbWFnZXMgYW5kIHVzZXItc3BhY2UgYXBwbGljYXRpb25zIHRoYXQKKyAgICAgICAgICAgIHJ1biBvbiB0YXJnZXRlZCBkZXZpY2VzLgorICAgICAgICAgICAgVGhlIG1hbnVhbCBwcm92aWRlcyBhbiBvdmVydmlldyBvZiBpbWFnZSwga2VybmVsLCBhbmQKKyAgICAgICAgICAgIHVzZXItc3BhY2UgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICBCZWNhdXNlIG11Y2ggb2YgdGhlIGluZm9ybWF0aW9uIGluIHRoaXMgbWFudWFsIGlzIGdlbmVyYWwsIGl0CisgICAgICAgICAgICBjb250YWlucyBtYW55IHJlZmVyZW5jZXMgdG8gb3RoZXIgc291cmNlcyB3aGVyZSB5b3UgY2FuIGZpbmQgbW9yZQorICAgICAgICAgICAgZGV0YWlsLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gZmluZCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiBHaXQsIHJlcG9zaXRvcmllcywKKyAgICAgICAgICAgIGFuZCBvcGVuIHNvdXJjZSBpbiBnZW5lcmFsIGluIG1hbnkgcGxhY2VzIG9uIHRoZSBJbnRlcm5ldC4KKyAgICAgICAgICAgIEFub3RoZXIgZXhhbXBsZSBzcGVjaWZpYyB0byB0aGUgWW9jdG8gUHJvamVjdCBpcyBob3cgdG8gcXVpY2tseQorICAgICAgICAgICAgc2V0IHVwIHlvdXIgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0gYW5kIGJ1aWxkIGFuIGltYWdlLCB3aGljaCB5b3UKKyAgICAgICAgICAgIGZpbmQgaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7Jz5Zb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0PC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBkb2VzLCBob3dldmVyLCBwcm92aWRlCisgICAgICAgICAgICBndWlkYW5jZSBhbmQgZXhhbXBsZXMgb24gaG93IHRvIGNoYW5nZSB0aGUga2VybmVsIHNvdXJjZSBjb2RlLAorICAgICAgICAgICAgcmVjb25maWd1cmUgdGhlIGtlcm5lbCwgYW5kIGRldmVsb3AgYW4gYXBwbGljYXRpb24gdXNpbmcgdGhlCisgICAgICAgICAgICBwb3B1bGFyIDx0cmFkZW1hcmsgY2xhc3M9J3RyYWRlJz5FY2xpcHNlPC90cmFkZW1hcms+IElERS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QgY3JlYXRlcyBhIFBva3kgZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgSG93ZXZlciwgeW91IGNhbiBjcmVhdGUgeW91ciBvd24gZGlzdHJpYnV0aW9uIGJ5IHByb3ZpZGluZyBrZXkKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J21ldGFkYXRhJz5NZXRhZGF0YTwvbGluaz4uCisgICAgICAgICAgICBBIGdvb2QgZXhhbXBsZSBpcyBBbmdzdHJvbSwgd2hpY2ggaGFzIGhhZCBhIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgYmFzZWQgb24gdGhlIFlvY3RvIFByb2plY3Qgc2luY2UgaXRzIGluY2VwdGlvbi4KKyAgICAgICAgICAgIE90aGVyIGV4YW1wbGVzIGluY2x1ZGUgY29tbWVyY2lhbCBkaXN0cmlidXRpb25zIGxpa2UKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvb3JnYW5pemF0aW9uL3dpbmQtcml2ZXItc3lzdGVtcyc+V2luZCBSaXZlciBMaW51eDwvdWxpbms+LAorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9vcmdhbml6YXRpb24vbWVudG9yLWdyYXBoaWNzJz5NZW50b3IgRW1iZWRkZWQgTGludXg8L3VsaW5rPiwKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvb3JnYW5pemF0aW9uL2VuZWEtYWInPkVORUEgTGludXg8L3VsaW5rPgorICAgICAgICAgICAgYW5kIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZWNvc3lzdGVtL21lbWJlci1vcmdhbml6YXRpb25zJz5vdGhlcnM8L3VsaW5rPi4KKyAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLXlvdXItb3duLWRpc3RyaWJ1dGlvbic+Q3JlYXRpbmcgWW91ciBPd24gRGlzdHJpYnV0aW9uPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nd2hhdC10aGlzLW1hbnVhbC1wcm92aWRlcyc+CisgICAgICAgIDx0aXRsZT5XaGF0IFRoaXMgTWFudWFsIFByb3ZpZGVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBkZXNjcmliZXMgd2hhdCB5b3UgY2FuIGdldCBmcm9tIHRoaXMgbWFudWFsOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW5mb3JtYXRpb24gdGhhdCBsZXRzIHlvdSBnZXQgc2V0CisgICAgICAgICAgICAgICAgICAgIHVwIHRvIGRldmVsb3AgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluZm9ybWF0aW9uIHRvIGhlbHAgZGV2ZWxvcGVycyB3aG8gYXJlIG5ldyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgb3BlbiBzb3VyY2UgZW52aXJvbm1lbnQgYW5kIHRvIHRoZSBkaXN0cmlidXRlZCByZXZpc2lvbgorICAgICAgICAgICAgICAgICAgICBjb250cm9sIHN5c3RlbSBHaXQsIHdoaWNoIHRoZSBZb2N0byBQcm9qZWN0IHVzZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BbiB1bmRlcnN0YW5kaW5nIG9mIGNvbW1vbiBlbmQtdG8tZW5kCisgICAgICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IG1vZGVscyBhbmQgdGFza3MuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluZm9ybWF0aW9uIGFib3V0IGNvbW1vbiBkZXZlbG9wbWVudCB0YXNrcworICAgICAgICAgICAgICAgICAgICBnZW5lcmFsbHkgdXNlZCBkdXJpbmcgaW1hZ2UgZGV2ZWxvcG1lbnQgZm9yCisgICAgICAgICAgICAgICAgICAgIGVtYmVkZGVkIGRldmljZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICBpbnRlZ3JhdGlvbiBvZiB0aGUgUXVpY2tFTVVsYXRvciAoUUVNVSksIHdoaWNoIGxldHMgeW91CisgICAgICAgICAgICAgICAgICAgIHNpbXVsYXRlIHJ1bm5pbmcgb24gaGFyZHdhcmUgYW4gaW1hZ2UgeW91IGhhdmUgYnVpbHQgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYW55IHJlZmVyZW5jZXMgdG8gb3RoZXIgc291cmNlcyBvZiByZWxhdGVkCisgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nd2hhdC10aGlzLW1hbnVhbC1kb2VzLW5vdC1wcm92aWRlJz4KKyAgICAgICAgPHRpdGxlPldoYXQgdGhpcyBNYW51YWwgRG9lcyBOb3QgUHJvdmlkZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIG1hbnVhbCB3aWxsIG5vdCBnaXZlIHlvdSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN0ZXAtYnktc3RlcCBpbnN0cnVjdGlvbnMgd2hlbiB0aG9zZSBpbnN0cnVjdGlvbnMgZXhpc3QgaW4gb3RoZXIgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgUHJvamVjdCBkb2N1bWVudGF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZSBjb250YWlucyBkZXRhaWxlZAorICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHJ1biB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjaW5zdGFsbGluZy10aGUtYWR0Jz5BRFQgSW5zdGFsbGVyPC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIHVzZWQgdG8gc2V0IHVwIGEgY3Jvc3MtZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SZWZlcmVuY2UgbWF0ZXJpYWw6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB0eXBlIG9mIG1hdGVyaWFsIHJlc2lkZXMgaW4gYW4gYXBwcm9wcmlhdGUgcmVmZXJlbmNlIG1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN5c3RlbSB2YXJpYWJsZXMgYXJlIGRvY3VtZW50ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7Jz5Zb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWw8L3VsaW5rPi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRldGFpbGVkIHB1YmxpYyBpbmZvcm1hdGlvbiB0aGF0IGlzIG5vdCBzcGVjaWZpYyB0byB0aGUgWW9jdG8gUHJvamVjdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZXhoYXVzdGl2ZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIEdpdCBpcyBjb3ZlcmVkIGJldHRlciB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICBJbnRlcm5ldCB0aGFuIGluIHRoaXMgbWFudWFsLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nb3RoZXItaW5mb3JtYXRpb24nPgorICAgICAgICA8dGl0bGU+T3RoZXIgSW5mb3JtYXRpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmVjYXVzZSB0aGlzIG1hbnVhbCBwcmVzZW50cyBvdmVydmlldyBpbmZvcm1hdGlvbiBmb3IgbWFueSBkaWZmZXJlbnQKKyAgICAgICAgICAgIHRvcGljcywgc3VwcGxlbWVudGFsIGluZm9ybWF0aW9uIGlzIHJlY29tbWVuZGVkIGZvciBmdWxsCisgICAgICAgICAgICBjb21wcmVoZW5zaW9uLgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHByZXNlbnRzIG90aGVyIHNvdXJjZXMgb2YgaW5mb3JtYXRpb24geW91IG1pZ2h0IGZpbmQgaGVscGZ1bDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7Jz5Zb2N0byBQcm9qZWN0IFdlYnNpdGU8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgPC9lbXBoYXNpcz4gVGhlIGhvbWUgcGFnZSBmb3IgdGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgbG90cyBvZiBpbmZvcm1hdGlvbiBvbiB0aGUgcHJvamVjdAorICAgICAgICAgICAgICAgICAgICBhcyB3ZWxsIGFzIGxpbmtzIHRvIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7Jz5Zb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0PC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBzaG9ydCBkb2N1bWVudCBsZXRzIHlvdSBnZXQgc3RhcnRlZAorICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IGFuZCBxdWlja2x5IGJlZ2luIGJ1aWxkaW5nIGFuIGltYWdlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyc+WW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsPC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBtYW51YWwgaXMgYSByZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgZ3VpZGUgdG8gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0sIHdoaWNoIGlzIGJhc2VkIG9uIEJpdEJha2UuCisgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gaXMgc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzICJQb2t5Ii4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsnPllvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGd1aWRlIHByb3ZpZGVzIGluZm9ybWF0aW9uIHRoYXQgbGV0cyB5b3UgZ2V0IGdvaW5nIHdpdGggdGhlIEFwcGxpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgIERldmVsb3BtZW50IFRvb2xraXQgKEFEVCkgYW5kIHN0YW5kLWFsb25lIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMgdG8KKyAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcCBwcm9qZWN0cyB1c2luZyB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsnPllvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIERldmVsb3BlcidzIEd1aWRlPC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBndWlkZSBkZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgZm9yIEJTUCBjb21wb25lbnRzLgorICAgICAgICAgICAgICAgICAgICBIYXZpbmcgYSBjb21tb25seSB1bmRlcnN0b29kIHN0cnVjdHVyZSBlbmNvdXJhZ2VzIHN0YW5kYXJkaXphdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7Jz5Zb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWw8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIG1hbnVhbCBkZXNjcmliZXMgaG93IHRvIHdvcmsgd2l0aCBMaW51eCBZb2N0byBrZXJuZWxzIGFzIHdlbGwgYXMgcHJvdmlkZXMgYSBiaXQKKyAgICAgICAgICAgICAgICAgICAgb2YgY29uY2VwdHVhbCBpbmZvcm1hdGlvbiBvbiB0aGUgY29uc3RydWN0aW9uIG9mIHRoZSBZb2N0byBMaW51eCBrZXJuZWwgdHJlZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUFJPRl9VUkw7Jz5Zb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZyBNYW51YWw8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIG1hbnVhbCBwcmVzZW50cyBhIHNldCBvZiBjb21tb24gYW5kIGdlbmVyYWxseSB1c2VmdWwgdHJhY2luZyBhbmQKKyAgICAgICAgICAgICAgICAgICAgcHJvZmlsaW5nIHNjaGVtZXMgYWxvbmcgd2l0aCB0aGVpciBhcHBsaWNhdGlvbnMgKGFzIGFwcHJvcHJpYXRlKSB0byBlYWNoIHRvb2wuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1RPQVNUX1VSTDsnPlRvYXN0ZXIgVXNlciBNYW51YWw8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIG1hbnVhbCBpbnRyb2R1Y2VzIGFuZCBkZXNjcmliZXMgaG93IHRvIHNldCB1cCBhbmQgdXNlCisgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIsIHdoaWNoIGlzIGEgd2ViIGludGVyZmFjZSB0byB0aGUgWW9jdG8gUHJvamVjdCdzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLXN5c3RlbS10ZXJtJz5PcGVuRW1iZWRkZWQgQnVpbGQgU3lzdGVtPC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PTNabE91LWdMc2gwJz4KKyAgICAgICAgICAgICAgICAgICAgRWNsaXBzZSBJREUgWW9jdG8gUGx1Zy1pbjwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEEgc3RlcC1ieS1zdGVwIGluc3RydWN0aW9uYWwgdmlkZW8gdGhhdAorICAgICAgICAgICAgICAgICAgICBkZW1vbnN0cmF0ZXMgaG93IGFuIGFwcGxpY2F0aW9uIGRldmVsb3BlciB1c2VzIFlvY3RvIFBsdWctaW4gZmVhdHVyZXMgd2l0aGluCisgICAgICAgICAgICAgICAgICAgIHRoZSBFY2xpcHNlIElERS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1dJS0lfVVJMOy93aWtpL0ZBUSc+RkFRPC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIGNvbW1vbmx5IGFza2VkIHF1ZXN0aW9ucyBhbmQgdGhlaXIgYW5zd2Vycy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1JFTEVBU0VfTk9URVM7Jz5SZWxlYXNlIE5vdGVzPC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRmVhdHVyZXMsIHVwZGF0ZXMgYW5kIGtub3duIGlzc3VlcyBmb3IgdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSBvZiB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy90b29scy1yZXNvdXJjZXMvcHJvamVjdHMvaG9iJz5Ib2I8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBBIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgQml0QmFrZS4KKyAgICAgICAgICAgICAgICAgICAgSG9iJ3MgcHJpbWFyeSBnb2FsIGlzIHRvIGVuYWJsZSBhIHVzZXIgdG8gcGVyZm9ybSBjb21tb24gdGFza3MgbW9yZSBlYXNpbHkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL3RvYXN0ZXInPlRvYXN0ZXI8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBBbiBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UgKEFQSSkgYW5kIHdlYi1iYXNlZAorICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgdG8gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0sIHdoaWNoIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSwgdGhhdCByZXBvcnRzIGJ1aWxkIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L3Rvb2xzLXJlc291cmNlcy9wcm9qZWN0cy9idWlsZC1hcHBsaWFuY2UnPkJ1aWxkIEFwcGxpYW5jZTwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEEgdmlydHVhbCBtYWNoaW5lIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgZW5hYmxlcyB5b3UgdG8gYnVpbGQgYW5kIGJvb3QgYSBjdXN0b20gZW1iZWRkZWQgTGludXggaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCB1c2luZyBhIG5vbi1MaW51eCBkZXZlbG9wbWVudCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19CVUdaSUxMQV9VUkw7Jz5CdWd6aWxsYTwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSBidWcgdHJhY2tpbmcgYXBwbGljYXRpb24gdGhlIFlvY3RvIFByb2plY3QgdXNlcy4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGZpbmQgcHJvYmxlbXMgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCwgeW91IHNob3VsZCByZXBvcnQgdGhlbSB1c2luZyB0aGlzCisgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPllvY3RvIFByb2plY3QgTWFpbGluZyBMaXN0czo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUbyBzdWJzY3JpYmUgdG8gdGhlIFlvY3RvIFByb2plY3QgbWFpbGluZworICAgICAgICAgICAgICAgICAgICBsaXN0cywgY2xpY2sgb24gdGhlIGZvbGxvd2luZyBVUkxzIGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fTElTVFNfVVJMOy9saXN0aW5mby95b2N0byc+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYSBZb2N0byBQcm9qZWN0IERpc2N1c3Npb25zIG1haWxpbmcgbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fTElTVFNfVVJMOy9saXN0aW5mby9wb2t5Jz48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhIFlvY3RvIFByb2plY3QgRGlzY3Vzc2lvbnMgbWFpbGluZyBsaXN0IGFib3V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gKFBva3kpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19MSVNUU19VUkw7L2xpc3RpbmZvL3lvY3RvLWFubm91bmNlJz48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhIG1haWxpbmcgbGlzdCB0byByZWNlaXZlIG9mZmljaWFsIFlvY3RvIFByb2plY3QgYW5ub3VuY2VtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHdlbGwgYXMgWW9jdG8gUHJvamVjdCBtaWxlc3RvbmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19MSVNUU19VUkw7L2xpc3RpbmZvJz48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhIGxpc3Rpbmcgb2YgYWxsIHB1YmxpYyBtYWlsaW5nIGxpc3RzIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpc3RzLnlvY3RvcHJvamVjdC5vcmc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbnRlcm5ldCBSZWxheSBDaGF0IChJUkMpOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFR3byBJUkMgY2hhbm5lbHMgb24gZnJlZW5vZGUgYXJlIGF2YWlsYWJsZQorICAgICAgICAgICAgICAgICAgICBmb3IgWW9jdG8gUHJvamVjdCBhbmQgUG9reSBkaXNjdXNzaW9uczogPGZpbGVuYW1lPiN5b2N0bzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+I3Bva3k8L2ZpbGVuYW1lPiwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmT0VfSE9NRV9VUkw7Jz5PcGVuRW1iZWRkZWQ8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIHVzZWQgYnkgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgcHJvamVjdCBpcyB0aGUgdXBzdHJlYW0sIGdlbmVyaWMsIGVtYmVkZGVkIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgICAgICAgICBmcm9tIHdoaWNoIHRoZSBZb2N0byBQcm9qZWN0IGRlcml2ZXMgaXRzIGJ1aWxkIHN5c3RlbSAoUG9reSkKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRvIHdoaWNoIGl0IGNvbnRyaWJ1dGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3Lm9wZW5lbWJlZGRlZC5vcmcvd2lraS9CaXRCYWtlJz5CaXRCYWtlPC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHRvb2wgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICB0byBwcm9jZXNzIHByb2plY3QgbWV0YWRhdGEuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsnPkJpdEJha2UgVXNlciBNYW51YWw6PC91bGluaz48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBBIGNvbXByZWhlbnNpdmUgZ3VpZGUgdG8gdGhlIEJpdEJha2UgdG9vbC4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgaW5mb3JtYXRpb24gb24gQml0QmFrZSwgc2VlIHRoaXMgbWFudWFsLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd2lraS5xZW11Lm9yZy9JbmRleC5odG1sJz5RdWljayBFTVVsYXRvciAoUUVNVSk8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBBbiBvcGVuLXNvdXJjZSBtYWNoaW5lIGVtdWxhdG9yIGFuZCB2aXJ0dWFsaXplci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1tb2RlbC54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLW1vZGVsLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTBkZWQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1tb2RlbC54bWwKQEAgLTAsMCArMSwyNjI0IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0nZGV2LW1hbnVhbC1tb2RlbCc+CisKKzx0aXRsZT5Db21tb24gRGV2ZWxvcG1lbnQgTW9kZWxzPC90aXRsZT4KKworPHBhcmE+CisgICAgTWFueSBkZXZlbG9wbWVudCBtb2RlbHMgZXhpc3QgZm9yIHdoaWNoIHlvdSBjYW4gdXNlIHRoZSBZb2N0byBQcm9qZWN0LgorICAgIFRoaXMgY2hhcHRlciBvdmVydmlld3Mgc2ltcGxlIG1ldGhvZHMgdGhhdCB1c2UgdG9vbHMgcHJvdmlkZWQgYnkgdGhlCisgICAgWW9jdG8gUHJvamVjdDoKKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN5c3RlbSBEZXZlbG9wbWVudDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgIFN5c3RlbSBEZXZlbG9wbWVudCBjb3ZlcnMgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIGRldmVsb3BtZW50CisgICAgICAgICAgICAgYW5kIGtlcm5lbCBtb2RpZmljYXRpb24gb3IgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSBvbiBob3cgdG8gY3JlYXRlIGEgQlNQLCBzZWUgdGhlCisgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2NyZWF0aW5nLWEtbmV3LWJzcC1sYXllci11c2luZy10aGUteW9jdG8tYnNwLXNjcmlwdCc+Q3JlYXRpbmcgYSBOZXcgQlNQIExheWVyIFVzaW5nIHRoZSB5b2N0by1ic3AgU2NyaXB0PC91bGluaz4iCisgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkKKyAgICAgICAgICAgICBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgICAgICBGb3IgbW9yZSBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gd29yayB3aXRoIHRoZSBrZXJuZWwsCisgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyc+WW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQgTWFudWFsPC91bGluaz4uCisgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVzZXIgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICBVc2VyIEFwcGxpY2F0aW9uIERldmVsb3BtZW50IGNvdmVycyBkZXZlbG9wbWVudCBvZiBhcHBsaWNhdGlvbnMKKyAgICAgICAgICAgICB0aGF0IHlvdSBpbnRlbmQgdG8gcnVuIG9uIHRhcmdldCBoYXJkd2FyZS4KKyAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHNldCB1cCB5b3VyIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtIGZvcgorICAgICAgICAgICAgIHVzZXItc3BhY2UgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQsIHNlZSB0aGUKKyAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyc+WW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+LgorICAgICAgICAgICAgIEZvciBhIHNpbXBsZSBleGFtcGxlIG9mIHVzZXItc3BhY2UgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgdXNpbmcKKyAgICAgICAgICAgICB0aGUgPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz4gSURFLCBzZWUgdGhlCisgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2FwcGxpY2F0aW9uLWRldmVsb3BtZW50LXdvcmtmbG93Jz5BcHBsaWNhdGlvbgorICAgICAgICAgICAgIERldmVsb3BtZW50IFdvcmtmbG93PC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VGVtcG9yYXJ5IFNvdXJjZSBDb2RlIE1vZGlmaWNhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgIERpcmVjdCBtb2RpZmljYXRpb24gb2YgdGVtcG9yYXJ5IHNvdXJjZSBjb2RlIGlzIGEgY29udmVuaWVudAorICAgICAgICAgICAgIGRldmVsb3BtZW50IG1vZGVsIHRvIHF1aWNrbHkgaXRlcmF0ZSBhbmQgZGV2ZWxvcCB0b3dhcmRzIGEKKyAgICAgICAgICAgICBzb2x1dGlvbi4KKyAgICAgICAgICAgICBPbmNlIHlvdSBpbXBsZW1lbnQgdGhlIHNvbHV0aW9uLCB5b3Ugc2hvdWxkIG9mIGNvdXJzZSB0YWtlCisgICAgICAgICAgICAgc3RlcHMgdG8gZ2V0IHRoZSBjaGFuZ2VzIHVwc3RyZWFtIGFuZCBhcHBsaWVkIGluIHRoZSBhZmZlY3RlZAorICAgICAgICAgICAgIHJlY2lwZXMuCisgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkltYWdlIERldmVsb3BtZW50IHVzaW5nIFRvYXN0ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICBZb3UgY2FuIHVzZSA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L1Rvb2xzLXJlc291cmNlcy9wcm9qZWN0cy90b2FzdGVyJz5Ub2FzdGVyPC91bGluaz4KKyAgICAgICAgICAgICB0byBidWlsZCBjdXN0b20gb3BlcmF0aW5nIHN5c3RlbSBpbWFnZXMgd2l0aGluIHRoZSBidWlsZAorICAgICAgICAgICAgIGVudmlyb25tZW50LgorICAgICAgICAgICAgIFRvYXN0ZXIgcHJvdmlkZXMgYW4gZWZmaWNpZW50IGludGVyZmFjZSB0byB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgdGhhdCBhbGxvd3MgeW91IHRvIHN0YXJ0IGJ1aWxkcyBhbmQgZXhhbWluZSBidWlsZCBzdGF0aXN0aWNzLgorICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbWFnZSBEZXZlbG9wbWVudCB1c2luZyBIb2I6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy90b29scy1yZXNvdXJjZXMvcHJvamVjdHMvaG9iJz5Ib2I8L3VsaW5rPgorICAgICAgICAgICAgIHRvIGJ1aWxkIGN1c3RvbSBvcGVyYXRpbmcgc3lzdGVtIGltYWdlcyB3aXRoaW4gdGhlIGJ1aWxkCisgICAgICAgICAgICAgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgSG9iIHByb3ZpZGVzIGFuIGVmZmljaWVudCBpbnRlcmZhY2UgdG8gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVzaW5nIGEgRGV2ZWxvcG1lbnQgU2hlbGw6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICBZb3UgY2FuIHVzZSBhIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+IHRvIGVmZmljaWVudGx5IGRlYnVnCisgICAgICAgICAgICAgY29tbWFuZHMgb3Igc2ltcGx5IGVkaXQgcGFja2FnZXMuCisgICAgICAgICAgICAgV29ya2luZyBpbnNpZGUgYSBkZXZlbG9wbWVudCBzaGVsbCBpcyBhIHF1aWNrIHdheSB0byBzZXQgdXAgdGhlCisgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIGVudmlyb25tZW50IHRvIHdvcmsgb24gcGFydHMgb2YgYSBwcm9qZWN0LgorICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICA8L2l0ZW1pemVkbGlzdD4KKzwvcGFyYT4KKworPHNlY3Rpb24gaWQ9J3N5c3RlbS1kZXZlbG9wbWVudC1tb2RlbCc+CisgICAgPHRpdGxlPlN5c3RlbSBEZXZlbG9wbWVudCBXb3JrZmxvdzwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgU3lzdGVtIGRldmVsb3BtZW50IGludm9sdmVzIG1vZGlmaWNhdGlvbiBvciBjcmVhdGlvbiBvZiBhbiBpbWFnZSB0aGF0IHlvdSB3YW50IHRvIHJ1biBvbgorICAgICAgICBhIHNwZWNpZmljIGhhcmR3YXJlIHRhcmdldC4KKyAgICAgICAgVXN1YWxseSwgd2hlbiB5b3Ugd2FudCB0byBjcmVhdGUgYW4gaW1hZ2UgdGhhdCBydW5zIG9uIGVtYmVkZGVkIGhhcmR3YXJlLCB0aGUgaW1hZ2UgZG9lcworICAgICAgICBub3QgcmVxdWlyZSB0aGUgc2FtZSBudW1iZXIgb2YgZmVhdHVyZXMgdGhhdCBhIGZ1bGwtZmxlZGdlZCBMaW51eCBkaXN0cmlidXRpb24gcHJvdmlkZXMuCisgICAgICAgIFRodXMsIHlvdSBjYW4gY3JlYXRlIGEgbXVjaCBzbWFsbGVyIGltYWdlIHRoYXQgaXMgZGVzaWduZWQgdG8gdXNlIG9ubHkgdGhlCisgICAgICAgIGZlYXR1cmVzIGZvciB5b3VyIHBhcnRpY3VsYXIgaGFyZHdhcmUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRvIGhlbHAgeW91IHVuZGVyc3RhbmQgaG93IHN5c3RlbSBkZXZlbG9wbWVudCB3b3JrcyBpbiB0aGUgWW9jdG8gUHJvamVjdCwgdGhpcyBzZWN0aW9uCisgICAgICAgIGNvdmVycyB0d28gdHlwZXMgb2YgaW1hZ2UgZGV2ZWxvcG1lbnQ6ICBCU1AgY3JlYXRpb24gYW5kIGtlcm5lbCBtb2RpZmljYXRpb24gb3IKKyAgICAgICAgY29uZmlndXJhdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nZGV2ZWxvcGluZy1hLWJvYXJkLXN1cHBvcnQtcGFja2FnZS1ic3AnPgorICAgICAgICA8dGl0bGU+RGV2ZWxvcGluZyBhIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIEJTUCBpcyBhIGNvbGxlY3Rpb24gb2YgcmVjaXBlcyB0aGF0LCB3aGVuIGFwcGxpZWQgZHVyaW5nIGEgYnVpbGQsIHJlc3VsdHMgaW4KKyAgICAgICAgICAgIGFuIGltYWdlIHRoYXQgeW91IGNhbiBydW4gb24gYSBwYXJ0aWN1bGFyIGJvYXJkLgorICAgICAgICAgICAgVGh1cywgdGhlIHBhY2thZ2Ugd2hlbiBjb21waWxlZCBpbnRvIHRoZSBuZXcgaW1hZ2UsIHN1cHBvcnRzIHRoZSBvcGVyYXRpb24gb2YgdGhlIGJvYXJkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBGb3IgYSBicmllZiBsaXN0IG9mIHRlcm1zIHVzZWQgd2hlbiBkZXNjcmliaW5nIHRoZSBkZXZlbG9wbWVudCBwcm9jZXNzIGluIHRoZSBZb2N0byBQcm9qZWN0LAorICAgICAgICAgICAgc2VlIHRoZSAiPGxpbmsgbGlua2VuZD0neW9jdG8tcHJvamVjdC10ZXJtcyc+WW9jdG8gUHJvamVjdCBUZXJtczwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgIDwvbm90ZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIHByZXNlbnRzIHRoZSBiYXNpYworICAgICAgICAgICAgc3RlcHMgdXNlZCB0byBjcmVhdGUgYSBCU1AgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QncworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjdXNpbmctdGhlLXlvY3RvLXByb2plY3RzLWJzcC10b29scyc+QlNQIFRvb2xzPC91bGluaz4uCisgICAgICAgICAgICBBbHRob3VnaCBub3QgcmVxdWlyZWQgZm9yIEJTUCBjcmVhdGlvbiwgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+IHJlcG9zaXRvcnksIHdoaWNoIGNvbnRhaW5zCisgICAgICAgICAgICBtYW55IEJTUHMgc3VwcG9ydGVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0LCBpcyBwYXJ0IG9mIHRoZSBleGFtcGxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSB0aGF0IHNob3dzIGhvdyB0byBjcmVhdGUgYSBuZXcgbGF5ZXIgdXNpbmcgdGhlIHRvb2xzLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjY3JlYXRpbmctYS1uZXctYnNwLWxheWVyLXVzaW5nLXRoZS15b2N0by1ic3Atc2NyaXB0Jz5DcmVhdGluZyBhIE5ldyBCU1AgTGF5ZXIgVXNpbmcgdGhlIHlvY3RvLWJzcCBTY3JpcHQ8L3VsaW5rPiIKKyAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBpbGx1c3RyYXRpb24gYW5kIGxpc3Qgc3VtbWFyaXplIHRoZSBCU1AgY3JlYXRpb24gZ2VuZXJhbCB3b3JrZmxvdy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2JzcC1kZXYtZmxvdy5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI3aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZXQgdXAgeW91ciBob3N0IGRldmVsb3BtZW50IHN5c3RlbSB0byBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0PC9lbXBoYXNpcz46ICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3RoZS1saW51eC1kaXN0cm8nPlRoZSBMaW51eCBEaXN0cmlidXRpb248L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyNwYWNrYWdlcyc+VGhlIEJ1aWxkIEhvc3QgUGFja2FnZXM8L3VsaW5rPiIgc2VjdGlvbnMgYm90aAorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydCBmb3IgcmVxdWlyZW1lbnRzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXN0YWJsaXNoIGEgbG9jYWwgY29weSBvZiB0aGUgcHJvamVjdCBmaWxlcyBvbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbTwvZW1waGFzaXM+OiAgWW91IG5lZWQgdGhpcyA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5PC9saW5rPiBhdmFpbGFibGUgb24geW91ciBob3N0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgSGF2aW5nIHRoZXNlIGZpbGVzIG9uIHlvdXIgc3lzdGVtIGdpdmVzIHlvdSBhY2Nlc3MgdG8gdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MgYW5kIHRvIHRoZSB0b29scyB5b3UgbmVlZC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzZXQgdXAgdGhlIFNvdXJjZSBEaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2dldHRpbmctc2V0dXAnPkdldHRpbmcgU2V0IFVwPC9saW5rPiIgc2VjdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkVzdGFibGlzaCB0aGUgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5IG9uIHlvdXIgc3lzdGVtPC9lbXBoYXNpcz46ICBIYXZpbmcgbG9jYWwgY29waWVzCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZXNlIHN1cHBvcnRlZCBCU1AgbGF5ZXJzIG9uIHlvdXIgc3lzdGVtIGdpdmVzIHlvdQorICAgICAgICAgICAgICAgICAgICBhY2Nlc3MgdG8gbGF5ZXJzIHlvdSBtaWdodCBiZSBhYmxlIHRvIGJ1aWxkIG9uIG9yIG1vZGlmeQorICAgICAgICAgICAgICAgICAgICB0byBjcmVhdGUgeW91ciBCU1AuCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZ2V0IHRoZXNlIGZpbGVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdnZXR0aW5nLXNldHVwJz5HZXR0aW5nIFNldCBVcDwvbGluaz4iIHNlY3Rpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgeW91ciBvd24gQlNQIGxheWVyIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNjcmVhdGluZy1hLW5ldy1ic3AtbGF5ZXItdXNpbmctdGhlLXlvY3RvLWJzcC1zY3JpcHQnPjxmaWxlbmFtZT55b2N0by1ic3A8L2ZpbGVuYW1lPjwvdWxpbms+IHNjcmlwdDwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBMYXllcnMgYXJlIGlkZWFsIGZvcgorICAgICAgICAgICAgICAgICAgICBpc29sYXRpbmcgYW5kIHN0b3Jpbmcgd29yayBmb3IgYSBnaXZlbiBwaWVjZSBvZiBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICAgICAgQSBsYXllciBpcyByZWFsbHkganVzdCBhIGxvY2F0aW9uIG9yIGFyZWEgaW4gd2hpY2ggeW91IHBsYWNlCisgICAgICAgICAgICAgICAgICAgIHRoZSByZWNpcGVzIGFuZCBjb25maWd1cmF0aW9ucyBmb3IgeW91ciBCU1AuCisgICAgICAgICAgICAgICAgICAgIEluIGZhY3QsIGEgQlNQIGlzLCBpbiBpdHNlbGYsIGEgc3BlY2lhbCB0eXBlIG9mIGxheWVyLgorICAgICAgICAgICAgICAgICAgICBUaGUgc2ltcGxlc3Qgd2F5IHRvIGNyZWF0ZSBhIG5ldyBCU1AgbGF5ZXIgdGhhdCBpcyBjb21wbGlhbnQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBpcyB0byB1c2UgdGhlIDxmaWxlbmFtZT55b2N0by1ic3A8L2ZpbGVuYW1lPiBzY3JpcHQuCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGF0IHNjcmlwdCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjY3JlYXRpbmctYS1uZXctYnNwLWxheWVyLXVzaW5nLXRoZS15b2N0by1ic3Atc2NyaXB0Jz5DcmVhdGluZyBhIE5ldyBCU1AgTGF5ZXIgVXNpbmcgdGhlIHlvY3RvLWJzcCBTY3JpcHQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IChCU1ApIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBbm90aGVyIGV4YW1wbGUgdGhhdCBpbGx1c3RyYXRlcyBhIGxheWVyIGlzIGFuIGFwcGxpY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICBTdXBwb3NlIHlvdSBhcmUgY3JlYXRpbmcgYW4gYXBwbGljYXRpb24gdGhhdCBoYXMgbGlicmFyeSBvciBvdGhlciBkZXBlbmRlbmNpZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgb3JkZXIgZm9yIGl0IHRvIGNvbXBpbGUgYW5kIHJ1bi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxheWVyLCBpbiB0aGlzIGNhc2UsIHdvdWxkIGJlIHdoZXJlIGFsbCB0aGUgcmVjaXBlcyB0aGF0IGRlZmluZSB0aG9zZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgYXJlIGtlcHQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBrZXkgcG9pbnQgZm9yIGEgbGF5ZXIgaXMgdGhhdCBpdCBpcyBhbiBpc29sYXRlZCBhcmVhIHRoYXQgY29udGFpbnMKKyAgICAgICAgICAgICAgICAgICAgYWxsIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbiBmb3IgdGhlIHByb2plY3QgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBrbm93cyBhYm91dC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gbGF5ZXJzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcgYW5kIENyZWF0aW5nIExheWVyczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEJTUCBsYXllcnMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2JzcC1sYXllcnMnPkJTUCBMYXllcnM8L3VsaW5rPiIgc2VjdGlvbiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8bm90ZT5GaXZlIEJTUHMgZXhpc3QgdGhhdCBhcmUgcGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCByZWxlYXNlOiA8ZmlsZW5hbWU+Z2VuZXJpY3g4NjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+Z2VuZXJpY3g4Ni02NDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmVhZ2xlYm9uZTwvZmlsZW5hbWU+IChBUk0pLAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bXBjODMxNWU8L2ZpbGVuYW1lPiAoUG93ZXJQQyksCisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+ZWRnZXJvdXRlcjwvZmlsZW5hbWU+IChNSVBTKS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZXMgYW5kIGNvbmZpZ3VyYXRpb25zIGZvciB0aGVzZSBmaXZlIEJTUHMgYXJlIGxvY2F0ZWQgYW5kIGRpc3BlcnNlZAorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgQlNQIGxheWVycyBmb3IgbWFueSBzdXBwb3J0ZWQgQlNQcyAoZS5nLgorICAgICAgICAgICAgICAgICAgICBDcnlzdGFsIEZvcmVzdCwgRW1lbmxvdywgRmlzaCBSaXZlciBJc2xhbmQgMiwgSGFzd2VsbCwKKyAgICAgICAgICAgICAgICAgICAgSmFzcGVyIEZvcmVzdCwgYW5kIHNvIGZvcnRoKS4KKyAgICAgICAgICAgICAgICAgICAgQXNpZGUgZnJvbSB0aGUgQlNQcyBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBsYXllciwgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOyc+U291cmNlIFJlcG9zaXRvcmllczwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW4gYWRkaXRpb25hbCBCU1AgbGF5ZXJzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtbWlubm93PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXJhc3BiZXJyeXBpPC9maWxlbmFtZT4uPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5XaGVuIHlvdSBzZXQgdXAgYSBsYXllciBmb3IgYSBuZXcgQlNQLCB5b3Ugc2hvdWxkIGZvbGxvdyBhIHN0YW5kYXJkIGxheW91dC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBsYXlvdXQgaXMgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjYnNwLWZpbGVsYXlvdXQnPkV4YW1wbGUgRmlsZXN5c3RlbSBMYXlvdXQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIERldmVsb3BtZW50IEd1aWRlLgorICAgICAgICAgICAgICAgICAgICBJbiB0aGUgc3RhbmRhcmQgbGF5b3V0LCB5b3Ugd2lsbCBub3RpY2UgYSBzdWdnZXN0ZWQgc3RydWN0dXJlIGZvciByZWNpcGVzIGFuZAorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNlZSB0aGUgc3RhbmRhcmQgbGF5b3V0IGZvciBhIEJTUCBieSBleGFtaW5pbmcKKyAgICAgICAgICAgICAgICAgICAgYW55IHN1cHBvcnRlZCBCU1AgZm91bmQgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gbGF5ZXIgaW5zaWRlCisgICAgICAgICAgICAgICAgICAgIHRoZSBTb3VyY2UgRGlyZWN0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFrZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgdG8geW91ciBuZXcgQlNQCisgICAgICAgICAgICAgICAgICAgIGxheWVyPC9lbXBoYXNpcz46ICBUaGUgc3RhbmRhcmQgQlNQIGxheWVyIHN0cnVjdHVyZSBvcmdhbml6ZXMgdGhlIGZpbGVzIHlvdSBuZWVkCisgICAgICAgICAgICAgICAgICAgIHRvIGVkaXQgaW4gPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBhbmQgc2V2ZXJhbCA8ZmlsZW5hbWU+cmVjaXBlcy0qPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgd2l0aGluIHRoZSBCU1AgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gY2hhbmdlcyBpZGVudGlmeSB3aGVyZSB5b3VyIG5ldyBsYXllciBpcyBvbiB0aGUgbG9jYWwgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIGFuZCBpZGVudGlmeSB3aGljaCBrZXJuZWwgeW91IGFyZSBnb2luZyB0byB1c2UuCisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHJ1biB0aGUgPGZpbGVuYW1lPnlvY3RvLWJzcDwvZmlsZW5hbWU+IHNjcmlwdCwgeW91IGFyZSBhYmxlIHRvIGludGVyYWN0aXZlbHkKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIG1hbnkgdGhpbmdzIGZvciB0aGUgQlNQIChlLmcuIGtleWJvYXJkLCB0b3VjaHNjcmVlbiwgYW5kIHNvIGZvcnRoKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NYWtlIHJlY2lwZSBjaGFuZ2VzIHRvIHlvdXIgbmV3IEJTUCBsYXllcjwvZW1waGFzaXM+OiAgUmVjaXBlCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMgaW5jbHVkZSBhbHRlcmluZyByZWNpcGVzICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZXMpLCByZW1vdmluZworICAgICAgICAgICAgICAgICAgICByZWNpcGVzIHlvdSBkbyBub3QgdXNlLCBhbmQgYWRkaW5nIG5ldyByZWNpcGVzIG9yIGFwcGVuZCBmaWxlcworICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KSB0aGF0IHlvdSBuZWVkIHRvIHN1cHBvcnQgeW91ciBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QcmVwYXJlIGZvciB0aGUgYnVpbGQ8L2VtcGhhc2lzPjogIE9uY2UgeW91IGhhdmUgbWFkZSBhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMgdG8geW91ciBCU1AgbGF5ZXIsIHRoZXJlIHJlbWFpbnMgYSBmZXcgdGhpbmdzCisgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIGRvIGZvciB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpbiBvcmRlciBmb3IgaXQgdG8gY3JlYXRlIHlvdXIgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGdldCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgcmVhZHkgYnkgc291cmNpbmcgYW4gZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudjwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgYW5kIHlvdSBuZWVkIHRvIGJlIHN1cmUgdHdvIGtleSBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSBjb25maWd1cmVkIGFwcHJvcHJpYXRlbHk6CisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4gYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgbWFrZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhd2FyZSBvZiB5b3VyIG5ldyBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZW5hYmxpbmcteW91ci1sYXllcic+RW5hYmxpbmcgWW91ciBMYXllcjwvbGluaz4iIHNlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBsZXQgdGhlIGJ1aWxkIHN5c3RlbSBrbm93IGFib3V0IHlvdXIgbmV3IGxheWVyLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGVudGlyZSBwcm9jZXNzIGZvciBidWlsZGluZyBhbiBpbWFnZSBpcyBvdmVydmlld2VkIGluIHRoZSBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3FzLWJ1aWxkaW5nLWltYWdlcyc+QnVpbGRpbmcgSW1hZ2VzPC91bGluaz4iIHNlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQuCisgICAgICAgICAgICAgICAgICAgIFlvdSBtaWdodCB3YW50IHRvIHJlZmVyZW5jZSB0aGlzIGluZm9ybWF0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgdGhlIGltYWdlPC9lbXBoYXNpcz46ICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICB1c2VzIHRoZSBCaXRCYWtlIHRvb2wgdG8gYnVpbGQgaW1hZ2VzIGJhc2VkIG9uIHRoZSB0eXBlIG9mIGltYWdlIHlvdSB3YW50IHRvIGNyZWF0ZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQml0QmFrZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyc+Qml0QmFrZSBVc2VyIE1hbnVhbDwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBidWlsZCBwcm9jZXNzIHN1cHBvcnRzIHNldmVyYWwgdHlwZXMgb2YgaW1hZ2VzIHRvIHNhdGlzZnkgZGlmZmVyZW50IG5lZWRzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtaW1hZ2VzJz5JbWFnZXM8L3VsaW5rPiIgY2hhcHRlcgorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsIGZvciBpbmZvcm1hdGlvbiBvbgorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQgaW1hZ2VzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiB2aWV3IGEgdmlkZW8gcHJlc2VudGF0aW9uIG9uICJCdWlsZGluZyBDdXN0b20gRW1iZWRkZWQgSW1hZ2VzIHdpdGggWW9jdG8iCisgICAgICAgICAgICBhdCA8dWxpbmsgdXJsPSdodHRwOi8vZnJlZS1lbGVjdHJvbnMuY29tL2Jsb2cvZWxjLTIwMTEtdmlkZW9zJz5GcmVlIEVsZWN0cm9uczwvdWxpbms+LgorICAgICAgICAgICAgQWZ0ZXIgZ29pbmcgdG8gdGhlIHBhZ2UsIGp1c3Qgc2VhcmNoIGZvciAiRW1iZWRkZWQiLgorICAgICAgICAgICAgWW91IGNhbiBhbHNvIGZpbmQgc3VwcGxlbWVudGFsIGluZm9ybWF0aW9uIGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsnPgorICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPi4KKyAgICAgICAgICAgIEZpbmFsbHksIHRoZXJlIGlzIGhlbHBmdWwgbWF0ZXJpYWwgYW5kIGxpbmtzIG9uIHRoaXMKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19XSUtJX1VSTDsvd2lraS9UcmFuc2NyaXB0Ol9jcmVhdGluZ19vbmVfZ2VuZXJpY19BdG9tX0JTUF9mcm9tX2Fub3RoZXInPndpa2kgcGFnZTwvdWxpbms+LgorICAgICAgICAgICAgQWx0aG91Z2ggYSBiaXQgZGF0ZWQsIHlvdSBtaWdodCBmaW5kIHRoZSBpbmZvcm1hdGlvbiBvbiB0aGUgd2lraQorICAgICAgICAgICAgaGVscGZ1bC4KKyAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21vZGlmeWluZy10aGUta2VybmVsJz4KKyAgICAgICAgPHRpdGxlPjxhbmNob3IgaWQ9J2tlcm5lbC1zcG90JyAvPk1vZGlmeWluZyB0aGUgS2VybmVsPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEtlcm5lbCBtb2RpZmljYXRpb24gaW52b2x2ZXMgY2hhbmdpbmcgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsLCB3aGljaCBjb3VsZCBpbnZvbHZlIGNoYW5naW5nCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXMgd2VsbCBhcyBhZGRpbmcgbmV3IGtlcm5lbCByZWNpcGVzLgorICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBjaGFuZ2VzIGNhbiBiZSBhZGRlZCBpbiB0aGUgZm9ybSBvZiBjb25maWd1cmF0aW9uIGZyYWdtZW50cywgd2hpbGUgcmVjaXBlCisgICAgICAgICAgICBtb2RpZmljYXRpb24gY29tZXMgdGhyb3VnaCB0aGUga2VybmVsJ3MgPGZpbGVuYW1lPnJlY2lwZXMta2VybmVsPC9maWxlbmFtZT4gYXJlYQorICAgICAgICAgICAgaW4gYSBrZXJuZWwgbGF5ZXIgeW91IGNyZWF0ZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIHNlY3Rpb24gcHJlc2VudHMgYSBoaWdoLWxldmVsIG92ZXJ2aWV3IG9mIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICBrZXJuZWwgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgc3RlcHMgdG8gbW9kaWZ5IHRoZSBrZXJuZWwuCisgICAgICAgICAgICBZb3UgY2FuIHJlZmVyZW5jZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwYXRjaGluZy10aGUta2VybmVsJz5QYXRjaGluZyB0aGUgS2VybmVsPC9saW5rPiIgc2VjdGlvbgorICAgICAgICAgICAgZm9yIGFuIGV4YW1wbGUgdGhhdCBjaGFuZ2VzIHRoZSBzb3VyY2UgY29kZSBvZiB0aGUga2VybmVsLgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb25maWd1cmUgdGhlIGtlcm5lbCwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NvbmZpZ3VyaW5nLXRoZS1rZXJuZWwnPkNvbmZpZ3VyaW5nIHRoZSBLZXJuZWw8L2xpbms+IiBzZWN0aW9uLgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGtlcm5lbCBhbmQgb24gbW9kaWZ5aW5nIHRoZSBrZXJuZWwsIHNlZSB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyc+WW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQgTWFudWFsPC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0na2VybmVsLW92ZXJ2aWV3Jz4KKyAgICAgICAgICAgIDx0aXRsZT5LZXJuZWwgT3ZlcnZpZXc8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUcmFkaXRpb25hbGx5LCB3aGVuIG9uZSB0aGlua3Mgb2YgYSBwYXRjaGVkIGtlcm5lbCwgdGhleSB0aGluayBvZiBhIGJhc2Uga2VybmVsCisgICAgICAgICAgICAgICAgc291cmNlIHRyZWUgYW5kIGEgZml4ZWQgc3RydWN0dXJlIHRoYXQgY29udGFpbnMga2VybmVsIHBhdGNoZXMuCisgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QsIGhvd2V2ZXIsIGVtcGxveXMgbWVjaGFuaXNtcyB0aGF0LCBpbiBhIHNlbnNlLCByZXN1bHQgaW4gYSBrZXJuZWwgc291cmNlCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLgorICAgICAgICAgICAgICAgIEJ5IHRoZSBlbmQgb2YgdGhpcyBzZWN0aW9uLCB0aGlzIGFuYWxvZ3kgd2lsbCBiZWNvbWUgY2xlYXJlci4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGEgd2ViIGludGVyZmFjZSB0byB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgc291cmNlIHJlcG9zaXRvcmllcyBhdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgSWYgeW91IGxvb2sgYXQgdGhlIGludGVyZmFjZSwgeW91IHdpbGwgc2VlIHRvIHRoZSBsZWZ0IGEgZ3JvdXBpbmcgb2YKKyAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yaWVzIHRpdGxlZCAiWW9jdG8gTGludXggS2VybmVsLiIKKyAgICAgICAgICAgICAgICBXaXRoaW4gdGhpcyBncm91cCwgeW91IHdpbGwgZmluZCBzZXZlcmFsIGtlcm5lbHMgc3VwcG9ydGVkIGJ5CisgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3Q6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjg8L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0gVGhlCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFibGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgdG8gdXNlIHdpdGggdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgICAgICAgICBQcm9qZWN0IFJlbGVhc2UgMS40LiBUaGlzIGtlcm5lbCBpcyBiYXNlZCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIExpbnV4IDMuOCByZWxlYXNlZCBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjEwPC9maWxlbmFtZT48L2VtcGhhc2lzPiAtIEFuCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsLCB1bnN1cHBvcnRlZCBZb2N0byBQcm9qZWN0IGtlcm5lbCB1c2VkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IFJlbGVhc2UgMS41LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBrZXJuZWwgaXMgYmFzZWQgb24gdGhlIExpbnV4IDMuMTAgcmVsZWFzZWQga2VybmVsLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xNDwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLSBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWJsZSBZb2N0byBQcm9qZWN0IGtlcm5lbCB0byB1c2Ugd2l0aCB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIFByb2plY3QgUmVsZWFzZXMgMS42IGFuZCAxLjcuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGtlcm5lbCBpcyBiYXNlZCBvbiB0aGUgTGludXggMy4xNCByZWxlYXNlZCBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE3PC9maWxlbmFtZT48L2VtcGhhc2lzPiAtIEFuCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsLCB1bnN1cHBvcnRlZCBZb2N0byBQcm9qZWN0IGtlcm5lbCB1c2VkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IFJlbGVhc2UgMS43LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBrZXJuZWwgaXMgYmFzZWQgb24gdGhlIExpbnV4IDMuMTcgcmVsZWFzZWQga2VybmVsLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xOTwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLSBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWJsZSBZb2N0byBQcm9qZWN0IGtlcm5lbCB0byB1c2Ugd2l0aCB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIFByb2plY3QgUmVsZWFzZSAxLjguCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGtlcm5lbCBpcyBiYXNlZCBvbiB0aGUgTGludXggMy4xOSByZWxlYXNlZCBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by1kZXY8L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0gQQorICAgICAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQga2VybmVsIGJhc2VkIG9uIHRoZSBsYXRlc3QgdXBzdHJlYW0gcmVsZWFzZQorICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlIGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUga2VybmVscyBhcmUgbWFpbnRhaW5lZCB1c2luZyB0aGUgR2l0IHJldmlzaW9uIGNvbnRyb2wgc3lzdGVtCisgICAgICAgICAgICAgICAgdGhhdCBzdHJ1Y3R1cmVzIHRoZW0gdXNpbmcgdGhlIGZhbWlsaWFyICJ0cmVlIiwgImJyYW5jaCIsIGFuZCAibGVhZiIgc2NoZW1lLgorICAgICAgICAgICAgICAgIEJyYW5jaGVzIHJlcHJlc2VudCBkaXZlcnNpb25zIGZyb20gZ2VuZXJhbCBjb2RlIHRvIG1vcmUgc3BlY2lmaWMgY29kZSwgd2hpbGUgbGVhdmVzCisgICAgICAgICAgICAgICAgcmVwcmVzZW50IHRoZSBlbmQtcG9pbnRzIGZvciBhIGNvbXBsZXRlIGFuZCB1bmlxdWUga2VybmVsIHdob3NlIHNvdXJjZSBmaWxlcywKKyAgICAgICAgICAgICAgICB3aGVuIGdhdGhlcmVkIGZyb20gdGhlIHJvb3Qgb2YgdGhlIHRyZWUgdG8gdGhlIGxlYWYsIGFjY3VtdWxhdGUgdG8gY3JlYXRlIHRoZSBmaWxlcworICAgICAgICAgICAgICAgIG5lY2Vzc2FyeSBmb3IgYSBzcGVjaWZpYyBwaWVjZSBvZiBoYXJkd2FyZSBhbmQgaXRzIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIGRpc3BsYXlzIHRoaXMgY29uY2VwdDoKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMS5wbmciCisgICAgICAgICAgICAgICAgICAgIHdpZHRoPSI2aW4iIGRlcHRoPSI2aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlPSIxMDAiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdpdGhpbiB0aGUgZmlndXJlLCB0aGUgIktlcm5lbC5vcmcgQnJhbmNoIFBvaW50IiByZXByZXNlbnRzIHRoZSBwb2ludCBpbiB0aGUgdHJlZQorICAgICAgICAgICAgICAgIHdoZXJlIGEgc3VwcG9ydGVkIGJhc2Uga2VybmVsIGlzIG1vZGlmaWVkIGZyb20gdGhlIExpbnV4IGtlcm5lbC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhpcyBjb3VsZCBiZSB0aGUgYnJhbmNoIHBvaW50IGZvciB0aGUgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGtlcm5lbC4KKyAgICAgICAgICAgICAgICBUaHVzLCBldmVyeXRoaW5nIGZ1cnRoZXIgdG8gdGhlIHJpZ2h0IGluIHRoZSBzdHJ1Y3R1cmUgaXMgYmFzZWQgb24gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTk8L2ZpbGVuYW1lPiBrZXJuZWwuCisgICAgICAgICAgICAgICAgQnJhbmNoIHBvaW50cyB0byB0aGUgcmlnaHQgaW4gdGhlIGZpZ3VyZSByZXByZXNlbnQgd2hlcmUgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTk8L2ZpbGVuYW1lPiBrZXJuZWwgaXMgbW9kaWZpZWQgZm9yIHNwZWNpZmljIGhhcmR3YXJlCisgICAgICAgICAgICAgICAgb3IgdHlwZXMgb2Yga2VybmVscywgc3VjaCBhcyByZWFsLXRpbWUga2VybmVscy4KKyAgICAgICAgICAgICAgICBFYWNoIGxlYWYgdGh1cyByZXByZXNlbnRzIHRoZSBlbmQtcG9pbnQgZm9yIGEga2VybmVsIGRlc2lnbmVkIHRvIHJ1biBvbiBhIHNwZWNpZmljCisgICAgICAgICAgICAgICAgdGFyZ2V0ZWQgZGV2aWNlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgb3ZlcmFsbCByZXN1bHQgaXMgYSBHaXQtbWFpbnRhaW5lZCByZXBvc2l0b3J5IGZyb20gd2hpY2ggYWxsIHRoZSBzdXBwb3J0ZWQKKyAgICAgICAgICAgICAgICBrZXJuZWwgdHlwZXMgY2FuIGJlIGRlcml2ZWQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIGRldmljZXMuCisgICAgICAgICAgICAgICAgQSBiaWcgYWR2YW50YWdlIHRvIHRoaXMgc2NoZW1lIGlzIHRoZSBzaGFyaW5nIG9mIGNvbW1vbiBmZWF0dXJlcyBieSBrZWVwaW5nIHRoZW0gaW4KKyAgICAgICAgICAgICAgICAibGFyZ2VyIiBicmFuY2hlcyB3aXRoaW4gdGhlIHRyZWUuCisgICAgICAgICAgICAgICAgVGhpcyBwcmFjdGljZSBlbGltaW5hdGVzIHJlZHVuZGFudCBzdG9yYWdlIG9mIHNpbWlsYXIgZmVhdHVyZXMgc2hhcmVkIGFtb25nIGtlcm5lbHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEtlZXAgaW4gbWluZCB0aGUgZmlndXJlIGRvZXMgbm90IHRha2UgaW50byBhY2NvdW50IGFsbCB0aGUgc3VwcG9ydGVkIFlvY3RvCisgICAgICAgICAgICAgICAgUHJvamVjdCBrZXJuZWwgdHlwZXMsIGJ1dCByYXRoZXIgc2hvd3MgYSBzaW5nbGUgZ2VuZXJpYyBrZXJuZWwganVzdCBmb3IgY29uY2VwdHVhbCBwdXJwb3Nlcy4KKyAgICAgICAgICAgICAgICBBbHNvIGtlZXAgaW4gbWluZCB0aGF0IHRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgdGhlIFlvY3RvIFByb2plY3Qgc291cmNlIHJlcG9zaXRvcmllcworICAgICAgICAgICAgICAgIHRoYXQgYXJlIGVpdGhlciBwdWxsZWQgZnJvbSBkdXJpbmcgdGhlIGJ1aWxkIG9yIGVzdGFibGlzaGVkIG9uIHRoZSBob3N0IGRldmVsb3BtZW50IHN5c3RlbQorICAgICAgICAgICAgICAgIHByaW9yIHRvIHRoZSBidWlsZCBieSBlaXRoZXIgY2xvbmluZyBhIHBhcnRpY3VsYXIga2VybmVsJ3MgR2l0IHJlcG9zaXRvcnkgb3IgYnkKKyAgICAgICAgICAgICAgICBkb3dubG9hZGluZyBhbmQgdW5wYWNraW5nIGEgdGFyYmFsbC4KKyAgICAgICAgICAgIDwvbm90ZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXBzdHJlYW0gc3RvcmFnZSBvZiBhbGwgdGhlIGF2YWlsYWJsZSBrZXJuZWwgc291cmNlIGNvZGUgaXMgb25lIHRoaW5nLCB3aGlsZQorICAgICAgICAgICAgICAgIHJlcHJlc2VudGluZyBhbmQgdXNpbmcgdGhlIGNvZGUgb24geW91ciBob3N0IGRldmVsb3BtZW50IHN5c3RlbSBpcyBhbm90aGVyLgorICAgICAgICAgICAgICAgIENvbmNlcHR1YWxseSwgeW91IGNhbiB0aGluayBvZiB0aGUga2VybmVsIHNvdXJjZSByZXBvc2l0b3JpZXMgYXMgYWxsIHRoZQorICAgICAgICAgICAgICAgIHNvdXJjZSBmaWxlcyBuZWNlc3NhcnkgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIGtlcm5lbHMuCisgICAgICAgICAgICAgICAgQXMgYSBkZXZlbG9wZXIsIHlvdSBhcmUganVzdCBpbnRlcmVzdGVkIGluIHRoZSBzb3VyY2UgZmlsZXMgZm9yIHRoZSBrZXJuZWwgb24KKyAgICAgICAgICAgICAgICB3aGljaCB5b3UgYXJlIHdvcmtpbmcuCisgICAgICAgICAgICAgICAgQW5kLCBmdXJ0aGVybW9yZSwgeW91IG5lZWQgdGhlbSBhdmFpbGFibGUgb24geW91ciBob3N0IHN5c3RlbS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgS2VybmVsIHNvdXJjZSBjb2RlIGlzIGF2YWlsYWJsZSBvbiB5b3VyIGhvc3Qgc3lzdGVtIGEgY291cGxlIG9mIGRpZmZlcmVudAorICAgICAgICAgICAgICAgIHdheXMuCisgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB3b3JraW5nIGluIHRoZSBrZXJuZWwgYWxsIHRoZSB0aW1lLCB5b3UgcHJvYmFibHkgd291bGQgd2FudAorICAgICAgICAgICAgICAgIHRvIHNldCB1cCB5b3VyIG93biBsb2NhbCBHaXQgcmVwb3NpdG9yeSBvZiB0aGUga2VybmVsIHRyZWUuCisgICAgICAgICAgICAgICAgSWYgeW91IGp1c3QgbmVlZCB0byBtYWtlIHNvbWUgcGF0Y2hlcyB0byB0aGUga2VybmVsLCB5b3UgY2FuIGFjY2VzcworICAgICAgICAgICAgICAgIHRlbXBvcmFyeSBrZXJuZWwgc291cmNlIGZpbGVzIHRoYXQgd2VyZSBleHRyYWN0ZWQgYW5kIHVzZWQKKyAgICAgICAgICAgICAgICBkdXJpbmcgYSBidWlsZC4KKyAgICAgICAgICAgICAgICBXZSB3aWxsIGp1c3QgdGFsayBhYm91dCB3b3JraW5nIHdpdGggdGhlIHRlbXBvcmFyeSBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZ2V0IGtlcm5lbCBzb3VyY2UgY29kZSBvbnRvIHlvdXIKKyAgICAgICAgICAgICAgICBob3N0IHN5c3RlbSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdsb2NhbC1rZXJuZWwtZmlsZXMnPllvY3RvIFByb2plY3QgS2VybmVsPC9saW5rPiIKKyAgICAgICAgICAgICAgICBidWxsZXRlZCBpdGVtIGVhcmxpZXIgaW4gdGhlIG1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hhdCBoYXBwZW5zIGR1cmluZyB0aGUgYnVpbGQ/CisgICAgICAgICAgICAgICAgV2hlbiB5b3UgYnVpbGQgdGhlIGtlcm5lbCBvbiB5b3VyIGRldmVsb3BtZW50IHN5c3RlbSwgYWxsIGZpbGVzIG5lZWRlZCBmb3IgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgYXJlIHRha2VuIGZyb20gdGhlIHNvdXJjZSByZXBvc2l0b3JpZXMgcG9pbnRlZCB0byBieSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgYW5kIGdhdGhlcmVkIGluIGEgdGVtcG9yYXJ5IHdvcmsgYXJlYQorICAgICAgICAgICAgICAgIHdoZXJlIHRoZXkgYXJlIHN1YnNlcXVlbnRseSB1c2VkIHRvIGNyZWF0ZSB0aGUgdW5pcXVlIGtlcm5lbC4KKyAgICAgICAgICAgICAgICBUaHVzLCBpbiBhIHNlbnNlLCB0aGUgcHJvY2VzcyBjb25zdHJ1Y3RzIGEgbG9jYWwgc291cmNlIHRyZWUgc3BlY2lmaWMgdG8geW91cgorICAgICAgICAgICAgICAgIGtlcm5lbCB0byBnZW5lcmF0ZSB0aGUgbmV3IGtlcm5lbCBpbWFnZSAtIGEgc291cmNlIGdlbmVyYXRvciBpZiB5b3Ugd2lsbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBzaG93cyB0aGUgdGVtcG9yYXJ5IGZpbGUgc3RydWN0dXJlCisgICAgICAgICAgICAgICAgY3JlYXRlZCBvbiB5b3VyIGhvc3Qgc3lzdGVtIHdoZW4gdGhlIGJ1aWxkIG9jY3Vycy4KKyAgICAgICAgICAgICAgICBUaGlzCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+IGNvbnRhaW5zIGFsbCB0aGUKKyAgICAgICAgICAgICAgICBzb3VyY2UgZmlsZXMgdXNlZCBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTItZ2VuZXJpYy5wbmciCisgICAgICAgICAgICAgICAgICAgIHdpZHRoPSI2aW4iIGRlcHRoPSI1aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlPSIxMDAiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFnYWluLCBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwncworICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZSBhbmQgaXRzIGJyYW5jaGluZyBzdHJhdGVneSwgc2VlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyc+WW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQgTWFudWFsPC91bGluaz4uCisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHJlZmVyZW5jZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncGF0Y2hpbmctdGhlLWtlcm5lbCc+UGF0Y2hpbmcgdGhlIEtlcm5lbDwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgYSBkZXRhaWxlZCBleGFtcGxlIHRoYXQgbW9kaWZpZXMgdGhlIGtlcm5lbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdrZXJuZWwtbW9kaWZpY2F0aW9uLXdvcmtmbG93Jz4KKyAgICAgICAgICAgIDx0aXRsZT5LZXJuZWwgTW9kaWZpY2F0aW9uIFdvcmtmbG93PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBpbGx1c3RyYXRpb24gYW5kIHRoZSBmb2xsb3dpbmcgbGlzdCBzdW1tYXJpemVzIHRoZSBrZXJuZWwgbW9kaWZpY2F0aW9uIGdlbmVyYWwgd29ya2Zsb3cuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9rZXJuZWwtZGV2LWZsb3cucG5nIgorICAgICAgICAgICAgICAgICAgICB3aWR0aD0iNmluIiBkZXB0aD0iNWluIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNldCB1cCB5b3VyIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtIHRvIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0PC9lbXBoYXNpcz46ICBTZWUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3RoZS1saW51eC1kaXN0cm8nPlRoZSBMaW51eCBEaXN0cmlidXRpb248L3VsaW5rPiIgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyNwYWNrYWdlcyc+VGhlIEJ1aWxkIEhvc3QgUGFja2FnZXM8L3VsaW5rPiIgc2VjdGlvbnMgYm90aAorICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQgZm9yIHJlcXVpcmVtZW50cy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Fc3RhYmxpc2ggYSBsb2NhbCBjb3B5IG9mIHByb2plY3QgZmlsZXMgb24geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtPC9lbXBoYXNpcz46ICBIYXZpbmcgdGhlIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZQorICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5PC9saW5rPiBvbiB5b3VyIHN5c3RlbSBnaXZlcyB5b3UgYWNjZXNzIHRvIHRoZSBidWlsZCBwcm9jZXNzIGFuZCB0b29scworICAgICAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGdldCB0aGVzZSBmaWxlcywgc2VlIHRoZSBidWxsZXRlZCBpdGVtCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbG9jYWwteXAtcmVsZWFzZSc+WW9jdG8gUHJvamVjdCBSZWxlYXNlPC9saW5rPiIgZWFybGllciBpbiB0aGlzIG1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkVzdGFibGlzaCB0aGUgdGVtcG9yYXJ5IGtlcm5lbCBzb3VyY2UgZmlsZXM8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFRlbXBvcmFyeSBrZXJuZWwgc291cmNlIGZpbGVzIGFyZSBrZXB0IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aGVuIHlvdSBydW4gQml0QmFrZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIG5ldmVyIGJ1aWx0IHRoZSBrZXJuZWwgaW4gd2hpY2ggeW91IGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJlc3RlZCwgeW91IG5lZWQgdG8gcnVuIGFuIGluaXRpYWwgYnVpbGQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGVzdGFibGlzaCBsb2NhbCBrZXJuZWwgc291cmNlIGZpbGVzLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBhcmUgYnVpbGRpbmcgYW4gaW1hZ2UgZm9yIHRoZSBmaXJzdCB0aW1lLCB5b3UgbmVlZCB0byBnZXQgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCByZWFkeSBieSBzb3VyY2luZyBhbiBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudjwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGFsc28gbmVlZCB0byBiZSBzdXJlIHR3byBrZXkgY29uZmlndXJhdGlvbiBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICBhcmUgY29uZmlndXJlZCBhcHByb3ByaWF0ZWx5LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBlbnRpcmUgcHJvY2VzcyBmb3IgYnVpbGRpbmcgYW4gaW1hZ2UgaXMgb3ZlcnZpZXdlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3FzLWJ1aWxkaW5nLWltYWdlcyc+QnVpbGRpbmcgSW1hZ2VzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0LgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG1pZ2h0IHdhbnQgdG8gcmVmZXJlbmNlIHRoaXMgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiBCaXRCYWtlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyc+Qml0QmFrZSBVc2VyIE1hbnVhbDwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGJ1aWxkIHByb2Nlc3Mgc3VwcG9ydHMgc2V2ZXJhbCB0eXBlcyBvZiBpbWFnZXMgdG8gc2F0aXNmeSBkaWZmZXJlbnQgbmVlZHMuCisgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtaW1hZ2VzJz5JbWFnZXM8L3VsaW5rPiIgY2hhcHRlciBpbgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCBmb3IgaW5mb3JtYXRpb24gb24gc3VwcG9ydGVkIGltYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1ha2UgY2hhbmdlcyB0byB0aGUga2VybmVsIHNvdXJjZSBjb2RlIGlmCisgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhYmxlPC9lbXBoYXNpcz46ICBNb2RpZnlpbmcgdGhlIGtlcm5lbCBkb2VzIG5vdCBhbHdheXMgbWVhbiBkaXJlY3RseQorICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdpbmcgc291cmNlIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91IGhhdmUgdG8gZG8gdGhpcywgeW91IG1ha2UgdGhlIGNoYW5nZXMgdG8gdGhlIGZpbGVzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgRGlyZWN0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1ha2Uga2VybmVsIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBpZiBhcHBsaWNhYmxlPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3VyIHNpdHVhdGlvbiBjYWxscyBmb3IgY2hhbmdpbmcgdGhlIGtlcm5lbCdzCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLCB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7I2dlbmVyYXRpbmctY29uZmlndXJhdGlvbi1maWxlcyc+PGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggYWxsb3dzIHlvdSB0byBpbnRlcmFjdGl2ZWx5IGRldmVsb3AgYW5kIHRlc3QgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGNoYW5nZXMgeW91IGFyZSBtYWtpbmcgdG8gdGhlIGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNhdmluZyBjaGFuZ2VzIHlvdSBtYWtlIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4gdXBkYXRlcworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGtlcm5lbCdzIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5XYXJuaW5nPC90aXRsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnkgdG8gcmVzaXN0IHRoZSB0ZW1wdGF0aW9uIHRvIGRpcmVjdGx5IGVkaXQgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZyA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeSBhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50bXAvc3lzcm9vdHMvPHJlcGxhY2VhYmxlPm1hY2hpbmUtbmFtZTwvcmVwbGFjZWFibGU+L2tlcm5lbDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvaW5nIHNvLCBjYW4gcHJvZHVjZSB1bmV4cGVjdGVkIHJlc3VsdHMgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHJlZ2VuZXJhdGVzIHRoZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB0aGUgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyBtYWRlIHVzaW5nIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB5b3UgaGF2ZSBzYXZlZCB0aGVtLCB5b3UgY2FuIGRpcmVjdGx5IGNvbXBhcmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRpbmcgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGFnYWluc3QgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nIG9yaWdpbmFsIGFuZCBnYXRoZXIgdGhvc2UgY2hhbmdlcyBpbnRvIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLWNvbmZpZy1mcmFnbWVudHMnPmNvbmZpZ3VyYXRpb24gZnJhZ21lbnQgZmlsZTwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIHJlZmVyZW5jZWQgZnJvbSB3aXRoaW4gdGhlIGtlcm5lbCdzCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZS48L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkFkZGl0aW9uYWxseSwgaWYgeW91IGFyZSB3b3JraW5nIGluIGEgQlNQIGxheWVyCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbmVlZCB0byBtb2RpZnkgdGhlIEJTUCdzIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I21hbmFnaW5nLWtlcm5lbC1wYXRjaGVzLWFuZC1jb25maWctaXRlbXMtd2l0aC15b2N0by1rZXJuZWwnPjxmaWxlbmFtZT55b2N0by1rZXJuZWw8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQgYXMgd2VsbCBhcyA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT55b2N0by1rZXJuZWw8L2ZpbGVuYW1lPiBzY3JpcHQgbGV0cworICAgICAgICAgICAgICAgICAgICAgICAgeW91IGludGVyYWN0aXZlbHkgc2V0IHVwIGtlcm5lbCBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJlYnVpbGQgdGhlIGtlcm5lbCBpbWFnZSB3aXRoIHlvdXIgY2hhbmdlczwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgUmVidWlsZGluZyB0aGUga2VybmVsIGltYWdlIGFwcGxpZXMgeW91ciBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2FwcGxpY2F0aW9uLWRldmVsb3BtZW50LXdvcmtmbG93Jz4KKyAgICA8dGl0bGU+QXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgV29ya2Zsb3c8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEFwcGxpY2F0aW9uIGRldmVsb3BtZW50IGludm9sdmVzIGNyZWF0aW5nIGFuIGFwcGxpY2F0aW9uIHRoYXQgeW91IHdhbnQKKyAgICAgICAgdG8gcnVuIG9uIHlvdXIgdGFyZ2V0IGhhcmR3YXJlLCB3aGljaCBpcyBydW5uaW5nIGEga2VybmVsIGltYWdlIGNyZWF0ZWQgdXNpbmcgdGhlCisgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIGFuCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I2FkdC1pbnRybyc+QXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgVG9vbGtpdCAoQURUKTwvdWxpbms+CisgICAgICAgIGFuZCBzdGFuZC1hbG9uZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyN0aGUtY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluJz5jcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW5zPC91bGluaz4KKyAgICAgICAgdGhhdCBmYWNpbGl0YXRlIHF1aWNrIGRldmVsb3BtZW50IGFuZCBpbnRlZ3JhdGlvbiBvZiB5b3VyIGFwcGxpY2F0aW9uIGludG8gaXRzIHJ1bnRpbWUgZW52aXJvbm1lbnQuCisgICAgICAgIFVzaW5nIHRoZSBBRFQgYW5kIHRvb2xjaGFpbnMsIHlvdSBjYW4gY29tcGlsZSBhbmQgbGluayB5b3VyIGFwcGxpY2F0aW9uLgorICAgICAgICBZb3UgY2FuIHRoZW4gZGVwbG95IHlvdXIgYXBwbGljYXRpb24gdG8gdGhlIGFjdHVhbCBoYXJkd2FyZSBvciB0byB0aGUgUUVNVSBlbXVsYXRvciBmb3IgdGVzdGluZy4KKyAgICAgICAgSWYgeW91IGFyZSBmYW1pbGlhciB3aXRoIHRoZSBwb3B1bGFyIDx0cmFkZW1hcmsgY2xhc3M9J3RyYWRlJz5FY2xpcHNlPC90cmFkZW1hcms+IElERSwKKyAgICAgICAgeW91IGNhbiB1c2UgYW4gRWNsaXBzZSBZb2N0byBQbHVnLWluIHRvCisgICAgICAgIGFsbG93IHlvdSB0byBkZXZlbG9wLCBkZXBsb3ksIGFuZCB0ZXN0IHlvdXIgYXBwbGljYXRpb24gYWxsIGZyb20gd2l0aGluIEVjbGlwc2UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFdoaWxlIHdlIHN0cm9uZ2x5IHN1Z2dlc3QgdXNpbmcgdGhlIEFEVCB0byBkZXZlbG9wIHlvdXIgYXBwbGljYXRpb24sIHRoaXMgb3B0aW9uIG1pZ2h0IG5vdAorICAgICAgICBiZSBiZXN0IGZvciB5b3UuCisgICAgICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIHlvdSBjYW4gc3RpbGwgdXNlIHBpZWNlcyBvZiB0aGUgWW9jdG8gUHJvamVjdCBmb3IgeW91ciBkZXZlbG9wbWVudCBwcm9jZXNzLgorICAgICAgICBIb3dldmVyLCBiZWNhdXNlIHRoZSBwcm9jZXNzIGNhbiB2YXJ5IGdyZWF0bHksIHRoaXMgbWFudWFsIGRvZXMgbm90IHByb3ZpZGUgZGV0YWlsIG9uIHRoZSBwcm9jZXNzLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSd3b3JrZmxvdy11c2luZy10aGUtYWR0LWFuZC1lY2xpcHNlJz4KKyAgICAgICAgPHRpdGxlPldvcmtmbG93IFVzaW5nIHRoZSBBRFQgYW5kIDx0cmFkZW1hcmsgY2xhc3M9J3RyYWRlJz5FY2xpcHNlPC90cmFkZW1hcms+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGhlbHAgeW91IHVuZGVyc3RhbmQgaG93IGFwcGxpY2F0aW9uIGRldmVsb3BtZW50IHdvcmtzIHVzaW5nIHRoZSBBRFQsIHRoaXMgc2VjdGlvbgorICAgICAgICAgICAgcHJvdmlkZXMgYW4gb3ZlcnZpZXcgb2YgdGhlIGdlbmVyYWwgZGV2ZWxvcG1lbnQgcHJvY2VzcyBhbmQgYSBkZXRhaWxlZCBleGFtcGxlIG9mIHRoZSBwcm9jZXNzCisgICAgICAgICAgICBhcyBpdCBpcyB1c2VkIGZyb20gd2l0aGluIHRoZSBFY2xpcHNlIElERS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBpbGx1c3RyYXRpb24gYW5kIGxpc3Qgc3VtbWFyaXplIHRoZSBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCBnZW5lcmFsIHdvcmtmbG93LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvYXBwLWRldi1mbG93LnBuZyIKKyAgICAgICAgICAgICAgICB3aWR0aD0iN2luIiBkZXB0aD0iOGluIiBhbGlnbj0iY2VudGVyIiBzY2FsZT0iMTAwIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QcmVwYXJlIHRoZSBob3N0IHN5c3RlbSBmb3IgdGhlIFlvY3RvIFByb2plY3Q8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgU2VlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNkZXRhaWxlZC1zdXBwb3J0ZWQtZGlzdHJvcyc+U3VwcG9ydGVkIExpbnV4IERpc3RyaWJ1dGlvbnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZXF1aXJlZC1wYWNrYWdlcy1mb3ItdGhlLWhvc3QtZGV2ZWxvcG1lbnQtc3lzdGVtJz5SZXF1aXJlZCBQYWNrYWdlcyBmb3IgdGhlIEhvc3QgRGV2ZWxvcG1lbnQgU3lzdGVtPC91bGluaz4iIHNlY3Rpb25zIGJvdGgKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCBmb3IgcmVxdWlyZW1lbnRzLgorICAgICAgICAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCBiZSBzdXJlIHlvdXIgaG9zdCBzeXN0ZW0gaGFzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eHRlcm08L2ZpbGVuYW1lPiBwYWNrYWdlIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZWN1cmUgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHRhcmdldCBpbWFnZTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBoYXZlIGEgdGFyZ2V0IGtlcm5lbCBpbWFnZSB0aGF0IGhhcyBiZWVuIGJ1aWx0IHVzaW5nIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+RGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIFlvY3RvIFByb2plY3QgaGFzIGEgcHJlLWJ1aWx0IGltYWdlIHRoYXQgbWF0Y2hlcyB5b3VyIHRhcmdldAorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUgYW5kIHdoZXJlIHlvdSBhcmUgZ29pbmcgdG8gcnVuIHRoZSBpbWFnZSB3aGlsZSB5b3UgZGV2ZWxvcCB5b3VyIGFwcGxpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgIChRRU1VIG9yIHJlYWwgaGFyZHdhcmUpLCB0aGUgYXJlYSBmcm9tIHdoaWNoIHlvdSBnZXQgdGhlIGltYWdlIGRpZmZlcnMuCisgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Eb3dubG9hZCB0aGUgaW1hZ2UgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fTUFDSElORVNfRExfVVJMOyc+PGZpbGVuYW1lPm1hY2hpbmVzPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB5b3VyIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgc3VwcG9ydGVkIGFuZCB5b3UgYXJlIGdvaW5nIHRvIGRldmVsb3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRlc3QgeW91ciBhcHBsaWNhdGlvbiBvbiBhY3R1YWwgaGFyZHdhcmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvd25sb2FkIHRoZSBpbWFnZSBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19RRU1VX0RMX1VSTDsnPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFjaGluZXMvcWVtdTwvZmlsZW5hbWU+PC91bGluaz4gaWYgeW91ciB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIHN1cHBvcnRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgeW91IGFyZSBnb2luZyB0byBkZXZlbG9wIGFuZCB0ZXN0IHlvdXIgYXBwbGljYXRpb24gdXNpbmcgdGhlIFFFTVUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW11bGF0b3IuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJ1aWxkIHlvdXIgaW1hZ2UgaWYgeW91IGNhbm5vdCBmaW5kIGEgcHJlLWJ1aWx0IGltYWdlIHRoYXQgbWF0Y2hlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIHRhcmdldCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBzaW1pbGFyIHRvIGEgc3VwcG9ydGVkIGFyY2hpdGVjdHVyZSwgeW91IGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZnkgdGhlIGtlcm5lbCBpbWFnZSBiZWZvcmUgeW91IGJ1aWxkIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwYXRjaGluZy10aGUta2VybmVsJz5QYXRjaGluZyB0aGUgS2VybmVsPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgYW4gZXhhbXBsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIGluZm9ybWF0aW9uIG9uIHByZS1idWlsdCBrZXJuZWwgaW1hZ2UgbmFtaW5nIHNjaGVtZXMgZm9yIGltYWdlcworICAgICAgICAgICAgICAgICAgICB0aGF0IGNhbiBydW4gb24gdGhlIFFFTVUgZW11bGF0b3IsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjZG93bmxvYWRpbmctdGhlLXByZS1idWlsdC1saW51eC1rZXJuZWwnPkRvd25sb2FkaW5nIHRoZSBQcmUtQnVpbHQgTGludXggS2VybmVsPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbnN0YWxsIHRoZSBBRFQ8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIEFEVCBwcm92aWRlcyBhIHRhcmdldC1zcGVjaWZpYyBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4sIHRoZSByb290IGZpbGVzeXN0ZW0sCisgICAgICAgICAgICAgICAgICAgIHRoZSBRRU1VIGVtdWxhdG9yLCBhbmQgb3RoZXIgdG9vbHMgdGhhdCBjYW4gaGVscCB5b3UgZGV2ZWxvcCB5b3VyIGFwcGxpY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICBXaGlsZSBpdCBpcyBwb3NzaWJsZSB0byBnZXQgdGhlc2UgcGllY2VzIHNlcGFyYXRlbHksIHRoZSBBRFQgSW5zdGFsbGVyIHByb3ZpZGVzIGFuCisgICAgICAgICAgICAgICAgICAgIGVhc3ksIGluY2x1c2l2ZSBtZXRob2QuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZ2V0IHRoZXNlIHBpZWNlcyBieSBydW5uaW5nIGFuIEFEVCBpbnN0YWxsZXIgc2NyaXB0LCB3aGljaCBpcyBjb25maWd1cmFibGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaW5zdGFsbCB0aGUgQURULCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyN1c2luZy10aGUtYWR0LWluc3RhbGxlcic+VXNpbmcgdGhlIEFEVCBJbnN0YWxsZXI8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbgorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPklmIGFwcGxpY2FibGUsIHNlY3VyZSB0aGUgdGFyZ2V0IHJvb3QgZmlsZXN5c3RlbQorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIENyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgY2hvb3NlIG5vdCB0byBpbnN0YWxsIHRoZSBBRFQgdXNpbmcgdGhlIEFEVCBJbnN0YWxsZXIsCisgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIGZpbmQgYW5kIGRvd25sb2FkIHRoZSBhcHByb3ByaWF0ZSByb290IGZpbGVzeXN0ZW0gYW5kCisgICAgICAgICAgICAgICAgICAgIHRoZSBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4uPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgY2FuIGZpbmQgdGhlIHRhcmJhbGxzIGZvciB0aGUgcm9vdCBmaWxlc3lzdGVtIGluIHRoZSBzYW1lIGFyZWEgdXNlZAorICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGtlcm5lbCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGltYWdlIHlvdSBhcmUgcnVubmluZywgdGhlIHJvb3QgZmlsZXN5c3RlbSB5b3UgbmVlZCBkaWZmZXJzLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSBkZXZlbG9waW5nIGFuIGFwcGxpY2F0aW9uIHRoYXQgcnVucyBvbiBhbiBpbWFnZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRzIFNhdG8sIHlvdSBuZWVkIHRvIGdldCBhIHJvb3QgZmlsZXN5c3RlbSB0aGF0IHN1cHBvcnRzIFNhdG8uPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgY2FuIGZpbmQgdGhlIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMgYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1RPT0xDSEFJTl9ETF9VUkw7Jz48ZmlsZW5hbWU+dG9vbGNoYWluczwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gZ2V0IHRoZSBjb3JyZWN0IHRvb2xjaGFpbiBmb3IgeW91ciBkZXZlbG9wbWVudCBob3N0IGFuZCB5b3VyCisgICAgICAgICAgICAgICAgICAgIHRhcmdldCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I3VzaW5nLWFuLWV4aXN0aW5nLXRvb2xjaGFpbi10YXJiYWxsJz5Vc2luZyBhIENyb3NzLVRvb2xjaGFpbiBUYXJiYWxsPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjaW5zdGFsbGluZy10aGUtdG9vbGNoYWluJz5JbnN0YWxsaW5nIHRoZSBUb29sY2hhaW48L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIGluZm9ybWF0aW9uIG9uIGZpbmRpbmcgYW5kIGluc3RhbGxpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIGNvcnJlY3QgdG9vbGNoYWluIGJhc2VkIG9uIHlvdXIgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0gYW5kIHlvdXIgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgYW5kIGJ1aWxkIHlvdXIgYXBwbGljYXRpb248L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgQXQgdGhpcyBwb2ludCwgeW91IG5lZWQgdG8gaGF2ZSBzb3VyY2UgZmlsZXMgZm9yIHlvdXIgYXBwbGljYXRpb24uCisgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgdGhlIGZpbGVzLCB5b3UgY2FuIHVzZSB0aGUgRWNsaXBzZSBJREUgdG8gaW1wb3J0IHRoZW0gYW5kIGJ1aWxkIHRoZQorICAgICAgICAgICAgICAgICAgICBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIG5vdCB1c2luZyBFY2xpcHNlLCB5b3UgbmVlZCB0byB1c2UgdGhlIGNyb3NzLWRldmVsb3BtZW50IHRvb2xzIHlvdSBoYXZlCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCB0byBjcmVhdGUgdGhlIGltYWdlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RGVwbG95IHRoZSBpbWFnZSB3aXRoIHRoZSBhcHBsaWNhdGlvbjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIHRoZSBFY2xpcHNlIElERSwgeW91IGNhbiBkZXBsb3kgeW91ciBpbWFnZSB0byB0aGUgaGFyZHdhcmUgb3IgdG8KKyAgICAgICAgICAgICAgICAgICAgUUVNVSB0aHJvdWdoIHRoZSBwcm9qZWN0J3MgcHJlZmVyZW5jZXMuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgbm90IHVzaW5nIHRoZSBFY2xpcHNlIElERSwgdGhlbiB5b3UgbmVlZCB0byBkZXBsb3kgdGhlIGFwcGxpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBoYXJkd2FyZSB1c2luZyBvdGhlciBtZXRob2RzLgorICAgICAgICAgICAgICAgICAgICBPciwgaWYgeW91IGFyZSB1c2luZyBRRU1VLCB5b3UgbmVlZCB0byB1c2UgdGhhdCB0b29sIGFuZAorICAgICAgICAgICAgICAgICAgICBsb2FkIHlvdXIgaW1hZ2UgaW4gZm9yIHRlc3RpbmcuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2Rldi1tYW51YWwtcWVtdSc+VXNpbmcgdGhlIFF1aWNrIEVNVWxhdG9yIChRRU1VKTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIGNoYXB0ZXIgZm9yIGluZm9ybWF0aW9uIG9uIHVzaW5nIFFFTVUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VGVzdCBhbmQgZGVidWcgdGhlIGFwcGxpY2F0aW9uPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91ciBhcHBsaWNhdGlvbiBpcyBkZXBsb3llZCwgeW91IG5lZWQgdG8gdGVzdCBpdC4KKyAgICAgICAgICAgICAgICAgICAgV2l0aGluIHRoZSBFY2xpcHNlIElERSwgeW91IGNhbiB1c2UgdGhlIGRlYnVnZ2luZyBlbnZpcm9ubWVudCBhbG9uZyB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICBzZXQgb2YgdXNlci1zcGFjZSB0b29scyBpbnN0YWxsZWQgYWxvbmcgd2l0aCB0aGUgQURUIHRvIGRlYnVnIHlvdXIgYXBwbGljYXRpb24uCisgICAgICAgICAgICAgICAgICAgIE9mIGNvdXJzZSwgdGhlIHNhbWUgdXNlci1zcGFjZSB0b29scyBhcmUgYXZhaWxhYmxlIHNlcGFyYXRlbHkgaWYgeW91IGNob29zZQorICAgICAgICAgICAgICAgICAgICBub3QgdG8gdXNlIHRoZSBFY2xpcHNlIElERS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdhZHQtZWNsaXBzZSc+CisgICAgICAgIDx0aXRsZT5Xb3JraW5nIFdpdGhpbiBFY2xpcHNlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBFY2xpcHNlIElERSBpcyBhIHBvcHVsYXIgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgYW5kIGl0IGZ1bGx5CisgICAgICAgICAgICBzdXBwb3J0cyBkZXZlbG9wbWVudCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoaXMgcmVsZWFzZSBvZiB0aGUgWW9jdG8gUHJvamVjdCBzdXBwb3J0cyBib3RoIHRoZSBMdW5hCisgICAgICAgICAgICAgICAgYW5kIEtlcGxlciB2ZXJzaW9ucyBvZiB0aGUgRWNsaXBzZSBJREUuCisgICAgICAgICAgICAgICAgVGh1cywgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBwcm92aWRlcyBzZXR1cCBpbmZvcm1hdGlvbiBmb3IKKyAgICAgICAgICAgICAgICBib3RoIHZlcnNpb25zLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSBpbnN0YWxsIGFuZCBjb25maWd1cmUgdGhlIEVjbGlwc2UgWW9jdG8gUHJvamVjdCBQbHVnLWluCisgICAgICAgICAgICBpbnRvIHRoZSBFY2xpcHNlIElERSwgeW91IG1heGltaXplIHlvdXIgWW9jdG8gUHJvamVjdCBleHBlcmllbmNlLgorICAgICAgICAgICAgSW5zdGFsbGluZyBhbmQgY29uZmlndXJpbmcgdGhlIFBsdWctaW4gcmVzdWx0cyBpbiBhbiBlbnZpcm9ubWVudAorICAgICAgICAgICAgdGhhdCBoYXMgZXh0ZW5zaW9ucyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gbGV0IHlvdSBtb3JlIGVhc2lseQorICAgICAgICAgICAgZGV2ZWxvcCBzb2Z0d2FyZS4KKyAgICAgICAgICAgIFRoZXNlIGV4dGVuc2lvbnMgYWxsb3cgZm9yIGNyb3NzLWNvbXBpbGF0aW9uLCBkZXBsb3ltZW50LCBhbmQKKyAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiB5b3VyIG91dHB1dCBpbnRvIGEgUUVNVSBlbXVsYXRpb24gc2Vzc2lvbiBhcyB3ZWxsIGFzCisgICAgICAgICAgICBhY3R1YWwgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgWW91IGNhbiBhbHNvIHBlcmZvcm0gY3Jvc3MtZGVidWdnaW5nIGFuZCBwcm9maWxpbmcuCisgICAgICAgICAgICBUaGUgZW52aXJvbm1lbnQgYWxzbyBzdXBwb3J0cyBhIHN1aXRlIG9mIHRvb2xzIHRoYXQgYWxsb3dzIHlvdQorICAgICAgICAgICAgdG8gcGVyZm9ybSByZW1vdGUgcHJvZmlsaW5nLCB0cmFjaW5nLCBjb2xsZWN0aW9uIG9mIHBvd2VyIGRhdGEsCisgICAgICAgICAgICBjb2xsZWN0aW9uIG9mIGxhdGVuY3kgZGF0YSwgYW5kIGNvbGxlY3Rpb24gb2YgcGVyZm9ybWFuY2UgZGF0YS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgdG8gaW5zdGFsbCBhbmQgY29uZmlndXJlIHRoZSBFY2xpcHNlIElERQorICAgICAgICAgICAgWW9jdG8gUGx1Zy1pbiBhbmQgaG93IHRvIHVzZSBpdCB0byBkZXZlbG9wIHlvdXIgYXBwbGljYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2V0dGluZy11cC10aGUtZWNsaXBzZS1pZGUnPgorICAgICAgICAgICAgPHRpdGxlPlNldHRpbmcgVXAgdGhlIEVjbGlwc2UgSURFPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gZGV2ZWxvcCB3aXRoaW4gdGhlIEVjbGlwc2UgSURFLCB5b3UgbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluc3RhbGwgdGhlIG9wdGltYWwgdmVyc2lvbiBvZiB0aGUgRWNsaXBzZQorICAgICAgICAgICAgICAgICAgICAgICBJREUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Db25maWd1cmUgdGhlIEVjbGlwc2UgSURFLgorICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluc3RhbGwgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbi4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Db25maWd1cmUgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbi4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRG8gbm90IGluc3RhbGwgRWNsaXBzZSBmcm9tIHlvdXIgZGlzdHJpYnV0aW9uJ3MgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIGluc3RhbGwgRWNsaXBzZSBmcm9tIHRoZSBvZmZpY2lhbCBFY2xpcHNlCisgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkIHNpdGUgYXMgZGlyZWN0ZWQgaW4gdGhlIG5leHQgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdpbnN0YWxsaW5nLWVjbGlwc2UtaWRlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+SW5zdGFsbGluZyB0aGUgRWNsaXBzZSBJREU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGhhdmUgdGhlIEx1bmEgU1IyICg0LjQuMikKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiBvZiB0aGUgRWNsaXBzZSBJREUgaW5zdGFsbGVkIG9uIHlvdXIgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgY3VycmVudGx5IGhhdmUgdGhlIEtlcGxlciA0LjMuMiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBhbmQgeW91IGRvIG5vdCB3YW50IHRvIHVwZ3JhZGUgdGhlIElERSwgeW91IGNhbgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgS2VwbGVyIHRvIHdvcmsgd2l0aCB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBoYXZlIHRoZSBMdW5hIFNSMiAoNC40LjIpIEVjbGlwc2UgSURFCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCwgeW91IGNhbiBmaW5kIHRoZSB0YXJiYWxsIGF0CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZFQ0xJUFNFX01BSU5fVVJMOyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIEZyb20gdGhhdCBzaXRlLCBjaG9vc2UgdGhlIGFwcHJvcHJpYXRlIGRvd25sb2FkIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICJFY2xpcHNlIElERSBmb3IgQy9DKysgRGV2ZWxvcGVycyIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmVyc2lvbiBjb250YWlucyB0aGUgRWNsaXBzZSBQbGF0Zm9ybSwgdGhlIEphdmEKKyAgICAgICAgICAgICAgICAgICAgRGV2ZWxvcG1lbnQgVG9vbHMgKEpEVCksIGFuZCB0aGUgUGx1Zy1pbiBEZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICBFbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBkb3dubG9hZGVkIHRoZSB0YXJiYWxsLCBleHRyYWN0IGl0IGludG8gYQorICAgICAgICAgICAgICAgICAgICBjbGVhbiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHVucGFjayBhbmQgaW5zdGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRlZCBFY2xpcHNlIElERSB0YXJiYWxsIGludG8gYSBjbGVhbiBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIGRlZmF1bHQgbmFtZSA8ZmlsZW5hbWU+ZWNsaXBzZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgfgorICAgICAkIHRhciAteHp2ZiB+L0Rvd25sb2Fkcy9lY2xpcHNlLWNwcC1sdW5hLVNSMi1saW51eC1ndGsteDg2XzY0LnRhci5negorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nY29uZmlndXJpbmctdGhlLWVjbGlwc2UtaWRlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJpbmcgdGhlIEVjbGlwc2UgSURFPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJlc2VudHMgdGhlIHN0ZXBzIG5lZWRlZCB0byBjb25maWd1cmUgdGhlCisgICAgICAgICAgICAgICAgICAgIEVjbGlwc2UgSURFLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZWZvcmUgaW5zdGFsbGluZyBhbmQgY29uZmlndXJpbmcgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbiwKKyAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gY29uZmlndXJlIHRoZSBFY2xpcHNlIElERS4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93IHRoZXNlIGdlbmVyYWwgc3RlcHM6CisgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TdGFydCB0aGUgRWNsaXBzZSBJREUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TWFrZSBzdXJlIHlvdSBhcmUgaW4geW91ciBXb3JrYmVuY2ggYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ICJJbnN0YWxsIE5ldyBTb2Z0d2FyZSIgZnJvbSB0aGUgIkhlbHAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVsbC1kb3duIG1lbnUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkx1bmEgLSAmRUNMSVBTRV9MVU5BX1VSTDs8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlICJXb3JrIHdpdGg6IiBwdWxsLWRvd24gbWVudS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIEtlcGxlciwgc2VsZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5LZXBsZXIgLSAmRUNMSVBTRV9LRVBMRVJfVVJMOzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkV4cGFuZCB0aGUgYm94IG5leHQgdG8gIkxpbnV4IFRvb2xzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzZWxlY3QgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxpbnV4IFRvb2xzIExUVG5nIFRyYWNlciBDb250cm9sPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxpbnV4IFRvb2xzIExUVG5nIFVzZXJzcGFjZSBBbmFseXNpczwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MVFRuZyBLZXJuZWwgQW5hbHlzaXM8L2ZpbGVuYW1lPiBib3hlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGVzZSBzZWxlY3Rpb25zIGRvIG5vdCBhcHBlYXIgaW4gdGhlIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBtZWFucyB0aGUgaXRlbXMgYXJlIGFscmVhZHkgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgS2VwbGVyLCBzZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxUVG5nIC0gTGludXggVHJhY2luZyBUb29sa2l0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHBhbmQgdGhlIGJveCBuZXh0IHRvICJNb2JpbGUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlIERldmVsb3BtZW50IiBhbmQgc2VsZWN0IHRoZSBmb2xsb3dpbmcgYm94ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWdhaW4sIGlmIGFueSBvZiB0aGUgZm9sbG93aW5nIGl0ZW1zIGFyZSBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgZm9yIHNlbGVjdGlvbiwgdGhhdCBtZWFucyB0aGUgaXRlbXMgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBpbnN0YWxsZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5DL0MrKyBSZW1vdGUgTGF1bmNoIChSZXF1aXJlcyBSU0UgUmVtb3RlIFN5c3RlbSBFeHBsb3Jlcik8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPlJlbW90ZSBTeXN0ZW0gRXhwbG9yZXIgRW5kLXVzZXIgUnVudGltZTwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+UmVtb3RlIFN5c3RlbSBFeHBsb3JlciBVc2VyIEFjdGlvbnM8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPlRhcmdldCBNYW5hZ2VtZW50IFRlcm1pbmFsIChDb3JlIFNESyk8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPlRDRiBSZW1vdGUgU3lzdGVtIEV4cGxvcmVyIGFkZC1pbjwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+VENGIFRhcmdldCBFeHBsb3JlcjwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXhwYW5kIHRoZSBib3ggbmV4dCB0byAiUHJvZ3JhbW1pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYW5ndWFnZXMiIGFuZCBzZWxlY3QgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkMvQysrIEF1dG90b29scyBTdXBwb3J0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPkMvQysrIERldmVsb3BtZW50IFRvb2xzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3hlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgTHVuYSwgdGhlc2UgaXRlbXMgZG8gbm90IGFwcGVhciBvbiB0aGUgbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHRoZXkgYXJlIGFscmVhZHkgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24gYW5kIHJlc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgRWNsaXBzZSBJREUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0naW5zdGFsbGluZy10aGUtZWNsaXBzZS15b2N0by1wbHVnLWluJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+SW5zdGFsbGluZyBvciBBY2Nlc3NpbmcgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbjwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBpbnN0YWxsIHRoZSBFY2xpcHNlIFlvY3RvIFBsdWctaW4gaW50byB0aGUgRWNsaXBzZQorICAgICAgICAgICAgICAgICAgICBJREUgb25lIG9mIHR3byB3YXlzOiAgdXNlIHRoZSBZb2N0byBQcm9qZWN0J3MgRWNsaXBzZQorICAgICAgICAgICAgICAgICAgICBVcGRhdGUgc2l0ZSB0byBpbnN0YWxsIHRoZSBwcmUtYnVpbHQgcGx1Zy1pbiBvciBidWlsZCBhbmQKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCB0aGUgcGx1Zy1pbiBmcm9tIHRoZSBsYXRlc3Qgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1zb2Z0d2FyZSc+CisgICAgICAgICAgICAgICAgICAgIDx0aXRsZT5JbnN0YWxsaW5nIHRoZSBQcmUtYnVpbHQgUGx1Zy1pbiBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IEVjbGlwc2UgVXBkYXRlIFNpdGU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gaW5zdGFsbCB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluIGZyb20gdGhlIHVwZGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgc2l0ZSwgZm9sbG93IHRoZXNlIHN0ZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TdGFydCB1cCB0aGUgRWNsaXBzZSBJREUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbiBFY2xpcHNlLCBzZWxlY3QgIkluc3RhbGwgTmV3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlIiBmcm9tIHRoZSAiSGVscCIgbWVudS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrICJBZGQuLi4iIGluIHRoZSAiV29yayB3aXRoOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlYS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FbnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JkVDTElQU0VfRExfUExVR0lOX1VSTDsvbHVuYTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBVUkwgZmllbGQgYW5kIHByb3ZpZGUgYSBtZWFuaW5nZnVsIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlICJOYW1lIiBmaWVsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIEtlcGxlciwgdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JkVDTElQU0VfRExfUExVR0lOX1VSTDsva2VwbGVyPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBVUkwgZmllbGQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgIk9LIiB0byBoYXZlIHRoZSBlbnRyeSBhZGRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgIldvcmsgd2l0aDoiIGRyb3AtZG93biBsaXN0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0IHRoZSBlbnRyeSBmb3IgdGhlIHBsdWctaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgIldvcmsgd2l0aDoiIGRyb3AtZG93biBsaXN0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2hlY2sgdGhlIGJveGVzIG5leHQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPllvY3RvIFByb2plY3QgQURUIFBsdWctaW48L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPllvY3RvIFByb2plY3QgQml0YmFrZSBDb21tYW5kZXIgUGx1Zy1pbjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPllvY3RvIFByb2plY3QgRG9jdW1lbnRhdGlvbiBwbHVnLWluPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Db21wbGV0ZSB0aGUgcmVtYWluaW5nIHNvZnR3YXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxhdGlvbiBzdGVwcyBhbmQgdGhlbiByZXN0YXJ0IHRoZSBFY2xpcHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElERSB0byBmaW5pc2ggdGhlIGluc3RhbGxhdGlvbiBvZiB0aGUgcGx1Zy1pbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGNsaWNrICJPSyIgd2hlbiBwcm9tcHRlZCBhYm91dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGluZyBzb2Z0d2FyZSB0aGF0IGNvbnRhaW5zIHVuc2lnbmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3ppcC1maWxlLW1ldGhvZCc+CisgICAgICAgICAgICAgICAgICAgPHRpdGxlPkluc3RhbGxpbmcgdGhlIFBsdWctaW4gVXNpbmcgdGhlIExhdGVzdCBTb3VyY2UgQ29kZTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIGluc3RhbGwgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbiBmcm9tIHRoZSBsYXRlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBjb2RlLCBmb2xsb3cgdGhlc2Ugc3RlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJlIHN1cmUgeW91ciBkZXZlbG9wbWVudCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IHVzaW5nIE9wZW5KREsgdG8gYnVpbGQgdGhlIHBsdWctaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgZG9pbmcgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVzZSB0aGUgT3JhY2xlIEpESy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG9uJ3QgaGF2ZSB0aGF0LCBnbyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cub3JhY2xlLmNvbS90ZWNobmV0d29yay9qYXZhL2phdmFzZS9kb3dubG9hZHMvamRrNy1kb3dubG9hZHMtMTg4MDI2MC5odG1sJz48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBkb3dubG9hZCB0aGUgbGF0ZXN0IGFwcHJvcHJpYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSmF2YSBTRSBEZXZlbG9wbWVudCBLaXQgdGFyYmFsbCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIGRldmVsb3BtZW50IHN5c3RlbSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0IGl0IGludG8geW91ciBob21lIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbiB0aGUgc2hlbGwgeW91IGFyZSBnb2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGRvIHlvdXIgd29yaywgZXhwb3J0IHRoZSBsb2NhdGlvbiBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBPcmFjbGUgSmF2YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcHJldmlvdXMgc3RlcCBjcmVhdGVzIGEgbmV3IGZvbGRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgZXh0cmFjdGVkIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHVzZSB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmV4cG9ydDwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgcHJvdmlkZSB0aGUgc3BlY2lmaWMgbG9jYXRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBleHBvcnQgUEFUSD1+LzxyZXBsYWNlYWJsZT5leHRyYWN0ZWRfamRrX2xvY2F0aW9uPC9yZXBsYWNlYWJsZT4vYmluOiRQQVRICisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW4gdGhlIHNhbWUgc2hlbGwsIGNyZWF0ZSBhIEdpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5IHdpdGg6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2VjbGlwc2UtcG9reQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CZSBzdXJlIHRvIGNoZWNrb3V0IHRoZSBjb3JyZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgdXNpbmcgTHVuYSwgZG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjaGVja291dCBsdW5hL3lvY3RvLTEuOAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcHV0cyB5b3UgaW4gYSBkZXRhY2hlZCBIRUFEIHN0YXRlLCB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBmaW5lIHNpbmNlIHlvdSBhcmUgb25seSBnb2luZyB0byBiZSBidWlsZGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbm90IGRldmVsb3BpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBidWlsZGluZyBrZXBsZXIsIGNoZWNrb3V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmtlcGxlci95b2N0by0xLjg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DaGFuZ2UgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHdpdGhpbiB0aGUgR2l0IHJlcG9zaXRvcnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCBzY3JpcHRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNldCB1cCB0aGUgbG9jYWwgYnVpbGQgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgcnVubmluZyB0aGUgc2V0dXAgc2NyaXB0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgLi9zZXR1cC5zaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGVuIHRoZSBzY3JpcHQgZmluaXNoZXMgZXhlY3V0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBwcm9tcHRzIHlvdSB3aXRoIGluc3RydWN0aW9ucyBvbiBob3cgdG8gcnVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+YnVpbGQuc2g8L2ZpbGVuYW1lPiBzY3JpcHQsIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFsc28gaW4gdGhlIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IG9mIHRoZSBHaXQgcmVwb3NpdG9yeSBjcmVhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhcmxpZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SdW4gdGhlIDxmaWxlbmFtZT5idWlsZC5zaDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdCBhcyBkaXJlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBwcm92aWRlIHRoZSB0YWcgbmFtZSwgZG9jdW1lbnRhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2gsIGFuZCBhIHJlbGVhc2UgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmx1bmEveW9jdG8tMS44PC9maWxlbmFtZT4gdGFnLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1hc3RlcjwvZmlsZW5hbWU+IGRvY3VtZW50YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiZESVNUUk9fTkFNRTs8L2ZpbGVuYW1lPiBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2UgbmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIEVDTElQU0VfSE9NRT0vaG9tZS9zY290dHJpZi9lY2xpcHNlLXBva3kvc2NyaXB0cy9lY2xpcHNlIC4vYnVpbGQuc2ggbHVuYS95b2N0by0xLjggbWFzdGVyICZESVNUUk9fTkFNRTsgMj4mYW1wOzEgfCB0ZWUgLWEgYnVpbGQubG9nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgcnVubmluZyB0aGUgc2NyaXB0LCB0aGUgZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b3JnLnlvY3RvLnNkay08L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5yZWxlYXNlPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+LTwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmRhdGU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4tYXJjaGl2ZS56aXA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JZiBuZWNlc3NhcnksIHN0YXJ0IHRoZSBFY2xpcHNlIElERQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYmUgc3VyZSB5b3UgYXJlIGluIHRoZSBXb3JrYmVuY2guCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgIkluc3RhbGwgTmV3IFNvZnR3YXJlIiBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSAiSGVscCIgcHVsbC1kb3duIG1lbnUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiQWRkIi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UHJvdmlkZSBhbnl0aGluZyB5b3Ugd2FudCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5hbWUiIGZpZWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgIkFyY2hpdmUiIGFuZCBicm93c2UgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpJUCBmaWxlIHlvdSBidWlsdCBpbiBzdGVwIGVpZ2h0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIFpJUCBmaWxlIHNob3VsZCBub3QgYmUgInVuemlwcGVkIiwgYW5kIG11c3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgdGhlIDxmaWxlbmFtZT4qYXJjaGl2ZS56aXA8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQgYnkgcnVubmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1aWxkLnNoPC9maWxlbmFtZT4gc2NyaXB0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgdGhlICJPSyIgYnV0dG9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2hlY2sgdGhlIGJveGVzIHRoYXQgYXBwZWFyIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbnN0YWxsYXRpb24gd2luZG93IHRvIGluc3RhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5Zb2N0byBQcm9qZWN0IEFEVCBQbHVnLWluPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5Zb2N0byBQcm9qZWN0IEJpdGJha2UgQ29tbWFuZGVyIFBsdWctaW48L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+WW9jdG8gUHJvamVjdCBEb2N1bWVudGF0aW9uIHBsdWctaW48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZpbmlzaCB0aGUgaW5zdGFsbGF0aW9uIGJ5IGNsaWNraW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm91Z2ggdGhlIGFwcHJvcHJpYXRlIGJ1dHRvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY2xpY2sgIk9LIiB3aGVuIHByb21wdGVkIGFib3V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxpbmcgc29mdHdhcmUgdGhhdCBjb250YWlucyB1bnNpZ25lZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UmVzdGFydCB0aGUgRWNsaXBzZSBJREUgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVjZXNzYXJ5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQgeW91IHNob3VsZCBiZSBhYmxlIHRvIGNvbmZpZ3VyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbiBhcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY29uZmlndXJpbmctdGhlLWVjbGlwc2UteW9jdG8tcGx1Zy1pbic+Q29uZmlndXJpbmcgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdjb25maWd1cmluZy10aGUtZWNsaXBzZS15b2N0by1wbHVnLWluJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJpbmcgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbjwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJpbmcgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbiBpbnZvbHZlcyBzZXR0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICBDcm9zcyBDb21waWxlciBvcHRpb25zIGFuZCB0aGUgVGFyZ2V0IG9wdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBjb25maWd1cmF0aW9ucyB5b3UgY2hvb3NlIGJlY29tZSB0aGUgZGVmYXVsdCBzZXR0aW5ncworICAgICAgICAgICAgICAgICAgICBmb3IgYWxsIHByb2plY3RzLgorICAgICAgICAgICAgICAgICAgICBZb3UgZG8gaGF2ZSBvcHBvcnR1bml0aWVzIHRvIGNoYW5nZSB0aGVtIGxhdGVyIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgeW91IGNvbmZpZ3VyZSB0aGUgcHJvamVjdCAoc2VlIHRoZSBmb2xsb3dpbmcgc2VjdGlvbikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIHN0YXJ0LCB5b3UgbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nIGZyb20gd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICBFY2xpcHNlIElERToKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DaG9vc2UgIlByZWZlcmVuY2VzIiBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXaW5kb3ciIG1lbnUgdG8gZGlzcGxheSB0aGUgUHJlZmVyZW5jZXMgRGlhbG9nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrICJZb2N0byBQcm9qZWN0IEFEVCIgdG8gZGlzcGxheQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIHNjcmVlbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyaW5nLXRoZS1jcm9zcy1jb21waWxlci1vcHRpb25zJz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIHRoZSBDcm9zcy1Db21waWxlciBPcHRpb25zPC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIGNvbmZpZ3VyZSB0aGUgQ3Jvc3MgQ29tcGlsZXIgT3B0aW9ucywgeW91IG11c3Qgc2VsZWN0CisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdHlwZSBvZiB0b29sY2hhaW4sIHBvaW50IHRvIHRoZSB0b29sY2hhaW4sIHNwZWNpZnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzeXNyb290IGxvY2F0aW9uLCBhbmQgc2VsZWN0IHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZWxlY3RpbmcgdGhlIFRvb2xjaGFpbiBUeXBlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSBiZXR3ZWVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TdGFuZGFsb25lIHByZS1idWlsdCB0b29sY2hhaW48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJ1aWxkIHN5c3RlbSBkZXJpdmVkIHRvb2xjaGFpbjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBDcm9zcyBDb21waWxlciBPcHRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U3RhbmRhbG9uZSBQcmUtYnVpbHQgVG9vbGNoYWluOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IHRoaXMgbW9kZSB3aGVuIHlvdSBhcmUgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBzdGFuZC1hbG9uZSBjcm9zcy10b29sY2hhaW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBhcmUgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24gZGV2ZWxvcGVyIGFuZCBkbyBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBidWlsZCBhIHRhcmdldCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGVhZCwgeW91IGp1c3Qgd2FudCB0byB1c2UgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHRvb2xjaGFpbiBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBleGlzdGluZyBrZXJuZWwgYW5kIHRhcmdldCByb290CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QnVpbGQgU3lzdGVtIERlcml2ZWQgVG9vbGNoYWluOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IHRoaXMgbW9kZSBpZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Jvc3MtdG9vbGNoYWluIGhhcyBiZWVuIGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYnVpbHQgYXMgcGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBzZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJ1aWxkIHN5c3RlbSBkZXJpdmVkIHRvb2xjaGFpbjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3UgYXJlIHVzaW5nIHRoZSB0b29sY2hhaW4gYnVuZGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNpZGUgdGhlIEJ1aWxkIERpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Qb2ludCB0byB0aGUgVG9vbGNoYWluOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgYSBzdGFuZC1hbG9uZSBwcmUtYnVpbHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluLCB5b3Ugc2hvdWxkIGJlIHBvaW50aW5nIHRvIHdoZXJlIGl0IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHVzZWQgdGhlIEFEVCBJbnN0YWxsZXIgc2NyaXB0IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHRlZCB0aGUgZGVmYXVsdCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluIHdpbGwgYmUgaW5zdGFsbGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JllPQ1RPX0FEVFBBVEhfRElSOzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjdGlvbnMgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I2NvbmZpZ3VyaW5nLWFuZC1ydW5uaW5nLXRoZS1hZHQtaW5zdGFsbGVyLXNjcmlwdCc+Q29uZmlndXJpbmcgYW5kIFJ1bm5pbmcgdGhlIEFEVCBJbnN0YWxsZXIgU2NyaXB0PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjdXNpbmctYW4tZXhpc3RpbmctdG9vbGNoYWluLXRhcmJhbGwnPlVzaW5nIGEgQ3Jvc3MtVG9vbGNoYWluIFRhcmJhbGw8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3VpZGUgZGVzY3JpYmUgaG93IHRvIGluc3RhbGwgYSBzdGFuZC1hbG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcm9zcy10b29sY2hhaW4uPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3UgYXJlIHVzaW5nIGEgc3lzdGVtLWRlcml2ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluLCB0aGUgcGF0aCB5b3UgcHJvdmlkZSBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5Ub29sY2hhaW4gUm9vdCBMb2NhdGlvbjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkIGlzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I3VzaW5nLXRoZS10b29sY2hhaW4tZnJvbS13aXRoaW4tdGhlLWJ1aWxkLXRyZWUnPlVzaW5nIEJpdEJha2UgYW5kIHRoZSBCdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZlbG9wZXIncyBHdWlkZSBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgdGhlIHRvb2xjaGFpbiBpbnRvIHRoZSBCdWlsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TcGVjaWZ5IHRoZSBTeXNyb290IExvY2F0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbG9jYXRpb24gaXMgd2hlcmUgdGhlIHJvb3QgZmlsZXN5c3RlbSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRhcmdldCBoYXJkd2FyZSByZXNpZGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgdXNlZCB0aGUgQURUIEluc3RhbGxlciBzY3JpcHQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdGVkIHRoZSBkZWZhdWx0IGluc3RhbGxhdGlvbiBkaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gdGhlIGxvY2F0aW9uIGluIHlvdXIgaG9tZSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYSBmb2xkZXIgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRlc3QteW9jdG8vPC9maWxlbmFtZT48cmVwbGFjZWFibGU+dGFyZ2V0X2FyY2g8L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCB3aGVuIHlvdSB1c2UgdGhlIEFEVCBJbnN0YWxsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9vcHQvcG9reS8mRElTVFJPOy9zeXNyb290czwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uIGlzIHVzZWQgZm9yIHRoZSBRRU1VCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXItc3BhY2UgdG9vbHMgYW5kIHRoZSBORlMgYm9vdCBwcm9jZXNzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSB1c2VkIGVpdGhlciBvZiB0aGUgb3RoZXIgdHdvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMgdG8gaW5zdGFsbCB0aGUgdG9vbGNoYWluIG9yIGRpZCBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0IHRoZSBBRFQgSW5zdGFsbGVyIHNjcmlwdCdzIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSwgdGhlbiB0aGUgbG9jYXRpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHN5c3Jvb3QgZmlsZXN5c3RlbSBkZXBlbmRzIG9uIHdoZXJlIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZWx5IGV4dHJhY3RlZCBhbmQgaW5zdGFsbGVkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpbnN0YWxsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW4gYW5kIG9uIGhvdyB0byBleHRyYWN0IGFuZCBpbnN0YWxsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNyb290IGZpbGVzeXN0ZW0sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I2luc3RhbGxpbmctdGhlLWFkdCc+SW5zdGFsbGluZyB0aGUgQURUIGFuZCBUb29sY2hhaW5zPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2VsZWN0IHRoZSBUYXJnZXQgQXJjaGl0ZWN0dXJlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIHRoZSB0eXBlIG9mIGhhcmR3YXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBhcmUgZ29pbmcgdG8gdXNlIG9yIGVtdWxhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgcHVsbC1kb3duCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UYXJnZXQgQXJjaGl0ZWN0dXJlPC9maWxlbmFtZT4gbWVudQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBtYWtlIHlvdXIgc2VsZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcHVsbC1kb3duIG1lbnUgc2hvdWxkIGhhdmUgdGhlIHN1cHBvcnRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgYXJjaGl0ZWN0dXJlIHlvdSBuZWVkIGlzIG5vdCBsaXN0ZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1lbnUsIHlvdSB3aWxsIG5lZWQgdG8gYnVpbGQgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3FzLWJ1aWxkaW5nLWltYWdlcyc+QnVpbGRpbmcgSW1hZ2VzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcmUgaW5mb3JtYXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdjb25maWd1cmluZy10aGUtdGFyZ2V0LW9wdGlvbnMnPgorICAgICAgICAgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJpbmcgdGhlIFRhcmdldCBPcHRpb25zPC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY2hvb3NlIHRvIGVtdWxhdGUgaGFyZHdhcmUgdXNpbmcgdGhlIFFFTVUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVtdWxhdG9yLCBvciB5b3UgY2FuIGNob29zZSB0byBydW4geW91ciBpbWFnZSBvbiBhY3R1YWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlFFTVU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3aWxsIGJlIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRRU1VIGVtdWxhdG9yLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIHRoZSBlbXVsYXRvciwgeW91IGFsc28gbmVlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGUgdGhlIGtlcm5lbCBhbmQgc3BlY2lmeSBhbnkgY3VzdG9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3Ugc2VsZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJ1aWxkIHN5c3RlbSBkZXJpdmVkIHRvb2xjaGFpbjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0IGtlcm5lbCB5b3UgYnVpbHQgd2lsbCBiZSBsb2NhdGVkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBCdWlsZCBEaXJlY3RvcnkgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC9kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBzZWxlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U3RhbmRhbG9uZSBwcmUtYnVpbHQgdG9vbGNoYWluPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcmUtYnVpbHQgaW1hZ2UgeW91IGRvd25sb2FkZWQgaXMgbG9jYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgZGlyZWN0b3J5IHlvdSBzcGVjaWZpZWQgd2hlbiB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRlZCB0aGUgaW1hZ2UuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Nb3N0IGN1c3RvbSBvcHRpb25zIGFyZSBmb3IgYWR2YW5jZWQgUUVNVQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VycyB0byBmdXJ0aGVyIGN1c3RvbWl6ZSB0aGVpciBRRU1VIGluc3RhbmNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVzZSBvcHRpb25zIGFyZSBzcGVjaWZpZWQgYmV0d2VlbiBwYWlyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVkIGJyYWNrZXRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb21lIG9wdGlvbnMgbXVzdCBiZSBzcGVjaWZpZWQgb3V0c2lkZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhY2tldHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIHRoZSBvcHRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zZXJpYWw8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5vZ3JhcGhpYzwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmt2bTwvZmlsZW5hbWU+IG11c3QgYWxsIGJlIG91dHNpZGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYWNrZXRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5tYW4gcWVtdTwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZ2V0IGhlbHAgb24gYWxsIHRoZSBvcHRpb25zIGFuZCB0aGVpciB1c2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgc2VyaWFsIOKAmCZsdDstbSAyNTYgLWZ1bGwtc2NyZWVuJmd0O+KAmQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnYXJkbGVzcyBvZiB0aGUgbW9kZSwgU3lzcm9vdCBpcyBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYXMgcGFydCBvZiB0aGUgQ3Jvc3MtQ29tcGlsZXIgT3B0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U3lzcm9vdCBMb2NhdGlvbjo8L2ZpbGVuYW1lPiBmaWVsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FeHRlcm5hbCBIVzo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdpbGwgYmUgdXNpbmcgYWN0dWFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrIHRoZSAiT0siIHRvIHNhdmUgeW91ciBwbHVnLWluIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLXRoZS1wcm9qZWN0Jz4KKyAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyB0aGUgUHJvamVjdDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gY3JlYXRlIHR3byB0eXBlcyBvZiBwcm9qZWN0czogIEF1dG90b29scy1iYXNlZCwgb3IKKyAgICAgICAgICAgICAgICBNYWtlZmlsZS1iYXNlZC4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB0byBjcmVhdGUgQXV0b3Rvb2xzLWJhc2VkIHByb2plY3RzCisgICAgICAgICAgICAgICAgZnJvbSB3aXRoaW4gdGhlIEVjbGlwc2UgSURFLgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBjcmVhdGluZyBNYWtlZmlsZS1iYXNlZCBwcm9qZWN0cyBpbiBhCisgICAgICAgICAgICAgICAgdGVybWluYWwgd2luZG93LCBzZWUgdGhlIHNlY3Rpb24KKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjdXNpbmctdGhlLWNvbW1hbmQtbGluZSc+VXNpbmcgdGhlIENvbW1hbmQgTGluZTwvdWxpbms+IgorICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBEbyBub3QgdXNlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBwcm9qZWN0IG5hbWVzCisgICAgICAgICAgICAgICAgICAgIChlLmcuIHNwYWNlcywgdW5kZXJzY29yZXMsIGV0Yy4pLiAgRG9pbmcgc28gY2FuCisgICAgICAgICAgICAgICAgICAgIGNhdXNlIGNvbmZpZ3VyYXRpb24gdG8gZmFpbC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGNyZWF0ZSBhIHByb2plY3QgYmFzZWQgb24gYSBZb2N0byB0ZW1wbGF0ZSBhbmQgdGhlbiBkaXNwbGF5CisgICAgICAgICAgICAgICAgdGhlIHNvdXJjZSBjb2RlLCBmb2xsb3cgdGhlc2Ugc3RlcHM6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0ICJQcm9qZWN0IiBmcm9tIHRoZSAiRmlsZSAtPiBOZXciIG1lbnUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvdWJsZSBjbGljayA8ZmlsZW5hbWU+Q0MrKzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Eb3VibGUgY2xpY2sgPGZpbGVuYW1lPkMgUHJvamVjdDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB0byBjcmVhdGUgdGhlIHByb2plY3QuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHBhbmQgPGZpbGVuYW1lPllvY3RvIFByb2plY3QgQURUIEF1dG90b29scyBQcm9qZWN0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlbGVjdCA8ZmlsZW5hbWU+SGVsbG8gV29ybGQgQU5TSSBDIEF1dG90b29scyBQcm9qZWN0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGFuIEF1dG90b29scy1iYXNlZCBwcm9qZWN0IGJhc2VkIG9uIGEgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UHV0IGEgbmFtZSBpbiB0aGUgPGZpbGVuYW1lPlByb2plY3QgbmFtZTo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuCisgICAgICAgICAgICAgICAgICAgICAgICBEbyBub3QgdXNlIGh5cGhlbnMgYXMgcGFydCBvZiB0aGUgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgIk5leHQiLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkIGluZm9ybWF0aW9uIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkF1dGhvcjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNvcHlyaWdodCBub3RpY2U8L2ZpbGVuYW1lPiBmaWVsZHMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJlIHN1cmUgdGhlIDxmaWxlbmFtZT5MaWNlbnNlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkIGlzIGNvcnJlY3QuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiRmluaXNoIi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPklmIHRoZSAib3BlbiBwZXJzcGVjdGl2ZSIgcHJvbXB0IGFwcGVhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICBjbGljayAiWWVzIiBzbyB0aGF0IHlvdSBpbiB0aGUgQy9DKysgcGVyc3BlY3RpdmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBsZWZ0LWhhbmQgbmF2aWdhdGlvbiBwYW5lIHNob3dzIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGRpc3BsYXkgeW91ciBzb3VyY2UgYnkgZG91YmxlIGNsaWNraW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdCdzIHNvdXJjZSBmaWxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY29uZmlndXJpbmctdGhlLWNyb3NzLXRvb2xjaGFpbnMnPgorICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIHRoZSBDcm9zcy1Ub29sY2hhaW5zPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGVhcmxpZXIgc2VjdGlvbiwKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY29uZmlndXJpbmctdGhlLWVjbGlwc2UteW9jdG8tcGx1Zy1pbic+Q29uZmlndXJpbmcgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbjwvbGluaz4iLAorICAgICAgICAgICAgICAgIHNldHMgdXAgdGhlIGRlZmF1bHQgcHJvamVjdCBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIG92ZXJyaWRlIHRoZXNlIHNldHRpbmdzIGZvciBhIGdpdmVuIHByb2plY3QgYnkgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgdGhlc2Ugc3RlcHM6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0ICJDaGFuZ2UgWW9jdG8gUHJvamVjdCBTZXR0aW5ncyIgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlICJQcm9qZWN0IiBtZW51LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWxlY3Rpb24gYnJpbmdzIHVwIHRoZSBZb2N0byBQcm9qZWN0IFNldHRpbmdzCisgICAgICAgICAgICAgICAgICAgICAgICBEaWFsb2cgYW5kIGFsbG93cyB5b3UgdG8gbWFrZSBjaGFuZ2VzIHNwZWNpZmljIHRvIGFuCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsIHByb2plY3QuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QnkgZGVmYXVsdCwgdGhlIENyb3NzIENvbXBpbGVyIE9wdGlvbnMgYW5kIFRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyBmb3IgYSBwcm9qZWN0IGFyZSBpbmhlcml0ZWQgZnJvbSBzZXR0aW5ncyB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkIHVzaW5nIHRoZSBQcmVmZXJlbmNlcyBEaWFsb2cgYXMgZGVzY3JpYmVkCisgICAgICAgICAgICAgICAgICAgICAgICBlYXJsaWVyIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NvbmZpZ3VyaW5nLXRoZS1lY2xpcHNlLXlvY3RvLXBsdWctaW4nPkNvbmZpZ3VyaW5nIHRoZSBFY2xpcHNlIFlvY3RvIFBsdWctaW48L2xpbms+IiBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgU2V0dGluZ3MgRGlhbG9nIGFsbG93cyB5b3UgdG8gb3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRob3NlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIGEgZ2l2ZW4gcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TWFrZSB5b3VyIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgcHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGNsaWNrICJPSyIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJpZ2h0LWNsaWNrIGluIHRoZSBuYXZpZ2F0aW9uIHBhbmUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QgIlJlY29uZmlndXJlIFByb2plY3QiIGZyb20gdGhlIHBvcC11cCBtZW51LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWxlY3Rpb24gcmVjb25maWd1cmVzIHRoZSBwcm9qZWN0IGJ5IHJ1bm5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hdXRvZ2VuLnNoPC9maWxlbmFtZT4gaW4gdGhlIHdvcmtzcGFjZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzY3JpcHQgYWxzbyBydW5zIDxmaWxlbmFtZT5saWJ0b29saXplPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YWNsb2NhbDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG9jb25mPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXV0b2hlYWRlcjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG9tYWtlIC0tYTwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uL2NvbmZpZ3VyZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgb24gdGhlICJDb25zb2xlIiB0YWIgYmVuZWF0aCB5b3VyIHNvdXJjZSBjb2RlIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlIHJlc3VsdHMgb2YgcmVjb25maWd1cmluZyB5b3VyIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2J1aWxkaW5nLXRoZS1wcm9qZWN0Jz4KKyAgICAgICAgICAgIDx0aXRsZT5CdWlsZGluZyB0aGUgUHJvamVjdDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGJ1aWxkIHRoZSBwcm9qZWN0IHNlbGVjdCAiQnVpbGQgUHJvamVjdCIgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAiUHJvamVjdCIgbWVudS4KKyAgICAgICAgICAgICAgICBUaGUgY29uc29sZSBzaG91bGQgdXBkYXRlIGFuZCB5b3UgY2FuIG5vdGUgdGhlIGNyb3NzLWNvbXBpbGVyCisgICAgICAgICAgICAgICAgeW91IGFyZSB1c2luZy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzdGFydGluZy1xZW11LWluLXVzZXItc3BhY2UtbmZzLW1vZGUnPgorICAgICAgICAgICAgPHRpdGxlPlN0YXJ0aW5nIFFFTVUgaW4gVXNlci1TcGFjZSBORlMgTW9kZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHN0YXJ0IHRoZSBRRU1VIGVtdWxhdG9yIGZyb20gd2l0aGluIEVjbGlwc2UsIGZvbGxvdyB0aGVzZQorICAgICAgICAgICAgICAgIHN0ZXBzOgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdkZXYtbWFudWFsLXFlbXUnPlVzaW5nIHRoZSBRdWljayBFTVVsYXRvciAoUUVNVSk8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBjaGFwdGVyIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIFFFTVUuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkV4cG9zZSBhbmQgc2VsZWN0ICJFeHRlcm5hbCBUb29scyIgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlICJSdW4iIG1lbnUuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3VyIGltYWdlIHNob3VsZCBhcHBlYXIgYXMgYSBzZWxlY3RhYmxlIG1lbnUgaXRlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0IHlvdXIgaW1hZ2UgZnJvbSB0aGUgbWVudSB0byBsYXVuY2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBlbXVsYXRvciBpbiBhIG5ldyB3aW5kb3cuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPklmIG5lZWRlZCwgZW50ZXIgeW91ciBob3N0IHJvb3QgcGFzc3dvcmQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzaGVsbCB3aW5kb3cgYXQgdGhlIHByb21wdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc2V0cyB1cCBhIDxmaWxlbmFtZT5UYXAgMDwvZmlsZW5hbWU+IGNvbm5lY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRlZCBmb3IgcnVubmluZyBpbiB1c2VyLXNwYWNlIE5GUyBtb2RlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XYWl0IGZvciBRRU1VIHRvIGxhdW5jaC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk9uY2UgUUVNVSBsYXVuY2hlcywgeW91IGNhbiBiZWdpbiBvcGVyYXRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGF0IGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgT25lIHVzZWZ1bCB0YXNrIGF0IHRoaXMgcG9pbnQgd291bGQgYmUgdG8gZGV0ZXJtaW5lIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgSVAgQWRkcmVzcyBmb3IgdGhlIHVzZXItc3BhY2UgTkZTIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aWZjb25maWc8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RlcGxveWluZy1hbmQtZGVidWdnaW5nLXRoZS1hcHBsaWNhdGlvbic+CisgICAgICAgICAgICA8dGl0bGU+RGVwbG95aW5nIGFuZCBEZWJ1Z2dpbmcgdGhlIEFwcGxpY2F0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSB0aGUgUUVNVSBlbXVsYXRvciBpcyBydW5uaW5nIHRoZSBpbWFnZSwgeW91IGNhbiBkZXBsb3kKKyAgICAgICAgICAgICAgICB5b3VyIGFwcGxpY2F0aW9uIHVzaW5nIHRoZSBFY2xpcHNlIElERSBhbmQgdGhlbiB1c2UKKyAgICAgICAgICAgICAgICB0aGUgZW11bGF0b3IgdG8gcGVyZm9ybSBkZWJ1Z2dpbmcuCisgICAgICAgICAgICAgICAgRm9sbG93IHRoZXNlIHN0ZXBzIHRvIGRlcGxveSB0aGUgYXBwbGljYXRpb24uCisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0ICJEZWJ1ZyBDb25maWd1cmF0aW9ucy4uLiIgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICJSdW4iIG1lbnUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbiB0aGUgbGVmdCBhcmVhLCBleHBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DL0MrK1JlbW90ZSBBcHBsaWNhdGlvbjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Mb2NhdGUgeW91ciBwcm9qZWN0IGFuZCBzZWxlY3QgaXQgdG8gYnJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwIGEgbmV3IHRhYmJlZCB2aWV3IGluIHRoZSBEZWJ1ZyBDb25maWd1cmF0aW9ucyBEaWFsb2cuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVudGVyIHRoZSBhYnNvbHV0ZSBwYXRoIGludG8gd2hpY2ggeW91IHdhbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGRlcGxveSB0aGUgYXBwbGljYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlICJSZW1vdGUgQWJzb2x1dGUgRmlsZSBQYXRoIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgQy9DKytBcHBsaWNhdGlvbjoiIGZpZWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGVudGVyCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9iaW4vPHJlcGxhY2VhYmxlPnByb2dyYW1uYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgb24gdGhlICJEZWJ1Z2dlciIgdGFiIHRvIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyb3NzLXRvb2wgZGVidWdnZXIgeW91IGFyZSB1c2luZy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrIG9uIHRoZSAiTWFpbiIgdGFiLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24gdG8gdGhlIFFFTVUgaW5zdGFuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGNsaWNraW5nIG9uICJuZXciLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0IDxmaWxlbmFtZT5UQ0Y8L2ZpbGVuYW1lPiwgd2hpY2ggbWVhbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldCBDb21tdW5pY2F0aW9uIEZyYW1ld29yay48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrICJOZXh0Ii48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsZWFyIG91dCB0aGUgImhvc3QgbmFtZSIgZmllbGQgYW5kIGVudGVyCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgSVAgQWRkcmVzcyBkZXRlcm1pbmVkIGVhcmxpZXIuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiRmluaXNoIiB0byBjbG9zZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIE5ldyBDb25uZWN0aW9ucyBEaWFsb2cuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Vc2UgdGhlIGRyb3AtZG93biBtZW51IG5vdyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICJDb25uZWN0aW9uIiBmaWVsZCBhbmQgcGljayB0aGUgSVAgQWRkcmVzcyB5b3UgZW50ZXJlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrICJEZWJ1ZyIgdG8gYnJpbmcgdXAgYSBsb2dpbiBzY3JlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBsb2dpbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFjY2VwdCB0aGUgZGVidWcgcGVyc3BlY3RpdmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3J1bm5pbmctdXNlci1zcGFjZS10b29scyc+CisgICAgICAgICAgICA8dGl0bGU+UnVubmluZyBVc2VyLVNwYWNlIFRvb2xzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgbWVudGlvbmVkIGVhcmxpZXIgaW4gdGhlIG1hbnVhbCwgc2V2ZXJhbCB0b29scyBleGlzdCB0aGF0CisgICAgICAgICAgICAgICAgZW5oYW5jZSB5b3VyIGRldmVsb3BtZW50IGV4cGVyaWVuY2UuCisgICAgICAgICAgICAgICAgVGhlc2UgdG9vbHMgYXJlIGFpZHMgaW4gZGV2ZWxvcGluZyBhbmQgZGVidWdnaW5nIGFwcGxpY2F0aW9ucworICAgICAgICAgICAgICAgIGFuZCBpbWFnZXMuCisgICAgICAgICAgICAgICAgWW91IGNhbiBydW4gdGhlc2UgdXNlci1zcGFjZSB0b29scyBmcm9tIHdpdGhpbiB0aGUgRWNsaXBzZQorICAgICAgICAgICAgICAgIElERSB0aHJvdWdoIHRoZSAiWW9jdG9Qcm9qZWN0VG9vbHMiIG1lbnUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uY2UgeW91IHBpY2sgYSB0b29sLCB5b3UgbmVlZCB0byBjb25maWd1cmUgaXQgZm9yIHRoZSByZW1vdGUKKyAgICAgICAgICAgICAgICB0YXJnZXQuCisgICAgICAgICAgICAgICAgRXZlcnkgdG9vbCBuZWVkcyB0byBoYXZlIHRoZSBjb25uZWN0aW9uIGNvbmZpZ3VyZWQuCisgICAgICAgICAgICAgICAgWW91IG11c3Qgc2VsZWN0IGFuIGV4aXN0aW5nIFRDRi1iYXNlZCBSU0UgY29ubmVjdGlvbiB0byB0aGUKKyAgICAgICAgICAgICAgICByZW1vdGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgIElmIG9uZSBkb2VzIG5vdCBleGlzdCwgY2xpY2sgIk5ldyIgdG8gY3JlYXRlIG9uZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBzcGVjaWZpY3MgYWJvdXQgdGhlIHJlbW90ZSB0b29sczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5PUHJvZmlsZTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3RpbmcgdGhpcyB0b29sIGNhdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vcHJvZmlsZS1zZXJ2ZXI8L2ZpbGVuYW1lPiBvbiB0aGUgcmVtb3RlCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgdG8gbGF1bmNoIG9uIHRoZSBsb2NhbCBob3N0IG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm9wcm9maWxlLXZpZXdlcjwvZmlsZW5hbWU+IG11c3QgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBvbiB0aGUgbG9jYWwgaG9zdCBtYWNoaW5lIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vcHJvZmlsZS1zZXJ2ZXI8L2ZpbGVuYW1lPiBtdXN0IGJlIGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIHJlbW90ZSB0YXJnZXQsIHJlc3BlY3RpdmVseSwgaW4gb3JkZXIgdG8gdXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgY29tcGlsZSBhbmQgaW5zdGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vcHJvZmlsZS12aWV3ZXI8L2ZpbGVuYW1lPiBmcm9tIHRoZSBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgb24geW91ciBsb2NhbCBob3N0IG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICBGdXJ0aGVybW9yZSwgaW4gb3JkZXIgdG8gY29udmVydCB0aGUgdGFyZ2V0J3Mgc2FtcGxlCisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQgZGF0YSBpbnRvIGEgZm9ybSB0aGF0IHRoZSBob3N0IGNhbiB1c2UsIHlvdSBtdXN0CisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlIE9Qcm9maWxlIHZlcnNpb24gMC45LjQgb3IgZ3JlYXRlciBpbnN0YWxsZWQgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBob3N0LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjYW4gbG9jYXRlIGJvdGggdGhlIHZpZXdlciBhbmQgc2VydmVyIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0L2NnaXQuY2dpL29wcm9maWxldWkvJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gc2V0dGluZyB1cCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoaXMgdG9vbCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19QUk9GX1VSTDsjcHJvZmlsZS1tYW51YWwtb3Byb2ZpbGUnPm9wcm9maWxlPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZworICAgICAgICAgICAgICAgICAgICAgICAgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+VGhlIDxmaWxlbmFtZT5vcHJvZmlsZS1zZXJ2ZXI8L2ZpbGVuYW1lPiBpcworICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIGJ5IGRlZmF1bHQgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvLXNkazwvZmlsZW5hbWU+IGltYWdlLjwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5MdHRuZzIuMCB0cmFjZSBpbXBvcnQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW5nIHRoaXMgdG9vbCB0cmFuc2ZlcnMgdGhlIHJlbW90ZSB0YXJnZXQncworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkx0dG5nPC9maWxlbmFtZT4gdHJhY2luZyBkYXRhIGJhY2sgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBob3N0IG1hY2hpbmUgYW5kIHVzZXMgdGhlIEx0dG5nIEVjbGlwc2UgcGx1Zy1pbgorICAgICAgICAgICAgICAgICAgICAgICAgdG8gZ3JhcGhpY2FsbHkgZGlzcGxheSB0aGUgb3V0cHV0LgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgTHR0bmcgdG8gdHJhY2UgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VlIDx1bGluayB1cmw9J2h0dHA6Ly9sdHRuZy5vcmcvZG9jdW1lbnRhdGlvbic+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19QUk9GX1VSTDsjbHR0bmctbGludXgtdHJhY2UtdG9vbGtpdC1uZXh0LWdlbmVyYXRpb24nPkxUVG5nIChMaW51eCBUcmFjZSBUb29sa2l0LCBuZXh0IGdlbmVyYXRpb24pPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLCB3aGljaCBpcyBpbiB0aGUgWW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBUcmFjaW5nIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPkRvIG5vdCB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+THR0bmctdXNlciBzcGFjZSAobGVnYWN5KTwvZmlsZW5hbWU+IHRvb2wuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB0b29sIG5vIGxvbmdlciBoYXMgYW55IHVwc3RyZWFtIHN1cHBvcnQuPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QmVmb3JlIHlvdSB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+THR0bmcyLjAgdHJhY2UgaW1wb3J0PC9maWxlbmFtZT4gdG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIHNldHVwIHRoZSBMdHRuZyBFY2xpcHNlIHBsdWctaW4gYW5kIGNyZWF0ZSBhCisgICAgICAgICAgICAgICAgICAgICAgICBUcmFjaW5nIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICBEbyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgIk9wZW4gUGVyc3BlY3RpdmUiIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXaW5kb3ciIG1lbnUgYW5kIHRoZW4gc2VsZWN0ICJPdGhlci4uLiIgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJpbmcgdXAgYSBtZW51IG9mIG90aGVyIHBlcnNwZWN0aXZlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hvb3NlICJUcmFjaW5nIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrICJPSyIgdG8gY2hhbmdlIHRoZSBFY2xpcHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNwZWN0aXZlIGludG8gdGhlIFRyYWNpbmcgcGVyc3BlY3RpdmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DcmVhdGUgYSBuZXcgVHJhY2luZyBwcm9qZWN0IGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGluZyAiUHJvamVjdCIgZnJvbSB0aGUgIkZpbGUgLT4gTmV3IiBtZW51LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2hvb3NlICJUcmFjaW5nIFByb2plY3QiIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUcmFjaW5nIiBtZW51IGFuZCBjbGljayAiTmV4dCIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Qcm92aWRlIGEgbmFtZSBmb3IgeW91ciB0cmFjaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3QgYW5kIGNsaWNrICJGaW5pc2giLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R2VuZXJhdGUgeW91ciB0cmFjaW5nIGRhdGEgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZSB0YXJnZXQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlbGVjdCAiTHR0bmcyLjAgdHJhY2UgaW1wb3J0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSAiWW9jdG8gUHJvamVjdCBUb29scyIgbWVudSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCB0aGUgZGF0YSBpbXBvcnQgcHJvY2Vzcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U3BlY2lmeSB5b3VyIHJlbW90ZSBjb25uZWN0aW9uIG5hbWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Gb3IgdGhlIFVzdCBkaXJlY3RvcnkgcGF0aCwgc3BlY2lmeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbG9jYXRpb24gb2YgeW91ciByZW1vdGUgdHJhY2luZyBkYXRhLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlIHN1cmUgdGhlIGxvY2F0aW9uIGVuZHMgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dXN0PC9maWxlbmFtZT4gKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvbXlzZXNzaW9uL3VzdDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrICJPSyIgdG8gY29tcGxldGUgdGhlIGltcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGF0YSBpcyBub3cgaW4gdGhlIGxvY2FsIHRyYWNpbmcgcHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3UgY3JlYXRlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UmlnaHQgY2xpY2sgb24gdGhlIGRhdGEgYW5kIHRoZW4gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtZW51IHRvIFNlbGVjdCAiR2VuZXJpYyBDVEYgVHJhY2UiIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUcmFjZSBUeXBlLi4uIC0+IENvbW1vbiBUcmFjZSBGb3JtYXQiIG1lbnUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwIHRoZSB0cmFjaW5nIHR5cGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJpZ2h0IGNsaWNrIHRoZSBtb3VzZSBhbmQgc2VsZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPcGVuIiB0byBicmluZyB1cCB0aGUgRWNsaXBzZSBMdHRuZyBUcmFjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3ZXIgc28geW91IHZpZXcgdGhlIHRyYWNpbmcgZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5Qb3dlclRPUDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3RpbmcgdGhpcyB0b29sIHJ1bnMgUG93ZXJUT1Agb24gdGhlIHJlbW90ZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgYW5kIGRpc3BsYXlzIHRoZSByZXN1bHRzIGluIGEgbmV3IHZpZXcgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICBQb3dlclRPUC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgIlRpbWUgdG8gZ2F0aGVyIGRhdGEoc2VjKToiIGZpZWxkIGlzIHRoZSB0aW1lCisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzZWQgaW4gc2Vjb25kcyBiZWZvcmUgZGF0YSBpcyBnYXRoZXJlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlIHRhcmdldCBmb3IgYW5hbHlzaXMuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlICJzaG93IHBpZHMgaW4gd2FrZXVwcyBsaXN0OiIgZmllbGQgY29ycmVzcG9uZHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSA8ZmlsZW5hbWU+LXA8L2ZpbGVuYW1lPiBhcmd1bWVudCBwYXNzZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5Qb3dlclRPUDwvZmlsZW5hbWU+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5MYXRlbmN5VE9QIGFuZCBQZXJmPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIExhdGVuY3lUT1AgaWRlbnRpZmllcyBzeXN0ZW0gbGF0ZW5jeSwgd2hpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIFBlcmYgbW9uaXRvcnMgdGhlIHN5c3RlbSdzIHBlcmZvcm1hbmNlIGNvdW50ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVycy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGluZyBlaXRoZXIgb2YgdGhlc2UgdG9vbHMgY2F1c2VzIGFuIFJTRSB0ZXJtaW5hbAorICAgICAgICAgICAgICAgICAgICAgICAgdmlldyB0byBhcHBlYXIgZnJvbSB3aGljaCB5b3UgY2FuIHJ1biB0aGUgdG9vbHMuCisgICAgICAgICAgICAgICAgICAgICAgICBCb3RoIHRvb2xzIHJlZnJlc2ggdGhlIGVudGlyZSBzY3JlZW4gdG8gZGlzcGxheSByZXN1bHRzCisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSB0aGV5IHJ1bi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHNldHRpbmcgdXAgYW5kIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGVyZjwvZmlsZW5hbWU+LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUFJPRl9VUkw7I3Byb2ZpbGUtbWFudWFsLXBlcmYnPnBlcmY8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUHJvZmlsaW5nIGFuZCBUcmFjaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+U3lzdGVtVGFwPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbXRhcCBpcyBhIHRvb2wgdGhhdCBsZXRzIHlvdSBjcmVhdGUgYW5kIHJldXNlCisgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRzIHRvIGV4YW1pbmUgdGhlIGFjdGl2aXRpZXMgb2YgYSBsaXZlIExpbnV4CisgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGVhc2lseSBleHRyYWN0LCBmaWx0ZXIsIGFuZCBzdW1tYXJpemUgZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBoZWxwcyB5b3UgZGlhZ25vc2UgY29tcGxleCBwZXJmb3JtYW5jZSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25hbCBwcm9ibGVtcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHNldHRpbmcgdXAgYW5kIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U3lzdGVtVGFwPC9maWxlbmFtZT4sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vc291cmNld2FyZS5vcmcvc3lzdGVtdGFwL2RvY3VtZW50YXRpb24uaHRtbCc+U3lzdGVtVGFwIERvY3VtZW50YXRpb248L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT55b2N0by1ic3A8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT55b2N0by1ic3A8L2ZpbGVuYW1lPiB0b29sIGxldHMgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBxdWlja2x5IHNldCB1cCBhIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0b29sIHJlcXVpcmVzIGEgTWV0YWRhdGEgbG9jYXRpb24sIGJ1aWxkIGxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgQlNQIG5hbWUsIEJTUCBvdXRwdXQgbG9jYXRpb24sIGFuZCBhIGtlcm5lbAorICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG8tYnNwPC9maWxlbmFtZT4gdG9vbCBvdXRzaWRlIG9mIEVjbGlwc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjY3JlYXRpbmctYS1uZXctYnNwLWxheWVyLXVzaW5nLXRoZS15b2N0by1ic3Atc2NyaXB0Jz5DcmVhdGluZyBhIG5ldyBCU1AgTGF5ZXIgVXNpbmcgdGhlIHlvY3RvLWJzcCBTY3JpcHQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3dvcmtmbG93LXVzaW5nLXN0YW5kLWFsb25lLWNyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbnMnPgorICAgICAgICA8dGl0bGU+V29ya2Zsb3cgVXNpbmcgU3RhbmQtQWxvbmUgQ3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBkZXZlbG9wIGFuIGFwcGxpY2F0aW9uIHdpdGhvdXQgcHJpb3IgaW5zdGFsbGF0aW9uCisgICAgICAgICAgICBvZiB0aGUgQURULCB5b3Ugc3RpbGwgY2FuIGVtcGxveSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbic+Q3Jvc3MgRGV2ZWxvcG1lbnQgVG9vbGNoYWluPC9saW5rPiwKKyAgICAgICAgICAgIHRoZSBRRU1VIGVtdWxhdG9yLCBhbmQgYSBudW1iZXIgb2Ygc3VwcG9ydGVkICB0YXJnZXQgaW1hZ2UgZmlsZXMuCisgICAgICAgICAgICBZb3UganVzdCBuZWVkIHRvIGZvbGxvdyB0aGVzZSBnZW5lcmFsIHN0ZXBzOgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW5zdGFsbCB0aGUgY3Jvc3MtZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluIGZvciB5b3VyIHRhcmdldCBoYXJkd2FyZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGluc3RhbGwgdGhlIHRvb2xjaGFpbiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjdXNpbmctYW4tZXhpc3RpbmctdG9vbGNoYWluLXRhcmJhbGwnPlVzaW5nIGEgQ3Jvc3MtVG9vbGNoYWluIFRhcmJhbGw8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncworICAgICAgICAgICAgICAgICAgICBHdWlkZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRvd25sb2FkIHRoZSBUYXJnZXQgSW1hZ2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3Qgc3VwcG9ydHMgc2V2ZXJhbCB0YXJnZXQgYXJjaGl0ZWN0dXJlcworICAgICAgICAgICAgICAgICAgICBhbmQgaGFzIG1hbnkgcHJlLWJ1aWx0IGtlcm5lbCBpbWFnZXMgYW5kIHJvb3QgZmlsZXN5c3RlbQorICAgICAgICAgICAgICAgICAgICBpbWFnZXMuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3UgYXJlIGdvaW5nIHRvIGRldmVsb3AgeW91ciBhcHBsaWNhdGlvbiBvbgorICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZSwgZ28gdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19NQUNISU5FU19ETF9VUkw7Jz48ZmlsZW5hbWU+bWFjaGluZXM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkIGFyZWEgYW5kIGNob29zZSBhIHRhcmdldCBtYWNoaW5lIGFyZWEKKyAgICAgICAgICAgICAgICAgICAgZnJvbSB3aGljaCB0byBkb3dubG9hZCB0aGUga2VybmVsIGltYWdlIGFuZCByb290IGZpbGVzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgZG93bmxvYWQgYXJlYSBjb3VsZCBoYXZlIHNldmVyYWwgZmlsZXMgaW4gaXQgdGhhdAorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IGRldmVsb3BtZW50IHVzaW5nIGFjdHVhbCBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBhcmVhIG1pZ2h0IGNvbnRhaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5oZGRpbWc8L2ZpbGVuYW1lPiBmaWxlcyB0aGF0IGNvbWJpbmUgdGhlCisgICAgICAgICAgICAgICAgICAgIGtlcm5lbCBpbWFnZSB3aXRoIHRoZSBmaWxlc3lzdGVtLCBib290IGxvYWRlcnMsIGFuZAorICAgICAgICAgICAgICAgICAgICBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBnZXQgdGhlIGZpbGVzIHlvdSBuZWVkIGZvciB5b3VyIHBhcnRpY3VsYXIKKyAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgcHJvY2Vzcy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBhcmUgZ29pbmcgdG8gZGV2ZWxvcCB5b3VyIGFwcGxpY2F0aW9uIGFuZAorICAgICAgICAgICAgICAgICAgICB0aGVuIHJ1biBhbmQgdGVzdCBpdCB1c2luZyB0aGUgUUVNVSBlbXVsYXRvciwgZ28gdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19RRU1VX0RMX1VSTDsnPjxmaWxlbmFtZT5tYWNoaW5lcy9xZW11PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBkb3dubG9hZCBhcmVhLgorICAgICAgICAgICAgICAgICAgICBGcm9tIHRoaXMgYXJlYSwgZ28gZG93biBpbnRvIHRoZSBkaXJlY3RvcnkgZm9yIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoZS5nLiA8ZmlsZW5hbWU+cWVtdXg4Nl82NDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZvciBhbiA8dHJhZGVtYXJrIGNsYXNzPSdyZWdpc3RlcmVkJz5JbnRlbDwvdHJhZGVtYXJrPi1iYXNlZAorICAgICAgICAgICAgICAgICAgICA2NC1iaXQgYXJjaGl0ZWN0dXJlKS4KKyAgICAgICAgICAgICAgICAgICAgRG93bmxvYWQga2VybmVsLCByb290IGZpbGVzeXN0ZW0sIGFuZCBhbnkgb3RoZXIgZmlsZXMgeW91CisgICAgICAgICAgICAgICAgICAgIG5lZWQgZm9yIHlvdXIgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+SW4gb3JkZXIgdG8gdXNlIHRoZSByb290IGZpbGVzeXN0ZW0gaW4gUUVNVSwgeW91CisgICAgICAgICAgICAgICAgICAgIG5lZWQgdG8gZXh0cmFjdCBpdC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjZXh0cmFjdGluZy10aGUtcm9vdC1maWxlc3lzdGVtJz5FeHRyYWN0aW5nIHRoZSBSb290IEZpbGVzeXN0ZW08L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGV4dHJhY3QgdGhlIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbS48L25vdGU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5EZXZlbG9wIGFuZCBUZXN0IHlvdXIKKyAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb246PC9lbXBoYXNpcz4gIEF0IHRoaXMgcG9pbnQsIHlvdSBoYXZlIHRoZSB0b29scworICAgICAgICAgICAgICAgICAgICB0byBkZXZlbG9wIHlvdXIgYXBwbGljYXRpb24uCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIHNlcGFyYXRlbHkgaW5zdGFsbCBhbmQgdXNlIHRoZSBRRU1VCisgICAgICAgICAgICAgICAgICAgIGVtdWxhdG9yLCB5b3UgY2FuIGdvIHRvCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93aWtpLnFlbXUub3JnL01haW5fUGFnZSc+UUVNVSBIb21lIFBhZ2U8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB0byBkb3dubG9hZCBhbmQgbGVhcm4gYWJvdXQgdGhlIGVtdWxhdG9yLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2Rldi1tYW51YWwtcWVtdSc+VXNpbmcgdGhlIFF1aWNrIEVNVWxhdG9yIChRRU1VKTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIGNoYXB0ZXIgZm9yIGluZm9ybWF0aW9uIG9uIHVzaW5nIFFFTVUgd2l0aGluIHRoZSBZb2N0bworICAgICAgICAgICAgICAgICAgICBQcm9qZWN0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImRldi1tb2RpZnlpbmctc291cmNlLWNvZGUiPgorICAgIDx0aXRsZT5Nb2RpZnlpbmcgU291cmNlIENvZGU8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEEgY29tbW9uIGRldmVsb3BtZW50IHdvcmtmbG93IGNvbnNpc3RzIG9mIG1vZGlmeWluZyBwcm9qZWN0IHNvdXJjZQorICAgICAgICBmaWxlcyB0aGF0IGFyZSBleHRlcm5hbCB0byB0aGUgWW9jdG8gUHJvamVjdCBhbmQgdGhlbiBpbnRlZ3JhdGluZworICAgICAgICB0aGF0IHByb2plY3QncyBidWlsZCBvdXRwdXQgaW50byBhbiBpbWFnZSBidWlsdCB1c2luZyB0aGUKKyAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgR2l2ZW4gdGhpcyBzY2VuYXJpbywgZGV2ZWxvcG1lbnQgZW5naW5lZXJzIHR5cGljYWxseSB3YW50IHRvIHN0aWNrCisgICAgICAgIHRvIHRoZWlyIGZhbWlsaWFyIHByb2plY3QgZGV2ZWxvcG1lbnQgdG9vbHMgYW5kIG1ldGhvZHMsIHdoaWNoIGFsbG93cworICAgICAgICB0aGVtIHRvIGp1c3QgZm9jdXMgb24gdGhlIHByb2plY3QuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFNldmVyYWwgd29ya2Zsb3dzIGV4aXN0IHRoYXQgYWxsb3cgeW91IHRvIGRldmVsb3AsIGJ1aWxkLCBhbmQgdGVzdAorICAgICAgICBjb2RlIHRoYXQgaXMgZ29pbmcgdG8gYmUgaW50ZWdyYXRlZCBpbnRvIGFuIGltYWdlIGJ1aWx0IHVzaW5nIHRoZQorICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHR3bzoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEEgc2V0IG9mIHRvb2xzIHRvIGFpZCBpbiB3b3JraW5nIG9uIHRoZSBzb3VyY2UgY29kZSBidWlsdCBieQorICAgICAgICAgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgIFNlY3Rpb24KKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmctZGV2dG9vbC1pbi15b3VyLXdvcmtmbG93Jz5Vc2luZyA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGluIFlvdXIgV29ya2Zsb3c8L2xpbms+IgorICAgICAgICAgICAgICAgIGRlc2NyaWJlcyB0aGlzIHdvcmtmbG93LgorICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IG1vcmUgaW5mb3JtYXRpb24gdGhhdCBzaG93Y2FzZXMgdGhlIHdvcmtmbG93LCBjbGljaworICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vZHJpdmUuZ29vZ2xlLmNvbS9hL2xpbmFyby5vcmcvZmlsZS9kLzBCM0tHelk1Zlc3bGFURFZ4VVhvM1VEUnZkMnMvdmlldyc+aGVyZTwvdWxpbms+CisgICAgICAgICAgICAgICAgZm9yIGFuIGV4Y2VsbGVudCBwcmVzZW50YXRpb24gYnkgVHJldm9yIFdvZXJuZXIgdGhhdAorICAgICAgICAgICAgICAgIHByb3ZpZGVzIGRldGFpbGVkIGJhY2tncm91bmQgaW5mb3JtYXRpb24gYW5kIGEgY29tcGxldGUKKyAgICAgICAgICAgICAgICB3b3JraW5nIHR1dG9yaWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48dWxpbmsgdXJsPSdodHRwOi8vc2F2YW5uYWgubm9uZ251Lm9yZy9wcm9qZWN0cy9xdWlsdCc+UXVpbHQ8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEEgcG93ZXJmdWwgdG9vbCB0aGF0IGFsbG93cyB5b3UgdG8gY2FwdHVyZSBzb3VyY2UKKyAgICAgICAgICAgICAgICBjb2RlIGNoYW5nZXMgd2l0aG91dCBoYXZpbmcgYSBjbGVhbiBzb3VyY2UgdHJlZS4KKyAgICAgICAgICAgICAgICBXaGlsZSBRdWlsdCBpcyBub3QgdGhlIHByZWZlcnJlZCB3b3JrZmxvdyBvZiB0aGUgdHdvLCB0aGlzCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbmNsdWRlcyBpdCBmb3IgdXNlcnMgdGhhdCBhcmUgY29tbWl0dGVkIHRvIHVzaW5nCisgICAgICAgICAgICAgICAgdGhlIHRvb2wuCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1hLXF1aWx0LXdvcmtmbG93Jz5Vc2luZyBRdWlsdCBpbiBZb3VyIFdvcmtmbG93PC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmctZGV2dG9vbC1pbi15b3VyLXdvcmtmbG93Jz4KKyAgICAgICAgPHRpdGxlPlVzaW5nIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gaW4gWW91ciBXb3JrZmxvdzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyBtZW50aW9uZWQgZWFybGllciwgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBoZWxwcworICAgICAgICAgICAgeW91IGVhc2lseSBkZXZlbG9wIHByb2plY3RzIHdob3NlIGJ1aWxkIG91dHB1dCBtdXN0IGJlIHBhcnQgb2YKKyAgICAgICAgICAgIGFuIGltYWdlIGJ1aWx0IHVzaW5nIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIHNlY3Rpb24gcHJlc2VudHMgdGhlIHdvcmtmbG93IHlvdSB3b3VsZAorICAgICAgICAgICAgdXNlIHRoYXQgaW5jbHVkZXMgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDxmb290bm90ZT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgS3Vkb3MgYW5kIHRoYW5rcyB0bworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdtYWlsdG86dHdvZXJuZXJAZ21haWwuY29tJz5UcmV2b3IgV29lcm5lcjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHdob3NlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPSdodHRwczovL2RyaXZlLmdvb2dsZS5jb20vZmlsZS9kLzBCM0tHelk1Zlc3bGFURFZ4VVhvM1VEUnZkMnMvdmlldyc+WW9jdG8gUHJvamVjdCBEZXZlbG9wZXIgV29ya2Zsb3cgVHV0b3JpYWw8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgcGFwZXIgY29udHJpYnV0ZWQgbmljZWx5IHRvd2FyZHMgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2Zvb3Rub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgc3RlcHMgaW4gdGhpcyBzZWN0aW9uIGFzc3VtZSB5b3UgaGF2ZSBhIHByZXZpb3VzbHkgYnVpbHQKKyAgICAgICAgICAgIGltYWdlIHRoYXQgaXMgYWxyZWFkeSBlaXRoZXIgcnVubmluZyBpbiBRRU1VIG9yIHJ1bm5pbmcgb24gYWN0dWFsCisgICAgICAgICAgICBoYXJkd2FyZS4KKyAgICAgICAgICAgIEFsc28sIGl0IGlzIGFzc3VtZWQgdGhhdCBmb3IgZGVwbG95bWVudCBvZiB0aGUgaW1hZ2UgdG8gdGhlCisgICAgICAgICAgICB0YXJnZXQsIFNTSCBpcyBpbnN0YWxsZWQgaW4gdGhlIGltYWdlIGFuZCBpZiB0aGUgaW1hZ2UgaXMgcnVubmluZworICAgICAgICAgICAgb24gcmVhbCBoYXJkd2FyZSB0aGF0IHlvdSBoYXZlIG5ldHdvcmsgYWNjZXNzIHRvIGFuZCBmcm9tIHlvdXIKKyAgICAgICAgICAgIGRldmVsb3BtZW50IG1hY2hpbmUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXBkYXRlLXlvdXItZXh0ZXJuYWwtc291cmNlJz4KKyAgICAgICAgICAgIDx0aXRsZT5VcGRhdGUgWW91ciBFeHRlcm5hbCBTb3VyY2U8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBQYXJ0IG9mIHRoZSBkZXZlbG9wbWVudCBmbG93IHVzaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBvZiBjb3Vyc2UgaW52b2x2ZXMgdXBkYXRpbmcKKyAgICAgICAgICAgICAgICB5b3VyIHNvdXJjZSBmaWxlcy4KKyAgICAgICAgICAgICAgICBTZXZlcmFsIG9wcG9ydHVuaXRpZXMgZXhpc3QgaW4gdGhlIHdvcmtmbG93IHRvIGV4dHJhY3QgYW5kCisgICAgICAgICAgICAgICAgd29yayBvbiB0aGUgZmlsZXMuCisgICAgICAgICAgICAgICAgRm9yIG5vdywganVzdCByZWFsaXplIHRoYXQgeW91IG5lZWQgdG8gYmUgYWJsZSB0byBoYXZlCisgICAgICAgICAgICAgICAgYWNjZXNzIHRvIGFuZCBlZGl0IGZpbGVzLgorICAgICAgICAgICAgICAgIE9uZSBvYnZpb3VzIHNvbHV0aW9uIGlzIHRvIGluaXRpYWxseSBleHRyYWN0IHRoZSBjb2RlIGludG8gYW4KKyAgICAgICAgICAgICAgICBpc29sYXRlZCBhcmVhIGluIHByZXBhcmF0aW9uIGZvciBtb2RpZmljYXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFub3RoZXIgb3B0aW9uIGlzIHRvIHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBtYWtlcyB1c2Ugb2YgYSAid29ya3NwYWNlIiBsYXllciB3aGVyZSBtdWNoIG9mCisgICAgICAgICAgICAgICAgdGhlIHRyYW5zaXRpb25hbCB3b3JrIG9jY3Vycywgd2hpY2ggaXMgbmVlZGVkIGZvciBzZXR0aW5nIHVwCisgICAgICAgICAgICAgICAgTWV0YWRhdGEgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0aGF0IGxldHMgeW91CisgICAgICAgICAgICAgICAgYnVpbGQgeW91ciBzb2Z0d2FyZS4KKyAgICAgICAgICAgICAgICBPcHRpb25zIChpLmUuICIteCIpIGV4aXN0IHVzaW5nIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB0aGF0IGVuYWJsZSB5b3UgdG8gdXNlIHRoZSB0b29sIHRvIGV4dHJhY3Qgc291cmNlIGNvZGUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNlLWRldnRvb2wtdG8taW50ZWdyYXRlLXlvdXItY29kZS13aXRoLXRoZS1pbWFnZSc+CisgICAgICAgICAgICA8dGl0bGU+VXNlIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IHRvIEludGVncmF0ZSBZb3VyIENvZGUgd2l0aCB0aGUgSW1hZ2U8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gY29tbWFuZCBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgICAgZ2VuZXJhdGVzIHRoZSBuZWVkZWQgTWV0YWRhdGEgdGhhdCBhbGxvd3MgdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSB0byBidWlsZCB5b3VyIGNvZGUgaW50byB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIElmIGEgcGFja2FnZSBvciBwYWNrYWdlcyBwcm9kdWNlZCBieSB0aGUgcmVjaXBlIG9uIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIHlvdSBhcmUgd29ya2luZyBhcmUgbm90IGFscmVhZHkgaW4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlNQUdFX0lOU1RBTEwnPjxmaWxlbmFtZT5JTUFHRV9JTlNUQUxMPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGltYWdlLCB5b3UgbXVzdCBhZGQgdGhlbS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IGNvbW1hbmQgZG9lcyBub3QKKyAgICAgICAgICAgICAgICAgICAgYWRkIHRoZW0gZm9yIHlvdS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBmb3JtOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIGFkZCA8cmVwbGFjZWFibGU+eW91ci1wcm9qZWN0LW5hbWU8L3JlcGxhY2VhYmxlPiZuYnNwOzxyZXBsYWNlYWJsZT5wYXRoLXRvLXNvdXJjZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBSdW5uaW5nIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gZm9yIHRoZSBmaXJzdCB0aW1lCisgICAgICAgICAgICAgICAgY3JlYXRlcyBhIHdvcmtzcGFjZSBsYXllciB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSB0aGF0CisgICAgICAgICAgICAgICAgaXMgYmFzZWQgb24geW91ciBwcm9qZWN0J3MgbG9jYXRpb246CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+cGF0aC10by1zb3VyY2U8L3JlcGxhY2VhYmxlPi88cmVwbGFjZWFibGU+YnVpbGQtZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT4vPHJlcGxhY2VhYmxlPndvcmtzcGFjZS1sYXllcjwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBuYW1lIG9mIHRoZSB3b3Jrc3BhY2UgbGF5ZXIgaXMgIndvcmtzcGFjZSIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBkZXRhaWxzIG9uIHRoZSB3b3Jrc3BhY2UgbGF5ZXIgY3JlYXRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+YnVpbGQtZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT4sCisgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdkZXZ0b29sLWFkZGluZy1hLW5ldy1yZWNpcGUtdG8tdGhlLXdvcmtzcGFjZSc+QWRkaW5nIGEgTmV3IFJlY2lwZSB0byB0aGUgV29ya3NwYWNlIExheWVyPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCis8IS0tCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPZiBjb3Vyc2UsIGVhY2ggbGF5ZXIgbXVzdCBoYXZlIGEKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGFsc28gY3JlYXRlcyB0aGlzIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICBmaWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjYXQgd29ya3NwYWNlL2NvbmYvbGF5ZXIuY29uZgorICAgICAjICMjIyB3b3Jrc3BhY2UgbGF5ZXIgYXV0b8KtZ2VuZXJhdGVkIGJ5IGRldnRvb2wgIyMjCisgICAgIEJCUEFUSCA9LiAiJHtMQVlFUkRJUn06IgorICAgICBCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLyovKi5iYiBcCisgICAgICAgICAgICAgICAgICR7TEFZRVJESVJ9L2FwcGVuZHMvKi5iYmFwcGVuZCIKKyAgICAgQkJGSUxFX0NPTExFQ1RJT05TICs9ICJ3b3Jrc3BhY2VsYXllciIKKyAgICAgQkJGSUxFX1BBVFRFUk5fd29ya3NwYWNlbGF5ZXIgPSAiXiR7TEFZRVJESVJ9LyIKKyAgICAgQkJGSUxFX1BBVFRFUk5fSUdOT1JFX0VNUFRZX3dvcmtzcGFjZWxheWVyID0gIjEiCisgICAgIEJCRklMRV9QUklPUklUWV93b3Jrc3BhY2VsYXllciA9ICI5OSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CistLT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUnVubmluZyA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgICAgZ2VuZXJhdGVzIHlvdXIgcmVjaXBlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjYXQgd29ya3NwYWNlL3JlY2lwZXMvPHJlcGxhY2VhYmxlPnlvdXItcHJvamVjdC1uYW1lPC9yZXBsYWNlYWJsZT4vPHJlcGxhY2VhYmxlPnlvdXItcHJvamVjdC1uYW1lPC9yZXBsYWNlYWJsZT4uYmIKKyAgICAgIyBSZWNpcGUgY3JlYXRlZCBieSByZWNpcGV0b29sCisgICAgICMgVGhpcyBpcyB0aGUgYmFzaXMgb2YgYSByZWNpcGUgYW5kIG1heSBuZWVkIGZ1cnRoZXIgZWRpdGluZyBpbiBvcmRlciB0byBiZSBmdWxseSBmdW5jdGlvbmFsLgorICAgICAjIChGZWVsIGZyZWUgdG8gcmVtb3ZlIHRoZXNlIGNvbW1lbnRzIHdoZW4gZWRpdGluZy4pCisgICAgICMKKyAgICAgIyBVbmFibGUgdG8gZmluZCBhbnkgZmlsZXMgdGhhdCBsb29rZWQgbGlrZSBsaWNlbnNlIHN0YXRlbWVudHMuIENoZWNrIHRoZSBhY2NvbXBhbnlpbmcKKyAgICAgIyBkb2N1bWVudGF0aW9uIGFuZCBzb3VyY2UgaGVhZGVycyBhbmQgc2V0IExJQ0VOU0UgYW5kIExJQ19GSUxFU19DSEtTVU0gYWNjb3JkaW5nbHkuCisgICAgIExJQ0VOU0UgPSAiQ0xPU0VEIgorICAgICBMSUNfRklMRVNfQ0hLU1VNID0gIiIKKworICAgICAjIE5vIGluZm9ybWF0aW9uIGZvciBTUkNfVVJJIHlldCAob25seSBhbiBleHRlcm5hbCBzb3VyY2UgdHJlZSB3YXMKKyAgICAgIyBzcGVjaWZpZWQpCisgICAgIFNSQ19VUkkgPSAiIgorCisgICAgIERFUEVORFMgPSAibGlieDExIgorICAgICAjIE5PVEU6IGlmIHRoaXMgc29mdHdhcmUgaXMgbm90IGNhcGFibGUgb2YgYmVpbmcgYnVpbHQgaW4gYSBzZXBhcmF0ZSBidWlsZCBkaXJlY3RvcnkKKyAgICAgIyBmcm9tIHRoZSBzb3VyY2UsIHlvdSBzaG91bGQgcmVwbGFjZSBhdXRvdG9vbHMgd2l0aCBhdXRvdG9vbHPCrS1icm9rZW5zZXAgaW4gdGhlCisgICAgICMgaW5oZXJpdCBsaW5lCisgICAgIGluaGVyaXQgYXV0b3Rvb2xzCisKKyAgICAgIyBTcGVjaWZ5IGFueSBvcHRpb25zIHlvdSB3YW50IHRvIHBhc3MgdG8gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgdXNpbmcgRVhUUkFfT0VDT05GOgorICAgICBFWFRSQV9PRUNPTkYgPSAiIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTGFzdGx5LCB0aGUgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gY29tbWFuZCBjcmVhdGVzIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjYXQgd29ya3NwYWNlL2FwcGVuZHMvPHJlcGxhY2VhYmxlPnlvdXItcHJvamVjdC1uYW1lPC9yZXBsYWNlYWJsZT4uYmJhcHBlbmQKKyAgICAgaW5oZXJpdCBleHRlcm5hbHNyYworICAgICBFWFRFUk5BTFNSQyA9ICIvPHJlcGxhY2VhYmxlPnBhdGgtdG8tc291cmNlPC9yZXBsYWNlYWJsZT4vPHJlcGxhY2VhYmxlPnlvdXItcHJvamVjdC1uYW1lPC9yZXBsYWNlYWJsZT4iCisKKyAgICAgIyBpbml0aWFsX3JldjogPHJlcGxhY2VhYmxlPmNvbW1pdC1JRDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2J1aWxkLXlvdXItcHJvamVjdCc+CisgICAgICAgICAgICA8dGl0bGU+QnVpbGQgWW91ciBQcm9qZWN0PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgQml0QmFrZSBvciA8ZmlsZW5hbWU+ZGV2dG9vbCBidWlsZDwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAgICAgYnVpbGQgeW91ciBtb2RpZmllZCBwcm9qZWN0LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyB1c2UgQml0QmFrZSwgdXNlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgPHJlcGxhY2VhYmxlPnlvdXItcHJvamVjdC1uYW1lPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCBidWlsZDwvZmlsZW5hbWU+LCB3aGljaCBpcyBlcXVpdmFsZW50IHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UgLWMgcG9wdWxhdGVfc3lzcm9vdDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIGJ1aWxkIDxyZXBsYWNlYWJsZT55b3VyLXByb2plY3QtbmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKzwhLS0KKyAgICAgICAgPHNlY3Rpb24gaWQ9J2Rldi1idWlsZC10aGUtaW1hZ2UnPgorICAgICAgICAgICAgPHRpdGxlPkJ1aWxkIHRoZSBJbWFnZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmaW5hbCBzdGVwIGJlZm9yZSB0ZXN0aW5nIGlzIHRvIHJlYnVpbGQgdGhlIGJhc2UgaW1hZ2UKKyAgICAgICAgICAgICAgICB3aXRoIHlvdXIgcHJvamVjdCBjaGFuZ2VzIGFzIHBhcnQgb2YgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgIFNpbXBseSBydW4gQml0QmFrZSBhZ2FpbiBvbiB5b3VyIGltYWdlLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSA8cmVwbGFjZWFibGU+aW1hZ2U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdkZXYtdGVzdGluZy10aGUtaW1hZ2UnPgorICAgICAgICAgICAgPHRpdGxlPlRlc3RpbmcgdGhlIEltYWdlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSB0aGUgaW1hZ2UsIHlvdSBjYW4gdGVzdCBpdCB1c2luZyBRRU1VLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBhc3N1bWluZyAicWVtdXg4NiI6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHJ1bnFlbXUgcWVtdXg4NiA8cmVwbGFjZWFibGU+aW1hZ2U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHRlc3QgYW4gaW1hZ2UgdXNpbmcgUUVNVSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdkZXYtbWFudWFsLXFlbXUnPlVzaW5nIHRoZSBRdWljayBFTVVsYXRvciAoUUVNVSk8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKy0tPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLXF1aWNrLXJlZmVyZW5jZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IFF1aWNrIFJlZmVyZW5jZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGhhcyBtb3JlIGZ1bmN0aW9uYWxpdHkgdGhhbiBzaW1wbHkKKyAgICAgICAgICAgIGFkZGluZyBhIG5ldyByZWNpcGUgYW5kIHRoZSBzdXBwb3J0aW5nIE1ldGFkYXRhIHRvIGEgdGVtcG9yYXJ5CisgICAgICAgICAgICB3b3Jrc3BhY2UgbGF5ZXIuCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgYSBzaG9ydCByZWZlcmVuY2Ugb24KKyAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gZm9yIG1vc3Qgb2YgdGhlIGNvbW1hbmRzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtZ2V0dGluZy1oZWxwJz4KKyAgICAgICAgICAgIDx0aXRsZT5HZXR0aW5nIEhlbHA8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZWFzaWVzdCB3YXkgdG8gZ2V0IGhlbHAgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGNvbW1hbmQgaXMgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi0taGVscDwvZmlsZW5hbWU+IG9wdGlvbjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZGV2dG9vbCAtLWhlbHAKKyAgICAgdXNhZ2U6IGRldnRvb2wgWy1oXSBbLS1iYXNlcGF0aCBCQVNFUEFUSF0gWy1kXSBbLXFdIFstLWNvbG9yIENPTE9SXQorICAgICAgICAgICAgICAgJmx0O3N1YmNvbW1hbmQmZ3Q7IC4uLgorCisgICAgIE9wZW5FbWJlZGRlZCBkZXZlbG9wbWVudCB0b29sCisKKyAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgIC1oLCAtLWhlbHAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAtLWJhc2VwYXRoIEJBU0VQQVRIICBCYXNlIGRpcmVjdG9yeSBvZiBTREsgLyBidWlsZCBkaXJlY3RvcnkKKyAgICAgICAtZCwgLS1kZWJ1ZyAgICAgICAgICBFbmFibGUgZGVidWcgb3V0cHV0CisgICAgICAgLXEsIC0tcXVpZXQgICAgICAgICAgUHJpbnQgb25seSBlcnJvcnMKKyAgICAgICAtLWNvbG9yIENPTE9SICAgICAgICBDb2xvcml6ZSBvdXRwdXQgKHdoZXJlIENPTE9SIGlzIGF1dG8sIGFsd2F5cywgbmV2ZXIpCisKKyAgICAgc3ViY29tbWFuZHM6CisgICAgICAgJmx0O3N1YmNvbW1hbmQmZ3Q7CisgICAgICAgICBjcmVhdGUtd29ya3NwYWNlICAgU2V0IHVwIGEgd29ya3NwYWNlCisgICAgICAgICBkZXBsb3ktdGFyZ2V0ICAgICAgRGVwbG95IHJlY2lwZSBvdXRwdXQgZmlsZXMgdG8gbGl2ZSB0YXJnZXQgbWFjaGluZQorICAgICAgICAgdW5kZXBsb3ktdGFyZ2V0ICAgIFVuZGVwbG95IHJlY2lwZSBvdXRwdXQgZmlsZXMgaW4gbGl2ZSB0YXJnZXQgbWFjaGluZQorICAgICAgICAgYWRkICAgICAgICAgICAgICAgIEFkZCBhIG5ldyByZWNpcGUKKyAgICAgICAgIG1vZGlmeSAgICAgICAgICAgICBNb2RpZnkgdGhlIHNvdXJjZSBmb3IgYW4gZXhpc3RpbmcgcmVjaXBlCisgICAgICAgICBleHRyYWN0ICAgICAgICAgICAgRXh0cmFjdCB0aGUgc291cmNlIGZvciBhbiBleGlzdGluZyByZWNpcGUKKyAgICAgICAgIHVwZGF0ZS1yZWNpcGUgICAgICBBcHBseSBjaGFuZ2VzIGZyb20gZXh0ZXJuYWwgc291cmNlIHRyZWUgdG8gcmVjaXBlCisgICAgICAgICBzdGF0dXMgICAgICAgICAgICAgU2hvdyB3b3Jrc3BhY2Ugc3RhdHVzCisgICAgICAgICBidWlsZCAgICAgICAgICAgICAgQnVpbGQgYSByZWNpcGUKKyAgICAgICAgIHJlc2V0ICAgICAgICAgICAgICBSZW1vdmUgYSByZWNpcGUgZnJvbSB5b3VyIHdvcmtzcGFjZQorCisgICAgIFVzZSBkZXZ0b29sICZsdDtzdWJjb21tYW5kJmd0OyAtLWhlbHAgdG8gZ2V0IGhlbHAgb24gYSBzcGVjaWZpYyBjb21tYW5kCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBkaXJlY3RlZCBpbiB0aGUgZ2VuZXJhbCBoZWxwIG91dHB1dCwgeW91IGNhbiBnZXQgbW9yZQorICAgICAgICAgICAgICAgIHN5bnRheCBvbiBhIHNwZWNpZmljIGNvbW1hbmQgYnkgcHJvdmlkaW5nIHRoZSBjb21tYW5kCisgICAgICAgICAgICAgICAgbmFtZSBhbmQgdXNpbmcgPGZpbGVuYW1lPi0taGVscDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIGFkZCAtLWhlbHAKKyAgICAgdXNhZ2U6IGRldnRvb2wgYWRkIFstaF0gWy0tc2FtZS1kaXJdIFstLWZldGNoIFVSSV0gWy0tdmVyc2lvbiBWRVJTSU9OXQorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlbmFtZSBzcmN0cmVlCisKKyAgICAgQWRkcyBhIG5ldyByZWNpcGUKKworICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICByZWNpcGVuYW1lICAgICAgICAgICAgTmFtZSBmb3IgbmV3IHJlY2lwZSB0byBhZGQKKyAgICAgICBzcmN0cmVlICAgICAgICAgICAgICAgUGF0aCB0byBleHRlcm5hbCBzb3VyY2UgdHJlZQorCisgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgIC0tc2FtZS1kaXIsIC1zICAgICAgICBCdWlsZCBpbiBzYW1lIGRpcmVjdG9yeSBhcyBzb3VyY2UKKyAgICAgICAtLWZldGNoIFVSSSwgLWYgVVJJICAgRmV0Y2ggdGhlIHNwZWNpZmllZCBVUkkgYW5kIGV4dHJhY3QgaXQgdG8gY3JlYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgdHJlZQorICAgICAgIC0tdmVyc2lvbiBWRVJTSU9OLCAtViBWRVJTSU9OCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gdG8gdXNlIHdpdGhpbiByZWNpcGUgKFBWKQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLWFkZGluZy1hLW5ldy1yZWNpcGUtdG8tdGhlLXdvcmtzcGFjZSc+CisgICAgICAgICAgICA8dGl0bGU+QWRkaW5nIGEgTmV3IFJlY2lwZSB0byB0aGUgV29ya3NwYWNlIExheWVyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kIHRvIGFkZCBhIG5ldyByZWNpcGUKKyAgICAgICAgICAgICAgICB0byB0aGUgd29ya3NwYWNlIGxheWVyLgorICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgeW91IGFkZCBzaG91bGQgbm90IGV4aXN0IC0KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGNyZWF0ZXMgaXQgZm9yIHlvdS4KKyAgICAgICAgICAgICAgICBUaGUgc291cmNlIGZpbGVzIHRoZSByZWNpcGUgdXNlcyBzaG91bGQgZXhpc3QgaW4gYW4gZXh0ZXJuYWwKKyAgICAgICAgICAgICAgICBhcmVhLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgY3JlYXRlcyBhbmQgYWRkcyBhIG5ldyByZWNpcGUgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+amFja3NvbjwvZmlsZW5hbWU+IHRvIHRoZSB3b3Jrc3BhY2UgbGF5ZXIuCisgICAgICAgICAgICAgICAgVGhlIHNvdXJjZSBjb2RlIGJ1aWx0IGJ5IHRoZSByZWNpcGVzIHJlc2lkZXMgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2hvbWUvc2NvdHRyaWYvc291cmNlcy9qYWNrc29uPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgYWRkIGphY2tzb24gL2hvbWUvc2NvdHRyaWYvc291cmNlcy9qYWNrc29uCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBGb3IgY29tcGxldGUgc3ludGF4LCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIGFkZCAtLWhlbHA8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IGFkZCBhIHJlY2lwZSBhbmQgdGhlIHdvcmtzcGFjZSBsYXllciBkb2VzIG5vdCBleGlzdCwKKyAgICAgICAgICAgICAgICB0aGUgY29tbWFuZCBjcmVhdGVzIHRoZSBsYXllciBhbmQgcG9wdWxhdGVzIGl0IGFzIGZvbGxvd3M6CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9idWlsZC13b3Jrc3BhY2UtZGlyZWN0b3J5LnBuZyIKKyAgICAgICAgICAgICAgICAgICAgd2lkdGg9IjZpbiIgZGVwdGg9IjRpbiIgYWxpZ249ImNlbnRlciIgc2NhbGU9IjEwMCIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSRUFETUUgLSBQcm92aWRlcyBpbmZvcm1hdGlvbiBvbiB3aGF0IGlzIGluIHdvcmtzcGFjZSBsYXllciBhbmQgaG93IHRvCisgICAgICAgICAgICAgIG1hbmFnZSBpdC4KKworICAgICBhcHBlbmRzIC0gQSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyAqLmJiYXBwZW5kIGZpbGVzLCB3aGljaCBwb2ludCB0bworICAgICAgICAgICAgICAgZXh0ZXJuYWwgc291cmNlLgorCisgICAgIGNvbmYgLSBBIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIGxheWVyLmNvbmYgZmlsZS4KKworICAgICByZWNpcGVzIC0gQSBkaXJlY3RvcnkgY29udGFpbmluZyByZWNpcGVzLiAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYQorICAgICAgICAgICAgICAgZm9sZGVyIGZvciBlYWNoIGRpcmVjdG9yeSBhZGRlZCB3aG9zZSBuYW1lIG1hdGNoZXMgdGhhdCBvZiB0aGUKKyAgICAgICAgICAgICAgIGFkZGVkIHJlY2lwZS4gIGRldnRvb2wgcGxhY2VzIHRoZSA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4uYmIgZmlsZQorICAgICAgICAgICAgICAgd2l0aGluIHRoYXQgc3ViLWRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFJ1bm5pbmcgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gd2hlbiB0aGUKKyAgICAgICAgICAgICAgICB3b3Jrc3BhY2UgbGF5ZXIgZXhpc3RzIGNhdXNlcyB0aGUgdG9vbCB0byBhZGQgdGhlIHJlY2lwZQorICAgICAgICAgICAgICAgIGFuZCBhcHBlbmQgZmlsZXMgaW50byB0aGUgZXhpc3Rpbmcgd29ya3NwYWNlIGxheWVyLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSBpcyBjcmVhdGVkIHRvIHBvaW50CisgICAgICAgICAgICAgICAgdG8gdGhlIGV4dGVybmFsIHNvdXJjZSB0cmVlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtbW9kaWZ5aW5nLWEtcmVjaXBlJz4KKyAgICAgICAgICAgIDx0aXRsZT5Nb2RpZnlpbmcgYW4gRXhpc3RpbmcgUmVjaXBlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPiBjb21tYW5kIHRvIGJlZ2luCisgICAgICAgICAgICAgICAgbW9kaWZ5aW5nIHRoZSBzb3VyY2Ugb2YgYW4gZXhpc3RpbmcgcmVjaXBlLgorICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZGV2dG9vbC1hZGRpbmctYS1uZXctcmVjaXBlLXRvLXRoZS13b3Jrc3BhY2UnPjxmaWxlbmFtZT5hZGQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBjb21tYW5kIGV4Y2VwdCB0aGF0IGl0IGRvZXMgbm90IHBoeXNpY2FsbHkgY3JlYXRlIHRoZQorICAgICAgICAgICAgICAgIHJlY2lwZSBpbiB0aGUgd29ya3NwYWNlIGxheWVyIGJlY2F1c2UgdGhlIHJlY2lwZSBhbHJlYWR5CisgICAgICAgICAgICAgICAgZXhpc3RzIGluIGFuIGFub3RoZXIgbGF5ZXIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPiBjb21tYW5kIGV4dHJhY3RzIHRoZQorICAgICAgICAgICAgICAgIHNvdXJjZSBmb3IgYSByZWNpcGUsIHNldHMgaXQgdXAgYXMgYSBHaXQgcmVwb3NpdG9yeSBpZiB0aGUKKyAgICAgICAgICAgICAgICBzb3VyY2UgaGFkIG5vdCBhbHJlYWR5IGJlZW4gZmV0Y2hlZCBmcm9tIEdpdCwgY2hlY2tzIG91dCBhCisgICAgICAgICAgICAgICAgYnJhbmNoIGZvciBkZXZlbG9wbWVudCwgYW5kIGFwcGxpZXMgYW55IHBhdGNoZXMgZnJvbSB0aGUgcmVjaXBlCisgICAgICAgICAgICAgICAgYXMgY29tbWl0cyBvbiB0b3AuCisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGNoZWNrb3V0IHRoZSBzb3VyY2UKKyAgICAgICAgICAgICAgICBmaWxlczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZGV2dG9vbCBtb2RpZnkgLXggPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+Jm5ic3A7PHJlcGxhY2VhYmxlPnBhdGgtdG8tc291cmNlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVXNpbmcgdGhlIGFib3ZlIGNvbW1hbmQgZm9ybSwgdGhlIGRlZmF1bHQgZGV2ZWxvcG1lbnQgYnJhbmNoCisgICAgICAgICAgICAgICAgd291bGQgYmUgImRldnRvb2wiLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBGb3IgY29tcGxldGUgc3ludGF4LCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIG1vZGlmeSAtLWhlbHA8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLXVwZGF0aW5nLWEtcmVjaXBlJz4KKyAgICAgICAgICAgIDx0aXRsZT5VcGRhdGluZyBhIFJlY2lwZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgdXBkYXRlLXJlY2lwZTwvZmlsZW5hbWU+IGNvbW1hbmQgdG8KKyAgICAgICAgICAgICAgICB1cGRhdGUgeW91ciByZWNpcGUgd2l0aCBwYXRjaGVzIHRoYXQgcmVmbGVjdCBjaGFuZ2VzIHlvdSBtYWtlCisgICAgICAgICAgICAgICAgdG8gdGhlIHNvdXJjZSBmaWxlcy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGtub3cgeW91IGFyZSBnb2luZyB0byB3b3JrIG9uIHNvbWUKKyAgICAgICAgICAgICAgICBjb2RlLCB5b3UgY291bGQgZmlyc3QgdXNlIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2RldnRvb2wtbW9kaWZ5aW5nLWEtcmVjaXBlJz48ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBjb21tYW5kIHRvIGV4dHJhY3QgdGhlIGNvZGUgYW5kIHNldCB1cCB0aGUgd29ya3NwYWNlLgorICAgICAgICAgICAgICAgIEFmdGVyIHdoaWNoLCB5b3UgY291bGQgbW9kaWZ5LCBjb21waWxlLCBhbmQgdGVzdCB0aGUgY29kZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHRoZSByZXN1bHRzIGFuZCB5b3UgaGF2ZSBjb21taXR0ZWQKKyAgICAgICAgICAgICAgICB5b3VyIGNoYW5nZXMgdG8gdGhlIEdpdCByZXBvc2l0b3J5LCB5b3UgY2FuIHRoZW4KKyAgICAgICAgICAgICAgICBydW4gdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHVwZGF0ZS1yZWNpcGU8L2ZpbGVuYW1lPiB0byBjcmVhdGUgdGhlCisgICAgICAgICAgICAgICAgcGF0Y2hlcyBhbmQgdXBkYXRlIHRoZSByZWNpcGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgdXBkYXRlLXJlY2lwZSA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSWYgeW91IHJ1biB0aGUgPGZpbGVuYW1lPmRldnRvb2wgdXBkYXRlLXJlY2lwZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgd2l0aG91dCBjb21taXR0aW5nIHlvdXIgY2hhbmdlcywgdGhlIGNvbW1hbmQgaWdub3JlcyB0aGUKKyAgICAgICAgICAgICAgICBjaGFuZ2VzLgorICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICBPZnRlbiwgeW91IG1pZ2h0IHdhbnQgdG8gYXBwbHkgY3VzdG9taXphdGlvbnMgbWFkZSB0byB5b3VyCisgICAgICAgICAgICAgICAgIHNvZnR3YXJlIGluIHlvdXIgb3duIGxheWVyIHJhdGhlciB0aGFuIGFwcGx5IHRoZW0gdG8gdGhlCisgICAgICAgICAgICAgICAgIG9yaWdpbmFsIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgSWYgc28sIHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWE8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+LS1hcHBlbmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICBvcHRpb24gd2l0aCB0aGUgPGZpbGVuYW1lPmRldnRvb2wgdXBkYXRlLXJlY2lwZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgIFRoZXNlIG9wdGlvbnMgYWxsb3cgeW91IHRvIHNwZWNpZnkgdGhlIGxheWVyIGludG8gd2hpY2ggdG8KKyAgICAgICAgICAgICAgICAgd3JpdGUgYW4gYXBwZW5kIGZpbGU6CisgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+IC1hIDxyZXBsYWNlYWJsZT5iYXNlLWxheWVyLWRpcmVjdG9yeTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT4qLmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSBpcyBjcmVhdGVkIGF0IHRoZQorICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZSBwYXRoIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGxheWVyIGRpcmVjdG9yeSwgd2hpY2gKKyAgICAgICAgICAgICAgICAgbWF5IG9yIG1heSBub3QgYmUgaW4geW91ciA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgIElmIGFuIGFwcGVuZCBmaWxlIGFscmVhZHkgZXhpc3RzLCB0aGUgY29tbWFuZCB1cGRhdGVzIGl0CisgICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlbHkuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEZvciBjb21wbGV0ZSBzeW50YXgsIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgdXBkYXRlLXJlY2lwZSAtLWhlbHA8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLXJlc2V0dGluZy1hLXJlY2lwZSc+CisgICAgICAgICAgICA8dGl0bGU+UmVzZXR0aW5nIGEgUmVjaXBlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCByZXNldDwvZmlsZW5hbWU+IGNvbW1hbmQgdG8gcmVtb3ZlIGEKKyAgICAgICAgICAgICAgICByZWNpcGUgYW5kIGl0cyBjb25maWd1cmF0aW9uIChlLmcuIHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUpIGZyb20gdGhlIHdvcmtzcGFjZSBsYXllci4KKyAgICAgICAgICAgICAgICBSZWFsaXplIHRoYXQgdGhpcyBjb21tYW5kIGRlbGV0ZXMgdGhlIHJlY2lwZSBhbmQgdGhlCisgICAgICAgICAgICAgICAgYXBwZW5kIGZpbGUuCisgICAgICAgICAgICAgICAgVGhlIGNvbW1hbmQgZG9lcyBub3QgcGh5c2ljYWxseSBtb3ZlIHRoZW0gZm9yIHlvdS4KKyAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBtdXN0IGJlIHN1cmUgdG8gcGh5c2ljYWxseSByZWxvY2F0ZSB5b3VyCisgICAgICAgICAgICAgICAgdXBkYXRlZCByZWNpcGUgYW5kIHRoZSBhcHBlbmQgZmlsZSBvdXRzaWRlIG9mIHRoZSB3b3Jrc3BhY2UKKyAgICAgICAgICAgICAgICBsYXllciBiZWZvcmUgcnVubmluZyB0aGUgPGZpbGVuYW1lPmRldnRvb2wgcmVzZXQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbW1hbmQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCByZXNldDwvZmlsZW5hbWU+IGNvbW1hbmQgZGV0ZWN0cyB0aGF0CisgICAgICAgICAgICAgICAgdGhlIHJlY2lwZSBvciB0aGUgYXBwZW5kIGZpbGVzIGhhdmUgYmVlbiBtb2RpZmllZCwgdGhlCisgICAgICAgICAgICAgICAgY29tbWFuZCBwcmVzZXJ2ZXMgdGhlIG1vZGlmaWVkIGZpbGVzIGluIGEgc2VwYXJhdGUgImF0dGljIgorICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yeSB1bmRlciB0aGUgd29ya3NwYWNlIGxheWVyLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBGb3IgY29tcGxldGUgc3ludGF4LCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIHJlc2V0IC0taGVscDwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtYnVpbGRpbmcteW91ci1zb2Z0d2FyZSc+CisgICAgICAgICAgICA8dGl0bGU+QnVpbGRpbmcgWW91ciBTb2Z0d2FyZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQ8L2ZpbGVuYW1lPiBjb21tYW5kIHRvIGNhdXNlIHRoZQorICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gYnVpbGQgeW91ciBzb2Z0d2FyZSBiYXNlZAorICAgICAgICAgICAgICAgIG9uIHRoZSByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQ8L2ZpbGVuYW1lPiBjb21tYW5kIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSAtYyBwb3B1bGF0ZV9zeXNyb290PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIGJ1aWxkIDxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGNvbXBsZXRlIHN5bnRheCwgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCB1cGRhdGUtcmVjaXBlIC0taGVscDwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIEJ1aWxkaW5nIHlvdXIgc29mdHdhcmUgdXNpbmcgPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGlzIGlkZW50aWNhbCB0byB1c2luZyBCaXRCYWtlIHRvIGJ1aWxkIHRoZSBzb2Z0d2FyZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLWRlcGxveWluZy15b3VyLXNvZnR3YXJlLW9uLXRoZS10YXJnZXQtbWFjaGluZSc+CisgICAgICAgICAgICA8dGl0bGU+RGVwbG95aW5nIFlvdXIgU29mdHdhcmUgb24gdGhlIFRhcmdldCBNYWNoaW5lPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBkZXBsb3ktdGFyZ2V0PC9maWxlbmFtZT4gY29tbWFuZCB0bworICAgICAgICAgICAgICAgIGRlcGxveSB0aGUgcmVjaXBlJ3MgYnVpbGQgb3V0cHV0IHRvIHRoZSBsaXZlIHRhcmdldCBtYWNoaW5lOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIGRlcGxveS10YXJnZXQgPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+Jm5ic3A7PHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSA8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gaXMgdGhlIGFkZHJlc3Mgb2YgdGhlCisgICAgICAgICAgICAgICAgdGFyZ2V0IG1hY2hpbmUsIHdoaWNoIG11c3QgYmUgcnVubmluZyBhbiBTU0ggc2VydmVyIChpLmUuCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVzZXJAaG9zdG5hbWVbOmRlc3RkaXJdPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgZGVwbG95cyBhbGwgZmlsZXMgaW5zdGFsbGVkIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICBGdXJ0aGVybW9yZSwgeW91IGRvIG5vdCBuZWVkIHRvIGhhdmUgcGFja2FnZSBtYW5hZ2VtZW50IGVuYWJsZWQKKyAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIHRhcmdldCBtYWNoaW5lLgorICAgICAgICAgICAgICAgIElmIHlvdSBkbywgdGhlIHBhY2thZ2UgbWFuYWdlciBpcyBieXBhc3NlZC4KKyAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+Tm90ZXM8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGVwbG95LXRhcmdldDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IGlzIGZvciBkZXZlbG9wbWVudCBvbmx5LgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBuZXZlciB1c2UgaXQgdG8gdXBkYXRlIGFuIGltYWdlIHRoYXQgd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBpbiBwcm9kdWN0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgY29tcGxldGUgc3ludGF4LCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCBkZXBsb3ktdGFyZ2V0IC0taGVscDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtcmVtb3ZpbmcteW91ci1zb2Z0d2FyZS1mcm9tLXRoZS10YXJnZXQtbWFjaGluZSc+CisgICAgICAgICAgICA8dGl0bGU+UmVtb3ZpbmcgWW91ciBTb2Z0d2FyZSBmcm9tIHRoZSBUYXJnZXQgTWFjaGluZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgdW5kZXBsb3ktdGFyZ2V0PC9maWxlbmFtZT4gY29tbWFuZCB0bworICAgICAgICAgICAgICAgIHJlbW92ZSBkZXBsb3llZCBidWlsZCBvdXRwdXQgZnJvbSB0aGUgdGFyZ2V0IG1hY2hpbmUuCisgICAgICAgICAgICAgICAgRm9yIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCB1bmRlcGxveS10YXJnZXQ8L2ZpbGVuYW1lPiBjb21tYW5kIHRvCisgICAgICAgICAgICAgICAgd29yaywgeW91IG11c3QgaGF2ZSBwcmV2aW91c2x5IHVzZWQgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZGV2dG9vbC1kZXBsb3lpbmcteW91ci1zb2Z0d2FyZS1vbi10aGUtdGFyZ2V0LW1hY2hpbmUnPjxmaWxlbmFtZT5kZXZ0b29sIGRlcGxveS10YXJnZXQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBjb21tYW5kLgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIHVuZGVwbG95LXRhcmdldCA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4mbmJzcDs8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiBpcyB0aGUgYWRkcmVzcyBvZiB0aGUKKyAgICAgICAgICAgICAgICB0YXJnZXQgbWFjaGluZSwgd2hpY2ggbXVzdCBiZSBydW5uaW5nIGFuIFNTSCBzZXJ2ZXIgKGkuZS4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dXNlckBob3N0bmFtZTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGNvbXBsZXRlIHN5bnRheCwgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCB1bmRlcGxveS10YXJnZXQgLS1oZWxwPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZGV2dG9vbC1jcmVhdGluZy10aGUtd29ya3NwYWNlJz4KKyAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyB0aGUgV29ya3NwYWNlIExheWVyIGluIGFuIEFsdGVybmF0aXZlIExvY2F0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBjcmVhdGUtd29ya3NwYWNlPC9maWxlbmFtZT4gY29tbWFuZCB0bworICAgICAgICAgICAgICAgIGNyZWF0ZSBhIG5ldyB3b3Jrc3BhY2UgbGF5ZXIgaW4geW91cgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSBjcmVhdGUgYSBuZXcgd29ya3NwYWNlIGxheWVyLCBpdCBpcyBwb3B1bGF0ZWQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZSBhbmQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb25seS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIGNyZWF0ZXMgYSBuZXcgd29ya3NwYWNlIGxheWVyIGluIHlvdXIKKyAgICAgICAgICAgICAgICBjdXJyZW50IHdvcmtpbmcgYW5kIGJ5IGRlZmF1bHQgbmFtZXMgdGhlIHdvcmtzcGFjZSBsYXllcgorICAgICAgICAgICAgICAgICJ3b3Jrc3BhY2UiOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIGNyZWF0ZS13b3Jrc3BhY2UKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEZvciBjb21wbGV0ZSBzeW50YXgsIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgY3JlYXRlLXdvcmtzcGFjZSAtLWhlbHA8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBjcmVhdGUgYSB3b3Jrc3BhY2UgbGF5ZXIgYW55d2hlcmUgYnkgc3VwcGx5aW5nCisgICAgICAgICAgICAgICAgYSBwYXRobmFtZSB3aXRoIHRoZSBjb21tYW5kLgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZCBjcmVhdGVzIGEgbmV3IHdvcmtzcGFjZSBsYXllciBuYW1lZAorICAgICAgICAgICAgICAgICJuZXctd29ya3NwYWNlIjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZGV2dG9vbCBjcmVhdGUtd29ya3NwYWNlIC9ob21lL3Njb3R0cmlmL25ldy13b3Jrc3BhY2UKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0idXNpbmctYS1xdWlsdC13b3JrZmxvdyI+CisgICAgICAgIDx0aXRsZT5Vc2luZyBRdWlsdCBpbiBZb3VyIFdvcmtmbG93PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9zYXZhbm5haC5ub25nbnUub3JnL3Byb2plY3RzL3F1aWx0Jz5RdWlsdDwvdWxpbms+CisgICAgICAgICAgICBpcyBhIHBvd2VyZnVsIHRvb2wgdGhhdCBhbGxvd3MgeW91IHRvIGNhcHR1cmUgc291cmNlIGNvZGUgY2hhbmdlcworICAgICAgICAgICAgd2l0aG91dCBoYXZpbmcgYSBjbGVhbiBzb3VyY2UgdHJlZS4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBvdXRsaW5lcyB0aGUgdHlwaWNhbCB3b3JrZmxvdyB5b3UgY2FuIHVzZSB0byBtb2RpZnkKKyAgICAgICAgICAgIHNvdXJjZSBjb2RlLCB0ZXN0IGNoYW5nZXMsIGFuZCB0aGVuIHByZXNlcnZlIHRoZSBjaGFuZ2VzIGluIHRoZQorICAgICAgICAgICAgZm9ybSBvZiBhIHBhdGNoIGFsbCB1c2luZyBRdWlsdC4KKyAgICAgICAgICAgIDxub3RlPjx0aXRsZT5UaXA8L3RpdGxlPgorICAgICAgICAgICAgICAgIFdpdGggcmVnYXJkIHRvIHByZXNlcnZpbmcgY2hhbmdlcyB0byBzb3VyY2UgZmlsZXMgaWYgeW91CisgICAgICAgICAgICAgICAgY2xlYW4gYSByZWNpcGUgb3IgaGF2ZSA8ZmlsZW5hbWU+cm1fd29yazwvZmlsZW5hbWU+IGVuYWJsZWQsCisgICAgICAgICAgICAgICAgdGhlIHdvcmtmbG93IGRlc2NyaWJlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmctZGV2dG9vbC1pbi15b3VyLXdvcmtmbG93Jz5Vc2luZyA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGluIFlvdXIgV29ya2Zsb3c8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaXMgYSBzYWZlciBkZXZlbG9wbWVudCBmbG93IHRoYW4gdGhhbiB0aGUgZmxvdyB0aGF0CisgICAgICAgICAgICAgICAgdXNlcyBRdWlsdC4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9sbG93IHRoZXNlIGdlbmVyYWwgc3RlcHM6CisgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5GaW5kIHRoZSBTb3VyY2UgQ29kZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUZW1wb3Jhcnkgc291cmNlIGNvZGUgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICBpcyBrZXB0IGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2ZpbmRpbmctdGhlLXRlbXBvcmFyeS1zb3VyY2UtY29kZSc+RmluZGluZyBUZW1wb3JhcnkgU291cmNlIENvZGU8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIHRvIGxlYXJuIGhvdyB0byBsb2NhdGUgdGhlIGRpcmVjdG9yeSB0aGF0IGhhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGVtcG9yYXJ5IHNvdXJjZSBjb2RlIGZvciBhIHBhcnRpY3VsYXIgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DaGFuZ2UgWW91ciBXb3JraW5nIERpcmVjdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBiZSBpbiB0aGUgZGlyZWN0b3J5IHRoYXQgaGFzIHRoZSB0ZW1wb3Jhcnkgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgICAgIFRoYXQgZGlyZWN0b3J5IGlzIGRlZmluZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgYSBOZXcgUGF0Y2g6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQmVmb3JlIG1vZGlmeWluZyBzb3VyY2UgY29kZSwgeW91IG5lZWQgdG8gY3JlYXRlIGEgbmV3IHBhdGNoLgorICAgICAgICAgICAgICAgICAgICBUbyBjcmVhdGUgYSBuZXcgcGF0Y2ggZmlsZSwgdXNlIDxmaWxlbmFtZT5xdWlsdCBuZXc8L2ZpbGVuYW1lPiBhcyBiZWxvdzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHF1aWx0IG5ldyBteV9jaGFuZ2VzLnBhdGNoCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk5vdGlmeSBRdWlsdCBhbmQgQWRkIEZpbGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEFmdGVyIGNyZWF0aW5nIHRoZSBwYXRjaCwgeW91IG5lZWQgdG8gbm90aWZ5IFF1aWx0IGFib3V0IHRoZSBmaWxlcworICAgICAgICAgICAgICAgICAgICB5b3UgcGxhbiB0byBlZGl0LgorICAgICAgICAgICAgICAgICAgICBZb3Ugbm90aWZ5IFF1aWx0IGJ5IGFkZGluZyB0aGUgZmlsZXMgdG8gdGhlIHBhdGNoIHlvdSBqdXN0IGNyZWF0ZWQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBxdWlsdCBhZGQgZmlsZTEuYyBmaWxlMi5jIGZpbGUzLmMKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkVkaXQgdGhlIEZpbGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE1ha2UgeW91ciBjaGFuZ2VzIGluIHRoZSBzb3VyY2UgY29kZSB0byB0aGUgZmlsZXMgeW91IGFkZGVkCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBwYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5UZXN0IFlvdXIgQ2hhbmdlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIG1vZGlmaWVkIHRoZSBzb3VyY2UgY29kZSwgdGhlIGVhc2llc3Qgd2F5IHRvCisgICAgICAgICAgICAgICAgICAgIHlvdXIgY2hhbmdlcyBpcyBieSBjYWxsaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+IHRhc2sgYXMgc2hvd24gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtYyBjb21waWxlIC1mIDxyZXBsYWNlYWJsZT5wYWNrYWdlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPi1mPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPi0tZm9yY2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBvcHRpb24gZm9yY2VzIHRoZSBzcGVjaWZpZWQgdGFzayB0byBleGVjdXRlLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZmluZCBwcm9ibGVtcyB3aXRoIHlvdXIgY29kZSwgeW91IGNhbiBqdXN0IGtlZXAgZWRpdGluZyBhbmQKKyAgICAgICAgICAgICAgICAgICAgcmUtdGVzdGluZyBpdGVyYXRpdmVseSB1bnRpbCB0aGluZ3Mgd29yayBhcyBleHBlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+QWxsIHRoZSBtb2RpZmljYXRpb25zIHlvdSBtYWtlIHRvIHRoZSB0ZW1wb3Jhcnkgc291cmNlIGNvZGUKKyAgICAgICAgICAgICAgICAgICAgZGlzYXBwZWFyIG9uY2UgeW91IHJ1biB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNsZWFuJz48ZmlsZW5hbWU+ZG9fY2xlYW48L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1jbGVhbmFsbCc+PGZpbGVuYW1lPmRvX2NsZWFuYWxsPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrcyB1c2luZyBCaXRCYWtlIChpLmUuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIC1jIGNsZWFuIDxyZXBsYWNlYWJsZT5wYWNrYWdlPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UgLWMgY2xlYW5hbGwgPHJlcGxhY2VhYmxlPnBhY2thZ2U8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgTW9kaWZpY2F0aW9ucyB3aWxsIGFsc28gZGlzYXBwZWFyIGlmIHlvdSB1c2UgdGhlIDxmaWxlbmFtZT5ybV93b3JrPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZSBhcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3FzLWJ1aWxkaW5nLWltYWdlcyc+QnVpbGRpbmcgSW1hZ2VzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkdlbmVyYXRlIHRoZSBQYXRjaDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdXIgY2hhbmdlcyB3b3JrIGFzIGV4cGVjdGVkLCB5b3UgbmVlZCB0byB1c2UgUXVpbHQgdG8gZ2VuZXJhdGUgdGhlIGZpbmFsIHBhdGNoIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgYWxsIHlvdXIgbW9kaWZpY2F0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHF1aWx0IHJlZnJlc2gKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50LCB0aGUgPGZpbGVuYW1lPm15X2NoYW5nZXMucGF0Y2g8L2ZpbGVuYW1lPiBmaWxlIGhhcyBhbGwgeW91ciBlZGl0cyBtYWRlCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSA8ZmlsZW5hbWU+ZmlsZTEuYzwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+ZmlsZTIuYzwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZpbGUzLmM8L2ZpbGVuYW1lPiBmaWxlcy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjYW4gZmluZCB0aGUgcmVzdWx0aW5nIHBhdGNoIGZpbGUgaW4gdGhlIDxmaWxlbmFtZT5wYXRjaGVzLzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yeSBvZiB0aGUgc291cmNlICg8ZmlsZW5hbWU+UzwvZmlsZW5hbWU+KSBkaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Db3B5IHRoZSBQYXRjaCBGaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEZvciBzaW1wbGljaXR5LCBjb3B5IHRoZSBwYXRjaCBmaWxlIGludG8gYSBkaXJlY3RvcnkgbmFtZWQgPGZpbGVuYW1lPmZpbGVzPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIHlvdSBjYW4gY3JlYXRlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSB0aGF0IGhvbGRzIHRoZSByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPikgZmlsZSBvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kICg8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4pIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFBsYWNpbmcgdGhlIHBhdGNoIGhlcmUgZ3VhcmFudGVlcyB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdpbGwgZmluZAorICAgICAgICAgICAgICAgICAgICB0aGUgcGF0Y2guCisgICAgICAgICAgICAgICAgICAgIE5leHQsIGFkZCB0aGUgcGF0Y2ggaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz5TUkNfVVJJPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSArPSAiZmlsZTovL215X2NoYW5nZXMucGF0Y2giCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nZmluZGluZy10aGUtdGVtcG9yYXJ5LXNvdXJjZS1jb2RlJz4KKyAgICAgICAgPHRpdGxlPkZpbmRpbmcgVGVtcG9yYXJ5IFNvdXJjZSBDb2RlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBtaWdodCBmaW5kIGl0IGhlbHBmdWwgZHVyaW5nIGRldmVsb3BtZW50IHRvIG1vZGlmeSB0aGUKKyAgICAgICAgICAgIHRlbXBvcmFyeSBzb3VyY2UgY29kZSB1c2VkIGJ5IHJlY2lwZXMgdG8gYnVpbGQgcGFja2FnZXMuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgYXJlIGRldmVsb3BpbmcgYSBwYXRjaCBhbmQgeW91IG5lZWQgdG8KKyAgICAgICAgICAgIGV4cGVyaW1lbnQgYSBiaXQgdG8gZmlndXJlIG91dCB5b3VyIHNvbHV0aW9uLgorICAgICAgICAgICAgQWZ0ZXIgeW91IGhhdmUgaW5pdGlhbGx5IGJ1aWx0IHRoZSBwYWNrYWdlLCB5b3UgY2FuIGl0ZXJhdGl2ZWx5CisgICAgICAgICAgICB0d2VhayB0aGUgc291cmNlIGNvZGUsIHdoaWNoIGlzIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4sIGFuZCB0aGVuCisgICAgICAgICAgICB5b3UgY2FuIGZvcmNlIGEgcmUtY29tcGlsZSBhbmQgcXVpY2tseSB0ZXN0IHlvdXIgYWx0ZXJlZCBjb2RlLgorICAgICAgICAgICAgT25jZSB5b3Ugc2V0dGxlIG9uIGEgc29sdXRpb24sIHlvdSBjYW4gdGhlbiBwcmVzZXJ2ZSB5b3VyIGNoYW5nZXMKKyAgICAgICAgICAgIGluIHRoZSBmb3JtIG9mIHBhdGNoZXMuCisgICAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIFF1aWx0IGZvciBkZXZlbG9wbWVudCwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWEtcXVpbHQtd29ya2Zsb3cnPlVzaW5nIFF1aWx0IGluIFlvdXIgV29ya2Zsb3c8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRHVyaW5nIGEgYnVpbGQsIHRoZSB1bnBhY2tlZCB0ZW1wb3Jhcnkgc291cmNlIGNvZGUgdXNlZCBieSByZWNpcGVzCisgICAgICAgICAgICB0byBidWlsZCBwYWNrYWdlcyBpcyBhdmFpbGFibGUgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeSBhcworICAgICAgICAgICAgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUyc+UzwvdWxpbms+PC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICBCZWxvdyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIDxmaWxlbmFtZT5TPC9maWxlbmFtZT4gdmFyaWFibGUgYXMgZGVmaW5lZCBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz46CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFMgPSAiJHtXT1JLRElSfS8ke0JQfSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFlvdSBzaG91bGQgYmUgYXdhcmUgdGhhdCBtYW55IHJlY2lwZXMgb3ZlcnJpZGUgdGhlIDxmaWxlbmFtZT5TPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgcmVjaXBlcyB0aGF0IGZldGNoIHRoZWlyIHNvdXJjZSBmcm9tIEdpdCB1c3VhbGx5IHNldAorICAgICAgICAgICAgPGZpbGVuYW1lPlM8L2ZpbGVuYW1lPiB0byA8ZmlsZW5hbWU+JHtXT1JLRElSfS9naXQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CUCc+PGZpbGVuYW1lPkJQPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHJlcHJlc2VudHMgdGhlIGJhc2UgcmVjaXBlIG5hbWUsIHdoaWNoIGNvbnNpc3RzIG9mIHRoZSBuYW1lIGFuZCB2ZXJzaW9uOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQlAgPSAiJHtCUE59LSR7UFZ9IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHBhdGggdG8gdGhlIHdvcmsgZGlyZWN0b3J5IGZvciB0aGUgcmVjaXBlCisgICAgICAgICAgICAoPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L3VsaW5rPikKKyAgICAgICAgICAgIGlzIGRlZmluZWQgYXMgZm9sbG93czoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtUTVBESVJ9L3dvcmsvJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30vJHtQTn0vJHtFWFRFTkRQRX0ke1BWfS0ke1BSfQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIGFjdHVhbCBkaXJlY3RvcnkgZGVwZW5kcyBvbiBzZXZlcmFsIHRoaW5nczoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICBUaGUgdG9wLWxldmVsIGJ1aWxkIG91dHB1dCBkaXJlY3Rvcnk8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTVVMVElNQUNIX1RBUkdFVF9TWVMnPjxmaWxlbmFtZT5NVUxUSU1BQ0hfVEFSR0VUX1NZUzwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgIFRoZSB0YXJnZXQgc3lzdGVtIGlkZW50aWZpZXI8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgbmFtZTwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1FWFRFTkRQRSc+PGZpbGVuYW1lPkVYVEVORFBFPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIGVwb2NoIC0gKGlmCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QRSc+PGZpbGVuYW1lPlBFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBub3Qgc3BlY2lmaWVkLCB3aGljaCBpcyB1c3VhbGx5IHRoZSBjYXNlIGZvciBtb3N0CisgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMsIHRoZW4gPGZpbGVuYW1lPkVYVEVORFBFPC9maWxlbmFtZT4gaXMgYmxhbmspPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVjaXBlIHZlcnNpb248L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgcmV2aXNpb248L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGFzc3VtZSBhIFNvdXJjZSBEaXJlY3RvcnkgdG9wLWxldmVsIGZvbGRlcgorICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiwgYSBkZWZhdWx0IEJ1aWxkIERpcmVjdG9yeSBhdAorICAgICAgICAgICAgPGZpbGVuYW1lPnBva3kvYnVpbGQ8L2ZpbGVuYW1lPiwgYW5kIGEKKyAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11eDg2LXBva3ktbGludXg8L2ZpbGVuYW1lPiBtYWNoaW5lIHRhcmdldAorICAgICAgICAgICAgc3lzdGVtLgorICAgICAgICAgICAgRnVydGhlcm1vcmUsIHN1cHBvc2UgeW91ciByZWNpcGUgaXMgbmFtZWQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5mb29fMS4zLjAuYmI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgdGhlIHdvcmsgZGlyZWN0b3J5IHRoZSBidWlsZCBzeXN0ZW0gdXNlcyB0bworICAgICAgICAgICAgYnVpbGQgdGhlIHBhY2thZ2Ugd291bGQgYmUgYXMgZm9sbG93czoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcG9reS9idWlsZC90bXAvd29yay9xZW11eDg2LXBva3ktbGludXgvZm9vLzEuMy4wLXIwCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE5vdyB0aGF0IHlvdSBrbm93IHdoZXJlIHRvIGxvY2F0ZSB0aGUgZGlyZWN0b3J5IHRoYXQgaGFzIHRoZQorICAgICAgICAgICAgdGVtcG9yYXJ5IHNvdXJjZSBjb2RlLCB5b3UgY2FuIHVzZSBhIFF1aWx0IGFzIGRlc2NyaWJlZCBpbiBzZWN0aW9uCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmctYS1xdWlsdC13b3JrZmxvdyc+VXNpbmcgUXVpbHQgaW4gWW91ciBXb3JrZmxvdzwvbGluaz4iCisgICAgICAgICAgICB0byBtYWtlIHlvdXIgZWRpdHMsIHRlc3QgdGhlIGNoYW5nZXMsIGFuZCBwcmVzZXJ2ZSB0aGUgY2hhbmdlcyBpbgorICAgICAgICAgICAgdGhlIGZvcm0gb2YgcGF0Y2hlcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2ltYWdlLWRldmVsb3BtZW50LXVzaW5nLXRvYXN0ZXInPgorICAgIDx0aXRsZT5JbWFnZSBEZXZlbG9wbWVudCBVc2luZyBUb2FzdGVyPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUb2FzdGVyIGlzIGEgd2ViIGludGVyZmFjZSB0byB0aGUgWW9jdG8gUHJvamVjdCdzIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICBzeXN0ZW0uCisgICAgICAgIFlvdSBjYW4gaW5pdGlhdGUgYnVpbGRzIHVzaW5nIFRvYXN0ZXIgYXMgd2VsbCBhcyBleGFtaW5lIHRoZSByZXN1bHRzCisgICAgICAgIGFuZCBzdGF0aXN0aWNzIG9mIGJ1aWxkcy4KKyAgICAgICAgU2VlIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19UT0FTVF9VUkw7I3RvYXN0ZXItbWFudWFsLWludHJvJz5Ub2FzdGVyIFVzZXIgTWFudWFsPC91bGluaz4KKyAgICAgICAgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzZXQgdXAgYW5kIHVzZSBUb2FzdGVyIHRvIGJ1aWxkIGltYWdlcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdpbWFnZS1kZXZlbG9wbWVudC11c2luZy1ob2InPgorICAgIDx0aXRsZT5JbWFnZSBEZXZlbG9wbWVudCBVc2luZyBIb2I8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L3Rvb2xzLXJlc291cmNlcy9wcm9qZWN0cy9ob2InPkhvYjwvdWxpbms+IGlzIGEgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIGZvciB0aGUKKyAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSwgd2hpY2ggaXMgYmFzZWQgb24gQml0QmFrZS4KKyAgICAgICAgWW91IGNhbiB1c2UgdGhlIEhvYiB0byBidWlsZCBjdXN0b20gb3BlcmF0aW5nIHN5c3RlbSBpbWFnZXMgd2l0aGluIHRoZSBZb2N0byBQcm9qZWN0IGJ1aWxkIGVudmlyb25tZW50LgorICAgICAgICBIb2Igc2ltcGx5IHByb3ZpZGVzIGEgZnJpZW5kbHkgaW50ZXJmYWNlIG92ZXIgdGhlIGJ1aWxkIHN5c3RlbSB1c2VkIGR1cmluZyBkZXZlbG9wbWVudC4KKyAgICAgICAgSW4gb3RoZXIgd29yZHMsIGJ1aWxkaW5nIGltYWdlcyB3aXRoIHRoZSBIb2IgbGV0cyB5b3UgdGFrZSBjYXJlIG9mIGNvbW1vbiBidWlsZCB0YXNrcyBtb3JlIGVhc2lseS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgSG9iLCBzZWUgdGhlIHByb2plY3QgcGFnZSBhdAorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L3Rvb2xzLXJlc291cmNlcy9wcm9qZWN0cy9ob2InPjwvdWxpbms+CisgICAgICAgIG9uIHRoZSBZb2N0byBQcm9qZWN0IHdlYnNpdGUuCisgICAgICAgIElmIHlvdSBmb2xsb3cgdGhlICJEb2N1bWVudGF0aW9uIiBsaW5rIGZyb20gdGhlIEhvYiBwYWdlLCB5b3Ugd2lsbAorICAgICAgICBmaW5kIGEgc2hvcnQgaW50cm9kdWN0b3J5IHRyYWluaW5nIHZpZGVvIG9uIEhvYi4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0cyBzb21lIGZlYXR1cmVzIG9mIEhvYjoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Zb3UgY2FuIHNldHVwIGFuZCBydW4gSG9iIHVzaW5nIHRoZXNlIGNvbW1hbmRzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudgorICAgICAkIGhvYgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBjYW4gc2V0IHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBmb3Igd2hpY2ggeW91IGFyZSBidWlsZGluZyB0aGUgaW1hZ2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+WW91IGNhbiBtb2RpZnkgdmFyaW91cyBwb2xpY3kgc2V0dGluZ3Mgc3VjaCBhcyB0aGUKKyAgICAgICAgICAgICAgICBwYWNrYWdlIGZvcm1hdCB3aXRoIHdoaWNoIHRvIGJ1aWxkLAorICAgICAgICAgICAgICAgIHRoZSBwYXJhbGxlbGlzbSBCaXRCYWtlIHVzZXMsIHdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIGFuCisgICAgICAgICAgICAgICAgZXh0ZXJuYWwgdG9vbGNoYWluLCBhbmQgd2hpY2ggaG9zdCB0byBidWlsZCBhZ2FpbnN0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBjYW4gbWFuYWdlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJz5sYXllcnM8L2xpbms+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBjYW4gc2VsZWN0IGEgYmFzZSBpbWFnZSBhbmQgdGhlbiBhZGQgZXh0cmEgcGFja2FnZXMgZm9yIHlvdXIgY3VzdG9tIGJ1aWxkLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBjYW4gbGF1bmNoIGFuZCBtb25pdG9yIHRoZSBidWlsZCBmcm9tIHdpdGhpbiBIb2IuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9InBsYXRkZXYtYXBwZGV2LWRldnNoZWxsIj4KKyAgICA8dGl0bGU+VXNpbmcgYSBEZXZlbG9wbWVudCBTaGVsbDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hlbiBkZWJ1Z2dpbmcgY2VydGFpbiBjb21tYW5kcyBvciBldmVuIHdoZW4ganVzdCBlZGl0aW5nIHBhY2thZ2VzLAorICAgICAgICA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPiBjYW4gYmUgYSB1c2VmdWwgdG9vbC4KKyAgICAgICAgV2hlbiB5b3UgaW52b2tlIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+LCBzb3VyY2UgZmlsZXMgYXJlCisgICAgICAgIGV4dHJhY3RlZCBpbnRvIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgYW5kIHBhdGNoZXMgYXJlIGFwcGxpZWQuCisgICAgICAgIFRoZW4sIGEgbmV3IHRlcm1pbmFsIGlzIG9wZW5lZCBhbmQgeW91IGFyZSBwbGFjZWQgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgorICAgICAgICBJbiB0aGUgbmV3IHRlcm1pbmFsLCBhbGwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZC1yZWxhdGVkIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUKKyAgICAgICAgc3RpbGwgZGVmaW5lZCBzbyB5b3UgY2FuIHVzZSBjb21tYW5kcyBzdWNoIGFzIDxmaWxlbmFtZT5jb25maWd1cmU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPi4KKyAgICAgICAgVGhlIGNvbW1hbmRzIGV4ZWN1dGUganVzdCBhcyBpZiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3ZXJlIGV4ZWN1dGluZyB0aGVtLgorICAgICAgICBDb25zZXF1ZW50bHksIHdvcmtpbmcgdGhpcyB3YXkgY2FuIGJlIGhlbHBmdWwgd2hlbiBkZWJ1Z2dpbmcgYSBidWlsZCBvciBwcmVwYXJpbmcKKyAgICAgICAgc29mdHdhcmUgdG8gYmUgdXNlZCB3aXRoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSB0aGF0IHVzZXMgPGZpbGVuYW1lPmRldnNoZWxsPC9maWxlbmFtZT4gb24gYSB0YXJnZXQgbmFtZWQKKyAgICAgICAgPGZpbGVuYW1lPm1hdGNoYm94LWRlc2t0b3A8L2ZpbGVuYW1lPjoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbWF0Y2hib3gtZGVza3RvcCAtYyBkZXZzaGVsbAorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY29tbWFuZCBzcGF3bnMgYSB0ZXJtaW5hbCB3aXRoIGEgc2hlbGwgcHJvbXB0IHdpdGhpbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIGVudmlyb25tZW50LgorICAgICAgICBUaGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU9FX1RFUk1JTkFMJz48ZmlsZW5hbWU+T0VfVEVSTUlOQUw8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgIHZhcmlhYmxlIGNvbnRyb2xzIHdoYXQgdHlwZSBvZiBzaGVsbCBpcyBvcGVuZWQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBzcGF3bmVkIHRlcm1pbmFscywgdGhlIGZvbGxvd2luZyBvY2N1cnM6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4gdmFyaWFibGUgaW5jbHVkZXMgdGhlCisgICAgICAgICAgICAgICAgY3Jvc3MtdG9vbGNoYWluLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSA8ZmlsZW5hbWU+cGtnY29uZmlnPC9maWxlbmFtZT4gdmFyaWFibGVzIGZpbmQgdGhlIGNvcnJlY3QKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnBjPC9maWxlbmFtZT4gZmlsZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSA8ZmlsZW5hbWU+Y29uZmlndXJlPC9maWxlbmFtZT4gY29tbWFuZCBmaW5kcyB0aGUKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHNpdGUgZmlsZXMgYXMgd2VsbCBhcyBhbnkgb3RoZXIgbmVjZXNzYXJ5IGZpbGVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2l0aGluIHRoaXMgZW52aXJvbm1lbnQsIHlvdSBjYW4gcnVuIGNvbmZpZ3VyZSBvciBjb21waWxlCisgICAgICAgIGNvbW1hbmRzIGFzIGlmIHRoZXkgd2VyZSBiZWluZyBydW4gYnkKKyAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXRzZWxmLgorICAgICAgICBBcyBub3RlZCBlYXJsaWVyLCB0aGUgd29ya2luZyBkaXJlY3RvcnkgYWxzbyBhdXRvbWF0aWNhbGx5IGNoYW5nZXMgdG8gdGhlCisgICAgICAgIFNvdXJjZSBEaXJlY3RvcnkgKDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC91bGluaz4pLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGVuIHlvdSBhcmUgZmluaXNoZWQsIHlvdSBqdXN0IGV4aXQgdGhlIHNoZWxsIG9yIGNsb3NlIHRoZSB0ZXJtaW5hbCB3aW5kb3cuCisgICAgPC9wYXJhPgorCisgICAgPG5vdGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgaXMgd29ydGggcmVtZW1iZXJpbmcgdGhhdCB3aGVuIHVzaW5nIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+CisgICAgICAgICAgICB5b3UgbmVlZCB0byB1c2UgdGhlIGZ1bGwgY29tcGlsZXIgbmFtZSBzdWNoIGFzIDxmaWxlbmFtZT5hcm0tcG9reS1saW51eC1nbnVlYWJpLWdjYzwvZmlsZW5hbWU+CisgICAgICAgICAgICBpbnN0ZWFkIG9mIGp1c3QgdXNpbmcgPGZpbGVuYW1lPmdjYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlIHNhbWUgYXBwbGllcyB0byBvdGhlciBhcHBsaWNhdGlvbnMgc3VjaCBhcyA8ZmlsZW5hbWU+YmludXRpbHM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5saWJ0b29sPC9maWxlbmFtZT4gYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgQml0QmFrZSBzZXRzIHVwIGVudmlyb25tZW50IHZhcmlhYmxlcyBzdWNoIGFzIDxmaWxlbmFtZT5DQzwvZmlsZW5hbWU+CisgICAgICAgICAgICB0byBhc3Npc3QgYXBwbGljYXRpb25zLCBzdWNoIGFzIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gdG8gZmluZCB0aGUgY29ycmVjdCB0b29scy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgaXMgYWxzbyB3b3J0aCBub3RpbmcgdGhhdCA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPiBzdGlsbCB3b3JrcyBvdmVyCisgICAgICAgICAgICBYMTEgZm9yd2FyZGluZyBhbmQgc2ltaWxhciBzaXR1YXRpb25zLgorICAgICAgICA8L3BhcmE+CisgICAgPC9ub3RlPgorPC9zZWN0aW9uPgorCis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLW5ld2JpZS54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLW5ld2JpZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBmYTk2OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtbmV3YmllLnhtbApAQCAtMCwwICsxLDE3MTYgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdkZXYtbWFudWFsLW5ld2JpZSc+CisKKzx0aXRsZT5UaGUgWW9jdG8gUHJvamVjdCBPcGVuIFNvdXJjZSBEZXZlbG9wbWVudCBFbnZpcm9ubWVudDwvdGl0bGU+CisKKzxwYXJhPgorICAgIFRoaXMgY2hhcHRlciBoZWxwcyB5b3UgdW5kZXJzdGFuZCB0aGUgWW9jdG8gUHJvamVjdCBhcyBhbiBvcGVuIHNvdXJjZSBkZXZlbG9wbWVudCBwcm9qZWN0LgorICAgIEluIGdlbmVyYWwsIHdvcmtpbmcgaW4gYW4gb3BlbiBzb3VyY2UgZW52aXJvbm1lbnQgaXMgdmVyeSBkaWZmZXJlbnQgZnJvbSB3b3JraW5nIGluIGEKKyAgICBjbG9zZWQsIHByb3ByaWV0YXJ5IGVudmlyb25tZW50LgorICAgIEFkZGl0aW9uYWxseSwgdGhlIFlvY3RvIFByb2plY3QgdXNlcyBzcGVjaWZpYyB0b29scyBhbmQgY29uc3RydWN0cyBhcyBwYXJ0IG9mIGl0cyBkZXZlbG9wbWVudAorICAgIGVudmlyb25tZW50LgorICAgIFRoaXMgY2hhcHRlciBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIG9wZW4gc291cmNlIHBoaWxvc29waHksIHVzaW5nIHRoZQorICAgIFlvY3RvIFByb2plY3QgaW4gYSB0ZWFtIGVudmlyb25tZW50LCBzb3VyY2UgcmVwb3NpdG9yaWVzLCBZb2N0byBQcm9qZWN0CisgICAgdGVybXMsIGxpY2Vuc2luZywgdGhlIG9wZW4gc291cmNlIGRpc3RyaWJ1dGVkIHZlcnNpb24gY29udHJvbCBzeXN0ZW0gR2l0LAorICAgIHdvcmtmbG93cywgYnVnIHRyYWNraW5nLCBhbmQgaG93IHRvIHN1Ym1pdCBjaGFuZ2VzLgorPC9wYXJhPgorCis8c2VjdGlvbiBpZD0nb3Blbi1zb3VyY2UtcGhpbG9zb3BoeSc+CisgICAgPHRpdGxlPk9wZW4gU291cmNlIFBoaWxvc29waHk8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIE9wZW4gc291cmNlIHBoaWxvc29waHkgaXMgY2hhcmFjdGVyaXplZCBieSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBkaXJlY3RlZCBieSBwZWVyIHByb2R1Y3Rpb24KKyAgICAgICAgYW5kIGNvbGxhYm9yYXRpb24gdGhyb3VnaCBhbiBhY3RpdmUgY29tbXVuaXR5IG9mIGRldmVsb3BlcnMuCisgICAgICAgIENvbnRyYXN0IHRoaXMgdG8gdGhlIG1vcmUgc3RhbmRhcmQgY2VudHJhbGl6ZWQgZGV2ZWxvcG1lbnQgbW9kZWxzIHVzZWQgYnkgY29tbWVyY2lhbCBzb2Z0d2FyZQorICAgICAgICBjb21wYW5pZXMgd2hlcmUgYSBmaW5pdGUgc2V0IG9mIGRldmVsb3BlcnMgcHJvZHVjZXMgYSBwcm9kdWN0IGZvciBzYWxlIHVzaW5nIGEgZGVmaW5lZCBzZXQKKyAgICAgICAgb2YgcHJvY2VkdXJlcyB0aGF0IHVsdGltYXRlbHkgcmVzdWx0IGluIGFuIGVuZCBwcm9kdWN0IHdob3NlIGFyY2hpdGVjdHVyZSBhbmQgc291cmNlIG1hdGVyaWFsCisgICAgICAgIGFyZSBjbG9zZWQgdG8gdGhlIHB1YmxpYy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgT3BlbiBzb3VyY2UgcHJvamVjdHMgY29uY2VwdHVhbGx5IGhhdmUgZGlmZmVyaW5nIGNvbmN1cnJlbnQgYWdlbmRhcywgYXBwcm9hY2hlcywgYW5kIHByb2R1Y3Rpb24uCisgICAgICAgIFRoZXNlIGZhY2V0cyBvZiB0aGUgZGV2ZWxvcG1lbnQgcHJvY2VzcyBjYW4gY29tZSBmcm9tIGFueW9uZSBpbiB0aGUgcHVibGljIChjb21tdW5pdHkpIHRoYXQgaGFzIGEKKyAgICAgICAgc3Rha2UgaW4gdGhlIHNvZnR3YXJlIHByb2plY3QuCisgICAgICAgIFRoZSBvcGVuIHNvdXJjZSBlbnZpcm9ubWVudCBjb250YWlucyBuZXcgY29weXJpZ2h0LCBsaWNlbnNpbmcsIGRvbWFpbiwgYW5kIGNvbnN1bWVyIGlzc3VlcworICAgICAgICB0aGF0IGRpZmZlciBmcm9tIHRoZSBtb3JlIHRyYWRpdGlvbmFsIGRldmVsb3BtZW50IGVudmlyb25tZW50LgorICAgICAgICBJbiBhbiBvcGVuIHNvdXJjZSBlbnZpcm9ubWVudCwgdGhlIGVuZCBwcm9kdWN0LCBzb3VyY2UgbWF0ZXJpYWwsIGFuZCBkb2N1bWVudGF0aW9uIGFyZQorICAgICAgICBhbGwgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgYXQgbm8gY29zdC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQSBiZW5jaG1hcmsgZXhhbXBsZSBvZiBhbiBvcGVuIHNvdXJjZSBwcm9qZWN0IGlzIHRoZSBMaW51eCBrZXJuZWwsIHdoaWNoIHdhcyBpbml0aWFsbHkgY29uY2VpdmVkCisgICAgICAgIGFuZCBjcmVhdGVkIGJ5IEZpbm5pc2ggY29tcHV0ZXIgc2NpZW5jZSBzdHVkZW50IExpbnVzIFRvcnZhbGRzIGluIDE5OTEuCisgICAgICAgIENvbnZlcnNlbHksIGEgZ29vZCBleGFtcGxlIG9mIGEgbm9uLW9wZW4gc291cmNlIHByb2plY3QgaXMgdGhlCisgICAgICAgIDx0cmFkZW1hcmsgY2xhc3M9J3JlZ2lzdGVyZWQnPldpbmRvd3M8L3RyYWRlbWFyaz4gZmFtaWx5IG9mIG9wZXJhdGluZworICAgICAgICBzeXN0ZW1zIGRldmVsb3BlZCBieSA8dHJhZGVtYXJrIGNsYXNzPSdyZWdpc3RlcmVkJz5NaWNyb3NvZnQ8L3RyYWRlbWFyaz4gQ29ycG9yYXRpb24uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFdpa2lwZWRpYSBoYXMgYSBnb29kIGhpc3RvcmljYWwgZGVzY3JpcHRpb24gb2YgdGhlIE9wZW4gU291cmNlIFBoaWxvc29waHkKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9PcGVuX3NvdXJjZSc+aGVyZTwvdWxpbms+LgorICAgICAgICBZb3UgY2FuIGFsc28gZmluZCBoZWxwZnVsIGluZm9ybWF0aW9uIG9uIGhvdyB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgTGludXggQ29tbXVuaXR5CisgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9sZG4ubGludXhmb3VuZGF0aW9uLm9yZy9ib29rL2hvdy1wYXJ0aWNpcGF0ZS1saW51eC1jb21tdW5pdHknPmhlcmU8L3VsaW5rPi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJ1c2luZ3Bva3ktY2hhbmdlcy1jb2xsYWJvcmF0ZSI+CisgICAgPHRpdGxlPlVzaW5nIHRoZSBZb2N0byBQcm9qZWN0IGluIGEgVGVhbSBFbnZpcm9ubWVudDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSXQgbWlnaHQgbm90IGJlIGltbWVkaWF0ZWx5IGNsZWFyIGhvdyB5b3UgY2FuIHVzZSB0aGUgWW9jdG8KKyAgICAgICAgUHJvamVjdCBpbiBhIHRlYW0gZW52aXJvbm1lbnQsIG9yIHNjYWxlIGl0IGZvciBhIGxhcmdlIHRlYW0gb2YKKyAgICAgICAgZGV2ZWxvcGVycy4KKyAgICAgICAgT25lIG9mIHRoZSBzdHJlbmd0aHMgb2YgdGhlIFlvY3RvIFByb2plY3QgaXMgdGhhdCBpdCBpcyBleHRyZW1lbHkKKyAgICAgICAgZmxleGlibGUuCisgICAgICAgIFRodXMsIHlvdSBjYW4gYWRhcHQgaXQgdG8gbWFueSBkaWZmZXJlbnQgdXNlIGNhc2VzIGFuZCBzY2VuYXJpb3MuCisgICAgICAgIEhvd2V2ZXIsIHRoZXNlIGNoYXJhY3RlcmlzdGljcyBjYW4gY2F1c2UgYSBzdHJ1Z2dsZSBpZiB5b3UgYXJlIHRyeWluZworICAgICAgICB0byBjcmVhdGUgYSB3b3JraW5nIHNldHVwIHRoYXQgc2NhbGVzIGFjcm9zcyBhIGxhcmdlIHRlYW0uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRvIGhlbHAgd2l0aCB0aGVzZSB0eXBlcyBvZiBzaXR1YXRpb25zLCB0aGlzIHNlY3Rpb24gcHJlc2VudHMKKyAgICAgICAgc29tZSBvZiB0aGUgcHJvamVjdCdzIG1vc3Qgc3VjY2Vzc2Z1bCBleHBlcmllbmNlcywKKyAgICAgICAgcHJhY3RpY2VzLCBzb2x1dGlvbnMsIGFuZCBhdmFpbGFibGUgdGVjaG5vbG9naWVzIHRoYXQgd29yayB3ZWxsLgorICAgICAgICBLZWVwIGluIG1pbmQsIHRoZSBpbmZvcm1hdGlvbiBoZXJlIGlzIGEgc3RhcnRpbmcgcG9pbnQuCisgICAgICAgIFlvdSBjYW4gYnVpbGQgb2ZmIGl0IGFuZCBjdXN0b21pemUgaXQgdG8gZml0IGFueQorICAgICAgICBwYXJ0aWN1bGFyIHdvcmtpbmcgZW52aXJvbm1lbnQgYW5kIHNldCBvZiBwcmFjdGljZXMuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J2Jlc3QtcHJhY3RpY2VzLXN5c3RlbS1jb25maWd1cmF0aW9ucyc+CisgICAgICAgIDx0aXRsZT5TeXN0ZW0gQ29uZmlndXJhdGlvbnM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU3lzdGVtcyBhY3Jvc3MgYSBsYXJnZSB0ZWFtIHNob3VsZCBtZWV0IHRoZSBuZWVkcyBvZgorICAgICAgICAgICAgdHdvIHR5cGVzIG9mIGRldmVsb3BlcnM6IHRob3NlIHdvcmtpbmcgb24gdGhlIGNvbnRlbnRzIG9mIHRoZQorICAgICAgICAgICAgb3BlcmF0aW5nIHN5c3RlbSBpbWFnZSBpdHNlbGYgYW5kIHRob3NlIGRldmVsb3BpbmcgYXBwbGljYXRpb25zLgorICAgICAgICAgICAgUmVnYXJkbGVzcyBvZiB0aGUgdHlwZSBvZiBkZXZlbG9wZXIsIHRoZWlyIHdvcmtzdGF0aW9ucyBtdXN0CisgICAgICAgICAgICBiZSBib3RoIHJlYXNvbmFibHkgcG93ZXJmdWwgYW5kIHJ1biBMaW51eC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdiZXN0LXByYWN0aWNlcy1hcHBsaWNhdGlvbi1kZXZlbG9wbWVudCc+CisgICAgICAgICAgICA8dGl0bGU+QXBwbGljYXRpb24gRGV2ZWxvcG1lbnQ8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgZGV2ZWxvcGVycyB3aG8gbWFpbmx5IGRvIGFwcGxpY2F0aW9uIGxldmVsIHdvcmsKKyAgICAgICAgICAgICAgICBvbiB0b3Agb2YgYW4gZXhpc3Rpbmcgc29mdHdhcmUgc3RhY2ssCisgICAgICAgICAgICAgICAgaGVyZSBhcmUgc29tZSBwcmFjdGljZXMgdGhhdCB3b3JrIGJlc3Q6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVzZSBhIHByZS1idWlsdCB0b29sY2hhaW4gdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgdGhlIHNvZnR3YXJlIHN0YWNrIGl0c2VsZi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZW4sIGRldmVsb3AgdGhlIGFwcGxpY2F0aW9uIGNvZGUgb24gdG9wIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCB3b3JrcyB3ZWxsIGZvciBzbWFsbCBudW1iZXJzIG9mIHJlbGF0aXZlbHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzb2xhdGVkIGFwcGxpY2F0aW9ucy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZW4gcG9zc2libGUsIHVzZSB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgcGx1Zy1pbiBmb3IgdGhlIDx0cmFkZW1hcmsgY2xhc3M9J3RyYWRlJz5FY2xpcHNlPC90cmFkZW1hcms+IElERQorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG90aGVyIHBpZWNlcyBvZiBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgVGVjaG5vbG9neSAoQURUKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYXBwbGljYXRpb24tZGV2ZWxvcG1lbnQtd29ya2Zsb3cnPkFwcGxpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBEZXZlbG9wbWVudCBXb3JrZmxvdzwvbGluaz4iIHNlY3Rpb24gYXMgd2VsbCBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7Jz5Zb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPktlZXAgeW91ciBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW5zCisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkbyB0aGlzIHRocm91Z2ggcHJvdmlzaW9uaW5nIGVpdGhlciBhcyBuZXcKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xjaGFpbiBkb3dubG9hZHMgb3IgYXMgdXBkYXRlcyB0aHJvdWdoIGEgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlIG1lY2hhbmlzbSB1c2luZyA8ZmlsZW5hbWU+b3BrZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB0byBwcm92aWRlIHVwZGF0ZXMgdG8gYW4gZXhpc3RpbmcgdG9vbGNoYWluLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGV4YWN0IG1lY2hhbmljcyBvZiBob3cgYW5kIHdoZW4gdG8gZG8gdGhpcyBhcmUgYQorICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24gZm9yIGxvY2FsIHBvbGljeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVzZSBtdWx0aXBsZSB0b29sY2hhaW5zIGluc3RhbGxlZCBsb2NhbGx5CisgICAgICAgICAgICAgICAgICAgICAgICBpbnRvIGRpZmZlcmVudCBsb2NhdGlvbnMgdG8gYWxsb3cgZGV2ZWxvcG1lbnQgYWNyb3NzCisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9ucy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdiZXN0LXByYWN0aWNlcy1jb3JlLXN5c3RlbS1kZXZlbG9wbWVudCc+CisgICAgICAgICAgICA8dGl0bGU+Q29yZSBTeXN0ZW0gRGV2ZWxvcG1lbnQ8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgY29yZSBzeXN0ZW0gZGV2ZWxvcG1lbnQsIGl0IGlzIG9mdGVuIGJlc3QgdG8gaGF2ZSB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gaXRzZWxmIGF2YWlsYWJsZSBvbiB0aGUgZGV2ZWxvcGVyIHdvcmtzdGF0aW9ucworICAgICAgICAgICAgICAgIHNvIGRldmVsb3BlcnMgY2FuIHJ1biB0aGVpciBvd24gYnVpbGRzIGFuZCBkaXJlY3RseQorICAgICAgICAgICAgICAgIHJlYnVpbGQgdGhlIHNvZnR3YXJlIHN0YWNrLgorICAgICAgICAgICAgICAgIFlvdSBzaG91bGQga2VlcCB0aGUgY29yZSBzeXN0ZW0gdW5jaGFuZ2VkIGFzIG11Y2ggYXMKKyAgICAgICAgICAgICAgICBwb3NzaWJsZSBhbmQgZG8geW91ciB3b3JrIGluIGxheWVycyBvbiB0b3Agb2YgdGhlIGNvcmUgc3lzdGVtLgorICAgICAgICAgICAgICAgIERvaW5nIHNvIGdpdmVzIHlvdSBhIGdyZWF0ZXIgbGV2ZWwgb2YgcG9ydGFiaWxpdHkgd2hlbgorICAgICAgICAgICAgICAgIHVwZ3JhZGluZyB0byBuZXcgdmVyc2lvbnMgb2YgdGhlIGNvcmUgc3lzdGVtIG9yIEJvYXJkCisgICAgICAgICAgICAgICAgU3VwcG9ydCBQYWNrYWdlcyAoQlNQcykuCisgICAgICAgICAgICAgICAgWW91IGNhbiBzaGFyZSBsYXllcnMgYW1vbmdzdCB0aGUgZGV2ZWxvcGVycyBvZiBhIHBhcnRpY3VsYXIKKyAgICAgICAgICAgICAgICBwcm9qZWN0IGFuZCBjb250YWluIHRoZSBwb2xpY3kgY29uZmlndXJhdGlvbiB0aGF0IGRlZmluZXMKKyAgICAgICAgICAgICAgICB0aGUgcHJvamVjdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXNpZGUgZnJvbSB0aGUgcHJldmlvdXMgYmVzdCBwcmFjdGljZXMsIHRoZXJlIGV4aXN0cyBhIG51bWJlcgorICAgICAgICAgICAgICAgIG9mIHRpcHMgYW5kIHRyaWNrcyB0aGF0IGNhbiBoZWxwIHNwZWVkIHVwIGNvcmUgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICBwcm9qZWN0czoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VXNlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3NoYXJlZC1zdGF0ZS1jYWNoZSc+U2hhcmVkIFN0YXRlIENhY2hlPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIChzc3RhdGUpIGFtb25nIGdyb3VwcyBvZiBkZXZlbG9wZXJzIHdobyBhcmUgb24gYQorICAgICAgICAgICAgICAgICAgICAgICAgZmFzdCBuZXR3b3JrLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJlc3Qgd2F5IHRvIHNoYXJlIHNzdGF0ZSBpcyB0aHJvdWdoIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIE5ldHdvcmsgRmlsZSBTeXN0ZW0gKE5GUykgc2hhcmUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgdXNlciB0byBidWlsZCBhIGdpdmVuIGNvbXBvbmVudCBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCB0aW1lIGNvbnRyaWJ1dGVzIHRoYXQgb2JqZWN0IHRvIHRoZSBzc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBzdWJzZXF1ZW50IGJ1aWxkcyBmcm9tIG90aGVyIGRldmVsb3BlcnMgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgcmV1c2UgdGhlIG9iamVjdCByYXRoZXIgdGhhbiByZWJ1aWxkIGl0IHRoZW1zZWx2ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5BbHRob3VnaCBpdCBpcyBwb3NzaWJsZSB0byB1c2Ugb3RoZXIgcHJvdG9jb2xzIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNzdGF0ZSBzdWNoIGFzIEhUVFAgYW5kIEZUUCwgeW91IHNob3VsZCBhdm9pZCB0aGVzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzaW5nIEhUVFAgbGltaXRzIHRoZSBzc3RhdGUgdG8gcmVhZC1vbmx5IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgRlRQIHByb3ZpZGVzIHBvb3IgcGVyZm9ybWFuY2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkhhdmUgYXV0b2J1aWxkZXJzIGNvbnRyaWJ1dGUgdG8gdGhlIHNzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgcG9vbCBzaW1pbGFybHkgdG8gaG93IHRoZSBkZXZlbG9wZXIgd29ya3N0YXRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICBjb250cmlidXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYmVzdC1wcmFjdGljZXMtYXV0b2J1aWxkZXJzJz5BdXRvYnVpbGRlcnM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJ1aWxkIHN0YW5kLWFsb25lIHRhcmJhbGxzIHRoYXQgY29udGFpbgorICAgICAgICAgICAgICAgICAgICAgICAgIm1pc3NpbmciIHN5c3RlbSByZXF1aXJlbWVudHMgaWYgZm9yIHNvbWUgcmVhc29uCisgICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wZXIgd29ya3N0YXRpb25zIGRvIG5vdCBtZWV0IG1pbmltdW0gc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlbWVudHMgc3VjaCBhcyBsYXRlc3QgUHl0aG9uIHZlcnNpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNocnBhdGg8L2ZpbGVuYW1lPiwgb3Igb3RoZXIgdG9vbHMuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGluc3RhbGwgYW5kIHJlbG9jYXRlIHRoZSB0YXJiYWxsIGV4YWN0bHkgYXMgeW91CisgICAgICAgICAgICAgICAgICAgICAgICB3b3VsZCB0aGUgdXN1YWwgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluIHNvIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsbCBkZXZlbG9wZXJzIGNhbiBtZWV0IG1pbmltdW0gdmVyc2lvbiByZXF1aXJlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uIG1vc3QgZGlzdHJpYnV0aW9ucy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVzZSBhIHNtYWxsIG51bWJlciBvZiBzaGFyZWQsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWdoIHBlcmZvcm1hbmNlIHN5c3RlbXMgZm9yIHRlc3RpbmcgcHVycG9zZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIGR1YWwsIHNpeC1jb3JlIFhlb25zIHdpdGggMjQgR2J5dGVzIG9mIFJBTQorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHBsZW50eSBvZiBkaXNrIHNwYWNlKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIERldmVsb3BlcnMgY2FuIHVzZSB0aGVzZSBzeXN0ZW1zIGZvciB3aWRlciwgbW9yZQorICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaXZlIHRlc3Rpbmcgd2hpbGUgdGhleSBjb250aW51ZSB0byBkZXZlbG9wCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGx5IHVzaW5nIHRoZWlyIHByaW1hcnkgZGV2ZWxvcG1lbnQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FbmFibGUgdGhlIFBSIFNlcnZpY2Ugd2hlbiBwYWNrYWdlIGZlZWRzCisgICAgICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGJlIGluY3JlbWVudGFsIHdpdGggY29udGludWFsbHkgaW5jcmVhc2luZworICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBSJz5QUjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHRoaXMgc2l0dWF0aW9uIG9jY3VycyB3aGVuIHlvdSB1c2Ugb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxpc2ggcGFja2FnZSBmZWVkcyBhbmQgdXNlIGEgc2hhcmVkIHN0YXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBlbmFibGUgdGhlIFBSIFNlcnZpY2UgZm9yIGFsbCB1c2VycyB3aG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZSB0aGUgc2hhcmVkIHN0YXRlIHBvb2wuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgUFIgU2VydmljZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3dvcmtpbmctd2l0aC1hLXByLXNlcnZpY2UnPldvcmtpbmcgV2l0aCBhIFBSIFNlcnZpY2U8L2xpbms+Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2Jlc3QtcHJhY3RpY2VzLXNvdXJjZS1jb250cm9sLW1hbmFnZW1lbnQnPgorICAgICAgICA8dGl0bGU+U291cmNlIENvbnRyb2wgTWFuYWdlbWVudCAoU0NNKTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBLZWVwaW5nIHlvdXIKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CisgICAgICAgICAgICBhbmQgYW55IHNvZnR3YXJlIHlvdSBhcmUgZGV2ZWxvcGluZyB1bmRlciB0aGUKKyAgICAgICAgICAgIGNvbnRyb2wgb2YgYW4gU0NNIHN5c3RlbSB0aGF0IGlzIGNvbXBhdGlibGUKKyAgICAgICAgICAgIHdpdGggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXMgYWR2aXNhYmxlLgorICAgICAgICAgICAgT2YgdGhlIFNDTXMgQml0QmFrZSBzdXBwb3J0cywgdGhlCisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHRlYW0gc3Ryb25nbHkgcmVjb21tZW5kcyB1c2luZworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZ2l0Jz5HaXQ8L2xpbms+LgorICAgICAgICAgICAgR2l0IGlzIGEgZGlzdHJpYnV0ZWQgc3lzdGVtIHRoYXQgaXMgZWFzeSB0byBiYWNrdXAsCisgICAgICAgICAgICBhbGxvd3MgeW91IHRvIHdvcmsgcmVtb3RlbHksIGFuZCB0aGVuIGNvbm5lY3RzIGJhY2sgdG8gdGhlCisgICAgICAgICAgICBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBhYm91dCBCaXRCYWtlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyc+Qml0QmFrZSBVc2VyIE1hbnVhbDwvdWxpbms+LgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJdCBpcyByZWxhdGl2ZWx5IGVhc3kgdG8gc2V0IHVwIEdpdCBzZXJ2aWNlcyBhbmQgY3JlYXRlCisgICAgICAgICAgICBpbmZyYXN0cnVjdHVyZSBsaWtlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsnPmh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZzwvdWxpbms+LAorICAgICAgICAgICAgd2hpY2ggaXMgYmFzZWQgb24gc2VydmVyIHNvZnR3YXJlIGNhbGxlZAorICAgICAgICAgICAgPGZpbGVuYW1lPmdpdG9saXRlPC9maWxlbmFtZT4gd2l0aCA8ZmlsZW5hbWU+Y2dpdDwvZmlsZW5hbWU+CisgICAgICAgICAgICBiZWluZyB1c2VkIHRvIGdlbmVyYXRlIHRoZSB3ZWIgaW50ZXJmYWNlIHRoYXQgbGV0cyB5b3UgdmlldyB0aGUKKyAgICAgICAgICAgIHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z2l0b2xpdGU8L2ZpbGVuYW1lPiBzb2Z0d2FyZSBpZGVudGlmaWVzIHVzZXJzCisgICAgICAgICAgICB1c2luZyBTU0gga2V5cyBhbmQgYWxsb3dzIGJyYW5jaC1iYXNlZAorICAgICAgICAgICAgYWNjZXNzIGNvbnRyb2xzIHRvIHJlcG9zaXRvcmllcyB0aGF0IHlvdSBjYW4gY29udHJvbCBhcyBsaXR0bGUKKyAgICAgICAgICAgIG9yIGFzIG11Y2ggYXMgbmVjZXNzYXJ5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBUaGUgc2V0dXAgb2YgdGhlc2Ugc2VydmljZXMgaXMgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzIG1hbnVhbC4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHNpdGVzIHN1Y2ggYXMgdGhlc2UgZXhpc3QgdGhhdCBkZXNjcmliZSBob3cgdG8gcGVyZm9ybQorICAgICAgICAgICAgc2V0dXA6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPSdodHRwOi8vZ2l0LXNjbS5jb20vYm9vay9jaDQtOC5odG1sJz5HaXQgZG9jdW1lbnRhdGlvbjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICBEZXNjcmliZXMgaG93IHRvIGluc3RhbGwgPGZpbGVuYW1lPmdpdG9saXRlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb24gdGhlIHNlcnZlci48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0naHR0cDovL3NpdGFyYW1jLmdpdGh1Yi5jb20vZ2l0b2xpdGUvbWFzdGVyLXRvYy5odG1sJz5UaGUgPGZpbGVuYW1lPmdpdG9saXRlPC9maWxlbmFtZT4gbWFzdGVyIGluZGV4PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgIEFsbCB0b3BpY3MgZm9yIDxmaWxlbmFtZT5naXRvbGl0ZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0naHR0cHM6Ly9naXQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9JbnRlcmZhY2VzLF9mcm9udGVuZHMsX2FuZF90b29scyc+SW50ZXJmYWNlcywgZnJvbnRlbmRzLCBhbmQgdG9vbHM8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnRhdGlvbiBvbiBob3cgdG8gY3JlYXRlIGludGVyZmFjZXMgYW5kIGZyb250ZW5kcworICAgICAgICAgICAgICAgICAgICBmb3IgR2l0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvbm90ZT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYmVzdC1wcmFjdGljZXMtYXV0b2J1aWxkZXJzJz4KKyAgICAgICAgPHRpdGxlPkF1dG9idWlsZGVyczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBdXRvYnVpbGRlcnMgYXJlIG9mdGVuIHRoZSBjb3JlIG9mIGEgZGV2ZWxvcG1lbnQgcHJvamVjdC4KKyAgICAgICAgICAgIEl0IGlzIGhlcmUgdGhhdCBjaGFuZ2VzIGZyb20gaW5kaXZpZHVhbCBkZXZlbG9wZXJzIGFyZSBicm91Z2h0CisgICAgICAgICAgICB0b2dldGhlciBhbmQgY2VudHJhbGx5IHRlc3RlZCBhbmQgc3Vic2VxdWVudCBkZWNpc2lvbnMgYWJvdXQKKyAgICAgICAgICAgIHJlbGVhc2VzIGNhbiBiZSBtYWRlLgorICAgICAgICAgICAgQXV0b2J1aWxkZXJzIGFsc28gYWxsb3cgZm9yICJjb250aW51b3VzIGludGVncmF0aW9uIiBzdHlsZQorICAgICAgICAgICAgdGVzdGluZyBvZiBzb2Z0d2FyZSBjb21wb25lbnRzIGFuZCByZWdyZXNzaW9uIGlkZW50aWZpY2F0aW9uCisgICAgICAgICAgICBhbmQgdHJhY2tpbmcuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNlZSAiPHVsaW5rIHVybD0naHR0cDovL2F1dG9idWlsZGVyLnlvY3RvcHJvamVjdC5vcmcnPllvY3RvIFByb2plY3QgQXV0b2J1aWxkZXI8L3VsaW5rPiIKKyAgICAgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBsaW5rcyB0byBidWlsZGJvdC4KKyAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHRlYW0gaGFzIGZvdW5kIHRoaXMgaW1wbGVtZW50YXRpb24KKyAgICAgICAgICAgIHdvcmtzIHdlbGwgaW4gdGhpcyByb2xlLgorICAgICAgICAgICAgQSBwdWJsaWMgZXhhbXBsZSBvZiB0aGlzIGlzIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICBBdXRvYnVpbGRlcnMsIHdoaWNoIHdlIHVzZSB0byB0ZXN0IHRoZSBvdmVyYWxsIGhlYWx0aCBvZiB0aGUKKyAgICAgICAgICAgIHByb2plY3QuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmZWF0dXJlcyBvZiB0aGlzIHN5c3RlbSBhcmU6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5IaWdobGlnaHRzIHdoZW4gY29tbWl0cyBicmVhayB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Qb3B1bGF0ZXMgYW4gc3N0YXRlIGNhY2hlIGZyb20gd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcGVycyBjYW4gcHVsbCByYXRoZXIgdGhhbiByZXF1aXJpbmcgbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BbGxvd3MgY29tbWl0IGhvb2sgdHJpZ2dlcnMsCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRyaWdnZXIgYnVpbGRzIHdoZW4gY29tbWl0cyBhcmUgbWFkZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFsbG93cyB0cmlnZ2VyaW5nIG9mIGF1dG9tYXRlZCBpbWFnZSBib290aW5nCisgICAgICAgICAgICAgICAgICAgIGFuZCB0ZXN0aW5nIHVuZGVyIHRoZSBRdWlja0VNVWxhdG9yIChRRU1VKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlN1cHBvcnRzIGluY3JlbWVudGFsIGJ1aWxkIHRlc3RpbmcgYW5kCisgICAgICAgICAgICAgICAgICAgIGZyb20tc2NyYXRjaCBidWlsZHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNoYXJlcyBvdXRwdXQgdGhhdCBhbGxvd3MgZGV2ZWxvcGVyCisgICAgICAgICAgICAgICAgICAgIHRlc3RpbmcgYW5kIGhpc3RvcmljYWwgcmVncmVzc2lvbiBpbnZlc3RpZ2F0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q3JlYXRlcyBvdXRwdXQgdGhhdCBjYW4gYmUgdXNlZCBmb3IgcmVsZWFzZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BbGxvd3Mgc2NoZWR1bGluZyBvZiBidWlsZHMgc28gdGhhdCByZXNvdXJjZXMKKyAgICAgICAgICAgICAgICAgICAgY2FuIGJlIHVzZWQgZWZmaWNpZW50bHkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdiZXN0LXByYWN0aWNlcy1wb2xpY2llcy1hbmQtY2hhbmdlLWZsb3cnPgorICAgICAgICA8dGl0bGU+UG9saWNpZXMgYW5kIENoYW5nZSBGbG93PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGl0c2VsZiB1c2VzIGEgaGllcmFyY2hpY2FsIHN0cnVjdHVyZSBhbmQgYQorICAgICAgICAgICAgcHVsbCBtb2RlbC4KKyAgICAgICAgICAgIFNjcmlwdHMgZXhpc3QgdG8gY3JlYXRlIGFuZCBzZW5kIHB1bGwgcmVxdWVzdHMKKyAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT5jcmVhdGUtcHVsbC1yZXF1ZXN0PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+c2VuZC1wdWxsLXJlcXVlc3Q8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICBUaGlzIG1vZGVsIGlzIGluIGxpbmUgd2l0aCBvdGhlciBvcGVuIHNvdXJjZSBwcm9qZWN0cyB3aGVyZQorICAgICAgICAgICAgbWFpbnRhaW5lcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBzcGVjaWZpYyBhcmVhcyBvZiB0aGUgcHJvamVjdAorICAgICAgICAgICAgYW5kIGEgc2luZ2xlIG1haW50YWluZXIgaGFuZGxlcyB0aGUgZmluYWwgInRvcC1vZi10cmVlIiBtZXJnZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFlvdSBjYW4gYWxzbyB1c2UgYSBtb3JlIGNvbGxlY3RpdmUgcHVzaCBtb2RlbC4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z2l0b2xpdGU8L2ZpbGVuYW1lPiBzb2Z0d2FyZSBzdXBwb3J0cyBib3RoIHRoZQorICAgICAgICAgICAgcHVzaCBhbmQgcHVsbCBtb2RlbHMgcXVpdGUgZWFzaWx5LgorICAgICAgICA8L25vdGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyB3aXRoIGFueSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCwgaXQgaXMgaW1wb3J0YW50CisgICAgICAgICAgICB0byBkb2N1bWVudCB0aGUgcG9saWN5IHVzZWQgYXMgd2VsbCBhcyBhbnkgbWFpbiBwcm9qZWN0CisgICAgICAgICAgICBndWlkZWxpbmVzIHNvIHRoZXkgYXJlIHVuZGVyc3Rvb2QgYnkgZXZlcnlvbmUuCisgICAgICAgICAgICBJdCBpcyBhbHNvIGEgZ29vZCBpZGVhIHRvIGhhdmUgd2VsbCBzdHJ1Y3R1cmVkCisgICAgICAgICAgICBjb21taXQgbWVzc2FnZXMsIHdoaWNoIGFyZSB1c3VhbGx5IGEgcGFydCBvZiBhIHByb2plY3QncworICAgICAgICAgICAgZ3VpZGVsaW5lcy4KKyAgICAgICAgICAgIEdvb2QgY29tbWl0IG1lc3NhZ2VzIGFyZSBlc3NlbnRpYWwgd2hlbiBsb29raW5nIGJhY2sgaW4gdGltZSBhbmQKKyAgICAgICAgICAgIHRyeWluZyB0byB1bmRlcnN0YW5kIHdoeSBjaGFuZ2VzIHdlcmUgbWFkZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IGRpc2NvdmVyIHRoYXQgY2hhbmdlcyBhcmUgbmVlZGVkIHRvIHRoZSBjb3JlIGxheWVyIG9mIHRoZQorICAgICAgICAgICAgcHJvamVjdCwgaXQgaXMgd29ydGggc2hhcmluZyB0aG9zZSB3aXRoIHRoZSBjb21tdW5pdHkgYXMgc29vbgorICAgICAgICAgICAgYXMgcG9zc2libGUuCisgICAgICAgICAgICBDaGFuY2VzIGFyZSBpZiB5b3UgaGF2ZSBkaXNjb3ZlcmVkIHRoZSBuZWVkIGZvciBjaGFuZ2VzLCBzb21lb25lCisgICAgICAgICAgICBlbHNlIGluIHRoZSBjb21tdW5pdHkgbmVlZHMgdGhlbSBhbHNvLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2Jlc3QtcHJhY3RpY2VzLXN1bW1hcnknPgorICAgICAgICA8dGl0bGU+U3VtbWFyeTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gc3VtbWFyaXplcyB0aGUga2V5IHJlY29tbWVuZGF0aW9ucyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICBwcmV2aW91cyBzZWN0aW9uczoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVzZSA8bGluayBsaW5rZW5kPSdnaXQnPkdpdDwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYXMgdGhlIHNvdXJjZSBjb250cm9sIHN5c3RlbS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TWFpbnRhaW4geW91ciBNZXRhZGF0YSBpbiBsYXllcnMgdGhhdCBtYWtlIHNlbnNlCisgICAgICAgICAgICAgICAgICAgIGZvciB5b3VyIHNpdHVhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0ndW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJz5VbmRlcnN0YW5kaW5nCisgICAgICAgICAgICAgICAgICAgIGFuZCBDcmVhdGluZyBMYXllcnM8L2xpbms+IiBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uCisgICAgICAgICAgICAgICAgICAgIGxheWVycy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlcGFyYXRlIHRoZSBwcm9qZWN0J3MgTWV0YWRhdGEgYW5kIGNvZGUgYnkgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGUgR2l0IHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0neW9jdG8tcHJvamVjdC1yZXBvc2l0b3JpZXMnPllvY3RvIFByb2plY3QgU291cmNlIFJlcG9zaXRvcmllczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uIG9uIHRoZXNlIHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZ2V0dGluZy1zZXR1cCc+R2V0dGluZyBTZXQgVXA8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gc2V0IHVwIGxvY2FsIEdpdAorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3JpZXMgZm9yIHJlbGF0ZWQgdXBzdHJlYW0gWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2V0IHVwIHRoZSBkaXJlY3RvcnkgZm9yIHRoZSBzaGFyZWQgc3RhdGUgY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgKDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TU1RBVEVfRElSJz48ZmlsZW5hbWU+U1NUQVRFX0RJUjwvZmlsZW5hbWU+PC91bGluaz4pCisgICAgICAgICAgICAgICAgICAgIHdoZXJlIGl0IG1ha2VzIHNlbnNlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc2V0IHVwIHRoZSBzc3RhdGUgY2FjaGUgb24gYSBzeXN0ZW0gdXNlZAorICAgICAgICAgICAgICAgICAgICBieSBkZXZlbG9wZXJzIGluIHRoZSBzYW1lIG9yZ2FuaXphdGlvbiBhbmQgc2hhcmUgdGhlCisgICAgICAgICAgICAgICAgICAgIHNhbWUgc291cmNlIGRpcmVjdG9yaWVzIG9uIHRoZWlyIG1hY2hpbmVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2V0IHVwIGFuIEF1dG9idWlsZGVyIGFuZCBoYXZlIGl0IHBvcHVsYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICBzc3RhdGUgY2FjaGUgYW5kIHNvdXJjZSBkaXJlY3Rvcmllcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIFlvY3RvIFByb2plY3QgY29tbXVuaXR5IGVuY291cmFnZXMgeW91CisgICAgICAgICAgICAgICAgICAgIHRvIHNlbmQgcGF0Y2hlcyB0byB0aGUgcHJvamVjdCB0byBmaXggYnVncyBvciBhZGQgZmVhdHVyZXMuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBzdWJtaXQgcGF0Y2hlcywgZm9sbG93IHRoZSBwcm9qZWN0IGNvbW1pdAorICAgICAgICAgICAgICAgICAgICBndWlkZWxpbmVzIGZvciB3cml0aW5nIGdvb2QgY29tbWl0IG1lc3NhZ2VzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSdob3ctdG8tc3VibWl0LWEtY2hhbmdlJz5Ib3cgdG8gU3VibWl0IGEgQ2hhbmdlPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VuZCBjaGFuZ2VzIHRvIHRoZSBjb3JlIHNvb25lciB0aGFuIGxhdGVyCisgICAgICAgICAgICAgICAgICAgIGFzIG90aGVycyBhcmUgbGlrZWx5IHRvIHJ1biBpbnRvIHRoZSBzYW1lIGlzc3Vlcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHNvbWUgZ3VpZGFuY2Ugb24gbWFpbGluZyBsaXN0cyB0byB1c2UsIHNlZSB0aGUgbGlzdCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2hvdy10by1zdWJtaXQtYS1jaGFuZ2UnPkhvdyB0byBTdWJtaXQgYSBDaGFuZ2U8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgYXZhaWxhYmxlIG1haWxpbmcgbGlzdHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Jlc291cmNlcy1tYWlsaW5nbGlzdCc+TWFpbGluZyBMaXN0czwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSd5b2N0by1wcm9qZWN0LXJlcG9zaXRvcmllcyc+CisgICAgPHRpdGxlPllvY3RvIFByb2plY3QgU291cmNlIFJlcG9zaXRvcmllczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgdGVhbSBtYWludGFpbnMgY29tcGxldGUgc291cmNlIHJlcG9zaXRvcmllcyBmb3IgYWxsCisgICAgICAgIFlvY3RvIFByb2plY3QgZmlsZXMgYXQKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2knPjwvdWxpbms+LgorICAgICAgICBUaGlzIHdlYi1iYXNlZCBzb3VyY2UgY29kZSBicm93c2VyIGlzIG9yZ2FuaXplZCBpbnRvIGNhdGVnb3JpZXMgYnkKKyAgICAgICAgZnVuY3Rpb24gc3VjaCBhcyBJREUgUGx1Z2lucywgTWF0Y2hib3gsIFBva3ksIFlvY3RvIExpbnV4IEtlcm5lbCwgYW5kCisgICAgICAgIHNvIGZvcnRoLgorICAgICAgICBGcm9tIHRoZSBpbnRlcmZhY2UsIHlvdSBjYW4gY2xpY2sgb24gYW55IHBhcnRpY3VsYXIgaXRlbSBpbiB0aGUgIk5hbWUiCisgICAgICAgIGNvbHVtbiBhbmQgc2VlIHRoZSBVUkwgYXQgdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSB0aGF0IHlvdSBuZWVkIHRvIGNsb25lCisgICAgICAgIGEgR2l0IHJlcG9zaXRvcnkgZm9yIHRoYXQgcGFydGljdWxhciBpdGVtLgorICAgICAgICBIYXZpbmcgYSBsb2NhbCBHaXQgcmVwb3NpdG9yeSBvZiB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4sIHdoaWNoIGlzCisgICAgICAgIHVzdWFsbHkgbmFtZWQgInBva3kiLCBhbGxvd3MKKyAgICAgICAgeW91IHRvIG1ha2UgY2hhbmdlcywgY29udHJpYnV0ZSB0byB0aGUgaGlzdG9yeSwgYW5kIHVsdGltYXRlbHkgZW5oYW5jZQorICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCdzIHRvb2xzLCBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzLCBhbmQgc28gZm9ydGguCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBhbnkgc3VwcG9ydGVkIHJlbGVhc2Ugb2YgWW9jdG8gUHJvamVjdCwgeW91IGNhbiBhbHNvIGdvIHRvIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7Jz5Zb2N0byBQcm9qZWN0IFdlYnNpdGU8L3VsaW5rPiBhbmQKKyAgICAgICAgc2VsZWN0IHRoZSAiRG93bmxvYWRzIiB0YWIgYW5kIGdldCBhIHJlbGVhc2VkIHRhcmJhbGwgb2YgdGhlCisgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gcmVwb3NpdG9yeSBvciBhbnkgc3VwcG9ydGVkIEJTUCB0YXJiYWxscy4KKyAgICAgICAgVW5wYWNraW5nIHRoZXNlIHRhcmJhbGxzIGdpdmVzIHlvdSBhIHNuYXBzaG90IG9mIHRoZSByZWxlYXNlZAorICAgICAgICBmaWxlcy4KKyAgICAgICAgPG5vdGU+PHRpdGxlPk5vdGVzPC90aXRsZT4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVjb21tZW5kZWQgbWV0aG9kIGZvciBzZXR0aW5nIHVwIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgZmlsZXMgZm9yIHN1cHBvcnRlZCBCU1BzCisgICAgICAgICAgICAgICAgICAgIChlLmcuLCA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+KSBpcyB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZ2l0Jz5HaXQ8L2xpbms+IHRvIGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlIHVwc3RyZWFtIHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIGFsd2F5cyB3b3JrIGluIG1hdGNoaW5nIGJyYW5jaGVzIGZvciBib3RoCisgICAgICAgICAgICAgICAgICAgIHRoZSBzZWxlY3RlZCBCU1AgcmVwb3NpdG9yeSBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4pIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBjaGVja2VkIG91dCB0aGUgIm1hc3RlciIgYnJhbmNoCisgICAgICAgICAgICAgICAgICAgIG9mIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gYW5kIHlvdSBhcmUgZ29pbmcgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4sIGJlIHN1cmUgdG8gY2hlY2tvdXQgdGhlCisgICAgICAgICAgICAgICAgICAgICJtYXN0ZXIiIGJyYW5jaCBvZiA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEluIHN1bW1hcnksIGhlcmUgaXMgd2hlcmUgeW91IGNhbiBnZXQgdGhlIHByb2plY3QgZmlsZXMgbmVlZGVkIGZvciBkZXZlbG9wbWVudDoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYSBpZD0nc291cmNlLXJlcG9zaXRvcmllcyc+PGVtcGhhc2lzPjx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0L2NnaXQuY2dpJz5Tb3VyY2UgUmVwb3NpdG9yaWVzOjwvdWxpbms+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBUaGlzIGFyZWEgY29udGFpbnMgSURFIFBsdWdpbnMsIE1hdGNoYm94LCBQb2t5LCBQb2t5IFN1cHBvcnQsIFRvb2xzLCBZb2N0byBMaW51eCBLZXJuZWwsIGFuZCBZb2N0bworICAgICAgICAgICAgICAgIE1ldGFkYXRhIExheWVycy4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGNyZWF0ZSBsb2NhbCBjb3BpZXMgb2YgR2l0IHJlcG9zaXRvcmllcyBmb3IgZWFjaCBvZiB0aGVzZSBhcmVhcy48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3NvdXJjZS1yZXBvcy5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI2aW4iIGRlcHRoPSI0aW4iIC8+CisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGFuY2hvciBpZD0naW5kZXgtZG93bmxvYWRzJyAvPjxlbXBoYXNpcz48dWxpbmsgdXJsPScmWU9DVE9fRExfVVJMOy9yZWxlYXNlcy8nPkluZGV4IG9mIC9yZWxlYXNlczo8L3VsaW5rPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhpcyBpcyBhbiBpbmRleCBvZiByZWxlYXNlcyBzdWNoIGFzCisgICAgICAgICAgICAgICAgdGhlIDx0cmFkZW1hcmsgY2xhc3M9J3RyYWRlJz5FY2xpcHNlPC90cmFkZW1hcms+CisgICAgICAgICAgICAgICAgWW9jdG8gUGx1Zy1pbiwgbWlzY2VsbGFuZW91cyBzdXBwb3J0LCBQb2t5LCBQc2V1ZG8sIGluc3RhbGxlcnMgZm9yIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMsCisgICAgICAgICAgICAgICAgYW5kIGFsbCByZWxlYXNlZCB2ZXJzaW9ucyBvZiBZb2N0byBQcm9qZWN0IGluIHRoZSBmb3JtIG9mIGltYWdlcyBvciB0YXJiYWxscy4KKyAgICAgICAgICAgICAgICBEb3dubG9hZGluZyBhbmQgZXh0cmFjdGluZyB0aGVzZSBmaWxlcyBkb2VzIG5vdCBwcm9kdWNlIGEgbG9jYWwgY29weSBvZiB0aGUKKyAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeSBidXQgcmF0aGVyIGEgc25hcHNob3Qgb2YgYSBwYXJ0aWN1bGFyIHJlbGVhc2Ugb3IgaW1hZ2UuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9pbmRleC1kb3dubG9hZHMucG5nIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNmluIiBkZXB0aD0iMy41aW4iIC8+CisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJEb3dubG9hZHMiIHBhZ2UgZm9yIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsnPllvY3RvIFByb2plY3QgV2Vic2l0ZTwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQWNjZXNzIHRoaXMgcGFnZSBieSBnb2luZyB0byB0aGUgd2Vic2l0ZSBhbmQgdGhlbiBzZWxlY3RpbmcKKyAgICAgICAgICAgICAgICB0aGUgIkRvd25sb2FkcyIgdGFiLgorICAgICAgICAgICAgICAgIFRoaXMgcGFnZSBhbGxvd3MgeW91IHRvIGRvd25sb2FkIGFueSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgcmVsZWFzZSBvciBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgaW4gdGFyYmFsbCBmb3JtLgorICAgICAgICAgICAgICAgIFRoZSB0YXJiYWxscyBhcmUgc2ltaWxhciB0byB0aG9zZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRExfVVJMOy9yZWxlYXNlcy8nPkluZGV4IG9mIC9yZWxlYXNlczo8L3VsaW5rPiBhcmVhLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMveXAtZG93bmxvYWQucG5nIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNmluIiBkZXB0aD0iNGluIiAvPgorICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3lvY3RvLXByb2plY3QtdGVybXMnPgorICAgIDx0aXRsZT5Zb2N0byBQcm9qZWN0IFRlcm1zPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBGb2xsb3dpbmcgaXMgYSBsaXN0IG9mIHRlcm1zIGFuZCBkZWZpbml0aW9ucyB1c2VycyBuZXcgdG8gdGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQKKyAgICAgICAgZW52aXJvbm1lbnQgbWlnaHQgZmluZCBoZWxwZnVsLgorICAgICAgICBXaGlsZSBzb21lIG9mIHRoZXNlIHRlcm1zIGFyZSB1bml2ZXJzYWwsIHRoZSBsaXN0IGluY2x1ZGVzIHRoZW0ganVzdCBpbiBjYXNlOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5BcHBlbmQgRmlsZXM6PC9lbXBoYXNpcz4gRmlsZXMgdGhhdCBhcHBlbmQgYnVpbGQgaW5mb3JtYXRpb24gdG8KKyAgICAgICAgICAgICAgICBhIHJlY2lwZSBmaWxlLgorICAgICAgICAgICAgICAgIEFwcGVuZCBmaWxlcyBhcmUga25vd24gYXMgQml0QmFrZSBhcHBlbmQgZmlsZXMgYW5kIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBleHBlY3RzIGV2ZXJ5IGFwcGVuZCBmaWxlIHRvIGhhdmUgYSBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICAgICAgcmVjaXBlICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4pIGZpbGUuCisgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIHRoZSBhcHBlbmQgZmlsZSBhbmQgY29ycmVzcG9uZGluZyByZWNpcGUgZmlsZQorICAgICAgICAgICAgICAgIG11c3QgdXNlIHRoZSBzYW1lIHJvb3QgZmlsZW5hbWUuCisgICAgICAgICAgICAgICAgVGhlIGZpbGVuYW1lcyBjYW4gZGlmZmVyIG9ubHkgaW4gdGhlIGZpbGUgdHlwZSBzdWZmaXggdXNlZCAoZS5nLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb3JtZmFjdG9yXzAuMC5iYjwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+Zm9ybWZhY3Rvcl8wLjAuYmJhcHBlbmQ8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkluZm9ybWF0aW9uIGluIGFwcGVuZCBmaWxlcyBleHRlbmRzIG9yIG92ZXJyaWRlcyB0aGUKKyAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBpbiB0aGUgc2ltaWxhcmx5LW5hbWVkIHJlY2lwZSBmaWxlLgorICAgICAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIG9mIGFuIGFwcGVuZCBmaWxlIGluIHVzZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1iYmFwcGVuZC1maWxlcyc+VXNpbmcgLmJiYXBwZW5kIEZpbGVzPC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgQXBwZW5kIGZpbGVzIGNhbiBhbHNvIHVzZSB3aWxkY2FyZCBwYXR0ZXJucyBpbiB0aGVpciB2ZXJzaW9uIG51bWJlcnMKKyAgICAgICAgICAgICAgICAgICAgc28gdGhleSBjYW4gYmUgYXBwbGllZCB0byBtb3JlIHRoYW4gb25lIHZlcnNpb24gb2YgdGhlIHVuZGVybHlpbmcgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdiaXRiYWtlLXRlcm0nPjxlbXBoYXNpcz5CaXRCYWtlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhlIHRhc2sgZXhlY3V0b3IgYW5kIHNjaGVkdWxlciB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICAgICBzeXN0ZW0gdG8gYnVpbGQgaW1hZ2VzLgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEJpdEJha2UsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7Jz5CaXRCYWtlIFVzZXIgTWFudWFsPC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J2J1aWxkLWRpcmVjdG9yeSc+PGVtcGhhc2lzPkJ1aWxkIERpcmVjdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoaXMgdGVybSByZWZlcnMgdG8gdGhlIGFyZWEgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgc3lzdGVtIGZvciBidWlsZHMuCisgICAgICAgICAgICAgICAgVGhlIGFyZWEgaXMgY3JlYXRlZCB3aGVuIHlvdSA8ZmlsZW5hbWU+c291cmNlPC9maWxlbmFtZT4gdGhlCisgICAgICAgICAgICAgICAgc2V0dXAgZW52aXJvbm1lbnQgc2NyaXB0IHRoYXQgaXMgZm91bmQgaW4gdGhlIFNvdXJjZSBEaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAoaS5lLiA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdWxpbms+KS4KKyAgICAgICAgICAgICAgICBUaGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRPUERJUic+PGZpbGVuYW1lPlRPUERJUjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBwb2ludHMgdG8gdGhlIEJ1aWxkIERpcmVjdG9yeS48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGhhdmUgYSBsb3Qgb2YgZmxleGliaWxpdHkgd2hlbiBjcmVhdGluZyB0aGUgQnVpbGQKKyAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIHNvbWUgZXhhbXBsZXMgdGhhdCBzaG93IGhvdyB0byBjcmVhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGVzIGFzc3VtZSB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+IGlzCisgICAgICAgICAgICAgICAgICAgIG5hbWVkIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DcmVhdGUgdGhlIEJ1aWxkIERpcmVjdG9yeSBpbnNpZGUgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBEaXJlY3RvcnkgYW5kIGxldCB0aGUgbmFtZSBvZiB0aGUgQnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcnkgZGVmYXVsdCB0byA8ZmlsZW5hbWU+YnVpbGQ8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgJEhPTUUvcG9reQorICAgICAkIHNvdXJjZSAmT0VfSU5JVF9GSUxFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DcmVhdGUgdGhlIEJ1aWxkIERpcmVjdG9yeSBpbnNpZGUgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvbWUgZGlyZWN0b3J5IGFuZCBzcGVjaWZpY2FsbHkgbmFtZSBpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50ZXN0LWJ1aWxkczwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCAkSE9NRQorICAgICAkIHNvdXJjZSBwb2t5LyZPRV9JTklUX0ZJTEU7IHRlc3QtYnVpbGRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3ZpZGUgYSBkaXJlY3RvcnkgcGF0aCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY2FsbHkgbmFtZSB0aGUgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFueSBpbnRlcm1lZGlhdGUgZm9sZGVycyBpbiB0aGUgcGF0aG5hbWUgbXVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbmV4dCBleGFtcGxlIGNyZWF0ZXMgYSBCdWlsZCBEaXJlY3RvcnkgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+WVAtJlBPS1lWRVJTSU9OOzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4geW91ciBob21lIGRpcmVjdG9yeSB3aXRoaW4gdGhlIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IDxmaWxlbmFtZT5teWJ1aWxkczwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJGNkICRIT01FCisgICAgICQgc291cmNlICRIT01FL3Bva3kvJk9FX0lOSVRfRklMRTsgJEhPTUUvbXlidWlsZHMvWVAtJlBPS1lWRVJTSU9OOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIEJ1aWxkIERpcmVjdG9yeSBjb250YWlucworICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhlIGJ1aWxkIHN5c3RlbSB1c2VzIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgaXRzIHdvcmsuCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4gY2Fubm90IGJlIHVuZGVyIE5GUy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRodXMsIGJ5IGRlZmF1bHQsIHRoZSBCdWlsZCBEaXJlY3RvcnkgY2Fubm90IGJlIHVuZGVyIE5GUy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSBuZWVkIHRoZSBCdWlsZCBEaXJlY3RvcnkgdG8gYmUgdW5kZXIgTkZTLAorICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBzZXQgdGhpcyB1cCBieSBzZXR0aW5nIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHVzZSBhIGxvY2FsIGRyaXZlLgorICAgICAgICAgICAgICAgICAgICAgICAgRG9pbmcgc28gZWZmZWN0aXZlbHkgc2VwYXJhdGVzIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSA8ZmlsZW5hbWU+VE9QRElSPC9maWxlbmFtZT4sIHdoaWNoIGlzIHRoZSBCdWlsZAorICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DbGFzc2VzOjwvZW1waGFzaXM+IEZpbGVzIHRoYXQgcHJvdmlkZSBmb3IgbG9naWMgZW5jYXBzdWxhdGlvbgorICAgICAgICAgICAgICAgIGFuZCBpbmhlcml0YW5jZSBzbyB0aGF0IGNvbW1vbmx5IHVzZWQgcGF0dGVybnMgY2FuIGJlIGRlZmluZWQgb25jZSBhbmQgdGhlbiBlYXNpbHkgdXNlZAorICAgICAgICAgICAgICAgIGluIG11bHRpcGxlIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgRm9yIHJlZmVyZW5jZSBpbmZvcm1hdGlvbiBvbiB0aGUgWW9jdG8gUHJvamVjdCBjbGFzc2VzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1jbGFzc2VzJz5DbGFzc2VzPC91bGluaz4iIGNoYXB0ZXIgb2YgdGhlCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICAgICAgICAgIENsYXNzIGZpbGVzIGVuZCB3aXRoIHRoZSA8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlbmFtZSBleHRlbnNpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNvbmZpZ3VyYXRpb24gRmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaW4gdmFyaW91cyA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGVzIHByb3ZpZGVzIGdsb2JhbCBkZWZpbml0aW9ucyBvZiB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUgaW4KKyAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICBjb250YWlucyB1c2VyLWRlZmluZWQgdmFyaWFibGVzIHRoYXQgYWZmZWN0IGV2ZXJ5IGJ1aWxkLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bWV0YS15b2N0by9jb25mL2Rpc3Ryby9wb2t5LmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBkZWZpbmVzIFlvY3RvICJkaXN0cm8iIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICB2YXJpYWJsZXMgdXNlZCBvbmx5IHdoZW4gYnVpbGRpbmcgd2l0aCB0aGlzIHBvbGljeS4KKyAgICAgICAgICAgICAgICBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHdoaWNoCisgICAgICAgICAgICAgICAgYXJlIGxvY2F0ZWQgdGhyb3VnaG91dCB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPiwgZGVmaW5lCisgICAgICAgICAgICAgICAgdmFyaWFibGVzIGZvciBzcGVjaWZpYyBoYXJkd2FyZSBhbmQgYXJlIG9ubHkgdXNlZCB3aGVuIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgZm9yIHRoYXQgdGFyZ2V0IChlLmcuIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYWNoaW5lL2JlYWdsZWJvbmUuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICBmaWxlIGRlZmluZXMgdmFyaWFibGVzIGZvciB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgQVJNIENvcnRleC1BOAorICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IGJvYXJkKS4KKyAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uIGZpbGVzIGVuZCB3aXRoIGEgPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlbmFtZSBleHRlbnNpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmEgaWQ9J2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbic+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkNyb3NzLURldmVsb3BtZW50IFRvb2xjaGFpbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbiBnZW5lcmFsLCBhIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbiBpcyBhIGNvbGxlY3Rpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgc29mdHdhcmUgZGV2ZWxvcG1lbnQgdG9vbHMgYW5kIHV0aWxpdGllcyB0aGF0IHJ1biBvbiBvbmUKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlIGFuZCBhbGxvdyB5b3UgdG8gZGV2ZWxvcCBzb2Z0d2FyZSBmb3IgYQorICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbnQsIG9yIHRhcmdldGVkLCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIHRvb2xjaGFpbnMgY29udGFpbiBjcm9zcy1jb21waWxlcnMsIGxpbmtlcnMsIGFuZAorICAgICAgICAgICAgICAgICAgICBkZWJ1Z2dlcnMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIFlvY3RvIFByb2plY3Qgc3VwcG9ydHMgdHdvIGRpZmZlcmVudCBjcm9zcy1kZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW5zOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgdG9vbGNoYWluIG9ubHkgdXNlZCBieSBhbmQgd2l0aGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0QmFrZSB3aGVuIGJ1aWxkaW5nIGFuIGltYWdlIGZvciBhIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BIHJlbG9jYXRhYmxlIHRvb2xjaGFpbiB1c2VkIG91dHNpZGUgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGJ5IGRldmVsb3BlcnMgd2hlbiBkZXZlbG9waW5nIGFwcGxpY2F0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgd2lsbCBydW4gb24gYSB0YXJnZXRlZCBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29tZXRpbWVzIHRoaXMgcmVsb2NhdGFibGUgY3Jvc3MtZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW4gaXMgcmVmZXJyZWQgdG8gYXMgdGhlIG1ldGEtdG9vbGNoYWluLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRpb24gb2YgdGhlc2UgdG9vbGNoYWlucyBpcyBzaW1wbGUgYW5kIGF1dG9tYXRlZC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRvb2xjaGFpbiBjb25jZXB0cyBhcyB0aGV5IGFwcGx5IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNjcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4tZ2VuZXJhdGlvbic+Q3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluIEdlbmVyYXRpb248L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICByZWxvY2F0YWJsZSB0b29sY2hhaW4gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7Jz5Zb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkltYWdlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQW4gaW1hZ2UgaXMgYW4gYXJ0aWZhY3Qgb2YgdGhlIEJpdEJha2UgYnVpbGQgcHJvY2VzcyBnaXZlbgorICAgICAgICAgICAgICAgIGEgY29sbGVjdGlvbiBvZiByZWNpcGVzIGFuZCByZWxhdGVkIE1ldGFkYXRhLgorICAgICAgICAgICAgICAgIEltYWdlcyBhcmUgdGhlIGJpbmFyeSBvdXRwdXQgdGhhdCBydW4gb24gc3BlY2lmaWMgaGFyZHdhcmUgb3IKKyAgICAgICAgICAgICAgICBRRU1VIGFuZCBhcmUgdXNlZCBmb3Igc3BlY2lmaWMgdXNlLWNhc2VzLgorICAgICAgICAgICAgICAgIEZvciBhIGxpc3Qgb2YgdGhlIHN1cHBvcnRlZCBpbWFnZSB0eXBlcyB0aGF0IHRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1pbWFnZXMnPkltYWdlczwvdWxpbms+IgorICAgICAgICAgICAgICAgIGNoYXB0ZXIgaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYSBpZD0nbGF5ZXInPjxlbXBoYXNpcz5MYXllcjo8L2VtcGhhc2lzPiBBIGNvbGxlY3Rpb24gb2YgcmVjaXBlcyByZXByZXNlbnRpbmcgdGhlIGNvcmUsCisgICAgICAgICAgICAgICAgYSBCU1AsIG9yIGFuIGFwcGxpY2F0aW9uIHN0YWNrLgorICAgICAgICAgICAgICAgIEZvciBhIGRpc2N1c3Npb24gc3BlY2lmaWNhbGx5IG9uIEJTUCBMYXllcnMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjYnNwLWxheWVycyc+QlNQIExheWVyczwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQKQorICAgICAgICAgICAgICAgIERldmVsb3BlcidzIEd1aWRlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdtZXRhLXRvb2xjaGFpbic+PGVtcGhhc2lzPk1ldGEtVG9vbGNoYWluOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQSB0ZXJtIHNvbWV0aW1lcyB1c2VkIGZvcgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbic+Q3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluPC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYSBpZD0nbWV0YWRhdGEnPjxlbXBoYXNpcz5NZXRhZGF0YTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoZSBmaWxlcyB0aGF0IEJpdEJha2UgcGFyc2VzIHdoZW4gYnVpbGRpbmcgYW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgSW4gZ2VuZXJhbCwgTWV0YWRhdGEgaW5jbHVkZXMgcmVjaXBlcywgY2xhc3NlcywgYW5kCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgICAgICBJbiB0aGUgY29udGV4dCBvZiB0aGUga2VybmVsICgia2VybmVsIE1ldGFkYXRhIiksCisgICAgICAgICAgICAgICAgaXQgcmVmZXJzIHRvIE1ldGFkYXRhIGluIHRoZSA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgYnJhbmNoZXMgb2YgdGhlIGtlcm5lbCBzb3VyY2UgR2l0IHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYSBpZD0nb2UtY29yZSc+PGVtcGhhc2lzPk9FLUNvcmU6PC9lbXBoYXNpcz4gQSBjb3JlIHNldCBvZiBNZXRhZGF0YSBvcmlnaW5hdGluZworICAgICAgICAgICAgICAgIHdpdGggT3BlbkVtYmVkZGVkIChPRSkgdGhhdCBpcyBzaGFyZWQgYmV0d2VlbiBPRSBhbmQgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgVGhpcyBNZXRhZGF0YSBpcyBmb3VuZCBpbiB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmEgaWQ9J2J1aWxkLXN5c3RlbS10ZXJtJz48ZW1waGFzaXM+T3BlbkVtYmVkZGVkIEJ1aWxkIFN5c3RlbTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gc3BlY2lmaWMgdG8gdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXMgYmFzZWQgb24gYW5vdGhlciBwcm9qZWN0IGtub3duCisgICAgICAgICAgICAgICAgYXMgIlBva3kiLCB3aGljaCB1c2VzCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYml0YmFrZS10ZXJtJz5CaXRCYWtlPC9saW5rPiBhcyB0aGUgdGFzaworICAgICAgICAgICAgICAgIGV4ZWN1dG9yLgorICAgICAgICAgICAgICAgIFRocm91Z2hvdXQgdGhlIFlvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbiBzZXQsIHRoZQorICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXMgc29tZXRpbWVzIHJlZmVycmVkIHRvIHNpbXBseQorICAgICAgICAgICAgICAgIGFzICJ0aGUgYnVpbGQgc3lzdGVtIi4KKyAgICAgICAgICAgICAgICBJZiBvdGhlciBidWlsZCBzeXN0ZW1zLCBzdWNoIGFzIGEgaG9zdCBvciB0YXJnZXQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgYXJlIHJlZmVyZW5jZWQsIHRoZSBkb2N1bWVudGF0aW9uIGNsZWFybHkgc3RhdGVzIHRoZQorICAgICAgICAgICAgICAgIGRpZmZlcmVuY2UuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEZvciBzb21lIGhpc3RvcmljYWwgaW5mb3JtYXRpb24gYWJvdXQgUG9reSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdwb2t5Jz5Qb2t5PC9saW5rPiB0ZXJtLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UGFja2FnZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEluIHRoZSBjb250ZXh0IG9mIHRoZSBZb2N0byBQcm9qZWN0LCB0aGlzIHRlcm0gcmVmZXJzIHRvIGEKKyAgICAgICAgICAgICAgICByZWNpcGUncyBwYWNrYWdlZCBvdXRwdXQgcHJvZHVjZWQgYnkgQml0QmFrZSAoaS5lLiBhCisgICAgICAgICAgICAgICAgImJha2VkIHJlY2lwZSIpLgorICAgICAgICAgICAgICAgIEEgcGFja2FnZSBpcyBnZW5lcmFsbHkgdGhlIGNvbXBpbGVkIGJpbmFyaWVzIHByb2R1Y2VkIGZyb20gdGhlCisgICAgICAgICAgICAgICAgcmVjaXBlJ3Mgc291cmNlcy4KKyAgICAgICAgICAgICAgICBZb3UgImJha2UiIHNvbWV0aGluZyBieSBydW5uaW5nIGl0IHRocm91Z2ggQml0QmFrZS48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+SXQgaXMgd29ydGggbm90aW5nIHRoYXQgdGhlIHRlcm0gInBhY2thZ2UiIGNhbiwgaW4gZ2VuZXJhbCwgaGF2ZSBzdWJ0bGUKKyAgICAgICAgICAgICAgICBtZWFuaW5ncy4gIEZvciBleGFtcGxlLCB0aGUgcGFja2FnZXMgcmVmZXJyZWQgdG8gaW4gdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjcGFja2FnZXMnPlRoZSBCdWlsZCBIb3N0IFBhY2thZ2VzPC91bGluaz4iIHNlY3Rpb24gYXJlCisgICAgICAgICAgICAgICAgY29tcGlsZWQgYmluYXJpZXMgdGhhdCwgd2hlbiBpbnN0YWxsZWQsIGFkZCBmdW5jdGlvbmFsaXR5IHRvIHlvdXIgTGludXgKKyAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24uPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkFub3RoZXIgcG9pbnQgd29ydGggbm90aW5nIGlzIHRoYXQgaGlzdG9yaWNhbGx5IHdpdGhpbiB0aGUgWW9jdG8gUHJvamVjdCwKKyAgICAgICAgICAgICAgICByZWNpcGVzIHdlcmUgcmVmZXJyZWQgdG8gYXMgcGFja2FnZXMgLSB0aHVzLCB0aGUgZXhpc3RlbmNlIG9mIHNldmVyYWwgQml0QmFrZQorICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB0aGF0IGFyZSBzZWVtaW5nbHkgbWlzLW5hbWVkLAorICAgICAgICAgICAgICAgIChlLmcuIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz4sIGFuZAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QRSc+PGZpbGVuYW1lPlBFPC9maWxlbmFtZT48L3VsaW5rPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBhY2thZ2UgR3JvdXBzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQXJiaXRyYXJ5IGdyb3VwcyBvZiBzb2Z0d2FyZSBSZWNpcGVzLgorICAgICAgICAgICAgICAgIFlvdSB1c2UgcGFja2FnZSBncm91cHMgdG8gaG9sZCByZWNpcGVzIHRoYXQsIHdoZW4gYnVpbHQsCisgICAgICAgICAgICAgICAgdXN1YWxseSBhY2NvbXBsaXNoIGEgc2luZ2xlIHRhc2suCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgcGFja2FnZSBncm91cCBjb3VsZCBjb250YWluIHRoZSByZWNpcGVzIGZvciBhCisgICAgICAgICAgICAgICAgY29tcGFueeKAmXMgcHJvcHJpZXRhcnkgb3IgdmFsdWUtYWRkIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgIE9yLCB0aGUgcGFja2FnZSBncm91cCBjb3VsZCBjb250YWluIHRoZSByZWNpcGVzIHRoYXQgZW5hYmxlCisgICAgICAgICAgICAgICAgZ3JhcGhpY3MuCisgICAgICAgICAgICAgICAgQSBwYWNrYWdlIGdyb3VwIGlzIHJlYWxseSBqdXN0IGFub3RoZXIgcmVjaXBlLgorICAgICAgICAgICAgICAgIEJlY2F1c2UgcGFja2FnZSBncm91cCBmaWxlcyBhcmUgcmVjaXBlcywgdGhleSBlbmQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZW5hbWUgZXh0ZW5zaW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdwb2t5Jz48ZW1waGFzaXM+UG9reTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoZSB0ZXJtICJwb2t5IiBjYW4gbWVhbiBzZXZlcmFsIHRoaW5ncy4KKyAgICAgICAgICAgICAgICBJbiBpdHMgbW9zdCBnZW5lcmFsIHNlbnNlLCBpdCBpcyBhbiBvcGVuLXNvdXJjZQorICAgICAgICAgICAgICAgIHByb2plY3QgdGhhdCB3YXMgaW5pdGlhbGx5IGRldmVsb3BlZCBieSBPcGVuZWRIYW5kLgorICAgICAgICAgICAgICAgIFdpdGggT3BlbmVkSGFuZCwgcG9reSB3YXMgZGV2ZWxvcGVkIG9mZiBvZiB0aGUgZXhpc3RpbmcKKyAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGJlY29taW5nIGEgY29tbWVyY2lhbGx5CisgICAgICAgICAgICAgICAgc3VwcG9ydGFibGUgYnVpbGQgc3lzdGVtIGZvciBlbWJlZGRlZCBMaW51eC4KKyAgICAgICAgICAgICAgICBBZnRlciBJbnRlbCBDb3Jwb3JhdGlvbiBhY3F1aXJlZCBPcGVuZWRIYW5kLCB0aGUKKyAgICAgICAgICAgICAgICBwcm9qZWN0IHBva3kgYmVjYW1lIHRoZSBiYXNpcyBmb3IgdGhlIFlvY3RvIFByb2plY3QncworICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbS48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+V2l0aGluIHRoZSBZb2N0byBQcm9qZWN0IHNvdXJjZSByZXBvc2l0b3JpZXMsCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBleGlzdHMgYXMgYSBzZXBhcmF0ZSBHaXQKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5IHlvdSBjYW4gY2xvbmUgdG8geWllbGQgYSBsb2NhbCBjb3B5IG9uIHlvdXIKKyAgICAgICAgICAgICAgICBob3N0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICBUaHVzLCAicG9reSIgY2FuIHJlZmVyIHRvIHRoZSBsb2NhbCBjb3B5IG9mIHRoZSBTb3VyY2UKKyAgICAgICAgICAgICAgICBEaXJlY3RvcnkgdXNlZCBmb3IgZGV2ZWxvcG1lbnQgd2l0aGluIHRoZSBZb2N0bworICAgICAgICAgICAgICAgIFByb2plY3QuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkZpbmFsbHksICJwb2t5IiBjYW4gcmVmZXIgdG8gdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRElTVFJPJz48ZmlsZW5hbWU+RElTVFJPPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIChpLmUuIGRpc3RyaWJ1dGlvbikgY3JlYXRlZCB3aGVuIHlvdSB1c2UgdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgUHJvamVjdCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gcmVwb3NpdG9yeSB0byBidWlsZCBhbiBpbWFnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UmVjaXBlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQSBzZXQgb2YgaW5zdHJ1Y3Rpb25zIGZvciBidWlsZGluZyBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICBBIHJlY2lwZSBkZXNjcmliZXMgd2hlcmUgeW91IGdldCBzb3VyY2UgY29kZSwgd2hpY2ggcGF0Y2hlcworICAgICAgICAgICAgICAgIHRvIGFwcGx5LCBob3cgdG8gY29uZmlndXJlIHRoZSBzb3VyY2UsIGhvdyB0byBjb21waWxlIGl0IGFuZCBzbyBvbi4KKyAgICAgICAgICAgICAgICBSZWNpcGVzIGFsc28gZGVzY3JpYmUgZGVwZW5kZW5jaWVzIGZvciBsaWJyYXJpZXMgb3IgZm9yIG90aGVyCisgICAgICAgICAgICAgICAgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICBSZWNpcGVzIHJlcHJlc2VudCB0aGUgbG9naWNhbCB1bml0IG9mIGV4ZWN1dGlvbiwgdGhlIHNvZnR3YXJlCisgICAgICAgICAgICAgICAgdG8gYnVpbGQsIHRoZSBpbWFnZXMgdG8gYnVpbGQsIGFuZCB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGUgZXh0ZW5zaW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdzb3VyY2UtZGlyZWN0b3J5Jz48ZW1waGFzaXM+U291cmNlIERpcmVjdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoaXMgdGVybSByZWZlcnMgdG8gdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgY3JlYXRlZCBhcyBhIHJlc3VsdAorICAgICAgICAgICAgICAgIG9mIGNyZWF0aW5nIGEgbG9jYWwgY29weSBvZiB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5IDxmaWxlbmFtZT5naXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBvciBleHBhbmRpbmcgYSByZWxlYXNlZCA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IHRhcmJhbGwuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIENyZWF0aW5nIGEgbG9jYWwgY29weSBvZiB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeSBpcyB0aGUgcmVjb21tZW5kZWQgbWV0aG9kIGZvciBzZXR0aW5nIHVwCisgICAgICAgICAgICAgICAgICAgIHlvdXIgU291cmNlIERpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgU29tZXRpbWVzIHlvdSBtaWdodCBoZWFyIHRoZSB0ZXJtICJwb2t5IGRpcmVjdG9yeSIgdXNlZCB0byByZWZlcgorICAgICAgICAgICAgICAgIHRvIHRoaXMgZGlyZWN0b3J5IHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBmaWxlIG9yCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBuYW1lcyB0aGF0IGNvbnRhaW4gc3BhY2VzLgorICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRoYXQgdGhlIFNvdXJjZSBEaXJlY3RvcnkgeW91IHVzZSBkb2VzIG5vdCBjb250YWluCisgICAgICAgICAgICAgICAgICAgIHRoZXNlIHR5cGVzIG9mIG5hbWVzLgorICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgU291cmNlIERpcmVjdG9yeSBjb250YWlucyBCaXRCYWtlLCBEb2N1bWVudGF0aW9uLAorICAgICAgICAgICAgICAgIE1ldGFkYXRhIGFuZCBvdGhlciBmaWxlcyB0aGF0IGFsbCBzdXBwb3J0IHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IG11c3QgaGF2ZSB0aGUgU291cmNlIERpcmVjdG9yeSBpbiBwbGFjZSBvbgorICAgICAgICAgICAgICAgIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtIGluIG9yZGVyIHRvIGRvIGFueSBkZXZlbG9wbWVudCB1c2luZworICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0LjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPldoZW4geW91IGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2YgdGhlIEdpdCByZXBvc2l0b3J5LCB5b3UKKyAgICAgICAgICAgICAgICBjYW4gbmFtZSB0aGUgcmVwb3NpdG9yeSBhbnl0aGluZyB5b3UgbGlrZS4KKyAgICAgICAgICAgICAgICBUaHJvdWdob3V0IG11Y2ggb2YgdGhlIGRvY3VtZW50YXRpb24sICJwb2t5IgorICAgICAgICAgICAgICAgIGlzIHVzZWQgYXMgdGhlIG5hbWUgb2YgdGhlIHRvcC1sZXZlbCBmb2xkZXIgb2YgdGhlIGxvY2FsIGNvcHkgb2YKKyAgICAgICAgICAgICAgICB0aGUgcG9reSBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICBTbywgZm9yIGV4YW1wbGUsIGNsb25pbmcgdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gR2l0CisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSByZXN1bHRzIGluIGEgbG9jYWwgR2l0IHJlcG9zaXRvcnkgd2hvc2UgdG9wLWxldmVsCisgICAgICAgICAgICAgICAgZm9sZGVyIGlzIGFsc28gbmFtZWQgInBva3kiLjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPldoaWxlIGl0IGlzIG5vdCByZWNvbW1lbmRlZCB0aGF0IHlvdSB1c2UgdGFyYmFsbCBleHBhbnNpb24KKyAgICAgICAgICAgICAgICB0byBzZXQgdXAgdGhlIFNvdXJjZSBEaXJlY3RvcnksIGlmIHlvdSBkbywgdGhlIHRvcC1sZXZlbAorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBuYW1lIG9mIHRoZSBTb3VyY2UgRGlyZWN0b3J5IGlzIGRlcml2ZWQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2UgdGFyYmFsbC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZG93bmxvYWRpbmcgYW5kIHVucGFja2luZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4mWU9DVE9fUE9LWV9UQVJCQUxMOzwvZmlsZW5hbWU+IHJlc3VsdHMgaW4gYQorICAgICAgICAgICAgICAgIFNvdXJjZSBEaXJlY3Rvcnkgd2hvc2Ugcm9vdCBmb2xkZXIgaXMgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JllPQ1RPX1BPS1k7PC9maWxlbmFtZT4uPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+SXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlCisgICAgICAgICAgICAgICAgU291cmNlIERpcmVjdG9yeSBjcmVhdGVkIGJ5IHVucGFja2luZyBhIHJlbGVhc2VkIHRhcmJhbGwgYXMKKyAgICAgICAgICAgICAgICBjb21wYXJlZCB0byBjbG9uaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3k8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSB1bnBhY2sgYSB0YXJiYWxsLCB5b3UgaGF2ZSBhbiBleGFjdCBjb3B5IG9mIHRoZSBmaWxlcworICAgICAgICAgICAgICAgIGJhc2VkIG9uIHRoZSB0aW1lIG9mIHJlbGVhc2UgLSBhIGZpeGVkIHJlbGVhc2UgcG9pbnQuCisgICAgICAgICAgICAgICAgQW55IGNoYW5nZXMgeW91IG1ha2UgdG8geW91ciBsb2NhbCBmaWxlcyBpbiB0aGUgU291cmNlIERpcmVjdG9yeQorICAgICAgICAgICAgICAgIGFyZSBvbiB0b3Agb2YgdGhlIHJlbGVhc2UgYW5kIHdpbGwgcmVtYWluIGxvY2FsIG9ubHkuCisgICAgICAgICAgICAgICAgT24gdGhlIG90aGVyIGhhbmQsIHdoZW4geW91IGNsb25lIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnksIHlvdSBoYXZlIGFuIGFjdGl2ZSBkZXZlbG9wbWVudCByZXBvc2l0b3J5IHdpdGgKKyAgICAgICAgICAgICAgICBhY2Nlc3MgdG8gdGhlIHVwc3RyZWFtIHJlcG9zaXRvcnkncyBicmFuY2hlcyBhbmQgdGFncy4KKyAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIGFueSBsb2NhbCBjaGFuZ2VzIHlvdSBtYWtlIHRvIHRoZSBsb2NhbAorICAgICAgICAgICAgICAgIFNvdXJjZSBEaXJlY3RvcnkgY2FuIGJlIGxhdGVyIGFwcGxpZWQgdG8gYWN0aXZlIGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgYnJhbmNoZXMgb2YgdGhlIHVwc3RyZWFtIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gR2l0CisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeS48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb25jZXB0cyByZWxhdGVkIHRvIEdpdAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcmllcywgYnJhbmNoZXMsIGFuZCB0YWdzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlcG9zaXRvcmllcy10YWdzLWFuZC1icmFuY2hlcyc+UmVwb3NpdG9yaWVzLCBUYWdzLCBhbmQgQnJhbmNoZXM8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRhc2s6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBBIHVuaXQgb2YgZXhlY3V0aW9uIGZvciBCaXRCYWtlIChlLmcuCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNvbXBpbGUnPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtZmV0Y2gnPjxmaWxlbmFtZT5kb19mZXRjaDwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLXBhdGNoJz48ZmlsZW5hbWU+ZG9fcGF0Y2g8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVwc3RyZWFtOjwvZW1waGFzaXM+IEEgcmVmZXJlbmNlIHRvIHNvdXJjZSBjb2RlIG9yIHJlcG9zaXRvcmllcworICAgICAgICAgICAgICAgIHRoYXQgYXJlIG5vdCBsb2NhbCB0byB0aGUgZGV2ZWxvcG1lbnQgc3lzdGVtIGJ1dCBsb2NhdGVkIGluIGEgbWFzdGVyIGFyZWEgdGhhdCBpcyBjb250cm9sbGVkCisgICAgICAgICAgICAgICAgYnkgdGhlIG1haW50YWluZXIgb2YgdGhlIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpbiBvcmRlciBmb3IgYSBkZXZlbG9wZXIgdG8gd29yayBvbiBhIHBhcnRpY3VsYXIgcGllY2Ugb2YgY29kZSwgdGhleSBuZWVkIHRvCisgICAgICAgICAgICAgICAgZmlyc3QgZ2V0IGEgY29weSBvZiBpdCBmcm9tIGFuICJ1cHN0cmVhbSIgc291cmNlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdsaWNlbnNpbmcnPgorICAgIDx0aXRsZT5MaWNlbnNpbmc8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEJlY2F1c2Ugb3BlbiBzb3VyY2UgcHJvamVjdHMgYXJlIG9wZW4gdG8gdGhlIHB1YmxpYywgdGhleSBoYXZlIGRpZmZlcmVudCBsaWNlbnNpbmcgc3RydWN0dXJlcyBpbiBwbGFjZS4KKyAgICAgICAgTGljZW5zZSBldm9sdXRpb24gZm9yIGJvdGggT3BlbiBTb3VyY2UgYW5kIEZyZWUgU29mdHdhcmUgaGFzIGFuIGludGVyZXN0aW5nIGhpc3RvcnkuCisgICAgICAgIElmIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiB0aGlzIGhpc3RvcnksIHlvdSBjYW4gZmluZCBiYXNpYyBpbmZvcm1hdGlvbiBoZXJlOgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPSdodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL09wZW4tc291cmNlX2xpY2Vuc2UnPk9wZW4gc291cmNlIGxpY2Vuc2UgaGlzdG9yeTwvdWxpbms+CisgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9J2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRnJlZV9zb2Z0d2FyZV9saWNlbnNlJz5GcmVlIHNvZnR3YXJlIGxpY2Vuc2UKKyAgICAgICAgICAgIGhpc3Rvcnk8L3VsaW5rPjwvcGFyYT48L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBJbiBnZW5lcmFsLCB0aGUgWW9jdG8gUHJvamVjdCBpcyBicm9hZGx5IGxpY2Vuc2VkIHVuZGVyIHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5CisgICAgICAgIChNSVQpIExpY2Vuc2UuCisgICAgICAgIE1JVCBsaWNlbnNpbmcgcGVybWl0cyB0aGUgcmV1c2Ugb2Ygc29mdHdhcmUgd2l0aGluIHByb3ByaWV0YXJ5IHNvZnR3YXJlIGFzIGxvbmcgYXMgdGhlCisgICAgICAgIGxpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGF0IHNvZnR3YXJlLgorICAgICAgICBNSVQgaXMgYWxzbyBjb21wYXRpYmxlIHdpdGggdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLgorICAgICAgICBQYXRjaGVzIHRvIHRoZSBZb2N0byBQcm9qZWN0IGZvbGxvdyB0aGUgdXBzdHJlYW0gbGljZW5zaW5nIHNjaGVtZS4KKyAgICAgICAgWW91IGNhbiBmaW5kIGluZm9ybWF0aW9uIG9uIHRoZSBNSVQgbGljZW5zZQorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocCc+aGVyZTwvdWxpbms+LgorICAgICAgICBZb3UgY2FuIGZpbmQgaW5mb3JtYXRpb24gb24gdGhlIEdOVSBHUEwgPHVsaW5rIHVybD0naHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9MR1BMLTMuMCc+CisgICAgICAgIGhlcmU8L3VsaW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hlbiB5b3UgYnVpbGQgYW4gaW1hZ2UgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QsIHRoZSBidWlsZCBwcm9jZXNzIHVzZXMgYQorICAgICAgICBrbm93biBsaXN0IG9mIGxpY2Vuc2VzIHRvIGVuc3VyZSBjb21wbGlhbmNlLgorICAgICAgICBZb3UgY2FuIGZpbmQgdGhpcyBsaXN0IGluIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPiBhdAorICAgICAgICA8ZmlsZW5hbWU+bWV0YS9maWxlcy9jb21tb24tbGljZW5zZXM8L2ZpbGVuYW1lPi4KKyAgICAgICAgT25jZSB0aGUgYnVpbGQgY29tcGxldGVzLCB0aGUgbGlzdCBvZiBhbGwgbGljZW5zZXMgZm91bmQgYW5kIHVzZWQgZHVyaW5nIHRoYXQgYnVpbGQgYXJlCisgICAgICAgIGtlcHQgaW4gdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPiBhdAorICAgICAgICA8ZmlsZW5hbWU+dG1wL2RlcGxveS9saWNlbnNlczwvZmlsZW5hbWU+LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBJZiBhIG1vZHVsZSByZXF1aXJlcyBhIGxpY2Vuc2UgdGhhdCBpcyBub3QgaW4gdGhlIGJhc2UgbGlzdCwgdGhlIGJ1aWxkIHByb2Nlc3MKKyAgICAgICAgZ2VuZXJhdGVzIGEgd2FybmluZyBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICBUaGVzZSB0b29scyBtYWtlIGl0IGVhc2llciBmb3IgYSBkZXZlbG9wZXIgdG8gYmUgY2VydGFpbiBvZiB0aGUgbGljZW5zZXMgd2l0aCB3aGljaAorICAgICAgICB0aGVpciBzaGlwcGVkIHByb2R1Y3RzIG11c3QgY29tcGx5LgorICAgICAgICBIb3dldmVyLCBldmVuIHdpdGggdGhlc2UgdG9vbHMgaXQgaXMgc3RpbGwgdXAgdG8gdGhlIGRldmVsb3BlciB0byByZXNvbHZlIHBvdGVudGlhbCBsaWNlbnNpbmcgaXNzdWVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgYmFzZSBsaXN0IG9mIGxpY2Vuc2VzIHVzZWQgYnkgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgU29mdHdhcmUgUGFja2FnZQorICAgICAgICBEYXRhIEV4Y2hhbmdlIChTUERYKSBsaXN0IGFuZCB0aGUgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSAoT1NJKSBwcm9qZWN0cy4KKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3NwZHgub3JnJz5TUERYIEdyb3VwPC91bGluaz4gaXMgYSB3b3JraW5nIGdyb3VwIG9mIHRoZSBMaW51eCBGb3VuZGF0aW9uCisgICAgICAgIHRoYXQgbWFpbnRhaW5zIGEgc3BlY2lmaWNhdGlvbgorICAgICAgICBmb3IgYSBzdGFuZGFyZCBmb3JtYXQgZm9yIGNvbW11bmljYXRpbmcgdGhlIGNvbXBvbmVudHMsIGxpY2Vuc2VzLCBhbmQgY29weXJpZ2h0cworICAgICAgICBhc3NvY2lhdGVkIHdpdGggYSBzb2Z0d2FyZSBwYWNrYWdlLgorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vb3BlbnNvdXJjZS5vcmcnPk9TSTwvdWxpbms+IGlzIGEgY29ycG9yYXRpb24gZGVkaWNhdGVkIHRvIHRoZSBPcGVuIFNvdXJjZQorICAgICAgICBEZWZpbml0aW9uIGFuZCB0aGUgZWZmb3J0IGZvciByZXZpZXdpbmcgYW5kIGFwcHJvdmluZyBsaWNlbnNlcyB0aGF0CisgICAgICAgIGNvbmZvcm0gdG8gdGhlIE9wZW4gU291cmNlIERlZmluaXRpb24gKE9TRCkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFlvdSBjYW4gZmluZCBhIGxpc3Qgb2YgdGhlIGNvbWJpbmVkIFNQRFggYW5kIE9TSSBsaWNlbnNlcyB0aGF0IHRoZQorICAgICAgICBZb2N0byBQcm9qZWN0IHVzZXMgaW4gdGhlCisgICAgICAgIDxmaWxlbmFtZT5tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlczwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpbiB5b3VyCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gdGhhdCBjYW4gaGVscCB5b3UgbWFpbnRhaW4gY29tcGxpYW5jZSB3aXRoIHZhcmlvdXMKKyAgICAgICAgb3BlbiBzb3VyY2UgbGljZW5zaW5nIGR1cmluZyB0aGUgbGlmZWN5Y2xlIG9mIGEgcHJvZHVjdCBjcmVhdGVkIHVzaW5nCisgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0LCBzZWUgdGhlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdtYWludGFpbmluZy1vcGVuLXNvdXJjZS1saWNlbnNlLWNvbXBsaWFuY2UtZHVyaW5nLXlvdXItcHJvZHVjdHMtbGlmZWN5Y2xlJz5NYWludGFpbmluZyBPcGVuIFNvdXJjZSBMaWNlbnNlIENvbXBsaWFuY2UgRHVyaW5nIFlvdXIgUHJvZHVjdCdzIExpZmVjeWNsZTwvbGluaz4iCisgICAgICAgIHNlY3Rpb24uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nZ2l0Jz4KKyAgICA8dGl0bGU+R2l0PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBtYWtlcyBleHRlbnNpdmUgdXNlIG9mIEdpdCwKKyAgICAgICAgd2hpY2ggaXMgYSBmcmVlLCBvcGVuIHNvdXJjZSBkaXN0cmlidXRlZCB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtLgorICAgICAgICBHaXQgc3VwcG9ydHMgZGlzdHJpYnV0ZWQgZGV2ZWxvcG1lbnQsIG5vbi1saW5lYXIgZGV2ZWxvcG1lbnQsIGFuZCBjYW4gaGFuZGxlIGxhcmdlIHByb2plY3RzLgorICAgICAgICBJdCBpcyBiZXN0IHRoYXQgeW91IGhhdmUgc29tZSBmdW5kYW1lbnRhbCB1bmRlcnN0YW5kaW5nIG9mIGhvdyBHaXQgdHJhY2tzIHByb2plY3RzIGFuZAorICAgICAgICBob3cgdG8gd29yayB3aXRoIEdpdCBpZiB5b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgWW9jdG8gUHJvamVjdCBmb3IgZGV2ZWxvcG1lbnQuCisgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBhIHF1aWNrIG92ZXJ2aWV3IG9mIGhvdyBHaXQgd29ya3MgYW5kIHByb3ZpZGVzIHlvdSB3aXRoIGEgc3VtbWFyeQorICAgICAgICBvZiBzb21lIGVzc2VudGlhbCBHaXQgY29tbWFuZHMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEdpdCwgc2VlCisgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQtc2NtLmNvbS9kb2N1bWVudGF0aW9uJz48L3VsaW5rPi4KKyAgICAgICAgSWYgeW91IG5lZWQgdG8gZG93bmxvYWQgR2l0LCBnbyB0byA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0LXNjbS5jb20vZG93bmxvYWQnPjwvdWxpbms+LgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdyZXBvc2l0b3JpZXMtdGFncy1hbmQtYnJhbmNoZXMnPgorICAgICAgICA8dGl0bGU+UmVwb3NpdG9yaWVzLCBUYWdzLCBhbmQgQnJhbmNoZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgbWVudGlvbmVkIGVhcmxpZXIgaW4gdGhlIHNlY3Rpb24KKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd5b2N0by1wcm9qZWN0LXJlcG9zaXRvcmllcyc+WW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzPC9saW5rPiIsCisgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCBtYWludGFpbnMgc291cmNlIHJlcG9zaXRvcmllcyBhdAorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpJz48L3VsaW5rPi4KKyAgICAgICAgICAgIElmIHlvdSBsb29rIGF0IHRoaXMgd2ViLWludGVyZmFjZSBvZiB0aGUgcmVwb3NpdG9yaWVzLCBlYWNoIGl0ZW0gaXMgYSBzZXBhcmF0ZQorICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEdpdCByZXBvc2l0b3JpZXMgdXNlIGJyYW5jaGluZyB0ZWNobmlxdWVzIHRoYXQgdHJhY2sgY29udGVudCBjaGFuZ2UgKG5vdCBmaWxlcykKKyAgICAgICAgICAgIHdpdGhpbiBhIHByb2plY3QgKGUuZy4gYSBuZXcgZmVhdHVyZSBvciB1cGRhdGVkIGRvY3VtZW50YXRpb24pLgorICAgICAgICAgICAgQ3JlYXRpbmcgYSB0cmVlLWxpa2Ugc3RydWN0dXJlIGJhc2VkIG9uIHByb2plY3QgZGl2ZXJnZW5jZSBhbGxvd3MgZm9yIGV4Y2VsbGVudCBoaXN0b3JpY2FsCisgICAgICAgICAgICBpbmZvcm1hdGlvbiBvdmVyIHRoZSBsaWZlIG9mIGEgcHJvamVjdC4KKyAgICAgICAgICAgIFRoaXMgbWV0aG9kb2xvZ3kgYWxzbyBhbGxvd3MgZm9yIGFuIGVudmlyb25tZW50IGZyb20gd2hpY2ggeW91IGNhbiBkbyBsb3RzIG9mCisgICAgICAgICAgICBsb2NhbCBleHBlcmltZW50YXRpb24gb24gcHJvamVjdHMgYXMgeW91IGRldmVsb3AgY2hhbmdlcyBvciBuZXcgZmVhdHVyZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgR2l0IHJlcG9zaXRvcnkgcmVwcmVzZW50cyBhbGwgZGV2ZWxvcG1lbnQgZWZmb3J0cyBmb3IgYSBnaXZlbiBwcm9qZWN0LgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBHaXQgcmVwb3NpdG9yeSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IGNvbnRhaW5zIGFsbCBjaGFuZ2VzCisgICAgICAgICAgICBhbmQgZGV2ZWxvcG1lbnRzIGZvciBQb2t5IG92ZXIgdGhlIGNvdXJzZSBvZiBpdHMgZW50aXJlIGxpZmUuCisgICAgICAgICAgICBUaGF0IG1lYW5zIHRoYXQgYWxsIGNoYW5nZXMgdGhhdCBtYWtlIHVwIGFsbCByZWxlYXNlcyBhcmUgY2FwdHVyZWQuCisgICAgICAgICAgICBUaGUgcmVwb3NpdG9yeSBtYWludGFpbnMgYSBjb21wbGV0ZSBoaXN0b3J5IG9mIGNoYW5nZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gY3JlYXRlIGEgbG9jYWwgY29weSBvZiBhbnkgcmVwb3NpdG9yeSBieSAiY2xvbmluZyIgaXQgd2l0aCB0aGUgR2l0CisgICAgICAgICAgICA8ZmlsZW5hbWU+Y2xvbmU8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgV2hlbiB5b3UgY2xvbmUgYSBHaXQgcmVwb3NpdG9yeSwgeW91IGVuZCB1cCB3aXRoIGFuIGlkZW50aWNhbCBjb3B5IG9mIHRoZQorICAgICAgICAgICAgcmVwb3NpdG9yeSBvbiB5b3VyIGRldmVsb3BtZW50IHN5c3RlbS4KKyAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgYSBsb2NhbCBjb3B5IG9mIGEgcmVwb3NpdG9yeSwgeW91IGNhbiB0YWtlIHN0ZXBzIHRvIGRldmVsb3AgbG9jYWxseS4KKyAgICAgICAgICAgIEZvciBleGFtcGxlcyBvbiBob3cgdG8gY2xvbmUgR2l0IHJlcG9zaXRvcmllcywgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2dldHRpbmctc2V0dXAnPkdldHRpbmcgU2V0IFVwPC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhhdCBHaXQgdHJhY2tzIGNvbnRlbnQgY2hhbmdlIGFuZAorICAgICAgICAgICAgbm90IGZpbGVzLgorICAgICAgICAgICAgR2l0IHVzZXMgImJyYW5jaGVzIiB0byBvcmdhbml6ZSBkaWZmZXJlbnQgZGV2ZWxvcG1lbnQgZWZmb3J0cy4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiByZXBvc2l0b3J5IGhhcworICAgICAgICAgICAgc2V2ZXJhbCBicmFuY2hlcyB0aGF0IGluY2x1ZGUgdGhlIGN1cnJlbnQKKyAgICAgICAgICAgIDxmaWxlbmFtZT4mRElTVFJPX05BTUU7PC9maWxlbmFtZT4gYnJhbmNoLCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tYXN0ZXI8L2ZpbGVuYW1lPiBicmFuY2gsIGFuZCBtYW55IGJyYW5jaGVzIGZvciBwYXN0CisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2VzLgorICAgICAgICAgICAgWW91IGNhbiBzZWUgYWxsIHRoZSBicmFuY2hlcyBieSBnb2luZyB0bworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpL3Bva3kvJz48L3VsaW5rPiBhbmQKKyAgICAgICAgICAgIGNsaWNraW5nIG9uIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaS9wb2t5L3JlZnMvaGVhZHMnPlsuLi5dPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgbGluayBiZW5lYXRoIHRoZSAiQnJhbmNoIiBoZWFkaW5nLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBFYWNoIG9mIHRoZXNlIGJyYW5jaGVzIHJlcHJlc2VudHMgYSBzcGVjaWZpYyBhcmVhIG9mIGRldmVsb3BtZW50LgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5tYXN0ZXI8L2ZpbGVuYW1lPiBicmFuY2ggcmVwcmVzZW50cyB0aGUgY3VycmVudCBvciBtb3N0IHJlY2VudAorICAgICAgICAgICAgZGV2ZWxvcG1lbnQuCisgICAgICAgICAgICBBbGwgb3RoZXIgYnJhbmNoZXMgcmVwcmVzZW50IG9mZnNob290cyBvZiB0aGUgPGZpbGVuYW1lPm1hc3RlcjwvZmlsZW5hbWU+CisgICAgICAgICAgICBicmFuY2guCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4geW91IGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2YgYSBHaXQgcmVwb3NpdG9yeSwgdGhlIGNvcHkgaGFzIHRoZSBzYW1lIHNldAorICAgICAgICAgICAgb2YgYnJhbmNoZXMgYXMgdGhlIG9yaWdpbmFsLgorICAgICAgICAgICAgVGhpcyBtZWFucyB5b3UgY2FuIHVzZSBHaXQgdG8gY3JlYXRlIGEgbG9jYWwgd29ya2luZyBhcmVhIChhbHNvIGNhbGxlZCBhIGJyYW5jaCkKKyAgICAgICAgICAgIHRoYXQgdHJhY2tzIGEgc3BlY2lmaWMgZGV2ZWxvcG1lbnQgYnJhbmNoIGZyb20gdGhlIHNvdXJjZSBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgIGluIG90aGVyIHdvcmRzLCB5b3UgY2FuIGRlZmluZSB5b3VyIGxvY2FsIEdpdCBlbnZpcm9ubWVudCB0byB3b3JrIG9uIGFueSBkZXZlbG9wbWVudAorICAgICAgICAgICAgYnJhbmNoIGluIHRoZSByZXBvc2l0b3J5LgorICAgICAgICAgICAgVG8gaGVscCBpbGx1c3RyYXRlLCBoZXJlIGlzIGEgc2V0IG9mIGNvbW1hbmRzIHRoYXQgY3JlYXRlcyBhIGxvY2FsIGNvcHkgb2YgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IEdpdCByZXBvc2l0b3J5IGFuZCB0aGVuIGNyZWF0ZXMgYW5kIGNoZWNrcyBvdXQgYSBsb2NhbAorICAgICAgICAgICAgR2l0IGJyYW5jaCB0aGF0IHRyYWNrcyB0aGUgWW9jdG8gUHJvamVjdCAmRElTVFJPOyBSZWxlYXNlICgmRElTVFJPX05BTUU7KSBkZXZlbG9wbWVudDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kKKyAgICAgJCBjZCBwb2t5CisgICAgICQgZ2l0IGNoZWNrb3V0IC1iICZESVNUUk9fTkFNRTsgb3JpZ2luLyZESVNUUk9fTkFNRTsKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIG5hbWUgb2YgdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgb2YgeW91ciBsb2NhbAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgIGlzICJwb2t5IiBhbmQgdGhlIG5hbWUgb2YgdGhhdCBsb2NhbCB3b3JraW5nIGFyZWEgKGxvY2FsIGJyYW5jaCkKKyAgICAgICAgICAgIHlvdSBqdXN0IGNyZWF0ZWQgYW5kIGNoZWNrZWQgb3V0IGlzICImRElTVFJPX05BTUU7Ii4KKyAgICAgICAgICAgIFRoZSBmaWxlcyBpbiB5b3VyIGxvY2FsIHJlcG9zaXRvcnkgbm93IHJlZmxlY3QgdGhlIHNhbWUgZmlsZXMgdGhhdAorICAgICAgICAgICAgYXJlIGluIHRoZSAiJkRJU1RST19OQU1FOyIgZGV2ZWxvcG1lbnQgYnJhbmNoIG9mIHRoZQorICAgICAgICAgICAgWW9jdG8gUHJvamVjdCdzICJwb2t5IiB1cHN0cmVhbSByZXBvc2l0b3J5LgorICAgICAgICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhhdCB3aGVuIHlvdSBjcmVhdGUgYW5kIGNoZWNrb3V0IGEKKyAgICAgICAgICAgIGxvY2FsIHdvcmtpbmcgYnJhbmNoIGJhc2VkIG9uIGEgYnJhbmNoIG5hbWUsCisgICAgICAgICAgICB5b3VyIGxvY2FsIGVudmlyb25tZW50IG1hdGNoZXMgdGhlICJ0aXAiIG9mIHRoYXQgZGV2ZWxvcG1lbnQgYnJhbmNoCisgICAgICAgICAgICBhdCB0aGUgdGltZSB5b3UgY3JlYXRlZCB5b3VyIGxvY2FsIGJyYW5jaCwgd2hpY2ggY291bGQgYmUKKyAgICAgICAgICAgIGRpZmZlcmVudCBmcm9tIHRoZSBmaWxlcyBhdCB0aGUgdGltZSBvZiBhIHNpbWlsYXJseSBuYW1lZCByZWxlYXNlLgorICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIGNyZWF0aW5nIGFuZCBjaGVja2luZyBvdXQgYSBsb2NhbCBicmFuY2ggYmFzZWQgb24KKyAgICAgICAgICAgIHRoZSAiJkRJU1RST19OQU1FOyIgYnJhbmNoIG5hbWUgaXMgbm90IHRoZSBzYW1lIGFzCisgICAgICAgICAgICBjbG9uaW5nIGFuZCBjaGVja2luZyBvdXQgdGhlICJtYXN0ZXIiIGJyYW5jaC4KKyAgICAgICAgICAgIEtlZXAgcmVhZGluZyB0byBzZWUgaG93IHlvdSBjcmVhdGUgYSBsb2NhbCBzbmFwc2hvdCBvZiBhIFlvY3RvCisgICAgICAgICAgICBQcm9qZWN0IFJlbGVhc2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEdpdCB1c2VzICJ0YWdzIiB0byBtYXJrIHNwZWNpZmljIGNoYW5nZXMgaW4gYSByZXBvc2l0b3J5LgorICAgICAgICAgICAgVHlwaWNhbGx5LCBhIHRhZyBpcyB1c2VkIHRvIG1hcmsgYSBzcGVjaWFsIHBvaW50IHN1Y2ggYXMgdGhlIGZpbmFsCisgICAgICAgICAgICBjaGFuZ2UgYmVmb3JlIGEgcHJvamVjdCBpcyByZWxlYXNlZC4KKyAgICAgICAgICAgIFlvdSBjYW4gc2VlIHRoZSB0YWdzIHVzZWQgd2l0aCB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQKKyAgICAgICAgICAgIHJlcG9zaXRvcnkgYnkgZ29pbmcgdG8KKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaS9wb2t5Lyc+PC91bGluaz4gYW5kCisgICAgICAgICAgICBjbGlja2luZyBvbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2kvcG9reS9yZWZzL3RhZ3MnPlsuLi5dPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgbGluayBiZW5lYXRoIHRoZSAiVGFnIiBoZWFkaW5nLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTb21lIGtleSB0YWdzIGFyZSA8ZmlsZW5hbWU+ZHlsYW4tOS4wLjQ8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kb3JhLTEwLjAuNDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+ZGFpc3ktMTEuMC4yPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZGl6enktMTIuMC4wPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPiZESVNUUk9fTkFNRTstJlBPS1lWRVJTSU9OOzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlc2UgdGFncyByZXByZXNlbnQgWW9jdG8gUHJvamVjdCByZWxlYXNlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgY3JlYXRlIGEgbG9jYWwgY29weSBvZiB0aGUgR2l0IHJlcG9zaXRvcnksIHlvdSBhbHNvIGhhdmUgYWNjZXNzIHRvIGFsbCB0aGUKKyAgICAgICAgICAgIHRhZ3MuCisgICAgICAgICAgICBTaW1pbGFyIHRvIGJyYW5jaGVzLCB5b3UgY2FuIGNyZWF0ZSBhbmQgY2hlY2tvdXQgYSBsb2NhbCB3b3JraW5nIEdpdCBicmFuY2ggYmFzZWQKKyAgICAgICAgICAgIG9uIGEgdGFnIG5hbWUuCisgICAgICAgICAgICBXaGVuIHlvdSBkbyB0aGlzLCB5b3UgZ2V0IGEgc25hcHNob3Qgb2YgdGhlIEdpdCByZXBvc2l0b3J5IHRoYXQgcmVmbGVjdHMKKyAgICAgICAgICAgIHRoZSBzdGF0ZSBvZiB0aGUgZmlsZXMgd2hlbiB0aGUgY2hhbmdlIHdhcyBtYWRlIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHRhZy4KKyAgICAgICAgICAgIFRoZSBtb3N0IGNvbW1vbiB1c2UgaXMgdG8gY2hlY2tvdXQgYSB3b3JraW5nIGJyYW5jaCB0aGF0IG1hdGNoZXMgYSBzcGVjaWZpYworICAgICAgICAgICAgWW9jdG8gUHJvamVjdCByZWxlYXNlLgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reQorICAgICAkIGNkIHBva3kKKyAgICAgJCBnaXQgY2hlY2tvdXQgLWIgbXktJkRJU1RST19OQU1FOy0mUE9LWVZFUlNJT047ICZESVNUUk9fTkFNRTstJlBPS1lWRVJTSU9OOworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgbmFtZSBvZiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBvZiB5b3VyIGxvY2FsIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgIEZpbGVzIEdpdCByZXBvc2l0b3J5IGlzIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4uCisgICAgICAgICAgICBBbmQsIHRoZSBuYW1lIG9mIHRoZSBsb2NhbCBicmFuY2ggeW91IGhhdmUgY3JlYXRlZCBhbmQgY2hlY2tlZCBvdXQgaXMKKyAgICAgICAgICAgIDxmaWxlbmFtZT5teS0mRElTVFJPX05BTUU7LSZQT0tZVkVSU0lPTjs8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFRoZSBmaWxlcyBpbiB5b3VyIHJlcG9zaXRvcnkgbm93IGV4YWN0bHkgbWF0Y2ggdGhlIFlvY3RvIFByb2plY3QgJkRJU1RSTzsKKyAgICAgICAgICAgIFJlbGVhc2UgdGFnICg8ZmlsZW5hbWU+JkRJU1RST19OQU1FOy0mUE9LWVZFUlNJT047PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhhdCB3aGVuIHlvdSBjcmVhdGUgYW5kIGNoZWNrb3V0IGEgbG9jYWwKKyAgICAgICAgICAgIHdvcmtpbmcgYnJhbmNoIGJhc2VkIG9uIGEgdGFnLCB5b3VyIGVudmlyb25tZW50IG1hdGNoZXMgYSBzcGVjaWZpYyBwb2ludAorICAgICAgICAgICAgaW4gdGltZSBhbmQgbm90IHRoZSBlbnRpcmUgZGV2ZWxvcG1lbnQgYnJhbmNoLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2Jhc2ljLWNvbW1hbmRzJz4KKyAgICAgICAgPHRpdGxlPkJhc2ljIENvbW1hbmRzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEdpdCBoYXMgYW4gZXh0ZW5zaXZlIHNldCBvZiBjb21tYW5kcyB0aGF0IGxldHMgeW91IG1hbmFnZSBjaGFuZ2VzIGFuZCBwZXJmb3JtCisgICAgICAgICAgICBjb2xsYWJvcmF0aW9uIG92ZXIgdGhlIGxpZmUgb2YgYSBwcm9qZWN0LgorICAgICAgICAgICAgQ29udmVuaWVudGx5IHRob3VnaCwgeW91IGNhbiBtYW5hZ2Ugd2l0aCBhIHNtYWxsIHNldCBvZiBiYXNpYyBvcGVyYXRpb25zIGFuZCB3b3JrZmxvd3MKKyAgICAgICAgICAgIG9uY2UgeW91IHVuZGVyc3RhbmQgdGhlIGJhc2ljIHBoaWxvc29waHkgYmVoaW5kIEdpdC4KKyAgICAgICAgICAgIFlvdSBkbyBub3QgaGF2ZSB0byBiZSBhbiBleHBlcnQgaW4gR2l0IHRvIGJlIGZ1bmN0aW9uYWwuCisgICAgICAgICAgICBBIGdvb2QgcGxhY2UgdG8gbG9vayBmb3IgaW5zdHJ1Y3Rpb24gb24gYSBtaW5pbWFsIHNldCBvZiBHaXQgY29tbWFuZHMgaXMKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQtc2NtLmNvbS9kb2N1bWVudGF0aW9uJz5oZXJlPC91bGluaz4uCisgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBkb3dubG9hZCBHaXQsIHlvdSBjYW4gZG8gc28KKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQtc2NtLmNvbS9kb3dubG9hZCc+aGVyZTwvdWxpbms+LCBhbHRob3VnaAorICAgICAgICAgICAgYW55IHJlYXNvbmFibHkgY3VycmVudCBMaW51eCBkaXN0cmlidXRpb24gc2hvdWxkIGFscmVhZHkgaGF2ZSBhbgorICAgICAgICAgICAgaW5zdGFsbGFibGUgcGFja2FnZSBmb3IgR2l0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgZG8gbm90IGtub3cgbXVjaCBhYm91dCBHaXQsIHlvdSBzaG91bGQgZWR1Y2F0ZQorICAgICAgICAgICAgeW91cnNlbGYgYnkgdmlzaXRpbmcgdGhlIGxpbmtzIHByZXZpb3VzbHkgbWVudGlvbmVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3QgYnJpZWZseSBkZXNjcmliZXMgc29tZSBiYXNpYyBHaXQgb3BlcmF0aW9ucyBhcyBhIHdheSB0byBnZXQgc3RhcnRlZC4KKyAgICAgICAgICAgIEFzIHdpdGggYW55IHNldCBvZiBjb21tYW5kcywgdGhpcyBsaXN0IChpbiBtb3N0IGNhc2VzKSBzaW1wbHkgc2hvd3MgdGhlIGJhc2UgY29tbWFuZCBhbmQKKyAgICAgICAgICAgIG9taXRzIHRoZSBtYW55IGFyZ3VtZW50cyB0aGV5IHN1cHBvcnQuCisgICAgICAgICAgICBTZWUgdGhlIEdpdCBkb2N1bWVudGF0aW9uIGZvciBjb21wbGV0ZSBkZXNjcmlwdGlvbnMgYW5kIHN0cmF0ZWdpZXMgb24gaG93IHRvIHVzZSB0aGVzZSBjb21tYW5kczoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IGluaXQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPiBJbml0aWFsaXplcyBhbiBlbXB0eSBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbm5vdCB1c2UgR2l0IGNvbW1hbmRzIHVubGVzcyB5b3UgaGF2ZSBhIDxmaWxlbmFtZT4uZ2l0PC9maWxlbmFtZT4gcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgY2xvbmU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBDcmVhdGVzIGEgbG9jYWwgY2xvbmUgb2YgYSBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgRHVyaW5nIGNvbGxhYm9yYXRpb24sIHRoaXMgY29tbWFuZCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhCisgICAgICAgICAgICAgICAgICAgIGxvY2FsIEdpdCByZXBvc2l0b3J5IHRoYXQgaXMgb24gZXF1YWwgZm9vdGluZyB3aXRoIGEgZmVsbG93CisgICAgICAgICAgICAgICAgICAgIGRldmVsb3BlcuKAmXMgR2l0IHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBhZGQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPiBTdGFnZXMgdXBkYXRlZCBmaWxlIGNvbnRlbnRzCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBpbmRleCB0aGF0CisgICAgICAgICAgICAgICAgICAgIEdpdCB1c2VzIHRvIHRyYWNrIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHN0YWdlIGFsbCBmaWxlcyB0aGF0IGhhdmUgY2hhbmdlZCBiZWZvcmUgeW91IGNhbiBjb21taXQgdGhlbS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgY29tbWl0PC9maWxlbmFtZT46PC9lbXBoYXNpcz4gQ3JlYXRlcyBhICJjb21taXQiIHRoYXQgZG9jdW1lbnRzCisgICAgICAgICAgICAgICAgICAgIHRoZSBjaGFuZ2VzIHlvdSBtYWRlLgorICAgICAgICAgICAgICAgICAgICBDb21taXRzIGFyZSB1c2VkIGZvciBoaXN0b3JpY2FsIHB1cnBvc2VzLCBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBtYWludGFpbmVyIG9mIGEgcHJvamVjdAorICAgICAgICAgICAgICAgICAgICB3aWxsIGFsbG93IHRoZSBjaGFuZ2UsIGFuZCBmb3IgdWx0aW1hdGVseSBwdXNoaW5nIHRoZSBjaGFuZ2UgZnJvbSB5b3VyIGxvY2FsIEdpdCByZXBvc2l0b3J5CisgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIHByb2plY3TigJlzIHVwc3RyZWFtIChvciBtYXN0ZXIpIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IHN0YXR1czwvZmlsZW5hbWU+OjwvZW1waGFzaXM+IFJlcG9ydHMgYW55IG1vZGlmaWVkIGZpbGVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgcG9zc2libHkgbmVlZCB0byBiZSBzdGFnZWQgYW5kIGNvbW1pdHRlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgY2hlY2tvdXQgJmx0O2JyYW5jaC1uYW1lJmd0OzwvZmlsZW5hbWU+OjwvZW1waGFzaXM+IENoYW5nZXMKKyAgICAgICAgICAgICAgICAgICAgeW91ciB3b3JraW5nIGJyYW5jaC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGlzIGFuYWxvZ291cyB0byAiY2QiLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBjaGVja291dCDigJNiICZsdDt3b3JraW5nLWJyYW5jaCZndDs8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPiBDcmVhdGVzCisgICAgICAgICAgICAgICAgICAgIGEgd29ya2luZyBicmFuY2ggb24geW91ciBsb2NhbCBtYWNoaW5lIHdoZXJlIHlvdSBjYW4gaXNvbGF0ZSB3b3JrLgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBhIGdvb2QgaWRlYSB0byB1c2UgbG9jYWwgYnJhbmNoZXMgd2hlbiBhZGRpbmcgc3BlY2lmaWMgZmVhdHVyZXMgb3IgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB3YXkgaWYgeW91IGRvIG5vdCBsaWtlIHdoYXQgeW91IGhhdmUgZG9uZSB5b3UgY2FuIGVhc2lseSBnZXQgcmlkIG9mIHRoZSB3b3JrLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBicmFuY2g8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPiBSZXBvcnRzCisgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nIGxvY2FsIGJyYW5jaGVzIGFuZAorICAgICAgICAgICAgICAgICAgICB0ZWxscyB5b3UgdGhlIGJyYW5jaCBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSB3b3JraW5nLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBicmFuY2ggLUQgJmx0O2JyYW5jaC1uYW1lJmd0OzwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIERlbGV0ZXMgYW4gZXhpc3RpbmcgbG9jYWwgYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBiZSBpbiBhIGxvY2FsIGJyYW5jaCBvdGhlciB0aGFuIHRoZSBvbmUgeW91IGFyZSBkZWxldGluZworICAgICAgICAgICAgICAgICAgICBpbiBvcmRlciB0byBkZWxldGUgPGZpbGVuYW1lPiZsdDticmFuY2gtbmFtZSZndDs8L2ZpbGVuYW1lPi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgcHVsbDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+IFJldHJpZXZlcyBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgICAgICBmcm9tIGFuIHVwc3RyZWFtIEdpdAorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5IGFuZCBwbGFjZXMgaXQgaW4geW91ciBsb2NhbCBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHVzZSB0aGlzIGNvbW1hbmQgdG8gbWFrZSBzdXJlIHlvdSBhcmUgc3luY2hyb25pemVkIHdpdGggdGhlIHJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgZnJvbSB3aGljaCB5b3UgYXJlIGJhc2luZyBjaGFuZ2VzICguZS5nLiB0aGUgbWFzdGVyIGJyYW5jaCkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IHB1c2g8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBTZW5kcyBhbGwgeW91ciBjb21taXR0ZWQgbG9jYWwgY2hhbmdlcyB0byBhbiB1cHN0cmVhbSBHaXQKKyAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSAoZS5nLiBhIGNvbnRyaWJ1dGlvbiByZXBvc2l0b3J5KS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1haW50YWluZXIgb2YgdGhlIHByb2plY3QgZHJhd3MgZnJvbSB0aGVzZSByZXBvc2l0b3JpZXMKKyAgICAgICAgICAgICAgICAgICAgd2hlbiBhZGRpbmcgY2hhbmdlcyB0byB0aGUgcHJvamVjdOKAmXMgbWFzdGVyIHJlcG9zaXRvcnkgb3IKKyAgICAgICAgICAgICAgICAgICAgb3RoZXIgZGV2ZWxvcG1lbnQgYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgbWVyZ2U8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPiBDb21iaW5lcyBvciBhZGRzIGNoYW5nZXMgZnJvbSBvbmUKKyAgICAgICAgICAgICAgICAgICAgbG9jYWwgYnJhbmNoIG9mIHlvdXIgcmVwb3NpdG9yeSB3aXRoIGFub3RoZXIgYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBjcmVhdGUgYSBsb2NhbCBHaXQgcmVwb3NpdG9yeSwgdGhlIGRlZmF1bHQgYnJhbmNoIGlzIG5hbWVkICJtYXN0ZXIiLgorICAgICAgICAgICAgICAgICAgICBBIHR5cGljYWwgd29ya2Zsb3cgaXMgdG8gY3JlYXRlIGEgdGVtcG9yYXJ5IGJyYW5jaCBmb3IgaXNvbGF0ZWQgd29yaywgbWFrZSBhbmQgY29tbWl0IHlvdXIKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlcywgc3dpdGNoIHRvIHlvdXIgbG9jYWwgbWFzdGVyIGJyYW5jaCwgbWVyZ2UgdGhlIGNoYW5nZXMgZnJvbSB0aGUgdGVtcG9yYXJ5IGJyYW5jaCBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICBsb2NhbCBtYXN0ZXIgYnJhbmNoLCBhbmQgdGhlbiBkZWxldGUgdGhlIHRlbXBvcmFyeSBicmFuY2guPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IGNoZXJyeS1waWNrPC9maWxlbmFtZT46PC9lbXBoYXNpcz4gQ2hvb3NlIGFuZCBhcHBseSBzcGVjaWZpYworICAgICAgICAgICAgICAgICAgICBjb21taXRzIGZyb20gb25lIGJyYW5jaCBpbnRvIGFub3RoZXIgYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICBUaGVyZSBhcmUgdGltZXMgd2hlbiB5b3UgbWlnaHQgbm90IGJlIGFibGUgdG8gbWVyZ2UgYWxsIHRoZSBjaGFuZ2VzIGluIG9uZSBicmFuY2ggd2l0aAorICAgICAgICAgICAgICAgICAgICBhbm90aGVyIGJ1dCBuZWVkIHRvIHBpY2sgb3V0IGNlcnRhaW4gb25lcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXRrPC9maWxlbmFtZT46PC9lbXBoYXNpcz4gUHJvdmlkZXMgYSBHVUkgdmlldyBvZiB0aGUgYnJhbmNoZXMKKyAgICAgICAgICAgICAgICAgICAgYW5kIGNoYW5nZXMgaW4geW91ciBsb2NhbCBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGlzIGEgZ29vZCB3YXkgdG8gZ3JhcGhpY2FsbHkgc2VlIHdoZXJlIHRoaW5ncyBoYXZlIGRpdmVyZ2VkIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgbG9jYWwgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgbG9nPC9maWxlbmFtZT46PC9lbXBoYXNpcz4gUmVwb3J0cyBhIGhpc3Rvcnkgb2YgeW91ciBjaGFuZ2VzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBkaWZmPC9maWxlbmFtZT46PC9lbXBoYXNpcz4gRGlzcGxheXMgbGluZS1ieS1saW5lIGRpZmZlcmVuY2VzCisgICAgICAgICAgICAgICAgICAgIGJldHdlZW4geW91ciBsb2NhbCB3b3JraW5nIGZpbGVzIGFuZCB0aGUgc2FtZSBmaWxlcyBpbiB0aGUgdXBzdHJlYW0gR2l0IHJlcG9zaXRvcnkgdGhhdCB5b3VyCisgICAgICAgICAgICAgICAgICAgIGJyYW5jaCBjdXJyZW50bHkgdHJhY2tzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSd3b3JrZmxvd3MnPgorICAgIDx0aXRsZT5Xb3JrZmxvd3M8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBzb21lIG92ZXJ2aWV3IG9uIHdvcmtmbG93cyB1c2luZyBHaXQuCisgICAgICAgIEluIHBhcnRpY3VsYXIsIHRoZSBpbmZvcm1hdGlvbiBjb3ZlcnMgYmFzaWMgcHJhY3RpY2VzIHRoYXQgZGVzY3JpYmUgcm9sZXMgYW5kIGFjdGlvbnMgaW4gYQorICAgICAgICBjb2xsYWJvcmF0aXZlIGRldmVsb3BtZW50IGVudmlyb25tZW50LgorICAgICAgICBBZ2FpbiwgaWYgeW91IGFyZSBmYW1pbGlhciB3aXRoIHRoaXMgdHlwZSBvZiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCwgeW91IG1pZ2h0IHdhbnQgdG8ganVzdAorICAgICAgICBza2lwIHRoaXMgc2VjdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgZmlsZXMgYXJlIG1haW50YWluZWQgdXNpbmcgR2l0IGluIGEgIm1hc3RlciIgYnJhbmNoIHdob3NlIEdpdCBoaXN0b3J5CisgICAgICAgIHRyYWNrcyBldmVyeSBjaGFuZ2UgYW5kIHdob3NlIHN0cnVjdHVyZSBwcm92aWRlcyBicmFuY2hlcyBmb3IgYWxsIGRpdmVyZ2luZyBmdW5jdGlvbmFsaXR5LgorICAgICAgICBBbHRob3VnaCB0aGVyZSBpcyBubyBuZWVkIHRvIHVzZSBHaXQsIG1hbnkgb3BlbiBzb3VyY2UgcHJvamVjdHMgZG8gc28uCisgICAgICAgIEZvciB0aGUgWW9jdG8gUHJvamVjdCwgYSBrZXkgaW5kaXZpZHVhbCBjYWxsZWQgdGhlICJtYWludGFpbmVyIiBpcyByZXNwb25zaWJsZSBmb3IgdGhlICJtYXN0ZXIiCisgICAgICAgIGJyYW5jaCBvZiBhIGdpdmVuIEdpdCByZXBvc2l0b3J5LgorICAgICAgICBUaGUgIm1hc3RlciIgYnJhbmNoIGlzIHRoZSDigJx1cHN0cmVhbeKAnSByZXBvc2l0b3J5IHdoZXJlIHRoZSBmaW5hbCBidWlsZHMgb2YgdGhlIHByb2plY3Qgb2NjdXIuCisgICAgICAgIFRoZSBtYWludGFpbmVyIGlzIHJlc3BvbnNpYmxlIGZvciBhY2NlcHRpbmcgY2hhbmdlcyBmcm9tIG90aGVyIGRldmVsb3BlcnMgYW5kIGZvcgorICAgICAgICBvcmdhbml6aW5nIHRoZSB1bmRlcmx5aW5nIGJyYW5jaCBzdHJ1Y3R1cmUgdG8gcmVmbGVjdCByZWxlYXNlIHN0cmF0ZWdpZXMgYW5kIHNvIGZvcnRoLgorICAgICAgICA8bm90ZT5Gb3IgaW5mb3JtYXRpb24gb24gZmluZGluZyBvdXQgd2hvIGlzIHJlc3BvbnNpYmxlIGZvciAobWFpbnRhaW5zKQorICAgICAgICAgICAgYSBwYXJ0aWN1bGFyIGFyZWEgb2YgY29kZSwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2hvdy10by1zdWJtaXQtYS1jaGFuZ2UnPkhvdyB0byBTdWJtaXQgYSBDaGFuZ2U8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgcHJvamVjdCBhbHNvIGhhcyBhbiB1cHN0cmVhbSBjb250cmlidXRpb24gR2l0IHJlcG9zaXRvcnkgbmFtZWQKKyAgICAgICAgPGZpbGVuYW1lPnBva3ktY29udHJpYjwvZmlsZW5hbWU+LgorICAgICAgICBZb3UgY2FuIHNlZSBhbGwgdGhlIGJyYW5jaGVzIGluIHRoaXMgcmVwb3NpdG9yeSB1c2luZyB0aGUgd2ViIGludGVyZmFjZQorICAgICAgICBvZiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7Jz5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4gb3JnYW5pemVkCisgICAgICAgIHdpdGhpbiB0aGUgIlBva3kgU3VwcG9ydCIgYXJlYS4KKyAgICAgICAgVGhlc2UgYnJhbmNoZXMgdGVtcG9yYXJpbHkgaG9sZCBjaGFuZ2VzIHRvIHRoZSBwcm9qZWN0IHRoYXQgaGF2ZSBiZWVuCisgICAgICAgIHN1Ym1pdHRlZCBvciBjb21taXR0ZWQgYnkgdGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQgdGVhbSBhbmQgYnkKKyAgICAgICAgY29tbXVuaXR5IG1lbWJlcnMgd2hvIGNvbnRyaWJ1dGUgdG8gdGhlIHByb2plY3QuCisgICAgICAgIFRoZSBtYWludGFpbmVyIGRldGVybWluZXMgaWYgdGhlIGNoYW5nZXMgYXJlIHF1YWxpZmllZCB0byBiZSBtb3ZlZAorICAgICAgICBmcm9tIHRoZSAiY29udHJpYiIgYnJhbmNoZXMgaW50byB0aGUgIm1hc3RlciIgYnJhbmNoIG9mIHRoZSBHaXQKKyAgICAgICAgcmVwb3NpdG9yeS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRGV2ZWxvcGVycyAoaW5jbHVkaW5nIGNvbnRyaWJ1dGluZyBjb21tdW5pdHkgbWVtYmVycykgY3JlYXRlIGFuZCBtYWludGFpbiBjbG9uZWQgcmVwb3NpdG9yaWVzCisgICAgICAgIG9mIHRoZSB1cHN0cmVhbSAibWFzdGVyIiBicmFuY2guCisgICAgICAgIFRoZXNlIHJlcG9zaXRvcmllcyBhcmUgbG9jYWwgdG8gdGhlaXIgZGV2ZWxvcG1lbnQgcGxhdGZvcm1zIGFuZCBhcmUgdXNlZCB0byBkZXZlbG9wIGNoYW5nZXMuCisgICAgICAgIFdoZW4gYSBkZXZlbG9wZXIgaXMgc2F0aXNmaWVkIHdpdGggYSBwYXJ0aWN1bGFyIGZlYXR1cmUgb3IgY2hhbmdlLCB0aGV5ICJwdXNoIiB0aGUgY2hhbmdlcworICAgICAgICB0byB0aGUgYXBwcm9wcmlhdGUgImNvbnRyaWIiIHJlcG9zaXRvcnkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIERldmVsb3BlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBrZWVwaW5nIHRoZWlyIGxvY2FsIHJlcG9zaXRvcnkgdXAtdG8tZGF0ZSB3aXRoICJtYXN0ZXIiLgorICAgICAgICBUaGV5IGFyZSBhbHNvIHJlc3BvbnNpYmxlIGZvciBzdHJhaWdodGVuaW5nIG91dCBhbnkgY29uZmxpY3RzIHRoYXQgbWlnaHQgYXJpc2Ugd2l0aGluIGZpbGVzCisgICAgICAgIHRoYXQgYXJlIGJlaW5nIHdvcmtlZCBvbiBzaW11bHRhbmVvdXNseSBieSBtb3JlIHRoYW4gb25lIHBlcnNvbi4KKyAgICAgICAgQWxsIHRoaXMgd29yayBpcyBkb25lIGxvY2FsbHkgb24gdGhlIGRldmVsb3BlcuKAmXMgbWFjaGluZXMgYmVmb3JlIGFueXRoaW5nIGlzIHB1c2hlZCB0byBhCisgICAgICAgICJjb250cmliIiBhcmVhIGFuZCBleGFtaW5lZCBhdCB0aGUgbWFpbnRhaW5lcuKAmXMgbGV2ZWwuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEEgc29tZXdoYXQgZm9ybWFsIG1ldGhvZCBleGlzdHMgYnkgd2hpY2ggZGV2ZWxvcGVycyBjb21taXQgY2hhbmdlcyBhbmQgcHVzaCB0aGVtIGludG8gdGhlCisgICAgICAgICJjb250cmliIiBhcmVhIGFuZCBzdWJzZXF1ZW50bHkgcmVxdWVzdCB0aGF0IHRoZSBtYWludGFpbmVyIGluY2x1ZGUgdGhlbSBpbnRvICJtYXN0ZXIiCisgICAgICAgIFRoaXMgcHJvY2VzcyBpcyBjYWxsZWQg4oCcc3VibWl0dGluZyBhIHBhdGNo4oCdIG9yICJzdWJtaXR0aW5nIGEgY2hhbmdlLiIKKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHN1Ym1pdHRpbmcgcGF0Y2hlcyBhbmQgY2hhbmdlcywgc2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0naG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+SG93IHRvIFN1Ym1pdCBhIENoYW5nZTwvbGluaz4iIHNlY3Rpb24uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRvIHN1bW1hcml6ZSB0aGUgZW52aXJvbm1lbnQ6ICBhIHNpbmdsZSBwb2ludCBvZiBlbnRyeSBleGlzdHMgZm9yCisgICAgICAgIGNoYW5nZXMgaW50byB0aGUgcHJvamVjdOKAmXMgIm1hc3RlciIgYnJhbmNoIG9mIHRoZSBHaXQgcmVwb3NpdG9yeSwKKyAgICAgICAgd2hpY2ggaXMgY29udHJvbGxlZCBieSB0aGUgcHJvamVjdOKAmXMgbWFpbnRhaW5lci4KKyAgICAgICAgQW5kLCBhIHNldCBvZiBkZXZlbG9wZXJzIGV4aXN0IHdobyBpbmRlcGVuZGVudGx5IGRldmVsb3AsIHRlc3QsIGFuZAorICAgICAgICBzdWJtaXQgY2hhbmdlcyB0byAiY29udHJpYiIgYXJlYXMgZm9yIHRoZSBtYWludGFpbmVyIHRvIGV4YW1pbmUuCisgICAgICAgIFRoZSBtYWludGFpbmVyIHRoZW4gY2hvb3NlcyB3aGljaCBjaGFuZ2VzIGFyZSBnb2luZyB0byBiZWNvbWUgYQorICAgICAgICBwZXJtYW5lbnQgcGFydCBvZiB0aGUgcHJvamVjdC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2dpdC13b3JrZmxvdy5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSIzaW4iIGFsaWduPSJsZWZ0IiBzY2FsZWZpdD0iMSIgLz4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hpbGUgZWFjaCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBpcyB1bmlxdWUsIHRoZXJlIGFyZSBzb21lIGJlc3QgcHJhY3RpY2VzIG9yIG1ldGhvZHMKKyAgICAgICAgdGhhdCBoZWxwIGRldmVsb3BtZW50IHJ1biBzbW9vdGhseS4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IGRlc2NyaWJlcyBzb21lIG9mIHRoZXNlIHByYWN0aWNlcy4KKyAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgR2l0IHdvcmtmbG93cywgc2VlIHRoZSB3b3JrZmxvdyB0b3BpY3MgaW4gdGhlCisgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9ib29rLmdpdC1zY20uY29tJz5HaXQgQ29tbXVuaXR5IEJvb2s8L3VsaW5rPi4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFrZSBTbWFsbCBDaGFuZ2VzOjwvZW1waGFzaXM+IEl0IGlzIGJlc3QgdG8ga2VlcCB0aGUgY2hhbmdlcyB5b3UgY29tbWl0CisgICAgICAgICAgICAgICAgc21hbGwgYXMgY29tcGFyZWQgdG8gYnVuZGxpbmcgbWFueSBkaXNwYXJhdGUgY2hhbmdlcyBpbnRvIGEgc2luZ2xlIGNvbW1pdC4KKyAgICAgICAgICAgICAgICBUaGlzIHByYWN0aWNlIG5vdCBvbmx5IGtlZXBzIHRoaW5ncyBtYW5hZ2VhYmxlIGJ1dCBhbHNvIGFsbG93cyB0aGUgbWFpbnRhaW5lcgorICAgICAgICAgICAgICAgIHRvIG1vcmUgZWFzaWx5IGluY2x1ZGUgb3IgcmVmdXNlIGNoYW5nZXMuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkl0IGlzIGFsc28gZ29vZCBwcmFjdGljZSB0byBsZWF2ZSB0aGUgcmVwb3NpdG9yeSBpbiBhIHN0YXRlIHRoYXQgYWxsb3dzIHlvdSB0bworICAgICAgICAgICAgICAgIHN0aWxsIHN1Y2Nlc3NmdWxseSBidWlsZCB5b3VyIHByb2plY3QuICBJbiBvdGhlciB3b3JkcywgZG8gbm90IGNvbW1pdCBoYWxmIG9mIGEgZmVhdHVyZSwKKyAgICAgICAgICAgICAgICB0aGVuIGFkZCB0aGUgb3RoZXIgaGFsZiBhcyBhIHNlcGFyYXRlLCBsYXRlciBjb21taXQuCisgICAgICAgICAgICAgICAgRWFjaCBjb21taXQgc2hvdWxkIHRha2UgeW91IGZyb20gb25lIGJ1aWxkYWJsZSBwcm9qZWN0IHN0YXRlIHRvIGFub3RoZXIKKyAgICAgICAgICAgICAgICBidWlsZGFibGUgc3RhdGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVzZSBCcmFuY2hlcyBMaWJlcmFsbHk6PC9lbXBoYXNpcz4gSXQgaXMgdmVyeSBlYXN5IHRvIGNyZWF0ZSwgdXNlLCBhbmQKKyAgICAgICAgICAgICAgICBkZWxldGUgbG9jYWwgYnJhbmNoZXMgaW4geW91ciB3b3JraW5nIEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gbmFtZSB0aGVzZSBicmFuY2hlcyBhbnl0aGluZyB5b3UgbGlrZS4KKyAgICAgICAgICAgICAgICBJdCBpcyBoZWxwZnVsIHRvIGdpdmUgdGhlbSBuYW1lcyBhc3NvY2lhdGVkIHdpdGggdGhlIHBhcnRpY3VsYXIgZmVhdHVyZSBvciBjaGFuZ2UKKyAgICAgICAgICAgICAgICBvbiB3aGljaCB5b3UgYXJlIHdvcmtpbmcuCisgICAgICAgICAgICAgICAgT25jZSB5b3UgYXJlIGRvbmUgd2l0aCBhIGZlYXR1cmUgb3IgY2hhbmdlIGFuZCBoYXZlIG1lcmdlZCBpdAorICAgICAgICAgICAgICAgIGludG8geW91ciBsb2NhbCBtYXN0ZXIgYnJhbmNoLCBzaW1wbHkgZGlzY2FyZCB0aGUgdGVtcG9yYXJ5CisgICAgICAgICAgICAgICAgYnJhbmNoLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NZXJnZSBDaGFuZ2VzOjwvZW1waGFzaXM+IFRoZSA8ZmlsZW5hbWU+Z2l0IG1lcmdlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb21tYW5kIGFsbG93cyB5b3UgdG8gdGFrZSB0aGUKKyAgICAgICAgICAgICAgICBjaGFuZ2VzIGZyb20gb25lIGJyYW5jaCBhbmQgZm9sZCB0aGVtIGludG8gYW5vdGhlciBicmFuY2guCisgICAgICAgICAgICAgICAgVGhpcyBwcm9jZXNzIGlzIGVzcGVjaWFsbHkgaGVscGZ1bCB3aGVuIG1vcmUgdGhhbiBhIHNpbmdsZSBkZXZlbG9wZXIgbWlnaHQgYmUgd29ya2luZworICAgICAgICAgICAgICAgIG9uIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgc2FtZSBmZWF0dXJlLgorICAgICAgICAgICAgICAgIE1lcmdpbmcgY2hhbmdlcyBhbHNvIGF1dG9tYXRpY2FsbHkgaWRlbnRpZmllcyBhbnkgY29sbGlzaW9ucyBvciAiY29uZmxpY3RzIgorICAgICAgICAgICAgICAgIHRoYXQgbWlnaHQgaGFwcGVuIGFzIGEgcmVzdWx0IG9mIHRoZSBzYW1lIGxpbmVzIG9mIGNvZGUgYmVpbmcgYWx0ZXJlZCBieSB0d28gZGlmZmVyZW50CisgICAgICAgICAgICAgICAgZGV2ZWxvcGVycy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFuYWdlIEJyYW5jaGVzOjwvZW1waGFzaXM+IEJlY2F1c2UgYnJhbmNoZXMgYXJlIGVhc3kgdG8gdXNlLCB5b3Ugc2hvdWxkCisgICAgICAgICAgICAgICAgdXNlIGEgc3lzdGVtIHdoZXJlIGJyYW5jaGVzIGluZGljYXRlIHZhcnlpbmcgbGV2ZWxzIG9mIGNvZGUgcmVhZGluZXNzLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgY2FuIGhhdmUgYSAid29yayIgYnJhbmNoIHRvIGRldmVsb3AgaW4sIGEgInRlc3QiIGJyYW5jaCB3aGVyZSB0aGUgY29kZSBvcgorICAgICAgICAgICAgICAgIGNoYW5nZSBpcyB0ZXN0ZWQsIGEgInN0YWdlIiBicmFuY2ggd2hlcmUgY2hhbmdlcyBhcmUgcmVhZHkgdG8gYmUgY29tbWl0dGVkLCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgQXMgeW91ciBwcm9qZWN0IGRldmVsb3BzLCB5b3UgY2FuIG1lcmdlIGNvZGUgYWNyb3NzIHRoZSBicmFuY2hlcyB0byByZWZsZWN0IGV2ZXItaW5jcmVhc2luZworICAgICAgICAgICAgICAgIHN0YWJsZSBzdGF0ZXMgb2YgdGhlIGRldmVsb3BtZW50LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Vc2UgUHVzaCBhbmQgUHVsbDo8L2VtcGhhc2lzPiBUaGUgcHVzaC1wdWxsIHdvcmtmbG93IGlzIGJhc2VkIG9uIHRoZQorICAgICAgICAgICAgICAgIGNvbmNlcHQgb2YgZGV2ZWxvcGVycyAicHVzaGluZyIgbG9jYWwgY29tbWl0cyB0byBhIHJlbW90ZSByZXBvc2l0b3J5LCB3aGljaCBpcworICAgICAgICAgICAgICAgIHVzdWFsbHkgYSBjb250cmlidXRpb24gcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICBUaGlzIHdvcmtmbG93IGlzIGFsc28gYmFzZWQgb24gZGV2ZWxvcGVycyAicHVsbGluZyIga25vd24gc3RhdGVzIG9mIHRoZSBwcm9qZWN0IGRvd24gaW50byB0aGVpcgorICAgICAgICAgICAgICAgIGxvY2FsIGRldmVsb3BtZW50IHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICBUaGUgd29ya2Zsb3cgZWFzaWx5IGFsbG93cyB5b3UgdG8gcHVsbCBjaGFuZ2VzIHN1Ym1pdHRlZCBieSBvdGhlciBkZXZlbG9wZXJzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgdXBzdHJlYW0gcmVwb3NpdG9yeSBpbnRvIHlvdXIgd29yayBhcmVhIGVuc3VyaW5nIHRoYXQgeW91IGhhdmUgdGhlIG1vc3QgcmVjZW50IHNvZnR3YXJlCisgICAgICAgICAgICAgICAgb24gd2hpY2ggdG8gZGV2ZWxvcC4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBoYXMgdHdvIHNjcmlwdHMgbmFtZWQgPGZpbGVuYW1lPmNyZWF0ZS1wdWxsLXJlcXVlc3Q8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2VuZC1wdWxsLXJlcXVlc3Q8L2ZpbGVuYW1lPiB0aGF0IHNoaXAgd2l0aCB0aGUgcmVsZWFzZSB0byBmYWNpbGl0YXRlIHRoaXMKKyAgICAgICAgICAgICAgICB3b3JrZmxvdy4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlc2Ugc2NyaXB0cyBpbiB0aGUgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZvbGRlciBvZiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGVzZSBzY3JpcHRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3B1c2hpbmctYS1jaGFuZ2UtdXBzdHJlYW0nPlVzaW5nIFNjcmlwdHMgdG8gUHVzaCBhIENoYW5nZSBVcHN0cmVhbSBhbmQgUmVxdWVzdCBhIFB1bGw8L2xpbms+IiBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QYXRjaCBXb3JrZmxvdzo8L2VtcGhhc2lzPiBUaGlzIHdvcmtmbG93IGFsbG93cyB5b3UgdG8gbm90aWZ5IHRoZQorICAgICAgICAgICAgICAgIG1haW50YWluZXIgdGhyb3VnaCBhbiBlbWFpbCB0aGF0IHlvdSBoYXZlIGEgY2hhbmdlIChvciBwYXRjaCkgeW91IHdvdWxkIGxpa2UgY29uc2lkZXJlZAorICAgICAgICAgICAgICAgIGZvciB0aGUgIm1hc3RlciIgYnJhbmNoIG9mIHRoZSBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICBUbyBzZW5kIHRoaXMgdHlwZSBvZiBjaGFuZ2UsIHlvdSBmb3JtYXQgdGhlIHBhdGNoIGFuZCB0aGVuIHNlbmQgdGhlIGVtYWlsIHVzaW5nIHRoZSBHaXQgY29tbWFuZHMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IGZvcm1hdC1wYXRjaDwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+Z2l0IHNlbmQtZW1haWw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGVzZSBzY3JpcHRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2hvdy10by1zdWJtaXQtYS1jaGFuZ2UnPkhvdyB0byBTdWJtaXQgYSBDaGFuZ2U8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3RyYWNraW5nLWJ1Z3MnPgorICAgIDx0aXRsZT5UcmFja2luZyBCdWdzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB1c2VzIGl0cyBvd24gaW1wbGVtZW50YXRpb24gb2YKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5idWd6aWxsYS5vcmcvYWJvdXQvJz5CdWd6aWxsYTwvdWxpbms+IHRvIHRyYWNrIGJ1Z3MuCisgICAgICAgIEltcGxlbWVudGF0aW9ucyBvZiBCdWd6aWxsYSB3b3JrIHdlbGwgZm9yIGdyb3VwIGRldmVsb3BtZW50IGJlY2F1c2UgdGhleSB0cmFjayBidWdzIGFuZCBjb2RlCisgICAgICAgIGNoYW5nZXMsIGNhbiBiZSB1c2VkIHRvIGNvbW11bmljYXRlIGNoYW5nZXMgYW5kIHByb2JsZW1zIHdpdGggZGV2ZWxvcGVycywgY2FuIGJlIHVzZWQgdG8KKyAgICAgICAgc3VibWl0IGFuZCByZXZpZXcgcGF0Y2hlcywgYW5kIGNhbiBiZSB1c2VkIHRvIG1hbmFnZSBxdWFsaXR5IGFzc3VyYW5jZS4KKyAgICAgICAgVGhlIGhvbWUgcGFnZSBmb3IgdGhlIFlvY3RvIFByb2plY3QgaW1wbGVtZW50YXRpb24gb2YgQnVnemlsbGEgaXMKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0JVR1pJTExBX1VSTDsnPiZZT0NUT19CVUdaSUxMQV9VUkw7PC91bGluaz4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFNvbWV0aW1lcyBpdCBpcyBoZWxwZnVsIHRvIHN1Ym1pdCwgaW52ZXN0aWdhdGUsIG9yIHRyYWNrIGEgYnVnIGFnYWluc3QgdGhlIFlvY3RvIFByb2plY3QgaXRzZWxmCisgICAgICAgIHN1Y2ggYXMgd2hlbiBkaXNjb3ZlcmluZyBhbiBpc3N1ZSB3aXRoIHNvbWUgY29tcG9uZW50IG9mIHRoZSBidWlsZCBzeXN0ZW0gdGhhdCBhY3RzIGNvbnRyYXJ5CisgICAgICAgIHRvIHRoZSBkb2N1bWVudGF0aW9uIG9yIHlvdXIgZXhwZWN0YXRpb25zLgorICAgICAgICBGb2xsb3dpbmcgaXMgdGhlIGdlbmVyYWwgcHJvY2VkdXJlIGZvciBzdWJtaXR0aW5nIGEgbmV3IGJ1ZyB1c2luZyB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICBCdWd6aWxsYS4KKyAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gZGVmZWN0IG1hbmFnZW1lbnQsIGJ1ZyB0cmFja2luZywgYW5kIGZlYXR1cmUgcmVxdWVzdAorICAgICAgICBwcm9jZXNzZXMgYWxsIGFjY29tcGxpc2hlZCB0aHJvdWdoIHRoZSBZb2N0byBQcm9qZWN0IEJ1Z3ppbGxhIG9uIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvQnVnemlsbGFfQ29uZmlndXJhdGlvbl9hbmRfQnVnX1RyYWNraW5nJz53aWtpIHBhZ2U8L3VsaW5rPi4KKyAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFsd2F5cyB1c2UgdGhlIFlvY3RvIFByb2plY3QgaW1wbGVtZW50YXRpb24gb2YgQnVnemlsbGEgdG8gc3VibWl0CisgICAgICAgICAgICAgICAgYSBidWcuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+V2hlbiBzdWJtaXR0aW5nIGEgbmV3IGJ1ZywgYmUgc3VyZSB0byBjaG9vc2UgdGhlIGFwcHJvcHJpYXRlCisgICAgICAgICAgICAgICAgQ2xhc3NpZmljYXRpb24sIFByb2R1Y3QsIGFuZCBDb21wb25lbnQgZm9yIHdoaWNoIHRoZSBpc3N1ZSB3YXMgZm91bmQuCisgICAgICAgICAgICAgICAgRGVmZWN0cyBmb3IgdGhlIFlvY3RvIFByb2plY3QgZmFsbCBpbnRvIG9uZSBvZiBzZXZlbiBjbGFzc2lmaWNhdGlvbnM6CisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBDb21wb25lbnRzLCBJbmZyYXN0cnVjdHVyZSwgQnVpbGQgU3lzdGVtICZhbXA7IE1ldGFkYXRhLAorICAgICAgICAgICAgICAgIERvY3VtZW50YXRpb24sIFFBL1Rlc3RpbmcsIFJ1bnRpbWUgYW5kIEhhcmR3YXJlLgorICAgICAgICAgICAgICAgIEVhY2ggb2YgdGhlc2UgQ2xhc3NpZmljYXRpb25zIGJyZWFrIGRvd24gaW50byBtdWx0aXBsZSBQcm9kdWN0cyBhbmQsIGluIHNvbWUKKyAgICAgICAgICAgICAgICBjYXNlcywgbXVsdGlwbGUgQ29tcG9uZW50cy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Vc2UgdGhlIGJ1ZyBmb3JtIHRvIGNob29zZSB0aGUgY29ycmVjdCBIYXJkd2FyZSBhbmQgQXJjaGl0ZWN0dXJlCisgICAgICAgICAgICAgICAgZm9yIHdoaWNoIHRoZSBidWcgYXBwbGllcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbmRpY2F0ZSB0aGUgWW9jdG8gUHJvamVjdCB2ZXJzaW9uIHlvdSB3ZXJlIHVzaW5nIHdoZW4gdGhlIGlzc3VlCisgICAgICAgICAgICAgICAgb2NjdXJyZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QmUgc3VyZSB0byBpbmRpY2F0ZSB0aGUgU2V2ZXJpdHkgb2YgdGhlIGJ1Zy4KKyAgICAgICAgICAgICAgICBTZXZlcml0eSBjb21tdW5pY2F0ZXMgaG93IHRoZSBidWcgaW1wYWN0ZWQgeW91ciB3b3JrLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgIkRvY3VtZW50YXRpb24gY2hhbmdlIiBpdGVtCisgICAgICAgICAgICAgICAgZm9yIHRoZSBidWcuCisgICAgICAgICAgICAgICAgRml4aW5nIGEgYnVnIG1heSBvciBtYXkgbm90IGFmZmVjdCB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIGRvY3VtZW50YXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UHJvdmlkZSBhIGJyaWVmIHN1bW1hcnkgb2YgdGhlIGlzc3VlLgorICAgICAgICAgICAgICAgIFRyeSB0byBsaW1pdCB5b3VyIHN1bW1hcnkgdG8ganVzdCBhIGxpbmUgb3IgdHdvIGFuZCBiZSBzdXJlIHRvIGNhcHR1cmUgdGhlCisgICAgICAgICAgICAgICAgZXNzZW5jZSBvZiB0aGUgaXNzdWUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UHJvdmlkZSBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBpc3N1ZS4KKyAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHByb3ZpZGUgYXMgbXVjaCBkZXRhaWwgYXMgeW91IGNhbiBhYm91dCB0aGUgY29udGV4dCwgYmVoYXZpb3IsIG91dHB1dCwKKyAgICAgICAgICAgICAgICBhbmQgc28gZm9ydGggdGhhdCBzdXJyb3VuZHMgdGhlIGlzc3VlLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZXZlbiBhdHRhY2ggc3VwcG9ydGluZyBmaWxlcyBmb3Igb3V0cHV0IGZyb20gbG9ncyBieQorICAgICAgICAgICAgICAgIHVzaW5nIHRoZSAiQWRkIGFuIGF0dGFjaG1lbnQiIGJ1dHRvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CZSBzdXJlIHRvIGNvcHkgdGhlIGFwcHJvcHJpYXRlIHBlb3BsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAiQ0MgTGlzdCIgZm9yIHRoZSBidWcuCisgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0naG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+SG93IHRvIFN1Ym1pdCBhIENoYW5nZTwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgZmluZGluZyBvdXQgd2hvIGlzIHJlc3BvbnNpYmxlCisgICAgICAgICAgICAgICAgZm9yIGNvZGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U3VibWl0IHRoZSBidWcgYnkgY2xpY2tpbmcgdGhlICJTdWJtaXQgQnVnIiBidXR0b24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0naG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+CisgICAgPHRpdGxlPkhvdyB0byBTdWJtaXQgYSBDaGFuZ2U8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIENvbnRyaWJ1dGlvbnMgdG8gdGhlIFlvY3RvIFByb2plY3QgYW5kIE9wZW5FbWJlZGRlZCBhcmUgdmVyeSB3ZWxjb21lLgorICAgICAgICBCZWNhdXNlIHRoZSBzeXN0ZW0gaXMgZXh0cmVtZWx5IGNvbmZpZ3VyYWJsZSBhbmQgZmxleGlibGUsIHdlIHJlY29nbml6ZSB0aGF0IGRldmVsb3BlcnMKKyAgICAgICAgd2lsbCB3YW50IHRvIGV4dGVuZCwgY29uZmlndXJlIG9yIG9wdGltaXplIGl0IGZvciB0aGVpciBzcGVjaWZpYyB1c2VzLgorICAgICAgICBZb3Ugc2hvdWxkIHNlbmQgcGF0Y2hlcyB0byB0aGUgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0IHNvIHRoYXQgdGhleQorICAgICAgICBjYW4gYmUgcmV2aWV3ZWQgYW5kIG1lcmdlZCBieSB0aGUgYXBwcm9wcmlhdGUgbWFpbnRhaW5lci4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQmVmb3JlIHN1Ym1pdHRpbmcgYW55IGNoYW5nZSwgYmUgc3VyZSB0byBmaW5kIG91dCB3aG8geW91IHNob3VsZCBiZQorICAgICAgICBub3RpZnlpbmcuCisgICAgICAgIFNldmVyYWwgbWV0aG9kcyBleGlzdCB0aHJvdWdoIHdoaWNoIHlvdSBmaW5kIG91dCB3aG8geW91IHNob3VsZCBiZSBjb3B5aW5nCisgICAgICAgIG9yIG5vdGlmeWluZzoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFpbnRlbmFuY2UgRmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEV4YW1pbmUgdGhlIDxmaWxlbmFtZT5tYWludGFpbmVycy5pbmM8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcworICAgICAgICAgICAgICAgIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICBhdCA8ZmlsZW5hbWU+bWV0YS15b2N0by9jb25mL2Rpc3Ryby9pbmNsdWRlPC9maWxlbmFtZT4sIHRvCisgICAgICAgICAgICAgICAgc2VlIHdobyBpcyByZXNwb25zaWJsZSBmb3IgY29kZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Qm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIFJFQURNRSBGaWxlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEZvciBCU1AgbWFpbnRhaW5lcnMgb2Ygc3VwcG9ydGVkIEJTUHMsIHlvdSBjYW4gZXhhbWluZQorICAgICAgICAgICAgICAgIGluZGl2aWR1YWwgQlNQIDxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgICAgICAgICBJbiBhZGRpdGlvbiwgc29tZSBsYXllcnMgKHN1Y2ggYXMgdGhlIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gbGF5ZXIpLAorICAgICAgICAgICAgICAgIGluY2x1ZGUgYSA8ZmlsZW5hbWU+TUFJTlRBSU5FUlM8L2ZpbGVuYW1lPiBmaWxlIHdoaWNoIGNvbnRhaW5zCisgICAgICAgICAgICAgICAgYSBsaXN0IG9mIGFsbCBzdXBwb3J0ZWQgQlNQIG1haW50YWluZXJzIGZvciB0aGF0IGxheWVyLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZWFyY2ggYnkgRmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFVzaW5nIDxsaW5rIGxpbmtlbmQ9J2dpdCc+R2l0PC9saW5rPiwgeW91IGNhbiBlbnRlciB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmcgY29tbWFuZCB0byBicmluZyB1cCBhIHNob3J0IGxpc3Qgb2YgYWxsIGNvbW1pdHMKKyAgICAgICAgICAgICAgICBhZ2FpbnN0IGEgc3BlY2lmaWMgZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGdpdCBzaG9ydGxvZyAtLSA8cmVwbGFjZWFibGU+ZmlsZW5hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBKdXN0IHByb3ZpZGUgdGhlIG5hbWUgb2YgdGhlIGZpbGUgZm9yIHdoaWNoIHlvdSBhcmUgaW50ZXJlc3RlZC4KKyAgICAgICAgICAgICAgICBUaGUgaW5mb3JtYXRpb24gcmV0dXJuZWQgaXMgbm90IG9yZGVyZWQgYnkgaGlzdG9yeSBidXQgZG9lcworICAgICAgICAgICAgICAgIGluY2x1ZGUgYSBsaXN0IG9mIGFsbCBjb21taXR0ZXJzIGdyb3VwZWQgYnkgbmFtZS4KKyAgICAgICAgICAgICAgICBGcm9tIHRoZSBsaXN0LCB5b3UgY2FuIHNlZSB3aG8gaXMgcmVzcG9uc2libGUgZm9yIHRoZSBidWxrIG9mCisgICAgICAgICAgICAgICAgdGhlIGNoYW5nZXMgYWdhaW5zdCB0aGUgZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBhIGxpc3Qgb2YgdGhlIFlvY3RvIFByb2plY3QgYW5kIHJlbGF0ZWQgbWFpbGluZyBsaXN0cywgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVzb3VyY2VzLW1haWxpbmdsaXN0Jz5NYWlsaW5nIGxpc3RzPC91bGluaz4iIHNlY3Rpb24gaW4KKyAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSGVyZSBpcyBzb21lIGd1aWRhbmNlIG9uIHdoaWNoIG1haWxpbmcgbGlzdCB0byB1c2UgZm9yIHdoYXQgdHlwZSBvZiBjaGFuZ2U6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rm9yIGNoYW5nZXMgdG8gdGhlIGNvcmUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdtZXRhZGF0YSc+TWV0YWRhdGE8L2xpbms+LCBzZW5kIHlvdXIgcGF0Y2ggdG8gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJk9FX0xJU1RTX1VSTDsvbGlzdGluZm8vb3BlbmVtYmVkZGVkLWNvcmUnPm9wZW5lbWJlZGRlZC1jb3JlPC91bGluaz4gbWFpbGluZyBsaXN0LgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBhIGNoYW5nZSB0byBhbnl0aGluZyB1bmRlciB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4gZGlyZWN0b3JpZXMKKyAgICAgICAgICAgICAgICBzaG91bGQgYmUgc2VudCB0byB0aGlzIG1haWxpbmcgbGlzdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Gb3IgY2hhbmdlcyB0byBCaXRCYWtlIChhbnl0aGluZyB1bmRlciB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSksIHNlbmQgeW91ciBwYXRjaCB0byB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmT0VfTElTVFNfVVJMOy9saXN0aW5mby9iaXRiYWtlLWRldmVsJz5iaXRiYWtlLWRldmVsPC91bGluaz4gbWFpbGluZyBsaXN0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciBjaGFuZ2VzIHRvIDxmaWxlbmFtZT5tZXRhLXlvY3RvPC9maWxlbmFtZT4sIHNlbmQgeW91ciBwYXRjaCB0byB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fTElTVFNfVVJMOy9saXN0aW5mby9wb2t5Jz5wb2t5PC91bGluaz4gbWFpbGluZyBsaXN0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciBjaGFuZ2VzIHRvIG90aGVyIGxheWVycyBob3N0ZWQgb24KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG9wcm9qZWN0Lm9yZzwvZmlsZW5hbWU+ICh1bmxlc3MgdGhlCisgICAgICAgICAgICAgICAgbGF5ZXIncyBkb2N1bWVudGF0aW9uIHNwZWNpZmllcyBvdGhlcndpc2UpLCB0b29scywgYW5kIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uLCB1c2UgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0xJU1RTX1VSTDsvbGlzdGluZm8veW9jdG8nPnlvY3RvPC91bGluaz4gbWFpbGluZyBsaXN0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciBhZGRpdGlvbmFsIHJlY2lwZXMgdGhhdCBkbyBub3QgZml0IGludG8gdGhlIGNvcmUgTWV0YWRhdGEsCisgICAgICAgICAgICAgICAgeW91IHNob3VsZCBkZXRlcm1pbmUgd2hpY2ggbGF5ZXIgdGhlIHJlY2lwZSBzaG91bGQgZ28gaW50byBhbmQgc3VibWl0IHRoZQorICAgICAgICAgICAgICAgIGNoYW5nZSBpbiB0aGUgbWFubmVyIHJlY29tbWVuZGVkIGJ5IHRoZSBkb2N1bWVudGF0aW9uIChlLmcuIFJFQURNRSkgc3VwcGxpZWQKKyAgICAgICAgICAgICAgICB3aXRoIHRoZSBsYXllci4gSWYgaW4gZG91YnQsIHBsZWFzZSBhc2sgb24gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0xJU1RTX1VSTDsvbGlzdGluZm8veW9jdG8nPnlvY3RvPC91bGluaz4gb3IKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmT0VfTElTVFNfVVJMOy9saXN0aW5mby9vcGVuZW1iZWRkZWQtZGV2ZWwnPm9wZW5lbWJlZGRlZC1kZXZlbDwvdWxpbms+CisgICAgICAgICAgICAgICAgbWFpbGluZyBsaXN0cy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFdoZW4geW91IHNlbmQgYSBwYXRjaCwgYmUgc3VyZSB0byBpbmNsdWRlIGEgIlNpZ25lZC1vZmYtYnk6IgorICAgICAgICBsaW5lIGluIHRoZSBzYW1lIHN0eWxlIGFzIHJlcXVpcmVkIGJ5IHRoZSBMaW51eCBrZXJuZWwuCisgICAgICAgIEFkZGluZyB0aGlzIGxpbmUgc2lnbmlmaWVzIHRoYXQgeW91LCB0aGUgc3VibWl0dGVyLCBoYXZlIGFncmVlZCB0byB0aGUgRGV2ZWxvcGVyJ3MgQ2VydGlmaWNhdGUgb2YgT3JpZ2luIDEuMQorICAgICAgICBhcyBmb2xsb3dzOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERldmVsb3BlcidzIENlcnRpZmljYXRlIG9mIE9yaWdpbiAxLjEKKworICAgICBCeSBtYWtpbmcgYSBjb250cmlidXRpb24gdG8gdGhpcyBwcm9qZWN0LCBJIGNlcnRpZnkgdGhhdDoKKworICAgICAoYSkgVGhlIGNvbnRyaWJ1dGlvbiB3YXMgY3JlYXRlZCBpbiB3aG9sZSBvciBpbiBwYXJ0IGJ5IG1lIGFuZCBJCisgICAgICAgICBoYXZlIHRoZSByaWdodCB0byBzdWJtaXQgaXQgdW5kZXIgdGhlIG9wZW4gc291cmNlIGxpY2Vuc2UKKyAgICAgICAgIGluZGljYXRlZCBpbiB0aGUgZmlsZTsgb3IKKworICAgICAoYikgVGhlIGNvbnRyaWJ1dGlvbiBpcyBiYXNlZCB1cG9uIHByZXZpb3VzIHdvcmsgdGhhdCwgdG8gdGhlIGJlc3QKKyAgICAgICAgIG9mIG15IGtub3dsZWRnZSwgaXMgY292ZXJlZCB1bmRlciBhbiBhcHByb3ByaWF0ZSBvcGVuIHNvdXJjZQorICAgICAgICAgbGljZW5zZSBhbmQgSSBoYXZlIHRoZSByaWdodCB1bmRlciB0aGF0IGxpY2Vuc2UgdG8gc3VibWl0IHRoYXQKKyAgICAgICAgIHdvcmsgd2l0aCBtb2RpZmljYXRpb25zLCB3aGV0aGVyIGNyZWF0ZWQgaW4gd2hvbGUgb3IgaW4gcGFydAorICAgICAgICAgYnkgbWUsIHVuZGVyIHRoZSBzYW1lIG9wZW4gc291cmNlIGxpY2Vuc2UgKHVubGVzcyBJIGFtCisgICAgICAgICBwZXJtaXR0ZWQgdG8gc3VibWl0IHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UpLCBhcyBpbmRpY2F0ZWQKKyAgICAgICAgIGluIHRoZSBmaWxlOyBvcgorCisgICAgIChjKSBUaGUgY29udHJpYnV0aW9uIHdhcyBwcm92aWRlZCBkaXJlY3RseSB0byBtZSBieSBzb21lIG90aGVyCisgICAgICAgICBwZXJzb24gd2hvIGNlcnRpZmllZCAoYSksIChiKSBvciAoYykgYW5kIEkgaGF2ZSBub3QgbW9kaWZpZWQKKyAgICAgICAgIGl0LgorCisgICAgIChkKSBJIHVuZGVyc3RhbmQgYW5kIGFncmVlIHRoYXQgdGhpcyBwcm9qZWN0IGFuZCB0aGUgY29udHJpYnV0aW9uCisgICAgICAgICBhcmUgcHVibGljIGFuZCB0aGF0IGEgcmVjb3JkIG9mIHRoZSBjb250cmlidXRpb24gKGluY2x1ZGluZyBhbGwKKyAgICAgICAgIHBlcnNvbmFsIGluZm9ybWF0aW9uIEkgc3VibWl0IHdpdGggaXQsIGluY2x1ZGluZyBteSBzaWduLW9mZikgaXMKKyAgICAgICAgIG1haW50YWluZWQgaW5kZWZpbml0ZWx5IGFuZCBtYXkgYmUgcmVkaXN0cmlidXRlZCBjb25zaXN0ZW50IHdpdGgKKyAgICAgICAgIHRoaXMgcHJvamVjdCBvciB0aGUgb3BlbiBzb3VyY2UgbGljZW5zZShzKSBpbnZvbHZlZC4KKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBJbiBhIGNvbGxhYm9yYXRpdmUgZW52aXJvbm1lbnQsIGl0IGlzIG5lY2Vzc2FyeSB0byBoYXZlIHNvbWUgc29ydCBvZiBzdGFuZGFyZAorICAgICAgICBvciBtZXRob2QgdGhyb3VnaCB3aGljaCB5b3Ugc3VibWl0IGNoYW5nZXMuCisgICAgICAgIE90aGVyd2lzZSwgdGhpbmdzIGNvdWxkIGdldCBxdWl0ZSBjaGFvdGljLgorICAgICAgICBPbmUgZ2VuZXJhbCBwcmFjdGljZSB0byBmb2xsb3cgaXMgdG8gbWFrZSBzbWFsbCwgY29udHJvbGxlZCBjaGFuZ2VzLgorICAgICAgICBLZWVwaW5nIGNoYW5nZXMgc21hbGwgYW5kIGlzb2xhdGVkIGFpZHMgcmV2aWV3LCBtYWtlcyBtZXJnaW5nL3JlYmFzaW5nIGVhc2llcgorICAgICAgICBhbmQga2VlcHMgdGhlIGNoYW5nZSBoaXN0b3J5IGNsZWFuIHdoZW4gYW55b25lIG5lZWRzIHRvIHJlZmVyIHRvIGl0IGluIGZ1dHVyZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hlbiB5b3UgbWFrZSBhIGNvbW1pdCwgeW91IG11c3QgZm9sbG93IGNlcnRhaW4gc3RhbmRhcmRzIGVzdGFibGlzaGVkIGJ5IHRoZQorICAgICAgICBPcGVuRW1iZWRkZWQgYW5kIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQgdGVhbXMuCisgICAgICAgIEZvciBlYWNoIGNvbW1pdCwgeW91IG11c3QgcHJvdmlkZSBhIHNpbmdsZS1saW5lIHN1bW1hcnkgb2YgdGhlIGNoYW5nZSBhbmQgeW91CisgICAgICAgIHNob3VsZCBhbG1vc3QgYWx3YXlzIHByb3ZpZGUgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHdoYXQgeW91IGRpZCAoaS5lLgorICAgICAgICB0aGUgYm9keSBvZiB0aGUgY29tbWl0IG1lc3NhZ2UpLgorICAgICAgICBUaGUgb25seSBleGNlcHRpb25zIGZvciBub3QgcHJvdmlkaW5nIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gd291bGQgYmUgaWYgeW91cgorICAgICAgICBjaGFuZ2UgaXMgYSBzaW1wbGUsIHNlbGYtZXhwbGFuYXRvcnkgY2hhbmdlIHRoYXQgbmVlZHMgbm8gZnVydGhlciBkZXNjcmlwdGlvbgorICAgICAgICBiZXlvbmQgdGhlIHN1bW1hcnkuCisgICAgICAgIEhlcmUgYXJlIHRoZSBndWlkZWxpbmVzIGZvciBjb21wb3NpbmcgYSBjb21taXQgbWVzc2FnZToKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Qcm92aWRlIGEgc2luZ2xlLWxpbmUsIHNob3J0IHN1bW1hcnkgb2YgdGhlIGNoYW5nZS4KKyAgICAgICAgICAgICAgICBUaGlzIHN1bW1hcnkgaXMgdHlwaWNhbGx5IHZpZXdhYmxlIGluIHRoZSAic2hvcnRsaXN0IiBvZiBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIFRodXMsIHByb3ZpZGluZyBzb21ldGhpbmcgc2hvcnQgYW5kIGRlc2NyaXB0aXZlIHRoYXQgZ2l2ZXMgdGhlIHJlYWRlcgorICAgICAgICAgICAgICAgIGEgc3VtbWFyeSBvZiB0aGUgY2hhbmdlIGlzIHVzZWZ1bCB3aGVuIHZpZXdpbmcgYSBsaXN0IG9mIG1hbnkgY29tbWl0cy4KKyAgICAgICAgICAgICAgICBUaGlzIHNob3J0IGRlc2NyaXB0aW9uIHNob3VsZCBiZSBwcmVmaXhlZCBieSB0aGUgcmVjaXBlIG5hbWUgKGlmIGNoYW5naW5nIGEgcmVjaXBlKSwgb3IKKyAgICAgICAgICAgICAgICBlbHNlIHRoZSBzaG9ydCBmb3JtIHBhdGggdG8gdGhlIGZpbGUgYmVpbmcgY2hhbmdlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Gb3IgdGhlIGJvZHkgb2YgdGhlIGNvbW1pdCBtZXNzYWdlLCBwcm92aWRlIGRldGFpbGVkIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgdGhhdCBkZXNjcmliZXMgd2hhdCB5b3UgY2hhbmdlZCwgd2h5IHlvdSBtYWRlIHRoZSBjaGFuZ2UsIGFuZCB0aGUgYXBwcm9hY2gKKyAgICAgICAgICAgICAgICB5b3UgdXNlZC4gSXQgbWF5IGFsc28gYmUgaGVscGZ1bCBpZiB5b3UgbWVudGlvbiBob3cgeW91IHRlc3RlZCB0aGUgY2hhbmdlLgorICAgICAgICAgICAgICAgIFByb3ZpZGUgYXMgbXVjaCBkZXRhaWwgYXMgeW91IGNhbiBpbiB0aGUgYm9keSBvZiB0aGUgY29tbWl0IG1lc3NhZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgSWYgdGhlIGNoYW5nZSBhZGRyZXNzZXMgYSBzcGVjaWZpYyBidWcgb3IgaXNzdWUgdGhhdCBpcworICAgICAgICAgICAgICAgIGFzc29jaWF0ZWQgd2l0aCBhIGJ1Zy10cmFja2luZyBJRCwgaW5jbHVkZSBhIHJlZmVyZW5jZSB0byB0aGF0CisgICAgICAgICAgICAgICAgSUQgaW4geW91ciBkZXRhaWxlZCBkZXNjcmlwdGlvbi4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIFlvY3RvIFByb2plY3QgdXNlcyBhIHNwZWNpZmljIGNvbnZlbnRpb24gZm9yCisgICAgICAgICAgICAgICAgYnVnIHJlZmVyZW5jZXMgLSBhbnkgY29tbWl0IHRoYXQgYWRkcmVzc2VzIGEgc3BlY2lmaWMgYnVnIHNob3VsZAorICAgICAgICAgICAgICAgIHVzZSB0aGUgZm9sbG93aW5nIGZvcm0gZm9yIHRoZSBkZXRhaWxlZCBkZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZpeGVzIFtZT0NUTyAjPHJlcGxhY2VhYmxlPmJ1Zy1pZDwvcmVwbGFjZWFibGU+XQorCisgICAgIDxyZXBsYWNlYWJsZT5kZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBjaGFuZ2U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICBXaGVyZSA8cmVwbGFjZWFibGU+YnVnLWlkPC9yZXBsYWNlYWJsZT4gaXMgcmVwbGFjZWQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICBzcGVjaWZpYyBidWcgSUQgZnJvbSB0aGUgWW9jdG8gUHJvamVjdCBCdWd6aWxsYSBpbnN0YW5jZS4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFlvdSBjYW4gZmluZCBtb3JlIGd1aWRhbmNlIG9uIGNyZWF0aW5nIHdlbGwtZm9ybWVkIGNvbW1pdCBtZXNzYWdlcyBhdCB0aGlzIE9wZW5FbWJlZGRlZAorICAgICAgICB3aWtpIHBhZ2U6CisgICAgICAgIDx1bGluayB1cmw9JyZPRV9IT01FX1VSTDsvd2lraS9Db21taXRfUGF0Y2hfTWVzc2FnZV9HdWlkZWxpbmVzJz48L3VsaW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIG5leHQgdHdvIHNlY3Rpb25zIGRlc2NyaWJlIGdlbmVyYWwgaW5zdHJ1Y3Rpb25zIGZvciBib3RoIHB1c2hpbmcKKyAgICAgICAgY2hhbmdlcyB1cHN0cmVhbSBhbmQgZm9yIHN1Ym1pdHRpbmcgY2hhbmdlcyBhcyBwYXRjaGVzLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdwdXNoaW5nLWEtY2hhbmdlLXVwc3RyZWFtJz4KKyAgICAgICAgPHRpdGxlPlVzaW5nIFNjcmlwdHMgdG8gUHVzaCBhIENoYW5nZSBVcHN0cmVhbSBhbmQgUmVxdWVzdCBhIFB1bGw8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGJhc2ljIGZsb3cgZm9yIHB1c2hpbmcgYSBjaGFuZ2UgdG8gYW4gdXBzdHJlYW0gImNvbnRyaWIiIEdpdCByZXBvc2l0b3J5IGlzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYWtlIHlvdXIgY2hhbmdlcyBpbiB5b3VyIGxvY2FsIEdpdCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TdGFnZSB5b3VyIGNoYW5nZXMgYnkgdXNpbmcgdGhlIDxmaWxlbmFtZT5naXQgYWRkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBvbiBlYWNoIGZpbGUgeW91IGNoYW5nZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb21taXQgdGhlIGNoYW5nZSBieSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBjb21taXQ8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIHByb3ZpZGUgYSBjb21taXQgbWVzc2FnZSB0aGF0IGZvbGxvd3MgdGhlCisgICAgICAgICAgICAgICAgICAgIHByb2plY3TigJlzIGNvbW1pdCBtZXNzYWdlIHN0YW5kYXJkcyBhcyBkZXNjcmliZWQgZWFybGllci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBQdXNoIHRoZSBjaGFuZ2UgdG8gdGhlIHVwc3RyZWFtICJjb250cmliIiByZXBvc2l0b3J5IGJ5CisgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSA8ZmlsZW5hbWU+Z2l0IHB1c2g8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Tm90aWZ5IHRoZSBtYWludGFpbmVyIHRoYXQgeW91IGhhdmUgcHVzaGVkIGEgY2hhbmdlIGJ5IG1ha2luZyBhIHB1bGwKKyAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgdHdvIHNjcmlwdHMgdGhhdCBjb252ZW5pZW50bHkgbGV0IHlvdSBnZW5lcmF0ZSBhbmQgc2VuZAorICAgICAgICAgICAgICAgICAgICBwdWxsIHJlcXVlc3RzIHRvIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBzY3JpcHRzIGFyZSA8ZmlsZW5hbWU+Y3JlYXRlLXB1bGwtcmVxdWVzdDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2VuZC1wdWxsLXJlcXVlc3Q8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZXNlIHNjcmlwdHMgaW4gdGhlIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4gZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5Vc2luZyB0aGVzZSBzY3JpcHRzIGNvcnJlY3RseSBmb3JtYXRzIHRoZSByZXF1ZXN0cyB3aXRob3V0IGludHJvZHVjaW5nIGFueQorICAgICAgICAgICAgICAgICAgICB3aGl0ZXNwYWNlIG9yIEhUTUwgZm9ybWF0dGluZy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1haW50YWluZXIgdGhhdCByZWNlaXZlcyB5b3VyIHBhdGNoZXMgbmVlZHMgdG8gYmUgYWJsZSB0byBzYXZlIGFuZCBhcHBseSB0aGVtCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IGZyb20geW91ciBlbWFpbHMuCisgICAgICAgICAgICAgICAgICAgIFVzaW5nIHRoZXNlIHNjcmlwdHMgaXMgdGhlIHByZWZlcnJlZCBtZXRob2QgZm9yIHNlbmRpbmcgcGF0Y2hlcy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPkZvciBoZWxwIG9uIHVzaW5nIHRoZXNlIHNjcmlwdHMsIHNpbXBseSBwcm92aWRlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWg8L2ZpbGVuYW1lPiBhcmd1bWVudCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcG9reS9zY3JpcHRzL2NyZWF0ZS1wdWxsLXJlcXVlc3QgLWgKKyAgICAgJCBwb2t5L3NjcmlwdHMvc2VuZC1wdWxsLXJlcXVlc3QgLWgKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBnZW5lcmFsIEdpdCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gcHVzaCBhIGNoYW5nZSB1cHN0cmVhbSBpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQtc2NtLmNvbS9ib29rL2VuL3YyL0Rpc3RyaWJ1dGVkLUdpdC1EaXN0cmlidXRlZC1Xb3JrZmxvd3MnPkdpdCBDb21tdW5pdHkgQm9vazwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N1Ym1pdHRpbmctYS1wYXRjaCc+CisgICAgICAgIDx0aXRsZT5Vc2luZyBFbWFpbCB0byBTdWJtaXQgYSBQYXRjaDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIHN1Ym1pdCBwYXRjaGVzIHdpdGhvdXQgdXNpbmcgdGhlIDxmaWxlbmFtZT5jcmVhdGUtcHVsbC1yZXF1ZXN0PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+c2VuZC1wdWxsLXJlcXVlc3Q8L2ZpbGVuYW1lPiBzY3JpcHRzIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbi4KKyAgICAgICAgICAgIEhvd2V2ZXIsIGtlZXAgaW4gbWluZCwgdGhlIHByZWZlcnJlZCBtZXRob2QgaXMgdG8gdXNlIHRoZSBzY3JpcHRzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIGNvbXBvbmVudHMgY2hhbmdlZCwgeW91IG5lZWQgdG8gc3VibWl0IHRoZSBlbWFpbCB0byBhIHNwZWNpZmljCisgICAgICAgICAgICBtYWlsaW5nIGxpc3QuCisgICAgICAgICAgICBGb3Igc29tZSBndWlkYW5jZSBvbiB3aGljaCBtYWlsaW5nIGxpc3QgdG8gdXNlLCBzZWUgdGhlIGxpc3QgaW4gdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0naG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+SG93IHRvIFN1Ym1pdCBhIENoYW5nZTwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgRm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGF2YWlsYWJsZSBtYWlsaW5nIGxpc3RzLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVzb3VyY2VzLW1haWxpbmdsaXN0Jz5NYWlsaW5nIExpc3RzPC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEhlcmUgaXMgdGhlIGdlbmVyYWwgcHJvY2VkdXJlIG9uIGhvdyB0byBzdWJtaXQgYSBwYXRjaCB0aHJvdWdoIGVtYWlsIHdpdGhvdXQgdXNpbmcgdGhlCisgICAgICAgICAgICBzY3JpcHRzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TWFrZSB5b3VyIGNoYW5nZXMgaW4geW91ciBsb2NhbCBHaXQgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U3RhZ2UgeW91ciBjaGFuZ2VzIGJ5IHVzaW5nIHRoZSA8ZmlsZW5hbWU+Z2l0IGFkZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgb24gZWFjaCBmaWxlIHlvdSBjaGFuZ2VkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Db21taXQgdGhlIGNoYW5nZSBieSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBjb21taXQgLS1zaWdub2ZmPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgdGhlIDxmaWxlbmFtZT4tLXNpZ25vZmY8L2ZpbGVuYW1lPiBvcHRpb24gaWRlbnRpZmllcyB5b3UgYXMgdGhlIHBlcnNvbgorICAgICAgICAgICAgICAgICAgICBtYWtpbmcgdGhlIGNoYW5nZSBhbmQgYWxzbyBzYXRpc2ZpZXMgdGhlIERldmVsb3BlcidzIENlcnRpZmljYXRlIG9mCisgICAgICAgICAgICAgICAgICAgIE9yaWdpbiAoRENPKSBzaG93biBlYXJsaWVyLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+V2hlbiB5b3UgZm9ybSBhIGNvbW1pdCwgeW91IG11c3QgZm9sbG93IGNlcnRhaW4gc3RhbmRhcmRzIGVzdGFibGlzaGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IGRldmVsb3BtZW50IHRlYW0uCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgZWFybGllciBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdob3ctdG8tc3VibWl0LWEtY2hhbmdlJz5Ib3cgdG8gU3VibWl0IGEgQ2hhbmdlPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgZm9yIFlvY3RvIFByb2plY3QgY29tbWl0IG1lc3NhZ2Ugc3RhbmRhcmRzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Gb3JtYXQgdGhlIGNvbW1pdCBpbnRvIGFuIGVtYWlsIG1lc3NhZ2UuCisgICAgICAgICAgICAgICAgICAgIFRvIGZvcm1hdCBjb21taXRzLCB1c2UgdGhlIDxmaWxlbmFtZT5naXQgZm9ybWF0LXBhdGNoPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgcHJvdmlkZSB0aGUgY29tbWFuZCwgeW91IG11c3QgaW5jbHVkZSBhIHJldmlzaW9uIGxpc3Qgb3IgYSBudW1iZXIgb2YgcGF0Y2hlcworICAgICAgICAgICAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZWl0aGVyIG9mIHRoZXNlIHR3byBjb21tYW5kcyB0YWtlcyB5b3VyIG1vc3QKKyAgICAgICAgICAgICAgICAgICAgcmVjZW50IHNpbmdsZSBjb21taXQgYW5kIGZvcm1hdHMgaXQgYXMgYW4gZW1haWwgbWVzc2FnZSBpbgorICAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCBkaXJlY3Rvcnk6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgZm9ybWF0LXBhdGNoIC0xCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggSEVBRH4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+QWZ0ZXIgdGhlIGNvbW1hbmQgaXMgcnVuLCB0aGUgY3VycmVudCBkaXJlY3RvcnkgY29udGFpbnMgYQorICAgICAgICAgICAgICAgICAgICBudW1iZXJlZCA8ZmlsZW5hbWU+LnBhdGNoPC9maWxlbmFtZT4gZmlsZSBmb3IgdGhlIGNvbW1pdC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBwcm92aWRlIHNldmVyYWwgY29tbWl0cyBhcyBwYXJ0IG9mIHRoZSBjb21tYW5kLAorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmdpdCBmb3JtYXQtcGF0Y2g8L2ZpbGVuYW1lPiBjb21tYW5kIHByb2R1Y2VzIGEKKyAgICAgICAgICAgICAgICAgICAgc2VyaWVzIG9mIG51bWJlcmVkIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSDigJMgb25lIGZvciBlYWNoIGNvbW1pdC4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgbW9yZSB0aGFuIG9uZSBwYXRjaCwgeW91IHNob3VsZCBhbHNvIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi0tY292ZXI8L2ZpbGVuYW1lPiBvcHRpb24gd2l0aCB0aGUgY29tbWFuZCwgd2hpY2ggZ2VuZXJhdGVzIGEKKyAgICAgICAgICAgICAgICAgICAgY292ZXIgbGV0dGVyIGFzIHRoZSBmaXJzdCAicGF0Y2giIGluIHRoZSBzZXJpZXMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdGhlbiBlZGl0IHRoZSBjb3ZlciBsZXR0ZXIgdG8gcHJvdmlkZSBhIGRlc2NyaXB0aW9uIGZvcgorICAgICAgICAgICAgICAgICAgICB0aGUgc2VyaWVzIG9mIHBhdGNoZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgPGZpbGVuYW1lPmdpdCBmb3JtYXQtcGF0Y2g8L2ZpbGVuYW1lPiBjb21tYW5kLAorICAgICAgICAgICAgICAgICAgICBzZWUgPGZpbGVuYW1lPkdJVF9GT1JNQVRfUEFUQ0goMSk8L2ZpbGVuYW1lPiBkaXNwbGF5ZWQgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYW4gZ2l0LWZvcm1hdC1wYXRjaDwvZmlsZW5hbWU+IGNvbW1hbmQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8bm90ZT5JZiB5b3UgYXJlIG9yIHdpbGwgYmUgYSBmcmVxdWVudCBjb250cmlidXRvciB0byB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICBvciB0byBPcGVuRW1iZWRkZWQsIHlvdSBtaWdodCBjb25zaWRlciByZXF1ZXN0aW5nIGEgY29udHJpYiBhcmVhIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgbmVjZXNzYXJ5IGFzc29jaWF0ZWQgcmlnaHRzLjwvbm90ZT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbXBvcnQgdGhlIGZpbGVzIGludG8geW91ciBtYWlsIGNsaWVudCBieSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBzZW5kLWVtYWlsPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+SW4gb3JkZXIgdG8gdXNlIDxmaWxlbmFtZT5naXQgc2VuZC1lbWFpbDwvZmlsZW5hbWU+LCB5b3UgbXVzdCBoYXZlIHRoZQorICAgICAgICAgICAgICAgICAgICB0aGUgcHJvcGVyIEdpdCBwYWNrYWdlcyBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgIEZvciBVYnVudHUsIERlYmlhbiwgYW5kIEZlZG9yYSB0aGUgcGFja2FnZSBpcyA8ZmlsZW5hbWU+Z2l0LWVtYWlsPC9maWxlbmFtZT4uPC9ub3RlPjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIDxmaWxlbmFtZT5naXQgc2VuZC1lbWFpbDwvZmlsZW5hbWU+IGNvbW1hbmQgc2VuZHMgZW1haWwgYnkgdXNpbmcgYSBsb2NhbAorICAgICAgICAgICAgICAgICAgICBvciByZW1vdGUgTWFpbCBUcmFuc3BvcnQgQWdlbnQgKE1UQSkgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bXNtdHA8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPnNlbmRtYWlsPC9maWxlbmFtZT4sIG9yIHRocm91Z2ggYSBkaXJlY3QKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNtdHA8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGluIHlvdXIgR2l0IDxmaWxlbmFtZT5jb25maWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHN1Ym1pdHRpbmcgcGF0Y2hlcyB0aHJvdWdoIGVtYWlsIG9ubHksIGl0IGlzIHZlcnkgaW1wb3J0YW50CisgICAgICAgICAgICAgICAgICAgIHRoYXQgeW91IHN1Ym1pdCB0aGVtIHdpdGhvdXQgYW55IHdoaXRlc3BhY2Ugb3IgSFRNTCBmb3JtYXR0aW5nIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgZWl0aGVyIHlvdSBvciB5b3VyIG1haWxlciBpbnRyb2R1Y2VzLgorICAgICAgICAgICAgICAgICAgICBUaGUgbWFpbnRhaW5lciB0aGF0IHJlY2VpdmVzIHlvdXIgcGF0Y2hlcyBuZWVkcyB0byBiZSBhYmxlIHRvIHNhdmUgYW5kCisgICAgICAgICAgICAgICAgICAgIGFwcGx5IHRoZW0gZGlyZWN0bHkgZnJvbSB5b3VyIGVtYWlscy4KKyAgICAgICAgICAgICAgICAgICAgQSBnb29kIHdheSB0byB2ZXJpZnkgdGhhdCB3aGF0IHlvdSBhcmUgc2VuZGluZyB3aWxsIGJlIGFwcGxpY2FibGUgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIG1haW50YWluZXIgaXMgdG8gZG8gYSBkcnkgcnVuIGFuZCBzZW5kIHRoZW0gdG8geW91cnNlbGYgYW5kIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgc2F2ZSBhbmQgYXBwbHkgdGhlbSBhcyB0aGUgbWFpbnRhaW5lciB3b3VsZC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSA8ZmlsZW5hbWU+Z2l0IHNlbmQtZW1haWw8L2ZpbGVuYW1lPiBjb21tYW5kIGlzIHRoZSBwcmVmZXJyZWQgbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGZvciBzZW5kaW5nIHlvdXIgcGF0Y2hlcyBzaW5jZSB0aGVyZSBpcyBubyByaXNrIG9mIGNvbXByb21pc2luZyB3aGl0ZXNwYWNlCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBib2R5IG9mIHRoZSBtZXNzYWdlLCB3aGljaCBjYW4gb2NjdXIgd2hlbiB5b3UgdXNlIHlvdXIgb3duIG1haWwgY2xpZW50LgorICAgICAgICAgICAgICAgICAgICBUaGUgY29tbWFuZCBhbHNvIGhhcyBzZXZlcmFsIG9wdGlvbnMgdGhhdCBsZXQgeW91CisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgcmVjaXBpZW50cyBhbmQgcGVyZm9ybSBmdXJ0aGVyIGVkaXRpbmcgb2YgdGhlIGVtYWlsIG1lc3NhZ2UuCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZSA8ZmlsZW5hbWU+Z2l0IHNlbmQtZW1haWw8L2ZpbGVuYW1lPiBjb21tYW5kLAorICAgICAgICAgICAgICAgICAgICBzZWUgPGZpbGVuYW1lPkdJVC1TRU5ELUVNQUlMKDEpPC9maWxlbmFtZT4gZGlzcGxheWVkIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bWFuIGdpdC1zZW5kLWVtYWlsPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1xZW11LnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtcWVtdS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NjOTE1ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtcWVtdS54bWwKQEAgLTAsMCArMSw0MjIgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdkZXYtbWFudWFsLXFlbXUnPgorCis8dGl0bGU+VXNpbmcgdGhlIFF1aWNrIEVNVWxhdG9yIChRRU1VKTwvdGl0bGU+CisKKzxwYXJhPgorICAgIFF1aWNrIEVNVWxhdG9yIChRRU1VKSBpcyBhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IHRoZSBZb2N0byBQcm9qZWN0IHVzZXMKKyAgICBhcyBwYXJ0IG9mIGl0cyBkZXZlbG9wbWVudCAidG9vbCBzZXQiLgorICAgIEFzIHN1Y2gsIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGNoYXB0ZXIgaXMgbGltaXRlZCB0byB0aGUKKyAgICBZb2N0byBQcm9qZWN0IGludGVncmF0aW9uIG9mIFFFTVUgYW5kIG5vdCBRRU1VIGluIGdlbmVyYWwuCisgICAgRm9yIG9mZmljaWFsIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudGF0aW9uIG9uIFFFTVUsIHNlZSB0aGUKKyAgICBmb2xsb3dpbmcgcmVmZXJlbmNlczoKKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjx1bGluayB1cmw9J2h0dHA6Ly93aWtpLnFlbXUub3JnL01haW5fUGFnZSc+UUVNVSBXZWJzaXRlPC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgIFRoZSBvZmZpY2lhbCB3ZWJzaXRlIGZvciB0aGUgUUVNVSBPcGVuIFNvdXJjZSBwcm9qZWN0LgorICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PHVsaW5rIHVybD0naHR0cDovL3dpa2kucWVtdS5vcmcvTWFudWFsJz5Eb2N1bWVudGF0aW9uPC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgIFRoZSBRRU1VIHVzZXIgbWFudWFsLgorICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+Cis8L3BhcmE+CisKKzxwYXJhPgorICAgIFRoaXMgY2hhcHRlciBwcm92aWRlcyBhbiBvdmVydmlldyBvZiB0aGUgWW9jdG8gUHJvamVjdCdzIGludGVncmF0aW9uIG9mCisgICAgUUVNVSwgYSBkZXNjcmlwdGlvbiBvZiBob3cgeW91IHVzZSBRRU1VIGFuZCBpdHMgdmFyaW91cyBvcHRpb25zLCBydW5uaW5nCisgICAgdW5kZXIgYSBOZXR3b3JrIEZpbGUgU3lzdGVtIChORlMpIHNlcnZlciwgYW5kIGEgZmV3IHRpcHMgYW5kIHRyaWNrcyB5b3UKKyAgICBtaWdodCBmaW5kIGhlbHBmdWwgd2hlbiB1c2luZyBRRU1VLgorPC9wYXJhPgorCis8c2VjdGlvbiBpZD0ncWVtdS1vdmVydmlldyc+CisgICAgPHRpdGxlPk92ZXJ2aWV3PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBXaXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIFlvY3RvIFByb2plY3QsIFFFTVUgaXMgYW4KKyAgICAgICAgZW11bGF0b3IgYW5kIHZpcnR1YWxpemF0aW9uIG1hY2hpbmUgdGhhdCBhbGxvd3MgeW91IHRvIHJ1biBhIGNvbXBsZXRlCisgICAgICAgIGltYWdlIHlvdSBoYXZlIGJ1aWx0IHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0IGFzIGp1c3QgYW5vdGhlciB0YXNrCisgICAgICAgIG9uIHlvdXIgYnVpbGQgc3lzdGVtLgorICAgICAgICBRRU1VIGlzIHVzZWZ1bCBmb3IgcnVubmluZyBhbmQgdGVzdGluZyBpbWFnZXMgYW5kIGFwcGxpY2F0aW9ucyBvbgorICAgICAgICBzdXBwb3J0ZWQgWW9jdG8gUHJvamVjdCBhcmNoaXRlY3R1cmVzIHdpdGhvdXQgaGF2aW5nIGFjdHVhbCBoYXJkd2FyZS4KKyAgICAgICAgQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGUgWW9jdG8gUHJvamVjdCB1c2VzIFFFTVUgdG8gcnVuIGF1dG9tYXRlZAorICAgICAgICBRdWFsaXR5IEFzc3VyYW5jZSAoUUEpIHRlc3RzIG9uIGZpbmFsIGltYWdlcyBzaGlwcGVkIHdpdGggZWFjaAorICAgICAgICByZWxlYXNlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBRRU1VIGlzIG1hZGUgYXZhaWxhYmxlIHdpdGggdGhlIFlvY3RvIFByb2plY3QgYSBudW1iZXIgb2Ygd2F5cy4KKyAgICAgICAgVGhlIGVhc2llc3QgYW5kIHJlY29tbWVuZGVkIG1ldGhvZCBmb3IgZ2V0dGluZyBRRU1VIGlzIHRvIHJ1biB0aGUKKyAgICAgICAgQURUIGluc3RhbGxlci4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBtYWtlIHN1cmUgeW91IGhhdmUKKyAgICAgICAgUUVNVSBhdmFpbGFibGUsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I3RoZS1xZW11LWVtdWxhdG9yJz5UaGUgUUVNVSBFbXVsYXRvcjwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3FlbXUtcnVubmluZy1xZW11Jz4KKyAgICA8dGl0bGU+UnVubmluZyBRRU1VPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBSdW5uaW5nIFFFTVUgaW52b2x2ZXMgaGF2aW5nIHlvdXIgYnVpbGQgZW52aXJvbm1lbnQgc2V0IHVwLCBoYXZpbmcgdGhlCisgICAgICAgIHJpZ2h0IGFydGlmYWN0cyBhdmFpbGFibGUsIGFuZCB1bmRlcnN0YW5kaW5nIGhvdyB0byB1c2UgdGhlIG1hbnkKKyAgICAgICAgb3B0aW9ucyB0aGF0IGFyZSBhdmFpbGFibGUgdG8geW91IHdoZW4geW91IHN0YXJ0IFFFTVUgdXNpbmcgdGhlCisgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ncWVtdS1zZXR0aW5nLXVwLXRoZS1lbnZpcm9ubWVudCc+CisgICAgICAgIDx0aXRsZT5TZXR0aW5nIFVwIHRoZSBFbnZpcm9ubWVudDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgcnVuIFFFTVUgaW4gdGhlIHNhbWUgZW52aXJvbm1lbnQgZnJvbSB3aGljaCB5b3UgcnVuIEJpdEJha2UuCisgICAgICAgICAgICBUaGlzIG1lYW5zIHlvdSBuZWVkIHRvIHNvdXJjZSBhIGJ1aWxkIGVudmlyb25tZW50IHNjcmlwdCAoaS5lLgorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICBvcgorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4pLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3FlbXUtdXNpbmctdGhlLXJ1bnFlbXUtY29tbWFuZCc+CisgICAgICAgIDx0aXRsZT5Vc2luZyB0aGUgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBDb21tYW5kPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBiYXNpYyA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+IGNvbW1hbmQgc3ludGF4IGlzIGFzCisgICAgICAgICAgICBmb2xsb3dzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHJ1bnFlbXUgWzxyZXBsYWNlYWJsZT5vcHRpb248L3JlcGxhY2VhYmxlPiBdICBbLi4uXQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgQmFzZWQgb24gd2hhdCB5b3UgcHJvdmlkZSBvbiB0aGUgY29tbWFuZCBsaW5lLAorICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBkb2VzIGEgZ29vZCBqb2Igb2YgZmlndXJpbmcgb3V0IHdoYXQKKyAgICAgICAgICAgIHlvdSBhcmUgdHJ5aW5nIHRvIGRvLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGJ5IGRlZmF1bHQsIFFFTVUgbG9va3MgZm9yIHRoZSBtb3N0IHJlY2VudGx5IGJ1aWx0CisgICAgICAgICAgICBpbWFnZSBhY2NvcmRpbmcgdG8gdGhlIHRpbWVzdGFtcCB3aGVuIGl0IG5lZWRzIHRvIGxvb2sgZm9yIGFuCisgICAgICAgICAgICBpbWFnZS4KKyAgICAgICAgICAgIE1pbmltYWxseSwgdGhyb3VnaCB0aGUgdXNlIG9mIG9wdGlvbnMsIHlvdSBtdXN0IHByb3ZpZGUgZWl0aGVyCisgICAgICAgICAgICBhIG1hY2hpbmUgbmFtZSwgYSB2aXJ0dWFsIG1hY2hpbmUgaW1hZ2UKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+Ki52bWRrPC9maWxlbmFtZT4pLCBvciBhIGtlcm5lbCBpbWFnZQorICAgICAgICAgICAgKDxmaWxlbmFtZT4qLmJpbjwvZmlsZW5hbWU+KS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9sbG93aW5nIGlzIGEgZGVzY3JpcHRpb24gb2YgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgb3B0aW9ucyB5b3UgY2FuIHByb3ZpZGUgb24gdGhlIGNvbW1hbmQgbGluZToKKyAgICAgICAgICAgIDxub3RlPjx0aXRsZT5UaXA8L3RpdGxlPgorICAgICAgICAgICAgICAgIElmIHlvdSBkbyBwcm92aWRlIHNvbWUgImlsbGVnYWwiIG9wdGlvbiBjb21iaW5hdGlvbiBvciBwZXJoYXBzCisgICAgICAgICAgICAgICAgeW91IGRvIG5vdCBwcm92aWRlIGVub3VnaCBpbiB0aGUgd2F5IG9mIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBwcm92aWRlcyBhcHByb3ByaWF0ZSBlcnJvcgorICAgICAgICAgICAgICAgIG1lc3NhZ2luZyB0byBoZWxwIHlvdSBjb3JyZWN0IHRoZSBwcm9ibGVtLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHJlcGxhY2VhYmxlPlFFTVVBUkNIPC9yZXBsYWNlYWJsZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSBRRU1VIG1hY2hpbmUgYXJjaGl0ZWN0dXJlLCB3aGljaCBtdXN0IGJlICJxZW11eDg2IiwKKyAgICAgICAgICAgICAgICAgICAgInFlbXV4ODZfNjQiLCAicWVtdWFybSIsICJxZW11bWlwcyIsICJxZW11bWlwc2VsIiwKKyAgICAgICAgICAgICAgICAgICAg4oCccWVtdW1pcHM2NCIsICJxZW11c2g0IiwgInFlbXVwcGMiLCAicWVtdW1pY3JvYmxhemUiLAorICAgICAgICAgICAgICAgICAgICBvciAicWVtdXp5bnEiLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5WTTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSB2aXJ0dWFsIG1hY2hpbmUgaW1hZ2UsIHdoaWNoIG11c3QgYmUgYQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnZtZGs8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBVc2UgdGhpcyBvcHRpb24gd2hlbiB5b3Ugd2FudCB0byBib290IGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi52bWRrPC9maWxlbmFtZT4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoZSBpbWFnZSBmaWxlbmFtZSB5b3UgcHJvdmlkZSBtdXN0IGNvbnRhaW4gb25lIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgc3RyaW5nczogInFlbXV4ODYtNjQiLCAicWVtdXg4NiIsICJxZW11YXJtIiwKKyAgICAgICAgICAgICAgICAgICAgInFlbXVtaXBzNjQiLCAicWVtdW1pcHMiLCAicWVtdXBwYyIsIG9yICJxZW11c2g0Ii4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxyZXBsYWNlYWJsZT5ST09URlM8L3JlcGxhY2VhYmxlPjoKKyAgICAgICAgICAgICAgICAgICAgQSByb290IGZpbGVzeXN0ZW0gdGhhdCBoYXMgb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgZmlsZXR5cGUgZXh0ZW5zaW9uczogImV4dDIiLCAiZXh0MyIsICJleHQ0IiwgImpmZnMyIiwKKyAgICAgICAgICAgICAgICAgICAgIm5mcyIsIG9yICJidHJmcyIuCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBmaWxlbmFtZSB5b3UgcHJvdmlkZSBmb3IgdGhpcyBvcHRpb24gdXNlcyDigJxuZnPigJ0sIGl0CisgICAgICAgICAgICAgICAgICAgIG11c3QgcHJvdmlkZSBhbiBleHBsaWNpdCByb290IGZpbGVzeXN0ZW0gcGF0aC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxyZXBsYWNlYWJsZT5LRVJORUw8L3JlcGxhY2VhYmxlPjoKKyAgICAgICAgICAgICAgICAgICAgQSBrZXJuZWwgaW1hZ2UsIHdoaWNoIGlzIGEgPGZpbGVuYW1lPi5iaW48L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBwcm92aWRlIGEgPGZpbGVuYW1lPi5iaW48L2ZpbGVuYW1lPiBmaWxlLAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+IGRldGVjdHMgaXQgYW5kIGFzc3VtZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIGZpbGUgaXMgYSBrZXJuZWwgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48cmVwbGFjZWFibGU+TUFDSElORTwvcmVwbGFjZWFibGU+OgorICAgICAgICAgICAgICAgICAgICBUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBRRU1VIG1hY2hpbmUsIHdoaWNoIG11c3QgYmUgb25lCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmc6ICJxZW11eDg2IiwKKyAgICAgICAgICAgICAgICAgICAgInFlbXV4ODYtNjQiLCAicWVtdWFybSIsICJxZW11bWlwcyIsICJxZW11bWlwc2VsIiwKKyAgICAgICAgICAgICAgICAgICAg4oCccWVtdW1pcHM2NCIsICJxZW11c2g0IiwgInFlbXVwcGMiLCAicWVtdW1pY3JvYmxhemUiLAorICAgICAgICAgICAgICAgICAgICBvciAicWVtdXp5bnEiLgorICAgICAgICAgICAgICAgICAgICBUaGUgPHJlcGxhY2VhYmxlPk1BQ0hJTkU8L3JlcGxhY2VhYmxlPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPlFFTVVBUkNIPC9yZXBsYWNlYWJsZT4gb3B0aW9ucyBhcmUgYmFzaWNhbGx5CisgICAgICAgICAgICAgICAgICAgIGlkZW50aWNhbC4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBwcm92aWRlIGEgPHJlcGxhY2VhYmxlPk1BQ0hJTkU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICBvcHRpb24sIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gdHJpZXMgdG8gZGV0ZXJtaW5lCisgICAgICAgICAgICAgICAgICAgIGl0IGJhc2VkIG9uIG90aGVyIG9wdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+cmFtZnM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgSW5kaWNhdGVzIHlvdSBhcmUgYm9vdGluZyBhbiBpbml0aWFsIFJBTSBkaXNrIChpbml0cmFtZnMpCisgICAgICAgICAgICAgICAgICAgIGltYWdlLCB3aGljaCBtZWFucyB0aGUgPGZpbGVuYW1lPkZTVFlQRTwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jcGlvLmd6PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+aXNvPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIEluZGljYXRlcyB5b3UgYXJlIGJvb3RpbmcgYW4gSVNPIGltYWdlLCB3aGljaCBtZWFucyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZTVFlQRTwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uaXNvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+bm9ncmFwaGljPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIERpc2FibGVzIHRoZSB2aWRlbyBjb25zb2xlLCB3aGljaCBzZXRzIHRoZSBjb25zb2xlIHRvCisgICAgICAgICAgICAgICAgICAgICJ0dHlzMCIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+c2VyaWFsPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIEVuYWJsZXMgYSBzZXJpYWwgY29uc29sZSBvbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2Rldi90dHlTMDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJpb3NkaXI8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgRXN0YWJsaXNoZXMgYSBjdXN0b20gZGlyZWN0b3J5IGZvciBCSU9TLCBWR0EgQklPUyBhbmQKKyAgICAgICAgICAgICAgICAgICAga2V5bWFwcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5iaW9zZmlsZW5hbWU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgRXN0YWJsaXNoZXMgYSBjdXN0b20gQklPUyBuYW1lLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnFlbXVwYXJhbXM9XCI8cmVwbGFjZWFibGU+eHl6PC9yZXBsYWNlYWJsZT5cIjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgY3VzdG9tIFFFTVUgcGFyYW1ldGVycy4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgb3B0aW9uIHRvIHBhc3Mgb3B0aW9ucyBvdGhlciB0aGFuIHRoZSBzaW1wbGUKKyAgICAgICAgICAgICAgICAgICAgImt2bSIgYW5kICJzZXJpYWwiIG9wdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Ym9vdHBhcmFtcz1cIjxyZXBsYWNlYWJsZT54eXo8L3JlcGxhY2VhYmxlPlwiPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBjdXN0b20gYm9vdCBwYXJhbWV0ZXJzIGZvciB0aGUga2VybmVsLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmF1ZGlvPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIEVuYWJsZXMgYXVkaW8gaW4gUUVNVS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxyZXBsYWNlYWJsZT5NQUNISU5FPC9yZXBsYWNlYWJsZT4gb3B0aW9uIG11c3QgYmUKKyAgICAgICAgICAgICAgICAgICAgZWl0aGVyICJxZW11eDg2IiBvciAicWVtdXg4Ni02NCIgaW4gb3JkZXIgZm9yIGF1ZGlvIHRvIGJlCisgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQuCisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIDxmaWxlbmFtZT5zbmRfaW50ZWw4eDA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBvciA8ZmlsZW5hbWU+c25kX2VuczEzNzA8L2ZpbGVuYW1lPiBkcml2ZXIgbXVzdCBiZQorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgaW4gbGludXggZ3Vlc3QuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+c2xpcnA8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgRW5hYmxlcyAic2xpcnAiIG5ldHdvcmtpbmcsIHdoaWNoIGlzIGEgZGlmZmVyZW50IHdheQorICAgICAgICAgICAgICAgICAgICBvZiBuZXR3b3JraW5nIHRoYXQgZG9lcyBub3QgbmVlZCByb290IGFjY2VzcworICAgICAgICAgICAgICAgICAgICBidXQgYWxzbyBpcyBub3QgYXMgZWFzeSB0byB1c2Ugb3IgY29tcHJlaGVuc2l2ZQorICAgICAgICAgICAgICAgICAgICBhcyB0aGUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5rdm08L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgRW5hYmxlcyBLVk0gd2hlbiBydW5uaW5nICJxZW11eDg2IiBvciAicWVtdXg4Ni02NCIKKyAgICAgICAgICAgICAgICAgICAgUUVNVSBhcmNoaXRlY3R1cmVzLgorICAgICAgICAgICAgICAgICAgICBGb3IgS1ZNIHRvIHdvcmssIGFsbCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgbXVzdCBiZSBtZXQ6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91ciA8cmVwbGFjZWFibGU+TUFDSElORTwvcmVwbGFjZWFibGU+IG11c3QgYmUgZWl0aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInFlbXV4ODYiIG9yICJxZW11eDg2LTY0Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3VyIGJ1aWxkIGhvc3QgaGFzIHRvIGhhdmUgdGhlIEtWTSBtb2R1bGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLCB3aGljaCBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2Rldi9rdm08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3VyIGJ1aWxkIGhvc3QgaGFzIHRvIGhhdmUgdmlydGlvIG5ldCBkZXZpY2UsIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIDxmaWxlbmFtZT4vZGV2L3Zob3N0LW5ldDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSAgYnVpbGQgaG9zdCA8ZmlsZW5hbWU+L2Rldi9rdm08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBoYXMgdG8gYmUgYm90aCB3cml0YWJsZSBhbmQgcmVhZGFibGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIGhvc3QgPGZpbGVuYW1lPi9kZXYvdmhvc3QtbmV0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaGFzIHRvIGJlIGVpdGhlciByZWFkYWJsZSBvciB3cml0YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCDigJxzbGlycC1lbmFibGVk4oCdLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5wdWJsaWN2bmM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgRW5hYmxlcyBhIFZOQyBzZXJ2ZXIgb3BlbiB0byBhbGwgaG9zdHMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBmdXJ0aGVyIHVuZGVyc3RhbmRpbmcgcmVnYXJkaW5nIG9wdGlvbiB1c2Ugd2l0aAorICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiwgY29uc2lkZXIgc29tZSBleGFtcGxlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBleGFtcGxlIHN0YXJ0cyBRRU1VIHdpdGgKKyAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5NQUNISU5FPC9yZXBsYWNlYWJsZT4gc2V0IHRvICJxZW11eDg2Ii4KKyAgICAgICAgICAgIEFzc3VtaW5nIGEgc3RhbmRhcmQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gYXV0b21hdGljYWxseSBmaW5kcyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5iekltYWdlLXFlbXV4ODYuYmluPC9maWxlbmFtZT4gaW1hZ2UgZmlsZSBhbmQKKyAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbC1xZW11eDg2LTIwMTQwNzA3MDc0NjExLnJvb3Rmcy5leHQzPC9maWxlbmFtZT4KKyAgICAgICAgICAgIChhc3N1bWluZyB0aGUgY3VycmVudCBidWlsZCBjcmVhdGVkIGEKKyAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBpbWFnZSkuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBXaGVuIG1vcmUgdGhhbiBvbmUgaW1hZ2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGV4aXN0cywgUUVNVSBmaW5kcworICAgICAgICAgICAgICAgIGFuZCB1c2VzIHRoZSBtb3N0IHJlY2VudGx5IGJ1aWx0IGltYWdlIGFjY29yZGluZyB0byB0aGUKKyAgICAgICAgICAgICAgICB0aW1lc3RhbXAuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgJCBydW5xZW11IHFlbXV4ODYKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBwcm9kdWNlcyB0aGUgZXhhY3Qgc2FtZSByZXN1bHRzIGFzIHRoZQorICAgICAgICAgICAgcHJldmlvdXMgZXhhbXBsZS4KKyAgICAgICAgICAgIFRoaXMgY29tbWFuZCwgaG93ZXZlciwgc3BlY2lmaWNhbGx5IHByb3ZpZGVzIHRoZSBpbWFnZQorICAgICAgICAgICAgYW5kIHJvb3QgZmlsZXN5c3RlbSB0eXBlLgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHJ1bnFlbXUgcWVtdXg4NiBjb3JlLWltYWdlLW1pbmltYWwgZXh0MworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhpcyBleGFtcGxlIHNwZWNpZmllcyB0byBib290IGFuIGluaXRpYWwgUkFNIGRpc2sgaW1hZ2UKKyAgICAgICAgICAgIGFuZCB0byBlbmFibGUgYXVkaW8gaW4gUUVNVS4KKyAgICAgICAgICAgIEZvciB0aGlzIGNhc2UsIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gc2V0IHRoZQorICAgICAgICAgICAgaW50ZXJuYWwgdmFyaWFibGUgPGZpbGVuYW1lPkZTVFlQRTwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAiY3Bpby5neiIuCisgICAgICAgICAgICBBbHNvLCBmb3IgYXVkaW8gdG8gYmUgZW5hYmxlZCwgYW4gYXBwcm9wcmlhdGUgZHJpdmVyIG11c3QKKyAgICAgICAgICAgIGJlIGluc3RhbGxlZCAoc2VlIHRoZSBwcmV2aW91cyBkZXNjcmlwdGlvbiBmb3IgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+YXVkaW88L2ZpbGVuYW1lPiBvcHRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24pLgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHJ1bnFlbXUgcWVtdXg4NiByYW1mcyBhdWRpbworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhpcyBleGFtcGxlIGRvZXMgbm90IHByb3ZpZGUgZW5vdWdoIGluZm9ybWF0aW9uIGZvcgorICAgICAgICAgICAgUUVNVSB0byBsYXVuY2guCisgICAgICAgICAgICBXaGlsZSB0aGUgY29tbWFuZCBkb2VzIHByb3ZpZGUgYSByb290IGZpbGVzeXN0ZW0gdHlwZSwgaXQKKyAgICAgICAgICAgIG11c3QgYWxzbyBtaW5pbWFsbHkgcHJvdmlkZSBhCisgICAgICAgICAgICA8cmVwbGFjZWFibGU+TUFDSElORTwvcmVwbGFjZWFibGU+LAorICAgICAgICAgICAgPHJlcGxhY2VhYmxlPktFUk5FTDwvcmVwbGFjZWFibGU+LCBvcgorICAgICAgICAgICAgPHJlcGxhY2VhYmxlPlZNPC9yZXBsYWNlYWJsZT4gb3B0aW9uLgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHJ1bnFlbXUgZXh0MworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhpcyBleGFtcGxlIHNwZWNpZmllcyB0byBib290IGEgdmlydHVhbCBtYWNoaW5lIGltYWdlCisgICAgICAgICAgICAoPGZpbGVuYW1lPi52bWRrPC9maWxlbmFtZT4gZmlsZSkuCisgICAgICAgICAgICBGcm9tIHRoZSA8ZmlsZW5hbWU+LnZtZGs8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gZGV0ZXJtaW5lcyB0aGUgUUVNVQorICAgICAgICAgICAgYXJjaGl0ZWN0dXJlICg8cmVwbGFjZWFibGU+TUFDSElORTwvcmVwbGFjZWFibGU+KSB0byBiZQorICAgICAgICAgICAgInFlbXV4ODYiIGFuZCB0aGUgcm9vdCBmaWxlc3lzdGVtIHR5cGUgdG8gYmUgInZtZGsiLgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHJ1bnFlbXUgL2hvbWUvc2NvdHQtbGVub3ZvL3ZtL2NvcmUtaW1hZ2UtbWluaW1hbC1xZW11eDg2LnZtZGsKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3FlbXUtcnVubmluZy11bmRlci1hLW5ldHdvcmstZmlsZS1zeXN0ZW0tbmZzLXNlcnZlcic+CisgICAgPHRpdGxlPlJ1bm5pbmcgVW5kZXIgYSBOZXR3b3JrIEZpbGUgU3lzdGVtIChORlMpIFNlcnZlcjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgT25lIG1ldGhvZCBmb3IgcnVubmluZyBRRU1VIGlzIHRvIHJ1biBpdCBvbiBhbiBORlMgc2VydmVyLgorICAgICAgICBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSBmaWxlIHN5c3RlbSBmcm9tIGJvdGgKKyAgICAgICAgdGhlIGJ1aWxkIGFuZCB0aGUgZW11bGF0ZWQgc3lzdGVtIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAgIEl0IGlzIGFsc28gd29ydGggbm90aW5nIHRoYXQgdGhlIHN5c3RlbSBkb2VzIG5vdCBuZWVkIHJvb3QgcHJpdmlsZWdlcworICAgICAgICB0byBydW4uCisgICAgICAgIEl0IHVzZXMgYSB1c2VyIHNwYWNlIE5GUyBzZXJ2ZXIgdG8gYXZvaWQgdGhhdC4KKyAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgdG8gc2V0IHVwIGZvciBydW5uaW5nIFFFTVUgdXNpbmcgYW4gTkZTCisgICAgICAgIHNlcnZlciBhbmQgdGhlbiBob3cgeW91IGNhbiBzdGFydCBhbmQgc3RvcCB0aGUgc2VydmVyLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdxZW11LXNldHRpbmctdXAtdG8tdXNlLW5mcyc+CisgICAgICAgIDx0aXRsZT5TZXR0aW5nIFVwIHRvIFVzZSBORlM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSB5b3UgYXJlIGFibGUgdG8gcnVuIFFFTVUgaW4geW91ciBlbnZpcm9ubWVudCwgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+cnVucWVtdS1leHRyYWN0LXNkazwvZmlsZW5hbWU+IHNjcmlwdCwgd2hpY2ggaXMgbG9jYXRlZAorICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4gZGlyZWN0b3J5IGFsb25nIHdpdGgKKyAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gc2NyaXB0LgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5ydW5xZW11LWV4dHJhY3Qtc2RrPC9maWxlbmFtZT4gdGFrZXMgYSByb290CisgICAgICAgICAgICBmaWxlIHN5c3RlbSB0YXJiYWxsIGFuZCBleHRyYWN0cyBpdCBpbnRvIGEgbG9jYXRpb24gdGhhdCB5b3UKKyAgICAgICAgICAgIHNwZWNpZnkuCisgICAgICAgICAgICBUaGVuLCB3aGVuIHlvdSBydW4gPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiwgeW91IGNhbiBzcGVjaWZ5CisgICAgICAgICAgICB0aGUgbG9jYXRpb24gdGhhdCBoYXMgdGhlIGZpbGUgc3lzdGVtIHRvIHBhc3MgaXQgdG8gUUVNVS4KKyAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHRha2VzIGEgZmlsZSBzeXN0ZW0gYW5kIGV4dHJhY3RzIGl0IHRvCisgICAgICAgICAgICBhIGRpcmVjdG9yeSBuYW1lZCA8ZmlsZW5hbWU+dGVzdC1uZnM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcnVucWVtdS1leHRyYWN0LXNkayAuL3RtcC9kZXBsb3kvaW1hZ2VzL3FlbXV4ODYvY29yZS1pbWFnZS1zYXRvLXFlbXV4ODYudGFyLmJ6MiB0ZXN0LW5mcworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBleHRyYWN0ZWQgdGhlIGZpbGUgc3lzdGVtLCB5b3UgY2FuIHJ1bgorICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBub3JtYWxseSB3aXRoIHRoZSBhZGRpdGlvbmFsCisgICAgICAgICAgICBsb2NhdGlvbiBvZiB0aGUgZmlsZSBzeXN0ZW0uCisgICAgICAgICAgICBZb3UgY2FuIHRoZW4gYWxzbyBtYWtlIGNoYW5nZXMgdG8gdGhlIGZpbGVzIHdpdGhpbgorICAgICAgICAgICAgPGZpbGVuYW1lPi4vdGVzdC1uZnM8L2ZpbGVuYW1lPiBhbmQgc2VlIHRob3NlIGNoYW5nZXMgYXBwZWFyIGluIHRoZQorICAgICAgICAgICAgaW1hZ2UgaW4gcmVhbCB0aW1lLgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHVzaW5nIHRoZSA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+IGltYWdlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBydW5xZW11IHFlbXV4ODYgLi90ZXN0LW5mcworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3FlbXUtc3RhcnRpbmctYW5kLXN0b3BwaW5nLW5mcyc+CisgICAgICAgIDx0aXRsZT5TdGFydGluZyBhbmQgU3RvcHBpbmcgTkZTPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gbWFudWFsbHkgc3RhcnQgYW5kIHN0b3AgdGhlIE5GUyBzaGFyZSB1c2luZyB0aGVzZQorICAgICAgICAgICAgY29tbWFuZHM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnN0YXJ0PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgU3RhcnRzIHRoZSBORlMgc2hhcmU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcnVucWVtdS1leHBvcnQtcm9vdGZzIHN0YXJ0IDxyZXBsYWNlYWJsZT5maWxlLXN5c3RlbS1sb2NhdGlvbjwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c3RvcDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFN0b3BzIHRoZSBORlMgc2hhcmU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcnVucWVtdS1leHBvcnQtcm9vdGZzIHN0b3AgPHJlcGxhY2VhYmxlPmZpbGUtc3lzdGVtLWxvY2F0aW9uPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5yZXN0YXJ0PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVzdGFydHMgdGhlIE5GUyBzaGFyZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBydW5xZW11LWV4cG9ydC1yb290ZnMgcmVzdGFydCA8cmVwbGFjZWFibGU+ZmlsZS1zeXN0ZW0tbG9jYXRpb248L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdxZW11LXRpcHMtYW5kLXRyaWNrcyc+CisgICAgPHRpdGxlPlRpcHMgYW5kIFRyaWNrczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IGRlc2NyaWJlcyB0aGluZ3MgeW91IGNhbiBkbyB0byBtYWtlIHJ1bm5pbmcgUUVNVQorICAgICAgICBpbiB0aGUgY29udGV4dCBvZiB0aGUgWW9jdG8gUHJvamVjdCBhIGJldHRlciBleHBlcmllbmNlOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Td2l0Y2hpbmcgQmV0d2VlbiBDb25zb2xlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFdoZW4gYm9vdGluZyBvciBydW5uaW5nIFFFTVUsIHlvdSBjYW4gc3dpdGNoIGJldHdlZW4KKyAgICAgICAgICAgICAgICBzdXBwb3J0ZWQgY29uc29sZXMgYnkgdXNpbmcKKyAgICAgICAgICAgICAgICBDdHJsK0FsdCs8cmVwbGFjZWFibGU+bnVtYmVyPC9yZXBsYWNlYWJsZT4uCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIEN0cmwrQWx0KzMgc3dpdGNoZXMgeW91IHRvIHRoZSBzZXJpYWwgY29uc29sZSBhcworICAgICAgICAgICAgICAgIGxvbmcgYXMgdGhhdCBjb25zb2xlIGlzIGVuYWJsZWQuCisgICAgICAgICAgICAgICAgQmVpbmcgYWJsZSB0byBzd2l0Y2ggY29uc29sZXMgaXMgaGVscGZ1bCwgZm9yIGV4YW1wbGUsIGlmIHRoZQorICAgICAgICAgICAgICAgIG1haW4gUUVNVSBjb25zb2xlIGJyZWFrcyBmb3Igc29tZSByZWFzb24uCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFVzdWFsbHksICIyIiBnZXRzIHlvdSB0byB0aGUgbWFpbiBjb25zb2xlIGFuZCAiMyIgZ2V0cyB5b3UKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHNlcmlhbCBjb25zb2xlLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UmVtb3ZpbmcgdGhlIFNwbGFzaCBTY3JlZW46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHJlbW92ZSB0aGUgc3BsYXNoIHNjcmVlbiB3aGVuIFFFTVUgaXMgYm9vdGluZyBieQorICAgICAgICAgICAgICAgIHVzaW5nIEFsdCtsZWZ0LgorICAgICAgICAgICAgICAgIFJlbW92aW5nIHRoZSBzcGxhc2ggc2NyZWVuIGFsbG93cyB5b3UgdG8gc2VlIHdoYXQgaXMgaGFwcGVuaW5nCisgICAgICAgICAgICAgICAgaW4gdGhlIGJhY2tncm91bmQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRpc2FibGluZyB0aGUgQ3Vyc29yIEdyYWI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBRRU1VIGludGVncmF0aW9uIGNhcHR1cmVzIHRoZSBjdXJzb3Igd2l0aGluIHRoZQorICAgICAgICAgICAgICAgIG1haW4gd2luZG93LgorICAgICAgICAgICAgICAgIEl0IGRvZXMgdGhpcyBzaW5jZSBzdGFuZGFyZCBtb3VzZSBkZXZpY2VzIG9ubHkgcHJvdmlkZSByZWxhdGl2ZQorICAgICAgICAgICAgICAgIGlucHV0IGFuZCBub3QgYWJzb2x1dGUgY29vcmRpbmF0ZXMuCisgICAgICAgICAgICAgICAgWW91IHRoZW4gaGF2ZSB0byBicmVhayBvdXQgb2YgdGhlIGdyYWIgdXNpbmcgdGhlICJDdHJsK0FsdCIga2V5CisgICAgICAgICAgICAgICAgY29tYmluYXRpb24uCisgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhlIFlvY3RvIFByb2plY3QncyBpbnRlZ3JhdGlvbiBvZiBRRU1VIGVuYWJsZXMgdGhlCisgICAgICAgICAgICAgICAgd2Fjb20gVVNCIHRvdWNoIHBhZCBkcml2ZXIgYnkgZGVmYXVsdCB0byBhbGxvdyBpbnB1dCBvZiBhYnNvbHV0ZQorICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzLgorICAgICAgICAgICAgICAgIFRoaXMgZGVmYXVsdCBtZWFucyB0aGF0IHRoZSBtb3VzZSBjYW4gZW50ZXIgYW5kIGxlYXZlIHRoZQorICAgICAgICAgICAgICAgIG1haW4gd2luZG93IHdpdGhvdXQgdGhlIGdyYWIgdGFraW5nIGVmZmVjdCBsZWFkaW5nIHRvIGEgYmV0dGVyCisgICAgICAgICAgICAgICAgdXNlciBleHBlcmllbmNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1zdGFydC54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLXN0YXJ0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjk4OWI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1zdGFydC54bWwKQEAgLTAsMCArMSw0MzMgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdkZXYtbWFudWFsLXN0YXJ0Jz4KKworPHRpdGxlPkdldHRpbmcgU3RhcnRlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0PC90aXRsZT4KKworPHBhcmE+CisgICAgVGhpcyBjaGFwdGVyIGludHJvZHVjZXMgdGhlIFlvY3RvIFByb2plY3QgYW5kIGdpdmVzIHlvdSBhbiBpZGVhIG9mIHdoYXQgeW91IG5lZWQgdG8gZ2V0IHN0YXJ0ZWQuCisgICAgWW91IGNhbiBmaW5kIGVub3VnaCBpbmZvcm1hdGlvbiB0byBzZXQgdXAgeW91ciBkZXZlbG9wbWVudCBob3N0IGFuZCBidWlsZCBvciB1c2UgaW1hZ2VzIGZvcgorICAgIGhhcmR3YXJlIHN1cHBvcnRlZCBieSB0aGUgWW9jdG8gUHJvamVjdCBieSByZWFkaW5nIHRoZQorICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsnPllvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQ8L3VsaW5rPi4KKzwvcGFyYT4KKworPHBhcmE+CisgICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIGNoYXB0ZXIgc3VtbWFyaXplcyB3aGF0IGlzIGluIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0IGFuZCBwcm92aWRlcworICAgIHNvbWUgaGlnaGVyLWxldmVsIGNvbmNlcHRzIHlvdSBtaWdodCB3YW50IHRvIGNvbnNpZGVyLgorPC9wYXJhPgorCis8c2VjdGlvbiBpZD0naW50cm9kdWNpbmctdGhlLXlvY3RvLXByb2plY3QnPgorICAgIDx0aXRsZT5JbnRyb2R1Y2luZyB0aGUgWW9jdG8gUHJvamVjdDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgaXMgYW4gb3Blbi1zb3VyY2UgY29sbGFib3JhdGlvbiBwcm9qZWN0IGZvY3VzZWQgb24gZW1iZWRkZWQgTGludXggZGV2ZWxvcG1lbnQuCisgICAgICAgIFRoZSBwcm9qZWN0IGN1cnJlbnRseSBwcm92aWRlcyBhIGJ1aWxkIHN5c3RlbSB0aGF0IGlzCisgICAgICAgIHJlZmVycmVkIHRvIGFzIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1zeXN0ZW0tdGVybSc+T3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbTwvbGluaz4KKyAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbi4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgdmFyaW91cyBhbmNpbGxhcnkgdG9vbHMgZm9yIHRoZSBlbWJlZGRlZCBkZXZlbG9wZXIKKyAgICAgICAgYW5kIGFsc28gZmVhdHVyZXMgdGhlIFNhdG8gcmVmZXJlbmNlIFVzZXIgSW50ZXJmYWNlLCB3aGljaCBpcyBvcHRpbWl6ZWQgZm9yCisgICAgICAgIHN0eWx1cy1kcml2ZW4sIGxvdy1yZXNvbHV0aW9uIHNjcmVlbnMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLCB3aGljaCB1c2VzCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2JpdGJha2UtdGVybSc+Qml0QmFrZTwvbGluaz4sIHRvIGRldmVsb3AgY29tcGxldGUgTGludXgKKyAgICAgICAgaW1hZ2VzIGFuZCBhc3NvY2lhdGVkIHVzZXItc3BhY2UgYXBwbGljYXRpb25zIGZvciBhcmNoaXRlY3R1cmVzIGJhc2VkCisgICAgICAgIG9uIEFSTSwgTUlQUywgUG93ZXJQQywgeDg2IGFuZCB4ODYtNjQuCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QgY3JlYXRlcyBhIFBva3kgZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgSG93ZXZlciwgeW91IGNhbiBjcmVhdGUgeW91ciBvd24gZGlzdHJpYnV0aW9uIGJ5IHByb3ZpZGluZyBrZXkKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J21ldGFkYXRhJz5NZXRhZGF0YTwvbGluaz4uCisgICAgICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSdjcmVhdGluZy15b3VyLW93bi1kaXN0cmlidXRpb24nPkNyZWF0aW5nIFlvdXIgT3duIERpc3RyaWJ1dGlvbjwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICA8L25vdGU+CisgICAgICAgIFdoaWxlIHRoZSBZb2N0byBQcm9qZWN0IGRvZXMgbm90IHByb3ZpZGUgYSBzdHJpY3QgdGVzdGluZyBmcmFtZXdvcmssCisgICAgICAgIGl0IGRvZXMgcHJvdmlkZSBvciBnZW5lcmF0ZSBmb3IgeW91IGFydGlmYWN0cyB0aGF0IGxldCB5b3UgcGVyZm9ybSB0YXJnZXQtbGV2ZWwgYW5kCisgICAgICAgIGVtdWxhdGVkIHRlc3RpbmcgYW5kIGRlYnVnZ2luZy4KKyAgICAgICAgQWRkaXRpb25hbGx5LCBpZiB5b3UgYXJlIGFuIDx0cmFkZW1hcmsgY2xhc3M9J3RyYWRlJz5FY2xpcHNlPC90cmFkZW1hcms+CisgICAgICAgIElERSB1c2VyLCB5b3UgY2FuIGluc3RhbGwgYW4gRWNsaXBzZSBZb2N0byBQbHVnLWluIHRvIGFsbG93IHlvdSB0bworICAgICAgICBkZXZlbG9wIHdpdGhpbiB0aGF0IGZhbWlsaWFyIGVudmlyb25tZW50LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2dldHRpbmctc2V0dXAnPgorICAgIDx0aXRsZT5HZXR0aW5nIFNldCBVcDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSGVyZSBpcyB3aGF0IHlvdSBuZWVkIHRvIHVzZSB0aGUgWW9jdG8gUHJvamVjdDoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SG9zdCBTeXN0ZW06PC9lbXBoYXNpcz4gIFlvdSBzaG91bGQgaGF2ZSBhIHJlYXNvbmFibHkgY3VycmVudAorICAgICAgICAgICAgICAgIExpbnV4LWJhc2VkIGhvc3Qgc3lzdGVtLgorICAgICAgICAgICAgICAgIFlvdSB3aWxsIGhhdmUgdGhlIGJlc3QgcmVzdWx0cyB3aXRoIGEgcmVjZW50IHJlbGVhc2Ugb2YgRmVkb3JhLAorICAgICAgICAgICAgICAgIG9wZW5TVVNFLCBEZWJpYW4sIFVidW50dSwgb3IgQ2VudE9TIGFzIHRoZXNlIHJlbGVhc2VzIGFyZSBmcmVxdWVudGx5IHRlc3RlZCBhZ2FpbnN0IHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgYW5kIG9mZmljaWFsbHkgc3VwcG9ydGVkLgorICAgICAgICAgICAgICAgIEZvciBhIGxpc3Qgb2YgdGhlIGRpc3RyaWJ1dGlvbnMgdW5kZXIgdmFsaWRhdGlvbiBhbmQgdGhlaXIgc3RhdHVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2RldGFpbGVkLXN1cHBvcnRlZC1kaXN0cm9zJz5TdXBwb3J0ZWQgTGludXggRGlzdHJpYnV0aW9uczwvdWxpbms+IiBzZWN0aW9uCisgICAgICAgICAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCBhbmQgdGhlIHdpa2kgcGFnZSBhdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19XSUtJX1VSTDsvd2lraS9EaXN0cmlidXRpb25fU3VwcG9ydCc+RGlzdHJpYnV0aW9uIFN1cHBvcnQ8L3VsaW5rPi48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IHNob3VsZCBhbHNvIGhhdmUgYWJvdXQgNTAgR2J5dGVzIG9mIGZyZWUgZGlzayBzcGFjZSBmb3IgYnVpbGRpbmcgaW1hZ2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QYWNrYWdlczo8L2VtcGhhc2lzPiAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICByZXF1aXJlcyB0aGF0IGNlcnRhaW4gcGFja2FnZXMgZXhpc3Qgb24geW91ciBkZXZlbG9wbWVudCBzeXN0ZW0gKGUuZy4gUHl0aG9uIDIuNykuCisgICAgICAgICAgICAgICAgU2VlICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3BhY2thZ2VzJz5UaGUgQnVpbGQgSG9zdCBQYWNrYWdlczwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQgYW5kIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZXF1aXJlZC1wYWNrYWdlcy1mb3ItdGhlLWhvc3QtZGV2ZWxvcG1lbnQtc3lzdGVtJz5SZXF1aXJlZCBQYWNrYWdlcyBmb3IgdGhlIEhvc3QgRGV2ZWxvcG1lbnQgU3lzdGVtPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsIGZvciB0aGUgZXhhY3QKKyAgICAgICAgICAgICAgICBwYWNrYWdlIHJlcXVpcmVtZW50cyBhbmQgdGhlIGluc3RhbGxhdGlvbiBjb21tYW5kcyB0byBpbnN0YWxsCisgICAgICAgICAgICAgICAgdGhlbSBmb3IgdGhlIHN1cHBvcnRlZCBkaXN0cmlidXRpb25zLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtIGlkPSdsb2NhbC15cC1yZWxlYXNlJz48cGFyYT48ZW1waGFzaXM+WW9jdG8gUHJvamVjdCBSZWxlYXNlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgWW91IG5lZWQgYSByZWxlYXNlIG9mIHRoZSBZb2N0byBQcm9qZWN0IGxvY2FsbHkgaW5zdGFsbGVkIG9uCisgICAgICAgICAgICAgICAgeW91ciBkZXZlbG9wbWVudCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgVGhlIGRvY3VtZW50YXRpb24gcmVmZXJzIHRvIHRoaXMgc2V0IG9mIGxvY2FsbHkgaW5zdGFsbGVkIGZpbGVzCisgICAgICAgICAgICAgICAgYXMgdGhlIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgIFlvdSBjcmVhdGUgeW91ciBTb3VyY2UgRGlyZWN0b3J5IGJ5IHVzaW5nCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZ2l0Jz5HaXQ8L2xpbms+IHRvIGNsb25lIGEgbG9jYWwgY29weQorICAgICAgICAgICAgICAgIG9mIHRoZSB1cHN0cmVhbSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IHJlcG9zaXRvcnksCisgICAgICAgICAgICAgICAgb3IgYnkgZG93bmxvYWRpbmcgYW5kIHVucGFja2luZyBhIHRhcmJhbGwgb2YgYW4gb2ZmaWNpYWwKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2UuCisgICAgICAgICAgICAgICAgVGhlIHByZWZlcnJlZCBtZXRob2QgaXMgdG8gY3JlYXRlIGEgY2xvbmUgb2YgdGhlIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPldvcmtpbmcgZnJvbSBhIGNvcHkgb2YgdGhlIHVwc3RyZWFtIHJlcG9zaXRvcnkgYWxsb3dzIHlvdQorICAgICAgICAgICAgICAgIHRvIGNvbnRyaWJ1dGUgYmFjayBpbnRvIHRoZSBZb2N0byBQcm9qZWN0IG9yIHNpbXBseSB3b3JrIHdpdGgKKyAgICAgICAgICAgICAgICB0aGUgbGF0ZXN0IHNvZnR3YXJlIG9uIGEgZGV2ZWxvcG1lbnQgYnJhbmNoLgorICAgICAgICAgICAgICAgIEJlY2F1c2UgR2l0IG1haW50YWlucyBhbmQgY3JlYXRlcyBhbiB1cHN0cmVhbSByZXBvc2l0b3J5IHdpdGgKKyAgICAgICAgICAgICAgICBhIGNvbXBsZXRlIGhpc3Rvcnkgb2YgY2hhbmdlcyBhbmQgeW91IGFyZSB3b3JraW5nIHdpdGggYSBsb2NhbAorICAgICAgICAgICAgICAgIGNsb25lIG9mIHRoYXQgcmVwb3NpdG9yeSwgeW91IGhhdmUgYWNjZXNzIHRvIGFsbCB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICBQcm9qZWN0IGRldmVsb3BtZW50IGJyYW5jaGVzIGFuZCB0YWcgbmFtZXMgdXNlZCBpbiB0aGUgdXBzdHJlYW0KKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5LjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8bm90ZT5Zb3UgY2FuIHZpZXcgdGhlIFlvY3RvIFByb2plY3QgU291cmNlIFJlcG9zaXRvcmllcyBhdAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2knPjwvdWxpbms+CisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBmb2xsb3dpbmcgdHJhbnNjcmlwdCBzaG93cyBob3cgdG8gY2xvbmUgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSBpbnRvIHRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAgd29ya2luZyBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgVGhlIGNvbW1hbmQgY3JlYXRlcyB0aGUgbG9jYWwgcmVwb3NpdG9yeSBpbiBhIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIG5hbWVkIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIEdpdCB1c2VkIHdpdGhpbiB0aGUgWW9jdG8gUHJvamVjdCwgc2VlCisgICAgICAgICAgICAgICAgdGhlICI8bGluayBsaW5rZW5kPSdnaXQnPkdpdDwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5CisgICAgIENsb25pbmcgaW50byAncG9reScuLi4KKyAgICAgcmVtb3RlOiBDb3VudGluZyBvYmplY3RzOiAyMjY3OTAsIGRvbmUuCisgICAgIHJlbW90ZTogQ29tcHJlc3Npbmcgb2JqZWN0czogMTAwJSAoNTc0NjUvNTc0NjUpLCBkb25lLgorICAgICByZW1vdGU6IFRvdGFsIDIyNjc5MCAoZGVsdGEgMTY1MjEyKSwgcmV1c2VkIDIyNTg4NyAoZGVsdGEgMTY0MzI3KQorICAgICBSZWNlaXZpbmcgb2JqZWN0czogMTAwJSAoMjI2NzkwLzIyNjc5MCksIDEwMC45OCBNaUIgfCAyNjMgS2lCL3MsIGRvbmUuCisgICAgIFJlc29sdmluZyBkZWx0YXM6IDEwMCUgKDE2NTIxMi8xNjUyMTIpLCBkb25lLgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIGFub3RoZXIgZXhhbXBsZSBvZiBob3cgdG8gc2V0IHVwIHlvdXIgb3duIGxvY2FsIEdpdAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcmllcywgc2VlIHRoaXMKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvVHJhbnNjcmlwdDpfZnJvbV9naXRfY2hlY2tvdXRfdG9fbWV0YS1pbnRlbF9CU1AnPgorICAgICAgICAgICAgICAgIHdpa2kgcGFnZTwvdWxpbms+LCB3aGljaCBkZXNjcmliZXMgaG93IHRvIGNyZWF0ZSBsb2NhbAorICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3JpZXMgZm9yIGJvdGgKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gZ2V0IHRoZSBZb2N0byBQcm9qZWN0IEZpbGVzIGJ5IGRvd25sb2FkaW5nCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCByZWxlYXNlcyBmcm9tIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9IiZZT0NUT19IT01FX1VSTDsiPllvY3RvIFByb2plY3Qgd2Vic2l0ZTwvdWxpbms+LgorICAgICAgICAgICAgICAgIEZyb20gdGhlIHdlYnNpdGUsIHlvdSBqdXN0IGNsaWNrICJEb3dubG9hZHMiIGluIHRoZSBuYXZpZ2F0aW9uCisgICAgICAgICAgICAgICAgcGFuZSB0byB0aGUgbGVmdCB0byBkaXNwbGF5IGFsbCBZb2N0byBQcm9qZWN0IGRvd25sb2Fkcy4KKyAgICAgICAgICAgICAgICBDdXJyZW50IGFuZCBhcmNoaXZlZCByZWxlYXNlcyBhcmUgYXZhaWxhYmxlIGZvciBkb3dubG9hZC4KKyAgICAgICAgICAgICAgICBOaWdodGx5IGFuZCBkZXZlbG9wbWVudGFsIGJ1aWxkcyBhcmUgYWxzbyBtYWludGFpbmVkIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iJllPQ1RPX0FCX05JR0hUTFlfVVJMOyI+PC91bGluaz4uCisgICAgICAgICAgICAgICAgT25lIGZpbmFsIHNpdGUgeW91IGNhbiB2aXNpdCBmb3IgaW5mb3JtYXRpb24gb24gWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIHJlbGVhc2VzIGlzIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19XSUtJX1VSTDsvd2lraS9SZWxlYXNlcyc+UmVsZWFzZXM8L3VsaW5rPgorICAgICAgICAgICAgICAgIHdpa2kuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0gaWQ9J2xvY2FsLWtlcm5lbC1maWxlcyc+PHBhcmE+PGVtcGhhc2lzPllvY3RvIFByb2plY3QgS2VybmVsOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBnb2luZyB0byBiZSBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBhIHN1cHBvcnRlZCBZb2N0byBQcm9qZWN0IGtlcm5lbCwgeW91CisgICAgICAgICAgICAgICAgbmVlZCB0byBlc3RhYmxpc2ggbG9jYWwgY29waWVzIG9mIHRoZSBzb3VyY2UuCisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIEdpdCByZXBvc2l0b3JpZXMgb2Ygc3VwcG9ydGVkIFlvY3RvIFByb2plY3Qga2VybmVscyBvcmdhbml6ZWQgdW5kZXIKKyAgICAgICAgICAgICAgICAiWW9jdG8gTGludXggS2VybmVsIiBpbiB0aGUgWW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpJz48L3VsaW5rPi48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhpcyBzZXR1cCBjYW4gaW52b2x2ZSBjcmVhdGluZyBhIGJhcmUgY2xvbmUgb2YgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIGFuZCB0aGVuCisgICAgICAgICAgICAgICAgY29weWluZyB0aGF0IGNsb25lZCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gY3JlYXRlIHRoZSBiYXJlIGNsb25lIGFuZCB0aGUgY29weSBvZiB0aGUgYmFyZSBjbG9uZSBhbnl3aGVyZSB5b3UgbGlrZS4KKyAgICAgICAgICAgICAgICBGb3Igc2ltcGxpY2l0eSwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgY3JlYXRlIHRoZXNlIHN0cnVjdHVyZXMgb3V0c2lkZSBvZiB0aGUKKyAgICAgICAgICAgICAgICBTb3VyY2UgRGlyZWN0b3J5LCB3aGljaCBpcyB1c3VhbGx5IG5hbWVkIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4uPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkFzIGFuIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgdHJhbnNjcmlwdCBzaG93cyBob3cgdG8gY3JlYXRlIHRoZSBiYXJlIGNsb25lCisgICAgICAgICAgICAgICAgb2YgdGhlIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE5PC9maWxlbmFtZT4ga2VybmVsIGFuZCB0aGVuIGNyZWF0ZSBhIGNvcHkgb2YKKyAgICAgICAgICAgICAgICB0aGF0IGNsb25lLgorICAgICAgICAgICAgICAgIDxub3RlPldoZW4geW91IGhhdmUgYSBsb2NhbCBZb2N0byBQcm9qZWN0IGtlcm5lbCBHaXQgcmVwb3NpdG9yeSwgeW91IGNhbgorICAgICAgICAgICAgICAgIHJlZmVyZW5jZSB0aGF0IHJlcG9zaXRvcnkgcmF0aGVyIHRoYW4gdGhlIHVwc3RyZWFtIEdpdCByZXBvc2l0b3J5IGFzCisgICAgICAgICAgICAgICAgcGFydCBvZiB0aGUgPGZpbGVuYW1lPmNsb25lPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICBEb2luZyBzbyBjYW4gc3BlZWQgdXAgdGhlIHByb2Nlc3MuPC9ub3RlPjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5JbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIHRoZSBiYXJlIGNsb25lIGlzIG5hbWVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTkuZ2l0PC9maWxlbmFtZT4sIHdoaWxlIHRoZQorICAgICAgICAgICAgICAgIGNvcHkgaXMgbmFtZWQgPGZpbGVuYW1lPm15LWxpbnV4LXlvY3RvLTMuMTktd29yazwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgY2xvbmUgLS1iYXJlIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTMuMTkgbGludXgteW9jdG8tMy4xOS5naXQKKyAgICAgQ2xvbmluZyBpbnRvIGJhcmUgcmVwb3NpdG9yeSAnbGludXgteW9jdG8tMy4xOS5naXQnLi4uCisgICAgIHJlbW90ZTogQ291bnRpbmcgb2JqZWN0czogMzk4MzI1NiwgZG9uZS4KKyAgICAgcmVtb3RlOiBDb21wcmVzc2luZyBvYmplY3RzOiAxMDAlICg2MDUwMDYvNjA1MDA2KSwgZG9uZS4KKyAgICAgcmVtb3RlOiBUb3RhbCAzOTgzMjU2IChkZWx0YSAzMzUyODMyKSwgcmV1c2VkIDM5NzQ1MDMgKGRlbHRhIDMzNDQwNzkpCisgICAgIFJlY2VpdmluZyBvYmplY3RzOiAxMDAlICgzOTgzMjU2LzM5ODMyNTYpLCA4NDMuNjYgTWlCIHwgMS4wNyBNaUIvcywgZG9uZS4KKyAgICAgUmVzb2x2aW5nIGRlbHRhczogMTAwJSAoMzM1MjgzMi8zMzUyODMyKSwgZG9uZS4KKyAgICAgQ2hlY2tpbmcgY29ubmVjdGl2aXR5Li4uIGRvbmUuCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5Ob3cgY3JlYXRlIGEgY2xvbmUgb2YgdGhlIGJhcmUgY2xvbmUganVzdCBjcmVhdGVkOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgY2xvbmUgbGludXgteW9jdG8tMy4xOS5naXQgbXktbGludXgteW9jdG8tMy4xOS13b3JrCisgICAgIENsb25pbmcgaW50byAnbXktbGludXgteW9jdG8tMy4xOS13b3JrJy4uLgorICAgICBkb25lLgorICAgICBDaGVja2luZyBvdXQgZmlsZXM6IDEwMCUgKDQ4NDQwLzQ4NDQwKSwgZG9uZS4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0gaWQ9J21ldGEteW9jdG8ta2VybmVsLWV4dHJhcy1yZXBvJz48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5tZXRhLXlvY3RvLWtlcm5lbC1leHRyYXM8L2ZpbGVuYW1lPiBHaXQgUmVwb3NpdG9yeTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bWV0YS15b2N0by1rZXJuZWwtZXh0cmFzPC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkgY29udGFpbnMgTWV0YWRhdGEgbmVlZGVkCisgICAgICAgICAgICAgICAgb25seSBpZiB5b3UgYXJlIG1vZGlmeWluZyBhbmQgYnVpbGRpbmcgdGhlIGtlcm5lbCBpbWFnZS4KKyAgICAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCBpdCBjb250YWlucyB0aGUga2VybmVsIEJpdEJha2UgYXBwZW5kICg8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgZmlsZXMgdGhhdCB5b3UKKyAgICAgICAgICAgICAgICBlZGl0IHRvIHBvaW50IHRvIHlvdXIgbG9jYWxseSBtb2RpZmllZCBrZXJuZWwgc291cmNlIGZpbGVzIGFuZCB0byBidWlsZCB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgaW1hZ2UuCisgICAgICAgICAgICAgICAgUG9pbnRpbmcgdG8gdGhlc2UgbG9jYWwgZmlsZXMgaXMgbXVjaCBtb3JlIGVmZmljaWVudCB0aGFuIHJlcXVpcmluZyBhIGRvd25sb2FkIG9mIHRoZQorICAgICAgICAgICAgICAgIGtlcm5lbCdzIHNvdXJjZSBmaWxlcyBmcm9tIHVwc3RyZWFtIGVhY2ggdGltZSB5b3UgbWFrZSBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjYW4gZmluZCB0aGUgPGZpbGVuYW1lPm1ldGEteW9jdG8ta2VybmVsLWV4dHJhczwvZmlsZW5hbWU+IEdpdCBSZXBvc2l0b3J5IGluIHRoZQorICAgICAgICAgICAgICAgICJZb2N0byBNZXRhZGF0YSBMYXllcnMiIGFyZWEgb2YgdGhlIFlvY3RvIFByb2plY3QgU291cmNlIFJlcG9zaXRvcmllcyBhdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgSXQgaXMgZ29vZCBwcmFjdGljZSB0byBjcmVhdGUgdGhpcyBHaXQgcmVwb3NpdG9yeSBpbnNpZGUgdGhlIFNvdXJjZSBEaXJlY3RvcnkuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHRoYXQgY3JlYXRlcyB0aGUgPGZpbGVuYW1lPm1ldGEteW9jdG8ta2VybmVsLWV4dHJhczwvZmlsZW5hbWU+IEdpdAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgaW5zaWRlIHRoZSBTb3VyY2UgRGlyZWN0b3J5LCB3aGljaCBpcyBuYW1lZCA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgaW4gdGhpcyBjYXNlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L3Bva3kKKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbWV0YS15b2N0by1rZXJuZWwtZXh0cmFzIG1ldGEteW9jdG8ta2VybmVsLWV4dHJhcworICAgICBDbG9uaW5nIGludG8gJ21ldGEteW9jdG8ta2VybmVsLWV4dHJhcycuLi4KKyAgICAgcmVtb3RlOiBDb3VudGluZyBvYmplY3RzOiA3MjcsIGRvbmUuCisgICAgIHJlbW90ZTogQ29tcHJlc3Npbmcgb2JqZWN0czogMTAwJSAoNDUyLzQ1MiksIGRvbmUuCisgICAgIHJlbW90ZTogVG90YWwgNzI3IChkZWx0YSAyNjApLCByZXVzZWQgNzE5IChkZWx0YSAyNTIpCisgICAgIFJlY2VpdmluZyBvYmplY3RzOiAxMDAlICg3MjcvNzI3KSwgNTM2LjM2IEtpQiB8IDI0MCBLaUIvcywgZG9uZS4KKyAgICAgUmVzb2x2aW5nIGRlbHRhczogMTAwJSAoMjYwLzI2MCksIGRvbmUuCisgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYSBpZD0nc3VwcG9ydGVkLWJvYXJkLXN1cHBvcnQtcGFja2FnZXMtKGJzcHMpJz48ZW1waGFzaXM+U3VwcG9ydGVkIEJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUHMpOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3Qgc3VwcG9ydHMgbWFueSBCU1BzLCB3aGljaCBhcmUgbWFpbnRhaW5lZCBpbgorICAgICAgICAgICAgICAgIHRoZWlyIG93biBsYXllcnMgb3IgaW4gbGF5ZXJzIGRlc2lnbmVkIHRvIGNvbnRhaW4gc2V2ZXJhbAorICAgICAgICAgICAgICAgIEJTUHMuCisgICAgICAgICAgICAgICAgVG8gZ2V0IGFuIGlkZWEgb2YgbWFjaGluZSBzdXBwb3J0IHRocm91Z2ggQlNQIGxheWVycywgeW91IGNhbgorICAgICAgICAgICAgICAgIGxvb2sgYXQgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1JFTEVBU0VfRExfVVJMOy9tYWNoaW5lcyc+aW5kZXggb2YgbWFjaGluZXM8L3VsaW5rPgorICAgICAgICAgICAgICAgIGZvciB0aGUgcmVsZWFzZS48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgWW9jdG8gUHJvamVjdCB1c2VzIHRoZSBmb2xsb3dpbmcgQlNQIGxheWVyIG5hbWluZworICAgICAgICAgICAgICAgIHNjaGVtZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgd2hlcmUgPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4gaXMgdGhlIHJlY29nbml6ZWQKKyAgICAgICAgICAgICAgICBCU1AgbmFtZS4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS1jcm93bmJheQorICAgICBtZXRhLWVtZW5sb3cKKyAgICAgbWV0YS1yYXNwYmVycnlwaQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2JzcC1sYXllcnMnPkJTUCBMYXllcnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKQorICAgICAgICAgICAgICAgIERldmVsb3BlcidzIEd1aWRlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEJTUCBMYXllcnMuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+QSB1c2VmdWwgR2l0IHJlcG9zaXRvcnkgcmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICBQcm9qZWN0IGlzIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4sIHdoaWNoIGlzIGEKKyAgICAgICAgICAgICAgICBwYXJlbnQgbGF5ZXIgdGhhdCBjb250YWlucyBtYW55IHN1cHBvcnRlZAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2JzcC1sYXllcnMnPkJTUCBMYXllcnM8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGxvY2F0ZSB0aGUgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBHaXQKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5IGluIHRoZSAiWW9jdG8gTWV0YWRhdGEgTGF5ZXJzIiBhcmVhIG9mIHRoZSBZb2N0bworICAgICAgICAgICAgICAgIFByb2plY3QgU291cmNlIFJlcG9zaXRvcmllcyBhdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+PC91bGluaz4uPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+VXNpbmcKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdnaXQnPkdpdDwvbGluaz4gdG8gY3JlYXRlIGEgbG9jYWwgY2xvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgdXBzdHJlYW0gcmVwb3NpdG9yeSBjYW4gYmUgaGVscGZ1bCBpZiB5b3UgYXJlIHdvcmtpbmcgd2l0aAorICAgICAgICAgICAgICAgIEJTUHMuCisgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCB5b3Ugc2V0IHVwIHRoZSA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnkgaW5zaWRlIHRoZSBTb3VyY2UgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHRyYW5zY3JpcHQgc2hvd3MgdGhlIHN0ZXBzIHRvIGNsb25lCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byB3b3JrIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGJyYW5jaCB0aGF0IG1hdGNoZXMgeW91cgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+KSBicmFuY2guCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBjaGVja2VkIG91dCB0aGUgIm1hc3RlciIgYnJhbmNoCisgICAgICAgICAgICAgICAgICAgIG9mIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gYW5kIHlvdSBhcmUgZ29pbmcgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4sIGJlIHN1cmUgdG8gY2hlY2tvdXQgdGhlCisgICAgICAgICAgICAgICAgICAgICJtYXN0ZXIiIGJyYW5jaCBvZiA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2Qgfi9wb2t5CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL21ldGEtaW50ZWwuZ2l0CisgICAgIENsb25pbmcgaW50byAnbWV0YS1pbnRlbCcuLi4KKyAgICAgcmVtb3RlOiBDb3VudGluZyBvYmplY3RzOiA4ODQ0LCBkb25lLgorICAgICByZW1vdGU6IENvbXByZXNzaW5nIG9iamVjdHM6IDEwMCUgKDI4NjQvMjg2NCksIGRvbmUuCisgICAgIHJlbW90ZTogVG90YWwgODg0NCAoZGVsdGEgNDkzMSksIHJldXNlZCA4NzgwIChkZWx0YSA0ODY3KQorICAgICBSZWNlaXZpbmcgb2JqZWN0czogMTAwJSAoODg0NC84ODQ0KSwgMi40OCBNaUIgfCAyNjQgS2lCL3MsIGRvbmUuCisgICAgIFJlc29sdmluZyBkZWx0YXM6IDEwMCUgKDQ5MzEvNDkzMSksIGRvbmUuCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBzYW1lCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1dJS0lfVVJMOy93aWtpL1RyYW5zY3JpcHQ6X2Zyb21fZ2l0X2NoZWNrb3V0X3RvX21ldGEtaW50ZWxfQlNQJz53aWtpIHBhZ2U8L3VsaW5rPgorICAgICAgICAgICAgICAgIHJlZmVyZW5jZWQgZWFybGllciBjb3ZlcnMgaG93IHRvIHNldCB1cCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+IEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FY2xpcHNlIFlvY3RvIFBsdWctaW46PC9lbXBoYXNpcz4gIElmIHlvdSBhcmUgZGV2ZWxvcGluZworICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9ucyB1c2luZyB0aGUgRWNsaXBzZSBJbnRlZ3JhdGVkIERldmVsb3BtZW50IEVudmlyb25tZW50IChJREUpLAorICAgICAgICAgICAgICAgIHlvdSB3aWxsIG5lZWQgdGhpcyBwbHVnLWluLgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2V0dGluZy11cC10aGUtZWNsaXBzZS1pZGUnPlNldHRpbmcgdXAgdGhlIEVjbGlwc2UgSURFPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdidWlsZGluZy1pbWFnZXMnPgorICAgIDx0aXRsZT5CdWlsZGluZyBJbWFnZXM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBidWlsZCBwcm9jZXNzIGNyZWF0ZXMgYW4gZW50aXJlIExpbnV4IGRpc3RyaWJ1dGlvbiwgaW5jbHVkaW5nIHRoZSB0b29sY2hhaW4sIGZyb20gc291cmNlLgorICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIHRvcGljLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3FzLWJ1aWxkaW5nLWltYWdlcyc+QnVpbGRpbmcgSW1hZ2VzPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBidWlsZCBwcm9jZXNzIGlzIGFzIGZvbGxvd3M6CisgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYWtlIHN1cmUgeW91IGhhdmUgc2V0IHVwIHRoZSBTb3VyY2UgRGlyZWN0b3J5IGRlc2NyaWJlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICBwcmV2aW91cyBzZWN0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluaXRpYWxpemUgdGhlIGJ1aWxkIGVudmlyb25tZW50IGJ5IHNvdXJjaW5nIGEgYnVpbGQKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBzY3JpcHQgKGkuZS4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdWxpbms+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5PcHRpb25hbGx5IGVuc3VyZSB0aGUgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZSwKKyAgICAgICAgICAgICAgICB3aGljaCBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4sCisgICAgICAgICAgICAgICAgaXMgc2V0IHVwIGhvdyB5b3Ugd2FudCBpdC4KKyAgICAgICAgICAgICAgICBUaGlzIGZpbGUgZGVmaW5lcyBtYW55IGFzcGVjdHMgb2YgdGhlIGJ1aWxkIGVudmlyb25tZW50IGluY2x1ZGluZworICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQgbWFjaGluZSBhcmNoaXRlY3R1cmUgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPk1BQ0hJTkU8L3VsaW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlLAorICAgICAgICAgICAgICAgIHRoZSBwYWNrYWdpbmcgZm9ybWF0IHVzZWQgZHVyaW5nIHRoZSBidWlsZAorICAgICAgICAgICAgICAgICg8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9DTEFTU0VTJz48ZmlsZW5hbWU+UEFDS0FHRV9DTEFTU0VTPC9maWxlbmFtZT48L3VsaW5rPiksCisgICAgICAgICAgICAgICAgYW5kIGEgY2VudHJhbGl6ZWQgdGFyYmFsbCBkb3dubG9hZCBkaXJlY3RvcnkgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURMX0RJUic+RExfRElSPC91bGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBCdWlsZCB0aGUgaW1hZ2UgdXNpbmcgdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCBpbmZvcm1hdGlvbiBvbiBCaXRCYWtlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyc+Qml0QmFrZSBVc2VyIE1hbnVhbDwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJ1biB0aGUgaW1hZ2UgZWl0aGVyIG9uIHRoZSBhY3R1YWwgaGFyZHdhcmUgb3IgdXNpbmcgdGhlIFFFTVUKKyAgICAgICAgICAgICAgICBlbXVsYXRvci48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSd1c2luZy1wcmUtYnVpbHQtYmluYXJpZXMtYW5kLXFlbXUnPgorICAgIDx0aXRsZT5Vc2luZyBQcmUtQnVpbHQgQmluYXJpZXMgYW5kIFFFTVU8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEFub3RoZXIgb3B0aW9uIHlvdSBoYXZlIHRvIGdldCBzdGFydGVkIGlzIHRvIHVzZSBwcmUtYnVpbHQgYmluYXJpZXMuCisgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIG1hbnkgdHlwZXMgb2YgYmluYXJpZXMgd2l0aCBlYWNoIHJlbGVhc2UuCisgICAgICAgIFNlZSB0aGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1pbWFnZXMnPkltYWdlczwvdWxpbms+IgorICAgICAgICBjaGFwdGVyIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwKKyAgICAgICAgZm9yIGRlc2NyaXB0aW9ucyBvZiB0aGUgdHlwZXMgb2YgYmluYXJpZXMgdGhhdCBzaGlwIHdpdGggYSBZb2N0byBQcm9qZWN0CisgICAgICAgIHJlbGVhc2UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFVzaW5nIGEgcHJlLWJ1aWx0IGJpbmFyeSBpcyBpZGVhbCBmb3IgZGV2ZWxvcGluZyBzb2Z0d2FyZSBhcHBsaWNhdGlvbnMgdG8gcnVuIG9uIHlvdXIKKyAgICAgICAgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICBUbyBkbyB0aGlzLCB5b3UgbmVlZCB0byBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgYXBwcm9wcmlhdGUgY3Jvc3MtdG9vbGNoYWluIHRhcmJhbGwgZm9yCisgICAgICAgIHRoZSBhcmNoaXRlY3R1cmUgb24gd2hpY2ggeW91IGFyZSBkZXZlbG9waW5nLgorICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIGFuIFNESyB0eXBlIGltYWdlLCB0aGUgaW1hZ2Ugc2hpcHMgd2l0aCB0aGUgY29tcGxldGUgdG9vbGNoYWluIG5hdGl2ZSB0bworICAgICAgICB0aGUgYXJjaGl0ZWN0dXJlLgorICAgICAgICBJZiB5b3UgYXJlIG5vdCB1c2luZyBhbiBTREsgdHlwZSBpbWFnZSwgeW91IG5lZWQgdG8gc2VwYXJhdGVseSBkb3dubG9hZCBhbmQKKyAgICAgICAgaW5zdGFsbCB0aGUgc3RhbmQtYWxvbmUgWW9jdG8gUHJvamVjdCBjcm9zcy10b29sY2hhaW4gdGFyYmFsbC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgUmVnYXJkbGVzcyBvZiB0aGUgdHlwZSBvZiBpbWFnZSB5b3UgYXJlIHVzaW5nLCB5b3UgbmVlZCB0byBkb3dubG9hZCB0aGUgcHJlLWJ1aWx0IGtlcm5lbAorICAgICAgICB0aGF0IHlvdSB3aWxsIGJvb3QgaW4gdGhlIFFFTVUgZW11bGF0b3IgYW5kIHRoZW4gZG93bmxvYWQgYW5kIGV4dHJhY3QgdGhlIHRhcmdldCByb290CisgICAgICAgIGZpbGVzeXN0ZW0gZm9yIHlvdXIgdGFyZ2V0IG1hY2hpbmXigJlzIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgWW91IGNhbiBnZXQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGJpbmFyaWVzIGFuZCBmaWxlIHN5c3RlbXMgZnJvbQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fTUFDSElORVNfRExfVVJMOyc+bWFjaGluZXM8L3VsaW5rPi4KKyAgICAgICAgWW91IGNhbiBnZXQgaW5zdGFsbGF0aW9uIHNjcmlwdHMgZm9yIHN0YW5kLWFsb25lIHRvb2xjaGFpbnMgZnJvbQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fVE9PTENIQUlOX0RMX1VSTDsnPnRvb2xjaGFpbnM8L3VsaW5rPi4KKyAgICAgICAgT25jZSB5b3UgaGF2ZSBhbGwgeW91ciBmaWxlcywgeW91IHNldCB1cCB0aGUgZW52aXJvbm1lbnQgdG8gZW11bGF0ZSB0aGUgaGFyZHdhcmUKKyAgICAgICAgYnkgc291cmNpbmcgYW4gZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0LgorICAgICAgICBGaW5hbGx5LCB5b3Ugc3RhcnQgdGhlIFFFTVUgZW11bGF0b3IuCisgICAgICAgIFlvdSBjYW4gZmluZCBkZXRhaWxzIG9uIGFsbCB0aGVzZSBzdGVwcyBpbiB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjdXNpbmctcHJlLWJ1aWx0Jz5FeGFtcGxlIFVzaW5nIFByZS1CdWlsdCBCaW5hcmllcyBhbmQgUUVNVTwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgdXNpbmcgUUVNVSB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IGluIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0nZGV2LW1hbnVhbC1xZW11Jz5Vc2luZyB0aGUgUXVpY2sgRU1VbGF0b3IgKFFFTVUpPC9saW5rPiIKKyAgICAgICAgc2VjdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVXNpbmcgUUVNVSB0byBlbXVsYXRlIHlvdXIgaGFyZHdhcmUgY2FuIHJlc3VsdCBpbiBzcGVlZCBpc3N1ZXMKKyAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgYW5kIGhvc3QgYXJjaGl0ZWN0dXJlIG1peC4KKyAgICAgICAgRm9yIGV4YW1wbGUsIHVzaW5nIHRoZSA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+IGltYWdlIGluIHRoZSBlbXVsYXRvcgorICAgICAgICBvbiBhbiBJbnRlbC1iYXNlZCAzMi1iaXQgKHg4NikgaG9zdCBtYWNoaW5lIGlzIGZhc3QgYmVjYXVzZSB0aGUgdGFyZ2V0IGFuZAorICAgICAgICBob3N0IGFyY2hpdGVjdHVyZXMgbWF0Y2guCisgICAgICAgIE9uIHRoZSBvdGhlciBoYW5kLCB1c2luZyB0aGUgPGZpbGVuYW1lPnFlbXVhcm08L2ZpbGVuYW1lPiBpbWFnZSBvbiB0aGUgc2FtZSBJbnRlbC1iYXNlZAorICAgICAgICBob3N0IGNhbiBiZSBzbG93ZXIuCisgICAgICAgIEJ1dCwgeW91IHN0aWxsIGFjaGlldmUgZmFpdGhmdWwgZW11bGF0aW9uIG9mIEFSTS1zcGVjaWZpYyBpc3N1ZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRvIHNwZWVkIHRoaW5ncyB1cCwgdGhlIFFFTVUgaW1hZ2VzIHN1cHBvcnQgdXNpbmcgPGZpbGVuYW1lPmRpc3RjYzwvZmlsZW5hbWU+CisgICAgICAgIHRvIGNhbGwgYSBjcm9zcy1jb21waWxlciBvdXRzaWRlIHRoZSBlbXVsYXRlZCBzeXN0ZW0uCisgICAgICAgIElmIHlvdSB1c2VkIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gdG8gc3RhcnQgUUVNVSwgYW5kIHRoZQorICAgICAgICA8ZmlsZW5hbWU+ZGlzdGNjZDwvZmlsZW5hbWU+IGFwcGxpY2F0aW9uIGlzIHByZXNlbnQgb24gdGhlIGhvc3Qgc3lzdGVtLCBhbnkKKyAgICAgICAgQml0QmFrZSBjcm9zcy1jb21waWxpbmcgdG9vbGNoYWluIGF2YWlsYWJsZSBmcm9tIHRoZSBidWlsZCBzeXN0ZW0gaXMgYXV0b21hdGljYWxseQorICAgICAgICB1c2VkIGZyb20gd2l0aGluIFFFTVUgc2ltcGx5IGJ5IGNhbGxpbmcgPGZpbGVuYW1lPmRpc3RjYzwvZmlsZW5hbWU+LgorICAgICAgICBZb3UgY2FuIGFjY29tcGxpc2ggdGhpcyBieSBkZWZpbmluZyB0aGUgY3Jvc3MtY29tcGlsZXIgdmFyaWFibGUKKyAgICAgICAgKGUuZy4gPGZpbGVuYW1lPmV4cG9ydCBDQz0iZGlzdGNjIjwvZmlsZW5hbWU+KS4KKyAgICAgICAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IGFyZSB1c2luZyBhIHN1aXRhYmxlIFNESyBpbWFnZSBvciB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgc3RhbmQtYWxvbmUgdG9vbGNoYWluIGlzIHByZXNlbnQsCisgICAgICAgIHRoZSB0b29sY2hhaW4gaXMgYWxzbyBhdXRvbWF0aWNhbGx5IHVzZWQuCisgICAgPC9wYXJhPgorCisgICAgPG5vdGU+CisgICAgICAgIFNldmVyYWwgbWVjaGFuaXNtcyBleGlzdCB0aGF0IGxldCB5b3UgY29ubmVjdCB0byB0aGUgc3lzdGVtIHJ1bm5pbmcgb24gdGhlCisgICAgICAgIFFFTVUgZW11bGF0b3I6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UUVNVSBwcm92aWRlcyBhIGZyYW1lYnVmZmVyIGludGVyZmFjZSB0aGF0IG1ha2VzIHN0YW5kYXJkCisgICAgICAgICAgICAgICAgY29uc29sZXMgYXZhaWxhYmxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkdlbmVyYWxseSwgaGVhZGxlc3MgZW1iZWRkZWQgZGV2aWNlcyBoYXZlIGEgc2VyaWFsIHBvcnQuCisgICAgICAgICAgICAgICAgSWYgc28sIHlvdSBjYW4gY29uZmlndXJlIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9mIHRoZSBydW5uaW5nIGltYWdlCisgICAgICAgICAgICAgICAgdG8gdXNlIHRoYXQgcG9ydCB0byBydW4gYSBjb25zb2xlLgorICAgICAgICAgICAgICAgIFRoZSBjb25uZWN0aW9uIHVzZXMgc3RhbmRhcmQgSVAgbmV0d29ya2luZy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBTU0ggc2VydmVycyBleGlzdCBpbiBzb21lIFFFTVUgaW1hZ2VzLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4gUUVNVSBpbWFnZSBoYXMgYQorICAgICAgICAgICAgICAgIERyb3BiZWFyIHNlY3VyZSBzaGVsbCAoU1NIKSBzZXJ2ZXIgdGhhdCBydW5zIHdpdGggdGhlIHJvb3QKKyAgICAgICAgICAgICAgICBwYXNzd29yZCBkaXNhYmxlZC4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbHNiPC9maWxlbmFtZT4gUUVNVSBpbWFnZXMKKyAgICAgICAgICAgICAgICBoYXZlIE9wZW5TU0ggaW5zdGVhZCBvZiBEcm9wYmVhci4KKyAgICAgICAgICAgICAgICBJbmNsdWRpbmcgdGhlc2UgU1NIIHNlcnZlcnMgYWxsb3cgeW91IHRvIHVzZSBzdGFuZGFyZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zc2g8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPnNjcDwvZmlsZW5hbWU+IGNvbW1hbmRzLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gUUVNVSBpbWFnZSwKKyAgICAgICAgICAgICAgICBob3dldmVyLCBjb250YWlucyBubyBTU0ggc2VydmVyLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBjYW4gdXNlIGEgcHJvdmlkZWQsIHVzZXItc3BhY2UgTkZTIHNlcnZlciB0byBib290IHRoZSBRRU1VIHNlc3Npb24KKyAgICAgICAgICAgICAgICB1c2luZyBhIGxvY2FsIGNvcHkgb2YgdGhlIHJvb3QgZmlsZXN5c3RlbSBvbiB0aGUgaG9zdC4KKyAgICAgICAgICAgICAgICBJbiBvcmRlciB0byBtYWtlIHRoaXMgY29ubmVjdGlvbiwgeW91IG11c3QgZXh0cmFjdCBhIHJvb3QgZmlsZXN5c3RlbSB0YXJiYWxsIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11LWV4dHJhY3Qtc2RrPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICBBZnRlciBydW5uaW5nIHRoZSBjb21tYW5kLCB5b3UgbXVzdCB0aGVuIHBvaW50IHRoZSA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgc2NyaXB0IHRvIHRoZSBleHRyYWN0ZWQgZGlyZWN0b3J5IGluc3RlYWQgb2YgYSByb290IGZpbGVzeXN0ZW0gaW1hZ2UgZmlsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9ub3RlPgorPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOGQzYTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLnhtbApAQCAtMCwwICsxLDEyNCBAQAorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGJvb2sgaWQ9J2Rldi1tYW51YWwnIGxhbmc9J2VuJworICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiCisgICAgICB4bWxucz0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siCisgICAgICA+CisgICAgPGJvb2tpbmZvPgorCisgICAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgIDxpbWFnZW9iamVjdD4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9J2ZpZ3VyZXMvZGV2LXRpdGxlLnBuZycKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSdTVkcnCisgICAgICAgICAgICAgICAgICAgIGFsaWduPSdsZWZ0JyBzY2FsZWZpdD0nMScgd2lkdGg9JzEwMCUnLz4KKyAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+CisgICAgICAgIDwvbWVkaWFvYmplY3Q+CisKKyAgICAgICAgPHRpdGxlPgorICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwKKyAgICAgICAgPC90aXRsZT4KKworICAgICAgICA8YXV0aG9yZ3JvdXA+CisgICAgICAgICAgICA8YXV0aG9yPgorICAgICAgICAgICAgICAgIDxmaXJzdG5hbWU+U2NvdHQ8L2ZpcnN0bmFtZT4gPHN1cm5hbWU+UmlmZW5iYXJrPC9zdXJuYW1lPgorICAgICAgICAgICAgICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPG9yZ25hbWU+SW50ZWwgQ29ycG9yYXRpb248L29yZ25hbWU+CisgICAgICAgICAgICAgICAgPC9hZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICA8ZW1haWw+c2NvdHQubS5yaWZlbmJhcmtAaW50ZWwuY29tPC9lbWFpbD4KKyAgICAgICAgICAgIDwvYXV0aG9yPgorICAgICAgICA8L2F1dGhvcmdyb3VwPgorCisgICAgICAgIDxyZXZoaXN0b3J5PgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4xPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+NiBPY3RvYmVyIDIwMTE8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5UaGUgaW5pdGlhbCBkb2N1bWVudCByZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuMSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuMjwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTI8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuMiBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuMzwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxMjwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS4zIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS40PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxMzwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS40IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS41PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDEzPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjUgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjUuMTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkphbnVhcnkgMjAxNDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS41LjEgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjY8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE0PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjYgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjc8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTQ8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNyBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuODwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTU8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuOCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuOTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxNTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS45IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICA8L3Jldmhpc3Rvcnk+CisKKyAgICA8Y29weXJpZ2h0PgorICAgICA8eWVhcj4mQ09QWVJJR0hUX1lFQVI7PC95ZWFyPgorICAgICAgPGhvbGRlcj5MaW51eCBGb3VuZGF0aW9uPC9ob2xkZXI+CisgICAgPC9jb3B5cmlnaHQ+CisKKyAgICA8bGVnYWxub3RpY2U+CisgICAgICA8cGFyYT4KKyAgICAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQgdW5kZXIKKyAgICAgICAgICB0aGUgdGVybXMgb2YgdGhlIDx1bGluayB0eXBlPSJodHRwIiB1cmw9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzIuMC91ay8iPgorICAgICAgICAgIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmUgQWxpa2UgMi4wIFVLOiBFbmdsYW5kICZhbXA7IFdhbGVzPC91bGluaz4gYXMgcHVibGlzaGVkIGJ5CisgICAgICAgICAgQ3JlYXRpdmUgQ29tbW9ucy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPG5vdGU+CisgICAgICAgICAgRm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1hbnVhbCBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSwgc2VlIHRoZQorICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7Jz5Zb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbDwvdWxpbms+CisgICAgICAgICAgZnJvbSB0aGUgWW9jdG8gUHJvamVjdCB3ZWJzaXRlLgorICAgICAgPC9ub3RlPgorICAgIDwvbGVnYWxub3RpY2U+CisKKyAgICA8L2Jvb2tpbmZvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iZGV2LW1hbnVhbC1pbnRyby54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImRldi1tYW51YWwtc3RhcnQueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJkZXYtbWFudWFsLW5ld2JpZS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImRldi1tYW51YWwtbW9kZWwueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJkZXYtbWFudWFsLWNvbW1vbi10YXNrcy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImRldi1tYW51YWwtcWVtdS54bWwiLz4KKworPC9ib29rPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtc3R5bGUuY3NzIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LXN0eWxlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTAwZmZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LXN0eWxlLmNzcwpAQCAtMCwwICsxLDk4NCBAQAorLyoKKyAgIEdlbmVyaWMgWEhUTUwgLyBEb2NCb29rIFhIVE1MIENTUyBTdHlsZXNoZWV0LgorCisgICBCcm93c2VyIHdyYW5nbGluZyBhbmQgdHlwb2dyYXBoaWMgZGVzaWduIGJ5CisgICAgICBPeXZpbmQgS29sYXMgLyBwaXBwaW5AZ2ltcC5vcmcKKworICAgQ3VzdG9taXNlZCBmb3IgUG9reSBieQorICAgICAgTWF0dGhldyBBbGx1bSAvIG1hbGx1bUBvLWhhbmQuY29tCisKKyAgIFRoYW5rcyB0bzoKKyAgICAgTGlhbSBSLiBFLiBRdWluCisgICAgIFdpbGxpYW0gU2thZ2dzCisgICAgIEpha3ViIFN0ZWluZXIKKworICAgU3RydWN0dXJlCisgICAtLS0tLS0tLS0KKworICAgVGhlIHN0eWxlc2hlZXQgaXMgZGl2aWRlZCBpbnRvIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnM6CisKKyAgICAgICBQb3NpdGlvbmluZworICAgICAgICAgIE1hcmdpbnMsIHBhZGRpbmdzLCB3aWR0aCwgZm9udC1zaXplLCBjbGVhcmluZy4KKyAgICAgICBEZWNvcmF0aW9ucworICAgICAgICAgIEJvcmRlcnMsIHN0eWxlCisgICAgICAgQ29sb3JzCisgICAgICAgICAgQ29sb3JzCisgICAgICAgR3JhcGhpY3MKKyAgICAgICAgICBHcmFwaGljYWwgYmFja2dyb3VuZHMKKyAgICAgICBOYXN0eSBJRSB0d2Vha3MKKyAgICAgICAgICBXb3JrYXJvdW5kcyBuZWVkZWQgdG8gbWFrZSBpdCB3b3JrIGluIGludGVybmV0IGV4cGxvcmVyLAorICAgICAgICAgIGN1cnJlbnRseSBtYWtlcyB0aGUgc3R5bGVzaGVldCBub24gdmFsaWRhdGluZywgYnV0IHVwIHVudGlsCisgICAgICAgICAgdGhpcyBwb2ludCBpdCBpcyB2YWxpZGF0aW5nLgorICAgICAgIE1vemlsbGEgZXh0ZW5zaW9ucworICAgICAgICAgIFRyYW5zcGFyZW5jeSBmb3IgZm9vdGVyCisJICBSb3VuZGVkIGNvcm5lcnMgb24gYm94ZXMKKworKi8KKworCisgIC8qKioqKioqKioqKioqKiogLworIC8gIFBvc2l0aW9uaW5nICAgLworLyAqKioqKioqKioqKioqKiovCisKK2JvZHkgeworICBmb250LWZhbWlseTogVmVyZGFuYSwgU2Fucywgc2Fucy1zZXJpZjsKKworICBtaW4td2lkdGg6IDY0MHB4OworICB3aWR0aDogODAlOworICBtYXJnaW46ICAwZW0gYXV0bzsKKyAgcGFkZGluZzogMmVtIDVlbSA1ZW0gNWVtOworICBjb2xvcjogIzMzMzsKK30KKworaDEsaDIsaDMsaDQsaDUsaDYsaDcgeworICBmb250LWZhbWlseTogQXJpYWwsIFNhbnM7CisgIGNvbG9yOiAjMDA1NTdEOworICBjbGVhcjogYm90aDsKK30KKworaDEgeworICBmb250LXNpemU6IDJlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDJlbSAwZW0gMGVtIDBlbTsKK30KKworaDIuc3VidGl0bGUgeworICBtYXJnaW46IDAuMTBlbSAwZW0gMy4wZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS44ZW07CisgIHBhZGRpbmctbGVmdDogMjAlOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK2gyIHsKKyAgbWFyZ2luOiAyZW0gMGVtIDAuNjZlbSAwZW07CisgIHBhZGRpbmc6IDAuNWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuNWVtOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDMuc3VidGl0bGUgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0Mi4xNCU7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitoMyB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDQgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTIwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g1IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNiB7CisgIG1hcmdpbjogMWVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy5hdXRob3Jncm91cCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBwYWRkaW5nLXRvcDogMjU2cHg7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy9kZXYtdGl0bGUucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgdG9wOworICBtYXJnaW4tdG9wOiAtMjU2cHg7CisgIHBhZGRpbmctcmlnaHQ6IDUwcHg7CisgIG1hcmdpbi1sZWZ0OiAwcHg7CisgIHRleHQtYWxpZ246IHJpZ2h0OworICB3aWR0aDogNzQwcHg7Cit9CisKK2gzLmF1dGhvciB7CisgIG1hcmdpbjogMGVtIDBtZSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc2l6ZTogMTAwJTsKKyAgY29sb3I6ICMzMzM7CisgIGNsZWFyOiBib3RoOworfQorCisuYXV0aG9yIHR0LmVtYWlsIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKKy50aXRsZXBhZ2UgaHIgeworICB3aWR0aDogMGVtOworICBjbGVhcjogYm90aDsKK30KKworLnJldmhpc3RvcnkgeworICBwYWRkaW5nLXRvcDogMmVtOworICBjbGVhcjogYm90aDsKK30KKworLnRvYywKKy5saXN0LW9mLXRhYmxlcywKKy5saXN0LW9mLWV4YW1wbGVzLAorLmxpc3Qtb2YtZmlndXJlcyB7CisgIHBhZGRpbmc6IDEuMzNlbSAwZW0gMi41ZW0gMGVtOworICBjb2xvcjogIzAwNTU3RDsKK30KKworLnRvYyBwLAorLmxpc3Qtb2YtdGFibGVzIHAsCisubGlzdC1vZi1maWd1cmVzIHAsCisubGlzdC1vZi1leGFtcGxlcyBwIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDAuM2VtOworICBtYXJnaW46IDEuNWVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIHAgYiwKKy5saXN0LW9mLXRhYmxlcyBwIGIsCisubGlzdC1vZi1maWd1cmVzIHAgYiwKKy5saXN0LW9mLWV4YW1wbGVzIHAgYnsKKyAgZm9udC1zaXplOiAxMDAuMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisudG9jIGRsLAorLmxpc3Qtb2YtdGFibGVzIGRsLAorLmxpc3Qtb2YtZmlndXJlcyBkbCwKKy5saXN0LW9mLWV4YW1wbGVzIGRsIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGR0IHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkZCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMi42ZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworZGl2Lmdsb3NzYXJ5IGRsLAorZGl2LnZhcmlhYmxlbGlzdCBkbCB7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHdpZHRoOiAyMGVtOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworLnZhcmlhYmxlbGlzdCBkbCBkdCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworfQorCisuZ2xvc3NhcnkgZGwgZGQsCisudmFyaWFibGVsaXN0IGRsIGRkIHsKKyAgbWFyZ2luLXRvcDogLTFlbTsKKyAgbWFyZ2luLWxlZnQ6IDI1LjVlbTsKK30KKworLmdsb3NzYXJ5IGRkIHAsCisudmFyaWFibGVsaXN0IGRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCitkaXYgcC5jb3B5cmlnaHQgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCitkaXYubGVnYWxub3RpY2UgcC5sZWdhbG5vdGljZS10aXRsZSB7CisgIG1hcmdpbi1ib3R0b206IDBlbTsKK30KKworcCB7CisgIGxpbmUtaGVpZ2h0OiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworCit9CisKK2RsIHsKKyAgcGFkZGluZy10b3A6IDBlbTsKK30KKworaHIgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworCisubWVkaWFvYmplY3QsCisubWVkaWFvYmplY3RjbyB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworaW1nIHsKKyAgYm9yZGVyOiBub25lOworfQorCit1bCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDEuNWVtOworfQorCit1bCBsaSB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKwordWwgbGkgcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK3RhYmxlIHsKKyAgd2lkdGggOjEwMCU7Cit9CisKK3RoIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBmb250LXdlaWdodDogbm9ybWFsOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCit0ZCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKworcCBhW2lkXSB7CisgIG1hcmdpbjogMHB4OworICBwYWRkaW5nOiAwcHg7CisgIGRpc3BsYXk6IGlubGluZTsKKyAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKK30KKworYSB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBjb2xvcjogIzQ0NDsKK30KKworcHJlIHsKKyAgICBvdmVyZmxvdzogYXV0bzsKK30KKworYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICAvKmZvbnQtd2VpZ2h0OiBib2xkOyovCit9CisKKy8qIFRoaXMgc3R5bGUgZGVmaW5lcyBob3cgdGhlIHBlcm1hbGluayBjaGFyYWN0ZXIKKyAgIGFwcGVhcnMgYnkgaXRzZWxmIGFuZCB3aGVuIGhvdmVyZWQgb3ZlciB3aXRoCisgICB0aGUgbW91c2UuICovCisKK1thbHQ9J1Blcm1hbGluayddIHsgY29sb3I6ICNlZWU7IH0KK1thbHQ9J1Blcm1hbGluayddOmhvdmVyIHsgY29sb3I6IGJsYWNrOyB9CisKKworZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlIHsKKyAgbWFyZ2luOiAxZW0gMGVtOworICBwYWRkaW5nOiAxZW07CisgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsKK30KKworCitkaXYuaW5mb3JtYWxmaWd1cmUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWx0YWJsZSBwLnRpdGxlIGIsCitkaXYuZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5leGFtcGxlIHAudGl0bGUgYiwKK2Rpdi50YWJsZSBwLnRpdGxlIGJ7CisgICAgcGFkZGluZy10b3A6IDBlbTsKKyAgICBtYXJnaW4tdG9wOiAwZW07CisgICAgZm9udC1zaXplOiAxMDAlOworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9CisKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiwKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiBwICB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmctdG9wOiAwLjVlbTsKKyAgcGFkZGluZy1ib3R0b206IDAuNWVtOworfQorCisuZXBpZ3JhcGggeworICBwYWRkaW5nLWxlZnQ6IDU1JTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisuZXBpZ3JhcGggcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5lcGlncmFwaCAucXVvdGUgeworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisuZXBpZ3JhcGggLmF0dHJpYnV0aW9uIHsKKyAgZm9udC1zdHlsZTogbm9ybWFsOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworc3Bhbi5hcHBsaWNhdGlvbiB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLnByb2dyYW1saXN0aW5nIHsKKyAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgZm9udC1zaXplOiA4MCU7CisgIHdoaXRlLXNwYWNlOiBwcmU7CisgIG1hcmdpbjogMS4zM2VtIDBlbTsKKyAgcGFkZGluZzogMS4zM2VtOworfQorCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgbWFyZ2luLXRvcDogMWVtOworICBtYXJnaW4tYm90dG9tOiAxZW07CisKK30KKworLyogZm9yY2UgZnVsbCB3aWR0aCBvZiB0YWJsZSB3aXRoaW4gZGl2ICovCisudGlwIHRhYmxlLAorLndhcm5pbmcgdGFibGUsCisuY2F1dGlvbiB0YWJsZSwKKy5ub3RlIHRhYmxlIHsKKyAgYm9yZGVyOiBub25lOworICB3aWR0aDogMTAwJTsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgcGFkZGluZzogMC44ZW0gMC4wZW0gMC4wZW0gMC4wZW07CisgIG1hcmdpbiA6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRpcCBwLAorLndhcm5pbmcgcCwKKy5jYXV0aW9uIHAsCisubm90ZSBwIHsKKyAgbWFyZ2luLXRvcDogMC41ZW07CisgIG1hcmdpbi1ib3R0b206IDAuNWVtOworICBwYWRkaW5nLXJpZ2h0OiAxZW07CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5hY3JvbnltIHsKKyAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgcGFkZGluZzogMC4wOWVtIDAuM2VtOworICBtYXJnaW46IDBlbTsKK30KKworLml0ZW1pemVkbGlzdCBsaSB7CisgIGNsZWFyOiBub25lOworfQorCisuZmlsZW5hbWUgeworICBmb250LXNpemU6IG1lZGl1bTsKKyAgZm9udC1mYW1pbHk6IENvdXJpZXIsIG1vbm9zcGFjZTsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgcG9zaXRpb246IGFic29sdXRlOworICBsZWZ0OiAwZW07CisgIHRvcDogMGVtOworICB3aWR0aDogMTAwJTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2NkZjsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBwb3NpdGlvbjogZml4ZWQ7CisgIGxlZnQ6IDBlbTsKKyAgYm90dG9tOiAwZW07CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIHdpZHRoOiAxMDAlOworfQorCisKK2Rpdi5uYXZoZWFkZXIgdGQsCitkaXYubmF2Zm9vdGVyIHRkIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGggeworICAvKmZvbnQtZmFtaWx5OiBHZW9yZ2lhLCBUaW1lcywgc2VyaWY7Ki8KKyAgLypmb250LXNpemU6IHgtbGFyZ2U7Ki8KKyAgZm9udC1zaXplOiA4MCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLXRvcDogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItYm90dG9tOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGEsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGEgeworICBjb2xvcjogIzc3NzsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCisvKiBub3JtYWwgdGV4dCBpbiB0aGUgZm9vdGVyICovCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIHsKKyAgY29sb3I6IGJsYWNrOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6dmlzaXRlZCwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTp2aXNpdGVkIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKKworLyogbGlua3MgaW4gaGVhZGVyIGFuZCBmb290ZXIgKi8KK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTpob3ZlciwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgY29sb3I6ICMzM2E7Cit9CisKK2Rpdi5uYXZoZWFkZXIgaHIsCitkaXYubmF2Zm9vdGVyIGhyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCisucWFuZGFzZXQgdHIucXVlc3Rpb24gdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy5xYW5kYXNldCB0ci5hbnN3ZXIgdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisuYW5zd2VyIHRkIHsKKyAgcGFkZGluZy1ib3R0b206IDEuNWVtOworfQorCisuZW1waGFzaXMgeworICBmb250LXdlaWdodDogYm9sZDsKK30KKworCisgIC8qKioqKioqKioqKioqIC8KKyAvIGRlY29yYXRpb25zICAvCisvICoqKioqKioqKioqKiovCisKKy50aXRsZXBhZ2UgeworfQorCisucGFydCAudGl0bGUgeworfQorCisuc3VidGl0bGUgeworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyoKK2gxIHsKKyAgYm9yZGVyOiBub25lOworfQorCitoMiB7CisgIGJvcmRlci10b3A6IHNvbGlkIDAuMmVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2gzIHsKKyAgYm9yZGVyLXRvcDogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g0IHsKKyAgYm9yZGVyOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDUgeworICBib3JkZXI6IDBlbTsKK30KKyovCisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworLnF1ZXN0aW9uIHRkIHsKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOworfQorCisuYW5zd2VyIHsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBib3JkZXItdG9wOiAxcHggc29saWQ7Cit9CisKKyAgLyoqKioqKioqKiAvCisgLyAgY29sb3JzICAvCisvICoqKioqKioqKi8KKworYm9keSB7CisgIGNvbG9yOiAjMzMzOworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKworYSB7CisgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OworfQorCithOmhvdmVyIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2RlZGVkZTsKK30KKworCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoNywKK2g4IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Cit9CisKK2hyIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCisKKy50aXAsIC53YXJuaW5nLCAuY2F1dGlvbiwgLm5vdGUgeworICBib3JkZXItY29sb3I6ICNmZmY7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7Cit9CisKKworLndhcm5pbmcgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy50aXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisubm90ZSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGNvbG9yOiAjMDQ0OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKK3ByZS5wcm9ncmFtbGlzdGluZyB7CisgIGNvbG9yOiBibGFjazsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworICBib3JkZXItd2lkdGg6IDJweDsKK30KKworLmd1aW1lbnUsCisuZ3VpbGFiZWwsCisuZ3VpbWVudWl0ZW0geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIGJvcmRlci1jb2xvcjogIzk5OTsKK30KKworCitkaXYubmF2aGVhZGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCitkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCisgIC8qKioqKioqKioqKiAvCisgLyAgZ3JhcGhpY3MgIC8KKy8gKioqKioqKioqKiovCisKKy8qCitib2R5IHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvYm9keV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLm5hdmhlYWRlciwKKy5ub3RlLAorLnRpcCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL25vdGVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy53YXJuaW5nLAorLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy93YXJuaW5nX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisuZmlndXJlLAorLmluZm9ybWFsZmlndXJlLAorLmV4YW1wbGUsCisuaW5mb3JtYWxleGFtcGxlLAorLnRhYmxlLAorLmluZm9ybWFsdGFibGUgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9maWd1cmVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKyovCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoN3sKK30KKworLyoKK0V4YW1wbGUgb2YgaG93IHRvIHN0aWNrIGFuIGltYWdlIGFzIHBhcnQgb2YgdGhlIHRpdGxlLgorCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvd2hpdGUtb24tYmxhY2sucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworfQorKi8KKworZGl2LnByZWZhY2UgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuY29sb3Bob24gLnRpdGxlLAorZGl2LmNoYXB0ZXIgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworfQorCitkaXYuc2VjdGlvbiBkaXYuc2VjdGlvbiAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5zZWN0MiAudGl0bGVwYWdlIC50aXRsZSB7CisgICAgYmFja2dyb3VuZDogbm9uZTsKK30KKworCitoMS50aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBoZWlnaHQ6IDI1NnB4OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworfQorCitoMi5zdWJ0aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworICB3aWR0aDogMHB4OworICBkaXNwbGF5OiBub25lOworfQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gIHBpcHBpbi5naW1wLm9yZyBzcGVjaWZpYyBhbHRlcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIGNvbG9yOiAjNzc3OworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZzogMDsKKyAgbWFyZ2luOiAwOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMHB4OworICBsZWZ0OiAwcHg7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDUwcHg7CisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9oZWFkaW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7CisgIGJvcmRlcjogbm9uZTsKK30KKworZGl2LmhlYWRpbmcgYSB7CisgIGNvbG9yOiAjNDQ0OworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlcjogbm9uZTsKKyAgY29sb3I6ICNkZGQ7CisgIGZvbnQtc2l6ZTogODAlOworICB0ZXh0LWFsaWduOnJpZ2h0OworCisgIHdpZHRoOiAxMDAlOworICBwYWRkaW5nLXRvcDogMTBweDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBib3R0b206IDBweDsKKyAgbGVmdDogMHB4OworCisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9mb290aW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworfQorKi8KKworCisKKyAgLyoqKioqKioqKioqKioqKioqKiAvCisgLyAgbmFzdHkgaWUgdHdlYWtzICAvCisvICoqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7CisgIG1hcmdpbi1sZWZ0OmV4cHJlc3Npb24oIi01ZW0iKTsKK30KK2JvZHkgeworICBwYWRkaW5nOmV4cHJlc3Npb24oIjRlbSA1ZW0gMGVtIDVlbSIpOworfQorKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyBtb3ppbGxhIHZlbmRvciBzcGVjaWZpYyBjc3MgZXh0ZW5zaW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICAtbW96LW9wYWNpdHk6IDAuOGVtOworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUsCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjVlbTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjNlbTsKK30KKyovCisKK3RhYmxlIHRyIHRkIHRhYmxlIHRyIHRkIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCitociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKK3RhYmxlIHsKKyAgYm9yZGVyOiAwZW07Cit9CisKKyAucGhvdG8geworICBmbG9hdDogcmlnaHQ7CisgIG1hcmdpbi1sZWZ0OiAgIDEuNWVtOworICBtYXJnaW4tYm90dG9tOiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXgtd2lkdGg6ICAgICAgMTdlbTsKKyAgYm9yZGVyOiAgICAgMXB4IHNvbGlkIGdyYXk7CisgIHBhZGRpbmc6ICAgIDNweDsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisgLnNlcGVyYXRvciB7CisgICBwYWRkaW5nLXRvcDogMmVtOworICAgY2xlYXI6IGJvdGg7CisgIH0KKworICAjdmFsaWRhdG9ycyB7CisgICAgICBtYXJnaW4tdG9wOiA1ZW07CisgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgIGNvbG9yOiAjNzc3OworICB9CisgIEBtZWRpYSBwcmludCB7CisgICAgICBib2R5IHsKKyAgICAgICAgICBmb250LXNpemU6IDhwdDsKKyAgICAgIH0KKyAgICAgIC5ub3ByaW50IHsKKyAgICAgICAgICBkaXNwbGF5OiBub25lOworICAgICAgfQorICB9CisKKworLnRpcCwKKy5ub3RlIHsKKyAgIGJhY2tncm91bmQ6ICNmMGYwZjI7CisgICBjb2xvcjogIzMzMzsKKyAgIHBhZGRpbmc6IDIwcHg7CisgICBtYXJnaW46IDIwcHg7Cit9CisKKy50aXAgaDMsCisubm90ZSBoMyB7CisgICBwYWRkaW5nOiAwZW07CisgICBtYXJnaW46IDBlbTsKKyAgIGZvbnQtc2l6ZTogMmVtOworICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICBjb2xvcjogIzMzMzsKK30KKworLnRpcCBhLAorLm5vdGUgYSB7CisgICBjb2xvcjogIzMzMzsKKyAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisuZm9vdG5vdGUgeworICAgZm9udC1zaXplOiBzbWFsbDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisvKiBDaGFuZ2VzIHRoZSBhbm5vdW5jZW1lbnQgdGV4dCAqLworLnRpcCBoMywKKy53YXJuaW5nIGgzLAorLmNhdXRpb24gaDMsCisubm90ZSBoMyB7CisgICBmb250LXNpemU6bGFyZ2U7CisgICBjb2xvcjogIzAwNTU3RDsKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvYXBwLWRldi1mbG93LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvYXBwLWRldi1mbG93LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzkzMzc0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9hcHAtZGV2LWZsb3cucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDBiMGFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9ic3AtZGV2LWZsb3cucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvYnVpbGQtd29ya3NwYWNlLWRpcmVjdG9yeS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2J1aWxkLXdvcmtzcGFjZS1kaXJlY3RvcnkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NjFmOGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2J1aWxkLXdvcmtzcGFjZS1kaXJlY3RvcnkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvZGV2LXRpdGxlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvZGV2LXRpdGxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2NhYzRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9kZXYtdGl0bGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvZ2l0LXdvcmtmbG93LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvZ2l0LXdvcmtmbG93LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDAxMzMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9naXQtd29ya2Zsb3cucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvaW5kZXgtZG93bmxvYWRzLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvaW5kZXgtZG93bmxvYWRzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTI1MWQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9pbmRleC1kb3dubG9hZHMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWRldi1mbG93LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWRldi1mbG93LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDkxMDVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9rZXJuZWwtZGV2LWZsb3cucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTEucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE2YzBiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTItZ2VuZXJpYy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2tlcm5lbC1vdmVydmlldy0yLWdlbmVyaWMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOTcwZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2tlcm5lbC1vdmVydmlldy0yLWdlbmVyaWMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvcmVjaXBlLXdvcmtmbG93LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvcmVjaXBlLXdvcmtmbG93LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGU5NjBiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9yZWNpcGUtd29ya2Zsb3cucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWM1ZjI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9zb3VyY2UtcmVwb3MucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMveXAtZG93bmxvYWQucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy95cC1kb3dubG9hZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3MGJlNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMveXAtZG93bmxvYWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2ZpZ3VyZXMva2VybmVsLWFyY2hpdGVjdHVyZS1vdmVydmlldy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9maWd1cmVzL2tlcm5lbC1hcmNoaXRlY3R1cmUtb3ZlcnZpZXcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJhYWQxNzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9maWd1cmVzL2tlcm5lbC1hcmNoaXRlY3R1cmUtb3ZlcnZpZXcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2ZpZ3VyZXMva2VybmVsLWRldi10aXRsZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9maWd1cmVzL2tlcm5lbC1kZXYtdGl0bGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhOGRkNTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9maWd1cmVzL2tlcm5lbC1kZXYtdGl0bGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtYWR2YW5jZWQueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1hZHZhbmNlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZkYjg1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtYWR2YW5jZWQueG1sCkBAIC0wLDAgKzEsMTA4OCBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J2tlcm5lbC1kZXYtYWR2YW5jZWQnPgorPHRpdGxlPldvcmtpbmcgd2l0aCBBZHZhbmNlZCBNZXRhZGF0YTwvdGl0bGU+CisKKzxzZWN0aW9uIGlkPSdrZXJuZWwtZGV2LWFkdmFuY2VkLW92ZXJ2aWV3Jz4KKyAgICA8dGl0bGU+T3ZlcnZpZXc8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEluIGFkZGl0aW9uIHRvIHN1cHBvcnRpbmcgY29uZmlndXJhdGlvbiBmcmFnbWVudHMgYW5kIHBhdGNoZXMsIHRoZQorICAgICAgICBZb2N0byBQcm9qZWN0IGtlcm5lbCB0b29scyBhbHNvIHN1cHBvcnQgcmljaAorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPiB0aGF0IHlvdSBjYW4KKyAgICAgICAgdXNlIHRvIGRlZmluZSBjb21wbGV4IHBvbGljaWVzIGFuZCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgc3VwcG9ydC4KKyAgICAgICAgVGhlIHB1cnBvc2Ugb2YgdGhlIE1ldGFkYXRhIGFuZCB0aGUgdG9vbHMgdGhhdCBtYW5hZ2UgaXQsIGtub3duIGFzCisgICAgICAgIHRoZSBrZXJuLXRvb2xzICg8ZmlsZW5hbWU+a2Vybi10b29scy1uYXRpdmVfZ2l0LmJiPC9maWxlbmFtZT4pLCBpcworICAgICAgICB0byBoZWxwIHlvdSBtYW5hZ2UgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIHNvdXJjZXMKKyAgICAgICAgdXNlZCB0byBzdXBwb3J0IG11bHRpcGxlIEJTUHMgYW5kIExpbnV4IGtlcm5lbCB0eXBlcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSd1c2luZy1rZXJuZWwtbWV0YWRhdGEtaW4tYS1yZWNpcGUnPgorICAgIDx0aXRsZT5Vc2luZyBLZXJuZWwgTWV0YWRhdGEgaW4gYSBSZWNpcGU8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBrZXJuZWwgc291cmNlcyBpbiB0aGUgWW9jdG8gUHJvamVjdCBjb250YWluIGtlcm5lbCBNZXRhZGF0YSwgd2hpY2gKKyAgICAgICAgaXMgbG9jYXRlZCBpbiB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2hlcyBvZiB0aGUga2VybmVsCisgICAgICAgIHNvdXJjZSBHaXQgcmVwb3NpdG9yaWVzLgorICAgICAgICBUaGlzIE1ldGFkYXRhIGRlZmluZXMgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQcykgdGhhdAorICAgICAgICBjb3JyZXNwb25kIHRvIGRlZmluaXRpb25zIGluIGxpbnV4LXlvY3RvIHJlY2lwZXMgZm9yIHRoZSBzYW1lIEJTUHMuCisgICAgICAgIEEgQlNQIGNvbnNpc3RzIG9mIGFuIGFnZ3JlZ2F0aW9uIG9mIGtlcm5lbCBwb2xpY3kgYW5kIGhhcmR3YXJlLXNwZWNpZmljCisgICAgICAgIGZlYXR1cmUgZW5hYmxlbWVudHMuCisgICAgICAgIFRoZSBCU1AgY2FuIGJlIGluZmx1ZW5jZWQgZnJvbSB3aXRoaW4gdGhlIGxpbnV4LXlvY3RvIHJlY2lwZS4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBMaW51eCBrZXJuZWwgc291cmNlIHRoYXQgY29udGFpbnMga2VybmVsIE1ldGFkYXRhIGlzIHNhaWQgdG8gYmUKKyAgICAgICAgICAgICJsaW51eC15b2N0byBzdHlsZSIga2VybmVsIHNvdXJjZS4KKyAgICAgICAgICAgIEEgTGludXgga2VybmVsIHJlY2lwZSB0aGF0IGluaGVyaXRzIGZyb20gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8uaW5jPC9maWxlbmFtZT4gaW5jbHVkZSBmaWxlIGlzIHNhaWQgdG8gYmUgYQorICAgICAgICAgICAgImxpbnV4LXlvY3RvIHN0eWxlIiByZWNpcGUuCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRXZlcnkgbGludXgteW9jdG8gc3R5bGUgcmVjaXBlIG11c3QgZGVmaW5lIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS01BQ0hJTkUnPjxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgdmFyaWFibGUuCisgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdHlwaWNhbGx5IHNldCB0byB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICB2YXJpYWJsZSwgd2hpY2ggaXMgdXNlZCBieQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNiaXRiYWtlLXRlcm0nPkJpdEJha2U8L3VsaW5rPi4KKyAgICAgICAgSG93ZXZlciwgaW4gc29tZSBjYXNlcywgdGhlIHZhcmlhYmxlIG1pZ2h0IGluc3RlYWQgcmVmZXIgdG8gdGhlCisgICAgICAgIHVuZGVybHlpbmcgcGxhdGZvcm0gb2YgdGhlIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIE11bHRpcGxlIEJTUHMgY2FuIHJldXNlIHRoZSBzYW1lIDxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+CisgICAgICAgIG5hbWUgaWYgdGhleSBhcmUgYnVpbHQgdXNpbmcgdGhlIHNhbWUgQlNQIGRlc2NyaXB0aW9uLgorICAgICAgICBUaGUgImVwMTA4LXp5bnFtcCIgYW5kICJxZW11enlucW1wIiBCU1AgY29tYmluYXRpb24KKyAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLXhpbGlueDwvZmlsZW5hbWU+CisgICAgICAgIGxheWVyIGlzIGEgZ29vZCBleGFtcGxlIG9mIHR3byBCU1BzIHVzaW5nIHRoZSBzYW1lCisgICAgICAgIDxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+IHZhbHVlIChpLmUuICJ6eW5xbXAiKS4KKyAgICAgICAgU2VlIHRoZSA8bGluayBsaW5rZW5kPSdic3AtZGVzY3JpcHRpb25zJz5CU1AgRGVzY3JpcHRpb25zPC9saW5rPiBzZWN0aW9uCisgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBFdmVyeSBsaW51eC15b2N0byBzdHlsZSByZWNpcGUgbXVzdCBhbHNvIGluZGljYXRlIHRoZSBMaW51eCBrZXJuZWwKKyAgICAgICAgc291cmNlIHJlcG9zaXRvcnkgYnJhbmNoIHVzZWQgdG8gYnVpbGQgdGhlIExpbnV4IGtlcm5lbC4KKyAgICAgICAgVGhlIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LQlJBTkNIJz48ZmlsZW5hbWU+S0JSQU5DSDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgdmFyaWFibGUgbXVzdCBiZSBzZXQgdG8gaW5kaWNhdGUgdGhlIGJyYW5jaC4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPktCUkFOQ0g8L2ZpbGVuYW1lPiB2YWx1ZSB0byBkZWZpbmUgYW4KKyAgICAgICAgICAgIGFsdGVybmF0ZSBicmFuY2ggdHlwaWNhbGx5IHdpdGggYSBtYWNoaW5lIG92ZXJyaWRlIGFzIHNob3duIGhlcmUKKyAgICAgICAgICAgIGZyb20gdGhlIDxmaWxlbmFtZT5tZXRhLWVtZW5sb3c8L2ZpbGVuYW1lPiBsYXllcjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0JSQU5DSF9lbWVubG93LW5vZW1nZCA9ICJzdGFuZGFyZC9iYXNlIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBsaW51eC15b2N0byBzdHlsZSByZWNpcGVzIGNhbiBvcHRpb25hbGx5IGRlZmluZSB0aGUgZm9sbG93aW5nCisgICAgICAgIHZhcmlhYmxlczoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS0VSTkVMX0ZFQVRVUkVTJz5LRVJORUxfRkVBVFVSRVM8L3VsaW5rPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTElOVVhfS0VSTkVMX1RZUEUnPkxJTlVYX0tFUk5FTF9UWVBFPC91bGluaz4KKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8ZmlsZW5hbWU+TElOVVhfS0VSTkVMX1RZUEU8L2ZpbGVuYW1lPiBkZWZpbmVzIHRoZSBrZXJuZWwgdHlwZSB0byBiZQorICAgICAgICB1c2VkIGluIGFzc2VtYmxpbmcgdGhlIGNvbmZpZ3VyYXRpb24uCisgICAgICAgIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIDxmaWxlbmFtZT5MSU5VWF9LRVJORUxfVFlQRTwvZmlsZW5hbWU+LAorICAgICAgICBpdCBkZWZhdWx0cyB0byAic3RhbmRhcmQiLgorICAgICAgICBUb2dldGhlciB3aXRoCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LTUFDSElORSc+PGZpbGVuYW1lPktNQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgPGZpbGVuYW1lPkxJTlVYX0tFUk5FTF9UWVBFPC9maWxlbmFtZT4gZGVmaW5lcyB0aGUgc2VhcmNoCisgICAgICAgIGFyZ3VtZW50cyB1c2VkIGJ5IHRoZSBrZXJuZWwgdG9vbHMgdG8gZmluZCB0aGUKKyAgICAgICAgYXBwcm9wcmlhdGUgZGVzY3JpcHRpb24gd2l0aGluIHRoZSBrZXJuZWwgTWV0YWRhdGEgd2l0aCB3aGljaCB0bworICAgICAgICBidWlsZCBvdXQgdGhlIHNvdXJjZXMgYW5kIGNvbmZpZ3VyYXRpb24uCisgICAgICAgIFRoZSBsaW51eC15b2N0byByZWNpcGVzIGRlZmluZSAic3RhbmRhcmQiLCAidGlueSIsIGFuZCAicHJlZW1wdC1ydCIKKyAgICAgICAga2VybmVsIHR5cGVzLgorICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSdrZXJuZWwtdHlwZXMnPktlcm5lbCBUeXBlczwvbGluaz4iIHNlY3Rpb24KKyAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24ga2VybmVsIHR5cGVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBEdXJpbmcgdGhlIGJ1aWxkLCB0aGUga2Vybi10b29scyBzZWFyY2ggZm9yIHRoZSBCU1AgZGVzY3JpcHRpb24KKyAgICAgICAgZmlsZSB0aGF0IG1vc3QgY2xvc2VseSBtYXRjaGVzIHRoZSA8ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPgorICAgICAgICBhbmQgPGZpbGVuYW1lPkxJTlVYX0tFUk5FTF9UWVBFPC9maWxlbmFtZT4gdmFyaWFibGVzIHBhc3NlZCBpbiBmcm9tIHRoZQorICAgICAgICByZWNpcGUuCisgICAgICAgIFRoZSB0b29scyB1c2UgdGhlIGZpcnN0IEJTUCBkZXNjcmlwdGlvbiBpdCBmaW5kcyB0aGF0IG1hdGNoCisgICAgICAgIGJvdGggdmFyaWFibGVzLgorICAgICAgICBJZiB0aGUgdG9vbHMgY2Fubm90IGZpbmQgYSBtYXRjaCwgdGhleSBpc3N1ZSBhIHdhcm5pbmcgc3VjaCBhcworICAgICAgICB0aGUgZm9sbG93aW5nOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFdBUk5JTkc6IENhbid0IGZpbmQgYW55IEJTUCBoYXJkd2FyZSBvciByZXF1aXJlZCBjb25maWd1cmF0aW9uIGZyYWdtZW50cy4KKyAgICAgV0FSTklORzogTG9va2VkIGF0IG1ldGEvY2ZnL2Jyb2tlbi9lbWVubG93LWJyb2tlbi9oZHdfZnJhZ3MudHh0IGFuZAorICAgICAgICAgICAgICBtZXRhL2NmZy9icm9rZW4vZW1lbmxvdy1icm9rZW4vcmVxdWlyZWRfZnJhZ3MudHh0IGluIGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgbWV0YS9jZmcvYnJva2VuL2VtZW5sb3ctYnJva2VuCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgSW4gdGhpcyBleGFtcGxlLCA8ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPiB3YXMgc2V0IHRvICJlbWVubG93LWJyb2tlbiIKKyAgICAgICAgYW5kIDxmaWxlbmFtZT5MSU5VWF9LRVJORUxfVFlQRTwvZmlsZW5hbWU+IHdhcyBzZXQgdG8gImJyb2tlbiIuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSB0b29scyBmaXJzdCBzZWFyY2ggZm9yIHRoZSA8ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgdGhlbiBmb3IgdGhlIDxmaWxlbmFtZT5MSU5VWF9LRVJORUxfVFlQRTwvZmlsZW5hbWU+LgorICAgICAgICBJZiB0aGUgdG9vbHMgY2Fubm90IGZpbmQgYSBwYXJ0aWFsIG1hdGNoLCB0aGV5IHdpbGwgdXNlIHRoZQorICAgICAgICBzb3VyY2VzIGZyb20gdGhlIDxmaWxlbmFtZT5LQlJBTkNIPC9maWxlbmFtZT4gYW5kIGFueSBjb25maWd1cmF0aW9uCisgICAgICAgIHNwZWNpZmllZCBpbiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5LRVJORUxfRkVBVFVSRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICB0byBpbmNsdWRlIGZlYXR1cmVzIChjb25maWd1cmF0aW9uIGZyYWdtZW50cywgcGF0Y2hlcywgb3IgYm90aCkgdGhhdAorICAgICAgICBhcmUgbm90IGFscmVhZHkgaW5jbHVkZWQgYnkgdGhlIDxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+IGFuZAorICAgICAgICA8ZmlsZW5hbWU+TElOVVhfS0VSTkVMX1RZUEU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBjb21iaW5hdGlvbi4KKyAgICAgICAgRm9yIGV4YW1wbGUsIHRvIGluY2x1ZGUgYSBmZWF0dXJlIHNwZWNpZmllZCBhcworICAgICAgICAiZmVhdHVyZXMvbmV0ZmlsdGVyL25ldGZpbHRlci5zY2MiLAorICAgICAgICBzcGVjaWZ5OgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtFUk5FTF9GRUFUVVJFUyArPSAiZmVhdHVyZXMvbmV0ZmlsdGVyL25ldGZpbHRlci5zY2MiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgVG8gaW5jbHVkZSBhIGZlYXR1cmUgY2FsbGVkICJjZmcvc291bmQuc2NjIiBqdXN0IGZvciB0aGUKKyAgICAgICAgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPiBtYWNoaW5lLCBzcGVjaWZ5OgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4NiA9ICIgY2ZnL3NvdW5kLnNjYyIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICBUaGUgdmFsdWUgb2YgdGhlIGVudHJpZXMgaW4gPGZpbGVuYW1lPktFUk5FTF9GRUFUVVJFUzwvZmlsZW5hbWU+CisgICAgICAgIGFyZSBkZXBlbmRlbnQgb24gdGhlaXIgbG9jYXRpb24gd2l0aGluIHRoZSBrZXJuZWwgTWV0YWRhdGEgaXRzZWxmLgorICAgICAgICBUaGUgZXhhbXBsZXMgaGVyZSBhcmUgdGFrZW4gZnJvbSB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPgorICAgICAgICBicmFuY2ggb2YgdGhlIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE5PC9maWxlbmFtZT4gcmVwb3NpdG9yeS4KKyAgICAgICAgV2l0aGluIHRoYXQgYnJhbmNoLCAiZmVhdHVyZXMiIGFuZCAiY2ZnIiBhcmUgc3ViZGlyZWN0b3JpZXMgb2YgdGhlCisgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NmZy9rZXJuZWwtY2FjaGU8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdrZXJuZWwtbWV0YWRhdGEtc3ludGF4Jz5LZXJuZWwgTWV0YWRhdGEgU3ludGF4PC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBUaGUgcHJvY2Vzc2luZyBvZiB0aGUgdGhlc2UgdmFyaWFibGVzIGhhcyBldm9sdmVkIHNvbWUgYmV0d2VlbiB0aGUKKwkgICAgICAgIDAuOSBhbmQgMS4zIHJlbGVhc2VzIG9mIHRoZSBZb2N0byBQcm9qZWN0IGFuZCBhc3NvY2lhdGVkCisJICAgICAgICBrZXJuLXRvb2xzIHNvdXJjZXMuCisgICAgICAgICAgICBUaGUgZGVzY3JpcHRpb25zIGluIHRoaXMgc2VjdGlvbiBhcmUgYWNjdXJhdGUgZm9yIDEuMyBhbmQgbGF0ZXIKKwkgICAgICAgIHJlbGVhc2VzIG9mIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0na2VybmVsLW1ldGFkYXRhLWxvY2F0aW9uJz4KKyAgICA8dGl0bGU+S2VybmVsIE1ldGFkYXRhIExvY2F0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBLZXJuZWwgTWV0YWRhdGEgY2FuIGJlIGRlZmluZWQgaW4gZWl0aGVyIHRoZSBrZXJuZWwgcmVjaXBlCisgICAgICAgIChyZWNpcGUtc3BhY2UpIG9yIGluIHRoZSBrZXJuZWwgdHJlZSAoaW4tdHJlZSkuCisgICAgICAgIFdoZXJlIHlvdSBjaG9vc2UgdG8gZGVmaW5lIHRoZSBNZXRhZGF0YSBkZXBlbmRzIG9uIHdoYXQgeW91IHdhbnQKKyAgICAgICAgdG8gZG8gYW5kIGhvdyB5b3UgaW50ZW5kIHRvIHdvcmsuCisgICAgICAgIFJlZ2FyZGxlc3Mgb2Ygd2hlcmUgeW91IGRlZmluZSB0aGUga2VybmVsIE1ldGFkYXRhLCB0aGUgc3ludGF4IHVzZWQKKyAgICAgICAgYXBwbGllcyBlcXVhbGx5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBJZiB5b3UgYXJlIHVuZmFtaWxpYXIgd2l0aCB0aGUgTGludXgga2VybmVsIGFuZCBvbmx5IHdpc2gKKyAgICAgICAgdG8gYXBwbHkgYSBjb25maWd1cmF0aW9uIGFuZCBwb3NzaWJseSBhIGNvdXBsZSBvZiBwYXRjaGVzIHByb3ZpZGVkIHRvCisgICAgICAgIHlvdSBieSBvdGhlcnMsIHRoZSByZWNpcGUtc3BhY2UgbWV0aG9kIGlzIHJlY29tbWVuZGVkLgorICAgICAgICBUaGlzIG1ldGhvZCBpcyBhbHNvIGEgZ29vZCBhcHByb2FjaCBpZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBMaW51eCBrZXJuZWwKKyAgICAgICAgc291cmNlcyB5b3UgZG8gbm90IGNvbnRyb2wgb3IgaWYgeW91IGp1c3QgZG8gbm90IHdhbnQgdG8gbWFpbnRhaW4gYQorICAgICAgICBMaW51eCBrZXJuZWwgR2l0IHJlcG9zaXRvcnkgb24geW91ciBvd24uCisgICAgICAgIEZvciBwYXJ0aWFsIGluZm9ybWF0aW9uIG9uIGhvdyB5b3UgY2FuIGRlZmluZSBrZXJuZWwgTWV0YWRhdGEgaW4KKyAgICAgICAgdGhlIHJlY2lwZS1zcGFjZSwgc2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0nbW9kaWZ5aW5nLWFuLWV4aXN0aW5nLXJlY2lwZSc+TW9kaWZ5aW5nIGFuIEV4aXN0aW5nIFJlY2lwZTwvbGluaz4iCisgICAgICAgIHNlY3Rpb24uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIENvbnZlcnNlbHksIGlmIHlvdSBhcmUgYWN0aXZlbHkgZGV2ZWxvcGluZyBhIGtlcm5lbCBhbmQgYXJlIGFscmVhZHkKKyAgICAgICAgbWFpbnRhaW5pbmcgYSBMaW51eCBrZXJuZWwgR2l0IHJlcG9zaXRvcnkgb2YgeW91ciBvd24sIHlvdSBtaWdodCBmaW5kCisgICAgICAgIGl0IG1vcmUgY29udmVuaWVudCB0byB3b3JrIHdpdGggdGhlIGtlcm5lbCBNZXRhZGF0YSBpbiB0aGUgc2FtZQorICAgICAgICByZXBvc2l0b3J5IGFzIHRoZSBMaW51eCBrZXJuZWwgc291cmNlcy4KKyAgICAgICAgVGhpcyBtZXRob2QgY2FuIG1ha2UgaXRlcmF0aXZlIGRldmVsb3BtZW50IG9mIHRoZSBMaW51eCBrZXJuZWwKKyAgICAgICAgbW9yZSBlZmZpY2llbnQgb3V0c2lkZSBvZiB0aGUgQml0QmFrZSBlbnZpcm9ubWVudC4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVjaXBlLXNwYWNlLW1ldGFkYXRhJz4KKyAgICAgICAgPHRpdGxlPlJlY2lwZS1TcGFjZSBNZXRhZGF0YTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHN0b3JlZCBpbiByZWNpcGUtc3BhY2UsIHRoZSBrZXJuZWwgTWV0YWRhdGEgZmlsZXMgcmVzaWRlIGluIGEKKyAgICAgICAgICAgIGRpcmVjdG9yeSBoaWVyYXJjaHkgYmVsb3cKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFU0VYVFJBUEFUSFMnPjxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgRm9yIGEgbGludXgteW9jdG8gcmVjaXBlIG9yIGZvciBhIExpbnV4IGtlcm5lbCByZWNpcGUgZGVyaXZlZAorICAgICAgICAgICAgYnkgY29weWluZyBhbmQgbW9kaWZ5aW5nCisgICAgICAgICAgICA8ZmlsZW5hbWU+b2UtY29yZS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICB0byBhIHJlY2lwZSBpbiB5b3VyIGxheWVyLCA8ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGlzIHR5cGljYWxseSBzZXQgdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRISVNESVInPjxmaWxlbmFtZT5USElTRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59LyR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0nbW9kaWZ5aW5nLWFuLWV4aXN0aW5nLXJlY2lwZSc+TW9kaWZ5aW5nIGFuIEV4aXN0aW5nIFJlY2lwZTwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyBhIHRyaXZpYWwgdHJlZSBvZiBrZXJuZWwgTWV0YWRhdGEKKyAgICAgICAgICAgIHN0b3JlZCBpbiByZWNpcGUtc3BhY2Ugd2l0aGluIGEgQlNQIGxheWVyOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5teV9ic3BfbGF5ZXI8L3JlcGxhY2VhYmxlPi8KKyAgICAgYC0tIHJlY2lwZXMta2VybmVsCisgICAgICAgICBgLS0gbGludXgKKyAgICAgICAgICAgICBgLS0gbGludXgteW9jdG8KKyAgICAgICAgICAgICAgICAgfC0tIGJzcC1zdGFuZGFyZC5zY2MKKyAgICAgICAgICAgICAgICAgfC0tIGJzcC5jZmcKKyAgICAgICAgICAgICAgICAgYC0tIHN0YW5kYXJkLmNmZworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHRoZSBNZXRhZGF0YSBpcyBzdG9yZWQgaW4gcmVjaXBlLXNwYWNlLCB5b3UgbXVzdCB0YWtlCisgICAgICAgICAgICBzdGVwcyB0byBlbnN1cmUgQml0QmFrZSBoYXMgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBkZWNpZGUKKyAgICAgICAgICAgIHdoYXQgZmlsZXMgdG8gZmV0Y2ggYW5kIHdoZW4gdGhleSBuZWVkIHRvIGJlIGZldGNoZWQgYWdhaW4uCisgICAgICAgICAgICBJdCBpcyBvbmx5IG5lY2Vzc2FyeSB0byBzcGVjaWZ5IHRoZSA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+CisgICAgICAgICAgICBmaWxlcyBvbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICBCaXRCYWtlIHBhcnNlcyB0aGVtIGFuZCBmZXRjaGVzIGFueSBmaWxlcyByZWZlcmVuY2VkIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPiBmaWxlcyBieSB0aGUgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYXRjaDwvZmlsZW5hbWU+LCBvciA8ZmlsZW5hbWU+a2NvbmY8L2ZpbGVuYW1lPiBjb21tYW5kcy4KKyAgICAgICAgICAgIEJlY2F1c2Ugb2YgdGhpcywgaXQgaXMgbmVjZXNzYXJ5IHRvIGJ1bXAgdGhlIHJlY2lwZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICB2YWx1ZSB3aGVuIGNoYW5naW5nIHRoZSBjb250ZW50IG9mIGZpbGVzIG5vdCBleHBsaWNpdGx5IGxpc3RlZAorICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0naW4tdHJlZS1tZXRhZGF0YSc+CisgICAgICAgIDx0aXRsZT5Jbi1UcmVlIE1ldGFkYXRhPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gc3RvcmVkIGluLXRyZWUsIHRoZSBrZXJuZWwgTWV0YWRhdGEgZmlsZXMgcmVzaWRlIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb2YgdGhlIExpbnV4IGtlcm5lbCBzb3VyY2VzLgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gZGlyZWN0b3J5IGNhbiBiZSBwcmVzZW50IGluIHRoZQorICAgICAgICAgICAgc2FtZSByZXBvc2l0b3J5IGJyYW5jaCBhcyB0aGUgc291cmNlcywKKyAgICAgICAgICAgIHN1Y2ggYXMgIm1hc3RlciIsIG9yIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gY2FuIGJlIGl0cyBvd24KKyAgICAgICAgICAgIG9ycGhhbiBicmFuY2guCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBBbiBvcnBoYW4gYnJhbmNoIGluIEdpdCBpcyBhIGJyYW5jaCB3aXRoIHVuaXF1ZSBoaXN0b3J5IGFuZAorICAgICAgICAgICAgICAgIGNvbnRlbnQgdG8gdGhlIG90aGVyIGJyYW5jaGVzIGluIHRoZSByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIE9ycGhhbiBicmFuY2hlcyBhcmUgdXNlZnVsIHRvIHRyYWNrIE1ldGFkYXRhIGNoYW5nZXMKKyAgICAgICAgICAgICAgICBpbmRlcGVuZGVudGx5IGZyb20gdGhlIHNvdXJjZXMgb2YgdGhlIExpbnV4IGtlcm5lbCwgd2hpbGUKKyAgICAgICAgICAgICAgICBzdGlsbCBrZWVwaW5nIHRoZW0gdG9nZXRoZXIgaW4gdGhlIHNhbWUgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkb2N1bWVudCwgd2Ugd2lsbCBkaXNjdXNzIGFsbAorICAgICAgICAgICAgaW4tdHJlZSBNZXRhZGF0YSBhcyByZXNpZGluZyBiZWxvdyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NmZy9rZXJuZWwtY2FjaGU8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHRoYXQgc2hvd3MgaG93IGEgdHJpdmlhbCB0cmVlIG9mIE1ldGFkYXRhCisgICAgICAgICAgICBpcyBzdG9yZWQgaW4gYSBjdXN0b20gTGludXgga2VybmVsIEdpdCByZXBvc2l0b3J5OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLworICAgICBgLS0gY2ZnCisgICAgICAgICBgLS0ga2VybmVsLWNhY2hlCisgICAgICAgICAgICAgfC0tIGJzcC1zdGFuZGFyZC5zY2MKKyAgICAgICAgICAgICB8LS0gYnNwLmNmZworICAgICAgICAgICAgIGAtLSBzdGFuZGFyZC5jZmcKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gdXNlIGEgYnJhbmNoIGRpZmZlcmVudCBmcm9tIHdoZXJlIHRoZSBzb3VyY2VzIHJlc2lkZSwKKyAgICAgICAgICAgIHNwZWNpZnkgdGhlIGJyYW5jaCBpbiB0aGUgPGZpbGVuYW1lPktNRVRBPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgIGluIHlvdXIgTGludXgga2VybmVsIHJlY2lwZS4KKyAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS01FVEEgPSAibWV0YSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRvIHVzZSB0aGUgc2FtZSBicmFuY2ggYXMgdGhlIHNvdXJjZXMsIHNldAorICAgICAgICAgICAgPGZpbGVuYW1lPktNRVRBPC9maWxlbmFtZT4gdG8gYW4gZW1wdHkgc3RyaW5nOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBLTUVUQSA9ICIiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCB5b3VyIG93biBzb3VyY2VzIGFuZCB3YW50IHRvIGNyZWF0ZSBhbgorICAgICAgICAgICAgb3JwaGFuIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gYnJhbmNoLCB1c2UgdGhlc2UgY29tbWFuZHMKKyAgICAgICAgICAgIGZyb20gd2l0aGluIHlvdXIgTGludXgga2VybmVsIEdpdCByZXBvc2l0b3J5OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjaGVja291dCAtLW9ycGhhbiBtZXRhCisgICAgICQgZ2l0IHJtIC1yZiAuCisgICAgICQgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJDcmVhdGUgb3JwaGFuIG1ldGEgYnJhbmNoIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgbW9kaWZ5IHRoZSBNZXRhZGF0YSBpbiB0aGUgbGludXgteW9jdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gYnJhbmNoLCB5b3UgbXVzdCBub3QgZm9yZ2V0IHRvIHVwZGF0ZQorICAgICAgICAgICAgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDUkVWJz48ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgc3RhdGVtZW50cyBpbiB0aGUga2VybmVsJ3MgcmVjaXBlLgorICAgICAgICAgICAgSW4gcGFydGljdWxhciwgeW91IG5lZWQgdG8gdXBkYXRlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ1JFVl9tZXRhPC9maWxlbmFtZT4gdmFyaWFibGUgdG8gbWF0Y2ggdGhlIGNvbW1pdCBpbgorICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5LTUVUQTwvZmlsZW5hbWU+IGJyYW5jaCB5b3Ugd2lzaCB0byB1c2UuCisgICAgICAgICAgICBDaGFuZ2luZyB0aGUgZGF0YSBpbiB0aGVzZSBicmFuY2hlcyBhbmQgbm90IHVwZGF0aW5nIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+IHN0YXRlbWVudHMgdG8gbWF0Y2ggd2lsbCBjYXVzZSB0aGUKKyAgICAgICAgICAgIGJ1aWxkIHRvIGZldGNoIGFuIG9sZGVyIGNvbW1pdC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2tlcm5lbC1tZXRhZGF0YS1zeW50YXgnPgorICAgIDx0aXRsZT5LZXJuZWwgTWV0YWRhdGEgU3ludGF4PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUga2VybmVsIE1ldGFkYXRhIGNvbnNpc3RzIG9mIHRocmVlIHByaW1hcnkgdHlwZXMgb2YgZmlsZXM6CisgICAgICAgIDxmaWxlbmFtZT5zY2M8L2ZpbGVuYW1lPgorICAgICAgICA8Zm9vdG5vdGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2NjPC9maWxlbmFtZT4gc3RhbmRzIGZvciBTZXJpZXMgQ29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIENvbnRyb2wsIGJ1dCB0aGUgbmFtaW5nIGhhcyBsZXNzIHNpZ25pZmljYW5jZSBpbiB0aGUKKyAgICAgICAgICAgICAgICBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRoZSB0b29saW5nIHRoYW4gaXQgaGFkIGluIHRoZQorICAgICAgICAgICAgICAgIHBhc3QuCisgICAgICAgICAgICAgICAgQ29uc2lkZXIgPGZpbGVuYW1lPnNjYzwvZmlsZW5hbWU+IGZpbGVzIHRvIGJlIGRlc2NyaXB0aW9uIGZpbGVzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2Zvb3Rub3RlPgorICAgICAgICBkZXNjcmlwdGlvbiBmaWxlcywgY29uZmlndXJhdGlvbiBmcmFnbWVudHMsIGFuZCBwYXRjaGVzLgorICAgICAgICBUaGUgPGZpbGVuYW1lPnNjYzwvZmlsZW5hbWU+IGZpbGVzIGRlZmluZSB2YXJpYWJsZXMgYW5kIGluY2x1ZGUgb3IKKyAgICAgICAgb3RoZXJ3aXNlIHJlZmVyZW5jZSBhbnkgb2YgdGhlIHRocmVlIGZpbGUgdHlwZXMuCisgICAgICAgIFRoZSBkZXNjcmlwdGlvbiBmaWxlcyBhcmUgdXNlZCB0byBhZ2dyZWdhdGUgYWxsIHR5cGVzIG9mIGtlcm5lbAorICAgICAgICBNZXRhZGF0YSBpbnRvCisgICAgICAgIHdoYXQgdWx0aW1hdGVseSBkZXNjcmliZXMgdGhlIHNvdXJjZXMgYW5kIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVkCisgICAgICAgIHRvIGJ1aWxkIGEgTGludXgga2VybmVsIHRhaWxvcmVkIHRvIGEgc3BlY2lmaWMgbWFjaGluZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5zY2M8L2ZpbGVuYW1lPiBkZXNjcmlwdGlvbiBmaWxlcyBhcmUgdXNlZCB0byBkZWZpbmUgdHdvCisgICAgICAgIGZ1bmRhbWVudGFsIHR5cGVzIG9mIGtlcm5lbCBNZXRhZGF0YToKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5GZWF0dXJlczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUHMpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGZWF0dXJlcyBhZ2dyZWdhdGUgc291cmNlcyBpbiB0aGUgZm9ybSBvZiBwYXRjaGVzIGFuZCBjb25maWd1cmF0aW9uCisgICAgICAgIGZyYWdtZW50cyBpbnRvIGEgbW9kdWxhciByZXVzYWJsZSB1bml0LgorICAgICAgICBZb3UgY2FuIHVzZSBmZWF0dXJlcyB0byBpbXBsZW1lbnQgY29uY2VwdHVhbGx5IHNlcGFyYXRlIGtlcm5lbAorICAgICAgICBNZXRhZGF0YSBkZXNjcmlwdGlvbnMgc3VjaCBhcyBwdXJlIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzLAorICAgICAgICBzaW1wbGUgcGF0Y2hlcywgY29tcGxleCBmZWF0dXJlcywgYW5kIGtlcm5lbCB0eXBlcy4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0na2VybmVsLXR5cGVzJz5LZXJuZWwgdHlwZXM8L2xpbms+IGRlZmluZSBnZW5lcmFsCisgICAgICAgIGtlcm5lbCBmZWF0dXJlcyBhbmQgcG9saWN5IHRvIGJlIHJldXNlZCBpbiB0aGUgQlNQcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQlNQcyBkZWZpbmUgaGFyZHdhcmUtc3BlY2lmaWMgZmVhdHVyZXMgYW5kIGFnZ3JlZ2F0ZSB0aGVtIHdpdGgga2VybmVsCisgICAgICAgIHR5cGVzIHRvIGZvcm0gdGhlIGZpbmFsIGRlc2NyaXB0aW9uIG9mIHdoYXQgd2lsbCBiZSBhc3NlbWJsZWQgYW5kIGJ1aWx0LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGlsZSB0aGUga2VybmVsIE1ldGFkYXRhIHN5bnRheCBkb2VzIG5vdCBlbmZvcmNlIGFueSBsb2dpY2FsCisgICAgICAgIHNlcGFyYXRpb24gb2YgY29uZmlndXJhdGlvbiBmcmFnbWVudHMsIHBhdGNoZXMsIGZlYXR1cmVzIG9yIGtlcm5lbAorICAgICAgICB0eXBlcywgYmVzdCBwcmFjdGljZXMgZGljdGF0ZSBhIGxvZ2ljYWwgc2VwYXJhdGlvbiBvZiB0aGVzZSB0eXBlcworICAgICAgICBvZiBNZXRhZGF0YS4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBNZXRhZGF0YSBmaWxlIGhpZXJhcmNoeSBpcyByZWNvbW1lbmRlZDoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+YmFzZTwvcmVwbGFjZWFibGU+LworICAgICAgICBic3AvCisgICAgICAgIGNmZy8KKyAgICAgICAgZmVhdHVyZXMvCisgICAgICAgIGt0eXBlcy8KKyAgICAgICAgcGF0Y2hlcy8KKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmJzcDwvZmlsZW5hbWU+IGRpcmVjdG9yeSBjb250YWlucyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0nYnNwLWRlc2NyaXB0aW9ucyc+QlNQIGRlc2NyaXB0aW9uczwvbGluaz4uCisgICAgICAgIFRoZSByZW1haW5pbmcgZGlyZWN0b3JpZXMgYWxsIGNvbnRhaW4gImZlYXR1cmVzIi4KKyAgICAgICAgU2VwYXJhdGluZyA8ZmlsZW5hbWU+YnNwPC9maWxlbmFtZT4gZnJvbSB0aGUgcmVzdCBvZiB0aGUgc3RydWN0dXJlCisgICAgICAgIGFpZHMgY29uY2VwdHVhbGl6aW5nIGludGVuZGVkIHVzYWdlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBVc2UgdGhlc2UgZ3VpZGVsaW5lcyB0byBoZWxwIHBsYWNlIHlvdXIgPGZpbGVuYW1lPnNjYzwvZmlsZW5hbWU+CisgICAgICAgIGRlc2NyaXB0aW9uIGZpbGVzIHdpdGhpbiB0aGUgc3RydWN0dXJlOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPklmIHlvdXIgZmlsZSBjb250YWlucworICAgICAgICAgICAgICAgIG9ubHkgY29uZmlndXJhdGlvbiBmcmFnbWVudHMsIHBsYWNlIHRoZSBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jZmc8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SWYgeW91ciBmaWxlIGNvbnRhaW5zCisgICAgICAgICAgICAgICAgb25seSBzb3VyY2UtY29kZSBmaXhlcywgcGxhY2UgdGhlIGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhdGNoZXM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SWYgeW91ciBmaWxlIGVuY2Fwc3VsYXRlcworICAgICAgICAgICAgICAgIGEgbWFqb3IgZmVhdHVyZSwgb2Z0ZW4gY29tYmluaW5nIHNvdXJjZXMgYW5kIGNvbmZpZ3VyYXRpb25zLAorICAgICAgICAgICAgICAgIHBsYWNlIHRoZSBmaWxlIGluIDxmaWxlbmFtZT5mZWF0dXJlczwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JZiB5b3VyIGZpbGUgYWdncmVnYXRlcworICAgICAgICAgICAgICAgIG5vbi1oYXJkd2FyZSBjb25maWd1cmF0aW9uIGFuZCBwYXRjaGVzIGluIG9yZGVyIHRvIGRlZmluZSBhCisgICAgICAgICAgICAgICAgYmFzZSBrZXJuZWwgcG9saWN5IG9yIG1ham9yIGtlcm5lbCB0eXBlIHRvIGJlIHJldXNlZCBhY3Jvc3MKKyAgICAgICAgICAgICAgICBtdWx0aXBsZSBCU1BzLCBwbGFjZSB0aGUgZmlsZSBpbiA8ZmlsZW5hbWU+a3R5cGVzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGVzZSBkaXN0aW5jdGlvbnMgY2FuIGVhc2lseSBiZWNvbWUgYmx1cnJlZCAtIGVzcGVjaWFsbHkgYXMKKyAgICAgICAgb3V0LW9mLXRyZWUgZmVhdHVyZXMgc2xvd2x5IG1lcmdlIHVwc3RyZWFtIG92ZXIgdGltZS4KKyAgICAgICAgQWxzbywgcmVtZW1iZXIgdGhhdCBob3cgdGhlIGRlc2NyaXB0aW9uIGZpbGVzIGFyZSBwbGFjZWQgaXMKKyAgICAgICAgYSBwdXJlbHkgbG9naWNhbCBvcmdhbml6YXRpb24gYW5kIGhhcyBubyBpbXBhY3Qgb24gdGhlIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgb2YgdGhlIGtlcm5lbCBNZXRhZGF0YS4KKyAgICAgICAgVGhlcmUgaXMgbm8gaW1wYWN0IGJlY2F1c2UgYWxsIG9mIDxmaWxlbmFtZT5jZmc8L2ZpbGVuYW1lPiwKKyAgICAgICAgPGZpbGVuYW1lPmZlYXR1cmVzPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5wYXRjaGVzPC9maWxlbmFtZT4sIGFuZAorICAgICAgICA8ZmlsZW5hbWU+a3R5cGVzPC9maWxlbmFtZT4sIGNvbnRhaW4gImZlYXR1cmVzIiBhcyBmYXIgYXMgdGhlIGtlcm5lbAorICAgICAgICB0b29scyBhcmUgY29uY2VybmVkLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBQYXRocyB1c2VkIGluIGtlcm5lbCBNZXRhZGF0YSBmaWxlcyBhcmUgcmVsYXRpdmUgdG8KKyAgICAgICAgPGZpbGVuYW1lPiZsdDtiYXNlJmd0OzwvZmlsZW5hbWU+LCB3aGljaCBpcyBlaXRoZXIKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTRVhUUkFQQVRIUyc+PGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgaWYgeW91IGFyZSBjcmVhdGluZyBNZXRhZGF0YSBpbgorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWNpcGUtc3BhY2UtbWV0YWRhdGEnPnJlY2lwZS1zcGFjZTwvbGluaz4sCisgICAgICAgIG9yIDxmaWxlbmFtZT5tZXRhL2NmZy9rZXJuZWwtY2FjaGUvPC9maWxlbmFtZT4gaWYgeW91IGFyZSBjcmVhdGluZworICAgICAgICBNZXRhZGF0YSA8bGluayBsaW5rZW5kPSdpbi10cmVlLW1ldGFkYXRhJz5pbi10cmVlPC9saW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nY29uZmlndXJhdGlvbic+CisgICAgICAgIDx0aXRsZT5Db25maWd1cmF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBzaW1wbGVzdCB1bml0IG9mIGtlcm5lbCBNZXRhZGF0YSBpcyB0aGUgY29uZmlndXJhdGlvbi1vbmx5CisgICAgICAgICAgICBmZWF0dXJlLgorICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlIExpbnV4IGtlcm5lbCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICBwYXJhbWV0ZXJzIGluIGEgY29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlCisgICAgICAgICAgICAoPGZpbGVuYW1lPi5jZmc8L2ZpbGVuYW1lPikgYW5kIGEgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICB0aGF0IGRlc2NyaWJlcyB0aGUgZnJhZ21lbnQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBTeW1tZXRyaWMgTXVsdGktUHJvY2Vzc2luZyAoU01QKSBmcmFnbWVudCBpbmNsdWRlZCBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE5PC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkKKyAgICAgICAgICAgIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgdHdvIGZpbGVzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBjZmcvc21wLnNjYzoKKyAgICAgICAgZGVmaW5lIEtGRUFUVVJFX0RFU0NSSVBUSU9OICJFbmFibGUgU01QIgorICAgICAgICBkZWZpbmUgS0ZFQVRVUkVfQ09NUEFUSUJJTElUWSBhbGwKKworICAgICAgICBrY29uZiBoYXJkd2FyZSBzbXAuY2ZnCisKKyAgICAgY2ZnL3NtcC5jZmc6CisgICAgICAgIENPTkZJR19TTVA9eQorICAgICAgICBDT05GSUdfU0NIRURfU01UPXkKKyAgICAgICAgIyBJbmNyZWFzZSBkZWZhdWx0IE5SX0NQVVMgZnJvbSA4IHRvIDY0IHNvIHRoYXQgcGxhdGZvcm0gd2l0aAorICAgICAgICAjIG1vcmUgdGhhbiA4IHByb2Nlc3NvcnMgY2FuIGJlIGFsbCBhY3RpdmF0ZWQgYXQgYm9vdCB0aW1lCisgICAgICAgIENPTkZJR19OUl9DUFVTPTY0CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBZb3UgY2FuIGZpbmQgaW5mb3JtYXRpb24gb24gY29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1jb25maWctZnJhZ21lbnRzJz5DcmVhdGluZyBDb25maWd1cmF0aW9uIEZyYWdtZW50czwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgYW5kIGluCisgICAgICAgICAgICB0aGUgIjxsaW5rIGxpbmtlbmQ9J2dlbmVyYXRpbmctY29uZmlndXJhdGlvbi1maWxlcyc+R2VuZXJhdGluZyBDb25maWd1cmF0aW9uIEZpbGVzPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZWFybGllciBpbiB0aGlzIG1hbnVhbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtGRUFUVVJFX0RFU0NSSVBUSU9OJz48ZmlsZW5hbWU+S0ZFQVRVUkVfREVTQ1JJUFRJT048L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICBwcm92aWRlcyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBmcmFnbWVudC4KKyAgICAgICAgICAgIEhpZ2hlciBsZXZlbCBrZXJuZWwgdG9vbHMgdXNlIHRoaXMgZGVzY3JpcHRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+a2NvbmY8L2ZpbGVuYW1lPiBjb21tYW5kIGlzIHVzZWQgdG8gaW5jbHVkZSB0aGUKKyAgICAgICAgICAgIGFjdHVhbCBjb25maWd1cmF0aW9uIGZyYWdtZW50IGluIGFuIDxmaWxlbmFtZT4uc2NjPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZpbGUsIGFuZCB0aGUgImhhcmR3YXJlIiBrZXl3b3JkIGlkZW50aWZpZXMgdGhlIGZyYWdtZW50IGFzCisgICAgICAgICAgICBiZWluZyBoYXJkd2FyZSBlbmFibGluZywgYXMgb3Bwb3NlZCB0byBnZW5lcmFsIHBvbGljeSwKKyAgICAgICAgICAgIHdoaWNoIHdvdWxkIHVzZSB0aGUgIm5vbi1oYXJkd2FyZSIga2V5d29yZC4KKyAgICAgICAgICAgIFRoZSBkaXN0aW5jdGlvbiBpcyBtYWRlIGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgdmFsaWRhdGlvbiB0b29scywgd2hpY2ggd2FybiB5b3UgaWYgYSBoYXJkd2FyZSBmcmFnbWVudAorICAgICAgICAgICAgb3ZlcnJpZGVzIGEgcG9saWN5IHNldCBieSBhIG5vbi1oYXJkd2FyZSBmcmFnbWVudC4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBkZXNjcmlwdGlvbiBmaWxlIGNhbiBpbmNsdWRlIG11bHRpcGxlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmtjb25mPC9maWxlbmFtZT4gc3RhdGVtZW50cywgb25lIHBlciBmcmFnbWVudC4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2dlbmVyYXRpbmctY29uZmlndXJhdGlvbi1maWxlcyc+R2VuZXJhdGluZyBDb25maWd1cmF0aW9uIEZpbGVzPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24sIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgQml0QmFrZSBjb21tYW5kIHRvIGF1ZGl0IHlvdXIKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBrZXJuZWxfY29uZmlnY2hlY2sgLWYKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdwYXRjaGVzJz4KKyAgICAgICAgPHRpdGxlPlBhdGNoZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUGF0Y2ggZGVzY3JpcHRpb25zIGFyZSB2ZXJ5IHNpbWlsYXIgdG8gY29uZmlndXJhdGlvbiBmcmFnbWVudAorICAgICAgICAgICAgZGVzY3JpcHRpb25zLCB3aGljaCBhcmUgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLgorICAgICAgICAgICAgSG93ZXZlciwgaW5zdGVhZCBvZiBhIDxmaWxlbmFtZT4uY2ZnPC9maWxlbmFtZT4gZmlsZSwgdGhlc2UKKyAgICAgICAgICAgIGRlc2NyaXB0aW9ucyB3b3JrIHdpdGggc291cmNlIHBhdGNoZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgdHlwaWNhbCBwYXRjaCBpbmNsdWRlcyBhIGRlc2NyaXB0aW9uIGZpbGUgYW5kIHRoZSBwYXRjaCBpdHNlbGY6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHBhdGNoZXMvbXlwYXRjaC5zY2M6CisgICAgICAgIHBhdGNoIG15cGF0Y2gucGF0Y2gKKworICAgICBwYXRjaGVzL215cGF0Y2gucGF0Y2g6CisgICAgICAgIDxyZXBsYWNlYWJsZT50eXBpY2FsLXBhdGNoPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFlvdSBjYW4gY3JlYXRlIHRoZSB0eXBpY2FsIDxmaWxlbmFtZT4ucGF0Y2g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZmlsZSB1c2luZyA8ZmlsZW5hbWU+ZGlmZiAtTnVycDwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IGZvcm1hdC1wYXRjaDwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZGVzY3JpcHRpb24gZmlsZSBjYW4gaW5jbHVkZSBtdWx0aXBsZSBwYXRjaCBzdGF0ZW1lbnRzLAorICAgICAgICAgICAgb25lIHBlciBwYXRjaC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdmZWF0dXJlcyc+CisgICAgICAgIDx0aXRsZT5GZWF0dXJlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGZWF0dXJlcyBhcmUgY29tcGxleCBrZXJuZWwgTWV0YWRhdGEgdHlwZXMgdGhhdCBjb25zaXN0CisgICAgICAgICAgICBvZiBjb25maWd1cmF0aW9uIGZyYWdtZW50cyAoPGZpbGVuYW1lPmtjb25mPC9maWxlbmFtZT4pLCBwYXRjaGVzCisgICAgICAgICAgICAoPGZpbGVuYW1lPnBhdGNoPC9maWxlbmFtZT4pLCBhbmQgcG9zc2libHkgb3RoZXIgZmVhdHVyZQorICAgICAgICAgICAgZGVzY3JpcHRpb24gZmlsZXMgKDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4pLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyBhIGZlYXR1cmUgZGVzY3JpcHRpb24gZmlsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZmVhdHVyZXMvbXlmZWF0dXJlLnNjYworICAgICAgICBkZWZpbmUgS0ZFQVRVUkVfREVTQ1JJUFRJT04gIkVuYWJsZSBteWZlYXR1cmUiCisKKyAgICAgICAgcGF0Y2ggMDAwMS1teWZlYXR1cmUtY29yZS5wYXRjaAorICAgICAgICBwYXRjaCAwMDAyLW15ZmVhdHVyZS1pbnRlcmZhY2UucGF0Y2gKKworICAgICAgICBpbmNsdWRlIGNmZy9teWZlYXR1cmVfZGVwZW5kZW5jeS5zY2MKKyAgICAgICAga2NvbmYgbm9uLWhhcmR3YXJlIG15ZmVhdHVyZS5jZmcKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBzaG93cyBob3cgdGhlIDxmaWxlbmFtZT5wYXRjaDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPmtjb25mPC9maWxlbmFtZT4gY29tbWFuZHMgYXJlIHVzZWQgYXMgd2VsbCBhcworICAgICAgICAgICAgaG93IGFuIGFkZGl0aW9uYWwgZmVhdHVyZSBkZXNjcmlwdGlvbiBmaWxlIGlzIGluY2x1ZGVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUeXBpY2FsbHksIGZlYXR1cmVzIGFyZSBsZXNzIGdyYW51bGFyIHRoYW4gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgZnJhZ21lbnRzIGFuZCBhcmUgbW9yZSBsaWtlbHkgdGhhbiBjb25maWd1cmF0aW9uIGZyYWdtZW50cworICAgICAgICAgICAgYW5kIHBhdGNoZXMgdG8gYmUgdGhlIHR5cGVzIG9mIHRoaW5ncyB5b3Ugd2FudCB0byBzcGVjaWZ5CisgICAgICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPktFUk5FTF9GRUFUVVJFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIG9mIHRoZQorICAgICAgICAgICAgTGludXgga2VybmVsIHJlY2lwZS4KKyAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWtlcm5lbC1tZXRhZGF0YS1pbi1hLXJlY2lwZSc+VXNpbmcgS2VybmVsIE1ldGFkYXRhIGluIGEgUmVjaXBlPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZWFybGllciBpbiB0aGUgbWFudWFsLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2tlcm5lbC10eXBlcyc+CisgICAgICAgIDx0aXRsZT5LZXJuZWwgVHlwZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBrZXJuZWwgdHlwZSBkZWZpbmVzIGEgaGlnaC1sZXZlbCBrZXJuZWwgcG9saWN5IGJ5CisgICAgICAgICAgICBhZ2dyZWdhdGluZyBub24taGFyZHdhcmUgY29uZmlndXJhdGlvbiBmcmFnbWVudHMgd2l0aAorICAgICAgICAgICAgcGF0Y2hlcyB5b3Ugd2FudCB0byB1c2Ugd2hlbiBidWlsZGluZyBhIExpbnV4IGtlcm5lbHMgb2YgYQorICAgICAgICAgICAgc3BlY2lmaWMgdHlwZS4KKyAgICAgICAgICAgIFN5bnRhY3RpY2FsbHksIGtlcm5lbCB0eXBlcyBhcmUgbm8gZGlmZmVyZW50IHRoYW4gZmVhdHVyZXMKKyAgICAgICAgICAgIGFzIGRlc2NyaWJlZCBpbiB0aGUgIjxsaW5rIGxpbmtlbmQ9J2ZlYXR1cmVzJz5GZWF0dXJlczwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5MSU5VWF9LRVJORUxfVFlQRTwvZmlsZW5hbWU+IHZhcmlhYmxlIGluIHRoZSBrZXJuZWwKKyAgICAgICAgICAgIHJlY2lwZSBzZWxlY3RzIHRoZSBrZXJuZWwgdHlwZS4KKyAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWtlcm5lbC1tZXRhZGF0YS1pbi1hLXJlY2lwZSc+VXNpbmcgS2VybmVsIE1ldGFkYXRhIGluIGEgUmVjaXBlPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xOTwvZmlsZW5hbWU+CisgICAgICAgICAgICB0cmVlIGRlZmluZXMgdGhyZWUga2VybmVsIHR5cGVzOiAic3RhbmRhcmQiLAorICAgICAgICAgICAgInRpbnkiLCBhbmQgInByZWVtcHQtcnQiOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+InN0YW5kYXJkIjoKKyAgICAgICAgICAgICAgICAgICAgSW5jbHVkZXMgdGhlIGdlbmVyaWMgTGludXgga2VybmVsIHBvbGljeSBvZiB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgUHJvamVjdCBsaW51eC15b2N0byBrZXJuZWwgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBwb2xpY3kgaW5jbHVkZXMsIGFtb25nIG90aGVyIHRoaW5ncywgd2hpY2ggZmlsZQorICAgICAgICAgICAgICAgICAgICBzeXN0ZW1zLCBuZXR3b3JraW5nIG9wdGlvbnMsIGNvcmUga2VybmVsIGZlYXR1cmVzLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgZGVidWdnaW5nIGFuZCB0cmFjaW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPiJwcmVlbXB0LXJ0IjoKKyAgICAgICAgICAgICAgICAgICAgQXBwbGllcyB0aGUgPGZpbGVuYW1lPlBSRUVNUFRfUlQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBwYXRjaGVzIGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlcXVpcmVkIHRvCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGEgcmVhbC10aW1lIExpbnV4IGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBrZXJuZWwgdHlwZSBpbmhlcml0cyBmcm9tIHRoZSAic3RhbmRhcmQiIGtlcm5lbCB0eXBlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+InRpbnkiOgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIGEgYmFyZSBtaW5pbXVtIGNvbmZpZ3VyYXRpb24gbWVhbnQgdG8gc2VydmUgYXMgYQorICAgICAgICAgICAgICAgICAgICBiYXNlIGZvciB2ZXJ5IHNtYWxsIExpbnV4IGtlcm5lbHMuCisgICAgICAgICAgICAgICAgICAgIFRoZSAidGlueSIga2VybmVsIHR5cGUgaXMgaW5kZXBlbmRlbnQgZnJvbSB0aGUgInN0YW5kYXJkIgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBBbHRob3VnaCB0aGUgInRpbnkiIGtlcm5lbCB0eXBlIGRvZXMgbm90IGN1cnJlbnRseSBpbmNsdWRlCisgICAgICAgICAgICAgICAgICAgIGFueSBzb3VyY2UgY2hhbmdlcywgaXQgbWlnaHQgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlICJzdGFuZGFyZCIga2VybmVsIHR5cGUgaXMgZGVmaW5lZCBieQorICAgICAgICAgICAgPGZpbGVuYW1lPnN0YW5kYXJkLnNjYzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIEluY2x1ZGUgdGhpcyBrZXJuZWwgdHlwZSBmcmFnbWVudCB0byBnZXQgdGhlIHN0YW5kYXJkIGZlYXR1cmVzIGFuZAorICAgICAjIGNvbmZpZ3VyYXRpb24gdmFsdWVzLgorCisgICAgICMgSW5jbHVkZSBhbGwgc3RhbmRhcmQgZmVhdHVyZXMKKyAgICAgaW5jbHVkZSBzdGFuZGFyZC1ub2NmZy5zY2MKKworICAgICBrY29uZiBub24taGFyZHdhcmUgc3RhbmRhcmQuY2ZnCisKKyAgICAgIyBpbmRpdmlkdWFsIGNmZyBibG9jayBzZWN0aW9uCisgICAgIGluY2x1ZGUgY2ZnL2ZzL2RldnRtcGZzLnNjYworICAgICBpbmNsdWRlIGNmZy9mcy9kZWJ1Z2ZzLnNjYworICAgICBpbmNsdWRlIGNmZy9mcy9idHJmcy5zY2MKKyAgICAgaW5jbHVkZSBjZmcvZnMvZXh0Mi5zY2MKKyAgICAgaW5jbHVkZSBjZmcvZnMvZXh0My5zY2MKKyAgICAgaW5jbHVkZSBjZmcvZnMvZXh0NC5zY2MKKworICAgICBpbmNsdWRlIGNmZy9uZXQvaXB2Ni5zY2MKKyAgICAgaW5jbHVkZSBjZmcvbmV0L2lwX25mLnNjYworICAgICBpbmNsdWRlIGNmZy9uZXQvaXA2X25mLnNjYworICAgICBpbmNsdWRlIGNmZy9uZXQvYnJpZGdlLnNjYworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyB3aXRoIGFueSA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+IGZpbGUsIGEKKyAgICAgICAgICAgIGtlcm5lbCB0eXBlIGRlZmluaXRpb24gY2FuIGFnZ3JlZ2F0ZSBvdGhlcgorICAgICAgICAgICAgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPiBmaWxlcyB3aXRoCisgICAgICAgICAgICA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+IGNvbW1hbmRzLgorICAgICAgICAgICAgVGhlc2UgZGVmaW5pdGlvbnMgY2FuIGFsc28gZGlyZWN0bHkgcHVsbCBpbgorICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmcmFnbWVudHMgYW5kIHBhdGNoZXMgd2l0aCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5rY29uZjwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+cGF0Y2g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgY29tbWFuZHMsIHJlc3BlY3RpdmVseS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgSXQgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSB0byBjcmVhdGUgYSBrZXJuZWwgdHlwZQorICAgICAgICAgICAgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgVGhlIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBmaWxlIGNhbiBpbXBsaWNpdGx5IGRlZmluZQorICAgICAgICAgICAgdGhlIGtlcm5lbCB0eXBlIHVzaW5nIGEgPGZpbGVuYW1lPmRlZmluZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtUWVBFJz5LVFlQRTwvdWxpbms+IG15a3R5cGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgbGluZS4KKyAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J2JzcC1kZXNjcmlwdGlvbnMnPkJTUCBEZXNjcmlwdGlvbnM8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdic3AtZGVzY3JpcHRpb25zJz4KKyAgICAgICAgPHRpdGxlPkJTUCBEZXNjcmlwdGlvbnM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQlNQIGRlc2NyaXB0aW9ucyBjb21iaW5lIGtlcm5lbCB0eXBlcyB3aXRoIGhhcmR3YXJlLXNwZWNpZmljCisgICAgICAgICAgICBmZWF0dXJlcy4KKyAgICAgICAgICAgIFRoZSBoYXJkd2FyZS1zcGVjaWZpYyBwb3J0aW9uIGlzIHR5cGljYWxseSBkZWZpbmVkCisgICAgICAgICAgICBpbmRlcGVuZGVudGx5LCBhbmQgdGhlbiBhZ2dyZWdhdGVkIHdpdGggZWFjaCBzdXBwb3J0ZWQga2VybmVsCisgICAgICAgICAgICB0eXBlLgorICAgICAgICAgICAgQ29uc2lkZXIgdGhpcyBzaW1wbGUgQlNQIGRlc2NyaXB0aW9uIHRoYXQgc3VwcG9ydHMgdGhlCisgICAgICAgICAgICA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPiBtYWNoaW5lOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPi5zY2M6CisgICAgICAgIGRlZmluZSBLTUFDSElORSA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPgorICAgICAgICBkZWZpbmUgS1RZUEUgc3RhbmRhcmQKKyAgICAgICAgZGVmaW5lIEtBUkNIIGkzODYKKworICAgICAgICBrY29uZiA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPi5jZmcKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEV2ZXJ5IEJTUCBkZXNjcmlwdGlvbiBzaG91bGQgZGVmaW5lIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtNQUNISU5FJz48ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtUWVBFJz48ZmlsZW5hbWU+S1RZUEU8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgYW5kIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LQVJDSCc+PGZpbGVuYW1lPktBUkNIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgVGhlc2UgdmFyaWFibGVzIGFsbG93IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGlkZW50aWZ5CisgICAgICAgICAgICB0aGUgZGVzY3JpcHRpb24gYXMgbWVldGluZyB0aGUgY3JpdGVyaWEgc2V0IGJ5IHRoZSByZWNpcGUgYmVpbmcKKyAgICAgICAgICAgIGJ1aWx0LgorICAgICAgICAgICAgVGhpcyBzaW1wbGUgZXhhbXBsZSBzdXBwb3J0cyB0aGUgIm15YnNwIiBtYWNoaW5lIGZvciB0aGUgInN0YW5kYXJkIgorICAgICAgICAgICAga2VybmVsIGFuZCB0aGUgImkzODYiIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmUgYXdhcmUgdGhhdCBhIGhhcmQgbGluayBiZXR3ZWVuIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPktUWVBFPC9maWxlbmFtZT4gdmFyaWFibGUgYW5kIGEga2VybmVsIHR5cGUKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uIGZpbGUgZG9lcyBub3QgZXhpc3QuCisgICAgICAgICAgICBUaHVzLCBpZiB5b3UgZG8gbm90IGhhdmUga2VybmVsIHR5cGVzIGRlZmluZWQgaW4geW91ciBrZXJuZWwKKyAgICAgICAgICAgIE1ldGFkYXRhLCB5b3Ugb25seSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBrZXJuZWwgcmVjaXBlJ3MKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MSU5VWF9LRVJORUxfVFlQRSc+PGZpbGVuYW1lPkxJTlVYX0tFUk5FTF9UWVBFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgdmFyaWFibGUgYW5kIHRoZSA8ZmlsZW5hbWU+S1RZUEU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpbiB0aGUKKyAgICAgICAgICAgIEJTUCBkZXNjcmlwdGlvbiBmaWxlIG1hdGNoLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgRnV0dXJlIHZlcnNpb25zIG9mIHRoZSB0b29saW5nIG1ha2UgdGhlIHNwZWNpZmljYXRpb24gb2YKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S1RZUEU8L2ZpbGVuYW1lPiBpbiB0aGUgQlNQIG9wdGlvbmFsLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgZGlkIHdhbnQgdG8gc2VwYXJhdGUgeW91ciBrZXJuZWwgcG9saWN5IGZyb20geW91cgorICAgICAgICAgICAgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgeW91IGNvdWxkIGRvIHNvIGJ5IHNwZWNpZnlpbmcgYSBrZXJuZWwKKyAgICAgICAgICAgIHR5cGUsIHN1Y2ggYXMgInN0YW5kYXJkIiBhbmQgaW5jbHVkaW5nIHRoYXQgZGVzY3JpcHRpb24gZmlsZQorICAgICAgICAgICAgaW4gdGhlIEJTUCBkZXNjcmlwdGlvbiBmaWxlLgorICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0na2VybmVsLXR5cGVzJz5LZXJuZWwgVHlwZXM8L2xpbms+IiBzZWN0aW9uCisgICAgICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IG1pZ2h0IGFsc28gaGF2ZSBtdWx0aXBsZSBoYXJkd2FyZSBjb25maWd1cmF0aW9ucyB0aGF0IHlvdQorICAgICAgICAgICAgYWdncmVnYXRlIGludG8gYSBzaW5nbGUgaGFyZHdhcmUgZGVzY3JpcHRpb24gZmlsZSB0aGF0IHlvdQorICAgICAgICAgICAgY291bGQgaW5jbHVkZSBpbiB0aGUgQlNQIGRlc2NyaXB0aW9uIGZpbGUsIHJhdGhlciB0aGFuIHJlZmVyZW5jaW5nCisgICAgICAgICAgICBhIHNpbmdsZSA8ZmlsZW5hbWU+LmNmZzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICBDb25zaWRlciB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPi5zY2M6CisgICAgICAgIGRlZmluZSBLTUFDSElORSBteWJzcAorICAgICAgICBkZWZpbmUgS1RZUEUgc3RhbmRhcmQKKyAgICAgICAgZGVmaW5lIEtBUkNIIGkzODYKKworICAgICAgICBpbmNsdWRlIHN0YW5kYXJkLnNjYworICAgICAgICBpbmNsdWRlIDxyZXBsYWNlYWJsZT5teWJzcDwvcmVwbGFjZWFibGU+LWh3LnNjYworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgPGZpbGVuYW1lPnN0YW5kYXJkLnNjYzwvZmlsZW5hbWU+CisgICAgICAgICAgICBhZ2dyZWdhdGVzIGFsbCB0aGUgY29uZmlndXJhdGlvbiBmcmFnbWVudHMsIHBhdGNoZXMsIGFuZAorICAgICAgICAgICAgZmVhdHVyZXMgdGhhdCBtYWtlIHVwIHlvdXIgc3RhbmRhcmQga2VybmVsIHBvbGljeSB3aGVyZWFzCisgICAgICAgICAgICA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4taHcuc2NjPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGFnZ3JlZ2F0ZXMgYWxsIHRob3NlIG5lY2Vzc2FyeQorICAgICAgICAgICAgdG8gc3VwcG9ydCB0aGUgaGFyZHdhcmUgYXZhaWxhYmxlIG9uIHRoZQorICAgICAgICAgICAgPHJlcGxhY2VhYmxlPm15YnNwPC9yZXBsYWNlYWJsZT4gbWFjaGluZS4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gYnJlYWsgYSBjb21wbGV0ZQorICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGludG8gdGhlIHZhcmlvdXMKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZ2VuZXJhdGluZy1jb25maWd1cmF0aW9uLWZpbGVzJz5HZW5lcmF0aW5nIENvbmZpZ3VyYXRpb24gRmlsZXM8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTWFueSByZWFsLXdvcmxkIGV4YW1wbGVzIGFyZSBtb3JlIGNvbXBsZXguCisgICAgICAgICAgICBMaWtlIGFueSBvdGhlciA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+IGZpbGUsIEJTUAorICAgICAgICAgICAgZGVzY3JpcHRpb25zIGNhbiBhZ2dyZWdhdGUgZmVhdHVyZXMuCisgICAgICAgICAgICBDb25zaWRlciB0aGUgTWlubm93IEJTUCBkZWZpbml0aW9uIGZyb20gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xOTwvZmlsZW5hbWU+CisgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWlubm93LnNjYzoKKyAgICAgICAgaW5jbHVkZSBjZmcveDg2LnNjYworICAgICAgICBpbmNsdWRlIGZlYXR1cmVzL2VnMjB0L2VnMjB0LnNjYworICAgICAgICBpbmNsdWRlIGNmZy9kbWFlbmdpbmUuc2NjCisgICAgICAgIGluY2x1ZGUgZmVhdHVyZXMvcG93ZXIvaW50ZWwuc2NjCisgICAgICAgIGluY2x1ZGUgY2ZnL2VmaS5zY2MKKyAgICAgICAgaW5jbHVkZSBmZWF0dXJlcy91c2IvZWhjaS1oY2Quc2NjCisgICAgICAgIGluY2x1ZGUgZmVhdHVyZXMvdXNiL29oY2ktaGNkLnNjYworICAgICAgICBpbmNsdWRlIGZlYXR1cmVzL3VzYi91c2ItZ2FkZ2V0cy5zY2MKKyAgICAgICAgaW5jbHVkZSBmZWF0dXJlcy91c2IvdG91Y2hzY3JlZW4tY29tcG9zaXRlLnNjYworICAgICAgICBpbmNsdWRlIGNmZy90aW1lci9ocGV0LnNjYworICAgICAgICBpbmNsdWRlIGNmZy90aW1lci9ydGMuc2NjCisgICAgICAgIGluY2x1ZGUgZmVhdHVyZXMvbGVkcy9sZWRzLnNjYworICAgICAgICBpbmNsdWRlIGZlYXR1cmVzL3NwaS9zcGlkZXYuc2NjCisgICAgICAgIGluY2x1ZGUgZmVhdHVyZXMvaTJjL2kyY2Rldi5zY2MKKworICAgICAgICAjIEVhcmx5cHJpbnRrIGFuZCBwb3J0IGRlYnVnIHJlcXVpcmVzIDgyNTAKKyAgICAgICAga2NvbmYgaGFyZHdhcmUgY2ZnLzgyNTAuY2ZnCisKKyAgICAgICAga2NvbmYgaGFyZHdhcmUgbWlubm93LmNmZworICAgICAgICBrY29uZiBoYXJkd2FyZSBtaW5ub3ctZGV2LmNmZworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1pbm5vdy5zY2M8L2ZpbGVuYW1lPiBkZXNjcmlwdGlvbiBmaWxlIGluY2x1ZGVzCisgICAgICAgICAgICBhIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+bWlubm93LmNmZzwvZmlsZW5hbWU+KSBzcGVjaWZpYyB0byB0aGUgTWlubm93CisgICAgICAgICAgICBCU1AgYXMgd2VsbCBhcyBzZXZlcmFsIG1vcmUgZ2VuZXJhbCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICBmcmFnbWVudHMgYW5kIGZlYXR1cmVzIGVuYWJsaW5nIGhhcmR3YXJlIGZvdW5kIG9uIHRoZQorICAgICAgICAgICAgbWFjaGluZS4KKyAgICAgICAgICAgIFRoaXMgZGVzY3JpcHRpb24gZmlsZSBpcyB0aGVuIGluY2x1ZGVkIGluIGVhY2ggb2YgdGhlIHRocmVlCisgICAgICAgICAgICAibWlubm93IiBkZXNjcmlwdGlvbiBmaWxlcyBmb3IgdGhlIHN1cHBvcnRlZCBrZXJuZWwgdHlwZXMKKyAgICAgICAgICAgIChpLmUuICJzdGFuZGFyZCIsICJwcmVlbXB0LXJ0IiwgYW5kICJ0aW55IikuCisgICAgICAgICAgICBDb25zaWRlciB0aGUgIm1pbm5vdyIgZGVzY3JpcHRpb24gZm9yIHRoZSAic3RhbmRhcmQiIGtlcm5lbAorICAgICAgICAgICAgdHlwZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWlubm93LXN0YW5kYXJkLnNjYzoKKyAgICAgICAgZGVmaW5lIEtNQUNISU5FIG1pbm5vdworICAgICAgICBkZWZpbmUgS1RZUEUgc3RhbmRhcmQKKyAgICAgICAgZGVmaW5lIEtBUkNIIGkzODYKKworICAgICAgICBpbmNsdWRlIGt0eXBlcy9zdGFuZGFyZAorCisgICAgICAgIGluY2x1ZGUgbWlubm93LnNjYworCisgICAgICAgICMgRXh0cmEgbWlubm93IGNvbmZpZ3MgYWJvdmUgdGhlIG1pbmltYWwgZGVmaW5lZCBpbiBtaW5ub3cuc2NjCisgICAgICAgIGluY2x1ZGUgY2ZnL2VmaS1leHQuc2NjCisgICAgICAgIGluY2x1ZGUgZmVhdHVyZXMvbWVkaWEvbWVkaWEtYWxsLnNjYworICAgICAgICBpbmNsdWRlIGZlYXR1cmVzL3NvdW5kL3NuZF9oZGFfaW50ZWwuc2NjCisKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIHNob3VsZCByZWFsbHkgYmUgaW4gc3RhbmRhcmQuc2NjCisgICAgICAgICMgVVNCIGxpdmUtaW1hZ2Ugc3VwcG9ydAorICAgICAgICBpbmNsdWRlIGNmZy91c2ItbWFzcy1zdG9yYWdlLnNjYworICAgICAgICBpbmNsdWRlIGNmZy9ib290LWxpdmUuc2NjCisKKyAgICAgICAgIyBCYXNpYyBwcm9maWxpbmcKKyAgICAgICAgaW5jbHVkZSBmZWF0dXJlcy9sYXRlbmN5dG9wL2xhdGVuY3l0b3Auc2NjCisgICAgICAgIGluY2x1ZGUgZmVhdHVyZXMvcHJvZmlsaW5nL3Byb2ZpbGluZy5zY2MKKworICAgICAgICAjIFJlcXVlc3RlZCBkcml2ZXJzIHRoYXQgZG9uJ3QgaGF2ZSBhbiBleGlzdGluZyBzY2MKKyAgICAgICAga2NvbmYgaGFyZHdhcmUgbWlubm93LWRyaXZlcnMtZXh0cmEuY2ZnCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiBjb21tYW5kIG1pZHdheSB0aHJvdWdoIHRoZSBmaWxlCisgICAgICAgICAgICBpbmNsdWRlcyB0aGUgPGZpbGVuYW1lPm1pbm5vdy5zY2M8L2ZpbGVuYW1lPiBkZXNjcmlwdGlvbiB0aGF0CisgICAgICAgICAgICBkZWZpbmVzIGFsbCBoYXJkd2FyZSBlbmFibGVtZW50cyBmb3IgdGhlIEJTUCB0aGF0IGlzIGNvbW1vbiB0byBhbGwKKyAgICAgICAgICAgIGtlcm5lbCB0eXBlcy4KKyAgICAgICAgICAgIFVzaW5nIHRoaXMgY29tbWFuZCBzaWduaWZpY2FudGx5IHJlZHVjZXMgZHVwbGljYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE5vdyBjb25zaWRlciB0aGUgIm1pbm5vdyIgZGVzY3JpcHRpb24gZm9yIHRoZSAidGlueSIga2VybmVsIHR5cGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1pbm5vdy10aW55LnNjYzoKKyAgICAgICAgZGVmaW5lIEtNQUNISU5FIG1pbm5vdworICAgICAgICBkZWZpbmUgS1RZUEUgdGlueQorICAgICAgICBkZWZpbmUgS0FSQ0ggaTM4NgorCisgICAgICAgIGluY2x1ZGUga3R5cGVzL3RpbnkKKworICAgICAgICBpbmNsdWRlIG1pbm5vdy5zY2MKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEFzIHlvdSBtaWdodCBleHBlY3QsIHRoZSAidGlueSIgZGVzY3JpcHRpb24gaW5jbHVkZXMgcXVpdGUgYQorICAgICAgICAgICAgYml0IGxlc3MuCisgICAgICAgICAgICBJbiBmYWN0LCBpdCBpbmNsdWRlcyBvbmx5IHRoZSBtaW5pbWFsIHBvbGljeSBkZWZpbmVkIGJ5IHRoZQorICAgICAgICAgICAgInRpbnkiIGtlcm5lbCB0eXBlIGFuZCB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiByZXF1aXJlZAorICAgICAgICAgICAgZm9yIGJvb3RpbmcgdGhlIG1hY2hpbmUgYWxvbmcgd2l0aCB0aGUgbW9zdCBiYXNpYyBmdW5jdGlvbmFsaXR5IG9mCisgICAgICAgICAgICB0aGUgc3lzdGVtIGFzIGRlZmluZWQgaW4gdGhlIGJhc2UgIm1pbm5vdyIgZGVzY3JpcHRpb24gZmlsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTm90aWNlIGFnYWluIHRoZSB0aHJlZSBjcml0aWNhbCB2YXJpYWJsZXM6CisgICAgICAgICAgICA8ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPktUWVBFPC9maWxlbmFtZT4sCisgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPktBUkNIPC9maWxlbmFtZT4uCisgICAgICAgICAgICBPZiB0aGVzZSB2YXJpYWJsZXMsIG9ubHkgdGhlIDxmaWxlbmFtZT5LVFlQRTwvZmlsZW5hbWU+IGhhcyBjaGFuZ2VkLgorICAgICAgICAgICAgSXQgaXMgbm93IHNldCB0byAidGlueSIuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdvcmdhbml6aW5nLXlvdXItc291cmNlJz4KKyAgICA8dGl0bGU+T3JnYW5pemluZyBZb3VyIFNvdXJjZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgTWFueSByZWNpcGVzIGJhc2VkIG9uIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tY3VzdG9tLmJiPC9maWxlbmFtZT4KKyAgICAgICAgcmVjaXBlIHVzZSBMaW51eCBrZXJuZWwgc291cmNlcyB0aGF0IGhhdmUgb25seSBhIHNpbmdsZQorICAgICAgICBicmFuY2ggLSAibWFzdGVyIi4KKyAgICAgICAgVGhpcyB0eXBlIG9mIHJlcG9zaXRvcnkgc3RydWN0dXJlIGlzIGZpbmUgZm9yIGxpbmVhciBkZXZlbG9wbWVudAorICAgICAgICBzdXBwb3J0aW5nIGEgc2luZ2xlIG1hY2hpbmUgYW5kIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgSG93ZXZlciwgaWYgeW91IHdvcmsgd2l0aCBtdWx0aXBsZSBib2FyZHMgYW5kIGFyY2hpdGVjdHVyZXMsCisgICAgICAgIGEga2VybmVsIHNvdXJjZSByZXBvc2l0b3J5IHdpdGggbXVsdGlwbGUgYnJhbmNoZXMgaXMgbW9yZQorICAgICAgICBlZmZpY2llbnQuCisgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBuZWVkIGEgc2VyaWVzIG9mIHBhdGNoZXMgZm9yIG9uZSBib2FyZCB0byBib290LgorICAgICAgICBTb21ldGltZXMsIHRoZXNlIHBhdGNoZXMgYXJlIHdvcmtzLWluLXByb2dyZXNzIG9yIGZ1bmRhbWVudGFsbHkgd3JvbmcsCisgICAgICAgIHlldCB0aGV5IGFyZSBzdGlsbCBuZWNlc3NhcnkgZm9yIHNwZWNpZmljIGJvYXJkcy4KKyAgICAgICAgSW4gdGhlc2Ugc2l0dWF0aW9ucywgeW91IG1vc3QgbGlrZWx5IGRvIG5vdCB3YW50IHRvIGluY2x1ZGUgdGhlc2UKKyAgICAgICAgcGF0Y2hlcyBpbiBldmVyeSBrZXJuZWwgeW91IGJ1aWxkIChpLmUuIGhhdmUgdGhlIHBhdGNoZXMgYXMgcGFydCBvZgorICAgICAgICB0aGUgbG9uZSAibWFzdGVyIiBicmFuY2gpLgorICAgICAgICBJdCBpcyBzaXR1YXRpb25zIGxpa2UgdGhlc2UgdGhhdCBnaXZlIHJpc2UgdG8gbXVsdGlwbGUgYnJhbmNoZXMgdXNlZAorICAgICAgICB3aXRoaW4gYSBMaW51eCBrZXJuZWwgc291cmNlcyBHaXQgcmVwb3NpdG9yeS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgUmVwb3NpdG9yeSBvcmdhbml6YXRpb24gc3RyYXRlZ2llcyBleGlzdCB0aGF0IG1heGltaXplIHNvdXJjZSByZXVzZSwKKyAgICAgICAgcmVtb3ZlIHJlZHVuZGFuY3ksIGFuZCBsb2dpY2FsbHkgb3JkZXIgeW91ciBjaGFuZ2VzLgorICAgICAgICBUaGlzIHNlY3Rpb24gcHJlc2VudHMgc3RyYXRlZ2llcyBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FbmNhcHN1bGF0aW5nIHBhdGNoZXMgaW4gYSBmZWF0dXJlIGRlc2NyaXB0aW9uCisgICAgICAgICAgICAgICAgYW5kIG9ubHkgaW5jbHVkaW5nIHRoZSBwYXRjaGVzIGluIHRoZSBCU1AgZGVzY3JpcHRpb25zIG9mCisgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2FibGUgYm9hcmRzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0aW5nIGEgbWFjaGluZSBicmFuY2ggaW4geW91cgorICAgICAgICAgICAgICAgIGtlcm5lbCBzb3VyY2UgcmVwb3NpdG9yeSBhbmQgYXBwbHlpbmcgdGhlIHBhdGNoZXMgb24gdGhhdAorICAgICAgICAgICAgICAgIGJyYW5jaCBvbmx5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0aW5nIGEgZmVhdHVyZSBicmFuY2ggaW4geW91cgorICAgICAgICAgICAgICAgIGtlcm5lbCBzb3VyY2UgcmVwb3NpdG9yeSBhbmQgbWVyZ2luZyB0aGF0IGJyYW5jaCBpbnRvIHlvdXIKKyAgICAgICAgICAgICAgICBCU1Agd2hlbiBuZWVkZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgYXBwcm9hY2ggeW91IHRha2UgaXMgZW50aXJlbHkgdXAgdG8geW91CisgICAgICAgIGFuZCBkZXBlbmRzIG9uIHdoYXQgd29ya3MgYmVzdCBmb3IgeW91ciBkZXZlbG9wbWVudCBtb2RlbC4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nZW5jYXBzdWxhdGluZy1wYXRjaGVzJz4KKyAgICAgICAgPHRpdGxlPkVuY2Fwc3VsYXRpbmcgUGF0Y2hlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBpZiB5b3UgYXJlIHJldXNpbmcgcGF0Y2hlcyBmcm9tIGFuIGV4dGVybmFsIHRyZWUgYW5kIGFyZSBub3QKKyAgICAgICAgICAgIHdvcmtpbmcgb24gdGhlIHBhdGNoZXMsIHlvdSBtaWdodCBmaW5kIHRoZSBlbmNhcHN1bGF0ZWQgZmVhdHVyZQorICAgICAgICAgICAgdG8gYmUgYXBwcm9wcmlhdGUuCisgICAgICAgICAgICBHaXZlbiB0aGlzIHNjZW5hcmlvLCB5b3UgZG8gbm90IG5lZWQgdG8gY3JlYXRlIGFueSBicmFuY2hlcyBpbiB0aGUKKyAgICAgICAgICAgIHNvdXJjZSByZXBvc2l0b3J5LgorICAgICAgICAgICAgUmF0aGVyLCB5b3UganVzdCB0YWtlIHRoZSBzdGF0aWMgcGF0Y2hlcyB5b3UgbmVlZCBhbmQgZW5jYXBzdWxhdGUKKyAgICAgICAgICAgIHRoZW0gd2l0aGluIGEgZmVhdHVyZSBkZXNjcmlwdGlvbi4KKyAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgdGhlIGZlYXR1cmUgZGVzY3JpcHRpb24sIHlvdSBzaW1wbHkgaW5jbHVkZSB0aGF0IGludG8KKyAgICAgICAgICAgIHRoZSBCU1AgZGVzY3JpcHRpb24gYXMgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2JzcC1kZXNjcmlwdGlvbnMnPkJTUCBEZXNjcmlwdGlvbnM8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjcmVhdGUgcGF0Y2hlcyBhbmQgQlNQCisgICAgICAgICAgICBkZXNjcmlwdGlvbnMgaW4gdGhlICI8bGluayBsaW5rZW5kPSdwYXRjaGVzJz5QYXRjaGVzPC9saW5rPiIgYW5kCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYnNwLWRlc2NyaXB0aW9ucyc+QlNQIERlc2NyaXB0aW9uczwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9ucy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtYWNoaW5lLWJyYW5jaGVzJz4KKyAgICAgICAgPHRpdGxlPk1hY2hpbmUgQnJhbmNoZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgaGF2ZSBtdWx0aXBsZSBtYWNoaW5lcyBhbmQgYXJjaGl0ZWN0dXJlcyB0byBzdXBwb3J0LAorICAgICAgICAgICAgb3IgeW91IGFyZSBhY3RpdmVseSB3b3JraW5nIG9uIGJvYXJkIHN1cHBvcnQsIGl0IGlzIG1vcmUKKyAgICAgICAgICAgIGVmZmljaWVudCB0byBjcmVhdGUgYnJhbmNoZXMgaW4gdGhlIHJlcG9zaXRvcnkgYmFzZWQgb24KKyAgICAgICAgICAgIGluZGl2aWR1YWwgbWFjaGluZXMuCisgICAgICAgICAgICBIYXZpbmcgbWFjaGluZSBicmFuY2hlcyBhbGxvd3MgY29tbW9uIHNvdXJjZSB0byByZW1haW4gaW4gdGhlCisgICAgICAgICAgICAibWFzdGVyIiBicmFuY2ggd2l0aCBhbnkgZmVhdHVyZXMgc3BlY2lmaWMgdG8gYSBtYWNoaW5lIHN0b3JlZAorICAgICAgICAgICAgaW4gdGhlIGFwcHJvcHJpYXRlIG1hY2hpbmUgYnJhbmNoLgorICAgICAgICAgICAgVGhpcyBvcmdhbml6YXRpb24gbWV0aG9kIGZyZWVzIHlvdSBmcm9tIGNvbnRpbnVhbGx5IHJlaW50ZWdyYXRpbmcKKyAgICAgICAgICAgIHlvdXIgcGF0Y2hlcyBpbnRvIGEgZmVhdHVyZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBhIG5ldyBicmFuY2gsIHlvdSBjYW4gc2V0IHVwIHlvdXIga2VybmVsIE1ldGFkYXRhCisgICAgICAgICAgICB0byB1c2UgdGhlIGJyYW5jaCBhIGNvdXBsZSBkaWZmZXJlbnQgd2F5cy4KKyAgICAgICAgICAgIEluIHRoZSByZWNpcGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbmV3IGJyYW5jaCBhcyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5LQlJBTkNIPC9maWxlbmFtZT4gdG8gdXNlIGZvciB0aGUgYm9hcmQgYXMKKyAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtCUkFOQ0ggPSAibXluZXdicmFuY2giCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBBbm90aGVyIG1ldGhvZCBpcyB0byB1c2UgdGhlIDxmaWxlbmFtZT5icmFuY2g8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICBpbiB0aGUgQlNQIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBteWJzcC5zY2M6CisgICAgICAgIGRlZmluZSBLTUFDSElORSBteWJzcAorICAgICAgICBkZWZpbmUgS1RZUEUgc3RhbmRhcmQKKyAgICAgICAgZGVmaW5lIEtBUkNIIGkzODYKKyAgICAgICAgaW5jbHVkZSBzdGFuZGFyZC5zY2MKKworICAgICAgICBicmFuY2ggbXluZXdicmFuY2gKKworICAgICAgICBpbmNsdWRlIG15YnNwLWh3LnNjYworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgZmluZAorICAgICAgICAgICAgeW91cnNlbGYgd2l0aCBudW1lcm91cyBicmFuY2hlcywgeW91IG1pZ2h0IGNvbnNpZGVyIHVzaW5nIGEKKyAgICAgICAgICAgIGhpZXJhcmNoaWNhbCBicmFuY2hpbmcgc3lzdGVtIHNpbWlsYXIgdG8gd2hhdCB0aGUgbGludXgteW9jdG8gTGludXgKKyAgICAgICAgICAgIGtlcm5lbCByZXBvc2l0b3JpZXMgdXNlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+Y29tbW9uPC9yZXBsYWNlYWJsZT4vPHJlcGxhY2VhYmxlPmtlcm5lbF90eXBlPC9yZXBsYWNlYWJsZT4vPHJlcGxhY2VhYmxlPm1hY2hpbmU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgaGFkIHR3byBrZXJuZWwgdHlwZXMsICJzdGFuZGFyZCIgYW5kICJzbWFsbCIgZm9yCisgICAgICAgICAgICBpbnN0YW5jZSwgdGhyZWUgbWFjaGluZXMsIGFuZCA8cmVwbGFjZWFibGU+Y29tbW9uPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIGFzIDxmaWxlbmFtZT5teWRpcjwvZmlsZW5hbWU+LCB0aGUgYnJhbmNoZXMgaW4geW91cgorICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnkgbWlnaHQgbG9vayBsaWtlIHRoaXM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG15ZGlyL2Jhc2UKKyAgICAgbXlkaXIvc3RhbmRhcmQvYmFzZQorICAgICBteWRpci9zdGFuZGFyZC9tYWNoaW5lX2EKKyAgICAgbXlkaXIvc3RhbmRhcmQvbWFjaGluZV9iCisgICAgIG15ZGlyL3N0YW5kYXJkL21hY2hpbmVfYworICAgICBteWRpci9zbWFsbC9iYXNlCisgICAgIG15ZGlyL3NtYWxsL21hY2hpbmVfYQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIG9yZ2FuaXphdGlvbiBjYW4gaGVscCBjbGFyaWZ5IHRoZSBicmFuY2ggcmVsYXRpb25zaGlwcy4KKyAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgPGZpbGVuYW1lPm15ZGlyL3N0YW5kYXJkL21hY2hpbmVfYTwvZmlsZW5hbWU+CisgICAgICAgICAgICBpbmNsdWRlcyBldmVyeXRoaW5nIGluIDxmaWxlbmFtZT5teWRpci9iYXNlPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+bXlkaXIvc3RhbmRhcmQvYmFzZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlICJzdGFuZGFyZCIgYW5kICJzbWFsbCIgYnJhbmNoZXMgYWRkIHNvdXJjZXMgc3BlY2lmaWMgdG8gdGhvc2UKKyAgICAgICAgICAgIGtlcm5lbCB0eXBlcyB0aGF0IGZvciB3aGF0ZXZlciByZWFzb24gYXJlIG5vdCBhcHByb3ByaWF0ZSBmb3IgdGhlCisgICAgICAgICAgICBvdGhlciBicmFuY2hlcy4KKyAgICAgICAgICAgIDxub3RlPlRoZSAiYmFzZSIgYnJhbmNoZXMgYXJlIGFuIGFydGlmYWN0IG9mIHRoZSB3YXkgR2l0IG1hbmFnZXMKKyAgICAgICAgICAgICAgICBpdHMgZGF0YSBpbnRlcm5hbGx5IG9uIHRoZSBmaWxlc3lzdGVtOiBHaXQgd2lsbCBub3QgYWxsb3cgeW91CisgICAgICAgICAgICAgICAgdG8gdXNlIDxmaWxlbmFtZT5teWRpci9zdGFuZGFyZDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5teWRpci9zdGFuZGFyZC9tYWNoaW5lX2E8L2ZpbGVuYW1lPiBiZWNhdXNlIGl0CisgICAgICAgICAgICAgICAgd291bGQgaGF2ZSB0byBjcmVhdGUgYSBmaWxlIGFuZCBhIGRpcmVjdG9yeSBuYW1lZCAic3RhbmRhcmQiLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2ZlYXR1cmUtYnJhbmNoZXMnPgorICAgICAgICA8dGl0bGU+RmVhdHVyZSBCcmFuY2hlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSBhcmUgYWN0aXZlbHkgZGV2ZWxvcGluZyBuZXcgZmVhdHVyZXMsIGl0IGNhbiBiZSBtb3JlCisgICAgICAgICAgICBlZmZpY2llbnQgdG8gd29yayB3aXRoIHRoYXQgZmVhdHVyZSBhcyBhIGJyYW5jaCwgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgIGFzIGEgc2V0IG9mIHBhdGNoZXMgdGhhdCBoYXZlIHRvIGJlIHJlZ3VsYXJseSB1cGRhdGVkLgorICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgTGludXgga2VybmVsIHRvb2xzIHByb3ZpZGUgZm9yIHRoaXMgd2l0aAorICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5naXQgbWVyZ2U8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBtZXJnZSBhIGZlYXR1cmUgYnJhbmNoIGludG8gYSBCU1AsIGluc2VydCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5naXQgbWVyZ2U8L2ZpbGVuYW1lPiBjb21tYW5kIGFmdGVyIGFueQorICAgICAgICAgICAgPGZpbGVuYW1lPmJyYW5jaDwvZmlsZW5hbWU+IGNvbW1hbmRzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBteWJzcC5zY2M6CisgICAgICAgIGRlZmluZSBLTUFDSElORSBteWJzcAorICAgICAgICBkZWZpbmUgS1RZUEUgc3RhbmRhcmQKKyAgICAgICAgZGVmaW5lIEtBUkNIIGkzODYKKyAgICAgICAgaW5jbHVkZSBzdGFuZGFyZC5zY2MKKworICAgICAgICBicmFuY2ggbXluZXdicmFuY2gKKyAgICAgICAgZ2l0IG1lcmdlIG15ZmVhdHVyZQorCisgICAgICAgIGluY2x1ZGUgbXlic3AtaHcuc2NjCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdzY2MtcmVmZXJlbmNlJz4KKyAgICA8dGl0bGU+U0NDIERlc2NyaXB0aW9uIEZpbGUgUmVmZXJlbmNlPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgYSBicmllZiByZWZlcmVuY2UgZm9yIHRoZSBjb21tYW5kcyB5b3UgY2FuIHVzZQorICAgICAgICB3aXRoaW4gYW4gU0NDIGRlc2NyaXB0aW9uIGZpbGUgKDxmaWxlbmFtZT4uc2NjPC9maWxlbmFtZT4pOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5icmFuY2ggW3JlZl08L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IGJyYW5jaCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBicmFuY2gKKyAgICAgICAgICAgICAgICAodHlwaWNhbGx5IDxmaWxlbmFtZT4ke0tUWVBFfTwvZmlsZW5hbWU+KSB1c2luZworICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoLCBvciAicmVmIiBpZiBzcGVjaWZpZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmRlZmluZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIERlZmluZXMgdmFyaWFibGVzLCBzdWNoIGFzIDxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5LVFlQRTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+S0FSQ0g8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPktGRUFUVVJFX0RFU0NSSVBUSU9OPC9maWxlbmFtZT4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmluY2x1ZGUgU0NDX0ZJTEU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBJbmNsdWRlcyBhbiBTQ0MgZmlsZSBpbiB0aGUgY3VycmVudCBmaWxlLgorICAgICAgICAgICAgICAgIFRoZSBmaWxlIGlzIHBhcnNlZCBhcyBpZiB5b3UgaGFkIGluc2VydGVkIGl0IGlubGluZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+a2NvbmYgW2hhcmR3YXJlfG5vbi1oYXJkd2FyZV0gQ0ZHX0ZJTEU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBRdWV1ZXMgYSBjb25maWd1cmF0aW9uIGZyYWdtZW50IGZvciBtZXJnaW5nIGludG8gdGhlIGZpbmFsCisgICAgICAgICAgICAgICAgTGludXggPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5naXQgbWVyZ2UgR0lUX0JSQU5DSDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIE1lcmdlcyB0aGUgZmVhdHVyZSBicmFuY2ggaW50byB0aGUgY3VycmVudCBicmFuY2guCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnBhdGNoIFBBVENIX0ZJTEU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBcHBsaWVzIHRoZSBwYXRjaCB0byB0aGUgY3VycmVudCBHaXQgYnJhbmNoLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1jb21tb24ueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1jb21tb24ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YzgyY2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWNvbW1vbi54bWwKQEAgLTAsMCArMSwxMDMzIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0na2VybmVsLWRldi1jb21tb24nPgorCis8dGl0bGU+Q29tbW9uIFRhc2tzPC90aXRsZT4KKworPHBhcmE+CisgICAgVGhpcyBjaGFwdGVyIHByZXNlbnRzIHNldmVyYWwgY29tbW9uIHRhc2tzIHlvdSBwZXJmb3JtIHdoZW4geW91CisgICAgd29yayB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IExpbnV4IGtlcm5lbC4KKyAgICBUaGVzZSB0YXNrcyBpbmNsdWRlIHByZXBhcmluZyBhIGxheWVyLCBtb2RpZnlpbmcgYW4gZXhpc3RpbmcgcmVjaXBlLAorICAgIGl0ZXJhdGl2ZSBkZXZlbG9wbWVudCwgd29ya2luZyB3aXRoIHlvdXIgb3duIHNvdXJjZXMsIGFuZCBpbmNvcnBvcmF0aW5nCisgICAgb3V0LW9mLXRyZWUgbW9kdWxlcy4KKyAgICA8bm90ZT4KKyAgICAgICAgVGhlIGV4YW1wbGVzIHByZXNlbnRlZCBpbiB0aGlzIGNoYXB0ZXIgd29yayB3aXRoIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgIDEuMi4yIFJlbGVhc2UgYW5kIGZvcndhcmQuCisgICAgPC9ub3RlPgorPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLWFuZC1wcmVwYXJpbmctYS1sYXllcic+CisgICAgICAgIDx0aXRsZT5DcmVhdGluZyBhbmQgUHJlcGFyaW5nIGEgTGF5ZXI8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IGFyZSBnb2luZyB0byBiZSBtb2RpZnlpbmcga2VybmVsIHJlY2lwZXMsIGl0IGlzIHJlY29tbWVuZGVkCisgICAgICAgICAgICB0aGF0IHlvdSBjcmVhdGUgYW5kIHByZXBhcmUgeW91ciBvd24gbGF5ZXIgaW4gd2hpY2ggdG8gZG8geW91cgorICAgICAgICAgICAgd29yay4KKyAgICAgICAgICAgIFlvdXIgbGF5ZXIgY29udGFpbnMgaXRzIG93bgorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYml0YmFrZS10ZXJtJz5CaXRCYWtlPC91bGluaz4KKyAgICAgICAgICAgIGFwcGVuZCBmaWxlcworICAgICAgICAgICAgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikgYW5kIHByb3ZpZGVzIGEgY29udmVuaWVudAorICAgICAgICAgICAgbWVjaGFuaXNtIHRvIGNyZWF0ZSB5b3VyIG93biByZWNpcGUgZmlsZXMKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgRm9yIGRldGFpbHMgb24gaG93IHRvIGNyZWF0ZSBhbmQgd29yayB3aXRoIGxheWVycywgc2VlIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgIHNlY3Rpb25zIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPiI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcgYW5kIENyZWF0aW5nIExheWVyczwvdWxpbms+IiBmb3IKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhbCBpbmZvcm1hdGlvbiBvbiBsYXllcnMgYW5kIGhvdyB0byBjcmVhdGUgbGF5ZXJzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4iPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc2V0LXVwLXlvdXItbGF5ZXItZm9yLXRoZS1idWlsZCc+U2V0IFVwIFlvdXIgTGF5ZXIgZm9yIHRoZSBCdWlsZDwvdWxpbms+IiBmb3IKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIG9uIHNldHRpbmcgdXAgYSBsYXllciBmb3Iga2VybmVsCisgICAgICAgICAgICAgICAgICAgIGRldmVsb3BtZW50LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbW9kaWZ5aW5nLWFuLWV4aXN0aW5nLXJlY2lwZSc+CisgICAgICAgIDx0aXRsZT5Nb2RpZnlpbmcgYW4gRXhpc3RpbmcgUmVjaXBlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIG1hbnkgY2FzZXMsIHlvdSBjYW4gY3VzdG9taXplIGFuIGV4aXN0aW5nIGxpbnV4LXlvY3RvIHJlY2lwZSB0bworICAgICAgICAgICAgbWVldCB0aGUgbmVlZHMgb2YgeW91ciBwcm9qZWN0LgorICAgICAgICAgICAgRWFjaCByZWxlYXNlIG9mIHRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIGEgZmV3IExpbnV4CisgICAgICAgICAgICBrZXJuZWwgcmVjaXBlcyBmcm9tIHdoaWNoIHlvdSBjYW4gY2hvb3NlLgorICAgICAgICAgICAgVGhlc2UgYXJlIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIGluIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4PC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE1vZGlmeWluZyBhbiBleGlzdGluZyByZWNpcGUgY2FuIGNvbnNpc3Qgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0aW5nIHRoZSBhcHBlbmQgZmlsZTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BcHBseWluZyBwYXRjaGVzPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNoYW5naW5nIHRoZSBjb25maWd1cmF0aW9uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmVmb3JlIG1vZGlmeWluZyBhbiBleGlzdGluZyByZWNpcGUsIGJlIHN1cmUgdGhhdCB5b3UgaGF2ZSBjcmVhdGVkCisgICAgICAgICAgICBhIG1pbmltYWwsIGN1c3RvbSBsYXllciBmcm9tIHdoaWNoIHlvdSBjYW4gd29yay4KKyAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLWFuZC1wcmVwYXJpbmctYS1sYXllcic+Q3JlYXRpbmcgYW5kIFByZXBhcmluZyBhIExheWVyPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIHNvbWUgZ2VuZXJhbCByZXNvdXJjZXMuCisgICAgICAgICAgICBZb3UgY2FuIGFsc28gc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NldC11cC15b3VyLWxheWVyLWZvci10aGUtYnVpbGQnPlNldCBVcCBZb3VyIExheWVyIGZvciB0aGUgQnVpbGQ8L3VsaW5rPiIgc2VjdGlvbgorICAgICAgICAgICAgb2YgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciBhIGRldGFpbGVkCisgICAgICAgICAgICBleGFtcGxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLXRoZS1hcHBlbmQtZmlsZSc+CisgICAgICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgdGhlIEFwcGVuZCBGaWxlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNyZWF0ZSB0aGlzIGZpbGUgaW4geW91ciBjdXN0b20gbGF5ZXIuCisgICAgICAgICAgICAgICAgWW91IGFsc28gbmFtZSBpdCBhY2NvcmRpbmdseSBiYXNlZCBvbiB0aGUgbGludXgteW9jdG8gcmVjaXBlCisgICAgICAgICAgICAgICAgeW91IGFyZSB1c2luZy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSBtb2RpZnlpbmcgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcmVjaXBlLCB0aGUgYXBwZW5kIGZpbGUgd2lsbCB0eXBpY2FsbHkgYmUgbG9jYXRlZCBhcyBmb2xsb3dzCisgICAgICAgICAgICAgICAgd2l0aGluIHlvdXIgY3VzdG9tIGxheWVyOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPHJlcGxhY2VhYmxlPnlvdXItbGF5ZXI8L3JlcGxhY2VhYmxlPi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBhcHBlbmQgZmlsZSBzaG91bGQgaW5pdGlhbGx5IGV4dGVuZCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNQQVRIJz48ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHNlYXJjaCBwYXRoIGJ5IHByZXBlbmRpbmcgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHlvdXIKKyAgICAgICAgICAgICAgICBmaWxlcyB0byB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBwYXRoIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRISVNESVInPjxmaWxlbmFtZT5USElTRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59LyR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZXhwYW5kcyB0byAibGludXgteW9jdG8iIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhpcworICAgICAgICAgICAgICAgIGV4YW1wbGUuCisgICAgICAgICAgICAgICAgSWYgeW91IGFkZCBhbnkgbmV3IGZpbGVzIHRoYXQgbW9kaWZ5IHRoZSBrZXJuZWwgcmVjaXBlIGFuZCB5b3UKKyAgICAgICAgICAgICAgICBoYXZlIGV4dGVuZGVkIDxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPiBhcworICAgICAgICAgICAgICAgIGRlc2NyaWJlZCBhYm92ZSwgeW91IG11c3QgcGxhY2UgdGhlIGZpbGVzIGluIHlvdXIgbGF5ZXIgaW4gdGhlCisgICAgICAgICAgICAgICAgZm9sbG93aW5nIGFyZWE6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+eW91ci1sYXllcjwvcmVwbGFjZWFibGU+L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8bm90ZT5JZiB5b3UgYXJlIHdvcmtpbmcgb24gYSBuZXcgbWFjaGluZSBCb2FyZCBTdXBwb3J0IFBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgKEJTUCksIGJlIHN1cmUgdG8gcmVmZXIgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7Jz5Zb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdhcHBseWluZy1wYXRjaGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5BcHBseWluZyBQYXRjaGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgYSBzaW5nbGUgcGF0Y2ggb3IgYSBzbWFsbCBzZXJpZXMgb2YgcGF0Y2hlcworICAgICAgICAgICAgICAgIHRoYXQgeW91IHdhbnQgdG8gYXBwbHkgdG8gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UsIHlvdQorICAgICAgICAgICAgICAgIGNhbiBkbyBzbyBqdXN0IGFzIHlvdSB3b3VsZCB3aXRoIGFueSBvdGhlciByZWNpcGUuCisgICAgICAgICAgICAgICAgWW91IGZpcnN0IGNvcHkgdGhlIHBhdGNoZXMgdG8gdGhlIHBhdGggYWRkZWQgdG8KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGluIHlvdXIgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgYXMgZGVzY3JpYmVkIGluCisgICAgICAgICAgICAgICAgdGhlIHByZXZpb3VzIHNlY3Rpb24sIGFuZCB0aGVuIHJlZmVyZW5jZSB0aGVtIGluCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHN0YXRlbWVudHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgY2FuIGFwcGx5IGEgdGhyZWUtcGF0Y2ggc2VyaWVzIGJ5IGFkZGluZyB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmcgbGluZXMgdG8geW91ciBsaW51eC15b2N0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGluIHlvdXIgbGF5ZXI6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1maXJzdC1jaGFuZ2UucGF0Y2giCisgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly8wMDAyLXNlY29uZC1jaGFuZ2UucGF0Y2giCisgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly8wMDAzLXRoaXJkLWNoYW5nZS5wYXRjaCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIG5leHQgdGltZSB5b3UgcnVuIEJpdEJha2UgdG8gYnVpbGQgdGhlIExpbnV4IGtlcm5lbCwKKyAgICAgICAgICAgICAgICBCaXRCYWtlIGRldGVjdHMgdGhlIGNoYW5nZSBpbiB0aGUgcmVjaXBlIGFuZCBmZXRjaGVzIGFuZAorICAgICAgICAgICAgICAgIGFwcGxpZXMgdGhlIHBhdGNoZXMgYmVmb3JlIGJ1aWxkaW5nIHRoZSBrZXJuZWwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBhIGRldGFpbGVkIGV4YW1wbGUgc2hvd2luZyBob3cgdG8gcGF0Y2ggdGhlIGtlcm5lbCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwYXRjaGluZy10aGUta2VybmVsJz5QYXRjaGluZyB0aGUgS2VybmVsPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY2hhbmdpbmctdGhlLWNvbmZpZ3VyYXRpb24nPgorICAgICAgICAgICAgPHRpdGxlPkNoYW5naW5nIHRoZSBDb25maWd1cmF0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBtYWtlIHdob2xlc2FsZSBvciBpbmNyZW1lbnRhbCBjaGFuZ2VzIHRvIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSB1c2VkIGZvciB0aGUgZXZlbnR1YWwKKyAgICAgICAgICAgICAgICBMaW51eCBrZXJuZWwgY29uZmlndXJhdGlvbiBieSBpbmNsdWRpbmcgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlIGFuZCBieSBzcGVjaWZ5aW5nCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmcmFnbWVudHMgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHRvIGJlIGFwcGxpZWQgdG8gdGhhdCBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSBhIGNvbXBsZXRlLCB3b3JraW5nIExpbnV4IGtlcm5lbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlIHlvdSB3YW50IHRvIHVzZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24sIGFzIGJlZm9yZSwgY29weQorICAgICAgICAgICAgICAgIHRoYXQgZmlsZSB0byB0aGUgYXBwcm9wcmlhdGUgPGZpbGVuYW1lPiR7UE59PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaW4geW91ciBsYXllcidzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZXMta2VybmVsL2xpbnV4PC9maWxlbmFtZT4gZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgIGFuZCByZW5hbWUgdGhlIGNvcGllZCBmaWxlIHRvICJkZWZjb25maWciLgorICAgICAgICAgICAgICAgIFRoZW4sIGFkZCB0aGUgZm9sbG93aW5nIGxpbmVzIHRvIHRoZSBsaW51eC15b2N0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGluIHlvdXIgbGF5ZXI6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly9kZWZjb25maWciCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHRlbGxzIHRoZSBidWlsZCBzeXN0ZW0gaG93IHRvCisgICAgICAgICAgICAgICAgc2VhcmNoIGZvciB0aGUgZmlsZSwgd2hpbGUgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTRVhUUkFQQVRIUyc+PGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBleHRlbmRzIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFU1BBVEgnPjxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgKHNlYXJjaCBkaXJlY3RvcmllcykgdG8gaW5jbHVkZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtQTn08L2ZpbGVuYW1lPiBkaXJlY3RvcnkgeW91IGNyZWF0ZWQgdG8gaG9sZCB0aGUKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGNoYW5nZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gYXBwbGllcyB0aGUgY29uZmlndXJhdGlvbnMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZSBiZWZvcmUgYXBwbHlpbmcgYW55CisgICAgICAgICAgICAgICAgc3Vic2VxdWVudCBjb25maWd1cmF0aW9uIGZyYWdtZW50cy4KKyAgICAgICAgICAgICAgICBUaGUgZmluYWwga2VybmVsIGNvbmZpZ3VyYXRpb24gaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucyBpbiB0aGUgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgYW5kCisgICAgICAgICAgICAgICAgYW55IGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIHlvdSBwcm92aWRlLgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHJlYWxpemUgdGhhdCBpZiB5b3UgaGF2ZSBhbnkgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZyYWdtZW50cywgdGhlIGJ1aWxkIHN5c3RlbSBhcHBsaWVzIHRoZXNlIG9uIHRvcCBvZiBhbmQKKyAgICAgICAgICAgICAgICBhZnRlciBhcHBseWluZyB0aGUgZXhpc3RpbmcgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZSBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgIDwvbm90ZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgR2VuZXJhbGx5IHNwZWFraW5nLCB0aGUgcHJlZmVycmVkIGFwcHJvYWNoIGlzIHRvIGRldGVybWluZSB0aGUKKyAgICAgICAgICAgICAgICBpbmNyZW1lbnRhbCBjaGFuZ2UgeW91IHdhbnQgdG8gbWFrZSBhbmQgYWRkIHRoYXQgYXMgYQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBhIGJhc2ljIHNlcmlhbAorICAgICAgICAgICAgICAgIGNvbnNvbGUsIGNyZWF0ZSBhIGZpbGUgbmFtZWQgPGZpbGVuYW1lPjgyNTAuY2ZnPC9maWxlbmFtZT4gaW4KKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPiR7UE59PC9maWxlbmFtZT4gZGlyZWN0b3J5IHdpdGggdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgIGNvbnRlbnQgKHdpdGhvdXQgaW5kZW50YXRpb24pOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQ09ORklHX1NFUklBTF84MjUwPXkKKyAgICAgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorICAgICBDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKKyAgICAgQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKKyAgICAgQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorICAgICBDT05GSUdfU0VSSUFMX0NPUkU9eQorICAgICBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE5leHQsIGluY2x1ZGUgdGhpcyBjb25maWd1cmF0aW9uIGZyYWdtZW50IGFuZCBleHRlbmQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKKyAgICAgU1JDX1VSSSArPSAiZmlsZTovLzgyNTAuY2ZnIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgbmV4dCB0aW1lIHlvdSBydW4gQml0QmFrZSB0byBidWlsZCB0aGUgTGludXgga2VybmVsLCBCaXRCYWtlCisgICAgICAgICAgICAgICAgZGV0ZWN0cyB0aGUgY2hhbmdlIGluIHRoZSByZWNpcGUgYW5kIGZldGNoZXMgYW5kIGFwcGxpZXMgdGhlCisgICAgICAgICAgICAgICAgbmV3IGNvbmZpZ3VyYXRpb24gYmVmb3JlIGJ1aWxkaW5nIHRoZSBrZXJuZWwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBhIGRldGFpbGVkIGV4YW1wbGUgc2hvd2luZyBob3cgdG8gY29uZmlndXJlIHRoZSBrZXJuZWwsCisgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjb25maWd1cmluZy10aGUta2VybmVsJz5Db25maWd1cmluZyB0aGUgS2VybmVsPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmctYW4taW4tdHJlZS1kZWZjb25maWctZmlsZSc+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgYW4gIkluLVRyZWUiJm5ic3A7Jm5ic3A7PGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IEZpbGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJdCBtaWdodCBiZSBkZXNpcmFibGUgdG8gaGF2ZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmcmFnbWVudAorICAgICAgICAgICAgICAgIHN1cHBvcnQgdGhyb3VnaCBhIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlIHRoYXQKKyAgICAgICAgICAgICAgICBpcyBwdWxsZWQgZnJvbSB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGZvciB0aGUgY29uZmlndXJlZAorICAgICAgICAgICAgICAgIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gbG9va3MgZm9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGVzIGluIHRoZSBsYXllciB1c2VkIGZvcgorICAgICAgICAgICAgICAgIE1ldGFkYXRhLCB3aGljaCBpcyAib3V0LW9mLXRyZWUiLCBhbmQgdGhlbiBjb25maWd1cmVzIHRoZW0KKyAgICAgICAgICAgICAgICB1c2luZyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSArPSAiZmlsZTovL2RlZmNvbmZpZyIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCB3YW50IHRvIG1haW50YWluIGNvcGllcyBvZgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlcyBpbiB5b3VyIGxheWVyIGJ1dCB3b3VsZAorICAgICAgICAgICAgICAgIHJhdGhlciBhbGxvdyB1c2VycyB0byB1c2UgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmcm9tIHRoZQorICAgICAgICAgICAgICAgIGtlcm5lbCB0cmVlIGFuZCBzdGlsbCBiZSBhYmxlIHRvIGFkZCBjb25maWd1cmF0aW9uIGZyYWdtZW50cworICAgICAgICAgICAgICAgIHRvIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB0aHJvdWdoLCBmb3IgZXhhbXBsZSwgYXBwZW5kIGZpbGVzLCB5b3UgY2FuIGRpcmVjdCB0aGUKKyAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHVzZSBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgdGhhdCBpcyAiaW4tdHJlZSIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHNwZWNpZnkgYW4gImluLXRyZWUiIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlLAorICAgICAgICAgICAgICAgIGVkaXQgdGhlIHJlY2lwZSB0aGF0IGJ1aWxkcyB5b3VyIGtlcm5lbCBzbyB0aGF0IGl0IGhhcyB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmcgY29tbWFuZCBmb3JtOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0JVSUxEX0RFRkNPTkZJR188dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS01BQ0hJTkUnPktNQUNISU5FPC91bGluaz4gPz0gPHJlcGxhY2VhYmxlPmRlZmNvbmZpZ19maWxlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gYXBwZW5kIHRoZSB2YXJpYWJsZSB3aXRoCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPktNQUNISU5FPC9maWxlbmFtZT4gYW5kIHRoZW4gc3VwcGx5IHRoZSBwYXRoIHRvCisgICAgICAgICAgICAgICAgeW91ciAiaW4tdHJlZSIgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzaWRlIGZyb20gbW9kaWZ5aW5nIHlvdXIga2VybmVsIHJlY2lwZSBhbmQgcHJvdmlkaW5nIHlvdXIgb3duCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUsIHlvdSBuZWVkIHRvIGJlIHN1cmUgbm8KKyAgICAgICAgICAgICAgICBmaWxlcyBvciBzdGF0ZW1lbnRzIHNldCA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHRvIHVzZSBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IG90aGVyIHRoYW4geW91ciAiaW4tdHJlZSIKKyAgICAgICAgICAgICAgICBmaWxlIChlLmcuIGEga2VybmVsJ3MgPGZpbGVuYW1lPmxpbnV4LTwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPm1hY2hpbmU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4uaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlKS4KKyAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIGJ1aWxkIHN5c3RlbSBkZXRlY3RzIGEgc3RhdGVtZW50CisgICAgICAgICAgICAgICAgdGhhdCBpZGVudGlmaWVzIGFuICJvdXQtb2YtdHJlZSIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZSwgdGhhdCBzdGF0ZW1lbnQKKyAgICAgICAgICAgICAgICB3aWxsIG92ZXJyaWRlIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0JVSUxEX0RFRkNPTkZJRzwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtCVUlMRF9ERUZDT05GSUcnPjxmaWxlbmFtZT5LQlVJTERfREVGQ09ORklHPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGRlc2NyaXB0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLWFuLWl0ZXJhdGl2ZS1kZXZlbG9wbWVudC1wcm9jZXNzJz4KKyAgICAgICAgPHRpdGxlPlVzaW5nIGFuIEl0ZXJhdGl2ZSBEZXZlbG9wbWVudCBQcm9jZXNzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBkbyBub3QgaGF2ZSBleGlzdGluZyBwYXRjaGVzIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXMsCisgICAgICAgICAgICB5b3UgY2FuIGl0ZXJhdGl2ZWx5IGdlbmVyYXRlIHRoZW0gZnJvbSB3aXRoaW4gdGhlIEJpdEJha2UgYnVpbGQKKyAgICAgICAgICAgIGVudmlyb25tZW50IGFzIGRlc2NyaWJlZCB3aXRoaW4gdGhpcyBzZWN0aW9uLgorICAgICAgICAgICAgRHVyaW5nIGFuIGl0ZXJhdGl2ZSB3b3JrZmxvdywgcnVubmluZyBhIHByZXZpb3VzbHkgY29tcGxldGVkIEJpdEJha2UKKyAgICAgICAgICAgIHRhc2sgY2F1c2VzIEJpdEJha2UgdG8gaW52YWxpZGF0ZSB0aGUgdGFza3MgdGhhdCBmb2xsb3cgdGhlCisgICAgICAgICAgICBjb21wbGV0ZWQgdGFzayBpbiB0aGUgYnVpbGQgc2VxdWVuY2UuCisgICAgICAgICAgICBJbnZhbGlkYXRlZCB0YXNrcyByZWJ1aWxkIHRoZSBuZXh0IHRpbWUgeW91IHJ1biB0aGUgYnVpbGQgdXNpbmcKKyAgICAgICAgICAgIEJpdEJha2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIHlvdSByZWFkIHRoaXMgc2VjdGlvbiwgYmUgc3VyZSB0byBzdWJzdGl0dXRlIHRoZSBuYW1lCisgICAgICAgICAgICBvZiB5b3VyIExpbnV4IGtlcm5lbCByZWNpcGUgZm9yIHRoZSB0ZXJtCisgICAgICAgICAgICAibGludXgteW9jdG8iLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RpcC1kaXJ0eS1zdHJpbmcnPgorICAgICAgICAgICAgPHRpdGxlPiItZGlydHkiIFN0cmluZzwvdGl0bGU+CisKKzwhLS0KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5BUiAtIERhcnJlbiBIYXJ0OjwvZW1waGFzaXM+ICBUaGlzIHNlY3Rpb24KKyAgICAgICAgICAgICAgICBvcmlnaW5hdGVkIGZyb20gdGhlIG9sZCBZb2N0byBQcm9qZWN0IEtlcm5lbCBBcmNoaXRlY3R1cmUKKyAgICAgICAgICAgICAgICBhbmQgVXNlIE1hbnVhbC4KKyAgICAgICAgICAgICAgICBJdCB3YXMgZGVjaWRlZCB3ZSBuZWVkIHRvIHB1dCBpdCBpbiB0aGlzIHNlY3Rpb24gaGVyZS4KKyAgICAgICAgICAgICAgICBEYXJyZW4gbmVlZHMgdG8gZmlndXJlIG91dCB3aGVyZSB3ZSB3YW50IGl0IGFuZCB3aGF0IHBhcnQKKyAgICAgICAgICAgICAgICBvZiBpdCB3ZSB3YW50IChhbGwsIHJldmlzaW9uPz8/KQorICAgICAgICAgICAgPC9wYXJhPgorLS0+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIGtlcm5lbCBpbWFnZXMgYXJlIGJlaW5nIGJ1aWx0IHdpdGggIi1kaXJ0eSIgb24gdGhlCisgICAgICAgICAgICAgICAgZW5kIG9mIHRoZSB2ZXJzaW9uIHN0cmluZywgdGhpcyBzaW1wbHkgbWVhbnMgdGhhdAorICAgICAgICAgICAgICAgIG1vZGlmaWNhdGlvbnMgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkgaGF2ZSBub3QgYmVlbiBjb21taXR0ZWQuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBzdGF0dXMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBhYm92ZSBHaXQgY29tbWFuZCB0byByZXBvcnQgbW9kaWZpZWQsCisgICAgICAgICAgICAgICAgcmVtb3ZlZCwgb3IgYWRkZWQgZmlsZXMuCisgICAgICAgICAgICAgICAgWW91IHNob3VsZCBjb21taXQgdGhvc2UgY2hhbmdlcyB0byB0aGUgdHJlZSByZWdhcmRsZXNzIG9mCisgICAgICAgICAgICAgICAgd2hldGhlciB0aGV5IHdpbGwgYmUgc2F2ZWQsIGV4cG9ydGVkLCBvciB1c2VkLgorICAgICAgICAgICAgICAgIE9uY2UgeW91IGNvbW1pdCB0aGUgY2hhbmdlcywgeW91IG5lZWQgdG8gcmVidWlsZCB0aGUga2VybmVsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBmb3JjZSBhIHBpY2t1cCBhbmQgY29tbWl0IG9mIGFsbCBzdWNoIHBlbmRpbmcgY2hhbmdlcywKKyAgICAgICAgICAgICAgICBlbnRlciB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgYWRkIC4KKyAgICAgJCBnaXQgY29tbWl0IC1zIC1hIC1tICJnZXR0aW5nIHJpZCBvZiAtZGlydHkiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBOZXh0LCByZWJ1aWxkIHRoZSBrZXJuZWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZ2VuZXJhdGluZy1jb25maWd1cmF0aW9uLWZpbGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5HZW5lcmF0aW5nIENvbmZpZ3VyYXRpb24gRmlsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIG1hbmlwdWxhdGUgdGhlIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgIHVzZWQgdG8gYnVpbGQgYSBsaW51eC15b2N0byByZWNpcGUgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+IGNvbW1hbmQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBtZW51Y29uZmlnCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBzdGFydHMgdGhlIExpbnV4IGtlcm5lbCBjb25maWd1cmF0aW9uIHRvb2wsCisgICAgICAgICAgICAgICAgd2hpY2ggYWxsb3dzIHlvdSB0byBwcmVwYXJlIGEgbmV3CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGZvciB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgV2hlbiB5b3UgZXhpdCB0aGUgdG9vbCwgYmUgc3VyZSB0byBzYXZlIHlvdXIgY2hhbmdlcworICAgICAgICAgICAgICAgIGF0IHRoZSBwcm9tcHQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSByZXN1bHRpbmcgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGlzCisgICAgICAgICAgICAgICAgbG9jYXRlZCBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4gdW5kZXIgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LSR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9BUkNIJz48ZmlsZW5hbWU+UEFDS0FHRV9BUkNIPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59LSR7PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJTlVYX0tFUk5FTF9UWVBFJz48ZmlsZW5hbWU+TElOVVhfS0VSTkVMX1RZUEU8L2ZpbGVuYW1lPjwvdWxpbms+fS1idWlsZDwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgZW50aXJlIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSBhcyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZSBhcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NoYW5naW5nLXRoZS1jb25maWd1cmF0aW9uJz5DaGFuZ2luZyB0aGUgQ29uZmlndXJhdGlvbjwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgYmV0dGVyIG1ldGhvZCBpcyB0byBjcmVhdGUgYSBjb25maWd1cmF0aW9uIGZyYWdtZW50IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VzIGJldHdlZW4gdHdvIGNvbmZpZ3VyYXRpb24gZmlsZXM6IG9uZSBwcmV2aW91c2x5CisgICAgICAgICAgICAgICAgY3JlYXRlZCBhbmQgc2F2ZWQsIGFuZCBvbmUgZnJlc2hseSBjcmVhdGVkIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4gdG9vbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gY3JlYXRlIGEgY29uZmlndXJhdGlvbiBmcmFnbWVudCB1c2luZyB0aGlzIG1ldGhvZCwgZm9sbG93CisgICAgICAgICAgICAgICAgdGhlc2Ugc3RlcHM6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q29tcGxldGUgYSBidWlsZCBhdCBsZWFzdCB0aHJvdWdoIHRoZSBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gdGFzayBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbGludXgteW9jdG8gLWMga2VybmVsX2NvbmZpZ21lIC1mCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHN0ZXAgZW5zdXJlcyB0aGF0IHlvdSB3aWxsIGJlIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSBmcm9tIGEga25vd24gc3RhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHNpdHVhdGlvbnMgZXhpc3Qgd2hlcmUgeW91ciBidWlsZCBzdGF0ZSBtaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgYmVjb21lIHVua25vd24sIGl0IGlzIGJlc3QgdG8gcnVuIHRoZSBwcmV2aW91cworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBwcmlvciB0byBzdGFydGluZyB1cAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UnVuIHRoZSA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbGludXgteW9jdG8gLWMgbWVudWNvbmZpZworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UnVuIHRoZSA8ZmlsZW5hbWU+ZGlmZmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIHRvIHByZXBhcmUgYSBjb25maWd1cmF0aW9uIGZyYWdtZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlc3VsdGluZyBmaWxlIDxmaWxlbmFtZT5mcmFnbWVudC5jZmc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBwbGFjZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+IGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGxpbnV4LXlvY3RvIC1jIGRpZmZjb25maWcKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRpZmZjb25maWc8L2ZpbGVuYW1lPiBjb21tYW5kIGNyZWF0ZXMgYSBmaWxlIHRoYXQgaXMgYQorICAgICAgICAgICAgICAgIGxpc3Qgb2YgTGludXgga2VybmVsIDxmaWxlbmFtZT5DT05GSUdfPC9maWxlbmFtZT4gYXNzaWdubWVudHMuCisgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0nY2hhbmdpbmctdGhlLWNvbmZpZ3VyYXRpb24nPkNoYW5naW5nIHRoZSBDb25maWd1cmF0aW9uPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZSBvdXRwdXQgYXMgYQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyB1c2UgdGhpcyBtZXRob2QgdG8gY3JlYXRlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRzIGZvciBhIEJTUC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0nYnNwLWRlc2NyaXB0aW9ucyc+QlNQIERlc2NyaXB0aW9uczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUga2VybmVsIHRvb2xzIGFsc28gcHJvdmlkZSBjb25maWd1cmF0aW9uIHZhbGlkYXRpb24uCisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlc2UgdG9vbHMgdG8gcHJvZHVjZSB3YXJuaW5ncyBmb3Igd2hlbiBhCisgICAgICAgICAgICAgICAgcmVxdWVzdGVkIGNvbmZpZ3VyYXRpb24gZG9lcyBub3QgYXBwZWFyIGluIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSBvciB3aGVuIHlvdSBvdmVycmlkZSBhCisgICAgICAgICAgICAgICAgcG9saWN5IGNvbmZpZ3VyYXRpb24gaW4gYSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGZyYWdtZW50LgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB3aXRoIHNvbWUgc2FtcGxlIG91dHB1dCBvZiB0aGUgY29tbWFuZAorICAgICAgICAgICAgICAgIHRoYXQgcnVucyB0aGVzZSB0b29sczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBrZXJuZWxfY29uZmlnY2hlY2sgLWYKKworICAgICAuLi4KKworICAgICBOT1RFOiB2YWxpZGF0aW5nIGtlcm5lbCBjb25maWd1cmF0aW9uCisgICAgIFRoaXMgQlNQIHNldHMgMyBpbnZhbGlkL29ic29sZXRlIGtlcm5lbCBvcHRpb25zLgorICAgICBUaGVzZSBjb25maWcgb3B0aW9ucyBhcmUgbm90IG9mZmVyZWQgYW55d2hlcmUgd2l0aGluIHRoaXMga2VybmVsLgorICAgICBUaGUgZnVsbCBsaXN0IGNhbiBiZSBmb3VuZCBpbiB5b3VyIGtlcm5lbCBzcmMgZGlyIGF0OgorICAgICBtZXRhL2NmZy9zdGFuZGFyZC9teWJzcC9pbnZhbGlkLmNmZworCisgICAgIFRoaXMgQlNQIHNldHMgMjEga2VybmVsIG9wdGlvbnMgdGhhdCBhcmUgcG9zc2libHkgbm9uLWhhcmR3YXJlIHJlbGF0ZWQuCisgICAgIFRoZSBmdWxsIGxpc3QgY2FuIGJlIGZvdW5kIGluIHlvdXIga2VybmVsIHNyYyBkaXIgYXQ6CisgICAgIG1ldGEvY2ZnL3N0YW5kYXJkL215YnNwL3NwZWNpZmllZF9ub25faGR3LmNmZworCisgICAgIFdBUk5JTkc6IFRoZXJlIHdlcmUgMiBoYXJkd2FyZSBvcHRpb25zIHJlcXVlc3RlZCB0aGF0IGRvIG5vdAorICAgICAgICAgICAgICBoYXZlIGEgY29ycmVzcG9uZGluZyB2YWx1ZSBwcmVzZW50IGluIHRoZSBmaW5hbCAiLmNvbmZpZyIgZmlsZS4KKyAgICAgICAgICAgICAgVGhpcyBwcm9iYWJseSBtZWFucyB5b3UgYXJlIG5vdCBnZXR0aW5nIHRoZSBjb25maWcgeW91IHdhbnRlZC4KKyAgICAgICAgICAgICAgVGhlIGZ1bGwgbGlzdCBjYW4gYmUgZm91bmQgaW4geW91ciBrZXJuZWwgc3JjIGRpciBhdDoKKyAgICAgICAgICAgICAgbWV0YS9jZmcvc3RhbmRhcmQvbXlic3AvbWlzbWF0Y2guY2ZnCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgb3V0cHV0IGRlc2NyaWJlcyB0aGUgdmFyaW91cyBwcm9ibGVtcyB0aGF0IHlvdSBjYW4KKyAgICAgICAgICAgICAgICBlbmNvdW50ZXIgYWxvbmcgd2l0aCB3aGVyZSB0byBmaW5kIHRoZSBvZmZlbmRpbmcgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGl0ZW1zLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgbG9ncyB0byBhZGp1c3QgeW91cgorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIHRoZW4gcmVwZWF0IHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5rZXJuZWxfY29uZmlnbWU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsX2NvbmZpZ2NoZWNrPC9maWxlbmFtZT4gY29tbWFuZHMgdW50aWwKKyAgICAgICAgICAgICAgICB0aGV5IHByb2R1Y2Ugbm8gd2FybmluZ3MuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiB0b29sLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5nLW1lbnVjb25maWcnPlVzaW5nIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT48L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtb2RpZnlpbmctc291cmNlLWNvZGUnPgorICAgICAgICAgICAgPHRpdGxlPk1vZGlmeWluZyBTb3VyY2UgQ29kZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZXhwZXJpbWVudCB3aXRoIHNvdXJjZSBjb2RlIGNoYW5nZXMgYW5kIGNyZWF0ZSBhCisgICAgICAgICAgICAgICAgc2ltcGxlIHBhdGNoIHdpdGhvdXQgbGVhdmluZyB0aGUgQml0QmFrZSBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICBUbyBnZXQgc3RhcnRlZCwgYmUgc3VyZSB0byBjb21wbGV0ZSBhIGJ1aWxkIGF0CisgICAgICAgICAgICAgICAgbGVhc3QgdGhyb3VnaCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gdGFzazoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBrZXJuZWxfY29uZmlnbWUgLWYKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGFraW5nIHRoaXMgc3RlcCBlbnN1cmVzIHlvdSBoYXZlIHRoZSBzb3VyY2VzIHByZXBhcmVkCisgICAgICAgICAgICAgICAgYW5kIHRoZSBjb25maWd1cmF0aW9uIGNvbXBsZXRlZC4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlIHNvdXJjZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn0vbGludXg8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZWRpdCB0aGUgc291cmNlcyBhcyB5b3Ugd291bGQgYW55IG90aGVyIExpbnV4IHNvdXJjZQorICAgICAgICAgICAgICAgIHRyZWUuCisgICAgICAgICAgICAgICAgSG93ZXZlciwga2VlcCBpbiBtaW5kIHRoYXQgeW91IHdpbGwgbG9zZSBjaGFuZ2VzIGlmIHlvdQorICAgICAgICAgICAgICAgIHRyaWdnZXIgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWZldGNoJz48ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdGFzayBmb3IgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGF2b2lkIHRyaWdnZXJpbmcgdGhpcyB0YXNrIGJ5IG5vdCB1c2luZyBCaXRCYWtlIHRvCisgICAgICAgICAgICAgICAgcnVuIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1jbGVhbmFsbCc+PGZpbGVuYW1lPmNsZWFuYWxsPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtY2xlYW5zc3RhdGUnPjxmaWxlbmFtZT5jbGVhbnNzdGF0ZTwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgb3IgZm9yY2VkCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWZldGNoJz48ZmlsZW5hbWU+ZmV0Y2g8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgY29tbWFuZHMuCisgICAgICAgICAgICAgICAgQWxzbywgZG8gbm90IG1vZGlmeSB0aGUgcmVjaXBlIGl0c2VsZiB3aGlsZSB3b3JraW5nCisgICAgICAgICAgICAgICAgd2l0aCB0ZW1wb3JhcnkgY2hhbmdlcyBvciBCaXRCYWtlIG1pZ2h0IHJ1biB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmV0Y2g8L2ZpbGVuYW1lPiBjb21tYW5kIGRlcGVuZGluZyBvbiB0aGUKKyAgICAgICAgICAgICAgICBjaGFuZ2VzIHRvIHRoZSByZWNpcGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHRlc3QgeW91ciB0ZW1wb3JhcnkgY2hhbmdlcywgaW5zdHJ1Y3QgQml0QmFrZSB0byBydW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbXBpbGU8L2ZpbGVuYW1lPiBhZ2Fpbi4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPi1mPC9maWxlbmFtZT4gb3B0aW9uIGZvcmNlcyB0aGUgY29tbWFuZCB0byBydW4KKyAgICAgICAgICAgICAgICBldmVuIHRob3VnaCBCaXRCYWtlIG1pZ2h0IHRoaW5rIGl0IGhhcyBhbHJlYWR5IGRvbmUgc286CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbGludXgteW9jdG8gLWMgY29tcGlsZSAtZgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJZiB0aGUgY29tcGlsZSBmYWlscywgeW91IGNhbiB1cGRhdGUgdGhlIHNvdXJjZXMgYW5kIHJlcGVhdAorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Y29tcGlsZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIE9uY2UgY29tcGlsYXRpb24gaXMgc3VjY2Vzc2Z1bCwgeW91IGNhbiBpbnNwZWN0IGFuZCB0ZXN0CisgICAgICAgICAgICAgICAgdGhlIHJlc3VsdGluZyBidWlsZCAoaS5lLiBrZXJuZWwsIG1vZHVsZXMsIGFuZCBzbyBmb3J0aCkgZnJvbQorICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmcgYnVpbGQgZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtXT1JLRElSfS9saW51eC0ke1BBQ0tBR0VfQVJDSH0tJHtMSU5VWF9LRVJORUxfVFlQRX0tYnVpbGQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBydW4gdGhlIDxmaWxlbmFtZT5kZXBsb3k8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbW1hbmQgdG8gcGxhY2UgdGhlIGtlcm5lbCBpbWFnZSBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL2RlcGxveS9pbWFnZXM8L2ZpbGVuYW1lPiBkaXJlY3Rvcnk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorCSQgYml0YmFrZSBsaW51eC15b2N0byAtYyBkZXBsb3kKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQW5kLCBvZiBjb3Vyc2UsIHlvdSBjYW4gcGVyZm9ybSB0aGUgcmVtYWluaW5nIGluc3RhbGxhdGlvbiBhbmQKKyAgICAgICAgICAgICAgICBwYWNrYWdpbmcgc3RlcHMgYnkgaXNzdWluZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisJJCBiaXRiYWtlIGxpbnV4LXlvY3RvCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgcmFwaWQgaXRlcmF0aXZlIGRldmVsb3BtZW50LCB0aGUgZWRpdC1jb21waWxlLXJlcGVhdCBsb29wCisgICAgICAgICAgICAgICAgZGVzY3JpYmVkIGluIHRoaXMgc2VjdGlvbiBpcyBwcmVmZXJhYmxlIHRvIHJlYnVpbGRpbmcgdGhlCisgICAgICAgICAgICAgICAgZW50aXJlIHJlY2lwZSBiZWNhdXNlIHRoZSBpbnN0YWxsYXRpb24gYW5kIHBhY2thZ2luZyB0YXNrcworICAgICAgICAgICAgICAgIGFyZSB2ZXJ5IHRpbWUgY29uc3VtaW5nLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBzb3VyY2UgY29kZSBtb2RpZmljYXRpb25zLAorICAgICAgICAgICAgICAgIHlvdSBjYW4gbWFrZSB0aGVtIHBlcm1hbmVudCBieSBnZW5lcmF0aW5nIHBhdGNoZXMgYW5kCisgICAgICAgICAgICAgICAgYXBwbHlpbmcgdGhlbSB0byB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgc3RhdGVtZW50IGFzIGRlc2NyaWJlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYXBwbHlpbmctcGF0Y2hlcyc+QXBwbHlpbmcgUGF0Y2hlczwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIG5vdCBmYW1pbGlhciB3aXRoIGdlbmVyYXRpbmcgcGF0Y2hlcywgcmVmZXIgdG8gdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2NyZWF0aW5nLXRoZS1wYXRjaCc+Q3JlYXRpbmcgdGhlIFBhdGNoPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nd29ya2luZy13aXRoLXlvdXItb3duLXNvdXJjZXMnPgorICAgICAgICA8dGl0bGU+V29ya2luZyBXaXRoIFlvdXIgT3duIFNvdXJjZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IGNhbm5vdCB3b3JrIHdpdGggb25lIG9mIHRoZSBMaW51eCBrZXJuZWwKKyAgICAgICAgICAgIHZlcnNpb25zIHN1cHBvcnRlZCBieSBleGlzdGluZyBsaW51eC15b2N0byByZWNpcGVzLCB5b3UgY2FuCisgICAgICAgICAgICBzdGlsbCBtYWtlIHVzZSBvZiB0aGUgWW9jdG8gUHJvamVjdCBMaW51eCBrZXJuZWwgdG9vbGluZyBieQorICAgICAgICAgICAgd29ya2luZyB3aXRoIHlvdXIgb3duIHNvdXJjZXMuCisgICAgICAgICAgICBXaGVuIHlvdSB1c2UgeW91ciBvd24gc291cmNlcywgeW91IHdpbGwgbm90IGJlIGFibGUgdG8KKyAgICAgICAgICAgIGxldmVyYWdlIHRoZSBleGlzdGluZyBrZXJuZWwKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+IGFuZAorICAgICAgICAgICAgc3RhYmlsaXphdGlvbiB3b3JrIG9mIHRoZSBsaW51eC15b2N0byBzb3VyY2VzLgorICAgICAgICAgICAgSG93ZXZlciwgeW91IHdpbGwgYmUgYWJsZSB0byBtYW5hZ2UgeW91ciBvd24gTWV0YWRhdGEgaW4gdGhlIHNhbWUKKyAgICAgICAgICAgIGZvcm1hdCBhcyB0aGUgbGludXgteW9jdG8gc291cmNlcy4KKyAgICAgICAgICAgIE1haW50YWluaW5nIGZvcm1hdCBjb21wYXRpYmlsaXR5IGZhY2lsaXRhdGVzIGNvbnZlcmdpbmcgd2l0aAorICAgICAgICAgICAgbGludXgteW9jdG8gb24gYSBmdXR1cmUsIG11dHVhbGx5LXN1cHBvcnRlZCBrZXJuZWwgdmVyc2lvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gaGVscCB5b3UgdXNlIHlvdXIgb3duIHNvdXJjZXMsIHRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIGEKKyAgICAgICAgICAgIGxpbnV4LXlvY3RvIGN1c3RvbSByZWNpcGUKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+bGludXgteW9jdG8tY3VzdG9tLmJiPC9maWxlbmFtZT4pIHRoYXQgdXNlcworICAgICAgICAgICAgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiBzb3VyY2VzCisgICAgICAgICAgICBhbmQgdGhlIFlvY3RvIFByb2plY3QgTGludXgga2VybmVsIHRvb2xzIGZvciBtYW5hZ2luZworICAgICAgICAgICAga2VybmVsIE1ldGFkYXRhLgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoaXMgcmVjaXBlIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSBvZiB0aGUKKyAgICAgICAgICAgIFlvY3RvIFByb2plY3QgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7Jz5Tb3VyY2UgUmVwb3NpdG9yeTwvdWxpbms+CisgICAgICAgICAgICBhdDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSJtb25vc3BhY2VkIj4KKyAgICAgcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS5iYgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGJhc2ljIHN0ZXBzIHlvdSBjYW4gdXNlIHRvIHdvcmsgd2l0aCB5b3VyIG93biBzb3VyY2VzOgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Db3B5IHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tY3VzdG9tLmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIHRvIHlvdXIgbGF5ZXIgYW5kIGdpdmUgaXQgYSBtZWFuaW5nZnVsIG5hbWUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIHNob3VsZCBpbmNsdWRlIHRoZSB2ZXJzaW9uIG9mIHRoZSBMaW51eCBrZXJuZWwgeW91CisgICAgICAgICAgICAgICAgICAgIGFyZSB1c2luZyAoZS5nLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tbXlwcm9qZWN0XzMuMTkuYmI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgd2hlcmUgIjMuMTkiIGlzIHRoZSBiYXNlIHZlcnNpb24gb2YgdGhlIExpbnV4IGtlcm5lbAorICAgICAgICAgICAgICAgICAgICB3aXRoIHdoaWNoIHlvdSB3b3VsZCBiZSB3b3JraW5nKS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW4gdGhlIHNhbWUgZGlyZWN0b3J5IGluc2lkZSB5b3VyIGxheWVyLAorICAgICAgICAgICAgICAgICAgICBjcmVhdGUgYSBtYXRjaGluZyBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgdG8gc3RvcmUgeW91ciBwYXRjaGVzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzIChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by1teXByb2plY3Q8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYWtlIHN1cmUgeW91IGhhdmUgZWl0aGVyIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgb3IgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICBmcmFnbWVudCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tY3VzdG9tLmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlLCB5b3UgbXVzdCBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBoYXZlIGEgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUsCisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gcnVuIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBtYWtlIGRlZmNvbmZpZworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEFmdGVyIHJ1bm5pbmcgdGhlIGNvbW1hbmQsIGNvcHkgdGhlIHJlc3VsdGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZXM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYXMgImRlZmNvbmZpZyIgYW5kCisgICAgICAgICAgICAgICAgICAgIHRoZW4gYWRkIGl0IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHRoZSByZWNpcGUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5SdW5uaW5nIHRoZSA8ZmlsZW5hbWU+bWFrZSBkZWZjb25maWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kIHJlc3VsdHMgaW4gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgeW91cgorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUgYXMgZGVmaW5lZCBieSB5b3VyIGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgbm8gZ3VhcmFudGVlIGV4aXN0cyB0aGF0IHRoaXMgY29uZmlndXJhdGlvbiBpcworICAgICAgICAgICAgICAgICAgICB2YWxpZCBmb3IgeW91ciB1c2UgY2FzZSwgb3IgdGhhdCB5b3VyIGJvYXJkIHdpbGwgZXZlbiBib290LgorICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHBhcnRpY3VsYXJseSB0cnVlIGZvciBub24teDg2IGFyY2hpdGVjdHVyZXMuCisgICAgICAgICAgICAgICAgICAgIFRvIHVzZSBub24teDg2IDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlcywgeW91CisgICAgICAgICAgICAgICAgICAgIG5lZWQgdG8gYmUgbW9yZSBzcGVjaWZpYyBhbmQgZmluZCBvbmUgdGhhdCBtYXRjaGVzIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgYm9hcmQgKGkuZS4gZm9yIGFybSwgeW91IGxvb2sgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFyY2gvYXJtL2NvbmZpZ3M8L2ZpbGVuYW1lPiBhbmQgdXNlIHRoZSBvbmUgdGhhdAorICAgICAgICAgICAgICAgICAgICBpcyB0aGUgYmVzdCBzdGFydGluZyBwb2ludCBmb3IgeW91ciBib2FyZCkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FZGl0IHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGluIHlvdXIgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIGFzIGFwcHJvcHJpYXRlIGZvciB5b3VyIHByb2plY3Q6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzaG91bGQgc3BlY2lmeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgR2l0IHJlcG9zaXRvcnkgdGhhdCB1c2VzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIEdpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoZXIgcHJvdG9jb2xzIChpLmUuIDxmaWxlbmFtZT5maWxlPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+aHR0cDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gdmFyaWFibGUgc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxzbyBzcGVjaWZ5IGVpdGhlciBhIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgb3Igc29tZSBjb25maWd1cmF0aW9uIGZyYWdtZW50IGZpbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBza2VsZXRvbiByZWNpcGUgcHJvdmlkZXMgYW4gZXhhbXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gYXMgYSBzeW50YXggcmVmZXJlbmNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MSU5VWF9WRVJTSU9OJz48ZmlsZW5hbWU+TElOVVhfVkVSU0lPTjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIExpbnV4IGtlcm5lbCB2ZXJzaW9uIHlvdSBhcmUgdXNpbmcgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMy4xOSIpLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MSU5VWF9WRVJTSU9OX0VYVEVOU0lPTic+PGZpbGVuYW1lPkxJTlVYX1ZFUlNJT05fRVhURU5TSU9OPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgTGludXgga2VybmVsIDxmaWxlbmFtZT5DT05GSUdfTE9DQUxWRVJTSU9OPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGlzIGNvbXBpbGVkIGludG8gdGhlIHJlc3VsdGluZyBrZXJuZWwgYW5kIHZpc2libGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZSA8ZmlsZW5hbWU+dW5hbWU8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNSRVYnPjxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb21taXQgSUQgZnJvbSB3aGljaCB5b3Ugd2FudCB0byBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJlYXQgdGhpcyB2YXJpYWJsZSB0aGUgc2FtZSBhcyB5b3Ugd291bGQgaW4gYW55IG90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY3JlbWVudCB0aGUgdmFyaWFibGUgdG8gaW5kaWNhdGUgdG8gdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSB0aGF0IHRoZSByZWNpcGUgaGFzIGNoYW5nZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IDxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+IGFzc2lnbm1lbnQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBpY2FsbHkgYWRlcXVhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY29tYmluZXMgdGhlIDxmaWxlbmFtZT5MSU5VWF9WRVJTSU9OPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBTb3VyY2UgQ29udHJvbCBNYW5hZ2VyIChTQ00pIHJldmlzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgZGVyaXZlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNQVic+PGZpbGVuYW1lPlNSQ1BWPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb21iaW5lZCByZXN1bHRzIGFyZSBhIHN0cmluZyB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZyBmb3JtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgMy4xOS4xMStnaXQxKzY4YTYzNWJmOGRmYjY0YjAyMjYzYzFhYzgwYzk0ODY0N2NjNzZkNWZfMSsyMThiZDhkMjAyMmI5ODUyYzYwZDMyZjBkNzcwOTMxZTNjZjM0M2UyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoaWxlIGxlbmd0aHksIHRoZSBleHRyYSB2ZXJib3NpdHkgaW4gPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwcyBlbnN1cmUgeW91IGFyZSB1c2luZyB0aGUgZXhhY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzIGZyb20gd2hpY2ggeW91IGludGVuZCB0byBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ09NUEFUSUJMRV9NQUNISU5FJz48ZmlsZW5hbWU+Q09NUEFUSUJMRV9NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgdGhlIG1hY2hpbmVzIHN1cHBvcnRlZCBieSB5b3VyIG5ldyByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpbiB0aGUgZXhhbXBsZSByZWNpcGUgaXMgc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgZGVmYXVsdCB0byBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG1hdGNoZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5IHRoZSBlbXB0eSBzdHJpbmcsICIoXiQpIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGRlZmF1bHQgc2V0dGluZyB0cmlnZ2VycyBhbiBleHBsaWNpdCBidWlsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgY2hhbmdlIGl0IHRvIG1hdGNoIGEgbGlzdCBvZiB0aGUgbWFjaGluZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHlvdXIgbmV3IHJlY2lwZSBzdXBwb3J0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdG8gc3VwcG9ydCB0aGUgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+cWVtdXg4Ni02NDwvZmlsZW5hbWU+IG1hY2hpbmVzLCB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nIGZvcm06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDT01QQVRJQkxFX01BQ0hJTkUgPSAicWVtdXg4NnxxZW11eDg2LTY0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlByb3ZpZGUgZnVydGhlciBjdXN0b21pemF0aW9ucyB0byB5b3VyIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICBhcyBuZWVkZWQganVzdCBhcyB5b3Ugd291bGQgY3VzdG9taXplIGFuIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgICAgIGxpbnV4LXlvY3RvIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0nbW9kaWZ5aW5nLWFuLWV4aXN0aW5nLXJlY2lwZSc+TW9kaWZ5aW5nCisgICAgICAgICAgICAgICAgICAgIGFuIEV4aXN0aW5nIFJlY2lwZTwvbGluaz4iIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nd29ya2luZy13aXRoLW91dC1vZi10cmVlLW1vZHVsZXMnPgorICAgICAgICA8dGl0bGU+V29ya2luZyB3aXRoIE91dC1vZi1UcmVlIE1vZHVsZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBzdGVwcyB0byBidWlsZCBvdXQtb2YtdHJlZSBtb2R1bGVzIG9uCisgICAgICAgICAgICB5b3VyIHRhcmdldCBhbmQgZGVzY3JpYmVzIGhvdyB0byBpbmNvcnBvcmF0ZSBvdXQtb2YtdHJlZSBtb2R1bGVzCisgICAgICAgICAgICBpbiB0aGUgYnVpbGQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYnVpbGRpbmctb3V0LW9mLXRyZWUtbW9kdWxlcy1vbi10aGUtdGFyZ2V0Jz4KKyAgICAgICAgICAgIDx0aXRsZT5CdWlsZGluZyBPdXQtb2YtVHJlZSBNb2R1bGVzIG9uIHRoZSBUYXJnZXQ8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGlsZSB0aGUgdHJhZGl0aW9uYWwgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCBtb2RlbCB3b3VsZCBiZQorICAgICAgICAgICAgICAgIHRvIGluY2x1ZGUga2VybmVsIG1vZHVsZXMgYXMgcGFydCBvZiB0aGUgbm9ybWFsIGJ1aWxkCisgICAgICAgICAgICAgICAgcHJvY2VzcywgeW91IG1pZ2h0IGZpbmQgaXQgdXNlZnVsIHRvIGJ1aWxkIG1vZHVsZXMgb24gdGhlCisgICAgICAgICAgICAgICAgdGFyZ2V0LgorICAgICAgICAgICAgICAgIFRoaXMgY291bGQgYmUgdGhlIGNhc2UgaWYgeW91ciB0YXJnZXQgc3lzdGVtIGlzIGNhcGFibGUKKyAgICAgICAgICAgICAgICBhbmQgcG93ZXJmdWwgZW5vdWdoIHRvIGhhbmRsZSB0aGUgbmVjZXNzYXJ5IGNvbXBpbGF0aW9uLgorICAgICAgICAgICAgICAgIEJlZm9yZSBkZWNpZGluZyB0byBidWlsZCBvbiB5b3VyIHRhcmdldCwgaG93ZXZlciwgeW91IHNob3VsZAorICAgICAgICAgICAgICAgIGNvbnNpZGVyIHRoZSBiZW5lZml0cyBvZiB1c2luZyBhIHByb3BlciBjcm9zcy1kZXZlbG9wbWVudAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50IGZyb20geW91ciBidWlsZCBob3N0LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIGJ1aWxkIG91dC1vZi10cmVlIG1vZHVsZXMgb24KKyAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0LCB0aGVyZSBhcmUgc29tZSBzdGVwcyB5b3UgbmVlZCB0byB0YWtlCisgICAgICAgICAgICAgICAgb24gdGhlIHRhcmdldCB0aGF0IGlzIHJ1bm5pbmcgeW91ciBTREsgaW1hZ2UuCisgICAgICAgICAgICAgICAgQnJpZWZseSwgdGhlIDxmaWxlbmFtZT5rZXJuZWwtZGV2PC9maWxlbmFtZT4gcGFja2FnZQorICAgICAgICAgICAgICAgIGlzIGluc3RhbGxlZCBieSBkZWZhdWx0IG9uIGFsbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4qLnNkazwvZmlsZW5hbWU+IGltYWdlcyBhbmQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmtlcm5lbC1kZXZzcmM8L2ZpbGVuYW1lPiBwYWNrYWdlIGlzIGluc3RhbGxlZAorICAgICAgICAgICAgICAgIG9uIG1hbnkgb2YgdGhlIDxmaWxlbmFtZT4qLnNkazwvZmlsZW5hbWU+IGltYWdlcy4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgbmVlZCB0byBjcmVhdGUgc29tZSBzY3JpcHRzIHByaW9yIHRvCisgICAgICAgICAgICAgICAgYXR0ZW1wdGluZyB0byBidWlsZCB0aGUgb3V0LW9mLXRyZWUgbW9kdWxlcyBvbiB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgdGhhdCBpcyBydW5uaW5nIHRoYXQgaW1hZ2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFByaW9yIHRvIGF0dGVtcHRpbmcgdG8gYnVpbGQgdGhlIG91dC1vZi10cmVlIG1vZHVsZXMsCisgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gYmUgb24gdGhlIHRhcmdldCBhcyByb290IGFuZCB5b3UgbmVlZCB0bworICAgICAgICAgICAgICAgIGNoYW5nZSB0byB0aGUgPGZpbGVuYW1lPi91c3Ivc3JjL2tlcm5lbDwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBOZXh0LCA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+IHRoZSBzY3JpcHRzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBjZCAvdXNyL3NyYy9rZXJuZWwKKyAgICAgIyBtYWtlIHNjcmlwdHMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQmVjYXVzZSBhbGwgU0RLIGltYWdlIHJlY2lwZXMgaW5jbHVkZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXYtcGtnczwvZmlsZW5hbWU+LCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsLWRldjwvZmlsZW5hbWU+IHBhY2thZ2VzIHdpbGwgYmUgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgYXMgcGFydCBvZiB0aGUgU0RLIGltYWdlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsLWRldnNyYzwvZmlsZW5hbWU+IHBhY2thZ2VzIHdpbGwgYmUgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgYXMgcGFydCBvZiBhcHBsaWNhYmxlIFNESyBpbWFnZXMuCisgICAgICAgICAgICAgICAgVGhlIFNESyB1c2VzIHRoZSBzY3JpcHRzIHdoZW4gYnVpbGRpbmcgb3V0LW9mLXRyZWUKKyAgICAgICAgICAgICAgICBtb2R1bGVzLgorICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgc3dpdGNoZWQgdG8gdGhhdCBkaXJlY3RvcnkgYW5kIGNyZWF0ZWQgdGhlCisgICAgICAgICAgICAgICAgc2NyaXB0cywgeW91IHNob3VsZCBiZSBhYmxlIHRvIGJ1aWxkIHlvdXIgb3V0LW9mLXRyZWUgbW9kdWxlcworICAgICAgICAgICAgICAgIG9uIHRoZSB0YXJnZXQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0naW5jb3Jwb3JhdGluZy1vdXQtb2YtdHJlZS1tb2R1bGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5JbmNvcnBvcmF0aW5nIE91dC1vZi1UcmVlIE1vZHVsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGlsZSBpdCBpcyBhbHdheXMgcHJlZmVyYWJsZSB0byB3b3JrIHdpdGggc291cmNlcyBpbnRlZ3JhdGVkCisgICAgICAgICAgICAgICAgaW50byB0aGUgTGludXgga2VybmVsIHNvdXJjZXMsIGlmIHlvdSBuZWVkIGFuIGV4dGVybmFsIGtlcm5lbAorICAgICAgICAgICAgICAgIG1vZHVsZSwgdGhlIDxmaWxlbmFtZT5oZWxsby1tb2QuYmI8L2ZpbGVuYW1lPiByZWNpcGUgaXMKKyAgICAgICAgICAgICAgICBhdmFpbGFibGUgYXMgYSB0ZW1wbGF0ZSBmcm9tIHdoaWNoIHlvdSBjYW4gY3JlYXRlIHlvdXIKKyAgICAgICAgICAgICAgICBvd24gb3V0LW9mLXRyZWUgTGludXgga2VybmVsIG1vZHVsZSByZWNpcGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgdGVtcGxhdGUgcmVjaXBlIGlzIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOyc+U291cmNlIFJlcG9zaXRvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgIGF0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSJtb25vc3BhY2VkIj4KKyAgICAgcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2hlbGxvLW1vZC9oZWxsby1tb2RfMC4xLmJiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBnZXQgc3RhcnRlZCwgY29weSB0aGlzIHJlY2lwZSB0byB5b3VyIGxheWVyIGFuZCBnaXZlIGl0IGEKKyAgICAgICAgICAgICAgICBtZWFuaW5nZnVsIG5hbWUgKGUuZy4gPGZpbGVuYW1lPm15bW9kdWxlXzEuMC5iYjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICBJbiB0aGUgc2FtZSBkaXJlY3RvcnksIGNyZWF0ZSBhIG5ldyBkaXJlY3RvcnkgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZXM8L2ZpbGVuYW1lPiB3aGVyZSB5b3UgY2FuIHN0b3JlIGFueSBzb3VyY2UgZmlsZXMsCisgICAgICAgICAgICAgICAgcGF0Y2hlcywgb3Igb3RoZXIgZmlsZXMgbmVjZXNzYXJ5IGZvciBidWlsZGluZworICAgICAgICAgICAgICAgIHRoZSBtb2R1bGUgdGhhdCBkbyBub3QgY29tZSB3aXRoIHRoZSBzb3VyY2VzLgorICAgICAgICAgICAgICAgIEZpbmFsbHksIHVwZGF0ZSB0aGUgcmVjaXBlIGFzIG5lZWRlZCBmb3IgdGhlIG1vZHVsZS4KKyAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHlvdSB3aWxsIG5lZWQgdG8gc2V0IHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItREVTQ1JJUFRJT04nPjxmaWxlbmFtZT5ERVNDUklQVElPTjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJQ0VOU0UnPjxmaWxlbmFtZT5MSUNFTlNFKjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIGJ1aWxkIHN5c3RlbSB1c2VkIGJ5IHRoZSBtb2R1bGUgc291cmNlcywKKyAgICAgICAgICAgICAgICB5b3UgbWlnaHQgbmVlZCB0byBtYWtlIHNvbWUgYWRqdXN0bWVudHMuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgdHlwaWNhbCBtb2R1bGUgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBsb29rcyBtdWNoIGxpa2UgdGhlIG9uZSBwcm92aWRlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5oZWxsby1tb2Q8L2ZpbGVuYW1lPiB0ZW1wbGF0ZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG9iai1tIDo9IGhlbGxvLm8KKworICAgICBTUkMgOj0gJChzaGVsbCBwd2QpCisKKyAgICAgYWxsOgorICAgICAgICAgJChNQUtFKSAtQyAkKEtFUk5FTF9TUkMpIE09JChTUkMpCisKKyAgICAgbW9kdWxlc19pbnN0YWxsOgorICAgICAgICAgJChNQUtFKSAtQyAkKEtFUk5FTF9TUkMpIE09JChTUkMpIG1vZHVsZXNfaW5zdGFsbAorICAgICAuLi4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBpbXBvcnRhbnQgcG9pbnQgdG8gbm90ZSBoZXJlIGlzIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LRVJORUxfU1JDJz48ZmlsZW5hbWU+S0VSTkVMX1NSQzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1tb2R1bGUnPjxmaWxlbmFtZT5tb2R1bGU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgY2xhc3Mgc2V0cyB0aGlzIHZhcmlhYmxlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS0VSTkVMX1BBVEgnPjxmaWxlbmFtZT5LRVJORUxfUEFUSDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TVEFHSU5HX0tFUk5FTF9ESVInPjxmaWxlbmFtZT5TVEFHSU5HX0tFUk5FTF9ESVI8L2ZpbGVuYW1lPjwvdWxpbms+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgd2l0aCB0aGUgbmVjZXNzYXJ5IExpbnV4IGtlcm5lbCBidWlsZCBpbmZvcm1hdGlvbiB0byBidWlsZAorICAgICAgICAgICAgICAgIG1vZHVsZXMuCisgICAgICAgICAgICAgICAgSWYgeW91ciBtb2R1bGUgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4gdXNlcyBhIGRpZmZlcmVudAorICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB5b3UgbWlnaHQgd2FudCB0byBvdmVycmlkZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGUoKTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBzdGVwLCBvciBjcmVhdGUgYSBwYXRjaCB0bworICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPiB0byB3b3JrIHdpdGggdGhlIG1vcmUgdHlwaWNhbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5LRVJORUxfU1JDPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0VSTkVMX1BBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFmdGVyIHlvdSBoYXZlIHByZXBhcmVkIHlvdXIgcmVjaXBlLCB5b3Ugd2lsbCBsaWtlbHkgd2FudCB0bworICAgICAgICAgICAgICAgIGluY2x1ZGUgdGhlIG1vZHVsZSBpbiB5b3VyIGltYWdlcy4KKyAgICAgICAgICAgICAgICBUbyBkbyB0aGlzLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGluCisgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCBhbmQgc2V0IG9uZSBvZiB0aGVtCisgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGVseSBmb3IgeW91ciBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTJz48ZmlsZW5hbWU+TUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EUyc+PGZpbGVuYW1lPk1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JSRUNPTU1FTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORV9FWFRSQV9SREVQRU5EUyc+PGZpbGVuYW1lPk1BQ0hJTkVfRVhUUkFfUkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTJz48ZmlsZW5hbWU+TUFDSElORV9FWFRSQV9SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBNb2R1bGVzIGFyZSBvZnRlbiBub3QgcmVxdWlyZWQgZm9yIGJvb3QgYW5kIGNhbiBiZSBleGNsdWRlZCBmcm9tCisgICAgICAgICAgICAgICAgY2VydGFpbiBidWlsZCBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGFsbG93cyBmb3IgdGhlIG1vc3QgZmxleGliaWxpdHk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTICs9ICJrZXJuZWwtbW9kdWxlLW15bW9kdWxlIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgdmFsdWUgaXMgZGVyaXZlZCBieSBhcHBlbmRpbmcgdGhlIG1vZHVsZSBmaWxlbmFtZSB3aXRob3V0CisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT4ua288L2ZpbGVuYW1lPiBleHRlbnNpb24gdG8gdGhlIHN0cmluZworICAgICAgICAgICAgICAgICJrZXJuZWwtbW9kdWxlLSIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlIHZhcmlhYmxlIGlzCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgYW5kIG5vdCBhCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUsIHRoZSBidWlsZCB3aWxsIG5vdCBmYWlsIGlmIHRoaXMgbW9kdWxlIGlzIG5vdAorICAgICAgICAgICAgICAgIGF2YWlsYWJsZSB0byBpbmNsdWRlIGluIHRoZSBpbWFnZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworCisgICAgPHNlY3Rpb24gaWQ9J2luc3BlY3RpbmctY2hhbmdlcy1hbmQtY29tbWl0cyc+CisgICAgICAgIDx0aXRsZT5JbnNwZWN0aW5nIENoYW5nZXMgYW5kIENvbW1pdHM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBjb21tb24gcXVlc3Rpb24gd2hlbiB3b3JraW5nIHdpdGggYSBrZXJuZWwgaXM6CisgICAgICAgICAgICAiV2hhdCBjaGFuZ2VzIGhhdmUgYmVlbiBhcHBsaWVkIHRvIHRoaXMgdHJlZT8iCisgICAgICAgICAgICBSYXRoZXIgdGhhbiB1c2luZyAiZ3JlcCIgYWNyb3NzIGRpcmVjdG9yaWVzIHRvIHNlZSB3aGF0IGhhcworICAgICAgICAgICAgY2hhbmdlZCwgeW91IGNhbiB1c2UgR2l0IHRvIGluc3BlY3Qgb3Igc2VhcmNoIHRoZSBrZXJuZWwgdHJlZS4KKyAgICAgICAgICAgIFVzaW5nIEdpdCBpcyBhbiBlZmZpY2llbnQgd2F5IHRvIHNlZSB3aGF0IGhhcyBjaGFuZ2VkIGluIHRoZSB0cmVlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3doYXQtY2hhbmdlZC1pbi1hLWtlcm5lbCc+CisgICAgICAgICAgICA8dGl0bGU+V2hhdCBDaGFuZ2VkIGluIGEgS2VybmVsPzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgYSBmZXcgZXhhbXBsZXMgdGhhdCBzaG93IGhvdyB0byB1c2UgR2l0CisgICAgICAgICAgICAgICAgY29tbWFuZHMgdG8gZXhhbWluZSBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIFRoZXNlIGV4YW1wbGVzIGFyZSBieSBubyBtZWFucyB0aGUgb25seSB3YXkgdG8gc2VlIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXMsIHVubGVzcyB5b3UgcHJvdmlkZSBhIGNvbW1pdAorICAgICAgICAgICAgICAgICAgICByYW5nZSwgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiBoaXN0b3J5IGlzIGJsZW5kZWQKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBZb2N0byBQcm9qZWN0IGtlcm5lbCBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZvcm0gcmFuZ2VzIGJ5IHVzaW5nIGJyYW5jaCBuYW1lcyBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICBrZXJuZWwgdHJlZSBhcyB0aGUgdXBwZXIgYW5kIGxvd2VyIGNvbW1pdCBtYXJrZXJzIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIEdpdCBjb21tYW5kcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlIGJyYW5jaCBuYW1lcyB0aHJvdWdoIHRoZSB3ZWIgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBZb2N0byBQcm9qZWN0IHNvdXJjZSByZXBvc2l0b3JpZXMgYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQuY2dpJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgVG8gc2VlIGEgZnVsbCByYW5nZSBvZiB0aGUgY2hhbmdlcywgdXNlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naXQgd2hhdGNoYW5nZWQ8L2ZpbGVuYW1lPiBjb21tYW5kIGFuZCBzcGVjaWZ5IGEKKyAgICAgICAgICAgICAgICBjb21taXQgcmFuZ2UgZm9yIHRoZSBicmFuY2gKKyAgICAgICAgICAgICAgICAoPHJlcGxhY2VhYmxlPmNvbW1pdDwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi4uPC9maWxlbmFtZT48cmVwbGFjZWFibGU+Y29tbWl0PC9yZXBsYWNlYWJsZT4pLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBsb29rcyBhdCB3aGF0IGhhcyBjaGFuZ2VkIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5lbWVubG93PC9maWxlbmFtZT4gYnJhbmNoIG9mIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE5PC9maWxlbmFtZT4ga2VybmVsLgorICAgICAgICAgICAgICAgIFRoZSBsb3dlciBjb21taXQgcmFuZ2UgaXMgdGhlIGNvbW1pdCBhc3NvY2lhdGVkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN0YW5kYXJkL2Jhc2U8L2ZpbGVuYW1lPiBicmFuY2gsIHdoaWxlCisgICAgICAgICAgICAgICAgdGhlIHVwcGVyIGNvbW1pdCByYW5nZSBpcyB0aGUgY29tbWl0IGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3RhbmRhcmQvZW1lbmxvdzwvZmlsZW5hbWU+IGJyYW5jaC4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IHdoYXRjaGFuZ2VkIG9yaWdpbi9zdGFuZGFyZC9iYXNlLi5vcmlnaW4vc3RhbmRhcmQvZW1lbmxvdworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gc2VlIHNob3J0LCBvbmUgbGluZSBzdW1tYXJpZXMgb2YgY2hhbmdlcyB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBsb2c8L2ZpbGVuYW1lPiBjb21tYW5kOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgbG9nIC0tb25lbGluZSBvcmlnaW4vc3RhbmRhcmQvYmFzZS4ub3JpZ2luL3N0YW5kYXJkL2VtZW5sb3cKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzZSB0aGlzIGNvbW1hbmQgdG8gc2VlIGNvZGUgZGlmZmVyZW5jZXMgZm9yIHRoZSBjaGFuZ2VzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgZGlmZiBvcmlnaW4vc3RhbmRhcmQvYmFzZS4ub3JpZ2luL3N0YW5kYXJkL2VtZW5sb3cKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzZSB0aGlzIGNvbW1hbmQgdG8gc2VlIHRoZSBjb21taXQgbG9nIG1lc3NhZ2VzIGFuZCB0aGUKKyAgICAgICAgICAgICAgICB0ZXh0IGRpZmZlcmVuY2VzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgc2hvdyBvcmlnaW4vc3RhbmRhcmQvYmFzZS4ub3JpZ2luL3N0YW5kYXJkL2VtZW5sb3cKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzZSB0aGlzIGNvbW1hbmQgdG8gY3JlYXRlIGluZGl2aWR1YWwgcGF0Y2hlcyBmb3IKKyAgICAgICAgICAgICAgICBlYWNoIGNoYW5nZS4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCB0aGF0IGNyZWF0ZXMgcGF0Y2ggZmlsZXMgZm9yIGVhY2gKKyAgICAgICAgICAgICAgICBjb21taXQgYW5kIHBsYWNlcyB0aGVtIGluIHlvdXIgPGZpbGVuYW1lPkRvY3VtZW50czwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgZm9ybWF0LXBhdGNoIC1vICRIT01FL0RvY3VtZW50cyBvcmlnaW4vc3RhbmRhcmQvYmFzZS4ub3JpZ2luL3N0YW5kYXJkL2VtZW5sb3cKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2hvd2luZy1hLXBhcnRpY3VsYXItZmVhdHVyZS1vci1icmFuY2gtY2hhbmdlJz4KKyAgICAgICAgICAgIDx0aXRsZT5TaG93aW5nIGEgUGFydGljdWxhciBGZWF0dXJlIG9yIEJyYW5jaCBDaGFuZ2U8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUYWdzIGluIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCB0cmVlIGRpdmlkZSBjaGFuZ2VzIGZvcgorICAgICAgICAgICAgICAgIHNpZ25pZmljYW50IGZlYXR1cmVzIG9yIGJyYW5jaGVzLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z2l0IHNob3c8L2ZpbGVuYW1lPiZuYnNwOzxyZXBsYWNlYWJsZT50YWc8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIGNvbW1hbmQgc2hvd3MgY2hhbmdlcyBiYXNlZCBvbiBhIHRhZy4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyA8ZmlsZW5hbWU+c3lzdGVtdGFwPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjaGFuZ2VzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgc2hvdyBzeXN0ZW10YXAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBicmFuY2ggLS1jb250YWluczwvZmlsZW5hbWU+Jm5ic3A7PHJlcGxhY2VhYmxlPnRhZzwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgY29tbWFuZCB0byBzaG93IHRoZSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gYSBwYXJ0aWN1bGFyIGZlYXR1cmUuCisgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIHNob3dzIHRoZSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN5c3RlbXRhcDwvZmlsZW5hbWU+IGZlYXR1cmU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBicmFuY2ggLS1jb250YWlucyBzeXN0ZW10YXAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtY29uY2VwdHMtYXBweC54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWNvbmNlcHRzLWFwcHgueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOTE3NDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWNvbmNlcHRzLWFwcHgueG1sCkBAIC0wLDAgKzEsMjUzIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8YXBwZW5kaXggaWQ9J2tlcm5lbC1kZXYtY29uY2VwdHMtYXBweCc+Cis8dGl0bGU+QWR2YW5jZWQgS2VybmVsIENvbmNlcHRzPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSdrZXJuZWwtYmlnLXBpY3R1cmUnPgorICAgICAgICA8dGl0bGU+WW9jdG8gUHJvamVjdCBLZXJuZWwgRGV2ZWxvcG1lbnQgYW5kIE1haW50ZW5hbmNlPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBLZXJuZWxzIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBZb2N0byBQcm9qZWN0LCBsaWtlIG90aGVyIGtlcm5lbHMsIGFyZSBiYXNlZCBvZmYgdGhlIExpbnV4CisgICAgICAgICAgICBrZXJuZWwgcmVsZWFzZXMgZnJvbSA8dWxpbmsgdXJsPSdodHRwOi8vd3d3Lmtlcm5lbC5vcmcnPjwvdWxpbms+LgorICAgICAgICAgICAgQXQgdGhlIGJlZ2lubmluZyBvZiBhIG1ham9yIGRldmVsb3BtZW50IGN5Y2xlLCB0aGUgWW9jdG8gUHJvamVjdCB0ZWFtCisgICAgICAgICAgICBjaG9vc2VzIGl0cyBrZXJuZWwgYmFzZWQgb24gZmFjdG9ycyBzdWNoIGFzIHJlbGVhc2UgdGltaW5nLCB0aGUgYW50aWNpcGF0ZWQgcmVsZWFzZQorICAgICAgICAgICAgdGltaW5nIG9mIGZpbmFsIHVwc3RyZWFtIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gdmVyc2lvbnMsIGFuZCBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICBmZWF0dXJlIHJlcXVpcmVtZW50cy4KKyAgICAgICAgICAgIFR5cGljYWxseSwgdGhlIGtlcm5lbCBjaG9zZW4gaXMgaW4gdGhlCisgICAgICAgICAgICBmaW5hbCBzdGFnZXMgb2YgZGV2ZWxvcG1lbnQgYnkgdGhlIGNvbW11bml0eS4KKyAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB0aGUga2VybmVsIGlzIGluIHRoZSByZWxlYXNlCisgICAgICAgICAgICBjYW5kaWRhdGUgb3IgInJjIiBwaGFzZSBhbmQgbm90IHlldCBhIGZpbmFsIHJlbGVhc2UuCisgICAgICAgICAgICBCdXQsIGJ5IGJlaW5nIGluIHRoZSBmaW5hbCBzdGFnZXMgb2YgZXh0ZXJuYWwgZGV2ZWxvcG1lbnQsIHRoZSB0ZWFtIGtub3dzIHRoYXQgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsLm9yZzwvZmlsZW5hbWU+IGZpbmFsIHJlbGVhc2Ugd2lsbCBjbGVhcmx5IGJlIHdpdGhpbiB0aGUgZWFybHkgc3RhZ2VzIG9mCisgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCB3aW5kb3cuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGJhbGFuY2UgYWxsb3dzIHRoZSB0ZWFtIHRvIGRlbGl2ZXIgdGhlIG1vc3QgdXAtdG8tZGF0ZSBrZXJuZWwKKyAgICAgICAgICAgIHBvc3NpYmxlLCB3aGlsZSBzdGlsbCBlbnN1cmluZyB0aGF0IHRoZSB0ZWFtIGhhcyBhIHN0YWJsZSBvZmZpY2lhbCByZWxlYXNlIGZvcgorICAgICAgICAgICAgdGhlIGJhc2VsaW5lIExpbnV4IGtlcm5lbCB2ZXJzaW9uLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHVsdGltYXRlIHNvdXJjZSBmb3Iga2VybmVscyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgWW9jdG8gUHJvamVjdCBhcmUgcmVsZWFzZWQga2VybmVscworICAgICAgICAgICAgZnJvbSA8ZmlsZW5hbWU+a2VybmVsLm9yZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgSW4gYWRkaXRpb24gdG8gYSBmb3VuZGF0aW9uYWwga2VybmVsIGZyb20gPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiwgdGhlCisgICAgICAgICAgICBrZXJuZWxzIGF2YWlsYWJsZSBjb250YWluIGEgbWl4IG9mIGltcG9ydGFudCBuZXcgbWFpbmxpbmUKKyAgICAgICAgICAgIGRldmVsb3BtZW50cywgbm9uLW1haW5saW5lIGRldmVsb3BtZW50cyAod2hlbiB0aGVyZSBpcyBubyBhbHRlcm5hdGl2ZSksCisgICAgICAgICAgICBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgZGV2ZWxvcG1lbnRzLAorICAgICAgICAgICAgYW5kIGN1c3RvbSBmZWF0dXJlcy4KKyAgICAgICAgICAgIFRoZXNlIGFkZGl0aW9ucyByZXN1bHQgaW4gYSBjb21tZXJjaWFsbHkgcmVsZWFzZWQgWW9jdG8gUHJvamVjdCBMaW51eCBrZXJuZWwgdGhhdCBjYXRlcnMKKyAgICAgICAgICAgIHRvIHNwZWNpZmljIGVtYmVkZGVkIGRlc2lnbmVyIG5lZWRzIGZvciB0YXJnZXRlZCBoYXJkd2FyZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE9uY2UgYSBrZXJuZWwgaXMgb2ZmaWNpYWxseSByZWxlYXNlZCwgdGhlIFlvY3RvIFByb2plY3QgdGVhbSBnb2VzIGludG8KKyAgICAgICAgICAgIHRoZWlyIG5leHQgZGV2ZWxvcG1lbnQgY3ljbGUsIG9yIHVwd2FyZCByZXZpc2lvbiAodXByZXYpIGN5Y2xlLCB3aGlsZSBzdGlsbAorICAgICAgICAgICAgY29udGludWluZyBtYWludGVuYW5jZSBvbiB0aGUgcmVsZWFzZWQga2VybmVsLgorICAgICAgICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgbW9zdCBzdXN0YWluYWJsZSBhbmQgc3RhYmxlIHdheQorICAgICAgICAgICAgdG8gaW5jbHVkZSBmZWF0dXJlIGRldmVsb3BtZW50IHVwc3RyZWFtIGlzIHRocm91Z2ggYSBrZXJuZWwgdXByZXYgcHJvY2Vzcy4KKyAgICAgICAgICAgIEJhY2stcG9ydGluZyBodW5kcmVkcyBvZiBpbmRpdmlkdWFsIGZpeGVzIGFuZCBtaW5vciBmZWF0dXJlcyBmcm9tIHZhcmlvdXMKKyAgICAgICAgICAgIGtlcm5lbCB2ZXJzaW9ucyBpcyBub3Qgc3VzdGFpbmFibGUgYW5kIGNhbiBlYXNpbHkgY29tcHJvbWlzZSBxdWFsaXR5LgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRHVyaW5nIHRoZSB1cHJldiBjeWNsZSwgdGhlIFlvY3RvIFByb2plY3QgdGVhbSB1c2VzIGFuIG9uZ29pbmcgYW5hbHlzaXMgb2YKKyAgICAgICAgICAgIGtlcm5lbCBkZXZlbG9wbWVudCwgQlNQIHN1cHBvcnQsIGFuZCByZWxlYXNlIHRpbWluZyB0byBzZWxlY3QgdGhlIGJlc3QKKyAgICAgICAgICAgIHBvc3NpYmxlIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gdmVyc2lvbi4KKyAgICAgICAgICAgIFRoZSB0ZWFtIGNvbnRpbnVhbGx5IG1vbml0b3JzIGNvbW11bml0eSBrZXJuZWwKKyAgICAgICAgICAgIGRldmVsb3BtZW50IHRvIGxvb2sgZm9yIHNpZ25pZmljYW50IGZlYXR1cmVzIG9mIGludGVyZXN0LgorICAgICAgICAgICAgVGhlIHRlYW0gZG9lcyBjb25zaWRlciBiYWNrLXBvcnRpbmcgbGFyZ2UgZmVhdHVyZXMgaWYgdGhleSBoYXZlIGEgc2lnbmlmaWNhbnQgYWR2YW50YWdlLgorICAgICAgICAgICAgVXNlciBvciBjb21tdW5pdHkgZGVtYW5kIGNhbiBhbHNvIHRyaWdnZXIgYSBiYWNrLXBvcnQgb3IgY3JlYXRpb24gb2YgbmV3CisgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IGluIHRoZSBZb2N0byBQcm9qZWN0IGJhc2VsaW5lIGtlcm5lbCBkdXJpbmcgdGhlIHVwcmV2IGN5Y2xlLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgR2VuZXJhbGx5IHNwZWFraW5nLCBldmVyeSBuZXcga2VybmVsIGJvdGggYWRkcyBmZWF0dXJlcyBhbmQgaW50cm9kdWNlcyBuZXcgYnVncy4KKyAgICAgICAgICAgIFRoZXNlIGNvbnNlcXVlbmNlcyBhcmUgdGhlIGJhc2ljIHByb3BlcnRpZXMgb2YgdXBzdHJlYW0ga2VybmVsIGRldmVsb3BtZW50IGFuZCBhcmUKKyAgICAgICAgICAgIG1hbmFnZWQgYnkgdGhlIFlvY3RvIFByb2plY3QgdGVhbSdzIGtlcm5lbCBzdHJhdGVneS4KKyAgICAgICAgICAgIEl0IGlzIHRoZSBZb2N0byBQcm9qZWN0IHRlYW0ncyBwb2xpY3kgdG8gbm90IGJhY2stcG9ydCBtaW5vciBmZWF0dXJlcyB0byB0aGUgcmVsZWFzZWQga2VybmVsLgorICAgICAgICAgICAgVGhleSBvbmx5IGNvbnNpZGVyIGJhY2stcG9ydGluZyBzaWduaWZpY2FudCB0ZWNobm9sb2dpY2FsIGp1bXBzIC0gYW5kLCB0aGF0IGlzIGRvbmUKKyAgICAgICAgICAgIGFmdGVyIGEgY29tcGxldGUgZ2FwIGFuYWx5c2lzLgorICAgICAgICAgICAgVGhlIHJlYXNvbiBmb3IgdGhpcyBwb2xpY3kgaXMgdGhhdCBiYWNrLXBvcnRpbmcgYW55IHNtYWxsIHRvIG1lZGl1bSBzaXplZCBjaGFuZ2UKKyAgICAgICAgICAgIGZyb20gYW4gZXZvbHZpbmcga2VybmVsIGNhbiBlYXNpbHkgY3JlYXRlIG1pc21hdGNoZXMsIGluY29tcGF0aWJpbGl0aWVzIGFuZCB2ZXJ5CisgICAgICAgICAgICBzdWJ0bGUgZXJyb3JzLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlc2UgcG9saWNpZXMgcmVzdWx0IGluIGJvdGggYSBzdGFibGUgYW5kIGEgY3V0dGluZworICAgICAgICAgICAgZWRnZSBrZXJuZWwgdGhhdCBtaXhlcyBmb3J3YXJkIHBvcnRzIG9mIGV4aXN0aW5nIGZlYXR1cmVzIGFuZCBzaWduaWZpY2FudCBhbmQgY3JpdGljYWwKKyAgICAgICAgICAgIG5ldyBmdW5jdGlvbmFsaXR5LgorICAgICAgICAgICAgRm9yd2FyZCBwb3J0aW5nIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGtlcm5lbHMgYXZhaWxhYmxlIHRocm91Z2ggdGhlIFlvY3RvIFByb2plY3Qga2VybmVsCisgICAgICAgICAgICBjYW4gYmUgdGhvdWdodCBvZiBhcyBhICJtaWNybyB1cHJldi4iCisgICAgICAgICAgICBUaGUgbWFueSDigJxtaWNybyB1cHJldnPigJ0gcHJvZHVjZSBhIGtlcm5lbCB2ZXJzaW9uIHdpdGggYSBtaXggb2YKKyAgICAgICAgICAgIGltcG9ydGFudCBuZXcgbWFpbmxpbmUsIG5vbi1tYWlubGluZSwgQlNQIGRldmVsb3BtZW50cyBhbmQgZmVhdHVyZSBpbnRlZ3JhdGlvbnMuCisgICAgICAgICAgICBUaGlzIGtlcm5lbCBnaXZlcyBpbnNpZ2h0IGludG8gbmV3IGZlYXR1cmVzIGFuZCBhbGxvd3MgZm9jdXNlZAorICAgICAgICAgICAgYW1vdW50cyBvZiB0ZXN0aW5nIHRvIGJlIGRvbmUgb24gdGhlIGtlcm5lbCwgd2hpY2ggcHJldmVudHMKKyAgICAgICAgICAgIHN1cnByaXNlcyB3aGVuIHNlbGVjdGluZyB0aGUgbmV4dCBtYWpvciB1cHJldi4KKyAgICAgICAgICAgIFRoZSBxdWFsaXR5IG9mIHRoZXNlIGN1dHRpbmcgZWRnZSBrZXJuZWxzIGlzIGV2b2x2aW5nIGFuZCB0aGUga2VybmVscyBhcmUgdXNlZCBpbiBsZWFkaW5nIGVkZ2UKKyAgICAgICAgICAgIGZlYXR1cmUgYW5kIEJTUCBkZXZlbG9wbWVudC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdrZXJuZWwtYXJjaGl0ZWN0dXJlJz4KKyAgICAgICAgPHRpdGxlPktlcm5lbCBBcmNoaXRlY3R1cmU8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUga2VybmVscyBhdmFpbGFibGUgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgIFlvY3RvIFByb2plY3QgYW5kIHByb3ZpZGVzIGluZm9ybWF0aW9uCisgICAgICAgICAgICBvbiB0aGUgbWVjaGFuaXNtcyB1c2VkIHRvIGFjaGlldmUgdGhhdCBhcmNoaXRlY3R1cmUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYXJjaGl0ZWN0dXJlLW92ZXJ2aWV3Jz4KKyAgICAgICAgICAgIDx0aXRsZT5PdmVydmlldzwvdGl0bGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQgZWFybGllciwgYSBrZXkgZ29hbCBvZiB0aGUgWW9jdG8gUHJvamVjdCBpcyB0byBwcmVzZW50IHRoZQorICAgICAgICAgICAgICAgIGRldmVsb3BlciB3aXRoCisgICAgICAgICAgICAgICAgYSBrZXJuZWwgdGhhdCBoYXMgYSBjbGVhciBhbmQgY29udGludW91cyBoaXN0b3J5IHRoYXQgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4KKyAgICAgICAgICAgICAgICBUaGUgYXJjaGl0ZWN0dXJlIGFuZCBtZWNoYW5pc21zIHVzZWQgYWNoaWV2ZSB0aGF0IGdvYWwgaW4gYSBtYW5uZXIgc2ltaWxhciB0byB0aGUKKyAgICAgICAgICAgICAgICB1cHN0cmVhbSA8ZmlsZW5hbWU+a2VybmVsLm9yZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiB0aGluayBvZiBhIFlvY3RvIFByb2plY3Qga2VybmVsIGFzIGNvbnNpc3Rpbmcgb2YgYSBiYXNlbGluZSBMaW51eCBrZXJuZWwgd2l0aAorICAgICAgICAgICAgICAgIGFkZGVkIGZlYXR1cmVzIGxvZ2ljYWxseSBzdHJ1Y3R1cmVkIG9uIHRvcCBvZiB0aGUgYmFzZWxpbmUuCisgICAgICAgICAgICAgICAgVGhlIGZlYXR1cmVzIGFyZSB0YWdnZWQgYW5kIG9yZ2FuaXplZCBieSB3YXkgb2YgYSBicmFuY2hpbmcgc3RyYXRlZ3kgaW1wbGVtZW50ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgc291cmNlIGNvZGUgbWFuYWdlciAoU0NNKSBHaXQuCisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIEdpdCBhcyBhcHBsaWVkIHRvIHRoZSBZb2N0byBQcm9qZWN0LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2dpdCc+R2l0PC91bGluaz4iIHNlY3Rpb24gaW4gdGhlCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcmVzdWx0IGlzIHRoYXQgdGhlIHVzZXIgaGFzIHRoZSBhYmlsaXR5IHRvIHNlZSB0aGUgYWRkZWQgZmVhdHVyZXMgYW5kCisgICAgICAgICAgICAgICAgdGhlIGNvbW1pdHMgdGhhdCBtYWtlIHVwIHRob3NlIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgIEluIGFkZGl0aW9uIHRvIGJlaW5nIGFibGUgdG8gc2VlIGFkZGVkIGZlYXR1cmVzLCB0aGUgdXNlciBjYW4gYWxzbyB2aWV3IHRoZSBoaXN0b3J5IG9mIHdoYXQKKyAgICAgICAgICAgICAgICBtYWRlIHVwIHRoZSBiYXNlbGluZSBrZXJuZWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGlsbHVzdHJhdGlvbiBzaG93cyB0aGUgY29uY2VwdHVhbCBZb2N0byBQcm9qZWN0IGtlcm5lbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9rZXJuZWwtYXJjaGl0ZWN0dXJlLW92ZXJ2aWV3LnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGU9IjEwMCIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIHRoZSBpbGx1c3RyYXRpb24sIHRoZSAiS2VybmVsLm9yZyBCcmFuY2ggUG9pbnQiCisgICAgICAgICAgICAgICAgbWFya3MgdGhlIHNwZWNpZmljIHNwb3QgKG9yIHJlbGVhc2UpIGZyb20KKyAgICAgICAgICAgICAgICB3aGljaCB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgaXMgY3JlYXRlZC4KKyAgICAgICAgICAgICAgICBGcm9tIHRoaXMgcG9pbnQgInVwIiBpbiB0aGUgdHJlZSwgZmVhdHVyZXMgYW5kIGRpZmZlcmVuY2VzIGFyZSBvcmdhbml6ZWQgYW5kIHRhZ2dlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSAiWW9jdG8gUHJvamVjdCBCYXNlbGluZSBLZXJuZWwiIGNvbnRhaW5zIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyBjb21tb24gdG8gZXZlcnkga2VybmVsCisgICAgICAgICAgICAgICAgdHlwZSBhbmQgQlNQIHRoYXQgaXMgb3JnYW5pemVkIGZ1cnRoZXIgdXAgdGhlIHRyZWUuCisgICAgICAgICAgICAgICAgUGxhY2luZyB0aGVzZSBjb21tb24gZmVhdHVyZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgdHJlZSB0aGlzIHdheSBtZWFucyBmZWF0dXJlcyBkbyBub3QgaGF2ZSB0byBiZSBkdXBsaWNhdGVkIGFsb25nIGluZGl2aWR1YWwgYnJhbmNoZXMgb2YgdGhlCisgICAgICAgICAgICAgICAgc3RydWN0dXJlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRnJvbSB0aGUgWW9jdG8gUHJvamVjdCBCYXNlbGluZSBLZXJuZWwsIGJyYW5jaCBwb2ludHMgcmVwcmVzZW50IHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgICAgICAgICBmb3IgaW5kaXZpZHVhbCBCU1BzIGFzIHdlbGwgYXMgcmVhbC10aW1lIGtlcm5lbHMuCisgICAgICAgICAgICAgICAgVGhlIGlsbHVzdHJhdGlvbiByZXByZXNlbnRzIHRoaXMgdGhyb3VnaCB0aHJlZSBCU1Atc3BlY2lmaWMgYnJhbmNoZXMgYW5kIGEgcmVhbC10aW1lCisgICAgICAgICAgICAgICAga2VybmVsIGJyYW5jaC4KKyAgICAgICAgICAgICAgICBFYWNoIGJyYW5jaCByZXByZXNlbnRzIHNvbWUgdW5pcXVlIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBCU1Agb3IgYSByZWFsLXRpbWUga2VybmVsLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlIHN0cnVjdHVyZSwgdGhlIHJlYWwtdGltZSBrZXJuZWwgYnJhbmNoIGhhcyBjb21tb24gZmVhdHVyZXMgZm9yIGFsbAorICAgICAgICAgICAgICAgIHJlYWwtdGltZSBrZXJuZWxzIGFuZCBjb250YWlucworICAgICAgICAgICAgICAgIG1vcmUgYnJhbmNoZXMgZm9yIGluZGl2aWR1YWwgQlNQLXNwZWNpZmljIHJlYWwtdGltZSBrZXJuZWxzLgorICAgICAgICAgICAgICAgIFRoZSBpbGx1c3RyYXRpb24gc2hvd3MgdGhyZWUgYnJhbmNoZXMgYXMgYW4gZXhhbXBsZS4KKyAgICAgICAgICAgICAgICBFYWNoIGJyYW5jaCBwb2ludHMgdGhlIHdheSB0byBzcGVjaWZpYywgdW5pcXVlIGZlYXR1cmVzIGZvciBhIHJlc3BlY3RpdmUgcmVhbC10aW1lCisgICAgICAgICAgICAgICAga2VybmVsIGFzIHRoZXkgYXBwbHkgdG8gYSBnaXZlbiBCU1AuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcmVzdWx0aW5nIHRyZWUgc3RydWN0dXJlIHByZXNlbnRzIGEgY2xlYXIgcGF0aCBvZiBtYXJrZXJzIChvciBicmFuY2hlcykgdG8gdGhlCisgICAgICAgICAgICAgICAgZGV2ZWxvcGVyIHRoYXQsIGZvciBhbGwgcHJhY3RpY2FsIHB1cnBvc2VzLCBpcyB0aGUga2VybmVsIG5lZWRlZCBmb3IgYW55IGdpdmVuIHNldAorICAgICAgICAgICAgICAgIG9mIHJlcXVpcmVtZW50cy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdicmFuY2hpbmctYW5kLXdvcmtmbG93Jz4KKyAgICAgICAgICAgIDx0aXRsZT5CcmFuY2hpbmcgU3RyYXRlZ3kgYW5kIFdvcmtmbG93PC90aXRsZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHRlYW0gY3JlYXRlcyBrZXJuZWwgYnJhbmNoZXMgYXQgcG9pbnRzIHdoZXJlIGZ1bmN0aW9uYWxpdHkgaXMKKyAgICAgICAgICAgICAgICBubyBsb25nZXIgc2hhcmVkIGFuZCB0aHVzLCBuZWVkcyB0byBiZSBpc29sYXRlZC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYm9hcmQtc3BlY2lmaWMgaW5jb21wYXRpYmlsaXRpZXMgd291bGQgcmVxdWlyZSBkaWZmZXJlbnQgZnVuY3Rpb25hbGl0eQorICAgICAgICAgICAgICAgIGFuZCB3b3VsZCByZXF1aXJlIGEgYnJhbmNoIHRvIHNlcGFyYXRlIHRoZSBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICBMaWtld2lzZSwgZm9yIHNwZWNpZmljIGtlcm5lbCBmZWF0dXJlcywgdGhlIHNhbWUgYnJhbmNoaW5nIHN0cmF0ZWd5IGlzIHVzZWQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGJyYW5jaGluZyBzdHJhdGVneSByZXN1bHRzIGluIGEgdHJlZSB0aGF0IGhhcyBmZWF0dXJlcyBvcmdhbml6ZWQgdG8gYmUgc3BlY2lmaWMKKyAgICAgICAgICAgICAgICBmb3IgcGFydGljdWxhciBmdW5jdGlvbmFsaXR5LCBzaW5nbGUga2VybmVsIHR5cGVzLCBvciBhIHN1YnNldCBvZiBrZXJuZWwgdHlwZXMuCisgICAgICAgICAgICAgICAgVGhpcyBzdHJhdGVneSBhbHNvIHJlc3VsdHMgaW4gbm90IGhhdmluZyB0byBzdG9yZSB0aGUgc2FtZSBmZWF0dXJlIHR3aWNlCisgICAgICAgICAgICAgICAgaW50ZXJuYWxseSBpbiB0aGUgdHJlZS4KKyAgICAgICAgICAgICAgICBSYXRoZXIsIHRoZSBrZXJuZWwgdGVhbSBzdG9yZXMgdGhlIHVuaXF1ZSBkaWZmZXJlbmNlcyByZXF1aXJlZCB0byBhcHBseSB0aGUKKyAgICAgICAgICAgICAgICBmZWF0dXJlIG9udG8gdGhlIGtlcm5lbCB0eXBlIGluIHF1ZXN0aW9uLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB0ZWFtIHN0cml2ZXMgdG8gcGxhY2UgZmVhdHVyZXMgaW4gdGhlIHRyZWUgc3VjaCB0aGF0IHRoZXkgY2FuIGJlCisgICAgICAgICAgICAgICAgICAgIHNoYXJlZCBieSBhbGwgYm9hcmRzIGFuZCBrZXJuZWwgdHlwZXMgd2hlcmUgcG9zc2libGUuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGR1cmluZyBkZXZlbG9wbWVudCBjeWNsZXMgb3Igd2hlbiBsYXJnZSBmZWF0dXJlcyBhcmUgbWVyZ2VkLAorICAgICAgICAgICAgICAgICAgICB0aGUgdGVhbSBjYW5ub3QgYWx3YXlzIGZvbGxvdyB0aGlzIHByYWN0aWNlLgorICAgICAgICAgICAgICAgICAgICBJbiB0aG9zZSBjYXNlcywgdGhlIHRlYW0gdXNlcyBpc29sYXRlZCBicmFuY2hlcyB0byBtZXJnZSBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCU1Atc3BlY2lmaWMgY29kZSBhZGRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gYSBzaW1pbGFyIG1hbm5lciB0byBrZXJuZWwtc3BlY2lmaWMgYWRkaXRpb25zLgorICAgICAgICAgICAgICAgIFNvbWUgQlNQcyBvbmx5IG1ha2Ugc2Vuc2UgZ2l2ZW4gY2VydGFpbiBrZXJuZWwgdHlwZXMuCisgICAgICAgICAgICAgICAgU28sIGZvciB0aGVzZSB0eXBlcywgdGhlIHRlYW0gY3JlYXRlcyBicmFuY2hlcyBvZmYgdGhlIGVuZCBvZiB0aGF0IGtlcm5lbCB0eXBlIGZvciBhbGwKKyAgICAgICAgICAgICAgICBvZiB0aGUgQlNQcyB0aGF0IGFyZSBzdXBwb3J0ZWQgb24gdGhhdCBrZXJuZWwgdHlwZS4KKyAgICAgICAgICAgICAgICBGcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiB0aGUgdG9vbHMgdGhhdCBjcmVhdGUgdGhlIEJTUCBicmFuY2gsIHRoZSBCU1AgaXMgcmVhbGx5IG5vCisgICAgICAgICAgICAgICAgZGlmZmVyZW50IHRoYW4gYSBmZWF0dXJlLgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgdGhlIHNhbWUgYnJhbmNoaW5nIHN0cmF0ZWd5IGFwcGxpZXMgdG8gQlNQcyBhcyBpdCBkb2VzIHRvIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgIFNvIGFnYWluLCByYXRoZXIgdGhhbiBzdG9yZSB0aGUgQlNQIHR3aWNlLCB0aGUgdGVhbSBvbmx5IHN0b3JlcyB0aGUgdW5pcXVlCisgICAgICAgICAgICAgICAgZGlmZmVyZW5jZXMgZm9yIHRoZSBCU1AgYWNyb3NzIHRoZSBzdXBwb3J0ZWQgbXVsdGlwbGUga2VybmVscy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoaWxlIHRoaXMgc3RyYXRlZ3kgY2FuIHJlc3VsdCBpbiBhIHRyZWUgd2l0aCBhIHNpZ25pZmljYW50IG51bWJlciBvZiBicmFuY2hlcywgaXQgaXMKKyAgICAgICAgICAgICAgICBpbXBvcnRhbnQgdG8gcmVhbGl6ZSB0aGF0IGZyb20gdGhlIGRldmVsb3BlcidzIHBvaW50IG9mIHZpZXcsIHRoZXJlIGlzIGEgbGluZWFyCisgICAgICAgICAgICAgICAgcGF0aCB0aGF0IHRyYXZlbHMgZnJvbSB0aGUgYmFzZWxpbmUgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiwgdGhyb3VnaCBhIHNlbGVjdAorICAgICAgICAgICAgICAgIGdyb3VwIG9mIGZlYXR1cmVzIGFuZCBlbmRzIHdpdGggdGhlaXIgQlNQLXNwZWNpZmljIGNvbW1pdHMuCisgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHRoZSBkaXZpc2lvbnMgb2YgdGhlIGtlcm5lbCBhcmUgdHJhbnNwYXJlbnQgYW5kIGFyZSBub3QgcmVsZXZhbnQKKyAgICAgICAgICAgICAgICB0byB0aGUgZGV2ZWxvcGVyIG9uIGEgZGF5LXRvLWRheSBiYXNpcy4KKyAgICAgICAgICAgICAgICBGcm9tIHRoZSBkZXZlbG9wZXIncyBwZXJzcGVjdGl2ZSwgdGhpcyBwYXRoIGlzIHRoZSAibWFzdGVyIiBicmFuY2guCisgICAgICAgICAgICAgICAgVGhlIGRldmVsb3BlciBkb2VzIG5vdCBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoZSBleGlzdGVuY2Ugb2YgYW55IG90aGVyIGJyYW5jaGVzIGF0IGFsbC4KKyAgICAgICAgICAgICAgICBPZiBjb3Vyc2UsIHRoZXJlIGlzIHZhbHVlIGluIHRoZSBleGlzdGVuY2Ugb2YgdGhlc2UgYnJhbmNoZXMKKyAgICAgICAgICAgICAgICBpbiB0aGUgdHJlZSwgc2hvdWxkIGEgcGVyc29uIGRlY2lkZSB0byBleHBsb3JlIHRoZW0uCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgY29tcGFyaXNvbiBiZXR3ZWVuIHR3byBCU1BzIGF0IGVpdGhlciB0aGUgY29tbWl0IGxldmVsIG9yIGF0IHRoZSBsaW5lLWJ5LWxpbmUKKyAgICAgICAgICAgICAgICBjb2RlIDxmaWxlbmFtZT5kaWZmPC9maWxlbmFtZT4gbGV2ZWwgaXMgbm93IGEgdHJpdmlhbCBvcGVyYXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXb3JraW5nIHdpdGggdGhlIGtlcm5lbCBhcyBhIHN0cnVjdHVyZWQgdHJlZSBmb2xsb3dzIHJlY29nbml6ZWQgY29tbXVuaXR5IGJlc3QgcHJhY3RpY2VzLgorICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIHRoZSBrZXJuZWwgYXMgc2hpcHBlZCB3aXRoIHRoZSBwcm9kdWN0LCBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICBjb25zaWRlcmVkIGFuICJ1cHN0cmVhbSBzb3VyY2UiIGFuZCB2aWV3ZWQgYXMgYSBzZXJpZXMgb2YKKyAgICAgICAgICAgICAgICBoaXN0b3JpY2FsIGFuZCBkb2N1bWVudGVkIG1vZGlmaWNhdGlvbnMgKGNvbW1pdHMpLgorICAgICAgICAgICAgICAgIFRoZXNlIG1vZGlmaWNhdGlvbnMgcmVwcmVzZW50IHRoZSBkZXZlbG9wbWVudCBhbmQgc3RhYmlsaXphdGlvbiBkb25lCisgICAgICAgICAgICAgICAgYnkgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIGRldmVsb3BtZW50IHRlYW0uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIGNvbW1pdHMgb25seSBjaGFuZ2UgYXQgc2lnbmlmaWNhbnQgcmVsZWFzZSBwb2ludHMgaW4gdGhlIHByb2R1Y3QgbGlmZSBjeWNsZSwKKyAgICAgICAgICAgICAgICBkZXZlbG9wZXJzIGNhbiB3b3JrIG9uIGEgYnJhbmNoIGNyZWF0ZWQKKyAgICAgICAgICAgICAgICBmcm9tIHRoZSBsYXN0IHJlbGV2YW50IGNvbW1pdCBpbiB0aGUgc2hpcHBlZCBZb2N0byBQcm9qZWN0IGtlcm5lbC4KKyAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQgcHJldmlvdXNseSwgdGhlIHN0cnVjdHVyZSBpcyB0cmFuc3BhcmVudCB0byB0aGUgZGV2ZWxvcGVyCisgICAgICAgICAgICAgICAgYmVjYXVzZSB0aGUga2VybmVsIHRyZWUgaXMgbGVmdCBpbiB0aGlzIHN0YXRlIGFmdGVyIGNsb25pbmcgYW5kIGJ1aWxkaW5nIHRoZSBrZXJuZWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc291cmNlLWNvZGUtbWFuYWdlci1naXQnPgorICAgICAgICAgICAgPHRpdGxlPlNvdXJjZSBDb2RlIE1hbmFnZXIgLSBHaXQ8L3RpdGxlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIFNvdXJjZSBDb2RlIE1hbmFnZXIgKFNDTSkgaXMgR2l0LgorICAgICAgICAgICAgICAgIFRoaXMgU0NNIGlzIHRoZSBvYnZpb3VzIG1lY2hhbmlzbSBmb3IgbWVldGluZyB0aGUgcHJldmlvdXNseSBtZW50aW9uZWQgZ29hbHMuCisgICAgICAgICAgICAgICAgTm90IG9ubHkgaXMgaXQgdGhlIFNDTSBmb3IgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiBidXQsCisgICAgICAgICAgICAgICAgR2l0IGNvbnRpbnVlcyB0byBncm93IGluIHBvcHVsYXJpdHkgYW5kIHN1cHBvcnRzIG1hbnkgZGlmZmVyZW50IHdvcmsgZmxvd3MsCisgICAgICAgICAgICAgICAgZnJvbnQtZW5kcyBhbmQgbWFuYWdlbWVudCB0ZWNobmlxdWVzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGRvY3VtZW50YXRpb24gb24gR2l0IGF0IDx1bGluayB1cmw9J2h0dHA6Ly9naXQtc2NtLmNvbS9kb2N1bWVudGF0aW9uJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gZ2V0IGFuIGludHJvZHVjdGlvbiB0byBHaXQgYXMgaXQgYXBwbGllcyB0byB0aGUgWW9jdG8gUHJvamVjdCBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZ2l0Jz5HaXQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICBUaGVzZSByZWZlcmVuY2VkIHNlY3Rpb25zIG92ZXJ2aWV3IEdpdCBhbmQgZGVzY3JpYmUgYSBtaW5pbWFsIHNldCBvZgorICAgICAgICAgICAgICAgIGNvbW1hbmRzIHRoYXQgYWxsb3dzIHlvdSB0byBiZSBmdW5jdGlvbmFsIHVzaW5nIEdpdC4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgYXMgbXVjaCwgb3IgYXMgbGl0dGxlLCBvZiB3aGF0IEdpdCBoYXMgdG8gb2ZmZXIgdG8gYWNjb21wbGlzaCB3aGF0CisgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIGZvciB5b3VyIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgaGF2ZSB0byBiZSBhICJHaXQgTWFzdGVyIiBpbiBvcmRlciB0byB1c2UgaXQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+Cis8L2FwcGVuZGl4PgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWN1c3RvbWl6YXRpb24ueHNsIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1jdXN0b21pemF0aW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjViNzM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDI2IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiIHZlcnNpb249IjEuMCI+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9kb2Nib29rLW1pcnJvci9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKzwhLS0KKworICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9wZXJtYWxpbmtzLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvc2VjdGlvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbCIvPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9IidrZXJuZWwtZGV2LXN0eWxlLmNzcyciIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2hhcHRlci5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJhcHBlbmRpeC5hdXRvbGFiZWwiPkE8L3hzbDpwYXJhbT4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24ubGFiZWwuaW5jbHVkZXMuY29tcG9uZW50LmxhYmVsIiBzZWxlY3Q9IjEiIC8+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M1NmE1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDM1IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldAorCXhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorCXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgorCXhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiCisJdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL2RvY2Jvb2stbWlycm9yL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworPCEtLQorCisgIDx4c2w6aW1wb3J0IGhyZWY9Ii4uL3RlbXBsYXRlLzEuNzYuMS9kb2Nib29rLXhzbC0xLjc2LjEvZWNsaXBzZS9lY2xpcHNlMy54c2wiIC8+CisKKyAgPHhzbDppbXBvcnQKKwkgIGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEvZWNsaXBzZS9lY2xpcHNlMy54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmtlci5vdXRwdXQuaW5kZW50IiBzZWxlY3Q9Iid5ZXMnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsucXVpZXRseSIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsuZmlyc3Quc2VjdGlvbnMiIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNodW5rLnNlY3Rpb24uZGVwdGgiIHNlbGVjdD0iMTAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJ1c2UuaWQuYXMuZmlsZW5hbWUiIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9InVsaW5rLnRhcmdldCIgc2VsZWN0PSInX3NlbGYnIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImJhc2UuZGlyIiBzZWxlY3Q9IidodG1sL2tlcm5lbC1kZXYvJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSInLi4vYm9vay5jc3MnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZWNsaXBzZS5tYW5pZmVzdCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY3JlYXRlLnBsdWdpbi54bWwiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InN1cHByZXNzLm5hdmlnYXRpb24iIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmluZGV4IiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaGFwdGVyLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImFwcGVuZGl4LmF1dG9sYWJlbCI+QTwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwiIHNlbGVjdD0iMSIgLz4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWV4YW1wbGVzLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtZXhhbXBsZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkOWFlZjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWV4YW1wbGVzLnhtbApAQCAtMCwwICsxLDkxOCBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J2tlcm5lbC1ob3ctdG8nPgorCis8dGl0bGU+V29ya2luZyB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IEtlcm5lbDwvdGl0bGU+CisKKworPHNlY3Rpb24gaWQ9J2FjdGlvbnMtb3JnJz4KKyAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyBob3cgdG8gYWNjb21wbGlzaCB0YXNrcyBpbnZvbHZpbmcgYSBrZXJuZWwncyB0cmVlIHN0cnVjdHVyZS4KKyAgICAgICAgVGhlIGluZm9ybWF0aW9uIGlzIGRlc2lnbmVkIHRvIGhlbHAgdGhlIGRldmVsb3BlciB0aGF0IHdhbnRzIHRvIG1vZGlmeSB0aGUgWW9jdG8KKyAgICAgICAgUHJvamVjdCBrZXJuZWwgYW5kIGNvbnRyaWJ1dGUgY2hhbmdlcyB1cHN0cmVhbSB0byB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgVGhlIGluZm9ybWF0aW9uIGNvdmVycyB0aGUgZm9sbG93aW5nOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRyZWUgY29uc3RydWN0aW9uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QnVpbGQgc3RyYXRlZ2llczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldvcmtmbG93IGV4YW1wbGVzPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd0cmVlLWNvbnN0cnVjdGlvbic+CisgICAgICAgIDx0aXRsZT5UcmVlIENvbnN0cnVjdGlvbjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBjb25zdHJ1Y3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHNvdXJjZSByZXBvc2l0b3JpZXMKKyAgICAgICAgICAgIGFzIGFjY29tcGxpc2hlZCBieSB0aGUgWW9jdG8gUHJvamVjdCB0ZWFtIHRvIGNyZWF0ZSBrZXJuZWwgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgVGhlc2Uga2VybmVsIHJlcG9zaXRvcmllcyBhcmUgZm91bmQgdW5kZXIgdGhlIGhlYWRpbmcgIllvY3RvIExpbnV4IEtlcm5lbCIgYXQKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+JllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpPC91bGluaz4KKyAgICAgICAgICAgIGFuZCBjYW4gYmUgc2hpcHBlZCBhcyBwYXJ0IG9mIGEgWW9jdG8gUHJvamVjdCByZWxlYXNlLgorICAgICAgICAgICAgVGhlIHRlYW0gY3JlYXRlcyB0aGVzZSByZXBvc2l0b3JpZXMgYnkKKyAgICAgICAgICAgIGNvbXBpbGluZyBhbmQgZXhlY3V0aW5nIHRoZSBzZXQgb2YgZmVhdHVyZSBkZXNjcmlwdGlvbnMgZm9yIGV2ZXJ5IEJTUC9mZWF0dXJlCisgICAgICAgICAgICBpbiB0aGUgcHJvZHVjdC4KKyAgICAgICAgICAgIFRob3NlIGZlYXR1cmUgZGVzY3JpcHRpb25zIGxpc3QgYWxsIG5lY2Vzc2FyeSBwYXRjaGVzLAorICAgICAgICAgICAgY29uZmlndXJhdGlvbiwgYnJhbmNoaW5nLCB0YWdnaW5nIGFuZCBmZWF0dXJlIGRpdmlzaW9ucyBmb3VuZCBpbiBhIGtlcm5lbC4KKyAgICAgICAgICAgIFRodXMsIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCByZXBvc2l0b3J5IChvciB0cmVlKSBpcyBidWlsdC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBleGlzdGVuY2Ugb2YgdGhpcyB0cmVlIGFsbG93cyB5b3UgdG8gYWNjZXNzIGFuZCBjbG9uZSBhIHBhcnRpY3VsYXIKKyAgICAgICAgICAgIFlvY3RvIFByb2plY3Qga2VybmVsIHJlcG9zaXRvcnkgYW5kIHVzZSBpdCB0byBidWlsZCBpbWFnZXMgYmFzZWQgb24gdGhlaXIgY29uZmlndXJhdGlvbnMKKyAgICAgICAgICAgIGFuZCBmZWF0dXJlcy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGUgZmlsZXMgdXNlZCB0byBkZXNjcmliZSBhbGwgdGhlIHZhbGlkIGZlYXR1cmVzIGFuZCBCU1BzCisgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgaW4gYW55IGNsb25lIG9mIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBzb3VyY2UgcmVwb3NpdG9yeQorICAgICAgICAgICAgR2l0IHRyZWUuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21tYW5kIGNsb25lcyB0aGUgWW9jdG8gUHJvamVjdCBiYXNlbGluZSBrZXJuZWwgdGhhdAorICAgICAgICAgICAgYnJhbmNoZWQgb2ZmIG9mIDxmaWxlbmFtZT5saW51eC5vcmc8L2ZpbGVuYW1lPiB2ZXJzaW9uIDMuNDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy40CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBGb3IgYW5vdGhlciBleGFtcGxlIG9mIGhvdyB0byBzZXQgdXAgYSBsb2NhbCBHaXQgcmVwb3NpdG9yeSBvZiB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAga2VybmVsIGZpbGVzLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbG9jYWwta2VybmVsLWZpbGVzJz5Zb2N0byBQcm9qZWN0IEtlcm5lbDwvdWxpbms+IiBidWxsZXRlZAorICAgICAgICAgICAgaXRlbSBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIGNsb25lZCB0aGUga2VybmVsIEdpdCByZXBvc2l0b3J5IG9uIHlvdXIgbG9jYWwgbWFjaGluZSwgeW91IGNhbgorICAgICAgICAgICAgc3dpdGNoIHRvIHRoZSA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IGJyYW5jaCB3aXRoaW4gdGhlIHJlcG9zaXRvcnkuCisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBhc3N1bWVzIHRoZSBsb2NhbCBHaXQgcmVwb3NpdG9yeSBmb3IgdGhlIGtlcm5lbCBpcyBpbgorICAgICAgICAgICAgYSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG5hbWVkIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjQ8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L2xpbnV4LXlvY3RvLTMuNAorICAgICAkIGdpdCBjaGVja291dCAtYiBtZXRhIG9yaWdpbi9tZXRhCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIGNoZWNrZWQgb3V0IGFuZCBzd2l0Y2hlZCB0byB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2gsCisgICAgICAgICAgICB5b3UgY2FuIHNlZSBhIHNuYXBzaG90IG9mIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gYW5kIGZlYXR1cmUgZGVzY3JpcHRpb25zIHRoYXQgYXJlCisgICAgICAgICAgICB1c2VkIHRvIGJ1aWxkIHRoYXQgcGFydGljdWxhciBrZXJuZWwgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgIFRoZXNlIGRlc2NyaXB0aW9ucyBhcmUgaW4gdGhlIGZvcm0gb2YgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBzaG91bGQgcmVhbGl6ZSwgaG93ZXZlciwgdGhhdCBicm93c2luZyB5b3VyIGxvY2FsIGtlcm5lbCByZXBvc2l0b3J5CisgICAgICAgICAgICBmb3IgZmVhdHVyZSBkZXNjcmlwdGlvbnMgYW5kIHBhdGNoZXMgaXMgbm90IGFuIGVmZmVjdGl2ZSB3YXkgdG8gZGV0ZXJtaW5lIHdoYXQgaXMgaW4gYQorICAgICAgICAgICAgcGFydGljdWxhciBrZXJuZWwgYnJhbmNoLgorICAgICAgICAgICAgSW5zdGVhZCwgeW91IHNob3VsZCB1c2UgR2l0IGRpcmVjdGx5IHRvIGRpc2NvdmVyIHRoZSBjaGFuZ2VzIGluIGEgYnJhbmNoLgorICAgICAgICAgICAgVXNpbmcgR2l0IGlzIGFuIGVmZmljaWVudCBhbmQgZmxleGlibGUgd2F5IHRvIGluc3BlY3QgY2hhbmdlcyB0byB0aGUga2VybmVsLgorICAgICAgICAgICAgRm9yIGV4YW1wbGVzIHNob3dpbmcgaG93IHRvIHVzZSBHaXQgdG8gaW5zcGVjdCBrZXJuZWwgY29tbWl0cywgc2VlIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMKKyAgICAgICAgICAgIGluIHRoaXMgY2hhcHRlci4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEdyb3VuZCB1cCByZWNvbnN0cnVjdGlvbiBvZiB0aGUgY29tcGxldGUga2VybmVsIHRyZWUgaXMgYW4gYWN0aW9uIG9ubHkgdGFrZW4gYnkgdGhlCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCB0ZWFtIGR1cmluZyBhbiBhY3RpdmUgZGV2ZWxvcG1lbnQgY3ljbGUuCisgICAgICAgICAgICAgICAgV2hlbiB5b3UgY3JlYXRlIGEgY2xvbmUgb2YgdGhlIGtlcm5lbCBHaXQgcmVwb3NpdG9yeSwgeW91IGFyZSBzaW1wbHkgbWFraW5nIGl0CisgICAgICAgICAgICAgICAgZWZmaWNpZW50bHkgYXZhaWxhYmxlIGZvciBidWlsZGluZyBhbmQgZGV2ZWxvcG1lbnQuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN0ZXBzIGRlc2NyaWJlIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBZb2N0byBQcm9qZWN0IFRlYW0gY29uc3RydWN0cworICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHNvdXJjZSBHaXQgcmVwb3NpdG9yeSAob3IgdHJlZSkgZm91bmQgYXQKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+PC91bGluaz4gZ2l2ZW4gdGhlCisgICAgICAgICAgICBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgdG9wLWxldmVsIGtlcm5lbCBmZWF0dXJlIG9yIEJTUC4KKyAgICAgICAgICAgIFRoZXNlIGFyZSB0aGUgYWN0aW9ucyB0aGF0IGVmZmVjdGl2ZWx5IGNyZWF0ZSB0aGUgdHJlZQorICAgICAgICAgICAgdGhhdCBpbmNsdWRlcyB0aGUgbmV3IGZlYXR1cmUsIHBhdGNoIG9yIEJTUDoKKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSB0b3AtbGV2ZWwga2VybmVsIGZlYXR1cmUgaXMgcGFzc2VkIHRvIHRoZSBrZXJuZWwgYnVpbGQgc3Vic3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBOb3JtYWxseSwgdGhpcyBmZWF0dXJlIGlzIGEgQlNQIGZvciBhIHBhcnRpY3VsYXIga2VybmVsIHR5cGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBmaWxlIHRoYXQgZGVzY3JpYmVzIHRoZSB0b3AtbGV2ZWwgZmVhdHVyZSBpcyBsb2NhdGVkIGJ5IHNlYXJjaGluZworICAgICAgICAgICAgICAgICAgICB0aGVzZSBzeXN0ZW0gZGlyZWN0b3JpZXM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGluLXRyZWUga2VybmVsLWNhY2hlIGRpcmVjdG9yaWVzLCB3aGljaCBhcmUgbG9jYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIDxmaWxlbmFtZT5tZXRhL2NmZy9rZXJuZWwtY2FjaGU8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFyZWFzIHBvaW50ZWQgdG8gYnkgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzdGF0ZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgaW4gcmVjaXBlczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGEgdHlwaWNhbCBidWlsZCwgdGhlIHRhcmdldCBvZiB0aGUgc2VhcmNoIGlzIGEKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZSBkZXNjcmlwdGlvbiBpbiBhbiA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgd2hvc2UgbmFtZSBmb2xsb3dzIHRoaXMgZm9ybWF0OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICZsdDtic3BfbmFtZSZndDstJmx0O2tlcm5lbF90eXBlJmd0Oy5zY2MKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5PbmNlIGxvY2F0ZWQsIHRoZSBmZWF0dXJlIGRlc2NyaXB0aW9uIGlzIGVpdGhlciBjb21waWxlZCBpbnRvIGEgc2ltcGxlIHNjcmlwdAorICAgICAgICAgICAgICAgICAgICBvZiBhY3Rpb25zLCBvciBpbnRvIGFuIGV4aXN0aW5nIGVxdWl2YWxlbnQgc2NyaXB0IHRoYXQgaXMgYWxyZWFkeSBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBzaGlwcGVkIGtlcm5lbC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXh0cmEgZmVhdHVyZXMgYXJlIGFwcGVuZGVkIHRvIHRoZSB0b3AtbGV2ZWwgZmVhdHVyZSBkZXNjcmlwdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgZmVhdHVyZXMgY2FuIGNvbWUgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtFUk5FTF9GRUFUVVJFUyc+PGZpbGVuYW1lPktFUk5FTF9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gcmVjaXBlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RWFjaCBleHRyYSBmZWF0dXJlIGlzIGxvY2F0ZWQsIGNvbXBpbGVkIGFuZCBhcHBlbmRlZCB0byB0aGUgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgIGFzIGRlc2NyaWJlZCBpbiBzdGVwIHRocmVlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgc2NyaXB0IGlzIGV4ZWN1dGVkIHRvIHByb2R1Y2UgYSBzZXJpZXMgb2YgPGZpbGVuYW1lPm1ldGEtKjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBkaXJlY3RvcmllcyBhcmUgZGVzY3JpcHRpb25zIG9mIGFsbCB0aGUgYnJhbmNoZXMsIHRhZ3MsIHBhdGNoZXMgYW5kIGNvbmZpZ3VyYXRpb25zIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBiZSBhcHBsaWVkIHRvIHRoZSBiYXNlIEdpdCByZXBvc2l0b3J5IHRvIGNvbXBsZXRlbHkgY3JlYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKGJ1aWxkKSBicmFuY2ggZm9yIHRoZSBuZXcgQlNQIG9yIGZlYXR1cmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBiYXNlIHJlcG9zaXRvcnkgaXMgY2xvbmVkLCBhbmQgdGhlIGFjdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgbGlzdGVkIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS0qPC9maWxlbmFtZT4gZGlyZWN0b3JpZXMgYXJlIGFwcGxpZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIHRyZWUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBHaXQgcmVwb3NpdG9yeSBpcyBsZWZ0IHdpdGggdGhlIGRlc2lyZWQgYnJhbmNoIGNoZWNrZWQgb3V0IGFuZCBhbnkKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQgYnJhbmNoaW5nLCBwYXRjaGluZyBhbmQgdGFnZ2luZyBoYXMgYmVlbiBwZXJmb3JtZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGtlcm5lbCB0cmVlIGlzIG5vdyByZWFkeSBmb3IgZGV2ZWxvcGVyIGNvbnN1bXB0aW9uIHRvIGJlIGxvY2FsbHkgY2xvbmVkLAorICAgICAgICAgICAgY29uZmlndXJlZCwgYW5kIGJ1aWx0IGludG8gYSBZb2N0byBQcm9qZWN0IGtlcm5lbCBzcGVjaWZpYyB0byBzb21lIHRhcmdldCBoYXJkd2FyZS4KKyAgICAgICAgICAgIDxub3RlPjxwYXJhPlRoZSBnZW5lcmF0ZWQgPGZpbGVuYW1lPm1ldGEtKjwvZmlsZW5hbWU+IGRpcmVjdG9yaWVzIGFkZCB0byB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgYXMgc2hpcHBlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IHJlbGVhc2UuCisgICAgICAgICAgICAgICAgQW55IGFkZC1vbnMgYW5kIGNvbmZpZ3VyYXRpb24gZGF0YSBhcmUgYXBwbGllZCB0byB0aGUgZW5kIG9mIGFuIGV4aXN0aW5nIGJyYW5jaC4KKyAgICAgICAgICAgICAgICBUaGUgZnVsbCByZXBvc2l0b3J5IGdlbmVyYXRpb24gdGhhdCBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICBvZmZpY2lhbCBZb2N0byBQcm9qZWN0IGtlcm5lbCByZXBvc2l0b3JpZXMgYXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2knPmh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0LmNnaTwvdWxpbms+CisgICAgICAgICAgICAgICAgaXMgdGhlIGNvbWJpbmF0aW9uIG9mIGFsbCBzdXBwb3J0ZWQgYm9hcmRzIGFuZCBjb25maWd1cmF0aW9ucy48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIHRlY2huaXF1ZSB0aGUgWW9jdG8gUHJvamVjdCB0ZWFtIHVzZXMgaXMgZmxleGlibGUgYW5kIGFsbG93cyBmb3Igc2VhbWxlc3MKKyAgICAgICAgICAgICAgICBibGVuZGluZyBvZiBhbiBpbW11dGFibGUgaGlzdG9yeSB3aXRoIGFkZGl0aW9uYWwgcGF0Y2hlcyBzcGVjaWZpYyB0byBhCisgICAgICAgICAgICAgICAgZGVwbG95bWVudC4KKyAgICAgICAgICAgICAgICBBbnkgYWRkaXRpb25zIHRvIHRoZSBrZXJuZWwgYmVjb21lIGFuIGludGVncmF0ZWQgcGFydCBvZiB0aGUgYnJhbmNoZXMuPC9wYXJhPgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2J1aWxkLXN0cmF0ZWd5Jz4KKyAgICAgICAgPHRpdGxlPkJ1aWxkIFN0cmF0ZWd5PC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIGEgbG9jYWwgR2l0IHJlcG9zaXRvcnkgb2YgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIGV4aXN0cyBvbiBhIGRldmVsb3BtZW50IHN5c3RlbSwKKyAgICAgICAgICAgIHlvdSBjYW4gY29uc2lkZXIgdGhlIGNvbXBpbGF0aW9uIHBoYXNlIG9mIGtlcm5lbCBkZXZlbG9wbWVudCAtIGJ1aWxkaW5nIGEga2VybmVsIGltYWdlLgorICAgICAgICAgICAgU29tZSBwcmVyZXF1aXNpdGVzIGV4aXN0IHRoYXQgYXJlIHZhbGlkYXRlZCBieSB0aGUgYnVpbGQgcHJvY2VzcyBiZWZvcmUgY29tcGlsYXRpb24KKyAgICAgICAgICAgIHN0YXJ0czoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPiBwb2ludHMKKyAgICAgICAgICAgICAgICB0byB0aGUga2VybmVsIEdpdCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgQlNQIGJ1aWxkIGJyYW5jaCBleGlzdHMuCisgICAgICAgICAgICAgICAgVGhpcyBicmFuY2ggaGFzIHRoZSBmb2xsb3dpbmcgZm9ybToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICZsdDtrZXJuZWxfdHlwZSZndDsvJmx0O2JzcF9uYW1lJmd0OworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBtYWtlcyBzdXJlIHRoZXNlIGNvbmRpdGlvbnMgZXhpc3QgYmVmb3JlIGF0dGVtcHRpbmcgY29tcGlsYXRpb24uCisgICAgICAgICAgICBPdGhlciBtZWFucywgaG93ZXZlciwgZG8gZXhpc3QsIHN1Y2ggYXMgYXMgYm9vdHN0cmFwcGluZyBhIEJTUCwgc2VlCisgICAgICAgICAgICB0aGUgIjxsaW5rIGxpbmtlbmQ9J3dvcmtmbG93LWV4YW1wbGVzJz5Xb3JrZmxvdyBFeGFtcGxlczwvbGluaz4iLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCZWZvcmUgYnVpbGRpbmcgYSBrZXJuZWwsIHRoZSBidWlsZCBwcm9jZXNzIHZlcmlmaWVzIHRoZSB0cmVlCisgICAgICAgICAgICBhbmQgY29uZmlndXJlcyB0aGUga2VybmVsIGJ5IHByb2Nlc3NpbmcgYWxsIG9mIHRoZQorICAgICAgICAgICAgY29uZmlndXJhdGlvbiAiZnJhZ21lbnRzIiBzcGVjaWZpZWQgYnkgZmVhdHVyZSBkZXNjcmlwdGlvbnMgaW4gdGhlIDxmaWxlbmFtZT4uc2NjPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZpbGVzLgorICAgICAgICAgICAgQXMgdGhlIGZlYXR1cmVzIGFyZSBjb21waWxlZCwgYXNzb2NpYXRlZCBrZXJuZWwgY29uZmlndXJhdGlvbiBmcmFnbWVudHMgYXJlIG5vdGVkCisgICAgICAgICAgICBhbmQgcmVjb3JkZWQgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLSo8L2ZpbGVuYW1lPiBzZXJpZXMgb2YgZGlyZWN0b3JpZXMgaW4gdGhlaXIgY29tcGlsYXRpb24gb3JkZXIuCisgICAgICAgICAgICBUaGUgZnJhZ21lbnRzIGFyZSBtaWdyYXRlZCwgcHJlLXByb2Nlc3NlZCBhbmQgcGFzc2VkIHRvIHRoZSBMaW51eCBLZXJuZWwKKyAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gc3Vic3lzdGVtICg8ZmlsZW5hbWU+bGtjPC9maWxlbmFtZT4pIGFzIHJhdyBpbnB1dCBpbiB0aGUgZm9ybQorICAgICAgICAgICAgb2YgYSA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmxrYzwvZmlsZW5hbWU+IHVzZXMgaXRzIG93biBpbnRlcm5hbCBkZXBlbmRlbmN5IGNvbnN0cmFpbnRzIHRvIGRvIHRoZSBmaW5hbAorICAgICAgICAgICAgcHJvY2Vzc2luZyBvZiB0aGF0IGluZm9ybWF0aW9uIGFuZCBnZW5lcmF0ZXMgdGhlIGZpbmFsIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgdGhhdCBpcyB1c2VkIGR1cmluZyBjb21waWxhdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVXNpbmcgdGhlIGJvYXJkJ3MgYXJjaGl0ZWN0dXJlIGFuZCBvdGhlciByZWxldmFudCB2YWx1ZXMgZnJvbSB0aGUgYm9hcmQncyB0ZW1wbGF0ZSwKKyAgICAgICAgICAgIGtlcm5lbCBjb21waWxhdGlvbiBpcyBzdGFydGVkIGFuZCBhIGtlcm5lbCBpbWFnZSBpcyBwcm9kdWNlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIG90aGVyIHRoaW5nIHRoYXQgeW91IG5vdGljZSBvbmNlIHlvdSBjb25maWd1cmUgYSBrZXJuZWwgaXMgdGhhdAorICAgICAgICAgICAgdGhlIGJ1aWxkIHByb2Nlc3MgZ2VuZXJhdGVzIGEgYnVpbGQgdHJlZSB0aGF0IGlzIHNlcGFyYXRlIGZyb20geW91ciBrZXJuZWwncyBsb2NhbCBHaXQKKyAgICAgICAgICAgIHNvdXJjZSByZXBvc2l0b3J5IHRyZWUuCisgICAgICAgICAgICBUaGlzIGJ1aWxkIHRyZWUgaGFzIGEgbmFtZSB0aGF0IHVzZXMgdGhlIGZvbGxvd2luZyBmb3JtLCB3aGVyZQorICAgICAgICAgICAgPGZpbGVuYW1lPiR7TUFDSElORX08L2ZpbGVuYW1lPiBpcyB0aGUgbWV0YWRhdGEgbmFtZSBvZiB0aGUgbWFjaGluZSAoQlNQKSBhbmQgImtlcm5lbF90eXBlIiBpcyBvbmUKKyAgICAgICAgICAgIG9mIHRoZSBZb2N0byBQcm9qZWN0IHN1cHBvcnRlZCBrZXJuZWwgdHlwZXMgKGUuZy4gInN0YW5kYXJkIik6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbGludXgtJHtNQUNISU5FfS0mbHQ7a2VybmVsX3R5cGUmZ3Q7LWJ1aWxkCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGV4aXN0aW5nIHN1cHBvcnQgaW4gdGhlIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gdHJlZSBhY2hpZXZlcyB0aGlzCisgICAgICAgICAgICBkZWZhdWx0IGZ1bmN0aW9uYWxpdHkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgYmVoYXZpb3IgbWVhbnMgdGhhdCBhbGwgdGhlIGdlbmVyYXRlZCBmaWxlcyBmb3IgYSBwYXJ0aWN1bGFyIG1hY2hpbmUgb3IgQlNQIGFyZSBub3cgaW4KKyAgICAgICAgICAgIHRoZSBidWlsZCB0cmVlIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIFRoZSBmaWxlcyBpbmNsdWRlIHRoZSBmaW5hbCA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUsIGFsbCB0aGUgPGZpbGVuYW1lPi5vPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZpbGVzLCB0aGUgPGZpbGVuYW1lPi5hPC9maWxlbmFtZT4gZmlsZXMsIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgIFNpbmNlIGVhY2ggbWFjaGluZSBvciBCU1AgaGFzIGl0cyBvd24gc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5IGluIGl0cyBvd24gc2VwYXJhdGUgYnJhbmNoCisgICAgICAgICAgICBvZiB0aGUgR2l0IHJlcG9zaXRvcnksIHlvdSBjYW4gZWFzaWx5IHN3aXRjaCBiZXR3ZWVuIGRpZmZlcmVudCBidWlsZHMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nd29ya2Zsb3ctZXhhbXBsZXMnPgorICAgICAgICA8dGl0bGU+V29ya2Zsb3cgRXhhbXBsZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgcHJldmlvdXNseSBub3RlZCwgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIGhhcyBidWlsdC1pbiBHaXQgaW50ZWdyYXRpb24uCisgICAgICAgICAgICBIb3dldmVyLCB0aGVzZSB1dGlsaXRpZXMgYXJlIG5vdCB0aGUgb25seSB3YXkgdG8gd29yayB3aXRoIHRoZSBrZXJuZWwgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGhhcyBub3QgbWFkZSBjaGFuZ2VzIHRvIEdpdCBvciB0byBvdGhlciB0b29scyB0aGF0CisgICAgICAgICAgICB3b3VsZCBpbnZhbGlkYXRlIGFsdGVybmF0ZSB3b3JrZmxvd3MuCisgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHRoZSB3YXkgdGhlIGtlcm5lbCByZXBvc2l0b3J5IGlzIGNvbnN0cnVjdGVkIHJlc3VsdHMgaW4gdXNpbmcKKyAgICAgICAgICAgIG9ubHkgY29yZSBHaXQgZnVuY3Rpb25hbGl0eSwgdGh1cyBhbGxvd2luZyBhbnkgbnVtYmVyIG9mIHRvb2xzIG9yIGZyb250IGVuZHMgdG8gdXNlIHRoZQorICAgICAgICAgICAgcmVzdWx0aW5nIHRyZWUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBjb250YWlucyBzZXZlcmFsIHdvcmtmbG93IGV4YW1wbGVzLgorICAgICAgICAgICAgTWFueSBvZiB0aGUgZXhhbXBsZXMgdXNlIEdpdCBjb21tYW5kcy4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBHaXQgZG9jdW1lbnRhdGlvbiBhdAorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC1zY20uY29tL2RvY3VtZW50YXRpb24nPjwvdWxpbms+LgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGEgc2ltcGxlIG92ZXJ2aWV3IG9mIHVzaW5nIEdpdCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IGluIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2dpdCc+R2l0PC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjaGFuZ2UtaW5zcGVjdGlvbi1rZXJuZWwtY2hhbmdlcy1jb21taXRzJz4KKyAgICAgICAgICAgIDx0aXRsZT5DaGFuZ2UgSW5zcGVjdGlvbjogQ2hhbmdlcy9Db21taXRzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBjb21tb24gcXVlc3Rpb24gd2hlbiB3b3JraW5nIHdpdGggYSBrZXJuZWwgaXM6CisgICAgICAgICAgICAgICAgIldoYXQgY2hhbmdlcyBoYXZlIGJlZW4gYXBwbGllZCB0byB0aGlzIHRyZWU/IgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiBwcm9qZWN0cyB0aGF0IGhhdmUgYSBjb2xsZWN0aW9uIG9mIGRpcmVjdG9yaWVzIHRoYXQKKyAgICAgICAgICAgICAgICBjb250YWluIHBhdGNoZXMgdG8gdGhlIGtlcm5lbCwgaXQgaXMgcG9zc2libGUgdG8gaW5zcGVjdCBvciAiZ3JlcCIgdGhlIGNvbnRlbnRzCisgICAgICAgICAgICAgICAgb2YgdGhlIGRpcmVjdG9yaWVzIHRvIGdldCBhIGdlbmVyYWwgZmVlbCBmb3IgdGhlIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgVGhpcyBzb3J0IG9mIHBhdGNoIGluc3BlY3Rpb24gaXMgbm90IGFuIGVmZmljaWVudCB3YXkgdG8gZGV0ZXJtaW5lIHdoYXQgaGFzIGJlZW4KKyAgICAgICAgICAgICAgICBkb25lIHRvIHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgVGhlIHJlYXNvbiBpdCBpcyBpbmVmZmljaWVudCBpcyBiZWNhdXNlIHRoZXJlIGFyZSBtYW55IG9wdGlvbmFsIHBhdGNoZXMgdGhhdCBhcmUKKyAgICAgICAgICAgICAgICBzZWxlY3RlZCBiYXNlZCBvbiB0aGUga2VybmVsIHR5cGUgYW5kIHRoZSBmZWF0dXJlIGRlc2NyaXB0aW9uLgorICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgcGF0Y2hlcyBjb3VsZCBleGlzdCBpbiBkaXJlY3RvcmllcyB0aGF0IGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHNlYXJjaC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBtb3JlIGVmZmljaWVudCB3YXkgdG8gZGV0ZXJtaW5lIHdoYXQgaGFzIGNoYW5nZWQgaW4gdGhlIGJyYW5jaCBpcyB0byB1c2UKKyAgICAgICAgICAgICAgICBHaXQgYW5kIGluc3BlY3Qgb3Igc2VhcmNoIHRoZSBrZXJuZWwgdHJlZS4KKyAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBnaXZlcyB5b3UgYSBmdWxsIHZpZXcgb2Ygbm90IG9ubHkgdGhlIHNvdXJjZSBjb2RlIG1vZGlmaWNhdGlvbnMsCisgICAgICAgICAgICAgICAgYnV0IGFsc28gcHJvdmlkZXMgdGhlIHJlYXNvbnMgZm9yIHRoZSBjaGFuZ2VzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nd2hhdC1jaGFuZ2VkLWluLWEta2VybmVsJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+V2hhdCBDaGFuZ2VkIGluIGEgS2VybmVsPzwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSBhIGZldyBleGFtcGxlcyB0aGF0IHNob3cgaG93IHRvIHVzZSBHaXQgY29tbWFuZHMgdG8gZXhhbWluZSBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIEdpdCByZXBvc2l0b3JpZXMgaW4gdGhlIFlvY3RvIFByb2plY3QgZG8gbm90IGJyZWFrIGV4aXN0aW5nIEdpdAorICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5LCBhbmQgYmVjYXVzZSB0aGVyZSBleGlzdHMgbWFueSBwZXJtdXRhdGlvbnMgb2YgdGhlc2UgdHlwZXMgb2YKKyAgICAgICAgICAgICAgICAgICAgR2l0IGNvbW1hbmRzLCBtYW55IG1ldGhvZHMgZXhpc3QgYnkgd2hpY2ggeW91IGNhbiBkaXNjb3ZlciBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXMsIHVubGVzcyB5b3UgcHJvdmlkZSBhIGNvbW1pdCByYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gaGlzdG9yeSBpcyBibGVuZGVkIHdpdGggWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZvcm0gcmFuZ2VzIGJ5IHVzaW5nIGJyYW5jaCBuYW1lcyBmcm9tIHRoZSBrZXJuZWwgdHJlZSBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyIGFuZCBsb3dlciBjb21taXQgbWFya2VycyB3aXRoIHRoZSBHaXQgY29tbWFuZHMuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNlZSB0aGUgYnJhbmNoIG5hbWVzIHRocm91Z2ggdGhlIHdlYiBpbnRlcmZhY2UgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHNvdXJjZSByZXBvc2l0b3JpZXMgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0LmNnaSc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGJyYW5jaCBuYW1lcyBmb3IgdGhlIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsIHJlcG9zaXRvcnkgY2FuIGJlIHNlZW4gYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0LmNnaS9saW51eC15b2N0by0zLjQvcmVmcy9oZWFkcyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVG8gc2VlIGEgZnVsbCByYW5nZSBvZiB0aGUgY2hhbmdlcywgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IHdoYXRjaGFuZ2VkPC9maWxlbmFtZT4gY29tbWFuZCBhbmQgc3BlY2lmeSBhIGNvbW1pdCByYW5nZQorICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGJyYW5jaCAoPGZpbGVuYW1lPiZsdDtjb21taXQmZ3Q7Li4mbHQ7Y29tbWl0Jmd0OzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgbG9va3MgYXQgd2hhdCBoYXMgY2hhbmdlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmVtZW5sb3c8L2ZpbGVuYW1lPiBicmFuY2ggb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjQ8L2ZpbGVuYW1lPiBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgIFRoZSBsb3dlciBjb21taXQgcmFuZ2UgaXMgdGhlIGNvbW1pdCBhc3NvY2lhdGVkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zdGFuZGFyZC9iYXNlPC9maWxlbmFtZT4gYnJhbmNoLCB3aGlsZQorICAgICAgICAgICAgICAgICAgICB0aGUgdXBwZXIgY29tbWl0IHJhbmdlIGlzIHRoZSBjb21taXQgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3RhbmRhcmQvZW1lbmxvdzwvZmlsZW5hbWU+IGJyYW5jaC4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCB3aGF0Y2hhbmdlZCBvcmlnaW4vc3RhbmRhcmQvYmFzZS4ub3JpZ2luL3N0YW5kYXJkL2VtZW5sb3cKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBzZWUgYSBzdW1tYXJ5IG9mIGNoYW5nZXMgdXNlIHRoZSA8ZmlsZW5hbWU+Z2l0IGxvZzwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB1c2luZyB0aGUgc2FtZSBicmFuY2hlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBsb2cgLS1vbmVsaW5lIG9yaWdpbi9zdGFuZGFyZC9iYXNlLi5vcmlnaW4vc3RhbmRhcmQvZW1lbmxvdworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z2l0IGxvZzwvZmlsZW5hbWU+IG91dHB1dCBtaWdodCBiZSBtb3JlIHVzZWZ1bCB0aGFuCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Z2l0IHdoYXRjaGFuZ2VkPC9maWxlbmFtZT4gYXMgeW91IGdldAorICAgICAgICAgICAgICAgICAgICBhIHNob3J0LCBvbmUtbGluZSBzdW1tYXJ5IG9mIGVhY2ggY2hhbmdlIGFuZCBub3QgdGhlIGVudGlyZSBjb21taXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHNlZSBjb2RlIGRpZmZlcmVuY2VzIGFzc29jaWF0ZWQgd2l0aCBhbGwgdGhlIGNoYW5nZXMsIHVzZQorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmdpdCBkaWZmPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGRpZmYgb3JpZ2luL3N0YW5kYXJkL2Jhc2UuLm9yaWdpbi9zdGFuZGFyZC9lbWVubG93CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZXMgYW5kIHRoZSB0ZXh0IGRpZmZlcmVuY2VzIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IHNob3c8L2ZpbGVuYW1lPiBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgc2hvdyBvcmlnaW4vc3RhbmRhcmQvYmFzZS4ub3JpZ2luL3N0YW5kYXJkL2VtZW5sb3cKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGNyZWF0ZSBpbmRpdmlkdWFsIHBhdGNoZXMgZm9yIGVhY2ggY2hhbmdlIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IGZvcm1hdC1wYXRjaDwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHRoYXQgY3JlYXRlcyBwYXRjaCBmaWxlcyBmb3IgZWFjaCBjb21taXQgYW5kCisgICAgICAgICAgICAgICAgICAgIHBsYWNlcyB0aGVtIGluIHlvdXIgPGZpbGVuYW1lPkRvY3VtZW50czwvZmlsZW5hbWU+IGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggLW8gJEhPTUUvRG9jdW1lbnRzIG9yaWdpbi9zdGFuZGFyZC9iYXNlLi5vcmlnaW4vc3RhbmRhcmQvZW1lbmxvdworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nc2hvdy1hLXBhcnRpY3VsYXItZmVhdHVyZS1vci1icmFuY2gtY2hhbmdlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+U2hvdyBhIFBhcnRpY3VsYXIgRmVhdHVyZSBvciBCcmFuY2ggQ2hhbmdlPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZXZlbG9wZXJzIHVzZSB0YWdzIGluIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCB0cmVlIHRvIGRpdmlkZSBjaGFuZ2VzIGZvciBzaWduaWZpY2FudAorICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyBvciBicmFuY2hlcy4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB5b3Uga25vdyBhIHBhcnRpY3VsYXIgdGFnLCB5b3UgY2FuIHVzZSBHaXQgY29tbWFuZHMKKyAgICAgICAgICAgICAgICAgICAgdG8gc2hvdyBjaGFuZ2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFnIGFuZCBmaW5kIHRoZSBicmFuY2hlcyB0aGF0IGNvbnRhaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIGZlYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSBCU1AgYnJhbmNoLCA8ZmlsZW5hbWU+a2VybmVsLm9yZzwvZmlsZW5hbWU+LCBhbmQgZmVhdHVyZSB0YWdzIGFyZSBhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnQsIHRoZXJlIGNvdWxkIGJlIG1hbnkgdGFncy4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmdpdCBzaG93ICZsdDt0YWcmZ3Q7PC9maWxlbmFtZT4gY29tbWFuZCBzaG93cyBjaGFuZ2VzIHRoYXQgYXJlIHRhZ2dlZCBieQorICAgICAgICAgICAgICAgICAgICBhIGZlYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHNob3dzIGNoYW5nZXMgdGFnZ2VkIGJ5IHRoZSA8ZmlsZW5hbWU+c3lzdGVtdGFwPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBzaG93IHN5c3RlbXRhcAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+Z2l0IGJyYW5jaCAtLWNvbnRhaW5zICZsdDt0YWcmZ3Q7PC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgICAgICB0byBzaG93IHRoZSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gYSBwYXJ0aWN1bGFyIGZlYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBzaG93cyB0aGUgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSA8ZmlsZW5hbWU+c3lzdGVtdGFwPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBicmFuY2ggLS1jb250YWlucyBzeXN0ZW10YXAKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSBtYW55IG90aGVyIGNvbXBhcmlzb25zIHRvIGlzb2xhdGUgQlNQIGFuZCBrZXJuZWwgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gY29tcGFyZSBhZ2FpbnN0IDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gdGFncworICAgICAgICAgICAgICAgICAgICBzdWNoIGFzIHRoZSA8ZmlsZW5hbWU+djMuNDwvZmlsZW5hbWU+IHRhZy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZGV2ZWxvcG1lbnQtc2F2aW5nLWtlcm5lbC1tb2RpZmljYXRpb25zJz4KKyAgICAgICAgICAgIDx0aXRsZT5EZXZlbG9wbWVudDogU2F2aW5nIEtlcm5lbCBNb2RpZmljYXRpb25zPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW5vdGhlciBjb21tb24gb3BlcmF0aW9uIGlzIHRvIGJ1aWxkIGEgQlNQIHN1cHBsaWVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0LCBtYWtlIHNvbWUKKyAgICAgICAgICAgICAgICBjaGFuZ2VzLCByZWJ1aWxkLCBhbmQgdGhlbiB0ZXN0LgorICAgICAgICAgICAgICAgIFRob3NlIGxvY2FsIGNoYW5nZXMgb2Z0ZW4gbmVlZCB0byBiZSBleHBvcnRlZCwgc2hhcmVkIG9yIG90aGVyd2lzZSBtYWludGFpbmVkLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTaW5jZSB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgc291cmNlIHRyZWUgaXMgYmFja2VkIGJ5IEdpdCwgdGhpcyBhY3Rpdml0eSBpcworICAgICAgICAgICAgICAgIG11Y2ggZWFzaWVyIGFzIGNvbXBhcmVkIHRvIHdpdGggcHJldmlvdXMgcmVsZWFzZXMuCisgICAgICAgICAgICAgICAgQmVjYXVzZSBHaXQgdHJhY2tzIGZpbGUgbW9kaWZpY2F0aW9ucywgYWRkaXRpb25zIGFuZCBkZWxldGlvbnMsIGl0IGlzIGVhc3kKKyAgICAgICAgICAgICAgICB0byBtb2RpZnkgdGhlIGNvZGUgYW5kIGxhdGVyIHJlYWxpemUgdGhhdCB5b3UgbmVlZCB0byBzYXZlIHRoZSBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIEl0IGlzIGFsc28gZWFzeSB0byBkZXRlcm1pbmUgd2hhdCBoYXMgY2hhbmdlZC4KKyAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBhbHNvIHByb3ZpZGVzIG1hbnkgdG9vbHMgdG8gY29tbWl0LCB1bmRvIGFuZCBleHBvcnQgdGhvc2UgbW9kaWZpY2F0aW9ucy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGFuZCBpdHMgc3ViLXNlY3Rpb25zLCBkZXNjcmliZSBnZW5lcmFsIGFwcGxpY2F0aW9uIG9mIEdpdCdzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnB1c2g8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPnB1bGw8L2ZpbGVuYW1lPiBjb21tYW5kcywgd2hpY2ggYXJlIHVzZWQgdG8KKyAgICAgICAgICAgICAgICBnZXQgeW91ciBjaGFuZ2VzIHVwc3RyZWFtIG9yIHNvdXJjZSB5b3VyIGNvZGUgZnJvbSBhbiB1cHN0cmVhbSByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIHNjcmlwdHMgdGhhdCBoZWxwIHlvdSB3b3JrIGluIGEgY29sbGFib3JhdGl2ZSBkZXZlbG9wbWVudAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGVzZSBzY3JpcHRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3B1c2hpbmctYS1jaGFuZ2UtdXBzdHJlYW0nPlVzaW5nIFNjcmlwdHMgdG8gUHVzaCBhIENoYW5nZQorICAgICAgICAgICAgICAgIFVwc3RyZWFtIGFuZCBSZXF1ZXN0IGEgUHVsbDwvdWxpbms+IiBhbmQKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc3VibWl0dGluZy1hLXBhdGNoJz5Vc2luZyBFbWFpbCB0byBTdWJtaXQgYSBQYXRjaDwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb25zIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlcmUgYXJlIG1hbnkgd2F5cyB0byBzYXZlIGtlcm5lbCBtb2RpZmljYXRpb25zLgorICAgICAgICAgICAgICAgIFRoZSB0ZWNobmlxdWUgZW1wbG95ZWQKKyAgICAgICAgICAgICAgICBkZXBlbmRzIG9uIHRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIHBhdGNoZXM6CisKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QnVsayBzdG9yYWdlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbnRlcm5hbCBzaGFyaW5nIGVpdGhlciB0aHJvdWdoIHBhdGNoZXMgb3IgYnkgdXNpbmcgR2l0PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHRlcm5hbCBzdWJtaXNzaW9uczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXhwb3J0aW5nIGZvciBpbnRlZ3JhdGlvbiBpbnRvIGFub3RoZXIgU291cmNlIENvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hbmFnZXIgKFNDTSk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQmVjYXVzZSBvZiB0aGUgZm9sbG93aW5nIGxpc3Qgb2YgaXNzdWVzLCB0aGUgZGVzdGluYXRpb24gb2YgdGhlIHBhdGNoZXMgYWxzbyBpbmZsdWVuY2VzCisgICAgICAgICAgICAgICAgdGhlIG1ldGhvZCBmb3IgZ2F0aGVyaW5nIHRoZW06CisKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QmlzZWN0YWJpbGl0eTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q29tbWl0IGhlYWRlcnM8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRpdmlzaW9uIG9mIHN1YnN5c3RlbXMgZm9yIHNlcGFyYXRlIHN1Ym1pc3Npb24gb3IgcmV2aWV3PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdidWxrLWV4cG9ydCc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkJ1bGsgRXhwb3J0PC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB5b3UgY2FuICJidWxrIiBleHBvcnQgY2hhbmdlcyB0aGF0IGhhdmUgbm90CisgICAgICAgICAgICAgICAgICAgIGJlZW4gc2VwYXJhdGVkIG9yIGRpdmlkZWQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2l0dWF0aW9uIHdvcmtzIHdlbGwgd2hlbiB5b3UgYXJlIHNpbXBseSBzdG9yaW5nIHBhdGNoZXMgb3V0c2lkZSBvZiB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSByZXBvc2l0b3J5LCBlaXRoZXIgcGVybWFuZW50bHkgb3IgdGVtcG9yYXJpbHksIGFuZCB5b3UgYXJlIG5vdCBjb21taXR0aW5nCisgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudGFsIGNoYW5nZXMgZHVyaW5nIGRldmVsb3BtZW50LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdGVjaG5pcXVlIGlzIG5vdCBhcHByb3ByaWF0ZSBmb3IgZnVsbCBpbnRlZ3JhdGlvbiBvZiB1cHN0cmVhbSBzdWJtaXNzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICBiZWNhdXNlIGNoYW5nZXMgYXJlIG5vdCBwcm9wZXJseSBkaXZpZGVkIGFuZCBkbyBub3QgcHJvdmlkZSBhbiBhdmVudWUgZm9yIHBlci1jaGFuZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdCBtZXNzYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZXJlZm9yZSwgdGhpcyBleGFtcGxlIGFzc3VtZXMgdGhhdCBjaGFuZ2VzIGhhdmUgbm90IGJlZW4gY29tbWl0dGVkIGluY3JlbWVudGFsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyBkZXZlbG9wbWVudCBhbmQgdGhhdCB5b3Ugc2ltcGx5IG11c3QgZ2F0aGVyIGFuZCBleHBvcnQgdGhlbS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgYnVsayBleHBvcnQgb2YgQUxMIG1vZGlmaWNhdGlvbnMgd2l0aG91dCBzZXBhcmF0aW9uIG9yIGRpdmlzaW9uCisgICAgICMgb2YgdGhlIGNoYW5nZXMKKworICAgICAkIGdpdCBhZGQgLgorICAgICAkIGdpdCBjb21taXQgLXMgLWEgLW0gJmx0O21zZyZndDsKKyAgICAgICAgb3IKKyAgICAgJCBnaXQgY29tbWl0IC1zIC1hICMgYW5kIGludGVyYWN0IHdpdGggJEVESVRPUgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBvcGVyYXRpb25zIGNhcHR1cmUgYWxsIHRoZSBsb2NhbCBjaGFuZ2VzIGluIHRoZSBwcm9qZWN0IHNvdXJjZQorICAgICAgICAgICAgICAgICAgICB0cmVlIGluIGEgc2luZ2xlIEdpdCBjb21taXQuCisgICAgICAgICAgICAgICAgICAgIEFuZCwgdGhhdCBjb21taXQgaXMgYWxzbyBzdG9yZWQgaW4gdGhlIHByb2plY3QncyBzb3VyY2UgdHJlZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgY2hhbmdlcyBhcmUgZXhwb3J0ZWQsIHlvdSBjYW4gcmVzdG9yZSB0aGVtIG1hbnVhbGx5IHVzaW5nIGEgdGVtcGxhdGUKKyAgICAgICAgICAgICAgICAgICAgb3IgdGhyb3VnaCBpbnRlZ3JhdGlvbiB3aXRoIHRoZSA8ZmlsZW5hbWU+ZGVmYXVsdF9rZXJuZWw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2luY3JlbWVudGFsLXBsYW5uZWQtc2hhcmluZyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkluY3JlbWVudGFsL1BsYW5uZWQgU2hhcmluZzwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgdG8gc2F2ZSBtb2RpZmljYXRpb25zIHdoZW4geW91IGFyZSBtYWtpbmcgaW5jcmVtZW50YWwKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0cyBvciBwcmFjdGljaW5nIHBsYW5uZWQgc2hhcmluZy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGVzIGluIHRoaXMgc2VjdGlvbiBhc3N1bWUgdGhhdCB5b3UgaGF2ZSBpbmNyZW1lbnRhbGx5IGNvbW1pdHRlZAorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzIHRvIHRoZSB0cmVlIGR1cmluZyBkZXZlbG9wbWVudCBhbmQgbm93IG5lZWQgdG8gZXhwb3J0IHRoZW0uCisgICAgICAgICAgICAgICAgICAgIFRoZSBzZWN0aW9ucyB0aGF0IGZvbGxvdworICAgICAgICAgICAgICAgICAgICBkZXNjcmliZSBob3cgeW91IGNhbiBleHBvcnQgeW91ciBjaGFuZ2VzIGludGVybmFsbHkgdGhyb3VnaCBlaXRoZXIgcGF0Y2hlcyBvciBieQorICAgICAgICAgICAgICAgICAgICB1c2luZyBHaXQgY29tbWFuZHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIER1cmluZyBkZXZlbG9wbWVudCwgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBhcmUgb2YgaW50ZXJlc3QuCisgICAgICAgICAgICAgICAgICAgIEZvciBmdWxsIEdpdCBkb2N1bWVudGF0aW9uLCByZWZlciB0byB0aGUgR2l0IGRvY3VtZW50YXRpb24gYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdGh1Yi5jb20nPjwvdWxpbms+LgorCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBlZGl0IGEgZmlsZQorICAgICAkIHZpICZsdDtwYXRoJmd0Oy9maWxlCisgICAgICMgc3RhZ2UgdGhlIGNoYW5nZQorICAgICAkIGdpdCBhZGQgJmx0O3BhdGgmZ3Q7L2ZpbGUKKyAgICAgIyBjb21taXQgdGhlIGNoYW5nZQorICAgICAkIGdpdCBjb21taXQgLXMKKyAgICAgIyByZW1vdmUgYSBmaWxlCisgICAgICQgZ2l0IHJtICZsdDtwYXRoJmd0Oy9maWxlCisgICAgICMgY29tbWl0IHRoZSBjaGFuZ2UKKyAgICAgJCBnaXQgY29tbWl0IC1zCisKKyAgICAgLi4uIGV0Yy4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEaXN0cmlidXRlZCBkZXZlbG9wbWVudCB3aXRoIEdpdCBpcyBwb3NzaWJsZSB3aGVuIHlvdSB1c2UgYSB1bml2ZXJzYWxseQorICAgICAgICAgICAgICAgICAgICBhZ3JlZWQtdXBvbiB1bmlxdWUgY29tbWl0IGlkZW50aWZpZXIgKHNldCBieSB0aGUgY3JlYXRvciBvZiB0aGUgY29tbWl0KSB0aGF0IG1hcHMgdG8gYQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyBjaGFuZ2Ugc2V0IHdpdGggYSBzcGVjaWZpYyBwYXJlbnQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgaWRlbnRpZmllciBpcyBjcmVhdGVkIGZvciB5b3Ugd2hlbgorICAgICAgICAgICAgICAgICAgICB5b3UgY3JlYXRlIGEgY29tbWl0LCBhbmQgaXMgcmUtY3JlYXRlZCB3aGVuIHlvdSBhbWVuZCwgYWx0ZXIgb3IgcmUtYXBwbHkKKyAgICAgICAgICAgICAgICAgICAgYSBjb21taXQuCisgICAgICAgICAgICAgICAgICAgIEFzIGFuIGluZGl2aWR1YWwgaW4gaXNvbGF0aW9uLCB0aGlzIGlzIG9mIG5vIGludGVyZXN0LgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UKKyAgICAgICAgICAgICAgICAgICAgaW50ZW5kIHRvIHNoYXJlIHlvdXIgdHJlZSB3aXRoIG5vcm1hbCBHaXQgPGZpbGVuYW1lPnB1c2g8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnB1bGw8L2ZpbGVuYW1lPiBvcGVyYXRpb25zIGZvcgorICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRlZCBkZXZlbG9wbWVudCwgeW91IHNob3VsZCBjb25zaWRlciB0aGUgcmFtaWZpY2F0aW9ucyBvZiBjaGFuZ2luZyBhCisgICAgICAgICAgICAgICAgICAgIGNvbW1pdCB0aGF0IHlvdSBoYXZlIGFscmVhZHkgc2hhcmVkIHdpdGggb3RoZXJzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBc3N1bWluZyB0aGF0IHRoZSBjaGFuZ2VzIGhhdmUgbm90IGJlZW4gcHVzaGVkIHVwc3RyZWFtLCBvciBwdWxsZWQgaW50bworICAgICAgICAgICAgICAgICAgICBhbm90aGVyIHJlcG9zaXRvcnksIHlvdSBjYW4gdXBkYXRlIGJvdGggdGhlIGNvbW1pdCBjb250ZW50IGFuZCBjb21taXQgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICAgICAgYXNzb2NpYXRlZCB3aXRoIGRldmVsb3BtZW50IGJ5IHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIEdpdCBhZGQgJmx0O3BhdGgmZ3Q7L2ZpbGUKKyAgICAgJCBHaXQgY29tbWl0IC0tYW1lbmQKKyAgICAgJCBHaXQgcmViYXNlIG9yIEdpdCByZWJhc2UgLWkKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBZ2FpbiwgYXNzdW1pbmcgdGhhdCB0aGUgY2hhbmdlcyBoYXZlIG5vdCBiZWVuIHB1c2hlZCB1cHN0cmVhbSwgYW5kIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgbm8gcGVuZGluZyB3b3Jrcy1pbi1wcm9ncmVzcyBleGlzdCAodXNlIDxmaWxlbmFtZT5naXQgc3RhdHVzPC9maWxlbmFtZT4gdG8gY2hlY2spLCB0aGVuCisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gcmV2ZXJ0ICh1bmRvKSBjb21taXRzIGJ5IHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIHJlbW92ZSB0aGUgY29tbWl0LCB1cGRhdGUgd29ya2luZyB0cmVlIGFuZCByZW1vdmUgYWxsCisgICAgICMgdHJhY2VzIG9mIHRoZSBjaGFuZ2UKKyAgICAgJCBnaXQgcmVzZXQgLS1oYXJkIEhFQUReCisgICAgICMgcmVtb3ZlIHRoZSBjb21taXQsIGJ1dCBsZWF2ZSB0aGUgZmlsZXMgY2hhbmdlZCBhbmQgc3RhZ2VkIGZvciByZS1jb21taXQKKyAgICAgJCBnaXQgcmVzZXQgLS1zb2Z0IEhFQUReCisgICAgICMgcmVtb3ZlIHRoZSBjb21taXQsIGxlYXZlIGZpbGUgY2hhbmdlLCBidXQgbm90IHN0YWdlZCBmb3IgY29tbWl0CisgICAgICQgZ2l0IHJlc2V0IC0tbWl4ZWQgSEVBRF4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGNyZWF0ZSBicmFuY2hlcywgImNoZXJyeS1waWNrIiBjaGFuZ2VzLCBvciBwZXJmb3JtIGFueSBudW1iZXIgb2YgR2l0CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMgdW50aWwgdGhlIGNvbW1pdHMgYXJlIGluIGdvb2Qgb3JkZXIgZm9yIHB1c2hpbmcgdXBzdHJlYW0KKyAgICAgICAgICAgICAgICAgICAgb3IgZm9yIHB1bGwgcmVxdWVzdHMuCisgICAgICAgICAgICAgICAgICAgIEFmdGVyIGEgPGZpbGVuYW1lPnB1c2g8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+cHVsbDwvZmlsZW5hbWU+IGNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgIGNvbW1pdHMgYXJlIG5vcm1hbGx5IGNvbnNpZGVyZWQKKyAgICAgICAgICAgICAgICAgICAgInBlcm1hbmVudCIgYW5kIHlvdSBzaG91bGQgbm90IG1vZGlmeSB0aGVtLgorICAgICAgICAgICAgICAgICAgICBJZiB0aGUgY29tbWl0cyBuZWVkIHRvIGJlIGNoYW5nZWQsIHlvdSBjYW4gaW5jcmVtZW50YWxseSBkbyBzbyB3aXRoIG5ldyBjb21taXRzLgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBwcmFjdGljZXMgZm9sbG93IHN0YW5kYXJkIEdpdCB3b3JrZmxvdyBhbmQgdGhlIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gYmVzdAorICAgICAgICAgICAgICAgICAgICBwcmFjdGljZXMsIHdoaWNoIGlzIHJlY29tbWVuZGVkLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRvIHRhZyBvciBicmFuY2ggYmVmb3JlIGFkZGluZyBjaGFuZ2VzIHRvIGEgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgQlNQIG9yIGJlZm9yZSBjcmVhdGluZyBhIG5ldyBvbmUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVhc29uIGZvciB0aGlzIHJlY29tbWVuZGF0aW9uIGlzIGJlY2F1c2UgdGhlIGJyYW5jaCBvciB0YWcgcHJvdmlkZXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlIHBvaW50IHRvIGZhY2lsaXRhdGUgbG9jYXRpbmcgYW5kIGV4cG9ydGluZyBsb2NhbCBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2V4cG9ydC1pbnRlcm5hbGx5LXZpYS1wYXRjaGVzJz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPkV4cG9ydGluZyBDaGFuZ2VzIEludGVybmFsbHkgYnkgVXNpbmcgUGF0Y2hlczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB5b3UgY2FuIGV4dHJhY3QgY29tbWl0dGVkIGNoYW5nZXMgZnJvbSBhIHdvcmtpbmcgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICBieSBleHBvcnRpbmcgdGhlbSBhcyBwYXRjaGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgY2hhbmdlcyBoYXZlIGJlZW4gZXh0cmFjdGVkLCB5b3UgY2FuIHVzZSB0aGUgcGF0Y2hlcyBmb3IgdXBzdHJlYW0gc3VibWlzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlIHRoZW0gaW4gYSBZb2N0byBQcm9qZWN0IHRlbXBsYXRlIGZvciBhdXRvbWF0aWMga2VybmVsIHBhdGNoaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgb3IgYXBwbHkgdGhlbSBpbiBtYW55IG90aGVyIGNvbW1vbiB1c2VzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgc2hvd3MgaG93IHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB3aXRoIHNlcXVlbnRpYWxseSBudW1iZXJlZCBwYXRjaGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgZGlyZWN0b3J5IGlzIGNyZWF0ZWQsIHlvdSBjYW4gYXBwbHkgaXQgdG8gYSByZXBvc2l0b3J5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBhbTwvZmlsZW5hbWU+IGNvbW1hbmQgdG8gcmVwcm9kdWNlIHRoZSBvcmlnaW5hbCBjb21taXQgYW5kIGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJlbGF0ZWQgaW5mb3JtYXRpb24gc3VjaCBhcyBhdXRob3IsIGRhdGUsIGNvbW1pdCBsb2csIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuZXcgY29tbWl0IGlkZW50aWZpZXJzIChJRCkgd2lsbCBiZSBnZW5lcmF0ZWQgdXBvbiByZS1hcHBsaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFjdGlvbiByZWZsZWN0cyB0aGF0IHRoZSBjb21taXQgaXMgbm93IGFwcGxpZWQgdG8gYW4gdW5kZXJseWluZyBjb21taXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGEgZGlmZmVyZW50IElELgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjICZsdDtmaXJzdC1jb21taXQmZ3Q7IGNhbiBiZSBhIHRhZyBpZiBvbmUgd2FzIGNyZWF0ZWQgYmVmb3JlIGRldmVsb3BtZW50CisgICAgICMgYmVnYW4uIEl0IGNhbiBhbHNvIGJlIHRoZSBwYXJlbnQgYnJhbmNoIGlmIGEgYnJhbmNoIHdhcyBjcmVhdGVkCisgICAgICMgYmVmb3JlIGRldmVsb3BtZW50IGJlZ2FuLgorCisgICAgICQgZ2l0IGZvcm1hdC1wYXRjaCAtbyAmbHQ7ZGlyJmd0OyAmbHQ7Zmlyc3QgY29tbWl0Jmd0Oy4uJmx0O2xhc3QgY29tbWl0Jmd0OworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBJZGVudGlmeSBjb21taXRzIG9mIGludGVyZXN0LgorCisgICAgICMgSWYgdGhlIHRyZWUgd2FzIHRhZ2dlZCBiZWZvcmUgZGV2ZWxvcG1lbnQKKyAgICAgJCBnaXQgZm9ybWF0LXBhdGNoIC1vICZsdDtzYXZlIGRpciZndDsgJmx0O3RhZyZndDsKKworICAgICAjIElmIG5vIHRhZ3MgYXJlIGF2YWlsYWJsZQorICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggLW8gJmx0O3NhdmUgZGlyJmd0OyBIRUFEXiAgIyBsYXN0IGNvbW1pdAorICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggLW8gJmx0O3NhdmUgZGlyJmd0OyBIRUFEXl4gIyBsYXN0IDIgY29tbWl0cworICAgICAkIGdpdCB3aGF0Y2hhbmdlZCAjIGlkZW50aWZ5IGxhc3QgY29tbWl0CisgICAgICQgZ2l0IGZvcm1hdC1wYXRjaCAtbyAmbHQ7c2F2ZSBkaXImZ3Q7ICZsdDtjb21taXQgaWQmZ3Q7CisgICAgICQgZ2l0IGZvcm1hdC1wYXRjaCAtbyAmbHQ7c2F2ZSBkaXImZ3Q7ICZsdDtyZXYtbGlzdCZndDsKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdleHBvcnQtaW50ZXJuYWxseS12aWEtZ2l0Jz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPkV4cG9ydGluZyBDaGFuZ2VzIEludGVybmFsbHkgYnkgVXNpbmcgR2l0PC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHlvdSBjYW4gZXhwb3J0IGNoYW5nZXMgZnJvbSBhIHdvcmtpbmcgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICBieSBwdXNoaW5nIHRoZSBjaGFuZ2VzIGludG8gYSBtYXN0ZXIgcmVwb3NpdG9yeSBvciBieSBtYWtpbmcgYSBwdWxsIHJlcXVlc3QuCisgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIHB1c2hlZCB0aGUgY2hhbmdlcyB0byB0aGUgbWFzdGVyIHJlcG9zaXRvcnksIHlvdSBjYW4gdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgcHVsbCB0aG9zZSBzYW1lIGNoYW5nZXMgaW50byBhIG5ldyBrZXJuZWwgYnVpbGQgYXQgYSBsYXRlciB0aW1lLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhpcyBjb21tYW5kIGZvcm0gdG8gcHVzaCB0aGUgY2hhbmdlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgcHVzaCBzc2g6Ly8mbHQ7bWFzdGVyX3NlcnZlciZndDsvJmx0O3BhdGhfdG9fcmVwbyZndDsKKyAgICAgICAgJmx0O2xvY2FsX2JyYW5jaCZndDs6Jmx0O3JlbW90ZV9icmFuY2gmZ3Q7CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgcHVzaGVzIHRoZSBjaGFuZ2VzIGZyb20geW91ciBsb2NhbCBicmFuY2gKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0by9zdGFuZGFyZC9jb21tb24tcGMvYmFzZTwvZmlsZW5hbWU+IHRvIHRoZSByZW1vdGUgYnJhbmNoIHdpdGggdGhlIHNhbWUgbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIG1hc3RlciByZXBvc2l0b3J5IDxmaWxlbmFtZT4vL2dpdC5teWNvbXBhbnkuY29tL3B1Yi9naXQva2VybmVsLTMuNDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBwdXNoIHNzaDovL2dpdC5teWNvbXBhbnkuY29tL3B1Yi9naXQva2VybmVsLTMuNCBcCisgICAgICAgIHlvY3RvL3N0YW5kYXJkL2NvbW1vbi1wYy9iYXNlOnlvY3RvL3N0YW5kYXJkL2NvbW1vbi1wYy9iYXNlCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEEgcHVsbCByZXF1ZXN0IGVudGFpbHMgdXNpbmcgdGhlIDxmaWxlbmFtZT5naXQgcmVxdWVzdC1wdWxsPC9maWxlbmFtZT4gY29tbWFuZCB0byBjb21wb3NlCisgICAgICAgICAgICAgICAgICAgICAgICBhbiBlbWFpbCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIG1haW50YWluZXIgcmVxdWVzdGluZyB0aGF0IGEgYnJhbmNoIGJlIHB1bGxlZCBpbnRvIHRoZSBtYXN0ZXIgcmVwb3NpdG9yeSwgc2VlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0aHViLmNvbS9ndWlkZXMvcHVsbC1yZXF1ZXN0cyc+PC91bGluaz4gZm9yIGFuIGV4YW1wbGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlciBjb21tYW5kcyBzdWNoIGFzIDxmaWxlbmFtZT5naXQgc3Rhc2g8L2ZpbGVuYW1lPiBvciBicmFuY2hpbmcgY2FuIGFsc28gYmUgdXNlZCB0byBzYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcywgYnV0IGFyZSBub3QgY292ZXJlZCBpbiB0aGlzIGRvY3VtZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nZXhwb3J0LWZvci1leHRlcm5hbC11cHN0cmVhbS1zdWJtaXNzaW9uJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+RXhwb3J0aW5nIENoYW5nZXMgZm9yIEV4dGVybmFsIChVcHN0cmVhbSkgU3VibWlzc2lvbjwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgdG8gZXhwb3J0IGNoYW5nZXMgZm9yIGV4dGVybmFsIHVwc3RyZWFtIHN1Ym1pc3Npb24uCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBwYXRjaCBzZXJpZXMgaXMgbGFyZ2Ugb3IgdGhlIG1haW50YWluZXIgcHJlZmVycyB0byBwdWxsCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMsIHlvdSBjYW4gc3VibWl0IHRoZXNlIGNoYW5nZXMgYnkgdXNpbmcgYSBwdWxsIHJlcXVlc3QuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGl0IGlzIGNvbW1vbiB0byBzZW5kIHBhdGNoZXMgYXMgYW4gZW1haWwgc2VyaWVzLgorICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBhbGxvd3MgZWFzeSByZXZpZXcgYW5kIGludGVncmF0aW9uIG9mIHRoZSBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJlZm9yZSBzZW5kaW5nIHBhdGNoZXMgZm9yIHJldmlldyBiZSBzdXJlIHlvdSB1bmRlcnN0YW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgY29tbXVuaXR5IHN0YW5kYXJkcyBmb3Igc3VibWl0dGluZyBhbmQgZG9jdW1lbnRpbmcgY2hhbmdlcyBhbmQgZm9sbG93IHRoZWlyIGJlc3QgcHJhY3RpY2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGtlcm5lbCBwYXRjaGVzIHNob3VsZCBmb2xsb3cgc3RhbmRhcmRzIHN1Y2ggYXM6CisgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2xpbnV4Lnl5ei51cy9wYXRjaC1mb3JtYXQuaHRtbCc+PC91bGluaz48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyAoaW4gYW55IGxpbnV4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbCBzb3VyY2UgdHJlZSk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtZXNzYWdlcyB1c2VkIHRvIGNvbW1pdCBjaGFuZ2VzIGFyZSBhIGxhcmdlIHBhcnQgb2YgdGhlc2Ugc3RhbmRhcmRzLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIGJlIHN1cmUgdGhhdCB0aGUgaGVhZGVycyBmb3IgZWFjaCBjb21taXQgaGF2ZSB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZm9sbG93IHRoZSBZb2N0byBQcm9qZWN0IGNvbW1pdCBtZXNzYWdlIHN0YW5kYXJkcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjaG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+SG93IHRvIFN1Ym1pdCBhCisgICAgICAgICAgICAgICAgICAgIENoYW5nZTwvdWxpbms+IiBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGluaXRpYWwgY29tbWl0cyB3ZXJlIG5vdCBwcm9wZXJseSBkb2N1bWVudGVkIG9yIGRvIG5vdCBtZWV0IHRob3NlIHN0YW5kYXJkcywKKyAgICAgICAgICAgICAgICAgICAgeW91IGNhbiByZS1iYXNlIGJ5IHVzaW5nIHRoZSA8ZmlsZW5hbWU+Z2l0IHJlYmFzZSAtaTwvZmlsZW5hbWU+IGNvbW1hbmQgdG8KKyAgICAgICAgICAgICAgICAgICAgbWFuaXB1bGF0ZSB0aGUgY29tbWl0cyBhbmQKKyAgICAgICAgICAgICAgICAgICAgZ2V0IHRoZW0gaW50byB0aGUgcmVxdWlyZWQgZm9ybWF0LgorICAgICAgICAgICAgICAgICAgICBPdGhlciB0ZWNobmlxdWVzIHN1Y2ggYXMgYnJhbmNoaW5nIGFuZCBjaGVycnktcGlja2luZyBjb21taXRzIGFyZSBhbHNvIHZpYWJsZSBvcHRpb25zLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBjb21wbGV0ZSB0aGUgY29tbWl0cywgeW91IGNhbiBnZW5lcmF0ZSB0aGUgZW1haWwgdGhhdCBzZW5kcyB0aGUgcGF0Y2hlcworICAgICAgICAgICAgICAgICAgICB0byB0aGUgbWFpbnRhaW5lcihzKSBvciBsaXN0cyB0aGF0IHJldmlldyBhbmQgaW50ZWdyYXRlIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kIDxmaWxlbmFtZT5naXQgc2VuZC1lbWFpbDwvZmlsZW5hbWU+IGlzIGNvbW1vbmx5IHVzZWQgdG8gZW5zdXJlCisgICAgICAgICAgICAgICAgICAgIHRoYXQgcGF0Y2hlcyBhcmUgcHJvcGVybHkKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkIGZvciBlYXN5IGFwcGxpY2F0aW9uIGFuZCBhdm9pZCBtYWlsZXItaW5kdWNlZCBwYXRjaCBkYW1hZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBkdW1waW5nIHBhdGNoZXMgZm9yIGV4dGVybmFsIHN1Ym1pc3Npb246CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBkdW1wIHRoZSBsYXN0IDQgY29tbWl0cworICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggLS10aHJlYWQgLW4gLW8gfi9yci8gSEVBRF5eXl4KKyAgICAgJCBnaXQgc2VuZC1lbWFpbCAtLWNvbXBvc2UgLS1zdWJqZWN0ICdbUkZDIDAvTl0gJmx0O3BhdGNoIHNlcmllcyBzdW1tYXJ5Jmd0OycgXAorICAgICAgLS10byBmb29AeW9jdG9wcm9qZWN0Lm9yZyAtLXRvIGJhckB5b2N0b3Byb2plY3Qub3JnIFwKKyAgICAgIC0tY2MgbGlzdEB5b2N0b3Byb2plY3Qub3JnICB+L3JyCisgICAgICMgdGhlIGVkaXRvciBpcyBpbnZva2VkIGZvciB0aGUgMC9OIHBhdGNoLCBhbmQgd2hlbiBjb21wbGV0ZSB0aGUgZW50aXJlCisgICAgICMgc2VyaWVzIGlzIHNlbnQgdmlhIGVtYWlsIGZvciByZXZpZXcKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2V4cG9ydC1mb3ItaW1wb3J0LWludG8tb3RoZXItc2NtJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+RXhwb3J0aW5nIENoYW5nZXMgZm9yIEltcG9ydCBpbnRvIEFub3RoZXIgU0NNPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSB3YW50IHRvIGV4cG9ydCBjaGFuZ2VzIGZvciBpbXBvcnQgaW50byBhbm90aGVyCisgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBDb2RlIE1hbmFnZXIgKFNDTSksIHlvdSBjYW4gdXNlIGFueSBvZiB0aGUgcHJldmlvdXNseSBkaXNjdXNzZWQKKyAgICAgICAgICAgICAgICAgICAgdGVjaG5pcXVlcy4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgdGhlIHBhdGNoZXMgYXJlIG1hbnVhbGx5IGFwcGxpZWQgdG8gYSBzZWNvbmRhcnkgdHJlZSBhbmQgdGhlbgorICAgICAgICAgICAgICAgICAgICB0aGF0IHRyZWUgaXMgY2hlY2tlZCBpbnRvIHRoZSBTQ00sIHlvdSBjYW4gbG9zZSBjaGFuZ2UgaW5mb3JtYXRpb24gc3VjaCBhcworICAgICAgICAgICAgICAgICAgICBjb21taXQgbG9ncy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBwcm9jZXNzIGlzIG5vdCByZWNvbW1lbmRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTWFueSBTQ01zIGNhbiBkaXJlY3RseSBpbXBvcnQgR2l0IGNvbW1pdHMsIG9yIGNhbiB0cmFuc2xhdGUgR2l0IHBhdGNoZXMgc28gdGhhdAorICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBpcyBub3QgbG9zdC4KKyAgICAgICAgICAgICAgICAgICAgVGhvc2UgZmFjaWxpdGllcyBhcmUgU0NNLWRlcGVuZGVudCBhbmQgeW91IHNob3VsZCB1c2UgdGhlbSB3aGVuZXZlciBwb3NzaWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2NtLXdvcmtpbmctd2l0aC10aGUteW9jdG8tcHJvamVjdC1rZXJuZWwtaW4tYW5vdGhlci1zY20nPgorICAgICAgICAgICAgPHRpdGxlPldvcmtpbmcgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCBLZXJuZWwgaW4gQW5vdGhlciBTQ008L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGtlcm5lbCBkZXZlbG9wbWVudCBpbiBhbiBTQ00gb3RoZXIgdGhhbiBHaXQsCisgICAgICAgICAgICAgICAgd2hpY2ggaXMgbm90IHRoZSBzYW1lIGFzIGV4cG9ydGluZyBjaGFuZ2VzIHRvIGFub3RoZXIgU0NNIGRlc2NyaWJlZCBlYXJsaWVyLgorICAgICAgICAgICAgICAgIEZvciB0aGlzIHNjZW5hcmlvLCB5b3UgdXNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvCisgICAgICAgICAgICAgICAgZGV2ZWxvcCB0aGUga2VybmVsIGluIGEgZGlmZmVyZW50IFNDTS4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIG11c3QgYmUgdHJ1ZSBmb3IgeW91IHRvIGFjY29tcGxpc2ggdGhpczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGRlbGl2ZXJlZCBZb2N0byBQcm9qZWN0IGtlcm5lbCBtdXN0IGJlIGV4cG9ydGVkIGludG8gdGhlIHNlY29uZAorICAgICAgICAgICAgICAgICAgICAgICAgU0NNLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RGV2ZWxvcG1lbnQgbXVzdCBiZSBleHBvcnRlZCBmcm9tIHRoYXQgc2Vjb25kYXJ5IFNDTSBpbnRvIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nZXhwb3J0aW5nLWRlbGl2ZXJlZC1rZXJuZWwtdG8tc2NtJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+RXhwb3J0aW5nIHRoZSBEZWxpdmVyZWQgS2VybmVsIHRvIHRoZSBTQ008L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgU0NNLCBpdCBtaWdodCBiZSBwb3NzaWJsZSB0byBleHBvcnQgdGhlIGVudGlyZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIGtlcm5lbCBHaXQgcmVwb3NpdG9yeSwgYnJhbmNoZXMgYW5kIGFsbCwgaW50byBhIG5ldyBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRob2QgaXMgcHJlZmVycmVkIGJlY2F1c2UgaXQgaGFzIHRoZSBtb3N0IGZsZXhpYmlsaXR5IGFuZCBwb3RlbnRpYWwgdG8gbWFpbnRhaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIG1ldGEgZGF0YSBhc3NvY2lhdGVkIHdpdGggZWFjaCBjb21taXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gYSBkaXJlY3QgaW1wb3J0IG1lY2hhbmlzbSBpcyBub3QgYXZhaWxhYmxlLCBpdCBpcyBzdGlsbCBwb3NzaWJsZSB0bworICAgICAgICAgICAgICAgICAgICBleHBvcnQgYSBicmFuY2ggKG9yIHNlcmllcyBvZiBicmFuY2hlcykgYW5kIGNoZWNrIHRoZW0gaW50byBhIG5ldyByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGlsbHVzdHJhdGUgc29tZSBvZiB0aGUgc3RlcHMgeW91IGNvdWxkIHVzZSB0bworICAgICAgICAgICAgICAgICAgICBpbXBvcnQgdGhlIDxmaWxlbmFtZT55b2N0by9zdGFuZGFyZC9jb21tb24tcGMvYmFzZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGtlcm5lbCBpbnRvIGEgc2Vjb25kYXJ5IFNDTToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjaGVja291dCB5b2N0by9zdGFuZGFyZC9jb21tb24tcGMvYmFzZQorICAgICAkIGNkIC4uIDsgZWNobyBsaW51eC8uZ2l0ICZndDsgLmN2c2lnbm9yZQorICAgICAkIGN2cyBpbXBvcnQgLW0gImluaXRpYWwgaW1wb3J0IiBsaW51eCBNWV9DT01QQU5ZIHN0YXJ0CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNvdWxkIG5vdyByZWxvY2F0ZSB0aGUgQ1ZTIHJlcG9zaXRvcnkgYW5kIHVzZSBpdCBpbiBhIGNlbnRyYWxpemVkIG1hbm5lci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kcyBpbGx1c3RyYXRlIGhvdyB5b3UgY2FuIGNvbmRlbnNlIGFuZCBtZXJnZSB0d28gQlNQcyBpbnRvIGEKKyAgICAgICAgICAgICAgICAgICAgc2Vjb25kIFNDTToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjaGVja291dCB5b2N0by9zdGFuZGFyZC9jb21tb24tcGMvYmFzZQorICAgICAkIGdpdCBtZXJnZSB5b2N0by9zdGFuZGFyZC9jb21tb24tcGMtNjQvYmFzZQorICAgICAjIHJlc29sdmUgYW55IGNvbmZsaWN0cyBhbmQgY29tbWl0IHRoZW0KKyAgICAgJCBjZCAuLiA7IGVjaG8gbGludXgvLmdpdCAmZ3Q7IC5jdnNpZ25vcmUKKyAgICAgJCBjdnMgaW1wb3J0IC1tICJpbml0aWFsIGltcG9ydCIgbGludXggTVlfQ09NUEFOWSBzdGFydAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0naW1wb3J0aW5nLWNoYW5nZXMtZm9yLWJ1aWxkJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+SW1wb3J0aW5nIENoYW5nZXMgZm9yIHRoZSBCdWlsZDwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgT25jZSBkZXZlbG9wbWVudCBoYXMgcmVhY2hlZCBhIHN1aXRhYmxlIHBvaW50IGluIHRoZSBzZWNvbmQgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQsIHlvdSBuZWVkIHRvIGV4cG9ydCB0aGUgY2hhbmdlcyBhcyBwYXRjaGVzLgorICAgICAgICAgICAgICAgICAgICBUbyBleHBvcnQgdGhlbSwgcGxhY2UgdGhlIGNoYW5nZXMgaW4gYSByZWNpcGUgYW5kCisgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYXBwbHkgdGhlbSB0byB0aGUga2VybmVsIGR1cmluZyBwYXRjaGluZy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYnNwLWNyZWF0aW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyBhIEJTUCBCYXNlZCBvbiBhbiBFeGlzdGluZyBTaW1pbGFyIEJTUDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBvdmVydmlld3MgdGhlIHByb2Nlc3Mgb2YgY3JlYXRpbmcgYSBCU1AgYmFzZWQgb24gYW4KKyAgICAgICAgICAgICAgICBleGlzdGluZyBzaW1pbGFyIEJTUC4KKyAgICAgICAgICAgICAgICBUaGUgaW5mb3JtYXRpb24gaXMgaW50cm9kdWN0b3J5IGluIG5hdHVyZSBhbmQgZG9lcyBub3QgcHJvdmlkZSBzdGVwLWJ5LXN0ZXAgZXhhbXBsZXMuCisgICAgICAgICAgICAgICAgRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjcmVhdGUgYSBuZXcgQlNQLCBzZWUKKyAgICAgICAgICAgICAgICB0aGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2NyZWF0aW5nLWEtbmV3LWJzcC1sYXllci11c2luZy10aGUteW9jdG8tYnNwLXNjcmlwdCc+Q3JlYXRpbmcgYSBOZXcgQlNQIExheWVyIFVzaW5nIHRoZSB5b2N0by1ic3AgU2NyaXB0PC91bGluaz4iIHNlY3Rpb24gaW4gdGhlCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGUsIG9yIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvVHJhbnNjcmlwdDpfY3JlYXRpbmdfb25lX2dlbmVyaWNfQXRvbV9CU1BfZnJvbV9hbm90aGVyJz5UcmFuc2NyaXB0Ol9jcmVhdGluZ19vbmVfZ2VuZXJpY19BdG9tX0JTUF9mcm9tX2Fub3RoZXI8L3VsaW5rPgorICAgICAgICAgICAgICAgIHdpa2kgcGFnZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGJhc2ljIHN0ZXBzIHlvdSBuZWVkIHRvIGZvbGxvdyBhcmU6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1ha2Ugc3VyZSB5b3UgaGF2ZSBzZXQgdXAgYSBsb2NhbCBTb3VyY2UgRGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBjcmVhdGUgYSBsb2NhbAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBieSBlaXRoZXIgY3JlYXRpbmcgYSBHaXQgcmVwb3NpdG9yeSAocmVjb21tZW5kZWQpIG9yCisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0aW5nIGEgWW9jdG8gUHJvamVjdCByZWxlYXNlIHRhcmJhbGwuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2hvb3NlIGFuIGV4aXN0aW5nIEJTUCBhdmFpbGFibGUgd2l0aCB0aGUgWW9jdG8gUHJvamVjdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVHJ5IHRvIG1hcCB5b3VyIGJvYXJkIGZlYXR1cmVzIGFzIGNsb3NlbHkgdG8gdGhlIGZlYXR1cmVzIG9mIGEgQlNQIHRoYXQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgc3VwcG9ydGVkIGFuZCBleGlzdHMgaW4gdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICBTdGFydGluZyB3aXRoIHNvbWV0aGluZyBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB5b3VyIGJvYXJkIG1ha2VzIGRldmVsb3BpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgQlNQIGVhc2llci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBhbGwgdGhlIEJTUHMgdGhhdCBhcmUgc3VwcG9ydGVkIGFuZCBzaGlwIHdpdGggdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBZb2N0byBQcm9qZWN0J3MgRG93bmxvYWQgcGFnZSBhdAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy9kb3dubG9hZCc+PC91bGluaz4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QmUgc3VyZSB5b3UgaGF2ZSB0aGUgQmFzZSBCU1A6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGVpdGhlciBoYXZlIGEgbG9jYWwgR2l0IHJlcG9zaXRvcnkgb2YgdGhlIGJhc2UgQlNQIHNldCB1cCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSBkb3dubG9hZGVkIGFuZCBleHRyYWN0ZWQgdGhlIGZpbGVzIGZyb20gYSByZWxlYXNlIEJTUCB0YXJiYWxsLgorICAgICAgICAgICAgICAgICAgICAgICAgRWl0aGVyIG1ldGhvZCBnaXZlcyB5b3UgYWNjZXNzIHRvIHRoZSBCU1Agc291cmNlIGZpbGVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1ha2UgYSBjb3B5IG9mIHRoZSBleGlzdGluZyBCU1AsIHRodXMgaXNvbGF0aW5nIHlvdXIgbmV3CisgICAgICAgICAgICAgICAgICAgICAgICBCU1Agd29yazo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQ29weWluZyB0aGUgZXhpc3RpbmcgQlNQIGZpbGUgc3RydWN0dXJlIGdpdmVzIHlvdSBhIG5ldyBhcmVhIGluIHdoaWNoIHRvIHdvcmsuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFrZSBjb25maWd1cmF0aW9uIGFuZCByZWNpcGUgY2hhbmdlcyB0byB5b3VyIG5ldyBCU1A6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gY2hhbmdlcyBpbnZvbHZlIHRoZSBmaWxlcyBpbiB0aGUgQlNQJ3MgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlcyBpbmNsdWRlIGNyZWF0aW5nIGEgbWFjaGluZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUgYW5kIGVkaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGlkZW50aWZ5IHRoZSBrZXJuZWwgeW91IHdpbGwgYmUgdXNpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICBSZWNpcGUgY2hhbmdlcyBpbmNsdWRlIHJlbW92aW5nLCBtb2RpZnlpbmcsIG9yIGFkZGluZyBuZXcgcmVjaXBlIGZpbGVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0IHRoZSBidWlsZCBwcm9jZXNzIG9uIHdoYXQgZmVhdHVyZXMgdG8gaW5jbHVkZSBpbiB0aGUgaW1hZ2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UHJlcGFyZSBmb3IgdGhlIGJ1aWxkOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBCZWZvcmUgeW91IGFjdHVhbGx5IGluaXRpYXRlIHRoZSBidWlsZCwgeW91IG5lZWQgdG8gc2V0IHVwIHRoZSBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICAgICAgYnkgc291cmNpbmcgdGhlIGVudmlyb25tZW50IGluaXRpYWxpemF0aW9uIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIHNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50LCB5b3UgbmVlZCB0byBtYWtlIHNvbWUgYnVpbGQgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyB0byB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgdGhlIGltYWdlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIEJpdEJha2UgdG8gY3JlYXRlIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGRlY2lkZSBvbiB0aGUgdHlwZSBvZiBpbWFnZSB5b3UgYXJlIGdvaW5nIHRvIGJ1aWxkIChlLmcuIG1pbmltYWwsIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLCBzYXRvLCBhbmQgc28gZm9ydGgpIGFuZCB0aGVuIHN0YXJ0IHRoZSBidWlsZCB1c2luZyB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RpcC1kaXJ0eS1zdHJpbmcnPgorICAgICAgICAgICAgPHRpdGxlPiItZGlydHkiIFN0cmluZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIGtlcm5lbCBpbWFnZXMgYXJlIGJlaW5nIGJ1aWx0IHdpdGggIi1kaXJ0eSIgb24gdGhlIGVuZCBvZiB0aGUgdmVyc2lvbgorICAgICAgICAgICAgICAgIHN0cmluZywgdGhpcyBzaW1wbHkgbWVhbnMgdGhhdCBtb2RpZmljYXRpb25zIGluIHRoZSBzb3VyY2UKKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaGF2ZSBub3QgYmVlbiBjb21taXR0ZWQuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBzdGF0dXMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBhYm92ZSBHaXQgY29tbWFuZCB0byByZXBvcnQgbW9kaWZpZWQsIHJlbW92ZWQsIG9yIGFkZGVkIGZpbGVzLgorICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgY29tbWl0IHRob3NlIGNoYW5nZXMgdG8gdGhlIHRyZWUgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXkgd2lsbCBiZSBzYXZlZCwKKyAgICAgICAgICAgICAgICBleHBvcnRlZCwgb3IgdXNlZC4KKyAgICAgICAgICAgICAgICBPbmNlIHlvdSBjb21taXQgdGhlIGNoYW5nZXMgeW91IG5lZWQgdG8gcmVidWlsZCB0aGUga2VybmVsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBicnV0ZSBmb3JjZSBwaWNrdXAgYW5kIGNvbW1pdCBhbGwgc3VjaCBwZW5kaW5nIGNoYW5nZXMsIGVudGVyIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBhZGQgLgorICAgICAkIGdpdCBjb21taXQgLXMgLWEgLW0gImdldHRpbmcgcmlkIG9mIC1kaXJ0eSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE5leHQsIHJlYnVpbGQgdGhlIGtlcm5lbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1mYXEueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1mYXEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOTlhZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWZhcS54bWwKQEAgLTAsMCArMSwxNDAgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxhcHBlbmRpeCBpZD0na2VybmVsLWRldi1mYXEnPgorPHRpdGxlPktlcm5lbCBEZXZlbG9wbWVudCBGQVE8L3RpdGxlPgorCis8c2VjdGlvbiBpZD0na2VybmVsLWRldi1mYXEtc2VjdGlvbic+CisgICAgPHRpdGxlPkNvbW1vbiBRdWVzdGlvbnMgYW5kIFNvbHV0aW9uczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0cyBzb21lIHNvbHV0aW9ucyBmb3IgY29tbW9uIHF1ZXN0aW9ucy4KKworCisgICAgICAgIDxxYW5kYXNldD4KKyAgICAgICAgICAgIDxxYW5kYWVudHJ5PgorICAgICAgICAgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBIb3cgZG8gSSB1c2UgbXkgb3duIExpbnV4IGtlcm5lbCA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlPworICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBSZWZlciB0byB0aGUgIjxsaW5rIGxpbmtlbmQ9J2NoYW5naW5nLXRoZS1jb25maWd1cmF0aW9uJz5DaGFuZ2luZyB0aGUgQ29uZmlndXJhdGlvbjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvYW5zd2VyPgorICAgICAgICAgICAgPC9xYW5kYWVudHJ5PgorCisgICAgICAgICAgICA8cWFuZGFlbnRyeT4KKyAgICAgICAgICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgSG93IGRvIEkgY3JlYXRlIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzPworICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZmVyIHRvIHRoZSAiPGxpbmsgbGlua2VuZD0nZ2VuZXJhdGluZy1jb25maWd1cmF0aW9uLWZpbGVzJz5HZW5lcmF0aW5nIENvbmZpZ3VyYXRpb24gRmlsZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L2Fuc3dlcj4KKyAgICAgICAgICAgIDwvcWFuZGFlbnRyeT4KKworICAgICAgICAgICAgPHFhbmRhZW50cnk+CisgICAgICAgICAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvdyBkbyBJIHVzZSBteSBvd24gTGludXgga2VybmVsIHNvdXJjZXM/CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICAgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXIgdG8gdGhlICI8bGluayBsaW5rZW5kPSd3b3JraW5nLXdpdGgteW91ci1vd24tc291cmNlcyc+V29ya2luZyBXaXRoIFlvdXIgT3duIFNvdXJjZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L2Fuc3dlcj4KKyAgICAgICAgICAgIDwvcWFuZGFlbnRyeT4KKworICAgICAgICAgICAgPHFhbmRhZW50cnk+CisgICAgICAgICAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvdyBkbyBJIGluc3RhbGwvbm90LWluc3RhbGwgdGhlIGtlcm5lbCBpbWFnZSBvbiB0aGUgcm9vdGZzPworICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBrZXJuZWwgaW1hZ2UgKGUuZy4gPGZpbGVuYW1lPnZtbGludXo8L2ZpbGVuYW1lPikgaXMgcHJvdmlkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSA8ZmlsZW5hbWU+a2VybmVsLWltYWdlPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlIHJlY2lwZXMgZGVwZW5kIG9uIDxmaWxlbmFtZT5rZXJuZWwtYmFzZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gc3BlY2lmeSB3aGV0aGVyIG9yIG5vdCB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSBpcyBpbnN0YWxsZWQgaW4gdGhlIGdlbmVyYXRlZCByb290IGZpbGVzeXN0ZW0sIG92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkRFUEVORFNfa2VybmVsLWJhc2U8L2ZpbGVuYW1lPiB0byBpbmNsdWRlIG9yIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSAia2VybmVsLWltYWdlIi48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5TZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdXNpbmctYmJhcHBlbmQtZmlsZXMnPlVzaW5nIC5iYmFwcGVuZCBGaWxlczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgZm9yIGluZm9ybWF0aW9uIG9uCisgICAgICAgICAgICAgICAgICAgICAgICBob3cgdG8gdXNlIGFuIGFwcGVuZCBmaWxlIHRvIG92ZXJyaWRlIG1ldGFkYXRhLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9hbnN3ZXI+CisgICAgICAgICAgICA8L3FhbmRhZW50cnk+CisKKyAgICAgICAgICAgIDxxYW5kYWVudHJ5PgorICAgICAgICAgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBIb3cgZG8gSSBpbnN0YWxsIGEgc3BlY2lmaWMga2VybmVsIG1vZHVsZT8KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgICAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBMaW51eCBrZXJuZWwgbW9kdWxlcyBhcmUgcGFja2FnZWQgaW5kaXZpZHVhbGx5LgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gZW5zdXJlIGEgc3BlY2lmaWMga2VybmVsIG1vZHVsZSBpcyBpbmNsdWRlZCBpbiBhbiBpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgaXQgaW4gdGhlIGFwcHJvcHJpYXRlIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlc2Ugb3RoZXIgdmFyaWFibGVzIGFyZSB1c2VmdWwgZm9yIGluc3RhbGxpbmcgc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUyc+PGZpbGVuYW1lPk1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkVfRVhUUkFfUkRFUEVORFMnPjxmaWxlbmFtZT5NQUNISU5FX0VYVFJBX1JERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyc+PGZpbGVuYW1lPk1BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc2V0IHRoZSBmb2xsb3dpbmcgaW4gdGhlIDxmaWxlbmFtZT5xZW11eDg2LmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSB0byBpbmNsdWRlIHRoZSA8ZmlsZW5hbWU+YWIxMjM8L2ZpbGVuYW1lPiBrZXJuZWwgbW9kdWxlcworICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBpbWFnZXMgYnVpbHQgZm9yIHRoZSA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+IG1hY2hpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE1BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgKz0gImtlcm5lbC1tb2R1bGUtYWIxMjMiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2luY29ycG9yYXRpbmctb3V0LW9mLXRyZWUtbW9kdWxlcyc+SW5jb3Jwb3JhdGluZyBPdXQtb2YtVHJlZSBNb2R1bGVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L2Fuc3dlcj4KKyAgICAgICAgICAgIDwvcWFuZGFlbnRyeT4KKworICAgICAgICAgICAgPHFhbmRhZW50cnk+CisgICAgICAgICAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvdyBkbyBJIGNoYW5nZSB0aGUgTGludXgga2VybmVsIGNvbW1hbmQgbGluZT8KKyAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBMaW51eCBrZXJuZWwgY29tbWFuZCBsaW5lIGlzIHR5cGljYWxseSBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYWNoaW5lIGNvbmZpZyB1c2luZyB0aGUgPGZpbGVuYW1lPkFQUEVORDwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgY2FuIGFkZCBzb21lIGhlbHBmdWwgZGVidWcgaW5mb3JtYXRpb24gZG9pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEFQUEVORCArPSAicHJpbnRrLnRpbWU9eSBpbml0Y2FsbF9kZWJ1ZyBkZWJ1ZyIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvYW5zd2VyPgorICAgICAgICAgICAgPC9xYW5kYWVudHJ5PgorICAgICAgICA8L3FhbmRhc2V0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKzwvYXBwZW5kaXg+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtaW50cm8ueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1pbnRyby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYzZTUwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtaW50cm8ueG1sCkBAIC0wLDAgKzEsMTQ5IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0na2VybmVsLWRldi1pbnRybyc+Cis8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworPCEtLQorPHBhcmE+CisgICAgPGVtcGhhc2lzPkFSIC0gRGFycmVuIEhhcnQ6PC9lbXBoYXNpcz4gIFNlZSBpZiB0aGUgY29uY2VwdHMgaW4gdGhlc2UKKyAgICB0aHJlZSBidWxsZXRzIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgaW4gc29tZXdoZXJlIGluIHRoaXMgbWFudWFsOgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EbyB3ZSBjb252ZXkgdGhhdCBvdXIga2VybmVsIEdpdCByZXBvc2l0b3JpZXMKKyAgICAgICAgICAgIGhhdmUgYSBjbGVhciBhbmQgY29udGludW91cyBoaXN0b3J5LCBzaW1pbGFyIHRvIHRoZSB3YXkgdGhlCisgICAgICAgICAgICBrZXJuZWwgR2l0IHJlcG9zaXRvcmllcyBmb3IgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZG8uCisgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvZXMgdGhlIG1hbnVhbCBub3RlIHRoYXQgWW9jdG8gUHJvamVjdCBkZWxpdmVycworICAgICAgICAgICAgYSBrZXkgc2V0IG9mIHN1cHBvcnRlZCBrZXJuZWwgdHlwZXMsIHdoZXJlCisgICAgICAgICAgICBlYWNoIHR5cGUgaXMgdGFpbG9yZWQgdG8gbWVldCBhIHNwZWNpZmljIHVzZSAoZS5nLiBuZXR3b3JraW5nLAorICAgICAgICAgICAgY29uc3VtZXIsIGRldmljZXMsIGFuZCBzbyBmb3J0aCkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EbyB3ZSBjb252ZXkgdGhhdCB0aGUgWW9jdG8gUHJvamVjdCB1c2VzIGEKKyAgICAgICAgICAgIEdpdCBicmFuY2hpbmcgc3RyYXRlZ3kgdGhhdCwgZnJvbSBhCisgICAgICAgICAgICBkZXZlbG9wZXIncyBwb2ludCBvZiB2aWV3LCByZXN1bHRzIGluIGEgbGluZWFyIHBhdGggZnJvbSB0aGUKKyAgICAgICAgICAgIGJhc2VsaW5lIGtlcm5lbC5vcmcsIHRocm91Z2ggYSBzZWxlY3QgZ3JvdXAgb2YgZmVhdHVyZXMgYW5kCisgICAgICAgICAgICBlbmRzIHdpdGggdGhlaXIgQlNQLXNwZWNpZmljIGNvbW1pdHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+Cis8L3BhcmE+CistLT4KKworICAgIDxzZWN0aW9uIGlkPSdrZXJuZWwtZGV2LW92ZXJ2aWV3Jz4KKyAgICAgICAgPHRpdGxlPk92ZXJ2aWV3PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFJlZ2FyZGxlc3Mgb2YgaG93IHlvdSBpbnRlbmQgdG8gbWFrZSB1c2Ugb2YgdGhlIFlvY3RvIFByb2plY3QsCisgICAgICAgICAgICBjaGFuY2VzIGFyZSB5b3Ugd2lsbCB3b3JrIHdpdGggdGhlIExpbnV4IGtlcm5lbC4KKyAgICAgICAgICAgIFRoaXMgbWFudWFsIHByb3ZpZGVzIGJhY2tncm91bmQgaW5mb3JtYXRpb24gb24gdGhlIFlvY3RvIExpbnV4IGtlcm5lbAorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4sCisgICAgICAgICAgICBkZXNjcmliZXMgY29tbW9uIHRhc2tzIHlvdSBjYW4gcGVyZm9ybSB1c2luZyB0aGUga2VybmVsIHRvb2xzLAorICAgICAgICAgICAgYW5kIHNob3dzIHlvdSBob3cgdG8gdXNlIHRoZSBrZXJuZWwgTWV0YWRhdGEgbmVlZGVkIHRvIHdvcmsgd2l0aAorICAgICAgICAgICAgdGhlIGtlcm5lbCBpbnNpZGUgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgPC9wYXJhPgorCisgICAgICAgPHBhcmE+CisgICAgICAgICAgICBFYWNoIFlvY3RvIFByb2plY3QgcmVsZWFzZSBoYXMgYSBzZXQgb2YgbGludXgteW9jdG8gcmVjaXBlcywgd2hvc2UKKyAgICAgICAgICAgIEdpdCByZXBvc2l0b3JpZXMgeW91IGNhbiB2aWV3IGluIHRoZSBZb2N0bworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7Jz5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4gdW5kZXIKKyAgICAgICAgICAgIHRoZSAiWW9jdG8gTGludXggS2VybmVsIiBoZWFkaW5nLgorICAgICAgICAgICAgTmV3IHJlY2lwZXMgZm9yIHRoZSByZWxlYXNlIHRyYWNrIHRoZSBsYXRlc3QgdXBzdHJlYW0gZGV2ZWxvcG1lbnRzCisgICAgICAgICAgICBhbmQgaW50cm9kdWNlIG5ld2x5LXN1cHBvcnRlZCBwbGF0Zm9ybXMuCisgICAgICAgICAgICBQcmV2aW91cyByZWNpcGVzIGluIHRoZSByZWxlYXNlIGFyZSByZWZyZXNoZWQgYW5kIHN1cHBvcnRlZCBmb3IgYXQKKyAgICAgICAgICAgIGxlYXN0IG9uZSBhZGRpdGlvbmFsIHJlbGVhc2UuCisgICAgICAgICAgICBBcyB0aGV5IGFsaWduLCB0aGVzZSBwcmV2aW91cyByZWxlYXNlcyBhcmUgdXBkYXRlZCB0byBpbmNsdWRlIHRoZQorICAgICAgICAgICAgbGF0ZXN0IGZyb20gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L29yZ2FuaXphdGlvbi9sb25nLXRlcm0tc3VwcG9ydC1pbml0aWF0aXZlLWx0c2knPkxvbmcgVGVybSBTdXBwb3J0IEluaXRpYXRpdmU8L3VsaW5rPgorICAgICAgICAgICAgKExUU0kpIHByb2plY3QuCisgICAgICAgICAgICBBbHNvIGluY2x1ZGVkIGlzIGEgbGludXgteW9jdG8gZGV2ZWxvcG1lbnQgcmVjaXBlCisgICAgICAgICAgICAoPGZpbGVuYW1lPmxpbnV4LXlvY3RvLWRldi5iYjwvZmlsZW5hbWU+KSBzaG91bGQgeW91IHdhbnQgdG8gd29yaworICAgICAgICAgICAgd2l0aCB0aGUgdmVyeSBsYXRlc3QgaW4gdXBzdHJlYW0gTGludXgga2VybmVsIGRldmVsb3BtZW50IGFuZAorICAgICAgICAgICAga2VybmVsIE1ldGFkYXRhIGRldmVsb3BtZW50LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBhbHNvIHByb3ZpZGVzIGEgcG93ZXJmdWwgc2V0IG9mIGtlcm5lbAorICAgICAgICAgICAgdG9vbHMgZm9yIG1hbmFnaW5nIExpbnV4IGtlcm5lbCBzb3VyY2VzIGFuZCBjb25maWd1cmF0aW9uIGRhdGEuCisgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGVzZSB0b29scyB0byBtYWtlIGEgc2luZ2xlIGNvbmZpZ3VyYXRpb24gY2hhbmdlLAorICAgICAgICAgICAgYXBwbHkgbXVsdGlwbGUgcGF0Y2hlcywgb3Igd29yayB3aXRoIHlvdXIgb3duIGtlcm5lbCBzb3VyY2VzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB0aGUga2VybmVsIHRvb2xzIGFsbG93IHlvdSB0byBnZW5lcmF0ZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICBmcmFnbWVudHMgdGhhdCBzcGVjaWZ5IG9ubHkgd2hhdCB5b3UgbXVzdCwgYW5kIG5vdGhpbmcgbW9yZS4KKyAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIG9ubHkgbmVlZCB0byBjb250YWluIHRoZSBoaWdoZXN0IGxldmVsCisgICAgICAgICAgICB2aXNpYmxlIDxmaWxlbmFtZT5DT05GSUc8L2ZpbGVuYW1lPiBvcHRpb25zIGFzIHByZXNlbnRlZCBieSB0aGUgTGludXgKKyAgICAgICAgICAgIGtlcm5lbCA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+IHN5c3RlbS4KKyAgICAgICAgICAgIENvbnRyYXN0IHRoaXMgYWdhaW5zdCBhIGNvbXBsZXRlIExpbnV4IGtlcm5lbAorICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiwgd2hpY2ggaW5jbHVkZXMgYWxsIHRoZSBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICBzZWxlY3RlZCA8ZmlsZW5hbWU+Q09ORklHPC9maWxlbmFtZT4gb3B0aW9ucy4KKyAgICAgICAgICAgIFRoaXMgZWZmaWNpZW5jeSByZWR1Y2VzIHlvdXIgbWFpbnRlbmFuY2UgZWZmb3J0IGFuZCBhbGxvd3MgeW91CisgICAgICAgICAgICB0byBmdXJ0aGVyIHNlcGFyYXRlIHlvdXIgY29uZmlndXJhdGlvbiBpbiB3YXlzIHRoYXQgbWFrZSBzZW5zZSBmb3IKKyAgICAgICAgICAgIHlvdXIgcHJvamVjdC4KKyAgICAgICAgICAgIEEgY29tbW9uIHNwbGl0IHNlcGFyYXRlcyBwb2xpY3kgYW5kIGhhcmR3YXJlLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGFsbCB5b3VyIGtlcm5lbHMgbWlnaHQgc3VwcG9ydAorICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5wcm9jPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5zeXM8L2ZpbGVuYW1lPiBmaWxlc3lzdGVtcywKKyAgICAgICAgICAgIGJ1dCBvbmx5IHNwZWNpZmljIGJvYXJkcyByZXF1aXJlIHNvdW5kLCBVU0IsIG9yIHNwZWNpZmljIGRyaXZlcnMuCisgICAgICAgICAgICBTcGVjaWZ5aW5nIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGluZGl2aWR1YWxseSBhbGxvd3MgeW91IHRvIGFnZ3JlZ2F0ZQorICAgICAgICAgICAgdGhlbSB0b2dldGhlciBhcyBuZWVkZWQsIGJ1dCBtYWludGFpbnMgdGhlbSBpbiBvbmx5IG9uZSBwbGFjZS4KKyAgICAgICAgICAgIFNpbWlsYXIgbG9naWMgYXBwbGllcyB0byBzZXBhcmF0aW5nIHNvdXJjZSBjaGFuZ2VzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgZG8gbm90IG1haW50YWluIHlvdXIgb3duIGtlcm5lbCBzb3VyY2VzIGFuZCBuZWVkIHRvIG1ha2UKKyAgICAgICAgICAgIG9ubHkgbWluaW1hbCBjaGFuZ2VzIHRvIHRoZSBzb3VyY2VzLCB0aGUgcmVsZWFzZWQgcmVjaXBlcyBwcm92aWRlIGEKKyAgICAgICAgICAgIHZldHRlZCBiYXNlIHVwb24gd2hpY2ggdG8gbGF5ZXIgeW91ciBjaGFuZ2VzLgorICAgICAgICAgICAgRG9pbmcgc28gYWxsb3dzIHlvdSB0byBiZW5lZml0IGZyb20gdGhlIGNvbnRpbnVhbCBrZXJuZWwKKyAgICAgICAgICAgIGludGVncmF0aW9uIGFuZCB0ZXN0aW5nIHBlcmZvcm1lZCBkdXJpbmcgZGV2ZWxvcG1lbnQgb2YgdGhlCisgICAgICAgICAgICBZb2N0byBQcm9qZWN0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiwgaW5zdGVhZCwgeW91IGhhdmUgYSB2ZXJ5IHNwZWNpZmljIExpbnV4IGtlcm5lbCBzb3VyY2UgdHJlZQorICAgICAgICAgICAgYW5kIGFyZSB1bmFibGUgdG8gYWxpZ24gd2l0aCBvbmUgb2YgdGhlIG9mZmljaWFsIGxpbnV4LXlvY3RvCisgICAgICAgICAgICByZWNpcGVzLCBhbiBhbHRlcm5hdGl2ZSBleGlzdHMgYnkgd2hpY2ggeW91IGNhbiB1c2UgdGhlIFlvY3RvCisgICAgICAgICAgICBQcm9qZWN0IExpbnV4IGtlcm5lbCB0b29scyB3aXRoIHlvdXIgb3duIGtlcm5lbCBzb3VyY2VzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2tlcm5lbC1kZXYtb3RoZXItcmVzb3VyY2VzJz4KKyAgICAgICAgPHRpdGxlPk90aGVyIFJlc291cmNlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgc2VjdGlvbnMgdGhhdCBmb2xsb3cgcHJvdmlkZSBpbnN0cnVjdGlvbnMgZm9yIGNvbXBsZXRpbmcKKyAgICAgICAgICAgIHNwZWNpZmljIExpbnV4IGtlcm5lbCBkZXZlbG9wbWVudCB0YXNrcy4KKyAgICAgICAgICAgIFRoZXNlIGluc3RydWN0aW9ucyBhc3N1bWUgeW91IGFyZSBjb21mb3J0YWJsZSB3b3JraW5nIHdpdGgKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9vcGVuZW1iZWRkZWQub3JnL3dpa2kvQml0YmFrZSc+Qml0QmFrZTwvdWxpbms+CisgICAgICAgICAgICByZWNpcGVzIGFuZCBiYXNpYyBvcGVuLXNvdXJjZSBkZXZlbG9wbWVudCB0b29scy4KKyAgICAgICAgICAgIFVuZGVyc3RhbmRpbmcgdGhlc2UgY29uY2VwdHMgd2lsbCBmYWNpbGl0YXRlIHRoZSBwcm9jZXNzIG9mIHdvcmtpbmcKKyAgICAgICAgICAgIHdpdGggdGhlIGtlcm5lbCByZWNpcGVzLgorICAgICAgICAgICAgSWYgeW91IGZpbmQgeW91IG5lZWQgc29tZSBhZGRpdGlvbmFsIGJhY2tncm91bmQsIHBsZWFzZSBiZSBzdXJlIHRvCisgICAgICAgICAgICByZXZpZXcgYW5kIHVuZGVyc3RhbmQgdGhlIGZvbGxvd2luZyBkb2N1bWVudGF0aW9uOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyc+WW9jdG8gUHJvamVjdCBRdWljayBTdGFydDwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2Rldi1tb2RpZnlpbmctc291cmNlLWNvZGUnPk1vZGlmeWluZyBTb3VyY2UgQ29kZTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbAorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcgYW5kIENyZWF0aW5nIExheWVyczwvdWxpbms+IiBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21vZGlmeWluZy10aGUta2VybmVsJz5Nb2RpZnlpbmcgdGhlIEtlcm5lbDwvdWxpbms+IiBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGaW5hbGx5LCB3aGlsZSB0aGlzIGRvY3VtZW50IGZvY3VzZXMgb24gdGhlIG1hbnVhbCBjcmVhdGlvbiBvZgorICAgICAgICAgICAgcmVjaXBlcywgcGF0Y2hlcywgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgdG9vbHMgYXJlIGF2YWlsYWJsZSB0byBhdXRvbWF0ZQorICAgICAgICAgICAgdGhpcyBwcm9jZXNzIHdpdGggZXhpc3RpbmcgY29udGVudCBhbmQgd29yayB3ZWxsIHRvIGNyZWF0ZSB0aGUKKyAgICAgICAgICAgIGluaXRpYWwgZnJhbWV3b3JrIGFuZCBib2lsZXJwbGF0ZSBjb2RlLgorICAgICAgICAgICAgRm9yIGRldGFpbHMgb24gdGhlc2UgdG9vbHMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyN1c2luZy10aGUteW9jdG8tcHJvamVjdHMtYnNwLXRvb2xzJz5Vc2luZyB0aGUgWW9jdG8gUHJvamVjdCdzIEJTUCBUb29sczwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MKKyAgICAgICAgICAgIEd1aWRlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LW1haW50LWFwcHgueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1tYWludC1hcHB4LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmIwY2Y2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1tYWludC1hcHB4LnhtbApAQCAtMCwwICsxLDIyMCBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGFwcGVuZGl4IGlkPSdrZXJuZWwtZGV2LW1haW50LWFwcHgnPgorPHRpdGxlPktlcm5lbCBNYWludGVuYW5jZTwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0ndHJlZS1jb25zdHJ1Y3Rpb24nPgorICAgICAgICA8dGl0bGU+VHJlZSBDb25zdHJ1Y3Rpb248L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgY29uc3RydWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBzb3VyY2UgcmVwb3NpdG9yaWVzCisgICAgICAgICAgICBhcyBhY2NvbXBsaXNoZWQgYnkgdGhlIFlvY3RvIFByb2plY3QgdGVhbSB0byBjcmVhdGUga2VybmVsIHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgIFRoZXNlIGtlcm5lbCByZXBvc2l0b3JpZXMgYXJlIGZvdW5kIHVuZGVyIHRoZSBoZWFkaW5nICJZb2N0byBMaW51eCBLZXJuZWwiIGF0CisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2knPiZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaTwvdWxpbms+CisgICAgICAgICAgICBhbmQgY2FuIGJlIHNoaXBwZWQgYXMgcGFydCBvZiBhIFlvY3RvIFByb2plY3QgcmVsZWFzZS4KKyAgICAgICAgICAgIFRoZSB0ZWFtIGNyZWF0ZXMgdGhlc2UgcmVwb3NpdG9yaWVzIGJ5CisgICAgICAgICAgICBjb21waWxpbmcgYW5kIGV4ZWN1dGluZyB0aGUgc2V0IG9mIGZlYXR1cmUgZGVzY3JpcHRpb25zIGZvciBldmVyeSBCU1AKKyAgICAgICAgICAgIGFuZCBmZWF0dXJlIGluIHRoZSBwcm9kdWN0LgorICAgICAgICAgICAgVGhvc2UgZmVhdHVyZSBkZXNjcmlwdGlvbnMgbGlzdCBhbGwgbmVjZXNzYXJ5IHBhdGNoZXMsCisgICAgICAgICAgICBjb25maWd1cmF0aW9uLCBicmFuY2hpbmcsIHRhZ2dpbmcgYW5kIGZlYXR1cmUgZGl2aXNpb25zIGZvdW5kIGluIGEga2VybmVsLgorICAgICAgICAgICAgVGh1cywgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHJlcG9zaXRvcnkgKG9yIHRyZWUpIGlzIGJ1aWx0LgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGV4aXN0ZW5jZSBvZiB0aGlzIHRyZWUgYWxsb3dzIHlvdSB0byBhY2Nlc3MgYW5kIGNsb25lIGEgcGFydGljdWxhcgorICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBrZXJuZWwgcmVwb3NpdG9yeSBhbmQgdXNlIGl0IHRvIGJ1aWxkIGltYWdlcyBiYXNlZCBvbiB0aGVpciBjb25maWd1cmF0aW9ucworICAgICAgICAgICAgYW5kIGZlYXR1cmVzLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZSBmaWxlcyB1c2VkIHRvIGRlc2NyaWJlIGFsbCB0aGUgdmFsaWQgZmVhdHVyZXMgYW5kIEJTUHMKKyAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBpbiBhbnkgY2xvbmUgb2YgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHNvdXJjZSByZXBvc2l0b3J5CisgICAgICAgICAgICBHaXQgdHJlZS4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgY2xvbmVzIHRoZSBZb2N0byBQcm9qZWN0IGJhc2VsaW5lIGtlcm5lbCB0aGF0CisgICAgICAgICAgICBicmFuY2hlZCBvZmYgb2YgPGZpbGVuYW1lPmxpbnV4Lm9yZzwvZmlsZW5hbWU+IHZlcnNpb24gMy4xOToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy4xOQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgRm9yIGFub3RoZXIgZXhhbXBsZSBvZiBob3cgdG8gc2V0IHVwIGEgbG9jYWwgR2l0IHJlcG9zaXRvcnkgb2YgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgIGtlcm5lbCBmaWxlcywgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2xvY2FsLWtlcm5lbC1maWxlcyc+WW9jdG8gUHJvamVjdCBLZXJuZWw8L3VsaW5rPiIgYnVsbGV0ZWQKKyAgICAgICAgICAgIGl0ZW0gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBjbG9uZWQgdGhlIGtlcm5lbCBHaXQgcmVwb3NpdG9yeSBvbiB5b3VyIGxvY2FsIG1hY2hpbmUsIHlvdSBjYW4KKyAgICAgICAgICAgIHN3aXRjaCB0byB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2ggd2l0aGluIHRoZSByZXBvc2l0b3J5LgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgYXNzdW1lcyB0aGUgbG9jYWwgR2l0IHJlcG9zaXRvcnkgZm9yIHRoZSBrZXJuZWwgaXMgaW4KKyAgICAgICAgICAgIGEgdG9wLWxldmVsIGRpcmVjdG9yeSBuYW1lZCA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xOTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIGxpbnV4LXlvY3RvLTMuMTkKKyAgICAgJCBnaXQgY2hlY2tvdXQgLWIgbWV0YSBvcmlnaW4vbWV0YQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBjaGVja2VkIG91dCBhbmQgc3dpdGNoZWQgdG8gdGhlIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gYnJhbmNoLAorICAgICAgICAgICAgeW91IGNhbiBzZWUgYSBzbmFwc2hvdCBvZiBhbGwgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGFuZCBmZWF0dXJlIGRlc2NyaXB0aW9ucyB0aGF0IGFyZQorICAgICAgICAgICAgdXNlZCB0byBidWlsZCB0aGF0IHBhcnRpY3VsYXIga2VybmVsIHJlcG9zaXRvcnkuCisgICAgICAgICAgICBUaGVzZSBkZXNjcmlwdGlvbnMgYXJlIGluIHRoZSBmb3JtIG9mIDxmaWxlbmFtZT4uc2NjPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3Ugc2hvdWxkIHJlYWxpemUsIGhvd2V2ZXIsIHRoYXQgYnJvd3NpbmcgeW91ciBsb2NhbCBrZXJuZWwgcmVwb3NpdG9yeQorICAgICAgICAgICAgZm9yIGZlYXR1cmUgZGVzY3JpcHRpb25zIGFuZCBwYXRjaGVzIGlzIG5vdCBhbiBlZmZlY3RpdmUgd2F5IHRvIGRldGVybWluZSB3aGF0IGlzIGluIGEKKyAgICAgICAgICAgIHBhcnRpY3VsYXIga2VybmVsIGJyYW5jaC4KKyAgICAgICAgICAgIEluc3RlYWQsIHlvdSBzaG91bGQgdXNlIEdpdCBkaXJlY3RseSB0byBkaXNjb3ZlciB0aGUgY2hhbmdlcyBpbiBhIGJyYW5jaC4KKyAgICAgICAgICAgIFVzaW5nIEdpdCBpcyBhbiBlZmZpY2llbnQgYW5kIGZsZXhpYmxlIHdheSB0byBpbnNwZWN0IGNoYW5nZXMgdG8gdGhlIGtlcm5lbC4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEdyb3VuZCB1cCByZWNvbnN0cnVjdGlvbiBvZiB0aGUgY29tcGxldGUga2VybmVsIHRyZWUgaXMgYW4gYWN0aW9uIG9ubHkgdGFrZW4gYnkgdGhlCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCB0ZWFtIGR1cmluZyBhbiBhY3RpdmUgZGV2ZWxvcG1lbnQgY3ljbGUuCisgICAgICAgICAgICAgICAgV2hlbiB5b3UgY3JlYXRlIGEgY2xvbmUgb2YgdGhlIGtlcm5lbCBHaXQgcmVwb3NpdG9yeSwgeW91IGFyZSBzaW1wbHkgbWFraW5nIGl0CisgICAgICAgICAgICAgICAgZWZmaWNpZW50bHkgYXZhaWxhYmxlIGZvciBidWlsZGluZyBhbmQgZGV2ZWxvcG1lbnQuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN0ZXBzIGRlc2NyaWJlIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBZb2N0byBQcm9qZWN0IFRlYW0gY29uc3RydWN0cworICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHNvdXJjZSBHaXQgcmVwb3NpdG9yeSAob3IgdHJlZSkgZm91bmQgYXQKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+PC91bGluaz4gZ2l2ZW4gdGhlCisgICAgICAgICAgICBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgdG9wLWxldmVsIGtlcm5lbCBmZWF0dXJlIG9yIEJTUC4KKyAgICAgICAgICAgIFRoZXNlIGFyZSB0aGUgYWN0aW9ucyB0aGF0IGVmZmVjdGl2ZWx5IGNyZWF0ZSB0aGUgdHJlZQorICAgICAgICAgICAgdGhhdCBpbmNsdWRlcyB0aGUgbmV3IGZlYXR1cmUsIHBhdGNoIG9yIEJTUDoKKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSB0b3AtbGV2ZWwga2VybmVsIGZlYXR1cmUgaXMgcGFzc2VkIHRvIHRoZSBrZXJuZWwgYnVpbGQgc3Vic3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBOb3JtYWxseSwgdGhpcyBmZWF0dXJlIGlzIGEgQlNQIGZvciBhIHBhcnRpY3VsYXIga2VybmVsIHR5cGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBmaWxlIHRoYXQgZGVzY3JpYmVzIHRoZSB0b3AtbGV2ZWwgZmVhdHVyZSBpcyBsb2NhdGVkIGJ5IHNlYXJjaGluZworICAgICAgICAgICAgICAgICAgICB0aGVzZSBzeXN0ZW0gZGlyZWN0b3JpZXM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGluLXRyZWUga2VybmVsLWNhY2hlIGRpcmVjdG9yaWVzLCB3aGljaCBhcmUgbG9jYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIDxmaWxlbmFtZT5tZXRhL2NmZy9rZXJuZWwtY2FjaGU8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFyZWFzIHBvaW50ZWQgdG8gYnkgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzdGF0ZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgaW4gcmVjaXBlczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGEgdHlwaWNhbCBidWlsZCwgdGhlIHRhcmdldCBvZiB0aGUgc2VhcmNoIGlzIGEKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZSBkZXNjcmlwdGlvbiBpbiBhbiA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgd2hvc2UgbmFtZSBmb2xsb3dzIHRoaXMgZm9ybWF0OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+LTxyZXBsYWNlYWJsZT5rZXJuZWxfdHlwZTwvcmVwbGFjZWFibGU+LnNjYworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk9uY2UgbG9jYXRlZCwgdGhlIGZlYXR1cmUgZGVzY3JpcHRpb24gaXMgZWl0aGVyIGNvbXBpbGVkIGludG8gYSBzaW1wbGUgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgIG9mIGFjdGlvbnMsIG9yIGludG8gYW4gZXhpc3RpbmcgZXF1aXZhbGVudCBzY3JpcHQgdGhhdCBpcyBhbHJlYWR5IHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHNoaXBwZWQga2VybmVsLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHRyYSBmZWF0dXJlcyBhcmUgYXBwZW5kZWQgdG8gdGhlIHRvcC1sZXZlbCBmZWF0dXJlIGRlc2NyaXB0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBmZWF0dXJlcyBjYW4gY29tZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS0VSTkVMX0ZFQVRVUkVTJz48ZmlsZW5hbWU+S0VSTkVMX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiByZWNpcGVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FYWNoIGV4dHJhIGZlYXR1cmUgaXMgbG9jYXRlZCwgY29tcGlsZWQgYW5kIGFwcGVuZGVkIHRvIHRoZSBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgYXMgZGVzY3JpYmVkIGluIHN0ZXAgdGhyZWUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBzY3JpcHQgaXMgZXhlY3V0ZWQgdG8gcHJvZHVjZSBhIHNlcmllcyBvZiA8ZmlsZW5hbWU+bWV0YS0qPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGRpcmVjdG9yaWVzIGFyZSBkZXNjcmlwdGlvbnMgb2YgYWxsIHRoZSBicmFuY2hlcywgdGFncywgcGF0Y2hlcyBhbmQgY29uZmlndXJhdGlvbnMgdGhhdAorICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGJhc2UgR2l0IHJlcG9zaXRvcnkgdG8gY29tcGxldGVseSBjcmVhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSAoYnVpbGQpIGJyYW5jaCBmb3IgdGhlIG5ldyBCU1Agb3IgZmVhdHVyZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGJhc2UgcmVwb3NpdG9yeSBpcyBjbG9uZWQsIGFuZCB0aGUgYWN0aW9ucworICAgICAgICAgICAgICAgICAgICBsaXN0ZWQgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLSo8L2ZpbGVuYW1lPiBkaXJlY3RvcmllcyBhcmUgYXBwbGllZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgdHJlZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIEdpdCByZXBvc2l0b3J5IGlzIGxlZnQgd2l0aCB0aGUgZGVzaXJlZCBicmFuY2ggY2hlY2tlZCBvdXQgYW5kIGFueQorICAgICAgICAgICAgICAgICAgICByZXF1aXJlZCBicmFuY2hpbmcsIHBhdGNoaW5nIGFuZCB0YWdnaW5nIGhhcyBiZWVuIHBlcmZvcm1lZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUga2VybmVsIHRyZWUgaXMgbm93IHJlYWR5IGZvciBkZXZlbG9wZXIgY29uc3VtcHRpb24gdG8gYmUgbG9jYWxseSBjbG9uZWQsCisgICAgICAgICAgICBjb25maWd1cmVkLCBhbmQgYnVpbHQgaW50byBhIFlvY3RvIFByb2plY3Qga2VybmVsIHNwZWNpZmljIHRvIHNvbWUgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgPG5vdGU+PHBhcmE+VGhlIGdlbmVyYXRlZCA8ZmlsZW5hbWU+bWV0YS0qPC9maWxlbmFtZT4gZGlyZWN0b3JpZXMgYWRkIHRvIHRoZSBrZXJuZWwKKyAgICAgICAgICAgICAgICBhcyBzaGlwcGVkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICBBbnkgYWRkLW9ucyBhbmQgY29uZmlndXJhdGlvbiBkYXRhIGFyZSBhcHBsaWVkIHRvIHRoZSBlbmQgb2YgYW4gZXhpc3RpbmcgYnJhbmNoLgorICAgICAgICAgICAgICAgIFRoZSBmdWxsIHJlcG9zaXRvcnkgZ2VuZXJhdGlvbiB0aGF0IGlzIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIG9mZmljaWFsIFlvY3RvIFByb2plY3Qga2VybmVsIHJlcG9zaXRvcmllcyBhdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+aHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQuY2dpPC91bGluaz4KKyAgICAgICAgICAgICAgICBpcyB0aGUgY29tYmluYXRpb24gb2YgYWxsIHN1cHBvcnRlZCBib2FyZHMgYW5kIGNvbmZpZ3VyYXRpb25zLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgdGVjaG5pcXVlIHRoZSBZb2N0byBQcm9qZWN0IHRlYW0gdXNlcyBpcyBmbGV4aWJsZSBhbmQgYWxsb3dzIGZvciBzZWFtbGVzcworICAgICAgICAgICAgICAgIGJsZW5kaW5nIG9mIGFuIGltbXV0YWJsZSBoaXN0b3J5IHdpdGggYWRkaXRpb25hbCBwYXRjaGVzIHNwZWNpZmljIHRvIGEKKyAgICAgICAgICAgICAgICBkZXBsb3ltZW50LgorICAgICAgICAgICAgICAgIEFueSBhZGRpdGlvbnMgdG8gdGhlIGtlcm5lbCBiZWNvbWUgYW4gaW50ZWdyYXRlZCBwYXJ0IG9mIHRoZSBicmFuY2hlcy48L3BhcmE+CisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYnVpbGQtc3RyYXRlZ3knPgorICAgICAgICA8dGl0bGU+QnVpbGQgU3RyYXRlZ3k8L3RpdGxlPgorCis8IS0tCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGVtcGhhc2lzPkFSIC0gRGFycmVuIEhhcnQ6PC9lbXBoYXNpcz4gIFNvbWUgcGFydHMgb2YgdGhpcyBzZWN0aW9uCisgICAgICAgICAgICBuZWVkIHRvIGJlIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWFuLWl0ZXJhdGl2ZS1kZXZlbG9wbWVudC1wcm9jZXNzJz5Vc2luZyBhbiBJdGVyYXRpdmUgRGV2ZWxvcG1lbnQgUHJvY2VzczwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgRGFycmVuIG5lZWRzIHRvIGZpZ3VyZSBvdXQgd2hpY2ggcGFydHMgYW5kIGlkZW50aWZ5IHRoZW0uCisgICAgICAgIDwvcGFyYT4KKy0tPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSBhIGxvY2FsIEdpdCByZXBvc2l0b3J5IG9mIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBleGlzdHMgb24gYSBkZXZlbG9wbWVudCBzeXN0ZW0sCisgICAgICAgICAgICB5b3UgY2FuIGNvbnNpZGVyIHRoZSBjb21waWxhdGlvbiBwaGFzZSBvZiBrZXJuZWwgZGV2ZWxvcG1lbnQgLSBidWlsZGluZyBhIGtlcm5lbCBpbWFnZS4KKyAgICAgICAgICAgIFNvbWUgcHJlcmVxdWlzaXRlcyBleGlzdCB0aGF0IGFyZSB2YWxpZGF0ZWQgYnkgdGhlIGJ1aWxkIHByb2Nlc3MgYmVmb3JlIGNvbXBpbGF0aW9uCisgICAgICAgICAgICBzdGFydHM6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4gcG9pbnRzCisgICAgICAgICAgICAgICAgdG8gdGhlIGtlcm5lbCBHaXQgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BIEJTUCBidWlsZCBicmFuY2ggZXhpc3RzLgorICAgICAgICAgICAgICAgIFRoaXMgYnJhbmNoIGhhcyB0aGUgZm9sbG93aW5nIGZvcm06CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+a2VybmVsX3R5cGU8L3JlcGxhY2VhYmxlPi88cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBtYWtlcyBzdXJlIHRoZXNlIGNvbmRpdGlvbnMgZXhpc3QgYmVmb3JlIGF0dGVtcHRpbmcgY29tcGlsYXRpb24uCisgICAgICAgICAgICBPdGhlciBtZWFucywgaG93ZXZlciwgZG8gZXhpc3QsIHN1Y2ggYXMgYXMgYm9vdHN0cmFwcGluZyBhIEJTUC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmVmb3JlIGJ1aWxkaW5nIGEga2VybmVsLCB0aGUgYnVpbGQgcHJvY2VzcyB2ZXJpZmllcyB0aGUgdHJlZQorICAgICAgICAgICAgYW5kIGNvbmZpZ3VyZXMgdGhlIGtlcm5lbCBieSBwcm9jZXNzaW5nIGFsbCBvZiB0aGUKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gImZyYWdtZW50cyIgc3BlY2lmaWVkIGJ5IGZlYXR1cmUgZGVzY3JpcHRpb25zIGluIHRoZSA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+CisgICAgICAgICAgICBmaWxlcy4KKyAgICAgICAgICAgIEFzIHRoZSBmZWF0dXJlcyBhcmUgY29tcGlsZWQsIGFzc29jaWF0ZWQga2VybmVsIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIGFyZSBub3RlZAorICAgICAgICAgICAgYW5kIHJlY29yZGVkIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS0qPC9maWxlbmFtZT4gc2VyaWVzIG9mIGRpcmVjdG9yaWVzIGluIHRoZWlyIGNvbXBpbGF0aW9uIG9yZGVyLgorICAgICAgICAgICAgVGhlIGZyYWdtZW50cyBhcmUgbWlncmF0ZWQsIHByZS1wcm9jZXNzZWQgYW5kIHBhc3NlZCB0byB0aGUgTGludXggS2VybmVsCisgICAgICAgICAgICBDb25maWd1cmF0aW9uIHN1YnN5c3RlbSAoPGZpbGVuYW1lPmxrYzwvZmlsZW5hbWU+KSBhcyByYXcgaW5wdXQgaW4gdGhlIGZvcm0KKyAgICAgICAgICAgIG9mIGEgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5sa2M8L2ZpbGVuYW1lPiB1c2VzIGl0cyBvd24gaW50ZXJuYWwgZGVwZW5kZW5jeSBjb25zdHJhaW50cyB0byBkbyB0aGUgZmluYWwKKyAgICAgICAgICAgIHByb2Nlc3Npbmcgb2YgdGhhdCBpbmZvcm1hdGlvbiBhbmQgZ2VuZXJhdGVzIHRoZSBmaW5hbCA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgIHRoYXQgaXMgdXNlZCBkdXJpbmcgY29tcGlsYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFVzaW5nIHRoZSBib2FyZCdzIGFyY2hpdGVjdHVyZSBhbmQgb3RoZXIgcmVsZXZhbnQgdmFsdWVzIGZyb20gdGhlIGJvYXJkJ3MgdGVtcGxhdGUsCisgICAgICAgICAgICBrZXJuZWwgY29tcGlsYXRpb24gaXMgc3RhcnRlZCBhbmQgYSBrZXJuZWwgaW1hZ2UgaXMgcHJvZHVjZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBvdGhlciB0aGluZyB0aGF0IHlvdSBub3RpY2Ugb25jZSB5b3UgY29uZmlndXJlIGEga2VybmVsIGlzIHRoYXQKKyAgICAgICAgICAgIHRoZSBidWlsZCBwcm9jZXNzIGdlbmVyYXRlcyBhIGJ1aWxkIHRyZWUgdGhhdCBpcyBzZXBhcmF0ZSBmcm9tIHlvdXIga2VybmVsJ3MgbG9jYWwgR2l0CisgICAgICAgICAgICBzb3VyY2UgcmVwb3NpdG9yeSB0cmVlLgorICAgICAgICAgICAgVGhpcyBidWlsZCB0cmVlIGhhcyBhIG5hbWUgdGhhdCB1c2VzIHRoZSBmb2xsb3dpbmcgZm9ybSwgd2hlcmUKKyAgICAgICAgICAgIDxmaWxlbmFtZT4ke01BQ0hJTkV9PC9maWxlbmFtZT4gaXMgdGhlIG1ldGFkYXRhIG5hbWUgb2YgdGhlIG1hY2hpbmUgKEJTUCkgYW5kICJrZXJuZWxfdHlwZSIgaXMgb25lCisgICAgICAgICAgICBvZiB0aGUgWW9jdG8gUHJvamVjdCBzdXBwb3J0ZWQga2VybmVsIHR5cGVzIChlLmcuICJzdGFuZGFyZCIpOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGxpbnV4LSR7TUFDSElORX0tPHJlcGxhY2VhYmxlPmtlcm5lbF90eXBlPC9yZXBsYWNlYWJsZT4tYnVpbGQKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZXhpc3Rpbmcgc3VwcG9ydCBpbiB0aGUgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiB0cmVlIGFjaGlldmVzIHRoaXMKKyAgICAgICAgICAgIGRlZmF1bHQgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBiZWhhdmlvciBtZWFucyB0aGF0IGFsbCB0aGUgZ2VuZXJhdGVkIGZpbGVzIGZvciBhIHBhcnRpY3VsYXIgbWFjaGluZSBvciBCU1AgYXJlIG5vdyBpbgorICAgICAgICAgICAgdGhlIGJ1aWxkIHRyZWUgZGlyZWN0b3J5LgorICAgICAgICAgICAgVGhlIGZpbGVzIGluY2x1ZGUgdGhlIGZpbmFsIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSwgYWxsIHRoZSA8ZmlsZW5hbWU+Lm88L2ZpbGVuYW1lPgorICAgICAgICAgICAgZmlsZXMsIHRoZSA8ZmlsZW5hbWU+LmE8L2ZpbGVuYW1lPiBmaWxlcywgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgU2luY2UgZWFjaCBtYWNoaW5lIG9yIEJTUCBoYXMgaXRzIG93biBzZXBhcmF0ZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgaW4gaXRzIG93biBzZXBhcmF0ZSBicmFuY2gKKyAgICAgICAgICAgIG9mIHRoZSBHaXQgcmVwb3NpdG9yeSwgeW91IGNhbiBlYXNpbHkgc3dpdGNoIGJldHdlZW4gZGlmZmVyZW50IGJ1aWxkcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvYXBwZW5kaXg+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtc3R5bGUuY3NzIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1zdHlsZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUwYzFjNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtc3R5bGUuY3NzCkBAIC0wLDAgKzEsOTg0IEBACisvKgorICAgR2VuZXJpYyBYSFRNTCAvIERvY0Jvb2sgWEhUTUwgQ1NTIFN0eWxlc2hlZXQuCisKKyAgIEJyb3dzZXIgd3JhbmdsaW5nIGFuZCB0eXBvZ3JhcGhpYyBkZXNpZ24gYnkKKyAgICAgIE95dmluZCBLb2xhcyAvIHBpcHBpbkBnaW1wLm9yZworCisgICBDdXN0b21pc2VkIGZvciBQb2t5IGJ5CisgICAgICBNYXR0aGV3IEFsbHVtIC8gbWFsbHVtQG8taGFuZC5jb20KKworICAgVGhhbmtzIHRvOgorICAgICBMaWFtIFIuIEUuIFF1aW4KKyAgICAgV2lsbGlhbSBTa2FnZ3MKKyAgICAgSmFrdWIgU3RlaW5lcgorCisgICBTdHJ1Y3R1cmUKKyAgIC0tLS0tLS0tLQorCisgICBUaGUgc3R5bGVzaGVldCBpcyBkaXZpZGVkIGludG8gdGhlIGZvbGxvd2luZyBzZWN0aW9uczoKKworICAgICAgIFBvc2l0aW9uaW5nCisgICAgICAgICAgTWFyZ2lucywgcGFkZGluZ3MsIHdpZHRoLCBmb250LXNpemUsIGNsZWFyaW5nLgorICAgICAgIERlY29yYXRpb25zCisgICAgICAgICAgQm9yZGVycywgc3R5bGUKKyAgICAgICBDb2xvcnMKKyAgICAgICAgICBDb2xvcnMKKyAgICAgICBHcmFwaGljcworICAgICAgICAgIEdyYXBoaWNhbCBiYWNrZ3JvdW5kcworICAgICAgIE5hc3R5IElFIHR3ZWFrcworICAgICAgICAgIFdvcmthcm91bmRzIG5lZWRlZCB0byBtYWtlIGl0IHdvcmsgaW4gaW50ZXJuZXQgZXhwbG9yZXIsCisgICAgICAgICAgY3VycmVudGx5IG1ha2VzIHRoZSBzdHlsZXNoZWV0IG5vbiB2YWxpZGF0aW5nLCBidXQgdXAgdW50aWwKKyAgICAgICAgICB0aGlzIHBvaW50IGl0IGlzIHZhbGlkYXRpbmcuCisgICAgICAgTW96aWxsYSBleHRlbnNpb25zCisgICAgICAgICAgVHJhbnNwYXJlbmN5IGZvciBmb290ZXIKKwkgIFJvdW5kZWQgY29ybmVycyBvbiBib3hlcworCisqLworCisKKyAgLyoqKioqKioqKioqKioqKiAvCisgLyAgUG9zaXRpb25pbmcgICAvCisvICoqKioqKioqKioqKioqKi8KKworYm9keSB7CisgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBTYW5zLCBzYW5zLXNlcmlmOworCisgIG1pbi13aWR0aDogNjQwcHg7CisgIHdpZHRoOiA4MCU7CisgIG1hcmdpbjogIDBlbSBhdXRvOworICBwYWRkaW5nOiAyZW0gNWVtIDVlbSA1ZW07CisgIGNvbG9yOiAjMzMzOworfQorCitoMSxoMixoMyxoNCxoNSxoNixoNyB7CisgIGZvbnQtZmFtaWx5OiBBcmlhbCwgU2FuczsKKyAgY29sb3I6ICMwMDU1N0Q7CisgIGNsZWFyOiBib3RoOworfQorCitoMSB7CisgIGZvbnQtc2l6ZTogMmVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMmVtIDBlbSAwZW0gMGVtOworfQorCitoMi5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMC4xMGVtIDBlbSAzLjBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjhlbTsKKyAgcGFkZGluZy1sZWZ0OiAyMCU7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworaDIgeworICBtYXJnaW46IDJlbSAwZW0gMC42NmVtIDBlbTsKKyAgcGFkZGluZzogMC41ZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS41ZW07CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMy5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQyLjE0JTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK2gzIHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0MCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNCB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDUgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g2IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLmF1dGhvcmdyb3VwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIHBhZGRpbmctdG9wOiAyNTZweDsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL2tlcm5lbC1kZXYtdGl0bGUucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgdG9wOworICBtYXJnaW4tdG9wOiAtMjU2cHg7CisgIHBhZGRpbmctcmlnaHQ6IDUwcHg7CisgIG1hcmdpbi1sZWZ0OiAwcHg7CisgIHRleHQtYWxpZ246IHJpZ2h0OworICB3aWR0aDogNzQwcHg7Cit9CisKK2gzLmF1dGhvciB7CisgIG1hcmdpbjogMGVtIDBtZSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc2l6ZTogMTAwJTsKKyAgY29sb3I6ICMzMzM7CisgIGNsZWFyOiBib3RoOworfQorCisuYXV0aG9yIHR0LmVtYWlsIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKKy50aXRsZXBhZ2UgaHIgeworICB3aWR0aDogMGVtOworICBjbGVhcjogYm90aDsKK30KKworLnJldmhpc3RvcnkgeworICBwYWRkaW5nLXRvcDogMmVtOworICBjbGVhcjogYm90aDsKK30KKworLnRvYywKKy5saXN0LW9mLXRhYmxlcywKKy5saXN0LW9mLWV4YW1wbGVzLAorLmxpc3Qtb2YtZmlndXJlcyB7CisgIHBhZGRpbmc6IDEuMzNlbSAwZW0gMi41ZW0gMGVtOworICBjb2xvcjogIzAwNTU3RDsKK30KKworLnRvYyBwLAorLmxpc3Qtb2YtdGFibGVzIHAsCisubGlzdC1vZi1maWd1cmVzIHAsCisubGlzdC1vZi1leGFtcGxlcyBwIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDAuM2VtOworICBtYXJnaW46IDEuNWVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIHAgYiwKKy5saXN0LW9mLXRhYmxlcyBwIGIsCisubGlzdC1vZi1maWd1cmVzIHAgYiwKKy5saXN0LW9mLWV4YW1wbGVzIHAgYnsKKyAgZm9udC1zaXplOiAxMDAuMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisudG9jIGRsLAorLmxpc3Qtb2YtdGFibGVzIGRsLAorLmxpc3Qtb2YtZmlndXJlcyBkbCwKKy5saXN0LW9mLWV4YW1wbGVzIGRsIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGR0IHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkZCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMi42ZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworZGl2Lmdsb3NzYXJ5IGRsLAorZGl2LnZhcmlhYmxlbGlzdCBkbCB7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHdpZHRoOiAyMGVtOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworLnZhcmlhYmxlbGlzdCBkbCBkdCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworfQorCisuZ2xvc3NhcnkgZGwgZGQsCisudmFyaWFibGVsaXN0IGRsIGRkIHsKKyAgbWFyZ2luLXRvcDogLTFlbTsKKyAgbWFyZ2luLWxlZnQ6IDI1LjVlbTsKK30KKworLmdsb3NzYXJ5IGRkIHAsCisudmFyaWFibGVsaXN0IGRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCitkaXYgcC5jb3B5cmlnaHQgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCitkaXYubGVnYWxub3RpY2UgcC5sZWdhbG5vdGljZS10aXRsZSB7CisgIG1hcmdpbi1ib3R0b206IDBlbTsKK30KKworcCB7CisgIGxpbmUtaGVpZ2h0OiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworCit9CisKK2RsIHsKKyAgcGFkZGluZy10b3A6IDBlbTsKK30KKworaHIgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworCisubWVkaWFvYmplY3QsCisubWVkaWFvYmplY3RjbyB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworaW1nIHsKKyAgYm9yZGVyOiBub25lOworfQorCit1bCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDEuNWVtOworfQorCit1bCBsaSB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKwordWwgbGkgcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK3RhYmxlIHsKKyAgd2lkdGggOjEwMCU7Cit9CisKK3RoIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBmb250LXdlaWdodDogbm9ybWFsOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCit0ZCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKworcCBhW2lkXSB7CisgIG1hcmdpbjogMHB4OworICBwYWRkaW5nOiAwcHg7CisgIGRpc3BsYXk6IGlubGluZTsKKyAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKK30KKworYSB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBjb2xvcjogIzQ0NDsKK30KKworcHJlIHsKKyAgICBvdmVyZmxvdzogYXV0bzsKK30KKworYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICAvKmZvbnQtd2VpZ2h0OiBib2xkOyovCit9CisKKy8qIFRoaXMgc3R5bGUgZGVmaW5lcyBob3cgdGhlIHBlcm1hbGluayBjaGFyYWN0ZXIKKyAgIGFwcGVhcnMgYnkgaXRzZWxmIGFuZCB3aGVuIGhvdmVyZWQgb3ZlciB3aXRoCisgICB0aGUgbW91c2UuICovCisKK1thbHQ9J1Blcm1hbGluayddIHsgY29sb3I6ICNlZWU7IH0KK1thbHQ9J1Blcm1hbGluayddOmhvdmVyIHsgY29sb3I6IGJsYWNrOyB9CisKKworZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlIHsKKyAgbWFyZ2luOiAxZW0gMGVtOworICBwYWRkaW5nOiAxZW07CisgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsKK30KKworCitkaXYuaW5mb3JtYWxmaWd1cmUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWx0YWJsZSBwLnRpdGxlIGIsCitkaXYuZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5leGFtcGxlIHAudGl0bGUgYiwKK2Rpdi50YWJsZSBwLnRpdGxlIGJ7CisgICAgcGFkZGluZy10b3A6IDBlbTsKKyAgICBtYXJnaW4tdG9wOiAwZW07CisgICAgZm9udC1zaXplOiAxMDAlOworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9CisKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiwKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiBwICB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmctdG9wOiAwLjVlbTsKKyAgcGFkZGluZy1ib3R0b206IDAuNWVtOworfQorCisuZXBpZ3JhcGggeworICBwYWRkaW5nLWxlZnQ6IDU1JTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisuZXBpZ3JhcGggcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5lcGlncmFwaCAucXVvdGUgeworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisuZXBpZ3JhcGggLmF0dHJpYnV0aW9uIHsKKyAgZm9udC1zdHlsZTogbm9ybWFsOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworc3Bhbi5hcHBsaWNhdGlvbiB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLnByb2dyYW1saXN0aW5nIHsKKyAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgZm9udC1zaXplOiA4MCU7CisgIHdoaXRlLXNwYWNlOiBwcmU7CisgIG1hcmdpbjogMS4zM2VtIDBlbTsKKyAgcGFkZGluZzogMS4zM2VtOworfQorCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgbWFyZ2luLXRvcDogMWVtOworICBtYXJnaW4tYm90dG9tOiAxZW07CisKK30KKworLyogZm9yY2UgZnVsbCB3aWR0aCBvZiB0YWJsZSB3aXRoaW4gZGl2ICovCisudGlwIHRhYmxlLAorLndhcm5pbmcgdGFibGUsCisuY2F1dGlvbiB0YWJsZSwKKy5ub3RlIHRhYmxlIHsKKyAgYm9yZGVyOiBub25lOworICB3aWR0aDogMTAwJTsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgcGFkZGluZzogMC44ZW0gMC4wZW0gMC4wZW0gMC4wZW07CisgIG1hcmdpbiA6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRpcCBwLAorLndhcm5pbmcgcCwKKy5jYXV0aW9uIHAsCisubm90ZSBwIHsKKyAgbWFyZ2luLXRvcDogMC41ZW07CisgIG1hcmdpbi1ib3R0b206IDAuNWVtOworICBwYWRkaW5nLXJpZ2h0OiAxZW07CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5hY3JvbnltIHsKKyAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgcGFkZGluZzogMC4wOWVtIDAuM2VtOworICBtYXJnaW46IDBlbTsKK30KKworLml0ZW1pemVkbGlzdCBsaSB7CisgIGNsZWFyOiBub25lOworfQorCisuZmlsZW5hbWUgeworICBmb250LXNpemU6IG1lZGl1bTsKKyAgZm9udC1mYW1pbHk6IENvdXJpZXIsIG1vbm9zcGFjZTsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgcG9zaXRpb246IGFic29sdXRlOworICBsZWZ0OiAwZW07CisgIHRvcDogMGVtOworICB3aWR0aDogMTAwJTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2NkZjsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBwb3NpdGlvbjogZml4ZWQ7CisgIGxlZnQ6IDBlbTsKKyAgYm90dG9tOiAwZW07CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIHdpZHRoOiAxMDAlOworfQorCisKK2Rpdi5uYXZoZWFkZXIgdGQsCitkaXYubmF2Zm9vdGVyIHRkIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGggeworICAvKmZvbnQtZmFtaWx5OiBHZW9yZ2lhLCBUaW1lcywgc2VyaWY7Ki8KKyAgLypmb250LXNpemU6IHgtbGFyZ2U7Ki8KKyAgZm9udC1zaXplOiA4MCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLXRvcDogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItYm90dG9tOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGEsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGEgeworICBjb2xvcjogIzc3NzsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCisvKiBub3JtYWwgdGV4dCBpbiB0aGUgZm9vdGVyICovCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIHsKKyAgY29sb3I6IGJsYWNrOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6dmlzaXRlZCwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTp2aXNpdGVkIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKKworLyogbGlua3MgaW4gaGVhZGVyIGFuZCBmb290ZXIgKi8KK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTpob3ZlciwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgY29sb3I6ICMzM2E7Cit9CisKK2Rpdi5uYXZoZWFkZXIgaHIsCitkaXYubmF2Zm9vdGVyIGhyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCisucWFuZGFzZXQgdHIucXVlc3Rpb24gdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy5xYW5kYXNldCB0ci5hbnN3ZXIgdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisuYW5zd2VyIHRkIHsKKyAgcGFkZGluZy1ib3R0b206IDEuNWVtOworfQorCisuZW1waGFzaXMgeworICBmb250LXdlaWdodDogYm9sZDsKK30KKworCisgIC8qKioqKioqKioqKioqIC8KKyAvIGRlY29yYXRpb25zICAvCisvICoqKioqKioqKioqKiovCisKKy50aXRsZXBhZ2UgeworfQorCisucGFydCAudGl0bGUgeworfQorCisuc3VidGl0bGUgeworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyoKK2gxIHsKKyAgYm9yZGVyOiBub25lOworfQorCitoMiB7CisgIGJvcmRlci10b3A6IHNvbGlkIDAuMmVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2gzIHsKKyAgYm9yZGVyLXRvcDogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g0IHsKKyAgYm9yZGVyOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDUgeworICBib3JkZXI6IDBlbTsKK30KKyovCisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworLnF1ZXN0aW9uIHRkIHsKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOworfQorCisuYW5zd2VyIHsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBib3JkZXItdG9wOiAxcHggc29saWQ7Cit9CisKKyAgLyoqKioqKioqKiAvCisgLyAgY29sb3JzICAvCisvICoqKioqKioqKi8KKworYm9keSB7CisgIGNvbG9yOiAjMzMzOworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKworYSB7CisgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OworfQorCithOmhvdmVyIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2RlZGVkZTsKK30KKworCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoNywKK2g4IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Cit9CisKK2hyIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCisKKy50aXAsIC53YXJuaW5nLCAuY2F1dGlvbiwgLm5vdGUgeworICBib3JkZXItY29sb3I6ICNmZmY7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7Cit9CisKKworLndhcm5pbmcgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy50aXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisubm90ZSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGNvbG9yOiAjMDQ0OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKK3ByZS5wcm9ncmFtbGlzdGluZyB7CisgIGNvbG9yOiBibGFjazsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworICBib3JkZXItd2lkdGg6IDJweDsKK30KKworLmd1aW1lbnUsCisuZ3VpbGFiZWwsCisuZ3VpbWVudWl0ZW0geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIGJvcmRlci1jb2xvcjogIzk5OTsKK30KKworCitkaXYubmF2aGVhZGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCitkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCisgIC8qKioqKioqKioqKiAvCisgLyAgZ3JhcGhpY3MgIC8KKy8gKioqKioqKioqKiovCisKKy8qCitib2R5IHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvYm9keV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLm5hdmhlYWRlciwKKy5ub3RlLAorLnRpcCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL25vdGVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy53YXJuaW5nLAorLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy93YXJuaW5nX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisuZmlndXJlLAorLmluZm9ybWFsZmlndXJlLAorLmV4YW1wbGUsCisuaW5mb3JtYWxleGFtcGxlLAorLnRhYmxlLAorLmluZm9ybWFsdGFibGUgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9maWd1cmVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKyovCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoN3sKK30KKworLyoKK0V4YW1wbGUgb2YgaG93IHRvIHN0aWNrIGFuIGltYWdlIGFzIHBhcnQgb2YgdGhlIHRpdGxlLgorCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvd2hpdGUtb24tYmxhY2sucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworfQorKi8KKworZGl2LnByZWZhY2UgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuY29sb3Bob24gLnRpdGxlLAorZGl2LmNoYXB0ZXIgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworfQorCitkaXYuc2VjdGlvbiBkaXYuc2VjdGlvbiAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5zZWN0MiAudGl0bGVwYWdlIC50aXRsZSB7CisgICAgYmFja2dyb3VuZDogbm9uZTsKK30KKworCitoMS50aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBoZWlnaHQ6IDI1NnB4OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworfQorCitoMi5zdWJ0aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworICB3aWR0aDogMHB4OworICBkaXNwbGF5OiBub25lOworfQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gIHBpcHBpbi5naW1wLm9yZyBzcGVjaWZpYyBhbHRlcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIGNvbG9yOiAjNzc3OworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZzogMDsKKyAgbWFyZ2luOiAwOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMHB4OworICBsZWZ0OiAwcHg7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDUwcHg7CisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9oZWFkaW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7CisgIGJvcmRlcjogbm9uZTsKK30KKworZGl2LmhlYWRpbmcgYSB7CisgIGNvbG9yOiAjNDQ0OworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlcjogbm9uZTsKKyAgY29sb3I6ICNkZGQ7CisgIGZvbnQtc2l6ZTogODAlOworICB0ZXh0LWFsaWduOnJpZ2h0OworCisgIHdpZHRoOiAxMDAlOworICBwYWRkaW5nLXRvcDogMTBweDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBib3R0b206IDBweDsKKyAgbGVmdDogMHB4OworCisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9mb290aW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworfQorKi8KKworCisKKyAgLyoqKioqKioqKioqKioqKioqKiAvCisgLyAgbmFzdHkgaWUgdHdlYWtzICAvCisvICoqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7CisgIG1hcmdpbi1sZWZ0OmV4cHJlc3Npb24oIi01ZW0iKTsKK30KK2JvZHkgeworICBwYWRkaW5nOmV4cHJlc3Npb24oIjRlbSA1ZW0gMGVtIDVlbSIpOworfQorKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyBtb3ppbGxhIHZlbmRvciBzcGVjaWZpYyBjc3MgZXh0ZW5zaW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICAtbW96LW9wYWNpdHk6IDAuOGVtOworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUsCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjVlbTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjNlbTsKK30KKyovCisKK3RhYmxlIHRyIHRkIHRhYmxlIHRyIHRkIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCitociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKK3RhYmxlIHsKKyAgYm9yZGVyOiAwZW07Cit9CisKKyAucGhvdG8geworICBmbG9hdDogcmlnaHQ7CisgIG1hcmdpbi1sZWZ0OiAgIDEuNWVtOworICBtYXJnaW4tYm90dG9tOiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXgtd2lkdGg6ICAgICAgMTdlbTsKKyAgYm9yZGVyOiAgICAgMXB4IHNvbGlkIGdyYXk7CisgIHBhZGRpbmc6ICAgIDNweDsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisgLnNlcGVyYXRvciB7CisgICBwYWRkaW5nLXRvcDogMmVtOworICAgY2xlYXI6IGJvdGg7CisgIH0KKworICAjdmFsaWRhdG9ycyB7CisgICAgICBtYXJnaW4tdG9wOiA1ZW07CisgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgIGNvbG9yOiAjNzc3OworICB9CisgIEBtZWRpYSBwcmludCB7CisgICAgICBib2R5IHsKKyAgICAgICAgICBmb250LXNpemU6IDhwdDsKKyAgICAgIH0KKyAgICAgIC5ub3ByaW50IHsKKyAgICAgICAgICBkaXNwbGF5OiBub25lOworICAgICAgfQorICB9CisKKworLnRpcCwKKy5ub3RlIHsKKyAgIGJhY2tncm91bmQ6ICNmMGYwZjI7CisgICBjb2xvcjogIzMzMzsKKyAgIHBhZGRpbmc6IDIwcHg7CisgICBtYXJnaW46IDIwcHg7Cit9CisKKy50aXAgaDMsCisubm90ZSBoMyB7CisgICBwYWRkaW5nOiAwZW07CisgICBtYXJnaW46IDBlbTsKKyAgIGZvbnQtc2l6ZTogMmVtOworICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICBjb2xvcjogIzMzMzsKK30KKworLnRpcCBhLAorLm5vdGUgYSB7CisgICBjb2xvcjogIzMzMzsKKyAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisuZm9vdG5vdGUgeworICAgZm9udC1zaXplOiBzbWFsbDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisvKiBDaGFuZ2VzIHRoZSBhbm5vdW5jZW1lbnQgdGV4dCAqLworLnRpcCBoMywKKy53YXJuaW5nIGgzLAorLmNhdXRpb24gaDMsCisubm90ZSBoMyB7CisgICBmb250LXNpemU6bGFyZ2U7CisgICBjb2xvcjogIzAwNTU3RDsKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNkZjJjYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYueG1sCkBAIC0wLDAgKzEsMTE1IEBACis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Ym9vayBpZD0na2VybmVsLWRldicgbGFuZz0nZW4nCisgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIKKyAgICAgIHhtbG5zPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayIKKyAgICAgID4KKyAgICA8Ym9va2luZm8+CisKKyAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0nZmlndXJlcy9rZXJuZWwtZGV2LXRpdGxlLnBuZycKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSdTVkcnCisgICAgICAgICAgICAgICAgICAgIGFsaWduPSdsZWZ0JyBzY2FsZWZpdD0nMScgd2lkdGg9JzEwMCUnLz4KKyAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+CisgICAgICAgIDwvbWVkaWFvYmplY3Q+CisKKyAgICAgICAgPHRpdGxlPgorCQkgIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbAorCQk8L3RpdGxlPgorCisgICAgICAgIDxhdXRob3Jncm91cD4KKyAgICAgICAgICAgIDxhdXRob3I+CisgICAgICAgICAgICAgICAgPGZpcnN0bmFtZT5EYXJyZW48L2ZpcnN0bmFtZT4gPHN1cm5hbWU+SGFydDwvc3VybmFtZT4KKyAgICAgICAgICAgICAgICA8YWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxvcmduYW1lPkludGVsIENvcnBvcmF0aW9uPC9vcmduYW1lPgorICAgICAgICAgICAgICAgIDwvYWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgPGVtYWlsPmRhcnJlbi5oYXJ0QGludGVsLmNvbTwvZW1haWw+CisgICAgICAgICAgICA8L2F1dGhvcj4KKyAgICAgICAgPC9hdXRob3Jncm91cD4KKworICAgICAgICA8cmV2aGlzdG9yeT4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTM8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxMzwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS41IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS41LjE8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5KYW51YXJ5IDIwMTQ8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNS4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS42PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxNDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS42IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS43PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDE0PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjcgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjg8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE1PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjggUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjk8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTU8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuOSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgPC9yZXZoaXN0b3J5PgorCisgICAgPGNvcHlyaWdodD4KKyAgICAgIDx5ZWFyPiZDT1BZUklHSFRfWUVBUjs8L3llYXI+CisgICAgICA8aG9sZGVyPkxpbnV4IEZvdW5kYXRpb248L2hvbGRlcj4KKyAgICA8L2NvcHlyaWdodD4KKworICAgIDxsZWdhbG5vdGljZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQgdW5kZXIKKyAgICAgICAgdGhlIHRlcm1zIG9mIHRoZSA8dWxpbmsgdHlwZT0iaHR0cCIgdXJsPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8yLjAvdWsvIj5DcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlIEFsaWtlIDIuMCBVSzogRW5nbGFuZCAmYW1wOyBXYWxlczwvdWxpbms+IGFzIHB1Ymxpc2hlZCBieSBDcmVhdGl2ZSBDb21tb25zLgorICAgICAgPC9wYXJhPgorICAgICAgPG5vdGU+CisgICAgICAgICAgRm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1hbnVhbCBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSwgc2VlIHRoZQorICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyc+WW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQgTWFudWFsPC91bGluaz4KKyAgICAgICAgICBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IHdlYnNpdGUuCisgICAgICA8L25vdGU+CisgICAgPC9sZWdhbG5vdGljZT4KKworICAgIDwvYm9va2luZm8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJrZXJuZWwtZGV2LWludHJvLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0ia2VybmVsLWRldi1jb21tb24ueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJrZXJuZWwtZGV2LWFkdmFuY2VkLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0ia2VybmVsLWRldi1jb25jZXB0cy1hcHB4LnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0ia2VybmVsLWRldi1tYWludC1hcHB4LnhtbCIvPgorCis8IS0tCisgICAgPHhpOmluY2x1ZGUgaHJlZj0ia2VybmVsLWRldi1leGFtcGxlcy54bWwiLz4KKy0tPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0ia2VybmVsLWRldi1mYXEueG1sIi8+CisKKzwhLS0gICAgPGluZGV4IGlkPSdpbmRleCc+CisgICAgICA8dGl0bGU+SW5kZXg8L3RpdGxlPgorICAgIDwvaW5kZXg+CistLT4KKworPC9ib29rPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9hZHQtdGl0bGUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYWR0LXRpdGxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTcxZTQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYWR0LXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9hbmFseXNpcy1mb3ItcGFja2FnZS1zcGxpdHRpbmcucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYW5hbHlzaXMtZm9yLXBhY2thZ2Utc3BsaXR0aW5nLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGYyNzk0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYW5hbHlzaXMtZm9yLXBhY2thZ2Utc3BsaXR0aW5nLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9hcHAtZGV2LWZsb3cucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYXBwLWRldi1mbG93LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTI3YjkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYXBwLWRldi1mbG93LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9ic3AtZGV2LWZsb3cucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDBiMGFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9ic3AtdGl0bGUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnNwLXRpdGxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjI0ZGQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnNwLXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9idWlsZC13b3Jrc3BhY2UtZGlyZWN0b3J5LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2J1aWxkLXdvcmtzcGFjZS1kaXJlY3RvcnkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NjFmOGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9idWlsZC13b3Jrc3BhY2UtZGlyZWN0b3J5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9idWlsZGhpc3Rvcnktd2ViLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2J1aWxkaGlzdG9yeS13ZWIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZGI4NmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9idWlsZGhpc3Rvcnktd2ViLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9idWlsZGhpc3RvcnkucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnVpbGRoaXN0b3J5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDVmOGE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnVpbGRoaXN0b3J5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9idWlsZGluZy1hbi1pbWFnZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9idWlsZGluZy1hbi1pbWFnZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWZiZWE1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2J1aWxkaW5nLWFuLWltYWdlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9jb25maWd1cmF0aW9uLWNvbXBpbGUtYXV0b3JlY29uZi5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9jb25maWd1cmF0aW9uLWNvbXBpbGUtYXV0b3JlY29uZi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA3NDY0ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2NvbmZpZ3VyYXRpb24tY29tcGlsZS1hdXRvcmVjb25mLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9jcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW5zLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbnMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNjY3MGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9jcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW5zLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQyMjcxOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9kZXYtdGl0bGUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvZGV2LXRpdGxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2NhYzRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvZGV2LXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9naXQtd29ya2Zsb3cucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvZ2l0LXdvcmtmbG93LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDAxMzMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvZ2l0LXdvcmtmbG93LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9ob3N0ZWQtc2VydmljZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9ob3N0ZWQtc2VydmljZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFmZWE3YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2hvc3RlZC1zZXJ2aWNlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9pbWFnZS1nZW5lcmF0aW9uLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2ltYWdlLWdlbmVyYXRpb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiOTYyNTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9pbWFnZS1nZW5lcmF0aW9uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9pbWFnZXMucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvaW1hZ2VzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTllYWMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvaW1hZ2VzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9pbmRleC1kb3dubG9hZHMucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvaW5kZXgtZG93bmxvYWRzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTA3OTk3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvaW5kZXgtZG93bmxvYWRzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWwtYXJjaGl0ZWN0dXJlLW92ZXJ2aWV3LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbC1hcmNoaXRlY3R1cmUtb3ZlcnZpZXcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJhYWQxNzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWwtYXJjaGl0ZWN0dXJlLW92ZXJ2aWV3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWwtZGV2LWZsb3cucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWRldi1mbG93LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDkxMDVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWRldi1mbG93LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWwtZGV2LXRpdGxlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbC1kZXYtdGl0bGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhOGRkNTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWwtZGV2LXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE2YzBiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbC1vdmVydmlldy0xLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMi1nZW5lcmljLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbC1vdmVydmlldy0yLWdlbmVyaWMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOTcwZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMi1nZW5lcmljLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWwtdGl0bGUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLXRpdGxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWQ4NmMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1hbGwucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstYWxsLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWI0MGJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstYWxsLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1jaG9vc2UtZXZlbnRzLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLWNob29zZS1ldmVudHMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZGQ2MmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1jaG9vc2UtZXZlbnRzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1pOTE1LWRpc3BsYXkucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstaTkxNS1kaXNwbGF5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjBlZGZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstaTkxNS1kaXNwbGF5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1vdXRwdXQtZGlzcGxheS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1vdXRwdXQtZGlzcGxheS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUyZDBlNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLW91dHB1dC1kaXNwbGF5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9sYXllci1pbnB1dC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9sYXllci1pbnB1dC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE0ZjJlNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2xheWVyLWlucHV0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9sdHRuZ21haW4wLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2x0dG5nbWFpbjAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNjAxMTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9sdHRuZ21haW4wLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9tZWdhLXRpdGxlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL21lZ2EtdGl0bGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZTBiODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9tZWdhLXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9vcHJvZmlsZXVpLWJ1c3lib3gucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1idXN5Ym94LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODI3NWM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1idXN5Ym94LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9vcHJvZmlsZXVpLWNvcHktdG8tdXNlci5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9vcHJvZmlsZXVpLWNvcHktdG8tdXNlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGViNjQ3MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktY29weS10by11c2VyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9vcHJvZmlsZXVpLWRvd25sb2FkaW5nLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktZG93bmxvYWRpbmcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NzQyZDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9vcHJvZmlsZXVpLWRvd25sb2FkaW5nLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9vcHJvZmlsZXVpLXByb2Nlc3Nlcy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9vcHJvZmlsZXVpLXByb2Nlc3Nlcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU1NDcwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktcHJvY2Vzc2VzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wYWNrYWdlLWZlZWRzLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BhY2thZ2UtZmVlZHMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YzljMzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wYWNrYWdlLWZlZWRzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wYXRjaGluZy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wYXRjaGluZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVjZDAxOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BhdGNoaW5nLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXByb2JlLWRvX2ZvcmstcHJvZmlsZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXByb2JlLWRvX2ZvcmstcHJvZmlsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWExMDcwZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtcHJvYmUtZG9fZm9yay1wcm9maWxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXJlcG9ydC1jeWNsZXMtdS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXJlcG9ydC1jeWNsZXMtdS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhlYzZhZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtcmVwb3J0LWN5Y2xlcy11LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXN5c3RlbXdpZGUtbGliYy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXN5c3RlbXdpZGUtbGliYy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI3Mjg2OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtc3lzdGVtd2lkZS1saWJjLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXN5c3RlbXdpZGUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi1zeXN0ZW13aWRlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmNlMjQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi1zeXN0ZW13aWRlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS1tZW51LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLW1lbnUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYjM0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS1tZW51LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS11ZGhjcGMucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtYW5ub3RhdGUtdWRoY3BjLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTgxZTlkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtYW5ub3RhdGUtdWRoY3BjLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kZWJ1Z2luZm8ucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZGVidWdpbmZvLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzE3YjQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZGVidWdpbmZvLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kc28tem9vbS1tZW51LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLW1lbnUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MTNjODYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kc28tem9vbS1tZW51LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kc28tem9vbS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kc28tem9vbS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE5NjJjNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1leHBhbmRlZC1zdHJpcHBlZC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1leHBhbmRlZC1zdHJpcHBlZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY0MmQwNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWV4cGFuZGVkLXN0cmlwcGVkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZmxhdC1zdHJpcHBlZC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZmxhdC1zdHJpcHBlZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhmMzk1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1mbGF0LXN0cmlwcGVkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LWZyb20tdXNlci1leHBhbmRlZC1zdHJpcHBlZC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LWZyb20tdXNlci1leHBhbmRlZC1zdHJpcHBlZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI3Yzc2NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktZnJvbS11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtZGVidWdpbmZvLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1kZWJ1Z2luZm8ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3OTlhZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtZGVidWdpbmZvLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQtdW5yZXNvbHZlZC1oaWRkZW4ucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS10by11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLXVucmVzb2x2ZWQtaGlkZGVuLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTE4MDhhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS10by11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLXVucmVzb2x2ZWQtaGlkZGVuLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS10by11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTIzMDJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS10by11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wb2t5LXRpdGxlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3Bva3ktdGl0bGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4OTNkODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wb2t5LXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wcm9maWxlLXRpdGxlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3Byb2ZpbGUtdGl0bGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNWM2ODIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wcm9maWxlLXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9weWJvb3RjaGFydGd1aS1saW51eC15b2N0by5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9weWJvb3RjaGFydGd1aS1saW51eC15b2N0by5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI2YmZkYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3B5Ym9vdGNoYXJ0Z3VpLWxpbnV4LXlvY3RvLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9weWNoYXJ0LWxpbnV4LXlvY3RvLXJwbS1ub3N0cmlwLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLW5vc3RyaXAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NDY3NWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9weWNoYXJ0LWxpbnV4LXlvY3RvLXJwbS1ub3N0cmlwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9weWNoYXJ0LWxpbnV4LXlvY3RvLXJwbS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9weWNoYXJ0LWxpbnV4LXlvY3RvLXJwbS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlMzUzNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9yZWNpcGUtd29ya2Zsb3cucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcmVjaXBlLXdvcmtmbG93LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGU5NjBiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcmVjaXBlLXdvcmtmbG93LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zY2hlZC13YWtldXAtcHJvZmlsZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zY2hlZC13YWtldXAtcHJvZmlsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYyNTgxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3NjaGVkLXdha2V1cC1wcm9maWxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zZGstZ2VuZXJhdGlvbi5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zZGstZ2VuZXJhdGlvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM3ZTI3NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3Nkay1nZW5lcmF0aW9uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zZGsucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc2RrLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTM5Y2M1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc2RrLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zaW1wbGUtY29uZmlndXJhdGlvbi5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zaW1wbGUtY29uZmlndXJhdGlvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThmY2UyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3NpbXBsZS1jb25maWd1cmF0aW9uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zb3VyY2UtZmV0Y2hpbmcucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc291cmNlLWZldGNoaW5nLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmFlZmI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc291cmNlLWZldGNoaW5nLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zb3VyY2UtaW5wdXQucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc291cmNlLWlucHV0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzUxNTA1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc291cmNlLWlucHV0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zb3VyY2UtcmVwb3MucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWM1ZjI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zeXNwcm9mLWNhbGxlcnMucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc3lzcHJvZi1jYWxsZXJzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDBjOGQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc3lzcHJvZi1jYWxsZXJzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zeXNwcm9mLWNvcHktZnJvbS11c2VyLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY29weS1mcm9tLXVzZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMzE0MjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zeXNwcm9mLWNvcHktZnJvbS11c2VyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zeXNwcm9mLWNvcHktdG8tdXNlci5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zeXNwcm9mLWNvcHktdG8tdXNlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E1YmFiNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY29weS10by11c2VyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy90b2FzdGVyLXRpdGxlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3RvYXN0ZXItdGl0bGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZWEzOWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy90b2FzdGVyLXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy91c2VyLWNvbmZpZ3VyYXRpb24ucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvdXNlci1jb25maWd1cmF0aW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmIzZjhlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvdXNlci1jb25maWd1cmF0aW9uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy91c2luZy1hLXByZS1idWlsdC1pbWFnZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy91c2luZy1hLXByZS1idWlsdC1pbWFnZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAzMTMwZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3VzaW5nLWEtcHJlLWJ1aWx0LWltYWdlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC1yZWYucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMveW9jdG8tZW52aXJvbm1lbnQtcmVmLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTBjNmM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMveW9jdG8tZW52aXJvbm1lbnQtcmVmLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJiN2E1NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy95b2N0by1wcm9qZWN0LXRyYW5zcC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy95b2N0by1wcm9qZWN0LXRyYW5zcC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzFkMmIxNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3lvY3RvLXByb2plY3QtdHJhbnNwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy95cC1kb3dubG9hZC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy95cC1kb3dubG9hZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3MGJlNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3lwLWRvd25sb2FkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvbWVnYS1tYW51YWwtY3VzdG9taXphdGlvbi54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvbWVnYS1tYW51YWwtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUyYjViMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9tZWdhLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDQyIEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiIHZlcnNpb249IjEuMCI+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9kb2Nib29rLW1pcnJvci9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKzwhLS0KKworICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUudG9jIj4KKyAgIGFwcGVuZGl4ICB0b2MKKyAgIGNoYXB0ZXIgICB0b2MKKyAgIGFydGljbGUgICBub3AKKyAgIGJvb2sgICAgICBub3AKKyAgIHBhcnQgICAgICBub3AKKyAgIHByZWZhY2UgICBub3AKKyAgIHFhbmRhZGl2ICBub3AKKyAgIHFhbmRhc2V0ICBub3AKKyAgIHJlZmVyZW5jZSBub3AKKyAgIHNlY3Rpb24gICBub3AKKyAgIHNldCAgICAgICBub3AKKyAgPC94c2w6cGFyYW0+CisKKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL3Blcm1hbGlua3MueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9zZWN0aW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvY29tcG9uZW50LnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZGl2aXNpb24udGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9mb3JtYWwub2JqZWN0LmhlYWRpbmcueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9nbG9zcy1wZXJtYWxpbmtzLnhzbCIvPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9IidtZWdhLXN0eWxlLmNzcyciIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2hhcHRlci5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJhcHBlbmRpeC5hdXRvbGFiZWwiPkE8L3hzbDpwYXJhbT4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24ubGFiZWwuaW5jbHVkZXMuY29tcG9uZW50LmxhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUuaWQuYXR0cmlidXRlcyIgc2VsZWN0PSIxIiAvPgorCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL21lZ2EtbWFudWFsLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9tZWdhLW1hbnVhbC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc1ZWJmMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9tZWdhLW1hbnVhbC54bWwKQEAgLTAsMCArMSwyMzEgQEAKKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKworPGJvb2sgaWQ9J21lZ2EtbWFudWFsJyBsYW5nPSdlbicKKyAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIgorICAgICAgeG1sbnM9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIgorICAgICAgPgorCisgICAgPGJvb2tpbmZvPgorCisgICAgICAgIDxhYnN0cmFjdD4KKyAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IE1lZ2EtTWFudWFsIGlzIGEgY29uY2F0ZW5hdGlvbiBvZiB0aGUgcHVibGlzaGVkCisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IEhUTUwgbWFudWFscyBmb3IgdGhlIGdpdmVuIHJlbGVhc2UuCisgICAgICAgICAgICBUaGUgbWFudWFsIGV4aXN0cyB0byBoZWxwIHVzZXJzIGVmZmljaWVudGx5IHNlYXJjaCBmb3Igc3RyaW5ncworICAgICAgICAgICAgYWNyb3NzIHRoZSBlbnRpcmUgWW9jdG8gUHJvamVjdCBkb2N1bWVudGF0aW9uIHNldC4KKyAgICAgICAgPC9hYnN0cmFjdD4KKworICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICA8aW1hZ2VvYmplY3Q+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSdmaWd1cmVzL21lZ2EtdGl0bGUucG5nJworICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9J1NWRycKKyAgICAgICAgICAgICAgICAgICAgYWxpZ249J2xlZnQnIHNjYWxlZml0PScxJyB3aWR0aD0nMTAwJScvPgorICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgICAgPC9tZWRpYW9iamVjdD4KKworICAgICAgICA8dGl0bGU+CisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IE1lZ2EtTWFudWFsCisgICAgICAgIDwvdGl0bGU+CisKKyAgICAgICAgPGF1dGhvcmdyb3VwPgorICAgICAgICAgICAgPGF1dGhvcj4KKyAgICAgICAgICAgICAgICA8Zmlyc3RuYW1lPlNjb3R0PC9maXJzdG5hbWU+IDxzdXJuYW1lPlJpZmVuYmFyazwvc3VybmFtZT4KKyAgICAgICAgICAgICAgICA8YWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxvcmduYW1lPkludGVsIENvcnBvcmF0aW9uPC9vcmduYW1lPgorICAgICAgICAgICAgICAgIDwvYWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgPGVtYWlsPnNjb3R0Lm0ucmlmZW5iYXJrQGludGVsLmNvbTwvZW1haWw+CisgICAgICAgICAgICA8L2F1dGhvcj4KKyAgICAgICAgPC9hdXRob3Jncm91cD4KKworICAgICAgICA8cmV2aGlzdG9yeT4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuODwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTU8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuOCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuOTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxNTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS45IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgIDwvcmV2aGlzdG9yeT4KKworICAgIDxjb3B5cmlnaHQ+CisgICAgICA8eWVhcj4mQ09QWVJJR0hUX1lFQVI7PC95ZWFyPgorICAgICAgPGhvbGRlcj5MaW51eCBGb3VuZGF0aW9uPC9ob2xkZXI+CisgICAgPC9jb3B5cmlnaHQ+CisKKyAgICA8bGVnYWxub3RpY2U+CisgICAgICA8cGFyYT4KKyAgICAgICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50IHVuZGVyCisgICAgICAgIHRoZSB0ZXJtcyBvZiB0aGUgPHVsaW5rIHR5cGU9Imh0dHAiIHVybD0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMi4wL3VrLyI+Q3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZSBBbGlrZSAyLjAgVUs6IEVuZ2xhbmQgJmFtcDsgV2FsZXM8L3VsaW5rPiBhcyBwdWJsaXNoZWQgYnkgQ3JlYXRpdmUgQ29tbW9ucy4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxub3RlPgorICAgICAgICAgIEZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtYW51YWwgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2UsIHNlZSB0aGUKKyAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19NTV9VUkw7Jz5Zb2N0byBQcm9qZWN0IE1lZ2EtTWFudWFsPC91bGluaz4KKyAgICAgICAgICBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IHdlYnNpdGUuCisgICAgICA8L25vdGU+CisKKyAgICA8L2xlZ2Fsbm90aWNlPgorCisgICAgPC9ib29raW5mbz4KKworPCEtLSBJbmNsdWRlcyB5b2N0by1wcm9qZWN0LXFzIC0tPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3lvY3RvLXByb2plY3QtcXMveW9jdG8tcHJvamVjdC1xcy54bWwiLz4KKworPCEtLSBJbmNsdWRlcyBkZXYtbWFudWFsIHRpdGxlIGltYWdlIGFuZCB0aGVuIGRldi1tYW51YWwgY2hhcHRlcnMgLS0+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2Rldi10aXRsZS5wbmciIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgc2NhbGVmaXQ9IjEiIC8+CisgICAgPC9wYXJhPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1pbnRyby54bWwiLz4KKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vZGV2LW1hbnVhbC9kZXYtbWFudWFsLXN0YXJ0LnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9kZXYtbWFudWFsL2Rldi1tYW51YWwtbmV3YmllLnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9kZXYtbWFudWFsL2Rldi1tYW51YWwtbW9kZWwueG1sIi8+CisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1jb21tb24tdGFza3MueG1sIi8+CisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1xZW11LnhtbCIvPgorCis8IS0tIEluY2x1ZGVzIGFkdC1tYW51YWwgdGl0bGUgaW1hZ2UgYW5kIHRoZW4gYWR0LW1hbnVhbCBjaGFwdGVycyAtLT4KKworICAgIDxwYXJhPgorICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvYWR0LXRpdGxlLnBuZyIgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBzY2FsZWZpdD0iMSIgLz4KKyAgICA8L3BhcmE+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vYWR0LW1hbnVhbC9hZHQtbWFudWFsLWludHJvLnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9hZHQtbWFudWFsL2FkdC1pbnRyby54bWwiLz4KKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vYWR0LW1hbnVhbC9hZHQtcHJlcGFyZS54bWwiLz4KKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vYWR0LW1hbnVhbC9hZHQtcGFja2FnZS54bWwiLz4KKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vYWR0LW1hbnVhbC9hZHQtY29tbWFuZC54bWwiLz4KKworPCEtLSBJbmNsdWRlcyBic3AtZ3VpZGUgdGl0bGUgaW1hZ2UgYW5kIHRoZW4gYnNwLWd1aWRlIGNoYXB0ZXJzIC0tPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9ic3AtdGl0bGUucG5nIiB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIHNjYWxlZml0PSIxIiAvPgorICAgIDwvcGFyYT4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9ic3AtZ3VpZGUvYnNwLnhtbCIvPgorCis8IS0tIEluY2x1ZGVzIGtlcm5lbC1kZXYgdGl0bGUgaW1hZ2UgYW5kIHRoZW4ga2VybmVsLWRldiBjaGFwdGVycyAtLT4KKworICAgIDxwYXJhPgorICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMva2VybmVsLWRldi10aXRsZS5wbmciIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgc2NhbGVmaXQ9IjEiIC8+CisgICAgPC9wYXJhPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL2tlcm5lbC1kZXYva2VybmVsLWRldi1pbnRyby54bWwiLz4KKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4va2VybmVsLWRldi9rZXJuZWwtZGV2LWNvbW1vbi54bWwiLz4KKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4va2VybmVsLWRldi9rZXJuZWwtZGV2LWFkdmFuY2VkLnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtY29uY2VwdHMtYXBweC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4va2VybmVsLWRldi9rZXJuZWwtZGV2LW1haW50LWFwcHgueG1sIi8+CisKKzwhLS0gSW5jbHVkZXMgcHJvZmlsZS1tYW51YWwgdGl0bGUgaW1hZ2UgYW5kIHRoZW4gcHJvZmlsZS1tYW51YWwgY2hhcHRlcnMgLS0+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3Byb2ZpbGUtdGl0bGUucG5nIiB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIHNjYWxlZml0PSIxIiAvPgorICAgIDwvcGFyYT4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC1pbnRyby54bWwiLz4KKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtYXJjaC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtdXNhZ2UueG1sIi8+CisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWV4YW1wbGVzLnhtbCIvPgorCis8IS0tIEluY2x1ZGVzIHJlZi1tYW51YWwgdGl0bGUgaW1hZ2UgYW5kIHRoZW4gcmVmLW1hbnVhbCBjaGFwdGVycyAtLT4KKworICAgIDxwYXJhPgorICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvcG9reS10aXRsZS5wbmciIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgc2NhbGVmaXQ9IjEiIC8+CisgICAgPC9wYXJhPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvaW50cm9kdWN0aW9uLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvdXNpbmdwb2t5LnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvY2xvc2VyLWxvb2sueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vcmVmLW1hbnVhbC90ZWNobmljYWwtZGV0YWlscy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9yZWYtbWFudWFsL21pZ3JhdGlvbi54bWwiLz4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9yZWYtbWFudWFsL3JlZi1zdHJ1Y3R1cmUueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vcmVmLW1hbnVhbC9yZWYtY2xhc3Nlcy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9yZWYtbWFudWFsL3JlZi10YXNrcy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9yZWYtbWFudWFsL3JlZi1xYS1jaGVja3MueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vcmVmLW1hbnVhbC9yZWYtaW1hZ2VzLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvcmVmLWZlYXR1cmVzLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvcmVmLXZhcmlhYmxlcy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9yZWYtbWFudWFsL3JlZi12YXJsb2NhbGl0eS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9yZWYtbWFudWFsL2ZhcS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9yZWYtbWFudWFsL3Jlc291cmNlcy54bWwiLz4KKworPCEtLSBJbmNsdWRlcyB0b2FzdGVyLW1hbnVhbCB0aXRsZSBpbWFnZSBhbmQgdGhlbiB0b2FzdGVyLW1hbnVhbCBjaGFwdGVycyAtLT4KKworICAgIDxwYXJhPgorICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvdG9hc3Rlci10aXRsZS5wbmciIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgc2NhbGVmaXQ9IjEiIC8+CisgICAgPC9wYXJhPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLWludHJvLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLXN0YXJ0LnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLXNldHVwLWFuZC11c2UueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtcmVmZXJlbmNlLnhtbCIvPgorCis8L2Jvb2s+CisKKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL21lZ2Etc3R5bGUuY3NzIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL21lZ2Etc3R5bGUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNzFhMjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvbWVnYS1zdHlsZS5jc3MKQEAgLTAsMCArMSw5ODQgQEAKKy8qCisgICBHZW5lcmljIFhIVE1MIC8gRG9jQm9vayBYSFRNTCBDU1MgU3R5bGVzaGVldC4KKworICAgQnJvd3NlciB3cmFuZ2xpbmcgYW5kIHR5cG9ncmFwaGljIGRlc2lnbiBieQorICAgICAgT3l2aW5kIEtvbGFzIC8gcGlwcGluQGdpbXAub3JnCisKKyAgIEN1c3RvbWlzZWQgZm9yIFBva3kgYnkKKyAgICAgIE1hdHRoZXcgQWxsdW0gLyBtYWxsdW1Aby1oYW5kLmNvbQorCisgICBUaGFua3MgdG86CisgICAgIExpYW0gUi4gRS4gUXVpbgorICAgICBXaWxsaWFtIFNrYWdncworICAgICBKYWt1YiBTdGVpbmVyCisKKyAgIFN0cnVjdHVyZQorICAgLS0tLS0tLS0tCisKKyAgIFRoZSBzdHlsZXNoZWV0IGlzIGRpdmlkZWQgaW50byB0aGUgZm9sbG93aW5nIHNlY3Rpb25zOgorCisgICAgICAgUG9zaXRpb25pbmcKKyAgICAgICAgICBNYXJnaW5zLCBwYWRkaW5ncywgd2lkdGgsIGZvbnQtc2l6ZSwgY2xlYXJpbmcuCisgICAgICAgRGVjb3JhdGlvbnMKKyAgICAgICAgICBCb3JkZXJzLCBzdHlsZQorICAgICAgIENvbG9ycworICAgICAgICAgIENvbG9ycworICAgICAgIEdyYXBoaWNzCisgICAgICAgICAgR3JhcGhpY2FsIGJhY2tncm91bmRzCisgICAgICAgTmFzdHkgSUUgdHdlYWtzCisgICAgICAgICAgV29ya2Fyb3VuZHMgbmVlZGVkIHRvIG1ha2UgaXQgd29yayBpbiBpbnRlcm5ldCBleHBsb3JlciwKKyAgICAgICAgICBjdXJyZW50bHkgbWFrZXMgdGhlIHN0eWxlc2hlZXQgbm9uIHZhbGlkYXRpbmcsIGJ1dCB1cCB1bnRpbAorICAgICAgICAgIHRoaXMgcG9pbnQgaXQgaXMgdmFsaWRhdGluZy4KKyAgICAgICBNb3ppbGxhIGV4dGVuc2lvbnMKKyAgICAgICAgICBUcmFuc3BhcmVuY3kgZm9yIGZvb3RlcgorCSAgUm91bmRlZCBjb3JuZXJzIG9uIGJveGVzCisKKyovCisKKworICAvKioqKioqKioqKioqKioqIC8KKyAvICBQb3NpdGlvbmluZyAgIC8KKy8gKioqKioqKioqKioqKioqLworCitib2R5IHsKKyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIFNhbnMsIHNhbnMtc2VyaWY7CisKKyAgbWluLXdpZHRoOiA2NDBweDsKKyAgd2lkdGg6IDgwJTsKKyAgbWFyZ2luOiAgMGVtIGF1dG87CisgIHBhZGRpbmc6IDJlbSA1ZW0gNWVtIDVlbTsKKyAgY29sb3I6ICMzMzM7Cit9CisKK2gxLGgyLGgzLGg0LGg1LGg2LGg3IHsKKyAgZm9udC1mYW1pbHk6IEFyaWFsLCBTYW5zOworICBjb2xvcjogIzAwNTU3RDsKKyAgY2xlYXI6IGJvdGg7Cit9CisKK2gxIHsKKyAgZm9udC1zaXplOiAyZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAyZW0gMGVtIDBlbSAwZW07Cit9CisKK2gyLnN1YnRpdGxlIHsKKyAgbWFyZ2luOiAwLjEwZW0gMGVtIDMuMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuOGVtOworICBwYWRkaW5nLWxlZnQ6IDIwJTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCitoMiB7CisgIG1hcmdpbjogMmVtIDBlbSAwLjY2ZW0gMGVtOworICBwYWRkaW5nOiAwLjVlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjVlbTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gzLnN1YnRpdGxlIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDIuMTQlOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworaDMgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g0IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEyMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNSB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDYgeworICBtYXJnaW46IDFlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisuYXV0aG9yZ3JvdXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgcGFkZGluZy10b3A6IDI1NnB4OworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvbWVnYS10aXRsZS5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCB0b3A7CisgIG1hcmdpbi10b3A6IC0yNTZweDsKKyAgcGFkZGluZy1yaWdodDogNTBweDsKKyAgbWFyZ2luLWxlZnQ6IDBweDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7CisgIHdpZHRoOiA3NDBweDsKK30KKworaDMuYXV0aG9yIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zaXplOiAxMDAlOworICBjb2xvcjogIzMzMzsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5hdXRob3IgdHQuZW1haWwgeworICBmb250LXNpemU6IDY2JTsKK30KKworLnRpdGxlcGFnZSBociB7CisgIHdpZHRoOiAwZW07CisgIGNsZWFyOiBib3RoOworfQorCisucmV2aGlzdG9yeSB7CisgIHBhZGRpbmctdG9wOiAyZW07CisgIGNsZWFyOiBib3RoOworfQorCisudG9jLAorLmxpc3Qtb2YtdGFibGVzLAorLmxpc3Qtb2YtZXhhbXBsZXMsCisubGlzdC1vZi1maWd1cmVzIHsKKyAgcGFkZGluZzogMS4zM2VtIDBlbSAyLjVlbSAwZW07CisgIGNvbG9yOiAjMDA1NTdEOworfQorCisudG9jIHAsCisubGlzdC1vZi10YWJsZXMgcCwKKy5saXN0LW9mLWZpZ3VyZXMgcCwKKy5saXN0LW9mLWV4YW1wbGVzIHAgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMC4zZW07CisgIG1hcmdpbjogMS41ZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgcCBiLAorLmxpc3Qtb2YtdGFibGVzIHAgYiwKKy5saXN0LW9mLWZpZ3VyZXMgcCBiLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCBieworICBmb250LXNpemU6IDEwMC4wJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy50b2MgZGwsCisubGlzdC1vZi10YWJsZXMgZGwsCisubGlzdC1vZi1maWd1cmVzIGRsLAorLmxpc3Qtb2YtZXhhbXBsZXMgZGwgeworICBtYXJnaW46IDBlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZHQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGRkIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAyLjZlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuZ2xvc3NhcnkgZGwsCitkaXYudmFyaWFibGVsaXN0IGRsIHsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgd2lkdGg6IDIwZW07CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCisudmFyaWFibGVsaXN0IGRsIGR0IHsKKyAgbWFyZ2luLXRvcDogMC41ZW07Cit9CisKKy5nbG9zc2FyeSBkbCBkZCwKKy52YXJpYWJsZWxpc3QgZGwgZGQgeworICBtYXJnaW4tdG9wOiAtMWVtOworICBtYXJnaW4tbGVmdDogMjUuNWVtOworfQorCisuZ2xvc3NhcnkgZGQgcCwKKy52YXJpYWJsZWxpc3QgZGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKK2RpdiBwLmNvcHlyaWdodCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK2Rpdi5sZWdhbG5vdGljZSBwLmxlZ2Fsbm90aWNlLXRpdGxlIHsKKyAgbWFyZ2luLWJvdHRvbTogMGVtOworfQorCitwIHsKKyAgbGluZS1oZWlnaHQ6IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisKK30KKworZGwgeworICBwYWRkaW5nLXRvcDogMGVtOworfQorCitociB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCisKKy5tZWRpYW9iamVjdCwKKy5tZWRpYW9iamVjdGNvIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCitpbWcgeworICBib3JkZXI6IG5vbmU7Cit9CisKK3VsIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMS41ZW07Cit9CisKK3VsIGxpIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCit1bCBsaSBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKwordGFibGUgeworICB3aWR0aCA6MTAwJTsKK30KKwordGggeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3RkIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCitwIGFbaWRdIHsKKyAgbWFyZ2luOiAwcHg7CisgIHBhZGRpbmc6IDBweDsKKyAgZGlzcGxheTogaW5saW5lOworICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOworfQorCithIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGNvbG9yOiAjNDQ0OworfQorCitwcmUgeworICAgIG92ZXJmbG93OiBhdXRvOworfQorCithOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIC8qZm9udC13ZWlnaHQ6IGJvbGQ7Ki8KK30KKworLyogVGhpcyBzdHlsZSBkZWZpbmVzIGhvdyB0aGUgcGVybWFsaW5rIGNoYXJhY3RlcgorICAgYXBwZWFycyBieSBpdHNlbGYgYW5kIHdoZW4gaG92ZXJlZCBvdmVyIHdpdGgKKyAgIHRoZSBtb3VzZS4gKi8KKworW2FsdD0nUGVybWFsaW5rJ10geyBjb2xvcjogI2VlZTsgfQorW2FsdD0nUGVybWFsaW5rJ106aG92ZXIgeyBjb2xvcjogYmxhY2s7IH0KKworCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUgeworICBtYXJnaW46IDFlbSAwZW07CisgIHBhZGRpbmc6IDFlbTsKKyAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOworfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWxleGFtcGxlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbHRhYmxlIHAudGl0bGUgYiwKK2Rpdi5maWd1cmUgcC50aXRsZSBiLAorZGl2LmV4YW1wbGUgcC50aXRsZSBiLAorZGl2LnRhYmxlIHAudGl0bGUgYnsKKyAgICBwYWRkaW5nLXRvcDogMGVtOworICAgIG1hcmdpbi10b3A6IDBlbTsKKyAgICBmb250LXNpemU6IDEwMCU7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKK30KKworLm1lZGlhb2JqZWN0IC5jYXB0aW9uLAorLm1lZGlhb2JqZWN0IC5jYXB0aW9uIHAgIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZy10b3A6IDAuNWVtOworICBwYWRkaW5nLWJvdHRvbTogMC41ZW07Cit9CisKKy5lcGlncmFwaCB7CisgIHBhZGRpbmctbGVmdDogNTUlOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKy5lcGlncmFwaCBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmVwaWdyYXBoIC5xdW90ZSB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKy5lcGlncmFwaCAuYXR0cmlidXRpb24geworICBmb250LXN0eWxlOiBub3JtYWw7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitzcGFuLmFwcGxpY2F0aW9uIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCisucHJvZ3JhbWxpc3RpbmcgeworICBmb250LWZhbWlseTogbW9ub3NwYWNlOworICBmb250LXNpemU6IDgwJTsKKyAgd2hpdGUtc3BhY2U6IHByZTsKKyAgbWFyZ2luOiAxLjMzZW0gMGVtOworICBwYWRkaW5nOiAxLjMzZW07Cit9CisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBtYXJnaW4tdG9wOiAxZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKKworfQorCisvKiBmb3JjZSBmdWxsIHdpZHRoIG9mIHRhYmxlIHdpdGhpbiBkaXYgKi8KKy50aXAgdGFibGUsCisud2FybmluZyB0YWJsZSwKKy5jYXV0aW9uIHRhYmxlLAorLm5vdGUgdGFibGUgeworICBib3JkZXI6IG5vbmU7CisgIHdpZHRoOiAxMDAlOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBwYWRkaW5nOiAwLjhlbSAwLjBlbSAwLjBlbSAwLjBlbTsKKyAgbWFyZ2luIDogMGVtIDBlbSAwZW0gMGVtOworfQorCisudGlwIHAsCisud2FybmluZyBwLAorLmNhdXRpb24gcCwKKy5ub3RlIHAgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMC41ZW07CisgIHBhZGRpbmctcmlnaHQ6IDFlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmFjcm9ueW0geworICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICBwYWRkaW5nOiAwLjA5ZW0gMC4zZW07CisgIG1hcmdpbjogMGVtOworfQorCisuaXRlbWl6ZWRsaXN0IGxpIHsKKyAgY2xlYXI6IG5vbmU7Cit9CisKKy5maWxlbmFtZSB7CisgIGZvbnQtc2l6ZTogbWVkaXVtOworICBmb250LWZhbWlseTogQ291cmllciwgbW9ub3NwYWNlOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGxlZnQ6IDBlbTsKKyAgdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2RmOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAgbGVmdDogMGVtOworICBib3R0b206IDBlbTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworZGl2Lm5hdmhlYWRlciB0ZCwKK2Rpdi5uYXZmb290ZXIgdGQgeworICBmb250LXNpemU6IDY2JTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0aCB7CisgIC8qZm9udC1mYW1pbHk6IEdlb3JnaWEsIFRpbWVzLCBzZXJpZjsqLworICAvKmZvbnQtc2l6ZTogeC1sYXJnZTsqLworICBmb250LXNpemU6IDgwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci1ib3R0b206IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYSwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYSB7CisgIGNvbG9yOiAjNzc3OworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKKy8qIG5vcm1hbCB0ZXh0IGluIHRoZSBmb290ZXIgKi8KK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgeworICBjb2xvcjogYmxhY2s7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTp2aXNpdGVkLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOnZpc2l0ZWQgeworICBjb2xvcjogIzQ0NDsKK30KKworCisvKiBsaW5rcyBpbiBoZWFkZXIgYW5kIGZvb3RlciAqLworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOmhvdmVyLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBjb2xvcjogIzMzYTsKK30KKworZGl2Lm5hdmhlYWRlciBociwKK2Rpdi5uYXZmb290ZXIgaHIgeworICBkaXNwbGF5OiBub25lOworfQorCisKKy5xYW5kYXNldCB0ci5xdWVzdGlvbiB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnFhbmRhc2V0IHRyLmFuc3dlciB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKy5hbnN3ZXIgdGQgeworICBwYWRkaW5nLWJvdHRvbTogMS41ZW07Cit9CisKKy5lbXBoYXNpcyB7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisKKyAgLyoqKioqKioqKioqKiogLworIC8gZGVjb3JhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKi8KKworLnRpdGxlcGFnZSB7Cit9CisKKy5wYXJ0IC50aXRsZSB7Cit9CisKKy5zdWJ0aXRsZSB7CisgICAgYm9yZGVyOiBub25lOworfQorCisvKgoraDEgeworICBib3JkZXI6IG5vbmU7Cit9CisKK2gyIHsKKyAgYm9yZGVyLXRvcDogc29saWQgMC4yZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDMgeworICBib3JkZXItdG9wOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDQgeworICBib3JkZXI6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNSB7CisgIGJvcmRlcjogMGVtOworfQorKi8KKworLnByb2dyYW1saXN0aW5nIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisucXVlc3Rpb24gdGQgeworICBib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7Cit9CisKKy5hbnN3ZXIgeworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZDsKK30KKworICAvKioqKioqKioqIC8KKyAvICBjb2xvcnMgIC8KKy8gKioqKioqKioqLworCitib2R5IHsKKyAgY29sb3I6ICMzMzM7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorCithIHsKKyAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cit9CisKK2E6aG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVkZWRlOworfQorCisKK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3LAoraDggeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKK30KKworaHIgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKKworLnRpcCwgLndhcm5pbmcsIC5jYXV0aW9uLCAubm90ZSB7CisgIGJvcmRlci1jb2xvcjogI2ZmZjsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjsKK30KKworCisud2FybmluZyB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLnRpcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5ub3RlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgY29sb3I6ICMwNDQ7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworcHJlLnByb2dyYW1saXN0aW5nIHsKKyAgY29sb3I6IGJsYWNrOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworICBib3JkZXItY29sb3I6ICNhYWE7CisgIGJvcmRlci13aWR0aDogMnB4OworfQorCisuZ3VpbWVudSwKKy5ndWlsYWJlbCwKKy5ndWltZW51aXRlbSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgYm9yZGVyLWNvbG9yOiAjOTk5OworfQorCisKK2Rpdi5uYXZoZWFkZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKK2Rpdi5uYXZmb290ZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKKyAgLyoqKioqKioqKioqIC8KKyAvICBncmFwaGljcyAgLworLyAqKioqKioqKioqKi8KKworLyoKK2JvZHkgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ib2R5X2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisubmF2aGVhZGVyLAorLm5vdGUsCisudGlwIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvbm90ZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLndhcm5pbmcsCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL3dhcm5pbmdfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5maWd1cmUsCisuaW5mb3JtYWxmaWd1cmUsCisuZXhhbXBsZSwKKy5pbmZvcm1hbGV4YW1wbGUsCisudGFibGUsCisuaW5mb3JtYWx0YWJsZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2ZpZ3VyZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworKi8KK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3eworfQorCisvKgorRXhhbXBsZSBvZiBob3cgdG8gc3RpY2sgYW4gaW1hZ2UgYXMgcGFydCBvZiB0aGUgdGl0bGUuCisKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy93aGl0ZS1vbi1ibGFjay5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7Cit9CisqLworCitkaXYucHJlZmFjZSAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5jb2xvcGhvbiAudGl0bGUsCitkaXYuY2hhcHRlciAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7Cit9CisKK2Rpdi5zZWN0aW9uIGRpdi5zZWN0aW9uIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LnNlY3QyIC50aXRsZXBhZ2UgLnRpdGxlIHsKKyAgICBiYWNrZ3JvdW5kOiBub25lOworfQorCisKK2gxLnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIGhlaWdodDogMjU2cHg7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47Cit9CisKK2gyLnN1YnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47CisgIHdpZHRoOiAwcHg7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyAgcGlwcGluLmdpbXAub3JnIHNwZWNpZmljIGFsdGVyYXRpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgY29sb3I6ICM3Nzc7CisgIGZvbnQtc2l6ZTogODAlOworICBwYWRkaW5nOiAwOworICBtYXJnaW46IDA7CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdG9wOiAwcHg7CisgIGxlZnQ6IDBweDsKKyAgd2lkdGg6IDEwMCU7CisgIGhlaWdodDogNTBweDsKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2hlYWRpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKKyAgYm9yZGVyOiBub25lOworfQorCitkaXYuaGVhZGluZyBhIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyOiBub25lOworICBjb2xvcjogI2RkZDsKKyAgZm9udC1zaXplOiA4MCU7CisgIHRleHQtYWxpZ246cmlnaHQ7CisKKyAgd2lkdGg6IDEwMCU7CisgIHBhZGRpbmctdG9wOiAxMHB4OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGJvdHRvbTogMHB4OworICBsZWZ0OiAwcHg7CisKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2Zvb3RpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7Cit9CisqLworCisKKworICAvKioqKioqKioqKioqKioqKioqIC8KKyAvICBuYXN0eSBpZSB0d2Vha3MgIC8KKy8gKioqKioqKioqKioqKioqKioqLworCisvKgorZGl2LmhlYWRpbmcsIGRpdi5uYXZoZWFkZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKK30KKworZGl2LmZvb3RpbmcsIGRpdi5uYXZmb290ZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKKyAgbWFyZ2luLWxlZnQ6ZXhwcmVzc2lvbigiLTVlbSIpOworfQorYm9keSB7CisgIHBhZGRpbmc6ZXhwcmVzc2lvbigiNGVtIDVlbSAwZW0gNWVtIik7Cit9CisqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8KKyAvIG1vemlsbGEgdmVuZG9yIHNwZWNpZmljIGNzcyBleHRlbnNpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIC1tb3otb3BhY2l0eTogMC44ZW07Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSwKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuNWVtOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuM2VtOworfQorKi8KKwordGFibGUgdHIgdGQgdGFibGUgdHIgdGQgeworICBkaXNwbGF5OiBub25lOworfQorCisKK2hyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKwordGFibGUgeworICBib3JkZXI6IDBlbTsKK30KKworIC5waG90byB7CisgIGZsb2F0OiByaWdodDsKKyAgbWFyZ2luLWxlZnQ6ICAgMS41ZW07CisgIG1hcmdpbi1ib3R0b206IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisgIG1heC13aWR0aDogICAgICAxN2VtOworICBib3JkZXI6ICAgICAxcHggc29saWQgZ3JheTsKKyAgcGFkZGluZzogICAgM3B4OworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKyAuc2VwZXJhdG9yIHsKKyAgIHBhZGRpbmctdG9wOiAyZW07CisgICBjbGVhcjogYm90aDsKKyAgfQorCisgICN2YWxpZGF0b3JzIHsKKyAgICAgIG1hcmdpbi10b3A6IDVlbTsKKyAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgY29sb3I6ICM3Nzc7CisgIH0KKyAgQG1lZGlhIHByaW50IHsKKyAgICAgIGJvZHkgeworICAgICAgICAgIGZvbnQtc2l6ZTogOHB0OworICAgICAgfQorICAgICAgLm5vcHJpbnQgeworICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CisgICAgICB9CisgIH0KKworCisudGlwLAorLm5vdGUgeworICAgYmFja2dyb3VuZDogI2YwZjBmMjsKKyAgIGNvbG9yOiAjMzMzOworICAgcGFkZGluZzogMjBweDsKKyAgIG1hcmdpbjogMjBweDsKK30KKworLnRpcCBoMywKKy5ub3RlIGgzIHsKKyAgIHBhZGRpbmc6IDBlbTsKKyAgIG1hcmdpbjogMGVtOworICAgZm9udC1zaXplOiAyZW07CisgICBmb250LXdlaWdodDogYm9sZDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisudGlwIGEsCisubm90ZSBhIHsKKyAgIGNvbG9yOiAjMzMzOworICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy5mb290bm90ZSB7CisgICBmb250LXNpemU6IHNtYWxsOworICAgY29sb3I6ICMzMzM7Cit9CisKKy8qIENoYW5nZXMgdGhlIGFubm91bmNlbWVudCB0ZXh0ICovCisudGlwIGgzLAorLndhcm5pbmcgaDMsCisuY2F1dGlvbiBoMywKKy5ub3RlIGgzIHsKKyAgIGZvbnQtc2l6ZTpsYXJnZTsKKyAgIGNvbG9yOiAjMDA1NTdEOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Bva3kuZW50IGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Bva3kuZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YzRmNmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcG9reS5lbnQKQEAgLTAsMCArMSw3MCBAQAorPCFFTlRJVFkgRElTVFJPICIxLjkiPgorPCFFTlRJVFkgRElTVFJPX0NPTVBSRVNTRUQgIjE5Ij4KKzwhRU5USVRZIERJU1RST19OQU1FICJ0YmQiPgorPCFFTlRJVFkgWU9DVE9fRE9DX1ZFUlNJT04gIjEuOSI+Cis8IUVOVElUWSBQT0tZVkVSU0lPTiAiMTQuMC4wIj4KKzwhRU5USVRZIFBPS1lWRVJTSU9OX0NPTVBSRVNTRUQgIjE0MDAiPgorPCFFTlRJVFkgWU9DVE9fUE9LWSAicG9reS0mRElTVFJPX05BTUU7LSZQT0tZVkVSU0lPTjsiPgorPCFFTlRJVFkgQ09QWVJJR0hUX1lFQVIgIjIwMTAtMjAxNSI+Cis8IUVOVElUWSBZT0NUT19ETF9VUkwgImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZyI+Cis8IUVOVElUWSBZT0NUT19IT01FX1VSTCAiaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnIj4KKzwhRU5USVRZIFlPQ1RPX0xJU1RTX1VSTCAiaHR0cDovL2xpc3RzLnlvY3RvcHJvamVjdC5vcmciPgorPCFFTlRJVFkgWU9DVE9fQlVHWklMTEFfVVJMICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZyI+Cis8IUVOVElUWSBZT0NUT19XSUtJX1VSTCAiaHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmciPgorPCFFTlRJVFkgWU9DVE9fQUJfVVJMICJodHRwOi8vYXV0b2J1aWxkZXIueW9jdG9wcm9qZWN0Lm9yZyI+Cis8IUVOVElUWSBZT0NUT19HSVRfVVJMICJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmciPgorPCFFTlRJVFkgWU9DVE9fQURUUkVQT19VUkwgImh0dHA6Ly9hZHRyZXBvLnlvY3RvcHJvamVjdC5vcmciPgorPCFFTlRJVFkgWU9DVE9fUkVMRUFTRV9OT1RFUyAiJllPQ1RPX0hPTUVfVVJMOy9kb3dubG9hZHMvY29yZS8mRElTVFJPX05BTUU7JkRJU1RST19DT01QUkVTU0VEOyI+Cis8IUVOVElUWSBPRV9IT01FX1VSTCAiaHR0cDovL3d3dy5vcGVuZW1iZWRkZWQub3JnIj4KKzwhRU5USVRZIE9FX0xJU1RTX1VSTCAiaHR0cDovL2xpc3RzLm9wZW5lbWJlZGRlZC5vcmcvbWFpbG1hbiI+Cis8IUVOVElUWSBPRV9ET0NTX1VSTCAiaHR0cDovL2RvY3Mub3BlbmVtYmVkZGVkLm9yZyI+Cis8IUVOVElUWSBPSF9IT01FX1VSTCAiaHR0cDovL28taGFuZC5jb20iPgorPCFFTlRJVFkgQklUQkFLRV9IT01FX1VSTCAiaHR0cDovL2RldmVsb3Blci5iZXJsaW9zLmRlL3Byb2plY3RzL2JpdGJha2UvIj4KKzwhRU5USVRZIEVDTElQU0VfTUFJTl9VUkwgImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZG93bmxvYWRzIj4KKzwhRU5USVRZIEVDTElQU0VfRExfVVJMICJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmciPgorPCFFTlRJVFkgRUNMSVBTRV9ETF9QTFVHSU5fVVJMICImWU9DVE9fRExfVVJMOy9yZWxlYXNlcy9lY2xpcHNlLXBsdWdpbi8mRElTVFJPOyI+Cis8IUVOVElUWSBFQ0xJUFNFX1VQREFURVNfVVJMICImRUNMSVBTRV9ETF9VUkw7L3RtL3VwZGF0ZXMvMy4zIj4KKzwhRU5USVRZIEVDTElQU0VfSU5ESUdPX1VSTCAiJkVDTElQU0VfRExfVVJMOy9yZWxlYXNlcy9pbmRpZ28iPgorPCFFTlRJVFkgRUNMSVBTRV9KVU5PX1VSTCAiJkVDTElQU0VfRExfVVJMOy9yZWxlYXNlcy9qdW5vIj4KKzwhRU5USVRZIEVDTElQU0VfTFVOQV9VUkwgIiZFQ0xJUFNFX0RMX1VSTDsvcmVsZWFzZXMvbHVuYSI+Cis8IUVOVElUWSBFQ0xJUFNFX0tFUExFUl9VUkwgIiZFQ0xJUFNFX0RMX1VSTDsvcmVsZWFzZXMva2VwbGVyIj4KKzwhRU5USVRZIEVDTElQU0VfSU5ESUdPX0NEVF9VUkwgIiZFQ0xJUFNFX0RMX1VSTDsvdG9vbHMvY2R0L3JlbGVhc2VzL2luZGlnbyI+Cis8IUVOVElUWSBZT0NUT19ET0NTX1VSTCAiJllPQ1RPX0hPTUVfVVJMOy9kb2NzIj4KKzwhRU5USVRZIFlPQ1RPX1NPVVJDRVNfVVJMICImWU9DVE9fSE9NRV9VUkw7L3NvdXJjZXMvIj4KKzwhRU5USVRZIFlPQ1RPX0FCX1BPUlRfVVJMICImWU9DVE9fQUJfVVJMOzo4MDEwIj4KKzwhRU5USVRZIFlPQ1RPX0FCX05JR0hUTFlfVVJMICImWU9DVE9fQUJfVVJMOy9wdWIvbmlnaHRseS8iPgorPCFFTlRJVFkgWU9DVE9fUE9LWV9VUkwgIiZZT0NUT19ETF9VUkw7L3JlbGVhc2VzL3Bva3kvIj4KKzwhRU5USVRZIFlPQ1RPX1JFTEVBU0VfRExfVVJMICImWU9DVE9fRExfVVJMOy9yZWxlYXNlcy95b2N0by95b2N0by0mRElTVFJPOyI+Cis8IUVOVElUWSBZT0NUT19UT09MQ0hBSU5fRExfVVJMICImWU9DVE9fUkVMRUFTRV9ETF9VUkw7L3Rvb2xjaGFpbi8iPgorPCFFTlRJVFkgWU9DVE9fRUNMSVBTRV9ETF9VUkwgIiZZT0NUT19SRUxFQVNFX0RMX1VSTDsvZWNsaXBzZS1wbHVnaW4vIj4KKzwhRU5USVRZIFlPQ1RPX0FEVElOU1RBTExFUl9ETF9VUkwgIiZZT0NUT19SRUxFQVNFX0RMX1VSTDsvYWR0LWluc3RhbGxlciI+Cis8IUVOVElUWSBZT0NUT19QT0tZX0RMX1VSTCAiJllPQ1RPX1JFTEVBU0VfRExfVVJMOy8mWU9DVE9fUE9LWTsudGFyLmJ6MiI+Cis8IUVOVElUWSBZT0NUT19NQUNISU5FU19ETF9VUkwgIiZZT0NUT19SRUxFQVNFX0RMX1VSTDsvbWFjaGluZXMiPgorPCFFTlRJVFkgWU9DVE9fUUVNVV9ETF9VUkwgIiZZT0NUT19NQUNISU5FU19ETF9VUkw7L3FlbXUiPgorPCFFTlRJVFkgWU9DVE9fUFlUSE9OLWk2ODZfRExfVVJMICImWU9DVE9fRExfVVJMOy9yZWxlYXNlcy9taXNjc3VwcG9ydC9weXRob24tbmF0aXZlc2RrLXN0YW5kYWxvbmUtaTY4Ni50YXIuYnoyIj4KKzwhRU5USVRZIFlPQ1RPX1BZVEhPTi14ODZfNjRfRExfVVJMICImWU9DVE9fRExfVVJMOy9yZWxlYXNlcy9taXNjc3VwcG9ydC9weXRob24tbmF0aXZlc2RrLXN0YW5kYWxvbmUteDg2XzY0LnRhci5iejIiPgorPCFFTlRJVFkgWU9DVE9fRE9DU19RU19VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy95b2N0by1wcm9qZWN0LXFzL3lvY3RvLXByb2plY3QtcXMuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19ET0NTX0FEVF9VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy9hZHQtbWFudWFsL2FkdC1tYW51YWwuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19ET0NTX1JFRl9VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy9yZWYtbWFudWFsL3JlZi1tYW51YWwuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19ET0NTX0JTUF9VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy9ic3AtZ3VpZGUvYnNwLWd1aWRlLmh0bWwiPgorPCFFTlRJVFkgWU9DVE9fRE9DU19ERVZfVVJMICImWU9DVE9fRE9DU19VUkw7LyZZT0NUT19ET0NfVkVSU0lPTjsvZGV2LW1hbnVhbC9kZXYtbWFudWFsLmh0bWwiPgorPCFFTlRJVFkgWU9DVE9fRE9DU19LRVJORUxfVVJMICImWU9DVE9fRE9DU19VUkw7LyZZT0NUT19ET0NfVkVSU0lPTjsva2VybmVsLW1hbnVhbC9rZXJuZWwtbWFudWFsLmh0bWwiPgorPCFFTlRJVFkgWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L2tlcm5lbC1kZXYva2VybmVsLWRldi5odG1sIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfUFJPRl9VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC5odG1sIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfTU1fVVJMICImWU9DVE9fRE9DU19VUkw7LyZZT0NUT19ET0NfVkVSU0lPTjsvbWVnYS1tYW51YWwvbWVnYS1tYW51YWwuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19ET0NTX0JCX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC5odG1sIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfVE9BU1RfVVJMICImWU9DVE9fRE9DU19VUkw7LyZZT0NUT19ET0NfVkVSU0lPTjsvdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19BRFRQQVRIX0RJUiAiL29wdC9wb2t5LyZESVNUUk87Ij4KKzwhRU5USVRZIFlPQ1RPX1BPS1lfVEFSQkFMTCAiJllPQ1RPX1BPS1k7LnRhci5iejIiPgorPCFFTlRJVFkgT0VfSU5JVF9QQVRIICImWU9DVE9fUE9LWTsvb2UtaW5pdC1idWlsZC1lbnYiPgorPCFFTlRJVFkgT0VfSU5JVF9GSUxFICJvZS1pbml0LWJ1aWxkLWVudiI+Cis8IUVOVElUWSBVQlVOVFVfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUwgImdhd2sgd2dldCBnaXQtY29yZSBkaWZmc3RhdCB1bnppcCB0ZXhpbmZvIGdjYy1tdWx0aWxpYiBcCisgICAgIGJ1aWxkLWVzc2VudGlhbCBjaHJwYXRoIHNvY2F0Ij4KKzwhRU5USVRZIEZFRE9SQV9IT1NUX1BBQ0tBR0VTX0VTU0VOVElBTCAiZ2F3ayBtYWtlIHdnZXQgdGFyIGJ6aXAyIGd6aXAgcHl0aG9uIHVuemlwIHBlcmwgcGF0Y2ggXAorICAgICBkaWZmdXRpbHMgZGlmZnN0YXQgZ2l0IGNwcCBnY2MgZ2NjLWMrKyBnbGliYy1kZXZlbCB0ZXhpbmZvIGNocnBhdGggXAorICAgICBjY2FjaGUgcGVybC1EYXRhLUR1bXBlciBwZXJsLVRleHQtUGFyc2VXb3JkcyBwZXJsLVRocmVhZC1RdWV1ZSBzb2NhdCBcCisgICAgIGZpbmR1dGlscyB3aGljaCI+Cis8IUVOVElUWSBPUEVOU1VTRV9IT1NUX1BBQ0tBR0VTX0VTU0VOVElBTCAicHl0aG9uIGdjYyBnY2MtYysrIGdpdCBjaHJwYXRoIG1ha2Ugd2dldCBweXRob24teG1sIFwKKyAgICAgZGlmZnN0YXQgbWFrZWluZm8gcHl0aG9uLWN1cnNlcyBwYXRjaCBzb2NhdCI+Cis8IUVOVElUWSBDRU5UT1NfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUwgImdhd2sgbWFrZSB3Z2V0IHRhciBiemlwMiBnemlwIHB5dGhvbiB1bnppcCBwZXJsIHBhdGNoIFwKKyAgICAgZGlmZnV0aWxzIGRpZmZzdGF0IGdpdCBjcHAgZ2NjIGdjYy1jKysgZ2xpYmMtZGV2ZWwgdGV4aW5mbyBjaHJwYXRoIHNvY2F0Ij4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLWFsbC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1hbGwucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YjQwYmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1hbGwucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLWNob29zZS1ldmVudHMucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstY2hvb3NlLWV2ZW50cy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThkZDYyYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLWNob29zZS1ldmVudHMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLWk5MTUtZGlzcGxheS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1pOTE1LWRpc3BsYXkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMGVkZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1pOTE1LWRpc3BsYXkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLW91dHB1dC1kaXNwbGF5LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLW91dHB1dC1kaXNwbGF5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTJkMGU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstb3V0cHV0LWRpc3BsYXkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL2x0dG5nbWFpbjAucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvbHR0bmdtYWluMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY2MDExMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL2x0dG5nbWFpbjAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktYnVzeWJveC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9vcHJvZmlsZXVpLWJ1c3lib3gucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4Mjc1YzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9vcHJvZmlsZXVpLWJ1c3lib3gucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktY29weS10by11c2VyLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktY29weS10by11c2VyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWI2NDcwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1jb3B5LXRvLXVzZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktZG93bmxvYWRpbmcucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1kb3dubG9hZGluZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3NDJkNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktZG93bmxvYWRpbmcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktcHJvY2Vzc2VzLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktcHJvY2Vzc2VzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTU0NzAyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1wcm9jZXNzZXMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtcHJvYmUtZG9fZm9yay1wcm9maWxlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtcHJvYmUtZG9fZm9yay1wcm9maWxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTEwNzBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi1wcm9iZS1kb19mb3JrLXByb2ZpbGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtcmVwb3J0LWN5Y2xlcy11LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtcmVwb3J0LWN5Y2xlcy11LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGVjNmFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi1yZXBvcnQtY3ljbGVzLXUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtc3lzdGVtd2lkZS1saWJjLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtc3lzdGVtd2lkZS1saWJjLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjcyODY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi1zeXN0ZW13aWRlLWxpYmMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtc3lzdGVtd2lkZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXN5c3RlbXdpZGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyY2UyNDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXN5c3RlbXdpZGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLW1lbnUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtYW5ub3RhdGUtbWVudS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ViMzRlYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLW1lbnUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLXVkaGNwYy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS11ZGhjcGMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ODFlOWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS11ZGhjcGMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRlYnVnaW5mby5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kZWJ1Z2luZm8ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMTdiNDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kZWJ1Z2luZm8ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLW1lbnUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZHNvLXpvb20tbWVudS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkxM2M4NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLW1lbnUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTk2MmM0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZHNvLXpvb20ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWV4cGFuZGVkLXN0cmlwcGVkLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWV4cGFuZGVkLXN0cmlwcGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjQyZDA2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZXhwYW5kZWQtc3RyaXBwZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1mbGF0LXN0cmlwcGVkLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1mbGF0LXN0cmlwcGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGYzOTVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWZsYXQtc3RyaXBwZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktZnJvbS11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktZnJvbS11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjdjNzY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS1mcm9tLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1kZWJ1Z2luZm8ucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS10by11c2VyLWV4cGFuZGVkLWRlYnVnaW5mby5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc5OWFmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1kZWJ1Z2luZm8ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1zdHJpcHBlZC11bnJlc29sdmVkLWhpZGRlbi5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQtdW5yZXNvbHZlZC1oaWRkZW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MTgwOGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQtdW5yZXNvbHZlZC1oaWRkZW4ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1zdHJpcHBlZC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMjMwMmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3Byb2ZpbGUtdGl0bGUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcHJvZmlsZS10aXRsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1YzY4MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3Byb2ZpbGUtdGl0bGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3B5Ym9vdGNoYXJ0Z3VpLWxpbnV4LXlvY3RvLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3B5Ym9vdGNoYXJ0Z3VpLWxpbnV4LXlvY3RvLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjZiZmRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcHlib290Y2hhcnRndWktbGludXgteW9jdG8ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLW5vc3RyaXAucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcHljaGFydC1saW51eC15b2N0by1ycG0tbm9zdHJpcC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ0Njc1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLW5vc3RyaXAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWUzNTM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcHljaGFydC1saW51eC15b2N0by1ycG0ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3NjaGVkLXdha2V1cC1wcm9maWxlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3NjaGVkLXdha2V1cC1wcm9maWxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjI1ODExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvc2NoZWQtd2FrZXVwLXByb2ZpbGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY2FsbGVycy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9zeXNwcm9mLWNhbGxlcnMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MGM4ZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9zeXNwcm9mLWNhbGxlcnMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY29weS1mcm9tLXVzZXIucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvc3lzcHJvZi1jb3B5LWZyb20tdXNlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzMTQyNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY29weS1mcm9tLXVzZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY29weS10by11c2VyLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY29weS10by11c2VyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTViYWI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvc3lzcHJvZi1jb3B5LXRvLXVzZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC1hcmNoLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC1hcmNoLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWQxMTU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWFyY2gueG1sCkBAIC0wLDAgKzEsNDUgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdwcm9maWxlLW1hbnVhbC1hcmNoJz4KKworPHRpdGxlPk92ZXJhbGwgQXJjaGl0ZWN0dXJlIG9mIHRoZSBMaW51eCBUcmFjaW5nIGFuZCBQcm9maWxpbmcgVG9vbHM8L3RpdGxlPgorCis8c2VjdGlvbiBpZD0nYXJjaGl0ZWN0dXJlLW9mLXRoZS10cmFjaW5nLWFuZC1wcm9maWxpbmctdG9vbHMnPgorICAgIDx0aXRsZT5BcmNoaXRlY3R1cmUgb2YgdGhlIFRyYWNpbmcgYW5kIFByb2ZpbGluZyBUb29sczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSXQgbWF5IHNlZW0gc3VycHJpc2luZyB0byBzZWUgYSBzZWN0aW9uIGNvdmVyaW5nIGFuICdvdmVyYWxsIGFyY2hpdGVjdHVyZScKKyAgICAgICAgZm9yIHdoYXQgc2VlbXMgdG8gYmUgYSByYW5kb20gY29sbGVjdGlvbiBvZiB0cmFjaW5nIHRvb2xzIHRoYXQgdG9nZXRoZXIKKyAgICAgICAgbWFrZSB1cCB0aGUgTGludXggdHJhY2luZyBhbmQgcHJvZmlsaW5nIHNwYWNlLgorICAgICAgICBUaGUgZmFjdCBpcywgaG93ZXZlciwgdGhhdCBpbiByZWNlbnQgeWVhcnMgdGhpcyBzZWVtaW5nbHkgZGlzcGFyYXRlCisgICAgICAgIHNldCBvZiB0b29scyBoYXMgc3RhcnRlZCB0byBjb252ZXJnZSBvbiBhICdjb3JlJyBzZXQgb2YgdW5kZXJseWluZworICAgICAgICBtZWNoYW5pc21zOgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPnN0YXRpYyB0cmFjZXBvaW50czwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+ZHluYW1pYyB0cmFjZXBvaW50cworICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPmtwcm9iZXM8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPnVwcm9iZXM8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+dGhlIHBlcmZfZXZlbnRzIHN1YnN5c3RlbTwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+ZGVidWdmczwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxlbXBoYXNpcz5UeWluZyBpdCBUb2dldGhlcjo8L2VtcGhhc2lzPiBSYXRoZXIgdGhhbiBlbnVtZXJhdGluZyBoZXJlIGhvdyBlYWNoIHRvb2wgbWFrZXMgdXNlIG9mCisgICAgICAgIHRoZXNlIGNvbW1vbiBtZWNoYW5pc21zLCB0ZXh0Ym94ZXMgbGlrZSB0aGlzIHdpbGwgbWFrZSBub3RlIG9mIHRoZQorICAgICAgICBzcGVjaWZpYyB1c2FnZXMgaW4gZWFjaCB0b29sIGFzIHRoZXkgY29tZSB1cCBpbiB0aGUgY291cnNlCisgICAgICAgIG9mIHRoZSB0ZXh0LgorICAgIDwvaW5mb3JtYWxleGFtcGxlPgorPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtY3VzdG9taXphdGlvbi54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FhNTdlZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDI3IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiIHZlcnNpb249IjEuMCI+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9kb2Nib29rLW1pcnJvci9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKzwhLS0KKworICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9wZXJtYWxpbmtzLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvc2VjdGlvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbCIvPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9Iidwcm9maWxlLW1hbnVhbC1zdHlsZS5jc3MnIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNoYXB0ZXIuYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYXBwZW5kaXguYXV0b2xhYmVsIiBzZWxlY3Q9IkEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmxhYmVsLmluY2x1ZGVzLmNvbXBvbmVudC5sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmlkLmF0dHJpYnV0ZXMiIHNlbGVjdD0iMSIgLz4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg5ODI4MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0CisJeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisJeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIKKwl2ZXJzaW9uPSIxLjAiPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3IvZG9jYm9vay1taXJyb3IvZG9jYm9vay14c2wtMS43Ni4xL2VjbGlwc2UvZWNsaXBzZTMueHNsIiAvPgorCis8IS0tCisKKyAgPHhzbDppbXBvcnQgaHJlZj0iLi4vdGVtcGxhdGUvMS43Ni4xL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworICA8eHNsOmltcG9ydAorCSAgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVua2VyLm91dHB1dC5pbmRlbnQiIHNlbGVjdD0iJ3llcyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5xdWlldGx5IiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5maXJzdC5zZWN0aW9ucyIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsuc2VjdGlvbi5kZXB0aCIgc2VsZWN0PSIxMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InVzZS5pZC5hcy5maWxlbmFtZSIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0idWxpbmsudGFyZ2V0IiBzZWxlY3Q9Iidfc2VsZiciIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYmFzZS5kaXIiIHNlbGVjdD0iJ2h0bWwvcHJvZmlsZS1tYW51YWwvJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSInLi4vYm9vay5jc3MnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZWNsaXBzZS5tYW5pZmVzdCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY3JlYXRlLnBsdWdpbi54bWwiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InN1cHByZXNzLm5hdmlnYXRpb24iIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmluZGV4IiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaGFwdGVyLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImFwcGVuZGl4LmF1dG9sYWJlbCI+QTwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwiIHNlbGVjdD0iMSIgLz4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtZXhhbXBsZXMueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWV4YW1wbGVzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjMwYzZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWV4YW1wbGVzLnhtbApAQCAtMCwwICsxLDM5IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ncHJvZmlsZS1tYW51YWwtZXhhbXBsZXMnPgorCis8dGl0bGU+UmVhbC1Xb3JsZCBFeGFtcGxlczwvdGl0bGU+CisKKzxwYXJhPgorICAgIFRoaXMgY2hhcHRlciBjb250YWlucyByZWFsLXdvcmxkIGV4YW1wbGVzLgorPC9wYXJhPgorCis8c2VjdGlvbiBpZD0nc2xvdy13cml0ZS1zcGVlZC1vbi1saXZlLWltYWdlcyc+CisgICAgPHRpdGxlPlNsb3cgV3JpdGUgU3BlZWQgb24gTGl2ZSBJbWFnZXM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEluIG9uZSBvZiBvdXIgcHJldmlvdXMgcmVsZWFzZXMgKGRlbnppbCksIHVzZXJzIG5vdGljZWQgdGhhdCBib290aW5nCisgICAgICAgIG9mZiBvZiBhIGxpdmUgaW1hZ2UgYW5kIHdyaXRpbmcgdG8gZGlzayB3YXMgbm90aWNlYWJseSBzbG93ZXIuCisgICAgICAgIFRoaXMgaW5jbHVkZWQgdGhlIGJvb3QgaXRzZWxmLCBlc3BlY2lhbGx5IHRoZSBmaXJzdCBvbmUsIHNpbmNlIGZpcnN0CisgICAgICAgIGJvb3RzIHRlbmQgdG8gZG8gYSBzaWduaWZpY2FudCBhbW91bnQgb2Ygd3JpdGluZyBkdWUgdG8gY2VydGFpbgorICAgICAgICBwb3N0LWluc3RhbGwgc2NyaXB0cy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIHByb2JsZW0gKGFuZCBzb2x1dGlvbikgd2FzIGRpc2NvdmVyZWQgYnkgdXNpbmcgdGhlIFlvY3RvIHRyYWNpbmcKKyAgICAgICAgdG9vbHMsIGluIHRoaXMgY2FzZSAncGVyZiBzdGF0JywgJ3BlcmYgc2NyaXB0JywgJ3BlcmYgcmVjb3JkJworICAgICAgICBhbmQgJ3BlcmYgcmVwb3J0Jy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgU2VlIGFsbCB0aGUgdW52YXJuaXNoZWQgZGV0YWlscyBvZiBob3cgdGhpcyBidWcgd2FzIGRpYWdub3NlZCBhbmQKKyAgICAgICAgc29sdmVkIGhlcmU6IFlvY3RvIEJ1ZyAjMzA0OQorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtaW50cm8ueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWludHJvLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzQ3ZjUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWludHJvLnhtbApAQCAtMCwwICsxLDEwMiBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J3Byb2ZpbGUtbWFudWFsLWludHJvJz4KKworPHRpdGxlPllvY3RvIFByb2plY3QgUHJvZmlsaW5nIGFuZCBUcmFjaW5nIE1hbnVhbDwvdGl0bGU+CisgICAgPHNlY3Rpb24gaWQ9J3Byb2ZpbGUtaW50cm8nPgorICAgICAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvY3RvIGJ1bmRsZXMgYSBudW1iZXIgb2YgdHJhY2luZyBhbmQgcHJvZmlsaW5nIHRvb2xzIC0gdGhpcyAnSE9XVE8nCisgICAgICAgICAgICBkZXNjcmliZXMgdGhlaXIgYmFzaWMgdXNhZ2UgYW5kIHNob3dzIGJ5IGV4YW1wbGUgaG93IHRvIG1ha2UgdXNlCisgICAgICAgICAgICBvZiB0aGVtIHRvIGV4YW1pbmUgYXBwbGljYXRpb24gYW5kIHN5c3RlbSBiZWhhdmlvci4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHRvb2xzIHByZXNlbnRlZCBhcmUgZm9yIHRoZSBtb3N0IHBhcnQgY29tcGxldGVseSBvcGVuLWVuZGVkIGFuZAorICAgICAgICAgICAgaGF2ZSBxdWl0ZSBnb29kIGFuZC9vciBleHRlbnNpdmUgZG9jdW1lbnRhdGlvbiBvZiB0aGVpciBvd24gd2hpY2gKKyAgICAgICAgICAgIGNhbiBiZSB1c2VkIHRvIHNvbHZlIGp1c3QgYWJvdXQgYW55IHByb2JsZW0geW91IG1pZ2h0IGNvbWUgYWNyb3NzCisgICAgICAgICAgICBpbiBMaW51eC4KKyAgICAgICAgICAgIEVhY2ggc2VjdGlvbiB0aGF0IGRlc2NyaWJlcyBhIHBhcnRpY3VsYXIgdG9vbCBoYXMgbGlua3MgdG8gdGhhdAorICAgICAgICAgICAgdG9vbCdzIGRvY3VtZW50YXRpb24gYW5kIHdlYnNpdGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgJ0hPV1RPJyBpcyB0byBwcmVzZW50IGEgc2V0IG9mIGNvbW1vbiBhbmQKKyAgICAgICAgICAgIGdlbmVyYWxseSB1c2VmdWwgdHJhY2luZyBhbmQgcHJvZmlsaW5nIGlkaW9tcyBhbG9uZyB3aXRoIHRoZWlyCisgICAgICAgICAgICBhcHBsaWNhdGlvbiAoYXMgYXBwcm9wcmlhdGUpIHRvIGVhY2ggdG9vbCwgaW4gdGhlIGNvbnRleHQgb2YgYQorICAgICAgICAgICAgZ2VuZXJhbC1wdXJwb3NlICdkcmlsbC1kb3duJyBtZXRob2RvbG9neSB0aGF0IGNhbiBiZSBhcHBsaWVkCisgICAgICAgICAgICB0byBzb2x2aW5nIGEgbGFyZ2UgbnVtYmVyICg5MCU/KSBvZiBwcm9ibGVtcy4KKyAgICAgICAgICAgIEZvciBoZWxwIHdpdGggbW9yZSBhZHZhbmNlZCB1c2FnZXMgYW5kIHByb2JsZW1zLCBwbGVhc2Ugc2VlCisgICAgICAgICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igd2Vic2l0ZXMgbGlzdGVkIGZvciBlYWNoIHRvb2wuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmaW5hbCBzZWN0aW9uIG9mIHRoaXMgJ0hPV1RPJyBpcyBhIGNvbGxlY3Rpb24gb2YgcmVhbC13b3JsZAorICAgICAgICAgICAgZXhhbXBsZXMgd2hpY2ggd2UnbGwgYmUgY29udGludWFsbHkgYWRkaW5nIHRvIGFzIHdlIHNvbHZlIG1vcmUKKyAgICAgICAgICAgIHByb2JsZW1zIHVzaW5nIHRoZSB0b29scyAtIGZlZWwgZnJlZSB0byBhZGQgeW91ciBvd24gZXhhbXBsZXMKKyAgICAgICAgICAgIHRvIHRoZSBsaXN0IQorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3Byb2ZpbGUtbWFudWFsLWdlbmVyYWwtc2V0dXAnPgorICAgICAgICA8dGl0bGU+R2VuZXJhbCBTZXR1cDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBNb3N0IG9mIHRoZSB0b29scyBhcmUgYXZhaWxhYmxlIG9ubHkgaW4gJ3NkaycgaW1hZ2VzIG9yIGluIGltYWdlcworICAgICAgICAgICAgYnVpbHQgYWZ0ZXIgYWRkaW5nICd0b29scy1wcm9maWxlJyB0byB5b3VyIGxvY2FsLmNvbmYuCisgICAgICAgICAgICBTbywgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBhY2Nlc3MgYWxsIG9mIHRoZSB0b29scyBkZXNjcmliZWQgaGVyZSwKKyAgICAgICAgICAgIHBsZWFzZSBmaXJzdCBidWlsZCBhbmQgYm9vdCBhbiAnc2RrJyBpbWFnZSBlLmcuCisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBjb3JlLWltYWdlLXNhdG8tc2RrCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBvciBhbHRlcm5hdGl2ZWx5IGJ5IGFkZGluZyAndG9vbHMtcHJvZmlsZScgdG8gdGhlCisgICAgICAgICAgICBFWFRSQV9JTUFHRV9GRUFUVVJFUyBsaW5lIGluIHlvdXIgbG9jYWwuY29uZjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIEVYVFJBX0lNQUdFX0ZFQVRVUkVTID0gImRlYnVnLXR3ZWFrcyB0b29scy1wcm9maWxlIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSWYgeW91IHVzZSB0aGUgJ3Rvb2xzLXByb2ZpbGUnIG1ldGhvZCwgeW91IGRvbid0IG5lZWQgdG8gYnVpbGQgYW4KKyAgICAgICAgICAgIHNkayBpbWFnZSAtIHRoZSB0cmFjaW5nIGFuZCBwcm9maWxpbmcgdG9vbHMgd2lsbCBiZSBpbmNsdWRlZCBpbgorICAgICAgICAgICAgbm9uLXNkayBpbWFnZXMgYXMgd2VsbCBlLmcuOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8bm90ZT48cGFyYT4KKyAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgWW9jdG8gYnVpbGQgc3lzdGVtIHN0cmlwcyBzeW1ib2xzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgYmluYXJpZXMgaXQgcGFja2FnZXMsIHdoaWNoIG1ha2VzIGl0IGRpZmZpY3VsdCB0byB1c2Ugc29tZQorICAgICAgICAgICAgICAgIG9mIHRoZSB0b29scy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PHBhcmE+WW91IGNhbiBwcmV2ZW50IHRoYXQgYnkgcHV0dGluZyB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgaW4geW91ciBsb2NhbC5jb25mIHdoZW4geW91IGJ1aWxkIHRoZSBpbWFnZToKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSElCSVRfUEFDS0FHRV9TVFJJUCA9ICIxIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIGFib3ZlIHNldHRpbmcgd2lsbCBub3RpY2VhYmx5IGluY3JlYXNlIHRoZSBzaXplIG9mIHlvdXIgaW1hZ2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSd2ZSBhbHJlYWR5IGJ1aWx0IGEgc3RyaXBwZWQgaW1hZ2UsIHlvdSBjYW4gZ2VuZXJhdGUKKyAgICAgICAgICAgIGRlYnVnIHBhY2thZ2VzICh4eHgtZGJnKSB3aGljaCB5b3UgY2FuIG1hbnVhbGx5IGluc3RhbGwgYXMKKyAgICAgICAgICAgIG5lZWRlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gZ2VuZXJhdGUgZGVidWcgaW5mbyBmb3IgcGFja2FnZXMsIHlvdSBjYW4gYWRkIGRiZy1wa2dzIHRvCisgICAgICAgICAgICBFWFRSQV9JTUFHRV9GRUFUVVJFUyBpbiBsb2NhbC5jb25mLiBGb3IgZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRVhUUkFfSU1BR0VfRkVBVFVSRVMgPSAiZGVidWctdHdlYWtzIHRvb2xzLXByb2ZpbGUgZGJnLXBrZ3MiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBBZGRpdGlvbmFsbHksIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSByaWdodCB0eXBlIG9mCisgICAgICAgICAgICBkZWJ1Z2luZm8sIHdlIGFsc28gbmVlZCB0byBhZGQgdGhlIGZvbGxvd2luZyB0byBsb2NhbC5jb25mOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxFID0gJ2RlYnVnLWZpbGUtZGlyZWN0b3J5JworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtc3R5bGUuY3NzIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLXN0eWxlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2NjYTg1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLXN0eWxlLmNzcwpAQCAtMCwwICsxLDk4NCBAQAorLyoKKyAgIEdlbmVyaWMgWEhUTUwgLyBEb2NCb29rIFhIVE1MIENTUyBTdHlsZXNoZWV0LgorCisgICBCcm93c2VyIHdyYW5nbGluZyBhbmQgdHlwb2dyYXBoaWMgZGVzaWduIGJ5CisgICAgICBPeXZpbmQgS29sYXMgLyBwaXBwaW5AZ2ltcC5vcmcKKworICAgQ3VzdG9taXNlZCBmb3IgUG9reSBieQorICAgICAgTWF0dGhldyBBbGx1bSAvIG1hbGx1bUBvLWhhbmQuY29tCisKKyAgIFRoYW5rcyB0bzoKKyAgICAgTGlhbSBSLiBFLiBRdWluCisgICAgIFdpbGxpYW0gU2thZ2dzCisgICAgIEpha3ViIFN0ZWluZXIKKworICAgU3RydWN0dXJlCisgICAtLS0tLS0tLS0KKworICAgVGhlIHN0eWxlc2hlZXQgaXMgZGl2aWRlZCBpbnRvIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnM6CisKKyAgICAgICBQb3NpdGlvbmluZworICAgICAgICAgIE1hcmdpbnMsIHBhZGRpbmdzLCB3aWR0aCwgZm9udC1zaXplLCBjbGVhcmluZy4KKyAgICAgICBEZWNvcmF0aW9ucworICAgICAgICAgIEJvcmRlcnMsIHN0eWxlCisgICAgICAgQ29sb3JzCisgICAgICAgICAgQ29sb3JzCisgICAgICAgR3JhcGhpY3MKKyAgICAgICAgICBHcmFwaGljYWwgYmFja2dyb3VuZHMKKyAgICAgICBOYXN0eSBJRSB0d2Vha3MKKyAgICAgICAgICBXb3JrYXJvdW5kcyBuZWVkZWQgdG8gbWFrZSBpdCB3b3JrIGluIGludGVybmV0IGV4cGxvcmVyLAorICAgICAgICAgIGN1cnJlbnRseSBtYWtlcyB0aGUgc3R5bGVzaGVldCBub24gdmFsaWRhdGluZywgYnV0IHVwIHVudGlsCisgICAgICAgICAgdGhpcyBwb2ludCBpdCBpcyB2YWxpZGF0aW5nLgorICAgICAgIE1vemlsbGEgZXh0ZW5zaW9ucworICAgICAgICAgIFRyYW5zcGFyZW5jeSBmb3IgZm9vdGVyCisJICBSb3VuZGVkIGNvcm5lcnMgb24gYm94ZXMKKworKi8KKworCisgIC8qKioqKioqKioqKioqKiogLworIC8gIFBvc2l0aW9uaW5nICAgLworLyAqKioqKioqKioqKioqKiovCisKK2JvZHkgeworICBmb250LWZhbWlseTogVmVyZGFuYSwgU2Fucywgc2Fucy1zZXJpZjsKKworICBtaW4td2lkdGg6IDY0MHB4OworICB3aWR0aDogODAlOworICBtYXJnaW46ICAwZW0gYXV0bzsKKyAgcGFkZGluZzogMmVtIDVlbSA1ZW0gNWVtOworICBjb2xvcjogIzMzMzsKK30KKworaDEsaDIsaDMsaDQsaDUsaDYsaDcgeworICBmb250LWZhbWlseTogQXJpYWwsIFNhbnM7CisgIGNvbG9yOiAjMDA1NTdEOworICBjbGVhcjogYm90aDsKK30KKworaDEgeworICBmb250LXNpemU6IDJlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDJlbSAwZW0gMGVtIDBlbTsKK30KKworaDIuc3VidGl0bGUgeworICBtYXJnaW46IDAuMTBlbSAwZW0gMy4wZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS44ZW07CisgIHBhZGRpbmctbGVmdDogMjAlOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK2gyIHsKKyAgbWFyZ2luOiAyZW0gMGVtIDAuNjZlbSAwZW07CisgIHBhZGRpbmc6IDAuNWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuNWVtOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDMuc3VidGl0bGUgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0Mi4xNCU7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitoMyB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDQgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTIwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g1IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNiB7CisgIG1hcmdpbjogMWVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy5hdXRob3Jncm91cCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBwYWRkaW5nLXRvcDogMjU2cHg7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy9wcm9maWxlLXRpdGxlLnBuZyIpOworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IHRvcDsKKyAgbWFyZ2luLXRvcDogLTI1NnB4OworICBwYWRkaW5nLXJpZ2h0OiA1MHB4OworICBtYXJnaW4tbGVmdDogMHB4OworICB0ZXh0LWFsaWduOiByaWdodDsKKyAgd2lkdGg6IDc0MHB4OworfQorCitoMy5hdXRob3IgeworICBtYXJnaW46IDBlbSAwbWUgMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXNpemU6IDEwMCU7CisgIGNvbG9yOiAjMzMzOworICBjbGVhcjogYm90aDsKK30KKworLmF1dGhvciB0dC5lbWFpbCB7CisgIGZvbnQtc2l6ZTogNjYlOworfQorCisudGl0bGVwYWdlIGhyIHsKKyAgd2lkdGg6IDBlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5yZXZoaXN0b3J5IHsKKyAgcGFkZGluZy10b3A6IDJlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy50b2MsCisubGlzdC1vZi10YWJsZXMsCisubGlzdC1vZi1leGFtcGxlcywKKy5saXN0LW9mLWZpZ3VyZXMgeworICBwYWRkaW5nOiAxLjMzZW0gMGVtIDIuNWVtIDBlbTsKKyAgY29sb3I6ICMwMDU1N0Q7Cit9CisKKy50b2MgcCwKKy5saXN0LW9mLXRhYmxlcyBwLAorLmxpc3Qtb2YtZmlndXJlcyBwLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwLjNlbTsKKyAgbWFyZ2luOiAxLjVlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBwIGIsCisubGlzdC1vZi10YWJsZXMgcCBiLAorLmxpc3Qtb2YtZmlndXJlcyBwIGIsCisubGlzdC1vZi1leGFtcGxlcyBwIGJ7CisgIGZvbnQtc2l6ZTogMTAwLjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLnRvYyBkbCwKKy5saXN0LW9mLXRhYmxlcyBkbCwKKy5saXN0LW9mLWZpZ3VyZXMgZGwsCisubGlzdC1vZi1leGFtcGxlcyBkbCB7CisgIG1hcmdpbjogMGVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkdCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZGQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDIuNmVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5nbG9zc2FyeSBkbCwKK2Rpdi52YXJpYWJsZWxpc3QgZGwgeworfQorCisuZ2xvc3NhcnkgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCBzcGFuLnRlcm0geworICBmb250LXdlaWdodDogbm9ybWFsOworICB3aWR0aDogMjBlbTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKKy52YXJpYWJsZWxpc3QgZGwgZHQgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKK30KKworLmdsb3NzYXJ5IGRsIGRkLAorLnZhcmlhYmxlbGlzdCBkbCBkZCB7CisgIG1hcmdpbi10b3A6IC0xZW07CisgIG1hcmdpbi1sZWZ0OiAyNS41ZW07Cit9CisKKy5nbG9zc2FyeSBkZCBwLAorLnZhcmlhYmxlbGlzdCBkZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKworZGl2LmNhbGxvdXRsaXN0IHRhYmxlIHRkIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKK30KKworZGl2LmNhbGxvdXRsaXN0IHRhYmxlIHRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworZGl2IHAuY29weXJpZ2h0IHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworZGl2LmxlZ2Fsbm90aWNlIHAubGVnYWxub3RpY2UtdGl0bGUgeworICBtYXJnaW4tYm90dG9tOiAwZW07Cit9CisKK3AgeworICBsaW5lLWhlaWdodDogMS41ZW07CisgIG1hcmdpbi10b3A6IDBlbTsKKworfQorCitkbCB7CisgIHBhZGRpbmctdG9wOiAwZW07Cit9CisKK2hyIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKKworLm1lZGlhb2JqZWN0LAorLm1lZGlhb2JqZWN0Y28geworICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKK2ltZyB7CisgIGJvcmRlcjogbm9uZTsKK30KKwordWwgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAxLjVlbTsKK30KKwordWwgbGkgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK3VsIGxpIHAgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCit0YWJsZSB7CisgIHdpZHRoIDoxMDAlOworfQorCit0aCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKwordGQgeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3AgYVtpZF0geworICBtYXJnaW46IDBweDsKKyAgcGFkZGluZzogMHB4OworICBkaXNwbGF5OiBpbmxpbmU7CisgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7Cit9CisKK2EgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgY29sb3I6ICM0NDQ7Cit9CisKK3ByZSB7CisgICAgb3ZlcmZsb3c6IGF1dG87Cit9CisKK2E6aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgLypmb250LXdlaWdodDogYm9sZDsqLworfQorCisvKiBUaGlzIHN0eWxlIGRlZmluZXMgaG93IHRoZSBwZXJtYWxpbmsgY2hhcmFjdGVyCisgICBhcHBlYXJzIGJ5IGl0c2VsZiBhbmQgd2hlbiBob3ZlcmVkIG92ZXIgd2l0aAorICAgdGhlIG1vdXNlLiAqLworCitbYWx0PSdQZXJtYWxpbmsnXSB7IGNvbG9yOiAjZWVlOyB9CitbYWx0PSdQZXJtYWxpbmsnXTpob3ZlciB7IGNvbG9yOiBibGFjazsgfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSB7CisgIG1hcmdpbjogMWVtIDBlbTsKKyAgcGFkZGluZzogMWVtOworICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7Cit9CisKKworZGl2LmluZm9ybWFsZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsdGFibGUgcC50aXRsZSBiLAorZGl2LmZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYudGFibGUgcC50aXRsZSBieworICAgIHBhZGRpbmctdG9wOiAwZW07CisgICAgbWFyZ2luLXRvcDogMGVtOworICAgIGZvbnQtc2l6ZTogMTAwJTsKKyAgICBmb250LXdlaWdodDogbm9ybWFsOworfQorCisubWVkaWFvYmplY3QgLmNhcHRpb24sCisubWVkaWFvYmplY3QgLmNhcHRpb24gcCAgeworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIGZvbnQtc2l6ZTogODAlOworICBwYWRkaW5nLXRvcDogMC41ZW07CisgIHBhZGRpbmctYm90dG9tOiAwLjVlbTsKK30KKworLmVwaWdyYXBoIHsKKyAgcGFkZGluZy1sZWZ0OiA1NSU7CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworLmVwaWdyYXBoIHAgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisuZXBpZ3JhcGggLnF1b3RlIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorLmVwaWdyYXBoIC5hdHRyaWJ1dGlvbiB7CisgIGZvbnQtc3R5bGU6IG5vcm1hbDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK3NwYW4uYXBwbGljYXRpb24geworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgIGZvbnQtc2l6ZTogODAlOworICB3aGl0ZS1zcGFjZTogcHJlOworICBtYXJnaW46IDEuMzNlbSAwZW07CisgIHBhZGRpbmc6IDEuMzNlbTsKK30KKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIG1hcmdpbi10b3A6IDFlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworCit9CisKKy8qIGZvcmNlIGZ1bGwgd2lkdGggb2YgdGFibGUgd2l0aGluIGRpdiAqLworLnRpcCB0YWJsZSwKKy53YXJuaW5nIHRhYmxlLAorLmNhdXRpb24gdGFibGUsCisubm90ZSB0YWJsZSB7CisgIGJvcmRlcjogbm9uZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIHBhZGRpbmc6IDAuOGVtIDAuMGVtIDAuMGVtIDAuMGVtOworICBtYXJnaW4gOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50aXAgcCwKKy53YXJuaW5nIHAsCisuY2F1dGlvbiBwLAorLm5vdGUgcCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKKyAgcGFkZGluZy1yaWdodDogMWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisuYWNyb255bSB7CisgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cit9CisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIHBhZGRpbmc6IDAuMDllbSAwLjNlbTsKKyAgbWFyZ2luOiAwZW07Cit9CisKKy5pdGVtaXplZGxpc3QgbGkgeworICBjbGVhcjogbm9uZTsKK30KKworLmZpbGVuYW1lIHsKKyAgZm9udC1zaXplOiBtZWRpdW07CisgIGZvbnQtZmFtaWx5OiBDb3VyaWVyLCBtb25vc3BhY2U7Cit9CisKKworZGl2Lm5hdmhlYWRlciwgZGl2LmhlYWRpbmd7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgbGVmdDogMGVtOworICB0b3A6IDBlbTsKKyAgd2lkdGg6IDEwMCU7CisgIGJhY2tncm91bmQtY29sb3I6ICNjZGY7CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgcG9zaXRpb246IGZpeGVkOworICBsZWZ0OiAwZW07CisgIGJvdHRvbTogMGVtOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICB3aWR0aDogMTAwJTsKK30KKworCitkaXYubmF2aGVhZGVyIHRkLAorZGl2Lm5hdmZvb3RlciB0ZCB7CisgIGZvbnQtc2l6ZTogNjYlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRoIHsKKyAgLypmb250LWZhbWlseTogR2VvcmdpYSwgVGltZXMsIHNlcmlmOyovCisgIC8qZm9udC1zaXplOiB4LWxhcmdlOyovCisgIGZvbnQtc2l6ZTogODAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci10b3A6IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhIHsKKyAgY29sb3I6ICM3Nzc7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKworLyogbm9ybWFsIHRleHQgaW4gdGhlIGZvb3RlciAqLworZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCB7CisgIGNvbG9yOiBibGFjazsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOnZpc2l0ZWQsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGE6dmlzaXRlZCB7CisgIGNvbG9yOiAjNDQ0OworfQorCisKKy8qIGxpbmtzIGluIGhlYWRlciBhbmQgZm9vdGVyICovCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6aG92ZXIsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGE6aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGNvbG9yOiAjMzNhOworfQorCitkaXYubmF2aGVhZGVyIGhyLAorZGl2Lm5hdmZvb3RlciBociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKworLnFhbmRhc2V0IHRyLnF1ZXN0aW9uIHRkIHAgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisucWFuZGFzZXQgdHIuYW5zd2VyIHRkIHAgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorLmFuc3dlciB0ZCB7CisgIHBhZGRpbmctYm90dG9tOiAxLjVlbTsKK30KKworLmVtcGhhc2lzIHsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKworICAvKioqKioqKioqKioqKiAvCisgLyBkZWNvcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqLworCisudGl0bGVwYWdlIHsKK30KKworLnBhcnQgLnRpdGxlIHsKK30KKworLnN1YnRpdGxlIHsKKyAgICBib3JkZXI6IG5vbmU7Cit9CisKKy8qCitoMSB7CisgIGJvcmRlcjogbm9uZTsKK30KKworaDIgeworICBib3JkZXItdG9wOiBzb2xpZCAwLjJlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoMyB7CisgIGJvcmRlci10b3A6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNCB7CisgIGJvcmRlcjogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g1IHsKKyAgYm9yZGVyOiAwZW07Cit9CisqLworCisucHJvZ3JhbWxpc3RpbmcgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5leGFtcGxlIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKworCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKy5xdWVzdGlvbiB0ZCB7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsKK30KKworLmFuc3dlciB7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmhlYWRlciwgZGl2LmhlYWRpbmd7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkOworfQorCisgIC8qKioqKioqKiogLworIC8gIGNvbG9ycyAgLworLyAqKioqKioqKiovCisKK2JvZHkgeworICBjb2xvcjogIzMzMzsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisKK2EgeworICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKK30KKworYTpob3ZlciB7CisgIGJhY2tncm91bmQtY29sb3I6ICNkZWRlZGU7Cit9CisKKworaDEsCitoMiwKK2gzLAoraDQsCitoNSwKK2g2LAoraDcsCitoOCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworfQorCitociB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworCisudGlwLCAud2FybmluZywgLmNhdXRpb24sIC5ub3RlIHsKKyAgYm9yZGVyLWNvbG9yOiAjZmZmOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmOworfQorCisKKy53YXJuaW5nIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisudGlwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLm5vdGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuZ2xvc3NhcnkgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCBzcGFuLnRlcm0geworICBjb2xvcjogIzA0NDsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCitwcmUucHJvZ3JhbWxpc3RpbmcgeworICBjb2xvcjogYmxhY2s7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKKyAgYm9yZGVyLXdpZHRoOiAycHg7Cit9CisKKy5ndWltZW51LAorLmd1aWxhYmVsLAorLmd1aW1lbnVpdGVtIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICBib3JkZXItY29sb3I6ICM5OTk7Cit9CisKKworZGl2Lm5hdmhlYWRlciB7CisgIGJvcmRlci1jb2xvcjogYmxhY2s7Cit9CisKKworZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlci1jb2xvcjogYmxhY2s7Cit9CisKKworICAvKioqKioqKioqKiogLworIC8gIGdyYXBoaWNzICAvCisvICoqKioqKioqKioqLworCisvKgorYm9keSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2JvZHlfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5uYXZoZWFkZXIsCisubm90ZSwKKy50aXAgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ub3RlX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisud2FybmluZywKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvd2FybmluZ19iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLmZpZ3VyZSwKKy5pbmZvcm1hbGZpZ3VyZSwKKy5leGFtcGxlLAorLmluZm9ybWFsZXhhbXBsZSwKKy50YWJsZSwKKy5pbmZvcm1hbHRhYmxlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvZmlndXJlX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisqLworaDEsCitoMiwKK2gzLAoraDQsCitoNSwKK2g2LAoraDd7Cit9CisKKy8qCitFeGFtcGxlIG9mIGhvdyB0byBzdGljayBhbiBpbWFnZSBhcyBwYXJ0IG9mIHRoZSB0aXRsZS4KKworZGl2LmFydGljbGUgLnRpdGxlcGFnZSAudGl0bGUKK3sKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL3doaXRlLW9uLWJsYWNrLnBuZyIpOworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKK30KKyovCisKK2Rpdi5wcmVmYWNlIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LmNvbG9waG9uIC50aXRsZSwKK2Rpdi5jaGFwdGVyIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LmFydGljbGUgLnRpdGxlcGFnZSAudGl0bGUKK3sKK30KKworZGl2LnNlY3Rpb24gZGl2LnNlY3Rpb24gLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuc2VjdDIgLnRpdGxlcGFnZSAudGl0bGUgeworICAgIGJhY2tncm91bmQ6IG5vbmU7Cit9CisKKworaDEudGl0bGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgaGVpZ2h0OiAyNTZweDsKKyAgdGV4dC1pbmRlbnQ6IC05MDAwcHg7CisgIG92ZXJmbG93OmhpZGRlbjsKK30KKworaDIuc3VidGl0bGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgdGV4dC1pbmRlbnQ6IC05MDAwcHg7CisgIG92ZXJmbG93OmhpZGRlbjsKKyAgd2lkdGg6IDBweDsKKyAgZGlzcGxheTogbm9uZTsKK30KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8KKyAvICBwaXBwaW4uZ2ltcC5vcmcgc3BlY2lmaWMgYWx0ZXJhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorZGl2LmhlYWRpbmcsIGRpdi5uYXZoZWFkZXIgeworICBjb2xvcjogIzc3NzsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmc6IDA7CisgIG1hcmdpbjogMDsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDBweDsKKyAgbGVmdDogMHB4OworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiA1MHB4OworICBiYWNrZ3JvdW5kOiB1cmwoJy9nZngvaGVhZGluZ19iZy5wbmcnKSB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworICBib3JkZXI6IG5vbmU7Cit9CisKK2Rpdi5oZWFkaW5nIGEgeworICBjb2xvcjogIzQ0NDsKK30KKworZGl2LmZvb3RpbmcsIGRpdi5uYXZmb290ZXIgeworICBib3JkZXI6IG5vbmU7CisgIGNvbG9yOiAjZGRkOworICBmb250LXNpemU6IDgwJTsKKyAgdGV4dC1hbGlnbjpyaWdodDsKKworICB3aWR0aDogMTAwJTsKKyAgcGFkZGluZy10b3A6IDEwcHg7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgYm90dG9tOiAwcHg7CisgIGxlZnQ6IDBweDsKKworICBiYWNrZ3JvdW5kOiB1cmwoJy9nZngvZm9vdGluZ19iZy5wbmcnKSB0cmFuc3BhcmVudDsKK30KKyovCisKKworCisgIC8qKioqKioqKioqKioqKioqKiogLworIC8gIG5hc3R5IGllIHR3ZWFrcyAgLworLyAqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIHdpZHRoOmV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCArICJweCIpOworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIHdpZHRoOmV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCArICJweCIpOworICBtYXJnaW4tbGVmdDpleHByZXNzaW9uKCItNWVtIik7Cit9Citib2R5IHsKKyAgcGFkZGluZzpleHByZXNzaW9uKCI0ZW0gNWVtIDBlbSA1ZW0iKTsKK30KKyovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gbW96aWxsYSB2ZW5kb3Igc3BlY2lmaWMgY3NzIGV4dGVuc2lvbnMgIC8KKy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgLW1vei1vcGFjaXR5OiAwLjhlbTsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5leGFtcGxlLAorLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMC41ZW07Cit9CisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMC4zZW07Cit9CisqLworCit0YWJsZSB0ciB0ZCB0YWJsZSB0ciB0ZCB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKworaHIgeworICBkaXNwbGF5OiBub25lOworfQorCit0YWJsZSB7CisgIGJvcmRlcjogMGVtOworfQorCisgLnBob3RvIHsKKyAgZmxvYXQ6IHJpZ2h0OworICBtYXJnaW4tbGVmdDogICAxLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMS41ZW07CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWF4LXdpZHRoOiAgICAgIDE3ZW07CisgIGJvcmRlcjogICAgIDFweCBzb2xpZCBncmF5OworICBwYWRkaW5nOiAgICAzcHg7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorIC5zZXBlcmF0b3IgeworICAgcGFkZGluZy10b3A6IDJlbTsKKyAgIGNsZWFyOiBib3RoOworICB9CisKKyAgI3ZhbGlkYXRvcnMgeworICAgICAgbWFyZ2luLXRvcDogNWVtOworICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICBjb2xvcjogIzc3NzsKKyAgfQorICBAbWVkaWEgcHJpbnQgeworICAgICAgYm9keSB7CisgICAgICAgICAgZm9udC1zaXplOiA4cHQ7CisgICAgICB9CisgICAgICAubm9wcmludCB7CisgICAgICAgICAgZGlzcGxheTogbm9uZTsKKyAgICAgIH0KKyAgfQorCisKKy50aXAsCisubm90ZSB7CisgICBiYWNrZ3JvdW5kOiAjZjBmMGYyOworICAgY29sb3I6ICMzMzM7CisgICBwYWRkaW5nOiAyMHB4OworICAgbWFyZ2luOiAyMHB4OworfQorCisudGlwIGgzLAorLm5vdGUgaDMgeworICAgcGFkZGluZzogMGVtOworICAgbWFyZ2luOiAwZW07CisgICBmb250LXNpemU6IDJlbTsKKyAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgY29sb3I6ICMzMzM7Cit9CisKKy50aXAgYSwKKy5ub3RlIGEgeworICAgY29sb3I6ICMzMzM7CisgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworLmZvb3Rub3RlIHsKKyAgIGZvbnQtc2l6ZTogc21hbGw7CisgICBjb2xvcjogIzMzMzsKK30KKworLyogQ2hhbmdlcyB0aGUgYW5ub3VuY2VtZW50IHRleHQgKi8KKy50aXAgaDMsCisud2FybmluZyBoMywKKy5jYXV0aW9uIGgzLAorLm5vdGUgaDMgeworICAgZm9udC1zaXplOmxhcmdlOworICAgY29sb3I6ICMwMDU1N0Q7Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtdXNhZ2UueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLXVzYWdlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWFkNzM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLXVzYWdlLnhtbApAQCAtMCwwICsxLDM2OTUgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdwcm9maWxlLW1hbnVhbC11c2FnZSc+CisKKzx0aXRsZT5CYXNpYyBVc2FnZSAod2l0aCBleGFtcGxlcykgZm9yIGVhY2ggb2YgdGhlIFlvY3RvIFRyYWNpbmcgVG9vbHM8L3RpdGxlPgorCis8cGFyYT4KKyAgICBUaGlzIGNoYXB0ZXIgcHJlc2VudHMgYmFzaWMgdXNhZ2UgZXhhbXBsZXMgZm9yIGVhY2ggb2YgdGhlIHRyYWNpbmcKKyAgICB0b29scy4KKzwvcGFyYT4KKworPHNlY3Rpb24gaWQ9J3Byb2ZpbGUtbWFudWFsLXBlcmYnPgorICAgIDx0aXRsZT5wZXJmPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgJ3BlcmYnIHRvb2wgaXMgdGhlIHByb2ZpbGluZyBhbmQgdHJhY2luZyB0b29sIHRoYXQgY29tZXMKKyAgICAgICAgYnVuZGxlZCB3aXRoIHRoZSBMaW51eCBrZXJuZWwuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIERvbid0IGxldCB0aGUgZmFjdCB0aGF0IGl0J3MgcGFydCBvZiB0aGUga2VybmVsIGZvb2wgeW91IGludG8gdGhpbmtpbmcKKyAgICAgICAgdGhhdCBpdCdzIG9ubHkgZm9yIHRyYWNpbmcgYW5kIHByb2ZpbGluZyB0aGUga2VybmVsIC0geW91IGNhbiBpbmRlZWQKKyAgICAgICAgdXNlIGl0IHRvIHRyYWNlIGFuZCBwcm9maWxlIGp1c3QgdGhlIGtlcm5lbCwgYnV0IHlvdSBjYW4gYWxzbyB1c2UgaXQKKyAgICAgICAgdG8gcHJvZmlsZSBzcGVjaWZpYyBhcHBsaWNhdGlvbnMgc2VwYXJhdGVseSAod2l0aCBvciB3aXRob3V0IGtlcm5lbAorICAgICAgICBjb250ZXh0KSwgYW5kIHlvdSBjYW4gYWxzbyB1c2UgaXQgdG8gdHJhY2UgYW5kIHByb2ZpbGUgdGhlIGtlcm5lbAorICAgICAgICBhbmQgYWxsIGFwcGxpY2F0aW9ucyBvbiB0aGUgc3lzdGVtIHNpbXVsdGFuZW91c2x5IHRvIGdhaW4gYSBzeXN0ZW0td2lkZQorICAgICAgICB2aWV3IG9mIHdoYXQncyBnb2luZyBvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSW4gbWFueSB3YXlzLCBwZXJmIGFpbXMgdG8gYmUgYSBzdXBlcnNldCBvZiBhbGwgdGhlIHRyYWNpbmcgYW5kIHByb2ZpbGluZworICAgICAgICB0b29scyBhdmFpbGFibGUgaW4gTGludXggdG9kYXksIGluY2x1ZGluZyBhbGwgdGhlIG90aGVyIHRvb2xzIGNvdmVyZWQKKyAgICAgICAgaW4gdGhpcyBIT1dUTy4gVGhlIHBhc3QgY291cGxlIG9mIHllYXJzIGhhdmUgc2VlbiBwZXJmIHN1YnN1bWUgYSBsb3QKKyAgICAgICAgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhvc2Ugb3RoZXIgdG9vbHMgYW5kLCBhdCB0aGUgc2FtZSB0aW1lLCB0aG9zZQorICAgICAgICBvdGhlciB0b29scyBoYXZlIHJlbW92ZWQgbGFyZ2UgcG9ydGlvbnMgb2YgdGhlaXIgcHJldmlvdXMgZnVuY3Rpb25hbGl0eQorICAgICAgICBhbmQgcmVwbGFjZWQgaXQgd2l0aCBjYWxscyB0byB0aGUgZXF1aXZhbGVudCBmdW5jdGlvbmFsaXR5IG5vdworICAgICAgICBpbXBsZW1lbnRlZCBieSB0aGUgcGVyZiBzdWJzeXN0ZW0uIEV4dHJhcG9sYXRpb24gc3VnZ2VzdHMgdGhhdCBhdAorICAgICAgICBzb21lIHBvaW50IHRob3NlIG90aGVyIHRvb2xzIHdpbGwgc2ltcGx5IGJlY29tZSBjb21wbGV0ZWx5IHJlZHVuZGFudAorICAgICAgICBhbmQgZ28gYXdheTsgdW50aWwgdGhlbiwgd2UnbGwgY292ZXIgdGhvc2Ugb3RoZXIgdG9vbHMgaW4gdGhlc2UgcGFnZXMKKyAgICAgICAgYW5kIGluIG1hbnkgY2FzZXMgc2hvdyBob3cgdGhlIHNhbWUgdGhpbmdzIGNhbiBiZSBhY2NvbXBsaXNoZWQgaW4KKyAgICAgICAgcGVyZiBhbmQgdGhlIG90aGVyIHRvb2xzIHdoZW4gaXQgc2VlbXMgdXNlZnVsIHRvIGRvIHNvLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgY292ZXJhZ2UgYmVsb3cgZGV0YWlscyBzb21lIG9mIHRoZSBtb3N0IGNvbW1vbiB3YXlzIHlvdSdsbCBsaWtlbHkKKyAgICAgICAgd2FudCB0byBhcHBseSB0aGUgdG9vbDsgZnVsbCBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBlaXRoZXIgd2l0aGluCisgICAgICAgIHRoZSB0b29sIGl0c2VsZiBvciBpbiB0aGUgbWFuIHBhZ2VzIGF0CisgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi8xL3BlcmYnPnBlcmYoMSk8L3VsaW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ncGVyZi1zZXR1cCc+CisgICAgICAgIDx0aXRsZT5TZXR1cDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgdGhpcyBzZWN0aW9uLCB3ZSdsbCBhc3N1bWUgeW91J3ZlIGFscmVhZHkgcGVyZm9ybWVkIHRoZSBiYXNpYworICAgICAgICAgICAgc2V0dXAgb3V0bGluZWQgaW4gdGhlIEdlbmVyYWwgU2V0dXAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW4gcGFydGljdWxhciwgeW91J2xsIGdldCB0aGUgbW9zdCBtaWxlYWdlIG91dCBvZiBwZXJmIGlmIHlvdQorICAgICAgICAgICAgcHJvZmlsZSBhbiBpbWFnZSBidWlsdCB3aXRoIElOSElCSVRfUEFDS0FHRV9TVFJJUCA9ICIxIiBpbiB5b3VyCisgICAgICAgICAgICBsb2NhbC5jb25mLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBwZXJmIHJ1bnMgb24gdGhlIHRhcmdldCBzeXN0ZW0gZm9yIHRoZSBtb3N0IHBhcnQuIFlvdSBjYW4gYXJjaGl2ZQorICAgICAgICAgICAgcHJvZmlsZSBkYXRhIGFuZCBjb3B5IGl0IHRvIHRoZSBob3N0IGZvciBhbmFseXNpcywgYnV0IGZvciB0aGUKKyAgICAgICAgICAgIHJlc3Qgb2YgdGhpcyBkb2N1bWVudCB3ZSBhc3N1bWUgeW91J3ZlIHNzaCdlZCB0byB0aGUgaG9zdCBhbmQKKyAgICAgICAgICAgIHdpbGwgYmUgcnVubmluZyB0aGUgcGVyZiBjb21tYW5kcyBvbiB0aGUgdGFyZ2V0LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3BlcmYtYmFzaWMtdXNhZ2UnPgorICAgICAgICA8dGl0bGU+QmFzaWMgVXNhZ2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHBlcmYgdG9vbCBpcyBwcmV0dHkgbXVjaCBzZWxmLWRvY3VtZW50aW5nLiBUbyByZW1pbmQgeW91cnNlbGYKKyAgICAgICAgICAgIG9mIHRoZSBhdmFpbGFibGUgY29tbWFuZHMsIHNpbXBseSB0eXBlICdwZXJmJywgd2hpY2ggd2lsbCBzaG93IHlvdQorICAgICAgICAgICAgYmFzaWMgdXNhZ2UgYWxvbmcgd2l0aCB0aGUgYXZhaWxhYmxlIHBlcmYgc3ViY29tbWFuZHM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZgorCisgICAgIHVzYWdlOiBwZXJmIFstLXZlcnNpb25dIFstLWhlbHBdIENPTU1BTkQgW0FSR1NdCisKKyAgICAgVGhlIG1vc3QgY29tbW9ubHkgdXNlZCBwZXJmIGNvbW1hbmRzIGFyZToKKyAgICAgICBhbm5vdGF0ZSAgICAgICAgUmVhZCBwZXJmLmRhdGEgKGNyZWF0ZWQgYnkgcGVyZiByZWNvcmQpIGFuZCBkaXNwbGF5IGFubm90YXRlZCBjb2RlCisgICAgICAgYXJjaGl2ZSAgICAgICAgIENyZWF0ZSBhcmNoaXZlIHdpdGggb2JqZWN0IGZpbGVzIHdpdGggYnVpbGQtaWRzIGZvdW5kIGluIHBlcmYuZGF0YSBmaWxlCisgICAgICAgYmVuY2ggICAgICAgICAgIEdlbmVyYWwgZnJhbWV3b3JrIGZvciBiZW5jaG1hcmsgc3VpdGVzCisgICAgICAgYnVpbGRpZC1jYWNoZSAgIE1hbmFnZSBidWlsZC1pZCBjYWNoZS4KKyAgICAgICBidWlsZGlkLWxpc3QgICAgTGlzdCB0aGUgYnVpbGRpZHMgaW4gYSBwZXJmLmRhdGEgZmlsZQorICAgICAgIGRpZmYgICAgICAgICAgICBSZWFkIHR3byBwZXJmLmRhdGEgZmlsZXMgYW5kIGRpc3BsYXkgdGhlIGRpZmZlcmVudGlhbCBwcm9maWxlCisgICAgICAgZXZsaXN0ICAgICAgICAgIExpc3QgdGhlIGV2ZW50IG5hbWVzIGluIGEgcGVyZi5kYXRhIGZpbGUKKyAgICAgICBpbmplY3QgICAgICAgICAgRmlsdGVyIHRvIGF1Z21lbnQgdGhlIGV2ZW50cyBzdHJlYW0gd2l0aCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgICAgICAga21lbSAgICAgICAgICAgIFRvb2wgdG8gdHJhY2UvbWVhc3VyZSBrZXJuZWwgbWVtb3J5KHNsYWIpIHByb3BlcnRpZXMKKyAgICAgICBrdm0gICAgICAgICAgICAgVG9vbCB0byB0cmFjZS9tZWFzdXJlIGt2bSBndWVzdCBvcworICAgICAgIGxpc3QgICAgICAgICAgICBMaXN0IGFsbCBzeW1ib2xpYyBldmVudCB0eXBlcworICAgICAgIGxvY2sgICAgICAgICAgICBBbmFseXplIGxvY2sgZXZlbnRzCisgICAgICAgcHJvYmUgICAgICAgICAgIERlZmluZSBuZXcgZHluYW1pYyB0cmFjZXBvaW50cworICAgICAgIHJlY29yZCAgICAgICAgICBSdW4gYSBjb21tYW5kIGFuZCByZWNvcmQgaXRzIHByb2ZpbGUgaW50byBwZXJmLmRhdGEKKyAgICAgICByZXBvcnQgICAgICAgICAgUmVhZCBwZXJmLmRhdGEgKGNyZWF0ZWQgYnkgcGVyZiByZWNvcmQpIGFuZCBkaXNwbGF5IHRoZSBwcm9maWxlCisgICAgICAgc2NoZWQgICAgICAgICAgIFRvb2wgdG8gdHJhY2UvbWVhc3VyZSBzY2hlZHVsZXIgcHJvcGVydGllcyAobGF0ZW5jaWVzKQorICAgICAgIHNjcmlwdCAgICAgICAgICBSZWFkIHBlcmYuZGF0YSAoY3JlYXRlZCBieSBwZXJmIHJlY29yZCkgYW5kIGRpc3BsYXkgdHJhY2Ugb3V0cHV0CisgICAgICAgc3RhdCAgICAgICAgICAgIFJ1biBhIGNvbW1hbmQgYW5kIGdhdGhlciBwZXJmb3JtYW5jZSBjb3VudGVyIHN0YXRpc3RpY3MKKyAgICAgICB0ZXN0ICAgICAgICAgICAgUnVucyBzYW5pdHkgdGVzdHMuCisgICAgICAgdGltZWNoYXJ0ICAgICAgIFRvb2wgdG8gdmlzdWFsaXplIHRvdGFsIHN5c3RlbSBiZWhhdmlvciBkdXJpbmcgYSB3b3JrbG9hZAorICAgICAgIHRvcCAgICAgICAgICAgICBTeXN0ZW0gcHJvZmlsaW5nIHRvb2wuCisKKyAgICAgU2VlICdwZXJmIGhlbHAgQ09NTUFORCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYSBzcGVjaWZpYyBjb21tYW5kLgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLXBlcmYtdG8tZG8tYmFzaWMtcHJvZmlsaW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBwZXJmIHRvIGRvIEJhc2ljIFByb2ZpbGluZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIGEgc2ltcGxlIHRlc3QgY2FzZSwgd2UnbGwgcHJvZmlsZSB0aGUgJ3dnZXQnIG9mIGEgZmFpcmx5IGxhcmdlCisgICAgICAgICAgICAgICAgZmlsZSwgd2hpY2ggaXMgYSBtaW5pbWFsbHkgaW50ZXJlc3RpbmcgY2FzZSBiZWNhdXNlIGl0IGhhcyBib3RoCisgICAgICAgICAgICAgICAgZmlsZSBhbmQgbmV0d29yayBJL08gYXNwZWN0cywgYW5kIGF0IGxlYXN0IGluIHRoZSBjYXNlIG9mIHN0YW5kYXJkCisgICAgICAgICAgICAgICAgWW9jdG8gaW1hZ2VzLCBpdCdzIGltcGxlbWVudGVkIGFzIHBhcnQgb2YgYnVzeWJveCwgc28gdGhlIG1ldGhvZHMKKyAgICAgICAgICAgICAgICB3ZSB1c2UgdG8gYW5hbHl6ZSBpdCBjYW4gYmUgdXNlZCBpbiBhIHZlcnkgc2ltaWxhciB3YXkgdG8gdGhlIHdob2xlCisgICAgICAgICAgICAgICAgaG9zdCBvZiBzdXBwb3J0ZWQgYnVzeWJveCBhcHBsZXRzIGluIFlvY3RvLgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBybSBsaW51eC0yLjYuMTkuMi50YXIuYnoyOyBcCisgICAgIHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIHF1aWNrZXN0IGFuZCBlYXNpZXN0IHdheSB0byBnZXQgc29tZSBiYXNpYyBvdmVyYWxsIGRhdGEgYWJvdXQKKyAgICAgICAgICAgICAgICB3aGF0J3MgZ29pbmcgb24gZm9yIGEgcGFydGljdWxhciB3b3JrbG9hZCBpcyB0byBwcm9maWxlIGl0IHVzaW5nCisgICAgICAgICAgICAgICAgJ3BlcmYgc3RhdCcuICdwZXJmIHN0YXQnIGJhc2ljYWxseSBwcm9maWxlcyB1c2luZyBhIGZldyBkZWZhdWx0CisgICAgICAgICAgICAgICAgY291bnRlcnMgYW5kIGRpc3BsYXlzIHRoZSBzdW1tZWQgY291bnRzIGF0IHRoZSBlbmQgb2YgdGhlIHJ1bjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiBzdGF0IHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4KKyAgICAgQ29ubmVjdGluZyB0byBkb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZyAoMTQwLjIxMS4xNjkuNTk6ODApCisgICAgIGxpbnV4LTIuNi4xOS4yLnRhci5iIDEwMCUgfCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKnwgNDE3MjdrICAwOjAwOjAwIEVUQQorCisgICAgIFBlcmZvcm1hbmNlIGNvdW50ZXIgc3RhdHMgZm9yICd3Z2V0IDx1bGluayB1cmw9J2h0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyJz5odHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6MjwvdWxpbms+JzoKKworICAgICAgICAgICA0NTk3LjIyMzkwMiB0YXNrLWNsb2NrICAgICAgICAgICAgICAgICMgICAgMC4wNzcgQ1BVcyB1dGlsaXplZAorICAgICAgICAgICAgICAgICAyMzU2OCBjb250ZXh0LXN3aXRjaGVzICAgICAgICAgICMgICAgMC4wMDUgTS9zZWMKKyAgICAgICAgICAgICAgICAgICAgNjggQ1BVLW1pZ3JhdGlvbnMgICAgICAgICAgICAjICAgIDAuMDE1IEsvc2VjCisgICAgICAgICAgICAgICAgICAgMjQxIHBhZ2UtZmF1bHRzICAgICAgICAgICAgICAgIyAgICAwLjA1MiBLL3NlYworICAgICAgICAgICAgMzA0NTgxNzI5MyBjeWNsZXMgICAgICAgICAgICAgICAgICAgICMgICAgMC42NjMgR0h6CisgICAgICAgJmx0O25vdCBzdXBwb3J0ZWQmZ3Q7IHN0YWxsZWQtY3ljbGVzLWZyb250ZW5kCisgICAgICAgJmx0O25vdCBzdXBwb3J0ZWQmZ3Q7IHN0YWxsZWQtY3ljbGVzLWJhY2tlbmQKKyAgICAgICAgICAgICA4NTg5MDkxNjcgaW5zdHJ1Y3Rpb25zICAgICAgICAgICAgICAjICAgIDAuMjggIGluc25zIHBlciBjeWNsZQorICAgICAgICAgICAgIDE2NTQ0MTE2NSBicmFuY2hlcyAgICAgICAgICAgICAgICAgICMgICAzNS45ODcgTS9zZWMKKyAgICAgICAgICAgICAgMTk1NTAzMjkgYnJhbmNoLW1pc3NlcyAgICAgICAgICAgICAjICAgMTEuODIlIG9mIGFsbCBicmFuY2hlcworCisgICAgICAgICAgNTkuODM2NjI3NjIwIHNlY29uZHMgdGltZSBlbGFwc2VkCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE1hbnkgdGltZXMgc3VjaCBhIHNpbXBsZS1taW5kZWQgdGVzdCBkb2Vzbid0IHlpZWxkIG11Y2ggb2YKKyAgICAgICAgICAgICAgICBpbnRlcmVzdCwgYnV0IHNvbWV0aW1lcyBpdCBkb2VzIChzZWUgUmVhbC13b3JsZCBZb2N0byBidWcKKyAgICAgICAgICAgICAgICAoc2xvdyBsb29wLW1vdW50ZWQgd3JpdGUgc3BlZWQpKS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQWxzbywgbm90ZSB0aGF0ICdwZXJmIHN0YXQnIGlzbid0IHJlc3RyaWN0ZWQgdG8gYSBmaXhlZCBzZXQgb2YKKyAgICAgICAgICAgICAgICBjb3VudGVycyAtIGJhc2ljYWxseSBhbnkgZXZlbnQgbGlzdGVkIGluIHRoZSBvdXRwdXQgb2YgJ3BlcmYgbGlzdCcKKyAgICAgICAgICAgICAgICBjYW4gYmUgdGFsbGllZCBieSAncGVyZiBzdGF0Jy4gRm9yIGV4YW1wbGUsIHN1cHBvc2Ugd2Ugd2FudGVkIHRvCisgICAgICAgICAgICAgICAgc2VlIGEgc3VtbWFyeSBvZiBhbGwgdGhlIGV2ZW50cyByZWxhdGVkIHRvIGtlcm5lbCBtZW1vcnkKKyAgICAgICAgICAgICAgICBhbGxvY2F0aW9uL2ZyZWVpbmcgYWxvbmcgd2l0aCBjYWNoZSBoaXRzIGFuZCBtaXNzZXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgc3RhdCAtZSBrbWVtOiogLWUgY2FjaGUtcmVmZXJlbmNlcyAtZSBjYWNoZS1taXNzZXMgd2dldCA8dWxpbmsgdXJsPSdodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6Mic+aHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejI8L3VsaW5rPgorICAgICBDb25uZWN0aW5nIHRvIGRvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnICgxNDAuMjExLjE2OS41OTo4MCkKKyAgICAgbGludXgtMi42LjE5LjIudGFyLmIgMTAwJSB8KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfCA0MTcyN2sgIDA6MDA6MDAgRVRBCisKKyAgICAgUGVyZm9ybWFuY2UgY291bnRlciBzdGF0cyBmb3IgJ3dnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4nOgorCisgICAgICAgICAgICAgICAgICA1NTY2IGttZW06a21hbGxvYworICAgICAgICAgICAgICAgIDEyNTUxNyBrbWVtOmttZW1fY2FjaGVfYWxsb2MKKyAgICAgICAgICAgICAgICAgICAgIDAga21lbTprbWFsbG9jX25vZGUKKyAgICAgICAgICAgICAgICAgICAgIDAga21lbTprbWVtX2NhY2hlX2FsbG9jX25vZGUKKyAgICAgICAgICAgICAgICAgMzQ0MDEga21lbTprZnJlZQorICAgICAgICAgICAgICAgICA2OTkyMCBrbWVtOmttZW1fY2FjaGVfZnJlZQorICAgICAgICAgICAgICAgICAgIDEzMyBrbWVtOm1tX3BhZ2VfZnJlZQorICAgICAgICAgICAgICAgICAgICA0MSBrbWVtOm1tX3BhZ2VfZnJlZV9iYXRjaGVkCisgICAgICAgICAgICAgICAgIDExNTAyIGttZW06bW1fcGFnZV9hbGxvYworICAgICAgICAgICAgICAgICAxMTM3NSBrbWVtOm1tX3BhZ2VfYWxsb2Nfem9uZV9sb2NrZWQKKyAgICAgICAgICAgICAgICAgICAgIDAga21lbTptbV9wYWdlX3BjcHVfZHJhaW4KKyAgICAgICAgICAgICAgICAgICAgIDAga21lbTptbV9wYWdlX2FsbG9jX2V4dGZyYWcKKyAgICAgICAgICAgICAgNjY4NDg2MDIgY2FjaGUtcmVmZXJlbmNlcworICAgICAgICAgICAgICAgMjkxNzc0MCBjYWNoZS1taXNzZXMgICAgICAgICAgICAgICMgICAgNC4zNjUgJSBvZiBhbGwgY2FjaGUgcmVmcworCisgICAgICAgICAgNDQuODMxMDIzNDE1IHNlY29uZHMgdGltZSBlbGFwc2VkCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFNvICdwZXJmIHN0YXQnIGdpdmVzIHVzIGEgbmljZSBlYXN5IHdheSB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZgorICAgICAgICAgICAgICAgIHdoYXQgbWlnaHQgYmUgaGFwcGVuaW5nIGZvciBhIHNldCBvZiBldmVudHMsIGJ1dCBub3JtYWxseSB3ZSdkCisgICAgICAgICAgICAgICAgbmVlZCBhIGxpdHRsZSBtb3JlIGRldGFpbCBpbiBvcmRlciB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbgorICAgICAgICAgICAgICAgIGluIGEgd2F5IHRoYXQgd2UgY2FuIGFjdCBvbiBpbiBhIHVzZWZ1bCB3YXkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGRpdmUgZG93biBpbnRvIGEgbmV4dCBsZXZlbCBvZiBkZXRhaWwsIHdlIGNhbiB1c2UgJ3BlcmYKKyAgICAgICAgICAgICAgICByZWNvcmQnLydwZXJmIHJlcG9ydCcgd2hpY2ggd2lsbCBjb2xsZWN0IHByb2ZpbGluZyBkYXRhIGFuZAorICAgICAgICAgICAgICAgIHByZXNlbnQgaXQgdG8gdXNlIHVzaW5nIGFuIGludGVyYWN0aXZlIHRleHQtYmFzZWQgVUkgKG9yCisgICAgICAgICAgICAgICAgc2ltcGx5IGFzIHRleHQgaWYgd2Ugc3BlY2lmeSAtLXN0ZGlvIHRvICdwZXJmIHJlcG9ydCcpLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBvdXIgZmlyc3QgYXR0ZW1wdCBhdCBwcm9maWxpbmcgdGhpcyB3b3JrbG9hZCwgd2UnbGwgc2ltcGx5CisgICAgICAgICAgICAgICAgcnVuICdwZXJmIHJlY29yZCcsIGhhbmRpbmcgaXQgdGhlIHdvcmtsb2FkIHdlIHdhbnQgdG8gcHJvZmlsZQorICAgICAgICAgICAgICAgIChldmVyeXRoaW5nIGFmdGVyICdwZXJmIHJlY29yZCcgYW5kIGFueSBwZXJmIG9wdGlvbnMgd2UgaGFuZAorICAgICAgICAgICAgICAgIGl0IC0gaGVyZSBub25lIC0gd2lsbCBiZSBleGVjdXRlZCBpbiBhIG5ldyBzaGVsbCkuIHBlcmYgY29sbGVjdHMKKyAgICAgICAgICAgICAgICBzYW1wbGVzIHVudGlsIHRoZSBwcm9jZXNzIGV4aXRzIGFuZCByZWNvcmRzIHRoZW0gaW4gYSBmaWxlIG5hbWVkCisgICAgICAgICAgICAgICAgJ3BlcmYuZGF0YScgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgcmVjb3JkIHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4KKworICAgICBDb25uZWN0aW5nIHRvIGRvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnICgxNDAuMjExLjE2OS41OTo4MCkKKyAgICAgbGludXgtMi42LjE5LjIudGFyLmIgMTAwJSB8KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfCA0MTcyN2sgIDA6MDA6MDAgRVRBCisgICAgIFsgcGVyZiByZWNvcmQ6IFdva2VuIHVwIDEgdGltZXMgdG8gd3JpdGUgZGF0YSBdCisgICAgIFsgcGVyZiByZWNvcmQ6IENhcHR1cmVkIGFuZCB3cm90ZSAwLjE3NiBNQiBwZXJmLmRhdGEgKH43NzAwIHNhbXBsZXMpIF0KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRvIHNlZSB0aGUgcmVzdWx0cyBpbiBhICd0ZXh0LWJhc2VkIFVJJyAodHVpKSwgc2ltcGx5IHJ1bgorICAgICAgICAgICAgJ3BlcmYgcmVwb3J0Jywgd2hpY2ggd2lsbCByZWFkIHRoZSBwZXJmLmRhdGEgZmlsZSBpbiB0aGUgY3VycmVudAorICAgICAgICAgICAgd29ya2luZyBkaXJlY3RvcnkgYW5kIGRpc3BsYXkgdGhlIHJlc3VsdHMgaW4gYW4gaW50ZXJhY3RpdmUgVUk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgcmVwb3J0CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvcGVyZi13Z2V0LWZsYXQtc3RyaXBwZWQucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGFib3ZlIHNjcmVlbnNob3QgZGlzcGxheXMgYSAnZmxhdCcgcHJvZmlsZSwgb25lIGVudHJ5IGZvcgorICAgICAgICAgICAgICAgIGVhY2ggJ2J1Y2tldCcgY29ycmVzcG9uZGluZyB0byB0aGUgZnVuY3Rpb25zIHRoYXQgd2VyZSBwcm9maWxlZAorICAgICAgICAgICAgICAgIGR1cmluZyB0aGUgcHJvZmlsaW5nIHJ1biwgb3JkZXJlZCBmcm9tIHRoZSBtb3N0IHBvcHVsYXIgdG8gdGhlCisgICAgICAgICAgICAgICAgbGVhc3QgKHBlcmYgaGFzIG9wdGlvbnMgdG8gc29ydCBpbiB2YXJpb3VzIG9yZGVycyBhbmQga2V5cyBhcworICAgICAgICAgICAgICAgIHdlbGwgYXMgZGlzcGxheSBlbnRyaWVzIG9ubHkgYWJvdmUgYSBjZXJ0YWluIHRocmVzaG9sZCBhbmQgc28KKyAgICAgICAgICAgICAgICBvbiAtIHNlZSB0aGUgcGVyZiBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzKS4gTm90ZSB0aGF0IHRoaXMKKyAgICAgICAgICAgICAgICBpbmNsdWRlcyBib3RoIHVzZXJzcGFjZSBmdW5jdGlvbnMgKGVudHJpZXMgY29udGFpbmluZyBhIFsuXSkgYW5kCisgICAgICAgICAgICAgICAga2VybmVsIGZ1bmN0aW9ucyBhY2NvdW50ZWQgdG8gdGhlIHByb2Nlc3MgKGVudHJpZXMgY29udGFpbmluZworICAgICAgICAgICAgICAgIGEgW2tdKS4gKHBlcmYgaGFzIGNvbW1hbmQtbGluZSBtb2RpZmllcnMgdGhhdCBjYW4gYmUgdXNlZCB0bworICAgICAgICAgICAgICAgIHJlc3RyaWN0IHRoZSBwcm9maWxpbmcgdG8ga2VybmVsIG9yIHVzZXJzcGFjZSwgYW1vbmcgb3RoZXJzKS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTm90aWNlIGFsc28gdGhhdCB0aGUgYWJvdmUgcmVwb3J0IHNob3dzIGFuIGVudHJ5IGZvciAnYnVzeWJveCcsCisgICAgICAgICAgICAgICAgd2hpY2ggaXMgdGhlIGV4ZWN1dGFibGUgdGhhdCBpbXBsZW1lbnRzICd3Z2V0JyBpbiBZb2N0bywgYnV0IHRoYXQKKyAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIGEgdXNlZnVsIGZ1bmN0aW9uIG5hbWUgaW4gdGhhdCBlbnRyeSwgaXQgZGlzcGxheXMKKyAgICAgICAgICAgICAgICBhIG5vdC1zby1mcmllbmRseSBoZXggdmFsdWUgaW5zdGVhZC4gVGhlIHN0ZXBzIGJlbG93IHdpbGwgc2hvdworICAgICAgICAgICAgICAgIGhvdyB0byBmaXggdGhhdCBwcm9ibGVtLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWZvcmUgd2UgZG8gdGhhdCwgaG93ZXZlciwgbGV0J3MgdHJ5IHJ1bm5pbmcgYSBkaWZmZXJlbnQgcHJvZmlsZSwKKyAgICAgICAgICAgICAgICBvbmUgd2hpY2ggc2hvd3Mgc29tZXRoaW5nIGEgbGl0dGxlIG1vcmUgaW50ZXJlc3RpbmcuIFRoZSBvbmx5CisgICAgICAgICAgICAgICAgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBuZXcgcHJvZmlsZSBhbmQgdGhlIHByZXZpb3VzIG9uZSBpcyB0aGF0CisgICAgICAgICAgICAgICAgd2UnbGwgYWRkIHRoZSAtZyBvcHRpb24sIHdoaWNoIHdpbGwgcmVjb3JkIG5vdCBqdXN0IHRoZSBhZGRyZXNzCisgICAgICAgICAgICAgICAgb2YgYSBzYW1wbGVkIGZ1bmN0aW9uLCBidXQgdGhlIGVudGlyZSBjYWxsY2hhaW4gdG8gdGhlIHNhbXBsZWQKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBhcyB3ZWxsOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBwZXJmIHJlY29yZCAtZyB3Z2V0IDx1bGluayB1cmw9J2h0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyJz5odHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6MjwvdWxpbms+CisgICAgIENvbm5lY3RpbmcgdG8gZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcgKDE0MC4yMTEuMTY5LjU5OjgwKQorICAgICBsaW51eC0yLjYuMTkuMi50YXIuYiAxMDAlIHwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip8IDQxNzI3ayAgMDowMDowMCBFVEEKKyAgICAgWyBwZXJmIHJlY29yZDogV29rZW4gdXAgMyB0aW1lcyB0byB3cml0ZSBkYXRhIF0KKyAgICAgWyBwZXJmIHJlY29yZDogQ2FwdHVyZWQgYW5kIHdyb3RlIDAuNjUyIE1CIHBlcmYuZGF0YSAofjI4NDc2IHNhbXBsZXMpIF0KKworCisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiByZXBvcnQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNpbmcgdGhlIGNhbGxncmFwaCB2aWV3LCB3ZSBjYW4gYWN0dWFsbHkgc2VlIG5vdCBvbmx5IHdoaWNoCisgICAgICAgICAgICAgICAgZnVuY3Rpb25zIHRvb2sgdGhlIG1vc3QgdGltZSwgYnV0IHdlIGNhbiBhbHNvIHNlZSBhIHN1bW1hcnkgb2YKKyAgICAgICAgICAgICAgICBob3cgdGhvc2UgZnVuY3Rpb25zIHdlcmUgY2FsbGVkIGFuZCBsZWFybiBzb21ldGhpbmcgYWJvdXQgaG93IHRoZQorICAgICAgICAgICAgICAgIHByb2dyYW0gaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCBpbiB0aGUgcHJvY2Vzcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTm90aWNlIHRoYXQgZWFjaCBlbnRyeSBpbiB0aGUgYWJvdmUgc2NyZWVuc2hvdCBub3cgY29udGFpbnMgYSAnKycKKyAgICAgICAgICAgICAgICBvbiB0aGUgbGVmdC1oYW5kIHNpZGUuIFRoaXMgbWVhbnMgdGhhdCB3ZSBjYW4gZXhwYW5kIHRoZSBlbnRyeSBhbmQKKyAgICAgICAgICAgICAgICBkcmlsbCBkb3duIGludG8gdGhlIGNhbGxjaGFpbnMgdGhhdCBmZWVkIGludG8gdGhhdCBlbnRyeS4KKyAgICAgICAgICAgICAgICBQcmVzc2luZyAnZW50ZXInIG9uIGFueSBvbmUgb2YgdGhlbSB3aWxsIGV4cGFuZCB0aGUgY2FsbGNoYWluCisgICAgICAgICAgICAgICAgKHlvdSBjYW4gYWxzbyBwcmVzcyAnRScgdG8gZXhwYW5kIHRoZW0gYWxsIGF0IHRoZSBzYW1lIHRpbWUgb3IgJ0MnCisgICAgICAgICAgICAgICAgdG8gY29sbGFwc2UgdGhlbSBhbGwpLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiB0aGUgc2NyZWVuc2hvdCBhYm92ZSwgd2UndmUgdG9nZ2xlZCB0aGUgX19jb3B5X3RvX3VzZXJfbGwoKQorICAgICAgICAgICAgICAgIGVudHJ5IGFuZCBzZXZlcmFsIHN1Ym5vZGVzIGFsbCB0aGUgd2F5IGRvd24uIFRoaXMgbGV0cyB1cyBzZWUKKyAgICAgICAgICAgICAgICB3aGljaCBjYWxsY2hhaW5zIGNvbnRyaWJ1dGVkIHRvIHRoZSBwcm9maWxlZCBfX2NvcHlfdG9fdXNlcl9sbCgpCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gd2hpY2ggY29udHJpYnV0ZWQgMS43NyUgdG8gdGhlIHRvdGFsIHByb2ZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIGEgYml0IG9mIGJhY2tncm91bmQgZXhwbGFuYXRpb24gZm9yIHRoZXNlIGNhbGxjaGFpbnMsIHRoaW5rCisgICAgICAgICAgICAgICAgYWJvdXQgd2hhdCBoYXBwZW5zIGF0IGEgaGlnaCBsZXZlbCB3aGVuIHlvdSBydW4gd2dldCB0byBnZXQgYSBmaWxlCisgICAgICAgICAgICAgICAgb3V0IG9uIHRoZSBuZXR3b3JrLiBCYXNpY2FsbHkgd2hhdCBoYXBwZW5zIGlzIHRoYXQgdGhlIGRhdGEgY29tZXMKKyAgICAgICAgICAgICAgICBpbnRvIHRoZSBrZXJuZWwgdmlhIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gKHNvY2tldCkgYW5kIGlzIHBhc3NlZAorICAgICAgICAgICAgICAgIHRvIHRoZSB1c2Vyc3BhY2UgcHJvZ3JhbSAnd2dldCcgKHdoaWNoIGlzIGFjdHVhbGx5IGEgcGFydCBvZgorICAgICAgICAgICAgICAgIGJ1c3lib3gsIGJ1dCB0aGF0J3Mgbm90IGltcG9ydGFudCBmb3Igbm93KSwgd2hpY2ggdGFrZXMgdGhlIGJ1ZmZlcnMKKyAgICAgICAgICAgICAgICB0aGUga2VybmVsIHBhc3NlcyB0byBpdCBhbmQgd3JpdGVzIGl0IHRvIGEgZGlzayBmaWxlIHRvIHNhdmUgaXQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBwYXJ0IG9mIHRoaXMgcHJvY2VzcyB0aGF0IHdlJ3JlIGxvb2tpbmcgYXQgaW4gdGhlIGFib3ZlIGNhbGwKKyAgICAgICAgICAgICAgICBzdGFja3MgaXMgdGhlIHBhcnQgd2hlcmUgdGhlIGtlcm5lbCBwYXNzZXMgdGhlIGRhdGEgaXQncyByZWFkIGZyb20KKyAgICAgICAgICAgICAgICB0aGUgc29ja2V0IGRvd24gdG8gd2dldCBpLmUuIGEgY29weS10by11c2VyLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBOb3RpY2UgYWxzbyB0aGF0IGhlcmUgdGhlcmUncyBhbHNvIGEgY2FzZSB3aGVyZSB0aGUgaGV4IHZhbHVlCisgICAgICAgICAgICAgICAgaXMgZGlzcGxheWVkIGluIHRoZSBjYWxsc3RhY2ssIGhlcmUgaW4gdGhlIGV4cGFuZGVkCisgICAgICAgICAgICAgICAgc3lzX2Nsb2NrX2dldHRpbWUoKSBmdW5jdGlvbi4gTGF0ZXIgd2UnbGwgc2VlIGl0IHJlc29sdmUgdG8gYQorICAgICAgICAgICAgICAgIHVzZXJzcGFjZSBmdW5jdGlvbiBjYWxsIGluIGJ1c3lib3guCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LWZyb20tdXNlci1leHBhbmRlZC1zdHJpcHBlZC5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI3aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgYWJvdmUgc2NyZWVuc2hvdCBzaG93cyB0aGUgb3RoZXIgaGFsZiBvZiB0aGUgam91cm5leSBmb3IgdGhlCisgICAgICAgICAgICAgICAgZGF0YSAtIGZyb20gdGhlIHdnZXQgcHJvZ3JhbSdzIHVzZXJzcGFjZSBidWZmZXJzIHRvIGRpc2suIFRvIGdldAorICAgICAgICAgICAgICAgIHRoZSBidWZmZXJzIHRvIGRpc2ssIHRoZSB3Z2V0IHByb2dyYW0gaXNzdWVzIGEgd3JpdGUoMiksIHdoaWNoCisgICAgICAgICAgICAgICAgZG9lcyBhIGNvcHktZnJvbS11c2VyIHRvIHRoZSBrZXJuZWwsIHdoaWNoIHRoZW4gdGFrZXMgY2FyZSB2aWEKKyAgICAgICAgICAgICAgICBzb21lIGNpcmN1aXRvdXMgcGF0aCAocHJvYmFibHkgYWxzbyBwcmVzZW50IHNvbWV3aGVyZSBpbiB0aGUKKyAgICAgICAgICAgICAgICBwcm9maWxlIGRhdGEpLCB0byBnZXQgaXQgc2FmZWx5IHRvIGRpc2suCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE5vdyB0aGF0IHdlJ3ZlIHNlZW4gdGhlIGJhc2ljIGxheW91dCBvZiB0aGUgcHJvZmlsZSBkYXRhIGFuZCB0aGUKKyAgICAgICAgICAgICAgICBiYXNpY3Mgb2YgaG93IHRvIGV4dHJhY3QgdXNlZnVsIGluZm9ybWF0aW9uIG91dCBvZiBpdCwgbGV0J3MgZ2V0CisgICAgICAgICAgICAgICAgYmFjayB0byB0aGUgdGFzayBhdCBoYW5kIGFuZCBzZWUgaWYgd2UgY2FuIGdldCBzb21lIGJhc2ljIGlkZWEKKyAgICAgICAgICAgICAgICBhYm91dCB3aGVyZSB0aGUgdGltZSBpcyBzcGVudCBpbiB0aGUgcHJvZ3JhbSB3ZSdyZSBwcm9maWxpbmcsCisgICAgICAgICAgICAgICAgd2dldC4gUmVtZW1iZXIgdGhhdCB3Z2V0IGlzIGFjdHVhbGx5IGltcGxlbWVudGVkIGFzIGFuIGFwcGxldAorICAgICAgICAgICAgICAgIGluIGJ1c3lib3gsIHNvIHdoaWxlIHRoZSBwcm9jZXNzIG5hbWUgaXMgJ3dnZXQnLCB0aGUgZXhlY3V0YWJsZQorICAgICAgICAgICAgICAgIHdlJ3JlIGFjdHVhbGx5IGludGVyZXN0ZWQgaW4gaXMgYnVzeWJveC4gU28gbGV0J3MgZXhwYW5kIHRoZQorICAgICAgICAgICAgICAgIGZpcnN0IGVudHJ5IGNvbnRhaW5pbmcgYnVzeWJveDoKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWV4cGFuZGVkLXN0cmlwcGVkLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFnYWluLCBiZWZvcmUgd2UgZXhwYW5kZWQgd2Ugc2F3IHRoYXQgdGhlIGZ1bmN0aW9uIHdhcyBsYWJlbGVkCisgICAgICAgICAgICAgICAgd2l0aCBhIGhleCB2YWx1ZSBpbnN0ZWFkIG9mIGEgc3ltYm9sIGFzIHdpdGggbW9zdCBvZiB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgZW50cmllcy4gRXhwYW5kaW5nIHRoZSBidXN5Ym94IGVudHJ5IGRvZXNuJ3QgbWFrZSBpdCBhbnkgYmV0dGVyLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcHJvYmxlbSBpcyB0aGF0IHBlcmYgY2FuJ3QgZmluZCB0aGUgc3ltYm9sIGluZm9ybWF0aW9uIGZvciB0aGUKKyAgICAgICAgICAgICAgICBidXN5Ym94IGJpbmFyeSwgd2hpY2ggaXMgYWN0dWFsbHkgc3RyaXBwZWQgb3V0IGJ5IHRoZSBZb2N0byBidWlsZAorICAgICAgICAgICAgICAgIHN5c3RlbS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25lIHdheSBhcm91bmQgdGhhdCBpcyB0byBwdXQgdGhlIGZvbGxvd2luZyBpbiB5b3VyIGxvY2FsLmNvbmYKKyAgICAgICAgICAgICAgICB3aGVuIHlvdSBidWlsZCB0aGUgaW1hZ2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhJQklUX1BBQ0tBR0VfU1RSSVAgPSAiMSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSG93ZXZlciwgd2UgYWxyZWFkeSBoYXZlIGFuIGltYWdlIHdpdGggdGhlIGJpbmFyaWVzIHN0cmlwcGVkLAorICAgICAgICAgICAgICAgIHNvIHdoYXQgY2FuIHdlIGRvIHRvIGdldCBwZXJmIHRvIHJlc29sdmUgdGhlIHN5bWJvbHM/IEJhc2ljYWxseQorICAgICAgICAgICAgICAgIHdlIG5lZWQgdG8gaW5zdGFsbCB0aGUgZGVidWdpbmZvIGZvciB0aGUgYnVzeWJveCBwYWNrYWdlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBnZW5lcmF0ZSB0aGUgZGVidWcgaW5mbyBmb3IgdGhlIHBhY2thZ2VzIGluIHRoZSBpbWFnZSwgd2UgY2FuCisgICAgICAgICAgICAgICAgYWRkIGRiZy1wa2dzIHRvIEVYVFJBX0lNQUdFX0ZFQVRVUkVTIGluIGxvY2FsLmNvbmYuIEZvciBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRVhUUkFfSU1BR0VfRkVBVFVSRVMgPSAiZGVidWctdHdlYWtzIHRvb2xzLXByb2ZpbGUgZGJnLXBrZ3MiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdGhlIHR5cGUgb2YgZGVidWdpbmZvIHRoYXQKKyAgICAgICAgICAgICAgICBwZXJmIHVuZGVyc3RhbmRzLCB3ZSBhbHNvIG5lZWQgdG8gYWRkIHRoZSBmb2xsb3dpbmcgdG8gbG9jYWwuY29uZjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEUgPSAnZGVidWctZmlsZS1kaXJlY3RvcnknCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE9uY2Ugd2UndmUgZG9uZSB0aGF0LCB3ZSBjYW4gaW5zdGFsbCB0aGUgZGVidWdpbmZvIGZvciBidXN5Ym94LgorICAgICAgICAgICAgICAgIFRoZSBkZWJ1ZyBwYWNrYWdlcyBvbmNlIGJ1aWx0IGNhbiBiZSBmb3VuZCBpbgorICAgICAgICAgICAgICAgIGJ1aWxkL3RtcC9kZXBsb3kvcnBtLyogb24gdGhlIGhvc3Qgc3lzdGVtLiBGaW5kIHRoZQorICAgICAgICAgICAgICAgIGJ1c3lib3gtZGJnLS4uLnJwbSBmaWxlIGFuZCBjb3B5IGl0IHRvIHRoZSB0YXJnZXQuIEZvciBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgW3RyekBlbXBhbmFkYSBjb3JlMl0kIHNjcCAvaG9tZS90cnoveW9jdG8vY3Jvd25iYXktdHJhY2luZy1kYmcvYnVpbGQvdG1wL2RlcGxveS9ycG0vY29yZTJfMzIvYnVzeWJveC1kYmctMS4yMC4yLXIyLmNvcmUyXzMyLnJwbSByb290QDE5Mi4xNjguMS4zMToKKyAgICAgcm9vdEAxOTIuMTY4LjEuMzEncyBwYXNzd29yZDoKKyAgICAgYnVzeWJveC1kYmctMS4yMC4yLXIyLmNvcmUyXzMyLnJwbSAgICAgICAgICAgICAgICAgICAgIDEwMCUgMTgyNktCICAgMS44TUIvcyAgIDAwOjAxCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE5vdyBpbnN0YWxsIHRoZSBkZWJ1ZyBycG0gb24gdGhlIHRhcmdldDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcnBtIC1pIGJ1c3lib3gtZGJnLTEuMjAuMi1yMi5jb3JlMl8zMi5ycG0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgTm93IHRoYXQgdGhlIGRlYnVnaW5mbyBpcyBpbnN0YWxsZWQsIHdlIHNlZSB0aGF0IHRoZSBidXN5Ym94CisgICAgICAgICAgICAgICAgZW50cmllcyBub3cgZGlzcGxheSB0aGVpciBmdW5jdGlvbnMgc3ltYm9saWNhbGx5OgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZGVidWdpbmZvLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHdlIGV4cGFuZCBvbmUgb2YgdGhlIGVudHJpZXMgYW5kIHByZXNzICdlbnRlcicgb24gYSBsZWFmIG5vZGUsCisgICAgICAgICAgICAgICAgd2UncmUgcHJlc2VudGVkIHdpdGggYSBtZW51IG9mIGFjdGlvbnMgd2UgY2FuIHRha2UgdG8gZ2V0IG1vcmUKKyAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoYXQgZW50cnk6CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kc28tem9vbS1tZW51LnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjJpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uZSBvZiB0aGVzZSBhY3Rpb25zIGFsbG93cyB1cyB0byBzaG93IGEgdmlldyB0aGF0IGRpc3BsYXlzIGEKKyAgICAgICAgICAgICAgICBidXN5Ym94LWNlbnRyaWMgdmlldyBvZiB0aGUgcHJvZmlsZWQgZnVuY3Rpb25zIChpbiB0aGlzIGNhc2Ugd2UndmUKKyAgICAgICAgICAgICAgICBhbHNvIGV4cGFuZGVkIGFsbCB0aGUgbm9kZXMgdXNpbmcgdGhlICdFJyBrZXkpOgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZHNvLXpvb20ucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRmluYWxseSwgd2UgY2FuIHNlZSB0aGF0IG5vdyB0aGF0IHRoZSBidXN5Ym94IGRlYnVnaW5mbyBpcworICAgICAgICAgICAgICAgIGluc3RhbGxlZCwgdGhlIHByZXZpb3VzbHkgdW5yZXNvbHZlZCBzeW1ib2wgaW4gdGhlCisgICAgICAgICAgICAgICAgc3lzX2Nsb2NrX2dldHRpbWUoKSBlbnRyeSBtZW50aW9uZWQgcHJldmlvdXNseSBpcyBub3cgcmVzb2x2ZWQsCisgICAgICAgICAgICAgICAgYW5kIHNob3dzIHRoYXQgdGhlIHN5c19jbG9ja19nZXR0aW1lIHN5c3RlbSBjYWxsIHRoYXQgd2FzIHRoZQorICAgICAgICAgICAgICAgIHNvdXJjZSBvZiA2Ljc1JSBvZiB0aGUgY29weS10by11c2VyIG92ZXJoZWFkIHdhcyBpbml0aWF0ZWQgYnkKKyAgICAgICAgICAgICAgICB0aGUgaGFuZGxlX2lucHV0KCkgYnVzeWJveCBmdW5jdGlvbjoKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1kZWJ1Z2luZm8ucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXQgdGhlIGxvd2VzdCBsZXZlbCBvZiBkZXRhaWwsIHdlIGNhbiBkaXZlIGRvd24gdG8gdGhlIGFzc2VtYmx5CisgICAgICAgICAgICAgICAgbGV2ZWwgYW5kIHNlZSB3aGljaCBpbnN0cnVjdGlvbnMgY2F1c2VkIHRoZSBtb3N0IG92ZXJoZWFkIGluIGEKKyAgICAgICAgICAgICAgICBmdW5jdGlvbi4gUHJlc3NpbmcgJ2VudGVyJyBvbiB0aGUgJ3VkaGNwY19tYWluJyBmdW5jdGlvbiwgd2UncmUKKyAgICAgICAgICAgICAgICBhZ2FpbiBwcmVzZW50ZWQgd2l0aCBhIG1lbnU6CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS1tZW51LnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjJpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNlbGVjdGluZyAnQW5ub3RhdGUgdWRoY3BjX21haW4nLCB3ZSBnZXQgYSBkZXRhaWxlZCBsaXN0aW5nIG9mCisgICAgICAgICAgICAgICAgcGVyY2VudGFnZXMgYnkgaW5zdHJ1Y3Rpb24gZm9yIHRoZSB1ZGhjcGNfbWFpbiBmdW5jdGlvbi4gRnJvbSB0aGUKKyAgICAgICAgICAgICAgICBkaXNwbGF5LCB3ZSBjYW4gc2VlIHRoYXQgb3ZlciA1MCUgb2YgdGhlIHRpbWUgc3BlbnQgaW4gdGhpcworICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzIHRha2VuIHVwIGJ5IGEgY291cGxlIHRlc3RzIGFuZCB0aGUgbW92ZSBvZiBhCisgICAgICAgICAgICAgICAgY29uc3RhbnQgKDEpIHRvIGEgcmVnaXN0ZXI6CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS11ZGhjcGMucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgYSBzZWd1ZSBpbnRvIHRyYWNpbmcsIGxldCdzIHRyeSBhbm90aGVyIHByb2ZpbGUgdXNpbmcgYQorICAgICAgICAgICAgICAgIGRpZmZlcmVudCBjb3VudGVyLCBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCAnY3ljbGVzJy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHRyYWNpbmcgYW5kIHByb2ZpbGluZyBpbmZyYXN0cnVjdHVyZSBpbiBMaW51eCBoYXMgYmVjb21lCisgICAgICAgICAgICAgICAgdW5pZmllZCBpbiBhIHdheSB0aGF0IGFsbG93cyB1cyB0byB1c2UgdGhlIHNhbWUgdG9vbCB3aXRoIGEKKyAgICAgICAgICAgICAgICBjb21wbGV0ZWx5IGRpZmZlcmVudCBzZXQgb2YgY291bnRlcnMsIG5vdCBqdXN0IHRoZSBzdGFuZGFyZAorICAgICAgICAgICAgICAgIGhhcmR3YXJlIGNvdW50ZXJzIHRoYXQgdHJhZGl0aW9uYWwgdG9vbHMgaGF2ZSBoYWQgdG8gcmVzdHJpY3QKKyAgICAgICAgICAgICAgICB0aGVtc2VsdmVzIHRvIChvZiBjb3Vyc2UgdGhlIHRyYWRpdGlvbmFsIHRvb2xzIGNhbiBhbHNvIG1ha2UgdXNlCisgICAgICAgICAgICAgICAgb2YgdGhlIGV4cGFuZGVkIHBvc3NpYmlsaXRpZXMgbm93IGF2YWlsYWJsZSB0byB0aGVtLCBhbmQgaW4gc29tZQorICAgICAgICAgICAgICAgIGNhc2VzIGhhdmUsIGFzIG1lbnRpb25lZCBwcmV2aW91c2x5KS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2UgY2FuIGdldCBhIGxpc3Qgb2YgdGhlIGF2YWlsYWJsZSBldmVudHMgdGhhdCBjYW4gYmUgdXNlZCB0bworICAgICAgICAgICAgICAgIHByb2ZpbGUgYSB3b3JrbG9hZCB2aWEgJ3BlcmYgbGlzdCc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgbGlzdAorCisgICAgIExpc3Qgb2YgcHJlLWRlZmluZWQgZXZlbnRzICh0byBiZSB1c2VkIGluIC1lKToKKyAgICAgIGNwdS1jeWNsZXMgT1IgY3ljbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIHN0YWxsZWQtY3ljbGVzLWZyb250ZW5kIE9SIGlkbGUtY3ljbGVzLWZyb250ZW5kICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIHN0YWxsZWQtY3ljbGVzLWJhY2tlbmQgT1IgaWRsZS1jeWNsZXMtYmFja2VuZCAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIGluc3RydWN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIGNhY2hlLXJlZmVyZW5jZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIGNhY2hlLW1pc3NlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIGJyYW5jaC1pbnN0cnVjdGlvbnMgT1IgYnJhbmNoZXMgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIGJyYW5jaC1taXNzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIGJ1cy1jeWNsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIHJlZi1jeWNsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKworICAgICAgY3B1LWNsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgdGFzay1jbG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgcGFnZS1mYXVsdHMgT1IgZmF1bHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgbWlub3ItZmF1bHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgbWFqb3ItZmF1bHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgY29udGV4dC1zd2l0Y2hlcyBPUiBjcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgY3B1LW1pZ3JhdGlvbnMgT1IgbWlncmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgYWxpZ25tZW50LWZhdWx0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgZW11bGF0aW9uLWZhdWx0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorCisgICAgICBMMS1kY2FjaGUtbG9hZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbSGFyZHdhcmUgY2FjaGUgZXZlbnRdCisgICAgICBMMS1kY2FjaGUtbG9hZC1taXNzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbSGFyZHdhcmUgY2FjaGUgZXZlbnRdCisgICAgICBMMS1kY2FjaGUtcHJlZmV0Y2gtbWlzc2VzICAgICAgICAgICAgICAgICAgICAgICAgICBbSGFyZHdhcmUgY2FjaGUgZXZlbnRdCisgICAgICBMMS1pY2FjaGUtbG9hZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbSGFyZHdhcmUgY2FjaGUgZXZlbnRdCisgICAgICBMMS1pY2FjaGUtbG9hZC1taXNzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbSGFyZHdhcmUgY2FjaGUgZXZlbnRdCisgICAgICAuCisgICAgICAuCisgICAgICAuCisgICAgICByTk5OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbUmF3IGhhcmR3YXJlIGV2ZW50IGRlc2NyaXB0b3JdCisgICAgICBjcHUvdDE9djFbLHQyPXYyLHQzIC4uLl0vbW9kaWZpZXIgICAgICAgICAgICAgICAgICBbUmF3IGhhcmR3YXJlIGV2ZW50IGRlc2NyaXB0b3JdCisgICAgICAgKHNlZSAncGVyZiBsaXN0IC0taGVscCcgb24gaG93IHRvIGVuY29kZSBpdCkKKworICAgICAgbWVtOiZsdDthZGRyJmd0O1s6YWNjZXNzXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0hhcmR3YXJlIGJyZWFrcG9pbnRdCisKKyAgICAgIHN1bnJwYzpycGNfY2FsbF9zdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgc3VucnBjOnJwY19iaW5kX3N0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzdW5ycGM6cnBjX2Nvbm5lY3Rfc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHN1bnJwYzpycGNfdGFza19iZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgc2tiOmtmcmVlX3NrYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBza2I6Y29uc3VtZV9za2IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHNrYjpza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgbmV0Om5ldF9kZXZfeG1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBuZXQ6bmV0X2Rldl9xdWV1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIG5ldDpuZXRpZl9yZWNlaXZlX3NrYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgbmV0Om5ldGlmX3J4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBuYXBpOm5hcGlfcG9sbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHNvY2s6c29ja19yY3ZxdWV1ZV9mdWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgc29jazpzb2NrX2V4Y2VlZF9idWZfbGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICB1ZHA6dWRwX2ZhaWxfcXVldWVfcmN2X3NrYiAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGhkYTpoZGFfc2VuZF9jbWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgaGRhOmhkYV9nZXRfcmVzcG9uc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBoZGE6aGRhX2J1c19yZXNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHNjc2k6c2NzaV9kaXNwYXRjaF9jbWRfc3RhcnQgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgc2NzaTpzY3NpX2Rpc3BhdGNoX2NtZF9lcnJvciAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzY3NpOnNjc2lfZWhfd2FrZXVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGRybTpkcm1fdmJsYW5rX2V2ZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgZHJtOmRybV92YmxhbmtfZXZlbnRfcXVldWVkICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBkcm06ZHJtX3ZibGFua19ldmVudF9kZWxpdmVyZWQgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHJhbmRvbTptaXhfcG9vbF9ieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgcmFuZG9tOm1peF9wb29sX2J5dGVzX25vbG9jayAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICByYW5kb206Y3JlZGl0X2VudHJvcHlfYml0cyAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGdwaW86Z3Bpb19kaXJlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgZ3BpbzpncGlvX3ZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBibG9jazpibG9ja19ycV9hYm9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGJsb2NrOmJsb2NrX3JxX3JlcXVldWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgYmxvY2s6YmxvY2tfcnFfaXNzdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBibG9jazpibG9ja19iaW9fYm91bmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGJsb2NrOmJsb2NrX2Jpb19jb21wbGV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgYmxvY2s6YmxvY2tfYmlvX2JhY2ttZXJnZSAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICAuCisgICAgICAuCisgICAgICB3cml0ZWJhY2s6d3JpdGViYWNrX3dha2VfdGhyZWFkICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHdyaXRlYmFjazp3cml0ZWJhY2tfd2FrZV9mb3JrZXJfdGhyZWFkICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgd3JpdGViYWNrOndyaXRlYmFja19iZGlfcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICAuCisgICAgICAuCisgICAgICB3cml0ZWJhY2s6d3JpdGViYWNrX3NpbmdsZV9pbm9kZV9yZXF1ZXVlICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHdyaXRlYmFjazp3cml0ZWJhY2tfc2luZ2xlX2lub2RlICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAga21lbTprbWFsbG9jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBrbWVtOmttZW1fY2FjaGVfYWxsb2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGttZW06bW1fcGFnZV9hbGxvYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAga21lbTptbV9wYWdlX2FsbG9jX3pvbmVfbG9ja2VkICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBrbWVtOm1tX3BhZ2VfcGNwdV9kcmFpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGttZW06bW1fcGFnZV9hbGxvY19leHRmcmFnICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgdm1zY2FuOm1tX3Ztc2Nhbl9rc3dhcGRfc2xlZXAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICB2bXNjYW46bW1fdm1zY2FuX2tzd2FwZF93YWtlICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHZtc2NhbjptbV92bXNjYW5fd2FrZXVwX2tzd2FwZCAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgdm1zY2FuOm1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9iZWdpbiAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICAuCisgICAgICAuCisgICAgICBtb2R1bGU6bW9kdWxlX2dldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIG1vZHVsZTptb2R1bGVfcHV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgbW9kdWxlOm1vZHVsZV9yZXF1ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzY2hlZDpzY2hlZF9rdGhyZWFkX3N0b3AgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHNjaGVkOnNjaGVkX3dha2V1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgc2NoZWQ6c2NoZWRfd2FrZXVwX25ldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzY2hlZDpzY2hlZF9wcm9jZXNzX2ZvcmsgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHNjaGVkOnNjaGVkX3Byb2Nlc3NfZXhlYyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgc2NoZWQ6c2NoZWRfc3RhdF9ydW50aW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICByY3U6cmN1X3V0aWxpemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHdvcmtxdWV1ZTp3b3JrcXVldWVfcXVldWVfd29yayAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgd29ya3F1ZXVlOndvcmtxdWV1ZV9leGVjdXRlX2VuZCAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzaWduYWw6c2lnbmFsX2dlbmVyYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHNpZ25hbDpzaWduYWxfZGVsaXZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgdGltZXI6dGltZXJfaW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICB0aW1lcjp0aW1lcl9zdGFydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHRpbWVyOmhydGltZXJfY2FuY2VsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgdGltZXI6aXRpbWVyX3N0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICB0aW1lcjppdGltZXJfZXhwaXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGlycTppcnFfaGFuZGxlcl9lbnRyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgaXJxOmlycV9oYW5kbGVyX2V4aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBpcnE6c29mdGlycV9lbnRyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGlycTpzb2Z0aXJxX2V4aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgaXJxOnNvZnRpcnFfcmFpc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBwcmludGs6Y29uc29sZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHRhc2s6dGFza19uZXd0YXNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgdGFzazp0YXNrX3JlbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzeXNjYWxsczpzeXNfZW50ZXJfc29ja2V0Y2FsbCAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHN5c2NhbGxzOnN5c19leGl0X3NvY2tldGNhbGwgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgLgorICAgICAgLgorICAgICAgLgorICAgICAgc3lzY2FsbHM6c3lzX2VudGVyX3Vuc2hhcmUgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzeXNjYWxsczpzeXNfZXhpdF91bnNoYXJlICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHJhd19zeXNjYWxsczpzeXNfZW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgcmF3X3N5c2NhbGxzOnN5c19leGl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5UeWluZyBpdCBUb2dldGhlcjo8L2VtcGhhc2lzPiBUaGVzZSBhcmUgZXhhY3RseSB0aGUgc2FtZSBzZXQgb2YgZXZlbnRzIGRlZmluZWQKKyAgICAgICAgICAgICAgICBieSB0aGUgdHJhY2UgZXZlbnQgc3Vic3lzdGVtIGFuZCBleHBvc2VkIGJ5CisgICAgICAgICAgICAgICAgZnRyYWNlL3RyYWNlY21kL2tlcm5lbHNoYXJrIGFzIGZpbGVzIGluCisgICAgICAgICAgICAgICAgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMsIGJ5IFN5c3RlbVRhcCBhcworICAgICAgICAgICAgICAgIGtlcm5lbC50cmFjZSgidHJhY2Vwb2ludF9uYW1lIikgYW5kIChwYXJ0aWFsbHkpIGFjY2Vzc2VkIGJ5IExUVG5nLgorICAgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9ubHkgYSBzdWJzZXQgb2YgdGhlc2Ugd291bGQgYmUgb2YgaW50ZXJlc3QgdG8gdXMgd2hlbiBsb29raW5nIGF0CisgICAgICAgICAgICAgICAgdGhpcyB3b3JrbG9hZCwgc28gbGV0J3MgY2hvb3NlIHRoZSBtb3N0IGxpa2VseSBzdWJzeXN0ZW1zCisgICAgICAgICAgICAgICAgKGlkZW50aWZpZWQgYnkgdGhlIHN0cmluZyBiZWZvcmUgdGhlIGNvbG9uIGluIHRoZSBUcmFjZXBvaW50IGV2ZW50cykKKyAgICAgICAgICAgICAgICBhbmQgZG8gYSAncGVyZiBzdGF0JyBydW4gdXNpbmcgb25seSB0aG9zZSB3aWxkY2FyZGVkIHN1YnN5c3RlbXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgc3RhdCAtZSBza2I6KiAtZSBuZXQ6KiAtZSBuYXBpOiogLWUgc2NoZWQ6KiAtZSB3b3JrcXVldWU6KiAtZSBpcnE6KiAtZSBzeXNjYWxsczoqIHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4KKyAgICAgUGVyZm9ybWFuY2UgY291bnRlciBzdGF0cyBmb3IgJ3dnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4nOgorCisgICAgICAgICAgICAgICAgIDIzMzIzIHNrYjprZnJlZV9za2IKKyAgICAgICAgICAgICAgICAgICAgIDAgc2tiOmNvbnN1bWVfc2tiCisgICAgICAgICAgICAgICAgIDQ5ODk3IHNrYjpza2JfY29weV9kYXRhZ3JhbV9pb3ZlYworICAgICAgICAgICAgICAgICAgNjIxNyBuZXQ6bmV0X2Rldl94bWl0CisgICAgICAgICAgICAgICAgICA2MjE3IG5ldDpuZXRfZGV2X3F1ZXVlCisgICAgICAgICAgICAgICAgICA3OTYyIG5ldDpuZXRpZl9yZWNlaXZlX3NrYgorICAgICAgICAgICAgICAgICAgICAgMiBuZXQ6bmV0aWZfcngKKyAgICAgICAgICAgICAgICAgIDgzNDAgbmFwaTpuYXBpX3BvbGwKKyAgICAgICAgICAgICAgICAgICAgIDAgc2NoZWQ6c2NoZWRfa3RocmVhZF9zdG9wCisgICAgICAgICAgICAgICAgICAgICAwIHNjaGVkOnNjaGVkX2t0aHJlYWRfc3RvcF9yZXQKKyAgICAgICAgICAgICAgICAgIDM3NDkgc2NoZWQ6c2NoZWRfd2FrZXVwCisgICAgICAgICAgICAgICAgICAgICAwIHNjaGVkOnNjaGVkX3dha2V1cF9uZXcKKyAgICAgICAgICAgICAgICAgICAgIDAgc2NoZWQ6c2NoZWRfc3dpdGNoCisgICAgICAgICAgICAgICAgICAgIDI5IHNjaGVkOnNjaGVkX21pZ3JhdGVfdGFzaworICAgICAgICAgICAgICAgICAgICAgMCBzY2hlZDpzY2hlZF9wcm9jZXNzX2ZyZWUKKyAgICAgICAgICAgICAgICAgICAgIDEgc2NoZWQ6c2NoZWRfcHJvY2Vzc19leGl0CisgICAgICAgICAgICAgICAgICAgICAwIHNjaGVkOnNjaGVkX3dhaXRfdGFzaworICAgICAgICAgICAgICAgICAgICAgMCBzY2hlZDpzY2hlZF9wcm9jZXNzX3dhaXQKKyAgICAgICAgICAgICAgICAgICAgIDAgc2NoZWQ6c2NoZWRfcHJvY2Vzc19mb3JrCisgICAgICAgICAgICAgICAgICAgICAxIHNjaGVkOnNjaGVkX3Byb2Nlc3NfZXhlYworICAgICAgICAgICAgICAgICAgICAgMCBzY2hlZDpzY2hlZF9zdGF0X3dhaXQKKyAgICAgICAgIDIxMDY1MTk0MTU2NDEgc2NoZWQ6c2NoZWRfc3RhdF9zbGVlcAorICAgICAgICAgICAgICAgICAgICAgMCBzY2hlZDpzY2hlZF9zdGF0X2lvd2FpdAorICAgICAgICAgICAgIDE0NzQ1MzYxMyBzY2hlZDpzY2hlZF9zdGF0X2Jsb2NrZWQKKyAgICAgICAgICAgMTI5MDMwMjY5NTUgc2NoZWQ6c2NoZWRfc3RhdF9ydW50aW1lCisgICAgICAgICAgICAgICAgICAgICAwIHNjaGVkOnNjaGVkX3BpX3NldHByaW8KKyAgICAgICAgICAgICAgICAgIDM1NzQgd29ya3F1ZXVlOndvcmtxdWV1ZV9xdWV1ZV93b3JrCisgICAgICAgICAgICAgICAgICAzNTc0IHdvcmtxdWV1ZTp3b3JrcXVldWVfYWN0aXZhdGVfd29yaworICAgICAgICAgICAgICAgICAgICAgMCB3b3JrcXVldWU6d29ya3F1ZXVlX2V4ZWN1dGVfc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgIDAgd29ya3F1ZXVlOndvcmtxdWV1ZV9leGVjdXRlX2VuZAorICAgICAgICAgICAgICAgICAxNjYzMSBpcnE6aXJxX2hhbmRsZXJfZW50cnkKKyAgICAgICAgICAgICAgICAgMTY2MzEgaXJxOmlycV9oYW5kbGVyX2V4aXQKKyAgICAgICAgICAgICAgICAgMjg1MjEgaXJxOnNvZnRpcnFfZW50cnkKKyAgICAgICAgICAgICAgICAgMjg1MjEgaXJxOnNvZnRpcnFfZXhpdAorICAgICAgICAgICAgICAgICAyODcyOCBpcnE6c29mdGlycV9yYWlzZQorICAgICAgICAgICAgICAgICAgICAgMSBzeXNjYWxsczpzeXNfZW50ZXJfc2VuZG1tc2cKKyAgICAgICAgICAgICAgICAgICAgIDEgc3lzY2FsbHM6c3lzX2V4aXRfc2VuZG1tc2cKKyAgICAgICAgICAgICAgICAgICAgIDAgc3lzY2FsbHM6c3lzX2VudGVyX3JlY3ZtbXNnCisgICAgICAgICAgICAgICAgICAgICAwIHN5c2NhbGxzOnN5c19leGl0X3JlY3ZtbXNnCisgICAgICAgICAgICAgICAgICAgIDE0IHN5c2NhbGxzOnN5c19lbnRlcl9zb2NrZXRjYWxsCisgICAgICAgICAgICAgICAgICAgIDE0IHN5c2NhbGxzOnN5c19leGl0X3NvY2tldGNhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgICAgICAgMTY5NjUgc3lzY2FsbHM6c3lzX2VudGVyX3JlYWQKKyAgICAgICAgICAgICAgICAgMTY5NjUgc3lzY2FsbHM6c3lzX2V4aXRfcmVhZAorICAgICAgICAgICAgICAgICAxMjg1NCBzeXNjYWxsczpzeXNfZW50ZXJfd3JpdGUKKyAgICAgICAgICAgICAgICAgMTI4NTQgc3lzY2FsbHM6c3lzX2V4aXRfd3JpdGUKKyAgICAgICAgICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgICAgICAgICAgIC4KKworICAgICAgICAgIDU4LjAyOTcxMDk3MiBzZWNvbmRzIHRpbWUgZWxhcHNlZAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBMZXQncyBwaWNrIG9uZSBvZiB0aGVzZSB0cmFjZXBvaW50cyBhbmQgdGVsbCBwZXJmIHRvIGRvIGEgcHJvZmlsZQorICAgICAgICAgICAgICAgIHVzaW5nIGl0IGFzIHRoZSBzYW1wbGluZyBldmVudDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiByZWNvcmQgLWcgLWUgc2NoZWQ6c2NoZWRfd2FrZXVwIHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9zY2hlZC13YWtldXAtcHJvZmlsZS5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI3aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgc2NyZWVuc2hvdCBhYm92ZSBzaG93cyB0aGUgcmVzdWx0cyBvZiBydW5uaW5nIGEgcHJvZmlsZSB1c2luZworICAgICAgICAgICAgICAgIHNjaGVkOnNjaGVkX3N3aXRjaCB0cmFjZXBvaW50LCB3aGljaCBzaG93cyB0aGUgcmVsYXRpdmUgY29zdHMgb2YKKyAgICAgICAgICAgICAgICB2YXJpb3VzIHBhdGhzIHRvIHNjaGVkX3dha2V1cCAobm90ZSB0aGF0IHNjaGVkX3dha2V1cCBpcyB0aGUKKyAgICAgICAgICAgICAgICBuYW1lIG9mIHRoZSB0cmFjZXBvaW50IC0gaXQncyBhY3R1YWxseSBkZWZpbmVkIGp1c3QgaW5zaWRlCisgICAgICAgICAgICAgICAgdHR3dV9kb193YWtldXAoKSwgd2hpY2ggYWNjb3VudHMgZm9yIHRoZSBmdW5jdGlvbiBuYW1lIGFjdHVhbGx5CisgICAgICAgICAgICAgICAgZGlzcGxheWVkIGluIHRoZSBwcm9maWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgLyoKKyAgICAgICogTWFyayB0aGUgdGFzayBydW5uYWJsZSBhbmQgcGVyZm9ybSB3YWtldXAtcHJlZW1wdGlvbi4KKyAgICAgICovCisgICAgIHN0YXRpYyB2b2lkCisgICAgIHR0d3VfZG9fd2FrZXVwKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2VfZmxhZ3MpCisgICAgIHsKKyAgICAgICAgICB0cmFjZV9zY2hlZF93YWtldXAocCwgdHJ1ZSk7CisgICAgICAgICAgLgorICAgICAgICAgIC4KKyAgICAgICAgICAuCisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQSBjb3VwbGUgb2YgdGhlIG1vcmUgaW50ZXJlc3RpbmcgY2FsbGNoYWlucyBhcmUgZXhwYW5kZWQgYW5kCisgICAgICAgICAgICAgICAgZGlzcGxheWVkIGFib3ZlLCBiYXNpY2FsbHkgc29tZSBuZXR3b3JrIHJlY2VpdmUgcGF0aHMgdGhhdAorICAgICAgICAgICAgICAgIHByZXN1bWFibHkgZW5kIHVwIHdha2luZyB1cCB3Z2V0IChidXN5Ym94KSB3aGVuIG5ldHdvcmsgZGF0YSBpcworICAgICAgICAgICAgICAgIHJlYWR5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBOb3RlIHRoYXQgYmVjYXVzZSB0cmFjZXBvaW50cyBhcmUgbm9ybWFsbHkgdXNlZCBmb3IgdHJhY2luZywKKyAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCBzYW1wbGluZyBwZXJpb2QgZm9yIHRyYWNlcG9pbnRzIGlzIDEgaS5lLiBmb3IKKyAgICAgICAgICAgICAgICB0cmFjZXBvaW50cyBwZXJmIHdpbGwgc2FtcGxlIG9uIGV2ZXJ5IGV2ZW50IG9jY3VycmVuY2UgKHRoaXMKKyAgICAgICAgICAgICAgICBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgLWMgb3B0aW9uKS4gVGhpcyBpcyBpbiBjb250cmFzdCB0bworICAgICAgICAgICAgICAgIGhhcmR3YXJlIGNvdW50ZXJzIHN1Y2ggYXMgZm9yIGV4YW1wbGUgdGhlIGRlZmF1bHQgJ2N5Y2xlcycKKyAgICAgICAgICAgICAgICBoYXJkd2FyZSBjb3VudGVyIHVzZWQgZm9yIG5vcm1hbCBwcm9maWxpbmcsIHdoZXJlIHNhbXBsaW5nCisgICAgICAgICAgICAgICAgcGVyaW9kcyBhcmUgbXVjaCBoaWdoZXIgKGluIHRoZSB0aG91c2FuZHMpIGJlY2F1c2UgcHJvZmlsaW5nIHNob3VsZAorICAgICAgICAgICAgICAgIGhhdmUgYXMgbG93IGFuIG92ZXJoZWFkIGFzIHBvc3NpYmxlIGFuZCBzYW1wbGluZyBvbiBldmVyeSBjeWNsZQorICAgICAgICAgICAgICAgIHdvdWxkIGJlIHByb2hpYml0aXZlbHkgZXhwZW5zaXZlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLXBlcmYtdG8tZG8tYmFzaWMtdHJhY2luZyc+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgcGVyZiB0byBkbyBCYXNpYyBUcmFjaW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUHJvZmlsaW5nIGlzIGEgZ3JlYXQgdG9vbCBmb3Igc29sdmluZyBtYW55IHByb2JsZW1zIG9yIGZvcgorICAgICAgICAgICAgICAgIGdldHRpbmcgYSBoaWdoLWxldmVsIHZpZXcgb2Ygd2hhdCdzIGdvaW5nIG9uIHdpdGggYSB3b3JrbG9hZCBvcgorICAgICAgICAgICAgICAgIGFjcm9zcyB0aGUgc3lzdGVtLiBJdCBpcyBob3dldmVyIGJ5IGRlZmluaXRpb24gYW4gYXBwcm94aW1hdGlvbiwKKyAgICAgICAgICAgICAgICBhcyBzdWdnZXN0ZWQgYnkgdGhlIG1vc3QgcHJvbWluZW50IHdvcmQgYXNzb2NpYXRlZCB3aXRoIGl0LAorICAgICAgICAgICAgICAgICdzYW1wbGluZycuIE9uIHRoZSBvbmUgaGFuZCwgaXQgYWxsb3dzIGEgcmVwcmVzZW50YXRpdmUgcGljdHVyZSBvZgorICAgICAgICAgICAgICAgIHdoYXQncyBnb2luZyBvbiBpbiB0aGUgc3lzdGVtIHRvIGJlIGNoZWFwbHkgdGFrZW4sIGJ1dCBvbiB0aGUgb3RoZXIKKyAgICAgICAgICAgICAgICBoYW5kLCB0aGF0IGNoZWFwbmVzcyBsaW1pdHMgaXRzIHV0aWxpdHkgd2hlbiB0aGF0IGRhdGEgc3VnZ2VzdHMgYQorICAgICAgICAgICAgICAgIG5lZWQgdG8gJ2RpdmUgZG93bicgbW9yZSBkZWVwbHkgdG8gZGlzY292ZXIgd2hhdCdzIHJlYWxseSBnb2luZworICAgICAgICAgICAgICAgIG9uLiBJbiBzdWNoIGNhc2VzLCB0aGUgb25seSB3YXkgdG8gc2VlIHdoYXQncyByZWFsbHkgZ29pbmcgb24gaXMKKyAgICAgICAgICAgICAgICB0byBiZSBhYmxlIHRvIGxvb2sgYXQgKG9yIHN1bW1hcml6ZSBtb3JlIGludGVsbGlnZW50bHkpIHRoZQorICAgICAgICAgICAgICAgIGluZGl2aWR1YWwgc3RlcHMgdGhhdCBnbyBpbnRvIHRoZSBoaWdoZXItbGV2ZWwgYmVoYXZpb3IgZXhwb3NlZAorICAgICAgICAgICAgICAgIGJ5IHRoZSBjb2Fyc2UtZ3JhaW5lZCBwcm9maWxpbmcgZGF0YS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgYSBjb25jcmV0ZSBleGFtcGxlLCB3ZSBjYW4gdHJhY2UgYWxsIHRoZSBldmVudHMgd2UgdGhpbmsgbWlnaHQKKyAgICAgICAgICAgICAgICBiZSBhcHBsaWNhYmxlIHRvIG91ciB3b3JrbG9hZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiByZWNvcmQgLWcgLWUgc2tiOiogLWUgbmV0OiogLWUgbmFwaToqIC1lIHNjaGVkOnNjaGVkX3N3aXRjaCAtZSBzY2hlZDpzY2hlZF93YWtldXAgLWUgaXJxOioKKyAgICAgIC1lIHN5c2NhbGxzOnN5c19lbnRlcl9yZWFkIC1lIHN5c2NhbGxzOnN5c19leGl0X3JlYWQgLWUgc3lzY2FsbHM6c3lzX2VudGVyX3dyaXRlIC1lIHN5c2NhbGxzOnN5c19leGl0X3dyaXRlCisgICAgICB3Z2V0IDx1bGluayB1cmw9J2h0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyJz5odHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6MjwvdWxpbms+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFdlIGNhbiBsb29rIGF0IHRoZSByYXcgdHJhY2Ugb3V0cHV0IHVzaW5nICdwZXJmIHNjcmlwdCcgd2l0aCBubworICAgICAgICAgICAgICAgIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiBzY3JpcHQKKworICAgICAgICAgICBwZXJmICAxMjYyIFswMDBdIDExNjI0Ljg1NzA4Mjogc3lzX2V4aXRfcmVhZDogMHgwCisgICAgICAgICAgIHBlcmYgIDEyNjIgWzAwMF0gMTE2MjQuODU3MTkzOiBzY2hlZF93YWtldXA6IGNvbW09bWlncmF0aW9uLzAgcGlkPTYgcHJpbz0wIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1ODAyMTogc29mdGlycV9yYWlzZTogdmVjPTEgW2FjdGlvbj1USU1FUl0KKyAgICAgICAgICAgd2dldCAgMTI2MiBbMDAxXSAxMTYyNC44NTgwNzQ6IHNvZnRpcnFfZW50cnk6IHZlYz0xIFthY3Rpb249VElNRVJdCisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU4MDgxOiBzb2Z0aXJxX2V4aXQ6IHZlYz0xIFthY3Rpb249VElNRVJdCisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU4MTY2OiBzeXNfZW50ZXJfcmVhZDogZmQ6IDB4MDAwMywgYnVmOiAweGJmODJjOTQwLCBjb3VudDogMHgwMjAwCisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU4MTc3OiBzeXNfZXhpdF9yZWFkOiAweDIwMAorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1ODg3ODoga2ZyZWVfc2tiOiBza2JhZGRyPTB4ZWIyNDhkODAgcHJvdG9jb2w9MCBsb2NhdGlvbj0weGMxNWE1MzA4CisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU4OTQ1OiBrZnJlZV9za2I6IHNrYmFkZHI9MHhlYjI0ODAwMCBwcm90b2NvbD0wIGxvY2F0aW9uPTB4YzE1YTUzMDgKKyAgICAgICAgICAgd2dldCAgMTI2MiBbMDAxXSAxMTYyNC44NTkwMjA6IHNvZnRpcnFfcmFpc2U6IHZlYz0xIFthY3Rpb249VElNRVJdCisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU5MDc2OiBzb2Z0aXJxX2VudHJ5OiB2ZWM9MSBbYWN0aW9uPVRJTUVSXQorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1OTA4Mzogc29mdGlycV9leGl0OiB2ZWM9MSBbYWN0aW9uPVRJTUVSXQorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1OTE2Nzogc3lzX2VudGVyX3JlYWQ6IGZkOiAweDAwMDMsIGJ1ZjogMHhiNzcyMDAwMCwgY291bnQ6IDB4MDQwMAorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1OTE5Mjogc3lzX2V4aXRfcmVhZDogMHgxZDcKKyAgICAgICAgICAgd2dldCAgMTI2MiBbMDAxXSAxMTYyNC44NTkyMjg6IHN5c19lbnRlcl9yZWFkOiBmZDogMHgwMDAzLCBidWY6IDB4Yjc3MjAwMDAsIGNvdW50OiAweDA0MDAKKyAgICAgICAgICAgd2dldCAgMTI2MiBbMDAxXSAxMTYyNC44NTkyMzM6IHN5c19leGl0X3JlYWQ6IDB4MAorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1OTU3Mzogc3lzX2VudGVyX3JlYWQ6IGZkOiAweDAwMDMsIGJ1ZjogMHhiZjgyYzU4MCwgY291bnQ6IDB4MDIwMAorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1OTU4NDogc3lzX2V4aXRfcmVhZDogMHgyMDAKKyAgICAgICAgICAgd2dldCAgMTI2MiBbMDAxXSAxMTYyNC44NTk4NjQ6IHN5c19lbnRlcl9yZWFkOiBmZDogMHgwMDAzLCBidWY6IDB4Yjc3MjAwMDAsIGNvdW50OiAweDA0MDAKKyAgICAgICAgICAgd2dldCAgMTI2MiBbMDAxXSAxMTYyNC44NTk4ODg6IHN5c19leGl0X3JlYWQ6IDB4NDAwCisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU5OTM1OiBzeXNfZW50ZXJfcmVhZDogZmQ6IDB4MDAwMywgYnVmOiAweGI3NzIwMDAwLCBjb3VudDogMHgwNDAwCisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU5OTQ0OiBzeXNfZXhpdF9yZWFkOiAweDQwMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIGdpdmVzIHVzIGEgZGV0YWlsZWQgdGltZXN0YW1wZWQgc2VxdWVuY2Ugb2YgZXZlbnRzIHRoYXQKKyAgICAgICAgICAgICAgICBvY2N1cnJlZCB3aXRoaW4gdGhlIHdvcmtsb2FkIHdpdGggcmVzcGVjdCB0byB0aG9zZSBldmVudHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIG1hbnkgd2F5cywgcHJvZmlsaW5nIGNhbiBiZSB2aWV3ZWQgYXMgYSBzdWJzZXQgb2YgdHJhY2luZyAtCisgICAgICAgICAgICAgICAgdGhlb3JldGljYWxseSwgaWYgeW91IGhhdmUgYSBzZXQgb2YgdHJhY2UgZXZlbnRzIHRoYXQncyBzdWZmaWNpZW50CisgICAgICAgICAgICAgICAgdG8gY2FwdHVyZSBhbGwgdGhlIGltcG9ydGFudCBhc3BlY3RzIG9mIGEgd29ya2xvYWQsIHlvdSBjYW4gZGVyaXZlCisgICAgICAgICAgICAgICAgYW55IG9mIHRoZSByZXN1bHRzIG9yIHZpZXdzIHRoYXQgYSBwcm9maWxpbmcgcnVuIGNhbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW5vdGhlciBhc3BlY3Qgb2YgdHJhZGl0aW9uYWwgcHJvZmlsaW5nIGlzIHRoYXQgd2hpbGUgcG93ZXJmdWwgaW4KKyAgICAgICAgICAgICAgICBtYW55IHdheXMsIGl0J3MgbGltaXRlZCBieSB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhlIHVuZGVybHlpbmcgZGF0YS4KKyAgICAgICAgICAgICAgICBQcm9maWxpbmcgdG9vbHMgb2ZmZXIgdmFyaW91cyB3YXlzIG9mIHNvcnRpbmcgYW5kIHByZXNlbnRpbmcgdGhlCisgICAgICAgICAgICAgICAgc2FtcGxlIGRhdGEsIHdoaWNoIG1ha2UgaXQgbXVjaCBtb3JlIHVzZWZ1bCBhbmQgYW1lbmFibGUgdG8gdXNlcgorICAgICAgICAgICAgICAgIGV4cGVyaW1lbnRhdGlvbiwgYnV0IGluIHRoZSBlbmQgaXQgY2FuJ3QgYmUgdXNlZCBpbiBhbiBvcGVuLWVuZGVkCisgICAgICAgICAgICAgICAgd2F5IHRvIGV4dHJhY3QgZGF0YSB0aGF0IGp1c3QgaXNuJ3QgcHJlc2VudCBhcyBhIGNvbnNlcXVlbmNlIG9mCisgICAgICAgICAgICAgICAgdGhlIGZhY3QgdGhhdCBjb25jZXB0dWFsbHksIG1vc3Qgb2YgaXQgaGFzIGJlZW4gdGhyb3duIGF3YXkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZ1bGwtYmxvd24gZGV0YWlsZWQgdHJhY2luZyBkYXRhIGRvZXMgaG93ZXZlciBvZmZlciB0aGUgb3Bwb3J0dW5pdHkKKyAgICAgICAgICAgICAgICB0byBtYW5pcHVsYXRlIGFuZCBwcmVzZW50IHRoZSBpbmZvcm1hdGlvbiBjb2xsZWN0ZWQgZHVyaW5nIGEKKyAgICAgICAgICAgICAgICB0cmFjaW5nIHJ1biBpbiBhbiBpbmZpbml0ZSB2YXJpZXR5IG9mIHdheXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFub3RoZXIgd2F5IHRvIGxvb2sgYXQgaXQgaXMgdGhhdCB0aGVyZSBhcmUgb25seSBzbyBtYW55IHdheXMgdGhhdAorICAgICAgICAgICAgICAgIHRoZSAncHJpbWl0aXZlJyBjb3VudGVycyBjYW4gYmUgdXNlZCBvbiB0aGVpciBvd24gdG8gZ2VuZXJhdGUKKyAgICAgICAgICAgICAgICBpbnRlcmVzdGluZyBvdXRwdXQ7IHRvIGdldCBhbnl0aGluZyBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gc2ltcGxlCisgICAgICAgICAgICAgICAgY291bnRzIHJlcXVpcmVzIHNvbWUgYW1vdW50IG9mIGFkZGl0aW9uYWwgbG9naWMsIHdoaWNoIGlzIHR5cGljYWxseQorICAgICAgICAgICAgICAgIHZlcnkgc3BlY2lmaWMgdG8gdGhlIHByb2JsZW0gYXQgaGFuZC4gRm9yIGV4YW1wbGUsIGlmIHdlIHdhbnRlZCB0bworICAgICAgICAgICAgICAgIG1ha2UgdXNlIG9mIGEgJ2NvdW50ZXInIHRoYXQgbWFwcyB0byB0aGUgdmFsdWUgb2YgdGhlIHRpbWUKKyAgICAgICAgICAgICAgICBkaWZmZXJlbmNlIGJldHdlZW4gd2hlbiBhIHByb2Nlc3Mgd2FzIHNjaGVkdWxlZCB0byBydW4gb24gYQorICAgICAgICAgICAgICAgIHByb2Nlc3NvciBhbmQgdGhlIHRpbWUgaXQgYWN0dWFsbHkgcmFuLCB3ZSB3b3VsZG4ndCBleHBlY3Qgc3VjaAorICAgICAgICAgICAgICAgIGEgY291bnRlciB0byBleGlzdCBvbiBpdHMgb3duLCBidXQgd2UgY291bGQgZGVyaXZlIG9uZSBjYWxsZWQgc2F5CisgICAgICAgICAgICAgICAgJ3dha2V1cF9sYXRlbmN5JyBhbmQgdXNlIGl0IHRvIGV4dHJhY3QgYSB1c2VmdWwgdmlldyBvZiB0aGF0IG1ldHJpYworICAgICAgICAgICAgICAgIGZyb20gdHJhY2UgZGF0YS4gTGlrZXdpc2UsIHdlIHJlYWxseSBjYW4ndCBmaWd1cmUgb3V0IGZyb20gc3RhbmRhcmQKKyAgICAgICAgICAgICAgICBwcm9maWxpbmcgdG9vbHMgaG93IG11Y2ggZGF0YSBldmVyeSBwcm9jZXNzIG9uIHRoZSBzeXN0ZW0gcmVhZHMgYW5kCisgICAgICAgICAgICAgICAgd3JpdGVzLCBhbG9uZyB3aXRoIGhvdyBtYW55IG9mIHRob3NlIHJlYWRzIGFuZCB3cml0ZXMgZmFpbAorICAgICAgICAgICAgICAgIGNvbXBsZXRlbHkuIElmIHdlIGhhdmUgc3VmZmljaWVudCB0cmFjZSBkYXRhLCBob3dldmVyLCB3ZSBjb3VsZAorICAgICAgICAgICAgICAgIHdpdGggdGhlIHJpZ2h0IHRvb2xzIGVhc2lseSBleHRyYWN0IGFuZCBwcmVzZW50IHRoYXQgaW5mb3JtYXRpb24sCisgICAgICAgICAgICAgICAgYnV0IHdlJ2QgbmVlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBwcmUtY2FubmVkIHByb2ZpbGluZyB0b29scyB0bworICAgICAgICAgICAgICAgIGRvIHRoYXQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEx1Y2tpbHksIHRoZXJlIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIHdheSB0byBoYW5kbGUgc3VjaCBuZWVkcywKKyAgICAgICAgICAgICAgICBjYWxsZWQgJ3Byb2dyYW1taW5nIGxhbmd1YWdlcycuIE1ha2luZyBwcm9ncmFtbWluZyBsYW5ndWFnZXMKKyAgICAgICAgICAgICAgICBlYXNpbHkgYXZhaWxhYmxlIHRvIGFwcGx5IHRvIHN1Y2ggcHJvYmxlbXMgZ2l2ZW4gdGhlIHNwZWNpZmljCisgICAgICAgICAgICAgICAgZm9ybWF0IG9mIGRhdGEgaXMgY2FsbGVkIGEgJ3Byb2dyYW1taW5nIGxhbmd1YWdlIGJpbmRpbmcnIGZvcgorICAgICAgICAgICAgICAgIHRoYXQgZGF0YSBhbmQgbGFuZ3VhZ2UuIFBlcmYgc3VwcG9ydHMgdHdvIHByb2dyYW1taW5nIGxhbmd1YWdlCisgICAgICAgICAgICAgICAgYmluZGluZ3MsIG9uZSBmb3IgUHl0aG9uIGFuZCBvbmUgZm9yIFBlcmwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlR5aW5nIGl0IFRvZ2V0aGVyOjwvZW1waGFzaXM+IExhbmd1YWdlIGJpbmRpbmdzIGZvciBtYW5pcHVsYXRpbmcgYW5kCisgICAgICAgICAgICAgICAgYWdncmVnYXRpbmcgdHJhY2UgZGF0YSBhcmUgb2YgY291cnNlIG5vdCBhIG5ldworICAgICAgICAgICAgICAgIGlkZWEuICBPbmUgb2YgdGhlIGZpcnN0IHByb2plY3RzIHRvIGRvIHRoaXMgd2FzIElCTSdzIERQcm9iZXMKKyAgICAgICAgICAgICAgICBkcGNjIGNvbXBpbGVyLCBhbiBBTlNJIEMgY29tcGlsZXIgd2hpY2ggdGFyZ2V0ZWQgYSBsb3ctbGV2ZWwKKyAgICAgICAgICAgICAgICBhc3NlbWJseSBsYW5ndWFnZSBydW5uaW5nIG9uIGFuIGluLWtlcm5lbCBpbnRlcnByZXRlciBvbiB0aGUKKyAgICAgICAgICAgICAgICB0YXJnZXQgc3lzdGVtLiAgVGhpcyBpcyBleGFjdGx5IGFuYWxvZ291cyB0byB3aGF0IFN1bidzIERUcmFjZQorICAgICAgICAgICAgICAgIGRpZCwgZXhjZXB0IHRoYXQgRFRyYWNlIGludmVudGVkIGl0cyBvd24gbGFuZ3VhZ2UgZm9yIHRoZSBwdXJwb3NlLgorICAgICAgICAgICAgICAgIFN5c3RlbXRhcCwgaGVhdmlseSBpbnNwaXJlZCBieSBEVHJhY2UsIGFsc28gY3JlYXRlZCBpdHMgb3duCisgICAgICAgICAgICAgICAgb25lLW9mZiBsYW5ndWFnZSwgYnV0IHJhdGhlciB0aGFuIHJ1bm5pbmcgdGhlIHByb2R1Y3Qgb24gYW4KKyAgICAgICAgICAgICAgICBpbi1rZXJuZWwgaW50ZXJwcmV0ZXIsIGNyZWF0ZWQgYW4gZWxhYm9yYXRlIGNvbXBpbGVyLWJhc2VkCisgICAgICAgICAgICAgICAgbWFjaGluZXJ5IHRvIHRyYW5zbGF0ZSBpdHMgbGFuZ3VhZ2UgaW50byBrZXJuZWwgbW9kdWxlcyB3cml0dGVuCisgICAgICAgICAgICAgICAgaW4gQy4KKyAgICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBOb3cgdGhhdCB3ZSBoYXZlIHRoZSB0cmFjZSBkYXRhIGluIHBlcmYuZGF0YSwgd2UgY2FuIHVzZQorICAgICAgICAgICAgICAgICdwZXJmIHNjcmlwdCAtZycgdG8gZ2VuZXJhdGUgYSBza2VsZXRvbiBzY3JpcHQgd2l0aCBoYW5kbGVycworICAgICAgICAgICAgICAgIGZvciB0aGUgcmVhZC93cml0ZSBlbnRyeS9leGl0IGV2ZW50cyB3ZSByZWNvcmRlZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiBzY3JpcHQgLWcgcHl0aG9uCisgICAgIGdlbmVyYXRlZCBQeXRob24gc2NyaXB0OiBwZXJmLXNjcmlwdC5weQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgc2tlbGV0b24gc2NyaXB0IHNpbXBseSBjcmVhdGVzIGEgcHl0aG9uIGZ1bmN0aW9uIGZvciBlYWNoCisgICAgICAgICAgICAgICAgZXZlbnQgdHlwZSBpbiB0aGUgcGVyZi5kYXRhIGZpbGUuIFRoZSBib2R5IG9mIGVhY2ggZnVuY3Rpb24gc2ltcGx5CisgICAgICAgICAgICAgICAgcHJpbnRzIHRoZSBldmVudCBuYW1lIGFsb25nIHdpdGggaXRzIHBhcmFtZXRlcnMuIEZvciBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZGVmIG5ldF9fbmV0aWZfcngoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKyAgICAgICAgICAgIGNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorICAgICAgICAgICAgc2tiYWRkciwgbGVuLCBuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRfaGVhZGVyKGV2ZW50X25hbWUsIGNvbW1vbl9jcHUsIGNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0pCisKKwkJICAgICBwcmludCAic2tiYWRkcj0ldSwgbGVuPSV1LCBuYW1lPSVzXG4iICUgKHNrYmFkZHIsIGxlbiwgbmFtZSksCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFdlIGNhbiBydW4gdGhhdCBzY3JpcHQgZGlyZWN0bHkgdG8gcHJpbnQgYWxsIG9mIHRoZSBldmVudHMKKyAgICAgICAgICAgICAgICBjb250YWluZWQgaW4gdGhlIHBlcmYuZGF0YSBmaWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBwZXJmIHNjcmlwdCAtcyBwZXJmLXNjcmlwdC5weQorCisgICAgIGluIHRyYWNlX2JlZ2luCisgICAgIHN5c2NhbGxzX19zeXNfZXhpdF9yZWFkICAgICAwIDExNjI0Ljg1NzA4Mjc5NSAgICAgMTI2MiBwZXJmICAgICAgICAgICAgICAgICAgbnI9MywgcmV0PTAKKyAgICAgc2NoZWRfX3NjaGVkX3dha2V1cCAgICAgIDAgMTE2MjQuODU3MTkzNDk4ICAgICAxMjYyIHBlcmYgICAgICAgICAgICAgICAgICBjb21tPW1pZ3JhdGlvbi8wLCBwaWQ9NiwgcHJpbz0wLCAgICAgIHN1Y2Nlc3M9MSwgdGFyZ2V0X2NwdT0wCisgICAgIGlycV9fc29mdGlycV9yYWlzZSAgICAgICAxIDExNjI0Ljg1ODAyMTYzNSAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgdmVjPVRJTUVSCisgICAgIGlycV9fc29mdGlycV9lbnRyeSAgICAgICAxIDExNjI0Ljg1ODA3NDA3NSAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgdmVjPVRJTUVSCisgICAgIGlycV9fc29mdGlycV9leGl0ICAgICAgICAxIDExNjI0Ljg1ODA4MTM4OSAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgdmVjPVRJTUVSCisgICAgIHN5c2NhbGxzX19zeXNfZW50ZXJfcmVhZCAgICAgMSAxMTYyNC44NTgxNjY0MzQgICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIGZkPTMsIGJ1Zj0zMjEzMDE5NDU2LCAgICAgIGNvdW50PTUxMgorICAgICBzeXNjYWxsc19fc3lzX2V4aXRfcmVhZCAgICAgMSAxMTYyNC44NTgxNzc5MjQgICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIHJldD01MTIKKyAgICAgc2tiX19rZnJlZV9za2IgICAgICAgICAgIDEgMTE2MjQuODU4ODc4MTg4ICAgICAxMjYyIHdnZXQgICAgICAgICAgICAgICAgICBza2JhZGRyPTM5NDUwNDEyODAsICAgICAgICAgICBsb2NhdGlvbj0zMjQzOTIyMTg0LCBwcm90b2NvbD0wCisgICAgIHNrYl9fa2ZyZWVfc2tiICAgICAgICAgICAxIDExNjI0Ljg1ODk0NTYwOCAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgc2tiYWRkcj0zOTQ1MDM3ODI0LCAgICAgIGxvY2F0aW9uPTMyNDM5MjIxODQsIHByb3RvY29sPTAKKyAgICAgaXJxX19zb2Z0aXJxX3JhaXNlICAgICAgIDEgMTE2MjQuODU5MDIwOTQyICAgICAxMjYyIHdnZXQgICAgICAgICAgICAgICAgICB2ZWM9VElNRVIKKyAgICAgaXJxX19zb2Z0aXJxX2VudHJ5ICAgICAgIDEgMTE2MjQuODU5MDc2OTM1ICAgICAxMjYyIHdnZXQgICAgICAgICAgICAgICAgICB2ZWM9VElNRVIKKyAgICAgaXJxX19zb2Z0aXJxX2V4aXQgICAgICAgIDEgMTE2MjQuODU5MDgzNDY5ICAgICAxMjYyIHdnZXQgICAgICAgICAgICAgICAgICB2ZWM9VElNRVIKKyAgICAgc3lzY2FsbHNfX3N5c19lbnRlcl9yZWFkICAgICAxIDExNjI0Ljg1OTE2NzU2NSAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgbnI9MywgZmQ9MywgYnVmPTMwNzc3MDE2MzIsICAgICAgY291bnQ9MTAyNAorICAgICBzeXNjYWxsc19fc3lzX2V4aXRfcmVhZCAgICAgMSAxMTYyNC44NTkxOTI1MzMgICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIHJldD00NzEKKyAgICAgc3lzY2FsbHNfX3N5c19lbnRlcl9yZWFkICAgICAxIDExNjI0Ljg1OTIyODA3MiAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgbnI9MywgZmQ9MywgYnVmPTMwNzc3MDE2MzIsICAgICAgY291bnQ9MTAyNAorICAgICBzeXNjYWxsc19fc3lzX2V4aXRfcmVhZCAgICAgMSAxMTYyNC44NTkyMzM3MDcgICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIHJldD0wCisgICAgIHN5c2NhbGxzX19zeXNfZW50ZXJfcmVhZCAgICAgMSAxMTYyNC44NTk1NzMwMDggICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIGZkPTMsIGJ1Zj0zMjEzMDE4NDk2LCAgICAgIGNvdW50PTUxMgorICAgICBzeXNjYWxsc19fc3lzX2V4aXRfcmVhZCAgICAgMSAxMTYyNC44NTk1ODQ4MTggICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIHJldD01MTIKKyAgICAgc3lzY2FsbHNfX3N5c19lbnRlcl9yZWFkICAgICAxIDExNjI0Ljg1OTg2NDU2MiAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgbnI9MywgZmQ9MywgYnVmPTMwNzc3MDE2MzIsICAgICAgY291bnQ9MTAyNAorICAgICBzeXNjYWxsc19fc3lzX2V4aXRfcmVhZCAgICAgMSAxMTYyNC44NTk4ODg3NzAgICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIHJldD0xMDI0CisgICAgIHN5c2NhbGxzX19zeXNfZW50ZXJfcmVhZCAgICAgMSAxMTYyNC44NTk5MzUxNDAgICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIGZkPTMsIGJ1Zj0zMDc3NzAxNjMyLCAgICAgIGNvdW50PTEwMjQKKyAgICAgc3lzY2FsbHNfX3N5c19leGl0X3JlYWQgICAgIDEgMTE2MjQuODU5OTQ0MDMyICAgICAxMjYyIHdnZXQgICAgICAgICAgICAgICAgICBucj0zLCByZXQ9MTAyNAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGF0IGluIGl0c2VsZiBpc24ndCB2ZXJ5IHVzZWZ1bDsgYWZ0ZXIgYWxsLCB3ZSBjYW4gYWNjb21wbGlzaAorICAgICAgICAgICAgICAgIHByZXR0eSBtdWNoIHRoZSBzYW1lIHRoaW5nIGJ5IHNpbXBseSBydW5uaW5nICdwZXJmIHNjcmlwdCcKKyAgICAgICAgICAgICAgICB3aXRob3V0IGFyZ3VtZW50cyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIHBlcmYuZGF0YSBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXZSBjYW4gaG93ZXZlciByZXBsYWNlIHRoZSBwcmludCBzdGF0ZW1lbnRzIGluIHRoZSBnZW5lcmF0ZWQKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBib2RpZXMgd2l0aCB3aGF0ZXZlciB3ZSB3YW50LCBhbmQgdGhlcmVieSBtYWtlIGl0CisgICAgICAgICAgICAgICAgaW5maW5pdGVseSBtb3JlIHVzZWZ1bC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgYSBzaW1wbGUgZXhhbXBsZSwgbGV0J3MganVzdCByZXBsYWNlIHRoZSBwcmludCBzdGF0ZW1lbnRzIGluCisgICAgICAgICAgICAgICAgdGhlIGZ1bmN0aW9uIGJvZGllcyB3aXRoIGEgc2ltcGxlIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3RoaW5nIGJ1dAorICAgICAgICAgICAgICAgIGluY3JlbWVudCBhIHBlci1ldmVudCBjb3VudC4gV2hlbiB0aGUgcHJvZ3JhbSBpcyBydW4gYWdhaW5zdCBhCisgICAgICAgICAgICAgICAgcGVyZi5kYXRhIGZpbGUsIGVhY2ggdGltZSBhIHBhcnRpY3VsYXIgZXZlbnQgaXMgZW5jb3VudGVyZWQsCisgICAgICAgICAgICAgICAgYSB0YWxseSBpcyBpbmNyZW1lbnRlZCBmb3IgdGhhdCBldmVudC4gRm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkZWYgbmV0X19uZXRpZl9yeChldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LAorICAgICAgICAgICAgY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCisgICAgICAgICAgICBza2JhZGRyLCBsZW4sIG5hbWUpOgorCQkgICAgICAgICAgaW5jX2NvdW50cyhldmVudF9uYW1lKQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBFYWNoIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gaW4gdGhlIGdlbmVyYXRlZCBjb2RlIGlzIG1vZGlmaWVkCisgICAgICAgICAgICAgICAgdG8gZG8gdGhpcy4gRm9yIGNvbnZlbmllbmNlLCB3ZSBkZWZpbmUgYSBjb21tb24gZnVuY3Rpb24gY2FsbGVkCisgICAgICAgICAgICAgICAgaW5jX2NvdW50cygpIHRoYXQgZWFjaCBoYW5kbGVyIGNhbGxzOyBpbmNfY291bnRzKCkgc2ltcGx5IHRhbGxpZXMKKyAgICAgICAgICAgICAgICBhIGNvdW50IGZvciBlYWNoIGV2ZW50IHVzaW5nIHRoZSAnY291bnRzJyBoYXNoLCB3aGljaCBpcyBhCisgICAgICAgICAgICAgICAgc3BlY2lhbGl6ZWQgaGFzaCBmdW5jdGlvbiB0aGF0IGRvZXMgUGVybC1saWtlIGF1dG92aXZpZmljYXRpb24sIGEKKyAgICAgICAgICAgICAgICBjYXBhYmlsaXR5IHRoYXQncyBleHRyZW1lbHkgdXNlZnVsIGZvciBraW5kcyBvZiBtdWx0aS1sZXZlbAorICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uIGNvbW1vbmx5IHVzZWQgaW4gcHJvY2Vzc2luZyB0cmFjZXMgKHNlZSBwZXJmJ3MKKyAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uIG9uIHRoZSBQeXRob24gbGFuZ3VhZ2UgYmluZGluZyBmb3IgZGV0YWlscyk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBjb3VudHMgPSBhdXRvZGljdCgpCisKKyAgICAgZGVmIGluY19jb3VudHMoZXZlbnRfbmFtZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGNvdW50c1tldmVudF9uYW1lXSArPSAxCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBjb3VudHNbZXZlbnRfbmFtZV0gPSAxCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZpbmFsbHksIGF0IHRoZSBlbmQgb2YgdGhlIHRyYWNlIHByb2Nlc3NpbmcgcnVuLCB3ZSB3YW50IHRvCisgICAgICAgICAgICAgICAgcHJpbnQgdGhlIHJlc3VsdCBvZiBhbGwgdGhlIHBlci1ldmVudCB0YWxsaWVzLiBGb3IgdGhhdCwgd2UKKyAgICAgICAgICAgICAgICB1c2UgdGhlIHNwZWNpYWwgJ3RyYWNlX2VuZCgpJyBmdW5jdGlvbjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRlZiB0cmFjZV9lbmQoKToKKyAgICAgICAgICAgIGZvciBldmVudF9uYW1lLCBjb3VudCBpbiBjb3VudHMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICIlLTQwcyAlMTBzXG4iICUgKGV2ZW50X25hbWUsIGNvdW50KQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgZW5kIHJlc3VsdCBpcyBhIHN1bW1hcnkgb2YgYWxsIHRoZSBldmVudHMgcmVjb3JkZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgdHJhY2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBza2JfX3NrYl9jb3B5X2RhdGFncmFtX2lvdmVjICAgICAgICAgICAgICAgICAgMTMxNDgKKyAgICAgaXJxX19zb2Z0aXJxX2VudHJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Nzk2CisgICAgIGlycV9faXJxX2hhbmRsZXJfZXhpdCAgICAgICAgICAgICAgICAgICAgICAgICAgMzgwNQorICAgICBpcnFfX3NvZnRpcnFfZXhpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3OTUKKyAgICAgc3lzY2FsbHNfX3N5c19lbnRlcl93cml0ZSAgICAgICAgICAgICAgICAgICAgICA4OTkwCisgICAgIG5ldF9fbmV0X2Rldl94bWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY1MgorICAgICBza2JfX2tmcmVlX3NrYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwNDcKKyAgICAgc2NoZWRfX3NjaGVkX3dha2V1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTU1CisgICAgIGlycV9faXJxX2hhbmRsZXJfZW50cnkgICAgICAgICAgICAgICAgICAgICAgICAgMzgwNAorICAgICBpcnFfX3NvZnRpcnFfcmFpc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3OTkKKyAgICAgbmV0X19uZXRfZGV2X3F1ZXVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjUyCisgICAgIHN5c2NhbGxzX19zeXNfZW50ZXJfcmVhZCAgICAgICAgICAgICAgICAgICAgICAxNzU5OQorICAgICBuZXRfX25ldGlmX3JlY2VpdmVfc2tiICAgICAgICAgICAgICAgICAgICAgICAgIDE3NDMKKyAgICAgc3lzY2FsbHNfX3N5c19leGl0X3JlYWQgICAgICAgICAgICAgICAgICAgICAgIDE3NTk4CisgICAgIG5ldF9fbmV0aWZfcnggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorICAgICBuYXBpX19uYXBpX3BvbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4NzcKKyAgICAgc3lzY2FsbHNfX3N5c19leGl0X3dyaXRlICAgICAgICAgICAgICAgICAgICAgICA4OTkwCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGlzIGlzIHByZXR0eSBtdWNoIGV4YWN0bHkgdGhlIHNhbWUgaW5mb3JtYXRpb24gd2UgZ2V0CisgICAgICAgICAgICAgICAgZnJvbSAncGVyZiBzdGF0Jywgd2hpY2ggZ29lcyBhIGxpdHRsZSB3YXkgdG8gc3VwcG9ydCB0aGUgaWRlYQorICAgICAgICAgICAgICAgIG1lbnRpb25lZCBwcmV2aW91c2x5IHRoYXQgZ2l2ZW4gdGhlIHJpZ2h0IGtpbmQgb2YgdHJhY2UgZGF0YSwKKyAgICAgICAgICAgICAgICBoaWdoZXItbGV2ZWwgcHJvZmlsaW5nLXR5cGUgc3VtbWFyaWVzIGNhbiBiZSBkZXJpdmVkIGZyb20gaXQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIERvY3VtZW50YXRpb24gb24gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2xpbnV4LmRpZS5uZXQvbWFuLzEvcGVyZi1zY3JpcHQtcHl0aG9uJz4ncGVyZiBzY3JpcHQnIHB5dGhvbiBiaW5kaW5nPC91bGluaz4uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc3lzdGVtLXdpZGUtdHJhY2luZy1hbmQtcHJvZmlsaW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5TeXN0ZW0tV2lkZSBUcmFjaW5nIGFuZCBQcm9maWxpbmc8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZXhhbXBsZXMgc28gZmFyIGhhdmUgZm9jdXNlZCBvbiB0cmFjaW5nIGEgcGFydGljdWxhciBwcm9ncmFtIG9yCisgICAgICAgICAgICAgICAgd29ya2xvYWQgLSBpbiBvdGhlciB3b3JkcywgZXZlcnkgcHJvZmlsaW5nIHJ1biBoYXMgc3BlY2lmaWVkIHRoZQorICAgICAgICAgICAgICAgIHByb2dyYW0gdG8gcHJvZmlsZSBpbiB0aGUgY29tbWFuZC1saW5lIGUuZy4gJ3BlcmYgcmVjb3JkIHdnZXQgLi4uJy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSXQncyBhbHNvIHBvc3NpYmxlLCBhbmQgbW9yZSBpbnRlcmVzdGluZyBpbiBtYW55IGNhc2VzLCB0byBydW4gYQorICAgICAgICAgICAgICAgIHN5c3RlbS13aWRlIHByb2ZpbGUgb3IgdHJhY2Ugd2hpbGUgcnVubmluZyB0aGUgd29ya2xvYWQgaW4gYQorICAgICAgICAgICAgICAgIHNlcGFyYXRlIHNoZWxsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBkbyBzeXN0ZW0td2lkZSBwcm9maWxpbmcgb3IgdHJhY2luZywgeW91IHR5cGljYWxseSB1c2UKKyAgICAgICAgICAgICAgICB0aGUgLWEgZmxhZyB0byAncGVyZiByZWNvcmQnLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBkZW1vbnN0cmF0ZSB0aGlzLCBvcGVuIHVwIG9uZSB3aW5kb3cgYW5kIHN0YXJ0IHRoZSBwcm9maWxlCisgICAgICAgICAgICAgICAgdXNpbmcgdGhlIC1hIGZsYWcgKHByZXNzIEN0cmwtQyB0byBzdG9wIHRyYWNpbmcpOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBwZXJmIHJlY29yZCAtZyAtYQorICAgICBeQ1sgcGVyZiByZWNvcmQ6IFdva2VuIHVwIDYgdGltZXMgdG8gd3JpdGUgZGF0YSBdCisgICAgIFsgcGVyZiByZWNvcmQ6IENhcHR1cmVkIGFuZCB3cm90ZSAxLjQwMCBNQiBwZXJmLmRhdGEgKH42MTE3MiBzYW1wbGVzKSBdCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIGFub3RoZXIgd2luZG93LCBydW4gdGhlIHdnZXQgdGVzdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgd2dldCA8dWxpbmsgdXJsPSdodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6Mic+aHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejI8L3VsaW5rPgorICAgICBDb25uZWN0aW5nIHRvIGRvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnICgxNDAuMjExLjE2OS41OTo4MCkKKyAgICAgbGludXgtMi42LjE5LjIudGFyLmIgMTAwJSB8KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKnwgNDE3MjdrICAwOjAwOjAwIEVUQQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBIZXJlIHdlIHNlZSBlbnRyaWVzIG5vdCBvbmx5IGZvciBvdXIgd2dldCBsb2FkLCBidXQgZm9yIG90aGVyCisgICAgICAgICAgICAgICAgcHJvY2Vzc2VzIHJ1bm5pbmcgb24gdGhlIHN5c3RlbSBhcyB3ZWxsOgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvcGVyZi1zeXN0ZW13aWRlLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIHRoZSBzbmFwc2hvdCBhYm92ZSwgd2UgY2FuIHNlZSBjYWxsY2hhaW5zIHRoYXQgb3JpZ2luYXRlIGluCisgICAgICAgICAgICAgICAgbGliYywgYW5kIGEgY2FsbGNoYWluIGZyb20gWG9yZyB0aGF0IGRlbW9uc3RyYXRlcyB0aGF0IHdlJ3JlCisgICAgICAgICAgICAgICAgdXNpbmcgYSBwcm9wcmlldGFyeSBYIGRyaXZlciBpbiB1c2Vyc3BhY2UgKG5vdGljZSB0aGUgcHJlc2VuY2UKKyAgICAgICAgICAgICAgICBvZiAnUFZSJyBhbmQgc29tZSBvdGhlciB1bnJlc29sdmFibGUgc3ltYm9scyBpbiB0aGUgZXhwYW5kZWQKKyAgICAgICAgICAgICAgICBYb3JnIGNhbGxjaGFpbikuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE5vdGUgYWxzbyB0aGF0IHdlIGhhdmUgYm90aCBrZXJuZWwgYW5kIHVzZXJzcGFjZSBlbnRyaWVzIGluIHRoZQorICAgICAgICAgICAgICAgIGFib3ZlIHNuYXBzaG90LiBXZSBjYW4gYWxzbyB0ZWxsIHBlcmYgdG8gZm9jdXMgb24gdXNlcnNwYWNlIGJ1dAorICAgICAgICAgICAgICAgIHByb3ZpZGluZyBhIG1vZGlmaWVyLCBpbiB0aGlzIGNhc2UgJ3UnLCB0byB0aGUgJ2N5Y2xlcycgaGFyZHdhcmUKKyAgICAgICAgICAgICAgICBjb3VudGVyIHdoZW4gd2UgcmVjb3JkIGEgcHJvZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiByZWNvcmQgLWcgLWEgLWUgY3ljbGVzOnUKKyAgICAgXkNbIHBlcmYgcmVjb3JkOiBXb2tlbiB1cCAyIHRpbWVzIHRvIHdyaXRlIGRhdGEgXQorICAgICBbIHBlcmYgcmVjb3JkOiBDYXB0dXJlZCBhbmQgd3JvdGUgMC4zNzYgTUIgcGVyZi5kYXRhICh+MTY0NDMgc2FtcGxlcykgXQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3BlcmYtcmVwb3J0LWN5Y2xlcy11LnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE5vdGljZSBpbiB0aGUgc2NyZWVuc2hvdCBhYm92ZSwgd2Ugc2VlIG9ubHkgdXNlcnNwYWNlIGVudHJpZXMgKFsuXSkKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRmluYWxseSwgd2UgY2FuIHByZXNzICdlbnRlcicgb24gYSBsZWFmIG5vZGUgYW5kIHNlbGVjdCB0aGUgJ1pvb20KKyAgICAgICAgICAgICAgICBpbnRvIERTTycgbWVudSBpdGVtIHRvIHNob3cgb25seSBlbnRyaWVzIGFzc29jaWF0ZWQgd2l0aCBhCisgICAgICAgICAgICAgICAgc3BlY2lmaWMgRFNPLiBJbiB0aGUgc2NyZWVuc2hvdCBiZWxvdywgd2UndmUgem9vbWVkIGludG8gdGhlCisgICAgICAgICAgICAgICAgJ2xpYmMnIERTTyB3aGljaCBzaG93cyBhbGwgdGhlIGVudHJpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIGxpYmMteHh4LnNvIERTTy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3BlcmYtc3lzdGVtd2lkZS1saWJjLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdlIGNhbiBhbHNvIHVzZSB0aGUgc3lzdGVtLXdpZGUgLWEgc3dpdGNoIHRvIGRvIHN5c3RlbS13aWRlCisgICAgICAgICAgICAgICAgdHJhY2luZy4gSGVyZSB3ZSdsbCB0cmFjZSBhIGNvdXBsZSBvZiBzY2hlZHVsZXIgZXZlbnRzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBwZXJmIHJlY29yZCAtYSAtZSBzY2hlZDpzY2hlZF9zd2l0Y2ggLWUgc2NoZWQ6c2NoZWRfd2FrZXVwCisgICAgIF5DWyBwZXJmIHJlY29yZDogV29rZW4gdXAgMzggdGltZXMgdG8gd3JpdGUgZGF0YSBdCisgICAgIFsgcGVyZiByZWNvcmQ6IENhcHR1cmVkIGFuZCB3cm90ZSA5Ljc4MCBNQiBwZXJmLmRhdGEgKH40MjcyOTkgc2FtcGxlcykgXQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBXZSBjYW4gbG9vayBhdCB0aGUgcmF3IG91dHB1dCB1c2luZyAncGVyZiBzY3JpcHQnIHdpdGggbm8KKyAgICAgICAgICAgICAgICBhcmd1bWVudHM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgc2NyaXB0CisKKyAgICAgICAgICAgICAgICBwZXJmICAxMzgzIFswMDFdICA2MTcxLjQ2MDA0NTogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICBwZXJmICAxMzgzIFswMDFdICA2MTcxLjQ2MDA2Njogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09cGVyZiBwcmV2X3BpZD0xMzgzIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SKyA9PT4gbmV4dF9jb21tPWt3b3JrZXIvMToxIG5leHRfcGlkPTIxIG5leHRfcHJpbz0xMjAKKyAgICAgICAgIGt3b3JrZXIvMToxICAgIDIxIFswMDFdICA2MTcxLjQ2MDA5Mzogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3dvcmtlci8xOjEgcHJldl9waWQ9MjEgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1wZXJmIG5leHRfcGlkPTEzODMgbmV4dF9wcmlvPTEyMAorICAgICAgICAgICAgIHN3YXBwZXIgICAgIDAgWzAwMF0gIDYxNzEuNDY4MDYzOiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci8wOjMgcGlkPTEyMDkgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCisgICAgICAgICAgICAgc3dhcHBlciAgICAgMCBbMDAwXSAgNjE3MS40NjgxMDc6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3dvcmtlci8wOjMgbmV4dF9waWQ9MTIwOSBuZXh0X3ByaW89MTIwCisgICAgICAgICBrd29ya2VyLzA6MyAgMTIwOSBbMDAwXSAgNjE3MS40NjgxNDM6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMDozIHByZXZfcGlkPTEyMDkgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCisgICAgICAgICAgICAgICAgcGVyZiAgMTM4MyBbMDAxXSAgNjE3MS40NzAwMzk6IHNjaGVkX3dha2V1cDogY29tbT1rd29ya2VyLzE6MSBwaWQ9MjEgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAxCisgICAgICAgICAgICAgICAgcGVyZiAgMTM4MyBbMDAxXSAgNjE3MS40NzAwNTg6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXBlcmYgcHJldl9waWQ9MTM4MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UisgPT0+IG5leHRfY29tbT1rd29ya2VyLzE6MSBuZXh0X3BpZD0yMSBuZXh0X3ByaW89MTIwCisgICAgICAgICBrd29ya2VyLzE6MSAgICAyMSBbMDAxXSAgNjE3MS40NzAwODI6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMToxIHByZXZfcGlkPTIxIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09cGVyZiBuZXh0X3BpZD0xMzgzIG5leHRfcHJpbz0xMjAKKyAgICAgICAgICAgICAgICBwZXJmICAxMzgzIFswMDFdICA2MTcxLjQ4MDAzNTogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdwZXJmLWZpbHRlcmluZyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkZpbHRlcmluZzwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTm90aWNlIHRoYXQgdGhlcmUgYXJlIGEgbG90IG9mIGV2ZW50cyB0aGF0IGRvbid0IHJlYWxseSBoYXZlCisgICAgICAgICAgICAgICAgICAgIGFueXRoaW5nIHRvIGRvIHdpdGggd2hhdCB3ZSdyZSBpbnRlcmVzdGVkIGluLCBuYW1lbHkgZXZlbnRzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgc2NoZWR1bGUgJ3BlcmYnIGl0c2VsZiBpbiBhbmQgb3V0IG9yIHRoYXQgd2FrZSBwZXJmIHVwLgorICAgICAgICAgICAgICAgICAgICBXZSBjYW4gZ2V0IHJpZCBvZiB0aG9zZSBieSB1c2luZyB0aGUgJy0tZmlsdGVyJyBvcHRpb24gLQorICAgICAgICAgICAgICAgICAgICBmb3IgZWFjaCBldmVudCB3ZSBzcGVjaWZ5IHVzaW5nIC1lLCB3ZSBjYW4gYWRkIGEgLS1maWx0ZXIKKyAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGhhdCB0byBmaWx0ZXIgb3V0IHRyYWNlIGV2ZW50cyB0aGF0IGNvbnRhaW4gZmllbGRzCisgICAgICAgICAgICAgICAgICAgIHdpdGggc3BlY2lmaWMgdmFsdWVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiByZWNvcmQgLWEgLWUgc2NoZWQ6c2NoZWRfc3dpdGNoIC0tZmlsdGVyICduZXh0X2NvbW0gIT0gcGVyZiAmYW1wOyZhbXA7IHByZXZfY29tbSAhPSBwZXJmJyAtZSBzY2hlZDpzY2hlZF93YWtldXAgLS1maWx0ZXIgJ2NvbW0gIT0gcGVyZicKKyAgICAgXkNbIHBlcmYgcmVjb3JkOiBXb2tlbiB1cCAzOCB0aW1lcyB0byB3cml0ZSBkYXRhIF0KKyAgICAgWyBwZXJmIHJlY29yZDogQ2FwdHVyZWQgYW5kIHdyb3RlIDkuNjg4IE1CIHBlcmYuZGF0YSAofjQyMzI3OSBzYW1wbGVzKSBdCisKKworICAgICByb290QGNyb3duYmF5On4jIHBlcmYgc2NyaXB0CisKKyAgICAgICAgICAgICBzd2FwcGVyICAgICAwIFswMDBdICA3OTMyLjE2MjE4MDogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rd29ya2VyLzA6MyBuZXh0X3BpZD0xMjA5IG5leHRfcHJpbz0xMjAKKyAgICAgICAgIGt3b3JrZXIvMDozICAxMjA5IFswMDBdICA3OTMyLjE2MjIzNjogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3dvcmtlci8wOjMgcHJldl9waWQ9MTIwOSBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKKyAgICAgICAgICAgICAgICBwZXJmICAxNDA3IFswMDFdICA3OTMyLjE3MDA0ODogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICBwZXJmICAxNDA3IFswMDFdICA3OTMyLjE4MDA0NDogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICBwZXJmICAxNDA3IFswMDFdICA3OTMyLjE5MDAzODogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICBwZXJmICAxNDA3IFswMDFdICA3OTMyLjIwMDA0NDogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICBwZXJmICAxNDA3IFswMDFdICA3OTMyLjIxMDA0NDogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICBwZXJmICAxNDA3IFswMDFdICA3OTMyLjIyMDA0NDogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICBzd2FwcGVyICAgICAwIFswMDFdICA3OTMyLjIzMDExMTogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICBzd2FwcGVyICAgICAwIFswMDFdICA3OTMyLjIzMDE0Njogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8xIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rd29ya2VyLzE6MSBuZXh0X3BpZD0yMSBuZXh0X3ByaW89MTIwCisgICAgICAgICBrd29ya2VyLzE6MSAgICAyMSBbMDAxXSAgNzkzMi4yMzAyMDU6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMToxIHByZXZfcGlkPTIxIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8xIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAorICAgICAgICAgICAgIHN3YXBwZXIgICAgIDAgWzAwMF0gIDc5MzIuMzI2MTA5OiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci8wOjMgcGlkPTEyMDkgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCisgICAgICAgICAgICAgc3dhcHBlciAgICAgMCBbMDAwXSAgNzkzMi4zMjYxNzE6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3dvcmtlci8wOjMgbmV4dF9waWQ9MTIwOSBuZXh0X3ByaW89MTIwCisgICAgICAgICBrd29ya2VyLzA6MyAgMTIwOSBbMDAwXSAgNzkzMi4zMjYyMTQ6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMDozIHByZXZfcGlkPTEyMDkgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB3ZSd2ZSBmaWx0ZXJlZCBvdXQgYWxsIGV2ZW50cyB0aGF0IGhhdmUgJ3BlcmYnCisgICAgICAgICAgICAgICAgICAgIGluIHRoZWlyICdjb21tJyBvciAnY29tbV9wcmV2JyBvciAnY29tbV9uZXh0JyBmaWVsZHMuIE5vdGljZQorICAgICAgICAgICAgICAgICAgICB0aGF0IHRoZXJlIGFyZSBzdGlsbCBldmVudHMgcmVjb3JkZWQgZm9yIHBlcmYsIGJ1dCBub3RpY2UKKyAgICAgICAgICAgICAgICAgICAgdGhhdCB0aG9zZSBldmVudHMgZG9uJ3QgaGF2ZSB2YWx1ZXMgb2YgJ3BlcmYnIGZvciB0aGUgZmlsdGVyZWQKKyAgICAgICAgICAgICAgICAgICAgZmllbGRzLiBUbyBjb21wbGV0ZWx5IGZpbHRlciBvdXQgYW55dGhpbmcgZnJvbSBwZXJmIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSBhIGJpdCBtb3JlIHdvcmssIGJ1dCBmb3IgdGhlIHB1cnBvc2Ugb2YgZGVtb25zdHJhdGluZworICAgICAgICAgICAgICAgICAgICBob3cgdG8gdXNlIGZpbHRlcnMsIGl0J3MgY2xvc2UgZW5vdWdoLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5UeWluZyBpdCBUb2dldGhlcjo8L2VtcGhhc2lzPiBUaGVzZSBhcmUgZXhhY3RseSB0aGUgc2FtZSBzZXQgb2YgZXZlbnQKKyAgICAgICAgICAgICAgICAgICAgZmlsdGVycyBkZWZpbmVkIGJ5IHRoZSB0cmFjZSBldmVudCBzdWJzeXN0ZW0uIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgZnRyYWNlL3RyYWNlY21kL2tlcm5lbHNoYXJrIHNlY3Rpb24gZm9yIG1vcmUgZGlzY3Vzc2lvbiBhYm91dAorICAgICAgICAgICAgICAgICAgICB0aGVzZSBldmVudCBmaWx0ZXJzLgorICAgICAgICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlR5aW5nIGl0IFRvZ2V0aGVyOjwvZW1waGFzaXM+IFRoZXNlIGV2ZW50IGZpbHRlcnMgYXJlIGltcGxlbWVudGVkIGJ5IGEKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lhbC1wdXJwb3NlIHBzZXVkby1pbnRlcnByZXRlciBpbiB0aGUga2VybmVsIGFuZCBhcmUgYW4KKyAgICAgICAgICAgICAgICAgICAgaW50ZWdyYWwgYW5kIGluZGlzcGVuc2FibGUgcGFydCBvZiB0aGUgcGVyZiBkZXNpZ24gYXMgaXQKKyAgICAgICAgICAgICAgICAgICAgcmVsYXRlcyB0byB0cmFjaW5nLiAga2VybmVsLWJhc2VkIGV2ZW50IGZpbHRlcnMgcHJvdmlkZSBhCisgICAgICAgICAgICAgICAgICAgIG1lY2hhbmlzbSB0byBwcmVjaXNlbHkgdGhyb3R0bGUgdGhlIGV2ZW50IHN0cmVhbSB0aGF0IGFwcGVhcnMKKyAgICAgICAgICAgICAgICAgICAgaW4gdXNlciBzcGFjZSwgd2hlcmUgaXQgbWFrZXMgc2Vuc2UgdG8gcHJvdmlkZSBiaW5kaW5ncyB0byByZWFsCisgICAgICAgICAgICAgICAgICAgIHByb2dyYW1taW5nIGxhbmd1YWdlcyBmb3IgcG9zdHByb2Nlc3NpbmcgdGhlIGV2ZW50IHN0cmVhbS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBhcmNoaXRlY3R1cmUgYWxsb3dzIGZvciB0aGUgaW50ZWxsaWdlbnQgYW5kIGZsZXhpYmxlCisgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbmluZyBvZiBwcm9jZXNzaW5nIGJldHdlZW4gdGhlIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJhc3QgdGhpcyB3aXRoIG90aGVyIHRvb2xzIHN1Y2ggYXMgU3lzdGVtVGFwLCB3aGljaCBkb2VzCisgICAgICAgICAgICAgICAgICAgIGFsbCBvZiBpdHMgcHJvY2Vzc2luZyBpbiB0aGUga2VybmVsIGFuZCBhcyBzdWNoIHJlcXVpcmVzIGEKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCBwcm9qZWN0LWRlZmluZWQgbGFuZ3VhZ2UgaW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgdGhhdAorICAgICAgICAgICAgICAgICAgICBkZXNpZ24sIG9yIExUVG5nLCB3aGVyZSBldmVyeXRoaW5nIGlzIHNlbnQgdG8gdXNlcnNwYWNlIGFuZAorICAgICAgICAgICAgICAgICAgICBhcyBzdWNoIHJlcXVpcmVzIGEgc3VwZXItZWZmaWNpZW50IGtlcm5lbC10by11c2Vyc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0IG1lY2hhbmlzbSBpbiBvcmRlciB0byBmdW5jdGlvbiBwcm9wZXJseS4gIFdoaWxlCisgICAgICAgICAgICAgICAgICAgIHBlcmYgY2VydGFpbmx5IGNhbiBiZW5lZml0IGZyb20gZm9yIGluc3RhbmNlIGFkdmFuY2VzIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSBkZXNpZ24gb2YgdGhlIHRyYW5zcG9ydCwgaXQgZG9lc24ndCBmdW5kYW1lbnRhbGx5IGRlcGVuZAorICAgICAgICAgICAgICAgICAgICBvbiB0aGVtLiAgQmFzaWNhbGx5LCBpZiB5b3UgZmluZCB0aGF0IHlvdXIgcGVyZiB0cmFjaW5nCisgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIGlzIGNhdXNpbmcgYnVmZmVyIEkvTyBvdmVycnVucywgaXQgcHJvYmFibHkKKyAgICAgICAgICAgICAgICAgICAgbWVhbnMgdGhhdCB5b3UgYXJlbid0IHRha2luZyBlbm91Z2ggYWR2YW50YWdlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBrZXJuZWwgZmlsdGVyaW5nIGVuZ2luZS4KKyAgICAgICAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1keW5hbWljLXRyYWNlcG9pbnRzJz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBEeW5hbWljIFRyYWNlcG9pbnRzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgcGVyZiBpc24ndCByZXN0cmljdGVkIHRvIHRoZSBmaXhlZCBzZXQgb2Ygc3RhdGljIHRyYWNlcG9pbnRzCisgICAgICAgICAgICAgICAgbGlzdGVkIGJ5ICdwZXJmIGxpc3QnLiBVc2VycyBjYW4gYWxzbyBhZGQgdGhlaXIgb3duICdkeW5hbWljJworICAgICAgICAgICAgICAgIHRyYWNlcG9pbnRzIGFueXdoZXJlIGluIHRoZSBrZXJuZWwuIEZvciBpbnN0YW5jZSwgc3VwcG9zZSB3ZQorICAgICAgICAgICAgICAgIHdhbnQgdG8gZGVmaW5lIG91ciBvd24gdHJhY2Vwb2ludCBvbiBkb19mb3JrKCkuIFdlIGNhbiBkbyB0aGF0CisgICAgICAgICAgICAgICAgdXNpbmcgdGhlICdwZXJmIHByb2JlJyBwZXJmIHN1YmNvbW1hbmQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgcHJvYmUgZG9fZm9yaworICAgICBBZGRlZCBuZXcgZXZlbnQ6CisgICAgICAgcHJvYmU6ZG9fZm9yayAgICAgICAgKG9uIGRvX2ZvcmspCisKKyAgICAgWW91IGNhbiBub3cgdXNlIGl0IGluIGFsbCBwZXJmIHRvb2xzLCBzdWNoIGFzOgorCisJICAgICBwZXJmIHJlY29yZCAtZSBwcm9iZTpkb19mb3JrIC1hUiBzbGVlcCAxCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFkZGluZyBhIG5ldyB0cmFjZXBvaW50IHZpYSAncGVyZiBwcm9iZScgcmVzdWx0cyBpbiBhbiBldmVudAorICAgICAgICAgICAgICAgIHdpdGggYWxsIHRoZSBleHBlY3RlZCBmaWxlcyBhbmQgZm9ybWF0IGluCisgICAgICAgICAgICAgICAgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMsIGp1c3QgdGhlIHNhbWUgYXMgZm9yIHN0YXRpYworICAgICAgICAgICAgICAgIHRyYWNlcG9pbnRzIChhcyBkaXNjdXNzZWQgaW4gbW9yZSBkZXRhaWwgaW4gdGhlIHRyYWNlIGV2ZW50cworICAgICAgICAgICAgICAgIHN1YnN5c3RlbSBzZWN0aW9uOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy9wcm9iZS9kb19mb3JrIyBscyAtYWwKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBPY3QgMjggMTE6NDIgLgorICAgICBkcnd4ci14ci14ICAgIDMgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE9jdCAyOCAxMTo0MiAuLgorICAgICAtcnctci0tci0tICAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE9jdCAyOCAxMTo0MiBlbmFibGUKKyAgICAgLXJ3LXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBPY3QgMjggMTE6NDIgZmlsdGVyCisgICAgIC1yLS1yLS1yLS0gICAgMSByb290ICAgICByb290ICAgICAgICAgICAgIDAgT2N0IDI4IDExOjQyIGZvcm1hdAorICAgICAtci0tci0tci0tICAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE9jdCAyOCAxMTo0MiBpZAorCisgICAgIHJvb3RAY3Jvd25iYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMvcHJvYmUvZG9fZm9yayMgY2F0IGZvcm1hdAorICAgICBuYW1lOiBkb19mb3JrCisgICAgIElEOiA5NDQKKyAgICAgZm9ybWF0OgorCSAgICAgZmllbGQ6dW5zaWduZWQgc2hvcnQgY29tbW9uX3R5cGU7CW9mZnNldDowOwlzaXplOjI7CXNpZ25lZDowOworCSAgICAgZmllbGQ6dW5zaWduZWQgY2hhciBjb21tb25fZmxhZ3M7CW9mZnNldDoyOwlzaXplOjE7CXNpZ25lZDowOworCSAgICAgZmllbGQ6dW5zaWduZWQgY2hhciBjb21tb25fcHJlZW1wdF9jb3VudDsJb2Zmc2V0OjM7CXNpemU6MTsJc2lnbmVkOjA7CisJICAgICBmaWVsZDppbnQgY29tbW9uX3BpZDsJb2Zmc2V0OjQ7CXNpemU6NDsJc2lnbmVkOjE7CisJICAgICBmaWVsZDppbnQgY29tbW9uX3BhZGRpbmc7CW9mZnNldDo4OwlzaXplOjQ7CXNpZ25lZDoxOworCisJICAgICBmaWVsZDp1bnNpZ25lZCBsb25nIF9fcHJvYmVfaXA7CW9mZnNldDoxMjsJc2l6ZTo0OwlzaWduZWQ6MDsKKworICAgICBwcmludCBmbXQ6ICIoJWx4KSIsIFJFQy0+X19wcm9iZV9pcAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBXZSBjYW4gbGlzdCBhbGwgZHluYW1pYyB0cmFjZXBvaW50cyBjdXJyZW50bHkgaW4gZXhpc3RlbmNlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBwZXJmIHByb2JlIC1sCisgICAgICBwcm9iZTpkb19mb3JrICAgICAgICAob24gZG9fZm9yaykKKyAgICAgIHByb2JlOnNjaGVkdWxlICAgICAgIChvbiBzY2hlZHVsZSkKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgTGV0J3MgcmVjb3JkIHN5c3RlbS13aWRlICgnc2xlZXAgMzAnIGlzIGEgdHJpY2sgZm9yIHJlY29yZGluZworICAgICAgICAgICAgICAgIHN5c3RlbS13aWRlIGJ1dCBiYXNpY2FsbHkgZG8gbm90aGluZyBhbmQgdGhlbiB3YWtlIHVwIGFmdGVyCisgICAgICAgICAgICAgICAgMzAgc2Vjb25kcyk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgcmVjb3JkIC1nIC1hIC1lIHByb2JlOmRvX2Zvcmsgc2xlZXAgMzAKKyAgICAgWyBwZXJmIHJlY29yZDogV29rZW4gdXAgMSB0aW1lcyB0byB3cml0ZSBkYXRhIF0KKyAgICAgWyBwZXJmIHJlY29yZDogQ2FwdHVyZWQgYW5kIHdyb3RlIDAuMDg3IE1CIHBlcmYuZGF0YSAofjM4MTIgc2FtcGxlcykgXQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBVc2luZyAncGVyZiBzY3JpcHQnIHdlIGNhbiBzZWUgZWFjaCBkb19mb3JrIGV2ZW50IHRoYXQgZmlyZWQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgc2NyaXB0CisKKyAgICAgIyA9PT09PT09PQorICAgICAjIGNhcHR1cmVkIG9uOiBTdW4gT2N0IDI4IDExOjU1OjE4IDIwMTIKKyAgICAgIyBob3N0bmFtZSA6IGNyb3duYmF5CisgICAgICMgb3MgcmVsZWFzZSA6IDMuNC4xMS15b2N0by1zdGFuZGFyZAorICAgICAjIHBlcmYgdmVyc2lvbiA6IDMuNC4xMQorICAgICAjIGFyY2ggOiBpNjg2CisgICAgICMgbnJjcHVzIG9ubGluZSA6IDIKKyAgICAgIyBucmNwdXMgYXZhaWwgOiAyCisgICAgICMgY3B1ZGVzYyA6IEludGVsKFIpIEF0b20oVE0pIENQVSBFNjYwIEAgMS4zMEdIegorICAgICAjIGNwdWlkIDogR2VudWluZUludGVsLDYsMzgsMQorICAgICAjIHRvdGFsIG1lbW9yeSA6IDEwMTcxODQga0IKKyAgICAgIyBjbWRsaW5lIDogL3Vzci9iaW4vcGVyZiByZWNvcmQgLWcgLWEgLWUgcHJvYmU6ZG9fZm9yayBzbGVlcCAzMAorICAgICAjIGV2ZW50IDogbmFtZSA9IHByb2JlOmRvX2ZvcmssIHR5cGUgPSAyLCBjb25maWcgPSAweDNiMCwgY29uZmlnMSA9IDB4MCwgY29uZmlnMiA9IDB4MCwgZXhjbF91c3IgPSAwLCBleGNsX2tlcm4KKyAgICAgID0gMCwgaWQgPSB7IDUsIDYgfQorICAgICAjIEhFQURFUl9DUFVfVE9QT0xPR1kgaW5mbyBhdmFpbGFibGUsIHVzZSAtSSB0byBkaXNwbGF5CisgICAgICMgPT09PT09PT0KKyAgICAgIworICAgICAgbWF0Y2hib3gtZGVza3RvICAxMTk3IFswMDFdIDM0MjExLjM3ODMxODogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMjk1IFswMDFdIDM0MjExLjM4MDM4ODogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICBwY21hbmZtICAxMjk2IFswMDBdIDM0MjExLjYzMjM1MDogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICBwY21hbmZtICAxMjk2IFswMDBdIDM0MjExLjYzOTkxNzogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMTk3IFswMDFdIDM0MjE3LjU0MTYwMzogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMjk5IFswMDFdIDM0MjE3LjU0MzU4NDogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICAgZ3RodW1iICAxMzAwIFswMDFdIDM0MjE3LjY5NzQ1MTogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICAgZ3RodW1iICAxMzAwIFswMDFdIDM0MjE5LjA4NTczNDogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICAgZ3RodW1iICAxMzAwIFswMDBdIDM0MjE5LjEyMTM1MTogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICAgZ3RodW1iICAxMzAwIFswMDFdIDM0MjE5LjI2NDU1MTogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICBwY21hbmZtICAxMjk2IFswMDBdIDM0MjE5LjU5MDM4MDogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMTk3IFswMDFdIDM0MjI0Ljk1NTk2NTogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMzA2IFswMDFdIDM0MjI0Ljk1Nzk3MjogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtdGVybWluICAxMzA3IFswMDBdIDM0MjI1LjAzODIxNDogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtdGVybWluICAxMzA3IFswMDFdIDM0MjI1LjA0NDIxODogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtdGVybWluICAxMzA3IFswMDBdIDM0MjI1LjA0NjQ0MjogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMTk3IFswMDFdIDM0MjM3LjExMjEzODogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMzExIFswMDFdIDM0MjM3LjExNDEwNjogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICAgICBnYWt1ICAxMzEyIFswMDBdIDM0MjM3LjIwMjM4ODogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBBbmQgdXNpbmcgJ3BlcmYgcmVwb3J0JyBvbiB0aGUgc2FtZSBmaWxlLCB3ZSBjYW4gc2VlIHRoZQorICAgICAgICAgICAgICAgIGNhbGxncmFwaHMgZnJvbSBzdGFydGluZyBhIGZldyBwcm9ncmFtcyBkdXJpbmcgdGhvc2UgMzAgc2Vjb25kczoKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3BlcmYtcHJvYmUtZG9fZm9yay1wcm9maWxlLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlR5aW5nIGl0IFRvZ2V0aGVyOjwvZW1waGFzaXM+IFRoZSB0cmFjZSBldmVudHMgc3Vic3lzdGVtIGFjY29tbW9kYXRlIHN0YXRpYworICAgICAgICAgICAgICAgIGFuZCBkeW5hbWljIHRyYWNlcG9pbnRzIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IC0gdGhlcmUncyBubworICAgICAgICAgICAgICAgIGRpZmZlcmVuY2UgYXMgZmFyIGFzIHRoZSBpbmZyYXN0cnVjdHVyZSBpcyBjb25jZXJuZWQuICBTZWUgdGhlCisgICAgICAgICAgICAgICAgZnRyYWNlIHNlY3Rpb24gZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgdHJhY2UgZXZlbnQgc3Vic3lzdGVtLgorICAgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlR5aW5nIGl0IFRvZ2V0aGVyOjwvZW1waGFzaXM+IER5bmFtaWMgdHJhY2Vwb2ludHMgYXJlIGltcGxlbWVudGVkIHVuZGVyIHRoZQorICAgICAgICAgICAgICAgIGNvdmVycyBieSBrcHJvYmVzIGFuZCB1cHJvYmVzLiAga3Byb2JlcyBhbmQgdXByb2JlcyBhcmUgYWxzbyB1c2VkCisgICAgICAgICAgICAgICAgYnkgYW5kIGluIGZhY3QgYXJlIHRoZSBtYWluIGZvY3VzIG9mIFN5c3RlbVRhcC4KKyAgICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3BlcmYtZG9jdW1lbnRhdGlvbic+CisgICAgICAgIDx0aXRsZT5Eb2N1bWVudGF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE9ubGluZSB2ZXJzaW9ucyBvZiB0aGUgbWFuIHBhZ2VzIGZvciB0aGUgY29tbWFuZHMgZGlzY3Vzc2VkIGluIHRoaXMKKyAgICAgICAgICAgIHNlY3Rpb24gY2FuIGJlIGZvdW5kIGhlcmU6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgPHVsaW5rIHVybD0naHR0cDovL2xpbnV4LmRpZS5uZXQvbWFuLzEvcGVyZi1zdGF0Jz4ncGVyZiBzdGF0JyBtYW5wYWdlPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgPHVsaW5rIHVybD0naHR0cDovL2xpbnV4LmRpZS5uZXQvbWFuLzEvcGVyZi1yZWNvcmQnPidwZXJmIHJlY29yZCcgbWFucGFnZTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi8xL3BlcmYtcmVwb3J0Jz4ncGVyZiByZXBvcnQnIG1hbnBhZ2U8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSA8dWxpbmsgdXJsPSdodHRwOi8vbGludXguZGllLm5ldC9tYW4vMS9wZXJmLXByb2JlJz4ncGVyZiBwcm9iZScgbWFucGFnZTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi8xL3BlcmYtc2NyaXB0Jz4ncGVyZiBzY3JpcHQnIG1hbnBhZ2U8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvY3VtZW50YXRpb24gb24gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi8xL3BlcmYtc2NyaXB0LXB5dGhvbic+J3BlcmYgc2NyaXB0JyBweXRob24gYmluZGluZzwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIHRvcC1sZXZlbAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vbGludXguZGllLm5ldC9tYW4vMS9wZXJmJz5wZXJmKDEpIG1hbnBhZ2U8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTm9ybWFsbHksIHlvdSBzaG91bGQgYmUgYWJsZSB0byBpbnZva2UgdGhlIG1hbiBwYWdlcyB2aWEgcGVyZgorICAgICAgICAgICAgaXRzZWxmIGUuZy4gJ3BlcmYgaGVscCcgb3IgJ3BlcmYgaGVscCByZWNvcmQnLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIb3dldmVyLCBieSBkZWZhdWx0IFlvY3RvIGRvZXNuJ3QgaW5zdGFsbCBtYW4gcGFnZXMsIGJ1dCBwZXJmCisgICAgICAgICAgICBpbnZva2VzIHRoZSBtYW4gcGFnZXMgZm9yIG1vc3QgaGVscCBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGEgYnVnCisgICAgICAgICAgICBhbmQgaXMgYmVpbmcgYWRkcmVzc2VkIGJ5IGEgWW9jdG8gYnVnOgorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzg4Jz5CdWcgMzM4OCAtIHBlcmY6IGVuYWJsZSBtYW4gcGFnZXMgZm9yIGJhc2ljICdoZWxwJyBmdW5jdGlvbmFsaXR5PC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBtYW4gcGFnZXMgaW4gdGV4dCBmb3JtLCBhbG9uZyB3aXRoIHNvbWUgb3RoZXIgZmlsZXMsIHN1Y2ggYXMKKyAgICAgICAgICAgIGEgc2V0IG9mIGV4YW1wbGVzLCBjYW4gYmUgZm91bmQgaW4gdGhlICdwZXJmJyBkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICBrZXJuZWwgdHJlZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGVyZSdzIGFsc28gYSBuaWNlIHBlcmYgdHV0b3JpYWwgb24gdGhlIHBlcmYgd2lraSB0aGF0IGdvZXMKKyAgICAgICAgICAgIGludG8gbW9yZSBkZXRhaWwgdGhhbiB3ZSBkbyBoZXJlIGluIGNlcnRhaW4gYXJlYXM6CisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3BlcmYud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9UdXRvcmlhbCc+UGVyZiBUdXRvcmlhbDwvdWxpbms+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdwcm9maWxlLW1hbnVhbC1mdHJhY2UnPgorICAgIDx0aXRsZT5mdHJhY2U8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgICdmdHJhY2UnIGxpdGVyYWxseSByZWZlcnMgdG8gdGhlICdmdHJhY2UgZnVuY3Rpb24gdHJhY2VyJyBidXQgaW4KKyAgICAgICAgcmVhbGl0eSB0aGlzIGVuY29tcGFzc2VzIGEgbnVtYmVyIG9mIHJlbGF0ZWQgdHJhY2VycyBhbG9uZyB3aXRoCisgICAgICAgIHRoZSBpbmZyYXN0cnVjdHVyZSB0aGF0IHRoZXkgYWxsIG1ha2UgdXNlIG9mLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdmdHJhY2Utc2V0dXAnPgorICAgICAgICA8dGl0bGU+U2V0dXA8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIHRoaXMgc2VjdGlvbiwgd2UnbGwgYXNzdW1lIHlvdSd2ZSBhbHJlYWR5IHBlcmZvcm1lZCB0aGUgYmFzaWMKKyAgICAgICAgICAgIHNldHVwIG91dGxpbmVkIGluIHRoZSBHZW5lcmFsIFNldHVwIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIGZ0cmFjZSwgdHJhY2UtY21kLCBhbmQga2VybmVsc2hhcmsgcnVuIG9uIHRoZSB0YXJnZXQgc3lzdGVtLAorICAgICAgICAgICAgYW5kIGFyZSByZWFkeSB0byBnbyBvdXQtb2YtdGhlLWJveCAtIG5vIGFkZGl0aW9uYWwgc2V0dXAgaXMKKyAgICAgICAgICAgIG5lY2Vzc2FyeS4gRm9yIHRoZSByZXN0IG9mIHRoaXMgc2VjdGlvbiB3ZSBhc3N1bWUgeW91J3ZlIHNzaCdlZAorICAgICAgICAgICAgdG8gdGhlIGhvc3QgYW5kIHdpbGwgYmUgcnVubmluZyBmdHJhY2Ugb24gdGhlIHRhcmdldC4ga2VybmVsc2hhcmsKKyAgICAgICAgICAgIGlzIGEgR1VJIGFwcGxpY2F0aW9uIGFuZCBpZiB5b3UgdXNlIHRoZSAnLVgnIG9wdGlvbiB0byBzc2ggeW91CisgICAgICAgICAgICBjYW4gaGF2ZSB0aGUga2VybmVsc2hhcmsgR1VJIHJ1biBvbiB0aGUgdGFyZ2V0IGJ1dCBkaXNwbGF5CisgICAgICAgICAgICByZW1vdGVseSBvbiB0aGUgaG9zdCBpZiB5b3Ugd2FudC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdiYXNpYy1mdHJhY2UtdXNhZ2UnPgorICAgICAgICA8dGl0bGU+QmFzaWMgZnRyYWNlIHVzYWdlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICdmdHJhY2UnIGVzc2VudGlhbGx5IHJlZmVycyB0byBldmVyeXRoaW5nIGluY2x1ZGVkIGluCisgICAgICAgICAgICB0aGUgL3RyYWNpbmcgZGlyZWN0b3J5IG9mIHRoZSBtb3VudGVkIGRlYnVnZnMgZmlsZXN5c3RlbQorICAgICAgICAgICAgKFlvY3RvIGZvbGxvd3MgdGhlIHN0YW5kYXJkIGNvbnZlbnRpb24gYW5kIG1vdW50cyBpdAorICAgICAgICAgICAgYXQgL3N5cy9rZXJuZWwvZGVidWcpLiBIZXJlJ3MgYSBsaXN0aW5nIG9mIGFsbCB0aGUgZmlsZXMKKyAgICAgICAgICAgIGZvdW5kIGluIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcgb24gYSBZb2N0byBzeXN0ZW06CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAc3VnYXJiYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZyMgbHMKKyAgICAgUkVBRE1FICAgICAgICAgICAgICAgICAgICAgIGtwcm9iZV9ldmVudHMgICAgICAgICAgICAgICB0cmFjZQorICAgICBhdmFpbGFibGVfZXZlbnRzICAgICAgICAgICAga3Byb2JlX3Byb2ZpbGUgICAgICAgICAgICAgIHRyYWNlX2Nsb2NrCisgICAgIGF2YWlsYWJsZV9maWx0ZXJfZnVuY3Rpb25zICBvcHRpb25zICAgICAgICAgICAgICAgICAgICAgdHJhY2VfbWFya2VyCisgICAgIGF2YWlsYWJsZV90cmFjZXJzICAgICAgICAgICBwZXJfY3B1ICAgICAgICAgICAgICAgICAgICAgdHJhY2Vfb3B0aW9ucworICAgICBidWZmZXJfc2l6ZV9rYiAgICAgICAgICAgICAgcHJpbnRrX2Zvcm1hdHMgICAgICAgICAgICAgIHRyYWNlX3BpcGUKKyAgICAgYnVmZmVyX3RvdGFsX3NpemVfa2IgICAgICAgIHNhdmVkX2NtZGxpbmVzICAgICAgICAgICAgICB0cmFjaW5nX2NwdW1hc2sKKyAgICAgY3VycmVudF90cmFjZXIgICAgICAgICAgICAgIHNldF9ldmVudCAgICAgICAgICAgICAgICAgICB0cmFjaW5nX2VuYWJsZWQKKyAgICAgZHluX2Z0cmFjZV90b3RhbF9pbmZvICAgICAgIHNldF9mdHJhY2VfZmlsdGVyICAgICAgICAgICB0cmFjaW5nX29uCisgICAgIGVuYWJsZWRfZnVuY3Rpb25zICAgICAgICAgICBzZXRfZnRyYWNlX25vdHJhY2UgICAgICAgICAgdHJhY2luZ190aHJlc2gKKyAgICAgZXZlbnRzICAgICAgICAgICAgICAgICAgICAgIHNldF9mdHJhY2VfcGlkCisgICAgIGZyZWVfYnVmZmVyICAgICAgICAgICAgICAgICBzZXRfZ3JhcGhfZnVuY3Rpb24KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSBmaWxlcyBsaXN0ZWQgYWJvdmUgYXJlIHVzZWQgZm9yIHZhcmlvdXMgcHVycG9zZXMgLQorICAgICAgICAgICAgc29tZSByZWxhdGUgZGlyZWN0bHkgdG8gdGhlIHRyYWNlcnMgdGhlbXNlbHZlcywgb3RoZXJzIGFyZQorICAgICAgICAgICAgdXNlZCB0byBzZXQgdHJhY2luZyBvcHRpb25zLCBhbmQgeWV0IG90aGVycyBhY3R1YWxseSBjb250YWluCisgICAgICAgICAgICB0aGUgdHJhY2luZyBvdXRwdXQgd2hlbiBhIHRyYWNlciBpcyBpbiBlZmZlY3QuIFNvbWUgb2YgdGhlCisgICAgICAgICAgICBmdW5jdGlvbnMgY2FuIGJlIGd1ZXNzZWQgZnJvbSB0aGVpciBuYW1lcywgb3RoZXJzIG5lZWQKKyAgICAgICAgICAgIGV4cGxhbmF0aW9uOyBpbiBhbnkgY2FzZSwgd2UnbGwgY292ZXIgc29tZSBvZiB0aGUgZmlsZXMgd2UKKyAgICAgICAgICAgIHNlZSBoZXJlIGJlbG93IGJ1dCBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIG90aGVycywgcGxlYXNlCisgICAgICAgICAgICBzZWUgdGhlIGZ0cmFjZSBkb2N1bWVudGF0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXZSdsbCBzdGFydCBieSBsb29raW5nIGF0IHNvbWUgb2YgdGhlIGF2YWlsYWJsZSBidWlsdC1pbgorICAgICAgICAgICAgdHJhY2Vycy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgY2F0J2luZyB0aGUgJ2F2YWlsYWJsZV90cmFjZXJzJyBmaWxlIGxpc3RzIHRoZSBzZXQgb2YKKyAgICAgICAgICAgIGF2YWlsYWJsZSB0cmFjZXJzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QHN1Z2FyYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcjIGNhdCBhdmFpbGFibGVfdHJhY2VycworICAgICBibGsgZnVuY3Rpb25fZ3JhcGggZnVuY3Rpb24gbm9wCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgJ2N1cnJlbnRfdHJhY2VyJyBmaWxlIGNvbnRhaW5zIHRoZSB0cmFjZXIgY3VycmVudGx5IGluCisgICAgICAgICAgICBlZmZlY3Q6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAc3VnYXJiYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZyMgY2F0IGN1cnJlbnRfdHJhY2VyCisgICAgIG5vcAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIGFib3ZlIGxpc3Rpbmcgb2YgY3VycmVudF90cmFjZXIgc2hvd3MgdGhhdAorICAgICAgICAgICAgdGhlICdub3AnIHRyYWNlciBpcyBpbiBlZmZlY3QsIHdoaWNoIGlzIGp1c3QgYW5vdGhlcgorICAgICAgICAgICAgd2F5IG9mIHNheWluZyB0aGF0IHRoZXJlJ3MgYWN0dWFsbHkgbm8gdHJhY2VyCisgICAgICAgICAgICBjdXJyZW50bHkgaW4gZWZmZWN0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBlY2hvJ2luZyBvbmUgb2YgdGhlIGF2YWlsYWJsZV90cmFjZXJzIGludG8gY3VycmVudF90cmFjZXIKKyAgICAgICAgICAgIG1ha2VzIHRoZSBzcGVjaWZpZWQgdHJhY2VyIHRoZSBjdXJyZW50IHRyYWNlcjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBlY2hvIGZ1bmN0aW9uID4gY3VycmVudF90cmFjZXIKKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBjYXQgY3VycmVudF90cmFjZXIKKyAgICAgZnVuY3Rpb24KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSBhYm92ZSBzZXRzIHRoZSBjdXJyZW50IHRyYWNlciB0byBiZSB0aGUKKyAgICAgICAgICAgICdmdW5jdGlvbiB0cmFjZXInLiBUaGlzIHRyYWNlciB0cmFjZXMgZXZlcnkgZnVuY3Rpb24KKyAgICAgICAgICAgIGNhbGwgaW4gdGhlIGtlcm5lbCBhbmQgbWFrZXMgaXQgYXZhaWxhYmxlIGFzIHRoZQorICAgICAgICAgICAgY29udGVudHMgb2YgdGhlICd0cmFjZScgZmlsZS4gUmVhZGluZyB0aGUgJ3RyYWNlJyBmaWxlCisgICAgICAgICAgICBsaXN0cyB0aGUgY3VycmVudGx5IGJ1ZmZlcmVkIGZ1bmN0aW9uIGNhbGxzIHRoYXQgaGF2ZSBiZWVuCisgICAgICAgICAgICB0cmFjZWQgYnkgdGhlIGZ1bmN0aW9uIHRyYWNlcjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBjYXQgdHJhY2UgfCBsZXNzCisKKyAgICAgIyB0cmFjZXI6IGZ1bmN0aW9uCisgICAgICMKKyAgICAgIyBlbnRyaWVzLWluLWJ1ZmZlci9lbnRyaWVzLXdyaXR0ZW46IDMxMDYyOS83NjY0NzEgICAjUDo4CisgICAgICMKKyAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8tLS0tLT0mZ3Q7IGlycXMtb2ZmCisgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gXy0tLS09Jmd0OyBuZWVkLXJlc2NoZWQKKyAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IC8gXy0tLT0mZ3Q7IGhhcmRpcnEvc29mdGlycQorICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IC8gXy0tPSZndDsgcHJlZW1wdC1kZXB0aAorICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8fCAvICAgICBkZWxheQorICAgICAjICAgICAgICAgICBUQVNLLVBJRCAgIENQVSMgIHx8fHwgICAgVElNRVNUQU1QICBGVU5DVElPTgorICAgICAjICAgICAgICAgICAgICB8IHwgICAgICAgfCAgIHx8fHwgICAgICAgfCAgICAgICAgIHwKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuLjEgICA0NzAuODY3MTY5OiBrdGltZV9nZXRfcmVhbCAmbHQ7LWludGVsX2lkbGUKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuLjEgICA0NzAuODY3MTcwOiBnZXRuc3RpbWVvZmRheSAmbHQ7LWt0aW1lX2dldF9yZWFsCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDA0XSBkLi4xICAgNDcwLjg2NzE3MTogbnNfdG9fdGltZXZhbCAmbHQ7LWludGVsX2lkbGUKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuLjEgICA0NzAuODY3MTcxOiBuc190b190aW1lc3BlYyAmbHQ7LW5zX3RvX3RpbWV2YWwKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuLjEgICA0NzAuODY3MTcyOiBzbXBfYXBpY190aW1lcl9pbnRlcnJ1cHQgJmx0Oy1hcGljX3RpbWVyX2ludGVycnVwdAorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC4uMSAgIDQ3MC44NjcxNzI6IG5hdGl2ZV9hcGljX21lbV93cml0ZSAmbHQ7LXNtcF9hcGljX3RpbWVyX2ludGVycnVwdAorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC4uMSAgIDQ3MC44NjcxNzI6IGlycV9lbnRlciAmbHQ7LXNtcF9hcGljX3RpbWVyX2ludGVycnVwdAorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC4uMSAgIDQ3MC44NjcxNzI6IHJjdV9pcnFfZW50ZXIgJmx0Oy1pcnFfZW50ZXIKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuLjEgICA0NzAuODY3MTczOiByY3VfaWRsZV9leGl0X2NvbW1vbi5pc3JhLjMzICZsdDstcmN1X2lycV9lbnRlcgorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC4uMSAgIDQ3MC44NjcxNzM6IGxvY2FsX2JoX2Rpc2FibGUgJmx0Oy1pcnFfZW50ZXIKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuLjEgICA0NzAuODY3MTczOiBhZGRfcHJlZW1wdF9jb3VudCAmbHQ7LWxvY2FsX2JoX2Rpc2FibGUKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuczEgICA0NzAuODY3MTc0OiB0aWNrX2NoZWNrX2lkbGUgJmx0Oy1pcnFfZW50ZXIKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuczEgICA0NzAuODY3MTc0OiB0aWNrX2NoZWNrX29uZXNob3RfYnJvYWRjYXN0ICZsdDstdGlja19jaGVja19pZGxlCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDA0XSBkLnMxICAgNDcwLjg2NzE3NDoga3RpbWVfZ2V0ICZsdDstdGlja19jaGVja19pZGxlCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDA0XSBkLnMxICAgNDcwLjg2NzE3NDogdGlja19ub2h6X3N0b3BfaWRsZSAmbHQ7LXRpY2tfY2hlY2tfaWRsZQorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMSAgIDQ3MC44NjcxNzU6IHVwZGF0ZV90c190aW1lX3N0YXRzICZsdDstdGlja19ub2h6X3N0b3BfaWRsZQorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMSAgIDQ3MC44NjcxNzU6IG5yX2lvd2FpdF9jcHUgJmx0Oy11cGRhdGVfdHNfdGltZV9zdGF0cworICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMSAgIDQ3MC44NjcxNzU6IHRpY2tfZG9fdXBkYXRlX2ppZmZpZXM2NCAmbHQ7LXRpY2tfY2hlY2tfaWRsZQorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMSAgIDQ3MC44NjcxNzU6IF9yYXdfc3Bpbl9sb2NrICZsdDstdGlja19kb191cGRhdGVfamlmZmllczY0CisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDA0XSBkLnMxICAgNDcwLjg2NzE3NjogYWRkX3ByZWVtcHRfY291bnQgJmx0Oy1fcmF3X3NwaW5fbG9jaworICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMiAgIDQ3MC44NjcxNzY6IGRvX3RpbWVyICZsdDstdGlja19kb191cGRhdGVfamlmZmllczY0CisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDA0XSBkLnMyICAgNDcwLjg2NzE3NjogX3Jhd19zcGluX2xvY2sgJmx0Oy1kb190aW1lcgorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMiAgIDQ3MC44NjcxNzY6IGFkZF9wcmVlbXB0X2NvdW50ICZsdDstX3Jhd19zcGluX2xvY2sKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuczMgICA0NzAuODY3MTc3OiBudHBfdGlja19sZW5ndGggJmx0Oy1kb190aW1lcgorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMyAgIDQ3MC44NjcxNzc6IF9yYXdfc3Bpbl9sb2NrX2lycXNhdmUgJmx0Oy1udHBfdGlja19sZW5ndGgKKyAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEVhY2ggbGluZSBpbiB0aGUgdHJhY2UgYWJvdmUgc2hvd3Mgd2hhdCB3YXMgaGFwcGVuaW5nIGluCisgICAgICAgICAgICB0aGUga2VybmVsIG9uIGEgZ2l2ZW4gY3B1LCB0byB0aGUgbGV2ZWwgb2YgZGV0YWlsIG9mCisgICAgICAgICAgICBmdW5jdGlvbiBjYWxscy4gRWFjaCBlbnRyeSBzaG93cyB0aGUgZnVuY3Rpb24gY2FsbGVkLAorICAgICAgICAgICAgZm9sbG93ZWQgYnkgaXRzIGNhbGxlciAoYWZ0ZXIgdGhlIGFycm93KS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIHRyYWNlciBnaXZlcyB5b3UgYW4gZXh0cmVtZWx5IGRldGFpbGVkIGlkZWEKKyAgICAgICAgICAgIG9mIHdoYXQgdGhlIGtlcm5lbCB3YXMgZG9pbmcgYXQgdGhlIHBvaW50IGluIHRpbWUgdGhlIHRyYWNlCisgICAgICAgICAgICB3YXMgdGFrZW4sIGFuZCBpcyBhIGdyZWF0IHdheSB0byBsZWFybiBhYm91dCBob3cgdGhlIGtlcm5lbAorICAgICAgICAgICAgY29kZSB3b3JrcyBpbiBhIGR5bmFtaWMgc2Vuc2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPGVtcGhhc2lzPlR5aW5nIGl0IFRvZ2V0aGVyOjwvZW1waGFzaXM+IFRoZSBmdHJhY2UgZnVuY3Rpb24gdHJhY2VyIGlzIGFsc28KKyAgICAgICAgICAgIGF2YWlsYWJsZSBmcm9tIHdpdGhpbiBwZXJmLCBhcyB0aGUgZnRyYWNlOmZ1bmN0aW9uIHRyYWNlcG9pbnQuCisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgaXMgYSBsaXR0bGUgbW9yZSBkaWZmaWN1bHQgdG8gZm9sbG93IHRoZSBjYWxsIGNoYWlucyB0aGFuCisgICAgICAgICAgICBpdCBuZWVkcyB0byBiZSAtIGx1Y2tpbHkgdGhlcmUncyBhIHZhcmlhbnQgb2YgdGhlIGZ1bmN0aW9uCisgICAgICAgICAgICB0cmFjZXIgdGhhdCBkaXNwbGF5cyB0aGUgY2FsbGNoYWlucyBleHBsaWNpdGx5LCBjYWxsZWQgdGhlCisgICAgICAgICAgICAnZnVuY3Rpb25fZ3JhcGgnIHRyYWNlcjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBlY2hvIGZ1bmN0aW9uX2dyYXBoICZndDsgY3VycmVudF90cmFjZXIKKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBjYXQgdHJhY2UgfCBsZXNzCisKKyAgICAgIHRyYWNlcjogZnVuY3Rpb25fZ3JhcGgKKworICAgICAgQ1BVICBEVVJBVElPTiAgICAgICAgICAgICAgICAgIEZVTkNUSU9OIENBTExTCisgICAgICB8ICAgICB8ICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgfCAgIHwKKyAgICAgNykgICAwLjA0NiB1cyAgICB8ICAgICAgcGlja19uZXh0X3Rhc2tfZmFpcigpOworICAgICA3KSAgIDAuMDQzIHVzICAgIHwgICAgICBwaWNrX25leHRfdGFza19zdG9wKCk7CisgICAgIDcpICAgMC4wNDIgdXMgICAgfCAgICAgIHBpY2tfbmV4dF90YXNrX3J0KCk7CisgICAgIDcpICAgMC4wMzIgdXMgICAgfCAgICAgIHBpY2tfbmV4dF90YXNrX2ZhaXIoKTsKKyAgICAgNykgICAwLjAzMCB1cyAgICB8ICAgICAgcGlja19uZXh0X3Rhc2tfaWRsZSgpOworICAgICA3KSAgICAgICAgICAgICAgIHwgICAgICBfcmF3X3NwaW5fdW5sb2NrX2lycSgpIHsKKyAgICAgNykgICAwLjAzMyB1cyAgICB8ICAgICAgICBzdWJfcHJlZW1wdF9jb3VudCgpOworICAgICA3KSAgIDAuMjU4IHVzICAgIHwgICAgICB9CisgICAgIDcpICAgMC4wMzIgdXMgICAgfCAgICAgIHN1Yl9wcmVlbXB0X2NvdW50KCk7CisgICAgIDcpICsgMTMuMzQxIHVzICAgfCAgICB9IC8qIF9fc2NoZWR1bGUgKi8KKyAgICAgNykgICAwLjA5NSB1cyAgICB8ICB9IC8qIHN1Yl9wcmVlbXB0X2NvdW50ICovCisgICAgIDcpICAgICAgICAgICAgICAgfCAgc2NoZWR1bGUoKSB7CisgICAgIDcpICAgICAgICAgICAgICAgfCAgICBfX3NjaGVkdWxlKCkgeworICAgICA3KSAgIDAuMDYwIHVzICAgIHwgICAgICBhZGRfcHJlZW1wdF9jb3VudCgpOworICAgICA3KSAgIDAuMDQ0IHVzICAgIHwgICAgICByY3Vfbm90ZV9jb250ZXh0X3N3aXRjaCgpOworICAgICA3KSAgICAgICAgICAgICAgIHwgICAgICBfcmF3X3NwaW5fbG9ja19pcnEoKSB7CisgICAgIDcpICAgMC4wMzMgdXMgICAgfCAgICAgICAgYWRkX3ByZWVtcHRfY291bnQoKTsKKyAgICAgNykgICAwLjI0NyB1cyAgICB8ICAgICAgfQorICAgICA3KSAgICAgICAgICAgICAgIHwgICAgICBpZGxlX2JhbGFuY2UoKSB7CisgICAgIDcpICAgICAgICAgICAgICAgfCAgICAgICAgX3Jhd19zcGluX3VubG9jaygpIHsKKyAgICAgNykgICAwLjAzMSB1cyAgICB8ICAgICAgICAgIHN1Yl9wcmVlbXB0X2NvdW50KCk7CisgICAgIDcpICAgMC4yNDYgdXMgICAgfCAgICAgICAgfQorICAgICA3KSAgICAgICAgICAgICAgIHwgICAgICAgIHVwZGF0ZV9zaGFyZXMoKSB7CisgICAgIDcpICAgMC4wMzAgdXMgICAgfCAgICAgICAgICBfX3JjdV9yZWFkX2xvY2soKTsKKyAgICAgNykgICAwLjAyOSB1cyAgICB8ICAgICAgICAgIF9fcmN1X3JlYWRfdW5sb2NrKCk7CisgICAgIDcpICAgMC40ODQgdXMgICAgfCAgICAgICAgfQorICAgICA3KSAgIDAuMDMwIHVzICAgIHwgICAgICAgIF9fcmN1X3JlYWRfbG9jaygpOworICAgICA3KSAgICAgICAgICAgICAgIHwgICAgICAgIGxvYWRfYmFsYW5jZSgpIHsKKyAgICAgNykgICAgICAgICAgICAgICB8ICAgICAgICAgIGZpbmRfYnVzaWVzdF9ncm91cCgpIHsKKyAgICAgNykgICAwLjAzMSB1cyAgICB8ICAgICAgICAgICAgaWRsZV9jcHUoKTsKKyAgICAgNykgICAwLjAyOSB1cyAgICB8ICAgICAgICAgICAgaWRsZV9jcHUoKTsKKyAgICAgNykgICAwLjAzNSB1cyAgICB8ICAgICAgICAgICAgaWRsZV9jcHUoKTsKKyAgICAgNykgICAwLjkwNiB1cyAgICB8ICAgICAgICAgIH0KKyAgICAgNykgICAxLjE0MSB1cyAgICB8ICAgICAgICB9CisgICAgIDcpICAgMC4wMjIgdXMgICAgfCAgICAgICAgbXNlY3NfdG9famlmZmllcygpOworICAgICA3KSAgICAgICAgICAgICAgIHwgICAgICAgIGxvYWRfYmFsYW5jZSgpIHsKKyAgICAgNykgICAgICAgICAgICAgICB8ICAgICAgICAgIGZpbmRfYnVzaWVzdF9ncm91cCgpIHsKKyAgICAgNykgICAwLjAzMSB1cyAgICB8ICAgICAgICAgICAgaWRsZV9jcHUoKTsKKyAgICAgLgorICAgICAuCisgICAgIC4KKyAgICAgNCkgICAwLjA2MiB1cyAgICB8ICAgICAgICBtc2Vjc190b19qaWZmaWVzKCk7CisgICAgIDQpICAgMC4wNjIgdXMgICAgfCAgICAgICAgX19yY3VfcmVhZF91bmxvY2soKTsKKyAgICAgNCkgICAgICAgICAgICAgICB8ICAgICAgICBfcmF3X3NwaW5fbG9jaygpIHsKKyAgICAgNCkgICAwLjA3MyB1cyAgICB8ICAgICAgICAgIGFkZF9wcmVlbXB0X2NvdW50KCk7CisgICAgIDQpICAgMC41NjIgdXMgICAgfCAgICAgICAgfQorICAgICA0KSArIDE3LjQ1MiB1cyAgIHwgICAgICB9CisgICAgIDQpICAgMC4xMDggdXMgICAgfCAgICAgIHB1dF9wcmV2X3Rhc2tfZmFpcigpOworICAgICA0KSAgIDAuMTAyIHVzICAgIHwgICAgICBwaWNrX25leHRfdGFza19mYWlyKCk7CisgICAgIDQpICAgMC4wODQgdXMgICAgfCAgICAgIHBpY2tfbmV4dF90YXNrX3N0b3AoKTsKKyAgICAgNCkgICAwLjA3NSB1cyAgICB8ICAgICAgcGlja19uZXh0X3Rhc2tfcnQoKTsKKyAgICAgNCkgICAwLjA2MiB1cyAgICB8ICAgICAgcGlja19uZXh0X3Rhc2tfZmFpcigpOworICAgICA0KSAgIDAuMDY2IHVzICAgIHwgICAgICBwaWNrX25leHRfdGFza19pZGxlKCk7CisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICA0KSAgIGt3b3JrZXItNzQgICA9Jmd0OyAgICAmbHQ7aWRsZSZndDstMAorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICA0KSAgICAgICAgICAgICAgIHwgICAgICBmaW5pc2hfdGFza19zd2l0Y2goKSB7CisgICAgIDQpICAgICAgICAgICAgICAgfCAgICAgICAgX3Jhd19zcGluX3VubG9ja19pcnEoKSB7CisgICAgIDQpICAgMC4xMDAgdXMgICAgfCAgICAgICAgICBzdWJfcHJlZW1wdF9jb3VudCgpOworICAgICA0KSAgIDAuNTgyIHVzICAgIHwgICAgICAgIH0KKyAgICAgNCkgICAxLjEwNSB1cyAgICB8ICAgICAgfQorICAgICA0KSAgIDAuMDg4IHVzICAgIHwgICAgICBzdWJfcHJlZW1wdF9jb3VudCgpOworICAgICA0KSAhIDEwMC4wNjYgdXMgIHwgICAgfQorICAgICAuCisgICAgIC4KKyAgICAgLgorICAgICAzKSAgICAgICAgICAgICAgIHwgIHN5c19pb2N0bCgpIHsKKyAgICAgMykgICAwLjA4MyB1cyAgICB8ICAgIGZnZXRfbGlnaHQoKTsKKyAgICAgMykgICAgICAgICAgICAgICB8ICAgIHNlY3VyaXR5X2ZpbGVfaW9jdGwoKSB7CisgICAgIDMpICAgMC4wNjYgdXMgICAgfCAgICAgIGNhcF9maWxlX2lvY3RsKCk7CisgICAgIDMpICAgMC41NjIgdXMgICAgfCAgICB9CisgICAgIDMpICAgICAgICAgICAgICAgfCAgICBkb192ZnNfaW9jdGwoKSB7CisgICAgIDMpICAgICAgICAgICAgICAgfCAgICAgIGRybV9pb2N0bCgpIHsKKyAgICAgMykgICAwLjA3NSB1cyAgICB8ICAgICAgICBkcm1fdXRfZGVidWdfcHJpbnRrKCk7CisgICAgIDMpICAgICAgICAgICAgICAgfCAgICAgICAgaTkxNV9nZW1fcHdyaXRlX2lvY3RsKCkgeworICAgICAzKSAgICAgICAgICAgICAgIHwgICAgICAgICAgaTkxNV9tdXRleF9sb2NrX2ludGVycnVwdGlibGUoKSB7CisgICAgIDMpICAgMC4wNzAgdXMgICAgfCAgICAgICAgICAgIG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgpOworICAgICAzKSAgIDAuNTcwIHVzICAgIHwgICAgICAgICAgfQorICAgICAzKSAgICAgICAgICAgICAgIHwgICAgICAgICAgZHJtX2dlbV9vYmplY3RfbG9va3VwKCkgeworICAgICAzKSAgICAgICAgICAgICAgIHwgICAgICAgICAgICBfcmF3X3NwaW5fbG9jaygpIHsKKyAgICAgMykgICAwLjA4MCB1cyAgICB8ICAgICAgICAgICAgICBhZGRfcHJlZW1wdF9jb3VudCgpOworICAgICAzKSAgIDAuNjIwIHVzICAgIHwgICAgICAgICAgICB9CisgICAgIDMpICAgICAgICAgICAgICAgfCAgICAgICAgICAgIF9yYXdfc3Bpbl91bmxvY2soKSB7CisgICAgIDMpICAgMC4wODUgdXMgICAgfCAgICAgICAgICAgICAgc3ViX3ByZWVtcHRfY291bnQoKTsKKyAgICAgMykgICAwLjU2MiB1cyAgICB8ICAgICAgICAgICAgfQorICAgICAzKSAgIDIuMTQ5IHVzICAgIHwgICAgICAgICAgfQorICAgICAzKSAgIDAuMTMzIHVzICAgIHwgICAgICAgICAgaTkxNV9nZW1fb2JqZWN0X3BpbigpOworICAgICAzKSAgICAgICAgICAgICAgIHwgICAgICAgICAgaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKCkgeworICAgICAzKSAgIDAuMDY1IHVzICAgIHwgICAgICAgICAgICBpOTE1X2dlbV9vYmplY3RfZmx1c2hfZ3B1X3dyaXRlX2RvbWFpbigpOworICAgICAzKSAgIDAuMDY1IHVzICAgIHwgICAgICAgICAgICBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcoKTsKKyAgICAgMykgICAwLjA2MiB1cyAgICB8ICAgICAgICAgICAgaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2NwdV93cml0ZV9kb21haW4oKTsKKyAgICAgMykgICAxLjYxMiB1cyAgICB8ICAgICAgICAgIH0KKyAgICAgMykgICAgICAgICAgICAgICB8ICAgICAgICAgIGk5MTVfZ2VtX29iamVjdF9wdXRfZmVuY2UoKSB7CisgICAgIDMpICAgMC4wOTcgdXMgICAgfCAgICAgICAgICAgIGk5MTVfZ2VtX29iamVjdF9mbHVzaF9mZW5jZS5jb25zdHByb3AuMzYoKTsKKyAgICAgMykgICAwLjY0NSB1cyAgICB8ICAgICAgICAgIH0KKyAgICAgMykgICAwLjA3MCB1cyAgICB8ICAgICAgICAgIGFkZF9wcmVlbXB0X2NvdW50KCk7CisgICAgIDMpICAgMC4wNzAgdXMgICAgfCAgICAgICAgICBzdWJfcHJlZW1wdF9jb3VudCgpOworICAgICAzKSAgIDAuMDczIHVzICAgIHwgICAgICAgICAgaTkxNV9nZW1fb2JqZWN0X3VucGluKCk7CisgICAgIDMpICAgMC4wNjggdXMgICAgfCAgICAgICAgICBtdXRleF91bmxvY2soKTsKKyAgICAgMykgICA5LjkyNCB1cyAgICB8ICAgICAgICB9CisgICAgIDMpICsgMTEuMjM2IHVzICAgfCAgICAgIH0KKyAgICAgMykgKyAxMS43NzAgdXMgICB8ICAgIH0KKyAgICAgMykgKyAxMy43ODQgdXMgICB8ICB9CisgICAgIDMpICAgICAgICAgICAgICAgfCAgc3lzX2lvY3RsKCkgeworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgQXMgeW91IGNhbiBzZWUsIHRoZSBmdW5jdGlvbl9ncmFwaCBkaXNwbGF5IGlzIG11Y2ggZWFzaWVyIHRvCisgICAgICAgICAgICBmb2xsb3cuIEFsc28gbm90ZSB0aGF0IGluIGFkZGl0aW9uIHRvIHRoZSBmdW5jdGlvbiBjYWxscyBhbmQKKyAgICAgICAgICAgIGFzc29jaWF0ZWQgYnJhY2VzLCBvdGhlciBldmVudHMgc3VjaCBhcyBzY2hlZHVsZXIgZXZlbnRzCisgICAgICAgICAgICBhcmUgZGlzcGxheWVkIGluIGNvbnRleHQuIEluIGZhY3QsIHlvdSBjYW4gZnJlZWx5IGluY2x1ZGUKKyAgICAgICAgICAgIGFueSB0cmFjZXBvaW50IGF2YWlsYWJsZSBpbiB0aGUgdHJhY2UgZXZlbnRzIHN1YnN5c3RlbSBkZXNjcmliZWQKKyAgICAgICAgICAgIGluIHRoZSBuZXh0IHNlY3Rpb24gYnkgc2ltcGx5IGVuYWJsaW5nIHRob3NlIGV2ZW50cywgYW5kIHRoZXknbGwKKyAgICAgICAgICAgIGFwcGVhciBpbiBjb250ZXh0IGluIHRoZSBmdW5jdGlvbiBncmFwaCBkaXNwbGF5LiBRdWl0ZSBhCisgICAgICAgICAgICBwb3dlcmZ1bCB0b29sIGZvciB1bmRlcnN0YW5kaW5nIGtlcm5lbCBkeW5hbWljcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWxzbyBub3RpY2UgdGhhdCB0aGVyZSBhcmUgdmFyaW91cyBhbm5vdGF0aW9ucyBvbiB0aGUgbGVmdAorICAgICAgICAgICAgaGFuZCBzaWRlIG9mIHRoZSBkaXNwbGF5LiBGb3IgZXhhbXBsZSBpZiB0aGUgdG90YWwgdGltZSBpdAorICAgICAgICAgICAgdG9vayBmb3IgYSBnaXZlbiBmdW5jdGlvbiB0byBleGVjdXRlIGlzIGFib3ZlIGEgY2VydGFpbgorICAgICAgICAgICAgdGhyZXNob2xkLCBhbiBleGNsYW1hdGlvbiBwb2ludCBvciBwbHVzIHNpZ24gYXBwZWFycyBvbiB0aGUKKyAgICAgICAgICAgIGxlZnQgaGFuZCBzaWRlLiBQbGVhc2Ugc2VlIHRoZSBmdHJhY2UgZG9jdW1lbnRhdGlvbiBmb3IKKyAgICAgICAgICAgIGRldGFpbHMgb24gYWxsIHRoZXNlIGZpZWxkcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd0aGUtdHJhY2UtZXZlbnRzLXN1YnN5c3RlbSc+CisgICAgICAgIDx0aXRsZT5UaGUgJ3RyYWNlIGV2ZW50cycgU3Vic3lzdGVtPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE9uZSBlc3BlY2lhbGx5IGltcG9ydGFudCBkaXJlY3RvcnkgY29udGFpbmVkIHdpdGhpbgorICAgICAgICAgICAgdGhlIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcgZGlyZWN0b3J5IGlzIHRoZSAnZXZlbnRzJworICAgICAgICAgICAgc3ViZGlyZWN0b3J5LCB3aGljaCBjb250YWlucyByZXByZXNlbnRhdGlvbnMgb2YgZXZlcnkKKyAgICAgICAgICAgIHRyYWNlcG9pbnQgaW4gdGhlIHN5c3RlbS4gTGlzdGluZyBvdXQgdGhlIGNvbnRlbnRzIG9mCisgICAgICAgICAgICB0aGUgJ2V2ZW50cycgc3ViZGlyZWN0b3J5LCB3ZSBzZWUgbWFpbmx5IGFub3RoZXIgc2V0IG9mCisgICAgICAgICAgICBzdWJkaXJlY3RvcmllczoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBjZCBldmVudHMKKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cyMgbHMgLWFsCisgICAgIGRyd3hyLXhyLXggICAzOCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IC4KKyAgICAgZHJ3eHIteHIteCAgICA1IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgLi4KKyAgICAgZHJ3eHIteHIteCAgIDE5IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgYmxvY2sKKyAgICAgZHJ3eHIteHIteCAgIDMyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgYnRyZnMKKyAgICAgZHJ3eHIteHIteCAgICA1IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgZHJtCisgICAgIC1ydy1yLS1yLS0gICAgMSByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IGVuYWJsZQorICAgICBkcnd4ci14ci14ICAgNDAgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBleHQzCisgICAgIGRyd3hyLXhyLXggICA3OSByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IGV4dDQKKyAgICAgZHJ3eHIteHIteCAgIDE0IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgZnRyYWNlCisgICAgIGRyd3hyLXhyLXggICAgOCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IGhkYQorICAgICAtci0tci0tci0tICAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBoZWFkZXJfZXZlbnQKKyAgICAgLXItLXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgaGVhZGVyX3BhZ2UKKyAgICAgZHJ3eHIteHIteCAgIDI1IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgaTkxNQorICAgICBkcnd4ci14ci14ICAgIDcgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBpcnEKKyAgICAgZHJ3eHIteHIteCAgIDEyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgamJkCisgICAgIGRyd3hyLXhyLXggICAxNCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IGpiZDIKKyAgICAgZHJ3eHIteHIteCAgIDE0IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkga21lbQorICAgICBkcnd4ci14ci14ICAgIDcgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBtb2R1bGUKKyAgICAgZHJ3eHIteHIteCAgICAzIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgbmFwaQorICAgICBkcnd4ci14ci14ICAgIDYgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBuZXQKKyAgICAgZHJ3eHIteHIteCAgICAzIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgb29tCisgICAgIGRyd3hyLXhyLXggICAxMiByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHBvd2VyCisgICAgIGRyd3hyLXhyLXggICAgMyByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHByaW50aworICAgICBkcnd4ci14ci14ICAgIDggcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSByYW5kb20KKyAgICAgZHJ3eHIteHIteCAgICA0IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgcmF3X3N5c2NhbGxzCisgICAgIGRyd3hyLXhyLXggICAgMyByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHJjdQorICAgICBkcnd4ci14ci14ICAgIDYgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBycG0KKyAgICAgZHJ3eHIteHIteCAgIDIwIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgc2NoZWQKKyAgICAgZHJ3eHIteHIteCAgICA3IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgc2NzaQorICAgICBkcnd4ci14ci14ICAgIDQgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBzaWduYWwKKyAgICAgZHJ3eHIteHIteCAgICA1IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgc2tiCisgICAgIGRyd3hyLXhyLXggICAgNCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHNvY2sKKyAgICAgZHJ3eHIteHIteCAgIDEwIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgc3VucnBjCisgICAgIGRyd3hyLXhyLXggIDUzOCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHN5c2NhbGxzCisgICAgIGRyd3hyLXhyLXggICAgNCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHRhc2sKKyAgICAgZHJ3eHIteHIteCAgIDE0IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgdGltZXIKKyAgICAgZHJ3eHIteHIteCAgICAzIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgdWRwCisgICAgIGRyd3hyLXhyLXggICAyMSByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHZtc2NhbgorICAgICBkcnd4ci14ci14ICAgIDMgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSB2c3lzY2FsbAorICAgICBkcnd4ci14ci14ICAgIDYgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSB3b3JrcXVldWUKKyAgICAgZHJ3eHIteHIteCAgIDI2IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgd3JpdGViYWNrCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBFYWNoIG9uZSBvZiB0aGVzZSBzdWJkaXJlY3RvcmllcyBjb3JyZXNwb25kcyB0byBhCisgICAgICAgICAgICAnc3Vic3lzdGVtJyBhbmQgY29udGFpbnMgeWV0IGFnYWluIG1vcmUgc3ViZGlyZWN0b3JpZXMsCisgICAgICAgICAgICBlYWNoIG9uZSBvZiB0aG9zZSBmaW5hbGx5IGNvcnJlc3BvbmRpbmcgdG8gYSB0cmFjZXBvaW50LgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGhlcmUgYXJlIHRoZSBjb250ZW50cyBvZiB0aGUgJ2ttZW0nIHN1YnN5c3RlbToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cyMgY2Qga21lbQorICAgICByb290QHN1Z2FyYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2ttZW0jIGxzIC1hbAorICAgICBkcnd4ci14ci14ICAgMTQgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSAuCisgICAgIGRyd3hyLXhyLXggICAzOCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IC4uCisgICAgIC1ydy1yLS1yLS0gICAgMSByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IGVuYWJsZQorICAgICAtcnctci0tci0tICAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBmaWx0ZXIKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkga2ZyZWUKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkga21hbGxvYworICAgICBkcnd4ci14ci14ICAgIDIgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBrbWFsbG9jX25vZGUKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkga21lbV9jYWNoZV9hbGxvYworICAgICBkcnd4ci14ci14ICAgIDIgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBrbWVtX2NhY2hlX2FsbG9jX25vZGUKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkga21lbV9jYWNoZV9mcmVlCisgICAgIGRyd3hyLXhyLXggICAgMiByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IG1tX3BhZ2VfYWxsb2MKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgbW1fcGFnZV9hbGxvY19leHRmcmFnCisgICAgIGRyd3hyLXhyLXggICAgMiByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IG1tX3BhZ2VfYWxsb2Nfem9uZV9sb2NrZWQKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgbW1fcGFnZV9mcmVlCisgICAgIGRyd3hyLXhyLXggICAgMiByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IG1tX3BhZ2VfZnJlZV9iYXRjaGVkCisgICAgIGRyd3hyLXhyLXggICAgMiByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IG1tX3BhZ2VfcGNwdV9kcmFpbgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgTGV0J3Mgc2VlIHdoYXQncyBpbnNpZGUgdGhlIHN1YmRpcmVjdG9yeSBmb3IgYSBzcGVjaWZpYworICAgICAgICAgICAgdHJhY2Vwb2ludCwgaW4gdGhpcyBjYXNlIHRoZSBvbmUgZm9yIGttYWxsb2M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAc3VnYXJiYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMva21lbSMgY2Qga21hbGxvYworICAgICByb290QHN1Z2FyYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2ttZW0va21hbGxvYyMgbHMgLWFsCisgICAgIGRyd3hyLXhyLXggICAgMiByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IC4KKyAgICAgZHJ3eHIteHIteCAgIDE0IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgLi4KKyAgICAgLXJ3LXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgZW5hYmxlCisgICAgIC1ydy1yLS1yLS0gICAgMSByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IGZpbHRlcgorICAgICAtci0tci0tci0tICAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBmb3JtYXQKKyAgICAgLXItLXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgaWQKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSAnZm9ybWF0JyBmaWxlIGZvciB0aGUgdHJhY2Vwb2ludCBkZXNjcmliZXMgdGhlIGV2ZW50CisgICAgICAgICAgICBpbiBtZW1vcnksIHdoaWNoIGlzIHVzZWQgYnkgdGhlIHZhcmlvdXMgdHJhY2luZyB0b29scworICAgICAgICAgICAgdGhhdCBub3cgbWFrZSB1c2Ugb2YgdGhlc2UgdHJhY2Vwb2ludCB0byBwYXJzZSB0aGUgZXZlbnQKKyAgICAgICAgICAgIGFuZCBtYWtlIHNlbnNlIG9mIGl0LCBhbG9uZyB3aXRoIGEgJ3ByaW50IGZtdCcgZmllbGQgdGhhdAorICAgICAgICAgICAgYWxsb3dzIHRvb2xzIGxpa2UgZnRyYWNlIHRvIGRpc3BsYXkgdGhlIGV2ZW50IGFzIHRleHQuCisgICAgICAgICAgICBIZXJlJ3Mgd2hhdCB0aGUgZm9ybWF0IG9mIHRoZSBrbWFsbG9jIGV2ZW50IGxvb2tzIGxpa2U6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAc3VnYXJiYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMva21lbS9rbWFsbG9jIyBjYXQgZm9ybWF0CisgICAgIG5hbWU6IGttYWxsb2MKKyAgICAgSUQ6IDMxMworICAgICBmb3JtYXQ6CisJICAgICBmaWVsZDp1bnNpZ25lZCBzaG9ydCBjb21tb25fdHlwZTsJb2Zmc2V0OjA7CXNpemU6MjsJc2lnbmVkOjA7CisJICAgICBmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9mbGFnczsJb2Zmc2V0OjI7CXNpemU6MTsJc2lnbmVkOjA7CisJICAgICBmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9wcmVlbXB0X2NvdW50OwlvZmZzZXQ6MzsJc2l6ZToxOwlzaWduZWQ6MDsKKwkgICAgIGZpZWxkOmludCBjb21tb25fcGlkOwlvZmZzZXQ6NDsJc2l6ZTo0OwlzaWduZWQ6MTsKKwkgICAgIGZpZWxkOmludCBjb21tb25fcGFkZGluZzsJb2Zmc2V0Ojg7CXNpemU6NDsJc2lnbmVkOjE7CisKKwkgICAgIGZpZWxkOnVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlOwlvZmZzZXQ6MTY7CXNpemU6ODsJc2lnbmVkOjA7CisJICAgICBmaWVsZDpjb25zdCB2b2lkICogcHRyOwlvZmZzZXQ6MjQ7CXNpemU6ODsJc2lnbmVkOjA7CisJICAgICBmaWVsZDpzaXplX3QgYnl0ZXNfcmVxOwlvZmZzZXQ6MzI7CXNpemU6ODsJc2lnbmVkOjA7CisJICAgICBmaWVsZDpzaXplX3QgYnl0ZXNfYWxsb2M7CW9mZnNldDo0MDsJc2l6ZTo4OwlzaWduZWQ6MDsKKwkgICAgIGZpZWxkOmdmcF90IGdmcF9mbGFnczsJb2Zmc2V0OjQ4OwlzaXplOjQ7CXNpZ25lZDowOworCisgICAgIHByaW50IGZtdDogImNhbGxfc2l0ZT0lbHggcHRyPSVwIGJ5dGVzX3JlcT0lenUgYnl0ZXNfYWxsb2M9JXp1IGdmcF9mbGFncz0lcyIsIFJFQy0+Y2FsbF9zaXRlLCBSRUMtPnB0ciwgUkVDLT5ieXRlc19yZXEsIFJFQy0+Ynl0ZXNfYWxsb2MsCisgICAgIChSRUMtPmdmcF9mbGFncykgPyBfX3ByaW50X2ZsYWdzKFJFQy0+Z2ZwX2ZsYWdzLCAifCIsIHsodW5zaWduZWQgbG9uZykoKCgoIGdmcF90KTB4MTB1KSB8ICgoIGdmcF90KTB4NDB1KSB8ICgoIGdmcF90KTB4ODB1KSB8ICgoCisgICAgIGdmcF90KTB4MjAwMDB1KSB8ICgoIGdmcF90KTB4MDJ1KSB8ICgoIGdmcF90KTB4MDh1KSkgfCAoKCBnZnBfdCkweDQwMDB1KSB8ICgoIGdmcF90KTB4MTAwMDB1KSB8ICgoIGdmcF90KTB4MTAwMHUpIHwgKCggZ2ZwX3QpMHgyMDB1KSB8ICgoCisgICAgIGdmcF90KTB4NDAwMDAwdSkpLCAiR0ZQX1RSQU5TSFVHRSJ9LCB7KHVuc2lnbmVkIGxvbmcpKCgoIGdmcF90KTB4MTB1KSB8ICgoIGdmcF90KTB4NDB1KSB8ICgoIGdmcF90KTB4ODB1KSB8ICgoIGdmcF90KTB4MjAwMDB1KSB8ICgoCisgICAgIGdmcF90KTB4MDJ1KSB8ICgoIGdmcF90KTB4MDh1KSksICJHRlBfSElHSFVTRVJfTU9WQUJMRSJ9LCB7KHVuc2lnbmVkIGxvbmcpKCgoIGdmcF90KTB4MTB1KSB8ICgoIGdmcF90KTB4NDB1KSB8ICgoIGdmcF90KTB4ODB1KSB8ICgoCisgICAgIGdmcF90KTB4MjAwMDB1KSB8ICgoIGdmcF90KTB4MDJ1KSksICJHRlBfSElHSFVTRVIifSwgeyh1bnNpZ25lZCBsb25nKSgoKCBnZnBfdCkweDEwdSkgfCAoKCBnZnBfdCkweDQwdSkgfCAoKCBnZnBfdCkweDgwdSkgfCAoKAorICAgICBnZnBfdCkweDIwMDAwdSkpLCAiR0ZQX1VTRVIifSwgeyh1bnNpZ25lZCBsb25nKSgoKCBnZnBfdCkweDEwdSkgfCAoKCBnZnBfdCkweDQwdSkgfCAoKCBnZnBfdCkweDgwdSkgfCAoKCBnZnBfdCkweDgwMDAwdSkpLCBHRlBfVEVNUE9SQVJZIn0sCisgICAgIHsodW5zaWduZWQgbG9uZykoKCggZ2ZwX3QpMHgxMHUpIHwgKCggZ2ZwX3QpMHg0MHUpIHwgKCggZ2ZwX3QpMHg4MHUpKSwgIkdGUF9LRVJORUwifSwgeyh1bnNpZ25lZCBsb25nKSgoKCBnZnBfdCkweDEwdSkgfCAoKCBnZnBfdCkweDQwdSkpLAorICAgICAiR0ZQX05PRlMifSwgeyh1bnNpZ25lZCBsb25nKSgoKCBnZnBfdCkweDIwdSkpLCAiR0ZQX0FUT01JQyJ9LCB7KHVuc2lnbmVkIGxvbmcpKCgoIGdmcF90KTB4MTB1KSksICJHRlBfTk9JTyJ9LCB7KHVuc2lnbmVkIGxvbmcpKCgKKyAgICAgZ2ZwX3QpMHgyMHUpLCAiR0ZQX0hJR0gifSwgeyh1bnNpZ25lZCBsb25nKSgoIGdmcF90KTB4MTB1KSwgIkdGUF9XQUlUIn0sIHsodW5zaWduZWQgbG9uZykoKCBnZnBfdCkweDQwdSksICJHRlBfSU8ifSwgeyh1bnNpZ25lZCBsb25nKSgoCisgICAgIGdmcF90KTB4MTAwdSksICJHRlBfQ09MRCJ9LCB7KHVuc2lnbmVkIGxvbmcpKCggZ2ZwX3QpMHgyMDB1KSwgIkdGUF9OT1dBUk4ifSwgeyh1bnNpZ25lZCBsb25nKSgoIGdmcF90KTB4NDAwdSksICJHRlBfUkVQRUFUIn0sIHsodW5zaWduZWQKKyAgICAgbG9uZykoKCBnZnBfdCkweDgwMHUpLCAiR0ZQX05PRkFJTCJ9LCB7KHVuc2lnbmVkIGxvbmcpKCggZ2ZwX3QpMHgxMDAwdSksICJHRlBfTk9SRVRSWSJ9LCAgICAgIHsodW5zaWduZWQgbG9uZykoKCBnZnBfdCkweDQwMDB1KSwgIkdGUF9DT01QIn0sCisgICAgIHsodW5zaWduZWQgbG9uZykoKCBnZnBfdCkweDgwMDB1KSwgIkdGUF9aRVJPIn0sIHsodW5zaWduZWQgbG9uZykoKCBnZnBfdCkweDEwMDAwdSksICJHRlBfTk9NRU1BTExPQyJ9LCB7KHVuc2lnbmVkIGxvbmcpKCggZ2ZwX3QpMHgyMDAwMHUpLAorICAgICAiR0ZQX0hBUkRXQUxMIn0sIHsodW5zaWduZWQgbG9uZykoKCBnZnBfdCkweDQwMDAwdSksICJHRlBfVEhJU05PREUifSwgeyh1bnNpZ25lZCBsb25nKSgoIGdmcF90KTB4ODAwMDB1KSwgIkdGUF9SRUNMQUlNQUJMRSJ9LCB7KHVuc2lnbmVkCisgICAgIGxvbmcpKCggZ2ZwX3QpMHgwOHUpLCAiR0ZQX01PVkFCTEUifSwgeyh1bnNpZ25lZCBsb25nKSgoIGdmcF90KTApLCAiR0ZQX05PVFJBQ0sifSwgeyh1bnNpZ25lZCBsb25nKSgoIGdmcF90KTB4NDAwMDAwdSksICJHRlBfTk9fS1NXQVBEIn0sCisgICAgIHsodW5zaWduZWQgbG9uZykoKCBnZnBfdCkweDgwMDAwMHUpLCAiR0ZQX09USEVSX05PREUifSApIDogIkdGUF9OT1dBSVQiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgJ2VuYWJsZScgZmlsZSBpbiB0aGUgdHJhY2Vwb2ludCBkaXJlY3RvcnkgaXMgd2hhdCBhbGxvd3MKKyAgICAgICAgICAgIHRoZSB1c2VyIChvciB0b29scyBzdWNoIGFzIHRyYWNlLWNtZCkgdG8gYWN0dWFsbHkgdHVybiB0aGUKKyAgICAgICAgICAgIHRyYWNlcG9pbnQgb24gYW5kIG9mZi4gV2hlbiBlbmFibGVkLCB0aGUgY29ycmVzcG9uZGluZworICAgICAgICAgICAgdHJhY2Vwb2ludCB3aWxsIHN0YXJ0IGFwcGVhcmluZyBpbiB0aGUgZnRyYWNlICd0cmFjZScKKyAgICAgICAgICAgIGZpbGUgZGVzY3JpYmVkIHByZXZpb3VzbHkuIEZvciBleGFtcGxlLCB0aGlzIHR1cm5zIG9uIHRoZQorICAgICAgICAgICAga21hbGxvYyB0cmFjZXBvaW50OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QHN1Z2FyYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2ttZW0va21hbGxvYyMgZWNobyAxID4gZW5hYmxlCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBBdCB0aGUgbW9tZW50LCB3ZSdyZSBub3QgaW50ZXJlc3RlZCBpbiB0aGUgZnVuY3Rpb24gdHJhY2VyIG9yCisgICAgICAgICAgICBzb21lIG90aGVyIHRyYWNlciB0aGF0IG1pZ2h0IGJlIGluIGVmZmVjdCwgc28gd2UgZmlyc3QgdHVybgorICAgICAgICAgICAgaXQgb2ZmLCBidXQgaWYgd2UgZG8gdGhhdCwgd2Ugc3RpbGwgbmVlZCB0byB0dXJuIHRyYWNpbmcgb24gaW4KKyAgICAgICAgICAgIG9yZGVyIHRvIHNlZSB0aGUgZXZlbnRzIGluIHRoZSBvdXRwdXQgYnVmZmVyOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QHN1Z2FyYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcjIGVjaG8gbm9wID4gY3VycmVudF90cmFjZXIKKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBlY2hvIDEgPiB0cmFjaW5nX29uCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBOb3csIGlmIHdlIGxvb2sgYXQgdGhlIHRoZSAndHJhY2UnIGZpbGUsIHdlIHNlZSBub3RoaW5nCisgICAgICAgICAgICBidXQgdGhlIGttYWxsb2MgZXZlbnRzIHdlIGp1c3QgdHVybmVkIG9uOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QHN1Z2FyYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcjIGNhdCB0cmFjZSB8IGxlc3MKKyAgICAgIyB0cmFjZXI6IG5vcAorICAgICAjCisgICAgICMgZW50cmllcy1pbi1idWZmZXIvZW50cmllcy13cml0dGVuOiAxODk3LzE4OTcgICAjUDo4CisgICAgICMKKyAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8tLS0tLT0mZ3Q7IGlycXMtb2ZmCisgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gXy0tLS09Jmd0OyBuZWVkLXJlc2NoZWQKKyAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IC8gXy0tLT0mZ3Q7IGhhcmRpcnEvc29mdGlycQorICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IC8gXy0tPSZndDsgcHJlZW1wdC1kZXB0aAorICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8fCAvICAgICBkZWxheQorICAgICAjICAgICAgICAgICBUQVNLLVBJRCAgIENQVSMgIHx8fHwgICAgVElNRVNUQU1QICBGVU5DVElPTgorICAgICAjICAgICAgICAgICAgICB8IHwgICAgICAgfCAgIHx8fHwgICAgICAgfCAgICAgICAgIHwKKyAgICAgICAgICAgIGRyb3BiZWFyLTE0NjUgIFswMDBdIC4uLjEgMTgxNTQuNjIwNzUzOiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTY2NTBkNCBwdHI9ZmZmZjg4MDA3MjljMzAwMCBieXRlc19yZXE9MjA0OCBieXRlc19hbGxvYz0yMDQ4IGdmcF9mbGFncz1HRlBfS0VSTkVMCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDAwXSAuLnMzIDE4MTU0LjYyMTY0MDoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2MTliMzYgcHRyPWZmZmY4ODAwNmQ1NTU4MDAgYnl0ZXNfcmVxPTUxMiBieXRlc19hbGxvYz01MTIgZ2ZwX2ZsYWdzPUdGUF9BVE9NSUMKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDBdIC4uczMgMTgxNTQuNjIxNjU2OiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTYxOWIzNiBwdHI9ZmZmZjg4MDA2ZDU1NTgwMCBieXRlc19yZXE9NTEyIGJ5dGVzX2FsbG9jPTUxMiBnZnBfZmxhZ3M9R0ZQX0FUT01JQworICAgICBtYXRjaGJveC10ZXJtaW4tMTM2MSAgWzAwMV0gLi4uMSAxODE1NC43NTU0NzI6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNjE0MDUwIHB0cj1mZmZmODgwMDZkNWYwZTAwIGJ5dGVzX3JlcT01MTIgYnl0ZXNfYWxsb2M9NTEyIGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9SRVBFQVQKKyAgICAgICAgICAgICAgICBYb3JnLTEyNjQgIFswMDJdIC4uLjEgMTgxNTQuNzU1NTgxOiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTQxYWJlOCBwdHI9ZmZmZjg4MDA3MzRmNGNjMCBieXRlc19yZXE9MTY4IGJ5dGVzX2FsbG9jPTE5MiBnZnBfZmxhZ3M9R0ZQX0tFUk5FTHxHRlBfTk9XQVJOfEdGUF9OT1JFVFJZCisgICAgICAgICAgICAgICAgWG9yZy0xMjY0ICBbMDAyXSAuLi4xIDE4MTU0Ljc1NTU4Mzoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE0MTkyYTMgcHRyPWZmZmY4ODAwMWY4MjI1MjAgYnl0ZXNfcmVxPTI0IGJ5dGVzX2FsbG9jPTMyIGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9aRVJPCisgICAgICAgICAgICAgICAgWG9yZy0xMjY0ICBbMDAyXSAuLi4xIDE4MTU0Ljc1NTU4OToga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE0MTllZGIgcHRyPWZmZmY4ODAwNzIxYTJmMDAgYnl0ZXNfcmVxPTY0IGJ5dGVzX2FsbG9jPTY0IGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9aRVJPCisgICAgIG1hdGNoYm94LXRlcm1pbi0xMzYxICBbMDAxXSAuLi4xIDE4MTU1LjM1NDU5NDoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2MTQwNTAgcHRyPWZmZmY4ODAwNmRiMzU0MDAgYnl0ZXNfcmVxPTU3NiBieXRlc19hbGxvYz0xMDI0IGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9SRVBFQVQKKyAgICAgICAgICAgICAgICBYb3JnLTEyNjQgIFswMDJdIC4uLjEgMTgxNTUuMzU0NzAzOiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTQxYWJlOCBwdHI9ZmZmZjg4MDA3MzRmNGNjMCBieXRlc19yZXE9MTY4IGJ5dGVzX2FsbG9jPTE5MiBnZnBfZmxhZ3M9R0ZQX0tFUk5FTHxHRlBfTk9XQVJOfEdGUF9OT1JFVFJZCisgICAgICAgICAgICAgICAgWG9yZy0xMjY0ICBbMDAyXSAuLi4xIDE4MTU1LjM1NDcwNToga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE0MTkyYTMgcHRyPWZmZmY4ODAwMWY4MjI1MjAgYnl0ZXNfcmVxPTI0IGJ5dGVzX2FsbG9jPTMyIGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9aRVJPCisgICAgICAgICAgICAgICAgWG9yZy0xMjY0ICBbMDAyXSAuLi4xIDE4MTU1LjM1NDcxMToga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE0MTllZGIgcHRyPWZmZmY4ODAwNzIxYTJmMDAgYnl0ZXNfcmVxPTY0IGJ5dGVzX2FsbG9jPTY0IGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9aRVJPCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDAwXSAuLnMzIDE4MTU1LjY3MzMxOToga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2MTliMzYgcHRyPWZmZmY4ODAwNmQ1NTU4MDAgYnl0ZXNfcmVxPTUxMiBieXRlc19hbGxvYz01MTIgZ2ZwX2ZsYWdzPUdGUF9BVE9NSUMKKyAgICAgICAgICAgIGRyb3BiZWFyLTE0NjUgIFswMDBdIC4uLjEgMTgxNTUuNjczNTI1OiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTY2NTBkNCBwdHI9ZmZmZjg4MDA3MjljMzAwMCBieXRlc19yZXE9MjA0OCBieXRlc19hbGxvYz0yMDQ4IGdmcF9mbGFncz1HRlBfS0VSTkVMCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDAwXSAuLnMzIDE4MTU1LjY3NDgyMToga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2MTliMzYgcHRyPWZmZmY4ODAwNmQ1NTQ4MDAgYnl0ZXNfcmVxPTUxMiBieXRlc19hbGxvYz01MTIgZ2ZwX2ZsYWdzPUdGUF9BVE9NSUMKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDBdIC4uczMgMTgxNTUuNzkzMDE0OiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTYxOWIzNiBwdHI9ZmZmZjg4MDA2ZDU1NDgwMCBieXRlc19yZXE9NTEyIGJ5dGVzX2FsbG9jPTUxMiBnZnBfZmxhZ3M9R0ZQX0FUT01JQworICAgICAgICAgICAgZHJvcGJlYXItMTQ2NSAgWzAwMF0gLi4uMSAxODE1NS43OTMyMTk6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNjY1MGQ0IHB0cj1mZmZmODgwMDcyOWMzMDAwIGJ5dGVzX3JlcT0yMDQ4IGJ5dGVzX2FsbG9jPTIwNDggZ2ZwX2ZsYWdzPUdGUF9LRVJORUwKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDBdIC4uczMgMTgxNTUuNzk0MTQ3OiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTYxOWIzNiBwdHI9ZmZmZjg4MDA2ZDU1NTgwMCBieXRlc19yZXE9NTEyIGJ5dGVzX2FsbG9jPTUxMiBnZnBfZmxhZ3M9R0ZQX0FUT01JQworICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwMF0gLi5zMyAxODE1NS45MzY3MDU6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNjE5YjM2IHB0cj1mZmZmODgwMDZkNTU1ODAwIGJ5dGVzX3JlcT01MTIgYnl0ZXNfYWxsb2M9NTEyIGdmcF9mbGFncz1HRlBfQVRPTUlDCisgICAgICAgICAgICBkcm9wYmVhci0xNDY1ICBbMDAwXSAuLi4xIDE4MTU1LjkzNjkxMDoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2NjUwZDQgcHRyPWZmZmY4ODAwNzI5YzMwMDAgYnl0ZXNfcmVxPTIwNDggYnl0ZXNfYWxsb2M9MjA0OCBnZnBfZmxhZ3M9R0ZQX0tFUk5FTAorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwMF0gLi5zMyAxODE1NS45Mzc4Njk6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNjE5YjM2IHB0cj1mZmZmODgwMDZkNTU0ODAwIGJ5dGVzX3JlcT01MTIgYnl0ZXNfYWxsb2M9NTEyIGdmcF9mbGFncz1HRlBfQVRPTUlDCisgICAgIG1hdGNoYm94LXRlcm1pbi0xMzYxICBbMDAxXSAuLi4xIDE4MTU1Ljk1MzY2Nzoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2MTQwNTAgcHRyPWZmZmY4ODAwNmQ1ZjIwMDAgYnl0ZXNfcmVxPTUxMiBieXRlc19hbGxvYz01MTIgZ2ZwX2ZsYWdzPUdGUF9LRVJORUx8R0ZQX1JFUEVBVAorICAgICAgICAgICAgICAgIFhvcmctMTI2NCAgWzAwMl0gLi4uMSAxODE1NS45NTM3NzU6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNDFhYmU4IHB0cj1mZmZmODgwMDczNGY0Y2MwIGJ5dGVzX3JlcT0xNjggYnl0ZXNfYWxsb2M9MTkyIGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9OT1dBUk58R0ZQX05PUkVUUlkKKyAgICAgICAgICAgICAgICBYb3JnLTEyNjQgIFswMDJdIC4uLjEgMTgxNTUuOTUzNzc3OiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTQxOTJhMyBwdHI9ZmZmZjg4MDAxZjgyMjUyMCBieXRlc19yZXE9MjQgYnl0ZXNfYWxsb2M9MzIgZ2ZwX2ZsYWdzPUdGUF9LRVJORUx8R0ZQX1pFUk8KKyAgICAgICAgICAgICAgICBYb3JnLTEyNjQgIFswMDJdIC4uLjEgMTgxNTUuOTUzNzgzOiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTQxOWVkYiBwdHI9ZmZmZjg4MDA3MjFhMmYwMCBieXRlc19yZXE9NjQgYnl0ZXNfYWxsb2M9NjQgZ2ZwX2ZsYWdzPUdGUF9LRVJORUx8R0ZQX1pFUk8KKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDBdIC4uczMgMTgxNTYuMTc2MDUzOiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTYxOWIzNiBwdHI9ZmZmZjg4MDA2ZDU1NDgwMCBieXRlc19yZXE9NTEyIGJ5dGVzX2FsbG9jPTUxMiBnZnBfZmxhZ3M9R0ZQX0FUT01JQworICAgICAgICAgICAgZHJvcGJlYXItMTQ2NSAgWzAwMF0gLi4uMSAxODE1Ni4xNzYyNTc6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNjY1MGQ0IHB0cj1mZmZmODgwMDcyOWMzMDAwIGJ5dGVzX3JlcT0yMDQ4IGJ5dGVzX2FsbG9jPTIwNDggZ2ZwX2ZsYWdzPUdGUF9LRVJORUwKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDBdIC4uczMgMTgxNTYuMTc3NzE3OiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTYxOWIzNiBwdHI9ZmZmZjg4MDA2ZDU1NTgwMCBieXRlc19yZXE9NTEyIGJ5dGVzX2FsbG9jPTUxMiBnZnBfZmxhZ3M9R0ZQX0FUT01JQworICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwMF0gLi5zMyAxODE1Ni4zOTkyMjk6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNjE5YjM2IHB0cj1mZmZmODgwMDZkNTU1ODAwIGJ5dGVzX3JlcT01MTIgYnl0ZXNfYWxsb2M9NTEyIGdmcF9mbGFncz1HRlBfQVRPTUlDCisgICAgICAgICAgICBkcm9wYmVhci0xNDY1ICBbMDAwXSAuLi4xIDE4MTU2LjM5OTQzNDoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2NjUwZDQgcHRyPWZmZmY4ODAwNzI5YzMwMDAgYnl0ZXNfaHR0cDovL3Jvc3RlZHQuaG9tZWxpbnV4LmNvbS9rZXJuZWxzaGFyay9yZXE9MjA0OCBieXRlc19hbGxvYz0yMDQ4IGdmcF9mbGFncz1HRlBfS0VSTkVMCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDAwXSAuLnMzIDE4MTU2LjQwMDY2MDoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2MTliMzYgcHRyPWZmZmY4ODAwNmQ1NTQ4MDAgYnl0ZXNfcmVxPTUxMiBieXRlc19hbGxvYz01MTIgZ2ZwX2ZsYWdzPUdGUF9BVE9NSUMKKyAgICAgbWF0Y2hib3gtdGVybWluLTEzNjEgIFswMDFdIC4uLjEgMTgxNTYuNTUyODAwOiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTYxNDA1MCBwdHI9ZmZmZjg4MDA2ZGIzNDgwMCBieXRlc19yZXE9NTc2IGJ5dGVzX2FsbG9jPTEwMjQgZ2ZwX2ZsYWdzPUdGUF9LRVJORUx8R0ZQX1JFUEVBVAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVG8gYWdhaW4gZGlzYWJsZSB0aGUga21hbGxvYyBldmVudCwgd2UgbmVlZCB0byBzZW5kIDAgdG8gdGhlCisgICAgICAgICAgICBlbmFibGUgZmlsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy9rbWVtL2ttYWxsb2MjIGVjaG8gMCA+IGVuYWJsZQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgWW91IGNhbiBlbmFibGUgYW55IG51bWJlciBvZiBldmVudHMgb3IgY29tcGxldGUgc3Vic3lzdGVtcworICAgICAgICAgICAgKGJ5IHVzaW5nIHRoZSAnZW5hYmxlJyBmaWxlIGluIHRoZSBzdWJzeXN0ZW0gZGlyZWN0b3J5KSBhbmQKKyAgICAgICAgICAgIGdldCBhbiBhcmJpdHJhcmlseSBmaW5lLWdyYWluZWQgaWRlYSBvZiB3aGF0J3MgZ29pbmcgb24gaW4gdGhlCisgICAgICAgICAgICBzeXN0ZW0gYnkgZW5hYmxpbmcgYXMgbWFueSBvZiB0aGUgYXBwcm9wcmlhdGUgdHJhY2Vwb2ludHMKKyAgICAgICAgICAgIGFzIGFwcGxpY2FibGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgbnVtYmVyIG9mIHRoZSB0b29scyBkZXNjcmliZWQgaW4gdGhpcyBIT1dUTyBkbyBqdXN0IHRoYXQsCisgICAgICAgICAgICBpbmNsdWRpbmcgdHJhY2UtY21kIGFuZCBrZXJuZWxzaGFyayBpbiB0aGUgbmV4dCBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxlbXBoYXNpcz5UeWluZyBpdCBUb2dldGhlcjo8L2VtcGhhc2lzPiBUaGVzZSB0cmFjZXBvaW50cyBhbmQgdGhlaXIgcmVwcmVzZW50YXRpb24KKyAgICAgICAgICAgIGFyZSB1c2VkIG5vdCBvbmx5IGJ5IGZ0cmFjZSwgIGJ1dCBieSBtYW55IG9mIHRoZSBvdGhlciB0b29scworICAgICAgICAgICAgY292ZXJlZCBpbiB0aGlzIGRvY3VtZW50IGFuZCB0aGV5IGZvcm0gYSBjZW50cmFsIHBvaW50IG9mCisgICAgICAgICAgICBpbnRlZ3JhdGlvbiBmb3IgdGhlIHZhcmlvdXMgdHJhY2VycyBhdmFpbGFibGUgaW4gTGludXguCisgICAgICAgICAgICBUaGV5IGZvcm0gYSBjZW50cmFsIHBhcnQgb2YgdGhlIGluc3RydW1lbnRhdGlvbiBmb3IgdGhlCisgICAgICAgICAgICBmb2xsb3dpbmcgdG9vbHM6IHBlcmYsIGx0dG5nLCBmdHJhY2UsIGJsa3RyYWNlIGFuZCBTeXN0ZW1UYXAKKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxlbXBoYXNpcz5UeWluZyBpdCBUb2dldGhlcjo8L2VtcGhhc2lzPiBFdmVudHVhbGx5IGFsbCB0aGUgc3BlY2lhbC1wdXJwb3NlIHRyYWNlcnMKKyAgICAgICAgICAgIGN1cnJlbnRseSBhdmFpbGFibGUgaW4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZyB3aWxsIGJlCisgICAgICAgICAgICByZW1vdmVkIGFuZCByZXBsYWNlZCB3aXRoIGVxdWl2YWxlbnQgdHJhY2VycyBiYXNlZCBvbiB0aGUKKyAgICAgICAgICAgICd0cmFjZSBldmVudHMnIHN1YnN5c3RlbS4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3RyYWNlLWNtZC1rZXJuZWxzaGFyayc+CisgICAgICAgIDx0aXRsZT50cmFjZS1jbWQva2VybmVsc2hhcms8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgdHJhY2UtY21kIGlzIGVzc2VudGlhbGx5IGFuIGV4dGVuc2l2ZSBjb21tYW5kLWxpbmUgJ3dyYXBwZXInCisgICAgICAgICAgICBpbnRlcmZhY2UgdGhhdCBoaWRlcyB0aGUgZGV0YWlscyBvZiBhbGwgdGhlIGluZGl2aWR1YWwgZmlsZXMKKyAgICAgICAgICAgIGluIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcsIGFsbG93aW5nIHVzZXJzIHRvIHNwZWNpZnkKKyAgICAgICAgICAgIHNwZWNpZmljIHBhcnRpY3VsYXIgZXZlbnRzIHdpdGhpbiB0aGUKKyAgICAgICAgICAgIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzLyBzdWJkaXJlY3RvcnkgYW5kIHRvIGNvbGxlY3QKKyAgICAgICAgICAgIHRyYWNlcyBhbmQgYXZvaWQgaGF2aW5nIHRvIGRlYWwgd2l0aCB0aG9zZSBkZXRhaWxzIGRpcmVjdGx5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyB5ZXQgYW5vdGhlciBsYXllciBvbiB0b3Agb2YgdGhhdCwga2VybmVsc2hhcmsgcHJvdmlkZXMgYSBHVUkKKyAgICAgICAgICAgIHRoYXQgYWxsb3dzIHVzZXJzIHRvIHN0YXJ0IGFuZCBzdG9wIHRyYWNlcyBhbmQgc3BlY2lmeSBzZXRzCisgICAgICAgICAgICBvZiBldmVudHMgdXNpbmcgYW4gaW50dWl0aXZlIGludGVyZmFjZSwgYW5kIHZpZXcgdGhlCisgICAgICAgICAgICBvdXRwdXQgYXMgYm90aCB0cmFjZSBldmVudHMgYW5kIGFzIGEgcGVyLUNQVSBncmFwaGljYWwKKyAgICAgICAgICAgIGRpc3BsYXkuIEl0IGRpcmVjdGx5IHVzZXMgJ3RyYWNlLWNtZCcgYXMgdGhlIHBsdW1iaW5nCisgICAgICAgICAgICB0aGF0IGFjY29tcGxpc2hlcyBhbGwgdGhhdCB1bmRlcm5lYXRoIHRoZSBjb3ZlcnMgKGFuZAorICAgICAgICAgICAgYWN0dWFsbHkgZGlzcGxheXMgdGhlIHRyYWNlLWNtZCBjb21tYW5kIGl0IHVzZXMsIGFzIHdlJ2xsIHNlZSkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIHN0YXJ0IGEgdHJhY2UgdXNpbmcga2VybmVsc2hhcmssIGZpcnN0IHN0YXJ0IGtlcm5lbHNoYXJrOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QHN1Z2FyYmF5On4jIGtlcm5lbHNoYXJrCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGVuIGJyaW5nIHVwIHRoZSAnQ2FwdHVyZScgZGlhbG9nIGJ5IGNob29zaW5nIGZyb20gdGhlCisgICAgICAgICAgICBrZXJuZWxzaGFyayBtZW51OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDYXB0dXJlIHwgUmVjb3JkCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGF0IHdpbGwgZGlzcGxheSB0aGUgZm9sbG93aW5nIGRpYWxvZywgd2hpY2ggYWxsb3dzIHlvdSB0bworICAgICAgICAgICAgY2hvb3NlIG9uZSBvciBtb3JlIGV2ZW50cyAob3IgZXZlbiBvbmUgb3IgbW9yZSBjb21wbGV0ZQorICAgICAgICAgICAgc3Vic3lzdGVtcykgdG8gdHJhY2U6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9rZXJuZWxzaGFyay1jaG9vc2UtZXZlbnRzLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjZpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE5vdGUgdGhhdCB0aGVzZSBhcmUgZXhhY3RseSB0aGUgc2FtZSBzZXRzIG9mIGV2ZW50cyBkZXNjcmliZWQKKyAgICAgICAgICAgIGluIHRoZSBwcmV2aW91cyB0cmFjZSBldmVudHMgc3Vic3lzdGVtIHNlY3Rpb24sIGFuZCBpbiBmYWN0CisgICAgICAgICAgICBpcyB3aGVyZSB0cmFjZS1jbWQgZ2V0cyB0aGVtIGZvciBrZXJuZWxzaGFyay4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW4gdGhlIGFib3ZlIHNjcmVlbnNob3QsIHdlJ3ZlIGRlY2lkZWQgdG8gZXhwbG9yZSB0aGUKKyAgICAgICAgICAgIGdyYXBoaWNzIHN1YnN5c3RlbSBhIGJpdCBhbmQgc28gaGF2ZSBjaG9zZW4gdG8gdHJhY2UgYWxsCisgICAgICAgICAgICB0aGUgdHJhY2Vwb2ludHMgY29udGFpbmVkIHdpdGhpbiB0aGUgJ2k5MTUnIGFuZCAnZHJtJworICAgICAgICAgICAgc3Vic3lzdGVtcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWZ0ZXIgZG9pbmcgdGhhdCwgd2UgY2FuIHN0YXJ0IGFuZCBzdG9wIHRoZSB0cmFjZSB1c2luZworICAgICAgICAgICAgdGhlICdSdW4nIGFuZCAnU3RvcCcgYnV0dG9uIG9uIHRoZSBsb3dlciByaWdodCBjb3JuZXIgb2YKKyAgICAgICAgICAgIHRoZSBkaWFsb2cgKHRoZSBzYW1lIGJ1dHRvbiB3aWxsIHR1cm4gaW50byB0aGUgJ1N0b3AnCisgICAgICAgICAgICBidXR0b24gYWZ0ZXIgdGhlIHRyYWNlIGhhcyBzdGFydGVkKToKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2tlcm5lbHNoYXJrLW91dHB1dC1kaXNwbGF5LnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjZpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE5vdGljZSB0aGF0IHRoZSByaWdodC1oYW5kIHBhbmUgc2hvd3MgdGhlIGV4YWN0IHRyYWNlLWNtZAorICAgICAgICAgICAgY29tbWFuZC1saW5lIHRoYXQncyB1c2VkIHRvIHJ1biB0aGUgdHJhY2UsIGFsb25nIHdpdGggdGhlCisgICAgICAgICAgICByZXN1bHRzIG9mIHRoZSB0cmFjZS1jbWQgcnVuLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIHRoZSAnU3RvcCcgYnV0dG9uIGlzIHByZXNzZWQsIHRoZSBncmFwaGljYWwgdmlldyBtYWdpY2FsbHkKKyAgICAgICAgICAgIGZpbGxzIHVwIHdpdGggYSBjb2xvcmZ1bCBwZXItY3B1IGRpc3BsYXkgb2YgdGhlIHRyYWNlIGRhdGEsCisgICAgICAgICAgICBhbG9uZyB3aXRoIHRoZSBkZXRhaWxlZCBldmVudCBsaXN0aW5nIGJlbG93IHRoYXQ6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9rZXJuZWxzaGFyay1pOTE1LWRpc3BsYXkucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSGVyZSdzIGFub3RoZXIgZXhhbXBsZSwgdGhpcyB0aW1lIGEgZGlzcGxheSByZXN1bHRpbmcKKyAgICAgICAgICAgIGZyb20gdHJhY2luZyAnYWxsIGV2ZW50cyc6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9rZXJuZWxzaGFyay1hbGwucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHRvb2wgaXMgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnksIGJ1dCBmb3IgbW9yZSBkZXRhaWxlZAorICAgICAgICAgICAgaW5mb3JtYXRpb24gb24gbmF2aWdhdGluZyB0aHJvdWdoIHRoZSBkYXRhLCBzZWUgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vcm9zdGVkdC5ob21lbGludXguY29tL2tlcm5lbHNoYXJrLyc+a2VybmVsc2hhcmsgd2Vic2l0ZTwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2Z0cmFjZS1kb2N1bWVudGF0aW9uJz4KKyAgICAgICAgPHRpdGxlPkRvY3VtZW50YXRpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGRvY3VtZW50YXRpb24gZm9yIGZ0cmFjZSBjYW4gYmUgZm91bmQgaW4gdGhlIGtlcm5lbAorICAgICAgICAgICAgRG9jdW1lbnRhdGlvbiBkaXJlY3Rvcnk6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSB0cmFjZSBldmVudCBzdWJzeXN0ZW0gY2FuIGFsc28KKyAgICAgICAgICAgIGJlIGZvdW5kIGluIHRoZSBrZXJuZWwgRG9jdW1lbnRhdGlvbiBkaXJlY3Rvcnk6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERvY3VtZW50YXRpb24vdHJhY2UvZXZlbnRzLnR4dAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlcmUgaXMgYSBuaWNlIHNlcmllcyBvZiBhcnRpY2xlcyBvbiB1c2luZworICAgICAgICAgICAgZnRyYWNlIGFuZCB0cmFjZS1jbWQgYXQgTFdOOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0naHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvMzY1ODM1Lyc+RGVidWdnaW5nIHRoZSBrZXJuZWwgdXNpbmcgRnRyYWNlIC0gcGFydCAxPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9J2h0dHA6Ly9sd24ubmV0L0FydGljbGVzLzM2Njc5Ni8nPkRlYnVnZ2luZyB0aGUga2VybmVsIHVzaW5nIEZ0cmFjZSAtIHBhcnQgMjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPSdodHRwOi8vbHduLm5ldC9BcnRpY2xlcy8zNzA0MjMvJz5TZWNyZXRzIG9mIHRoZSBGdHJhY2UgZnVuY3Rpb24gdHJhY2VyPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9J2h0dHBzOi8vbHduLm5ldC9BcnRpY2xlcy80MTAyMDAvJz50cmFjZS1jbWQ6IEEgZnJvbnQtZW5kIGZvciBGdHJhY2U8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGVyZSdzIG1vcmUgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBrZXJuZWxzaGFyayB1c2FnZSBoZXJlOgorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3Jvc3RlZHQuaG9tZWxpbnV4LmNvbS9rZXJuZWxzaGFyay8nPktlcm5lbFNoYXJrPC91bGluaz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQW4gYW11c2luZyB5ZXQgdXNlZnVsIFJFQURNRSAoYSB0cmFjaW5nIG1pbmktSE9XVE8pIGNhbiBiZQorICAgICAgICAgICAgZm91bmQgaW4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9SRUFETUUuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdwcm9maWxlLW1hbnVhbC1zeXN0ZW10YXAnPgorICAgIDx0aXRsZT5zeXN0ZW10YXA8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFN5c3RlbVRhcCBpcyBhIHN5c3RlbS13aWRlIHNjcmlwdC1iYXNlZCB0cmFjaW5nIGFuZCBwcm9maWxpbmcgdG9vbC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgU3lzdGVtVGFwIHNjcmlwdHMgYXJlIEMtbGlrZSBwcm9ncmFtcyB0aGF0IGFyZSBleGVjdXRlZCBpbiB0aGUKKyAgICAgICAga2VybmVsIHRvIGdhdGhlci9wcmludC9hZ2dyZWdhdGUgZGF0YSBleHRyYWN0ZWQgZnJvbSB0aGUgY29udGV4dAorICAgICAgICB0aGV5IGVuZCB1cCBiZWluZyBpbnZva2VkIHVuZGVyLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgZXhhbXBsZSwgdGhpcyBwcm9iZSBmcm9tIHRoZQorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vc291cmNld2FyZS5vcmcvc3lzdGVtdGFwL3R1dG9yaWFsLyc+U3lzdGVtVGFwIHR1dG9yaWFsPC91bGluaz4KKyAgICAgICAgc2ltcGx5IHByaW50cyBhIGxpbmUgZXZlcnkgdGltZSBhbnkgcHJvY2VzcyBvbiB0aGUgc3lzdGVtIG9wZW4oKXMKKyAgICAgICAgYSBmaWxlLiBGb3IgZWFjaCBsaW5lLCBpdCBwcmludHMgdGhlIGV4ZWN1dGFibGUgbmFtZSBvZiB0aGUKKyAgICAgICAgcHJvZ3JhbSB0aGF0IG9wZW5lZCB0aGUgZmlsZSwgYWxvbmcgd2l0aCBpdHMgUElELCBhbmQgdGhlIG5hbWUKKyAgICAgICAgb2YgdGhlIGZpbGUgaXQgb3BlbmVkIChvciB0cmllZCB0byBvcGVuKSwgd2hpY2ggaXQgZXh0cmFjdHMKKyAgICAgICAgZnJvbSB0aGUgb3BlbiBzeXNjYWxsJ3MgYXJnc3RyLgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHByb2JlIHN5c2NhbGwub3BlbgorICAgICB7CisgICAgICAgICAgICAgcHJpbnRmICgiJXMoJWQpIG9wZW4gKCVzKVxuIiwgZXhlY25hbWUoKSwgcGlkKCksIGFyZ3N0cikKKyAgICAgfQorCisgICAgIHByb2JlIHRpbWVyLm1zKDQwMDApICMgYWZ0ZXIgNCBzZWNvbmRzCisgICAgIHsKKyAgICAgICAgICAgICBleGl0ICgpCisgICAgIH0KKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICBOb3JtYWxseSwgdG8gZXhlY3V0ZSB0aGlzIHByb2JlLCB5b3UnZCBzaW1wbHkgaW5zdGFsbAorICAgICAgICBzeXN0ZW10YXAgb24gdGhlIHN5c3RlbSB5b3Ugd2FudCB0byBwcm9iZSwgYW5kIGRpcmVjdGx5IHJ1bgorICAgICAgICB0aGUgcHJvYmUgb24gdGhhdCBzeXN0ZW0gZS5nLiBhc3N1bWluZyB0aGUgbmFtZSBvZiB0aGUgZmlsZQorICAgICAgICBjb250YWluaW5nIHRoZSBhYm92ZSB0ZXh0IGlzIHRyYWNlX29wZW4uc3RwOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgc3RhcCB0cmFjZV9vcGVuLnN0cAorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIFdoYXQgc3lzdGVtdGFwIGRvZXMgdW5kZXIgdGhlIGNvdmVycyB0byBydW4gdGhpcyBwcm9iZSBpcyAxKQorICAgICAgICBwYXJzZSBhbmQgY29udmVydCB0aGUgcHJvYmUgdG8gYW4gZXF1aXZhbGVudCAnQycgZm9ybSwgMikKKyAgICAgICAgY29tcGlsZSB0aGUgJ0MnIGZvcm0gaW50byBhIGtlcm5lbCBtb2R1bGUsIDMpIGluc2VydCB0aGUKKyAgICAgICAgbW9kdWxlIGludG8gdGhlIGtlcm5lbCwgd2hpY2ggYXJtcyBpdCwgYW5kIDQpIGNvbGxlY3QgdGhlIGRhdGEKKyAgICAgICAgZ2VuZXJhdGVkIGJ5IHRoZSBwcm9iZSBhbmQgZGlzcGxheSBpdCB0byB0aGUgdXNlci4KKyAgICAgPC9wYXJhPgorCisgICAgIDxwYXJhPgorICAgICAgICBJbiBvcmRlciB0byBhY2NvbXBsaXNoIHN0ZXBzIDEgYW5kIDIsIHRoZSAnc3RhcCcgcHJvZ3JhbSBuZWVkcworICAgICAgICBhY2Nlc3MgdG8gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gdGhhdCBwcm9kdWNlZCB0aGUga2VybmVsCisgICAgICAgIHRoYXQgdGhlIHByb2JlZCBzeXN0ZW0gaXMgcnVubmluZy4gSW4gdGhlIGNhc2Ugb2YgYSB0eXBpY2FsCisgICAgICAgIGVtYmVkZGVkIHN5c3RlbSAodGhlICd0YXJnZXQnKSwgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0KKyAgICAgICAgdW5mb3J0dW5hdGVseSBpc24ndCB0eXBpY2FsbHkgcGFydCBvZiB0aGUgaW1hZ2UgcnVubmluZyBvbgorICAgICAgICB0aGUgdGFyZ2V0LiBJdCBpcyBub3JtYWxseSBhdmFpbGFibGUgb24gdGhlICdob3N0JyBzeXN0ZW0KKyAgICAgICAgdGhhdCBwcm9kdWNlZCB0aGUgdGFyZ2V0IGltYWdlIGhvd2V2ZXI7IGluIHN1Y2ggY2FzZXMsCisgICAgICAgIHN0ZXBzIDEgYW5kIDIgYXJlIGV4ZWN1dGVkIG9uIHRoZSBob3N0IHN5c3RlbSwgYW5kIHN0ZXBzCisgICAgICAgIDMgYW5kIDQgYXJlIGV4ZWN1dGVkIG9uIHRoZSB0YXJnZXQgc3lzdGVtLCB1c2luZyBvbmx5IHRoZQorICAgICAgICBzeXN0ZW10YXAgJ3J1bnRpbWUnLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgc3lzdGVtdGFwIHN1cHBvcnQgaW4gWW9jdG8gYXNzdW1lcyB0aGF0IG9ubHkgc3RlcHMKKyAgICAgICAgMyBhbmQgNCBhcmUgcnVuIG9uIHRoZSB0YXJnZXQ7IGl0IGlzIHBvc3NpYmxlIHRvIGRvCisgICAgICAgIGV2ZXJ5dGhpbmcgb24gdGhlIHRhcmdldCwgYnV0IHRoaXMgc2VjdGlvbiBhc3N1bWVzIG9ubHkKKyAgICAgICAgdGhlIHR5cGljYWwgZW1iZWRkZWQgdXNlLWNhc2UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFNvIGJhc2ljYWxseSB3aGF0IHlvdSBuZWVkIHRvIGRvIGluIG9yZGVyIHRvIHJ1biBhIHN5c3RlbXRhcAorICAgICAgICBzY3JpcHQgb24gdGhlIHRhcmdldCBpcyB0byAxKSBvbiB0aGUgaG9zdCBzeXN0ZW0sIGNvbXBpbGUgdGhlCisgICAgICAgIHByb2JlIGludG8gYSBrZXJuZWwgbW9kdWxlIHRoYXQgbWFrZXMgc2Vuc2UgdG8gdGhlIHRhcmdldCwgMikKKyAgICAgICAgY29weSB0aGUgbW9kdWxlIG9udG8gdGhlIHRhcmdldCBzeXN0ZW0gYW5kIDMpIGluc2VydCB0aGUKKyAgICAgICAgbW9kdWxlIGludG8gdGhlIHRhcmdldCBrZXJuZWwsIHdoaWNoIGFybXMgaXQsIGFuZCA0KSBjb2xsZWN0CisgICAgICAgIHRoZSBkYXRhIGdlbmVyYXRlZCBieSB0aGUgcHJvYmUgYW5kIGRpc3BsYXkgaXQgdG8gdGhlIHVzZXIuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3N5c3RlbXRhcC1zZXR1cCc+CisgICAgICAgIDx0aXRsZT5TZXR1cDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaG9zZSBhcmUgYSBsb3Qgb2Ygc3RlcHMgYW5kIGEgbG90IG9mIGRldGFpbHMsIGJ1dAorICAgICAgICAgICAgZm9ydHVuYXRlbHkgWW9jdG8gaW5jbHVkZXMgYSBzY3JpcHQgY2FsbGVkICdjcm9zc3RhcCcKKyAgICAgICAgICAgIHRoYXQgd2lsbCB0YWtlIGNhcmUgb2YgdGhvc2UgZGV0YWlscywgYWxsb3dpbmcgeW91IHRvCisgICAgICAgICAgICBzaW1wbHkgZXhlY3V0ZSBhIHN5c3RlbXRhcCBzY3JpcHQgb24gdGhlIHJlbW90ZSB0YXJnZXQsCisgICAgICAgICAgICB3aXRoIGFyZ3VtZW50cyBpZiBuZWNlc3NhcnkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIG9yZGVyIHRvIGRvIHRoaXMgZnJvbSBhIHJlbW90ZSBob3N0LCBob3dldmVyLCB5b3UKKyAgICAgICAgICAgIG5lZWQgdG8gaGF2ZSBhY2Nlc3MgdG8gdGhlIGJ1aWxkIGZvciB0aGUgaW1hZ2UgeW91CisgICAgICAgICAgICBib290ZWQuIFRoZSAnY3Jvc3N0YXAnIHNjcmlwdCBwcm92aWRlcyBkZXRhaWxzIG9uIGhvdworICAgICAgICAgICAgdG8gZG8gdGhpcyBpZiB5b3UgcnVuIHRoZSBzY3JpcHQgb24gdGhlIGhvc3Qgd2l0aG91dCBoYXZpbmcKKyAgICAgICAgICAgIGRvbmUgYSBidWlsZDoKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFN5c3RlbVRhcCwgd2hpY2ggdXNlcyAnY3Jvc3N0YXAnLCBhc3N1bWVzIHlvdSBjYW4gZXN0YWJsaXNoIGFuCisgICAgICAgICAgICAgICAgc3NoIGNvbm5lY3Rpb24gdG8gdGhlIHJlbW90ZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgUGxlYXNlIHJlZmVyIHRvIHRoZSBjcm9zc3RhcCB3aWtpIHBhZ2UgZm9yIGRldGFpbHMgb24gdmVyaWZ5aW5nCisgICAgICAgICAgICAgICAgc3NoIGNvbm5lY3Rpb25zIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9UcmFjaW5nX2FuZF9Qcm9maWxpbmcjc3lzdGVtdGFwJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBBbHNvLCB0aGUgYWJpbGl0eSB0byBzc2ggaW50byB0aGUgdGFyZ2V0IHN5c3RlbSBpcyBub3QgZW5hYmxlZAorICAgICAgICAgICAgICAgIGJ5IGRlZmF1bHQgaW4gKi1taW5pbWFsIGltYWdlcy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjcm9zc3RhcCByb290QDE5Mi4xNjguMS44OCB0cmFjZV9vcGVuLnN0cAorCisgICAgIEVycm9yOiBObyB0YXJnZXQga2VybmVsIGJ1aWxkIGZvdW5kLgorICAgICBEaWQgeW91IGZvcmdldCB0byBjcmVhdGUgYSBsb2NhbCBidWlsZCBvZiB5b3VyIGltYWdlPworCisgICAgICdjcm9zc3RhcCcgcmVxdWlyZXMgYSBsb2NhbCBzZGsgYnVpbGQgb2YgdGhlIHRhcmdldCBzeXN0ZW0KKyAgICAgKG9yIGEgYnVpbGQgdGhhdCBpbmNsdWRlcyAndG9vbHMtcHJvZmlsZScpIGluIG9yZGVyIHRvIGJ1aWxkCisgICAgIGtlcm5lbCBtb2R1bGVzIHRoYXQgY2FuIHByb2JlIHRoZSB0YXJnZXQgc3lzdGVtLgorCisgICAgIFByYWN0aWNhbGx5IHNwZWFraW5nLCB0aGF0IG1lYW5zIHlvdSBuZWVkIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAtIElmIHlvdSdyZSBydW5uaW5nIGEgcHJlLWJ1aWx0IGltYWdlLCBkb3dubG9hZCB0aGUgcmVsZWFzZQorICAgICAgICBhbmQvb3IgQlNQIHRhcmJhbGxzIHVzZWQgdG8gYnVpbGQgdGhlIGltYWdlLgorICAgICAgLSBJZiB5b3UncmUgd29ya2luZyBmcm9tIGdpdCBzb3VyY2VzLCBqdXN0IGNsb25lIHRoZSBtZXRhZGF0YQorICAgICAgICBhbmQgQlNQIGxheWVycyBuZWVkZWQgdG8gYnVpbGQgdGhlIGltYWdlIHlvdSdsbCBiZSBib290aW5nLgorICAgICAgLSBNYWtlIHN1cmUgeW91J3JlIHByb3Blcmx5IHNldCB1cCB0byBidWlsZCBhIG5ldyBpbWFnZSAoc2VlCisgICAgICAgIHRoZSBCU1AgUkVBRE1FIGFuZC9vciB0aGUgd2lkZWx5IGF2YWlsYWJsZSBiYXNpYyBkb2N1bWVudGF0aW9uCisgICAgICAgIHRoYXQgZGlzY3Vzc2VzIGhvdyB0byBidWlsZCBpbWFnZXMpLgorICAgICAgLSBCdWlsZCBhbiAtc2RrIHZlcnNpb24gb2YgdGhlIGltYWdlIGUuZy46CisgICAgICAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0by1zZGsKKyAgICAgIE9SCisgICAgICAtIEJ1aWxkIGEgbm9uLXNkayBpbWFnZSBidXQgaW5jbHVkZSB0aGUgcHJvZmlsaW5nIHRvb2xzOgorICAgICAgICAgIFsgZWRpdCBsb2NhbC5jb25mIGFuZCBhZGQgJ3Rvb2xzLXByb2ZpbGUnIHRvIHRoZSBlbmQgb2YKKyAgICAgICAgICAgIHRoZSBFWFRSQV9JTUFHRV9GRUFUVVJFUyB2YXJpYWJsZSBdCisgICAgICAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0bworCisgICAgIE9uY2UgeW91J3ZlIGJ1aWxkIHRoZSBpbWFnZSBvbiB0aGUgaG9zdCBzeXN0ZW0sIHlvdSdyZSByZWFkeSB0bworICAgICBib290IGl0IChvciB0aGUgZXF1aXZhbGVudCBwcmUtYnVpbHQgaW1hZ2UpIGFuZCB1c2UgJ2Nyb3NzdGFwJworICAgICB0byBwcm9iZSBpdCAoeW91IG5lZWQgdG8gc291cmNlIHRoZSBlbnZpcm9ubWVudCBhcyB1c3VhbCBmaXJzdCk6CisKKyAgICAgICAgJCBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnYKKyAgICAgICAgJCBjZCB+L215L3N5c3RlbXRhcC9zY3JpcHRzCisgICAgICAgICQgY3Jvc3N0YXAgcm9vdEAxOTIuMTY4LjEueHh4IG15c2NyaXB0LnN0cAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgU28gZXNzZW50aWFsbHkgd2hhdCB5b3UgbmVlZCB0byBkbyBpcyBidWlsZCBhbiBTREsgaW1hZ2Ugb3IKKyAgICAgICAgICAgIGltYWdlIHdpdGggJ3Rvb2xzLXByb2ZpbGUnIGFzIGRldGFpbGVkIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Byb2ZpbGUtbWFudWFsLWdlbmVyYWwtc2V0dXAnPkdlbmVyYWwgU2V0dXA8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGlzIG1hbnVhbCwgYW5kIGJvb3QgdGhlIHJlc3VsdGluZyB0YXJnZXQgaW1hZ2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIElmIHlvdSBoYXZlIGEgYnVpbGQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgbXVsdGlwbGUgbWFjaGluZXMsCisgICAgICAgICAgICB5b3UgbmVlZCB0byBoYXZlIHRoZSBNQUNISU5FIHlvdSdyZSBjb25uZWN0aW5nIHRvIHNlbGVjdGVkCisgICAgICAgICAgICBpbiBsb2NhbC5jb25mLCBhbmQgdGhlIGtlcm5lbCBpbiB0aGF0IG1hY2hpbmUncyBidWlsZAorICAgICAgICAgICAgZGlyZWN0b3J5IG11c3QgbWF0Y2ggdGhlIGtlcm5lbCBvbiB0aGUgYm9vdGVkIHN5c3RlbSBleGFjdGx5LAorICAgICAgICAgICAgb3IgeW91J2xsIGdldCB0aGUgYWJvdmUgJ2Nyb3NzdGFwJyBtZXNzYWdlIHdoZW4geW91IHRyeSB0bworICAgICAgICAgICAgaW52b2tlIGEgc2NyaXB0LgorICAgICAgICA8L25vdGU+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3J1bm5pbmctYS1zY3JpcHQtb24tYS10YXJnZXQnPgorICAgICAgICA8dGl0bGU+UnVubmluZyBhIFNjcmlwdCBvbiBhIFRhcmdldDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIHlvdSd2ZSBkb25lIHRoYXQsIHlvdSBzaG91bGQgYmUgYWJsZSB0byBydW4gYSBzeXN0ZW10YXAKKyAgICAgICAgICAgIHNjcmlwdCBvbiB0aGUgdGFyZ2V0OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIC9wYXRoL3RvL3lvY3RvCisgICAgICQgc291cmNlIG9lLWluaXQtYnVpbGQtZW52CisKKyAgICAgIyMjIFNoZWxsIGVudmlyb25tZW50IHNldCB1cCBmb3IgYnVpbGRzLiAjIyMKKworICAgICBZb3UgY2FuIG5vdyBydW4gJ2JpdGJha2UgPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+JworCisgICAgIENvbW1vbiB0YXJnZXRzIGFyZToKKyAgICAgICAgIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICAgY29yZS1pbWFnZS1zYXRvCisgICAgICAgICBtZXRhLXRvb2xjaGFpbgorICAgICAgICAgYWR0LWluc3RhbGxlcgorICAgICAgICAgbWV0YS1pZGUtc3VwcG9ydAorCisgICAgIFlvdSBjYW4gYWxzbyBydW4gZ2VuZXJhdGVkIHFlbXUgaW1hZ2VzIHdpdGggYSBjb21tYW5kIGxpa2UgJ3J1bnFlbXUgcWVtdXg4NicKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIE9uY2UgeW91J3ZlIGRvbmUgdGhhdCwgeW91IGNhbiBjZCB0byB3aGF0ZXZlciBkaXJlY3RvcnkKKyAgICAgICAgICAgIGNvbnRhaW5zIHlvdXIgc2NyaXB0cyBhbmQgdXNlICdjcm9zc3RhcCcgdG8gcnVuIHRoZSBzY3JpcHQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgL3BhdGgvdG8vbXkvc3lzdGVtYXAvc2NyaXB0CisgICAgICQgY3Jvc3N0YXAgcm9vdEAxOTIuMTY4LjcuMiB0cmFjZV9vcGVuLnN0cAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSWYgeW91IGdldCBhbiBlcnJvciBjb25uZWN0aW5nIHRvIHRoZSB0YXJnZXQgZS5nLjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjcm9zc3RhcCByb290QDE5Mi4xNjguNy4yIHRyYWNlX29wZW4uc3RwCisgICAgIGVycm9yIGVzdGFibGlzaGluZyBzc2ggY29ubmVjdGlvbiBvbiByZW1vdGUgJ3Jvb3RAMTkyLjE2OC43LjInCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUcnkgc3NoJ2luZyB0byB0aGUgdGFyZ2V0IGFuZCBzZWUgd2hhdCBoYXBwZW5zOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNzaCByb290QDE5Mi4xNjguNy4yCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBBIGxvdCBvZiB0aGUgdGltZSwgY29ubmVjdGlvbiBwcm9ibGVtcyBhcmUgZHVlIHNwZWNpZnlpbmcgYQorICAgICAgICAgICAgd3JvbmcgSVAgYWRkcmVzcyBvciBoYXZpbmcgYSAnaG9zdCBrZXkgdmVyaWZpY2F0aW9uIGVycm9yJy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgZXZlcnl0aGluZyB3b3JrZWQgYXMgcGxhbm5lZCwgeW91IHNob3VsZCBzZWUgc29tZXRoaW5nCisgICAgICAgICAgICBsaWtlIHRoaXMgKGVudGVyIHRoZSBwYXNzd29yZCB3aGVuIHByb21wdGVkLCBvciBwcmVzcyBlbnRlcgorICAgICAgICAgICAgaWYgaXQncyBzZXQgdXAgdG8gdXNlIG5vIHBhc3N3b3JkKToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjcm9zc3RhcCByb290QDE5Mi4xNjguNy4yIHRyYWNlX29wZW4uc3RwCisgICAgIHJvb3RAMTkyLjE2OC43LjIncyBwYXNzd29yZDoKKyAgICAgbWF0Y2hib3gtdGVybWluKDEwMzYpIG9wZW4gKCIvdG1wL3Z0ZTNGUzJMVyIsIE9fUkRXUnxPX0NSRUFUfE9fRVhDTHxPX0xBUkdFRklMRSwgMDYwMCkKKyAgICAgbWF0Y2hib3gtdGVybWluKDEwMzYpIG9wZW4gKCIvdG1wL3Z0ZUpNQzdMVyIsIE9fUkRXUnxPX0NSRUFUfE9fRVhDTHxPX0xBUkdFRklMRSwgMDYwMCkKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzeXN0ZW10YXAtZG9jdW1lbnRhdGlvbic+CisgICAgICAgIDx0aXRsZT5Eb2N1bWVudGF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBTeXN0ZW1UYXAgbGFuZ3VhZ2UgcmVmZXJlbmNlIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3NvdXJjZXdhcmUub3JnL3N5c3RlbXRhcC9sYW5ncmVmLyc+U3lzdGVtVGFwIExhbmd1YWdlIFJlZmVyZW5jZTwvdWxpbms+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIExpbmtzIHRvIG90aGVyIFN5c3RlbVRhcCBkb2N1bWVudHMsIHR1dG9yaWFscywgYW5kIGV4YW1wbGVzIGNhbiBiZQorICAgICAgICAgICAgZm91bmQgaGVyZToKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9zb3VyY2V3YXJlLm9yZy9zeXN0ZW10YXAvZG9jdW1lbnRhdGlvbi5odG1sJz5TeXN0ZW1UYXAgZG9jdW1lbnRhdGlvbiBwYWdlPC91bGluaz4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3Byb2ZpbGUtbWFudWFsLW9wcm9maWxlJz4KKyAgICA8dGl0bGU+b3Byb2ZpbGU8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIG9wcm9maWxlIGl0c2VsZiBpcyBhIGNvbW1hbmQtbGluZSBhcHBsaWNhdGlvbiB0aGF0IHJ1bnMgb24gdGhlCisgICAgICAgIHRhcmdldCBzeXN0ZW0uCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J29wcm9maWxlLXNldHVwJz4KKyAgICAgICAgPHRpdGxlPlNldHVwPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciB0aGlzIHNlY3Rpb24sIHdlJ2xsIGFzc3VtZSB5b3UndmUgYWxyZWFkeSBwZXJmb3JtZWQgdGhlCisgICAgICAgICAgICBiYXNpYyBzZXR1cCBvdXRsaW5lZCBpbiB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwcm9maWxlLW1hbnVhbC1nZW5lcmFsLXNldHVwJz5HZW5lcmFsIFNldHVwPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciB0aGUgc2VjdGlvbiB0aGF0IGRlYWxzIHdpdGggcnVubmluZyBvcHJvZmlsZSBmcm9tIHRoZSBjb21tYW5kLWxpbmUsCisgICAgICAgICAgICB3ZSBhc3N1bWUgeW91J3ZlIHNzaCdlZCB0byB0aGUgaG9zdCBhbmQgd2lsbCBiZSBydW5uaW5nCisgICAgICAgICAgICBvcHJvZmlsZSBvbiB0aGUgdGFyZ2V0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBvcHJvZmlsZXVpIChvcHJvZmlsZS12aWV3ZXIpIGlzIGEgR1VJLWJhc2VkIHByb2dyYW0gdGhhdCBydW5zCisgICAgICAgICAgICBvbiB0aGUgaG9zdCBhbmQgaW50ZXJhY3RzIHJlbW90ZWx5IHdpdGggdGhlIHRhcmdldC4KKyAgICAgICAgICAgIFNlZSB0aGUgb3Byb2ZpbGV1aSBzZWN0aW9uIGZvciB0aGUgZXhhY3Qgc3RlcHMgbmVlZGVkIHRvCisgICAgICAgICAgICBpbnN0YWxsIG9wcm9maWxldWkgb24gdGhlIGhvc3QuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nb3Byb2ZpbGUtYmFzaWMtdXNhZ2UnPgorICAgICAgICA8dGl0bGU+QmFzaWMgVXNhZ2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT3Byb2ZpbGUgYXMgY29uZmlndXJlZCBpbiBZb2N0byBpcyBhIHN5c3RlbS13aWRlIHByb2ZpbGVyCisgICAgICAgICAgICAoaS5lLiB0aGUgdmVyc2lvbiBpbiBZb2N0byBkb2Vzbid0IHlldCBtYWtlIHVzZSBvZiB0aGUKKyAgICAgICAgICAgIHBlcmZfZXZlbnRzIGludGVyZmFjZSB3aGljaCB3b3VsZCBhbGxvdyBpdCB0byBwcm9maWxlCisgICAgICAgICAgICBzcGVjaWZpYyBwcm9jZXNzZXMgYW5kIHdvcmtsb2FkcykuIEl0IHJlbGllcyBvbiBoYXJkd2FyZQorICAgICAgICAgICAgY291bnRlciBzdXBwb3J0IGluIHRoZSBoYXJkd2FyZSAoYnV0IGNhbiBmYWxsIGJhY2sgdG8gYQorICAgICAgICAgICAgdGltZXItYmFzZWQgbW9kZSksIHdoaWNoIG1lYW5zIHRoYXQgaXQgZG9lc24ndCB0YWtlCisgICAgICAgICAgICBhZHZhbnRhZ2Ugb2YgdHJhY2Vwb2ludHMgb3Igb3RoZXIgZXZlbnQgc291cmNlcyBmb3IgZXhhbXBsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgY29uc2lzdHMgb2YgYSBrZXJuZWwgbW9kdWxlIHRoYXQgY29sbGVjdHMgc2FtcGxlcyBhbmQgYQorICAgICAgICAgICAgdXNlcnNwYWNlIGRhZW1vbiB0aGF0IHdyaXRlcyB0aGUgc2FtcGxlIGRhdGEgdG8gZGlzay4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlICdvcGNvbnRyb2wnIHNoZWxsIHNjcmlwdCBpcyB1c2VkIGZvciB0cmFuc3BhcmVudGx5CisgICAgICAgICAgICBtYW5hZ2luZyB0aGVzZSBjb21wb25lbnRzIGFuZCBzdGFydGluZyBhbmQgc3RvcHBpbmcKKyAgICAgICAgICAgIHByb2ZpbGVzLCBhbmQgdGhlICdvcHJlcG9ydCcgY29tbWFuZCBpcyB1c2VkIHRvCisgICAgICAgICAgICBkaXNwbGF5IHRoZSByZXN1bHRzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgb3Byb2ZpbGUgZGFlbW9uIHNob3VsZCBhbHJlYWR5IGJlIHJ1bm5pbmcsIGJ1dCBiZWZvcmUKKyAgICAgICAgICAgIHlvdSBzdGFydCBwcm9maWxpbmcsIHlvdSBtYXkgbmVlZCB0byBjaGFuZ2Ugc29tZSBzZXR0aW5ncworICAgICAgICAgICAgYW5kIHNvbWUgb2YgdGhlc2Ugc2V0dGluZ3MgbWF5IHJlcXVpcmUgdGhlIGRhZW1vbiB0byBub3QKKyAgICAgICAgICAgIGJlIHJ1bm5pbmcuIE9uZSBvZiB0aGVzZSBzZXR0aW5ncyBpcyB0aGUgcGF0aCB0byB0aGUKKyAgICAgICAgICAgIHZtbGludXggZmlsZSwgd2hpY2ggeW91J2xsIHdhbnQgdG8gc2V0IHVzaW5nIHRoZSAtLXZtbGludXgKKyAgICAgICAgICAgIG9wdGlvbiBpZiB5b3Ugd2FudCB0aGUga2VybmVsIHByb2ZpbGVkOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wY29udHJvbCAtLXZtbGludXg9L2Jvb3Qvdm1saW51eC1gdW5hbWUgLXJgCisgICAgIFRoZSBwcm9maWxpbmcgZGFlbW9uIGlzIGN1cnJlbnRseSBhY3RpdmUsIHNvIGNoYW5nZXMgdG8gdGhlIGNvbmZpZ3VyYXRpb24KKyAgICAgd2lsbCBiZSB1c2VkIHRoZSBuZXh0IHRpbWUgeW91IHJlc3RhcnQgb3Byb2ZpbGUgYWZ0ZXIgYSAtLXNodXRkb3duIG9yIC0tZGVpbml0LgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgWW91IGNhbiBjaGVjayBpZiB2bWxpbnV4IGZpbGU6IGlzIHNldCB1c2luZyBvcGNvbnRyb2wgLS1zdGF0dXM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3Bjb250cm9sIC0tc3RhdHVzCisgICAgIERhZW1vbiBwYXVzZWQ6IHBpZCAxMzM0CisgICAgIFNlcGFyYXRlIG9wdGlvbnM6IGxpYnJhcnkKKyAgICAgdm1saW51eCBmaWxlOiBub25lCisgICAgIEltYWdlIGZpbHRlcjogbm9uZQorICAgICBDYWxsLWdyYXBoIGRlcHRoOiA2CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJZiBpdCdzIG5vdCwgeW91IG5lZWQgdG8gc2h1dGRvd24gdGhlIGRhZW1vbiwgYWRkIHRoZSBzZXR0aW5nCisgICAgICAgICAgICBhbmQgcmVzdGFydCB0aGUgZGFlbW9uOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wY29udHJvbCAtLXNodXRkb3duCisgICAgIEtpbGxpbmcgZGFlbW9uLgorCisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3Bjb250cm9sIC0tdm1saW51eD0vYm9vdC92bWxpbnV4LWB1bmFtZSAtcmAKKyAgICAgcm9vdEBjcm93bmJheTp+IyBvcGNvbnRyb2wgLS1zdGFydC1kYWVtb24KKyAgICAgVXNpbmcgZGVmYXVsdCBldmVudDogQ1BVX0NMS19VTkhBTFRFRDoxMDAwMDA6MDoxOjEKKyAgICAgVXNpbmcgMi42KyBPUHJvZmlsZSBrZXJuZWwgaW50ZXJmYWNlLgorICAgICBSZWFkaW5nIG1vZHVsZSBpbmZvLgorICAgICBVc2luZyBsb2cgZmlsZSAvdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzL29wcm9maWxlZC5sb2cKKyAgICAgRGFlbW9uIHN0YXJ0ZWQuCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJZiB3ZSBjaGVjayB0aGUgc3RhdHVzIGFnYWluIHdlIG5vdyBzZWUgb3VyIHVwZGF0ZWQgc2V0dGluZ3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3Bjb250cm9sIC0tc3RhdHVzCisgICAgIERhZW1vbiBwYXVzZWQ6IHBpZCAxNjQ5CisgICAgIFNlcGFyYXRlIG9wdGlvbnM6IGxpYnJhcnkKKyAgICAgdm1saW51eCBmaWxlOiAvYm9vdC92bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZAorICAgICBJbWFnZSBmaWx0ZXI6IG5vbmUKKyAgICAgQ2FsbC1ncmFwaCBkZXB0aDogNgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgV2UncmUgbm93IGluIGEgcG9zaXRpb24gdG8gcnVuIGEgcHJvZmlsZS4gRm9yIHRoYXQgd2UgdXNlCisgICAgICAgICAgICAnb3Bjb250cm9sIC0tc3RhcnQnOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wY29udHJvbCAtLXN0YXJ0CisgICAgIFByb2ZpbGVyIHJ1bm5pbmcuCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJbiBhbm90aGVyIHdpbmRvdywgcnVuIG91ciB3Z2V0IHdvcmtsb2FkOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHJtIGxpbnV4LTIuNi4xOS4yLnRhci5iejI7IHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz47IHN5bmMKKyAgICAgQ29ubmVjdGluZyB0byBkb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZyAoMTQwLjIxMS4xNjkuNTk6ODApCisgICAgIGxpbnV4LTIuNi4xOS4yLnRhci5iIDEwMCUgfCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip8IDQxNzI3ayAgMDowMDowMCBFVEEKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRvIHN0b3AgdGhlIHByb2ZpbGUgd2UgdXNlICdvcGNvbnRyb2wgLS1zaHV0ZG93bicsIHdoaWNoIG5vdAorICAgICAgICAgICAgb25seSBzdG9wcyB0aGUgcHJvZmlsZSBidXQgc2h1dHMgZG93biB0aGUgZGFlbW9uIGFzIHdlbGw6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3Bjb250cm9sIC0tc2h1dGRvd24KKyAgICAgU3RvcHBpbmcgcHJvZmlsaW5nLgorICAgICBLaWxsaW5nIGRhZW1vbi4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIE9wcm9maWxlIHdyaXRlcyBzYW1wbGUgZGF0YSB0byAvdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzLAorICAgICAgICAgICAgd2hpY2ggeW91IGNhbiBsb29rIGF0IGlmIHlvdSdyZSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhlCisgICAgICAgICAgICBzYW1wbGVzIGFyZSBzdHJ1Y3R1cmVkLiBUaGlzIGlzIGFsc28gaW50ZXJlc3RpbmcgYmVjYXVzZQorICAgICAgICAgICAgaXQncyByZWxhdGVkIHRvIGhvdyB5b3UgZGl2ZSBkb3duIHRvIGdldCBmdXJ0aGVyIGRldGFpbHMKKyAgICAgICAgICAgIGFib3V0IHNwZWNpZmljIGV4ZWN1dGFibGVzIGluIE9Qcm9maWxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBzZWUgdGhlIGRlZmF1bHQgZGlzcGxheSBvdXRwdXQgZm9yIGEgcHJvZmlsZSwgc2ltcGx5IHR5cGUKKyAgICAgICAgICAgICdvcHJlcG9ydCcsIHdoaWNoIHdpbGwgc2hvdyB0aGUgcmVzdWx0cyB1c2luZyB0aGUgZGF0YSBpbgorICAgICAgICAgICAgL3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlczoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBvcHJlcG9ydAorCisgICAgIFdBUk5JTkchIFRoZSBPUHJvZmlsZSBrZXJuZWwgZHJpdmVyIHJlcG9ydHMgc2FtcGxlIGJ1ZmZlciBvdmVyZmxvd3MuCisgICAgIFN1Y2ggb3ZlcmZsb3dzIGNhbiByZXN1bHQgaW4gaW5jb3JyZWN0IHNhbXBsZSBhdHRyaWJ1dGlvbiwgaW52YWxpZCBzYW1wbGUKKyAgICAgZmlsZXMgYW5kIG90aGVyIHN5bXB0b21zLiAgU2VlIHRoZSBvcHJvZmlsZWQubG9nIGZvciBkZXRhaWxzLgorICAgICBZb3Ugc2hvdWxkIGFkanVzdCB5b3VyIHNhbXBsaW5nIGZyZXF1ZW5jeSB0byBlbGltaW5hdGUgKG9yIGF0IGxlYXN0IG1pbmltaXplKQorICAgICB0aGVzZSBvdmVyZmxvd3MuCisgICAgIENQVTogSW50ZWwgQXJjaGl0ZWN0dXJhbCBQZXJmbW9uLCBzcGVlZCAxLjNlKzA2IE1IeiAoZXN0aW1hdGVkKQorICAgICBDb3VudGVkIENQVV9DTEtfVU5IQUxURUQgZXZlbnRzIChDbG9jayBjeWNsZXMgd2hlbiBub3QgaGFsdGVkKSB3aXRoIGEgdW5pdCBtYXNrIG9mIDB4MDAgKE5vIHVuaXQgbWFzaykgY291bnQgMTAwMDAwCisgICAgIENQVV9DTEtfVU5IQUxULi4ufAorICAgICAgc2FtcGxlc3wgICAgICAlfAorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICA0NjQzNjUgNzkuODE1NiB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZAorICAgICAgICA2NTEwOCAxMS4xOTA4IG9wcm9maWxlZAorCSAgICAgQ1BVX0NMS19VTkhBTFQuLi58CisJICAgICAgIHNhbXBsZXN8ICAgICAgJXwKKyAJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKyAJICAgICAgICAgNjQ0MTYgOTguOTM3MiBvcHJvZmlsZWQKKyAJICAgICAgICAgICA2OTIgIDEuMDYyOCBsaWJjLTIuMTYuc28KKyAgICAgICAgMzY5NTkgIDYuMzUyNiBuby12bWxpbnV4CisgICAgICAgICA0Mzc4ICAwLjc1MjUgYnVzeWJveAorCSAgICAgQ1BVX0NMS19VTkhBTFQuLi58CisJICAgICAgIHNhbXBsZXN8ICAgICAgJXwKKwkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLQorCSAgICAgICAgICAyODQ0IDY0Ljk2MTIgbGliYy0yLjE2LnNvCisJICAgICAgICAgIDEzMzcgMzAuNTM5MSBidXN5Ym94CisJICAgICAgICAgICAxOTMgIDQuNDA4NCBsZC0yLjE2LnNvCisJICAgICAgICAgICAgIDIgIDAuMDQ1NyBsaWJuc3NfY29tcGF0LTIuMTYuc28KKwkgICAgICAgICAgICAgMSAgMC4wMjI4IGxpYm5zbC0yLjE2LnNvCisJICAgICAgICAgICAgIDEgIDAuMDIyOCBsaWJuc3NfZmlsZXMtMi4xNi5zbworICAgICAgICAgNDM0NCAgMC43NDY3IGJhc2gKKwkgICAgIENQVV9DTEtfVU5IQUxULi4ufAorCSAgICAgICBzYW1wbGVzfCAgICAgICV8CisJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgICAgICAgMjY1NyA2MS4xNjQ4IGJhc2gKKwkgICAgICAgICAgMTY2NSAzOC4zMjg3IGxpYmMtMi4xNi5zbworCSAgICAgICAgICAgIDE4ICAwLjQxNDQgbGQtMi4xNi5zbworCSAgICAgICAgICAgICAzICAwLjA2OTEgbGlidGluZm8uc28uNS45CisJICAgICAgICAgICAgIDEgIDAuMDIzMCBsaWJkbC0yLjE2LnNvCisgICAgICAgICAzMTE4ICAwLjUzNTkgbmZfY29ubnRyYWNrCisgICAgICAgICAgNjg2ICAwLjExNzkgbWF0Y2hib3gtdGVybWluYWwKKwkgICAgIENQVV9DTEtfVU5IQUxULi4ufAorCSAgICAgICBzYW1wbGVzfCAgICAgICV8CisJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgICAgICAgIDIxNCAzMS4xOTUzIGxpYmdsaWItMi4wLnNvLjAuMzIwMC40CisJICAgICAgICAgICAxMTQgMTYuNjE4MSBsaWJjLTIuMTYuc28KKwkgICAgICAgICAgICA3OSAxMS41MTYwIGxpYmNhaXJvLnNvLjIuMTEyMDAuMgorCSAgICAgICAgICAgIDc4IDExLjM3MDMgbGliZ2RrLXgxMS0yLjAuc28uMC4yNDAwLjgKKwkgICAgICAgICAgICA1MSAgNy40MzQ0IGxpYnB0aHJlYWQtMi4xNi5zbworCSAgICAgICAgICAgIDQ1ICA2LjU1OTggbGliZ29iamVjdC0yLjAuc28uMC4zMjAwLjQKKwkgICAgICAgICAgICAyOSAgNC4yMjc0IGxpYnZ0ZS5zby45LjI4MDAuMgorCSAgICAgICAgICAgIDI1ICAzLjY0NDMgbGliWDExLnNvLjYuMy4wCisJICAgICAgICAgICAgMTkgIDIuNzY5NyBsaWJ4Y2Iuc28uMS4xLjAKKwkgICAgICAgICAgICAxNyAgMi40NzgxIGxpYmd0ay14MTEtMi4wLnNvLjAuMjQwMC44CisJICAgICAgICAgICAgMTIgIDEuNzQ5MyBsaWJydC0yLjE2LnNvCisJICAgICAgICAgICAgIDMgIDAuNDM3MyBsaWJYcmVuZGVyLnNvLjEuMy4wCisgICAgICAgICAgNjcxICAwLjExNTMgZW1nZAorICAgICAgICAgIDQxMSAgMC4wNzA2IG5mX2Nvbm50cmFja19pcHY0CisgICAgICAgICAgMzkxICAwLjA2NzIgaXB0YWJsZV9uYXQKKyAgICAgICAgICAzNzggIDAuMDY1MCBuZl9uYXQKKyAgICAgICAgICAyNjMgIDAuMDQ1MiBYb3JnCisJICAgICBDUFVfQ0xLX1VOSEFMVC4uLnwKKwkgICAgICAgc2FtcGxlc3wgICAgICAlfAorCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tCisJICAgICAgICAgICAxMDYgNDAuMzA0MiBYb3JnCisJICAgICAgICAgICAgNTMgMjAuMTUyMSBsaWJjLTIuMTYuc28KKwkgICAgICAgICAgICAzMSAxMS43ODcxIGxpYnBpeG1hbi0xLnNvLjAuMjcuMgorCSAgICAgICAgICAgIDI2ICA5Ljg4NTkgZW1nZF9kcnYuc28KKwkgICAgICAgICAgICAxNiAgNi4wODM3IGxpYmVtZ2RzcnZfdW0uc28uMS41LjE1LjMyMjYKKwkgICAgICAgICAgICAxMSAgNC4xODI1IGxpYkVNR0QyZC5zby4xLjUuMTUuMzIyNgorCSAgICAgICAgICAgICA5ICAzLjQyMjEgbGliZmIuc28KKwkgICAgICAgICAgICAgNyAgMi42NjE2IGxpYnB0aHJlYWQtMi4xNi5zbworCSAgICAgICAgICAgICAxICAwLjM4MDIgbGlidWRldi5zby4wLjkuMworCSAgICAgICAgICAgICAxICAwLjM4MDIgbGliZHJtLnNvLjIuNC4wCisJICAgICAgICAgICAgIDEgIDAuMzgwMiBsaWJleHRtb2Quc28KKwkgICAgICAgICAgICAgMSAgMC4zODAyIG1vdXNlX2Rydi5zbworICAgICAuCisgICAgIC4KKyAgICAgLgorICAgICAgICAgICA5ICAwLjAwMTUgY29ubm1hbmQKKwkgICAgIENQVV9DTEtfVU5IQUxULi4ufAorCSAgICAgICBzYW1wbGVzfCAgICAgICV8CisJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgICAgICAgICAgNCA0NC40NDQ0IGxpYmdsaWItMi4wLnNvLjAuMzIwMC40CisJICAgICAgICAgICAgIDIgMjIuMjIyMiBsaWJwdGhyZWFkLTIuMTYuc28KKwkgICAgICAgICAgICAgMSAxMS4xMTExIGNvbm5tYW5kCisJICAgICAgICAgICAgIDEgMTEuMTExMSBsaWJjLTIuMTYuc28KKwkgICAgICAgICAgICAgMSAxMS4xMTExIGxpYnJ0LTIuMTYuc28KKyAgICAgICAgICAgIDYgIDAuMDAxMCBvcHJvZmlsZS1zZXJ2ZXIKKyAgICAgCSBDUFVfQ0xLX1VOSEFMVC4uLnwKKwkgICAgICAgc2FtcGxlc3wgICAgICAlfAorCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tCisJICAgICAgICAgICAgIDMgNTAuMDAwMCBsaWJjLTIuMTYuc28KKwkgICAgICAgICAgICAgMSAxNi42NjY3IG9wcm9maWxlLXNlcnZlcgorCSAgICAgICAgICAgICAxIDE2LjY2NjcgbGlicHRocmVhZC0yLjE2LnNvCisJICAgICAgICAgICAgIDEgMTYuNjY2NyBsaWJnbGliLTIuMC5zby4wLjMyMDAuNAorICAgICAgICAgICA1IDguNmUtMDQgZ2NvbmZkLTIKKwkgICAgIENQVV9DTEtfVU5IQUxULi4ufAorCSAgICAgICBzYW1wbGVzfCAgICAgICV8CisJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgICAgICAgICAgMiA0MC4wMDAwIGxpYmRidXMtMS5zby4zLjcuMgorCSAgICAgICAgICAgICAyIDQwLjAwMDAgbGliZ2xpYi0yLjAuc28uMC4zMjAwLjQKKwkgICAgICAgICAgICAgMSAyMC4wMDAwIGxpYmMtMi4xNi5zbworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIG91dHB1dCBhYm92ZSBzaG93cyB0aGUgYnJlYWtkb3duIG9yIHNhbXBsZXMgYnkgYm90aAorICAgICAgICAgICAgbnVtYmVyIG9mIHNhbXBsZXMgYW5kIHBlcmNlbnRhZ2UgZm9yIGVhY2ggZXhlY3V0YWJsZS4KKyAgICAgICAgICAgIFdpdGhpbiBhbiBleGVjdXRhYmxlLCB0aGUgc2FtcGxlIGNvdW50cyBhcmUgYnJva2VuIGRvd24KKyAgICAgICAgICAgIGZ1cnRoZXIgaW50byBleGVjdXRhYmxlIGFuZCBzaGFyZWQgbGlicmFyaWVzIChEU09zKSB1c2VkCisgICAgICAgICAgICBieSB0aGUgZXhlY3V0YWJsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gZ2V0IGV2ZW4gbW9yZSBkZXRhaWxlZCBicmVha2Rvd25zIGJ5IGZ1bmN0aW9uLCB3ZSBuZWVkIHRvCisgICAgICAgICAgICBoYXZlIHRoZSBmdWxsIHBhdGhzIHRvIHRoZSBEU09zLCB3aGljaCB3ZSBjYW4gZ2V0IGJ5CisgICAgICAgICAgICB1c2luZyAtZiB3aXRoIG9wcmVwb3J0OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wcmVwb3J0IC1mCisKKyAgICAgQ1BVOiBJbnRlbCBBcmNoaXRlY3R1cmFsIFBlcmZtb24sIHNwZWVkIDEuM2UrMDYgTUh6IChlc3RpbWF0ZWQpCisgICAgIENvdW50ZWQgQ1BVX0NMS19VTkhBTFRFRCBldmVudHMgKENsb2NrIGN5Y2xlcyB3aGVuIG5vdCBoYWx0ZWQpIHdpdGggYSB1bml0IG1hc2sgb2YgMHgwMCAoTm8gdW5pdCBtYXNrKSBjb3VudCAxMDAwMDAKKyAgICAgQ1BVX0NMS19VTkhBTFQuLi58CisgICAgICBzYW1wbGVzfCAgICAgICV8CisKKyAgICAgICA0NjQzNjUgNzkuODE1NiAvYm9vdC92bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZAorICAgICAgIDY1MTA4IDExLjE5MDggL3Vzci9iaW4vb3Byb2ZpbGVkCisJICAgICBDUFVfQ0xLX1VOSEFMVC4uLnwKKwkgICAgICAgc2FtcGxlc3wgICAgICAlfAorCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tCisJICAgICAgICAgNjQ0MTYgOTguOTM3MiAvdXNyL2Jpbi9vcHJvZmlsZWQKKwkgICAgICAgICAgIDY5MiAgMS4wNjI4IC9saWIvbGliYy0yLjE2LnNvCisgICAgICAgIDM2OTU5ICA2LjM1MjYgL25vLXZtbGludXgKKyAgICAgICAgIDQzNzggIDAuNzUyNSAvYmluL2J1c3lib3gKKwkgICAgIENQVV9DTEtfVU5IQUxULi4ufAorCSAgICAgICBzYW1wbGVzfCAgICAgICV8CisJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgICAgICAgMjg0NCA2NC45NjEyIC9saWIvbGliYy0yLjE2LnNvCisJICAgICAgICAgIDEzMzcgMzAuNTM5MSAvYmluL2J1c3lib3gKKwkgICAgICAgICAgIDE5MyAgNC40MDg0IC9saWIvbGQtMi4xNi5zbworCSAgICAgICAgICAgICAyICAwLjA0NTcgL2xpYi9saWJuc3NfY29tcGF0LTIuMTYuc28KKwkgICAgICAgICAgICAgMSAgMC4wMjI4IC9saWIvbGlibnNsLTIuMTYuc28KKwkgICAgICAgICAgICAgMSAgMC4wMjI4IC9saWIvbGlibnNzX2ZpbGVzLTIuMTYuc28KKyAgICAgICAgIDQzNDQgIDAuNzQ2NyAvYmluL2Jhc2gKKwkgICAgIENQVV9DTEtfVU5IQUxULi4ufAorCSAgICAgICBzYW1wbGVzfCAgICAgICV8CisJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgICAgICAgMjY1NyA2MS4xNjQ4IC9iaW4vYmFzaAorCSAgICAgICAgICAxNjY1IDM4LjMyODcgL2xpYi9saWJjLTIuMTYuc28KKwkgICAgICAgICAgICAxOCAgMC40MTQ0IC9saWIvbGQtMi4xNi5zbworCSAgICAgICAgICAgICAzICAwLjA2OTEgL2xpYi9saWJ0aW5mby5zby41LjkKKwkgICAgICAgICAgICAgMSAgMC4wMjMwIC9saWIvbGliZGwtMi4xNi5zbworICAgICAuCisgICAgIC4KKyAgICAgLgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVXNpbmcgdGhlIHBhdGhzIHNob3duIGluIHRoZSBhYm92ZSBvdXRwdXQgYW5kIHRoZSAtbCBvcHRpb24gdG8KKyAgICAgICAgICAgIG9wcmVwb3J0LCB3ZSBjYW4gc2VlIGFsbCB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBoaXRzIGluIHRoZQorICAgICAgICAgICAgcHJvZmlsZSBhbmQgdGhlaXIgc2FtcGxlIGNvdW50cyBhbmQgcGVyY2VudGFnZXMuIEhlcmUncyBhCisgICAgICAgICAgICBwb3J0aW9uIG9mIHdoYXQgd2UgZ2V0IGZvciB0aGUga2VybmVsOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wcmVwb3J0IC1sIC9ib290L3ZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkCisKKyAgICAgQ1BVOiBJbnRlbCBBcmNoaXRlY3R1cmFsIFBlcmZtb24sIHNwZWVkIDEuM2UrMDYgTUh6IChlc3RpbWF0ZWQpCisgICAgIENvdW50ZWQgQ1BVX0NMS19VTkhBTFRFRCBldmVudHMgKENsb2NrIGN5Y2xlcyB3aGVuIG5vdCBoYWx0ZWQpIHdpdGggYSB1bml0IG1hc2sgb2YgMHgwMCAoTm8gdW5pdCBtYXNrKSBjb3VudCAxMDAwMDAKKyAgICAgc2FtcGxlcyAgJSAgICAgICAgc3ltYm9sIG5hbWUKKyAgICAgMjMzOTgxICAgNTAuMzg3MyAgaW50ZWxfaWRsZQorICAgICAxNTQzNyAgICAgMy4zMjQzICByYl9nZXRfcmVhZGVyX3BhZ2UKKyAgICAgMTQ1MDMgICAgIDMuMTIzMiAgcmluZ19idWZmZXJfY29uc3VtZQorICAgICAxNDA5MiAgICAgMy4wMzQ3ICBtdXRleF9zcGluX29uX293bmVyCisgICAgIDEzMDI0ICAgICAyLjgwNDcgIHJlYWRfaHBldAorICAgICA4MDM5ICAgICAgMS43MzEyICBzdWJfcHJlZW1wdF9jb3VudAorICAgICA3MDk2ICAgICAgMS41MjgxICBpb3JlYWQzMgorICAgICA2OTk3ICAgICAgMS41MDY4ICBhZGRfcHJlZW1wdF9jb3VudAorICAgICAzOTg1ICAgICAgMC44NTgyICByYl9hZHZhbmNlX3JlYWRlcgorICAgICAzNDg4ICAgICAgMC43NTExICBhZGRfZXZlbnRfZW50cnkKKyAgICAgMzMwMyAgICAgIDAuNzExMyAgZ2V0X3BhcmVudF9pcAorICAgICAzMTA0ICAgICAgMC42Njg0ICByYl9idWZmZXJfcGVlaworICAgICAyOTYwICAgICAgMC42Mzc0ICBvcF9jcHVfYnVmZmVyX3JlYWRfZW50cnkKKyAgICAgMjYxNCAgICAgIDAuNTYyOSAgc3luY19idWZmZXIKKyAgICAgMjU0NSAgICAgIDAuNTQ4MSAgZGVidWdfc21wX3Byb2Nlc3Nvcl9pZAorICAgICAyNDU2ICAgICAgMC41Mjg5ICBvaGNpX2lycQorICAgICAyMzk3ICAgICAgMC41MTYyICBtZW1zZXQKKyAgICAgMjM0OSAgICAgIDAuNTA1OSAgX19jb3B5X3RvX3VzZXJfbGwKKyAgICAgMjE4NSAgICAgIDAuNDcwNSAgcmluZ19idWZmZXJfZXZlbnRfbGVuZ3RoCisgICAgIDE5MTggICAgICAwLjQxMzAgIGluX2xvY2tfZnVuY3Rpb25zCisgICAgIDE4NTAgICAgICAwLjM5ODQgIF9fc2NoZWR1bGUKKyAgICAgMTc2NyAgICAgIDAuMzgwNSAgX19jb3B5X2Zyb21fdXNlcl9sbF9ub3plcm8KKyAgICAgMTU3NSAgICAgIDAuMzM5MiAgcmJfZXZlbnRfZGF0YV9sZW5ndGgKKyAgICAgMTI1NiAgICAgIDAuMjcwNSAgbWVtY3B5CisgICAgIDEyMzMgICAgICAwLjI2NTUgIHN5c3RlbV9jYWxsCisgICAgIDEyMTMgICAgICAwLjI2MTIgIG1lbnVfc2VsZWN0CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBOb3RpY2UgdGhhdCBhYm92ZSB3ZSBzZWUgYW4gZW50cnkgZm9yIHRoZSBfX2NvcHlfdG9fdXNlcl9sbCgpCisgICAgICAgICAgICBmdW5jdGlvbiB0aGF0IHdlJ3ZlIGxvb2tlZCBhdCB3aXRoIG90aGVyIHByb2ZpbGVycyBhcyB3ZWxsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlJ3Mgd2hhdCB3ZSBnZXQgd2hlbiB3ZSBkbyB0aGUgc2FtZSB0aGluZyBmb3IgdGhlCisgICAgICAgICAgICBidXN5Ym94IGV4ZWN1dGFibGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENQVTogSW50ZWwgQXJjaGl0ZWN0dXJhbCBQZXJmbW9uLCBzcGVlZCAxLjNlKzA2IE1IeiAoZXN0aW1hdGVkKQorICAgICBDb3VudGVkIENQVV9DTEtfVU5IQUxURUQgZXZlbnRzIChDbG9jayBjeWNsZXMgd2hlbiBub3QgaGFsdGVkKSB3aXRoIGEgdW5pdCBtYXNrIG9mIDB4MDAgKE5vIHVuaXQgbWFzaykgY291bnQgMTAwMDAwCisgICAgIHNhbXBsZXMgICUgICAgICAgIGltYWdlIG5hbWUgICAgICAgICAgICAgICBzeW1ib2wgbmFtZQorICAgICAzNDkgICAgICAgOC40MTk4ICBidXN5Ym94ICAgICAgICAgICAgICAgICAgcmV0cmlldmVfZmlsZV9kYXRhCisgICAgIDMwOCAgICAgICA3LjQzMDYgIGxpYmMtMi4xNi5zbyAgICAgICAgICAgICBfSU9fZmlsZV94c2dldG4KKyAgICAgMjgzICAgICAgIDYuODI3NSAgbGliYy0yLjE2LnNvICAgICAgICAgICAgIF9fcmVhZF9ub2NhbmNlbAorICAgICAyMzUgICAgICAgNS42Njk1ICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgc3lzY2FsbAorICAgICAyMzMgICAgICAgNS42MjEyICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgY2xlYXJlcnIKKyAgICAgMjE1ICAgICAgIDUuMTg3MCAgbGliYy0yLjE2LnNvICAgICAgICAgICAgIGZyZWFkCisgICAgIDE4MSAgICAgICA0LjM2NjcgIGxpYmMtMi4xNi5zbyAgICAgICAgICAgICBfX3dyaXRlX25vY2FuY2VsCisgICAgIDE1OCAgICAgICAzLjgxMTggIGxpYmMtMi4xNi5zbyAgICAgICAgICAgICBfX3VuZGVyZmxvdworICAgICAxNTEgICAgICAgMy42NDI5ICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgX2RsX2FkZHIKKyAgICAgMTUwICAgICAgIDMuNjE4OCAgYnVzeWJveCAgICAgICAgICAgICAgICAgIHByb2dyZXNzX21ldGVyCisgICAgIDE1MCAgICAgICAzLjYxODggIGxpYmMtMi4xNi5zbyAgICAgICAgICAgICBfX3BvbGxfbm9jYW5jZWwKKyAgICAgMTQ4ICAgICAgIDMuNTcwNiAgbGliYy0yLjE2LnNvICAgICAgICAgICAgIF9JT19maWxlX3VuZGVyZmxvd0BAR0xJQkNfMi4xCisgICAgIDEzNyAgICAgICAzLjMwNTIgIGJ1c3lib3ggICAgICAgICAgICAgICAgICBzYWZlX3BvbGwKKyAgICAgMTI1ICAgICAgIDMuMDE1NyAgYnVzeWJveCAgICAgICAgICAgICAgICAgIGJiX3Byb2dyZXNzX3VwZGF0ZQorICAgICAxMjIgICAgICAgMi45NDMzICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgX194ODYuZ2V0X3BjX3RodW5rLmJ4CisgICAgIDk1ICAgICAgICAyLjI5MTkgIGJ1c3lib3ggICAgICAgICAgICAgICAgICBmdWxsX3dyaXRlCisgICAgIDgxICAgICAgICAxLjk1NDIgIGJ1c3lib3ggICAgICAgICAgICAgICAgICBzYWZlX3dyaXRlCisgICAgIDc3ICAgICAgICAxLjg1NzcgIGJ1c3lib3ggICAgICAgICAgICAgICAgICB4d3JpdGUKKyAgICAgNzIgICAgICAgIDEuNzM3MCAgbGliYy0yLjE2LnNvICAgICAgICAgICAgIF9JT19maWxlX3JlYWQKKyAgICAgNzEgICAgICAgIDEuNzEyOSAgbGliYy0yLjE2LnNvICAgICAgICAgICAgIF9JT19zZ2V0bgorICAgICA2NyAgICAgICAgMS42MTY0ICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgcG9sbAorICAgICA1MiAgICAgICAgMS4yNTQ1ICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgX0lPX3N3aXRjaF90b19nZXRfbW9kZQorICAgICA0NSAgICAgICAgMS4wODU2ICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgcmVhZAorICAgICAzNCAgICAgICAgMC44MjAzICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgd3JpdGUKKyAgICAgMzIgICAgICAgIDAuNzcyMCAgYnVzeWJveCAgICAgICAgICAgICAgICAgIG1vbm90b25pY19zZWMKKyAgICAgMjUgICAgICAgIDAuNjAzMSAgbGliYy0yLjE2LnNvICAgICAgICAgICAgIHZmcHJpbnRmCisgICAgIDIyICAgICAgICAwLjUzMDggIGJ1c3lib3ggICAgICAgICAgICAgICAgICBnZXRfbW9ubworICAgICAxNCAgICAgICAgMC4zMzc4ICBsZC0yLjE2LnNvICAgICAgICAgICAgICAgc3RyY21wCisgICAgIDE0ICAgICAgICAwLjMzNzggIGxpYmMtMi4xNi5zbyAgICAgICAgICAgICBfX3g4Ni5nZXRfcGNfdGh1bmsuY3gKKyAgICAgLgorICAgICAuCisgICAgIC4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFNpbmNlIHdlIHJlY29yZGVkIHRoZSBwcm9maWxlIHdpdGggYSBjYWxsY2hhaW4gZGVwdGggb2YgNiwgd2UKKyAgICAgICAgICAgIHNob3VsZCBiZSBhYmxlIHRvIHNlZSBvdXIgX19jb3B5X3RvX3VzZXJfbGwoKSBjYWxsY2hhaW5zIGluCisgICAgICAgICAgICB0aGUgb3V0cHV0LCBhbmQgaW5kZWVkIHdlIGNhbiBpZiB3ZSBzZWFyY2ggYXJvdW5kIGEgYml0IGluCisgICAgICAgICAgICB0aGUgJ29wcmVwb3J0IC0tY2FsbGdyYXBoJyBvdXRwdXQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3ByZXBvcnQgLS1jYWxsZ3JhcGggL2Jvb3Qvdm1saW51eC0zLjQuMTEteW9jdG8tc3RhbmRhcmQKKworICAgICAgIDM5MiAgICAgICA2Ljk2MzkgIHZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkIHNvY2tfYWlvX3JlYWQKKyAgICAgICA3MzYgICAgICAxMy4wNzUxICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBfX2dlbmVyaWNfZmlsZV9haW9fd3JpdGUKKyAgICAgICAzMjU1ICAgICA1Ny44MjU1ICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBpbmV0X3JlY3Ztc2cKKyAgICAgNzg1ICAgICAgIDAuMTY5MCAgdm1saW51eC0zLjQuMTEteW9jdG8tc3RhbmRhcmQgdGNwX3JlY3Ztc2cKKyAgICAgICAxNzkwICAgICAzMS43OTQwICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBsb2NhbF9iaF9lbmFibGUKKyAgICAgICAxMjM4ICAgICAyMS45ODkzICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBfX2tmcmVlX3NrYgorICAgICAgIDk5MiAgICAgIDE3LjYxOTkgIHZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkIGxvY2tfc29ja19uZXN0ZWQKKyAgICAgICA3ODUgICAgICAxMy45NDMyICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCB0Y3BfcmVjdm1zZyBbc2VsZl0KKyAgICAgICA1MjUgICAgICAgOS4zMjUwICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCByZWxlYXNlX3NvY2sKKyAgICAgICAxMTIgICAgICAgMS45ODkzICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCB0Y3BfY2xlYW51cF9yYnVmCisgICAgICAgNzIgICAgICAgIDEuMjc4OSAgdm1saW51eC0zLjQuMTEteW9jdG8tc3RhbmRhcmQgc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMKKworICAgICAxNzAgICAgICAgMC4wMzY2ICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBza2JfY29weV9kYXRhZ3JhbV9pb3ZlYworICAgICAgIDE0OTEgICAgIDczLjMwMzggIHZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkIG1lbWNweV90b2lvdmVjCisgICAgICAgMzI3ICAgICAgMTYuMDc2NyAgdm1saW51eC0zLjQuMTEteW9jdG8tc3RhbmRhcmQgc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMKKyAgICAgICAxNzAgICAgICAgOC4zNTc5ICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyBbc2VsZl0KKyAgICAgICAyMCAgICAgICAgMC45ODMzICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBjb3B5X3RvX3VzZXIKKworICAgICAgIDI1ODggICAgIDk4LjI5MDkgIHZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkIGNvcHlfdG9fdXNlcgorICAgICAyMzQ5ICAgICAgMC41MDU5ICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBfX2NvcHlfdG9fdXNlcl9sbAorICAgICAgIDIzNDkgICAgIDg5LjIxMzggIHZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkIF9fY29weV90b191c2VyX2xsIFtzZWxmXQorICAgICAgIDE2NiAgICAgICA2LjMwNDYgIHZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkIGRvX3BhZ2VfZmF1bHQKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFJlbWVtYmVyIHRoYXQgYnkgZGVmYXVsdCBPUHJvZmlsZSBzZXNzaW9ucyBhcmUgY3VtdWxhdGl2ZQorICAgICAgICAgICAgaS5lLiBpZiB5b3Ugc3RhcnQgYW5kIHN0b3AgYSBwcm9maWxpbmcgc2Vzc2lvbiwgdGhlbiBzdGFydCBhCisgICAgICAgICAgICBuZXcgb25lLCB0aGUgbmV3IG9uZSB3aWxsIG5vdCBlcmFzZSB0aGUgcHJldmlvdXMgcnVuKHMpIGJ1dAorICAgICAgICAgICAgd2lsbCBidWlsZCBvbiBpdC4gSWYgeW91IHdhbnQgdG8gcmVzdGFydCBhIHByb2ZpbGUgZnJvbSBzY3JhdGNoLAorICAgICAgICAgICAgeW91IG5lZWQgdG8gcmVzZXQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3Bjb250cm9sIC0tcmVzZXQKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdvcHJvZmlsZXVpLWEtZ3VpLWZvci1vcHJvZmlsZSc+CisgICAgICAgIDx0aXRsZT5PUHJvZmlsZVVJIC0gQSBHVUkgZm9yIE9Qcm9maWxlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvY3RvIGFsc28gc3VwcG9ydHMgYSBncmFwaGljYWwgVUkgZm9yIGNvbnRyb2xsaW5nIGFuZCB2aWV3aW5nCisgICAgICAgICAgICBPUHJvZmlsZSB0cmFjZXMsIGNhbGxlZCBPUHJvZmlsZVVJLiBUbyB1c2UgaXQsIHlvdSBmaXJzdCBuZWVkCisgICAgICAgICAgICB0byBjbG9uZSB0aGUgb3Byb2ZpbGV1aSBnaXQgcmVwbywgdGhlbiBjb25maWd1cmUsIGJ1aWxkLCBhbmQKKyAgICAgICAgICAgIGluc3RhbGwgaXQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFt0cnpAZW1wYW5hZGEgdG1wXSQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL29wcm9maWxldWkKKyAgICAgW3RyekBlbXBhbmFkYSB0bXBdJCBjZCBvcHJvZmlsZXVpCisgICAgIFt0cnpAZW1wYW5hZGEgb3Byb2ZpbGV1aV0kIC4vYXV0b2dlbi5zaAorICAgICBbdHJ6QGVtcGFuYWRhIG9wcm9maWxldWldJCBzdWRvIG1ha2UgaW5zdGFsbAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgT3Byb2ZpbGVVSSByZXBsYWNlcyB0aGUgJ29wcmVwb3J0JyBmdW5jdGlvbmFsaXR5IHdpdGggYSBHVUksCisgICAgICAgICAgICBhbmQgbm9ybWFsbHkgZG9lc24ndCByZXF1aXJlIHRoZSB1c2VyIHRvIHVzZSAnb3Bjb250cm9sJyBlaXRoZXIuCisgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBwcm9maWxlIHRoZSBrZXJuZWwsIGhvd2V2ZXIsIHlvdSBuZWVkIHRvIGVpdGhlcgorICAgICAgICAgICAgdXNlIHRoZSBVSSB0byBzcGVjaWZ5IGEgdm1saW51eCBvciB1c2UgJ29wY29udHJvbCcgdG8gc3BlY2lmeQorICAgICAgICAgICAgaXQgb24gdGhlIHRhcmdldDoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRmlyc3QsIG9uIHRoZSB0YXJnZXQsIGNoZWNrIGlmIHZtbGludXggZmlsZTogaXMgc2V0OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wY29udHJvbCAtLXN0YXR1cworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSWYgbm90OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wY29udHJvbCAtLXNodXRkb3duCisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3Bjb250cm9sIC0tdm1saW51eD0vYm9vdC92bWxpbnV4LWB1bmFtZSAtcmAKKyAgICAgcm9vdEBjcm93bmJheTp+IyBvcGNvbnRyb2wgLS1zdGFydC1kYWVtb24KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIE5vdywgc3RhcnQgdGhlIG9wcm9maWxlIFVJIG9uIHRoZSBob3N0IHN5c3RlbToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgW3RyekBlbXBhbmFkYSBvcHJvZmlsZXVpXSQgb3Byb2ZpbGUtdmlld2VyCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUbyBydW4gYSBwcm9maWxlIG9uIHRoZSByZW1vdGUgc3lzdGVtLCBmaXJzdCBjb25uZWN0IHRvIHRoZQorICAgICAgICAgICAgcmVtb3RlIHN5c3RlbSBieSBwcmVzc2luZyB0aGUgJ0Nvbm5lY3QnIGJ1dHRvbiBhbmQgc3VwcGx5aW5nCisgICAgICAgICAgICB0aGUgSVAgYWRkcmVzcyBhbmQgcG9ydCBvZiB0aGUgcmVtb3RlIHN5c3RlbSAodGhlIGRlZmF1bHQKKyAgICAgICAgICAgIHBvcnQgaXMgNDIyNCkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBvcHJvZmlsZSBzZXJ2ZXIgc2hvdWxkIGF1dG9tYXRpY2FsbHkgYmUgc3RhcnRlZCBhbHJlYWR5LgorICAgICAgICAgICAgSWYgbm90LCB0aGUgY29ubmVjdGlvbiB3aWxsIGZhaWwgYW5kIHlvdSBlaXRoZXIgdHlwZWQgaW4gdGhlCisgICAgICAgICAgICB3cm9uZyBJUCBhZGRyZXNzIGFuZCBwb3J0IChzZWUgYmVsb3cpLCBvciB5b3UgbmVlZCB0byBzdGFydAorICAgICAgICAgICAgdGhlIHNlcnZlciB5b3Vyc2VsZjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBvcHJvZmlsZS1zZXJ2ZXIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIE9yLCB0byBzcGVjaWZ5IGEgc3BlY2lmaWMgcG9ydDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBvcHJvZmlsZS1zZXJ2ZXIgLS1wb3J0IDg4ODgKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIE9uY2UgY29ubmVjdGVkLCBwcmVzcyB0aGUgJ1N0YXJ0JyBidXR0b24gYW5kIHRoZW4gcnVuIHRoZQorICAgICAgICAgICAgd2dldCB3b3JrbG9hZCBvbiB0aGUgcmVtb3RlIHN5c3RlbToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBybSBsaW51eC0yLjYuMTkuMi50YXIuYnoyOyB3Z2V0IDx1bGluayB1cmw9J2h0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyJz5odHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6MjwvdWxpbms+OyBzeW5jCisgICAgIENvbm5lY3RpbmcgdG8gZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcgKDE0MC4yMTEuMTY5LjU5OjgwKQorICAgICBsaW51eC0yLjYuMTkuMi50YXIuYiAxMDAlIHwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfCA0MTcyN2sgIDA6MDA6MDAgRVRBCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBPbmNlIHRoZSB3b3JrbG9hZCBjb21wbGV0ZXMsIHByZXNzIHRoZSAnU3RvcCcgYnV0dG9uLiBBdCB0aGF0CisgICAgICAgICAgICBwb2ludCB0aGUgT1Byb2ZpbGUgdmlld2VyIHdpbGwgZG93bmxvYWQgdGhlIHByb2ZpbGUgZmlsZXMgaXQncworICAgICAgICAgICAgY29sbGVjdGVkICh0aGlzIG1heSB0YWtlIHNvbWUgdGltZSwgZXNwZWNpYWxseSBpZiB0aGUga2VybmVsCisgICAgICAgICAgICB3YXMgcHJvZmlsZWQpLiBXaGlsZSBpdCBkb3dubG9hZHMgdGhlIGZpbGVzLCB5b3Ugc2hvdWxkIHNlZQorICAgICAgICAgICAgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL29wcm9maWxldWktZG93bmxvYWRpbmcucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSB0aGUgcHJvZmlsZSBmaWxlcyBoYXZlIGJlZW4gcmV0cmlldmVkLCB5b3Ugc2hvdWxkIHNlZSBhCisgICAgICAgICAgICBsaXN0IG9mIHRoZSBwcm9jZXNzZXMgdGhhdCB3ZXJlIHByb2ZpbGVkOgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvb3Byb2ZpbGV1aS1wcm9jZXNzZXMucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IHNlbGVjdCBvbmUgb2YgdGhlbSwgeW91IHNob3VsZCBzZWUgYWxsIHRoZSBzeW1ib2xzIHRoYXQKKyAgICAgICAgICAgIHdlcmUgaGl0IGR1cmluZyB0aGUgcHJvZmlsZS4gU2VsZWN0aW5nIG9uZSBvZiB0aGVtIHdpbGwgc2hvdyBhCisgICAgICAgICAgICBsaXN0IG9mIGNhbGxlcnMgYW5kIGNhbGxlZXMgb2YgdGhlIGNob3NlbiBmdW5jdGlvbiBpbiB0d28KKyAgICAgICAgICAgIHBhbmVzIGJlbG93IHRoZSB0b3AgcGFuZS4gRm9yIGV4YW1wbGUsIGhlcmUncyB3aGF0IHdlIHNlZQorICAgICAgICAgICAgd2hlbiB3ZSBzZWxlY3QgX19jb3B5X3RvX3VzZXJfbGwoKToKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL29wcm9maWxldWktY29weS10by11c2VyLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIGFub3RoZXIgZXhhbXBsZSwgd2UgY2FuIGxvb2sgYXQgdGhlIGJ1c3lib3ggcHJvY2VzcyBhbmQgc2VlCisgICAgICAgICAgICB0aGF0IHRoZSBwcm9ncmVzcyBtZXRlciBtYWRlIGEgc3lzdGVtIGNhbGw6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9vcHJvZmlsZXVpLWJ1c3lib3gucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdvcHJvZmlsZS1kb2N1bWVudGF0aW9uJz4KKyAgICAgICAgPHRpdGxlPkRvY3VtZW50YXRpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW9jdG8gYWxyZWFkeSBoYXMgc29tZSBpbmZvcm1hdGlvbiBvbiBzZXR0aW5nIHVwIGFuZCB1c2luZworICAgICAgICAgICAgT1Byb2ZpbGUgYW5kIG9wcm9maWxldWkuIEFzIHRoaXMgZG9jdW1lbnQgZG9lc24ndCBjb3ZlcgorICAgICAgICAgICAgZXZlcnl0aGluZyBpbiBkZXRhaWwsIGl0IG1heSBiZSB3b3J0aCB0YWtpbmcgYSBsb29rIGF0IHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BsYXRkZXYtb3Byb2ZpbGUnPlByb2ZpbGluZyB3aXRoIE9Qcm9maWxlPC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT1Byb2ZpbGUgbWFudWFsIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL29wcm9maWxlLnNvdXJjZWZvcmdlLm5ldC9kb2MvaW5kZXguaHRtbCc+T1Byb2ZpbGUgbWFudWFsPC91bGluaz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIE9Qcm9maWxlIHdlYnNpdGUgY29udGFpbnMgbGlua3MgdG8gdGhlIGFib3ZlIG1hbnVhbCBhbmQKKyAgICAgICAgICAgIGJ1bmNoIG9mIG90aGVyIGl0ZW1zIGluY2x1ZGluZyBhbiBleHRlbnNpdmUgc2V0IG9mIGV4YW1wbGVzOgorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL29wcm9maWxlLnNvdXJjZWZvcmdlLm5ldC9hYm91dC8nPkFib3V0IE9Qcm9maWxlPC91bGluaz4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3Byb2ZpbGUtbWFudWFsLXN5c3Byb2YnPgorICAgIDx0aXRsZT5TeXNwcm9mPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBTeXNwcm9mIGlzIGEgdmVyeSBlYXN5IHRvIHVzZSBzeXN0ZW0td2lkZSBwcm9maWxlciB0aGF0IGNvbnNpc3RzCisgICAgICAgIG9mIGEgc2luZ2xlIHdpbmRvdyB3aXRoIHRocmVlIHBhbmVzIGFuZCBhIGZldyBidXR0b25zIHdoaWNoIGFsbG93CisgICAgICAgIHlvdSB0byBzdGFydCwgc3RvcCwgYW5kIHZpZXcgdGhlIHByb2ZpbGUgZnJvbSBvbmUgcGxhY2UuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3N5c3Byb2Ytc2V0dXAnPgorICAgICAgICA8dGl0bGU+U2V0dXA8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIHRoaXMgc2VjdGlvbiwgd2UnbGwgYXNzdW1lIHlvdSd2ZSBhbHJlYWR5IHBlcmZvcm1lZCB0aGUKKyAgICAgICAgICAgIGJhc2ljIHNldHVwIG91dGxpbmVkIGluIHRoZSBHZW5lcmFsIFNldHVwIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFN5c3Byb2YgaXMgYSBHVUktYmFzZWQgYXBwbGljYXRpb24gdGhhdCBydW5zIG9uIHRoZSB0YXJnZXQKKyAgICAgICAgICAgIHN5c3RlbS4gRm9yIHRoZSByZXN0IG9mIHRoaXMgZG9jdW1lbnQgd2UgYXNzdW1lIHlvdSd2ZQorICAgICAgICAgICAgc3NoJ2VkIHRvIHRoZSBob3N0IGFuZCB3aWxsIGJlIHJ1bm5pbmcgU3lzcHJvZiBvbiB0aGUKKyAgICAgICAgICAgIHRhcmdldCAoeW91IGNhbiB1c2UgdGhlICctWCcgb3B0aW9uIHRvIHNzaCBhbmQgaGF2ZSB0aGUKKyAgICAgICAgICAgIFN5c3Byb2YgR1VJIHJ1biBvbiB0aGUgdGFyZ2V0IGJ1dCBkaXNwbGF5IHJlbW90ZWx5IG9uIHRoZQorICAgICAgICAgICAgaG9zdCBpZiB5b3Ugd2FudCkuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3lzcHJvZi1iYXNpYy11c2FnZSc+CisgICAgICAgIDx0aXRsZT5CYXNpYyBVc2FnZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBzdGFydCBwcm9maWxpbmcgdGhlIHN5c3RlbSwgeW91IHNpbXBseSBwcmVzcyB0aGUgJ1N0YXJ0JworICAgICAgICAgICAgYnV0dG9uLiBUbyBzdG9wIHByb2ZpbGluZyBhbmQgdG8gc3RhcnQgdmlld2luZyB0aGUgcHJvZmlsZSBkYXRhCisgICAgICAgICAgICBpbiBvbmUgZWFzeSBzdGVwLCBwcmVzcyB0aGUgJ1Byb2ZpbGUnIGJ1dHRvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSB5b3UndmUgcHJlc3NlZCB0aGUgcHJvZmlsZSBidXR0b24sIHRoZSB0aHJlZSBwYW5lcyB3aWxsCisgICAgICAgICAgICBmaWxsIHVwIHdpdGggcHJvZmlsaW5nIGRhdGE6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9zeXNwcm9mLWNvcHktdG8tdXNlci5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI0aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgbGVmdCBwYW5lIHNob3dzIGEgbGlzdCBvZiBmdW5jdGlvbnMgYW5kIHByb2Nlc3Nlcy4KKyAgICAgICAgICAgIFNlbGVjdGluZyBvbmUgb2YgdGhvc2UgZXhwYW5kcyB0aGF0IGZ1bmN0aW9uIGluIHRoZSByaWdodAorICAgICAgICAgICAgcGFuZSwgc2hvd2luZyBhbGwgaXRzIGNhbGxlZXMuIE5vdGUgdGhhdCB0aGlzIGNhbGxlci1vcmllbnRlZAorICAgICAgICAgICAgZGlzcGxheSBpcyBlc3NlbnRpYWxseSB0aGUgaW52ZXJzZSBvZiBwZXJmJ3MgZGVmYXVsdAorICAgICAgICAgICAgY2FsbGVlLW9yaWVudGVkIGNhbGxjaGFpbiBkaXNwbGF5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiB0aGUgc2NyZWVuc2hvdCBhYm92ZSwgd2UncmUgZm9jdXNpbmcgb24gX19jb3B5X3RvX3VzZXJfbGwoKQorICAgICAgICAgICAgYW5kIGxvb2tpbmcgdXAgdGhlIGNhbGxjaGFpbiB3ZSBjYW4gc2VlIHRoYXQgb25lIG9mIHRoZSBjYWxsZXJzCisgICAgICAgICAgICBvZiBfX2NvcHlfdG9fdXNlcl9sbCBpcyBzeXNfcmVhZCgpIGFuZCB0aGUgY29tcGxldGUgY2FsbHBhdGgKKyAgICAgICAgICAgIGJldHdlZW4gdGhlbS4gTm90aWNlIHRoYXQgdGhpcyBpcyBlc3NlbnRpYWxseSBhIHBvcnRpb24gb2YgdGhlCisgICAgICAgICAgICBzYW1lIGluZm9ybWF0aW9uIHdlIHNhdyBpbiB0aGUgcGVyZiBkaXNwbGF5IHNob3duIGluIHRoZSBwZXJmCisgICAgICAgICAgICBzZWN0aW9uIG9mIHRoaXMgcGFnZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3N5c3Byb2YtY29weS1mcm9tLXVzZXIucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iNGluIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU2ltaWxhcmx5LCB0aGUgYWJvdmUgaXMgYSBzbmFwc2hvdCBvZiB0aGUgU3lzcHJvZiBkaXNwbGF5IG9mIGEKKyAgICAgICAgICAgIGNvcHktZnJvbS11c2VyIGNhbGxjaGFpbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRmluYWxseSwgbG9va2luZyBhdCB0aGUgdGhpcmQgU3lzcHJvZiBwYW5lIGluIHRoZSBsb3dlciBsZWZ0LAorICAgICAgICAgICAgd2UgY2FuIHNlZSBhIGxpc3Qgb2YgYWxsIHRoZSBjYWxsZXJzIG9mIGEgcGFydGljdWxhciBmdW5jdGlvbgorICAgICAgICAgICAgc2VsZWN0ZWQgaW4gdGhlIHRvcCBsZWZ0IHBhbmUuIEluIHRoaXMgY2FzZSwgdGhlIGxvd2VyIHBhbmUgaXMKKyAgICAgICAgICAgIHNob3dpbmcgYWxsIHRoZSBjYWxsZXJzIG9mIF9fbWFya19pbm9kZV9kaXJ0eToKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3N5c3Byb2YtY2FsbGVycy5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI0aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEb3VibGUtY2xpY2tpbmcgb24gb25lIG9mIHRob3NlIGZ1bmN0aW9ucyB3aWxsIGluIHR1cm4gY2hhbmdlIHRoZQorICAgICAgICAgICAgZm9jdXMgdG8gdGhlIHNlbGVjdGVkIGZ1bmN0aW9uLCBhbmQgc28gb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPGVtcGhhc2lzPlR5aW5nIGl0IFRvZ2V0aGVyOjwvZW1waGFzaXM+IElmIHlvdSBsaWtlIHN5c3Byb2YncyAnY2FsbGVyLW9yaWVudGVkJworICAgICAgICAgICAgZGlzcGxheSwgeW91IG1heSBiZSBhYmxlIHRvIGFwcHJveGltYXRlIGl0IGluIG90aGVyIHRvb2xzIGFzCisgICAgICAgICAgICB3ZWxsLiAgRm9yIGV4YW1wbGUsICdwZXJmIHJlcG9ydCcgaGFzIHRoZSAtZyAoLS1jYWxsLWdyYXBoKQorICAgICAgICAgICAgb3B0aW9uIHRoYXQgeW91IGNhbiBleHBlcmltZW50IHdpdGg7IG9uZSBvZiB0aGUgb3B0aW9ucyBpcworICAgICAgICAgICAgJ2NhbGxlcicgZm9yIGFuIGludmVydGVkIGNhbGxlci1iYXNlZCBjYWxsZ3JhcGggZGlzcGxheS4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N5c3Byb2YtZG9jdW1lbnRhdGlvbic+CisgICAgICAgIDx0aXRsZT5Eb2N1bWVudGF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgU3lzcHJvZiwgYnV0CisgICAgICAgICAgICBtYXliZSB0aGF0J3MgYmVjYXVzZSBpdCdzIHByZXR0eSBzZWxmLWV4cGxhbmF0b3J5LgorICAgICAgICAgICAgVGhlIFN5c3Byb2Ygd2Vic2l0ZSwgaG93ZXZlciwgaXMgaGVyZToKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9zeXNwcm9mLmNvbS8nPlN5c3Byb2YsIFN5c3RlbS13aWRlIFBlcmZvcm1hbmNlIFByb2ZpbGVyIGZvciBMaW51eDwvdWxpbms+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdsdHRuZy1saW51eC10cmFjZS10b29sa2l0LW5leHQtZ2VuZXJhdGlvbic+CisgICAgPHRpdGxlPkxUVG5nIChMaW51eCBUcmFjZSBUb29sa2l0LCBuZXh0IGdlbmVyYXRpb24pPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSdsdHRuZy1zZXR1cCc+CisgICAgICAgIDx0aXRsZT5TZXR1cDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgdGhpcyBzZWN0aW9uLCB3ZSdsbCBhc3N1bWUgeW91J3ZlIGFscmVhZHkgcGVyZm9ybWVkIHRoZQorICAgICAgICAgICAgYmFzaWMgc2V0dXAgb3V0bGluZWQgaW4gdGhlIEdlbmVyYWwgU2V0dXAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTFRUbmcgaXMgcnVuIG9uIHRoZSB0YXJnZXQgc3lzdGVtIGJ5IHNzaCdpbmcgdG8gaXQuCisgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3Ugd2FudCB0byBzZWUgdGhlIHRyYWNlcyBncmFwaGljYWxseSwKKyAgICAgICAgICAgIGluc3RhbGwgRWNsaXBzZSBhcyBkZXNjcmliZWQgaW4gc2VjdGlvbgorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J21hbnVhbGx5LWNvcHlpbmctYS10cmFjZS10by10aGUtaG9zdC1hbmQtdmlld2luZy1pdC1pbi1lY2xpcHNlJz5NYW51YWxseSBjb3B5aW5nIGEgdHJhY2UgdG8gdGhlIGhvc3QgYW5kIHZpZXdpbmcgaXQgaW4gRWNsaXBzZSAoaS5lLiB1c2luZyBFY2xpcHNlIHdpdGhvdXQgbmV0d29yayBzdXBwb3J0KTwvbGluaz4iCisgICAgICAgICAgICBhbmQgZm9sbG93IHRoZSBkaXJlY3Rpb25zIHRvIG1hbnVhbGx5IGNvcHkgdHJhY2VzIHRvIHRoZSBob3N0IGFuZAorICAgICAgICAgICAgdmlldyB0aGVtIGluIEVjbGlwc2UgKGkuZS4gdXNpbmcgRWNsaXBzZSB3aXRob3V0IG5ldHdvcmsgc3VwcG9ydCkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIEJlIHN1cmUgdG8gZG93bmxvYWQgYW5kIGluc3RhbGwvcnVuIHRoZSAnU1IxJyBvciBsYXRlciBKdW5vIHJlbGVhc2UKKyAgICAgICAgICAgIG9mIGVjbGlwc2UgZS5nLjoKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZG93bmxvYWRzL2Rvd25sb2FkLnBocD9maWxlPS90ZWNobm9sb2d5L2VwcC9kb3dubG9hZHMvcmVsZWFzZS9qdW5vL1NSMS9lY2xpcHNlLWNwcC1qdW5vLVNSMS1saW51eC1ndGsteDg2XzY0LnRhci5neic+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9kb3dubG9hZHMvZG93bmxvYWQucGhwP2ZpbGU9L3RlY2hub2xvZ3kvZXBwL2Rvd25sb2Fkcy9yZWxlYXNlL2p1bm8vU1IxL2VjbGlwc2UtY3BwLWp1bm8tU1IxLWxpbnV4LWd0ay14ODZfNjQudGFyLmd6PC91bGluaz4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdjb2xsZWN0aW5nLWFuZC12aWV3aW5nLXRyYWNlcyc+CisgICAgICAgIDx0aXRsZT5Db2xsZWN0aW5nIGFuZCBWaWV3aW5nIFRyYWNlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIHlvdSd2ZSBhcHBsaWVkIHRoZSBhYm92ZSBjb21taXRzIGFuZCBidWlsdCBhbmQgYm9vdGVkIHlvdXIKKyAgICAgICAgICAgIGltYWdlICh5b3UgbmVlZCB0byBidWlsZCB0aGUgY29yZS1pbWFnZS1zYXRvLXNkayBpbWFnZSBvciB1c2Ugb25lIG9mIHRoZQorICAgICAgICAgICAgb3RoZXIgbWV0aG9kcyBkZXNjcmliZWQgaW4gdGhlIEdlbmVyYWwgU2V0dXAgc2VjdGlvbiksIHlvdSdyZQorICAgICAgICAgICAgcmVhZHkgdG8gc3RhcnQgdHJhY2luZy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjb2xsZWN0aW5nLWFuZC12aWV3aW5nLWEtdHJhY2Utb24tdGhlLXRhcmdldC1pbnNpZGUtYS1zaGVsbCc+CisgICAgICAgICAgICA8dGl0bGU+Q29sbGVjdGluZyBhbmQgdmlld2luZyBhIHRyYWNlIG9uIHRoZSB0YXJnZXQgKGluc2lkZSBhIHNoZWxsKTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZpcnN0LCBmcm9tIHRoZSBob3N0LCBzc2ggdG8gdGhlIHRhcmdldDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3NoIC1sIHJvb3QgMTkyLjE2OC4xLjQ3CisgICAgIFRoZSBhdXRoZW50aWNpdHkgb2YgaG9zdCAnMTkyLjE2OC4xLjQ3ICgxOTIuMTY4LjEuNDcpJyBjYW4ndCBiZSBlc3RhYmxpc2hlZC4KKyAgICAgUlNBIGtleSBmaW5nZXJwcmludCBpcyAyMzpiZDpjODpiMTphODo3MTo1MjowMDplZTowMDo0Zjo2NDo5ZToxMDpiOTo3ZS4KKyAgICAgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNvbnRpbnVlIGNvbm5lY3RpbmcgKHllcy9ubyk/IHllcworICAgICBXYXJuaW5nOiBQZXJtYW5lbnRseSBhZGRlZCAnMTkyLjE2OC4xLjQ3JyAoUlNBKSB0byB0aGUgbGlzdCBvZiBrbm93biBob3N0cy4KKyAgICAgcm9vdEAxOTIuMTY4LjEuNDcncyBwYXNzd29yZDoKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgT25jZSBvbiB0aGUgdGFyZ2V0LCB1c2UgdGhlc2Ugc3RlcHMgdG8gY3JlYXRlIGEgdHJhY2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGx0dG5nIGNyZWF0ZQorICAgICBTcGF3bmluZyBhIHNlc3Npb24gZGFlbW9uCisgICAgIFNlc3Npb24gYXV0by0yMDEyMTAxNS0yMzIxMjAgY3JlYXRlZC4KKyAgICAgVHJhY2VzIHdpbGwgYmUgd3JpdHRlbiBpbiAvaG9tZS9yb290L2x0dG5nLXRyYWNlcy9hdXRvLTIwMTIxMDE1LTIzMjEyMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBFbmFibGUgdGhlIGV2ZW50cyB5b3Ugd2FudCB0byB0cmFjZSAoaW4gdGhpcyBjYXNlIGFsbAorICAgICAgICAgICAgICAgIGtlcm5lbCBldmVudHMpOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBsdHRuZyBlbmFibGUtZXZlbnQgLS1rZXJuZWwgLS1hbGwKKyAgICAgQWxsIGtlcm5lbCBldmVudHMgYXJlIGVuYWJsZWQgaW4gY2hhbm5lbCBjaGFubmVsMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBTdGFydCB0aGUgdHJhY2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGx0dG5nIHN0YXJ0CisgICAgIFRyYWNpbmcgc3RhcnRlZCBmb3Igc2Vzc2lvbiBhdXRvLTIwMTIxMDE1LTIzMjEyMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBBbmQgdGhlbiBzdG9wIHRoZSB0cmFjZSBhZnRlciBhd2hpbGUgb3IgYWZ0ZXIgcnVubmluZworICAgICAgICAgICAgICAgIGEgcGFydGljdWxhciB3b3JrbG9hZCB0aGF0IHlvdSB3YW50IHRvIHRyYWNlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBsdHRuZyBzdG9wCisgICAgIFRyYWNpbmcgc3RvcHBlZCBmb3Igc2Vzc2lvbiBhdXRvLTIwMTIxMDE1LTIzMjEyMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIG5vdyB2aWV3IHRoZSB0cmFjZSBpbiB0ZXh0IGZvcm0gb24gdGhlIHRhcmdldDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgbHR0bmcgdmlldworICAgICBbMjM6MjE6NTYuOTg5MjcwMzk5XSAoKz8uPz8/Pz8/Pz8/KSBzeXNfZ2V0ZXVpZDogeyAxIH0sIHsgfQorICAgICBbMjM6MjE6NTYuOTg5Mjc4MDgxXSAoKzAuMDAwMDA3NjgyKSBleGl0X3N5c2NhbGw6IHsgMSB9LCB7IHJldCA9IDAgfQorICAgICBbMjM6MjE6NTYuOTg5Mjg2MDQzXSAoKzAuMDAwMDA3OTYyKSBzeXNfcGlwZTogeyAxIH0sIHsgZmlsZGVzID0gMHhCNzdCOUU4QyB9CisgICAgIFsyMzoyMTo1Ni45ODkzMjE4MDJdICgrMC4wMDAwMzU3NTkpIGV4aXRfc3lzY2FsbDogeyAxIH0sIHsgcmV0ID0gMCB9CisgICAgIFsyMzoyMTo1Ni45ODkzMjkzNDVdICgrMC4wMDAwMDc1NDMpIHN5c19tbWFwX3Bnb2ZmOiB7IDEgfSwgeyBhZGRyID0gMHgwLCBsZW4gPSAxMDQ4NTc2MCwgcHJvdCA9IDMsIGZsYWdzID0gMTMxMzYyLCBmZCA9IDQyOTQ5NjcyOTUsIHBnb2ZmID0gMCB9CisgICAgIFsyMzoyMTo1Ni45ODkzNTE2OTRdICgrMC4wMDAwMjIzNDkpIGV4aXRfc3lzY2FsbDogeyAxIH0sIHsgcmV0ID0gLTEyNDc4MDU0NDAgfQorICAgICBbMjM6MjE6NTYuOTg5NDMyOTg5XSAoKzAuMDAwMDgxMjk1KSBzeXNfY2xvbmU6IHsgMSB9LCB7IGNsb25lX2ZsYWdzID0gMHg0MTEsIG5ld3NwID0gMHhCNUVGRkZFNCwgcGFyZW50X3RpZCA9IDB4RkZGRkZGRkYsIGNoaWxkX3RpZCA9IDB4MCB9CisgICAgIFsyMzoyMTo1Ni45ODk0NzcxMjldICgrMC4wMDAwNDQxNDApIHNjaGVkX3N0YXRfcnVudGltZTogeyAxIH0sIHsgY29tbSA9ICJsdHRuZy1jb25zdW1lcmQiLCB0aWQgPSAxMTkzLCBydW50aW1lID0gNjgxNjYwLCB2cnVudGltZSA9IDQzMzY3OTgzMzg4IH0KKyAgICAgWzIzOjIxOjU2Ljk4OTQ4NjY5N10gKCswLjAwMDAwOTU2OCkgc2NoZWRfbWlncmF0ZV90YXNrOiB7IDEgfSwgeyBjb21tID0gImx0dG5nLWNvbnN1bWVyZCIsIHRpZCA9IDExOTMsIHByaW8gPSAyMCwgb3JpZ19jcHUgPSAxLCBkZXN0X2NwdSA9IDEgfQorICAgICBbMjM6MjE6NTYuOTg5NTA4NDE4XSAoKzAuMDAwMDIxNzIxKSBocnRpbWVyX2luaXQ6IHsgMSB9LCB7IGhydGltZXIgPSAzOTcwODMyMDc2LCBjbG9ja2lkID0gMSwgbW9kZSA9IDEgfQorICAgICBbMjM6MjE6NTYuOTg5NzcwNDYyXSAoKzAuMDAwMjYyMDQ0KSBocnRpbWVyX2NhbmNlbDogeyAxIH0sIHsgaHJ0aW1lciA9IDM5OTM4NjU0NDAgfQorICAgICBbMjM6MjE6NTYuOTg5NzcxNTgwXSAoKzAuMDAwMDAxMTE4KSBocnRpbWVyX2NhbmNlbDogeyAwIH0sIHsgaHJ0aW1lciA9IDM5OTM4MTIxOTIgfQorICAgICBbMjM6MjE6NTYuOTg5Nzc2OTU3XSAoKzAuMDAwMDA1Mzc3KSBocnRpbWVyX2V4cGlyZV9lbnRyeTogeyAxIH0sIHsgaHJ0aW1lciA9IDM5OTM4NjU0NDAsIG5vdyA9IDc5ODE1OTgwMDA3MDU3LCBmdW5jdGlvbiA9IDMyMzg0NjUyMzIgfQorICAgICBbMjM6MjE6NTYuOTg5Nzc4MTQ1XSAoKzAuMDAwMDAxMTg4KSBocnRpbWVyX2V4cGlyZV9lbnRyeTogeyAwIH0sIHsgaHJ0aW1lciA9IDM5OTM4MTIxOTIsIG5vdyA9IDc5ODE1OTgwMDA4MTc0LCBmdW5jdGlvbiA9IDMyMzg0NjUyMzIgfQorICAgICBbMjM6MjE6NTYuOTg5NzkxNjk1XSAoKzAuMDAwMDEzNTUwKSBzb2Z0aXJxX3JhaXNlOiB7IDEgfSwgeyB2ZWMgPSAxIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTc5NTM5Nl0gKCswLjAwMDAwMzcwMSkgc29mdGlycV9yYWlzZTogeyAwIH0sIHsgdmVjID0gMSB9CisgICAgIFsyMzoyMTo1Ni45ODk4MDA2MzVdICgrMC4wMDAwMDUyMzkpIHNvZnRpcnFfcmFpc2U6IHsgMCB9LCB7IHZlYyA9IDkgfQorICAgICBbMjM6MjE6NTYuOTg5ODA3MTMwXSAoKzAuMDAwMDA2NDk1KSBzY2hlZF9zdGF0X3J1bnRpbWU6IHsgMSB9LCB7IGNvbW0gPSAibHR0bmctY29uc3VtZXJkIiwgdGlkID0gMTE5MywgcnVudGltZSA9IDMzMDcxMCwgdnJ1bnRpbWUgPSA0MzM2ODMxNDA5OCB9CisgICAgIFsyMzoyMTo1Ni45ODk4MDk5OTNdICgrMC4wMDAwMDI4NjMpIHNjaGVkX3N0YXRfcnVudGltZTogeyAwIH0sIHsgY29tbSA9ICJsdHRuZy1zZXNzaW9uZCIsIHRpZCA9IDExODEsIHJ1bnRpbWUgPSAxMDE1MzEzLCB2cnVudGltZSA9IDM2OTc2NzMzMjQwIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTgxODUxNF0gKCswLjAwMDAwODUyMSkgaHJ0aW1lcl9leHBpcmVfZXhpdDogeyAwIH0sIHsgaHJ0aW1lciA9IDM5OTM4MTIxOTIgfQorICAgICBbMjM6MjE6NTYuOTg5ODE5NjMxXSAoKzAuMDAwMDAxMTE3KSBocnRpbWVyX2V4cGlyZV9leGl0OiB7IDEgfSwgeyBocnRpbWVyID0gMzk5Mzg2NTQ0MCB9CisgICAgIFsyMzoyMTo1Ni45ODk4MjE4NjZdICgrMC4wMDAwMDIyMzUpIGhydGltZXJfc3RhcnQ6IHsgMCB9LCB7IGhydGltZXIgPSAzOTkzODEyMTkyLCBmdW5jdGlvbiA9IDMyMzg0NjUyMzIsIGV4cGlyZXMgPSA3OTgxNTk4MTAwMDAwMCwgc29mdGV4cGlyZXMgPSA3OTgxNTk4MTAwMDAwMCB9CisgICAgIFsyMzoyMTo1Ni45ODk4MjI5ODRdICgrMC4wMDAwMDExMTgpIGhydGltZXJfc3RhcnQ6IHsgMSB9LCB7IGhydGltZXIgPSAzOTkzODY1NDQwLCBmdW5jdGlvbiA9IDMyMzg0NjUyMzIsIGV4cGlyZXMgPSA3OTgxNTk4MTAwMDAwMCwgc29mdGV4cGlyZXMgPSA3OTgxNTk4MTAwMDAwMCB9CisgICAgIFsyMzoyMTo1Ni45ODk4MzI3NjJdICgrMC4wMDAwMDk3NzgpIHNvZnRpcnFfZW50cnk6IHsgMSB9LCB7IHZlYyA9IDEgfQorICAgICBbMjM6MjE6NTYuOTg5ODMzODc5XSAoKzAuMDAwMDAxMTE3KSBzb2Z0aXJxX2VudHJ5OiB7IDAgfSwgeyB2ZWMgPSAxIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTgzODA2OV0gKCswLjAwMDAwNDE5MCkgdGltZXJfY2FuY2VsOiB7IDEgfSwgeyB0aW1lciA9IDM5OTM4NzE5NTYgfQorICAgICBbMjM6MjE6NTYuOTg5ODM5MTg3XSAoKzAuMDAwMDAxMTE4KSB0aW1lcl9jYW5jZWw6IHsgMCB9LCB7IHRpbWVyID0gMzk5MzgxODcwOCB9CisgICAgIFsyMzoyMTo1Ni45ODk4NDE0OTJdICgrMC4wMDAwMDIzMDUpIHRpbWVyX2V4cGlyZV9lbnRyeTogeyAxIH0sIHsgdGltZXIgPSAzOTkzODcxOTU2LCBub3cgPSA3OTUxNTk4MCwgZnVuY3Rpb24gPSAzMjM4Mjc3NTUyIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTg0MjgxOV0gKCswLjAwMDAwMTMyNykgdGltZXJfZXhwaXJlX2VudHJ5OiB7IDAgfSwgeyB0aW1lciA9IDM5OTM4MTg3MDgsIG5vdyA9IDc5NTE1OTgwLCBmdW5jdGlvbiA9IDMyMzgyNzc1NTIgfQorICAgICBbMjM6MjE6NTYuOTg5ODU0ODMxXSAoKzAuMDAwMDEyMDEyKSBzY2hlZF9zdGF0X3J1bnRpbWU6IHsgMSB9LCB7IGNvbW0gPSAibHR0bmctY29uc3VtZXJkIiwgdGlkID0gMTE5MywgcnVudGltZSA9IDQ5MjM3LCB2cnVudGltZSA9IDQzMzY4MzYzMzM1IH0KKyAgICAgWzIzOjIxOjU2Ljk4OTg1NTk0OV0gKCswLjAwMDAwMTExOCkgc2NoZWRfc3RhdF9ydW50aW1lOiB7IDAgfSwgeyBjb21tID0gImx0dG5nLXNlc3Npb25kIiwgdGlkID0gMTE4MSwgcnVudGltZSA9IDQ1MTIxLCB2cnVudGltZSA9IDM2OTc2Nzc4MzYxIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTg2MTI1N10gKCswLjAwMDAwNTMwOCkgc2NoZWRfc3RhdF9zbGVlcDogeyAxIH0sIHsgY29tbSA9ICJrd29ya2VyLzE6MSIsIHRpZCA9IDIxLCBkZWxheSA9IDk0NTEzMTggfQorICAgICBbMjM6MjE6NTYuOTg5ODYyMzc0XSAoKzAuMDAwMDAxMTE3KSBzY2hlZF9zdGF0X3NsZWVwOiB7IDAgfSwgeyBjb21tID0gImt3b3JrZXIvMDowIiwgdGlkID0gNCwgZGVsYXkgPSA5OTU4ODIwIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTg2ODI0MV0gKCswLjAwMDAwNTg2Nykgc2NoZWRfd2FrZXVwOiB7IDAgfSwgeyBjb21tID0gImt3b3JrZXIvMDowIiwgdGlkID0gNCwgcHJpbyA9IDEyMCwgc3VjY2VzcyA9IDEsIHRhcmdldF9jcHUgPSAwIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTg2OTM1OF0gKCswLjAwMDAwMTExNykgc2NoZWRfd2FrZXVwOiB7IDEgfSwgeyBjb21tID0gImt3b3JrZXIvMToxIiwgdGlkID0gMjEsIHByaW8gPSAxMjAsIHN1Y2Nlc3MgPSAxLCB0YXJnZXRfY3B1ID0gMSB9CisgICAgIFsyMzoyMTo1Ni45ODk4Nzc0NjBdICgrMC4wMDAwMDgxMDIpIHRpbWVyX2V4cGlyZV9leGl0OiB7IDEgfSwgeyB0aW1lciA9IDM5OTM4NzE5NTYgfQorICAgICBbMjM6MjE6NTYuOTg5ODc4NTc3XSAoKzAuMDAwMDAxMTE3KSB0aW1lcl9leHBpcmVfZXhpdDogeyAwIH0sIHsgdGltZXIgPSAzOTkzODE4NzA4IH0KKyAgICAgLgorICAgICAuCisgICAgIC4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IGNhbiBub3cgc2FmZWx5IGRlc3Ryb3kgdGhlIHRyYWNlIHNlc3Npb24gKG5vdGUgdGhhdAorICAgICAgICAgICAgICAgIHRoaXMgZG9lc24ndCBkZWxldGUgdGhlIHRyYWNlIC0gaXQncyBzdGlsbCB0aGVyZQorICAgICAgICAgICAgICAgIGluIH4vbHR0bmctdHJhY2VzKToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgbHR0bmcgZGVzdHJveQorICAgICBTZXNzaW9uIGF1dG8tMjAxMjEwMTUtMjMyMTIwIGRlc3Ryb3llZCBhdCAvaG9tZS9yb290CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGUgdHJhY2UgaXMgc2F2ZWQgaW4gYSBkaXJlY3Rvcnkgb2YgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICBuYW1lIGFzIHJldHVybmVkIGJ5ICdsdHRuZyBjcmVhdGUnLCB1bmRlciB0aGUgfi9sdHRuZy10cmFjZXMKKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgKG5vdGUgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGlzIGJ5IHN1cHBseWluZyB5b3VyCisgICAgICAgICAgICAgICAgb3duIG5hbWUgdG8gJ2x0dG5nIGNyZWF0ZScpOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBscyAtYWwgfi9sdHRuZy10cmFjZXMKKyAgICAgZHJ3eHJ3eC0tLSAgICAzIHJvb3QgICAgIHJvb3QgICAgICAgICAgMTAyNCBPY3QgMTUgMjM6MjEgLgorICAgICBkcnd4ci14ci14ICAgIDUgcm9vdCAgICAgcm9vdCAgICAgICAgICAxMDI0IE9jdCAxNSAyMzo1NyAuLgorICAgICBkcnd4cnd4LS0tICAgIDMgcm9vdCAgICAgcm9vdCAgICAgICAgICAxMDI0IE9jdCAxNSAyMzoyMSBhdXRvLTIwMTIxMDE1LTIzMjEyMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjb2xsZWN0aW5nLWFuZC12aWV3aW5nLWEtdXNlcnNwYWNlLXRyYWNlLW9uLXRoZS10YXJnZXQtaW5zaWRlLWEtc2hlbGwnPgorICAgICAgICAgICAgPHRpdGxlPkNvbGxlY3RpbmcgYW5kIHZpZXdpbmcgYSB1c2Vyc3BhY2UgdHJhY2Ugb24gdGhlIHRhcmdldCAoaW5zaWRlIGEgc2hlbGwpPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIExUVG5nIHVzZXJzcGFjZSB0cmFjaW5nLCB5b3UgbmVlZCB0byBoYXZlIGEgcHJvcGVybHkKKyAgICAgICAgICAgICAgICBpbnN0cnVtZW50ZWQgdXNlcnNwYWNlIHByb2dyYW0uIEZvciB0aGlzIGV4YW1wbGUsIHdlJ2xsIHVzZQorICAgICAgICAgICAgICAgIHRoZSAnaGVsbG8nIHRlc3QgcHJvZ3JhbSBnZW5lcmF0ZWQgYnkgdGhlIGx0dG5nLXVzdCBidWlsZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlICdoZWxsbycgdGVzdCBwcm9ncmFtIGlzbid0IGluc3RhbGxlZCBvbiB0aGUgcm9vdGZzIGJ5CisgICAgICAgICAgICAgICAgdGhlIGx0dG5nLXVzdCBidWlsZCwgc28gd2UgbmVlZCB0byBjb3B5IGl0IG92ZXIgbWFudWFsbHkuCisgICAgICAgICAgICAgICAgRmlyc3QgY2QgaW50byB0aGUgYnVpbGQgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIGhlbGxvCisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgYnVpbGQvdG1wL3dvcmsvY29yZTJfMzItcG9reS1saW51eC9sdHRuZy11c3QvMi4wLjUtcjAvZ2l0L3Rlc3RzL2hlbGxvLy5saWJzCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIENvcHkgdGhhdCBvdmVyIHRvIHRoZSB0YXJnZXQgbWFjaGluZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc2NwIGhlbGxvIHJvb3RAMTkyLjE2OC4xLjIwOgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBZb3Ugbm93IGhhdmUgdGhlIGluc3RydW1lbnRlZCBsdHRuZyAnaGVsbG8gd29ybGQnIHRlc3QKKyAgICAgICAgICAgICAgICBwcm9ncmFtIG9uIHRoZSB0YXJnZXQsIHJlYWR5IHRvIHRlc3QuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZpcnN0LCBmcm9tIHRoZSBob3N0LCBzc2ggdG8gdGhlIHRhcmdldDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3NoIC1sIHJvb3QgMTkyLjE2OC4xLjQ3CisgICAgIFRoZSBhdXRoZW50aWNpdHkgb2YgaG9zdCAnMTkyLjE2OC4xLjQ3ICgxOTIuMTY4LjEuNDcpJyBjYW4ndCBiZSBlc3RhYmxpc2hlZC4KKyAgICAgUlNBIGtleSBmaW5nZXJwcmludCBpcyAyMzpiZDpjODpiMTphODo3MTo1MjowMDplZTowMDo0Zjo2NDo5ZToxMDpiOTo3ZS4KKyAgICAgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNvbnRpbnVlIGNvbm5lY3RpbmcgKHllcy9ubyk/IHllcworICAgICBXYXJuaW5nOiBQZXJtYW5lbnRseSBhZGRlZCAnMTkyLjE2OC4xLjQ3JyAoUlNBKSB0byB0aGUgbGlzdCBvZiBrbm93biBob3N0cy4KKyAgICAgcm9vdEAxOTIuMTY4LjEuNDcncyBwYXNzd29yZDoKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgT25jZSBvbiB0aGUgdGFyZ2V0LCB1c2UgdGhlc2Ugc3RlcHMgdG8gY3JlYXRlIGEgdHJhY2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGx0dG5nIGNyZWF0ZQorICAgICBTZXNzaW9uIGF1dG8tMjAxOTAzMDMtMDIxOTQzIGNyZWF0ZWQuCisgICAgIFRyYWNlcyB3aWxsIGJlIHdyaXR0ZW4gaW4gL2hvbWUvcm9vdC9sdHRuZy10cmFjZXMvYXV0by0yMDE5MDMwMy0wMjE5NDMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgRW5hYmxlIHRoZSBldmVudHMgeW91IHdhbnQgdG8gdHJhY2UgKGluIHRoaXMgY2FzZSBhbGwKKyAgICAgICAgICAgICAgICB1c2Vyc3BhY2UgZXZlbnRzKToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgbHR0bmcgZW5hYmxlLWV2ZW50IC0tdXNlcnNwYWNlIC0tYWxsCisgICAgIEFsbCBVU1QgZXZlbnRzIGFyZSBlbmFibGVkIGluIGNoYW5uZWwgY2hhbm5lbDAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgU3RhcnQgdGhlIHRyYWNlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBsdHRuZyBzdGFydAorICAgICBUcmFjaW5nIHN0YXJ0ZWQgZm9yIHNlc3Npb24gYXV0by0yMDE5MDMwMy0wMjE5NDMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgUnVuIHRoZSBpbnN0cnVtZW50ZWQgaGVsbG8gd29ybGQgcHJvZ3JhbToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgLi9oZWxsbworICAgICBIZWxsbywgV29ybGQhCisgICAgIFRyYWNpbmcuLi4gIGRvbmUuCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFuZCB0aGVuIHN0b3AgdGhlIHRyYWNlIGFmdGVyIGF3aGlsZSBvciBhZnRlciBydW5uaW5nIGEKKyAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyIHdvcmtsb2FkIHRoYXQgeW91IHdhbnQgdG8gdHJhY2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGx0dG5nIHN0b3AKKyAgICAgVHJhY2luZyBzdG9wcGVkIGZvciBzZXNzaW9uIGF1dG8tMjAxOTAzMDMtMDIxOTQzCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFlvdSBjYW4gbm93IHZpZXcgdGhlIHRyYWNlIGluIHRleHQgZm9ybSBvbiB0aGUgdGFyZ2V0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBsdHRuZyB2aWV3CisgICAgIFswMjozMToxNC45MDYxNDY1NDRdICgrPy4/Pz8/Pz8/Pz8pIGhlbGxvOjE0MjQgdXN0X3Rlc3RzX2hlbGxvOnRwdGVzdDogeyBjcHVfaWQgPSAxIH0sIHsgaW50ZmllbGQgPSAwLCBpbnRmaWVsZDIgPSAweDAsIGxvbmdmaWVsZCA9IDAsIG5ldGludGZpZWxkID0gMCwgbmV0aW50ZmllbGRoZXggPSAweDAsIGFycmZpZWxkMSA9IFsgWzBdID0gMSwgWzFdID0gMiwgWzJdID0gMyBdLCBhcnJmaWVsZDIgPSAidGVzdCIsIF9zZXFmaWVsZDFfbGVuZ3RoID0gNCwgc2VxZmllbGQxID0gWyBbMF0gPSAxMTYsIFsxXSA9IDEwMSwgWzJdID0gMTE1LCBbM10gPSAxMTYgXSwgX3NlcWZpZWxkMl9sZW5ndGggPSA0LCAgc2VxZmllbGQyID0gInRlc3QiLCBzdHJpbmdmaWVsZCA9ICJ0ZXN0IiwgZmxvYXRmaWVsZCA9IDIyMjIsIGRvdWJsZWZpZWxkID0gMiwgYm9vbGZpZWxkID0gMSB9CisgICAgIFswMjozMToxNC45MDYxNzAzNjBdICgrMC4wMDAwMjM4MTYpIGhlbGxvOjE0MjQgdXN0X3Rlc3RzX2hlbGxvOnRwdGVzdDogeyBjcHVfaWQgPSAxIH0sIHsgaW50ZmllbGQgPSAxLCBpbnRmaWVsZDIgPSAweDEsIGxvbmdmaWVsZCA9IDEsIG5ldGludGZpZWxkID0gMSwgbmV0aW50ZmllbGRoZXggPSAweDEsIGFycmZpZWxkMSA9IFsgWzBdID0gMSwgWzFdID0gMiwgWzJdID0gMyBdLCBhcnJmaWVsZDIgPSAidGVzdCIsIF9zZXFmaWVsZDFfbGVuZ3RoID0gNCwgc2VxZmllbGQxID0gWyBbMF0gPSAxMTYsIFsxXSA9IDEwMSwgWzJdID0gMTE1LCBbM10gPSAxMTYgXSwgX3NlcWZpZWxkMl9sZW5ndGggPSA0LCBzZXFmaWVsZDIgPSAidGVzdCIsIHN0cmluZ2ZpZWxkID0gInRlc3QiLCBmbG9hdGZpZWxkID0gMjIyMiwgZG91YmxlZmllbGQgPSAyLCBib29sZmllbGQgPSAxIH0KKyAgICAgWzAyOjMxOjE0LjkwNjE4MzE0MF0gKCswLjAwMDAxMjc4MCkgaGVsbG86MTQyNCB1c3RfdGVzdHNfaGVsbG86dHB0ZXN0OiB7IGNwdV9pZCA9IDEgfSwgeyBpbnRmaWVsZCA9IDIsIGludGZpZWxkMiA9IDB4MiwgbG9uZ2ZpZWxkID0gMiwgbmV0aW50ZmllbGQgPSAyLCBuZXRpbnRmaWVsZGhleCA9IDB4MiwgYXJyZmllbGQxID0gWyBbMF0gPSAxLCBbMV0gPSAyLCBbMl0gPSAzIF0sIGFycmZpZWxkMiA9ICJ0ZXN0IiwgX3NlcWZpZWxkMV9sZW5ndGggPSA0LCBzZXFmaWVsZDEgPSBbIFswXSA9IDExNiwgWzFdID0gMTAxLCBbMl0gPSAxMTUsIFszXSA9IDExNiBdLCBfc2VxZmllbGQyX2xlbmd0aCA9IDQsIHNlcWZpZWxkMiA9ICJ0ZXN0Iiwgc3RyaW5nZmllbGQgPSAidGVzdCIsIGZsb2F0ZmllbGQgPSAyMjIyLCBkb3VibGVmaWVsZCA9IDIsIGJvb2xmaWVsZCA9IDEgfQorICAgICBbMDI6MzE6MTQuOTA2MTk0Mzg1XSAoKzAuMDAwMDExMjQ1KSBoZWxsbzoxNDI0IHVzdF90ZXN0c19oZWxsbzp0cHRlc3Q6IHsgY3B1X2lkID0gMSB9LCB7IGludGZpZWxkID0gMywgaW50ZmllbGQyID0gMHgzLCBsb25nZmllbGQgPSAzLCBuZXRpbnRmaWVsZCA9IDMsIG5ldGludGZpZWxkaGV4ID0gMHgzLCBhcnJmaWVsZDEgPSBbIFswXSA9IDEsIFsxXSA9IDIsIFsyXSA9IDMgXSwgYXJyZmllbGQyID0gInRlc3QiLCBfc2VxZmllbGQxX2xlbmd0aCA9IDQsIHNlcWZpZWxkMSA9IFsgWzBdID0gMTE2LCBbMV0gPSAxMDEsIFsyXSA9IDExNSwgWzNdID0gMTE2IF0sIF9zZXFmaWVsZDJfbGVuZ3RoID0gNCwgc2VxZmllbGQyID0gInRlc3QiLCBzdHJpbmdmaWVsZCA9ICJ0ZXN0IiwgZmxvYXRmaWVsZCA9IDIyMjIsIGRvdWJsZWZpZWxkID0gMiwgYm9vbGZpZWxkID0gMSB9CisgICAgIC4KKyAgICAgLgorICAgICAuCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFlvdSBjYW4gbm93IHNhZmVseSBkZXN0cm95IHRoZSB0cmFjZSBzZXNzaW9uIChub3RlIHRoYXQKKyAgICAgICAgICAgICAgICB0aGlzIGRvZXNuJ3QgZGVsZXRlIHRoZSB0cmFjZSAtIGl0J3Mgc3RpbGwKKyAgICAgICAgICAgICAgICB0aGVyZSBpbiB+L2x0dG5nLXRyYWNlcyk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGx0dG5nIGRlc3Ryb3kKKyAgICAgU2Vzc2lvbiBhdXRvLTIwMTkwMzAzLTAyMTk0MyBkZXN0cm95ZWQgYXQgL2hvbWUvcm9vdAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtYW51YWxseS1jb3B5aW5nLWEtdHJhY2UtdG8tdGhlLWhvc3QtYW5kLXZpZXdpbmctaXQtaW4tZWNsaXBzZSc+CisgICAgICAgICAgICA8dGl0bGU+TWFudWFsbHkgY29weWluZyBhIHRyYWNlIHRvIHRoZSBob3N0IGFuZCB2aWV3aW5nIGl0IGluIEVjbGlwc2UgKGkuZS4gdXNpbmcgRWNsaXBzZSB3aXRob3V0IG5ldHdvcmsgc3VwcG9ydCk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYWxyZWFkeSBoYXZlIGFuIExUVG5nIHRyYWNlIG9uIGEgcmVtb3RlIHRhcmdldCBhbmQKKyAgICAgICAgICAgICAgICB3b3VsZCBsaWtlIHRvIHZpZXcgaXQgaW4gRWNsaXBzZSBvbiB0aGUgaG9zdCwgeW91IGNhbiBlYXNpbHkKKyAgICAgICAgICAgICAgICBjb3B5IGl0IGZyb20gdGhlIHRhcmdldCB0byB0aGUgaG9zdCBhbmQgaW1wb3J0IGl0IGludG8KKyAgICAgICAgICAgICAgICBFY2xpcHNlIHRvIHZpZXcgaXQgdXNpbmcgdGhlIExUVG5nIEVjbGlwc2UgcGx1Zy1pbiBhbHJlYWR5CisgICAgICAgICAgICAgICAgYnVuZGxlZCBpbiB0aGUgRWNsaXBzZSAoSnVubyBTUjEgb3IgZ3JlYXRlcikuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzaW5nIHRoZSB0cmFjZSB3ZSBjcmVhdGVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLCBhcmNoaXZlCisgICAgICAgICAgICAgICAgaXQgYW5kIGNvcHkgaXQgdG8geW91ciBob3N0IHN5c3RlbToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fi9sdHRuZy10cmFjZXMjIHRhciB6Y3ZmIGF1dG8tMjAxMjEwMTUtMjMyMTIwLnRhci5neiBhdXRvLTIwMTIxMDE1LTIzMjEyMAorICAgICBhdXRvLTIwMTIxMDE1LTIzMjEyMC8KKyAgICAgYXV0by0yMDEyMTAxNS0yMzIxMjAva2VybmVsLworICAgICBhdXRvLTIwMTIxMDE1LTIzMjEyMC9rZXJuZWwvbWV0YWRhdGEKKyAgICAgYXV0by0yMDEyMTAxNS0yMzIxMjAva2VybmVsL2NoYW5uZWwwXzEKKyAgICAgYXV0by0yMDEyMTAxNS0yMzIxMjAva2VybmVsL2NoYW5uZWwwXzAKKworICAgICAkIHNjcCByb290QDE5Mi4xNjguMS40NzpsdHRuZy10cmFjZXMvYXV0by0yMDEyMTAxNS0yMzIxMjAudGFyLmd6IC4KKyAgICAgcm9vdEAxOTIuMTY4LjEuNDcncyBwYXNzd29yZDoKKyAgICAgYXV0by0yMDEyMTAxNS0yMzIxMjAudGFyLmd6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwJSAxNTY2S0IgICAxLjVNQi9zICAgMDA6MDEKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVW5hcmNoaXZlIGl0IG9uIHRoZSBob3N0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBndW56aXAgLWMgYXV0by0yMDEyMTAxNS0yMzIxMjAudGFyLmd6IHwgdGFyIHh2ZiAtCisgICAgIGF1dG8tMjAxMjEwMTUtMjMyMTIwLworICAgICBhdXRvLTIwMTIxMDE1LTIzMjEyMC9rZXJuZWwvCisgICAgIGF1dG8tMjAxMjEwMTUtMjMyMTIwL2tlcm5lbC9tZXRhZGF0YQorICAgICBhdXRvLTIwMTIxMDE1LTIzMjEyMC9rZXJuZWwvY2hhbm5lbDBfMQorICAgICBhdXRvLTIwMTIxMDE1LTIzMjEyMC9rZXJuZWwvY2hhbm5lbDBfMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBXZSBjYW4gbm93IGltcG9ydCB0aGUgdHJhY2UgaW50byBFY2xpcHNlIGFuZCB2aWV3IGl0OgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZpcnN0LCBzdGFydCBlY2xpcHNlIGFuZCBvcGVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgJ0xUVG5nIEtlcm5lbCcgcGVyc3BlY3RpdmUgYnkgc2VsZWN0aW5nIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbnUgaXRlbToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgV2luZG93IHwgT3BlbiBQZXJzcGVjdGl2ZSB8IE90aGVyLi4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbiB0aGUgZGlhbG9nIGJveCB0aGF0IG9wZW5zLCBzZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICdMVFRuZyBLZXJuZWwnIGZyb20gdGhlIGxpc3QuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CYWNrIGF0IHRoZSBtYWluIG1lbnUsIHNlbGVjdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBtZW51IGl0ZW06CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZpbGUgfCBOZXcgfCBQcm9qZWN0Li4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbiB0aGUgZGlhbG9nIGJveCB0aGF0IG9wZW5zLCBzZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSAnVHJhY2luZyB8IFRyYWNpbmcgUHJvamVjdCcgd2l6YXJkIGFuZCBwcmVzcworICAgICAgICAgICAgICAgICAgICAgICAgJ05leHQ+Jy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkdpdmUgdGhlIHByb2plY3QgYSBuYW1lIGFuZCBwcmVzcworICAgICAgICAgICAgICAgICAgICAgICAgJ0ZpbmlzaCcuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbiB0aGUgJ1Byb2plY3QgRXhwbG9yZXInIHBhbmUgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm9qZWN0IHlvdSBjcmVhdGVkLCByaWdodCBjbGljayBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICdUcmFjZXMnIGl0ZW0uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgJ0ltcG9ydC4uLiIgYW5kIGluIHRoZSBkaWFsb2cKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQncyBkaXNwbGF5ZWQ6PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Ccm93c2UgdGhlIGZpbGVzeXN0ZW0gYW5kIGZpbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QgdGhlICdrZXJuZWwnIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSB0cmFjZQorICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNvcGllZCBmcm9tIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGUuZy4gYXV0by0yMDEyMTAxNS0yMzIxMjAva2VybmVsPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4nQ2hlY2ttYXJrJyB0aGUgZGlyZWN0b3J5IGluIHRoZSB0cmVlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0J3MgZGlzcGxheWVkIGZvciB0aGUgdHJhY2U8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJlbG93IHRoYXQsIHNlbGVjdCAnQ29tbW9uIFRyYWNlIEZvcm1hdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIEtlcm5lbCBUcmFjZScgZm9yIHRoZSAnVHJhY2UgVHlwZSc8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlByZXNzICdGaW5pc2gnIHRvIGNsb3NlIHRoZSBkaWFsb2cKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QmFjayBpbiB0aGUgJ1Byb2plY3QgRXhwbG9yZXInIHBhbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUtY2xpY2sgb24gdGhlICdrZXJuZWwnIGl0ZW0gZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2UgeW91IGp1c3QgaW1wb3J0ZWQgdW5kZXIgJ1RyYWNlcycKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgWW91IHNob3VsZCBub3cgc2VlIHlvdXIgdHJhY2UgZGF0YSBkaXNwbGF5ZWQgZ3JhcGhpY2FsbHkKKyAgICAgICAgICAgICAgICBpbiBzZXZlcmFsIGRpZmZlcmVudCB2aWV3cyBpbiBFY2xpcHNlOgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvbHR0bmdtYWluMC5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI2aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFjY2VzcyBleHRlbnNpdmUgaGVscCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlCisgICAgICAgICAgICAgICAgdGhlIExUVG5nIHBsdWctaW4gdG8gc2VhcmNoIGFuZCBhbmFseXplIGNhcHR1cmVkIHRyYWNlcyB2aWEKKyAgICAgICAgICAgICAgICB0aGUgRWNsaXBzZSBoZWxwIHN5c3RlbToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEhlbHAgfCBIZWxwIENvbnRlbnRzIHwgTFRUbmcgUGx1Zy1pbiBVc2VyIEd1aWRlCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbGxlY3RpbmctYW5kLXZpZXdpbmctYS10cmFjZS1pbi1lY2xpcHNlJz4KKyAgICAgICAgICAgIDx0aXRsZT5Db2xsZWN0aW5nIGFuZCB2aWV3aW5nIGEgdHJhY2UgaW4gRWNsaXBzZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBvbiBjb2xsZWN0aW5nIHRyYWNlcyByZW1vdGVseSBkb2Vzbid0IGN1cnJlbnRseQorICAgICAgICAgICAgICAgIHdvcmsgYmVjYXVzZSBvZiBFY2xpcHNlICdSU0UnIGNvbm5lY3Rpdml0eSBwcm9ibGVtcy4gTWFudWFsbHkKKyAgICAgICAgICAgICAgICB0cmFjaW5nIG9uIHRoZSB0YXJnZXQsIGNvcHlpbmcgdGhlIHRyYWNlIGZpbGVzIHRvIHRoZSBob3N0LAorICAgICAgICAgICAgICAgIGFuZCB2aWV3aW5nIHRoZSB0cmFjZSBpbiBFY2xpcHNlIG9uIHRoZSBob3N0IGFzIG91dGxpbmVkIGluCisgICAgICAgICAgICAgICAgcHJldmlvdXMgc3RlcHMgZG9lcyB3b3JrIGhvd2V2ZXIgLSBwbGVhc2UgdXNlIHRoZSBtYW51YWwKKyAgICAgICAgICAgICAgICBzdGVwcyBvdXRsaW5lZCBhYm92ZSB0byB2aWV3IHRyYWNlcyBpbiBFY2xpcHNlLgorICAgICAgICAgICAgPC9ub3RlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiBvcmRlciB0byB0cmFjZSBhIHJlbW90ZSB0YXJnZXQsIHlvdSBhbHNvIG5lZWQgdG8gYWRkCisgICAgICAgICAgICAgICAgYSAndHJhY2luZycgZ3JvdXAgb24gdGhlIHRhcmdldCBhbmQgY29ubmVjdCBhcyBhIHVzZXIKKyAgICAgICAgICAgICAgICB3aG8ncyBwYXJ0IG9mIHRoYXQgZ3JvdXAgZS5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBhZGR1c2VyIHRvbXoKKyAgICAgIyBncm91cGFkZCAtciB0cmFjaW5nCisgICAgICMgdXNlcm1vZCAtYSAtRyB0cmFjaW5nIHRvbXoKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rmlyc3QsIHN0YXJ0IGVjbGlwc2UgYW5kIG9wZW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAnTFRUbmcgS2VybmVsJyBwZXJzcGVjdGl2ZSBieSBzZWxlY3RpbmcgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnUgaXRlbToKKyAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFdpbmRvdyB8IE9wZW4gUGVyc3BlY3RpdmUgfCBPdGhlci4uLgorICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluIHRoZSBkaWFsb2cgYm94IHRoYXQgb3BlbnMsIHNlbGVjdAorICAgICAgICAgICAgICAgICAgICAgICAgJ0xUVG5nIEtlcm5lbCcgZnJvbSB0aGUgbGlzdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJhY2sgYXQgdGhlIG1haW4gbWVudSwgc2VsZWN0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIG1lbnUgaXRlbToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRmlsZSB8IE5ldyB8IFByb2plY3QuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluIHRoZSBkaWFsb2cgYm94IHRoYXQgb3BlbnMsIHNlbGVjdAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlICdUcmFjaW5nIHwgVHJhY2luZyBQcm9qZWN0JyB3aXphcmQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBwcmVzcyAnTmV4dD4nLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R2l2ZSB0aGUgcHJvamVjdCBhIG5hbWUgYW5kIHByZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAnRmluaXNoJy4gVGhhdCBzaG91bGQgcmVzdWx0IGluIGFuIGVudHJ5IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2plY3QnIHN1YndpbmRvdy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluIHRoZSAnQ29udHJvbCcgc3Vid2luZG93IGp1c3QgYmVsb3cKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0LCBwcmVzcyAnTmV3IENvbm5lY3Rpb24nLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkIGEgbmV3IGNvbm5lY3Rpb24sIGdpdmluZyBpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lIG9yIElQIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlByb3ZpZGUgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZAorICAgICAgICAgICAgICAgICAgICAgICAgb2YgYSBxdWFsaWZpZWQgdXNlciAoYSBtZW1iZXIgb2YgdGhlICd0cmFjaW5nJyBncm91cCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIHJvb3QgYWNjb3VudCBvbiB0aGUgdGFyZ2V0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UHJvdmlkZSBhcHByb3ByaWF0ZSBhbnN3ZXJzIHRvIHdoYXRldmVyCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlzIGFza2VkIGZvciBlLmcuICdzZWN1cmUgc3RvcmFnZSBwYXNzd29yZCcKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBiZSBhbnl0aGluZyB5b3Ugd2FudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBnZXQgYW4gJ1JTRSBFcnJvcicgaXQgbWF5IGJlIGR1ZSB0byBwcm94aWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgbWF5IGJlIHBvc3NpYmxlIHRvIGdldCBhcm91bmQgdGhlIHByb2JsZW0gYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5naW5nIHRoZSBmb2xsb3dpbmcgc2V0dGluZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgV2luZG93IHwgUHJlZmVyZW5jZXMgfCBOZXR3b3JrIENvbm5lY3Rpb25zCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBTd2l0Y2ggJ0FjdGl2ZSBQcm92aWRlcicgdG8gJ0RpcmVjdCcKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbGx0bmctZG9jdW1lbnRhdGlvbic+CisgICAgICAgIDx0aXRsZT5Eb2N1bWVudGF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGUgcHJpbWFyeSBMVFRuZyBEb2N1bWVudGF0aW9uIG9uIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9sdHRuZy5vcmcvZG9jcy8nPkxUVG5nIERvY3VtZW50YXRpb248L3VsaW5rPgorICAgICAgICAgICAgc2l0ZS4KKyAgICAgICAgICAgIFRoZSBkb2N1bWVudGF0aW9uIG9uIHRoaXMgc2l0ZSBpcyBhcHByb3ByaWF0ZSBmb3IgaW50ZXJtZWRpYXRlIHRvCisgICAgICAgICAgICBhZHZhbmNlZCBzb2Z0d2FyZSBkZXZlbG9wZXJzIHdobyBhcmUgd29ya2luZyBpbiBhIExpbnV4IGVudmlyb25tZW50CisgICAgICAgICAgICBhbmQgYXJlIGludGVyZXN0ZWQgaW4gZWZmaWNpZW50IHNvZnR3YXJlIHRyYWNpbmcuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBMVFRuZyBpbiBnZW5lcmFsLCB2aXNpdCB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9sdHRuZy5vcmcvbHR0bmcyLjAnPkxUVG5nIFByb2plY3Q8L3VsaW5rPgorICAgICAgICAgICAgc2l0ZS4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBhICJHZXR0aW5nIFN0YXJ0ZWQiIGxpbmsgb24gdGhpcyBzaXRlIHRoYXQgdGFrZXMKKyAgICAgICAgICAgIHlvdSB0byBhbiBMVFRuZyBRdWljayBTdGFydC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRmluYWxseSwgeW91IGNhbiBhY2Nlc3MgZXh0ZW5zaXZlIGhlbHAgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZQorICAgICAgICAgICAgdGhlIExUVG5nIHBsdWctaW4gdG8gc2VhcmNoIGFuZCBhbmFseXplIGNhcHR1cmVkIHRyYWNlcyB2aWEgdGhlCisgICAgICAgICAgICBFY2xpcHNlIGhlbHAgc3lzdGVtOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBIZWxwIHwgSGVscCBDb250ZW50cyB8IExUVG5nIFBsdWctaW4gVXNlciBHdWlkZQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncHJvZmlsZS1tYW51YWwtYmxrdHJhY2UnPgorICAgIDx0aXRsZT5ibGt0cmFjZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgYmxrdHJhY2UgaXMgYSB0b29sIGZvciB0cmFjaW5nIGFuZCByZXBvcnRpbmcgbG93LWxldmVsIGRpc2sgSS9PLgorICAgICAgICBibGt0cmFjZSBwcm92aWRlcyB0aGUgdHJhY2luZyBoYWxmIG9mIHRoZSBlcXVhdGlvbjsgaXRzIG91dHB1dCBjYW4KKyAgICAgICAgYmUgcGlwZWQgaW50byB0aGUgYmxrcGFyc2UgcHJvZ3JhbSwgd2hpY2ggcmVuZGVycyB0aGUgZGF0YSBpbiBhCisgICAgICAgIGh1bWFuLXJlYWRhYmxlIGZvcm0gYW5kIGRvZXMgc29tZSBiYXNpYyBhbmFseXNpczoKKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nYmxrdHJhY2Utc2V0dXAnPgorICAgICAgICA8dGl0bGU+U2V0dXA8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIHRoaXMgc2VjdGlvbiwgd2UnbGwgYXNzdW1lIHlvdSd2ZSBhbHJlYWR5IHBlcmZvcm1lZCB0aGUKKyAgICAgICAgICAgIGJhc2ljIHNldHVwIG91dGxpbmVkIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Byb2ZpbGUtbWFudWFsLWdlbmVyYWwtc2V0dXAnPkdlbmVyYWwgU2V0dXA8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgYmxrdHJhY2UgaXMgYW4gYXBwbGljYXRpb24gdGhhdCBydW5zIG9uIHRoZSB0YXJnZXQgc3lzdGVtLgorICAgICAgICAgICAgWW91IGNhbiBydW4gdGhlIGVudGlyZSBibGt0cmFjZSBhbmQgYmxrcGFyc2UgcGlwZWxpbmUgb24gdGhlCisgICAgICAgICAgICB0YXJnZXQsIG9yIHlvdSBjYW4gcnVuIGJsa3RyYWNlIGluICdsaXN0ZW4nIG1vZGUgb24gdGhlIHRhcmdldAorICAgICAgICAgICAgYW5kIGhhdmUgYmxrdHJhY2UgYW5kIGJsa3BhcnNlIGNvbGxlY3QgYW5kIGFuYWx5emUgdGhlIGRhdGEgb24KKyAgICAgICAgICAgIHRoZSBob3N0IChzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmctYmxrdHJhY2UtcmVtb3RlbHknPlVzaW5nIGJsa3RyYWNlIFJlbW90ZWx5PC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gYmVsb3cpLgorICAgICAgICAgICAgRm9yIHRoZSByZXN0IG9mIHRoaXMgc2VjdGlvbiB3ZSBhc3N1bWUgeW91J3ZlIHNzaCdlZCB0byB0aGUKKyAgICAgICAgICAgIGhvc3QgYW5kIHdpbGwgYmUgcnVubmluZyBibGtyYWNlIG9uIHRoZSB0YXJnZXQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYmxrdHJhY2UtYmFzaWMtdXNhZ2UnPgorICAgICAgICA8dGl0bGU+QmFzaWMgVXNhZ2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gcmVjb3JkIGEgdHJhY2UsIHNpbXBseSBydW4gdGhlICdibGt0cmFjZScgY29tbWFuZCwgZ2l2aW5nIGl0CisgICAgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgYmxvY2sgZGV2aWNlIHlvdSB3YW50IHRvIHRyYWNlIGFjdGl2aXR5IG9uOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGJsa3RyYWNlIC9kZXYvc2RjCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJbiBhbm90aGVyIHNoZWxsLCBleGVjdXRlIGEgd29ya2xvYWQgeW91IHdhbnQgdG8gdHJhY2UuCisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6L21lZGlhL3NkYyMgcm0gbGludXgtMi42LjE5LjIudGFyLmJ6Mjsgd2dldCA8dWxpbmsgdXJsPSdodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6Mic+aHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejI8L3VsaW5rPjsgc3luYworICAgICBDb25uZWN0aW5nIHRvIGRvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnICgxNDAuMjExLjE2OS41OTo4MCkKKyAgICAgbGludXgtMi42LjE5LjIudGFyLmIgMTAwJSB8KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKnwgNDE3MjdrICAwOjAwOjAwIEVUQQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgUHJlc3MgQ3RybC1DIGluIHRoZSBibGt0cmFjZSBzaGVsbCB0byBzdG9wIHRoZSB0cmFjZS4gSXQgd2lsbAorICAgICAgICAgICAgZGlzcGxheSBob3cgbWFueSBldmVudHMgd2VyZSBsb2dnZWQsIGFsb25nIHdpdGggdGhlIHBlci1jcHUgZmlsZQorICAgICAgICAgICAgc2l6ZXMgKGJsa3RyYWNlIHJlY29yZHMgdHJhY2VzIGluIHBlci1jcHUga2VybmVsIGJ1ZmZlcnMgYW5kCisgICAgICAgICAgICBzaW1wbHkgZHVtcHMgdGhlbSB0byB1c2Vyc3BhY2UgZm9yIGJsa3BhcnNlIHRvIG1lcmdlIGFuZCBzb3J0CisgICAgICAgICAgICBsYXRlcikuCisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIF5DPT09IHNkYyA9PT0KKyAgICAgIENQVSAgMDogICAgICAgICAgICAgICAgIDcwODIgZXZlbnRzLCAgICAgIDMzMiBLaUIgZGF0YQorICAgICAgQ1BVICAxOiAgICAgICAgICAgICAgICAgMTU3OCBldmVudHMsICAgICAgIDc0IEtpQiBkYXRhCisgICAgICBUb3RhbDogICAgICAgICAgICAgICAgICA4NjYwIGV2ZW50cyAoZHJvcHBlZCAwKSwgICAgICA0MDYgS2lCIGRhdGEKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIElmIHlvdSBleGFtaW5lIHRoZSBmaWxlcyBzYXZlZCB0byBkaXNrLCB5b3Ugc2VlIG11bHRpcGxlIGZpbGVzLAorICAgICAgICAgICAgb25lIHBlciBDUFUgYW5kIHdpdGggdGhlIGRldmljZSBuYW1lIGFzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgZmlsZW5hbWU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgbHMgLWFsCisgICAgIGRyd3hyLXhyLXggICAgNiByb290ICAgICByb290ICAgICAgICAgIDEwMjQgT2N0IDI3IDIyOjM5IC4KKyAgICAgZHJ3eHItc3IteCAgICA0IHJvb3QgICAgIHJvb3QgICAgICAgICAgMTAyNCBPY3QgMjYgMTg6MjQgLi4KKyAgICAgLXJ3LXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgIDMzOTkzOCBPY3QgMjcgMjI6NDAgc2RjLmJsa3RyYWNlLjAKKyAgICAgLXJ3LXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICA3NTc1MyBPY3QgMjcgMjI6NDAgc2RjLmJsa3RyYWNlLjEKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRvIHZpZXcgdGhlIHRyYWNlIGV2ZW50cywgc2ltcGx5IGludm9rZSAnYmxrcGFyc2UnIGluIHRoZQorICAgICAgICAgICAgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHRyYWNlIGZpbGVzLCBnaXZpbmcgaXQgdGhlIGRldmljZSBuYW1lCisgICAgICAgICAgICB0aGF0IGZvcm1zIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBmaWxlbmFtZXM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgYmxrcGFyc2Ugc2RjCisKKyAgICAgIDgsMzIgICAxICAgICAgICAxICAgICAwLjAwMDAwMDAwMCAgMTIyNSAgUSAgV1MgMzQxNzA0OCArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAgMiAgICAgMC4wMDAwMjUyMTMgIDEyMjUgIEcgIFdTIDM0MTcwNDggKyA4IFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgIDMgICAgIDAuMDAwMDMzMzg0ICAxMjI1ICBQICAgTiBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgICA0ICAgICAwLjAwMDA0MzMwMSAgMTIyNSAgSSAgV1MgMzQxNzA0OCArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICAgMC4wMDAwNTcyNzAgICAgIDAgIG0gICBOIGNmcTEyMjUgaW5zZXJ0X3JlcXVlc3QKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgICAwLjAwMDA2NDgxMyAgICAgMCAgbSAgIE4gY2ZxMTIyNSBhZGRfdG9fcnIKKyAgICAgIDgsMzIgICAxICAgICAgICA1ICAgICAwLjAwMDA3NjMzNiAgMTIyNSAgVSAgIE4gW2piZDIvc2RjLThdIDEKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgICAwLjAwMDA4ODU1OSAgICAgMCAgbSAgIE4gY2ZxIHdvcmtsb2FkIHNsaWNlOjE1MAorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgIDAuMDAwMDk3MzU5ICAgICAwICBtICAgTiBjZnExMjI1IHNldF9hY3RpdmUgd2xfcHJpbzowIHdsX3R5cGU6MQorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgIDAuMDAwMTA0MDYzICAgICAwICBtICAgTiBjZnExMjI1IE5vdCBpZGxpbmcuIHN0LT5jb3VudDoxCisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICAgMC4wMDAxMTI1ODQgICAgIDAgIG0gICBOIGNmcTEyMjUgZmlmbz0gIChudWxsKQorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgIDAuMDAwMTE4NzMwICAgICAwICBtICAgTiBjZnExMjI1IGRpc3BhdGNoX2luc2VydAorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgIDAuMDAwMTI3MzkwICAgICAwICBtICAgTiBjZnExMjI1IGRpc3BhdGNoZWQgYSByZXF1ZXN0CisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICAgMC4wMDAxMzM1MzYgICAgIDAgIG0gICBOIGNmcTEyMjUgYWN0aXZhdGUgcnEsIGRydj0xCisgICAgICA4LDMyICAgMSAgICAgICAgNiAgICAgMC4wMDAxMzY4ODkgIDEyMjUgIEQgIFdTIDM0MTcwNDggKyA4IFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgIDcgICAgIDAuMDAwMzYwMzgxICAxMjI1ICBRICBXUyAzNDE3MDU2ICsgOCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgICA4ICAgICAwLjAwMDM3NzQyMiAgMTIyNSAgRyAgV1MgMzQxNzA1NiArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAgOSAgICAgMC4wMDAzODg4NzYgIDEyMjUgIFAgICBOIFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgMTAgICAgIDAuMDAwMzk3ODg2ICAxMjI1ICBRICBXUyAzNDE3MDY0ICsgOCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgIDExICAgICAwLjAwMDQwNDgwMCAgMTIyNSAgTSAgV1MgMzQxNzA2NCArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAxMiAgICAgMC4wMDA0MTIzNDMgIDEyMjUgIFEgIFdTIDM0MTcwNzIgKyA4IFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgMTMgICAgIDAuMDAwNDE2NTMzICAxMjI1ICBNICBXUyAzNDE3MDcyICsgOCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgIDE0ICAgICAwLjAwMDQyMjEyMSAgMTIyNSAgUSAgV1MgMzQxNzA4MCArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAxNSAgICAgMC4wMDA0MjUxOTQgIDEyMjUgIE0gIFdTIDM0MTcwODAgKyA4IFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgMTYgICAgIDAuMDAwNDMxOTY4ICAxMjI1ICBRICBXUyAzNDE3MDg4ICsgOCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgIDE3ICAgICAwLjAwMDQzNTI1MSAgMTIyNSAgTSAgV1MgMzQxNzA4OCArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAxOCAgICAgMC4wMDA0NDAyNzkgIDEyMjUgIFEgIFdTIDM0MTcwOTYgKyA4IFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgMTkgICAgIDAuMDAwNDQzOTExICAxMjI1ICBNICBXUyAzNDE3MDk2ICsgOCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgIDIwICAgICAwLjAwMDQ1MDMzNiAgMTIyNSAgUSAgV1MgMzQxNzEwNCArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAyMSAgICAgMC4wMDA0NTQwMzggIDEyMjUgIE0gIFdTIDM0MTcxMDQgKyA4IFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgMjIgICAgIDAuMDAwNDYyMDcwICAxMjI1ICBRICBXUyAzNDE3MTEyICsgOCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgIDIzICAgICAwLjAwMDQ2NTQyMiAgMTIyNSAgTSAgV1MgMzQxNzExMiArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAyNCAgICAgMC4wMDA0NzQyMjIgIDEyMjUgIEkgIFdTIDM0MTcwNTYgKyA2NCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgICAwLjAwMDQ4MzAyMiAgICAgMCAgbSAgIE4gY2ZxMTIyNSBpbnNlcnRfcmVxdWVzdAorICAgICAgOCwzMiAgIDEgICAgICAgMjUgICAgIDAuMDAwNDg5NzI3ICAxMjI1ICBVICAgTiBbamJkMi9zZGMtOF0gMQorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgIDAuMDAwNDk4NDU3ICAgICAwICBtICAgTiBjZnExMjI1IE5vdCBpZGxpbmcuIHN0LT5jb3VudDoxCisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICAgMC4wMDA1MDM3NjUgICAgIDAgIG0gICBOIGNmcTEyMjUgZGlzcGF0Y2hfaW5zZXJ0CisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICAgMC4wMDA1MTI5MTQgICAgIDAgIG0gICBOIGNmcTEyMjUgZGlzcGF0Y2hlZCBhIHJlcXVlc3QKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgICAwLjAwMDUxODg1MSAgICAgMCAgbSAgIE4gY2ZxMTIyNSBhY3RpdmF0ZSBycSwgZHJ2PTIKKyAgICAgIC4KKyAgICAgIC4KKyAgICAgIC4KKyAgICAgIDgsMzIgICAwICAgICAgICAwICAgIDU4LjUxNTAwNjEzOCAgICAgMCAgbSAgIE4gY2ZxMzU1MSBjb21wbGV0ZSBycW5vaWRsZSAxCisgICAgICA4LDMyICAgMCAgICAgMjAyNCAgICA1OC41MTY2MDMyNjkgICAgIDMgIEMgIFdTIDMxNTY5OTIgKyAxNiBbMF0KKyAgICAgIDgsMzIgICAwICAgICAgICAwICAgIDU4LjUxNjYyNjczNiAgICAgMCAgbSAgIE4gY2ZxMzU1MSBjb21wbGV0ZSBycW5vaWRsZSAxCisgICAgICA4LDMyICAgMCAgICAgICAgMCAgICA1OC41MTY2MzQ1NTggICAgIDAgIG0gICBOIGNmcTM1NTEgYXJtX2lkbGU6IDggZ3JvdXBfaWRsZTogMAorICAgICAgOCwzMiAgIDAgICAgICAgIDAgICAgNTguNTE2NjM2OTMzICAgICAwICBtICAgTiBjZnEgc2NoZWR1bGUgZGlzcGF0Y2gKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgIDU4LjUxNjk3MTYxMyAgICAgMCAgbSAgIE4gY2ZxMzU1MSBzbGljZSBleHBpcmVkIHQ9MAorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgNTguNTE2OTgyMDg5ICAgICAwICBtICAgTiBjZnEzNTUxIHNsX3VzZWQ9MTMgZGlzcD02IGNoYXJnZT0xMyBpb3BzPTAgc2VjdD04MAorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgNTguNTE2OTg1NTExICAgICAwICBtICAgTiBjZnEzNTUxIGRlbF9mcm9tX3JyCisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICA1OC41MTY5OTA4MTkgICAgIDAgIG0gICBOIGNmcTM1NTEgcHV0X3F1ZXVlCisKKyAgICAgQ1BVMCAoc2RjKToKKyAgICAgIFJlYWRzIFF1ZXVlZDogICAgICAgICAgIDAsICAgICAgICAwS2lCCSBXcml0ZXMgUXVldWVkOiAgICAgICAgIDMzMSwgICAyNiwyODRLaUIKKyAgICAgIFJlYWQgRGlzcGF0Y2hlczogICAgICAgIDAsICAgICAgICAwS2lCCSBXcml0ZSBEaXNwYXRjaGVzOiAgICAgIDQ4NSwgICA0MCw0ODRLaUIKKyAgICAgIFJlYWRzIFJlcXVldWVkOiAgICAgICAgIDAJCSBXcml0ZXMgUmVxdWV1ZWQ6ICAgICAgICAgMAorICAgICAgUmVhZHMgQ29tcGxldGVkOiAgICAgICAgMCwgICAgICAgIDBLaUIJIFdyaXRlcyBDb21wbGV0ZWQ6ICAgICAgNTExLCAgIDQxLDAwMEtpQgorICAgICAgUmVhZCBNZXJnZXM6ICAgICAgICAgICAgMCwgICAgICAgIDBLaUIJIFdyaXRlIE1lcmdlczogICAgICAgICAgIDEzLCAgICAgIDE2MEtpQgorICAgICAgUmVhZCBkZXB0aDogICAgICAgICAgICAgMCAgICAgICAgCSBXcml0ZSBkZXB0aDogICAgICAgICAgICAgMgorICAgICAgSU8gdW5wbHVnczogICAgICAgICAgICAyMyAgICAgICAgCSBUaW1lciB1bnBsdWdzOiAgICAgICAgICAgMAorICAgICBDUFUxIChzZGMpOgorICAgICAgUmVhZHMgUXVldWVkOiAgICAgICAgICAgMCwgICAgICAgIDBLaUIJIFdyaXRlcyBRdWV1ZWQ6ICAgICAgICAgMjQ5LCAgIDE1LDgwMEtpQgorICAgICAgUmVhZCBEaXNwYXRjaGVzOiAgICAgICAgMCwgICAgICAgIDBLaUIJIFdyaXRlIERpc3BhdGNoZXM6ICAgICAgIDQyLCAgICAxLDYwMEtpQgorICAgICAgUmVhZHMgUmVxdWV1ZWQ6ICAgICAgICAgMAkJIFdyaXRlcyBSZXF1ZXVlZDogICAgICAgICAwCisgICAgICBSZWFkcyBDb21wbGV0ZWQ6ICAgICAgICAwLCAgICAgICAgMEtpQgkgV3JpdGVzIENvbXBsZXRlZDogICAgICAgMTYsICAgIDEsMDg0S2lCCisgICAgICBSZWFkIE1lcmdlczogICAgICAgICAgICAwLCAgICAgICAgMEtpQgkgV3JpdGUgTWVyZ2VzOiAgICAgICAgICAgNDAsICAgICAgMjc2S2lCCisgICAgICBSZWFkIGRlcHRoOiAgICAgICAgICAgICAwICAgICAgICAJIFdyaXRlIGRlcHRoOiAgICAgICAgICAgICAyCisgICAgICBJTyB1bnBsdWdzOiAgICAgICAgICAgIDMwICAgICAgICAJIFRpbWVyIHVucGx1Z3M6ICAgICAgICAgICAxCisKKyAgICAgVG90YWwgKHNkYyk6CisgICAgICBSZWFkcyBRdWV1ZWQ6ICAgICAgICAgICAwLCAgICAgICAgMEtpQgkgV3JpdGVzIFF1ZXVlZDogICAgICAgICA1ODAsICAgNDIsMDg0S2lCCisgICAgICBSZWFkIERpc3BhdGNoZXM6ICAgICAgICAwLCAgICAgICAgMEtpQgkgV3JpdGUgRGlzcGF0Y2hlczogICAgICA1MjcsICAgNDIsMDg0S2lCCisgICAgICBSZWFkcyBSZXF1ZXVlZDogICAgICAgICAwCQkgV3JpdGVzIFJlcXVldWVkOiAgICAgICAgIDAKKyAgICAgIFJlYWRzIENvbXBsZXRlZDogICAgICAgIDAsICAgICAgICAwS2lCCSBXcml0ZXMgQ29tcGxldGVkOiAgICAgIDUyNywgICA0MiwwODRLaUIKKyAgICAgIFJlYWQgTWVyZ2VzOiAgICAgICAgICAgIDAsICAgICAgICAwS2lCCSBXcml0ZSBNZXJnZXM6ICAgICAgICAgICA1MywgICAgICA0MzZLaUIKKyAgICAgIElPIHVucGx1Z3M6ICAgICAgICAgICAgNTMgICAgICAgIAkgVGltZXIgdW5wbHVnczogICAgICAgICAgIDEKKworICAgICBUaHJvdWdocHV0IChSL1cpOiAwS2lCL3MgLyA3MTlLaUIvcworICAgICBFdmVudHMgKHNkYyk6IDYsNTkyIGVudHJpZXMKKyAgICAgU2tpcHM6IDAgZm9yd2FyZCAoMCAtICAgMC4wJSkKKyAgICAgSW5wdXQgZmlsZSBzZGMuYmxrdHJhY2UuMCBhZGRlZAorICAgICBJbnB1dCBmaWxlIHNkYy5ibGt0cmFjZS4xIGFkZGVkCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgcmVwb3J0IHNob3dzIGVhY2ggZXZlbnQgdGhhdCB3YXMgZm91bmQgaW4gdGhlIGJsa3RyYWNlIGRhdGEsCisgICAgICAgICAgICBhbG9uZyB3aXRoIGEgc3VtbWFyeSBvZiB0aGUgb3ZlcmFsbCBibG9jayBJL08gdHJhZmZpYyBkdXJpbmcKKyAgICAgICAgICAgIHRoZSBydW4uIFlvdSBjYW4gbG9vayBhdCB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi8xL2Jsa3BhcnNlJz5ibGtwYXJzZTwvdWxpbms+CisgICAgICAgICAgICBtYW5wYWdlIHRvIGxlYXJuIHRoZQorICAgICAgICAgICAgbWVhbmluZyBvZiBlYWNoIGZpZWxkIGRpc3BsYXllZCBpbiB0aGUgdHJhY2UgbGlzdGluZy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdibGt0cmFjZS1saXZlLW1vZGUnPgorICAgICAgICAgICAgPHRpdGxlPkxpdmUgTW9kZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIGJsa3RyYWNlIGFuZCBibGtwYXJzZSBhcmUgZGVzaWduZWQgZnJvbSB0aGUgZ3JvdW5kIHVwIHRvCisgICAgICAgICAgICAgICAgYmUgYWJsZSB0byBvcGVyYXRlIHRvZ2V0aGVyIGluIGEgJ3BpcGUgbW9kZScgd2hlcmUgdGhlCisgICAgICAgICAgICAgICAgc3Rkb3V0IG9mIGJsa3RyYWNlIGNhbiBiZSBmZWQgZGlyZWN0bHkgaW50byB0aGUgc3RkaW4gb2YKKyAgICAgICAgICAgICAgICBibGtwYXJzZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgYmxrdHJhY2UgL2Rldi9zZGMgLW8gLSB8IGJsa3BhcnNlIC1pIC0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhpcyBlbmFibGVzIGxvbmctbGl2ZWQgdHJhY2luZyBzZXNzaW9ucyB0byBydW4gd2l0aG91dAorICAgICAgICAgICAgICAgIHdyaXRpbmcgYW55dGhpbmcgdG8gZGlzaywgYW5kIGFsbG93cyB0aGUgdXNlciB0byBsb29rIGZvcgorICAgICAgICAgICAgICAgIGNlcnRhaW4gY29uZGl0aW9ucyBpbiB0aGUgdHJhY2UgZGF0YSBpbiAncmVhbC10aW1lJyBieQorICAgICAgICAgICAgICAgIHZpZXdpbmcgdGhlIHRyYWNlIG91dHB1dCBhcyBpdCBzY3JvbGxzIGJ5IG9uIHRoZSBzY3JlZW4gb3IKKyAgICAgICAgICAgICAgICBieSBwYXNzaW5nIGl0IGFsb25nIHRvIHlldCBhbm90aGVyIHByb2dyYW0gaW4gdGhlIHBpcGVsaW5lCisgICAgICAgICAgICAgICAgc3VjaCBhcyBncmVwIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IGFuZCBjYXB0dXJlCisgICAgICAgICAgICAgICAgY29uZGl0aW9ucyBvZiBpbnRlcmVzdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlcmUncyBhY3R1YWxseSBhbm90aGVyIGJsa3RyYWNlIGNvbW1hbmQgdGhhdCBpbXBsZW1lbnRzCisgICAgICAgICAgICAgICAgdGhlIGFib3ZlIHBpcGVsaW5lIGFzIGEgc2luZ2xlIGNvbW1hbmQsIHNvIHRoZSB1c2VyIGRvZXNuJ3QKKyAgICAgICAgICAgICAgICBoYXZlIHRvIGJvdGhlciB0eXBpbmcgaW4gdGhlIGFib3ZlIGNvbW1hbmQgc2VxdWVuY2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGJ0cmFjZSAvZGV2L3NkYworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1ibGt0cmFjZS1yZW1vdGVseSc+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgYmxrdHJhY2UgUmVtb3RlbHk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIGJsa3RyYWNlIHRyYWNlcyBibG9jayBJL08gYW5kIGF0IHRoZSBzYW1lIHRpbWUKKyAgICAgICAgICAgICAgICBub3JtYWxseSB3cml0ZXMgaXRzIHRyYWNlIGRhdGEgdG8gYSBibG9jayBkZXZpY2UsIGFuZAorICAgICAgICAgICAgICAgIGluIGdlbmVyYWwgYmVjYXVzZSBpdCdzIG5vdCByZWFsbHkgYSBncmVhdCBpZGVhIHRvIG1ha2UKKyAgICAgICAgICAgICAgICB0aGUgZGV2aWNlIGJlaW5nIHRyYWNlZCB0aGUgc2FtZSBhcyB0aGUgZGV2aWNlIHRoZSB0cmFjZXIKKyAgICAgICAgICAgICAgICB3cml0ZXMgdG8sIGJsa3RyYWNlIHByb3ZpZGVzIGEgd2F5IHRvIHRyYWNlIHdpdGhvdXQKKyAgICAgICAgICAgICAgICBwZXJ0dXJiaW5nIHRoZSB0cmFjZWQgZGV2aWNlIGF0IGFsbCBieSBwcm92aWRpbmcgbmF0aXZlCisgICAgICAgICAgICAgICAgc3VwcG9ydCBmb3Igc2VuZGluZyBhbGwgdHJhY2UgZGF0YSBvdmVyIHRoZSBuZXR3b3JrLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBoYXZlIGJsa3RyYWNlIG9wZXJhdGUgaW4gdGhpcyBtb2RlLCBzdGFydCBibGt0cmFjZSBvbgorICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQgc3lzdGVtIGJlaW5nIHRyYWNlZCB3aXRoIHRoZSAtbCBvcHRpb24sIGFsb25nIHdpdGgKKyAgICAgICAgICAgICAgICB0aGUgZGV2aWNlIHRvIHRyYWNlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBibGt0cmFjZSAtbCAvZGV2L3NkYworICAgICBzZXJ2ZXI6IHdhaXRpbmcgZm9yIGNvbm5lY3Rpb25zLi4uCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE9uIHRoZSBob3N0IHN5c3RlbSwgdXNlIHRoZSAtaCBvcHRpb24gdG8gY29ubmVjdCB0byB0aGUKKyAgICAgICAgICAgICAgICB0YXJnZXQgc3lzdGVtLCBhbHNvIHBhc3NpbmcgaXQgdGhlIGRldmljZSB0byB0cmFjZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYmxrdHJhY2UgLWQgL2Rldi9zZGMgLWggMTkyLjE2OC4xLjQzCisgICAgIGJsa3RyYWNlOiBjb25uZWN0aW5nIHRvIDE5Mi4xNjguMS40MworICAgICBibGt0cmFjZTogY29ubmVjdGVkIQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBPbiB0aGUgdGFyZ2V0IHN5c3RlbSwgeW91IHNob3VsZCBzZWUgdGhpczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHNlcnZlcjogY29ubmVjdGlvbiBmcm9tIDE5Mi4xNjguMS40MworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJbiBhbm90aGVyIHNoZWxsLCBleGVjdXRlIGEgd29ya2xvYWQgeW91IHdhbnQgdG8gdHJhY2UuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5Oi9tZWRpYS9zZGMjIHJtIGxpbnV4LTIuNi4xOS4yLnRhci5iejI7IHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz47IHN5bmMKKyAgICAgQ29ubmVjdGluZyB0byBkb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZyAoMTQwLjIxMS4xNjkuNTk6ODApCisgICAgIGxpbnV4LTIuNi4xOS4yLnRhci5iIDEwMCUgfCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip8IDQxNzI3ayAgMDowMDowMCBFVEEKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgV2hlbiBpdCdzIGRvbmUsIGRvIGEgQ3RybC1DIG9uIHRoZSBob3N0IHN5c3RlbSB0bworICAgICAgICAgICAgICAgIHN0b3AgdGhlIHRyYWNlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgXkM9PT0gc2RjID09PQorICAgICAgQ1BVICAwOiAgICAgICAgICAgICAgICAgNzY5MSBldmVudHMsICAgICAgMzYxIEtpQiBkYXRhCisgICAgICBDUFUgIDE6ICAgICAgICAgICAgICAgICA0MTA5IGV2ZW50cywgICAgICAxOTMgS2lCIGRhdGEKKyAgICAgIFRvdGFsOiAgICAgICAgICAgICAgICAgMTE4MDAgZXZlbnRzIChkcm9wcGVkIDApLCAgICAgIDU1NCBLaUIgZGF0YQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBPbiB0aGUgdGFyZ2V0IHN5c3RlbSwgeW91IHNob3VsZCBhbHNvIHNlZSBhIHRyYWNlCisgICAgICAgICAgICAgICAgc3VtbWFyeSBmb3IgdGhlIHRyYWNlIGp1c3QgZW5kZWQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBzZXJ2ZXI6IGVuZCBvZiBydW4gZm9yIDE5Mi4xNjguMS40MzpzZGMKKyAgICAgPT09IHNkYyA9PT0KKyAgICAgIENQVSAgMDogICAgICAgICAgICAgICAgIDc2OTEgZXZlbnRzLCAgICAgIDM2MSBLaUIgZGF0YQorICAgICAgQ1BVICAxOiAgICAgICAgICAgICAgICAgNDEwOSBldmVudHMsICAgICAgMTkzIEtpQiBkYXRhCisgICAgICBUb3RhbDogICAgICAgICAgICAgICAgIDExODAwIGV2ZW50cyAoZHJvcHBlZCAwKSwgICAgICA1NTQgS2lCIGRhdGEKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIGJsa3RyYWNlIGluc3RhbmNlIG9uIHRoZSBob3N0IHdpbGwgc2F2ZSB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgb3V0cHV0IGluc2lkZSBhIGhvc3RuYW1lLXRpbWVzdGFtcCBkaXJlY3Rvcnk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGxzIC1hbAorICAgICBkcnd4ci14ci14ICAgMTAgcm9vdCAgICAgcm9vdCAgICAgICAgICAxMDI0IE9jdCAyOCAwMjo0MCAuCisgICAgIGRyd3hyLXNyLXggICAgNCByb290ICAgICByb290ICAgICAgICAgIDEwMjQgT2N0IDI2IDE4OjI0IC4uCisgICAgIGRyd3hyLXhyLXggICAgMiByb290ICAgICByb290ICAgICAgICAgIDEwMjQgT2N0IDI4IDAyOjQwIDE5Mi4xNjguMS40My0yMDEyLTEwLTI4LTAyOjQwOjU2CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIGNkIGludG8gdGhhdCBkaXJlY3RvcnkgdG8gc2VlIHRoZSBvdXRwdXQgZmlsZXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGxzIC1sCisgICAgIC1ydy1yLS1yLS0gICAgMSByb290ICAgICByb290ICAgICAgICAzNjkxOTMgT2N0IDI4IDAyOjQ0IHNkYy5ibGt0cmFjZS4wCisgICAgIC1ydy1yLS1yLS0gICAgMSByb290ICAgICByb290ICAgICAgICAxOTcyNzggT2N0IDI4IDAyOjQ0IHNkYy5ibGt0cmFjZS4xCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFuZCBydW4gYmxrcGFyc2Ugb24gdGhlIGhvc3Qgc3lzdGVtIHVzaW5nIHRoZSBkZXZpY2UgbmFtZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYmxrcGFyc2Ugc2RjCisKKyAgICAgIDgsMzIgICAxICAgICAgICAxICAgICAwLjAwMDAwMDAwMCAgMTI2MyAgUSAgUk0gNjAxNiArIDggW2xzXQorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgIDAuMDAwMDM2MDM4ICAgICAwICBtICAgTiBjZnExMjYzIGFsbG9jZWQKKyAgICAgIDgsMzIgICAxICAgICAgICAyICAgICAwLjAwMDAzOTM5MCAgMTI2MyAgRyAgUk0gNjAxNiArIDggW2xzXQorICAgICAgOCwzMiAgIDEgICAgICAgIDMgICAgIDAuMDAwMDQ5MTY4ICAxMjYzICBJICBSTSA2MDE2ICsgOCBbbHNdCisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICAgMC4wMDAwNTYxNTIgICAgIDAgIG0gICBOIGNmcTEyNjMgaW5zZXJ0X3JlcXVlc3QKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgICAwLjAwMDA2MTYwMCAgICAgMCAgbSAgIE4gY2ZxMTI2MyBhZGRfdG9fcnIKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgICAwLjAwMDA3NTQ5OCAgICAgMCAgbSAgIE4gY2ZxIHdvcmtsb2FkIHNsaWNlOjMwMAorICAgICAgLgorICAgICAgLgorICAgICAgLgorICAgICAgOCwzMiAgIDAgICAgICAgIDAgICAxNzcuMjY2Mzg1Njk2ICAgICAwICBtICAgTiBjZnExMjY3IGFybV9pZGxlOiA4IGdyb3VwX2lkbGU6IDAKKyAgICAgIDgsMzIgICAwICAgICAgICAwICAgMTc3LjI2NjM4ODE0MCAgICAgMCAgbSAgIE4gY2ZxIHNjaGVkdWxlIGRpc3BhdGNoCisgICAgICA4LDMyICAgMSAgICAgICAgMCAgIDE3Ny4yNjY2NzkyMzkgICAgIDAgIG0gICBOIGNmcTEyNjcgc2xpY2UgZXhwaXJlZCB0PTAKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgMTc3LjI2NjY4OTI5NyAgICAgMCAgbSAgIE4gY2ZxMTI2NyBzbF91c2VkPTkgZGlzcD02IGNoYXJnZT05IGlvcHM9MCBzZWN0PTU2CisgICAgICA4LDMyICAgMSAgICAgICAgMCAgIDE3Ny4yNjY2OTI2NDkgICAgIDAgIG0gICBOIGNmcTEyNjcgZGVsX2Zyb21fcnIKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgMTc3LjI2NjY5NjU2MCAgICAgMCAgbSAgIE4gY2ZxMTI2NyBwdXRfcXVldWUKKworICAgICBDUFUwIChzZGMpOgorICAgICAgUmVhZHMgUXVldWVkOiAgICAgICAgICAgMCwgICAgICAgIDBLaUIJIFdyaXRlcyBRdWV1ZWQ6ICAgICAgICAgMjcwLCAgIDIxLDcwOEtpQgorICAgICAgUmVhZCBEaXNwYXRjaGVzOiAgICAgICA1OSwgICAgMiw2MjhLaUIJIFdyaXRlIERpc3BhdGNoZXM6ICAgICAgNDk1LCAgIDM5LDk2NEtpQgorICAgICAgUmVhZHMgUmVxdWV1ZWQ6ICAgICAgICAgMAkJIFdyaXRlcyBSZXF1ZXVlZDogICAgICAgICAwCisgICAgICBSZWFkcyBDb21wbGV0ZWQ6ICAgICAgIDkwLCAgICAyLDc1MktpQgkgV3JpdGVzIENvbXBsZXRlZDogICAgICA1NDMsICAgNDEsNTk2S2lCCisgICAgICBSZWFkIE1lcmdlczogICAgICAgICAgICAwLCAgICAgICAgMEtpQgkgV3JpdGUgTWVyZ2VzOiAgICAgICAgICAgIDksICAgICAgMzQ0S2lCCisgICAgICBSZWFkIGRlcHRoOiAgICAgICAgICAgICAyICAgICAgICAJIFdyaXRlIGRlcHRoOiAgICAgICAgICAgICAyCisgICAgICBJTyB1bnBsdWdzOiAgICAgICAgICAgIDIwICAgICAgICAJIFRpbWVyIHVucGx1Z3M6ICAgICAgICAgICAxCisgICAgIENQVTEgKHNkYyk6CisgICAgICBSZWFkcyBRdWV1ZWQ6ICAgICAgICAgNjg4LCAgICAyLDc1MktpQgkgV3JpdGVzIFF1ZXVlZDogICAgICAgICAzODEsICAgMjAsNjUyS2lCCisgICAgICBSZWFkIERpc3BhdGNoZXM6ICAgICAgIDMxLCAgICAgIDEyNEtpQgkgV3JpdGUgRGlzcGF0Y2hlczogICAgICAgNTksICAgIDIsMzk2S2lCCisgICAgICBSZWFkcyBSZXF1ZXVlZDogICAgICAgICAwCQkgV3JpdGVzIFJlcXVldWVkOiAgICAgICAgIDAKKyAgICAgIFJlYWRzIENvbXBsZXRlZDogICAgICAgIDAsICAgICAgICAwS2lCCSBXcml0ZXMgQ29tcGxldGVkOiAgICAgICAxMSwgICAgICA3NjRLaUIKKyAgICAgIFJlYWQgTWVyZ2VzOiAgICAgICAgICA1OTgsICAgIDIsMzkyS2lCCSBXcml0ZSBNZXJnZXM6ICAgICAgICAgICA4OCwgICAgICA0NDhLaUIKKyAgICAgIFJlYWQgZGVwdGg6ICAgICAgICAgICAgIDIgICAgICAgIAkgV3JpdGUgZGVwdGg6ICAgICAgICAgICAgIDIKKyAgICAgIElPIHVucGx1Z3M6ICAgICAgICAgICAgNTIgICAgICAgIAkgVGltZXIgdW5wbHVnczogICAgICAgICAgIDAKKworICAgICBUb3RhbCAoc2RjKToKKyAgICAgIFJlYWRzIFF1ZXVlZDogICAgICAgICA2ODgsICAgIDIsNzUyS2lCCSBXcml0ZXMgUXVldWVkOiAgICAgICAgIDY1MSwgICA0MiwzNjBLaUIKKyAgICAgIFJlYWQgRGlzcGF0Y2hlczogICAgICAgOTAsICAgIDIsNzUyS2lCCSBXcml0ZSBEaXNwYXRjaGVzOiAgICAgIDU1NCwgICA0MiwzNjBLaUIKKyAgICAgIFJlYWRzIFJlcXVldWVkOiAgICAgICAgIDAJCSBXcml0ZXMgUmVxdWV1ZWQ6ICAgICAgICAgMAorICAgICAgUmVhZHMgQ29tcGxldGVkOiAgICAgICA5MCwgICAgMiw3NTJLaUIJIFdyaXRlcyBDb21wbGV0ZWQ6ICAgICAgNTU0LCAgIDQyLDM2MEtpQgorICAgICAgUmVhZCBNZXJnZXM6ICAgICAgICAgIDU5OCwgICAgMiwzOTJLaUIJIFdyaXRlIE1lcmdlczogICAgICAgICAgIDk3LCAgICAgIDc5MktpQgorICAgICAgSU8gdW5wbHVnczogICAgICAgICAgICA3MiAgICAgICAgCSBUaW1lciB1bnBsdWdzOiAgICAgICAgICAgMQorCisgICAgIFRocm91Z2hwdXQgKFIvVyk6IDE1S2lCL3MgLyAyMzhLaUIvcworICAgICBFdmVudHMgKHNkYyk6IDksMzAxIGVudHJpZXMKKyAgICAgU2tpcHM6IDAgZm9yd2FyZCAoMCAtICAgMC4wJSkKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IHNob3VsZCBzZWUgdGhlIHRyYWNlIGV2ZW50cyBhbmQgc3VtbWFyeSBqdXN0IGFzCisgICAgICAgICAgICAgICAgeW91IHdvdWxkIGhhdmUgaWYgeW91J2QgcnVuIHRoZSBzYW1lIGNvbW1hbmQgb24gdGhlIHRhcmdldC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0cmFjaW5nLWJsb2NrLWlvLXZpYS1mdHJhY2UnPgorICAgICAgICAgICAgPHRpdGxlPlRyYWNpbmcgQmxvY2sgSS9PIHZpYSAnZnRyYWNlJzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEl0J3MgYWxzbyBwb3NzaWJsZSB0byB0cmFjZSBibG9jayBJL08gdXNpbmcgb25seQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3RoZS10cmFjZS1ldmVudHMtc3Vic3lzdGVtJz50cmFjZSBldmVudHMgc3Vic3lzdGVtPC9saW5rPiwKKyAgICAgICAgICAgICAgICB3aGljaCBjYW4gYmUgdXNlZnVsIGZvciBjYXN1YWwgdHJhY2luZworICAgICAgICAgICAgICAgIGlmIHlvdSBkb24ndCB3YW50IHRvIGJvdGhlciBkZWFsaW5nIHdpdGggdGhlIHVzZXJzcGFjZSB0b29scy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gZW5hYmxlIHRyYWNpbmcgZm9yIGEgZ2l2ZW4gZGV2aWNlLCB1c2UKKyAgICAgICAgICAgICAgICAvc3lzL2Jsb2NrL3h4eC90cmFjZS9lbmFibGUsIHdoZXJlIHh4eCBpcyB0aGUgZGV2aWNlIG5hbWUuCisgICAgICAgICAgICAgICAgVGhpcyBmb3IgZXhhbXBsZSBlbmFibGVzIHRyYWNpbmcgZm9yIC9kZXYvc2RjOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBlY2hvIDEgPiAvc3lzL2Jsb2NrL3NkYy90cmFjZS9lbmFibGUKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgT25jZSB5b3UndmUgc2VsZWN0ZWQgdGhlIGRldmljZShzKSB5b3Ugd2FudCB0byB0cmFjZSwKKyAgICAgICAgICAgICAgICBzZWxlY3RpbmcgdGhlICdibGsnIHRyYWNlciB3aWxsIHR1cm4gdGhlIGJsayB0cmFjZXIgb246CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcjIGNhdCBhdmFpbGFibGVfdHJhY2VycworICAgICBibGsgZnVuY3Rpb25fZ3JhcGggZnVuY3Rpb24gbm9wCisKKyAgICAgcm9vdEBjcm93bmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBlY2hvIGJsayA+IGN1cnJlbnRfdHJhY2VyCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEV4ZWN1dGUgdGhlIHdvcmtsb2FkIHlvdSdyZSBpbnRlcmVzdGVkIGluOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBjYXQgL21lZGlhL3NkYy90ZXN0ZmlsZS50eHQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQW5kIGxvb2sgYXQgdGhlIG91dHB1dCAobm90ZSBoZXJlIHRoYXQgd2UncmUgdXNpbmcKKyAgICAgICAgICAgICAgICAndHJhY2VfcGlwZScgaW5zdGVhZCBvZiB0cmFjZSB0byBjYXB0dXJlIHRoaXMgdHJhY2UgLQorICAgICAgICAgICAgICAgIHRoaXMgYWxsb3dzIHVzIHRvIHdhaXQgYXJvdW5kIG9uIHRoZSBwaXBlIGZvciBkYXRhIHRvCisgICAgICAgICAgICAgICAgYXBwZWFyKToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZyMgY2F0IHRyYWNlX3BpcGUKKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjEgIDMwMjMuMjc2MzYxOiAgIDgsMzIgICBRICAgUiAxNjk5ODQ4ICsgOCBbY2F0XQorICAgICAgICAgICAgICAgICBjYXQtMzU4NyAgWzAwMV0gZC4uMSAgMzAyMy4yNzY0MTA6ICAgOCwzMiAgIG0gICBOIGNmcTM1ODcgYWxsb2NlZAorICAgICAgICAgICAgICAgICBjYXQtMzU4NyAgWzAwMV0gZC4uMSAgMzAyMy4yNzY0MTU6ICAgOCwzMiAgIEcgICBSIDE2OTk4NDggKyA4IFtjYXRdCisgICAgICAgICAgICAgICAgIGNhdC0zNTg3ICBbMDAxXSBkLi4xICAzMDIzLjI3NjQyNDogICA4LDMyICAgUCAgIE4gW2NhdF0KKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjIgIDMwMjMuMjc2NDMyOiAgIDgsMzIgICBJICAgUiAxNjk5ODQ4ICsgOCBbY2F0XQorICAgICAgICAgICAgICAgICBjYXQtMzU4NyAgWzAwMV0gZC4uMSAgMzAyMy4yNzY0Mzk6ICAgOCwzMiAgIG0gICBOIGNmcTM1ODcgaW5zZXJ0X3JlcXVlc3QKKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjEgIDMwMjMuMjc2NDQ1OiAgIDgsMzIgICBtICAgTiBjZnEzNTg3IGFkZF90b19ycgorICAgICAgICAgICAgICAgICBjYXQtMzU4NyAgWzAwMV0gZC4uMiAgMzAyMy4yNzY0NTQ6ICAgOCwzMiAgIFUgICBOIFtjYXRdIDEKKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjEgIDMwMjMuMjc2NDY0OiAgIDgsMzIgICBtICAgTiBjZnEgd29ya2xvYWQgc2xpY2U6MTUwCisgICAgICAgICAgICAgICAgIGNhdC0zNTg3ICBbMDAxXSBkLi4xICAzMDIzLjI3NjQ3MTogICA4LDMyICAgbSAgIE4gY2ZxMzU4NyBzZXRfYWN0aXZlIHdsX3ByaW86MCB3bF90eXBlOjIKKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjEgIDMwMjMuMjc2NDc4OiAgIDgsMzIgICBtICAgTiBjZnEzNTg3IGZpZm89ICAobnVsbCkKKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjEgIDMwMjMuMjc2NDgzOiAgIDgsMzIgICBtICAgTiBjZnEzNTg3IGRpc3BhdGNoX2luc2VydAorICAgICAgICAgICAgICAgICBjYXQtMzU4NyAgWzAwMV0gZC4uMSAgMzAyMy4yNzY0OTA6ICAgOCwzMiAgIG0gICBOIGNmcTM1ODcgZGlzcGF0Y2hlZCBhIHJlcXVlc3QKKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjEgIDMwMjMuMjc2NDk3OiAgIDgsMzIgICBtICAgTiBjZnEzNTg3IGFjdGl2YXRlIHJxLCBkcnY9MQorICAgICAgICAgICAgICAgICBjYXQtMzU4NyAgWzAwMV0gZC4uMiAgMzAyMy4yNzY1MDA6ICAgOCwzMiAgIEQgICBSIDE2OTk4NDggKyA4IFtjYXRdCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFuZCB0aGlzIHR1cm5zIG9mZiB0cmFjaW5nIGZvciB0aGUgc3BlY2lmaWVkIGRldmljZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZyMgZWNobyAwID4gL3N5cy9ibG9jay9zZGMvdHJhY2UvZW5hYmxlCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2Jsa3RyYWNlLWRvY3VtZW50YXRpb24nPgorICAgICAgICA8dGl0bGU+RG9jdW1lbnRhdGlvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmxpbmUgdmVyc2lvbnMgb2YgdGhlIG1hbiBwYWdlcyBmb3IgdGhlIGNvbW1hbmRzIGRpc2N1c3NlZAorICAgICAgICAgICAgaW4gdGhpcyBzZWN0aW9uIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0naHR0cDovL2xpbnV4LmRpZS5uZXQvbWFuLzgvYmxrdHJhY2UnPmh0dHA6Ly9saW51eC5kaWUubmV0L21hbi84L2Jsa3RyYWNlPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi8xL2Jsa3BhcnNlJz5odHRwOi8vbGludXguZGllLm5ldC9tYW4vMS9ibGtwYXJzZTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPSdodHRwOi8vbGludXguZGllLm5ldC9tYW4vOC9idHJhY2UnPmh0dHA6Ly9saW51eC5kaWUubmV0L21hbi84L2J0cmFjZTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBhYm92ZSBtYW5wYWdlcywgYWxvbmcgd2l0aCBtYW5wYWdlcyBmb3IgdGhlIG90aGVyCisgICAgICAgICAgICBibGt0cmFjZSB1dGlsaXRpZXMgKGJ0dCwgYmxraW9tb24sIGV0YykgY2FuIGJlIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgL2RvYyBkaXJlY3Rvcnkgb2YgdGhlIGJsa3RyYWNlIHRvb2xzIGdpdCByZXBvOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQua2VybmVsLmRrL2Jsa3RyYWNlLmdpdAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODYyMGRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLnhtbApAQCAtMCwwICsxLDEwNSBAQAorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGJvb2sgaWQ9J3Byb2ZpbGUtbWFudWFsJyBsYW5nPSdlbicKKyAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIgorICAgICAgeG1sbnM9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIgorICAgICAgPgorICAgIDxib29raW5mbz4KKworICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICA8aW1hZ2VvYmplY3Q+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSdmaWd1cmVzL3Byb2ZpbGUtdGl0bGUucG5nJworICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9J1NWRycKKyAgICAgICAgICAgICAgICAgICAgYWxpZ249J2xlZnQnIHNjYWxlZml0PScxJyB3aWR0aD0nMTAwJScvPgorICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgICAgPC9tZWRpYW9iamVjdD4KKworICAgICAgICA8dGl0bGU+CisJCSAgWW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsCisJCTwvdGl0bGU+CisKKyAgICAgICAgPGF1dGhvcmdyb3VwPgorICAgICAgICAgICAgPGF1dGhvcj4KKyAgICAgICAgICAgICAgICA8Zmlyc3RuYW1lPlRvbTwvZmlyc3RuYW1lPiA8c3VybmFtZT5aYW51c3NpPC9zdXJuYW1lPgorICAgICAgICAgICAgICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPG9yZ25hbWU+SW50ZWwgQ29ycG9yYXRpb248L29yZ25hbWU+CisgICAgICAgICAgICAgICAgPC9hZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICA8ZW1haWw+dG9tLnphbnVzc2lAaW50ZWwuY29tPC9lbWFpbD4KKyAgICAgICAgICAgIDwvYXV0aG9yPgorICAgICAgICA8L2F1dGhvcmdyb3VwPgorCisgICAgICAgIDxyZXZoaXN0b3J5PgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS40PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxMzwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS40IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS41PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDEzPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjUgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjUuMTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkphbnVhcnkgMjAxNDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS41LjEgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjY8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE0PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjYgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjc8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTQ8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNyBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuODwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTU8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuOCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuOTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxNTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS45IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICA8L3Jldmhpc3Rvcnk+CisKKyAgICA8Y29weXJpZ2h0PgorICAgICA8eWVhcj4mQ09QWVJJR0hUX1lFQVI7PC95ZWFyPgorICAgICAgPGhvbGRlcj5MaW51eCBGb3VuZGF0aW9uPC9ob2xkZXI+CisgICAgPC9jb3B5cmlnaHQ+CisKKyAgICA8bGVnYWxub3RpY2U+CisgICAgICA8cGFyYT4KKyAgICAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQgdW5kZXIKKyAgICAgICAgICB0aGUgdGVybXMgb2YgdGhlIDx1bGluayB0eXBlPSJodHRwIiB1cmw9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzIuMC91ay8iPgorICAgICAgICAgIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmUgQWxpa2UgMi4wIFVLOiBFbmdsYW5kICZhbXA7IFdhbGVzPC91bGluaz4gYXMgcHVibGlzaGVkIGJ5CisgICAgICAgICAgQ3JlYXRpdmUgQ29tbW9ucy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPG5vdGU+CisgICAgICAgICAgRm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1hbnVhbCBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSwgc2VlIHRoZQorICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1BST0ZfVVJMOyc+WW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsPC91bGluaz4KKyAgICAgICAgICBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IHdlYnNpdGUuCisgICAgICA8L25vdGU+CisgICAgPC9sZWdhbG5vdGljZT4KKworICAgIDwvYm9va2luZm8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJwcm9maWxlLW1hbnVhbC1pbnRyby54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InByb2ZpbGUtbWFudWFsLWFyY2gueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJwcm9maWxlLW1hbnVhbC11c2FnZS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InByb2ZpbGUtbWFudWFsLWV4YW1wbGVzLnhtbCIvPgorCis8L2Jvb2s+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL1RPRE8gYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9UT0RPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMGRiOTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9UT0RPCkBAIC0wLDAgKzEsMTEgQEAKK0hhbmRib29rIFRvZG8gTGlzdDoKKworICAqIERvY3VtZW50IGFkZGluZyBhIG5ldyBJTUFHRV9GRUFUVVJFIHRvIHRoZSBjdXN0b21pc2luZyBpbWFnZXMgc2VjdGlvbiAKKyAgKiBBZGQgaW5zdHJ1Y3Rpb25zIGFib3V0IHVzaW5nIHphdXJ1cy9vcGVubW9rbyBlbXVsYXRpb24KKyAgKiBBZGQgY29tcG9uZW50IG92ZXJ2aWV3L2Jsb2NrIGRpYWdyYW1zCisgICogU29mdHdhcmUgRGVldmVsb3BtZW50IGludHJvIHNob3VsZCBtZW50aW9uIGl0cyBzb2Z0d2FyZSBkZXZlbG9wbWVudCBmb3IgCisgICAgaW50ZW5kZWQgdGFyZ2V0IGFuZCBjb3VsZCBiZSBhIGRpZmZlcmVudCBhcmNoIGV0YyBhbmQgdGh1cyBzcGVjaWFsIGNhc2UuIAorICAqIEV4cGFuZCBpbnNhbmUuYmJjbGFzcyBkb2N1bWVudGF0aW9uIHRvIGNvdmVyIHRlc3RzCisgICogRG9jdW1lbnQgcmVtYWluaW5nIGNsYXNzZXMgKHNlZSBsaXN0IGluIHJlZi1jbGFzc2VzKQorICAqIERvY3VtZW50IGZvcm1mYWN0b3IKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvY2xvc2VyLWxvb2sueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvY2xvc2VyLWxvb2sueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZjY3NGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9jbG9zZXItbG9vay54bWwKQEAgLTAsMCArMSwxMzMxIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0nY2xvc2VyLWxvb2snPgorPHRpdGxlPkEgQ2xvc2VyIExvb2sgYXQgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQ8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2hhcHRlciB0YWtlcyBhIG1vcmUgZGV0YWlsZWQgbG9vayBhdCB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBkaWFncmFtIHJlcHJlc2VudHMgdGhlIGRldmVsb3BtZW50IGVudmlyb25tZW50IGF0IGEKKyAgICAgICAgaGlnaCBsZXZlbC4KKyAgICAgICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIGNoYXB0ZXIgZXhwYW5kcyBvbiB0aGUgZnVuZGFtZW50YWwgaW5wdXQsIG91dHB1dCwKKyAgICAgICAgcHJvY2VzcywgYW5kCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+KSBibG9ja3MKKyAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmEgaWQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz4KKyAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3lvY3RvLWVudmlyb25tZW50LXJlZi5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI4aW4iIGRlcHRoPSI0LjI1aW4iIC8+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBnZW5lcmFsaXplZCBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50IGNvbnNpc3RzIG9mCisgICAgICAgIHNldmVyYWwgZnVuY3Rpb25hbCBhcmVhczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNlciBDb25maWd1cmF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgTWV0YWRhdGEgeW91IGNhbiB1c2UgdG8gY29udHJvbCB0aGUgYnVpbGQgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWV0YWRhdGEgTGF5ZXJzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVmFyaW91cyBsYXllcnMgdGhhdCBwcm92aWRlIHNvZnR3YXJlLCBtYWNoaW5lLCBhbmQKKyAgICAgICAgICAgICAgICBkaXN0cm8gTWV0YWRhdGEuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNvdXJjZSBGaWxlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFVwc3RyZWFtIHJlbGVhc2VzLCBsb2NhbCBwcm9qZWN0cywgYW5kIFNDTXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIFN5c3RlbTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFByb2Nlc3NlcyB1bmRlciB0aGUgY29udHJvbCBvZgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+LgorICAgICAgICAgICAgICAgIFRoaXMgYmxvY2sgZXhwYW5kcyBvbiBob3cgQml0QmFrZSBmZXRjaGVzIHNvdXJjZSwgYXBwbGllcworICAgICAgICAgICAgICAgIHBhdGNoZXMsIGNvbXBsZXRlcyBjb21waWxhdGlvbiwgYW5hbHl6ZXMgb3V0cHV0IGZvciBwYWNrYWdlCisgICAgICAgICAgICAgICAgZ2VuZXJhdGlvbiwgY3JlYXRlcyBhbmQgdGVzdHMgcGFja2FnZXMsIGdlbmVyYXRlcyBpbWFnZXMsIGFuZAorICAgICAgICAgICAgICAgIGdlbmVyYXRlcyBjcm9zcy1kZXZlbG9wbWVudCB0b29scy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UGFja2FnZSBGZWVkczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIERpcmVjdG9yaWVzIGNvbnRhaW5pbmcgb3V0cHV0IHBhY2thZ2VzIChSUE0sIERFQiBvciBJUEspLAorICAgICAgICAgICAgICAgIHdoaWNoIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBpbiB0aGUgY29uc3RydWN0aW9uIG9mIGFuIGltYWdlIG9yCisgICAgICAgICAgICAgICAgU0RLLCBwcm9kdWNlZCBieSB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgIFRoZXNlIGZlZWRzIGNhbiBhbHNvIGJlIGNvcGllZCBhbmQgc2hhcmVkIHVzaW5nIGEgd2ViIHNlcnZlciBvcgorICAgICAgICAgICAgICAgIG90aGVyIG1lYW5zIHRvIGZhY2lsaXRhdGUgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgaW1hZ2VzIG9uIGRldmljZXMgYXQgcnVudGltZSBpZiBydW50aW1lIHBhY2thZ2UgbWFuYWdlbWVudCBpcworICAgICAgICAgICAgICAgIGVuYWJsZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkltYWdlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEltYWdlcyBwcm9kdWNlZCBieSB0aGUgZGV2ZWxvcG1lbnQgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgU0RLOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbHMgdGhhdCBhcmUgcHJvZHVjZWQgYWxvbmcgd2l0aCBhbiBpbWFnZQorICAgICAgICAgICAgICAgIG9yIHNlcGFyYXRlbHkgd2l0aCBCaXRCYWtlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0idXNlci1jb25maWd1cmF0aW9uIj4KKyAgICAgICAgPHRpdGxlPlVzZXIgQ29uZmlndXJhdGlvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBVc2VyIGNvbmZpZ3VyYXRpb24gaGVscHMgZGVmaW5lIHRoZSBidWlsZC4KKyAgICAgICAgICAgIFRocm91Z2ggdXNlciBjb25maWd1cmF0aW9uLCB5b3UgY2FuIHRlbGwgQml0QmFrZSB0aGUKKyAgICAgICAgICAgIHRhcmdldCBhcmNoaXRlY3R1cmUgZm9yIHdoaWNoIHlvdSBhcmUgYnVpbGRpbmcgdGhlIGltYWdlLAorICAgICAgICAgICAgd2hlcmUgdG8gc3RvcmUgZG93bmxvYWRlZCBzb3VyY2UsIGFuZCBvdGhlciBidWlsZCBwcm9wZXJ0aWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBzaG93cyBhbiBleHBhbmRlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUKKyAgICAgICAgICAgICJVc2VyIENvbmZpZ3VyYXRpb24iIGJveCBvZiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz5nZW5lcmFsIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgZmlndXJlPC9saW5rPjoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3VzZXItY29uZmlndXJhdGlvbi5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI1LjVpbiIgZGVwdGg9IjMuNWluIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIG5lZWRzIHNvbWUgYmFzaWMgY29uZmlndXJhdGlvbiBmaWxlcyBpbiBvcmRlciB0byBjb21wbGV0ZQorICAgICAgICAgICAgYSBidWlsZC4KKyAgICAgICAgICAgIFRoZXNlIGZpbGVzIGFyZSA8ZmlsZW5hbWU+Ki5jb25mPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICBUaGUgbWluaW1hbGx5IG5lY2Vzc2FyeSBvbmVzIHJlc2lkZSBhcyBleGFtcGxlIGZpbGVzIGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgRm9yIHNpbXBsaWNpdHksIHRoaXMgc2VjdGlvbiByZWZlcnMgdG8gdGhlIFNvdXJjZSBEaXJlY3RvcnkgYXMKKyAgICAgICAgICAgIHRoZSAiUG9reSBEaXJlY3RvcnkuIgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSBjbG9uZSB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSBvciB5b3UKKyAgICAgICAgICAgIGRvd25sb2FkIGFuZCB1bnBhY2sgYSBZb2N0byBQcm9qZWN0IHJlbGVhc2UsIHlvdSBjYW4gc2V0IHVwIHRoZQorICAgICAgICAgICAgU291cmNlIERpcmVjdG9yeSB0byBiZSBuYW1lZCBhbnl0aGluZyB5b3Ugd2FudC4KKyAgICAgICAgICAgIEZvciB0aGlzIGRpc2N1c3Npb24sIHRoZSBjbG9uZWQgcmVwb3NpdG9yeSB1c2VzIHRoZSBkZWZhdWx0CisgICAgICAgICAgICBuYW1lIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4uCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBUaGUgUG9reSByZXBvc2l0b3J5IGlzIHByaW1hcmlseSBhbiBhZ2dyZWdhdGlvbiBvZiBleGlzdGluZworICAgICAgICAgICAgICAgIHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICBJdCBpcyBub3QgYSBjYW5vbmljYWwgdXBzdHJlYW0gc291cmNlLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1ldGEteW9jdG88L2ZpbGVuYW1lPiBsYXllciBpbnNpZGUgUG9reSBjb250YWlucworICAgICAgICAgICAgYSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSB0aGF0IGhhcyBleGFtcGxlCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICAgICAgVGhlc2UgZXhhbXBsZSBmaWxlcyBhcmUgdXNlZCBhcyBhIGJhc2lzIGZvciBjcmVhdGluZyBhY3R1YWwKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgd2hlbiB5b3Ugc291cmNlIHRoZSBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgc2NyaXB0CisgICAgICAgICAgICAoaS5lLgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIG9yCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU291cmNpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IHNjcmlwdCBjcmVhdGVzIGEKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIGlmIG9uZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgorICAgICAgICAgICAgQml0QmFrZSB1c2VzIHRoZSBCdWlsZCBEaXJlY3RvcnkgZm9yIGFsbCBpdHMgd29yayBkdXJpbmcgYnVpbGRzLgorICAgICAgICAgICAgVGhlIEJ1aWxkIERpcmVjdG9yeSBoYXMgYSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSB0aGF0CisgICAgICAgICAgICBjb250YWlucyBkZWZhdWx0IHZlcnNpb25zIG9mIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgIFRoZXNlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgY3JlYXRlZCBvbmx5IGlmIHZlcnNpb25zCisgICAgICAgICAgICBkbyBub3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5IGF0IHRoZSB0aW1lIHlvdQorICAgICAgICAgICAgc291cmNlIHRoZSBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJlY2F1c2UgdGhlIFBva3kgcmVwb3NpdG9yeSBpcyBmdW5kYW1lbnRhbGx5IGFuIGFnZ3JlZ2F0aW9uIG9mCisgICAgICAgICAgICBleGlzdGluZyByZXBvc2l0b3JpZXMsIHNvbWUgdXNlcnMgbWlnaHQgYmUgZmFtaWxpYXIgd2l0aCBydW5uaW5nCisgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgIDxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPiBzY3JpcHQgaW4gdGhlIGNvbnRleHQKKyAgICAgICAgICAgIG9mIHNlcGFyYXRlIE9wZW5FbWJlZGRlZC1Db3JlIGFuZCBCaXRCYWtlIHJlcG9zaXRvcmllcyByYXRoZXIgdGhhbiBhCisgICAgICAgICAgICBzaW5nbGUgUG9reSByZXBvc2l0b3J5LgorICAgICAgICAgICAgVGhpcyBkaXNjdXNzaW9uIGFzc3VtZXMgdGhlIHNjcmlwdCBpcyBleGVjdXRlZCBmcm9tIHdpdGhpbiBhIGNsb25lZAorICAgICAgICAgICAgb3IgdW5wYWNrZWQgdmVyc2lvbiBvZiBQb2t5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEZXBlbmRpbmcgb24gd2hlcmUgdGhlIHNjcmlwdCBpcyBzb3VyY2VkLCBkaWZmZXJlbnQgc3ViLXNjcmlwdHMKKyAgICAgICAgICAgIGFyZSBjYWxsZWQgdG8gc2V0IHVwIHRoZSBCdWlsZCBEaXJlY3RvcnkgKFlvY3RvIG9yIE9wZW5FbWJlZGRlZCkuCisgICAgICAgICAgICBTcGVjaWZpY2FsbHksIHRoZSBzY3JpcHQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzL29lLXNldHVwLWJ1aWxkZGlyPC9maWxlbmFtZT4gaW5zaWRlIHRoZQorICAgICAgICAgICAgcG9reSBkaXJlY3Rvcnkgc2V0cyB1cCB0aGUgQnVpbGQgRGlyZWN0b3J5IGFuZCBzZWVkcyB0aGUgZGlyZWN0b3J5CisgICAgICAgICAgICAoaWYgbmVjZXNzYXJ5KSB3aXRoIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXBwcm9wcmlhdGUgZm9yIHRoZQorICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+c2NyaXB0cy9vZS1zZXR1cC1idWlsZGRpcjwvZmlsZW5hbWU+IHNjcmlwdAorICAgICAgICAgICAgICAgIHVzZXMgdGhlIDxmaWxlbmFtZT4kVEVNUExBVEVDT05GPC9maWxlbmFtZT4gdmFyaWFibGUgdG8KKyAgICAgICAgICAgICAgICBkZXRlcm1pbmUgd2hpY2ggc2FtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gbG9jYXRlLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHByb3ZpZGVzIG1hbnkKKyAgICAgICAgICAgIGJhc2ljIHZhcmlhYmxlcyB0aGF0IGRlZmluZSBhIGJ1aWxkIGVudmlyb25tZW50LgorICAgICAgICAgICAgSGVyZSBpcyBhIGxpc3Qgb2YgYSBmZXcuCisgICAgICAgICAgICBUbyBzZWUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbnMgaW4gYSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICBmaWxlIGNyZWF0ZWQgYnkgdGhlIGJ1aWxkIGVudmlyb25tZW50IHNjcmlwdCwgc2VlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmYuc2FtcGxlPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+IGxheWVyOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBhcmFsbGVsaXNtIE9wdGlvbnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX05VTUJFUl9USFJFQURTJz48ZmlsZW5hbWU+QkJfTlVNQkVSX1RIUkVBRFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQVJBTExFTF9NQUtFJz48ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjdmFyLUJCX05VTUJFUl9QQVJTRV9USFJFQURTJz48ZmlsZW5hbWU+QkJfTlVNQkVSX1BBUlNFX1RIUkVBRFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRhcmdldCBNYWNoaW5lIFNlbGVjdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Eb3dubG9hZCBEaXJlY3Rvcnk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURMX0RJUic+PGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNoYXJlZCBTdGF0ZSBEaXJlY3Rvcnk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNTVEFURV9ESVInPjxmaWxlbmFtZT5TU1RBVEVfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgT3V0cHV0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb25zIHNldCBpbiB0aGUgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZSBjYW4gYWxzbyBiZSBzZXQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvc2l0ZS5jb25mPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvYXV0by5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSB0ZWxscyBCaXRCYWtlIHdoYXQKKyAgICAgICAgICAgIGxheWVycyB5b3Ugd2FudCBjb25zaWRlcmVkIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgbGF5ZXJzIGxpc3RlZCBpbiB0aGlzIGZpbGUgaW5jbHVkZSBsYXllcnMKKyAgICAgICAgICAgIG1pbmltYWxseSBuZWVkZWQgYnkgdGhlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBtdXN0IG1hbnVhbGx5IGFkZCBhbnkgY3VzdG9tIGxheWVycyB5b3UgaGF2ZSBjcmVhdGVkLgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gd29ya2luZyB3aXRoIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2VuYWJsaW5nLXlvdXItbGF5ZXInPkVuYWJsaW5nIFlvdXIgTGF5ZXI8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZmlsZXMgPGZpbGVuYW1lPnNpdGUuY29uZjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG8uY29uZjwvZmlsZW5hbWU+IGFyZSBub3QgY3JlYXRlZCBieSB0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgICAgIGluaXRpYWxpemF0aW9uIHNjcmlwdC4KKyAgICAgICAgICAgIElmIHlvdSB3YW50IHRoZXNlIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHlvdSBtdXN0IGNyZWF0ZSB0aGVtCisgICAgICAgICAgICB5b3Vyc2VsZjoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c2l0ZS5jb25mPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5jb25mL3NpdGUuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBjb25maWd1cmUgbXVsdGlwbGUgYnVpbGQgZGlyZWN0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYWQgc2V2ZXJhbCBidWlsZCBlbnZpcm9ubWVudHMgYW5kCisgICAgICAgICAgICAgICAgICAgIHRoZXkgc2hhcmVkIHNvbWUgY29tbW9uIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldCB0aGVzZSBkZWZhdWx0IGJ1aWxkIHByb3BlcnRpZXMgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgQSBnb29kIGV4YW1wbGUgaXMgcGVyaGFwcyB0aGUgcGFja2FnaW5nIGZvcm1hdCB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPk9uZSB1c2VmdWwgc2NlbmFyaW8gZm9yIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9zaXRlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGlzIHRvIGV4dGVuZCB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gaW5jbHVkZSB0aGUgcGF0aCB0byBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL3NpdGUuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBUaGVuLCB3aGVuIEJpdEJha2UgbG9va3MgZm9yIE1ldGFkYXRhIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiwgaXQgZmluZHMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL3NpdGUuY29uZjwvZmlsZW5hbWU+IGZpbGUgYW5kIGFwcGxpZXMgeW91cgorICAgICAgICAgICAgICAgICAgICBjb21tb24gY29uZmlndXJhdGlvbnMgZm91bmQgaW4gdGhlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFRvIG92ZXJyaWRlIGNvbmZpZ3VyYXRpb25zIGluIGEgcGFydGljdWxhciBidWlsZCBkaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgIGFsdGVyIHRoZSBzaW1pbGFyIGNvbmZpZ3VyYXRpb25zIHdpdGhpbiB0aGF0IGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSdzIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5hdXRvLmNvbmY8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGZpbGUgaXMgbm90IGhhbmQtY3JlYXRlZC4KKyAgICAgICAgICAgICAgICAgICAgUmF0aGVyLCB0aGUgZmlsZSBpcyB1c3VhbGx5IGNyZWF0ZWQgYW5kIHdyaXR0ZW4gdG8gYnkKKyAgICAgICAgICAgICAgICAgICAgYW4gYXV0b2J1aWxkZXIuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzZXR0aW5ncyBwdXQgaW50byB0aGUgZmlsZSBhcmUgdHlwaWNhbGx5IHRoZSBzYW1lIGFzCisgICAgICAgICAgICAgICAgICAgIHlvdSB3b3VsZCBmaW5kIGluIHRoZSA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb3IgdGhlIDxmaWxlbmFtZT5jb25mL3NpdGUuY29uZjwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIGVkaXQgYWxsIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gZnVydGhlciBkZWZpbmUKKyAgICAgICAgICAgIGFueSBwYXJ0aWN1bGFyIGJ1aWxkIGVudmlyb25tZW50LgorICAgICAgICAgICAgVGhpcyBwcm9jZXNzIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSAiVXNlciBDb25maWd1cmF0aW9uIEVkaXRzIgorICAgICAgICAgICAgYm94IGluIHRoZSBmaWd1cmUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4geW91IGxhdW5jaCB5b3VyIGJ1aWxkIHdpdGggdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSA8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiBjb21tYW5kLCBCaXRCYWtlCisgICAgICAgICAgICBzb3J0cyBvdXQgdGhlIGNvbmZpZ3VyYXRpb25zIHRvIHVsdGltYXRlbHkgZGVmaW5lIHlvdXIgYnVpbGQKKyAgICAgICAgICAgIGVudmlyb25tZW50LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9Im1ldGFkYXRhLW1hY2hpbmUtY29uZmlndXJhdGlvbi1hbmQtcG9saWN5LWNvbmZpZ3VyYXRpb24iPgorICAgICAgICA8dGl0bGU+TWV0YWRhdGEsIE1hY2hpbmUgQ29uZmlndXJhdGlvbiwgYW5kIFBvbGljeSBDb25maWd1cmF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBwcmV2aW91cyBzZWN0aW9uIGRlc2NyaWJlZCB0aGUgdXNlciBjb25maWd1cmF0aW9ucyB0aGF0CisgICAgICAgICAgICBkZWZpbmUgQml0QmFrZSdzIGdsb2JhbCBiZWhhdmlvci4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiB0YWtlcyBhIGNsb3NlciBsb29rIGF0IHRoZSBsYXllcnMgdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgdXNlcyB0byBmdXJ0aGVyIGNvbnRyb2wgdGhlIGJ1aWxkLgorICAgICAgICAgICAgVGhlc2UgbGF5ZXJzIHByb3ZpZGUgTWV0YWRhdGEgZm9yIHRoZSBzb2Z0d2FyZSwgbWFjaGluZSwgYW5kCisgICAgICAgICAgICBwb2xpY3kuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIGdlbmVyYWwsIHRocmVlIHR5cGVzIG9mIGxheWVyIGlucHV0IGV4aXN0OgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBvbGljeSBDb25maWd1cmF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIERpc3RyaWJ1dGlvbiBMYXllcnMgcHJvdmlkZSB0b3AtbGV2ZWwgb3IgZ2VuZXJhbAorICAgICAgICAgICAgICAgICAgICBwb2xpY2llcyBmb3IgdGhlIGltYWdlIG9yIFNESyBiZWluZyBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoaXMgbGF5ZXIgd291bGQgZGljdGF0ZSB3aGV0aGVyIEJpdEJha2UKKyAgICAgICAgICAgICAgICAgICAgcHJvZHVjZXMgUlBNIG9yIElQSyBwYWNrYWdlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1hY2hpbmUgQ29uZmlndXJhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgbGF5ZXJzIHByb3ZpZGUgbWFjaGluZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB0eXBlIG9mIGluZm9ybWF0aW9uIGlzIHNwZWNpZmljIHRvIGEgcGFydGljdWxhcgorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgYXJjaGl0ZWN0dXJlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWV0YWRhdGE6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgbGF5ZXJzIGNvbnRhaW4gdXNlci1zdXBwbGllZCByZWNpcGUgZmlsZXMsCisgICAgICAgICAgICAgICAgICAgIHBhdGNoZXMsIGFuZCBhcHBlbmQgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIHNob3dzIGFuIGV4cGFuZGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZQorICAgICAgICAgICAgTWV0YWRhdGEsIE1hY2hpbmUgQ29uZmlndXJhdGlvbiwgYW5kIFBvbGljeSBDb25maWd1cmF0aW9uIGlucHV0CisgICAgICAgICAgICAobGF5ZXJzKSBib3hlcyBvZiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz5nZW5lcmFsIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgZmlndXJlPC9saW5rPjoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2xheWVyLWlucHV0LnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjhpbiIgZGVwdGg9IjcuNWluIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiBnZW5lcmFsLCBhbGwgbGF5ZXJzIGhhdmUgYSBzaW1pbGFyIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIFRoZXkgYWxsIGNvbnRhaW4gYSBsaWNlbnNpbmcgZmlsZQorICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPkNPUFlJTkc8L2ZpbGVuYW1lPikgaWYgdGhlIGxheWVyIGlzIHRvIGJlCisgICAgICAgICAgICBkaXN0cmlidXRlZCwgYSA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZSBhcyBnb29kIHByYWN0aWNlCisgICAgICAgICAgICBhbmQgZXNwZWNpYWxseSBpZiB0aGUgbGF5ZXIgaXMgdG8gYmUgZGlzdHJpYnV0ZWQsIGEKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5LCBhbmQgcmVjaXBlIGRpcmVjdG9yaWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBoYXMgbWFueSBsYXllcnMgdGhhdCBjYW4gYmUgdXNlZC4KKyAgICAgICAgICAgIFlvdSBjYW4gc2VlIGEgd2ViLWludGVyZmFjZSBsaXN0aW5nIG9mIHRoZW0gb24gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvIj5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4KKyAgICAgICAgICAgIHBhZ2UuCisgICAgICAgICAgICBUaGUgbGF5ZXJzIGFyZSBzaG93biBhdCB0aGUgYm90dG9tIGNhdGVnb3JpemVkIHVuZGVyCisgICAgICAgICAgICAiWW9jdG8gTWV0YWRhdGEgTGF5ZXJzLiIKKyAgICAgICAgICAgIFRoZXNlIGxheWVycyBhcmUgZnVuZGFtZW50YWxseSBhIHN1YnNldCBvZiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZy9sYXllcmluZGV4L2xheWVycy8iPk9wZW5FbWJlZGRlZCBNZXRhZGF0YSBJbmRleDwvdWxpbms+LAorICAgICAgICAgICAgd2hpY2ggbGlzdHMgYWxsIGxheWVycyBwcm92aWRlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGNvbW11bml0eS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIExheWVycyBleGlzdCBpbiB0aGUgWW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzIHRoYXQKKyAgICAgICAgICAgICAgICBjYW5ub3QgYmUgZm91bmQgaW4gdGhlIE9wZW5FbWJlZGRlZCBNZXRhZGF0YSBJbmRleC4KKyAgICAgICAgICAgICAgICBUaGVzZSBsYXllcnMgYXJlIGVpdGhlciBkZXByZWNhdGVkIG9yIGV4cGVyaW1lbnRhbCBpbiBuYXR1cmUuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGUgPGZpbGVuYW1lPmNvbmYvYmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUsCisgICAgICAgICAgICB3aGljaCBpcyBwYXJ0IG9mIHRoZSB1c2VyIGNvbmZpZ3VyYXRpb24sIHRvIGZpbmQgd2hhdCBsYXllcnMgaXQKKyAgICAgICAgICAgIHNob3VsZCBiZSB1c2luZyBhcyBwYXJ0IG9mIHRoZSBidWlsZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gbGF5ZXJzLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJz5VbmRlcnN0YW5kaW5nIGFuZCBDcmVhdGluZyBMYXllcnM8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9ImRpc3Ryby1sYXllciI+CisgICAgICAgICAgICA8dGl0bGU+RGlzdHJvIExheWVyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGRpc3RyaWJ1dGlvbiBsYXllciBwcm92aWRlcyBwb2xpY3kgY29uZmlndXJhdGlvbnMgZm9yIHlvdXIKKyAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgQmVzdCBwcmFjdGljZXMgZGljdGF0ZSB0aGF0IHlvdSBpc29sYXRlIHRoZXNlIHR5cGVzIG9mCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMgaW50byB0aGVpciBvd24gbGF5ZXIuCisgICAgICAgICAgICAgICAgU2V0dGluZ3MgeW91IHByb3ZpZGUgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9kaXN0cm8vPHJlcGxhY2VhYmxlPmRpc3RybzwvcmVwbGFjZWFibGU+LmNvbmY8L2ZpbGVuYW1lPiBvdmVycmlkZQorICAgICAgICAgICAgICAgIHNpbWlsYXIKKyAgICAgICAgICAgICAgICBzZXR0aW5ncyB0aGF0IEJpdEJha2UgZmluZHMgaW4geW91cgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZSBCdWlsZAorICAgICAgICAgICAgICAgIERpcmVjdG9yeS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHByb3ZpZGVzIHNvbWUgZXhwbGFuYXRpb24gYW5kIHJlZmVyZW5jZXMKKyAgICAgICAgICAgICAgICBmb3Igd2hhdCB5b3UgdHlwaWNhbGx5IGZpbmQgaW4gdGhlIGRpc3RyaWJ1dGlvbiBsYXllcjoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmNsYXNzZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzIGZpbGVzICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikgaG9sZAorICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uIGZ1bmN0aW9uYWxpdHkgdGhhdCBjYW4gYmUgc2hhcmVkIGFtb25nCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzIGluIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdXIgcmVjaXBlcyBpbmhlcml0IGEgY2xhc3MsIHRoZXkgdGFrZSBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzIGFuZCBmdW5jdGlvbnMgZm9yIHRoYXQgY2xhc3MuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHJlYWQgbW9yZSBhYm91dCBjbGFzcyBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcyc+Q2xhc3NlczwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5jb25mOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFyZWEgaG9sZHMgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBsYXllciAoPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Y29uZi9kaXN0cm8vPHJlcGxhY2VhYmxlPmRpc3RybzwvcmVwbGFjZWFibGU+LmNvbmY8L2ZpbGVuYW1lPiksCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYW55IGRpc3RyaWJ1dGlvbi13aWRlIGluY2x1ZGUgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5yZWNpcGVzLSo6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJlY2lwZXMgYW5kIGFwcGVuZCBmaWxlcyB0aGF0IGFmZmVjdCBjb21tb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgYWNyb3NzIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFyZWEgY291bGQgaW5jbHVkZSByZWNpcGVzIGFuZCBhcHBlbmQgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFkZCBkaXN0cmlidXRpb24tc3BlY2lmaWMgY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uIHNjcmlwdHMsIGN1c3RvbSBpbWFnZSByZWNpcGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNvIGZvcnRoLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9ImJzcC1sYXllciI+CisgICAgICAgICAgICA8dGl0bGU+QlNQIExheWVyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIEJTUCBMYXllciBwcm92aWRlcyBtYWNoaW5lIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgICAgICAgIEV2ZXJ5dGhpbmcgaW4gdGhpcyBsYXllciBpcyBzcGVjaWZpYyB0byB0aGUgbWFjaGluZSBmb3Igd2hpY2gKKyAgICAgICAgICAgICAgICB5b3UgYXJlIGJ1aWxkaW5nIHRoZSBpbWFnZSBvciB0aGUgU0RLLgorICAgICAgICAgICAgICAgIEEgY29tbW9uIHN0cnVjdHVyZSBvciBmb3JtIGlzIGRlZmluZWQgZm9yIEJTUCBsYXllcnMuCisgICAgICAgICAgICAgICAgWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IHRoaXMgc3RydWN0dXJlIGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7Jz5Zb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBJbiBvcmRlciBmb3IgYSBCU1AgbGF5ZXIgdG8gYmUgY29uc2lkZXJlZCBjb21wbGlhbnQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCwgaXQgbXVzdCBtZWV0IHNvbWUgc3RydWN0dXJhbCByZXF1aXJlbWVudHMuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgQlNQIExheWVyJ3MgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkgY29udGFpbnMKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIGZvciB0aGUgbWFjaGluZQorICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Y29uZi9tYWNoaW5lLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT4uY29uZjwvZmlsZW5hbWU+KSBhbmQsCisgICAgICAgICAgICAgICAgb2YgY291cnNlLCB0aGUgbGF5ZXIgKDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhlIGxheWVyIGlzIGRlZGljYXRlZCB0byBzcGVjaWZpYyByZWNpcGVzCisgICAgICAgICAgICAgICAgYnkgZnVuY3Rpb246IDxmaWxlbmFtZT5yZWNpcGVzLWJzcDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZWNpcGVzLWNvcmU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy1ncmFwaGljczwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy1rZXJuZWw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBNZXRhZGF0YSBjYW4gZXhpc3QgZm9yIG11bHRpcGxlIGZvcm1mYWN0b3JzLCBncmFwaGljcworICAgICAgICAgICAgICAgIHN1cHBvcnQgc3lzdGVtcywgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBXaGlsZSB0aGUgZmlndXJlIHNob3dzIHNldmVyYWwgPGZpbGVuYW1lPnJlY2lwZXMtKjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzLCBub3QgYWxsIHRoZXNlIGRpcmVjdG9yaWVzIGFwcGVhciBpbiBhbGwKKyAgICAgICAgICAgICAgICAgICAgQlNQIGxheWVycy4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ic29mdHdhcmUtbGF5ZXIiPgorICAgICAgICAgICAgPHRpdGxlPlNvZnR3YXJlIExheWVyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHNvZnR3YXJlIGxheWVyIHByb3ZpZGVzIHRoZSBNZXRhZGF0YSBmb3IgYWRkaXRpb25hbAorICAgICAgICAgICAgICAgIHNvZnR3YXJlIHBhY2thZ2VzIHVzZWQgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICBUaGlzIGxheWVyIGRvZXMgbm90IGluY2x1ZGUgTWV0YWRhdGEgdGhhdCBpcyBzcGVjaWZpYyB0byB0aGUKKyAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24gb3IgdGhlIG1hY2hpbmUsIHdoaWNoIGFyZSBmb3VuZCBpbiB0aGVpcgorICAgICAgICAgICAgICAgIHJlc3BlY3RpdmUgbGF5ZXJzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGxheWVyIGNvbnRhaW5zIGFueSBuZXcgcmVjaXBlcyB0aGF0IHlvdXIgcHJvamVjdCBuZWVkcworICAgICAgICAgICAgICAgIGluIHRoZSBmb3JtIG9mIHJlY2lwZSBmaWxlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJzb3VyY2VzLWRldi1lbnZpcm9ubWVudCI+CisgICAgICAgIDx0aXRsZT5Tb3VyY2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIG9yZGVyIGZvciB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBjcmVhdGUgYW4gaW1hZ2Ugb3IKKyAgICAgICAgICAgIGFueSB0YXJnZXQsIGl0IG11c3QgYmUgYWJsZSB0byBhY2Nlc3Mgc291cmNlIGZpbGVzLgorICAgICAgICAgICAgVGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdnZW5lcmFsLXlvY3RvLWVudmlyb25tZW50LWZpZ3VyZSc+Z2VuZXJhbCBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50IGZpZ3VyZTwvbGluaz4KKyAgICAgICAgICAgIHJlcHJlc2VudHMgc291cmNlIGZpbGVzIHVzaW5nIHRoZSAiVXBzdHJlYW0gUHJvamVjdCBSZWxlYXNlcyIsCisgICAgICAgICAgICAiTG9jYWwgUHJvamVjdHMiLCBhbmQgIlNDTXMgKG9wdGlvbmFsKSIgYm94ZXMuCisgICAgICAgICAgICBUaGUgZmlndXJlIHJlcHJlc2VudHMgbWlycm9ycywgd2hpY2ggYWxzbyBwbGF5IGEgcm9sZSBpbiBsb2NhdGluZworICAgICAgICAgICAgc291cmNlIGZpbGVzLCB3aXRoIHRoZSAiU291cmNlIE1pcnJvcihzKSIgYm94LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgbWV0aG9kIGJ5IHdoaWNoIHNvdXJjZSBmaWxlcyBhcmUgdWx0aW1hdGVseSBvcmdhbml6ZWQgaXMKKyAgICAgICAgICAgIGEgZnVuY3Rpb24gb2YgdGhlIHByb2plY3QuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZm9yIHJlbGVhc2VkIHNvZnR3YXJlLCBwcm9qZWN0cyB0ZW5kIHRvIHVzZSB0YXJiYWxscworICAgICAgICAgICAgb3Igb3RoZXIgYXJjaGl2ZWQgZmlsZXMgdGhhdCBjYW4gY2FwdHVyZSB0aGUgc3RhdGUgb2YgYSByZWxlYXNlCisgICAgICAgICAgICBndWFyYW50ZWVpbmcgdGhhdCBpdCBpcyBzdGF0aWNhbGx5IHJlcHJlc2VudGVkLgorICAgICAgICAgICAgT24gdGhlIG90aGVyIGhhbmQsIGZvciBhIHByb2plY3QgdGhhdCBpcyBtb3JlIGR5bmFtaWMgb3IKKyAgICAgICAgICAgIGV4cGVyaW1lbnRhbCBpbiBuYXR1cmUsIGEgcHJvamVjdCBtaWdodCBrZWVwIHNvdXJjZSBmaWxlcyBpbiBhCisgICAgICAgICAgICByZXBvc2l0b3J5IGNvbnRyb2xsZWQgYnkgYSBTb3VyY2UgQ29udHJvbCBNYW5hZ2VyIChTQ00pIHN1Y2ggYXMKKyAgICAgICAgICAgIEdpdC4KKyAgICAgICAgICAgIFB1bGxpbmcgc291cmNlIGZyb20gYSByZXBvc2l0b3J5IGFsbG93cyB5b3UgdG8gY29udHJvbAorICAgICAgICAgICAgdGhlIHBvaW50IGluIHRoZSByZXBvc2l0b3J5ICh0aGUgcmV2aXNpb24pIGZyb20gd2hpY2ggeW91IHdhbnQgdG8KKyAgICAgICAgICAgIGJ1aWxkIHNvZnR3YXJlLgorICAgICAgICAgICAgRmluYWxseSwgYSBjb21iaW5hdGlvbiBvZiB0aGUgdHdvIG1pZ2h0IGV4aXN0LCB3aGljaCB3b3VsZCBnaXZlIHRoZQorICAgICAgICAgICAgY29uc3VtZXIgYSBjaG9pY2Ugd2hlbiBkZWNpZGluZyB3aGVyZSB0byBnZXQgc291cmNlIGZpbGVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIHRvIHBvaW50IHRvIHNvdXJjZSBmaWxlcyByZWdhcmRsZXNzIG9mIHRoZWlyIGxvY2F0aW9uLgorICAgICAgICAgICAgRWFjaCByZWNpcGUgbXVzdCBoYXZlIGEgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgdGhhdCBwb2ludHMgdG8gdGhlIHNvdXJjZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQW5vdGhlciBhcmVhIHRoYXQgcGxheXMgYSBzaWduaWZpY2FudCByb2xlIGluIHdoZXJlIHNvdXJjZSBmaWxlcworICAgICAgICAgICAgY29tZSBmcm9tIGlzIHBvaW50ZWQgdG8gYnkgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgIFRoaXMgYXJlYSBpcyBhIGNhY2hlIHRoYXQgY2FuIGhvbGQgcHJldmlvdXNseSBkb3dubG9hZGVkIHNvdXJjZS4KKyAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBpbnN0cnVjdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBjcmVhdGUKKyAgICAgICAgICAgIHRhcmJhbGxzIGZyb20gR2l0IHJlcG9zaXRvcmllcywgd2hpY2ggaXMgbm90IHRoZSBkZWZhdWx0IGJlaGF2aW9yLAorICAgICAgICAgICAgYW5kIHN0b3JlIHRoZW0gaW4gdGhlIDxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPiBieSB1c2luZyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMnPjxmaWxlbmFtZT5CQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBKdWRpY2lvdXMgdXNlIG9mIGEgPGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBjYW4KKyAgICAgICAgICAgIHNhdmUgdGhlIGJ1aWxkIHN5c3RlbSBhIHRyaXAgYWNyb3NzIHRoZSBJbnRlcm5ldCB3aGVuIGxvb2tpbmcKKyAgICAgICAgICAgIGZvciBmaWxlcy4KKyAgICAgICAgICAgIEEgZ29vZCBtZXRob2QgZm9yIHVzaW5nIGEgZG93bmxvYWQgZGlyZWN0b3J5IGlzIHRvIGhhdmUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPiBwb2ludCB0byBhbiBhcmVhIG91dHNpZGUgb2YgeW91cgorICAgICAgICAgICAgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICAgICAgRG9pbmcgc28gYWxsb3dzIHlvdSB0byBzYWZlbHkgZGVsZXRlIHRoZSBCdWlsZCBEaXJlY3RvcnkKKyAgICAgICAgICAgIGlmIG5lZWRlZCB3aXRob3V0IGZlYXIgb2YgcmVtb3ZpbmcgYW55IGRvd25sb2FkZWQgc291cmNlIGZpbGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIHByb3ZpZGVzIGEgZGVlcGVyIGxvb2sgaW50byB0aGUKKyAgICAgICAgICAgIHNvdXJjZSBmaWxlcyBhbmQgdGhlIG1pcnJvcnMuCisgICAgICAgICAgICBIZXJlIGlzIGEgbW9yZSBkZXRhaWxlZCBsb29rIGF0IHRoZSBzb3VyY2UgZmlsZSBhcmVhIG9mIHRoZQorICAgICAgICAgICAgYmFzZSBmaWd1cmU6CisgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvc291cmNlLWlucHV0LnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjdpbiIgZGVwdGg9IjcuNWluIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Vwc3RyZWFtLXByb2plY3QtcmVsZWFzZXMnPgorICAgICAgICAgICAgPHRpdGxlPlVwc3RyZWFtIFByb2plY3QgUmVsZWFzZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVcHN0cmVhbSBwcm9qZWN0IHJlbGVhc2VzIGV4aXN0IGFueXdoZXJlIGluIHRoZSBmb3JtIG9mIGFuCisgICAgICAgICAgICAgICAgYXJjaGl2ZWQgZmlsZSAoZS5nLiB0YXJiYWxsIG9yIHppcCBmaWxlKS4KKyAgICAgICAgICAgICAgICBUaGVzZSBmaWxlcyBjb3JyZXNwb25kIHRvIGluZGl2aWR1YWwgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZpZ3VyZSB1c2VzIHNwZWNpZmljIHJlbGVhc2VzIGVhY2ggZm9yCisgICAgICAgICAgICAgICAgQnVzeUJveCwgUXQsIGFuZCBEYnVzLgorICAgICAgICAgICAgICAgIEFuIGFyY2hpdmUgZmlsZSBjYW4gYmUgZm9yIGFueSByZWxlYXNlZCBwcm9kdWN0IHRoYXQgY2FuIGJlCisgICAgICAgICAgICAgICAgYnVpbHQgdXNpbmcgYSByZWNpcGUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbG9jYWwtcHJvamVjdHMnPgorICAgICAgICAgICAgPHRpdGxlPkxvY2FsIFByb2plY3RzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTG9jYWwgcHJvamVjdHMgYXJlIGN1c3RvbSBiaXRzIG9mIHNvZnR3YXJlIHRoZSB1c2VyIHByb3ZpZGVzLgorICAgICAgICAgICAgICAgIFRoZXNlIGJpdHMgcmVzaWRlIHNvbWV3aGVyZSBsb2NhbCB0byBhIHByb2plY3QgLSBwZXJoYXBzCisgICAgICAgICAgICAgICAgYSBkaXJlY3RvcnkgaW50byB3aGljaCB0aGUgdXNlciBjaGVja3MgaW4gaXRlbXMgKGUuZy4KKyAgICAgICAgICAgICAgICBhIGxvY2FsIGRpcmVjdG9yeSBjb250YWluaW5nIGEgZGV2ZWxvcG1lbnQgc291cmNlIHRyZWUKKyAgICAgICAgICAgICAgICB1c2VkIGJ5IHRoZSBncm91cCkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBjYW5vbmljYWwgbWV0aG9kIHRocm91Z2ggd2hpY2ggdG8gaW5jbHVkZSBhIGxvY2FsIHByb2plY3QKKyAgICAgICAgICAgICAgICBpcyB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZXh0ZXJuYWxzcmMnPjxmaWxlbmFtZT5leHRlcm5hbHNyYzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNsYXNzIHRvIGluY2x1ZGUgdGhhdCBsb2NhbCBwcm9qZWN0LgorICAgICAgICAgICAgICAgIFlvdSB1c2UgZWl0aGVyIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IG9yIGEKKyAgICAgICAgICAgICAgICByZWNpcGUncyBhcHBlbmQgZmlsZSB0byBvdmVycmlkZSBvciBzZXQgdGhlCisgICAgICAgICAgICAgICAgcmVjaXBlIHRvIHBvaW50IHRvIHRoZSBsb2NhbCBkaXJlY3Rvcnkgb24geW91ciBkaXNrIHRvIHB1bGwKKyAgICAgICAgICAgICAgICBpbiB0aGUgd2hvbGUgc291cmNlIHRyZWUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5leHRlcm5hbHNyYzwvZmlsZW5hbWU+IGNsYXNzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWV4dGVybmFsc3JjJz48ZmlsZW5hbWU+ZXh0ZXJuYWxzcmMuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NjbXMnPgorICAgICAgICAgICAgPHRpdGxlPlNvdXJjZSBDb250cm9sIE1hbmFnZXJzIChPcHRpb25hbCk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBbm90aGVyIHBsYWNlIHRoZSBidWlsZCBzeXN0ZW0gY2FuIGdldCBzb3VyY2UgZmlsZXMgZnJvbSBpcworICAgICAgICAgICAgICAgIHRocm91Z2ggYW4gU0NNIHN1Y2ggYXMgR2l0IG9yIFN1YnZlcnNpb24uCisgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCBhIHJlcG9zaXRvcnkgaXMgY2xvbmVkIG9yIGNoZWNrZWQgb3V0LgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1mZXRjaCc+PGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGFzayBpbnNpZGUgQml0QmFrZSB1c2VzCisgICAgICAgICAgICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCB0aGUgYXJndW1lbnQncyBwcmVmaXggdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0CisgICAgICAgICAgICAgICAgZmV0Y2hlciBtb2R1bGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaGF2ZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIGdlbmVyYXRlIHRhcmJhbGxzIGZvciBHaXQgcmVwb3NpdG9yaWVzIGFuZCBwbGFjZSB0aGVtIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ETF9ESVInPjxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnksIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTJz48ZmlsZW5hbWU+QkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICA8L25vdGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4gZmV0Y2hpbmcgYSByZXBvc2l0b3J5LCBCaXRCYWtlIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ1JFVic+PGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGRldGVybWluZSB0aGUgc3BlY2lmaWMgcmV2aXNpb24gZnJvbSB3aGljaCB0bworICAgICAgICAgICAgICAgIGJ1aWxkLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NvdXJjZS1taXJyb3JzJz4KKyAgICAgICAgICAgIDx0aXRsZT5Tb3VyY2UgTWlycm9yKHMpPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVHdvIGtpbmRzIG9mIG1pcnJvcnMgZXhpc3Q6IHByZS1taXJyb3JzIGFuZCByZWd1bGFyIG1pcnJvcnMuCisgICAgICAgICAgICAgICAgVGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NSVJST1JTJz48ZmlsZW5hbWU+TUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBwb2ludCB0byB0aGVzZSwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgIEJpdEJha2UgY2hlY2tzIHByZS1taXJyb3JzIGJlZm9yZSBsb29raW5nIHVwc3RyZWFtIGZvciBhbnkKKyAgICAgICAgICAgICAgICBzb3VyY2UgZmlsZXMuCisgICAgICAgICAgICAgICAgUHJlLW1pcnJvcnMgYXJlIGFwcHJvcHJpYXRlIHdoZW4geW91IGhhdmUgYSBzaGFyZWQgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgdGhhdCBpcyBub3QgYSBkaXJlY3RvcnkgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgQSBQcmUtbWlycm9yIHR5cGljYWxseSBwb2ludHMgdG8gYSBzaGFyZWQgZGlyZWN0b3J5IHRoYXQgaXMKKyAgICAgICAgICAgICAgICBsb2NhbCB0byB5b3VyIG9yZ2FuaXphdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUmVndWxhciBtaXJyb3JzIGNhbiBiZSBhbnkgc2l0ZSBhY3Jvc3MgdGhlIEludGVybmV0IHRoYXQgaXMKKyAgICAgICAgICAgICAgICB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIGxvY2F0aW9uIGZvciBzb3VyY2UgY29kZSBzaG91bGQgdGhlCisgICAgICAgICAgICAgICAgcHJpbWFyeSBzaXRlIG5vdCBiZSBmdW5jdGlvbmluZyBmb3Igc29tZSByZWFzb24gb3IgYW5vdGhlci4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwYWNrYWdlLWZlZWRzLWRldi1lbnZpcm9ubWVudCI+CisgICAgICAgIDx0aXRsZT5QYWNrYWdlIEZlZWRzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZ2VuZXJhdGVzIGFuIGltYWdlIG9yIGFuIFNESywKKyAgICAgICAgICAgIGl0IGdldHMgdGhlIHBhY2thZ2VzIGZyb20gYSBwYWNrYWdlIGZlZWQgYXJlYSBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZ2VuZXJhbC15b2N0by1lbnZpcm9ubWVudC1maWd1cmUnPmdlbmVyYWwgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCBmaWd1cmU8L2xpbms+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+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2JpdGJha2UtZGV2LWVudmlyb25tZW50Jz4KKyAgICAgICAgPHRpdGxlPkJpdEJha2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYml0YmFrZS10ZXJtJz5CaXRCYWtlPC91bGluaz4KKyAgICAgICAgICAgIHRvIHByb2R1Y2UgaW1hZ2VzLgorICAgICAgICAgICAgWW91IGNhbiBzZWUgZnJvbSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz5nZW5lcmFsIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgZmlndXJlPC9saW5rPiwKKyAgICAgICAgICAgIHRoZSBCaXRCYWtlIGFyZWEgY29uc2lzdHMgb2Ygc2V2ZXJhbCBmdW5jdGlvbmFsIGFyZWFzLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHRha2VzIGEgY2xvc2VyIGxvb2sgYXQgZWFjaCBvZiB0aG9zZSBhcmVhcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU2VwYXJhdGUgZG9jdW1lbnRhdGlvbiBleGlzdHMgZm9yIHRoZSBCaXRCYWtlIHRvb2wuCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I2JpdGJha2UtdXNlci1tYW51YWwnPkJpdEJha2UgVXNlciBNYW51YWw8L3VsaW5rPgorICAgICAgICAgICAgZm9yIHJlZmVyZW5jZSBtYXRlcmlhbCBvbiBCaXRCYWtlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NvdXJjZS1mZXRjaGluZy1kZXYtZW52aXJvbm1lbnQnPgorICAgICAgICAgICAgPHRpdGxlPlNvdXJjZSBGZXRjaGluZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBzdGFnZXMgb2YgYnVpbGRpbmcgYSByZWNpcGUgYXJlIHRvIGZldGNoIGFuZCB1bnBhY2sKKyAgICAgICAgICAgICAgICB0aGUgc291cmNlIGNvZGU6CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3NvdXJjZS1mZXRjaGluZy5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI2LjVpbiIgZGVwdGg9IjVpbiIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWZldGNoJz48ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtdW5wYWNrJz48ZmlsZW5hbWU+ZG9fdW5wYWNrPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGFza3MgZmV0Y2ggdGhlIHNvdXJjZSBmaWxlcyBhbmQgdW5wYWNrIHRoZW0gaW50byB0aGUgd29yaworICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV2ZXJ5IGxvY2FsIGZpbGUgKGUuZy4gPGZpbGVuYW1lPmZpbGU6Ly88L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBpcyBwYXJ0IG9mIGEgcmVjaXBlJ3MKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdGFrZXMgYSBjaGVja3N1bQorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZmlsZSBmb3IgdGhlIHJlY2lwZSBhbmQgaW5zZXJ0cyB0aGUgY2hlY2tzdW0gaW50bworICAgICAgICAgICAgICAgICAgICB0aGUgc2lnbmF0dXJlIGZvciB0aGUgPGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIElmIGFueSBsb2NhbCBmaWxlIGhhcyBiZWVuIG1vZGlmaWVkLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT4gdGFzayBhbmQgYWxsIHRhc2tzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kIG9uIGl0IGFyZSByZS1leGVjdXRlZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgZXZlcnl0aGluZyBpcyBhY2NvbXBsaXNoZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICB3aGljaCBoYXMgYSBkZWZpbmVkIHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICBGb3IgYWRkaXRpb25hbCBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIHRoZSBCdWlsZCBEaXJlY3RvcnksCisgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1idWlsZCc+PGZpbGVuYW1lPmJ1aWxkLzwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVbnBhY2tlZCBzb3VyY2UgZmlsZXMgYXJlIHBvaW50ZWQgdG8gYnkgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIEVhY2ggcmVjaXBlIGhhcyBhbiBhcmVhIGluIHRoZSBCdWlsZCBEaXJlY3Rvcnkgd2hlcmUgdGhlCisgICAgICAgICAgICAgICAgdW5wYWNrZWQgc291cmNlIGNvZGUgcmVzaWRlcy4KKyAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGF0IGRpcmVjdG9yeSBmb3IgYW55IGdpdmVuIHJlY2lwZSBpcyBkZWZpbmVkIGZyb20KKyAgICAgICAgICAgICAgICBzZXZlcmFsIGRpZmZlcmVudCB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlIHZhcmlhYmxlcyB0aGF0IGRlZmluZSB0aGVzZSBkaXJlY3RvcmllcworICAgICAgICAgICAgICAgIGJ5IGxvb2tpbmcgYXQgdGhlIGZpZ3VyZToKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYmFzZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1zIGFsbCBpdHMgd29yayBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9BUkNIJz48ZmlsZW5hbWU+UEFDS0FHRV9BUkNIPC9maWxlbmFtZT48L2xpbms+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGJ1aWx0IHBhY2thZ2Ugb3IgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfT1MnPjxmaWxlbmFtZT5UQVJHRVRfT1M8L2ZpbGVuYW1lPjwvbGluaz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG9wZXJhdGluZyBzeXN0ZW0gb2YgdGhlIHRhcmdldCBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBidWlsdCBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmVyc2lvbiBvZiB0aGUgcmVjaXBlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L2xpbms+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZXZpc2lvbiBvZiB0aGUgcmVjaXBlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYXRpb24gd2l0aGluIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiB3aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgYSBzcGVjaWZpYyBwYWNrYWdlIGlzIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUyc+PGZpbGVuYW1lPlM8L2ZpbGVuYW1lPjwvbGluaz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgQ29udGFpbnMgdGhlIHVucGFja2VkIHNvdXJjZSBmaWxlcyBmb3IgYSBnaXZlbiByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwYXRjaGluZy1kZXYtZW52aXJvbm1lbnQnPgorICAgICAgICAgICAgPHRpdGxlPlBhdGNoaW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSBzb3VyY2UgY29kZSBpcyBmZXRjaGVkIGFuZCB1bnBhY2tlZCwgQml0QmFrZSBsb2NhdGVzCisgICAgICAgICAgICAgICAgcGF0Y2ggZmlsZXMgYW5kIGFwcGxpZXMgdGhlbSB0byB0aGUgc291cmNlIGZpbGVzOgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wYXRjaGluZy5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI2aW4iIGRlcHRoPSI1aW4iIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYXRjaCc+PGZpbGVuYW1lPmRvX3BhdGNoPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGFzayBwcm9jZXNzZXMgcmVjaXBlcyBieQorICAgICAgICAgICAgICAgIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGxvY2F0ZSBhcHBsaWNhYmxlIHBhdGNoIGZpbGVzLCB3aGljaCBieSBkZWZhdWx0CisgICAgICAgICAgICAgICAgYXJlIDxmaWxlbmFtZT4qLnBhdGNoPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ki5kaWZmPC9maWxlbmFtZT4gZmlsZXMsIG9yIGFueSBmaWxlIGlmCisgICAgICAgICAgICAgICAgImFwcGx5PXllcyIgaXMgc3BlY2lmaWVkIGZvciB0aGUgZmlsZSBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgZmluZHMgYW5kIGFwcGxpZXMgbXVsdGlwbGUgcGF0Y2hlcyBmb3IgYSBzaW5nbGUgcmVjaXBlCisgICAgICAgICAgICAgICAgaW4gdGhlIG9yZGVyIGluIHdoaWNoIGl0IGZpbmRzIHRoZSBwYXRjaGVzLgorICAgICAgICAgICAgICAgIFBhdGNoZXMgYXJlIGFwcGxpZWQgdG8gdGhlIHJlY2lwZSdzIHNvdXJjZSBmaWxlcyBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPiBkaXJlY3RvcnkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGUgc291cmNlIGRpcmVjdG9yaWVzIGFyZQorICAgICAgICAgICAgICAgIGNyZWF0ZWQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc291cmNlLWZldGNoaW5nLWRldi1lbnZpcm9ubWVudCc+U291cmNlIEZldGNoaW5nPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyYXRpb24tYW5kLWNvbXBpbGF0aW9uLWRldi1lbnZpcm9ubWVudCc+CisgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJhdGlvbiBhbmQgQ29tcGlsYXRpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBZnRlciBzb3VyY2UgY29kZSBpcyBwYXRjaGVkLCBCaXRCYWtlIGV4ZWN1dGVzIHRhc2tzIHRoYXQKKyAgICAgICAgICAgICAgICBjb25maWd1cmUgYW5kIGNvbXBpbGUgdGhlIHNvdXJjZSBjb2RlOgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9jb25maWd1cmF0aW9uLWNvbXBpbGUtYXV0b3JlY29uZi5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI3aW4iIGRlcHRoPSI1aW4iIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc3RlcCBpbiB0aGUgYnVpbGQgcHJvY2VzcyBjb25zaXN0cyBvZiB0aHJlZSB0YXNrczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB0YXNrIGNvbmZpZ3VyZXMgdGhlIHNvdXJjZSBieSBlbmFibGluZyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGluZyBhbnkgYnVpbGQtdGltZSBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbnMgY2FuIGNvbWUgZnJvbSB0aGUgcmVjaXBlIGl0c2VsZiBhcyB3ZWxsCisgICAgICAgICAgICAgICAgICAgICAgICBhcyBmcm9tIGFuIGluaGVyaXRlZCBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIHNvZnR3YXJlIGl0c2VsZiBtaWdodCBjb25maWd1cmUgaXRzZWxmCisgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRpbmcgb24gdGhlIHRhcmdldCBmb3Igd2hpY2ggaXQgaXMgYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBjb25maWd1cmF0aW9ucyBoYW5kbGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbmZpZ3VyZSc+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdGFzayBhcmUgc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHNvdXJjZSBjb2RlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzb3VyY2UgY29kZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVpbmcgYnVpbHQgYnkgdGhlIHJlY2lwZS48L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBhcmUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMnPjxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBhZGQgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYnkgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8bGluayBsaW5rZW5kPSd2YXItRVhUUkFfT0VDT05GJz48ZmlsZW5hbWU+RVhUUkFfT0VDT05GPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdGhpcyB2YXJpYWJsZSB3b3JrcyB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgY2xhc3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvYXV0b3Rvb2xzLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgT25jZSBhIGNvbmZpZ3VyYXRpb24gdGFzayBoYXMgYmVlbiBzYXRpc2ZpZWQsIEJpdEJha2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVzIHRoZSBzb3VyY2UgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgICAgICAgICBDb21waWxhdGlvbiBvY2N1cnMgaW4gdGhlIGRpcmVjdG9yeSBwb2ludGVkIHRvIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUInPjxmaWxlbmFtZT5CPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJlYWxpemUgdGhhdCB0aGUgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaXMsIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0LCB0aGUgc2FtZSBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgY29tcGlsYXRpb24gaXMgZG9uZSwgQml0QmFrZSBleGVjdXRlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdGFzayBjb3BpZXMgZmlsZXMgZnJvbSB0aGUgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGFuZCBwbGFjZXMgdGhlbSBpbiBhIGhvbGRpbmcgYXJlYSBwb2ludGVkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncGFja2FnZS1zcGxpdHRpbmctZGV2LWVudmlyb25tZW50Jz4KKyAgICAgICAgICAgIDx0aXRsZT5QYWNrYWdlIFNwbGl0dGluZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFmdGVyIHNvdXJjZSBjb2RlIGlzIGNvbmZpZ3VyZWQgYW5kIGNvbXBpbGVkLCB0aGUKKyAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGFuYWx5emVzCisgICAgICAgICAgICAgICAgdGhlIHJlc3VsdHMgYW5kIHNwbGl0cyB0aGUgb3V0cHV0IGludG8gcGFja2FnZXM6CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2FuYWx5c2lzLWZvci1wYWNrYWdlLXNwbGl0dGluZy5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI3aW4iIGRlcHRoPSI3aW4iIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlJz48ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlZGF0YSc+PGZpbGVuYW1lPmRvX3BhY2thZ2VkYXRhPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGFza3MgY29tYmluZSB0byBhbmFseXplCisgICAgICAgICAgICAgICAgdGhlIGZpbGVzIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC9saW5rPiBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBhbmQgc3BsaXQgdGhlbSBpbnRvIHN1YnNldHMgYmFzZWQgb24gYXZhaWxhYmxlIHBhY2thZ2VzIGFuZAorICAgICAgICAgICAgICAgIGZpbGVzLgorICAgICAgICAgICAgICAgIFRoZSBhbmFseXppbmcgcHJvY2VzcyBpbnZvbHZlcyB0aGUgZm9sbG93aW5nIGFzIHdlbGwgYXMgb3RoZXIKKyAgICAgICAgICAgICAgICBpdGVtczogc3BsaXR0aW5nIG91dCBkZWJ1Z2dpbmcgc3ltYm9scywKKyAgICAgICAgICAgICAgICBsb29raW5nIGF0IHNoYXJlZCBsaWJyYXJ5IGRlcGVuZGVuY2llcyBiZXR3ZWVuIHBhY2thZ2VzLAorICAgICAgICAgICAgICAgIGFuZCBsb29raW5nIGF0IHBhY2thZ2UgcmVsYXRpb25zaGlwcy4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRvX3BhY2thZ2VkYXRhPC9maWxlbmFtZT4gdGFzayBjcmVhdGVzIHBhY2thZ2UKKyAgICAgICAgICAgICAgICBtZXRhZGF0YSBiYXNlZCBvbiB0aGUgYW5hbHlzaXMgc3VjaCB0aGF0IHRoZQorICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2FuIGdlbmVyYXRlIHRoZSBmaW5hbCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICBXb3JraW5nLCBzdGFnZWQsIGFuZCBpbnRlcm1lZGlhdGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMKKyAgICAgICAgICAgICAgICBhbmQgcGFja2FnZSBzcGxpdHRpbmcgcHJvY2VzcyB1c2UgdGhlc2UgYXJlYXM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1QS0dEJz48ZmlsZW5hbWU+UEtHRDwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGZvciBwYWNrYWdlcyBiZWZvcmUgdGhleSBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUEtHREFUQV9ESVInPjxmaWxlbmFtZT5QS0dEQVRBX0RJUjwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBBIHNoYXJlZCwgZ2xvYmFsLXN0YXRlIGRpcmVjdG9yeSB0aGF0IGhvbGRzIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZCBkdXJpbmcgdGhlIHBhY2thZ2luZyBwcm9jZXNzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUEtHREVTVFdPUksnPjxmaWxlbmFtZT5QS0dERVNUV09SSzwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBBIHRlbXBvcmFyeSB3b3JrIGFyZWEgdXNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT4gdGFzay4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVBLR0RFU1QnPjxmaWxlbmFtZT5QS0dERVNUPC9maWxlbmFtZT48L2xpbms+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwYXJlbnQgZGlyZWN0b3J5IGZvciBwYWNrYWdlcyBhZnRlciB0aGV5IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZW4gc3BsaXQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICBUaGUgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTJz48ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBkZWZpbmVzIHRoZSBmaWxlcyB0aGF0IGdvIGludG8gZWFjaCBwYWNrYWdlIGluCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgZGV0YWlscyBvbiBob3cgdGhpcyBpcyBhY2NvbXBsaXNoZWQsIHlvdSBjYW4KKyAgICAgICAgICAgICAgICBsb29rIGF0IHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2UnPjxmaWxlbmFtZT5wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBwYWNrYWdlcyBiZWluZyBjcmVhdGVkIChSUE0sIERFQiwgb3IKKyAgICAgICAgICAgICAgICBJUEspLCB0aGUgPGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfKjwvZmlsZW5hbWU+IHRhc2sKKyAgICAgICAgICAgICAgICBjcmVhdGVzIHRoZSBhY3R1YWwgcGFja2FnZXMgYW5kIHBsYWNlcyB0aGVtIGluIHRoZQorICAgICAgICAgICAgICAgIFBhY2thZ2UgRmVlZCBhcmVhLCB3aGljaCBpcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1RNUERJUn0vZGVwbG95PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhY2thZ2UtZmVlZHMtZGV2LWVudmlyb25tZW50Jz5QYWNrYWdlIEZlZWRzPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGRldGFpbCBvbiB0aGF0IHBhcnQgb2YgdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIGNyZWF0aW5nIGZlZWRzIGRpcmVjdGx5IGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXBsb3kvKjwvZmlsZW5hbWU+IGRpcmVjdG9yaWVzIGRvZXMgbm90IGV4aXN0LgorICAgICAgICAgICAgICAgICAgICBDcmVhdGluZyBzdWNoIGZlZWRzIHVzdWFsbHkgcmVxdWlyZXMgc29tZSBraW5kIG9mIGZlZWQKKyAgICAgICAgICAgICAgICAgICAgbWFpbnRlbmFuY2UgbWVjaGFuaXNtIHRoYXQgd291bGQgdXBsb2FkIHRoZSBuZXcgcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgaW50byBhbiBvZmZpY2lhbCBwYWNrYWdlIGZlZWQgKGUuZy4gdGhlCisgICAgICAgICAgICAgICAgICAgIMOFbmdzdHLDtm0gZGlzdHJpYnV0aW9uKS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbmFsaXR5IGlzIGhpZ2hseSBkaXN0cmlidXRpb24tc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRodXMgaXMgbm90IHByb3ZpZGVkIG91dCBvZiB0aGUgYm94LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpbWFnZS1nZW5lcmF0aW9uLWRldi1lbnZpcm9ubWVudCc+CisgICAgICAgICAgICA8dGl0bGU+SW1hZ2UgR2VuZXJhdGlvbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uY2UgcGFja2FnZXMgYXJlIHNwbGl0IGFuZCBzdG9yZWQgaW4gdGhlIFBhY2thZ2UgRmVlZHMgYXJlYSwKKyAgICAgICAgICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIEJpdEJha2UgdG8gZ2VuZXJhdGUgdGhlCisgICAgICAgICAgICAgICAgcm9vdCBmaWxlc3lzdGVtIGltYWdlOgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9pbWFnZS1nZW5lcmF0aW9uLnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGltYWdlIGdlbmVyYXRpb24gcHJvY2VzcyBjb25zaXN0cyBvZiBzZXZlcmFsIHN0YWdlcyBhbmQKKyAgICAgICAgICAgICAgICBkZXBlbmRzIG9uIG1hbnkgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1yb290ZnMnPjxmaWxlbmFtZT5kb19yb290ZnM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB0YXNrIHVzZXMgdGhlc2Uga2V5IHZhcmlhYmxlcworICAgICAgICAgICAgICAgIHRvIGhlbHAgY3JlYXRlIHRoZSBsaXN0IG9mIHBhY2thZ2VzIHRvIGFjdHVhbGx5IGluc3RhbGw6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9JTlNUQUxMJz48ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIExpc3RzIG91dCB0aGUgYmFzZSBzZXQgb2YgcGFja2FnZXMgdG8gaW5zdGFsbCBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgUGFja2FnZSBGZWVkcyBhcmVhLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfRVhDTFVERSc+PGZpbGVuYW1lPlBBQ0tBR0VfRVhDTFVERTwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBwYWNrYWdlcyB0aGF0IHNob3VsZCBub3QgYmUgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBmZWF0dXJlcyB0byBpbmNsdWRlIGluIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIE1vc3Qgb2YgdGhlc2UgZmVhdHVyZXMgbWFwIHRvIGFkZGl0aW9uYWwgcGFja2FnZXMgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9DTEFTU0VTJz48ZmlsZW5hbWU+UEFDS0FHRV9DTEFTU0VTPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYWNrYWdlIGJhY2tlbmQgdG8gdXNlIGFuZCBjb25zZXF1ZW50bHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBzIGRldGVybWluZSB3aGVyZSB0byBsb2NhdGUgcGFja2FnZXMgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZSBGZWVkcyBhcmVhLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0xJTkdVQVMnPjxmaWxlbmFtZT5JTUFHRV9MSU5HVUFTPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyB0aGUgbGFuZ3VhZ2UocykgZm9yIHdoaWNoIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlIHN1cHBvcnQgcGFja2FnZXMgYXJlIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBQYWNrYWdlIGluc3RhbGxhdGlvbiBpcyB1bmRlciBjb250cm9sIG9mIHRoZSBwYWNrYWdlIG1hbmFnZXIKKyAgICAgICAgICAgICAgICAoZS5nLiBzbWFydC9ycG0sIG9wa2csIG9yIGFwdC9kcGtnKSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3IKKyAgICAgICAgICAgICAgICBub3QgcGFja2FnZSBtYW5hZ2VtZW50IGlzIGVuYWJsZWQgZm9yIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgQXQgdGhlIGVuZCBvZiB0aGUgcHJvY2VzcywgaWYgcGFja2FnZSBtYW5hZ2VtZW50IGlzIG5vdAorICAgICAgICAgICAgICAgIGVuYWJsZWQgZm9yIHRoZSB0YXJnZXQsIHRoZSBwYWNrYWdlIG1hbmFnZXIncyBkYXRhIGZpbGVzCisgICAgICAgICAgICAgICAgYXJlIGRlbGV0ZWQgZnJvbSB0aGUgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEdXJpbmcgaW1hZ2UgZ2VuZXJhdGlvbiwgdGhlIGJ1aWxkIHN5c3RlbSBhdHRlbXB0cyB0byBydW4KKyAgICAgICAgICAgICAgICBhbGwgcG9zdC1pbnN0YWxsYXRpb24gc2NyaXB0cy4KKyAgICAgICAgICAgICAgICBBbnkgdGhhdCBmYWlsIHRvIHJ1biBvbiB0aGUgYnVpbGQgaG9zdCBhcmUgcnVuIG9uIHRoZQorICAgICAgICAgICAgICAgIHRhcmdldCB3aGVuIHRoZSB0YXJnZXQgc3lzdGVtIGlzIGZpcnN0IGJvb3RlZC4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIGEKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1hLXJlYWQtb25seS1yb290LWZpbGVzeXN0ZW0nPnJlYWQtb25seSByb290IGZpbGVzeXN0ZW08L3VsaW5rPiwKKyAgICAgICAgICAgICAgICBhbGwgdGhlIHBvc3QgaW5zdGFsbGF0aW9uIHNjcmlwdHMgbXVzdCBzdWNjZWVkIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICBwYWNrYWdlIGluc3RhbGxhdGlvbiBwaGFzZSBzaW5jZSB0aGUgcm9vdCBmaWxlc3lzdGVtIGlzCisgICAgICAgICAgICAgICAgcmVhZC1vbmx5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEdXJpbmcgT3B0aW1pemF0aW9uLCBvcHRpbWl6aW5nIHByb2Nlc3NlcyBhcmUgcnVuIGFjcm9zcworICAgICAgICAgICAgICAgIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICBUaGVzZSBwcm9jZXNzZXMgaW5jbHVkZSA8ZmlsZW5hbWU+bWtsaWJzPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnByZWxpbms8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1rbGliczwvZmlsZW5hbWU+IHByb2Nlc3Mgb3B0aW1pemVzIHRoZSBzaXplCisgICAgICAgICAgICAgICAgb2YgdGhlIGxpYnJhcmllcy4KKyAgICAgICAgICAgICAgICBBIDxmaWxlbmFtZT5wcmVsaW5rPC9maWxlbmFtZT4gcHJvY2VzcyBvcHRpbWl6ZXMgdGhlIGR5bmFtaWMKKyAgICAgICAgICAgICAgICBsaW5raW5nIG9mIHNoYXJlZCBsaWJyYXJpZXMgdG8gcmVkdWNlIHN0YXJ0IHVwIHRpbWUgb2YKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQWxvbmcgd2l0aCB3cml0aW5nIG91dCB0aGUgcm9vdCBmaWxlc3lzdGVtIGltYWdlLCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcm9vdGZzPC9maWxlbmFtZT4gdGFzayBjcmVhdGVzIGEgbWFuaWZlc3QgZmlsZQorICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Lm1hbmlmZXN0PC9maWxlbmFtZT4pIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcworICAgICAgICAgICAgICAgIHRoZSByb290IGZpbGVzeXN0ZW0gaW1hZ2UgdGhhdCBsaXN0cyBvdXQsIGxpbmUtYnktbGluZSwgdGhlCisgICAgICAgICAgICAgICAgaW5zdGFsbGVkIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIFRoaXMgbWFuaWZlc3QgZmlsZSBpcyB1c2VmdWwgZm9yIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXRlc3RpbWFnZSc+PGZpbGVuYW1lPnRlc3RpbWFnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNsYXNzLCBmb3IgZXhhbXBsZSwgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRvIHJ1bgorICAgICAgICAgICAgICAgIHNwZWNpZmljIHRlc3RzLgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfTUFOSUZFU1QnPjxmaWxlbmFtZT5JTUFHRV9NQU5JRkVTVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBQYXJ0IG9mIHRoZSBpbWFnZSBnZW5lcmF0aW9uIHByb2Nlc3MgaW5jbHVkZXMgY29tcHJlc3NpbmcgdGhlCisgICAgICAgICAgICAgICAgcm9vdCBmaWxlc3lzdGVtIGltYWdlLgorICAgICAgICAgICAgICAgIENvbXByZXNzaW9uIGlzIGFjY29tcGxpc2hlZCB0aHJvdWdoIHNldmVyYWwgb3B0aW1pemF0aW9uCisgICAgICAgICAgICAgICAgcm91dGluZXMgZGVzaWduZWQgdG8gcmVkdWNlIHRoZSBvdmVyYWxsIHNpemUgb2YgdGhlIGltYWdlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBZnRlciB0aGUgcm9vdCBmaWxlc3lzdGVtIGhhcyBiZWVuIGNvbnN0cnVjdGVkLCB0aGUgaW1hZ2UKKyAgICAgICAgICAgICAgICBnZW5lcmF0aW9uIHByb2Nlc3MgdHVybnMgZXZlcnl0aGluZyBpbnRvIGFuIGltYWdlIGZpbGUgb3IKKyAgICAgICAgICAgICAgICBhIHNldCBvZiBpbWFnZSBmaWxlcy4KKyAgICAgICAgICAgICAgICBUaGUgZm9ybWF0cyB1c2VkIGZvciB0aGUgcm9vdCBmaWxlc3lzdGVtIGRlcGVuZCBvbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+PGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhlIGVudGlyZSBpbWFnZSBnZW5lcmF0aW9uIHByb2Nlc3MgaXMgcnVuIHVuZGVyIFBzZXVkby4KKyAgICAgICAgICAgICAgICBSdW5uaW5nIHVuZGVyIFBzZXVkbyBlbnN1cmVzIHRoYXQgdGhlIGZpbGVzIGluIHRoZSByb290CisgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSBoYXZlIGNvcnJlY3Qgb3duZXJzaGlwLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Nkay1nZW5lcmF0aW9uLWRldi1lbnZpcm9ubWVudCc+CisgICAgICAgICAgICA8dGl0bGU+U0RLIEdlbmVyYXRpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIEJpdEJha2UgdG8gZ2VuZXJhdGUgdGhlCisgICAgICAgICAgICAgICAgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspIGluc3RhbGxlciBzY3JpcHQ6CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3Nkay1nZW5lcmF0aW9uLnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbgorICAgICAgICAgICAgICAgIGdlbmVyYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluLWdlbmVyYXRpb24nPkNyb3NzLURldmVsb3BtZW50IFRvb2xjaGFpbiBHZW5lcmF0aW9uPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBhZHZhbnRhZ2VzIGdhaW5lZCB3aGVuIGJ1aWxkaW5nIGEKKyAgICAgICAgICAgICAgICBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBvcHVsYXRlX3Nkayc+PGZpbGVuYW1lPmRvX3BvcHVsYXRlX3NkazwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHRhc2ssIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjb3B0aW9uYWxseS1idWlsZGluZy1hLXRvb2xjaGFpbi1pbnN0YWxsZXInPk9wdGlvbmFsbHkgQnVpbGRpbmcgYSBUb29sY2hhaW4gSW5zdGFsbGVyPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgICAgIDwvbm90ZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTGlrZSBpbWFnZSBnZW5lcmF0aW9uLCB0aGUgU0RLIHNjcmlwdCBwcm9jZXNzIGNvbnNpc3RzIG9mCisgICAgICAgICAgICAgICAgc2V2ZXJhbCBzdGFnZXMgYW5kIGRlcGVuZHMgb24gbWFueSB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zZGs8L2ZpbGVuYW1lPiB0YXNrIHVzZXMgdGhlc2UKKyAgICAgICAgICAgICAgICBrZXkgdmFyaWFibGVzIHRvIGhlbHAgY3JlYXRlIHRoZSBsaXN0IG9mIHBhY2thZ2VzIHRvIGFjdHVhbGx5CisgICAgICAgICAgICAgICAgaW5zdGFsbC4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIHZhcmlhYmxlcyBsaXN0ZWQgaW4gdGhlIGZpZ3VyZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstZGV2LWVudmlyb25tZW50Jz5BcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBTREs8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc2RrPC9maWxlbmFtZT4gdGFzayBoYW5kbGVzIHR3bworICAgICAgICAgICAgICAgIHBhcnRzOiBhIHRhcmdldCBwYXJ0IGFuZCBhIGhvc3QgcGFydC4KKyAgICAgICAgICAgICAgICBUaGUgdGFyZ2V0IHBhcnQgaXMgdGhlIHBhcnQgYnVpbHQgZm9yIHRoZSB0YXJnZXQgaGFyZHdhcmUgYW5kCisgICAgICAgICAgICAgICAgaW5jbHVkZXMgbGlicmFyaWVzIGFuZCBoZWFkZXJzLgorICAgICAgICAgICAgICAgIFRoZSBob3N0IHBhcnQgaXMgdGhlIHBhcnQgb2YgdGhlIFNESyB0aGF0IHJ1bnMgb24gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES01BQ0hJTkUnPjxmaWxlbmFtZT5TREtNQUNISU5FPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmNlIGJvdGggcGFydHMgYXJlIGNvbnN0cnVjdGVkLCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc2RrPC9maWxlbmFtZT4gdGFzayBwZXJmb3JtcyBzb21lIGNsZWFudXAKKyAgICAgICAgICAgICAgICBvbiBib3RoIHBhcnRzLgorICAgICAgICAgICAgICAgIEFmdGVyIHRoZSBjbGVhbnVwLCB0aGUgdGFzayBjcmVhdGVzIGEgY3Jvc3MtZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgYW5kIGFueSBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQKKyAgICAgICAgICAgICAgICBtaWdodCBiZSBuZWVkZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmaW5hbCBvdXRwdXQgb2YgdGhlIHRhc2sgaXMgdGhlIENyb3NzLWRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgdG9vbGNoYWluIGluc3RhbGxhdGlvbiBzY3JpcHQgKDxmaWxlbmFtZT4uc2g8L2ZpbGVuYW1lPiBmaWxlKSwKKyAgICAgICAgICAgICAgICB3aGljaCBpbmNsdWRlcyB0aGUgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2ltYWdlcy1kZXYtZW52aXJvbm1lbnQnPgorICAgICAgICA8dGl0bGU+SW1hZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBpbWFnZXMgcHJvZHVjZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgIGFyZSBjb21wcmVzc2VkIGZvcm1zIG9mIHRoZQorICAgICAgICAgICAgcm9vdCBmaWxlc3lzdGVtIHRoYXQgYXJlIHJlYWR5IHRvIGJvb3Qgb24gYSB0YXJnZXQgZGV2aWNlLgorICAgICAgICAgICAgWW91IGNhbiBzZWUgZnJvbSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz5nZW5lcmFsIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgZmlndXJlPC9saW5rPgorICAgICAgICAgICAgdGhhdCBCaXRCYWtlIG91dHB1dCwgaW4gcGFydCwgY29uc2lzdHMgb2YgaW1hZ2VzLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGlzIGdvaW5nIHRvIGxvb2sgbW9yZSBjbG9zZWx5IGF0IHRoaXMgb3V0cHV0OgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2ltYWdlcy5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI1LjVpbiIgZGVwdGg9IjUuNWluIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgYSBsaXN0IG9mIGV4YW1wbGUgaW1hZ2VzIHRoYXQgdGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMsCisgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWltYWdlcyc+SW1hZ2VzPC9saW5rPiIgY2hhcHRlci4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW1hZ2VzIGFyZSB3cml0dGVuIG91dCB0byB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIGluc2lkZSB0aGUgPGZpbGVuYW1lPnRtcC9kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT4vPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZvbGRlciBhcyBzaG93biBpbiB0aGUgZmlndXJlLgorICAgICAgICAgICAgVGhpcyBmb2xkZXIgY29udGFpbnMgYW55IGZpbGVzIGV4cGVjdGVkIHRvIGJlIGxvYWRlZCBvbiB0aGUKKyAgICAgICAgICAgIHRhcmdldCBkZXZpY2UuCisgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSJz48ZmlsZW5hbWU+REVQTE9ZX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgcG9pbnRzIHRvIHRoZSA8ZmlsZW5hbWU+ZGVwbG95PC9maWxlbmFtZT4gZGlyZWN0b3J5LAorICAgICAgICAgICAgd2hpbGUgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9JTUFHRSc+PGZpbGVuYW1lPkRFUExPWV9ESVJfSU1BR0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIHBvaW50cyB0byB0aGUgYXBwcm9wcmlhdGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgaW1hZ2VzIGZvcgorICAgICAgICAgICAgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48cmVwbGFjZWFibGU+a2VybmVsLWltYWdlPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgQSBrZXJuZWwgYmluYXJ5IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8bGluayBsaW5rZW5kPSd2YXItS0VSTkVMX0lNQUdFVFlQRSc+PGZpbGVuYW1lPktFUk5FTF9JTUFHRVRZUEU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgc2V0dGluZyBkZXRlcm1pbmVzIHRoZSBuYW1pbmcgc2NoZW1lIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAga2VybmVsIGltYWdlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGF0IHZhcmlhYmxlLCB0aGUgZmlsZSBjb3VsZCBiZWdpbiB3aXRoCisgICAgICAgICAgICAgICAgICAgIGEgdmFyaWV0eSBvZiBuYW1pbmcgc3RyaW5ncy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgY2FuIGNvbnRhaW4gbXVsdGlwbGUgaW1hZ2UgZmlsZXMgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnJvb3QtZmlsZXN5c3RlbS1pbWFnZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFJvb3QgZmlsZXN5c3RlbXMgZm9yIHRoZSB0YXJnZXQgZGV2aWNlIChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4qLmV4dDM8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+Ki5iejI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlcykuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+PGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgc2V0dGluZyBkZXRlcm1pbmVzIHRoZSByb290IGZpbGVzeXN0ZW0gaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgY2FuIGNvbnRhaW4gbXVsdGlwbGUgcm9vdCBmaWxlc3lzdGVtcyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48cmVwbGFjZWFibGU+a2VybmVsLW1vZHVsZXM8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBUYXJiYWxscyB0aGF0IGNvbnRhaW4gYWxsIHRoZSBtb2R1bGVzIGJ1aWx0IGZvciB0aGUga2VybmVsLgorICAgICAgICAgICAgICAgICAgICBLZXJuZWwgbW9kdWxlIHRhcmJhbGxzIGV4aXN0IGZvciBsZWdhY3kgcHVycG9zZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIGNhbiBiZSBzdXBwcmVzc2VkIGJ5IHNldHRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NT0RVTEVfVEFSQkFMTF9ERVBMT1knPjxmaWxlbmFtZT5NT0RVTEVfVEFSQkFMTF9ERVBMT1k8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gIjAiLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRlcGxveS9pbWFnZXMvPHJlcGxhY2VhYmxlPm1hY2hpbmU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBjYW4gY29udGFpbiBtdWx0aXBsZSBrZXJuZWwgbW9kdWxlIHRhcmJhbGxzCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgbWFjaGluZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5ib290bG9hZGVyczwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIEJvb3Rsb2FkZXJzIHN1cHBvcnRpbmcgdGhlIGltYWdlLCBpZiBhcHBsaWNhYmxlIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgY2FuIGNvbnRhaW4gbXVsdGlwbGUgYm9vdGxvYWRlcnMgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnN5bWxpbmtzPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmb2xkZXIgY29udGFpbnMKKyAgICAgICAgICAgICAgICAgICAgYSBzeW1ib2xpYyBsaW5rIHRoYXQgcG9pbnRzIHRvIHRoZSBtb3N0IHJlY2VudGx5IGJ1aWx0IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgZm9yIGVhY2ggbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgbGlua3MgbWlnaHQgYmUgdXNlZnVsIGZvciBleHRlcm5hbCBzY3JpcHRzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBvYnRhaW4gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGVhY2ggZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzZGstZGV2LWVudmlyb25tZW50Jz4KKyAgICAgICAgPHRpdGxlPkFwcGxpY2F0aW9uIERldmVsb3BtZW50IFNESzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz5nZW5lcmFsIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgZmlndXJlPC9saW5rPiwKKyAgICAgICAgICAgIHRoZSBvdXRwdXQgbGFiZWxlZCAiQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgU0RLIiByZXByZXNlbnRzIGFuCisgICAgICAgICAgICBTREsuCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gaXMgZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoaXMgb3V0cHV0OgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3Nkay5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI1aW4iIGRlcHRoPSI0aW4iIC8+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBzcGVjaWZpYyBmb3JtIG9mIHRoaXMgb3V0cHV0IGlzIGEgc2VsZi1leHRyYWN0aW5nCisgICAgICAgICAgICBTREsgaW5zdGFsbGVyICg8ZmlsZW5hbWU+Ki5zaDwvZmlsZW5hbWU+KSB0aGF0LCB3aGVuIHJ1biwKKyAgICAgICAgICAgIGluc3RhbGxzIHRoZSBTREssIHdoaWNoIGNvbnNpc3RzIG9mIGEgY3Jvc3MtZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgIHRvb2xjaGFpbiwgYSBzZXQgb2YgbGlicmFyaWVzIGFuZCBoZWFkZXJzLCBhbmQgYW4gU0RLCisgICAgICAgICAgICBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQuCisgICAgICAgICAgICBSdW5uaW5nIHRoaXMgaW5zdGFsbGVyIGVzc2VudGlhbGx5IHNldHMgdXAgeW91cgorICAgICAgICAgICAgY3Jvc3MtZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBZb3UgY2FuIHRoaW5rIG9mIHRoZSBjcm9zcy10b29sY2hhaW4gYXMgdGhlICJob3N0IgorICAgICAgICAgICAgcGFydCBiZWNhdXNlIGl0IHJ1bnMgb24gdGhlIFNESyBtYWNoaW5lLgorICAgICAgICAgICAgWW91IGNhbiB0aGluayBvZiB0aGUgbGlicmFyaWVzIGFuZCBoZWFkZXJzIGFzIHRoZSAidGFyZ2V0IgorICAgICAgICAgICAgcGFydCBiZWNhdXNlIHRoZXkgYXJlIGJ1aWx0IGZvciB0aGUgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgVGhlIHNldHVwIHNjcmlwdCBpcyBhZGRlZCBzbyB0aGF0IHlvdSBjYW4gaW5pdGlhbGl6ZSB0aGUKKyAgICAgICAgICAgIGVudmlyb25tZW50IGJlZm9yZSB1c2luZyB0aGUgdG9vbHMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHN1cHBvcnRzIHNldmVyYWwgbWV0aG9kcyBieSB3aGljaCB5b3UgY2FuCisgICAgICAgICAgICAgICAgc2V0IHVwIHRoaXMgY3Jvc3MtZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgVGhlc2UgbWV0aG9kcyBpbmNsdWRlIGRvd25sb2FkaW5nIHByZS1idWlsdCBTREsgaW5zdGFsbGVycywKKyAgICAgICAgICAgICAgICBidWlsZGluZyBhbmQgaW5zdGFsbGluZyB5b3VyIG93biBTREsgaW5zdGFsbGVyLCBvciBydW5uaW5nCisgICAgICAgICAgICAgICAgYW4gQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgVG9vbGtpdCAoQURUKSBpbnN0YWxsZXIgdG8KKyAgICAgICAgICAgICAgICBpbnN0YWxsIG5vdCBqdXN0IGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMKKyAgICAgICAgICAgICAgICBidXQgYWxzbyBhZGRpdGlvbmFsIHRvb2xzIHRvIGhlbHAgaW4gdGhpcyB0eXBlIG9mCisgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIG9uIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMKKyAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4tZ2VuZXJhdGlvbic+Q3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluIEdlbmVyYXRpb248L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHNldHRpbmcgdXAgYSBjcm9zcy1kZXZlbG9wbWVudAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I2luc3RhbGxpbmctdGhlLWFkdCc+SW5zdGFsbGluZyB0aGUgQURUIGFuZCBUb29sY2hhaW5zPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9ub3RlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSBidWlsdCwgdGhlIFNESyBpbnN0YWxsZXJzIGFyZSB3cml0dGVuIG91dCB0byB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kZXBsb3kvc2RrPC9maWxlbmFtZT4gZm9sZGVyIGluc2lkZSB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIGFzIHNob3duIGluIHRoZSBmaWd1cmUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIHNlY3Rpb24uCisgICAgICAgICAgICBTZXZlcmFsIHZhcmlhYmxlcyBleGlzdCB0aGF0IGhlbHAgY29uZmlndXJlIHRoZXNlIGZpbGVzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVInPjxmaWxlbmFtZT5ERVBMT1lfRElSPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIDxmaWxlbmFtZT5kZXBsb3k8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1TREtNQUNISU5FJz48ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgb24gd2hpY2ggdGhlIGNyb3NzLWRldmVsb3BtZW50IHRvb2xzIGFyZSBydW4gdG8KKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlIHBhY2thZ2VzIGZvciB0aGUgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVNES0lNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+U0RLSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHRoZSBmZWF0dXJlcyB0byBpbmNsdWRlIGluIHRoZSAidGFyZ2V0IiBwYXJ0CisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItVE9PTENIQUlOX0hPU1RfVEFTSyc+PGZpbGVuYW1lPlRPT0xDSEFJTl9IT1NUX1RBU0s8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHBhY2thZ2VzIHRoYXQgbWFrZSB1cCB0aGUgaG9zdAorICAgICAgICAgICAgICAgICAgICBwYXJ0IG9mIHRoZSBTREsgKGkuZS4gdGhlIHBhcnQgdGhhdCBydW5zIG9uCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIC1jIHBvcHVsYXRlX3NkayA8cmVwbGFjZWFibGU+aW1hZ2VuYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB0byBjcmVhdGUgdGhlIFNESywgYSBzZXQgb2YgZGVmYXVsdCBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICBhcHBseS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBhbGxvd3MgeW91IHRvIGFkZCBtb3JlIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVRPT0xDSEFJTl9UQVJHRVRfVEFTSyc+PGZpbGVuYW1lPlRPT0xDSEFJTl9UQVJHRVRfVEFTSzwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgcGFja2FnZXMgdGhhdCBtYWtlIHVwIHRoZSB0YXJnZXQgcGFydAorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgU0RLIChpLmUuIHRoZSBwYXJ0IGJ1aWx0IGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGhhcmR3YXJlKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1TREtQQVRIJz48ZmlsZW5hbWU+U0RLUEFUSDwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgZGVmYXVsdCBTREsgaW5zdGFsbGF0aW9uIHBhdGggb2ZmZXJlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9leGFtcGxlcy9oZWxsby1hdXRvdG9vbHMvaGVsbG9fMi4zLmJiIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvaGVsbG8tYXV0b3Rvb2xzL2hlbGxvXzIuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGZiMGIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvaGVsbG8tYXV0b3Rvb2xzL2hlbGxvXzIuMy5iYgpAQCAtMCwwICsxLDggQEAKK0RFU0NSSVBUSU9OID0gIkdOVSBIZWxsb3dvcmxkIGFwcGxpY2F0aW9uIgorU0VDVElPTiA9ICJleGFtcGxlcyIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hZGVmZGEzMDkwNTIyMzVhYTVkMWU5OWNlNzU1NzAxMCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2hlbGxvL2hlbGxvLSR7UFZ9LnRhci5iejIiCisKK2luaGVyaXQgYXV0b3Rvb2xzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9leGFtcGxlcy9oZWxsby1zaW5nbGUvZmlsZXMvaGVsbG93b3JsZC5jIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvaGVsbG8tc2luZ2xlL2ZpbGVzL2hlbGxvd29ybGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzcxNjliCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvaGVsbG8tc2luZ2xlL2ZpbGVzL2hlbGxvd29ybGQuYwpAQCAtMCwwICsxLDggQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgbWFpbih2b2lkKQoreworCXByaW50ZigiSGVsbG8gd29ybGQhXG4iKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvaGVsbG8tc2luZ2xlL2hlbGxvLmJiIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvaGVsbG8tc2luZ2xlL2hlbGxvLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MTI3NDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9leGFtcGxlcy9oZWxsby1zaW5nbGUvaGVsbG8uYmIKQEAgLTAsMCArMSwxNyBAQAorREVTQ1JJUFRJT04gPSAiU2ltcGxlIGhlbGxvd29ybGQgYXBwbGljYXRpb24iCitTRUNUSU9OID0gImV4YW1wbGVzIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vTUlUO21kNT0wODM1YWRlNjk4ZTBiY2Y4NTA2ZWNkYTJmN2I0ZjMwMiIKKworU1JDX1VSSSA9ICJmaWxlOi8vaGVsbG93b3JsZC5jIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2NvbXBpbGUoKSB7CisJJHtDQ30gaGVsbG93b3JsZC5jIC1vIGhlbGxvd29ybGQKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgaGVsbG93b3JsZCAke0R9JHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9leGFtcGxlcy9saWJ4cG0vbGlieHBtXzMuNS42LmJiIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvbGlieHBtL2xpYnhwbV8zLjUuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNThkNGQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvbGlieHBtL2xpYnhwbV8zLjUuNi5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworREVTQ1JJUFRJT04gPSAiWDExIFBpeG1hcCBsaWJyYXJ5IgorTElDRU5TRSA9ICJYLUJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNlMDc3NjNkMTY5NjNjM2FmMTJkYjI3MWEzMWFiYWE1IgorREVQRU5EUyArPSAibGlieGV4dCIKK1BSID0gInIyIgorUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYcG0iCisKK1BBQ0tBR0VTID0rICJzeHBtIGN4cG0iCitGSUxFU19jeHBtID0gIiR7YmluZGlyfS9jeHBtIgorRklMRVNfc3hwbSA9ICIke2JpbmRpcn0vc3hwbSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2V4YW1wbGVzL210ZC1tYWtlZmlsZS9tdGQtdXRpbHNfMS4wLjAuYmIgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9leGFtcGxlcy9tdGQtbWFrZWZpbGUvbXRkLXV0aWxzXzEuMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMDVhNDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9leGFtcGxlcy9tdGQtbWFrZWZpbGUvbXRkLXV0aWxzXzEuMC4wLmJiCkBAIC0wLDAgKzEsMTUgQEAKK0RFU0NSSVBUSU9OID0gIlRvb2xzIGZvciBtYW5hZ2luZyBtZW1vcnkgdGVjaG5vbG9neSBkZXZpY2VzLiIKK1NFQ1RJT04gPSAiYmFzZSIKK0RFUEVORFMgPSAiemxpYiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGludXgtbXRkLmluZnJhZGVhZC5vcmcvIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvY29tbW9uLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xNzttZDU9YmEwNWIwNzkxMmE0NGVhMmJmODFjZTQwOTM4MDA0OWMiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmluZnJhZGVhZC5vcmcvcHViL210ZC11dGlscy9tdGQtdXRpbHMtJHtQVn0udGFyLmd6IgorCitDRkxBR1NfcHJlcGVuZCA9ICItSSAke1N9L2luY2x1ZGUgIgorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZhcS54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9mYXEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5N2Q0OTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9mYXEueG1sCkBAIC0wLDAgKzEsODE3IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0nZmFxJz4KKzx0aXRsZT5GQVE8L3RpdGxlPgorPHFhbmRhc2V0PgorICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3cgZG9lcyBQb2t5IGRpZmZlciBmcm9tIDx1bGluayB1cmw9JyZPRV9IT01FX1VSTDsnPk9wZW5FbWJlZGRlZDwvdWxpbms+PworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHRlcm0gIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3Bva3knPlBva3k8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICByZWZlcnMgdG8gdGhlIHNwZWNpZmljIHJlZmVyZW5jZSBidWlsZCBzeXN0ZW0gdGhhdAorICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzLgorICAgICAgICAgICAgICAgIFBva3kgaXMgYmFzZWQgb24gPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjb2UtY29yZSc+T0UtQ29yZTwvdWxpbms+CisgICAgICAgICAgICAgICAgYW5kIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+LgorICAgICAgICAgICAgICAgIFRodXMsIHRoZSBnZW5lcmljIHRlcm0gdXNlZCBoZXJlIGZvciB0aGUgYnVpbGQgc3lzdGVtIGlzCisgICAgICAgICAgICAgICAgdGhlICJPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgICAgICBEZXZlbG9wbWVudCBpbiB0aGUgWW9jdG8gUHJvamVjdCB1c2luZyBQb2t5IGlzIGNsb3NlbHkgdGllZCB0byBPcGVuRW1iZWRkZWQsIHdpdGgKKyAgICAgICAgICAgICAgICBjaGFuZ2VzIGFsd2F5cyBiZWluZyBtZXJnZWQgdG8gT0UtQ29yZSBvciBCaXRCYWtlIGZpcnN0IGJlZm9yZSBiZWluZyBwdWxsZWQgYmFjaworICAgICAgICAgICAgICAgIGludG8gUG9reS4KKyAgICAgICAgICAgICAgICBUaGlzIHByYWN0aWNlIGJlbmVmaXRzIGJvdGggcHJvamVjdHMgaW1tZWRpYXRlbHkuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYSBpZD0nZmFxLW5vdC1tZWV0aW5nLXJlcXVpcmVtZW50cyc+CisgICAgICAgICAgICAgICAgTXkgZGV2ZWxvcG1lbnQgc3lzdGVtIGRvZXMgbm90IG1lZXQgdGhlCisgICAgICAgICAgICAgICAgcmVxdWlyZWQgR2l0LCB0YXIsIGFuZCBQeXRob24gdmVyc2lvbnMuCisgICAgICAgICAgICAgICAgSW4gcGFydGljdWxhciwgSSBkbyBub3QgaGF2ZSBQeXRob24gMi43LjMgb3IgZ3JlYXRlciwgb3IKKyAgICAgICAgICAgICAgICBJIGRvIGhhdmUgUHl0aG9uIDMueCwgd2hpY2ggaXMgc3BlY2lmaWNhbGx5IG5vdCBzdXBwb3J0ZWQgYnkKKyAgICAgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICBDYW4gSSBzdGlsbCB1c2UgdGhlIFlvY3RvIFByb2plY3Q/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGdldCB0aGUgcmVxdWlyZWQgdG9vbHMgb24geW91ciBob3N0IGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgc3lzdGVtIGEgY291cGxlIGRpZmZlcmVudCB3YXlzIChpLmUuIGJ1aWxkaW5nIGEgdGFyYmFsbCBvcgorICAgICAgICAgICAgICAgIGRvd25sb2FkaW5nIGEgdGFyYmFsbCkuCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZXF1aXJlZC1naXQtdGFyLWFuZC1weXRob24tdmVyc2lvbnMnPlJlcXVpcmVkIEdpdCwgdGFyLCBhbmQgUHl0aG9uIFZlcnNpb25zPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBzdGVwcyBvbiBob3cgdG8gdXBkYXRlIHlvdXIgYnVpbGQgdG9vbHMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3cgY2FuIHlvdSBjbGFpbSBQb2t5IC8gT3BlbkVtYmVkZGVkLUNvcmUgaXMgc3RhYmxlPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlcmUgYXJlIHRocmVlIGFyZWFzIHRoYXQgaGVscCB3aXRoIHN0YWJpbGl0eTsKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIFlvY3RvIFByb2plY3QgdGVhbSBrZWVwcworICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjb2UtY29yZSc+T0UtQ29yZTwvdWxpbms+IHNtYWxsCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZm9jdXNlZCwgY29udGFpbmluZyBhcm91bmQgODMwIHJlY2lwZXMgYXMgb3Bwb3NlZCB0byB0aGUgdGhvdXNhbmRzCisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgaW4gb3RoZXIgT3BlbkVtYmVkZGVkIGNvbW11bml0eSBsYXllcnMuCisgICAgICAgICAgICAgICAgICAgICAgICBLZWVwaW5nIGl0IHNtYWxsIG1ha2VzIGl0IGVhc3kgdG8gdGVzdCBhbmQgbWFpbnRhaW4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgWW9jdG8gUHJvamVjdCB0ZWFtIHJ1bnMgbWFudWFsIGFuZCBhdXRvbWF0ZWQgdGVzdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIGEgc21hbGwsIGZpeGVkIHNldCBvZiByZWZlcmVuY2UgaGFyZHdhcmUgYXMgd2VsbCBhcyBlbXVsYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBZb2N0byBQcm9qZWN0IHVzZXMgYW4gYXV0b2J1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBwcm92aWRlcyBjb250aW51b3VzIGJ1aWxkIGFuZCBpbnRlZ3JhdGlvbiB0ZXN0cy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhvdyBkbyBJIGdldCBzdXBwb3J0IGZvciBteSBib2FyZCBhZGRlZCB0byB0aGUgWW9jdG8gUHJvamVjdD8KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIGFuIGFkZGl0aW9uYWwgYm9hcmQgaXMgYWRkZWQgYnkgY3JlYXRpbmcgYQorICAgICAgICAgICAgICAgIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBsYXllciBmb3IgaXQuCisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGNyZWF0ZSBhIEJTUCBsYXllciwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcgYW5kIENyZWF0aW5nIExheWVyczwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGFuZCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyc+WW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzdWFsbHksIGlmIHRoZSBib2FyZCBpcyBub3QgY29tcGxldGVseSBleG90aWMsIGFkZGluZyBzdXBwb3J0IGluCisgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgaXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFyZSB0aGVyZSBhbnkgcHJvZHVjdHMgYnVpbHQgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgc29mdHdhcmUgcnVubmluZyBvbiB0aGUgPHVsaW5rIHVybD0naHR0cDovL3Zlcm5pZXIuY29tL2xhYnF1ZXN0Lyc+VmVybmllciBMYWJRdWVzdDwvdWxpbms+CisgICAgICAgICAgICAgICAgaXMgYnVpbHQgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgU2VlIHRoZSA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LnZlcm5pZXIuY29tL3Byb2R1Y3RzL2ludGVyZmFjZXMvbGFicS8nPlZlcm5pZXIgTGFiUXVlc3Q8L3VsaW5rPgorICAgICAgICAgICAgICAgIHdlYnNpdGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHByZS1wcm9kdWN0aW9uIGRldmljZXMgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICBhbmQgdGhlIFlvY3RvIFByb2plY3QgdGVhbQorICAgICAgICAgICAgICAgIGFubm91bmNlcyB0aGVtIGFzIHNvb24gYXMgdGhleSBhcmUgcmVsZWFzZWQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGF0IGRvZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcHJvZHVjZSBhcyBvdXRwdXQ/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIHlvdSBjYW4gdXNlIHRoZSBzYW1lIHNldCBvZiByZWNpcGVzIHRvIGNyZWF0ZSBvdXRwdXQgb2YKKyAgICAgICAgICAgICAgICB2YXJpb3VzIGZvcm1hdHMsIHRoZSBvdXRwdXQgb2YgYW4gT3BlbkVtYmVkZGVkIGJ1aWxkIGRlcGVuZHMgb24KKyAgICAgICAgICAgICAgICBob3cgeW91IHN0YXJ0IGl0LgorICAgICAgICAgICAgICAgIFVzdWFsbHksIHRoZSBvdXRwdXQgaXMgYSBmbGFzaGFibGUgaW1hZ2UgcmVhZHkgZm9yIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICBkZXZpY2UuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3cgZG8gSSBhZGQgbXkgcGFja2FnZSB0byB0aGUgWW9jdG8gUHJvamVjdD8KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGFkZCBhIHBhY2thZ2UsIHlvdSBuZWVkIHRvIGNyZWF0ZSBhIEJpdEJha2UgcmVjaXBlLgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY3JlYXRlIGEgQml0QmFrZSByZWNpcGUsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbmV3LXJlY2lwZS13cml0aW5nLWEtbmV3LXJlY2lwZSc+V3JpdGluZyBhIE5ldyBSZWNpcGU8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEbyBJIGhhdmUgdG8gcmVmbGFzaCBteSBlbnRpcmUgYm9hcmQgd2l0aCBhIG5ldyBZb2N0byBQcm9qZWN0IGltYWdlIHdoZW4gcmVjb21waWxpbmcKKyAgICAgICAgICAgICAgICBhIHBhY2thZ2U/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjYW4gYnVpbGQgcGFja2FnZXMgaW4gdmFyaW91cworICAgICAgICAgICAgICAgIGZvcm1hdHMgc3VjaCBhcyBJUEsgZm9yIE9QS0csIERlYmlhbiBwYWNrYWdlCisgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4uZGViPC9maWxlbmFtZT4pLCBvciBSUE0uCisgICAgICAgICAgICAgICAgWW91IGNhbiB0aGVuIHVwZ3JhZGUgdGhlIHBhY2thZ2VzIHVzaW5nIHRoZSBwYWNrYWdlIHRvb2xzIG9uCisgICAgICAgICAgICAgICAgdGhlIGRldmljZSwgbXVjaCBsaWtlIG9uIGEgZGVza3RvcCBkaXN0cmlidXRpb24gc3VjaCBhcworICAgICAgICAgICAgICAgIFVidW50dSBvciBGZWRvcmEuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgcGFja2FnZSBtYW5hZ2VtZW50IG9uIHRoZSB0YXJnZXQgaXMgZW50aXJlbHkgb3B0aW9uYWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJIHNlZSB0aGUgZXJyb3IgJzxmaWxlbmFtZT5jaG1vZDogWFhYWFggbmV3IHBlcm1pc3Npb25zIGFyZSByLXhyd3hyd3gsIG5vdCByLXhyLXhyLXg8L2ZpbGVuYW1lPicuCisgICAgICAgICAgICAgICAgV2hhdCBpcyB3cm9uZz8KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBhcmUgcHJvYmFibHkgcnVubmluZyB0aGUgYnVpbGQgb24gYW4gTlRGUyBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgIFVzZSA8ZmlsZW5hbWU+ZXh0MjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+ZXh0MzwvZmlsZW5hbWU+LCBvciA8ZmlsZW5hbWU+ZXh0NDwvZmlsZW5hbWU+IGluc3RlYWQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworPCEtLSAgICA8cWFuZGFlbnRyeT4KKyAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSG93IGRvIEkgbWFrZSB0aGUgWW9jdG8gUHJvamVjdCB3b3JrIGluIFJIRUwvQ2VudE9TPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gZ2V0IHRoZSBZb2N0byBQcm9qZWN0IHdvcmtpbmcgdW5kZXIgUkhFTC9DZW50T1MgNS4xIHlvdSBuZWVkIHRvIGZpcnN0CisgICAgICAgICAgICAgICAgaW5zdGFsbCBzb21lIHJlcXVpcmVkIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIFRoZSBzdGFuZGFyZCBDZW50T1MgcGFja2FnZXMgbmVlZGVkIGFyZToKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+IkRldmVsb3BtZW50IHRvb2xzIiAoc2VsZWN0ZWQgZHVyaW5nIGluc3RhbGxhdGlvbik8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT50ZXhpMmh0bWw8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvbXBhdC1nY2MtMzQ8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIE9uIHRvcCBvZiB0aGVzZSwgeW91IG5lZWQgdGhlIGZvbGxvd2luZyBleHRlcm5hbCBwYWNrYWdlczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnB5dGhvbi1zcWxpdGUyPC9maWxlbmFtZT4gZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2RhZy53aWVlcnMuY29tL3JwbS9wYWNrYWdlcy9weXRob24tc3FsaXRlMi8nPkRBRyByZXBvc2l0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmhlbHAybWFuPC9maWxlbmFtZT4gZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2NlbnRvcy5rYXJhbi5vcmcvZWw0L2V4dHJhcy9zdGFibGUveDg2XzY0L1JQTVMvcmVwb2RhdGEvcmVwb3ZpZXcvaGVscDJtYW4tMC0xLjMzLjEtMi5odG1sJz5LYXJhbiByZXBvc2l0b3J5PC91bGluaz48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSB0aGVzZSBwYWNrYWdlcyBhcmUgaW5zdGFsbGVkLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aWxsIGJlIGFibGUKKyAgICAgICAgICAgICAgICB0byBidWlsZCBzdGFuZGFyZCBpbWFnZXMuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhlcmUgbWlnaHQgYmUgYSBwcm9ibGVtIHdpdGggdGhlIFFFTVUgZW11bGF0b3Igc2VnZmF1bHRpbmcuCisgICAgICAgICAgICAgICAgWW91IGNhbiBlaXRoZXIgZGlzYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiBiaW5hcnkgbG9jYWxlcyBieSBzZXR0aW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1FTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OJz5FTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OPC9saW5rPgorICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+IHRvICIwIiBvciBieSByZW1vdmluZyB0aGUgPGZpbGVuYW1lPmxpbnV4LTIuNi1leGVjc2hpZWxkLnBhdGNoPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmcm9tIHRoZSBrZXJuZWwgYW5kIHJlYnVpbGRpbmcgaXQgc2luY2UgdGhhdCBpcyB0aGUgcGF0Y2ggdGhhdCBjYXVzZXMgdGhlIHByb2JsZW1zIHdpdGggUUVNVS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIGluZm9ybWF0aW9uIG9uIGRpc3RyaWJ1dGlvbnMgdGhhdCB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIHVzZXMgZHVyaW5nIHZhbGlkYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvRGlzdHJpYnV0aW9uX1N1cHBvcnQnPkRpc3RyaWJ1dGlvbiBTdXBwb3J0PC91bGluaz4KKyAgICAgICAgICAgICAgICBXaWtpIHBhZ2UuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkZvciBub3RlcyBhYm91dCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCBvbiBhIFJIRUwgNC1iYXNlZAorICAgICAgICAgICAgICAgIGhvc3QsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvQnVpbGRpbmdPblJIRUw0Jz5CdWlsZGluZyBvbiBSSEVMNDwvdWxpbms+CisgICAgICAgICAgICAgICAgV2lraSBwYWdlLjwvcGFyYT4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PiAtLT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJIHNlZSBsb3RzIG9mIDQwNCByZXNwb25zZXMgZm9yIGZpbGVzIG9uCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiZZT0NUT19IT01FX1VSTDsvc291cmNlcy8qPC9maWxlbmFtZT4uIElzIHNvbWV0aGluZyB3cm9uZz8KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE5vdGhpbmcgaXMgd3JvbmcuCisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2hlY2tzIGFueSBjb25maWd1cmVkIHNvdXJjZSBtaXJyb3JzIGJlZm9yZSBkb3dubG9hZGluZworICAgICAgICAgICAgICAgIGZyb20gdGhlIHVwc3RyZWFtIHNvdXJjZXMuCisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBkb2VzIHRoaXMgc2VhcmNoaW5nIGZvciBib3RoIHNvdXJjZSBhcmNoaXZlcyBhbmQKKyAgICAgICAgICAgICAgICBwcmUtY2hlY2tlZCBvdXQgdmVyc2lvbnMgb2YgU0NNLW1hbmFnZWQgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgVGhlc2UgY2hlY2tzIGhlbHAgaW4gbGFyZ2UgaW5zdGFsbGF0aW9ucyBiZWNhdXNlIGl0IGNhbiByZWR1Y2UgbG9hZCBvbiB0aGUgU0NNIHNlcnZlcnMKKyAgICAgICAgICAgICAgICB0aGVtc2VsdmVzLgorICAgICAgICAgICAgICAgIFRoZSBhZGRyZXNzIGFib3ZlIGlzIG9uZSBvZiB0aGUgZGVmYXVsdCBtaXJyb3JzIGNvbmZpZ3VyZWQgaW50byB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBpZiBhbiB1cHN0cmVhbSBzb3VyY2UgZGlzYXBwZWFycywgdGhlIHRlYW0KKyAgICAgICAgICAgICAgICBjYW4gcGxhY2Ugc291cmNlcyB0aGVyZSBzbyBidWlsZHMgY29udGludWUgdG8gd29yay4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEkgaGF2ZSBtYWNoaW5lLXNwZWNpZmljIGRhdGEgaW4gYSBwYWNrYWdlIGZvciBvbmUgbWFjaGluZSBvbmx5IGJ1dCB0aGUgcGFja2FnZSBpcworICAgICAgICAgICAgICAgIGJlaW5nIG1hcmtlZCBhcyBtYWNoaW5lLXNwZWNpZmljIGluIGFsbCBjYXNlcywgaG93IGRvIEkgcHJldmVudCB0aGlzPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU2V0IDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSV9PVkVSUklERVNfUEFDS0FHRV9BUkNIJz5TUkNfVVJJX09WRVJSSURFU19QQUNLQUdFX0FSQ0g8L2xpbms+CisgICAgICAgICAgICAgICAgPC9maWxlbmFtZT4gPSAiMCIgaW4gdGhlIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlIGJ1dCBtYWtlIHN1cmUgdGhlIHBhY2thZ2UgaXMKKyAgICAgICAgICAgICAgICBtYW51YWxseSBtYXJrZWQgYXMKKyAgICAgICAgICAgICAgICBtYWNoaW5lLXNwZWNpZmljIGZvciB0aGUgY2FzZSB0aGF0IG5lZWRzIGl0LgorICAgICAgICAgICAgICAgIFRoZSBjb2RlIHRoYXQgaGFuZGxlcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJX09WRVJSSURFU19QQUNLQUdFX0FSQ0g8L2ZpbGVuYW1lPiBpcyBpbgorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2Jhc2UuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJJ20gYmVoaW5kIGEgZmlyZXdhbGwgYW5kIG5lZWQgdG8gdXNlIGEgcHJveHkgc2VydmVyLiBIb3cgZG8gSSBkbyB0aGF0PworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTW9zdCBzb3VyY2UgZmV0Y2hpbmcgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXMgZG9uZSBieSA8ZmlsZW5hbWU+d2dldDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgYW5kIHlvdSB0aGVyZWZvcmUgbmVlZCB0byBzcGVjaWZ5IHRoZSBwcm94eSBzZXR0aW5ncyBpbiBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi53Z2V0cmM8L2ZpbGVuYW1lPiBmaWxlIGluIHlvdXIgaG9tZSBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlIHNldHRpbmdzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgaHR0cF9wcm94eSA9IGh0dHA6Ly9wcm94eS55b3lvZHluZS5jb206MTgwMjMvCisgICAgIGZ0cF9wcm94eSA9IGh0dHA6Ly9wcm94eS55b3lvZHluZS5jb206MTgwMjMvCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGFsc28gaW5jbHVkZXMgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zaXRlLmNvbmYuc2FtcGxlPC9maWxlbmFtZT4gZmlsZSB0aGF0IHNob3dzIGhvdyB0bworICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBDVlMgYW5kIEdpdCBwcm94eSBzZXJ2ZXJzIGlmIG5lZWRlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoYXTigJlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IGFuZCA8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+LW5hdGl2ZTwvZmlsZW5hbWU+PworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT4qLW5hdGl2ZTwvZmlsZW5hbWU+IHRhcmdldHMgYXJlIGRlc2lnbmVkIHRvIHJ1biBvbiB0aGUgc3lzdGVtCisgICAgICAgICAgICAgICAgYmVpbmcgdXNlZCBmb3IgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgIFRoZXNlIGFyZSB1c3VhbGx5IHRvb2xzIHRoYXQgYXJlIG5lZWRlZCB0byBhc3Npc3QgdGhlIGJ1aWxkIGluIHNvbWUgd2F5IHN1Y2ggYXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cXVpbHQtbmF0aXZlPC9maWxlbmFtZT4sIHdoaWNoIGlzIHVzZWQgdG8gYXBwbHkgcGF0Y2hlcy4KKyAgICAgICAgICAgICAgICBUaGUgbm9uLW5hdGl2ZSB2ZXJzaW9uIGlzIHRoZSBvbmUgdGhhdCBydW5zIG9uIHRoZSB0YXJnZXQgZGV2aWNlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSSdtIHNlZWluZyByYW5kb20gYnVpbGQgZmFpbHVyZXMuIEhlbHA/IQorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgdGhlIHNhbWUgYnVpbGQgaXMgZmFpbGluZyBpbiB0b3RhbGx5IGRpZmZlcmVudCBhbmQgcmFuZG9tCisgICAgICAgICAgICAgICAgd2F5cywgdGhlIG1vc3QgbGlrZWx5IGV4cGxhbmF0aW9uIGlzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgaGFyZHdhcmUgeW91IGFyZSBydW5uaW5nIHRoZSBidWlsZCBvbgorICAgICAgICAgICAgICAgICAgICAgICAgaGFzIHNvbWUgcHJvYmxlbS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBhcmUgcnVubmluZyB0aGUgYnVpbGQgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxpemF0aW9uLCBpbiB3aGljaCBjYXNlIHRoZSB2aXJ0dWFsaXphdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgcHJvYmFibHkgaGFzIGJ1Z3MuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcHJvY2Vzc2VzIGEgbWFzc2l2ZSBhbW91bnQgb2YKKyAgICAgICAgICAgICAgICBkYXRhIHRoYXQgY2F1c2VzIGxvdHMgb2YgbmV0d29yaywgZGlzayBhbmQgQ1BVIGFjdGl2aXR5IGFuZAorICAgICAgICAgICAgICAgIGlzIHNlbnNpdGl2ZSB0byBldmVuIHNpbmdsZS1iaXQgZmFpbHVyZXMgaW4gYW55IG9mIHRoZXNlIGFyZWFzLgorICAgICAgICAgICAgICAgIFRydWUgcmFuZG9tIGZhaWx1cmVzIGhhdmUgYWx3YXlzIGJlZW4gdHJhY2VkIGJhY2sgdG8gaGFyZHdhcmUKKyAgICAgICAgICAgICAgICBvciB2aXJ0dWFsaXphdGlvbiBpc3N1ZXMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIEkgdHJ5IHRvIGJ1aWxkIGEgbmF0aXZlIHJlY2lwZSwgdGhlIGJ1aWxkIGZhaWxzIHdpdGggPGZpbGVuYW1lPmljb252Lmg8L2ZpbGVuYW1lPiBwcm9ibGVtcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdSBnZXQgYW4gZXJyb3IgbWVzc2FnZSB0aGF0IGluZGljYXRlcyBHTlUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGliaWNvbnY8L2ZpbGVuYW1lPiBpcyBub3QgaW4gdXNlIGJ1dAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pY29udi5oPC9maWxlbmFtZT4gaGFzIGJlZW4gaW5jbHVkZWQgZnJvbQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJpY29udjwvZmlsZW5hbWU+LCB5b3UgbmVlZCB0byBjaGVjayB0byBzZWUgaWYKKyAgICAgICAgICAgICAgICB5b3UgaGF2ZSBhIHByZXZpb3VzbHkgaW5zdGFsbGVkIHZlcnNpb24gb2YgdGhlIGhlYWRlciBmaWxlCisgICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPi91c3IvbG9jYWwvaW5jbHVkZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgI2Vycm9yIEdOVSBsaWJpY29udiBub3QgaW4gdXNlIGJ1dCBpbmNsdWRlZCBpY29udi5oIGlzIGZyb20gbGliaWNvbnYKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSWYgeW91IGZpbmQgYSBwcmV2aW91c2x5IGluc3RhbGxlZCBmaWxlLCB5b3Ugc2hvdWxkIGVpdGhlcgorICAgICAgICAgICAgICAgIHVuaW5zdGFsbCBpdCBvciB0ZW1wb3JhcmlseSByZW5hbWUgaXQgYW5kIHRyeSB0aGUgYnVpbGQgYWdhaW4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgaXNzdWUgaXMganVzdCBhIHNpbmdsZSBtYW5pZmVzdGF0aW9uIG9mICJzeXN0ZW0KKyAgICAgICAgICAgICAgICBsZWFrYWdlIiBpc3N1ZXMgY2F1c2VkIHdoZW4gdGhlIE9wZW5FYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIGZpbmRzIGFuZCB1c2VzIHByZXZpb3VzbHkgaW5zdGFsbGVkIGZpbGVzIGR1cmluZyBhIG5hdGl2ZQorICAgICAgICAgICAgICAgIGJ1aWxkLgorICAgICAgICAgICAgICAgIFRoaXMgdHlwZSBvZiBpc3N1ZSBtaWdodCBub3QgYmUgbGltaXRlZCB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pY29udi5oPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgQmUgc3VyZSB0aGF0IGxlYWthZ2UgY2Fubm90IG9jY3VyIGZyb20KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9sb2NhbC9pbmNsdWRlPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9vcHQ8L2ZpbGVuYW1lPiBsb2NhdGlvbnMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGF0IGRvIHdlIG5lZWQgdG8gc2hpcCBmb3IgbGljZW5zZSBjb21wbGlhbmNlPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBpcyBhIGRpZmZpY3VsdCBxdWVzdGlvbiBhbmQgeW91IG5lZWQgdG8gY29uc3VsdCB5b3VyIGxhd3llcgorICAgICAgICAgICAgICAgIGZvciB0aGUgYW5zd2VyIGZvciB5b3VyIHNwZWNpZmljIGNhc2UuCisgICAgICAgICAgICAgICAgSXQgaXMgd29ydGggYmVhcmluZyBpbiBtaW5kIHRoYXQgZm9yIEdQTCBjb21wbGlhbmNlLCB0aGVyZSBuZWVkcworICAgICAgICAgICAgICAgIHRvIGJlIGVub3VnaCBpbmZvcm1hdGlvbiBzaGlwcGVkIHRvIGFsbG93IHNvbWVvbmUgZWxzZSB0bworICAgICAgICAgICAgICAgIHJlYnVpbGQgYW5kIHByb2R1Y2UgdGhlIHNhbWUgZW5kIHJlc3VsdCB5b3UgYXJlIHNoaXBwaW5nLgorICAgICAgICAgICAgICAgIFRoaXMgbWVhbnMgc2hhcmluZyB0aGUgc291cmNlIGNvZGUsIGFueSBwYXRjaGVzIGFwcGxpZWQgdG8gaXQsCisgICAgICAgICAgICAgICAgYW5kIGFsc28gYW55IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoYXQgcGFja2FnZQorICAgICAgICAgICAgICAgIHdhcyBjb25maWd1cmVkIGFuZCBidWlsdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gbGljZW5zaW5nIGluIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNsaWNlbnNpbmcnPkxpY2Vuc2luZzwvdWxpbms+IgorICAgICAgICAgICAgICAgIGFuZCAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWFpbnRhaW5pbmctb3Blbi1zb3VyY2UtbGljZW5zZS1jb21wbGlhbmNlLWR1cmluZy15b3VyLXByb2R1Y3RzLWxpZmVjeWNsZSc+TWFpbnRhaW5pbmcgT3BlbiBTb3VyY2UgTGljZW5zZSBDb21wbGlhbmNlIER1cmluZyBZb3VyIFByb2R1Y3QncyBMaWZlY3ljbGU8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9ucywgYm90aCBvZiB3aGljaCBhcmUgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3cgZG8gSSBkaXNhYmxlIHRoZSBjdXJzb3Igb24gbXkgdG91Y2hzY3JlZW4gZGV2aWNlPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gY3JlYXRlIGEgZm9ybSBmYWN0b3IgZmlsZSBhcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2JzcC1maWxlbGF5b3V0LW1pc2MtcmVjaXBlcyc+TWlzY2VsbGFuZW91cyBCU1AtU3BlY2lmaWMgUmVjaXBlIEZpbGVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1ApCisgICAgICAgICAgICAgICAgRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgICAgICAgICAgU2V0IHRoZSA8ZmlsZW5hbWU+SEFWRV9UT1VDSFNDUkVFTjwvZmlsZW5hbWU+IHZhcmlhYmxlIGVxdWFsIHRvCisgICAgICAgICAgICAgICAgb25lIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBIQVZFX1RPVUNIU0NSRUVOPTEKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3cgZG8gSSBtYWtlIHN1cmUgY29ubmVjdGVkIG5ldHdvcmsgaW50ZXJmYWNlcyBhcmUgYnJvdWdodCB1cCBieSBkZWZhdWx0PworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaW50ZXJmYWNlcyBmaWxlIHByb3ZpZGVkIGJ5IHRoZSBuZXRiYXNlIHJlY2lwZSBkb2VzIG5vdAorICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYnJpbmcgdXAgbmV0d29yayBpbnRlcmZhY2VzLgorICAgICAgICAgICAgICAgIFRoZXJlZm9yZSwgeW91IHdpbGwgbmVlZCB0byBhZGQgYSBCU1Atc3BlY2lmaWMgbmV0YmFzZSB0aGF0IGluY2x1ZGVzIGFuIGludGVyZmFjZXMKKyAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgIFNlZSB0aGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2JzcC1maWxlbGF5b3V0LW1pc2MtcmVjaXBlcyc+TWlzY2VsbGFuZW91cyBCU1AtU3BlY2lmaWMgUmVjaXBlIEZpbGVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1ApCisgICAgICAgICAgICAgICAgRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIGluZm9ybWF0aW9uIG9uIGNyZWF0aW5nIHRoZXNlIHR5cGVzIG9mCisgICAgICAgICAgICAgICAgbWlzY2VsbGFuZW91cyByZWNpcGUgZmlsZXMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYWRkIHRoZSBmb2xsb3dpbmcgZmlsZXMgdG8geW91ciBsYXllcjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEtTUFDSElORS9yZWNpcGVzLWJzcC9uZXRiYXNlL25ldGJhc2UvTUFDSElORS9pbnRlcmZhY2VzCisgICAgIG1ldGEtTUFDSElORS9yZWNpcGVzLWJzcC9uZXRiYXNlL25ldGJhc2VfNS4wLmJiYXBwZW5kCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSG93IGRvIEkgY3JlYXRlIGltYWdlcyB3aXRoIG1vcmUgZnJlZSBzcGFjZT8KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNyZWF0ZXMgaW1hZ2VzCisgICAgICAgICAgICAgICAgdGhhdCBhcmUgMS4zIHRpbWVzIHRoZSBzaXplIG9mIHRoZSBwb3B1bGF0ZWQgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgIFRvIGFmZmVjdCB0aGUgaW1hZ2Ugc2l6ZSwgeW91IG5lZWQgdG8gc2V0IHZhcmlvdXMKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkltYWdlIFNpemU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTX1NJWkUnPjxmaWxlbmFtZT5JTUFHRV9ST09URlNfU0laRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gZGVmaW5lIHRoZSBzaXplIG9mIHRoZSBpbWFnZSBpbiBLYnl0ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIGRldGVybWluZXMgdGhlIHNpemUgYnkgdGFraW5nIGludG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQgdGhlIGluaXRpYWwgcm9vdCBmaWxlc3lzdGVtIHNpemUgYmVmb3JlIGFueQorICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpY2F0aW9ucyBzdWNoIGFzIHJlcXVlc3RlZCBzaXplIGZvciB0aGUgaW1hZ2UgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBhbnkgcmVxdWVzdGVkIGFkZGl0aW9uYWwgZnJlZSBkaXNrIHNwYWNlIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZCB0byB0aGUgaW1hZ2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+T3ZlcmhlYWQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9PVkVSSEVBRF9GQUNUT1InPjxmaWxlbmFtZT5JTUFHRV9PVkVSSEVBRF9GQUNUT1I8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGRlZmluZSB0aGUgbXVsdGlwbGllciB0aGF0IHRoZSBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpZXMgdG8gdGhlIGluaXRpYWwgaW1hZ2Ugc2l6ZSwgd2hpY2ggaXMgMS4zIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFkZGl0aW9uYWwgRnJlZSBTcGFjZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1JPT1RGU19FWFRSQV9TUEFDRSc+PGZpbGVuYW1lPklNQUdFX1JPT1RGU19FWFRSQV9TUEFDRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gYWRkIGFkZGl0aW9uYWwgZnJlZSBzcGFjZSB0byB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIGFkZHMgdGhpcyBzcGFjZSB0byB0aGUgaW1hZ2UgYWZ0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0IGRldGVybWluZXMgaXRzCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfUk9PVEZTX1NJWkU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2h5IGRvbid0IHlvdSBzdXBwb3J0IGRpcmVjdG9yaWVzIHdpdGggc3BhY2VzIGluIHRoZSBwYXRobmFtZXM/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB0ZWFtIGhhcyB0cmllZCB0byBkbyB0aGlzIGJlZm9yZSBidXQgdG9vCisgICAgICAgICAgICAgICAgbWFueSBvZiB0aGUgdG9vbHMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZGVwZW5kcyBvbiwKKyAgICAgICAgICAgICAgICBzdWNoIGFzIDxmaWxlbmFtZT5hdXRvY29uZjwvZmlsZW5hbWU+LCBicmVhayB3aGVuIHRoZXkgZmluZAorICAgICAgICAgICAgICAgIHNwYWNlcyBpbiBwYXRobmFtZXMuCisgICAgICAgICAgICAgICAgVW50aWwgdGhhdCBzaXR1YXRpb24gY2hhbmdlcywgdGhlIHRlYW0gd2lsbCBub3Qgc3VwcG9ydCBzcGFjZXMKKyAgICAgICAgICAgICAgICBpbiBwYXRobmFtZXMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3cgZG8gSSB1c2UgYW4gZXh0ZXJuYWwgdG9vbGNoYWluPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHRvb2xjaGFpbiBjb25maWd1cmF0aW9uIGlzIHZlcnkgZmxleGlibGUgYW5kIGN1c3RvbWl6YWJsZS4KKyAgICAgICAgICAgICAgICBJdCBpcyBwcmltYXJpbHkgY29udHJvbGxlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVENNT0RFJz5UQ01PREU8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGNvbnRyb2xzIHdoaWNoIDxmaWxlbmFtZT50Y21vZGUtKi5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUgdG8gaW5jbHVkZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGU8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgd2l0aGluCisgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiA8ZmlsZW5hbWU+VENNT0RFPC9maWxlbmFtZT4gaXMgImRlZmF1bHQiLAorICAgICAgICAgICAgICAgIHdoaWNoIHRlbGxzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHVzZSBpdHMgaW50ZXJuYWxseQorICAgICAgICAgICAgICAgIGJ1aWx0IHRvb2xjaGFpbiAoaS5lLiA8ZmlsZW5hbWU+dGNtb2RlLWRlZmF1bHQuaW5jPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIG90aGVyIHBhdHRlcm5zIGFyZSBhY2NlcHRlZC4KKyAgICAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCAiZXh0ZXJuYWwtKiIgcmVmZXJzIHRvIGV4dGVybmFsIHRvb2xjaGFpbnMuCisgICAgICAgICAgICAgICAgT25lIGV4YW1wbGUgaXMgdGhlIFNvdXJjZXJ5IEcrKyBUb29sY2hhaW4uCisgICAgICAgICAgICAgICAgVGhlIHN1cHBvcnQgZm9yIHRoaXMgdG9vbGNoYWluIHJlc2lkZXMgaW4gdGhlIHNlcGFyYXRlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtc291cmNlcnk8L2ZpbGVuYW1lPiBsYXllciBhdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXRodWIuY29tL01lbnRvckVtYmVkZGVkL21ldGEtc291cmNlcnkvJz48L3VsaW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gYWRkaXRpb24gdG8gdGhlIHRvb2xjaGFpbiBjb25maWd1cmF0aW9uLCB5b3UgYWxzbyBuZWVkIGEKKyAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRvb2xjaGFpbiByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSBmaWxlIG5lZWRzIHRvIHBhY2thZ2UgdXAgYW55IHByZS1idWlsdCBvYmplY3RzIGluCisgICAgICAgICAgICAgICAgdGhlIHRvb2xjaGFpbiBzdWNoIGFzIDxmaWxlbmFtZT5saWJnY2M8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlic3RkY2MrKzwvZmlsZW5hbWU+LCBhbnkgbG9jYWxlcywgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYmM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgIDxwYXJhIGlkPSdob3ctZG9lcy10aGUteW9jdG8tcHJvamVjdC1vYnRhaW4tc291cmNlLWNvZGUtYW5kLXdpbGwtaXQtd29yay1iZWhpbmQtbXktZmlyZXdhbGwtb3ItcHJveHktc2VydmVyJz4KKyAgICAgICAgICAgICAgICBIb3cgZG9lcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBvYnRhaW4gc291cmNlIGNvZGUgYW5kCisgICAgICAgICAgICAgICAgd2lsbCBpdCB3b3JrIGJlaGluZCBteSBmaXJld2FsbCBvciBwcm94eSBzZXJ2ZXI/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgd2F5IHRoZSBidWlsZCBzeXN0ZW0gb2J0YWlucyBzb3VyY2UgY29kZSBpcyBoaWdobHkKKyAgICAgICAgICAgICAgICBjb25maWd1cmFibGUuCisgICAgICAgICAgICAgICAgWW91IGNhbiBzZXR1cCB0aGUgYnVpbGQgc3lzdGVtIHRvIGdldCBzb3VyY2UgY29kZSBpbiBtb3N0CisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRzIGlmIEhUVFAgdHJhbnNwb3J0IGlzIGF2YWlsYWJsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4gdGhlIGJ1aWxkIHN5c3RlbSBzZWFyY2hlcyBmb3Igc291cmNlIGNvZGUsIGl0IGZpcnN0CisgICAgICAgICAgICAgICAgdHJpZXMgdGhlIGxvY2FsIGRvd25sb2FkIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBJZiB0aGF0IGxvY2F0aW9uIGZhaWxzLCBQb2t5IHRyaWVzCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSRU1JUlJPUlMnPjxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIHRoZSB1cHN0cmVhbSBzb3VyY2UsIGFuZCB0aGVuCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1JUlJPUlMnPjxmaWxlbmFtZT5NSVJST1JTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgaW4gdGhhdCBvcmRlci4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzc3VtaW5nIHlvdXIgZGlzdHJpYnV0aW9uIGlzICJwb2t5IiwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgIHN5c3RlbSB1c2VzIHRoZSBZb2N0byBQcm9qZWN0IHNvdXJjZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT4gYnkgZGVmYXVsdCBmb3IgU0NNLWJhc2VkCisgICAgICAgICAgICAgICAgc291cmNlcywgdXBzdHJlYW1zIGZvciBub3JtYWwgdGFyYmFsbHMsIGFuZCB0aGVuIGZhbGxzIGJhY2sKKyAgICAgICAgICAgICAgICB0byBhIG51bWJlciBvZiBvdGhlciBtaXJyb3JzIGluY2x1ZGluZyB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIHNvdXJjZSBtaXJyb3IgaWYgdGhvc2UgZmFpbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHlvdSBjb3VsZCBhZGQgYSBzcGVjaWZpYyBzZXJ2ZXIgZm9yIHRoZQorICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSB0byBhdHRlbXB0IGJlZm9yZSBhbnkgb3RoZXJzIGJ5IGFkZGluZyBzb21ldGhpbmcKKyAgICAgICAgICAgICAgICBsaWtlIHRoZSBmb2xsb3dpbmcgdG8gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVNSVJST1JTX3ByZXBlbmQgPSAiXAorICAgICBnaXQ6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4gXAorICAgICBmdHA6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4gXAorICAgICBodHRwOi8vLiovLiogaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL3NvdXJjZXMvIFxuIFwKKyAgICAgaHR0cHM6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlc2UgY2hhbmdlcyBjYXVzZSB0aGUgYnVpbGQgc3lzdGVtIHRvIGludGVyY2VwdCBHaXQsIEZUUCwKKyAgICAgICAgICAgICAgICBIVFRQLCBhbmQgSFRUUFMgcmVxdWVzdHMgYW5kIGRpcmVjdCB0aGVtIHRvIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5odHRwOi8vPC9maWxlbmFtZT4gc291cmNlcyBtaXJyb3IuCisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgPGZpbGVuYW1lPmZpbGU6Ly88L2ZpbGVuYW1lPiBVUkxzIHRvIHBvaW50IHRvCisgICAgICAgICAgICAgICAgbG9jYWwgZGlyZWN0b3JpZXMgb3IgbmV0d29yayBzaGFyZXMgYXMgd2VsbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzaWRlIGZyb20gdGhlIHByZXZpb3VzIHRlY2huaXF1ZSwgdGhlc2Ugb3B0aW9ucyBhbHNvIGV4aXN0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfTk9fTkVUV09SSyA9ICIxIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIHN0YXRlbWVudCB0ZWxscyBCaXRCYWtlIHRvIGlzc3VlIGFuIGVycm9yIGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICB0cnlpbmcgdG8gYWNjZXNzIHRoZSBJbnRlcm5ldC4KKyAgICAgICAgICAgICAgICBUaGlzIHRlY2huaXF1ZSBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gZW5zdXJlIGNvZGUgYnVpbGRzCisgICAgICAgICAgICAgICAgb25seSBmcm9tIGxvY2FsIHNvdXJjZXMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFub3RoZXIgdGVjaG5pcXVlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfRkVUQ0hfUFJFTUlSUk9ST05MWSA9ICIxIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIHN0YXRlbWVudCBsaW1pdHMgdGhlIGJ1aWxkIHN5c3RlbSB0byBwdWxsaW5nIHNvdXJjZQorICAgICAgICAgICAgICAgIGZyb20gdGhlIDxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT4gb25seS4KKyAgICAgICAgICAgICAgICBBZ2FpbiwgdGhpcyB0ZWNobmlxdWUgaXMgdXNlZnVsIGZvciByZXByb2R1Y2luZyBidWlsZHMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFub3RoZXIgdGVjaG5pcXVlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTID0gIjEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoaXMgc3RhdGVtZW50IHRlbGxzIHRoZSBidWlsZCBzeXN0ZW0gdG8gZ2VuZXJhdGUgbWlycm9yCisgICAgICAgICAgICAgICAgdGFyYmFsbHMuCisgICAgICAgICAgICAgICAgVGhpcyB0ZWNobmlxdWUgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG1pcnJvciBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgSWYgbm90LCBob3dldmVyLCB0aGUgdGVjaG5pcXVlIGNhbiBzaW1wbHkgd2FzdGUgdGltZSBkdXJpbmcKKyAgICAgICAgICAgICAgICB0aGUgYnVpbGQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGaW5hbGx5LCBjb25zaWRlciBhbiBleGFtcGxlIHdoZXJlIHlvdSBhcmUgYmVoaW5kIGFuCisgICAgICAgICAgICAgICAgSFRUUC1vbmx5IGZpcmV3YWxsLgorICAgICAgICAgICAgICAgIFlvdSBjb3VsZCBtYWtlIHRoZSBmb2xsb3dpbmcgY2hhbmdlcyB0byB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZSBhcyBsb25nIGFzCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT4gc2VydmVyIGlzIGN1cnJlbnQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVNSVJST1JTX3ByZXBlbmQgPSAiXAorICAgICBmdHA6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4gXAorICAgICBodHRwOi8vLiovLiogaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL3NvdXJjZXMvIFxuIFwKKyAgICAgaHR0cHM6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4iCisgICAgIEJCX0ZFVENIX1BSRU1JUlJPUk9OTFkgPSAiMSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlc2UgY2hhbmdlcyB3b3VsZCBjYXVzZSB0aGUgYnVpbGQgc3lzdGVtIHRvIHN1Y2Nlc3NmdWxseQorICAgICAgICAgICAgICAgIGZldGNoIHNvdXJjZSBvdmVyIEhUVFAgYW5kIGFueSBuZXR3b3JrIGFjY2Vzc2VzIHRvIGFueXRoaW5nCisgICAgICAgICAgICAgICAgb3RoZXIgdGhhbiB0aGUgPGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPiB3b3VsZCBmYWlsLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBhbHNvIGhvbm9ycyB0aGUgc3RhbmRhcmQgc2hlbGwgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICB2YXJpYWJsZXMgPGZpbGVuYW1lPmh0dHBfcHJveHk8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZnRwX3Byb3h5PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmh0dHBzX3Byb3h5PC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hbGxfcHJveHk8L2ZpbGVuYW1lPiB0byByZWRpcmVjdCByZXF1ZXN0cyB0aHJvdWdoCisgICAgICAgICAgICAgICAgcHJveHkgc2VydmVycy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUKKyAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19XSUtJX1VSTDsvd2lraS9Xb3JraW5nX0JlaGluZF9hX05ldHdvcmtfUHJveHknPldvcmtpbmcgQmVoaW5kIGEgTmV0d29yayBQcm94eTwvdWxpbms+IgorICAgICAgICAgICAgICAgICBXaWtpIHBhZ2UuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDYW4gSSBnZXQgcmlkIG9mIGJ1aWxkIG91dHB1dCBzbyBJIGNhbiBzdGFydCBvdmVyPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWWVzIC0geW91IGNhbiBlYXNpbHkgZG8gdGhpcy4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSB1c2UgQml0QmFrZSB0byBidWlsZCBhbiBpbWFnZSwgYWxsIHRoZSBidWlsZCBvdXRwdXQKKyAgICAgICAgICAgICAgICBnb2VzIGludG8gdGhlIGRpcmVjdG9yeSBjcmVhdGVkIHdoZW4geW91IHJ1biB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgKGkuZS4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgaXMgbmFtZWQgPGZpbGVuYW1lPmJ1aWxkPC9maWxlbmFtZT4gYnV0IGNhbiBiZSBuYW1lZAorICAgICAgICAgICAgICAgIGFueXRoaW5nIHlvdSB3YW50LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaXRoaW4gdGhlIEJ1aWxkIERpcmVjdG9yeSwgaXMgdGhlIDxmaWxlbmFtZT50bXA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBUbyByZW1vdmUgYWxsIHRoZSBidWlsZCBvdXRwdXQgeWV0IHByZXNlcnZlIGFueSBzb3VyY2UgY29kZSBvcgorICAgICAgICAgICAgICAgIGRvd25sb2FkZWQgZmlsZXMgZnJvbSBwcmV2aW91cyBidWlsZHMsIHNpbXBseSByZW1vdmUgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcDwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoeSBkbyA8ZmlsZW5hbWU+JHtiaW5kaXJ9PC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT4ke2xpYmRpcn08L2ZpbGVuYW1lPiBoYXZlIHN0cmFuZ2UgdmFsdWVzIGZvciA8ZmlsZW5hbWU+LW5hdGl2ZTwvZmlsZW5hbWU+IHJlY2lwZXM/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBFeGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzIG1pZ2h0IG5lZWQgdG8gYmUgdXNlZCBmcm9tIGEKKyAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgb3RoZXIgdGhhbiB0aGUgZGlyZWN0b3J5IGludG8gd2hpY2ggdGhleSB3ZXJlCisgICAgICAgICAgICAgICAgaW5pdGlhbGx5IGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICBDb21wbGljYXRpbmcgdGhpcyBzaXR1YXRpb24gaXMgdGhlIGZhY3QgdGhhdCBzb21ldGltZXMgdGhlc2UKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzIGFyZSBjb21waWxlZCB3aXRoIHRoZSBleHBlY3RhdGlvbgorICAgICAgICAgICAgICAgIG9mIGJlaW5nIHJ1biBmcm9tIHRoYXQgaW5pdGlhbCBpbnN0YWxsYXRpb24gdGFyZ2V0IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCBtb3ZpbmcgdGhlbSBjYXVzZXMgcHJvYmxlbXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2NlbmFyaW8gaXMgYSBmdW5kYW1lbnRhbCBwcm9ibGVtIGZvciBwYWNrYWdlIG1haW50YWluZXJzCisgICAgICAgICAgICAgICAgb2YgbWFpbnN0cmVhbSBMaW51eCBkaXN0cmlidXRpb25zIGFzIHdlbGwgYXMgZm9yIHRoZQorICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgQXMgc3VjaCwgYSB3ZWxsLWVzdGFibGlzaGVkIHNvbHV0aW9uIGV4aXN0cy4KKyAgICAgICAgICAgICAgICBNYWtlZmlsZXMsIEF1dG90b29scyBjb25maWd1cmF0aW9uIHNjcmlwdHMsIGFuZCBvdGhlciBidWlsZAorICAgICAgICAgICAgICAgIHN5c3RlbXMgYXJlIGV4cGVjdGVkIHRvIHJlc3BlY3QgZW52aXJvbm1lbnQgdmFyaWFibGVzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmluZGlyPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5saWJkaXI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPnN5c2NvbmZkaXI8L2ZpbGVuYW1lPiB0aGF0IGluZGljYXRlIHdoZXJlCisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZXMsIGxpYnJhcmllcywgYW5kIGRhdGEgcmVzaWRlIHdoZW4gYSBwcm9ncmFtIGlzCisgICAgICAgICAgICAgICAgYWN0dWFsbHkgcnVuLgorICAgICAgICAgICAgICAgIFRoZXkgYXJlIGFsc28gZXhwZWN0ZWQgdG8gcmVzcGVjdCBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRFU1RESVI8L2ZpbGVuYW1lPiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICBwcmVwZW5kZWQgdG8gYWxsIHRoZSBvdGhlciB2YXJpYWJsZXMgd2hlbiB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgYWN0dWFsbHkgaW5zdGFsbHMgdGhlIGZpbGVzLgorICAgICAgICAgICAgICAgIEl0IGlzIHVuZGVyc3Rvb2QgdGhhdCB0aGUgcHJvZ3JhbSBkb2VzIG5vdCBhY3R1YWxseSBydW4gZnJvbQorICAgICAgICAgICAgICAgIHdpdGhpbiA8ZmlsZW5hbWU+REVTVERJUjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgYSByZWNpcGUgdG8gYnVpbGQgYQorICAgICAgICAgICAgICAgIHRhcmdldC1hcmNoaXRlY3R1cmUgcHJvZ3JhbSAoaS5lLiBvbmUgdGhhdCBpcyBpbnRlbmRlZCBmb3IKKyAgICAgICAgICAgICAgICBpbmNsdXNpb24gb24gdGhlIGltYWdlIGJlaW5nIGJ1aWx0KSwgdGhhdCBwcm9ncmFtIGV2ZW50dWFsbHkKKyAgICAgICAgICAgICAgICBydW5zIGZyb20gdGhlIHJvb3QgZmlsZSBzeXN0ZW0gb2YgdGhhdCBpbWFnZS4KKyAgICAgICAgICAgICAgICBUaHVzLCB0aGUgYnVpbGQgc3lzdGVtIHByb3ZpZGVzIGEgdmFsdWUgb2YgIi91c3IvYmluIiBmb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmluZGlyPC9maWxlbmFtZT4sIGEgdmFsdWUgb2YgIi91c3IvbGliIiBmb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGliZGlyPC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTWVhbndoaWxlLCA8ZmlsZW5hbWU+REVTVERJUjwvZmlsZW5hbWU+IGlzIGEgcGF0aCB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB3aGVuIHRoZSByZWNpcGUgYnVpbGRzIGEgbmF0aXZlIHByb2dyYW0gKGkuZS4gb25lCisgICAgICAgICAgICAgICAgdGhhdCBpcyBpbnRlbmRlZCB0byBydW4gb24gdGhlIGJ1aWxkIG1hY2hpbmUpLCB0aGF0IHByb2dyYW0KKyAgICAgICAgICAgICAgICBpcyBuZXZlciBpbnN0YWxsZWQgZGlyZWN0bHkgdG8gdGhlIGJ1aWxkIG1hY2hpbmUncyByb290CisgICAgICAgICAgICAgICAgZmlsZSBzeXN0ZW0uCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0aGUgYnVpbGQgc3lzdGVtIHVzZXMgcGF0aHMgd2l0aGluIHRoZSBCdWlsZAorICAgICAgICAgICAgICAgIERpcmVjdG9yeSBmb3IgPGZpbGVuYW1lPkRFU1RESVI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmluZGlyPC9maWxlbmFtZT4gYW5kIHJlbGF0ZWQgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIFRvIGJldHRlciB1bmRlcnN0YW5kIHRoaXMsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgdHdvIHBhdGhzCisgICAgICAgICAgICAgICAgd2hlcmUgdGhlIGZpcnN0IGlzIHJlbGF0aXZlbHkgbm9ybWFsIGFuZCB0aGUgc2Vjb25kIGlzIG5vdDoKKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRHVlIHRvIHRoZXNlIGxlbmd0aHkgZXhhbXBsZXMsIHRoZSBwYXRocyBhcmUgYXJ0aWZpY2lhbGx5CisgICAgICAgICAgICAgICAgICAgIGJyb2tlbiBhY3Jvc3MgbGluZXMgZm9yIHJlYWRhYmlsaXR5LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIC9ob21lL21heHRvdGhlbWF4L3Bva3ktYm9vdGNoYXJ0Mi9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvemxpYi8KKyAgICAgICAgMS4yLjgtcjAvc3lzcm9vdC1kZXN0ZGlyL3Vzci9iaW4KKworICAgICAvaG9tZS9tYXh0b3RoZW1heC9wb2t5LWJvb3RjaGFydDIvYnVpbGQvdG1wL3dvcmsveDg2XzY0LWxpbnV4LworICAgICAgICB6bGliLW5hdGl2ZS8xLjIuOC1yMC9zeXNyb290LWRlc3RkaXIvaG9tZS9tYXh0b3RoZW1heC9wb2t5LWJvb3RjaGFydDIvCisgICAgICAgIGJ1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2JpbgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBFdmVuIGlmIHRoZSBwYXRocyBsb29rIHVudXN1YWwsIHRoZXkgYm90aCBhcmUgY29ycmVjdCAtCisgICAgICAgICAgICAgICAgdGhlIGZpcnN0IGZvciBhIHRhcmdldCBhbmQgdGhlIHNlY29uZCBmb3IgYSBuYXRpdmUgcmVjaXBlLgorICAgICAgICAgICAgICAgIFRoZXNlIHBhdGhzIGFyZSBhIGNvbnNlcXVlbmNlIG9mIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ERVNURElSPC9maWxlbmFtZT4gbWVjaGFuaXNtIGFuZCB3aGlsZSB0aGV5CisgICAgICAgICAgICAgICAgYXBwZWFyIHN0cmFuZ2UsIHRoZXkgYXJlIGNvcnJlY3QgYW5kIGluIHByYWN0aWNlIHZlcnkgZWZmZWN0aXZlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZpbGVzIHByb3ZpZGVkIGJ5IG15IDxmaWxlbmFtZT4tbmF0aXZlPC9maWxlbmFtZT4gcmVjaXBlIGRvCisgICAgICAgICAgICAgICAgbm90IGFwcGVhciB0byBiZSBhdmFpbGFibGUgdG8gb3RoZXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICBGaWxlcyBhcmUgbWlzc2luZyBmcm9tIHRoZSBuYXRpdmUgc3lzcm9vdCwgbXkgcmVjaXBlIGlzCisgICAgICAgICAgICAgICAgaW5zdGFsbGluZyB0byB0aGUgd3JvbmcgcGxhY2UsIG9yIEkgYW0gZ2V0dGluZyBwZXJtaXNzaW9ucworICAgICAgICAgICAgICAgIGVycm9ycyBkdXJpbmcgdGhlIGRvX2luc3RhbGwgdGFzayBpbiBteSByZWNpcGUhIFdoYXQgaXMgd3Jvbmc/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNpdHVhdGlvbiByZXN1bHRzIHdoZW4gYSBidWlsZCBzeXN0ZW0gZG9lcworICAgICAgICAgICAgICAgIG5vdCByZWNvZ25pemUgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBzdXBwbGllZCB0byBpdCBieQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+LgorICAgICAgICAgICAgICAgIFRoZSBpbmNpZGVudCB0aGF0IHByb21wdGVkIHRoaXMgRkFRIGVudHJ5IGludm9sdmVkIGEgTWFrZWZpbGUKKyAgICAgICAgICAgICAgICB0aGF0IHVzZWQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QklORElSPC9maWxlbmFtZT4gaW5zdGVhZCBvZiB0aGUgbW9yZSBzdGFuZGFyZAorICAgICAgICAgICAgICAgIHZhcmlhYmxlIDxmaWxlbmFtZT5iaW5kaXI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgbWFrZWZpbGUncyBoYXJkY29kZWQgZGVmYXVsdCB2YWx1ZSBvZiAiL3Vzci9iaW4iIHdvcmtlZAorICAgICAgICAgICAgICAgIG1vc3Qgb2YgdGhlIHRpbWUsIGJ1dCBub3QgZm9yIHRoZSByZWNpcGUncworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tbmF0aXZlPC9maWxlbmFtZT4gdmFyaWFudC4KKyAgICAgICAgICAgICAgICBGb3IgYW5vdGhlciBleGFtcGxlLCBwZXJtaXNzaW9ucyBlcnJvcnMgbWlnaHQgYmUgY2F1c2VkCisgICAgICAgICAgICAgICAgYnkgYSBNYWtlZmlsZSB0aGF0IGlnbm9yZXMgPGZpbGVuYW1lPkRFU1RESVI8L2ZpbGVuYW1lPiBvciB1c2VzCisgICAgICAgICAgICAgICAgYSBkaWZmZXJlbnQgbmFtZSBmb3IgdGhhdCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBDaGVjayB0aGUgdGhlIGJ1aWxkIHN5c3RlbSB0byBzZWUgaWYgdGhlc2Uga2luZHMgb2YKKyAgICAgICAgICAgICAgICBpc3N1ZXMgZXhpc3QuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworPC9xYW5kYXNldD4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9hbmFseXNpcy1mb3ItcGFja2FnZS1zcGxpdHRpbmcucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9hbmFseXNpcy1mb3ItcGFja2FnZS1zcGxpdHRpbmcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZjI3OTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2FuYWx5c2lzLWZvci1wYWNrYWdlLXNwbGl0dGluZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9idWlsZGhpc3Rvcnktd2ViLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvYnVpbGRoaXN0b3J5LXdlYi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZkYjg2YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvYnVpbGRoaXN0b3J5LXdlYi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9idWlsZGhpc3RvcnkucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9idWlsZGhpc3RvcnkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNWY4YTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2J1aWxkaGlzdG9yeS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9idWlsZGluZy1hbi1pbWFnZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2J1aWxkaW5nLWFuLWltYWdlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZmJlYTVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9idWlsZGluZy1hbi1pbWFnZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9jb25maWd1cmF0aW9uLWNvbXBpbGUtYXV0b3JlY29uZi5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2NvbmZpZ3VyYXRpb24tY29tcGlsZS1hdXRvcmVjb25mLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDc0NjRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9jb25maWd1cmF0aW9uLWNvbXBpbGUtYXV0b3JlY29uZi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9jcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW5zLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWlucy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM2NjcwYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWlucy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDIyNzE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9pbWFnZS1nZW5lcmF0aW9uLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvaW1hZ2UtZ2VuZXJhdGlvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI5NjI1OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvaW1hZ2UtZ2VuZXJhdGlvbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9pbWFnZXMucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9pbWFnZXMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5OWVhYzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2ltYWdlcy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9sYXllci1pbnB1dC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2xheWVyLWlucHV0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTRmMmU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9sYXllci1pbnB1dC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9wYWNrYWdlLWZlZWRzLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvcGFja2FnZS1mZWVkcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdjOWMzMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvcGFja2FnZS1mZWVkcy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9wYXRjaGluZy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3BhdGNoaW5nLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWNkMDE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9wYXRjaGluZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9wb2t5LXRpdGxlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvcG9reS10aXRsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg5M2Q4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvcG9reS10aXRsZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9zZGstZ2VuZXJhdGlvbi5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3Nkay1nZW5lcmF0aW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzdlMjc0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9zZGstZ2VuZXJhdGlvbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9zZGsucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9zZGsucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MzljYzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3Nkay5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9zb3VyY2UtZmV0Y2hpbmcucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9zb3VyY2UtZmV0Y2hpbmcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YWVmYjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3NvdXJjZS1mZXRjaGluZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9zb3VyY2UtaW5wdXQucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9zb3VyY2UtaW5wdXQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NTE1MDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3NvdXJjZS1pbnB1dC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy91c2VyLWNvbmZpZ3VyYXRpb24ucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy91c2VyLWNvbmZpZ3VyYXRpb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYjNmOGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3VzZXItY29uZmlndXJhdGlvbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC1yZWYucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC1yZWYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MGM2YzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3lvY3RvLWVudmlyb25tZW50LXJlZi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvaW50cm9kdWN0aW9uLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ludHJvZHVjdGlvbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI1MGUyNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ludHJvZHVjdGlvbi54bWwKQEAgLTAsMCArMSw1OTEgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdyZWYtbWFudWFsLWludHJvJz4KKzx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorCis8c2VjdGlvbiBpZD0naW50cm8td2VsY29tZSc+CisgICAgPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBtYW51YWwgcHJvdmlkZXMgcmVmZXJlbmNlIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCByZWxlYXNlIG9mIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBpcyBhbiBvcGVuLXNvdXJjZSBjb2xsYWJvcmF0aW9uIHByb2plY3QgZm9jdXNlZCBvbiBlbWJlZGRlZCBMaW51eAorICAgICAgICBkZXZlbG9wZXJzLgorICAgICAgICBBbW9uZ3N0IG90aGVyIHRoaW5ncywgdGhlIFlvY3RvIFByb2plY3QgdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSwgd2hpY2gKKyAgICAgICAgaXMgYmFzZWQgb24gdGhlIFBva3kgcHJvamVjdCwgdG8gY29uc3RydWN0IGNvbXBsZXRlIExpbnV4IGltYWdlcy4KKyAgICAgICAgWW91IGNhbiBmaW5kIGNvbXBsZXRlIGludHJvZHVjdG9yeSBhbmQgZ2V0dGluZyBzdGFydGVkIGluZm9ybWF0aW9uIG9uIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgIGJ5IHJlYWRpbmcgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsnPllvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQ8L3VsaW5rPi4KKyAgICAgICAgRm9yIHRhc2stYmFzZWQgaW5mb3JtYXRpb24gdXNpbmcgdGhlIFlvY3RvIFByb2plY3QsIHNlZSB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsnPllvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsPC91bGluaz4KKyAgICAgICAgYW5kIHRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsnPllvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbDwvdWxpbms+LgorICAgICAgICBGb3IgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIHN0cnVjdHVyZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyc+WW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPi4KKyAgICAgICAgWW91IGNhbiBmaW5kIGluZm9ybWF0aW9uIG9uIHRyYWNpbmcgYW5kIHByb2ZpbGluZyBpbiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUFJPRl9VUkw7Jz5Zb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZyBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIEJpdEJha2UsIHdoaWNoIGlzIHRoZSB0YXNrIGV4ZWN1dGlvbiB0b29sIHRoZQorICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGlzIGJhc2VkIG9uLCBzZWUgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjYml0YmFrZS11c2VyLW1hbnVhbCc+Qml0QmFrZSBVc2VyIE1hbnVhbDwvdWxpbms+LgorICAgICAgICBGaW5hbGx5LCB5b3UgY2FuIGFsc28gZmluZCBsb3RzIG9mIFlvY3RvIFByb2plY3QgaW5mb3JtYXRpb24gb24gdGhlCisgICAgICAgIDx1bGluayB1cmw9IiZZT0NUT19IT01FX1VSTDsiPllvY3RvIFByb2plY3Qgd2Vic2l0ZTwvdWxpbms+LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2ludHJvLW1hbnVhbG92ZXJ2aWV3Jz4KKyAgICA8dGl0bGU+RG9jdW1lbnRhdGlvbiBPdmVydmlldzwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgcmVmZXJlbmNlIG1hbnVhbCBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd1c2luZ3Bva3knPlVzaW5nIHRoZSBZb2N0byBQcm9qZWN0PC9saW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFByb3ZpZGVzIGFuIG92ZXJ2aWV3IG9mIHRoZSBjb21wb25lbnRzIHRoYXQgbWFrZSB1cCB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIGZvbGxvd2VkIGJ5IGluZm9ybWF0aW9uIGFib3V0IGRlYnVnZ2luZyBpbWFnZXMgY3JlYXRlZCBpbiB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nY2xvc2VyLWxvb2snPkEgQ2xvc2VyIExvb2sgYXQgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQ8L2xpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgUHJvdmlkZXMgYSBtb3JlIGRldGFpbGVkIGxvb2sgYXQgdGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgZGV2ZWxvcG1lbnQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3RlY2huaWNhbC1kZXRhaWxzJz5UZWNobmljYWwgRGV0YWlsczwvbGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBEZXNjcmliZXMgZnVuZGFtZW50YWwgWW9jdG8gUHJvamVjdCBjb21wb25lbnRzIGFzIHdlbGwgYXMgYW4gZXhwbGFuYXRpb24KKyAgICAgICAgICAgICAgICBiZWhpbmQgaG93IHRoZSBZb2N0byBQcm9qZWN0IHVzZXMgc2hhcmVkIHN0YXRlIChzc3RhdGUpIGNhY2hlIHRvIHNwZWVkIGJ1aWxkIHRpbWUuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J21pZ3JhdGlvbic+TWlncmF0aW5nIHRvIGEgTmV3ZXIgWW9jdG8gUHJvamVjdCBSZWxlYXNlPC9saW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIERlc2NyaWJlcyByZWxlYXNlLXNwZWNpZmljIGluZm9ybWF0aW9uIHRoYXQgaGVscHMgeW91IG1vdmUgZnJvbQorICAgICAgICAgICAgICAgIG9uZSBZb2N0byBQcm9qZWN0IFJlbGVhc2UgdG8gYW5vdGhlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXN0cnVjdHVyZSc+RGlyZWN0b3J5IFN0cnVjdHVyZTwvbGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBEZXNjcmliZXMgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+IGNyZWF0ZWQKKyAgICAgICAgICAgICAgICBlaXRoZXIgYnkgdW5wYWNraW5nIGEgcmVsZWFzZWQgWW9jdG8gUHJvamVjdCB0YXJiYWxsIG9uIHlvdXIgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0sCisgICAgICAgICAgICAgICAgb3IgYnkgY2xvbmluZyB0aGUgdXBzdHJlYW0KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwb2t5Jz5Qb2t5PC91bGluaz4gR2l0IHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzJz5DbGFzc2VzPC9saW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIERlc2NyaWJlcyB0aGUgY2xhc3NlcyB1c2VkIGluIHRoZSBZb2N0byBQcm9qZWN0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MnPlRhc2tzPC9saW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIERlc2NyaWJlcyB0aGUgdGFza3MgZGVmaW5lZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXFhLWNoZWNrcyc+UUEgRXJyb3IgYW5kIFdhcm5pbmcgTWVzc2FnZXM8L2xpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgTGlzdHMgYW5kIGRlc2NyaWJlcyBRQSB3YXJuaW5nIGFuZCBlcnJvciBtZXNzYWdlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWltYWdlcyc+SW1hZ2VzPC9saW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIERlc2NyaWJlcyB0aGUgc3RhbmRhcmQgaW1hZ2VzIHRoYXQgdGhlIFlvY3RvIFByb2plY3Qgc3VwcG9ydHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1mZWF0dXJlcyc+RmVhdHVyZXM8L2xpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgRGVzY3JpYmVzIG1lY2hhbmlzbXMgZm9yIGNyZWF0aW5nIGRpc3RyaWJ1dGlvbiwgbWFjaGluZSwgYW5kIGltYWdlCisgICAgICAgICAgICAgICAgZmVhdHVyZXMgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzIHVzaW5nIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdmFyaWFibGVzLWdsb3MnPlZhcmlhYmxlcyBHbG9zc2FyeTwvbGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBQcmVzZW50cyBtb3N0IHZhcmlhYmxlcyB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLCB3aGljaAorICAgICAgICAgICAgICAgIHVzZXMgQml0QmFrZS4KKyAgICAgICAgICAgICAgICBFbnRyaWVzIGRlc2NyaWJlIHRoZSBmdW5jdGlvbiBvZiB0aGUgdmFyaWFibGUgYW5kIGhvdyB0byBhcHBseSB0aGVtLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdmFybG9jYWxpdHknPlZhcmlhYmxlIENvbnRleHQ8L2xpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgUHJvdmlkZXMgdmFyaWFibGUgbG9jYWxpdHkgb3IgY29udGV4dC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZmFxJz5GQVE8L2xpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgUHJvdmlkZXMgYW5zd2VycyBmb3IgY29tbW9ubHkgYXNrZWQgcXVlc3Rpb25zIGluIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Jlc291cmNlcyc+Q29udHJpYnV0aW5nIHRvIHRoZSBZb2N0byBQcm9qZWN0PC9saW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFByb3ZpZGVzIGd1aWRhbmNlIG9uIGhvdyB5b3UgY2FuIGNvbnRyaWJ1dGUgYmFjayB0byB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICBQcm9qZWN0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKworPHNlY3Rpb24gaWQ9J2ludHJvLXJlcXVpcmVtZW50cyc+Cis8dGl0bGU+U3lzdGVtIFJlcXVpcmVtZW50czwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICAgIEZvciBnZW5lcmFsIFlvY3RvIFByb2plY3Qgc3lzdGVtIHJlcXVpcmVtZW50cywgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyN5cC1yZXNvdXJjZXMnPlNldHRpbmcgVXAgdG8gVXNlIHRoZSBZb2N0byBQcm9qZWN0PC91bGluaz4iIHNlY3Rpb24KKyAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQuCisgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIHByb3ZpZGVzIGRldGFpbHMgb24gc3lzdGVtIHJlcXVpcmVtZW50cworICAgICAgICBub3QgY292ZXJlZCBpbiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydC4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nZGV0YWlsZWQtc3VwcG9ydGVkLWRpc3Ryb3MnPgorICAgICAgICA8dGl0bGU+U3VwcG9ydGVkIExpbnV4IERpc3RyaWJ1dGlvbnM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ3VycmVudGx5LCB0aGUgWW9jdG8gUHJvamVjdCBpcyBzdXBwb3J0ZWQgb24gdGhlIGZvbGxvd2luZworICAgICAgICAgICAgZGlzdHJpYnV0aW9uczoKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2VzIGFyZSB0ZXN0ZWQgYWdhaW5zdCB0aGUgc3RhYmxlIExpbnV4CisgICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbnMgaW4gdGhlIGZvbGxvd2luZyBsaXN0LgorICAgICAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBzaG91bGQgd29yayBvbiBvdGhlciBkaXN0cmlidXRpb25zIGJ1dAorICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uIGlzIG5vdCBwZXJmb3JtZWQgYWdhaW5zdCB0aGVtLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB0aGUgWW9jdG8gUHJvamVjdCBkb2VzIG5vdCBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgIGFuZCBjdXJyZW50bHkgaGFzIG5vIHBsYW5zIHRvIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgcm9sbGluZy1yZWxlYXNlcyBvciBkZXZlbG9wbWVudCBkaXN0cmlidXRpb25zIGR1ZSB0byB0aGVpcgorICAgICAgICAgICAgICAgICAgICBjb25zdGFudGx5IGNoYW5naW5nIG5hdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgV2Ugd2VsY29tZSBwYXRjaGVzIGFuZCBidWcgcmVwb3J0cywgYnV0IGtlZXAgaW4gbWluZCB0aGF0CisgICAgICAgICAgICAgICAgICAgIG91ciBwcmlvcml0eSBpcyBvbiB0aGUgc3VwcG9ydGVkIHBsYXRmb3JtcyBsaXN0ZWQgYmVsb3cuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBlbmNvdW50ZXIgcHJvYmxlbXMsIHBsZWFzZSBnbyB0bworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fQlVHWklMTEFfVVJMOyc+WW9jdG8gUHJvamVjdCBCdWd6aWxsYTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCBzdWJtaXQgYSBidWcuCisgICAgICAgICAgICAgICAgICAgIFdlIGFyZSBpbnRlcmVzdGVkIGluIGhlYXJpbmcgYWJvdXQgeW91ciBleHBlcmllbmNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Cis8IS0tCisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVidW50dSAxMC4wNDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5VYnVudHUgMTEuMTA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VWJ1bnR1IDEyLjA0IChMVFMpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVidW50dSAxMy4xMDwvcGFyYT48L2xpc3RpdGVtPiAtLT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VWJ1bnR1IDE0LjA0IChMVFMpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVidW50dSAxNC4xMDwvcGFyYT48L2xpc3RpdGVtPgorPCEtLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RmVkb3JhIDE2IChWZXJuZSk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RmVkb3JhIDE3IChTcGhlcmljYWwpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZlZG9yYSByZWxlYXNlIDE5IChTY2hyw7ZkaW5nZXIncyBDYXQpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZlZG9yYSByZWxlYXNlIDIwIChIZWlzZW5idWcpPC9wYXJhPjwvbGlzdGl0ZW0+IC0tPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5GZWRvcmEgcmVsZWFzZSAyMTwvcGFyYT48L2xpc3RpdGVtPgorPCEtLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2VudE9TIHJlbGVhc2UgNS42IChGaW5hbCk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2VudE9TIHJlbGVhc2UgNS43IChGaW5hbCk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2VudE9TIHJlbGVhc2UgNS44IChGaW5hbCk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2VudE9TIHJlbGVhc2UgNi4zIChGaW5hbCk8L3BhcmE+PC9saXN0aXRlbT4gLS0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNlbnRPUyByZWxlYXNlIDYueDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DZW50T1MgcmVsZWFzZSA3Lng8L3BhcmE+PC9saXN0aXRlbT4KKzwhLS0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRlYmlhbiBHTlUvTGludXggNi4wIChTcXVlZXplKTwvcGFyYT48L2xpc3RpdGVtPiAtLT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RGViaWFuIEdOVS9MaW51eCA3LnggKFdoZWV6eSk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RGViaWFuIEdOVS9MaW51eCA4LnggKEplc3NpZSk8L3BhcmE+PC9saXN0aXRlbT4KKzwhLS0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRlYmlhbiBHTlUvTGludXggNy4xIChXaGVlenkpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRlYmlhbiBHTlUvTGludXggNy4yIChXaGVlenkpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRlYmlhbiBHTlUvTGludXggNy4zIChXaGVlenkpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRlYmlhbiBHTlUvTGludXggNy40IChXaGVlenkpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRlYmlhbiBHTlUvTGludXggNy41IChXaGVlenkpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRlYmlhbiBHTlUvTGludXggNy42IChXaGVlenkpPC9wYXJhPjwvbGlzdGl0ZW0+IC0tPgorPCEtLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+b3BlblNVU0UgMTEuNDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5vcGVuU1VTRSAxMi4xPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPm9wZW5TVVNFIDEyLjI8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+b3BlblNVU0UgMTIuMzwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5vcGVuU1VTRSAxMy4xPC9wYXJhPjwvbGlzdGl0ZW0+IC0tPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5vcGVuU1VTRSAxMy4yPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgV2hpbGUgdGhlIFlvY3RvIFByb2plY3QgVGVhbSBhdHRlbXB0cyB0byBlbnN1cmUgYWxsIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgIHJlbGVhc2VzIGFyZSBvbmUgaHVuZHJlZCBwZXJjZW50IGNvbXBhdGlibGUgd2l0aCBlYWNoIG9mZmljaWFsbHkKKyAgICAgICAgICAgIHN1cHBvcnRlZCBMaW51eCBkaXN0cmlidXRpb24sIGluc3RhbmNlcyBtaWdodCBleGlzdCB3aGVyZSB5b3UKKyAgICAgICAgICAgIGVuY291bnRlciBhIHByb2JsZW0gd2hpbGUgdXNpbmcgdGhlIFlvY3RvIFByb2plY3Qgb24gYSBzcGVjaWZpYworICAgICAgICAgICAgZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBDZW50T1MgNi40IGRpc3RyaWJ1dGlvbiBkb2VzIG5vdCBpbmNsdWRlIHRoZQorICAgICAgICAgICAgR3RrKyAyLjIwLjAgYW5kIFB5R3RrIDIuMjEuMCAob3IgaGlnaGVyKSBwYWNrYWdlcywgd2hpY2ggYXJlCisgICAgICAgICAgICByZXF1aXJlZCB0byBydW4KKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2hvYic+SG9iPC91bGluaz4uCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVxdWlyZWQtcGFja2FnZXMtZm9yLXRoZS1ob3N0LWRldmVsb3BtZW50LXN5c3RlbSc+CisgICAgPHRpdGxlPlJlcXVpcmVkIFBhY2thZ2VzIGZvciB0aGUgSG9zdCBEZXZlbG9wbWVudCBTeXN0ZW08L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGxpc3Qgb2YgcGFja2FnZXMgeW91IG5lZWQgb24gdGhlIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtIGNhbgorICAgICAgICAgICAgYmUgbGFyZ2Ugd2hlbiBjb3ZlcmluZyBhbGwgYnVpbGQgc2NlbmFyaW9zIHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIHJlcXVpcmVkIHBhY2thZ2VzIGFjY29yZGluZyB0bworICAgICAgICAgICAgTGludXggZGlzdHJpYnV0aW9uIGFuZCBmdW5jdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1YnVudHUtcGFja2FnZXMnPgorICAgICAgICAgICAgPHRpdGxlPlVidW50dSBhbmQgRGViaWFuPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHNob3dzIHRoZSByZXF1aXJlZCBwYWNrYWdlcyBieSBmdW5jdGlvbgorICAgICAgICAgICAgICAgIGdpdmVuIGEgc3VwcG9ydGVkIFVidW50dSBvciBEZWJpYW4gTGludXggZGlzdHJpYnV0aW9uOgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3VyIGJ1aWxkIHN5c3RlbSBoYXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vc3M0LWRldjwvZmlsZW5hbWU+IHBhY2thZ2UgaW5zdGFsbGVkLCB5b3UKKyAgICAgICAgICAgICAgICAgICAgbWlnaHQgZXhwZXJpZW5jZSBRRU1VIGJ1aWxkIGZhaWx1cmVzIGR1ZSB0byB0aGUgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsaW5nIGl0cyBvd24gY3VzdG9tCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2luY2x1ZGUvbGludXgvc291bmRjYXJkLmg8L2ZpbGVuYW1lPiBvbgorICAgICAgICAgICAgICAgICAgICB0aGUgRGViaWFuIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHJ1biBpbnRvIHRoaXMgc2l0dWF0aW9uLCBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICBzb2x1dGlvbnMgZXhpc3Q6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIGFwdC1nZXQgYnVpbGQtZGVwIHFlbXUKKyAgICAgJCBzdWRvIGFwdC1nZXQgcmVtb3ZlIG9zczQtZGV2CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXNzZW50aWFsczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgbmVlZGVkIHRvIGJ1aWxkIGFuIGltYWdlIG9uIGEgaGVhZGxlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIGFwdC1nZXQgaW5zdGFsbCAmVUJVTlRVX0hPU1RfUEFDS0FHRVNfRVNTRU5USUFMOworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkdyYXBoaWNhbCBhbmQgRWNsaXBzZSBQbHVnLUluIEV4dHJhczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgcmVjb21tZW5kZWQgaWYgdGhlIGhvc3Qgc3lzdGVtIGhhcyBncmFwaGljcworICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBvciBpZiB5b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgRWNsaXBzZQorICAgICAgICAgICAgICAgICAgICAgICAgSURFOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8gYXB0LWdldCBpbnN0YWxsIGxpYnNkbDEuMi1kZXYgeHRlcm0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Eb2N1bWVudGF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBuZWVkZWQgaWYgeW91IGFyZSBnb2luZyB0byBidWlsZCBvdXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24gbWFudWFsczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIGFwdC1nZXQgaW5zdGFsbCBtYWtlIHhzbHRwcm9jIGRvY2Jvb2stdXRpbHMgZm9wIGRibGF0ZXggeG1sdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5BRFQgSW5zdGFsbGVyIEV4dHJhczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgbmVlZGVkIGlmIHlvdSBhcmUgZ29pbmcgdG8gYmUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyN1c2luZy10aGUtYWR0LWluc3RhbGxlcic+QXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgVG9vbGtpdCAoQURUKSBJbnN0YWxsZXI8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIGFwdC1nZXQgaW5zdGFsbCBhdXRvY29uZiBhdXRvbWFrZSBsaWJ0b29sIGxpYmdsaWIyLjAtZGV2CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZmVkb3JhLXBhY2thZ2VzJz4KKyAgICAgICAgICAgIDx0aXRsZT5GZWRvcmEgUGFja2FnZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3Qgc2hvd3MgdGhlIHJlcXVpcmVkIHBhY2thZ2VzIGJ5IGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgZ2l2ZW4gYSBzdXBwb3J0ZWQgRmVkb3JhIExpbnV4IGRpc3RyaWJ1dGlvbjoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkVzc2VudGlhbHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VzIG5lZWRlZCB0byBidWlsZCBhbiBpbWFnZSBmb3IgYSBoZWFkbGVzcworICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8geXVtIGluc3RhbGwgJkZFRE9SQV9IT1NUX1BBQ0tBR0VTX0VTU0VOVElBTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HcmFwaGljYWwgYW5kIEVjbGlwc2UgUGx1Zy1JbiBFeHRyYXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VzIHJlY29tbWVuZGVkIGlmIHRoZSBob3N0IHN5c3RlbSBoYXMgZ3JhcGhpY3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgb3IgaWYgeW91IGFyZSBnb2luZyB0byB1c2UgdGhlIEVjbGlwc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIElERToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHl1bSBpbnN0YWxsIFNETC1kZXZlbCB4dGVybSBwZXJsLVRocmVhZC1RdWV1ZQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRvY3VtZW50YXRpb246PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VzIG5lZWRlZCBpZiB5b3UgYXJlIGdvaW5nIHRvIGJ1aWxkIG91dCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbiBtYW51YWxzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8geXVtIGluc3RhbGwgbWFrZSBkb2Nib29rLXN0eWxlLWRzc3NsIGRvY2Jvb2stc3R5bGUteHNsIFwKKyAgICAgZG9jYm9vay1kdGRzIGRvY2Jvb2stdXRpbHMgZm9wIGxpYnhzbHQgZGJsYXRleCB4bWx0byB4c2x0cHJvYworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFEVCBJbnN0YWxsZXIgRXh0cmFzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBuZWVkZWQgaWYgeW91IGFyZSBnb2luZyB0byBiZSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I3VzaW5nLXRoZS1hZHQtaW5zdGFsbGVyJz5BcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBUb29sa2l0IChBRFQpIEluc3RhbGxlcjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8geXVtIGluc3RhbGwgYXV0b2NvbmYgYXV0b21ha2UgbGlidG9vbCBnbGliMi1kZXZlbAorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J29wZW5zdXNlLXBhY2thZ2VzJz4KKyAgICAgICAgICAgIDx0aXRsZT5vcGVuU1VTRSBQYWNrYWdlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBzaG93cyB0aGUgcmVxdWlyZWQgcGFja2FnZXMgYnkgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICBnaXZlbiBhIHN1cHBvcnRlZCBvcGVuU1VTRSBMaW51eCBkaXN0cmlidXRpb246CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Fc3NlbnRpYWxzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBuZWVkZWQgdG8gYnVpbGQgYW4gaW1hZ2UgZm9yIGEgaGVhZGxlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHp5cHBlciBpbnN0YWxsICZPUEVOU1VTRV9IT1NUX1BBQ0tBR0VTX0VTU0VOVElBTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HcmFwaGljYWwgYW5kIEVjbGlwc2UgUGx1Zy1JbiBFeHRyYXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VzIHJlY29tbWVuZGVkIGlmIHRoZSBob3N0IHN5c3RlbSBoYXMgZ3JhcGhpY3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgb3IgaWYgeW91IGFyZSBnb2luZyB0byB1c2UgdGhlIEVjbGlwc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIElERToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHp5cHBlciBpbnN0YWxsIGxpYlNETC1kZXZlbCB4dGVybQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRvY3VtZW50YXRpb246PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VzIG5lZWRlZCBpZiB5b3UgYXJlIGdvaW5nIHRvIGJ1aWxkIG91dCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbiBtYW51YWxzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8genlwcGVyIGluc3RhbGwgbWFrZSBmb3AgeHNsdHByb2MgZGJsYXRleCB4bWx0bworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFEVCBJbnN0YWxsZXIgRXh0cmFzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBuZWVkZWQgaWYgeW91IGFyZSBnb2luZyB0byBiZSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I3VzaW5nLXRoZS1hZHQtaW5zdGFsbGVyJz5BcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBUb29sa2l0IChBRFQpIEluc3RhbGxlcjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8genlwcGVyIGluc3RhbGwgYXV0b2NvbmYgYXV0b21ha2UgbGlidG9vbCBnbGliMi1kZXZlbAorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NlbnRvcy1wYWNrYWdlcyc+CisgICAgICAgICAgICA8dGl0bGU+Q2VudE9TIFBhY2thZ2VzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHNob3dzIHRoZSByZXF1aXJlZCBwYWNrYWdlcyBieSBmdW5jdGlvbgorICAgICAgICAgICAgICAgIGdpdmVuIGEgc3VwcG9ydGVkIENlbnRPUyBMaW51eCBkaXN0cmlidXRpb246CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEZvciBDZW50T1MgNi54LCBzb21lIG9mIHRoZSB2ZXJzaW9ucyBvZiB0aGUgY29tcG9uZW50cworICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCBieSB0aGUgZGlzdHJpYnV0aW9uIGFyZSB0b28gb2xkIChlLmcuIEdpdCwgUHl0aG9uLAorICAgICAgICAgICAgICAgICAgICBhbmQgdGFyKS4KKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgaW5zdGFsbCB0aGUgYnVpbGR0b29scyBpbiBvcmRlcgorICAgICAgICAgICAgICAgICAgICB0byBwcm92aWRlIHZlcnNpb25zIHRoYXQgd2lsbCB3b3JrIHdpdGggdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaW5zdGFsbCB0aGUgYnVpbGR0b29scyB0YXJiYWxsLAorICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZXF1aXJlZC1naXQtdGFyLWFuZC1weXRob24tdmVyc2lvbnMnPlJlcXVpcmVkIEdpdCwgVGFyLCBhbmQgUHl0aG9uIFZlcnNpb25zPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Fc3NlbnRpYWxzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBuZWVkZWQgdG8gYnVpbGQgYW4gaW1hZ2UgZm9yIGEgaGVhZGxlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHl1bSBpbnN0YWxsICZDRU5UT1NfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUw7CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+R3JhcGhpY2FsIGFuZCBFY2xpcHNlIFBsdWctSW4gRXh0cmFzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyByZWNvbW1lbmRlZCBpZiB0aGUgaG9zdCBzeXN0ZW0gaGFzIGdyYXBoaWNzCisgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IG9yIGlmIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBFY2xpcHNlCisgICAgICAgICAgICAgICAgICAgICAgICBJREU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyB5dW0gaW5zdGFsbCBTREwtZGV2ZWwgeHRlcm0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Eb2N1bWVudGF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBuZWVkZWQgaWYgeW91IGFyZSBnb2luZyB0byBidWlsZCBvdXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24gbWFudWFsczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHl1bSBpbnN0YWxsIG1ha2UgZG9jYm9vay1zdHlsZS1kc3NzbCBkb2Nib29rLXN0eWxlLXhzbCBcCisgICAgIGRvY2Jvb2stZHRkcyBkb2Nib29rLXV0aWxzIGZvcCBsaWJ4c2x0IGRibGF0ZXggeG1sdG8geHNsdHByb2MKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5BRFQgSW5zdGFsbGVyIEV4dHJhczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgbmVlZGVkIGlmIHlvdSBhcmUgZ29pbmcgdG8gYmUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyN1c2luZy10aGUtYWR0LWluc3RhbGxlcic+QXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgVG9vbGtpdCAoQURUKSBJbnN0YWxsZXI8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHl1bSBpbnN0YWxsIGF1dG9jb25mIGF1dG9tYWtlIGxpYnRvb2wgZ2xpYjItZGV2ZWwKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZXF1aXJlZC1naXQtdGFyLWFuZC1weXRob24tdmVyc2lvbnMnPgorICAgICAgICA8dGl0bGU+UmVxdWlyZWQgR2l0LCB0YXIsIGFuZCBQeXRob24gVmVyc2lvbnM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBidWlsZCBzeXN0ZW0sIHlvdXIgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0KKyAgICAgICAgICAgIG11c3QgbWVldCB0aGUgZm9sbG93aW5nIHZlcnNpb24gcmVxdWlyZW1lbnRzIGZvciBHaXQsIHRhciwgYW5kCisgICAgICAgICAgICBQeXRob246CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5HaXQgMS43Ljggb3IgZ3JlYXRlcjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT50YXIgMS4yNCBvciBncmVhdGVyPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlB5dGhvbiAyLjcuMyBvciBncmVhdGVyIG5vdCBpbmNsdWRpbmcKKyAgICAgICAgICAgICAgICAgICAgUHl0aG9uIDMueCwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3VyIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtIGRvZXMgbm90IG1lZXQgYWxsIHRoZXNlIHJlcXVpcmVtZW50cywKKyAgICAgICAgICAgIHlvdSBjYW4gcmVzb2x2ZSB0aGlzIGJ5IGluc3RhbGxpbmcgYSA8ZmlsZW5hbWU+YnVpbGR0b29sczwvZmlsZW5hbWU+CisgICAgICAgICAgICB0YXJiYWxsIHRoYXQgY29udGFpbnMgdGhlc2UgdG9vbHMuCisgICAgICAgICAgICBZb3UgY2FuIGdldCB0aGUgdGFyYmFsbCBvbmUgb2YgdHdvIHdheXM6IGRvd25sb2FkIGEgcHJlLWJ1aWx0CisgICAgICAgICAgICB0YXJiYWxsIG9yIHVzZSBCaXRCYWtlIHRvIGJ1aWxkIHRoZSB0YXJiYWxsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2Rvd25sb2FkaW5nLWEtcHJlLWJ1aWx0LWJ1aWxkdG9vbHMtdGFyYmFsbCc+CisgICAgICAgICAgICA8dGl0bGU+RG93bmxvYWRpbmcgYSBQcmUtQnVpbHQgPGZpbGVuYW1lPmJ1aWxkdG9vbHM8L2ZpbGVuYW1lPiBUYXJiYWxsPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRG93bmxvYWRpbmcgYW5kIHJ1bm5pbmcgYSBwcmUtYnVpbHQgYnVpbGR0b29scyBpbnN0YWxsZXIgaXMKKyAgICAgICAgICAgICAgICB0aGUgZWFzaWVzdCBvZiB0aGUgdHdvIG1ldGhvZHMgYnkgd2hpY2ggeW91IGNhbiBnZXQgdGhlc2UgdG9vbHM6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBMb2NhdGUgYW5kIGRvd25sb2FkIHRoZSA8ZmlsZW5hbWU+Ki5zaDwvZmlsZW5hbWU+IGF0CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRExfVVJMOy9yZWxlYXNlcy95b2N0by95b2N0by0mRElTVFJPOy9idWlsZHRvb2xzLyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgRXhlY3V0ZSB0aGUgaW5zdGFsbGF0aW9uIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzaCBwb2t5LWdsaWJjLXg4Nl82NC1idWlsZHRvb2xzLXRhcmJhbGwteDg2XzY0LWJ1aWxkdG9vbHMtbmF0aXZlc2RrLXN0YW5kYWxvbmUtJkRJU1RSTzsuc2gKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIER1cmluZyBleGVjdXRpb24sIGEgcHJvbXB0IGFwcGVhcnMgdGhhdCBhbGxvd3MgeW91IHRvCisgICAgICAgICAgICAgICAgICAgICAgICBjaG9vc2UgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIGNob29zZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAvaG9tZS88cmVwbGFjZWFibGU+eW91ci11c2VybmFtZTwvcmVwbGFjZWFibGU+L2J1aWxkdG9vbHMKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2UgdGhlIHRvb2xzIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBieSB1c2luZyBhCisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzb3VyY2UgL2hvbWUvPHJlcGxhY2VhYmxlPnlvdXJfdXNlcm5hbWU8L3JlcGxhY2VhYmxlPi9idWlsZHRvb2xzL2Vudmlyb25tZW50LXNldHVwLWk1ODYtcG9reS1saW51eAorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgT2YgY291cnNlLCB5b3UgbmVlZCB0byBzdXBwbHkgeW91ciBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IGFuZCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgc3VyZSB0byB1c2UgdGhlIHJpZ2h0IGZpbGUgKGkuZS4gaTU4NSBvciB4ODYtNjQpLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBBZnRlciB5b3UgaGF2ZSBzb3VyY2VkIHRoZSBzZXR1cCBzY3JpcHQsCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdG9vbHMgYXJlIGFkZGVkIHRvIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhbnkgb3RoZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIHJlcXVpcmVkIHRvIHJ1biB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xzIGFyZSBpbml0aWFsaXplZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZXN1bHRzIGFyZSB3b3JraW5nIHZlcnNpb25zIHZlcnNpb25zIG9mIEdpdCwgdGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgUHl0aG9uIGFuZCA8ZmlsZW5hbWU+Y2hycGF0aDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdidWlsZGluZy15b3VyLW93bi1idWlsZHRvb2xzLXRhcmJhbGwnPgorICAgICAgICAgICAgPHRpdGxlPkJ1aWxkaW5nIFlvdXIgT3duIDxmaWxlbmFtZT5idWlsZHRvb2xzPC9maWxlbmFtZT4gVGFyYmFsbDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJ1aWxkaW5nIGFuZCBydW5uaW5nIHlvdXIgb3duIGJ1aWxkdG9vbHMgaW5zdGFsbGVyIGFwcGxpZXMKKyAgICAgICAgICAgICAgICBvbmx5IHdoZW4geW91IGhhdmUgYSBidWlsZCBob3N0IHRoYXQgY2FuIGFscmVhZHkgcnVuIEJpdEJha2UuCisgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB5b3UgdXNlIHRoYXQgbWFjaGluZSB0byBidWlsZCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnNoPC9maWxlbmFtZT4gZmlsZSBhbmQgdGhlbgorICAgICAgICAgICAgICAgIHRha2Ugc3RlcHMgdG8gdHJhbnNmZXIgYW5kIHJ1biBpdCBvbiBhCisgICAgICAgICAgICAgICAgbWFjaGluZSB0aGF0IGRvZXMgbm90IG1lZXQgdGhlIG1pbmltYWwgR2l0LCB0YXIsIGFuZCBQeXRob24KKyAgICAgICAgICAgICAgICByZXF1aXJlbWVudHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIHRoZSBzdGVwcyB0byB0YWtlIHRvIGJ1aWxkIGFuZCBydW4geW91ciBvd24KKyAgICAgICAgICAgICAgICBidWlsZHRvb2xzIGluc3RhbGxlcjoKKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIHRoZSBtYWNoaW5lIHRoYXQgaXMgYWJsZSB0byBydW4gQml0QmFrZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlIHN1cmUgeW91IGhhdmUgc2V0IHVwIHlvdXIgYnVpbGQgZW52aXJvbm1lbnQgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNldHVwIHNjcmlwdAorICAgICAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgUnVuIHRoZSBCaXRCYWtlIGNvbW1hbmQgdG8gYnVpbGQgdGhlIHRhcmJhbGw6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBidWlsZHRvb2xzLXRhcmJhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLTUFDSElORSc+PGZpbGVuYW1lPlNES01BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVzIHdoZXRoZXIgeW91IGJ1aWxkIHRvb2xzIGZvciBhIDMyLWJpdAorICAgICAgICAgICAgICAgICAgICAgICAgb3IgNjQtYml0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBidWlsZCBjb21wbGV0ZXMsIHlvdSBjYW4gZmluZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5zaDwvZmlsZW5hbWU+IGZpbGUgdGhhdCBpbnN0YWxscworICAgICAgICAgICAgICAgICAgICAgICB0aGUgdG9vbHMgaW4gdGhlIDxmaWxlbmFtZT50bXAvZGVwbG95L3NkazwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgVGhlIGluc3RhbGxlciBmaWxlIGhhcyB0aGUgc3RyaW5nICJidWlsZHRvb2xzIgorICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2ZlciB0aGUgPGZpbGVuYW1lPi5zaDwvZmlsZW5hbWU+IGZpbGUgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgaG9zdCB0byB0aGUgbWFjaGluZSB0aGF0IGRvZXMgbm90IG1lZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIEdpdCwgdGFyLCBvciBQeXRob24gcmVxdWlyZW1lbnRzLgorICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgIE9uIHRoZSBtYWNoaW5lIHRoYXQgZG9lcyBub3QgbWVldCB0aGUgcmVxdWlyZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICBydW4gdGhlIDxmaWxlbmFtZT4uc2g8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgIHRvIGluc3RhbGwgdGhlIHRvb2xzLgorICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzaCBwb2t5LWdsaWJjLXg4Nl82NC1idWlsZHRvb2xzLXRhcmJhbGwteDg2XzY0LWJ1aWxkdG9vbHMtbmF0aXZlc2RrLXN0YW5kYWxvbmUtJkRJU1RSTzsuc2gKKyAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICBEdXJpbmcgZXhlY3V0aW9uLCBhIHByb21wdCBhcHBlYXJzIHRoYXQgYWxsb3dzIHlvdSB0bworICAgICAgICAgICAgICAgICAgICAgICBjaG9vc2UgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgY291bGQgY2hvb3NlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgL2hvbWUvPHJlcGxhY2VhYmxlPnlvdXJfdXNlcm5hbWU8L3JlcGxhY2VhYmxlPi9idWlsZHRvb2xzCisgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZSB0aGUgdG9vbHMgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IGJ5IHVzaW5nIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgbGlrZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNvdXJjZSAvaG9tZS88cmVwbGFjZWFibGU+eW91cl91c2VybmFtZTwvcmVwbGFjZWFibGU+L2J1aWxkdG9vbHMvZW52aXJvbm1lbnQtc2V0dXAtaTU4Ni1wb2t5LWxpbnV4CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBPZiBjb3Vyc2UsIHlvdSBuZWVkIHRvIHN1cHBseSB5b3VyIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgYW5kIGJlCisgICAgICAgICAgICAgICAgICAgICAgICBzdXJlIHRvIHVzZSB0aGUgcmlnaHQgZmlsZSAoaS5lLiBpNTg1IG9yIHg4Ni02NCkuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIHlvdSBoYXZlIHNvdXJjZWQgdGhlIHNldHVwIHNjcmlwdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0b29scyBhcmUgYWRkZWQgdG8gPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGFueSBvdGhlciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgcmVxdWlyZWQgdG8gcnVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHMgYXJlIGluaXRpYWxpemVkLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlc3VsdHMgYXJlIHdvcmtpbmcgdmVyc2lvbnMgdmVyc2lvbnMgb2YgR2l0LCB0YXIsCisgICAgICAgICAgICAgICAgICAgICAgICBQeXRob24gYW5kIDxmaWxlbmFtZT5jaHJwYXRoPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0naW50cm8tZ2V0aXQnPgorICAgIDx0aXRsZT5PYnRhaW5pbmcgdGhlIFlvY3RvIFByb2plY3Q8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCB0ZWFtIG1ha2VzIHRoZSBZb2N0byBQcm9qZWN0IGF2YWlsYWJsZSB0aHJvdWdoIGEgbnVtYmVyCisgICAgICAgIG9mIG1ldGhvZHM6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNvdXJjZSBSZXBvc2l0b3JpZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBXb3JraW5nIGZyb20gYSBjb3B5IG9mIHRoZSB1cHN0cmVhbQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gcmVwb3NpdG9yeSBpcyB0aGUKKyAgICAgICAgICAgICAgICBwcmVmZXJyZWQgbWV0aG9kIGZvciBvYnRhaW5pbmcgYW5kIHVzaW5nIGEgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIHJlbGVhc2UuCisgICAgICAgICAgICAgICAgWW91IGNhbiB2aWV3IHRoZSBZb2N0byBQcm9qZWN0IFNvdXJjZSBSZXBvc2l0b3JpZXMgYXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2knPjwvdWxpbms+LgorICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIHlvdSBjYW4gZmluZCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IHJlcG9zaXRvcnkgYXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wb2t5Lyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJlbGVhc2VzOjwvZW1waGFzaXM+IFN0YWJsZSwgdGVzdGVkCisgICAgICAgICAgICAgICAgcmVsZWFzZXMgYXJlIGF2YWlsYWJsZSBhcyB0YXJiYWxscyB0aHJvdWdoCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RMX1VSTDsvcmVsZWFzZXMveW9jdG8vJy8+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5OaWdodGx5IEJ1aWxkczo8L2VtcGhhc2lzPiBUaGVzZQorICAgICAgICAgICAgICAgIHRhcmJhbGwgcmVsZWFzZXMgYXJlIGF2YWlsYWJsZSBhdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19BQl9OSUdIVExZX1VSTDsnLz4uCisgICAgICAgICAgICAgICAgVGhlc2UgYnVpbGRzIGluY2x1ZGUgWW9jdG8gUHJvamVjdCByZWxlYXNlcywgbWV0YS10b29sY2hhaW4KKyAgICAgICAgICAgICAgICB0YXJiYWxsIGluc3RhbGxhdGlvbiBzY3JpcHRzLCBhbmQgZXhwZXJpbWVudGFsIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+WW9jdG8gUHJvamVjdCBXZWJzaXRlOjwvZW1waGFzaXM+IFlvdSBjYW4KKyAgICAgICAgICAgICAgICBmaW5kIHRhcmJhbGwgcmVsZWFzZXMgb2YgdGhlIFlvY3RvIFByb2plY3QgYW5kIHN1cHBvcnRlZCBCU1BzCisgICAgICAgICAgICAgICAgYXQgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOyc+WW9jdG8gUHJvamVjdCB3ZWJzaXRlPC91bGluaz4uCisgICAgICAgICAgICAgICAgQWxvbmcgd2l0aCB0aGVzZSBkb3dubG9hZHMsIHlvdSBjYW4gZmluZCBsb3RzIG9mIG90aGVyCisgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gYXQgdGhpcyBzaXRlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdpbnRyby1nZXRpdC1kZXYnPgorICAgIDx0aXRsZT5EZXZlbG9wbWVudCBDaGVja291dHM8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgICBEZXZlbG9wbWVudCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCByZXF1aXJlcyBhIGxvY2FsCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgWW91IGNhbiBzZXQgdXAgdGhlIFNvdXJjZSBEaXJlY3RvcnkgYnkgY2xvbmluZyBhIGNvcHkgb2YgdGhlIHVwc3RyZWFtCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3Bva3knPnBva3k8L3VsaW5rPiBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBkbyB0aGlzLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNnZXR0aW5nLXNldHVwJz5HZXR0aW5nIFNldCBVcDwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvbWlncmF0aW9uLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL21pZ3JhdGlvbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM3NWViOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL21pZ3JhdGlvbi54bWwKQEAgLTAsMCArMSwyMzE5IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0nbWlncmF0aW9uJz4KKzx0aXRsZT5NaWdyYXRpbmcgdG8gYSBOZXdlciBZb2N0byBQcm9qZWN0IFJlbGVhc2U8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2hhcHRlciBwcm92aWRlcyBpbmZvcm1hdGlvbiB5b3UgY2FuIHVzZSB0byBtaWdyYXRlIHdvcmsgdG8gYQorICAgICAgICBuZXdlciBZb2N0byBQcm9qZWN0IHJlbGVhc2UuICBZb3UgY2FuIGZpbmQgdGhlIHNhbWUgaW5mb3JtYXRpb24gaW4gdGhlCisgICAgICAgIHJlbGVhc2Ugbm90ZXMgZm9yIGEgZ2l2ZW4gcmVsZWFzZS4KKyAgICA8L3BhcmE+CisKKzxzZWN0aW9uIGlkPSdnZW5lcmFsLW1pZ3JhdGlvbi1jb25zaWRlcmF0aW9ucyc+CisgICAgPHRpdGxlPkdlbmVyYWwgTWlncmF0aW9uIENvbnNpZGVyYXRpb25zPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBTb21lIGNvbnNpZGVyYXRpb25zIGFyZSBub3QgdGllZCB0byBhIHNwZWNpZmljIFlvY3RvIFByb2plY3QKKyAgICAgICAgcmVsZWFzZS4KKyAgICAgICAgVGhpcyBzZWN0aW9uIHByZXNlbnRzIGluZm9ybWF0aW9uIHlvdSBzaG91bGQgY29uc2lkZXIgd2hlbgorICAgICAgICBtaWdyYXRpbmcgdG8gYW55IG5ldyBZb2N0byBQcm9qZWN0IHJlbGVhc2UuCisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRlYWxpbmcgd2l0aCBDdXN0b21pemVkIFJlY2lwZXM8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICBJc3N1ZXMgY291bGQgYXJpc2UgaWYgeW91IHRha2Ugb2xkZXIgcmVjaXBlcyB0aGF0IGNvbnRhaW4KKyAgICAgICAgICAgICAgICBjdXN0b21pemF0aW9ucyBhbmQgc2ltcGx5IGNvcHkgdGhlbSBmb3J3YXJkIGV4cGVjdGluZyB0aGVtCisgICAgICAgICAgICAgICAgdG8gd29yayBhZnRlciB5b3UgbWlncmF0ZSB0byBuZXcgWW9jdG8gUHJvamVjdCBtZXRhZGF0YS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGF2ZSBhIHJlY2lwZSBpbiB5b3VyIGxheWVyIHRoYXQgaXMKKyAgICAgICAgICAgICAgICBhIGN1c3RvbWl6ZWQgdmVyc2lvbiBvZiBhIGNvcmUgcmVjaXBlIGNvcGllZCBmcm9tIHRoZSBlYXJsaWVyCisgICAgICAgICAgICAgICAgcmVsZWFzZSwgcmF0aGVyIHRoYW4gdGhyb3VnaCB0aGUgdXNlIG9mIGFuIGFwcGVuZCBmaWxlLgorICAgICAgICAgICAgICAgIFdoZW4geW91IG1pZ3JhdGUgdG8gYSBuZXdlciB2ZXJzaW9uIG9mIFlvY3RvIFByb2plY3QsIHRoZQorICAgICAgICAgICAgICAgIG1ldGFkYXRhIChlLmcuIHBlcmhhcHMgYW4gaW5jbHVkZSBmaWxlIHVzZWQgYnkgdGhlIHJlY2lwZSkKKyAgICAgICAgICAgICAgICBjb3VsZCBoYXZlIGNoYW5nZWQgaW4gYSB3YXkgdGhhdCB3b3VsZCBicmVhayB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgU2F5LCBmb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpcyByZW1vdmVkIGZyb20gYW4gaW5jbHVkZSBmaWxlCisgICAgICAgICAgICAgICAgYW5kIHRoZSBjdXN0b21pemVkIHJlY2lwZSB0cmllcyB0byBjYWxsIHRoYXQgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+WW91IGNvdWxkICJmb3J3YXJkLXBvcnQiIGFsbCB5b3VyIGN1c3RvbWl6YXRpb25zIGluIHlvdXIKKyAgICAgICAgICAgICAgICByZWNpcGUgc28gdGhhdCBldmVyeXRoaW5nIHdvcmtzIGZvciB0aGUgbmV3IHJlbGVhc2UuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhpcyBpcyBub3QgdGhlIG9wdGltYWwgc29sdXRpb24gYXMgeW91IHdvdWxkIGhhdmUKKyAgICAgICAgICAgICAgICB0byByZXBlYXQgdGhpcyBwcm9jZXNzIHdpdGggZWFjaCBuZXcgcmVsZWFzZSBpZiBjaGFuZ2VzCisgICAgICAgICAgICAgICAgb2NjdXIgdGhhdCBnaXZlIHJpc2UgdG8gcHJvYmxlbXMuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGJldHRlciBzb2x1dGlvbiAod2hlcmUgcHJhY3RpY2FsKSBpcyB0byB1c2UgYXBwZW5kCisgICAgICAgICAgICAgICAgZmlsZXMgKDxmaWxlbmFtZT4qLmJiYXBwZW5kPC9maWxlbmFtZT4pIHRvIGNhcHR1cmUgYW55CisgICAgICAgICAgICAgICAgY3VzdG9taXphdGlvbnMgeW91IHdhbnQgdG8gbWFrZSB0byBhIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBEb2luZyBzbywgaXNvbGF0ZXMgeW91ciBjaGFuZ2VzIGZyb20gdGhlIG1haW4gcmVjaXBlIG1ha2luZworICAgICAgICAgICAgICAgIHRoZW0gbXVjaCBtb3JlIG1hbmFnZWFibGUuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgc29tZXRpbWVzIGl0IGlzIG5vdCBwcmFjdGljYWwgdG8gdXNlIGFuIGFwcGVuZAorICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgQSBnb29kIGV4YW1wbGUgb2YgdGhpcyBpcyB3aGVuIGludHJvZHVjaW5nIGEgbmV3ZXIgb3Igb2xkZXIKKyAgICAgICAgICAgICAgICB2ZXJzaW9uIG9mIGEgcmVjaXBlIGluIGFub3RoZXIgbGF5ZXIuPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVwZGF0aW5nIEFwcGVuZCBGaWxlczwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgIFNpbmNlIGFwcGVuZCBmaWxlcyBnZW5lcmFsbHkgb25seSBjb250YWluIHlvdXIgY3VzdG9taXphdGlvbnMsCisgICAgICAgICAgICAgICAgdGhleSBvZnRlbiBkbyBub3QgbmVlZCB0byBiZSBhZGp1c3RlZCBmb3IgbmV3IHJlbGVhc2VzLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHRoZSA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSBpcworICAgICAgICAgICAgICAgIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSByZWNpcGUgKGkuZS4gaXRzCisgICAgICAgICAgICAgICAgbmFtZSBkb2VzIG5vdCB1c2UgdGhlICUgd2lsZGNhcmQpIGFuZCB0aGUgdmVyc2lvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICByZWNpcGUgdG8gd2hpY2ggaXQgaXMgYXBwZW5kaW5nIGhhcyBjaGFuZ2VkLCB0aGVuIHlvdSB3aWxsCisgICAgICAgICAgICAgICAgYXQgYSBtaW5pbXVtIG5lZWQgdG8gcmVuYW1lIHRoZSBhcHBlbmQgZmlsZSB0byBtYXRjaCB0aGUKKyAgICAgICAgICAgICAgICBuYW1lIG9mIHRoZSByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICBBIG1pc21hdGNoIGJldHdlZW4gYW4gYXBwZW5kIGZpbGUgYW5kIGl0cyBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICAgICAgcmVjaXBlIGZpbGUgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPikgd2lsbAorICAgICAgICAgICAgICAgIHRyaWdnZXIgYW4gZXJyb3IgZHVyaW5nIHBhcnNpbmcuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBjdXN0b21pemF0aW9uIHRoZSBhcHBlbmQgZmlsZQorICAgICAgICAgICAgICAgIGFwcGxpZXMsIG90aGVyIGluY29tcGF0aWJpbGl0aWVzIG1pZ2h0IG9jY3VyIHdoZW4geW91CisgICAgICAgICAgICAgICAgdXBncmFkZS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91ciBhcHBlbmQgZmlsZSBhcHBsaWVzIGEgcGF0Y2ggYW5kIHRoZQorICAgICAgICAgICAgICAgIHJlY2lwZSB0byB3aGljaCBpdCBpcyBhcHBlbmRpbmcgaXMgdXBkYXRlZCB0byBhIG5ld2VyCisgICAgICAgICAgICAgICAgdmVyc2lvbiwgdGhlIHBhdGNoIG1pZ2h0IG5vIGxvbmdlciBhcHBseS4KKyAgICAgICAgICAgICAgICBJZiB0aGlzIGlzIHRoZSBjYXNlIGFuZCBhc3N1bWluZyB0aGUgcGF0Y2ggaXMgc3RpbGwgbmVlZGVkLAorICAgICAgICAgICAgICAgIHlvdSBtdXN0IG1vZGlmeSB0aGUgcGF0Y2ggZmlsZSBzbyB0aGF0IGl0IGRvZXMgYXBwbHkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J21vdmluZy10by10aGUteW9jdG8tcHJvamVjdC0xLjMtcmVsZWFzZSc+CisgICAgPHRpdGxlPk1vdmluZyB0byB0aGUgWW9jdG8gUHJvamVjdCAxLjMgUmVsZWFzZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIG1pZ3JhdGlvbiBpbmZvcm1hdGlvbiBmb3IgbW92aW5nIHRvIHRoZQorICAgICAgICBZb2N0byBQcm9qZWN0IDEuMyBSZWxlYXNlIGZyb20gdGhlIHByaW9yIHJlbGVhc2UuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9JzEuMy1sb2NhbC1jb25maWd1cmF0aW9uJz4KKyAgICAgICAgPHRpdGxlPkxvY2FsIENvbmZpZ3VyYXRpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRGlmZmVyZW5jZXMgaW5jbHVkZSBjaGFuZ2VzIGZvcgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNTVEFURV9NSVJST1JTJz48ZmlsZW5hbWU+U1NUQVRFX01JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjMtc3N0YXRlLW1pcnJvcnMnPgorICAgICAgICAgICAgPHRpdGxlPlNTVEFURV9NSVJST1JTPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHNoYXJlZCBzdGF0ZSBjYWNoZSAoc3N0YXRlLWNhY2hlKSwgYXMgcG9pbnRlZCB0byBieQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TU1RBVEVfRElSJz48ZmlsZW5hbWU+U1NUQVRFX0RJUjwvZmlsZW5hbWU+PC9saW5rPiwgYnkgZGVmYXVsdAorICAgICAgICAgICAgICAgIG5vdyBoYXMgdHdvLWNoYXJhY3RlciBzdWJkaXJlY3RvcmllcyB0byBwcmV2ZW50IGlzc3VlcyBhcmlzaW5nCisgICAgICAgICAgICAgICAgZnJvbSB0b28gbWFueSBmaWxlcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgQWxzbywgbmF0aXZlIHNzdGF0ZS1jYWNoZSBwYWNrYWdlcyB3aWxsIGdvIGludG8gYSBzdWJkaXJlY3RvcnkgbmFtZWQgdXNpbmcKKyAgICAgICAgICAgICAgICB0aGUgZGlzdHJvIElEIHN0cmluZy4KKyAgICAgICAgICAgICAgICBJZiB5b3UgY29weSB0aGUgbmV3bHkgc3RydWN0dXJlZCBzc3RhdGUtY2FjaGUgdG8gYSBtaXJyb3IgbG9jYXRpb24KKyAgICAgICAgICAgICAgICAoZWl0aGVyIGxvY2FsIG9yIHJlbW90ZSkgYW5kIHRoZW4gcG9pbnQgdG8gaXQgaW4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1NUQVRFX01JUlJPUlMnPjxmaWxlbmFtZT5TU1RBVEVfTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICB5b3UgbmVlZCB0byBhcHBlbmQgIlBBVEgiIHRvIHRoZSBlbmQgb2YgdGhlIG1pcnJvciBVUkwgc28gdGhhdAorICAgICAgICAgICAgICAgIHRoZSBwYXRoIHVzZWQgYnkgQml0QmFrZSBiZWZvcmUgdGhlIG1pcnJvciBzdWJzdGl0dXRpb24gaXMKKyAgICAgICAgICAgICAgICBhcHBlbmRlZCB0byB0aGUgcGF0aCB1c2VkIHRvIGFjY2VzcyB0aGUgbWlycm9yLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNTVEFURV9NSVJST1JTID0gImZpbGU6Ly8uKiBodHRwOi8vPHJlcGxhY2VhYmxlPnNvbWVzZXJ2ZXI8L3JlcGxhY2VhYmxlPi50bGQvc2hhcmUvc3N0YXRlL1BBVEgiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjMtYmJsYXllcnMtY29uZic+CisgICAgICAgICAgICA8dGl0bGU+YmJsYXllcnMuY29uZjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+IGxheWVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cworICAgICAgICAgICAgICAgIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgUG9reSByZWZlcmVuY2UgZGlzdHJpYnV0aW9uIGFuZCB0aGUKKyAgICAgICAgICAgICAgICByZWZlcmVuY2UgaGFyZHdhcmUgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQcyksIHJlc3BlY3RpdmVseToKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvLWJzcDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFdoZW4gcnVubmluZyBCaXRCYWtlIG9yIEhvYiBmb3IgdGhlIGZpcnN0IHRpbWUgYWZ0ZXIgdXBncmFkaW5nLAorICAgICAgICAgICAgICAgIHlvdXIgPGZpbGVuYW1lPmNvbmYvYmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUgd2lsbCBiZQorICAgICAgICAgICAgICAgIHVwZGF0ZWQgdG8gaGFuZGxlIHRoaXMgY2hhbmdlIGFuZCB5b3Ugd2lsbCBiZSBhc2tlZCB0bworICAgICAgICAgICAgICAgIHJlLXJ1biBvciByZXN0YXJ0IGZvciB0aGUgY2hhbmdlcyB0byB0YWtlIGVmZmVjdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPScxLjMtcmVjaXBlcyc+CisgICAgICAgIDx0aXRsZT5SZWNpcGVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIERpZmZlcmVuY2VzIGluY2x1ZGUgY2hhbmdlcyBmb3IgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlB5dGhvbiBmdW5jdGlvbiB3aGl0ZXNwYWNlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5wcm90bz08L2ZpbGVuYW1lPiBpbiA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UYXNrIHJlY2lwZXM8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UmVtb3ZlZCByZWNpcGVzPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS4zLXB5dGhvbi1mdW5jdGlvbi13aGl0ZXNwYWNlJz4KKyAgICAgICAgICAgIDx0aXRsZT5QeXRob24gRnVuY3Rpb24gV2hpdGVzcGFjZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFsbCBQeXRob24gZnVuY3Rpb25zIG11c3Qgbm93IHVzZSBmb3VyIHNwYWNlcyBmb3IgaW5kZW50YXRpb24uCisgICAgICAgICAgICAgICAgUHJldmlvdXNseSwgYW4gaW5jb25zaXN0ZW50IG1peCBvZiBzcGFjZXMgYW5kIHRhYnMgZXhpc3RlZCwKKyAgICAgICAgICAgICAgICB3aGljaCBtYWRlIGV4dGVuZGluZyB0aGVzZSBmdW5jdGlvbnMgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT5fcHJlcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29tcGxpY2F0ZWQgZ2l2ZW4gdGhhdCBQeXRob24gdHJlYXRzIHdoaXRlc3BhY2UgYXMKKyAgICAgICAgICAgICAgICBzeW50YWN0aWNhbGx5IHNpZ25pZmljYW50LgorICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgZGVmaW5pbmcgb3IgZXh0ZW5kaW5nIGFueSBQeXRob24gZnVuY3Rpb25zIChlLmcuCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBvcHVsYXRlX3BhY2thZ2VzPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5kb191bnBhY2s8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcGF0Y2g8L2ZpbGVuYW1lPiBhbmQgc28gZm9ydGgpIGluIGN1c3RvbSByZWNpcGVzCisgICAgICAgICAgICAgICAgb3IgY2xhc3NlcywgeW91IG5lZWQgdG8gZW5zdXJlIHlvdSBhcmUgdXNpbmcgY29uc2lzdGVudAorICAgICAgICAgICAgICAgIGZvdXItc3BhY2UgaW5kZW50YXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuMy1wcm90bz0taW4tc3JjLXVyaSc+CisgICAgICAgICAgICA8dGl0bGU+cHJvdG89IGluIFNSQ19VUkk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBbnkgdXNlIG9mIDxmaWxlbmFtZT5wcm90bz08L2ZpbGVuYW1lPiBpbgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gPGZpbGVuYW1lPnByb3RvY29sPTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIHRoaXMgYXBwbGllcyB0byB0aGUgZm9sbG93aW5nIFVSSXM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5zdm46Ly88L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJ6cjovLzwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+aGc6Ly88L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPm9zYzovLzwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgT3RoZXIgVVJJcyB3ZXJlIGFscmVhZHkgdXNpbmcgPGZpbGVuYW1lPnByb3RvY29sPTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoaXMgY2hhbmdlIGltcHJvdmVzIGNvbnNpc3RlbmN5LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjMtbmF0aXZlc2RrJz4KKyAgICAgICAgICAgIDx0aXRsZT5uYXRpdmVzZGs8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgc3VmZml4IDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPiBpcyBub3cgaW1wbGVtZW50ZWQKKyAgICAgICAgICAgICAgICBhcyBhIHByZWZpeCwgd2hpY2ggc2ltcGxpZmllcyBhIGxvdCBvZiB0aGUgcGFja2FnaW5nIGNvZGUgZm9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+IHJlY2lwZXMuCisgICAgICAgICAgICAgICAgQWxsIGN1c3RvbSA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4gcmVjaXBlcyBhbmQgYW55CisgICAgICAgICAgICAgICAgcmVmZXJlbmNlcyBuZWVkIHRvIGJlIHVwZGF0ZWQgdG8gdXNlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5hdGl2ZXNkay0qPC9maWxlbmFtZT4gaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4qLW5hdGl2ZXNkazwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjMtdGFzay1yZWNpcGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5UYXNrIFJlY2lwZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAiVGFzayIgcmVjaXBlcyBhcmUgbm93IGtub3duIGFzICJQYWNrYWdlIGdyb3VwcyIgYW5kIGhhdmUKKyAgICAgICAgICAgICAgICBiZWVuIHJlbmFtZWQgZnJvbSA8ZmlsZW5hbWU+dGFzay0qLmJiPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLSouYmI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBFeGlzdGluZyByZWZlcmVuY2VzIHRvIHRoZSBwcmV2aW91cyA8ZmlsZW5hbWU+dGFzay0qPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBuYW1lcyBzaG91bGQgd29yayBpbiBtb3N0IGNhc2VzIGFzIHRoZXJlIGlzIGFuIGF1dG9tYXRpYworICAgICAgICAgICAgICAgIHVwZ3JhZGUgcGF0aCBmb3IgbW9zdCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3Ugc2hvdWxkIHVwZGF0ZSByZWZlcmVuY2VzIGluIHlvdXIgb3duIHJlY2lwZXMgYW5kCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMgYXMgdGhleSBjb3VsZCBiZSByZW1vdmVkIGluIGZ1dHVyZSByZWxlYXNlcy4KKyAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGFsc28gcmVuYW1lIGFueSBjdXN0b20gPGZpbGVuYW1lPnRhc2stKjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcmVjaXBlcyB0byA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLSo8L2ZpbGVuYW1lPiwgYW5kIGNoYW5nZQorICAgICAgICAgICAgICAgIHRoZW0gdG8gaW5oZXJpdCA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwPC9maWxlbmFtZT4gaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50YXNrPC9maWxlbmFtZT4sIGFzIHdlbGwgYXMgdGFraW5nIHRoZSBvcHBvcnR1bml0eQorICAgICAgICAgICAgICAgIHRvIHJlbW92ZSBhbnl0aGluZyBub3cgaGFuZGxlZCBieQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAuYmJjbGFzczwvZmlsZW5hbWU+LCBzdWNoIGFzIHByb3ZpZGluZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZGV2PC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT4tZGJnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBwYWNrYWdlcywgc2V0dGluZworICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MSUNfRklMRVNfQ0hLU1VNJz48ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlZ3JvdXAnPjxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBmdXJ0aGVyIGRldGFpbHMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuMy1pbWFnZS1mZWF0dXJlcyc+CisgICAgICAgICAgICA8dGl0bGU+SU1BR0VfRkVBVFVSRVM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbWFnZSByZWNpcGVzIHRoYXQgcHJldmlvdXNseSBpbmNsdWRlZCAiYXBwcy1jb25zb2xlLWNvcmUiCisgICAgICAgICAgICAgICAgaW4gPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBzaG91bGQgbm93IGluY2x1ZGUgInNwbGFzaCIgaW5zdGVhZCB0byBlbmFibGUgdGhlIGJvb3QtdXAKKyAgICAgICAgICAgICAgICBzcGxhc2ggc2NyZWVuLgorICAgICAgICAgICAgICAgIFJldGFpbmluZyAiYXBwcy1jb25zb2xlLWNvcmUiIHdpbGwgc3RpbGwgaW5jbHVkZSB0aGUgc3BsYXNoCisgICAgICAgICAgICAgICAgc2NyZWVuIGJ1dCBnZW5lcmF0ZXMgYSB3YXJuaW5nLgorICAgICAgICAgICAgICAgIFRoZSAiYXBwcy14MTEtY29yZSIgYW5kICJhcHBzLXgxMS1nYW1lcyIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiBmZWF0dXJlcyBoYXZlIGJlZW4gcmVtb3ZlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS4zLXJlbW92ZWQtcmVjaXBlcyc+CisgICAgICAgICAgICA8dGl0bGU+UmVtb3ZlZCBSZWNpcGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyByZWNpcGVzIGhhdmUgYmVlbiByZW1vdmVkLgorICAgICAgICAgICAgICAgIEZvciBtb3N0IG9mIHRoZW0sIGl0IGlzIHVubGlrZWx5IHRoYXQgeW91IHdvdWxkIGhhdmUgYW55CisgICAgICAgICAgICAgICAgcmVmZXJlbmNlcyB0byB0aGVtIGluIHlvdXIgb3duCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4uCisgICAgICAgICAgICAgICAgSG93ZXZlciwgeW91IHNob3VsZCBjaGVjayB5b3VyIG1ldGFkYXRhIGFnYWluc3QgdGhpcyBsaXN0IHRvIGJlIHN1cmU6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bGlieDExLXRyaW08L2ZpbGVuYW1lPjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgUmVwbGFjZWQgYnkgPGZpbGVuYW1lPmxpYngxMTwvZmlsZW5hbWU+LCB3aGljaCBoYXMgYSBuZWdsaWdpYmxlCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplIGRpZmZlcmVuY2Ugd2l0aCBtb2Rlcm4gWG9yZy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+eHNlcnZlci14b3JnLWxpdGU8L2ZpbGVuYW1lPjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIDxmaWxlbmFtZT54c2VydmVyLXhvcmc8L2ZpbGVuYW1lPiwgd2hpY2ggaGFzIGEgbmVnbGlnaWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSBkaWZmZXJlbmNlIHdoZW4gRFJJIGFuZCBHTFggbW9kdWxlcyBhcmUgbm90IGluc3RhbGxlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+eHNlcnZlci1rZHJpdmU8L2ZpbGVuYW1lPjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgRWZmZWN0aXZlbHkgdW5tYWludGFpbmVkIGZvciBtYW55IHllYXJzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5tZXNhLXhsaWI8L2ZpbGVuYW1lPjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgTm8gbG9uZ2VyIHNlcnZlcyBhbnkgcHVycG9zZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2FsYWdvPC9maWxlbmFtZT48L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlcGxhY2VkIGJ5IHRlbGVwYXRoeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2FpbDwvZmlsZW5hbWU+PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbmFsaXR5IHdhcyBpbnRlZ3JhdGVkIGludG8gR1RLKyAyLjEzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5lZ2dkYnVzPC9maWxlbmFtZT48L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vIGxvbmdlciBuZWVkZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdjYy0qLWludGVybWVkaWF0ZTwvZmlsZW5hbWU+PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgaGFzIGJlZW4gcmVzdHJ1Y3R1cmVkIHRvIGF2b2lkIHRoZSBuZWVkIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBzdGVwLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5saWJnc21kPC9maWxlbmFtZT48L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFVubWFpbnRhaW5lZCBmb3IgbWFueSB5ZWFycy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uYWxpdHkgbm93IHByb3ZpZGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b2Zvbm88L2ZpbGVuYW1lPiBpbnN0ZWFkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmNvbnRhY3RzLCBkYXRlcywgdGFza3MsIGVkcy10b29sczwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgTGFyZ2VseSB1bm1haW50YWluZWQgUElNIGFwcGxpY2F0aW9uIHN1aXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgaGFzIGJlZW4gbW92ZWQgdG8gPGZpbGVuYW1lPm1ldGEtZ25vbWU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPm1ldGEtb3BlbmVtYmVkZGVkPC9maWxlbmFtZT4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgSW4gYWRkaXRpb24gdG8gdGhlIHByZXZpb3VzbHkgbGlzdGVkIGNoYW5nZXMsIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWRlbW9hcHBzPC9maWxlbmFtZT4gZGlyZWN0b3J5IGhhcyBhbHNvIGJlZW4gcmVtb3ZlZAorICAgICAgICAgICAgICAgIGJlY2F1c2UgdGhlIHJlY2lwZXMgaW4gaXQgd2VyZSBub3QgYmVpbmcgbWFpbnRhaW5lZCBhbmQgbWFueQorICAgICAgICAgICAgICAgIGhhZCBiZWNvbWUgb2Jzb2xldGUgb3IgYnJva2VuLgorICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlc2UgcmVjaXBlcyB3ZXJlIG5vdCBwYXJzZWQgaW4gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICBNYW55IG9mIHRoZXNlIHJlY2lwZXMgYXJlIGFscmVhZHkgcHJvdmlkZWQgaW4gYW4gdXBkYXRlZCBhbmQKKyAgICAgICAgICAgICAgICBtYWludGFpbmVkIGZvcm0gd2l0aGluIHRoZSBPcGVuRW1iZWRkZWQgY29tbXVuaXR5IGxheWVycyBzdWNoIGFzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtb2U8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPm1ldGEtZ25vbWU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBGb3IgdGhlIHJlbWFpbmRlciwgeW91IGNhbiBub3cgZmluZCB0aGVtIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWV4dHJhczwvZmlsZW5hbWU+IHJlcG9zaXRvcnksIHdoaWNoIGlzIGluIHRoZQorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtcmVwb3NpdG9yaWVzJz5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nMS4zLWxpbnV4LWtlcm5lbC1uYW1pbmcnPgorICAgICAgICA8dGl0bGU+TGludXggS2VybmVsIE5hbWluZzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgbmFtaW5nIHNjaGVtZSBmb3Iga2VybmVsIG91dHB1dCBiaW5hcmllcyBoYXMgYmVlbiBjaGFuZ2VkIHRvCisgICAgICAgICAgICBub3cgaW5jbHVkZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBFJz48ZmlsZW5hbWU+UEU8L2ZpbGVuYW1lPjwvbGluaz4gYXMgcGFydCBvZiB0aGUKKyAgICAgICAgICAgIGZpbGVuYW1lOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBLRVJORUxfSU1BR0VfQkFTRV9OQU1FID89ICIke0tFUk5FTF9JTUFHRVRZUEV9LSR7UEV9LSR7UFZ9LSR7UFJ9LSR7TUFDSElORX0tJHtEQVRFVElNRX0iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJlY2F1c2UgdGhlIDxmaWxlbmFtZT5QRTwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIG5vdCBzZXQgYnkgZGVmYXVsdCwKKyAgICAgICAgICAgIHRoZXNlIGJpbmFyeSBmaWxlcyBjb3VsZCByZXN1bHQgd2l0aCBuYW1lcyB0aGF0IGluY2x1ZGUgdHdvIGRhc2gKKyAgICAgICAgICAgIGNoYXJhY3RlcnMuCisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGJ6SW1hZ2UtLTMuMTAuOStnaXQwK2NkNTAyYTg4MTRfNzE0NGJjYzRiOC1yMC1xZW11eDg2LTY0LTIwMTMwODMwMDg1NDMxLmJpbgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nbW92aW5nLXRvLXRoZS15b2N0by1wcm9qZWN0LTEuNC1yZWxlYXNlJz4KKyAgICA8dGl0bGU+TW92aW5nIHRvIHRoZSBZb2N0byBQcm9qZWN0IDEuNCBSZWxlYXNlPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgbWlncmF0aW9uIGluZm9ybWF0aW9uIGZvciBtb3ZpbmcgdG8gdGhlCisgICAgICAgIFlvY3RvIFByb2plY3QgMS40IFJlbGVhc2UgZnJvbSB0aGUgcHJpb3IgcmVsZWFzZS4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNC1iaXRiYWtlJz4KKyAgICAgICAgPHRpdGxlPkJpdEJha2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRGlmZmVyZW5jZXMgaW5jbHVkZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNvbW1lbnQgQ29udGludWF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIElmIGEgY29tbWVudCBlbmRzIHdpdGggYSBsaW5lIGNvbnRpbnVhdGlvbiAoXCkgY2hhcmFjdGVyLAorICAgICAgICAgICAgICAgICAgICB0aGVuIHRoZSBuZXh0IGxpbmUgbXVzdCBhbHNvIGJlIGEgY29tbWVudC4KKyAgICAgICAgICAgICAgICAgICAgQW55IGluc3RhbmNlIHdoZXJlIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBub3cgdHJpZ2dlcnMKKyAgICAgICAgICAgICAgICAgICAgYSB3YXJuaW5nLgorICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBlaXRoZXIgcmVtb3ZlIHRoZSBjb250aW51YXRpb24gY2hhcmFjdGVyLCBvciBiZQorICAgICAgICAgICAgICAgICAgICBzdXJlIHRoZSBuZXh0IGxpbmUgaXMgYSBjb21tZW50LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBhY2thZ2UgTmFtZSBPdmVycmlkZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJ1bnRpbWUgcGFja2FnZSBzcGVjaWZpYyB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlNVR0dFU1RTJz48ZmlsZW5hbWU+UlNVR0dFU1RTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlBST1ZJREVTJz48ZmlsZW5hbWU+UlBST1ZJREVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkNPTkZMSUNUUyc+PGZpbGVuYW1lPlJDT05GTElDVFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVQTEFDRVMnPjxmaWxlbmFtZT5SUkVQTEFDRVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQUxMT1dfRU1QVFknPjxmaWxlbmFtZT5BTExPV19FTVBUWTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBwcmUsIHBvc3QsIGluc3RhbGwsIGFuZCB1bmluc3RhbGwgc2NyaXB0IGZ1bmN0aW9ucworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3ByZWluc3Q8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZ19wb3N0aW5zdDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3ByZXJtPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3Bvc3RybTwvZmlsZW5hbWU+IHNob3VsZCBhbHdheXMgaGF2ZSBhCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbmFtZSBvdmVycmlkZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHVzZSA8ZmlsZW5hbWU+UkRFUEVORFNfJHtQTn08L2ZpbGVuYW1lPiBmb3IKKyAgICAgICAgICAgICAgICAgICAgdGhlIG1haW4gcGFja2FnZSBpbnN0ZWFkIG9mIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgbW9yZSBzdHJpY3QgY2hlY2tzIHdoZW4gaXQgcGFyc2VzIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNC1idWlsZC1iZWhhdmlvcic+CisgICAgICAgIDx0aXRsZT5CdWlsZCBCZWhhdmlvcjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEaWZmZXJlbmNlcyBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2hhcmVkIFN0YXRlIENvZGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNoYXJlZCBzdGF0ZSBjb2RlIGhhcyBiZWVuIG9wdGltaXplZCB0byBhdm9pZCBydW5uaW5nCisgICAgICAgICAgICAgICAgICAgIHVubmVjZXNzYXJ5IHRhc2tzLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBubyBsb25nZXIgcG9wdWxhdGVzIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgc3lzcm9vdCBzaW5jZSB0aGF0IGlzIG5vdCBuZWNlc3Nhcnk6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1jIHJvb3RmcyA8cmVwbGFjZWFibGU+c29tZS1pbWFnZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGVhZCwgdGhlIHN5c3RlbSBqdXN0IG5lZWRzIHRvIGV4dHJhY3QgdGhlIG91dHB1dAorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIGNvbnRlbnRzLCByZS1jcmVhdGUgdGhlIHBhY2thZ2VzLCBhbmQgY29uc3RydWN0CisgICAgICAgICAgICAgICAgICAgIHRoZSByb290IGZpbGVzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY2hhbmdlIGlzIHVubGlrZWx5IHRvIGNhdXNlIGFueSBwcm9ibGVtcyB1bmxlc3MKKyAgICAgICAgICAgICAgICAgICAgeW91IGhhdmUgbWlzc2luZyBkZWNsYXJlZCBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2Nhbm5pbmcgRGlyZWN0b3J5IE5hbWVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gc2Nhbm5pbmcgZm9yIGZpbGVzIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIHN5c3RlbSBub3cgdXNlcworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVNPVkVSUklERVMnPjxmaWxlbmFtZT5GSUxFU09WRVJSSURFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIDxsaW5rIGxpbmtlbmQ9J3Zhci1PVkVSUklERVMnPjxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBkaXJlY3RvcnkgbmFtZXMuCisgICAgICAgICAgICAgICAgICAgIEluIGdlbmVyYWwsIHRoZSB2YWx1ZXMgcHJldmlvdXNseSBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4gYXJlIG5vdyBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVNPVkVSUklERVM8L2ZpbGVuYW1lPiBhcyB3ZWxsLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgcmVsaWVkIHVwb24gYW4gYWRkaXRpb25hbCB2YWx1ZQorICAgICAgICAgICAgICAgICAgICB5b3UgcHJldmlvdXNseSBhZGRlZCB0byA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIHlvdSBtaWdodCBub3cgbmVlZCB0byBhZGQgaXQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTT1ZFUlJJREVTPC9maWxlbmFtZT4gdW5sZXNzIHlvdSBhcmUgYWxyZWFkeQorICAgICAgICAgICAgICAgICAgICBhZGRpbmcgaXQgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVPVkVSUklERVMnPjxmaWxlbmFtZT5NQUNISU5FT1ZFUlJJREVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG9yIDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9PVkVSUklERVMnPjxmaWxlbmFtZT5ESVNUUk9PVkVSUklERVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLCBhcyBhcHByb3ByaWF0ZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgcmVsYXRlZCBjaGFuZ2VzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdtaWdyYXRpb24tMS40LXZhcmlhYmxlcyc+VmFyaWFibGVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjQtcHJveGllcy1hbmQtZmV0Y2hpbmctc291cmNlJz4KKyAgICAgICAgPHRpdGxlPlByb3hpZXMgYW5kIEZldGNoaW5nIFNvdXJjZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIG5ldyA8ZmlsZW5hbWU+b2UtZ2l0LXByb3h5PC9maWxlbmFtZT4gc2NyaXB0IGhhcyBiZWVuIGFkZGVkIHRvCisgICAgICAgICAgICByZXBsYWNlIHByZXZpb3VzIG1ldGhvZHMgb2YgaGFuZGxpbmcgcHJveGllcyBhbmQgZmV0Y2hpbmcgc291cmNlCisgICAgICAgICAgICBmcm9tIEdpdC4KKyAgICAgICAgICAgIFNlZSB0aGUgPGZpbGVuYW1lPm1ldGEteW9jdG8vY29uZi9zaXRlLmNvbmYuc2FtcGxlPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhpcyBzY3JpcHQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNC1jdXN0b20taW50ZXJmYWNlcy1maWxlLW5ldGJhc2UtY2hhbmdlJz4KKyAgICAgICAgPHRpdGxlPkN1c3RvbSBJbnRlcmZhY2VzIEZpbGUgKG5ldGJhc2UgY2hhbmdlKTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgaGF2ZSBjcmVhdGVkIHlvdXIgb3duIGN1c3RvbQorICAgICAgICAgICAgPGZpbGVuYW1lPmV0Yy9uZXR3b3JrL2ludGVyZmFjZXM8L2ZpbGVuYW1lPiBmaWxlIGJ5IGNyZWF0aW5nCisgICAgICAgICAgICBhbiBhcHBlbmQgZmlsZSBmb3IgdGhlIDxmaWxlbmFtZT5uZXRiYXNlPC9maWxlbmFtZT4gcmVjaXBlLAorICAgICAgICAgICAgeW91IG5vdyBuZWVkIHRvIGNyZWF0ZSBhbiBhcHBlbmQgZmlsZSBmb3IgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+aW5pdC1pZnVwZG93bjwvZmlsZW5hbWU+IHJlY2lwZSBpbnN0ZWFkLCB3aGljaCB5b3UgY2FuCisgICAgICAgICAgICBmaW5kIGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICBhdCA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgYXBwZW5kIGZpbGVzLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdXNpbmctYmJhcHBlbmQtZmlsZXMnPlVzaW5nIC5iYmFwcGVuZCBGaWxlczwvdWxpbms+IgorICAgICAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjQtcmVtb3RlLWRlYnVnZ2luZyc+CisgICAgICAgIDx0aXRsZT5SZW1vdGUgRGVidWdnaW5nPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFN1cHBvcnQgZm9yIHJlbW90ZSBkZWJ1Z2dpbmcgd2l0aCB0aGUgRWNsaXBzZSBJREUgaXMgbm93CisgICAgICAgICAgICBzZXBhcmF0ZWQgaW50byBhbiBpbWFnZSBmZWF0dXJlCisgICAgICAgICAgICAoPGZpbGVuYW1lPmVjbGlwc2UtZGVidWc8L2ZpbGVuYW1lPikgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtY29yZS1lY2xpcHNlLWRlYnVnPC9maWxlbmFtZT4gcGFja2FnZSBncm91cC4KKyAgICAgICAgICAgIFByZXZpb3VzbHksIHRoZSBkZWJ1Z2dpbmcgZmVhdHVyZSB3YXMgaW5jbHVkZWQgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT50b29scy1kZWJ1ZzwvZmlsZW5hbWU+IGltYWdlIGZlYXR1cmUsIHdoaWNoIGNvcnJlc3BvbmRzCisgICAgICAgICAgICB0byB0aGUgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLWRlYnVnPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHBhY2thZ2UgZ3JvdXAuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNC12YXJpYWJsZXMnPgorICAgICAgICA8dGl0bGU+VmFyaWFibGVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGhhdmUgY2hhbmdlZDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+U0FOSVRZX1RFU1RFRF9ESVNUUk9TPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBub3cgdXNlcyBhIGRpc3RyaWJ1dGlvbiBJRCwgd2hpY2ggaXMgY29tcG9zZWQKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGhvc3QgZGlzdHJpYnV0b3IgSUQgZm9sbG93ZWQgYnkgdGhlIHJlbGVhc2UuCisgICAgICAgICAgICAgICAgICAgIFByZXZpb3VzbHksCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TQU5JVFlfVEVTVEVEX0RJU1RST1MnPjxmaWxlbmFtZT5TQU5JVFlfVEVTVEVEX0RJU1RST1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgd2FzIGNvbXBvc2VkIG9mIHRoZSBkZXNjcmlwdGlvbiBmaWVsZC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsICJVYnVudHUgMTIuMTAiIGJlY29tZXMgIlVidW50dS0xMi4xMCIuCisgICAgICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGlzIGNoYW5nZSBpZiB5b3UgYXJlIG5vdAorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY2FsbHkgc2V0dGluZyB0aGlzIHZhcmlhYmxlLCBvciBpZiB5b3UgYXJlCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljYWxseSBzZXR0aW5nIGl0IHRvICIiLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QRic+PGZpbGVuYW1lPlBGPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUCc+PGZpbGVuYW1lPlA8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPkZJTEVfRElSTkFNRTwvZmlsZW5hbWU+IGRpcmVjdG9yaWVzIGhhdmUgYmVlbgorICAgICAgICAgICAgICAgICAgICBkcm9wcGVkIGZyb20gdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFU1BBVEgnPjxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHdoaWNoIGlzIHVzZWQgYXMgdGhlIHNlYXJjaCBwYXRoIGZvciBmaW5kaW5nIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIHJlZmVycmVkIHRvIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgYSByZWNpcGUgdGhhdCByZWxpZWQgdXBvbiB0aGVzZSBkaXJlY3RvcmllcywKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggd291bGQgYmUgdW51c3VhbCwgdGhlbiB5b3Ugd2lsbCBuZWVkIHRvIGFkZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGUgcGF0aHMgd2l0aGluIHRoZSByZWNpcGUgb3IsIGFsdGVybmF0aXZlbHksCisgICAgICAgICAgICAgICAgICAgIHJlYXJyYW5nZSB0aGUgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBtb3N0IGNvbW1vbiBsb2NhdGlvbnMgYXJlIHN0aWxsIGNvdmVyZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7QlB9PC9maWxlbmFtZT4sIDxmaWxlbmFtZT4ke0JQTn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kICJmaWxlcyIsIHdoaWNoIGFsbCByZW1haW4gaW4gdGhlIGRlZmF1bHQgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tdGFyZ2V0LXBhY2thZ2UtbWFuYWdlbWVudC13aXRoLXJwbSc+CisgICAgICAgIDx0aXRsZT5UYXJnZXQgUGFja2FnZSBNYW5hZ2VtZW50IHdpdGggUlBNPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHJ1bnRpbWUgcGFja2FnZSBtYW5hZ2VtZW50IGlzIGVuYWJsZWQgYW5kIHRoZSBSUE0gYmFja2VuZAorICAgICAgICAgICAgaXMgc2VsZWN0ZWQsIFNtYXJ0IGlzIG5vdyBpbnN0YWxsZWQgZm9yIHBhY2thZ2UgZG93bmxvYWQsIGRlcGVuZGVuY3kKKyAgICAgICAgICAgIHJlc29sdXRpb24sIGFuZCB1cGdyYWRlcyBpbnN0ZWFkIG9mIFp5cHBlci4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgU21hcnQsIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQKKyAgICAgICAgICAgIG9uIHRoZSB0YXJnZXQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHNtYXJ0IC0taGVscAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjQtcmVjaXBlcy1tb3ZlZCc+CisgICAgICAgIDx0aXRsZT5SZWNpcGVzIE1vdmVkPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgcmVjaXBlcyB3ZXJlIG1vdmVkIGZyb20gdGhlaXIgcHJldmlvdXMgbG9jYXRpb25zCisgICAgICAgICAgICBiZWNhdXNlIHRoZXkgYXJlIG5vIGxvbmdlciB1c2VkIGJ5IGFueXRoaW5nIGluCisgICAgICAgICAgICB0aGUgT3BlbkVtYmVkZGVkLUNvcmU6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmNsdXR0ZXItYm94MmQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBOb3cgcmVzaWRlcyBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtb2U8L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZXZvbHV0aW9uLWRhdGEtc2VydmVyPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTm93IHJlc2lkZXMgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLWdub21lPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmd0aHVtYjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE5vdyByZXNpZGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1nbm9tZTwvZmlsZW5hbWU+IGxheWVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5ndGtodG1sMjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE5vdyByZXNpZGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1vZTwvZmlsZW5hbWU+IGxheWVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5ndXBucDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE5vdyByZXNpZGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1tdWx0aW1lZGlhPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmd5cHN5PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTm93IHJlc2lkZXMgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLW9lPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmxpYmNhbmJlcnJhPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTm93IHJlc2lkZXMgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLWdub21lPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmxpYmdkYXRhPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTm93IHJlc2lkZXMgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLWdub21lPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmxpYm11c2ljYnJhaW56PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTm93IHJlc2lkZXMgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLW11bHRpbWVkaWE8L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bWV0YWNpdHk8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBOb3cgcmVzaWRlcyBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtZ25vbWU8L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cG9sa2l0PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTm93IHJlc2lkZXMgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLW9lPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnplcm9jb25mPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTm93IHJlc2lkZXMgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLW5ldHdvcmtpbmc8L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS40LXJlbW92YWxzLWFuZC1yZW5hbWVzJz4KKyAgICAgICAgPHRpdGxlPlJlbW92YWxzIGFuZCBSZW5hbWVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBzaG93cyB3aGF0IGhhcyBiZWVuIHJlbW92ZWQgb3IgcmVuYW1lZDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZXZpZWV4dDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgYmVjYXVzZSBpdCBoYXMgYmVlbiByZW1vdmVkIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnhzZXJ2ZXI8L2ZpbGVuYW1lPiBzaW5jZSAyMDA4LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkd0aysgRGlyZWN0RkI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBzdXBwb3J0IGJlY2F1c2UgdXBzdHJlYW0gR3RrKyBubyBsb25nZXIgc3VwcG9ydHMgaXQKKyAgICAgICAgICAgICAgICAgICAgYXMgb2YgdmVyc2lvbiAyLjE4LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5saWJ4Zm9udGNhY2hlIC8geGZvbnRjYWNoZXByb3RvPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBiZWNhdXNlIHRoZXkgd2VyZSByZW1vdmVkIGZyb20gdGhlIFhvcmcgc2VydmVyIGluIDIwMDguCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmxpYnhwIC8gbGlieHByaW50YXBwdXRpbCAvIGxpYnhwcmludHV0aWwgLyBwcmludHByb3RvPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBiZWNhdXNlIHRoZSBYUHJpbnQgc2VydmVyIHdhcyByZW1vdmVkIGZyb20KKyAgICAgICAgICAgICAgICAgICAgWG9yZyBpbiAyMDA4LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5saWJ4dHJhcCAvIHh0cmFwcHJvdG88L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGJlY2F1c2UgdGhlaXIgZnVuY3Rpb25hbGl0eSB3YXMgYnJva2VuIHVwc3RyZWFtLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmxpbnV4LXlvY3RvIDMuMCBrZXJuZWw6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCB3aXRoIGxpbnV4LXlvY3RvIDMuOCBrZXJuZWwgYmVpbmcgYWRkZWQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBsaW51eC15b2N0byAzLjIgYW5kIGxpbnV4LXlvY3RvIDMuNCBrZXJuZWxzIHJlbWFpbgorICAgICAgICAgICAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSByZWxlYXNlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5sc2JzZXR1cDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgd2l0aCBmdW5jdGlvbmFsaXR5IG5vdyBwcm92aWRlZCBieQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bHNidGVzdDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5tYXRjaGJveC1zdHJva2U8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGJlY2F1c2UgaXQgd2FzIG5ldmVyIG1vcmUgdGhhbiBhIHByb29mLW9mLWNvbmNlcHQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm1hdGNoYm94LXdtLTIgLyBtYXRjaGJveC10aGVtZS1zYXRvLTI8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGJlY2F1c2UgdGhleSBhcmUgbm90IG1haW50YWluZWQuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIDxmaWxlbmFtZT5tYXRjaGJveC13bTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWF0Y2hib3gtdGhlbWUtc2F0bzwvZmlsZW5hbWU+IGFyZSBzdGlsbAorICAgICAgICAgICAgICAgICAgICBwcm92aWRlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bWVzYS1kcmk8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW5hbWVkIHRvIDxmaWxlbmFtZT5tZXNhPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm1lc2EteGxpYjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgYmVjYXVzZSBpdCB3YXMgbm8gbG9uZ2VyIHVzZWZ1bC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bXV0dGVyPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBiZWNhdXNlIG5vdGhpbmcgZXZlciB1c2VzIGl0IGFuZCB0aGUgcmVjaXBlIGlzCisgICAgICAgICAgICAgICAgICAgIHZlcnkgb2xkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5vcmlub2NvLWNvbmY8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGJlY2F1c2UgaXQgaGFzIGJlY29tZSBvYnNvbGV0ZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+dXBkYXRlLW1vZHVsZXM8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGJlY2F1c2UgaXQgaXMgbm8gbG9uZ2VyIHVzZWQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBrZXJuZWwgbW9kdWxlIDxmaWxlbmFtZT5wb3N0aW5zdGFsbDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9zdHJtPC9maWxlbmFtZT4gc2NyaXB0cyBjYW4gbm93IGRvIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgICAgIHRhc2sgd2l0aG91dCB0aGUgdXNlIG9mIHRoaXMgc2NyaXB0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT53ZWI8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGJlY2F1c2UgaXQgaXMgbm90IG1haW50YWluZWQuICBTdXBlcnNlZGVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53ZWItd2Via2l0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnhmODZiaWdmb250cHJvdG88L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGJlY2F1c2UgdXBzdHJlYW0gaXQgaGFzIGJlZW4gZGlzYWJsZWQgYnkgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICBzaW5jZSAyMDA3LgorICAgICAgICAgICAgICAgICAgICBOb3RoaW5nIHVzZXMgPGZpbGVuYW1lPnhmODZiaWdmb250cHJvdG88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+eGY4NnJ1c2hwcm90bzwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgYmVjYXVzZSBpdHMgZGVwZW5kZW5jeSBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eHNlcnZlcjwvZmlsZW5hbWU+IHdhcyBzcHVyaW91cyBhbmQgaXQgd2FzCisgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQgaW4gMjAwNS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+enlwcGVyIC8gbGlienlwcCAvIHNhdC1zb2x2ZXI8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGFuZCBiZWVuIGZ1bmN0aW9uYWxseSByZXBsYWNlZCB3aXRoIFNtYXJ0CisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+cHl0aG9uLXNtYXJ0cG08L2ZpbGVuYW1lPikgd2hlbiBSUE0gcGFja2FnaW5nCisgICAgICAgICAgICAgICAgICAgIGlzIHVzZWQgYW5kIHBhY2thZ2UgbWFuYWdlbWVudCBpcyBlbmFibGVkIG9uIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdtb3ZpbmctdG8tdGhlLXlvY3RvLXByb2plY3QtMS41LXJlbGVhc2UnPgorICAgIDx0aXRsZT5Nb3ZpbmcgdG8gdGhlIFlvY3RvIFByb2plY3QgMS41IFJlbGVhc2U8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBtaWdyYXRpb24gaW5mb3JtYXRpb24gZm9yIG1vdmluZyB0byB0aGUKKyAgICAgICAgWW9jdG8gUHJvamVjdCAxLjUgUmVsZWFzZSBmcm9tIHRoZSBwcmlvciByZWxlYXNlLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS41LWhvc3QtZGVwZW5kZW5jeS1jaGFuZ2VzJz4KKyAgICAgICAgPHRpdGxlPkhvc3QgRGVwZW5kZW5jeSBDaGFuZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIG5vdyBoYXMgc29tZSBhZGRpdGlvbmFsIHJlcXVpcmVtZW50cworICAgICAgICAgICAgb24gdGhlIGhvc3Qgc3lzdGVtOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UHl0aG9uIDIuNy4zKzwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UYXIgMS4yNCs8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R2l0IDEuNy44KzwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5QYXRjaGVkIHZlcnNpb24gb2YgTWFrZSBpZiB5b3UgYXJlIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDMuODIuCisgICAgICAgICAgICAgICAgICAgIE1vc3QgZGlzdHJpYnV0aW9ucyB0aGF0IHByb3ZpZGUgTWFrZSAzLjgyIHVzZSB0aGUgcGF0Y2hlZAorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICBJZiB0aGUgTGludXggZGlzdHJpYnV0aW9uIHlvdSBhcmUgdXNpbmcgb24geW91ciBidWlsZCBob3N0CisgICAgICAgICAgICBkb2VzIG5vdCBwcm92aWRlIHBhY2thZ2VzIGZvciB0aGVzZSwgeW91IGNhbiBpbnN0YWxsIGFuZCB1c2UKKyAgICAgICAgICAgIHRoZSBCdWlsZHRvb2xzIHRhcmJhbGwsIHdoaWNoIHByb3ZpZGVzIGFuIFNESy1saWtlIGVudmlyb25tZW50CisgICAgICAgICAgICBjb250YWluaW5nIHRoZW0uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgcmVxdWlyZW1lbnQsIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZXF1aXJlZC1naXQtdGFyLWFuZC1weXRob24tdmVyc2lvbnMnPlJlcXVpcmVkIEdpdCwgdGFyLCBhbmQgUHl0aG9uIFZlcnNpb25zPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS1hdG9tLXBjLWJzcCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YXRvbS1wYzwvZmlsZW5hbWU+IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmF0b20tcGM8L2ZpbGVuYW1lPiBoYXJkd2FyZSByZWZlcmVuY2UgQlNQIGhhcyBiZWVuCisgICAgICAgICAgICByZXBsYWNlZCBieSBhIDxmaWxlbmFtZT5nZW5lcmljeDg2PC9maWxlbmFtZT4gQlNQLgorICAgICAgICAgICAgVGhpcyBCU1AgaXMgbm90IG5lY2Vzc2FyaWx5IGd1YXJhbnRlZWQgdG8gd29yayBvbiBhbGwgeDg2CisgICAgICAgICAgICBoYXJkd2FyZSwgYnV0IGl0IHdpbGwgcnVuIG9uIGEgd2lkZXIgcmFuZ2Ugb2Ygc3lzdGVtcyB0aGFuIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmF0b20tcGM8L2ZpbGVuYW1lPiBkaWQuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIGEgPGZpbGVuYW1lPmdlbmVyaWN4ODYtNjQ8L2ZpbGVuYW1lPiBCU1AgaGFzCisgICAgICAgICAgICAgICAgYmVlbiBhZGRlZCBmb3IgNjQtYml0IEF0b20gc3lzdGVtcy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS41LWJpdGJha2UnPgorICAgICAgICA8dGl0bGU+Qml0QmFrZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdGhhdCByZWxhdGUgdG8gQml0QmFrZToKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIG5vdyBzdXBwb3J0cyBhIDxmaWxlbmFtZT5fcmVtb3ZlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuCisgICAgICAgICAgICAgICAgICAgIFRoZSBhZGRpdGlvbiBvZiB0aGlzIG9wZXJhdG9yIG1lYW5zIHlvdSB3aWxsIGhhdmUgdG8KKyAgICAgICAgICAgICAgICAgICAgcmVuYW1lIGFueSBpdGVtcyBpbiByZWNpcGUgc3BhY2UgKGZ1bmN0aW9ucywgdmFyaWFibGVzKQorICAgICAgICAgICAgICAgICAgICB3aG9zZSBuYW1lcyBjdXJyZW50bHkgY29udGFpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+X3JlbW92ZV88L2ZpbGVuYW1lPiBvciBlbmQgd2l0aAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+X3JlbW92ZTwvZmlsZW5hbWU+IHRvIGF2b2lkIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSdzIGdsb2JhbCBtZXRob2QgcG9vbCBoYXMgYmVlbiByZW1vdmVkLgorICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyBub3QgcGFydGljdWxhcmx5IHVzZWZ1bCBhbmQgbGVkIHRvIGNsYXNoZXMKKyAgICAgICAgICAgICAgICAgICAgYmV0d2VlbiByZWNpcGVzIGNvbnRhaW5pbmcgZnVuY3Rpb25zIHRoYXQgaGFkIHRoZQorICAgICAgICAgICAgICAgICAgICBzYW1lIG5hbWUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgIm5vbmUiIHNlcnZlciBiYWNrZW5kIGhhcyBiZWVuIHJlbW92ZWQuCisgICAgICAgICAgICAgICAgICAgIFRoZSAicHJvY2VzcyIgc2VydmVyIGJhY2tlbmQgaGFzIGJlZW4gc2VydmluZyB3ZWxsIGFzIHRoZQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IGZvciBhIGxvbmcgdGltZSBub3cuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJpdGJha2UtcnVudGFzazwvZmlsZW5hbWU+IHNjcmlwdCBoYXMgYmVlbgorICAgICAgICAgICAgICAgICAgICByZW1vdmVkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUCc+PGZpbGVuYW1lPlA8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QRic+PGZpbGVuYW1lPlBGPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhcmUgbm8gbG9uZ2VyIGFkZGVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUk9WSURFUyc+PGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGJ5IGRlZmF1bHQgaW4gPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBUaGVzZSB2ZXJzaW9uLXNwZWNpZmljIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGl0ZW1zIHdlcmUgc2VsZG9tIHVzZWQuCisgICAgICAgICAgICAgICAgICAgIEF0dGVtcHRpbmcgdG8gdXNlIHRoZW0gY291bGQgcmVzdWx0IGluIHR3byB2ZXJzaW9ucyBiZWluZworICAgICAgICAgICAgICAgICAgICBidWlsdCBzaW11bHRhbmVvdXNseSByYXRoZXIgdGhhbiBqdXN0IG9uZSB2ZXJzaW9uIGR1ZSB0bworICAgICAgICAgICAgICAgICAgICB0aGUgd2F5IEJpdEJha2UgcmVzb2x2ZXMgZGVwZW5kZW5jaWVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS1xYS13YXJuaW5ncyc+CisgICAgICAgIDx0aXRsZT5RQSBXYXJuaW5nczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIHBhY2thZ2UgUUEgY2hlY2tzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIGN1c3RvbWl6ZWQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVSUk9SX1FBJz48ZmlsZW5hbWU+RVJST1JfUUE8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgb3IgPGxpbmsgbGlua2VuZD0ndmFyLVdBUk5fUUEnPjxmaWxlbmFtZT5XQVJOX1FBPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcyBpbiB5b3VyIGNvbmZpZ3VyYXRpb24sIGNoZWNrIHRoYXQgdGhleSBjb250YWluIGFsbCBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgaXNzdWVzIHRoYXQgeW91IHdpc2ggdG8gYmUgcmVwb3J0ZWQuCisgICAgICAgICAgICAgICAgICAgIFByZXZpb3VzIFlvY3RvIFByb2plY3QgdmVyc2lvbnMgY29udGFpbmVkIGEgYnVnIHRoYXQgbWVhbnQKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBhbnkgaXRlbSBub3QgbWVudGlvbmVkIGluIDxmaWxlbmFtZT5FUlJPUl9RQTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG9yIDxmaWxlbmFtZT5XQVJOX1FBPC9maWxlbmFtZT4gd291bGQgYmUgdHJlYXRlZCBhcyBhCisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcuCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgc2V2ZXJhbCBpbXBvcnRhbnQgaXRlbXMgd2VyZSBub3QgYWxyZWFkeSBpbgorICAgICAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCB2YWx1ZSBvZiA8ZmlsZW5hbWU+V0FSTl9RQTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBBbGwgb2YgdGhlIHBvc3NpYmxlIFFBIGNoZWNrcyBhcmUgbm93IGRvY3VtZW50ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pbnNhbmUnPjxmaWxlbmFtZT5pbnNhbmUuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFuIGFkZGl0aW9uYWwgUUEgY2hlY2sgaGFzIGJlZW4gYWRkZWQgdG8gY2hlY2sgaWYKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3Ivc2hhcmUvaW5mby9kaXI8L2ZpbGVuYW1lPiBpcyBiZWluZyBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgIFlvdXIgcmVjaXBlIHNob3VsZCBkZWxldGUgdGhpcyBmaWxlIHdpdGhpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaWYgIm1ha2UgaW5zdGFsbCIgaXMgaW5zdGFsbGluZyBpdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIHRoZSBidWlsZGhpc3RvcnkgY2xhc3MsIHRoZSBjaGVjayBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgdmVyc2lvbiBnb2luZyBiYWNrd2FyZHMgaXMgbm93IGNvbnRyb2xsZWQgdXNpbmcgYQorICAgICAgICAgICAgICAgICAgICBzdGFuZGFyZCBRQSBjaGVjay4KKyAgICAgICAgICAgICAgICAgICAgVGh1cywgaWYgeW91IGhhdmUgY3VzdG9taXplZCB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5FUlJPUl9RQTwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5XQVJOX1FBPC9maWxlbmFtZT4gdmFsdWVzIGFuZCBzdGlsbCB3aXNoIHRvIGhhdmUKKyAgICAgICAgICAgICAgICAgICAgdGhpcyBjaGVjayBwZXJmb3JtZWQsIHlvdSBzaG91bGQgYWRkCisgICAgICAgICAgICAgICAgICAgICJ2ZXJzaW9uLWdvaW5nLWJhY2t3YXJkcyIgdG8geW91ciB2YWx1ZSBmb3Igb25lIG9yIHRoZQorICAgICAgICAgICAgICAgICAgICBvdGhlciB2YXJpYWJsZXMgZGVwZW5kaW5nIG9uIGhvdyB5b3Ugd2lzaCBpdCB0byBiZSBoYW5kbGVkLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIGRvY3VtZW50ZWQgUUEgY2hlY2tzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaW5zYW5lJz48ZmlsZW5hbWU+aW5zYW5lLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS1kaXJlY3RvcnktbGF5b3V0LWNoYW5nZXMnPgorICAgICAgICA8dGl0bGU+RGlyZWN0b3J5IExheW91dCBDaGFuZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IGNoYW5nZXMgZXhpc3Q6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgT3V0cHV0IFNESyBpbnN0YWxsZXIgZmlsZXMgYXJlIG5vdyBuYW1lZCB0byBpbmNsdWRlIHRoZQorICAgICAgICAgICAgICAgICAgICBpbWFnZSBuYW1lIGFuZCB0dW5pbmcgYXJjaGl0ZWN0dXJlIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfTkFNRSc+PGZpbGVuYW1lPlNES19OQU1FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW1hZ2VzIGFuZCByZWxhdGVkIGZpbGVzIGFyZSBub3cgaW5zdGFsbGVkIGludG8gYSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBpcyBzcGVjaWZpYyB0byB0aGUgbWFjaGluZSwgaW5zdGVhZCBvZiBhIHBhcmVudAorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgY29udGFpbmluZyBvdXRwdXQgZmlsZXMgZm9yIG11bHRpcGxlIG1hY2hpbmVzLgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfSU1BR0UnPjxmaWxlbmFtZT5ERVBMT1lfRElSX0lNQUdFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGNvbnRpbnVlcyB0byBwb2ludCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VzIGZvciB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kIHNob3VsZCBiZSB1c2VkIGFueXdoZXJlIHRoZXJlIGlzIGEgbmVlZCB0byByZWZlciB0bworICAgICAgICAgICAgICAgICAgICB0aGlzIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gc2NyaXB0IG5vdyB1c2VzIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gZmluZCBpbWFnZXMgYW5kIGtlcm5lbCBiaW5hcmllcyBhbmQgd2lsbCB1c2UKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSB0byBkZXRlcm1pbmUgdGhlIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ERVBMT1lfRElSX0lNQUdFPC9maWxlbmFtZT4gdmFyaWFibGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsIGVudmlyb25tZW50LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGhpc3RvcnkgaXMgZW5hYmxlZCwgaXRzIG91dHB1dCBpcyBub3cgd3JpdHRlbgorICAgICAgICAgICAgICAgICAgICB1bmRlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICByYXRoZXIgdGhhbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBEb2luZyBzbyBtYWtlcyBpdCBlYXNpZXIgdG8gZGVsZXRlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiBhbmQgcHJlc2VydmUgdGhlIGJ1aWxkIGhpc3RvcnkuCisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgZGF0YSBmb3IgcHJvZHVjZWQgU0RLcyBpcyBub3cgc3BsaXQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX05BTUUnPjxmaWxlbmFtZT5JTUFHRV9OQU1FPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+cGtnZGF0YTwvZmlsZW5hbWU+IGRpcmVjdG9yeSBwcm9kdWNlZCBhcworICAgICAgICAgICAgICAgICAgICBwYXJ0IG9mIHRoZSBwYWNrYWdpbmcgcHJvY2VzcyBoYXMgYmVlbiBjb2xsYXBzZWQgaW50byBhCisgICAgICAgICAgICAgICAgICAgIHNpbmdsZSBtYWNoaW5lLXNwZWNpZmljIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgaXMgbG9jYXRlZCB1bmRlcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3lzcm9vdHM8L2ZpbGVuYW1lPiBhbmQgdXNlcyBhIG1hY2hpbmUtc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgbmFtZSAoaS5lLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL3N5c3Jvb3RzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT4vcGtnZGF0YTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS41LXNob3J0ZW5lZC1naXQtc3JjcmV2LXZhbHVlcyc+CisgICAgICAgIDx0aXRsZT5TaG9ydGVuZWQgR2l0IDxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPiBWYWx1ZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSB3aWxsIG5vdyBzaG9ydGVuIHJldmlzaW9ucyBmcm9tIEdpdCByZXBvc2l0b3JpZXMgZnJvbSB0aGUKKyAgICAgICAgICAgIG5vcm1hbCA0MCBjaGFyYWN0ZXJzIGRvd24gdG8gMTAgY2hhcmFjdGVycyB3aXRoaW4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNQVic+PGZpbGVuYW1lPlNSQ1BWPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBmb3IgaW1wcm92ZWQgdXNhYmlsaXR5IGluIHBhdGggYW5kIGZpbGUgbmFtZXMuCisgICAgICAgICAgICBUaGlzIGNoYW5nZSBzaG91bGQgYmUgc2FmZSB3aXRoaW4gY29udGV4dHMgd2hlcmUgdGhlc2UgcmV2aXNpb25zCisgICAgICAgICAgICBhcmUgdXNlZCBiZWNhdXNlIHRoZSBjaGFuY2VzIG9mIHNwYXRpYWxseSBjbG9zZSBjb2xsaXNpb25zCisgICAgICAgICAgICBpcyB2ZXJ5IGxvdy4KKyAgICAgICAgICAgIERpc3RhbnQgY29sbGlzaW9ucyBhcmUgbm90IGEgbWFqb3IgaXNzdWUgaW4gdGhlIHdheQorICAgICAgICAgICAgdGhlIHZhbHVlcyBhcmUgdXNlZC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS41LWltYWdlLWZlYXR1cmVzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSB0aGF0IHJlbGF0ZSB0bworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIG5vdyB2YWxpZGF0ZWQgdG8gZW5zdXJlIGludmFsaWQgZmVhdHVyZSBpdGVtcyBhcmUgbm90CisgICAgICAgICAgICAgICAgICAgIGFkZGVkLgorICAgICAgICAgICAgICAgICAgICBTb21lIHVzZXJzIG1pc3Rha2VubHkgYWRkIHBhY2thZ2UgbmFtZXMgdG8gdGhpcyB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9JTlNUQUxMJz48ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpbiBvcmRlciB0byBoYXZlIHRoZSBwYWNrYWdlIGFkZGVkIHRvIHRoZSBpbWFnZSwgd2hpY2ggZG9lcworICAgICAgICAgICAgICAgICAgICBub3Qgd29yay4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjaGFuZ2UgaXMgaW50ZW5kZWQgdG8gY2F0Y2ggdGhvc2Uga2luZHMgb2Ygc2l0dWF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgVmFsaWQgPGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4gYXJlIGRyYXduIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfR1JPVVAnPjxmaWxlbmFtZT5QQUNLQUdFX0dST1VQPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25zLAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ09NUExFTUVOVEFSWV9HTE9CJz48ZmlsZW5hbWU+Q09NUExFTUVOVEFSWV9HTE9CPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCBhIG5ldyAidmFsaWRpdGVtcyIgdmFyZmxhZyBvbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlICJ2YWxpZGl0ZW1zIiB2YXJmbGFnIGNoYW5nZSBhbGxvd3MgYWRkaXRpb25hbCBmZWF0dXJlcworICAgICAgICAgICAgICAgICAgICB0byBiZSBhZGRlZCBpZiB0aGV5IGFyZSBub3QgcHJvdmlkZWQgdXNpbmcgdGhlIHByZXZpb3VzCisgICAgICAgICAgICAgICAgICAgIHR3byBtZWNoYW5pc21zLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgImFwcHMtY29uc29sZS1jb3JlIgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiBpdGVtIGlzIG5vIGxvbmdlcgorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQuCisgICAgICAgICAgICAgICAgICAgIEFkZCAic3BsYXNoIiB0byA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiBpZiB5b3UKKyAgICAgICAgICAgICAgICAgICAgd2lzaCB0byBoYXZlIHRoZSBzcGxhc2ggc2NyZWVuIGVuYWJsZWQsIHNpbmNlIHRoaXMgaXMKKyAgICAgICAgICAgICAgICAgICAgYWxsIHRoYXQgYXBwcy1jb25zb2xlLWNvcmUgd2FzIGRvaW5nLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS1ydW4nPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPi9ydW48L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPi9ydW48L2ZpbGVuYW1lPiBkaXJlY3RvcnkgZnJvbSB0aGUgRmlsZXN5c3RlbQorICAgICAgICAgICAgSGllcmFyY2h5IFN0YW5kYXJkIDMuMCBoYXMgYmVlbiBpbnRyb2R1Y2VkLgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIHNvbWUgb2YgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGhpcyBjaGFuZ2UKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9jZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLWNvcmUvY29tbWl0Lz9pZD0wZTMyNjI4MGExNWIwZjJjNGVmMmVmNGVjNDQxZjYzZjU1Yjc1ODczJz5oZXJlPC91bGluaz4uCisgICAgICAgICAgICBUaGUgY2hhbmdlIGFsc28gbWVhbnMgdGhhdCByZWNpcGVzIHRoYXQgaW5zdGFsbCBmaWxlcyB0bworICAgICAgICAgICAgPGZpbGVuYW1lPi92YXIvcnVuPC9maWxlbmFtZT4gbXVzdCBiZSBjaGFuZ2VkLgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGEgZ3VpZGUgb24gaG93IHRvIG1ha2UgdGhlc2UgY2hhbmdlcworICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3Blcm1hbGluay5nbWFuZS5vcmcvZ21hbmUuY29tcC5oYW5kaGVsZHMub3BlbmVtYmVkZGVkLzU4NTMwJz5oZXJlPC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS1yZW1vdmFsLW9mLXBhY2thZ2UtbWFuYWdlci1kYXRhYmFzZS13aXRoaW4taW1hZ2UtcmVjaXBlcyc+CisgICAgICAgIDx0aXRsZT5SZW1vdmFsIG9mIFBhY2thZ2UgTWFuYWdlciBEYXRhYmFzZSBXaXRoaW4gSW1hZ2UgUmVjaXBlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgaW1hZ2UgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+IG5vIGxvbmdlciBhZGRzCisgICAgICAgICAgICA8ZmlsZW5hbWU+cmVtb3ZlX3BhY2thZ2luZ19kYXRhX2ZpbGVzPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCc+PGZpbGVuYW1lPlJPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgVGhpcyBhZGRpdGlvbiBpcyBub3cgaGFuZGxlZCBhdXRvbWF0aWNhbGx5IHdoZW4gInBhY2thZ2UtbWFuYWdlbWVudCIKKyAgICAgICAgICAgIGlzIG5vdCBpbgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICBJZiB5b3UgaGF2ZSBjdXN0b20gaW1hZ2UgcmVjaXBlcyB0aGF0IG1ha2UgdGhpcyBhZGRpdGlvbiwKKyAgICAgICAgICAgIHlvdSBzaG91bGQgcmVtb3ZlIHRoZSBsaW5lcywgYXMgdGhleSBhcmUgbm90IG5lZWRlZCBhbmQgbWlnaHQKKyAgICAgICAgICAgIGludGVyZmVyZSB3aXRoIGNvcnJlY3Qgb3BlcmF0aW9uIG9mIHBvc3RpbnN0YWxsIHNjcmlwdHMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS1pbWFnZXMtbm93LXJlYnVpbGQtb25seS1vbi1jaGFuZ2VzLWluc3RlYWQtb2YtZXZlcnktdGltZSc+CisgICAgICAgIDx0aXRsZT5JbWFnZXMgTm93IFJlYnVpbGQgT25seSBvbiBDaGFuZ2VzIEluc3RlYWQgb2YgRXZlcnkgVGltZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1yb290ZnMnPjxmaWxlbmFtZT5kb19yb290ZnM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGFuZCBvdGhlciByZWxhdGVkIGltYWdlCisgICAgICAgICAgICBjb25zdHJ1Y3Rpb24gdGFza3MgYXJlIG5vIGxvbmdlciBtYXJrZWQgYXMgIm5vc3RhbXAiLgorICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0aGV5IHdpbGwgb25seSBiZSByZS1leGVjdXRlZCB3aGVuIHRoZWlyIGlucHV0cyBoYXZlCisgICAgICAgICAgICBjaGFuZ2VkLgorICAgICAgICAgICAgUHJldmlvdXMgdmVyc2lvbnMgb2YgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYWx3YXlzIHJlYnVpbHQKKyAgICAgICAgICAgIHRoZSBpbWFnZSB3aGVuIHJlcXVlc3RlZCByYXRoZXIgd2hlbiBuZWNlc3NhcnkuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS10YXNrLXJlY2lwZXMnPgorICAgICAgICA8dGl0bGU+VGFzayBSZWNpcGVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgPGZpbGVuYW1lPnRhc2suYmJjbGFzczwvZmlsZW5hbWU+IGhhcworICAgICAgICAgICAgbm93IGJlZW4gZHJvcHBlZC4KKyAgICAgICAgICAgIEZvciByZWNpcGVzIHRoYXQgcHJldmlvdXNseSBpbmhlcml0ZWQgZnJvbSB0aGlzIGNsYXNzLCB5b3Ugc2hvdWxkCisgICAgICAgICAgICByZW5hbWUgdGhlbSBmcm9tIDxmaWxlbmFtZT50YXNrLSo8L2ZpbGVuYW1lPiB0bworICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC0qPC9maWxlbmFtZT4gYW5kIGluaGVyaXQgcGFja2FnZWdyb3VwCisgICAgICAgICAgICBpbnN0ZWFkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2Vncm91cCc+PGZpbGVuYW1lPnBhY2thZ2Vncm91cC5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS41LWJ1c3lib3gnPgorICAgICAgICA8dGl0bGU+QnVzeUJveDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCeSBkZWZhdWx0LCB3ZSBub3cgc3BsaXQgQnVzeUJveCBpbnRvIHR3byBiaW5hcmllczoKKyAgICAgICAgICAgIG9uZSB0aGF0IGlzIHN1aWQgcm9vdCBmb3IgdGhvc2UgY29tcG9uZW50cyB0aGF0IG5lZWQgaXQsIGFuZAorICAgICAgICAgICAgYW5vdGhlciBmb3IgdGhlIHJlc3Qgb2YgdGhlIGNvbXBvbmVudHMuCisgICAgICAgICAgICBTcGxpdHRpbmcgQnVzeUJveCBhbGxvd3MgZm9yIG9wdGltaXphdGlvbiB0aGF0IGVsaW1pbmF0ZXMgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+dGlueWxvZ2luPC9maWxlbmFtZT4gcmVjaXBlIGFzIHJlY29tbWVuZGVkIGJ5IHVwc3RyZWFtLgorICAgICAgICAgICAgWW91IGNhbiBkaXNhYmxlIHRoaXMgc3BsaXQgYnkgc2V0dGluZworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVU1lCT1hfU1BMSVRfU1VJRCc+PGZpbGVuYW1lPkJVU1lCT1hfU1BMSVRfU1VJRDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdG8gIjAiLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjUtYXV0b21hdGVkLWltYWdlLXRlc3RpbmcnPgorICAgICAgICA8dGl0bGU+QXV0b21hdGVkIEltYWdlIFRlc3Rpbmc8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBuZXcgYXV0b21hdGVkIGltYWdlIHRlc3RpbmcgZnJhbWV3b3JrIGhhcyBiZWVuIGFkZGVkCisgICAgICAgICAgICB0aHJvdWdoIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtdGVzdGltYWdlJz48ZmlsZW5hbWU+dGVzdGltYWdlKi5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgIFRoaXMgZnJhbWV3b3JrIHJlcGxhY2VzIHRoZSBvbGRlcgorICAgICAgICAgICAgPGZpbGVuYW1lPmltYWdldGVzdC1xZW11PC9maWxlbmFtZT4gZnJhbWV3b3JrLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgcGVyZm9ybWluZyBhdXRvbWF0ZWQgaW1hZ2UgdGVzdHMgaW4gdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGVyZm9ybWluZy1hdXRvbWF0ZWQtcnVudGltZS10ZXN0aW5nJz5QZXJmb3JtaW5nIEF1dG9tYXRlZCBSdW50aW1lIFRlc3Rpbmc8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS1idWlsZC1oaXN0b3J5Jz4KKyAgICAgICAgPHRpdGxlPkJ1aWxkIEhpc3Rvcnk8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9sbG93aW5nIGFyZSBjaGFuZ2VzIHRvIEJ1aWxkIEhpc3Rvcnk6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgIEluc3RhbGxlZCBwYWNrYWdlIHNpemVzOgorICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluc3RhbGxlZC1wYWNrYWdlLXNpemVzLnR4dDwvZmlsZW5hbWU+IGZvciBhbgorICAgICAgICAgICAgICAgICAgICAgaW1hZ2Ugbm93IHJlY29yZHMgdGhlIHNpemUgb2YgdGhlIGZpbGVzIGluc3RhbGxlZCBieSBlYWNoCisgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIGluc3RlYWQgb2YgdGhlIHNpemUgb2YgZWFjaCBjb21wcmVzc2VkIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgIGFyY2hpdmUgZmlsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZXBlbmRlbmN5IGdyYXBocyAoPGZpbGVuYW1lPmRlcGVuZHMqLmRvdDwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICBub3cgdXNlIHRoZSBhY3R1YWwgcGFja2FnZSBuYW1lcyBpbnN0ZWFkIG9mIHJlcGxhY2luZworICAgICAgICAgICAgICAgICAgICBkYXNoZXMsIGRvdHMgYW5kIHBsdXMgc2lnbnMgd2l0aCB1bmRlcnNjb3Jlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJ1aWxkaGlzdG9yeS1kaWZmPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idWlsZGhpc3RvcnktY29sbGVjdC1zcmNyZXZzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdXRpbGl0aWVzIGhhdmUgaW1wcm92ZWQgY29tbWFuZC1saW5lIGhhbmRsaW5nLgorICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT4tLWhlbHA8L2ZpbGVuYW1lPiBvcHRpb24gZm9yCisgICAgICAgICAgICAgICAgICAgIGVhY2ggdXRpbGl0eSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgbmV3IHN5bnRheC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEJ1aWxkIEhpc3RvcnksIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdtYWludGFpbmluZy1idWlsZC1vdXRwdXQtcXVhbGl0eSc+TWFpbnRhaW5pbmcgQnVpbGQgT3V0cHV0IFF1YWxpdHk8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS41LXVkZXYnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPnVkZXY8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIGNoYW5nZXMgdG8gPGZpbGVuYW1lPnVkZXY8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dWRldjwvZmlsZW5hbWU+IG5vIGxvbmdlciBicmluZ3MgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVkZXYtZXh0cmFjb25mPC9maWxlbmFtZT4gYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgICAgICB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBzaW5jZSB0aGlzIHdhcyBvcmlnaW5hbGx5IGludGVuZGVkIHRvIGJlIG9wdGlvbmFsLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0aGUgZXh0cmEgcnVsZXMsIHRoZW4gYWRkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51ZGV2LWV4dHJhY29uZjwvZmlsZW5hbWU+IHRvIHlvdXIgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVkZXY8L2ZpbGVuYW1lPiBubyBsb25nZXIgYnJpbmdzIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wY2l1dGlscy1pZHM8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dXNidXRpbHMtaWRzPC9maWxlbmFtZT4gdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgYXJlIG5vdCBuZWVkZWQgYnkgPGZpbGVuYW1lPnVkZXY8L2ZpbGVuYW1lPiBpdHNlbGYKKyAgICAgICAgICAgICAgICAgICAgYW5kIHJlbW92aW5nIHRoZW0gc2F2ZXMgYXJvdW5kIDM1MEtCLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjUtcmVtb3ZlZC1yZW5hbWVkLXJlY2lwZXMnPgorICAgICAgICA8dGl0bGU+UmVtb3ZlZCBhbmQgUmVuYW1lZCBSZWNpcGVzPC90aXRsZT4KKworICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG88L2ZpbGVuYW1lPiAzLjIga2VybmVsIGhhcyBiZWVuCisgICAgICAgICAgICAgICAgcmVtb3ZlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlidG9vbC1uYXRpdmVzZGs8L2ZpbGVuYW1lPiBoYXMgYmVlbiByZW5hbWVkIHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5hdGl2ZXNkay1saWJ0b29sPC9maWxlbmFtZT4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRpbnlsb2dpbjwvZmlsZW5hbWU+IGhhcyBiZWVuIHJlbW92ZWQuCisgICAgICAgICAgICAgICAgSXQgaGFzIGJlZW4gcmVwbGFjZWQgYnkgYSBzdWlkIHBvcnRpb24gb2YgQnVzeWJveC4KKyAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J21pZ3JhdGlvbi0xLjUtYnVzeWJveCc+QnVzeUJveDwvbGluaz4iIHNlY3Rpb24KKyAgICAgICAgICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZXh0ZXJuYWwtcHl0aG9uLXRhcmJhbGw8L2ZpbGVuYW1lPiBoYXMgYmVlbiByZW5hbWVkCisgICAgICAgICAgICAgICAgdG8gPGZpbGVuYW1lPmJ1aWxkdG9vbHMtdGFyYmFsbDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53ZWItd2Via2l0PC9maWxlbmFtZT4gaGFzIGJlZW4gcmVtb3ZlZC4KKyAgICAgICAgICAgICAgICBJdCBoYXMgYmVlbiBmdW5jdGlvbmFsbHkgcmVwbGFjZWQgYnkKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWlkb3JpPC9maWxlbmFtZT4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmltYWtlPC9maWxlbmFtZT4gaGFzIGJlZW4gcmVtb3ZlZC4KKyAgICAgICAgICAgICAgICBJdCBpcyBubyBsb25nZXIgbmVlZGVkIGJ5IGFueSBvdGhlciByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRyYW5zZmlnLW5hdGl2ZTwvZmlsZW5hbWU+IGhhcyBiZWVuIHJlbW92ZWQuCisgICAgICAgICAgICAgICAgSXQgaXMgbm8gbG9uZ2VyIG5lZWRlZCBieSBhbnkgb3RoZXIgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hbmp1dGEtcmVtb3RlLXJ1bjwvZmlsZW5hbWU+IGhhcyBiZWVuIHJlbW92ZWQuCisgICAgICAgICAgICAgICAgQW5qdXRhIElERSBpbnRlZ3JhdGlvbiBoYXMgbm90IGJlZW4gb2ZmaWNpYWxseSBzdXBwb3J0ZWQgZm9yCisgICAgICAgICAgICAgICAgc2V2ZXJhbCByZWxlYXNlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjUtb3RoZXItY2hhbmdlcyc+CisgICAgICAgIDx0aXRsZT5PdGhlciBDaGFuZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhIGxpc3Qgb2Ygc2hvcnQgZW50cmllcyBkZXNjcmliaW5nIG90aGVyIGNoYW5nZXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bi1wb3N0aW5zdHM8L2ZpbGVuYW1lPjogTWFrZSB0aGlzIGdlbmVyaWMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhc2UtZmlsZXM8L2ZpbGVuYW1lPjogUmVtb3ZlIHRoZSB1bm5lY2Vzc2FyeQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWVkaWEvPC9maWxlbmFtZT48cmVwbGFjZWFibGU+eHh4PC9yZXBsYWNlYWJsZT4gZGlyZWN0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFsc2Etc3RhdGU8L2ZpbGVuYW1lPjogUHJvdmlkZSBhbiBlbXB0eQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXNvdW5kLmNvbmY8L2ZpbGVuYW1lPiBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jbGFzc2VzL2ltYWdlPC9maWxlbmFtZT46IEVuc3VyZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkFEX1JFQ09NTUVOREFUSU9OUyc+PGZpbGVuYW1lPkJBRF9SRUNPTU1FTkRBVElPTlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydHMgcHJlLXJlbmFtZWQgcGFja2FnZSBuYW1lcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jbGFzc2VzL3Jvb3Rmc19ycG08L2ZpbGVuYW1lPjogSW1wbGVtZW50CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQURfUkVDT01NRU5EQVRJT05TJz48ZmlsZW5hbWU+QkFEX1JFQ09NTUVOREFUSU9OUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgUlBNLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN5c3RlbWQ8L2ZpbGVuYW1lPjogUmVtb3ZlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zeXN0ZW1kX3VuaXRkaXI8L2ZpbGVuYW1lPiBpZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3lzdGVtZDwvZmlsZW5hbWU+IGlzIG5vdCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zeXN0ZW1kPC9maWxlbmFtZT46IFJlbW92ZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW5pdC5kPC9maWxlbmFtZT4gZGlyIGlmCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zeXN0ZW1kPC9maWxlbmFtZT4gdW5pdCBmaWxlIGlzIHByZXNlbnQgYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zeXN2aW5pdDwvZmlsZW5hbWU+IGlzIG5vdCBhIGRpc3RybyBmZWF0dXJlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJwYW08L2ZpbGVuYW1lPjogRGVueSBhbGwgc2VydmljZXMgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+T1RIRVI8L2ZpbGVuYW1lPiBlbnRyaWVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbWFnZS5iYmNsYXNzPC9maWxlbmFtZT46IE1vdmUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnRpbWVfbWFwcGluZ19yZW5hbWU8L2ZpbGVuYW1lPiB0byBhdm9pZAorICAgICAgICAgICAgICAgICAgICBjb25mbGljdCB3aXRoIDxmaWxlbmFtZT5tdWx0aWxpYjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBTZWUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3Nob3dfYnVnLmNnaT9pZD00OTkzJz48ZmlsZW5hbWU+WU9DVE8gIzQ5OTM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGluIEJ1Z3ppbGxhIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC1kdGI8L2ZpbGVuYW1lPjogVXNlIGtlcm5lbCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgdG8gZ2VuZXJhdGUgdGhlIDxmaWxlbmFtZT5kdGI8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a2Vybi10b29sczwvZmlsZW5hbWU+OiBTd2l0Y2ggZnJvbSBndWlsdCB0bworICAgICAgICAgICAgICAgICAgICBuZXcgPGZpbGVuYW1lPmtnaXQtczJxPC9maWxlbmFtZT4gdG9vbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J21vdmluZy10by10aGUteW9jdG8tcHJvamVjdC0xLjYtcmVsZWFzZSc+CisgICAgPHRpdGxlPk1vdmluZyB0byB0aGUgWW9jdG8gUHJvamVjdCAxLjYgUmVsZWFzZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIG1pZ3JhdGlvbiBpbmZvcm1hdGlvbiBmb3IgbW92aW5nIHRvIHRoZQorICAgICAgICBZb2N0byBQcm9qZWN0IDEuNiBSZWxlYXNlIGZyb20gdGhlIHByaW9yIHJlbGVhc2UuCisgICAgPC9wYXJhPgorCisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi1hcmNoaXZlci1jbGFzcyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YXJjaGl2ZXI8L2ZpbGVuYW1lPiBDbGFzczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWFyY2hpdmVyJz48ZmlsZW5hbWU+YXJjaGl2ZXI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGNsYXNzIGhhcyBiZWVuIHJld3JpdHRlbiBhbmQgaXRzIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gc2ltcGxpZmllZC4KKyAgICAgICAgICAgIEZvciBtb3JlIGRldGFpbHMgb24gdGhlIHNvdXJjZSBhcmNoaXZlciwgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21haW50YWluaW5nLW9wZW4tc291cmNlLWxpY2Vuc2UtY29tcGxpYW5jZS1kdXJpbmcteW91ci1wcm9kdWN0cy1saWZlY3ljbGUnPk1haW50YWluaW5nIE9wZW4gU291cmNlIExpY2Vuc2UgQ29tcGxpYW5jZSBEdXJpbmcgWW91ciBQcm9kdWN0J3MgTGlmZWN5Y2xlPC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXBhY2thZ2luZy1jaGFuZ2VzJz4KKyAgICAgICAgPHRpdGxlPlBhY2thZ2luZyBDaGFuZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgcGFja2FnaW5nIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGU6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iaW51dGlsczwvZmlsZW5hbWU+IHJlY2lwZSBubyBsb25nZXIgcHJvZHVjZXMKKyAgICAgICAgICAgICAgICAgICAgYSA8ZmlsZW5hbWU+YmludXRpbHMtc3ltbGlua3M8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dXBkYXRlLWFsdGVybmF0aXZlczwvZmlsZW5hbWU+IGlzIG5vdyB1c2VkIHRvCisgICAgICAgICAgICAgICAgICAgIGhhbmRsZSB0aGUgcHJlZmVycmVkIDxmaWxlbmFtZT5iaW51dGlsczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgb24gdGhlIHRhcmdldCBpbnN0ZWFkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSB0YyAodHJhZmZpYyBjb250cm9sKSB1dGlsaXRpZXMgaGF2ZSBiZWVuIHNwbGl0IG91dCBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgbWFpbiA8ZmlsZW5hbWU+aXByb3V0ZTI8L2ZpbGVuYW1lPiBwYWNrYWdlIGFuZCBwdXQKKyAgICAgICAgICAgICAgICAgICAgaW50byB0aGUgPGZpbGVuYW1lPmlwcm91dGUyLXRjPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmd0ay1lbmdpbmVzPC9maWxlbmFtZT4gc2NoZW1hcyBoYXZlIGJlZW4KKyAgICAgICAgICAgICAgICAgICAgbW92ZWQgdG8gYSBkZWRpY2F0ZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmd0ay1lbmdpbmVzLXNjaGVtYXM8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YXJtdjdhPC9maWxlbmFtZT4gd2l0aCB0aHVtYiBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZSBzdWZmaXggaGFzIGNoYW5nZWQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzdWZmaXggZm9yIHRoZXNlIHBhY2thZ2VzIHdpdGggdGhlIHRodW1iCisgICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvbiBlbmFibGVkIGlzICJ0MiIgYXMgaXQgc2hvdWxkIGJlLgorICAgICAgICAgICAgICAgICAgICBVc2Ugb2YgdGhpcyBzdWZmaXggd2FzIG5vdCB0aGUgY2FzZSBpbiB0aGUgMS41IHJlbGVhc2UuCisgICAgICAgICAgICAgICAgICAgIEFyY2hpdGVjdHVyZSBuYW1lcyB3aWxsIGNoYW5nZSB3aXRoaW4gcGFja2FnZSBmZWVkcyBhcyBhCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LWJpdGJha2UnPgorICAgICAgICA8dGl0bGU+Qml0QmFrZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8KKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtbWF0Y2hpbmctYnJhbmNoLXJlcXVpcmVtZW50LWZvci1naXQtZmV0Y2hpbmcnPgorICAgICAgICAgICAgPHRpdGxlPk1hdGNoaW5nIEJyYW5jaCBSZXF1aXJlbWVudCBmb3IgR2l0IEZldGNoaW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiBmZXRjaGluZyBzb3VyY2UgZnJvbSBhIEdpdCByZXBvc2l0b3J5IHVzaW5nCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIEJpdEJha2Ugd2lsbCBub3cgdmFsaWRhdGUgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ1JFVic+PGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhbHVlIGFnYWluc3QgdGhlIGJyYW5jaC4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgdGhlIGJyYW5jaCB1c2luZyB0aGUgZm9sbG93aW5nIGZvcm06CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImdpdDovL3NlcnZlci5uYW1lL3JlcG9zaXRvcnk7YnJhbmNoPTxyZXBsYWNlYWJsZT5icmFuY2huYW1lPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIGJyYW5jaCwgQml0QmFrZSBsb29rcworICAgICAgICAgICAgICAgIGluIHRoZSBkZWZhdWx0ICJtYXN0ZXIiIGJyYW5jaC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IG5lZWQgdG8gYnlwYXNzIHRoaXMgY2hlY2sgKGUuZy4KKyAgICAgICAgICAgICAgICBpZiB5b3UgYXJlIGZldGNoaW5nIGEgcmV2aXNpb24gY29ycmVzcG9uZGluZyB0byBhIHRhZyB0aGF0CisgICAgICAgICAgICAgICAgaXMgbm90IG9uIGFueSBicmFuY2gpLCB5b3UgY2FuIGFkZCAiO25vYnJhbmNoPTEiIHRvCisgICAgICAgICAgICAgICAgdGhlIGVuZCBvZiB0aGUgVVJMIHdpdGhpbiA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtYml0YmFrZS1kZXBzJz4KKyAgICAgICAgICAgIDx0aXRsZT5QeXRob24gRGVmaW5pdGlvbiBzdWJzdGl0dXRpb25zPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQml0QmFrZSBoYWQgc29tZSBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgUHl0aG9uIGRlZmluaXRpb25zCisgICAgICAgICAgICAgICAgd2l0aGluIGl0cyA8ZmlsZW5hbWU+YmI8L2ZpbGVuYW1lPiBtb2R1bGUgcmVtb3ZlZC4KKyAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHVzZSB0aGVpciBzdWItbW9kdWxlIGNvdW50ZXJwYXJ0cyBpbnN0ZWFkOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YmIuTWFsZm9ybWVkVXJsPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgPGZpbGVuYW1lPmJiLmZldGNoLk1hbGZvcm1lZFVybDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YmIuZmV0Y2guZW5jb2RldXJsPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgPGZpbGVuYW1lPmJiLmZldGNoLmVuY29kZXVybDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YmIuZGVjb2RldXJsPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgPGZpbGVuYW1lPmJiLmZldGNoLmRlY29kZXVybDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5iYi5ta2RpcmhpZXI8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSA8ZmlsZW5hbWU+YmIudXRpbHMubWtkaXJoaWVyPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5iYi5tb3ZlZmlsZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIDxmaWxlbmFtZT5iYi51dGlscy5tb3ZlZmlsZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YmIuY29weWZpbGU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSA8ZmlsZW5hbWU+YmIudXRpbHMuY29weWZpbGU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJiLndoaWNoPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgPGZpbGVuYW1lPmJiLnV0aWxzLndoaWNoPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5iYi52ZXJjbXBfc3RyaW5nPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgPGZpbGVuYW1lPmJiLnV0aWxzLnZlcmNtcF9zdHJpbmc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJiLnZlcmNtcDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIDxmaWxlbmFtZT5iYi51dGlscy52ZXJjbXA8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtYml0YmFrZS1mZXRjaGVyJz4KKyAgICAgICAgICAgIDx0aXRsZT5TVksgRmV0Y2hlcjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBTVksgZmV0Y2hlciBoYXMgYmVlbiByZW1vdmVkIGZyb20gQml0QmFrZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LWJpdGJha2UtY29uc29sZS1vdXRwdXQnPgorICAgICAgICAgICAgPHRpdGxlPkNvbnNvbGUgT3V0cHV0IEVycm9yIFJlZGlyZWN0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIEJpdEJha2UgY29uc29sZSBVSSB3aWxsIG5vdyBvdXRwdXQgZXJyb3JzIHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN0ZGVycjwvZmlsZW5hbWU+IGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3Rkb3V0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBpZiB5b3UgYXJlIHBpcGluZyBvciByZWRpcmVjdGluZyB0aGUgb3V0cHV0IG9mCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiB0byBzb21ld2hlcmUgZWxzZSwgYW5kIHlvdSB3aXNoCisgICAgICAgICAgICAgICAgdG8gcmV0YWluIHRoZSBlcnJvcnMsIHlvdSB3aWxsIG5lZWQgdG8gYWRkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjI+JmFtcDsxPC9maWxlbmFtZT4gKG9yIHNvbWV0aGluZyBzaW1pbGFyKSB0byB0aGUKKyAgICAgICAgICAgICAgICBlbmQgb2YgeW91ciA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgbGluZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXRhc2stdGFza25hbWUtb3ZlcnJpZGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+dGFzay08L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+IE92ZXJyaWRlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50YXNrLTwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnRhc2tuYW1lPC9yZXBsYWNlYWJsZT4gb3ZlcnJpZGVzIGhhdmUgYmVlbgorICAgICAgICAgICAgICAgIGFkanVzdGVkIHNvIHRoYXQgdGFza3Mgd2hvc2UgbmFtZXMgY29udGFpbiB1bmRlcnNjb3JlcyBoYXZlIHRoZQorICAgICAgICAgICAgICAgIHVuZGVyc2NvcmVzIHJlcGxhY2VkIGJ5IGh5cGhlbnMgZm9yIHRoZSBvdmVycmlkZSBzbyB0aGF0IHRoZXkKKyAgICAgICAgICAgICAgICBub3cgZnVuY3Rpb24gcHJvcGVybHkuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSB0YXNrIG92ZXJyaWRlIGZvcgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wb3B1bGF0ZV9zZGsnPjxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zZGs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBpcyA8ZmlsZW5hbWU+dGFzay1wb3B1bGF0ZS1zZGs8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXZhcmlhYmxlLWNoYW5nZXMnPgorICAgICAgICA8dGl0bGU+Q2hhbmdlcyB0byBWYXJpYWJsZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgaGF2ZSBjaGFuZ2VkLgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHZhcmlhYmxlcywgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi12YXJpYWJsZXMtZ2xvcyc+VmFyaWFibGVzIEdsb3NzYXJ5PC9saW5rPiIgQ2hhcHRlci4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXZhcmlhYmxlLWNoYW5nZXMtVE1QRElSJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgY2FuIG5vIGxvbmdlciBiZSBvbiBhbiBORlMgbW91bnQuCisgICAgICAgICAgICAgICAgTkZTIGRvZXMgbm90IG9mZmVyIGZ1bGwgUE9TSVggbG9ja2luZyBhbmQgaW5vZGUgY29uc2lzdGVuY3kKKyAgICAgICAgICAgICAgICBhbmQgY2FuIGNhdXNlIHVuZXhwZWN0ZWQgaXNzdWVzIGlmIHVzZWQgdG8gc3RvcmUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBjaGVjayBmb3IgdGhpcyBvY2N1cnMgb24gc3RhcnR1cC4KKyAgICAgICAgICAgICAgICBJZiA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4gaXMgZGV0ZWN0ZWQgb24gYW4gTkZTIG1vdW50LAorICAgICAgICAgICAgICAgIGFuIGVycm9yIG9jY3Vycy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXZhcmlhYmxlLWNoYW5nZXMtUFJJTkMnPgorICAgICAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5QUklOQzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5QUklOQzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgdHJpZ2dlcnMgYSB3YXJuaW5nIGlmCisgICAgICAgICAgICAgICAgZGV0ZWN0ZWQgZHVyaW5nIGEgYnVpbGQuCisgICAgICAgICAgICAgICAgRm9yCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBpbmNyZW1lbnRzIG9uIGNoYW5nZXMsIHVzZSB0aGUgUFIgc2VydmljZSBpbnN0ZWFkLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBvdXQgbW9yZSBhYm91dCB0aGlzIHNlcnZpY2UgaW4gdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3dvcmtpbmctd2l0aC1hLXByLXNlcnZpY2UnPldvcmtpbmcgV2l0aCBhIFBSIFNlcnZpY2U8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXZhcmlhYmxlLWNoYW5nZXMtSU1BR0VfVFlQRVMnPgorICAgICAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5JTUFHRV9UWVBFUzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlICJzdW0uamZmczIiIG9wdGlvbiBmb3IKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9UWVBFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IHRoZSAiamZmczIuc3VtIiBvcHRpb24sIHdoaWNoIGZpdHMgdGhlCisgICAgICAgICAgICAgICAgcHJvY2Vzc2luZyBvcmRlci4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXZhcmlhYmxlLWNoYW5nZXMtQ09QWV9MSUNfTUFOSUZFU1QnPgorICAgICAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5DT1BZX0xJQ19NQU5JRkVTVDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNPUFlfTElDX01BTklGRVNUJz48ZmlsZW5hbWU+Q09QWV9MSUNfTUFOSUZFU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBtdXN0CisgICAgICAgICAgICAgICAgbm93IGJlIHNldCB0byAiMSIgcmF0aGVyIHRoYW4gYW55IHZhbHVlIGluIG9yZGVyIHRvIGVuYWJsZQorICAgICAgICAgICAgICAgIGl0LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtdmFyaWFibGUtY2hhbmdlcy1DT1BZX0xJQ19ESVJTJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+Q09QWV9MSUNfRElSUzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNPUFlfTElDX0RJUlMnPjxmaWxlbmFtZT5DT1BZX0xJQ19ESVJTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgbXVzdAorICAgICAgICAgICAgICAgIG5vdyBiZSBzZXQgdG8gIjEiIHJhdGhlciB0aGFuIGFueSB2YWx1ZSBpbiBvcmRlciB0byBlbmFibGUKKyAgICAgICAgICAgICAgICBpdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXZhcmlhYmxlLWNoYW5nZXMtUEFDS0FHRV9HUk9VUCc+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPlBBQ0tBR0VfR1JPVVA8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0dST1VQJz48ZmlsZW5hbWU+UEFDS0FHRV9HUk9VUDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGhhcyBiZWVuIHJlbmFtZWQgdG8KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRkVBVFVSRV9QQUNLQUdFUyc+PGZpbGVuYW1lPkZFQVRVUkVfUEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB0byBtb3JlIGFjY3VyYXRlbHkgcmVmbGVjdCBpdHMgcHVycG9zZS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHN0aWxsIHVzZSA8ZmlsZW5hbWU+UEFDS0FHRV9HUk9VUDwvZmlsZW5hbWU+IGJ1dAorICAgICAgICAgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHByb2R1Y2VzIGEgd2FybmluZyBtZXNzYWdlIHdoZW4KKyAgICAgICAgICAgICAgICBpdCBlbmNvdW50ZXJzIHRoZSB2YXJpYWJsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXZhcmlhYmxlLWNoYW5nZXMtdmFyaWFibGUtZW50cnktYmVoYXZpb3InPgorICAgICAgICAgICAgPHRpdGxlPlByZXByb2Nlc3MgYW5kIFBvc3QgUHJvY2VzcyBDb21tYW5kIFZhcmlhYmxlIEJlaGF2aW9yPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgbm93IGV4cGVjdCBhIHNlbWljb2xvbiBzZXBhcmF0ZWQKKyAgICAgICAgICAgICAgICBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIGFuZCBub3QgYXJiaXRyYXJ5IHNoZWxsIGNvbW1hbmRzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJPT1RGU19QUkVQUk9DRVNTX0NPTU1BTkQnPlJPT1RGU19QUkVQUk9DRVNTX0NPTU1BTkQ8L2xpbms+CisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCc+Uk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQ8L2xpbms+CisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfUE9TVFBST0NFU1NfQ09NTUFORCc+U0RLX1BPU1RQUk9DRVNTX0NPTU1BTkQ8L2xpbms+CisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QT1BVTEFURV9TREtfUE9TVF9UQVJHRVRfQ09NTUFORCc+UE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkQ8L2xpbms+CisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QT1BVTEFURV9TREtfUE9TVF9IT1NUX0NPTU1BTkQnPlBPUFVMQVRFX1NES19QT1NUX0hPU1RfQ09NTUFORDwvbGluaz4KKyAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkQnPklNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkQ8L2xpbms+CisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQnPklNQUdFX1BSRVBST0NFU1NfQ09NTUFORDwvbGluaz4KKyAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJPT1RGU19QT1NUVU5JTlNUQUxMX0NPTU1BTkQnPlJPT1RGU19QT1NUVU5JTlNUQUxMX0NPTU1BTkQ8L2xpbms+CisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ST09URlNfUE9TVElOU1RBTExfQ09NTUFORCc+Uk9PVEZTX1BPU1RJTlNUQUxMX0NPTU1BTkQ8L2xpbms+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZvciBtaWdyYXRpb24gcHVycG9zZXMsIHlvdSBjYW4gc2ltcGx5IHdyYXAgc2hlbGwgY29tbWFuZHMgaW4KKyAgICAgICAgICAgICAgICBhIHNoZWxsIGZ1bmN0aW9uIGFuZCB0aGVuIGNhbGwgdGhlIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG15X3Bvc3Rwcm9jZXNzX2Z1bmN0aW9uKCkgeworICAgICAgICBlY2hvICJoZWxsbyIgPiAke0lNQUdFX1JPT1RGU30vaGVsbG8udHh0CisgICAgIH0KKyAgICAgUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gIm15X3Bvc3Rwcm9jZXNzX2Z1bmN0aW9uOyAiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtZGlyZWN0b3J5LWxheW91dC1jaGFuZ2VzJz4KKyAgICAgICAgPHRpdGxlPkRpcmVjdG9yeSBMYXlvdXQgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1ldGEtaG9iPC9maWxlbmFtZT4gbGF5ZXIgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tCisgICAgICAgICAgICB0aGUgdG9wLWxldmVsIG9mIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgbGF5ZXIgYXJlIG5vIGxvbmdlciBuZWVkZWQgYnkgdGhlIEhvYgorICAgICAgICAgICAgdXNlciBpbnRlcmZhY2UgZm9yIGJ1aWxkaW5nIGltYWdlcyBhbmQgdG9vbGNoYWlucy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXBhY2thZ2UtdGVzdC1wdGVzdCc+CisgICAgICAgIDx0aXRsZT5QYWNrYWdlIFRlc3QgKHB0ZXN0KTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBQYWNrYWdlIFRlc3RzIChwdGVzdCkgYXJlIGJ1aWx0IGJ1dCBub3QgaW5zdGFsbGVkIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdXNpbmcgUGFja2FnZSBUZXN0cywgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3Rlc3RpbmctcGFja2FnZXMtd2l0aC1wdGVzdCc+U2V0dGluZyB1cCBhbmQgcnVubmluZyBwYWNrYWdlIHRlc3QgKHB0ZXN0KTwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIDxmaWxlbmFtZT5wdGVzdDwvZmlsZW5hbWU+IGNsYXNzLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcHRlc3QnPjxmaWxlbmFtZT5wdGVzdC5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LWJ1aWxkLWNoYW5nZXMnPgorICAgICAgICA8dGl0bGU+QnVpbGQgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTZXBhcmF0ZSBidWlsZCBhbmQgc291cmNlIGRpcmVjdG9yaWVzIGhhdmUgYmVlbiBlbmFibGVkCisgICAgICAgICAgICBieSBkZWZhdWx0IGZvciBzZWxlY3RlZCByZWNpcGVzIHdoZXJlIGl0IGlzIGtub3duIHRvIHdvcmsKKyAgICAgICAgICAgIChhIHdoaXRlbGlzdCkgYW5kIGZvciBhbGwgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1jbWFrZSc+PGZpbGVuYW1lPmNtYWtlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgIEluIGZ1dHVyZSByZWxlYXNlcyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWF1dG90b29scyc+PGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3Mgd2lsbCBlbmFibGUgYSBzZXBhcmF0ZSBidWlsZCBkaXJlY3RvcnkgYnkgZGVmYXVsdCBhcworICAgICAgICAgICAgd2VsbC4KKyAgICAgICAgICAgIFJlY2lwZXMgYnVpbGRpbmcgQXV0b3Rvb2xzLWJhc2VkCisgICAgICAgICAgICBzb2Z0d2FyZSB0aGF0IGZhaWxzIHRvIGJ1aWxkIHdpdGggYSBzZXBhcmF0ZSBidWlsZCBkaXJlY3RvcnkKKyAgICAgICAgICAgIHNob3VsZCBiZSBjaGFuZ2VkIHRvIGluaGVyaXQgZnJvbSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWF1dG90b29scy1icm9rZW5zZXAnPjxmaWxlbmFtZT5hdXRvdG9vbHMtYnJva2Vuc2VwPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBjbGFzcyBpbnN0ZWFkIG9mIHRoZSA8ZmlsZW5hbWU+YXV0b3Rvb2xzPC9maWxlbmFtZT4gY2xhc3MuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi1idWlsZGluZy1xZW11LW5hdGl2ZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+cWVtdS1uYXRpdmU8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdS1uYXRpdmU8L2ZpbGVuYW1lPiBub3cgYnVpbGRzIHdpdGhvdXQKKyAgICAgICAgICAgIFNETC1iYXNlZCBncmFwaGljYWwgb3V0cHV0IHN1cHBvcnQgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBsaW5lcyBhcmUgbmVlZGVkIGluIHlvdXIKKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gdG8gZW5hYmxlIGl0OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFQ09ORklHX3BuLXFlbXUtbmF0aXZlID0gInNkbCIKKyAgICAgQVNTVU1FX1BST1ZJREVEICs9ICJsaWJzZGwtbmF0aXZlIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbnRhaW5zIHRoZXNlIHN0YXRlbWVudHMuCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBpZiB5b3UgYXJlIGJ1aWxkaW5nIGEgaGVhZGxlc3Mgc3lzdGVtIGFuZCB1c2luZworICAgICAgICAgICAgICAgIGEgZGVmYXVsdCA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUsIHlvdSB3aWxsIG5lZWQKKyAgICAgICAgICAgICAgICBjb21tZW50IHRoZXNlIHR3byBsaW5lcyBvdXQuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi1jb3JlLWltYWdlLWJhc2ljJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5jb3JlLWltYWdlLWJhc2ljPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtYmFzaWM8L2ZpbGVuYW1lPiBoYXMgYmVlbiByZW5hbWVkIHRvCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1mdWxsLWNtZGxpbmU8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW4gYWRkaXRpb24gdG8gPGZpbGVuYW1lPmNvcmUtaW1hZ2UtYmFzaWM8L2ZpbGVuYW1lPiBiZWluZyByZW5hbWVkLAorICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC1jb3JlLWJhc2ljPC9maWxlbmFtZT4gaGFzIGJlZW4gcmVuYW1lZCB0bworICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZTwvZmlsZW5hbWU+IHRvIG1hdGNoLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtbGljZW5zaW5nJz4KKyAgICAgICAgPHRpdGxlPkxpY2Vuc2luZzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgdG9wLWxldmVsIDxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT4gZmlsZSBoYXMgYmVlbiBjaGFuZ2VkCisgICAgICAgICAgICB0byBiZXR0ZXIgZGVzY3JpYmUgdGhlIGxpY2Vuc2Ugb2YgdGhlIHZhcmlvdXMgY29tcG9uZW50cyBvZgorICAgICAgICAgICAgT0UtQ29yZS4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBsaWNlbnNpbmcgaXRzZWxmIHJlbWFpbnMgdW5jaGFuZ2VkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBOb3JtYWxseSwgdGhpcyBjaGFuZ2Ugd291bGQgbm90IGNhdXNlIGFueSBzaWRlLWVmZmVjdHMuCisgICAgICAgICAgICBIb3dldmVyLCBzb21lIHJlY2lwZXMgcG9pbnQgdG8gdGhpcyBmaWxlIHdpdGhpbgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ19GSUxFU19DSEtTVU0nPjxmaWxlbmFtZT5MSUNfRklMRVNfQ0hLU1VNPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAoYXMgPGZpbGVuYW1lPiR7Q09SRUJBU0V9L0xJQ0VOU0U8L2ZpbGVuYW1lPikgYW5kIHRodXMgdGhlCisgICAgICAgICAgICBhY2NvbXBhbnlpbmcgY2hlY2tzdW0gbXVzdCBiZSBjaGFuZ2VkIGZyb20KKyAgICAgICAgICAgIDNmNDBkNzk5NDM5NzEwOTI4NWVjN2I4MWZkZWIzYjU4IHRvCisgICAgICAgICAgICA0ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MC4KKyAgICAgICAgICAgIEEgYmV0dGVyIGFsdGVybmF0aXZlIGlzIHRvIGhhdmUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5MSUNfRklMRVNfQ0hLU1VNPC9maWxlbmFtZT4gcG9pbnQgdG8gYSBmaWxlCisgICAgICAgICAgICBkZXNjcmliaW5nIHRoZSBsaWNlbnNlIHRoYXQgaXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgc291cmNlCisgICAgICAgICAgICB0aGF0IHRoZSByZWNpcGUgaXMgYnVpbGRpbmcsIGlmIHBvc3NpYmxlLCByYXRoZXIgdGhhbiBwb2ludGluZworICAgICAgICAgICAgdG8gPGZpbGVuYW1lPiR7Q09SRUJBU0V9L0xJQ0VOU0U8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LWNmbGFncy1vcHRpb25zJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5DRkxBR1M8L2ZpbGVuYW1lPiBPcHRpb25zPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSAiLWZwZXJtaXNzaXZlIiBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBkZWZhdWx0CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ0ZMQUdTJz48ZmlsZW5hbWU+Q0ZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YWx1ZS4KKyAgICAgICAgICAgIFlvdSBuZWVkIHRvIHRha2UgYWN0aW9uIG9uIGluZGl2aWR1YWwgcmVjaXBlcyB0aGF0IGZhaWwgd2hlbgorICAgICAgICAgICAgYnVpbGRpbmcgd2l0aCB0aGlzIG9wdGlvbi4KKyAgICAgICAgICAgIFlvdSBuZWVkIHRvIGVpdGhlciBwYXRjaCB0aGUgcmVjaXBlcyB0byBmaXggdGhlIGlzc3VlcyByZXBvcnRlZCBieQorICAgICAgICAgICAgdGhlIGNvbXBpbGVyLCBvciB5b3UgbmVlZCB0byBhZGQgIi1mcGVybWlzc2l2ZSIgdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT5DRkxBR1M8L2ZpbGVuYW1lPiBpbiB0aGUgcmVjaXBlcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LWN1c3RvbS1pbWFnZXMnPgorICAgICAgICA8dGl0bGU+Q3VzdG9tIEltYWdlIE91dHB1dCBUeXBlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDdXN0b20gaW1hZ2Ugb3V0cHV0IHR5cGVzLCBhcyBzZWxlY3RlZCB1c2luZworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgbXVzdCBkZWNsYXJlIHRoZWlyIGRlcGVuZGVuY2llcyBvbiBvdGhlciBpbWFnZSB0eXBlcyAoaWYgYW55KSB1c2luZworICAgICAgICAgICAgYSBuZXcKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9UWVBFREVQJz48ZmlsZW5hbWU+SU1BR0VfVFlQRURFUDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi1kby1wYWNrYWdlLXdyaXRlLXRhc2snPgorICAgICAgICA8dGl0bGU+VGFza3M8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlPC9maWxlbmFtZT4gdGFzayBoYXMgYmVlbiByZW1vdmVkLgorICAgICAgICAgICAgVGhlIHRhc2sgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXVwZGF0ZS1hbHRlcm5hdGl2ZXMtcHJvdmlkZXInPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPnVwZGF0ZS1hbHRlcm5hdGl2ZTwvZmlsZW5hbWU+IFByb3ZpZGVyPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBkZWZhdWx0IDxmaWxlbmFtZT51cGRhdGUtYWx0ZXJuYXRpdmVzPC9maWxlbmFtZT4gcHJvdmlkZXIgaGFzCisgICAgICAgICAgICBiZWVuIGNoYW5nZWQgZnJvbSA8ZmlsZW5hbWU+b3BrZzwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICA8ZmlsZW5hbWU+b3BrZy11dGlsczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhpcyBjaGFuZ2UgcmVzb2x2ZXMgc29tZSB0cm91Ymxlc29tZSBjaXJjdWxhciBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICBUaGUgcnVudGltZSBwYWNrYWdlIGhhcyBhbHNvIGJlZW4gcmVuYW1lZCBmcm9tCisgICAgICAgICAgICA8ZmlsZW5hbWU+dXBkYXRlLWFsdGVybmF0aXZlcy1jd29ydGg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgdG8gPGZpbGVuYW1lPnVwZGF0ZS1hbHRlcm5hdGl2ZXMtb3BrZzwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtdmlydGNsYXNzLW92ZXJyaWRlcyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+dmlydGNsYXNzPC9maWxlbmFtZT4gT3ZlcnJpZGVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+dmlydGNsYXNzPC9maWxlbmFtZT4gb3ZlcnJpZGVzIGFyZSBub3cgZGVwcmVjYXRlZC4KKyAgICAgICAgICAgIFVzZSB0aGUgZXF1aXZhbGVudCBjbGFzcyBvdmVycmlkZXMgaW5zdGVhZCAoZS5nLgorICAgICAgICAgICAgPGZpbGVuYW1lPnZpcnRjbGFzcy1uYXRpdmU8L2ZpbGVuYW1lPiBiZWNvbWVzCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y2xhc3MtbmF0aXZlPC9maWxlbmFtZT4uKQorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtcmVtb3ZlZC1yZW5hbWVkLXJlY2lwZXMnPgorICAgICAgICA8dGl0bGU+UmVtb3ZlZCBhbmQgUmVuYW1lZCBSZWNpcGVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgcmVjaXBlcyBoYXZlIGJlZW4gcmVtb3ZlZDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtdG9vbHNldC1uYXRpdmU8L2ZpbGVuYW1lPiAtCisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVjaXBlIGlzIGxhcmdlbHkgdW51c2VkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuODwvZmlsZW5hbWU+IC0KKyAgICAgICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgdGhlIExpbnV4IHlvY3RvIDMuOCBrZXJuZWwgaGFzIGJlZW4gZHJvcHBlZC4KKyAgICAgICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgdGhlIDMuMTAgYW5kIDMuMTQga2VybmVscyBoYXZlIGJlZW4gYWRkZWQKKyAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTA8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTQ8L2ZpbGVuYW1lPiByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPm9jZi1saW51eDwvZmlsZW5hbWU+IC0KKyAgICAgICAgICAgICAgICAgICAgVGhpcyByZWNpcGUgaGFzIGJlZW4gZnVuY3Rpb25hbGx5IHJlcGxhY2VkIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jcnlwdG9kZXYtbGludXg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5nZW5leHQyZnM8L2ZpbGVuYW1lPiAtCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5nZW5leHQyZnM8L2ZpbGVuYW1lPiBpcyBubyBsb25nZXIgdXNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIGFuZCBpcyB1bm1haW50YWluZWQgdXBzdHJlYW0uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+anM8L2ZpbGVuYW1lPiAtCisgICAgICAgICAgICAgICAgICAgIFRoaXMgcHJvdmlkZWQgYW4gYW5jaWVudCB2ZXJzaW9uIG9mIE1vemlsbGEncyBqYXZhc2NyaXB0CisgICAgICAgICAgICAgICAgICAgIGVuZ2luZSB0aGF0IGlzIG5vIGxvbmdlciBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+emF1cnVzZDwvZmlsZW5hbWU+IC0KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSBoYXMgYmVlbiBtb3ZlZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaGFuZGhlbGQ8L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5lZ2xpYmMgMi4xNzwvZmlsZW5hbWU+IC0KKyAgICAgICAgICAgICAgICAgICAgUmVwbGFjZWQgYnkgdGhlIDxmaWxlbmFtZT5lZ2xpYmMgMi4xOTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5nY2MgNC43LjI8L2ZpbGVuYW1lPiAtCisgICAgICAgICAgICAgICAgICAgIFJlcGxhY2VkIGJ5IHRoZSBub3cgc3RhYmxlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5nY2MgNC44LjI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5leHRlcm5hbC1zb3VyY2VyeS10b29sY2hhaW48L2ZpbGVuYW1lPiAtCisgICAgICAgICAgICAgICAgICAgIHRoaXMgcmVjaXBlIGlzIG5vdyBtYWludGFpbmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1zb3VyY2VyeTwvZmlsZW5hbWU+IGxheWVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmxpbnV4LWxpYmMtaGVhZGVycy15b2N0byAzLjQrZ2l0PC9maWxlbmFtZT4gLQorICAgICAgICAgICAgICAgICAgICBOb3cgdXNpbmcgdmVyc2lvbiAzLjEwIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgtbGliYy1oZWFkZXJzPC9maWxlbmFtZT4gYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5tZXRhLXRvb2xjaGFpbi1nbWFlPC9maWxlbmFtZT4gLQorICAgICAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSBpcyBvYnNvbGV0ZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtY29yZS1zZGstZ21hZTwvZmlsZW5hbWU+IC0KKyAgICAgICAgICAgICAgICAgICAgVGhpcyByZWNpcGUgaXMgb2Jzb2xldGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1nbWFlLXNkay10YXJnZXQ8L2ZpbGVuYW1lPiAtCisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVjaXBlIGlzIG9ic29sZXRlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtcmVtb3ZlZC1jbGFzc2VzJz4KKyAgICAgICAgPHRpdGxlPlJlbW92ZWQgQ2xhc3NlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNsYXNzZXMgaGF2ZSBiZWNvbWUgb2Jzb2xldGUgYW5kIGhhdmUgYmVlbiByZW1vdmVkOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPm1vZHVsZV9zdHJpcDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+cGtnX21ldGFpbmZvPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5wa2dfZGlzdHJpYnV0ZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+aW1hZ2UtZW1wdHk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtcmVmZXJlbmNlLWJzcHMnPgorICAgICAgICA8dGl0bGU+UmVmZXJlbmNlIEJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUHMpPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgcmVmZXJlbmNlIEJTUHMgY2hhbmdlcyBvY2N1cnJlZDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBCZWFnbGVCb2FyZAorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmJlYWdsZWJvYXJkPC9maWxlbmFtZT4pIEFSTSByZWZlcmVuY2UgaGFyZHdhcmUKKyAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4gcmVwbGFjZWQgYnkgdGhlIEJlYWdsZUJvbmUKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5iZWFnbGVib25lPC9maWxlbmFtZT4pIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIFJvdXRlclN0YXRpb24gUHJvCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+cm91dGVyc3RhdGlvbnBybzwvZmlsZW5hbWU+KSBNSVBTIHJlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZSBoYXMgYmVlbiByZXBsYWNlZCBieSB0aGUgRWRnZVJvdXRlciBMaXRlCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+ZWRnZXJvdXRlcjwvZmlsZW5hbWU+KSBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIFRoZSBwcmV2aW91cyByZWZlcmVuY2UgQlNQcyBmb3IgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmVhZ2xlYm9hcmQ8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5yb3V0ZXJzdGF0aW9ucHJvPC9maWxlbmFtZT4gbWFjaGluZXMgYXJlIHN0aWxsIGF2YWlsYWJsZQorICAgICAgICAgICAgaW4gYSBuZXcgPGZpbGVuYW1lPm1ldGEteW9jdG8tYnNwLW9sZDwvZmlsZW5hbWU+IGxheWVyIGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7Jz5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4KKyAgICAgICAgICAgIGF0CisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9tZXRhLXlvY3RvLWJzcC1vbGQvJz5odHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9tZXRhLXlvY3RvLWJzcC1vbGQvPC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdtb3ZpbmctdG8tdGhlLXlvY3RvLXByb2plY3QtMS43LXJlbGVhc2UnPgorICAgIDx0aXRsZT5Nb3ZpbmcgdG8gdGhlIFlvY3RvIFByb2plY3QgMS43IFJlbGVhc2U8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBtaWdyYXRpb24gaW5mb3JtYXRpb24gZm9yIG1vdmluZyB0byB0aGUKKyAgICAgICAgWW9jdG8gUHJvamVjdCAxLjcgUmVsZWFzZSBmcm9tIHRoZSBwcmlvciByZWxlYXNlLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS43LWNoYW5nZXMtdG8tc2V0dGluZy1xZW11LXBhY2thZ2Vjb25maWctb3B0aW9ucyc+CisgICAgICAgIDx0aXRsZT5DaGFuZ2VzIHRvIFNldHRpbmcgUUVNVSA8ZmlsZW5hbWU+UEFDS0FHRUNPTkZJRzwvZmlsZW5hbWU+IE9wdGlvbnMgaW4gPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgUUVNVSByZWNpcGUgbm93IHVzZXMgYSBudW1iZXIgb2YKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFQ09ORklHJz48ZmlsZW5hbWU+UEFDS0FHRUNPTkZJRzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgb3B0aW9ucyB0byBlbmFibGUgdmFyaW91cyBvcHRpb25hbCBmZWF0dXJlcy4KKyAgICAgICAgICAgIFRoZSBtZXRob2QgdXNlZCB0byBzZXQgZGVmYXVsdHMgZm9yIHRoZXNlIG9wdGlvbnMgbWVhbnMgdGhhdAorICAgICAgICAgICAgZXhpc3RpbmcKKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZXMgd2lsbCBuZWVkIHRvIGJlIGJlCisgICAgICAgICAgICBtb2RpZmllZCB0byBhcHBlbmQgdG8gPGZpbGVuYW1lPlBBQ0tBR0VDT05GSUc8L2ZpbGVuYW1lPiBmb3IKKyAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11LW5hdGl2ZTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPm5hdGl2ZXNkay1xZW11PC9maWxlbmFtZT4gaW5zdGVhZCBvZiBzZXR0aW5nIGl0LgorICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHRvIGVuYWJsZSBncmFwaGljYWwgb3V0cHV0IGZvciBRRU1VLCB5b3Ugc2hvdWxkCisgICAgICAgICAgICBub3cgaGF2ZSB0aGVzZSBsaW5lcyBpbiA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFQ09ORklHX2FwcGVuZF9wbi1xZW11LW5hdGl2ZSA9ICIgc2RsIgorICAgICBQQUNLQUdFQ09ORklHX2FwcGVuZF9wbi1uYXRpdmVzZGstcWVtdSA9ICIgc2RsIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjctbWluaW11bS1naXQtdmVyc2lvbic+CisgICAgICAgIDx0aXRsZT5NaW5pbXVtIEdpdCB2ZXJzaW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBtaW5pbXVtCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNnaXQnPkdpdDwvdWxpbms+IHZlcnNpb24gcmVxdWlyZWQKKyAgICAgICAgICAgIG9uIHRoZSBidWlsZCBob3N0IGlzIG5vdyAxLjcuOCBiZWNhdXNlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPi0tbGlzdDwvZmlsZW5hbWU+IG9wdGlvbiBpcyBub3cgcmVxdWlyZWQgYnkKKyAgICAgICAgICAgIEJpdEJha2UncyBHaXQgZmV0Y2hlci4KKyAgICAgICAgICAgIEFzIGFsd2F5cywgaWYgeW91ciBob3N0IGRpc3RyaWJ1dGlvbiBkb2VzIG5vdCBwcm92aWRlIGEgdmVyc2lvbiBvZgorICAgICAgICAgICAgR2l0IHRoYXQgbWVldHMgdGhpcyByZXF1aXJlbWVudCwgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGR0b29scy10YXJiYWxsPC9maWxlbmFtZT4gdGhhdCBkb2VzLgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlcXVpcmVkLWdpdC10YXItYW5kLXB5dGhvbi12ZXJzaW9ucyc+UmVxdWlyZWQgR2l0LCB0YXIsIGFuZCBQeXRob24gVmVyc2lvbnM8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS43LWF1dG90b29scy1jbGFzcy1jaGFuZ2VzJz4KKyAgICAgICAgPHRpdGxlPkF1dG90b29scyBDbGFzcyBDaGFuZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWF1dG90b29scyc+PGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3MgY2hhbmdlcyBvY2N1cnJlZDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQSBzZXBhcmF0ZSBidWlsZCBkaXJlY3RvcnkgaXMgbm93IHVzZWQgYnkgZGVmYXVsdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+IGNsYXNzIGhhcyBiZWVuIGNoYW5nZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gdXNlIGEgZGlyZWN0b3J5IGZvciBidWlsZGluZworICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLUInPjxmaWxlbmFtZT5CPC9maWxlbmFtZT48L2xpbms+KSwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgc2VwYXJhdGUgZnJvbSB0aGUgc291cmNlIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBjb21tb25seSByZWZlcnJlZCB0byBhcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QiAhPSBTPC9maWxlbmFtZT4sIG9yIGFuIG91dC1vZi10cmVlIGJ1aWxkLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0IGlzIGFscmVhZHkgY2FwYWJsZSBvZgorICAgICAgICAgICAgICAgICAgICBidWlsZGluZyBpbiBhIGRpcmVjdG9yeSBzZXBhcmF0ZSBmcm9tIHRoZSBzb3VyY2UsIHlvdQorICAgICAgICAgICAgICAgICAgICBkbyBub3QgbmVlZCB0byBkbyBhbnl0aGluZy4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgdGhlIHNvZnR3YXJlIGlzIG5vdCBjYXBhYmxlIG9mIGJlaW5nIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgIGluIHRoaXMgbWFubmVyLCB5b3Ugd2lsbAorICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGVpdGhlciBwYXRjaCB0aGUgc29mdHdhcmUgc28gdGhhdCBpdCBjYW4gYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGVseSwgb3IgeW91IHdpbGwgbmVlZCB0byBjaGFuZ2UgdGhlIHJlY2lwZSB0bworICAgICAgICAgICAgICAgICAgICBpbmhlcml0IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMtYnJva2Vuc2VwJz48ZmlsZW5hbWU+YXV0b3Rvb2xzLWJyb2tlbnNlcDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBpbnN0ZWFkIG9mIHRoZSA8ZmlsZW5hbWU+YXV0b3Rvb2xzPC9maWxlbmFtZT4gY2xhc3MuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+LS1mb3JlaWduPC9maWxlbmFtZT4gb3B0aW9uIGlzCisgICAgICAgICAgICAgICAgICAgIG5vIGxvbmdlciBwYXNzZWQgdG8gPGZpbGVuYW1lPmF1dG9tYWtlPC9maWxlbmFtZT4gd2hlbgorICAgICAgICAgICAgICAgICAgICBydW5uaW5nIDxmaWxlbmFtZT5hdXRvY29uZjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIHRlbGxzIDxmaWxlbmFtZT5hdXRvbWFrZTwvZmlsZW5hbWU+IHRoYXQgYQorICAgICAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyIHNvZnR3YXJlIHBhY2thZ2UgZG9lcyBub3QgZm9sbG93IHRoZSBHTlUKKyAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmRzIGFuZCB0aGVyZWZvcmUgc2hvdWxkIG5vdCBiZSBleHBlY3RlZAorICAgICAgICAgICAgICAgICAgICB0byBkaXN0cmlidXRlIGNlcnRhaW4gZmlsZXMgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q2hhbmdlTG9nPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5BVVRIT1JTPC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSB0aGUgbWFqb3JpdHkgb2YgdXBzdHJlYW0gc29mdHdhcmUgcGFja2FnZXMgYWxyZWFkeQorICAgICAgICAgICAgICAgICAgICB0ZWxsIDxmaWxlbmFtZT5hdXRvbWFrZTwvZmlsZW5hbWU+IHRvIGVuYWJsZSBmb3JlaWduIG1vZGUKKyAgICAgICAgICAgICAgICAgICAgdGhlbXNlbHZlcywgdGhlIG9wdGlvbiBpcyBtb3N0bHkgc3VwZXJmbHVvdXMuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHNvbWUgcmVjaXBlcyB3aWxsIG5lZWQgcGF0Y2hlcyBmb3IgdGhpcyBjaGFuZ2UuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZWFzaWx5IG1ha2UgdGhlIGNoYW5nZSBieSBwYXRjaGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZmlndXJlLmFjPC9maWxlbmFtZT4gc28gdGhhdCBpdCBwYXNzZXMKKyAgICAgICAgICAgICAgICAgICAgImZvcmVpZ24iIHRvIDxmaWxlbmFtZT5BTV9JTklUX0FVVE9NQUtFKCk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgU2VlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9jZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLWNvcmUvY29tbWl0Lz9pZD0wMTk0MzE4OGY4NWNlNjQxMTcxN2ZiNWJmNzAyZDYwOWY1NTgxM2YyJz50aGlzIGNvbW1pdDwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciBhbiBleGFtcGxlIHNob3dpbmcgaG93IHRvIG1ha2UgdGhlIHBhdGNoLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjctYmluYXJ5LWNvbmZpZ3VyYXRpb24tc2NyaXB0cy1kaXNhYmxlZCc+CisgICAgICAgIDx0aXRsZT5CaW5hcnkgQ29uZmlndXJhdGlvbiBTY3JpcHRzIERpc2FibGVkPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNvbWUgb2YgdGhlIGNvcmUgcmVjaXBlcyB0aGF0IHBhY2thZ2UgYmluYXJ5IGNvbmZpZ3VyYXRpb24gc2NyaXB0cworICAgICAgICAgICAgbm93IGRpc2FibGUgdGhlIHNjcmlwdHMgZHVlIHRvIHRoZQorICAgICAgICAgICAgc2NyaXB0cyBwcmV2aW91c2x5IHJlcXVpcmluZyBlcnJvci1wcm9uZSBwYXRoIHN1YnN0aXR1dGlvbi4KKyAgICAgICAgICAgIFNvZnR3YXJlIHRoYXQgbGlua3MgYWdhaW5zdCB0aGVzZSBsaWJyYXJpZXMgdXNpbmcgdGhlc2Ugc2NyaXB0cworICAgICAgICAgICAgc2hvdWxkIHVzZSB0aGUgbXVjaCBtb3JlIHJvYnVzdCA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICBpbnN0ZWFkLgorICAgICAgICAgICAgVGhlIGxpc3Qgb2YgcmVjaXBlcyBjaGFuZ2VkIGluIHRoaXMgdmVyc2lvbiAoYW5kIHRoZWlyCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIHNjcmlwdHMpIGlzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRpcmVjdGZiIChkaXJlY3RmYi1jb25maWcpCisgICAgIGZyZWV0eXBlIChmcmVldHlwZS1jb25maWcpCisgICAgIGdwZ21lIChncGdtZS1jb25maWcpCisgICAgIGxpYmFzc3VhbiAobGliYXNzdWFuLWNvbmZpZykKKyAgICAgbGliY3JvY28gKGNyb2NvLTYuMC1jb25maWcpCisgICAgIGxpYmdjcnlwdCAobGliZ2NyeXB0LWNvbmZpZykKKyAgICAgbGliZ3BnLWVycm9yIChncGctZXJyb3ItY29uZmlnKQorICAgICBsaWJrc2JhIChrc2JhLWNvbmZpZykKKyAgICAgbGlicGNhcCAocGNhcC1jb25maWcpCisgICAgIGxpYnBjcmUgKHBjcmUtY29uZmlnKQorICAgICBsaWJwbmcgKGxpYnBuZy1jb25maWcsIGxpYnBuZzE2LWNvbmZpZykKKyAgICAgbGlic2RsIChzZGwtY29uZmlnKQorICAgICBsaWJ1c2ItY29tcGF0IChsaWJ1c2ItY29uZmlnKQorICAgICBsaWJ4bWwyICh4bWwyLWNvbmZpZykKKyAgICAgbGlieHNsdCAoeHNsdC1jb25maWcpCisgICAgIG5jdXJzZXMgKG5jdXJzZXMtY29uZmlnKQorICAgICBuZW9uIChuZW9uLWNvbmZpZykKKyAgICAgbnB0aCAobnB0aC1jb25maWcpCisgICAgIHB0aCAocHRoLWNvbmZpZykKKyAgICAgdGFnbGliICh0YWdsaWItY29uZmlnKQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgQWRkaXRpb25hbGx5LCBzdXBwb3J0IGZvciA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+IGhhcyBiZWVuCisgICAgICAgICAgICBhZGRlZCB0byBzb21lIHJlY2lwZXMgaW4gdGhlIHByZXZpb3VzIGxpc3QgaW4gdGhlIHJhcmUgY2FzZXMKKyAgICAgICAgICAgIHdoZXJlIHRoZSB1cHN0cmVhbSBzb2Z0d2FyZSBwYWNrYWdlIGRvZXMgbm90IGFscmVhZHkgcHJvdmlkZQorICAgICAgICAgICAgaXQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNy1nbGliYy1yZXBsYWNlcy1lZ2xpYmMnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmVnbGliYyAyLjE5PC9maWxlbmFtZT4gUmVwbGFjZWQgd2l0aCA8ZmlsZW5hbWU+Z2xpYmMgMi4yMDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJlY2F1c2UgPGZpbGVuYW1lPmVnbGliYzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4gd2VyZSBhbHJlYWR5IGZhaXJseSBjbG9zZSwgdGhpcworICAgICAgICAgICAgcmVwbGFjZW1lbnQgc2hvdWxkIG5vdCByZXF1aXJlIGFueSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIG90aGVyCisgICAgICAgICAgICBzb2Z0d2FyZSB0aGF0IGxpbmtzIHRvIDxmaWxlbmFtZT5lZ2xpYmM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHRoZXJlIHdlcmUgYSBudW1iZXIgb2YgbWlub3IgY2hhbmdlcyBpbgorICAgICAgICAgICAgPGZpbGVuYW1lPmdsaWJjIDIuMjA8L2ZpbGVuYW1lPiB1cHN0cmVhbSB0aGF0IGNvdWxkIHJlcXVpcmUKKyAgICAgICAgICAgIHBhdGNoaW5nIHNvbWUgc29mdHdhcmUgKGUuZy4gdGhlIHJlbW92YWwgb2YgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+X0JTRF9TT1VSQ0U8L2ZpbGVuYW1lPiBmZWF0dXJlIHRlc3QgbWFjcm8pLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8ZmlsZW5hbWU+Z2xpYmMgMi4yMDwvZmlsZW5hbWU+IHJlcXVpcmVzIHZlcnNpb24gMi42LjMyIG9yIGdyZWF0ZXIKKyAgICAgICAgICAgIG9mIHRoZSBMaW51eCBrZXJuZWwuCisgICAgICAgICAgICBUaHVzLCBvbGRlciBrZXJuZWxzIHdpbGwgbm8gbG9uZ2VyIGJlIHVzYWJsZSBpbiBjb25qdW5jdGlvbiB3aXRoIGl0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgZnVsbCBkZXRhaWxzIG9uIHRoZSBjaGFuZ2VzIGluIDxmaWxlbmFtZT5nbGliYyAyLjIwPC9maWxlbmFtZT4sCisgICAgICAgICAgICBzZWUgdGhlIHVwc3RyZWFtIHJlbGVhc2Ugbm90ZXMKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vc291cmNld2FyZS5vcmcvbWwvbGliYy1hbHBoYS8yMDE0LTA5L21zZzAwMDg4Lmh0bWwnPmhlcmU8L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS43LWtlcm5lbC1tb2R1bGUtYXV0b2xvYWRpbmcnPgorICAgICAgICA8dGl0bGU+S2VybmVsIE1vZHVsZSBBdXRvbG9hZGluZzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1tb2R1bGVfYXV0b2xvYWQnPjxmaWxlbmFtZT5tb2R1bGVfYXV0b2xvYWRfKjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgaXMgbm93IGRlcHJlY2F0ZWQgYW5kIGEgbmV3CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItS0VSTkVMX01PRFVMRV9BVVRPTE9BRCc+PGZpbGVuYW1lPktFUk5FTF9NT0RVTEVfQVVUT0xPQUQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCisgICAgICAgICAgICBBbHNvLAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLW1vZHVsZV9jb25mJz48ZmlsZW5hbWU+bW9kdWxlX2NvbmZfKjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgbXVzdCBub3cgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGEgbmV3CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItS0VSTkVMX01PRFVMRV9QUk9CRUNPTkYnPjxmaWxlbmFtZT5LRVJORUxfTU9EVUxFX1BST0JFQ09ORjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICBUaGUgbmV3IHZhcmlhYmxlcyBubyBsb25nZXIgcmVxdWlyZSB5b3UgdG8gc3BlY2lmeSB0aGUgbW9kdWxlIG5hbWUKKyAgICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIHZhcmlhYmxlIG5hbWUuCisgICAgICAgICAgICBUaGlzIGNoYW5nZSBub3Qgb25seSBzaW1wbGlmaWVzIHVzYWdlIGJ1dCBhbHNvIGFsbG93cyB0aGUgdmFsdWVzCisgICAgICAgICAgICBvZiB0aGVzZSB2YXJpYWJsZXMgdG8gYmUgYXBwcm9wcmlhdGVseSBpbmNvcnBvcmF0ZWQgaW50byB0YXNrCisgICAgICAgICAgICBzaWduYXR1cmVzIGFuZCB0aHVzIHRyaWdnZXIgdGhlIGFwcHJvcHJpYXRlIHRhc2tzIHRvIHJlLWV4ZWN1dGUKKyAgICAgICAgICAgIHdoZW4gY2hhbmdlZC4KKyAgICAgICAgICAgIFlvdSBzaG91bGQgcmVwbGFjZSBhbnkgcmVmZXJlbmNlcyB0bworICAgICAgICAgICAgPGZpbGVuYW1lPm1vZHVsZV9hdXRvbG9hZF8qPC9maWxlbmFtZT4gd2l0aAorICAgICAgICAgICAgPGZpbGVuYW1lPktFUk5FTF9NT0RVTEVfQVVUT0xPQUQ8L2ZpbGVuYW1lPiwgYW5kIGFkZCBhbnkgbW9kdWxlcworICAgICAgICAgICAgZm9yIHdoaWNoIDxmaWxlbmFtZT5tb2R1bGVfY29uZl8qPC9maWxlbmFtZT4gaXMgc3BlY2lmaWVkIHRvCisgICAgICAgICAgICA8ZmlsZW5hbWU+S0VSTkVMX01PRFVMRV9QUk9CRUNPTkY8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1LRVJORUxfTU9EVUxFX0FVVE9MT0FEJz48ZmlsZW5hbWU+S0VSTkVMX01PRFVMRV9BVVRPTE9BRDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgYW5kCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItS0VSTkVMX01PRFVMRV9QUk9CRUNPTkYnPjxmaWxlbmFtZT5LRVJORUxfTU9EVUxFX1BST0JFQ09ORjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjctcWEtY2hlY2stY2hhbmdlcyc+CisgICAgICAgIDx0aXRsZT5RQSBDaGVjayBDaGFuZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY2hhbmdlcyBoYXZlIG9jY3VycmVkIHRvIHRoZSBRQSBjaGVjayBwcm9jZXNzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWwgUUEgY2hlY2tzIDxmaWxlbmFtZT5maWxlLXJkZXBzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5idWlsZC1kZXBzPC9maWxlbmFtZT4gaGF2ZSBiZWVuIGFkZGVkIGluCisgICAgICAgICAgICAgICAgICAgIG9yZGVyIHRvIHZlcmlmeSB0aGF0IGZpbGUgZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQKKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gcGFja2FnZSBjb250YWlucyBhIHNjcmlwdCByZXF1aXJpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9iaW4vYmFzaDwvZmlsZW5hbWU+KSBhbmQgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgYXJlIGRlY2xhcmVkLCByZXNwZWN0aXZlbHkuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLXFhLWNoZWNrcyc+UUEgRXJyb3IgYW5kIFdhcm5pbmcgTWVzc2FnZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBjaGFwdGVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFBhY2thZ2UgUUEgY2hlY2tzIGFyZSBub3cgcGVyZm9ybWVkIGR1cmluZyBhIG5ldworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZV9xYSc+PGZpbGVuYW1lPmRvX3BhY2thZ2VfcWE8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayByYXRoZXIgdGhhbiBiZWluZyBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZSc+PGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBhbGxvd3MgbW9yZSBwYXJhbGxlbCBleGVjdXRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY2hhbmdlIGlzIHVubGlrZWx5IHRvIGJlIGFuIGlzc3VlIGV4Y2VwdCBmb3IgaGlnaGx5CisgICAgICAgICAgICAgICAgICAgIGN1c3RvbWl6ZWQgcmVjaXBlcyB0aGF0IGRpc2FibGUgcGFja2FnaW5nIHRhc2tzIHRoZW1zZWx2ZXMKKyAgICAgICAgICAgICAgICAgICAgYnkgbWFya2luZyB0aGVtIGFzIDxmaWxlbmFtZT5ub2V4ZWM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHRob3NlIHBhY2thZ2VzLCB5b3Ugd2lsbCBuZWVkIHRvIGRpc2FibGUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wYWNrYWdlX3FhPC9maWxlbmFtZT4gdGFzayBhcyB3ZWxsLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZpbGVzIGJlaW5nIG92ZXJ3cml0dGVuIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBvcHVsYXRlX3N5c3Jvb3QnPjxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zeXNyb290PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgbm93IHRyaWdnZXIgYW4gZXJyb3IgaW5zdGVhZCBvZiBhIHdhcm5pbmcuCisgICAgICAgICAgICAgICAgICAgIFJlY2lwZXMgc2hvdWxkIG5vdCBiZSBvdmVyd3JpdGluZyBmaWxlcyB3cml0dGVuIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICBzeXNyb290IGJ5IG90aGVyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIHRoZXNlIHR5cGVzIG9mIHJlY2lwZXMsIHlvdSBuZWVkIHRvIGFsdGVyIHRoZW0KKyAgICAgICAgICAgICAgICAgICAgc28gdGhhdCB0aGV5IGRvIG5vdCBvdmVyd3JpdGUgdGhlc2UgZmlsZXMuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgbWlnaHQgbm93IHJlY2VpdmUgdGhpcyBlcnJvciBhZnRlciBjaGFuZ2VzIGluCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gb3IgbWV0YWRhdGEgcmVzdWx0aW5nIGluIG9ycGhhbmVkIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIGJlaW5nIGxlZnQgaW4gdGhlIHN5c3Jvb3QuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyByZWNlaXZlIHRoaXMgZXJyb3IsIHRoZSB3YXkgdG8gcmVzb2x2ZSB0aGUgaXNzdWUKKyAgICAgICAgICAgICAgICAgICAgaXMgdG8gZGVsZXRlIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBvciB0byBtb3ZlIGl0IG91dCBvZiB0aGUgd2F5IGFuZCB0aGVuIHJlLXN0YXJ0IHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgQW55dGhpbmcgdGhhdCBoYXMgYmVlbiBmdWxseSBidWlsdCB1cCB0byB0aGF0IHBvaW50IGFuZAorICAgICAgICAgICAgICAgICAgICBkb2VzIG5vdCBuZWVkIHJlYnVpbGRpbmcgd2lsbCBiZSByZXN0b3JlZCBmcm9tIHRoZSBzaGFyZWQKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgY2FjaGUgYW5kIHRoZSByZXN0IG9mIHRoZSBidWlsZCB3aWxsIGJlIGFibGUgdG8KKyAgICAgICAgICAgICAgICAgICAgcHJvY2VlZCBhcyBub3JtYWwuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNy1yZW1vdmVkLXJlY2lwZXMnPgorICAgICAgICA8dGl0bGU+UmVtb3ZlZCBSZWNpcGVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgcmVjaXBlcyBoYXZlIGJlZW4gcmVtb3ZlZDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eC1sb2FkPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVjaXBlIGhhcyBiZWVuIHN1cGVyc2VkZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgVS1ib290IFNQTCBmb3IgYWxsIENvcnRleC1iYXNlZCBUSSBTb0NzLgorICAgICAgICAgICAgICAgICAgICBGb3IgbGVnYWN5IGJvYXJkcywgdGhlIDxmaWxlbmFtZT5tZXRhLXRpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIsIHdoaWNoIGNvbnRhaW5zIGEgbWFpbnRhaW5lZCByZWNpcGUsIHNob3VsZCBiZSB1c2VkCisgICAgICAgICAgICAgICAgICAgIGluc3RlYWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVib290Y2hhcnQ8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgVGhpcyByZWNpcGUgaXMgb2Jzb2xldGUuCisgICAgICAgICAgICAgICAgICAgIEEgPGZpbGVuYW1lPmJvb3RjaGFydDI8L2ZpbGVuYW1lPiByZWNpcGUgaGFzIGJlZW4gYWRkZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gZnVuY3Rpb25hbGx5IHJlcGxhY2UgaXQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvIDMuNDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IGZvciB0aGUgbGludXgteW9jdG8gMy40IGtlcm5lbCBoYXMgYmVlbiBkcm9wcGVkLgorICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IGZvciB0aGUgMy4xMCBhbmQgMy4xNCBrZXJuZWxzIHJlbWFpbnMsIHdoaWxlCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgZm9yIHZlcnNpb24gMy4xNyBoYXMgYmVlbiBhZGRlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZWdsaWJjPC9maWxlbmFtZT4gaGFzIGJlZW4gcmVtb3ZlZCBpbiBmYXZvciBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2xpYmM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbWlncmF0aW9uLTEuNy1nbGliYy1yZXBsYWNlcy1lZ2xpYmMnPjxmaWxlbmFtZT5lZ2xpYmMgMi4xOTwvZmlsZW5hbWU+IFJlcGxhY2VkIHdpdGggPGZpbGVuYW1lPmdsaWJjIDIuMjA8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNy1taXNjZWxsYW5lb3VzLWNoYW5nZXMnPgorICAgICAgICA8dGl0bGU+TWlzY2VsbGFuZW91cyBDaGFuZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbWlzY2VsbGFuZW91cyBjaGFuZ2Ugb2NjdXJyZWQ6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIGhpc3RvcnkgZmVhdHVyZSBub3cgd3JpdGVzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idWlsZC1pZC50eHQ8L2ZpbGVuYW1lPiBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idWlsZC1pZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIDxmaWxlbmFtZT5idWlsZC1pZC50eHQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBub3cgY29udGFpbnMgdGhlIGZ1bGwgYnVpbGQgaGVhZGVyIGFzIHByaW50ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSB1cG9uIHN0YXJ0aW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBtYW51YWxseSByZW1vdmUgb2xkICJidWlsZC1pZCIgZmlsZXMgZnJvbSB5b3VyCisgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nIGJ1aWxkIGhpc3RvcnkgcmVwb3NpdG9yaWVzIHRvIGF2b2lkIGNvbmZ1c2lvbi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBidWlsZCBoaXN0b3J5IGZlYXR1cmUsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J21haW50YWluaW5nLWJ1aWxkLW91dHB1dC1xdWFsaXR5Jz5NYWludGFpbmluZyBCdWlsZCBPdXRwdXQgUXVhbGl0eTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdtb3ZpbmctdG8tdGhlLXlvY3RvLXByb2plY3QtMS44LXJlbGVhc2UnPgorICAgIDx0aXRsZT5Nb3ZpbmcgdG8gdGhlIFlvY3RvIFByb2plY3QgMS44IFJlbGVhc2U8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBtaWdyYXRpb24gaW5mb3JtYXRpb24gZm9yIG1vdmluZyB0byB0aGUKKyAgICAgICAgWW9jdG8gUHJvamVjdCAxLjggUmVsZWFzZSBmcm9tIHRoZSBwcmlvciByZWxlYXNlLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS44LXJlbW92ZWQtcmVjaXBlcyc+CisgICAgICAgIDx0aXRsZT5SZW1vdmVkIFJlY2lwZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyByZWNpcGVzIGhhdmUgYmVlbiByZW1vdmVkOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPm93bC12aWRlbzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbmFsaXR5IHJlcGxhY2VkIGJ5IDxmaWxlbmFtZT5nc3QtcGxheWVyPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Z2FrdTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbmFsaXR5IHJlcGxhY2VkIGJ5IDxmaWxlbmFtZT5nc3QtcGxheWVyPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Z25vbWUtZGVza3RvcDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSBpcyBub3cgYXZhaWxhYmxlIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWdub21lPC9maWxlbmFtZT4gYW5kIGlzIG5vIGxvbmdlciBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Z3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hczwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSBpcyBub3cgYXZhaWxhYmxlIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWdub21lPC9maWxlbmFtZT4gYW5kIGlzIG5vIGxvbmdlciBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+cHl0aG9uLWFyZ3BhcnNlPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YXJncGFyc2U8L2ZpbGVuYW1lPiBtb2R1bGUgaXMgYWxyZWFkeQorICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCBpbiB0aGUgZGVmYXVsdCBQeXRob24gZGlzdHJpYnV0aW9uIGluIGEKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBuYW1lZCA8ZmlsZW5hbWU+cHl0aG9uLWFyZ3BhcnNlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgdGhlIHNlcGFyYXRlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5weXRob24tYXJncGFyc2U8L2ZpbGVuYW1lPiByZWNpcGUgaXMgbm8KKyAgICAgICAgICAgICAgICAgICAgbG9uZ2VyIG5lZWRlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT50ZWxlcGF0aHktcHl0aG9uLCBsaWJ0ZWxlcGF0aHksIHRlbGVwYXRoeS1nbGliLCB0ZWxlcGF0aHktaWRsZSwgdGVsZXBhdGh5LW1pc3Npb24tY29udHJvbDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBBbGwgdGhlc2UgcmVjaXBlcyBoYXZlIG1vdmVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9lPC9maWxlbmFtZT4gYW5kIGFyZSBjb25zZXF1ZW50bHkgbm8KKyAgICAgICAgICAgICAgICAgICAgbG9uZ2VyIG5lZWRlZCBieSBhbnkgcmVjaXBlcyBpbiBPcGVuRW1iZWRkZWQtQ29yZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5saW51eC15b2N0b18zLjEwPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5saW51eC15b2N0b18zLjE3PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIHRoZSBsaW51eC15b2N0byAzLjEwIGFuZCAzLjE3IGtlcm5lbHMgaGFzIGJlZW4KKyAgICAgICAgICAgICAgICAgICAgZHJvcHBlZC4KKyAgICAgICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgdGhlIDMuMTQga2VybmVsIHJlbWFpbnMsIHdoaWxlIHN1cHBvcnQgZm9yCisgICAgICAgICAgICAgICAgICAgIDMuMTkga2VybmVsIGhhcyBiZWVuIGFkZGVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnBva3ktZmVlZC1jb25maWctb3BrZzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSBoYXMgYmVjb21lIG9ic29sZXRlIGFuZCBpcyBubyBsb25nZXIgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICBVc2UgPGZpbGVuYW1lPmRpc3Ryby1mZWVkLWNvbmZpZzwvZmlsZW5hbWU+IGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtb2U8L2ZpbGVuYW1lPiBpbnN0ZWFkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmxpYmF2IDAuOC54PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJhdiA5Lng8L2ZpbGVuYW1lPiBpcyBub3cgdXNlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5zZWQtbmF0aXZlPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIE5vIGxvbmdlciBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgIEEgd29ya2luZyB2ZXJzaW9uIG9mIDxmaWxlbmFtZT5zZWQ8L2ZpbGVuYW1lPiBpcyBleHBlY3RlZAorICAgICAgICAgICAgICAgICAgICB0byBiZSBwcm92aWRlZCBieSB0aGUgaG9zdCBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuOC1ibHVleic+CisgICAgICAgIDx0aXRsZT5CbHVlWiA0LnggLyA1LnggU2VsZWN0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFByb3BlciBidWlsdC1pbiBzdXBwb3J0IGZvciBzZWxlY3RpbmcgQmx1ZVogNS54IGluIHByZWZlcmVuY2UKKyAgICAgICAgICAgIHRvIHRoZSBkZWZhdWx0IG9mIDQueCBub3cgZXhpc3RzLgorICAgICAgICAgICAgVG8gdXNlIEJsdWVaIDUueCwgc2ltcGx5IGFkZCAiYmx1ZXo1IiB0byB5b3VyCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YWx1ZS4KKyAgICAgICAgICAgIElmIHlvdSBoYWQgcHJldmlvdXNseSBhZGRlZCBhcHBlbmQgZmlsZXMKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+Ki5iYmFwcGVuZDwvZmlsZW5hbWU+KSB0byBtYWtlIHRoaXMgc2VsZWN0aW9uLCB5b3UgY2FuCisgICAgICAgICAgICBub3cgcmVtb3ZlIHRoZW0uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgYQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYmx1ZXRvb3RoJz48ZmlsZW5hbWU+Ymx1ZXRvb3RoPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBjbGFzcyBoYXMgYmVlbiBhZGRlZCB0byBtYWtlIHNlbGVjdGlvbiBvZiB0aGUgYXBwcm9wcmlhdGUgYmx1ZXRvb3RoCisgICAgICAgICAgICBzdXBwb3J0IHdpdGhpbiBhIHJlY2lwZSBhIGxpdHRsZSBlYXNpZXIuCisgICAgICAgICAgICBJZiB5b3Ugd2lzaCB0byBtYWtlIHVzZSBvZiB0aGlzIGNsYXNzIGluIGEgcmVjaXBlLCBhZGQgc29tZXRoaW5nCisgICAgICAgICAgICBzdWNoIGFzIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGluaGVyaXQgYmx1ZXRvb3RoCisgICAgIFBBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsICcke0JMVUVafScsICcnLCBkKX0KKyAgICAgUEFDS0FHRUNPTkZJR1tibHVlejRdID0gIi0tZW5hYmxlLWJsdWV0b290aCwtLWRpc2FibGUtYmx1ZXRvb3RoLGJsdWV6NCIKKyAgICAgUEFDS0FHRUNPTkZJR1tibHVlejVdID0gIi0tZW5hYmxlLWJsdWV6NSwtLWRpc2FibGUtYmx1ZXo1LGJsdWV6NSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS44LWtlcm5lbC1idWlsZC1jaGFuZ2VzJz4KKyAgICAgICAgPHRpdGxlPktlcm5lbCBCdWlsZCBDaGFuZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBrZXJuZWwgYnVpbGQgcHJvY2VzcyB3YXMgY2hhbmdlZCB0byBwbGFjZSB0aGUgc291cmNlCisgICAgICAgICAgICBpbiBhIGNvbW1vbiBzaGFyZWQgd29yayBhcmVhIGFuZCB0byBwbGFjZSBidWlsZCBhcnRpZmFjdHMKKyAgICAgICAgICAgIHNlcGFyYXRlbHkgaW4gdGhlIHNvdXJjZSBjb2RlIHRyZWUuCisgICAgICAgICAgICBJbiB0aGVvcnksIG1pZ3JhdGlvbiBwYXRocyBoYXZlIGJlZW4gcHJvdmlkZWQgZm9yIG1vc3QgY29tbW9uCisgICAgICAgICAgICB1c2FnZXMgaW4ga2VybmVsIHJlY2lwZXMgYnV0IHRoaXMgbWlnaHQgbm90IHdvcmsgaW4gYWxsIGNhc2VzLgorICAgICAgICAgICAgSW4gcGFydGljdWxhciwgdXNlcnMgbmVlZCB0byBlbnN1cmUgdGhhdAorICAgICAgICAgICAgPGZpbGVuYW1lPiR7U308L2ZpbGVuYW1lPiAoc291cmNlIGZpbGVzKSBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT4ke0J9PC9maWxlbmFtZT4gKGJ1aWxkIGFydGlmYWN0cykgYXJlIHVzZWQKKyAgICAgICAgICAgIGNvcnJlY3RseSBpbiBmdW5jdGlvbnMgc3VjaCBhcworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbmZpZ3VyZSc+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgYW5kCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICBGb3Iga2VybmVsIHJlY2lwZXMgdGhhdCBkbyBub3QgaW5oZXJpdCBmcm9tCisgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsLXlvY3RvPC9maWxlbmFtZT4gb3IgaW5jbHVkZQorICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLmluYzwvZmlsZW5hbWU+LCB5b3UgbWlnaHQgd2lzaCB0bworICAgICAgICAgICAgcmVmZXIgdG8gdGhlIDxmaWxlbmFtZT5saW51eC5pbmM8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtb2U8L2ZpbGVuYW1lPiBsYXllciBmb3IgdGhlIGtpbmRzIG9mIGNoYW5nZXMgeW91CisgICAgICAgICAgICBuZWVkIHRvIG1ha2UuCisgICAgICAgICAgICBGb3IgcmVmZXJlbmNlLCBoZXJlIGlzIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2NnaXQub3BlbmVtYmVkZGVkLm9yZy9tZXRhLW9wZW5lbWJlZGRlZC9jb21taXQvbWV0YS1vZS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC5pbmM/aWQ9ZmM3MTMyZWRlMjdhYzY3NjY5NDQ4ZDNkMjg0NWNlN2Q0NmM2YTFlZSc+Y29tbWl0PC91bGluaz4KKyAgICAgICAgICAgIHdoZXJlIHRoZSA8ZmlsZW5hbWU+bGludXguaW5jPC9maWxlbmFtZT4gZmlsZSBpbgorICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtb2U8L2ZpbGVuYW1lPiB3YXMgdXBkYXRlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUmVjaXBlcyB0aGF0IHJlbHkgb24gdGhlIGtlcm5lbCBzb3VyY2UgY29kZSBhbmQgZG8gbm90IGluaGVyaXQKKyAgICAgICAgICAgIHRoZSBtb2R1bGUgY2xhc3NlcyBtaWdodCBuZWVkIHRvIGFkZCBleHBsaWNpdCBkZXBlbmRlbmNpZXMgb24KKyAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+ZG9fc2hhcmVkX3dvcmtkaXI8L2ZpbGVuYW1lPiBrZXJuZWwgdGFzaywgZm9yIGV4YW1wbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX2NvbmZpZ3VyZVtkZXBlbmRzXSArPSAidmlydHVhbC9rZXJuZWw6ZG9fc2hhcmVkX3dvcmtkaXIiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuOC1zc2wnPgorICAgICAgICA8dGl0bGU+U1NMIDMuMCBpcyBOb3cgRGlzYWJsZWQgaW4gT3BlblNTTDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTU0wgMy4wIGlzIG5vdyBkaXNhYmxlZCB3aGVuIGJ1aWxkaW5nIE9wZW5TU0wuCisgICAgICAgICAgICBEaXNhYmxpbmcgU1NMIDMuMCBhdm9pZHMgYW55IGxpbmdlcmluZyBpbnN0YW5jZXMgb2YgdGhlIFBPT0RMRQorICAgICAgICAgICAgdnVsbmVyYWJpbGl0eS4KKyAgICAgICAgICAgIElmIHlvdSBmZWVsIHlvdSBtdXN0IHJlLWVuYWJsZSBTU0wgMy4wLCB0aGVuIHlvdSBjYW4gYWRkIGFuCisgICAgICAgICAgICBhcHBlbmQgZmlsZSAoPGZpbGVuYW1lPiouYmJhcHBlbmQ8L2ZpbGVuYW1lPikgZm9yIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPm9wZW5zc2w8L2ZpbGVuYW1lPiByZWNpcGUgdG8gcmVtb3ZlICItbm8tc3NsMyIKKyAgICAgICAgICAgIGZyb20KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRUNPTkYnPjxmaWxlbmFtZT5FWFRSQV9PRUNPTkY8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuOC1kZWZhdWx0LXN5c3Jvb3QtcG9pc29uaW5nJz4KKyAgICAgICAgPHRpdGxlPkRlZmF1bHQgU3lzcm9vdCBQb2lzb25pbmc8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGZpbGVuYW1lPmdjYydzPC9maWxlbmFtZT4gZGVmYXVsdCBzeXNyb290IGFuZCBpbmNsdWRlIGRpcmVjdG9yaWVzCisgICAgICAgICAgICBhcmUgbm93ICJwb2lzb25lZCIuCisgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgdGhlIHN5c3Jvb3QgYW5kIGluY2x1ZGUgZGlyZWN0b3JpZXMgYXJlIGJlaW5nCisgICAgICAgICAgICByZWRpcmVjdGVkIHRvIGEgbm9uLWV4aXN0ZW50IGxvY2F0aW9uIGluIG9yZGVyIHRvIGNhdGNoIHdoZW4KKyAgICAgICAgICAgIGhvc3QgZGlyZWN0b3JpZXMgYXJlIGJlaW5nIHVzZWQgZHVlIHRvIHRoZSBjb3JyZWN0IG9wdGlvbnMgbm90CisgICAgICAgICAgICBiZWluZyBwYXNzZWQuCisgICAgICAgICAgICBUaGlzIHBvaXNvbmluZyBhcHBsaWVzIGJvdGggdG8gdGhlIGNyb3NzLWNvbXBpbGVyIHVzZWQgd2l0aGluIHRoZQorICAgICAgICAgICAgYnVpbGQgYW5kIHRvIHRoZSBjcm9zcy1jb21waWxlciBwcm9kdWNlZCBpbiB0aGUgU0RLLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB0aGlzIGNoYW5nZSBjYXVzZXMgc29tZXRoaW5nIGluIHRoZSBidWlsZCB0byBmYWlsLCBpdCBhbG1vc3QKKyAgICAgICAgICAgIGNlcnRhaW5seSBtZWFucyB0aGUgdmFyaW91cyBjb21waWxlciBmbGFncyBhbmQgY29tbWFuZHMgYXJlIG5vdAorICAgICAgICAgICAgYmVpbmcgcGFzc2VkIGNvcnJlY3RseSB0byB0aGUgdW5kZXJseWluZyBwaWVjZSBvZiBzb2Z0d2FyZS4KKyAgICAgICAgICAgIEluIHN1Y2ggY2FzZXMsIHlvdSBuZWVkIHRvIHRha2UgY29ycmVjdGl2ZSBzdGVwcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS44LXJlYnVpbGQtaW1wcm92ZW1lbnRzJz4KKyAgICAgICAgPHRpdGxlPlJlYnVpbGQgSW1wcm92ZW1lbnRzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1iYXNlJz48ZmlsZW5hbWU+YmFzZTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWF1dG90b29scyc+PGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtY21ha2UnPjxmaWxlbmFtZT5jbWFrZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3NlcyB0byBjbGVhbiBvdXQgZ2VuZXJhdGVkIGZpbGVzIHdoZW4gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB0YXNrIG5lZWRzIHRvIGJlIHJlLWV4ZWN1dGVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmUgb2YgdGhlIGltcHJvdmVtZW50cyBpcyB0byBhdHRlbXB0IHRvIHJ1biAibWFrZSBjbGVhbiIgZHVyaW5nCisgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+IHRhc2sgaWYgYQorICAgICAgICAgICAgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4gZXhpc3RzLgorICAgICAgICAgICAgU29tZSBzb2Z0d2FyZSBwYWNrYWdlcyBkbyBub3QgcHJvdmlkZSBhIHdvcmtpbmcgY2xlYW4gdGFyZ2V0CisgICAgICAgICAgICB3aXRoaW4gdGhlaXIgbWFrZSBmaWxlcy4KKyAgICAgICAgICAgIElmIHlvdSBoYXZlIHN1Y2ggcmVjaXBlcywgeW91IG5lZWQgdG8gc2V0CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ0xFQU5CUk9LRU4nPjxmaWxlbmFtZT5DTEVBTkJST0tFTjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdG8gIjEiIHdpdGhpbiB0aGUgcmVjaXBlLCBmb3IgZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQ0xFQU5CUk9LRU4gPSAiMSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS44LXFhLWNoZWNrLWFuZC12YWxpZGF0aW9uLWNoYW5nZXMnPgorICAgICAgICA8dGl0bGU+UUEgQ2hlY2sgYW5kIFZhbGlkYXRpb24gQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIFFBIENoZWNrIGFuZCBWYWxpZGF0aW9uIENoYW5nZXMgaGF2ZSBvY2N1cnJlZDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBVc2FnZSBvZiA8ZmlsZW5hbWU+UFJJTkM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBwcmV2aW91c2x5IHRyaWdnZXJlZCBhIHdhcm5pbmcuCisgICAgICAgICAgICAgICAgICAgIEl0IG5vdyB0cmlnZ2VycyBhbiBlcnJvci4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCByZW1vdmUgYW55IHJlbWFpbmluZyB1c2FnZSBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFJJTkM8L2ZpbGVuYW1lPiBpbiBhbnkgcmVjaXBlIG9yIGFwcGVuZCBmaWxlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFuIGFkZGl0aW9uYWwgUUEgY2hlY2sgaGFzIGJlZW4gYWRkZWQgdG8gZGV0ZWN0IHVzYWdlIG9mCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0R9PC9maWxlbmFtZT4gaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTJz48ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzIHdoZXJlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC9saW5rPiB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkIG5vdCBiZSB1c2VkIGF0IGFsbC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNhbWUgY2hlY2sgZW5zdXJlcyB0aGF0IDxmaWxlbmFtZT4kRDwvZmlsZW5hbWU+IGlzIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZ19wcmVpbnN0L3BrZ19wb3N0aW5zdC9wa2dfcHJlcm0vcGtnX3Bvc3RybTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIDxmaWxlbmFtZT4ke0R9PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L2xpbms+IG5vdworICAgICAgICAgICAgICAgICAgICBuZWVkcyB0byBiZSBzZXQgdG8gYSB2YWxpZCB2YWx1ZSB3aXRoaW4gYSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5TPC9maWxlbmFtZT4gaXMgbm90IHNldCBpbiB0aGUgcmVjaXBlLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGlzIG5vdCBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQuCisgICAgICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5TPC9maWxlbmFtZT4gZG9lcyBub3QgcG9pbnQgdG8gYSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBleGlzdHMgYXQgdGhlIHRpbWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy11bnBhY2snPjxmaWxlbmFtZT5kb191bnBhY2s8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayBmaW5pc2hlcywgYSB3YXJuaW5nIHdpbGwgYmUgc2hvd24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0UnPjxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIG5vdyB2YWxpZGF0ZWQgZm9yIGNvcnJlY3QgZm9ybWF0dGluZyBvZiBtdWx0aXBsZQorICAgICAgICAgICAgICAgICAgICBsaWNlbnNlcy4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGZvcm1hdCBpcyBpbnZhbGlkIChlLmcuIG11bHRpcGxlIGxpY2Vuc2VzIGFyZQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgd2l0aCBubyBvcGVyYXRvcnMgdG8gc3BlY2lmeSBob3cgdGhlIG11bHRpcGxlCisgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2VzIGludGVyYWN0KSwgdGhlbiBhIHdhcm5pbmcgd2lsbCBiZSBzaG93bi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS44LW1pc2NlbGxhbmVvdXMtY2hhbmdlcyc+CisgICAgICAgIDx0aXRsZT5NaXNjZWxsYW5lb3VzIENoYW5nZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBtaXNjZWxsYW5lb3VzIGNoYW5nZXMgaGF2ZSBvY2N1cnJlZDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnNlbmQtZXJyb3ItcmVwb3J0PC9maWxlbmFtZT4gc2NyaXB0IG5vdworICAgICAgICAgICAgICAgICAgICBleHBlY3RzIGEgIi1zIiBvcHRpb24gdG8gYmUgc3BlY2lmaWVkIGJlZm9yZSB0aGUgc2VydmVyCisgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgYXNzdW1lcyBhIHNlcnZlciBhZGRyZXNzIGlzIGJlaW5nIHNwZWNpZmllZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm9lLXBrZ2RhdGEtdXRpbDwvZmlsZW5hbWU+IHNjcmlwdCBub3cKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0cyBhICItcCIgb3B0aW9uIHRvIGJlIHNwZWNpZmllZCBiZWZvcmUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2dkYXRhPC9maWxlbmFtZT4gZGlyZWN0b3J5LCB3aGljaCBpcyBub3cKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwuCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSA8ZmlsZW5hbWU+cGtnZGF0YTwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpcyBub3QKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkLCB0aGUgc2NyaXB0IHdpbGwgcnVuIEJpdEJha2UgdG8gcXVlcnkKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBLR0RBVEFfRElSJz48ZmlsZW5hbWU+UEtHREFUQV9ESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgYnVpbGQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWJpdGJha2UueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWJpdGJha2UueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNDAyZGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtYml0YmFrZS54bWwKQEAgLTAsMCArMSw0NzIgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdyZWYtYml0YmFrZSc+CisKKyAgICA8dGl0bGU+Qml0QmFrZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQml0QmFrZSBpcyBhIHByb2dyYW0gd3JpdHRlbiBpbiBQeXRob24gdGhhdCBpbnRlcnByZXRzIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPiB1c2VkIGJ5CisgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICBBdCBzb21lIHBvaW50LCBkZXZlbG9wZXJzIHdvbmRlciB3aGF0IGFjdHVhbGx5IGhhcHBlbnMgd2hlbiB5b3UgZW50ZXI6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0bworICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2hhcHRlciBwcm92aWRlcyBhbiBvdmVydmlldyBvZiB3aGF0IGhhcHBlbnMgYmVoaW5kIHRoZSBzY2VuZXMgZnJvbSBCaXRCYWtlJ3MgcGVyc3BlY3RpdmUuCisgICAgPC9wYXJhPgorCisgICAgPG5vdGU+CisgICAgICAgIEJpdEJha2Ugc3RyaXZlcyB0byBiZSBhIGdlbmVyaWMgInRhc2siIGV4ZWN1dG9yIHRoYXQgaXMgY2FwYWJsZSBvZiBoYW5kbGluZyBjb21wbGV4IGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwcy4KKyAgICAgICAgQXMgc3VjaCwgaXQgaGFzIG5vIHJlYWwga25vd2xlZGdlIG9mIHdoYXQgdGhlIHRhc2tzIGJlaW5nIGV4ZWN1dGVkIGFjdHVhbGx5IGRvLgorICAgICAgICBCaXRCYWtlIGp1c3QgY29uc2lkZXJzIGEgbGlzdCBvZiB0YXNrcyB3aXRoIGRlcGVuZGVuY2llcyBhbmQgaGFuZGxlcworICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPgorICAgICAgICBjb25zaXN0aW5nIG9mIHZhcmlhYmxlcyBpbiBhIGNlcnRhaW4gZm9ybWF0IHRoYXQgZ2V0IHBhc3NlZCB0byB0aGUgdGFza3MuCisgICAgPC9ub3RlPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi1iaXRiYWtlLXBhcnNpbmcnPgorICAgICAgICA8dGl0bGU+UGFyc2luZzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIHBhcnNlcyBjb25maWd1cmF0aW9uIGZpbGVzLCBjbGFzc2VzLCBhbmQgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZmlyc3QgdGhpbmcgQml0QmFrZSBkb2VzIGlzIGxvb2sgZm9yIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgIFRoaXMgZmlsZSByZXNpZGVzIGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICB3aXRoaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2NvbmYvPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgQml0QmFrZSBmaW5kcyBpdCBieSBleGFtaW5pbmcgaXRzCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L2xpbms+IGVudmlyb25tZW50CisgICAgICAgICAgICB2YXJpYWJsZSBhbmQgbG9va2luZyBmb3IgdGhlIDxmaWxlbmFtZT5tZXRhL2NvbmYvPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGxpc3RzIG90aGVyIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIGZpbGVzIHRvIGluY2x1ZGUgZnJvbSBhIDxmaWxlbmFtZT5jb25mLzwvZmlsZW5hbWU+CisgICAgICAgICAgICBkaXJlY3RvcnkgYmVsb3cgdGhlIGRpcmVjdG9yaWVzIGxpc3RlZCBpbiA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4uCisgICAgICAgICAgICBJbiBnZW5lcmFsLCB0aGUgbW9zdCBpbXBvcnRhbnQgY29uZmlndXJhdGlvbiBmaWxlIGZyb20gYSB1c2VyJ3MgcGVyc3BlY3RpdmUKKyAgICAgICAgICAgIGlzIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4sIHdoaWNoIGNvbnRhaW5zIGEgdXNlcidzIGN1c3RvbWl6ZWQKKyAgICAgICAgICAgIHNldHRpbmdzIGZvciB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIGVudmlyb25tZW50LgorICAgICAgICAgICAgT3RoZXIgbm90YWJsZSBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSB0aGUgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgKHNldCBieSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRElTVFJPJz5ESVNUUk88L2xpbms+PC9maWxlbmFtZT4gdmFyaWFibGUpCisgICAgICAgICAgICBhbmQgdGhlIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgICAgICAoc2V0IGJ5IHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz5NQUNISU5FPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlKS4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+RElTVFJPPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT4gQml0QmFrZSBlbnZpcm9ubWVudAorICAgICAgICAgICAgdmFyaWFibGVzIGFyZSBib3RoIHVzdWFsbHkgc2V0IGluCisgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgVmFsaWQgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSBhdmFpbGFibGUgaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2NvbmYvZGlzdHJvLzwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICAgICAgYW5kIHZhbGlkIG1hY2hpbmUgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgZmlsZXMgaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS88L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICBXaXRoaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlLzwvZmlsZW5hbWU+CisgICAgICAgICAgICBkaXJlY3RvcnkgYXJlIHZhcmlvdXMgPGZpbGVuYW1lPnR1bmUtKi5pbmM8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgcHJvdmlkZSBjb21tb24KKyAgICAgICAgICAgICJ0dW5pbmciIHNldHRpbmdzIHNwZWNpZmljIHRvIGFuZCBzaGFyZWQgYmV0d2VlbiBwYXJ0aWN1bGFyIGFyY2hpdGVjdHVyZXMgYW5kIG1hY2hpbmVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBZnRlciB0aGUgcGFyc2luZyBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcywgc29tZSBzdGFuZGFyZCBjbGFzc2VzIGFyZSBpbmNsdWRlZC4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZSBpcyBhbHdheXMgaW5jbHVkZWQuCisgICAgICAgICAgICBPdGhlciBjbGFzc2VzIHRoYXQgYXJlIHNwZWNpZmllZCBpbiB0aGUgY29uZmlndXJhdGlvbiB1c2luZyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItSU5IRVJJVCc+SU5IRVJJVDwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgdmFyaWFibGUgYXJlIGFsc28gaW5jbHVkZWQuCisgICAgICAgICAgICBDbGFzcyBmaWxlcyBhcmUgc2VhcmNoZWQgZm9yIGluIGEgPGZpbGVuYW1lPmNsYXNzZXM8L2ZpbGVuYW1lPiBzdWJkaXJlY3RvcnkKKyAgICAgICAgICAgIHVuZGVyIHRoZSBwYXRocyBpbiA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gaW4gdGhlIHNhbWUgd2F5IGFzCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBZnRlciBjbGFzc2VzIGFyZSBpbmNsdWRlZCwgdGhlIHZhcmlhYmxlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUJCRklMRVMnPkJCRklMRVM8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgIGlzIHNldCwgdXN1YWxseSBpbgorICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiwgYW5kIGRlZmluZXMgdGhlIGxpc3Qgb2YgcGxhY2VzIHRvIHNlYXJjaCBmb3IKKyAgICAgICAgICAgIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIHNwZWNpZmllcyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtKi88L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgd2l0aGluIFBva3kuCisgICAgICAgICAgICBBZGRpbmcgZXh0cmEgY29udGVudCB0byA8ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+IGlzIGJlc3QgYWNoaWV2ZWQgdGhyb3VnaCB0aGUgdXNlIG9mCisgICAgICAgICAgICBCaXRCYWtlIGxheWVycyBhcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJz5VbmRlcnN0YW5kaW5nIGFuZAorICAgICAgICAgICAgQ3JlYXRpbmcgTGF5ZXJzPC91bGluaz4iIHNlY3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIHBhcnNlcyBlYWNoIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlIGluIDxmaWxlbmFtZT5CQkZJTEVTPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICBzdG9yZXMgdGhlIHZhbHVlcyBvZiB2YXJpb3VzIHZhcmlhYmxlcy4KKyAgICAgICAgICAgIEluIHN1bW1hcnksIGZvciBlYWNoIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZmlsZSB0aGUgY29uZmlndXJhdGlvbiBwbHVzIHRoZSBiYXNlIGNsYXNzIG9mIHZhcmlhYmxlcyBhcmUgc2V0LCBmb2xsb3dlZAorICAgICAgICAgICAgYnkgdGhlIGRhdGEgaW4gdGhlIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICBpdHNlbGYsIGZvbGxvd2VkIGJ5IGFueSBpbmhlcml0IGNvbW1hbmRzIHRoYXQKKyAgICAgICAgICAgIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlIG1pZ2h0IGNvbnRhaW4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJlY2F1c2UgcGFyc2luZyA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZXMgaXMgYSB0aW1lCisgICAgICAgICAgICBjb25zdW1pbmcgcHJvY2VzcywgYSBjYWNoZSBpcyBrZXB0IHRvIHNwZWVkIHVwIHN1YnNlcXVlbnQgcGFyc2luZy4KKyAgICAgICAgICAgIFRoaXMgY2FjaGUgaXMgaW52YWxpZCBpZiB0aGUgdGltZXN0YW1wIG9mIHRoZSA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZpbGUgaXRzZWxmIGNoYW5nZXMsIG9yIGlmIHRoZSB0aW1lc3RhbXBzIG9mIGFueSBvZiB0aGUgaW5jbHVkZSwKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgb3IgY2xhc3MgZmlsZXMgb24gd2hpY2ggdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZSBkZXBlbmRzIGNoYW5nZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gYmUgYXdhcmUgb2YgaG93IEJpdEJha2UgcGFyc2VzIGN1cmx5IGJyYWNlcy4KKyAgICAgICAgICAgICAgICBJZiBhIHJlY2lwZSB1c2VzIGEgY2xvc2luZyBjdXJseSBicmFjZSB3aXRoaW4gdGhlIGZ1bmN0aW9uIGFuZAorICAgICAgICAgICAgICAgIHRoZSBjaGFyYWN0ZXIgaGFzIG5vIGxlYWRpbmcgc3BhY2VzLCBCaXRCYWtlIHByb2R1Y2VzIGEgcGFyc2luZworICAgICAgICAgICAgICAgIGVycm9yLgorICAgICAgICAgICAgICAgIElmIHlvdSB1c2UgYSBwYWlyIG9mIGN1cmx5IGJyYWNlIGluIGEgc2hlbGwgZnVuY3Rpb24sIHRoZQorICAgICAgICAgICAgICAgIGNsb3NpbmcgY3VybHkgYnJhY2UgbXVzdCBub3QgYmUgbG9jYXRlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUKKyAgICAgICAgICAgICAgICB3aXRob3V0IGxlYWRpbmcgc3BhY2VzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBjYXVzZXMgQml0QmFrZSB0byBwcm9kdWNlIGEgcGFyc2luZworICAgICAgICAgICAgICAgIGVycm9yOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZmFrZXJvb3QgY3JlYXRlX3NoYXIoKSB7CisgICAgICAgICBjYXQgJmx0OyZsdDsgIkVPRiIgJmd0OyAke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnNoCisgICAgIHVzYWdlKCkKKyAgICAgeworICAgICAgIGVjaG8gInRlc3QiCisgICAgICAgIyMjIyMjIFRoZSBmb2xsb3dpbmcgIn0iIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZSBjYXVzZXMgYSBwYXJzaW5nIGVycm9yICMjIyMjIworICAgICB9CisgICAgIEVPRgorICAgICB9CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFdyaXRpbmcgdGhlIHJlY2lwZSB0aGlzIHdheSBhdm9pZHMgdGhlIGVycm9yOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZmFrZXJvb3QgY3JlYXRlX3NoYXIoKSB7CisgICAgICAgICBjYXQgJmx0OyZsdDsgIkVPRiIgJmd0OyAke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnNoCisgICAgIHVzYWdlKCkKKyAgICAgeworICAgICAgIGVjaG8gInRlc3QiCisgICAgICAgIyMjIyMjVGhlIGZvbGxvd2luZyAifSIgd2l0aCBhIGxlYWRpbmcgc3BhY2UgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIGF2b2lkcyB0aGUgZXJyb3IgIyMjIyMjCisgICAgICB9CisgICAgIEVPRgorICAgICB9CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L25vdGU+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi1iaXRiYWtlLXByb3ZpZGVycyc+CisgICAgICAgIDx0aXRsZT5QcmVmZXJlbmNlcyBhbmQgUHJvdmlkZXJzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE9uY2UgYWxsIHRoZSA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZXMgaGF2ZSBiZWVuCisgICAgICAgICAgICBwYXJzZWQsIEJpdEJha2Ugc3RhcnRzIHRvIGJ1aWxkIHRoZSB0YXJnZXQgKDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPgorICAgICAgICAgICAgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24ncyBleGFtcGxlKSBhbmQgbG9va3MgZm9yIHByb3ZpZGVycyBvZiB0aGF0IHRhcmdldC4KKyAgICAgICAgICAgIE9uY2UgYSBwcm92aWRlciBpcyBzZWxlY3RlZCwgQml0QmFrZSByZXNvbHZlcyBhbGwgdGhlIGRlcGVuZGVuY2llcyBmb3IKKyAgICAgICAgICAgIHRoZSB0YXJnZXQuCisgICAgICAgICAgICBJbiB0aGUgY2FzZSBvZiA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4sIGl0IHdvdWxkIGxlYWQgdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtY29yZS14MTEtc2F0bzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgd2hpY2ggaW4gdHVybiBsZWFkcyB0byByZWNpcGVzIGxpa2UgPGZpbGVuYW1lPm1hdGNoYm94LXRlcm1pbmFsPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+cGNtYW5mbTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+Z3RodW1iPC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGVzZSByZWNpcGVzIGluIHR1cm4gZGVwZW5kIG9uIDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+IGFuZCB0aGUgdG9vbGNoYWluLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTb21ldGltZXMgYSB0YXJnZXQgbWlnaHQgaGF2ZSBtdWx0aXBsZSBwcm92aWRlcnMuCisgICAgICAgICAgICBBIGNvbW1vbiBleGFtcGxlIGlzICJ2aXJ0dWFsL2tlcm5lbCIsIHdoaWNoIGlzIHByb3ZpZGVkIGJ5IGVhY2gga2VybmVsIHBhY2thZ2UuCisgICAgICAgICAgICBFYWNoIG1hY2hpbmUgb2Z0ZW4gc2VsZWN0cyB0aGUgYmVzdCBrZXJuZWwgcHJvdmlkZXIgYnkgdXNpbmcgYSBsaW5lIHNpbWlsYXIgdG8gdGhlCisgICAgICAgICAgICBmb2xsb3dpbmcgaW4gdGhlIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlOgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPSAibGludXgteW9jdG8iCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBkZWZhdWx0IDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUFJFRkVSUkVEX1BST1ZJREVSJz5QUkVGRVJSRURfUFJPVklERVI8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgIGlzIHRoZSBwcm92aWRlciB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHRhcmdldC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVW5kZXJzdGFuZGluZyBob3cgcHJvdmlkZXJzIGFyZSBjaG9zZW4gaXMgbWFkZSBjb21wbGljYXRlZCBieSB0aGUgZmFjdAorICAgICAgICAgICAgdGhhdCBtdWx0aXBsZSB2ZXJzaW9ucyBtaWdodCBleGlzdC4KKyAgICAgICAgICAgIEJpdEJha2UgZGVmYXVsdHMgdG8gdGhlIGhpZ2hlc3QgdmVyc2lvbiBvZiBhIHByb3ZpZGVyLgorICAgICAgICAgICAgVmVyc2lvbiBjb21wYXJpc29ucyBhcmUgbWFkZSB1c2luZyB0aGUgc2FtZSBtZXRob2QgYXMgRGViaWFuLgorICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBSRUZFUlJFRF9WRVJTSU9OJz5QUkVGRVJSRURfVkVSU0lPTjwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgdmFyaWFibGUgdG8gc3BlY2lmeSBhIHBhcnRpY3VsYXIgdmVyc2lvbiAodXN1YWxseSBpbiB0aGUgZGlzdHJvIGNvbmZpZ3VyYXRpb24pLgorICAgICAgICAgICAgWW91IGNhbiBpbmZsdWVuY2UgdGhlIG9yZGVyIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ERUZBVUxUX1BSRUZFUkVOQ0UnPkRFRkFVTFRfUFJFRkVSRU5DRTwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICBCeSBkZWZhdWx0LCBmaWxlcyBoYXZlIGEgcHJlZmVyZW5jZSBvZiAiMCIuCisgICAgICAgICAgICBTZXR0aW5nIHRoZSA8ZmlsZW5hbWU+REVGQVVMVF9QUkVGRVJFTkNFPC9maWxlbmFtZT4gdG8gIi0xIiBtYWtlcyB0aGUKKyAgICAgICAgICAgIHBhY2thZ2UgdW5saWtlbHkgdG8gYmUgdXNlZCB1bmxlc3MgaXQgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLgorICAgICAgICAgICAgU2V0dGluZyB0aGUgPGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+IHRvICIxIiBtYWtlcyBpdCBsaWtlbHkgdGhlIHBhY2thZ2UgaXMgdXNlZC4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5QUkVGRVJSRURfVkVSU0lPTjwvZmlsZW5hbWU+IG92ZXJyaWRlcyBhbnkgPGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+IHNldHRpbmcuCisgICAgICAgICAgICA8ZmlsZW5hbWU+REVGQVVMVF9QUkVGRVJFTkNFPC9maWxlbmFtZT4gaXMgb2Z0ZW4gdXNlZCB0byBtYXJrIG5ld2VyIGFuZCBtb3JlIGV4cGVyaW1lbnRhbCBwYWNrYWdlCisgICAgICAgICAgICB2ZXJzaW9ucyB1bnRpbCB0aGV5IGhhdmUgdW5kZXJnb25lIHN1ZmZpY2llbnQgdGVzdGluZyB0byBiZSBjb25zaWRlcmVkIHN0YWJsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW4gc3VtbWFyeSwgQml0QmFrZSBoYXMgY3JlYXRlZCBhIGxpc3Qgb2YgcHJvdmlkZXJzLCB3aGljaCBpcyBwcmlvcml0aXplZCwgZm9yIGVhY2ggdGFyZ2V0LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi1iaXRiYWtlLWRlcGVuZGVuY2llcyc+CisgICAgICAgIDx0aXRsZT5EZXBlbmRlbmNpZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRWFjaCB0YXJnZXQgQml0QmFrZSBidWlsZHMgY29uc2lzdHMgb2YgbXVsdGlwbGUgdGFza3Mgc3VjaCBhcworICAgICAgICAgICAgPGZpbGVuYW1lPmZldGNoPC9maWxlbmFtZT4sIDxmaWxlbmFtZT51bnBhY2s8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYXRjaDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+Y29uZmlndXJlPC9maWxlbmFtZT4sCisgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmNvbXBpbGU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIEZvciBiZXN0IHBlcmZvcm1hbmNlIG9uIG11bHRpLWNvcmUgc3lzdGVtcywgQml0QmFrZSBjb25zaWRlcnMgZWFjaCB0YXNrIGFzIGFuIGluZGVwZW5kZW50CisgICAgICAgICAgICBlbnRpdHkgd2l0aCBpdHMgb3duIHNldCBvZiBkZXBlbmRlbmNpZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIERlcGVuZGVuY2llcyBhcmUgZGVmaW5lZCB0aHJvdWdoIHNldmVyYWwgdmFyaWFibGVzLgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGluZm9ybWF0aW9uIGFib3V0IHZhcmlhYmxlcyBCaXRCYWtlIHVzZXMgaW4gdGhlIEJpdEJha2UgZG9jdW1lbnRhdGlvbiwKKyAgICAgICAgICAgIHdoaWNoIGlzIGZvdW5kIGluIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZS9kb2MvbWFudWFsPC9maWxlbmFtZT4gZGlyZWN0b3J5IHdpdGhpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIEF0IGEgYmFzaWMgbGV2ZWwsIGl0IGlzIHN1ZmZpY2llbnQgdG8ga25vdyB0aGF0IEJpdEJha2UgdXNlcyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+REVQRU5EUzwvbGluaz48L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPlJERVBFTkRTPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlcyB3aGVuCisgICAgICAgICAgICBjYWxjdWxhdGluZyBkZXBlbmRlbmNpZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLWJpdGJha2UtdGFza2xpc3QnPgorICAgICAgICA8dGl0bGU+VGhlIFRhc2sgTGlzdDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCYXNlZCBvbiB0aGUgZ2VuZXJhdGVkIGxpc3Qgb2YgcHJvdmlkZXJzIGFuZCB0aGUgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiwKKyAgICAgICAgICAgIEJpdEJha2UgY2FuIG5vdyBjYWxjdWxhdGUgZXhhY3RseSB3aGF0IHRhc2tzIGl0IG5lZWRzIHRvIHJ1biBhbmQgaW4gd2hhdAorICAgICAgICAgICAgb3JkZXIgaXQgbmVlZHMgdG8gcnVuIHRoZW0uCisgICAgICAgICAgICBUaGUgYnVpbGQgbm93IHN0YXJ0cyB3aXRoIEJpdEJha2UgZm9ya2luZyBvZmYgdGhyZWFkcyB1cCB0byB0aGUgbGltaXQgc2V0IGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9OVU1CRVJfVEhSRUFEUyc+QkJfTlVNQkVSX1RIUkVBRFM8L2xpbms+PC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICBCaXRCYWtlIGNvbnRpbnVlcyB0byBmb3JrIHRocmVhZHMgYXMgbG9uZyBhcyB0aGVyZSBhcmUgdGFza3MgcmVhZHkgdG8gcnVuLAorICAgICAgICAgICAgdGhvc2UgdGFza3MgaGF2ZSBhbGwgdGhlaXIgZGVwZW5kZW5jaWVzIG1ldCwgYW5kIHRoZSB0aHJlYWQgdGhyZXNob2xkIGhhcyBub3QgYmVlbgorICAgICAgICAgICAgZXhjZWVkZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEl0IGlzIHdvcnRoIG5vdGluZyB0aGF0IHlvdSBjYW4gZ3JlYXRseSBzcGVlZCB1cCB0aGUgYnVpbGQgdGltZSBieSBwcm9wZXJseSBzZXR0aW5nCisgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPkJCX05VTUJFUl9USFJFQURTPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyNxcy1idWlsZGluZy1pbWFnZXMnPkJ1aWxkaW5nIEltYWdlczwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgZWFjaCB0YXNrIGNvbXBsZXRlcywgYSB0aW1lc3RhbXAgaXMgd3JpdHRlbiB0byB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZCBieSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU1RBTVAnPlNUQU1QPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgT24gc3Vic2VxdWVudCBydW5zLCBCaXRCYWtlIGxvb2tzIHdpdGhpbiB0aGUgPGZpbGVuYW1lPmJ1aWxkL3RtcC9zdGFtcHM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZGlyZWN0b3J5IGFuZCBkb2VzIG5vdCByZXJ1bgorICAgICAgICAgICAgdGFza3MgdGhhdCBhcmUgYWxyZWFkeSBjb21wbGV0ZWQgdW5sZXNzIGEgdGltZXN0YW1wIGlzIGZvdW5kIHRvIGJlIGludmFsaWQuCisgICAgICAgICAgICBDdXJyZW50bHksIGludmFsaWQgdGltZXN0YW1wcyBhcmUgb25seSBjb25zaWRlcmVkIG9uIGEgcGVyCisgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZSBiYXNpcy4KKyAgICAgICAgICAgIFNvLCBmb3IgZXhhbXBsZSwgaWYgdGhlIGNvbmZpZ3VyZSBzdGFtcCBoYXMgYSB0aW1lc3RhbXAgZ3JlYXRlciB0aGFuIHRoZQorICAgICAgICAgICAgY29tcGlsZSB0aW1lc3RhbXAgZm9yIGEgZ2l2ZW4gdGFyZ2V0LCB0aGVuIHRoZSBjb21waWxlIHRhc2sgd291bGQgcmVydW4uCisgICAgICAgICAgICBSdW5uaW5nIHRoZSBjb21waWxlIHRhc2sgYWdhaW4sIGhvd2V2ZXIsIGhhcyBubyBlZmZlY3Qgb24gb3RoZXIgcHJvdmlkZXJzCisgICAgICAgICAgICB0aGF0IGRlcGVuZCBvbiB0aGF0IHRhcmdldC4KKyAgICAgICAgICAgIFRoaXMgYmVoYXZpb3IgY291bGQgY2hhbmdlIG9yIGJlY29tZSBjb25maWd1cmFibGUgaW4gZnV0dXJlIHZlcnNpb25zIG9mIEJpdEJha2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFNvbWUgdGFza3MgYXJlIG1hcmtlZCBhcyAibm9zdGFtcCIgdGFza3MuCisgICAgICAgICAgICBObyB0aW1lc3RhbXAgZmlsZSBpcyBjcmVhdGVkIHdoZW4gdGhlc2UgdGFza3MgYXJlIHJ1bi4KKyAgICAgICAgICAgIENvbnNlcXVlbnRseSwgIm5vc3RhbXAiIHRhc2tzIGFyZSBhbHdheXMgcmVydW4uCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLWJpdGJha2UtcnVudGFzayc+CisgICAgICAgIDx0aXRsZT5SdW5uaW5nIGEgVGFzazwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUYXNrcyBjYW4gZWl0aGVyIGJlIGEgc2hlbGwgdGFzayBvciBhIFB5dGhvbiB0YXNrLgorICAgICAgICAgICAgRm9yIHNoZWxsIHRhc2tzLCBCaXRCYWtlIHdyaXRlcyBhIHNoZWxsIHNjcmlwdCB0bworICAgICAgICAgICAgPGZpbGVuYW1lPiR7V09SS0RJUn0vdGVtcC9ydW4uZG9fdGFza25hbWUucGlkPC9maWxlbmFtZT4gYW5kIHRoZW4gZXhlY3V0ZXMgdGhlIHNjcmlwdC4KKyAgICAgICAgICAgIFRoZSBnZW5lcmF0ZWQgc2hlbGwgc2NyaXB0IGNvbnRhaW5zIGFsbCB0aGUgZXhwb3J0ZWQgdmFyaWFibGVzLCBhbmQgdGhlIHNoZWxsIGZ1bmN0aW9ucworICAgICAgICAgICAgd2l0aCBhbGwgdmFyaWFibGVzIGV4cGFuZGVkLgorICAgICAgICAgICAgT3V0cHV0IGZyb20gdGhlIHNoZWxsIHNjcmlwdCBnb2VzIHRvIHRoZSBmaWxlIDxmaWxlbmFtZT4ke1dPUktESVJ9L3RlbXAvbG9nLmRvX3Rhc2tuYW1lLnBpZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgTG9va2luZyBhdCB0aGUgZXhwYW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluIHRoZSBydW4gZmlsZSBhbmQgdGhlIG91dHB1dCBpbiB0aGUgbG9nIGZpbGVzCisgICAgICAgICAgICBpcyBhIHVzZWZ1bCBkZWJ1Z2dpbmcgdGVjaG5pcXVlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgUHl0aG9uIHRhc2tzLCBCaXRCYWtlIGV4ZWN1dGVzIHRoZSB0YXNrIGludGVybmFsbHkgYW5kIGxvZ3MgaW5mb3JtYXRpb24gdG8gdGhlCisgICAgICAgICAgICBjb250cm9sbGluZyB0ZXJtaW5hbC4KKyAgICAgICAgICAgIEZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXRCYWtlIHdpbGwgd3JpdGUgdGhlIGZ1bmN0aW9ucyB0byBmaWxlcyBzaW1pbGFyIHRvIHRoZSB3YXkKKyAgICAgICAgICAgIHNoZWxsIHRhc2tzIGFyZSBoYW5kbGVkLgorICAgICAgICAgICAgTG9nZ2luZyB3aWxsIGJlIGhhbmRsZWQgaW4gYSB3YXkgc2ltaWxhciB0byBzaGVsbCB0YXNrcyBhcyB3ZWxsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIGFsbCB0aGUgdGFza3MgaGF2ZSBiZWVuIGNvbXBsZXRlZCBCaXRCYWtlIGV4aXRzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHJ1bm5pbmcgYSB0YXNrLCBCaXRCYWtlIHRpZ2h0bHkgY29udHJvbHMgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudAorICAgICAgICAgICAgb2YgdGhlIGJ1aWxkIHRhc2tzIHRvIG1ha2Ugc3VyZSB1bndhbnRlZCBjb250YW1pbmF0aW9uIGZyb20gdGhlIGJ1aWxkIG1hY2hpbmUKKyAgICAgICAgICAgIGNhbm5vdCBpbmZsdWVuY2UgdGhlIGJ1aWxkLgorICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBpZiB5b3UgZG8gd2FudCBzb21ldGhpbmcgdG8gZ2V0IHBhc3NlZCBpbnRvIHRoZSBidWlsZAorICAgICAgICAgICAgdGFzaydzIGVudmlyb25tZW50LCB5b3UgbXVzdCB0YWtlIGEgZmV3IHN0ZXBzOgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UZWxsIEJpdEJha2UgdG8gbG9hZCB3aGF0IHlvdSB3YW50IGZyb20gdGhlIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIGRhdGEgc3RvcmUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZG8gc28gdGhyb3VnaCB0aGUgPGZpbGVuYW1lPkJCX0VOVl9FWFRSQVdISVRFPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBhc3N1bWUgeW91IHdhbnQgdG8gcHJldmVudCB0aGUgYnVpbGQgc3lzdGVtIGZyb20KKyAgICAgICAgICAgICAgICAgICAgYWNjZXNzaW5nIHlvdXIgPGZpbGVuYW1lPiRIT01FLy5jY2FjaGU8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZCB0ZWxscyBCaXRCYWtlIHRvIGxvYWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNDQUNIRV9ESVI8L2ZpbGVuYW1lPiBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbnRvIHRoZSBkYXRhCisgICAgICAgICAgICAgICAgICAgIHN0b3JlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGV4cG9ydCBCQl9FTlZfRVhUUkFXSElURT0iJEJCX0VOVl9FWFRSQVdISVRFIENDQUNIRV9ESVIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGVsbCBCaXRCYWtlIHRvIGV4cG9ydCB3aGF0IHlvdSBoYXZlIGxvYWRlZCBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBzdG9yZSB0byB0aGUgdGFzayBlbnZpcm9ubWVudCBvZiBldmVyeSBydW5uaW5nIHRhc2suCisgICAgICAgICAgICAgICAgICAgIExvYWRpbmcgc29tZXRoaW5nIGZyb20gdGhlIGVudmlyb25tZW50IGludG8gdGhlIGRhdGEgc3RvcmUKKyAgICAgICAgICAgICAgICAgICAgKHByZXZpb3VzIHN0ZXApIG9ubHkgbWFrZXMgaXQgYXZhaWxhYmxlIGluIHRoZSBkYXRhc3RvcmUuCisgICAgICAgICAgICAgICAgICAgIFRvIGV4cG9ydCBpdCB0byB0aGUgdGFzayBlbnZpcm9ubWVudCBvZiBldmVyeSBydW5uaW5nIHRhc2ssCisgICAgICAgICAgICAgICAgICAgIHVzZSBhIGNvbW1hbmQgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBvciBkaXN0cm8gY29uZmlndXJhdGlvbiBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGV4cG9ydCBDQ0FDSEVfRElSCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIEEgc2lkZSBlZmZlY3Qgb2YgdGhlIHByZXZpb3VzIHN0ZXBzIGlzIHRoYXQgQml0QmFrZSByZWNvcmRzIHRoZSB2YXJpYWJsZQorICAgICAgICAgICAgYXMgYSBkZXBlbmRlbmN5IG9mIHRoZSBidWlsZCBwcm9jZXNzIGluIHRoaW5ncyBsaWtlIHRoZSBzaGFyZWQgc3RhdGUKKyAgICAgICAgICAgIGNoZWNrc3Vtcy4KKyAgICAgICAgICAgIElmIGRvaW5nIHNvIHJlc3VsdHMgaW4gdW5uZWNlc3NhcnkgcmVidWlsZHMgb2YgdGFza3MsIHlvdSBjYW4gd2hpdGVsaXN0IHRoZQorICAgICAgICAgICAgdmFyaWFibGUgc28gdGhhdCB0aGUgc2hhcmVkIHN0YXRlIGNvZGUgaWdub3JlcyB0aGUgZGVwZW5kZW5jeSB3aGVuIGl0IGNyZWF0ZXMKKyAgICAgICAgICAgIGNoZWNrc3Vtcy4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGlzIHByb2Nlc3MsIHNlZSB0aGUgPGZpbGVuYW1lPkJCX0hBU0hCQVNFX1dISVRFTElTVDwvZmlsZW5hbWU+CisgICAgICAgICAgICBleGFtcGxlIGluIHRoZSAiPGxpbmsgbGlua2VuZD0nY2hlY2tzdW1zJz5DaGVja3N1bXMgKFNpZ25hdHVyZXMpPC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtYml0YmFrZS1jb21tYW5kbGluZSc+CisgICAgICAgIDx0aXRsZT5CaXRCYWtlIENvbW1hbmQgTGluZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb2xsb3dpbmcgaXMgdGhlIEJpdEJha2UgaGVscCBvdXRwdXQ6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2NyZWVuPgorJCBiaXRiYWtlIC0taGVscAorVXNhZ2U6IGJpdGJha2UgW29wdGlvbnNdIFtyZWNpcGVuYW1lL3RhcmdldCAuLi5dCisKKyAgICBFeGVjdXRlcyB0aGUgc3BlY2lmaWVkIHRhc2sgKGRlZmF1bHQgaXMgJ2J1aWxkJykgZm9yIGEgZ2l2ZW4gc2V0IG9mIHRhcmdldCByZWNpcGVzICguYmIgZmlsZXMpLgorICAgIEl0IGlzIGFzc3VtZWQgdGhlcmUgaXMgYSBjb25mL2JibGF5ZXJzLmNvbmYgYXZhaWxhYmxlIGluIGN3ZCBvciBpbiBCQlBBVEggd2hpY2gKKyAgICB3aWxsIHByb3ZpZGUgdGhlIGxheWVyLCBCQkZJTEVTIGFuZCBvdGhlciBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgorCitPcHRpb25zOgorICAtLXZlcnNpb24gICAgICAgICAgICAgc2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQKKyAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgLWIgQlVJTERGSUxFLCAtLWJ1aWxkZmlsZT1CVUlMREZJTEUKKyAgICAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGUgdGFza3MgZnJvbSBhIHNwZWNpZmljIC5iYiByZWNpcGUgZGlyZWN0bHkuCisgICAgICAgICAgICAgICAgICAgICAgICBXQVJOSU5HOiBEb2VzIG5vdCBoYW5kbGUgYW55IGRlcGVuZGVuY2llcyBmcm9tIG90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzLgorICAtaywgLS1jb250aW51ZSAgICAgICAgQ29udGludWUgYXMgbXVjaCBhcyBwb3NzaWJsZSBhZnRlciBhbiBlcnJvci4gV2hpbGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgdGhhdCBmYWlsZWQgYW5kIGFueXRoaW5nIGRlcGVuZGluZyBvbiBpdCBjYW5ub3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlIGJ1aWx0LCBhcyBtdWNoIGFzIHBvc3NpYmxlIHdpbGwgYmUgYnVpbHQgYmVmb3JlCisgICAgICAgICAgICAgICAgICAgICAgICBzdG9wcGluZy4KKyAgLWEsIC0tdHJ5YWx0Y29uZmlncyAgIENvbnRpbnVlIHdpdGggYnVpbGRzIGJ5IHRyeWluZyB0byB1c2UgYWx0ZXJuYXRpdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVycyB3aGVyZSBwb3NzaWJsZS4KKyAgLWYsIC0tZm9yY2UgICAgICAgICAgIEZvcmNlIHRoZSBzcGVjaWZpZWQgdGFyZ2V0cy90YXNrIHRvIHJ1biAoaW52YWxpZGF0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICBhbnkgZXhpc3Rpbmcgc3RhbXAgZmlsZSkuCisgIC1jIENNRCwgLS1jbWQ9Q01EICAgICBTcGVjaWZ5IHRoZSB0YXNrIHRvIGV4ZWN1dGUuIFRoZSBleGFjdCBvcHRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgZGVwZW5kIG9uIHRoZSBtZXRhZGF0YS4gU29tZSBleGFtcGxlcyBtaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgYmUgJ2NvbXBpbGUnIG9yICdwb3B1bGF0ZV9zeXNyb290JyBvciAnbGlzdHRhc2tzJyBtYXkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdpdmUgYSBsaXN0IG9mIHRoZSB0YXNrcyBhdmFpbGFibGUuCisgIC1DIElOVkFMSURBVEVfU1RBTVAsIC0tY2xlYXItc3RhbXA9SU5WQUxJREFURV9TVEFNUAorICAgICAgICAgICAgICAgICAgICAgICAgSW52YWxpZGF0ZSB0aGUgc3RhbXAgZm9yIHRoZSBzcGVjaWZpZWQgdGFzayBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAnY29tcGlsZScgYW5kIHRoZW4gcnVuIHRoZSBkZWZhdWx0IHRhc2sgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIHRhcmdldChzKS4KKyAgLXIgUFJFRklMRSwgLS1yZWFkPVBSRUZJTEUKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlYWQgdGhlIHNwZWNpZmllZCBmaWxlIGJlZm9yZSBiaXRiYWtlLmNvbmYuCisgIC1SIFBPU1RGSUxFLCAtLXBvc3RyZWFkPVBPU1RGSUxFCisgICAgICAgICAgICAgICAgICAgICAgICBSZWFkIHRoZSBzcGVjaWZpZWQgZmlsZSBhZnRlciBiaXRiYWtlLmNvbmYuCisgIC12LCAtLXZlcmJvc2UgICAgICAgICBPdXRwdXQgbW9yZSBsb2cgbWVzc2FnZSBkYXRhIHRvIHRoZSB0ZXJtaW5hbC4KKyAgLUQsIC0tZGVidWcgICAgICAgICAgIEluY3JlYXNlIHRoZSBkZWJ1ZyBsZXZlbC4gWW91IGNhbiBzcGVjaWZ5IHRoaXMgbW9yZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhhbiBvbmNlLgorICAtbiwgLS1kcnktcnVuICAgICAgICAgRG9uJ3QgZXhlY3V0ZSwganVzdCBnbyB0aHJvdWdoIHRoZSBtb3Rpb25zLgorICAtUywgLS1kdW1wLXNpZ25hdHVyZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIERvbid0IGV4ZWN1dGUsIGp1c3QgZHVtcCBvdXQgdGhlIHNpZ25hdHVyZQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0aW9uIGluZm9ybWF0aW9uLgorICAtcCwgLS1wYXJzZS1vbmx5ICAgICAgUXVpdCBhZnRlciBwYXJzaW5nIHRoZSBCQiByZWNpcGVzLgorICAtcywgLS1zaG93LXZlcnNpb25zICAgU2hvdyBjdXJyZW50IGFuZCBwcmVmZXJyZWQgdmVyc2lvbnMgb2YgYWxsIHJlY2lwZXMuCisgIC1lLCAtLWVudmlyb25tZW50ICAgICBTaG93IHRoZSBnbG9iYWwgb3IgcGVyLXBhY2thZ2UgZW52aXJvbm1lbnQgY29tcGxldGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdmFyaWFibGVzIHdlcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldC9jaGFuZ2VkLgorICAtZywgLS1ncmFwaHZpeiAgICAgICAgU2F2ZSBkZXBlbmRlbmN5IHRyZWUgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHMgaW4gdGhlIGRvdCBzeW50YXguCisgIC1JIEVYVFJBX0FTU1VNRV9QUk9WSURFRCwgLS1pZ25vcmUtZGVwcz1FWFRSQV9BU1NVTUVfUFJPVklERUQKKyAgICAgICAgICAgICAgICAgICAgICAgIEFzc3VtZSB0aGVzZSBkZXBlbmRlbmNpZXMgZG9uJ3QgZXhpc3QgYW5kIGFyZSBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCAoZXF1aXZhbGVudCB0byBBU1NVTUVfUFJPVklERUQpLiBVc2VmdWwgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIG1ha2UgZGVwZW5kZW5jeSBncmFwaHMgbW9yZSBhcHBlYWxpbmcKKyAgLWwgREVCVUdfRE9NQUlOUywgLS1sb2ctZG9tYWlucz1ERUJVR19ET01BSU5TCisgICAgICAgICAgICAgICAgICAgICAgICBTaG93IGRlYnVnIGxvZ2dpbmcgZm9yIHRoZSBzcGVjaWZpZWQgbG9nZ2luZyBkb21haW5zCisgIC1QLCAtLXByb2ZpbGUgICAgICAgICBQcm9maWxlIHRoZSBjb21tYW5kIGFuZCBzYXZlIHJlcG9ydHMuCisgIC11IFVJLCAtLXVpPVVJICAgICAgICBUaGUgdXNlciBpbnRlcmZhY2UgdG8gdXNlIChlLmcuIGtub3R0eSwgaG9iLCBkZXBleHApLgorICAtdCBTRVJWRVJUWVBFLCAtLXNlcnZlcnR5cGU9U0VSVkVSVFlQRQorICAgICAgICAgICAgICAgICAgICAgICAgQ2hvb3NlIHdoaWNoIHNlcnZlciB0byB1c2UsIHByb2Nlc3Mgb3IgeG1scnBjLgorICAtLXJldmlzaW9ucy1jaGFuZ2VkICAgU2V0IHRoZSBleGl0IGNvZGUgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdXBzdHJlYW0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0aW5nIHJldmlzaW9ucyBoYXZlIGNoYW5nZWQgb3Igbm90LgorICAtLXNlcnZlci1vbmx5ICAgICAgICAgUnVuIGJpdGJha2Ugd2l0aG91dCBhIFVJLCBvbmx5IHN0YXJ0aW5nIGEgc2VydmVyCisgICAgICAgICAgICAgICAgICAgICAgICAoY29va2VyKSBwcm9jZXNzLgorICAtQiBCSU5ELCAtLWJpbmQ9QklORCAgVGhlIG5hbWUvYWRkcmVzcyBmb3IgdGhlIGJpdGJha2Ugc2VydmVyIHRvIGJpbmQgdG8uCisgIC0tbm8tc2V0c2NlbmUgICAgICAgICBEbyBub3QgcnVuIGFueSBzZXRzY2VuZSB0YXNrcy4gc3N0YXRlIHdpbGwgYmUgaWdub3JlZAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGV2ZXJ5dGhpbmcgbmVlZGVkLCBidWlsdC4KKyAgLS1yZW1vdGUtc2VydmVyPVJFTU9URV9TRVJWRVIKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbm5lY3QgdG8gdGhlIHNwZWNpZmllZCBzZXJ2ZXIuCisgIC1tLCAtLWtpbGwtc2VydmVyICAgICBUZXJtaW5hdGUgdGhlIHJlbW90ZSBzZXJ2ZXIuCisgIC0tb2JzZXJ2ZS1vbmx5ICAgICAgICBDb25uZWN0IHRvIGEgc2VydmVyIGFzIGFuIG9ic2VydmluZy1vbmx5IGNsaWVudC4KKyAgICAgICAgPC9zY3JlZW4+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi1iaXRiYWtlLWZldGNoZXJzJz4KKyAgICAgICAgPHRpdGxlPkZldGNoZXJzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgYWxzbyBjb250YWlucyBhIHNldCBvZiAiZmV0Y2hlciIgbW9kdWxlcyB0aGF0IGFsbG93CisgICAgICAgICAgICByZXRyaWV2YWwgb2Ygc291cmNlIGNvZGUgZnJvbSB2YXJpb3VzIHR5cGVzIG9mIHNvdXJjZXMuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgQml0QmFrZSBjYW4gZ2V0IHNvdXJjZSBjb2RlIGZyb20gYSBkaXNrIHdpdGggdGhlIG1ldGFkYXRhLCBmcm9tIHdlYnNpdGVzLAorICAgICAgICAgICAgZnJvbSByZW1vdGUgc2hlbGwgYWNjb3VudHMsIG9yIGZyb20gU291cmNlIENvZGUgTWFuYWdlbWVudCAoU0NNKSBzeXN0ZW1zCisgICAgICAgICAgICBsaWtlIDxmaWxlbmFtZT5jdnMvc3VidmVyc2lvbi9naXQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRmV0Y2hlcnMgYXJlIHVzdWFsbHkgdHJpZ2dlcmVkIGJ5IGVudHJpZXMgaW4KKyAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+U1JDX1VSSTwvbGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3B0aW9ucyBhbmQgZm9ybWF0cyBvZiBlbnRyaWVzIGZvciBzcGVjaWZpYworICAgICAgICAgICAgZmV0Y2hlcnMgaW4gdGhlIEJpdEJha2UgbWFudWFsIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS9kb2MvbWFudWFsPC9maWxlbmFtZT4gZGlyZWN0b3J5IG9mIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmUgdXNlZnVsIGZlYXR1cmUgZm9yIGNlcnRhaW4gU291cmNlIENvZGUgTWFuYWdlciAoU0NNKSBmZXRjaGVycyBpcyB0aGUgYWJpbGl0eSB0bworICAgICAgICAgICAgImF1dG8tdXBkYXRlIiB3aGVuIHRoZSB1cHN0cmVhbSBTQ00gY2hhbmdlcyB2ZXJzaW9uLgorICAgICAgICAgICAgU2luY2UgdGhpcyBhYmlsaXR5IHJlcXVpcmVzIGNlcnRhaW4gZnVuY3Rpb25hbGl0eSBmcm9tIHRoZSBTQ00sIG5vdCBhbGwKKyAgICAgICAgICAgIHN5c3RlbXMgc3VwcG9ydCBpdC4KKyAgICAgICAgICAgIEN1cnJlbnRseSBTdWJ2ZXJzaW9uLCBCYXphYXIgYW5kIHRvIGEgbGltaXRlZCBleHRlbnQsIEdpdCBzdXBwb3J0IHRoZSBhYmlsaXR5IHRvICJhdXRvLXVwZGF0ZSIuCisgICAgICAgICAgICBUaGlzIGZlYXR1cmUgd29ya3MgdXNpbmcgdGhlIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU1JDUkVWJz5TUkNSRVY8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BsYXRkZXYtYXBwZGV2LXNyY3Jldic+VXNpbmcgYW4gRXh0ZXJuYWwgU0NNPC91bGluaz4iIHNlY3Rpb24KKyAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgPC9zZWN0aW9uPgorCis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00IHNwZWxsIHNwZWxsbGFuZz1lbl9nYgorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtY2xhc3Nlcy54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtY2xhc3Nlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg3YzlmZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1jbGFzc2VzLnhtbApAQCAtMCwwICsxLDM1MzkgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdyZWYtY2xhc3Nlcyc+Cis8dGl0bGU+Q2xhc3NlczwvdGl0bGU+CisKKzxwYXJhPgorICAgIENsYXNzIGZpbGVzIGFyZSB1c2VkIHRvIGFic3RyYWN0IGNvbW1vbiBmdW5jdGlvbmFsaXR5IGFuZCBzaGFyZSBpdCBhbW9uZ3N0CisgICAgbXVsdGlwbGUgcmVjaXBlICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4pIGZpbGVzLgorICAgIFRvIHVzZSBhIGNsYXNzIGZpbGUsIHlvdSBzaW1wbHkgbWFrZSBzdXJlIHRoZSByZWNpcGUgaW5oZXJpdHMgdGhlIGNsYXNzLgorICAgIEluIG1vc3QgY2FzZXMsIHdoZW4gYSByZWNpcGUgaW5oZXJpdHMgYSBjbGFzcyBpdCBpcyBlbm91Z2ggdG8gZW5hYmxlIGl0cworICAgIGZlYXR1cmVzLgorICAgIFRoZXJlIGFyZSBjYXNlcywgaG93ZXZlciwgd2hlcmUgaW4gdGhlIHJlY2lwZSB5b3UgbWlnaHQgbmVlZCB0byBzZXQKKyAgICB2YXJpYWJsZXMgb3Igb3ZlcnJpZGUgc29tZSBkZWZhdWx0IGJlaGF2aW9yLgorPC9wYXJhPgorCis8cGFyYT4KKyAgICBBbnkgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4gdXN1YWxseQorICAgIGZvdW5kIGluIGEgcmVjaXBlIGNhbiBhbHNvIGJlIHBsYWNlZCBpbiBhIGNsYXNzIGZpbGUuCisgICAgQ2xhc3MgZmlsZXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlIGV4dGVuc2lvbiA8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPgorICAgIGFuZCBhcmUgdXN1YWxseSBwbGFjZWQgaW4gYSA8ZmlsZW5hbWU+Y2xhc3Nlcy88L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYmVuZWF0aAorICAgIHRoZSA8ZmlsZW5hbWU+bWV0YSovPC9maWxlbmFtZT4gZGlyZWN0b3J5IGZvdW5kIGluIHRoZQorICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICBDbGFzcyBmaWxlcyBjYW4gYWxzbyBiZSBwb2ludGVkIHRvIGJ5CisgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVSUxERElSJz48ZmlsZW5hbWU+QlVJTERESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAoZS5nLiA8ZmlsZW5hbWU+YnVpbGQvPC9maWxlbmFtZT4pIGluIHRoZSBzYW1lIHdheSBhcworICAgIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+IGZpbGVzIGluIHRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICBDbGFzcyBmaWxlcyBhcmUgc2VhcmNoZWQgZm9yIGluCisgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgIHVzaW5nIHRoZSBzYW1lIG1ldGhvZCBieSB3aGljaCA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiBmaWxlcyBhcmUKKyAgICBzZWFyY2hlZC4KKzwvcGFyYT4KKworPHBhcmE+CisgICAgVGhpcyBjaGFwdGVyIGRpc2N1c3NlcyBvbmx5IHRoZSBtb3N0IHVzZWZ1bCBhbmQgaW1wb3J0YW50IGNsYXNzZXMuCisgICAgT3RoZXIgY2xhc3NlcyBkbyBleGlzdCB3aXRoaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXM8L2ZpbGVuYW1lPgorICAgIGRpcmVjdG9yeSBpbiB0aGUKKyAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgWW91IGNhbiByZWZlcmVuY2UgdGhlIDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+IGZpbGVzIGRpcmVjdGx5CisgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCis8L3BhcmE+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1hbGxhcmNoJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmFsbGFyY2guYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmFsbGFyY2g8L2ZpbGVuYW1lPiBjbGFzcyBpcyBpbmhlcml0ZWQKKyAgICAgICAgYnkgcmVjaXBlcyB0aGF0IGRvIG5vdCBwcm9kdWNlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvdXRwdXQuCisgICAgICAgIFRoZSBjbGFzcyBkaXNhYmxlcyBmdW5jdGlvbmFsaXR5IHRoYXQgaXMgbm9ybWFsbHkgbmVlZGVkIGZvciByZWNpcGVzCisgICAgICAgIHRoYXQgcHJvZHVjZSBleGVjdXRhYmxlIGJpbmFyaWVzIChzdWNoIGFzIGJ1aWxkaW5nIHRoZSBjcm9zcy1jb21waWxlcgorICAgICAgICBhbmQgYSBDIGxpYnJhcnkgYXMgcHJlLXJlcXVpc2l0ZXMsIGFuZCBzcGxpdHRpbmcgb3V0IG9mIGRlYnVnIHN5bWJvbHMKKyAgICAgICAgZHVyaW5nIHBhY2thZ2luZykuCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgVW5saWtlIGUuZy4gRGViaWFuLCBPcGVuRW1iZWRkZWQgcmVjaXBlcyB0aGF0IHByb2R1Y2UgcGFja2FnZXMKKyAgICAgICAgICAgIHdoaWNoCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgb24KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UVU5FX1BLR0FSQ0gnPjxmaWxlbmFtZT5UVU5FX1BLR0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHBhY2thZ2VzIHNob3VsZCBuZXZlciBiZSBtYWRlIDxmaWxlbmFtZT5hbGxhcmNoPC9maWxlbmFtZT4sIGV2ZW4KKyAgICAgICAgICAgIGlmIHRoZXkgZG8gbm90IHByb2R1Y2UgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG91dHB1dC4gVGhpcyB3b3VsZAorICAgICAgICAgICAgY2F1c2UgdGhlIGRvX3BhY2thZ2Vfd3JpdGVfKiB0YXNrcyB0byBoYXZlIGRpZmZlcmVudCBzaWduYXR1cmVzCisgICAgICAgICAgICBmb3IKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC9saW5rPnMKKyAgICAgICAgICAgIHdpdGggZGlmZmVyZW50CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVFVORV9QS0dBUkNIJz48ZmlsZW5hbWU+VFVORV9QS0dBUkNIPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgdGh1cyB1bm5lY2Vzc2FyeSByZWJ1aWxkcyBldmVyeSBzaW5nbGUgdGltZSBhbiBpbWFnZSBmb3IgYSBkaWZmZXJlbnQKKyAgICAgICAgICAgIE1BQ0hJTkUgaXMgYnVpbHQgKGV2ZW4gd2l0aG91dCBhbnkgY2hhbmdlIHRvIHRoZSByZWNpcGUpLgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEJ5IGRlZmF1bHQsIGFsbCByZWNpcGVzIGluaGVyaXQgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJhc2UnPjxmaWxlbmFtZT5iYXNlPC9maWxlbmFtZT48L2xpbms+IGFuZAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlJz48ZmlsZW5hbWU+cGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzc2VzLCB3aGljaCBlbmFibGUgZnVuY3Rpb25hbGl0eQorICAgICAgICBuZWVkZWQgZm9yIHJlY2lwZXMgdGhhdCBwcm9kdWNlIGV4ZWN1dGFibGUgb3V0cHV0LgorICAgICAgICBJZiB5b3VyIHJlY2lwZSwgZm9yIGV4YW1wbGUsIG9ubHkgcHJvZHVjZXMgcGFja2FnZXMgdGhhdCBjb250YWluCisgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMsIG1lZGlhIGZpbGVzLCBvciBzY3JpcHRzIChlLmcuIFB5dGhvbiBhbmQgUGVybCksCisgICAgICAgIHRoZW4gaXQgc2hvdWxkIGluaGVyaXQgdGhlIDxmaWxlbmFtZT5hbGxhcmNoPC9maWxlbmFtZT4gY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtYXJjaGl2ZXInPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+YXJjaGl2ZXIuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmFyY2hpdmVyPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgcmVsZWFzaW5nCisgICAgICAgIHNvdXJjZSBjb2RlIGFuZCBvdGhlciBtYXRlcmlhbHMgd2l0aCB0aGUgYmluYXJpZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBtb3JlIGRldGFpbHMgb24gdGhlIHNvdXJjZSBhcmNoaXZlciwgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWFpbnRhaW5pbmctb3Blbi1zb3VyY2UtbGljZW5zZS1jb21wbGlhbmNlLWR1cmluZy15b3VyLXByb2R1Y3RzLWxpZmVjeWNsZSc+TWFpbnRhaW5pbmcgT3BlbiBTb3VyY2UgTGljZW5zZSBDb21wbGlhbmNlIER1cmluZyBZb3VyIFByb2R1Y3QncyBMaWZlY3ljbGU8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIFlvdSBjYW4gYWxzbyBzZWUgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1BUkNISVZFUl9NT0RFJz48ZmlsZW5hbWU+QVJDSElWRVJfTU9ERTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZhcmlhYmxlIGZsYWdzICh2YXJmbGFncykKKyAgICAgICAgdGhhdCBoZWxwIGNvbnRyb2wgYXJjaGl2ZSBjcmVhdGlvbi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+YXV0b3Rvb2xzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyBBdXRvdG9vbGVkCisgICAgICAgIHBhY2thZ2VzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmF1dG9jb25mPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5hdXRvbWFrZTwvZmlsZW5hbWU+LAorICAgICAgICBhbmQgPGZpbGVuYW1lPmxpYnRvb2w8L2ZpbGVuYW1lPiBicmluZyBzdGFuZGFyZGl6YXRpb24uCisgICAgICAgIFRoaXMgY2xhc3MgZGVmaW5lcyBhIHNldCBvZiB0YXNrcyAoY29uZmlndXJlLCBjb21waWxlIGV0Yy4pIHRoYXQKKyAgICAgICAgd29yayBmb3IgYWxsIEF1dG90b29sZWQgcGFja2FnZXMuCisgICAgICAgIEl0IHNob3VsZCB1c3VhbGx5IGJlIGVub3VnaCB0byBkZWZpbmUgYSBmZXcgc3RhbmRhcmQgdmFyaWFibGVzCisgICAgICAgIGFuZCB0aGVuIHNpbXBseSA8ZmlsZW5hbWU+aW5oZXJpdCBhdXRvdG9vbHM8L2ZpbGVuYW1lPi4KKyAgICAgICAgVGhpcyBjbGFzcyBjYW4gYWxzbyB3b3JrIHdpdGggc29mdHdhcmUgdGhhdCBlbXVsYXRlcyBBdXRvdG9vbHMuCisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNuZXctcmVjaXBlLWF1dG90b29sZWQtcGFja2FnZSc+QXV0b3Rvb2xlZCBQYWNrYWdlPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHVzZXMgb3V0LW9mLXRyZWUgYnVpbGRzCisgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItQic+PGZpbGVuYW1lPkI8L2ZpbGVuYW1lPjwvbGluaz4gPGZpbGVuYW1lPiE9PC9maWxlbmFtZT4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgSWYgdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0IGJ5IGEgcmVjaXBlIGRvZXMgbm90IHN1cHBvcnQKKyAgICAgICAgdXNpbmcgb3V0LW9mLXRyZWUgYnVpbGRzLCB5b3Ugc2hvdWxkIGhhdmUgdGhlIHJlY2lwZSBpbmhlcml0IHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMtYnJva2Vuc2VwJz48ZmlsZW5hbWU+YXV0b3Rvb2xzLWJyb2tlbnNlcDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSXQncyB1c2VmdWwgdG8gaGF2ZSBzb21lIGlkZWEgb2YgaG93IHRoZSB0YXNrcyBkZWZpbmVkIGJ5IHRoaXMgY2xhc3Mgd29yaworICAgICAgICBhbmQgd2hhdCB0aGV5IGRvIGJlaGluZCB0aGUgc2NlbmVzLgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvbGluaz4gLQorICAgICAgICAgICAgICAgIFJlZ2VuZXJhdGVzIHRoZQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBzY3JpcHQgKHVzaW5nIDxmaWxlbmFtZT5hdXRvcmVjb25mPC9maWxlbmFtZT4pIGFuZCB0aGVuIGxhdW5jaGVzIGl0CisgICAgICAgICAgICAgICAgd2l0aCBhIHN0YW5kYXJkIHNldCBvZiBhcmd1bWVudHMgdXNlZCBkdXJpbmcgY3Jvc3MtY29tcGlsYXRpb24uCisgICAgICAgICAgICAgICAgWW91IGNhbiBwYXNzIGFkZGl0aW9uYWwgcGFyYW1ldGVycyB0byA8ZmlsZW5hbWU+Y29uZmlndXJlPC9maWxlbmFtZT4gdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FQ09ORic+RVhUUkFfT0VDT05GPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb21waWxlJz48ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+PC9saW5rPiAtIFJ1bnMgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiB3aXRoCisgICAgICAgICAgICAgICAgYXJndW1lbnRzIHRoYXQgc3BlY2lmeSB0aGUgY29tcGlsZXIgYW5kIGxpbmtlci4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHBhc3MgYWRkaXRpb25hbCBhcmd1bWVudHMgdGhyb3VnaAorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FTUFLRSc+RVhUUkFfT0VNQUtFPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC9saW5rPiAtIFJ1bnMgPGZpbGVuYW1lPm1ha2UgaW5zdGFsbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgYW5kIHBhc3NlcyBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUQnPjxmaWxlbmFtZT5EPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGFzIDxmaWxlbmFtZT5ERVNURElSPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWF1dG90b29scy1icm9rZW5zZXAnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+YXV0b3Rvb2xzLWJyb2tlbnNlcC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+YXV0b3Rvb2xzLWJyb2tlbnNlcDwvZmlsZW5hbWU+IGNsYXNzIGJlaGF2ZXMgdGhlIHNhbWUKKyAgICAgICAgYXMgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWF1dG90b29scyc+PGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcyBidXQgYnVpbGRzIHdpdGgKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUInPjxmaWxlbmFtZT5CPC9maWxlbmFtZT48L2xpbms+ID09CisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgVGhpcyBtZXRob2QgaXMgdXNlZnVsIHdoZW4gb3V0LW9mLXRyZWUgYnVpbGQgc3VwcG9ydCBpcyBlaXRoZXIgbm90CisgICAgICAgIHByZXNlbnQgb3IgaXMgYnJva2VuLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgb3V0LW9mLXRyZWUgc3VwcG9ydCBiZSBmaXhlZCBhbmQgdXNlZAorICAgICAgICAgICAgaWYgYXQgYWxsIHBvc3NpYmxlLgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtYmFzZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5iYXNlPC9maWxlbmFtZT4gY2xhc3MgaXMgc3BlY2lhbCBpbiB0aGF0IGV2ZXJ5CisgICAgICAgIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlIGltcGxpY2l0bHkgaW5oZXJpdHMgdGhlIGNsYXNzLgorICAgICAgICBUaGlzIGNsYXNzIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciBzdGFuZGFyZCBiYXNpYworICAgICAgICB0YXNrcyBzdWNoIGFzIGZldGNoaW5nLCB1bnBhY2tpbmcsIGNvbmZpZ3VyaW5nIChlbXB0eSBieSBkZWZhdWx0KSwKKyAgICAgICAgY29tcGlsaW5nIChydW5zIGFueSA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPiBwcmVzZW50KSwgaW5zdGFsbGluZworICAgICAgICAoZW1wdHkgYnkgZGVmYXVsdCkgYW5kIHBhY2thZ2luZyAoZW1wdHkgYnkgZGVmYXVsdCkuCisgICAgICAgIFRoZXNlIGNsYXNzZXMgYXJlIG9mdGVuIG92ZXJyaWRkZW4gb3IgZXh0ZW5kZWQgYnkgb3RoZXIgY2xhc3NlcworICAgICAgICBzdWNoIGFzIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMnPjxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3Mgb3IgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2UnPjxmaWxlbmFtZT5wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzLgorICAgICAgICBUaGUgY2xhc3MgYWxzbyBjb250YWlucyBzb21lIGNvbW1vbmx5IHVzZWQgZnVuY3Rpb25zIHN1Y2ggYXMKKyAgICAgICAgPGZpbGVuYW1lPm9lX3J1bm1ha2U8L2ZpbGVuYW1lPi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1iaW4tcGFja2FnZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5iaW5fcGFja2FnZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+YmluX3BhY2thZ2U8L2ZpbGVuYW1lPiBjbGFzcyBpcyBhCisgICAgICAgIGhlbHBlciBjbGFzcyBmb3IgcmVjaXBlcyB0aGF0IGV4dHJhY3QgdGhlIGNvbnRlbnRzIG9mIGEgYmluYXJ5IHBhY2thZ2UKKyAgICAgICAgKGUuZy4gYW4gUlBNKSBhbmQgaW5zdGFsbCB0aG9zZSBjb250ZW50cyByYXRoZXIgdGhhbiBidWlsZGluZyB0aGUKKyAgICAgICAgYmluYXJ5IGZyb20gc291cmNlLgorICAgICAgICBUaGUgYmluYXJ5IHBhY2thZ2UgaXMgZXh0cmFjdGVkIGFuZCBuZXcgcGFja2FnZXMgaW4gdGhlIGNvbmZpZ3VyZWQKKyAgICAgICAgb3V0cHV0IHBhY2thZ2UgZm9ybWF0IGFyZSBjcmVhdGVkLgorICAgICAgICBFeHRyYWN0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgcHJvcHJpZXRhcnkgYmluYXJpZXMgaXMgYSBnb29kIGV4YW1wbGUKKyAgICAgICAgdXNlIGZvciB0aGlzIGNsYXNzLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIEZvciBSUE1zIGFuZCBvdGhlciBwYWNrYWdlcyB0aGF0IGRvIG5vdCBjb250YWluIGEgc3ViZGlyZWN0b3J5LAorICAgICAgICAgICAgeW91IHNob3VsZCBzcGVjaWZ5IGEgInN1YmRpciIgcGFyYW1ldGVyLgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHdoZXJlIDxmaWxlbmFtZT4ke0JQfTwvZmlsZW5hbWU+IGlzIHVzZWQgc28gdGhhdAorICAgICAgICAgICAgdGhlIGZpbGVzIGFyZSBleHRyYWN0ZWQgaW50byB0aGUgc3ViZGlyZWN0b3J5IGV4cGVjdGVkIGJ5IHRoZQorICAgICAgICAgICAgZGVmYXVsdCB2YWx1ZSBvZgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImh0dHA6Ly9leGFtcGxlLmNvbS9kb3dubG9hZHMvc29tZXBhY2thZ2UucnBtO3N1YmRpcj0ke0JQfSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWJpbmNvbmZpZyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5iaW5jb25maWcuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmJpbmNvbmZpZzwvZmlsZW5hbWU+IGNsYXNzIGhlbHBzIHRvIGNvcnJlY3QgcGF0aHMgaW4KKyAgICAgICAgc2hlbGwgc2NyaXB0cy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQmVmb3JlIDxmaWxlbmFtZT5wa2ctY29uZmlnPC9maWxlbmFtZT4gaGFkIGJlY29tZSB3aWRlc3ByZWFkLCBsaWJyYXJpZXMKKyAgICAgICAgc2hpcHBlZCBzaGVsbCBzY3JpcHRzIHRvIGdpdmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpYnJhcmllcyBhbmQKKyAgICAgICAgaW5jbHVkZSBwYXRocyBuZWVkZWQgdG8gYnVpbGQgc29mdHdhcmUgKHVzdWFsbHkgbmFtZWQKKyAgICAgICAgPGZpbGVuYW1lPkxJQk5BTUUtY29uZmlnPC9maWxlbmFtZT4pLgorICAgICAgICBUaGlzIGNsYXNzIGFzc2lzdHMgYW55IHJlY2lwZSB1c2luZyBzdWNoIHNjcmlwdHMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIER1cmluZyBzdGFnaW5nLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpbnN0YWxscyBzdWNoIHNjcmlwdHMKKyAgICAgICAgaW50byB0aGUgPGZpbGVuYW1lPnN5c3Jvb3RzLzwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgSW5oZXJpdGluZyB0aGlzIGNsYXNzIHJlc3VsdHMgaW4gYWxsIHBhdGhzIGluIHRoZXNlIHNjcmlwdHMgYmVpbmcKKyAgICAgICAgY2hhbmdlZCB0byBwb2ludCBpbnRvIHRoZSA8ZmlsZW5hbWU+c3lzcm9vdHMvPC9maWxlbmFtZT4gZGlyZWN0b3J5IHNvCisgICAgICAgIHRoYXQgYWxsIGJ1aWxkcyB0aGF0IHVzZSB0aGUgc2NyaXB0IHVzZSB0aGUgY29ycmVjdCBkaXJlY3RvcmllcworICAgICAgICBmb3IgdGhlIGNyb3NzIGNvbXBpbGluZyBsYXlvdXQuCisgICAgICAgIFNlZSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJJTkNPTkZJR19HTE9CJz48ZmlsZW5hbWU+QklOQ09ORklHX0dMT0I8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtYmluY29uZmlnLWRpc2FibGVkJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmJpbmNvbmZpZy1kaXNhYmxlZC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEFuIGFsdGVybmF0aXZlIHZlcnNpb24gb2YgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJpbmNvbmZpZyc+PGZpbGVuYW1lPmJpbmNvbmZpZzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcywgd2hpY2ggZGlzYWJsZXMgYmluYXJ5IGNvbmZpZ3VyYXRpb24gc2NyaXB0cyBieSBtYWtpbmcgdGhlbQorICAgICAgICByZXR1cm4gYW4gZXJyb3IgaW4gZmF2b3Igb2YgdXNpbmcgPGZpbGVuYW1lPnBrZy1jb25maWc8L2ZpbGVuYW1lPgorICAgICAgICB0byBxdWVyeSB0aGUgaW5mb3JtYXRpb24uCisgICAgICAgIFRoZSBzY3JpcHRzIHRvIGJlIGRpc2FibGVkIHNob3VsZCBiZSBzcGVjaWZpZWQgdXNpbmcgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CSU5DT05GSUcnPjxmaWxlbmFtZT5CSU5DT05GSUc8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgd2l0aGluIHRoZSByZWNpcGUgaW5oZXJpdGluZyB0aGUgY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtYmxhY2tsaXN0Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmJsYWNrbGlzdC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+YmxhY2tsaXN0PC9maWxlbmFtZT4gY2xhc3MgcHJldmVudHMKKyAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZnJvbSBidWlsZGluZyBzcGVjaWZpYyByZWNpcGVzCisgICAgICAgIChibGFja2xpc3RzIHRoZW0pLgorICAgICAgICBUbyB1c2UgdGhpcyBjbGFzcywgaW5oZXJpdCB0aGUgY2xhc3MgZ2xvYmFsbHkgYW5kIHNldAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUE5CTEFDS0xJU1QnPjxmaWxlbmFtZT5QTkJMQUNLTElTVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBmb3IgZWFjaCByZWNpcGUgeW91IHdpc2ggdG8gYmxhY2tsaXN0LgorICAgICAgICBTcGVjaWZ5IHRoZSA8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YWx1ZSBhcyBhIHZhcmlhYmxlIGZsYWcgKHZhcmZsYWcpIGFuZCBwcm92aWRlIGEgcmVhc29uLCB3aGljaCBpcworICAgICAgICByZXBvcnRlZCwgaWYgdGhlIHBhY2thZ2UgaXMgcmVxdWVzdGVkIHRvIGJlIGJ1aWx0IGFzIHRoZSB2YWx1ZS4KKyAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGJsYWNrbGlzdCBhIHJlY2lwZSBjYWxsZWQgImV4b3RpY3dhcmUiLAorICAgICAgICB5b3UgYWRkIHRoZSBmb2xsb3dpbmcgdG8geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgIG9yIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSEVSSVQgKz0gImJsYWNrbGlzdCIKKyAgICAgUE5CTEFDS0xJU1RbZXhvdGljd2FyZV0gPSAiTm90IHN1cHBvcnRlZCBieSBvdXIgb3JnYW5pemF0aW9uLiIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWJsdWV0b290aCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5ibHVldG9vdGguYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmJsdWV0b290aDwvZmlsZW5hbWU+IGNsYXNzIGRlZmluZXMgYSB2YXJpYWJsZSB0aGF0CisgICAgICAgIGV4cGFuZHMgdG8gdGhlIHJlY2lwZSAocGFja2FnZSkgcHJvdmlkaW5nIGNvcmUKKyAgICAgICAgYmx1ZXRvb3RoIHN1cHBvcnQgb24gdGhlIHBsYXRmb3JtLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgZGV0YWlscyBvbiBob3cgdGhlIGNsYXNzIHdvcmtzLCBzZWUgdGhlCisgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvYmx1ZXRvb3RoLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZSBZb2N0bworICAgICAgICBQcm9qZWN0CisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1ib290LWRpcmVjdGRpc2snPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Ym9vdC1kaXJlY3RkaXNrLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5ib290LWRpcmVjdGRpc2s8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBjcmVhdGVzIGFuIGltYWdlIHRoYXQgY2FuIGJlIHBsYWNlZCBkaXJlY3RseSBvbnRvIGEgaGFyZCBkaXNrIHVzaW5nCisgICAgICAgIDxmaWxlbmFtZT5kZDwvZmlsZW5hbWU+IGFuZCB0aGVuIGJvb3RlZC4KKyAgICAgICAgVGhlIGltYWdlIHVzZXMgU1lTTElOVVguCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBlbmQgcmVzdWx0IGlzIGEgNTEyIGJvb3Qgc2VjdG9yIHBvcHVsYXRlZCB3aXRoIGEKKyAgICAgICAgTWFzdGVyIEJvb3QgUmVjb3JkIChNQlIpIGFuZCBwYXJ0aXRpb24gdGFibGUgZm9sbG93ZWQgYnkgYW4gTVNET1MKKyAgICAgICAgRkFUMTYgcGFydGl0aW9uIGNvbnRhaW5pbmcgU1lTTElOVVggYW5kIGEgTGludXgga2VybmVsIGNvbXBsZXRlZCBieQorICAgICAgICB0aGUgPGZpbGVuYW1lPmV4dDI8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmV4dDM8L2ZpbGVuYW1lPgorICAgICAgICByb290IGZpbGVzeXN0ZW1zLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWJvb3RpbWcnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Ym9vdGltZy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Ym9vdGltZzwvZmlsZW5hbWU+IGNsYXNzIGNyZWF0ZXMgYSBib290YWJsZQorICAgICAgICBpbWFnZSB1c2luZyBTWVNMSU5VWCwgeW91ciBrZXJuZWwsIGFuZCBhbiBvcHRpb25hbCBpbml0aWFsIFJBTSBkaXNrCisgICAgICAgICg8ZmlsZW5hbWU+aW5pdHJkPC9maWxlbmFtZT4pLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGVuIHlvdSB1c2UgdGhpcyBjbGFzcywgdHdvIHRoaW5ncyBoYXBwZW46CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgQSA8ZmlsZW5hbWU+LmhkZGltZzwvZmlsZW5hbWU+IGZpbGUgaXMgY3JlYXRlZC4KKyAgICAgICAgICAgICAgICBUaGlzIGZpbGUgaXMgYW4gTVNET1MgZmlsZXN5c3RlbSB0aGF0IGNvbnRhaW5zIFNZU0xJTlVYLAorICAgICAgICAgICAgICAgIGEga2VybmVsLCBhbiA8ZmlsZW5hbWU+aW5pdHJkPC9maWxlbmFtZT4sIGFuZCBhIHJvb3QgZmlsZXN5c3RlbQorICAgICAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgICAgIEFsbCB0aHJlZSBvZiB0aGVzZSBjYW4gYmUgd3JpdHRlbiB0byBoYXJkIGRyaXZlcyBkaXJlY3RseSBhbmQKKyAgICAgICAgICAgICAgICBhbHNvIGJvb3RlZCBvbiBhIFVTQiBmbGFzaCBkaXNrcyB1c2luZyA8ZmlsZW5hbWU+ZGQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBBIENEIDxmaWxlbmFtZT4uaXNvPC9maWxlbmFtZT4gaW1hZ2UgaXMgY3JlYXRlZC4KKyAgICAgICAgICAgICAgICBXaGVuIHRoaXMgZmlsZSBpcyBib290ZWQsIHRoZSA8ZmlsZW5hbWU+aW5pdHJkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBib290cyBhbmQgcHJvY2Vzc2VzIHRoZSBsYWJlbCBzZWxlY3RlZCBpbiBTWVNMSU5VWC4KKyAgICAgICAgICAgICAgICBBY3Rpb25zIGJhc2VkIG9uIHRoZSBsYWJlbCBhcmUgdGhlbiBwZXJmb3JtZWQgKGUuZy4gaW5zdGFsbGluZworICAgICAgICAgICAgICAgIHRvIGEgaGFyZCBkcml2ZSkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmJvb3RpbWc8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlOSVRSRCc+PGZpbGVuYW1lPklOSVRSRDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU5PSVNPJz48ZmlsZW5hbWU+Tk9JU088L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1OT0hERCc+PGZpbGVuYW1lPk5PSEREPC9maWxlbmFtZT48L2xpbms+LCBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJPT1RGUyc+PGZpbGVuYW1lPlJPT1RGUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZXMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtYnVnemlsbGEnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVnemlsbGEuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmJ1Z3ppbGxhPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgc2V0dGluZyB1cCBhbgorICAgICAgICBpbnN0YW5jZSBvZiBCdWd6aWxsYSBpbiB3aGljaCB5b3UgY2FuIGF1dG9tYXRpY2FsbHkgZmlsZXMgYnVnIHJlcG9ydHMKKyAgICAgICAgaW4gcmVzcG9uc2UgdG8gYnVpbGQgZmFpbHVyZXMuCisgICAgICAgIEZvciB0aGlzIGNsYXNzIHRvIHdvcmssIHlvdSBuZWVkIHRvIGVuYWJsZSB0aGUgWE1MLVJQQyBpbnRlcmZhY2UgaW4KKyAgICAgICAgdGhlIGluc3RhbmNlIG9mIEJ1Z3ppbGxhLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWJ1aWxkaGlzdG9yeSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZGhpc3RvcnkuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmJ1aWxkaGlzdG9yeTwvZmlsZW5hbWU+IGNsYXNzIHJlY29yZHMgYQorICAgICAgICBoaXN0b3J5IG9mIGJ1aWxkIG91dHB1dCBtZXRhZGF0YSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZGV0ZWN0IHBvc3NpYmxlCisgICAgICAgIHJlZ3Jlc3Npb25zIGFzIHdlbGwgYXMgdXNlZCBmb3IgYW5hbHlzaXMgb2YgdGhlIGJ1aWxkIG91dHB1dC4KKyAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgQnVpbGQgSGlzdG9yeSwgc2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0nbWFpbnRhaW5pbmctYnVpbGQtb3V0cHV0LXF1YWxpdHknPk1haW50YWluaW5nIEJ1aWxkIE91dHB1dCBRdWFsaXR5PC9saW5rPiIKKyAgICAgICAgc2VjdGlvbi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1idWlsZHN0YXRzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkc3RhdHMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmJ1aWxkc3RhdHM8L2ZpbGVuYW1lPiBjbGFzcyByZWNvcmRzCisgICAgICAgIHBlcmZvcm1hbmNlIHN0YXRpc3RpY3MgYWJvdXQgZWFjaCB0YXNrIGV4ZWN1dGVkIGR1cmluZyB0aGUgYnVpbGQKKyAgICAgICAgKGUuZy4gZWxhcHNlZCB0aW1lLCBDUFUgdXNhZ2UsIGFuZCBJL08gdXNhZ2UpLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGVuIHlvdSB1c2UgdGhpcyBjbGFzcywgdGhlIG91dHB1dCBnb2VzIGludG8gdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMRFNUQVRTX0JBU0UnPjxmaWxlbmFtZT5CVUlMRFNUQVRTX0JBU0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgZGlyZWN0b3J5LCB3aGljaCBkZWZhdWx0cyB0byA8ZmlsZW5hbWU+JHtUTVBESVJ9L2J1aWxkc3RhdHMvPC9maWxlbmFtZT4uCisgICAgICAgIFlvdSBjYW4gYW5hbHl6ZSB0aGUgZWxhcHNlZCB0aW1lIHVzaW5nCisgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpLnB5PC9maWxlbmFtZT4sIHdoaWNoCisgICAgICAgIHByb2R1Y2VzIGEgY2FzY2FkaW5nIGNoYXJ0IG9mIHRoZSBlbnRpcmUgYnVpbGQgcHJvY2VzcyBhbmQgY2FuIGJlCisgICAgICAgIHVzZWZ1bCBmb3IgaGlnaGxpZ2h0aW5nIGJvdHRsZW5lY2tzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBDb2xsZWN0aW5nIGJ1aWxkIHN0YXRpc3RpY3MgaXMgZW5hYmxlZCBieSBkZWZhdWx0IHRocm91Z2ggdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VU0VSX0NMQVNTRVMnPjxmaWxlbmFtZT5VU0VSX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgZnJvbSB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgZG8gbm90IGhhdmUgdG8gZG8gYW55dGhpbmcgdG8gZW5hYmxlIHRoZSBjbGFzcy4KKyAgICAgICAgSG93ZXZlciwgaWYgeW91IHdhbnQgdG8gZGlzYWJsZSB0aGUgY2xhc3MsIHNpbXBseSByZW1vdmUgImJ1aWxkc3RhdHMiCisgICAgICAgIGZyb20gdGhlIDxmaWxlbmFtZT5VU0VSX0NMQVNTRVM8L2ZpbGVuYW1lPiBsaXN0LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWJ1aWxkc3RhdHMtc3VtbWFyeSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZHN0YXRzLXN1bW1hcnkuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGVuIGluaGVyaXRlZCBnbG9iYWxseSwgcHJpbnRzIHN0YXRpc3RpY3MgYXQgdGhlIGVuZCBvZiB0aGUgYnVpbGQKKyAgICAgICAgb24gc3N0YXRlIHJlLXVzZS4KKyAgICAgICAgSW4gb3JkZXIgdG8gZnVuY3Rpb24sIHRoaXMgY2xhc3MgcmVxdWlyZXMgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJ1aWxkc3RhdHMnPjxmaWxlbmFtZT5idWlsZHN0YXRzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzIGJlIGVuYWJsZWQuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtY2NhY2hlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmNjYWNoZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y2NhY2hlPC9maWxlbmFtZT4gY2xhc3MgZW5hYmxlcyB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2NjYWNoZS5zYW1iYS5vcmcvJz5DL0MrKyBDb21waWxlciBDYWNoZTwvdWxpbms+CisgICAgICAgIGZvciB0aGUgYnVpbGQuCisgICAgICAgIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBnaXZlIGEgbWlub3IgcGVyZm9ybWFuY2UgYm9vc3QgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgSG93ZXZlciwgdXNpbmcgdGhlIGNsYXNzIGNhbiBsZWFkIHRvIHVuZXhwZWN0ZWQgc2lkZS1lZmZlY3RzLgorICAgICAgICBUaHVzLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkbyBub3QgdXNlIHRoaXMgY2xhc3MuCisgICAgICAgIFNlZSA8dWxpbmsgdXJsPSdodHRwOi8vY2NhY2hlLnNhbWJhLm9yZy8nPjwvdWxpbms+IGZvciBpbmZvcm1hdGlvbiBvbgorICAgICAgICB0aGUgQy9DKysgQ29tcGlsZXIgQ2FjaGUuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtY2hycGF0aCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5jaHJwYXRoLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5jaHJwYXRoPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgImNocnBhdGgiIHV0aWxpdHksIHdoaWNoIGlzIHVzZWQgZHVyaW5nIHRoZQorICAgICAgICBidWlsZCBwcm9jZXNzIGZvciA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4sCisgICAgICAgIDxmaWxlbmFtZT5jcm9zczwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgPGZpbGVuYW1lPmNyb3NzLWNhbmFkaWFuPC9maWxlbmFtZT4gcmVjaXBlcyB0byBjaGFuZ2UKKyAgICAgICAgPGZpbGVuYW1lPlJQQVRIPC9maWxlbmFtZT4gcmVjb3JkcyB3aXRoaW4gYmluYXJpZXMgaW4gb3JkZXIgdG8gbWFrZQorICAgICAgICB0aGVtIHJlbG9jYXRhYmxlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWNsdXR0ZXInPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Y2x1dHRlci5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y2x1dHRlcjwvZmlsZW5hbWU+IGNsYXNzIGNvbnNvbGlkYXRlcyB0aGUKKyAgICAgICAgbWFqb3IgYW5kIG1pbm9yIHZlcnNpb24gbmFtaW5nIGFuZCBvdGhlciBjb21tb24gaXRlbXMgdXNlZCBieSBDbHV0dGVyCisgICAgICAgIGFuZCByZWxhdGVkIHJlY2lwZXMuCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgVW5saWtlIHNvbWUgb3RoZXIgY2xhc3NlcyByZWxhdGVkIHRvIHNwZWNpZmljIGxpYnJhcmllcywgcmVjaXBlcworICAgICAgICAgICAgYnVpbGRpbmcgb3RoZXIgc29mdHdhcmUgdGhhdCB1c2VzIENsdXR0ZXIgZG8gbm90IG5lZWQgdG8KKyAgICAgICAgICAgIGluaGVyaXQgdGhpcyBjbGFzcyB1bmxlc3MgdGhleSB1c2UgdGhlIHNhbWUgcmVjaXBlIHZlcnNpb25pbmcKKyAgICAgICAgICAgIHNjaGVtZSB0aGF0IHRoZSBDbHV0dGVyIGFuZCByZWxhdGVkIHJlY2lwZXMgZG8uCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1jbWFrZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5jbWFrZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y21ha2U8L2ZpbGVuYW1lPiBjbGFzcyBhbGxvd3MgZm9yCisgICAgICAgIHJlY2lwZXMgdGhhdCBuZWVkIHRvIGJ1aWxkIHNvZnR3YXJlIHVzaW5nIHRoZSBDTWFrZSBidWlsZCBzeXN0ZW0uCisgICAgICAgIFlvdSBjYW4gdXNlIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRVhUUkFfT0VDTUFLRSc+PGZpbGVuYW1lPkVYVFJBX09FQ01BS0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgdG8gc3BlY2lmeSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBiZSBwYXNzZWQgb24KKyAgICAgICAgdGhlIDxmaWxlbmFtZT5jbWFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgbGluZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1jbWwxJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmNtbDEuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmNtbDE8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBiYXNpYyBzdXBwb3J0IGZvciB0aGUKKyAgICAgICAgTGludXgga2VybmVsIHN0eWxlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gc3lzdGVtLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWNvbXByZXNzX2RvYyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5jb21wcmVzc19kb2MuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBFbmFibGVzIGNvbXByZXNzaW9uIGZvciBtYW4gcGFnZXMgYW5kIGluZm8gcGFnZXMuCisgICAgICAgIFRoaXMgY2xhc3MgaXMgaW50ZW5kZWQgdG8gYmUgaW5oZXJpdGVkIGdsb2JhbGx5LgorICAgICAgICBUaGUgZGVmYXVsdCBjb21wcmVzc2lvbiBtZWNoYW5pc20gaXMgZ3ogKGd6aXApIGJ1dCB5b3UgY2FuCisgICAgICAgIHNlbGVjdCBhbiBhbHRlcm5hdGl2ZSBtZWNoYW5pc20gYnkgc2V0dGluZyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURPQ19DT01QUkVTUyc+PGZpbGVuYW1lPkRPQ19DT01QUkVTUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1jb3B5bGVmdF9jb21wbGlhbmNlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmNvcHlsZWZ0X2NvbXBsaWFuY2UuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmNvcHlsZWZ0X2NvbXBsaWFuY2U8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBwcmVzZXJ2ZXMgc291cmNlIGNvZGUgZm9yIHRoZSBwdXJwb3NlcyBvZiBsaWNlbnNlIGNvbXBsaWFuY2UuCisgICAgICAgIFRoaXMgY2xhc3MgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gdGhlIDxmaWxlbmFtZT5hcmNoaXZlcjwvZmlsZW5hbWU+CisgICAgICAgIGNsYXNzIGFuZCBpcyBzdGlsbCB1c2VkIGJ5IHNvbWUgdXNlcnMgZXZlbiB0aG91Z2ggaXQgaGFzIGJlZW4KKyAgICAgICAgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYXJjaGl2ZXInPjxmaWxlbmFtZT5hcmNoaXZlcjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1jb3B5bGVmdF9maWx0ZXInPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Y29weWxlZnRfZmlsdGVyLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQSBjbGFzcyB1c2VkIGJ5IHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hcmNoaXZlcic+PGZpbGVuYW1lPmFyY2hpdmVyPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGFuZAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1jb3B5bGVmdF9jb21wbGlhbmNlJz48ZmlsZW5hbWU+Y29weWxlZnRfY29tcGxpYW5jZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzc2VzIGZvciBmaWx0ZXJpbmcgbGljZW5zZXMuCisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y29weWxlZnRfZmlsdGVyPC9maWxlbmFtZT4gY2xhc3MgaXMgYW4gaW50ZXJuYWwgY2xhc3MKKyAgICAgICAgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWNvcmUtaW1hZ2UnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Y29yZS1pbWFnZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y29yZS1pbWFnZTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHByb3ZpZGVzIGNvbW1vbiBkZWZpbml0aW9ucyBmb3IgdGhlCisgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLSo8L2ZpbGVuYW1lPiBpbWFnZSByZWNpcGVzLCBzdWNoIGFzIHN1cHBvcnQgZm9yCisgICAgICAgIGFkZGl0aW9uYWwKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtY3Bhbic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5jcGFuLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5jcGFuPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgUGVybCBtb2R1bGVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBSZWNpcGVzIGZvciBQZXJsIG1vZHVsZXMgYXJlIHNpbXBsZS4KKyAgICAgICAgVGhlc2UgcmVjaXBlcyB1c3VhbGx5IG9ubHkgbmVlZCB0byBwb2ludCB0byB0aGUgc291cmNlJ3MgYXJjaGl2ZSBhbmQKKyAgICAgICAgdGhlbiBpbmhlcml0IHRoZSBwcm9wZXIgY2xhc3MgZmlsZS4KKyAgICAgICAgQnVpbGRpbmcgaXMgc3BsaXQgaW50byB0d28gbWV0aG9kcyBkZXBlbmRpbmcgb24gd2hpY2ggbWV0aG9kIHRoZSBtb2R1bGUKKyAgICAgICAgYXV0aG9ycyB1c2VkLgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1vZHVsZXMgdGhhdCB1c2Ugb2xkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1ha2VmaWxlLlBMPC9maWxlbmFtZT4tYmFzZWQgYnVpbGQgc3lzdGVtIHJlcXVpcmUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y3Bhbi5iYmNsYXNzPC9maWxlbmFtZT4gaW4gdGhlaXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Nb2R1bGVzIHRoYXQgdXNlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJ1aWxkLlBMPC9maWxlbmFtZT4tYmFzZWQgYnVpbGQgc3lzdGVtIHJlcXVpcmUKKyAgICAgICAgICAgICAgICB1c2luZyA8ZmlsZW5hbWU+Y3Bhbl9idWlsZC5iYmNsYXNzPC9maWxlbmFtZT4gaW4gdGhlaXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtY3Jvc3MnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Y3Jvc3MuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmNyb3NzPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIHJlY2lwZXMKKyAgICAgICAgdGhhdCBidWlsZCB0aGUgY3Jvc3MtY29tcGlsYXRpb24gdG9vbHMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtY3Jvc3MtY2FuYWRpYW4nPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Y3Jvc3MtY2FuYWRpYW4uYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmNyb3NzLWNhbmFkaWFuPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIHJlY2lwZXMgdGhhdCBidWlsZCB0aGUgQ2FuYWRpYW4KKyAgICAgICAgQ3Jvc3MtY29tcGlsYXRpb24gdG9vbHMgZm9yIFNES3MuCisgICAgICAgIFNlZSB0aGUKKyAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbi1nZW5lcmF0aW9uJz5Dcm9zcy1EZXZlbG9wbWVudCBUb29sY2hhaW4gR2VuZXJhdGlvbjwvbGluaz4iCisgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgZGlzY3Vzc2lvbiBvbiB0aGVzZSBjcm9zcy1jb21waWxhdGlvbiB0b29scy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1jcm9zc3Nkayc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5jcm9zc3Nkay5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y3Jvc3NzZGs8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgcmVjaXBlcyB0aGF0IGJ1aWxkIHRoZSBjcm9zcy1jb21waWxhdGlvbgorICAgICAgICB0b29scyB1c2VkIGZvciBidWlsZGluZyBTREtzLgorICAgICAgICBTZWUgdGhlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdjcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4tZ2VuZXJhdGlvbic+Q3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluIEdlbmVyYXRpb248L2xpbms+IgorICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGRpc2N1c3Npb24gb24gdGhlc2UgY3Jvc3MtY29tcGlsYXRpb24gdG9vbHMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZGViaWFuJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmRlYmlhbi5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGViaWFuPC9maWxlbmFtZT4gY2xhc3MgcmVuYW1lcyBvdXRwdXQgcGFja2FnZXMgc28gdGhhdAorICAgICAgICB0aGV5IGZvbGxvdyB0aGUgRGViaWFuIG5hbWluZyBwb2xpY3kgKGkuZS4gPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4KKyAgICAgICAgYmVjb21lcyA8ZmlsZW5hbWU+bGliYzY8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmdsaWJjLWRldmVsPC9maWxlbmFtZT4KKyAgICAgICAgYmVjb21lcyA8ZmlsZW5hbWU+bGliYzYtZGV2PC9maWxlbmFtZT4uKQorICAgICAgICBSZW5hbWluZyBpbmNsdWRlcyB0aGUgbGlicmFyeSBuYW1lIGFuZCB2ZXJzaW9uIGFzIHBhcnQgb2YgdGhlIHBhY2thZ2UKKyAgICAgICAgbmFtZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSWYgYSByZWNpcGUgY3JlYXRlcyBwYWNrYWdlcyBmb3IgbXVsdGlwbGUgbGlicmFyaWVzCisgICAgICAgIChzaGFyZWQgb2JqZWN0IGZpbGVzIG9mIDxmaWxlbmFtZT4uc288L2ZpbGVuYW1lPiB0eXBlKSwgdXNlIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTEVBRF9TT05BTUUnPjxmaWxlbmFtZT5MRUFEX1NPTkFNRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZSBpbiB0aGUgcmVjaXBlIHRvIHNwZWNpZnkgdGhlIGxpYnJhcnkgb24gd2hpY2ggdG8gYXBwbHkgdGhlCisgICAgICAgIG5hbWluZyBzY2hlbWUuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZGVwbG95Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmRlcGxveS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGVwbG95PC9maWxlbmFtZT4gY2xhc3MgaGFuZGxlcyBkZXBsb3lpbmcgZmlsZXMKKyAgICAgICAgdG8gdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX0lNQUdFJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9JTUFHRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgIFRoZSBtYWluIGZ1bmN0aW9uIG9mIHRoaXMgY2xhc3MgaXMgdG8gYWxsb3cgdGhlIGRlcGxveSBzdGVwIHRvIGJlCisgICAgICAgIGFjY2VsZXJhdGVkIGJ5IHNoYXJlZCBzdGF0ZS4KKyAgICAgICAgUmVjaXBlcyB0aGF0IGluaGVyaXQgdGhpcyBjbGFzcyBzaG91bGQgZGVmaW5lIHRoZWlyIG93bgorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtZGVwbG95Jz48ZmlsZW5hbWU+ZG9fZGVwbG95PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGZ1bmN0aW9uIHRvIGNvcHkgdGhlIGZpbGVzIHRvIGJlIGRlcGxveWVkIHRvCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lESVInPjxmaWxlbmFtZT5ERVBMT1lESVI8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIGFuZCB1c2UgPGZpbGVuYW1lPmFkZHRhc2s8L2ZpbGVuYW1lPiB0byBhZGQgdGhlIHRhc2sgYXQgdGhlIGFwcHJvcHJpYXRlCisgICAgICAgIHBsYWNlLCB3aGljaCBpcyB1c3VhbGx5IGFmdGVyCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb21waWxlJz48ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBvcgorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgIFRoZSBjbGFzcyB0aGVuIHRha2VzIGNhcmUgb2Ygc3RhZ2luZyB0aGUgZmlsZXMgZnJvbQorICAgICAgICA8ZmlsZW5hbWU+REVQTE9ZRElSPC9maWxlbmFtZT4gdG8KKyAgICAgICAgPGZpbGVuYW1lPkRFUExPWV9ESVJfSU1BR0U8L2ZpbGVuYW1lPi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1kZXZzaGVsbCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5kZXZzaGVsbC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPiBjbGFzcyBhZGRzIHRoZQorICAgICAgICA8ZmlsZW5hbWU+ZG9fZGV2c2hlbGw8L2ZpbGVuYW1lPiB0YXNrLgorICAgICAgICBEaXN0cmlidXRpb24gcG9saWN5IGRpY3RhdGVzIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGlzIGNsYXNzLgorICAgICAgICBTZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwbGF0ZGV2LWFwcGRldi1kZXZzaGVsbCc+VXNpbmcgYSBEZXZlbG9wbWVudCBTaGVsbDwvdWxpbms+IiBzZWN0aW9uCisgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dAorICAgICAgICB1c2luZyA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1kaXN0cm9fZmVhdHVyZXNfY2hlY2snPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+ZGlzdHJvX2ZlYXR1cmVzX2NoZWNrLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5kaXN0cm9fZmVhdHVyZXNfY2hlY2s8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBhbGxvd3MgaW5kaXZpZHVhbCByZWNpcGVzIHRvIGNoZWNrIGZvciByZXF1aXJlZCBhbmQgY29uZmxpY3RpbmcKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPlJFUVVJUkVEX0RJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNPTkZMSUNUX0RJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkNPTkZMSUNUX0RJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgIElmIGFueSBjb25kaXRpb25zIHNwZWNpZmllZCBpbiB0aGUgcmVjaXBlIHVzaW5nIHRoZSBhYm92ZSB2YXJpYWJsZXMgYXJlCisgICAgICAgIG5vdCBtZXQsIHRoZSByZWNpcGUgd2lsbCBiZSBza2lwcGVkLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWRpc3Ryb2RhdGEnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+ZGlzdHJvZGF0YS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGlzdHJvZGF0YTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHByb3ZpZGVzIGZvciBhdXRvbWF0aWMgY2hlY2tpbmcgZm9yIHVwc3RyZWFtIHJlY2lwZSB1cGRhdGVzLgorICAgICAgICBUaGUgY2xhc3MgY3JlYXRlcyBhIGNvbW1hLXNlcGFyYXRlZCB2YWx1ZSAoQ1NWKSBzcHJlYWRzaGVldCB0aGF0CisgICAgICAgIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZWNpcGVzLgorICAgICAgICBUaGUgaW5mb3JtYXRpb24gcHJvdmlkZXMgdGhlIDxmaWxlbmFtZT5kb19kaXN0cm9kYXRhPC9maWxlbmFtZT4gYW5kCisgICAgICAgIDxmaWxlbmFtZT5kb19kaXN0cm9fY2hlY2s8L2ZpbGVuYW1lPiB0YXNrcywgd2hpY2ggZG8gdXBzdHJlYW0gY2hlY2tpbmcKKyAgICAgICAgYW5kIGFsc28gdmVyaWZ5IGlmIGEgcGFja2FnZSBpcyB1c2VkIGluIG11bHRpcGxlIG1ham9yIGRpc3RyaWJ1dGlvbnMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBjbGFzcyBpcyBub3QgaW5jbHVkZWQgYnkgZGVmYXVsdC4KKyAgICAgICAgVG8gdXNlIGl0LCB5b3UgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgZmlsZXMgYW5kIHNldCB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlOSEVSSVQnPjxmaWxlbmFtZT5JTkhFUklUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGluY2x1ZGUgY29uZi9kaXN0cm8vaW5jbHVkZS9kaXN0cm9fYWxpYXMuaW5jCisgICAgIGluY2x1ZGUgY29uZi9kaXN0cm8vaW5jbHVkZS9yZWNpcGVfY29sb3IuaW5jCisgICAgIGluY2x1ZGUgY29uZi9kaXN0cm8vaW5jbHVkZS9tYWludGFpbmVycy5pbmMKKyAgICAgaW5jbHVkZSBjb25mL2Rpc3Ryby9pbmNsdWRlL3Vwc3RyZWFtX3RyYWNraW5nLmluYworICAgICBpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvcGFja2FnZV9yZWdleC5pbmMKKyAgICAgSU5IRVJJVCs9ICJkaXN0cm9kYXRhIgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZGlzdHV0aWxzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmRpc3R1dGlscy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGlzdHV0aWxzPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgcmVjaXBlcyBmb3IgUHl0aG9uCisgICAgICAgIHZlcnNpb24gMi54IGV4dGVuc2lvbnMsIHdoaWNoIGFyZSBzaW1wbGUuCisgICAgICAgIFRoZXNlIHJlY2lwZXMgdXN1YWxseSBvbmx5IG5lZWQgdG8gcG9pbnQgdG8gdGhlIHNvdXJjZSdzIGFyY2hpdmUgYW5kCisgICAgICAgIHRoZW4gaW5oZXJpdCB0aGUgcHJvcGVyIGNsYXNzLgorICAgICAgICBCdWlsZGluZyBpcyBzcGxpdCBpbnRvIHR3byBtZXRob2RzIGRlcGVuZGluZyBvbiB3aGljaCBtZXRob2QgdGhlCisgICAgICAgIG1vZHVsZSBhdXRob3JzIHVzZWQuCisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXh0ZW5zaW9ucyB0aGF0IHVzZSBhbiBBdXRvdG9vbHMtYmFzZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgcmVxdWlyZSBBdXRvdG9vbHMgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpc3R1dGlsczwvZmlsZW5hbWU+LWJhc2VkIGNsYXNzZXMgaW4gdGhlaXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHRlbnNpb25zIHRoYXQgdXNlIGJ1aWxkIHN5c3RlbXMgYmFzZWQgb24KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlzdHV0aWxzPC9maWxlbmFtZT4gcmVxdWlyZQorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+ZGlzdHV0aWxzPC9maWxlbmFtZT4gY2xhc3MgaW4gdGhlaXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHRlbnNpb25zIHRoYXQgdXNlIGJ1aWxkIHN5c3RlbXMgYmFzZWQgb24KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2V0dXB0b29sczwvZmlsZW5hbWU+IHJlcXVpcmUgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc2V0dXB0b29scyc+PGZpbGVuYW1lPnNldHVwdG9vbHM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBjbGFzcyBpbiB0aGVpciByZWNpcGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1kaXN0dXRpbHMzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmRpc3R1dGlsczMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmRpc3R1dGlsczM8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyByZWNpcGVzIGZvciBQeXRob24KKyAgICAgICAgdmVyc2lvbiAzLnggZXh0ZW5zaW9ucywgd2hpY2ggYXJlIHNpbXBsZS4KKyAgICAgICAgVGhlc2UgcmVjaXBlcyB1c3VhbGx5IG9ubHkgbmVlZCB0byBwb2ludCB0byB0aGUgc291cmNlJ3MgYXJjaGl2ZSBhbmQKKyAgICAgICAgdGhlbiBpbmhlcml0IHRoZSBwcm9wZXIgY2xhc3MuCisgICAgICAgIEJ1aWxkaW5nIGlzIHNwbGl0IGludG8gdHdvIG1ldGhvZHMgZGVwZW5kaW5nIG9uIHdoaWNoIG1ldGhvZCB0aGUKKyAgICAgICAgbW9kdWxlIGF1dGhvcnMgdXNlZC4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHRlbnNpb25zIHRoYXQgdXNlIGFuIEF1dG90b29scy1iYXNlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICByZXF1aXJlIEF1dG90b29scyBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlzdHV0aWxzPC9maWxlbmFtZT4tYmFzZWQgY2xhc3NlcyBpbiB0aGVpciByZWNpcGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkV4dGVuc2lvbnMgdGhhdCB1c2UKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlzdHV0aWxzPC9maWxlbmFtZT4tYmFzZWQgYnVpbGQgc3lzdGVtcyByZXF1aXJlCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5kaXN0dXRpbHM8L2ZpbGVuYW1lPiBjbGFzcyBpbiB0aGVpciByZWNpcGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkV4dGVuc2lvbnMgdGhhdCB1c2UgYnVpbGQgc3lzdGVtcyBiYXNlZCBvbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zZXR1cHRvb2xzMzwvZmlsZW5hbWU+IHJlcXVpcmUgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc2V0dXB0b29scyc+PGZpbGVuYW1lPnNldHVwdG9vbHMzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgY2xhc3MgaW4gdGhlaXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZXh0ZXJuYWxzcmMnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+ZXh0ZXJuYWxzcmMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmV4dGVybmFsc3JjPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgYnVpbGRpbmcgc29mdHdhcmUKKyAgICAgICAgZnJvbSBzb3VyY2UgY29kZSB0aGF0IGlzIGV4dGVybmFsIHRvIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICBCdWlsZGluZyBzb2Z0d2FyZSBmcm9tIGFuIGV4dGVybmFsIHNvdXJjZSB0cmVlIG1lYW5zIHRoYXQgdGhlIGJ1aWxkCisgICAgICAgIHN5c3RlbSdzIG5vcm1hbCBmZXRjaCwgdW5wYWNrLCBhbmQgcGF0Y2ggcHJvY2VzcyBpcyBub3QgdXNlZC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L2xpbms+IGFuZAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQic+PGZpbGVuYW1lPkI8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGVzIHRvCisgICAgICAgIGxvY2F0ZSB1bnBhY2tlZCByZWNpcGUgc291cmNlIGNvZGUgYW5kIHRvIGJ1aWxkIGl0LCByZXNwZWN0aXZlbHkuCisgICAgICAgIFdoZW4geW91ciByZWNpcGUgaW5oZXJpdHMgdGhlIDxmaWxlbmFtZT5leHRlcm5hbHNyYzwvZmlsZW5hbWU+IGNsYXNzLAorICAgICAgICB5b3UgdXNlIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRVhURVJOQUxTUkMnPjxmaWxlbmFtZT5FWFRFUk5BTFNSQzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVYVEVSTkFMU1JDX0JVSUxEJz48ZmlsZW5hbWU+RVhURVJOQUxTUkNfQlVJTEQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGVzIHRvIHVsdGltYXRlbHkgZGVmaW5lIDxmaWxlbmFtZT5TPC9maWxlbmFtZT4gYW5kCisgICAgICAgIDxmaWxlbmFtZT5CPC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgY2xhc3MgZXhwZWN0cyB0aGUgc291cmNlIGNvZGUgdG8gc3VwcG9ydCByZWNpcGUgYnVpbGRzCisgICAgICAgIHRoYXQgdXNlIHRoZSA8bGluayBsaW5rZW5kPSd2YXItQic+PGZpbGVuYW1lPkI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgdG8gcG9pbnQgdG8gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgIHN5c3RlbSBwbGFjZXMgdGhlIGdlbmVyYXRlZCBvYmplY3RzIGJ1aWx0IGZyb20gdGhlIHJlY2lwZXMuCisgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+QjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpcyBzZXQgdG8gdGhlCisgICAgICAgIGZvbGxvd2luZywgd2hpY2ggaXMgc2VwYXJhdGUgZnJvbSB0aGUgc291cmNlIGRpcmVjdG9yeQorICAgICAgICAoPGZpbGVuYW1lPlM8L2ZpbGVuYW1lPik6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtXT1JLRElSfS8ke0JQTn0ve1BWfS8KKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICBTZWUgdGhlc2UgdmFyaWFibGVzIGZvciBtb3JlIGluZm9ybWF0aW9uOgorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CUE4nPjxmaWxlbmFtZT5CUE48L2ZpbGVuYW1lPjwvbGluaz4sIGFuZAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlCisgICAgICAgIDxmaWxlbmFtZT5leHRlcm5hbHNyYzwvZmlsZW5hbWU+IGNsYXNzLCBzZWUgdGhlIGNvbW1lbnRzIGluCisgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvZXh0ZXJuYWxzcmMuYmJjbGFzczwvZmlsZW5hbWU+IGluIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZSA8ZmlsZW5hbWU+ZXh0ZXJuYWxzcmM8L2ZpbGVuYW1lPgorICAgICAgICBjbGFzcywgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGRpbmctc29mdHdhcmUtZnJvbS1hbi1leHRlcm5hbC1zb3VyY2UnPkJ1aWxkaW5nIFNvZnR3YXJlIGZyb20gYW4gRXh0ZXJuYWwgU291cmNlPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWV4dHJhdXNlcnMnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+ZXh0cmF1c2Vycy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZXh0cmF1c2VyczwvZmlsZW5hbWU+IGNsYXNzIGFsbG93cworICAgICAgICBhZGRpdGlvbmFsIHVzZXIgYW5kIGdyb3VwIGNvbmZpZ3VyYXRpb24gdG8gYmUgYXBwbGllZCBhdCB0aGUgaW1hZ2UKKyAgICAgICAgbGV2ZWwuCisgICAgICAgIEluaGVyaXRpbmcgdGhpcyBjbGFzcyBlaXRoZXIgZ2xvYmFsbHkgb3IgZnJvbSBhbiBpbWFnZSByZWNpcGUgYWxsb3dzCisgICAgICAgIGFkZGl0aW9uYWwgdXNlciBhbmQgZ3JvdXAgb3BlcmF0aW9ucyB0byBiZSBwZXJmb3JtZWQgdXNpbmcgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9VU0VSU19QQVJBTVMnPjxmaWxlbmFtZT5FWFRSQV9VU0VSU19QQVJBTVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUuCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgVGhlIHVzZXIgYW5kIGdyb3VwIG9wZXJhdGlvbnMgYWRkZWQgdXNpbmcgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZXh0cmF1c2VyczwvZmlsZW5hbWU+IGNsYXNzIGFyZSBub3QgdGllZCB0byBhIHNwZWNpZmljCisgICAgICAgICAgICByZWNpcGUgb3V0c2lkZSBvZiB0aGUgcmVjaXBlIGZvciB0aGUgaW1hZ2UuCisgICAgICAgICAgICBUaHVzLCB0aGUgb3BlcmF0aW9ucyBjYW4gYmUgcGVyZm9ybWVkIGFjcm9zcyB0aGUgaW1hZ2UgYXMgYSB3aG9sZS4KKyAgICAgICAgICAgIFVzZSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXVzZXJhZGQnPjxmaWxlbmFtZT51c2VyYWRkPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBjbGFzcyB0byBhZGQgdXNlciBhbmQgZ3JvdXAgY29uZmlndXJhdGlvbiB0byBhIHNwZWNpZmljIHJlY2lwZS4KKyAgICAgICAgPC9ub3RlPgorICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCB1c2VzIHRoaXMgY2xhc3MgaW4gYW4gaW1hZ2UgcmVjaXBlOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGluaGVyaXQgZXh0cmF1c2VycworICAgICBFWFRSQV9VU0VSU19QQVJBTVMgPSAiXAorICAgICAgICAgdXNlcmFkZCAtcCAnJyB0ZXN0ZXI7IFwKKyAgICAgICAgIGdyb3VwYWRkIGRldmVsb3BlcnM7IFwKKyAgICAgICAgIHVzZXJkZWwgbm9ib2R5OyBcCisgICAgICAgICBncm91cGRlbCAtZyB2aWRlbzsgXAorICAgICAgICAgZ3JvdXBtb2QgLWcgMTAyMCBkZXZlbG9wZXJzOyBcCisgICAgICAgICB1c2VybW9kIC1zIC9iaW4vc2ggdGVzdGVyOyBcCisgICAgICAgICAiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgYWRkcyB0d28gdXNlcnMgbmFtZWQgInRlc3Rlci1qaW0iIGFuZAorICAgICAgICAidGVzdGVyLXN1ZSIgYW5kIGFzc2lnbnMgcGFzc3dvcmRzOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGluaGVyaXQgZXh0cmF1c2VycworICAgICBFWFRSQV9VU0VSU19QQVJBTVMgPSAiXAorICAgICAgICAgdXNlcmFkZCAtUCB0ZXN0ZXIwMSB0ZXN0ZXItamltOyBcCisgICAgICAgICB1c2VyYWRkIC1QIHRlc3RlcjAxIHRlc3Rlci1zdWU7IFwKKyAgICAgICAgICIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICBGaW5hbGx5LCBoZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzZXRzIHRoZSByb290IHBhc3N3b3JkIHRvCisgICAgICAgICIxODc2KjE4IjoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBpbmhlcml0IGV4dHJhdXNlcnMKKyAgICAgRVhUUkFfVVNFUlNfUEFSQU1TID0gIlwKKyAgICAgICAgIHVzZXJtb2QgLVAgMTg3NioxOCByb290OyBcCisgICAgICAgICAiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1mb250Y2FjaGUnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Zm9udGNhY2hlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5mb250Y2FjaGU8L2ZpbGVuYW1lPiBjbGFzcyBnZW5lcmF0ZXMgdGhlCisgICAgICAgIHByb3BlciBwb3N0LWluc3RhbGwgYW5kIHBvc3QtcmVtb3ZlIChwb3N0aW5zdCBhbmQgcG9zdHJtKQorICAgICAgICBzY3JpcHRsZXRzIGZvciBmb250IHBhY2thZ2VzLgorICAgICAgICBUaGVzZSBzY3JpcHRsZXRzIGNhbGwgPGZpbGVuYW1lPmZjLWNhY2hlPC9maWxlbmFtZT4gKHBhcnQgb2YKKyAgICAgICAgPGZpbGVuYW1lPkZvbnRjb25maWc8L2ZpbGVuYW1lPikgdG8gYWRkIHRoZSBmb250cyB0byB0aGUgZm9udAorICAgICAgICBpbmZvcm1hdGlvbiBjYWNoZS4KKyAgICAgICAgU2luY2UgdGhlIGNhY2hlIGZpbGVzIGFyZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMsCisgICAgICAgIDxmaWxlbmFtZT5mYy1jYWNoZTwvZmlsZW5hbWU+IHJ1bnMgdXNpbmcgUUVNVSBpZiB0aGUgcG9zdGluc3QKKyAgICAgICAgc2NyaXB0bGV0cyBuZWVkIHRvIGJlIHJ1biBvbiB0aGUgYnVpbGQgaG9zdCBkdXJpbmcgaW1hZ2UgY3JlYXRpb24uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIElmIHRoZSBmb250cyBiZWluZyBpbnN0YWxsZWQgYXJlIGluIHBhY2thZ2VzIG90aGVyIHRoYW4gdGhlIG1haW4KKyAgICAgICAgcGFja2FnZSwgc2V0CisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GT05UX1BBQ0tBR0VTJz48ZmlsZW5hbWU+Rk9OVF9QQUNLQUdFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB0byBzcGVjaWZ5IHRoZSBwYWNrYWdlcyBjb250YWluaW5nIHRoZSBmb250cy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1nY29uZic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5nY29uZi5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z2NvbmY8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBjb21tb24KKyAgICAgICAgZnVuY3Rpb25hbGl0eSBmb3IgcmVjaXBlcyB0aGF0IG5lZWQgdG8gaW5zdGFsbCBHQ29uZiBzY2hlbWFzLgorICAgICAgICBUaGUgc2NoZW1hcyB3aWxsIGJlIHB1dCBpbnRvIGEgc2VwYXJhdGUgcGFja2FnZQorICAgICAgICAoPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59LWdjb25mPC9maWxlbmFtZT4pCisgICAgICAgIHRoYXQgaXMgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhpcyBjbGFzcyBpcyBpbmhlcml0ZWQuCisgICAgICAgIFRoaXMgcGFja2FnZSB1c2VzIHRoZSBhcHByb3ByaWF0ZSBwb3N0LWluc3RhbGwgYW5kIHBvc3QtcmVtb3ZlCisgICAgICAgIChwb3N0aW5zdC9wb3N0cm0pIHNjcmlwdGxldHMgdG8gcmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIgdGhlIHNjaGVtYXMKKyAgICAgICAgaW4gdGhlIHRhcmdldCBpbWFnZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1nZXR0ZXh0Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmdldHRleHQuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmdldHRleHQ8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBzdXBwb3J0IGZvcgorICAgICAgICBidWlsZGluZyBzb2Z0d2FyZSB0aGF0IHVzZXMgdGhlIEdOVSA8ZmlsZW5hbWU+Z2V0dGV4dDwvZmlsZW5hbWU+CisgICAgICAgIGludGVybmF0aW9uYWxpemF0aW9uIGFuZCBsb2NhbGl6YXRpb24gc3lzdGVtLgorICAgICAgICBBbGwgcmVjaXBlcyBidWlsZGluZyBzb2Z0d2FyZSB0aGF0IHVzZQorICAgICAgICA8ZmlsZW5hbWU+Z2V0dGV4dDwvZmlsZW5hbWU+IHNob3VsZCBpbmhlcml0IHRoaXMgY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZ25vbWUnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Z25vbWUuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmdub21lPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgcmVjaXBlcyB0aGF0CisgICAgICAgIGJ1aWxkIHNvZnR3YXJlIGZyb20gdGhlIEdOT01FIHN0YWNrLgorICAgICAgICBUaGlzIGNsYXNzIGluaGVyaXRzIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1nbm9tZWJhc2UnPjxmaWxlbmFtZT5nbm9tZWJhc2U8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWd0ay1pY29uLWNhY2hlJz48ZmlsZW5hbWU+Z3RrLWljb24tY2FjaGU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWdjb25mJz48ZmlsZW5hbWU+Z2NvbmY8L2ZpbGVuYW1lPjwvbGluaz4gYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLW1pbWUnPjxmaWxlbmFtZT5taW1lPC9maWxlbmFtZT48L2xpbms+IGNsYXNzZXMuCisgICAgICAgIFRoZSBjbGFzcyBhbHNvIGRpc2FibGVzIEdPYmplY3QgaW50cm9zcGVjdGlvbiB3aGVyZSBhcHBsaWNhYmxlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWdub21lYmFzZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5nbm9tZWJhc2UuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmdub21lYmFzZTwvZmlsZW5hbWU+IGNsYXNzIGlzIHRoZSBiYXNlCisgICAgICAgIGNsYXNzIGZvciByZWNpcGVzIHRoYXQgYnVpbGQgc29mdHdhcmUgZnJvbSB0aGUgR05PTUUgc3RhY2suCisgICAgICAgIFRoaXMgY2xhc3Mgc2V0cworICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4gdG8KKyAgICAgICAgZG93bmxvYWQgdGhlIHNvdXJjZSBmcm9tIHRoZSBHTk9NRSBtaXJyb3JzIGFzIHdlbGwgYXMgZXh0ZW5kaW5nCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHdpdGggdGhlIHR5cGljYWwgR05PTUUgaW5zdGFsbGF0aW9uIHBhdGhzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWdydWItZWZpJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmdydWItZWZpLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5ncnViLWVmaTwvZmlsZW5hbWU+CisgICAgICAgIGNsYXNzIHByb3ZpZGVzIDxmaWxlbmFtZT5ncnViLWVmaTwvZmlsZW5hbWU+LXNwZWNpZmljIGZ1bmN0aW9ucyBmb3IKKyAgICAgICAgYnVpbGRpbmcgYm9vdGFibGUgaW1hZ2VzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNsYXNzIHN1cHBvcnRzIHNldmVyYWwgdmFyaWFibGVzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTklUUkQnPjxmaWxlbmFtZT5JTklUUkQ8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgSW5kaWNhdGVzIGxpc3Qgb2YgZmlsZXN5c3RlbSBpbWFnZXMgdG8gY29uY2F0ZW5hdGUgYW5kIHVzZQorICAgICAgICAgICAgICAgIGFzIGFuIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyZCkgKG9wdGlvbmFsKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUk9PVEZTJz48ZmlsZW5hbWU+Uk9PVEZTPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgIEluZGljYXRlcyBhIGZpbGVzeXN0ZW0gaW1hZ2UgdG8gaW5jbHVkZSBhcyB0aGUgcm9vdCBmaWxlc3lzdGVtCisgICAgICAgICAgICAgICAgKG9wdGlvbmFsKS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItR1JVQl9HRlhTRVJJQUwnPjxmaWxlbmFtZT5HUlVCX0dGWFNFUklBTDwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICBTZXQgdGhpcyB0byAiMSIgdG8gaGF2ZSBncmFwaGljcyBhbmQgc2VyaWFsIGluIHRoZSBib290IG1lbnUuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxBQkVMUyc+PGZpbGVuYW1lPkxBQkVMUzwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgdGFyZ2V0cyBmb3IgdGhlIGF1dG9tYXRpYyBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1BUFBFTkQnPjxmaWxlbmFtZT5BUFBFTkQ8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgQW4gb3ZlcnJpZGUgbGlzdCBvZiBhcHBlbmQgc3RyaW5ncyBmb3IgZWFjaAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MQUJFTDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1HUlVCX09QVFMnPjxmaWxlbmFtZT5HUlVCX09QVFM8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgQWRkaXRpb25hbCBvcHRpb25zIHRvIGFkZCB0byB0aGUgY29uZmlndXJhdGlvbiAob3B0aW9uYWwpLgorICAgICAgICAgICAgICAgIE9wdGlvbnMgYXJlIGRlbGltaXRlZCB1c2luZyBzZW1pLWNvbG9uIGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPjs8L2ZpbGVuYW1lPikuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUdSVUJfVElNRU9VVCc+PGZpbGVuYW1lPkdSVUJfVElNRU9VVDwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICBUaW1lb3V0IGJlZm9yZSBleGVjdXRpbmcgdGhlIGRlZmF1bHQgPGZpbGVuYW1lPkxBQkVMPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAob3B0aW9uYWwpLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZ3NldHRpbmdzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmdzZXR0aW5ncy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z3NldHRpbmdzPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgcHJvdmlkZXMgY29tbW9uIGZ1bmN0aW9uYWxpdHkgZm9yIHJlY2lwZXMgdGhhdCBuZWVkIHRvIGluc3RhbGwKKyAgICAgICAgR1NldHRpbmdzIChnbGliKSBzY2hlbWFzLgorICAgICAgICBUaGUgc2NoZW1hcyBhcmUgYXNzdW1lZCB0byBiZSBwYXJ0IG9mIHRoZSBtYWluIHBhY2thZ2UuCisgICAgICAgIEFwcHJvcHJpYXRlIHBvc3QtaW5zdGFsbCBhbmQgcG9zdC1yZW1vdmUgKHBvc3RpbnN0L3Bvc3RybSkKKyAgICAgICAgc2NyaXB0bGV0cyBhcmUgYWRkZWQgdG8gcmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIgdGhlIHNjaGVtYXMgaW4gdGhlCisgICAgICAgIHRhcmdldCBpbWFnZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1ndGstZG9jJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmd0ay1kb2MuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmd0ay1kb2M8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBpcyBhIGhlbHBlciBjbGFzcyB0byBwdWxsIGluIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICA8ZmlsZW5hbWU+Z3RrLWRvYzwvZmlsZW5hbWU+IGRlcGVuZGVuY2llcyBhbmQgZGlzYWJsZQorICAgICAgICA8ZmlsZW5hbWU+Z3RrLWRvYzwvZmlsZW5hbWU+LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWd0ay1pY29uLWNhY2hlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmd0ay1pY29uLWNhY2hlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5ndGstaWNvbi1jYWNoZTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIGdlbmVyYXRlcyB0aGUgcHJvcGVyIHBvc3QtaW5zdGFsbCBhbmQgcG9zdC1yZW1vdmUgKHBvc3RpbnN0L3Bvc3RybSkKKyAgICAgICAgc2NyaXB0bGV0cyBmb3IgcGFja2FnZXMgdGhhdCB1c2UgR1RLKyBhbmQgaW5zdGFsbCBpY29ucy4KKyAgICAgICAgVGhlc2Ugc2NyaXB0bGV0cyBjYWxsIDxmaWxlbmFtZT5ndGstdXBkYXRlLWljb24tY2FjaGU8L2ZpbGVuYW1lPiB0byBhZGQKKyAgICAgICAgdGhlIGZvbnRzIHRvIEdUSysncyBpY29uIGNhY2hlLgorICAgICAgICBTaW5jZSB0aGUgY2FjaGUgZmlsZXMgYXJlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYywKKyAgICAgICAgPGZpbGVuYW1lPmd0ay11cGRhdGUtaWNvbi1jYWNoZTwvZmlsZW5hbWU+IGlzIHJ1biB1c2luZyBRRU1VIGlmIHRoZQorICAgICAgICBwb3N0aW5zdCBzY3JpcHRsZXRzIG5lZWQgdG8gYmUgcnVuIG9uIHRoZSBidWlsZCBob3N0IGR1cmluZyBpbWFnZQorICAgICAgICBjcmVhdGlvbi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1ndGstaW1tb2R1bGVzLWNhY2hlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmd0ay1pbW1vZHVsZXMtY2FjaGUuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmd0ay1pbW1vZHVsZXMtY2FjaGU8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBnZW5lcmF0ZXMgdGhlIHByb3BlciBwb3N0LWluc3RhbGwgYW5kIHBvc3QtcmVtb3ZlIChwb3N0aW5zdC9wb3N0cm0pCisgICAgICAgIHNjcmlwdGxldHMgZm9yIHBhY2thZ2VzIHRoYXQgaW5zdGFsbCBHVEsrIGlucHV0IG1ldGhvZCBtb2R1bGVzIGZvcgorICAgICAgICB2aXJ0dWFsIGtleWJvYXJkcy4KKyAgICAgICAgVGhlc2Ugc2NyaXB0bGV0cyBjYWxsIDxmaWxlbmFtZT5ndGstdXBkYXRlLWljb24tY2FjaGU8L2ZpbGVuYW1lPiB0byBhZGQKKyAgICAgICAgdGhlIGlucHV0IG1ldGhvZCBtb2R1bGVzIHRvIHRoZSBjYWNoZS4KKyAgICAgICAgU2luY2UgdGhlIGNhY2hlIGZpbGVzIGFyZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMsCisgICAgICAgIDxmaWxlbmFtZT5ndGstdXBkYXRlLWljb24tY2FjaGU8L2ZpbGVuYW1lPiBpcyBydW4gdXNpbmcgUUVNVSBpZiB0aGUKKyAgICAgICAgcG9zdGluc3Qgc2NyaXB0bGV0cyBuZWVkIHRvIGJlIHJ1biBvbiB0aGUgYnVpbGQgaG9zdCBkdXJpbmcgaW1hZ2UKKyAgICAgICAgY3JlYXRpb24uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIElmIHRoZSBpbnB1dCBtZXRob2QgbW9kdWxlcyBiZWluZyBpbnN0YWxsZWQgYXJlIGluIHBhY2thZ2VzIG90aGVyIHRoYW4KKyAgICAgICAgdGhlIG1haW4gcGFja2FnZSwgc2V0CisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1HVEtJTU1PRFVMRVNfUEFDS0FHRVMnPjxmaWxlbmFtZT5HVEtJTU1PRFVMRVNfUEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdG8gc3BlY2lmeSB0aGUgcGFja2FnZXMgY29udGFpbmluZyB0aGUgbW9kdWxlcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1ndW1taWJvb3QnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Z3VtbWlib290LmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5ndW1taWJvb3Q8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBmdW5jdGlvbnMgc3BlY2lmaWMKKyAgICAgICAgdG8gdGhlIGd1bW1pYm9vdCBib290bG9hZGVyIGZvciBidWlsZGluZyBib290YWJsZSBpbWFnZXMuCisgICAgICAgIFRoaXMgaXMgYW4gaW50ZXJuYWwgY2xhc3MgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZQorICAgICAgICB1c2VkIGRpcmVjdGx5LgorICAgICAgICBTZXQgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FRklfUFJPVklERVInPjxmaWxlbmFtZT5FRklfUFJPVklERVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgdG8gImd1bW1pYm9vdCIgdG8gdXNlIHRoaXMgY2xhc3MuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBtb3JlIHZhcmlhYmxlcyB1c2VkIGFuZCBzdXBwb3J0ZWQgaW4gdGhpcyBjbGFzcywKKyAgICAgICAgc2VlIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItR1VNTUlCT09UX0NGRyc+PGZpbGVuYW1lPkdVTU1JQk9PVF9DRkc8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1HVU1NSUJPT1RfRU5UUklFUyc+PGZpbGVuYW1lPkdVTU1JQk9PVF9FTlRSSUVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUdVTU1JQk9PVF9USU1FT1VUJz48ZmlsZW5hbWU+R1VNTUlCT09UX1RJTUVPVVQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBZb3UgY2FuIGFsc28gc2VlIHRoZQorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvZ3VtbWlib290Lyc+R3VtbWlib290IGRvY3VtZW50YXRpb248L3VsaW5rPgorICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1nemlwbmF0aXZlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmd6aXBuYXRpdmUuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmd6aXBuYXRpdmU8L2ZpbGVuYW1lPgorICAgICAgICBjbGFzcyBlbmFibGVzIHRoZSB1c2Ugb2YgbmF0aXZlIHZlcnNpb25zIG9mIDxmaWxlbmFtZT5nemlwPC9maWxlbmFtZT4KKyAgICAgICAgYW5kIDxmaWxlbmFtZT5waWd6PC9maWxlbmFtZT4gcmF0aGVyIHRoYW4gdGhlIHZlcnNpb25zIG9mIHRoZXNlIHRvb2xzCisgICAgICAgIGZyb20gdGhlIGJ1aWxkIGhvc3QuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtaWNlY2MnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+aWNlY2MuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmljZWNjPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9naXRodWIuY29tL2ljZWNjL2ljZWNyZWFtJz5JY2VjcmVhbTwvdWxpbms+LCB3aGljaAorICAgICAgICBmYWNpbGl0YXRlcyB0YWtpbmcgY29tcGlsZSBqb2JzIGFuZCBkaXN0cmlidXRpbmcgdGhlbSBhbW9uZyByZW1vdGUKKyAgICAgICAgbWFjaGluZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBjbGFzcyBzdGFnZXMgZGlyZWN0b3JpZXMgd2l0aCBzeW1saW5rcyBmcm9tIDxmaWxlbmFtZT5nY2M8L2ZpbGVuYW1lPgorICAgICAgICBhbmQgPGZpbGVuYW1lPmcrKzwvZmlsZW5hbWU+IHRvIDxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+LCBmb3IgYm90aAorICAgICAgICBuYXRpdmUgYW5kIGNyb3NzIGNvbXBpbGVycy4KKyAgICAgICAgRGVwZW5kaW5nIG9uIGVhY2ggY29uZmlndXJlIG9yIGNvbXBpbGUsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgIGFkZHMgdGhlIGRpcmVjdG9yaWVzIGF0IHRoZSBoZWFkIG9mIHRoZSA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IGxpc3QKKyAgICAgICAgYW5kIHRoZW4gc2V0cyB0aGUgPGZpbGVuYW1lPklDRUNDX0NYWDwvZmlsZW5hbWU+IGFuZAorICAgICAgICA8ZmlsZW5hbWU+SUNFQ19DQzwvZmlsZW5hbWU+IHZhcmlhYmxlcywgd2hpY2ggYXJlIHRoZSBwYXRocyB0byB0aGUKKyAgICAgICAgPGZpbGVuYW1lPmcrKzwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+Z2NjPC9maWxlbmFtZT4gY29tcGlsZXJzLAorICAgICAgICByZXNwZWN0aXZlbHkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciB0aGUgY3Jvc3MgY29tcGlsZXIsIHRoZSBjbGFzcyBjcmVhdGVzIGEgPGZpbGVuYW1lPnRhci5nejwvZmlsZW5hbWU+CisgICAgICAgIGZpbGUgdGhhdCBjb250YWlucyB0aGUgWW9jdG8gUHJvamVjdCB0b29sY2hhaW4gYW5kIHNldHMKKyAgICAgICAgPGZpbGVuYW1lPklDRUNDX1ZFUlNJT048L2ZpbGVuYW1lPiwgd2hpY2ggaXMgdGhlIHZlcnNpb24gb2YgdGhlCisgICAgICAgIGNyb3NzLWNvbXBpbGVyIHVzZWQgaW4gdGhlIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbiwgYWNjb3JkaW5nbHkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBjbGFzcyBoYW5kbGVzIGFsbCB0aHJlZSBkaWZmZXJlbnQgY29tcGlsZSBzdGFnZXMKKyAgICAgICAgKGkuZSBuYXRpdmUgLGNyb3NzLWtlcm5lbCBhbmQgdGFyZ2V0KSBhbmQgY3JlYXRlcyB0aGUgbmVjZXNzYXJ5CisgICAgICAgIGVudmlyb25tZW50IDxmaWxlbmFtZT50YXIuZ3o8L2ZpbGVuYW1lPiBmaWxlIHRvIGJlIHVzZWQgYnkgdGhlIHJlbW90ZQorICAgICAgICBtYWNoaW5lcy4KKyAgICAgICAgVGhlIGNsYXNzIGFsc28gc3VwcG9ydHMgU0RLIGdlbmVyYXRpb24uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIElmIDxsaW5rIGxpbmtlbmQ9J3Zhci1JQ0VDQ19QQVRIJz48ZmlsZW5hbWU+SUNFQ0NfUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBpcyBub3Qgc2V0IGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCB0aGVuIHRoZQorICAgICAgICBjbGFzcyB0cmllcyB0byBsb2NhdGUgdGhlIDxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+IGJpbmFyeQorICAgICAgICB1c2luZyA8ZmlsZW5hbWU+d2hpY2g8L2ZpbGVuYW1lPi4KKworICAgICAgICBJZgorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSUNFQ0NfRU5WX0VYRUMnPjxmaWxlbmFtZT5JQ0VDQ19FTlZfRVhFQzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBpcyBzZXQgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUsIHRoZSB2YXJpYWJsZSBzaG91bGQKKyAgICAgICAgcG9pbnQgdG8gdGhlIDxmaWxlbmFtZT5pY2VjYy1jcmVhdGUtZW52PC9maWxlbmFtZT4gc2NyaXB0CisgICAgICAgIHByb3ZpZGVkIGJ5IHRoZSB1c2VyLgorICAgICAgICBJZiB5b3UgZG8gbm90IHBvaW50IHRvIGEgdXNlci1wcm92aWRlZCBzY3JpcHQsIHRoZSBidWlsZCBzeXN0ZW0KKyAgICAgICAgdXNlcyB0aGUgZGVmYXVsdCBzY3JpcHQgcHJvdmlkZWQgYnkgdGhlIHJlY2lwZQorICAgICAgICA8ZmlsZW5hbWU+aWNlY2MtY3JlYXRlLWVudi1uYXRpdmUuYmI8L2ZpbGVuYW1lPi4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBUaGlzIHNjcmlwdCBpcyBhIG1vZGlmaWVkIHZlcnNpb24gYW5kIG5vdCB0aGUgb25lIHRoYXQgY29tZXMgd2l0aAorICAgICAgICAgICAgPGZpbGVuYW1lPmljZWNjPC9maWxlbmFtZT4uCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSWYgeW91IGRvIG5vdCB3YW50IHRoZSBJY2VjcmVhbSBkaXN0cmlidXRlZCBjb21waWxlIHN1cHBvcnQgdG8gYXBwbHkKKyAgICAgICAgdG8gc3BlY2lmaWMgcmVjaXBlcyBvciBjbGFzc2VzLCB5b3UgY2FuIGVmZmVjdGl2ZWx5ICJibGFja2xpc3QiIHRoZW0KKyAgICAgICAgYnkgbGlzdGluZyB0aGUgcmVjaXBlcyBhbmQgY2xhc3NlcyB1c2luZyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlDRUNDX1VTRVJfUEFDS0FHRV9CTCc+PGZpbGVuYW1lPklDRUNDX1VTRVJfUEFDS0FHRV9CTDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlDRUNDX1VTRVJfQ0xBU1NfQkwnPjxmaWxlbmFtZT5JQ0VDQ19VU0VSX0NMQVNTX0JMPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICB2YXJpYWJsZXMsIHJlc3BlY3RpdmVseSwgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgIERvaW5nIHNvIGNhdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBoYW5kbGUgdGhlc2UKKyAgICAgICAgY29tcGlsYXRpb25zIGxvY2FsbHkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEFkZGl0aW9uYWxseSwgeW91IGNhbiBsaXN0IHJlY2lwZXMgdXNpbmcgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JQ0VDQ19VU0VSX1BBQ0tBR0VfV0wnPjxmaWxlbmFtZT5JQ0VDQ19VU0VSX1BBQ0tBR0VfV0w8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgdG8gZm9yY2UKKyAgICAgICAgPGZpbGVuYW1lPmljZWNjPC9maWxlbmFtZT4gdG8gYmUgZW5hYmxlZCBmb3IgcmVjaXBlcyB1c2luZyBhbiBlbXB0eQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFSQUxMRUxfTUFLRSc+PGZpbGVuYW1lPlBBUkFMTEVMX01BS0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEluaGVyaXRpbmcgdGhlIDxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+IGNsYXNzIGNoYW5nZXMgYWxsIHNzdGF0ZQorICAgICAgICBzaWduYXR1cmVzLgorICAgICAgICBDb25zZXF1ZW50bHksIGlmIGEgZGV2ZWxvcG1lbnQgdGVhbSBoYXMgYSBkZWRpY2F0ZWQgYnVpbGQgc3lzdGVtCisgICAgICAgIHRoYXQgcG9wdWxhdGVzCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TU1RBVEVfTUlSUk9SUyc+PGZpbGVuYW1lPlNUQVRFX01JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgYW5kIHRoZXkgd2FudCB0byByZXVzZSBzc3RhdGUgZnJvbQorICAgICAgICA8ZmlsZW5hbWU+U1RBVEVfTUlSUk9SUzwvZmlsZW5hbWU+LCB0aGVuIGFsbCBkZXZlbG9wZXJzIGFuZCB0aGUKKyAgICAgICAgYnVpbGQgc3lzdGVtIG5lZWQgdG8gZWl0aGVyIGluaGVyaXQgdGhlIDxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+CisgICAgICAgIGNsYXNzIG9yIG5vYm9keSBzaG91bGQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEF0IHRoZSBkaXN0cmlidXRpb24gbGV2ZWwsIHlvdSBjYW4gaW5oZXJpdCB0aGUKKyAgICAgICAgPGZpbGVuYW1lPmljZWNjPC9maWxlbmFtZT4gY2xhc3MgdG8gYmUgc3VyZSB0aGF0IGFsbCBidWlsZGVycyBzdGFydAorICAgICAgICB3aXRoIHRoZSBzYW1lIHNzdGF0ZSBzaWduYXR1cmVzLgorICAgICAgICBBZnRlciBpbmhlcml0aW5nIHRoZSBjbGFzcywgeW91IGNhbiB0aGVuIGRpc2FibGUgdGhlIGZlYXR1cmUgYnkgc2V0dGluZworICAgICAgICB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlDRUNDX0RJU0FCTEVEJz48ZmlsZW5hbWU+SUNFQ0NfRElTQUJMRUQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgdG8gIjEiIGFzIGZvbGxvd3M6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5IRVJJVF9ESVNUUk9fYXBwZW5kID0gIiBpY2VjYyIKKyAgICAgSUNFQ0NfRElTQUJMRUQgPz89ICIxIgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIFRoaXMgcHJhY3RpY2UgbWFrZXMgc3VyZSBldmVyeW9uZSBpcyB1c2luZyB0aGUgc2FtZSBzaWduYXR1cmVzIGJ1dCBhbHNvCisgICAgICAgIHJlcXVpcmVzIGluZGl2aWR1YWxzIHRoYXQgZG8gd2FudCB0byB1c2UgSWNlY3JlYW0gdG8gZW5hYmxlIHRoZSBmZWF0dXJlCisgICAgICAgIGluZGl2aWR1YWxseSBhcyBmb2xsb3dzIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElDRUNDX0RJU0FCTEVEID0gIiIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWltYWdlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmltYWdlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5pbWFnZTwvZmlsZW5hbWU+IGNsYXNzIGhlbHBzIHN1cHBvcnQgY3JlYXRpbmcgaW1hZ2VzCisgICAgICAgIGluIGRpZmZlcmVudCBmb3JtYXRzLgorICAgICAgICBGaXJzdCwgdGhlIHJvb3QgZmlsZXN5c3RlbSBpcyBjcmVhdGVkIGZyb20gcGFja2FnZXMgdXNpbmcKKyAgICAgICAgb25lIG9mIHRoZSA8ZmlsZW5hbWU+cm9vdGZzKi5iYmNsYXNzPC9maWxlbmFtZT4KKyAgICAgICAgZmlsZXMgKGRlcGVuZGluZyBvbiB0aGUgcGFja2FnZSBmb3JtYXQgdXNlZCkgYW5kIHRoZW4gb25lIG9yIG1vcmUgaW1hZ2UKKyAgICAgICAgZmlsZXMgYXJlIGNyZWF0ZWQuCisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GU1RZUEVTJz5JTUFHRV9GU1RZUEVTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgY29udHJvbHMgdGhlIHR5cGVzIG9mIGltYWdlcyB0byBnZW5lcmF0ZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0lOU1RBTEwnPklNQUdFX0lOU1RBTEw8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBjb250cm9scyB0aGUgbGlzdCBvZiBwYWNrYWdlcyB0byBpbnN0YWxsIGludG8gdGhlCisgICAgICAgICAgICAgICAgaW1hZ2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gY3VzdG9taXppbmcgaW1hZ2VzLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1c2luZ3Bva3ktZXh0ZW5kLWN1c3RvbWltYWdlJz5DdXN0b21pemluZyBJbWFnZXM8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgaW1hZ2VzIGFyZSBjcmVhdGVkLCBzZWUgdGhlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdpbWFnZXMtZGV2LWVudmlyb25tZW50Jz5JbWFnZXM8L2xpbms+IiBzZWN0aW9uIGVsc2V3aGVyZQorICAgICAgICBpbiB0aGlzIG1hbnVhbC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1pbWFnZV90eXBlcyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5pbWFnZV90eXBlcy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+aW1hZ2VfdHlwZXM8L2ZpbGVuYW1lPiBjbGFzcyBkZWZpbmVzIGFsbCBvZgorICAgICAgICB0aGUgc3RhbmRhcmQgaW1hZ2Ugb3V0cHV0IHR5cGVzIHRoYXQgeW91IGNhbiBlbmFibGUgdGhyb3VnaCB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlLgorICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIGNsYXNzIGFzIGEgcmVmZXJlbmNlIG9uIGhvdyB0byBhZGQgc3VwcG9ydCBmb3IgY3VzdG9tCisgICAgICAgIGltYWdlIG91dHB1dCB0eXBlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyBjbGFzcyBpcyBlbmFibGVkIHRocm91Z2ggdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9DTEFTU0VTJz48ZmlsZW5hbWU+SU1BR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZSBpbgorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pbWFnZSc+PGZpbGVuYW1lPmltYWdlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgIElmIHlvdSBkZWZpbmUgeW91ciBvd24gaW1hZ2UgdHlwZXMgdXNpbmcgYSBjdXN0b20gQml0QmFrZSBjbGFzcyBhbmQKKyAgICAgICAgdGhlbiB1c2UgPGZpbGVuYW1lPklNQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPiB0byBlbmFibGUgaXQsIHRoZSBjdXN0b20KKyAgICAgICAgY2xhc3MgbXVzdCBlaXRoZXIgaW5oZXJpdCA8ZmlsZW5hbWU+aW1hZ2VfdHlwZXM8L2ZpbGVuYW1lPiBvcgorICAgICAgICA8ZmlsZW5hbWU+aW1hZ2VfdHlwZXM8L2ZpbGVuYW1lPiBtdXN0IGFsc28gYXBwZWFyIGluCisgICAgICAgIDxmaWxlbmFtZT5JTUFHRV9DTEFTU0VTPC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtaW1hZ2VfdHlwZXNfdWJvb3QnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+aW1hZ2VfdHlwZXNfdWJvb3QuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmltYWdlX3R5cGVzX3Vib290PC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgZGVmaW5lcyBhZGRpdGlvbmFsIGltYWdlIHR5cGVzIHNwZWNpZmljYWxseSBmb3IgdGhlIFUtQm9vdCBib290bG9hZGVyLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWltYWdlLWxpdmUnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+aW1hZ2UtbGl2ZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+aW1hZ2UtbGl2ZTwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIGJ1aWxkaW5nICJsaXZlIgorICAgICAgICBpbWFnZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIE5vcm1hbGx5LCB5b3UgZG8gbm90IHVzZSB0aGlzIGNsYXNzIGRpcmVjdGx5LgorICAgICAgICBJbnN0ZWFkLCB5b3UgYWRkICJsaXZlIiB0bworICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+PGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3Ugd2VyZSBidWlsZGluZyBhbiBJU08gaW1hZ2UsIHlvdSB3b3VsZCBhZGQgImxpdmUiCisgICAgICAgIHRvIDxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT4sIHNldCB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU5PSVNPJz48ZmlsZW5hbWU+Tk9JU088L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUgdG8KKyAgICAgICAgIjAiIGFuZCB0aGUgYnVpbGQgc3lzdGVtIHdvdWxkIHVzZSB0aGUgPGZpbGVuYW1lPmltYWdlLWxpdmU8L2ZpbGVuYW1lPgorICAgICAgICBjbGFzcyB0byBidWlsZCB0aGUgSVNPIGltYWdlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWltYWdlLW1rbGlicyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5pbWFnZS1ta2xpYnMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmltYWdlLW1rbGliczwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIGVuYWJsZXMgdGhlIHVzZSBvZiB0aGUgPGZpbGVuYW1lPm1rbGliczwvZmlsZW5hbWU+IHV0aWxpdHkgZHVyaW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3Mtcm9vdGZzJz48ZmlsZW5hbWU+ZG9fcm9vdGZzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHRhc2ssIHdoaWNoIG9wdGltaXplcyB0aGUgc2l6ZSBvZgorICAgICAgICBsaWJyYXJpZXMgY29udGFpbmVkIGluIHRoZSBpbWFnZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQnkgZGVmYXVsdCwgdGhlIGNsYXNzIGlzIGVuYWJsZWQgaW4gdGhlCisgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mLnRlbXBsYXRlPC9maWxlbmFtZT4gdXNpbmcgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VU0VSX0NMQVNTRVMnPjxmaWxlbmFtZT5VU0VSX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgYXMgZm9sbG93czoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBVU0VSX0NMQVNTRVMgPz0gImJ1aWxkc3RhdHMgaW1hZ2UtbWtsaWJzIGltYWdlLXByZWxpbmsiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1pbWFnZS1wcmVsaW5rJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmltYWdlLXByZWxpbmsuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmltYWdlLXByZWxpbms8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBlbmFibGVzIHRoZSB1c2Ugb2YgdGhlIDxmaWxlbmFtZT5wcmVsaW5rPC9maWxlbmFtZT4gdXRpbGl0eSBkdXJpbmcKKyAgICAgICAgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1yb290ZnMnPjxmaWxlbmFtZT5kb19yb290ZnM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdGFzaywgd2hpY2ggb3B0aW1pemVzIHRoZSBkeW5hbWljCisgICAgICAgIGxpbmtpbmcgb2Ygc2hhcmVkIGxpYnJhcmllcyB0byByZWR1Y2UgZXhlY3V0YWJsZSBzdGFydHVwIHRpbWUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBjbGFzcyBpcyBlbmFibGVkIGluIHRoZQorICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZi50ZW1wbGF0ZTwvZmlsZW5hbWU+IHVzaW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUl9DTEFTU0VTJz48ZmlsZW5hbWU+VVNFUl9DTEFTU0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIGFzIGZvbGxvd3M6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVVNFUl9DTEFTU0VTID89ICJidWlsZHN0YXRzIGltYWdlLW1rbGlicyBpbWFnZS1wcmVsaW5rIgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtaW1hZ2Utc3dhYic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5pbWFnZS1zd2FiLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5pbWFnZS1zd2FiPC9maWxlbmFtZT4gY2xhc3MgZW5hYmxlcyB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy90b29scy1yZXNvdXJjZXMvcHJvamVjdHMvc3dhYmJlcic+U3dhYmJlcjwvdWxpbms+CisgICAgICAgIHRvb2wgaW4gb3JkZXIgdG8gZGV0ZWN0IGFuZCBsb2cgYWNjZXNzZXMgdG8gdGhlIGhvc3Qgc3lzdGVtIGR1cmluZworICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgVGhpcyBjbGFzcyBpcyBjdXJyZW50bHkgdW5tYWludGFpbmVkLgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtaW1hZ2Utdm1kayc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5pbWFnZS12bWRrLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5pbWFnZS12bWRrPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgYnVpbGRpbmcgVk13YXJlCisgICAgICAgIFZNREsgaW1hZ2VzLgorICAgICAgICBOb3JtYWxseSwgeW91IGRvIG5vdCB1c2UgdGhpcyBjbGFzcyBkaXJlY3RseS4KKyAgICAgICAgSW5zdGVhZCwgeW91IGFkZCAidm1kayIgdG8KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWluc2FuZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5pbnNhbmUuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmluc2FuZTwvZmlsZW5hbWU+IGNsYXNzIGFkZHMgYSBzdGVwIHRvIHRoZSBwYWNrYWdlCisgICAgICAgIGdlbmVyYXRpb24gcHJvY2VzcyBzbyB0aGF0IG91dHB1dCBxdWFsaXR5IGFzc3VyYW5jZSBjaGVja3MgYXJlCisgICAgICAgIGdlbmVyYXRlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgQSByYW5nZSBvZiBjaGVja3MgYXJlIHBlcmZvcm1lZCB0aGF0IGNoZWNrIHRoZSBidWlsZCdzIG91dHB1dAorICAgICAgICBmb3IgY29tbW9uIHByb2JsZW1zIHRoYXQgc2hvdyB1cCBkdXJpbmcgcnVudGltZS4KKyAgICAgICAgRGlzdHJpYnV0aW9uIHBvbGljeSB1c3VhbGx5IGRpY3RhdGVzIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGlzIGNsYXNzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBZb3UgY2FuIGNvbmZpZ3VyZSB0aGUgc2FuaXR5IGNoZWNrcyBzbyB0aGF0IHNwZWNpZmljIHRlc3QgZmFpbHVyZXMKKyAgICAgICAgZWl0aGVyIHJhaXNlIGEgd2FybmluZyBvciBhbiBlcnJvciBtZXNzYWdlLgorICAgICAgICBUeXBpY2FsbHksIGZhaWx1cmVzIGZvciBuZXcgdGVzdHMgZ2VuZXJhdGUgYSB3YXJuaW5nLgorICAgICAgICBTdWJzZXF1ZW50IGZhaWx1cmVzIGZvciB0aGUgc2FtZSB0ZXN0IHdvdWxkIHRoZW4gZ2VuZXJhdGUgYW4gZXJyb3IKKyAgICAgICAgbWVzc2FnZSBvbmNlIHRoZSBtZXRhZGF0YSBpcyBpbiBhIGtub3duIGFuZCBnb29kIGNvbmRpdGlvbi4KKyAgICAgICAgU2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLXFhLWNoZWNrcyc+UUEgRXJyb3IgYW5kIFdhcm5pbmcgTWVzc2FnZXM8L2xpbms+IgorICAgICAgICBDaGFwdGVyIGZvciBhIGxpc3Qgb2YgYWxsIHRoZSB3YXJuaW5nIGFuZCBlcnJvciBtZXNzYWdlcworICAgICAgICB5b3UgbWlnaHQgZW5jb3VudGVyIHVzaW5nIGEgZGVmYXVsdCBjb25maWd1cmF0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBVc2UgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1XQVJOX1FBJz48ZmlsZW5hbWU+V0FSTl9RQTwvZmlsZW5hbWU+PC9saW5rPiBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVSUk9SX1FBJz48ZmlsZW5hbWU+RVJST1JfUUE8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGVzIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgIHRoZXNlIGNoZWNrcyBhdCB0aGUgZ2xvYmFsIGxldmVsIChpLmUuIGluIHlvdXIgY3VzdG9tIGRpc3RybworICAgICAgICBjb25maWd1cmF0aW9uKS4KKyAgICAgICAgSG93ZXZlciwgdG8gc2tpcCBvbmUgb3IgbW9yZSBjaGVja3MgaW4gcmVjaXBlcywgeW91IHNob3VsZCB1c2UKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlOU0FORV9TS0lQJz48ZmlsZW5hbWU+SU5TQU5FX1NLSVA8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgIEZvciBleGFtcGxlLCB0byBza2lwIHRoZSBjaGVjayBmb3Igc3ltYm9saWMgbGluaworICAgICAgICA8ZmlsZW5hbWU+LnNvPC9maWxlbmFtZT4gZmlsZXMgaW4gdGhlIG1haW4gcGFja2FnZSBvZiBhIHJlY2lwZSwKKyAgICAgICAgYWRkIHRoZSBmb2xsb3dpbmcgdG8gdGhlIHJlY2lwZS4KKyAgICAgICAgWW91IG5lZWQgdG8gcmVhbGl6ZSB0aGF0IHRoZSBwYWNrYWdlIG5hbWUgb3ZlcnJpZGUsIGluIHRoaXMgZXhhbXBsZQorICAgICAgICA8ZmlsZW5hbWU+JHtQTn08L2ZpbGVuYW1lPiwgbXVzdCBiZSB1c2VkOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOU0FORV9TS0lQXyR7UE59ICs9ICJkZXYtc28iCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgUGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBRQSBjaGVja3MgZXhpc3QgaW4gb3JkZXIgdG8gZGV0ZWN0IHJlYWwKKyAgICAgICAgb3IgcG90ZW50aWFsIHByb2JsZW1zIGluIHRoZSBwYWNrYWdlZCBvdXRwdXQuCisgICAgICAgIFNvIGV4ZXJjaXNlIGNhdXRpb24gd2hlbiBkaXNhYmxpbmcgdGhlc2UgY2hlY2tzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3Qgc2hvd3MgdGhlIHRlc3RzIHlvdSBjYW4gbGlzdCB3aXRoIHRoZQorICAgICAgICA8ZmlsZW5hbWU+V0FSTl9RQTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+RVJST1JfUUE8L2ZpbGVuYW1lPgorICAgICAgICB2YXJpYWJsZXM6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5hbHJlYWR5LXN0cmlwcGVkOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgdGhhdCBwcm9kdWNlZCBiaW5hcmllcyBoYXZlIG5vdCBhbHJlYWR5IGJlZW4KKyAgICAgICAgICAgICAgICBzdHJpcHBlZCBwcmlvciB0byB0aGUgYnVpbGQgc3lzdGVtIGV4dHJhY3RpbmcgZGVidWcgc3ltYm9scy4KKyAgICAgICAgICAgICAgICBJdCBpcyBjb21tb24gZm9yIHVwc3RyZWFtIHNvZnR3YXJlIHByb2plY3RzIHRvIGRlZmF1bHQgdG8KKyAgICAgICAgICAgICAgICBzdHJpcHBpbmcgZGVidWcgc3ltYm9scyBmb3Igb3V0cHV0IGJpbmFyaWVzLgorICAgICAgICAgICAgICAgIEluIG9yZGVyIGZvciBkZWJ1Z2dpbmcgdG8gd29yayBvbiB0aGUgdGFyZ2V0IHVzaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1kYmc8L2ZpbGVuYW1lPiBwYWNrYWdlcywgdGhpcyBzdHJpcHBpbmcgbXVzdCBiZQorICAgICAgICAgICAgICAgIGRpc2FibGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+YXJjaDo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIHRoZSBFeGVjdXRhYmxlIGFuZCBMaW5rYWJsZSBGb3JtYXQgKEVMRikgdHlwZSwgYml0IHNpemUsCisgICAgICAgICAgICAgICAgYW5kIGVuZGlhbm5lc3Mgb2YgYW55IGJpbmFyaWVzIHRvIGVuc3VyZSB0aGV5IG1hdGNoIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgVGhpcyB0ZXN0IGZhaWxzIGlmIGFueSBiaW5hcmllcyBkbyBub3QgbWF0Y2ggdGhlIHR5cGUgc2luY2UKKyAgICAgICAgICAgICAgICB0aGVyZSB3b3VsZCBiZSBhbiBpbmNvbXBhdGliaWxpdHkuCisgICAgICAgICAgICAgICAgVGhlIHRlc3QgY291bGQgaW5kaWNhdGUgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICB3cm9uZyBjb21waWxlciBvciBjb21waWxlciBvcHRpb25zIGhhdmUgYmVlbiB1c2VkLgorICAgICAgICAgICAgICAgIFNvbWV0aW1lcyBzb2Z0d2FyZSwgbGlrZSBib290bG9hZGVycywgbWlnaHQgbmVlZCB0byBieXBhc3MKKyAgICAgICAgICAgICAgICB0aGlzIGNoZWNrLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+YnVpbGRwYXRoczo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIGZvciBwYXRocyB0byBsb2NhdGlvbnMgb24gdGhlIGJ1aWxkIGhvc3QgaW5zaWRlIHRoZQorICAgICAgICAgICAgICAgIG91dHB1dCBmaWxlcy4KKyAgICAgICAgICAgICAgICBDdXJyZW50bHksIHRoaXMgdGVzdCB0cmlnZ2VycyB0b28gbWFueSBmYWxzZSBwb3NpdGl2ZXMgYW5kCisgICAgICAgICAgICAgICAgdGh1cyBpcyBub3Qgbm9ybWFsbHkgZW5hYmxlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmJ1aWxkLWRlcHM6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIERldGVybWluZXMgaWYgYSBidWlsZC10aW1lIGRlcGVuZGVuY3kgdGhhdCBpcyBzcGVjaWZpZWQgdGhyb3VnaAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICBleHBsaWNpdAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIG9yIHRhc2stbGV2ZWwgZGVwZW5kZW5jaWVzIGV4aXN0cyB0byBtYXRjaCBhbnkgcnVudGltZQorICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kuCisgICAgICAgICAgICAgICAgVGhpcyBkZXRlcm1pbmF0aW9uIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgdG8gZGlzY292ZXIgd2hlcmUKKyAgICAgICAgICAgICAgICBydW50aW1lIGRlcGVuZGVuY2llcyBhcmUgZGV0ZWN0ZWQgYW5kIGFkZGVkIGR1cmluZyBwYWNrYWdpbmcuCisgICAgICAgICAgICAgICAgSWYgbm8gZXhwbGljaXQgZGVwZW5kZW5jeSBoYXMgYmVlbiBzcGVjaWZpZWQgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgIG1ldGFkYXRhLCBhdCB0aGUgcGFja2FnaW5nIHN0YWdlIGl0IGlzIHRvbyBsYXRlIHRvIGVuc3VyZSB0aGF0CisgICAgICAgICAgICAgICAgdGhlIGRlcGVuZGVuY3kgaXMgYnVpbHQsIGFuZCB0aHVzIHlvdSBjYW4gZW5kIHVwIHdpdGggYW4KKyAgICAgICAgICAgICAgICBlcnJvciB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZCBpbnRvIHRoZSBpbWFnZSBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXJvb3Rmcyc+PGZpbGVuYW1lPmRvX3Jvb3RmczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHRhc2sgYmVjYXVzZSB0aGUgYXV0by1kZXRlY3RlZCBkZXBlbmRlbmN5IHdhcyBub3Qgc2F0aXNmaWVkLgorICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgb2YgdGhpcyB3b3VsZCBiZSB3aGVyZSB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy11cGRhdGUtcmMuZCc+PGZpbGVuYW1lPnVwZGF0ZS1yYy5kPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgY2xhc3MgYXV0b21hdGljYWxseSBhZGRzIGEgZGVwZW5kZW5jeSBvbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW5pdHNjcmlwdHMtZnVuY3Rpb25zPC9maWxlbmFtZT4gcGFja2FnZSB0byBwYWNrYWdlcworICAgICAgICAgICAgICAgIHRoYXQgaW5zdGFsbCBhbiBpbml0c2NyaXB0IHRoYXQgcmVmZXJzIHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvaW5pdC5kL2Z1bmN0aW9uczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgc2hvdWxkIHJlYWxseSBoYXZlIGFuIGV4cGxpY2l0CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gZm9yIHRoZSBwYWNrYWdlIGluIHF1ZXN0aW9uIG9uCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluaXRzY3JpcHRzLWZ1bmN0aW9uczwvZmlsZW5hbWU+IHNvIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpcyBhYmxlIHRvIGVuc3VyZSB0aGF0IHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbml0c2NyaXB0czwvZmlsZW5hbWU+IHJlY2lwZSBpcyBhY3R1YWxseSBidWlsdCBhbmQKKyAgICAgICAgICAgICAgICB0aHVzIHRoZSA8ZmlsZW5hbWU+aW5pdHNjcmlwdHMtZnVuY3Rpb25zPC9maWxlbmFtZT4gcGFja2FnZSBpcworICAgICAgICAgICAgICAgIG1hZGUgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Y29tcGlsZS1ob3N0LXBhdGg6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBsb2cgZm9yIGluZGljYXRpb25zCisgICAgICAgICAgICAgICAgdGhhdCBwYXRocyB0byBsb2NhdGlvbnMgb24gdGhlIGJ1aWxkIGhvc3Qgd2VyZSB1c2VkLgorICAgICAgICAgICAgICAgIFVzaW5nIHN1Y2ggcGF0aHMgbWlnaHQgcmVzdWx0IGluIGhvc3QgY29udGFtaW5hdGlvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCBvdXRwdXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kZWJ1Zy1kZXBzOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgdGhhdCBhbGwgcGFja2FnZXMgZXhjZXB0IDxmaWxlbmFtZT4tZGJnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBwYWNrYWdlcyBkbyBub3QgZGVwZW5kIG9uIDxmaWxlbmFtZT4tZGJnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBwYWNrYWdlcywgd2hpY2ggd291bGQgY2F1c2UgYSBwYWNrYWdpbmcgYnVnLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZGVidWctZmlsZXM6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyBmb3IgPGZpbGVuYW1lPi5kZWJ1ZzwvZmlsZW5hbWU+IGRpcmVjdG9yaWVzIGluIGFueXRoaW5nIGJ1dCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWRiZzwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgVGhlIGRlYnVnIGZpbGVzIHNob3VsZCBhbGwgYmUgaW4gdGhlIDxmaWxlbmFtZT4tZGJnPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICBUaHVzLCBhbnl0aGluZyBwYWNrYWdlZCBlbHNld2hlcmUgaXMgaW5jb3JyZWN0IHBhY2thZ2luZy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmRlcC1jbXA6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyBmb3IgaW52YWxpZCB2ZXJzaW9uIGNvbXBhcmlzb24gc3RhdGVtZW50cyBpbiBydW50aW1lCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXBzIGJldHdlZW4gcGFja2FnZXMgKGkuZS4gaW4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlNVR0dFU1RTJz48ZmlsZW5hbWU+UlNVR0dFU1RTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUFJPVklERVMnPjxmaWxlbmFtZT5SUFJPVklERVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJSRVBMQUNFUyc+PGZpbGVuYW1lPlJSRVBMQUNFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkNPTkZMSUNUUyc+PGZpbGVuYW1lPlJDT05GTElDVFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB2YWx1ZXMpLgorICAgICAgICAgICAgICAgIEFueSBpbnZhbGlkIGNvbXBhcmlzb25zIG1pZ2h0IHRyaWdnZXIgZmFpbHVyZXMgb3IgdW5kZXNpcmFibGUKKyAgICAgICAgICAgICAgICBiZWhhdmlvciB3aGVuIHBhc3NlZCB0byB0aGUgcGFja2FnZSBtYW5hZ2VyLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZGVza3RvcDo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgUnVucyB0aGUgPGZpbGVuYW1lPmRlc2t0b3AtZmlsZS12YWxpZGF0ZTwvZmlsZW5hbWU+IHByb2dyYW0KKyAgICAgICAgICAgICAgICBhZ2FpbnN0IGFueSA8ZmlsZW5hbWU+LmRlc2t0b3A8L2ZpbGVuYW1lPiBmaWxlcyB0byB2YWxpZGF0ZQorICAgICAgICAgICAgICAgIHRoZWlyIGNvbnRlbnRzIGFnYWluc3QgdGhlIHNwZWNpZmljYXRpb24gZm9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5kZXNrdG9wPC9maWxlbmFtZT4gZmlsZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kZXYtZGVwczo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIHRoYXQgYWxsIHBhY2thZ2VzIGV4Y2VwdCA8ZmlsZW5hbWU+LWRldjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgb3IgPGZpbGVuYW1lPi1zdGF0aWNkZXY8L2ZpbGVuYW1lPiBwYWNrYWdlcyBkbyBub3QgZGVwZW5kIG9uCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1kZXY8L2ZpbGVuYW1lPiBwYWNrYWdlcywgd2hpY2ggd291bGQgYmUgYQorICAgICAgICAgICAgICAgIHBhY2thZ2luZyBidWcuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kZXYtc286PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyB0aGF0IHRoZSA8ZmlsZW5hbWU+LnNvPC9maWxlbmFtZT4gc3ltYm9saWMgbGlua3MgYXJlIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZGV2PC9maWxlbmFtZT4gcGFja2FnZSBhbmQgbm90IGluIGFueSBvZiB0aGUgb3RoZXIgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgSW4gZ2VuZXJhbCwgdGhlc2Ugc3ltbGlua3MgYXJlIG9ubHkgdXNlZnVsIGZvciBkZXZlbG9wbWVudCBwdXJwb3Nlcy4KKyAgICAgICAgICAgICAgICBUaHVzLCB0aGUgPGZpbGVuYW1lPi1kZXY8L2ZpbGVuYW1lPiBwYWNrYWdlIGlzIHRoZSBjb3JyZWN0IGxvY2F0aW9uIGZvcgorICAgICAgICAgICAgICAgIHRoZW0uCisgICAgICAgICAgICAgICAgU29tZSB2ZXJ5IHJhcmUgY2FzZXMgZG8gZXhpc3QgZm9yIGR5bmFtaWNhbGx5IGxvYWRlZCBtb2R1bGVzIHdoZXJlCisgICAgICAgICAgICAgICAgdGhlc2Ugc3ltbGlua3MgYXJlIG5lZWRlZCBpbnN0ZWFkIGluIHRoZSBtYWluIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5maWxlLXJkZXBzOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgdGhhdCBmaWxlLWxldmVsIGRlcGVuZGVuY2llcyBpZGVudGlmaWVkIGJ5IHRoZQorICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXQgcGFja2FnaW5nIHRpbWUgYXJlIHNhdGlzZmllZC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYSBzaGVsbCBzY3JpcHQgbWlnaHQgc3RhcnQgd2l0aCB0aGUgbGluZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4jIS9iaW4vYmFzaDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoaXMgbGluZSB3b3VsZCB0cmFuc2xhdGUgdG8gYSBmaWxlIGRlcGVuZGVuY3kgb24KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2Jpbi9iYXNoPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgT2YgdGhlIHRocmVlIHBhY2thZ2UgbWFuYWdlcnMgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgc3lzdGVtIHN1cHBvcnRzLCBvbmx5IFJQTSBkaXJlY3RseSBoYW5kbGVzIGZpbGUtbGV2ZWwKKyAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMsIHJlc29sdmluZyB0aGVtIGF1dG9tYXRpY2FsbHkgdG8gcGFja2FnZXMKKyAgICAgICAgICAgICAgICBwcm92aWRpbmcgdGhlIGZpbGVzLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBsYWNrIG9mIHRoYXQgZnVuY3Rpb25hbGl0eSBpbiB0aGUgb3RoZXIgdHdvCisgICAgICAgICAgICAgICAgcGFja2FnZSBtYW5hZ2VycyBkb2VzIG5vdCBtZWFuIHRoZSBkZXBlbmRlbmNpZXMgZG8gbm90IHN0aWxsCisgICAgICAgICAgICAgICAgbmVlZCByZXNvbHZpbmcuCisgICAgICAgICAgICAgICAgVGhpcyBRQSBjaGVjayBhdHRlbXB0cyB0byBlbnN1cmUgdGhhdCBleHBsaWNpdGx5IGRlY2xhcmVkCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBleGlzdCB0byBoYW5kbGUgYW55IGZpbGUtbGV2ZWwgZGVwZW5kZW5jeSBkZXRlY3RlZCBpbgorICAgICAgICAgICAgICAgIHBhY2thZ2VkIGZpbGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZmlsZXMtaW52YWxpZDo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIGZvcgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgdmFsdWVzIHRoYXQgY29udGFpbiAiLy8iLCB3aGljaCBpcyBpbnZhbGlkLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+aW5jb21wYXRpYmxlLWxpY2Vuc2U6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFJlcG9ydCB3aGVuIHBhY2thZ2VzIGFyZSBleGNsdWRlZCBmcm9tIGJlaW5nIGNyZWF0ZWQgZHVlIHRvCisgICAgICAgICAgICAgICAgYmVpbmcgbWFya2VkIHdpdGggYSBsaWNlbnNlIHRoYXQgaXMgaW4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU5DT01QQVRJQkxFX0xJQ0VOU0UnPjxmaWxlbmFtZT5JTkNPTVBBVElCTEVfTElDRU5TRTwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmluc3RhbGwtaG9zdC1wYXRoOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgbG9nIGZvciBpbmRpY2F0aW9ucworICAgICAgICAgICAgICAgIHRoYXQgcGF0aHMgdG8gbG9jYXRpb25zIG9uIHRoZSBidWlsZCBob3N0IHdlcmUgdXNlZC4KKyAgICAgICAgICAgICAgICBVc2luZyBzdWNoIHBhdGhzIG1pZ2h0IHJlc3VsdCBpbiBob3N0IGNvbnRhbWluYXRpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgYnVpbGQgb3V0cHV0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+aW5zdGFsbGVkLXZzLXNoaXBwZWQ6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFJlcG9ydHMgd2hlbiBmaWxlcyBoYXZlIGJlZW4gaW5zdGFsbGVkIHdpdGhpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4gYnV0IGhhdmUgbm90IGJlZW4gaW5jbHVkZWQgaW4KKyAgICAgICAgICAgICAgICBhbnkgcGFja2FnZSBieSB3YXkgb2YgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTJz48ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBGaWxlcyB0aGF0IGRvIG5vdCBhcHBlYXIgaW4gYW55IHBhY2thZ2UgY2Fubm90IGJlIHByZXNlbnQgaW4KKyAgICAgICAgICAgICAgICBhbiBpbWFnZSBsYXRlciBvbiBpbiB0aGUgYnVpbGQgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICBJZGVhbGx5LCBhbGwgaW5zdGFsbGVkIGZpbGVzIHNob3VsZCBiZSBwYWNrYWdlZCBvciBub3QKKyAgICAgICAgICAgICAgICBpbnN0YWxsZWQgYXQgYWxsLgorICAgICAgICAgICAgICAgIFRoZXNlIGZpbGVzIGNhbiBiZSBkZWxldGVkIGF0IHRoZSBlbmQgb2YKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+IGlmIHRoZSBmaWxlcyBhcmUgbm90CisgICAgICAgICAgICAgICAgbmVlZGVkIGluIGFueSBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bGE6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyA8ZmlsZW5hbWU+LmxhPC9maWxlbmFtZT4gZmlsZXMgZm9yIGFueSA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBwYXRocy4KKyAgICAgICAgICAgICAgICBBbnkgPGZpbGVuYW1lPi5sYTwvZmlsZW5hbWU+IGZpbGUgY29udGFpbmluZyB0aGVzZSBwYXRocyBpcyBpbmNvcnJlY3Qgc2luY2UKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlidG9vbDwvZmlsZW5hbWU+IGFkZHMgdGhlIGNvcnJlY3Qgc3lzcm9vdCBwcmVmaXggd2hlbiB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICBmaWxlcyBhdXRvbWF0aWNhbGx5IGl0c2VsZi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmxkZmxhZ3M6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEVuc3VyZXMgdGhhdCB0aGUgYmluYXJpZXMgd2VyZSBsaW5rZWQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTERGTEFHUyc+PGZpbGVuYW1lPkxERkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBvcHRpb25zIHByb3ZpZGVkIGJ5IHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgSWYgdGhpcyB0ZXN0IGZhaWxzLCBjaGVjayB0aGF0IHRoZSA8ZmlsZW5hbWU+TERGTEFHUzwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgaXMgYmVpbmcgcGFzc2VkIHRvIHRoZSBsaW5rZXIgY29tbWFuZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmxpYmRpcjo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIGZvciBsaWJyYXJpZXMgYmVpbmcgaW5zdGFsbGVkIGludG8gaW5jb3JyZWN0CisgICAgICAgICAgICAgICAgKHBvc3NpYmx5IGhhcmRjb2RlZCkgaW5zdGFsbGF0aW9uIHBhdGhzLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGlzIHRlc3Qgd2lsbCBjYXRjaCByZWNpcGVzIHRoYXQgaW5zdGFsbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vbGliL2Jhci5zbzwvZmlsZW5hbWU+IHdoZW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiYXNlX2xpYmRpcn08L2ZpbGVuYW1lPiBpcyAibGliMzIiLgorICAgICAgICAgICAgICAgIEFub3RoZXIgZXhhbXBsZSBpcyB3aGVuIHJlY2lwZXMgaW5zdGFsbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2xpYjY0L2Zvby5zbzwvZmlsZW5hbWU+IHdoZW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtsaWJkaXJ9PC9maWxlbmFtZT4gaXMgIi91c3IvbGliIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmxpYmV4ZWM6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyBpZiBhIHBhY2thZ2UgY29udGFpbnMgZmlsZXMgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9saWJleGVjPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhpcyBjaGVjayBpcyBub3QgcGVyZm9ybWVkIGlmIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJleGVjZGlyPC9maWxlbmFtZT4gdmFyaWFibGUgaGFzIGJlZW4gc2V0CisgICAgICAgICAgICAgICAgZXhwbGljaXRseSB0byA8ZmlsZW5hbWU+L3Vzci9saWJleGVjPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wYWNrYWdlcy1saXN0OjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgZm9yIHRoZSBzYW1lIHBhY2thZ2UgYmVpbmcgbGlzdGVkIG11bHRpcGxlIHRpbWVzIHRocm91Z2gKKyAgICAgICAgICAgICAgICB0aGUgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB2YWx1ZS4KKyAgICAgICAgICAgICAgICBJbnN0YWxsaW5nIHRoZSBwYWNrYWdlIGluIHRoaXMgbWFubmVyIGNhbiBjYXVzZSBlcnJvcnMgZHVyaW5nCisgICAgICAgICAgICAgICAgcGFja2FnaW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cGVybS1jb25maWc6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFJlcG9ydHMgbGluZXMgaW4gPGZpbGVuYW1lPmZzLXBlcm1zLnR4dDwvZmlsZW5hbWU+IHRoYXQgaGF2ZQorICAgICAgICAgICAgICAgIGFuIGludmFsaWQgZm9ybWF0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cGVybS1saW5lOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBSZXBvcnRzIGxpbmVzIGluIDxmaWxlbmFtZT5mcy1wZXJtcy50eHQ8L2ZpbGVuYW1lPiB0aGF0IGhhdmUKKyAgICAgICAgICAgICAgICBhbiBpbnZhbGlkIGZvcm1hdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBlcm0tbGluazo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgUmVwb3J0cyBsaW5lcyBpbiA8ZmlsZW5hbWU+ZnMtcGVybXMudHh0PC9maWxlbmFtZT4gdGhhdAorICAgICAgICAgICAgICAgIHNwZWNpZnkgJ2xpbmsnIHdoZXJlIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IGFscmVhZHkgZXhpc3RzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cGVybXM6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEN1cnJlbnRseSwgdGhpcyBjaGVjayBpcyB1bnVzZWQgYnV0IHJlc2VydmVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cGtnY29uZmlnOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgPGZpbGVuYW1lPi5wYzwvZmlsZW5hbWU+IGZpbGVzIGZvciBhbnkKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+LzxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHBhdGhzLgorICAgICAgICAgICAgICAgIEFueSA8ZmlsZW5hbWU+LnBjPC9maWxlbmFtZT4gZmlsZSBjb250YWluaW5nIHRoZXNlIHBhdGhzIGlzIGluY29ycmVjdAorICAgICAgICAgICAgICAgIHNpbmNlIDxmaWxlbmFtZT5wa2ctY29uZmlnPC9maWxlbmFtZT4gaXRzZWxmIGFkZHMgdGhlIGNvcnJlY3Qgc3lzcm9vdCBwcmVmaXgKKyAgICAgICAgICAgICAgICB3aGVuIHRoZSBmaWxlcyBhcmUgYWNjZXNzZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wa2duYW1lOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgdGhhdCBhbGwgcGFja2FnZXMgaW4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRVMnPjxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGhhdmUgbmFtZXMgdGhhdCBkbyBub3QgY29udGFpbiBpbnZhbGlkIGNoYXJhY3RlcnMgKGkuZS4KKyAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gMC05LCBhLXosIC4sICssIGFuZCAtKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBrZ3YtdW5kZWZpbmVkOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgdG8gc2VlIGlmIHRoZSA8ZmlsZW5hbWU+UEtHVjwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgaXMgdW5kZWZpbmVkIGR1cmluZworICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlJz48ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBrZ3ZhcmNoZWNrOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgdGhyb3VnaCB0aGUgdmFyaWFibGVzCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJTVUdHRVNUUyc+PGZpbGVuYW1lPlJTVUdHRVNUUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkNPTkZMSUNUUyc+PGZpbGVuYW1lPlJDT05GTElDVFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJQUk9WSURFUyc+PGZpbGVuYW1lPlJQUk9WSURFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFUExBQ0VTJz48ZmlsZW5hbWU+UlJFUExBQ0VTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1BTExPV19FTVBUWSc+PGZpbGVuYW1lPkFMTE9XX0VNUFRZPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2dfcHJlaW5zdDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2dfcG9zdGluc3Q8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3ByZXJtPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPnBrZ19wb3N0cm08L2ZpbGVuYW1lPiwgYW5kIHJlcG9ydHMgaWYgdGhlcmUgYXJlCisgICAgICAgICAgICAgICAgdmFyaWFibGUgc2V0cyB0aGF0IGFyZSBub3QgcGFja2FnZS1zcGVjaWZpYy4KKyAgICAgICAgICAgICAgICBVc2luZyB0aGVzZSB2YXJpYWJsZXMgd2l0aG91dCBhIHBhY2thZ2Ugc3VmZml4IGlzIGJhZCBwcmFjdGljZSwKKyAgICAgICAgICAgICAgICBhbmQgbWlnaHQgdW5uZWNlc3NhcmlseSBjb21wbGljYXRlIGRlcGVuZGVuY2llcyBvZiBvdGhlciBwYWNrYWdlcworICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgc2FtZSByZWNpcGUgb3IgaGF2ZSBvdGhlciB1bmludGVuZGVkIGNvbnNlcXVlbmNlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBuLW92ZXJyaWRlczo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIHRoYXQgYSByZWNpcGUgZG9lcyBub3QgaGF2ZSBhIG5hbWUKKyAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4pIHZhbHVlCisgICAgICAgICAgICAgICAgdGhhdCBhcHBlYXJzIGluCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU9WRVJSSURFUyc+PGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICBJZiBhIHJlY2lwZSBpcyBuYW1lZCBzdWNoIHRoYXQgaXRzIDxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmFsdWUgbWF0Y2hlcyBzb21ldGhpbmcgYWxyZWFkeSBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiAoZS5nLiA8ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGhhcHBlbnMgdG8gYmUgdGhlIHNhbWUgYXMKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk8nPjxmaWxlbmFtZT5ESVNUUk88L2ZpbGVuYW1lPjwvbGluaz4pLAorICAgICAgICAgICAgICAgIGl0IGNhbiBoYXZlIHVuZXhwZWN0ZWQgY29uc2VxdWVuY2VzLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBhc3NpZ25tZW50cyBzdWNoIGFzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTXyR7UE59ID0gInh5eiI8L2ZpbGVuYW1lPiBlZmZlY3RpdmVseSB0dXJuIGludG8KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVMgPSAieHl6IjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5ycGF0aHM6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyBmb3IgcnBhdGhzIGluIHRoZSBiaW5hcmllcyB0aGF0IGNvbnRhaW4gYnVpbGQgc3lzdGVtIHBhdGhzIHN1Y2gKKyAgICAgICAgICAgICAgICBhcyA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgSWYgdGhpcyB0ZXN0IGZhaWxzLCBiYWQgPGZpbGVuYW1lPi1ycGF0aDwvZmlsZW5hbWU+IG9wdGlvbnMgYXJlIGJlaW5nCisgICAgICAgICAgICAgICAgcGFzc2VkIHRvIHRoZSBsaW5rZXIgY29tbWFuZHMgYW5kIHlvdXIgYmluYXJpZXMgaGF2ZSBwb3RlbnRpYWwgc2VjdXJpdHkKKyAgICAgICAgICAgICAgICBpc3N1ZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5zcGxpdC1zdHJpcDo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgUmVwb3J0cyB0aGF0IHNwbGl0dGluZyBvciBzdHJpcHBpbmcgZGVidWcgc3ltYm9scyBmcm9tIGJpbmFyaWVzCisgICAgICAgICAgICAgICAgaGFzIGZhaWxlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnN0YXRpY2Rldjo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIGZvciBzdGF0aWMgbGlicmFyeSBmaWxlcyAoPGZpbGVuYW1lPiouYTwvZmlsZW5hbWU+KSBpbgorICAgICAgICAgICAgICAgIG5vbi08ZmlsZW5hbWU+c3RhdGljZGV2PC9maWxlbmFtZT4gcGFja2FnZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5zeW1saW5rLXRvLXN5c3Jvb3Q6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyBmb3Igc3ltbGlua3MgaW4gcGFja2FnZXMgdGhhdCBwb2ludCBpbnRvCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIG9uIHRoZSBob3N0LgorICAgICAgICAgICAgICAgIFN1Y2ggc3ltbGlua3Mgd2lsbCB3b3JrIG9uIHRoZSBob3N0LCBidXQgYXJlIGNsZWFybHkgaW52YWxpZAorICAgICAgICAgICAgICAgIHdoZW4gcnVubmluZyBvbiB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+dGV4dHJlbDo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIGZvciBFTEYgYmluYXJpZXMgdGhhdCBjb250YWluIHJlbG9jYXRpb25zIGluIHRoZWlyCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi50ZXh0PC9maWxlbmFtZT4gc2VjdGlvbnMsIHdoaWNoIGNhbiByZXN1bHQgaW4gYQorICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlIGltcGFjdCBhdCBydW50aW1lLgorICAgICAgICAgICAgICAgIFNlZSB0aGUgZXhwbGFuYXRpb24gZm9yIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3FhLWlzc3VlLXRleHRyZWwnPjxmaWxlbmFtZT5FTEYgYmluYXJ5PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgbWVzc2FnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgcnVudGltZSBwZXJmb3JtYW5jZSBpc3N1ZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT51bnNhZmUtcmVmZXJlbmNlcy1pbi1iaW5hcmllczo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgUmVwb3J0cyB3aGVuIGEgYmluYXJ5IGluc3RhbGxlZCBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2Jhc2VfbGliZGlyfTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2Jhc2VfYmluZGlyfTwvZmlsZW5hbWU+LCBvcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2Jhc2Vfc2JpbmRpcn08L2ZpbGVuYW1lPiwgZGVwZW5kcyBvbiBhbm90aGVyCisgICAgICAgICAgICAgICAgYmluYXJ5IGluc3RhbGxlZCB1bmRlciA8ZmlsZW5hbWU+JHtleGVjX3ByZWZpeH08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGlzIGRlcGVuZGVuY3kgaXMgYSBjb25jZXJuIGlmIHlvdSB3YW50IHRoZSBzeXN0ZW0gdG8gcmVtYWluCisgICAgICAgICAgICAgICAgYmFzaWNhbGx5IG9wZXJhYmxlIGlmIDxmaWxlbmFtZT4vdXNyPC9maWxlbmFtZT4gaXMgbW91bnRlZAorICAgICAgICAgICAgICAgIHNlcGFyYXRlbHkgYW5kIGlzIG5vdCBtb3VudGVkLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyBmb3IgYmluYXJpZXMgaW5zdGFsbGVkIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2Jhc2VfbGliZGlyfTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiYXNlX2JpbmRpcn08L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2Jhc2Vfc2JpbmRpcn08L2ZpbGVuYW1lPiBhcmUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9saWI8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPi9iaW48L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vc2JpbjwvZmlsZW5hbWU+LCByZXNwZWN0aXZlbHkuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGZvciBhIGJpbmFyeSBpbnN0YWxsZWQKKyAgICAgICAgICAgICAgICAgICAgdW5kZXIgPGZpbGVuYW1lPiR7ZXhlY19wcmVmaXh9PC9maWxlbmFtZT4gaXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3I8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT51bnNhZmUtcmVmZXJlbmNlcy1pbi1zY3JpcHRzOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBSZXBvcnRzIHdoZW4gYSBzY3JpcHQgZmlsZSBpbnN0YWxsZWQgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiYXNlX2xpYmRpcn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiYXNlX2JpbmRpcn08L2ZpbGVuYW1lPiwgb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiYXNlX3NiaW5kaXJ9PC9maWxlbmFtZT4sIGRlcGVuZHMgb24gZmlsZXMKKyAgICAgICAgICAgICAgICBpbnN0YWxsZWQgdW5kZXIgPGZpbGVuYW1lPiR7ZXhlY19wcmVmaXh9PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhpcyBkZXBlbmRlbmN5IGlzIGEgY29uY2VybiBpZiB5b3Ugd2FudCB0aGUgc3lzdGVtIHRvIHJlbWFpbgorICAgICAgICAgICAgICAgIGJhc2ljYWxseSBvcGVyYWJsZSBpZiA8ZmlsZW5hbWU+L3VzcjwvZmlsZW5hbWU+IGlzIG1vdW50ZWQKKyAgICAgICAgICAgICAgICBzZXBhcmF0ZWx5IGFuZCBpcyBub3QgbW91bnRlZC4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgZm9yIGJpbmFyaWVzIGluc3RhbGxlZCBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiYXNlX2xpYmRpcn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7YmFzZV9iaW5kaXJ9PC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiYXNlX3NiaW5kaXJ9PC9maWxlbmFtZT4gYXJlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vbGliPC9maWxlbmFtZT4sIDxmaWxlbmFtZT4vYmluPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3NiaW48L2ZpbGVuYW1lPiwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBmb3IgYSBiaW5hcnkgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgICAgIHVuZGVyIDxmaWxlbmFtZT4ke2V4ZWNfcHJlZml4fTwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+dXNlbGVzcy1ycGF0aHM6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyBmb3IgZHluYW1pYyBsaWJyYXJ5IGxvYWQgcGF0aHMgKHJwYXRocykgaW4gdGhlIGJpbmFyaWVzIHRoYXQKKyAgICAgICAgICAgICAgICBieSBkZWZhdWx0IG9uIGEgc3RhbmRhcmQgc3lzdGVtIGFyZSBzZWFyY2hlZCBieSB0aGUgbGlua2VyIChlLmcuCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9saWI8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPi91c3IvbGliPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIFdoaWxlIHRoZXNlIHBhdGhzIHdpbGwgbm90IGNhdXNlIGFueSBicmVha2FnZSwgdGhleSBkbyB3YXN0ZSBzcGFjZSBhbmQKKyAgICAgICAgICAgICAgICBhcmUgdW5uZWNlc3NhcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT52YXItdW5kZWZpbmVkOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBSZXBvcnRzIHdoZW4gdmFyaWFibGVzIGZ1bmRhbWVudGFsIHRvIHBhY2thZ2luZyAoaS5lLgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUic+PGZpbGVuYW1lPkRFUExPWV9ESVI8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUQnPjxmaWxlbmFtZT5EPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+LCBhbmQKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEtHRCc+PGZpbGVuYW1lPlBLR0Q8L2ZpbGVuYW1lPjwvbGluaz4pIGFyZQorICAgICAgICAgICAgICAgIHVuZGVmaW5lZCBkdXJpbmcKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZSc+PGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT52ZXJzaW9uLWdvaW5nLWJhY2t3YXJkczo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgSWYgQnVpbGQgSGlzdG9yeSBpcyBlbmFibGVkLCByZXBvcnRzIHdoZW4gYSBwYWNrYWdlCisgICAgICAgICAgICAgICAgYmVpbmcgd3JpdHRlbiBvdXQgaGFzIGEgbG93ZXIgdmVyc2lvbiB0aGFuIHRoZSBwcmV2aW91c2x5CisgICAgICAgICAgICAgICAgd3JpdHRlbiBwYWNrYWdlIHVuZGVyIHRoZSBzYW1lIG5hbWUuCisgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBwbGFjaW5nIG91dHB1dCBwYWNrYWdlcyBpbnRvIGEgZmVlZCBhbmQKKyAgICAgICAgICAgICAgICB1cGdyYWRpbmcgcGFja2FnZXMgb24gYSB0YXJnZXQgc3lzdGVtIHVzaW5nIHRoYXQgZmVlZCwgdGhlCisgICAgICAgICAgICAgICAgdmVyc2lvbiBvZiBhIHBhY2thZ2UgZ29pbmcgYmFja3dhcmRzIGNhbiByZXN1bHQgaW4gdGhlIHRhcmdldAorICAgICAgICAgICAgICAgIHN5c3RlbSBub3QgY29ycmVjdGx5IHVwZ3JhZGluZyB0byB0aGUgIm5ldyIgdmVyc2lvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIG5vdCB1c2luZyBydW50aW1lIHBhY2thZ2UgbWFuYWdlbWVudCBvbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIHRhcmdldCBzeXN0ZW0sIHRoZW4geW91IGRvIG5vdCBuZWVkIHRvIHdvcnJ5IGFib3V0CisgICAgICAgICAgICAgICAgICAgIHRoaXMgc2l0dWF0aW9uLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnhvcmctZHJpdmVyLWFiaTo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIHRoYXQgYWxsIHBhY2thZ2VzIGNvbnRhaW5pbmcgWG9yZyBkcml2ZXJzIGhhdmUgQUJJCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+eHNlcnZlci14b3JnPC9maWxlbmFtZT4gcmVjaXBlIHByb3ZpZGVzIGRyaXZlcgorICAgICAgICAgICAgICAgIEFCSSBuYW1lcy4KKyAgICAgICAgICAgICAgICBBbGwgZHJpdmVycyBzaG91bGQgZGVwZW5kIG9uIHRoZSBBQkkgdmVyc2lvbnMgdGhhdCB0aGV5IGhhdmUKKyAgICAgICAgICAgICAgICBiZWVuIGJ1aWx0IGFnYWluc3QuCisgICAgICAgICAgICAgICAgRHJpdmVyIHJlY2lwZXMgdGhhdCBpbmNsdWRlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnhvcmctZHJpdmVyLWlucHV0LmluYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgb3IgPGZpbGVuYW1lPnhvcmctZHJpdmVyLXZpZGVvLmluYzwvZmlsZW5hbWU+IHdpbGwKKyAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGdldCB0aGVzZSB2ZXJzaW9ucy4KKyAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBzaG91bGQgb25seSBuZWVkIHRvIGV4cGxpY2l0bHkgYWRkCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzIHRvIGJpbmFyeSBkcml2ZXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtaW5zc2Vydic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5pbnNzZXJ2LmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5pbnNzZXJ2PC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgdXNlcyB0aGUgPGZpbGVuYW1lPmluc3NlcnY8L2ZpbGVuYW1lPiB1dGlsaXR5IHRvIHVwZGF0ZSB0aGUgb3JkZXIgb2YKKyAgICAgICAgc3ltYm9saWMgbGlua3MgaW4gPGZpbGVuYW1lPi9ldGMvcmM/LmQvPC9maWxlbmFtZT4gd2l0aGluIGFuIGltYWdlCisgICAgICAgIGJhc2VkIG9uIGRlcGVuZGVuY2llcyBzcGVjaWZpZWQgYnkgTFNCIGhlYWRlcnMgaW4gdGhlCisgICAgICAgIDxmaWxlbmFtZT5pbml0LmQ8L2ZpbGVuYW1lPiBzY3JpcHRzIHRoZW1zZWx2ZXMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMta2VybmVsJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmtlcm5lbC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+a2VybmVsPC9maWxlbmFtZT4gY2xhc3MgaGFuZGxlcyBidWlsZGluZyBMaW51eCBrZXJuZWxzLgorICAgICAgICBUaGUgY2xhc3MgY29udGFpbnMgY29kZSB0byBidWlsZCBhbGwga2VybmVsIHRyZWVzLgorICAgICAgICBBbGwgbmVlZGVkIGhlYWRlcnMgYXJlIHN0YWdlZCBpbnRvIHRoZQorICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVNUQUdJTkdfS0VSTkVMX0RJUic+U1RBR0lOR19LRVJORUxfRElSPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgIGRpcmVjdG9yeSB0byBhbGxvdyBvdXQtb2YtdHJlZSBtb2R1bGUgYnVpbGRzIHVzaW5nCisgICAgICAgIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1tb2R1bGUnPjxmaWxlbmFtZT5tb2R1bGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgbWVhbnMgdGhhdCBlYWNoIGJ1aWx0IGtlcm5lbCBtb2R1bGUgaXMgcGFja2FnZWQgc2VwYXJhdGVseSBhbmQgaW50ZXItbW9kdWxlCisgICAgICAgIGRlcGVuZGVuY2llcyBhcmUgY3JlYXRlZCBieSBwYXJzaW5nIHRoZSA8ZmlsZW5hbWU+bW9kaW5mbzwvZmlsZW5hbWU+IG91dHB1dC4KKyAgICAgICAgSWYgYWxsIG1vZHVsZXMgYXJlIHJlcXVpcmVkLCB0aGVuIGluc3RhbGxpbmcgdGhlIDxmaWxlbmFtZT5rZXJuZWwtbW9kdWxlczwvZmlsZW5hbWU+CisgICAgICAgIHBhY2thZ2UgaW5zdGFsbHMgYWxsIHBhY2thZ2VzIHdpdGggbW9kdWxlcyBhbmQgdmFyaW91cyBvdGhlciBrZXJuZWwgcGFja2FnZXMKKyAgICAgICAgc3VjaCBhcyA8ZmlsZW5hbWU+a2VybmVsLXZtbGludXg8L2ZpbGVuYW1lPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVmFyaW91cyBvdGhlciBjbGFzc2VzIGFyZSB1c2VkIGJ5IHRoZSA8ZmlsZW5hbWU+a2VybmVsPC9maWxlbmFtZT4KKyAgICAgICAgYW5kIDxmaWxlbmFtZT5tb2R1bGU8L2ZpbGVuYW1lPiBjbGFzc2VzIGludGVybmFsbHkgaW5jbHVkaW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1rZXJuZWwtYXJjaCc+PGZpbGVuYW1lPmtlcm5lbC1hcmNoPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1tb2R1bGUtYmFzZSc+PGZpbGVuYW1lPm1vZHVsZS1iYXNlPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtbGludXgta2VybmVsLWJhc2UnPjxmaWxlbmFtZT5saW51eC1rZXJuZWwtYmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzc2VzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWtlcm5lbC1hcmNoJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmtlcm5lbC1hcmNoLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5rZXJuZWwtYXJjaDwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHNldHMgdGhlIDxmaWxlbmFtZT5BUkNIPC9maWxlbmFtZT4gZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIExpbnV4CisgICAgICAgIGtlcm5lbCBjb21waWxhdGlvbiAoaW5jbHVkaW5nIG1vZHVsZXMpLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWtlcm5lbC1tb2R1bGUtc3BsaXQnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+a2VybmVsLW1vZHVsZS1zcGxpdC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+a2VybmVsLW1vZHVsZS1zcGxpdDwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHByb3ZpZGVzIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGZvciBzcGxpdHRpbmcgTGludXgga2VybmVsIG1vZHVsZXMgaW50bworICAgICAgICBzZXBhcmF0ZSBwYWNrYWdlcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1rZXJuZWwteW9jdG8nPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+a2VybmVsLXlvY3RvLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5rZXJuZWwteW9jdG88L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBwcm92aWRlcyBjb21tb24gZnVuY3Rpb25hbGl0eSBmb3IgYnVpbGRpbmcgZnJvbSBsaW51eC15b2N0byBzdHlsZQorICAgICAgICBrZXJuZWwgc291cmNlIHJlcG9zaXRvcmllcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1saWJfcGFja2FnZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5saWJfcGFja2FnZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+bGliX3BhY2thZ2U8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBzdXBwb3J0cyByZWNpcGVzIHRoYXQgYnVpbGQgbGlicmFyaWVzIGFuZCBwcm9kdWNlIGV4ZWN1dGFibGUKKyAgICAgICAgYmluYXJpZXMsIHdoZXJlIHRob3NlIGJpbmFyaWVzIHNob3VsZCBub3QgYmUgaW5zdGFsbGVkIGJ5IGRlZmF1bHQKKyAgICAgICAgYWxvbmcgd2l0aCB0aGUgbGlicmFyeS4KKyAgICAgICAgSW5zdGVhZCwgdGhlIGJpbmFyaWVzIGFyZSBhZGRlZCB0byBhIHNlcGFyYXRlCisgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fS1iaW48L2ZpbGVuYW1lPgorICAgICAgICBwYWNrYWdlIHRvIG1ha2UgdGhlaXIgaW5zdGFsbGF0aW9uIG9wdGlvbmFsLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWxpY2Vuc2UnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+bGljZW5zZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+bGljZW5zZTwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIGxpY2Vuc2UKKyAgICAgICAgbWFuaWZlc3QgY3JlYXRpb24gYW5kIGxpY2Vuc2UgZXhjbHVzaW9uLgorICAgICAgICBUaGlzIGNsYXNzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB1c2luZyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTkhFUklUX0RJU1RSTyc+PGZpbGVuYW1lPklOSEVSSVRfRElTVFJPPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWxpbnV4LWtlcm5lbC1iYXNlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmxpbnV4LWtlcm5lbC1iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5saW51eC1rZXJuZWwtYmFzZTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHByb3ZpZGVzIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGZvciByZWNpcGVzIHRoYXQgYnVpbGQgb3V0IG9mIHRoZSBMaW51eAorICAgICAgICBrZXJuZWwgc291cmNlIHRyZWUuCisgICAgICAgIFRoZXNlIGJ1aWxkcyBnb2VzIGJleW9uZCB0aGUga2VybmVsIGl0c2VsZi4KKyAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBQZXJmIHJlY2lwZSBhbHNvIGluaGVyaXRzIHRoaXMgY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtbG9nZ2luZyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5sb2dnaW5nLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5sb2dnaW5nPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgdGhlIHN0YW5kYXJkCisgICAgICAgIHNoZWxsIGZ1bmN0aW9ucyB1c2VkIHRvIGxvZyBtZXNzYWdlcyBmb3IgdmFyaW91cyBCaXRCYWtlIHNldmVyaXR5IGxldmVscworICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+YmJwbGFpbjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+YmJub3RlPC9maWxlbmFtZT4sCisgICAgICAgIDxmaWxlbmFtZT5iYndhcm48L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmJiZXJyb3I8L2ZpbGVuYW1lPiwKKyAgICAgICAgPGZpbGVuYW1lPmJiZmF0YWw8L2ZpbGVuYW1lPiwgYW5kIDxmaWxlbmFtZT5iYmRlYnVnPC9maWxlbmFtZT4pLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNsYXNzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBzaW5jZSBpdCBpcyBpbmhlcml0ZWQgYnkKKyAgICAgICAgdGhlIDxmaWxlbmFtZT5iYXNlPC9maWxlbmFtZT4gY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtbWV0YSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gY2xhc3MgaXMgaW5oZXJpdGVkIGJ5IHJlY2lwZXMKKyAgICAgICAgdGhhdCBkbyBub3QgYnVpbGQgYW55IG91dHB1dCBwYWNrYWdlcyB0aGVtc2VsdmVzLCBidXQgYWN0IGFzIGEgIm1ldGEiCisgICAgICAgIHRhcmdldCBmb3IgYnVpbGRpbmcgb3RoZXIgcmVjaXBlcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1tZXRhZGF0YV9zY20nPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YWRhdGFfc2NtLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5tZXRhZGF0YV9zY208L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IGZvcgorICAgICAgICBxdWVyeWluZyB0aGUgYnJhbmNoIGFuZCByZXZpc2lvbiBvZiBhIFNvdXJjZSBDb2RlIE1hbmFnZXIgKFNDTSkKKyAgICAgICAgcmVwb3NpdG9yeS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJhc2UnPjxmaWxlbmFtZT5iYXNlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzIHVzZXMgdGhpcyBjbGFzcyB0byBwcmludCB0aGUgcmV2aXNpb25zIG9mIGVhY2ggbGF5ZXIgYmVmb3JlCisgICAgICAgIHN0YXJ0aW5nIGV2ZXJ5IGJ1aWxkLgorICAgICAgICBUaGUgPGZpbGVuYW1lPm1ldGFkYXRhX3NjbTwvZmlsZW5hbWU+IGNsYXNzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdAorICAgICAgICBiZWNhdXNlIGl0IGlzIGluaGVyaXRlZCBieSB0aGUgPGZpbGVuYW1lPmJhc2U8L2ZpbGVuYW1lPiBjbGFzcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1taW1lJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPm1pbWUuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPm1pbWU8L2ZpbGVuYW1lPiBjbGFzcyBnZW5lcmF0ZXMgdGhlIHByb3BlcgorICAgICAgICBwb3N0LWluc3RhbGwgYW5kIHBvc3QtcmVtb3ZlIChwb3N0aW5zdC9wb3N0cm0pIHNjcmlwdGxldHMgZm9yIHBhY2thZ2VzCisgICAgICAgIHRoYXQgaW5zdGFsbCBNSU1FIHR5cGUgZmlsZXMuCisgICAgICAgIFRoZXNlIHNjcmlwdGxldHMgY2FsbCA8ZmlsZW5hbWU+dXBkYXRlLW1pbWUtZGF0YWJhc2U8L2ZpbGVuYW1lPiB0byBhZGQKKyAgICAgICAgdGhlIE1JTUUgdHlwZXMgdG8gdGhlIHNoYXJlZCBkYXRhYmFzZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1taXJyb3JzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPm1pcnJvcnMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPm1pcnJvcnM8L2ZpbGVuYW1lPiBjbGFzcyBzZXRzIHVwIHNvbWUgc3RhbmRhcmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1JUlJPUlMnPjxmaWxlbmFtZT5NSVJST1JTPC9maWxlbmFtZT48L2xpbms+IGVudHJpZXMKKyAgICAgICAgZm9yIHNvdXJjZSBjb2RlIG1pcnJvcnMuCisgICAgICAgIFRoZXNlIG1pcnJvcnMgcHJvdmlkZSBhIGZhbGwtYmFjayBwYXRoIGluIGNhc2UgdGhlIHVwc3RyZWFtIHNvdXJjZQorICAgICAgICBzcGVjaWZpZWQgaW4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHdpdGhpbiByZWNpcGVzIGlzIHVuYXZhaWxhYmxlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNsYXNzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBzaW5jZSBpdCBpcyBpbmhlcml0ZWQgYnkgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJhc2UnPjxmaWxlbmFtZT5iYXNlPC9maWxlbmFtZT48L2xpbms+IGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLW1vZHVsZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5tb2R1bGUuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPm1vZHVsZTwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGJ1aWxkaW5nCisgICAgICAgIG91dC1vZi10cmVlIExpbnV4IGtlcm5lbCBtb2R1bGVzLgorICAgICAgICBUaGUgY2xhc3MgaW5oZXJpdHMgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLW1vZHVsZS1iYXNlJz48ZmlsZW5hbWU+bW9kdWxlLWJhc2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWtlcm5lbC1tb2R1bGUtc3BsaXQnPjxmaWxlbmFtZT5rZXJuZWwtbW9kdWxlLXNwbGl0PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzZXMsIGFuZCBpbXBsZW1lbnRzIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB0YXNrcy4KKyAgICAgICAgVGhlIGNsYXNzIHByb3ZpZGVzIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIGJ1aWxkIGFuZCBwYWNrYWdlIGEga2VybmVsCisgICAgICAgIG1vZHVsZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gb24gb3V0LW9mLXRyZWUgTGludXgga2VybmVsIG1vZHVsZXMsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9VUkw7I2luY29ycG9yYXRpbmctb3V0LW9mLXRyZWUtbW9kdWxlcyc+SW5jb3Jwb3JhdGluZyBPdXQtb2YtVHJlZSBNb2R1bGVzPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1tb2R1bGUtYmFzZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5tb2R1bGUtYmFzZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+bW9kdWxlLWJhc2U8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyB0aGUgYmFzZQorICAgICAgICBmdW5jdGlvbmFsaXR5IGZvciBidWlsZGluZyBMaW51eCBrZXJuZWwgbW9kdWxlcy4KKyAgICAgICAgVHlwaWNhbGx5LCBhIHJlY2lwZSB0aGF0IGJ1aWxkcyBzb2Z0d2FyZSB0aGF0IGluY2x1ZGVzIG9uZSBvcgorICAgICAgICBtb3JlIGtlcm5lbCBtb2R1bGVzIGFuZCBoYXMgaXRzIG93biBtZWFucyBvZiBidWlsZGluZworICAgICAgICB0aGUgbW9kdWxlIGluaGVyaXRzIHRoaXMgY2xhc3MgYXMgb3Bwb3NlZCB0byBpbmhlcml0aW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1tb2R1bGUnPjxmaWxlbmFtZT5tb2R1bGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtbXVsdGlsaWIqJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPm11bHRpbGliKi5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+bXVsdGlsaWIqPC9maWxlbmFtZT4gY2xhc3NlcyBwcm92aWRlIHN1cHBvcnQKKyAgICAgICAgZm9yIGJ1aWxkaW5nIGxpYnJhcmllcyB3aXRoIGRpZmZlcmVudCB0YXJnZXQgb3B0aW1pemF0aW9ucyBvciB0YXJnZXQKKyAgICAgICAgYXJjaGl0ZWN0dXJlcyBhbmQgaW5zdGFsbGluZyB0aGVtIHNpZGUtYnktc2lkZSBpbiB0aGUgc2FtZSBpbWFnZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlIE11bHRpbGliIGZlYXR1cmUsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2NvbWJpbmluZy1tdWx0aXBsZS12ZXJzaW9ucy1saWJyYXJ5LWZpbGVzLWludG8tb25lLWltYWdlJz5Db21iaW5pbmcgTXVsdGlwbGUgVmVyc2lvbnMgb2YgTGlicmFyeSBGaWxlcyBpbnRvIE9uZSBJbWFnZTwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1uYXRpdmUnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+bmF0aXZlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5uYXRpdmU8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBjb21tb24KKyAgICAgICAgZnVuY3Rpb25hbGl0eSBmb3IgcmVjaXBlcyB0aGF0IHdpc2ggdG8gYnVpbGQgdG9vbHMgdG8gcnVuIG9uIHRoZSBidWlsZAorICAgICAgICBob3N0IChpLmUuIHRvb2xzIHRoYXQgdXNlIHRoZSBjb21waWxlciBvciBvdGhlciB0b29scyBmcm9tIHRoZQorICAgICAgICBidWlsZCBob3N0KS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiBjcmVhdGUgYSByZWNpcGUgdGhhdCBidWlsZHMgdG9vbHMgdGhhdCBydW4gbmF0aXZlbHkgb24gdGhlCisgICAgICAgIGhvc3QgYSBjb3VwbGUgZGlmZmVyZW50IHdheXM6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q3JlYXRlIGEgPHJlcGxhY2VhYmxlPm15cmVjaXBlPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+LW5hdGl2ZS5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdGhhdCBpbmhlcml0cyB0aGUgPGZpbGVuYW1lPm5hdGl2ZTwvZmlsZW5hbWU+IGNsYXNzLgorICAgICAgICAgICAgICAgIElmIHlvdSB1c2UgdGhpcyBtZXRob2QsIHlvdSBtdXN0IG9yZGVyIHRoZSBpbmhlcml0IHN0YXRlbWVudAorICAgICAgICAgICAgICAgIGluIHRoZSByZWNpcGUgYWZ0ZXIgYWxsIG90aGVyIGluaGVyaXQgc3RhdGVtZW50cyBzbyB0aGF0IHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5uYXRpdmU8L2ZpbGVuYW1lPiBjbGFzcyBpcyBpbmhlcml0ZWQgbGFzdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DcmVhdGUgb3IgbW9kaWZ5IGEgdGFyZ2V0IHJlY2lwZSB0aGF0IGNvbnRhaW5zCisgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQkNMQVNTRVhURU5EJz48ZmlsZW5hbWU+QkJDTEFTU0VYVEVORDwvZmlsZW5hbWU+PC9saW5rPiA9ICJuYXRpdmUiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluc2lkZSB0aGUgcmVjaXBlLCB1c2UgPGZpbGVuYW1lPl9jbGFzcy1uYXRpdmU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+X2NsYXNzLXRhcmdldDwvZmlsZW5hbWU+IG92ZXJyaWRlcyB0byBzcGVjaWZ5IGFueQorICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgc3BlY2lmaWMgdG8gdGhlIHJlc3BlY3RpdmUgbmF0aXZlIG9yIHRhcmdldAorICAgICAgICAgICAgICAgIGNhc2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBBbHRob3VnaCBhcHBsaWVkIGRpZmZlcmVudGx5LCB0aGUgPGZpbGVuYW1lPm5hdGl2ZTwvZmlsZW5hbWU+IGNsYXNzIGlzCisgICAgICAgIHVzZWQgd2l0aCBib3RoIG1ldGhvZHMuCisgICAgICAgIFRoZSBhZHZhbnRhZ2Ugb2YgdGhlIHNlY29uZCBtZXRob2QgaXMgdGhhdCB5b3UgZG8gbm90IG5lZWQgdG8gaGF2ZSB0d28KKyAgICAgICAgc2VwYXJhdGUgcmVjaXBlcyAoYXNzdW1pbmcgeW91IG5lZWQgYm90aCkgZm9yIG5hdGl2ZSBhbmQgdGFyZ2V0LgorICAgICAgICBBbGwgY29tbW9uIHBhcnRzIG9mIHRoZSByZWNpcGUgYXJlIGF1dG9tYXRpY2FsbHkgc2hhcmVkLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLW5hdGl2ZXNkayc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5uYXRpdmVzZGsuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIGNvbW1vbgorICAgICAgICBmdW5jdGlvbmFsaXR5IGZvciByZWNpcGVzIHRoYXQgd2lzaCB0byBidWlsZCB0b29scyB0byBydW4gYXMgcGFydCBvZgorICAgICAgICBhbiBTREsgKGkuZS4gdG9vbHMgdGhhdCBydW4gb24KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES01BQ0hJTkUnPjxmaWxlbmFtZT5TREtNQUNISU5FPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiBjcmVhdGUgYSByZWNpcGUgdGhhdCBidWlsZHMgdG9vbHMgdGhhdCBydW4gb24gdGhlIFNESyBtYWNoaW5lCisgICAgICAgIGEgY291cGxlIGRpZmZlcmVudCB3YXlzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0ZSBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5hdGl2ZXNkay08L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5teXJlY2lwZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcmVjaXBlIHRoYXQgaW5oZXJpdHMgdGhlIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPiBjbGFzcy4KKyAgICAgICAgICAgICAgICBJZiB5b3UgdXNlIHRoaXMgbWV0aG9kLCB5b3UgbXVzdCBvcmRlciB0aGUgaW5oZXJpdCBzdGF0ZW1lbnQKKyAgICAgICAgICAgICAgICBpbiB0aGUgcmVjaXBlIGFmdGVyIGFsbCBvdGhlciBpbmhlcml0IHN0YXRlbWVudHMgc28gdGhhdCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4gY2xhc3MgaXMgaW5oZXJpdGVkIGxhc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q3JlYXRlIGEgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+IHZhcmlhbnQKKyAgICAgICAgICAgICAgICBvZiBhbnkgcmVjaXBlIGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCQ0xBU1NFWFRFTkQnPjxmaWxlbmFtZT5CQkNMQVNTRVhURU5EPC9maWxlbmFtZT48L2xpbms+ID0gIm5hdGl2ZXNkayIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW5zaWRlIHRoZSByZWNpcGUsIHVzZSA8ZmlsZW5hbWU+X2NsYXNzLW5hdGl2ZXNkazwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5fY2xhc3MtdGFyZ2V0PC9maWxlbmFtZT4gb3ZlcnJpZGVzIHRvIHNwZWNpZnkgYW55CisgICAgICAgICAgICAgICAgZnVuY3Rpb25hbGl0eSBzcGVjaWZpYyB0byB0aGUgcmVzcGVjdGl2ZSBTREsgbWFjaGluZSBvciB0YXJnZXQKKyAgICAgICAgICAgICAgICBjYXNlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQWx0aG91Z2ggYXBwbGllZCBkaWZmZXJlbnRseSwgdGhlIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBpcyB1c2VkIHdpdGggYm90aCBtZXRob2RzLgorICAgICAgICBUaGUgYWR2YW50YWdlIG9mIHRoZSBzZWNvbmQgbWV0aG9kIGlzIHRoYXQgeW91IGRvIG5vdCBuZWVkIHRvIGhhdmUgdHdvCisgICAgICAgIHNlcGFyYXRlIHJlY2lwZXMgKGFzc3VtaW5nIHlvdSBuZWVkIGJvdGgpIGZvciB0aGUgU0RLIG1hY2hpbmUgYW5kIHRoZQorICAgICAgICB0YXJnZXQuCisgICAgICAgIEFsbCBjb21tb24gcGFydHMgb2YgdGhlIHJlY2lwZSBhcmUgYXV0b21hdGljYWxseSBzaGFyZWQuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtb2VsaW50Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPm9lbGludC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+b2VsaW50PC9maWxlbmFtZT4gY2xhc3MgaXMgYW4KKyAgICAgICAgb2Jzb2xldGUgbGludCBjaGVja2luZyB0b29sIHRoYXQgZXhpc3RzIGluCisgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXM8L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBBIG51bWJlciBvZiBjbGFzc2VzIGV4aXN0IHRoYXQgY291bGQgYmUgZ2VuZXJhbGx5IHVzZWZ1bCBpbgorICAgICAgICBPRS1Db3JlIGJ1dCBhcmUgbmV2ZXIgYWN0dWFsbHkgdXNlZCB3aXRoaW4gT0UtQ29yZSBpdHNlbGYuCisgICAgICAgIFRoZSA8ZmlsZW5hbWU+b2VsaW50PC9maWxlbmFtZT4gY2xhc3MgaXMgb25lIHN1Y2ggZXhhbXBsZS4KKyAgICAgICAgSG93ZXZlciwgYmVpbmcgYXdhcmUgb2YgdGhpcyBjbGFzcyBjYW4gcmVkdWNlIHRoZSBwcm9saWZlcmF0aW9uIG9mCisgICAgICAgIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBzaW1pbGFyIGNsYXNzZXMgYWNyb3NzIG11bHRpcGxlIGxheWVycy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1vd24tbWlycm9ycyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5vd24tbWlycm9ycy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+b3duLW1pcnJvcnM8L2ZpbGVuYW1lPiBjbGFzcyBtYWtlcyBpdAorICAgICAgICBlYXNpZXIgdG8gc2V0IHVwIHlvdXIgb3duCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBmcm9tIHdoaWNoIHRvIGZpcnN0IGZldGNoIHNvdXJjZSBiZWZvcmUgYXR0ZW1wdGluZyB0byBmZXRjaCBpdCBmcm9tIHRoZQorICAgICAgICB1cHN0cmVhbSBzcGVjaWZpZWQgaW4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHdpdGhpbiBlYWNoIHJlY2lwZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVG8gdXNlIHRoaXMgY2xhc3MsIGluaGVyaXQgaXQgZ2xvYmFsbHkgYW5kIHNwZWNpZnkKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNPVVJDRV9NSVJST1JfVVJMJz48ZmlsZW5hbWU+U09VUkNFX01JUlJPUl9VUkw8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhFUklUICs9ICJvd24tbWlycm9ycyIKKyAgICAgU09VUkNFX01JUlJPUl9VUkwgPSAiaHR0cDovL2V4YW1wbGUuY29tL215LXNvdXJjZS1taXJyb3IiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgWW91IGNhbiBzcGVjaWZ5IG9ubHkgYSBzaW5nbGUgVVJMIGluCisgICAgICAgIDxmaWxlbmFtZT5TT1VSQ0VfTUlSUk9SX1VSTDwvZmlsZW5hbWU+LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXBhY2thZ2UnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cGFja2FnZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cGFja2FnZTwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIGdlbmVyYXRpbmcKKyAgICAgICAgcGFja2FnZXMgZnJvbSBhIGJ1aWxkJ3Mgb3V0cHV0LgorICAgICAgICBUaGUgY29yZSBnZW5lcmljIGZ1bmN0aW9uYWxpdHkgaXMgaW4KKyAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2UuYmJjbGFzczwvZmlsZW5hbWU+LgorICAgICAgICBUaGUgY29kZSBzcGVjaWZpYyB0byBwYXJ0aWN1bGFyIHBhY2thZ2UgdHlwZXMgcmVzaWRlcyBpbiB0aGVzZQorICAgICAgICBwYWNrYWdlLXNwZWNpZmljIGNsYXNzZXM6CisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2VfZGViJz48ZmlsZW5hbWU+cGFja2FnZV9kZWI8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2VfcnBtJz48ZmlsZW5hbWU+cGFja2FnZV9ycG08L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2VfaXBrJz48ZmlsZW5hbWU+cGFja2FnZV9pcGs8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIGFuZAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX3Rhcic+PGZpbGVuYW1lPnBhY2thZ2VfdGFyPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICA8bm90ZT48dGl0bGU+V2FybmluZzwvdGl0bGU+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnBhY2thZ2VfdGFyPC9maWxlbmFtZT4gY2xhc3MgaXMgYnJva2VuIGFuZCBub3QKKyAgICAgICAgICAgIHN1cHBvcnRlZC4KKyAgICAgICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvIG5vdCB1c2UgdGhpcyBjbGFzcy4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBZb3UgY2FuIGNvbnRyb2wgdGhlIGxpc3Qgb2YgcmVzdWx0aW5nIHBhY2thZ2UgZm9ybWF0cyBieSB1c2luZyB0aGUKKyAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPlBBQ0tBR0VfQ0xBU1NFUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICB2YXJpYWJsZSBkZWZpbmVkIGluIHlvdXIgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSwgd2hpY2ggaXMgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgV2hlbiBkZWZpbmluZyB0aGUgdmFyaWFibGUsIHlvdSBjYW4gc3BlY2lmeSBvbmUgb3IgbW9yZSBwYWNrYWdlIHR5cGVzLgorICAgICAgICBTaW5jZSBpbWFnZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHBhY2thZ2VzLCBhIHBhY2thZ2luZyBjbGFzcyBpcworICAgICAgICBuZWVkZWQgdG8gZW5hYmxlIGltYWdlIGdlbmVyYXRpb24uCisgICAgICAgIFRoZSBmaXJzdCBjbGFzcyBsaXN0ZWQgaW4gdGhpcyB2YXJpYWJsZSBpcyB1c2VkIGZvciBpbWFnZSBnZW5lcmF0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBJZiB5b3UgdGFrZSB0aGUgb3B0aW9uYWwgc3RlcCB0byBzZXQgdXAgYSByZXBvc2l0b3J5IChwYWNrYWdlIGZlZWQpCisgICAgICAgIG9uIHRoZSBkZXZlbG9wbWVudCBob3N0IHRoYXQgY2FuIGJlIHVzZWQgYnkgU21hcnQsIHlvdSBjYW4KKyAgICAgICAgaW5zdGFsbCBwYWNrYWdlcyBmcm9tIHRoZSBmZWVkIHdoaWxlIHlvdSBhcmUgcnVubmluZyB0aGUgaW1hZ2UKKyAgICAgICAgb24gdGhlIHRhcmdldCAoaS5lLiBydW50aW1lIGluc3RhbGxhdGlvbiBvZiBwYWNrYWdlcykuCisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1c2luZy1ydW50aW1lLXBhY2thZ2UtbWFuYWdlbWVudCc+VXNpbmcgUnVudGltZSBQYWNrYWdlIE1hbmFnZW1lbnQ8L3VsaW5rPiIKKyAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgcGFja2FnZS1zcGVjaWZpYyBjbGFzcyB5b3UgY2hvb3NlIGNhbiBhZmZlY3QgYnVpbGQtdGltZSBwZXJmb3JtYW5jZQorICAgICAgICBhbmQgaGFzIHNwYWNlIHJhbWlmaWNhdGlvbnMuCisgICAgICAgIEluIGdlbmVyYWwsIGJ1aWxkaW5nIGEgcGFja2FnZSB3aXRoIElQSyB0YWtlcyBhYm91dCB0aGlydHkgcGVyY2VudCBsZXNzCisgICAgICAgIHRpbWUgYXMgY29tcGFyZWQgdG8gdXNpbmcgUlBNIHRvIGJ1aWxkIHRoZSBzYW1lIG9yIHNpbWlsYXIgcGFja2FnZS4KKyAgICAgICAgVGhpcyBjb21wYXJpc29uIHRha2VzIGludG8gYWNjb3VudCBhIGNvbXBsZXRlIGJ1aWxkIG9mIHRoZSBwYWNrYWdlIHdpdGgKKyAgICAgICAgYWxsIGRlcGVuZGVuY2llcyBwcmV2aW91c2x5IGJ1aWx0LgorICAgICAgICBUaGUgcmVhc29uIGZvciB0aGlzIGRpc2NyZXBhbmN5IGlzIGJlY2F1c2UgdGhlIFJQTSBwYWNrYWdlIG1hbmFnZXIKKyAgICAgICAgY3JlYXRlcyBhbmQgcHJvY2Vzc2VzIG1vcmUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4gdGhhbiB0aGUKKyAgICAgICAgSVBLIHBhY2thZ2UgbWFuYWdlci4KKyAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgbWlnaHQgY29uc2lkZXIgc2V0dGluZworICAgICAgICA8ZmlsZW5hbWU+UEFDS0FHRV9DTEFTU0VTPC9maWxlbmFtZT4gdG8gInBhY2thZ2VfaXBrIiBpZiB5b3UgYXJlCisgICAgICAgIGJ1aWxkaW5nIHNtYWxsZXIgc3lzdGVtcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQmVmb3JlIG1ha2luZyB5b3VyIHBhY2thZ2UgbWFuYWdlciBkZWNpc2lvbiwgaG93ZXZlciwgeW91IHNob3VsZAorICAgICAgICBjb25zaWRlciBzb21lIGZ1cnRoZXIgdGhpbmdzIGFib3V0IHVzaW5nIFJQTToKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBSUE0gc3RhcnRzIHRvIHByb3ZpZGUgbW9yZSBhYmlsaXRpZXMgdGhhbiBJUEsgZHVlIHRvCisgICAgICAgICAgICAgICAgdGhlIGZhY3QgdGhhdCBpdCBwcm9jZXNzZXMgbW9yZSBNZXRhZGF0YS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhpcyBpbmZvcm1hdGlvbiBpbmNsdWRlcyBpbmRpdmlkdWFsIGZpbGUgdHlwZXMsCisgICAgICAgICAgICAgICAgZmlsZSBjaGVja3N1bSBnZW5lcmF0aW9uIGFuZCBldmFsdWF0aW9uIG9uIGluc3RhbGwsIHNwYXJzZSBmaWxlCisgICAgICAgICAgICAgICAgc3VwcG9ydCwgY29uZmxpY3QgZGV0ZWN0aW9uIGFuZCByZXNvbHV0aW9uIGZvciBNdWx0aWxpYiBzeXN0ZW1zLAorICAgICAgICAgICAgICAgIEFDSUQgc3R5bGUgdXBncmFkZSwgYW5kIHJlcGFja2FnaW5nIGFiaWxpdGllcyBmb3Igcm9sbGJhY2tzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBzbWFsbGVyIHN5c3RlbXMsIHRoZSBleHRyYSBzcGFjZSB1c2VkIGZvciB0aGUgQmVya2VsZXkKKyAgICAgICAgICAgICAgICBEYXRhYmFzZSBhbmQgdGhlIGFtb3VudCBvZiBtZXRhZGF0YSB3aGVuIHVzaW5nIFJQTSBjYW4gYWZmZWN0CisgICAgICAgICAgICAgICAgeW91ciBhYmlsaXR5IHRvIHBlcmZvcm0gb24tZGV2aWNlIHVwZ3JhZGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiBmaW5kIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gdGhlIGVmZmVjdHMgb2YgdGhlIHBhY2thZ2UKKyAgICAgICAgY2xhc3MgYXQgdGhlc2UgdHdvIFlvY3RvIFByb2plY3QgbWFpbGluZyBsaXN0IGxpbmtzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19MSVNUU19VUkw7L3BpcGVybWFpbC9wb2t5LzIwMTEtTWF5LzAwNjM2Mi5odG1sJz4KKyAgICAgICAgICAgICAgICBodHRwczovL2xpc3RzLnlvY3RvcHJvamVjdC5vcmcvcGlwZXJtYWlsL3Bva3kvMjAxMS1NYXkvMDA2MzYyLmh0bWw8L3VsaW5rPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19MSVNUU19VUkw7L3BpcGVybWFpbC9wb2t5LzIwMTEtTWF5LzAwNjM2My5odG1sJz4KKyAgICAgICAgICAgICAgICBodHRwczovL2xpc3RzLnlvY3RvcHJvamVjdC5vcmcvcGlwZXJtYWlsL3Bva3kvMjAxMS1NYXkvMDA2MzYzLmh0bWw8L3VsaW5rPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX2RlYic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wYWNrYWdlX2RlYi5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cGFja2FnZV9kZWI8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBwcm92aWRlcyBzdXBwb3J0IGZvciBjcmVhdGluZyBwYWNrYWdlcyB0aGF0IHVzZSB0aGUgRGViaWFuCisgICAgICAgIChpLmUuIDxmaWxlbmFtZT4uZGViPC9maWxlbmFtZT4pIGZpbGUgZm9ybWF0LgorICAgICAgICBUaGUgY2xhc3MgZW5zdXJlcyB0aGUgcGFja2FnZXMgYXJlIHdyaXR0ZW4gb3V0IGluIGEKKyAgICAgICAgPGZpbGVuYW1lPi5kZWI8L2ZpbGVuYW1lPiBmaWxlIGZvcm1hdCB0byB0aGUKKyAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9ERUInPjxmaWxlbmFtZT5ERVBMT1lfRElSX0RFQjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgZGlyZWN0b3J5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNsYXNzIGluaGVyaXRzIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlJz48ZmlsZW5hbWU+cGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcyBhbmQgaXMgZW5hYmxlZCB0aHJvdWdoIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9DTEFTU0VTJz48ZmlsZW5hbWU+UEFDS0FHRV9DTEFTU0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIGluIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcGFja2FnZV9pcGsnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cGFja2FnZV9pcGsuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnBhY2thZ2VfaXBrPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgcHJvdmlkZXMgc3VwcG9ydCBmb3IgY3JlYXRpbmcgcGFja2FnZXMgdGhhdCB1c2UgdGhlIElQSworICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+LmlwazwvZmlsZW5hbWU+KSBmaWxlIGZvcm1hdC4KKyAgICAgICAgVGhlIGNsYXNzIGVuc3VyZXMgdGhlIHBhY2thZ2VzIGFyZSB3cml0dGVuIG91dCBpbiBhCisgICAgICAgIDxmaWxlbmFtZT4uaXBrPC9maWxlbmFtZT4gZmlsZSBmb3JtYXQgdG8gdGhlCisgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfSVBLJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9JUEs8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgIGRpcmVjdG9yeS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjbGFzcyBpbmhlcml0cyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcGFja2FnZSc+PGZpbGVuYW1lPnBhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MgYW5kIGlzIGVuYWJsZWQgdGhyb3VnaCB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZSBpbiB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXBhY2thZ2VfcnBtJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnBhY2thZ2VfcnBtLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5wYWNrYWdlX3JwbTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGNyZWF0aW5nIHBhY2thZ2VzIHRoYXQgdXNlIHRoZSBSUE0KKyAgICAgICAgKGkuZS4gPGZpbGVuYW1lPi5ycG08L2ZpbGVuYW1lPikgZmlsZSBmb3JtYXQuCisgICAgICAgIFRoZSBjbGFzcyBlbnN1cmVzIHRoZSBwYWNrYWdlcyBhcmUgd3JpdHRlbiBvdXQgaW4gYQorICAgICAgICA8ZmlsZW5hbWU+LnJwbTwvZmlsZW5hbWU+IGZpbGUgZm9ybWF0IHRvIHRoZQorICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX1JQTSc+PGZpbGVuYW1lPkRFUExPWV9ESVJfUlBNPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICBkaXJlY3RvcnkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2xhc3MgaW5oZXJpdHMgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2UnPjxmaWxlbmFtZT5wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzIGFuZCBpcyBlbmFibGVkIHRocm91Z2ggdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX3Rhcic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wYWNrYWdlX3Rhci5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cGFja2FnZV90YXI8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBwcm92aWRlcyBzdXBwb3J0IGZvciBjcmVhdGluZyB0YXJiYWxscy4KKyAgICAgICAgVGhlIGNsYXNzIGVuc3VyZXMgdGhlIHBhY2thZ2VzIGFyZSB3cml0dGVuIG91dCBpbiBhCisgICAgICAgIHRhcmJhbGwgZm9ybWF0IHRvIHRoZQorICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX1RBUic+PGZpbGVuYW1lPkRFUExPWV9ESVJfVEFSPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICBkaXJlY3RvcnkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2xhc3MgaW5oZXJpdHMgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2UnPjxmaWxlbmFtZT5wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzIGFuZCBpcyBlbmFibGVkIHRocm91Z2ggdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBZb3UgY2Fubm90IHNwZWNpZnkgdGhlIDxmaWxlbmFtZT5wYWNrYWdlX3RhcjwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgICAgICBmaXJzdCB1c2luZyB0aGUgPGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgWW91IG11c3QgdXNlIDxmaWxlbmFtZT4uZGViPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+LmlwazwvZmlsZW5hbWU+LCBvciA8ZmlsZW5hbWU+LnJwbTwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgIGZvcm1hdHMgZm9yIHlvdXIgaW1hZ2Ugb3IgU0RLLgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcGFja2FnZWRhdGEnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cGFja2FnZWRhdGEuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnBhY2thZ2VkYXRhPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMKKyAgICAgICAgY29tbW9uIGZ1bmN0aW9uYWxpdHkgZm9yIHJlYWRpbmcgPGZpbGVuYW1lPnBrZ2RhdGE8L2ZpbGVuYW1lPiBmaWxlcworICAgICAgICBmb3VuZCBpbgorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEtHREFUQV9ESVInPjxmaWxlbmFtZT5QS0dEQVRBX0RJUjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgVGhlc2UgZmlsZXMgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIG91dHB1dCBwYWNrYWdlIHByb2R1Y2VkIGJ5CisgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNsYXNzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBiZWNhdXNlIGl0IGlzIGluaGVyaXRlZCBieSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcGFja2FnZSc+PGZpbGVuYW1lPnBhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcGFja2FnZWdyb3VwJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnBhY2thZ2Vncm91cC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwPC9maWxlbmFtZT4gY2xhc3Mgc2V0cyBkZWZhdWx0IHZhbHVlcworICAgICAgICBhcHByb3ByaWF0ZSBmb3IgcGFja2FnZSBncm91cCByZWNpcGVzIChlLmcuCisgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRVMnPlBBQ0tBR0VTPC9saW5rPjwvZmlsZW5hbWU+LAorICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQVJDSCc+UEFDS0FHRV9BUkNIPC9saW5rPjwvZmlsZW5hbWU+LAorICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUFMTE9XX0VNUFRZJz5BTExPV19FTVBUWTwvbGluaz48L2ZpbGVuYW1lPiwKKyAgICAgICAgYW5kIHNvIGZvcnRoKS4KKyAgICAgICAgSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgYWxsIHBhY2thZ2UgZ3JvdXAgcmVjaXBlcyBpbmhlcml0IHRoaXMgY2xhc3MuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoaXMgY2xhc3MsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5ncG9reS1leHRlbmQtY3VzdG9taW1hZ2UtY3VzdG9tdGFza3MnPkN1c3RvbWl6aW5nIEltYWdlcyBVc2luZyBDdXN0b20gUGFja2FnZSBHcm91cHM8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFByZXZpb3VzbHksIHRoaXMgY2xhc3Mgd2FzIGNhbGxlZCB0aGUgPGZpbGVuYW1lPnRhc2s8L2ZpbGVuYW1lPiBjbGFzcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1wYWNrYWdlaW5mbyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wYWNrYWdlaW5mby5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cGFja2FnZWluZm88L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBnaXZlcyBhIEJpdEJha2UgdXNlciBpbnRlcmZhY2UgdGhlIGFiaWxpdHkgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24KKyAgICAgICAgYWJvdXQgb3V0cHV0IHBhY2thZ2VzIGZyb20gdGhlIDxmaWxlbmFtZT5wa2dkYXRhPC9maWxlbmFtZT4gZmlsZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2xhc3MgaXMgZW5hYmxlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNpbmcgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2hvYic+SG9iPC91bGluaz4KKyAgICAgICAgdXNlciBpbnRlcmZhY2UuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcGF0Y2gnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cGF0Y2guYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnBhdGNoPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgZm9yCisgICAgICAgIGFwcGx5aW5nIHBhdGNoZXMgZHVyaW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGF0Y2gnPjxmaWxlbmFtZT5kb19wYXRjaDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB0YXNrLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNsYXNzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBiZWNhdXNlIGl0IGlzIGluaGVyaXRlZCBieSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYmFzZSc+PGZpbGVuYW1lPmJhc2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcGVybG5hdGl2ZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wZXJsbmF0aXZlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hlbiBpbmhlcml0ZWQgYnkgYSByZWNpcGUsIHRoZSA8ZmlsZW5hbWU+cGVybG5hdGl2ZTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHN1cHBvcnRzIHVzaW5nIHRoZSBuYXRpdmUgdmVyc2lvbiBvZiBQZXJsIGJ1aWx0IGJ5IHRoZSBidWlsZCBzeXN0ZW0KKyAgICAgICAgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIHZlcnNpb24gcHJvdmlkZWQgYnkgdGhlIGJ1aWxkIGhvc3QuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcGl4YnVmY2FjaGUnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cGl4YnVmY2FjaGUuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnBpeGJ1ZmNhY2hlPC9maWxlbmFtZT4gY2xhc3MgZ2VuZXJhdGVzIHRoZSBwcm9wZXIKKyAgICAgICAgcG9zdC1pbnN0YWxsIGFuZCBwb3N0LXJlbW92ZSAocG9zdGluc3QvcG9zdHJtKSBzY3JpcHRsZXRzIGZvciBwYWNrYWdlcworICAgICAgICB0aGF0IGluc3RhbGwgcGl4YnVmIGxvYWRlcnMsIHdoaWNoIGFyZSB1c2VkIHdpdGgKKyAgICAgICAgPGZpbGVuYW1lPmdkay1waXhidWY8L2ZpbGVuYW1lPi4KKyAgICAgICAgVGhlc2Ugc2NyaXB0bGV0cyBjYWxsIDxmaWxlbmFtZT51cGRhdGVfcGl4YnVmX2NhY2hlPC9maWxlbmFtZT4KKyAgICAgICAgdG8gYWRkIHRoZSBwaXhidWYgbG9hZGVycyB0byB0aGUgY2FjaGUuCisgICAgICAgIFNpbmNlIHRoZSBjYWNoZSBmaWxlcyBhcmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLAorICAgICAgICA8ZmlsZW5hbWU+dXBkYXRlX3BpeGJ1Zl9jYWNoZTwvZmlsZW5hbWU+IGlzIHJ1biB1c2luZyBRRU1VIGlmIHRoZQorICAgICAgICBwb3N0aW5zdCBzY3JpcHRsZXRzIG5lZWQgdG8gYmUgcnVuIG9uIHRoZSBidWlsZCBob3N0IGR1cmluZyBpbWFnZQorICAgICAgICBjcmVhdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSWYgdGhlIHBpeGJ1ZiBsb2FkZXJzIGJlaW5nIGluc3RhbGxlZCBhcmUgaW4gcGFja2FnZXMgb3RoZXIKKyAgICAgICAgdGhhbiB0aGUgcmVjaXBlJ3MgbWFpbiBwYWNrYWdlLCBzZXQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBJWEJVRl9QQUNLQUdFUyc+PGZpbGVuYW1lPlBJWEJVRl9QQUNLQUdFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB0byBzcGVjaWZ5IHRoZSBwYWNrYWdlcyBjb250YWluaW5nIHRoZSBsb2FkZXJzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXBrZ2NvbmZpZyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wa2djb25maWcuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnBrZy1jb25maWc8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBhIHN0YW5kYXJkIHdheSB0byBnZXQKKyAgICAgICAgaGVhZGVyIGFuZCBsaWJyYXJ5IGluZm9ybWF0aW9uLgorICAgICAgICBUaGlzIGNsYXNzIGFpbXMgdG8gc21vb3RoIGludGVncmF0aW9uIG9mCisgICAgICAgIDxmaWxlbmFtZT5wa2ctY29uZmlnPC9maWxlbmFtZT4gaW50byBsaWJyYXJpZXMgdGhhdCB1c2UgaXQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIER1cmluZyBzdGFnaW5nLCBCaXRCYWtlIGluc3RhbGxzIDxmaWxlbmFtZT5wa2ctY29uZmlnPC9maWxlbmFtZT4gZGF0YSBpbnRvIHRoZQorICAgICAgICA8ZmlsZW5hbWU+c3lzcm9vdHMvPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICBCeSBtYWtpbmcgdXNlIG9mIHN5c3Jvb3QgZnVuY3Rpb25hbGl0eSB3aXRoaW4gPGZpbGVuYW1lPnBrZy1jb25maWc8L2ZpbGVuYW1lPiwKKyAgICAgICAgdGhpcyBjbGFzcyBubyBsb25nZXIgaGFzIHRvIG1hbmlwdWxhdGUgdGhlIGZpbGVzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXBvcHVsYXRlLXNkayc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wb3B1bGF0ZV9zZGsuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnBvcHVsYXRlX3NkazwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIHN1cHBvcnQgZm9yCisgICAgICAgIFNESy1vbmx5IHJlY2lwZXMuCisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBhZHZhbnRhZ2VzIGdhaW5lZCB3aGVuIGJ1aWxkaW5nIGEgY3Jvc3MtZGV2ZWxvcG1lbnQKKyAgICAgICAgdG9vbGNoYWluIHVzaW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcG9wdWxhdGVfc2RrJz48ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc2RrPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHRhc2ssIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I29wdGlvbmFsbHktYnVpbGRpbmctYS10b29sY2hhaW4taW5zdGFsbGVyJz5PcHRpb25hbGx5IEJ1aWxkaW5nIGEgVG9vbGNoYWluIEluc3RhbGxlcjwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXBvcHVsYXRlLXNkay0qJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnBvcHVsYXRlX3Nka18qLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfKjwvZmlsZW5hbWU+IGNsYXNzZXMgc3VwcG9ydCBTREsgY3JlYXRpb24KKyAgICAgICAgYW5kIGNvbnNpc3Qgb2YgdGhlIGZvbGxvd2luZyBjbGFzc2VzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cG9wdWxhdGVfc2RrX2Jhc2U8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoZSBiYXNlIGNsYXNzIHN1cHBvcnRpbmcgU0RLIGNyZWF0aW9uIHVuZGVyIGFsbCBwYWNrYWdlCisgICAgICAgICAgICAgICAgbWFuYWdlcnMgKGkuZS4gREVCLCBSUE0sIGFuZCBvcGtnKS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBvcHVsYXRlX3Nka19kZWI8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFN1cHBvcnRzIGNyZWF0aW9uIG9mIHRoZSBTREsgZ2l2ZW4gdGhlIERlYmlhbiBwYWNrYWdlIG1hbmFnZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfcnBtPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBTdXBwb3J0cyBjcmVhdGlvbiBvZiB0aGUgU0RLIGdpdmVuIHRoZSBSUE0gcGFja2FnZSBtYW5hZ2VyLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cG9wdWxhdGVfc2RrX2lwazwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgU3VwcG9ydHMgY3JlYXRpb24gb2YgdGhlIFNESyBnaXZlbiB0aGUgb3BrZyAoSVBLIGZvcm1hdCkKKyAgICAgICAgICAgICAgICBwYWNrYWdlIG1hbmFnZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnBvcHVsYXRlX3Nka19iYXNlPC9maWxlbmFtZT4gY2xhc3MgaW5oZXJpdHMgdGhlCisgICAgICAgIGFwcHJvcHJpYXRlIDxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfKjwvZmlsZW5hbWU+IChpLmUuCisgICAgICAgIDxmaWxlbmFtZT5kZWI8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPnJwbTwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgPGZpbGVuYW1lPmlwazwvZmlsZW5hbWU+KSBiYXNlZCBvbgorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUEtHVFlQRSc+PGZpbGVuYW1lPklNQUdFX1BLR1RZUEU8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBiYXNlIGNsYXNzIGVuc3VyZXMgYWxsIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlyZWN0b3JpZXMgYXJlCisgICAgICAgIGVzdGFibGlzaGVkIGFuZCB0aGVuIHBvcHVsYXRlcyB0aGUgU0RLLgorICAgICAgICBBZnRlciBwb3B1bGF0aW5nIHRoZSBTREssIHRoZSA8ZmlsZW5hbWU+cG9wdWxhdGVfc2RrX2Jhc2U8L2ZpbGVuYW1lPgorICAgICAgICBjbGFzcyBjb25zdHJ1Y3RzIHR3byBzeXNyb290czoKKyAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU0RLX0FSQ0gnPjxmaWxlbmFtZT5TREtfQVJDSDwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59LW5hdGl2ZXNkazwvZmlsZW5hbWU+LAorICAgICAgICB3aGljaCBjb250YWlucyB0aGUgY3Jvc3MtY29tcGlsZXIgYW5kIGFzc29jaWF0ZWQgdG9vbGluZywgYW5kIHRoZQorICAgICAgICB0YXJnZXQsIHdoaWNoIGNvbnRhaW5zIGEgdGFyZ2V0IHJvb3QgZmlsZXN5c3RlbSB0aGF0IGlzIGNvbmZpZ3VyZWQgZm9yCisgICAgICAgIHRoZSBTREsgdXNhZ2UuCisgICAgICAgIFRoZXNlIHR3byBpbWFnZXMgcmVzaWRlIGluCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfT1VUUFVUJz48ZmlsZW5hbWU+U0RLX09VVFBVVDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgd2hpY2ggY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAke1NES19PVVRQVVR9LyR7U0RLX0FSQ0h9PHJlcGxhY2VhYmxlPi1uYXRpdmVzZGstcGtnczwvcmVwbGFjZWFibGU+CisgICAgICR7U0RLX09VVFBVVH0vJHtTREtUQVJHRVRTWVNST09UfS88cmVwbGFjZWFibGU+dGFyZ2V0LXBrZ3M8L3JlcGxhY2VhYmxlPgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZpbmFsbHksIHRoZSBiYXNlIHBvcHVsYXRlIFNESyBjbGFzcyBjcmVhdGVzIHRoZSB0b29sY2hhaW4KKyAgICAgICAgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0LCB0aGUgdGFyYmFsbCBvZiB0aGUgU0RLLCBhbmQgdGhlIGluc3RhbGxlci4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIHJlc3BlY3RpdmUgPGZpbGVuYW1lPnBvcHVsYXRlX3Nka19kZWI8L2ZpbGVuYW1lPiwKKyAgICAgICAgPGZpbGVuYW1lPnBvcHVsYXRlX3Nka19ycG08L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgIDxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfaXBrPC9maWxlbmFtZT4gY2xhc3NlcyBlYWNoIHN1cHBvcnQgdGhlCisgICAgICAgIHNwZWNpZmljIHR5cGUgb2YgU0RLLgorICAgICAgICBUaGVzZSBjbGFzc2VzIGFyZSBpbmhlcml0ZWQgYnkgYW5kIHVzZWQgd2l0aCB0aGUKKyAgICAgICAgPGZpbGVuYW1lPnBvcHVsYXRlX3Nka19iYXNlPC9maWxlbmFtZT4gY2xhc3MuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4KKyAgICAgICAgZ2VuZXJhdGlvbiwgc2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluLWdlbmVyYXRpb24nPkNyb3NzLURldmVsb3BtZW50IFRvb2xjaGFpbiBHZW5lcmF0aW9uPC9saW5rPiIKKyAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGFkdmFudGFnZXMgZ2FpbmVkIHdoZW4gYnVpbGRpbmcgYQorICAgICAgICBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4gdXNpbmcgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wb3B1bGF0ZV9zZGsnPjxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zZGs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdGFzaywgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjb3B0aW9uYWxseS1idWlsZGluZy1hLXRvb2xjaGFpbi1pbnN0YWxsZXInPk9wdGlvbmFsbHkgQnVpbGRpbmcgYSBUb29sY2hhaW4gSW5zdGFsbGVyPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcHJleHBvcnQnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cHJleHBvcnQuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnByZXhwb3J0PC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBmb3IKKyAgICAgICAgZXhwb3J0aW5nCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L2xpbms+IHZhbHVlcy4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5LgorICAgICAgICAgICAgUmF0aGVyLCBpdCBpcyBlbmFibGVkIHdoZW4gdXNpbmcKKyAgICAgICAgICAgICI8ZmlsZW5hbWU+Yml0YmFrZS1wcnNlcnYtdG9vbCBleHBvcnQ8L2ZpbGVuYW1lPiIuCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1wcmltcG9ydCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wcmltcG9ydC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cHJpbXBvcnQ8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IGZvcgorICAgICAgICBpbXBvcnRpbmcKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvbGluaz4gdmFsdWVzLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkuCisgICAgICAgICAgICBSYXRoZXIsIGl0IGlzIGVuYWJsZWQgd2hlbiB1c2luZworICAgICAgICAgICAgIjxmaWxlbmFtZT5iaXRiYWtlLXByc2Vydi10b29sIGltcG9ydDwvZmlsZW5hbWU+Ii4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXByc2Vydic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wcnNlcnYuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnByc2VydjwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgZm9yCisgICAgICAgIHVzaW5nIGEKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjd29ya2luZy13aXRoLWEtcHItc2VydmljZSc+UFIgc2VydmljZTwvdWxpbms+CisgICAgICAgIGluIG9yZGVyIHRvIGF1dG9tYXRpY2FsbHkgbWFuYWdlIHRoZSBpbmNyZW1lbnRpbmcgb2YgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlIGZvcgorICAgICAgICBlYWNoIHJlY2lwZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjbGFzcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYmVjYXVzZSBpdCBpcyBpbmhlcml0ZWQgYnkgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2UnPjxmaWxlbmFtZT5wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzLgorICAgICAgICBIb3dldmVyLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aWxsIG5vdCBlbmFibGUgdGhlCisgICAgICAgIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBjbGFzcyB1bmxlc3MKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSU0VSVl9IT1NUJz48ZmlsZW5hbWU+UFJTRVJWX0hPU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgaGFzIGJlZW4gc2V0LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXB0ZXN0Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnB0ZXN0LmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5wdGVzdDwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgZm9yCisgICAgICAgIHBhY2thZ2luZyBhbmQgaW5zdGFsbGluZyBydW50aW1lIHRlc3RzIGZvciByZWNpcGVzIHRoYXQgYnVpbGQgc29mdHdhcmUKKyAgICAgICAgdGhhdCBwcm92aWRlcyB0aGVzZSB0ZXN0cy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjbGFzcyBpcyBpbnRlbmRlZCB0byBiZSBpbmhlcml0ZWQgYnkgaW5kaXZpZHVhbCByZWNpcGVzLgorICAgICAgICBIb3dldmVyLCB0aGUgY2xhc3MnIGZ1bmN0aW9uYWxpdHkgaXMgbGFyZ2VseSBkaXNhYmxlZCB1bmxlc3MgInB0ZXN0IgorICAgICAgICBhcHBlYXJzIGluCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fRkVBVFVSRVMnPjxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgIFNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3Rlc3RpbmctcGFja2FnZXMtd2l0aC1wdGVzdCc+VGVzdGluZyBQYWNrYWdlcyBXaXRoIHB0ZXN0PC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uCisgICAgICAgIG9uIHB0ZXN0LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXB0ZXN0LWdub21lJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnB0ZXN0LWdub21lLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRW5hYmxlcyBwYWNrYWdlIHRlc3RzIChwdGVzdHMpIHNwZWNpZmljYWxseSBmb3IgR05PTUUgcGFja2FnZXMsCisgICAgICAgIHdoaWNoIGhhdmUgdGVzdHMgaW50ZW5kZWQgdG8gYmUgZXhlY3V0ZWQgd2l0aAorICAgICAgICA8ZmlsZW5hbWU+Z25vbWUtZGVza3RvcC10ZXN0aW5nPC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBzZXR0aW5nIHVwIGFuZCBydW5uaW5nIHB0ZXN0cywgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdGVzdGluZy1wYWNrYWdlcy13aXRoLXB0ZXN0Jz5UZXN0aW5nIFBhY2thZ2VzIFdpdGggcHRlc3Q8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcHl0aG9uLWRpcic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5weXRob24tZGlyLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5weXRob24tZGlyPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgdGhlIGJhc2UgdmVyc2lvbiwKKyAgICAgICAgbG9jYXRpb24sIGFuZCBzaXRlIHBhY2thZ2UgbG9jYXRpb24gZm9yIFB5dGhvbi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1weXRob25uYXRpdmUnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cHl0aG9ubmF0aXZlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hlbiBpbmhlcml0ZWQgYnkgYSByZWNpcGUsIHRoZSA8ZmlsZW5hbWU+cHl0aG9ubmF0aXZlPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgc3VwcG9ydHMgdXNpbmcgdGhlIG5hdGl2ZSB2ZXJzaW9uIG9mIFB5dGhvbiBidWlsdCBieSB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgIHJhdGhlciB0aGFuIHVzaW5nIHRoZSB2ZXJzaW9uIHByb3ZpZGVkIGJ5IHRoZSBidWlsZCBob3N0LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXFlbXUnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cWVtdS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cWVtdTwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgZm9yIHJlY2lwZXMKKyAgICAgICAgdGhhdCBlaXRoZXIgbmVlZCBRRU1VIG9yIHRlc3QgZm9yIHRoZSBleGlzdGVuY2Ugb2YgUUVNVS4KKyAgICAgICAgVHlwaWNhbGx5LCB0aGlzIGNsYXNzIGlzIHVzZWQgdG8gcnVuIHByb2dyYW1zIGZvciBhIHRhcmdldCBzeXN0ZW0gb24KKyAgICAgICAgdGhlIGJ1aWxkIGhvc3QgdXNpbmcgUUVNVSdzIGFwcGxpY2F0aW9uIGVtdWxhdGlvbiBtb2RlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXFtYWtlKic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5xbWFrZSouYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnFtYWtlKjwvZmlsZW5hbWU+IGNsYXNzZXMgc3VwcG9ydCByZWNpcGVzIHRoYXQKKyAgICAgICAgbmVlZCB0byBidWlsZCBzb2Z0d2FyZSB0aGF0IHVzZXMgUXQncyA8ZmlsZW5hbWU+cW1ha2U8L2ZpbGVuYW1lPgorICAgICAgICBidWlsZCBzeXN0ZW0gYW5kIGFyZSBjb21wcmlzZWQgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnFtYWtlX2Jhc2U8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFByb3ZpZGVzIGJhc2UgZnVuY3Rpb25hbGl0eSBmb3IgYWxsIHZlcnNpb25zIG9mCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFtYWtlPC9maWxlbmFtZT4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5xbWFrZTI8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEV4dGVuZHMgYmFzZSBmdW5jdGlvbmFsaXR5IGZvciA8ZmlsZW5hbWU+cW1ha2U8L2ZpbGVuYW1lPiAyLnggYXMKKyAgICAgICAgICAgICAgICB1c2VkIGJ5IFF0IDQueC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIElmIHlvdSBuZWVkIHRvIHNldCBhbnkgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgb3IgcGFzcyBhbnkgb3B0aW9ucyB0bworICAgICAgICA8ZmlsZW5hbWU+cW1ha2U8L2ZpbGVuYW1lPiwgeW91IGNhbiBhZGQgdGhlc2UgdG8gdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9RTUFLRVZBUlNfUFJFJz48ZmlsZW5hbWU+RVhUUkFfUU1BS0VWQVJTX1BSRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBvcgorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRVhUUkFfUU1BS0VWQVJTX1BPU1QnPjxmaWxlbmFtZT5FWFRSQV9RTUFLRVZBUlNfUE9TVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZXMsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBhcmd1bWVudHMgbmVlZCB0byBiZSBiZWZvcmUgb3IKKyAgICAgICAgYWZ0ZXIgdGhlIDxmaWxlbmFtZT4ucHJvPC9maWxlbmFtZT4gZmlsZSBsaXN0IG9uIHRoZSBjb21tYW5kIGxpbmUsCisgICAgICAgIHJlc3BlY3RpdmVseS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQnkgZGVmYXVsdCwgYWxsIDxmaWxlbmFtZT4ucHJvPC9maWxlbmFtZT4gZmlsZXMgYXJlIGJ1aWx0LgorICAgICAgICBJZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHlvdXIgb3duIHN1YnNldCBvZiA8ZmlsZW5hbWU+LnBybzwvZmlsZW5hbWU+CisgICAgICAgIGZpbGVzIHRvIGJlIGJ1aWx0LCBzcGVjaWZ5IHRoZW0gaW4gdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1RTUFLRV9QUk9GSUxFUyc+PGZpbGVuYW1lPlFNQUtFX1BST0ZJTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXF0NConPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cXQ0Ki5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cXQ0KjwvZmlsZW5hbWU+IGNsYXNzZXMgc3VwcG9ydCByZWNpcGVzIHRoYXQgbmVlZCB0bworICAgICAgICBidWlsZCBzb2Z0d2FyZSB0aGF0IHVzZXMgdGhlIFF0IGRldmVsb3BtZW50IGZyYW1ld29yayB2ZXJzaW9uIDQueAorICAgICAgICBhbmQgY29uc2lzdCBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cXQ0ZTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgU3VwcG9ydHMgYnVpbGRpbmcgYWdhaW5zdCBRdC9FbWJlZGRlZCwgd2hpY2ggdXNlcyB0aGUKKyAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciBmb3IgZ3JhcGhpY2FsIG91dHB1dC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnF0NHgxMTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgU3VwcG9ydHMgYnVpbGRpbmcgYWdhaW5zdCBRdC9YMTEuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgY2xhc3NlcyBpbmhlcml0IHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1xbWFrZSonPjxmaWxlbmFtZT5xbWFrZTI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcmVsb2NhdGFibGUnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cmVsb2NhdGFibGUuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnJlbG9jYXRhYmxlPC9maWxlbmFtZT4gY2xhc3MgZW5hYmxlcyByZWxvY2F0aW9uIG9mCisgICAgICAgIGJpbmFyaWVzIHdoZW4gdGhleSBhcmUgaW5zdGFsbGVkIGludG8gdGhlIHN5c3Jvb3QuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2xhc3MgbWFrZXMgdXNlIG9mIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1jaHJwYXRoJz48ZmlsZW5hbWU+Y2hycGF0aDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcyBhbmQgaXMgdXNlZCBieSBib3RoIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1jcm9zcyc+PGZpbGVuYW1lPmNyb3NzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGFuZAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1uYXRpdmUnPjxmaWxlbmFtZT5uYXRpdmU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3Nlcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1yZXBvcnQtZXJyb3InPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cmVwb3J0LWVycm9yLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5yZXBvcnQtZXJyb3I8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyBlbmFibGluZyB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdXNpbmctdGhlLWVycm9yLXJlcG9ydGluZy10b29sJz5lcnJvciByZXBvcnRpbmcgdG9vbDwvdWxpbms+LAorICAgICAgICB3aGljaCBhbGxvd3MgeW91IHRvIHN1Ym1pdCBidWlsZCBlcnJvciBpbmZvcm1hdGlvbiB0byBhIGNlbnRyYWwKKyAgICAgICAgZGF0YWJhc2UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBjbGFzcyBjb2xsZWN0cyBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3IgcmVjaXBlLCByZWNpcGUgdmVyc2lvbiwgdGFzaywKKyAgICAgICAgbWFjaGluZSwgZGlzdHJvLCBidWlsZCBzeXN0ZW0sIHRhcmdldCBzeXN0ZW0sIGhvc3QgZGlzdHJvLCBicmFuY2gsCisgICAgICAgIGNvbW1pdCwgYW5kIGxvZy4KKyAgICAgICAgRnJvbSB0aGUgaW5mb3JtYXRpb24sIHJlcG9ydCBmaWxlcyB1c2luZyBhIEpTT04gZm9ybWF0IGFyZSBjcmVhdGVkIGFuZAorICAgICAgICBzdG9yZWQgaW4KKyAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTE9HX0RJUic+PGZpbGVuYW1lPkxPR19ESVI8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fS9lcnJvci1yZXBvcnQ8L2ZpbGVuYW1lPi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1ybS13b3JrJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnJtX3dvcmsuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnJtX3dvcms8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyBkZWxldGlvbiBvZiB0ZW1wb3JhcnkKKyAgICAgICAgd29ya3NwYWNlLCB3aGljaCBjYW4gZWFzZSB5b3VyIGhhcmQgZHJpdmUgZGVtYW5kcyBkdXJpbmcgYnVpbGRzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjYW4gdXNlIGEgc3Vic3RhbnRpYWwgYW1vdW50IG9mIGRpc2sKKyAgICAgICAgc3BhY2UgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLgorICAgICAgICBBIHBvcnRpb24gb2YgdGhpcyBzcGFjZSBpcyB0aGUgd29yayBmaWxlcyB1bmRlciB0aGUKKyAgICAgICAgPGZpbGVuYW1lPiR7VE1QRElSfS93b3JrPC9maWxlbmFtZT4gZGlyZWN0b3J5IGZvciBlYWNoIHJlY2lwZS4KKyAgICAgICAgT25jZSB0aGUgYnVpbGQgc3lzdGVtIGdlbmVyYXRlcyB0aGUgcGFja2FnZXMgZm9yIGEgcmVjaXBlLCB0aGUgd29yaworICAgICAgICBmaWxlcyBmb3IgdGhhdCByZWNpcGUgYXJlIG5vIGxvbmdlciBuZWVkZWQuCisgICAgICAgIEhvd2V2ZXIsIGJ5IGRlZmF1bHQsIHRoZSBidWlsZCBzeXN0ZW0gcHJlc2VydmVzIHRoZXNlIGZpbGVzCisgICAgICAgIGZvciBpbnNwZWN0aW9uIGFuZCBwb3NzaWJsZSBkZWJ1Z2dpbmcgcHVycG9zZXMuCisgICAgICAgIElmIHlvdSB3b3VsZCByYXRoZXIgaGF2ZSB0aGVzZSBmaWxlcyBkZWxldGVkIHRvIHNhdmUgZGlzayBzcGFjZQorICAgICAgICBhcyB0aGUgYnVpbGQgcHJvZ3Jlc3NlcywgeW91IGNhbiBlbmFibGUgPGZpbGVuYW1lPnJtX3dvcms8L2ZpbGVuYW1lPgorICAgICAgICBieSBhZGRpbmcgdGhlIGZvbGxvd2luZyB0byB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSwKKyAgICAgICAgd2hpY2ggaXMgZm91bmQgaW4gdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICBJTkhFUklUICs9ICJybV93b3JrIgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIElmIHlvdSBhcmUgbW9kaWZ5aW5nIGFuZCBidWlsZGluZyBzb3VyY2UgY29kZSBvdXQgb2YgdGhlIHdvcmsgZGlyZWN0b3J5CisgICAgICAgIGZvciBhIHJlY2lwZSwgZW5hYmxpbmcgPGZpbGVuYW1lPnJtX3dvcms8L2ZpbGVuYW1lPiB3aWxsIHBvdGVudGlhbGx5CisgICAgICAgIHJlc3VsdCBpbiB5b3VyIGNoYW5nZXMgdG8gdGhlIHNvdXJjZSBiZWluZyBsb3N0LgorICAgICAgICBUbyBleGNsdWRlIHNvbWUgcmVjaXBlcyBmcm9tIGhhdmluZyB0aGVpciB3b3JrIGRpcmVjdG9yaWVzIGRlbGV0ZWQgYnkKKyAgICAgICAgPGZpbGVuYW1lPnJtX3dvcms8L2ZpbGVuYW1lPiwgeW91IGNhbiBhZGQgdGhlIG5hbWVzIG9mIHRoZSByZWNpcGUgb3IKKyAgICAgICAgcmVjaXBlcyB5b3UgYXJlIHdvcmtpbmcgb24gdG8gdGhlIDxmaWxlbmFtZT5STV9XT1JLX0VYQ0xVREU8L2ZpbGVuYW1lPgorICAgICAgICB2YXJpYWJsZSwgd2hpY2ggY2FuIGFsc28gYmUgc2V0IGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICBmaWxlLgorICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICBSTV9XT1JLX0VYQ0xVREUgKz0gImJ1c3lib3ggZ2xpYmMiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1yb290ZnMqJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnJvb3RmcyouYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnJvb3Rmcyo8L2ZpbGVuYW1lPiBjbGFzc2VzIHN1cHBvcnQgY3JlYXRpbmcKKyAgICAgICAgdGhlIHJvb3QgZmlsZXN5c3RlbSBmb3IgYW4gaW1hZ2UgYW5kIGNvbnNpc3Qgb2YgdGhlIGZvbGxvd2luZyBjbGFzc2VzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+cm9vdGZzX2RlYjwvZmlsZW5hbWU+IGNsYXNzLCB3aGljaCBzdXBwb3J0cworICAgICAgICAgICAgICAgIGNyZWF0aW9uIG9mIHJvb3QgZmlsZXN5c3RlbXMgZm9yIGltYWdlcyBidWlsdCB1c2luZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uZGViPC9maWxlbmFtZT4gcGFja2FnZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5yb290ZnNfcnBtPC9maWxlbmFtZT4gY2xhc3MsIHdoaWNoIHN1cHBvcnRzCisgICAgICAgICAgICAgICAgY3JlYXRpb24gb2Ygcm9vdCBmaWxlc3lzdGVtcyBmb3IgaW1hZ2VzIGJ1aWx0IHVzaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5ycG08L2ZpbGVuYW1lPiBwYWNrYWdlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnJvb3Rmc19pcGs8L2ZpbGVuYW1lPiBjbGFzcywgd2hpY2ggc3VwcG9ydHMKKyAgICAgICAgICAgICAgICBjcmVhdGlvbiBvZiByb290IGZpbGVzeXN0ZW1zIGZvciBpbWFnZXMgYnVpbHQgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmlwazwvZmlsZW5hbWU+IHBhY2thZ2VzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIHJvb3QgZmlsZXN5c3RlbSBpcyBjcmVhdGVkIGZyb20gcGFja2FnZXMgdXNpbmcgb25lIG9mIHRoZQorICAgICAgICA8ZmlsZW5hbWU+cm9vdGZzKi5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZXMgYXMgZGV0ZXJtaW5lZCBieSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyByb290IGZpbGVzeXN0ZW0gaW1hZ2VzIGFyZSBjcmVhdGVkLCBzZWUgdGhlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdpbWFnZS1nZW5lcmF0aW9uLWRldi1lbnZpcm9ubWVudCc+SW1hZ2UgR2VuZXJhdGlvbjwvbGluaz4iCisgICAgICAgIHNlY3Rpb24uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtc2FuaXR5Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnNhbml0eS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+c2FuaXR5PC9maWxlbmFtZT4gY2xhc3MgY2hlY2tzIHRvIHNlZSBpZiBwcmVyZXF1aXNpdGUKKyAgICAgICAgc29mdHdhcmUgaXMgcHJlc2VudCBvbiB0aGUgaG9zdCBzeXN0ZW0gc28gdGhhdCB1c2VycyBjYW4gYmUgbm90aWZpZWQKKyAgICAgICAgb2YgcG90ZW50aWFsIHByb2JsZW1zIHRoYXQgbWlnaHQgYWZmZWN0IHRoZWlyIGJ1aWxkLgorICAgICAgICBUaGUgY2xhc3MgYWxzbyBwZXJmb3JtcyBiYXNpYyB1c2VyIGNvbmZpZ3VyYXRpb24gY2hlY2tzIGZyb20KKyAgICAgICAgdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlIHRvCisgICAgICAgIHByZXZlbnQgY29tbW9uIG1pc3Rha2VzIHRoYXQgY2F1c2UgYnVpbGQgZmFpbHVyZXMuCisgICAgICAgIERpc3RyaWJ1dGlvbiBwb2xpY3kgdXN1YWxseSBkZXRlcm1pbmVzIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGlzIGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXNjb25zJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnNjb25zLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5zY29uczwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIHJlY2lwZXMgdGhhdCBuZWVkIHRvCisgICAgICAgIGJ1aWxkIHNvZnR3YXJlIHRoYXQgdXNlcyB0aGUgU0NvbnMgYnVpbGQgc3lzdGVtLgorICAgICAgICBZb3UgY2FuIHVzZSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FU0NPTlMnPjxmaWxlbmFtZT5FWFRSQV9PRVNDT05TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgeW91IHdhbnQgdG8gcGFzcworICAgICAgICBTQ29ucyBjb21tYW5kIGxpbmUuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtc2RsJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnNkbC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+c2RsPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgcmVjaXBlcyB0aGF0IG5lZWQgdG8gYnVpbGQKKyAgICAgICAgc29mdHdhcmUgdGhhdCB1c2VzIHRoZSBTaW1wbGUgRGlyZWN0TWVkaWEgTGF5ZXIgKFNETCkgbGlicmFyeS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1zZXR1cHRvb2xzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnNldHVwdG9vbHMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnNldHVwdG9vbHM8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyBQeXRob24KKyAgICAgICAgdmVyc2lvbiAyLnggZXh0ZW5zaW9ucyB0aGF0IHVzZSBidWlsZCBzeXN0ZW1zIGJhc2VkIG9uCisgICAgICAgIDxmaWxlbmFtZT5zZXR1cHRvb2xzPC9maWxlbmFtZT4uCisgICAgICAgIElmIHlvdXIgcmVjaXBlIHVzZXMgdGhlc2UgYnVpbGQgc3lzdGVtcywgdGhlIHJlY2lwZSBuZWVkcyB0bworICAgICAgICBpbmhlcml0IHRoZSA8ZmlsZW5hbWU+c2V0dXB0b29sczwvZmlsZW5hbWU+IGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXNldHVwdG9vbHMzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnNldHVwdG9vbHMzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5zZXR1cHRvb2xzMzwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIFB5dGhvbgorICAgICAgICB2ZXJzaW9uIDMueCBleHRlbnNpb25zIHRoYXQgdXNlIGJ1aWxkIHN5c3RlbXMgYmFzZWQgb24KKyAgICAgICAgPGZpbGVuYW1lPnNldHVwdG9vbHMzPC9maWxlbmFtZT4uCisgICAgICAgIElmIHlvdXIgcmVjaXBlIHVzZXMgdGhlc2UgYnVpbGQgc3lzdGVtcywgdGhlIHJlY2lwZSBuZWVkcyB0bworICAgICAgICBpbmhlcml0IHRoZSA8ZmlsZW5hbWU+c2V0dXB0b29sczM8L2ZpbGVuYW1lPiBjbGFzcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1zaXAnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+c2lwLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5zaXA8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBzdXBwb3J0cyByZWNpcGVzIHRoYXQgYnVpbGQgb3IgcGFja2FnZSBTSVAtYmFzZWQgUHl0aG9uIGJpbmRpbmdzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXNpdGVjb25maWcnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+c2l0ZWNvbmZpZy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+c2l0ZWNvbmZpZzwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgZm9yIGhhbmRsaW5nIHNpdGUgY29uZmlndXJhdGlvbi4KKyAgICAgICAgVGhlIGNsYXNzIGlzIHVzZWQgYnkgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWF1dG90b29scyc+PGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcyB0byBhY2NlbGVyYXRlIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHRhc2suCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtc2l0ZWluZm8nPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+c2l0ZWluZm8uYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnNpdGVpbmZvPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQKKyAgICAgICAgdGhlIHRhcmdldHMgdGhhdCBtaWdodCBiZSBuZWVkZWQgYnkgb3RoZXIgY2xhc3NlcyBvciByZWNpcGVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBBcyBhbiBleGFtcGxlLCBjb25zaWRlciBBdXRvdG9vbHMsIHdoaWNoIGNhbiByZXF1aXJlIHRlc3RzIHRoYXQgbXVzdAorICAgICAgICBleGVjdXRlIG9uIHRoZSB0YXJnZXQgaGFyZHdhcmUuCisgICAgICAgIFNpbmNlIHRoaXMgaXMgbm90IHBvc3NpYmxlIGluIGdlbmVyYWwgd2hlbiBjcm9zcyBjb21waWxpbmcsIHNpdGUKKyAgICAgICAgaW5mb3JtYXRpb24gaXMgdXNlZCB0byBwcm92aWRlIGNhY2hlZCB0ZXN0IHJlc3VsdHMgc28gdGhlc2UgdGVzdHMgY2FuCisgICAgICAgIGJlIHNraXBwZWQgb3ZlciBidXQgc3RpbGwgbWFrZSB0aGUgY29ycmVjdCB2YWx1ZXMgYXZhaWxhYmxlLgorICAgICAgICBUaGUKKyAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZXRhLXNpdGUnPm1ldGEvc2l0ZSBkaXJlY3Rvcnk8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgY29udGFpbnMgdGVzdCByZXN1bHRzIHNvcnRlZCBpbnRvIGRpZmZlcmVudCBjYXRlZ29yaWVzIHN1Y2ggYXMKKyAgICAgICAgYXJjaGl0ZWN0dXJlLCBlbmRpYW5uZXNzLCBhbmQgdGhlIDxmaWxlbmFtZT5saWJjPC9maWxlbmFtZT4gdXNlZC4KKyAgICAgICAgU2l0ZSBpbmZvcm1hdGlvbiBwcm92aWRlcyBhIGxpc3Qgb2YgZmlsZXMgY29udGFpbmluZyBkYXRhIHJlbGV2YW50IHRvCisgICAgICAgIHRoZSBjdXJyZW50IGJ1aWxkIGluIHRoZQorICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUNPTkZJR19TSVRFJz5DT05GSUdfU0lURTwvbGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICB0aGF0IEF1dG90b29scyBhdXRvbWF0aWNhbGx5IHBpY2tzIHVwLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgY2xhc3MgYWxzbyBwcm92aWRlcyB2YXJpYWJsZXMgbGlrZQorICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVNJVEVJTkZPX0VORElBTk5FU1MnPlNJVEVJTkZPX0VORElBTk5FU1M8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgYW5kIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU0lURUlORk9fQklUUyc+U0lURUlORk9fQklUUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICB0aGF0IGNhbiBiZSB1c2VkIGVsc2V3aGVyZSBpbiB0aGUgbWV0YWRhdGEuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEJlY2F1c2UgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJhc2UnPjxmaWxlbmFtZT5iYXNlPC9maWxlbmFtZT48L2xpbms+IGNsYXNzCisgICAgICAgIGluY2x1ZGVzIHRoZSA8ZmlsZW5hbWU+c2l0ZWluZm88L2ZpbGVuYW1lPiBjbGFzcywgaXQgaXMgYWx3YXlzIGFjdGl2ZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1zcGR4Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnNwZHguYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnNwZHg8L2ZpbGVuYW1lPiBjbGFzcyBpbnRlZ3JhdGVzIHJlYWwtdGltZSBsaWNlbnNlCisgICAgICAgIHNjYW5uaW5nLCBnZW5lcmF0aW9uIG9mIFNQRFggc3RhbmRhcmQgb3V0cHV0LCBhbmQgdmVyaWZpY2F0aW9uCisgICAgICAgIG9mIGxpY2Vuc2UgaW5mb3JtYXRpb24gZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBUaGlzIGNsYXNzIGlzIGN1cnJlbnRseSBhdCB0aGUgcHJvdG90eXBlIHN0YWdlIGluIHRoZSAxLjYKKyAgICAgICAgICAgIHJlbGVhc2UuCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1zc3RhdGUnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+c3N0YXRlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5zc3RhdGU8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBzdXBwb3J0IGZvciBTaGFyZWQKKyAgICAgICAgU3RhdGUgKHNzdGF0ZSkuCisgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBjbGFzcyBpcyBlbmFibGVkIHRocm91Z2ggdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTkhFUklUX0RJU1RSTyc+PGZpbGVuYW1lPklOSEVSSVRfRElTVFJPPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlJ3MgZGVmYXVsdCB2YWx1ZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc3N0YXRlLCBzZWUgdGhlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdzaGFyZWQtc3RhdGUtY2FjaGUnPlNoYXJlZCBTdGF0ZSBDYWNoZTwvbGluaz4iCisgICAgICAgIHNlY3Rpb24uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtc3RhZ2luZyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5zdGFnaW5nLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5zdGFnaW5nPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgc3VwcG9ydCBmb3Igc3RhZ2luZworICAgICAgICBmaWxlcyBpbnRvIHRoZSBzeXNyb290IGR1cmluZyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBvcHVsYXRlX3N5c3Jvb3QnPjxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zeXNyb290PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHRhc2suCisgICAgICAgIFRoZSBjbGFzcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYmVjYXVzZSBpdCBpcyBpbmhlcml0ZWQgYnkgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJhc2UnPjxmaWxlbmFtZT5iYXNlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXN5c2xpbnV4Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnN5c2xpbnV4LmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5zeXNsaW51eDwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIHN5c2xpbnV4LXNwZWNpZmljCisgICAgICAgIGZ1bmN0aW9ucyBmb3IgYnVpbGRpbmcgYm9vdGFibGUgaW1hZ2VzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgY2xhc3Mgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLUlOSVRSRCc+PGZpbGVuYW1lPklOSVRSRDwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICBJbmRpY2F0ZXMgbGlzdCBvZiBmaWxlc3lzdGVtIGltYWdlcyB0byBjb25jYXRlbmF0ZSBhbmQgdXNlIGFzCisgICAgICAgICAgICAgICAgYW4gaW5pdGlhbCBSQU0gZGlzayAoaW5pdHJkKS4KKyAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIG9wdGlvbmFsLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1ST09URlMnPjxmaWxlbmFtZT5ST09URlM8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgSW5kaWNhdGVzIGEgZmlsZXN5c3RlbSBpbWFnZSB0byBpbmNsdWRlIGFzIHRoZSByb290IGZpbGVzeXN0ZW0uCisgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBvcHRpb25hbC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItQVVUT19TWVNMSU5VWE1FTlUnPjxmaWxlbmFtZT5BVVRPX1NZU0xJTlVYTUVOVTwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICBFbmFibGVzIGNyZWF0aW5nIGFuIGF1dG9tYXRpYyBtZW51IHdoZW4gc2V0IHRvICIxIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItTEFCRUxTJz48ZmlsZW5hbWU+TEFCRUxTPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgIExpc3RzIHRhcmdldHMgZm9yIGF1dG9tYXRpYyBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1BUFBFTkQnPjxmaWxlbmFtZT5BUFBFTkQ8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgTGlzdHMgYXBwZW5kIHN0cmluZyBvdmVycmlkZXMgZm9yIGVhY2ggbGFiZWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVNZU0xJTlVYX09QVFMnPjxmaWxlbmFtZT5TWVNMSU5VWF9PUFRTPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgIExpc3RzIGFkZGl0aW9uYWwgb3B0aW9ucyB0byBhZGQgdG8gdGhlIHN5c2xpbnV4IGZpbGUuCisgICAgICAgICAgICAgICAgU2VtaWNvbG9uIGNoYXJhY3RlcnMgc2VwYXJhdGUgbXVsdGlwbGUgb3B0aW9ucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItU1lTTElOVVhfU1BMQVNIJz48ZmlsZW5hbWU+U1lTTElOVVhfU1BMQVNIPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgIExpc3RzIGEgYmFja2dyb3VuZCBmb3IgdGhlIFZHQSBib290IG1lbnUgd2hlbiB5b3UgYXJlIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIGJvb3QgbWVudS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItU1lTTElOVVhfREVGQVVMVF9DT05TT0xFJz48ZmlsZW5hbWU+U1lTTElOVVhfREVGQVVMVF9DT05TT0xFPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgIFNldCB0byAiY29uc29sZT10dHlYIiB0byBjaGFuZ2Uga2VybmVsIGJvb3QgZGVmYXVsdCBjb25zb2xlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1TWVNMSU5VWF9TRVJJQUwnPjxmaWxlbmFtZT5TWVNMSU5VWF9TRVJJQUw8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgU2V0cyBhbiBhbHRlcm5hdGUgc2VyaWFsIHBvcnQuCisgICAgICAgICAgICAgICAgT3IsIHR1cm5zIG9mZiBzZXJpYWwgd2hlbiB0aGUgdmFyaWFibGUgaXMgc2V0IHdpdGggYW4KKyAgICAgICAgICAgICAgICBlbXB0eSBzdHJpbmcuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVNZU0xJTlVYX1NFUklBTF9UVFknPjxmaWxlbmFtZT5TWVNMSU5VWF9TRVJJQUxfVFRZPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgIFNldHMgYW4gYWx0ZXJuYXRlICJjb25zb2xlPXR0eS4uLiIga2VybmVsIGJvb3QgYXJndW1lbnQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXN5c3RlbWQnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+c3lzdGVtZC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+c3lzdGVtZDwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHJlY2lwZXMKKyAgICAgICAgdGhhdCBpbnN0YWxsIHN5c3RlbWQgdW5pdCBmaWxlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgY2xhc3MgaXMgZGlzYWJsZWQgdW5sZXNzIHlvdSBoYXZlICJzeXN0ZW1kIgorICAgICAgICBpbgorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBVbmRlciB0aGlzIGNsYXNzLCB0aGUgcmVjaXBlIG9yIE1ha2VmaWxlIChpLmUuIHdoYXRldmVyIHRoZSByZWNpcGUgaXMKKyAgICAgICAgY2FsbGluZyBkdXJpbmcgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB0YXNrKSBpbnN0YWxscyB1bml0IGZpbGVzIGludG8KKyAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRCc+PGZpbGVuYW1lPkQ8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW08L2ZpbGVuYW1lPi4KKyAgICAgICAgSWYgdGhlIHVuaXQgZmlsZXMgYmVpbmcgaW5zdGFsbGVkIGdvIGludG8gcGFja2FnZXMgb3RoZXIgdGhhbiB0aGUKKyAgICAgICAgbWFpbiBwYWNrYWdlLCB5b3UgbmVlZCB0byBzZXQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNZU1RFTURfUEFDS0FHRVMnPjxmaWxlbmFtZT5TWVNURU1EX1BBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGluIHlvdXIgcmVjaXBlIHRvIGlkZW50aWZ5IHRoZSBwYWNrYWdlcyBpbiB3aGljaCB0aGUgZmlsZXMgd2lsbCBiZQorICAgICAgICBpbnN0YWxsZWQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFlvdSBzaG91bGQgc2V0CisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TWVNURU1EX1NFUlZJQ0UnPjxmaWxlbmFtZT5TWVNURU1EX1NFUlZJQ0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdG8gdGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgZmlsZS4KKyAgICAgICAgWW91IHNob3VsZCBhbHNvIHVzZSBhIHBhY2thZ2UgbmFtZSBvdmVycmlkZSB0byBpbmRpY2F0ZSB0aGUgcGFja2FnZQorICAgICAgICB0byB3aGljaCB0aGUgdmFsdWUgYXBwbGllcy4KKyAgICAgICAgSWYgdGhlIHZhbHVlIGFwcGxpZXMgdG8gdGhlIHJlY2lwZSdzIG1haW4gcGFja2FnZSwgdXNlCisgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LgorICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgZnJvbSB0aGUgY29ubm1hbiByZWNpcGU6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gImNvbm5tYW4uc2VydmljZSIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICBTZXJ2aWNlcyBhcmUgc2V0IHVwIHRvIHN0YXJ0IG9uIGJvb3QgYXV0b21hdGljYWxseSB1bmxlc3MKKyAgICAgICAgeW91IGhhdmUgc2V0CisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TWVNURU1EX0FVVE9fRU5BQkxFJz48ZmlsZW5hbWU+U1lTVEVNRF9BVVRPX0VOQUJMRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB0byAiZGlzYWJsZSIuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIDxmaWxlbmFtZT5zeXN0ZW1kPC9maWxlbmFtZT4sIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NlbGVjdGluZy1hbi1pbml0aWFsaXphdGlvbi1tYW5hZ2VyJz5TZWxlY3RpbmcgYW4gSW5pdGlhbGl6YXRpb24gTWFuYWdlcjwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy10ZXJtaW5hbCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT50ZXJtaW5hbC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+dGVybWluYWw8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBzdXBwb3J0IGZvciBzdGFydGluZworICAgICAgICBhIHRlcm1pbmFsIHNlc3Npb24uCisgICAgICAgIFRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItT0VfVEVSTUlOQUwnPjxmaWxlbmFtZT5PRV9URVJNSU5BTDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZSBjb250cm9scyB3aGljaCB0ZXJtaW5hbCBlbXVsYXRvciBpcyB1c2VkIGZvciB0aGUgc2Vzc2lvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgT3RoZXIgY2xhc3NlcyB1c2UgdGhlIDxmaWxlbmFtZT50ZXJtaW5hbDwvZmlsZW5hbWU+IGNsYXNzIGFueXdoZXJlIGEKKyAgICAgICAgc2VwYXJhdGUgdGVybWluYWwgc2Vzc2lvbiBuZWVkcyB0byBiZSBzdGFydGVkLgorICAgICAgICBGb3IgZXhhbXBsZSwgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhdGNoJz48ZmlsZW5hbWU+cGF0Y2g8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MgYXNzdW1pbmcKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBVENIUkVTT0xWRSc+PGZpbGVuYW1lPlBBVENIUkVTT0xWRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBpcyBzZXQgdG8gInVzZXIiLCB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtY21sMSc+PGZpbGVuYW1lPmNtbDE8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MsIGFuZCB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZGV2c2hlbGwnPjxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcyBhbGwgdXNlIHRoZSA8ZmlsZW5hbWU+dGVybWluYWw8L2ZpbGVuYW1lPiBjbGFzcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy10ZXN0aW1hZ2UnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+dGVzdGltYWdlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT50ZXN0aW1hZ2U8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyBydW5uaW5nIGF1dG9tYXRlZAorICAgICAgICB0ZXN0cyBhZ2FpbnN0IGltYWdlcyB1c2luZyBRRU1VIGFuZCBvbiBhY3R1YWwgaGFyZHdhcmUuCisgICAgICAgIFRoZSBjbGFzcyBoYW5kbGVzIGxvYWRpbmcgdGhlIHRlc3RzIGFuZCBzdGFydGluZyB0aGUgaW1hZ2UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRvIHVzZSB0aGUgY2xhc3MsIHlvdSBuZWVkIHRvIHBlcmZvcm0gc3RlcHMgdG8gc2V0IHVwIHRoZQorICAgICAgICBlbnZpcm9ubWVudC4KKyAgICAgICAgVGhlIHRlc3RzIGFyZSBjb21tYW5kcyB0aGF0IHJ1biBvbiB0aGUgdGFyZ2V0IHN5c3RlbSBvdmVyCisgICAgICAgIDxmaWxlbmFtZT5zc2g8L2ZpbGVuYW1lPi4KKyAgICAgICAgdGhleSBhcmUgd3JpdHRlbiBpbiBQeXRob24gYW5kIG1ha2UgdXNlIG9mIHRoZQorICAgICAgICA8ZmlsZW5hbWU+dW5pdHRlc3Q8L2ZpbGVuYW1lPiBtb2R1bGUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZW5hYmxlLCBydW4sIGFuZCBjcmVhdGUgbmV3IHRlc3RzLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwZXJmb3JtaW5nLWF1dG9tYXRlZC1ydW50aW1lLXRlc3RpbmcnPlBlcmZvcm1pbmcgQXV0b21hdGVkIFJ1bnRpbWUgVGVzdGluZzwvdWxpbms+IgorICAgICAgICBzZWN0aW9uLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXRleGluZm8nPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+dGV4aW5mby5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2xhc3Mgc2hvdWxkIGJlIGluaGVyaXRlZCBieSByZWNpcGVzIHdob3NlIHVwc3RyZWFtIHBhY2thZ2VzCisgICAgICAgIGludm9rZSB0aGUgPGZpbGVuYW1lPnRleGluZm88L2ZpbGVuYW1lPiB1dGlsaXRpZXMgYXQgYnVpbGQtdGltZS4KKyAgICAgICAgTmF0aXZlIGFuZCBjcm9zcyByZWNpcGVzIGFyZSBtYWRlIHRvIHVzZSB0aGUgZHVtbXkgc2NyaXB0cyBwcm92aWRlZAorICAgICAgICBieSA8ZmlsZW5hbWU+dGV4aW5mby1kdW1teS1uYXRpdmU8L2ZpbGVuYW1lPiwgZm9yIGltcHJvdmVkIHBlcmZvcm1hbmNlLgorICAgICAgICBUYXJnZXQgYXJjaGl0ZWN0dXJlIHJlY2lwZXMgdXNlIHRoZSBnZW51aW5lCisgICAgICAgIFRleGluZm8gdXRpbGl0aWVzLgorICAgICAgICBCeSBkZWZhdWx0LCB0aGV5IHVzZSB0aGUgVGV4aW5mbyB1dGlsaXRpZXMgb24gdGhlIGhvc3Qgc3lzdGVtLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgVGV4aW5mbyByZWNpcGUgc2hpcHBlZCB3aXRoIHRoZSBidWlsZAorICAgICAgICAgICAgc3lzdGVtLCB5b3UgY2FuIHJlbW92ZSAidGV4aW5mby1uYXRpdmUiIGZyb20KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1BU1NVTUVfUFJPVklERUQnPjxmaWxlbmFtZT5BU1NVTUVfUFJPVklERUQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGFuZCBtYWtlaW5mbyBmcm9tCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0FOSVRZX1JFUVVJUkVEX1VUSUxJVElFUyc+PGZpbGVuYW1lPlNBTklUWV9SRVFVSVJFRF9VVElMSVRJRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy10aW5kZXJjbGllbnQnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+dGluZGVyY2xpZW50LmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT50aW5kZXJjbGllbnQ8L2ZpbGVuYW1lPiBjbGFzcyBzdWJtaXRzIGJ1aWxkIHJlc3VsdHMgdG8KKyAgICAgICAgYW4gZXh0ZXJuYWwgVGluZGVyYm94IGluc3RhbmNlLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFRoaXMgY2xhc3MgaXMgY3VycmVudGx5IHVubWFpbnRhaW5lZC4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXRvYXN0ZXInPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+dG9hc3Rlci5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+dG9hc3RlcjwvZmlsZW5hbWU+IGNsYXNzIGNvbGxlY3RzIGluZm9ybWF0aW9uIGFib3V0CisgICAgICAgIHBhY2thZ2VzIGFuZCBpbWFnZXMgYW5kIHNlbmRzIHRoZW0gYXMgZXZlbnRzIHRoYXQgdGhlIEJpdEJha2UKKyAgICAgICAgdXNlciBpbnRlcmZhY2UgY2FuIHJlY2VpdmUuCisgICAgICAgIFRoZSBjbGFzcyBpcyBlbmFibGVkIHdoZW4gdGhlIFRvYXN0ZXIgdXNlciBpbnRlcmZhY2UgaXMgcnVubmluZy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy10b29sY2hhaW4tc2NyaXB0cyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT50b29sY2hhaW4tc2NyaXB0cy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+dG9vbGNoYWluLXNjcmlwdHM8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyB0aGUgc2NyaXB0cworICAgICAgICB1c2VkIGZvciBzZXR0aW5nIHVwIHRoZSBlbnZpcm9ubWVudCBmb3IgaW5zdGFsbGVkIFNES3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtdHlwZWNoZWNrJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnR5cGVjaGVjay5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+dHlwZWNoZWNrPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgc3VwcG9ydCBmb3IKKyAgICAgICAgdmFsaWRhdGluZyB0aGUgdmFsdWVzIG9mIHZhcmlhYmxlcyBzZXQgYXQgdGhlIGNvbmZpZ3VyYXRpb24gbGV2ZWwKKyAgICAgICAgYWdhaW5zdCB0aGVpciBkZWZpbmVkIHR5cGVzLgorICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhbGxvd3MgeW91IHRvIGRlZmluZSB0aGUgdHlwZSBvZiBhCisgICAgICAgIHZhcmlhYmxlIHVzaW5nIHRoZSAidHlwZSIgdmFyZmxhZy4KKyAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX0ZFQVRVUkVTW3R5cGVdID0gImxpc3QiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy11Ym9vdC1jb25maWcnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+dWJvb3QtY29uZmlnLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT51Ym9vdC1jb25maWc8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBzdXBwb3J0IGZvcgorICAgICAgICBVLUJvb3QgY29uZmlndXJhdGlvbiBmb3IgYSBtYWNoaW5lLgorICAgICAgICBTcGVjaWZ5IHRoZSBtYWNoaW5lIGluIHlvdXIgcmVjaXBlIGFzIGZvbGxvd3M6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVUJPT1RfQ09ORklHID8/PSAmbHQ7ZGVmYXVsdCZndDsKKyAgICAgVUJPT1RfQ09ORklHW2Zvb10gPSAiY29uZmlnLGltYWdlcyIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICBZb3UgY2FuIGFsc28gc3BlY2lmeSB0aGUgbWFjaGluZSB1c2luZyB0aGlzIG1ldGhvZDoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBVQk9PVF9NQUNISU5FID0gImNvbmZpZyIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICBTZWUgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VQk9PVF9DT05GSUcnPjxmaWxlbmFtZT5VQk9PVF9DT05GSUc8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VQk9PVF9NQUNISU5FJz48ZmlsZW5hbWU+VUJPT1RfTUFDSElORTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZXMgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtdW5pbmF0aXZlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnVuaW5hdGl2ZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFByb3ZpZGVzIGEgbWVhbnMgb2YgcmV1c2luZyA8ZmlsZW5hbWU+bmF0aXZlL2Nyb3NzPC9maWxlbmFtZT4gb3ZlcgorICAgICAgICBtdWx0aXBsZSBkaXN0cm9zLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIEN1cnJlbnRseSwgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSA8ZmlsZW5hbWU+dW5pbmF0aXZlPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGNsYXNzIGlzIGV4cGVyaW1lbnRhbC4KKyAgICAgICAgPC9ub3RlPgorICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBjb21taXQgbWVzc2FnZQorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vY2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlL2NvbW1pdC8/aWQ9ZTY2Yzk2YWU5YzdiYTIxZWJkMDRhNDgwNzM5MGYwMDMxMjM4YTg1YSc+aGVyZTwvdWxpbms+LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXVwZGF0ZS1hbHRlcm5hdGl2ZXMnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+dXBkYXRlLWFsdGVybmF0aXZlcy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+dXBkYXRlLWFsdGVybmF0aXZlczwvZmlsZW5hbWU+IGNsYXNzIGhlbHBzIHRoZQorICAgICAgICBhbHRlcm5hdGl2ZXMgc3lzdGVtIHdoZW4gbXVsdGlwbGUgc291cmNlcyBwcm92aWRlIHRoZSBzYW1lIGNvbW1hbmQuCisgICAgICAgIFRoaXMgc2l0dWF0aW9uIG9jY3VycyB3aGVuIHNldmVyYWwgcHJvZ3JhbXMgdGhhdCBoYXZlIHRoZSBzYW1lIG9yCisgICAgICAgIHNpbWlsYXIgZnVuY3Rpb24gYXJlIGluc3RhbGxlZCB3aXRoIHRoZSBzYW1lIG5hbWUuCisgICAgICAgIEZvciBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPmFyPC9maWxlbmFtZT4gY29tbWFuZCBpcyBhdmFpbGFibGUgZnJvbSB0aGUKKyAgICAgICAgPGZpbGVuYW1lPmJ1c3lib3g8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmJpbnV0aWxzPC9maWxlbmFtZT4gYW5kCisgICAgICAgIDxmaWxlbmFtZT5lbGZ1dGlsczwvZmlsZW5hbWU+IHBhY2thZ2VzLgorICAgICAgICBUaGUgPGZpbGVuYW1lPnVwZGF0ZS1hbHRlcm5hdGl2ZXM8L2ZpbGVuYW1lPiBjbGFzcyBoYW5kbGVzCisgICAgICAgIHJlbmFtaW5nIHRoZSBiaW5hcmllcyBzbyB0aGF0IG11bHRpcGxlIHBhY2thZ2VzIGNhbiBiZSBpbnN0YWxsZWQKKyAgICAgICAgd2l0aG91dCBjb25mbGljdHMuCisgICAgICAgIFRoZSA8ZmlsZW5hbWU+YXI8L2ZpbGVuYW1lPiBjb21tYW5kIHN0aWxsIHdvcmtzIHJlZ2FyZGxlc3Mgb2Ygd2hpY2gKKyAgICAgICAgcGFja2FnZXMgYXJlIGluc3RhbGxlZCBvciBzdWJzZXF1ZW50bHkgcmVtb3ZlZC4KKyAgICAgICAgVGhlIGNsYXNzIHJlbmFtZXMgdGhlIGNvbmZsaWN0aW5nIGJpbmFyeSBpbiBlYWNoIHBhY2thZ2UgYW5kIHN5bWxpbmtzCisgICAgICAgIHRoZSBoaWdoZXN0IHByaW9yaXR5IGJpbmFyeSBkdXJpbmcgaW5zdGFsbGF0aW9uIG9yIHJlbW92YWwgb2YgcGFja2FnZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRvIHVzZSB0aGlzIGNsYXNzLCB5b3UgbmVlZCB0byBkZWZpbmUgYSBudW1iZXIgb2YgdmFyaWFibGVzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1BTFRFUk5BVElWRSc+PGZpbGVuYW1lPkFMVEVSTkFUSVZFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLUFMVEVSTkFUSVZFX0xJTktfTkFNRSc+PGZpbGVuYW1lPkFMVEVSTkFUSVZFX0xJTktfTkFNRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1BTFRFUk5BVElWRV9UQVJHRVQnPjxmaWxlbmFtZT5BTFRFUk5BVElWRV9UQVJHRVQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItQUxURVJOQVRJVkVfUFJJT1JJVFknPjxmaWxlbmFtZT5BTFRFUk5BVElWRV9QUklPUklUWTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgVGhlc2UgdmFyaWFibGVzIGxpc3QgYWx0ZXJuYXRpdmUgY29tbWFuZHMgbmVlZGVkIGJ5IGEgcGFja2FnZSwKKyAgICAgICAgcHJvdmlkZSBwYXRobmFtZXMgZm9yIGxpbmtzLCBkZWZhdWx0IGxpbmtzIGZvciB0YXJnZXRzLCBhbmQKKyAgICAgICAgc28gZm9ydGguCisgICAgICAgIEZvciBkZXRhaWxzIG9uIGhvdyB0byB1c2UgdGhpcyBjbGFzcywgc2VlIHRoZSBjb21tZW50cyBpbiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2kvcG9reS90cmVlL21ldGEvY2xhc3Nlcy91cGRhdGUtYWx0ZXJuYXRpdmVzLmJiY2xhc3MnPjxmaWxlbmFtZT51cGRhdGUtYWx0ZXJuYXRpdmVzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgIDwvcGFyYT4KKworICAgIDxub3RlPgorICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPnVwZGF0ZS1hbHRlcm5hdGl2ZXM8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgIGRpcmVjdGx5IGluIHlvdXIgcmVjaXBlcy4KKyAgICAgICAgSG93ZXZlciwgdGhpcyBjbGFzcyBzaW1wbGlmaWVzIHRoaW5ncyBpbiBtb3N0IGNhc2VzLgorICAgIDwvbm90ZT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXVwZGF0ZS1yYy5kJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnVwZGF0ZS1yYy5kLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT51cGRhdGUtcmMuZDwvZmlsZW5hbWU+IGNsYXNzIHVzZXMKKyAgICAgICAgPGZpbGVuYW1lPnVwZGF0ZS1yYy5kPC9maWxlbmFtZT4gdG8gc2FmZWx5IGluc3RhbGwgYW4KKyAgICAgICAgaW5pdGlhbGl6YXRpb24gc2NyaXB0IG9uIGJlaGFsZiBvZiB0aGUgcGFja2FnZS4KKyAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdGFrZXMgY2FyZSBvZiBkZXRhaWxzIHN1Y2ggYXMgbWFraW5nCisgICAgICAgIHN1cmUgdGhlIHNjcmlwdCBpcyBzdG9wcGVkIGJlZm9yZSBhIHBhY2thZ2UgaXMgcmVtb3ZlZCBhbmQgc3RhcnRlZCB3aGVuCisgICAgICAgIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhyZWUgdmFyaWFibGVzIGNvbnRyb2wgdGhpcyBjbGFzczoKKyAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTklUU0NSSVBUX1BBQ0tBR0VTJz5JTklUU0NSSVBUX1BBQ0tBR0VTPC9saW5rPjwvZmlsZW5hbWU+LAorICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUlOSVRTQ1JJUFRfTkFNRSc+SU5JVFNDUklQVF9OQU1FPC9saW5rPjwvZmlsZW5hbWU+IGFuZAorICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUlOSVRTQ1JJUFRfUEFSQU1TJz5JTklUU0NSSVBUX1BBUkFNUzwvbGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgU2VlIHRoZSB2YXJpYWJsZSBsaW5rcyBmb3IgZGV0YWlscy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy11c2VyYWRkJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnVzZXJhZGQuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnVzZXJhZGQ8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyB0aGUgYWRkaXRpb24gb2YgdXNlcnMKKyAgICAgICAgb3IgZ3JvdXBzIGZvciB1c2FnZSBieSB0aGUgcGFja2FnZSBvbiB0aGUgdGFyZ2V0LgorICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgcGFja2FnZXMgdGhhdCBjb250YWluIHN5c3RlbSBzZXJ2aWNlcyB0aGF0CisgICAgICAgIHNob3VsZCBiZSBydW4gdW5kZXIgdGhlaXIgb3duIHVzZXIgb3IgZ3JvdXAsIHlvdSBjYW4gdXNlIHRoaXMgY2xhc3MgdG8KKyAgICAgICAgZW5hYmxlIGNyZWF0aW9uIG9mIHRoZSB1c2VyIG9yIGdyb3VwLgorICAgICAgICBUaGUgPGZpbGVuYW1lPm1ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi91c2VyYWRkL3VzZXJhZGQtZXhhbXBsZS5iYjwvZmlsZW5hbWU+CisgICAgICAgIHJlY2lwZSBpbiB0aGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgIHByb3ZpZGVzIGEgc2ltcGxlIGV4YW1wbGUgdGhhdCBzaG93cyBob3cgdG8gYWRkIHRocmVlCisgICAgICAgIHVzZXJzIGFuZCBncm91cHMgdG8gdHdvIHBhY2thZ2VzLgorICAgICAgICBTZWUgdGhlIDxmaWxlbmFtZT51c2VyYWRkLWV4YW1wbGUuYmI8L2ZpbGVuYW1lPiByZWNpcGUgZm9yIG1vcmUKKyAgICAgICAgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGlzIGNsYXNzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnVzZXJhZGQ8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRVJBRERfUEFDS0FHRVMnPjxmaWxlbmFtZT5VU0VSQUREX1BBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUkFERF9QQVJBTSc+PGZpbGVuYW1lPlVTRVJBRERfUEFSQU08L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1HUk9VUEFERF9QQVJBTSc+PGZpbGVuYW1lPkdST1VQQUREX1BBUkFNPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUdST1VQTUVNU19QQVJBTSc+PGZpbGVuYW1lPkdST1VQTUVNU19QQVJBTTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZXMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtdXNlcmFkZC1zdGF0aWNpZHMnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+dXNlcmFkZC1zdGF0aWNpZHMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnVzZXJhZGQtc3RhdGljaWRzPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgdGhlIGFkZGl0aW9uCisgICAgICAgIG9mIHVzZXJzIG9yIGdyb3VwcyB0aGF0IGhhdmUgc3RhdGljIHVzZXIgaWRlbnRpZmljYXRpb24KKyAgICAgICAgKDxmaWxlbmFtZT51aWQ8L2ZpbGVuYW1lPikgYW5kIGdyb3VwIGlkZW50aWZpY2F0aW9uCisgICAgICAgICg8ZmlsZW5hbWU+Z2lkPC9maWxlbmFtZT4pIHZhbHVlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZm9yIGFzc2lnbmluZworICAgICAgICA8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5naWQ8L2ZpbGVuYW1lPiB2YWx1ZXMgd2hlbgorICAgICAgICBwYWNrYWdlcyBhZGQgdXNlcnMgYW5kIGdyb3VwcyBkdXJpbmcgcGFja2FnZSBpbnN0YWxsIHRpbWUgaXMgdG8KKyAgICAgICAgYWRkIHRoZW0gZHluYW1pY2FsbHkuCisgICAgICAgIFRoaXMgd29ya3MgZmluZSBmb3IgcHJvZ3JhbXMgdGhhdCBkbyBub3QgY2FyZSB3aGF0IHRoZSB2YWx1ZXMgb2YgdGhlCisgICAgICAgIHJlc3VsdGluZyB1c2VycyBhbmQgZ3JvdXBzIGJlY29tZS4KKyAgICAgICAgSW4gdGhlc2UgY2FzZXMsIHRoZSBvcmRlciBvZiB0aGUgaW5zdGFsbGF0aW9uIGRldGVybWluZXMgdGhlIGZpbmFsCisgICAgICAgIDxmaWxlbmFtZT51aWQ8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmdpZDwvZmlsZW5hbWU+IHZhbHVlcy4KKyAgICAgICAgSG93ZXZlciwgaWYgbm9uLWRldGVybWluaXN0aWMKKyAgICAgICAgPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+Z2lkPC9maWxlbmFtZT4gdmFsdWVzIGFyZSBhCisgICAgICAgIHByb2JsZW0sIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQsIGR5bmFtaWMgYXBwbGljYXRpb24gb2YgdGhlc2UKKyAgICAgICAgdmFsdWVzIGJ5IHNldHRpbmcgc3RhdGljIHZhbHVlcy4KKyAgICAgICAgV2hlbiB5b3Ugc2V0IHN0YXRpYyB2YWx1ZXMsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGxvb2tzIGluCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4gZm9yCisgICAgICAgIDxmaWxlbmFtZT5maWxlcy9wYXNzd2Q8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmZpbGVzL2dyb3VwPC9maWxlbmFtZT4KKyAgICAgICAgZmlsZXMgZm9yIHRoZSB2YWx1ZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRvIHVzZSBzdGF0aWMgPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+Z2lkPC9maWxlbmFtZT4KKyAgICAgICAgdmFsdWVzLCB5b3UgbmVlZCB0byBzZXQgc29tZSB2YXJpYWJsZXMuCisgICAgICAgIFNlZSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRVJBRERFWFRFTlNJT04nPjxmaWxlbmFtZT5VU0VSQURERVhURU5TSU9OPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUkFERF9VSURfVEFCTEVTJz48ZmlsZW5hbWU+VVNFUkFERF9VSURfVEFCTEVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUkFERF9HSURfVEFCTEVTJz48ZmlsZW5hbWU+VVNFUkFERF9HSURfVEFCTEVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRVJBRERfRVJST1JfRFlOQU1JQyc+PGZpbGVuYW1lPlVTRVJBRERfRVJST1JfRFlOQU1JQzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgIFlvdSBjYW4gYWxzbyBzZWUgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXVzZXJhZGQnPjxmaWxlbmFtZT51c2VyYWRkPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxub3RlPjx0aXRsZT5Ob3RlczwvdGl0bGU+CisgICAgICAgIFlvdSBkbyBub3QgdXNlIHRoaXMgY2xhc3MgZGlyZWN0bHkuCisgICAgICAgIFlvdSBlaXRoZXIgZW5hYmxlIG9yIGRpc2FibGUgdGhlIGNsYXNzIGJ5IHNldHRpbmcgdGhlCisgICAgICAgIDxmaWxlbmFtZT5VU0VSQURERVhURU5TSU9OPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgIElmIHlvdSBlbmFibGUgb3IgZGlzYWJsZSB0aGUgY2xhc3MgaW4gYSBjb25maWd1cmVkIHN5c3RlbSwKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBtaWdodCBjb250YWluIGluY29ycmVjdCA8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4gYW5kCisgICAgICAgIDxmaWxlbmFtZT5naWQ8L2ZpbGVuYW1lPiB2YWx1ZXMuCisgICAgICAgIERlbGV0aW5nIHRoZSA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4gZGlyZWN0b3J5CisgICAgICAgIHdpbGwgY29ycmVjdCB0aGlzIGNvbmRpdGlvbi4KKyAgICA8L25vdGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy11dGlsaXR5LXRhc2tzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnV0aWxpdHktdGFza3MuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnV0aWxpdHktdGFza3M8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBzdXBwb3J0IGZvcgorICAgICAgICB2YXJpb3VzICJ1dGlsaXR5IiB0eXBlIHRhc2tzIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gYWxsIHJlY2lwZXMsCisgICAgICAgIHN1Y2ggYXMKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNsZWFuJz48ZmlsZW5hbWU+ZG9fY2xlYW48L2ZpbGVuYW1lPjwvbGluaz4gYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1saXN0dGFza3MnPjxmaWxlbmFtZT5kb19saXN0dGFza3M8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2xhc3MgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGJlY2F1c2UgaXQgaXMgaW5oZXJpdGVkIGJ5CisgICAgICAgIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1iYXNlJz48ZmlsZW5hbWU+YmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy11dGlscyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT51dGlscy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+dXRpbHM8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBzb21lIHVzZWZ1bCBQeXRob24KKyAgICAgICAgZnVuY3Rpb25zIHRoYXQgYXJlIHR5cGljYWxseSB1c2VkIGluIGlubGluZSBQeXRob24gZXhwcmVzc2lvbnMKKyAgICAgICAgKGUuZy4gPGZpbGVuYW1lPiR7QC4uLn08L2ZpbGVuYW1lPikuCisgICAgICAgIE9uZSBleGFtcGxlIHVzZSBpcyBmb3IgPGZpbGVuYW1lPmJiLnV0aWxzLmNvbnRhaW5zKCk8L2ZpbGVuYW1lPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjbGFzcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYmVjYXVzZSBpdCBpcyBpbmhlcml0ZWQgYnkgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJhc2UnPjxmaWxlbmFtZT5iYXNlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXZhbGEnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+dmFsYS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+dmFsYTwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIHJlY2lwZXMgdGhhdCBuZWVkIHRvCisgICAgICAgIGJ1aWxkIHNvZnR3YXJlIHdyaXR0ZW4gdXNpbmcgdGhlIFZhbGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtd2FmJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPndhZi5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+d2FmPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgcmVjaXBlcyB0aGF0IG5lZWQgdG8gYnVpbGQKKyAgICAgICAgc29mdHdhcmUgdGhhdCB1c2VzIHRoZSBXYWYgYnVpbGQgc3lzdGVtLgorICAgICAgICBZb3UgY2FuIHVzZSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FQ09ORic+PGZpbGVuYW1lPkVYVFJBX09FQ09ORjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZSB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGJlIHBhc3NlZCBvbgorICAgICAgICB0aGUgV2FmIGNvbW1hbmQgbGluZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzwhLS0gVW5kb2N1bWVudGVkIGNsYXNzZXMgYXJlOgorICAgICAgICBpbWFnZS1lbXB0eS5iYmNsYXNzIChwb3NzaWJseSBiZWluZyBkcm9wcGVkKQorICAgICAgICBtaWdyYXRlX2xvY2FsY291bnQuYmJjbGFzcyAoc3RpbGwgbmVlZCBhIGRlc2NyaXB0aW9uKQorLS0+CisKKworPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtZmVhdHVyZXMueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWZlYXR1cmVzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OThlMGEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWZlYXR1cmVzLnhtbApAQCAtMCwwICsxLDQ0MyBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J3JlZi1mZWF0dXJlcyc+CisgICAgPHRpdGxlPkZlYXR1cmVzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNoYXB0ZXIgcHJvdmlkZXMgYSByZWZlcmVuY2Ugb2Ygc2hpcHBlZCBtYWNoaW5lIGFuZCBkaXN0cm8gZmVhdHVyZXMKKyAgICAgICAgeW91IGNhbiBpbmNsdWRlIGFzIHBhcnQgb2YgeW91ciBpbWFnZSwgYSByZWZlcmVuY2Ugb24gaW1hZ2UgZmVhdHVyZXMgeW91IGNhbgorICAgICAgICBzZWxlY3QsIGFuZCBhIHJlZmVyZW5jZSBvbiBmZWF0dXJlIGJhY2tmaWxsaW5nLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGZWF0dXJlcyBwcm92aWRlIGEgbWVjaGFuaXNtIGZvciB3b3JraW5nIG91dCB3aGljaCBwYWNrYWdlcworICAgICAgICBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIGdlbmVyYXRlZCBpbWFnZXMuCisgICAgICAgIERpc3RyaWJ1dGlvbnMgY2FuIHNlbGVjdCB3aGljaCBmZWF0dXJlcyB0aGV5IHdhbnQgdG8gc3VwcG9ydCB0aHJvdWdoIHRoZQorICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+RElTVFJPX0ZFQVRVUkVTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgIHZhcmlhYmxlLCB3aGljaCBpcyBzZXQgb3IgYXBwZW5kZWQgdG8gaW4gYSBkaXN0cmlidXRpb24ncyBjb25maWd1cmF0aW9uIGZpbGUgc3VjaCBhcworICAgICAgICA8ZmlsZW5hbWU+cG9reS5jb25mPC9maWxlbmFtZT4sCisgICAgICAgIDxmaWxlbmFtZT5wb2t5LXRpbnkuY29uZjwvZmlsZW5hbWU+LAorICAgICAgICA8ZmlsZW5hbWU+cG9reS1sc2IuY29uZjwvZmlsZW5hbWU+IGFuZCBzbyBmb3J0aC4KKyAgICAgICAgTWFjaGluZSBmZWF0dXJlcyBhcmUgc2V0IGluIHRoZQorICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVMnPk1BQ0hJTkVfRkVBVFVSRVM8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgdmFyaWFibGUsIHdoaWNoIGlzIHNldCBpbiB0aGUgbWFjaGluZSBjb25maWd1cmF0aW9uIGZpbGUgYW5kCisgICAgICAgIHNwZWNpZmllcyB0aGUgaGFyZHdhcmUgZmVhdHVyZXMgZm9yIGEgZ2l2ZW4gbWFjaGluZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlc2UgdHdvIHZhcmlhYmxlcyBjb21iaW5lIHRvIHdvcmsgb3V0IHdoaWNoIGtlcm5lbCBtb2R1bGVzLAorICAgICAgICB1dGlsaXRpZXMsIGFuZCBvdGhlciBwYWNrYWdlcyB0byBpbmNsdWRlLgorICAgICAgICBBIGdpdmVuIGRpc3RyaWJ1dGlvbiBjYW4gc3VwcG9ydCBhIHNlbGVjdGVkIHN1YnNldCBvZiBmZWF0dXJlcyBzbyBzb21lIG1hY2hpbmUgZmVhdHVyZXMgbWlnaHQgbm90CisgICAgICAgIGJlIGluY2x1ZGVkIGlmIHRoZSBkaXN0cmlidXRpb24gaXRzZWxmIGRvZXMgbm90IHN1cHBvcnQgdGhlbS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgT25lIG1ldGhvZCB5b3UgY2FuIHVzZSB0byBkZXRlcm1pbmUgd2hpY2ggcmVjaXBlcyBhcmUgY2hlY2tpbmcgdG8gc2VlIGlmIGEKKyAgICAgICAgcGFydGljdWxhciBmZWF0dXJlIGlzIGNvbnRhaW5lZCBvciBub3QgaXMgdG8gPGZpbGVuYW1lPmdyZXA8L2ZpbGVuYW1lPiB0aHJvdWdoCisgICAgICAgIHRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPgorICAgICAgICBmb3IgdGhlIGZlYXR1cmUuCisgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGRpc2NvdmVycyB0aGUgcmVjaXBlcyB3aG9zZSBidWlsZCBpcyBwb3RlbnRpYWxseQorICAgICAgICBjaGFuZ2VkIGJhc2VkIG9uIGEgZ2l2ZW4gZmVhdHVyZToKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIHBva3kKKyAgICAgJCBnaXQgZ3JlcCAnY29udGFpbnMuKk1BQ0hJTkVfRkVBVFVSRVMuKjxyZXBsYWNlYWJsZT5mZWF0dXJlPC9yZXBsYWNlYWJsZT4nCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLWZlYXR1cmVzLW1hY2hpbmUnPgorICAgICAgICA8dGl0bGU+TWFjaGluZSBGZWF0dXJlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgaXRlbXMgYmVsb3cgYXJlIGZlYXR1cmVzIHlvdSBjYW4gdXNlIHdpdGgKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0ZFQVRVUkVTJz48ZmlsZW5hbWU+TUFDSElORV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgIEZlYXR1cmVzIGRvIG5vdCBoYXZlIGEgb25lLXRvLW9uZSBjb3JyZXNwb25kZW5jZSB0byBwYWNrYWdlcywgYW5kIHRoZXkgY2FuCisgICAgICAgICAgICBnbyBiZXlvbmQgc2ltcGx5IGNvbnRyb2xsaW5nIHRoZSBpbnN0YWxsYXRpb24gb2YgYSBwYWNrYWdlIG9yIHBhY2thZ2VzLgorICAgICAgICAgICAgU29tZXRpbWVzIGEgZmVhdHVyZSBjYW4gaW5mbHVlbmNlIGhvdyBjZXJ0YWluIHJlY2lwZXMgYXJlIGJ1aWx0LgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgZmVhdHVyZSBtaWdodCBkZXRlcm1pbmUgd2hldGhlciBhIHBhcnRpY3VsYXIgY29uZmlndXJlIG9wdGlvbgorICAgICAgICAgICAgaXMgc3BlY2lmaWVkIHdpdGhpbiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHRhc2sgZm9yIGEgcGFydGljdWxhciByZWNpcGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZmVhdHVyZSBsaXN0IG9ubHkgcmVwcmVzZW50cyBmZWF0dXJlcyBhcyBzaGlwcGVkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgbWV0YWRhdGE6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+YWNwaTo8L2VtcGhhc2lzPiBIYXJkd2FyZSBoYXMgQUNQSSAoeDg2L3g4Nl82NCBvbmx5KQorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmFsc2E6PC9lbXBoYXNpcz4gSGFyZHdhcmUgaGFzIEFMU0EgYXVkaW8gZHJpdmVycworICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmFwbTo8L2VtcGhhc2lzPiBIYXJkd2FyZSB1c2VzIEFQTSAob3IgQVBNIGVtdWxhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5ibHVldG9vdGg6PC9lbXBoYXNpcz4gSGFyZHdhcmUgaGFzIGludGVncmF0ZWQgQlQKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5lZmk6PC9lbXBoYXNpcz4gU3VwcG9ydCBmb3IgYm9vdGluZyB0aHJvdWdoIEVGSQorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmV4dDI6PC9lbXBoYXNpcz4gSGFyZHdhcmUgSEREIG9yIE1pY3JvZHJpdmUKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5pcmRhOjwvZW1waGFzaXM+IEhhcmR3YXJlIGhhcyBJckRBIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5rZXlib2FyZDo8L2VtcGhhc2lzPiBIYXJkd2FyZSBoYXMgYSBrZXlib2FyZAorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnBjYmlvczo8L2VtcGhhc2lzPiBTdXBwb3J0IGZvciBib290aW5nIHRocm91Z2ggQklPUworICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnBjaTo8L2VtcGhhc2lzPiBIYXJkd2FyZSBoYXMgYSBQQ0kgYnVzCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cGNtY2lhOjwvZW1waGFzaXM+IEhhcmR3YXJlIGhhcyBQQ01DSUEgb3IgQ29tcGFjdEZsYXNoIHNvY2tldHMKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5waG9uZTo8L2VtcGhhc2lzPiBNb2JpbGUgcGhvbmUgKHZvaWNlKSBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cXZnYTo8L2VtcGhhc2lzPiBNYWNoaW5lIGhhcyBhIFFWR0EgKDMyMHgyNDApIGRpc3BsYXkKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5ydGM6PC9lbXBoYXNpcz4gTWFjaGluZSBoYXMgYSBSZWFsLVRpbWUgQ2xvY2sKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5zY3JlZW46PC9lbXBoYXNpcz4gSGFyZHdhcmUgaGFzIGEgc2NyZWVuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+c2VyaWFsOjwvZW1waGFzaXM+IEhhcmR3YXJlIGhhcyBzZXJpYWwgc3VwcG9ydCAodXN1YWxseSBSUzIzMikKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz50b3VjaHNjcmVlbjo8L2VtcGhhc2lzPiBIYXJkd2FyZSBoYXMgYSB0b3VjaHNjcmVlbgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnVzYmdhZGdldDo8L2VtcGhhc2lzPiBIYXJkd2FyZSBpcyBVU0IgZ2FkZ2V0IGRldmljZSBjYXBhYmxlCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dXNiaG9zdDo8L2VtcGhhc2lzPiBIYXJkd2FyZSBpcyBVU0IgSG9zdCBjYXBhYmxlCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dmZhdDo8L2VtcGhhc2lzPiBGQVQgZmlsZSBzeXN0ZW0gc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPndpZmk6PC9lbXBoYXNpcz4gSGFyZHdhcmUgaGFzIGludGVncmF0ZWQgV2lGaQorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi1mZWF0dXJlcy1kaXN0cm8nPgorICAgICAgICA8dGl0bGU+RGlzdHJvIEZlYXR1cmVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBpdGVtcyBiZWxvdyBhcmUgZmVhdHVyZXMgeW91IGNhbiB1c2Ugd2l0aAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdG8gZW5hYmxlIGZlYXR1cmVzIGFjcm9zcyB5b3VyIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgIEZlYXR1cmVzIGRvIG5vdCBoYXZlIGEgb25lLXRvLW9uZSBjb3JyZXNwb25kZW5jZSB0byBwYWNrYWdlcywKKyAgICAgICAgICAgIGFuZCB0aGV5IGNhbiBnbyBiZXlvbmQgc2ltcGx5IGNvbnRyb2xsaW5nIHRoZSBpbnN0YWxsYXRpb24gb2YgYQorICAgICAgICAgICAgcGFja2FnZSBvciBwYWNrYWdlcy4KKyAgICAgICAgICAgIEluIG1vc3QgY2FzZXMsIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIGEgZmVhdHVyZSB0cmFuc2xhdGVzIHRvCisgICAgICAgICAgICB0aGUgYXBwcm9wcmlhdGUgb3B0aW9uIHN1cHBsaWVkIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0IGR1cmluZyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHRhc2sgZm9yIHRoZSByZWNpcGVzIHRoYXQgb3B0aW9uYWxseQorICAgICAgICAgICAgc3VwcG9ydCB0aGUgZmVhdHVyZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU29tZSBkaXN0cm8gZmVhdHVyZXMgYXJlIGFsc28gbWFjaGluZSBmZWF0dXJlcy4KKyAgICAgICAgICAgIFRoZXNlIHNlbGVjdCBmZWF0dXJlcyBtYWtlIHNlbnNlIHRvIGJlIGNvbnRyb2xsZWQgYm90aCBhdAorICAgICAgICAgICAgdGhlIG1hY2hpbmUgYW5kIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGxldmVsLgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNPTUJJTkVEX0ZFQVRVUkVTJz48ZmlsZW5hbWU+Q09NQklORURfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBsaXN0IG9ubHkgcmVwcmVzZW50cyBmZWF0dXJlcyBhcyBzaGlwcGVkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgbWV0YWRhdGE6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+YWxzYTo8L2VtcGhhc2lzPiBJbmNsdWRlIEFMU0Egc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICAoT1NTIGNvbXBhdGliaWxpdHkga2VybmVsIG1vZHVsZXMgaW5zdGFsbGVkIGlmIGF2YWlsYWJsZSkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ymx1ZXRvb3RoOjwvZW1waGFzaXM+IEluY2x1ZGUKKyAgICAgICAgICAgICAgICAgICAgYmx1ZXRvb3RoIHN1cHBvcnQgKGludGVncmF0ZWQgQlQgb25seSkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5jcmFtZnM6PC9lbXBoYXNpcz4gSW5jbHVkZSBDcmFtRlMKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmRpcmVjdGZiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluY2x1ZGUgRGlyZWN0RkIgc3VwcG9ydC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5leHQyOjwvZW1waGFzaXM+IEluY2x1ZGUgdG9vbHMgZm9yCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRpbmcgZm9yIGRldmljZXMgd2l0aCBpbnRlcm5hbCBIREQvTWljcm9kcml2ZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgc3RvcmluZyBmaWxlcyAoaW5zdGVhZCBvZiBGbGFzaCBvbmx5IGRldmljZXMpLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmlwc2VjOjwvZW1waGFzaXM+IEluY2x1ZGUgSVBTZWMKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmlwdjY6PC9lbXBoYXNpcz4gSW5jbHVkZSBJUHY2IHN1cHBvcnQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+aXJkYTo8L2VtcGhhc2lzPiBJbmNsdWRlIElyREEgc3VwcG9ydC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5rZXlib2FyZDo8L2VtcGhhc2lzPiBJbmNsdWRlIGtleWJvYXJkCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgKGUuZy4ga2V5bWFwcyB3aWxsIGJlIGxvYWRlZCBkdXJpbmcgYm9vdCkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+bmZzOjwvZW1waGFzaXM+IEluY2x1ZGUgTkZTIGNsaWVudAorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IChmb3IgbW91bnRpbmcgTkZTIGV4cG9ydHMgb24gZGV2aWNlKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5vcGVuZ2w6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW5jbHVkZSB0aGUgT3BlbiBHcmFwaGljcyBMaWJyYXJ5LCB3aGljaCBpcyBhCisgICAgICAgICAgICAgICAgICAgIGNyb3NzLWxhbmd1YWdlLCBtdWx0aS1wbGF0Zm9ybSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZworICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgdXNlZCBmb3IgcmVuZGVyaW5nIHR3byBhbmQgdGhyZWUtZGltZW5zaW9uYWwKKyAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3MuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wY2k6PC9lbXBoYXNpcz4gSW5jbHVkZSBQQ0kgYnVzCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wY21jaWE6PC9lbXBoYXNpcz4gSW5jbHVkZQorICAgICAgICAgICAgICAgICAgICBQQ01DSUEvQ29tcGFjdEZsYXNoIHN1cHBvcnQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wcHA6PC9lbXBoYXNpcz4gSW5jbHVkZSBQUFAgZGlhbHVwCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wdGVzdDo8L2VtcGhhc2lzPiBFbmFibGVzIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSBwYWNrYWdlIHRlc3RzIHdoZXJlIHN1cHBvcnRlZCBieSBpbmRpdmlkdWFsIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhY2thZ2UgdGVzdHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3Rlc3RpbmctcGFja2FnZXMtd2l0aC1wdGVzdCc+VGVzdGluZyBQYWNrYWdlcyBXaXRoIHB0ZXN0PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnNtYmZzOjwvZW1waGFzaXM+IEluY2x1ZGUgU01CIG5ldHdvcmtzCisgICAgICAgICAgICAgICAgICAgIGNsaWVudCBzdXBwb3J0IChmb3IgbW91bnRpbmcgU2FtYmEvTWljcm9zb2Z0IFdpbmRvd3Mgc2hhcmVzCisgICAgICAgICAgICAgICAgICAgIG9uIGRldmljZSkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5zeXN0ZW1kOjwvZW1waGFzaXM+IEluY2x1ZGUgc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICBmb3IgdGhpcyA8ZmlsZW5hbWU+aW5pdDwvZmlsZW5hbWU+IG1hbmFnZXIsIHdoaWNoIGlzIGEgZnVsbAorICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudCBvZiBmb3IgPGZpbGVuYW1lPmluaXQ8L2ZpbGVuYW1lPiB3aXRoIHBhcmFsbGVsCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0aW5nIG9mIHNlcnZpY2VzLCByZWR1Y2VkIHNoZWxsIG92ZXJoZWFkLCBhbmQgb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgPGZpbGVuYW1lPmluaXQ8L2ZpbGVuYW1lPiBtYW5hZ2VyIGlzIHVzZWQgYnkgbWFueQorICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25zLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dXNiZ2FkZ2V0OjwvZW1waGFzaXM+IEluY2x1ZGUgVVNCCisgICAgICAgICAgICAgICAgICAgIEdhZGdldCBEZXZpY2Ugc3VwcG9ydCAoZm9yIFVTQiBuZXR3b3JraW5nL3NlcmlhbC9zdG9yYWdlKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz51c2Job3N0OjwvZW1waGFzaXM+IEluY2x1ZGUgVVNCIEhvc3QKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCAoYWxsb3dzIHRvIGNvbm5lY3QgZXh0ZXJuYWwga2V5Ym9hcmQsIG1vdXNlLAorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLCBuZXR3b3JrIGV0YykuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz53YXlsYW5kOjwvZW1waGFzaXM+IEluY2x1ZGUgdGhlCisgICAgICAgICAgICAgICAgICAgIFdheWxhbmQgZGlzcGxheSBzZXJ2ZXIgcHJvdG9jb2wgYW5kIHRoZSBsaWJyYXJ5IHRoYXQKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydHMgaXQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz53aWZpOjwvZW1waGFzaXM+IEluY2x1ZGUgV2lGaSBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgIChpbnRlZ3JhdGVkIG9ubHkpLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+eDExOjwvZW1waGFzaXM+IEluY2x1ZGUgdGhlIFggc2VydmVyCisgICAgICAgICAgICAgICAgICAgIGFuZCBsaWJyYXJpZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtZmVhdHVyZXMtaW1hZ2UnPgorICAgICAgICA8dGl0bGU+SW1hZ2UgRmVhdHVyZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGNvbnRlbnRzIG9mIGltYWdlcyBnZW5lcmF0ZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgIGNhbiBiZSBjb250cm9sbGVkIGJ5IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX0lNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlcyB0aGF0IHlvdSB0eXBpY2FsbHkgY29uZmlndXJlIGluIHlvdXIgaW1hZ2UgcmVjaXBlcy4KKyAgICAgICAgICAgIFRocm91Z2ggdGhlc2UgdmFyaWFibGVzLCB5b3UgY2FuIGFkZCBzZXZlcmFsIGRpZmZlcmVudAorICAgICAgICAgICAgcHJlZGVmaW5lZCBwYWNrYWdlcyBzdWNoIGFzIGRldmVsb3BtZW50IHV0aWxpdGllcyBvciBwYWNrYWdlcyB3aXRoCisgICAgICAgICAgICBkZWJ1ZyBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gaW52ZXN0aWdhdGUgYXBwbGljYXRpb24gcHJvYmxlbXMgb3IKKyAgICAgICAgICAgIHByb2ZpbGUgYXBwbGljYXRpb25zLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGltYWdlIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUgZm9yIGFsbCBpbWFnZXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+YWxsb3ctZW1wdHktcGFzc3dvcmQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQWxsb3dzIERyb3BiZWFyIGFuZCBPcGVuU1NIIHRvIGFjY2VwdCByb290IGxvZ2lucworICAgICAgICAgICAgICAgICAgICBhbmQgbG9naW5zIGZyb20gYWNjb3VudHMgaGF2aW5nIGFuIGVtcHR5IHBhc3N3b3JkIHN0cmluZy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5kYmctcGtnczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbnN0YWxscyBkZWJ1ZyBzeW1ib2wgcGFja2FnZXMgZm9yIGFsbCBwYWNrYWdlcyBpbnN0YWxsZWQKKyAgICAgICAgICAgICAgICAgICAgaW4gYSBnaXZlbiBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5kZWJ1Zy10d2Vha3M6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTWFrZXMgYW4gaW1hZ2Ugc3VpdGFibGUgZm9yIGRldmVsb3BtZW50IChlLmcuCisgICAgICAgICAgICAgICAgICAgIGFsbG93cyByb290IGxvZ2lucyB3aXRob3V0IHBhc3N3b3JkcyBhbmQgZW5hYmxlcworICAgICAgICAgICAgICAgICAgICBwb3N0LWluc3RhbGxhdGlvbiBsb2dnaW5nKS4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAnYWxsb3ctZW1wdHktcGFzc3dvcmQnLCAnZW1wdHktcm9vdC1wYXNzd29yZCcsCisgICAgICAgICAgICAgICAgICAgIGFuZCAncG9zdC1pbnN0YWxsLWxvZ2dpbmcnIGZlYXR1cmVzIGluIHRoaXMgbGlzdCBmb3IKKyAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5kZXYtcGtnczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbnN0YWxscyBkZXZlbG9wbWVudCBwYWNrYWdlcyAoaGVhZGVycyBhbmQgZXh0cmEgbGlicmFyeQorICAgICAgICAgICAgICAgICAgICBsaW5rcykgZm9yIGFsbCBwYWNrYWdlcyBpbnN0YWxsZWQgaW4gYSBnaXZlbiBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5kb2MtcGtnczo8L2VtcGhhc2lzPiBJbnN0YWxscworICAgICAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uIHBhY2thZ2VzIGZvciBhbGwgcGFja2FnZXMgaW5zdGFsbGVkIGluIGEKKyAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ZW1wdHktcm9vdC1wYXNzd29yZDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBTZXRzIHRoZSByb290IHBhc3N3b3JkIHRvIGFuIGVtcHR5IHN0cmluZywgd2hpY2ggYWxsb3dzCisgICAgICAgICAgICAgICAgICAgIGxvZ2lucyB3aXRoIGEgYmxhbmsgcGFzc3dvcmQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cGFja2FnZS1tYW5hZ2VtZW50OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluc3RhbGxzIHBhY2thZ2UgbWFuYWdlbWVudCB0b29scyBhbmQgcHJlc2VydmVzIHRoZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIG1hbmFnZXIgZGF0YWJhc2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cG9zdC1pbnN0YWxsLWxvZ2dpbmc6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRW5hYmxlcyBsb2dnaW5nIHBvc3RpbnN0YWxsIHNjcmlwdCBydW5zIHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+L3Zhci9sb2cvcG9zdGluc3RhbGwubG9nPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICBvbiBmaXJzdCBib290IG9mIHRoZSBpbWFnZSBvbiB0aGUgdGFyZ2V0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wdGVzdC1wa2dzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluc3RhbGxzIHB0ZXN0IHBhY2thZ2VzIGZvciBhbGwgcHRlc3QtZW5hYmxlZCByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnJlYWQtb25seS1yb290ZnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlcyBhbiBpbWFnZSB3aG9zZSByb290IGZpbGVzeXN0ZW0gaXMgcmVhZC1vbmx5LgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1hLXJlYWQtb25seS1yb290LWZpbGVzeXN0ZW0nPkNyZWF0aW5nIGEgUmVhZC1Pbmx5IFJvb3QgRmlsZXN5c3RlbTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IgbW9yZQorICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5zcGxhc2g6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRW5hYmxlcyBzaG93aW5nIGEgc3BsYXNoIHNjcmVlbiBkdXJpbmcgYm9vdC4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyBzY3JlZW4gaXMgcHJvdmlkZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBzcGxhc2g8L2ZpbGVuYW1lPiwgd2hpY2ggZG9lcyBhbGxvdworICAgICAgICAgICAgICAgICAgICBjdXN0b21pemF0aW9uLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgcHJlZmVyIHRvIHVzZSBhbiBhbHRlcm5hdGl2ZSBzcGxhc2ggc2NyZWVuIHBhY2thZ2UsCisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gZG8gc28gYnkgc2V0dGluZyB0aGUgPGZpbGVuYW1lPlNQTEFTSDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGEgZGlmZmVyZW50IHBhY2thZ2UgbmFtZSAob3IgbmFtZXMpIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UgcmVjaXBlIG9yIGF0IHRoZSBkaXN0cm8gY29uZmlndXJhdGlvbiBsZXZlbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5zdGF0aWNkZXYtcGtnczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbnN0YWxscyBzdGF0aWMgZGV2ZWxvcG1lbnQgcGFja2FnZXMsIHdoaWNoIGFyZQorICAgICAgICAgICAgICAgICAgICBzdGF0aWMgbGlicmFyaWVzIChpLmUuIDxmaWxlbmFtZT4qLmE8L2ZpbGVuYW1lPiBmaWxlcyksIGZvcgorICAgICAgICAgICAgICAgICAgICBhbGwgcGFja2FnZXMgaW5zdGFsbGVkIGluIGEgZ2l2ZW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNvbWUgaW1hZ2UgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBvbmx5IHdoZW4geW91IGluaGVyaXQgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1jb3JlLWltYWdlJz48ZmlsZW5hbWU+Y29yZS1pbWFnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICBUaGUgY3VycmVudCBsaXN0IG9mIHRoZXNlIHZhbGlkIGZlYXR1cmVzIGlzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ZWNsaXBzZS1kZWJ1Zzo8L2VtcGhhc2lzPiBQcm92aWRlcworICAgICAgICAgICAgICAgICAgICBFY2xpcHNlIHJlbW90ZSBkZWJ1Z2dpbmcgc3VwcG9ydC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5od2NvZGVjczo8L2VtcGhhc2lzPiBJbnN0YWxscworICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZSBhY2NlbGVyYXRpb24gY29kZWNzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPm5mcy1zZXJ2ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGFsbHMgYW4gTkZTIHNlcnZlci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5xdDQtcGtnczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBTdXBwb3J0cyBRdDQvWDExIGFuZCBkZW1vIGFwcGxpY2F0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5zc2gtc2VydmVyLWRyb3BiZWFyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluc3RhbGxzIHRoZSBEcm9wYmVhciBtaW5pbWFsIFNTSCBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+c3NoLXNlcnZlci1vcGVuc3NoOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluc3RhbGxzIHRoZSBPcGVuU1NIIFNTSCBzZXJ2ZXIsIHdoaWNoIGlzIG1vcmUKKyAgICAgICAgICAgICAgICAgICAgZnVsbC1mZWF0dXJlZCB0aGFuIERyb3BiZWFyLgorICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgaWYgYm90aCB0aGUgT3BlblNTSCBTU0ggc2VydmVyIGFuZCB0aGUgRHJvcGJlYXIKKyAgICAgICAgICAgICAgICAgICAgbWluaW1hbCBTU0ggc2VydmVyIGFyZSBwcmVzZW50IGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+LCB0aGVuIE9wZW5TU0ggd2lsbCB0YWtlCisgICAgICAgICAgICAgICAgICAgIHByZWNlZGVuY2UgYW5kIERyb3BiZWFyIHdpbGwgbm90IGJlIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz50b29scy1kZWJ1Zzo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbnN0YWxscyBkZWJ1Z2dpbmcgdG9vbHMgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3RyYWNlPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5nZGI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIEdEQiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGxhdGRldi1nZGItcmVtb3RlZGVidWcnPkRlYnVnZ2luZyBXaXRoIHRoZSBHTlUgUHJvamVjdCBEZWJ1Z2dlciAoR0RCKSBSZW1vdGVseTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRyYWNpbmcgYW5kIHByb2ZpbGluZywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19QUk9GX1VSTDsnPllvY3RvIFByb2plY3QgUHJvZmlsaW5nIGFuZCBUcmFjaW5nIE1hbnVhbDwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnRvb2xzLXByb2ZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGFsbHMgcHJvZmlsaW5nIHRvb2xzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9wcm9maWxlPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5leG1hcDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPkxUVG5nPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIHVzZXItc3BhY2UgdG9vbHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I3VzZXItc3BhY2UtdG9vbHMnPlVzZXItU3BhY2UgVG9vbHM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncworICAgICAgICAgICAgICAgICAgICBHdWlkZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz50b29scy1zZGs6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGFsbHMgYSBmdWxsIFNESyB0aGF0IHJ1bnMgb24gdGhlIGRldmljZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz50b29scy10ZXN0YXBwczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbnN0YWxscyBkZXZpY2UgdGVzdGluZyB0b29scyAoZS5nLiB0b3VjaHNjcmVlbiBkZWJ1Z2dpbmcpLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPngxMTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbnN0YWxscyB0aGUgWCBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+eDExLWJhc2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGFsbHMgdGhlIFggc2VydmVyIHdpdGggYSBtaW5pbWFsIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPngxMS1zYXRvOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluc3RhbGxzIHRoZSBPcGVuZWRIYW5kIFNhdG8gZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtZmVhdHVyZXMtYmFja2ZpbGwnPgorICAgICAgICA8dGl0bGU+RmVhdHVyZSBCYWNrZmlsbGluZzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTb21ldGltZXMgaXQgaXMgbmVjZXNzYXJ5IGluIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGV4dGVuZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVMnPjxmaWxlbmFtZT5NQUNISU5FX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBvciA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB0byBjb250cm9sIGZ1bmN0aW9uYWxpdHkgdGhhdCB3YXMgcHJldmlvdXNseSBlbmFibGVkIGFuZCBub3QgYWJsZQorICAgICAgICAgICAgdG8gYmUgZGlzYWJsZWQuCisgICAgICAgICAgICBGb3IgdGhlc2UgY2FzZXMsIHdlIG5lZWQgdG8gYWRkIGFuCisgICAgICAgICAgICBhZGRpdGlvbmFsIGZlYXR1cmUgaXRlbSB0byBhcHBlYXIgaW4gb25lIG9mIHRoZXNlIHZhcmlhYmxlcywKKyAgICAgICAgICAgIGJ1dCB3ZSBkbyBub3Qgd2FudCB0byBmb3JjZSBkZXZlbG9wZXJzIHdobyBoYXZlIGV4aXN0aW5nIHZhbHVlcworICAgICAgICAgICAgb2YgdGhlIHZhcmlhYmxlcyBpbiB0aGVpciBjb25maWd1cmF0aW9uIHRvIGFkZCB0aGUgbmV3IGZlYXR1cmUKKyAgICAgICAgICAgIGluIG9yZGVyIHRvIHJldGFpbiB0aGUgc2FtZSBvdmVyYWxsIGxldmVsIG9mIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgICAgICBUaHVzLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgYSBtZWNoYW5pc20gdG8KKyAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgImJhY2tmaWxsIiB0aGVzZSBhZGRlZCBmZWF0dXJlcyBpbnRvIGV4aXN0aW5nCisgICAgICAgICAgICBkaXN0cm8gb3IgbWFjaGluZSBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgIFlvdSBjYW4gc2VlIHRoZSBsaXN0IG9mIGZlYXR1cmVzIGZvciB3aGljaCB0aGlzIGlzIGRvbmUgYnkKKyAgICAgICAgICAgIGZpbmRpbmcgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBhbmQgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTEwnPjxmaWxlbmFtZT5NQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZXMgaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmVjYXVzZSBzdWNoIGZlYXR1cmVzIGFyZSBiYWNrZmlsbGVkIGJ5IGRlZmF1bHQgaW50byBhbGwKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zIGFzIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLCBkZXZlbG9wZXJzCisgICAgICAgICAgICB3aG8gd2lzaCB0byBkaXNhYmxlIHRoZSBuZXcgZmVhdHVyZXMgbmVlZCB0byBiZSBhYmxlIHRvIHNlbGVjdGl2ZWx5CisgICAgICAgICAgICBwcmV2ZW50IHRoZSBiYWNrZmlsbGluZyBmcm9tIG9jY3VycmluZy4KKyAgICAgICAgICAgIFRoZXkgY2FuIGRvIHRoaXMgYnkgYWRkaW5nIHRoZSB1bmRlc2lyZWQgZmVhdHVyZSBvciBmZWF0dXJlcyB0byB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRCc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBvciA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORV9GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEJz48ZmlsZW5hbWU+TUFDSElORV9GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZXMgZm9yIGRpc3RybyBmZWF0dXJlcyBhbmQgbWFjaGluZSBmZWF0dXJlcyByZXNwZWN0aXZlbHkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEhlcmUgYXJlIHR3byBleGFtcGxlcyB0byBoZWxwIGlsbHVzdHJhdGUgZmVhdHVyZSBiYWNrZmlsbGluZzoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5UaGUgInB1bHNlYXVkaW8iIGRpc3RybyBmZWF0dXJlIG9wdGlvbjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBQcmV2aW91c2x5LCBQdWxzZUF1ZGlvIHN1cHBvcnQgd2FzIGVuYWJsZWQgd2l0aGluIHRoZSBRdCBhbmQKKyAgICAgICAgICAgICAgICAgICAgR1N0cmVhbWVyIGZyYW1ld29ya3MuCisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2Ugb2YgdGhpcywgdGhlIGZlYXR1cmUgaXMgYmFja2ZpbGxlZCBhbmQgdGh1cworICAgICAgICAgICAgICAgICAgICBlbmFibGVkIGZvciBhbGwgZGlzdHJvcyB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgeW91ciBkaXN0cm8gbmVlZHMgdG8gZGlzYWJsZSB0aGUgZmVhdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkaXNhYmxlIHRoZSBmZWF0dXJlIHdpdGhvdXQgYWZmZWN0aW5nCisgICAgICAgICAgICAgICAgICAgIG90aGVyIGV4aXN0aW5nIGRpc3RybyBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgUHVsc2VBdWRpbyBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgIGJ5IGFkZGluZyAicHVsc2VhdWRpbyIgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaW4geW91ciBkaXN0cm8ncyA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBBZGRpbmcgdGhlIGZlYXR1cmUgdG8gdGhpcyB2YXJpYWJsZSB3aGVuIGl0IGFsc28KKyAgICAgICAgICAgICAgICAgICAgZXhpc3RzIGluIHRoZSA8ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgcHJldmVudHMgdGhlIGJ1aWxkIHN5c3RlbSBmcm9tIGFkZGluZyB0aGUgZmVhdHVyZSB0bworICAgICAgICAgICAgICAgICAgICB5b3VyIGNvbmZpZ3VyYXRpb24ncyA8ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT4sIGVmZmVjdGl2ZWx5IGRpc2FibGluZworICAgICAgICAgICAgICAgICAgICB0aGUgZmVhdHVyZSBmb3IgdGhhdCBwYXJ0aWN1bGFyIGRpc3Ryby48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRoZSAicnRjIiBtYWNoaW5lIGZlYXR1cmUgb3B0aW9uPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgIFByZXZpb3VzbHksIHJlYWwgdGltZSBjbG9jayAoUlRDKSBzdXBwb3J0IHdhcyBlbmFibGVkIGZvciBhbGwKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGRldmljZXMuCisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2Ugb2YgdGhpcywgdGhlIGZlYXR1cmUgaXMgYmFja2ZpbGxlZCBhbmQgdGh1cyBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgIGZvciBhbGwgbWFjaGluZXMgdGhyb3VnaCB0aGUgPGZpbGVuYW1lPk1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTEw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB0aGUgPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3VyIHRhcmdldCBkZXZpY2UgZG9lcyBub3QgaGF2ZSB0aGlzIGNhcGFiaWxpdHkuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZGlzYWJsZSBSVEMgc3VwcG9ydCBmb3IgeW91ciBkZXZpY2Ugd2l0aG91dAorICAgICAgICAgICAgICAgICAgICBhZmZlY3Rpbmcgb3RoZXIgbWFjaGluZXMgdGhhdCBuZWVkIFJUQyBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgIGJ5IGFkZGluZyB0aGUgZmVhdHVyZSB0byB5b3VyIG1hY2hpbmUncworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TUFDSElORV9GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbGlzdCBpbiB0aGUgbWFjaGluZSdzIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEFkZGluZyB0aGUgZmVhdHVyZSB0byB0aGlzIHZhcmlhYmxlIHdoZW4gaXQgYWxzbworICAgICAgICAgICAgICAgICAgICBleGlzdHMgaW4gdGhlIDxmaWxlbmFtZT5NQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgcHJldmVudHMgdGhlIGJ1aWxkIHN5c3RlbSBmcm9tIGFkZGluZyB0aGUgZmVhdHVyZSB0bworICAgICAgICAgICAgICAgICAgICB5b3VyIGNvbmZpZ3VyYXRpb24ncyA8ZmlsZW5hbWU+TUFDSElORV9GRUFUVVJFUzwvZmlsZW5hbWU+LCBlZmZlY3RpdmVseQorICAgICAgICAgICAgICAgICAgICBkaXNhYmxpbmcgUlRDIHN1cHBvcnQgZm9yIHRoYXQgcGFydGljdWxhciBtYWNoaW5lLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+CisKKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQgc3BlbGwgc3BlbGxsYW5nPWVuX2diCistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1pbWFnZXMueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWltYWdlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE1Y2E1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1pbWFnZXMueG1sCkBAIC0wLDAgKzEsMTY5IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ncmVmLWltYWdlcyc+CisgICAgPHRpdGxlPkltYWdlczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcHJvdmlkZXMgc2V2ZXJhbCBleGFtcGxlCisgICAgICAgIGltYWdlcyB0byBzYXRpc2Z5IGRpZmZlcmVudCBuZWVkcy4KKyAgICAgICAgV2hlbiB5b3UgaXNzdWUgdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCB5b3UgcHJvdmlkZSBhIOKAnHRvcC1sZXZlbOKAnSByZWNpcGUKKyAgICAgICAgdGhhdCBlc3NlbnRpYWxseSBiZWdpbnMgdGhlIGJ1aWxkIGZvciB0aGUgdHlwZSBvZiBpbWFnZSB5b3Ugd2FudC4KKyAgICA8L3BhcmE+CisKKyAgICA8bm90ZT4KKyAgICAgICAgQnVpbGRpbmcgYW4gaW1hZ2Ugd2l0aG91dCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDMgKEdQTHYzKSwKKyAgICAgICAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMyAoTEdQTHYzKSwgYW5kIHRoZQorICAgICAgICBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAzIChBR1BMLTMuMCkgY29tcG9uZW50cworICAgICAgICBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgbWluaW1hbCBhbmQgYmFzZSBpbWFnZXMuCisgICAgICAgIEZ1cnRoZXJtb3JlLCBpZiB5b3UgYXJlIGdvaW5nIHRvIGJ1aWxkIGFuIGltYWdlIHVzaW5nIG5vbi1HUEx2MyBhbmQKKyAgICAgICAgc2ltaWxhcmx5IGxpY2Vuc2VkIGNvbXBvbmVudHMsIHlvdSBtdXN0IG1ha2UgdGhlIGZvbGxvd2luZyBjaGFuZ2VzIGluCisgICAgICAgIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgYmVmb3JlIHVzaW5nIHRoZSBCaXRCYWtlCisgICAgICAgIGNvbW1hbmQgdG8gYnVpbGQgdGhlIG1pbmltYWwgb3IgYmFzZSBpbWFnZToKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAxLiBDb21tZW50IG91dCB0aGUgRVhUUkFfSU1BR0VfRkVBVFVSRVMgbGluZQorICAgICAyLiBTZXQgSU5DT01QQVRJQkxFX0xJQ0VOU0UgPSAiR1BMLTMuMCBMR1BMLTMuMCBBR1BMLTMuMCIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvbm90ZT4KKworICAgIDxwYXJhPgorICAgICAgICBGcm9tIHdpdGhpbiB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSwgeW91IGNhbiB1c2UKKyAgICAgICAgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGRpc3BsYXkgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgd2l0aGluIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgdGhhdCBjb250YWluZSBpbWFnZSByZWNpcGUgZmlsZXM6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBscyBtZXRhKi9yZWNpcGVzKi9pbWFnZXMvKi5iYgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvbGxvd2luZyBpcyBhIGxpc3Qgb2Ygc3VwcG9ydGVkIHJlY2lwZXM6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJ1aWxkLWFwcGxpYW5jZS1pbWFnZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgdmlydHVhbCBtYWNoaW5lIHRoYXQgY29udGFpbnMgYWxsIHRoZSBwaWVjZXMgcmVxdWlyZWQgdG8KKyAgICAgICAgICAgICAgICBydW4gYnVpbGRzIHVzaW5nIHRoZSBidWlsZCBzeXN0ZW0gYXMgd2VsbCBhcyB0aGUgYnVpbGQgc3lzdGVtIGl0c2VsZi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGJvb3QgYW5kIHJ1biB0aGUgaW1hZ2UgdXNpbmcgZWl0aGVyIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cudm13YXJlLmNvbS9wcm9kdWN0cy9wbGF5ZXIvb3ZlcnZpZXcuaHRtbCc+Vk13YXJlIFBsYXllcjwvdWxpbms+CisgICAgICAgICAgICAgICAgb3IgPHVsaW5rIHVybD0naHR0cDovL3d3dy52bXdhcmUuY29tL3Byb2R1Y3RzL3dvcmtzdGF0aW9uL292ZXJ2aWV3Lmh0bWwnPlZNd2FyZSBXb3Jrc3RhdGlvbjwvdWxpbms+LgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgaW1hZ2UsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L2RvY3VtZW50YXRpb24vYnVpbGQtYXBwbGlhbmNlJz5CdWlsZCBBcHBsaWFuY2U8L3VsaW5rPiBwYWdlIG9uCisgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3Qgd2Vic2l0ZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS1iYXNlPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSBjb25zb2xlLW9ubHkgaW1hZ2UgdGhhdCBmdWxseSBzdXBwb3J0cyB0aGUgdGFyZ2V0IGRldmljZSBoYXJkd2FyZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS1jbHV0dGVyPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQW4gaW1hZ2Ugd2l0aCBzdXBwb3J0IGZvciB0aGUgT3BlbiBHTC1iYXNlZCB0b29sa2l0IENsdXR0ZXIsIHdoaWNoIGVuYWJsZXMgZGV2ZWxvcG1lbnQgb2YKKyAgICAgICAgICAgICAgICByaWNoIGFuZCBhbmltYXRlZCBncmFwaGljYWwgdXNlciBpbnRlcmZhY2VzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb3JlLWltYWdlLWRpcmVjdGZiPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQW4gaW1hZ2UgdGhhdCB1c2VzIDxmaWxlbmFtZT5kaXJlY3RmYjwvZmlsZW5hbWU+IGluc3RlYWQgb2YgWDExLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb3JlLWltYWdlLWZ1bGwtY21kbGluZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEEgY29uc29sZS1vbmx5IGltYWdlIHdpdGggbW9yZSBmdWxsLWZlYXR1cmVkIExpbnV4IHN5c3RlbQorICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgaW5zdGFsbGVkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS1sc2I8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBbiBpbWFnZSB0aGF0IGNvbmZvcm1zIHRvIHRoZSBMaW51eCBTdGFuZGFyZCBCYXNlIChMU0IpCisgICAgICAgICAgICAgICAgc3BlY2lmaWNhdGlvbi4KKyAgICAgICAgICAgICAgICBUaGlzIGltYWdlIHJlcXVpcmVzIGEgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gdGhhdAorICAgICAgICAgICAgICAgIGVuYWJsZXMgTFNCIGNvbXBsaWFuY2UgKGUuZy4gPGZpbGVuYW1lPnBva3ktbHNiPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIElmIHlvdSBidWlsZCA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1sc2I8L2ZpbGVuYW1lPiB3aXRob3V0IHRoYXQKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLCB0aGUgaW1hZ2Ugd2lsbCBub3QgYmUgTFNCLWNvbXBsaWFudC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS1sc2ItZGV2PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1sc2I8L2ZpbGVuYW1lPiBpbWFnZSB0aGF0IGlzIHN1aXRhYmxlIGZvciBkZXZlbG9wbWVudCB3b3JrCisgICAgICAgICAgICAgICAgdXNpbmcgdGhlIGhvc3QuCisgICAgICAgICAgICAgICAgVGhlIGltYWdlIGluY2x1ZGVzIGhlYWRlcnMgYW5kIGxpYnJhcmllcyB5b3UgY2FuIHVzZSBpbiBhIGhvc3QgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICBUaGlzIGltYWdlIHJlcXVpcmVzIGEgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gdGhhdAorICAgICAgICAgICAgICAgIGVuYWJsZXMgTFNCIGNvbXBsaWFuY2UgKGUuZy4gPGZpbGVuYW1lPnBva3ktbHNiPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIElmIHlvdSBidWlsZCA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1sc2ItZGV2PC9maWxlbmFtZT4gd2l0aG91dCB0aGF0CisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiwgdGhlIGltYWdlIHdpbGwgbm90IGJlIExTQi1jb21wbGlhbnQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtbHNiLXNkazwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEEgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbHNiPC9maWxlbmFtZT4gdGhhdCBpbmNsdWRlcyBldmVyeXRoaW5nIGluCisgICAgICAgICAgICAgICAgbWV0YS10b29sY2hhaW4gYnV0IGFsc28gaW5jbHVkZXMgZGV2ZWxvcG1lbnQgaGVhZGVycyBhbmQgbGlicmFyaWVzCisgICAgICAgICAgICAgICAgdG8gZm9ybSBhIGNvbXBsZXRlIHN0YW5kYWxvbmUgU0RLLgorICAgICAgICAgICAgICAgIFRoaXMgaW1hZ2UgcmVxdWlyZXMgYSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiB0aGF0CisgICAgICAgICAgICAgICAgZW5hYmxlcyBMU0IgY29tcGxpYW5jZSAoZS5nLiA8ZmlsZW5hbWU+cG9reS1sc2I8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgSWYgeW91IGJ1aWxkIDxmaWxlbmFtZT5jb3JlLWltYWdlLWxzYi1zZGs8L2ZpbGVuYW1lPiB3aXRob3V0IHRoYXQKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLCB0aGUgaW1hZ2Ugd2lsbCBub3QgYmUgTFNCLWNvbXBsaWFudC4KKyAgICAgICAgICAgICAgICBUaGlzIGltYWdlIGlzIHN1aXRhYmxlIGZvciBkZXZlbG9wbWVudCB1c2luZyB0aGUgdGFyZ2V0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBIHNtYWxsIGltYWdlIGp1c3QgY2FwYWJsZSBvZiBhbGxvd2luZyBhIGRldmljZSB0byBib290LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWwtZGV2PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gaW1hZ2Ugc3VpdGFibGUgZm9yIGRldmVsb3BtZW50IHdvcmsKKyAgICAgICAgICAgICAgICB1c2luZyB0aGUgaG9zdC4KKyAgICAgICAgICAgICAgICBUaGUgaW1hZ2UgaW5jbHVkZXMgaGVhZGVycyBhbmQgbGlicmFyaWVzIHlvdSBjYW4gdXNlIGluIGEgaG9zdCBkZXZlbG9wbWVudAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdpbWFnZXMtY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcyc+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBpbWFnZSB0aGF0IGhhcyB0aGUgTWluaW1hbCBSQU0tYmFzZWQKKyAgICAgICAgICAgICAgICBJbml0aWFsIFJvb3QgRmlsZXN5c3RlbSAoaW5pdHJhbWZzKSBhcyBwYXJ0IG9mIHRoZSBrZXJuZWwsCisgICAgICAgICAgICAgICAgd2hpY2ggYWxsb3dzIHRoZSBzeXN0ZW0gdG8gZmluZCB0aGUgZmlyc3Qg4oCcaW5pdOKAnSBwcm9ncmFtIG1vcmUgZWZmaWNpZW50bHkuCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0lOU1RBTEwnPjxmaWxlbmFtZT5QQUNLQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBoZWxwZnVsIHdoZW4gd29ya2luZyB3aXRoCisgICAgICAgICAgICAgICAgaW5pdHJhbWZzIGltYWdlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsLW10ZHV0aWxzPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gaW1hZ2UgdGhhdCBoYXMgc3VwcG9ydAorICAgICAgICAgICAgICAgIGZvciB0aGUgTWluaW1hbCBNVEQgVXRpbGl0aWVzLCB3aGljaCBsZXQgdGhlIHVzZXIgaW50ZXJhY3Qgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICBNVEQgc3Vic3lzdGVtIGluIHRoZSBrZXJuZWwgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIGZsYXNoIGRldmljZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtcnQ8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBpbWFnZSBwbHVzIGEgcmVhbC10aW1lIHRlc3Qgc3VpdGUgYW5kCisgICAgICAgICAgICAgICAgdG9vbHMgYXBwcm9wcmlhdGUgZm9yIHJlYWwtdGltZSB1c2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtcnQtc2RrPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1ydDwvZmlsZW5hbWU+IGltYWdlIHRoYXQgaW5jbHVkZXMgZXZlcnl0aGluZyBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXRvb2xjaGFpbjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSBpbWFnZSBhbHNvIGluY2x1ZGVzIGRldmVsb3BtZW50IGhlYWRlcnMgYW5kIGxpYnJhcmllcyB0byBmb3JtIGEgY29tcGxldGUKKyAgICAgICAgICAgICAgICBzdGFuZC1hbG9uZSBTREsgYW5kIGlzIHN1aXRhYmxlIGZvciBkZXZlbG9wbWVudCB1c2luZyB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBbiBpbWFnZSB3aXRoIFNhdG8gc3VwcG9ydCwgYSBtb2JpbGUgZW52aXJvbm1lbnQgYW5kIHZpc3VhbCBzdHlsZSB0aGF0IHdvcmtzIHdlbGwKKyAgICAgICAgICAgICAgICB3aXRoIG1vYmlsZSBkZXZpY2VzLgorICAgICAgICAgICAgICAgIFRoZSBpbWFnZSBzdXBwb3J0cyBYMTEgd2l0aCBhIFNhdG8gdGhlbWUgYW5kIGFwcGxpY2F0aW9ucyBzdWNoIGFzCisgICAgICAgICAgICAgICAgYSB0ZXJtaW5hbCwgZWRpdG9yLCBmaWxlIG1hbmFnZXIsIG1lZGlhIHBsYXllciwgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG8tZGV2PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4gaW1hZ2Ugc3VpdGFibGUgZm9yIGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgdXNpbmcgdGhlIGhvc3QuCisgICAgICAgICAgICAgICAgVGhlIGltYWdlIGluY2x1ZGVzIGxpYnJhcmllcyBuZWVkZWQgdG8gYnVpbGQgYXBwbGljYXRpb25zIG9uIHRoZSBkZXZpY2UgaXRzZWxmLAorICAgICAgICAgICAgICAgIHRlc3RpbmcgYW5kIHByb2ZpbGluZyB0b29scywgYW5kIGRlYnVnIHN5bWJvbHMuCisgICAgICAgICAgICAgICAgVGhpcyBpbWFnZSB3YXMgZm9ybWVybHkgPGZpbGVuYW1lPmNvcmUtaW1hZ2Utc2RrPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2Utc2F0by1zZGs8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPiBpbWFnZSB0aGF0IGluY2x1ZGVzIGV2ZXJ5dGhpbmcgaW4gbWV0YS10b29sY2hhaW4uCisgICAgICAgICAgICAgICAgVGhlIGltYWdlIGFsc28gaW5jbHVkZXMgZGV2ZWxvcG1lbnQgaGVhZGVycyBhbmQgbGlicmFyaWVzIHRvIGZvcm0gYSBjb21wbGV0ZSBzdGFuZGFsb25lIFNESworICAgICAgICAgICAgICAgIGFuZCBpcyBzdWl0YWJsZSBmb3IgZGV2ZWxvcG1lbnQgdXNpbmcgdGhlIHRhcmdldC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS10ZXN0bWFzdGVyPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSAibWFzdGVyIiBpbWFnZSBkZXNpZ25lZCB0byBiZSB1c2VkIGZvciBhdXRvbWF0ZWQgcnVudGltZSB0ZXN0aW5nLgorICAgICAgICAgICAgICAgIFByb3ZpZGVzIGEgImtub3duIGdvb2QiIGltYWdlIHRoYXQgaXMgZGVwbG95ZWQgdG8gYSBzZXBhcmF0ZQorICAgICAgICAgICAgICAgIHBhcnRpdGlvbiBzbyB0aGF0IHlvdSBjYW4gYm9vdCBpbnRvIGl0IGFuZCB1c2UgaXQgdG8gZGVwbG95IGEKKyAgICAgICAgICAgICAgICBzZWNvbmQgaW1hZ2UgdG8gYmUgdGVzdGVkLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHJ1bnRpbWUgdGVzdGluZyBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGVyZm9ybWluZy1hdXRvbWF0ZWQtcnVudGltZS10ZXN0aW5nJz5QZXJmb3JtaW5nIEF1dG9tYXRlZCBSdW50aW1lIFRlc3Rpbmc8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS10ZXN0bWFzdGVyLWluaXRyYW1mczwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEEgUkFNLWJhc2VkIEluaXRpYWwgUm9vdCBGaWxlc3lzdGVtIChpbml0cmFtZnMpIGltYWdlIHRhaWxvcmVkIGZvcgorICAgICAgICAgICAgICAgIHVzZSB3aXRoIHRoZSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS10ZXN0bWFzdGVyPC9maWxlbmFtZT4gaW1hZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2Utd2VzdG9uPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSB2ZXJ5IGJhc2ljIFdheWxhbmQgaW1hZ2Ugd2l0aCBhIHRlcm1pbmFsLgorICAgICAgICAgICAgICAgIFRoaXMgaW1hZ2UgcHJvdmlkZXMgdGhlIFdheWxhbmQgcHJvdG9jb2wgbGlicmFyaWVzIGFuZCB0aGUKKyAgICAgICAgICAgICAgICByZWZlcmVuY2UgV2VzdG9uIGNvbXBvc2l0b3IuCisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nd2F5bGFuZCc+V2F5bGFuZDwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2UteDExPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSB2ZXJ5IGJhc2ljIFgxMSBpbWFnZSB3aXRoIGEgdGVybWluYWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnF0NGUtZGVtby1pbWFnZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEFuIGltYWdlIHRoYXQgbGF1bmNoZXMgaW50byB0aGUgZGVtbyBhcHBsaWNhdGlvbiBmb3IgdGhlIGVtYmVkZGVkCisgICAgICAgICAgICAgICAgKG5vdCBiYXNlZCBvbiBYMTEpIHZlcnNpb24gb2YgUXQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1tYW51YWwtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU4ZGQ5MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1tYW51YWwtY3VzdG9taXphdGlvbi54c2wKQEAgLTAsMCArMSwyOSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWxuczpmbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvRm9ybWF0IiB2ZXJzaW9uPSIxLjAiPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3IvZG9jYm9vay1taXJyb3IvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCis8IS0tCisKKyAgPHhzbDppbXBvcnQgaHJlZj0iLi4vdGVtcGxhdGUvMS43Ni4xL2RvY2Jvb2steHNsLTEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCistLT4KKworICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvcGVybWFsaW5rcy54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL3NlY3Rpb24udGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9jb21wb25lbnQudGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9kaXZpc2lvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2Zvcm1hbC5vYmplY3QuaGVhZGluZy54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2dsb3NzLXBlcm1hbGlua3MueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9xYS1jb2RlLXBlcm1hbGlua3MueHNsIi8+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJodG1sLnN0eWxlc2hlZXQiIHNlbGVjdD0iJ3JlZi1zdHlsZS5jc3MnIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNoYXB0ZXIuYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYXBwZW5kaXguYXV0b2xhYmVsIiBzZWxlY3Q9IkEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmxhYmVsLmluY2x1ZGVzLmNvbXBvbmVudC5sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmlkLmF0dHJpYnV0ZXMiIHNlbGVjdD0iMSIgLz4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1tYW51YWwtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1tYW51YWwtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2I3NTIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLW1hbnVhbC1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0CisJeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisJeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIKKwl2ZXJzaW9uPSIxLjAiPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3IvZG9jYm9vay1taXJyb3IvZG9jYm9vay14c2wtMS43Ni4xL2VjbGlwc2UvZWNsaXBzZTMueHNsIiAvPgorCis8IS0tCisKKyAgPHhzbDppbXBvcnQgaHJlZj0iLi4vdGVtcGxhdGUvMS43Ni4xL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworICA8eHNsOmltcG9ydAorCSAgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVua2VyLm91dHB1dC5pbmRlbnQiIHNlbGVjdD0iJ3llcyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5xdWlldGx5IiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5maXJzdC5zZWN0aW9ucyIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsuc2VjdGlvbi5kZXB0aCIgc2VsZWN0PSIxMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InVzZS5pZC5hcy5maWxlbmFtZSIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0idWxpbmsudGFyZ2V0IiBzZWxlY3Q9Iidfc2VsZiciIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYmFzZS5kaXIiIHNlbGVjdD0iJ2h0bWwvcmVmLW1hbnVhbC8nIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9IicuLi9ib29rLmNzcyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJlY2xpcHNlLm1hbmlmZXN0IiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjcmVhdGUucGx1Z2luLnhtbCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic3VwcHJlc3MubmF2aWdhdGlvbiIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUuaW5kZXgiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNoYXB0ZXIuYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYXBwZW5kaXguYXV0b2xhYmVsIj5BPC94c2w6cGFyYW0+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmxhYmVsLmluY2x1ZGVzLmNvbXBvbmVudC5sYWJlbCIgc2VsZWN0PSIxIiAvPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1tYW51YWwueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLW1hbnVhbC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI0ZWRkZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1tYW51YWwueG1sCkBAIC0wLDAgKzEsMTYwIEBACis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Ym9vayBpZD0ncmVmLW1hbnVhbCcgbGFuZz0nZW4nCisgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIKKyAgICAgIHhtbG5zPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayIKKyAgICAgID4KKyAgICA8Ym9va2luZm8+CisKKyAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0nZmlndXJlcy9wb2t5LXRpdGxlLnBuZycKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSdTVkcnCisgICAgICAgICAgICAgICAgICAgIGFsaWduPSdsZWZ0JyBzY2FsZWZpdD0nMScgd2lkdGg9JzEwMCUnLz4KKyAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+CisgICAgICAgIDwvbWVkaWFvYmplY3Q+CisKKyAgICAgICAgPHRpdGxlPgorICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsCisgICAgICAgIDwvdGl0bGU+CisKKyAgICAgICAgPGF1dGhvcmdyb3VwPgorICAgICAgICAgICAgPGF1dGhvcj4KKyAgICAgICAgICAgICAgICA8Zmlyc3RuYW1lPlJpY2hhcmQ8L2ZpcnN0bmFtZT4gPHN1cm5hbWU+UHVyZGllPC9zdXJuYW1lPgorICAgICAgICAgICAgICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPG9yZ25hbWU+TGludXggRm91bmRhdGlvbjwvb3JnbmFtZT4KKyAgICAgICAgICAgICAgICA8L2FmZmlsaWF0aW9uPgorICAgICAgICAgICAgICAgIDxlbWFpbD5yaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPC9lbWFpbD4KKyAgICAgICAgICAgIDwvYXV0aG9yPgorCisgICAgICAgIDwvYXV0aG9yZ3JvdXA+CisKKyAgICAgICAgPHJldmhpc3Rvcnk+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj40LjArZ2l0PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+MjQgTm92ZW1iZXIgMjAxMDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMC45IFJlbGVhc2U8L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjA8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT42IEFwcmlsIDIwMTE8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuMCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuMC4xPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+MjMgTWF5IDIwMTE8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuMC4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4xPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+NiBPY3RvYmVyIDIwMTE8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuMSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuMjwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTI8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuMiBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuMzwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxMjwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS4zIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS40PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxMzwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS40IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS41PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDEzPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjUgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjUuMTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkphbnVhcnkgMjAxNDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS41LjEgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjY8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE0PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjYgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjc8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTQ8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNyBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuODwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTU8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuOCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuOTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxNTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS45IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICA8L3Jldmhpc3Rvcnk+CisKKyAgICA8Y29weXJpZ2h0PgorICAgICAgPHllYXI+JkNPUFlSSUdIVF9ZRUFSOzwveWVhcj4KKyAgICAgIDxob2xkZXI+TGludXggRm91bmRhdGlvbjwvaG9sZGVyPgorICAgIDwvY29weXJpZ2h0PgorCisgICAgPGxlZ2Fsbm90aWNlPgorICAgICAgPHBhcmE+CisgICAgICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudCB1bmRlcgorICAgICAgICB0aGUgdGVybXMgb2YgdGhlIDx1bGluayB0eXBlPSJodHRwIiB1cmw9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzIuMC91ay8iPkNyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmUgQWxpa2UgMi4wIFVLOiBFbmdsYW5kICZhbXA7IFdhbGVzPC91bGluaz4gYXMgcHVibGlzaGVkIGJ5IENyZWF0aXZlIENvbW1vbnMuCisgICAgICA8L3BhcmE+CisgICAgICA8bm90ZT4KKyAgICAgICAgICBGb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbWFudWFsIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICAgICAgWW9jdG8gUHJvamVjdCByZWxlYXNlLCBzZWUgdGhlCisgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsnPllvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbDwvdWxpbms+CisgICAgICAgICAgZnJvbSB0aGUgWW9jdG8gUHJvamVjdCB3ZWJzaXRlLgorICAgICAgPC9ub3RlPgorICAgIDwvbGVnYWxub3RpY2U+CisKKyAgICA8L2Jvb2tpbmZvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iaW50cm9kdWN0aW9uLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0idXNpbmdwb2t5LnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iY2xvc2VyLWxvb2sueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ0ZWNobmljYWwtZGV0YWlscy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9Im1pZ3JhdGlvbi54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InJlZi1zdHJ1Y3R1cmUueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJyZWYtY2xhc3Nlcy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InJlZi10YXNrcy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InJlZi1xYS1jaGVja3MueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJyZWYtaW1hZ2VzLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0icmVmLWZlYXR1cmVzLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0icmVmLXZhcmlhYmxlcy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InJlZi12YXJsb2NhbGl0eS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImZhcS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InJlc291cmNlcy54bWwiLz4KKworPCEtLSAgICA8aW5kZXggaWQ9J2luZGV4Jz4KKyAgICAgIDx0aXRsZT5JbmRleDwvdGl0bGU+CisgICAgPC9pbmRleD4KKy0tPgorCis8L2Jvb2s+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1xYS1jaGVja3MueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXFhLWNoZWNrcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg2ODliOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1xYS1jaGVja3MueG1sCkBAIC0wLDAgKzEsMTIzNSBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J3JlZi1xYS1jaGVja3MnPgorPHRpdGxlPlFBIEVycm9yIGFuZCBXYXJuaW5nIE1lc3NhZ2VzPC90aXRsZT4KKworPHNlY3Rpb24gaWQ9J3FhLWludHJvZHVjdGlvbic+CisgICAgPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hlbiBidWlsZGluZyBhIHJlY2lwZSwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcGVyZm9ybXMKKyAgICAgICAgdmFyaW91cyBRQSBjaGVja3Mgb24gdGhlIG91dHB1dCB0byBlbnN1cmUgdGhhdCBjb21tb24gaXNzdWVzIGFyZQorICAgICAgICBkZXRlY3RlZCBhbmQgcmVwb3J0ZWQuCisgICAgICAgIFNvbWV0aW1lcyB3aGVuIHlvdSBjcmVhdGUgYSBuZXcgcmVjaXBlIHRvIGJ1aWxkIG5ldyBzb2Z0d2FyZSwKKyAgICAgICAgaXQgd2lsbCBidWlsZCB3aXRoIG5vIHByb2JsZW1zLgorICAgICAgICBXaGVuIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBvciB3aGVuIHlvdSBoYXZlIFFBIGlzc3VlcyBidWlsZGluZyBhbnkKKyAgICAgICAgc29mdHdhcmUsIGl0IGNvdWxkIHRha2UgYSBsaXR0bGUgdGltZSB0byByZXNvbHZlIHRoZW0uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFdoaWxlIGl0IGlzIHRlbXB0aW5nIHRvIGlnbm9yZSBhIFFBIG1lc3NhZ2Ugb3IgZXZlbiB0bworICAgICAgICBkaXNhYmxlIFFBIGNoZWNrcywgaXQgaXMgYmVzdCB0byB0cnkgYW5kIHJlc29sdmUgYW55CisgICAgICAgIHJlcG9ydGVkIFFBIGlzc3Vlcy4KKyAgICAgICAgVGhpcyBjaGFwdGVyIHByb3ZpZGVzIGEgbGlzdCBvZiB0aGUgUUEgbWVzc2FnZXMgYW5kIGJyaWVmIGV4cGxhbmF0aW9ucworICAgICAgICBvZiB0aGUgaXNzdWVzIHlvdSBjb3VsZCBlbmNvdW50ZXIgc28gdGhhdCB5b3UgY2FuIHByb3Blcmx5IHJlc29sdmUKKyAgICAgICAgcHJvYmxlbXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBuZXh0IHNlY3Rpb24gcHJvdmlkZXMgYSBsaXN0IG9mIGFsbCBRQSBlcnJvciBhbmQgd2FybmluZworICAgICAgICBtZXNzYWdlcyBiYXNlZCBvbiBhIGRlZmF1bHQgY29uZmlndXJhdGlvbi4KKyAgICAgICAgRWFjaCBlbnRyeSBwcm92aWRlcyB0aGUgbWVzc2FnZSBvciBlcnJvciBmb3JtIGFsb25nIHdpdGggYW4KKyAgICAgICAgZXhwbGFuYXRpb24uCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgPHRpdGxlPk5vdGVzPC90aXRsZT4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBdCB0aGUgZW5kIG9mIGVhY2ggbWVzc2FnZSwgdGhlIG5hbWUgb2YgdGhlIGFzc29jaWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgUUEgdGVzdCAoYXMgbGlzdGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaW5zYW5lJz48ZmlsZW5hbWU+aW5zYW5lLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24pIGFwcGVhcnMgd2l0aGluIHNxdWFyZSBicmFja2V0cy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQsIHRoaXMgbGlzdCBvZiBlcnJvciBhbmQgd2FybmluZyBtZXNzYWdlcyBpcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgUUEgY2hlY2tzIG9ubHkuCisgICAgICAgICAgICAgICAgICAgIFRoZSBsaXN0IGRvZXMgbm90IGNvdmVyIGFsbCBwb3NzaWJsZSBidWlsZCBlcnJvcnMgb3IKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3MgeW91IGNvdWxkIGVuY291bnRlci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHNvbWUgUUEgY2hlY2tzIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0LCB0aGlzIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgaW5jbHVkZSBhbGwgcG9zc2libGUgUUEgY2hlY2sgZXJyb3JzIGFuZCB3YXJuaW5ncy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3FhLWVycm9ycy1hbmQtd2FybmluZ3MnPgorICAgIDx0aXRsZT5FcnJvcnMgYW5kIFdhcm5pbmdzPC90aXRsZT4KKworPCEtLQorVGhpcyBzZWN0aW9uIHVzZXMgdGhlIDxwYXJhPjxjb2RlPiBjb25zdHJ1Y3QgdG8gZW5hYmxlIHBlcm1hbGlua3MgZm9yIHRoZQordmFyaW91cyBRQSBpc3N1ZSBhbmQgd2FybmluZyBtZXNzYWdlcy4gIFRoZSBmaWxlIHRlbXBsYXRlcy9xYS1jb2RlLXBlcm1hbGlua3MueHNsCitpcyB1c2VkIHRvIGxvY2F0ZSB0aGUgY29uc3RydWN0IGFuZCBnZW5lcmF0ZSB0aGUgcGVybWFsaW5rLiAgVGhpcyBzb2x1dGlvbgorbGV2ZXJhZ2VzIHRoZSBmYWN0IHRoYXQgcmlnaHQgbm93IHRoaXMgc2VjdGlvbiBpbiB0aGUgcmVmLW1hbnVhbCBpcyB0aGUgb25seQorcGxhY2UgaXMgYWxsIHRoZSBZUCBkb2NzIHRoYXQgdXNlcyB0aGUgPHBhcmE+PGNvZGU+IGNvbnN0cnVjdC4gIElmLCBpbiB0aGUKK2Z1dHVyZSwgdGhhdCBjb25zdHJ1Y3Qgd2VyZSB0byBhcHBlYXIgaW4gdGhlIHJlZi1tYW51YWwsIGEgZ2VuZXJpYyBwZXJtYWxpbmsKK3dvdWxkIGJlIGdlbmVyYXRlZCBmb3IgdGhlIHRleHQgYmV0d2VlbiA8Y29kZT48L2NvZGU+LiAgSWYgYSBiZXR0ZXIgc29sdXRpb24KK2NhbiBiZSBmb3VuZCB0aGVuIGl0IHNob3VsZCBiZSBpbXBsZW1lbnRlZC4gIEkgY2FuJ3QgZmluZCBvbmUgYXQgdGhlIG1vbWVudC4KKy0tPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLWxpYmV4ZWMnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgJmx0O3BhY2thZ2VuYW1lJmd0OzogJmx0O3BhdGgmZ3Q7IGlzIHVzaW5nIGxpYmV4ZWMgcGxlYXNlIHJlbG9jYXRlIHRvICZsdDtsaWJleGVjZGlyJmd0OyBbbGliZXhlY10KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lmaWVkIHBhY2thZ2UgY29udGFpbnMgZmlsZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvbGliZXhlYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCA8ZmlsZW5hbWU+bGliZXhlY2RpcjwvZmlsZW5hbWU+IGlzIHNldCB0bworICAgICAgICAgICAgICAgICAgICAiJHtsaWJkaXJ9LyR7QlBOfSIgcmF0aGVyIHRoYW4gdG8gIi91c3IvbGliZXhlYyIuCisgICAgICAgICAgICAgICAgICAgIFRodXMsIGluc3RhbGxpbmcgdG8gPGZpbGVuYW1lPi91c3IvbGliZXhlYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIGxpa2VseSBub3QgZGVzaXJhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtcnBhdGhzJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIHBhY2thZ2UgJmx0O3BhY2thZ2VuYW1lJmd0OyBjb250YWlucyBiYWQgUlBBVEggJmx0O3JwYXRoJmd0OyBpbiBmaWxlICZsdDtmaWxlJmd0OyBbcnBhdGhzXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgYmluYXJ5IHByb2R1Y2VkIGJ5IHRoZSByZWNpcGUgY29udGFpbnMgZHluYW1pYworICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5IGxvYWQgcGF0aHMgKHJwYXRocykgdGhhdCBjb250YWluIGJ1aWxkIHN5c3RlbSBwYXRocworICAgICAgICAgICAgICAgICAgICBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGFyZSBpbmNvcnJlY3QgZm9yIHRoZSB0YXJnZXQgYW5kIGNvdWxkIHBvdGVudGlhbGx5CisgICAgICAgICAgICAgICAgICAgIGJlIGEgc2VjdXJpdHkgaXNzdWUuCisgICAgICAgICAgICAgICAgICAgIENoZWNrIGZvciBiYWQgPGZpbGVuYW1lPi1ycGF0aDwvZmlsZW5hbWU+IG9wdGlvbnMgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgcGFzc2VkIHRvIHRoZSBsaW5rZXIgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgbG9nLgorICAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIGJ1aWxkIHN5c3RlbSB1c2VkIGJ5IHRoZSBzb2Z0d2FyZSBiZWluZworICAgICAgICAgICAgICAgICAgICBidWlsdCwgdGhlcmUgbWlnaHQgYmUgYSBjb25maWd1cmUgb3B0aW9uIHRvIGRpc2FibGUgcnBhdGgKKyAgICAgICAgICAgICAgICAgICAgdXNhZ2UgY29tcGxldGVseSB3aXRoaW4gdGhlIGJ1aWxkIG9mIHRoZSBzb2Z0d2FyZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLXVzZWxlc3MtcnBhdGhzJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgICZsdDtwYWNrYWdlbmFtZSZndDs6ICZsdDtmaWxlJmd0OyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggJmx0O3JwYXRoJmd0OyBbdXNlbGVzcy1ycGF0aHNdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNwZWNpZmllZCBiaW5hcnkgcHJvZHVjZWQgYnkgdGhlIHJlY2lwZSBjb250YWlucyBkeW5hbWljCisgICAgICAgICAgICAgICAgICAgIGxpYnJhcnkgbG9hZCBwYXRocyAocnBhdGhzKSB0aGF0IG9uIGEgc3RhbmRhcmQgc3lzdGVtIGFyZQorICAgICAgICAgICAgICAgICAgICBzZWFyY2hlZCBieSBkZWZhdWx0IGJ5IHRoZSBsaW5rZXIgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9saWI8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPi91c3IvbGliPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBXaGlsZSB0aGVzZSBwYXRocyB3aWxsIG5vdCBjYXVzZSBhbnkgYnJlYWthZ2UsIHRoZXkgZG8gd2FzdGUKKyAgICAgICAgICAgICAgICAgICAgc3BhY2UgYW5kIGFyZSB1bm5lY2Vzc2FyeS4KKyAgICAgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHRoZSBidWlsZCBzeXN0ZW0gdXNlZCBieSB0aGUgc29mdHdhcmUgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgYnVpbHQsIHRoZXJlIG1pZ2h0IGJlIGEgY29uZmlndXJlIG9wdGlvbiB0byBkaXNhYmxlIHJwYXRoCisgICAgICAgICAgICAgICAgICAgIHVzYWdlIGNvbXBsZXRlbHkgd2l0aGluIHRoZSBidWlsZCBvZiB0aGUgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1maWxlLXJkZXBzJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgICZsdDtwYWNrYWdlbmFtZSZndDsgcmVxdWlyZXMgJmx0O2ZpbGVzJmd0OywgYnV0IG5vIHByb3ZpZGVycyBpbiBpdHMgUkRFUEVORFMgW2ZpbGUtcmRlcHNdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQSBmaWxlLWxldmVsIGRlcGVuZGVuY3kgaGFzIGJlZW4gaWRlbnRpZmllZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgcGFja2FnZSBvbiB0aGUgc3BlY2lmaWVkIGZpbGVzLCBidXQgdGhlcmUgaXMKKyAgICAgICAgICAgICAgICAgICAgbm8gZXhwbGljaXQgY29ycmVzcG9uZGluZyBlbnRyeSBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgSWYgcGFydGljdWxhciBmaWxlcyBhcmUgcmVxdWlyZWQgYXQgcnVudGltZSB0aGVuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHNob3VsZCBiZSBkZWNsYXJlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIHRvIGVuc3VyZSB0aGUgcGFja2FnZXMgcHJvdmlkaW5nIHRoZW0gYXJlIGJ1aWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtYnVpbGQtZGVwcyc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICAmbHQ7cGFja2FnZW5hbWUxJmd0OyByZGVwZW5kcyBvbiAmbHQ7cGFja2FnZW5hbWUyJmd0OywgYnV0IGl0IGlzbid0IGEgYnVpbGQgZGVwZW5kZW5jeT8gW2J1aWxkLWRlcHNdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQSBydW50aW1lIGRlcGVuZGVuY3kgZXhpc3RzIGJldHdlZW4gdGhlIHR3byBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMsIGJ1dCB0aGVyZSBpcyBub3RoaW5nIGV4cGxpY2l0IHdpdGhpbiB0aGUgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIHRvIGVuYWJsZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBlbnN1cmUgdGhhdAorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5IGlzIHNhdGlzZmllZC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb25kaXRpb24gaXMgdXN1YWxseSB0cmlnZ2VyZWQgYnkgYW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgYmVpbmcgYWRkZWQgYXQgdGhlIHBhY2thZ2luZyBzdGFnZSByYXRoZXIgdGhhbiB1cAorICAgICAgICAgICAgICAgICAgICBmcm9udCwgd2hpY2ggaXMgdXN1YWxseSBhdXRvbWF0aWMgYmFzZWQgb24gdGhlIGNvbnRlbnRzIG9mCisgICAgICAgICAgICAgICAgICAgIHRoZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBJbiBtb3N0IGNhc2VzLCB5b3Ugc2hvdWxkIGNoYW5nZSB0aGUgcmVjaXBlIHRvIGFkZCBhbgorICAgICAgICAgICAgICAgICAgICBleHBsaWNpdCA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiBmb3IgdGhlIGRlcGVuZGVuY3kuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1kZXYtc28nPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgbm9uIC1kZXYvLWRiZy9uYXRpdmVzZGstIHBhY2thZ2UgY29udGFpbnMgc3ltbGluayAuc286ICZsdDtwYWNrYWdlbmFtZSZndDsgcGF0aCAnJmx0O3BhdGgmZ3Q7JyBbZGV2LXNvXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFN5bWxpbmsgPGZpbGVuYW1lPi5zbzwvZmlsZW5hbWU+IGZpbGVzIGFyZSBmb3IgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgb25seSwgYW5kIHNob3VsZCB0aGVyZWZvcmUgZ28gaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1kZXY8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNpdHVhdGlvbiBtaWdodCBvY2N1ciBpZiB5b3UgYWRkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4qLnNvKjwvZmlsZW5hbWU+IHJhdGhlciB0aGFuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4qLnNvLio8L2ZpbGVuYW1lPiB0byBhIG5vbi1kZXYgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgQ2hhbmdlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIChhbmQgcG9zc2libHkKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICAgICAgICAgIHN1Y2ggdGhhdCB0aGUgc3BlY2lmaWVkIDxmaWxlbmFtZT4uc288L2ZpbGVuYW1lPiBmaWxlIGdvZXMKKyAgICAgICAgICAgICAgICAgICAgaW50byBhbiBhcHByb3ByaWF0ZSA8ZmlsZW5hbWU+LWRldjwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1zdGF0aWNkZXYnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgbm9uIC1zdGF0aWNkZXYgcGFja2FnZSBjb250YWlucyBzdGF0aWMgLmEgbGlicmFyeTogJmx0O3BhY2thZ2VuYW1lJmd0OyBwYXRoICcmbHQ7cGF0aCZndDsnIFtzdGF0aWNkZXZdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3RhdGljIDxmaWxlbmFtZT4uYTwvZmlsZW5hbWU+IGxpYnJhcnkgZmlsZXMgc2hvdWxkIGdvIGludG8KKyAgICAgICAgICAgICAgICAgICAgYSA8ZmlsZW5hbWU+LXN0YXRpY2RldjwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIENoYW5nZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAoYW5kIHBvc3NpYmx5CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFUyc+PGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgICAgICAgICBzdWNoIHRoYXQgdGhlIHNwZWNpZmllZCA8ZmlsZW5hbWU+LmE8L2ZpbGVuYW1lPiBmaWxlIGdvZXMKKyAgICAgICAgICAgICAgICAgICAgaW50byBhbiBhcHByb3ByaWF0ZSA8ZmlsZW5hbWU+LXN0YXRpY2RldjwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1saWJkaXInPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgJmx0O3BhY2thZ2VuYW1lJmd0OzogZm91bmQgbGlicmFyeSBpbiB3cm9uZyBsb2NhdGlvbiBbbGliZGlyXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgZmlsZSBtYXkgaGF2ZSBiZWVuIGluc3RhbGxlZCBpbnRvIGFuIGluY29ycmVjdAorICAgICAgICAgICAgICAgICAgICAocG9zc2libHkgaGFyZGNvZGVkKSBpbnN0YWxsYXRpb24gcGF0aC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoaXMgdGVzdCB3aWxsIGNhdGNoIHJlY2lwZXMgdGhhdCBpbnN0YWxsCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vbGliL2Jhci5zbzwvZmlsZW5hbWU+IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7YmFzZV9saWJkaXJ9PC9maWxlbmFtZT4gaXMgImxpYjMyIi4KKyAgICAgICAgICAgICAgICAgICAgQW5vdGhlciBleGFtcGxlIGlzIHdoZW4gcmVjaXBlcyBpbnN0YWxsCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2xpYjY0L2Zvby5zbzwvZmlsZW5hbWU+IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7bGliZGlyfTwvZmlsZW5hbWU+IGlzICIvdXNyL2xpYiIuCisgICAgICAgICAgICAgICAgICAgIEZhbHNlIHBvc2l0aXZlcyBvY2Nhc2lvbmFsbHkgZXhpc3QuCisgICAgICAgICAgICAgICAgICAgIEZvciB0aGVzZSBjYXNlcyBhZGQgImxpYmRpciIgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlOU0FORV9TS0lQJz48ZmlsZW5hbWU+SU5TQU5FX1NLSVA8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtZGVidWctZmlsZXMnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgbm9uIGRlYnVnIHBhY2thZ2UgY29udGFpbnMgLmRlYnVnIGRpcmVjdG9yeTogJmx0O3BhY2thZ2VuYW1lJmd0OyBwYXRoICZsdDtwYXRoJmd0OyBbZGVidWctZmlsZXNdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNwZWNpZmllZCBwYWNrYWdlIGNvbnRhaW5zIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5kZWJ1ZzwvZmlsZW5hbWU+IGRpcmVjdG9yeSwgd2hpY2ggc2hvdWxkIG5vdAorICAgICAgICAgICAgICAgICAgICBhcHBlYXIgaW4gYW55dGhpbmcgYnV0IHRoZSA8ZmlsZW5hbWU+LWRiZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2l0dWF0aW9uIG1pZ2h0IG9jY3VyIGlmIHlvdSBhZGQgYSBwYXRoIHdoaWNoIGNvbnRhaW5zCisgICAgICAgICAgICAgICAgICAgIGEgPGZpbGVuYW1lPi5kZWJ1ZzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBhbmQgZG8gbm90CisgICAgICAgICAgICAgICAgICAgIGV4cGxpY2l0bHkgYWRkIHRoZSA8ZmlsZW5hbWU+LmRlYnVnPC9maWxlbmFtZT4gZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSA8ZmlsZW5hbWU+LWRiZzwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIGFkZCB0aGUgPGZpbGVuYW1lPi5kZWJ1ZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBleHBsaWNpdGx5IHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU18ke1BOfS1kYmc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgU2VlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIDxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtYXJjaCc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICBBcmNoaXRlY3R1cmUgZGlkIG5vdCBtYXRjaCAoJmx0O21hY2hpbmVfYXJjaCZndDsgdG8gJmx0O2ZpbGVfYXJjaCZndDspIG9uICZsdDtmaWxlJmd0OyBbYXJjaF0KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjaGVja3MgdGhlCisgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGFibGUgYW5kIExpbmthYmxlIEZvcm1hdCAoRUxGKSB0eXBlLCBiaXQgc2l6ZSwgYW5kCisgICAgICAgICAgICAgICAgICAgIGVuZGlhbm5lc3Mgb2YgYW55IGJpbmFyaWVzIHRvIGVuc3VyZSB0aGV5IG1hdGNoIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHRlc3QgZmFpbHMgaWYgYW55IGJpbmFyaWVzIGRvIG5vdCBtYXRjaCB0aGUgdHlwZSBzaW5jZQorICAgICAgICAgICAgICAgICAgICB0aGVyZSB3b3VsZCBiZSBhbiBpbmNvbXBhdGliaWxpdHkuCisgICAgICAgICAgICAgICAgICAgIFRoZSB0ZXN0IGNvdWxkIGluZGljYXRlIHRoYXQgdGhlIHdyb25nIGNvbXBpbGVyIG9yIGNvbXBpbGVyCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgaGF2ZSBiZWVuIHVzZWQuCisgICAgICAgICAgICAgICAgICAgIFNvbWV0aW1lcyBzb2Z0d2FyZSwgbGlrZSBib290bG9hZGVycywgbWlnaHQgbmVlZCB0bworICAgICAgICAgICAgICAgICAgICBieXBhc3MgdGhpcyBjaGVjay4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGZpbGUgeW91IHJlY2VpdmUgdGhlIGVycm9yIGZvciBpcyBmaXJtd2FyZQorICAgICAgICAgICAgICAgICAgICB0aGF0IGlzIG5vdCBpbnRlbmRlZCB0byBiZSBleGVjdXRlZCB3aXRoaW4gdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpbmcgc3lzdGVtIG9yIGlzIGludGVuZGVkIHRvIHJ1biBvbiBhIHNlcGFyYXRlCisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NvciB3aXRoaW4gdGhlIGRldmljZSwgeW91IGNhbiBhZGQgImFyY2giIHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTlNBTkVfU0tJUCc+PGZpbGVuYW1lPklOU0FORV9TS0lQPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgQW5vdGhlciBvcHRpb24gaXMgdG8gY2hlY2sgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb21waWxlJz48ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBsb2cgYW5kIHZlcmlmeSB0aGF0IHRoZSBjb21waWxlciBvcHRpb25zIGJlaW5nIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgYXJlIGNvcnJlY3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1hcmNoLWJpdC1zaXplLW5vLW1hdGNoJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIEJpdCBzaXplIGRpZCBub3QgbWF0Y2ggKCZsdDttYWNoaW5lX2JpdHMmZ3Q7IHRvICZsdDtmaWxlX2JpdHMmZ3Q7KSAmbHQ7cmVjaXBlJmd0OyBvbiAmbHQ7ZmlsZSZndDsgW2FyY2hdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2hlY2tzCisgICAgICAgICAgICAgICAgICAgIHRoZSBFeGVjdXRhYmxlIGFuZCBMaW5rYWJsZSBGb3JtYXQgKEVMRikgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgYml0IHNpemUsIGFuZCBlbmRpYW5uZXNzIG9mIGFueSBiaW5hcmllcyB0byBlbnN1cmUKKyAgICAgICAgICAgICAgICAgICAgdGhleSBtYXRjaCB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB0ZXN0IGZhaWxzIGlmIGFueSBiaW5hcmllcyBkbyBub3QgbWF0Y2ggdGhlIHR5cGUgc2luY2UKKyAgICAgICAgICAgICAgICAgICAgdGhlcmUgd291bGQgYmUgYW4gaW5jb21wYXRpYmlsaXR5LgorICAgICAgICAgICAgICAgICAgICBUaGUgdGVzdCBjb3VsZCBpbmRpY2F0ZSB0aGF0IHRoZSB3cm9uZyBjb21waWxlciBvciBjb21waWxlcgorICAgICAgICAgICAgICAgICAgICBvcHRpb25zIGhhdmUgYmVlbiB1c2VkLgorICAgICAgICAgICAgICAgICAgICBTb21ldGltZXMgc29mdHdhcmUsIGxpa2UgYm9vdGxvYWRlcnMsIG1pZ2h0IG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgYnlwYXNzIHRoaXMgY2hlY2suCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBmaWxlIHlvdSByZWNlaXZlIHRoZSBlcnJvciBmb3IgaXMgZmlybXdhcmUgdGhhdAorICAgICAgICAgICAgICAgICAgICBpcyBub3QgaW50ZW5kZWQgdG8gYmUgZXhlY3V0ZWQgd2l0aGluIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW5nIHN5c3RlbSBvciBpcyBpbnRlbmRlZCB0byBydW4gb24gYSBzZXBhcmF0ZQorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3Igd2l0aGluIHRoZSBkZXZpY2UsIHlvdSBjYW4gYWRkICJhcmNoIiB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU5TQU5FX1NLSVAnPjxmaWxlbmFtZT5JTlNBTkVfU0tJUDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIEFub3RoZXIgb3B0aW9uIGlzIHRvIGNoZWNrIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgbG9nIGFuZCB2ZXJpZnkgdGhhdCB0aGUgY29tcGlsZXIgb3B0aW9ucyBiZWluZyB1c2VkIGFyZQorICAgICAgICAgICAgICAgICAgICBjb3JyZWN0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtYXJjaC1lbmRpYW5uZXNzLW5vLW1hdGNoJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIEVuZGlhbm5lc3MgZGlkIG5vdCBtYXRjaCAoJmx0O21hY2hpbmVfZW5kaWFubmVzcyZndDsgdG8gJmx0O2ZpbGVfZW5kaWFubmVzcyZndDspIG9uICZsdDtmaWxlJmd0OyBbYXJjaF0KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjaGVja3MKKyAgICAgICAgICAgICAgICAgICAgdGhlIEV4ZWN1dGFibGUgYW5kIExpbmthYmxlIEZvcm1hdCAoRUxGKSB0eXBlLCBiaXQKKyAgICAgICAgICAgICAgICAgICAgc2l6ZSwgYW5kIGVuZGlhbm5lc3Mgb2YgYW55IGJpbmFyaWVzIHRvIGVuc3VyZSB0aGV5CisgICAgICAgICAgICAgICAgICAgIG1hdGNoIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHRlc3QgZmFpbHMgaWYgYW55IGJpbmFyaWVzIGRvIG5vdCBtYXRjaCB0aGUgdHlwZSBzaW5jZQorICAgICAgICAgICAgICAgICAgICB0aGVyZSB3b3VsZCBiZSBhbiBpbmNvbXBhdGliaWxpdHkuCisgICAgICAgICAgICAgICAgICAgIFRoZSB0ZXN0IGNvdWxkIGluZGljYXRlIHRoYXQgdGhlIHdyb25nIGNvbXBpbGVyIG9yIGNvbXBpbGVyCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgaGF2ZSBiZWVuIHVzZWQuCisgICAgICAgICAgICAgICAgICAgIFNvbWV0aW1lcyBzb2Z0d2FyZSwgbGlrZSBib290bG9hZGVycywgbWlnaHQgbmVlZCB0bworICAgICAgICAgICAgICAgICAgICBieXBhc3MgdGhpcyBjaGVjay4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGZpbGUgeW91IHJlY2VpdmUgdGhlIGVycm9yIGZvciBpcyBmaXJtd2FyZQorICAgICAgICAgICAgICAgICAgICB0aGF0IGlzIG5vdCBpbnRlbmRlZCB0byBiZSBleGVjdXRlZCB3aXRoaW4gdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpbmcgc3lzdGVtIG9yIGlzIGludGVuZGVkIHRvIHJ1biBvbiBhIHNlcGFyYXRlCisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NvciB3aXRoaW4gdGhlIGRldmljZSwgeW91IGNhbiBhZGQgImFyY2giIHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTlNBTkVfU0tJUCc+PGZpbGVuYW1lPklOU0FORV9TS0lQPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgQW5vdGhlciBvcHRpb24gaXMgdG8gY2hlY2sgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb21waWxlJz48ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBsb2cgYW5kIHZlcmlmeSB0aGF0IHRoZSBjb21waWxlciBvcHRpb25zIGJlaW5nIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgYXJlIGNvcnJlY3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS10ZXh0cmVsJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIEVMRiBiaW5hcnkgJyZsdDtmaWxlJmd0OycgaGFzIHJlbG9jYXRpb25zIGluIC50ZXh0IFt0ZXh0cmVsXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgRUxGIGJpbmFyeSBjb250YWlucyByZWxvY2F0aW9ucyBpbiBpdHMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi50ZXh0PC9maWxlbmFtZT4gc2VjdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2l0dWF0aW9uIGNhbiByZXN1bHQgaW4gYSBwZXJmb3JtYW5jZSBpbXBhY3QKKyAgICAgICAgICAgICAgICAgICAgYXQgcnVudGltZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCB0aGUgd2F5IHRvIHNvbHZlIHRoaXMgcGVyZm9ybWFuY2UgaXNzdWUgaXMgdG8KKyAgICAgICAgICAgICAgICAgICAgYWRkICItZlBJQyIgb3IgIi1mcGljIiB0byB0aGUgY29tcGlsZXIgY29tbWFuZC1saW5lCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBnaXZlbiBzb2Z0d2FyZSB0aGF0IHJlYWRzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DRkxBR1MnPjxmaWxlbmFtZT5DRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgd2hlbiB5b3UgYnVpbGQgaXQsIHlvdSBjb3VsZCBhZGQgdGhlIGZvbGxvd2luZyB0byB5b3VyCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDRkxBR1NfYXBwZW5kID0gIiAtZlBJQyAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGV4dCByZWxvY2F0aW9ucyBhdCBydW50aW1lLCBzZWUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5ha2thZGlhLm9yZy9kcmVwcGVyL3RleHRyZWxvY3MuaHRtbCc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1sZGZsYWdzJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIE5vIEdOVV9IQVNIIGluIHRoZSBlbGYgYmluYXJ5OiAnJmx0O2ZpbGUmZ3Q7JyBbbGRmbGFnc10KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGluZGljYXRlcyB0aGF0IGJpbmFyaWVzIHByb2R1Y2VkIHdoZW4gYnVpbGRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBoYXZlIG5vdCBiZWVuIGxpbmtlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTERGTEFHUyc+PGZpbGVuYW1lPkxERkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyBwcm92aWRlZCBieSB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBDaGVjayB0byBiZSBzdXJlIHRoYXQgdGhlIDxmaWxlbmFtZT5MREZMQUdTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaXMgYmVpbmcgcGFzc2VkIHRvIHRoZSBsaW5rZXIgY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgQSBjb21tb24gd29ya2Fyb3VuZCBmb3IgdGhpcyBzaXR1YXRpb24gaXMgdG8gcGFzcyBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TERGTEFHUzwvZmlsZW5hbWU+IHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfQ0NfQVJDSCc+PGZpbGVuYW1lPlRBUkdFVF9DQ19BUkNIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgcmVjaXBlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLXhvcmctZHJpdmVyLWFiaSc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICBQYWNrYWdlICZsdDtwYWNrYWdlbmFtZSZndDsgY29udGFpbnMgWG9yZyBkcml2ZXIgKCZsdDtkcml2ZXImZ3Q7KSBidXQgbm8geG9yZy1hYmktIGRlcGVuZGVuY2llcyBbeG9yZy1kcml2ZXItYWJpXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgcGFja2FnZSBjb250YWlucyBhbiBYb3JnIGRyaXZlciwgYnV0IGRvZXMgbm90CisgICAgICAgICAgICAgICAgICAgIGhhdmUgYSBjb3JyZXNwb25kaW5nIEFCSSBwYWNrYWdlIGRlcGVuZGVuY3kuCisgICAgICAgICAgICAgICAgICAgIFRoZSB4c2VydmVyLXhvcmcgcmVjaXBlIHByb3ZpZGVzIGRyaXZlciBBQkkgbmFtZXMuCisgICAgICAgICAgICAgICAgICAgIEFsbCBkcml2ZXJzIHNob3VsZCBkZXBlbmQgb24gdGhlIEFCSSB2ZXJzaW9ucyB0aGF0IHRoZXkgaGF2ZQorICAgICAgICAgICAgICAgICAgICBiZWVuIGJ1aWx0IGFnYWluc3QuCisgICAgICAgICAgICAgICAgICAgIERyaXZlciByZWNpcGVzIHRoYXQgaW5jbHVkZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eG9yZy1kcml2ZXItaW5wdXQuaW5jPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnhvcmctZHJpdmVyLXZpZGVvLmluYzwvZmlsZW5hbWU+IHdpbGwKKyAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBnZXQgdGhlc2UgdmVyc2lvbnMuCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IHNob3VsZCBvbmx5IG5lZWQgdG8gZXhwbGljaXRseSBhZGQKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzIHRvIGJpbmFyeSBkcml2ZXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLWluZm9kaXInPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgVGhlIC91c3Ivc2hhcmUvaW5mby9kaXIgZmlsZSBpcyBub3QgbWVhbnQgdG8gYmUgc2hpcHBlZCBpbiBhIHBhcnRpY3VsYXIgcGFja2FnZS4gW2luZm9kaXJdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT4vdXNyL3NoYXJlL2luZm8vZGlyPC9maWxlbmFtZT4gc2hvdWxkIG5vdCBiZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZC4KKyAgICAgICAgICAgICAgICAgICAgQWRkIHRoZSBmb2xsb3dpbmcgbGluZSB0byB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIG9yIHRvIHlvdXIgPGZpbGVuYW1lPmRvX2luc3RhbGxfYXBwZW5kPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIHRoZSByZWNpcGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBybSAke0R9JHtpbmZvZGlyfS9kaXIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtc3ltbGluay10by1zeXNyb290Jz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIFN5bWxpbmsgJmx0O3BhdGgmZ3Q7IGluICZsdDtwYWNrYWdlbmFtZSZndDsgcG9pbnRzIHRvIFRNUERJUiBbc3ltbGluay10by1zeXNyb290XQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgc3ltbGluayBwb2ludHMgaW50bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBob3N0LgorICAgICAgICAgICAgICAgICAgICBTdWNoIHN5bWxpbmtzIHdpbGwgd29yayBvbiB0aGUgaG9zdC4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhleSBhcmUgY2xlYXJseSBpbnZhbGlkIHdoZW4gcnVubmluZyBvbgorICAgICAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGVpdGhlciBjb3JyZWN0IHRoZSBzeW1saW5rIHRvIHVzZSBhIHJlbGF0aXZlCisgICAgICAgICAgICAgICAgICAgIHBhdGggb3IgcmVtb3ZlIHRoZSBzeW1saW5rLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtbGEnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgJmx0O2ZpbGUmZ3Q7IGZhaWxlZCBzYW5pdHkgdGVzdCAod29ya2RpcikgaW4gcGF0aCAmbHQ7cGF0aCZndDsgW2xhXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgPGZpbGVuYW1lPi5sYTwvZmlsZW5hbWU+IGZpbGUgY29udGFpbnMKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBwYXRocy4KKyAgICAgICAgICAgICAgICAgICAgQW55IDxmaWxlbmFtZT4ubGE8L2ZpbGVuYW1lPiBmaWxlIGNvbnRhaW5pbmcgdGhlc2UgcGF0aHMKKyAgICAgICAgICAgICAgICAgICAgaXMgaW5jb3JyZWN0IHNpbmNlIDxmaWxlbmFtZT5saWJ0b29sPC9maWxlbmFtZT4gYWRkcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgY29ycmVjdCBzeXNyb290IHByZWZpeCB3aGVuIHVzaW5nIHRoZSBmaWxlcyBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgICAgICAgIGl0c2VsZi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLXBrZ2NvbmZpZyc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICAmbHQ7ZmlsZSZndDsgZmFpbGVkIHNhbml0eSB0ZXN0ICh0bXBkaXIpIGluIHBhdGggJmx0O3BhdGgmZ3Q7IFtwa2djb25maWddCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNwZWNpZmllZCA8ZmlsZW5hbWU+LnBjPC9maWxlbmFtZT4gZmlsZSBjb250YWlucworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPi88L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBwYXRocy4KKyAgICAgICAgICAgICAgICAgICAgQW55IDxmaWxlbmFtZT4ucGM8L2ZpbGVuYW1lPiBmaWxlIGNvbnRhaW5pbmcgdGhlc2UgcGF0aHMgaXMKKyAgICAgICAgICAgICAgICAgICAgaW5jb3JyZWN0IHNpbmNlIDxmaWxlbmFtZT5wa2ctY29uZmlnPC9maWxlbmFtZT4gaXRzZWxmIGFkZHMKKyAgICAgICAgICAgICAgICAgICAgdGhlIGNvcnJlY3Qgc3lzcm9vdCBwcmVmaXggd2hlbiB0aGUgZmlsZXMgYXJlIGFjY2Vzc2VkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtZGVidWctZGVwcyc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICAmbHQ7cGFja2FnZW5hbWUmZ3Q7IHJkZXBlbmRzIG9uICZsdDtkZWJ1Z19wYWNrYWdlbmFtZSZndDsgW2RlYnVnLWRlcHNdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQSBkZXBlbmRlbmN5IGV4aXN0cyBiZXR3ZWVuIHRoZSBzcGVjaWZpZWQgbm9uLWRiZyBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIChpLmUuIGEgcGFja2FnZSB3aG9zZSBuYW1lIGRvZXMgbm90IGVuZCBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWRiZzwvZmlsZW5hbWU+KSBhbmQgYSBwYWNrYWdlIHRoYXQgaXMgYQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGJnPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kYmc8L2ZpbGVuYW1lPiBwYWNrYWdlcyBjb250YWluCisgICAgICAgICAgICAgICAgICAgIGRlYnVnIHN5bWJvbHMgYW5kIGFyZSBicm91Z2h0IGluIHVzaW5nIHNldmVyYWwKKyAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW50IG1ldGhvZHM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcgdGhlIDxmaWxlbmFtZT5kYmctcGtnczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9JTlNUQUxMJz48ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcyBhIGRlcGVuZGVuY3kgb2YgYW5vdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kYmc8L2ZpbGVuYW1lPiBwYWNrYWdlIHRoYXQgd2FzIGJyb3VnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB1c2luZyBvbmUgb2YgdGhlIGFib3ZlIG1ldGhvZHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVwZW5kZW5jeSBtaWdodCBoYXZlIGJlZW4gYXV0b21hdGljYWxseSBhZGRlZAorICAgICAgICAgICAgICAgICAgICBiZWNhdXNlIHRoZSA8ZmlsZW5hbWU+ZGJnPC9maWxlbmFtZT4gcGFja2FnZSBlcnJvbmVvdXNseQorICAgICAgICAgICAgICAgICAgICBjb250YWlucyBmaWxlcyB0aGF0IGl0IHNob3VsZCBub3QgY29udGFpbiAoZS5nLiBhCisgICAgICAgICAgICAgICAgICAgIG5vbi1zeW1saW5rIDxmaWxlbmFtZT4uc288L2ZpbGVuYW1lPiBmaWxlKSBvciBpdCBtaWdodAorICAgICAgICAgICAgICAgICAgICBoYXZlIGJlZW4gYWRkZWQgbWFudWFsbHkgKGUuZy4gYnkgYWRkaW5nIHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLWRldi1kZXBzJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgICZsdDtwYWNrYWdlbmFtZSZndDsgcmRlcGVuZHMgb24gJmx0O2Rldl9wYWNrYWdlbmFtZSZndDsgW2Rldi1kZXBzXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgZGVwZW5kZW5jeSBleGlzdHMgYmV0d2VlbiB0aGUgc3BlY2lmaWVkIG5vbi1kZXYgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICAoYSBwYWNrYWdlIHdob3NlIG5hbWUgZG9lcyBub3QgZW5kIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZGV2PC9maWxlbmFtZT4pIGFuZCBhIHBhY2thZ2UgdGhhdCBpcyBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXY8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRldjwvZmlsZW5hbWU+IHBhY2thZ2VzIGNvbnRhaW4gZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVycyBhbmQgYXJlIHVzdWFsbHkgYnJvdWdodCBpbiB1c2luZyBzZXZlcmFsIGRpZmZlcmVudAorICAgICAgICAgICAgICAgICAgICBtZXRob2RzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzaW5nIHRoZSA8ZmlsZW5hbWU+ZGV2LXBrZ3M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfSU5TVEFMTCc+PGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXMgYSBkZXBlbmRlbmN5IG9mIGFub3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2PC9maWxlbmFtZT4gcGFja2FnZSB0aGF0IHdhcyBicm91Z2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdXNpbmcgb25lIG9mIHRoZSBhYm92ZSBtZXRob2RzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlcGVuZGVuY3kgbWlnaHQgaGF2ZSBiZWVuIGF1dG9tYXRpY2FsbHkgYWRkZWQgKGJlY2F1c2UKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5kZXY8L2ZpbGVuYW1lPiBwYWNrYWdlIGVycm9uZW91c2x5IGNvbnRhaW5zCisgICAgICAgICAgICAgICAgICAgIGZpbGVzIHRoYXQgaXQgc2hvdWxkIG5vdCBoYXZlIChlLmcuIGEgbm9uLXN5bWxpbmsKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5zbzwvZmlsZW5hbWU+IGZpbGUpIG9yIGl0IG1pZ2h0IGhhdmUgYmVlbiBhZGRlZAorICAgICAgICAgICAgICAgICAgICBtYW51YWxseSAoZS5nLiBieSBhZGRpbmcgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtZGVwLWNtcCc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICAmbHQ7dmFyJmd0O18mbHQ7cGFja2FnZW5hbWUmZ3Q7IGlzIGludmFsaWQ6ICZsdDtjb21wYXJpc29uJmd0OyAoJmx0O3ZhbHVlJmd0OykgICBvbmx5IGNvbXBhcmlzb25zICZsdDssID0sICZndDssICZsdDs9LCBhbmQgJmd0Oz0gYXJlIGFsbG93ZWQgW2RlcC1jbXBdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBhZGRpbmcgYSB2ZXJzaW9uZWQgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXAgdG8gb25lCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBkZXBlbmRlbmN5IHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlNVR0dFU1RTJz48ZmlsZW5hbWU+UlNVR0dFU1RTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlBST1ZJREVTJz48ZmlsZW5hbWU+UlBST1ZJREVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFUExBQ0VTJz48ZmlsZW5hbWU+UlJFUExBQ0VTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkNPTkZMSUNUUyc+PGZpbGVuYW1lPlJDT05GTElDVFM8L2ZpbGVuYW1lPjwvbGluaz4pLAorICAgICAgICAgICAgICAgICAgICB5b3UgbXVzdCBvbmx5IHVzZSB0aGUgbmFtZWQgY29tcGFyaXNvbiBvcGVyYXRvcnMuCisgICAgICAgICAgICAgICAgICAgIENoYW5nZSB0aGUgdmVyc2lvbmVkIGRlcGVuZGVuY3kgdmFsdWVzIHlvdSBhcmUgYWRkaW5nCisgICAgICAgICAgICAgICAgICAgIHRvIG1hdGNoIHRob3NlIGxpc3RlZCBpbiB0aGUgbWVzc2FnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLWNvbXBpbGUtaG9zdC1wYXRoJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgICZsdDtyZWNpcGVuYW1lJmd0OzogVGhlIGNvbXBpbGUgbG9nIGluZGljYXRlcyB0aGF0IGhvc3QgaW5jbHVkZSBhbmQvb3IgbGlicmFyeSBwYXRocyB3ZXJlIHVzZWQuIFBsZWFzZSBjaGVjayB0aGUgbG9nICcmbHQ7bG9nZmlsZSZndDsnIGZvciBtb3JlIGluZm9ybWF0aW9uLiBbY29tcGlsZS1ob3N0LXBhdGhdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvZyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb21waWxlJz48ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIGluZGljYXRlcyB0aGF0IHBhdGhzIG9uIHRoZSBob3N0IHdlcmUgc2VhcmNoZWQKKyAgICAgICAgICAgICAgICAgICAgZm9yIGZpbGVzLCB3aGljaCBpcyBub3QgYXBwcm9wcmlhdGUgd2hlbiBjcm9zcy1jb21waWxpbmcuCisgICAgICAgICAgICAgICAgICAgIExvb2sgZm9yICJpcyB1bnNhZmUgZm9yIGNyb3NzLWNvbXBpbGF0aW9uIiBvciAiQ1JPU1MgQ09NUElMRQorICAgICAgICAgICAgICAgICAgICBCYWRuZXNzIiBpbiB0aGUgc3BlY2lmaWVkIGxvZyBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtaW5zdGFsbC1ob3N0LXBhdGgnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgJmx0O3JlY2lwZW5hbWUmZ3Q7OiBUaGUgaW5zdGFsbCBsb2cgaW5kaWNhdGVzIHRoYXQgaG9zdCBpbmNsdWRlIGFuZC9vciBsaWJyYXJ5IHBhdGhzIHdlcmUgdXNlZC4gUGxlYXNlIGNoZWNrIHRoZSBsb2cgJyZsdDtsb2dmaWxlJmd0OycgZm9yIG1vcmUgaW5mb3JtYXRpb24uIFtpbnN0YWxsLWhvc3QtcGF0aF0KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgbG9nIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgaW5kaWNhdGVzIHRoYXQgcGF0aHMgb24gdGhlIGhvc3Qgd2VyZSBzZWFyY2hlZAorICAgICAgICAgICAgICAgICAgICBmb3IgZmlsZXMsIHdoaWNoIGlzIG5vdCBhcHByb3ByaWF0ZSB3aGVuIGNyb3NzLWNvbXBpbGluZy4KKyAgICAgICAgICAgICAgICAgICAgTG9vayBmb3IgImlzIHVuc2FmZSBmb3IgY3Jvc3MtY29tcGlsYXRpb24iCisgICAgICAgICAgICAgICAgICAgIG9yICJDUk9TUyBDT01QSUxFIEJhZG5lc3MiIGluIHRoZSBzcGVjaWZpZWQgbG9nIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1hdXRvY29uZi1sb2cnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgVGhpcyBhdXRvY29uZiBsb2cgaW5kaWNhdGVzIGVycm9ycywgaXQgbG9va2VkIGF0IGhvc3QgaW5jbHVkZSBhbmQvb3IgbGlicmFyeSBwYXRocyB3aGlsZSBkZXRlcm1pbmluZyBzeXN0ZW0gY2FwYWJpbGl0aWVzLiBSZXJ1biBjb25maWd1cmUgdGFzayBhZnRlciBmaXhpbmcgdGhpcy4gVGhlIHBhdGggd2FzICcmbHQ7cGF0aCZndDsnCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvZyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayBpbmRpY2F0ZXMgdGhhdCBwYXRocyBvbiB0aGUgaG9zdCB3ZXJlIHNlYXJjaGVkCisgICAgICAgICAgICAgICAgICAgIGZvciBmaWxlcywgd2hpY2ggaXMgbm90IGFwcHJvcHJpYXRlIHdoZW4gY3Jvc3MtY29tcGlsaW5nLgorICAgICAgICAgICAgICAgICAgICBMb29rIGZvciAiaXMgdW5zYWZlIGZvciBjcm9zcy1jb21waWxhdGlvbiIgb3IKKyAgICAgICAgICAgICAgICAgICAgIkNST1NTIENPTVBJTEUgQmFkbmVzcyIgaW4gdGhlIHNwZWNpZmllZCBsb2cgZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLXBrZ25hbWUnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgJmx0O3BhY2thZ2VuYW1lJmd0OyBkb2Vzbid0IG1hdGNoIHRoZSBbYS16MC05ListXSsgcmVnZXggW3BrZ25hbWVdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNvbnZlbnRpb24gd2l0aGluIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIChzb21ldGltZXMgZW5mb3JjZWQgYnkgdGhlIHBhY2thZ2UgbWFuYWdlciBpdHNlbGYpIGlzIHRvCisgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUgdGhhdCBwYWNrYWdlIG5hbWVzIGFyZSBhbGwgbG93ZXIgY2FzZQorICAgICAgICAgICAgICAgICAgICBhbmQgdG8gYWxsb3cgYSByZXN0cmljdGVkIHNldCBvZiBjaGFyYWN0ZXJzLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3VyIHJlY2lwZSBuYW1lIGRvZXMgbm90IG1hdGNoIHRoaXMsIG9yIHlvdSBhZGQKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGhhdCBkbyBub3QgY29uZm9ybSB0byB0aGUgY29udmVudGlvbiwgdGhlbiB5b3UKKyAgICAgICAgICAgICAgICAgICAgd2lsbCByZWNlaXZlIHRoaXMgZXJyb3IuCisgICAgICAgICAgICAgICAgICAgIFJlbmFtZSB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgT3IsIGlmIHlvdSBoYXZlIGFkZGVkIGEgbm9uLWNvbmZvcm1pbmcgcGFja2FnZSBuYW1lIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+LCBjaGFuZ2UgdGhlIHBhY2thZ2UgbmFtZQorICAgICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZWx5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtdW5rbm93bi1jb25maWd1cmUtb3B0aW9uJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgICZsdDtyZWNpcGUmZ3Q7OiBjb25maWd1cmUgd2FzIHBhc3NlZCB1bnJlY29nbml6ZWQgb3B0aW9uczogJmx0O29wdGlvbnMmZ3Q7IFt1bmtub3duLWNvbmZpZ3VyZS1vcHRpb25dCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNvbmZpZ3VyZSBzY3JpcHQgaXMgcmVwb3J0aW5nIHRoYXQgdGhlIHNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgICBvcHRpb25zIGFyZSB1bnJlY29nbml6ZWQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2l0dWF0aW9uIGNvdWxkIGJlIGJlY2F1c2UgdGhlIG9wdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgd2VyZSBwcmV2aW91c2x5IHZhbGlkIGJ1dCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgc2NyaXB0LgorICAgICAgICAgICAgICAgICAgICBPciwgdGhlcmUgd2FzIGEgbWlzdGFrZSB3aGVuIHRoZSBvcHRpb25zIHdlcmUgYWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZXJlIGlzIGFub3RoZXIgb3B0aW9uIHRoYXQgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB1bnN1cmUsIGNvbnN1bHQgdGhlIHVwc3RyZWFtIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50YXRpb24sIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Li9jb25maWd1cmUgLS1oZWxwPC9maWxlbmFtZT4gb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIHVwc3RyZWFtIGNoYW5nZSBsb2cgb3IgcmVsZWFzZSBub3Rlcy4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSB3b3JrZWQgb3V0IHdoYXQgdGhlIGFwcHJvcHJpYXRlCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZSBpcywgeW91IGNhbiB1cGRhdGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FQ09ORic+PGZpbGVuYW1lPkVYVFJBX09FQ09ORjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBvciB0aGUgaW5kaXZpZHVhbAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRUNPTkZJRyc+PGZpbGVuYW1lPlBBQ0tBR0VDT05GSUc8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uIHZhbHVlcyBhY2NvcmRpbmdseS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLXBuLW92ZXJyaWRlcyc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICBSZWNpcGUgJmx0O3JlY2lwZWZpbGUmZ3Q7IGhhcyBQTiBvZiAiJmx0O3JlY2lwZW5hbWUmZ3Q7IiB3aGljaCBpcyBpbiBPVkVSUklERVMsIHRoaXMgY2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGJlaGF2aW9yLiBbcG4tb3ZlcnJpZGVzXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgcmVjaXBlIGhhcyBhIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0aGF0IGFwcGVhcnMgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU9WRVJSSURFUyc+PGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgSWYgYSByZWNpcGUgaXMgbmFtZWQgc3VjaCB0aGF0IGl0cyA8ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSBtYXRjaGVzIHNvbWV0aGluZyBhbHJlYWR5IGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiAoZS5nLiA8ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBoYXBwZW5zIHRvIGJlIHRoZSBzYW1lIGFzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPJz48ZmlsZW5hbWU+RElTVFJPPC9maWxlbmFtZT48L2xpbms+KSwKKyAgICAgICAgICAgICAgICAgICAgaXQgY2FuIGhhdmUgdW5leHBlY3RlZCBjb25zZXF1ZW5jZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBhc3NpZ25tZW50cyBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU18ke1BOfSA9ICJ4eXoiPC9maWxlbmFtZT4gZWZmZWN0aXZlbHkKKyAgICAgICAgICAgICAgICAgICAgdHVybiBpbnRvIDxmaWxlbmFtZT5GSUxFUyA9ICJ4eXoiPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFJlbmFtZSB5b3VyIHJlY2lwZSAob3IgaWYgPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4gaXMgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgc2V0IGV4cGxpY2l0bHksIGNoYW5nZSB0aGUgPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4gdmFsdWUpIHNvCisgICAgICAgICAgICAgICAgICAgIHRoYXQgdGhlIGNvbmZsaWN0IGRvZXMgbm90IG9jY3VyLgorICAgICAgICAgICAgICAgICAgICBTZWUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTJz48ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1wa2d2YXJjaGVjayc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICAmbHQ7cmVjaXBlZmlsZSZndDs6IFZhcmlhYmxlICZsdDt2YXJpYWJsZSZndDsgaXMgc2V0IGFzIG5vdCBiZWluZyBwYWNrYWdlIHNwZWNpZmljLCBwbGVhc2UgZml4IHRoaXMuIFtwa2d2YXJjaGVja10KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDZXJ0YWluIHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlNVR0dFU1RTJz48ZmlsZW5hbWU+UlNVR0dFU1RTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkNPTkZMSUNUUyc+PGZpbGVuYW1lPlJDT05GTElDVFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUFJPVklERVMnPjxmaWxlbmFtZT5SUFJPVklERVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVQTEFDRVMnPjxmaWxlbmFtZT5SUkVQTEFDRVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3ByZWluc3Q8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZ19wb3N0aW5zdDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3ByZXJtPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2dfcG9zdHJtPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQUxMT1dfRU1QVFknPjxmaWxlbmFtZT5BTExPV19FTVBUWTwvZmlsZW5hbWU+PC9saW5rPikKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGFsd2F5cyBiZSBzZXQgc3BlY2lmaWMgdG8gYSBwYWNrYWdlIChpLmUuIHRoZXkKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIHNldCB3aXRoIGEgcGFja2FnZSBuYW1lIG92ZXJyaWRlIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJERVBFTkRTXyR7UE59ID0gInZhbHVlIjwvZmlsZW5hbWU+IHJhdGhlciB0aGFuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SREVQRU5EUyA9ICJ2YWx1ZSI8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSByZWNlaXZlIHRoaXMgZXJyb3IsIGNvcnJlY3QgYW55IGFzc2lnbm1lbnRzIHRvIHRoZXNlCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB3aXRoaW4geW91ciByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1hbHJlYWR5LXN0cmlwcGVkJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIEZpbGUgJyZsdDtmaWxlJmd0OycgZnJvbSAmbHQ7cmVjaXBlbmFtZSZndDsgd2FzIGFscmVhZHkgc3RyaXBwZWQsIHRoaXMgd2lsbCBwcmV2ZW50IGZ1dHVyZSBkZWJ1Z2dpbmchIFthbHJlYWR5LXN0cmlwcGVkXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFByb2R1Y2VkIGJpbmFyaWVzIGhhdmUgYWxyZWFkeSBiZWVuIHN0cmlwcGVkIHByaW9yIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gZXh0cmFjdGluZyBkZWJ1ZyBzeW1ib2xzLgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBjb21tb24gZm9yIHVwc3RyZWFtIHNvZnR3YXJlIHByb2plY3RzIHRvIGRlZmF1bHQgdG8KKyAgICAgICAgICAgICAgICAgICAgc3RyaXBwaW5nIGRlYnVnIHN5bWJvbHMgZm9yIG91dHB1dCBiaW5hcmllcy4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgZm9yIGRlYnVnZ2luZyB0byB3b3JrIG9uIHRoZSB0YXJnZXQgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1kYmc8L2ZpbGVuYW1lPiBwYWNrYWdlcywgdGhpcyBzdHJpcHBpbmcgbXVzdCBiZQorICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHRoZSBidWlsZCBzeXN0ZW0gdXNlZCBieSB0aGUgc29mdHdhcmUgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgYnVpbHQsIGRpc2FibGluZyB0aGlzIHN0cmlwcGluZyBjb3VsZCBiZSBhcyBlYXN5IGFzCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnlpbmcgYW4gYWRkaXRpb25hbCBjb25maWd1cmUgb3B0aW9uLgorICAgICAgICAgICAgICAgICAgICBJZiBub3QsIGRpc2FibGluZyBzdHJpcHBpbmcgbWlnaHQgaW52b2x2ZSBwYXRjaGluZworICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQgc2NyaXB0cy4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhlIGxhdHRlciBjYXNlLCBsb29rIGZvciByZWZlcmVuY2VzIHRvICJzdHJpcCIgb3IKKyAgICAgICAgICAgICAgICAgICAgIlNUUklQIiwgb3IgdGhlICItcyIgb3IgIi1TIiBjb21tYW5kLWxpbmUgb3B0aW9ucyBiZWluZworICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgb24gdGhlIGxpbmtlciBjb21tYW5kIGxpbmUgKHBvc3NpYmx5CisgICAgICAgICAgICAgICAgICAgIHRocm91Z2ggdGhlIGNvbXBpbGVyIGNvbW1hbmQgbGluZSBpZiBwcmVjZWRlZCB3aXRoICItV2wsIikuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsaW5nIHN0cmlwcGluZyBoZXJlIGRvZXMgbm90IG1lYW4gdGhhdCB0aGUgZmluYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VkIGJpbmFyaWVzIHdpbGwgYmUgdW5zdHJpcHBlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc3BsaXRzIG91dCBkZWJ1ZworICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9scyB0byB0aGUgPGZpbGVuYW1lPi1kYmc8L2ZpbGVuYW1lPiBwYWNrYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgaXQgd2lsbCB0aGVuIHN0cmlwIHRoZSBzeW1ib2xzIGZyb20gdGhlIGJpbmFyaWVzLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1wYWNrYWdlcy1saXN0Jz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgICZsdDtwYWNrYWdlbmFtZSZndDsgaXMgbGlzdGVkIGluIFBBQ0tBR0VTIG11bHRpcGxlIHRpbWVzLCB0aGlzIGxlYWRzIHRvIHBhY2thZ2luZyBlcnJvcnMuIFtwYWNrYWdlcy1saXN0XQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFBhY2thZ2UgbmFtZXMgbXVzdCBhcHBlYXIgb25seSBvbmNlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRVMnPjxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IG1pZ2h0IHJlY2VpdmUgdGhpcyBlcnJvciBpZiB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gYWRkIGEKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSB0byA8ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPiB0aGF0IGlzCisgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgaW4gdGhlIHZhcmlhYmxlJ3MgdmFsdWUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1maWxlcy1pbnZhbGlkJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIEZJTEVTIHZhcmlhYmxlIGZvciBwYWNrYWdlICZsdDtwYWNrYWdlbmFtZSZndDsgY29udGFpbnMgJy8vJyB3aGljaCBpcyBpbnZhbGlkLiBBdHRlbXB0aW5nIHRvIGZpeCB0aGlzIGJ1dCB5b3Ugc2hvdWxkIGNvcnJlY3QgdGhlIG1ldGFkYXRhLiBbZmlsZXMtaW52YWxpZF0KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3RyaW5nICIvLyIgaXMgaW52YWxpZCBpbiBhIFVuaXggcGF0aC4KKyAgICAgICAgICAgICAgICAgICAgQ29ycmVjdCBhbGwgb2NjdXJyZW5jZXMgd2hlcmUgdGhpcyBzdHJpbmcgYXBwZWFycyBpbiBhCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHNvIHRoYXQgdGhlcmUgaXMgb25seSBhIHNpbmdsZSAiLyIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1pbnN0YWxsZWQtdnMtc2hpcHBlZCc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICAgJmx0O3JlY2lwZW5hbWUmZ3Q7OiBGaWxlcy9kaXJlY3RvcmllcyB3ZXJlIGluc3RhbGxlZCBidXQgbm90IHNoaXBwZWQgW2luc3RhbGxlZC12cy1zaGlwcGVkXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZpbGVzIGhhdmUgYmVlbiBpbnN0YWxsZWQgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayBidXQgaGF2ZSBub3QgYmVlbiBpbmNsdWRlZCBpbiBhbnkgcGFja2FnZSBieSB3YXkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBGaWxlcyB0aGF0IGRvIG5vdCBhcHBlYXIgaW4gYW55IHBhY2thZ2UgY2Fubm90IGJlIHByZXNlbnQgaW4KKyAgICAgICAgICAgICAgICAgICAgYW4gaW1hZ2UgbGF0ZXIgb24gaW4gdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCB0aGUgZmlsZXMgdG8gPGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT4gZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgeW91IHdhbnQgdGhlbSB0byBhcHBlYXIgaW4gKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVNfJHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPiBmb3IgdGhlIG1haW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWxldGUgdGhlIGZpbGVzIGF0IHRoZSBlbmQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiB0YXNrIGlmIHRoZSBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBub3QgbmVlZGVkIGluIGFueSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLW9sZC1hbmQtbmV3LXBhY2thZ2UtYW5kLXZlcnNpb24tbmFtZXMnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgJmx0O29sZHBhY2thZ2UmZ3Q7LSZsdDtvbGRwa2d2ZXJzaW9uJmd0OyB3YXMgcmVnaXN0ZXJlZCBhcyBzaGxpYiBwcm92aWRlciBmb3IgJmx0O2xpYnJhcnkmZ3Q7LCBjaGFuZ2luZyBpdCB0byAmbHQ7bmV3cGFja2FnZSZndDstJmx0O25ld3BrZ3ZlcnNpb24mZ3Q7IGJlY2F1c2UgaXQgd2FzIGJ1aWx0IGxhdGVyCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXNzYWdlIG1lYW5zIHRoYXQgYm90aAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Jmx0O29sZHBhY2thZ2UmZ3Q7PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4mbHQ7bmV3cGFja2FnZSZndDs8L2ZpbGVuYW1lPiBwcm92aWRlIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgc2hhcmVkIGxpYnJhcnkuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZXhwZWN0IHRoaXMgbWVzc2FnZSB3aGVuIGEgcmVjaXBlIGhhcyBiZWVuIHJlbmFtZWQuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHRoYXQgaXMgbm90IHRoZSBjYXNlLCB0aGUgbWVzc2FnZSBtaWdodCBpbmRpY2F0ZQorICAgICAgICAgICAgICAgICAgICB0aGF0IGEgcHJpdmF0ZSB2ZXJzaW9uIG9mIGEgbGlicmFyeSBpcyBiZWluZyBlcnJvbmVvdXNseQorICAgICAgICAgICAgICAgICAgICBwaWNrZWQgdXAgYXMgdGhlIHByb3ZpZGVyIGZvciBhIGNvbW1vbiBsaWJyYXJ5LgorICAgICAgICAgICAgICAgICAgICBJZiB0aGF0IGlzIHRoZSBjYXNlLCB5b3Ugc2hvdWxkIGFkZCB0aGUgbGlicmFyeSdzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uc288L2ZpbGVuYW1lPiBmaWxlIG5hbWUgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSSVZBVEVfTElCUyc+PGZpbGVuYW1lPlBSSVZBVEVfTElCUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgcmVjaXBlIHRoYXQgcHJvdmlkZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIHByaXZhdGUgdmVyc2lvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKzwhLS0KK0hlcmUgYXJlIHNvbWUgbWVzc2FnZXMgdGhhdCBtaWdodCBiZSBkb2N1bWVudGVkIGluIHRoZSBmdXR1cmUuCitSaWdodCBub3cgd2UgYXJlIG5vdCBkb2N1bWVudGluZyB0aGVtIGJlY2F1c2UgdGhlIFFBIGNoZWNrcyBhcmUgbm90CitlbmFibGVkIGJ5IGRlZmF1bHQ6CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERlc2t0b3AgZmlsZSBpc3N1ZTogJmx0O2Vycm9yJmd0OyBbZGVza3RvcF0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgTkVFRCBBIERFU0NSSVBUSU9OIEFORCBTT0xVVElPTgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICZsdDtwYWNrYWdlbmFtZSZndDs6ICZsdDtmaWxlJmd0OywgaW5zdGFsbGVkIGluIHRoZSBiYXNlX3ByZWZpeCwgcmVxdWlyZXMgYSBzaGFyZWQgbGlicmFyeSB1bmRlciBleGVjX3ByZWZpeCAoJmx0O2V4ZWNfcHJlZml4JnQ7ZykgW3Vuc2FmZS1yZWZlcmVuY2VzLWluLWJpbmFyaWVzXQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBORUVEIEEgREVTQ1JJUFRJT04gQU5EIFNPTFVUSU9OCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJmx0O3BhY2thZ2VuYW1lJmd0OzogRm91bmQgYSByZWZlcmVuY2UgdG8gJmx0O2V4ZWNfcHJlZml4Jmd0Oy8gaW4gJmx0O3BhdGgmZ3Q7IC0gU2hlbGwgc2NyaXB0cyBpbiBiYXNlX2JpbmRpciBhbmQgYmFzZV9zYmluZGlyIHNob3VsZCBub3QgcmVmZXJlbmNlIGFueXRoaW5nIGluIGV4ZWNfcHJlZml4IFt1bnNhZmUtcmVmZXJlbmNlcy1pbi1zY3JpcHRzXQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBORUVEIEEgREVTQ1JJUFRJT04gQU5EIFNPTFVUSU9OCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKy0tPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nY29uZmlndXJpbmctYW5kLWRpc2FibGluZy1xYS1jaGVja3MnPgorICAgIDx0aXRsZT5Db25maWd1cmluZyBhbmQgRGlzYWJsaW5nIFFBIENoZWNrczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiBjb25maWd1cmUgdGhlIFFBIGNoZWNrcyBnbG9iYWxseSBzbyB0aGF0IHNwZWNpZmljIGNoZWNrCisgICAgICAgIGZhaWx1cmVzIGVpdGhlciByYWlzZSBhIHdhcm5pbmcgb3IgYW4gZXJyb3IgbWVzc2FnZSwgdXNpbmcgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1XQVJOX1FBJz48ZmlsZW5hbWU+V0FSTl9RQTwvZmlsZW5hbWU+PC9saW5rPiBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVSUk9SX1FBJz48ZmlsZW5hbWU+RVJST1JfUUE8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGVzLCByZXNwZWN0aXZlbHkuCisgICAgICAgIFlvdSBjYW4gYWxzbyBkaXNhYmxlIGNoZWNrcyB3aXRoaW4gYSBwYXJ0aWN1bGFyIHJlY2lwZSB1c2luZworICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU5TQU5FX1NLSVAnPjxmaWxlbmFtZT5JTlNBTkVfU0tJUDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB3b3JrIHdpdGggdGhlIFFBIGNoZWNrcywgc2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaW5zYW5lJz48ZmlsZW5hbWU+aW5zYW5lLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDxub3RlPjx0aXRsZT5UaXA8L3RpdGxlPgorICAgICAgICAgICAgUGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBRQSBjaGVja3MgZXhpc3QgaW4gb3JkZXIgdG8KKyAgICAgICAgICAgIGRldGVjdCByZWFsIG9yIHBvdGVudGlhbCBwcm9ibGVtcyBpbiB0aGUgcGFja2FnZWQgb3V0cHV0LgorICAgICAgICAgICAgU28gZXhlcmNpc2UgY2F1dGlvbiB3aGVuIGRpc2FibGluZyB0aGVzZSBjaGVja3MuCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1zdHJ1Y3R1cmUueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXN0cnVjdHVyZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhlMzkyMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1zdHJ1Y3R1cmUueG1sCkBAIC0wLDAgKzEsMTE1MyBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J3JlZi1zdHJ1Y3R1cmUnPgorCis8dGl0bGU+U291cmNlIERpcmVjdG9yeSBTdHJ1Y3R1cmU8L3RpdGxlPgorCis8cGFyYT4KKyAgICBUaGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+IGNvbnNpc3RzIG9mIHNldmVyYWwgY29tcG9uZW50cy4KKyAgICBVbmRlcnN0YW5kaW5nIHRoZW0gYW5kIGtub3dpbmcgd2hlcmUgdGhleSBhcmUgbG9jYXRlZCBpcyBrZXkgdG8gdXNpbmcgdGhlIFlvY3RvIFByb2plY3Qgd2VsbC4KKyAgICBUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIHRoZSBTb3VyY2UgRGlyZWN0b3J5IGFuZCBnaXZlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdmFyaW91cworICAgIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KKzwvcGFyYT4KKworPHBhcmE+CisgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBlc3RhYmxpc2ggYSBsb2NhbCBTb3VyY2UgRGlyZWN0b3J5IG9uIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtLCBzZWUgdGhlCisgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2dldHRpbmctc2V0dXAnPkdldHRpbmcgU2V0IFVwPC91bGluaz4iCisgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCis8L3BhcmE+CisKKzxub3RlPgorICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgZmlsZSBvciBkaXJlY3RvcnkgbmFtZXMgdGhhdAorICAgIGNvbnRhaW4gc3BhY2VzLgorICAgIEJlIHN1cmUgdGhhdCB0aGUgU291cmNlIERpcmVjdG9yeSB5b3UgdXNlIGRvZXMgbm90IGNvbnRhaW4gdGhlc2UgdHlwZXMKKyAgICBvZiBuYW1lcy4KKzwvbm90ZT4KKworPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1jb3JlJz4KKyAgICA8dGl0bGU+VG9wLUxldmVsIENvcmUgQ29tcG9uZW50czwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgdG9wLWxldmVsIGNvbXBvbmVudHMgb2YgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWNvcmUtYml0YmFrZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+Yml0YmFrZS88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBpbmNsdWRlcyBhIGNvcHkgb2YgQml0QmFrZSBmb3IgZWFzZSBvZiB1c2UuCisgICAgICAgICAgICBUaGUgY29weSB1c3VhbGx5IG1hdGNoZXMgdGhlIGN1cnJlbnQgc3RhYmxlIEJpdEJha2UgcmVsZWFzZSBmcm9tCisgICAgICAgICAgICB0aGUgQml0QmFrZSBwcm9qZWN0LgorICAgICAgICAgICAgQml0QmFrZSwgYQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4KKyAgICAgICAgICAgIGludGVycHJldGVyLCByZWFkcyB0aGUgWW9jdG8gUHJvamVjdCBNZXRhZGF0YSBhbmQgcnVucyB0aGUgdGFza3MKKyAgICAgICAgICAgIGRlZmluZWQgYnkgdGhhdCBkYXRhLgorICAgICAgICAgICAgRmFpbHVyZXMgYXJlIHVzdWFsbHkgZnJvbSB0aGUgTWV0YWRhdGEgYW5kIG5vdCBmcm9tIEJpdEJha2UgaXRzZWxmLgorICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBtb3N0IHVzZXJzIGRvIG5vdCBuZWVkIHRvIHdvcnJ5IGFib3V0IEJpdEJha2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4geW91IHJ1biB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kLCB0aGUKKyAgICAgICAgICAgIG1haW4gQml0QmFrZSBleGVjdXRhYmxlLCB3aGljaCByZXNpZGVzIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UvYmluLzwvZmlsZW5hbWU+IGRpcmVjdG9yeSwgc3RhcnRzLgorICAgICAgICAgICAgU291cmNpbmcgYW4gZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IChlLmcuCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSJzdHJ1Y3R1cmUtY29yZS1zY3JpcHQiPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgb3IKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9InN0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQiPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICBwbGFjZXMgdGhlIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS9iaW48L2ZpbGVuYW1lPiBkaXJlY3RvcmllcyAoaW4gdGhhdCBvcmRlcikgaW50bworICAgICAgICAgICAgdGhlIHNoZWxsJ3MgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQml0QmFrZSwgc2VlIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyc+Qml0QmFrZSBVc2VyIE1hbnVhbDwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1jb3JlLWJ1aWxkJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB1c2VyIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIHRoZSBvdXRwdXQKKyAgICAgICAgICAgIGdlbmVyYXRlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpbiBpdHMgc3RhbmRhcmQgY29uZmlndXJhdGlvbiB3aGVyZQorICAgICAgICAgICAgdGhlIHNvdXJjZSB0cmVlIGlzIGNvbWJpbmVkIHdpdGggdGhlIG91dHB1dC4KKyAgICAgICAgICAgIFRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICBpcyBjcmVhdGVkIGluaXRpYWxseSB3aGVuIHlvdSA8ZmlsZW5hbWU+c291cmNlPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0CisgICAgICAgICAgICAoaS5lLgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIG9yCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBwbGFjZSBvdXRwdXQgYW5kIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIGZpbGVzIGluIGEgZGlyZWN0b3J5IHNlcGFyYXRlIGZyb20gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIGJ5IHByb3ZpZGluZyBhIGRpcmVjdG9yeSBuYW1lIHdoZW4geW91IDxmaWxlbmFtZT5zb3VyY2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgdGhlIHNldHVwIHNjcmlwdC4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBzZXBhcmF0aW5nIG91dHB1dCBmcm9tIHlvdXIgbG9jYWwKKyAgICAgICAgICAgIFNvdXJjZSBEaXJlY3RvcnkgZmlsZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb25zLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2hhbmRib29rJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb2N1bWVudGF0aW9uLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGhvbGRzIHRoZSBzb3VyY2UgZm9yIHRoZSBZb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24KKyAgICAgICAgICAgIGFzIHdlbGwgYXMgdGVtcGxhdGVzIGFuZCB0b29scyB0aGF0IGFsbG93IHlvdSB0byBnZW5lcmF0ZSBQREYgYW5kIEhUTUwKKyAgICAgICAgICAgIHZlcnNpb25zIG9mIHRoZSBtYW51YWxzLgorICAgICAgICAgICAgRWFjaCBtYW51YWwgaXMgY29udGFpbmVkIGluIGEgc3ViLWZvbGRlci4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZmlsZXMgZm9yIHRoaXMgbWFudWFsIHJlc2lkZSBpbgorICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5yZWYtbWFudWFsLzwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtY29yZS1tZXRhJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBPcGVuRW1iZWRkZWQgQ29yZSBtZXRhZGF0YS4KKyAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaG9sZHMgcmVjaXBlcywgY29tbW9uIGNsYXNzZXMsIGFuZCBtYWNoaW5lCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZvciBlbXVsYXRlZCB0YXJnZXRzICg8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXVhcm08L2ZpbGVuYW1lPiwgYW5kIHNvIGZvcnRoLikKKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtY29yZS1tZXRhLXlvY3RvJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhLXlvY3RvLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgUG9reQorICAgICAgICAgICAgcmVmZXJlbmNlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtY29yZS1tZXRhLXlvY3RvLWJzcCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS15b2N0by1ic3AvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIFlvY3RvIFByb2plY3QgcmVmZXJlbmNlCisgICAgICAgICAgICBoYXJkd2FyZSBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1BzKS4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEJTUHMsIHNlZSB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7Jz5Zb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQKKyAgICAgICAgICAgIFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1zZWxmdGVzdCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS1zZWxmdGVzdC88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBhZGRzIGFkZGl0aW9uYWwgcmVjaXBlcyBhbmQgYXBwZW5kIGZpbGVzCisgICAgICAgICAgICB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgc2VsZnRlc3RzIHRvIHZlcmlmeSB0aGUgYmVoYXZpb3IKKyAgICAgICAgICAgIG9mIHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBkbyBub3QgaGF2ZSB0byBhZGQgdGhpcyBsYXllciB0byB5b3VyCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUgdW5sZXNzIHlvdSB3YW50IHRvIHJ1biB0aGUKKyAgICAgICAgICAgIHNlbGZ0ZXN0cy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1za2VsZXRvbic+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS1za2VsZXRvbi88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0ZW1wbGF0ZSByZWNpcGVzIGZvciBCU1AgYW5kIGtlcm5lbCBkZXZlbG9wbWVudC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHRzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5zY3JpcHRzLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHZhcmlvdXMgaW50ZWdyYXRpb24gc2NyaXB0cyB0aGF0IGltcGxlbWVudAorICAgICAgICAgICAgZXh0cmEgZnVuY3Rpb25hbGl0eSBpbiB0aGUgWW9jdG8gUHJvamVjdCBlbnZpcm9ubWVudCAoZS5nLiBRRU1VIHNjcmlwdHMpLgorICAgICAgICAgICAgVGhlIDxsaW5rIGxpbmtlbmQ9InN0cnVjdHVyZS1jb3JlLXNjcmlwdCI+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHNjcmlwdHMgYXBwZW5kIHRoaXMgZGlyZWN0b3J5IHRvIHRoZSBzaGVsbCdzCisgICAgICAgICAgICA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IGVudmlyb25tZW50IHZhcmlhYmxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaGFzIHVzZWZ1bCBzY3JpcHRzIHRoYXQgYXNzaXN0IGluIGNvbnRyaWJ1dGluZworICAgICAgICAgICAgYmFjayB0byB0aGUgWW9jdG8gUHJvamVjdCwgc3VjaCBhcyA8ZmlsZW5hbWU+Y3JlYXRlLXB1bGwtcmVxdWVzdDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPnNlbmQtcHVsbC1yZXF1ZXN0PC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2NyaXB0IGlzIG9uZSBvZiB0d28gc2NyaXB0cyB0aGF0IHNldCB1cCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgb3RoZXIgc2NyaXB0LCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFJ1bm5pbmcgdGhpcyBzY3JpcHQgd2l0aCB0aGUgPGZpbGVuYW1lPnNvdXJjZTwvZmlsZW5hbWU+IGNvbW1hbmQgaW4KKyAgICAgICAgICAgIGEgc2hlbGwgbWFrZXMgY2hhbmdlcyB0byA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IGFuZCBzZXRzIG90aGVyCisgICAgICAgICAgICBjb3JlIEJpdEJha2UgdmFyaWFibGVzIGJhc2VkIG9uIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorICAgICAgICAgICAgWW91IG5lZWQgdG8gcnVuIGFuIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBiZWZvcmUgcnVubmluZyBCaXRCYWtlCisgICAgICAgICAgICBjb21tYW5kcy4KKyAgICAgICAgICAgIFRoZSBzY3JpcHQgdXNlcyBvdGhlciBzY3JpcHRzIHdpdGhpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4gZGlyZWN0b3J5IHRvIGRvIHRoZSBidWxrIG9mIHRoZSB3b3JrLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSBydW4gdGhpcyBzY3JpcHQsIHlvdXIgWW9jdG8gUHJvamVjdCBlbnZpcm9ubWVudCBpcyBzZXQKKyAgICAgICAgICAgIHVwLCBhCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICBpcyBjcmVhdGVkLCB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGJlY29tZXMgdGhlIEJ1aWxkIERpcmVjdG9yeSwKKyAgICAgICAgICAgIGFuZCB5b3UgYXJlIHByZXNlbnRlZCB3aXRoIGEgbGlzdCBvZiBjb21tb24gQml0QmFrZSB0YXJnZXRzLgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudgorCisgICAgICMjIyBTaGVsbCBlbnZpcm9ubWVudCBzZXQgdXAgZm9yIGJ1aWxkcy4gIyMjCisKKyAgICAgWW91IGNhbiBub3cgcnVuICdiaXRiYWtlICZsdDt0YXJnZXQmZ3Q7JworCisgICAgIENvbW1vbiB0YXJnZXRzIGFyZToKKyAgICAgICAgIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICAgY29yZS1pbWFnZS1zYXRvCisgICAgICAgICBtZXRhLXRvb2xjaGFpbgorICAgICAgICAgYWR0LWluc3RhbGxlcgorICAgICAgICAgbWV0YS1pZGUtc3VwcG9ydAorCisgICAgIFlvdSBjYW4gYWxzbyBydW4gZ2VuZXJhdGVkIHFlbXUgaW1hZ2VzIHdpdGggYSBjb21tYW5kIGxpa2UgJ3J1bnFlbXUgcWVtdXg4NicKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSBzY3JpcHQgZ2V0cyBpdHMgZGVmYXVsdCBsaXN0IG9mIGNvbW1vbiB0YXJnZXRzIGZyb20gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi1ub3Rlcy50eHQ8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvPC9maWxlbmFtZT4gZGlyZWN0b3J5IHdpdGhpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIFNob3VsZCB5b3UgaGF2ZSBjdXN0b20gZGlzdHJpYnV0aW9ucywgaXQgaXMgdmVyeSBlYXN5IHRvIG1vZGlmeQorICAgICAgICAgICAgdGhpcyBjb25maWd1cmF0aW9uIGZpbGUgdG8gaW5jbHVkZSB5b3VyIHRhcmdldHMgZm9yIHlvdXIKKyAgICAgICAgICAgIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1hLWN1c3RvbS10ZW1wbGF0ZS1jb25maWd1cmF0aW9uLWRpcmVjdG9yeSc+Q3JlYXRpbmcgYSBDdXN0b20gVGVtcGxhdGUgQ29uZmlndXJhdGlvbiBEaXJlY3Rvcnk8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciBtb3JlCisgICAgICAgICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgcnVubmluZyB0aGlzIHNjcmlwdCB3aXRob3V0IGEKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIGFyZ3VtZW50IGNyZWF0ZXMgdGhlIDxmaWxlbmFtZT5idWlsZDwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICAgICAgaW4geW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorICAgICAgICAgICAgSWYgeW91IHByb3ZpZGUgYSBCdWlsZCBEaXJlY3RvcnkgYXJndW1lbnQgd2hlbiB5b3UKKyAgICAgICAgICAgIDxmaWxlbmFtZT5zb3VyY2U8L2ZpbGVuYW1lPiB0aGUgc2NyaXB0LCB5b3UgZGlyZWN0IHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSB0byBjcmVhdGUgYSBCdWlsZCBEaXJlY3Rvcnkgb2YgeW91ciBjaG9pY2UuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21tYW5kIGNyZWF0ZXMgYSBCdWlsZCBEaXJlY3RvcnkgbmFtZWQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5teWJ1aWxkczwvZmlsZW5hbWU+IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzb3VyY2UgJk9FX0lOSVRfRklMRTsgfi9teWJ1aWxkcworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUgdGVtcGxhdGUgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgZmlsZXMsIHdoaWNoIGFyZSBmb3VuZCBieSBkZWZhdWx0IGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG8vY29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1hLWN1c3RvbS10ZW1wbGF0ZS1jb25maWd1cmF0aW9uLWRpcmVjdG9yeSc+Q3JlYXRpbmcgYSBDdXN0b20gVGVtcGxhdGUgQ29uZmlndXJhdGlvbiBEaXJlY3Rvcnk8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciBtb3JlCisgICAgICAgICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgZmlsZSBvciBkaXJlY3RvcnkgbmFtZXMgdGhhdAorICAgICAgICAgICAgICAgIGNvbnRhaW4gc3BhY2VzLgorICAgICAgICAgICAgICAgIElmIHlvdSBhdHRlbXB0IHRvIHJ1biB0aGUgPGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT4gc2NyaXB0CisgICAgICAgICAgICAgICAgZnJvbSBhIFNvdXJjZSBEaXJlY3RvcnkgdGhhdCBjb250YWlucyBzcGFjZXMgaW4gZWl0aGVyIHRoZSBmaWxlbmFtZXMKKyAgICAgICAgICAgICAgICBvciBkaXJlY3RvcnkgbmFtZXMsIHRoZSBzY3JpcHQgcmV0dXJucyBhbiBlcnJvciBpbmRpY2F0aW5nIG5vIHN1Y2gKKyAgICAgICAgICAgICAgICBmaWxlIG9yIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIHVzZSBhIFNvdXJjZSBEaXJlY3RvcnkgZnJlZSBvZiBuYW1lcyBjb250YWluaW5nIHNwYWNlcy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNjcmlwdCBpcyBvbmUgb2YgdHdvIHNjcmlwdHMgdGhhdCBzZXQgdXAgdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgYnVpbGQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBBc2lkZSBmcm9tIHNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50LCB0aGlzIHNjcmlwdCBzdGFydHMgYQorICAgICAgICAgICAgbWVtb3J5LXJlc2lkZW50IEJpdEJha2Ugc2VydmVyLgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBvdGhlciBzZXR1cCBzY3JpcHQsIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE1lbW9yeS1yZXNpZGVudCBCaXRCYWtlIHJlc2lkZXMgaW4gbWVtb3J5IHVudGlsIHlvdSBzcGVjaWZpY2FsbHkKKyAgICAgICAgICAgIHJlbW92ZSBpdCB1c2luZyB0aGUgZm9sbG93aW5nIEJpdEJha2UgY29tbWFuZDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1tCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFJ1bm5pbmcgdGhpcyBzY3JpcHQgd2l0aCB0aGUgPGZpbGVuYW1lPnNvdXJjZTwvZmlsZW5hbWU+IGNvbW1hbmQgaW4KKyAgICAgICAgICAgIGEgc2hlbGwgbWFrZXMgY2hhbmdlcyB0byA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IGFuZCBzZXRzIG90aGVyCisgICAgICAgICAgICBjb3JlIEJpdEJha2UgdmFyaWFibGVzIGJhc2VkIG9uIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorICAgICAgICAgICAgT25lIG9mIHRoZXNlIHZhcmlhYmxlcyBpcyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlNFUlZFUic+PGZpbGVuYW1lPkJCU0VSVkVSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSwgd2hpY2ggYWxsb3dzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGxvY2F0ZQorICAgICAgICAgICAgdGhlIHNlcnZlciB0aGF0IGlzIHJ1bm5pbmcgQml0QmFrZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IG5lZWQgdG8gcnVuIGFuIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBiZWZvcmUgdXNpbmcgQml0QmFrZQorICAgICAgICAgICAgY29tbWFuZHMuCisgICAgICAgICAgICBGb2xsb3dpbmcgaXMgdGhlIHNjcmlwdCBzeW50YXg6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc291cmNlIG9lLWluaXQtYnVpbGQtZW52LW1lbXJlcyA8cmVwbGFjZWFibGU+cG9ydF9udW1iZXI8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+YnVpbGRfZGlyPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgc29tZSBjb25zaWRlcmF0aW9ucyB3aGVuIHNvdXJjaW5nIHRoaXMgc2NyaXB0OgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzY3JpcHQgdXNlcyBvdGhlciBzY3JpcHRzIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgdG8gZG8gdGhlIGJ1bGsgb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlIHdvcmsuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBwcm92aWRlIGEgcG9ydCBudW1iZXIgd2l0aCB0aGUgc2NyaXB0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBzZXJ2ZXIgc3RhcnRzIGF0IGEgcmFuZG9tbHkgc2VsZWN0ZWQgcG9ydC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc2NyaXB0J3MgcGFyYW1ldGVycyBhcmUgcG9zaXRpb25hbGx5IGRlcGVuZGVudC4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgY2Fubm90IHJ1biB0aGUgc2NyaXB0IGFuZCBwcm92aWRlIGEKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBuYW1lIHdpdGhvdXQgYWxzbyBwcm92aWRpbmcgYSBwb3J0IG51bWJlci4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHRoZSBmb2xsb3dpbmcgc3ludGF4IGlzIGlsbGVnYWw6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzb3VyY2Ugb2UtaW5pdGJ1aWxkLWVudi1tZW1yZXMgPHJlcGxhY2VhYmxlPmJ1aWxkX2RpcjwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcHJldmlvdXMgcmVzdHJpY3Rpb24gbWlnaHQgYmUgcmVzb2x2ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBmdXR1cmUuCisgICAgICAgICAgICAgICAgICAgICAgICBTZWUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU1NSc+QnVnIDc1NTU8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgcnVuIHRoaXMgc2NyaXB0LCB5b3VyIFlvY3RvIFByb2plY3QgZW52aXJvbm1lbnQgaXMgc2V0CisgICAgICAgICAgICB1cCwgYSBCdWlsZCBEaXJlY3RvcnkgaXMgY3JlYXRlZCwgeW91ciB3b3JraW5nIGRpcmVjdG9yeSBiZWNvbWVzCisgICAgICAgICAgICB0aGUgQnVpbGQgRGlyZWN0b3J5LCBhbmQgeW91IGFyZSBwcmVzZW50ZWQgd2l0aCBhIGxpc3Qgb2YgY29tbW9uCisgICAgICAgICAgICBCaXRCYWtlIHRhcmdldHMuCisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc291cmNlIG9lLWluaXQtYnVpbGQtZW52LW1lbXJlcworICAgICBObyBwb3J0IHNwZWNpZmllZCwgdXNpbmcgZHluYW1pY2FsbHkgc2VsZWN0ZWQgcG9ydAorCisgICAgICMjIyBTaGVsbCBlbnZpcm9ubWVudCBzZXQgdXAgZm9yIGJ1aWxkcy4gIyMjCisKKyAgICAgWW91IGNhbiBub3cgcnVuICdiaXRiYWtlICZsdDt0YXJnZXQmZ3Q7JworCisgICAgIENvbW1vbiB0YXJnZXRzIGFyZToKKyAgICAgICAgIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICAgY29yZS1pbWFnZS1zYXRvCisgICAgICAgICBtZXRhLXRvb2xjaGFpbgorICAgICAgICAgYWR0LWluc3RhbGxlcgorICAgICAgICAgbWV0YS1pZGUtc3VwcG9ydAorCisgICAgIFlvdSBjYW4gYWxzbyBydW4gZ2VuZXJhdGVkIHFlbXUgaW1hZ2VzIHdpdGggYSBjb21tYW5kIGxpa2UgJ3J1bnFlbXUgcWVtdXg4NicKKyAgICAgQml0YmFrZSBzZXJ2ZXIgYWRkcmVzczogMTI3LjAuMC4xLCBzZXJ2ZXIgcG9ydDogNTM5OTUKKyAgICAgQml0YmFrZSBzZXJ2ZXIgc3RhcnRlZCBvbiBkZW1hbmQgYXMgbmVlZGVkLCB1c2UgYml0YmFrZSAtbSB0byBzaHV0IGl0IGRvd24KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSBzY3JpcHQgZ2V0cyBpdHMgZGVmYXVsdCBsaXN0IG9mIGNvbW1vbiB0YXJnZXRzIGZyb20gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi1ub3Rlcy50eHQ8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvPC9maWxlbmFtZT4gZGlyZWN0b3J5IHdpdGhpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIFNob3VsZCB5b3UgaGF2ZSBjdXN0b20gZGlzdHJpYnV0aW9ucywgaXQgaXMgdmVyeSBlYXN5IHRvIG1vZGlmeQorICAgICAgICAgICAgdGhpcyBjb25maWd1cmF0aW9uIGZpbGUgdG8gaW5jbHVkZSB5b3VyIHRhcmdldHMgZm9yIHlvdXIKKyAgICAgICAgICAgIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1hLWN1c3RvbS10ZW1wbGF0ZS1jb25maWd1cmF0aW9uLWRpcmVjdG9yeSc+Q3JlYXRpbmcgYSBDdXN0b20gVGVtcGxhdGUgQ29uZmlndXJhdGlvbiBEaXJlY3Rvcnk8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciBtb3JlCisgICAgICAgICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgcnVubmluZyB0aGlzIHNjcmlwdCB3aXRob3V0IGEKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIGFyZ3VtZW50IGNyZWF0ZXMgYSBidWlsZCBkaXJlY3RvcnkgbmFtZWQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5idWlsZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgSWYgeW91IHByb3ZpZGUgYSBCdWlsZCBEaXJlY3RvcnkgYXJndW1lbnQgYW5kIHBvcnQgbnVtYmVyIHdoZW4geW91CisgICAgICAgICAgICA8ZmlsZW5hbWU+c291cmNlPC9maWxlbmFtZT4gdGhlIHNjcmlwdCwgdGhlIEJ1aWxkIERpcmVjdG9yeSBpcworICAgICAgICAgICAgY3JlYXRlZCB1c2luZyB0aGF0IG5hbWUuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21tYW5kIHN0YXJ0cyB0aGUgQml0QmFrZSBzZXJ2ZXIgdXNpbmcKKyAgICAgICAgICAgIHBvcnQgNTM5OTUgYW5kIGNyZWF0ZXMgYSBCdWlsZCBEaXJlY3RvcnkgbmFtZWQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5teWJ1aWxkczwvZmlsZW5hbWU+IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzIDUzOTk1IH4vbXlidWlsZHMKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT4gc2NyaXB0IHN0YXJ0cyBhCisgICAgICAgICAgICBtZW1vcnkgcmVzaWRlbnQgQml0QmFrZSBzZXJ2ZXIuCisgICAgICAgICAgICBUaGlzIEJpdEJha2UgaW5zdGFuY2UgdXNlcyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLWNvb2tlcmRhZW1vbi5sb2c8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcworICAgICAgICAgICAgbG9jYXRlZCBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRoZSB0ZW1wbGF0ZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICBmaWxlcywgd2hpY2ggYXJlIGZvdW5kIGJ5IGRlZmF1bHQgaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0by9jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5IGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2NyZWF0aW5nLWEtY3VzdG9tLXRlbXBsYXRlLWNvbmZpZ3VyYXRpb24tZGlyZWN0b3J5Jz5DcmVhdGluZyBhIEN1c3RvbSBUZW1wbGF0ZSBDb25maWd1cmF0aW9uIERpcmVjdG9yeTwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgZm9yIG1vcmUKKyAgICAgICAgICAgIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBmaWxlIG9yCisgICAgICAgICAgICAgICAgZGlyZWN0b3J5IG5hbWVzIHRoYXQgY29udGFpbiBzcGFjZXMuCisgICAgICAgICAgICAgICAgSWYgeW91IGF0dGVtcHQgdG8gcnVuIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPiBzY3JpcHQKKyAgICAgICAgICAgICAgICBmcm9tIGEgU291cmNlIERpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHNwYWNlcyBpbiBlaXRoZXIgdGhlCisgICAgICAgICAgICAgICAgZmlsZW5hbWVzIG9yIGRpcmVjdG9yeSBuYW1lcywgdGhlIHNjcmlwdCByZXR1cm5zIGFuIGVycm9yCisgICAgICAgICAgICAgICAgaW5kaWNhdGluZyBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gdXNlIGEgU291cmNlIERpcmVjdG9yeSBmcmVlIG9mIG5hbWVzIGNvbnRhaW5pbmcKKyAgICAgICAgICAgICAgICBzcGFjZXMuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJhc2ljLXRvcC1sZXZlbCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+TElDRU5TRSwgUkVBRE1FLCBhbmQgUkVBRE1FLmhhcmR3YXJlPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlc2UgZmlsZXMgYXJlIHN0YW5kYXJkIHRvcC1sZXZlbCBmaWxlcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZCc+CisgICAgPHRpdGxlPlRoZSBCdWlsZCBEaXJlY3RvcnkgLSA8ZmlsZW5hbWU+YnVpbGQvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNyZWF0ZXMgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgd2hlbiB5b3UgcnVuIG9uZSBvZiB0aGUgYnVpbGQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0cyAoaS5lLgorICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBvcgorICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSWYgeW91IGRvIG5vdCBnaXZlIHRoZSBCdWlsZCBEaXJlY3RvcnkgYSBzcGVjaWZpYyBuYW1lIHdoZW4geW91IHJ1bgorICAgICAgICBhIHNldHVwIHNjcmlwdCwgdGhlIG5hbWUgZGVmYXVsdHMgdG8gPGZpbGVuYW1lPmJ1aWxkPC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVE9QRElSJz48ZmlsZW5hbWU+VE9QRElSPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlCisgICAgICAgIHBvaW50cyB0byB0aGUgQnVpbGQgRGlyZWN0b3J5LgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtYnVpbGRoaXN0b3J5Jz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC9idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjcmVhdGVzIHRoaXMgZGlyZWN0b3J5IHdoZW4geW91CisgICAgICAgICAgICBlbmFibGUgdGhlIGJ1aWxkIGhpc3RvcnkgZmVhdHVyZS4KKyAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgdHJhY2tzIGJ1aWxkIGluZm9ybWF0aW9uIGludG8gaW1hZ2UsIHBhY2thZ2VzLCBhbmQKKyAgICAgICAgICAgIFNESyBzdWJkaXJlY3Rvcmllcy4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgYnVpbGQgaGlzdG9yeSBmZWF0dXJlLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbWFpbnRhaW5pbmctYnVpbGQtb3V0cHV0LXF1YWxpdHknPk1haW50YWluaW5nIEJ1aWxkIE91dHB1dCBRdWFsaXR5PC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLWNvbmYtbG9jYWwuY29uZic+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvY29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBjb25maWd1cmF0aW9uIGZpbGUgY29udGFpbnMgYWxsIHRoZSBsb2NhbCB1c2VyIGNvbmZpZ3VyYXRpb25zCisgICAgICAgICAgICBmb3IgeW91ciBidWlsZCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgY29udGFpbnMgZG9jdW1lbnRhdGlvbiBvbgorICAgICAgICAgICAgdGhlIHZhcmlvdXMgY29uZmlndXJhdGlvbiBvcHRpb25zLgorICAgICAgICAgICAgQW55IHZhcmlhYmxlIHNldCBoZXJlIG92ZXJyaWRlcyBhbnkgdmFyaWFibGUgc2V0IGVsc2V3aGVyZSB3aXRoaW4KKyAgICAgICAgICAgIHRoZSBlbnZpcm9ubWVudCB1bmxlc3MgdGhhdCB2YXJpYWJsZSBpcyBoYXJkLWNvZGVkIHdpdGhpbiBhIGZpbGUKKyAgICAgICAgICAgIChlLmcuIGJ5IHVzaW5nICc9JyBpbnN0ZWFkIG9mICc/PScpLgorICAgICAgICAgICAgU29tZSB2YXJpYWJsZXMgYXJlIGhhcmQtY29kZWQgZm9yIHZhcmlvdXMgcmVhc29ucyBidXQgdGhlc2UKKyAgICAgICAgICAgIHZhcmlhYmxlcyBhcmUgcmVsYXRpdmVseSByYXJlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBFZGl0IHRoaXMgZmlsZSB0byBzZXQgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkUnPk1BQ0hJTkU8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZvciB3aGljaCB5b3Ugd2FudCB0byBidWlsZCwgd2hpY2ggcGFja2FnZSB0eXBlcyB5b3Ugd2lzaCB0byB1c2UKKyAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9DTEFTU0VTJz48ZmlsZW5hbWU+UEFDS0FHRV9DTEFTU0VTPC9maWxlbmFtZT48L2xpbms+KSwKKyAgICAgICAgICAgIGFuZCB0aGUgbG9jYXRpb24gZnJvbSB3aGljaCB5b3Ugd2FudCB0byBhY2Nlc3MgZG93bmxvYWRlZCBmaWxlcworICAgICAgICAgICAgKDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRExfRElSJz5ETF9ESVI8L2xpbms+PC9maWxlbmFtZT4pLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGlzIG5vdCBwcmVzZW50IHdoZW4geW91CisgICAgICAgICAgICBzdGFydCB0aGUgYnVpbGQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNyZWF0ZXMgaXQgZnJvbQorICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmYuc2FtcGxlPC9maWxlbmFtZT4gd2hlbgorICAgICAgICAgICAgeW91IDxmaWxlbmFtZT5zb3VyY2U8L2ZpbGVuYW1lPiB0aGUgdG9wLWxldmVsIGJ1aWxkIGVudmlyb25tZW50CisgICAgICAgICAgICBzZXR1cCBzY3JpcHQgKGkuZS4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBvcgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBzb3VyY2UgPGZpbGVuYW1lPmxvY2FsLmNvbmYuc2FtcGxlPC9maWxlbmFtZT4gZmlsZSB1c2VkCisgICAgICAgICAgICBkZXBlbmRzIG9uIHRoZSA8ZmlsZW5hbWU+JFRFTVBMQVRFQ09ORjwvZmlsZW5hbWU+IHNjcmlwdCB2YXJpYWJsZSwKKyAgICAgICAgICAgIHdoaWNoIGRlZmF1bHRzIHRvIDxmaWxlbmFtZT5tZXRhLXlvY3RvL2NvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgd2hlbiB5b3UgYXJlIGJ1aWxkaW5nIGZyb20gdGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgIGVudmlyb25tZW50IGFuZCBkZWZhdWx0cyB0byA8ZmlsZW5hbWU+bWV0YS9jb25mPC9maWxlbmFtZT4gd2hlbgorICAgICAgICAgICAgeW91IGFyZSBidWlsZGluZyBmcm9tIHRoZSBPcGVuRW1iZWRkZWQgQ29yZSBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgIEJlY2F1c2UgdGhlIHNjcmlwdCB2YXJpYWJsZSBwb2ludHMgdG8gdGhlIHNvdXJjZSBvZiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mLnNhbXBsZTwvZmlsZW5hbWU+IGZpbGUsIHRoaXMgaW1wbGllcyB0aGF0CisgICAgICAgICAgICB5b3UgY2FuIGNvbmZpZ3VyZSB5b3VyIGJ1aWxkIGVudmlyb25tZW50IGZyb20gYW55IGxheWVyIGJ5IHNldHRpbmcKKyAgICAgICAgICAgIHRoZSB2YXJpYWJsZSBpbiB0aGUgdG9wLWxldmVsIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBhcworICAgICAgICAgICAgZm9sbG93czoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVNUExBVEVDT05GPTxyZXBsYWNlYWJsZT55b3VyX2xheWVyPC9yZXBsYWNlYWJsZT4vY29uZgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgT25jZSB0aGUgYnVpbGQgcHJvY2VzcyBnZXRzIHRoZSBzYW1wbGUgZmlsZSwgaXQgdXNlcworICAgICAgICAgICAgPGZpbGVuYW1lPnNlZDwvZmlsZW5hbWU+IHRvIHN1YnN0aXR1dGUgZmluYWwKKyAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU9FUk9PVCc+PGZpbGVuYW1lPk9FUk9PVDwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgIHZhbHVlcyBmb3IgYWxsIDxmaWxlbmFtZT4jI09FUk9PVCMjPC9maWxlbmFtZT4gdmFsdWVzLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgaG93IHRoZSA8ZmlsZW5hbWU+VEVNUExBVEVDT05GPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICBpcyB1c2VkIGJ5IGxvb2tpbmcgYXQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHMvb2Utc2V0dXAtYnVpbGRkaXI8L2ZpbGVuYW1lPiBzY3JpcHQgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGUgWW9jdG8gUHJvamVjdCB2ZXJzaW9uIG9mIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mLnNhbXBsZTwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG8vY29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtY29uZi1iYmxheWVycy5jb25mJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC9jb25mL2JibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBkZWZpbmVzCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPmxheWVyczwvdWxpbms+LAorICAgICAgICAgICAgd2hpY2ggYXJlIGRpcmVjdG9yeSB0cmVlcywgdHJhdmVyc2VkIChvciB3YWxrZWQpIGJ5IEJpdEJha2UuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHVzZXMgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJMQVlFUlMnPjxmaWxlbmFtZT5CQkxBWUVSUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgdG8gbGlzdCB0aGUgbGF5ZXJzIEJpdEJha2UgdHJpZXMgdG8gZmluZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBpcyBub3QgcHJlc2VudCB3aGVuIHlvdQorICAgICAgICAgICAgc3RhcnQgdGhlIGJ1aWxkLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjcmVhdGVzIGl0IGZyb20KKyAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mLnNhbXBsZTwvZmlsZW5hbWU+IHdoZW4KKyAgICAgICAgICAgIHlvdSA8ZmlsZW5hbWU+c291cmNlPC9maWxlbmFtZT4gdGhlIHRvcC1sZXZlbCBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgc2V0dXAgc2NyaXB0IChpLmUuCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgb3IKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgc291cmNlIDxmaWxlbmFtZT5iYmxheWVycy5jb25mLnNhbXBsZTwvZmlsZW5hbWU+IGZpbGUgdXNlZAorICAgICAgICAgICAgZGVwZW5kcyBvbiB0aGUgPGZpbGVuYW1lPiRURU1QTEFURUNPTkY8L2ZpbGVuYW1lPiBzY3JpcHQgdmFyaWFibGUsCisgICAgICAgICAgICB3aGljaCBkZWZhdWx0cyB0byA8ZmlsZW5hbWU+bWV0YS15b2N0by9jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHdoZW4geW91IGFyZSBidWlsZGluZyBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IGRldmVsb3BtZW50CisgICAgICAgICAgICBlbnZpcm9ubWVudCBhbmQgZGVmYXVsdHMgdG8gPGZpbGVuYW1lPm1ldGEvY29uZjwvZmlsZW5hbWU+IHdoZW4KKyAgICAgICAgICAgIHlvdSBhcmUgYnVpbGRpbmcgZnJvbSB0aGUgT3BlbkVtYmVkZGVkIENvcmUgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBCZWNhdXNlIHRoZSBzY3JpcHQgdmFyaWFibGUgcG9pbnRzIHRvIHRoZSBzb3VyY2Ugb2YgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZi5zYW1wbGU8L2ZpbGVuYW1lPiBmaWxlLCB0aGlzIGltcGxpZXMgdGhhdAorICAgICAgICAgICAgeW91IGNhbiBiYXNlIHlvdXIgYnVpbGQgZnJvbSBhbnkgbGF5ZXIgYnkgc2V0dGluZyB0aGUgdmFyaWFibGUgaW4KKyAgICAgICAgICAgIHRoZSB0b3AtbGV2ZWwgYnVpbGQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IGFzIGZvbGxvd3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRFTVBMQVRFQ09ORj08cmVwbGFjZWFibGU+eW91cl9sYXllcjwvcmVwbGFjZWFibGU+L2NvbmYKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIE9uY2UgdGhlIGJ1aWxkIHByb2Nlc3MgZ2V0cyB0aGUgc2FtcGxlIGZpbGUsIGl0IHVzZXMKKyAgICAgICAgICAgIDxmaWxlbmFtZT5zZWQ8L2ZpbGVuYW1lPiB0byBzdWJzdGl0dXRlIGZpbmFsCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1PRVJPT1QnPjxmaWxlbmFtZT5PRVJPT1Q8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICB2YWx1ZXMgZm9yIGFsbCA8ZmlsZW5hbWU+IyNPRVJPT1QjIzwvZmlsZW5hbWU+IHZhbHVlcy4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VlIGhvdyB0aGUgPGZpbGVuYW1lPlRFTVBMQVRFQ09ORjwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHMvb2Utc2V0dXAtYnVpbGRkaXI8L2ZpbGVuYW1lPiBzY3JpcHQgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGUgWW9jdG8gUHJvamVjdCB2ZXJzaW9uIG9mIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mLnNhbXBsZTwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG8vY29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtY29uZi1zYW5pdHlfaW5mbyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvY29uZi9zYW5pdHlfaW5mbzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZmlsZSBpbmRpY2F0ZXMgdGhlIHN0YXRlIG9mIHRoZSBzYW5pdHkgY2hlY2tzIGFuZCBpcyBjcmVhdGVkCisgICAgICAgICAgICBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC1kb3dubG9hZHMnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL2Rvd25sb2Fkcy88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBkb3dubG9hZGVkIHVwc3RyZWFtIHNvdXJjZSB0YXJiYWxscy4KKyAgICAgICAgICAgIFlvdSBjYW4gcmV1c2UgdGhlIGRpcmVjdG9yeSBmb3IgbXVsdGlwbGUgYnVpbGRzIG9yIG1vdmUKKyAgICAgICAgICAgIHRoZSBkaXJlY3RvcnkgdG8gYW5vdGhlciBsb2NhdGlvbi4KKyAgICAgICAgICAgIFlvdSBjYW4gY29udHJvbCB0aGUgbG9jYXRpb24gb2YgdGhpcyBkaXJlY3RvcnkgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRExfRElSJz5ETF9ESVI8L2xpbms+PC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLXNzdGF0ZS1jYWNoZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvc3N0YXRlLWNhY2hlLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBzaGFyZWQgc3RhdGUgY2FjaGUuCisgICAgICAgICAgICBZb3UgY2FuIHJldXNlIHRoZSBkaXJlY3RvcnkgZm9yIG11bHRpcGxlIGJ1aWxkcyBvciBtb3ZlCisgICAgICAgICAgICB0aGUgZGlyZWN0b3J5IHRvIGFub3RoZXIgbG9jYXRpb24uCisgICAgICAgICAgICBZb3UgY2FuIGNvbnRyb2wgdGhlIGxvY2F0aW9uIG9mIHRoaXMgZGlyZWN0b3J5IHRocm91Z2ggdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVNTVEFURV9ESVInPlNTVEFURV9ESVI8L2xpbms+PC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLXRtcCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvdG1wLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNyZWF0ZXMgYW5kIHVzZXMgdGhpcyBkaXJlY3RvcnkKKyAgICAgICAgICAgIGZvciBhbGwgdGhlIGJ1aWxkIHN5c3RlbSdzIG91dHB1dC4KKyAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgcG9pbnRzIHRvIHRoaXMgZGlyZWN0b3J5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIGNyZWF0ZXMgdGhpcyBkaXJlY3RvcnkgaWYgaXQgZG9lcyBub3QgZXhpc3QuCisgICAgICAgICAgICBBcyBhIGxhc3QgcmVzb3J0LCB0byBjbGVhbiB1cCBhIGJ1aWxkIGFuZCBzdGFydCBpdCBmcm9tIHNjcmF0Y2gKKyAgICAgICAgICAgIChvdGhlciB0aGFuIHRoZSBkb3dubG9hZHMpLCB5b3UgY2FuIHJlbW92ZSBldmVyeXRoaW5nIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPnRtcDwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvciBnZXQgcmlkIG9mIHRoZQorICAgICAgICAgICAgZGlyZWN0b3J5IGNvbXBsZXRlbHkuCisgICAgICAgICAgICBJZiB5b3UgZG8sIHlvdSBzaG91bGQgYWxzbyBjb21wbGV0ZWx5IHJlbW92ZSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5idWlsZC9zc3RhdGUtY2FjaGU8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLXRtcC1idWlsZHN0YXRzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC90bXAvYnVpbGRzdGF0cy88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBzdG9yZXMgdGhlIGJ1aWxkIHN0YXRpc3RpY3MuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLXRtcC1jYWNoZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvdG1wL2NhY2hlLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gQml0QmFrZSBwYXJzZXMgdGhlIG1ldGFkYXRhLCBpdCBjcmVhdGVzIGEgY2FjaGUgZmlsZSBvZiB0aGUgcmVzdWx0IHRoYXQgY2FuCisgICAgICAgICAgICBiZSB1c2VkIHdoZW4gc3Vic2VxdWVudGx5IHJ1bm5pbmcgY29tbWFuZHMuCisgICAgICAgICAgICBCaXRCYWtlIHN0b3JlcyB0aGVzZSByZXN1bHRzIGhlcmUgb24gYSBwZXItbWFjaGluZSBiYXNpcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtdG1wLWRlcGxveSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvdG1wL2RlcGxveS88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBhbnkgImVuZCByZXN1bHQiIG91dHB1dCBmcm9tIHRoZQorICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgICAgICBUaGUgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVInPjxmaWxlbmFtZT5ERVBMT1lfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBwb2ludHMgdG8gdGhpcyBkaXJlY3RvcnkuCisgICAgICAgICAgICBGb3IgbW9yZSBkZXRhaWwgb24gdGhlIGNvbnRlbnRzIG9mIHRoZSA8ZmlsZW5hbWU+ZGVwbG95PC9maWxlbmFtZT4KKyAgICAgICAgICAgIGRpcmVjdG9yeSwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2ltYWdlcy1kZXYtZW52aXJvbm1lbnQnPkltYWdlczwvbGluaz4iIGFuZAorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1kZXYtZW52aXJvbm1lbnQnPkFwcGxpY2F0aW9uIERldmVsb3BtZW50IFNESzwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9ucy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtdG1wLWRlcGxveS1kZWInPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC9kZXBsb3kvZGViLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IHJlY2VpdmVzIGFueSA8ZmlsZW5hbWU+LmRlYjwvZmlsZW5hbWU+IHBhY2thZ2VzIHByb2R1Y2VkIGJ5CisgICAgICAgICAgICB0aGUgYnVpbGQgcHJvY2Vzcy4KKyAgICAgICAgICAgIFRoZSBwYWNrYWdlcyBhcmUgc29ydGVkIGludG8gZmVlZHMgZm9yIGRpZmZlcmVudCBhcmNoaXRlY3R1cmUgdHlwZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLXRtcC1kZXBsb3ktcnBtJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC90bXAvZGVwbG95L3JwbS88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSByZWNlaXZlcyBhbnkgPGZpbGVuYW1lPi5ycG08L2ZpbGVuYW1lPiBwYWNrYWdlcyBwcm9kdWNlZCBieQorICAgICAgICAgICAgdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgICAgICBUaGUgcGFja2FnZXMgYXJlIHNvcnRlZCBpbnRvIGZlZWRzIGZvciBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlIHR5cGVzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC10bXAtZGVwbG95LWlwayc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvdG1wL2RlcGxveS9pcGsvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgcmVjZWl2ZXMgPGZpbGVuYW1lPi5pcGs8L2ZpbGVuYW1lPiBwYWNrYWdlcyBwcm9kdWNlZCBieQorICAgICAgICAgICAgdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLXRtcC1kZXBsb3ktbGljZW5zZXMnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC9kZXBsb3kvbGljZW5zZXMvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgcmVjZWl2ZXMgcGFja2FnZSBsaWNlbnNpbmcgaW5mb3JtYXRpb24uCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGRpcmVjdG9yeSBjb250YWlucyBzdWItZGlyZWN0b3JpZXMgZm9yIDxmaWxlbmFtZT5iYXNoPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+YnVzeWJveDwvZmlsZW5hbWU+LCBhbmQgPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4gKGFtb25nIG90aGVycykgdGhhdCBpbiB0dXJuCisgICAgICAgICAgICBjb250YWluIGFwcHJvcHJpYXRlIDxmaWxlbmFtZT5DT1BZSU5HPC9maWxlbmFtZT4gbGljZW5zZSBmaWxlcyB3aXRoIG90aGVyIGxpY2Vuc2luZyBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBsaWNlbnNpbmcsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtYWludGFpbmluZy1vcGVuLXNvdXJjZS1saWNlbnNlLWNvbXBsaWFuY2UtZHVyaW5nLXlvdXItcHJvZHVjdHMtbGlmZWN5Y2xlJz5NYWludGFpbmluZyBPcGVuIFNvdXJjZSBMaWNlbnNlIENvbXBsaWFuY2UgRHVyaW5nIFlvdXIgUHJvZHVjdCdzIExpZmVjeWNsZTwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtdG1wLWRlcGxveS1pbWFnZXMnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC9kZXBsb3kvaW1hZ2VzLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IHJlY2VpdmVzIGNvbXBsZXRlIGZpbGVzeXN0ZW0gaW1hZ2VzLgorICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gZmxhc2ggdGhlIHJlc3VsdGluZyBpbWFnZSBmcm9tIGEgYnVpbGQgb250byBhIGRldmljZSwgbG9vayBoZXJlIGZvciB0aGUgaW1hZ2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJlIGNhcmVmdWwgd2hlbiBkZWxldGluZyBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIFlvdSBjYW4gc2FmZWx5IGRlbGV0ZSBvbGQgaW1hZ2VzIGZyb20gdGhpcyBkaXJlY3RvcnkgKGUuZy4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLSo8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmhvYi1pbWFnZS0qPC9maWxlbmFtZT4sCisgICAgICAgICAgICBldGMuKS4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBrZXJuZWwgKDxmaWxlbmFtZT4qekltYWdlKjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+KnVJbWFnZSo8L2ZpbGVuYW1lPiwgZXRjLiksCisgICAgICAgICAgICBib290bG9hZGVyIGFuZCBvdGhlciBzdXBwbGVtZW50YXJ5IGZpbGVzIG1pZ2h0IGJlIGRlcGxveWVkIGhlcmUgcHJpb3IgdG8gYnVpbGRpbmcgYW4KKyAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgQmVjYXVzZSB0aGVzZSBmaWxlcyBhcmUgbm90IGRpcmVjdGx5IHByb2R1Y2VkIGZyb20gdGhlIGltYWdlLCBpZiB5b3UKKyAgICAgICAgICAgIGRlbGV0ZSB0aGVtIHRoZXkgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSByZS1jcmVhdGVkIHdoZW4geW91IGJ1aWxkIHRoZSBpbWFnZSBhZ2Fpbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IGRvIGFjY2lkZW50YWxseSBkZWxldGUgZmlsZXMgaGVyZSwgeW91IHdpbGwgbmVlZCB0byBmb3JjZSB0aGVtIHRvIGJlCisgICAgICAgICAgICByZS1jcmVhdGVkLgorICAgICAgICAgICAgSW4gb3JkZXIgdG8gZG8gdGhhdCwgeW91IHdpbGwgbmVlZCB0byBrbm93IHRoZSB0YXJnZXQgdGhhdCBwcm9kdWNlZCB0aGVtLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZXNlIGNvbW1hbmRzIHJlYnVpbGQgYW5kIHJlLWNyZWF0ZSB0aGUga2VybmVsIGZpbGVzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWMgY2xlYW4gdmlydHVhbC9rZXJuZWwKKyAgICAgJCBiaXRiYWtlIHZpcnR1YWwva2VybmVsCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLXRtcC1kZXBsb3ktc2RrJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC90bXAvZGVwbG95L3Nkay88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjcmVhdGVzIHRoaXMgZGlyZWN0b3J5IHRvIGhvbGQKKyAgICAgICAgICAgIHRvb2xjaGFpbiBpbnN0YWxsZXIgc2NyaXB0cywgd2hpY2ggd2hlbiBleGVjdXRlZCwgaW5zdGFsbCB0aGUKKyAgICAgICAgICAgIHN5c3Jvb3QgdGhhdCBtYXRjaGVzIHlvdXIgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIG91dCBtb3JlIGFib3V0IHRoZXNlIGluc3RhbGxlcnMgaW4gdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjb3B0aW9uYWxseS1idWlsZGluZy1hLXRvb2xjaGFpbi1pbnN0YWxsZXInPk9wdGlvbmFsbHkgQnVpbGRpbmcgYSBUb29sY2hhaW4gSW5zdGFsbGVyPC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC10bXAtc3N0YXRlLWNvbnRyb2wnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC9zc3RhdGUtY29udHJvbC88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRoaXMgZGlyZWN0b3J5IGZvciB0aGUKKyAgICAgICAgICAgIHNoYXJlZCBzdGF0ZSBtYW5pZmVzdCBmaWxlcy4KKyAgICAgICAgICAgIFRoZSBzaGFyZWQgc3RhdGUgY29kZSB1c2VzIHRoZXNlIGZpbGVzIHRvIHJlY29yZCB0aGUgZmlsZXMKKyAgICAgICAgICAgIGluc3RhbGxlZCBieSBlYWNoIHNzdGF0ZSB0YXNrIHNvIHRoYXQgdGhlIGZpbGVzIGNhbiBiZSByZW1vdmVkCisgICAgICAgICAgICB3aGVuIGNsZWFuaW5nIHRoZSByZWNpcGUgb3Igd2hlbiBhIG5ld2VyIHZlcnNpb24gaXMgYWJvdXQgdG8KKyAgICAgICAgICAgIGJlIGluc3RhbGxlZC4KKyAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gYWxzbyB1c2VzIHRoZSBtYW5pZmVzdHMgdG8gZGV0ZWN0IGFuZCBwcm9kdWNlCisgICAgICAgICAgICBhIHdhcm5pbmcgd2hlbiBmaWxlcyBmcm9tIG9uZSB0YXNrIGFyZSBvdmVyd3JpdGluZyB0aG9zZSBmcm9tCisgICAgICAgICAgICBhbm90aGVyLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC10bXAtc3lzcm9vdHMnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC9zeXNyb290cy88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBzaGFyZWQgaGVhZGVyIGZpbGVzIGFuZCBsaWJyYXJpZXMgYXMgd2VsbCBhcyBvdGhlciBzaGFyZWQKKyAgICAgICAgICAgIGRhdGEuCisgICAgICAgICAgICBQYWNrYWdlcyB0aGF0IG5lZWQgdG8gc2hhcmUgb3V0cHV0IHdpdGggb3RoZXIgcGFja2FnZXMgZG8gc28gd2l0aGluIHRoaXMgZGlyZWN0b3J5LgorICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpcyBzdWJkaXZpZGVkIGJ5IGFyY2hpdGVjdHVyZSBzbyBtdWx0aXBsZSBidWlsZHMgY2FuIHJ1biB3aXRoaW4KKyAgICAgICAgICAgIHRoZSBvbmUgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC10bXAtc3RhbXBzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC90bXAvc3RhbXBzLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGhvbGRzIGluZm9ybWF0aW9uIHRoYXQgQml0QmFrZSB1c2VzIGZvciBhY2NvdW50aW5nIHB1cnBvc2VzCisgICAgICAgICAgICB0byB0cmFjayB3aGF0IHRhc2tzIGhhdmUgcnVuIGFuZCB3aGVuIHRoZXkgaGF2ZSBydW4uCisgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGlzIHN1Yi1kaXZpZGVkIGJ5IGFyY2hpdGVjdHVyZSwgcGFja2FnZSBuYW1lLCBhbmQKKyAgICAgICAgICAgIHZlcnNpb24uCisgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgc3RhbXBzL2FsbC1wb2t5LWxpbnV4L2Rpc3RjYy1jb25maWcvMS4wLXIwLmRvX2J1aWxkLTJmZGQuLi4uMmRvCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBBbHRob3VnaCB0aGUgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSBhcmUgZW1wdHkgb2YgZGF0YSwKKyAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGUgZmlsZW5hbWVzIGFuZCB0aW1lc3RhbXBzIGZvciB0cmFja2luZyBwdXJwb3Nlcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtdG1wLWxvZyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvdG1wL2xvZy88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBnZW5lcmFsIGxvZ3MgdGhhdCBhcmUgbm90IG90aGVyd2lzZSBwbGFjZWQgdXNpbmcgdGhlCisgICAgICAgICAgICBwYWNrYWdlJ3MgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz5XT1JLRElSPC9saW5rPjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgRXhhbXBsZXMgb2YgbG9ncyBhcmUgdGhlIG91dHB1dCBmcm9tIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NoZWNrX3BrZzwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fZGlzdHJvX2NoZWNrPC9maWxlbmFtZT4gdGFza3MuCisgICAgICAgICAgICBSdW5uaW5nIGEgYnVpbGQgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGlzIGRpcmVjdG9yeSBpcyBjcmVhdGVkLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC10bXAtd29yayc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvdG1wL3dvcmsvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHdvcmsgc3ViLWRpcmVjdG9yaWVzCisgICAgICAgICAgICBmb3IgcGFja2FnZXMgYnVpbHQgYnkgQml0QmFrZS4KKyAgICAgICAgICAgIEFsbCB0YXNrcyBleGVjdXRlIGZyb20gdGhlIGFwcHJvcHJpYXRlIHdvcmsgZGlyZWN0b3J5LgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBzb3VyY2UgZm9yIGEgcGFydGljdWxhciBwYWNrYWdlIGlzIHVucGFja2VkLAorICAgICAgICAgICAgcGF0Y2hlZCwgY29uZmlndXJlZCBhbmQgY29tcGlsZWQgYWxsIHdpdGhpbiBpdHMgb3duIHdvcmsgZGlyZWN0b3J5LgorICAgICAgICAgICAgV2l0aGluIHRoZSB3b3JrIGRpcmVjdG9yeSwgb3JnYW5pemF0aW9uIGlzIGJhc2VkIG9uIHRoZSBwYWNrYWdlIGdyb3VwCisgICAgICAgICAgICBhbmQgdmVyc2lvbiBmb3Igd2hpY2ggdGhlIHNvdXJjZSBpcyBiZWluZyBjb21waWxlZAorICAgICAgICAgICAgYXMgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgaXMgd29ydGggY29uc2lkZXJpbmcgdGhlIHN0cnVjdHVyZSBvZiBhIHR5cGljYWwgd29yayBkaXJlY3RvcnkuCisgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBjb25zaWRlciA8ZmlsZW5hbWU+bGludXgteW9jdG8ta2VybmVsLTMuMDwvZmlsZW5hbWU+CisgICAgICAgICAgICBvbiB0aGUgbWFjaGluZSA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+CisgICAgICAgICAgICBidWlsdCB3aXRoaW4gdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICBGb3IgdGhpcyBwYWNrYWdlLCBhIHdvcmsgZGlyZWN0b3J5IG9mCisgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL3dvcmsvcWVtdXg4Ni1wb2t5LWxpbnV4L2xpbnV4LXlvY3RvLzMuMCtnaXQxKyZsdDsuLi4uLiZndDs8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIHJlZmVycmVkIHRvIGFzIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz5XT1JLRElSPC9saW5rPjwvZmlsZW5hbWU+LCBpcyBjcmVhdGVkLgorICAgICAgICAgICAgV2l0aGluIHRoaXMgZGlyZWN0b3J5LCB0aGUgc291cmNlIGlzIHVucGFja2VkIHRvCisgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgtcWVtdXg4Ni1zdGFuZGFyZC1idWlsZDwvZmlsZW5hbWU+IGFuZCB0aGVuIHBhdGNoZWQgYnkgUXVpbHQuCisgICAgICAgICAgICAoU2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5nLWEtcXVpbHQtd29ya2Zsb3cnPlVzaW5nIFF1aWx0IGluIFlvdXIgV29ya2Zsb3c8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uLikKKyAgICAgICAgICAgIFdpdGhpbiB0aGUgPGZpbGVuYW1lPmxpbnV4LXFlbXV4ODYtc3RhbmRhcmQtYnVpbGQ8L2ZpbGVuYW1lPiBkaXJlY3RvcnksCisgICAgICAgICAgICBzdGFuZGFyZCBRdWlsdCBkaXJlY3RvcmllcyA8ZmlsZW5hbWU+bGludXgtMy4wL3BhdGNoZXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5saW51eC0zLjAvLnBjPC9maWxlbmFtZT4gYXJlIGNyZWF0ZWQsCisgICAgICAgICAgICBhbmQgc3RhbmRhcmQgUXVpbHQgY29tbWFuZHMgY2FuIGJlIHVzZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZXJlIGFyZSBvdGhlciBkaXJlY3RvcmllcyBnZW5lcmF0ZWQgd2l0aGluIDxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGUgbW9zdCBpbXBvcnRhbnQgZGlyZWN0b3J5IGlzIDxmaWxlbmFtZT5XT1JLRElSL3RlbXAvPC9maWxlbmFtZT4sCisgICAgICAgICAgICB3aGljaCBoYXMgbG9nIGZpbGVzIGZvciBlYWNoIHRhc2sgKDxmaWxlbmFtZT5sb2cuZG9fKi5waWQ8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgIGFuZCBjb250YWlucyB0aGUgc2NyaXB0cyBCaXRCYWtlIHJ1bnMgZm9yIGVhY2ggdGFzaworICAgICAgICAgICAgKDxmaWxlbmFtZT5ydW4uZG9fKi5waWQ8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPldPUktESVIvaW1hZ2UvPC9maWxlbmFtZT4gZGlyZWN0b3J5IGlzIHdoZXJlICJtYWtlCisgICAgICAgICAgICBpbnN0YWxsIiBwbGFjZXMgaXRzIG91dHB1dCB0aGF0IGlzIHRoZW4gc3BsaXQgaW50byBzdWItcGFja2FnZXMKKyAgICAgICAgICAgIHdpdGhpbiA8ZmlsZW5hbWU+V09SS0RJUi9wYWNrYWdlcy1zcGxpdC88L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtd29yay1zaGFyZWQnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC93b3JrLXNoYXJlZC88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgZWZmaWNpZW5jeSwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY3JlYXRlcyBhbmQgdXNlcworICAgICAgICAgICAgdGhpcyBkaXJlY3RvcnkgdG8gaG9sZCByZWNpcGVzIHRoYXQgc2hhcmUgYSB3b3JrIGRpcmVjdG9yeSB3aXRoCisgICAgICAgICAgICBvdGhlciByZWNpcGVzLgorICAgICAgICAgICAgSW4gcHJhY3RpY2UsIHRoaXMgaXMgb25seSB1c2VkIGZvciA8ZmlsZW5hbWU+Z2NjPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGFuZCBpdHMgdmFyaWFudHMgKGUuZy4gPGZpbGVuYW1lPmdjYy1jcm9zczwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPmxpYmdjYzwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+Z2NjLXJ1bnRpbWU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIGFuZCBzbyBmb3J0aCkuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YSc+CisgICAgPHRpdGxlPlRoZSBNZXRhZGF0YSAtIDxmaWxlbmFtZT5tZXRhLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBBcyBtZW50aW9uZWQgcHJldmlvdXNseSwKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4gaXMgdGhlIGNvcmUKKyAgICAgICAgb2YgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgIE1ldGFkYXRhIGhhcyBzZXZlcmFsIGltcG9ydGFudCBzdWJkaXZpc2lvbnM6CisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLWNsYXNzZXMnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvY2xhc3Nlcy88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgPGZpbGVuYW1lPiouYmJjbGFzczwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgQ2xhc3MgZmlsZXMgYXJlIHVzZWQgdG8gYWJzdHJhY3QgY29tbW9uIGNvZGUgc28gaXQgY2FuIGJlIHJldXNlZCBieSBtdWx0aXBsZQorICAgICAgICAgICAgcGFja2FnZXMuCisgICAgICAgICAgICBFdmVyeSBwYWNrYWdlIGluaGVyaXRzIHRoZSA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgIEV4YW1wbGVzIG9mIG90aGVyIGltcG9ydGFudCBjbGFzc2VzIGFyZSA8ZmlsZW5hbWU+YXV0b3Rvb2xzLmJiY2xhc3M8L2ZpbGVuYW1lPiwgd2hpY2gKKyAgICAgICAgICAgIGluIHRoZW9yeSBhbGxvd3MgYW55IEF1dG90b29sLWVuYWJsZWQgcGFja2FnZSB0byB3b3JrIHdpdGggdGhlIFlvY3RvIFByb2plY3Qgd2l0aCBtaW5pbWFsIGVmZm9ydC4KKyAgICAgICAgICAgIEFub3RoZXIgZXhhbXBsZSBpcyA8ZmlsZW5hbWU+a2VybmVsLmJiY2xhc3M8L2ZpbGVuYW1lPiB0aGF0IGNvbnRhaW5zIGNvbW1vbiBjb2RlIGFuZCBmdW5jdGlvbnMKKyAgICAgICAgICAgIGZvciB3b3JraW5nIHdpdGggdGhlIExpbnV4IGtlcm5lbC4KKyAgICAgICAgICAgIEZ1bmN0aW9ucyBsaWtlIGltYWdlIGdlbmVyYXRpb24gb3IgcGFja2FnaW5nIGFsc28gaGF2ZSB0aGVpciBzcGVjaWZpYyBjbGFzcyBmaWxlcworICAgICAgICAgICAgc3VjaCBhcyA8ZmlsZW5hbWU+aW1hZ2UuYmJjbGFzczwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+cm9vdGZzXyouYmJjbGFzczwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2UqLmJiY2xhc3M8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIHJlZmVyZW5jZSBpbmZvcm1hdGlvbiBvbiBjbGFzc2VzLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMnPkNsYXNzZXM8L2xpbms+IiBjaGFwdGVyLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLWNvbmYnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvY29uZi88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgY29yZSBzZXQgb2YgY29uZmlndXJhdGlvbiBmaWxlcyB0aGF0IHN0YXJ0IGZyb20KKyAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBhbmQgZnJvbSB3aGljaCBhbGwgb3RoZXIgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgZmlsZXMgYXJlIGluY2x1ZGVkLgorICAgICAgICAgICAgU2VlIHRoZSBpbmNsdWRlIHN0YXRlbWVudHMgYXQgdGhlIGVuZCBvZiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGFuZCB5b3Ugd2lsbCBub3RlIHRoYXQgZXZlbgorICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBpcyBsb2FkZWQgZnJvbSB0aGVyZS4KKyAgICAgICAgICAgIFdoaWxlIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBzZXRzIHVwIHRoZSBkZWZhdWx0cywgeW91IGNhbiBvZnRlbiBvdmVycmlkZQorICAgICAgICAgICAgdGhlc2UgYnkgdXNpbmcgdGhlICg8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+KSBmaWxlLCBtYWNoaW5lIGZpbGUgb3IKKyAgICAgICAgICAgIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLWNvbmYtbWFjaGluZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmUvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYWxsIHRoZSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgICAgICAgICBJZiB5b3Ugc2V0IDxmaWxlbmFtZT5NQUNISU5FID0gInFlbXV4ODYiPC9maWxlbmFtZT4sCisgICAgICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBsb29rcyBmb3IgYSA8ZmlsZW5hbWU+cWVtdXg4Ni5jb25mPC9maWxlbmFtZT4gZmlsZSBpbiB0aGlzCisgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgY29udGFpbnMgdmFyaW91cyBkYXRhIGNvbW1vbiB0byBtdWx0aXBsZSBtYWNoaW5lcy4KKyAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBhIG5ldyBtYWNoaW5lIHRvIHRoZSBZb2N0byBQcm9qZWN0LCBsb29rIGluIHRoaXMgZGlyZWN0b3J5LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLWNvbmYtZGlzdHJvJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL2NvbmYvZGlzdHJvLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGRpcmVjdG9yeSBjb250cm9scyBhbnkgZGlzdHJpYnV0aW9uLXNwZWNpZmljCisgICAgICAgICAgICBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgIEZvciB0aGUgWW9jdG8gUHJvamVjdCwgdGhlIDxmaWxlbmFtZT5kZWZhdWx0c2V0dXAuY29uZjwvZmlsZW5hbWU+IGlzIHRoZSBtYWluIGZpbGUgaGVyZS4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGluY2x1ZGVzIHRoZSB2ZXJzaW9ucyBhbmQgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDREFURTwvZmlsZW5hbWU+IGRlZmluaXRpb25zIGZvciBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgY29uZmlndXJlZCBoZXJlLgorICAgICAgICAgICAgQW4gZXhhbXBsZSBvZiBhbiBhbHRlcm5hdGl2ZSBjb25maWd1cmF0aW9uIG1pZ2h0IGJlIDxmaWxlbmFtZT5wb2t5LWJsZWVkaW5nLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIEFsdGhvdWdoIHRoaXMgZmlsZSBtYWlubHkgaW5oZXJpdHMgaXRzIGNvbmZpZ3VyYXRpb24gZnJvbSBQb2t5LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLWNvbmYtbWFjaGluZS1zZGsnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvY29uZi9tYWNoaW5lLXNkay88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBzZWFyY2hlcyB0aGlzIGRpcmVjdG9yeSBmb3IKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES01BQ0hJTkUnPjxmaWxlbmFtZT5TREtNQUNISU5FPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgMzItYml0IGFuZCA2NC1iaXQgeDg2IGZpbGVzIHNoaXAgd2l0aCB0aGUgWW9jdG8KKyAgICAgICAgICAgIFByb2plY3QgdGhhdCBzdXBwb3J0IHNvbWUgU0RLIGhvc3RzLgorICAgICAgICAgICAgSG93ZXZlciwgaXQgaXMgcG9zc2libGUgdG8gZXh0ZW5kIHRoYXQgc3VwcG9ydCB0byBvdGhlciBTREsgaG9zdHMKKyAgICAgICAgICAgIGJ5IGFkZGluZyBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gZmlsZXMgaW4gdGhpcyBzdWJkaXJlY3RvcnkKKyAgICAgICAgICAgIHdpdGhpbiBhbm90aGVyIGxheWVyLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLWZpbGVzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL2ZpbGVzLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGNvbW1vbiBsaWNlbnNlIGZpbGVzIGFuZCBzZXZlcmFsIHRleHQgZmlsZXMKKyAgICAgICAgICAgIHVzZWQgYnkgdGhlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgIFRoZSB0ZXh0IGZpbGVzIGNvbnRhaW4gbWluaW1hbCBkZXZpY2UgaW5mb3JtYXRpb24gYW5kCisgICAgICAgICAgICBsaXN0cyBvZiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgd2l0aCBrbm93biBwZXJtaXNzaW9ucy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1saWInPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvbGliLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIE9wZW5FbWJlZGRlZCBQeXRob24gbGlicmFyeSBjb2RlCisgICAgICAgICAgICB1c2VkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1yZWNpcGVzLWJzcCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWJzcC88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBhbnl0aGluZyBsaW5raW5nIHRvIHNwZWNpZmljIGhhcmR3YXJlIG9yIGhhcmR3YXJlCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIHN1Y2ggYXMgInUtYm9vdCIgYW5kICJncnViIi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1yZWNpcGVzLWNvbm5lY3Rpdml0eSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBsaWJyYXJpZXMgYW5kIGFwcGxpY2F0aW9ucyByZWxhdGVkIHRvIGNvbW11bmljYXRpb24gd2l0aCBvdGhlciBkZXZpY2VzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLXJlY2lwZXMtY29yZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWNvcmUvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgd2hhdCBpcyBuZWVkZWQgdG8gYnVpbGQgYSBiYXNpYyB3b3JraW5nIExpbnV4IGltYWdlCisgICAgICAgICAgICBpbmNsdWRpbmcgY29tbW9ubHkgdXNlZCBkZXBlbmRlbmNpZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtcmVjaXBlcy1kZXZ0b29scyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWRldnRvb2xzLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRvb2xzIHRoYXQgYXJlIHByaW1hcmlseSB1c2VkIGJ5IHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICBUaGUgdG9vbHMsIGhvd2V2ZXIsIGNhbiBhbHNvIGJlIHVzZWQgb24gdGFyZ2V0cy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1yZWNpcGVzLWV4dGVuZGVkJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgbm9uLWVzc2VudGlhbCBhcHBsaWNhdGlvbnMgdGhhdCBhZGQgZmVhdHVyZXMgY29tcGFyZWQgdG8gdGhlCisgICAgICAgICAgICBhbHRlcm5hdGl2ZXMgaW4gY29yZS4KKyAgICAgICAgICAgIFlvdSBtaWdodCBuZWVkIHRoaXMgZGlyZWN0b3J5IGZvciBmdWxsIHRvb2wgZnVuY3Rpb25hbGl0eSBvciBmb3IgTGludXggU3RhbmRhcmQgQmFzZSAoTFNCKQorICAgICAgICAgICAgY29tcGxpYW5jZS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1yZWNpcGVzLWdub21lJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtZ25vbWUvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYWxsIHRoaW5ncyByZWxhdGVkIHRvIHRoZSBHVEsrIGFwcGxpY2F0aW9uIGZyYW1ld29yay4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1yZWNpcGVzLWdyYXBoaWNzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgWCBhbmQgb3RoZXIgZ3JhcGhpY2FsbHkgcmVsYXRlZCBzeXN0ZW0gbGlicmFyaWVzCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtcmVjaXBlcy1rZXJuZWwnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1rZXJuZWwvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIGtlcm5lbCBhbmQgZ2VuZXJpYyBhcHBsaWNhdGlvbnMgYW5kIGxpYnJhcmllcyB0aGF0CisgICAgICAgICAgICBoYXZlIHN0cm9uZyBrZXJuZWwgZGVwZW5kZW5jaWVzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLXJlY2lwZXMtbHNiNCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWxzYjQvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgcmVjaXBlcyBzcGVjaWZpY2FsbHkgYWRkZWQgdG8gc3VwcG9ydAorICAgICAgICAgICAgdGhlIExpbnV4IFN0YW5kYXJkIEJhc2UgKExTQikgdmVyc2lvbiA0LnguCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtcmVjaXBlcy1tdWx0aW1lZGlhJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBjb2RlY3MgYW5kIHN1cHBvcnQgdXRpbGl0aWVzIGZvciBhdWRpbywgaW1hZ2VzIGFuZCB2aWRlby4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1yZWNpcGVzLXF0Jz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtcXQvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYWxsIHRoaW5ncyByZWxhdGVkIHRvIHRoZSBRdCBhcHBsaWNhdGlvbiBmcmFtZXdvcmsuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtcmVjaXBlcy1ydCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLXJ0LzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHBhY2thZ2UgYW5kIGltYWdlIHJlY2lwZXMgZm9yIHVzaW5nIGFuZCB0ZXN0aW5nCisgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlBSRUVNUFRfUlQ8L2ZpbGVuYW1lPiBrZXJuZWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtcmVjaXBlcy1zYXRvJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtc2F0by88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgU2F0byBkZW1vL3JlZmVyZW5jZSBVSS9VWCBhbmQgaXRzIGFzc29jaWF0ZWQgYXBwbGljYXRpb25zCisgICAgICAgICAgICBhbmQgY29uZmlndXJhdGlvbiBkYXRhLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLXJlY2lwZXMtc3VwcG9ydCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLXN1cHBvcnQvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgcmVjaXBlcyB1c2VkIGJ5IG90aGVyIHJlY2lwZXMsIGJ1dCB0aGF0IGFyZQorICAgICAgICAgICAgbm90IGRpcmVjdGx5IGluY2x1ZGVkIGluIGltYWdlcyAoaS5lLiBkZXBlbmRlbmNpZXMgb2Ygb3RoZXIKKyAgICAgICAgICAgIHJlY2lwZXMpLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLXNpdGUnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvc2l0ZS88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBhIGxpc3Qgb2YgY2FjaGVkIHJlc3VsdHMgZm9yIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcy4KKyAgICAgICAgICAgIEJlY2F1c2UgY2VydGFpbiAiYXV0b2NvbmYiIHRlc3QgcmVzdWx0cyBjYW5ub3QgYmUgZGV0ZXJtaW5lZCB3aGVuIGNyb3NzLWNvbXBpbGluZyBkdWUgdG8KKyAgICAgICAgICAgIHRoZSB0ZXN0cyBub3QgYWJsZSB0byBydW4gb24gYSBsaXZlIHN5c3RlbSwgdGhlIGluZm9ybWF0aW9uIGluIHRoaXMgZGlyZWN0b3J5IGlzCisgICAgICAgICAgICBwYXNzZWQgdG8gImF1dG9jb25mIiBmb3IgdGhlIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1yZWNpcGVzLXR4dCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLnR4dDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZmlsZSBpcyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBjb250ZW50cyBvZiA8ZmlsZW5hbWU+cmVjaXBlcy0qPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXN0eWxlLmNzcyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1zdHlsZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVhOGRhYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1zdHlsZS5jc3MKQEAgLTAsMCArMSwxMDI4IEBACisvKgorICAgR2VuZXJpYyBYSFRNTCAvIERvY0Jvb2sgWEhUTUwgQ1NTIFN0eWxlc2hlZXQuCisKKyAgIEJyb3dzZXIgd3JhbmdsaW5nIGFuZCB0eXBvZ3JhcGhpYyBkZXNpZ24gYnkKKyAgICAgIE95dmluZCBLb2xhcyAvIHBpcHBpbkBnaW1wLm9yZworCisgICBDdXN0b21pc2VkIGZvciBQb2t5IGJ5CisgICAgICBNYXR0aGV3IEFsbHVtIC8gbWFsbHVtQG8taGFuZC5jb20KKworICAgVGhhbmtzIHRvOgorICAgICBMaWFtIFIuIEUuIFF1aW4KKyAgICAgV2lsbGlhbSBTa2FnZ3MKKyAgICAgSmFrdWIgU3RlaW5lcgorCisgICBTdHJ1Y3R1cmUKKyAgIC0tLS0tLS0tLQorCisgICBUaGUgc3R5bGVzaGVldCBpcyBkaXZpZGVkIGludG8gdGhlIGZvbGxvd2luZyBzZWN0aW9uczoKKworICAgICAgIFBvc2l0aW9uaW5nCisgICAgICAgICAgTWFyZ2lucywgcGFkZGluZ3MsIHdpZHRoLCBmb250LXNpemUsIGNsZWFyaW5nLgorICAgICAgIERlY29yYXRpb25zCisgICAgICAgICAgQm9yZGVycywgc3R5bGUKKyAgICAgICBDb2xvcnMKKyAgICAgICAgICBDb2xvcnMKKyAgICAgICBHcmFwaGljcworICAgICAgICAgIEdyYXBoaWNhbCBiYWNrZ3JvdW5kcworICAgICAgIE5hc3R5IElFIHR3ZWFrcworICAgICAgICAgIFdvcmthcm91bmRzIG5lZWRlZCB0byBtYWtlIGl0IHdvcmsgaW4gaW50ZXJuZXQgZXhwbG9yZXIsCisgICAgICAgICAgY3VycmVudGx5IG1ha2VzIHRoZSBzdHlsZXNoZWV0IG5vbiB2YWxpZGF0aW5nLCBidXQgdXAgdW50aWwKKyAgICAgICAgICB0aGlzIHBvaW50IGl0IGlzIHZhbGlkYXRpbmcuCisgICAgICAgTW96aWxsYSBleHRlbnNpb25zCisgICAgICAgICAgVHJhbnNwYXJlbmN5IGZvciBmb290ZXIKKwkgIFJvdW5kZWQgY29ybmVycyBvbiBib3hlcworCisqLworCisKKyAgLyoqKioqKioqKioqKioqKiAvCisgLyAgUG9zaXRpb25pbmcgICAvCisvICoqKioqKioqKioqKioqKi8KKworYm9keSB7CisgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBTYW5zLCBzYW5zLXNlcmlmOworCisgIG1pbi13aWR0aDogNjQwcHg7CisgIHdpZHRoOiA4MCU7CisgIG1hcmdpbjogIDBlbSBhdXRvOworICBwYWRkaW5nOiAyZW0gNWVtIDVlbSA1ZW07CisgIGNvbG9yOiAjMzMzOworfQorCitoMSxoMixoMyxoNCxoNSxoNixoNyB7CisgIGZvbnQtZmFtaWx5OiBBcmlhbCwgU2FuczsKKyAgY29sb3I6ICMwMDU1N0Q7CisgIGNsZWFyOiBib3RoOworfQorCitoMSB7CisgIGZvbnQtc2l6ZTogMmVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMmVtIDBlbSAwZW0gMGVtOworfQorCitoMi5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMC4xMGVtIDBlbSAzLjBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjhlbTsKKyAgcGFkZGluZy1sZWZ0OiAyMCU7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworaDIgeworICBtYXJnaW46IDJlbSAwZW0gMC42NmVtIDBlbTsKKyAgcGFkZGluZzogMC41ZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS41ZW07CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMy5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQyLjE0JTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK2gzIHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0MCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNCB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDUgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g2IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLmF1dGhvcmdyb3VwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIHBhZGRpbmctdG9wOiAyNTZweDsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL3Bva3ktdGl0bGUucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgdG9wOworICBtYXJnaW4tdG9wOiAtMjU2cHg7CisgIHBhZGRpbmctcmlnaHQ6IDUwcHg7CisgIG1hcmdpbi1sZWZ0OiAwcHg7CisgIHRleHQtYWxpZ246IHJpZ2h0OworICB3aWR0aDogNzQwcHg7Cit9CisKK2gzLmF1dGhvciB7CisgIG1hcmdpbjogMGVtIDBtZSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc2l6ZTogMTAwJTsKKyAgY29sb3I6ICMzMzM7CisgIGNsZWFyOiBib3RoOworfQorCisuYXV0aG9yIHR0LmVtYWlsIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKKy50aXRsZXBhZ2UgaHIgeworICB3aWR0aDogMGVtOworICBjbGVhcjogYm90aDsKK30KKworLnJldmhpc3RvcnkgeworICBwYWRkaW5nLXRvcDogMmVtOworICBjbGVhcjogYm90aDsKK30KKworLnRvYywKKy5saXN0LW9mLXRhYmxlcywKKy5saXN0LW9mLWV4YW1wbGVzLAorLmxpc3Qtb2YtZmlndXJlcyB7CisgIHBhZGRpbmc6IDEuMzNlbSAwZW0gMi41ZW0gMGVtOworICBjb2xvcjogIzAwNTU3RDsKK30KKworLnRvYyBwLAorLmxpc3Qtb2YtdGFibGVzIHAsCisubGlzdC1vZi1maWd1cmVzIHAsCisubGlzdC1vZi1leGFtcGxlcyBwIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDAuM2VtOworICBtYXJnaW46IDEuNWVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIHAgYiwKKy5saXN0LW9mLXRhYmxlcyBwIGIsCisubGlzdC1vZi1maWd1cmVzIHAgYiwKKy5saXN0LW9mLWV4YW1wbGVzIHAgYnsKKyAgZm9udC1zaXplOiAxMDAuMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisudG9jIGRsLAorLmxpc3Qtb2YtdGFibGVzIGRsLAorLmxpc3Qtb2YtZmlndXJlcyBkbCwKKy5saXN0LW9mLWV4YW1wbGVzIGRsIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGR0IHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkZCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMi42ZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLyogVXNlIHRoaXMgc2V0IHdoZW4geW91IGRlY2lkZSB0byBnZXQgdGhlIGltYWdlcyBpbiBmb3IgdmFyaWFibGVzLgorCitkaXYuZ2xvc3NhcnkgZGwsCitkaXYudmFyaWFibGVsaXN0IGRsIHsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgd2lkdGg6IDBlbTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKKy52YXJpYWJsZWxpc3QgZGwgZHQgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKK30KKworLmdsb3NzYXJ5IGRsIGRkLAorLnZhcmlhYmxlbGlzdCBkbCBkZCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWxlZnQ6IDE1LjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMmVtOworfQorCisuZ2xvc3NhcnkgZGQgcCwKKy52YXJpYWJsZWxpc3QgZGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisuZ2xvc3NkZWZmaXJzdCB7CisgIHRleHQtaW5kZW50OiAtNzBweDsKK30KKyovCisKKy8qIFN0YXJ0IG9mIG5vbi1pbWFnZSBzZXQgKi8KKworZGl2Lmdsb3NzYXJ5IGRsLAorZGl2LnZhcmlhYmxlbGlzdCBkbCB7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHdpZHRoOiAyMGVtOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworLnZhcmlhYmxlbGlzdCBkbCBkdCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworfQorCisuZ2xvc3NhcnkgZGwgZGQsCisudmFyaWFibGVsaXN0IGRsIGRkIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tbGVmdDogMjUuNWVtOworfQorCisuZ2xvc3NhcnkgZGQgcCwKKy52YXJpYWJsZWxpc3QgZGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisuZ2xvc3NkZWZmaXJzdCB7CisgIHRleHQtaW5kZW50OiAwcHg7Cit9CisKKy8qIEVuZCBvZiBub24taW1hZ2Ugc2V0ICovCisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKK2RpdiBwLmNvcHlyaWdodCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK2Rpdi5sZWdhbG5vdGljZSBwLmxlZ2Fsbm90aWNlLXRpdGxlIHsKKyAgbWFyZ2luLWJvdHRvbTogMGVtOworfQorCitwIHsKKyAgbGluZS1oZWlnaHQ6IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisKK30KKworZGwgeworICBwYWRkaW5nLXRvcDogMGVtOworfQorCitociB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCisKKy5tZWRpYW9iamVjdCwKKy5tZWRpYW9iamVjdGNvIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCitpbWcgeworICBib3JkZXI6IG5vbmU7Cit9CisKK3VsIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMS41ZW07Cit9CisKK3VsIGxpIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCit1bCBsaSBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKwordGFibGUgeworICB3aWR0aCA6MTAwJTsKK30KKwordGggeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3RkIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCitwIGFbaWRdIHsKKyAgbWFyZ2luOiAwcHg7CisgIHBhZGRpbmc6IDBweDsKKyAgZGlzcGxheTogaW5saW5lOworICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOworfQorCithIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGNvbG9yOiAjNDQ0OworfQorCitwcmUgeworICAgIG92ZXJmbG93OiBhdXRvOworfQorCithOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIC8qZm9udC13ZWlnaHQ6IGJvbGQ7Ki8KK30KKworLyogVGhpcyBzdHlsZSBkZWZpbmVzIGhvdyB0aGUgcGVybWFsaW5rIGNoYXJhY3RlcgorICAgYXBwZWFycyBieSBpdHNlbGYgYW5kIHdoZW4gaG92ZXJlZCBvdmVyIHdpdGgKKyAgIHRoZSBtb3VzZS4gKi8KKworW2FsdD0nUGVybWFsaW5rJ10geyBjb2xvcjogI2VlZTsgfQorW2FsdD0nUGVybWFsaW5rJ106aG92ZXIgeyBjb2xvcjogYmxhY2s7IH0KKworCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUgeworICBtYXJnaW46IDFlbSAwZW07CisgIHBhZGRpbmc6IDFlbTsKKyAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOworfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWxleGFtcGxlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbHRhYmxlIHAudGl0bGUgYiwKK2Rpdi5maWd1cmUgcC50aXRsZSBiLAorZGl2LmV4YW1wbGUgcC50aXRsZSBiLAorZGl2LnRhYmxlIHAudGl0bGUgYnsKKyAgICBwYWRkaW5nLXRvcDogMGVtOworICAgIG1hcmdpbi10b3A6IDBlbTsKKyAgICBmb250LXNpemU6IDEwMCU7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKK30KKworLm1lZGlhb2JqZWN0IC5jYXB0aW9uLAorLm1lZGlhb2JqZWN0IC5jYXB0aW9uIHAgIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZy10b3A6IDAuNWVtOworICBwYWRkaW5nLWJvdHRvbTogMC41ZW07Cit9CisKKy5lcGlncmFwaCB7CisgIHBhZGRpbmctbGVmdDogNTUlOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKy5lcGlncmFwaCBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmVwaWdyYXBoIC5xdW90ZSB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKy5lcGlncmFwaCAuYXR0cmlidXRpb24geworICBmb250LXN0eWxlOiBub3JtYWw7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitzcGFuLmFwcGxpY2F0aW9uIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCisucHJvZ3JhbWxpc3RpbmcgeworICBmb250LWZhbWlseTogbW9ub3NwYWNlOworICBmb250LXNpemU6IDgwJTsKKyAgd2hpdGUtc3BhY2U6IHByZTsKKyAgbWFyZ2luOiAxLjMzZW0gMGVtOworICBwYWRkaW5nOiAxLjMzZW07Cit9CisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBtYXJnaW4tdG9wOiAxZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKKworfQorCisvKiBmb3JjZSBmdWxsIHdpZHRoIG9mIHRhYmxlIHdpdGhpbiBkaXYgKi8KKy50aXAgdGFibGUsCisud2FybmluZyB0YWJsZSwKKy5jYXV0aW9uIHRhYmxlLAorLm5vdGUgdGFibGUgeworICBib3JkZXI6IG5vbmU7CisgIHdpZHRoOiAxMDAlOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBwYWRkaW5nOiAwLjhlbSAwLjBlbSAwLjBlbSAwLjBlbTsKKyAgbWFyZ2luIDogMGVtIDBlbSAwZW0gMGVtOworfQorCisudGlwIHAsCisud2FybmluZyBwLAorLmNhdXRpb24gcCwKKy5ub3RlIHAgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMC41ZW07CisgIHBhZGRpbmctcmlnaHQ6IDFlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmFjcm9ueW0geworICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICBwYWRkaW5nOiAwLjA5ZW0gMC4zZW07CisgIG1hcmdpbjogMGVtOworfQorCisuaXRlbWl6ZWRsaXN0IGxpIHsKKyAgY2xlYXI6IG5vbmU7Cit9CisKKy5maWxlbmFtZSB7CisgIGZvbnQtc2l6ZTogbWVkaXVtOworICBmb250LWZhbWlseTogQ291cmllciwgbW9ub3NwYWNlOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGxlZnQ6IDBlbTsKKyAgdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2RmOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAgbGVmdDogMGVtOworICBib3R0b206IDBlbTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworZGl2Lm5hdmhlYWRlciB0ZCwKK2Rpdi5uYXZmb290ZXIgdGQgeworICBmb250LXNpemU6IDY2JTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0aCB7CisgIC8qZm9udC1mYW1pbHk6IEdlb3JnaWEsIFRpbWVzLCBzZXJpZjsqLworICAvKmZvbnQtc2l6ZTogeC1sYXJnZTsqLworICBmb250LXNpemU6IDgwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci1ib3R0b206IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYSwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYSB7CisgIGNvbG9yOiAjNzc3OworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKKy8qIG5vcm1hbCB0ZXh0IGluIHRoZSBmb290ZXIgKi8KK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgeworICBjb2xvcjogYmxhY2s7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTp2aXNpdGVkLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOnZpc2l0ZWQgeworICBjb2xvcjogIzQ0NDsKK30KKworCisvKiBsaW5rcyBpbiBoZWFkZXIgYW5kIGZvb3RlciAqLworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOmhvdmVyLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBjb2xvcjogIzMzYTsKK30KKworZGl2Lm5hdmhlYWRlciBociwKK2Rpdi5uYXZmb290ZXIgaHIgeworICBkaXNwbGF5OiBub25lOworfQorCisKKy5xYW5kYXNldCB0ci5xdWVzdGlvbiB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnFhbmRhc2V0IHRyLmFuc3dlciB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKy5hbnN3ZXIgdGQgeworICBwYWRkaW5nLWJvdHRvbTogMS41ZW07Cit9CisKKy5lbXBoYXNpcyB7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisKKyAgLyoqKioqKioqKioqKiogLworIC8gZGVjb3JhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKi8KKworLnRpdGxlcGFnZSB7Cit9CisKKy5wYXJ0IC50aXRsZSB7Cit9CisKKy5zdWJ0aXRsZSB7CisgICAgYm9yZGVyOiBub25lOworfQorCisvKgoraDEgeworICBib3JkZXI6IG5vbmU7Cit9CisKK2gyIHsKKyAgYm9yZGVyLXRvcDogc29saWQgMC4yZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDMgeworICBib3JkZXItdG9wOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDQgeworICBib3JkZXI6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNSB7CisgIGJvcmRlcjogMGVtOworfQorKi8KKworLnByb2dyYW1saXN0aW5nIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisucXVlc3Rpb24gdGQgeworICBib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7Cit9CisKKy5hbnN3ZXIgeworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZDsKK30KKworICAvKioqKioqKioqIC8KKyAvICBjb2xvcnMgIC8KKy8gKioqKioqKioqLworCitib2R5IHsKKyAgY29sb3I6ICMzMzM7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorCithIHsKKyAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cit9CisKK2E6aG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVkZWRlOworfQorCisKK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3LAoraDggeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKK30KKworaHIgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKKworLnRpcCwgLndhcm5pbmcsIC5jYXV0aW9uLCAubm90ZSB7CisgIGJvcmRlci1jb2xvcjogI2ZmZjsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjsKK30KKworCisud2FybmluZyB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLnRpcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5ub3RlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgY29sb3I6ICMwNDQ7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworcHJlLnByb2dyYW1saXN0aW5nIHsKKyAgY29sb3I6IGJsYWNrOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworICBib3JkZXItY29sb3I6ICNhYWE7CisgIGJvcmRlci13aWR0aDogMnB4OworfQorCisuZ3VpbWVudSwKKy5ndWlsYWJlbCwKKy5ndWltZW51aXRlbSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgYm9yZGVyLWNvbG9yOiAjOTk5OworfQorCisKK2Rpdi5uYXZoZWFkZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKK2Rpdi5uYXZmb290ZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKKyAgLyoqKioqKioqKioqIC8KKyAvICBncmFwaGljcyAgLworLyAqKioqKioqKioqKi8KKworLyoKK2JvZHkgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ib2R5X2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisubmF2aGVhZGVyLAorLm5vdGUsCisudGlwIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvbm90ZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLndhcm5pbmcsCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL3dhcm5pbmdfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5maWd1cmUsCisuaW5mb3JtYWxmaWd1cmUsCisuZXhhbXBsZSwKKy5pbmZvcm1hbGV4YW1wbGUsCisudGFibGUsCisuaW5mb3JtYWx0YWJsZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2ZpZ3VyZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworKi8KK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3eworfQorCisvKgorRXhhbXBsZSBvZiBob3cgdG8gc3RpY2sgYW4gaW1hZ2UgYXMgcGFydCBvZiB0aGUgdGl0bGUuCisKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy93aGl0ZS1vbi1ibGFjay5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7Cit9CisqLworCitkaXYucHJlZmFjZSAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5jb2xvcGhvbiAudGl0bGUsCitkaXYuY2hhcHRlciAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7Cit9CisKK2Rpdi5zZWN0aW9uIGRpdi5zZWN0aW9uIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LnNlY3QyIC50aXRsZXBhZ2UgLnRpdGxlIHsKKyAgICBiYWNrZ3JvdW5kOiBub25lOworfQorCisKK2gxLnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy9wb2t5LXRpdGxlLnBuZyIpOworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBoZWlnaHQ6IDI1NnB4OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworfQorCitoMi5zdWJ0aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworICB3aWR0aDogMHB4OworICBkaXNwbGF5OiBub25lOworfQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gIHBpcHBpbi5naW1wLm9yZyBzcGVjaWZpYyBhbHRlcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIGNvbG9yOiAjNzc3OworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZzogMDsKKyAgbWFyZ2luOiAwOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMHB4OworICBsZWZ0OiAwcHg7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDUwcHg7CisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9oZWFkaW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7CisgIGJvcmRlcjogbm9uZTsKK30KKworZGl2LmhlYWRpbmcgYSB7CisgIGNvbG9yOiAjNDQ0OworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlcjogbm9uZTsKKyAgY29sb3I6ICNkZGQ7CisgIGZvbnQtc2l6ZTogODAlOworICB0ZXh0LWFsaWduOnJpZ2h0OworCisgIHdpZHRoOiAxMDAlOworICBwYWRkaW5nLXRvcDogMTBweDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBib3R0b206IDBweDsKKyAgbGVmdDogMHB4OworCisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9mb290aW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworfQorKi8KKworCisKKyAgLyoqKioqKioqKioqKioqKioqKiAvCisgLyAgbmFzdHkgaWUgdHdlYWtzICAvCisvICoqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7CisgIG1hcmdpbi1sZWZ0OmV4cHJlc3Npb24oIi01ZW0iKTsKK30KK2JvZHkgeworICBwYWRkaW5nOmV4cHJlc3Npb24oIjRlbSA1ZW0gMGVtIDVlbSIpOworfQorKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyBtb3ppbGxhIHZlbmRvciBzcGVjaWZpYyBjc3MgZXh0ZW5zaW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICAtbW96LW9wYWNpdHk6IDAuOGVtOworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUsCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjVlbTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjNlbTsKK30KKyovCisKK3RhYmxlIHRyIHRkIHRhYmxlIHRyIHRkIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCitociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKK3RhYmxlIHsKKyAgYm9yZGVyOiAwZW07Cit9CisKKyAucGhvdG8geworICBmbG9hdDogcmlnaHQ7CisgIG1hcmdpbi1sZWZ0OiAgIDEuNWVtOworICBtYXJnaW4tYm90dG9tOiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXgtd2lkdGg6ICAgICAgMTdlbTsKKyAgYm9yZGVyOiAgICAgMXB4IHNvbGlkIGdyYXk7CisgIHBhZGRpbmc6ICAgIDNweDsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisgLnNlcGVyYXRvciB7CisgICBwYWRkaW5nLXRvcDogMmVtOworICAgY2xlYXI6IGJvdGg7CisgIH0KKworICAjdmFsaWRhdG9ycyB7CisgICAgICBtYXJnaW4tdG9wOiA1ZW07CisgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgIGNvbG9yOiAjNzc3OworICB9CisgIEBtZWRpYSBwcmludCB7CisgICAgICBib2R5IHsKKyAgICAgICAgICBmb250LXNpemU6IDhwdDsKKyAgICAgIH0KKyAgICAgIC5ub3ByaW50IHsKKyAgICAgICAgICBkaXNwbGF5OiBub25lOworICAgICAgfQorICB9CisKKworLnRpcCwKKy5ub3RlIHsKKyAgIGJhY2tncm91bmQ6ICNmMGYwZjI7CisgICBjb2xvcjogIzMzMzsKKyAgIHBhZGRpbmc6IDIwcHg7CisgICBtYXJnaW46IDIwcHg7Cit9CisKKy50aXAgaDMsCisubm90ZSBoMyB7CisgICBwYWRkaW5nOiAwZW07CisgICBtYXJnaW46IDBlbTsKKyAgIGZvbnQtc2l6ZTogMmVtOworICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICBjb2xvcjogIzMzMzsKK30KKworLnRpcCBhLAorLm5vdGUgYSB7CisgICBjb2xvcjogIzMzMzsKKyAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisuZm9vdG5vdGUgeworICAgZm9udC1zaXplOiBzbWFsbDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisvKiBDaGFuZ2VzIHRoZSBhbm5vdW5jZW1lbnQgdGV4dCAqLworLnRpcCBoMywKKy53YXJuaW5nIGgzLAorLmNhdXRpb24gaDMsCisubm90ZSBoMyB7CisgICBmb250LXNpemU6bGFyZ2U7CisgICBjb2xvcjogIzAwNTU3RDsKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi10YXNrcy54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtdGFza3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YjRkOTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtdGFza3MueG1sCkBAIC0wLDAgKzEsNzExIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ncmVmLXRhc2tzJz4KKzx0aXRsZT5UYXNrczwvdGl0bGU+CisKKzxwYXJhPgorICAgIFRhc2tzIGFyZSB1bml0cyBvZiBleGVjdXRpb24gZm9yIEJpdEJha2UuCisgICAgUmVjaXBlcyAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGVzKSB1c2UgdGFza3MgdG8gY29tcGxldGUKKyAgICBjb25maWd1cmluZywgY29tcGlsaW5nLCBhbmQgcGFja2FnaW5nIHNvZnR3YXJlLgorICAgIFRoaXMgY2hhcHRlciBwcm92aWRlcyBhIHJlZmVyZW5jZSBvZiB0aGUgdGFza3MgZGVmaW5lZCBpbiB0aGUKKyAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorPC9wYXJhPgorCis8c2VjdGlvbiBpZD0nbm9ybWFsLXJlY2lwZS1idWlsZC10YXNrcyc+CisgICAgPHRpdGxlPk5vcm1hbCBSZWNpcGUgQnVpbGQgVGFza3M8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZGVzY3JpYmUgbm9ybWFsIHRhc2tzIGFzc29jaWF0ZWQgd2l0aCBidWlsZGluZworICAgICAgICBhIHJlY2lwZS4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWJ1aWxkJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19idWlsZDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBkZWZhdWx0IHRhc2sgZm9yIGFsbCByZWNpcGVzLgorICAgICAgICAgICAgVGhpcyB0YXNrIGRlcGVuZHMgb24gYWxsIG90aGVyIG5vcm1hbCB0YXNrcworICAgICAgICAgICAgcmVxdWlyZWQgdG8gYnVpbGQgYSByZWNpcGUuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWNvbXBpbGUnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDb21waWxlcyB0aGUgc291cmNlIGluIHRoZSBjb21waWxhdGlvbiBkaXJlY3RvcnksIHdoaWNoIGlzIHBvaW50ZWQKKyAgICAgICAgICAgIHRvIGJ5IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUInPjxmaWxlbmFtZT5CPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1jb21waWxlX3B0ZXN0X2Jhc2UnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2NvbXBpbGVfcHRlc3RfYmFzZTwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENvbXBpbGVzIHRoZSBydW50aW1lIHRlc3Qgc3VpdGUgaW5jbHVkZWQgaW4gdGhlIHNvZnR3YXJlIGJlaW5nCisgICAgICAgICAgICBidWlsdC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtY29uZmlndXJlJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDb25maWd1cmVzIHRoZSBzb3VyY2UgYnkgZW5hYmxpbmcgYW5kIGRpc2FibGluZyBhbnkgYnVpbGQtdGltZSBhbmQKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1jb25maWd1cmVfcHRlc3RfYmFzZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fY29uZmlndXJlX3B0ZXN0X2Jhc2U8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDb25maWd1cmVzIHRoZSBydW50aW1lIHRlc3Qgc3VpdGUgaW5jbHVkZWQgaW4gdGhlIHNvZnR3YXJlIGJlaW5nCisgICAgICAgICAgICBidWlsdC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtZGVwbG95Jz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19kZXBsb3k8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXcml0ZXMgb3V0cHV0IGZpbGVzIHRoYXQgYXJlIHRvIGJlIGRlcGxveWVkIHRvIHRoZSBkZXBsb3kKKyAgICAgICAgICAgIGRpcmVjdG9yeSwgd2hpY2ggaXMgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lESVInPjxmaWxlbmFtZT5ERVBMT1lESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRvX2RlcGxveTwvZmlsZW5hbWU+IHRhc2sgaXMgYQorICAgICAgICAgICAgc2hhcmVkIHN0YXRlIChzc3RhdGUpIHRhc2ssIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHRhc2sgY2FuCisgICAgICAgICAgICBiZSBhY2NlbGVyYXRlZCB0aHJvdWdoIHNzdGF0ZSB1c2UuCisgICAgICAgICAgICBSZWFsaXplIGFsc28gdGhhdCBpZiB0aGUgdGFzayBpcyByZS1leGVjdXRlZCwgYW55IHByZXZpb3VzIG91dHB1dAorICAgICAgICAgICAgaXMgcmVtb3ZlZCAoaS5lLiAiY2xlYW5lZCIpLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1mZXRjaCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGZXRjaGVzIHRoZSBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgIFRoaXMgdGFzayB1c2VzIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBhbmQgdGhlIGFyZ3VtZW50J3MgcHJlZml4IHRvIGRldGVybWluZSB0aGUgY29ycmVjdAorICAgICAgICAgICAgZmV0Y2hlciBtb2R1bGUuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWluc3RhbGwnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDb3BpZXMgZmlsZXMgZnJvbSB0aGUgY29tcGlsYXRpb24gZGlyZWN0b3J5LCB3aGljaCBpcyBkZWZpbmVkIGJ5CisgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CJz48ZmlsZW5hbWU+QjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZSwKKyAgICAgICAgICAgIHRvIGEgaG9sZGluZyBhcmVhIGRlZmluZWQgYnkgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRCc+PGZpbGVuYW1lPkQ8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWluc3RhbGxfcHRlc3RfYmFzZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9faW5zdGFsbF9wdGVzdF9iYXNlPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ29waWVzIHRoZSBydW50aW1lIHRlc3Qgc3VpdGUgZmlsZXMgZnJvbSB0aGUgY29tcGlsYXRpb24gZGlyZWN0b3J5CisgICAgICAgICAgICB0byBhIGhvbGRpbmcgYXJlYS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtcGFja2FnZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFuYWx5emVzIHRoZSBjb250ZW50IG9mIHRoZSBob2xkaW5nIGFyZWEgYW5kIHNwbGl0cyBpdCBpbnRvIHN1YnNldHMKKyAgICAgICAgICAgIGJhc2VkIG9uIGF2YWlsYWJsZSBwYWNrYWdlcyBhbmQgZmlsZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXBhY2thZ2VfcWEnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3BhY2thZ2VfcWE8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBSdW5zIFFBIGNoZWNrcyBvbiBwYWNrYWdlZCBmaWxlcy4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZXNlIGNoZWNrcywgc2VlIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaW5zYW5lJz48ZmlsZW5hbWU+aW5zYW5lPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtcGFja2FnZV93cml0ZV9kZWInPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfZGViPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ3JlYXRlcyBEZWJpYW4gcGFja2FnZXMgKGkuZS4gPGZpbGVuYW1lPiouZGViPC9maWxlbmFtZT4gZmlsZXMpIGFuZAorICAgICAgICAgICAgcGxhY2VzIHRoZW0gaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX0RFQic+PGZpbGVuYW1lPkRFUExPWV9ESVJfREVCPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgZGlyZWN0b3J5IGluIHRoZSBwYWNrYWdlIGZlZWRzIGFyZWEuCisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhY2thZ2UtZmVlZHMtZGV2LWVudmlyb25tZW50Jz5QYWNrYWdlIEZlZWRzPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfaXBrJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlX2lwazwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENyZWF0ZXMgSVBLIHBhY2thZ2VzIChpLmUuIDxmaWxlbmFtZT4qLmlwazwvZmlsZW5hbWU+IGZpbGVzKSBhbmQKKyAgICAgICAgICAgIHBsYWNlcyB0aGVtIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9JUEsnPjxmaWxlbmFtZT5ERVBMT1lfRElSX0lQSzwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgIGRpcmVjdG9yeSBpbiB0aGUgcGFja2FnZSBmZWVkcyBhcmVhLgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwYWNrYWdlLWZlZWRzLWRldi1lbnZpcm9ubWVudCc+UGFja2FnZSBGZWVkczwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1wYWNrYWdlX3dyaXRlX3JwbSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV9ycG08L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDcmVhdGVzIFJQTSBwYWNrYWdlcyAoaS5lLiA8ZmlsZW5hbWU+Ki5ycG08L2ZpbGVuYW1lPiBmaWxlcykgYW5kCisgICAgICAgICAgICBwbGFjZXMgdGhlbSBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfUlBNJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9SUE08L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICBkaXJlY3RvcnkgaW4gdGhlIHBhY2thZ2UgZmVlZHMgYXJlYS4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncGFja2FnZS1mZWVkcy1kZXYtZW52aXJvbm1lbnQnPlBhY2thZ2UgRmVlZHM8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtcGFja2FnZV93cml0ZV90YXInPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfdGFyPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ3JlYXRlcyB0YXJiYWxscyBhbmQgcGxhY2VzIHRoZW0gaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX1RBUic+PGZpbGVuYW1lPkRFUExPWV9ESVJfVEFSPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgZGlyZWN0b3J5IGluIHRoZSBwYWNrYWdlIGZlZWRzIGFyZWEuCisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhY2thZ2UtZmVlZHMtZGV2LWVudmlyb25tZW50Jz5QYWNrYWdlIEZlZWRzPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXBhY2thZ2VkYXRhJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19wYWNrYWdlZGF0YTwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENyZWF0ZXMgcGFja2FnZSBtZXRhZGF0YSB1c2VkIGJ5IHRoZSBidWlsZCBzeXN0ZW0gdG8gZ2VuZXJhdGUgdGhlCisgICAgICAgICAgICBmaW5hbCBwYWNrYWdlcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtcGF0Y2gnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3BhdGNoPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTG9jYXRlcyBwYXRjaCBmaWxlcyBhbmQgYXBwbGllcyB0aGVtIHRvIHRoZSBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwYXRjaGluZy1kZXYtZW52aXJvbm1lbnQnPlBhdGNoaW5nPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXBvcHVsYXRlX2xpYyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfbGljPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV3JpdGVzIGxpY2Vuc2UgaW5mb3JtYXRpb24gZm9yIHRoZSByZWNpcGUgdGhhdCBpcyBjb2xsZWN0ZWQgbGF0ZXIKKyAgICAgICAgICAgIHdoZW4gdGhlIGltYWdlIGlzIGNvbnN0cnVjdGVkLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1wb3B1bGF0ZV9zZGsnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3BvcHVsYXRlX3NkazwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENyZWF0ZXMgdGhlIGZpbGUgYW5kIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGFuIGluc3RhbGxhYmxlIFNESy4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstZ2VuZXJhdGlvbi1kZXYtZW52aXJvbm1lbnQnPlNESyBHZW5lcmF0aW9uPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXBvcHVsYXRlX3N5c3Jvb3QnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3BvcHVsYXRlX3N5c3Jvb3Q8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDb3BpZXMgYSBzdWJzZXQgb2YgZmlsZXMgaW5zdGFsbGVkIGJ5IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB0YXNrIGludG8gdGhlIHN5c3Jvb3QgaW4gb3JkZXIgdG8gbWFrZSB0aGVtIGF2YWlsYWJsZSB0byBvdGhlcgorICAgICAgICAgICAgcmVjaXBlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zeXNyb290PC9maWxlbmFtZT4gdGFzayBpcyBhCisgICAgICAgICAgICBzaGFyZWQgc3RhdGUgKHNzdGF0ZSkgdGFzaywgd2hpY2ggbWVhbnMgdGhhdCB0aGUgdGFzayBjYW4KKyAgICAgICAgICAgIGJlIGFjY2VsZXJhdGVkIHRocm91Z2ggc3N0YXRlIHVzZS4KKyAgICAgICAgICAgIFJlYWxpemUgYWxzbyB0aGF0IGlmIHRoZSB0YXNrIGlzIHJlLWV4ZWN1dGVkLCBhbnkgcHJldmlvdXMgb3V0cHV0CisgICAgICAgICAgICBpcyByZW1vdmVkIChpLmUuICJjbGVhbmVkIikuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXJtX3dvcmsnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3JtX3dvcms8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBSZW1vdmVzIHdvcmsgZmlsZXMgYWZ0ZXIgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzCisgICAgICAgICAgICBmaW5pc2hlZCB3aXRoIHRoZW0uCisgICAgICAgICAgICBZb3UgY2FuIGxlYXJuIG1vcmUgYnkgbG9va2luZyBhdCB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ybS13b3JrJz48ZmlsZW5hbWU+cm1fd29yay5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3Mtcm1fd29ya19hbGwnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3JtX3dvcmtfYWxsPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG9wLWxldmVsIHRhc2sgZm9yIHJlbW92aW5nIHdvcmsgZmlsZXMgYWZ0ZXIgdGhlIGJ1aWxkIHN5c3RlbSBoYXMKKyAgICAgICAgICAgIGZpbmlzaGVkIHdpdGggdGhlbS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtdW5wYWNrJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb191bnBhY2s8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBVbnBhY2tzIHRoZSBzb3VyY2UgY29kZSBpbnRvIGEgd29ya2luZyBkaXJlY3RvcnkgcG9pbnRlZCB0bworICAgICAgICAgICAgYnkKKyAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlIGFsc28KKyAgICAgICAgICAgIHBsYXlzIGEgcm9sZSBpbiB3aGVyZSB1bnBhY2tlZCBzb3VyY2UgZmlsZXMgdWx0aW1hdGVseSByZXNpZGUuCisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgc291cmNlIGZpbGVzIGFyZSB1bnBhY2tlZCwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1mZXRjaGluZy1kZXYtZW52aXJvbm1lbnQnPlNvdXJjZSBGZXRjaGluZzwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGFuZCB0aGUgPGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5TPC9maWxlbmFtZT4gdmFyaWFibGUgZGVzY3JpcHRpb25zLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nbWFudWFsbHktY2FsbGVkLXRhc2tzJz4KKyAgICA8dGl0bGU+TWFudWFsbHkgQ2FsbGVkIFRhc2tzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGVzZSB0YXNrcyBhcmUgdHlwaWNhbGx5IG1hbnVhbGx5IHRyaWdnZXJlZCAoZS5nLiBieSB1c2luZyB0aGUKKyAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UgLWM8L2ZpbGVuYW1lPiBjb21tYW5kLWxpbmUgb3B0aW9uKToKKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWNoZWNrdXJpJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19jaGVja3VyaTwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFZhbGlkYXRlcyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFsdWUuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWNoZWNrdXJpYWxsJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19jaGVja3VyaWFsbDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFZhbGlkYXRlcyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFsdWUgZm9yIGFsbCByZWNpcGVzIHJlcXVpcmVkIHRvIGJ1aWxkIGEgdGFyZ2V0LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1jbGVhbic+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fY2xlYW48L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBSZW1vdmVzIGFsbCBvdXRwdXQgZmlsZXMgZm9yIGEgdGFyZ2V0IGZyb20gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtdW5wYWNrJz48ZmlsZW5hbWU+ZG9fdW5wYWNrPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB0YXNrIGZvcndhcmQgKGkuZS4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYXRjaCc+PGZpbGVuYW1lPmRvX3VucGFjazwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlJz48ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gcnVuIHRoaXMgdGFzayB1c2luZyBCaXRCYWtlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtYyBjbGVhbiA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUnVubmluZyB0aGlzIHRhc2sgZG9lcyBub3QgcmVtb3ZlIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc2hhcmVkLXN0YXRlLWNhY2hlJz5zc3RhdGU8L2xpbms+KSBjYWNoZQorICAgICAgICAgICAgZmlsZXMuCisgICAgICAgICAgICBDb25zZXF1ZW50bHksIGlmIG5vIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgYW5kIHRoZSByZWNpcGUgaXMKKyAgICAgICAgICAgIHJlYnVpbHQgYWZ0ZXIgY2xlYW5pbmcsIG91dHB1dCBmaWxlcyBhcmUgc2ltcGx5IHJlc3RvcmVkIGZyb20gdGhlCisgICAgICAgICAgICBzc3RhdGUgY2FjaGUuCisgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byByZW1vdmUgdGhlIHNzdGF0ZSBjYWNoZSBmaWxlcyBmb3IgdGhlIHJlY2lwZSwKKyAgICAgICAgICAgIHlvdSBuZWVkIHRvIHVzZSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jbGVhbnNzdGF0ZSc+PGZpbGVuYW1lPmRvX2NsZWFuc3N0YXRlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB0YXNrIGluc3RlYWQgKGkuZS4gPGZpbGVuYW1lPmJpdGJha2UgLWMgY2xlYW5zc3RhdGU8L2ZpbGVuYW1lPiA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4pLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1jbGVhbmFsbCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fY2xlYW5hbGw8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBSZW1vdmVzIGFsbCBvdXRwdXQgZmlsZXMsIHNoYXJlZCBzdGF0ZQorICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3NoYXJlZC1zdGF0ZS1jYWNoZSc+c3N0YXRlPC9saW5rPikgY2FjaGUsIGFuZAorICAgICAgICAgICAgZG93bmxvYWRlZCBzb3VyY2UgZmlsZXMgZm9yIGEgdGFyZ2V0IChpLmUuIHRoZSBjb250ZW50cyBvZgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURMX0RJUic+PGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICBFc3NlbnRpYWxseSwgdGhlIDxmaWxlbmFtZT5kb19jbGVhbmFsbDwvZmlsZW5hbWU+IHRhc2sgaXMKKyAgICAgICAgICAgIGlkZW50aWNhbCB0byB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jbGVhbnNzdGF0ZSc+PGZpbGVuYW1lPmRvX2NsZWFuc3N0YXRlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB0YXNrIHdpdGggdGhlIGFkZGVkIHJlbW92YWwgb2YgZG93bmxvYWRlZCBzb3VyY2UgZmlsZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gcnVuIHRoaXMgdGFzayB1c2luZyBCaXRCYWtlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtYyBjbGVhbmFsbCA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVHlwaWNhbGx5LCB5b3Ugd291bGQgbm90IG5vcm1hbGx5IHVzZSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5jbGVhbmFsbDwvZmlsZW5hbWU+IHRhc2suCisgICAgICAgICAgICBEbyBzbyBvbmx5IGlmIHlvdSB3YW50IHRvIHN0YXJ0IGZyZXNoIHdpdGggdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtZmV0Y2gnPjxmaWxlbmFtZT5kb19mZXRjaDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdGFzay4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtY2xlYW5zc3RhdGUnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2NsZWFuc3N0YXRlPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUmVtb3ZlcyBhbGwgb3V0cHV0IGZpbGVzIGFuZCBzaGFyZWQgc3RhdGUKKyAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSdzaGFyZWQtc3RhdGUtY2FjaGUnPnNzdGF0ZTwvbGluaz4pCisgICAgICAgICAgICBjYWNoZSBmb3IgYSB0YXJnZXQuCisgICAgICAgICAgICBFc3NlbnRpYWxseSwgdGhlIDxmaWxlbmFtZT5kb19jbGVhbnNzdGF0ZTwvZmlsZW5hbWU+IHRhc2sgaXMKKyAgICAgICAgICAgIGlkZW50aWNhbCB0byB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jbGVhbic+PGZpbGVuYW1lPmRvX2NsZWFuPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB0YXNrIHdpdGggdGhlIGFkZGVkIHJlbW92YWwgb2Ygc2hhcmVkIHN0YXRlCisgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0nc2hhcmVkLXN0YXRlLWNhY2hlJz5zc3RhdGU8L2xpbms+KSBjYWNoZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBydW4gdGhpcyB0YXNrIHVzaW5nIEJpdEJha2UgYXMgZm9sbG93czoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1jIGNsZWFuc3N0YXRlIDxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSBydW4gdGhlIDxmaWxlbmFtZT5kb19jbGVhbnNzdGF0ZTwvZmlsZW5hbWU+IHRhc2ssCisgICAgICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBubyBsb25nZXIgdXNlcyBhbnkKKyAgICAgICAgICAgIHNzdGF0ZS4KKyAgICAgICAgICAgIENvbnNlcXVlbnRseSwgYnVpbGRpbmcgdGhlIHJlY2lwZSBmcm9tIHNjcmF0Y2ggaXMgZ3VhcmFudGVlZC4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fY2xlYW5zc3RhdGU8L2ZpbGVuYW1lPiB0YXNrIGNhbm5vdCByZW1vdmUKKyAgICAgICAgICAgICAgICBzc3RhdGUgZnJvbSBhIHJlbW90ZSBzc3RhdGUgbWlycm9yLgorICAgICAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIGJ1aWxkIGEgdGFyZ2V0IGZyb20gc2NyYXRjaCB1c2luZyByZW1vdGUKKyAgICAgICAgICAgICAgICBtaXJyb3JzLCB1c2UgdGhlICItZiIgb3B0aW9uIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWYgLWMgZG9fY2xlYW5zc3RhdGUgPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisgICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtZGV2c2hlbGwnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2RldnNoZWxsPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU3RhcnRzIGEgc2hlbGwgd2hvc2UgZW52aXJvbm1lbnQgaXMgc2V0IHVwIGZvcgorICAgICAgICAgICAgZGV2ZWxvcG1lbnQsIGRlYnVnZ2luZywgb3IgYm90aC4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwbGF0ZGV2LWFwcGRldi1kZXZzaGVsbCc+VXNpbmcgYSBEZXZlbG9wbWVudCBTaGVsbDwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgZm9yIG1vcmUKKyAgICAgICAgICAgIGluZm9ybWF0aW9uIGFib3V0IHVzaW5nIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1mZXRjaGFsbCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fZmV0Y2hhbGw8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGZXRjaGVzIGFsbCByZW1vdGUgc291cmNlcyByZXF1aXJlZCB0byBidWlsZCBhIHRhcmdldC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtbGlzdHRhc2tzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19saXN0dGFza3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBMaXN0cyBhbGwgZGVmaW5lZCB0YXNrcyBmb3IgYSB0YXJnZXQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXBhY2thZ2VfaW5kZXgnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3BhY2thZ2VfaW5kZXg8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDcmVhdGVzIG9yIHVwZGF0ZXMgdGhlIGluZGV4IGluIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncGFja2FnZS1mZWVkcy1kZXYtZW52aXJvbm1lbnQnPlBhY2thZ2UgRmVlZHM8L2xpbms+CisgICAgICAgICAgICBhcmVhLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhpcyB0YXNrIGlzIG5vdCB0cmlnZ2VyZWQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSAtYzwvZmlsZW5hbWU+IGNvbW1hbmQtbGluZSBvcHRpb24gYXMKKyAgICAgICAgICAgICAgICBhcmUgdGhlIG90aGVyIHRhc2tzIGluIHRoaXMgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIHRoaXMgdGFzayBpcyBzcGVjaWZpY2FsbHkgZm9yIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlLWluZGV4PC9maWxlbmFtZT4gcmVjaXBlLAorICAgICAgICAgICAgICAgIHlvdSBydW4gaXQgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSBwYWNrYWdlLWluZGV4PC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdpbWFnZS1yZWxhdGVkLXRhc2tzJz4KKyAgICA8dGl0bGU+SW1hZ2UtUmVsYXRlZCBUYXNrczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZvbGxvd2luZyB0YXNrcyBhcmUgYXBwbGljYWJsZSB0byBpbWFnZSByZWNpcGVzLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtYm9vdGltZyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fYm9vdGltZzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENyZWF0ZXMgYSBib290YWJsZSBsaXZlIGltYWdlLgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBsaXZlIGltYWdlIHR5cGVzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1idW5kbGVfaW5pdHJhbWZzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19idW5kbGVfaW5pdHJhbWZzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ29tYmluZXMgYW4gaW5pdGlhbCBSQU0gZGlzayAoaW5pdHJhbWZzKSBpbWFnZSBhbmQga2VybmVsCisgICAgICAgICAgICB0b2dldGhlciB0byBmb3JtIGEgc2luZ2xlIGltYWdlLgorICAgICAgICAgICAgVGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ09ORklHX0lOSVRSQU1GU19TT1VSQ0UnPjxmaWxlbmFtZT5DT05GSUdfSU5JVFJBTUZTX1NPVVJDRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgaGFzIHNvbWUgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSB0eXBlcyBvZiBpbWFnZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXJvb3Rmcyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fcm9vdGZzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ3JlYXRlcyB0aGUgcm9vdCBmaWxlc3lzdGVtIChmaWxlIGFuZCBkaXJlY3Rvcnkgc3RydWN0dXJlKSBmb3IgYW4KKyAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2ltYWdlLWdlbmVyYXRpb24tZGV2LWVudmlyb25tZW50Jz5JbWFnZSBHZW5lcmF0aW9uPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRoZSByb290IGZpbGVzeXN0ZW0gaXMgY3JlYXRlZC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtdGVzdGltYWdlJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb190ZXN0aW1hZ2U8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCb290cyBhbiBpbWFnZSBhbmQgcGVyZm9ybXMgcnVudGltZSB0ZXN0cyB3aXRoaW4gdGhlIGltYWdlLgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGF1dG9tYXRpY2FsbHkgdGVzdGluZyBpbWFnZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwZXJmb3JtaW5nLWF1dG9tYXRlZC1ydW50aW1lLXRlc3RpbmcnPlBlcmZvcm1pbmcgQXV0b21hdGVkIFJ1bnRpbWUgVGVzdGluZzwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXRlc3RpbWFnZV9hdXRvJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb190ZXN0aW1hZ2VfYXV0bzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJvb3RzIGFuIGltYWdlIGFuZCBwZXJmb3JtcyBydW50aW1lIHRlc3RzIHdpdGhpbiB0aGUgaW1hZ2UKKyAgICAgICAgICAgIGltbWVkaWF0ZWx5IGFmdGVyIGl0IGhhcyBiZWVuIGJ1aWx0LgorICAgICAgICAgICAgVGhpcyB0YXNrIGlzIGVuYWJsZWQgd2hlbiB5b3Ugc2V0CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEVTVF9JTUFHRSc+PGZpbGVuYW1lPlRFU1RfSU1BR0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGVxdWFsIHRvICIxIi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGF1dG9tYXRpY2FsbHkgdGVzdGluZyBpbWFnZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwZXJmb3JtaW5nLWF1dG9tYXRlZC1ydW50aW1lLXRlc3RpbmcnPlBlcmZvcm1pbmcgQXV0b21hdGVkIFJ1bnRpbWUgVGVzdGluZzwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXZtZGtpbWcnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3ZtZGtpbWc8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDcmVhdGVzIGEgPGZpbGVuYW1lPi52bWRrPC9maWxlbmFtZT4gaW1hZ2UgZm9yIHVzZSB3aXRoCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LnZtd2FyZS5jb20vJz5WTXdhcmU8L3VsaW5rPgorICAgICAgICAgICAgYW5kIGNvbXBhdGlibGUgdmlydHVhbCBtYWNoaW5lIGhvc3RzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0na2VybmVsLXJlbGF0ZWQtdGFza3MnPgorICAgIDx0aXRsZT5LZXJuZWwtUmVsYXRlZCBUYXNrczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZvbGxvd2luZyB0YXNrcyBhcmUgYXBwbGljYWJsZSB0byBrZXJuZWwgcmVjaXBlcy4KKyAgICAgICAgU29tZSBvZiB0aGVzZSB0YXNrcyAoZS5nLiB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLW1lbnVjb25maWcnPjxmaWxlbmFtZT5kb19tZW51Y29uZmlnPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHRhc2spIGFyZSBhbHNvIGFwcGxpY2FibGUgdG8gcmVjaXBlcyB0aGF0IHVzZQorICAgICAgICBMaW51eCBrZXJuZWwgc3R5bGUgY29uZmlndXJhdGlvbiBzdWNoIGFzIHRoZSBCdXN5Qm94IHJlY2lwZS4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWNvbXBpbGVfa2VybmVsbW9kdWxlcyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fY29tcGlsZV9rZXJuZWxtb2R1bGVzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ29tcGlsZXMgbG9hZGFibGUgbW9kdWxlcyBmb3IgdGhlIExpbnV4IGtlcm5lbC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtZGlmZmNvbmZpZyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fZGlmZmNvbmZpZzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENvbXBhcmVzIHRoZSBvbGQgYW5kIG5ldyBjb25maWcgZmlsZXMgYWZ0ZXIgcnVubmluZyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1tZW51Y29uZmlnJz48ZmlsZW5hbWU+ZG9fbWVudWNvbmZpZzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdGFzayBmb3IgdGhlIGtlcm5lbC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3Mta2VybmVsX2NoZWNrb3V0Jz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19rZXJuZWxfY2hlY2tvdXQ8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDaGVja3Mgb3V0IHNvdXJjZS9tZXRhIGJyYW5jaGVzIGZvciBhIGxpbnV4LXlvY3RvIHN0eWxlIGtlcm5lbC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3Mta2VybmVsX2NvbmZpZ2NoZWNrJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19rZXJuZWxfY29uZmlnY2hlY2s8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBWYWxpZGF0ZXMgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZvciBhIGxpbnV4LXlvY3RvIHN0eWxlIGtlcm5lbC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3Mta2VybmVsX2NvbmZpZ21lJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19rZXJuZWxfY29uZmlnbWU8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBc3NlbWJsZXMgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZvciBhIGxpbnV4LXlvY3RvIHN0eWxlIGtlcm5lbC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3Mta2VybmVsX2xpbmtfdm1saW51eCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fa2VybmVsX2xpbmtfdm1saW51eDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENyZWF0ZXMgYSBzeW1ib2xpYyBsaW5rIGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+YXJjaC8kYXJjaC9ib290PC9maWxlbmFtZT4gZm9yIHZtbGludXgga2VybmVsCisgICAgICAgICAgICBpbWFnZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLW1lbnVjb25maWcnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX21lbnVjb25maWc8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBSdW5zIDxmaWxlbmFtZT5tYWtlIG1lbnVjb25maWc8L2ZpbGVuYW1lPiBmb3IgdGhlIGtlcm5lbC4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+LCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdXNpbmctbWVudWNvbmZpZyc+VXNpbmcmbmJzcDsmbmJzcDs8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+PC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3Mtc2F2ZWRlZmNvbmZpZyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fc2F2ZWRlZmNvbmZpZzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENyZWF0ZXMgYSBtaW5pbWFsIExpbnV4IGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXNpemVjaGVjayc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fc2l6ZWNoZWNrPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ2hlY2tzIHRoZSBzaXplIG9mIHRoZSBrZXJuZWwgaW1hZ2UgYWdhaW5zdAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtFUk5FTF9JTUFHRV9NQVhTSVpFJz48ZmlsZW5hbWU+S0VSTkVMX0lNQUdFX01BWFNJWkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHdoZW4gc2V0LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1zdHJpcCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fc3RyaXA8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTdHJpcHMgdW5uZWVkZWQgc2VjdGlvbnMgb3V0IG9mIHRoZSBMaW51eCBrZXJuZWwgaW1hZ2UuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXVib290X21raW1hZ2UnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3Vib290X21raW1hZ2U8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDcmVhdGVzIGEgdUltYWdlIGZpbGUgZnJvbSB0aGUga2VybmVsIGZvciB0aGUgVS1Cb290IGJvb3Rsb2FkZXIuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXZhbGlkYXRlX2JyYW5jaGVzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb192YWxpZGF0ZV9icmFuY2hlczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEVuc3VyZXMgdGhhdCB0aGUgc291cmNlLCBtZXRhZGF0YSAob3IgYm90aCkgYnJhbmNoZXMgYXJlIG9uIHRoZQorICAgICAgICAgICAgbG9jYXRpb25zIHNwZWNpZmllZCBieSB0aGVpcgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ1JFVic+PGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFsdWVzIGZvciBhIGxpbnV4LXlvY3RvIHN0eWxlIGtlcm5lbC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J21pc2NlbGxhbmVvdXMtdGFza3MnPgorICAgIDx0aXRsZT5NaXNjZWxsYW5lb3VzIFRhc2tzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgZm9sbG93aW5nIHNlY3Rpb25zIGRlc2NyaWJlIG1pc2NlbGxhbmVvdXMgdGFza3MuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1nZW5lcmF0ZV9xdF9jb25maWdfZmlsZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fZ2VuZXJhdGVfcXRfY29uZmlnX2ZpbGU8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXcml0ZXMgYSA8ZmlsZW5hbWU+cXQuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIGZpbGUgdXNlZCBmb3IgYnVpbGRpbmcgYSBRdC1iYXNlZCBhcHBsaWNhdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3Mtc3BkeCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fc3BkeDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgYnVpbGQgc3RhZ2UgdGhhdCB0YWtlcyB0aGUgc291cmNlIGNvZGUgYW5kIHNjYW5zIGl0IG9uIGEgcmVtb3RlCisgICAgICAgICAgICBGT1NTT0xPR1kgc2VydmVyIGluIG9yZGVyIHRvIHByb2R1Y2UgYW4gU1BEWCBkb2N1bWVudC4KKyAgICAgICAgICAgIFRoaXMgdGFzayBhcHBsaWVzIG9ubHkgdG8gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zcGR4Jz48ZmlsZW5hbWU+c3BkeDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3MuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXZhcmlhYmxlcy54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtdmFyaWFibGVzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzRmYzIyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXZhcmlhYmxlcy54bWwKQEAgLTAsMCArMSwxNDA5NiBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPCEtLSBEdW1teSBjaGFwdGVyIC0tPgorPGNoYXB0ZXIgaWQ9J3JlZi12YXJpYWJsZXMtZ2xvcyc+CisKKzx0aXRsZT5WYXJpYWJsZXMgR2xvc3Nhcnk8L3RpdGxlPgorCis8cGFyYT4KKyAgICBUaGlzIGNoYXB0ZXIgbGlzdHMgY29tbW9uIHZhcmlhYmxlcyB1c2VkIGluIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGFuZCBnaXZlcyBhbiBvdmVydmlldworICAgIG9mIHRoZWlyIGZ1bmN0aW9uIGFuZCBjb250ZW50cy4KKzwvcGFyYT4KKworPGdsb3NzYXJ5IGlkPSdyZWYtdmFyaWFibGVzLWdsb3NzYXJ5Jz4KKworCisgICAgPHBhcmE+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUFCSUVYVEVOU0lPTic+QTwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQic+QjwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ0FDSEUnPkM8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUQnPkQ8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVGSV9QUk9WSURFUic+RTwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRkVBVFVSRV9QQUNLQUdFUyc+RjwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItR0RCJz5HPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1IT01FUEFHRSc+SDwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSUNFQ0NfRElTQUJMRUQnPkk8L2xpbms+Cis8IS0tICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWdsb3NzYXJ5LWonPko8L2xpbms+IC0tPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1LQVJDSCc+SzwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTEFCRUxTJz5MPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz5NPC9saW5rPgorPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS1uJz5OPC9saW5rPiAtLT4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItT0JKQ09QWSc+TzwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUCc+UDwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUU1BS0VfUFJPRklMRVMnPlE8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJBTkxJQic+UjwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUyc+UzwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVCc+VDwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVUJPT1RfQ09ORklHJz5VPC9saW5rPgorPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS12Jz5WPC9saW5rPiAtLT4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItV0FSTl9RQSc+VzwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItWFNFUlZFUic+WDwvbGluaz4KKzwhLS0gICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItZ2xvc3NhcnkteSc+WTwvbGluaz4gLS0+Cis8IS0tICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWdsb3NzYXJ5LXonPlo8L2xpbms+LS0+CisgICAgPC9wYXJhPgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktYSc+PHRpdGxlPkE8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQUJJRVhURU5TSU9OJz48Z2xvc3N0ZXJtPkFCSUVYVEVOU0lPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQUJJRVhURU5TSU9OW2RvY10gPSAiRXh0ZW5zaW9uIHRvIHRoZSBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpIGZpZWxkIG9mIHRoZSBHTlUgY2Fub25pY2FsIGFyY2hpdGVjdHVyZSBuYW1lIChlLmcuICJlYWJpIikuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRXh0ZW5zaW9uIHRvIHRoZSBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpCisgICAgICAgICAgICAgICAgICAgIGZpZWxkIG9mIHRoZSBHTlUgY2Fub25pY2FsIGFyY2hpdGVjdHVyZSBuYW1lCisgICAgICAgICAgICAgICAgICAgIChlLmcuICJlYWJpIikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgQUJJIGV4dGVuc2lvbnMgYXJlIHNldCBpbiB0aGUgbWFjaGluZSBpbmNsdWRlIGZpbGVzLgorICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUKKyAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm0uaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICBmaWxlIHNldHMgdGhlIGZvbGxvd2luZyBleHRlbnNpb246CisgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBBQklFWFRFTlNJT04gPSAiZWFiaSIKKyAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQUxMT1dfRU1QVFknPjxnbG9zc3Rlcm0+QUxMT1dfRU1QVFk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEFMTE9XX0VNUFRZW2RvY10gPSAiU3BlY2lmaWVzIGlmIGFuIG91dHB1dCBwYWNrYWdlIHNob3VsZCBzdGlsbCBiZSBwcm9kdWNlZCBpZiBpdCBpcyBlbXB0eS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBpZiBhbiBvdXRwdXQgcGFja2FnZSBzaG91bGQgc3RpbGwgYmUgcHJvZHVjZWQgaWYgaXQgaXMgZW1wdHkuCisgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgQml0QmFrZSBkb2VzIG5vdCBwcm9kdWNlIGVtcHR5IHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgIFRoaXMgZGVmYXVsdCBiZWhhdmlvciBjYW4gY2F1c2UgaXNzdWVzIHdoZW4gdGhlcmUgaXMgYW4KKyAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPiBvcgorICAgICAgICAgICAgICAgICAgIHNvbWUgb3RoZXIgaGFyZCBydW50aW1lIHJlcXVpcmVtZW50IG9uIHRoZSBleGlzdGVuY2Ugb2YgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgTGlrZSBhbGwgcGFja2FnZS1jb250cm9sbGluZyB2YXJpYWJsZXMsIHlvdSBtdXN0IGFsd2F5cyB1c2UgdGhlbSBpbgorICAgICAgICAgICAgICAgICAgIGNvbmp1bmN0aW9uIHdpdGggYSBwYWNrYWdlIG5hbWUgb3ZlcnJpZGUsIGFzIGluOgorICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKyAgICAgQUxMT1dfRU1QVFlfJHtQTn0tZGV2ID0gIjEiCisgICAgIEFMTE9XX0VNUFRZXyR7UE59LXN0YXRpY2RldiA9ICIxIgorICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1BTFRFUk5BVElWRSc+PGdsb3NzdGVybT5BTFRFUk5BVElWRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQUxURVJOQVRJVkVbZG9jXSA9ICJMaXN0cyBjb21tYW5kcyBpbiBhIHBhY2thZ2UgdGhhdCBuZWVkIGFuIGFsdGVybmF0aXZlIGJpbmFyeSBuYW1pbmcgc2NoZW1lLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIGNvbW1hbmRzIGluIGEgcGFja2FnZSB0aGF0IG5lZWQgYW4gYWx0ZXJuYXRpdmUKKyAgICAgICAgICAgICAgICAgICAgYmluYXJ5IG5hbWluZyBzY2hlbWUuCisgICAgICAgICAgICAgICAgICAgIFNvbWV0aW1lcyB0aGUgc2FtZSBjb21tYW5kIGlzIHByb3ZpZGVkIGluIG11bHRpcGxlIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHRoaXMgb2NjdXJzLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBuZWVkcyB0bworICAgICAgICAgICAgICAgICAgICB1c2UgdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0gdG8gY3JlYXRlIGEgZGlmZmVyZW50IGJpbmFyeQorICAgICAgICAgICAgICAgICAgICBuYW1pbmcgc2NoZW1lIHNvIHRoZSBjb21tYW5kcyBjYW4gY28tZXhpc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIHVzZSB0aGUgdmFyaWFibGUsIGxpc3Qgb3V0IHRoZSBwYWNrYWdlJ3MgY29tbWFuZHMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBhbHNvIGV4aXN0IGFzIHBhcnQgb2YgYW5vdGhlciBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIDxmaWxlbmFtZT5idXN5Ym94PC9maWxlbmFtZT4gcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBoYXMgZm91ciBjb21tYW5kcyB0aGF0IGFsc28gZXhpc3QgYXMgcGFydCBvZiBhbm90aGVyCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UsIHlvdSBpZGVudGlmeSB0aGVtIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQUxURVJOQVRJVkVfYnVzeWJveCA9ICJzaCBzZWQgdGVzdCBicmFja2V0IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy11cGRhdGUtYWx0ZXJuYXRpdmVzJz48ZmlsZW5hbWU+dXBkYXRlLWFsdGVybmF0aXZlcy5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUFMVEVSTkFUSVZFX0xJTktfTkFNRSc+PGdsb3NzdGVybT5BTFRFUk5BVElWRV9MSU5LX05BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEFMVEVSTkFUSVZFX0xJTktfTkFNRVtkb2NdID0gIlVzZWQgYnkgdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0gdG8gbWFwIGR1cGxpY2F0ZWQgY29tbWFuZHMgdG8gYWN0dWFsIGxvY2F0aW9ucy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBVc2VkIGJ5IHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIHRvIG1hcCBkdXBsaWNhdGVkIGNvbW1hbmRzCisgICAgICAgICAgICAgICAgICAgIHRvIGFjdHVhbCBsb2NhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB0aGUgPGZpbGVuYW1lPmJyYWNrZXQ8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkIGJ5IHRoZSA8ZmlsZW5hbWU+YnVzeWJveDwvZmlsZW5hbWU+IHBhY2thZ2UgaXMKKyAgICAgICAgICAgICAgICAgICAgZHVwbGljYXRlZCB0aHJvdWdoIGFub3RoZXIgcGFja2FnZSwgeW91IG11c3QgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QUxURVJOQVRJVkVfTElOS19OQU1FPC9maWxlbmFtZT4gdmFyaWFibGUgdG8KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGUgYWN0dWFsIGxvY2F0aW9uOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEFMVEVSTkFUSVZFX0xJTktfTkFNRVticmFja2V0XSA9ICIvdXNyL2Jpbi9bIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIGJpbmFyeSBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5icmFja2V0PC9maWxlbmFtZT4gY29tbWFuZCAoaS5lLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+WzwvZmlsZW5hbWU+KSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVzeWJveDwvZmlsZW5hbWU+IHBhY2thZ2UgcmVzaWRlcyBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9iaW4vPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPkFMVEVSTkFUSVZFX0xJTktfTkFNRTwvZmlsZW5hbWU+IGlzIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCwgaXQgZGVmYXVsdHMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2JpbmRpcn0vPHJlcGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy11cGRhdGUtYWx0ZXJuYXRpdmVzJz48ZmlsZW5hbWU+dXBkYXRlLWFsdGVybmF0aXZlcy5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUFMVEVSTkFUSVZFX1BSSU9SSVRZJz48Z2xvc3N0ZXJtPkFMVEVSTkFUSVZFX1BSSU9SSVRZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBBTFRFUk5BVElWRV9QUklPUklUWVtkb2NdID0gIlVzZWQgYnkgdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0gdG8gY3JlYXRlIGRlZmF1bHQgcHJpb3JpdGllcyBmb3IgZHVwbGljYXRlZCBjb21tYW5kcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBVc2VkIGJ5IHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIHRvIGNyZWF0ZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgIHByaW9yaXRpZXMgZm9yIGR1cGxpY2F0ZWQgY29tbWFuZHMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSB2YXJpYWJsZSB0byBjcmVhdGUgYSBzaW5nbGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICByZWdhcmRsZXNzIG9mIHRoZSBjb21tYW5kIG5hbWUgb3IgcGFja2FnZSwgYSBkZWZhdWx0IGZvcgorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyBkdXBsaWNhdGVkIGNvbW1hbmRzIHJlZ2FyZGxlc3Mgb2YgdGhlIHBhY2thZ2UsIG9yCisgICAgICAgICAgICAgICAgICAgIGEgZGVmYXVsdCBmb3Igc3BlY2lmaWMgY29tbWFuZHMgdGllZCB0byBwYXJ0aWN1bGFyIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSB0aGUgYXZhaWxhYmxlIHN5bnRheCBmb3JtczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBBTFRFUk5BVElWRV9QUklPUklUWSA9ICI8cmVwbGFjZWFibGU+cHJpb3JpdHk8L3JlcGxhY2VhYmxlPiIKKyAgICAgQUxURVJOQVRJVkVfUFJJT1JJVFlbPHJlcGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPl0gPSAiPHJlcGxhY2VhYmxlPnByaW9yaXR5PC9yZXBsYWNlYWJsZT4iCisgICAgIEFMVEVSTkFUSVZFX1BSSU9SSVRZXzxyZXBsYWNlYWJsZT5wa2c8L3JlcGxhY2VhYmxlPls8cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+XSA9ICI8cmVwbGFjZWFibGU+cHJpb3JpdHk8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtdXBkYXRlLWFsdGVybmF0aXZlcyc+PGZpbGVuYW1lPnVwZGF0ZS1hbHRlcm5hdGl2ZXMuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1BTFRFUk5BVElWRV9UQVJHRVQnPjxnbG9zc3Rlcm0+QUxURVJOQVRJVkVfVEFSR0VUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBBTFRFUk5BVElWRV9UQVJHRVRbZG9jXSA9ICJVc2VkIGJ5IHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIHRvIGNyZWF0ZSBkZWZhdWx0IGxpbmsgbG9jYXRpb25zIGZvciBkdXBsaWNhdGVkIGNvbW1hbmRzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFVzZWQgYnkgdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0gdG8gY3JlYXRlIGRlZmF1bHQgbGluaworICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnMgZm9yIGR1cGxpY2F0ZWQgY29tbWFuZHMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSB2YXJpYWJsZSB0byBjcmVhdGUgYSBzaW5nbGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiBmb3IgYWxsIGR1cGxpY2F0ZWQgY29tbWFuZHMgcmVnYXJkbGVzcyBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBuYW1lIG9yIHBhY2thZ2UsIGEgZGVmYXVsdCBmb3IKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgZHVwbGljYXRlZCBjb21tYW5kcyByZWdhcmRsZXNzIG9mIHRoZSBwYWNrYWdlLCBvcgorICAgICAgICAgICAgICAgICAgICBhIGRlZmF1bHQgZm9yIHNwZWNpZmljIGNvbW1hbmRzIHRpZWQgdG8gcGFydGljdWxhciBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgdGhlIGF2YWlsYWJsZSBzeW50YXggZm9ybXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQUxURVJOQVRJVkVfVEFSR0VUID0gIjxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiIKKyAgICAgQUxURVJOQVRJVkVfVEFSR0VUWzxyZXBsYWNlYWJsZT5uYW1lPC9yZXBsYWNlYWJsZT5dID0gIjxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiIKKyAgICAgQUxURVJOQVRJVkVfVEFSR0VUXzxyZXBsYWNlYWJsZT5wa2c8L3JlcGxhY2VhYmxlPls8cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+XSA9ICI8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiA8ZmlsZW5hbWU+QUxURVJOQVRJVkVfVEFSR0VUPC9maWxlbmFtZT4gaXMgbm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCwgaXQgaW5oZXJpdHMgdGhlIHZhbHVlIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUFMVEVSTkFUSVZFX0xJTktfTkFNRSc+PGZpbGVuYW1lPkFMVEVSTkFUSVZFX0xJTktfTkFNRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiA8ZmlsZW5hbWU+QUxURVJOQVRJVkVfTElOS19OQU1FPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkFMVEVSTkFUSVZFX1RBUkdFVDwvZmlsZW5hbWU+IGFyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1lLCB0aGUgdGFyZ2V0IGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5BTFRFUk5BVElWRV9UQVJHRVQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcyAiPGZpbGVuYW1lPi57QlBOfTwvZmlsZW5hbWU+IiBhcHBlbmRlZCB0byBpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmluYWxseSwgaWYgdGhlIGZpbGUgcmVmZXJlbmNlZCBoYXMgbm90IGJlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5hbWVkLCB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSB3aWxsIHJlbmFtZSBpdCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2b2lkIHRoZSBuZWVkIHRvIHJlbmFtZSBhbHRlcm5hdGl2ZSBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrIHdoaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0YWluaW5nIHN1cHBvcnQgZm9yIHRoZSBjb21tYW5kIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtdXBkYXRlLWFsdGVybmF0aXZlcyc+PGZpbGVuYW1lPnVwZGF0ZS1hbHRlcm5hdGl2ZXMuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1BUFBFTkQnPjxnbG9zc3Rlcm0+QVBQRU5EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBBUFBFTkRbZG9jXSA9ICJBbiBvdmVycmlkZSBsaXN0IG9mIGFwcGVuZCBzdHJpbmdzIGZvciBlYWNoIExBQkVMLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEFuIG92ZXJyaWRlIGxpc3Qgb2YgYXBwZW5kIHN0cmluZ3MgZm9yIGVhY2gKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxBQkVMUyc+PGZpbGVuYW1lPkxBQkVMPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWdydWItZWZpJz48ZmlsZW5hbWU+Z3J1Yi1lZmk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1BUic+PGdsb3NzdGVybT5BUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQVJbZG9jXSA9ICJNaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gJ2FyJy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdXNlZCB0byBydW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFyPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQVJDSElWRVJfTU9ERSc+PGdsb3NzdGVybT5BUkNISVZFUl9NT0RFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBBUkNISVZFUl9NT0RFW2RvY10gPSAiQ29udHJvbHMgYXJjaGl2ZSBjcmVhdGlvbiB1c2VkIHdoZW4gcmVsZWFzaW5nIHNvdXJjZSBmaWxlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHVzZWQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYXJjaGl2ZXInPjxmaWxlbmFtZT5hcmNoaXZlcjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgZGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZQorICAgICAgICAgICAgICAgICAgICBhIHJlbGVhc2VkIGFyY2hpdmUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgdmFyaWFibGUgdG8gY3JlYXRlIGFyY2hpdmVzIG9mIHBhdGNoZWQKKyAgICAgICAgICAgICAgICAgICAgc291cmNlLCBvcmlnaW5hbCBzb3VyY2UsIGNvbmZpZ3VyZWQgc291cmNlLCBhbmQgc28gZm9ydGgKKyAgICAgICAgICAgICAgICAgICAgYnkgZW1wbG95aW5nIHRoZSBmb2xsb3dpbmcgdmFyaWFibGUgZmxhZ3MgKHZhcmZsYWdzKToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBBUkNISVZFUl9NT0RFW3NyY10gPSAib3JpZ2luYWwiICAgICAgICAgICAgICAgICAjIFVzZXMgb3JpZ2luYWwgKHVucGFja2VkKSBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmaWxlcy4KKworICAgICBBUkNISVZFUl9NT0RFW3NyY10gPSAicGF0Y2hlZCIgICAgICAgICAgICAgICAgICAjIFVzZXMgcGF0Y2hlZCBzb3VyY2UgZmlsZXMuIFRoaXMgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgZGVmYXVsdC4KKworICAgICBBUkNISVZFUl9NT0RFW3NyY10gPSAiY29uZmlndXJlZCIgICAgICAgICAgICAgICAjIFVzZXMgY29uZmlndXJlZCBzb3VyY2UgZmlsZXMuCisKKyAgICAgQVJDSElWRVJfTU9ERVtkaWZmXSA9ICIxIiAgICAgICAgICAgICAgICAgICAgICAgIyBVc2VzIHBhdGNoZXMgYmV0d2VlbiBkb191bnBhY2sgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZG9fcGF0Y2guCisKKyAgICAgQVJDSElWRVJfTU9ERVtkaWZmLWV4Y2x1ZGVdID89ICI8cmVwbGFjZWFibGU+ZmlsZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5maWxlPC9yZXBsYWNlYWJsZT4gLi4uIiAgIyBMaXN0cyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBleGNsdWRlIGZyb20gZGlmZi4KKworICAgICBBUkNISVZFUl9NT0RFW2R1bXBkYXRhXSA9ICIxIiAgICAgICAgICAgICAgICAgICAjIFVzZXMgZW52aXJvbm1lbnQgZGF0YS4KKworICAgICBBUkNISVZFUl9NT0RFW3JlY2lwZV0gPSAiMSIgICAgICAgICAgICAgICAgICAgICAjIFVzZXMgcmVjaXBlIGFuZCBpbmNsdWRlIGZpbGVzLgorCisgICAgIEFSQ0hJVkVSX01PREVbc3JwbV0gPSAiMSIgICAgICAgICAgICAgICAgICAgICAgICMgVXNlcyBSUE0gcGFja2FnZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRoZSB2YXJpYWJsZSB3b3Jrcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2FyY2hpdmVyLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgICAgIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQVMnPjxnbG9zc3Rlcm0+QVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEFTW2RvY10gPSAiTWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuIHRoZSBhc3NlbWJsZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHVzZWQgdG8gcnVuIHRoZQorICAgICAgICAgICAgICAgICAgICBhc3NlbWJsZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQVNTVU1FX1BST1ZJREVEJz48Z2xvc3N0ZXJtPkFTU1VNRV9QUk9WSURFRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQVNTVU1FX1BST1ZJREVEW2RvY10gPSAiTGlzdHMgcmVjaXBlIG5hbWVzIChQTiB2YWx1ZXMpIEJpdEJha2UgZG9lcyBub3QgYXR0ZW1wdCB0byBidWlsZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyByZWNpcGUgbmFtZXMKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcykgQml0QmFrZSBkb2VzIG5vdCBhdHRlbXB0IHRvIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICBJbnN0ZWFkLCBCaXRCYWtlIGFzc3VtZXMgdGhlc2UgcmVjaXBlcyBoYXZlIGFscmVhZHkgYmVlbgorICAgICAgICAgICAgICAgICAgICBidWlsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gT3BlbkVtYmVkZGVkIENvcmUsIDxmaWxlbmFtZT5BU1NVTUVfUFJPVklERUQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBtb3N0bHkgc3BlY2lmaWVzIG5hdGl2ZSB0b29scyB0aGF0IHNob3VsZCBub3QgYmUgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgaXMgPGZpbGVuYW1lPmdpdC1uYXRpdmU8L2ZpbGVuYW1lPiwgd2hpY2ggd2hlbgorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQsIGFsbG93cyBmb3IgdGhlIEdpdCBiaW5hcnkgZnJvbSB0aGUgaG9zdCB0byBiZQorICAgICAgICAgICAgICAgICAgICB1c2VkIHJhdGhlciB0aGFuIGJ1aWxkaW5nIDxmaWxlbmFtZT5naXQtbmF0aXZlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQVNTVU1FX1NITElCUyc+PGdsb3NzdGVybT5BU1NVTUVfU0hMSUJTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBBU1NVTUVfU0hMSUJTW2RvY10gPSBQcm92aWRlcyBhZGRpdGlvbmFsIHNobGlicyBwcm92aWRlciBtYXBwaW5nIGluZm9ybWF0aW9uLCB3aGljaCBhZGRzIHRvIG9yIG92ZXJ3cml0ZXMgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQcm92aWRlcyBhZGRpdGlvbmFsIDxmaWxlbmFtZT5zaGxpYnM8L2ZpbGVuYW1lPiBwcm92aWRlcgorICAgICAgICAgICAgICAgICAgICBtYXBwaW5nIGluZm9ybWF0aW9uLCB3aGljaCBhZGRzIHRvIG9yIG92ZXJ3cml0ZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIHByb3ZpZGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgU2VwYXJhdGUgbXVsdGlwbGUgZW50cmllcyB1c2luZyBzcGFjZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHVzZSB0aGUgZm9sbG93aW5nIGZvcm0gdG8gYWRkIGFuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zaGxpYjwvZmlsZW5hbWU+IHByb3ZpZGVyIG9mCisgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5zaGxpYm5hbWU8L3JlcGxhY2VhYmxlPiBpbgorICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+cGFja2FnZW5hbWU8L3JlcGxhY2VhYmxlPiB3aXRoIHRoZSBvcHRpb25hbAorICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+dmVyc2lvbjwvcmVwbGFjZWFibGU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxyZXBsYWNlYWJsZT5zaGxpYm5hbWU6cGFja2FnZW5hbWU8L3JlcGxhY2VhYmxlPltfPHJlcGxhY2VhYmxlPnZlcnNpb248L3JlcGxhY2VhYmxlPl0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBhZGRzIGEgc2hhcmVkIGxpYnJhcnkgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYkVHTC5zby4xPC9maWxlbmFtZT4gYXMgYmVpbmcgcHJvdmlkZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5saWJlZ2wtaW1wbGVtZW50YXRpb248L2ZpbGVuYW1lPiBwYWNrYWdlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEFTU1VNRV9TSExJQlMgPSAibGliRUdMLnNvLjE6bGliZWdsLWltcGxlbWVudGF0aW9uIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQVVUSE9SJz48Z2xvc3N0ZXJtPkFVVEhPUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQVVUSE9SW2RvY10gPSAiRW1haWwgYWRkcmVzcyB1c2VkIHRvIGNvbnRhY3QgdGhlIG9yaWdpbmFsIGF1dGhvciBvciBhdXRob3JzIGluIG9yZGVyIHRvIHNlbmQgcGF0Y2hlcyBhbmQgZm9yd2FyZCBidWdzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBlbWFpbCBhZGRyZXNzIHVzZWQgdG8gY29udGFjdCB0aGUgb3JpZ2luYWwgYXV0aG9yCisgICAgICAgICAgICAgICAgICAgIG9yIGF1dGhvcnMgaW4gb3JkZXIgdG8gc2VuZCBwYXRjaGVzIGFuZCBmb3J3YXJkIGJ1Z3MuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQVVUT19MSUJOQU1FX1BLR1MnPjxnbG9zc3Rlcm0+QVVUT19MSUJOQU1FX1BLR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEFVVE9fTElCTkFNRV9QS0dTW2RvY10gPSAiU3BlY2lmaWVzIHdoaWNoIHBhY2thZ2VzIHNob3VsZCBiZSBjaGVja2VkIGZvciBsaWJyYXJpZXMgYW5kIHJlbmFtZWQgYWNjb3JkaW5nIHRvIERlYmlhbiBsaWJyYXJ5IHBhY2thZ2UgbmFtaW5nLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRlYmlhbic+PGZpbGVuYW1lPmRlYmlhbjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBpcyBpbmhlcml0ZWQsIHdoaWNoIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QVVUT19MSUJOQU1FX1BLR1M8L2ZpbGVuYW1lPiBzcGVjaWZpZXMgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgc2hvdWxkIGJlIGNoZWNrZWQgZm9yIGxpYnJhcmllcyBhbmQgcmVuYW1lZAorICAgICAgICAgICAgICAgICAgICBhY2NvcmRpbmcgdG8gRGViaWFuIGxpYnJhcnkgcGFja2FnZSBuYW1pbmcuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzICIke1BBQ0tBR0VTfSIsIHdoaWNoIGNhdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgZGViaWFuIGNsYXNzIHRvIGFjdCBvbiBhbGwgcGFja2FnZXMgdGhhdCBhcmUKKyAgICAgICAgICAgICAgICAgICAgZXhwbGljaXRseSBnZW5lcmF0ZWQgYnkgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1BVVRPX1NZU0xJTlVYTUVOVSc+PGdsb3NzdGVybT5BVVRPX1NZU0xJTlVYTUVOVTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQVVUT19TWVNMSU5VWE1FTlVbZG9jXSA9ICJFbmFibGVzIGNyZWF0aW5nIGFuIGF1dG9tYXRpYyBtZW51IGZvciB0aGUgc3lzbGludXggYm9vdGxvYWRlci4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBFbmFibGVzIGNyZWF0aW5nIGFuIGF1dG9tYXRpYyBtZW51IGZvciB0aGUgc3lzbGludXgKKyAgICAgICAgICAgICAgICAgICAgYm9vdGxvYWRlci4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3Qgc2V0IHRoaXMgdmFyaWFibGUgaW4geW91ciByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zeXNsaW51eCc+PGZpbGVuYW1lPnN5c2xpbnV4PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGNoZWNrcyB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUFVVE9SRVYnPjxnbG9zc3Rlcm0+QVVUT1JFVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQVVUT1JFVltkb2NdID0gIldoZW4gU1JDUkVWIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSwgaXQgc3BlY2lmaWVzIHRvIHVzZSB0aGUgbGF0ZXN0IHNvdXJjZSByZXZpc2lvbiBpbiB0aGUgcmVwb3NpdG9yeS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU1JDUkVWJz5TUkNSRVY8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlLCBpdCBzcGVjaWZpZXMgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgIHRoZSBsYXRlc3Qgc291cmNlIHJldmlzaW9uIGluIHRoZSByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDUkVWID0gIiR7QVVUT1JFVn0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHVzZSB0aGUgcHJldmlvdXMgc3RhdGVtZW50IHRvIHJldHJpZXZlIHRoZSBsYXRlc3QKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiBvZiBzb2Z0d2FyZSwgeW91IG5lZWQgdG8gYmUgc3VyZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjb250YWlucworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNQVic+PGZpbGVuYW1lPlNSQ1BWPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhdmUgYSBrZXJuZWwgcmVjaXBlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgaW5oZXJpdHMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWtlcm5lbCc+a2VybmVsPC9saW5rPiBjbGFzcworICAgICAgICAgICAgICAgICAgICBhbmQgeW91IHVzZSB0aGUgcHJldmlvdXMgc3RhdGVtZW50LgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIDxmaWxlbmFtZT4ke1NSQ1BWfTwvZmlsZW5hbWU+IGRvZXMgbm90CisgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgZ2V0IGludG8gPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IG5lZWQgdG8gY2hhbmdlIDxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGluIHlvdXIgcmVjaXBlIHNvIHRoYXQgaXQgZG9lcyBjb250YWluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1NSQ1BWfTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUFWQUlMVFVORVMnPjxnbG9zc3Rlcm0+QVZBSUxUVU5FUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQVZBSUxUVU5FU1tkb2NdID0gIlRoZSBsaXN0IG9mIGRlZmluZWQgQ1BVIGFuZCBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpIHR1bmluZ3MgKGkuZS4gICJ0dW5lcyIpIGF2YWlsYWJsZSBmb3IgdXNlIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsaXN0IG9mIGRlZmluZWQgQ1BVIGFuZCBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgIChBQkkpIHR1bmluZ3MgKGkuZS4gICJ0dW5lcyIpIGF2YWlsYWJsZSBmb3IgdXNlIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgbGlzdCBzaW1wbHkgcHJlc2VudHMgdGhlIHR1bmVzIHRoYXQgYXJlIGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgTm90IGFsbCB0dW5lcyBtYXkgYmUgY29tcGF0aWJsZSB3aXRoIGEgcGFydGljdWxhcgorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lIGNvbmZpZ3VyYXRpb24sIG9yIHdpdGggZWFjaCBvdGhlciBpbiBhCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2NvbWJpbmluZy1tdWx0aXBsZS12ZXJzaW9ucy1saWJyYXJ5LWZpbGVzLWludG8tb25lLWltYWdlJz5NdWx0aWxpYjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBhIHR1bmUgdG8gdGhlIGxpc3QsIGJlIHN1cmUgdG8gYXBwZW5kIGl0IHdpdGgKKyAgICAgICAgICAgICAgICAgICAgc3BhY2VzIHVzaW5nIHRoZSAiKz0iIEJpdEJha2Ugb3BlcmF0b3IuCisgICAgICAgICAgICAgICAgICAgIERvIG5vdCBzaW1wbHkgcmVwbGFjZSB0aGUgbGlzdCBieSB1c2luZyB0aGUgIj0iIG9wZXJhdG9yLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I2Jhc2ljLXN5bnRheCc+QmFzaWMgU3ludGF4PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIEJpdEJha2UgVXNlciBNYW51YWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWInPjx0aXRsZT5CPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUInPjxnbG9zc3Rlcm0+QjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQltkb2NdID0gIlRoZSBCdWlsZCBEaXJlY3RvcnkuIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHBsYWNlcyBnZW5lcmF0ZWQgb2JqZWN0cyBpbnRvIHRoZSBCdWlsZCBEaXJlY3RvcnkgZHVyaW5nIGEgcmVjaXBlJ3MgYnVpbGQgcHJvY2Vzcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBpbiB3aGljaCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwbGFjZXMgZ2VuZXJhdGVkCisgICAgICAgICAgICAgICAgICAgIG9iamVjdHMgZHVyaW5nIGEgcmVjaXBlJ3MgYnVpbGQgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyBkaXJlY3RvcnkgaXMgdGhlIHNhbWUgYXMgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnksIHdoaWNoIGlzIGRlZmluZWQgYXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUyA9ICIke1dPUktESVJ9LyR7QlB9LyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNlcGFyYXRlIHRoZSAoPGZpbGVuYW1lPlM8L2ZpbGVuYW1lPikgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgZGlyZWN0b3J5IHBvaW50ZWQgdG8gYnkgdGhlIDxmaWxlbmFtZT5CPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIE1vc3QgQXV0b3Rvb2xzLWJhc2VkIHJlY2lwZXMgc3VwcG9ydCBzZXBhcmF0aW5nIHRoZXNlCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIGRlZmF1bHRzIHRvIHVzaW5nIHNlcGFyYXRlIGRpcmVjdG9yaWVzIGZvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2NjPC9maWxlbmFtZT4gYW5kIHNvbWUga2VybmVsIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkFEX1JFQ09NTUVOREFUSU9OUyc+PGdsb3NzdGVybT5CQURfUkVDT01NRU5EQVRJT05TPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQURfUkVDT01NRU5EQVRJT05TW2RvY10gPSAiQSBsaXN0IG9mIHBhY2thZ2VzIG5vdCB0byBpbnN0YWxsIGRlc3BpdGUgYmVpbmcgcmVjb21tZW5kZWQgYnkgYSByZWNpcGUuIFN1cHBvcnQgZm9yIHRoaXMgdmFyaWFibGUgZXhpc3RzIG9ubHkgd2hlbiB1c2luZyB0aGUgSVBLIHBhY2thZ2luZyBiYWNrZW5kLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIExpc3RzICJyZWNvbW1lbmRlZC1vbmx5IiBwYWNrYWdlcyB0byBub3QgaW5zdGFsbC4KKyAgICAgICAgICAgICAgICAgICAgUmVjb21tZW5kZWQtb25seSBwYWNrYWdlcyBhcmUgcGFja2FnZXMgaW5zdGFsbGVkIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gcHJldmVudCBhbnkgb2YgdGhlc2UgInJlY29tbWVuZGVkIiBwYWNrYWdlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgIGJlaW5nIGluc3RhbGxlZCBieSBsaXN0aW5nIHRoZW0gd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJBRF9SRUNPTU1FTkRBVElPTlM8L2ZpbGVuYW1lPiB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQURfUkVDT01NRU5EQVRJT05TID0gIjxyZXBsYWNlYWJsZT5wYWNrYWdlX25hbWU8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+cGFja2FnZV9uYW1lPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnBhY2thZ2VfbmFtZTwvcmVwbGFjZWFibGU+IC4uLiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldCB0aGlzIHZhcmlhYmxlIGdsb2JhbGx5IGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9yIHlvdSBjYW4gYXR0YWNoIGl0IHRvCisgICAgICAgICAgICAgICAgICAgIGEgc3BlY2lmaWMgaW1hZ2UgcmVjaXBlIGJ5IHVzaW5nIHRoZSByZWNpcGUgbmFtZSBvdmVycmlkZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQURfUkVDT01NRU5EQVRJT05TX3BuLTxyZXBsYWNlYWJsZT50YXJnZXRfaW1hZ2U8L3JlcGxhY2VhYmxlPiA9ICI8cmVwbGFjZWFibGU+cGFja2FnZV9uYW1lPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIHJlYWxpemUgdGhhdCBpZiB5b3UgY2hvb3NlIHRvIG5vdCBpbnN0YWxsCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIHVzaW5nIHRoaXMgdmFyaWFibGUgYW5kIHNvbWUgb3RoZXIgcGFja2FnZXMgYXJlCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVudCBvbiB0aGVtIChpLmUuIGxpc3RlZCBpbiBhIHJlY2lwZSdzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlKSwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaWdub3JlcyB5b3VyCisgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgYW5kIHdpbGwgaW5zdGFsbCB0aGUgcGFja2FnZXMgdG8gYXZvaWQgZGVwZW5kZW5jeQorICAgICAgICAgICAgICAgICAgICBlcnJvcnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIHRoaXMgdmFyaWFibGUgZXhpc3RzIG9ubHkgd2hlbiB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgSVBLIGFuZCBSUE0gcGFja2FnaW5nIGJhY2tlbmQuCisgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgZG9lcyBub3QgZXhpc3QgZm9yIERFQi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTk9fUkVDT01NRU5EQVRJT05TJz48ZmlsZW5hbWU+Tk9fUkVDT01NRU5EQVRJT05TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfRVhDTFVERSc+PGZpbGVuYW1lPlBBQ0tBR0VfRVhDTFVERTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgZm9yIHJlbGF0ZWQgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkFTRV9MSUInPjxnbG9zc3Rlcm0+QkFTRV9MSUI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJBU0VfTElCW2RvY10gPSAiVGhlIGxpYnJhcnkgZGlyZWN0b3J5IG5hbWUgZm9yIHRoZSBDUFUgb3IgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSAoQUJJKSB0dW5lLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsaWJyYXJ5IGRpcmVjdG9yeSBuYW1lIGZvciB0aGUgQ1BVIG9yIEFwcGxpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgIEJpbmFyeSBJbnRlcmZhY2UgKEFCSSkgdHVuZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5CQVNFX0xJQjwvZmlsZW5hbWU+IGFwcGxpZXMgb25seSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgTXVsdGlsaWIgY29udGV4dC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY29tYmluaW5nLW11bHRpcGxlLXZlcnNpb25zLWxpYnJhcnktZmlsZXMtaW50by1vbmUtaW1hZ2UnPkNvbWJpbmluZyBNdWx0aXBsZSBWZXJzaW9ucyBvZiBMaWJyYXJ5IEZpbGVzIGludG8gT25lIEltYWdlPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvcgorICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBvbiBNdWx0aWxpYi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5CQVNFX0xJQjwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIGRlZmluZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIG1hY2hpbmUgaW5jbHVkZSBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICBJZiBNdWx0aWxpYiBpcyBub3QgYmVpbmcgdXNlZCwgdGhlIHZhbHVlIGRlZmF1bHRzIHRvICJsaWIiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJBU0VfV09SS0RJUic+PGdsb3NzdGVybT5CQVNFX1dPUktESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJBU0VfV09SS0RJUltkb2NdID0gIlBvaW50cyB0byB0aGUgYmFzZSBvZiB0aGUgd29yayBkaXJlY3RvcnkgZm9yIGFsbCByZWNpcGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgYmFzZSBvZiB0aGUgd29yayBkaXJlY3RvcnkgZm9yIGFsbCByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAiJHtUTVBESVJ9L3dvcmsiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0FMTE9XRURfTkVUV09SS1MnPjxnbG9zc3Rlcm0+QkJfQUxMT1dFRF9ORVRXT1JLUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJfQUxMT1dFRF9ORVRXT1JLU1tkb2NdID0gIkEgbGlzdCBvZiBob3N0cyB0aGF0IHRoZSBmZXRjaGVyIGlzIGFsbG93ZWQgdG8gdXNlIHRvIG9idGFpbiB0aGUgcmVxdWlyZWQgc291cmNlIGNvZGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBzcGFjZS1kZWxpbWl0ZWQgbGlzdCBvZiBob3N0cyB0aGF0IHRoZSBmZXRjaGVyCisgICAgICAgICAgICAgICAgICAgIGlzIGFsbG93ZWQgdG8gdXNlIHRvIG9idGFpbiB0aGUgcmVxdWlyZWQgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgY29uc2lkZXJhdGlvbnMgc3Vycm91bmRpbmcgdGhpcyB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGhvc3QgbGlzdCBpcyBvbmx5IHVzZWQgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJfTk9fTkVUV09SSzwvZmlsZW5hbWU+IGlzIGVpdGhlciBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgb3Igc2V0IHRvICIwIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW1pdGVkIHN1cHBvcnQgZm9yIHdpbGRjYXJkIG1hdGNoaW5nIGFnYWluc3QgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5uaW5nIG9mIGhvc3QgbmFtZXMgZXhpc3RzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNldHRpbmcgbWF0Y2hlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naXQuZ251Lm9yZzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mdHAuZ251Lm9yZzwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Zm9vLmdpdC5nbnUub3JnPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQl9BTExPV0VEX05FVFdPUktTID0gIiouZ251Lm9yZyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWlycm9ycyBub3QgaW4gdGhlIGhvc3QgbGlzdCBhcmUgc2tpcHBlZCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZWQgaW4gZGVidWcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW1wdHMgdG8gYWNjZXNzIG5ldHdvcmtzIG5vdCBpbiB0aGUgaG9zdCBsaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F1c2UgYSBmYWlsdXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgPGZpbGVuYW1lPkJCX0FMTE9XRURfTkVUV09SS1M8L2ZpbGVuYW1lPiBpbgorICAgICAgICAgICAgICAgICAgICBjb25qdW5jdGlvbiB3aXRoCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyB2ZXJ5IHVzZWZ1bC4KKyAgICAgICAgICAgICAgICAgICAgQWRkaW5nIHRoZSBob3N0IHlvdSB3YW50IHRvIHVzZSB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+IHJlc3VsdHMgaW4gdGhlIHNvdXJjZSBjb2RlCisgICAgICAgICAgICAgICAgICAgIGJlaW5nIGZldGNoZWQgZnJvbSBhbiBhbGxvd2VkIGxvY2F0aW9uIGFuZCBhdm9pZHMgcmFpc2luZworICAgICAgICAgICAgICAgICAgICBhbiBlcnJvciB3aGVuIGEgaG9zdCB0aGF0IGlzIG5vdCBhbGxvd2VkIGlzIGluIGEKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBiZWNhdXNlIHRoZSBmZXRjaGVyIGRvZXMgbm90IGF0dGVtcHQgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICBob3N0IGxpc3RlZCBpbiA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IGFmdGVyIGEKKyAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bCBmZXRjaCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+IG9jY3Vycy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9EQU5HTElOR0FQUEVORFNfV0FSTk9OTFknPjxnbG9zc3Rlcm0+QkJfREFOR0xJTkdBUFBFTkRTX1dBUk5PTkxZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQl9EQU5HTElOR0FQUEVORFNfV0FSTk9OTFlbZG9jXSA9ICJEZWZpbmVzIGhvdyBCaXRCYWtlIGhhbmRsZXMgc2l0dWF0aW9ucyB3aGVyZSBhbiBhcHBlbmQgZmlsZSAoLmJiYXBwZW5kKSBoYXMgbm8gY29ycmVzcG9uZGluZyByZWNpcGUgZmlsZSAoLmJiKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIGhvdyBCaXRCYWtlIGhhbmRsZXMgc2l0dWF0aW9ucyB3aGVyZSBhbiBhcHBlbmQKKyAgICAgICAgICAgICAgICAgICAgZmlsZSAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KSBoYXMgbm8KKyAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyByZWNpcGUgZmlsZSAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb25kaXRpb24gb2Z0ZW4gb2NjdXJzIHdoZW4gbGF5ZXJzIGdldCBvdXQgb2Ygc3luYworICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+b2UtY29yZTwvZmlsZW5hbWU+IGJ1bXBzIGEKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIHZlcnNpb24gYW5kIHRoZSBvbGQgcmVjaXBlIG5vIGxvbmdlciBleGlzdHMgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICBvdGhlciBsYXllciBoYXMgbm90IGJlZW4gdXBkYXRlZCB0byB0aGUgbmV3IHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHJlY2lwZSB5ZXQpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBmYXRhbCBiZWhhdmlvciBpcyBzYWZlc3QgYmVjYXVzZSBpdCBpcworICAgICAgICAgICAgICAgICAgICB0aGUgc2FuZSByZWFjdGlvbiBnaXZlbiBzb21ldGhpbmcgaXMgb3V0IG9mIHN5bmMuCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGltcG9ydGFudCB0byByZWFsaXplIHdoZW4geW91ciBjaGFuZ2VzIGFyZSBubyBsb25nZXIKKyAgICAgICAgICAgICAgICAgICAgYmVpbmcgYXBwbGllZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBjaGFuZ2UgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYnkgc2V0dGluZyB0aGlzCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvICIxIiwgInllcyIsIG9yICJ0cnVlIgorICAgICAgICAgICAgICAgICAgICBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0RBTkdMSU5HQVBQRU5EU19XQVJOT05MWSA9ICIxIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfRElTS01PTl9ESVJTJz48Z2xvc3N0ZXJtPkJCX0RJU0tNT05fRElSUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJfRElTS01PTl9ESVJTW2RvY10gPSAiTW9uaXRvcnMgZGlzayBzcGFjZSBhbmQgYXZhaWxhYmxlIGlub2RlcyBkdXJpbmcgdGhlIGJ1aWxkIGFuZCBhbGxvd3MgeW91IHRvIGNvbnRyb2wgdGhlIGJ1aWxkIGJhc2VkIG9uIHRoZXNlIHBhcmFtZXRlcnMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTW9uaXRvcnMgZGlzayBzcGFjZSBhbmQgYXZhaWxhYmxlIGlub2RlcyBkdXJpbmcgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGFuZCBhbGxvd3MgeW91IHRvIGNvbnRyb2wgdGhlIGJ1aWxkIGJhc2VkIG9uIHRoZXNlCisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERpc2sgc3BhY2UgbW9uaXRvcmluZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICBUbyBlbmFibGUgbW9uaXRvcmluZywgYWRkIHRoZSA8ZmlsZW5hbWU+QkJfRElTS01PTl9ESVJTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8geW91ciA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgZm9ybToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQl9ESVNLTU9OX0RJUlMgPSAiPHJlcGxhY2VhYmxlPmFjdGlvbjwvcmVwbGFjZWFibGU+LDxyZXBsYWNlYWJsZT5kaXI8L3JlcGxhY2VhYmxlPiw8cmVwbGFjZWFibGU+dGhyZXNob2xkPC9yZXBsYWNlYWJsZT4gWy4uLl0iCisKKyAgICAgd2hlcmU6CisKKyAgICAgICAgPHJlcGxhY2VhYmxlPmFjdGlvbjwvcmVwbGFjZWFibGU+IGlzOgorICAgICAgICAgICBBQk9SVDogICAgIEltbWVkaWF0ZWx5IGFib3J0IHRoZSBidWlsZCB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgYSB0aHJlc2hvbGQgaXMgYnJva2VuLgorICAgICAgICAgICBTVE9QVEFTS1M6IFN0b3AgdGhlIGJ1aWxkIGFmdGVyIHRoZSBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgICBleGVjdXRpbmcgdGFza3MgaGF2ZSBmaW5pc2hlZCB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgYSB0aHJlc2hvbGQgaXMgYnJva2VuLgorICAgICAgICAgICBXQVJOOiAgICAgIElzc3VlIGEgd2FybmluZyBidXQgY29udGludWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgd2hlbiBhIHRocmVzaG9sZCBpcyBicm9rZW4uCisgICAgICAgICAgICAgICAgICAgICAgU3Vic2VxdWVudCB3YXJuaW5ncyBhcmUgaXNzdWVkIGFzCisgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfRElTS01PTl9XQVJOSU5URVJWQUwnPkJCX0RJU0tNT05fV0FSTklOVEVSVkFMPC9saW5rPiB2YXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICB3aGljaCBtdXN0IGJlIGRlZmluZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgY29uZi9sb2NhbC5jb25mIGZpbGUuCisKKyAgICAgICAgPHJlcGxhY2VhYmxlPmRpcjwvcmVwbGFjZWFibGU+IGlzOgorICAgICAgICAgICBBbnkgZGlyZWN0b3J5IHlvdSBjaG9vc2UuIFlvdSBjYW4gc3BlY2lmeSBvbmUgb3IKKyAgICAgICAgICAgbW9yZSBkaXJlY3RvcmllcyB0byBtb25pdG9yIGJ5IHNlcGFyYXRpbmcgdGhlCisgICAgICAgICAgIGdyb3VwaW5ncyB3aXRoIGEgc3BhY2UuICBJZiB0d28gZGlyZWN0b3JpZXMgYXJlCisgICAgICAgICAgIG9uIHRoZSBzYW1lIGRldmljZSwgb25seSB0aGUgZmlyc3QgZGlyZWN0b3J5CisgICAgICAgICAgIGlzIG1vbml0b3JlZC4KKworICAgICAgICA8cmVwbGFjZWFibGU+dGhyZXNob2xkPC9yZXBsYWNlYWJsZT4gaXM6CisgICAgICAgICAgIEVpdGhlciB0aGUgbWluaW11bSBhdmFpbGFibGUgZGlzayBzcGFjZSwKKyAgICAgICAgICAgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGZyZWUgaW5vZGVzLCBvcgorICAgICAgICAgICBib3RoLiAgWW91IG11c3Qgc3BlY2lmeSBhdCBsZWFzdCBvbmUuICBUbworICAgICAgICAgICBvbWl0IG9uZSBvciB0aGUgb3RoZXIsIHNpbXBseSBvbWl0IHRoZSB2YWx1ZS4KKyAgICAgICAgICAgU3BlY2lmeSB0aGUgdGhyZXNob2xkIHVzaW5nIEcsIE0sIEsgZm9yIEdieXRlcywKKyAgICAgICAgICAgTWJ5dGVzLCBhbmQgS2J5dGVzLCByZXNwZWN0aXZlbHkuIElmIHlvdSBkbworICAgICAgICAgICBub3Qgc3BlY2lmeSBHLCBNLCBvciBLLCBLYnl0ZXMgaXMgYXNzdW1lZCBieQorICAgICAgICAgICBkZWZhdWx0LiAgRG8gbm90IHVzZSBHQiwgTUIsIG9yIEtCLgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfRElTS01PTl9ESVJTID0gIkFCT1JULCR7VE1QRElSfSwxRywxMDBLIFdBUk4sJHtTU1RBVEVfRElSfSwxRywxMDBLIgorICAgICBCQl9ESVNLTU9OX0RJUlMgPSAiU1RPUFRBU0tTLCR7VE1QRElSfSwxRyIKKyAgICAgQkJfRElTS01PTl9ESVJTID0gIkFCT1JULCR7VE1QRElSfSwsMTAwSyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgZXhhbXBsZSB3b3JrcyBvbmx5IGlmIHlvdSBhbHNvIHByb3ZpZGUKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTCc+PGZpbGVuYW1lPkJCX0RJU0tNT05fV0FSTklOVEVSVkFMPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBjYXVzZXMgdGhlIGJ1aWxkIHN5c3RlbSB0byBpbW1lZGlhdGVseQorICAgICAgICAgICAgICAgICAgICBhYm9ydCB3aGVuIGVpdGhlciB0aGUgZGlzayBzcGFjZSBpbiA8ZmlsZW5hbWU+JHtUTVBESVJ9PC9maWxlbmFtZT4gZHJvcHMKKyAgICAgICAgICAgICAgICAgICAgYmVsb3cgMSBHYnl0ZSBvciB0aGUgYXZhaWxhYmxlIGZyZWUgaW5vZGVzIGRyb3BzIGJlbG93CisgICAgICAgICAgICAgICAgICAgIDEwMCBLYnl0ZXMuCisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgdHdvIGRpcmVjdG9yaWVzIGFyZSBwcm92aWRlZCB3aXRoIHRoZSB2YXJpYWJsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBhbHNvIGlzc3VlIGEKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZyB3aGVuIHRoZSBkaXNrIHNwYWNlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtTU1RBVEVfRElSfTwvZmlsZW5hbWU+IGRpcmVjdG9yeSBkcm9wcworICAgICAgICAgICAgICAgICAgICBiZWxvdyAxIEdieXRlIG9yIHRoZSBudW1iZXIgb2YgZnJlZSBpbm9kZXMgZHJvcHMKKyAgICAgICAgICAgICAgICAgICAgYmVsb3cgMTAwIEtieXRlcy4KKyAgICAgICAgICAgICAgICAgICAgU3Vic2VxdWVudCB3YXJuaW5ncyBhcmUgaXNzdWVkIGR1cmluZyBpbnRlcnZhbHMgYXMKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBieSB0aGUgPGZpbGVuYW1lPkJCX0RJU0tNT05fV0FSTklOVEVSVkFMPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzZWNvbmQgZXhhbXBsZSBzdG9wcyB0aGUgYnVpbGQgYWZ0ZXIgYWxsIGN1cnJlbnRseQorICAgICAgICAgICAgICAgICAgICBleGVjdXRpbmcgdGFza3MgY29tcGxldGUgd2hlbiB0aGUgbWluaW11bSBkaXNrIHNwYWNlCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+JHs8bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz5UTVBESVI8L2xpbms+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBkcm9wcyBiZWxvdyAxIEdieXRlLgorICAgICAgICAgICAgICAgICAgICBObyBkaXNrIG1vbml0b3Jpbmcgb2NjdXJzIGZvciB0aGUgZnJlZSBpbm9kZXMgaW4gdGhpcyBjYXNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZmluYWwgZXhhbXBsZSBpbW1lZGlhdGVseSBhYm9ydHMgdGhlIGJ1aWxkIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBmcmVlIGlub2RlcyBpbiB0aGUgPGZpbGVuYW1lPiR7VE1QRElSfTwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICBkcm9wcyBiZWxvdyAxMDAgS2J5dGVzLgorICAgICAgICAgICAgICAgICAgICBObyBkaXNrIHNwYWNlIG1vbml0b3JpbmcgZm9yIHRoZSBkaXJlY3RvcnkgaXRzZWxmIG9jY3VycworICAgICAgICAgICAgICAgICAgICBpbiB0aGlzIGNhc2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfRElTS01PTl9XQVJOSU5URVJWQUwnPjxnbG9zc3Rlcm0+QkJfRElTS01PTl9XQVJOSU5URVJWQUw8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJCX0RJU0tNT05fV0FSTklOVEVSVkFMW2RvY10gPSAiRGVmaW5lcyB0aGUgZGlzayBzcGFjZSBhbmQgZnJlZSBpbm9kZSB3YXJuaW5nIGludGVydmFscy4gVG8gc2V0IHRoZXNlIGludGVydmFscywgZGVmaW5lIHRoZSB2YXJpYWJsZSBpbiB0aGUgY29uZi9sb2NhbC5jb25mIGZpbGUgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBkaXNrIHNwYWNlIGFuZCBmcmVlIGlub2RlIHdhcm5pbmcgaW50ZXJ2YWxzLgorICAgICAgICAgICAgICAgICAgICBUbyBzZXQgdGhlc2UgaW50ZXJ2YWxzLCBkZWZpbmUgdGhlIHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJfRElTS01PTl9XQVJOSU5URVJWQUw8L2ZpbGVuYW1lPiB2YXJpYWJsZSwgeW91IG11c3QKKyAgICAgICAgICAgICAgICAgICAgYWxzbyB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9ESVNLTU9OX0RJUlMnPjxmaWxlbmFtZT5CQl9ESVNLTU9OX0RJUlM8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgYW5kIGRlZmluZSBpdHMgYWN0aW9uIGFzICJXQVJOIi4KKyAgICAgICAgICAgICAgICAgICAgRHVyaW5nIHRoZSBidWlsZCwgc3Vic2VxdWVudCB3YXJuaW5ncyBhcmUgaXNzdWVkIGVhY2ggdGltZQorICAgICAgICAgICAgICAgICAgICBkaXNrIHNwYWNlIG9yIG51bWJlciBvZiBmcmVlIGlub2RlcyBmdXJ0aGVyIHJlZHVjZXMgYnkKKyAgICAgICAgICAgICAgICAgICAgdGhlIHJlc3BlY3RpdmUgaW50ZXJ2YWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3QgcHJvdmlkZSBhIDxmaWxlbmFtZT5CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCB5b3UgZG8gdXNlIDxmaWxlbmFtZT5CQl9ESVNLTU9OX0RJUlM8L2ZpbGVuYW1lPiB3aXRoCisgICAgICAgICAgICAgICAgICAgIHRoZSAiV0FSTiIgYWN0aW9uLCB0aGUgZGlzayBtb25pdG9yaW5nIGludGVydmFsIGRlZmF1bHRzIHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfRElTS01PTl9XQVJOSU5URVJWQUwgPSAiNTBNLDVLIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gc3BlY2lmeWluZyB0aGUgdmFyaWFibGUgaW4geW91ciBjb25maWd1cmF0aW9uIGZpbGUsCisgICAgICAgICAgICAgICAgICAgIHVzZSB0aGUgZm9sbG93aW5nIGZvcm06CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfRElTS01PTl9XQVJOSU5URVJWQUwgPSAiPHJlcGxhY2VhYmxlPmRpc2tfc3BhY2VfaW50ZXJ2YWw8L3JlcGxhY2VhYmxlPiw8cmVwbGFjZWFibGU+ZGlza19pbm9kZV9pbnRlcnZhbDwvcmVwbGFjZWFibGU+IgorCisgICAgIHdoZXJlOgorCisgICAgICAgIDxyZXBsYWNlYWJsZT5kaXNrX3NwYWNlX2ludGVydmFsPC9yZXBsYWNlYWJsZT4gaXM6CisgICAgICAgICAgIEFuIGludGVydmFsIG9mIG1lbW9yeSBleHByZXNzZWQgaW4gZWl0aGVyCisgICAgICAgICAgIEcsIE0sIG9yIEsgZm9yIEdieXRlcywgTWJ5dGVzLCBvciBLYnl0ZXMsCisgICAgICAgICAgIHJlc3BlY3RpdmVseS4gWW91IGNhbm5vdCB1c2UgR0IsIE1CLCBvciBLQi4KKworICAgICAgICA8cmVwbGFjZWFibGU+ZGlza19pbm9kZV9pbnRlcnZhbDwvcmVwbGFjZWFibGU+IGlzOgorICAgICAgICAgICBBbiBpbnRlcnZhbCBvZiBmcmVlIGlub2RlcyBleHByZXNzZWQgaW4gZWl0aGVyCisgICAgICAgICAgIEcsIE0sIG9yIEsgZm9yIEdieXRlcywgTWJ5dGVzLCBvciBLYnl0ZXMsCisgICAgICAgICAgIHJlc3BlY3RpdmVseS4gWW91IGNhbm5vdCB1c2UgR0IsIE1CLCBvciBLQi4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfRElTS01PTl9ESVJTID0gIldBUk4sJHtTU1RBVEVfRElSfSwxRywxMDBLIgorICAgICBCQl9ESVNLTU9OX1dBUk5JTlRFUlZBTCA9ICI1ME0sNUsiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgdmFyaWFibGVzIGNhdXNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvCisgICAgICAgICAgICAgICAgICAgIGlzc3VlIHN1YnNlcXVlbnQgd2FybmluZ3MgZWFjaCB0aW1lIHRoZSBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICAgICAgZGlzayBzcGFjZSBmdXJ0aGVyIHJlZHVjZXMgYnkgNTAgTWJ5dGVzIG9yIHRoZSBudW1iZXIKKyAgICAgICAgICAgICAgICAgICAgb2YgZnJlZSBpbm9kZXMgZnVydGhlciByZWR1Y2VzIGJ5IDUgS2J5dGVzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtTU1RBVEVfRElSfTwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgU3Vic2VxdWVudCB3YXJuaW5ncyBiYXNlZCBvbiB0aGUgaW50ZXJ2YWwgb2NjdXIgZWFjaCB0aW1lCisgICAgICAgICAgICAgICAgICAgIGEgcmVzcGVjdGl2ZSBpbnRlcnZhbCBpcyByZWFjaGVkIGJleW9uZCB0aGUgaW5pdGlhbCB3YXJuaW5nCisgICAgICAgICAgICAgICAgICAgIChpLmUuIDEgR2J5dGVzIGFuZCAxMDAgS2J5dGVzKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMnPjxnbG9zc3Rlcm0+QkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFNbZG9jXSA9ICJDYXVzZXMgdGFyYmFsbHMgb2YgdGhlIEdpdCByZXBvc2l0b3JpZXMgdG8gYmUgcGxhY2VkIGluIHRoZSBETF9ESVIgZGlyZWN0b3J5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIENhdXNlcyB0YXJiYWxscyBvZiB0aGUgR2l0IHJlcG9zaXRvcmllcywgaW5jbHVkaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICBHaXQgbWV0YWRhdGEsIHRvIGJlIHBsYWNlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURMX0RJUic+PGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBjcmVhdGluZyBhbmQgcGxhY2luZyB0YXJiYWxscyBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgR2l0IHJlcG9zaXRvcmllcyBpcyBub3QgdGhlIGRlZmF1bHQgYWN0aW9uIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyA9ICIxIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX05VTUJFUl9USFJFQURTJz48Z2xvc3N0ZXJtPkJCX05VTUJFUl9USFJFQURTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQl9OVU1CRVJfVEhSRUFEU1tkb2NdID0gIlRoZSBtYXhpbXVtIG51bWJlciBvZiB0YXNrcyBCaXRCYWtlIHNob3VsZCBydW4gaW4gcGFyYWxsZWwgYXQgYW55IG9uZSB0aW1lLiBUaGlzIHZhcmlhYmxlIGlzIGF1dG9tYXRpY2FsbHkgY29uZmlndXJlZCB0byBiZSBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIGJ1aWxkIHN5c3RlbSBjb3Jlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGFza3MgQml0QmFrZSBzaG91bGQgcnVuIGluIHBhcmFsbGVsCisgICAgICAgICAgICAgICAgICAgIGF0IGFueSBvbmUgdGltZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseSBjb25maWd1cmVzCisgICAgICAgICAgICAgICAgICAgIHRoaXMgdmFyaWFibGUgdG8gYmUgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBjb3JlcyBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYSBzeXN0ZW0gd2l0aCBhIGR1YWwgY29yZSBwcm9jZXNzb3IgdGhhdAorICAgICAgICAgICAgICAgICAgICBhbHNvIHVzZXMgaHlwZXItdGhyZWFkaW5nIGNhdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCX05VTUJFUl9USFJFQURTPC9maWxlbmFtZT4gdmFyaWFibGUgdG8gZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICB0byAiNCIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBzaW5nbGUgc29ja2V0IHN5c3RlbXMgKGkuZS4gb25lIENQVSksIHlvdSBzaG91bGQgbm90CisgICAgICAgICAgICAgICAgICAgIGhhdmUgdG8gb3ZlcnJpZGUgdGhpcyB2YXJpYWJsZSB0byBnYWluIG9wdGltYWwgcGFyYWxsZWxpc20KKyAgICAgICAgICAgICAgICAgICAgZHVyaW5nIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91IGhhdmUgdmVyeSBsYXJnZSBzeXN0ZW1zIHRoYXQgZW1wbG95CisgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlIHBoeXNpY2FsIENQVXMsIHlvdSBtaWdodCB3YW50IHRvIG1ha2Ugc3VyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCX05VTUJFUl9USFJFQURTPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgbm90CisgICAgICAgICAgICAgICAgICAgIHNldCBoaWdoZXIgdGhhbiAiMjAiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzcGVlZGluZyB1cCBidWlsZHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3NwZWVkaW5nLXVwLXRoZS1idWlsZCc+U3BlZWRpbmcgVXAgdGhlIEJ1aWxkPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkNMQVNTRVhURU5EJz48Z2xvc3N0ZXJtPkJCQ0xBU1NFWFRFTkQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJCQ0xBU1NFWFRFTkRbZG9jXSA9ICJBbGxvd3MgeW91IHRvIGV4dGVuZCBhIHJlY2lwZSBzbyB0aGF0IGl0IGJ1aWxkcyB2YXJpYW50cyBvZiB0aGUgc29mdHdhcmUuIENvbW1vbiB2YXJpYW50cyBmb3IgcmVjaXBlcyBhcmUgJ25hdGl2ZScsICdjcm9zcycsICduYXRpdmVzZGsnIGFuZCBtdWx0aWxpYnMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQWxsb3dzIHlvdSB0byBleHRlbmQgYSByZWNpcGUgc28gdGhhdCBpdCBidWlsZHMgdmFyaWFudHMgb2YgdGhlIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgICAgICBDb21tb24gdmFyaWFudHMgZm9yIHJlY2lwZXMgZXhpc3Qgc3VjaCBhcyAibmF0aXZlcyIgbGlrZSA8ZmlsZW5hbWU+cXVpbHQtbmF0aXZlPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIGEgY29weSBvZiBRdWlsdCBidWlsdCB0byBydW4gb24gdGhlIGJ1aWxkIHN5c3RlbTsKKyAgICAgICAgICAgICAgICAgICAgImNyb3NzZXMiIHN1Y2ggYXMgPGZpbGVuYW1lPmdjYy1jcm9zczwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBhIGNvbXBpbGVyIGJ1aWx0IHRvIHJ1biBvbiB0aGUgYnVpbGQgbWFjaGluZSBidXQgcHJvZHVjZXMgYmluYXJpZXMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBydW4gb24gdGhlIHRhcmdldCA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz47CisgICAgICAgICAgICAgICAgICAgICJuYXRpdmVzZGsiLCB3aGljaCB0YXJnZXRzIHRoZSBTREsgbWFjaGluZSBpbnN0ZWFkIG9mIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT47CisgICAgICAgICAgICAgICAgICAgIGFuZCAibXVsaXRsaWJzIiBpbiB0aGUgZm9ybSAiPGZpbGVuYW1lPm11bHRpbGliOjwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPm11bHRpbGliX25hbWU8L3JlcGxhY2VhYmxlPiIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIGJ1aWxkIGEgZGlmZmVyZW50IHZhcmlhbnQgb2YgdGhlIHJlY2lwZSB3aXRoIGEgbWluaW1hbCBhbW91bnQgb2YgY29kZSwgaXQgdXN1YWxseQorICAgICAgICAgICAgICAgICAgICBpcyBhcyBzaW1wbGUgYXMgYWRkaW5nIHRoZSBmb2xsb3dpbmcgdG8geW91ciByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJDTEFTU0VYVEVORCA9KyAibmF0aXZlIG5hdGl2ZXNkayIKKyAgICAgQkJDTEFTU0VYVEVORCA9KyAibXVsdGlsaWI6PHJlcGxhY2VhYmxlPm11bHRpbGliX25hbWU8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkZJTEVfQ09MTEVDVElPTlMnPjxnbG9zc3Rlcm0+QkJGSUxFX0NPTExFQ1RJT05TPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQkZJTEVfQ09MTEVDVElPTlNbZG9jXSA9ICJMaXN0cyB0aGUgbmFtZXMgb2YgY29uZmlndXJlZCBsYXllcnMuIFRoZXNlIG5hbWVzIGFyZSB1c2VkIHRvIGZpbmQgdGhlIG90aGVyIEJCRklMRV8qIHZhcmlhYmxlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyB0aGUgbmFtZXMgb2YgY29uZmlndXJlZCBsYXllcnMuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIG5hbWVzIGFyZSB1c2VkIHRvIGZpbmQgdGhlIG90aGVyIDxmaWxlbmFtZT5CQkZJTEVfKjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCBlYWNoIGxheWVyIHdpbGwgYXBwZW5kIGl0cyBuYW1lIHRvIHRoaXMgdmFyaWFibGUgaW4gaXRzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCRklMRV9QQVRURVJOJz48Z2xvc3N0ZXJtPkJCRklMRV9QQVRURVJOPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQkZJTEVfUEFUVEVSTltkb2NdID0gIlZhcmlhYmxlIHRoYXQgZXhwYW5kcyB0byBtYXRjaCBmaWxlcyBmcm9tIEJCRklMRVMgaW4gYSBwYXJ0aWN1bGFyIGxheWVyLiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgaW4gdGhlIGxheWVyLmNvbmYgZmlsZSBhbmQgbXVzdCBiZSBzdWZmaXhlZCB3aXRoIHRoZSBuYW1lIG9mIGEgbGF5ZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUgdGhhdCBleHBhbmRzIHRvIG1hdGNoIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCRklMRVMnPjxmaWxlbmFtZT5CQkZJTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGluIGEgcGFydGljdWxhciBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIHRoZSA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZSBhbmQgbXVzdAorICAgICAgICAgICAgICAgICAgICBiZSBzdWZmaXhlZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBzcGVjaWZpYyBsYXllciAoZS5nLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJGSUxFX1BBVFRFUk5fZW1lbmxvdzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkZJTEVfUFJJT1JJVFknPjxnbG9zc3Rlcm0+QkJGSUxFX1BSSU9SSVRZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQkZJTEVfUFJJT1JJVFlbZG9jXSA9ICJBc3NpZ25zIHRoZSBwcmlvcml0eSBmb3IgcmVjaXBlIGZpbGVzIGluIGVhY2ggbGF5ZXIuIFNldHRpbmcgdGhpcyB2YXJpYWJsZSBhbGxvd3MgeW91IHRvIHByaW9yaXRpemUgYSBsYXllciBhZ2FpbnN0IG90aGVyIGxheWVycyB0aGF0IGNvbnRhaW4gdGhlIHNhbWUgcmVjaXBlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEFzc2lnbnMgdGhlIHByaW9yaXR5IGZvciByZWNpcGUgZmlsZXMgaW4gZWFjaCBsYXllci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VmdWwgaW4gc2l0dWF0aW9ucyB3aGVyZSB0aGUgc2FtZSByZWNpcGUgYXBwZWFycyBpbgorICAgICAgICAgICAgICAgICAgICBtb3JlIHRoYW4gb25lIGxheWVyLgorICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIHRoaXMgdmFyaWFibGUgYWxsb3dzIHlvdSB0byBwcmlvcml0aXplIGEKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIgYWdhaW5zdCBvdGhlciBsYXllcnMgdGhhdCBjb250YWluIHRoZSBzYW1lIHJlY2lwZSAtIGVmZmVjdGl2ZWx5CisgICAgICAgICAgICAgICAgICAgIGxldHRpbmcgeW91IGNvbnRyb2wgdGhlIHByZWNlZGVuY2UgZm9yIHRoZSBtdWx0aXBsZSBsYXllcnMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBwcmVjZWRlbmNlIGVzdGFibGlzaGVkIHRocm91Z2ggdGhpcyB2YXJpYWJsZSBzdGFuZHMgcmVnYXJkbGVzcyBvZiBhCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSdzIHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlKS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgbGF5ZXIgdGhhdCBoYXMgYSByZWNpcGUgd2l0aCBhIGhpZ2hlciA8ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPiB2YWx1ZSBidXQgZm9yCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRoZSA8ZmlsZW5hbWU+QkJGSUxFX1BSSU9SSVRZPC9maWxlbmFtZT4gaXMgc2V0IHRvIGhhdmUgYSBsb3dlciBwcmVjZWRlbmNlIHN0aWxsIGhhcyBhCisgICAgICAgICAgICAgICAgICAgIGxvd2VyIHByZWNlZGVuY2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgbGFyZ2VyIHZhbHVlIGZvciB0aGUgPGZpbGVuYW1lPkJCRklMRV9QUklPUklUWTwvZmlsZW5hbWU+IHZhcmlhYmxlIHJlc3VsdHMgaW4gYSBoaWdoZXIKKyAgICAgICAgICAgICAgICAgICAgcHJlY2VkZW5jZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSB2YWx1ZSA2IGhhcyBhIGhpZ2hlciBwcmVjZWRlbmNlIHRoYW4gdGhlIHZhbHVlIDUuCisgICAgICAgICAgICAgICAgICAgIElmIG5vdCBzcGVjaWZpZWQsIHRoZSA8ZmlsZW5hbWU+QkJGSUxFX1BSSU9SSVRZPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgc2V0IGJhc2VkIG9uIGxheWVyCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcyAoc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUxBWUVSREVQRU5EUyc+TEFZRVJERVBFTkRTPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlIGZvcgorICAgICAgICAgICAgICAgICAgICBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBwcmlvcml0eSwgaWYgdW5zcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgZm9yIGEgbGF5ZXIgd2l0aCBubyBkZXBlbmRlbmNpZXMsIGlzIHRoZSBsb3dlc3QgZGVmaW5lZCBwcmlvcml0eSArIDEKKyAgICAgICAgICAgICAgICAgICAgKG9yIDEgaWYgbm8gcHJpb3JpdGllcyBhcmUgZGVmaW5lZCkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDx0aXA+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBjb21tYW5kIDxmaWxlbmFtZT5iaXRiYWtlLWxheWVycyBzaG93LWxheWVyczwvZmlsZW5hbWU+IHRvIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgYWxsIGNvbmZpZ3VyZWQgbGF5ZXJzIGFsb25nIHdpdGggdGhlaXIgcHJpb3JpdGllcy4KKyAgICAgICAgICAgICAgICA8L3RpcD4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCRklMRVMnPjxnbG9zc3Rlcm0+QkJGSUxFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJGSUxFU1tkb2NdID0gIkxpc3Qgb2YgcmVjaXBlIGZpbGVzIHVzZWQgYnkgQml0QmFrZSB0byBidWlsZCBzb2Z0d2FyZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHJlY2lwZSBmaWxlcyB1c2VkIGJ5IEJpdEJha2UgdG8gYnVpbGQgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJJTkNMVURFTE9HUyc+PGdsb3NzdGVybT5CQklOQ0xVREVMT0dTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQklOQ0xVREVMT0dTW2RvY10gPSAiVmFyaWFibGUgdGhhdCBjb250cm9scyBob3cgQml0QmFrZSBkaXNwbGF5cyBsb2dzIG9uIGJ1aWxkIGZhaWx1cmUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUgdGhhdCBjb250cm9scyBob3cgQml0QmFrZSBkaXNwbGF5cyBsb2dzIG9uIGJ1aWxkIGZhaWx1cmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJJTkNMVURFTE9HU19MSU5FUyc+PGdsb3NzdGVybT5CQklOQ0xVREVMT0dTX0xJTkVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQklOQ0xVREVMT0dTX0xJTkVTW2RvY10gPSAiQW1vdW50IG9mIGxvZyBsaW5lcyBwcmludGVkIG9uIGZhaWx1cmUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSWYKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCSU5DTFVERUxPR1MnPjxmaWxlbmFtZT5CQklOQ0xVREVMT0dTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCwgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXNrIGxvZyBmaWxlIHRvIHByaW50IHdoZW4gcmVwb3J0aW5nIGEgZmFpbGVkIHRhc2suCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgc2V0IDxmaWxlbmFtZT5CQklOQ0xVREVMT0dTX0xJTkVTPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIHRoZSBlbnRpcmUgbG9nIGlzIHByaW50ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJMQVlFUlMnPjxnbG9zc3Rlcm0+QkJMQVlFUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJCTEFZRVJTW2RvY10gPSAiTGlzdHMgdGhlIGxheWVycyB0byBlbmFibGUgZHVyaW5nIHRoZSBidWlsZC4gVGhpcyB2YXJpYWJsZSBpcyBkZWZpbmVkIGluIHRoZSBiYmxheWVycy5jb25mIGNvbmZpZ3VyYXRpb24gZmlsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyB0aGUgbGF5ZXJzIHRvIGVuYWJsZSBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIGRlZmluZWQgaW4gdGhlIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICBmaWxlIGluIHRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJMQVlFUlMgPSAiIFwKKyAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEgXAorICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YS15b2N0byBcCisgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhLXlvY3RvLWJzcCBcCisgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhLW15a2VybmVsIFwKKyAgICAgICAiCisKKyAgICAgQkJMQVlFUlNfTk9OX1JFTU9WQUJMRSA/PSAiIFwKKyAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEgXAorICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YS15b2N0byBcCisgICAgICAgIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJMQVlFUlNfTk9OX1JFTU9WQUJMRSc+PGZpbGVuYW1lPkJCTEFZRVJTX05PTl9SRU1PVkFCTEU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGV4aXN0cyBvbmx5IGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy90b29scy1yZXNvdXJjZXMvcHJvamVjdHMvaG9iJz5Ib2I8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGRvZXMgbm90IHVzZSB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgZW5hYmxlcyBmb3VyIGxheWVycywgb25lIG9mIHdoaWNoIGlzIGEgY3VzdG9tLCB1c2VyLWRlZmluZWQgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPm1ldGEtbXlrZXJuZWw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkxBWUVSU19OT05fUkVNT1ZBQkxFJz48Z2xvc3N0ZXJtPkJCTEFZRVJTX05PTl9SRU1PVkFCTEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJCTEFZRVJTX05PTl9SRU1PVkFCTEVbZG9jXSA9ICJMaXN0cyBjb3JlIGxheWVycyB0aGF0IGNhbm5vdCBiZSByZW1vdmVkIGZyb20gdGhlIGJibGF5ZXJzLmNvbmYgZmlsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyBjb3JlIGxheWVycyB0aGF0IGNhbm5vdCBiZSByZW1vdmVkIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSBkdXJpbmcgYSBidWlsZAorICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy90b29scy1yZXNvdXJjZXMvcHJvamVjdHMvaG9iJz5Ib2I8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nIGFuIGltYWdlIG91dHNpZGUgb2YgSG9iLCB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gaWdub3JlcyB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIG9yZGVyIGZvciBCaXRCYWtlIHRvIGJ1aWxkIHlvdXIgaW1hZ2UgdXNpbmcgSG9iLCB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSBtdXN0IGluY2x1ZGUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5tZXRhLXlvY3RvPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29yZSBsYXllcnMuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHNob3dzIHRoZXNlIHR3byBsYXllcnMgbGlzdGVkIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+QkJMQVlFUlNfTk9OX1JFTU9WQUJMRTwvZmlsZW5hbWU+IHN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQkxBWUVSUyA9ICIgXAorICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YSBcCisgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhLXlvY3RvIFwKKyAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEteW9jdG8tYnNwIFwKKyAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEtbXlrZXJuZWwgXAorICAgICAgICIKKworICAgICBCQkxBWUVSU19OT05fUkVNT1ZBQkxFID89ICIgXAorICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YSBcCisgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhLXlvY3RvIFwKKyAgICAgICAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQk1BU0snPjxnbG9zc3Rlcm0+QkJNQVNLPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQk1BU0tbZG9jXSA9ICJQcmV2ZW50cyBCaXRCYWtlIGZyb20gcHJvY2Vzc2luZyBzcGVjaWZpYyByZWNpcGVzIG9yIHJlY2lwZSBhcHBlbmQgZmlsZXMuIFVzZSB0aGUgQkJNQVNLIHZhcmlhYmxlIGZyb20gd2l0aGluIGNvbmYvbG9jYWwuY29uZi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQcmV2ZW50cyBCaXRCYWtlIGZyb20gcHJvY2Vzc2luZyByZWNpcGVzIGFuZCByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5CQk1BU0s8L2ZpbGVuYW1lPiB2YXJpYWJsZSBmcm9tIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgZm91bmQKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+QkJNQVNLPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgdG8gImhpZGUiIHRoZXNlIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGlnbm9yZXMgYW55IHJlY2lwZSBvciByZWNpcGUgYXBwZW5kIGZpbGVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2ggdGhlIGV4cHJlc3Npb24uCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGFzIGlmIEJpdEJha2UgZG9lcyBub3Qgc2VlIHRoZW0gYXQgYWxsLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIG1hdGNoaW5nIGZpbGVzIGFyZSBub3QgcGFyc2VkIG9yIG90aGVyd2lzZQorICAgICAgICAgICAgICAgICAgICB1c2VkIGJ5IEJpdEJha2UuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgeW91IHByb3ZpZGUgaXMgcGFzc2VkIHRvIFB5dGhvbidzIHJlZ3VsYXIKKyAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiBjb21waWxlci4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGV4cHJlc3Npb24gaXMgY29tcGFyZWQgYWdhaW5zdCB0aGUgZnVsbCBwYXRocyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBjb21wbGV0ZSBzeW50YXggaW5mb3JtYXRpb24sIHNlZSBQeXRob24ncworICAgICAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uIGF0CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvcmVsZWFzZS8yLjMvbGliL3JlLXN5bnRheC5odG1sJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHVzZXMgYSBjb21wbGV0ZSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICAgICAgdG8gdGVsbCBCaXRCYWtlIHRvIGlnbm9yZSBhbGwgcmVjaXBlIGFuZCByZWNpcGUgYXBwZW5kCisgICAgICAgICAgICAgICAgICAgIGZpbGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS10aS9yZWNpcGVzLW1pc2MvPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCTUFTSyA9ICJtZXRhLXRpL3JlY2lwZXMtbWlzYy8iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gbWFzayBvdXQgbXVsdGlwbGUgZGlyZWN0b3JpZXMgb3IgcmVjaXBlcywKKyAgICAgICAgICAgICAgICAgICAgdXNlIHRoZSB2ZXJ0aWNhbCBiYXIgdG8gc2VwYXJhdGUgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgICAgICAgICAgICAgICAgICBmcmFnbWVudHMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbmV4dCBleGFtcGxlIG1hc2tzIG91dCBtdWx0aXBsZSBkaXJlY3RvcmllcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgaW5kaXZpZHVhbCByZWNpcGVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCTUFTSyA9ICJtZXRhLXRpL3JlY2lwZXMtbWlzYy98bWV0YS10aS9yZWNpcGVzLXRpL3BhY2thZ2Vncm91cC8iCisgICAgIEJCTUFTSyAuPSAifC4qbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvIgorICAgICBCQk1BU0sgLj0gInwuKm9wZW5sZGFwIgorICAgICBCQk1BU0sgLj0gInwuKm9wZW5jdiIKKyAgICAgQkJNQVNLIC49ICJ8Lipsem1hIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIE5vdGljZSBob3cgdGhlIHZlcnRpY2FsIGJhciBpcyB1c2VkIHRvIGFwcGVuZCB0aGUgZnJhZ21lbnRzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gc3BlY2lmeWluZyBhIGRpcmVjdG9yeSBuYW1lLCB1c2UgdGhlIHRyYWlsaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBzbGFzaCBjaGFyYWN0ZXIgdG8gZW5zdXJlIHlvdSBtYXRjaCBqdXN0IHRoYXQgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJQQVRIJz48Z2xvc3N0ZXJtPkJCUEFUSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJQQVRIW2RvY10gPSAiVXNlZCBieSBCaXRCYWtlIHRvIGxvY2F0ZSAuYmJjbGFzcyBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhpcyB2YXJpYWJsZSBpcyBhbmFsb2dvdXMgdG8gdGhlIFBBVEggdmFyaWFibGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVXNlZCBieSBCaXRCYWtlIHRvIGxvY2F0ZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPiBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBhbmFsb2dvdXMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHJ1biBCaXRCYWtlIGZyb20gYSBkaXJlY3Rvcnkgb3V0c2lkZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7YnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBtdXN0IGJlIHN1cmUgdG8gc2V0CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gdG8gcG9pbnQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBEaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICBTZXQgdGhlIHZhcmlhYmxlIGFzIHlvdSB3b3VsZCBhbnkgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGVuIHJ1biBCaXRCYWtlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIEJCUEFUSCA9ICI8cmVwbGFjZWFibGU+YnVpbGRfZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT4iCisgICAgICQgZXhwb3J0IEJCUEFUSAorICAgICAkIGJpdGJha2UgPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQlNFUlZFUic+PGdsb3NzdGVybT5CQlNFUlZFUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJTRVJWRVJbZG9jXSA9ICJQb2ludHMgdG8gdGhlIHNlcnZlciB0aGF0IHJ1bnMgbWVtb3J5LXJlc2lkZW50IEJpdEJha2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBzZXJ2ZXIgdGhhdCBydW5zIG1lbW9yeS1yZXNpZGVudCBCaXRCYWtlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHNldCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBzZXR1cCBzY3JpcHQgYW5kIHNob3VsZCBub3QgYmUgaGFuZC1lZGl0ZWQuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBpcyBvbmx5IHVzZWQgd2hlbiB5b3UgZW1wbG95IG1lbW9yeS1yZXNpZGVudAorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlLgorICAgICAgICAgICAgICAgICAgICBUaGUgc2V0dXAgc2NyaXB0IGV4cG9ydHMgdGhlIHZhbHVlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZXhwb3J0IEJCU0VSVkVSPWxvY2FsaG9zdDokcG9ydAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCU0VSVkVSPC9maWxlbmFtZT4gaXMgdXNlZCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT4gc2NyaXB0LCB3aGljaAorICAgICAgICAgICAgICAgICAgICBpcyBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQklOQ09ORklHJz48Z2xvc3N0ZXJtPkJJTkNPTkZJRzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQklOQ09ORklHW2RvY10gPSAiV2hlbiBpbmhlcml0aW5nIHRoZSBiaW5jb25maWctZGlzYWJsZWQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGJpbmFyeSBjb25maWd1cmF0aW9uIHNjcmlwdHMgdG8gZGlzYWJsZSBpbiBmYXZvciBvZiB1c2luZyBwa2ctY29uZmlnIHRvIHF1ZXJ5IHRoZSBpbmZvcm1hdGlvbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJpbmNvbmZpZy1kaXNhYmxlZCc+PGZpbGVuYW1lPmJpbmNvbmZpZy1kaXNhYmxlZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYmluYXJ5IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgc2NyaXB0cyB0byBkaXNhYmxlIGluIGZhdm9yIG9mIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2ctY29uZmlnPC9maWxlbmFtZT4gdG8gcXVlcnkgdGhlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJpbmNvbmZpZy1kaXNhYmxlZDwvZmlsZW5hbWU+IGNsYXNzIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgbW9kaWZ5IHRoZSBzcGVjaWZpZWQgc2NyaXB0cyB0byByZXR1cm4gYW4gZXJyb3Igc28gdGhhdAorICAgICAgICAgICAgICAgICAgICBjYWxscyB0byB0aGVtIGNhbiBiZSBlYXNpbHkgZm91bmQgYW5kIHJlcGxhY2VkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBhZGQgbXVsdGlwbGUgc2NyaXB0cywgc2VwYXJhdGUgdGhlbSBieSBzcGFjZXMuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBmcm9tIHRoZSA8ZmlsZW5hbWU+bGlicG5nPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJJTkNPTkZJRyA9ICIke2JpbmRpcn0vbGlicG5nLWNvbmZpZyAke2JpbmRpcn0vbGlicG5nMTYtY29uZmlnIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQklOQ09ORklHX0dMT0InPjxnbG9zc3Rlcm0+QklOQ09ORklHX0dMT0I8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJJTkNPTkZJR19HTE9CW2RvY10gPSAiV2hlbiBpbmhlcml0aW5nIGJpbmNvbmZpZy5iYmNsYXNzIGZyb20gYSByZWNpcGUsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGEgd2lsZGNhcmQgZm9yIGNvbmZpZ3VyYXRpb24gc2NyaXB0cyB0aGF0IG5lZWQgZWRpdGluZy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJpbmNvbmZpZyc+PGZpbGVuYW1lPmJpbmNvbmZpZzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYSB3aWxkY2FyZCBmb3IKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBzY3JpcHRzIHRoYXQgbmVlZCBlZGl0aW5nLgorICAgICAgICAgICAgICAgICAgICBUaGUgc2NyaXB0cyBhcmUgZWRpdGVkIHRvIGNvcnJlY3QgYW55IHBhdGhzIHRoYXQgaGF2ZSBiZWVuCisgICAgICAgICAgICAgICAgICAgIHNldCB1cCBkdXJpbmcgY29tcGlsYXRpb24gc28gdGhhdCB0aGV5IGFyZSBjb3JyZWN0IGZvcgorICAgICAgICAgICAgICAgICAgICB1c2Ugd2hlbiBpbnN0YWxsZWQgaW50byB0aGUgc3lzcm9vdCBhbmQgY2FsbGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBwcm9jZXNzZXMgb2Ygb3RoZXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRoaXMgdmFyaWFibGUgd29ya3MsIHNlZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2JpbmNvbmZpZy5iYmNsYXNzPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGZpbmQgZ2VuZXJhbCBpbmZvcm1hdGlvbiBvbiB0aGUgY2xhc3MgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1iaW5jb25maWcnPjxmaWxlbmFtZT5iaW5jb25maWcuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CUCc+PGdsb3NzdGVybT5CUDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlBbZG9jXSA9ICJUaGUgYmFzZSByZWNpcGUgbmFtZSBhbmQgdmVyc2lvbiBidXQgd2l0aG91dCBhbnkgc3BlY2lhbCByZWNpcGUgbmFtZSBzdWZmaXggKGkuZS4gLW5hdGl2ZSwgbGliNjQtLCBhbmQgc28gZm9ydGgpLiBCUCBpcyBjb21wcmlzZWQgb2YgJHtCUE59LSR7UFZ9IgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJhc2UgcmVjaXBlIG5hbWUgYW5kIHZlcnNpb24gYnV0IHdpdGhvdXQgYW55IHNwZWNpYWwKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIG5hbWUgc3VmZml4IChpLmUuIDxmaWxlbmFtZT4tbmF0aXZlPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5saWI2NC08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kIHNvIGZvcnRoKS4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJQPC9maWxlbmFtZT4gaXMgY29tcHJpc2VkIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSJtb25vc3BhY2VkIj4KKyAgICAgJHtCUE59LSR7UFZ9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CUE4nPjxnbG9zc3Rlcm0+QlBOPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCUE5bZG9jXSA9ICJUaGUgYmFyZSBuYW1lIG9mIHRoZSByZWNpcGUuIFRoaXMgdmFyaWFibGUgaXMgYSB2ZXJzaW9uIG9mIHRoZSBQTiB2YXJpYWJsZSBidXQgcmVtb3ZlcyBjb21tb24gc3VmZml4ZXMgYW5kIHByZWZpeGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBiYXJlIG5hbWUgb2YgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBhIHZlcnNpb24gb2YgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGJ1dCByZW1vdmVzIGNvbW1vbiBzdWZmaXhlcyBzdWNoIGFzICItbmF0aXZlIiBhbmQgIi1jcm9zcyIgYXMgd2VsbAorICAgICAgICAgICAgICAgICAgICBhcyByZW1vdmVzIGNvbW1vbiBwcmVmaXhlcyBzdWNoIGFzIG11bHRpbGliJ3MgImxpYjY0LSIgYW5kICJsaWIzMi0iLgorICAgICAgICAgICAgICAgICAgICBUaGUgZXhhY3QgbGlzdCBvZiBzdWZmaXhlcyByZW1vdmVkIGlzIHNwZWNpZmllZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNQRUNJQUxfUEtHU1VGRklYJz48ZmlsZW5hbWU+U1BFQ0lBTF9QS0dTVUZGSVg8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBleGFjdCBsaXN0IG9mIHByZWZpeGVzIHJlbW92ZWQgaXMgc3BlY2lmaWVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUxQUkVGSVgnPjxmaWxlbmFtZT5NTFBSRUZJWDwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgUHJlZml4ZXMgYXJlIHJlbW92ZWQgZm9yIDxmaWxlbmFtZT5tdWx0aWxpYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4gY2FzZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVHVFJBQ0tFUic+PGdsb3NzdGVybT5CVUdUUkFDS0VSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUdUUkFDS0VSW2RvY10gPSAiU3BlY2lmaWVzIGEgVVJMIGZvciBhbiB1cHN0cmVhbSBidWcgdHJhY2tpbmcgd2Vic2l0ZSBmb3IgYSByZWNpcGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgVVJMIGZvciBhbiB1cHN0cmVhbSBidWcgdHJhY2tpbmcgd2Vic2l0ZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgYSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGRvZXMgbm90IHVzZSB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBSYXRoZXIsIHRoZSB2YXJpYWJsZSBpcyBhIHVzZWZ1bCBwb2ludGVyIGluIGNhc2UgYSBidWcKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0IG5lZWRzIHRvIGJlIG1hbnVhbGx5IHJlcG9ydGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxEX0FSQ0gnPjxnbG9zc3Rlcm0+QlVJTERfQVJDSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERfQVJDSFtkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSBidWlsZGluZyBhcmNoaXRlY3R1cmUgKGUuZy4gaTY4NikuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGJ1aWxkIGhvc3QKKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPmk2ODY8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHNldHMgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CVUlMRF9BUkNIPC9maWxlbmFtZT4gZnJvbSB0aGUgbWFjaGluZSBuYW1lCisgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVkIGJ5IHRoZSA8ZmlsZW5hbWU+dW5hbWU8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxEX0NGTEFHUyc+PGdsb3NzdGVybT5CVUlMRF9DRkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEX0NGTEFHU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQyBjb21waWxlciB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgYnVpbGQgaG9zdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIEMgY29tcGlsZXIgd2hlbiBidWlsZGluZworICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gYnVpbGRpbmcgaW4gdGhlIDxmaWxlbmFtZT4tbmF0aXZlPC9maWxlbmFtZT4gY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNGTEFHUyc+PGZpbGVuYW1lPkNGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMRF9DUFBGTEFHUyc+PGdsb3NzdGVybT5CVUlMRF9DUFBGTEFHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERfQ1BQRkxBR1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIEMgcHJlLXByb2Nlc3NvciAoaS5lLiB0byBib3RoIHRoZSBDIGFuZCB0aGUgQysrIGNvbXBpbGVycykgd2hlbiBidWlsZGluZyBmb3IgdGhlIGJ1aWxkIGhvc3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDIHByZS1wcm9jZXNzb3IKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gdG8gYm90aCB0aGUgQyBhbmQgdGhlIEMrKyBjb21waWxlcnMpIHdoZW4gYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nIGluIHRoZSA8ZmlsZW5hbWU+bmF0aXZlPC9maWxlbmFtZT4gY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNQUEZMQUdTJz48ZmlsZW5hbWU+Q1BQRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERfQ1hYRkxBR1MnPjxnbG9zc3Rlcm0+QlVJTERfQ1hYRkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEX0NYWEZMQUdTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDKysgY29tcGlsZXIgd2hlbiBidWlsZGluZyBmb3IgdGhlIGJ1aWxkIGhvc3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDKysgY29tcGlsZXIgd2hlbgorICAgICAgICAgICAgICAgICAgICBidWlsZGluZyBmb3IgdGhlIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gYnVpbGRpbmcgaW4gdGhlIDxmaWxlbmFtZT5uYXRpdmU8L2ZpbGVuYW1lPiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ1hYRkxBR1MnPjxmaWxlbmFtZT5DWFhGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMRF9MREZMQUdTJz48Z2xvc3N0ZXJtPkJVSUxEX0xERkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEX0xERkxBR1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgYnVpbGQgaG9zdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciB3aGVuIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyBpbiB0aGUgPGZpbGVuYW1lPi1uYXRpdmU8L2ZpbGVuYW1lPiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTERGTEFHUyc+PGZpbGVuYW1lPkxERkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERfT1BUSU1JWkFUSU9OJz48Z2xvc3N0ZXJtPkJVSUxEX09QVElNSVpBVElPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERfT1BUSU1JWkFUSU9OW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBvcHRpbWl6YXRpb24gZmxhZ3MgcGFzc2VkIHRvIHRoZSBDIGNvbXBpbGVyIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBidWlsZCBob3N0IG9yIHRoZSBTREsuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBvcHRpbWl6YXRpb24gZmxhZ3MgcGFzc2VkIHRvIHRoZSBDIGNvbXBpbGVyCisgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBidWlsZCBob3N0IG9yIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmbGFncyBhcmUgcGFzc2VkIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMRF9DRkxBR1MnPjxmaWxlbmFtZT5CVUlMRF9DRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMRFNES19DRkxBR1MnPjxmaWxlbmFtZT5CVUlMRFNES19DRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QlVJTERfT1BUSU1JWkFUSU9OPC9maWxlbmFtZT4gdmFyaWFibGUgaXMKKyAgICAgICAgICAgICAgICAgICAgIi1PMiAtcGlwZSIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERfT1MnPjxnbG9zc3Rlcm0+QlVJTERfT1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEX09TW2RvY10gPSAiVGhlIG9wZXJhdGluZyBzeXN0ZW0gKGluIGxvd2VyIGNhc2UpIG9mIHRoZSBidWlsZGluZyBhcmNoaXRlY3R1cmUgKGUuZy4gTGludXgpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpbiB1c2Ugb24gdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGhvc3QgKGUuZy4gImxpbnV4IikuCisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHNldHMgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CVUlMRF9PUzwvZmlsZW5hbWU+IGZyb20gdGhlIE9TIHJlcG9ydGVkIGJ5CisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+dW5hbWU8L2ZpbGVuYW1lPiBjb21tYW5kIC0gdGhlIGZpcnN0IHdvcmQsCisgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZCB0byBsb3dlci1jYXNlIGNoYXJhY3RlcnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERfUFJFRklYJz48Z2xvc3N0ZXJtPkJVSUxEX1BSRUZJWDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERfUFJFRklYW2RvY10gPSAiVGhlIHRvb2xjaGFpbiBiaW5hcnkgcHJlZml4IHVzZWQgZm9yIG5hdGl2ZSByZWNpcGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSB0b29sY2hhaW4gYmluYXJ5IHByZWZpeCB1c2VkIGZvciBuYXRpdmUgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJVSUxEX1BSRUZJWDwvZmlsZW5hbWU+IHZhbHVlIHRvIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9QUkVGSVgnPjxmaWxlbmFtZT5UQVJHRVRfUFJFRklYPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIG5hdGl2ZSByZWNpcGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxEX1NZUyc+PGdsb3NzdGVybT5CVUlMRF9TWVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEX1NZU1tkb2NdID0gIlRoZSB0b29sY2hhaW4gYmluYXJ5IHByZWZpeCB1c2VkIGZvciBuYXRpdmUgcmVjaXBlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHN5c3RlbSwgaW5jbHVkaW5nIHRoZSBhcmNoaXRlY3R1cmUgYW5kCisgICAgICAgICAgICAgICAgICAgIHRoZSBvcGVyYXRpbmcgc3lzdGVtLCB0byB1c2Ugd2hlbiBidWlsZGluZyBmb3IgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGhvc3QgKGkuZS4gd2hlbiBidWlsZGluZyA8ZmlsZW5hbWU+bmF0aXZlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlcykuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkgc2V0cyB0aGlzCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGJhc2VkIG9uCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMRF9BUkNIJz48ZmlsZW5hbWU+QlVJTERfQVJDSDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVSUxEX1ZFTkRPUic+PGZpbGVuYW1lPkJVSUxEX1ZFTkRPUjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMRF9PUyc+PGZpbGVuYW1lPkJVSUxEX09TPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBZb3UgZG8gbm90IG5lZWQgdG8gc2V0IHRoZSA8ZmlsZW5hbWU+QlVJTERfU1lTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgeW91cnNlbGYuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERfVkVORE9SJz48Z2xvc3N0ZXJtPkJVSUxEX1ZFTkRPUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICBCVUlMRF9WRU5ET1JbZG9jXSA9ICJUaGUgdmVuZG9yIG5hbWUgdG8gdXNlIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBidWlsZCBob3N0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgdmVuZG9yIG5hbWUgdG8gdXNlIHdoZW4gYnVpbGRpbmcgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBhbiBlbXB0eSBzdHJpbmcgKCIiKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMRERJUic+PGdsb3NzdGVybT5CVUlMRERJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERESVJbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkZWZpbmUgdGhpcyBkaXJlY3RvcnkgaW5kaXJlY3RseSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBzY3JpcHRzIGJ5IHBhc3NpbmcgaW4gYSBCdWlsZCBEaXJlY3RvcnkgcGF0aCB3aGVuIHlvdSBydW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIHNjcmlwdHMuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBydW4gdGhlIHNjcmlwdHMgYW5kIGRvIG5vdCBwcm92aWRlIGEgQnVpbGQgRGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIHBhdGgsIHRoZSA8ZmlsZW5hbWU+QlVJTERESVI8L2ZpbGVuYW1lPiBkZWZhdWx0cyB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQ8L2ZpbGVuYW1lPiBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERISVNUT1JZX0NPTU1JVCc+PGdsb3NzdGVybT5CVUlMREhJU1RPUllfQ09NTUlUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUlMREhJU1RPUllfQ09NTUlUW2RvY10gPSAiV2hlbiBpbmhlcml0aW5nIHRoZSBidWlsZGhpc3RvcnkgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRvIGNvbW1pdCB0aGUgYnVpbGQgaGlzdG9yeSBvdXRwdXQgaW4gYSBsb2NhbCBHaXQgcmVwb3NpdG9yeS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJ1aWxkaGlzdG9yeSc+PGZpbGVuYW1lPmJ1aWxkaGlzdG9yeTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgd2hldGhlciBvciBub3QgdG8gY29tbWl0IHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBoaXN0b3J5IG91dHB1dCBpbiBhIGxvY2FsIEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gIjEiLCB0aGlzIGxvY2FsIHJlcG9zaXRvcnkgd2lsbCBiZSBtYWludGFpbmVkCisgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBhbmQgYSBjb21taXQgd2lsbCBiZSBjcmVhdGVkIG9uIGV2ZXJ5CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGZvciBjaGFuZ2VzIHRvIGVhY2ggdG9wLWxldmVsIHN1YmRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgaGlzdG9yeSBvdXRwdXQgKGltYWdlcywgcGFja2FnZXMsIGFuZCBzZGspLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byB0cmFjayBjaGFuZ2VzIHRvIGJ1aWxkIGhpc3Rvcnkgb3ZlcgorICAgICAgICAgICAgICAgICAgICB0aW1lLCB5b3Ugc2hvdWxkIHNldCB0aGlzIHZhbHVlIHRvICIxIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICAgICAgICAgICAgICBkb2VzIG5vdCBjb21taXQgdGhlIGJ1aWxkIGhpc3Rvcnkgb3V0cHV0IGluIGEgbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnk6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQlVJTERISVNUT1JZX0NPTU1JVCA/PSAiMCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxESElTVE9SWV9DT01NSVRfQVVUSE9SJz48Z2xvc3N0ZXJtPkJVSUxESElTVE9SWV9DT01NSVRfQVVUSE9SPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUlMREhJU1RPUllfQ09NTUlUX0FVVEhPUltkb2NdID0gIldoZW4gaW5oZXJpdGluZyB0aGUgYnVpbGRoaXN0b3J5IGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgYXV0aG9yIHRvIHVzZSBmb3IgZWFjaCBHaXQgY29tbWl0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYnVpbGRoaXN0b3J5Jz48ZmlsZW5hbWU+YnVpbGRoaXN0b3J5PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgYXV0aG9yIHRvIHVzZSBmb3IgZWFjaAorICAgICAgICAgICAgICAgICAgICBHaXQgY29tbWl0LgorICAgICAgICAgICAgICAgICAgICBJbiBvcmRlciBmb3IgdGhlIDxmaWxlbmFtZT5CVUlMREhJU1RPUllfQ09NTUlUX0FVVEhPUjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIHdvcmssIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERISVNUT1JZX0NPTU1JVCc+PGZpbGVuYW1lPkJVSUxESElTVE9SWV9DT01NSVQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgbXVzdCBiZSBzZXQgdG8gIjEiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBHaXQgcmVxdWlyZXMgdGhhdCB0aGUgdmFsdWUgeW91IHByb3ZpZGUgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QlVJTERISVNUT1JZX0NPTU1JVF9BVVRIT1I8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICB0YWtlcyB0aGUgZm9ybSBvZiAibmFtZSAmbHQ7ZW1haWxAaG9zdCZndDsiLgorICAgICAgICAgICAgICAgICAgICBQcm92aWRpbmcgYW4gZW1haWwgYWRkcmVzcyBvciBob3N0IHRoYXQgaXMgbm90IHZhbGlkIGRvZXMKKyAgICAgICAgICAgICAgICAgICAgbm90IHByb2R1Y2UgYW4gZXJyb3IuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+YnVpbGRoaXN0b3J5PC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgc2V0cyB0aGUgdmFyaWFibGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCVUlMREhJU1RPUllfQ09NTUlUX0FVVEhPUiA/PSAiYnVpbGRoaXN0b3J5ICZsdDtidWlsZGhpc3RvcnlAJHtESVNUUk99Jmd0OyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxESElTVE9SWV9ESVInPjxnbG9zc3Rlcm0+QlVJTERISVNUT1JZX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERISVNUT1JZX0RJUltkb2NdID0gIldoZW4gaW5oZXJpdGluZyB0aGUgYnVpbGRoaXN0b3J5IGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIGJ1aWxkIGhpc3RvcnkgaW5mb3JtYXRpb24gaXMga2VwdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJ1aWxkaGlzdG9yeSc+PGZpbGVuYW1lPmJ1aWxkaGlzdG9yeTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSBpbiB3aGljaAorICAgICAgICAgICAgICAgICAgICBidWlsZCBoaXN0b3J5IGluZm9ybWF0aW9uIGlzIGtlcHQuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGUgdmFyaWFibGUgd29ya3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1aWxkaGlzdG9yeS5jbGFzczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPmJ1aWxkaGlzdG9yeTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgICAgICAgICAgICAgIHNldHMgdGhlIGRpcmVjdG9yeSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJVSUxESElTVE9SWV9ESVIgPz0gIiR7VE9QRElSfS9idWlsZGhpc3RvcnkiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMREhJU1RPUllfRkVBVFVSRVMnPjxnbG9zc3Rlcm0+QlVJTERISVNUT1JZX0ZFQVRVUkVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUlMREhJU1RPUllfRkVBVFVSRVNbZG9jXSA9ICJXaGVuIGluaGVyaXRpbmcgdGhlIGJ1aWxkaGlzdG9yeSBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIGJ1aWxkIGhpc3RvcnkgZmVhdHVyZXMgdG8gYmUgZW5hYmxlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJ1aWxkaGlzdG9yeSc+PGZpbGVuYW1lPmJ1aWxkaGlzdG9yeTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIGJ1aWxkIGhpc3RvcnkgZmVhdHVyZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gYmUgZW5hYmxlZC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IGJ1aWxkIGhpc3Rvcnkgd29ya3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J21haW50YWluaW5nLWJ1aWxkLW91dHB1dC1xdWFsaXR5Jz5NYWludGFpbmluZyBCdWlsZCBPdXRwdXQgUXVhbGl0eTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSB0aHJlZSBmZWF0dXJlcyBpbiB0aGUgZm9ybSBvZiBhCisgICAgICAgICAgICAgICAgICAgIHNwYWNlLXNlcGFyYXRlZCBsaXN0OgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5pbWFnZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuYWx5c2lzIG9mIHRoZSBjb250ZW50cyBvZiBpbWFnZXMsIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXMgdGhlIGxpc3Qgb2YgaW5zdGFsbGVkIHBhY2thZ2VzIGFtb25nIG90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpbmdzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wYWNrYWdlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5hbHlzaXMgb2YgdGhlIGNvbnRlbnRzIG9mIGluZGl2aWR1YWwgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnNkazo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuYWx5c2lzIG9mIHRoZSBjb250ZW50cyBvZiB0aGUgc29mdHdhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBraXQgKFNESykuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPmJ1aWxkaGlzdG9yeTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgICAgICAgICAgICAgIGVuYWJsZXMgYWxsIHRocmVlIGZlYXR1cmVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJVSUxESElTVE9SWV9GRUFUVVJFUyA/PSAiaW1hZ2UgcGFja2FnZSBzZGsiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMREhJU1RPUllfSU1BR0VfRklMRVMnPjxnbG9zc3Rlcm0+QlVJTERISVNUT1JZX0lNQUdFX0ZJTEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUlMREhJU1RPUllfSU1BR0VfRklMRVNbZG9jXSA9ICJXaGVuIGluaGVyaXRpbmcgdGhlIGJ1aWxkaGlzdG9yeSBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYSBsaXN0IG9mIHBhdGhzIHRvIGZpbGVzIGNvcGllZCBmcm9tIHRoZSBpbWFnZSBjb250ZW50cyBpbnRvIHRoZSBidWlsZCBoaXN0b3J5IGRpcmVjdG9yeSB1bmRlciBhbiAiaW1hZ2UtZmlsZXMiIGRpcmVjdG9yeSBpbiB0aGUgZGlyZWN0b3J5IGZvciB0aGUgaW1hZ2UsIHNvIHRoYXQgeW91IGNhbiB0cmFjayB0aGUgY29udGVudHMgb2YgZWFjaCBmaWxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYnVpbGRoaXN0b3J5Jz48ZmlsZW5hbWU+YnVpbGRoaXN0b3J5PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBhIGxpc3Qgb2YgcGF0aHMgdG8gZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgY29waWVkIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIGltYWdlIGNvbnRlbnRzIGludG8gdGhlIGJ1aWxkIGhpc3RvcnkgZGlyZWN0b3J5IHVuZGVyCisgICAgICAgICAgICAgICAgICAgIGFuICJpbWFnZS1maWxlcyIgZGlyZWN0b3J5IGluIHRoZSBkaXJlY3RvcnkgZm9yCisgICAgICAgICAgICAgICAgICAgIHRoZSBpbWFnZSwgc28gdGhhdCB5b3UgY2FuIHRyYWNrIHRoZSBjb250ZW50cyBvZiBlYWNoIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzIHRvIGNvcHkgPGZpbGVuYW1lPi9ldGMvcGFzc3dkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT4vZXRjL2dyb3VwPC9maWxlbmFtZT4sIHdoaWNoIGFsbG93cyB5b3UgdG8KKyAgICAgICAgICAgICAgICAgICAgbW9uaXRvciBmb3IgY2hhbmdlcyBpbiB1c2VyIGFuZCBncm91cCBlbnRyaWVzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG1vZGlmeSB0aGUgbGlzdCB0byBpbmNsdWRlIGFueSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZ5aW5nIGFuIGludmFsaWQgcGF0aCBkb2VzIG5vdCBwcm9kdWNlIGFuIGVycm9yLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBjYW4gaW5jbHVkZSBmaWxlcyB0aGF0IG1pZ2h0CisgICAgICAgICAgICAgICAgICAgIG5vdCBhbHdheXMgYmUgcHJlc2VudC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICAgICAgICAgICAgICBwcm92aWRlcyBwYXRocyB0byB0aGUgZm9sbG93aW5nIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJVSUxESElTVE9SWV9JTUFHRV9GSUxFUyA/PSAiL2V0Yy9wYXNzd2QgL2V0Yy9ncm91cCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxESElTVE9SWV9QVVNIX1JFUE8nPjxnbG9zc3Rlcm0+QlVJTERISVNUT1JZX1BVU0hfUkVQTzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERISVNUT1JZX1BVU0hfUkVQT1tkb2NdID0gIldoZW4gaW5oZXJpdGluZyB0aGUgYnVpbGRoaXN0b3J5IGNsYXNzLCB0aGlzIHZhcmlhYmxlIG9wdGlvbmFsbHkgc3BlY2lmaWVzIGEgcmVtb3RlIHJlcG9zaXRvcnkgdG8gd2hpY2ggYnVpbGQgaGlzdG9yeSBwdXNoZXMgR2l0IGNoYW5nZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1idWlsZGhpc3RvcnknPjxmaWxlbmFtZT5idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUgb3B0aW9uYWxseSBzcGVjaWZpZXMgYSByZW1vdGUKKyAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSB0byB3aGljaCBidWlsZCBoaXN0b3J5IHB1c2hlcyBHaXQgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgZm9yIDxmaWxlbmFtZT5CVUlMREhJU1RPUllfUFVTSF9SRVBPPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdG8gd29yaywKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVSUxESElTVE9SWV9DT01NSVQnPjxmaWxlbmFtZT5CVUlMREhJU1RPUllfQ09NTUlUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG11c3QgYmUgc2V0IHRvICIxIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJlcG9zaXRvcnkgc2hvdWxkIGNvcnJlc3BvbmQgdG8gYSByZW1vdGUKKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzcyB0aGF0IHNwZWNpZmllcyBhIHJlcG9zaXRvcnkgYXMgdW5kZXJzdG9vZCBieQorICAgICAgICAgICAgICAgICAgICBHaXQsIG9yIGFsdGVybmF0aXZlbHkgdG8gYSByZW1vdGUgbmFtZSB0aGF0IHlvdSBoYXZlCisgICAgICAgICAgICAgICAgICAgIHNldCB1cCBtYW51YWxseSB1c2luZyA8ZmlsZW5hbWU+Z2l0IHJlbW90ZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgbG9jYWwgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICAgICAgICAgICAgICBzZXRzIHRoZSB2YXJpYWJsZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJVSUxESElTVE9SWV9QVVNIX1JFUE8gPz0gIiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxEU0RLX0NGTEFHUyc+PGdsb3NzdGVybT5CVUlMRFNES19DRkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEU0RLX0NGTEFHU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQyBjb21waWxlciB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgU0RLLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQyBjb21waWxlciB3aGVuIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgU0RLLgorICAgICAgICAgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nIGluIHRoZSA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNGTEFHUyc+PGZpbGVuYW1lPkNGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMRFNES19DUFBGTEFHUyc+PGdsb3NzdGVybT5CVUlMRFNES19DUFBGTEFHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERTREtfQ1BQRkxBR1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIEMgcHJlLXByb2Nlc3NvciAoaS5lLiB0byBib3RoIHRoZSBDIGFuZCB0aGUgQysrIGNvbXBpbGVycykgd2hlbiBidWlsZGluZyBmb3IgdGhlIFNESy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIEMgcHJlLXByb2Nlc3NvcgorICAgICAgICAgICAgICAgICAgICAoaS5lLiB0byBib3RoIHRoZSBDIGFuZCB0aGUgQysrIGNvbXBpbGVycykgd2hlbiBidWlsZGluZworICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyBpbiB0aGUgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DUFBGTEFHUyc+PGZpbGVuYW1lPkNQUEZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxEU0RLX0NYWEZMQUdTJz48Z2xvc3N0ZXJtPkJVSUxEU0RLX0NYWEZMQUdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUlMRFNES19DWFhGTEFHU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQysrIGNvbXBpbGVyIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBTREsuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDKysgY29tcGlsZXIgd2hlbgorICAgICAgICAgICAgICAgICAgICBidWlsZGluZyBmb3IgdGhlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyBpbiB0aGUgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DWFhGTEFHUyc+PGZpbGVuYW1lPkNYWEZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxEU0RLX0xERkxBR1MnPjxnbG9zc3Rlcm0+QlVJTERTREtfTERGTEFHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERTREtfTERGTEFHU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgbGlua2VyIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBTREsuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBsaW5rZXIgd2hlbiBidWlsZGluZworICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyBpbiB0aGUgPGZpbGVuYW1lPm5hdGl2ZXNkay08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTERGTEFHUyc+PGZpbGVuYW1lPkxERkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERTVEFUU19CQVNFJz48Z2xvc3N0ZXJtPkJVSUxEU1RBVFNfQkFTRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERTVEFUU19CQVNFW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgaG9sZHMgYnVpbGQgc3RhdGlzdGljcyB3aGVuIHlvdSB1c2UgYW5kIGVuYWJsZSB0aGUgYnVpbGRzdGF0cyBjbGFzcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBob2xkcyBidWlsZAorICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzIHdoZW4geW91IHVzZSBhbmQgZW5hYmxlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1idWlsZHN0YXRzJz48ZmlsZW5hbWU+YnVpbGRzdGF0czwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5CVUlMRFNUQVRTX0JBU0U8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgZGVmYXVsdHMKKyAgICAgICAgICAgICAgICAgICAgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn0vYnVpbGRzdGF0cy88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVVNZQk9YX1NQTElUX1NVSUQnPjxnbG9zc3Rlcm0+QlVTWUJPWF9TUExJVF9TVUlEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVVNZQk9YX1NQTElUX1NVSURbZG9jXSA9ICJGb3IgdGhlIEJ1c3lCb3ggcmVjaXBlLCBzcGVjaWZpZXMgd2hldGhlciB0byBzcGxpdCB0aGUgb3V0cHV0IGV4ZWN1dGFibGUgZmlsZSBpbnRvIHR3byBwYXJ0czogb25lIGZvciBmZWF0dXJlcyB0aGF0IHJlcXVpcmUgc2V0dWlkIHJvb3QsIGFuZCBvbmUgZm9yIHRoZSByZW1haW5pbmcgZmVhdHVyZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHRoZSBCdXN5Qm94IHJlY2lwZSwgc3BlY2lmaWVzIHdoZXRoZXIgdG8gc3BsaXQgdGhlCisgICAgICAgICAgICAgICAgICAgIG91dHB1dCBleGVjdXRhYmxlIGZpbGUgaW50byB0d28gcGFydHM6IG9uZSBmb3IgZmVhdHVyZXMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCByZXF1aXJlIDxmaWxlbmFtZT5zZXR1aWQgcm9vdDwvZmlsZW5hbWU+LCBhbmQgb25lIGZvcgorICAgICAgICAgICAgICAgICAgICB0aGUgcmVtYWluaW5nIGZlYXR1cmVzIChpLmUuIHRob3NlIHRoYXQgZG8gbm90IHJlcXVpcmUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNldHVpZCByb290PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPkJVU1lCT1hfU1BMSVRfU1VJRDwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzIHRvICIxIiwgd2hpY2ggcmVzdWx0cyBpbiBhIHNpbmdsZSBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBTZXQgdGhlIHZhcmlhYmxlIHRvICIwIiB0byBzcGxpdCB0aGUgb3V0cHV0IGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWMnPjx0aXRsZT5DPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNBQ0hFJz48Z2xvc3N0ZXJtPkNBQ0hFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDQUNIRVtkb2NdICA9ICJUaGUgZGlyZWN0b3J5IEJpdEJha2UgdXNlcyB0byBzdG9yZSBhIGNhY2hlIG9mIHRoZSBtZXRhZGF0YS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSBCaXRCYWtlIHVzZXMgdG8gc3RvcmUgYSBjYWNoZQorICAgICAgICAgICAgICAgICAgICBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgc28gaXQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJzZWQgZXZlcnkgdGltZSBCaXRCYWtlIGlzCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ0MnPjxnbG9zc3Rlcm0+Q0M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENDW2RvY10gPSAiTWluaW11bSBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuIHRoZSBDIGNvbXBpbGVyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB1c2VkIHRvIHJ1biB0aGUgQworICAgICAgICAgICAgICAgICAgICBjb21waWxlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DRkxBR1MnPjxnbG9zc3Rlcm0+Q0ZMQUdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDRkxBR1NbZG9jXSA9ICJGbGFncyBwYXNzZWQgdG8gdGhlIEMgY29tcGlsZXIgZm9yIHRoZSB0YXJnZXQgc3lzdGVtLiBUaGlzIHZhcmlhYmxlIGV2YWx1YXRlcyB0byB0aGUgc2FtZSBhcyBUQVJHRVRfQ0ZMQUdTLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQyBjb21waWxlci4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBleHBvcnRlZCB0byBhbiBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgdGh1cyBtYWRlIHZpc2libGUgdG8gdGhlIHNvZnR3YXJlIGJlaW5nCisgICAgICAgICAgICAgICAgICAgIGJ1aWx0IGR1cmluZyB0aGUgY29tcGlsYXRpb24gc3RlcC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBpbml0aWFsaXphdGlvbiBmb3IgPGZpbGVuYW1lPkNGTEFHUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmllcyBkZXBlbmRpbmcgb24gd2hhdCBpcyBiZWluZyBidWlsdDoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX0NGTEFHUyc+PGZpbGVuYW1lPlRBUkdFVF9DRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVSUxEX0NGTEFHUyc+PGZpbGVuYW1lPkJVSUxEX0NGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBidWlsZCBob3N0IChpLmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1uYXRpdmU8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERTREtfQ0ZMQUdTJz48ZmlsZW5hbWU+QlVJTERTREtfQ0ZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBidWlsZGluZyBmb3IgYW4gU0RLIChpLmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5hdGl2ZXNkay08L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ0xBU1NPVkVSUklERSc+PGdsb3NzdGVybT5DTEFTU09WRVJSSURFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDTEFTU09WRVJSSURFW2RvY10gPSAiQW4gaW50ZXJuYWwgdmFyaWFibGUgc3BlY2lmeWluZyB0aGUgc3BlY2lhbCBjbGFzcyBvdmVycmlkZSB0aGF0IHNob3VsZCBjdXJyZW50bHkgYXBwbHkgKGUuZy4gImNsYXNzLXRhcmdldCIsICJjbGFzcy1uYXRpdmUiLCBhbmQgc28gZm9ydGgpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEFuIGludGVybmFsIHZhcmlhYmxlIHNwZWNpZnlpbmcgdGhlIHNwZWNpYWwgY2xhc3Mgb3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBzaG91bGQgY3VycmVudGx5IGFwcGx5IChlLmcuICJjbGFzcy10YXJnZXQiLAorICAgICAgICAgICAgICAgICAgICAiY2xhc3MtbmF0aXZlIiwgYW5kIHNvIGZvcnRoKS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzZXMgdGhhdCB1c2UgdGhpcyB2YXJpYWJsZSBzZXQgaXQgdG8KKyAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGUgdmFsdWVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgZG8gbm90IG5vcm1hbGx5IGRpcmVjdGx5IGludGVyYWN0IHdpdGggdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIGZvciB0aGUgPGZpbGVuYW1lPkNMQVNTT1ZFUlJJREU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBnb2VzIGludG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU9WRVJSSURFUyc+PGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBjYW4gYmUgdXNlZCBhcyBhbiBvdmVycmlkZS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHdoZXJlICJweXRob24tbmF0aXZlIiBpcyBhZGRlZCB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgb25seSB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgbmF0aXZlIGNhc2U6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgREVQRU5EU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBweXRob24tbmF0aXZlIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ0xFQU5CUk9LRU4nPjxnbG9zc3Rlcm0+Q0xFQU5CUk9LRU48L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENMRUFOQlJPS0VOW2RvY10gPSAiUHJldmVudHMgdGhlIGJ1aWxkIHN5c3RlbSBmcm9tIHJ1bm5pbmcgJ21ha2UgY2xlYW4nIGR1cmluZyB0aGUgZG9fY29uZmlndXJlIHRhc2suIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSWYgc2V0IHRvICIxIiB3aXRoaW4gYSByZWNpcGUsCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DTEVBTkJST0tFTjwvZmlsZW5hbWU+IHNwZWNpZmllcyB0aGF0CisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bWFrZSBjbGVhbjwvZmlsZW5hbWU+IGNvbW1hbmQgZG9lcworICAgICAgICAgICAgICAgICAgICBub3Qgd29yayBmb3IgdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdpbGwgbm90IHRyeQorICAgICAgICAgICAgICAgICAgICB0byBydW4gPGZpbGVuYW1lPm1ha2UgY2xlYW48L2ZpbGVuYW1lPiBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzaywgd2hpY2ggaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ09NQklORURfRkVBVFVSRVMnPjxnbG9zc3Rlcm0+Q09NQklORURfRkVBVFVSRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENPTUJJTkVEX0ZFQVRVUkVTW2RvY10gPSAiQSBzZXQgb2YgZmVhdHVyZXMgY29tbW9uIGJldHdlZW4gTUFDSElORV9GRUFUVVJFUyBhbmQgRElTVFJPX0ZFQVRVUkVTLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVzIGEgbGlzdCBvZiBoYXJkd2FyZSBmZWF0dXJlcyB0aGF0IGFyZSBlbmFibGVkIGluCisgICAgICAgICAgICAgICAgICAgIGJvdGgKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVMnPjxmaWxlbmFtZT5NQUNISU5FX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNlbGVjdCBsaXN0IG9mIGZlYXR1cmVzIGNvbnRhaW5zIGZlYXR1cmVzIHRoYXQgbWFrZQorICAgICAgICAgICAgICAgICAgICBzZW5zZSB0byBiZSBjb250cm9sbGVkIGJvdGggYXQgdGhlIG1hY2hpbmUgYW5kIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGxldmVsLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlICJibHVldG9vdGgiIGZlYXR1cmUgcmVxdWlyZXMgaGFyZHdhcmUKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBidXQgc2hvdWxkIGFsc28gYmUgb3B0aW9uYWwgYXQgdGhlIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgICAgICAgICBsZXZlbCwgaW4gY2FzZSB0aGUgaGFyZHdhcmUgc3VwcG9ydHMgQmx1ZXRvb3RoIGJ1dCB5b3UKKyAgICAgICAgICAgICAgICAgICAgZG8gbm90IGV2ZXIgaW50ZW5kIHRvIHVzZSBpdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVMnPjxmaWxlbmFtZT5NQUNISU5FX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DT01NT05fTElDRU5TRV9ESVInPjxnbG9zc3Rlcm0+Q09NTU9OX0xJQ0VOU0VfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDT01NT05fTElDRU5TRV9ESVJbZG9jXSA9ICJQb2ludHMgdG8gbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMgaW4gdGhlIFNvdXJjZSBEaXJlY3RvcnksIHdoaWNoIGlzIHdoZXJlIGdlbmVyaWMgbGljZW5zZSBmaWxlcyByZXNpZGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIDxmaWxlbmFtZT5tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIHdoZXJlIGdlbmVyaWMgbGljZW5zZSBmaWxlcyByZXNpZGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ09NUEFUSUJMRV9IT1NUJz48Z2xvc3N0ZXJtPkNPTVBBVElCTEVfSE9TVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ09NUEFUSUJMRV9IT1NUW2RvY10gPSAiQSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCByZXNvbHZlcyB0byBvbmUgb3IgbW9yZSBob3N0cyAod2hlbiB0aGUgcmVjaXBlIGlzIG5hdGl2ZSkgb3Igb25lIG9yIG1vcmUgdGFyZ2V0cyAod2hlbiB0aGUgcmVjaXBlIGlzIG5vbi1uYXRpdmUpIHdpdGggd2hpY2ggYSByZWNpcGUgaXMgY29tcGF0aWJsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHJlc29sdmVzIHRvIG9uZSBvciBtb3JlIGhvc3RzCisgICAgICAgICAgICAgICAgICAgICh3aGVuIHRoZSByZWNpcGUgaXMgbmF0aXZlKSBvciBvbmUgb3IgbW9yZSB0YXJnZXRzICh3aGVuCisgICAgICAgICAgICAgICAgICAgIHRoZSByZWNpcGUgaXMgbm9uLW5hdGl2ZSkgd2l0aCB3aGljaCBhIHJlY2lwZSBpcyBjb21wYXRpYmxlLgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVndWxhciBleHByZXNzaW9uIGlzIG1hdGNoZWQgYWdhaW5zdAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSJ2YXItSE9TVF9TWVMiPjxmaWxlbmFtZT5IT1NUX1NZUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIHZhcmlhYmxlIHRvIHN0b3AgcmVjaXBlcyBmcm9tIGJlaW5nIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgIGZvciBjbGFzc2VzIG9mIHN5c3RlbXMgd2l0aCB3aGljaCB0aGUgcmVjaXBlcyBhcmUgbm90CisgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUuCisgICAgICAgICAgICAgICAgICAgIFN0b3BwaW5nIHRoZXNlIGJ1aWxkcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIHdpdGgga2VybmVscy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGFsc28gaGVscHMgdG8gaW5jcmVhc2UgcGFyc2luZyBzcGVlZAorICAgICAgICAgICAgICAgICAgICBzaW5jZSB0aGUgYnVpbGQgc3lzdGVtIHNraXBzIHBhcnNpbmcgcmVjaXBlcyBub3QKKyAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IHN5c3RlbS4KKyAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNPTVBBVElCTEVfTUFDSElORSc+PGdsb3NzdGVybT5DT01QQVRJQkxFX01BQ0hJTkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENPTVBBVElCTEVfTUFDSElORVtkb2NdID0gIkEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgcmVzb2x2ZXMgdG8gb25lIG9yIG1vcmUgdGFyZ2V0IG1hY2hpbmVzIHdpdGggd2hpY2ggYSByZWNpcGUgaXMgY29tcGF0aWJsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHJlc29sdmVzIHRvIG9uZSBvciBtb3JlCisgICAgICAgICAgICAgICAgICAgIHRhcmdldCBtYWNoaW5lcyB3aXRoIHdoaWNoIGEgcmVjaXBlIGlzIGNvbXBhdGlibGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gaXMgbWF0Y2hlZCBhZ2FpbnN0CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9InZhci1NQUNISU5FT1ZFUlJJREVTIj48ZmlsZW5hbWU+TUFDSElORU9WRVJSSURFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIHZhcmlhYmxlIHRvIHN0b3AgcmVjaXBlcyBmcm9tIGJlaW5nIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgIGZvciBtYWNoaW5lcyB3aXRoIHdoaWNoIHRoZSByZWNpcGVzIGFyZSBub3QgY29tcGF0aWJsZS4KKyAgICAgICAgICAgICAgICAgICAgU3RvcHBpbmcgdGhlc2UgYnVpbGRzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgd2l0aCBrZXJuZWxzLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgYWxzbyBoZWxwcyB0byBpbmNyZWFzZSBwYXJzaW5nIHNwZWVkCisgICAgICAgICAgICAgICAgICAgIHNpbmNlIHRoZSBidWlsZCBzeXN0ZW0gc2tpcHMgcGFyc2luZyByZWNpcGVzIG5vdAorICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlIHdpdGggdGhlIGN1cnJlbnQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DT01QTEVNRU5UQVJZX0dMT0InPjxnbG9zc3Rlcm0+Q09NUExFTUVOVEFSWV9HTE9CPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDT01QTEVNRU5UQVJZX0dMT0JbZG9jXSA9ICJEZWZpbmVzIHdpbGRjYXJkcyB0byBtYXRjaCB3aGVuIGluc3RhbGxpbmcgYSBsaXN0IG9mIGNvbXBsZW1lbnRhcnkgcGFja2FnZXMgZm9yIGFsbCB0aGUgcGFja2FnZXMgaW5zdGFsbGVkIGluIGFuIGltYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgd2lsZGNhcmRzIHRvIG1hdGNoIHdoZW4gaW5zdGFsbGluZyBhIGxpc3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgY29tcGxlbWVudGFyeSBwYWNrYWdlcyBmb3IgYWxsIHRoZSBwYWNrYWdlcyBleHBsaWNpdGx5CisgICAgICAgICAgICAgICAgICAgIChvciBpbXBsaWNpdGx5KSBpbnN0YWxsZWQgaW4gYW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoZSByZXN1bHRpbmcgbGlzdCBvZiBjb21wbGVtZW50YXJ5IHBhY2thZ2VzIGlzIGFzc29jaWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBhbiBpdGVtIHRoYXQgY2FuIGJlIGFkZGVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBBbiBleGFtcGxlIHVzYWdlIG9mIHRoaXMgaXMgdGhlICJkZXYtcGtncyIgaXRlbSB0aGF0IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgYWRkZWQgdG8gPGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4gd2lsbAorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIC1kZXYgcGFja2FnZXMgKGNvbnRhaW5pbmcgaGVhZGVycyBhbmQgb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgZmlsZXMpIGZvciBldmVyeSBwYWNrYWdlIGluIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGEgbmV3IGZlYXR1cmUgaXRlbSBwb2ludGluZyB0byBhIHdpbGRjYXJkLCB1c2UgYQorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBmbGFnIHRvIHNwZWNpZnkgdGhlIGZlYXR1cmUgaXRlbSBuYW1lIGFuZAorICAgICAgICAgICAgICAgICAgICB1c2UgdGhlIHZhbHVlIHRvIHNwZWNpZnkgdGhlIHdpbGRjYXJkLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQ09NUExFTUVOVEFSWV9HTE9CW2Rldi1wa2dzXSA9ICcqLWRldicKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNPTkZfVkVSU0lPTic+PGdsb3NzdGVybT5DT05GX1ZFUlNJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENPTkZfVkVSU0lPTltkb2NdID0gIlRyYWNrcyB0aGUgdmVyc2lvbiBvZiBsb2NhbC5jb25mLiAgSW5jcmVhc2VkIGVhY2ggdGltZSBidWlsZC9jb25mLyBjaGFuZ2VzIGluY29tcGF0aWJseS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUcmFja3MgdGhlIHZlcnNpb24gb2YgdGhlIGxvY2FsIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICAgICAgICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIGZvciA8ZmlsZW5hbWU+Q09ORl9WRVJTSU9OPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50cyBlYWNoIHRpbWUgPGZpbGVuYW1lPmJ1aWxkL2NvbmYvPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJpbGl0eSBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNPTkZGSUxFUyc+PGdsb3NzdGVybT5DT05GRklMRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENPTkZGSUxFU1tkb2NdID0gIklkZW50aWZpZXMgZWRpdGFibGUgb3IgY29uZmlndXJhYmxlIGZpbGVzIHRoYXQgYXJlIHBhcnQgb2YgYSBwYWNrYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXMgZWRpdGFibGUgb3IgY29uZmlndXJhYmxlIGZpbGVzIHRoYXQgYXJlIHBhcnQgb2YgYSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBJZiB0aGUgUGFja2FnZSBNYW5hZ2VtZW50IFN5c3RlbSAoUE1TKSBpcyBiZWluZyB1c2VkIHRvIHVwZGF0ZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBvbiB0aGUgdGFyZ2V0IHN5c3RlbSwgaXQgaXMgcG9zc2libGUgdGhhdAorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIHlvdSBoYXZlIGNoYW5nZWQgYWZ0ZXIgdGhlIG9yaWdpbmFsIGluc3RhbGxhdGlvbgorICAgICAgICAgICAgICAgICAgICBhbmQgdGhhdCB5b3Ugbm93IHdhbnQgdG8gcmVtYWluIHVuY2hhbmdlZCBhcmUgb3ZlcndyaXR0ZW4uCisgICAgICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCBlZGl0YWJsZSBmaWxlcyBtaWdodCBleGlzdCBpbiB0aGUgcGFja2FnZSB0aGF0IHlvdSBkbyBub3QKKyAgICAgICAgICAgICAgICAgICAgd2FudCByZXNldCBhcyBwYXJ0IG9mIHRoZSBwYWNrYWdlIHVwZGF0ZSBwcm9jZXNzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPkNPTkZGSUxFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvIGxpc3QgdGhlIGZpbGVzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIHRoYXQgeW91IHdpc2ggdG8gcHJldmVudCB0aGUgUE1TIGZyb20gb3ZlcndyaXRpbmcgZHVyaW5nIHRoaXMgdXBkYXRlIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIHVzZSB0aGUgPGZpbGVuYW1lPkNPTkZGSUxFUzwvZmlsZW5hbWU+IHZhcmlhYmxlLCBwcm92aWRlIGEgcGFja2FnZSBuYW1lCisgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlIHRoYXQgaWRlbnRpZmllcyB0aGUgcmVzdWx0aW5nIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoZW4sIHByb3ZpZGUgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENPTkZGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS9maWxlMSBcCisgICAgICAgICR7c3lzY29uZmRpcn0vZmlsZTIgJHtzeXNjb25mZGlyfS9maWxlMyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIHJlbGF0aW9uc2hpcCBleGlzdHMgYmV0d2VlbiB0aGUgPGZpbGVuYW1lPkNPTkZGSUxFUzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTJz5GSUxFUzwvbGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmaWxlcyBsaXN0ZWQgd2l0aGluIDxmaWxlbmFtZT5DT05GRklMRVM8L2ZpbGVuYW1lPiBtdXN0IGJlIGEgc3Vic2V0IG9mCisgICAgICAgICAgICAgICAgICAgIHRoZSBmaWxlcyBsaXN0ZWQgd2l0aGluIDxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIHlvdSBwcm92aWRlIHdpdGggPGZpbGVuYW1lPkNPTkZGSUxFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFyZSBzaW1wbHkgYmVpbmcgaWRlbnRpZmllZCBzbyB0aGF0IHRoZSBQTVMgd2lsbCBub3Qgb3ZlcndyaXRlIHRoZW0sCisgICAgICAgICAgICAgICAgICAgIGl0IG1ha2VzIHNlbnNlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgdGhlIGZpbGVzIG11c3QgYWxyZWFkeSBiZSBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZSBwYWNrYWdlIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHNwZWNpZnlpbmcgcGF0aHMgYXMgcGFydCBvZiB0aGUgPGZpbGVuYW1lPkNPTkZGSUxFUzwvZmlsZW5hbWU+IHZhcmlhYmxlLAorICAgICAgICAgICAgICAgICAgICBpdCBpcyBnb29kIHByYWN0aWNlIHRvIHVzZSBhcHByb3ByaWF0ZSBwYXRoIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIDxmaWxlbmFtZT4ke3N5c2NvbmZkaXJ9PC9maWxlbmFtZT4gcmF0aGVyIHRoYW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGM8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+JHtiaW5kaXJ9PC9maWxlbmFtZT4gcmF0aGVyCisgICAgICAgICAgICAgICAgICAgIHRoYW4gPGZpbGVuYW1lPi91c3IvYmluPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBhIGxpc3Qgb2YgdGhlc2UgdmFyaWFibGVzIGF0IHRoZSB0b3Agb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNPTkZJR19JTklUUkFNRlNfU09VUkNFJz48Z2xvc3N0ZXJtPkNPTkZJR19JTklUUkFNRlNfU09VUkNFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRVtkb2NdID0gIklkZW50aWZpZXMgdGhlIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyYW1mcykgc291cmNlIGZpbGVzLiBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSByZWNlaXZlcyBhbmQgdXNlcyB0aGlzIGtlcm5lbCBLY29uZmlnIHZhcmlhYmxlIGFzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXMgdGhlIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyYW1mcykgc291cmNlIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSByZWNlaXZlcyBhbmQgdXNlcworICAgICAgICAgICAgICAgICAgICB0aGlzIGtlcm5lbCBLY29uZmlnIHZhcmlhYmxlIGFzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgdmFyaWFibGUgaXMgc2V0IHRvIG51bGwgKCIiKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5DT05GSUdfSU5JVFJBTUZTX1NPVVJDRTwvZmlsZW5hbWU+IGNhbiBiZQorICAgICAgICAgICAgICAgICAgICBlaXRoZXIgYSBzaW5nbGUgY3BpbyBhcmNoaXZlIHdpdGggYQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNwaW88L2ZpbGVuYW1lPiBzdWZmaXggb3IgYQorICAgICAgICAgICAgICAgICAgICBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBkaXJlY3RvcmllcyBhbmQgZmlsZXMgZm9yIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSBpbml0cmFtZnMgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIEEgY3BpbyBhcmNoaXZlIHNob3VsZCBjb250YWluIGEgZmlsZXN5c3RlbSBhcmNoaXZlCisgICAgICAgICAgICAgICAgICAgIHRvIGJlIHVzZWQgYXMgYW4gaW5pdHJhbWZzIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcmllcyBzaG91bGQgY29udGFpbiBhIGZpbGVzeXN0ZW0gbGF5b3V0IHRvIGJlCisgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVkIGluIHRoZSBpbml0cmFtZnMgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIEZpbGVzIHNob3VsZCBjb250YWluIGVudHJpZXMgYWNjb3JkaW5nIHRvIHRoZSBmb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dXNyL2dlbl9pbml0X2NwaW88L2ZpbGVuYW1lPiBwcm9ncmFtIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBrZXJuZWwgdHJlZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHNwZWNpZnkgbXVsdGlwbGUgZGlyZWN0b3JpZXMgYW5kIGZpbGVzLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW5pdHJhbWZzIGltYWdlIHdpbGwgYmUgdGhlIGFnZ3JlZ2F0ZSBvZiBhbGwgb2YgdGhlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DT05GSUdfU0lURSc+PGdsb3NzdGVybT5DT05GSUdfU0lURTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ09ORklHX1NJVEVbZG9jXSA9ICJBIGxpc3Qgb2YgZmlsZXMgdGhhdCBjb250YWlucyBhdXRvY29uZiB0ZXN0IHJlc3VsdHMgcmVsZXZhbnQgdG8gdGhlIGN1cnJlbnQgYnVpbGQuIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBieSB0aGUgQXV0b3Rvb2xzIHV0aWxpdGllcyB3aGVuIHJ1bm5pbmcgY29uZmlndXJlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBmaWxlcyB0aGF0IGNvbnRhaW5zIDxmaWxlbmFtZT5hdXRvY29uZjwvZmlsZW5hbWU+IHRlc3QgcmVzdWx0cyByZWxldmFudAorICAgICAgICAgICAgICAgICAgICB0byB0aGUgY3VycmVudCBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGJ5IHRoZSBBdXRvdG9vbHMgdXRpbGl0aWVzIHdoZW4gcnVubmluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZmlndXJlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ09ORklHVVJFX0ZMQUdTJz48Z2xvc3N0ZXJtPkNPTkZJR1VSRV9GTEFHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ09ORklHVVJFX0ZMQUdTW2RvY10gPSAiVGhlIG1pbmltYWwgYXJndW1lbnRzIGZvciBHTlUgY29uZmlndXJlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsIGFyZ3VtZW50cyBmb3IgR05VIGNvbmZpZ3VyZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DT05GTElDVF9ESVNUUk9fRkVBVFVSRVMnPjxnbG9zc3Rlcm0+Q09ORkxJQ1RfRElTVFJPX0ZFQVRVUkVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDT05GTElDVF9ESVNUUk9fRkVBVFVSRVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgY2xhc3MsIHRoaXMgdmFyaWFibGUgaWRlbnRpZmllcyBkaXN0cmlidXRpb24gZmVhdHVyZXMgdGhhdCB3b3VsZCBiZSBpbiBjb25mbGljdCBzaG91bGQgdGhlIHJlY2lwZSBiZSBidWlsdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRpc3Ryb19mZWF0dXJlc19jaGVjayc+PGZpbGVuYW1lPmRpc3Ryb19mZWF0dXJlc19jaGVjazwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpZGVudGlmaWVzIGRpc3RyaWJ1dGlvbiBmZWF0dXJlcyB0aGF0IHdvdWxkCisgICAgICAgICAgICAgICAgICAgIGJlIGluIGNvbmZsaWN0IHNob3VsZCB0aGUgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIGJlIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgaWYgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DT05GTElDVF9ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBsaXN0cyBhIGZlYXR1cmUgdGhhdCBhbHNvIGFwcGVhcnMgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+IHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudCBjb25maWd1cmF0aW9uLCBhbiBlcnJvciBvY2N1cnMgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBzdG9wcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DT1BZX0xJQ19ESVJTJz48Z2xvc3N0ZXJtPkNPUFlfTElDX0RJUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENPUFlfTElDX0RJUlNbZG9jXSA9ICJJZiBzZXQgdG8gIjEiIGFsb25nIHdpdGggdGhlIENPUFlfTElDX01BTklGRVNUIHZhcmlhYmxlLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjb3BpZXMgaW50byB0aGUgaW1hZ2UgdGhlIGxpY2Vuc2UgZmlsZXMsIHdoaWNoIGFyZSBsb2NhdGVkIGluIC91c3Ivc2hhcmUvY29tbW9uLWxpY2Vuc2VzLCBmb3IgZWFjaCBwYWNrYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIElmIHNldCB0byAiMSIgYWxvbmcgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNPUFlfTElDX01BTklGRVNUJz48ZmlsZW5hbWU+Q09QWV9MSUNfTUFOSUZFU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNvcGllcworICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZSBpbWFnZSB0aGUgbGljZW5zZSBmaWxlcywgd2hpY2ggYXJlIGxvY2F0ZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3Ivc2hhcmUvY29tbW9uLWxpY2Vuc2VzPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIGZvciBlYWNoIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoZSBsaWNlbnNlIGZpbGVzIGFyZSBwbGFjZWQKKyAgICAgICAgICAgICAgICAgICAgaW4gZGlyZWN0b3JpZXMgd2l0aGluIHRoZSBpbWFnZSBpdHNlbGYuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ09QWV9MSUNfTUFOSUZFU1QnPjxnbG9zc3Rlcm0+Q09QWV9MSUNfTUFOSUZFU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENPUFlfTElDX01BTklGRVNUW2RvY10gPSAiSWYgc2V0IHRvICIxIiwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY29waWVzIHRoZSBsaWNlbnNlIG1hbmlmZXN0IGZvciB0aGUgaW1hZ2UgdG8gL3Vzci9zaGFyZS9jb21tb24tbGljZW5zZXMvbGljZW5zZS5tYW5pZmVzdCB3aXRoaW4gdGhlIGltYWdlIGl0c2VsZi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gIjEiLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjb3BpZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIGxpY2Vuc2UgbWFuaWZlc3QgZm9yIHRoZSBpbWFnZSB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9zaGFyZS9jb21tb24tbGljZW5zZXMvbGljZW5zZS5tYW5pZmVzdDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgaW1hZ2UgaXRzZWxmLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTCc+PGdsb3NzdGVybT5DT1JFX0lNQUdFX0VYVFJBX0lOU1RBTEw8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTFtkb2NdID0gIlNwZWNpZmllcyB0aGUgbGlzdCBvZiBwYWNrYWdlcyB0byBiZSBhZGRlZCB0byB0aGUgaW1hZ2UuIFlvdSBzaG91bGQgb25seSBzZXQgdGhpcyB2YXJpYWJsZSBpbiB0aGUgY29uZi9sb2NhbC5jb25mIGZpbGUgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgcGFja2FnZXMgdG8gYmUgYWRkZWQgdG8gdGhlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIG9ubHkgc2V0IHRoaXMgdmFyaWFibGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlIGZvdW5kCisgICAgICAgICAgICAgICAgICAgIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIHJlcGxhY2VzIDxmaWxlbmFtZT5QT0tZX0VYVFJBX0lOU1RBTEw8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DT1JFQkFTRSc+PGdsb3NzdGVybT5DT1JFQkFTRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ09SRUJBU0VbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIE9wZW5FbWJlZGRlZCBDb3JlIE1ldGFkYXRhIGxheWVyIChpLmUuIG1ldGEpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgIENvcmUgTWV0YWRhdGEgbGF5ZXIgKGkuZS4gPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGFuIGltcG9ydGFudCBkaXN0aW5jdGlvbiB0aGF0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DT1JFQkFTRTwvZmlsZW5hbWU+IHBvaW50cyB0byB0aGUgcGFyZW50IG9mIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIgYW5kIG5vdCB0aGUgbGF5ZXIgaXRzZWxmLgorICAgICAgICAgICAgICAgICAgICBDb25zaWRlciBhbiBleGFtcGxlIHdoZXJlIHlvdSBoYXZlIGNsb25lZCB0aGUgUG9reSBHaXQKKyAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSBhbmQgcmV0YWluZWQgdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbmFtZSBmb3IgeW91ciBsb2NhbCBjb3B5IG9mIHRoZSByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIDxmaWxlbmFtZT5DT1JFQkFTRTwvZmlsZW5hbWU+IHBvaW50cyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBmb2xkZXIgYmVjYXVzZSBpdCBpcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGUgPGZpbGVuYW1lPnBva3kvbWV0YTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGxheWVyLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNQUCc+PGdsb3NzdGVybT5DUFA8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENQUFtkb2NdID0gIk1pbmltdW0gY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHVzZWQgdG8gcnVuIHRoZSBDCisgICAgICAgICAgICAgICAgICAgIHByZXByb2Nlc3Nvci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DUFBGTEFHUyc+PGdsb3NzdGVybT5DUFBGTEFHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ1BQRkxBR1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIEMgcHJlLXByb2Nlc3NvciAoaS5lLiB0byBib3RoIHRoZSBDIGFuZCB0aGUgQysrIGNvbXBpbGVycykuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDIHByZS1wcm9jZXNzb3IKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gdG8gYm90aCB0aGUgQyBhbmQgdGhlIEMrKyBjb21waWxlcnMpLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIGV4cG9ydGVkIHRvIGFuIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCB0aHVzIG1hZGUgdmlzaWJsZSB0byB0aGUgc29mdHdhcmUgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgYnVpbHQgZHVyaW5nIHRoZSBjb21waWxhdGlvbiBzdGVwLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IGluaXRpYWxpemF0aW9uIGZvciA8ZmlsZW5hbWU+Q1BQRkxBR1M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpZXMgZGVwZW5kaW5nIG9uIHdoYXQgaXMgYmVpbmcgYnVpbHQ6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9DUFBGTEFHUyc+PGZpbGVuYW1lPlRBUkdFVF9DUFBGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERfQ1BQRkxBR1MnPjxmaWxlbmFtZT5CVUlMRF9DUFBGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBidWlsZCBob3N0IChpLmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1uYXRpdmU8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERTREtfQ1BQRkxBR1MnPjxmaWxlbmFtZT5CVUlMRFNES19DUFBGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIGFuIFNESyAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5uYXRpdmVzZGstPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNST1NTX0NPTVBJTEUnPjxnbG9zc3Rlcm0+Q1JPU1NfQ09NUElMRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ1JPU1NfQ09NUElMRVtkb2NdID0gIlRoZSB0b29sY2hhaW4gYmluYXJ5IHByZWZpeCBmb3IgdGhlIHRhcmdldCB0b29scy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHRvb2xjaGFpbiBiaW5hcnkgcHJlZml4IGZvciB0aGUgdGFyZ2V0IHRvb2xzLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPkNST1NTX0NPTVBJTEU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgc2FtZSBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9QUkVGSVgnPjxmaWxlbmFtZT5UQVJHRVRfUFJFRklYPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHNldHMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q1JPU1NfQ09NUElMRTwvZmlsZW5hbWU+IHZhcmlhYmxlIG9ubHkgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRhaW4gY29udGV4dHMgKGUuZy4gd2hlbiBidWlsZGluZyBmb3Iga2VybmVsCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQga2VybmVsIG1vZHVsZSByZWNpcGVzKS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNWU0RJUic+PGdsb3NzdGVybT5DVlNESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENWU0RJUltkb2NdID0gIlRoZSBkaXJlY3Rvcnkgd2hlcmUgY3ZzIGNoZWNrb3V0cyB3aWxsIGJlIHN0b3JlZCBpbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIGZpbGVzIGNoZWNrZWQgb3V0IHVuZGVyIHRoZQorICAgICAgICAgICAgICAgICAgICBDVlMgc3lzdGVtIGFyZSBzdG9yZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ1hYJz48Z2xvc3N0ZXJtPkNYWDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ1hYW2RvY10gPSAiTWluaW11bSBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuIHRoZSBDKysgY29tcGlsZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHVzZWQgdG8gcnVuIHRoZSBDKysKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ1hYRkxBR1MnPjxnbG9zc3Rlcm0+Q1hYRkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENYWEZMQUdTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDKysgY29tcGlsZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDKysgY29tcGlsZXIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgZXhwb3J0ZWQgdG8gYW4gZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYW5kIHRodXMgbWFkZSB2aXNpYmxlIHRvIHRoZSBzb2Z0d2FyZSBiZWluZworICAgICAgICAgICAgICAgICAgICBidWlsdCBkdXJpbmcgdGhlIGNvbXBpbGF0aW9uIHN0ZXAuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgaW5pdGlhbGl6YXRpb24gZm9yIDxmaWxlbmFtZT5DWFhGTEFHUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmllcyBkZXBlbmRpbmcgb24gd2hhdCBpcyBiZWluZyBidWlsdDoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX0NYWEZMQUdTJz48ZmlsZW5hbWU+VEFSR0VUX0NYWEZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBidWlsZGluZyBmb3IgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMRF9DWFhGTEFHUyc+PGZpbGVuYW1lPkJVSUxEX0NYWEZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBidWlsZGluZyBmb3IgdGhlIGJ1aWxkIGhvc3QgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LW5hdGl2ZTwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMRFNES19DWFhGTEFHUyc+PGZpbGVuYW1lPkJVSUxEU0RLX0NYWEZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBidWlsZGluZyBmb3IgYW4gU0RLIChpLmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktZCc+PHRpdGxlPkQ8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRCc+PGdsb3NzdGVybT5EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBEW2RvY10gPSAiVGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVzdGluYXRpb24gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYXRpb24gaW4gdGhlIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgd2hlcmUgY29tcG9uZW50cyBhcmUgaW5zdGFsbGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBsb2NhdGlvbiBkZWZhdWx0cyB0bzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAke1dPUktESVJ9L2ltYWdlCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1EQVRFJz48Z2xvc3N0ZXJtPkRBVEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERBVEVbZG9jXSA9ICJUaGUgZGF0ZSB0aGUgYnVpbGQgd2FzIHN0YXJ0ZWQgdXNpbmcgWU1EIGZvcm1hdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGF0ZSB0aGUgYnVpbGQgd2FzIHN0YXJ0ZWQuCisgICAgICAgICAgICAgICAgICAgIERhdGVzIGFwcGVhciB1c2luZyB0aGUgeWVhciwgbW9udGgsIGFuZCBkYXkgKFlNRCkgZm9ybWF0CisgICAgICAgICAgICAgICAgICAgIChlLmcuICIyMDE1MDIwOSIgZm9yIEZlYnJ1YXJ5IDl0aCwgMjAxNSkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItREFURVRJTUUnPjxnbG9zc3Rlcm0+REFURVRJTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERBVEVUSU1FW2RvY10gPSAiVGhlIGRhdGUgYW5kIHRpbWUgdGhlIGJ1aWxkIHdhcyBzdGFydGVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkYXRlIGFuZCB0aW1lIG9uIHdoaWNoIHRoZSBjdXJyZW50IGJ1aWxkIHN0YXJ0ZWQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmb3JtYXQgaXMgc3VpdGFibGUgZm9yIHRpbWVzdGFtcHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItREVCSUFOX05PQVVUT05BTUUnPjxnbG9zc3Rlcm0+REVCSUFOX05PQVVUT05BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERFQklBTl9OT0FVVE9OQU1FW2RvY10gPSAiUHJldmVudHMgYSBwYXJ0aWN1bGFyIHBhY2thZ2UgZnJvbSBiZWluZyByZW5hbWVkIGFjY29yZGluZyB0byBEZWJpYW4gcGFja2FnZSBuYW1pbmcuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZGViaWFuJz48ZmlsZW5hbWU+ZGViaWFuPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGlzIGluaGVyaXRlZCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IsCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ERUJJQU5fTk9BVVRPTkFNRTwvZmlsZW5hbWU+IHNwZWNpZmllcyBhCisgICAgICAgICAgICAgICAgICAgIHBhcnRpY3VsYXIgcGFja2FnZSBzaG91bGQgbm90IGJlIHJlbmFtZWQgYWNjb3JkaW5nIHRvCisgICAgICAgICAgICAgICAgICAgIERlYmlhbiBsaWJyYXJ5IHBhY2thZ2UgbmFtaW5nLgorICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCB1c2UgdGhlIHBhY2thZ2UgbmFtZSBhcyBhbiBvdmVycmlkZSB3aGVuIHlvdQorICAgICAgICAgICAgICAgICAgICBzZXQgdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGZyb20gdGhlIDxmaWxlbmFtZT5mb250Y29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFQklBTl9OT0FVVE9OQU1FX2ZvbnRjb25maWctdXRpbHMgPSAiMSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURFQklBTk5BTUUnPjxnbG9zc3Rlcm0+REVCSUFOTkFNRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgREVCSUFOTkFNRVtkb2NdID0gIkFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgdGhlIGxpYnJhcnkgbmFtZSBmb3IgYW4gaW5kaXZpZHVhbCBwYWNrYWdlIGZvciBEZWJpYW4gbGlicmFyeSBwYWNrYWdlIHJlbmFtaW5nLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRlYmlhbic+PGZpbGVuYW1lPmRlYmlhbjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBpcyBpbmhlcml0ZWQsIHdoaWNoIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+REVCSUFOTkFNRTwvZmlsZW5hbWU+IGFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgdGhlCisgICAgICAgICAgICAgICAgICAgIGxpYnJhcnkgbmFtZSBmb3IgYW4gaW5kaXZpZHVhbCBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBPdmVycmlkaW5nIHRoZSBsaWJyYXJ5IG5hbWUgaW4gdGhlc2UgY2FzZXMgaXMgcmFyZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgdXNlIHRoZSBwYWNrYWdlIG5hbWUgYXMgYW4gb3ZlcnJpZGUgd2hlbiB5b3UKKyAgICAgICAgICAgICAgICAgICAgc2V0IHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBmcm9tIHRoZSA8ZmlsZW5hbWU+ZGJ1czwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERUJJQU5OQU1FXyR7UE59ID0gImRidXMtMSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURFQlVHX0JVSUxEJz48Z2xvc3N0ZXJtPkRFQlVHX0JVSUxEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERUJVR19CVUlMRFtkb2NdID0gIlNwZWNpZmllcyB0byBidWlsZCBwYWNrYWdlcyB3aXRoIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4gVGhpcyBpbmZsdWVuY2VzIHRoZSB2YWx1ZSBvZiB0aGUgU0VMRUNURURfT1BUSU1JWkFUSU9OIHZhcmlhYmxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0byBidWlsZCBwYWNrYWdlcyB3aXRoIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBpbmZsdWVuY2VzIHRoZSB2YWx1ZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1TRUxFQ1RFRF9PUFRJTUlaQVRJT04nPlNFTEVDVEVEX09QVElNSVpBVElPTjwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERUJVR19PUFRJTUlaQVRJT04nPjxnbG9zc3Rlcm0+REVCVUdfT1BUSU1JWkFUSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERUJVR19PUFRJTUlaQVRJT05bZG9jXSA9ICJUaGUgb3B0aW9ucyB0byBwYXNzIGluIFRBUkdFVF9DRkxBR1MgYW5kIENGTEFHUyB3aGVuIGNvbXBpbGluZyBhIHN5c3RlbSBmb3IgZGVidWdnaW5nLiBUaGlzIHZhcmlhYmxlIGRlZmF1bHRzIHRvICctTyAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciAtZycuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG9wdGlvbnMgdG8gcGFzcyBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9DRkxBR1MnPlRBUkdFVF9DRkxBR1M8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItQ0ZMQUdTJz5DRkxBR1M8L2xpbms+PC9maWxlbmFtZT4gd2hlbiBjb21waWxpbmcKKyAgICAgICAgICAgICAgICAgICAgYSBzeXN0ZW0gZm9yIGRlYnVnZ2luZy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBkZWZhdWx0cyB0byAiLU8gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgJHtERUJVR19GTEFHU30gLXBpcGUiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURFRkFVTFRfUFJFRkVSRU5DRSc+PGdsb3NzdGVybT5ERUZBVUxUX1BSRUZFUkVOQ0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERFRkFVTFRfUFJFRkVSRU5DRVtkb2NdID0gIlNwZWNpZmllcyBhIHdlYWsgYmlhcyBmb3IgcmVjaXBlIHNlbGVjdGlvbiBwcmlvcml0eS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSB3ZWFrIGJpYXMgZm9yIHJlY2lwZSBzZWxlY3Rpb24gcHJpb3JpdHkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtb3N0IGNvbW1vbiB1c2FnZSBvZiB0aGlzIGlzIHZhcmlhYmxlIGlzIHRvIHNldAorICAgICAgICAgICAgICAgICAgICBpdCB0byAiLTEiIHdpdGhpbiBhIHJlY2lwZSBmb3IgYSBkZXZlbG9wbWVudCB2ZXJzaW9uIG9mIGEKKyAgICAgICAgICAgICAgICAgICAgcGllY2Ugb2Ygc29mdHdhcmUuCisgICAgICAgICAgICAgICAgICAgIFVzaW5nIHRoZSB2YXJpYWJsZSBpbiB0aGlzIHdheSBjYXVzZXMgdGhlIHN0YWJsZSB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSByZWNpcGUgdG8gYnVpbGQgYnkgZGVmYXVsdCBpbiB0aGUgYWJzZW5jZSBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBSRUZFUlJFRF9WRVJTSU9OJz5QUkVGRVJSRURfVkVSU0lPTjwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBiZWluZyB1c2VkIHRvIGJ1aWxkIHRoZSBkZXZlbG9wbWVudCB2ZXJzaW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgYmlhcyBwcm92aWRlZCBieSA8ZmlsZW5hbWU+REVGQVVMVF9QUkVGRVJFTkNFPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaXMgd2VhayBhbmQgaXMgb3ZlcnJpZGRlbiBieQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUJCRklMRV9QUklPUklUWSc+QkJGSUxFX1BSSU9SSVRZPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlmIHRoYXQgdmFyaWFibGUgaXMgZGlmZmVyZW50IGJldHdlZW4gdHdvIGxheWVycworICAgICAgICAgICAgICAgICAgICB0aGF0IGNvbnRhaW4gZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBzYW1lIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERUZBVUxUVFVORSc+PGdsb3NzdGVybT5ERUZBVUxUVFVORTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgREVGQVVMVFRVTkVbZG9jXSA9ICJUaGUgZGVmYXVsdCBDUFUgYW5kIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UgKEFCSSkgdHVuaW5ncyAoaS5lLiAgdGhlICJ0dW5lIikgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBDUFUgYW5kIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UgKEFCSSkKKyAgICAgICAgICAgICAgICAgICAgdHVuaW5ncyAoaS5lLiAgdGhlICJ0dW5lIikgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5ERUZBVUxUVFVORTwvZmlsZW5hbWU+IGhlbHBzIGRlZmluZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVFVORV9GRUFUVVJFUyc+PGZpbGVuYW1lPlRVTkVfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHR1bmUgaXMgZWl0aGVyIGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBzZXQKKyAgICAgICAgICAgICAgICAgICAgYnkgdGhlIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIHNldHRpbmcgdXNpbmcgYXZhaWxhYmxlIHR1bmVzCisgICAgICAgICAgICAgICAgICAgIGFzIGRlZmluZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQVZBSUxUVU5FUyc+PGZpbGVuYW1lPkFWQUlMVFVORVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItREVQRU5EUyc+PGdsb3NzdGVybT5ERVBFTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERVBFTkRTW2RvY10gPSAiTGlzdHMgYSByZWNpcGUncyBidWlsZC10aW1lIGRlcGVuZGVuY2llcyAoaS5lLiBvdGhlciByZWNpcGUgZmlsZXMpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIGEgcmVjaXBlJ3MgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gb3RoZXIgcmVjaXBlIGZpbGVzKS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHN5c3RlbSBlbnN1cmVzIHRoYXQgYWxsIHRoZSBkZXBlbmRlbmNpZXMgbGlzdGVkCisgICAgICAgICAgICAgICAgICAgIGhhdmUgYmVlbiBidWlsdCBhbmQgaGF2ZSB0aGVpciBjb250ZW50cyBpbiB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgICAgICAgICAgICAgc3lzcm9vdHMgYmVmb3JlIHRoZSByZWNpcGUncyBjb25maWd1cmUgdGFzayBpcyBleGVjdXRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2lkZXIgdGhpcyBzaW1wbGUgZXhhbXBsZSBmb3IgdHdvIHJlY2lwZXMgbmFtZWQgImEiIGFuZAorICAgICAgICAgICAgICAgICAgICAiYiIgdGhhdCBwcm9kdWNlIHNpbWlsYXJseSBuYW1lZCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgYXBwZWFycyBpbiB0aGUgImEiIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBFTkRTID0gImIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSwgdGhlIGRlcGVuZGVuY3kgaXMgc3VjaCB0aGF0IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgZm9yIHJlY2lwZSAiYSIgZGVwZW5kcyBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBvcHVsYXRlX3N5c3Jvb3QnPjxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zeXNyb290PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgb2YgcmVjaXBlICJiIi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBtZWFucyBhbnl0aGluZyB0aGF0IHJlY2lwZSAiYiIgcHV0cyBpbnRvIHN5c3Jvb3QKKyAgICAgICAgICAgICAgICAgICAgaXMgYXZhaWxhYmxlIHdoZW4gcmVjaXBlICJhIiBpcyBjb25maWd1cmluZyBpdHNlbGYuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBydW50aW1lIGRlcGVuZGVuY2llcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERVBMT1lfRElSJz48Z2xvc3N0ZXJtPkRFUExPWV9ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERFUExPWV9ESVJbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGdlbmVyYWwgYXJlYSB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdG8gcGxhY2UgaW1hZ2VzLCBwYWNrYWdlcywgU0RLcyBhbmQgb3RoZXIgb3V0cHV0IGZpbGVzIHRoYXQgYXJlIHJlYWR5IHRvIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgZ2VuZXJhbCBhcmVhIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gdXNlcyB0byBwbGFjZSBpbWFnZXMsIHBhY2thZ2VzLCBTREtzIGFuZCBvdGhlciBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgZmlsZXMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgdXNlZCBvdXRzaWRlIG9mIHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgZGlyZWN0b3J5IHJlc2lkZXMgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGFzIDxmaWxlbmFtZT4ke1RNUERJUn0vZGVwbG95PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIEJ1aWxkCisgICAgICAgICAgICAgICAgICAgIERpcmVjdG9yeSwgc2VlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtYnVpbGQnPlRoZSBCdWlsZCBEaXJlY3RvcnkgLSA8ZmlsZW5hbWU+YnVpbGQvPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBkZXRhaWwgb24gdGhlIGNvbnRlbnRzIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVwbG95PC9maWxlbmFtZT4gZGlyZWN0b3J5LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdpbWFnZXMtZGV2LWVudmlyb25tZW50Jz5JbWFnZXM8L2xpbms+IiwKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhY2thZ2UtZmVlZHMtZGV2LWVudmlyb25tZW50Jz5QYWNrYWdlIEZlZWRzPC9saW5rPiIsCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLWRldi1lbnZpcm9ubWVudCc+QXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgU0RLPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItREVQTE9ZX0RJUl9ERUInPjxnbG9zc3Rlcm0+REVQTE9ZX0RJUl9ERUI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERFUExPWV9ESVJfREVCW2RvY10gPSAiUG9pbnRzIHRvIGEgRGViaWFuLXNwZWNpZmljIGFyZWEgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRvIHBsYWNlIGltYWdlcywgcGFja2FnZXMsIFNES3MgYW5kIG90aGVyIG91dHB1dCBmaWxlcyB0aGF0IGFyZSByZWFkeSB0byBiZSB1c2VkIG91dHNpZGUgb2YgdGhlIGJ1aWxkIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIGFyZWEgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzCisgICAgICAgICAgICAgICAgICAgIHRvIHBsYWNlIERlYmlhbiBwYWNrYWdlcyB0aGF0IGFyZSByZWFkeSB0byBiZSB1c2VkIG91dHNpZGUKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBhcHBsaWVzIG9ubHkgd2hlbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9DTEFTU0VTJz48ZmlsZW5hbWU+UEFDS0FHRV9DTEFTU0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zICJwYWNrYWdlX2RlYiIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBCaXRCYWtlIGNvbmZpZ3VyYXRpb24gZmlsZSBpbml0aWFsbHkgZGVmaW5lcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRFUExPWV9ESVJfREVCPC9maWxlbmFtZT4gdmFyaWFibGUgYXMgYQorICAgICAgICAgICAgICAgICAgICBzdWItZm9sZGVyIG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSJz48ZmlsZW5hbWU+REVQTE9ZX0RJUjwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBMT1lfRElSX0RFQiA9ICIke0RFUExPWV9ESVJ9L2RlYiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcGFja2FnZV9kZWInPjxmaWxlbmFtZT5wYWNrYWdlX2RlYjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyB1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+REVQTE9ZX0RJUl9ERUI8L2ZpbGVuYW1lPiB2YXJpYWJsZSB0byBtYWtlIHN1cmUKKyAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlX3dyaXRlX2RlYic+PGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfZGViPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgd3JpdGVzIERlYmlhbiBwYWNrYWdlcyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBmb2xkZXIuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyBwYWNrYWdpbmcgd29ya3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhY2thZ2UtZmVlZHMtZGV2LWVudmlyb25tZW50Jz5QYWNrYWdlIEZlZWRzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERVBMT1lfRElSX0lNQUdFJz48Z2xvc3N0ZXJtPkRFUExPWV9ESVJfSU1BR0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERFUExPWV9ESVJfSU1BR0VbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGFyZWEgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRvIHBsYWNlIGltYWdlcyBhbmQgb3RoZXIgYXNzb2NpYXRlZCBvdXRwdXQgZmlsZXMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgZGVwbG95ZWQgb250byB0aGUgdGFyZ2V0IG1hY2hpbmUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBhcmVhIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcworICAgICAgICAgICAgICAgICAgICB0byBwbGFjZSBpbWFnZXMgYW5kIG90aGVyIGFzc29jaWF0ZWQgb3V0cHV0IGZpbGVzIHRoYXQgYXJlCisgICAgICAgICAgICAgICAgICAgIHJlYWR5IHRvIGJlIGRlcGxveWVkIG9udG8gdGhlIHRhcmdldCBtYWNoaW5lLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGlzIG1hY2hpbmUtc3BlY2lmaWMgYXMgaXQgY29udGFpbnMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke01BQ0hJTkV9PC9maWxlbmFtZT4gbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyBkaXJlY3RvcnkgcmVzaWRlcyB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgYXMgPGZpbGVuYW1lPiR7REVQTE9ZX0RJUn0vaW1hZ2VzLyR7TUFDSElORX0vPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIEJ1aWxkCisgICAgICAgICAgICAgICAgICAgIERpcmVjdG9yeSwgc2VlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtYnVpbGQnPlRoZSBCdWlsZCBEaXJlY3RvcnkgLSA8ZmlsZW5hbWU+YnVpbGQvPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBkZXRhaWwgb24gdGhlIGNvbnRlbnRzIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVwbG95PC9maWxlbmFtZT4gZGlyZWN0b3J5LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdpbWFnZXMtZGV2LWVudmlyb25tZW50Jz5JbWFnZXM8L2xpbms+IiBhbmQKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1kZXYtZW52aXJvbm1lbnQnPkFwcGxpY2F0aW9uIERldmVsb3BtZW50IFNESzwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURFUExPWV9ESVJfSVBLJz48Z2xvc3N0ZXJtPkRFUExPWV9ESVJfSVBLPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERVBMT1lfRElSX0lQS1tkb2NdID0gIlBvaW50cyB0byBhIElQSy1zcGVjaWZpYyBhcmVhIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0byBwbGFjZSBpbWFnZXMsIHBhY2thZ2VzLCBTREtzIGFuZCBvdGhlciBvdXRwdXQgZmlsZXMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgdXNlZCBvdXRzaWRlIG9mIHRoZSBidWlsZCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBhcmVhIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcworICAgICAgICAgICAgICAgICAgICB0byBwbGFjZSBJUEsgcGFja2FnZXMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgdXNlZCBvdXRzaWRlIG9mCisgICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgYXBwbGllcyBvbmx5IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjb250YWlucyAicGFja2FnZV9pcGsiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgQml0QmFrZSBjb25maWd1cmF0aW9uIGZpbGUgaW5pdGlhbGx5IGRlZmluZXMgdGhpcworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhcyBhIHN1Yi1mb2xkZXIgb2YKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVInPjxmaWxlbmFtZT5ERVBMT1lfRElSPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFUExPWV9ESVJfSVBLID0gIiR7REVQTE9ZX0RJUn0vaXBrIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX2lwayc+PGZpbGVuYW1lPnBhY2thZ2VfaXBrPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ERVBMT1lfRElSX0lQSzwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvIG1ha2Ugc3VyZQorICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfaXBrJz48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV9pcGs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayB3cml0ZXMgSVBLIHBhY2thZ2VzIGludG8gdGhlIGFwcHJvcHJpYXRlIGZvbGRlci4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHBhY2thZ2luZyB3b3Jrcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncGFja2FnZS1mZWVkcy1kZXYtZW52aXJvbm1lbnQnPlBhY2thZ2UgRmVlZHM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURFUExPWV9ESVJfUlBNJz48Z2xvc3N0ZXJtPkRFUExPWV9ESVJfUlBNPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERVBMT1lfRElSX1JQTVtkb2NdID0gIlBvaW50cyB0byBhIFJQTS1zcGVjaWZpYyBhcmVhIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0byBwbGFjZSBpbWFnZXMsIHBhY2thZ2VzLCBTREtzIGFuZCBvdGhlciBvdXRwdXQgZmlsZXMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgdXNlZCBvdXRzaWRlIG9mIHRoZSBidWlsZCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBhcmVhIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcworICAgICAgICAgICAgICAgICAgICB0byBwbGFjZSBSUE0gcGFja2FnZXMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgdXNlZCBvdXRzaWRlCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgYXBwbGllcyBvbmx5IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjb250YWlucyAicGFja2FnZV9ycG0iLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgQml0QmFrZSBjb25maWd1cmF0aW9uIGZpbGUgaW5pdGlhbGx5IGRlZmluZXMgdGhpcworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhcyBhIHN1Yi1mb2xkZXIgb2YKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVInPjxmaWxlbmFtZT5ERVBMT1lfRElSPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFUExPWV9ESVJfUlBNID0gIiR7REVQTE9ZX0RJUn0vcnBtIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX3JwbSc+PGZpbGVuYW1lPnBhY2thZ2VfcnBtPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ERVBMT1lfRElSX1JQTTwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvIG1ha2Ugc3VyZQorICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfcnBtJz48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV9ycG08L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayB3cml0ZXMgUlBNIHBhY2thZ2VzIGludG8gdGhlIGFwcHJvcHJpYXRlIGZvbGRlci4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHBhY2thZ2luZyB3b3Jrcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncGFja2FnZS1mZWVkcy1kZXYtZW52aXJvbm1lbnQnPlBhY2thZ2UgRmVlZHM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURFUExPWV9ESVJfVEFSJz48Z2xvc3N0ZXJtPkRFUExPWV9ESVJfVEFSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERVBMT1lfRElSX1RBUltkb2NdID0gIlBvaW50cyB0byBhIHRhcmJhbGwgYXJlYSB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdG8gcGxhY2UgaW1hZ2VzLCBwYWNrYWdlcywgU0RLcyBhbmQgb3RoZXIgb3V0cHV0IGZpbGVzIHRoYXQgYXJlIHJlYWR5IHRvIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgYXJlYSB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gcGxhY2UgdGFyYmFsbHMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgdXNlZCBvdXRzaWRlIG9mCisgICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgYXBwbGllcyBvbmx5IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjb250YWlucyAicGFja2FnZV90YXIiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgQml0QmFrZSBjb25maWd1cmF0aW9uIGZpbGUgaW5pdGlhbGx5IGRlZmluZXMgdGhpcworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhcyBhIHN1Yi1mb2xkZXIgb2YKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVInPjxmaWxlbmFtZT5ERVBMT1lfRElSPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFUExPWV9ESVJfVEFSID0gIiR7REVQTE9ZX0RJUn0vdGFyIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX3Rhcic+PGZpbGVuYW1lPnBhY2thZ2VfdGFyPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ERVBMT1lfRElSX1RBUjwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvIG1ha2Ugc3VyZQorICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfdGFyJz48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV90YXI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayB3cml0ZXMgVEFSIHBhY2thZ2VzIGludG8gdGhlIGFwcHJvcHJpYXRlIGZvbGRlci4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHBhY2thZ2luZyB3b3Jrcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncGFja2FnZS1mZWVkcy1kZXYtZW52aXJvbm1lbnQnPlBhY2thZ2UgRmVlZHM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURFUExPWURJUic+PGdsb3NzdGVybT5ERVBMT1lESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERFUExPWURJUltkb2NdID0gIkZvciByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUgZGVwbG95IGNsYXNzLCB0aGUgREVQTE9ZRElSIHBvaW50cyB0byBhIHRlbXBvcmFyeSB3b3JrIGFyZWEgZm9yIGRlcGxveWVkIGZpbGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZGVwbG95Jz48ZmlsZW5hbWU+ZGVwbG95PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGUgPGZpbGVuYW1lPkRFUExPWURJUjwvZmlsZW5hbWU+IHBvaW50cyB0byBhCisgICAgICAgICAgICAgICAgICAgIHRlbXBvcmFyeSB3b3JrIGFyZWEgZm9yIGRlcGxveWVkIGZpbGVzIHRoYXQgaXMgc2V0IGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVwbG95PC9maWxlbmFtZT4gY2xhc3MgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBMT1lESVIgPSAiJHtXT1JLRElSfS9kZXBsb3ktJHs8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPn0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUmVjaXBlcyBpbmhlcml0aW5nIHRoZSA8ZmlsZW5hbWU+ZGVwbG95PC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGNvcHkgZmlsZXMgdG8gYmUgZGVwbG95ZWQgaW50bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+REVQTE9ZRElSPC9maWxlbmFtZT4sIGFuZCB0aGUgY2xhc3Mgd2lsbCB0YWtlCisgICAgICAgICAgICAgICAgICAgIGNhcmUgb2YgY29weWluZyB0aGVtIGludG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfSU1BR0UnPjxmaWxlbmFtZT5ERVBMT1lfRElSX0lNQUdFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFmdGVyd2FyZHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItREVTQ1JJUFRJT04nPjxnbG9zc3Rlcm0+REVTQ1JJUFRJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERFU0NSSVBUSU9OW2RvY10gPSAiVGhlIHBhY2thZ2UgZGVzY3JpcHRpb24gdXNlZCBieSBwYWNrYWdlIG1hbmFnZXJzLiBJZiBub3Qgc2V0LCBERVNDUklQVElPTiB0YWtlcyB0aGUgdmFsdWUgb2YgdGhlIFNVTU1BUlkgdmFyaWFibGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHBhY2thZ2UgZGVzY3JpcHRpb24gdXNlZCBieSBwYWNrYWdlIG1hbmFnZXJzLgorICAgICAgICAgICAgICAgICAgICBJZiBub3Qgc2V0LCA8ZmlsZW5hbWU+REVTQ1JJUFRJT048L2ZpbGVuYW1lPiB0YWtlcworICAgICAgICAgICAgICAgICAgICB0aGUgdmFsdWUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TVU1NQVJZJz48ZmlsZW5hbWU+U1VNTUFSWTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ESVNLX1NJR05BVFVSRSc+PGdsb3NzdGVybT5ESVNLX1NJR05BVFVSRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRElTS19TSUdOQVRVUkVbZG9jXSA9ICJBIDMyLWJpdCBNQlIgZGlzayBzaWduYXR1cmUgdXNlZCBieSBkaXJlY3RkaXNrIGltYWdlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIDMyLWJpdCBNQlIgZGlzayBzaWduYXR1cmUgdXNlZCBieQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlyZWN0ZGlzazwvZmlsZW5hbWU+IGltYWdlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIHNpZ25hdHVyZSBpcyBzZXQgdG8gYW4gYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQgcmFuZG9tIHZhbHVlIHRoYXQgYWxsb3dzIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIHRvIGNyZWF0ZSBhIGJvb3QgbG9hZGVyLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG92ZXJyaWRlIHRoZSBzaWduYXR1cmUgaW4gdGhlIGltYWdlIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICBieSBzZXR0aW5nIDxmaWxlbmFtZT5ESVNLX1NJR05BVFVSRTwvZmlsZW5hbWU+IHRvIGFuCisgICAgICAgICAgICAgICAgICAgIDgtZGlnaXQgaGV4IHN0cmluZy4KKyAgICAgICAgICAgICAgICAgICAgWW91IG1pZ2h0IHdhbnQgdG8gb3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRJU0tfU0lHTkFUVVJFPC9maWxlbmFtZT4gaWYgeW91IHdhbnQgdGhlIGRpc2sKKyAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlIHRvIHJlbWFpbiBjb25zdGFudCBiZXR3ZWVuIGltYWdlIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB1c2luZyBMaW51eCAzLjggb3IgbGF0ZXIsIHlvdSBjYW4gdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ESVNLX1NJR05BVFVSRTwvZmlsZW5hbWU+IHRvIHNwZWNpZnkgdGhlIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgYnkgVVVJRCB0byBhbGxvdyB0aGUga2VybmVsIHRvIGxvY2F0ZSB0aGUgcm9vdCBkZXZpY2UKKyAgICAgICAgICAgICAgICAgICAgZXZlbiBpZiB0aGUgZGV2aWNlIG5hbWUgY2hhbmdlcyBkdWUgdG8gZGlmZmVyZW5jZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgPGZpbGVuYW1lPlNZU0xJTlVYX1JPT1Q8L2ZpbGVuYW1lPiBpcyBzZXQKKyAgICAgICAgICAgICAgICAgICAgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTWVNMSU5VWF9ST09UID0gInJvb3Q9L2Rldi9zZGEyIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBjYW4gY2hhbmdlIHRoaXMgdG8gbG9jYXRlIHRoZSByb290IGRldmljZQorICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUgZGlzayBzaWduYXR1cmUgaW5zdGVhZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTWVNMSU5VWF9ST09UID0gInJvb3Q9UEFSVFVVSUQ9JHtESVNLX1NJR05BVFVSRX0tMDIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXMgcHJldmlvdXNseSBtZW50aW9uZWQsIGl0IGlzIHBvc3NpYmxlIHRvIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRJU0tfU0lHTkFUVVJFPC9maWxlbmFtZT4gdmFyaWFibGUgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgdG8gYSBmaXhlZAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSBpZiB5b3UgZG8gbm90IHdhbnQgPGZpbGVuYW1lPnN5c2xpbnV4LmNmZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNoYW5naW5nIGZvciBlYWNoIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICBZb3UgbWlnaHQgZmluZCB0aGlzIHVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIHVwZ3JhZGUgdGhlCisgICAgICAgICAgICAgICAgICAgIHJvb3QgZmlsZXN5c3RlbSBvbiBhIGRldmljZSB3aXRob3V0IGhhdmluZyB0byByZWNyZWF0ZSBvcgorICAgICAgICAgICAgICAgICAgICBtb2RpZnkgdGhlIG1hc3RlciBib290IHJlY29yZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ESVNUUk8nPjxnbG9zc3Rlcm0+RElTVFJPPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBESVNUUk9bZG9jXSA9ICJUaGUgc2hvcnQgbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiBJZiB0aGUgdmFyaWFibGUgaXMgYmxhbmssIG1ldGEvY29uZi9kaXN0cm8vZGVmYXVsdHNldHVwLmNvbmYgd2lsbCBiZSB1c2VkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzaG9ydCBuYW1lIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgY29ycmVzcG9uZHMgdG8gYSBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIHdob3NlIHJvb3QgbmFtZSBpcyB0aGUgc2FtZSBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUncyBhcmd1bWVudCBhbmQgd2hvc2UgZmlsZW5hbWUgZXh0ZW5zaW9uIGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBQb2t5IGRpc3RyaWJ1dGlvbiBpcyBuYW1lZCA8ZmlsZW5hbWU+cG9reS5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kIHJlc2lkZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvL2NvbmYvZGlzdHJvPC9maWxlbmFtZT4gZGlyZWN0b3J5IG9mCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdpdGhpbiB0aGF0IDxmaWxlbmFtZT5wb2t5LmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRJU1RSTzwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIHNldCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERJU1RSTyA9ICJwb2t5IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSBsb2NhdGVkIGluIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvZGlzdHJvPC9maWxlbmFtZT4gZGlyZWN0b3J5IHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGhhdCBjb250YWlucyB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBmb3IgPGZpbGVuYW1lPkRJU1RSTzwvZmlsZW5hbWU+IG11c3Qgbm90IGNvbnRhaW4KKyAgICAgICAgICAgICAgICAgICAgc3BhY2VzLCBhbmQgaXMgdHlwaWNhbGx5IGFsbCBsb3dlci1jYXNlLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSA8ZmlsZW5hbWU+RElTVFJPPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgYmxhbmssIGEgc2V0CisgICAgICAgICAgICAgICAgICAgICAgICBvZiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zIGFyZSB1c2VkLCB3aGljaCBhcmUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvZGlzdHJvL2RlZmF1bHRzZXR1cC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFsc28gaW4gdGhlIFNvdXJjZSBEaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ESVNUUk9fQ09ERU5BTUUnPjxnbG9zc3Rlcm0+RElTVFJPX0NPREVOQU1FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBESVNUUk9fQ09ERU5BTUVbZG9jXSA9ICJTcGVjaWZpZXMgYSBjb2RlbmFtZSBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBiZWluZyBidWlsdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBjb2RlbmFtZSBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBiZWluZyBidWlsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ESVNUUk9fRVhUUkFfUkRFUEVORFMnPjxnbG9zc3Rlcm0+RElTVFJPX0VYVFJBX1JERVBFTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBESVNUUk9fRVhUUkFfUkRFUEVORFNbZG9jXSA9ICJTcGVjaWZpZXMgYSBsaXN0IG9mIGRpc3Ryby1zcGVjaWZpYyBwYWNrYWdlcyB0byBhZGQgdG8gYWxsIGltYWdlcy4gVGhlIHZhcmlhYmxlIG9ubHkgYXBwbGllcyB0byB0aGUgaW1hZ2VzIHRoYXQgaW5jbHVkZSBwYWNrYWdlZ3JvdXAtYmFzZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIGRpc3Ryby1zcGVjaWZpYyBwYWNrYWdlcyB0byBhZGQgdG8gYWxsIGltYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSB0YWtlcyBhZmZlY3QgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWJhc2U8L2ZpbGVuYW1lPiBzbyB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgb25seSByZWFsbHkgYXBwbGllcyB0byB0aGUgbW9yZSBmdWxsLWZlYXR1cmVkCisgICAgICAgICAgICAgICAgICAgIGltYWdlcyB0aGF0IGluY2x1ZGUgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC1iYXNlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgdmFyaWFibGUgdG8ga2VlcCBkaXN0cm8gcG9saWN5IG91dCBvZgorICAgICAgICAgICAgICAgICAgICBnZW5lcmljIGltYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgQXMgd2l0aCBhbGwgb3RoZXIgZGlzdHJvIHZhcmlhYmxlcywgeW91IHNldCB0aGlzIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBkaXN0cm8gPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ESVNUUk9fRVhUUkFfUlJFQ09NTUVORFMnPjxnbG9zc3Rlcm0+RElTVFJPX0VYVFJBX1JSRUNPTU1FTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBESVNUUk9fRVhUUkFfUlJFQ09NTUVORFNbZG9jXSA9ICJTcGVjaWZpZXMgYSBsaXN0IG9mIGRpc3Ryby1zcGVjaWZpYyBwYWNrYWdlcyB0byBhZGQgdG8gYWxsIGltYWdlcyBpZiB0aGUgcGFja2FnZXMgZXhpc3QuIFRoZSBsaXN0IG9mIHBhY2thZ2VzIGFyZSBhdXRvbWF0aWNhbGx5IGluc3RhbGxlZCBidXQgeW91IGNhbiByZW1vdmUgdGhlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIGRpc3Ryby1zcGVjaWZpYyBwYWNrYWdlcyB0byBhZGQgdG8gYWxsIGltYWdlcworICAgICAgICAgICAgICAgICAgICBpZiB0aGUgcGFja2FnZXMgZXhpc3QuCisgICAgICAgICAgICAgICAgICAgIFRoZSBwYWNrYWdlcyBtaWdodCBub3QgZXhpc3Qgb3IgYmUgZW1wdHkgKGUuZy4ga2VybmVsIG1vZHVsZXMpLgorICAgICAgICAgICAgICAgICAgICBUaGUgbGlzdCBvZiBwYWNrYWdlcyBhcmUgYXV0b21hdGljYWxseSBpbnN0YWxsZWQgYnV0IHlvdSBjYW4KKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlIHRoZW0uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRElTVFJPX0ZFQVRVUkVTJz48Z2xvc3N0ZXJtPkRJU1RST19GRUFUVVJFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRElTVFJPX0ZFQVRVUkVTW2RvY10gPSAiVGhlIGZlYXR1cmVzIGVuYWJsZWQgZm9yIHRoZSBkaXN0cmlidXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNvZnR3YXJlIHN1cHBvcnQgeW91IHdhbnQgaW4geW91ciBkaXN0cmlidXRpb24gZm9yCisgICAgICAgICAgICAgICAgICAgIHZhcmlvdXMgZmVhdHVyZXMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBkZWZpbmUgeW91ciBkaXN0cmlidXRpb24gZmVhdHVyZXMgaW4gdGhlIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIG1vc3QgY2FzZXMsIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIGEgZmVhdHVyZSBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT4gaXMgdHJhbnNsYXRlZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGUgb3B0aW9uIHN1cHBsaWVkIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbmZpZ3VyZSc+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIGZvciByZWNpcGVzIHRoYXQgb3B0aW9uYWxseSBzdXBwb3J0IHRoZSBmZWF0dXJlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3BlY2lmeWluZyAieDExIiBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT4sIGNhdXNlcworICAgICAgICAgICAgICAgICAgICBldmVyeSBwaWVjZSBvZiBzb2Z0d2FyZSBidWlsdCBmb3IgdGhlIHRhcmdldCB0aGF0IGNhbgorICAgICAgICAgICAgICAgICAgICBvcHRpb25hbGx5IHN1cHBvcnQgWDExIHRvIGhhdmUgaXRzIFgxMSBzdXBwb3J0IGVuYWJsZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFR3byBtb3JlIGV4YW1wbGVzIGFyZSBCbHVldG9vdGggYW5kIE5GUyBzdXBwb3J0LgorICAgICAgICAgICAgICAgICAgICBGb3IgYSBtb3JlIGNvbXBsZXRlIGxpc3Qgb2YgZmVhdHVyZXMgdGhhdCBzaGlwcyB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IGFuZCB0aGF0IHlvdSBjYW4gcHJvdmlkZSB3aXRoIHRoaXMgdmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1mZWF0dXJlcy1kaXN0cm8nPkRpc3RybyBGZWF0dXJlczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMJz48Z2xvc3N0ZXJtPkRJU1RST19GRUFUVVJFU19CQUNLRklMTDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMW2RvY10gPSAiRmVhdHVyZXMgdG8gYmUgYWRkZWQgdG8gRElTVFJPX0ZFQVRVUkVTIGlmIG5vdCBhbHNvIHByZXNlbnQgaW4gRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQuIFRoaXMgdmFyaWFibGUgaXMgc2V0IGluIHRoZSBtZXRhL2NvbmYvYml0YmFrZS5jb25mIGZpbGUgYW5kIGl0IGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VyLWNvbmZpZ3VyYWJsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBGZWF0dXJlcyB0byBiZSBhZGRlZCB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+RElTVFJPX0ZFQVRVUkVTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBhbHNvIHByZXNlbnQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRCc+RElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQ8L2xpbms+PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgc2V0IGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VyLWNvbmZpZ3VyYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgYmVzdCB0byBqdXN0IHJlZmVyZW5jZSB0aGUgdmFyaWFibGUgdG8gc2VlIHdoaWNoIGRpc3RybyBmZWF0dXJlcyBhcmUKKyAgICAgICAgICAgICAgICAgICAgYmVpbmcgYmFja2ZpbGxlZCBmb3IgYWxsIGRpc3RybyBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSA8bGluayBsaW5rZW5kPSdyZWYtZmVhdHVyZXMtYmFja2ZpbGwnPkZlYXR1cmUgYmFja2ZpbGxpbmc8L2xpbms+IHNlY3Rpb24gZm9yCisgICAgICAgICAgICAgICAgICAgIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQnPjxnbG9zc3Rlcm0+RElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEW2RvY10gPSAiRmVhdHVyZXMgZnJvbSBESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTEwgdGhhdCBzaG91bGQgbm90IGJlIGJhY2tmaWxsZWQgKGkuZS4gYWRkZWQgdG8gRElTVFJPX0ZFQVRVUkVTKSBkdXJpbmcgdGhlIGJ1aWxkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEZlYXR1cmVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTEwnPkRJU1RST19GRUFUVVJFU19CQUNLRklMTDwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB0aGF0IHNob3VsZCBub3QgYmUgYmFja2ZpbGxlZCAoaS5lLiBhZGRlZCB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+RElTVFJPX0ZFQVRVUkVTPC9saW5rPjwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSdyZWYtZmVhdHVyZXMtYmFja2ZpbGwnPkZlYXR1cmUgQmFja2ZpbGxpbmc8L2xpbms+IiBzZWN0aW9uIGZvcgorICAgICAgICAgICAgICAgICAgICBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURJU1RST19GRUFUVVJFU19ERUZBVUxUJz48Z2xvc3N0ZXJtPkRJU1RST19GRUFUVVJFU19ERUZBVUxUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBESVNUUk9fRkVBVFVSRVNfREVGQVVMVFtkb2NdID0gIlByb3ZpZGVzIHRoZSBkZWZhdWx0IGxpc3Qgb2YgZGlzdHJvIGZlYXR1cmVzIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBhbnkgbGliYy1zcGVjaWZpYyBmZWF0dXJlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGNvbnZlbmllbmNlIHZhcmlhYmxlIHRoYXQgZ2l2ZXMgeW91IHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgIGxpc3Qgb2YgZGlzdHJvIGZlYXR1cmVzIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBhbnkKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgc3BlY2lmaWMgdG8gdGhlIEMgbGlicmFyeQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmxpYmM8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gY3JlYXRpbmcgYSBjdXN0b20gZGlzdHJpYnV0aW9uLCB5b3UgbWlnaHQgZmluZCBpdAorICAgICAgICAgICAgICAgICAgICB1c2VmdWwgdG8gYmUgYWJsZSB0byByZXVzZSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgd2l0aG91dCB0aGUgbmVlZCB0byB3cml0ZSBvdXQgdGhlIGZ1bGwgc2V0LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCB1c2VzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVNfREVGQVVMVDwvZmlsZW5hbWU+IGZyb20gYQorICAgICAgICAgICAgICAgICAgICBjdXN0b20gZGlzdHJvIGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBESVNUUk9fRkVBVFVSRVMgPz0gIiR7RElTVFJPX0ZFQVRVUkVTX0RFRkFVTFR9ICR7RElTVFJPX0ZFQVRVUkVTX0xJQkN9IG15ZmVhdHVyZSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURJU1RST19GRUFUVVJFU19MSUJDJz48Z2xvc3N0ZXJtPkRJU1RST19GRUFUVVJFU19MSUJDPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBESVNUUk9fRkVBVFVSRVNfTElCQ1tkb2NdID0gIlNwZWNpZmllcyB0aGUgbGlzdCBvZiBkaXN0cm8gZmVhdHVyZXMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIEMgbGlicmFyeSAobGliYykuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBjb252ZW5pZW5jZSB2YXJpYWJsZSB0aGF0IHNwZWNpZmllcyB0aGUgbGlzdCBvZiBkaXN0cm8KKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIEMgbGlicmFyeQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmxpYmM8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgdGhlc2UgZmVhdHVyZXMgYXJlIHByZWZpeGVkIHdpdGggImxpYmMtIiBhbmQKKyAgICAgICAgICAgICAgICAgICAgY29udHJvbCB3aGljaCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhdCBkdXJpbmcgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgQyBsaWJyYXJ5IGl0c2VsZi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ESVNUUk9fTkFNRSc+PGdsb3NzdGVybT5ESVNUUk9fTkFNRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRElTVFJPX05BTUVbZG9jXSA9ICJUaGUgbG9uZyBuYW1lIG9mIHRoZSBkaXN0cmlidXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvbmcgbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURJU1RST19WRVJTSU9OJz48Z2xvc3N0ZXJtPkRJU1RST19WRVJTSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBESVNUUk9fVkVSU0lPTltkb2NdID0gIlRoZSB2ZXJzaW9uIG9mIHRoZSBkaXN0cmlidXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZlcnNpb24gb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ESVNUUk9PVkVSUklERVMnPjxnbG9zc3Rlcm0+RElTVFJPT1ZFUlJJREVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBESVNUUk9PVkVSUklERVNbZG9jXSA9ICJMaXN0cyBvdmVycmlkZXMgc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQgZGlzdHJpYnV0aW9uLiBCeSBkZWZhdWx0LCB0aGUgdmFyaWFibGUgbGlzdCBpbmNsdWRlcyB0aGUgdmFsdWUgb2YgdGhlIERJU1RSTyB2YXJpYWJsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGxpc3RzIG92ZXJyaWRlcyBzcGVjaWZpYyB0byB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSB2YXJpYWJsZSBsaXN0IGluY2x1ZGVzIHRoZSB2YWx1ZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk8nPkRJU1RSTzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBleHRlbmQgdGhlIHZhcmlhYmxlIHRvIGFwcGx5IGFueSB2YXJpYWJsZSBvdmVycmlkZXMKKyAgICAgICAgICAgICAgICAgICAgeW91IHdhbnQgYXMgcGFydCBvZiB0aGUgZGlzdHJpYnV0aW9uIGFuZCBhcmUgbm90CisgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgaW4gPGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+IHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgc29tZSBvdGhlciBtZWFucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ETF9ESVInPjxnbG9zc3Rlcm0+RExfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBETF9ESVJbZG9jXSA9ICJUaGUgY2VudHJhbCBkb3dubG9hZCBkaXJlY3RvcnkgdXNlZCBieSB0aGUgYnVpbGQgcHJvY2VzcyB0byBzdG9yZSBkb3dubG9hZHMuIEJ5IGRlZmF1bHQsIHRoZSBkaXJlY3RvcnkgaXMgJ2Rvd25sb2FkcycgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgY2VudHJhbCBkb3dubG9hZCBkaXJlY3RvcnkgdXNlZCBieSB0aGUgYnVpbGQgcHJvY2VzcyB0bworICAgICAgICAgICAgICAgICAgICBzdG9yZSBkb3dubG9hZHMuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIDxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPiBnZXRzIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIHN1aXRhYmxlIGZvciBtaXJyb3JpbmcgZm9yIGV2ZXJ5dGhpbmcgZXhjZXB0IEdpdAorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRhcmJhbGxzIG9mIEdpdCByZXBvc2l0b3JpZXMsIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyc+PGZpbGVuYW1lPkJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgdGhpcyBkaXJlY3RvcnkgYnkgZGVmaW5pbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGlzIHNlbGYtbWFpbnRhaW5pbmcgYW5kIHlvdSBzaG91bGQgbm90IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgdG8gdG91Y2ggaXQuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBkaXJlY3RvcnkgaXMgPGZpbGVuYW1lPmRvd25sb2FkczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICNETF9ESVIgPz0gIiR7VE9QRElSfS9kb3dubG9hZHMiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVG8gc3BlY2lmeSBhIGRpZmZlcmVudCBkb3dubG9hZCBkaXJlY3RvcnksIHNpbXBseSByZW1vdmUKKyAgICAgICAgICAgICAgICAgICAgdGhlIGNvbW1lbnQgZnJvbSB0aGUgbGluZSBhbmQgcHJvdmlkZSB5b3VyIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRHVyaW5nIGEgZmlyc3QgYnVpbGQsIHRoZSBzeXN0ZW0gZG93bmxvYWRzIG1hbnkgZGlmZmVyZW50CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBjb2RlIHRhcmJhbGxzIGZyb20gdmFyaW91cyB1cHN0cmVhbSBwcm9qZWN0cy4KKyAgICAgICAgICAgICAgICAgICAgRG93bmxvYWRpbmcgY2FuIHRha2UgYSB3aGlsZSwgcGFydGljdWxhcmx5IGlmIHlvdXIgbmV0d29yaworICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIGlzIHNsb3cuCisgICAgICAgICAgICAgICAgICAgIFRhcmJhbGxzIGFyZSBhbGwgc3RvcmVkIGluIHRoZSBkaXJlY3RvcnkgZGVmaW5lZCBieQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT4gYW5kIHRoZSBidWlsZCBzeXN0ZW0gbG9va3MgdGhlcmUKKyAgICAgICAgICAgICAgICAgICAgZmlyc3QgdG8gZmluZCBzb3VyY2UgdGFyYmFsbHMuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiB3aXBpbmcgYW5kIHJlYnVpbGRpbmcsIHlvdSBjYW4gcHJlc2VydmUgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHRvIHNwZWVkIHVwIHRoaXMgcGFydCBvZiBzdWJzZXF1ZW50CisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZHMuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzYWZlbHkgc2hhcmUgdGhpcyBkaXJlY3RvcnkgYmV0d2VlbiBtdWx0aXBsZSBidWlsZHMKKyAgICAgICAgICAgICAgICAgICAgb24gdGhlIHNhbWUgZGV2ZWxvcG1lbnQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gaG93IHRoZSBidWlsZCBwcm9jZXNzIGdldHMKKyAgICAgICAgICAgICAgICAgICAgc291cmNlIGZpbGVzIHdoZW4gd29ya2luZyBiZWhpbmQgYSBmaXJld2FsbCBvciBwcm94eSBzZXJ2ZXIsCisgICAgICAgICAgICAgICAgICAgIHNlZSB0aGlzIHNwZWNpZmljIHF1ZXN0aW9uIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0naG93LWRvZXMtdGhlLXlvY3RvLXByb2plY3Qtb2J0YWluLXNvdXJjZS1jb2RlLWFuZC13aWxsLWl0LXdvcmstYmVoaW5kLW15LWZpcmV3YWxsLW9yLXByb3h5LXNlcnZlcic+RkFRPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgY2hhcHRlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ET0NfQ09NUFJFU1MnPjxnbG9zc3Rlcm0+RE9DX0NPTVBSRVNTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBET0NfQ09NUFJFU1NbZG9jXSA9ICJXaGVuIGluaGVyaXRpbmcgdGhlIGNvbXByZXNzX2RvYyBjbGFzcywgdGhpcyB2YXJpYWJsZSBzZXRzIHRoZSBjb21wcmVzc2lvbiBwb2xpY3kgdXNlZCB3aGVuIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNvbXByZXNzZXMgbWFuIHBhZ2VzIGFuZCBpbmZvIHBhZ2VzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtY29tcHJlc3NfZG9jJz48ZmlsZW5hbWU+Y29tcHJlc3NfZG9jPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNldHMgdGhlIGNvbXByZXNzaW9uIHBvbGljeSB1c2VkIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY29tcHJlc3NlcyBtYW4gcGFnZXMgYW5kIGluZm8KKyAgICAgICAgICAgICAgICAgICAgcGFnZXMuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBjb21wcmVzc2lvbiBtZXRob2QgdXNlZCBpcyBneiAoZ3ppcCkuCisgICAgICAgICAgICAgICAgICAgIE90aGVyIHBvbGljaWVzIGF2YWlsYWJsZSBhcmUgeHogYW5kIGJ6Mi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHBvbGljaWVzIGFuZCBvbiBob3cgdG8gdXNlIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHNlZSB0aGUgY29tbWVudHMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvY29tcHJlc3NfZG9jLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1lJz48dGl0bGU+RTwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FRklfUFJPVklERVInPjxnbG9zc3Rlcm0+RUZJX1BST1ZJREVSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFRklfUFJPVklERVJbZG9jXSA9ICJXaGVuIGJ1aWxkaW5nIGJvb3RhYmxlIGltYWdlcyAoaS5lLiB3aGVyZSBoZGRpbWcgb3Igdm1kayBpcyBpbiBJTUFHRV9GU1RZUEVTKSwgdGhlIEVGSV9QUk9WSURFUiB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIEVGSSBib290bG9hZGVyIHRvIHVzZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nIGJvb3RhYmxlIGltYWdlcyAoaS5lLiB3aGVyZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aGRkaW1nPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPnZtZGs8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+PGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4pLAorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPkVGSV9QUk9WSURFUjwvZmlsZW5hbWU+IHZhcmlhYmxlIHNwZWNpZmllcworICAgICAgICAgICAgICAgICAgICB0aGUgRUZJIGJvb3Rsb2FkZXIgdG8gdXNlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyAiZ3J1Yi1lZmkiLCBidXQgImd1bW1pYm9vdCIgY2FuIGJlIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgaW5zdGVhZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ndW1taWJvb3QnPjxmaWxlbmFtZT5ndW1taWJvb3Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTic+PGdsb3NzdGVybT5FTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OW2RvY10gPSAiQ29udHJvbHMgd2hpY2ggbG9jYWxlcyBmb3IgZ2xpYmMgYXJlIGdlbmVyYXRlZCBkdXJpbmcgdGhlIGJ1aWxkLiBUaGUgdmFyaWFibGUgaXMgdXNlZnVsIGlmIHRoZSB0YXJnZXQgZGV2aWNlIGhhcyA2NE1ieXRlcyBvZiBSQU0gb3IgbGVzcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSB0aGF0IGNvbnRyb2xzIHdoaWNoIGxvY2FsZXMgZm9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+IGFyZSBnZW5lcmF0ZWQgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCAodXNlZnVsIGlmIHRoZSB0YXJnZXQgZGV2aWNlIGhhcyA2NE1ieXRlcworICAgICAgICAgICAgICAgICAgICBvZiBSQU0gb3IgbGVzcykuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVJSX1JFUE9SVF9ESVInPjxnbG9zc3Rlcm0+RVJSX1JFUE9SVF9ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEVSUl9SRVBPUlRfRElSW2RvY10gPSAiV2hlbiB1c2VkIHdpdGggdGhlIHJlcG9ydC1lcnJvciBjbGFzcywgc3BlY2lmaWVzIHRoZSBwYXRoIHVzZWQgZm9yIHN0b3JpbmcgdGhlIGRlYnVnIGZpbGVzIGNyZWF0ZWQgYnkgdGhlIGVycm9yIHJlcG9ydGluZyB0b29sLCB3aGljaCBhbGxvd3MgeW91IHRvIHN1Ym1pdCBidWlsZCBlcnJvcnMgeW91IGVuY291bnRlciB0byBhIGNlbnRyYWwgZGF0YWJhc2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB1c2VkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXJlcG9ydC1lcnJvcic+PGZpbGVuYW1lPnJlcG9ydC1lcnJvcjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgc3BlY2lmaWVzIHRoZSBwYXRoIHVzZWQgZm9yIHN0b3JpbmcgdGhlIGRlYnVnIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5nLXRoZS1lcnJvci1yZXBvcnRpbmctdG9vbCc+ZXJyb3IgcmVwb3J0aW5nIHRvb2w8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggYWxsb3dzIHlvdSB0byBzdWJtaXQgYnVpbGQgZXJyb3JzIHlvdSBlbmNvdW50ZXIgdG8gYQorICAgICAgICAgICAgICAgICAgICBjZW50cmFsIGRhdGFiYXNlLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBpcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1MT0dfRElSJz48ZmlsZW5hbWU+TE9HX0RJUjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59L2Vycm9yLXJlcG9ydDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldCA8ZmlsZW5hbWU+RVJSX1JFUE9SVF9ESVI8L2ZpbGVuYW1lPiB0byB0aGUgcGF0aAorICAgICAgICAgICAgICAgICAgICB5b3Ugd2FudCB0aGUgZXJyb3IgcmVwb3J0aW5nIHRvb2wgdG8gc3RvcmUgdGhlIGRlYnVnIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIGFzIGZvbGxvd3MgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRVJSX1JFUE9SVF9ESVIgPSAiPHJlcGxhY2VhYmxlPnBhdGg8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVSUk9SX1FBJz48Z2xvc3N0ZXJtPkVSUk9SX1FBPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFUlJPUl9RQVtkb2NdID0gIlNwZWNpZmllcyB0aGUgcXVhbGl0eSBhc3N1cmFuY2UgY2hlY2tzIHdob3NlIGZhaWx1cmVzIGFyZSByZXBvcnRlZCBhcyBlcnJvcnMgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBxdWFsaXR5IGFzc3VyYW5jZSBjaGVja3Mgd2hvc2UgZmFpbHVyZXMgYXJlCisgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVkIGFzIGVycm9ycyBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGEgbGlzdCBvZiB0aGUgY2hlY2tzIHlvdSBjYW4gY29udHJvbCB3aXRoIHRoaXMgdmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWluc2FuZSc+PGZpbGVuYW1lPmluc2FuZS5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVYQ0xVREVfRlJPTV9XT1JMRCc+PGdsb3NzdGVybT5FWENMVURFX0ZST01fV09STEQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEVYQ0xVREVfRlJPTV9XT1JMRFtkb2NdID0gIkRpcmVjdHMgQml0QmFrZSB0byBleGNsdWRlIGEgcmVjaXBlIGZyb20gd29ybGQgYnVpbGRzIChpLmUuIGJpdGJha2Ugd29ybGQpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERpcmVjdHMgQml0QmFrZSB0byBleGNsdWRlIGEgcmVjaXBlIGZyb20gd29ybGQgYnVpbGRzIChpLmUuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIHdvcmxkPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBEdXJpbmcgd29ybGQgYnVpbGRzLCBCaXRCYWtlIGxvY2F0ZXMsIHBhcnNlcyBhbmQgYnVpbGRzIGFsbAorICAgICAgICAgICAgICAgICAgICByZWNpcGVzIGZvdW5kIGluIGV2ZXJ5IGxheWVyIGV4cG9zZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBleGNsdWRlIGEgcmVjaXBlIGZyb20gYSB3b3JsZCBidWlsZCB1c2luZyB0aGlzIHZhcmlhYmxlLAorICAgICAgICAgICAgICAgICAgICBzZXQgdGhlIHZhcmlhYmxlIHRvICIxIiBpbiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBSZWNpcGVzIGFkZGVkIHRvIDxmaWxlbmFtZT5FWENMVURFX0ZST01fV09STEQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBtYXkgc3RpbGwgYmUgYnVpbHQgZHVyaW5nIGEgd29ybGQgYnVpbGQgaW4gb3JkZXIgdG8gc2F0aXNmeQorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMgb2Ygb3RoZXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgQWRkaW5nIGEgcmVjaXBlIHRvIDxmaWxlbmFtZT5FWENMVURFX0ZST01fV09STEQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBvbmx5IGVuc3VyZXMgdGhhdCB0aGUgcmVjaXBlIGlzIG5vdCBleHBsaWNpdGx5IGFkZGVkCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBsaXN0IG9mIGJ1aWxkIHRhcmdldHMgaW4gYSB3b3JsZCBidWlsZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRFTkRQRSc+PGdsb3NzdGVybT5FWFRFTkRQRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhURU5EUEVbZG9jXSA9ICJVc2VkIHdpdGggZmlsZSBhbmQgcGF0aG5hbWVzIHRvIGNyZWF0ZSBhIHByZWZpeCBmb3IgYSByZWNpcGUncyB2ZXJzaW9uIGJhc2VkIG9uIHRoZSByZWNpcGUncyBQRSB2YWx1ZS4gSWYgUEUgaXMgc2V0IGFuZCBncmVhdGVyIHRoYW4gemVybyBmb3IgYSByZWNpcGUsIEVYVEVORFBFIGJlY29tZXMgdGhhdCB2YWx1ZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBVc2VkIHdpdGggZmlsZSBhbmQgcGF0aG5hbWVzIHRvIGNyZWF0ZSBhIHByZWZpeCBmb3IgYSByZWNpcGUncworICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uIGJhc2VkIG9uIHRoZSByZWNpcGUncworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEUnPjxmaWxlbmFtZT5QRTwvZmlsZW5hbWU+PC9saW5rPiB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPlBFPC9maWxlbmFtZT4gaXMgc2V0IGFuZCBncmVhdGVyIHRoYW4gemVybyBmb3IgYSByZWNpcGUsCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5FWFRFTkRQRTwvZmlsZW5hbWU+IGJlY29tZXMgdGhhdCB2YWx1ZSAoZS5nIGlmCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QRTwvZmlsZW5hbWU+IGlzIGVxdWFsIHRvICIxIiB0aGVuIDxmaWxlbmFtZT5FWFRFTkRQRTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGJlY29tZXMgIjFfIikuCisgICAgICAgICAgICAgICAgICAgIElmIGEgcmVjaXBlJ3MgPGZpbGVuYW1lPlBFPC9maWxlbmFtZT4gaXMgbm90IHNldCAodGhlIGRlZmF1bHQpIG9yIGlzIGVxdWFsIHRvCisgICAgICAgICAgICAgICAgICAgIHplcm8sIDxmaWxlbmFtZT5FWFRFTkRQRTwvZmlsZW5hbWU+IGJlY29tZXMgIiIuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5TZWUgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFNUCc+PGZpbGVuYW1lPlNUQU1QPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBhbiBleGFtcGxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVYVEVORFBLR1YnPjxnbG9zc3Rlcm0+RVhURU5EUEtHVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhURU5EUEtHVltkb2NdID0gIlRoZSBmdWxsIHBhY2thZ2UgdmVyc2lvbiBzcGVjaWZpY2F0aW9uIGFzIGl0IGFwcGVhcnMgb24gdGhlIGZpbmFsIHBhY2thZ2VzIHByb2R1Y2VkIGJ5IGEgcmVjaXBlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmdWxsIHBhY2thZ2UgdmVyc2lvbiBzcGVjaWZpY2F0aW9uIGFzIGl0IGFwcGVhcnMgb24gdGhlCisgICAgICAgICAgICAgICAgICAgIGZpbmFsIHBhY2thZ2VzIHByb2R1Y2VkIGJ5IGEgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUncyB2YWx1ZSBpcyBub3JtYWxseSB1c2VkIHRvIGZpeCBhIHJ1bnRpbWUKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSB0byB0aGUgZXhhY3Qgc2FtZSB2ZXJzaW9uIG9mIGFub3RoZXIgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgc2FtZSByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUkRFUEVORFNfJHtQTn0tYWRkaXRpb25hbC1tb2R1bGUgPSAiJHtQTn0gKD0gJHtFWFRFTkRQS0dWfSkiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwcyBhcmUgaW50ZW5kZWQgdG8gZm9yY2UgdGhlCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbWFuYWdlciB0byB1cGdyYWRlIHRoZXNlIHR5cGVzIG9mIHBhY2thZ2VzIGluCisgICAgICAgICAgICAgICAgICAgIGxvY2stc3RlcC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRFUk5BTF9LRVJORUxfVE9PTFMnPjxnbG9zc3Rlcm0+RVhURVJOQUxfS0VSTkVMX1RPT0xTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFWFRFUk5BTF9LRVJORUxfVE9PTFNbZG9jXSA9ICJJbmRpY2F0ZXMga2VybmVsIHRvb2xzIGFyZSBleHRlcm5hbCB0byB0aGUgc291cmNlIHRyZWUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzZXQsIHRoZSA8ZmlsZW5hbWU+RVhURVJOQUxfS0VSTkVMX1RPT0xTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW5kaWNhdGVzIHRoYXQgdGhlc2UgdG9vbHMgYXJlIG5vdCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgc291cmNlIHRyZWUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4ga2VybmVsIHRvb2xzIGFyZSBhdmFpbGFibGUgaW4gdGhlIHRyZWUsIHRoZXkgYXJlCisgICAgICAgICAgICAgICAgICAgIHByZWZlcnJlZCBvdmVyIGFueSBleHRlcm5hbGx5IGluc3RhbGxlZCB0b29scy4KKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB0aGUgPGZpbGVuYW1lPkVYVEVSTkFMX0tFUk5FTF9UT09MUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRlbGxzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHByZWZlcgorICAgICAgICAgICAgICAgICAgICB0aGUgaW5zdGFsbGVkIGV4dGVybmFsIHRvb2xzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWtlcm5lbC15b2N0byc+PGZpbGVuYW1lPmtlcm5lbC15b2N0bzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBpbiA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzPC9maWxlbmFtZT4gdG8gc2VlIGhvdworICAgICAgICAgICAgICAgICAgICB0aGUgdmFyaWFibGUgaXMgdXNlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRFUk5BTFNSQyc+PGdsb3NzdGVybT5FWFRFUk5BTFNSQzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhURVJOQUxTUkNbZG9jXSA9ICJJZiBleHRlcm5hbHNyYy5iYmNsYXNzIGlzIGluaGVyaXRlZCwgdGhpcyB2YXJpYWJsZSBwb2ludHMgdG8gdGhlIHNvdXJjZSB0cmVlLCB3aGljaCBpcyBvdXRzaWRlIG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZXh0ZXJuYWxzcmMnPjxmaWxlbmFtZT5leHRlcm5hbHNyYzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBwb2ludHMgdG8gdGhlIHNvdXJjZSB0cmVlLCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICBvdXRzaWRlIG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHNldCwgdGhpcyB2YXJpYWJsZSBzZXRzIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUyc+PGZpbGVuYW1lPlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHdoaWNoIGlzIHdoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcworICAgICAgICAgICAgICAgICAgICB0byBsb2NhdGUgdW5wYWNrZWQgcmVjaXBlIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZXh0ZXJuYWxzcmMuYmJjbGFzczwvZmlsZW5hbWU+LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1leHRlcm5hbHNyYyc+PGZpbGVuYW1lPmV4dGVybmFsc3JjLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBmaW5kIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhpcyB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkaW5nLXNvZnR3YXJlLWZyb20tYW4tZXh0ZXJuYWwtc291cmNlJz5CdWlsZGluZyBTb2Z0d2FyZSBmcm9tIGFuIEV4dGVybmFsIFNvdXJjZTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRFUk5BTFNSQ19CVUlMRCc+PGdsb3NzdGVybT5FWFRFUk5BTFNSQ19CVUlMRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhURVJOQUxTUkNfQlVJTERbZG9jXSA9ICJJZiBleHRlcm5hbHNyYy5iYmNsYXNzIGlzIGluaGVyaXRlZCwgdGhpcyB2YXJpYWJsZSBwb2ludHMgdG8gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgcmVjaXBlJ3Mgc291cmNlIGNvZGUgaXMgYnVpbHQsIHdoaWNoIGlzIG91dHNpZGUgb2YgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1leHRlcm5hbHNyYyc+PGZpbGVuYW1lPmV4dGVybmFsc3JjPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHBvaW50cyB0byB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZQorICAgICAgICAgICAgICAgICAgICByZWNpcGUncyBzb3VyY2UgY29kZSBpcyBidWlsdCwgd2hpY2ggaXMgb3V0c2lkZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzZXQsIHRoaXMgdmFyaWFibGUgc2V0cyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUInPjxmaWxlbmFtZT5CPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB3aGljaCBpcyB3aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gbG9jYXRlIHRoZSBCdWlsZCBEaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5leHRlcm5hbHNyYy5iYmNsYXNzPC9maWxlbmFtZT4sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWV4dGVybmFsc3JjJz48ZmlsZW5hbWU+ZXh0ZXJuYWxzcmMuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGZpbmQgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGlzIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGRpbmctc29mdHdhcmUtZnJvbS1hbi1leHRlcm5hbC1zb3VyY2UnPkJ1aWxkaW5nIFNvZnR3YXJlIGZyb20gYW4gRXh0ZXJuYWwgU291cmNlPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVYVFJBX0FVVE9SRUNPTkYnPjxnbG9zc3Rlcm0+RVhUUkFfQVVUT1JFQ09ORjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhUUkFfQVVUT1JFQ09ORltkb2NdID0gIkV4dHJhIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSBhdXRvcmVjb25mIGNvbW1hbmQsIHdoaWNoIGlzIGV4ZWN1dGVkIGR1cmluZyBkb19jb25maWd1cmUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHJlY2lwZXMgaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYXV0b3Rvb2xzJz48ZmlsZW5hbWU+YXV0b3Rvb2xzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB5b3UgY2FuIHVzZSA8ZmlsZW5hbWU+RVhUUkFfQVVUT1JFQ09ORjwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgZXh0cmEgb3B0aW9ucyB0byBwYXNzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXV0b3JlY29uZjwvZmlsZW5hbWU+IGNvbW1hbmQgdGhhdCBpcworICAgICAgICAgICAgICAgICAgICBleGVjdXRlZCBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgIi0tZXhjbHVkZT1hdXRvcG9pbnQiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVYVFJBX0lNQUdFX0ZFQVRVUkVTJz48Z2xvc3N0ZXJtPkVYVFJBX0lNQUdFX0ZFQVRVUkVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFWFRSQV9JTUFHRV9GRUFUVVJFU1tkb2NdID0gIlRoZSBsaXN0IG9mIGFkZGl0aW9uYWwgZmVhdHVyZXMgdG8gaW5jbHVkZSBpbiBhbiBpbWFnZS4gQ29uZmlndXJlIHRoaXMgdmFyaWFibGUgaW4gdGhlIGNvbmYvbG9jYWwuY29uZiBmaWxlIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIGFkZGl0aW9uYWwgZmVhdHVyZXMgdG8gaW5jbHVkZSBpbiBhbiBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBsaXN0aW5nIG1vcmUgdGhhbiBvbmUgZmVhdHVyZSwgc2VwYXJhdGUgdGhlbSB3aXRoCisgICAgICAgICAgICAgICAgICAgIGEgc3BhY2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgeW91IGNvbmZpZ3VyZSB0aGlzIHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgQWx0aG91Z2ggeW91IGNhbiB1c2UgdGhpcyB2YXJpYWJsZSBmcm9tIHdpdGhpbiBhIHJlY2lwZSwKKyAgICAgICAgICAgICAgICAgICAgYmVzdCBwcmFjdGljZXMgZGljdGF0ZSB0aGF0IHlvdSBkbyBub3QuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gZW5hYmxlIHByaW1hcnkgZmVhdHVyZXMgZnJvbSB3aXRoaW4gdGhlIGltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUsIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzIG9mIGZlYXR1cmVzIHlvdSBjYW4gYWRkOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisiZGJnLXBrZ3MiIC0gQWRkcyAtZGJnIHBhY2thZ2VzIGZvciBhbGwgaW5zdGFsbGVkIHBhY2thZ2VzCisgICAgICAgICAgICAgaW5jbHVkaW5nIHN5bWJvbCBpbmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nIGFuZAorICAgICAgICAgICAgIHByb2ZpbGluZy4KKworImRlYnVnLXR3ZWFrcyIgLSBNYWtlcyBhbiBpbWFnZSBzdWl0YWJsZSBmb3IgZGVidWdnaW5nLgorICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYWxsb3dzIHJvb3QgbG9naW5zIHdpdGhvdXQKKyAgICAgICAgICAgICAgICAgcGFzc3dvcmRzIGFuZCBlbmFibGVzIHBvc3QtaW5zdGFsbGF0aW9uCisgICAgICAgICAgICAgICAgIGxvZ2dpbmcuIFNlZSB0aGUgJ2FsbG93LWVtcHR5LXBhc3N3b3JkJworICAgICAgICAgICAgICAgICBhbmQgJ3Bvc3QtaW5zdGFsbC1sb2dnaW5nJyBmZWF0dXJlcyBpbgorICAgICAgICAgICAgICAgICB0aGUgIjxsaW5rIGxpbmtlbmQ9J3JlZi1mZWF0dXJlcy1pbWFnZSc+SW1hZ2UgRmVhdHVyZXM8L2xpbms+IiBzZWN0aW9uIGZvcgorICAgICAgICAgICAgICAgICBtb3JlIGluZm9ybWF0aW9uLgorCisiZGV2LXBrZ3MiIC0gQWRkcyAtZGV2IHBhY2thZ2VzIGZvciBhbGwgaW5zdGFsbGVkIHBhY2thZ2VzLgorICAgICAgICAgICAgIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGRldmVsb3AgYWdhaW5zdAorICAgICAgICAgICAgIHRoZSBsaWJyYXJpZXMgaW4gdGhlIGltYWdlLgorCisicmVhZC1vbmx5LXJvb3RmcyIgLSBDcmVhdGVzIGFuIGltYWdlIHdob3NlIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0gaXMgcmVhZC1vbmx5LiBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY3JlYXRpbmctYS1yZWFkLW9ubHktcm9vdC1maWxlc3lzdGVtJz5DcmVhdGluZyBhIFJlYWQtT25seSBSb290IEZpbGVzeXN0ZW08L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgIERldmVsb3BtZW50IE1hbnVhbCBmb3IgbW9yZQorICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24KKworInRvb2xzLWRlYnVnIiAtIEFkZHMgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMgZ2RiIGFuZAorICAgICAgICAgICAgICAgIHN0cmFjZS4KKworInRvb2xzLXByb2ZpbGUiIC0gQWRkcyBwcm9maWxpbmcgdG9vbHMgc3VjaCBhcyBvcHJvZmlsZSwKKyAgICAgICAgICAgICAgICAgIGV4bWFwLCBsdHRuZyBhbmQgdmFsZ3JpbmQgKHg4NiBvbmx5KS4KKworInRvb2xzLXNkayIgLSBBZGRzIGRldmVsb3BtZW50IHRvb2xzIHN1Y2ggYXMgZ2NjLCBtYWtlLAorICAgICAgICAgICAgICBwa2djb25maWcgYW5kIHNvIGZvcnRoLgorCisidG9vbHMtdGVzdGFwcHMiIC0gQWRkcyB1c2VmdWwgdGVzdGluZyB0b29scyBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgdHNfcHJpbnQsIGFwbGF5LCBhcmVjb3JkIGFuZCBzbworICAgICAgICAgICAgICAgICAgIGZvcnRoLgorCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGEgY29tcGxldGUgbGlzdCBvZiBpbWFnZSBmZWF0dXJlcyB0aGF0IHNoaXBzIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9InJlZi1mZWF0dXJlcy1pbWFnZSI+SW1hZ2UgRmVhdHVyZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSB0aGF0IHNob3dzIGhvdyB0byBjdXN0b21pemUgeW91ciBpbWFnZSBieQorICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGlzIHZhcmlhYmxlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1c2luZ3Bva3ktZXh0ZW5kLWN1c3RvbWltYWdlLWltYWdlZmVhdHVyZXMnPkN1c3RvbWl6aW5nIEltYWdlcyBVc2luZyBDdXN0b20gPGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5FWFRSQV9JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVYVFJBX0lNQUdFQ01EJz48Z2xvc3N0ZXJtPkVYVFJBX0lNQUdFQ01EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFWFRSQV9JTUFHRUNNRFtkb2NdID0gIlNwZWNpZmllcyBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBpbWFnZSBjcmVhdGlvbiBjb21tYW5kIHRoYXQgaGFzIGJlZW4gc3BlY2lmaWVkIGluIElNQUdFX0NNRC4gV2hlbiBzZXR0aW5nIHRoaXMgdmFyaWFibGUsIHlvdSBzaG91bGQgdXNlIGFuIG92ZXJyaWRlIGZvciB0aGUgYXNzb2NpYXRlZCB0eXBlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbiBjb21tYW5kIHRoYXQgaGFzIGJlZW4gc3BlY2lmaWVkIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9DTUQnPjxmaWxlbmFtZT5JTUFHRV9DTUQ8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIFdoZW4gc2V0dGluZyB0aGlzIHZhcmlhYmxlLCB5b3Ugc2hvdWxkCisgICAgICAgICAgICAgICAgICAgIHVzZSBhbiBvdmVycmlkZSBmb3IgdGhlIGFzc29jaWF0ZWQgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEVYVFJBX0lNQUdFQ01EX2V4dDMgPz0gIi1pIDQwOTYiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRSQV9JTUFHRURFUEVORFMnPjxnbG9zc3Rlcm0+RVhUUkFfSU1BR0VERVBFTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFWFRSQV9JTUFHRURFUEVORFNbZG9jXSA9ICJBIGxpc3Qgb2YgcmVjaXBlcyB0byBidWlsZCB0aGF0IGRvIG5vdCBwcm92aWRlIHBhY2thZ2VzIGZvciBpbnN0YWxsaW5nIGludG8gdGhlIHJvb3QgZmlsZXN5c3RlbS4gVXNlIHRoaXMgdmFyaWFibGUgdG8gbGlzdCByZWNpcGVzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZSBmaW5hbCBpbWFnZSwgYnV0IG5vdCBuZWVkZWQgaW4gdGhlIHJvb3QgZmlsZXN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgcmVjaXBlcyB0byBidWlsZCB0aGF0IGRvIG5vdCBwcm92aWRlIHBhY2thZ2VzCisgICAgICAgICAgICAgICAgICAgIGZvciBpbnN0YWxsaW5nIGludG8gdGhlIHJvb3QgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU29tZXRpbWVzIGEgcmVjaXBlIGlzIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZSBmaW5hbCBpbWFnZSBidXQgaXMgbm90CisgICAgICAgICAgICAgICAgICAgIG5lZWRlZCBpbiB0aGUgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPkVYVFJBX0lNQUdFREVQRU5EUzwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvCisgICAgICAgICAgICAgICAgICAgIGxpc3QgdGhlc2UgcmVjaXBlcyBhbmQgdGh1cyBzcGVjaWZ5IHRoZSBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgICAgIEEgdHlwaWNhbCBleGFtcGxlIGlzIGEgcmVxdWlyZWQgYm9vdGxvYWRlciBpbiBhIG1hY2hpbmUgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVG8gYWRkIHBhY2thZ2VzIHRvIHRoZSByb290IGZpbGVzeXN0ZW0sIHNlZSB0aGUgdmFyaW91cworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+KjxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+UkRFUEVORFM8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT4qPGxpbmsgbGlua2VuZD0ndmFyLVJSRUNPTU1FTkRTJz5SUkVDT01NRU5EUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVhUUkFfT0VDTUFLRSc+PGdsb3NzdGVybT5FWFRSQV9PRUNNQUtFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFWFRSQV9PRUNNQUtFW2RvY10gPSAiQWRkaXRpb25hbCBjbWFrZSBvcHRpb25zLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWwgPGZpbGVuYW1lPmNtYWtlPC9maWxlbmFtZT4gb3B0aW9ucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRSQV9PRUNPTkYnPjxnbG9zc3Rlcm0+RVhUUkFfT0VDT05GPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFWFRSQV9PRUNPTkZbZG9jXSA9ICJBZGRpdGlvbmFsIGNvbmZpZ3VyZSBzY3JpcHQgb3B0aW9ucy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsIDxmaWxlbmFtZT5jb25maWd1cmU8L2ZpbGVuYW1lPiBzY3JpcHQgb3B0aW9ucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRSQV9PRU1BS0UnPjxnbG9zc3Rlcm0+RVhUUkFfT0VNQUtFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFWFRSQV9PRU1BS0VbZG9jXSA9ICJBZGRpdGlvbmFsIEdOVSBtYWtlIG9wdGlvbnMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbCBHTlUgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiBvcHRpb25zLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVYVFJBX09FU0NPTlMnPjxnbG9zc3Rlcm0+RVhUUkFfT0VTQ09OUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhUUkFfT0VTQ09OU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIHNjb25zIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB5b3Ugd2FudCB0byBwYXNzIHRvIHRoZSBzY29ucyBjb21tYW5kIGxpbmUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zY29ucyc+PGZpbGVuYW1lPnNjb25zPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyB5b3Ugd2FudCB0byBwYXNzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2NvbnM8L2ZpbGVuYW1lPiBjb21tYW5kIGxpbmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVhUUkFfUU1BS0VWQVJTX1BPU1QnPjxnbG9zc3Rlcm0+RVhUUkFfUU1BS0VWQVJTX1BPU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEVYVFJBX1FNQUtFVkFSU19QT1NUW2RvY10gPSAiQ29uZmlndXJhdGlvbiB2YXJpYWJsZXMgb3Igb3B0aW9ucyB5b3Ugd2FudCB0byBwYXNzIHRvIHFtYWtlIHdoZW4gdGhlIGFyZ3VtZW50cyBuZWVkIHRvIGJlIGFmdGVyIHRoZSAucHJvIGZpbGUgbGlzdCBvbiB0aGUgY29tbWFuZCBsaW5lLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gdmFyaWFibGVzIG9yIG9wdGlvbnMgeW91IHdhbnQgdG8gcGFzcyB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cW1ha2U8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgdmFyaWFibGUgd2hlbiB0aGUgYXJndW1lbnRzIG5lZWQgdG8gYmUgYWZ0ZXIgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ucHJvPC9maWxlbmFtZT4gZmlsZSBsaXN0IG9uIHRoZSBjb21tYW5kIGxpbmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB3aXRoIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1xbWFrZSonPjxmaWxlbmFtZT5xbWFrZV9iYXNlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIG9yIG90aGVyIGNsYXNzZXMgdGhhdCBpbmhlcml0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xbWFrZV9iYXNlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRSQV9RTUFLRVZBUlNfUFJFJz48Z2xvc3N0ZXJtPkVYVFJBX1FNQUtFVkFSU19QUkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEVYVFJBX1FNQUtFVkFSU19QUkVbZG9jXSA9ICJDb25maWd1cmF0aW9uIHZhcmlhYmxlcyBvciBvcHRpb25zIHlvdSB3YW50IHRvIHBhc3MgdG8gcW1ha2Ugd2hlbiB0aGUgYXJndW1lbnRzIG5lZWQgdG8gYmUgYmVmb3JlIHRoZSAucHJvIGZpbGUgbGlzdCBvbiB0aGUgY29tbWFuZCBsaW5lLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gdmFyaWFibGVzIG9yIG9wdGlvbnMgeW91IHdhbnQgdG8gcGFzcyB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cW1ha2U8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgdmFyaWFibGUgd2hlbiB0aGUgYXJndW1lbnRzIG5lZWQgdG8gYmUgYmVmb3JlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnBybzwvZmlsZW5hbWU+IGZpbGUgbGlzdCBvbiB0aGUgY29tbWFuZCBsaW5lLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgd2l0aCByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcW1ha2UqJz48ZmlsZW5hbWU+cW1ha2VfYmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBvciBvdGhlciBjbGFzc2VzIHRoYXQgaW5oZXJpdAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cW1ha2VfYmFzZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVYVFJBX1VTRVJTX1BBUkFNUyc+PGdsb3NzdGVybT5FWFRSQV9VU0VSU19QQVJBTVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEVYVFJBX1VTRVJTX1BBUkFNU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIGV4dHJhdXNlcnMgY2xhc3MsIHRoaXMgdmFyaWFibGUgcHJvdmlkZXMgaW1hZ2UgbGV2ZWwgdXNlciBhbmQgZ3JvdXAgb3BlcmF0aW9ucy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWV4dHJhdXNlcnMnPjxmaWxlbmFtZT5leHRyYXVzZXJzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHByb3ZpZGVzIGltYWdlIGxldmVsIHVzZXIgYW5kIGdyb3VwCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYSBtb3JlIGdsb2JhbCBtZXRob2Qgb2YgcHJvdmlkaW5nIHVzZXIgYW5kIGdyb3VwCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gYXMgY29tcGFyZWQgdG8gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXVzZXJhZGQnPjxmaWxlbmFtZT51c2VyYWRkPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB3aGljaCB0aWVzIHVzZXIgYW5kIGdyb3VwIGNvbmZpZ3VyYXRpb25zIHRvIGEKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc2V0IGxpc3Qgb2YgY29tbWFuZHMgeW91IGNhbiBjb25maWd1cmUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5FWFRSQV9VU0VSU19QQVJBTVM8L2ZpbGVuYW1lPiBpcyBzaG93biBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmV4dHJhdXNlcnM8L2ZpbGVuYW1lPiBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgY29tbWFuZHMgbWFwIHRvIHRoZSBub3JtYWwgVW5peCBjb21tYW5kcyBvZiB0aGUgc2FtZQorICAgICAgICAgICAgICAgICAgICBuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIEVYVFJBX1VTRVJTX1BBUkFNUyA9ICJcCisgICAgICMgdXNlcmFkZCAtcCAnJyB0ZXN0ZXI7IFwKKyAgICAgIyBncm91cGFkZCBkZXZlbG9wZXJzOyBcCisgICAgICMgdXNlcmRlbCBub2JvZHk7IFwKKyAgICAgIyBncm91cGRlbCAtZyB2aWRlbzsgXAorICAgICAjIGdyb3VwbW9kIC1nIDEwMjAgZGV2ZWxvcGVyczsgXAorICAgICAjIHVzZXJtb2QgLXMgL2Jpbi9zaCB0ZXN0ZXI7IFwKKyAgICAgIyAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktZic+PHRpdGxlPkY8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRkVBVFVSRV9QQUNLQUdFUyc+PGdsb3NzdGVybT5GRUFUVVJFX1BBQ0tBR0VTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBGRUFUVVJFX1BBQ0tBR0VTW2RvY10gPSAiRGVmaW5lcyBvbmUgb3IgbW9yZSBwYWNrYWdlcyB0byBpbmNsdWRlIGluIGFuIGltYWdlIHdoZW4gYSBzcGVjaWZpYyBpdGVtIGlzIGluY2x1ZGVkIGluIElNQUdFX0ZFQVRVUkVTLiBXaGVuIHNldHRpbmcgdGhlIHZhbHVlLCBGRUFUVVJFX1BBQ0tBR0VTIHNob3VsZCBoYXZlIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlIGl0ZW0gYXMgYW4gb3ZlcnJpZGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyBvbmUgb3IgbW9yZSBwYWNrYWdlcyB0byBpbmNsdWRlIGluIGFuIGltYWdlIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgYSBzcGVjaWZpYyBpdGVtIGlzIGluY2x1ZGVkIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBXaGVuIHNldHRpbmcgdGhlIHZhbHVlLCA8ZmlsZW5hbWU+RkVBVFVSRV9QQUNLQUdFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHNob3VsZCBoYXZlIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlIGl0ZW0gYXMgYW4gb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGRUFUVVJFX1BBQ0tBR0VTX3dpZGdldCA9ICI8cmVwbGFjZWFibGU+cGFja2FnZTE8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+cGFja2FnZTI8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIGlmICJ3aWRnZXQiIHdlcmUgYWRkZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4sIDxyZXBsYWNlYWJsZT5wYWNrYWdlMTwvcmVwbGFjZWFibGU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+cGFja2FnZTI8L3JlcGxhY2VhYmxlPiB3b3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgaW5zdGFsbGVkIGJ5IGZlYXR1cmVzIGRlZmluZWQgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZFQVRVUkVfUEFDS0FHRVM8L2ZpbGVuYW1lPiBhcmUgb2Z0ZW4gcGFja2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzLgorICAgICAgICAgICAgICAgICAgICAgICAgV2hpbGUgc2ltaWxhcmx5IG5hbWVkLCB5b3Ugc2hvdWxkIG5vdCBjb25mdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZFQVRVUkVfUEFDS0FHRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIGdyb3Vwcywgd2hpY2ggYXJlIGRpc2N1c3NlZCBlbHNld2hlcmUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRkVFRF9ERVBMT1lESVJfQkFTRV9VUkknPjxnbG9zc3Rlcm0+RkVFRF9ERVBMT1lESVJfQkFTRV9VUkk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEZFRURfREVQTE9ZRElSX0JBU0VfVVJJW2RvY10gPSAiQWxsb3cgdG8gc2VydmUgaXBrIGRlcGxveSBkaXJlY3RvcnkgYXMgYW4gYWQgaG9jIGZlZWQgKGJvZ29mZWVkKS4gU2V0IHRvIGJhc2UgVVJMIG9mIHRoZSBkaXJlY3RvcnkgYXMgZXhwb3J0ZWQgYnkgSFRUUC4gU2V0IG9mIGFkIGhvYyBmZWVkIGNvbmZpZ3Mgd2lsbCBiZSBnZW5lcmF0ZWQgaW4gdGhlIGltYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgYmFzZSBVUkwgb2YgdGhlIHNlcnZlciBhbmQgbG9jYXRpb24gd2l0aGluCisgICAgICAgICAgICAgICAgICAgIHRoZSBkb2N1bWVudC1yb290IHRoYXQgcHJvdmlkZXMgdGhlIG1ldGFkYXRhIGFuZAorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyByZXF1aXJlZCBieSBPUEtHIHRvIHN1cHBvcnQgcnVudGltZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQgb2YgSVBLIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2V0IHRoaXMgdmFyaWFibGUgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGRUVEX0RFUExPWURJUl9CQVNFX1VSSSA9ICJodHRwOi8vMTkyLjE2OC43LjEvQk9BUkQtZGlyIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBhc3N1bWVzIHlvdSBhcmUgc2VydmluZyB5b3VyIHBhY2thZ2VzIG92ZXIKKyAgICAgICAgICAgICAgICAgICAgSFRUUCBhbmQgeW91ciBkYXRhYmFzZXMgYXJlIGxvY2F0ZWQgaW4gYSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPkJPQVJELWRpcjwvZmlsZW5hbWU+LCB3aGljaCBpcyB1bmRlcm5lYXRoCisgICAgICAgICAgICAgICAgICAgIHlvdXIgSFRUUCBzZXJ2ZXIncyBkb2N1bWVudC1yb290LgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGdlbmVyYXRlcyBhIHNldAorICAgICAgICAgICAgICAgICAgICBvZiBjb25maWd1cmF0aW9uIGZpbGVzIGZvciB5b3UgaW4geW91ciB0YXJnZXQgdGhhdCB3b3JrCisgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGZlZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRklMRVMnPjxnbG9zc3Rlcm0+RklMRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEZJTEVTW2RvY10gPSAiVGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgb3IgZmlsZXMgdGhhdCBhcmUgcGxhY2VkIGluIHBhY2thZ2VzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIG9yIGZpbGVzIHRoYXQgYXJlIHBsYWNlZCBpbiBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gdXNlIHRoZSA8ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSwgcHJvdmlkZSBhCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbmFtZSBvdmVycmlkZSB0aGF0IGlkZW50aWZpZXMgdGhlIHJlc3VsdGluZyBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGVuLCBwcm92aWRlIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgZmlsZXMgb3IgcGF0aHMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBpZGVudGlmeSB0aGUgZmlsZXMgeW91IHdhbnQgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0aW5nIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU18ke1BOfSArPSAiJHtiaW5kaXJ9L215ZGlyMS8gJHtiaW5kaXJ9L215ZGlyMi9teWZpbGUiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzcGVjaWZ5aW5nIHBhdGhzIGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+IHZhcmlhYmxlLCBpdCBpcyBnb29kIHByYWN0aWNlCisgICAgICAgICAgICAgICAgICAgIHRvIHVzZSBhcHByb3ByaWF0ZSBwYXRoIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHVzZSA8ZmlsZW5hbWU+JHtzeXNjb25mZGlyfTwvZmlsZW5hbWU+IHJhdGhlcgorICAgICAgICAgICAgICAgICAgICB0aGFuIDxmaWxlbmFtZT4vZXRjPC9maWxlbmFtZT4sIG9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2JpbmRpcn08L2ZpbGVuYW1lPiByYXRoZXIgdGhhbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9iaW48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGEgbGlzdCBvZiB0aGVzZSB2YXJpYWJsZXMgYXQgdGhlIHRvcCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHNvbWUgb2YgdGhlIGZpbGVzIHlvdSBwcm92aWRlIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGFyZSBlZGl0YWJsZSBhbmQgeW91CisgICAgICAgICAgICAgICAgICAgIGtub3cgdGhleSBzaG91bGQgbm90IGJlIG92ZXJ3cml0dGVuIGR1cmluZyB0aGUgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICB1cGRhdGUgcHJvY2VzcyBieSB0aGUgUGFja2FnZSBNYW5hZ2VtZW50IFN5c3RlbSAoUE1TKSwgeW91CisgICAgICAgICAgICAgICAgICAgIGNhbiBpZGVudGlmeSB0aGVzZSBmaWxlcyBzbyB0aGF0IHRoZSBQTVMgd2lsbCBub3QKKyAgICAgICAgICAgICAgICAgICAgb3ZlcndyaXRlIHRoZW0uCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNPTkZGSUxFUyc+PGZpbGVuYW1lPkNPTkZGSUxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGlkZW50aWZ5IHRoZXNlIGZpbGVzIHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBQTVMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1GSUxFU19TT0xJQlNERVYnPjxnbG9zc3Rlcm0+RklMRVNfU09MSUJTREVWPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBGSUxFU19TT0xJQlNERVZbZG9jXSA9ICJEZWZpbmVzIHRoZSBmdWxsIHBhdGggbmFtZSBvZiB0aGUgZGV2ZWxvcG1lbnQgc3ltYm9saWMgbGluayAoc3ltbGluaykgZm9yIHNoYXJlZCBsaWJyYXJpZXMgb24gdGhlIHRhcmdldCBwbGF0Zm9ybS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBmaWxlIHNwZWNpZmljYXRpb24gdG8gbWF0Y2gKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNPTElCU0RFVic+PGZpbGVuYW1lPlNPTElCU0RFVjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIDxmaWxlbmFtZT5GSUxFU19TT0xJQlNERVY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkZWZpbmVzIHRoZSBmdWxsIHBhdGggbmFtZSBvZiB0aGUgZGV2ZWxvcG1lbnQgc3ltYm9saWMgbGluaworICAgICAgICAgICAgICAgICAgICAoc3ltbGluaykgZm9yIHNoYXJlZCBsaWJyYXJpZXMgb24gdGhlIHRhcmdldCBwbGF0Zm9ybS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBzdGF0ZW1lbnQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+IHNob3dzIGhvdyBpdCBpcyBzZXQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRklMRVNfU09MSUJTREVWID89ICIke2Jhc2VfbGliZGlyfS9saWIqJHtTT0xJQlNERVZ9ICR7bGliZGlyfS9saWIqJHtTT0xJQlNERVZ9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRklMRVNFWFRSQVBBVEhTJz48Z2xvc3N0ZXJtPkZJTEVTRVhUUkFQQVRIUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRklMRVNFWFRSQVBBVEhTW2RvY10gPSAiRXh0ZW5kcyB0aGUgc2VhcmNoIHBhdGggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB3aGVuIGxvb2tpbmcgZm9yIGZpbGVzIGFuZCBwYXRjaGVzIGFzIGl0IHByb2Nlc3NlcyByZWNpcGVzIGFuZCBhcHBlbmQgZmlsZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRXh0ZW5kcyB0aGUgc2VhcmNoIHBhdGggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcworICAgICAgICAgICAgICAgICAgICB3aGVuIGxvb2tpbmcgZm9yIGZpbGVzIGFuZCBwYXRjaGVzIGFzIGl0IHByb2Nlc3NlcyByZWNpcGVzCisgICAgICAgICAgICAgICAgICAgIGFuZCBhcHBlbmQgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGRpcmVjdG9yaWVzIEJpdEJha2UgdXNlcyB3aGVuIGl0IHByb2Nlc3NlcworICAgICAgICAgICAgICAgICAgICByZWNpcGVzIGFyZSBpbml0aWFsbHkgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBleHRlbmQgPGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGJ5IHVzaW5nIDxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmVzdCBwcmFjdGljZXMgZGljdGF0ZSB0aGF0IHlvdSBhY2NvbXBsaXNoIHRoaXMgYnkgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+IGZyb20gd2l0aGluIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgYW5kIHRoYXQgeW91IHByZXBlbmQKKyAgICAgICAgICAgICAgICAgICAgcGF0aHMgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhlIGFib3ZlIGV4YW1wbGUsIHRoZSBidWlsZCBzeXN0ZW0gZmlyc3QgbG9va3MgZm9yIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIGluIGEgZGlyZWN0b3J5IHRoYXQgaGFzIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+V2hlbiBleHRlbmRpbmcgPGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgYmUgc3VyZSB0byB1c2UgdGhlIGltbWVkaWF0ZSBleHBhbnNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Oj08L2ZpbGVuYW1lPikgb3BlcmF0b3IuCisgICAgICAgICAgICAgICAgICAgICAgICBJbW1lZGlhdGUgZXhwYW5zaW9uIG1ha2VzIHN1cmUgdGhhdCBCaXRCYWtlIGV2YWx1YXRlcworICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRISVNESVInPjxmaWxlbmFtZT5USElTRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBhdCB0aGUgdGltZSB0aGUgZGlyZWN0aXZlIGlzIGVuY291bnRlcmVkIHJhdGhlciB0aGFuIGF0CisgICAgICAgICAgICAgICAgICAgICAgICBzb21lIGxhdGVyIHRpbWUgd2hlbiBleHBhbnNpb24gbWlnaHQgcmVzdWx0IGluIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gdGhlIGZpbGVzIHlvdSBuZWVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QWxzbywgaW5jbHVkZSB0aGUgdHJhaWxpbmcgc2VwYXJhdGluZyBjb2xvbgorICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyIGlmIHlvdSBhcmUgcHJlcGVuZGluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0cmFpbGluZyBjb2xvbiBjaGFyYWN0ZXIgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBhcmUgZGlyZWN0aW5nIEJpdEJha2UgdG8gZXh0ZW5kIHRoZSBwYXRoIGJ5IHByZXBlbmRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIHRvIHRoZSBzZWFyY2ggcGF0aC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbm90aGVyIGNvbW1vbiB1c2U6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIGJ1aWxkIHN5c3RlbSBleHRlbmRzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT4gdmFyaWFibGUgdG8gaW5jbHVkZSBhCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBuYW1lZCA8ZmlsZW5hbWU+ZmlsZXM8L2ZpbGVuYW1lPiB0aGF0IGlzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgY29ycmVzcG9uZGluZyBhcHBlbmQgZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhIGZpbmFsIGV4YW1wbGUgdGhhdCBzcGVjaWZpY2FsbHkgYWRkcyB0aHJlZSBwYXRoczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAicGF0aF8xOnBhdGhfMjpwYXRoXzM6IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ5IHByZXBlbmRpbmcgcGF0aHMgaW4gPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGVzLCB5b3UgYWxsb3cgbXVsdGlwbGUgYXBwZW5kIGZpbGVzIHRoYXQgcmVzaWRlIGluCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCBsYXllcnMgYnV0IGFyZSB1c2VkIGZvciB0aGUgc2FtZSByZWNpcGUgdG8KKyAgICAgICAgICAgICAgICAgICAgY29ycmVjdGx5IGV4dGVuZCB0aGUgcGF0aC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1GSUxFU09WRVJSSURFUyc+PGdsb3NzdGVybT5GSUxFU09WRVJSSURFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRklMRVNPVkVSUklERVNbZG9jXSA9ICJBIHN1YnNldCBvZiBPVkVSUklERVMgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBmb3IgY3JlYXRpbmcgRklMRVNQQVRILiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgc3Vic2V0IG9mIDxsaW5rIGxpbmtlbmQ9J3Zhci1PVkVSUklERVMnPjxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBmb3IgY3JlYXRpbmcKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IG92ZXJyaWRlcyBhcmUgaGFuZGxlZAorICAgICAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyc+Qml0QmFrZSBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5GSUxFU09WRVJSSURFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIGRlZmluZWQgYXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRklMRVNPVkVSUklERVMgPSAiJHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfToke01BQ0hJTkVPVkVSUklERVN9OiR7RElTVFJPT1ZFUlJJREVTfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgRG8gbm90IGhhbmQtZWRpdCB0aGUgPGZpbGVuYW1lPkZJTEVTT1ZFUlJJREVTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlcyBtYXRjaCB1cCB3aXRoIGV4cGVjdGVkIG92ZXJyaWRlcyBhbmQgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIGluIGFuIGV4cGVjdGVkIG1hbm5lciBieSB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRklMRVNQQVRIJz48Z2xvc3N0ZXJtPkZJTEVTUEFUSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRklMRVNQQVRIW2RvY10gPSAiVGhlIGRlZmF1bHQgc2V0IG9mIGRpcmVjdG9yaWVzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgd2hlbiBzZWFyY2hpbmcgZm9yIHBhdGNoZXMgYW5kIGZpbGVzLiBJdCBpcyBkZWZpbmVkIGluIHRoZSBiYXNlLmJiY2xhc3MgY2xhc3MgZm91bmQgaW4gbWV0YS9jbGFzc2VzIGluIHRoZSBTb3VyY2UgRGlyZWN0b3J5LiBEbyBub3QgaGFuZC1lZGl0IHRoZSBGSUxFU1BBVEggdmFyaWFibGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgc2V0IG9mIGRpcmVjdG9yaWVzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHVzZXMgd2hlbiBzZWFyY2hpbmcgZm9yIHBhdGNoZXMgYW5kIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBEdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MsIEJpdEJha2Ugc2VhcmNoZXMgZWFjaCBkaXJlY3RvcnkgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+IGluIHRoZSBzcGVjaWZpZWQgb3JkZXIgd2hlbgorICAgICAgICAgICAgICAgICAgICBsb29raW5nIGZvciBmaWxlcyBhbmQgcGF0Y2hlcyBzcGVjaWZpZWQgYnkgZWFjaAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+IFVSSSBpbiBhIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSA8ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaXMgZGVmaW5lZCBpbiB0aGUgPGZpbGVuYW1lPmJhc2UuYmJjbGFzczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGZvdW5kIGluIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXM8L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZJTEVTUEFUSCA9ICIke0BiYXNlX3NldF9maWxlc3BhdGgoWyIke0ZJTEVfRElSTkFNRX0vJHtCUH0iLCBcCisgICAgICAgICIke0ZJTEVfRElSTkFNRX0vJHtCUE59IiwgIiR7RklMRV9ESVJOQU1FfS9maWxlcyJdLCBkKX0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBEbyBub3QgaGFuZC1lZGl0IHRoZSA8ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdGhlIGJ1aWxkIHN5c3RlbSB0byBsb29rIGluIGRpcmVjdG9yaWVzCisgICAgICAgICAgICAgICAgICAgICAgICBvdGhlciB0aGFuIHRoZSBkZWZhdWx0cywgZXh0ZW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTRVhUUkFQQVRIUyc+PGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgQmUgYXdhcmUgdGhhdCB0aGUgZGVmYXVsdCA8ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgZG8gbm90IG1hcCB0byBkaXJlY3RvcmllcyBpbiBjdXN0b20gbGF5ZXJzCisgICAgICAgICAgICAgICAgICAgIHdoZXJlIGFwcGVuZCBmaWxlcyAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICBhcmUgdXNlZC4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdGhlIGJ1aWxkIHN5c3RlbSB0byBmaW5kIHBhdGNoZXMgb3IgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCByZXNpZGUgd2l0aCB5b3VyIGFwcGVuZCBmaWxlcywgeW91IG5lZWQgdG8gZXh0ZW5kCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT4gdmFyaWFibGUgYnkgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFU0VYVFJBUEFUSFMnPjxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRklMRVNZU1RFTV9QRVJNU19UQUJMRVMnPjxnbG9zc3Rlcm0+RklMRVNZU1RFTV9QRVJNU19UQUJMRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEZJTEVTWVNURU1fUEVSTVNfVEFCTEVTW2RvY10gPSAiQWxsb3dzIHlvdSB0byBkZWZpbmUgeW91ciBvd24gZmlsZSBwZXJtaXNzaW9ucyBzZXR0aW5ncyB0YWJsZSBhcyBwYXJ0IG9mIHlvdXIgY29uZmlndXJhdGlvbiBmb3IgdGhlIHBhY2thZ2luZyBwcm9jZXNzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEFsbG93cyB5b3UgdG8gZGVmaW5lIHlvdXIgb3duIGZpbGUgcGVybWlzc2lvbnMgc2V0dGluZ3MgdGFibGUgYXMgcGFydCBvZgorICAgICAgICAgICAgICAgICAgICB5b3VyIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBwYWNrYWdpbmcgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IG5lZWQgYSBjb25zaXN0ZW50IHNldCBvZiBjdXN0b20gcGVybWlzc2lvbnMgZm9yCisgICAgICAgICAgICAgICAgICAgIGEgc2V0IG9mIGdyb3VwcyBhbmQgdXNlcnMgYWNyb3NzIGFuIGVudGlyZSB3b3JrIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGJlc3QgdG8gZG8gdGhpcyBpbiB0aGUgcGFja2FnZXMgdGhlbXNlbHZlcyBidXQgdGhpcyBpcyBub3QgYWx3YXlzCisgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRoZSA8ZmlsZW5hbWU+ZnMtcGVybXMudHh0PC9maWxlbmFtZT4sIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIGlzIGxvY2F0ZWQgaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2ZpbGVzPC9maWxlbmFtZT4gZm9sZGVyIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBjcmVhdGUgeW91ciBvd24gZmlsZSBwZXJtaXNzaW9ucyBzZXR0aW5nIHRhYmxlLCB5b3Ugc2hvdWxkIHBsYWNlIGl0IGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIgb3IgdGhlIGRpc3RybydzIGxheWVyLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgZGVmaW5lIHRoZSA8ZmlsZW5hbWU+RklMRVNZU1RFTV9QRVJNU19UQUJMRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGlzIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LCB0bworICAgICAgICAgICAgICAgICAgICBwb2ludCB0byB5b3VyIGN1c3RvbSA8ZmlsZW5hbWU+ZnMtcGVybXMudHh0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSBtb3JlIHRoYW4gYSBzaW5nbGUgZmlsZSBwZXJtaXNzaW9ucyBzZXR0aW5nIHRhYmxlLgorICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aHMgeW91IHNwZWNpZnkgdG8gdGhlc2UgZmlsZXMgbXVzdCBiZSBkZWZpbmVkIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGd1aWRhbmNlIG9uIGhvdyB0byBjcmVhdGUgeW91ciBvd24gZmlsZSBwZXJtaXNzaW9ucyBzZXR0aW5ncyB0YWJsZSBmaWxlLAorICAgICAgICAgICAgICAgICAgICBleGFtaW5lIHRoZSBleGlzdGluZyA8ZmlsZW5hbWU+ZnMtcGVybXMudHh0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRk9OVF9FWFRSQV9SREVQRU5EUyc+PGdsb3NzdGVybT5GT05UX0VYVFJBX1JERVBFTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBGT05UX0VYVFJBX1JERVBFTkRTW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgZm9udGNhY2hlIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBydW50aW1lIGRlcGVuZGVuY2llcyBmb3IgZm9udCBwYWNrYWdlcy4gVGhpcyB2YXJpYWJsZSBkZWZhdWx0cyB0byAnZm9udGNvbmZpZy11dGlscycuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1mb250Y2FjaGUnPjxmaWxlbmFtZT5mb250Y2FjaGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBydW50aW1lIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICBmb3IgZm9udCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5GT05UX0VYVFJBX1JERVBFTkRTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvICJmb250Y29uZmlnLXV0aWxzIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1GT05UX1BBQ0tBR0VTJz48Z2xvc3N0ZXJtPkZPTlRfUEFDS0FHRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEZPTlRfUEFDS0FHRVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBmb250Y2FjaGUgY2xhc3MsIHRoaXMgdmFyaWFibGUgaWRlbnRpZmllcyBwYWNrYWdlcyBjb250YWluaW5nIGZvbnQgZmlsZXMgdGhhdCBuZWVkIHRvIGJlIGNhY2hlZCBieSBGb250Y29uZmlnLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZm9udGNhY2hlJz48ZmlsZW5hbWU+Zm9udGNhY2hlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIGlkZW50aWZpZXMgcGFja2FnZXMgY29udGFpbmluZyBmb250CisgICAgICAgICAgICAgICAgICAgIGZpbGVzIHRoYXQgbmVlZCB0byBiZSBjYWNoZWQgYnkgRm9udGNvbmZpZy4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5mb250Y2FjaGU8L2ZpbGVuYW1lPiBjbGFzcyBhc3N1bWVzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgZm9udHMgYXJlIGluIHRoZSByZWNpcGUncyBtYWluIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBVc2UgdGhpcyB2YXJpYWJsZSBpZiBmb250cyB5b3UgbmVlZCBhcmUgaW4gYSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIG90aGVyIHRoYW4gdGhhdCBtYWluIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRlVMTF9PUFRJTUlaQVRJT04nPjxnbG9zc3Rlcm0+RlVMTF9PUFRJTUlaQVRJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEZVTExfT1BUSU1JWkFUSU9OW2RvY109ICJUaGUgb3B0aW9ucyB0byBwYXNzIGluIFRBUkdFVF9DRkxBR1MgYW5kIENGTEFHUyB3aGVuIGNvbXBpbGluZyBhbiBvcHRpbWl6ZWQgc3lzdGVtLiBUaGlzIHZhcmlhYmxlIGRlZmF1bHRzIHRvICctZmV4cGVuc2l2ZS1vcHRpbWl6YXRpb25zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1mcmVuYW1lLXJlZ2lzdGVycyAtTzInLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBvcHRpb25zIHRvIHBhc3MgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfQ0ZMQUdTJz5UQVJHRVRfQ0ZMQUdTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUNGTEFHUyc+Q0ZMQUdTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHdoZW4gY29tcGlsaW5nIGFuIG9wdGltaXplZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgZGVmYXVsdHMgdG8KKyAgICAgICAgICAgICAgICAgICAgIi1PMiAtcGlwZSAke0RFQlVHX0ZMQUdTfSIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1nJz48dGl0bGU+RzwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1HREInPjxnbG9zc3Rlcm0+R0RCPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBHREJbZG9jXSA9ICJUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuIHRoZSBHTlUgRGVidWdnZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biB0aGUgR05VIERlYnVnZ2VyLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUdJVERJUic+PGdsb3NzdGVybT5HSVRESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEdJVERJUltkb2NdID0gIlRoZSBkaXJlY3Rvcnkgd2hlcmUgR2l0IGNsb25lcyB3aWxsIGJlIHN0b3JlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIGEgbG9jYWwgY29weSBvZiBhIEdpdCByZXBvc2l0b3J5CisgICAgICAgICAgICAgICAgICAgIGlzIHN0b3JlZCB3aGVuIGl0IGlzIGNsb25lZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1HTElCQ19HRU5FUkFURV9MT0NBTEVTJz48Z2xvc3N0ZXJtPkdMSUJDX0dFTkVSQVRFX0xPQ0FMRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEdMSUJDX0dFTkVSQVRFX0xPQ0FMRVNbZG9jXT0gIlNwZWNpZmllcyB0aGUgbGlzdCBvZiBHTElCQyBsb2NhbGVzIHRvIGdlbmVyYXRlIHNob3VsZCB5b3Ugbm90IHdpc2ggZ2VuZXJhdGUgYWxsIExJQkMgbG9jYWxzLCB3aGljaCBjYW4gYmUgdGltZSBjb25zdW1pbmcuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBsaXN0IG9mIEdMSUJDIGxvY2FsZXMgdG8gZ2VuZXJhdGUgc2hvdWxkIHlvdQorICAgICAgICAgICAgICAgICAgICBub3Qgd2lzaCBnZW5lcmF0ZSBhbGwgTElCQyBsb2NhbHMsIHdoaWNoIGNhbiBiZSB0aW1lCisgICAgICAgICAgICAgICAgICAgIGNvbnN1bWluZy4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugc3BlY2lmaWNhbGx5IHJlbW92ZSB0aGUgbG9jYWxlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZW5fVVMuVVRGLTg8L2ZpbGVuYW1lPiwgeW91IG11c3Qgc2V0CisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfTElOR1VBUyc+PGZpbGVuYW1lPklNQUdFX0xJTkdVQVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlbHkuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgPGZpbGVuYW1lPkdMSUJDX0dFTkVSQVRFX0xPQ0FMRVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgYWxsIGxvY2FsZXMgYXJlIGdlbmVyYXRlZC4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgR0xJQkNfR0VORVJBVEVfTE9DQUxFUyA9ICJlbl9HQi5VVEYtOCBlbl9VUy5VVEYtOCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUdST1VQQUREX1BBUkFNJz48Z2xvc3N0ZXJtPkdST1VQQUREX1BBUkFNPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBHUk9VUEFERF9QQVJBTVtkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIHVzZXJhZGQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGZvciBhIHBhY2thZ2Ugd2hhdCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBwYXNzZWQgdG8gdGhlIGdyb3VwYWRkIGNvbW1hbmQgaWYgeW91IHdpc2ggdG8gYWRkIGEgZ3JvdXAgdG8gdGhlIHN5c3RlbSB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXVzZXJhZGQnPjxmaWxlbmFtZT51c2VyYWRkPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBmb3IgYSBwYWNrYWdlIHdoYXQgcGFyYW1ldGVycyBzaG91bGQgYmUgcGFzc2VkCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSA8ZmlsZW5hbWU+Z3JvdXBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIGlmIHlvdSB3aXNoIHRvIGFkZCBhIGdyb3VwIHRvIHRoZSBzeXN0ZW0gd2hlbiB0aGUgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBpcyBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBmcm9tIHRoZSA8ZmlsZW5hbWU+ZGJ1czwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBHUk9VUEFERF9QQVJBTV8ke1BOfSA9ICItciBuZXRkZXYiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBzdGFuZGFyZCBMaW51eCBzaGVsbCBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ncm91cGFkZDwvZmlsZW5hbWU+LCBzZWUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2xpbnV4LmRpZS5uZXQvbWFuLzgvZ3JvdXBhZGQnPjwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUdST1VQTUVNU19QQVJBTSc+PGdsb3NzdGVybT5HUk9VUE1FTVNfUEFSQU08L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEdST1VQTUVNU19QQVJBTVtkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIHVzZXJhZGQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGZvciBhIHBhY2thZ2Ugd2hhdCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBwYXNzZWQgdG8gdGhlIGdyb3VwbWVtcyBjb21tYW5kIGlmIHlvdSB3aXNoIHRvIG1vZGlmeSB0aGUgbWVtYmVycyBvZiBhIGdyb3VwIHdoZW4gdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtdXNlcmFkZCc+PGZpbGVuYW1lPnVzZXJhZGQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIGZvciBhIHBhY2thZ2Ugd2hhdCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBwYXNzZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIDxmaWxlbmFtZT5ncm91cG1lbXM8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIGlmIHlvdSB3aXNoIHRvIG1vZGlmeSB0aGUgbWVtYmVycyBvZiBhIGdyb3VwIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgaXMgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIHN0YW5kYXJkIExpbnV4IHNoZWxsIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdyb3VwbWVtczwvZmlsZW5hbWU+LCBzZWUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2xpbnV4LmRpZS5uZXQvbWFuLzgvZ3JvdXBtZW1zJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1HUlVCX0dGWFNFUklBTCc+PGdsb3NzdGVybT5HUlVCX0dGWFNFUklBTDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgR1JVQl9HRlhTRVJJQUxbZG9jXSA9ICJDb25maWd1cmVzIHRoZSBHTlUgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyIChHUlVCKSB0byBoYXZlIGdyYXBoaWNzIGFuZCBzZXJpYWwgaW4gdGhlIGJvb3QgbWVudS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBDb25maWd1cmVzIHRoZSBHTlUgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyIChHUlVCKSB0byBoYXZlCisgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzIGFuZCBzZXJpYWwgaW4gdGhlIGJvb3QgbWVudS4KKyAgICAgICAgICAgICAgICAgICAgU2V0IHRoaXMgdmFyaWFibGUgdG8gIjEiIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBvciBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIHRvIGVuYWJsZSBncmFwaGljcyBhbmQgc2VyaWFsCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBtZW51LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWdydWItZWZpJz48ZmlsZW5hbWU+Z3J1Yi1lZmk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1HUlVCX09QVFMnPjxnbG9zc3Rlcm0+R1JVQl9PUFRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBHUlVCX09QVFNbZG9jXSA9ICJBZGRpdGlvbmFsIG9wdGlvbnMgdG8gYWRkIHRvIHRoZSBHTlUgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyIChHUlVCKSBjb25maWd1cmF0aW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWwgb3B0aW9ucyB0byBhZGQgdG8gdGhlIEdOVSBHUmFuZCBVbmlmaWVkCisgICAgICAgICAgICAgICAgICAgIEJvb3Rsb2FkZXIgKEdSVUIpIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFVzZSBhIHNlbWktY29sb24gY2hhcmFjdGVyICg8ZmlsZW5hbWU+OzwvZmlsZW5hbWU+KSB0bworICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZSBtdWx0aXBsZSBvcHRpb25zLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPkdSVUJfT1BUUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIG9wdGlvbmFsLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWdydWItZWZpJz48ZmlsZW5hbWU+Z3J1Yi1lZmk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1HUlVCX1RJTUVPVVQnPjxnbG9zc3Rlcm0+R1JVQl9USU1FT1VUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBHUlVCX1RJTUVPVVRbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHRpbWVvdXQgYmVmb3JlIGV4ZWN1dGluZyB0aGUgZGVmYXVsdCBMQUJFTCBpbiB0aGUgR05VIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlciAoR1JVQikuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSB0aW1lb3V0IGJlZm9yZSBleGVjdXRpbmcgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxBQkVMPC9maWxlbmFtZT4gaW4gdGhlIEdOVSBHUmFuZCBVbmlmaWVkCisgICAgICAgICAgICAgICAgICAgIEJvb3Rsb2FkZXIgKEdSVUIpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPkdSVUJfVElNRU9VVDwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIG9wdGlvbmFsLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWdydWItZWZpJz48ZmlsZW5hbWU+Z3J1Yi1lZmk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1HVEtJTU1PRFVMRVNfUEFDS0FHRVMnPjxnbG9zc3Rlcm0+R1RLSU1NT0RVTEVTX1BBQ0tBR0VTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBHVEtJTU1PRFVMRVNfUEFDS0FHRVNbZG9jXSA9ICJGb3IgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlIGd0ay1pbW1vZHVsZXMtY2FjaGUgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBwYWNrYWdlcyB0aGF0IGNvbnRhaW4gdGhlIEdUSysgaW5wdXQgbWV0aG9kIG1vZHVsZXMgYmVpbmcgaW5zdGFsbGVkIHdoZW4gdGhlIG1vZHVsZXMgYXJlIGluIHBhY2thZ2VzIG90aGVyIHRoYW4gdGhlIG1haW4gcGFja2FnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWd0ay1pbW1vZHVsZXMtY2FjaGUnPjxmaWxlbmFtZT5ndGstaW1tb2R1bGVzLWNhY2hlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgcGFja2FnZXMgdGhhdCBjb250YWluIHRoZQorICAgICAgICAgICAgICAgICAgICBHVEsrIGlucHV0IG1ldGhvZCBtb2R1bGVzIGJlaW5nIGluc3RhbGxlZCB3aGVuIHRoZSBtb2R1bGVzCisgICAgICAgICAgICAgICAgICAgIGFyZSBpbiBwYWNrYWdlcyBvdGhlciB0aGFuIHRoZSBtYWluIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItR1VNTUlCT09UX0NGRyc+PGdsb3NzdGVybT5HVU1NSUJPT1RfQ0ZHPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBHVU1NSUJPT1RfQ0ZHW2RvY10gPSAiV2hlbiBFRklfUFJPVklERVIgaXMgc2V0IHRvICJndW1taWJvb3QiLCB0aGUgR1VNTUlCT09UX0NGRyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB0aGF0IHNob3VsZCBiZSB1c2VkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVGSV9QUk9WSURFUic+PGZpbGVuYW1lPkVGSV9QUk9WSURFUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gImd1bW1pYm9vdCIsIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+R1VNTUlCT09UX0NGRzwvZmlsZW5hbWU+IHZhcmlhYmxlIHNwZWNpZmllcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIHRoYXQgc2hvdWxkIGJlIHVzZWQuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ndW1taWJvb3QnPjxmaWxlbmFtZT5ndW1taWJvb3Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3Mgc2V0cyB0aGUgPGZpbGVuYW1lPkdVTU1JQk9PVF9DRkc8L2ZpbGVuYW1lPiBhcworICAgICAgICAgICAgICAgICAgICBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEdVTU1JQk9PVF9DRkcgPz0gIiR7PGxpbmsgbGlua2VuZD0ndmFyLVMnPlM8L2xpbms+fS9sb2FkZXIuY29uZiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gR3VtbWlib290LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9ndW1taWJvb3QvJz5HdW1taWJvb3QgZG9jdW1lbnRhdGlvbjwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUdVTU1JQk9PVF9FTlRSSUVTJz48Z2xvc3N0ZXJtPkdVTU1JQk9PVF9FTlRSSUVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBHVU1NSUJPT1RfRU5UUklFU1tkb2NdID0gIldoZW4gRUZJX1BST1ZJREVSIGlzIHNldCB0byAiZ3VtbWlib290IiwgdGhlIEdVTU1JQk9PVF9FTlRSSUVTIHZhcmlhYmxlIHNwZWNpZmllcyBhIGxpc3Qgb2YgZW50cnkgZmlsZXMgKCouY29uZikgdG8gYmUgaW5zdGFsbGVkIGNvbnRhaW5pbmcgb25lIGJvb3QgZW50cnkgcGVyIGZpbGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRUZJX1BST1ZJREVSJz48ZmlsZW5hbWU+RUZJX1BST1ZJREVSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byAiZ3VtbWlib290IiwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5HVU1NSUJPT1RfRU5UUklFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIHNwZWNpZmllcworICAgICAgICAgICAgICAgICAgICBhIGxpc3Qgb2YgZW50cnkgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4qLmNvbmY8L2ZpbGVuYW1lPikgdG8gYmUgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmcgb25lIGJvb3QgZW50cnkgcGVyIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ndW1taWJvb3QnPjxmaWxlbmFtZT5ndW1taWJvb3Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3Mgc2V0cyB0aGUgPGZpbGVuYW1lPkdVTU1JQk9PVF9FTlRSSUVTPC9maWxlbmFtZT4gYXMKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBHVU1NSUJPT1RfRU5UUklFUyA/PSAiIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBHdW1taWJvb3QsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2ZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL2d1bW1pYm9vdC8nPkd1bW1pYm9vdCBkb2N1bWVudGF0aW9uPC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItR1VNTUlCT09UX1RJTUVPVVQnPjxnbG9zc3Rlcm0+R1VNTUlCT09UX1RJTUVPVVQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEdVTU1JQk9PVF9USU1FT1VUW2RvY10gPSAiV2hlbiBFRklfUFJPVklERVIgaXMgc2V0IHRvICJndW1taWJvb3QiLCB0aGUgR1VNTUlCT09UX1RJTUVPVVQgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBib290IG1lbnUgdGltZW91dCBpbiBzZWNvbmRzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVGSV9QUk9WSURFUic+PGZpbGVuYW1lPkVGSV9QUk9WSURFUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gImd1bW1pYm9vdCIsIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+R1VNTUlCT09UX1RJTUVPVVQ8L2ZpbGVuYW1lPiB2YXJpYWJsZSBzcGVjaWZpZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIGJvb3QgbWVudSB0aW1lb3V0IGluIHNlY29uZHMuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ndW1taWJvb3QnPjxmaWxlbmFtZT5ndW1taWJvb3Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3Mgc2V0cyB0aGUgPGZpbGVuYW1lPkdVTU1JQk9PVF9USU1FT1VUPC9maWxlbmFtZT4gYXMKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBHVU1NSUJPT1RfVElNRU9VVCA/PSAiMTAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIEd1bW1pYm9vdCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvZ3VtbWlib290Lyc+R3VtbWlib290IGRvY3VtZW50YXRpb248L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktaCc+PHRpdGxlPkg8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSE9NRVBBR0UnPjxnbG9zc3Rlcm0+SE9NRVBBR0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEhPTUVQQUdFW2RvY10gPSAiV2Vic2l0ZSB3aGVyZSBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzb2Z0d2FyZSB0aGUgcmVjaXBlIGlzIGJ1aWxkaW5nIGNhbiBiZSBmb3VuZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXZWJzaXRlIHdoZXJlIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNvZnR3YXJlIHRoZSByZWNpcGUgaXMgYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgY2FuIGJlIGZvdW5kLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUhPU1RfQVJDSCc+PGdsb3NzdGVybT5IT1NUX0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEhPU1RfQVJDSFtkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLiBOb3JtYWxseSBzYW1lIGFzIHRoZSBUQVJHRVRfQVJDSC4iCisKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCB3aGljaCBpcyBub3JtYWxseQorICAgICAgICAgICAgICAgICAgICB0aGUgc2FtZSBhcworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX0FSQ0gnPjxmaWxlbmFtZT5UQVJHRVRfQVJDSDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc3VwcG9ydHMgbWFueQorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmVzLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgbGlzdCBvZiBhcmNoaXRlY3R1cmVzIHN1cHBvcnRlZC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBsaXN0IGlzIGJ5IG5vIG1lYW5zIGNvbXBsZXRlIGFzIHRoZSBhcmNoaXRlY3R1cmUKKyAgICAgICAgICAgICAgICAgICAgaXMgY29uZmlndXJhYmxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGFybQorICAgICBpNTg2CisgICAgIHg4Nl82NAorICAgICBwb3dlcnBjCisgICAgIHBvd2VycGM2NAorICAgICBtaXBzCisgICAgIG1pcHNlbAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSE9TVF9DQ19BUkNIJz48Z2xvc3N0ZXJtPkhPU1RfQ0NfQVJDSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSE9TVF9DQ19BUkNIW2RvY10gPSAiVGhlIG5hbWUgb2YgdGhlIGhvc3QgYXJjaGl0ZWN0dXJlLiBOb3JtYWxseSBzYW1lIGFzIHRoZSBUQVJHRVRfQ0NfQVJDSC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbXBpbGVyIGZsYWdzIHRoYXQgYXJlCisgICAgICAgICAgICAgICAgICAgIHBhc3NlZCB0byB0aGUgQyBjb21waWxlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBpbml0aWFsaXphdGlvbiBmb3IgPGZpbGVuYW1lPkhPU1RfQ0NfQVJDSDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmllcyBkZXBlbmRpbmcgb24gd2hhdCBpcyBiZWluZyBidWlsdDoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX0NDX0FSQ0gnPjxmaWxlbmFtZT5UQVJHRVRfQ0NfQVJDSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QlVJTERfQ0NfQVJDSDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBidWlsZGluZyBmb3IgdGhlIGJ1aWxkIGhvc3QgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bmF0aXZlPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJVSUxEU0RLX0NDX0FSQ0g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIGFuIFNESyAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSE9TVF9PUyc+PGdsb3NzdGVybT5IT1NUX09TPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBIT1NUX09TW2RvY10gPSAiVGhlIG5hbWUgb2YgdGhlIHRhcmdldCBvcGVyYXRpbmcgc3lzdGVtLiBOb3JtYWxseSB0aGUgc2FtZSBhcyB0aGUgVEFSR0VUX09TLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgdGFyZ2V0IG9wZXJhdGluZyBzeXN0ZW0sIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIGlzIG5vcm1hbGx5IHRoZSBzYW1lIGFzIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX09TJz48ZmlsZW5hbWU+VEFSR0VUX09TPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgY2FuIGJlIHNldCB0byAibGludXgiIGZvciA8ZmlsZW5hbWU+Z2xpYmM8L2ZpbGVuYW1lPi1iYXNlZCBzeXN0ZW1zIGFuZAorICAgICAgICAgICAgICAgICAgICB0byAibGludXgtdWNsaWJjIiBmb3IgPGZpbGVuYW1lPnVjbGliYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBGb3IgQVJNL0VBQkkgdGFyZ2V0cywgdGhlcmUgYXJlIGFsc28gImxpbnV4LWdudWVhYmkiIGFuZAorICAgICAgICAgICAgICAgICAgICAibGludXgtdWNsaWJjLWdudWVhYmkiIHZhbHVlcyBwb3NzaWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1IT1NUX1BSRUZJWCc+PGdsb3NzdGVybT5IT1NUX1BSRUZJWDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSE9TVF9QUkVGSVhbZG9jXSA9ICJUaGUgcHJlZml4IGZvciB0aGUgY3Jvc3MgY29tcGlsZSB0b29sY2hhaW4uIE5vcm1hbGx5IHNhbWUgYXMgdGhlIFRBUkdFVF9QUkVGSVguIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwcmVmaXggZm9yIHRoZSBjcm9zcy1jb21waWxlIHRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkhPU1RfUFJFRklYPC9maWxlbmFtZT4gaXMgbm9ybWFsbHkgdGhlIHNhbWUgYXMKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9QUkVGSVgnPjxmaWxlbmFtZT5UQVJHRVRfUFJFRklYPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUhPU1RfU1lTJz48Z2xvc3N0ZXJtPkhPU1RfU1lTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBIT1NUX1NZU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgc3lzdGVtLCBpbmNsdWRpbmcgdGhlIGFyY2hpdGVjdHVyZSBhbmQgdGhlIG9wZXJhdGluZyBzeXN0ZW0sIGZvciB3aXRoIHRoZSBidWlsZCBpcyBvY2N1cnJpbmcgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgcmVjaXBlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgc3lzdGVtLCBpbmNsdWRpbmcgdGhlIGFyY2hpdGVjdHVyZSBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGluZyBzeXN0ZW0sIGZvciB3aGljaCB0aGUgYnVpbGQgaXMgb2NjdXJyaW5nCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseSBzZXRzIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYmFzZWQgb24KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUhPU1RfQVJDSCc+PGZpbGVuYW1lPkhPU1RfQVJDSDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUhPU1RfVkVORE9SJz48ZmlsZW5hbWU+SE9TVF9WRU5ET1I8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSE9TVF9PUyc+PGZpbGVuYW1lPkhPU1RfT1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgbmVlZCB0byBzZXQgdGhlIHZhcmlhYmxlIHlvdXJzZWxmLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbnNpZGVyIHRoZXNlIHR3byBleGFtcGxlczoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5HaXZlbiBhIG5hdGl2ZSByZWNpcGUgb24gYSAzMi1iaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ODYgbWFjaGluZSBydW5uaW5nIExpbnV4LCB0aGUgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaTY4Ni1saW51eCIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R2l2ZW4gYSByZWNpcGUgYmVpbmcgYnVpbHQgZm9yIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXR0bGUtZW5kaWFuIE1JUFMgdGFyZ2V0IHJ1bm5pbmcgTGludXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHZhbHVlIG1pZ2h0IGJlICJtaXBzZWwtbGludXgiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1IT1NUX1ZFTkRPUic+PGdsb3NzdGVybT5IT1NUX1ZFTkRPUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSE9TVF9WRU5ET1JbZG9jXSA9ICJUaGUgbmFtZSBvZiB0aGUgdmVuZG9yLiBOb3JtYWxseSBzYW1lIGFzIHRoZSBUQVJHRVRfVkVORE9SLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgdmVuZG9yLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SE9TVF9WRU5ET1I8L2ZpbGVuYW1lPiBpcyBub3JtYWxseSB0aGUgc2FtZSBhcworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX1BSRUZJWCc+PGZpbGVuYW1lPlRBUkdFVF9WRU5ET1I8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWknPjx0aXRsZT5JPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlDRUNDX0RJU0FCTEVEJz48Z2xvc3N0ZXJtPklDRUNDX0RJU0FCTEVEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJQ0VDQ19ESVNBQkxFRFtkb2NdID0gIkRpc2FibGVzIG9yIGVuYWJsZXMgdGhlIGljZWNjIChJY2VjcmVhbSkgZnVuY3Rpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGlzYWJsZXMgb3IgZW5hYmxlcyB0aGUgPGZpbGVuYW1lPmljZWNjPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgKEljZWNyZWFtKSBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBmdW5jdGlvbiBhbmQgYmVzdCBwcmFjdGljZXMKKyAgICAgICAgICAgICAgICAgICAgZm9yIHVzaW5nIHRoaXMgdmFyaWFibGUsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWljZWNjJz48ZmlsZW5hbWU+aWNlY2MuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvICIxIiBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZGlzYWJsZXMgdGhlIGZ1bmN0aW9uOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElDRUNDX0RJU0FCTEVEID8/PSAiMSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUbyBlbmFibGUgdGhlIGZ1bmN0aW9uLCBzZXQgdGhlIHZhcmlhYmxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSUNFQ0NfRElTQUJMRUQgPSAiIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSUNFQ0NfRU5WX0VYRUMnPjxnbG9zc3Rlcm0+SUNFQ0NfRU5WX0VYRUM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElDRUNDX0VOVl9FWEVDW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBpY2VjYy1jcmVhdGUtZW52IHNjcmlwdCB0aGF0IHlvdSBwcm92aWRlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgPGZpbGVuYW1lPmljZWNjLWNyZWF0ZS1lbnY8L2ZpbGVuYW1lPiBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgdGhhdCB5b3UgcHJvdmlkZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pY2VjYyc+PGZpbGVuYW1lPmljZWNjPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2V0IHRoaXMgdmFyaWFibGUgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3QgcG9pbnQgdG8gYSBzY3JpcHQgdGhhdCB5b3UgcHJvdmlkZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUgZGVmYXVsdCBzY3JpcHQgcHJvdmlkZWQKKyAgICAgICAgICAgICAgICAgICAgYnkgdGhlIDxmaWxlbmFtZT5pY2VjYy1jcmVhdGUtZW52LmJiPC9maWxlbmFtZT4gcmVjaXBlLAorICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBhIG1vZGlmaWVkIHZlcnNpb24gYW5kIG5vdCB0aGUgb25lIHRoYXQgY29tZXMgd2l0aAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aWNlY2M8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JQ0VDQ19QQVJBTExFTF9NQUtFJz48Z2xvc3N0ZXJtPklDRUNDX1BBUkFMTEVMX01BS0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElDRUNDX1BBUkFMTEVMX01BS0VbZG9jXSA9ICJFeHRyYSBvcHRpb25zIHBhc3NlZCB0byB0aGUgbWFrZSBjb21tYW5kIGR1cmluZyB0aGUgZG9fY29tcGlsZSB0YXNrIHRoYXQgc3BlY2lmeSBwYXJhbGxlbCBjb21waWxhdGlvbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBFeHRyYSBvcHRpb25zIHBhc3NlZCB0byB0aGUgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbXBpbGUnPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgdGhhdCBzcGVjaWZ5IHBhcmFsbGVsIGNvbXBpbGF0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIHVzdWFsbHkgdGFrZXMgdGhlIGZvcm0gb2YKKyAgICAgICAgICAgICAgICAgICAgIi1qIDxyZXBsYWNlYWJsZT54PC9yZXBsYWNlYWJsZT4iLCB3aGVyZQorICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+eDwvcmVwbGFjZWFibGU+IHJlcHJlc2VudHMgdGhlIG1heGltdW0KKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHBhcmFsbGVsIHRocmVhZHMgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiBjYW4KKyAgICAgICAgICAgICAgICAgICAgcnVuLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBvcHRpb25zIHBhc3NlZCBhZmZlY3QgYnVpbGRzIG9uIGFsbCBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcyBvbiB0aGUgbmV0d29yaywgd2hpY2ggYXJlIG1hY2hpbmVzIHJ1bm5pbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aWNlY2NkPC9maWxlbmFtZT4gZGFlbW9uLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgZW5hYmxlZCBtYWNoaW5lcyBzdXBwb3J0IG11bHRpcGxlIGNvcmVzLAorICAgICAgICAgICAgICAgICAgICBjb21pbmcgdXAgd2l0aCB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFyYWxsZWwgdGhyZWFkcworICAgICAgICAgICAgICAgICAgICB0aGF0IGdpdmVzIHlvdSB0aGUgYmVzdCBwZXJmb3JtYW5jZSBjb3VsZCB0YWtlIHNvbWUKKyAgICAgICAgICAgICAgICAgICAgZXhwZXJpbWVudGF0aW9uIHNpbmNlIG1hY2hpbmUgc3BlZWQsIG5ldHdvcmsgbGFnLAorICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgbWVtb3J5LCBhbmQgZXhpc3RpbmcgbWFjaGluZSBsb2FkcyBjYW4gYWxsCisgICAgICAgICAgICAgICAgICAgIGFmZmVjdCBidWlsZCB0aW1lLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHVubGlrZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBUkFMTEVMX01BS0UnPjxmaWxlbmFtZT5QQVJBTExFTF9NQUtFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB0aGVyZSBpcyBubyBydWxlLW9mLXRodW1iIGZvciBzZXR0aW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5JQ0VDQ19QQVJBTExFTF9NQUtFPC9maWxlbmFtZT4gdG8gYWNoaWV2ZQorICAgICAgICAgICAgICAgICAgICBvcHRpbWFsIHBlcmZvcm1hbmNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHNldCA8ZmlsZW5hbWU+SUNFQ0NfUEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQgc3lzdGVtIGRvZXMgbm90IHVzZSBpdCAoaS5lLiB0aGUgc3lzdGVtIGRvZXMKKyAgICAgICAgICAgICAgICAgICAgbm90IGRldGVjdCBhbmQgYXNzaWduIHRoZSBudW1iZXIgb2YgY29yZXMgYXMgaXMgZG9uZSB3aXRoCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQVJBTExFTF9NQUtFPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlDRUNDX1BBVEgnPjxnbG9zc3Rlcm0+SUNFQ0NfUEFUSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSUNFQ0NfUEFUSFtkb2NdID0gIlRoZSBsb2NhdGlvbiBvZiB0aGUgaWNlY2MgYmluYXJ5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhdGlvbiBvZiB0aGUgPGZpbGVuYW1lPmljZWNjPC9maWxlbmFtZT4gYmluYXJ5LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBkb2VzIG5vdCBkZWZpbmUKKyAgICAgICAgICAgICAgICAgICAgdGhpcyB2YXJpYWJsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWljZWNjJz48ZmlsZW5hbWU+aWNlY2M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgYXR0ZW1wdHMgdG8gZGVmaW5lIGl0IGJ5IGxvY2F0aW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+IHVzaW5nIDxmaWxlbmFtZT53aGljaDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlDRUNDX1VTRVJfQ0xBU1NfQkwnPjxnbG9zc3Rlcm0+SUNFQ0NfVVNFUl9DTEFTU19CTDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSUNFQ0NfVVNFUl9DTEFTU19CTFtkb2NdID0gIklkZW50aWZpZXMgdXNlciBjbGFzc2VzIHRoYXQgeW91IGRvIG5vdCB3YW50IHRoZSBJY2VjcmVhbSBkaXN0cmlidXRlZCBjb21waWxlIHN1cHBvcnQgdG8gY29uc2lkZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllcyB1c2VyIGNsYXNzZXMgdGhhdCB5b3UgZG8gbm90IHdhbnQgdGhlCisgICAgICAgICAgICAgICAgICAgIEljZWNyZWFtIGRpc3RyaWJ1dGVkIGNvbXBpbGUgc3VwcG9ydCB0byBjb25zaWRlci4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pY2VjYyc+PGZpbGVuYW1lPmljZWNjPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2V0IHRoaXMgdmFyaWFibGUgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IGxpc3QgY2xhc3NlcyB1c2luZyB0aGlzIHZhcmlhYmxlLCB5b3UgYXJlCisgICAgICAgICAgICAgICAgICAgICJibGFja2xpc3RpbmciIHRoZW0gZnJvbSBkaXN0cmlidXRlZCBjb21waWxhdGlvbiBhY3Jvc3MKKyAgICAgICAgICAgICAgICAgICAgcmVtb3RlIGhvc3RzLgorICAgICAgICAgICAgICAgICAgICBBbnkgY2xhc3NlcyB5b3UgbGlzdCB3aWxsIGJlIGRpc3RyaWJ1dGVkIGFuZCBjb21waWxlZAorICAgICAgICAgICAgICAgICAgICBsb2NhbGx5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlDRUNDX1VTRVJfUEFDS0FHRV9CTCc+PGdsb3NzdGVybT5JQ0VDQ19VU0VSX1BBQ0tBR0VfQkw8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElDRUNDX1VTRVJfUEFDS0FHRV9CTFtkb2NdID0gIklkZW50aWZpZXMgdXNlciByZWNpcGVzIHRoYXQgeW91IGRvIG5vdCB3YW50IHRoZSBJY2VjcmVhbSBkaXN0cmlidXRlZCBjb21waWxlIHN1cHBvcnQgdG8gY29uc2lkZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllcyB1c2VyIHJlY2lwZXMgdGhhdCB5b3UgZG8gbm90IHdhbnQgdGhlCisgICAgICAgICAgICAgICAgICAgIEljZWNyZWFtIGRpc3RyaWJ1dGVkIGNvbXBpbGUgc3VwcG9ydCB0byBjb25zaWRlci4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pY2VjYyc+PGZpbGVuYW1lPmljZWNjPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2V0IHRoaXMgdmFyaWFibGUgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IGxpc3QgcGFja2FnZXMgdXNpbmcgdGhpcyB2YXJpYWJsZSwgeW91IGFyZQorICAgICAgICAgICAgICAgICAgICAiYmxhY2tsaXN0aW5nIiB0aGVtIGZyb20gZGlzdHJpYnV0ZWQgY29tcGlsYXRpb24gYWNyb3NzCisgICAgICAgICAgICAgICAgICAgIHJlbW90ZSBob3N0cy4KKyAgICAgICAgICAgICAgICAgICAgQW55IHBhY2thZ2VzIHlvdSBsaXN0IHdpbGwgYmUgZGlzdHJpYnV0ZWQgYW5kIGNvbXBpbGVkCisgICAgICAgICAgICAgICAgICAgIGxvY2FsbHkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSUNFQ0NfVVNFUl9QQUNLQUdFX1dMJz48Z2xvc3N0ZXJtPklDRUNDX1VTRVJfUEFDS0FHRV9XTDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSUNFQ0NfVVNFUl9QQUNLQUdFX1dMW2RvY10gPSAiSWRlbnRpZmllcyB1c2VyIHJlY2lwZXMgdGhhdCB1c2UgYW4gZW1wdHkgUEFSQUxMRUxfTUFLRSB2YXJpYWJsZSB0aGF0IHlvdSB3YW50IHRvIGZvcmNlIHJlbW90ZSBkaXN0cmlidXRlZCBjb21waWxhdGlvbiBvbiB1c2luZyB0aGUgSWNlY3JlYW0gZGlzdHJpYnV0ZWQgY29tcGlsZSBzdXBwb3J0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXMgdXNlciByZWNpcGVzIHRoYXQgdXNlIGFuIGVtcHR5CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQVJBTExFTF9NQUtFJz48ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0aGF0IHlvdSB3YW50IHRvIGZvcmNlIHJlbW90ZSBkaXN0cmlidXRlZAorICAgICAgICAgICAgICAgICAgICBjb21waWxhdGlvbiBvbiB1c2luZyB0aGUgSWNlY3JlYW0gZGlzdHJpYnV0ZWQgY29tcGlsZQorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWljZWNjJz48ZmlsZW5hbWU+aWNlY2M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICAgICAgICAgIFlvdSBzZXQgdGhpcyB2YXJpYWJsZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9CQVNFTkFNRSc+PGdsb3NzdGVybT5JTUFHRV9CQVNFTkFNRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfQkFTRU5BTUVbZG9jXSA9ICJUaGUgYmFzZSBuYW1lIG9mIGltYWdlIG91dHB1dCBmaWxlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgYmFzZSBuYW1lIG9mIGltYWdlIG91dHB1dCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBkZWZhdWx0cyB0byB0aGUgcmVjaXBlIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9CT09UX0ZJTEVTJz48Z2xvc3N0ZXJtPklNQUdFX0JPT1RfRklMRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX0JPT1RfRklMRVNbZG9jXSA9ICJXaGl0ZXNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGZpbGVzIGZyb20gJHtERVBMT1lfRElSX0lNQUdFfSB0byBwbGFjZSBpbiBib290IHBhcnRpdGlvbi4gRW50cmllcyB3aWxsIGJlIGluc3RhbGxlZCB1bmRlciBhIHNhbWUgbmFtZSBhcyB0aGUgc291cmNlIGZpbGUuIFRvIGNoYW5nZSB0aGUgZGVzdGluYXRpb24gZmlsZSBuYW1lLCBwYXNzIGEgZGVzaXJlZCBuYW1lIGFmdGVyIGEgc2VtaWNvbG9uIChlZy4gdS1ib290LmltZzt1Ym9vdCkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBmaWxlcyBpbnN0YWxsZWQgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgYm9vdCBwYXJ0aXRpb24gd2hlbiBwcmVwYXJpbmcgYW4gaW1hZ2UgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiB0b29sIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ib290aW1nLXBhcnRpdGlvbjwvZmlsZW5hbWU+IHNvdXJjZQorICAgICAgICAgICAgICAgICAgICBwbHVnaW4uCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBmaWxlcyBhcmUgaW5zdGFsbGVkIHVuZGVyCisgICAgICAgICAgICAgICAgICAgIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHNvdXJjZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVG8gY2hhbmdlIHRoZSBpbnN0YWxsZWQgbmFtZSwgc2VwYXJhdGUgaXQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWwgbmFtZSB3aXRoIGEgc2VtaS1jb2xvbiAoOykuCisgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBmaWxlcyBuZWVkIHRvIGJlIGxvY2F0ZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfSU1BR0UnPjxmaWxlbmFtZT5ERVBMT1lfRElSX0lNQUdFPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSB0d28gZXhhbXBsZXM6CisKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9Im1vbm9zcGFjZWQiPgorICAgICBJTUFHRV9CT09UX0ZJTEVTID0gInUtYm9vdC5pbWcgdUltYWdlO2tlcm5lbCIKKyAgICAgSU1BR0VfQk9PVF9GSUxFUyA9ICJ1LWJvb3QuJHtVQk9PVF9TVUZGSVh9ICR7S0VSTkVMX0lNQUdFVFlQRX0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgc291cmNlIGZpbGVzIGNhbiBiZSBwaWNrZWQgdXAgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgYSBnbG9iIHBhdHRlcm4uCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgdGhlIGRlc3RpbmF0aW9uIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgd2lsbCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGJhc2UgbmFtZSBvZiB0aGUgc291cmNlIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgcGF0aC4KKyAgICAgICAgICAgICAgICAgICAgVG8gaW5zdGFsbCBmaWxlcyBpbnRvIGEgZGlyZWN0b3J5IHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGxvY2F0aW9uLCBwYXNzIGl0cyBuYW1lIGFmdGVyIGEgc2VtaS1jb2xvbgorICAgICAgICAgICAgICAgICAgICAoOykuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHR3byBleGFtcGxlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9Im1vbm9zcGFjZWQiPgorICAgICBJTUFHRV9CT09UX0ZJTEVTID0gImJjbTI4MzUtYm9vdGZpbGVzLyoiCisgICAgIElNQUdFX0JPT1RfRklMRVMgPSAiYmNtMjgzNS1ib290ZmlsZXMvKjtib290LyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgZXhhbXBsZSBpbnN0YWxscyBhbGwgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtERVBMT1lfRElSX0lNQUdFfS9iY20yODM1LWJvb3RmaWxlczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIHJvb3Qgb2YgdGhlIHRhcmdldCBwYXJ0aXRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoZSBzZWNvbmQgZXhhbXBsZSBpbnN0YWxscyB0aGUgc2FtZSBmaWxlcyBpbnRvIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJvb3Q8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgcGFydGl0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX0NMQVNTRVMnPjxnbG9zc3Rlcm0+SU1BR0VfQ0xBU1NFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfQ0xBU1NFU1tkb2NdID0gIkEgbGlzdCBvZiBjbGFzc2VzIHRoYXQgYWxsIGltYWdlcyBzaG91bGQgaW5oZXJpdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgY2xhc3NlcyB0aGF0IGFsbCBpbWFnZXMgc2hvdWxkIGluaGVyaXQuCisgICAgICAgICAgICAgICAgICAgIFlvdSB0eXBpY2FsbHkgdXNlIHRoaXMgdmFyaWFibGUgdG8gc3BlY2lmeSB0aGUgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgICBjbGFzc2VzIHRoYXQgcmVnaXN0ZXIgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBpbWFnZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY3JlYXRlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIDxmaWxlbmFtZT5JTUFHRV9DTEFTU0VTPC9maWxlbmFtZT4gaXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmltYWdlX3R5cGVzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0IHRoaXMgdmFyaWFibGUgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IG9yIGluIGEgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2ltYWdlX3R5cGVzLmJiY2xhc3M8L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX0NNRCc+PGdsb3NzdGVybT5JTUFHRV9DTUQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX0NNRFtkb2NdID0gIlNwZWNpZmllcyB0aGUgY29tbWFuZCB0byBjcmVhdGUgdGhlIGltYWdlIGZpbGUgZm9yIGEgc3BlY2lmaWMgaW1hZ2UgdHlwZSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlIHZhbHVlIHNldCBzZXQgaW4gSU1BR0VfRlNUWVBFUywgKGUuZy4gZXh0MywgYnRyZnMsIGFuZCBzbyBmb3J0aCkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBjb21tYW5kIHRvIGNyZWF0ZSB0aGUgaW1hZ2UgZmlsZSBmb3IgYQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyBpbWFnZSB0eXBlLCB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgdmFsdWUgc2V0CisgICAgICAgICAgICAgICAgICAgIHNldCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+PGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5leHQzPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idHJmczwvZmlsZW5hbWU+LCBhbmQgc28gZm9ydGgpLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHNldHRpbmcgdGhpcyB2YXJpYWJsZSwgeW91IHNob3VsZCB1c2UKKyAgICAgICAgICAgICAgICAgICAgYW4gb3ZlcnJpZGUgZm9yIHRoZSBhc3NvY2lhdGVkIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9DTURfamZmczIgPSAibWtmcy5qZmZzMiAtLXJvb3Q9JHtJTUFHRV9ST09URlN9IFwKKyAgICAgICAgLS1mYWtldGltZSAtLW91dHB1dD0ke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmpmZnMyIFwKKyAgICAgICAgJHtFWFRSQV9JTUFHRUNNRH0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IHR5cGljYWxseSBkbyBub3QgbmVlZCB0byBzZXQgdGhpcyB2YXJpYWJsZSB1bmxlc3MKKyAgICAgICAgICAgICAgICAgICAgeW91IGFyZSBhZGRpbmcgc3VwcG9ydCBmb3IgYSBuZXcgaW1hZ2UgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgZXhhbXBsZXMgb24gaG93IHRvIHNldCB0aGlzIHZhcmlhYmxlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWltYWdlX3R5cGVzJz48ZmlsZW5hbWU+aW1hZ2VfdHlwZXM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgZmlsZSwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY2xhc3Nlcy9pbWFnZV90eXBlcy5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU1BR0VfREVWSUNFX1RBQkxFUyc+PGdsb3NzdGVybT5JTUFHRV9ERVZJQ0VfVEFCTEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9ERVZJQ0VfVEFCTEVTW2RvY10gPSAiU3BlY2lmaWVzIG9uZSBvciBtb3JlIGZpbGVzIHRoYXQgY29udGFpbiBjdXN0b20gZGV2aWNlIHRhYmxlcyB0aGF0IGFyZSBwYXNzZWQgdG8gdGhlIG1ha2VkZXZzIGNvbW1hbmQgYXMgcGFydCBvZiBjcmVhdGluZyBhbiBpbWFnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgb25lIG9yIG1vcmUgZmlsZXMgdGhhdCBjb250YWluIGN1c3RvbSBkZXZpY2UKKyAgICAgICAgICAgICAgICAgICAgdGFibGVzIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ha2VkZXZzPC9maWxlbmFtZT4gY29tbWFuZCBhcyBwYXJ0IG9mIGNyZWF0aW5nCisgICAgICAgICAgICAgICAgICAgIGFuIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBmaWxlcyBsaXN0IGJhc2ljIGRldmljZSBub2RlcyB0aGF0IHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAgICBjcmVhdGVkIHVuZGVyIDxmaWxlbmFtZT4vZGV2PC9maWxlbmFtZT4gd2l0aGluIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPklNQUdFX0RFVklDRV9UQUJMRVM8L2ZpbGVuYW1lPiBpcyBub3Qgc2V0LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZXMvZGV2aWNlX3RhYmxlLW1pbmltYWwudHh0PC9maWxlbmFtZT4gaXMKKyAgICAgICAgICAgICAgICAgICAgdXNlZCwgd2hpY2ggaXMgbG9jYXRlZCBieQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBGb3IgZGV0YWlscyBvbiBob3cgeW91IHNob3VsZCB3cml0ZSBkZXZpY2UgdGFibGUgZmlsZXMsCisgICAgICAgICAgICAgICAgICAgIHNlZSA8ZmlsZW5hbWU+bWV0YS9maWxlcy9kZXZpY2VfdGFibGUtbWluaW1hbC50eHQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhcyBhbiBleGFtcGxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX0ZFQVRVUkVTJz48Z2xvc3N0ZXJtPklNQUdFX0ZFQVRVUkVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9GRUFUVVJFU1tkb2NdID0gIlRoZSBwcmltYXJ5IGxpc3Qgb2YgZmVhdHVyZXMgdG8gaW5jbHVkZSBpbiBhbiBpbWFnZS4gQ29uZmlndXJlIHRoaXMgdmFyaWFibGUgaW4gYW4gaW1hZ2UgcmVjaXBlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBwcmltYXJ5IGxpc3Qgb2YgZmVhdHVyZXMgdG8gaW5jbHVkZSBpbiBhbiBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCB5b3UgY29uZmlndXJlIHRoaXMgdmFyaWFibGUgaW4gYW4gaW1hZ2UgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBBbHRob3VnaCB5b3UgY2FuIHVzZSB0aGlzIHZhcmlhYmxlIGZyb20geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGlzIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICBiZXN0IHByYWN0aWNlcyBkaWN0YXRlIHRoYXQgeW91IGRvIG5vdC4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUbyBlbmFibGUgZXh0cmEgZmVhdHVyZXMgZnJvbSBvdXRzaWRlIHRoZSBpbWFnZSByZWNpcGUsCisgICAgICAgICAgICAgICAgICAgICAgICB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX0lNQUdFX0ZFQVRVUkVTJz5FWFRSQV9JTUFHRV9GRUFUVVJFUzwvbGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgYSBsaXN0IG9mIGltYWdlIGZlYXR1cmVzIHRoYXQgc2hpcHMgd2l0aCB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgUHJvamVjdCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0icmVmLWZlYXR1cmVzLWltYWdlIj5JbWFnZSBGZWF0dXJlczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIHRoYXQgc2hvd3MgaG93IHRvIGN1c3RvbWl6ZSB5b3VyIGltYWdlIGJ5CisgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoaXMgdmFyaWFibGUsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5ncG9reS1leHRlbmQtY3VzdG9taW1hZ2UtaW1hZ2VmZWF0dXJlcyc+Q3VzdG9taXppbmcgSW1hZ2VzIFVzaW5nIEN1c3RvbSA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPkVYVFJBX0lNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU1BR0VfRlNUWVBFUyc+PGdsb3NzdGVybT5JTUFHRV9GU1RZUEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9GU1RZUEVTW2RvY10gPSAiRm9ybWF0cyBvZiByb290IGZpbGVzeXN0ZW0gaW1hZ2VzIHRoYXQgeW91IHdhbnQgdG8gaGF2ZSBjcmVhdGVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZm9ybWF0cyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzCisgICAgICAgICAgICAgICAgICAgIGR1cmluZyB0aGUgYnVpbGQgd2hlbiBjcmVhdGluZyB0aGUgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc2V0dGluZyA8ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFzIGZvbGxvd3MgY2F1c2VzIHRoZSBidWlsZCBzeXN0ZW0gdG8gY3JlYXRlIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbXMgdXNpbmcgdHdvIGZvcm1hdHM6IDxmaWxlbmFtZT4uZXh0MzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+LnRhci5iejI8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9GU1RZUEVTID0gImV4dDMgdGFyLmJ6MiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgdGhlIGNvbXBsZXRlIGxpc3Qgb2Ygc3VwcG9ydGVkIGltYWdlIGZvcm1hdHMgZnJvbSB3aGljaAorICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIGNob29zZSwgc2VlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9UWVBFUyc+PGZpbGVuYW1lPklNQUdFX1RZUEVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYWRkICJsaXZlIiB0byA8ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGluc2lkZSBhbiBpbWFnZSByZWNpcGUsIGJlIHN1cmUgdGhhdCB5b3UgZG8gc28gcHJpb3IgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICJpbmhlcml0IGltYWdlIiBsaW5lIG9mIHRoZSByZWNpcGUgb3IgdGhlIGxpdmUgaW1hZ2Ugd2lsbAorICAgICAgICAgICAgICAgICAgICBub3QgYnVpbGQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIER1ZSB0byB0aGUgd2F5IHRoaXMgdmFyaWFibGUgaXMgcHJvY2Vzc2VkLCBpdCBpcyBub3QKKyAgICAgICAgICAgICAgICAgICAgcG9zc2libGUgdG8gdXBkYXRlIGl0cyBjb250ZW50cyB1c2luZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5fcHJlcGVuZDwvZmlsZW5hbWU+LiBUbyBhZGQgb25lIG9yIG1vcmUKKyAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbCBvcHRpb25zIHRvIHRoaXMgdmFyaWFibGUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4rPTwvZmlsZW5hbWU+IG9wZXJhdG9yIG11c3QgYmUgdXNlZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9JTlNUQUxMJz48Z2xvc3N0ZXJtPklNQUdFX0lOU1RBTEw8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX0lOU1RBTExbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhY2thZ2VzIHRvIGluc3RhbGwgaW50byBhbiBpbWFnZS4gSW1hZ2UgcmVjaXBlcyBzZXQgSU1BR0VfSU5TVEFMTCB0byBzcGVjaWZ5IHRoZSBwYWNrYWdlcyB0byBpbnN0YWxsIGludG8gYW4gaW1hZ2UgdGhyb3VnaCBpbWFnZS5iYmNsYXNzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGFja2FnZXMgdG8gaW5zdGFsbCBpbnRvIGFuIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBhCisgICAgICAgICAgICAgICAgICAgIG1lY2hhbmlzbSBmb3IgYW4gaW1hZ2UgcmVjaXBlIGFuZCB5b3Ugc2hvdWxkIHVzZSBpdAorICAgICAgICAgICAgICAgICAgICB3aXRoIGNhcmUgdG8gYXZvaWQgb3JkZXJpbmcgaXNzdWVzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gd29ya2luZyB3aXRoIGFuCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdpbWFnZXMtY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcyc+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLCBkbyBub3QgdXNlIHRoZSA8ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBzcGVjaWZ5IHBhY2thZ2VzIGZvciBpbnN0YWxsYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0ZWFkLCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9JTlNUQUxMJz48ZmlsZW5hbWU+UEFDS0FHRV9JTlNUQUxMPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgd2hpY2ggYWxsb3dzIHRoZSBpbml0aWFsIFJBTSBkaXNrIChpbml0cmFtZnMpCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUgdG8gdXNlIGEgZml4ZWQgc2V0IG9mIHBhY2thZ2VzIGFuZCBub3QgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGFmZmVjdGVkIGJ5IDxmaWxlbmFtZT5JTUFHRV9JTlNUQUxMPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW1hZ2UgcmVjaXBlcyBzZXQgPGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB0byBzcGVjaWZ5IHRoZSBwYWNrYWdlcyB0byBpbnN0YWxsIGludG8gYW4gaW1hZ2UgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW1hZ2UuYmJjbGFzczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksICJoZWxwZXIiIGNsYXNzZXMgZXhpc3QsIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UuYmJjbGFzczwvZmlsZW5hbWU+LCB0aGF0IGNhbiB0YWtlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRkVBVFVSRVMnPklNQUdFX0ZFQVRVUkVTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGxpc3RzIGFuZCB0dXJuIHRoZXNlIGludG8gYXV0by1nZW5lcmF0ZWQgZW50cmllcyBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+IGluIGFkZGl0aW9uIHRvIGl0cworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IGNvbnRlbnRzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBVc2luZyA8ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+IHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4rPTwvZmlsZW5hbWU+IG9wZXJhdG9yIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vY29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBvciBmcm9tIHdpdGhpbgorICAgICAgICAgICAgICAgICAgICBhbiBpbWFnZSByZWNpcGUgaXMgbm90IHJlY29tbWVuZGVkIGFzIGl0IGNhbiBjYXVzZSBvcmRlcmluZworICAgICAgICAgICAgICAgICAgICBpc3N1ZXMuCisgICAgICAgICAgICAgICAgICAgIFNpbmNlIDxmaWxlbmFtZT5jb3JlLWltYWdlLmJiY2xhc3M8L2ZpbGVuYW1lPiBzZXRzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5JTUFHRV9JTlNUQUxMPC9maWxlbmFtZT4gdG8gYSBkZWZhdWx0IHZhbHVlIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Pz08L2ZpbGVuYW1lPiBvcGVyYXRvciwgdXNpbmcgYQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Kz08L2ZpbGVuYW1lPiBvcGVyYXRpb24gYWdhaW5zdAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+IHdpbGwgcmVzdWx0IGluCisgICAgICAgICAgICAgICAgICAgIHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2hlbiB1c2VkIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIHRoZSBzYW1lIG9wZXJhdGlvbiBmcm9tIHdpdGhpbiBhbiBpbWFnZQorICAgICAgICAgICAgICAgICAgICByZWNpcGUgbWF5IG9yIG1heSBub3Qgc3VjY2VlZCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgIHNpdHVhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgSW4gYm90aCB0aGVzZSBjYXNlcywgdGhlIGJlaGF2aW9yIGlzIGNvbnRyYXJ5IHRvIGhvdyBtb3N0CisgICAgICAgICAgICAgICAgICAgIHVzZXJzIGV4cGVjdCB0aGUgPGZpbGVuYW1lPis9PC9maWxlbmFtZT4gb3BlcmF0b3IgdG8gd29yay4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlIHRoaXMgdmFyaWFibGUsIGl0IGlzIGJlc3QgdG8gdXNlIGl0IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfSU5TVEFMTF9hcHBlbmQgPSAiIDxyZXBsYWNlYWJsZT5wYWNrYWdlLW5hbWU8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIGluY2x1ZGUgdGhlIHNwYWNlIGJldHdlZW4gdGhlIHF1b3RhdGlvbiBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBzdGFydCBvZiB0aGUgcGFja2FnZSBuYW1lIG9yIG5hbWVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX0xJTkdVQVMnPjxnbG9zc3Rlcm0+SU1BR0VfTElOR1VBUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfTElOR1VBU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgbGlzdCBvZiBsb2NhbGVzIHRvIGluc3RhbGwgaW50byB0aGUgaW1hZ2UgZHVyaW5nIHRoZSByb290IGZpbGVzeXN0ZW0gY29uc3RydWN0aW9uIHByb2Nlc3MuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBsaXN0IG9mIGxvY2FsZXMgdG8gaW5zdGFsbCBpbnRvIHRoZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICBkdXJpbmcgdGhlIHJvb3QgZmlsZXN5c3RlbSBjb25zdHJ1Y3Rpb24gcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseSBzcGxpdHMgbG9jYWxlCisgICAgICAgICAgICAgICAgICAgIGZpbGVzLCB3aGljaCBhcmUgdXNlZCBmb3IgbG9jYWxpemF0aW9uLCBpbnRvIHNlcGFyYXRlCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIHRoZSA8ZmlsZW5hbWU+SU1BR0VfTElOR1VBUzwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGVuc3VyZXMgdGhhdCBhbnkgbG9jYWxlIHBhY2thZ2VzIHRoYXQgY29ycmVzcG9uZCB0byBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICBhbHJlYWR5IHNlbGVjdGVkIGZvciBpbnN0YWxsYXRpb24gaW50byB0aGUgaW1hZ2UgYXJlIGFsc28KKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfTElOR1VBUyA9ICJwdC1iciBkZS1kZSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSBidWlsZCBzeXN0ZW0gZW5zdXJlcyBhbnkgQnJhemlsaWFuCisgICAgICAgICAgICAgICAgICAgIFBvcnR1Z3Vlc2UgYW5kIEdlcm1hbiBsb2NhbGUgZmlsZXMgdGhhdCBjb3JyZXNwb25kIHRvCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGluIHRoZSBpbWFnZSBhcmUgaW5zdGFsbGVkIChpLmUuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4qLWxvY2FsZS1wdC1icjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+Ki1sb2NhbGUtZGUtZGU8L2ZpbGVuYW1lPiBhcyB3ZWxsIGFzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4qLWxvY2FsZS1wdDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+Ki1sb2NhbGUtZGU8L2ZpbGVuYW1lPiwgc2luY2Ugc29tZSBzb2Z0d2FyZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBvbmx5IHByb3ZpZGUgbG9jYWxlIGZpbGVzIGJ5IGxhbmd1YWdlIGFuZCBub3QgYnkKKyAgICAgICAgICAgICAgICAgICAgY291bnRyeS1zcGVjaWZpYyBsYW5ndWFnZSkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUdMSUJDX0dFTkVSQVRFX0xPQ0FMRVMnPjxmaWxlbmFtZT5HTElCQ19HRU5FUkFURV9MT0NBTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBpbmZvcm1hdGlvbiBvbiBnZW5lcmF0aW5nIEdMSUJDIGxvY2FsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU1BR0VfTUFOSUZFU1QnPjxnbG9zc3Rlcm0+SU1BR0VfTUFOSUZFU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX01BTklGRVNUW2RvY10gPSAiVGhlIG1hbmlmZXN0IGZpbGUgZm9yIHRoZSBpbWFnZS4gVGhpcyBmaWxlIGxpc3RzIGFsbCB0aGUgaW5zdGFsbGVkIHBhY2thZ2VzIHRoYXQgbWFrZSB1cCB0aGUgaW1hZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1hbmlmZXN0IGZpbGUgZm9yIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWxlIGxpc3RzIGFsbCB0aGUgaW5zdGFsbGVkIHBhY2thZ2VzIHRoYXQgbWFrZSB1cAorICAgICAgICAgICAgICAgICAgICB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmaWxlIGNvbnRhaW5zIHBhY2thZ2UgaW5mb3JtYXRpb24gb24gYSBsaW5lLXBlci1wYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIGJhc2lzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPHJlcGxhY2VhYmxlPnBhY2thZ2VuYW1lPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnBhY2thZ2VhcmNoPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnZlcnNpb248L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pbWFnZSc+PGZpbGVuYW1lPmltYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGRlZmluZXMgdGhlIG1hbmlmZXN0IGZpbGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9NQU5JRkVTVCA9ICIke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLm1hbmlmZXN0IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhdGlvbiBpcyBkZXJpdmVkIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9JTUFHRSc+PGZpbGVuYW1lPkRFUExPWV9ESVJfSU1BR0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9OQU1FJz48ZmlsZW5hbWU+SU1BR0VfTkFNRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBpbmZvcm1hdGlvbiBvbiBob3cgdGhlIGltYWdlCisgICAgICAgICAgICAgICAgICAgIGlzIGNyZWF0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdpbWFnZS1nZW5lcmF0aW9uLWRldi1lbnZpcm9ubWVudCc+SW1hZ2UgR2VuZXJhdGlvbjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU1BR0VfTkFNRSc+PGdsb3NzdGVybT5JTUFHRV9OQU1FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9OQU1FW2RvY10gPSAiVGhlIG5hbWUgb2YgdGhlIG91dHB1dCBpbWFnZSBmaWxlcyBtaW51cyB0aGUgZXh0ZW5zaW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBvdXRwdXQgaW1hZ2UgZmlsZXMgbWludXMgdGhlIGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBkZXJpdmVkIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfQkFTRU5BTUUnPjxmaWxlbmFtZT5JTUFHRV9CQVNFTkFNRTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURBVEVUSU1FJz48ZmlsZW5hbWU+REFURVRJTUU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX05BTUUgPSAiJHtJTUFHRV9CQVNFTkFNRX0tJHtNQUNISU5FfS0ke0RBVEVUSU1FfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX09WRVJIRUFEX0ZBQ1RPUic+PGdsb3NzdGVybT5JTUFHRV9PVkVSSEVBRF9GQUNUT1I8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX09WRVJIRUFEX0ZBQ1RPUltkb2NdID0gIkRlZmluZXMgYSBtdWx0aXBsaWVyIHRoYXQgdGhlIGJ1aWxkIHN5c3RlbSBhcHBsaWVzIHRvIHRoZSBpbml0aWFsIGltYWdlIHNpemUgZm9yIGNhc2VzIHdoZW4gdGhlIG11bHRpcGxpZXIgdGltZXMgdGhlIHJldHVybmVkIGRpc2sgdXNhZ2UgdmFsdWUgZm9yIHRoZSBpbWFnZSBpcyBncmVhdGVyIHRoYW4gdGhlIHN1bSBvZiBJTUFHRV9ST09URlNfU0laRSBhbmQgSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgYSBtdWx0aXBsaWVyIHRoYXQgdGhlIGJ1aWxkIHN5c3RlbSBhcHBsaWVzIHRvIHRoZSBpbml0aWFsIGltYWdlCisgICAgICAgICAgICAgICAgICAgIHNpemUgZm9yIGNhc2VzIHdoZW4gdGhlIG11bHRpcGxpZXIgdGltZXMgdGhlIHJldHVybmVkIGRpc2sgdXNhZ2UgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBpbWFnZSBpcyBncmVhdGVyIHRoYW4gdGhlIHN1bSBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1JPT1RGU19TSVpFJz5JTUFHRV9ST09URlNfU0laRTwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UnPklNQUdFX1JPT1RGU19FWFRSQV9TUEFDRTwvbGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJlc3VsdCBvZiB0aGUgbXVsdGlwbGllciBhcHBsaWVkIHRvIHRoZSBpbml0aWFsIGltYWdlIHNpemUgY3JlYXRlcworICAgICAgICAgICAgICAgICAgICBmcmVlIGRpc2sgc3BhY2UgaW4gdGhlIGltYWdlIGFzIG92ZXJoZWFkLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgYnVpbGQgcHJvY2VzcyB1c2VzIGEgbXVsdGlwbGllciBvZiAxLjMgZm9yIHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgZGVmYXVsdCB2YWx1ZSByZXN1bHRzIGluIDMwJSBmcmVlIGRpc2sgc3BhY2UgYWRkZWQgdG8gdGhlIGltYWdlIHdoZW4gdGhpcworICAgICAgICAgICAgICAgICAgICBtZXRob2QgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGZpbmFsIGdlbmVyYXRlZCBpbWFnZSBzaXplLgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGJlIGF3YXJlIHRoYXQgcG9zdCBpbnN0YWxsIHNjcmlwdHMgYW5kIHRoZSBwYWNrYWdlIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIHVzZXMgZGlzayBzcGFjZSBpbnNpZGUgdGhpcyBvdmVyaGVhZCBhcmVhLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHRoZSBtdWx0aXBsaWVyIGRvZXMgbm90IHByb2R1Y2UgYW4gaW1hZ2Ugd2l0aAorICAgICAgICAgICAgICAgICAgICBhbGwgdGhlIHRoZW9yZXRpY2FsIGZyZWUgZGlzayBzcGFjZS4KKyAgICAgICAgICAgICAgICAgICAgU2VlIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTX1NJWkUnPklNQUdFX1JPT1RGU19TSVpFPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdGhlIGJ1aWxkIHN5c3RlbSBkZXRlcm1pbmVzIHRoZSBvdmVyYWxsIGltYWdlIHNpemUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IDMwJSBmcmVlIGRpc2sgc3BhY2UgdHlwaWNhbGx5IGdpdmVzIHRoZSBpbWFnZSBlbm91Z2ggcm9vbSB0byBib290CisgICAgICAgICAgICAgICAgICAgIGFuZCBhbGxvd3MgZm9yIGJhc2ljIHBvc3QgaW5zdGFsbHMgd2hpbGUgc3RpbGwgbGVhdmluZyBhIHNtYWxsIGFtb3VudCBvZgorICAgICAgICAgICAgICAgICAgICBmcmVlIGRpc2sgc3BhY2UuCisgICAgICAgICAgICAgICAgICAgIElmIDMwJSBmcmVlIHNwYWNlIGlzIGluYWRlcXVhdGUsIHlvdSBjYW4gaW5jcmVhc2UgdGhlIGRlZmF1bHQgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNldHRpbmcgZ2l2ZXMgeW91IDUwJSBmcmVlIHNwYWNlIGFkZGVkIHRvIHRoZSBpbWFnZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9PVkVSSEVBRF9GQUNUT1IgPSAiMS41IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gZW5zdXJlIGEgc3BlY2lmaWMgYW1vdW50IG9mIGZyZWUgZGlzayBzcGFjZSBpcyBhZGRlZAorICAgICAgICAgICAgICAgICAgICB0byB0aGUgaW1hZ2UgYnkgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFJz5JTUFHRV9ST09URlNfRVhUUkFfU1BBQ0U8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU1BR0VfUEtHVFlQRSc+PGdsb3NzdGVybT5JTUFHRV9QS0dUWVBFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9QS0dUWVBFW2RvY10gPSAiRGVmaW5lcyB0aGUgcGFja2FnZSB0eXBlIChERUIsIFJQTSwgSVBLLCBvciBUQVIpIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgcGFja2FnZSB0eXBlIChERUIsIFJQTSwgSVBLLCBvciBUQVIpIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBpcyBkZWZpbmVkIGFwcHJvcHJpYXRlbHkgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2VfZGViJz48ZmlsZW5hbWU+cGFja2FnZV9kZWI8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2VfcnBtJz48ZmlsZW5hbWU+cGFja2FnZV9ycG08L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2VfaXBrJz48ZmlsZW5hbWU+cGFja2FnZV9pcGs8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2VfdGFyJz48ZmlsZW5hbWU+cGFja2FnZV90YXI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5XYXJuaW5nPC90aXRsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+cGFja2FnZV90YXI8L2ZpbGVuYW1lPiBjbGFzcyBpcyBicm9rZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBpcyBub3Qgc3VwcG9ydGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG8gbm90IHVzZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcG9wdWxhdGUtc2RrLSonPjxmaWxlbmFtZT5wYWNrYWdlX3Nka19iYXNlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pbWFnZSc+PGZpbGVuYW1lPmltYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMgdXNlIHRoZSA8ZmlsZW5hbWU+SU1BR0VfUEtHVFlQRTwvZmlsZW5hbWU+IGZvcgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdpbmcgdXAgaW1hZ2VzIGFuZCBTREtzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIG5vdCBzZXQgdGhlIDxmaWxlbmFtZT5JTUFHRV9QS0dUWVBFPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbWFudWFsbHkuCisgICAgICAgICAgICAgICAgICAgIFJhdGhlciwgdGhlIHZhcmlhYmxlIGlzIHNldCBpbmRpcmVjdGx5IHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2UnPjxmaWxlbmFtZT5wYWNrYWdlXyo8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdGhlIGZpcnN0IHBhY2thZ2UgdHlwZQorICAgICAgICAgICAgICAgICAgICAoZS5nLiBERUIsIFJQTSwgb3IgSVBLKSB0aGF0IGFwcGVhcnMgd2l0aCB0aGUgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBGaWxlcyB1c2luZyB0aGUgPGZpbGVuYW1lPi50YXI8L2ZpbGVuYW1lPiBmb3JtYXQgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICBuZXZlciB1c2VkIGFzIGEgc3Vic3RpdHV0ZSBwYWNrYWdpbmcgZm9ybWF0IGZvciBERUIsCisgICAgICAgICAgICAgICAgICAgICAgICBSUE0sIGFuZCBJUEsgZm9ybWF0dGVkIGZpbGVzIGZvciB5b3VyIGltYWdlIG9yIFNESy4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkQnPjxnbG9zc3Rlcm0+SU1BR0VfUE9TVFBST0NFU1NfQ09NTUFORDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfUE9TVFBST0NFU1NfQ09NTUFORFtkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgb25jZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgZmluYWwgaW1hZ2Ugb3V0cHV0IGZpbGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgb25jZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgZmluYWwgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgZnVuY3Rpb25zIHNlcGFyYXRlZCBieSBzZW1pY29sb25zOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gIjxyZXBsYWNlYWJsZT5mdW5jdGlvbjwvcmVwbGFjZWFibGU+OyAuLi4gIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIHBhc3MgdGhlIHJvb3QgZmlsZXN5c3RlbSBwYXRoIHRvIGEgY29tbWFuZAorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIGZ1bmN0aW9uLCB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtJTUFHRV9ST09URlN9PC9maWxlbmFtZT4sIHdoaWNoIHBvaW50cyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgZGlyZWN0b3J5IHRoYXQgYmVjb21lcyB0aGUgcm9vdCBmaWxlc3lzdGVtIGltYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX1BSRVBST0NFU1NfQ09NTUFORCc+PGdsb3NzdGVybT5JTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX1BSRVBST0NFU1NfQ09NTUFORFtkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgYmVmb3JlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyBjcmVhdGVkIHRoZSBmaW5hbCBpbWFnZSBvdXRwdXQgZmlsZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBiZWZvcmUgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIGNyZWF0ZWQgdGhlIGZpbmFsIGltYWdlCisgICAgICAgICAgICAgICAgICAgIG91dHB1dCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzcGVjaWZ5IGZ1bmN0aW9ucyBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9uczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQgKz0gIjxyZXBsYWNlYWJsZT5mdW5jdGlvbjwvcmVwbGFjZWFibGU+OyAuLi4gIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIHBhc3MgdGhlIHJvb3QgZmlsZXN5c3RlbSBwYXRoIHRvIGEgY29tbWFuZAorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIGZ1bmN0aW9uLCB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtJTUFHRV9ST09URlN9PC9maWxlbmFtZT4sIHdoaWNoIHBvaW50cyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgZGlyZWN0b3J5IHRoYXQgYmVjb21lcyB0aGUgcm9vdCBmaWxlc3lzdGVtIGltYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX1JPT1RGUyc+PGdsb3NzdGVybT5JTUFHRV9ST09URlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX1JPT1RGU1tkb2NdID0gIlRoZSBsb2NhdGlvbiBvZiB0aGUgcm9vdCBmaWxlc3lzdGVtIHdoaWxlIGl0IGlzIHVuZGVyIGNvbnN0cnVjdGlvbiAoaS5lLiBkdXJpbmcgZG9fcm9vdGZzKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYXRpb24gb2YgdGhlIHJvb3QgZmlsZXN5c3RlbSB3aGlsZSBpdCBpcyB1bmRlcgorICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rpb24gKGkuZS4gZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3Mtcm9vdGZzJz48ZmlsZW5hbWU+ZG9fcm9vdGZzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2spLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIG5vdCBjb25maWd1cmFibGUuCisgICAgICAgICAgICAgICAgICAgIERvIG5vdCBjaGFuZ2UgaXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU1BR0VfUk9PVEZTX0FMSUdOTUVOVCc+PGdsb3NzdGVybT5JTUFHRV9ST09URlNfQUxJR05NRU5UPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9ST09URlNfQUxJR05NRU5UW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBhbGlnbm1lbnQgZm9yIHRoZSBvdXRwdXQgaW1hZ2UgZmlsZSBpbiBLYnl0ZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBhbGlnbm1lbnQgZm9yIHRoZSBvdXRwdXQgaW1hZ2UgZmlsZSBpbgorICAgICAgICAgICAgICAgICAgICBLYnl0ZXMuCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBzaXplIG9mIHRoZSBpbWFnZSBpcyBub3QgYSBtdWx0aXBsZSBvZgorICAgICAgICAgICAgICAgICAgICB0aGlzIHZhbHVlLCB0aGVuIHRoZSBzaXplIGlzIHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QKKyAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgb2YgdGhlIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAiMSIuCisgICAgICAgICAgICAgICAgICAgIFNlZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTX1NJWkUnPjxmaWxlbmFtZT5JTUFHRV9ST09URlNfU0laRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UnPjxnbG9zc3Rlcm0+SU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0VbZG9jXSA9ICJEZWZpbmVzIGFkZGl0aW9uYWwgZnJlZSBkaXNrIHNwYWNlIGNyZWF0ZWQgaW4gdGhlIGltYWdlIGluIEtieXRlcy4gQnkgZGVmYXVsdCwgdGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gJzAnLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgYWRkaXRpb25hbCBmcmVlIGRpc2sgc3BhY2UgY3JlYXRlZCBpbiB0aGUgaW1hZ2UgaW4gS2J5dGVzLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIHZhcmlhYmxlIGlzIHNldCB0byAiMCIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgZnJlZSBkaXNrIHNwYWNlIGlzIGFkZGVkIHRvIHRoZSBpbWFnZSBhZnRlciB0aGUgYnVpbGQgc3lzdGVtIGRldGVybWluZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIGltYWdlIHNpemUgYXMgZGVzY3JpYmVkIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTX1NJWkUnPklNQUdFX1JPT1RGU19TSVpFPC9saW5rPjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byBlbnN1cmUgdGhhdCBhCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIGFtb3VudCBvZiBmcmVlIGRpc2sgc3BhY2UgaXMgYXZhaWxhYmxlIG9uIGEgZGV2aWNlIGFmdGVyIGFuIGltYWdlCisgICAgICAgICAgICAgICAgICAgIGlzIGluc3RhbGxlZCBhbmQgcnVubmluZy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIGJlIHN1cmUgNSBHYnl0ZXMgb2YgZnJlZSBkaXNrIHNwYWNlIGlzIGF2YWlsYWJsZSwgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX1JPT1RGU19FWFRSQV9TUEFDRSA9ICI1MjQyODgwIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgWW9jdG8gUHJvamVjdCBCdWlsZCBBcHBsaWFuY2Ugc3BlY2lmaWNhbGx5IHJlcXVlc3RzIDQwIEdieXRlcworICAgICAgICAgICAgICAgICAgICBvZiBleHRyYSBzcGFjZSB3aXRoIHRoZSBsaW5lOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX1JPT1RGU19FWFRSQV9TUEFDRSA9ICI0MTk0MzA0MCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX1JPT1RGU19TSVpFJz48Z2xvc3N0ZXJtPklNQUdFX1JPT1RGU19TSVpFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9ST09URlNfU0laRVtkb2NdID0gIkRlZmluZXMgdGhlIHNpemUgaW4gS2J5dGVzIGZvciB0aGUgZ2VuZXJhdGVkIGltYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgdGhlIHNpemUgaW4gS2J5dGVzIGZvciB0aGUgZ2VuZXJhdGVkIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBkZXRlcm1pbmVzIHRoZSBmaW5hbCBzaXplIGZvciB0aGUgZ2VuZXJhdGVkCisgICAgICAgICAgICAgICAgICAgIGltYWdlIHVzaW5nIGFuIGFsZ29yaXRobSB0aGF0IHRha2VzIGludG8gYWNjb3VudCB0aGUgaW5pdGlhbCBkaXNrIHNwYWNlIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBnZW5lcmF0ZWQgaW1hZ2UsIGEgcmVxdWVzdGVkIHNpemUgZm9yIHRoZSBpbWFnZSwgYW5kIHJlcXVlc3RlZAorICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsIGZyZWUgZGlzayBzcGFjZSB0byBiZSBhZGRlZCB0byB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFByb2dyYW1hdGljYWxseSwgdGhlIGJ1aWxkIHN5c3RlbSBkZXRlcm1pbmVzIHRoZSBmaW5hbCBzaXplIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQgaW1hZ2UgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgIGlmIChpbWFnZS1kdSAqIG92ZXJoZWFkKSAmbHQ7IHJvb3Rmcy1zaXplOgorCWludGVybmFsLXJvb3Rmcy1zaXplID0gcm9vdGZzLXNpemUgKyB4c3BhY2UKKyAgICBlbHNlOgorCWludGVybmFsLXJvb3Rmcy1zaXplID0gKGltYWdlLWR1ICogb3ZlcmhlYWQpICsgeHNwYWNlCisKKyAgICB3aGVyZToKKworICAgICAgaW1hZ2UtZHUgPSBSZXR1cm5lZCB2YWx1ZSBvZiB0aGUgZHUgY29tbWFuZCBvbgorICAgICAgICAgICAgICAgICB0aGUgaW1hZ2UuCisKKyAgICAgIG92ZXJoZWFkID0gSU1BR0VfT1ZFUkhFQURfRkFDVE9SCisKKyAgICAgIHJvb3Rmcy1zaXplID0gSU1BR0VfUk9PVEZTX1NJWkUKKworICAgICAgaW50ZXJuYWwtcm9vdGZzLXNpemUgPSBJbml0aWFsIHJvb3QgZmlsZXN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplIGJlZm9yZSBhbnkgbW9kaWZpY2F0aW9ucy4KKworICAgICAgeHNwYWNlID0gSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfT1ZFUkhFQURfRkFDVE9SJz48ZmlsZW5hbWU+SU1BR0VfT1ZFUkhFQURfRkFDVE9SPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFJz48ZmlsZW5hbWU+SU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBmb3IgcmVsYXRlZCBpbmZvcm1hdGlvbi4KKzwhLS0gICAgICAgICAgICAgICAgICAgIEluIHRoZSBhYm92ZSBleGFtcGxlLCA8ZmlsZW5hbWU+b3ZlcmhlYWQ8L2ZpbGVuYW1lPiBpcyBkZWZpbmVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX09WRVJIRUFEX0ZBQ1RPUic+SU1BR0VfT1ZFUkhFQURfRkFDVE9SPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCA8ZmlsZW5hbWU+eHNwYWNlPC9maWxlbmFtZT4gaXMgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UnPklNQUdFX1JPT1RGU19FWFRSQV9TUEFDRTwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgYW5kIDxmaWxlbmFtZT5kdTwvZmlsZW5hbWU+IGlzIHRoZSByZXN1bHRzIG9mIHRoZSBkaXNrIHVzYWdlIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgb24gdGhlIGluaXRpYWxseSBnZW5lcmF0ZWQgaW1hZ2UuIC0tPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX1RZUEVERVAnPjxnbG9zc3Rlcm0+SU1BR0VfVFlQRURFUDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfVFlQRURFUFtkb2NdID0gIlNwZWNpZmllcyBhIGRlcGVuZGVuY3kgZnJvbSBvbmUgaW1hZ2UgdHlwZSBvbiBhbm90aGVyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGRlcGVuZGVuY3kgZnJvbSBvbmUgaW1hZ2UgdHlwZSBvbiBhbm90aGVyLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaW1hZ2UtbGl2ZSc+PGZpbGVuYW1lPmltYWdlLWxpdmU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfVFlQRURFUF9saXZlID0gImV4dDMiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsIHRoZSB2YXJpYWJsZSBlbnN1cmVzIHRoYXQgd2hlbgorICAgICAgICAgICAgICAgICAgICAibGl2ZSIgaXMgbGlzdGVkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GU1RZUEVTJz48ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcHJvZHVjZXMgYW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmV4dDM8L2ZpbGVuYW1lPiBpbWFnZSBmaXJzdCBzaW5jZSBvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMgb2YgdGhlIGxpdmUKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UgaXMgYW4gPGZpbGVuYW1lPmV4dDM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWQgcGFydGl0aW9uIGNvbnRhaW5pbmcgdGhlIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9UWVBFUyc+PGdsb3NzdGVybT5JTUFHRV9UWVBFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfVFlQRVNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGNvbXBsZXRlIGxpc3Qgb2Ygc3VwcG9ydGVkIGltYWdlIHR5cGVzIGJ5IGRlZmF1bHQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBjb21wbGV0ZSBsaXN0IG9mIHN1cHBvcnRlZCBpbWFnZSB0eXBlcworICAgICAgICAgICAgICAgICAgICBieSBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGpmZnMyCisgICAgIGpmZnMyLnN1bQorICAgICBjcmFtZnMKKyAgICAgZXh0MgorICAgICBleHQyLmd6CisgICAgIGV4dDIuYnoyCisgICAgIGV4dDMKKyAgICAgZXh0My5negorICAgICBleHQyLmx6bWEKKyAgICAgYnRyZnMKKyAgICAgbGl2ZQorICAgICBzcXVhc2hmcworICAgICBzcXVhc2hmcy14egorICAgICB1YmkKKyAgICAgdWJpZnMKKyAgICAgdGFyCisgICAgIHRhci5negorICAgICB0YXIuYnoyCisgICAgIHRhci54egorICAgICBjcGlvCisgICAgIGNwaW8uZ3oKKyAgICAgY3Bpby54egorICAgICBjcGlvLmx6bWEKKyAgICAgdmRpCisgICAgIHZtZGsKKyAgICAgZWxmCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgdHlwZXMgb2YgaW1hZ2VzLCBzZWUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY2xhc3Nlcy9pbWFnZV90eXBlcyouYmJjbGFzczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5DX1BSJz48Z2xvc3N0ZXJtPklOQ19QUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU5DX1BSW2RvY10gPSAiSGVscHMgZGVmaW5lIHRoZSByZWNpcGUgcmV2aXNpb24gZm9yIHJlY2lwZXMgdGhhdCBzaGFyZSBhIGNvbW1vbiBpbmNsdWRlIGZpbGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSGVscHMgZGVmaW5lIHRoZSByZWNpcGUgcmV2aXNpb24gZm9yIHJlY2lwZXMgdGhhdCBzaGFyZQorICAgICAgICAgICAgICAgICAgICBhIGNvbW1vbiA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdGhpbmsgb2YgdGhpcyB2YXJpYWJsZSBhcyBwYXJ0IG9mIHRoZSByZWNpcGUgcmV2aXNpb24KKyAgICAgICAgICAgICAgICAgICAgYXMgc2V0IGZyb20gd2l0aGluIGFuIGluY2x1ZGUgZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3VwcG9zZSwgZm9yIGV4YW1wbGUsIHlvdSBoYXZlIGEgc2V0IG9mIHJlY2lwZXMgdGhhdAorICAgICAgICAgICAgICAgICAgICBhcmUgdXNlZCBhY3Jvc3Mgc2V2ZXJhbCBwcm9qZWN0cy4KKyAgICAgICAgICAgICAgICAgICAgQW5kLCB3aXRoaW4gZWFjaCBvZiB0aG9zZSByZWNpcGVzIHRoZSByZXZpc2lvbgorICAgICAgICAgICAgICAgICAgICAoaXRzIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhbHVlKSBpcyBzZXQgYWNjb3JkaW5nbHkuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgd2hlbiB0aGUgcmV2aXNpb24gb2YgdGhvc2UgcmVjaXBlcyBjaGFuZ2VzLAorICAgICAgICAgICAgICAgICAgICB0aGUgYnVyZGVuIGlzIG9uIHlvdSB0byBmaW5kIGFsbCB0aG9zZSByZWNpcGVzIGFuZAorICAgICAgICAgICAgICAgICAgICBiZSBzdXJlIHRoYXQgdGhleSBnZXQgY2hhbmdlZCB0byByZWZsZWN0IHRoZSB1cGRhdGVkCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gb2YgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBzY2VuYXJpbywgaXQgY2FuIGdldCBjb21wbGljYXRlZCB3aGVuIHJlY2lwZXMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBhcmUgdXNlZCBpbiBtYW55IHBsYWNlcyBhbmQgcHJvdmlkZSBjb21tb24gZnVuY3Rpb25hbGl0eQorICAgICAgICAgICAgICAgICAgICBhcmUgdXBncmFkZWQgdG8gYSBuZXcgcmV2aXNpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgbW9yZSBlZmZpY2llbnQgd2F5IG9mIGRlYWxpbmcgd2l0aCB0aGlzIHNpdHVhdGlvbiBpcworICAgICAgICAgICAgICAgICAgICB0byBzZXQgdGhlIDxmaWxlbmFtZT5JTkNfUFI8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpbnNpZGUKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4gZmlsZXMgdGhhdCB0aGUgcmVjaXBlcworICAgICAgICAgICAgICAgICAgICBzaGFyZSBhbmQgdGhlbiBleHBhbmQgdGhlIDxmaWxlbmFtZT5JTkNfUFI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB3aXRoaW4gdGhlIHJlY2lwZXMgdG8gaGVscAorICAgICAgICAgICAgICAgICAgICBkZWZpbmUgdGhlIHJlY2lwZSByZXZpc2lvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBwcm92aWRlcyBhbiBleGFtcGxlIHRoYXQgc2hvd3MgaG93IHRvIHVzZQorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPklOQ19QUjwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGdpdmVuIGEgY29tbW9uIDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4gZmlsZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMgdGhlIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSB2YXJpYWJsZSBpcyBkZWZpbmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+IGZpbGUsIHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBzZXQgdGhlIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IHZhbHVlcyBpbgorICAgICAgICAgICAgICAgICAgICBlYWNoIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHdpbGwgbm90aWNlIHRoYXQgd2hlbiB5b3Ugc2V0IGEgcmVjaXBlJ3MKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4geW91IGNhbiBwcm92aWRlIG1vcmUgZ3JhbnVsYXIKKyAgICAgICAgICAgICAgICAgICAgcmV2aXNpb25pbmcgYnkgYXBwZW5kaW5nIHZhbHVlcyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklOQ19QUjwvZmlsZW5hbWU+IHZhcmlhYmxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CityZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLWZvbnQtY29tbW9uLmluYzpJTkNfUFIgPSAicjIiCityZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9lbmNvZGluZ3NfMS4wLjQuYmI6UFIgPSAiJHtJTkNfUFJ9LjEiCityZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LXV0aWxfMS4zLjAuYmI6UFIgPSAiJHtJTkNfUFJ9LjAiCityZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LWFsaWFzXzEuMC4zLmJiOlBSID0gIiR7SU5DX1BSfS4zIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBsaW5lIG9mIHRoZSBleGFtcGxlIGVzdGFibGlzaGVzIHRoZSBiYXNlbGluZQorICAgICAgICAgICAgICAgICAgICByZXZpc2lvbiB0byBiZSB1c2VkIGZvciBhbGwgcmVjaXBlcyB0aGF0IHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVtYWluaW5nIGxpbmVzIGluIHRoZSBleGFtcGxlIGFyZSBmcm9tIGluZGl2aWR1YWwKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlcyBhbmQgc2hvdyBob3cgdGhlIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IHZhbHVlCisgICAgICAgICAgICAgICAgICAgIGlzIHNldC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTkNPTVBBVElCTEVfTElDRU5TRSc+PGdsb3NzdGVybT5JTkNPTVBBVElCTEVfTElDRU5TRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU5DT01QQVRJQkxFX0xJQ0VOU0VbZG9jXSA9ICJTcGVjaWZpZXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBsaWNlbnNlIG5hbWVzIChhcyB0aGV5IHdvdWxkIGFwcGVhciBpbiBMSUNFTlNFKSB0aGF0IHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIHRoZSBidWlsZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBsaWNlbnNlIG5hbWVzCisgICAgICAgICAgICAgICAgICAgIChhcyB0aGV5IHdvdWxkIGFwcGVhciBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTElDRU5TRSc+PGZpbGVuYW1lPkxJQ0VOU0U8L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICAgICAgICAgIHRoYXQgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICBSZWNpcGVzIHRoYXQgcHJvdmlkZSBubyBhbHRlcm5hdGl2ZXMgdG8gbGlzdGVkIGluY29tcGF0aWJsZQorICAgICAgICAgICAgICAgICAgICBsaWNlbnNlcyBhcmUgbm90IGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyB0aGF0IGFyZSBpbmRpdmlkdWFsbHkgbGljZW5zZWQgd2l0aCB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgIGluY29tcGF0aWJsZSBsaWNlbnNlcyB3aWxsIGJlIGRlbGV0ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBvbmx5IHJlZ3VsYXJseSB0ZXN0ZWQgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZyBzZXR0aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOQ09NUEFUSUJMRV9MSUNFTlNFID0gIkdQTC0zLjAgTEdQTC0zLjAgQUdQTC0zLjAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgQWx0aG91Z2ggeW91IGNhbiB1c2Ugb3RoZXIgc2V0dGluZ3MsIHlvdSBtaWdodCBiZSByZXF1aXJlZAorICAgICAgICAgICAgICAgICAgICB0byByZW1vdmUgZGVwZW5kZW5jaWVzIG9uIG9yIHByb3ZpZGUgYWx0ZXJuYXRpdmVzIHRvCisgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gcHJvZHVjZSBhIGZ1bmN0aW9uYWwgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOSElCSVRfREVGQVVMVF9ERVBTJz48Z2xvc3N0ZXJtPklOSElCSVRfREVGQVVMVF9ERVBTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTkhJQklUX0RFRkFVTFRfREVQU1tkb2NdID0gIlByZXZlbnRzIHRoZSBkZWZhdWx0IGRlcGVuZGVuY2llcywgbmFtZWx5IHRoZSBDIGNvbXBpbGVyIGFuZCBzdGFuZGFyZCBDIGxpYnJhcnkgKGxpYmMpLCBmcm9tIGJlaW5nIGFkZGVkIHRvIERFUEVORFMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUHJldmVudHMgdGhlIGRlZmF1bHQgZGVwZW5kZW5jaWVzLCBuYW1lbHkgdGhlIEMgY29tcGlsZXIKKyAgICAgICAgICAgICAgICAgICAgYW5kIHN0YW5kYXJkIEMgbGlicmFyeSAobGliYyksIGZyb20gYmVpbmcgYWRkZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHVzdWFsbHkgdXNlZCB3aXRoaW4gcmVjaXBlcyB0aGF0IGRvIG5vdAorICAgICAgICAgICAgICAgICAgICByZXF1aXJlIGFueSBjb21waWxhdGlvbiB1c2luZyB0aGUgQyBjb21waWxlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2V0IHRoZSB2YXJpYWJsZSB0byAiMSIgdG8gcHJldmVudCB0aGUgZGVmYXVsdCBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgZnJvbSBiZWluZyBhZGRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTkhJQklUX1BBQ0tBR0VfREVCVUdfU1BMSVQnPjxnbG9zc3Rlcm0+SU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTkhJQklUX1BBQ0tBR0VfU1RSSVBbZG9jXSA9ICJJZiBzZXQgdG8gIjEiLCBjYXVzZXMgdGhlIGJ1aWxkIHRvIG5vdCBzdHJpcCBiaW5hcmllcyBpbiByZXN1bHRpbmcgcGFja2FnZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUHJldmVudHMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZnJvbSBzcGxpdHRpbmcKKyAgICAgICAgICAgICAgICAgICAgb3V0IGRlYnVnIGluZm9ybWF0aW9uIGR1cmluZyBwYWNrYWdpbmcuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBidWlsZCBzeXN0ZW0gc3BsaXRzIG91dCBkZWJ1Z2dpbmcKKyAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZSc+PGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IGRlYnVnIGluZm9ybWF0aW9uIGlzIHNwbGl0IG91dCwKKyAgICAgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9ERUJVR19TUExJVF9TVFlMRSc+PGZpbGVuYW1lPlBBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIHByZXZlbnQgdGhlIGJ1aWxkIHN5c3RlbSBmcm9tIHNwbGl0dGluZyBvdXQKKyAgICAgICAgICAgICAgICAgICAgZGVidWcgaW5mb3JtYXRpb24gZHVyaW5nIHBhY2thZ2luZywgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhJQklUX1BBQ0tBR0VfREVCVUdfU1BMSVQgPSAiMSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOSElCSVRfUEFDS0FHRV9TVFJJUCc+PGdsb3NzdGVybT5JTkhJQklUX1BBQ0tBR0VfU1RSSVA8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElOSElCSVRfUEFDS0FHRV9TVFJJUFtkb2NdID0gIklmIHNldCB0byAiMSIsIGNhdXNlcyB0aGUgYnVpbGQgdG8gbm90IHN0cmlwIGJpbmFyaWVzIGluIHJlc3VsdGluZyBwYWNrYWdlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gIjEiLCBjYXVzZXMgdGhlIGJ1aWxkIHRvIG5vdCBzdHJpcCBiaW5hcmllcyBpbiByZXN1bHRpbmcgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5IRVJJVCc+PGdsb3NzdGVybT5JTkhFUklUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTkhFUklUW2RvY10gPSAiQ2F1c2VzIHRoZSBuYW1lZCBjbGFzcyB0byBiZSBpbmhlcml0ZWQgYXQgdGhpcyBwb2ludCBkdXJpbmcgcGFyc2luZy4gVGhlIHZhcmlhYmxlIGlzIG9ubHkgdmFsaWQgaW4gY29uZmlndXJhdGlvbiBmaWxlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBDYXVzZXMgdGhlIG5hbWVkIGNsYXNzIHRvIGJlIGluaGVyaXRlZCBhdAorICAgICAgICAgICAgICAgICAgICB0aGlzIHBvaW50IGR1cmluZyBwYXJzaW5nLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgaXMgb25seSB2YWxpZCBpbiBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOSEVSSVRfRElTVFJPJz48Z2xvc3N0ZXJtPklOSEVSSVRfRElTVFJPPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTkhFUklUX0RJU1RST1tkb2NdID0gIkxpc3RzIGNsYXNzZXMgdGhhdCB3aWxsIGJlIGluaGVyaXRlZCBhdCB0aGUgZGlzdHJpYnV0aW9uIGxldmVsLiBJdCBpcyB1bmxpa2VseSB0aGF0IHlvdSB3YW50IHRvIGVkaXQgdGhpcyB2YXJpYWJsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyBjbGFzc2VzIHRoYXQgd2lsbCBiZSBpbmhlcml0ZWQgYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiBsZXZlbC4KKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgdW5saWtlbHkgdGhhdCB5b3Ugd2FudCB0byBlZGl0IHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBpcyBzZXQgYXMgZm9sbG93cyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9kaXN0cm8vZGVmYXVsdHNldHVwLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSEVSSVRfRElTVFJPID89ICJkZWJpYW4gZGV2c2hlbGwgc3N0YXRlIGxpY2Vuc2UiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTklUUkFNRlNfRlNUWVBFUyc+PGdsb3NzdGVybT5JTklUUkFNRlNfRlNUWVBFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU5JVFJBTUZTX0ZTVFlQRVNbZG9jXSA9ICJEZWZpbmVzIHRoZSBmb3JtYXQgZm9yIHRoZSBvdXRwdXQgaW1hZ2Ugb2YgYW4gaW5pdGlhbCBSQU0gZGlzayAoaW5pdHJhbWZzKSwgd2hpY2ggaXMgdXNlZCBkdXJpbmcgYm9vdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBmb3JtYXQgZm9yIHRoZSBvdXRwdXQgaW1hZ2Ugb2YgYW4gaW5pdGlhbAorICAgICAgICAgICAgICAgICAgICBSQU0gZGlzayAoaW5pdHJhbWZzKSwgd2hpY2ggaXMgdXNlZCBkdXJpbmcgYm9vdC4KKyAgICAgICAgICAgICAgICAgICAgU3VwcG9ydGVkIGZvcm1hdHMgYXJlIHRoZSBzYW1lIGFzIHRob3NlIHN1cHBvcnRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOSVRSQU1GU19JTUFHRSc+PGdsb3NzdGVybT5JTklUUkFNRlNfSU1BR0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElOSVRSQU1GU19JTUFHRVtkb2NdID0gIkNhdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBidWlsZCBhbiBhZGRpdGlvbmFsIHJlY2lwZSBhcyBhIGRlcGVuZGVuY3kgdG8geW91ciByb290IGZpbGVzeXN0ZW0gcmVjaXBlIChlLmcuIGNvcmUtaW1hZ2Utc2F0bykuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGJ1aWxkIGFuIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGFzIGEgZGVwZW5kZW5jeSB0byB5b3VyIHJvb3QgZmlsZXN5c3RlbSByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPmNvcmUtaW1hZ2Utc2F0bzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGFkZGl0aW9uYWwgcmVjaXBlIGlzIHVzZWQgdG8gY3JlYXRlIGFuIGluaXRpYWwgUkFNIGRpc2sKKyAgICAgICAgICAgICAgICAgICAgKGluaXRyYW1mcykgdGhhdCBtaWdodCBiZSBuZWVkZWQgZHVyaW5nIHRoZSBpbml0aWFsIGJvb3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlIHRhcmdldCBzeXN0ZW0gdG8gYWNjb21wbGlzaCBzdWNoIHRoaW5ncyBhcyBsb2FkaW5nCisgICAgICAgICAgICAgICAgICAgIGtlcm5lbCBtb2R1bGVzIHByaW9yIHRvIG1vdW50aW5nIHRoZSByb290IGZpbGUgc3lzdGVtLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBzZXQgdGhlIHZhcmlhYmxlLCBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBpbml0cmFtZnMgeW91IHdhbnQgY3JlYXRlZC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlLCB3aGljaCBpcyBzZXQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlLCBjYXVzZXMKKyAgICAgICAgICAgICAgICAgICAgYSBzZXBhcmF0ZSByZWNpcGUgdG8gYmUgY3JlYXRlZCB0aGF0IHJlc3VsdHMgaW4gYW4KKyAgICAgICAgICAgICAgICAgICAgaW5pdHJhbWZzIGltYWdlIG5hbWVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG8taW5pdHJhbWZzLmJiPC9maWxlbmFtZT4gdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTklUUkFNRlNfSU1BR0UgPSAiY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMta2VybmVsJz48ZmlsZW5hbWU+a2VybmVsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHNldHMgdGhpcyB2YXJpYWJsZSB0byBhIG51bGwgc3RyaW5nIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5JVFJBTUZTX0lNQUdFID0gIiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0L2NnaXQuY2dpL3Bva3kvdHJlZS9tZXRhLXlvY3RvL2NvbmYvbG9jYWwuY29uZi5zYW1wbGUuZXh0ZW5kZWQnPjxmaWxlbmFtZT5sb2NhbC5jb25mLnNhbXBsZS5leHRlbmRlZDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgZmlsZSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHJlZmVyZW5jZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2kvcG9reS90cmVlL21ldGEvY2xhc3Nlcy9rZXJuZWwuYmJjbGFzcyc+PGZpbGVuYW1lPmtlcm5lbC5iYmNsYXNzPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBmaWxlIHRvIHNlZSBob3cgdGhlIHZhcmlhYmxlIGlzIHVzZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5JVFJBTUZTX0lNQUdFX0JVTkRMRSc+PGdsb3NzdGVybT5JTklUUkFNRlNfSU1BR0VfQlVORExFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTklUUkFNRlNfSU1BR0VfQlVORExFW2RvY10gPSAiQ29udHJvbHMgd2hldGhlciBvciBub3QgdGhlIGltYWdlIHJlY2lwZSBzcGVjaWZpZWQgYnkgSU5JVFJBTUZTX0lNQUdFIGlzIHJ1biB0aHJvdWdoIGFuIGV4dHJhIHBhc3MgZHVyaW5nIGtlcm5lbCBjb21waWxhdGlvbiBpbiBvcmRlciB0byBidWlsZCBhIHNpbmdsZSBiaW5hcnkgdGhhdCBjb250YWlucyBib3RoIHRoZSBrZXJuZWwgaW1hZ2UgYW5kIHRoZSBpbml0aWFsIFJBTSBkaXNrIChpbml0cmFtZnMpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzIHdoZXRoZXIgb3Igbm90IHRoZSBpbWFnZSByZWNpcGUgc3BlY2lmaWVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTklUUkFNRlNfSU1BR0UnPjxmaWxlbmFtZT5JTklUUkFNRlNfSU1BR0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgcnVuIHRocm91Z2ggYW4gZXh0cmEgcGFzcyBkdXJpbmcga2VybmVsIGNvbXBpbGF0aW9uCisgICAgICAgICAgICAgICAgICAgIGluIG9yZGVyIHRvIGJ1aWxkIGEgc2luZ2xlIGJpbmFyeSB0aGF0IGNvbnRhaW5zIGJvdGggdGhlCisgICAgICAgICAgICAgICAgICAgIGtlcm5lbCBpbWFnZSBhbmQgdGhlIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyYW1mcykuCisgICAgICAgICAgICAgICAgICAgIFVzaW5nIGFuIGV4dHJhIGNvbXBpbGF0aW9uIHBhc3MgZW5zdXJlcyB0aGF0IHdoZW4gYSBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMgdG8gdXNlIGFuIGluaXRyYW1mcywgaXQgZG9lcyBub3QgZW5jb3VudGVyCisgICAgICAgICAgICAgICAgICAgIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBzaG91bGQgdGhlIGluaXRyYW1mcyBpbmNsdWRlIGtlcm5lbAorICAgICAgICAgICAgICAgICAgICBtb2R1bGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgY29tYmluZWQgYmluYXJ5IGlzIGRlcG9zaXRlZCBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL2RlcGxveTwvZmlsZW5hbWU+IGRpcmVjdG9yeSwgd2hpY2ggaXMgcGFydAorICAgICAgICAgICAgICAgICAgICBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB0aGUgdmFyaWFibGUgdG8gIjEiIGluIGEgY29uZmlndXJhdGlvbiBmaWxlIGNhdXNlcworICAgICAgICAgICAgICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBtYWtlIHRoZSBleHRyYSBwYXNzIGR1cmluZworICAgICAgICAgICAgICAgICAgICBrZXJuZWwgY29tcGlsYXRpb246CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5JVFJBTUZTX0lNQUdFX0JVTkRMRSA9ICIxIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1rZXJuZWwnPjxmaWxlbmFtZT5rZXJuZWw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3Mgc2V0cyB0aGlzIHZhcmlhYmxlIHRvIGEgbnVsbCBzdHJpbmcgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTklUUkFNRlNfSU1BR0VfQlVORExFID0gIiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5JTklUUkFNRlNfSU1BR0VfQlVORExFPC9maWxlbmFtZT4gdmFyaWFibGUgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGEgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbm5vdCBzZXQgdGhlIHZhcmlhYmxlIGluIGEgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC9jZ2l0LmNnaS9wb2t5L3RyZWUvbWV0YS15b2N0by9jb25mL2xvY2FsLmNvbmYuc2FtcGxlLmV4dGVuZGVkJz48ZmlsZW5hbWU+bG9jYWwuY29uZi5zYW1wbGUuZXh0ZW5kZWQ8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGZpbGUgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5JVFJEJz48Z2xvc3N0ZXJtPklOSVRSRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU5JVFJEW2RvY10gPSAiSW5kaWNhdGVzIGEgbGlzdCBvZiBmaWxlc3lzdGVtIGltYWdlcyB0byBjb25jYXRlbmF0ZSBhbmQgdXNlIGFzIGFuIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyZCkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSW5kaWNhdGVzIGxpc3Qgb2YgZmlsZXN5c3RlbSBpbWFnZXMgdG8gY29uY2F0ZW5hdGUgYW5kIHVzZQorICAgICAgICAgICAgICAgICAgICBhcyBhbiBpbml0aWFsIFJBTSBkaXNrICg8ZmlsZW5hbWU+aW5pdHJkPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPklOSVRSRDwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIGFuIG9wdGlvbmFsCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHVzZWQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYm9vdGltZyc+PGZpbGVuYW1lPmJvb3RpbWc8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5JVFJEX0lNQUdFJz48Z2xvc3N0ZXJtPklOSVRSRF9JTUFHRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU5JVFJEX0lNQUdFW2RvY10gPSAiV2hlbiBidWlsZGluZyBhICJsaXZlIiBib290YWJsZSBpbWFnZSAoaS5lLiB3aGVuIElNQUdFX0ZTVFlQRVMgY29udGFpbnMgImxpdmUiKSwgSU5JVFJEX0lNQUdFIHNwZWNpZmllcyB0aGUgaW1hZ2UgcmVjaXBlIHRoYXQgc2hvdWxkIGJlIGJ1aWx0IHRvIHByb3ZpZGUgdGhlIGluaXRpYWwgUkFNIGRpc2sgaW1hZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyBhICJsaXZlIiBib290YWJsZSBpbWFnZSAoaS5lLiB3aGVuCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GU1RZUEVTJz48ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjb250YWlucyAibGl2ZSIpLCA8ZmlsZW5hbWU+SU5JVFJEX0lNQUdFPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIHRoZSBpbWFnZSByZWNpcGUgdGhhdCBzaG91bGQgYmUgYnVpbHQKKyAgICAgICAgICAgICAgICAgICAgdG8gcHJvdmlkZSB0aGUgaW5pdGlhbCBSQU0gZGlzayBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgImNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWltYWdlLWxpdmUnPjxmaWxlbmFtZT5pbWFnZS1saXZlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOSVRTQ1JJUFRfTkFNRSc+PGdsb3NzdGVybT5JTklUU0NSSVBUX05BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElOSVRTQ1JJUFRfTkFNRVtkb2NdID0gIlRoZSBmaWxlbmFtZSBvZiB0aGUgaW5pdGlhbGl6YXRpb24gc2NyaXB0IGFzIGluc3RhbGxlZCB0byAke3N5c2NvbmZkaXJ9L2luaXQuZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlsZW5hbWUgb2YgdGhlIGluaXRpYWxpemF0aW9uIHNjcmlwdCBhcyBpbnN0YWxsZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7c3lzY29uZmRpcn0vaW5pdC5kPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiByZWNpcGVzIHdoZW4gdXNpbmcgPGZpbGVuYW1lPnVwZGF0ZS1yYy5kLmJiY2xhc3M8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGlzIG1hbmRhdG9yeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTklUU0NSSVBUX1BBQ0tBR0VTJz48Z2xvc3N0ZXJtPklOSVRTQ1JJUFRfUEFDS0FHRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElOSVRTQ1JJUFRfUEFDS0FHRVNbZG9jXSA9ICJBIGxpc3Qgb2YgdGhlIHBhY2thZ2VzIHRoYXQgY29udGFpbiBpbml0c2NyaXB0cy4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIHJlY2lwZXMgd2hlbiB1c2luZyB1cGRhdGUtcmMuZC5iYmNsYXNzLiBUaGUgdmFyaWFibGUgaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIHRoZSBQTiB2YXJpYWJsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgdGhlIHBhY2thZ2VzIHRoYXQgY29udGFpbiBpbml0c2NyaXB0cy4KKyAgICAgICAgICAgICAgICAgICAgSWYgbXVsdGlwbGUgcGFja2FnZXMgYXJlIHNwZWNpZmllZCwgeW91IG5lZWQgdG8gYXBwZW5kIHRoZSBwYWNrYWdlIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIG90aGVyIDxmaWxlbmFtZT5JTklUU0NSSVBUXyo8L2ZpbGVuYW1lPiBhcyBhbiBvdmVycmlkZS4KKyAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgaW4gcmVjaXBlcyB3aGVuIHVzaW5nIDxmaWxlbmFtZT51cGRhdGUtcmMuZC5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5JVFNDUklQVF9QQVJBTVMnPjxnbG9zc3Rlcm0+SU5JVFNDUklQVF9QQVJBTVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElOSVRTQ1JJUFRfUEFSQU1TW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBvcHRpb25zIHRvIHBhc3MgdG8gdXBkYXRlLXJjLmQuIFRoZSB2YXJpYWJsZSBpcyBtYW5kYXRvcnkgYW5kIGlzIHVzZWQgaW4gcmVjaXBlcyB3aGVuIHVzaW5nIHVwZGF0ZS1yYy5kLmJiY2xhc3MuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBvcHRpb25zIHRvIHBhc3MgdG8gPGZpbGVuYW1lPnVwZGF0ZS1yYy5kPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCA5OSA1IDIgLiBzdG9wIDIwIDAgMSA2IC4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgc2NyaXB0IGhhcyBhIHJ1bmxldmVsIG9mIDk5LAorICAgICAgICAgICAgICAgICAgICBzdGFydHMgdGhlIHNjcmlwdCBpbiBpbml0bGV2ZWxzIDIgYW5kIDUsIGFuZAorICAgICAgICAgICAgICAgICAgICBzdG9wcyB0aGUgc2NyaXB0IGluIGxldmVscyAwLCAxIGFuZCA2LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUncyBkZWZhdWx0IHZhbHVlIGlzICJkZWZhdWx0cyIsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgICAgIHNldCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtdXBkYXRlLXJjLmQnPjxmaWxlbmFtZT51cGRhdGUtcmMuZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5JTklUU0NSSVBUX1BBUkFNUzwvZmlsZW5hbWU+IGlzIHBhc3NlZCB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSA8ZmlsZW5hbWU+dXBkYXRlLXJjLmQ8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB2YWxpZCBwYXJhbWV0ZXJzLCBwbGVhc2Ugc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dXBkYXRlLXJjLmQ8L2ZpbGVuYW1lPiBtYW51YWwgcGFnZSBhdAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LnRpbi5vcmcvYmluL21hbi5jZ2k/c2VjdGlvbj04JmFtcDt0b3BpYz11cGRhdGUtcmMuZCc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5TQU5FX1NLSVAnPjxnbG9zc3Rlcm0+SU5TQU5FX1NLSVA8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElOU0FORV9TS0lQW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBRQSBjaGVja3MgdG8gc2tpcCBmb3IgYSBzcGVjaWZpYyBwYWNrYWdlIHdpdGhpbiBhIHJlY2lwZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIFFBIGNoZWNrcyB0byBza2lwIGZvciBhIHNwZWNpZmljIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIGEgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdG8gc2tpcCB0aGUgY2hlY2sgZm9yIHN5bWJvbGljIGxpbmsKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5zbzwvZmlsZW5hbWU+IGZpbGVzIGluIHRoZSBtYWluIHBhY2thZ2Ugb2YgYQorICAgICAgICAgICAgICAgICAgICByZWNpcGUsIGFkZCB0aGUgZm9sbG93aW5nIHRvIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBwYWNrYWdlIG5hbWUgb3ZlcnJpZGUgbXVzdCBiZSB1c2VkLCB3aGljaCBpbiB0aGlzCisgICAgICAgICAgICAgICAgICAgIGV4YW1wbGUgaXMgPGZpbGVuYW1lPiR7UE59PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5TQU5FX1NLSVBfJHtQTn0gKz0gImRldi1zbyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pbnNhbmUnPjxmaWxlbmFtZT5pbnNhbmUuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgYSBsaXN0IG9mIHRoZSB2YWxpZCBRQSBjaGVja3MgeW91IGNhbgorICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IHVzaW5nIHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSVBLX0ZFRURfVVJJUyc+PGdsb3NzdGVybT5JUEtfRkVFRF9VUklTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJUEtfRkVFRF9VUklTW2RvY10gPSAiTGlzdCBvZiBpcGtnIGZlZWQgcmVjb3JkcyB0byBwdXQgaW50byBnZW5lcmF0ZWQgaW1hZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB0aGUgSVBLIGJhY2tlbmQgaXMgaW4gdXNlIGFuZCBwYWNrYWdlIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgaXMgZW5hYmxlZCBvbiB0aGUgdGFyZ2V0LCB5b3UgY2FuIHVzZSB0aGlzIHZhcmlhYmxlIHRvCisgICAgICAgICAgICAgICAgICAgIHNldCB1cCA8ZmlsZW5hbWU+b3BrZzwvZmlsZW5hbWU+IGluIHRoZSB0YXJnZXQgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgdG8gcG9pbnQgdG8gcGFja2FnZSBmZWVkcyBvbiBhIG5vbWluYXRlZCBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgIE9uY2UgdGhlIGZlZWQgaXMgZXN0YWJsaXNoZWQsIHlvdSBjYW4gcGVyZm9ybQorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb25zIG9yIHVwZ3JhZGVzIHVzaW5nIHRoZSBwYWNrYWdlIG1hbmFnZXIKKyAgICAgICAgICAgICAgICAgICAgYXQgcnVudGltZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKzwhLS0KKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTlRFUkNFUFRfRElSJz48Z2xvc3N0ZXJtPklOVEVSQ0VQVF9ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdGhhdCBkZWZpbmVzIHRoZSBkaXJlY3Rvcnkgd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgcG9zdCBpbnN0YWxsYXRpb24gaG9va3MgYXJlIGluc3RhbGxlZCBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIHBvc3QgaW5zdGFsbCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBmaXhlZCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICR7V09SS0RJUn0vaW50ZXJjZXB0X3NjcmlwdHMKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBZnRlciBpbnN0YWxsYXRpb24gb2YgYSB0YXJnZXQncyByb290IGZpbGVzeXN0ZW0sCisgICAgICAgICAgICAgICAgICAgIHBvc3QgaW5zdGFsbGF0aW9uIHNjcmlwdHMsIHdoaWNoIGFyZSBlc3NlbnRpYWxseSBiYXNoIHNjcmlwdHMsCisgICAgICAgICAgICAgICAgICAgIGFyZSBhbGwgZXhlY3V0ZWQganVzdCBhIHNpbmdsZSB0aW1lLgorICAgICAgICAgICAgICAgICAgICBMaW1pdGluZyBleGVjdXRpb24gb2YgdGhlc2Ugc2NyaXB0cyBtaW5pbWl6ZXMgaW5zdGFsbGF0aW9uCisgICAgICAgICAgICAgICAgICAgIHRpbWUgdGhhdCB3b3VsZCBiZSBsZW5ndGhlbmVkIGR1ZSB0byAgY2VydGFpbiBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyaW5nIHJlZHVuZGFudCBvcGVyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhlIGluc3RhbGxhdGlvbiBvZiBmb250IHBhY2thZ2VzCisgICAgICAgICAgICAgICAgICAgIGFzIGEgY29tbW9uIGV4YW1wbGUuCisgICAgICAgICAgICAgICAgICAgIFdpdGhvdXQgbGltaXRpbmcgdGhlIGV4ZWN1dGlvbiBvZiBwb3N0IGluc3RhbGxhdGlvbiBzY3JpcHRzLAorICAgICAgICAgICAgICAgICAgICBhbGwgZm9udCBkaXJlY3RvcmllcyB3b3VsZCBiZSByZXNjYW5uZWQgdG8gY3JlYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICBjYWNoZSBhZnRlciBlYWNoIGluZGl2aWR1YWwgZm9udCBwYWNrYWdlIHdhcyBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERvIG5vdCBlZGl0IHRoZSA8ZmlsZW5hbWU+SU5URVJDRVBUX0RJUjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKy0tPgorCisgICAgPC9nbG9zc2Rpdj4KKworPCEtLSAgICAgICAgICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWonPjx0aXRsZT5KPC90aXRsZT4tLT4KKzwhLS0gICAgICAgICAgICA8L2dsb3NzZGl2Pi0tPgorCisgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1rJz48dGl0bGU+SzwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LQVJDSCc+PGdsb3NzdGVybT5LQVJDSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgS0FSQ0hbZG9jXSA9ICJEZWZpbmVzIHRoZSBrZXJuZWwgYXJjaGl0ZWN0dXJlIHVzZWQgd2hlbiBhc3NlbWJsaW5nIHRoZSBjb25maWd1cmF0aW9uLiBZb3UgZGVmaW5lIHRoZSBLQVJDSCB2YXJpYWJsZSBpbiB0aGUgQlNQIERlc2NyaXB0aW9ucy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBrZXJuZWwgYXJjaGl0ZWN0dXJlIHVzZWQgd2hlbiBhc3NlbWJsaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBBcmNoaXRlY3R1cmVzIHN1cHBvcnRlZCBmb3IgdGhpcyByZWxlYXNlIGFyZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwb3dlcnBjCisgICAgIGkzODYKKyAgICAgeDg2XzY0CisgICAgIGFybQorICAgICBxZW11CisgICAgIG1pcHMKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgZGVmaW5lIHRoZSA8ZmlsZW5hbWU+S0FSQ0g8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7I2JzcC1kZXNjcmlwdGlvbnMnPkJTUCBEZXNjcmlwdGlvbnM8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LQlJBTkNIJz48Z2xvc3N0ZXJtPktCUkFOQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEtCUkFOQ0hbZG9jXSA9ICJBIHJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIGJ5IHRoZSBidWlsZCBwcm9jZXNzIHRvIGV4cGxpY2l0bHkgaWRlbnRpZnkgdGhlIGtlcm5lbCBicmFuY2ggdGhhdCBpcyB2YWxpZGF0ZWQsIHBhdGNoZWQgYW5kIGNvbmZpZ3VyZWQgZHVyaW5nIGEgYnVpbGQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSByZWd1bGFyIGV4cHJlc3Npb24gdXNlZCBieSB0aGUgYnVpbGQgcHJvY2VzcyB0byBleHBsaWNpdGx5CisgICAgICAgICAgICAgICAgICAgIGlkZW50aWZ5IHRoZSBrZXJuZWwgYnJhbmNoIHRoYXQgaXMgdmFsaWRhdGVkLCBwYXRjaGVkLAorICAgICAgICAgICAgICAgICAgICBhbmQgY29uZmlndXJlZCBkdXJpbmcgYSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3Qgc2V0IHRoaXMgdmFyaWFibGUgdG8gZW5zdXJlIHRoZSBleGFjdCBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoIHlvdSB3YW50IGlzIGJlaW5nIHVzZWQgYnkgdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFZhbHVlcyBmb3IgdGhpcyB2YXJpYWJsZSBhcmUgc2V0IGluIHRoZSBrZXJuZWwncyByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgZmlsZSBhbmQgdGhlIGtlcm5lbCdzIGFwcGVuZCBmaWxlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgdGhhdAorICAgICAgICAgICAgICAgICAgICBpcyBiYXNlZCBvbiB0aGUgTGludXggMy4xNCBrZXJuZWwsIHRoZSBrZXJuZWwgcmVjaXBlIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBmb3IgYSBrZXJuZWwgcmVjaXBlIGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0JSQU5DSCA/PSAic3RhbmRhcmQvYmFzZSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIGFsc28gdXNlZCBmcm9tIHRoZSBrZXJuZWwncyBhcHBlbmQgZmlsZQorICAgICAgICAgICAgICAgICAgICB0byBpZGVudGlmeSB0aGUga2VybmVsIGJyYW5jaCBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZSBvciB0YXJnZXQgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBrZXJuZWwncyBhcHBlbmQgZmlsZSBpcyBsb2NhdGVkIGluIHRoZSBCU1AgbGF5ZXIgZm9yCisgICAgICAgICAgICAgICAgICAgIGEgZ2l2ZW4gbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBrZXJuZWwgYXBwZW5kIGZpbGUgZm9yIHRoZSBFbWVubG93IEJTUCBpcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSBhbmQgaXMgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtZW1lbmxvdy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHRoZSByZWxhdGVkIHN0YXRlbWVudHMgZnJvbSB0aGUgYXBwZW5kIGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQ09NUEFUSUJMRV9NQUNISU5FX2VtZW5sb3ctbm9lbWdkID0gImVtZW5sb3ctbm9lbWdkIgorICAgICBLTUFDSElORV9lbWVubG93LW5vZW1nZCA9ICJlbWVubG93IgorICAgICBLQlJBTkNIX2VtZW5sb3ctbm9lbWdkID0gInN0YW5kYXJkL2Jhc2UiCisgICAgIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfZW1lbmxvdy1ub2VtZ2QgPSAiIGZlYXR1cmVzL2RybS1nbWE1MDAvZHJtLWdtYTUwMC5zY2MiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+S0JSQU5DSDwvZmlsZW5hbWU+IHN0YXRlbWVudCBpZGVudGlmaWVzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUga2VybmVsIGJyYW5jaCB0byB1c2Ugd2hlbiBidWlsZGluZyBmb3IgdGhlIEVtZW5sb3cKKyAgICAgICAgICAgICAgICAgICAgICAgIEJTUC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LQlVJTERfREVGQ09ORklHJz48Z2xvc3N0ZXJtPktCVUlMRF9ERUZDT05GSUc8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEtCVUlMRF9ERUZDT05GSUdbZG9jXSA9ICJTcGVjaWZpZXMgYW4gImluLXRyZWUiIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHVzZSBkdXJpbmcgYSBrZXJuZWwgYnVpbGQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB1c2VkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWtlcm5lbC15b2N0byc+PGZpbGVuYW1lPmtlcm5lbC15b2N0bzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgc3BlY2lmaWVzIGFuICJpbi10cmVlIiBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgICAgICAgICAgICAgIGZvciB1c2UgZHVyaW5nIGEga2VybmVsIGJ1aWxkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHdoZW4gdXNpbmcgYSA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIGEga2VybmVsIGR1cmluZyBhIGJ1aWxkLCB5b3UgcGxhY2UgdGhlCisgICAgICAgICAgICAgICAgICAgIGZpbGUgaW4geW91ciBsYXllciBpbiB0aGUgc2FtZSBtYW5uZXIgYXMgeW91IHdvdWxkCisgICAgICAgICAgICAgICAgICAgIHBhdGNoIGZpbGVzIGFuZCBjb25maWd1cmF0aW9uIGZyYWdtZW50IGZpbGVzIChpLmUuCisgICAgICAgICAgICAgICAgICAgICJvdXQtb2YtdHJlZSIpLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3Ugd2FudCB0byB1c2UgYSA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZSB0aGF0IGlzIHBhcnQgb2YgdGhlIGtlcm5lbCB0cmVlIChpLmUuICJpbi10cmVlIiksCisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0JVSUxEX0RFRkNPTkZJRzwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvIHBvaW50CisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gdXNlIHRoZSB2YXJpYWJsZSwgc2V0IGl0IGluIHRoZSBhcHBlbmQgZmlsZSBmb3IgeW91cgorICAgICAgICAgICAgICAgICAgICBrZXJuZWwgcmVjaXBlIHVzaW5nIHRoZSBmb2xsb3dpbmcgZm9ybToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBLQlVJTERfREVGQ09ORklHXzxsaW5rIGxpbmtlbmQ9J3Zhci1LTUFDSElORSc+S01BQ0hJTkU8L2xpbms+ID89IDxyZXBsYWNlYWJsZT5kZWZjb25maWdfZmlsZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGZyb20gYSAicmFzcGJlcnJ5cGkyIgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPiBidWlsZCB0aGF0IHVzZXMgYQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZSBuYW1lZAorICAgICAgICAgICAgICAgICAgICAiYmNtMjcwOV9kZWZjb25maWciOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtCVUlMRF9ERUZDT05GSUdfcmFzcGJlcnJ5cGkyID0gImJjbTI3MDlfZGVmY29uZmlnIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEFzIGFuIGFsdGVybmF0aXZlLCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIHdpdGhpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZCBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtCVUlMRF9ERUZDT05GSUdfcG4tbGludXgteW9jdG8gPz0gPHJlcGxhY2VhYmxlPmRlZmNvbmZpZ19maWxlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0JVSUxEX0RFRkNPTkZJRzwvZmlsZW5hbWU+IHZhcmlhYmxlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsjdXNpbmctYW4taW4tdHJlZS1kZWZjb25maWctZmlsZSc+VXNpbmcgYW4gIkluLVRyZWUiIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBGaWxlPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItS0VSTkVMX0NMQVNTRVMnPjxnbG9zc3Rlcm0+S0VSTkVMX0NMQVNTRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEtFUk5FTF9DTEFTU0VTW2RvY10gPSAiQSBsaXN0IG9mIGNsYXNzZXMgZGVmaW5pbmcga2VybmVsIGltYWdlIHR5cGVzIHRoYXQga2VybmVsIGNsYXNzIHNob3VsZCBpbmhlcml0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBjbGFzc2VzIGRlZmluaW5nIGtlcm5lbCBpbWFnZSB0eXBlcyB0aGF0IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1rZXJuZWwnPjxmaWxlbmFtZT5rZXJuZWw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3Mgc2hvdWxkIGluaGVyaXQuCisgICAgICAgICAgICAgICAgICAgIFlvdSB0eXBpY2FsbHkgYXBwZW5kIHRoaXMgdmFyaWFibGUgdG8gZW5hYmxlIGV4dGVuZGVkIGltYWdlCisgICAgICAgICAgICAgICAgICAgIHR5cGVzLgorICAgICAgICAgICAgICAgICAgICBBbiBleGFtcGxlIGlzIHRoZSAia2VybmVsLWZpdGltYWdlIiwgd2hpY2ggZW5hYmxlcworICAgICAgICAgICAgICAgICAgICBmaXRJbWFnZSBzdXBwb3J0IGFuZCByZXNpZGVzIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMva2VybmVsLWZpdGltYWdlLmJiY2xhc3M8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiByZWdpc3RlciBjdXN0b20ga2VybmVsIGltYWdlIHR5cGVzIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5rZXJuZWw8L2ZpbGVuYW1lPiBjbGFzcyB1c2luZyB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUtFUk5FTF9FWFRSQV9BUkdTJz48Z2xvc3N0ZXJtPktFUk5FTF9FWFRSQV9BUkdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBLRVJORUxfRVhUUkFfQVJHU1tkb2NdID0gIlNwZWNpZmllcyBhZGRpdGlvbmFsIG1ha2UgY29tbWFuZC1saW5lIGFyZ3VtZW50cyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwYXNzZXMgb24gd2hlbiBjb21waWxpbmcgdGhlIGtlcm5lbC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYWRkaXRpb25hbCA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgcGFzc2VzIG9uIHdoZW4gY29tcGlsaW5nIHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItS0VSTkVMX0ZFQVRVUkVTJz48Z2xvc3N0ZXJtPktFUk5FTF9GRUFUVVJFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgS0VSTkVMX0ZFQVRVUkVTW2RvY10gPSAiSW5jbHVkZXMgYWRkaXRpb25hbCBtZXRhZGF0YSBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBHaXQgcmVwb3NpdG9yeS4gVGhlIG1ldGFkYXRhIHlvdSBhZGQgdGhyb3VnaCB0aGlzIHZhcmlhYmxlIGluY2x1ZGVzIGNvbmZpZyBmcmFnbWVudHMgYW5kIGZlYXR1cmVzIGRlc2NyaXB0aW9ucy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBJbmNsdWRlcyBhZGRpdGlvbmFsIG1ldGFkYXRhIGZyb20gdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICBJbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSwgdGhlIGRlZmF1bHQgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQcykKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgcHJvdmlkZWQgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICB0aGUgPGxpbmsgbGlua2VuZD0ndmFyLUtNQUNISU5FJz48ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kIDxsaW5rIGxpbmtlbmQ9J3Zhci1LQlJBTkNIJz48ZmlsZW5hbWU+S0JSQU5DSDwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+S0VSTkVMX0ZFQVRVUkVTPC9maWxlbmFtZT4gdmFyaWFibGUgdG8gZnVydGhlcgorICAgICAgICAgICAgICAgICAgICBhZGQgbWV0YWRhdGEgZm9yIGFsbCBCU1BzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgbWV0YWRhdGEgeW91IGFkZCB0aHJvdWdoIHRoaXMgdmFyaWFibGUgaW5jbHVkZXMgY29uZmlnIGZyYWdtZW50cyBhbmQKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgZGVzY3JpcHRpb25zLAorICAgICAgICAgICAgICAgICAgICB3aGljaCB1c3VhbGx5IGluY2x1ZGVzIHBhdGNoZXMgYXMgd2VsbCBhcyBjb25maWcgZnJhZ21lbnRzLgorICAgICAgICAgICAgICAgICAgICBZb3UgdHlwaWNhbGx5IG92ZXJyaWRlIHRoZSA8ZmlsZW5hbWU+S0VSTkVMX0ZFQVRVUkVTPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgZm9yIGEgc3BlY2lmaWMgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyB3YXksIHlvdSBjYW4gcHJvdmlkZSB2YWxpZGF0ZWQsIGJ1dCBvcHRpb25hbCwgc2V0cyBvZiBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMgYW5kIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBhZGRzIDxmaWxlbmFtZT5uZXRmaWx0ZXI8L2ZpbGVuYW1lPiB0byBhbGwKKyAgICAgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3Qga2VybmVscyBhbmQgYWRkcyBzb3VuZCBzdXBwb3J0IHRvIHRoZSA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBBZGQgbmV0ZmlsdGVyIHRvIGFsbCBsaW51eC15b2N0byBrZXJuZWxzCisgICAgIEtFUk5FTF9GRUFUVVJFUz0iZmVhdHVyZXMvbmV0ZmlsdGVyL25ldGZpbHRlci5zY2MiCisKKyAgICAgIyBBZGQgc291bmQgc3VwcG9ydCB0byB0aGUgcWVtdXg4NiBtYWNoaW5lCisgICAgIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Nj0iIGNmZy9zb3VuZC5zY2MiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LRVJORUxfSU1BR0VfQkFTRV9OQU1FJz48Z2xvc3N0ZXJtPktFUk5FTF9JTUFHRV9CQVNFX05BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEtFUk5FTF9JTUFHRV9CQVNFX05BTUVbZG9jXSA9ICJUaGUgYmFzZSBuYW1lIG9mIHRoZSBrZXJuZWwgaW1hZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJhc2UgbmFtZSBvZiB0aGUga2VybmVsIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHNldCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMta2VybmVsJz5rZXJuZWw8L2xpbms+IGNsYXNzCisgICAgICAgICAgICAgICAgICAgIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0VSTkVMX0lNQUdFX0JBU0VfTkFNRSA/PSAiJHtLRVJORUxfSU1BR0VUWVBFfS0ke1BLR0V9LSR7UEtHVn0tJHtQS0dSfS0ke01BQ0hJTkV9LSR7REFURVRJTUV9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtFUk5FTF9JTUFHRVRZUEUnPjxmaWxlbmFtZT5LRVJORUxfSU1BR0VUWVBFPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEtHRSc+PGZpbGVuYW1lPlBLR0U8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QS0dWJz48ZmlsZW5hbWU+UEtHVjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBLR1InPjxmaWxlbmFtZT5QS0dSPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREFURVRJTUUnPjxmaWxlbmFtZT5EQVRFVElNRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItS0VSTkVMX0lNQUdFX01BWFNJWkUnPjxnbG9zc3Rlcm0+S0VSTkVMX0lNQUdFX01BWFNJWkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEtFUk5FTF9JTUFHRV9NQVhTSVpFW2RvY10gPSAiVGhlIG1heGltdW0gYWxsb3dhYmxlIHNpemUgaW4ga2lsb2J5dGVzIG9mIHRoZSBrZXJuZWwgaW1hZ2UgZmlsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUga2VybmVsIGltYWdlIGZpbGUgaW4KKyAgICAgICAgICAgICAgICAgICAga2lsb2J5dGVzLgorICAgICAgICAgICAgICAgICAgICBJZiA8ZmlsZW5hbWU+S0VSTkVMX0lNQUdFX01BWFNJWkU8L2ZpbGVuYW1lPiBpcyBzZXQsCisgICAgICAgICAgICAgICAgICAgIHRoZSBzaXplIG9mIHRoZSBrZXJuZWwgaW1hZ2UgZmlsZSBpcyBjaGVja2VkIGFnYWluc3QKKyAgICAgICAgICAgICAgICAgICAgdGhlIHNldCB2YWx1ZSBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1zaXplY2hlY2snPjxmaWxlbmFtZT5kb19zaXplY2hlY2s8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHRhc2sgZmFpbHMgaWYgdGhlIGtlcm5lbCBpbWFnZSBmaWxlIGlzIGxhcmdlciB0aGFuCisgICAgICAgICAgICAgICAgICAgIHRoZSBzZXR0aW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0VSTkVMX0lNQUdFX01BWFNJWkU8L2ZpbGVuYW1lPiBpcyB1c2VmdWwgZm9yCisgICAgICAgICAgICAgICAgICAgIHRhcmdldCBkZXZpY2VzIHRoYXQgaGF2ZSBhIGxpbWl0ZWQgYW1vdW50IG9mIHNwYWNlIGluCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRoZSBrZXJuZWwgaW1hZ2UgbXVzdCBiZSBzdG9yZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgdmFyaWFibGUgaXMgbm90IHNldCwgd2hpY2ggbWVhbnMgdGhlCisgICAgICAgICAgICAgICAgICAgIHNpemUgb2YgdGhlIGtlcm5lbCBpbWFnZSBpcyBub3QgY2hlY2tlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LRVJORUxfSU1BR0VUWVBFJz48Z2xvc3N0ZXJtPktFUk5FTF9JTUFHRVRZUEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEtFUk5FTF9JTUFHRVRZUEVbZG9jXSA9ICJUaGUgdHlwZSBvZiBrZXJuZWwgdG8gYnVpbGQgZm9yIGEgZGV2aWNlLCB1c3VhbGx5IHNldCBieSB0aGUgbWFjaGluZSBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBkZWZhdWx0cyB0byAnekltYWdlJy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgdHlwZSBvZiBrZXJuZWwgdG8gYnVpbGQgZm9yIGEgZGV2aWNlLCB1c3VhbGx5IHNldCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZSBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBkZWZhdWx0cyB0byAiekltYWdlIi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkCisgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgdGhlIGtlcm5lbCBhbmQgaXMgcGFzc2VkIHRvIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gYXMgdGhlIHRhcmdldCB0bworICAgICAgICAgICAgICAgICAgICBidWlsZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LRVJORUxfTU9EVUxFX0FVVE9MT0FEJz48Z2xvc3N0ZXJtPktFUk5FTF9NT0RVTEVfQVVUT0xPQUQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEtFUk5FTF9NT0RVTEVfQVVUT0xPQURbZG9jXSA9ICJMaXN0cyBrZXJuZWwgbW9kdWxlcyB0aGF0IG5lZWQgdG8gYmUgYXV0by1sb2FkZWQgZHVyaW5nIGJvb3QiCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyBrZXJuZWwgbW9kdWxlcyB0aGF0IG5lZWQgdG8gYmUgYXV0by1sb2FkZWQgZHVyaW5nCisgICAgICAgICAgICAgICAgICAgIGJvb3QuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSByZXBsYWNlcyB0aGUgZGVwcmVjYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLW1vZHVsZV9hdXRvbG9hZCc+PGZpbGVuYW1lPm1vZHVsZV9hdXRvbG9hZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5LRVJORUxfTU9EVUxFX0FVVE9MT0FEPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYW55d2hlcmUgdGhhdCBpdCBjYW4gYmUKKyAgICAgICAgICAgICAgICAgICAgcmVjb2duaXplZCBieSB0aGUga2VybmVsIHJlY2lwZSBvciBieSBhbiBvdXQtb2YtdHJlZSBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlIHJlY2lwZSAoZS5nLiBhIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlLCBhCisgICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGZpbGUsIGFuIGFwcGVuZCBmaWxlIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlLCBvciB0aGUgcmVjaXBlIGl0c2VsZikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZnkgaXQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBLRVJORUxfTU9EVUxFX0FVVE9MT0FEICs9ICI8cmVwbGFjZWFibGU+bW9kdWxlX25hbWUxPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPm1vZHVsZV9uYW1lMjwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5tb2R1bGVfbmFtZTM8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbmNsdWRpbmcgPGZpbGVuYW1lPktFUk5FTF9NT0RVTEVfQVVUT0xPQUQ8L2ZpbGVuYW1lPiBjYXVzZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gcG9wdWxhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL21vZHVsZXMtbG9hZC5kL21vZG5hbWUuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGUgd2l0aCB0aGUgbGlzdCBvZiBtb2R1bGVzIHRvIGJlIGF1dG8tbG9hZGVkIG9uIGJvb3QuCisgICAgICAgICAgICAgICAgICAgIFRoZSBtb2R1bGVzIGFwcGVhciBvbmUtcGVyLWxpbmUgaW4gdGhlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiB0aGUgbW9zdCBjb21tb24gdXNlIGNhc2U6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0VSTkVMX01PRFVMRV9BVVRPTE9BRCArPSAiPHJlcGxhY2VhYmxlPm1vZHVsZV9uYW1lPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBwb3B1bGF0ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1vZG5hbWUuY29uZjwvZmlsZW5hbWU+IGZpbGUgd2l0aAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bW9kcHJvYmUuZDwvZmlsZW5hbWU+IHN5bnRheCBsaW5lcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItS0VSTkVMX01PRFVMRV9QUk9CRUNPTkYnPjxmaWxlbmFtZT5LRVJORUxfTU9EVUxFX1BST0JFQ09ORjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LRVJORUxfTU9EVUxFX1BST0JFQ09ORic+PGdsb3NzdGVybT5LRVJORUxfTU9EVUxFX1BST0JFQ09ORjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgS0VSTkVMX01PRFVMRV9QUk9CRUNPTkZbZG9jXSA9ICJMaXN0cyBrZXJuZWwgbW9kdWxlcyBmb3Igd2hpY2ggdGhlIGJ1aWxkIHN5c3RlbSBleHBlY3RzIHRvIGZpbmQgbW9kdWxlX2NvbmZfKiB2YWx1ZXMgdGhhdCBzcGVjaWZ5IGNvbmZpZ3VyYXRpb24gZm9yIGVhY2ggb2YgdGhlIG1vZHVsZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXMgYSBsaXN0IG9mIG1vZHVsZXMgZm9yIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIGV4cGVjdHMgdG8gZmluZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bW9kdWxlX2NvbmZfPC9maWxlbmFtZT48cmVwbGFjZWFibGU+bW9kbmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcyB0aGF0IHNwZWNpZnkgY29uZmlndXJhdGlvbiBmb3IgZWFjaCBvZiB0aGUgbW9kdWxlcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBwcm92aWRlIHRob3NlIG1vZHVsZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItbW9kdWxlX2NvbmYnPjxmaWxlbmFtZT5tb2R1bGVfY29uZl8qPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUtFUk5FTF9QQVRIJz48Z2xvc3N0ZXJtPktFUk5FTF9QQVRIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBLRVJORUxfUEFUSFtkb2NdID0gIlRoZSBsb2NhdGlvbiBvZiB0aGUga2VybmVsIHNvdXJjZXMuIFRoaXMgdmFyaWFibGUgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUgU1RBR0lOR19LRVJORUxfRElSIHdpdGhpbiB0aGUgbW9kdWxlIGNsYXNzIChtb2R1bGUuYmJjbGFzcykuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvY2F0aW9uIG9mIHRoZSBrZXJuZWwgc291cmNlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1RBR0lOR19LRVJORUxfRElSJz48ZmlsZW5hbWU+U1RBR0lOR19LRVJORUxfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtbW9kdWxlJz48ZmlsZW5hbWU+bW9kdWxlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7I2luY29ycG9yYXRpbmctb3V0LW9mLXRyZWUtbW9kdWxlcyc+SW5jb3Jwb3JhdGluZyBPdXQtb2YtVHJlZSBNb2R1bGVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIGhlbHAgbWF4aW1pemUgY29tcGF0aWJpbGl0eSB3aXRoIG91dC1vZi10cmVlIGRyaXZlcnMKKyAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBidWlsZCBtb2R1bGVzLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhbHNvCisgICAgICAgICAgICAgICAgICAgIHJlY29nbml6ZXMgYW5kIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1LRVJORUxfU1JDJz48ZmlsZW5hbWU+S0VSTkVMX1NSQzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgd2hpY2ggaXMgaWRlbnRpY2FsIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0VSTkVMX1BBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgQm90aCB2YXJpYWJsZXMgYXJlIGNvbW1vbiB2YXJpYWJsZXMgdXNlZCBieSBleHRlcm5hbAorICAgICAgICAgICAgICAgICAgICBNYWtlZmlsZXMgdG8gcG9pbnQgdG8gdGhlIGtlcm5lbCBzb3VyY2UgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUtFUk5FTF9TUkMnPjxnbG9zc3Rlcm0+S0VSTkVMX1NSQzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgS0VSTkVMX1NSQ1tkb2NdID0gIlRoZSBsb2NhdGlvbiBvZiB0aGUga2VybmVsIHNvdXJjZXMuIFRoaXMgdmFyaWFibGUgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUgU1RBR0lOR19LRVJORUxfRElSIHdpdGhpbiB0aGUgbW9kdWxlIGNsYXNzIChtb2R1bGUuYmJjbGFzcykuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvY2F0aW9uIG9mIHRoZSBrZXJuZWwgc291cmNlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1RBR0lOR19LRVJORUxfRElSJz48ZmlsZW5hbWU+U1RBR0lOR19LRVJORUxfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtbW9kdWxlJz48ZmlsZW5hbWU+bW9kdWxlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7I2luY29ycG9yYXRpbmctb3V0LW9mLXRyZWUtbW9kdWxlcyc+SW5jb3Jwb3JhdGluZyBPdXQtb2YtVHJlZSBNb2R1bGVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIGhlbHAgbWF4aW1pemUgY29tcGF0aWJpbGl0eSB3aXRoIG91dC1vZi10cmVlIGRyaXZlcnMKKyAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBidWlsZCBtb2R1bGVzLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhbHNvCisgICAgICAgICAgICAgICAgICAgIHJlY29nbml6ZXMgYW5kIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1LRVJORUxfUEFUSCc+PGZpbGVuYW1lPktFUk5FTF9QQVRIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB3aGljaCBpcyBpZGVudGljYWwgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5LRVJORUxfU1JDPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEJvdGggdmFyaWFibGVzIGFyZSBjb21tb24gdmFyaWFibGVzIHVzZWQgYnkgZXh0ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgTWFrZWZpbGVzIHRvIHBvaW50IHRvIHRoZSBrZXJuZWwgc291cmNlIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LRkVBVFVSRV9ERVNDUklQVElPTic+PGdsb3NzdGVybT5LRkVBVFVSRV9ERVNDUklQVElPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgS0ZFQVRVUkVfREVTQ1JJUFRJT05bZG9jXSA9ICJQcm92aWRlcyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIGEgY29uZmlndXJhdGlvbiBmcmFnbWVudC4gWW91IHVzZSB0aGlzIHZhcmlhYmxlIGluIHRoZSAuc2NjIGZpbGUgdGhhdCBkZXNjcmliZXMgYSBjb25maWd1cmF0aW9uIGZyYWdtZW50IGZpbGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiBhIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQuCisgICAgICAgICAgICAgICAgICAgIFlvdSB1c2UgdGhpcyB2YXJpYWJsZSBpbiB0aGUgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlIHRoYXQgZGVzY3JpYmVzIGEgY29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSB2YXJpYWJsZSB1c2VkIGluIGEgZmlsZSBuYW1lZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c21wLnNjYzwvZmlsZW5hbWU+IHRvIGRlc2NyaWJlIFNNUCBiZWluZworICAgICAgICAgICAgICAgICAgICBlbmFibGVkOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRlZmluZSBLRkVBVFVSRV9ERVNDUklQVElPTiAiRW5hYmxlIFNNUCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUtNQUNISU5FJz48Z2xvc3N0ZXJtPktNQUNISU5FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBLTUFDSElORVtkb2NdID0gIlRoZSBtYWNoaW5lIGFzIGtub3duIGJ5IHRoZSBrZXJuZWwuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1hY2hpbmUgYXMga25vd24gYnkgdGhlIGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgU29tZXRpbWVzIHRoZSBtYWNoaW5lIG5hbWUgdXNlZCBieSB0aGUga2VybmVsIGRvZXMgbm90CisgICAgICAgICAgICAgICAgICAgIG1hdGNoIHRoZSBtYWNoaW5lIG5hbWUgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBtYWNoaW5lIG5hbWUgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSB1bmRlcnN0YW5kcyBhcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZTItMzItaW50ZWwtY29tbW9uPC9maWxlbmFtZT4gZ29lcyBieSBhCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCBuYW1lIGluIHRoZSBMaW51eCBZb2N0byBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgIFRoZSBrZXJuZWwgdW5kZXJzdGFuZHMgdGhhdCBtYWNoaW5lIGFzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbnRlbC1jb3JlMi0zMjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBGb3IgY2FzZXMgbGlrZSB0aGVzZSwgdGhlIDxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIG1hcHMgdGhlIGtlcm5lbCBtYWNoaW5lIG5hbWUgdG8gdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gbWFjaGluZSBuYW1lLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBtYXBwaW5ncyBiZXR3ZWVuIGRpZmZlcmVudCBuYW1lcyBvY2N1ciBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgWW9jdG8gTGludXggS2VybmVsJ3MgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2guCisgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUgdGFrZSBhIGxvb2sgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTElOVVhfVkVSU0lPTl9jb3JlMi0zMi1pbnRlbC1jb21tb24gPSAiMy4xOS4wIgorICAgICBDT01QQVRJQkxFX01BQ0hJTkVfY29yZTItMzItaW50ZWwtY29tbW9uID0gIiR7TUFDSElORX0iCisgICAgIFNSQ1JFVl9tZXRhX2NvcmUyLTMyLWludGVsLWNvbW1vbiA9ICI4ODk3ZWY2OGIzMGU3NDI2YmMxZDM5ODk1ZTcxZmIxNTVkNjk0OTc0IgorICAgICBTUkNSRVZfbWFjaGluZV9jb3JlMi0zMi1pbnRlbC1jb21tb24gPSAiNDNiOWVjZWQ5YmE4YTU3YWRkMzZhZjA3NzM2MzQ0ZGNjMzgzZjcxMSIKKyAgICAgS01BQ0hJTkVfY29yZTItMzItaW50ZWwtY29tbW9uID0gImludGVsLWNvcmUyLTMyIgorICAgICBLQlJBTkNIX2NvcmUyLTMyLWludGVsLWNvbW1vbiA9ICJzdGFuZGFyZC9iYXNlIgorICAgICBLRVJORUxfRkVBVFVSRVNfYXBwZW5kX2NvcmUyLTMyLWludGVsLWNvbW1vbiA9ICIke0tFUk5FTF9GRUFUVVJFU19JTlRFTF9DT01NT059IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgc2F5cyB0aGF0CisgICAgICAgICAgICAgICAgICAgIHRoZSBrZXJuZWwgdW5kZXJzdGFuZHMgdGhlIG1hY2hpbmUgbmFtZSBhcworICAgICAgICAgICAgICAgICAgICAiaW50ZWwtY29yZTItMzIiLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1bmRlcnN0YW5kcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZSBhcyAiY29yZTItMzItaW50ZWwtY29tbW9uIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUtUWVBFJz48Z2xvc3N0ZXJtPktUWVBFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBLVFlQRVtkb2NdID0gIkRlZmluZXMgdGhlIGtlcm5lbCB0eXBlIHRvIGJlIHVzZWQgaW4gYXNzZW1ibGluZyB0aGUgY29uZmlndXJhdGlvbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBrZXJuZWwgdHlwZSB0byBiZSB1c2VkIGluIGFzc2VtYmxpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoZSBsaW51eC15b2N0byByZWNpcGVzIGRlZmluZSAic3RhbmRhcmQiLCAidGlueSIsCisgICAgICAgICAgICAgICAgICAgIGFuZCAicHJlZW1wdC1ydCIga2VybmVsIHR5cGVzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsja2VybmVsLXR5cGVzJz5LZXJuZWwgVHlwZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgTWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGtlcm5lbCB0eXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGRlZmluZSB0aGUgPGZpbGVuYW1lPktUWVBFPC9maWxlbmFtZT4gdmFyaWFibGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyNic3AtZGVzY3JpcHRpb25zJz5CU1AgRGVzY3JpcHRpb25zPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSB5b3UgdXNlIG11c3QgbWF0Y2ggdGhlIHZhbHVlIHVzZWQgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTElOVVhfS0VSTkVMX1RZUEUnPjxmaWxlbmFtZT5MSU5VWF9LRVJORUxfVFlQRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSB1c2VkIGJ5IHRoZSBrZXJuZWwgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKyAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1sJz48dGl0bGU+TDwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MQUJFTFMnPjxnbG9zc3Rlcm0+TEFCRUxTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBMQUJFTFNbZG9jXSA9ICJQcm92aWRlcyBhIGxpc3Qgb2YgdGFyZ2V0cyBmb3IgYXV0b21hdGljIGNvbmZpZ3VyYXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXMgYSBsaXN0IG9mIHRhcmdldHMgZm9yIGF1dG9tYXRpYyBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWdydWItZWZpJz48ZmlsZW5hbWU+Z3J1Yi1lZmk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MQVlFUkRFUEVORFMnPjxnbG9zc3Rlcm0+TEFZRVJERVBFTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBMQVlFUkRFUEVORFNbZG9jXSA9ICJMaXN0cyB0aGUgbGF5ZXJzLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCB1cG9uIHdoaWNoIHRoaXMgcmVjaXBlIGRlcGVuZHMuIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiB0aGUgY29uZi9sYXllci5jb25mIGZpbGUgYW5kIG11c3QgYmUgc3VmZml4ZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgc3BlY2lmaWMgbGF5ZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgdGhlIGxheWVycyB0aGF0IHRoaXMgcmVjaXBlIGRlcGVuZHMgdXBvbiwgc2VwYXJhdGVkIGJ5IHNwYWNlcy4KKyAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWxseSwgeW91IGNhbiBzcGVjaWZ5IGEgc3BlY2lmaWMgbGF5ZXIgdmVyc2lvbiBmb3IgYSBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgICAgIGJ5IGFkZGluZyBpdCB0byB0aGUgZW5kIG9mIHRoZSBsYXllciBuYW1lIHdpdGggYSBjb2xvbiwgKGUuZy4gImFub3RoZXJsYXllcjozIgorICAgICAgICAgICAgICAgICAgICB0byBiZSBjb21wYXJlZCBhZ2FpbnN0CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MQVlFUlZFUlNJT04nPjxmaWxlbmFtZT5MQVlFUlZFUlNJT048L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+X2Fub3RoZXJsYXllcjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGluIHRoaXMgY2FzZSkuCisgICAgICAgICAgICAgICAgICAgIEFuIGVycm9yIHdpbGwgYmUgcHJvZHVjZWQgaWYgYW55IGRlcGVuZGVuY3kgaXMgbWlzc2luZyBvcgorICAgICAgICAgICAgICAgICAgICB0aGUgdmVyc2lvbiBudW1iZXJzIGRvIG5vdCBtYXRjaCBleGFjdGx5IChpZiBzcGVjaWZpZWQpLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgaW4gdGhlIDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgICAgIGFuZCBtdXN0IGJlIHN1ZmZpeGVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIHNwZWNpZmljIGxheWVyIChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MQVlFUkRFUEVORFNfbXlsYXllcjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MQVlFUkRJUic+PGdsb3NzdGVybT5MQVlFUkRJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTEFZRVJESVJbZG9jXSA9ICJXaGVuIHVzZWQgaW5zaWRlIHRoZSBsYXllci5jb25mIGNvbmZpZ3VyYXRpb24gZmlsZSwgdGhpcyB2YXJpYWJsZSBwcm92aWRlcyB0aGUgcGF0aCBvZiB0aGUgY3VycmVudCBsYXllci4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHVzZWQgaW5zaWRlIHRoZSA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZmlsZSwgdGhpcyB2YXJpYWJsZSBwcm92aWRlcyB0aGUgcGF0aCBvZiB0aGUgY3VycmVudCBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBub3QgYXZhaWxhYmxlIG91dHNpZGUgb2YgPGZpbGVuYW1lPmxheWVyLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQgcmVmZXJlbmNlcyBhcmUgZXhwYW5kZWQgaW1tZWRpYXRlbHkgd2hlbiBwYXJzaW5nIG9mIHRoZSBmaWxlIGNvbXBsZXRlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MQVlFUlZFUlNJT04nPjxnbG9zc3Rlcm0+TEFZRVJWRVJTSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBMQVlFUlZFUlNJT05bZG9jXSA9ICJPcHRpb25hbGx5IHNwZWNpZmllcyB0aGUgdmVyc2lvbiBvZiBhIGxheWVyIGFzIGEgc2luZ2xlIG51bWJlci4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIHRoZSBjb25mL2xheWVyLmNvbmYgZmlsZSBhbmQgbXVzdCBiZSBzdWZmaXhlZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBzcGVjaWZpYyBsYXllci4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBPcHRpb25hbGx5IHNwZWNpZmllcyB0aGUgdmVyc2lvbiBvZiBhIGxheWVyIGFzIGEgc2luZ2xlIG51bWJlci4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhpcyB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxBWUVSREVQRU5EUyc+PGZpbGVuYW1lPkxBWUVSREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgYW5vdGhlciBsYXllciBpbiBvcmRlciB0byBkZXBlbmQgb24gYSBzcGVjaWZpYyB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIHRoZSA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICBhbmQgbXVzdCBiZSBzdWZmaXhlZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBzcGVjaWZpYyBsYXllciAoZS5nLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TEFZRVJWRVJTSU9OX215bGF5ZXI8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTEQnPjxnbG9zc3Rlcm0+TEQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIExEW2RvY10gPSAiTWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuIHRoZSBsaW5rZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHVzZWQgdG8gcnVuIHRoZQorICAgICAgICAgICAgICAgICAgICBsaW5rZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTERGTEFHUyc+PGdsb3NzdGVybT5MREZMQUdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBMREZMQUdTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBsaW5rZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBsaW5rZXIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgZXhwb3J0ZWQgdG8gYW4gZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYW5kIHRodXMgbWFkZSB2aXNpYmxlIHRvIHRoZSBzb2Z0d2FyZSBiZWluZworICAgICAgICAgICAgICAgICAgICBidWlsdCBkdXJpbmcgdGhlIGNvbXBpbGF0aW9uIHN0ZXAuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgaW5pdGlhbGl6YXRpb24gZm9yIDxmaWxlbmFtZT5MREZMQUdTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWVzIGRlcGVuZGluZyBvbiB3aGF0IGlzIGJlaW5nIGJ1aWx0OgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfTERGTEFHUyc+PGZpbGVuYW1lPlRBUkdFVF9MREZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBidWlsZGluZyBmb3IgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMRF9MREZMQUdTJz48ZmlsZW5hbWU+QlVJTERfTERGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBidWlsZCBob3N0IChpLmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1uYXRpdmU8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERTREtfTERGTEFHUyc+PGZpbGVuYW1lPkJVSUxEU0RLX0xERkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIGZvciBhbiBTREsgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bmF0aXZlc2RrLTwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MRUFEX1NPTkFNRSc+PGdsb3NzdGVybT5MRUFEX1NPTkFNRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTEVBRF9TT05BTUVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxlYWQgKG9yIHByaW1hcnkpIGNvbXBpbGVkIGxpYnJhcnkgZmlsZSAoLnNvKSB0aGF0IHRoZSBkZWJpYW4gY2xhc3MgYXBwbGllcyBpdHMgbmFtaW5nIHBvbGljeSB0byBnaXZlbiBhIHJlY2lwZSB0aGF0IHBhY2thZ2VzIG11bHRpcGxlIGxpYnJhcmllcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGxlYWQgKG9yIHByaW1hcnkpIGNvbXBpbGVkIGxpYnJhcnkgZmlsZQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPi5zbzwvZmlsZW5hbWU+KSB0aGF0IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1kZWJpYW4nPjxmaWxlbmFtZT5kZWJpYW48L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgYXBwbGllcyBpdHMgbmFtaW5nIHBvbGljeSB0byBnaXZlbiBhIHJlY2lwZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIG11bHRpcGxlIGxpYnJhcmllcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSB3b3JrcyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGViaWFuPC9maWxlbmFtZT4gY2xhc3MuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTElDX0ZJTEVTX0NIS1NVTSc+PGdsb3NzdGVybT5MSUNfRklMRVNfQ0hLU1VNPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBMSUNfRklMRVNfQ0hLU1VNW2RvY10gPSAiQ2hlY2tzdW1zIG9mIHRoZSBsaWNlbnNlIHRleHQgaW4gdGhlIHJlY2lwZSBzb3VyY2UgY29kZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBDaGVja3N1bXMgb2YgdGhlIGxpY2Vuc2UgdGV4dCBpbiB0aGUgcmVjaXBlIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIHRyYWNrcyBjaGFuZ2VzIGluIGxpY2Vuc2UgdGV4dCBvZiB0aGUgc291cmNlCisgICAgICAgICAgICAgICAgICAgIGNvZGUgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBsaWNlbnNlIHRleHQgaXMgY2hhbmdlZCwgaXQgd2lsbCB0cmlnZ2VyIGEgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgZmFpbHVyZSwgd2hpY2ggZ2l2ZXMgdGhlIGRldmVsb3BlciBhbiBvcHBvcnR1bml0eSB0byByZXZpZXcgYW55CisgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2UgY2hhbmdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIG11c3QgYmUgZGVmaW5lZCBmb3IgYWxsIHJlY2lwZXMgKHVubGVzcworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTElDRU5TRSc+PGZpbGVuYW1lPkxJQ0VOU0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvICJDTE9TRUQiKS48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5ncG9reS1jb25maWd1cmluZy1MSUNfRklMRVNfQ0hLU1VNJz4KKyAgICAgICAgICAgICAgICAgICAgVHJhY2tpbmcgTGljZW5zZSBDaGFuZ2VzPC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MSUNFTlNFJz48Z2xvc3N0ZXJtPkxJQ0VOU0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIExJQ0VOU0VbZG9jXSA9ICJUaGUgbGlzdCBvZiBzb3VyY2UgbGljZW5zZXMgZm9yIHRoZSByZWNpcGUuIFRoZSBsb2dpY2FsIG9wZXJhdG9ycyAmYW1wOywgJ3wnLCBhbmQgcGFyZW50aGVzZXMgY2FuIGJlIHVzZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxpc3Qgb2Ygc291cmNlIGxpY2Vuc2VzIGZvciB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBGb2xsb3cgdGhlc2UgcnVsZXM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RG8gbm90IHVzZSBzcGFjZXMgd2l0aGluIGluZGl2aWR1YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWNlbnNlIG5hbWVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlcGFyYXRlIGxpY2Vuc2UgbmFtZXMgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChwaXBlKSB3aGVuIHRoZXJlIGlzIGEgY2hvaWNlIGJldHdlZW4gbGljZW5zZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VwYXJhdGUgbGljZW5zZSBuYW1lcyB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhbXA7IChhbXBlcnNhbmQpIHdoZW4gbXVsdGlwbGUgbGljZW5zZXMgZXhpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGNvdmVyIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgc291cmNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBjYW4gdXNlIHNwYWNlcyBiZXR3ZWVuIGxpY2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Gb3Igc3RhbmRhcmQgbGljZW5zZXMsIHVzZSB0aGUgbmFtZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZmlsZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1BEWExJQ0VOU0VNQVAnPjxmaWxlbmFtZT5TUERYTElDRU5TRU1BUDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgbmFtZXMgZGVmaW5lZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbGljZW5zZXMuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBMSUNFTlNFID0gIkxHUEx2Mi4xIHwgR1BMdjMiCisgICAgIExJQ0VOU0UgPSAiTVBMLTEgJmFtcDsgTEdQTHYyLjEiCisgICAgIExJQ0VOU0UgPSAiR1BMdjIrIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBleGFtcGxlIGlzIGZyb20gdGhlIHJlY2lwZXMgZm9yIFF0LCB3aGljaCB0aGUgdXNlcgorICAgICAgICAgICAgICAgICAgICBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdW5kZXIgZWl0aGVyIHRoZSBMR1BMIHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgMi4xIG9yIEdQTCB2ZXJzaW9uIDMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzZWNvbmQgZXhhbXBsZSBpcyBmcm9tIENhaXJvIHdoZXJlIHR3byBsaWNlbnNlcyBjb3ZlcgorICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZmluYWwgZXhhbXBsZSBpcyBmcm9tIDxmaWxlbmFtZT5zeXNzdGF0PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIHByZXNlbnRzIGEgc2luZ2xlIGxpY2Vuc2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGxpY2Vuc2VzIG9uIGEgcGVyLXBhY2thZ2UgYmFzaXMgdG8KKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlIHNpdHVhdGlvbnMgd2hlcmUgY29tcG9uZW50cyBvZiB0aGUgb3V0cHV0IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW50IGxpY2Vuc2VzLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYSBwaWVjZSBvZiBzb2Z0d2FyZSB3aG9zZSBjb2RlIGlzCisgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2VkIHVuZGVyIEdQTHYyIGJ1dCBoYXMgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24KKyAgICAgICAgICAgICAgICAgICAgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSAxLjIgY291bGQKKyAgICAgICAgICAgICAgICAgICAgYmUgc3BlY2lmaWVkIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTElDRU5TRSA9ICJHRkRMLTEuMiAmYW1wOyBHUEx2MiIKKyAgICAgTElDRU5TRV8ke1BOfSA9ICJHUEx2MiIKKyAgICAgTElDRU5TRV8ke1BOfS1kb2MgPSAiR0ZETC0xLjIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MSUNFTlNFX0ZMQUdTJz48Z2xvc3N0ZXJtPkxJQ0VOU0VfRkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIExJQ0VOU0VfRkxBR1NbZG9jXSA9ICJTcGVjaWZpZXMgYWRkaXRpb25hbCBmbGFncyBmb3IgYSByZWNpcGUgeW91IG11c3Qgd2hpdGVsaXN0IHRocm91Z2ggTElDRU5TRV9GTEFHU19XSElURUxJU1QgaW4gb3JkZXIgdG8gYWxsb3cgdGhlIHJlY2lwZSB0byBiZSBidWlsdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYWRkaXRpb25hbCBmbGFncyBmb3IgYSByZWNpcGUgeW91IG11c3QKKyAgICAgICAgICAgICAgICAgICAgd2hpdGVsaXN0IHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUJz48ZmlsZW5hbWU+TElDRU5TRV9GTEFHU19XSElURUxJU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW4gb3JkZXIgdG8gYWxsb3cgdGhlIHJlY2lwZSB0byBiZSBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBwcm92aWRpbmcgbXVsdGlwbGUgZmxhZ3MsIHNlcGFyYXRlIHRoZW0gd2l0aAorICAgICAgICAgICAgICAgICAgICBzcGFjZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFsdWUgaXMgaW5kZXBlbmRlbnQgb2YKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0UnPjxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCBpcyB0eXBpY2FsbHkgdXNlZCB0byBtYXJrIHJlY2lwZXMgdGhhdCBtaWdodAorICAgICAgICAgICAgICAgICAgICByZXF1aXJlIGFkZGl0aW9uYWwgbGljZW5zZXMgaW4gb3JkZXIgdG8gYmUgdXNlZCBpbiBhCisgICAgICAgICAgICAgICAgICAgIGNvbW1lcmNpYWwgcHJvZHVjdC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2VuYWJsaW5nLWNvbW1lcmNpYWxseS1saWNlbnNlZC1yZWNpcGVzJz5FbmFibGluZyBDb21tZXJjaWFsbHkgTGljZW5zZWQgUmVjaXBlczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTElDRU5TRV9GTEFHU19XSElURUxJU1QnPjxnbG9zc3Rlcm0+TElDRU5TRV9GTEFHU19XSElURUxJU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIExJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUW2RvY10gPSAiTGlzdHMgbGljZW5zZSBmbGFncyB0aGF0IHdoZW4gc3BlY2lmaWVkIGluIExJQ0VOU0VfRkxBR1Mgd2l0aGluIGEgcmVjaXBlIHNob3VsZCBub3QgcHJldmVudCB0aGF0IHJlY2lwZSBmcm9tIGJlaW5nIGJ1aWx0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIGxpY2Vuc2UgZmxhZ3MgdGhhdCB3aGVuIHNwZWNpZmllZCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTElDRU5TRV9GTEFHUyc+PGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIGEgcmVjaXBlIHNob3VsZCBub3QgcHJldmVudCB0aGF0IHJlY2lwZSBmcm9tIGJlaW5nCisgICAgICAgICAgICAgICAgICAgIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBUaGlzIHByYWN0aWNlIGlzIG90aGVyd2lzZSBrbm93biBhcyAid2hpdGVsaXN0aW5nIgorICAgICAgICAgICAgICAgICAgICBsaWNlbnNlIGZsYWdzLgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdlbmFibGluZy1jb21tZXJjaWFsbHktbGljZW5zZWQtcmVjaXBlcyc+RW5hYmxpbmcgQ29tbWVyY2lhbGx5IExpY2Vuc2VkIFJlY2lwZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUxJQ0VOU0VfUEFUSCc+PGdsb3NzdGVybT5MSUNFTlNFX1BBVEg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIExJQ0VOU0VfUEFUSFtkb2NdID0gIlBhdGggdG8gYWRkaXRpb25hbCBsaWNlbnNlcyB1c2VkIGR1cmluZyB0aGUgYnVpbGQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUGF0aCB0byBhZGRpdGlvbmFsIGxpY2Vuc2VzIHVzZWQgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyA8ZmlsZW5hbWU+Q09NTU9OX0xJQ0VOU0VfRElSPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdG8gZGVmaW5lIHRoZSBkaXJlY3RvcnkgdGhhdCBob2xkcyBjb21tb24gbGljZW5zZSB0ZXh0IHVzZWQgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5MSUNFTlNFX1BBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZSBhbGxvd3MgeW91IHRvIGV4dGVuZCB0aGF0CisgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uIHRvIG90aGVyIGFyZWFzIHRoYXQgaGF2ZSBhZGRpdGlvbmFsIGxpY2Vuc2VzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJQ0VOU0VfUEFUSCArPSAiPHJlcGxhY2VhYmxlPnBhdGgtdG8tYWRkaXRpb25hbC1jb21tb24tbGljZW5zZXM8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUxJTlVYX0tFUk5FTF9UWVBFJz48Z2xvc3N0ZXJtPkxJTlVYX0tFUk5FTF9UWVBFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBMSU5VWF9LRVJORUxfVFlQRVtkb2NdID0gIkRlZmluZXMgdGhlIGtlcm5lbCB0eXBlIHRvIGJlIHVzZWQgaW4gYXNzZW1ibGluZyB0aGUgY29uZmlndXJhdGlvbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBrZXJuZWwgdHlwZSB0byBiZSB1c2VkIGluIGFzc2VtYmxpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoZSBsaW51eC15b2N0byByZWNpcGVzIGRlZmluZSAic3RhbmRhcmQiLCAidGlueSIsIGFuZAorICAgICAgICAgICAgICAgICAgICAicHJlZW1wdC1ydCIga2VybmVsIHR5cGVzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsja2VybmVsLXR5cGVzJz5LZXJuZWwgVHlwZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgTWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGtlcm5lbCB0eXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxJTlVYX0tFUk5FTF9UWVBFPC9maWxlbmFtZT4sIGl0IGRlZmF1bHRzIHRvCisgICAgICAgICAgICAgICAgICAgICJzdGFuZGFyZCIuCisgICAgICAgICAgICAgICAgICAgIFRvZ2V0aGVyIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtNQUNISU5FJz48ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+TElOVVhfS0VSTkVMX1RZUEU8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBkZWZpbmVzIHRoZSBzZWFyY2gKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzIHVzZWQgYnkgdGhlIGtlcm5lbCB0b29scyB0byBmaW5kIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiB3aXRoaW4gdGhlIGtlcm5lbAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB3aXRoIHdoaWNoIHRvIGJ1aWxkIG91dCB0aGUgc291cmNlcyBhbmQgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTElOVVhfVkVSU0lPTic+PGdsb3NzdGVybT5MSU5VWF9WRVJTSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBMSU5VWF9WRVJTSU9OW2RvY10gPSAiVGhlIExpbnV4IHZlcnNpb24gZnJvbSBrZXJuZWwub3JnIG9uIHdoaWNoIHRoZSBMaW51eCBrZXJuZWwgaW1hZ2UgYmVpbmcgYnVpbHQgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXMgYmFzZWQuIFlvdSBkZWZpbmUgdGhpcyB2YXJpYWJsZSBpbiB0aGUga2VybmVsIHJlY2lwZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgTGludXggdmVyc2lvbiBmcm9tIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb24gd2hpY2ggdGhlIExpbnV4IGtlcm5lbCBpbWFnZSBiZWluZyBidWlsdCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpcyBiYXNlZC4KKyAgICAgICAgICAgICAgICAgICAgWW91IGRlZmluZSB0aGlzIHZhcmlhYmxlIGluIHRoZSBrZXJuZWwgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjQuYmI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBrZXJuZWwgcmVjaXBlIGZvdW5kIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcyB0aGUgdmFyaWFibGVzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTElOVVhfVkVSU0lPTiA/PSAiMy40LjI0IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+TElOVVhfVkVSU0lPTjwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIHVzZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lIDxsaW5rIGxpbmtlbmQ9J3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MSU5VWF9WRVJTSU9OX0VYVEVOU0lPTic+PGdsb3NzdGVybT5MSU5VWF9WRVJTSU9OX0VYVEVOU0lPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTElOVVhfVkVSU0lPTl9FWFRFTlNJT05bZG9jXSA9ICJBIHN0cmluZyBleHRlbnNpb24gY29tcGlsZWQgaW50byB0aGUgdmVyc2lvbiBzdHJpbmcgb2YgdGhlIExpbnV4IGtlcm5lbCBidWlsdCB3aXRoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiBZb3UgZGVmaW5lIHRoaXMgdmFyaWFibGUgaW4gdGhlIGtlcm5lbCByZWNpcGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBzdHJpbmcgZXh0ZW5zaW9uIGNvbXBpbGVkIGludG8gdGhlIHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nIG9mIHRoZSBMaW51eCBrZXJuZWwgYnVpbHQgd2l0aCB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGRlZmluZSB0aGlzIHZhcmlhYmxlIGluIHRoZSBrZXJuZWwgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGxpbnV4LXlvY3RvIGtlcm5lbCByZWNpcGVzIGFsbCBkZWZpbmUKKyAgICAgICAgICAgICAgICAgICAgdGhlIHZhcmlhYmxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTElOVVhfVkVSU0lPTl9FWFRFTlNJT04gPz0gIi15b2N0by0kezxsaW5rIGxpbmtlbmQ9J3Zhci1MSU5VWF9LRVJORUxfVFlQRSc+TElOVVhfS0VSTkVMX1RZUEU8L2xpbms+fSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmluZyB0aGlzIHZhcmlhYmxlIGVzc2VudGlhbGx5IHNldHMgdGhlCisgICAgICAgICAgICAgICAgICAgIExpbnV4IGtlcm5lbCBjb25maWd1cmF0aW9uIGl0ZW0KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNPTkZJR19MT0NBTFZFUlNJT048L2ZpbGVuYW1lPiwgd2hpY2ggaXMgdmlzaWJsZQorICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZSA8ZmlsZW5hbWU+dW5hbWU8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyB0aGUgZXh0ZW5zaW9uIGFzc3VtaW5nIGl0CisgICAgICAgICAgICAgICAgICAgIHdhcyBzZXQgYXMgcHJldmlvdXNseSBzaG93bjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHVuYW1lIC1yCisgICAgIDMuNy4wLXJjOC1jdXN0b20KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUxPR19ESVInPjxnbG9zc3Rlcm0+TE9HX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTE9HX0RJUltkb2NdID0gIlNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IHRvIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdyaXRlcyBvdmVyYWxsIGxvZyBmaWxlcy4gVGhlIGRlZmF1bHQgZGlyZWN0b3J5IGlzICR7VE1QRElSfS9sb2ciCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSB0byB3aGljaCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSB3cml0ZXMgb3ZlcmFsbCBsb2cgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGRpcmVjdG9yeSBpcyA8ZmlsZW5hbWU+JHtUTVBESVJ9L2xvZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGxvZ3Mgc3BlY2lmaWMgdG8gZWFjaCB0YXNrLAorICAgICAgICAgICAgICAgICAgICBzZWUgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1UJz48ZmlsZW5hbWU+VDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktbSc+PHRpdGxlPk08L3RpdGxlPgorCisgICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU1BQ0hJTkUnPjxnbG9zc3Rlcm0+TUFDSElORTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTUFDSElORVtkb2NdID0gIlNwZWNpZmllcyB0aGUgdGFyZ2V0IGRldmljZSBmb3Igd2hpY2ggdGhlIGltYWdlIGlzIGJ1aWx0LiBZb3UgZGVmaW5lIE1BQ0hJTkUgaW4gdGhlIGNvbmYvbG9jYWwuY29uZiBmaWxlIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSB0YXJnZXQgZGV2aWNlIGZvciB3aGljaCB0aGUgaW1hZ2UgaXMgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIFlvdSBkZWZpbmUgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCA8ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+IGlzIHNldCB0bworICAgICAgICAgICAgICAgICAgICAicWVtdXg4NiIsIHdoaWNoIGlzIGFuIHg4Ni1iYXNlZCBhcmNoaXRlY3R1cmUgbWFjaGluZSB0bworICAgICAgICAgICAgICAgICAgICBiZSBlbXVsYXRlZCB1c2luZyBRRU1VOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE1BQ0hJTkUgPz0gInFlbXV4ODYiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGNvcnJlc3BvbmRzIHRvIGEgbWFjaGluZSBjb25maWd1cmF0aW9uIGZpbGUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHNhbWUgbmFtZSwgdGhyb3VnaCB3aGljaCBtYWNoaW5lLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQuCisgICAgICAgICAgICAgICAgICAgIFRodXMsIHdoZW4gPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPiBpcyBzZXQgdG8gInFlbXV4ODYiIHRoZXJlCisgICAgICAgICAgICAgICAgICAgIGV4aXN0cyB0aGUgY29ycmVzcG9uZGluZyA8ZmlsZW5hbWU+cWVtdXg4Ni5jb25mPC9maWxlbmFtZT4gbWFjaGluZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUsIHdoaWNoIGNhbiBiZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGluIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgbGlzdCBvZiBtYWNoaW5lcyBzdXBwb3J0ZWQgYnkgdGhlIFlvY3RvIFByb2plY3QgYXMKKyAgICAgICAgICAgICAgICAgICAgc2hpcHBlZCBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTUFDSElORSA/PSAicWVtdWFybSIKKyAgICAgTUFDSElORSA/PSAicWVtdWFybTY0IgorICAgICBNQUNISU5FID89ICJxZW11bWlwcyIKKyAgICAgTUFDSElORSA/PSAicWVtdW1pcHM2NCIKKyAgICAgTUFDSElORSA/PSAicWVtdXBwYyIKKyAgICAgTUFDSElORSA/PSAicWVtdXg4NiIKKyAgICAgTUFDSElORSA/PSAicWVtdXg4Ni02NCIKKyAgICAgTUFDSElORSA/PSAiZ2VuZXJpY3g4NiIKKyAgICAgTUFDSElORSA/PSAiZ2VuZXJpY3g4Ni02NCIKKyAgICAgTUFDSElORSA/PSAiYmVhZ2xlYm9uZSIKKyAgICAgTUFDSElORSA/PSAibXBjODMxNWUtcmRiIgorICAgICBNQUNISU5FID89ICJlZGdlcm91dGVyIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsYXN0IGZpdmUgYXJlIFlvY3RvIFByb2plY3QgcmVmZXJlbmNlIGhhcmR3YXJlIGJvYXJkcywgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgYXJlIHByb3ZpZGVkIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS15b2N0by1ic3A8L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+QWRkaW5nIGFkZGl0aW9uYWwgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIGxheWVycworICAgICAgICAgICAgICAgICAgICAgICAgdG8geW91ciBjb25maWd1cmF0aW9uIGFkZHMgbmV3IHBvc3NpYmxlIHNldHRpbmdzIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTUFDSElORV9BUkNIJz48Z2xvc3N0ZXJtPk1BQ0hJTkVfQVJDSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTUFDSElORV9BUkNIW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBtYWNoaW5lLXNwZWNpZmljIGFyY2hpdGVjdHVyZS4gVGhpcyB2YXJpYWJsZSBpcyBzZXQgYXV0b21hdGljYWxseSBmcm9tIE1BQ0hJTkUgb3IgVFVORV9QS0dBUkNILiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgbWFjaGluZS1zcGVjaWZpYyBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgc2V0IGF1dG9tYXRpY2FsbHkgZnJvbQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVfUEtHQVJDSCc+PGZpbGVuYW1lPlRVTkVfUEtHQVJDSDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBub3QgaGFuZC1lZGl0IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TUFDSElORV9BUkNIPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUyc+PGdsb3NzdGVybT5NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFNbZG9jXSA9ICJBIGxpc3Qgb2YgcmVxdWlyZWQgbWFjaGluZS1zcGVjaWZpYyBwYWNrYWdlcyB0byBpbnN0YWxsIGFzIHBhcnQgb2YgdGhlIGltYWdlIGJlaW5nIGJ1aWx0LiBCZWNhdXNlIHRoaXMgaXMgYSAnbWFjaGluZSBlc3NlbnRpYWwnIHZhcmlhYmxlLCB0aGUgbGlzdCBvZiBwYWNrYWdlcyBhcmUgZXNzZW50aWFsIGZvciB0aGUgbWFjaGluZSB0byBib290LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiByZXF1aXJlZCBtYWNoaW5lLXNwZWNpZmljIHBhY2thZ2VzIHRvIGluc3RhbGwgYXMgcGFydCBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgaW1hZ2UgYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBwcm9jZXNzIGRlcGVuZHMgb24gdGhlc2UgcGFja2FnZXMgYmVpbmcgcHJlc2VudC4KKyAgICAgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIGJlY2F1c2UgdGhpcyBpcyBhICJtYWNoaW5lIGVzc2VudGlhbCIgdmFyaWFibGUsIHRoZSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGFyZSBlc3NlbnRpYWwgZm9yIHRoZSBtYWNoaW5lIHRvIGJvb3QuCisgICAgICAgICAgICAgICAgICAgIFRoZSBpbXBhY3Qgb2YgdGhpcyB2YXJpYWJsZSBhZmZlY3RzIGltYWdlcyBiYXNlZCBvbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWNvcmUtYm9vdDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgdGhlIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBpbWFnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBzaW1pbGFyIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JSRUNPTU1FTkRTJz5NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGUgaW1hZ2UgYmVpbmcgYnVpbHQgaGFzIGEgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSBvbiB0aGUgdmFyaWFibGUncyBsaXN0IG9mIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgdGhlIGltYWdlIHdpbGwgbm90IGJ1aWxkIGlmIGEgZmlsZSBpbiB0aGlzIGxpc3QgaXMgbm90IGZvdW5kLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBzdXBwb3NlIHRoZSBtYWNoaW5lIGZvciB3aGljaCB5b3UgYXJlIGJ1aWxkaW5nIHJlcXVpcmVzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5leGFtcGxlLWluaXQ8L2ZpbGVuYW1lPiB0byBiZSBydW4gZHVyaW5nIGJvb3QgdG8gaW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgeW91IHdvdWxkIHVzZSB0aGUgZm9sbG93aW5nIGluIHRoZSBtYWNoaW5lJ3MKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTICs9ICJleGFtcGxlLWluaXQiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JSRUNPTU1FTkRTJz48Z2xvc3N0ZXJtPk1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JSRUNPTU1FTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EU1tkb2NdID0gIkEgbGlzdCBvZiByZWNvbW1lbmRlZCBtYWNoaW5lLXNwZWNpZmljIHBhY2thZ2VzIHRvIGluc3RhbGwgYXMgcGFydCBvZiB0aGUgaW1hZ2UgYmVpbmcgYnVpbHQuIEJlY2F1c2UgdGhpcyBpcyBhICdtYWNoaW5lIGVzc2VudGlhbCcgdmFyaWFibGUsIHRoZSBsaXN0IG9mIHBhY2thZ2VzIGFyZSBlc3NlbnRpYWwgZm9yIHRoZSBtYWNoaW5lIHRvIGJvb3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIHJlY29tbWVuZGVkIG1hY2hpbmUtc3BlY2lmaWMgcGFja2FnZXMgdG8gaW5zdGFsbCBhcyBwYXJ0IG9mCisgICAgICAgICAgICAgICAgICAgIHRoZSBpbWFnZSBiZWluZyBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHByb2Nlc3MgZG9lcyBub3QgZGVwZW5kIG9uIHRoZXNlIHBhY2thZ2VzIGJlaW5nIHByZXNlbnQuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGJlY2F1c2UgdGhpcyBpcyBhICJtYWNoaW5lIGVzc2VudGlhbCIgdmFyaWFibGUsIHRoZSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGFyZSBlc3NlbnRpYWwgZm9yIHRoZSBtYWNoaW5lIHRvIGJvb3QuCisgICAgICAgICAgICAgICAgICAgIFRoZSBpbXBhY3Qgb2YgdGhpcyB2YXJpYWJsZSBhZmZlY3RzIGltYWdlcyBiYXNlZCBvbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWNvcmUtYm9vdDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgdGhlIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBpbWFnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBzaW1pbGFyIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTJz5NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGUgaW1hZ2UgYmVpbmcgYnVpbHQgZG9lcyBub3QgaGF2ZSBhIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgb24gdGhlIHZhcmlhYmxlJ3MgbGlzdCBvZiBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHRoZSBpbWFnZSB3aWxsIHN0aWxsIGJ1aWxkIGlmIGEgcGFja2FnZSBpbiB0aGlzIGxpc3QgaXMgbm90IGZvdW5kLgorICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBoYW5kbGUgZXNzZW50aWFsIGtlcm5lbCBtb2R1bGVzLCB3aG9zZQorICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IG1heSBiZSBzZWxlY3RlZCB0byBiZSBidWlsdCBpbnRvIHRoZSBrZXJuZWwgcmF0aGVyIHRoYW4gYXMgYSBtb2R1bGUsCisgICAgICAgICAgICAgICAgICAgIGluIHdoaWNoIGNhc2UgYSBwYWNrYWdlIHdpbGwgbm90IGJlIHByb2R1Y2VkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb25zaWRlciBhbiBleGFtcGxlIHdoZXJlIHlvdSBoYXZlIGEgY3VzdG9tIGtlcm5lbCB3aGVyZSBhIHNwZWNpZmljIHRvdWNoc2NyZWVuCisgICAgICAgICAgICAgICAgICAgIGRyaXZlciBpcyByZXF1aXJlZCBmb3IgdGhlIG1hY2hpbmUgdG8gYmUgdXNhYmxlLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGUgZHJpdmVyIGNhbiBiZSBidWlsdCBhcyBhIG1vZHVsZSBvcgorICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZSBrZXJuZWwgZGVwZW5kaW5nIG9uIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGRyaXZlciBpcyBidWlsdCBhcyBhIG1vZHVsZSwgeW91IHdhbnQgaXQgdG8gYmUgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICBCdXQsIHdoZW4gdGhlIGRyaXZlciBpcyBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIHlvdSBzdGlsbCB3YW50IHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCB0byBzdWNjZWVkLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIHNldHMgdXAgYSAicmVjb21tZW5kcyIgcmVsYXRpb25zaGlwIHNvIHRoYXQgaW4gdGhlIGxhdHRlciBjYXNlLAorICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQgd2lsbCBub3QgZmFpbCBkdWUgdG8gdGhlIG1pc3NpbmcgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVG8gYWNjb21wbGlzaCB0aGlzLCBhc3N1bWluZyB0aGUgcGFja2FnZSBmb3IgdGhlIG1vZHVsZSB3YXMgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5rZXJuZWwtbW9kdWxlLWFiMTIzPC9maWxlbmFtZT4sIHlvdSB3b3VsZCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBpbiB0aGUgbWFjaGluZSdzIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZmlsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EUyArPSAia2VybmVsLW1vZHVsZS1hYjEyMyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTb21lIGV4YW1wbGVzIG9mIHRoZXNlIG1hY2hpbmUgZXNzZW50aWFscyBhcmUgZmxhc2gsIHNjcmVlbiwga2V5Ym9hcmQsIG1vdXNlLAorICAgICAgICAgICAgICAgICAgICBvciB0b3VjaHNjcmVlbiBkcml2ZXJzIChkZXBlbmRpbmcgb24gdGhlIG1hY2hpbmUpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1NQUNISU5FX0VYVFJBX1JERVBFTkRTJz48Z2xvc3N0ZXJtPk1BQ0hJTkVfRVhUUkFfUkRFUEVORFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE1BQ0hJTkVfRVhUUkFfUkRFUEVORFNbZG9jXSA9ICJBIGxpc3Qgb2YgbWFjaGluZS1zcGVjaWZpYyBwYWNrYWdlcyB0byBpbnN0YWxsIGFzIHBhcnQgb2YgdGhlIGltYWdlIGJlaW5nIGJ1aWx0IHRoYXQgYXJlIG5vdCBlc3NlbnRpYWwgZm9yIHRoZSBtYWNoaW5lIHRvIGJvb3QuIEhvd2V2ZXIsIHRoZSBidWlsZCBwcm9jZXNzIGZvciBtb3JlIGZ1bGx5LWZlYXR1cmVkIGltYWdlcyBkZXBlbmRzIG9uIHRoZSBwYWNrYWdlcyBiZWluZyBwcmVzZW50LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBtYWNoaW5lLXNwZWNpZmljIHBhY2thZ2VzIHRvIGluc3RhbGwgYXMgcGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UgYmVpbmcgYnVpbHQgdGhhdCBhcmUgbm90IGVzc2VudGlhbCBmb3IgdGhlIG1hY2hpbmUgdG8gYm9vdC4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIG1vcmUgZnVsbHktZmVhdHVyZWQgaW1hZ2VzCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMgb24gdGhlIHBhY2thZ2VzIGJlaW5nIHByZXNlbnQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgYWZmZWN0cyBhbGwgaW1hZ2VzIGJhc2VkIG9uCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtYmFzZTwvZmlsZW5hbWU+LCB3aGljaCBkb2VzIG5vdCBpbmNsdWRlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgaXMgc2ltaWxhciB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTJz5NQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IHRoZSBpbWFnZSBiZWluZyBidWlsdCBoYXMgYSBidWlsZAorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5IG9uIHRoZSB2YXJpYWJsZSdzIGxpc3Qgb2YgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB0aGUgaW1hZ2Ugd2lsbCBub3QgYnVpbGQgaWYgYSBmaWxlIGluIHRoaXMgbGlzdCBpcyBub3QgZm91bmQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgaXMgYSBtYWNoaW5lIHRoYXQgaGFzIFdpRmkgY2FwYWJpbGl0eSBidXQgaXMgbm90CisgICAgICAgICAgICAgICAgICAgIGVzc2VudGlhbCBmb3IgdGhlIG1hY2hpbmUgdG8gYm9vdCB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSBhcmUgYnVpbGRpbmcgYSBtb3JlIGZ1bGx5LWZlYXR1cmVkIGltYWdlLCB5b3Ugd2FudCB0byBlbmFibGUKKyAgICAgICAgICAgICAgICAgICAgdGhlIFdpRmkuCisgICAgICAgICAgICAgICAgICAgIFRoZSBwYWNrYWdlIGNvbnRhaW5pbmcgdGhlIGZpcm13YXJlIGZvciB0aGUgV2lGaSBoYXJkd2FyZSBpcyBhbHdheXMKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgdG8gZXhpc3QsIHNvIGl0IGlzIGFjY2VwdGFibGUgZm9yIHRoZSBidWlsZCBwcm9jZXNzIHRvIGRlcGVuZCB1cG9uCisgICAgICAgICAgICAgICAgICAgIGZpbmRpbmcgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgYXNzdW1pbmcgdGhlIHBhY2thZ2UgZm9yIHRoZSBmaXJtd2FyZSB3YXMgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aWZpZHJpdmVyLWZpcm13YXJlPC9maWxlbmFtZT4sIHlvdSB3b3VsZCB1c2UgdGhlIGZvbGxvd2luZyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4gZmlsZSBmb3IgdGhlIG1hY2hpbmU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTUFDSElORV9FWFRSQV9SREVQRU5EUyArPSAid2lmaWRyaXZlci1maXJtd2FyZSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyc+PGdsb3NzdGVybT5NQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTW2RvY10gPSAiQSBsaXN0IG9mIG1hY2hpbmUtc3BlY2lmaWMgcGFja2FnZXMgdG8gaW5zdGFsbCBhcyBwYXJ0IG9mIHRoZSBpbWFnZSBiZWluZyBidWlsdCB0aGF0IGFyZSBub3QgZXNzZW50aWFsIGZvciBib290aW5nIHRoZSBtYWNoaW5lLiBUaGUgaW1hZ2UgYmVpbmcgYnVpbHQgaGFzIG5vIGJ1aWxkIGRlcGVuZGVuY2llcyBvbiB0aGUgcGFja2FnZXMgaW4gdGhpcyBsaXN0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBtYWNoaW5lLXNwZWNpZmljIHBhY2thZ2VzIHRvIGluc3RhbGwgYXMgcGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UgYmVpbmcgYnVpbHQgdGhhdCBhcmUgbm90IGVzc2VudGlhbCBmb3IgYm9vdGluZyB0aGUgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGltYWdlIGJlaW5nIGJ1aWx0IGhhcyBubyBidWlsZCBkZXBlbmRlbmN5IG9uIHRoaXMgbGlzdCBvZiBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBhZmZlY3RzIG9ubHkgaW1hZ2VzIGJhc2VkIG9uCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtYmFzZTwvZmlsZW5hbWU+LCB3aGljaCBkb2VzIG5vdCBpbmNsdWRlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHNpbWlsYXIgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORV9FWFRSQV9SREVQRU5EUyc+TUFDSElORV9FWFRSQV9SREVQRU5EUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGUgaW1hZ2UgYmVpbmcgYnVpbHQgZG9lcyBub3QgaGF2ZSBhIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgb24gdGhlIHZhcmlhYmxlJ3MgbGlzdCBvZiBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHRoZSBpbWFnZSB3aWxsIGJ1aWxkIGlmIGEgZmlsZSBpbiB0aGlzIGxpc3QgaXMgbm90IGZvdW5kLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBbiBleGFtcGxlIGlzIGEgbWFjaGluZSB0aGF0IGhhcyBXaUZpIGNhcGFiaWxpdHkgYnV0IGlzIG5vdCBlc3NlbnRpYWwKKyAgICAgICAgICAgICAgICAgICAgRm9yIHRoZSBtYWNoaW5lIHRvIGJvb3QgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgYXJlIGJ1aWxkaW5nIGEgbW9yZSBmdWxseS1mZWF0dXJlZCBpbWFnZSwgeW91IHdhbnQgdG8gZW5hYmxlCisgICAgICAgICAgICAgICAgICAgIFdpRmkuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgdGhlIHBhY2thZ2UgY29udGFpbmluZyB0aGUgV2lGaSBrZXJuZWwgbW9kdWxlIHdpbGwgbm90IGJlIHByb2R1Y2VkCisgICAgICAgICAgICAgICAgICAgIGlmIHRoZSBXaUZpIGRyaXZlciBpcyBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIGluIHdoaWNoIGNhc2UgeW91IHN0aWxsIHdhbnQgdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHRvIHN1Y2NlZWQgaW5zdGVhZCBvZiBmYWlsaW5nIGFzIGEgcmVzdWx0IG9mIHRoZSBwYWNrYWdlIG5vdCBiZWluZyBmb3VuZC4KKyAgICAgICAgICAgICAgICAgICAgVG8gYWNjb21wbGlzaCB0aGlzLCBhc3N1bWluZyB0aGUgcGFja2FnZSBmb3IgdGhlIG1vZHVsZSB3YXMgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5rZXJuZWwtbW9kdWxlLWV4YW1wbGV3aWZpPC9maWxlbmFtZT4sIHlvdSB3b3VsZCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBpbiB0aGUgPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4gZmlsZSBmb3IgdGhlIG1hY2hpbmU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyArPSAia2VybmVsLW1vZHVsZS1leGFtcGxld2lmaSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTUFDSElORV9GRUFUVVJFUyc+PGdsb3NzdGVybT5NQUNISU5FX0ZFQVRVUkVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBNQUNISU5FX0ZFQVRVUkVTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBsaXN0IG9mIGhhcmR3YXJlIGZlYXR1cmVzIHRoZSBNQUNISU5FIHN1cHBvcnRzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbGlzdCBvZiBoYXJkd2FyZSBmZWF0dXJlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L2xpbms+IGlzIGNhcGFibGUKKyAgICAgICAgICAgICAgICAgICAgb2Ygc3VwcG9ydGluZy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHJlbGF0ZWQgaW5mb3JtYXRpb24gb24gZW5hYmxpbmcgZmVhdHVyZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNPTUJJTkVEX0ZFQVRVUkVTJz48ZmlsZW5hbWU+Q09NQklORURfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBhIGxpc3Qgb2YgaGFyZHdhcmUgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoZSBZb2N0bworICAgICAgICAgICAgICAgICAgICBQcm9qZWN0IGFzIHNoaXBwZWQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1mZWF0dXJlcy1tYWNoaW5lJz5NYWNoaW5lIEZlYXR1cmVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTUFDSElORV9GRUFUVVJFU19CQUNLRklMTCc+PGdsb3NzdGVybT5NQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBNQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMW2RvY10gPSAiRmVhdHVyZXMgdG8gYmUgYWRkZWQgdG8gTUFDSElORV9GRUFUVVJFUyBpZiBub3QgYWxzbyBwcmVzZW50IGluIE1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRC4gVGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gdGhlIG1ldGEvY29uZi9iaXRiYWtlLmNvbmYgZmlsZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZXItY29uZmlndXJhYmxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEZlYXR1cmVzIHRvIGJlIGFkZGVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORV9GRUFUVVJFUyc+TUFDSElORV9GRUFUVVJFUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgYWxzbyBwcmVzZW50IGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORV9GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEJz5NQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQ8L2xpbms+PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgc2V0IGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VyLWNvbmZpZ3VyYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgYmVzdCB0byBqdXN0IHJlZmVyZW5jZSB0aGUgdmFyaWFibGUgdG8gc2VlIHdoaWNoIG1hY2hpbmUgZmVhdHVyZXMgYXJlCisgICAgICAgICAgICAgICAgICAgIGJlaW5nIGJhY2tmaWxsZWQgZm9yIGFsbCBtYWNoaW5lIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSdyZWYtZmVhdHVyZXMtYmFja2ZpbGwnPkZlYXR1cmUgYmFja2ZpbGxpbmc8L2xpbms+IiBzZWN0aW9uIGZvcgorICAgICAgICAgICAgICAgICAgICBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRCc+PGdsb3NzdGVybT5NQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRFtkb2NdID0gIkZlYXR1cmVzIGZyb20gTUFDSElORV9GRUFUVVJFU19CQUNLRklMTCB0aGF0IHNob3VsZCBub3QgYmUgYmFja2ZpbGxlZCAoaS5lLiBhZGRlZCB0byBNQUNISU5FX0ZFQVRVUkVTKSBkdXJpbmcgdGhlIGJ1aWxkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEZlYXR1cmVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMJz5NQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRoYXQgc2hvdWxkIG5vdCBiZSBiYWNrZmlsbGVkIChpLmUuIGFkZGVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORV9GRUFUVVJFUyc+TUFDSElORV9GRUFUVVJFUzwvbGluaz48L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0ncmVmLWZlYXR1cmVzLWJhY2tmaWxsJz5GZWF0dXJlIGJhY2tmaWxsaW5nPC9saW5rPiIgc2VjdGlvbiBmb3IKKyAgICAgICAgICAgICAgICAgICAgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1NQUNISU5FT1ZFUlJJREVTJz48Z2xvc3N0ZXJtPk1BQ0hJTkVPVkVSUklERVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE1BQ0hJTkVPVkVSUklERVNbZG9jXSA9ICJMaXN0cyBvdmVycmlkZXMgc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQgbWFjaGluZS4gQnkgZGVmYXVsdCwgdGhpcyBsaXN0IGluY2x1ZGVzIHRoZSB2YWx1ZSBvZiBNQUNISU5FLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIG92ZXJyaWRlcyBzcGVjaWZpYyB0byB0aGUgY3VycmVudCBtYWNoaW5lLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIGxpc3QgaW5jbHVkZXMgdGhlIHZhbHVlCisgICAgICAgICAgICAgICAgICAgIG9mIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+TUFDSElORTwvbGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBleHRlbmQgdGhlIGxpc3QgdG8gYXBwbHkgdmFyaWFibGUgb3ZlcnJpZGVzIGZvcgorICAgICAgICAgICAgICAgICAgICBjbGFzc2VzIG9mIG1hY2hpbmVzLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYWxsIFFFTVUgZW11bGF0ZWQgbWFjaGluZXMgKGUuZy4gcWVtdWFybSwKKyAgICAgICAgICAgICAgICAgICAgcWVtdXg4NiwgYW5kIHNvIGZvcnRoKSBpbmNsdWRlIGEgY29tbW9uIGZpbGUgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB0aGF0IHByZXBlbmRzIDxmaWxlbmFtZT5NQUNISU5FT1ZFUlJJREVTPC9maWxlbmFtZT4gd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIG92ZXJyaWRlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgTUFDSElORU9WRVJSSURFUyA9LiAicWVtdWFsbDoiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXBwbHlpbmcgYW4gb3ZlcnJpZGUgbGlrZSA8ZmlsZW5hbWU+cWVtdWFsbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFmZmVjdHMgYWxsIFFFTVUgZW11bGF0ZWQgbWFjaGluZXMgZWxzZXdoZXJlLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbm5tYW4tY29uZjwvZmlsZW5hbWU+IHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgIFNSQ19VUklfYXBwZW5kX3FlbXVhbGwgPSAiZmlsZTovL3dpcmVkLmNvbmZpZyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vd2lyZWQtc2V0dXAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1NQUlOVEFJTkVSJz48Z2xvc3N0ZXJtPk1BSU5UQUlORVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE1BSU5UQUlORVJbZG9jXSA9ICJUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgZGlzdHJpYnV0aW9uIG1haW50YWluZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIGRpc3RyaWJ1dGlvbiBtYWludGFpbmVyLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU1JUlJPUlMnPjxnbG9zc3Rlcm0+TUlSUk9SUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTUlSUk9SU1tkb2NdID0gIlNwZWNpZmllcyBhZGRpdGlvbmFsIHBhdGhzIGZyb20gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZ2V0cyBzb3VyY2UgY29kZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYWRkaXRpb25hbCBwYXRocyBmcm9tIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIGdldHMgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlIGJ1aWxkIHN5c3RlbSBzZWFyY2hlcyBmb3Igc291cmNlIGNvZGUsIGl0IGZpcnN0CisgICAgICAgICAgICAgICAgICAgIHRyaWVzIHRoZSBsb2NhbCBkb3dubG9hZCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIElmIHRoYXQgbG9jYXRpb24gZmFpbHMsIHRoZSBidWlsZCBzeXN0ZW0gdHJpZXMgbG9jYXRpb25zCisgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSRU1JUlJPUlMnPjxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICB0aGUgdXBzdHJlYW0gc291cmNlLCBhbmQgdGhlbiBsb2NhdGlvbnMgc3BlY2lmaWVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NSVJST1JTPC9maWxlbmFtZT4gaW4gdGhhdCBvcmRlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXNzdW1pbmcgeW91ciBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk8nPjxmaWxlbmFtZT5ESVNUUk88L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICAgICAgICAgIGlzICJwb2t5IiwgdGhlIGRlZmF1bHQgdmFsdWUgZm9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NSVJST1JTPC9maWxlbmFtZT4gaXMgZGVmaW5lZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvZGlzdHJvL3Bva3kuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvPC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTUxQUkVGSVgnPjxnbG9zc3Rlcm0+TUxQUkVGSVg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE1MUFJFRklYW2RvY10gPSAiU3BlY2lmaWVzIGEgcHJlZml4IGhhcyBiZWVuIGFkZGVkIHRvIFBOIHRvIGNyZWF0ZSBhIHNwZWNpYWwgdmVyc2lvbiBvZiBhIHJlY2lwZSBvciBwYWNrYWdlLCBzdWNoIGFzIGEgTXVsdGlsaWIgdmVyc2lvbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBwcmVmaXggaGFzIGJlZW4gYWRkZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4gdG8gY3JlYXRlIGEgc3BlY2lhbCB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIG9mIGEgcmVjaXBlIG9yIHBhY2thZ2UsIHN1Y2ggYXMgYSBNdWx0aWxpYiB2ZXJzaW9uLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgaXMgdXNlZCBpbiBwbGFjZXMgd2hlcmUgdGhlIHByZWZpeCBuZWVkcyB0byBiZQorICAgICAgICAgICAgICAgICAgICBhZGRlZCB0byBvciByZW1vdmVkIGZyb20gYSB0aGUgbmFtZSAoZS5nLiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJQTic+PGZpbGVuYW1lPkJQTjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZSkuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NTFBSRUZJWDwvZmlsZW5hbWU+IGdldHMgc2V0IHdoZW4gYSBwcmVmaXggaGFzIGJlZW4KKyAgICAgICAgICAgICAgICAgICAgYWRkZWQgdG8gPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItbW9kdWxlX2F1dG9sb2FkJz48Z2xvc3N0ZXJtPm1vZHVsZV9hdXRvbG9hZDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgbW9kdWxlX2F1dG9sb2FkW2RvY10gPSAiVGhpcyB2YXJpYWJsZSBoYXMgYmVlbiByZXBsYWNlZCBieSB0aGUgS0VSTkVMX01PRFVMRV9BVVRPTE9BRCB2YXJpYWJsZS4gWW91IHNob3VsZCByZXBsYWNlIGFsbCBvY2N1cnJlbmNlcyBvZiBtb2R1bGVfYXV0b2xvYWQgd2l0aCBhZGRpdGlvbnMgdG8gS0VSTkVMX01PRFVMRV9BVVRPTE9BRC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0VSTkVMX01PRFVMRV9BVVRPTE9BRDwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHJlcGxhY2UgYWxsIG9jY3VycmVuY2VzIG9mCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tb2R1bGVfYXV0b2xvYWQ8L2ZpbGVuYW1lPiB3aXRoIGFkZGl0aW9ucyB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0VSTkVMX01PRFVMRV9BVVRPTE9BRDwvZmlsZW5hbWU+LCBmb3IgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtb2R1bGVfYXV0b2xvYWRfcmZjb21tID0gInJmY29tbSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBzaG91bGQgbm93IGJlIHJlcGxhY2VkIHdpdGg6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0VSTkVMX01PRFVMRV9BVVRPTE9BRCArPSAicmZjb21tIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtFUk5FTF9NT0RVTEVfQVVUT0xPQUQnPjxmaWxlbmFtZT5LRVJORUxfTU9EVUxFX0FVVE9MT0FEPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLW1vZHVsZV9jb25mJz48Z2xvc3N0ZXJtPm1vZHVsZV9jb25mPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBtb2R1bGVfY29uZltkb2NdID0gIlNwZWNpZmllcyBtb2Rwcm9iZS5kIHN5bnRheCBsaW5lcyBmb3IgaW5jbHVzaW9uIGluIHRoZSAvZXRjL21vZHByb2JlLmQvbW9kbmFtZS5jb25mIGZpbGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi81L21vZHByb2JlLmQnPjxmaWxlbmFtZT5tb2Rwcm9iZS5kPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBzeW50YXggbGluZXMgZm9yIGluY2x1c2lvbiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvbW9kcHJvYmUuZC9tb2RuYW1lLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIHZhcmlhYmxlIGFueXdoZXJlIHRoYXQgaXQgY2FuIGJlCisgICAgICAgICAgICAgICAgICAgIHJlY29nbml6ZWQgYnkgdGhlIGtlcm5lbCByZWNpcGUgb3Igb3V0LW9mLXRyZWUga2VybmVsCisgICAgICAgICAgICAgICAgICAgIG1vZHVsZSByZWNpcGUgKGUuZy4gYSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZSwgYQorICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBmaWxlLCBhbiBhcHBlbmQgZmlsZSBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSwgb3IgdGhlIHJlY2lwZSBpdHNlbGYpLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgdXNlIHRoaXMgdmFyaWFibGUsIHlvdSBtdXN0IGFsc28gYmUgc3VyZSB0byBsaXN0CisgICAgICAgICAgICAgICAgICAgIHRoZSBtb2R1bGUgbmFtZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtFUk5FTF9NT0RVTEVfQVVUT0xPQUQnPjxmaWxlbmFtZT5LRVJORUxfTU9EVUxFX0FVVE9MT0FEPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBnZW5lcmFsIHN5bnRheDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtb2R1bGVfY29uZl88cmVwbGFjZWFibGU+bW9kdWxlX25hbWU8L3JlcGxhY2VhYmxlPiA9ICI8cmVwbGFjZWFibGU+bW9kcHJvYmUuZC1zeW50YXg8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCB1c2UgdGhlIGtlcm5lbCBtb2R1bGUgbmFtZSBvdmVycmlkZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUnVuIDxmaWxlbmFtZT5tYW4gbW9kcHJvYmUuZDwvZmlsZW5hbWU+IGluIHRoZSBzaGVsbCB0bworICAgICAgICAgICAgICAgICAgICBmaW5kIG91dCBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBleGFjdCBzeW50YXgKKyAgICAgICAgICAgICAgICAgICAgeW91IHdhbnQgdG8gcHJvdmlkZSB3aXRoIDxmaWxlbmFtZT5tb2R1bGVfY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbmNsdWRpbmcgPGZpbGVuYW1lPm1vZHVsZV9jb25mPC9maWxlbmFtZT4gY2F1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHBvcHVsYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2V0Yy9tb2Rwcm9iZS5kL21vZG5hbWUuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGUgd2l0aCA8ZmlsZW5hbWU+bW9kcHJvYmUuZDwvZmlsZW5hbWU+IHN5bnRheCBsaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgYWRkcyB0aGUgb3B0aW9ucworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXJnMTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+YXJnMjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRvIGEgbW9kdWxlIG5hbWVkIDxmaWxlbmFtZT5teW1vZHVsZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1vZHVsZV9jb25mX215bW9kdWxlID0gIm9wdGlvbnMgbXltb2R1bGUgYXJnMT12YWwxIGFyZzI9dmFsMiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHNwZWNpZnkga2VybmVsIG1vZHVsZXMgdG8KKyAgICAgICAgICAgICAgICAgICAgYXV0by1sb2FkIG9uIGJvb3QsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtFUk5FTF9NT0RVTEVfQVVUT0xPQUQnPjxmaWxlbmFtZT5LRVJORUxfTU9EVUxFX0FVVE9MT0FEPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU1PRFVMRV9JTUFHRV9CQVNFX05BTUUnPjxnbG9zc3Rlcm0+TU9EVUxFX0lNQUdFX0JBU0VfTkFNRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTU9EVUxFX0lNQUdFX0JBU0VfTkFNRVtkb2NdID0gIlRoZSBiYXNlIG5hbWUgb2YgdGhlIGtlcm5lbCBtb2R1bGVzIHRhcmJhbGwuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJhc2UgbmFtZSBvZiB0aGUga2VybmVsIG1vZHVsZXMgdGFyYmFsbC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWtlcm5lbCc+a2VybmVsPC9saW5rPiBjbGFzcworICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE1PRFVMRV9JTUFHRV9CQVNFX05BTUUgPz0gIm1vZHVsZXMtJHtQS0dFfS0ke1BLR1Z9LSR7UEtHUn0tJHtNQUNISU5FfS0ke0RBVEVUSU1FfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QS0dFJz48ZmlsZW5hbWU+UEtHRTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBLR1YnPjxmaWxlbmFtZT5QS0dWPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEtHUic+PGZpbGVuYW1lPlBLR1I8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1EQVRFVElNRSc+PGZpbGVuYW1lPkRBVEVUSU1FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1NT0RVTEVfVEFSQkFMTF9ERVBMT1knPjxnbG9zc3Rlcm0+TU9EVUxFX1RBUkJBTExfREVQTE9ZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBNT0RVTEVfVEFSQkFMTF9ERVBMT1lbZG9jXSA9ICJDb250cm9scyBjcmVhdGlvbiBvZiB0aGUgbW9kdWxlcy0qLnRneiBmaWxlLiBTZXQgdGhpcyB2YXJpYWJsZSB0byAiMCIgdG8gZGlzYWJsZSBjcmVhdGlvbiBvZiB0aGlzIGZpbGUsIHdoaWNoIGNvbnRhaW5zIGFsbCBvZiB0aGUga2VybmVsIG1vZHVsZXMgcmVzdWx0aW5nIGZyb20gYSBrZXJuZWwgYnVpbGQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgY3JlYXRpb24gb2YgdGhlIDxmaWxlbmFtZT5tb2R1bGVzLSoudGd6PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgU2V0IHRoaXMgdmFyaWFibGUgdG8gIjAiIHRvIGRpc2FibGUgY3JlYXRpb24gb2YgdGhpcworICAgICAgICAgICAgICAgICAgICBmaWxlLCB3aGljaCBjb250YWlucyBhbGwgb2YgdGhlIGtlcm5lbCBtb2R1bGVzIHJlc3VsdGluZworICAgICAgICAgICAgICAgICAgICBmcm9tIGEga2VybmVsIGJ1aWxkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU1VTFRJTUFDSF9UQVJHRVRfU1lTJz48Z2xvc3N0ZXJtPk1VTFRJTUFDSF9UQVJHRVRfU1lTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBNVUxUSU1BQ0hfVEFSR0VUX1NZU1tkb2NdID0gIlNlcGFyYXRlcyBmaWxlcyBmb3IgZGlmZmVyZW50IG1hY2hpbmVzIHN1Y2ggdGhhdCB5b3UgY2FuIGJ1aWxkIGZvciBtdWx0aXBsZSB0YXJnZXQgbWFjaGluZXMgdXNpbmcgdGhlIHNhbWUgb3V0cHV0IGRpcmVjdG9yaWVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNlcGFyYXRlcyBmaWxlcyBmb3IgZGlmZmVyZW50IG1hY2hpbmVzIHN1Y2ggdGhhdCB5b3UgY2FuIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGZvciBtdWx0aXBsZSB0YXJnZXQgbWFjaGluZXMgdXNpbmcgdGhlIHNhbWUgb3V0cHV0IGRpcmVjdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFNUCc+PGZpbGVuYW1lPlNUQU1QPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGZvciBhbiBleGFtcGxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1uJz48dGl0bGU+TjwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1OQVRJVkVMU0JTVFJJTkcnPjxnbG9zc3Rlcm0+TkFUSVZFTFNCU1RSSU5HPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBOQVRJVkVMU0JTVFJJTkdbZG9jXSA9ICJBIHN0cmluZyBpZGVudGlmeWluZyB0aGUgaG9zdCBkaXN0cmlidXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIGhvc3QgZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgICAgICAgICBTdHJpbmdzIGNvbnNpc3Qgb2YgdGhlIGhvc3QgZGlzdHJpYnV0b3IgSUQKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93ZWQgYnkgdGhlIHJlbGVhc2UsIGFzIHJlcG9ydGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bHNiX3JlbGVhc2U8L2ZpbGVuYW1lPiB0b29sCisgICAgICAgICAgICAgICAgICAgIG9yIGFzIHJlYWQgZnJvbSA8ZmlsZW5hbWU+L2V0Yy9sc2ItcmVsZWFzZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgd2hlbiBydW5uaW5nIGEgYnVpbGQgb24gVWJ1bnR1IDEyLjEwLCB0aGUgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgaXMgIlVidW50dS0xMi4xMCIuCisgICAgICAgICAgICAgICAgICAgIElmIHRoaXMgaW5mb3JtYXRpb24gaXMgdW5hYmxlIHRvIGJlIGRldGVybWluZWQsIHRoZSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICByZXNvbHZlcyB0byAiVW5rbm93biIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBieSBkZWZhdWx0IHRvIGlzb2xhdGUgbmF0aXZlIHNoYXJlZAorICAgICAgICAgICAgICAgICAgICBzdGF0ZSBwYWNrYWdlcyBmb3IgZGlmZmVyZW50IGRpc3RyaWJ1dGlvbnMgKGUuZy4gdG8gYXZvaWQKKyAgICAgICAgICAgICAgICAgICAgcHJvYmxlbXMgd2l0aCA8ZmlsZW5hbWU+Z2xpYmM8L2ZpbGVuYW1lPiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIGluY29tcGF0aWJpbGl0aWVzKS4KKyAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCB0aGUgdmFyaWFibGUgaXMgY2hlY2tlZCBhZ2FpbnN0CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TQU5JVFlfVEVTVEVEX0RJU1RST1MnPjxmaWxlbmFtZT5TQU5JVFlfVEVTVEVEX0RJU1RST1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaWYgdGhhdCB2YXJpYWJsZSBpcyBzZXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTk0nPjxnbG9zc3Rlcm0+Tk08L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE5NW2RvY10gPSAiTWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuICdubScuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1bgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bm08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1OT19SRUNPTU1FTkRBVElPTlMnPjxnbG9zc3Rlcm0+Tk9fUkVDT01NRU5EQVRJT05TPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBOT19SRUNPTU1FTkRBVElPTlNbZG9jXSA9ICJXaGVuIHNldCB0byAnMScsIG5vIHJlY29tbWVuZGVkIHBhY2thZ2VzIHdpbGwgYmUgaW5zdGFsbGVkLiBSZWFsaXplIHRoYXQgc29tZSByZWNvbW1lbmRlZCBwYWNrYWdlcyBtaWdodCBiZSByZXF1aXJlZCBmb3IgY2VydGFpbiBzeXN0ZW0gZnVuY3Rpb25hbGl0eSwgc3VjaCBhcyBrZXJuZWwtbW9kdWxlcy4gSXQgaXMgdXAgdG8gdGhlIHVzZXIgdG8gYWRkIHBhY2thZ2VzIHRvIElNQUdFX0lOU1RBTEwgYXMgbmVlZGVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFByZXZlbnRzIGluc3RhbGxhdGlvbiBvZiBhbGwgInJlY29tbWVuZGVkLW9ubHkiIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBSZWNvbW1lbmRlZC1vbmx5IHBhY2thZ2VzIGFyZSBwYWNrYWdlcyBpbnN0YWxsZWQgb25seQorICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSkuCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgdGhlIDxmaWxlbmFtZT5OT19SRUNPTU1FTkRBVElPTlM8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICB0byAiMSIgdHVybnMgdGhpcyBmZWF0dXJlIG9uOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE5PX1JFQ09NTUVOREFUSU9OUyA9ICIxIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0IHRoaXMgdmFyaWFibGUgZ2xvYmFsbHkgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgb3IgeW91IGNhbiBhdHRhY2ggaXQgdG8KKyAgICAgICAgICAgICAgICAgICAgYSBzcGVjaWZpYyBpbWFnZSByZWNpcGUgYnkgdXNpbmcgdGhlIHJlY2lwZSBuYW1lIG92ZXJyaWRlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE5PX1JFQ09NTUVOREFUSU9OU19wbi08cmVwbGFjZWFibGU+dGFyZ2V0X2ltYWdlPC9yZXBsYWNlYWJsZT4gPSAiPHJlcGxhY2VhYmxlPnBhY2thZ2VfbmFtZTwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGltcG9ydGFudCB0byByZWFsaXplIHRoYXQgaWYgeW91IGNob29zZSB0byBub3QgaW5zdGFsbAorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyB1c2luZyB0aGlzIHZhcmlhYmxlIGFuZCBzb21lIG90aGVyIHBhY2thZ2VzIGFyZQorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbnQgb24gdGhlbSAoaS5lLiBsaXN0ZWQgaW4gYSByZWNpcGUncworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSksIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGlnbm9yZXMgeW91cgorICAgICAgICAgICAgICAgICAgICByZXF1ZXN0IGFuZCB3aWxsIGluc3RhbGwgdGhlIHBhY2thZ2VzIHRvIGF2b2lkIGRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNvbWUgcmVjb21tZW5kZWQgcGFja2FnZXMgbWlnaHQgYmUgcmVxdWlyZWQgZm9yIGNlcnRhaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBmdW5jdGlvbmFsaXR5LCBzdWNoIGFzIGtlcm5lbCBtb2R1bGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgdXAgdG8geW91IHRvIGFkZCBwYWNrYWdlcyB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0lOU1RBTEwnPjxmaWxlbmFtZT5JTUFHRV9JTlNUQUxMPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IGZvciB0aGlzIHZhcmlhYmxlIGV4aXN0cyBvbmx5IHdoZW4gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIElQSyBhbmQgUlBNIHBhY2thZ2luZyBiYWNrZW5kLgorICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IGRvZXMgbm90IGV4aXN0IGZvciBERUIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJBRF9SRUNPTU1FTkRBVElPTlMnPjxmaWxlbmFtZT5CQURfUkVDT01NRU5EQVRJT05TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfRVhDTFVERSc+PGZpbGVuYW1lPlBBQ0tBR0VfRVhDTFVERTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgZm9yIHJlbGF0ZWQgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTk9IREQnPjxnbG9zc3Rlcm0+Tk9IREQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE5PSEREW2RvY10gPSAiQ2F1c2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHNraXAgYnVpbGRpbmcgdGhlIC5oZGRpbWcgaW1hZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHNraXAgYnVpbGRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uaGRkaW1nPC9maWxlbmFtZT4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Tk9IREQ8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyB1c2VkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJvb3RpbWcnPjxmaWxlbmFtZT5ib290aW1nPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgICAgICBTZXQgdGhlIHZhcmlhYmxlIHRvICIxIiB0byBwcmV2ZW50IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmhkZGltZzwvZmlsZW5hbWU+IGltYWdlIGZyb20gYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTk9JU08nPjxnbG9zc3Rlcm0+Tk9JU088L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE5PSVNPW2RvY10gPSAiQ2F1c2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHNraXAgYnVpbGRpbmcgdGhlIElTTyBpbWFnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBDYXVzZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gc2tpcCBidWlsZGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgSVNPIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPk5PSVNPPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgdXNlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ib290aW1nJz48ZmlsZW5hbWU+Ym9vdGltZzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgU2V0IHRoZSB2YXJpYWJsZSB0byAiMSIgdG8gcHJldmVudCB0aGUgSVNPIGltYWdlIGZyb20KKyAgICAgICAgICAgICAgICAgICAgYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIFRvIGVuYWJsZSBidWlsZGluZyBhbiBJU08gaW1hZ2UsIHNldCB0aGUgdmFyaWFibGUgdG8gIjAiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1vJz48dGl0bGU+TzwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1PQkpDT1BZJz48Z2xvc3N0ZXJtPk9CSkNPUFk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE9CSkNPUFlbZG9jXSA9ICJNaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gJ29iamNvcHknLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9iamNvcHk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1PQkpEVU1QJz48Z2xvc3N0ZXJtPk9CSkRVTVA8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE9CSkRVTVBbZG9jXSA9ICJNaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gJ29iamR1bXAnLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9iamR1bXA8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1PRV9CSU5DT05GSUdfRVhUUkFfTUFOR0xFJz48Z2xvc3N0ZXJtPk9FX0JJTkNPTkZJR19FWFRSQV9NQU5HTEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE9FX0JJTkNPTkZJR19FWFRSQV9NQU5HTEVbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBiaW5jb25maWcuYmJjbGFzcyBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYWRkaXRpb25hbCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSAic2VkIiBjb21tYW5kLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYmluY29uZmlnJz48ZmlsZW5hbWU+YmluY29uZmlnPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBhZGRpdGlvbmFsIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlICJzZWQiIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzZWQgY29tbWFuZCBhbHRlcnMgYW55IHBhdGhzIGluIGNvbmZpZ3VyYXRpb24gc2NyaXB0cworICAgICAgICAgICAgICAgICAgICB0aGF0IGhhdmUgYmVlbiBzZXQgdXAgZHVyaW5nIGNvbXBpbGF0aW9uLgorICAgICAgICAgICAgICAgICAgICBJbmhlcml0aW5nIHRoaXMgY2xhc3MgcmVzdWx0cyBpbiBhbGwgcGF0aHMgaW4gdGhlc2Ugc2NyaXB0cworICAgICAgICAgICAgICAgICAgICBiZWluZyBjaGFuZ2VkIHRvIHBvaW50IGludG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zeXNyb290cy88L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgc28gdGhhdCBhbGwgYnVpbGRzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgdXNlIHRoZSBzY3JpcHQgd2lsbCB1c2UgdGhlIGNvcnJlY3QgZGlyZWN0b3JpZXMKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBjcm9zcyBjb21waWxpbmcgbGF5b3V0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvYmluY29uZmlnLmJiY2xhc3M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciBkZXRhaWxzIG9uIGhvdyB0aGlzIGNsYXNzIGFwcGxpZXMgdGhlc2UgYWRkaXRpb25hbAorICAgICAgICAgICAgICAgICAgICBzZWQgY29tbWFuZCBhcmd1bWVudHMuCisgICAgICAgICAgICAgICAgICAgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmluY29uZmlnLmJiY2xhc3M8L2ZpbGVuYW1lPiBjbGFzcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYmluY29uZmlnJz5CaW5hcnkgQ29uZmlndXJhdGlvbiBTY3JpcHRzIC0gPGZpbGVuYW1lPmJpbmNvbmZpZy5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU9FX0lNUE9SVFMnPjxnbG9zc3Rlcm0+T0VfSU1QT1JUUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgT0VfSU1QT1JUU1tkb2NdID0gIkFuIGludGVybmFsIHZhcmlhYmxlIHVzZWQgdG8gdGVsbCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aGF0IFB5dGhvbiBtb2R1bGVzIHRvIGltcG9ydCBmb3IgZXZlcnkgUHl0aG9uIGZ1bmN0aW9uIHJ1biBieSB0aGUgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEFuIGludGVybmFsIHZhcmlhYmxlIHVzZWQgdG8gdGVsbCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSB3aGF0IFB5dGhvbiBtb2R1bGVzIHRvIGltcG9ydCBmb3IgZXZlcnkgUHl0aG9uCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJ1biBieSB0aGUgc3lzdGVtLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBEbyBub3Qgc2V0IHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1PRV9URVJNSU5BTCc+PGdsb3NzdGVybT5PRV9URVJNSU5BTDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgT0VfVEVSTUlOQUxbZG9jXSA9ICJDb250cm9scyBob3cgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc3Bhd25zIGludGVyYWN0aXZlIHRlcm1pbmFscyBvbiB0aGUgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgaG93IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHNwYXducworICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZSB0ZXJtaW5hbHMgb24gdGhlIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIChlLmcuIHVzaW5nIHRoZSBCaXRCYWtlIGNvbW1hbmQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1jIGRldnNoZWxsPC9maWxlbmFtZT4gY29tbWFuZC1saW5lIG9wdGlvbikuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwbGF0ZGV2LWFwcGRldi1kZXZzaGVsbCc+VXNpbmcgYSBEZXZlbG9wbWVudCBTaGVsbDwvdWxpbms+IiBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIHZhbHVlcyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5PRV9URVJNSU5BTDwvZmlsZW5hbWU+IHZhcmlhYmxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGF1dG8KKyAgICAgZ25vbWUKKyAgICAgeGZjZQorICAgICByeHZ0CisgICAgIHNjcmVlbgorICAgICBrb25zb2xlCisgICAgIG5vbmUKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU9FUk9PVCc+PGdsb3NzdGVybT5PRVJPT1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE9FUk9PVFtkb2NdID0gIlRoZSBkaXJlY3RvcnkgZnJvbSB3aGljaCB0aGUgdG9wLWxldmVsIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBpcyBzb3VyY2VkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgZnJvbSB3aGljaCB0aGUgdG9wLWxldmVsIGJ1aWxkIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgIHNldHVwIHNjcmlwdCBpcyBzb3VyY2VkLgorICAgICAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBtYWtlcyB0d28gdG9wLWxldmVsIGJ1aWxkIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgIHNldHVwIHNjcmlwdHMgYXZhaWxhYmxlOgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgcnVuIG9uZSBvZiB0aGVzZSBzY3JpcHRzLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk9FUk9PVDwvZmlsZW5hbWU+IHZhcmlhYmxlIHJlc29sdmVzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0aGUgc2NyaXB0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBob3cgdGhpcyB2YXJpYWJsZSBpcyB1c2VkLAorICAgICAgICAgICAgICAgICAgICBzZWUgdGhlIGluaXRpYWxpemF0aW9uIHNjcmlwdHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItT0xERVNUX0tFUk5FTCc+PGdsb3NzdGVybT5PTERFU1RfS0VSTkVMPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBPTERFU1RfS0VSTkVMW2RvY10gPSAiRGVjbGFyZXMgdGhlIG9sZGVzdCB2ZXJzaW9uIG9mIHRoZSBMaW51eCBrZXJuZWwgdGhhdCB0aGUgcHJvZHVjZWQgYmluYXJpZXMgbXVzdCBzdXBwb3J0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERlY2xhcmVzIHRoZSBvbGRlc3QgdmVyc2lvbiBvZiB0aGUgTGludXgga2VybmVsIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIHByb2R1Y2VkIGJpbmFyaWVzIG11c3Qgc3VwcG9ydC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBwYXNzZWQgaW50byB0aGUgYnVpbGQgb2YgdGhlIEVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgIEdOVSBDIExpYnJhcnkgKDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgZm9yIHRoaXMgdmFyaWFibGUgY29tZXMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBkZWZhdWx0IGJ5IHNldHRpbmcgdGhlIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGluIGEgY3VzdG9tIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItT1ZFUlJJREVTJz48Z2xvc3N0ZXJtPk9WRVJSSURFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgT1ZFUlJJREVTW2RvY10gPSAiQml0QmFrZSB1c2VzIE9WRVJSSURFUyB0byBjb250cm9sIHdoYXQgdmFyaWFibGVzIGFyZSBvdmVycmlkZGVuIGFmdGVyIEJpdEJha2UgcGFyc2VzIHJlY2lwZXMgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiB0byBjb250cm9sCisgICAgICAgICAgICAgICAgICAgIHdoYXQgdmFyaWFibGVzIGFyZSBvdmVycmlkZGVuIGFmdGVyIEJpdEJha2UgcGFyc2VzCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyBvdmVycmlkZXMgYXJlIGhhbmRsZWQKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I2NvbmRpdGlvbmFsLXN5bnRheC1vdmVycmlkZXMnPkNvbmRpdGlvbmFsIFN5bnRheCAoT3ZlcnJpZGVzKTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktcCc+PHRpdGxlPlA8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUCc+PGdsb3NzdGVybT5QPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQW2RvY10gPSAiVGhlIHJlY2lwZSBuYW1lIGFuZCB2ZXJzaW9uLiBQIGlzIGNvbXByaXNlZCBvZiAke1BOfS0ke1BWfS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVjaXBlIG5hbWUgYW5kIHZlcnNpb24uCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QPC9maWxlbmFtZT4gaXMgY29tcHJpc2VkIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtQTn0tJHtQVn0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBQ0tBR0VfQVJDSCc+PGdsb3NzdGVybT5QQUNLQUdFX0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBQ0tBR0VfQVJDSFtkb2NdID0gIlRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIHJlc3VsdGluZyBwYWNrYWdlIG9yIHBhY2thZ2VzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIHJlc3VsdGluZyBwYWNrYWdlIG9yIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVfUEtHQVJDSCc+PGZpbGVuYW1lPlRVTkVfUEtHQVJDSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QlVJTERfQVJDSDwvZmlsZW5hbWU+IHdoZW4gYnVpbGRpbmcgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBob3N0IGFuZCAiJHtTREtfQVJDSH0tJHtTREtQS0dTVUZGSVh9IiB3aGVuIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgU0RLLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3VyIHJlY2lwZSdzIG91dHB1dCBwYWNrYWdlcyBhcmUgYnVpbHQKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgdG8gdGhlIHRhcmdldCBtYWNoaW5lIHJhdGhlciB0aGFuIGdlbmVyYWwgZm9yCisgICAgICAgICAgICAgICAgICAgIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIG1hY2hpbmUsIHlvdSBzaG91bGQgc2V0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFX0FSQ0g8L2ZpbGVuYW1lPiB0byB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfQVJDSCc+PGZpbGVuYW1lPk1BQ0hJTkVfQVJDSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgcmVjaXBlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBQ0tBR0VfQVJDSFMnPjxnbG9zc3Rlcm0+UEFDS0FHRV9BUkNIUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEFDS0FHRV9BUkNIU1tkb2NdID0gIkEgbGlzdCBvZiBhcmNoaXRlY3R1cmVzIGNvbXBhdGlibGUgd2l0aCB0aGUgZ2l2ZW4gdGFyZ2V0IGluIG9yZGVyIG9mIHByaW9yaXR5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcyBjb21wYXRpYmxlIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIHRhcmdldCBtYWNoaW5lLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHNldCBhdXRvbWF0aWNhbGx5IGFuZCBzaG91bGQgbm90CisgICAgICAgICAgICAgICAgICAgIG5vcm1hbGx5IGJlIGhhbmQtZWRpdGVkLgorICAgICAgICAgICAgICAgICAgICBFbnRyaWVzIGFyZSBzZXBhcmF0ZWQgdXNpbmcgc3BhY2VzIGFuZCBsaXN0ZWQgaW4gb3JkZXIKKyAgICAgICAgICAgICAgICAgICAgb2YgcHJpb3JpdHkuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFDS0FHRV9BUkNIUzwvZmlsZW5hbWU+IGlzICJhbGwgYW55IG5vYXJjaAorICAgICAgICAgICAgICAgICAgICAke1BBQ0tBR0VfRVhUUkFfQVJDSFN9ICR7TUFDSElORV9BUkNIfSIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRV9CRUZPUkVfUE4nPjxnbG9zc3Rlcm0+UEFDS0FHRV9CRUZPUkVfUE48L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBQ0tBR0VfQkVGT1JFX1BOW2RvY10gPSAiRW5hYmxlcyBlYXNpbHkgYWRkaW5nIHBhY2thZ2VzIHRvIFBBQ0tBR0VTIGJlZm9yZSAke1BOfSBzbyB0aGF0IHRoZSBwYWNrYWdlcyBjYW4gcGljayB1cCBmaWxlcyB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlIGluY2x1ZGVkIGluIHRoZSBkZWZhdWx0IHBhY2thZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRW5hYmxlcyBlYXNpbHkgYWRkaW5nIHBhY2thZ2VzIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRVMnPlBBQ0tBR0VTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGJlZm9yZSA8ZmlsZW5hbWU+JHs8bGluayBsaW5rZW5kPSd2YXItUE4nPlBOPC9saW5rPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzbyB0aGF0IHRob3NlIGFkZGVkIHBhY2thZ2VzIGNhbiBwaWNrIHVwIGZpbGVzIHRoYXQgd291bGQgbm9ybWFsbHkgYmUKKyAgICAgICAgICAgICAgICAgICAgaW5jbHVkZWQgaW4gdGhlIGRlZmF1bHQgcGFja2FnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxnbG9zc3Rlcm0+UEFDS0FHRV9DTEFTU0VTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFX0NMQVNTRVNbZG9jXSA9ICJUaGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgcGFja2FnZSBtYW5hZ2VyIHRvIHVzZSB3aGVuIHBhY2thZ2luZyBkYXRhLiBJdCBpcyBzZXQgaW4gdGhlIGNvbmYvbG9jYWwuY29uZiBmaWxlIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSwgd2hpY2ggaXMgc2V0IGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZSBmb3VuZCBpbgorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBmb2xkZXIgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyB0aGUgcGFja2FnZSBtYW5hZ2VyIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHVzZXMgd2hlbiBwYWNrYWdpbmcgZGF0YS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBwcm92aWRlIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIGZvcgorICAgICAgICAgICAgICAgICAgICB0aGUgdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRV9DTEFTU0VTID89ICJwYWNrYWdlX3JwbSBwYWNrYWdlX2RlYiBwYWNrYWdlX2lwayBwYWNrYWdlX3RhciIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+V2FybmluZzwvdGl0bGU+CisgICAgICAgICAgICAgICAgICAgICAgICBXaGlsZSBpdCBpcyBhIGxlZ2FsIG9wdGlvbiwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZV90YXI8L2ZpbGVuYW1lPiBjbGFzcyBpcyBicm9rZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBpcyBub3Qgc3VwcG9ydGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG8gbm90IHVzZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIHVzZXMgb25seSB0aGUgZmlyc3QgYXJndW1lbnQgaW4gdGhlIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgYXMgdGhlIHBhY2thZ2UgbWFuYWdlciB3aGVuIGNyZWF0aW5nIHlvdXIgaW1hZ2Ugb3IgU0RLLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBwYWNrYWdlcyB3aWxsIGJlIGNyZWF0ZWQgdXNpbmcgYW55IGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnaW5nIGNsYXNzZXMgeW91IHNwZWNpZnkuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgdXNlIHRoZSBmb2xsb3dpbmcgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRV9DTEFTU0VTID89ICJwYWNrYWdlX2lwayIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRoZSBJUEsgcGFja2FnZSBtYW5hZ2VyCisgICAgICAgICAgICAgICAgICAgIHRvIGNyZWF0ZSB5b3VyIGltYWdlIG9yIFNESy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHBhY2thZ2luZyBhbmQgYnVpbGQgcGVyZm9ybWFuY2UgZWZmZWN0cworICAgICAgICAgICAgICAgICAgICBhcyBhIHJlc3VsdCBvZiB0aGUgcGFja2FnZSBtYW5hZ2VyIGluIHVzZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcGFja2FnZSc+PGZpbGVuYW1lPnBhY2thZ2UuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxFJz48Z2xvc3N0ZXJtPlBBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEVbZG9jXSA9ICJEZXRlcm1pbmVzIGhvdyB0byBzcGxpdCB1cCB0aGUgYmluYXJ5IGFuZCBkZWJ1ZyBpbmZvcm1hdGlvbiB3aGVuIGNyZWF0aW5nICotZGJnIHBhY2thZ2VzIHRvIGJlIHVzZWQgd2l0aCB0aGUgR05VIFByb2plY3QgRGVidWdnZXIgKEdEQikuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyBob3cgdG8gc3BsaXQgdXAgdGhlIGJpbmFyeSBhbmQgZGVidWcgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgd2hlbiBjcmVhdGluZyA8ZmlsZW5hbWU+Ki1kYmc8L2ZpbGVuYW1lPiBwYWNrYWdlcyB0byBiZQorICAgICAgICAgICAgICAgICAgICB1c2VkIHdpdGggdGhlIEdOVSBQcm9qZWN0IERlYnVnZ2VyIChHREIpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFDS0FHRV9ERUJVR19TUExJVF9TVFlMRTwvZmlsZW5hbWU+IHZhcmlhYmxlLAorICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIGNvbnRyb2wgd2hlcmUgZGVidWcgaW5mb3JtYXRpb24sIHdoaWNoIGNhbiBpbmNsdWRlCisgICAgICAgICAgICAgICAgICAgIG9yIGV4Y2x1ZGUgc291cmNlIGZpbGVzLCBpcyBzdG9yZWQ6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi5kZWJ1ZyI6IERlYnVnIHN5bWJvbCBmaWxlcyBhcmUgcGxhY2VkIG5leHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgYmluYXJ5IGluIGEgPGZpbGVuYW1lPi5kZWJ1ZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IG9uIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIGEgYmluYXJ5IGlzIGluc3RhbGxlZCBpbnRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9iaW48L2ZpbGVuYW1lPiwgdGhlIGNvcnJlc3BvbmRpbmcgZGVidWcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2wgZmlsZXMgYXJlIGluc3RhbGxlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vYmluLy5kZWJ1ZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBmaWxlcyBhcmUgcGxhY2VkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3Ivc3JjL2RlYnVnPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVidWctZmlsZS1kaXJlY3RvcnkiOiBEZWJ1ZyBzeW1ib2wgZmlsZXMgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VkIHVuZGVyIDxmaWxlbmFtZT4vdXNyL2xpYi9kZWJ1ZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIHRhcmdldCwgYW5kIHNlcGFyYXRlZCBieSB0aGUgcGF0aCBmcm9tIHdoZXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJpbmFyeSBpcyBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIGEgYmluYXJ5IGlzIGluc3RhbGxlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vYmluPC9maWxlbmFtZT4sIHRoZSBjb3JyZXNwb25kaW5nIGRlYnVnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9scyBhcmUgaW5zdGFsbGVkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvbGliL2RlYnVnL2JpbjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBmaWxlcyBhcmUgcGxhY2VkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3Ivc3JjL2RlYnVnPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlYnVnLXdpdGhvdXQtc3JjIjogVGhlIHNhbWUgYmVoYXZpb3IgYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLmRlYnVnIiBwcmV2aW91c2x5IGRlc2NyaWJlZCB3aXRoIHRoZSBleGNlcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IG5vIHNvdXJjZSBmaWxlcyBhcmUgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPi4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBvdXQgbW9yZSBhYm91dCBkZWJ1Z2dpbmcgdXNpbmcgR0RCIGJ5IHJlYWRpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwbGF0ZGV2LWdkYi1yZW1vdGVkZWJ1Zyc+RGVidWdnaW5nIFdpdGggdGhlIEdOVSBQcm9qZWN0IERlYnVnZ2VyIChHREIpIFJlbW90ZWx5PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBQ0tBR0VfRVhDTFVERSc+PGdsb3NzdGVybT5QQUNLQUdFX0VYQ0xVREU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBQ0tBR0VfRVhDTFVERVtkb2NdID0gIlBhY2thZ2VzIHRvIGV4Y2x1ZGUgZnJvbSB0aGUgaW5zdGFsbGF0aW9uLiBJZiBhIGxpc3RlZCBwYWNrYWdlIGlzIHJlcXVpcmVkLCBhbiBlcnJvciBpcyBnZW5lcmF0ZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgcGFja2FnZXMgdGhhdCBzaG91bGQgbm90IGJlIGluc3RhbGxlZCBpbnRvIGFuIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFX0VYQ0xVREUgPSAiPHJlcGxhY2VhYmxlPnBhY2thZ2VfbmFtZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5wYWNrYWdlX25hbWU8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+cGFja2FnZV9uYW1lPC9yZXBsYWNlYWJsZT4gLi4uIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0IHRoaXMgdmFyaWFibGUgZ2xvYmFsbHkgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgb3IgeW91IGNhbiBhdHRhY2ggaXQgdG8KKyAgICAgICAgICAgICAgICAgICAgYSBzcGVjaWZpYyBpbWFnZSByZWNpcGUgYnkgdXNpbmcgdGhlIHJlY2lwZSBuYW1lIG92ZXJyaWRlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VfRVhDTFVERV9wbi08cmVwbGFjZWFibGU+dGFyZ2V0X2ltYWdlPC9yZXBsYWNlYWJsZT4gPSAiPHJlcGxhY2VhYmxlPnBhY2thZ2VfbmFtZTwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBjaG9vc2UgdG8gbm90IGluc3RhbGwKKyAgICAgICAgICAgICAgICAgICAgYSBwYWNrYWdlIHVzaW5nIHRoaXMgdmFyaWFibGUgYW5kIHNvbWUgb3RoZXIgcGFja2FnZSBpcworICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbnQgb24gaXQgKGkuZS4gbGlzdGVkIGluIGEgcmVjaXBlJ3MKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUpLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBnZW5lcmF0ZXMgYSBmYXRhbAorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb24gZXJyb3IuCisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlIGJ1aWxkIHN5c3RlbSBoYWx0cyB0aGUgcHJvY2VzcyB3aXRoIGEgZmF0YWwKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IsIHlvdSBjYW4gdXNlIHRoZSB2YXJpYWJsZSB3aXRoIGFuIGl0ZXJhdGl2ZQorICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBwcm9jZXNzIHRvIHJlbW92ZSBzcGVjaWZpYyBjb21wb25lbnRzIGZyb20gYQorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIHRoaXMgdmFyaWFibGUgZXhpc3RzIG9ubHkgd2hlbiB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgSVBLIGFuZCBSUE0gcGFja2FnaW5nIGJhY2tlbmQuCisgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgZG9lcyBub3QgZXhpc3QgZm9yIERFQi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTk9fUkVDT01NRU5EQVRJT05TJz48ZmlsZW5hbWU+Tk9fUkVDT01NRU5EQVRJT05TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJBRF9SRUNPTU1FTkRBVElPTlMnPjxmaWxlbmFtZT5CQURfUkVDT01NRU5EQVRJT05TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBmb3IgcmVsYXRlZCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQUNLQUdFX0VYVFJBX0FSQ0hTJz48Z2xvc3N0ZXJtPlBBQ0tBR0VfRVhUUkFfQVJDSFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBQ0tBR0VfRVhUUkFfQVJDSFNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcyBjb21wYXRpYmxlIHdpdGggdGhlIGRldmljZSBDUFUuIFRoaXMgdmFyaWFibGUgaXMgdXNlZnVsIHdoZW4geW91IGJ1aWxkIGZvciBzZXZlcmFsIGRpZmZlcmVudCBkZXZpY2VzIHRoYXQgdXNlIG1pc2NlbGxhbmVvdXMgcHJvY2Vzc29ycy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcyBjb21wYXRpYmxlIHdpdGggdGhlIGRldmljZSBDUFUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZnVsIHdoZW4geW91IGJ1aWxkIGZvciBzZXZlcmFsIGRpZmZlcmVudCBkZXZpY2VzIHRoYXQgdXNlCisgICAgICAgICAgICAgICAgICAgIG1pc2NlbGxhbmVvdXMgcHJvY2Vzc29ycyBzdWNoIGFzIFhTY2FsZSBhbmQgQVJNOTI2LUVKUy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQUNLQUdFX0dST1VQJz48Z2xvc3N0ZXJtPlBBQ0tBR0VfR1JPVVA8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBQ0tBR0VfR1JPVVBbZG9jXSA9ICJEZWZpbmVzIG9uZSBvciBtb3JlIHBhY2thZ2VzIHRvIGluY2x1ZGUgaW4gYW4gaW1hZ2Ugd2hlbiBhIHNwZWNpZmljIGl0ZW0gaXMgaW5jbHVkZWQgaW4gSU1BR0VfRkVBVFVSRVMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5QQUNLQUdFX0dST1VQPC9maWxlbmFtZT4gdmFyaWFibGUgaGFzIGJlZW4KKyAgICAgICAgICAgICAgICAgICAgcmVuYW1lZCB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRkVBVFVSRV9QQUNLQUdFUyc+PGZpbGVuYW1lPkZFQVRVUkVfUEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgdmFyaWFibGUgZGVzY3JpcHRpb24gZm9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GRUFUVVJFX1BBQ0tBR0VTPC9maWxlbmFtZT4gZm9yIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiBpZiB5b3UgdXNlIHRoZSA8ZmlsZW5hbWU+UEFDS0FHRV9HUk9VUDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpc3N1ZXMgYSB3YXJuaW5nCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRV9JTlNUQUxMJz48Z2xvc3N0ZXJtPlBBQ0tBR0VfSU5TVEFMTDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEFDS0FHRV9JTlNUQUxMW2RvY10gPSAiTGlzdCBvZiB0aGUgcGFja2FnZXMgdG8gYmUgaW5zdGFsbGVkIGludG8gdGhlIGltYWdlLiBUaGUgdmFyaWFibGUgaXMgZ2VuZXJhbGx5IG5vdCB1c2VyLWRlZmluZWQgYW5kIHVzZXMgSU1BR0VfSU5TVEFMTCBhcyBwYXJ0IG9mIHRoZSBsaXN0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmaW5hbCBsaXN0IG9mIHBhY2thZ2VzIHBhc3NlZCB0byB0aGUgcGFja2FnZSBtYW5hZ2VyCisgICAgICAgICAgICAgICAgICAgIGZvciBpbnN0YWxsYXRpb24gaW50byB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlIHBhY2thZ2UgbWFuYWdlciBjb250cm9scyBhY3R1YWwgaW5zdGFsbGF0aW9uCisgICAgICAgICAgICAgICAgICAgIG9mIGFsbCBwYWNrYWdlcywgdGhlIGxpc3Qgb2YgcGFja2FnZXMgcGFzc2VkIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPiBpcyBub3QgdGhlIGZpbmFsIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgb2YgcGFja2FnZXMgdGhhdCBhcmUgYWN0dWFsbHkgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIGludGVybmFsIHRvIHRoZSBpbWFnZSBjb25zdHJ1Y3Rpb24KKyAgICAgICAgICAgICAgICAgICAgY29kZS4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBpbiBnZW5lcmFsLCB5b3Ugc2hvdWxkIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0lOU1RBTEwnPjxmaWxlbmFtZT5JTUFHRV9JTlNUQUxMPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIHNwZWNpZnkgcGFja2FnZXMgZm9yIGluc3RhbGxhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGV4Y2VwdGlvbiB0byB0aGlzIGlzIHdoZW4gd29ya2luZyB3aXRoCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdpbWFnZXMtY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcyc+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gd29ya2luZyB3aXRoIGFuIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyYW1mcykKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UsIHVzZSB0aGUgPGZpbGVuYW1lPlBBQ0tBR0VfSU5TVEFMTDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBQ0tBR0VfSU5TVEFMTF9BVFRFTVBUT05MWSc+PGdsb3NzdGVybT5QQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBQ0tBR0VfSU5TVEFMTF9BVFRFTVBUT05MWVtkb2NdID0gIkxpc3Qgb2YgcGFja2FnZXMgYXR0ZW1wdGVkIHRvIGJlIGluc3RhbGxlZCB3aGVuIGNyZWF0aW5nIGFuIGltYWdlLiBJZiBhIGxpc3RlZCBwYWNrYWdlIGZhaWxzIHRvIGluc3RhbGwsIHRoZSBidWlsZCBzeXN0ZW0gZG9lcyBub3QgZ2VuZXJhdGUgYW4gZXJyb3IuIFRoaXMgdmFyaWFibGUgaXMgZ2VuZXJhbGx5IG5vdCB1c2VyLWRlZmluZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBwYWNrYWdlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBhdHRlbXB0cyB0byBpbnN0YWxsIHdoZW4gY3JlYXRpbmcgYW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIElmIGEgbGlzdGVkIHBhY2thZ2UgZmFpbHMgdG8gaW5zdGFsbCwgdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICBkb2VzIG5vdCBnZW5lcmF0ZSBhbiBlcnJvci4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBnZW5lcmFsbHkgbm90IHVzZXItZGVmaW5lZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1MnPjxnbG9zc3Rlcm0+UEFDS0FHRV9QUkVQUk9DRVNTX0ZVTkNTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1NbZG9jXSA9ICJTcGVjaWZpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyBydW4gdG8gcHJlLXByb2Nlc3MgdGhlIFBLR0QgZGlyZWN0b3J5IHByaW9yIHRvIHNwbGl0dGluZyB0aGUgZmlsZXMgb3V0IHRvIGluZGl2aWR1YWwgcGFja2FnZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgcnVuIHRvIHByZS1wcm9jZXNzIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEtHRCc+PGZpbGVuYW1lPlBLR0Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHByaW9yIHRvIHNwbGl0dGluZyB0aGUgZmlsZXMgb3V0IHRvIGluZGl2aWR1YWwKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRUNPTkZJRyc+PGdsb3NzdGVybT5QQUNLQUdFQ09ORklHPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFQ09ORklHW2RvY10gPSAiVGhpcyB2YXJpYWJsZSBwcm92aWRlcyBhIG1lYW5zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBmZWF0dXJlcyBvZiBhIHJlY2lwZSBvbiBhIHBlci1yZWNpcGUgYmFzaXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBwcm92aWRlcyBhIG1lYW5zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZworICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyBvZiBhIHJlY2lwZSBvbiBhIHBlci1yZWNpcGUgYmFzaXMuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFQ09ORklHPC9maWxlbmFtZT4gYmxvY2tzIGFyZSBkZWZpbmVkCisgICAgICAgICAgICAgICAgICAgIGluIHJlY2lwZXMgd2hlbiB5b3Ugc3BlY2lmeSBmZWF0dXJlcyBhbmQgdGhlbiBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBkZWZpbmUgZmVhdHVyZSBiZWhhdmlvcnMuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGJhc2ljIGJsb2NrIHN0cnVjdHVyZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFQ09ORklHID8/PSAiZjEgZjIgZjMgLi4uIgorICAgICBQQUNLQUdFQ09ORklHW2YxXSA9ICItLXdpdGgtZjEsLS13aXRob3V0LWYxLGJ1aWxkLWRlcHMtZjEscnQtZGVwcy1mMSIKKyAgICAgUEFDS0FHRUNPTkZJR1tmMl0gPSAiLS13aXRoLWYyLC0td2l0aG91dC1mMixidWlsZC1kZXBzLWYyLHJ0LWRlcHMtZjIiCisgICAgIFBBQ0tBR0VDT05GSUdbZjNdID0gIi0td2l0aC1mMywtLXdpdGhvdXQtZjMsYnVpbGQtZGVwcy1mMyxydC1kZXBzLWYzIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+UEFDS0FHRUNPTkZJRzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGl0c2VsZiBzcGVjaWZpZXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgdG8gZW5hYmxlLgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgdGhlIGZlYXR1cmVzLCB5b3UgY2FuIGRldGVybWluZSB0aGUgYmVoYXZpb3Igb2YKKyAgICAgICAgICAgICAgICAgICAgZWFjaCBmZWF0dXJlIGJ5IHByb3ZpZGluZyB1cCB0byBmb3VyIG9yZGVyLWRlcGVuZGVudAorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMsIHdoaWNoIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG9taXQgYW55IGFyZ3VtZW50IHlvdSBsaWtlIGJ1dCBtdXN0IHJldGFpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGluZyBjb21tYXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBvcmRlciBpcyBpbXBvcnRhbnQgYW5kIHNwZWNpZmllcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXh0cmEgYXJndW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGNvbmZpZ3VyZSBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudCBsaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRUNPTkYnPjxmaWxlbmFtZT5FWFRSQV9PRUNPTkY8L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIGZlYXR1cmUgaXMgZW5hYmxlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHRyYSBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHNob3VsZCBiZSBhZGRlZCB0byA8ZmlsZW5hbWU+RVhUUkFfT0VDT05GPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgZmVhdHVyZSBpcyBkaXNhYmxlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BZGRpdGlvbmFsIGJ1aWxkIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBzaG91bGQgYmUgYWRkZWQgaWYgdGhlIGZlYXR1cmUgaXMgZW5hYmxlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BZGRpdGlvbmFsIHJ1bnRpbWUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgc2hvdWxkIGJlIGFkZGVkIGlmIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBBQ0tBR0VDT05GSUc8L2ZpbGVuYW1lPiBibG9jayB0YWtlbiBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlicnN2ZzwvZmlsZW5hbWU+IHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlIHRoZSBmZWF0dXJlIGlzIDxmaWxlbmFtZT5jcm9jbzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBoYXMgdGhyZWUgYXJndW1lbnRzIHRoYXQgZGV0ZXJtaW5lIHRoZSBmZWF0dXJlJ3MKKyAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3IuCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRUNPTkZJRyA/Pz0gImNyb2NvIgorICAgICBQQUNLQUdFQ09ORklHW2Nyb2NvXSA9ICItLXdpdGgtY3JvY28sLS13aXRob3V0LWNyb2NvLGxpYmNyb2NvIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+LS13aXRoLWNyb2NvPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJjcm9jbzwvZmlsZW5hbWU+IGFyZ3VtZW50cyBhcHBseSBvbmx5IGlmCisgICAgICAgICAgICAgICAgICAgIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgPGZpbGVuYW1lPi0td2l0aC1jcm9jbzwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgICAgIGFkZGVkIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0IGFyZ3VtZW50IGxpc3QgYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJjcm9jbzwvZmlsZW5hbWU+IGlzIGFkZGVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+REVQRU5EUzwvbGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZSBmZWF0dXJlIGlzIGRpc2FibGVkIHNheSB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgIGEgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgaW4gYW5vdGhlciBsYXllciwgdGhlbgorICAgICAgICAgICAgICAgICAgICB0aGUgc2Vjb25kIGFyZ3VtZW50IDxmaWxlbmFtZT4tLXdpdGhvdXQtY3JvY288L2ZpbGVuYW1lPiBpcworICAgICAgICAgICAgICAgICAgICBhZGRlZCB0byB0aGUgY29uZmlndXJlIHNjcmlwdCByYXRoZXIgdGhhbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LS13aXRoLWNyb2NvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBiYXNpYyA8ZmlsZW5hbWU+UEFDS0FHRUNPTkZJRzwvZmlsZW5hbWU+IHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICBwcmV2aW91c2x5IGRlc2NyaWJlZCBob2xkcyB0cnVlIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB5b3UKKyAgICAgICAgICAgICAgICAgICAgYXJlIGNyZWF0aW5nIGEgYmxvY2sgb3IgY2hhbmdpbmcgYSBibG9jay4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBjcmVhdGluZyBhIGJsb2NrLCB1c2UgdGhlIHN0cnVjdHVyZSBpbnNpZGUgeW91cgorICAgICAgICAgICAgICAgICAgICByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGNoYW5nZSBhbiBleGlzdGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFDS0FHRUNPTkZJRzwvZmlsZW5hbWU+IGJsb2NrLCB5b3UgY2FuIGRvIHNvCisgICAgICAgICAgICAgICAgICAgIG9uZSBvZiB0d28gd2F5czoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QXBwZW5kIGZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGUgYW4gYXBwZW5kIGZpbGUgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+cmVjaXBlbmFtZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4geW91ciBsYXllciBhbmQgb3ZlcnJpZGUgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBBQ0tBR0VDT05GSUc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGVpdGhlciBjb21wbGV0ZWx5IG92ZXJyaWRlIHRoZSB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VDT05GSUc9ImY0IGY1IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPciwgeW91IGNhbiBqdXN0IGFwcGVuZCB0aGUgdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFQ09ORklHX2FwcGVuZCA9ICIgZjQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Db25maWd1cmF0aW9uIGZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyBpZGVudGljYWwgdG8gY2hhbmdpbmcgdGhlIGJsb2NrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCBhbiBhcHBlbmQgZmlsZSBleGNlcHQgeW91IGVkaXQgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPm15ZGlzdHJvPC9yZXBsYWNlYWJsZT4uY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXMgd2l0aCBhcHBlbmQgZmlsZXMgcHJldmlvdXNseSBkZXNjcmliZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBlaXRoZXIgY29tcGxldGVseSBvdmVycmlkZSB0aGUgdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFQ09ORklHX3BuLTxyZXBsYWNlYWJsZT5yZWNpcGVuYW1lPC9yZXBsYWNlYWJsZT49ImY0IGY1IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPciwgeW91IGNhbiBqdXN0IGFtZW5kIHRoZSB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VDT05GSUdfYXBwZW5kX3BuLTxyZXBsYWNlYWJsZT5yZWNpcGVuYW1lPC9yZXBsYWNlYWJsZT4gPSAiIGY0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRUdST1VQX0RJU0FCTEVfQ09NUExFTUVOVEFSWSc+PGdsb3NzdGVybT5QQUNLQUdFR1JPVVBfRElTQUJMRV9DT01QTEVNRU5UQVJZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFR1JPVVBfRElTQUJMRV9DT01QTEVNRU5UQVJZW2RvY10gPSAiUHJldmVudHMgYXV0b21hdGljIGNyZWF0aW9uIG9mIHRoZSBub3JtYWwgY29tcGxlbWVudGFyeSBwYWNrYWdlcyBzdWNoIGFzIC1kZXYgYW5kIC1kYmcgaW4gYSBwYWNrYWdlZ3JvdXAgcmVjaXBlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEZvciByZWNpcGVzIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2Vncm91cCc+PGZpbGVuYW1lPnBhY2thZ2Vncm91cDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgc2V0dGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFDS0FHRUdST1VQX0RJU0FCTEVfQ09NUExFTUVOVEFSWTwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAgICAgICAgICIxIiBzcGVjaWZpZXMgdGhhdCB0aGUgbm9ybWFsIGNvbXBsZW1lbnRhcnkgcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPi1kZXY8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1kYmc8L2ZpbGVuYW1lPiwgYW5kIHNvIGZvcnRoKSBzaG91bGQgbm90IGJlCisgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vncm91cDwvZmlsZW5hbWU+IHJlY2lwZSwgd2hpY2ggaXMgdGhlCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgYmVoYXZpb3IuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRVMnPjxnbG9zc3Rlcm0+UEFDS0FHRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBQ0tBR0VTW2RvY10gPSAiVGhlIGxpc3Qgb2YgcGFja2FnZXMgdG8gYmUgY3JlYXRlZCBmcm9tIHRoZSByZWNpcGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxpc3Qgb2YgcGFja2FnZXMgdG8gYmUgY3JlYXRlZCBmcm9tIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtQTn0tZGJnICR7UE59LXN0YXRpY2RldiAke1BOfS1kZXYgJHtQTn0tZG9jICR7UE59LWxvY2FsZSAke1BBQ0tBR0VfQkVGT1JFX1BOfSAke1BOfQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRVNfRFlOQU1JQyc+PGdsb3NzdGVybT5QQUNLQUdFU19EWU5BTUlDPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFU19EWU5BTUlDW2RvY10gPSAiQSBwcm9taXNlIHRoYXQgeW91ciByZWNpcGUgc2F0aXNmaWVzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIGZvciBvcHRpb25hbCBtb2R1bGVzIHRoYXQgYXJlIGZvdW5kIGluIG90aGVyIHJlY2lwZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBwcm9taXNlIHRoYXQgeW91ciByZWNpcGUgc2F0aXNmaWVzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgIGZvciBvcHRpb25hbCBtb2R1bGVzIHRoYXQgYXJlIGZvdW5kIGluIG90aGVyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFU19EWU5BTUlDPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgYWN0dWFsbHkgc2F0aXNmeSB0aGUgZGVwZW5kZW5jaWVzLCBpdCBvbmx5IHN0YXRlcyB0aGF0CisgICAgICAgICAgICAgICAgICAgIHRoZXkgc2hvdWxkIGJlIHNhdGlzZmllZC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIGEgaGFyZCwgcnVudGltZSBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPikKKyAgICAgICAgICAgICAgICAgICAgb2YgYW5vdGhlciBwYWNrYWdlIGlzIHNhdGlzZmllZAorICAgICAgICAgICAgICAgICAgICBhdCBidWlsZCB0aW1lIHRocm91Z2ggdGhlIDxmaWxlbmFtZT5QQUNLQUdFU19EWU5BTUlDPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIGJ1dCBhIHBhY2thZ2Ugd2l0aCB0aGUgbW9kdWxlIG5hbWUgaXMgbmV2ZXIgYWN0dWFsbHkKKyAgICAgICAgICAgICAgICAgICAgcHJvZHVjZWQsIHRoZW4gdGhlIG90aGVyIHBhY2thZ2Ugd2lsbCBiZSBicm9rZW4uCisgICAgICAgICAgICAgICAgICAgIFRodXMsIGlmIHlvdSBhdHRlbXB0IHRvIGluY2x1ZGUgdGhhdCBwYWNrYWdlIGluIGFuIGltYWdlLAorICAgICAgICAgICAgICAgICAgICB5b3Ugd2lsbCBnZXQgYSBkZXBlbmRlbmN5IGZhaWx1cmUgZnJvbSB0aGUgcGFja2FnaW5nIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1yb290ZnMnPjxmaWxlbmFtZT5kb19yb290ZnM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCBpZiB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHN1Y2ggYSBzaXR1YXRpb24gY2FuCisgICAgICAgICAgICAgICAgICAgIG9jY3VyIGFuZCB0aGUgcGFja2FnZSB0aGF0IGlzIG5vdCBjcmVhdGVkIGlzIHZhbGlkCisgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgdGhlIGRlcGVuZGVuY3kgYmVpbmcgc2F0aXNmaWVkLCB0aGVuIHlvdSBzaG91bGQgdXNlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIChhIHNvZnQgcnVudGltZSBkZXBlbmRlbmN5KSBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSBvZiBob3cgdG8gdXNlIHRoZSA8ZmlsZW5hbWU+UEFDS0FHRVNfRFlOQU1JQzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHdoZW4geW91IGFyZSBzcGxpdHRpbmcgcGFja2FnZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2hhbmRsaW5nLW9wdGlvbmFsLW1vZHVsZS1wYWNrYWdpbmcnPkhhbmRsaW5nIE9wdGlvbmFsIE1vZHVsZSBQYWNrYWdpbmc8L3VsaW5rPiIgc2VjdGlvbgorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRVNQTElURlVOQ1MnPjxnbG9zc3Rlcm0+UEFDS0FHRVNQTElURlVOQ1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBQ0tBR0VTUExJVEZVTkNTW2RvY10gPSAiU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgcnVuIHRvIHBlcmZvcm0gYWRkaXRpb25hbCBzcGxpdHRpbmcgb2YgZmlsZXMgaW50byBpbmRpdmlkdWFsIHBhY2thZ2VzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHJ1biB0byBwZXJmb3JtIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgc3BsaXR0aW5nIG9mIGZpbGVzIGludG8gaW5kaXZpZHVhbCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgUmVjaXBlcyBjYW4gZWl0aGVyIHByZXBlbmQgdG8gdGhpcyB2YXJpYWJsZSBvciBwcmVwZW5kCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSA8ZmlsZW5hbWU+cG9wdWxhdGVfcGFja2FnZXM8L2ZpbGVuYW1lPiBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICBpbiBvcmRlciB0byBwZXJmb3JtIGFkZGl0aW9uYWwgcGFja2FnZSBzcGxpdHRpbmcuCisgICAgICAgICAgICAgICAgICAgIEluIGVpdGhlciBjYXNlLCB0aGUgZnVuY3Rpb24gc2hvdWxkIHNldAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRVMnPjxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTJz48ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCBvdGhlciBwYWNrYWdpbmcgdmFyaWFibGVzIGFwcHJvcHJpYXRlbHkgaW4gb3JkZXIgdG8KKyAgICAgICAgICAgICAgICAgICAgcGVyZm9ybSB0aGUgZGVzaXJlZCBzcGxpdHRpbmcuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFSQUxMRUxfTUFLRSc+PGdsb3NzdGVybT5QQVJBTExFTF9NQUtFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQVJBTExFTF9NQUtFW2RvY10gPSAiU3BlY2lmaWVzIGV4dHJhIG9wdGlvbnMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZSBtYWtlIGNvbW1hbmQgZHVyaW5nIHRoZSBjb21waWxlIHRhc2tzLiBUaGlzIHZhcmlhYmxlIGlzIHVzdWFsbHkgaW4gdGhlIGZvcm0gLWogeCwgd2hlcmUgeCByZXByZXNlbnRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXJhbGxlbCB0aHJlYWRzIG1ha2UgY2FuIHJ1bi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBFeHRyYSBvcHRpb25zIHBhc3NlZCB0byB0aGUgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbXBpbGUnPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgaW4gb3JkZXIgdG8gc3BlY2lmeSBwYXJhbGxlbCBjb21waWxhdGlvbiBvbiB0aGUgbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c3VhbGx5IGluIHRoZSBmb3JtICItaiA8cmVwbGFjZWFibGU+eDwvcmVwbGFjZWFibGU+IiwKKyAgICAgICAgICAgICAgICAgICAgd2hlcmUgPHJlcGxhY2VhYmxlPng8L3JlcGxhY2VhYmxlPiByZXByZXNlbnRzIHRoZSBtYXhpbXVtCisgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBwYXJhbGxlbCB0aHJlYWRzIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gY2FuCisgICAgICAgICAgICAgICAgICAgIHJ1bi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgICAgICBzZXRzIHRoaXMgdmFyaWFibGUgdG8gYmUgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBjb3JlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIHVzZXMuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0IGV4cGVyaWVuY2VzIGRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzc3VlcyBkdXJpbmcgdGhlIDxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sgdGhhdCByZXN1bHQgaW4gcmFjZSBjb25kaXRpb25zLCB5b3UgY2FuIGNsZWFyCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlBBUkFMTEVMX01BS0U8L2ZpbGVuYW1lPiB2YXJpYWJsZSB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByZWNpcGUgYXMgYSB3b3JrYXJvdW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGFkZHJlc3NpbmcgcmFjZSBjb25kaXRpb25zLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZGVidWdnaW5nLXBhcmFsbGVsLW1ha2UtcmFjZXMnPkRlYnVnZ2luZyBQYXJhbGxlbCBNYWtlIFJhY2VzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICBGb3Igc2luZ2xlIHNvY2tldCBzeXN0ZW1zIChpLmUuIG9uZSBDUFUpLCB5b3Ugc2hvdWxkIG5vdAorICAgICAgICAgICAgICAgICAgICBoYXZlIHRvIG92ZXJyaWRlIHRoaXMgdmFyaWFibGUgdG8gZ2FpbiBvcHRpbWFsIHBhcmFsbGVsaXNtCisgICAgICAgICAgICAgICAgICAgIGR1cmluZyBidWlsZHMuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSBoYXZlIHZlcnkgbGFyZ2Ugc3lzdGVtcyB0aGF0IGVtcGxveQorICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSBwaHlzaWNhbCBDUFVzLCB5b3UgbWlnaHQgd2FudCB0byBtYWtlIHN1cmUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQVJBTExFTF9NQUtFPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgbm90CisgICAgICAgICAgICAgICAgICAgIHNldCBoaWdoZXIgdGhhbiAiLWogMjAiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzcGVlZGluZyB1cCBidWlsZHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3NwZWVkaW5nLXVwLXRoZS1idWlsZCc+U3BlZWRpbmcgVXAgdGhlIEJ1aWxkPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQVJBTExFTF9NQUtFSU5TVCc+PGdsb3NzdGVybT5QQVJBTExFTF9NQUtFSU5TVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEFSQUxMRUxfTUFLRUlOU1RbZG9jXSA9ICJFeHRyYSBvcHRpb25zIHBhc3NlZCB0byB0aGUgbWFrZSBpbnN0YWxsIGNvbW1hbmQgZHVyaW5nIHRoZSBkb19pbnN0YWxsIHRhc2sgaW4gb3JkZXIgdG8gc3BlY2lmeSBwYXJhbGxlbCBpbnN0YWxsYXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRXh0cmEgb3B0aW9ucyBwYXNzZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYWtlIGluc3RhbGw8L2ZpbGVuYW1lPiBjb21tYW5kIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgaW4gb3JkZXIgdG8gc3BlY2lmeSBwYXJhbGxlbCBpbnN0YWxsYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQVJBTExFTF9NQUtFJz48ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgc29mdHdhcmUgYmVpbmcgYnVpbHQgZXhwZXJpZW5jZXMgZGVwZW5kZW5jeQorICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWVzIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4gdGFzayB0aGF0IHJlc3VsdCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgcmFjZSBjb25kaXRpb25zLCB5b3UgY2FuIGNsZWFyIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBBUkFMTEVMX01BS0VJTlNUPC9maWxlbmFtZT4gdmFyaWFibGUgd2l0aGluCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVjaXBlIGFzIGEgd29ya2Fyb3VuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBhZGRyZXNzaW5nIHJhY2UgY29uZGl0aW9ucywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2RlYnVnZ2luZy1wYXJhbGxlbC1tYWtlLXJhY2VzJz5EZWJ1Z2dpbmcgUGFyYWxsZWwgTWFrZSBSYWNlczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQVRDSFJFU09MVkUnPjxnbG9zc3Rlcm0+UEFUQ0hSRVNPTFZFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQVRDSFJFU09MVkVbZG9jXSA9ICJFbmFibGUgb3IgZGlzYWJsZSBpbnRlcmFjdGl2ZSBwYXRjaCByZXNvbHV0aW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERldGVybWluZXMgdGhlIGFjdGlvbiB0byB0YWtlIHdoZW4gYSBwYXRjaCBmYWlscy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgdGhpcyB2YXJpYWJsZSB0byBvbmUgb2YgdHdvIHZhbHVlczogIm5vb3AiIGFuZAorICAgICAgICAgICAgICAgICAgICAidXNlciIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIG9mICJub29wIiBjYXVzZXMgdGhlIGJ1aWxkIHRvIHNpbXBseSBmYWlsCisgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2Fubm90IHN1Y2Nlc3NmdWxseQorICAgICAgICAgICAgICAgICAgICBhcHBseSBhIHBhdGNoLgorICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIHRoZSB2YWx1ZSB0byAidXNlciIgY2F1c2VzIHRoZSBidWlsZCBzeXN0ZW0gdG8KKyAgICAgICAgICAgICAgICAgICAgbGF1bmNoIGEgc2hlbGwgYW5kIHBsYWNlcyB5b3UgaW4gdGhlIHJpZ2h0IGxvY2F0aW9uIHNvIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBtYW51YWxseSByZXNvbHZlIHRoZSBjb25mbGljdHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBVENIVE9PTCc+PGdsb3NzdGVybT5QQVRDSFRPT0w8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBVENIVE9PTFtkb2NdID0gIlNwZWNpZmllcyB0aGUgdXRpbGl0eSB1c2VkIHRvIGFwcGx5IHBhdGNoZXMgZm9yIGEgcmVjaXBlIGR1cmluZyBkb19wYXRjaC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHV0aWxpdHkgdXNlZCB0byBhcHBseSBwYXRjaGVzIGZvciBhIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYXRjaCc+PGZpbGVuYW1lPmRvX3BhdGNoPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSBvbmUgb2YgdGhyZWUgdXRpbGl0aWVzOiAicGF0Y2giLCAicXVpbHQiLCBvcgorICAgICAgICAgICAgICAgICAgICAiZ2l0Ii4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdXRpbGl0eSB1c2VkIGlzICJxdWlsdCIgZXhjZXB0IGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgcXVpbHQtbmF0aXZlIHJlY2lwZSBpdHNlbGYuCisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlIHF1aWx0IHRvb2wgaXMgbm90IGF2YWlsYWJsZSBhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGltZSBxdWlsdC1uYXRpdmUgaXMgYmVpbmcgcGF0Y2hlZCwgaXQgdXNlcyAicGF0Y2giLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2lzaCB0byB1c2UgYW4gYWx0ZXJuYXRpdmUgcGF0Y2hpbmcgdG9vbCwgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB0aGUgcmVjaXBlIHVzaW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBVENIVE9PTCA9ICJwYXRjaCIKKyAgICAgUEFUQ0hUT09MID0gInF1aWx0IgorICAgICBQQVRDSFRPT0wgPSAiZ2l0IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEUnPjxnbG9zc3Rlcm0+UEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBFW2RvY10gPSAiVGhlIGVwb2NoIG9mIHRoZSByZWNpcGUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzICcwJy4gVGhlIGZpZWxkIGlzIHVzZWQgdG8gbWFrZSB1cGdyYWRlcyBwb3NzaWJsZSB3aGVuIHRoZSB2ZXJzaW9uaW5nIHNjaGVtZSBjaGFuZ2VzIGluIHNvbWUgYmFja3dhcmRzIGluY29tcGF0aWJsZSB3YXkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGVwb2NoIG9mIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgdmFyaWFibGUgaXMgdW5zZXQuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBpcyB1c2VkIHRvIG1ha2UgdXBncmFkZXMgcG9zc2libGUgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbmluZyBzY2hlbWUgY2hhbmdlcyBpbiBzb21lIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUKKyAgICAgICAgICAgICAgICAgICAgd2F5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBGJz48Z2xvc3N0ZXJtPlBGPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQRltkb2NdID0gIlNwZWNpZmllcyB0aGUgcmVjaXBlIG9yIHBhY2thZ2UgbmFtZSBhbmQgaW5jbHVkZXMgYWxsIHZlcnNpb24gYW5kIHJldmlzaW9uIG51bWJlcnMuIFRoaXMgdmFyaWFibGUgaXMgY29tcHJpc2VkIG9mICR7UE59LSR7RVhURU5EUEV9JHtQVn0tJHtQUn0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSByZWNpcGUgb3IgcGFja2FnZSBuYW1lIGFuZCBpbmNsdWRlcyBhbGwgdmVyc2lvbiBhbmQgcmV2aXNpb24KKyAgICAgICAgICAgICAgICAgICAgbnVtYmVycyAoaS5lLiA8ZmlsZW5hbWU+Z2xpYmMtMi4xMy1yMjArc3ZucjE1NTA4LzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmFzaC00LjItcjEvPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIGNvbXByaXNlZCBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICR7PGxpbmsgbGlua2VuZD0ndmFyLVBOJz5QTjwvbGluaz59LSR7PGxpbmsgbGlua2VuZD0ndmFyLUVYVEVORFBFJz5FWFRFTkRQRTwvbGluaz59JHs8bGluayBsaW5rZW5kPSd2YXItUFYnPlBWPC9saW5rPn0tJHs8bGluayBsaW5rZW5kPSd2YXItUFInPlBSPC9saW5rPn0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBJWEJVRl9QQUNLQUdFUyc+PGdsb3NzdGVybT5QSVhCVUZfUEFDS0FHRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBJWEJVRl9QQUNLQUdFU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIHBpeGJ1ZmNhY2hlIGNsYXNzLCB0aGlzIHZhcmlhYmxlIGlkZW50aWZpZXMgcGFja2FnZXMgdGhhdCBjb250YWluIHRoZSBwaXhidWYgbG9hZGVycyB1c2VkIHdpdGggZ2RrLXBpeGJ1Zi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBpeGJ1ZmNhY2hlJz48ZmlsZW5hbWU+cGl4YnVmY2FjaGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUgaWRlbnRpZmllcyBwYWNrYWdlcyB0aGF0IGNvbnRhaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIHBpeGJ1ZiBsb2FkZXJzIHVzZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2RrLXBpeGJ1ZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPnBpeGJ1ZmNhY2hlPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgYXNzdW1lcyB0aGF0IHRoZSBsb2FkZXJzIGFyZSBpbiB0aGUgcmVjaXBlJ3MgbWFpbiBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgdmFyaWFibGUgaWYgdGhlIGxvYWRlcnMgeW91IG5lZWQgYXJlIGluIGEgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBvdGhlciB0aGFuIHRoYXQgbWFpbiBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBLRyc+PGdsb3NzdGVybT5QS0c8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBLR1tkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSByZXN1bHRpbmcgcGFja2FnZSBjcmVhdGVkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiBXaGVuIHlvdSB1c2UgdGhpcyB2YXJpYWJsZSwgeW91IG11c3QgdXNlIGEgcGFja2FnZSBuYW1lIG92ZXJyaWRlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSByZXN1bHRpbmcgcGFja2FnZSBjcmVhdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gdXNpbmcgdGhlIDxmaWxlbmFtZT5QS0c8L2ZpbGVuYW1lPiB2YXJpYWJsZSwgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IHVzZSBhIHBhY2thZ2UgbmFtZSBvdmVycmlkZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZGViaWFuJz48ZmlsZW5hbWU+ZGViaWFuPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHJlbmFtZXMgdGhlIG91dHB1dCBwYWNrYWdlLCBpdCBkb2VzIHNvIGJ5IHNldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBLR188cmVwbGFjZWFibGU+cGFja2FnZW5hbWU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBLR19DT05GSUdfUEFUSCc+PGdsb3NzdGVybT5QS0dfQ09ORklHX1BBVEg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBLR19DT05GSUdfUEFUSFtkb2NdID0gIlBhdGggdG8gcGtnLWNvbmZpZyBmaWxlcyBmb3IgdGhlIGN1cnJlbnQgYnVpbGQgY29udGV4dC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aCB0byA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+IGZpbGVzIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudCBidWlsZCBjb250ZXh0LgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+IHJlYWRzIHRoaXMgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEtHRCc+PGdsb3NzdGVybT5QS0dEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQS0dEW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZm9yIGZpbGVzIHRvIGJlIHBhY2thZ2VkIGJlZm9yZSB0aGV5IGFyZSBzcGxpdCBpbnRvIGluZGl2aWR1YWwgcGFja2FnZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZm9yIGZpbGVzIHRvIGJlCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VkIGJlZm9yZSB0aGV5IGFyZSBzcGxpdCBpbnRvIGluZGl2aWR1YWwgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGRlZmF1bHRzIHRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtXT1JLRElSfS9wYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRG8gbm90IGNoYW5nZSB0aGlzIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEtHREFUQV9ESVInPjxnbG9zc3Rlcm0+UEtHREFUQV9ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBLR0RBVEFfRElSW2RvY10gPSAiUG9pbnRzIHRvIGEgc2hhcmVkLCBnbG9iYWwtc3RhdGUgZGlyZWN0b3J5IHRoYXQgaG9sZHMgZGF0YSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBwYWNrYWdpbmcgcHJvY2Vzcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gYSBzaGFyZWQsIGdsb2JhbC1zdGF0ZSBkaXJlY3RvcnkgdGhhdCBob2xkcyBkYXRhCisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZCBkdXJpbmcgdGhlIHBhY2thZ2luZyBwcm9jZXNzLgorICAgICAgICAgICAgICAgICAgICBEdXJpbmcgdGhlIHBhY2thZ2luZyBwcm9jZXNzLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2VkYXRhJz48ZmlsZW5hbWU+ZG9fcGFja2FnZWRhdGE8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayBwYWNrYWdlcyBkYXRhIGZvciBlYWNoIHJlY2lwZSBhbmQgaW5zdGFsbHMgaXQgaW50bworICAgICAgICAgICAgICAgICAgICB0aGlzIHRlbXBvcmFyeSwgc2hhcmVkIGFyZWEuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGRlZmF1bHRzIHRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtTVEFHSU5HX0RJUl9IT1NUfS9wa2dkYXRhCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRG8gbm90IGNoYW5nZSB0aGlzIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEtHREVTVCc+PGdsb3NzdGVybT5QS0dERVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQS0dERVNUW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGZvciBmaWxlcyB0byBiZSBwYWNrYWdlZCBhZnRlciB0aGV5IGhhdmUgYmVlbiBzcGxpdCBpbnRvIGluZGl2aWR1YWwgcGFja2FnZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGZvciBmaWxlcyB0byBiZSBwYWNrYWdlZAorICAgICAgICAgICAgICAgICAgICBhZnRlciB0aGV5IGhhdmUgYmVlbiBzcGxpdCBpbnRvIGluZGl2aWR1YWwgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGRlZmF1bHRzIHRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtXT1JLRElSfS9wYWNrYWdlcy1zcGxpdAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFVuZGVyIHRoaXMgZGlyZWN0b3J5LCB0aGUgYnVpbGQgc3lzdGVtIGNyZWF0ZXMKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgZm9yIGVhY2ggcGFja2FnZSBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIERvIG5vdCBjaGFuZ2UgdGhpcyBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBLR0RFU1RXT1JLJz48Z2xvc3N0ZXJtPlBLR0RFU1RXT1JLPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQS0dERVNUV09SS1tkb2NdID0gIlBvaW50cyB0byBhIHRlbXBvcmFyeSB3b3JrIGFyZWEgdXNlZCBieSB0aGUgZG9fcGFja2FnZSB0YXNrIHRvIHdyaXRlIG91dHB1dCBmcm9tIHRoZSBkb19wYWNrYWdlZGF0YSB0YXNrLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byBhIHRlbXBvcmFyeSB3b3JrIGFyZWEgdXNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2UnPjxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgdG8gd3JpdGUgb3V0cHV0IGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlZGF0YSc+PGZpbGVuYW1lPmRvX3BhY2thZ2VkYXRhPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+UEtHREVTVFdPUks8L2ZpbGVuYW1lPiBsb2NhdGlvbiBkZWZhdWx0cyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICR7V09SS0RJUn0vcGtnZGF0YQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fcGFja2FnZWRhdGE8L2ZpbGVuYW1lPiB0YXNrIHRoZW4gcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIGRhdGEgaW4gdGhlIHRlbXBvcmFyeSB3b3JrIGFyZWEgYW5kIGluc3RhbGxzIGl0IGludG8gYQorICAgICAgICAgICAgICAgICAgICBzaGFyZWQgZGlyZWN0b3J5IHBvaW50ZWQgdG8gYnkKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBLR0RBVEFfRElSJz48ZmlsZW5hbWU+UEtHREFUQV9ESVI8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERvIG5vdCBjaGFuZ2UgdGhpcyBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBLR0UnPjxnbG9zc3Rlcm0+UEtHRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEtHRVtkb2NdID0gIlRoZSBlcG9jaCBvZiB0aGUgb3V0cHV0IHBhY2thZ2UgYnVpbHQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGVwb2NoIG9mIHRoZSBvdXRwdXQgcGFja2FnZSBidWlsdCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgPGZpbGVuYW1lPlBLR0U8L2ZpbGVuYW1lPiBpcyBzZXQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBFJz48ZmlsZW5hbWU+UEU8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEtHUic+PGdsb3NzdGVybT5QS0dSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQS0dSW2RvY10gPSAiVGhlIHJldmlzaW9uIG9mIHRoZSBvdXRwdXQgcGFja2FnZSBidWlsdCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgcmV2aXNpb24gb2YgdGhlIG91dHB1dCBwYWNrYWdlIGJ1aWx0IGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCA8ZmlsZW5hbWU+UEtHUjwvZmlsZW5hbWU+IGlzIHNldCB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QS0dWJz48Z2xvc3N0ZXJtPlBLR1Y8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBLR1ZbZG9jXSA9ICJUaGUgdmVyc2lvbiBvZiB0aGUgb3V0cHV0IHBhY2thZ2UgYnVpbHQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZlcnNpb24gb2YgdGhlIG91dHB1dCBwYWNrYWdlIGJ1aWx0IGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCA8ZmlsZW5hbWU+UEtHVjwvZmlsZW5hbWU+IGlzIHNldCB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUE4nPjxnbG9zc3Rlcm0+UE48L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBOW2RvY10gPSAiUE4gcmVmZXJzIHRvIGEgcmVjaXBlIG5hbWUgaW4gdGhlIGNvbnRleHQgb2YgYSBmaWxlIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXMgaW5wdXQgdG8gY3JlYXRlIGEgcGFja2FnZS4gSXQgcmVmZXJzIHRvIGEgcGFja2FnZSBuYW1lIGluIHRoZSBjb250ZXh0IG9mIGEgZmlsZSBjcmVhdGVkIG9yIHByb2R1Y2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgY2FuIGhhdmUgdHdvIHNlcGFyYXRlIGZ1bmN0aW9ucyBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQ6IGEgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIG5hbWUgb3IgYSByZXN1bHRpbmcgcGFja2FnZSBuYW1lLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPiByZWZlcnMgdG8gYSByZWNpcGUgbmFtZSBpbiB0aGUgY29udGV4dCBvZiBhIGZpbGUgdXNlZAorICAgICAgICAgICAgICAgICAgICBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhcyBpbnB1dCB0byBjcmVhdGUgYSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBpcyBub3JtYWxseSBleHRyYWN0ZWQgZnJvbSB0aGUgcmVjaXBlIGZpbGUgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHRoZSByZWNpcGUgaXMgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmV4cGF0XzIuMC4xLmJiPC9maWxlbmFtZT4sIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUgb2YgPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSAiZXhwYXQiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgcmVmZXJzIHRvIGEgcGFja2FnZSBuYW1lIGluIHRoZSBjb250ZXh0IG9mIGEgZmlsZSBjcmVhdGVkIG9yIHByb2R1Y2VkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiBhcHBsaWNhYmxlLCB0aGUgPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4gdmFyaWFibGUgYWxzbyBjb250YWlucyBhbnkgc3BlY2lhbAorICAgICAgICAgICAgICAgICAgICBzdWZmaXggb3IgcHJlZml4LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdXNpbmcgPGZpbGVuYW1lPmJhc2g8L2ZpbGVuYW1lPiB0byBidWlsZCBwYWNrYWdlcyBmb3IgdGhlIG5hdGl2ZQorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLCA8ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPiBpcyA8ZmlsZW5hbWU+YmFzaC1uYXRpdmU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgPGZpbGVuYW1lPmJhc2g8L2ZpbGVuYW1lPiB0byBidWlsZCBwYWNrYWdlcyBmb3IgdGhlIHRhcmdldCBhbmQgZm9yIE11bHRpbGliLAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPiB3b3VsZCBiZSA8ZmlsZW5hbWU+YmFzaDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGliNjQtYmFzaDwvZmlsZW5hbWU+LCByZXNwZWN0aXZlbHkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUE5CTEFDS0xJU1QnPjxnbG9zc3Rlcm0+UE5CTEFDS0xJU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBOQkxBQ0tMSVNUW2RvY10gPSAiTGlzdHMgcmVjaXBlcyB5b3UgZG8gbm90IHdhbnQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gYnVpbGQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgcmVjaXBlcyB5b3UgZG8gbm90IHdhbnQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgdG8gYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgd29ya3MgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYmxhY2tsaXN0Jz48ZmlsZW5hbWU+YmxhY2tsaXN0PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB3aGljaCB0aGUgcmVjaXBlIG11c3QgaW5oZXJpdCBnbG9iYWxseS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gcHJldmVudCBhIHJlY2lwZSBmcm9tIGJlaW5nIGJ1aWx0LCBpbmhlcml0IHRoZSBjbGFzcworICAgICAgICAgICAgICAgICAgICBnbG9iYWxseSBhbmQgdXNlIHRoZSB2YXJpYWJsZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgcHJldmVudHMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm15cmVjaXBlPC9maWxlbmFtZT4gZnJvbSBiZWluZyBidWlsdDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhFUklUICs9ICJibGFja2xpc3QiCisgICAgIFBOQkxBQ0tMSVNUW215cmVjaXBlXSA9ICJOb3Qgc3VwcG9ydGVkIGJ5IG91ciBvcmdhbml6YXRpb24uIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUE9QVUxBVEVfU0RLX1BPU1RfSE9TVF9DT01NQU5EJz48Z2xvc3N0ZXJtPlBPUFVMQVRFX1NES19QT1NUX0hPU1RfQ09NTUFORDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUE9QVUxBVEVfU0RLX1BPU1RfSE9TVF9DT01NQU5EW2RvY10gPSAiU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBvbmNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyBjcmVhdGVkIGhvc3QgcGFydCBvZiB0aGUgU0RLLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgb25jZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgaG9zdCBwYXJ0IG9mCisgICAgICAgICAgICAgICAgICAgIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSBmdW5jdGlvbnMgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUE9QVUxBVEVfU0RLX1BPU1RfSE9TVF9DT01NQU5EICs9ICI8cmVwbGFjZWFibGU+ZnVuY3Rpb248L3JlcGxhY2VhYmxlPjsgLi4uICIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBwYXNzIHRoZSBTREsgcGF0aCB0byBhIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIGEgZnVuY3Rpb24sIHlvdSBjYW4gdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1NES19ESVJ9PC9maWxlbmFtZT4sIHdoaWNoIHBvaW50cyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgcGFyZW50IGRpcmVjdG9yeSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIHdoZW4gY3JlYXRpbmcgU0RLIG91dHB1dC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLX0RJUic+PGZpbGVuYW1lPlNES19ESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkQnPjxnbG9zc3Rlcm0+UE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBPUFVMQVRFX1NES19QT1NUX1RBUkdFVF9DT01NQU5EW2RvY10gPSAiU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBvbmNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyBjcmVhdGVkIHRhcmdldCBwYXJ0IG9mIHRoZSBTREsuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBvbmNlIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyBjcmVhdGVkIHRoZSB0YXJnZXQgcGFydCBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgU0RLLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgZnVuY3Rpb25zIHNlcGFyYXRlZCBieSBzZW1pY29sb25zOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBPUFVMQVRFX1NES19QT1NUX1RBUkdFVF9DT01NQU5EICs9ICI8cmVwbGFjZWFibGU+ZnVuY3Rpb248L3JlcGxhY2VhYmxlPjsgLi4uICIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBwYXNzIHRoZSBTREsgcGF0aCB0byBhIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIGEgZnVuY3Rpb24sIHlvdSBjYW4gdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1NES19ESVJ9PC9maWxlbmFtZT4sIHdoaWNoIHBvaW50cyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgcGFyZW50IGRpcmVjdG9yeSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIHdoZW4gY3JlYXRpbmcgU0RLIG91dHB1dC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLX0RJUic+PGZpbGVuYW1lPlNES19ESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUFInPjxnbG9zc3Rlcm0+UFI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBSW2RvY10gPSAiVGhlIHJldmlzaW9uIG9mIHRoZSByZWNpcGUuIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHZhcmlhYmxlIGlzICdyMCcuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJldmlzaW9uIG9mIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHZhcmlhYmxlIGlzICJyMCIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUFJFRkVSUkVEX1BST1ZJREVSJz48Z2xvc3N0ZXJtPlBSRUZFUlJFRF9QUk9WSURFUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUFJFRkVSUkVEX1BST1ZJREVSW2RvY10gPSAiSWYgbXVsdGlwbGUgcmVjaXBlcyBwcm92aWRlIGFuIGl0ZW0sIHRoaXMgdmFyaWFibGUgZGV0ZXJtaW5lcyB3aGljaCByZWNpcGUgc2hvdWxkIGJlIGdpdmVuIHByZWZlcmVuY2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSWYgbXVsdGlwbGUgcmVjaXBlcyBwcm92aWRlIGFuIGl0ZW0sIHRoaXMgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lcyB3aGljaCByZWNpcGUgc2hvdWxkIGJlIGdpdmVuIHByZWZlcmVuY2UuCisgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgYWx3YXlzIHN1ZmZpeCB0aGUgdmFyaWFibGUgd2l0aCB0aGUgbmFtZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgaXRlbSwgYW5kIHlvdSBzaG91bGQgc2V0IGl0IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgcmVjaXBlIHRvIHdoaWNoIHlvdSB3YW50IHRvIGdpdmUgcHJlY2VkZW5jZS4KKyAgICAgICAgICAgICAgICAgICAgU29tZSBleGFtcGxlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gImxpbnV4LXlvY3RvIgorICAgICBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID0gInhzZXJ2ZXIteGY4NiIKKyAgICAgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2wgPz0gIm1lc2EiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QUkVGRVJSRURfVkVSU0lPTic+PGdsb3NzdGVybT5QUkVGRVJSRURfVkVSU0lPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUFJFRkVSUkVEX1ZFUlNJT05bZG9jXSA9ICJJZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmVyc2lvbnMgb2YgcmVjaXBlcyBhdmFpbGFibGUsIHRoaXMgdmFyaWFibGUgZGV0ZXJtaW5lcyB3aGljaCByZWNpcGUgc2hvdWxkIGJlIGdpdmVuIHByZWZlcmVuY2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIHZlcnNpb25zIG9mIHJlY2lwZXMgYXZhaWxhYmxlLCB0aGlzCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGRldGVybWluZXMgd2hpY2ggcmVjaXBlIHNob3VsZCBiZSBnaXZlbiBwcmVmZXJlbmNlLgorICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBhbHdheXMgc3VmZml4IHRoZSB2YXJpYWJsZSB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB5b3Ugd2FudCB0byBzZWxlY3QsIGFuZCB5b3Ugc2hvdWxkIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW5nbHkgZm9yIHByZWNlZGVuY2UuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSAiPGZpbGVuYW1lPiU8L2ZpbGVuYW1lPiIgY2hhcmFjdGVyIGFzIGEKKyAgICAgICAgICAgICAgICAgICAgd2lsZGNhcmQgdG8gbWF0Y2ggYW55IG51bWJlciBvZiBjaGFyYWN0ZXJzLCB3aGljaCBjYW4gYmUKKyAgICAgICAgICAgICAgICAgICAgdXNlZnVsIHdoZW4gc3BlY2lmeWluZyB2ZXJzaW9ucyB0aGF0IGNvbnRhaW4gbG9uZyByZXZpc2lvbgorICAgICAgICAgICAgICAgICAgICBudW1iZXJzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgY2hhbmdlLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSB0d28gZXhhbXBsZXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJFRkVSUkVEX1ZFUlNJT05fcHl0aG9uID0gIjIuNy4zIgorICAgICBQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0byA9ICIzLjE5JSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBSRU1JUlJPUlMnPjxnbG9zc3Rlcm0+UFJFTUlSUk9SUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUFJFTUlSUk9SU1tkb2NdID0gIlNwZWNpZmllcyBhZGRpdGlvbmFsIHBhdGhzIGZyb20gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZ2V0cyBzb3VyY2UgY29kZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYWRkaXRpb25hbCBwYXRocyBmcm9tIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIGdldHMgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlIGJ1aWxkIHN5c3RlbSBzZWFyY2hlcyBmb3Igc291cmNlIGNvZGUsIGl0IGZpcnN0CisgICAgICAgICAgICAgICAgICAgIHRyaWVzIHRoZSBsb2NhbCBkb3dubG9hZCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIElmIHRoYXQgbG9jYXRpb24gZmFpbHMsIHRoZSBidWlsZCBzeXN0ZW0gdHJpZXMgbG9jYXRpb25zCisgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYnkgPGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPiwgdGhlIHVwc3RyZWFtCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgYW5kIHRoZW4gbG9jYXRpb25zIHNwZWNpZmllZCBieQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUlSUk9SUyc+PGZpbGVuYW1lPk1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW4gdGhhdCBvcmRlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXNzdW1pbmcgeW91ciBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk8nPjxmaWxlbmFtZT5ESVNUUk88L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICAgICAgICAgIGlzICJwb2t5IiwgdGhlIGRlZmF1bHQgdmFsdWUgZm9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT4gaXMgZGVmaW5lZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvZGlzdHJvL3Bva3kuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvPC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgeW91IGNvdWxkIGFkZCBhIHNwZWNpZmljIHNlcnZlciBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSB0byBhdHRlbXB0IGJlZm9yZSBhbnkgb3RoZXJzIGJ5IGFkZGluZworICAgICAgICAgICAgICAgICAgICBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVNSVJST1JTX3ByZXBlbmQgPSAiXAorICAgICBnaXQ6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4gXAorICAgICBmdHA6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4gXAorICAgICBodHRwOi8vLiovLiogaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL3NvdXJjZXMvIFxuIFwKKyAgICAgaHR0cHM6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgY2hhbmdlcyBjYXVzZSB0aGUgYnVpbGQgc3lzdGVtIHRvIGludGVyY2VwdAorICAgICAgICAgICAgICAgICAgICBHaXQsIEZUUCwgSFRUUCwgYW5kIEhUVFBTIHJlcXVlc3RzIGFuZCBkaXJlY3QgdGhlbSB0bworICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmh0dHA6Ly88L2ZpbGVuYW1lPiBzb3VyY2VzIG1pcnJvci4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgPGZpbGVuYW1lPmZpbGU6Ly88L2ZpbGVuYW1lPiBVUkxzIHRvIHBvaW50CisgICAgICAgICAgICAgICAgICAgIHRvIGxvY2FsIGRpcmVjdG9yaWVzIG9yIG5ldHdvcmsgc2hhcmVzIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUFJJT1JJVFknPjxnbG9zc3Rlcm0+UFJJT1JJVFk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBSSU9SSVRZW2RvY10gPSAiSW5kaWNhdGVzIHRoZSBpbXBvcnRhbmNlIG9mIGEgcGFja2FnZS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzICdvcHRpb25hbCcuICBPdGhlciBzdGFuZGFyZCB2YWx1ZXMgYXJlICdyZXF1aXJlZCcsICdzdGFuZGFyZCcgYW5kICdleHRyYScuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSW5kaWNhdGVzIHRoZSBpbXBvcnRhbmNlIG9mIGEgcGFja2FnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBSSU9SSVRZPC9maWxlbmFtZT4gaXMgY29uc2lkZXJlZCB0byBiZSBwYXJ0IG9mCisgICAgICAgICAgICAgICAgICAgIHRoZSBkaXN0cmlidXRpb24gcG9saWN5IGJlY2F1c2UgdGhlIGltcG9ydGFuY2Ugb2YgYW55IGdpdmVuCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBkZXBlbmRzIG9uIHRoZSBwdXJwb3NlIGZvciB3aGljaCB0aGUgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgICAgIGlzIGJlaW5nIHByb2R1Y2VkLgorICAgICAgICAgICAgICAgICAgICBUaHVzLCA8ZmlsZW5hbWU+UFJJT1JJVFk8L2ZpbGVuYW1lPiBpcyBub3Qgbm9ybWFsbHkgc2V0CisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiByZWNpcGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldCA8ZmlsZW5hbWU+UFJJT1JJVFk8L2ZpbGVuYW1lPiB0byAicmVxdWlyZWQiLAorICAgICAgICAgICAgICAgICAgICAic3RhbmRhcmQiLCAiZXh0cmEiLCBhbmQgIm9wdGlvbmFsIiwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUFJJVkFURV9MSUJTJz48Z2xvc3N0ZXJtPlBSSVZBVEVfTElCUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUFJJVkFURV9MSUJTW2RvY10gPSAiU3BlY2lmaWVzIGxpYnJhcmllcyBpbnN0YWxsZWQgd2l0aGluIGEgcmVjaXBlIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0ncyBzaGFyZWQgbGlicmFyeSByZXNvbHZlci4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgbGlicmFyaWVzIGluc3RhbGxlZCB3aXRoaW4gYSByZWNpcGUgdGhhdAorICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSdzCisgICAgICAgICAgICAgICAgICAgIHNoYXJlZCBsaWJyYXJ5IHJlc29sdmVyLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHR5cGljYWxseSB1c2VkIHdoZW4gc29mdHdhcmUgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgYnVpbHQgYnkgYSByZWNpcGUgaGFzIGl0cyBvd24gcHJpdmF0ZSB2ZXJzaW9ucyBvZiBhCisgICAgICAgICAgICAgICAgICAgIGxpYnJhcnkgbm9ybWFsbHkgcHJvdmlkZWQgYnkgYW5vdGhlciByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgeW91IHdvdWxkIG5vdCB3YW50IHRoZSBwYWNrYWdlIGNvbnRhaW5pbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIHByaXZhdGUgbGlicmFyaWVzIHRvIGJlIHNldCBhcyBhIGRlcGVuZGVuY3kgb24gb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgdW5yZWxhdGVkIHBhY2thZ2VzIHRoYXQgc2hvdWxkIGluc3RlYWQgZGVwZW5kIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIHByb3ZpZGluZyB0aGUgc3RhbmRhcmQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTGlicmFyaWVzIHNwZWNpZmllZCBpbiB0aGlzIHZhcmlhYmxlIHNob3VsZCBiZSBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgYnkgdGhlaXIgZmlsZSBuYW1lLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZnJvbSB0aGUgRmlyZWZveCByZWNpcGUgaW4gbWV0YS1icm93c2VyOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSSVZBVEVfTElCUyA9ICJsaWJtb3pqcy5zbyBcCisgICAgICAgICAgICAgICAgICAgICBsaWJ4cGNvbS5zbyBcCisgICAgICAgICAgICAgICAgICAgICBsaWJuc3ByNC5zbyBcCisgICAgICAgICAgICAgICAgICAgICBsaWJ4dWwuc28gXAorICAgICAgICAgICAgICAgICAgICAgbGlibW96YWxsb2Muc28gXAorICAgICAgICAgICAgICAgICAgICAgbGlicGxjNC5zbyBcCisgICAgICAgICAgICAgICAgICAgICBsaWJwbGRzNC5zbyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBST1ZJREVTJz48Z2xvc3N0ZXJtPlBST1ZJREVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQUk9WSURFU1tkb2NdID0gIkEgbGlzdCBvZiBhbGlhc2VzIHRoYXQgYSByZWNpcGUgYWxzbyBwcm92aWRlcy4gVGhlc2UgYWxpYXNlcyBhcmUgdXNlZnVsIGZvciBzYXRpc2Z5aW5nIGRlcGVuZGVuY2llcyBvZiBvdGhlciByZWNpcGVzIGR1cmluZyB0aGUgYnVpbGQgYXMgc3BlY2lmaWVkIGJ5IERFUEVORFMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIGFsaWFzZXMgYnkgd2hpY2ggYSBwYXJ0aWN1bGFyIHJlY2lwZSBjYW4gYmUKKyAgICAgICAgICAgICAgICAgICAga25vd24uCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIGEgcmVjaXBlJ3Mgb3duCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUE4nPlBOPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIGltcGxpY2l0bHkgYWxyZWFkeSBpbiBpdHMgPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgSWYgYSByZWNpcGUgdXNlcyA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPiwgdGhlCisgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwgYWxpYXNlcyBhcmUgc3lub255bXMgZm9yIHRoZSByZWNpcGUgYW5kIGNhbgorICAgICAgICAgICAgICAgICAgICBiZSB1c2VmdWwgc2F0aXNmeWluZyBkZXBlbmRlbmNpZXMgb2Ygb3RoZXIgcmVjaXBlcyBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIGFzIHNwZWNpZmllZCBieQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPkRFUEVORFM8L2xpbms+PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZXhhbXBsZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgZnJvbSBhIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICBmaWxlIDxmaWxlbmFtZT5saWJhdl8wLjguMTEuYmI8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUk9WSURFUyArPSAibGlicG9zdHByb2MiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+IHN0YXRlbWVudCByZXN1bHRzIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSAibGliYXYiIHJlY2lwZSBhbHNvIGJlaW5nIGtub3duIGFzICJsaWJwb3N0cHJvYyIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUFJTRVJWX0hPU1QnPjxnbG9zc3Rlcm0+UFJTRVJWX0hPU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBSU0VSVl9IT1NUW2RvY10gPSAiVGhlIG5ldHdvcmsgYmFzZWQgUFIgc2VydmljZSBob3N0IGFuZCBwb3J0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBuZXR3b3JrIGJhc2VkCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UgaG9zdCBhbmQgcG9ydC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmYuc2FtcGxlLmV4dGVuZGVkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgc2hvd3MgaG93IHRoZSA8ZmlsZW5hbWU+UFJTRVJWX0hPU1Q8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcworICAgICAgICAgICAgICAgICAgICBzZXQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJTRVJWX0hPU1QgPSAibG9jYWxob3N0OjAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3Qgc2V0IHRoZSB2YXJpYWJsZSBpZiB5b3Ugd2FudCB0byBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0IGEgbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjd29ya2luZy13aXRoLWEtcHItc2VydmljZSc+UFIgc2VydmljZTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldCA8ZmlsZW5hbWU+UFJTRVJWX0hPU1Q8L2ZpbGVuYW1lPiB0byBvdGhlcgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgdG8gdXNlIGEgcmVtb3RlIFBSIHNlcnZpY2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUFRFU1RfRU5BQkxFRCc+PGdsb3NzdGVybT5QVEVTVF9FTkFCTEVEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQUlNFUlZfSE9TVFtkb2NdID0gIlNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCBQYWNrYWdlIFRlc3QgKHB0ZXN0KSBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQgd2hlbiBidWlsZGluZyBhIHJlY2lwZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgd2hldGhlciBvciBub3QKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdGVzdGluZy1wYWNrYWdlcy13aXRoLXB0ZXN0Jz5QYWNrYWdlIFRlc3Q8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAocHRlc3QpIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCB3aGVuIGJ1aWxkaW5nIGEgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIG5vdCBzZXQgdGhpcyB2YXJpYWJsZSBkaXJlY3RseS4KKyAgICAgICAgICAgICAgICAgICAgRW5hYmxpbmcgYW5kIGRpc2FibGluZyBidWlsZGluZyBQYWNrYWdlIFRlc3RzCisgICAgICAgICAgICAgICAgICAgIGF0IGJ1aWxkIHRpbWUgc2hvdWxkIGJlIGRvbmUgYnkgYWRkaW5nICJwdGVzdCIgdG8gKG9yCisgICAgICAgICAgICAgICAgICAgIHJlbW92aW5nIGl0IGZyb20pCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fRkVBVFVSRVMnPjxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBWJz48Z2xvc3N0ZXJtPlBWPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQVltkb2NdID0gIlRoZSB2ZXJzaW9uIG9mIHRoZSByZWNpcGUuIFRoZSB2ZXJzaW9uIGlzIG5vcm1hbGx5IGV4dHJhY3RlZCBmcm9tIHRoZSByZWNpcGUgZmlsZW5hbWUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZlcnNpb24gb2YgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZlcnNpb24gaXMgbm9ybWFsbHkgZXh0cmFjdGVkIGZyb20gdGhlIHJlY2lwZSBmaWxlbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHRoZSByZWNpcGUgaXMgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmV4cGF0XzIuMC4xLmJiPC9maWxlbmFtZT4sIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUgb2YgPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSAiMi4wLjEiLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPiBpcyBnZW5lcmFsbHkgbm90IG92ZXJyaWRkZW4gd2l0aGluCisgICAgICAgICAgICAgICAgICAgIGEgcmVjaXBlIHVubGVzcyBpdCBpcyBidWlsZGluZyBhbiB1bnN0YWJsZSAoaS5lLiBkZXZlbG9wbWVudCkgdmVyc2lvbiBmcm9tIGEgc291cmNlIGNvZGUgcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgICAgICAoZS5nLiBHaXQgb3IgU3VidmVyc2lvbikuCisgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBZVEhPTl9BQkknPjxnbG9zc3Rlcm0+UFlUSE9OX0FCSTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUFlUSE9OX0FCSVtkb2NdID0gIldoZW4gdXNlZCBieSByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUgZGlzdHV0aWxzMywgc2V0dXB0b29sczMsIGRpc3R1dGlscywgb3Igc2V0dXB0b29scyBjbGFzc2VzLCBkZW5vdGVzIHRoZSBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpIGN1cnJlbnRseSBpbiB1c2UgZm9yIFB5dGhvbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHVzZWQgYnkgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRpc3R1dGlsczMnPjxmaWxlbmFtZT5kaXN0dXRpbHMzPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zZXR1cHRvb2xzMyc+PGZpbGVuYW1lPnNldHVwdG9vbHMzPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1kaXN0dXRpbHMnPjxmaWxlbmFtZT5kaXN0dXRpbHM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXNldHVwdG9vbHMnPjxmaWxlbmFtZT5zZXR1cHRvb2xzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMsIGRlbm90ZXMgdGhlIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UgKEFCSSkKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudGx5IGluIHVzZSBmb3IgUHl0aG9uLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgQUJJIGlzICJtIi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBoYXZlIHRvIHNldCB0aGlzIHZhcmlhYmxlIGFzIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIHNldHMgaXQgZm9yIHlvdS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUgQUJJIHRvIGNvbnN0cnVjdAorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgbmFtZXMgdXNlZCB3aGVuIGluc3RhbGxpbmcgdGhlIFB5dGhvbiBoZWFkZXJzCisgICAgICAgICAgICAgICAgICAgIGFuZCBsaWJyYXJpZXMgaW4gc3lzcm9vdAorICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+Li4uL3B5dGhvbjMuM20vLi4uPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBSZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZGlzdHV0aWxzJz48ZmlsZW5hbWU+ZGlzdHV0aWxzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGR1cmluZyBjcm9zcy1idWlsZHMgYWxzbyB1c2UgdGhpcyB2YXJpYWJsZSB0bworICAgICAgICAgICAgICAgICAgICBsb2NhdGUgdGhlIGhlYWRlcnMgYW5kIGxpYnJhcmllcyBvZiB0aGUgYXBwcm9wcmlhdGUgUHl0aG9uCisgICAgICAgICAgICAgICAgICAgIHRoYXQgdGhlIGV4dGVuc2lvbiBpcyB0YXJnZXRpbmcuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUFlUSE9OX1BOJz48Z2xvc3N0ZXJtPlBZVEhPTl9QTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUFlUSE9OX1BOW2RvY10gPSAiV2hlbiB1c2VkIGJ5IHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBkaXN0dXRpbHMzLCBzZXR1cHRvb2xzMywgZGlzdHV0aWxzLCBvciBzZXR1cHRvb2xzIGNsYXNzZXMsIHNwZWNpZmllcyB0aGUgbWFqb3IgUHl0aG9uIHZlcnNpb24gYmVpbmcgYnVpbHQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB1c2VkIGJ5IHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1kaXN0dXRpbHMzJz48ZmlsZW5hbWU+ZGlzdHV0aWxzMzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc2V0dXB0b29sczMnPjxmaWxlbmFtZT5zZXR1cHRvb2xzMzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZGlzdHV0aWxzJz48ZmlsZW5hbWU+ZGlzdHV0aWxzPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zZXR1cHRvb2xzJz48ZmlsZW5hbWU+c2V0dXB0b29sczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLCBzcGVjaWZpZXMgdGhlIG1ham9yIFB5dGhvbiB2ZXJzaW9uIGJlaW5nIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBGb3IgUHl0aG9uIDIueCwgPGZpbGVuYW1lPlBZVEhPTl9QTjwvZmlsZW5hbWU+IHdvdWxkCisgICAgICAgICAgICAgICAgICAgIGJlICJweXRob24yIi4gIEZvciBQeXRob24gMy54LCB0aGUgdmFyaWFibGUgd291bGQgYmUKKyAgICAgICAgICAgICAgICAgICAgInB5dGhvbjMiLgorICAgICAgICAgICAgICAgICAgICBZb3UgZG8gbm90IGhhdmUgdG8gc2V0IHRoaXMgdmFyaWFibGUgYXMgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseSBzZXRzIGl0IGZvciB5b3UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBhbGxvd3MgcmVjaXBlcyB0byB1c2UgY29tbW9uIGluZnJhc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBFTkRTICs9ICIke1BZVEhPTl9QTn0tbmF0aXZlIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBwcmV2aW91cyBleGFtcGxlLCB0aGUgdmVyc2lvbiBvZiB0aGUgZGVwZW5kZW5jeQorICAgICAgICAgICAgICAgICAgICBpcyA8ZmlsZW5hbWU+UFlUSE9OX1BOPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXEnPjx0aXRsZT5RPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVFNQUtFX1BST0ZJTEVTJz48Z2xvc3N0ZXJtPlFNQUtFX1BST0ZJTEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBRTUFLRV9QUk9GSUxFU1tkb2NdID0gIlNwZWNpZmllcyB5b3VyIG93biBzdWJzZXQgb2YgLnBybyBmaWxlcyB0byBiZSBidWlsdCBmb3IgdXNlIHdpdGggcW1ha2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHlvdXIgb3duIHN1YnNldCBvZiA8ZmlsZW5hbWU+LnBybzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGVzIHRvIGJlIGJ1aWx0IGZvciB1c2Ugd2l0aAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cW1ha2U8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBzZXQgdGhpcyB2YXJpYWJsZSwgYWxsCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ucHJvPC9maWxlbmFtZT4gZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSBwb2ludGVkIHRvCisgICAgICAgICAgICAgICAgICAgIGJ5IDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIGJ1aWx0IGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB3aXRoIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1xbWFrZSonPjxmaWxlbmFtZT5xbWFrZV9iYXNlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIG9yIG90aGVyIGNsYXNzZXMgdGhhdCBpbmhlcml0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xbWFrZV9iYXNlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXInPjx0aXRsZT5SPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJBTkxJQic+PGdsb3NzdGVybT5SQU5MSUI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFJBTkxJQltkb2NdID0gIk1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biAncmFubGliJy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yYW5saWI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1SQ09ORkxJQ1RTJz48Z2xvc3N0ZXJtPlJDT05GTElDVFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFJDT05GTElDVFNbZG9jXSA9ICJUaGUgbGlzdCBvZiBwYWNrYWdlcyB0aGF0IGNvbmZsaWN0IHdpdGggYW5vdGhlciBwYWNrYWdlLiBOb3RlIHRoYXQgdGhlIHBhY2thZ2Ugd2lsbCBub3QgYmUgaW5zdGFsbGVkIGlmIHRoZSBjb25mbGljdGluZyBwYWNrYWdlcyBhcmUgbm90IGZpcnN0IHJlbW92ZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxpc3Qgb2YgcGFja2FnZXMgdGhhdCBjb25mbGljdCB3aXRoIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgcGFja2FnZXMgd2lsbCBub3QgYmUgaW5zdGFsbGVkIGlmIGNvbmZsaWN0aW5nCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGFyZSBub3QgZmlyc3QgcmVtb3ZlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICBMaWtlIGFsbCBwYWNrYWdlLWNvbnRyb2xsaW5nIHZhcmlhYmxlcywgeW91IG11c3QgYWx3YXlzIHVzZQorICAgICAgICAgICAgICAgICAgIHRoZW0gaW4gY29uanVuY3Rpb24gd2l0aCBhIHBhY2thZ2UgbmFtZSBvdmVycmlkZS4KKyAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSQ09ORkxJQ1RTXyR7UE59ID0gIjxyZXBsYWNlYWJsZT5hbm90aGVyX2NvbmZsaWN0aW5nX3BhY2thZ2VfbmFtZTwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSwgd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcywgc3VwcG9ydHMKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeWluZyB2ZXJzaW9uZWQgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICBBbHRob3VnaCB0aGUgc3ludGF4IHZhcmllcyBkZXBlbmRpbmcgb24gdGhlIHBhY2thZ2luZworICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIEJpdEJha2UgaGlkZXMgdGhlc2UgZGlmZmVyZW5jZXMgZnJvbSB5b3UuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGdlbmVyYWwgc3ludGF4IHRvIHNwZWNpZnkgdmVyc2lvbnMgd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlJDT05GTElDVFM8L2ZpbGVuYW1lPiB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSQ09ORkxJQ1RTXyR7UE59ID0gIjxyZXBsYWNlYWJsZT5wYWNrYWdlPC9yZXBsYWNlYWJsZT4gKDxyZXBsYWNlYWJsZT5vcGVyYXRvcjwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT52ZXJzaW9uPC9yZXBsYWNlYWJsZT4pIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciA8ZmlsZW5hbWU+b3BlcmF0b3I8L2ZpbGVuYW1lPiwgeW91IGNhbiBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPQorICAgICAmbHQ7CisgICAgICZndDsKKyAgICAgJmx0Oz0KKyAgICAgJmd0Oz0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzZXRzIHVwIGEgZGVwZW5kZW5jeSBvbiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIDEuMiBvciBncmVhdGVyIG9mIHRoZSBwYWNrYWdlIDxmaWxlbmFtZT5mb288L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSQ09ORkxJQ1RTXyR7UE59ID0gImZvbyAoPj0gMS4yKSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJERVBFTkRTJz48Z2xvc3N0ZXJtPlJERVBFTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBSREVQRU5EU1tkb2NdID0gIkxpc3RzIGEgcGFja2FnZSdzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIChpLmUuIG90aGVyIHBhY2thZ2VzKSB0aGF0IG11c3QgYmUgaW5zdGFsbGVkIGZvciB0aGUgcGFja2FnZSB0byBiZSBidWlsdC4gVGhleSBtdXN0IGJlIHRoZSBuYW1lcyBvZiBvdGhlciBwYWNrYWdlcyBhcyBsaXN0ZWQgaW4gdGhlIFBBQ0tBR0VTIHZhcmlhYmxlLCBub3QgcmVjaXBlIG5hbWVzIChQTikuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgYSBwYWNrYWdlJ3MgcnVudGltZSBkZXBlbmRlbmNpZXMgKGkuZS4gb3RoZXIgcGFja2FnZXMpCisgICAgICAgICAgICAgICAgICAgIHRoYXQgbXVzdCBiZSBpbnN0YWxsZWQgaW4gb3JkZXIgZm9yIHRoZSBidWlsdCBwYWNrYWdlIHRvIHJ1bgorICAgICAgICAgICAgICAgICAgICBjb3JyZWN0bHkuCisgICAgICAgICAgICAgICAgICAgIElmIGEgcGFja2FnZSBpbiB0aGlzIGxpc3QgY2Fubm90IGJlIGZvdW5kIGR1cmluZyB0aGUgYnVpbGQsCisgICAgICAgICAgICAgICAgICAgIHlvdSB3aWxsIGdldCBhIGJ1aWxkIGVycm9yLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSB1c2UgdGhlIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGluIGEgcmVjaXBlLCB5b3UgYXJlIGVzc2VudGlhbGx5IHN0YXRpbmcgdGhhdCB0aGUgcmVjaXBlJ3MKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWJ1aWxkJz48ZmlsZW5hbWU+ZG9fYnVpbGQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayBkZXBlbmRzIG9uIHRoZSBleGlzdGVuY2Ugb2YgYSBzcGVjaWZpYyBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBDb25zaWRlciB0aGlzIHNpbXBsZSBleGFtcGxlIGZvciB0d28gcmVjaXBlcyBuYW1lZCAiYSIgYW5kCisgICAgICAgICAgICAgICAgICAgICJiIiB0aGF0IHByb2R1Y2Ugc2ltaWxhcmx5IG5hbWVkIElQSyBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50IGFwcGVhcnMgaW4gdGhlICJhIiByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUkRFUEVORFNfJHtQTn0gPSAiYiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBIZXJlLCB0aGUgZGVwZW5kZW5jeSBpcyBzdWNoIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19idWlsZDwvZmlsZW5hbWU+IHRhc2sgZm9yIHJlY2lwZSAiYSIgZGVwZW5kcworICAgICAgICAgICAgICAgICAgICBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfaXBrJz48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV9pcGs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayBvZiByZWNpcGUgImIiLgorICAgICAgICAgICAgICAgICAgICBUaGlzIG1lYW5zIHRoZSBwYWNrYWdlIGZpbGUgZm9yICJiIiBtdXN0IGJlIGF2YWlsYWJsZSB3aGVuCisgICAgICAgICAgICAgICAgICAgIHRoZSBvdXRwdXQgZm9yIHJlY2lwZSAiYSIgaGFzIGJlZW4gY29tcGxldGVseSBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgTW9yZSBpbXBvcnRhbnRseSwgcGFja2FnZSAiYSIgd2lsbCBiZSBtYXJrZWQgYXMgZGVwZW5kaW5nCisgICAgICAgICAgICAgICAgICAgIG9uIHBhY2thZ2UgImIiIGluIGEgbWFubmVyIHRoYXQgaXMgdW5kZXJzdG9vZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBtYW5hZ2VyLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZXMgb2YgdGhlIHBhY2thZ2VzIHlvdSBsaXN0IHdpdGhpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiBtdXN0IGJlIHRoZSBuYW1lcyBvZiBvdGhlcgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyAtIHRoZXkgY2Fubm90IGJlIHJlY2lwZSBuYW1lcy4KKyAgICAgICAgICAgICAgICAgICAgQWx0aG91Z2ggcGFja2FnZSBuYW1lcyBhbmQgcmVjaXBlIG5hbWVzIHVzdWFsbHkgbWF0Y2gsCisgICAgICAgICAgICAgICAgICAgIHRoZSBpbXBvcnRhbnQgcG9pbnQgaGVyZSBpcyB0aGF0IHlvdSBhcmUKKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkaW5nIHBhY2thZ2UgbmFtZXMgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGFuIGV4YW1wbGUgb2YgdGhlIGRlZmF1bHQgbGlzdCBvZiBwYWNrYWdlcyBjcmVhdGVkIGZyb20KKyAgICAgICAgICAgICAgICAgICAgYSByZWNpcGUsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGFwcGxpZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gcGFja2FnZXMgYmVpbmcgYnVpbHQsIHlvdSBzaG91bGQgYWx3YXlzIHVzZSB0aGUgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgaW4gYSBmb3JtIHdpdGggYW4gYXR0YWNoZWQgcGFja2FnZSBuYW1lLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgYXJlIGJ1aWxkaW5nIGEgZGV2ZWxvcG1lbnQgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICB0aGF0IGRlcGVuZHMgb24gdGhlIDxmaWxlbmFtZT5wZXJsPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB5b3Ugd291bGQgdXNlIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gc3RhdGVtZW50OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJERVBFTkRTXyR7UE59LWRldiArPSAicGVybCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBJbiB0aGUgZXhhbXBsZSwgdGhlIGRldmVsb3BtZW50IHBhY2thZ2UgZGVwZW5kcyBvbgorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPnBlcmw8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaHVzLCB0aGUgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gdmFyaWFibGUgaGFzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtQTn0tZGV2PC9maWxlbmFtZT4gcGFja2FnZSBuYW1lIGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgcGFja2FnZSBuYW1lIHlvdSBhdHRhY2ggdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHZhcmlhYmxlIG11c3QgYXBwZWFyCisgICAgICAgICAgICAgICAgICAgIGFzIGl0IHdvdWxkIGluIHRoZSA8ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2UgYmVmb3JlIGFueSByZW5hbWluZyBvZiB0aGUgb3V0cHV0IHBhY2thZ2UgYnkKKyAgICAgICAgICAgICAgICAgICAgY2xhc3NlcyBsaWtlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRlYmlhbic+PGZpbGVuYW1lPmRlYmlhbjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gbWFueSBjYXNlcyB5b3UgZG8gbm90IG5lZWQgdG8gZXhwbGljaXRseSBhZGQKKyAgICAgICAgICAgICAgICAgICAgcnVudGltZSBkZXBlbmRlbmNpZXMgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gc2luY2Ugc29tZSBhdXRvbWF0aWMKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxpbmcgb2NjdXJzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c2hsaWJkZXBzPC9maWxlbmFtZT48L2VtcGhhc2lzPjogIElmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBydW50aW1lIHBhY2thZ2UgY29udGFpbnMgYSBzaGFyZWQgbGlicmFyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+LnNvPC9maWxlbmFtZT4pLCB0aGUgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZXMgdGhlIGxpYnJhcnkgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIG90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzIHRvIHdoaWNoIGl0IGlzIGR5bmFtaWNhbGx5IGxpbmtlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgcHJvY2VzcyBhZGRzIHRoZXNlIGxpYnJhcmllcyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHdoZW4gY3JlYXRpbmcgdGhlIHJ1bnRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cGNkZXBzPC9maWxlbmFtZT48L2VtcGhhc2lzPjogIElmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBhY2thZ2Ugc2hpcHMgYSA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gZmlsZSwgdGhlIGJ1aWxkIHByb2Nlc3MgdXNlcyB0aGlzIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBhZGQgaXRlbXMgdG8gdGhlIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gY3JlYXRlIHRoZSBydW50aW1lIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSwgd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcywgc3VwcG9ydHMKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeWluZyB2ZXJzaW9uZWQgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICBBbHRob3VnaCB0aGUgc3ludGF4IHZhcmllcyBkZXBlbmRpbmcgb24gdGhlIHBhY2thZ2luZworICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIEJpdEJha2UgaGlkZXMgdGhlc2UgZGlmZmVyZW5jZXMgZnJvbSB5b3UuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGdlbmVyYWwgc3ludGF4IHRvIHNwZWNpZnkgdmVyc2lvbnMgd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUkRFUEVORFNfJHtQTn0gPSAiPHJlcGxhY2VhYmxlPnBhY2thZ2U8L3JlcGxhY2VhYmxlPiAoPHJlcGxhY2VhYmxlPm9wZXJhdG9yPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnZlcnNpb248L3JlcGxhY2VhYmxlPikiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIDxmaWxlbmFtZT5vcGVyYXRvcjwvZmlsZW5hbWU+LCB5b3UgY2FuIHNwZWNpZnkgdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA9CisgICAgICZsdDsKKyAgICAgJmd0OworICAgICAmbHQ7PQorICAgICAmZ3Q7PQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNldHMgdXAgYSBkZXBlbmRlbmN5IG9uIHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgMS4yIG9yIGdyZWF0ZXIgb2YgdGhlIHBhY2thZ2UgPGZpbGVuYW1lPmZvbzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJERVBFTkRTXyR7UE59ID0gImZvbyAoPj0gMS4yKSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyc+PGdsb3NzdGVybT5SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFJFUVVJUkVEX0RJU1RST19GRUFUVVJFU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIGRpc3Ryb19mZWF0dXJlc19jaGVjayBjbGFzcywgdGhpcyB2YXJpYWJsZSBpZGVudGlmaWVzIGRpc3RyaWJ1dGlvbiBmZWF0dXJlcyB0aGF0IG11c3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpbiBvcmRlciBmb3IgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gYnVpbGQgdGhlIHJlY2lwZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRpc3Ryb19mZWF0dXJlc19jaGVjayc+PGZpbGVuYW1lPmRpc3Ryb19mZWF0dXJlc19jaGVjazwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpZGVudGlmaWVzIGRpc3RyaWJ1dGlvbiBmZWF0dXJlcyB0aGF0IG11c3QKKyAgICAgICAgICAgICAgICAgICAgZXhpc3QgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpbiBvcmRlciBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gYnVpbGQgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIGlmIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgbGlzdHMgYSBmZWF0dXJlIHRoYXQgZG9lcyBub3QgYXBwZWFyIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPiB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgY29uZmlndXJhdGlvbiwgYW4gZXJyb3Igb2NjdXJzIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3RvcHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUk1fT0xEX0lNQUdFJz48Z2xvc3N0ZXJtPlJNX09MRF9JTUFHRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUk1fT0xEX0lNQUdFW2RvY10gPSAiUmVjbGFpbXMgZGlzayBzcGFjZSBieSByZW1vdmluZyBwcmV2aW91c2x5IGJ1aWx0IHZlcnNpb25zIG9mIHRoZSBzYW1lIGltYWdlIGZyb20gdGhlIGltYWdlcyBkaXJlY3RvcnkgcG9pbnRlZCB0byBieSB0aGUgREVQTE9ZX0RJUiB2YXJpYWJsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBSZWNsYWltcyBkaXNrIHNwYWNlIGJ5IHJlbW92aW5nIHByZXZpb3VzbHkgYnVpbHQKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbnMgb2YgdGhlIHNhbWUgaW1hZ2UgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmltYWdlczwvZmlsZW5hbWU+IGRpcmVjdG9yeSBwb2ludGVkIHRvIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUic+PGZpbGVuYW1lPkRFUExPWV9ESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNldCB0aGlzIHZhcmlhYmxlIHRvICIxIiBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSB0byByZW1vdmUgdGhlc2UKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJNX1dPUktfRVhDTFVERSc+PGdsb3NzdGVybT5STV9XT1JLX0VYQ0xVREU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFJNX1dPUktfRVhDTFVERVtkb2NdID0gIldpdGggcm1fd29yayBlbmFibGVkLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBhIGxpc3Qgb2YgcGFja2FnZXMgd2hvc2Ugd29yayBkaXJlY3RvcmllcyBzaG91bGQgbm90IGJlIHJlbW92ZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2l0aCA8ZmlsZW5hbWU+cm1fd29yazwvZmlsZW5hbWU+IGVuYWJsZWQsIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgc3BlY2lmaWVzIGEgbGlzdCBvZiByZWNpcGVzIHdob3NlIHdvcmsgZGlyZWN0b3JpZXMKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkIG5vdCBiZSByZW1vdmVkLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ybS13b3JrJz48ZmlsZW5hbWU+cm1fd29yay5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGRldGFpbHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUk9PVF9IT01FJz48Z2xvc3N0ZXJtPlJPT1RfSE9NRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUk9PVF9IT01FW2RvY10gPSAiRGVmaW5lcyB0aGUgcm9vdCBob21lIGRpcmVjdG9yeS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSByb290IGhvbWUgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIGRpcmVjdG9yeSBpcyBzZXQgYXMgZm9sbG93cyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBjb25maWd1cmF0aW9uIGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUk9PVF9IT01FID8/PSAiL2hvbWUvcm9vdCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZGVmYXVsdCB2YWx1ZSBpcyBsaWtlbHkgdXNlZCBiZWNhdXNlIHNvbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVtYmVkZGVkIHNvbHV0aW9ucyBwcmVmZXIgdG8gaGF2ZSBhIHJlYWQtb25seSByb290CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtIGFuZCBwcmVmZXIgdG8ga2VlcCB3cml0ZWFibGUgZGF0YSBpbiBvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYnkgc2V0dGluZyB0aGUgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgaW4gYW55IGxheWVyIG9yIGluIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlIGRlZmF1bHQgaXMgc2V0IHVzaW5nIGEgIndlYWsiIGFzc2lnbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gIj8/PSIpLCB5b3UgY2FuIHVzZSBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBmb3JtcworICAgICAgICAgICAgICAgICAgICB0byBkZWZpbmUgeW91ciBvdmVycmlkZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBST09UX0hPTUUgPSAiL3Jvb3QiCisgICAgIFJPT1RfSE9NRSA/PSAiL3Jvb3QiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2Ugb3ZlcnJpZGUgZXhhbXBsZXMgdXNlIDxmaWxlbmFtZT4vcm9vdDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBwcm9iYWJseSB0aGUgbW9zdCBjb21tb25seSB1c2VkIG92ZXJyaWRlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJPT1RGUyc+PGdsb3NzdGVybT5ST09URlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFJPT1RGU1tkb2NdID0gIkluZGljYXRlcyBhIGZpbGVzeXN0ZW0gaW1hZ2UgdG8gaW5jbHVkZSBhcyB0aGUgcm9vdCBmaWxlc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEluZGljYXRlcyBhIGZpbGVzeXN0ZW0gaW1hZ2UgdG8gaW5jbHVkZSBhcyB0aGUgcm9vdAorICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlJPT1RGUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIGFuIG9wdGlvbmFsCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHVzZWQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYm9vdGltZyc+PGZpbGVuYW1lPmJvb3RpbWc8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUk9PVEZTX1BPU1RJTlNUQUxMX0NPTU1BTkQnPjxnbG9zc3Rlcm0+Uk9PVEZTX1BPU1RJTlNUQUxMX0NPTU1BTkQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFJPT1RGU19QT1NUSU5TVEFMTF9DT01NQU5EW2RvY10gPSAiU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBhZnRlciBpbnN0YWxsaW5nIHBhY2thZ2VzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgYWZ0ZXIgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIGluc3RhbGxlZCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzcGVjaWZ5IGZ1bmN0aW9ucyBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9uczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBST09URlNfUE9TVElOU1RBTExfQ09NTUFORCArPSAiPHJlcGxhY2VhYmxlPmZ1bmN0aW9uPC9yZXBsYWNlYWJsZT47IC4uLiAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IG5lZWQgdG8gcGFzcyB0aGUgcm9vdCBmaWxlc3lzdGVtIHBhdGggdG8gYSBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBhIGZ1bmN0aW9uLCB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtJTUFHRV9ST09URlN9PC9maWxlbmFtZT4sIHdoaWNoIHBvaW50cyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgZGlyZWN0b3J5IHRoYXQgYmVjb21lcyB0aGUgcm9vdCBmaWxlc3lzdGVtIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9ST09URlMnPjxmaWxlbmFtZT5JTUFHRV9ST09URlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQnPjxnbG9zc3Rlcm0+Uk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFJPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EW2RvY10gPSAiU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBvbmNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyBjcmVhdGVkIHRoZSByb290IGZpbGVzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBvbmNlIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyBjcmVhdGVkIHRoZSByb290IGZpbGVzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSBmdW5jdGlvbnMgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gIjxyZXBsYWNlYWJsZT5mdW5jdGlvbjwvcmVwbGFjZWFibGU+OyAuLi4gIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIHBhc3MgdGhlIHJvb3QgZmlsZXN5c3RlbSBwYXRoIHRvIGEgY29tbWFuZAorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gYSBmdW5jdGlvbiwgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7SU1BR0VfUk9PVEZTfTwvZmlsZW5hbWU+LCB3aGljaCBwb2ludHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIGRpcmVjdG9yeSB0aGF0IGJlY29tZXMgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTJz48ZmlsZW5hbWU+SU1BR0VfUk9PVEZTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJPT1RGU19QT1NUVU5JTlNUQUxMX0NPTU1BTkQnPjxnbG9zc3Rlcm0+Uk9PVEZTX1BPU1RVTklOU1RBTExfQ09NTUFORDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUk9PVEZTX1BPU1RVTklOU1RBTExfQ09NTUFORFtkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgYWZ0ZXIgcmVtb3ZhbCBvZiB1bm5lZWRlZCBwYWNrYWdlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIGFmdGVyIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyByZW1vdmVkIHVubmVjZXNzYXJ5CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHJ1bnRpbWUgcGFja2FnZSBtYW5hZ2VtZW50IGlzIGRpc2FibGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBpbWFnZSwgc2V2ZXJhbCBwYWNrYWdlcyBhcmUgcmVtb3ZlZCBpbmNsdWRpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhc2UtcGFzc3dkPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zaGFkb3c8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51cGRhdGUtYWx0ZXJuYXRpdmVzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSBmdW5jdGlvbnMgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUk9PVEZTX1BPU1RVTklOU1RBTExfQ09NTUFORCArPSAiPHJlcGxhY2VhYmxlPmZ1bmN0aW9uPC9yZXBsYWNlYWJsZT47IC4uLiAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IG5lZWQgdG8gcGFzcyB0aGUgcm9vdCBmaWxlc3lzdGVtIHBhdGggdG8gYSBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBhIGZ1bmN0aW9uLCB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtJTUFHRV9ST09URlN9PC9maWxlbmFtZT4sIHdoaWNoIHBvaW50cyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgZGlyZWN0b3J5IHRoYXQgYmVjb21lcyB0aGUgcm9vdCBmaWxlc3lzdGVtIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9ST09URlMnPjxmaWxlbmFtZT5JTUFHRV9ST09URlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUk9PVEZTX1BSRVBST0NFU1NfQ09NTUFORCc+PGdsb3NzdGVybT5ST09URlNfUFJFUFJPQ0VTU19DT01NQU5EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBST09URlNfUFJFUFJPQ0VTU19DT01NQU5EW2RvY10gPSAiU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBiZWZvcmUgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIGNyZWF0ZWQgdGhlIHJvb3QgZmlsZXN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIGJlZm9yZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgZnVuY3Rpb25zIHNlcGFyYXRlZCBieSBzZW1pY29sb25zOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJPT1RGU19QUkVQUk9DRVNTX0NPTU1BTkQgKz0gIjxyZXBsYWNlYWJsZT5mdW5jdGlvbjwvcmVwbGFjZWFibGU+OyAuLi4gIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIHBhc3MgdGhlIHJvb3QgZmlsZXN5c3RlbSBwYXRoIHRvIGEgY29tbWFuZAorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gYSBmdW5jdGlvbiwgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7SU1BR0VfUk9PVEZTfTwvZmlsZW5hbWU+LCB3aGljaCBwb2ludHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIGRpcmVjdG9yeSB0aGF0IGJlY29tZXMgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTJz48ZmlsZW5hbWU+SU1BR0VfUk9PVEZTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJQUk9WSURFUyc+PGdsb3NzdGVybT5SUFJPVklERVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFJQUk9WSURFU1tkb2NdID0gIkEgbGlzdCBvZiBwYWNrYWdlIG5hbWUgYWxpYXNlcyB0aGF0IGEgcGFja2FnZSBhbHNvIHByb3ZpZGVzLiBUaGVzZSBhbGlhc2VzIGFyZSB1c2VmdWwgZm9yIHNhdGlzZnlpbmcgcnVudGltZSBkZXBlbmRlbmNpZXMgb2Ygb3RoZXIgcGFja2FnZXMgYm90aCBkdXJpbmcgdGhlIGJ1aWxkIGFuZCBvbiB0aGUgdGFyZ2V0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBwYWNrYWdlIG5hbWUgYWxpYXNlcyB0aGF0IGEgcGFja2FnZSBhbHNvIHByb3ZpZGVzLgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBhbGlhc2VzIGFyZSB1c2VmdWwgZm9yIHNhdGlzZnlpbmcgcnVudGltZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgb2Ygb3RoZXIgcGFja2FnZXMgYm90aCBkdXJpbmcgdGhlIGJ1aWxkIGFuZCBvbiB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIChhcyBzcGVjaWZpZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+UkRFUEVORFM8L2xpbms+PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEEgcGFja2FnZSdzIG93biBuYW1lIGlzIGltcGxpY2l0bHkgYWxyZWFkeSBpbiBpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SUFJPVklERVM8L2ZpbGVuYW1lPiBsaXN0LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgQXMgd2l0aCBhbGwgcGFja2FnZS1jb250cm9sbGluZyB2YXJpYWJsZXMsIHlvdSBtdXN0IGFsd2F5cworICAgICAgICAgICAgICAgICAgIHVzZSB0aGUgdmFyaWFibGUgaW4gY29uanVuY3Rpb24gd2l0aCBhIHBhY2thZ2UgbmFtZSBvdmVycmlkZS4KKyAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSUFJPVklERVNfJHtQTn0gPSAid2lkZ2V0LWFiaS0yIgorICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1SUkVDT01NRU5EUyc+PGdsb3NzdGVybT5SUkVDT01NRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUlJFQ09NTUVORFNbZG9jXSA9ICJBIGxpc3Qgb2YgcGFja2FnZXMgdGhhdCBleHRlbmRzIHRoZSB1c2FiaWxpdHkgb2YgYSBwYWNrYWdlIGJlaW5nIGJ1aWx0LiBUaGUgcGFja2FnZSBiZWluZyBidWlsdCBkb2VzIG5vdCBkZXBlbmQgb24gdGhpcyBsaXN0IG9mIHBhY2thZ2VzIGluIG9yZGVyIHRvIHN1Y2Nlc3NmdWxseSBidWlsZCwgYnV0IG5lZWRzIHRoZW0gZm9yIHRoZSBleHRlbmRlZCB1c2FiaWxpdHkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIHBhY2thZ2VzIHRoYXQgZXh0ZW5kcyB0aGUgdXNhYmlsaXR5IG9mIGEgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBiZWluZyBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHBhY2thZ2UgYmVpbmcgYnVpbHQgZG9lcyBub3QgZGVwZW5kIG9uIHRoaXMgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBpbiBvcmRlciB0byBzdWNjZXNzZnVsbHkgYnVpbGQsIGJ1dCByYXRoZXIKKyAgICAgICAgICAgICAgICAgICAgdXNlcyB0aGVtIGZvciBleHRlbmRlZCB1c2FiaWxpdHkuCisgICAgICAgICAgICAgICAgICAgIFRvIHNwZWNpZnkgcnVudGltZSBkZXBlbmRlbmNpZXMgZm9yIHBhY2thZ2VzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPlJERVBFTkRTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgcGFja2FnZSBtYW5hZ2VyIHdpbGwgYXV0b21hdGljYWxseSBpbnN0YWxsIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPiBsaXN0IG9mIHBhY2thZ2VzIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGluZyB0aGUgYnVpbHQgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgeW91IGNhbiBwcmV2ZW50IGxpc3RlZCBwYWNrYWdlcyBmcm9tIGJlaW5nCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBieSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJBRF9SRUNPTU1FTkRBVElPTlMnPjxmaWxlbmFtZT5CQURfUkVDT01NRU5EQVRJT05TPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTk9fUkVDT01NRU5EQVRJT05TJz48ZmlsZW5hbWU+Tk9fUkVDT01NRU5EQVRJT05TPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfRVhDTFVERSc+PGZpbGVuYW1lPlBBQ0tBR0VfRVhDTFVERTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VzIHNwZWNpZmllZCBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPiBuZWVkIG5vdCBhY3R1YWxseSBiZQorICAgICAgICAgICAgICAgICAgICBwcm9kdWNlZC4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgYSByZWNpcGUgbXVzdCBleGlzdCB0aGF0IHByb3ZpZGVzIGVhY2ggcGFja2FnZSwKKyAgICAgICAgICAgICAgICAgICAgZWl0aGVyIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFUyc+PGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFU19EWU5BTUlDJz48ZmlsZW5hbWU+UEFDS0FHRVNfRFlOQU1JQzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUFJPVklERVMnPjxmaWxlbmFtZT5SUFJPVklERVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIG9yIGFuIGVycm9yIHdpbGwgb2NjdXIgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgSWYgc3VjaCBhIHJlY2lwZSBkb2VzIGV4aXN0IGFuZCB0aGUgcGFja2FnZSBpcyBub3QgcHJvZHVjZWQsCisgICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZCBjb250aW51ZXMgd2l0aG91dCBlcnJvci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSB0aGUgPGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgYXBwbGllcyB0byBwYWNrYWdlcyBiZWluZyBidWlsdCwgeW91IHNob3VsZCBhbHdheXMgYXR0YWNoCisgICAgICAgICAgICAgICAgICAgIGFuIG92ZXJyaWRlIHRvIHRoZSB2YXJpYWJsZSB0byBzcGVjaWZ5IHRoZSBwYXJ0aWN1bGFyCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2Ugd2hvc2UgdXNhYmlsaXR5IGlzIGJlaW5nIGV4dGVuZGVkLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgYXJlIGJ1aWxkaW5nIGEgZGV2ZWxvcG1lbnQgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICB0aGF0IGlzIGV4dGVuZGVkIHRvIHN1cHBvcnQgd2lyZWxlc3MgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB5b3Ugd291bGQgdXNlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUlJFQ09NTUVORFNfJHtQTn0tZGV2ICs9ICI8cmVwbGFjZWFibGU+d2lyZWxlc3NfcGFja2FnZV9uYW1lPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhlIGV4YW1wbGUsIHRoZSBwYWNrYWdlIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4kezxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+UE48L2xpbms+fS1kZXY8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgbXVzdCBhcHBlYXIgYXMgaXQgd291bGQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRVMnPlBBQ0tBR0VTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZSBiZWZvcmUgYW55IHJlbmFtaW5nIG9mIHRoZSBvdXRwdXQgcGFja2FnZSBieQorICAgICAgICAgICAgICAgICAgICBjbGFzc2VzIHN1Y2ggYXMgPGZpbGVuYW1lPmRlYmlhbi5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UsIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMsIHN1cHBvcnRzCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnlpbmcgdmVyc2lvbmVkIHJlY29tbWVuZHMuCisgICAgICAgICAgICAgICAgICAgIEFsdGhvdWdoIHRoZSBzeW50YXggdmFyaWVzIGRlcGVuZGluZyBvbiB0aGUgcGFja2FnaW5nCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgQml0QmFrZSBoaWRlcyB0aGVzZSBkaWZmZXJlbmNlcyBmcm9tIHlvdS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgZ2VuZXJhbCBzeW50YXggdG8gc3BlY2lmeSB2ZXJzaW9ucyB3aXRoCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPiB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSUkVDT01NRU5EU18ke1BOfSA9ICI8cmVwbGFjZWFibGU+cGFja2FnZTwvcmVwbGFjZWFibGU+ICg8cmVwbGFjZWFibGU+b3BlcmF0b3I8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dmVyc2lvbjwvcmVwbGFjZWFibGU+KSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgPGZpbGVuYW1lPm9wZXJhdG9yPC9maWxlbmFtZT4sIHlvdSBjYW4gc3BlY2lmeSB0aGUKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgID0KKyAgICAgJmx0OworICAgICAmZ3Q7CisgICAgICZsdDs9CisgICAgICZndDs9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2V0cyB1cCBhIHJlY29tbWVuZCBvbiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIDEuMiBvciBncmVhdGVyIG9mIHRoZSBwYWNrYWdlIDxmaWxlbmFtZT5mb288L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSUkVDT01NRU5EU18ke1BOfSA9ICJmb28gKD49IDEuMikiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1SUkVQTEFDRVMnPjxnbG9zc3Rlcm0+UlJFUExBQ0VTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBSUkVQTEFDRVNbZG9jXSA9ICJBIGxpc3Qgb2YgcGFja2FnZXMgcmVwbGFjZWQgYnkgYSBwYWNrYWdlLiBUaGUgcGFja2FnZSBtYW5hZ2VyIHVzZXMgdGhpcyB2YXJpYWJsZSB0byBkZXRlcm1pbmUgd2hpY2ggcGFja2FnZSBzaG91bGQgYmUgaW5zdGFsbGVkIHRvIHJlcGxhY2Ugb3RoZXIgcGFja2FnZShzKSBkdXJpbmcgYW4gdXBncmFkZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgcGFja2FnZXMgcmVwbGFjZWQgYnkgYSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgcGFja2FnZSBtYW5hZ2VyIHVzZXMgdGhpcyB2YXJpYWJsZSB0byBkZXRlcm1pbmUgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBzaG91bGQgYmUgaW5zdGFsbGVkIHRvIHJlcGxhY2Ugb3RoZXIgcGFja2FnZShzKQorICAgICAgICAgICAgICAgICAgICBkdXJpbmcgYW4gdXBncmFkZS4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gYWxzbyBoYXZlIHRoZSBvdGhlciBwYWNrYWdlKHMpIHJlbW92ZWQgYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIHNhbWUgdGltZSwgeW91IG11c3QgYWRkIHRoZSBuYW1lIG9mIHRoZSBvdGhlcgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVJDT05GTElDVFMnPlJDT05GTElDVFM8L2xpbms+PC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgQXMgd2l0aCBhbGwgcGFja2FnZS1jb250cm9sbGluZyB2YXJpYWJsZXMsIHlvdSBtdXN0IHVzZQorICAgICAgICAgICAgICAgICAgIHRoaXMgdmFyaWFibGUgaW4gY29uanVuY3Rpb24gd2l0aCBhIHBhY2thZ2UgbmFtZQorICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlLgorICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJSRVBMQUNFU18ke1BOfSA9ICI8cmVwbGFjZWFibGU+b3RoZXJfcGFja2FnZV9iZWluZ19yZXBsYWNlZDwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSwgd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcywgc3VwcG9ydHMKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeWluZyB2ZXJzaW9uZWQgcmVwbGFjZW1lbnRzLgorICAgICAgICAgICAgICAgICAgICBBbHRob3VnaCB0aGUgc3ludGF4IHZhcmllcyBkZXBlbmRpbmcgb24gdGhlIHBhY2thZ2luZworICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIEJpdEJha2UgaGlkZXMgdGhlc2UgZGlmZmVyZW5jZXMgZnJvbSB5b3UuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGdlbmVyYWwgc3ludGF4IHRvIHNwZWNpZnkgdmVyc2lvbnMgd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlJSRVBMQUNFUzwvZmlsZW5hbWU+IHZhcmlhYmxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJSRVBMQUNFU18ke1BOfSA9ICI8cmVwbGFjZWFibGU+cGFja2FnZTwvcmVwbGFjZWFibGU+ICg8cmVwbGFjZWFibGU+b3BlcmF0b3I8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dmVyc2lvbjwvcmVwbGFjZWFibGU+KSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgPGZpbGVuYW1lPm9wZXJhdG9yPC9maWxlbmFtZT4sIHlvdSBjYW4gc3BlY2lmeSB0aGUKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgID0KKyAgICAgJmx0OworICAgICAmZ3Q7CisgICAgICZsdDs9CisgICAgICZndDs9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2V0cyB1cCBhIHJlcGxhY2VtZW50IHVzaW5nCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gMS4yIG9yIGdyZWF0ZXIgb2YgdGhlIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvbzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJSRVBMQUNFU18ke1BOfSA9ICJmb28gKD49IDEuMikiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1SU1VHR0VTVFMnPjxnbG9zc3Rlcm0+UlNVR0dFU1RTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBSU1VHR0VTVFNbZG9jXSA9ICJBIGxpc3Qgb2YgYWRkaXRpb25hbCBwYWNrYWdlcyB0aGF0IHlvdSBjYW4gc3VnZ2VzdCBmb3IgaW5zdGFsbGF0aW9uIGJ5IHRoZSBwYWNrYWdlIG1hbmFnZXIgYXQgdGhlIHRpbWUgYSBwYWNrYWdlIGlzIGluc3RhbGxlZC4gTm90IGFsbCBwYWNrYWdlIG1hbmFnZXJzIHN1cHBvcnQgdGhpcyBmdW5jdGlvbmFsaXR5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBhZGRpdGlvbmFsIHBhY2thZ2VzIHRoYXQgeW91IGNhbiBzdWdnZXN0IGZvcgorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb24gYnkgdGhlIHBhY2thZ2UgbWFuYWdlciBhdCB0aGUgdGltZSBhIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgaXMgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICBOb3QgYWxsIHBhY2thZ2UgbWFuYWdlcnMgc3VwcG9ydCB0aGlzIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgQXMgd2l0aCBhbGwgcGFja2FnZS1jb250cm9sbGluZyB2YXJpYWJsZXMsIHlvdSBtdXN0IGFsd2F5cworICAgICAgICAgICAgICAgICAgIHVzZSB0aGlzIHZhcmlhYmxlIGluIGNvbmp1bmN0aW9uIHdpdGggYSBwYWNrYWdlIG5hbWUKKyAgICAgICAgICAgICAgICAgICBvdmVycmlkZS4KKyAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSU1VHR0VTVFNfJHtQTn0gPSAiPHJlcGxhY2VhYmxlPnVzZWZ1bF9wYWNrYWdlPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPmFub3RoZXJfcGFja2FnZTwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktcyc+PHRpdGxlPlM8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUyc+PGdsb3NzdGVybT5TPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTW2RvY10gPSAiVGhlIGxvY2F0aW9uIGluIHRoZSBCdWlsZCBEaXJlY3Rvcnkgd2hlcmUgdW5wYWNrZWQgcGFja2FnZSBzb3VyY2UgY29kZSByZXNpZGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhdGlvbiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB3aGVyZSB1bnBhY2tlZCByZWNpcGUgc291cmNlIGNvZGUgcmVzaWRlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBsb2NhdGlvbiBpcyB3aXRoaW4gdGhlIHdvcmsgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVdPUktESVInPldPUktESVI8L2xpbms+PC9maWxlbmFtZT4pLAorICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBub3Qgc3RhdGljLgorICAgICAgICAgICAgICAgICAgICBUaGUgdW5wYWNrZWQgc291cmNlIGxvY2F0aW9uIGRlcGVuZHMgb24gdGhlIHJlY2lwZSBuYW1lCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBOJz5QTjwvbGluaz48L2ZpbGVuYW1lPikgYW5kCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBWJz5QVjwvbGluaz48L2ZpbGVuYW1lPikgYXMKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAke1dPUktESVJ9LyR7UE59LSR7UFZ9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgYXNzdW1lIGEKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHRvcC1sZXZlbCBmb2xkZXIgbmFtZWQgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBhbmQgYQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IEJ1aWxkIERpcmVjdG9yeSBhdCA8ZmlsZW5hbWU+cG9reS9idWlsZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSB3b3JrIGRpcmVjdG9yeSB0aGUgYnVpbGQgc3lzdGVtIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgdG8ga2VlcCB0aGUgdW5wYWNrZWQgcmVjaXBlIGZvciA8ZmlsZW5hbWU+ZGI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHBva3kvYnVpbGQvdG1wL3dvcmsvcWVtdXg4Ni1wb2t5LWxpbnV4L2RiLzUuMS4xOS1yMy9kYi01LjEuMTkKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNBTklUWV9SRVFVSVJFRF9VVElMSVRJRVMnPjxnbG9zc3Rlcm0+U0FOSVRZX1JFUVVJUkVEX1VUSUxJVElFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0FOSVRZX1JFUVVJUkVEX1VUSUxJVElFU1tkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgY29tbWFuZC1saW5lIHV0aWxpdGllcyB0aGF0IHNob3VsZCBiZSBjaGVja2VkIGZvciBkdXJpbmcgdGhlIGluaXRpYWwgc2FuaXR5IGNoZWNraW5nIHByb2Nlc3Mgd2hlbiBydW5uaW5nIEJpdEJha2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBjb21tYW5kLWxpbmUgdXRpbGl0aWVzIHRoYXQgc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQgZm9yIGR1cmluZyB0aGUgaW5pdGlhbCBzYW5pdHkgY2hlY2tpbmcgcHJvY2VzcyB3aGVuCisgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgQml0QmFrZS4KKyAgICAgICAgICAgICAgICAgICAgSWYgYW55IG9mIHRoZSB1dGlsaXRpZXMgYXJlIG5vdCBpbnN0YWxsZWQgb24gdGhlIGJ1aWxkIGhvc3QsCisgICAgICAgICAgICAgICAgICAgIHRoZW4gQml0QmFrZSBpbW1lZGlhdGVseSBleGl0cyB3aXRoIGFuIGVycm9yLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNBTklUWV9URVNURURfRElTVFJPUyc+PGdsb3NzdGVybT5TQU5JVFlfVEVTVEVEX0RJU1RST1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNBTklUWV9URVNURURfRElTVFJPU1tkb2NdID0gIkEgbGlzdCBvZiB0aGUgaG9zdCBkaXN0cmlidXRpb24gaWRlbnRpZmllcnMgdGhhdCB0aGUgYnVpbGQgc3lzdGVtIGhhcyBiZWVuIHRlc3RlZCBhZ2FpbnN0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiB0aGUgaG9zdCBkaXN0cmlidXRpb24gaWRlbnRpZmllcnMgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIGhhcyBiZWVuIHRlc3RlZCBhZ2FpbnN0LgorICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVycyBjb25zaXN0IG9mIHRoZSBob3N0IGRpc3RyaWJ1dG9yIElECisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2VkIGJ5IHRoZSByZWxlYXNlLAorICAgICAgICAgICAgICAgICAgICBhcyByZXBvcnRlZCBieSB0aGUgPGZpbGVuYW1lPmxzYl9yZWxlYXNlPC9maWxlbmFtZT4gdG9vbAorICAgICAgICAgICAgICAgICAgICBvciBhcyByZWFkIGZyb20gPGZpbGVuYW1lPi9ldGMvbHNiLXJlbGVhc2U8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgU2VwYXJhdGUgdGhlIGxpc3QgaXRlbXMgd2l0aCBleHBsaWNpdCBuZXdsaW5lCisgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgKDxmaWxlbmFtZT5cbjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPlNBTklUWV9URVNURURfRElTVFJPUzwvZmlsZW5hbWU+IGlzIG5vdCBlbXB0eQorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU5BVElWRUxTQlNUUklORyc+PGZpbGVuYW1lPk5BVElWRUxTQlNUUklORzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIGxpc3QsIHRoZW4gdGhlIGJ1aWxkIHN5c3RlbSByZXBvcnRzCisgICAgICAgICAgICAgICAgICAgIGEgd2FybmluZyB0aGF0IGluZGljYXRlcyB0aGUgY3VycmVudCBob3N0IGRpc3RyaWJ1dGlvbiBoYXMKKyAgICAgICAgICAgICAgICAgICAgbm90IGJlZW4gdGVzdGVkIGFzIGEgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtfQVJDSCc+PGdsb3NzdGVybT5TREtfQVJDSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0RLX0FSQ0hbZG9jXSA9ICJUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBmb3IgdGhlIFNESy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBmb3IgdGhlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCB5b3UgZG8gbm90IGRpcmVjdGx5IHNldCB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBJbnN0ZWFkLCB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES01BQ0hJTkUnPjxmaWxlbmFtZT5TREtNQUNISU5FPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNES19ERVBMT1knPjxnbG9zc3Rlcm0+U0RLX0RFUExPWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0RLX0RFUExPWVtkb2NdID0gIlRoZSBkaXJlY3Rvcnkgc2V0IHVwIGFuZCB1c2VkIGJ5IHRoZSBwb3B1bGF0ZV9zZGtfYmFzZSB0byB3aGljaCB0aGUgU0RLIGlzIGRlcGxveWVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3Rvcnkgc2V0IHVwIGFuZCB1c2VkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wb3B1bGF0ZS1zZGsnPjxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfYmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0byB3aGljaCB0aGUgU0RLIGlzIGRlcGxveWVkLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnBvcHVsYXRlX3Nka19iYXNlPC9maWxlbmFtZT4gY2xhc3MgZGVmaW5lcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U0RLX0RFUExPWTwvZmlsZW5hbWU+IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU0RLX0RFUExPWSA9ICIkezxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPlRNUERJUjwvbGluaz59L2RlcGxveS9zZGsiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtfRElSJz48Z2xvc3N0ZXJtPlNES19ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES19ESVJbZG9jXSA9ICJUaGUgcGFyZW50IGRpcmVjdG9yeSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdoZW4gY3JlYXRpbmcgU0RLIG91dHB1dC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgcGFyZW50IGRpcmVjdG9yeSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHdoZW4gY3JlYXRpbmcgU0RLIG91dHB1dC4KKyAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBvcHVsYXRlLXNkay0qJz48ZmlsZW5hbWU+cG9wdWxhdGVfc2RrX2Jhc2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgZGVmaW5lcyB0aGUgdmFyaWFibGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTREtfRElSID0gIiR7PGxpbmsgbGlua2VuZD0ndmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L2xpbms+fS9zZGsiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlNES19ESVI8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcG9yYXJ5IGRpcmVjdG9yeSBhcyBpdCBpcyBwYXJ0IG9mCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpbmFsIG91dHB1dCBkaXJlY3RvcnkgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfREVQTE9ZJz48ZmlsZW5hbWU+U0RLX0RFUExPWTwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNES19IT1NUX01BTklGRVNUJz48Z2xvc3N0ZXJtPlNES19IT1NUX01BTklGRVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtfSE9TVF9NQU5JRkVTVFtkb2NdID0gIlRoZSBtYW5pZmVzdCBmaWxlIGZvciB0aGUgaG9zdCBwYXJ0IG9mIHRoZSBTREsuIFRoaXMgZmlsZSBsaXN0cyBhbGwgdGhlIGluc3RhbGxlZCBwYWNrYWdlcyB0aGF0IG1ha2UgdXAgdGhlIGhvc3QgcGFydCBvZiB0aGUgU0RLLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtYW5pZmVzdCBmaWxlIGZvciB0aGUgaG9zdCBwYXJ0IG9mIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBsaXN0cyBhbGwgdGhlIGluc3RhbGxlZCBwYWNrYWdlcyB0aGF0IG1ha2UgdXAKKyAgICAgICAgICAgICAgICAgICAgdGhlIGhvc3QgcGFydCBvZiBTREsuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmaWxlIGNvbnRhaW5zIHBhY2thZ2UgaW5mb3JtYXRpb24gb24gYSBsaW5lLXBlci1wYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIGJhc2lzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPHJlcGxhY2VhYmxlPnBhY2thZ2VuYW1lPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnBhY2thZ2VhcmNoPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnZlcnNpb248L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wb3B1bGF0ZS1zZGstKic+PGZpbGVuYW1lPnBvcHVsYXRlX3Nka19iYXNlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGRlZmluZXMgdGhlIG1hbmlmZXN0IGZpbGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTREtfSE9TVF9NQU5JRkVTVCA9ICIke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9Lmhvc3QubWFuaWZlc3QiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvY2F0aW9uIGlzIGRlcml2ZWQgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfREVQTE9ZJz48ZmlsZW5hbWU+U0RLX0RFUExPWTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRPT0xDSEFJTl9PVVRQVVROQU1FJz48ZmlsZW5hbWU+VE9PTENIQUlOX09VVFBVVE5BTUU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNES19OQU1FJz48Z2xvc3N0ZXJtPlNES19OQU1FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtfTkFNRVtkb2NdID0gIlRoZSBiYXNlIG5hbWUgZm9yIFNESyBvdXRwdXQgZmlsZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJhc2UgbmFtZSBmb3IgU0RLIG91dHB1dCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgaXMgZGVyaXZlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPJz48ZmlsZW5hbWU+RElTVFJPPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVENMSUJDJz48ZmlsZW5hbWU+VENMSUJDPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLX0FSQ0gnPjxmaWxlbmFtZT5TREtfQVJDSDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0JBU0VOQU1FJz48ZmlsZW5hbWU+SU1BR0VfQkFTRU5BTUU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVFVORV9QS0dBUkNIJz48ZmlsZW5hbWU+VFVORV9QS0dBUkNIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTREtfTkFNRSA9ICIke0RJU1RST30tJHtUQ0xJQkN9LSR7U0RLX0FSQ0h9LSR7SU1BR0VfQkFTRU5BTUV9LSR7VFVORV9QS0dBUkNIfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNES19PUyc+PGdsb3NzdGVybT5TREtfT1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES19PU1tkb2NdID0gIlRoZSBvcGVyYXRpbmcgc3lzdGVtIGZvciB3aGljaCB0aGUgU0RLIHdpbGwgYmUgYnVpbHQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGZvciB3aGljaCB0aGUgU0RLCisgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERfT1MnPjxmaWxlbmFtZT5CVUlMRF9PUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtfT1VUUFVUJz48Z2xvc3N0ZXJtPlNES19PVVRQVVQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES19PVVRQVVRbZG9jXSA9ICJUaGUgbG9jYXRpb24gdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aGVuIGNyZWF0aW5nIFNESyBvdXRwdXQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvY2F0aW9uIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2hlbgorICAgICAgICAgICAgICAgICAgICBjcmVhdGluZyBTREsgb3V0cHV0LgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcG9wdWxhdGUtc2RrLSonPjxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfYmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBkZWZpbmVzIHRoZSB2YXJpYWJsZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNES19PVVRQVVQgPSAiJHs8bGluayBsaW5rZW5kPSd2YXItU0RLX0RJUic+U0RLX0RJUjwvbGluaz59L2ltYWdlIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5TREtfT1VUUFVUPC9maWxlbmFtZT4gZGlyZWN0b3J5IGlzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBvcmFyeSBkaXJlY3RvcnkgYXMgaXQgaXMgcGFydCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPiBieSB3YXkgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TREtfRElSPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmluYWwgb3V0cHV0IGRpcmVjdG9yeSBpcworICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES19ERVBMT1knPjxmaWxlbmFtZT5TREtfREVQTE9ZPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLX1BBQ0tBR0VfQVJDSFMnPjxnbG9zc3Rlcm0+U0RLX1BBQ0tBR0VfQVJDSFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES19QQUNLQUdFX0FSQ0hTW2RvY10gPSAiU3BlY2lmaWVzIGEgbGlzdCBvZiBhcmNoaXRlY3R1cmVzIGNvbXBhdGlibGUgd2l0aCB0aGUgU0RLIG1hY2hpbmUuIFRoaXMgdmFyaWFibGUgaXMgc2V0IGF1dG9tYXRpY2FsbHkgYW5kIHNob3VsZCBub3Qgbm9ybWFsbHkgYmUgaGFuZC1lZGl0ZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBhcmNoaXRlY3R1cmVzIGNvbXBhdGlibGUgd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgU0RLIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgc2V0IGF1dG9tYXRpY2FsbHkgYW5kIHNob3VsZCBub3QKKyAgICAgICAgICAgICAgICAgICAgbm9ybWFsbHkgYmUgaGFuZC1lZGl0ZWQuCisgICAgICAgICAgICAgICAgICAgIEVudHJpZXMgYXJlIHNlcGFyYXRlZCB1c2luZyBzcGFjZXMgYW5kIGxpc3RlZCBpbiBvcmRlcgorICAgICAgICAgICAgICAgICAgICBvZiBwcmlvcml0eS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TREtfUEFDS0FHRV9BUkNIUzwvZmlsZW5hbWU+IGlzICJhbGwgYW55IG5vYXJjaAorICAgICAgICAgICAgICAgICAgICAke1NES19BUkNIfS0ke1NES1BLR1NVRkZJWH0iLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNES19QT1NUUFJPQ0VTU19DT01NQU5EJz48Z2xvc3N0ZXJtPlNES19QT1NUUFJPQ0VTU19DT01NQU5EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtfUE9TVFBST0NFU1NfQ09NTUFORFtkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgb25jZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgU0RLLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgb25jZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgU0RLLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgZnVuY3Rpb25zIHNlcGFyYXRlZCBieSBzZW1pY29sb25zOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNES19QT1NUUFJPQ0VTU19DT01NQU5EICs9ICI8cmVwbGFjZWFibGU+ZnVuY3Rpb248L3JlcGxhY2VhYmxlPjsgLi4uICIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBwYXNzIGFuIFNESyBwYXRoIHRvIGEgY29tbWFuZCB3aXRoaW4gYQorICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiwgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7U0RLX0RJUn08L2ZpbGVuYW1lPiwgd2hpY2ggcG9pbnRzIHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgd2hlbiBjcmVhdGluZyBTREsgb3V0cHV0LgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfRElSJz48ZmlsZW5hbWU+U0RLX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtfUFJFRklYJz48Z2xvc3N0ZXJtPlNES19QUkVGSVg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES19QUkVGSVhbZG9jXSA9ICJUaGUgdG9vbGNoYWluIGJpbmFyeSBwcmVmaXggdXNlZCBmb3IgbmF0aXZlc2RrIHJlY2lwZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHRvb2xjaGFpbiBiaW5hcnkgcHJlZml4IHVzZWQgZm9yIG5hdGl2ZXNkayByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U0RLX1BSRUZJWDwvZmlsZW5hbWU+IHZhbHVlIHRvIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9QUkVGSVgnPjxmaWxlbmFtZT5UQVJHRVRfUFJFRklYPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+IHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzICIke1NES19TWVN9LSIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLX1NZUyc+PGdsb3NzdGVybT5TREtfU1lTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtfU1lTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBzeXN0ZW0sIGluY2x1ZGluZyB0aGUgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgb3BlcmF0aW5nIHN5c3RlbSwgZm9yIHdoaWNoIHRoZSBTREsgd2lsbCBiZSBidWlsdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHN5c3RlbSwgaW5jbHVkaW5nIHRoZSBhcmNoaXRlY3R1cmUgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpbmcgc3lzdGVtLCBmb3Igd2hpY2ggdGhlIFNESyB3aWxsIGJlIGJ1aWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhdXRvbWF0aWNhbGx5IHNldHMgdGhpcworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBiYXNlZCBvbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLX0FSQ0gnPjxmaWxlbmFtZT5TREtfQVJDSDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES19WRU5ET1InPjxmaWxlbmFtZT5TREtfVkVORE9SPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES19PUyc+PGZpbGVuYW1lPlNES19PUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBuZWVkIHRvIHNldCB0aGUgPGZpbGVuYW1lPlNES19TWVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB5b3Vyc2VsZi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtfVEFSR0VUX01BTklGRVNUJz48Z2xvc3N0ZXJtPlNES19UQVJHRVRfTUFOSUZFU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES19UQVJHRVRfTUFOSUZFU1RbZG9jXSA9ICJUaGUgbWFuaWZlc3QgZmlsZSBmb3IgdGhlIHRhcmdldCBwYXJ0IG9mIHRoZSBTREsuIFRoaXMgZmlsZSBsaXN0cyBhbGwgdGhlIGluc3RhbGxlZCBwYWNrYWdlcyB0aGF0IG1ha2UgdXAgdGhlIHRhcmdldCBwYXJ0IG9mIHRoZSBTREsuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1hbmlmZXN0IGZpbGUgZm9yIHRoZSB0YXJnZXQgcGFydCBvZiB0aGUgU0RLLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGZpbGUgbGlzdHMgYWxsIHRoZSBpbnN0YWxsZWQgcGFja2FnZXMgdGhhdCBtYWtlIHVwCisgICAgICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQgcGFydCBvZiB0aGUgU0RLLgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlsZSBjb250YWlucyBwYWNrYWdlIGluZm9ybWF0aW9uIG9uIGEgbGluZS1wZXItcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBiYXNpcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxyZXBsYWNlYWJsZT5wYWNrYWdlbmFtZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5wYWNrYWdlYXJjaDwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT52ZXJzaW9uPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcG9wdWxhdGUtc2RrLSonPjxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfYmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBkZWZpbmVzIHRoZSBtYW5pZmVzdCBmaWxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU0RLX1RBUkdFVF9NQU5JRkVTVCA9ICIke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnRhcmdldC5tYW5pZmVzdCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYXRpb24gaXMgZGVyaXZlZCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES19ERVBMT1knPjxmaWxlbmFtZT5TREtfREVQTE9ZPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVE9PTENIQUlOX09VVFBVVE5BTUUnPjxmaWxlbmFtZT5UT09MQ0hBSU5fT1VUUFVUTkFNRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLX1ZFTkRPUic+PGdsb3NzdGVybT5TREtfVkVORE9SPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtfVkVORE9SW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBTREsgdmVuZG9yLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgU0RLIHZlbmRvci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtfVkVSU0lPTic+PGdsb3NzdGVybT5TREtfVkVSU0lPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0RLX1ZFUlNJT05bZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHZlcnNpb24gZm9yIHRoZSBTREsuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSB2ZXJzaW9uIG9mIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBmaWxlIChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vbWV0YS15b2N0by9jb25mL2Rpc3Ryby9wb2t5LmNvbmY8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcyB0aGUgPGZpbGVuYW1lPlNES19WRVJTSU9OPC9maWxlbmFtZT4gYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTREtfVkVSU0lPTiA6PSAiJHtAJyR7RElTVFJPX1ZFUlNJT059Jy5yZXBsYWNlKCdzbmFwc2hvdC0ke0RBVEV9Jywnc25hcHNob3QnKX0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19WRVJTSU9OJz48ZmlsZW5hbWU+RElTVFJPX1ZFUlNJT048L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1EQVRFJz48ZmlsZW5hbWU+REFURTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLSU1BR0VfRkVBVFVSRVMnPjxnbG9zc3Rlcm0+U0RLSU1BR0VfRkVBVFVSRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES0lNQUdFX0ZFQVRVUkVTW2RvY10gPSAiRXF1aXZhbGVudCB0byBJTUFHRV9GRUFUVVJFUy4gSG93ZXZlciwgdGhpcyB2YXJpYWJsZSBhcHBsaWVzIHRvIHRoZSBTREsgZ2VuZXJhdGVkIGZyb20gYW4gaW1hZ2UgdXNpbmcgdGhlIGNvbW1hbmQgJ2JpdGJha2UgLWMgcG9wdWxhdGVfc2RrIGltYWdlbmFtZScuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRXF1aXZhbGVudCB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZFQVRVUkVTJz5JTUFHRV9GRUFUVVJFUzwvbGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhpcyB2YXJpYWJsZSBhcHBsaWVzIHRvIHRoZSBTREsgZ2VuZXJhdGVkIGZyb20gYW4KKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtYyBwb3B1bGF0ZV9zZGsgPHJlcGxhY2VhYmxlPmltYWdlbmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtNQUNISU5FJz48Z2xvc3N0ZXJtPlNES01BQ0hJTkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES01BQ0hJTkVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGFyY2hpdGVjdHVyZSAoaS5lLiBpNjg2IG9yIHg4Nl82NCkgZm9yIHdoaWNoIHRvIGJ1aWxkIFNESyBhbmQgQURUIGl0ZW1zLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtYWNoaW5lIGZvciB3aGljaCB0aGUgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgVG9vbGtpdAorICAgICAgICAgICAgICAgICAgICAoQURUKSBvciBTREsgaXMgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB0aGUgU0RLIG9yIEFEVCBpcyBidWlsdCBzdWNoIHRoYXQgaXQKKyAgICAgICAgICAgICAgICAgICAgcnVucyBvbiB0aGUgdGFyZ2V0IHlvdSBzcGVjaWZ5IHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TREtNQUNISU5FPC9maWxlbmFtZT4gdmFsdWUuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBwb2ludHMgdG8gYSBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+IGZpbGUgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbWFjaGluZS1zZGsvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSAiaTY4NiIgYW5kICJ4ODZfNjQiIGFzIHBvc3NpYmxlIHZhbHVlcworICAgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgdmFyaWFibGUuIFRoZSB2YXJpYWJsZSBkZWZhdWx0cyB0byAiaTY4NiIKKyAgICAgICAgICAgICAgICAgICAgIGFuZCBpcyBzZXQgaW4gdGhlIGxvY2FsLmNvbmYgZmlsZSBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTREtNQUNISU5FID89ICJpNjg2IgorICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbm5vdCBzZXQgdGhlIDxmaWxlbmFtZT5TREtNQUNISU5FPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB5b3VyIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvLCB0aGUgY29uZmlndXJhdGlvbiB3aWxsIG5vdCB0YWtlIGFmZmVjdC4KKyAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtQQVRIJz48Z2xvc3N0ZXJtPlNES1BBVEg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES1BBVEhbZG9jXSA9ICJEZWZpbmVzIHRoZSBwYXRoIG9mZmVyZWQgdG8gdGhlIHVzZXIgZm9yIGluc3RhbGxhdGlvbiBvZiB0aGUgU0RLIHRoYXQgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgdGhlIHBhdGggb2ZmZXJlZCB0byB0aGUgdXNlciBmb3IgaW5zdGFsbGF0aW9uCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBTREsgdGhhdCBpcyBnZW5lcmF0ZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoZSBwYXRoIGFwcGVhcnMgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gZm9yIGluc3RhbGxpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIFNESyB3aGVuIHlvdSBydW4gdGhlIFNESydzIGluc3RhbGxhdGlvbiBzY3JpcHQuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIG9mZmVyZWQgcGF0aCB3aGVuIHlvdSBydW4gdGhlCisgICAgICAgICAgICAgICAgICAgIHNjcmlwdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtUQVJHRVRTWVNST09UJz48Z2xvc3N0ZXJtPlNES1RBUkdFVFNZU1JPT1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES1RBUkdFVFNZU1JPT1RbZG9jXSA9ICJGdWxsIHBhdGggdG8gdGhlIHN5c3Jvb3QgdXNlZCBmb3IgY3Jvc3MtY29tcGlsYXRpb24gd2l0aGluIGFuIFNESyBhcyBpdCB3aWxsIGJlIHdoZW4gaW5zdGFsbGVkIGludG8gdGhlIGRlZmF1bHQgU0RLUEFUSC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZnVsbCBwYXRoIHRvIHRoZSBzeXNyb290IHVzZWQgZm9yIGNyb3NzLWNvbXBpbGF0aW9uCisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBhbiBTREsgYXMgaXQgd2lsbCBiZSB3aGVuIGluc3RhbGxlZCBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtQQVRIJz48ZmlsZW5hbWU+U0RLUEFUSDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TRUNUSU9OJz48Z2xvc3N0ZXJtPlNFQ1RJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNFQ1RJT05bZG9jXSA9ICJUaGUgc2VjdGlvbiBpbiB3aGljaCBwYWNrYWdlcyBzaG91bGQgYmUgY2F0ZWdvcml6ZWQuIFBhY2thZ2UgbWFuYWdlbWVudCB1dGlsaXRpZXMgY2FuIG1ha2UgdXNlIG9mIHRoaXMgdmFyaWFibGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNlY3Rpb24gaW4gd2hpY2ggcGFja2FnZXMgc2hvdWxkIGJlIGNhdGVnb3JpemVkLgorICAgICAgICAgICAgICAgICAgICBQYWNrYWdlIG1hbmFnZW1lbnQgdXRpbGl0aWVzIGNhbiBtYWtlIHVzZSBvZiB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNFTEVDVEVEX09QVElNSVpBVElPTic+PGdsb3NzdGVybT5TRUxFQ1RFRF9PUFRJTUlaQVRJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNFTEVDVEVEX09QVElNSVpBVElPTltkb2NdID0gIlRoZSB2YXJpYWJsZSB0YWtlcyB0aGUgdmFsdWUgb2YgRlVMTF9PUFRJTUlaQVRJT04gdW5sZXNzIERFQlVHX0JVSUxEID0gJzEnLiBJbiB0aGlzIGNhc2UsIHRoZSB2YWx1ZSBvZiBERUJVR19PUFRJTUlaQVRJT04gaXMgdXNlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG9wdGltaXphdGlvbiBmbGFncyBwYXNzZWQgdG8gdGhlIEMgY29tcGlsZXIKKyAgICAgICAgICAgICAgICAgICAgd2hlbiBidWlsZGluZyBmb3IgdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZsYWdzIGFyZSBwYXNzZWQgdGhyb3VnaCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9DRkxBR1MnPjxmaWxlbmFtZT5UQVJHRVRfQ0ZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlNFTEVDVEVEX09QVElNSVpBVElPTjwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIHRha2VzIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUZVTExfT1BUSU1JWkFUSU9OJz5GVUxMX09QVElNSVpBVElPTjwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB1bmxlc3MgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ERUJVR19CVUlMRCc+REVCVUdfQlVJTEQ8L2xpbms+PC9maWxlbmFtZT4gPSAiMSIuCisgICAgICAgICAgICAgICAgICAgIElmIHRoYXQgaXMgdGhlIGNhc2UsIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURFQlVHX09QVElNSVpBVElPTic+REVCVUdfT1BUSU1JWkFUSU9OPC9saW5rPjwvZmlsZW5hbWU+IGlzIHVzZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0VSSUFMX0NPTlNPTEUnPjxnbG9zc3Rlcm0+U0VSSUFMX0NPTlNPTEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNFUklBTF9DT05TT0xFW2RvY10gPSAiVGhlIHNwZWVkIGFuZCBkZXZpY2UgZm9yIHRoZSBzZXJpYWwgcG9ydCB1c2VkIHRvIGF0dGFjaCB0aGUgc2VyaWFsIGNvbnNvbGUuIFRoaXMgdmFyaWFibGUgaXMgZ2l2ZW4gdG8gdGhlIGtlcm5lbCBhcyB0aGUgJ2NvbnNvbGUnIHBhcmFtZXRlci4gQWZ0ZXIgYm9vdGluZyBvY2N1cnMsIGdldHR5IGlzIHN0YXJ0ZWQgb24gdGhhdCBwb3J0IHNvIHJlbW90ZSBsb2dpbiBpcyBwb3NzaWJsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIGEgc2VyaWFsIGNvbnNvbGUgKFRUWSkgdG8gZW5hYmxlIHVzaW5nIGdldHR5LgorICAgICAgICAgICAgICAgICAgICBQcm92aWRlIGEgdmFsdWUgdGhhdCBzcGVjaWZpZXMgdGhlIGJhdWQgcmF0ZSBmb2xsb3dlZCBieQorICAgICAgICAgICAgICAgICAgICB0aGUgVFRZIGRldmljZSBuYW1lIHNlcGFyYXRlZCBieSBhIHNwYWNlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2Fubm90IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSBUVFkgZGV2aWNlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNFUklBTF9DT05TT0xFID0gIjExNTIwMCB0dHlTMCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+U0VSSUFMX0NPTlNPTEU8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgaXMgZGVwcmVjYXRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0VSSUFMX0NPTlNPTEVTJz48ZmlsZW5hbWU+U0VSSUFMX0NPTlNPTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNFUklBTF9DT05TT0xFUyc+PGdsb3NzdGVybT5TRVJJQUxfQ09OU09MRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNFUklBTF9DT05TT0xFU1tkb2NdID0gIkRlZmluZXMgdGhlIHNlcmlhbCBjb25zb2xlcyAoVFRZcykgdG8gZW5hYmxlIHVzaW5nIGdldHR5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgdGhlIHNlcmlhbCBjb25zb2xlcyAoVFRZcykgdG8gZW5hYmxlIHVzaW5nIGdldHR5LgorICAgICAgICAgICAgICAgICAgICBQcm92aWRlIGEgdmFsdWUgdGhhdCBzcGVjaWZpZXMgdGhlIGJhdWQgcmF0ZSBmb2xsb3dlZCBieQorICAgICAgICAgICAgICAgICAgICB0aGUgVFRZIGRldmljZSBuYW1lIHNlcGFyYXRlZCBieSBhIHNlbWljb2xvbi4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHNwYWNlcyB0byBzZXBhcmF0ZSBtdWx0aXBsZSBkZXZpY2VzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNFUklBTF9DT05TT0xFUyA9ICIxMTUyMDA7dHR5UzAgMTE1MjAwO3R0eVMxIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0VSSUFMX0NPTlNPTEVTX0NIRUNLJz48Z2xvc3N0ZXJtPlNFUklBTF9DT05TT0xFU19DSEVDSzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0VSSUFMX0NPTlNPTEVTX0NIRUNLW2RvY10gPSAiU2ltaWxhciB0byBTRVJJQUxfQ09OU09MRVMgZXhjZXB0IHRoZSBkZXZpY2UgaXMgY2hlY2tlZCBmb3IgZXhpc3RlbmNlIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGVuYWJsZSBpdC4gU3VwcG9ydGVkIG9ubHkgYnkgU3lzVmluaXQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU2ltaWxhciB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0VSSUFMX0NPTlNPTEVTJz48ZmlsZW5hbWU+U0VSSUFMX0NPTlNPTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCB0aGUgZGV2aWNlIGlzIGNoZWNrZWQgZm9yIGV4aXN0ZW5jZSBiZWZvcmUgYXR0ZW1wdGluZworICAgICAgICAgICAgICAgICAgICB0byBlbmFibGUgaXQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIHdpdGggU3lzVmluaXQKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gbm90IHdpdGggc3lzdGVtZCkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0lHR0VOX0VYQ0xVREVfU0FGRV9SRUNJUEVfREVQUyc+PGdsb3NzdGVybT5TSUdHRU5fRVhDTFVERV9TQUZFX1JFQ0lQRV9ERVBTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTSUdHRU5fRVhDTFVERV9TQUZFX1JFQ0lQRV9ERVBTW2RvY10gPSAiQSBsaXN0IG9mIHJlY2lwZSBkZXBlbmRlbmNpZXMgdGhhdCBzaG91bGQgbm90IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHNpZ25hdHVyZXMgb2YgdGFza3MgZnJvbSBvbmUgcmVjaXBlIHdoZW4gdGhleSBkZXBlbmQgb24gdGFza3MgZnJvbSBhbm90aGVyIHJlY2lwZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgcmVjaXBlIGRlcGVuZGVuY2llcyB0aGF0IHNob3VsZCBub3QgYmUgdXNlZCB0bworICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmUgc2lnbmF0dXJlcyBvZiB0YXNrcyBmcm9tIG9uZSByZWNpcGUgd2hlbiB0aGV5CisgICAgICAgICAgICAgICAgICAgIGRlcGVuZCBvbiB0YXNrcyBmcm9tIGFub3RoZXIgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgIFNJR0dFTl9FWENMVURFX1NBRkVfUkVDSVBFX0RFUFMgKz0gImludG9uZS0+bXBsYXllcjIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCA8ZmlsZW5hbWU+aW50b25lPC9maWxlbmFtZT4gZGVwZW5kcyBvbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bXBsYXllcjI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVXNlIG9mIHRoaXMgdmFyaWFibGUgaXMgb25lIG1lY2hhbmlzbSB0byByZW1vdmUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgYWZmZWN0IHRhc2sgc2lnbmF0dXJlcyBhbmQgdGh1cyBmb3JjZSByZWJ1aWxkcyB3aGVuIGEKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5DYXV0aW9uPC90aXRsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhZGQgYW4gaW5hcHByb3ByaWF0ZSBkZXBlbmRlbmN5IGZvciBhIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpb25zaGlwLCB0aGUgc29mdHdhcmUgbWlnaHQgYnJlYWsgZHVyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lIGlmIHRoZSBpbnRlcmZhY2Ugb2YgdGhlIHNlY29uZCByZWNpcGUgd2FzCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIGFmdGVyIHRoZSBmaXJzdCByZWNpcGUgaGFkIGJlZW4gYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TSUdHRU5fRVhDTFVERVJFQ0lQRVNfQUJJU0FGRSc+PGdsb3NzdGVybT5TSUdHRU5fRVhDTFVERVJFQ0lQRVNfQUJJU0FGRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0lHR0VOX0VYQ0xVREVSRUNJUEVTX0FCSVNBRkVbZG9jXSA9ICJBIGxpc3Qgb2YgcmVjaXBlcyB0aGF0IGFyZSBjb21wbGV0ZWx5IHN0YWJsZSBhbmQgd2lsbCBuZXZlciBjaGFuZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIHJlY2lwZXMgdGhhdCBhcmUgY29tcGxldGVseSBzdGFibGUgYW5kIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgbmV2ZXIgY2hhbmdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgQUJJIGZvciB0aGUgcmVjaXBlcyBpbiB0aGUgbGlzdCBhcmUgcHJlc2VudGVkIGJ5CisgICAgICAgICAgICAgICAgICAgIG91dHB1dCBmcm9tIHRoZSB0YXNrcyBydW4gdG8gYnVpbGQgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgVXNlIG9mIHRoaXMgdmFyaWFibGUgaXMgb25lIHdheSB0byByZW1vdmUgZGVwZW5kZW5jaWVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgb25lIHJlY2lwZSBvbiBhbm90aGVyIHRoYXQgYWZmZWN0IHRhc2sgc2lnbmF0dXJlcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgdGh1cyBmb3JjZSByZWJ1aWxkcyB3aGVuIHRoZSByZWNpcGUgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+PHRpdGxlPkNhdXRpb248L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFkZCBhbiBpbmFwcHJvcHJpYXRlIHZhcmlhYmxlIHRvIHRoaXMgbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzb2Z0d2FyZSBtaWdodCBicmVhayBhdCBydW50aW1lIGlmIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIG9mIHRoZSByZWNpcGUgd2FzIGNoYW5nZWQgYWZ0ZXIgdGhlIG90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICBoYWQgYmVlbiBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNJVEVJTkZPX0JJVFMnPjxnbG9zc3Rlcm0+U0lURUlORk9fQklUUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0lURUlORk9fQklUU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGJpdHMgZm9yIHRoZSB0YXJnZXQgc3lzdGVtIENQVS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBiaXRzIGZvciB0aGUgdGFyZ2V0IHN5c3RlbSBDUFUuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBzaG91bGQgYmUgZWl0aGVyICIzMiIgb3IgIjY0Ii4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TSVRFSU5GT19FTkRJQU5ORVNTJz48Z2xvc3N0ZXJtPlNJVEVJTkZPX0VORElBTk5FU1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNJVEVJTkZPX0VORElBTk5FU1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGVuZGlhbiBieXRlIG9yZGVyIG9mIHRoZSB0YXJnZXQgc3lzdGVtLiBUaGUgdmFsdWUgc2hvdWxkIGJlIGVpdGhlciAnbGUnIGZvciAnbGl0dGxlLWVuZGlhbicgb3IgJ2JlJyBmb3IgJ2JpZy1lbmRpYW4nLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZW5kaWFuIGJ5dGUgb3JkZXIgb2YgdGhlIHRhcmdldCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBzaG91bGQgYmUgZWl0aGVyICJsZSIgZm9yIGxpdHRsZS1lbmRpYW4gb3IgImJlIiBmb3IgYmlnLWVuZGlhbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TT0NfRkFNSUxZJz48Z2xvc3N0ZXJtPlNPQ19GQU1JTFk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNPQ19GQU1JTFlbZG9jXSA9ICJHcm91cHMgdG9nZXRoZXIgbWFjaGluZXMgYmFzZWQgdXBvbiB0aGUgc2FtZSBmYW1pbHkgb2YgU09DIChTeXN0ZW0gT24gQ2hpcCkuIFlvdSB0eXBpY2FsbHkgc2V0IHRoaXMgdmFyaWFibGUgaW4gYSBjb21tb24gLmluYyBmaWxlIHRoYXQgeW91IGluY2x1ZGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgb2YgYWxsIHRoZSBtYWNoaW5lcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBHcm91cHMgdG9nZXRoZXIgbWFjaGluZXMgYmFzZWQgdXBvbiB0aGUgc2FtZSBmYW1pbHkKKyAgICAgICAgICAgICAgICAgICAgb2YgU09DIChTeXN0ZW0gT24gQ2hpcCkuCisgICAgICAgICAgICAgICAgICAgIFlvdSB0eXBpY2FsbHkgc2V0IHRoaXMgdmFyaWFibGUgaW4gYSBjb21tb24KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5pbmM8L2ZpbGVuYW1lPiBmaWxlIHRoYXQgeW91IGluY2x1ZGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgb2YgYWxsIHRoZSBtYWNoaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBpbmNsdWRlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9tYWNoaW5lL2luY2x1ZGUvc29jLWZhbWlseS5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgdmFyaWFibGUgdG8gYXBwZWFyIGluCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORU9WRVJSSURFUyc+PGZpbGVuYW1lPk1BQ0hJTkVPVkVSUklERVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TT0xJQlMnPjxnbG9zc3Rlcm0+U09MSUJTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTT0xJQlNbZG9jXSA9ICJEZWZpbmVzIHRoZSBzdWZmaXggZm9yIHNoYXJlZCBsaWJyYXJpZXMgdXNlZCBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgdGhlIHN1ZmZpeCBmb3Igc2hhcmVkIGxpYnJhcmllcyB1c2VkIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgcGxhdGZvcm0uCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgc3VmZml4IGlzICIuc28uKiIgZm9yIGFsbCBMaW51eC1iYXNlZAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW1zIGFuZCBpcyBkZWZpbmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IHdpbGwgc2VlIHRoaXMgdmFyaWFibGUgcmVmZXJlbmNlZCBpbiB0aGUgZGVmYXVsdCB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgb2YgPGZpbGVuYW1lPkZJTEVTXyR7UE59PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU09MSUJTREVWJz48Z2xvc3N0ZXJtPlNPTElCU0RFVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU09MSUJTREVWW2RvY10gPSAiRGVmaW5lcyB0aGUgc3VmZml4IGZvciB0aGUgZGV2ZWxvcG1lbnQgc3ltYm9saWMgbGluayAoc3ltbGluaykgZm9yIHNoYXJlZCBsaWJyYXJpZXMgb24gdGhlIHRhcmdldCBwbGF0Zm9ybS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBzdWZmaXggZm9yIHRoZSBkZXZlbG9wbWVudCBzeW1ib2xpYyBsaW5rCisgICAgICAgICAgICAgICAgICAgIChzeW1saW5rKSBmb3Igc2hhcmVkIGxpYnJhcmllcyBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIHN1ZmZpeCBpcyAiLnNvIiBmb3IgTGludXgtYmFzZWQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtcyBhbmQgaXMgZGVmaW5lZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSB3aWxsIHNlZSB0aGlzIHZhcmlhYmxlIHJlZmVyZW5jZWQgaW4gdGhlIGRlZmF1bHQgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIG9mIDxmaWxlbmFtZT5GSUxFU18ke1BOfS1kZXY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TT1VSQ0VfTUlSUk9SX0ZFVENIJz48Z2xvc3N0ZXJtPlNPVVJDRV9NSVJST1JfRkVUQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNPVVJDRV9NSVJST1JfRkVUQ0hbZG9jXSA9ICJTZXQgYXMgcGFydCBvZiBhIHNvdXJjZSBtaXJyb3IgZ2VuZXJhdGlvbiBzY3JpcHQgdG8gc2tpcCBDT01QQVRJQkxFX01BQ0hJTkUgYW5kIENPTVBBVElCTEVfSE9TVCBjaGVja3MuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgYXJlIGZldGNoaW5nIGZpbGVzIHRvIGNyZWF0ZSBhIG1pcnJvciBvZiBzb3VyY2VzCisgICAgICAgICAgICAgICAgICAgIChpLmUuIGNyZWF0aW5nIGEgc291cmNlIG1pcnJvciksIHNldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNPVVJDRV9NSVJST1JfRkVUQ0g8L2ZpbGVuYW1lPiB0byAiMSIgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZSBlbnN1cmVzCisgICAgICAgICAgICAgICAgICAgIHRoZSBzb3VyY2UgZm9yIGFsbCByZWNpcGVzIGFyZSBmZXRjaGVkIHJlZ2FyZGxlc3Mgb2YKKyAgICAgICAgICAgICAgICAgICAgd2hldGhlciBvciBub3QgYSByZWNpcGUgaXMgY29tcGF0aWJsZSB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBBIHJlY2lwZSBpcyBjb25zaWRlcmVkIGluY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlZCBtYWNoaW5lIHdoZW4gZWl0aGVyIG9yIGJvdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DT01QQVRJQkxFX01BQ0hJTkUnPjxmaWxlbmFtZT5DT01QQVRJQkxFX01BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DT01QQVRJQkxFX0hPU1QnPjxmaWxlbmFtZT5DT01QQVRJQkxFX0hPU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIHNwZWNpZnkgY29tcGF0aWJpbGl0eSB3aXRoIGEgbWFjaGluZSBvdGhlcgorICAgICAgICAgICAgICAgICAgICB0aGFuIHRoYXQgb2YgdGhlIGN1cnJlbnQgbWFjaGluZSBvciBob3N0LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+V2FybmluZzwvdGl0bGU+CisgICAgICAgICAgICAgICAgICAgICAgICBEbyBub3Qgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNPVVJDRV9NSVJST1JfRkVUQ0g8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgdW5sZXNzIHlvdSBhcmUgY3JlYXRpbmcgYSBzb3VyY2UgbWlycm9yLgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIGRvIG5vdCBzZXQgdGhlIHZhcmlhYmxlIGR1cmluZyBhCisgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWwgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TT1VSQ0VfTUlSUk9SX1VSTCc+PGdsb3NzdGVybT5TT1VSQ0VfTUlSUk9SX1VSTDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU09VUkNFX01JUlJPUl9VUkxbZG9jXSA9ICJVUkwgdG8gc291cmNlIG1pcnJvciB0aGF0IHdpbGwgYmUgdXNlZCBiZWZvcmUgZmV0Y2hpbmcgZnJvbSBvcmlnaW5hbCBTUkNfVVJJLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgeW91ciBvd24KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSRU1JUlJPUlMnPjxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGZyb20gd2hpY2ggdG8gZmlyc3QgZmV0Y2ggc291cmNlIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGZldGNoCisgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIHVwc3RyZWFtIHNwZWNpZmllZCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIHVzZSB0aGlzIHZhcmlhYmxlLCB5b3UgbXVzdCBnbG9iYWxseSBpbmhlcml0IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1vd24tbWlycm9ycyc+PGZpbGVuYW1lPm93bi1taXJyb3JzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGFuZCB0aGVuIHByb3ZpZGUgdGhlIFVSTCB0byB5b3VyIG1pcnJvcnMuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGdlbmVyYWwgc3ludGF4OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSEVSSVQgKz0gIm93bi1taXJyb3JzIgorICAgICBTT1VSQ0VfTUlSUk9SX1VSTCA9ICJodHRwOi8vPHJlcGxhY2VhYmxlPmV4YW1wbGU8L3JlcGxhY2VhYmxlPi5jb20vPHJlcGxhY2VhYmxlPm15X3NvdXJjZV9taXJyb3I8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSBvbmx5IGEgc2luZ2xlIFVSTCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNPVVJDRV9NSVJST1JfVVJMPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TUERYTElDRU5TRU1BUCc+PGdsb3NzdGVybT5TUERYTElDRU5TRU1BUDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1BEWExJQ0VOU0VNQVBbZG9jXSA9ICJNYXBzIGNvbW1vbmx5IHVzZWQgbGljZW5zZSBuYW1lcyB0byB0aGVpciBTUERYIGNvdW50ZXJwYXJ0cyBmb3VuZCBpbiBtZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy8uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTWFwcyBjb21tb25seSB1c2VkIGxpY2Vuc2UgbmFtZXMgdG8gdGhlaXIgU1BEWCBjb3VudGVycGFydHMKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgaW4gPGZpbGVuYW1lPm1ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzLzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBGb3IgdGhlIGRlZmF1bHQgPGZpbGVuYW1lPlNQRFhMSUNFTlNFTUFQPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbWFwcGluZ3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9saWNlbnNlcy5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0UnPjxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNQRUNJQUxfUEtHU1VGRklYJz48Z2xvc3N0ZXJtPlNQRUNJQUxfUEtHU1VGRklYPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTUEVDSUFMX1BLR1NVRkZJWFtkb2NdID0gIkEgbGlzdCBvZiBwcmVmaXhlcyBmb3IgUE4gdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBjcmVhdGUgdmFyaWFudHMgb2YgcmVjaXBlcyBvciBwYWNrYWdlcy4gVGhlIGxpc3Qgc3BlY2lmaWVzIHRoZSBwcmVmaXhlcyB0byBzdHJpcCBvZmYgZHVyaW5nIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyBzdWNoIGFzIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBCUE4gdmFyaWFibGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIHByZWZpeGVzIGZvciA8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPiB1c2VkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGNyZWF0ZSB2YXJpYW50cyBvZiByZWNpcGVzIG9yIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBUaGUgbGlzdCBzcGVjaWZpZXMgdGhlIHByZWZpeGVzIHRvIHN0cmlwIG9mZiBkdXJpbmcgY2VydGFpbiBjaXJjdW1zdGFuY2VzCisgICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMgdGhlIGdlbmVyYXRpb24gb2YgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1CUE4nPjxmaWxlbmFtZT5CUE48L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1JDX1VSSSc+PGdsb3NzdGVybT5TUkNfVVJJPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTUkNfVVJJW2RvY10gPSAiVGhlIGxpc3Qgb2Ygc291cmNlIGZpbGVzIC0gbG9jYWwgb3IgcmVtb3RlLiBUaGlzIHZhcmlhYmxlIHRlbGxzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdoYXQgYml0cyB0byBwdWxsIGluIGZvciB0aGUgYnVpbGQgYW5kIGhvdyB0byBwdWxsIHRoZW0gaW4uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxpc3Qgb2Ygc291cmNlIGZpbGVzIC0gbG9jYWwgb3IgcmVtb3RlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIHRlbGxzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdoaWNoIGJpdHMKKyAgICAgICAgICAgICAgICAgICAgdG8gcHVsbCBpbiBmb3IgdGhlIGJ1aWxkIGFuZCBob3cgdG8gcHVsbCB0aGVtIGluLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIHJlY2lwZSBvciBhcHBlbmQgZmlsZSBvbmx5IG5lZWRzIHRvCisgICAgICAgICAgICAgICAgICAgIGZldGNoIGEgdGFyYmFsbCBmcm9tIHRoZSBJbnRlcm5ldCwgdGhlIHJlY2lwZSBvcgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQgZmlsZSB1c2VzIGEgc2luZ2xlIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZW50cnkuCisgICAgICAgICAgICAgICAgICAgIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgcmVjaXBlIG9yIGFwcGVuZCBmaWxlIG5lZWRzIHRvCisgICAgICAgICAgICAgICAgICAgIGZldGNoIGEgdGFyYmFsbCwgYXBwbHkgdHdvIHBhdGNoZXMsIGFuZCBpbmNsdWRlIGEgY3VzdG9tCisgICAgICAgICAgICAgICAgICAgIGZpbGUsIHRoZSByZWNpcGUgb3IgYXBwZW5kIGZpbGUgd291bGQgaW5jbHVkZSBmb3VyCisgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlcyBvZiB0aGUgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBleHBsYWlucyB0aGUgYXZhaWxhYmxlIFVSSSBwcm90b2NvbHM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5maWxlOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmV0Y2hlcyBmaWxlcywgd2hpY2ggYXJlIHVzdWFsbHkgZmlsZXMgc2hpcHBlZCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgbG9jYWwgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aCBpcyByZWxhdGl2ZSB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVNQQVRIJz48ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGh1cywgdGhlIGJ1aWxkIHN5c3RlbSBzZWFyY2hlcywgaW4gb3JkZXIsIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIGRpcmVjdG9yaWVzLCB3aGljaCBhcmUgYXNzdW1lZCB0byBiZSBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUgZmlsZSAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+KSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZCBmaWxlICg8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzaWRlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT4ke0JQTn08L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBiYXNlIHJlY2lwZSBuYW1lIHdpdGhvdXQgYW55IHNwZWNpYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeCBvciB2ZXJzaW9uIG51bWJlcnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+JHtCUH08L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezxsaW5rIGxpbmtlbmQ9J3Zhci1CUE4nPkJQTjwvbGluaz59LSR7UFZ9PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYmFzZSByZWNpcGUgbmFtZSBhbmQgdmVyc2lvbiBidXQgd2l0aG91dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55IHNwZWNpYWwgcGFja2FnZSBuYW1lIHN1ZmZpeC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmZpbGVzIC08L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZXMgd2l0aGluIGEgZGlyZWN0b3J5LCB3aGljaCBpcyBuYW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZpbGVzPC9maWxlbmFtZT4gYW5kIGlzIGFsc28KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsb25nc2lkZSB0aGUgcmVjaXBlIG9yIGFwcGVuZCBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRoZSBidWlsZCBzeXN0ZW0gdG8gcGljayB1cCBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgdGhyb3VnaCBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50IGZyb20geW91ciBhcHBlbmQgZmlsZSwgeW91IG5lZWQgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VyZSB0byBleHRlbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBieSBhbHNvIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZyb20gd2l0aGluIHlvdXIgYXBwZW5kIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+YnpyOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbSBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmF6YWFyIHJldmlzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdDovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdpdCByZXZpc2lvbiBjb250cm9sIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5vc2M6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gT1NDIChPcGVuU1VTRSBCdWlsZCBzZXJ2aWNlKSByZXZpc2lvbiBjb250cm9sIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5yZXBvOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgcmVwbyAoR2l0KSByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Y2NyYzovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZldGNoZXMgZmlsZXMgZnJvbSBhIENsZWFyQ2FzZSByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+aHR0cDovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgSW50ZXJuZXQgdXNpbmcgPGZpbGVuYW1lPmh0dHA8L2ZpbGVuYW1lPi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmh0dHBzOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBJbnRlcm5ldCB1c2luZyA8ZmlsZW5hbWU+aHR0cHM8L2ZpbGVuYW1lPi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmZ0cDovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgSW50ZXJuZXQgdXNpbmcgPGZpbGVuYW1lPmZ0cDwvZmlsZW5hbWU+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Y3ZzOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgQ1ZTIHJldmlzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmhnOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgTWVyY3VyaWFsICg8ZmlsZW5hbWU+aGc8L2ZpbGVuYW1lPikgcmV2aXNpb24gY29udHJvbCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cDQ6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBQZXJmb3JjZSAoPGZpbGVuYW1lPnA0PC9maWxlbmFtZT4pIHJldmlzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnNzaDovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHNlY3VyZSBzaGVsbC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnN2bjovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIFN1YnZlcnNpb24gKDxmaWxlbmFtZT5zdm48L2ZpbGVuYW1lPikgcmV2aXNpb24gY29udHJvbCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3RhbmRhcmQgYW5kIHJlY2lwZS1zcGVjaWZpYyBvcHRpb25zIGZvciA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IGV4aXN0LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSBzdGFuZGFyZCBvcHRpb25zOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+YXBwbHk8L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gV2hldGhlciB0byBhcHBseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwYXRjaCBvciBub3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgYWN0aW9uIGlzIHRvIGFwcGx5IHRoZSBwYXRjaC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnN0cmlwbGV2ZWw8L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gV2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcGxldmVsIHRvIHVzZSB3aGVuIGFwcGx5aW5nIHRoZSBwYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBsZXZlbCBpcyAxLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cGF0Y2hkaXI8L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gU3BlY2lmaWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgcGF0Y2ggc2hvdWxkIGJlIGFwcGxpZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUyc+PGZpbGVuYW1lPlM8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgb3B0aW9ucyBzcGVjaWZpYyB0byByZWNpcGVzIGJ1aWxkaW5nIGNvZGUgZnJvbSBhIHJldmlzaW9uIGNvbnRyb2wgc3lzdGVtOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bWluZGF0ZTwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGx5IHRoZSBwYXRjaCBvbmx5IGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ0RBVEUnPjxmaWxlbmFtZT5TUkNEQVRFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDxmaWxlbmFtZT5taW5kYXRlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5tYXhkYXRlPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbHkgdGhlIHBhdGNoIG9ubHkgaWYgPGZpbGVuYW1lPlNSQ0RBVEU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBsYXRlciB0aGFuIDxmaWxlbmFtZT5taW5kYXRlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5taW5yZXY8L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBseSB0aGUgcGF0Y2ggb25seSBpZiA8ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gPGZpbGVuYW1lPm1pbnJldjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bWF4cmV2PC9maWxlbmFtZT4gLTwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbHkgdGhlIHBhdGNoIG9ubHkgaWYgPGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IGxhdGVyIHRoYW4gPGZpbGVuYW1lPm1heHJldjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cmV2PC9maWxlbmFtZT4gLTwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbHkgdGhlIHBhdGNoIG9ubHkgaWYgPGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZXF1YWwgdG8gPGZpbGVuYW1lPnJldjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bm90cmV2PC9maWxlbmFtZT4gLTwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbHkgdGhlIHBhdGNoIG9ubHkgaWYgPGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IGVxdWFsIHRvIDxmaWxlbmFtZT5yZXY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgYWRkaXRpb25hbCBvcHRpb25zIHdvcnRoIG1lbnRpb25pbmc6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT51bnBhY2s8L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gQ29udHJvbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGV0aGVyIG9yIG5vdCB0byB1bnBhY2sgdGhlIGZpbGUgaWYgaXQgaXMgYW4gYXJjaGl2ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBhY3Rpb24gaXMgdG8gdW5wYWNrIHRoZSBmaWxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c3ViZGlyPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IFBsYWNlcyB0aGUgZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciBleHRyYWN0cyBpdHMgY29udGVudHMpIGludG8gdGhlIHNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yeSBvZiA8bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIGZvciB1bnVzdWFsIHRhcmJhbGxzIG9yIG90aGVyIGFyY2hpdmVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBub3QgaGF2ZSB0aGVpciBmaWxlcyBhbHJlYWR5IGluIGEgc3ViZGlyZWN0b3J5IHdpdGhpbiB0aGUgYXJjaGl2ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm5hbWU8L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gU3BlY2lmaWVzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIHRvIGJlIHVzZWQgZm9yIGFzc29jaWF0aW9uIHdpdGggPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBjaGVja3N1bXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgZmlsZSBzcGVjaWZpZWQgaW4gPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmRvd25sb2FkZmlsZW5hbWU8L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gU3BlY2lmaWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpbGVuYW1lIHVzZWQgd2hlbiBzdG9yaW5nIHRoZSBkb3dubG9hZGVkIGZpbGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNSQ19VUklfT1ZFUlJJREVTX1BBQ0tBR0VfQVJDSCc+PGdsb3NzdGVybT5TUkNfVVJJX09WRVJSSURFU19QQUNLQUdFX0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNSQ19VUklfT1ZFUlJJREVTX1BBQ0tBR0VfQVJDSFtkb2NdID0gIkJ5IGRlZmF1bHQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyB3aGV0aGVyIFNSQ19VUkkgY29udGFpbnMgZmlsZXMgdGhhdCBhcmUgbWFjaGluZS1zcGVjaWZpYy4gSWYgc28sIHRoZSBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseSBjaGFuZ2VzIFBBQ0tBR0VfQVJDSC4gU2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvICcwJyBkaXNhYmxlcyB0aGlzIGJlaGF2aW9yLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyB3aGV0aGVyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+U1JDX1VSSTwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb250YWlucyBmaWxlcyB0aGF0IGFyZSBtYWNoaW5lLXNwZWNpZmljLgorICAgICAgICAgICAgICAgICAgICBJZiBzbywgdGhlIGJ1aWxkIHN5c3RlbSBhdXRvbWF0aWNhbGx5IGNoYW5nZXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0FSQ0gnPlBBQ0tBR0VfQVJDSDwvbGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvICIwIiBkaXNhYmxlcyB0aGlzIGJlaGF2aW9yLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNSQ0RBVEUnPjxnbG9zc3Rlcm0+U1JDREFURTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1JDREFURVtkb2NdID0gIlRoZSBkYXRlIG9mIHRoZSBzb3VyY2UgY29kZSB1c2VkIHRvIGJ1aWxkIHRoZSBwYWNrYWdlLiBUaGlzIHZhcmlhYmxlIGFwcGxpZXMgb25seSBpZiB0aGUgc291cmNlIHdhcyBmZXRjaGVkIGZyb20gYSBTb3VyY2UgQ29kZSBNYW5hZ2VyIChTQ00pLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkYXRlIG9mIHRoZSBzb3VyY2UgY29kZSB1c2VkIHRvIGJ1aWxkIHRoZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGFwcGxpZXMgb25seSBpZiB0aGUgc291cmNlIHdhcyBmZXRjaGVkIGZyb20gYSBTb3VyY2UgQ29kZSBNYW5hZ2VyIChTQ00pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNSQ1BWJz48Z2xvc3N0ZXJtPlNSQ1BWPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTUkNQVltkb2NdID0gIlJldHVybnMgdGhlIHZlcnNpb24gc3RyaW5nIG9mIHRoZSBjdXJyZW50IHBhY2thZ2UuIFRoaXMgc3RyaW5nIGlzIHVzZWQgdG8gaGVscCBkZWZpbmUgdGhlIHZhbHVlIG9mIFBWLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFJldHVybnMgdGhlIHZlcnNpb24gc3RyaW5nIG9mIHRoZSBjdXJyZW50IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc3RyaW5nIGlzIHVzZWQgdG8gaGVscCBkZWZpbmUgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlNSQ1BWPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgZGVmaW5lZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ1BWID0gIiR7QGJiLmZldGNoMi5nZXRfc3JjcmV2KGQpfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBSZWNpcGVzIHRoYXQgbmVlZCB0byBkZWZpbmUgPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4gZG8gc28KKyAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgaGVscCBvZiB0aGUgPGZpbGVuYW1lPlNSQ1BWPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPm9mb25vPC9maWxlbmFtZT4gcmVjaXBlCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+b2Zvbm9fZ2l0LmJiPC9maWxlbmFtZT4pIGxvY2F0ZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHk8L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgU291cmNlIERpcmVjdG9yeSBkZWZpbmVzIDxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+IGFzCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFYgPSAiMC4xMi1naXQke1NSQ1BWfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNSQ1JFVic+PGdsb3NzdGVybT5TUkNSRVY8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNSQ1JFVltkb2NdID0gIlRoZSByZXZpc2lvbiBvZiB0aGUgc291cmNlIGNvZGUgdXNlZCB0byBidWlsZCB0aGUgcGFja2FnZS4gVGhpcyB2YXJpYWJsZSBhcHBsaWVzIHRvIFN1YnZlcnNpb24sIEdpdCwgTWVyY3VyaWFsIGFuZCBCYXphYXIgb25seS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgcmV2aXNpb24gb2YgdGhlIHNvdXJjZSBjb2RlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgYXBwbGllcyB0byBTdWJ2ZXJzaW9uLCBHaXQsIE1lcmN1cmlhbCBhbmQKKyAgICAgICAgICAgICAgICAgICAgQmF6YWFyIG9ubHkuCisgICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCBpZiB5b3Ugd2FudCB0byBidWlsZCBhIGZpeGVkIHJldmlzaW9uIGFuZCB5b3UKKyAgICAgICAgICAgICAgICAgICAgd2FudCB0byBhdm9pZCBwZXJmb3JtaW5nIGEgcXVlcnkgb24gdGhlIHJlbW90ZSByZXBvc2l0b3J5CisgICAgICAgICAgICAgICAgICAgIGV2ZXJ5IHRpbWUgQml0QmFrZSBwYXJzZXMgeW91ciByZWNpcGUsIHlvdSBzaG91bGQgc3BlY2lmeQorICAgICAgICAgICAgICAgICAgICBhIDxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPiB0aGF0IGlzIGEKKyAgICAgICAgICAgICAgICAgICAgZnVsbCByZXZpc2lvbiBpZGVudGlmaWVyIGFuZCBub3QganVzdCBhIHRhZy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGxpbWl0YXRpb25zIHdoZW4gaW5oZXJpdGluZyB0aGUgbGF0ZXN0CisgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uIG9mIHNvZnR3YXJlIHVzaW5nIDxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQVVUT1JFVic+PGZpbGVuYW1lPkFVVE9SRVY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZGVzY3JpcHRpb24uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1NUQVRFX0RJUic+PGdsb3NzdGVybT5TU1RBVEVfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTU1RBVEVfRElSW2RvY10gPSAiVGhlIGRpcmVjdG9yeSBmb3IgdGhlIHNoYXJlZCBzdGF0ZSBjYWNoZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGZvciB0aGUgc2hhcmVkIHN0YXRlIGNhY2hlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNTVEFURV9NSVJST1JfQUxMT1dfTkVUV09SSyc+PGdsb3NzdGVybT5TU1RBVEVfTUlSUk9SX0FMTE9XX05FVFdPUks8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNTVEFURV9NSVJST1JfQUxMT1dfTkVUV09SS1tkb2NdID0gIklmIHNldCB0byAiMSIsIGFsbG93cyBmZXRjaGVzIGZyb20gbWlycm9ycyB0aGF0IGFyZSBzcGVjaWZpZWQgaW4gU1NUQVRFX01JUlJPUlMgdG8gd29yayBldmVuIHdoZW4gZmV0Y2hpbmcgZnJvbSB0aGUgbmV0d29yayBoYXMgYmVlbiBkaXNhYmxlZCBieSBzZXR0aW5nIEJCX05PX05FVFdPUksgdG8gIjEiLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIElmIHNldCB0byAiMSIsIGFsbG93cyBmZXRjaGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgbWlycm9ycyB0aGF0IGFyZSBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNTVEFURV9NSVJST1JTJz48ZmlsZW5hbWU+U1NUQVRFX01JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdG8gd29yayBldmVuIHdoZW4gZmV0Y2hpbmcgZnJvbSB0aGUgbmV0d29yayBoYXMgYmVlbgorICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZCBieSBzZXR0aW5nIDxmaWxlbmFtZT5CQl9OT19ORVRXT1JLPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdG8gIjEiLgorICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNTVEFURV9NSVJST1JfQUxMT1dfTkVUV09SSzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIHVzZWZ1bCBpZiB5b3UgaGF2ZSBzZXQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNTVEFURV9NSVJST1JTPC9maWxlbmFtZT4gdG8gcG9pbnQgdG8gYW4KKyAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwgc2VydmVyIGZvciB5b3VyIHNoYXJlZCBzdGF0ZSBjYWNoZSwgYnV0CisgICAgICAgICAgICAgICAgICAgIHlvdSB3YW50IHRvIGRpc2FibGUgYW55IG90aGVyIGZldGNoaW5nIGZyb20gdGhlIG5ldHdvcmsuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1NUQVRFX01JUlJPUlMnPjxnbG9zc3Rlcm0+U1NUQVRFX01JUlJPUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNTVEFURV9NSVJST1JTW2RvY10gPSAiQ29uZmlndXJlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBzZWFyY2ggb3RoZXIgbWlycm9yIGxvY2F0aW9ucyBmb3IgcHJlYnVpbHQgY2FjaGUgZGF0YSBvYmplY3RzIGJlZm9yZSBidWlsZGluZyBvdXQgdGhlIGRhdGEuIFlvdSBjYW4gc3BlY2lmeSBhIGZpbGVzeXN0ZW0gZGlyZWN0b3J5IG9yIGEgcmVtb3RlIFVSTCBzdWNoIGFzIEhUVFAgb3IgRlRQLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gc2VhcmNoIG90aGVyCisgICAgICAgICAgICAgICAgICAgIG1pcnJvciBsb2NhdGlvbnMgZm9yIHByZWJ1aWx0IGNhY2hlIGRhdGEgb2JqZWN0cyBiZWZvcmUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmcgb3V0IHRoZSBkYXRhLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIHdvcmtzIGxpa2UgZmV0Y2hlcgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUlSUk9SUyc+PGZpbGVuYW1lPk1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgcG9pbnRzIHRvIHRoZSBjYWNoZSBsb2NhdGlvbnMgdG8gY2hlY2sgZm9yIHRoZSBzaGFyZWQKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0cy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzcGVjaWZ5IGEgZmlsZXN5c3RlbSBkaXJlY3Rvcnkgb3IgYSByZW1vdGUgVVJMIHN1Y2gKKyAgICAgICAgICAgICAgICAgICAgYXMgSFRUUCBvciBGVFAuCisgICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhdGlvbnMgeW91IHNwZWNpZnkgbmVlZCB0byBjb250YWluIHRoZSBzaGFyZWQgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgY2FjaGUgKHNzdGF0ZS1jYWNoZSkgcmVzdWx0cyBmcm9tIHByZXZpb3VzIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNzdGF0ZS1jYWNoZSB5b3UgcG9pbnQgdG8gY2FuIGFsc28gYmUgZnJvbSBidWlsZHMgb24KKyAgICAgICAgICAgICAgICAgICAgb3RoZXIgbWFjaGluZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIGEgbWlycm9yIHVzZXMgdGhlIHNhbWUgc3RydWN0dXJlIGFzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TU1RBVEVfRElSJz48ZmlsZW5hbWU+U1NUQVRFX0RJUjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gYWRkCisgICAgICAgICAgICAgICAgICAgICJQQVRIIiBhdCB0aGUgZW5kIGFzIHNob3duIGluIHRoZSBleGFtcGxlcyBiZWxvdy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBzdWJzdGl0dXRlcyB0aGUgY29ycmVjdCBwYXRoIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTU1RBVEVfTUlSUk9SUyA/PSAiXAorICAgICBmaWxlOi8vLiogaHR0cDovLzxyZXBsYWNlYWJsZT5zb21lc2VydmVyPC9yZXBsYWNlYWJsZT4udGxkL3NoYXJlL3NzdGF0ZS9QQVRIIFxuIFwKKyAgICAgZmlsZTovLy4qIGZpbGU6Ly8vPHJlcGxhY2VhYmxlPnNvbWUtbG9jYWwtZGlyPC9yZXBsYWNlYWJsZT4vc3N0YXRlL1BBVEgiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0JBU0VfTElCRElSX05BVElWRSc+PGdsb3NzdGVybT5TVEFHSU5HX0JBU0VfTElCRElSX05BVElWRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RBR0lOR19CQVNFX0xJQkRJUl9OQVRJVkVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIC9saWIgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIGJ1aWxkIGhvc3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSA8ZmlsZW5hbWU+L2xpYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yeSBvZiB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfQkFTRUxJQkRJUic+PGdsb3NzdGVybT5TVEFHSU5HX0JBU0VMSUJESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfQkFTRUxJQkRJUltkb2NdID0gIlNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgL2xpYiBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgdGFyZ2V0IGZvciB3aGljaCB0aGUgY3VycmVudCByZWNpcGUgaXMgYmVpbmcgYnVpbHQgKFNUQUdJTkdfRElSX0hPU1QpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgPGZpbGVuYW1lPi9saWI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIGZvciB3aGljaCB0aGUgY3VycmVudCByZWNpcGUgaXMgYmVpbmcgYnVpbHQKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFHSU5HX0RJUl9IT1NUJz48ZmlsZW5hbWU+U1RBR0lOR19ESVJfSE9TVDwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBR0lOR19CSU5ESVInPjxnbG9zc3Rlcm0+U1RBR0lOR19CSU5ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfQklORElSW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSAvdXNyL2JpbiBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgdGFyZ2V0IGZvciB3aGljaCB0aGUgY3VycmVudCByZWNpcGUgaXMgYmVpbmcgYnVpbHQgKFNUQUdJTkdfRElSX0hPU1QpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvYmluPC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldCBmb3Igd2hpY2ggdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItU1RBR0lOR19ESVJfSE9TVCc+PGZpbGVuYW1lPlNUQUdJTkdfRElSX0hPU1Q8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfQklORElSX0NST1NTJz48Z2xvc3N0ZXJtPlNUQUdJTkdfQklORElSX0NST1NTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0JJTkRJUl9DUk9TU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYmluYXJ5IGNvbmZpZ3VyYXRpb24gc2NyaXB0cy4gVGhlc2Ugc2NyaXB0cyBwcm92aWRlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIG90aGVyIHNvZnR3YXJlIHRoYXQgd2FudHMgdG8gbWFrZSB1c2Ugb2YgbGlicmFyaWVzIG9yIGluY2x1ZGUgZmlsZXMgcHJvdmlkZWQgYnkgdGhlIHNvZnR3YXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2NyaXB0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYmluYXJ5CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gc2NyaXB0cy4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2Ugc2NyaXB0cyBwcm92aWRlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yCisgICAgICAgICAgICAgICAgICAgIG90aGVyIHNvZnR3YXJlIHRoYXQgd2FudHMgdG8gbWFrZSB1c2Ugb2YgbGlicmFyaWVzIG9yCisgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgZmlsZXMgcHJvdmlkZWQgYnkgdGhlIHNvZnR3YXJlIGFzc29jaWF0ZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgc2NyaXB0LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc3R5bGUgb2YgYnVpbGQgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBsYXJnZWx5CisgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlZCBieSA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBpZiA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBpcyBzdXBwb3J0ZWQgYnkgdGhlIGxpYnJhcnkgdG8gd2hpY2ggeW91IGFyZSBsaW5raW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgaXQgaXMgcmVjb21tZW5kZWQgeW91IHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZy1jb25maWc8L2ZpbGVuYW1lPiBpbnN0ZWFkIG9mIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24gc2NyaXB0LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBR0lOR19CSU5ESVJfTkFUSVZFJz48Z2xvc3N0ZXJtPlNUQUdJTkdfQklORElSX05BVElWRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RBR0lOR19CSU5ESVJfTkFUSVZFW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSAvdXNyL2JpbiBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgYnVpbGQgaG9zdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2JpbjwvZmlsZW5hbWU+IHN1YmRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfREFUQURJUic+PGdsb3NzdGVybT5TVEFHSU5HX0RBVEFESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfREFUQURJUltkb2NdID0gIlNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgL3Vzci9zaGFyZSBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgdGFyZ2V0IGZvciB3aGljaCB0aGUgY3VycmVudCByZWNpcGUgaXMgYmVpbmcgYnVpbHQgKFNUQUdJTkdfRElSX0hPU1QpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSA8ZmlsZW5hbWU+L3Vzci9zaGFyZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLVNUQUdJTkdfRElSX0hPU1QnPjxmaWxlbmFtZT5TVEFHSU5HX0RJUl9IT1NUPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0RBVEFESVJfTkFUSVZFJz48Z2xvc3N0ZXJtPlNUQUdJTkdfREFUQURJUl9OQVRJVkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfREFUQURJUl9OQVRJVkVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIC91c3Ivc2hhcmUgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIGJ1aWxkIGhvc3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSA8ZmlsZW5hbWU+L3Vzci9zaGFyZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yeSBvZiB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfRElSJz48Z2xvc3N0ZXJtPlNUQUdJTkdfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0RJUltkb2NdID0gIlNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgdG9wLWxldmVsIHN5c3Jvb3RzIGRpcmVjdG9yeSAoaS5lLiAke1RNUERJUn0vc3lzcm9vdHMpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgdG9wLWxldmVsIHN5c3Jvb3RzIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAoaS5lLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fS9zeXNyb290czwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBSZWNpcGVzIHNob3VsZCBuZXZlciB3cml0ZSBmaWxlcyBkaXJlY3RseSB1bmRlcgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBkaXJlY3RvcnkgYmVjYXVzZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgbWFuYWdlcyB0aGUgZGlyZWN0b3J5IGF1dG9tYXRpY2FsbHkuCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0ZWFkLCBmaWxlcyBzaG91bGQgYmUgaW5zdGFsbGVkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB5b3VyIHJlY2lwZSdzCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sgYW5kIHRoZW4gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2lsbAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhZ2UgYSBzdWJzZXQgb2YgdGhvc2UgZmlsZXMgaW50byB0aGUgc3lzcm9vdC4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfRElSX0hPU1QnPjxnbG9zc3Rlcm0+U1RBR0lOR19ESVJfSE9TVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RBR0lOR19ESVJfSE9TVFtkb2NdID0gIlNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgcHJpbWFyeSBzeXNyb290IGRpcmVjdG9yeSBmb3Igd2hpY2ggdGhlIHRhcmdldCBpcyBiZWluZyBidWlsdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIHByaW1hcnkgc3lzcm9vdCBkaXJlY3RvcnkgZm9yCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRoZSB0YXJnZXQgaXMgYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiByZWNpcGUgYW5kIHRoZSBidWlsZCB0YXJnZXQsIHRoZQorICAgICAgICAgICAgICAgICAgICByZWNpcGUncyB2YWx1ZSBpcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciByZWNpcGVzIGJ1aWxkaW5nIGZvciB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLCB0aGUgdmFsdWUgaXMgIiR7U1RBR0lOR19ESVJ9LyR7TUFDSElORX0iLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rm9yIDxmaWxlbmFtZT5uYXRpdmU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlcyBidWlsZGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBidWlsZCBob3N0LCB0aGUgdmFsdWUgaXMgZW1wdHkgZ2l2ZW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3N1bXB0aW9uIHRoYXQgd2hlbiBidWlsZGluZyBmb3IgdGhlIGJ1aWxkIGhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQgaG9zdCdzIG93biBkaXJlY3RvcmllcyBzaG91bGQgYmUgdXNlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMgdGhhdCBidWlsZCBmb3IgdGhlIFNESywgdGhlIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiJHtTVEFHSU5HX0RJUn0vJHtNVUxUSU1BQ0hfSE9TVF9TWVN9Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0RJUl9OQVRJVkUnPjxnbG9zc3Rlcm0+U1RBR0lOR19ESVJfTkFUSVZFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0RJUl9OQVRJVkVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgYnVpbGQgaG9zdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0RJUl9UQVJHRVQnPjxnbG9zc3Rlcm0+U1RBR0lOR19ESVJfVEFSR0VUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0RJUl9UQVJHRVRbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgdGFyZ2V0IGZvciB3aGljaCB0aGUgY3VycmVudCByZWNpcGUgaXMgYmVpbmcgYnVpbHQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIHRhcmdldCBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBJbiBtb3N0IGNhc2VzLCB0aGlzIHBhdGggaXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFHSU5HX0RJUl9IT1NUJz48ZmlsZW5hbWU+U1RBR0lOR19ESVJfSE9TVDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU29tZSByZWNpcGVzIGJ1aWxkIGJpbmFyaWVzIHRoYXQgY2FuIHJ1biBvbiB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBidXQgdGhvc2UgYmluYXJpZXMgaW4gdHVybiBnZW5lcmF0ZSBjb2RlIGZvcgorICAgICAgICAgICAgICAgICAgICBhbm90aGVyIGRpZmZlcmVudCBzeXN0ZW0gKGUuZy4gY3Jvc3MtY2FuYWRpYW4gcmVjaXBlcykuCisgICAgICAgICAgICAgICAgICAgIFVzaW5nIHRlcm1pbm9sb2d5IGZyb20gR05VLCB0aGUgcHJpbWFyeSBzeXN0ZW0gaXMgcmVmZXJyZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gYXMgdGhlICJIT1NUIiBhbmQgdGhlIHNlY29uZGFyeSwgb3IgZGlmZmVyZW50LCBzeXN0ZW0gaXMKKyAgICAgICAgICAgICAgICAgICAgcmVmZXJyZWQgdG8gYXMgdGhlICJUQVJHRVQiLgorICAgICAgICAgICAgICAgICAgICBUaHVzLCB0aGUgYmluYXJpZXMgcnVuIG9uIHRoZSAiSE9TVCIgc3lzdGVtIGFuZAorICAgICAgICAgICAgICAgICAgICBhbmQgZ2VuZXJhdGUgYmluYXJpZXMgZm9yIHRoZSAiVEFSR0VUIiBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TVEFHSU5HX0RJUl9UQVJHRVQ8L2ZpbGVuYW1lPiBwb2ludHMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIHN5c3Jvb3QgdXNlZCBmb3IgdGhlICJUQVJHRVQiIHN5c3RlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0VUQ0RJUl9OQVRJVkUnPjxnbG9zc3Rlcm0+U1RBR0lOR19FVENESVJfTkFUSVZFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0VUQ0RJUl9OQVRJVkVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIC9ldGMgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIGJ1aWxkIGhvc3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSA8ZmlsZW5hbWU+L2V0YzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yeSBvZiB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfRVhFQ1BSRUZJWERJUic+PGdsb3NzdGVybT5TVEFHSU5HX0VYRUNQUkVGSVhESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfRVhFQ1BSRUZJWERJUltkb2NdID0gIlNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgL3VzciBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgdGFyZ2V0IGZvciB3aGljaCB0aGUgY3VycmVudCByZWNpcGUgaXMgYmVpbmcgYnVpbHQgKFNUQUdJTkdfRElSX0hPU1QpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgPGZpbGVuYW1lPi91c3I8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIGZvciB3aGljaCB0aGUgY3VycmVudCByZWNpcGUgaXMgYmVpbmcgYnVpbHQKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFHSU5HX0RJUl9IT1NUJz48ZmlsZW5hbWU+U1RBR0lOR19ESVJfSE9TVDwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBR0lOR19JTkNESVInPjxnbG9zc3Rlcm0+U1RBR0lOR19JTkNESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfSU5DRElSW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSAvdXNyL2luY2x1ZGUgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldCBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgcmVjaXBlIGJlaW5nIGJ1aWx0IChTVEFHSU5HX0RJUl9IT1NUKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2luY2x1ZGU8L2ZpbGVuYW1lPiBzdWJkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgdGFyZ2V0IGZvciB3aGljaCB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICByZWNpcGUgYmVpbmcgYnVpbHQKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFHSU5HX0RJUl9IT1NUJz48ZmlsZW5hbWU+U1RBR0lOR19ESVJfSE9TVDwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBR0lOR19JTkNESVJfTkFUSVZFJz48Z2xvc3N0ZXJtPlNUQUdJTkdfSU5DRElSX05BVElWRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RBR0lOR19JTkNESVJfTkFUSVZFW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSAvdXNyL2luY2x1ZGUgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIGJ1aWxkIGhvc3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSA8ZmlsZW5hbWU+L3Vzci9pbmNsdWRlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBR0lOR19LRVJORUxfRElSJz48Z2xvc3N0ZXJtPlNUQUdJTkdfS0VSTkVMX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RBR0lOR19LRVJORUxfRElSW2RvY10gPSAiVGhlIGRpcmVjdG9yeSB3aXRoIGtlcm5lbCBoZWFkZXJzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGJ1aWxkIG91dC1vZi10cmVlIG1vZHVsZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSB3aXRoIGtlcm5lbCBoZWFkZXJzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGJ1aWxkIG91dC1vZi10cmVlCisgICAgICAgICAgICAgICAgICAgIG1vZHVsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBR0lOR19MSUJESVInPjxnbG9zc3Rlcm0+U1RBR0lOR19MSUJESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfTElCRElSW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSAvdXNyL2xpYiBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgdGFyZ2V0IGZvciB3aGljaCB0aGUgY3VycmVudCByZWNpcGUgaXMgYmVpbmcgYnVpbHQgKFNUQUdJTkdfRElSX0hPU1QpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgPGZpbGVuYW1lPi91c3IvbGliPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldCBmb3IKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggdGhlIGN1cnJlbnQgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItU1RBR0lOR19ESVJfSE9TVCc+PGZpbGVuYW1lPlNUQUdJTkdfRElSX0hPU1Q8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfTElCRElSX05BVElWRSc+PGdsb3NzdGVybT5TVEFHSU5HX0xJQkRJUl9OQVRJVkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfTElCRElSX05BVElWRVtkb2NdID0gIlNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgL3Vzci9saWIgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIGJ1aWxkIGhvc3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSA8ZmlsZW5hbWU+L3Vzci9saWI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFNUCc+PGdsb3NzdGVybT5TVEFNUDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RBTVBbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGJhc2UgcGF0aCB1c2VkIHRvIGNyZWF0ZSByZWNpcGUgc3RhbXAgZmlsZXMuIFRoZSBwYXRoIHRvIGFuIGFjdHVhbCBzdGFtcCBmaWxlIGlzIGNvbnN0cnVjdGVkIGJ5IGV2YWx1YXRpbmcgdGhpcyBzdHJpbmcgYW5kIHRoZW4gYXBwZW5kaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBiYXNlIHBhdGggdXNlZCB0byBjcmVhdGUgcmVjaXBlIHN0YW1wIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aCB0byBhbiBhY3R1YWwgc3RhbXAgZmlsZSBpcyBjb25zdHJ1Y3RlZCBieSBldmFsdWF0aW5nIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGFuZCB0aGVuIGFwcGVuZGluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICBDdXJyZW50bHksIHRoZSBkZWZhdWx0IGFzc2lnbm1lbnQgZm9yIDxmaWxlbmFtZT5TVEFNUDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFzIHNldCBpbiB0aGUgPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgICAgIGlzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNUQU1QID0gIiR7U1RBTVBTX0RJUn0vJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30vJHtQTn0vJHtFWFRFTkRQRX0ke1BWfS0ke1BSfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgPGxpbmsgbGlua2VuZD0ndmFyLVNUQU1QU19ESVInPjxmaWxlbmFtZT5TVEFNUFNfRElSPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTVVMVElNQUNIX1RBUkdFVF9TWVMnPjxmaWxlbmFtZT5NVUxUSU1BQ0hfVEFSR0VUX1NZUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRFTkRQRSc+PGZpbGVuYW1lPkVYVEVORFBFPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPiwgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L2xpbms+IGZvciByZWxhdGVkIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQU1QU19ESVInPjxnbG9zc3Rlcm0+U1RBTVBTX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RBTVBTX0RJUltkb2NdID0gIlNwZWNpZmllcyB0aGUgYmFzZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcGxhY2VzIHN0YW1wcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGJhc2UgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIHBsYWNlcyBzdGFtcHMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGRpcmVjdG9yeSBpcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtUTVBESVJ9L3N0YW1wczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUUklQJz48Z2xvc3N0ZXJtPlNUUklQPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVFJJUFtkb2NdID0gIk1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biAnc3RyaXAnIChzdHJpcCBzeW1ib2xzKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zdHJpcDwvZmlsZW5hbWU+LCB3aGljaCBpcyB1c2VkIHRvIHN0cmlwCisgICAgICAgICAgICAgICAgICAgIHN5bWJvbHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1VNTUFSWSc+PGdsb3NzdGVybT5TVU1NQVJZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVU1NQVJZW2RvY10gPSAiVGhlIHNob3J0ICg4MCBjaGFyYWN0ZXJzIG9yIGxlc3MpIHN1bW1hcnkgb2YgdGhlIGJpbmFyeSBwYWNrYWdlIGZvciBwYWNrYWdpbmcgc3lzdGVtcyBzdWNoIGFzIG9wa2csIHJwbSBvciBkcGtnLiBCeSBkZWZhdWx0LCBTVU1NQVJZIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBERVNDUklQVElPTiB2YXJpYWJsZSBpZiBERVNDUklQVElPTiBpcyBub3Qgc2V0IGluIHRoZSByZWNpcGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNob3J0ICg3MiBjaGFyYWN0ZXJzIG9yIGxlc3MpIHN1bW1hcnkgb2YgdGhlIGJpbmFyeSBwYWNrYWdlIGZvciBwYWNrYWdpbmcKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtcyBzdWNoIGFzIDxmaWxlbmFtZT5vcGtnPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5ycG08L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZHBrZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCA8ZmlsZW5hbWU+U1VNTUFSWTwvZmlsZW5hbWU+IGlzIHVzZWQgdG8gZGVmaW5lCisgICAgICAgICAgICAgICAgICAgIHRoZSA8bGluayBsaW5rZW5kPSd2YXItREVTQ1JJUFRJT04nPjxmaWxlbmFtZT5ERVNDUklQVElPTjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpZiA8ZmlsZW5hbWU+REVTQ1JJUFRJT048L2ZpbGVuYW1lPiBpcyBub3Qgc2V0CisgICAgICAgICAgICAgICAgICAgIGluIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1ZORElSJz48Z2xvc3N0ZXJtPlNWTkRJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1ZORElSW2RvY10gPSAiVGhlIGRpcmVjdG9yeSB3aGVyZSBTdWJ2ZXJzaW9uIGNoZWNrb3V0cyB3aWxsIGJlIHN0b3JlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIGZpbGVzIGNoZWNrZWQgb3V0IG9mIGEgU3VidmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gYXJlIHN0b3JlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TWVNMSU5VWF9ERUZBVUxUX0NPTlNPTEUnPjxnbG9zc3Rlcm0+U1lTTElOVVhfREVGQVVMVF9DT05TT0xFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTWVNMSU5VWF9ERUZBVUxUX0NPTlNPTEVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGtlcm5lbCBib290IGRlZmF1bHQgY29uc29sZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGtlcm5lbCBib290IGRlZmF1bHQgY29uc29sZS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gdXNlIGEgY29uc29sZSBvdGhlciB0aGFuIHRoZSBkZWZhdWx0LAorICAgICAgICAgICAgICAgICAgICBzZXQgdGhpcyB2YXJpYWJsZSBpbiB5b3VyIHJlY2lwZSBhcyBmb2xsb3dzIHdoZXJlICJYIiBpcworICAgICAgICAgICAgICAgICAgICB0aGUgY29uc29sZSBudW1iZXIgeW91IHdhbnQgdG8gdXNlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNZU0xJTlVYX0RFRkFVTFRfQ09OU09MRSA9ICJjb25zb2xlPXR0eVgiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXN5c2xpbnV4Jz48ZmlsZW5hbWU+c3lzbGludXg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgaW5pdGlhbGx5IHNldHMgdGhpcyB2YXJpYWJsZSB0byBudWxsIGJ1dCB0aGVuIGNoZWNrcworICAgICAgICAgICAgICAgICAgICBmb3IgYSB2YWx1ZSBsYXRlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TWVNMSU5VWF9PUFRTJz48Z2xvc3N0ZXJtPlNZU0xJTlVYX09QVFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNZU0xJTlVYX09QVFNbZG9jXSA9ICJMaXN0cyBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gYWRkIHRvIHRoZSBzeXNsaW51eCBmaWxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIGFkZGl0aW9uYWwgb3B0aW9ucyB0byBhZGQgdG8gdGhlIHN5c2xpbnV4IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBsaXN0IG11bHRpcGxlIG9wdGlvbnMsIHNlcGFyYXRlIHRoZSBvcHRpb25zCisgICAgICAgICAgICAgICAgICAgIHdpdGggYSBzZW1pY29sb24gY2hhcmFjdGVyICg8ZmlsZW5hbWU+OzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXN5c2xpbnV4Jz48ZmlsZW5hbWU+c3lzbGludXg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgdXNlcyB0aGlzIHZhcmlhYmxlIHRvIGNyZWF0ZSBhIHNldCBvZiBvcHRpb25zLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNZU0xJTlVYX1NFUklBTCc+PGdsb3NzdGVybT5TWVNMSU5VWF9TRVJJQUw8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNZU0xJTlVYX1NFUklBTFtkb2NdID0gIlNwZWNpZmllcyB0aGUgYWx0ZXJuYXRlIHNlcmlhbCBwb3J0IG9yIHR1cm5zIGl0IG9mZi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGFsdGVybmF0ZSBzZXJpYWwgcG9ydCBvciB0dXJucyBpdCBvZmYuCisgICAgICAgICAgICAgICAgICAgIFRvIHR1cm4gb2ZmIHNlcmlhbCwgc2V0IHRoaXMgdmFyaWFibGUgdG8gYW4gZW1wdHkgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgIGluIHlvdXIgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUncyBkZWZhdWx0IHZhbHVlIGlzIHNldCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc3lzbGludXgnPjxmaWxlbmFtZT5zeXNsaW51eDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNZU0xJTlVYX1NFUklBTCA/PSAiMCAxMTUyMDAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIGNoZWNrcyBmb3IgYW5kIHVzZXMgdGhlIHZhcmlhYmxlIGFzIG5lZWRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TWVNMSU5VWF9TUExBU0gnPjxnbG9zc3Rlcm0+U1lTTElOVVhfU1BMQVNIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTWVNMSU5VWF9TUExBU0hbZG9jXSA9ICJBbiAuTFNTIGZpbGUgdXNlZCBhcyB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIFZHQSBib290IG1lbnUgd2hlbiB5b3UgYXJlIHVzaW5nIHRoZSBib290IG1lbnUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQW4gPGZpbGVuYW1lPi5MU1M8L2ZpbGVuYW1lPiBmaWxlIHVzZWQgYXMgdGhlIGJhY2tncm91bmQKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBWR0EgYm9vdCBtZW51IHdoZW4geW91IGFyZSB1c2luZyB0aGUgYm9vdCBtZW51LgorICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBzZXQgdGhpcyB2YXJpYWJsZSBpbiB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXN5c2xpbnV4Jz48ZmlsZW5hbWU+c3lzbGludXg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgY2hlY2tzIGZvciB0aGlzIHZhcmlhYmxlIGFuZCBpZiBmb3VuZCwgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaW5zdGFsbHMgdGhlIHNwbGFzaCBzY3JlZW4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1lTTElOVVhfU0VSSUFMX1RUWSc+PGdsb3NzdGVybT5TWVNMSU5VWF9TRVJJQUxfVFRZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTWVNMSU5VWF9TRVJJQUxfVFRZW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBhbHRlcm5hdGUgY29uc29sZT10dHkuLi4ga2VybmVsIGJvb3QgYXJndW1lbnQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBhbHRlcm5hdGUgY29uc29sZT10dHkuLi4ga2VybmVsIGJvb3QgYXJndW1lbnQuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSdzIGRlZmF1bHQgdmFsdWUgaXMgc2V0IGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zeXNsaW51eCc+PGZpbGVuYW1lPnN5c2xpbnV4PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1lTTElOVVhfU0VSSUFMX1RUWSA/PSAiY29uc29sZT10dHlTMCwxMTUyMDAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIGNoZWNrcyBmb3IgYW5kIHVzZXMgdGhlIHZhcmlhYmxlIGFzIG5lZWRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TWVNST09UX1BSRVBST0NFU1NfRlVOQ1MnPjxnbG9zc3Rlcm0+U1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTWVNST09UX1BSRVBST0NFU1NfRlVOQ1NbZG9jXSA9ICJBIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGV4ZWN1dGUgYWZ0ZXIgZmlsZXMgYXJlIHN0YWdlZCBpbnRvIHRoZSBzeXNyb290LiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzdWFsbHkgdXNlZCB0byBhcHBseSBhZGRpdGlvbmFsIHByb2Nlc3Npbmcgb24gdGhlIHN0YWdlZCBmaWxlcywgb3IgdG8gc3RhZ2UgYWRkaXRpb25hbCBmaWxlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGV4ZWN1dGUgYWZ0ZXIgZmlsZXMgYXJlIHN0YWdlZCBpbnRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBzeXNyb290LgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzdWFsbHkgdXNlZCB0byBhcHBseSBhZGRpdGlvbmFsCisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Npbmcgb24gdGhlIHN0YWdlZCBmaWxlcywgb3IgdG8gc3RhZ2UgYWRkaXRpb25hbAorICAgICAgICAgICAgICAgICAgICBmaWxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TWVNURU1EX0FVVE9fRU5BQkxFJz48Z2xvc3N0ZXJtPlNZU1RFTURfQVVUT19FTkFCTEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNZU1RFTURfQVVUT19FTkFCTEVbZG9jXSA9ICJGb3IgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlIHN5c3RlbWQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIHNlcnZpY2UgeW91IGhhdmUgc3BlY2lmaWVkIGluIFNZU1RFTURfU0VSVklDRSBzaG91bGQgYmUgc3RhcnRlZCBhdXRvbWF0aWNhbGx5IG9yIG5vdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXN5c3RlbWQnPjxmaWxlbmFtZT5zeXN0ZW1kPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBzZXJ2aWNlIHlvdSBoYXZlCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1lTVEVNRF9TRVJWSUNFJz48ZmlsZW5hbWU+U1lTVEVNRF9TRVJWSUNFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBzdGFydGVkIGF1dG9tYXRpY2FsbHkgb3Igbm90LgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgc2VydmljZSBpcyBlbmFibGVkIHRvIGF1dG9tYXRpY2FsbHkgc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgYXQgYm9vdCB0aW1lLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBzZXR0aW5nIGlzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zeXN0ZW1kJz48ZmlsZW5hbWU+c3lzdGVtZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNZU1RFTURfQVVUT19FTkFCTEUgPz89ICJlbmFibGUiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkaXNhYmxlIHRoZSBzZXJ2aWNlIGJ5IHNldHRpbmcgdGhlIHZhcmlhYmxlIHRvCisgICAgICAgICAgICAgICAgICAgICJkaXNhYmxlIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TWVNURU1EX1BBQ0tBR0VTJz48Z2xvc3N0ZXJtPlNZU1RFTURfUEFDS0FHRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNZU1RFTURfUEFDS0FHRVNbZG9jXSA9ICJGb3IgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlIHN5c3RlbWQgY2xhc3MsIHRoaXMgdmFyaWFibGUgbG9jYXRlcyB0aGUgc3lzdGVtZCB1bml0IGZpbGVzIHdoZW4gdGhleSBhcmUgbm90IGZvdW5kIGluIHRoZSBtYWluIHJlY2lwZSdzIHBhY2thZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zeXN0ZW1kJz48ZmlsZW5hbWU+c3lzdGVtZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBsb2NhdGVzIHRoZSBzeXN0ZW1kIHVuaXQgZmlsZXMgd2hlbgorICAgICAgICAgICAgICAgICAgICB0aGV5IGFyZSBub3QgZm91bmQgaW4gdGhlIG1haW4gcmVjaXBlJ3MgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TWVNURU1EX1BBQ0tBR0VTPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgc2V0CisgICAgICAgICAgICAgICAgICAgIHN1Y2ggdGhhdCB0aGUgc3lzdGVtZCB1bml0IGZpbGVzIGFyZSBhc3N1bWVkIHRvIHJlc2lkZSBpbgorICAgICAgICAgICAgICAgICAgICB0aGUgcmVjaXBlcyBtYWluIHBhY2thZ2U6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1lTVEVNRF9QQUNLQUdFUyA/PSAiJHtQTn0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlc2UgdW5pdCBmaWxlcyBhcmUgbm90IGluIHRoaXMgcmVjaXBlJ3MgbWFpbgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLCB5b3UgbmVlZCB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNZU1RFTURfUEFDS0FHRVM8L2ZpbGVuYW1lPiB0byBsaXN0IHRoZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIG9yIHBhY2thZ2VzIGluIHdoaWNoIHRoZSBidWlsZCBzeXN0ZW0gY2FuIGZpbmQgdGhlIHN5c3RlbWQKKyAgICAgICAgICAgICAgICAgICAgdW5pdCBmaWxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TWVNURU1EX1NFUlZJQ0UnPjxnbG9zc3Rlcm0+U1lTVEVNRF9TRVJWSUNFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTWVNURU1EX1NFUlZJQ0VbZG9jXSA9ICJGb3IgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlIHN5c3RlbWQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBzeXN0ZW1kIHNlcnZpY2UgbmFtZSBmb3IgYSBwYWNrYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc3lzdGVtZCc+PGZpbGVuYW1lPnN5c3RlbWQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBzeXN0ZW1kIHNlcnZpY2UgbmFtZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgYSBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBzcGVjaWZ5IHRoaXMgZmlsZSBpbiB5b3VyIHJlY2lwZSwgdXNlIGEgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBuYW1lIG92ZXJyaWRlIHRvIGluZGljYXRlIHRoZSBwYWNrYWdlIHRvIHdoaWNoIHRoZSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICBhcHBsaWVzLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgZnJvbSB0aGUgY29ubm1hbiByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gImNvbm5tYW4uc2VydmljZSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNZU1ZJTklUX0VOQUJMRURfR0VUVFlTJz48Z2xvc3N0ZXJtPlNZU1ZJTklUX0VOQUJMRURfR0VUVFlTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTWVNWSU5JVF9FTkFCTEVEX0dFVFRZU1tkb2NdID0gIlNwZWNpZmllcyB3aGljaCB2aXJ0dWFsIHRlcm1pbmFscyBzaG91bGQgYmUgcnVubmluZyBhIGdldHR5LCB0aGUgZGVmYXVsdCBpcyAnMScuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB1c2luZworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNuZXctcmVjaXBlLWVuYWJsaW5nLXN5c3RlbS1zZXJ2aWNlcyc+U3lzVmluaXQ8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHZpcnR1YWwgdGVybWluYWxzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgc2hvdWxkIGJlIHJ1bm5pbmcgYQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dldHR5XyUyOFVuaXglMjknPmdldHR5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgKGFsbG93aW5nIGxvZ2luKSwgYXNzdW1pbmcKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRV9WVCc+PGZpbGVuYW1lPlVTRV9WVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBub3Qgc2V0IHRvICIwIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TWVNWSU5JVF9FTkFCTEVEX0dFVFRZUzwvZmlsZW5hbWU+IGlzICIxIgorICAgICAgICAgICAgICAgICAgICAoaS5lLiBvbmx5IHJ1biBhIGdldHR5IG9uIHRoZSBmaXJzdCB2aXJ0dWFsIHRlcm1pbmFsKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktdCc+PHRpdGxlPlQ8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVCc+PGdsb3NzdGVybT5UPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUW2RvY10gPSAiVGhpcyB2YXJpYWJsZSBwb2ludHMgdG8gYSBkaXJlY3Rvcnkgd2VyZSBCaXRCYWtlIHBsYWNlcyB0ZW1wb3JhcnkgZmlsZXMsIHdoaWNoIGNvbnNpc3QgbW9zdGx5IG9mIHRhc2sgbG9ncyBhbmQgc2NyaXB0cywgd2hlbiBidWlsZGluZyBhIHBhcnRpY3VsYXIgcmVjaXBlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgcG9pbnRzIHRvIGEgZGlyZWN0b3J5IHdlcmUgQml0QmFrZSBwbGFjZXMKKyAgICAgICAgICAgICAgICAgICAgdGVtcG9yYXJ5IGZpbGVzLCB3aGljaCBjb25zaXN0IG1vc3RseSBvZiB0YXNrIGxvZ3MgYW5kCisgICAgICAgICAgICAgICAgICAgIHNjcmlwdHMsIHdoZW4gYnVpbGRpbmcgYSBwYXJ0aWN1bGFyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGlzIHR5cGljYWxseSBzZXQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBUID0gIiR7V09SS0RJUn0vdGVtcCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGxpbmsgbGlua2VuZD0ndmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHRoZSBkaXJlY3RvcnkgaW50byB3aGljaCBCaXRCYWtlIHVucGFja3MgYW5kIGJ1aWxkcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZSBzZXRzIHRoaXMgdmFyaWFibGUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgPGZpbGVuYW1lPlQ8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBub3QgdG8gYmUgY29uZnVzZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggcG9pbnRzIHRvIHRoZSByb290IG9mIHRoZSBkaXJlY3RvcnkgdHJlZSB3aGVyZSBCaXRCYWtlCisgICAgICAgICAgICAgICAgICAgIHBsYWNlcyB0aGUgb3V0cHV0IG9mIGFuIGVudGlyZSBidWlsZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UQVJHRVRfQVJDSCc+PGdsb3NzdGVybT5UQVJHRVRfQVJDSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEFSR0VUX0FSQ0hbZG9jXSA9ICJUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBkZXZpY2UgYmVpbmcgYnVpbHQuIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgYXJjaGl0ZWN0dXJlczogYXJtLCBtaXBzLCBwcGMsIHg4NiwgeDg2LTY0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSB0YXJnZXQgbWFjaGluZSdzIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc3VwcG9ydHMgbWFueQorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmVzLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgbGlzdCBvZiBhcmNoaXRlY3R1cmVzIHN1cHBvcnRlZC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBsaXN0IGlzIGJ5IG5vIG1lYW5zIGNvbXBsZXRlIGFzIHRoZSBhcmNoaXRlY3R1cmUKKyAgICAgICAgICAgICAgICAgICAgaXMgY29uZmlndXJhYmxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGFybQorICAgICBpNTg2CisgICAgIHg4Nl82NAorICAgICBwb3dlcnBjCisgICAgIHBvd2VycGM2NAorICAgICBtaXBzCisgICAgIG1pcHNlbAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIG1hY2hpbmUgYXJjaGl0ZWN0dXJlcywgc2VlCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVFVORV9BUkNIJz48ZmlsZW5hbWU+VFVORV9BUkNIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRBUkdFVF9BU19BUkNIJz48Z2xvc3N0ZXJtPlRBUkdFVF9BU19BUkNIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUQVJHRVRfQVNfQVJDSFtkb2NdID0gIlNwZWNpZmllcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYXNzZW1ibGVyIGZsYWdzIGZvciB0aGUgdGFyZ2V0IHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGFzc2VtYmxlciBmbGFncyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIHRhcmdldCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UQVJHRVRfQVNfQVJDSDwvZmlsZW5hbWU+IGlzIGluaXRpYWxpemVkIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVfQVNBUkdTJz48ZmlsZW5hbWU+VFVORV9BU0FSR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYnkgZGVmYXVsdCBpbiB0aGUgQml0QmFrZSBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4pOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRBUkdFVF9BU19BUkNIID0gIiR7VFVORV9BU0FSR1N9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEFSR0VUX0NDX0FSQ0gnPjxnbG9zc3Rlcm0+VEFSR0VUX0NDX0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRBUkdFVF9DQ19BUkNIW2RvY10gPSAiU3BlY2lmaWVzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBDIGNvbXBpbGVyIGZsYWdzIGZvciB0aGUgdGFyZ2V0IHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEMgY29tcGlsZXIgZmxhZ3MgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEFSR0VUX0NDX0FSQ0g8L2ZpbGVuYW1lPiBpcyBpbml0aWFsaXplZCBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UVU5FX0NDQVJHUyc+PGZpbGVuYW1lPlRVTkVfQ0NBUkdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgYSBjb21tb24gd29ya2Fyb3VuZCB0byBhcHBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MREZMQUdTJz48ZmlsZW5hbWU+TERGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdG8gPGZpbGVuYW1lPlRBUkdFVF9DQ19BUkNIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGluIHJlY2lwZXMgdGhhdCBidWlsZCBzb2Z0d2FyZSBmb3IgdGhlIHRhcmdldCB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICB3b3VsZCBub3Qgb3RoZXJ3aXNlIHJlc3BlY3QgdGhlIGV4cG9ydGVkCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TERGTEFHUzwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEFSR0VUX0NDX0tFUk5FTF9BUkNIJz48Z2xvc3N0ZXJtPlRBUkdFVF9DQ19LRVJORUxfQVJDSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEFSR0VUX0NDX0tFUk5FTF9BUkNIW2RvY10gPSAiVGhpcyBpcyBhIHNwZWNpZmljIGtlcm5lbCBjb21waWxlciBmbGFnIGZvciBhIENQVSBvciBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpIHR1bmUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBhIHNwZWNpZmljIGtlcm5lbCBjb21waWxlciBmbGFnIGZvciBhIENQVSBvcgorICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpIHR1bmUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmbGFnIGlzIHVzZWQgcmFyZWx5IGFuZCBvbmx5IGZvciBjYXNlcyB3aGVyZSBhCisgICAgICAgICAgICAgICAgICAgIHVzZXJzcGFjZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVFVORV9DQ0FSR1MnPjxmaWxlbmFtZT5UVU5FX0NDQVJHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBrZXJuZWwgY29tcGlsYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+VEFSR0VUX0NDX0tFUk5FTF9BUkNIPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgYWxsb3dzIHRoZSBrZXJuZWwgKGFuZCBhc3NvY2lhdGVkIG1vZHVsZXMpIHRvIHVzZSBhCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS10aHVtYi5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIGFuIGV4YW1wbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEFSR0VUX0NGTEFHUyc+PGdsb3NzdGVybT5UQVJHRVRfQ0ZMQUdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUQVJHRVRfQ0ZMQUdTW2RvY10gPSAiRmxhZ3MgcGFzc2VkIHRvIHRoZSBDIGNvbXBpbGVyIGZvciB0aGUgdGFyZ2V0IHN5c3RlbS4gVGhpcyB2YXJpYWJsZSBldmFsdWF0ZXMgdG8gdGhlIHNhbWUgYXMgQ0ZMQUdTLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQyBjb21waWxlciB3aGVuIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nIGluIHRoZSB0YXJnZXQgY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNGTEFHUyc+PGZpbGVuYW1lPkNGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCB0aGUgU0RLJ3MgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IHNldHMKKyAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DRkxBR1MnPjxmaWxlbmFtZT5DRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gdGhlIGVudmlyb25tZW50IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEFSR0VUX0NGTEFHUzwvZmlsZW5hbWU+IHZhbHVlIHNvIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZXMgYnVpbHQgdXNpbmcgdGhlIFNESyBhbHNvIGhhdmUgdGhlIGZsYWdzCisgICAgICAgICAgICAgICAgICAgIGFwcGxpZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEFSR0VUX0NQUEZMQUdTJz48Z2xvc3N0ZXJtPlRBUkdFVF9DUFBGTEFHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEFSR0VUX0NQUEZMQUdTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDIHByZS1wcm9jZXNzb3IgKGkuZS4gdG8gYm90aCB0aGUgQyBhbmQgdGhlIEMrKyBjb21waWxlcnMpIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSB0YXJnZXQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDIHByZS1wcm9jZXNzb3IKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gdG8gYm90aCB0aGUgQyBhbmQgdGhlIEMrKyBjb21waWxlcnMpIHdoZW4gYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gYnVpbGRpbmcgaW4gdGhlIHRhcmdldCBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ1BQRkxBR1MnPjxmaWxlbmFtZT5DUFBGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCB0aGUgU0RLJ3MgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IHNldHMKKyAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DUFBGTEFHUyc+PGZpbGVuYW1lPkNQUEZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHRoZSBlbnZpcm9ubWVudCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRBUkdFVF9DUFBGTEFHUzwvZmlsZW5hbWU+IHZhbHVlIHNvIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZXMgYnVpbHQgdXNpbmcgdGhlIFNESyBhbHNvIGhhdmUgdGhlIGZsYWdzCisgICAgICAgICAgICAgICAgICAgIGFwcGxpZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEFSR0VUX0NYWEZMQUdTJz48Z2xvc3N0ZXJtPlRBUkdFVF9DWFhGTEFHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEFSR0VUX0NYWEZMQUdTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDKysgY29tcGlsZXIgd2hlbiBidWlsZGluZyBmb3IgdGhlIHRhcmdldC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIEMrKyBjb21waWxlciB3aGVuCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5nIGZvciB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nIGluIHRoZSB0YXJnZXQgY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNYWEZMQUdTJz48ZmlsZW5hbWU+Q1hYRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIFNESydzIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBzZXRzCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ1hYRkxBR1MnPjxmaWxlbmFtZT5DWFhGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB0aGUgZW52aXJvbm1lbnQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UQVJHRVRfQ1hYRkxBR1M8L2ZpbGVuYW1lPiB2YWx1ZSBzbyB0aGF0CisgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVzIGJ1aWx0IHVzaW5nIHRoZSBTREsgYWxzbyBoYXZlIHRoZSBmbGFncworICAgICAgICAgICAgICAgICAgICBhcHBsaWVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRBUkdFVF9GUFUnPjxnbG9zc3Rlcm0+VEFSR0VUX0ZQVTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEFSR0VUX0ZQVVtkb2NdID0gIlNwZWNpZmllcyB0aGUgbWV0aG9kIGZvciBoYW5kbGluZyBGUFUgY29kZS4gRm9yIEZQVS1sZXNzIHRhcmdldHMsIHdoaWNoIGluY2x1ZGUgbW9zdCBBUk0gQ1BVcywgdGhlIHZhcmlhYmxlIG11c3QgYmUgc2V0IHRvICdzb2Z0Jy4gSWYgbm90LCB0aGUga2VybmVsIGVtdWxhdGlvbiBnZXRzIHVzZWQsIHdoaWNoIHJlc3VsdHMgaW4gYSBwZXJmb3JtYW5jZSBwZW5hbHR5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbWV0aG9kIGZvciBoYW5kbGluZyBGUFUgY29kZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIEZQVS1sZXNzIHRhcmdldHMsIHdoaWNoIGluY2x1ZGUgbW9zdCBBUk0gQ1BVcywgdGhlIHZhcmlhYmxlIG11c3QgYmUKKyAgICAgICAgICAgICAgICAgICAgc2V0IHRvICJzb2Z0Ii4KKyAgICAgICAgICAgICAgICAgICAgSWYgbm90LCB0aGUga2VybmVsIGVtdWxhdGlvbiBnZXRzIHVzZWQsIHdoaWNoIHJlc3VsdHMgaW4gYSBwZXJmb3JtYW5jZSBwZW5hbHR5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRBUkdFVF9MRF9BUkNIJz48Z2xvc3N0ZXJtPlRBUkdFVF9MRF9BUkNIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUQVJHRVRfTERfQVJDSFtkb2NdID0gIlNwZWNpZmllcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbGlua2VyIGZsYWdzIGZvciB0aGUgdGFyZ2V0IHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGxpbmtlciBmbGFncyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIHRhcmdldCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UQVJHRVRfTERfQVJDSDwvZmlsZW5hbWU+IGlzIGluaXRpYWxpemVkIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVfTERBUkdTJz48ZmlsZW5hbWU+VFVORV9MREFSR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYnkgZGVmYXVsdCBpbiB0aGUgQml0QmFrZSBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4pOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRBUkdFVF9MRF9BUkNIID0gIiR7VFVORV9MREFSR1N9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEFSR0VUX0xERkxBR1MnPjxnbG9zc3Rlcm0+VEFSR0VUX0xERkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRBUkdFVF9MREZMQUdTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBsaW5rZXIgd2hlbiBidWlsZGluZyBmb3IgdGhlIHRhcmdldC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciB3aGVuIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nIGluIHRoZSB0YXJnZXQgY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxERkxBR1MnPjxmaWxlbmFtZT5MREZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHRoZSBTREsncyBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgc2V0cworICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxERkxBR1MnPjxmaWxlbmFtZT5MREZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHRoZSBlbnZpcm9ubWVudCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRBUkdFVF9MREZMQUdTPC9maWxlbmFtZT4gdmFsdWUgc28gdGhhdAorICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlcyBidWlsdCB1c2luZyB0aGUgU0RLIGFsc28gaGF2ZSB0aGUgZmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgYXBwbGllZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UQVJHRVRfT1MnPjxnbG9zc3Rlcm0+VEFSR0VUX09TPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUQVJHRVRfT1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHRhcmdldCdzIG9wZXJhdGluZyBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSB0YXJnZXQncyBvcGVyYXRpbmcgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgY2FuIGJlIHNldCB0byAibGludXgiIGZvciA8ZmlsZW5hbWU+Z2xpYmM8L2ZpbGVuYW1lPi1iYXNlZCBzeXN0ZW1zIGFuZAorICAgICAgICAgICAgICAgICAgICB0byAibGludXgtdWNsaWJjIiBmb3IgPGZpbGVuYW1lPnVjbGliYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBGb3IgQVJNL0VBQkkgdGFyZ2V0cywgdGhlcmUgYXJlIGFsc28gImxpbnV4LWdudWVhYmkiIGFuZAorICAgICAgICAgICAgICAgICAgICAibGludXgtdWNsaWJjLWdudWVhYmkiIHZhbHVlcyBwb3NzaWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UQVJHRVRfUFJFRklYJz48Z2xvc3N0ZXJtPlRBUkdFVF9QUkVGSVg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRBUkdFVF9QUkVGSVhbZG9jXSA9ICJUaGUgcHJlZml4IHVzZWQgZm9yIHRoZSB0b29sY2hhaW4gYmluYXJ5IHRhcmdldCB0b29scy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHByZWZpeCB1c2VkIGZvciB0aGUgdG9vbGNoYWluIGJpbmFyeSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgdG9vbHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiByZWNpcGUgYW5kIHRoZSBidWlsZCB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UQVJHRVRfUFJFRklYPC9maWxlbmFtZT4gaXMgc2V0IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHJlY2lwZXMgYnVpbGRpbmcgZm9yIHRoZSB0YXJnZXQgbWFjaGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJHs8bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX1NZUyc+VEFSR0VUX1NZUzwvbGluaz59LSIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIDxmaWxlbmFtZT5uYXRpdmU8L2ZpbGVuYW1lPiByZWNpcGVzLCB0aGUgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gc2V0cyB0aGUgdmFyaWFibGUgdG8gdGhlIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJVSUxEX1BSRUZJWDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4gcmVjaXBlcywgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIHNldHMgdGhlIHZhcmlhYmxlIHRvIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TREtfUFJFRklYPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRBUkdFVF9TWVMnPjxnbG9zc3Rlcm0+VEFSR0VUX1NZUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEFSR0VUX1NZU1tkb2NdID0gIlRoZSB0YXJnZXQgc3lzdGVtIGlzIGNvbXByaXNlZCBvZiBUQVJHRVRfQVJDSCxUQVJHRVRfVkVORE9SIGFuZCBUQVJHRVRfT1MuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBzeXN0ZW0sIGluY2x1ZGluZyB0aGUgYXJjaGl0ZWN0dXJlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW5nIHN5c3RlbSwgZm9yIHdoaWNoIHRoZSBidWlsZCBpcyBvY2N1cnJpbmcgaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhdXRvbWF0aWNhbGx5IHNldHMgdGhpcworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBiYXNlZCBvbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX0FSQ0gnPjxmaWxlbmFtZT5UQVJHRVRfQVJDSDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9WRU5ET1InPjxmaWxlbmFtZT5UQVJHRVRfVkVORE9SPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9PUyc+PGZpbGVuYW1lPlRBUkdFVF9PUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBuZWVkIHRvIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UQVJHRVRfU1lTPC9maWxlbmFtZT4gdmFyaWFibGUgeW91cnNlbGYuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2lkZXIgdGhlc2UgdHdvIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdpdmVuIGEgPGZpbGVuYW1lPm5hdGl2ZTwvZmlsZW5hbWU+IHJlY2lwZSBvbiBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzItYml0LCB4ODYgbWFjaGluZSBydW5uaW5nIExpbnV4LCB0aGUgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaTY4Ni1saW51eCIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2l2ZW4gYSByZWNpcGUgYmVpbmcgYnVpbHQgZm9yIGEgbGl0dGxlLWVuZGlhbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSVBTIHRhcmdldCBydW5uaW5nIExpbnV4LCB0aGUgdmFsdWUgbWlnaHQgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlwc2VsLWxpbnV4Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEFSR0VUX1ZFTkRPUic+PGdsb3NzdGVybT5UQVJHRVRfVkVORE9SPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUQVJHRVRfVkVORE9SW2RvY10gPSAiVGhlIG5hbWUgb2YgdGhlIHRhcmdldCB2ZW5kb3IuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgdmVuZG9yLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRDTElCQ0FQUEVORCc+PGdsb3NzdGVybT5UQ0xJQkNBUFBFTkQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRDTElCQ0FQUEVORFtkb2NdID0gIlNwZWNpZmllcyBhIHN1ZmZpeCBhcHBlbmRlZCB0byBUTVBESVIgdGhhdCBpZGVudGlmaWVzIHRoZSBsaWJjIHZhcmlhbnQgZm9yIHRoZSBidWlsZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBzdWZmaXggdG8gYmUgYXBwZW5kZWQgb250byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHN1ZmZpeCBpZGVudGlmaWVzIHRoZSA8ZmlsZW5hbWU+bGliYzwvZmlsZW5hbWU+IHZhcmlhbnQKKyAgICAgICAgICAgICAgICAgICAgZm9yIGJ1aWxkaW5nLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBhcmUgYnVpbGRpbmcgZm9yIG11bHRpcGxlIHZhcmlhbnRzIHdpdGggdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgdGhpcyBtZWNoYW5pc20gZW5zdXJlcyB0aGF0IG91dHB1dCBmb3IgZGlmZmVyZW50CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJjPC9maWxlbmFtZT4gdmFyaWFudHMgaXMga2VwdCBzZXBhcmF0ZSB0bworICAgICAgICAgICAgICAgICAgICBhdm9pZCBwb3RlbnRpYWwgY29uZmxpY3RzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiB0aGUgPGZpbGVuYW1lPmRlZmF1bHRzZXR1cC5jb25mPC9maWxlbmFtZT4gZmlsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgdmFsdWUgb2YgPGZpbGVuYW1lPlRDTElCQ0FQUEVORDwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgICAgICItJHtUQ0xJQkN9Ii4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgZGlzdHJvcyBzdWNoIGFzIHBva3ksIHdoaWNoIG5vcm1hbGx5IG9ubHkgc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICBvbmUgPGZpbGVuYW1lPmxpYmM8L2ZpbGVuYW1lPiB2YXJpYW50LCBzZXQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRDTElCQ0FQUEVORDwvZmlsZW5hbWU+IHRvICIiIGluIHRoZWlyIGRpc3RybworICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgcmVzdWx0aW5nIGluIG5vIHN1ZmZpeCBiZWluZyBhcHBsaWVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRDTElCQyc+PGdsb3NzdGVybT5UQ0xJQkM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRDTElCQ1tkb2NdID0gIlNwZWNpZmllcyBHTlUgc3RhbmRhcmQgQyBsaWJyYXJ5IChsaWJjKSB2YXJpYW50IHRvIHVzZSBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuIFlvdSBjYW4gc2VsZWN0ICdnbGliYycgb3IgJ3VjbGliYycuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBHTlUgc3RhbmRhcmQgQyBsaWJyYXJ5ICg8ZmlsZW5hbWU+bGliYzwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICB2YXJpYW50IHRvIHVzZSBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgcmVwbGFjZXMgPGZpbGVuYW1lPlBPS1lMSUJDPC9maWxlbmFtZT4sIHdoaWNoIGlzIG5vIGxvbmdlcgorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VsZWN0ICJnbGliYyIgb3IgInVjbGliYyIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVENNT0RFJz48Z2xvc3N0ZXJtPlRDTU9ERTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVENNT0RFW2RvY10gPSAiRW5hYmxlcyBhbiBleHRlcm5hbCB0b29sY2hhaW4gKHdoZXJlIHByb3ZpZGVkIGJ5IGFuIGFkZGl0aW9uYWwgbGF5ZXIpIGlmIHNldCB0byBhIHZhbHVlIG90aGVyIHRoYW4gJ2RlZmF1bHQnLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgdG9vbGNoYWluIHNlbGVjdG9yLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VENNT0RFPC9maWxlbmFtZT4gY29udHJvbHMgdGhlIGNoYXJhY3RlcmlzdGljcworICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZ2VuZXJhdGVkIHBhY2thZ2VzIGFuZCBpbWFnZXMgYnkgdGVsbGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aGljaCB0b29sY2hhaW4gcHJvZmlsZSB0byB1c2UuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGJ1aWxkcyBpdHMgb3duCisgICAgICAgICAgICAgICAgICAgIGludGVybmFsIHRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlJ3MgZGVmYXVsdCB2YWx1ZSBpcyAiZGVmYXVsdCIsIHdoaWNoIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBpbnRlcm5hbCB0b29sY2hhaW4uCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPlRDTU9ERTwvZmlsZW5hbWU+IGlzIHNldCB0byBhIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICBvdGhlciB0aGFuICJkZWZhdWx0IiwgdGhlbiBpdCBpcyB5b3VyIHJlc3BvbnNpYmlsaXR5CisgICAgICAgICAgICAgICAgICAgICAgICB0byBlbnN1cmUgdGhhdCB0aGUgdG9vbGNoYWluIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgdG9vbGNoYWluLgorICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcgb2xkZXIgb3IgbmV3ZXIgdmVyc2lvbnMgb2YgdGhlc2UgY29tcG9uZW50cworICAgICAgICAgICAgICAgICAgICAgICAgbWlnaHQgY2F1c2UgYnVpbGQgcHJvYmxlbXMuCisgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fUkVMRUFTRV9OT1RFUzsnPlJlbGVhc2UgTm90ZXM8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBzcGVjaWZpYyBjb21wb25lbnRzIHdpdGggd2hpY2ggdGhlIHRvb2xjaGFpbgorICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCBiZSBjb21wYXRpYmxlLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+VENNT0RFPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgc2ltaWxhciB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVENMSUJDJz48ZmlsZW5hbWU+VENMSUJDPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBjb250cm9scyB0aGUgdmFyaWFudCBvZiB0aGUgR05VIHN0YW5kYXJkIEMgbGlicmFyeQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmxpYmM8L2ZpbGVuYW1lPikgdXNlZCBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3M6CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT51Y2xpYmM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2l0aCBhZGRpdGlvbmFsIGxheWVycywgaXQgaXMgcG9zc2libGUgdG8gdXNlIGEgcHJlLWNvbXBpbGVkCisgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsIHRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICAgICAgT25lIGV4YW1wbGUgaXMgdGhlIFNvdXJjZXJ5IEcrKyBUb29sY2hhaW4uCisgICAgICAgICAgICAgICAgICAgIFRoZSBzdXBwb3J0IGZvciB0aGlzIHRvb2xjaGFpbiByZXNpZGVzIGluIHRoZSBzZXBhcmF0ZQorICAgICAgICAgICAgICAgICAgICA8dHJhZGVtYXJrIGNsYXNzPSdyZWdpc3RlcmVkJz5NZW50b3IgR3JhcGhpY3M8L3RyYWRlbWFyaz4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtc291cmNlcnk8L2ZpbGVuYW1lPiBsYXllciBhdAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0aHViLmNvbS9NZW50b3JFbWJlZGRlZC9tZXRhLXNvdXJjZXJ5Lyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsYXllcidzIDxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPiBmaWxlIGNvbnRhaW5zCisgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhlIFNvdXJjZXJ5IEcrKyBUb29sY2hhaW4gYXMKKyAgICAgICAgICAgICAgICAgICAgYW4gZXh0ZXJuYWwgdG9vbGNoYWluLgorICAgICAgICAgICAgICAgICAgICBJbiBzdW1tYXJ5LCB5b3UgbXVzdCBiZSBzdXJlIHRvIGFkZCB0aGUgbGF5ZXIgdG8geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gZnJvbnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gbGF5ZXIgYW5kIHRoZW4gc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RVhURVJOQUxfVE9PTENIQUlOPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGxvY2F0aW9uIGluIHdoaWNoIHlvdSBpbnN0YWxsZWQgdGhlIHRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZ1bmRhbWVudGFscyB1c2VkIGZvciB0aGlzIGV4YW1wbGUgYXBwbHkgdG8gYW55CisgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsIHRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgPGZpbGVuYW1lPm1ldGEtc291cmNlcnk8L2ZpbGVuYW1lPiBhcyBhCisgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlIGZvciBhZGRpbmcgc3VwcG9ydCBmb3Igb3RoZXIgZXh0ZXJuYWwgdG9vbGNoYWlucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1URVNUX0VYUE9SVF9ESVInPjxnbG9zc3Rlcm0+VEVTVF9FWFBPUlRfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBURVNUX0VYUE9SVF9ESVJbZG9jXSA9ICJUaGUgbG9jYXRpb24gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0byBleHBvcnQgdGVzdHMgd2hlbiB0aGUgVEVTVF9FWFBPUlRfT05MWSB2YXJpYWJsZSBpcyBzZXQgdG8gIjEiLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhdGlvbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRvIGV4cG9ydAorICAgICAgICAgICAgICAgICAgICB0ZXN0cyB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEVTVF9FWFBPUlRfT05MWSc+PGZpbGVuYW1lPlRFU1RfRVhQT1JUX09OTFk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaXMgc2V0IHRvICIxIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5URVNUX0VYUE9SVF9ESVI8L2ZpbGVuYW1lPiB2YXJpYWJsZSBkZWZhdWx0cworICAgICAgICAgICAgICAgICAgICB0byA8ZmlsZW5hbWU+IiR7VE1QRElSfS90ZXN0aW1hZ2UvJHtQTn0iPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEVTVF9FWFBPUlRfT05MWSc+PGdsb3NzdGVybT5URVNUX0VYUE9SVF9PTkxZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBURVNUX0VYUE9SVF9PTkxZW2RvY10gPSAiU3BlY2lmaWVzIHRvIGV4cG9ydCB0aGUgdGVzdHMgb25seS4gU2V0IHRoaXMgdmFyaWFibGUgdG8gIjEiIGlmIHlvdSBkbyBub3Qgd2FudCB0byBydW4gdGhlIHRlc3RzIGJ1dCB5b3Ugd2FudCB0aGVtIHRvIGJlIGV4cG9ydGVkIGluIGEgbWFubmVyIHRoYXQgeW91IHRvIHJ1biB0aGVtIG91dHNpZGUgb2YgdGhlIGJ1aWxkIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdG8gZXhwb3J0IHRoZSB0ZXN0cyBvbmx5LgorICAgICAgICAgICAgICAgICAgICBTZXQgdGhpcyB2YXJpYWJsZSB0byAiMSIgaWYgeW91IGRvIG5vdCB3YW50IHRvIHJ1biB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGVzdHMgYnV0IHlvdSB3YW50IHRoZW0gdG8gYmUgZXhwb3J0ZWQgaW4gYSBtYW5uZXIgdGhhdAorICAgICAgICAgICAgICAgICAgICB5b3UgdG8gcnVuIHRoZW0gb3V0c2lkZSBvZiB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRFU1RfSU1BR0UnPjxnbG9zc3Rlcm0+VEVTVF9JTUFHRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEVTVF9JTUFHRVtkb2NdID0gIkVuYWJsZXMgdGVzdCBib290aW5nIG9mIHZpcnR1YWwgbWFjaGluZSBpbWFnZXMgdW5kZXIgdGhlIFFFTVUgZW11bGF0b3IgYWZ0ZXIgYW55IHJvb3QgZmlsZXN5c3RlbXMgYXJlIGNyZWF0ZWQgYW5kIHJ1bnMgdGVzdHMgYWdhaW5zdCB0aG9zZSBpbWFnZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljYWxseSBydW5zIHRoZSBzZXJpZXMgb2YgYXV0b21hdGVkIHRlc3RzIGZvcgorICAgICAgICAgICAgICAgICAgICBpbWFnZXMgd2hlbiBhbiBpbWFnZSBpcyBzdWNjZXNzZnVsbHkgYnVpbHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZXNlIHRlc3RzIGFyZSB3cml0dGVuIGluIFB5dGhvbiBtYWtpbmcgdXNlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dW5pdHRlc3Q8L2ZpbGVuYW1lPiBtb2R1bGUsIGFuZCB0aGUgbWFqb3JpdHkgb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlbSBydW4gY29tbWFuZHMgb24gdGhlIHRhcmdldCBzeXN0ZW0gb3ZlcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3NoPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0IHRoaXMgdmFyaWFibGUgdG8gIjEiIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHRvIGhhdmUgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseSBydW4KKyAgICAgICAgICAgICAgICAgICAgdGhlc2UgdGVzdHMgYWZ0ZXIgYW4gaW1hZ2Ugc3VjY2Vzc2Z1bGx5IGJ1aWxkczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURVNUX0lNQUdFID0gIjEiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gZW5hYmxpbmcsIHJ1bm5pbmcsIGFuZCB3cml0aW5nCisgICAgICAgICAgICAgICAgICAgIHRoZXNlIHRlc3RzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwZXJmb3JtaW5nLWF1dG9tYXRlZC1ydW50aW1lLXRlc3RpbmcnPlBlcmZvcm1pbmcgQXV0b21hdGVkIFJ1bnRpbWUgVGVzdGluZzwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy10ZXN0aW1hZ2UnPjxmaWxlbmFtZT50ZXN0aW1hZ2UuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1URVNUX0xPR19ESVInPjxnbG9zc3Rlcm0+VEVTVF9MT0dfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBURVNUX0xPR19ESVJbZG9jXSA9ICJIb2xkcyB0aGUgU1NIIGxvZyBhbmQgdGhlIGJvb3QgbG9nIGZvciBRRU1VIG1hY2hpbmVzLiBUaGUgPGZpbGVuYW1lPlRFU1RfTE9HX0RJUjwvZmlsZW5hbWU+IHZhcmlhYmxlIGRlZmF1bHRzIHRvICIke1dPUktESVJ9L3Rlc3RpbWFnZSIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSG9sZHMgdGhlIFNTSCBsb2cgYW5kIHRoZSBib290IGxvZyBmb3IgUUVNVSBtYWNoaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5URVNUX0xPR19ESVI8L2ZpbGVuYW1lPiB2YXJpYWJsZSBkZWZhdWx0cworICAgICAgICAgICAgICAgICAgICB0byA8ZmlsZW5hbWU+IiR7V09SS0RJUn0vdGVzdGltYWdlIjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFjdHVhbCB0ZXN0IHJlc3VsdHMgcmVzaWRlIGluIHRoZSB0YXNrIGxvZworICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5sb2cuZG9fdGVzdGltYWdlPC9maWxlbmFtZT4pLCB3aGljaCBpcyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT4ke1dPUktESVJ9L3RlbXAvPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEVTVF9QT1dFUkNPTlRST0xfQ01EJz48Z2xvc3N0ZXJtPlRFU1RfUE9XRVJDT05UUk9MX0NNRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEVTVF9QT1dFUkNPTlRST0xfQ01EW2RvY10gPSAiRm9yIGF1dG9tYXRlZCBoYXJkd2FyZSB0ZXN0aW5nLCBzcGVjaWZpZXMgdGhlIGNvbW1hbmQgdG8gdXNlIHRvIGNvbnRyb2wgdGhlIHBvd2VyIG9mIHRoZSB0YXJnZXQgbWFjaGluZSB1bmRlciB0ZXN0IgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGF1dG9tYXRlZCBoYXJkd2FyZSB0ZXN0aW5nLCBzcGVjaWZpZXMgdGhlIGNvbW1hbmQgdG8KKyAgICAgICAgICAgICAgICAgICAgdXNlIHRvIGNvbnRyb2wgdGhlIHBvd2VyIG9mIHRoZSB0YXJnZXQgbWFjaGluZSB1bmRlciB0ZXN0LgorICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHRoaXMgY29tbWFuZCB3b3VsZCBwb2ludCB0byBhIHNjcmlwdCB0aGF0CisgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1zIHRoZSBhcHByb3ByaWF0ZSBhY3Rpb24gKGUuZy4gaW50ZXJhY3RpbmcKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBhIHdlYi1lbmFibGVkIHBvd2VyIHN0cmlwKS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNwZWNpZmllZCBjb21tYW5kIHNob3VsZCBleHBlY3QgdG8gcmVjZWl2ZSBhcyB0aGUgbGFzdAorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudCAib2ZmIiwgIm9uIiBvciAiY3ljbGUiIHNwZWNpZnlpbmcgdG8gcG93ZXIgb2ZmLAorICAgICAgICAgICAgICAgICAgICBvbiwgb3IgY3ljbGUgKHBvd2VyIG9mZiBhbmQgdGhlbiBwb3dlciBvbikgdGhlIGRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRFU1RfUE9XRVJDT05UUk9MX0VYVFJBX0FSR1MnPjxnbG9zc3Rlcm0+VEVTVF9QT1dFUkNPTlRST0xfRVhUUkFfQVJHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEVTVF9QT1dFUkNPTlRST0xfRVhUUkFfQVJHU1tkb2NdID0gIkZvciBhdXRvbWF0ZWQgaGFyZHdhcmUgdGVzdGluZywgc3BlY2lmaWVzIGFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgY29tbWFuZCBzcGVjaWZpZWQgaW4gVEVTVF9QT1dFUkNPTlRST0xfQ01EIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGF1dG9tYXRlZCBoYXJkd2FyZSB0ZXN0aW5nLCBzcGVjaWZpZXMgYWRkaXRpb25hbAorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMgdG8gcGFzcyB0aHJvdWdoIHRvIHRoZSBjb21tYW5kIHNwZWNpZmllZCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEVTVF9QT1dFUkNPTlRST0xfQ01EJz48ZmlsZW5hbWU+VEVTVF9QT1dFUkNPTlRST0xfQ01EPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIDxmaWxlbmFtZT5URVNUX1BPV0VSQ09OVFJPTF9FWFRSQV9BUkdTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaXMgb3B0aW9uYWwuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIGl0IGlmIHlvdSB3aXNoLCBmb3IgZXhhbXBsZSwgdG8gc2VwYXJhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUtc3BlY2lmaWMgYW5kIG5vbi1tYWNoaW5lLXNwZWNpZmljIHBhcnRzIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEVTVF9RRU1VQk9PVF9USU1FT1VUJz48Z2xvc3N0ZXJtPlRFU1RfUUVNVUJPT1RfVElNRU9VVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEVTVF9RRU1VQk9PVF9USU1FT1VUW2RvY10gPSAiVGhlIHRpbWUgaW4gc2Vjb25kcyBhbGxvd2VkIGZvciBhbiBpbWFnZSB0byBib290IGJlZm9yZSBhdXRvbWF0ZWQgcnVudGltZSB0ZXN0cyBiZWdpbiB0byBydW4gYWdhaW5zdCBhbiBpbWFnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgdGltZSBpbiBzZWNvbmRzIGFsbG93ZWQgZm9yIGFuIGltYWdlIHRvIGJvb3QgYmVmb3JlCisgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRlZCBydW50aW1lIHRlc3RzIGJlZ2luIHRvIHJ1biBhZ2FpbnN0IGFuCisgICAgICAgICAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB0aW1lb3V0IHBlcmlvZCB0byBhbGxvdyB0aGUgYm9vdCBwcm9jZXNzIHRvCisgICAgICAgICAgICAgICAgICAgIHJlYWNoIHRoZSBsb2dpbiBwcm9tcHQgaXMgNTAwIHNlY29uZHMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSBhIGRpZmZlcmVudCB2YWx1ZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0ZXN0aW5nIGltYWdlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGVyZm9ybWluZy1hdXRvbWF0ZWQtcnVudGltZS10ZXN0aW5nJz5QZXJmb3JtaW5nIEF1dG9tYXRlZCBSdW50aW1lIFRlc3Rpbmc8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEVTVF9TRVJJQUxDT05UUk9MX0NNRCc+PGdsb3NzdGVybT5URVNUX1NFUklBTENPTlRST0xfQ01EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBURVNUX1NFUklBTENPTlRST0xfQ01EW2RvY10gPSAiRm9yIGF1dG9tYXRlZCBoYXJkd2FyZSB0ZXN0aW5nLCBzcGVjaWZpZXMgdGhlIGNvbW1hbmQgdG8gdXNlIHRvIGNvbm5lY3QgdG8gdGhlIHNlcmlhbCBjb25zb2xlIG9mIHRoZSB0YXJnZXQgbWFjaGluZSB1bmRlciB0ZXN0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEZvciBhdXRvbWF0ZWQgaGFyZHdhcmUgdGVzdGluZywgc3BlY2lmaWVzIHRoZSBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIHRvIHVzZSB0byBjb25uZWN0IHRvIHRoZSBzZXJpYWwgY29uc29sZSBvZiB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgdW5kZXIgdGVzdC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIHNpbXBseSBuZWVkcyB0byBjb25uZWN0IHRvIHRoZSBzZXJpYWwgY29uc29sZQorICAgICAgICAgICAgICAgICAgICBhbmQgZm9yd2FyZCB0aGF0IGNvbm5lY3Rpb24gdG8gc3RhbmRhcmQgaW5wdXQgYW5kIG91dHB1dAorICAgICAgICAgICAgICAgICAgICBhcyBhbnkgbm9ybWFsIHRlcm1pbmFsIHByb2dyYW0gZG9lcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIHVzZSB0aGUgUGljb2NvbSB0ZXJtaW5hbCBwcm9ncmFtIG9uCisgICAgICAgICAgICAgICAgICAgIHNlcmlhbCBkZXZpY2UgPGZpbGVuYW1lPi9kZXYvdHR5VVNCMDwvZmlsZW5hbWU+IGF0CisgICAgICAgICAgICAgICAgICAgIDExNTIwMGJwcywgeW91IHdvdWxkIHNldCB0aGUgdmFyaWFibGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURVNUX1NFUklBTENPTlRST0xfQ01EID0gInBpY29jb20gL2Rldi90dHlVU0IwIC1iIDExNTIwMCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRFU1RfU0VSSUFMQ09OVFJPTF9FWFRSQV9BUkdTJz48Z2xvc3N0ZXJtPlRFU1RfU0VSSUFMQ09OVFJPTF9FWFRSQV9BUkdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBURVNUX1NFUklBTENPTlRST0xfRVhUUkFfQVJHU1tkb2NdID0gIkZvciBhdXRvbWF0ZWQgaGFyZHdhcmUgdGVzdGluZywgc3BlY2lmaWVzIGFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgY29tbWFuZCBzcGVjaWZpZWQgaW4gVEVTVF9TRVJJQUxDT05UUk9MX0NNRC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBGb3IgYXV0b21hdGVkIGhhcmR3YXJlIHRlc3RpbmcsIHNwZWNpZmllcyBhZGRpdGlvbmFsCisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cyB0byBwYXNzIHRocm91Z2ggdG8gdGhlIGNvbW1hbmQgc3BlY2lmaWVkIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1URVNUX1NFUklBTENPTlRST0xfQ01EJz48ZmlsZW5hbWU+VEVTVF9TRVJJQUxDT05UUk9MX0NNRDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZyA8ZmlsZW5hbWU+VEVTVF9TRVJJQUxDT05UUk9MX0VYVFJBX0FSR1M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyBvcHRpb25hbC4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgaXQgaWYgeW91IHdpc2gsIGZvciBleGFtcGxlLCB0byBzZXBhcmF0ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZS1zcGVjaWZpYyBhbmQgbm9uLW1hY2hpbmUtc3BlY2lmaWMgcGFydHMgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEVTVF9TRVJWRVJfSVAnPjxnbG9zc3Rlcm0+VEVTVF9TRVJWRVJfSVA8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRFU1RfU0VSVkVSX0lQW2RvY10gPSAiVGhlIElQIGFkZHJlc3Mgb2YgdGhlIGJ1aWxkIG1hY2hpbmUgKGhvc3QgbWFjaGluZSkuIFRoaXMgSVAgYWRkcmVzcyBpcyB1c3VhbGx5IGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIElQIGFkZHJlc3Mgb2YgdGhlIGJ1aWxkIG1hY2hpbmUgKGhvc3QgbWFjaGluZSkuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgSVAgYWRkcmVzcyBpcyB1c3VhbGx5IGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIGRldGVjdGlvbiBmYWlscywgdGhpcyB2YXJpYWJsZSBuZWVkcyB0byBiZSBzZXQKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIElQIGFkZHJlc3Mgb2YgdGhlIGJ1aWxkIG1hY2hpbmUgKGkuZS4gd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIGlzIHRha2luZyBwbGFjZSkuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5URVNUX1NFUlZFUl9JUDwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICBpcyBvbmx5IHVzZWQgZm9yIGEgc21hbGwgbnVtYmVyIG9mIHRlc3RzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSAic21hcnQiIHRlc3Qgc3VpdGUsIHdoaWNoIG5lZWRzIHRvIGRvd25sb2FkCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBmcm9tIDxmaWxlbmFtZT5ERVBMT1lfRElSL3JwbTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEVTVF9UQVJHRVQnPjxnbG9zc3Rlcm0+VEVTVF9UQVJHRVQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRFU1RfVEFSR0VUW2RvY10gPSAiRm9yIGF1dG9tYXRlZCBydW50aW1lIHRlc3RpbmcsIHNwZWNpZmllcyB0aGUgbWV0aG9kIG9mIGRlcGxveWluZyB0aGUgaW1hZ2UgYW5kIHJ1bm5pbmcgdGVzdHMgb24gdGhlIHRhcmdldCBtYWNoaW5lLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgdGFyZ2V0IGNvbnRyb2xsZXIgdG8gdXNlIHdoZW4gcnVubmluZyB0ZXN0cworICAgICAgICAgICAgICAgICAgICBhZ2FpbnN0IGEgdGVzdCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgY29udHJvbGxlciB0byB1c2UgaXMgInFlbXUiOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRFU1RfVEFSR0VUID0gInFlbXUiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQSB0YXJnZXQgY29udHJvbGxlciBpcyBhIGNsYXNzIHRoYXQgZGVmaW5lcyBob3cgYW4KKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UgZ2V0cyBkZXBsb3llZCBvbiBhIHRhcmdldCBhbmQgaG93IGEgdGFyZ2V0IGlzIHN0YXJ0ZWQuCisgICAgICAgICAgICAgICAgICAgIEEgbGF5ZXIgY2FuIGV4dGVuZCB0aGUgY29udHJvbGxlcnMgYnkgYWRkaW5nIGEgbW9kdWxlCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBsYXllcidzIDxmaWxlbmFtZT4vbGliL29lcWEvY29udHJvbGxlcnM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgYW5kIGJ5IGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CYXNlVGFyZ2V0PC9maWxlbmFtZT4gY2xhc3MsIHdoaWNoIGlzIGFuIGFic3RyYWN0CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHRoYXQgY2Fubm90IGJlIHVzZWQgYXMgYSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEVTVF9UQVJHRVQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRFU1RfVEFSR0VUPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJxZW11IiBhbmQgIlFlbXVUYXJnZXQiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQm9vdHMgYSBRRU1VIGltYWdlIGFuZCBydW5zIHRoZSB0ZXN0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3FlbXUtaW1hZ2UtZW5hYmxpbmctdGVzdHMnPkVuYWJsaW5nIFJ1bnRpbWUgVGVzdHMgb24gUUVNVTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJzaW1wbGVyZW1vdGUiIGFuZCAiU2ltcGxlUmVtb3RlVGFyZ2V0Ijo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnMgdGhlIHRlc3RzIG9uIHRhcmdldCBoYXJkd2FyZSB0aGF0IGlzIGFscmVhZHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cCBhbmQgcnVubmluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgaGFyZHdhcmUgY2FuIGJlIG9uIHRoZSBuZXR3b3JrIG9yIGl0IGNhbiBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgZGV2aWNlIHJ1bm5pbmcgYW4gaW1hZ2Ugb24gUUVNVS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBhbHNvIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1URVNUX1RBUkdFVF9JUCc+PGZpbGVuYW1lPlRFU1RfVEFSR0VUX0lQPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB5b3UgdXNlICJzaW1wbGVyZW1vdGUiIG9yICJTaW1wbGVSZW1vdGVUYXJnZXQiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFyZ3VtZW50IGlzIGRlZmluZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvbGliL29lcWEvdGFyZ2V0Y29udHJvbC5weTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc21hbGwgY2FwcyBuYW1lcyBhcmUga2VwdCBmb3IgY29tcGF0aWJpbGl0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ikd1bW1pYm9vdFRhcmdldCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWNhbGx5IGRlcGxveXMgYW5kIHJ1bnMgdGVzdHMgb24gYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRkktZW5hYmxlZCBtYWNoaW5lIHRoYXQgaGFzIGEgbWFzdGVyIGltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFyZ3VtZW50IGlzIGRlZmluZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvbGliL29lcWEvY29udHJvbGxlcnMvbWFzdGVyaW1hZ2UucHk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gcnVubmluZyB0ZXN0cyBvbiBoYXJkd2FyZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjaGFyZHdhcmUtaW1hZ2UtZW5hYmxpbmctdGVzdHMnPkVuYWJsaW5nIFJ1bnRpbWUgVGVzdHMgb24gSGFyZHdhcmU8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEVTVF9UQVJHRVRfSVAnPjxnbG9zc3Rlcm0+VEVTVF9UQVJHRVRfSVA8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRFU1RfVEFSR0VUX0lQW2RvY10gPSAiVGhlIElQIGFkZHJlc3Mgb2YgeW91ciBoYXJkd2FyZSB1bmRlciB0ZXN0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBJUCBhZGRyZXNzIG9mIHlvdXIgaGFyZHdhcmUgdW5kZXIgdGVzdC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5URVNUX1RBUkdFVF9JUDwvZmlsZW5hbWU+IHZhcmlhYmxlIGhhcyBubworICAgICAgICAgICAgICAgICAgICBlZmZlY3Qgd2hlbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEVTVF9UQVJHRVQnPjxmaWxlbmFtZT5URVNUX1RBUkdFVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gInFlbXUiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBzcGVjaWZ5IHRoZSBJUCBhZGRyZXNzLCB5b3UgY2FuIGFsc28gaW5jbHVkZSBhCisgICAgICAgICAgICAgICAgICAgIHBvcnQuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURVNUX1RBUkdFVF9JUCA9ICIxOTIuMTY4LjEuNDoyMjAxIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZnlpbmcgYSBwb3J0IGlzIHVzZWZ1bCB3aGVuIFNTSCBpcyBzdGFydGVkIG9uIGEKKyAgICAgICAgICAgICAgICAgICAgbm9uLXN0YW5kYXJkIHBvcnQgb3IgaW4gY2FzZXMgd2hlbiB5b3VyIGhhcmR3YXJlIHVuZGVyIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgaXMgYmVoaW5kIGEgZmlyZXdhbGwgb3IgbmV0d29yayB0aGF0IGlzIG5vdCBkaXJlY3RseQorICAgICAgICAgICAgICAgICAgICBhY2Nlc3NpYmxlIGZyb20geW91ciBob3N0IGFuZCB5b3UgbmVlZCB0byBkbyBwb3J0IGFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEVTVF9TVUlURVMnPjxnbG9zc3Rlcm0+VEVTVF9TVUlURVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRFU1RfU1VJVEVTW2RvY10gPSAiQW4gb3JkZXJlZCBsaXN0IG9mIHRlc3RzIChtb2R1bGVzKSB0byBydW4gYWdhaW5zdCBhbiBpbWFnZSB3aGVuIHBlcmZvcm1pbmcgYXV0b21hdGVkIHJ1bnRpbWUgdGVzdGluZy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBbiBvcmRlcmVkIGxpc3Qgb2YgdGVzdHMgKG1vZHVsZXMpIHRvIHJ1biBhZ2FpbnN0CisgICAgICAgICAgICAgICAgICAgIGFuIGltYWdlIHdoZW4gcGVyZm9ybWluZyBhdXRvbWF0ZWQgcnVudGltZSB0ZXN0aW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwcm92aWRlcyBhIGNvcmUgc2V0IG9mIHRlc3RzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgY2FuIGJlIHVzZWQgYWdhaW5zdCBpbWFnZXMuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVudGx5LCB0aGVyZSBpcyBvbmx5IHN1cHBvcnQgZm9yIHJ1bm5pbmcgdGhlc2UgdGVzdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIFFFTVUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGVzdHMgaW5jbHVkZSA8ZmlsZW5hbWU+cGluZzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3NoPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5kZjwvZmlsZW5hbWU+IGFtb25nCisgICAgICAgICAgICAgICAgICAgIG90aGVycy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhZGQgeW91ciBvd24gdGVzdHMgdG8gdGhlIGxpc3Qgb2YgdGVzdHMgYnkKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kaW5nIDxmaWxlbmFtZT5URVNUX1NVSVRFUzwvZmlsZW5hbWU+IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVTVF9TVUlURVNfYXBwZW5kID0gIiA8cmVwbGFjZWFibGU+bXl0ZXN0PC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBwcm92aWRlIHRoZSAiYXV0byIgb3B0aW9uIHRvCisgICAgICAgICAgICAgICAgICAgIGhhdmUgYWxsIGFwcGxpY2FibGUgdGVzdHMgcnVuIGFnYWluc3QgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRFU1RfU1VJVEVTX2FwcGVuZCA9ICIgYXV0byIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGlzIG9wdGlvbiBjYXVzZXMgdGhlIGJ1aWxkIHN5c3RlbSB0byBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgICAgICAgIHJ1biB0ZXN0cyB0aGF0IGFyZSBhcHBsaWNhYmxlIHRvIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGVzdHMgdGhhdCBhcmUgbm90IGFwcGxpY2FibGUgYXJlIHNraXBwZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBvcmRlciBpbiB3aGljaCB0ZXN0cyBhcmUgcnVuIGlzIGltcG9ydGFudC4KKyAgICAgICAgICAgICAgICAgICAgVGVzdHMgdGhhdCBkZXBlbmQgb24gYW5vdGhlciB0ZXN0IG11c3QgYXBwZWFyIGxhdGVyIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBsaXN0IHRoYW4gdGhlIHRlc3Qgb24gd2hpY2ggdGhleSBkZXBlbmQuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgYXBwZW5kIHRoZSBsaXN0IG9mIHRlc3RzIHdpdGggdHdvCisgICAgICAgICAgICAgICAgICAgIHRlc3RzICg8ZmlsZW5hbWU+dGVzdF9BPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50ZXN0X0I8L2ZpbGVuYW1lPikgd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRlc3RfQjwvZmlsZW5hbWU+IGlzIGRlcGVuZGVudCBvbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dGVzdF9BPC9maWxlbmFtZT4sIHRoZW4geW91IG11c3Qgb3JkZXIgdGhlIHRlc3RzCisgICAgICAgICAgICAgICAgICAgIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVTVF9TVUlURVMgPSAiIHRlc3RfQSB0ZXN0X0IiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGVzdGluZyBpbWFnZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BlcmZvcm1pbmctYXV0b21hdGVkLXJ1bnRpbWUtdGVzdGluZyc+UGVyZm9ybWluZyBBdXRvbWF0ZWQgUnVudGltZSBUZXN0aW5nPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRISVNESVInPjxnbG9zc3Rlcm0+VEhJU0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEhJU0RJUltkb2NdID0gIlRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGZpbGUgQml0QmFrZSBpcyBjdXJyZW50bHkgcGFyc2luZyBpcyBsb2NhdGVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGZpbGUgQml0QmFrZSBpcyBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgcGFyc2luZyBpcyBsb2NhdGVkLgorICAgICAgICAgICAgICAgICAgICBEbyBub3QgbWFudWFsbHkgc2V0IHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVElNRSc+PGdsb3NzdGVybT5USU1FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUSU1FW2RvY10gPSAiVGhlIHRpbWUgdGhlIGJ1aWxkIHdhcyBzdGFydGVkIHVzaW5nIEhNUyBmb3JtYXQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHRpbWUgdGhlIGJ1aWxkIHdhcyBzdGFydGVkLgorICAgICAgICAgICAgICAgICAgICBUaW1lcyBhcHBlYXIgdXNpbmcgdGhlIGhvdXIsIG1pbnV0ZSwgYW5kIHNlY29uZCAoSE1TKQorICAgICAgICAgICAgICAgICAgICBmb3JtYXQgKGUuZy4gIjE0MDE1OSIgZm9yIG9uZSBtaW51dGUgYW5kIGZpZnR5LW5pbmUKKyAgICAgICAgICAgICAgICAgICAgc2Vjb25kcyBwYXN0IDE0MDAgaG91cnMpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRNUERJUic+PGdsb3NzdGVybT5UTVBESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRNUERJUltkb2NdID0gIlRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgd2hlbiBpdCBkb2VzIGl0cyB3b3JrIGJ1aWxkaW5nIGltYWdlcy4gQnkgZGVmYXVsdCwgdGhlIFRNUERJUiB2YXJpYWJsZSBpcyBuYW1lZCB0bXAgd2l0aGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB0aGUgYmFzZSBkaXJlY3RvcnkgdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gdXNlcyBmb3IgYWxsIGJ1aWxkIG91dHB1dCBhbmQgaW50ZXJtZWRpYXRlCisgICAgICAgICAgICAgICAgICAgIGZpbGVzIChvdGhlciB0aGFuIHRoZSBzaGFyZWQgc3RhdGUgY2FjaGUpLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+IHZhcmlhYmxlIHBvaW50cworICAgICAgICAgICAgICAgICAgICB0byA8ZmlsZW5hbWU+dG1wPC9maWxlbmFtZT4gd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBlc3RhYmxpc2ggdGhpcyBkaXJlY3RvcnkgaW4gYSBsb2NhdGlvbiBvdGhlcgorICAgICAgICAgICAgICAgICAgICB0aGFuIHRoZSBkZWZhdWx0LCB5b3UgY2FuIHVuY29tbWVudCBhbmQgZWRpdCB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjVE1QRElSID0gIiR7VE9QRElSfS90bXAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgQW4gZXhhbXBsZSB1c2UgZm9yIHRoaXMgc2NlbmFyaW8gaXMgdG8gc2V0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiB0byBhIGxvY2FsIGRpc2ssIHdoaWNoIGRvZXMKKyAgICAgICAgICAgICAgICAgICAgbm90IHVzZSBORlMsIHdoaWxlIGhhdmluZyB0aGUgQnVpbGQgRGlyZWN0b3J5IHVzZSBORlMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmaWxlc3lzdGVtIHVzZWQgYnkgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+IG11c3QKKyAgICAgICAgICAgICAgICAgICAgaGF2ZSBzdGFuZGFyZCBmaWxlc3lzdGVtIHNlbWFudGljcyAoaS5lLiBtaXhlZC1jYXNlIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIGFyZSB1bmlxdWUsIFBPU0lYIGZpbGUgbG9ja2luZywgYW5kIHBlcnNpc3RlbnQgaW5vZGVzKS4KKyAgICAgICAgICAgICAgICAgICAgRHVlIHRvIHZhcmlvdXMgaXNzdWVzIHdpdGggTkZTIGFuZCBidWdzIGluIHNvbWUKKyAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLCBORlMgZG9lcyBub3QgbWVldCB0aGlzIG1pbmltdW0KKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZW1lbnQuCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+IGNhbm5vdCBiZSBvbgorICAgICAgICAgICAgICAgICAgICBORlMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVE9PTENIQUlOX0hPU1RfVEFTSyc+PGdsb3NzdGVybT5UT09MQ0hBSU5fSE9TVF9UQVNLPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUT09MQ0hBSU5fSE9TVF9UQVNLW2RvY10gPSAiVGhpcyB2YXJpYWJsZSBsaXN0cyBwYWNrYWdlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHdoZW4gYnVpbGRpbmcgYW4gU0RLLCB3aGljaCBjb250YWlucyBhIGNyb3NzLWRldmVsb3BtZW50IGVudmlyb25tZW50LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgbGlzdHMgcGFja2FnZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgdXNlcyB3aGVuIGJ1aWxkaW5nIGFuIFNESywgd2hpY2ggY29udGFpbnMgYQorICAgICAgICAgICAgICAgICAgICBjcm9zcy1kZXZlbG9wbWVudCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHBhY2thZ2VzIHNwZWNpZmllZCBieSB0aGlzIHZhcmlhYmxlIGFyZSBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW4gc2V0IHRoYXQgcnVucyBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES01BQ0hJTkUnPjxmaWxlbmFtZT5TREtNQUNISU5FPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQgZWFjaCBwYWNrYWdlIHNob3VsZCB1c3VhbGx5IGhhdmUgdGhlIHByZWZpeAorICAgICAgICAgICAgICAgICAgICAibmF0aXZlc2RrLSIuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gYnVpbGRpbmcgYW4gU0RLIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIC1jIHBvcHVsYXRlX3NkayAmbHQ7aW1hZ2VuYW1lJmd0OzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICBhIGRlZmF1bHQgbGlzdCBvZiBwYWNrYWdlcyBpcyBzZXQgaW4gdGhpcyB2YXJpYWJsZSwgYnV0CisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gYWRkIGFkZGl0aW9uYWwgcGFja2FnZXMgdG8gdGhlIGxpc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIG9uIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbi1nZW5lcmF0aW9uJz5Dcm9zcy1EZXZlbG9wbWVudCBUb29sY2hhaW4gR2VuZXJhdGlvbjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBzZXR0aW5nIHVwIGEgY3Jvc3MtZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I2luc3RhbGxpbmctdGhlLWFkdCc+SW5zdGFsbGluZyB0aGUgQURUIGFuZCBUb29sY2hhaW5zPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVE9PTENIQUlOX09VVFBVVE5BTUUnPjxnbG9zc3Rlcm0+VE9PTENIQUlOX09VVFBVVE5BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRPT0xDSEFJTl9PVVRQVVROQU1FW2RvY10gPSAiRGVmaW5lcyB0aGUgbmFtZSB1c2VkIGZvciB0aGUgdG9vbGNoYWluIG91dHB1dC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGRlZmluZXMgdGhlIG5hbWUgdXNlZCBmb3IgdGhlIHRvb2xjaGFpbgorICAgICAgICAgICAgICAgICAgICBvdXRwdXQuCisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wb3B1bGF0ZS1zZGstKic+PGZpbGVuYW1lPnBvcHVsYXRlX3Nka19iYXNlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHNldHMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UT09MQ0hBSU5fT1VUUFVUTkFNRTwvZmlsZW5hbWU+IHZhcmlhYmxlIGFzCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVE9PTENIQUlOX09VVFBVVE5BTUUgPz0gIiR7U0RLX05BTUV9LXRvb2xjaGFpbi0ke1NES19WRVJTSU9OfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfTkFNRSc+PGZpbGVuYW1lPlNES19OQU1FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLX1ZFUlNJT04nPjxmaWxlbmFtZT5TREtfVkVSU0lPTjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVE9PTENIQUlOX1RBUkdFVF9UQVNLJz48Z2xvc3N0ZXJtPlRPT0xDSEFJTl9UQVJHRVRfVEFTSzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVE9PTENIQUlOX1RBUkdFVF9UQVNLW2RvY10gPSAiVGhpcyB2YXJpYWJsZSBsaXN0cyBwYWNrYWdlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHdoZW4gaXQgY3JlYXRlcyB0aGUgdGFyZ2V0IHBhcnQgb2YgYW4gU0RLLCB3aGljaCBpbmNsdWRlcyBsaWJyYXJpZXMgYW5kIGhlYWRlcnMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBsaXN0cyBwYWNrYWdlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICB1c2VzIHdoZW4gaXQgY3JlYXRlcyB0aGUgdGFyZ2V0IHBhcnQgb2YgYW4gU0RLCisgICAgICAgICAgICAgICAgICAgIChpLmUuIHRoZSBwYXJ0IGJ1aWx0IGZvciB0aGUgdGFyZ2V0IGhhcmR3YXJlKSwgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXMgbGlicmFyaWVzIGFuZCBoZWFkZXJzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBvbiBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW5zCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IGRldmVsb3BtZW50IGVudmlyb25tZW50LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4tZ2VuZXJhdGlvbic+Q3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluIEdlbmVyYXRpb248L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gc2V0dGluZyB1cCBhIGNyb3NzLWRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyNpbnN0YWxsaW5nLXRoZS1hZHQnPkluc3RhbGxpbmcgdGhlIEFEVCBhbmQgVG9vbGNoYWluczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRPUERJUic+PGdsb3NzdGVybT5UT1BESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRPUERJUltkb2NdID0gIlRoZSBCdWlsZCBEaXJlY3RvcnkuIEJpdEJha2UgYXV0b21hdGljYWxseSBzZXRzIHRoaXMgdmFyaWFibGUuIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdGhlIEJ1aWxkIERpcmVjdG9yeSB3aGVuIGJ1aWxkaW5nIGltYWdlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgdG9wLWxldmVsCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgYXV0b21hdGljYWxseSBzZXRzIHRoaXMgdmFyaWFibGUgd2hlbiB5b3UKKyAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZSB5b3VyIGJ1aWxkIGVudmlyb25tZW50IHVzaW5nIGVpdGhlcgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRSQU5TTEFURURfVEFSR0VUX0FSQ0gnPjxnbG9zc3Rlcm0+VFJBTlNMQVRFRF9UQVJHRVRfQVJDSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVFJBTlNMQVRFRF9UQVJHRVRfQVJDSFtkb2NdID0gIkEgc2FuaXRpemVkIHZlcnNpb24gb2YgVEFSR0VUX0FSQ0guIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB3aGVyZSB0aGUgYXJjaGl0ZWN0dXJlIGlzIG5lZWRlZCBpbiBhIHZhbHVlIHdoZXJlIHVuZGVyc2NvcmVzIGFyZSBub3QgYWxsb3dlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIHNhbml0aXplZCB2ZXJzaW9uIG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfQVJDSCc+PGZpbGVuYW1lPlRBUkdFVF9BUkNIPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgd2hlcmUgdGhlIGFyY2hpdGVjdHVyZSBpcyBuZWVkZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgYSB2YWx1ZSB3aGVyZSB1bmRlcnNjb3JlcyBhcmUgbm90IGFsbG93ZWQsIGZvciBleGFtcGxlCisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBwYWNrYWdlIGZpbGVuYW1lcy4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCBkYXNoIGNoYXJhY3RlcnMgcmVwbGFjZSBhbnkgdW5kZXJzY29yZQorICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzIHVzZWQgaW4gVEFSR0VUX0FSQ0guCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERvIG5vdCBlZGl0IHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVFVORV9BUkNIJz48Z2xvc3N0ZXJtPlRVTkVfQVJDSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVFVORV9BUkNIW2RvY10gPSAiVGhlIEdOVSBjYW5vbmljYWwgYXJjaGl0ZWN0dXJlIGZvciBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZSAoaS5lLiBhcm0sIGFybWViLCBtaXBzLCBtaXBzNjQsIGFuZCBzbyBmb3J0aCkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIEdOVSBjYW5vbmljYWwgYXJjaGl0ZWN0dXJlIGZvciBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZQorICAgICAgICAgICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+YXJtPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hcm1lYjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWlwczwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWlwczY0PC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGlzIHZhbHVlIHRvIHNldHVwIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UVU5FX0FSQ0g8L2ZpbGVuYW1lPiBkZWZpbml0aW9ucyBhcmUgc3BlY2lmaWMgdG8KKyAgICAgICAgICAgICAgICAgICAgYSBnaXZlbiBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZpbml0aW9ucyBjYW4gYmUgYSBzaW5nbGUgc3RhdGljIGRlZmluaXRpb24sIG9yCisgICAgICAgICAgICAgICAgICAgIGNhbiBiZSBkeW5hbWljYWxseSBhZGp1c3RlZC4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgZGV0YWlscyBmb3IgYSBnaXZlbiBDUFUgZmFtaWx5IGJ5IGxvb2tpbmcgYXQKKyAgICAgICAgICAgICAgICAgICAgdGhlIGFyY2hpdGVjdHVyZSdzIDxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL21pcHMvUkVBRE1FPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVzIGluZm9ybWF0aW9uIGZvciA8ZmlsZW5hbWU+VFVORV9BUkNIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgdG8gdGhlIDxmaWxlbmFtZT5taXBzPC9maWxlbmFtZT4gYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VFVORV9BUkNIPC9maWxlbmFtZT4gaXMgdGllZCBjbG9zZWx5IHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfQVJDSCc+PGZpbGVuYW1lPlRBUkdFVF9BUkNIPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBkZWZpbmVzIHRoZSB0YXJnZXQgbWFjaGluZSdzIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIEJpdEJha2UgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+bWV0YS9jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+KSBzZXRzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UQVJHRVRfQVJDSDwvZmlsZW5hbWU+IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEFSR0VUX0FSQ0ggPSAiJHtUVU5FX0FSQ0h9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCwgd2hpY2ggaXMgYnkgbm8gbWVhbnMgY29tcGxldGUgc2luY2UKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcyBhcmUgY29uZmlndXJhYmxlLCBzaG93cyBzdXBwb3J0ZWQgbWFjaGluZQorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGFybQorICAgICBpNTg2CisgICAgIHg4Nl82NAorICAgICBwb3dlcnBjCisgICAgIHBvd2VycGM2NAorICAgICBtaXBzCisgICAgIG1pcHNlbAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVFVORV9BU0FSR1MnPjxnbG9zc3Rlcm0+VFVORV9BU0FSR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRVTkVfQVNBUkdTW2RvY10gPSAiU3BlY2lmaWVzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBhc3NlbWJsZXIgZmxhZ3MgZm9yIHRoZSB0YXJnZXQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYXNzZW1ibGVyIGZsYWdzIGZvcgorICAgICAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNldCBvZiBmbGFncyBpcyBiYXNlZCBvbiB0aGUgc2VsZWN0ZWQgdHVuZSBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRVTkVfQVNBUkdTPC9maWxlbmFtZT4gaXMgc2V0IHVzaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSB0dW5lIGluY2x1ZGUgZmlsZXMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvPC9maWxlbmFtZT4gYW5kIGFyZQorICAgICAgICAgICAgICAgICAgICBpbmZsdWVuY2VkIHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVfRkVBVFVSRVMnPjxmaWxlbmFtZT5UVU5FX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni9hcmNoLXg4Ni5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlIGRlZmluZXMgdGhlIGZsYWdzIGZvciB0aGUgeDg2IGFyY2hpdGVjdHVyZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRVTkVfQVNBUkdTICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIi14MzIiLCAiIiwgZCl9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQcykgc2VsZWN0IHRoZSB0dW5lLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHNlbGVjdGVkIHR1bmUsIGluIHR1cm4sIGFmZmVjdHMgdGhlIHR1bmUgdmFyaWFibGVzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGVtc2VsdmVzIChpLmUuIHRoZSB0dW5lIGNhbiBzdXBwbHkgaXRzIG93bgorICAgICAgICAgICAgICAgICAgICAgICAgc2V0IG9mIGZsYWdzKS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRVTkVfQ0NBUkdTJz48Z2xvc3N0ZXJtPlRVTkVfQ0NBUkdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUVU5FX0NDQVJHU1tkb2NdID0gIlNwZWNpZmllcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgQyBjb21waWxlciBmbGFncyBmb3IgdGhlIHRhcmdldCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBDIGNvbXBpbGVyIGZsYWdzIGZvcgorICAgICAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNldCBvZiBmbGFncyBpcyBiYXNlZCBvbiB0aGUgc2VsZWN0ZWQgdHVuZSBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRVTkVfQ0NBUkdTPC9maWxlbmFtZT4gaXMgc2V0IHVzaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSB0dW5lIGluY2x1ZGUgZmlsZXMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvPC9maWxlbmFtZT4gYW5kIGFyZQorICAgICAgICAgICAgICAgICAgICBpbmZsdWVuY2VkIHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVfRkVBVFVSRVMnPjxmaWxlbmFtZT5UVU5FX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUHMpIHNlbGVjdCB0aGUgdHVuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzZWxlY3RlZCB0dW5lLCBpbiB0dXJuLCBhZmZlY3RzIHRoZSB0dW5lIHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICAgICAgdGhlbXNlbHZlcyAoaS5lLiB0aGUgdHVuZSBjYW4gc3VwcGx5IGl0cyBvd24KKyAgICAgICAgICAgICAgICAgICAgICAgIHNldCBvZiBmbGFncykuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UVU5FX0xEQVJHUyc+PGdsb3NzdGVybT5UVU5FX0xEQVJHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVFVORV9MREFSR1NbZG9jXSA9ICJTcGVjaWZpZXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGxpbmtlciBmbGFncyBmb3IgdGhlIHRhcmdldCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBsaW5rZXIgZmxhZ3MgZm9yCisgICAgICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGUgc2V0IG9mIGZsYWdzIGlzIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCB0dW5lIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VFVORV9MREFSR1M8L2ZpbGVuYW1lPiBpcyBzZXQgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIHR1bmUgaW5jbHVkZSBmaWxlcywgd2hpY2ggYXJlIHR5cGljYWxseSB1bmRlcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS88L2ZpbGVuYW1lPiBhbmQgYXJlCisgICAgICAgICAgICAgICAgICAgIGluZmx1ZW5jZWQgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVFVORV9GRUFUVVJFUyc+PGZpbGVuYW1lPlRVTkVfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2L2FyY2gteDg2LmluYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGUgZGVmaW5lcyB0aGUgZmxhZ3MgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVFVORV9MREFSR1MgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm14MzIiLCAiLW0gZWxmMzJfeDg2XzY0IiwgIiIsIGQpfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUHMpIHNlbGVjdCB0aGUgdHVuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzZWxlY3RlZCB0dW5lLCBpbiB0dXJuLCBhZmZlY3RzIHRoZSB0dW5lIHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICAgICAgdGhlbXNlbHZlcyAoaS5lLiB0aGUgdHVuZSBjYW4gc3VwcGx5IGl0cyBvd24KKyAgICAgICAgICAgICAgICAgICAgICAgIHNldCBvZiBmbGFncykuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UVU5FX0ZFQVRVUkVTJz48Z2xvc3N0ZXJtPlRVTkVfRkVBVFVSRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRVTkVfRkVBVFVSRVNbZG9jXSA9ICJGZWF0dXJlcyB1c2VkIHRvICJ0dW5lIiBhIGNvbXBpbGVyIGZvciBvcHRpbWFsIHVzZSBnaXZlbiBhIHNwZWNpZmljIHByb2Nlc3Nvci4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBGZWF0dXJlcyB1c2VkIHRvICJ0dW5lIiBhIGNvbXBpbGVyIGZvciBvcHRpbWFsIHVzZQorICAgICAgICAgICAgICAgICAgICBnaXZlbiBhIHNwZWNpZmljIHByb2Nlc3Nvci4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZlYXR1cmVzIGFyZSBkZWZpbmVkIHdpdGhpbiB0aGUgdHVuZSBmaWxlcyBhbmQgYWxsb3cKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzIChpLmUuIDxmaWxlbmFtZT5UVU5FXypBUkdTPC9maWxlbmFtZT4pIHRvIGJlCisgICAgICAgICAgICAgICAgICAgIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBiYXNlZCBvbiB0aGUgZmVhdHVyZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHZlcmlmaWVzIHRoZSBmZWF0dXJlcworICAgICAgICAgICAgICAgICAgICB0byBiZSBzdXJlIHRoZXkgYXJlIG5vdCBjb25mbGljdGluZyBhbmQgdGhhdCB0aGV5IGFyZQorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBCaXRCYWtlIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPikgZGVmaW5lcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VFVORV9GRUFUVVJFUzwvZmlsZW5hbWU+IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVFVORV9GRUFUVVJFUyA/Pz0gIiR7VFVORV9GRUFUVVJFU190dW5lLSR7REVGQVVMVFRVTkV9fSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERUZBVUxUVFVORSc+PGZpbGVuYW1lPkRFRkFVTFRUVU5FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRVTkVfUEtHQVJDSCc+PGdsb3NzdGVybT5UVU5FX1BLR0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRVTkVfUEtHQVJDSFtkb2NdID0gIlRoZSBwYWNrYWdlIGFyY2hpdGVjdHVyZSB1bmRlcnN0b29kIGJ5IHRoZSBwYWNrYWdpbmcgc3lzdGVtIHRvIGRlZmluZSB0aGUgYXJjaGl0ZWN0dXJlLCBBQkksIGFuZCB0dW5pbmcgb2Ygb3V0cHV0IHBhY2thZ2VzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBwYWNrYWdlIGFyY2hpdGVjdHVyZSB1bmRlcnN0b29kIGJ5IHRoZSBwYWNrYWdpbmcKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIHRvIGRlZmluZSB0aGUgYXJjaGl0ZWN0dXJlLCBBQkksIGFuZCB0dW5pbmcgb2YKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lmaWMgdHVuZSBpcyBkZWZpbmVkIHVzaW5nIHRoZSAiX3R1bmUiIG92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVFVORV9QS0dBUkNIX3R1bmUtPHJlcGxhY2VhYmxlPnR1bmU8L3JlcGxhY2VhYmxlPiA9ICI8cmVwbGFjZWFibGU+dHVuZTwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZXNlIHR1bmUtc3BlY2lmaWMgcGFja2FnZSBhcmNoaXRlY3R1cmVzIGFyZSBkZWZpbmVkIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSBtYWNoaW5lIGluY2x1ZGUgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiB0aGUgImNvcmUyLTMyIiB0dW5pbmcgYXMgdXNlZAorICAgICAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlMi5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRVTkVfUEtHQVJDSF90dW5lLWNvcmUyLTMyID0gImNvcmUyLTMyIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVFVORUFCSSc+PGdsb3NzdGVybT5UVU5FQUJJPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUVU5FQUJJW2RvY10gPSAiQW4gdW5kZXJseWluZyBBQkkgdXNlZCBieSBhIHBhcnRpY3VsYXIgdHVuaW5nIGluIGEgZ2l2ZW4gdG9vbGNoYWluIGxheWVyLiBUaGlzIGZlYXR1cmUgYWxsb3dzIHByb3ZpZGVycyB1c2luZyBwcmVidWlsdCBsaWJyYXJpZXMgdG8gY2hlY2sgY29tcGF0aWJpbGl0eSBvZiBhIHR1bmluZyBhZ2FpbnN0IHRoZWlyIHNlbGVjdGlvbiBvZiBsaWJyYXJpZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQW4gdW5kZXJseWluZyBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpIHVzZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgYSBwYXJ0aWN1bGFyIHR1bmluZyBpbiBhIGdpdmVuIHRvb2xjaGFpbiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXJzIHRoYXQgdXNlIHByZWJ1aWx0IGxpYnJhcmllcyBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VFVORUFCSTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVFVORUFCSV9PVkVSUklERSc+PGZpbGVuYW1lPlRVTkVBQklfT1ZFUlJJREU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVFVORUFCSV9XSElURUxJU1QnPjxmaWxlbmFtZT5UVU5FQUJJX1dISVRFTElTVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgdG8gY2hlY2sgY29tcGF0aWJpbGl0eSBvZiB0dW5pbmdzIGFnYWluc3QgdGhlaXIKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uIG9mIGxpYnJhcmllcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPlRVTkVBQkk8L2ZpbGVuYW1lPiBpcyB1bmRlZmluZWQsIHRoZW4gZXZlcnkKKyAgICAgICAgICAgICAgICAgICAgdHVuaW5nIGlzIGFsbG93ZWQuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc2FuaXR5Jz48ZmlsZW5hbWU+c2FuaXR5PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHRvIHNlZSBob3cgdGhlIHZhcmlhYmxlIGlzIHVzZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVFVORUFCSV9PVkVSUklERSc+PGdsb3NzdGVybT5UVU5FQUJJX09WRVJSSURFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUVU5FQUJJX09WRVJSSURFW2RvY10gPSAiSWYgc2V0LCBpZ25vcmVzIFRVTkVBQklfV0hJVEVMSVNULiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIElmIHNldCwgdGhlIE9wZW5FbWJlZGRlZCBzeXN0ZW0gaWdub3JlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVBQklfV0hJVEVMSVNUJz48ZmlsZW5hbWU+VFVORUFCSV9XSElURUxJU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVycyB0aGF0IHVzZSBwcmVidWlsdCBsaWJyYXJpZXMgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRVTkVBQklfT1ZFUlJJREU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRVTkVBQklfV0hJVEVMSVNUPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVFVORUFCSSc+PGZpbGVuYW1lPlRVTkVBQkk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIHRvIGNoZWNrIGNvbXBhdGliaWxpdHkgb2YgYSB0dW5pbmcgYWdhaW5zdCB0aGVpcgorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24gb2YgbGlicmFyaWVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXNhbml0eSc+PGZpbGVuYW1lPnNhbml0eTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyB0byBzZWUgaG93IHRoZSB2YXJpYWJsZSBpcyB1c2VkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRVTkVBQklfV0hJVEVMSVNUJz48Z2xvc3N0ZXJtPlRVTkVBQklfV0hJVEVMSVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUVU5FQUJJX1dISVRFTElTVFtkb2NdID0gIkEgd2hpdGVsaXN0IG9mIHBlcm1pc3NpYmxlIFRVTkVBQkkgdmFsdWVzLiAgSWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBzZXQsIGFsbCB2YWx1ZXMgYXJlIGFsbG93ZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSB3aGl0ZWxpc3Qgb2YgcGVybWlzc2libGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVBQkknPjxmaWxlbmFtZT5UVU5FQUJJPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcy4KKyAgICAgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPlRVTkVBQklfV0hJVEVMSVNUPC9maWxlbmFtZT4gaXMgbm90IHNldCwKKyAgICAgICAgICAgICAgICAgICAgYWxsIHR1bmVzIGFyZSBhbGxvd2VkLgorICAgICAgICAgICAgICAgICAgICBQcm92aWRlcnMgdGhhdCB1c2UgcHJlYnVpbHQgbGlicmFyaWVzIGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UVU5FQUJJX1dISVRFTElTVDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVFVORUFCSV9PVkVSUklERSc+PGZpbGVuYW1lPlRVTkVBQklfT1ZFUlJJREU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+VFVORUFCSTwvZmlsZW5hbWU+IHZhcmlhYmxlcyB0byBjaGVjaworICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmlsaXR5IG9mIGEgdHVuaW5nIGFnYWluc3QgdGhlaXIgc2VsZWN0aW9uIG9mCisgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zYW5pdHknPjxmaWxlbmFtZT5zYW5pdHk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgdG8gc2VlIGhvdyB0aGUgdmFyaWFibGUgaXMgdXNlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UVU5FQ09ORkxJQ1RTJz48Z2xvc3N0ZXJtPlRVTkVDT05GTElDVFNbPHJlcGxhY2VhYmxlPmZlYXR1cmU8L3JlcGxhY2VhYmxlPl08L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRVTkVDT05GTElDVFNbZG9jXSA9ICJTcGVjaWZpZXMgQ1BVIG9yIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UgKEFCSSkgdHVuaW5nIGZlYXR1cmVzIHRoYXQgY29uZmxpY3Qgd2l0aCBzcGVjaWZpZWQgZmVhdHVyZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgQ1BVIG9yIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UgKEFCSSkKKyAgICAgICAgICAgICAgICAgICAgdHVuaW5nIGZlYXR1cmVzIHRoYXQgY29uZmxpY3Qgd2l0aCA8cmVwbGFjZWFibGU+ZmVhdHVyZTwvcmVwbGFjZWFibGU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBLbm93biB0dW5pbmcgY29uZmxpY3RzIGFyZSBzcGVjaWZpZWQgaW4gdGhlIG1hY2hpbmUgaW5jbHVkZQorICAgICAgICAgICAgICAgICAgICBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvbWlwcy9hcmNoLW1pcHMuaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSBmaWxlIHRoYXQgbGlzdHMgdGhlICJvMzIiIGFuZCAibjY0IiBmZWF0dXJlcyBhcworICAgICAgICAgICAgICAgICAgICBjb25mbGljdGluZyB3aXRoIHRoZSAibjMyIiBmZWF0dXJlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRVTkVDT05GTElDVFNbbjMyXSA9ICJvMzIgbjY0IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVFVORVZBTElEJz48Z2xvc3N0ZXJtPlRVTkVWQUxJRFs8cmVwbGFjZWFibGU+ZmVhdHVyZTwvcmVwbGFjZWFibGU+XTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBUVU5FVkFMSURbZG9jXSA9ICJEZXNjcmlwdGlvbnMsIHN0b3JlZCBhcyBmbGFncywgb2YgdmFsaWQgdHVuaW5nIGZlYXR1cmVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIHZhbGlkIENQVSBvciBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpCisgICAgICAgICAgICAgICAgICAgIHR1bmluZyBmZWF0dXJlLgorICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lmaWVkIGZlYXR1cmUgaXMgc3RvcmVkIGFzIGEgZmxhZy4KKyAgICAgICAgICAgICAgICAgICAgVmFsaWQgZmVhdHVyZXMgYXJlIHNwZWNpZmllZCBpbiB0aGUgbWFjaGluZSBpbmNsdWRlIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybS5pbmM8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBmcm9tIHRoYXQgZmlsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBUVU5FVkFMSURbYmlnZW5kaWFuXSA9ICJFbmFibGUgYmlnLWVuZGlhbiBtb2RlLiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIG1hY2hpbmUgaW5jbHVkZSBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciB0aGVzZSBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktdSc+PHRpdGxlPlU8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVUJPT1RfQ09ORklHJz48Z2xvc3N0ZXJtPlVCT09UX0NPTkZJRzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBVQk9PVF9DT05GSUdbZG9jXSA9ICJDb25maWd1cmVzIHRoZSBVQk9PVF9NQUNISU5FIGFuZCBjYW4gYWxzbyBkZWZpbmUgSU1BR0VfRlNUWVBFUyBmb3IgaW5kaXZpZHVhbCBjYXNlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBDb25maWd1cmVzIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVUJPT1RfTUFDSElORSc+PGZpbGVuYW1lPlVCT09UX01BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kIGNhbiBhbHNvIGRlZmluZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+PGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIGluZGl2aWR1YWwgY2FzZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWZzbC1hcm08L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBVQk9PVF9DT05GSUcgPz89ICJzZCIKKyAgICAgVUJPT1RfQ09ORklHW3NkXSA9ICJteDZxc2FicmVhdXRvX2NvbmZpZyxzZGNhcmQiCisgICAgIFVCT09UX0NPTkZJR1tlaW1ub3JdID0gIm14NnFzYWJyZWF1dG9fZWltbm9yX2NvbmZpZyIKKyAgICAgVUJPT1RfQ09ORklHW25hbmRdID0gIm14NnFzYWJyZWF1dG9fbmFuZF9jb25maWcsdWJpZnMiCisgICAgIFVCT09UX0NPTkZJR1tzcGlub3JdID0gIm14NnFzYWJyZWF1dG9fc3Bpbm9yX2NvbmZpZyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsICJzZCIgaXMgc2VsZWN0ZWQgYXMgdGhlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHBvc3NpYmxlIGZvdXIgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VUJPT1RfTUFDSElORTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBUaGUgInNkIiBjb25maWd1cmF0aW9uIGRlZmluZXMgIm14NnFzYWJyZWF1dG9fY29uZmlnIgorICAgICAgICAgICAgICAgICAgICBhcyB0aGUgdmFsdWUgZm9yIDxmaWxlbmFtZT5VQk9PVF9NQUNISU5FPC9maWxlbmFtZT4sIHdoaWxlCisgICAgICAgICAgICAgICAgICAgIHRoZSAic2RjYXJkIiBzcGVjaWZpZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT4gdG8gdXNlIGZvciB0aGUgVS1ib290CisgICAgICAgICAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5VQk9PVF9DT05GSUc8L2ZpbGVuYW1lPiBpcyBoYW5kbGVkLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL3Bva3kvdHJlZS9tZXRhL2NsYXNzZXMvdWJvb3QtY29uZmlnLmJiY2xhc3MnPjxmaWxlbmFtZT51Ym9vdC1jb25maWc8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVVCT09UX0VOVFJZUE9JTlQnPjxnbG9zc3Rlcm0+VUJPT1RfRU5UUllQT0lOVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBVQk9PVF9FTlRSWVBPSU5UW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIFUtQm9vdCBpbWFnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgVS1Cb290IGltYWdlLgorICAgICAgICAgICAgICAgICAgICBEdXJpbmcgVS1Cb290IGltYWdlIGNyZWF0aW9uLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlVCT09UX0VOVFJZUE9JTlQ8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBwYXNzZWQKKyAgICAgICAgICAgICAgICAgICAgYXMgYSBjb21tYW5kLWxpbmUgcGFyYW1ldGVyIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dWJvb3QtbWtpbWFnZTwvZmlsZW5hbWU+IHV0aWxpdHkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVUJPT1RfTE9BREFERFJFU1MnPjxnbG9zc3Rlcm0+VUJPT1RfTE9BREFERFJFU1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVUJPT1RfTE9BREFERFJFU1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxvYWQgYWRkcmVzcyBmb3IgdGhlIFUtQm9vdCBpbWFnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGxvYWQgYWRkcmVzcyBmb3IgdGhlIFUtQm9vdCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgRHVyaW5nIFUtQm9vdCBpbWFnZSBjcmVhdGlvbiwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5VQk9PVF9MT0FEQUREUkVTUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIHBhc3NlZAorICAgICAgICAgICAgICAgICAgICBhcyBhIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXIgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51Ym9vdC1ta2ltYWdlPC9maWxlbmFtZT4gdXRpbGl0eS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VQk9PVF9MT0NBTFZFUlNJT04nPjxnbG9zc3Rlcm0+VUJPT1RfTE9DQUxWRVJTSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVCT09UX0xPQ0FMVkVSU0lPTltkb2NdID0gIkFwcGVuZHMgYSBzdHJpbmcgdG8gdGhlIG5hbWUgb2YgdGhlIGxvY2FsIHZlcnNpb24gb2YgdGhlIFUtQm9vdCBpbWFnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBcHBlbmRzIGEgc3RyaW5nIHRvIHRoZSBuYW1lIG9mIHRoZSBsb2NhbCB2ZXJzaW9uIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBVLUJvb3QgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBhc3N1bWluZyB0aGUgdmVyc2lvbiBvZiB0aGUgVS1Cb290IGltYWdlCisgICAgICAgICAgICAgICAgICAgIGJ1aWx0IHdhcyAiMjAxMy4xMCwgdGhlIGZ1bGwgdmVyc2lvbiBzdHJpbmcgcmVwb3J0ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgVS1Cb290IHdvdWxkIGJlICIyMDEzLjEwLXlvY3RvIiBnaXZlbiB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBVQk9PVF9MT0NBTFZFUlNJT04gPSAiLXlvY3RvIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVUJPT1RfTUFDSElORSc+PGdsb3NzdGVybT5VQk9PVF9NQUNISU5FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVCT09UX01BQ0hJTkVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHZhbHVlIHBhc3NlZCBvbiB0aGUgbWFrZSBjb21tYW5kIGxpbmUgd2hlbiBidWlsZGluZyBhIFUtQm9vdCBpbWFnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHZhbHVlIHBhc3NlZCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiBjb21tYW5kIGxpbmUgd2hlbiBidWlsZGluZworICAgICAgICAgICAgICAgICAgICBhIFUtQm9vdCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIGluZGljYXRlcyB0aGUgdGFyZ2V0IHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFlvdSB0eXBpY2FsbHkgc2V0IHRoaXMgdmFyaWFibGUgZnJvbSB0aGUgbWFjaGluZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbWFjaGluZS88cmVwbGFjZWFibGU+bWFjaGluZV9uYW1lPC9yZXBsYWNlYWJsZT4uY29uZjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUGxlYXNlIHNlZSB0aGUgIlNlbGVjdGlvbiBvZiBQcm9jZXNzb3IgQXJjaGl0ZWN0dXJlIGFuZAorICAgICAgICAgICAgICAgICAgICBCb2FyZCBUeXBlIiBzZWN0aW9uIGluIHRoZSBVLUJvb3QgUkVBRE1FIGZvciB2YWxpZCB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVUJPT1RfTUFLRV9UQVJHRVQnPjxnbG9zc3Rlcm0+VUJPT1RfTUFLRV9UQVJHRVQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVUJPT1RfTUFLRV9UQVJHRVRbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHRhcmdldCBjYWxsZWQgaW4gdGhlIE1ha2VmaWxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgdGFyZ2V0IGNhbGxlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHRhcmdldCBpcyAiYWxsIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VQk9PVF9TVUZGSVgnPjxnbG9zc3Rlcm0+VUJPT1RfU1VGRklYPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVCT09UX1NVRkZJWFtkb2NdID0gIlBvaW50cyB0byB0aGUgZ2VuZXJhdGVkIFUtQm9vdCBleHRlbnNpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBnZW5lcmF0ZWQgVS1Cb290IGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIDxmaWxlbmFtZT51LWJvb3Quc2I8L2ZpbGVuYW1lPiBoYXMgYQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnNiPC9maWxlbmFtZT4gZXh0ZW5zaW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBVLUJvb3QgZXh0ZW5zaW9uIGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmluPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VQk9PVF9UQVJHRVQnPjxnbG9zc3Rlcm0+VUJPT1RfVEFSR0VUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVCT09UX1RBUkdFVFtkb2NdID0gIlNwZWNpZmllcyB0aGUgdGFyZ2V0IHVzZWQgZm9yIGJ1aWxkaW5nIFUtQm9vdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHRhcmdldCB1c2VkIGZvciBidWlsZGluZyBVLUJvb3QuCisgICAgICAgICAgICAgICAgICAgIFRoZSB0YXJnZXQgaXMgcGFzc2VkIGRpcmVjdGx5IGFzIHBhcnQgb2YgdGhlICJtYWtlIiBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIChlLmcuIFNQTCBhbmQgQUlTKS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBzcGVjaWZpY2FsbHkgc2V0IHRoaXMgdmFyaWFibGUsIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgcHJvY2VzcyBwYXNzZXMgYW5kIHVzZXMgImFsbCIgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgZHVyaW5nIHRoZSBVLUJvb3QgYnVpbGRpbmcgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VTktOT1dOX0NPTkZJR1VSRV9XSElURUxJU1QnPjxnbG9zc3Rlcm0+VU5LTk9XTl9DT05GSUdVUkVfV0hJVEVMSVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVOS05PV05fQ09ORklHVVJFX1dISVRFTElTVFtkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2Ygb3B0aW9ucyB0aGF0LCBpZiByZXBvcnRlZCBieSB0aGUgY29uZmlndXJlIHNjcmlwdCBhcyBiZWluZyBpbnZhbGlkLCBzaG91bGQgbm90IGdlbmVyYXRlIGEgd2FybmluZyBkdXJpbmcgdGhlIGRvX2NvbmZpZ3VyZSB0YXNrLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2Ygb3B0aW9ucyB0aGF0LCBpZiByZXBvcnRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIHNjcmlwdCBhcyBiZWluZyBpbnZhbGlkLCBzaG91bGQgbm90IGdlbmVyYXRlIGEKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZyBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgTm9ybWFsbHksIGludmFsaWQgY29uZmlndXJlIG9wdGlvbnMgYXJlIHNpbXBseSBub3QgcGFzc2VkCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0IChlLmcuIHNob3VsZCBiZSByZW1vdmVkIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FQ09ORic+PGZpbGVuYW1lPkVYVFJBX09FQ09ORjwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGNvbW1vbiBvcHRpb25zLCBmb3IgZXhhbXBsZSwgZXhpc3QgdGhhdCBhcmUgcGFzc2VkCisgICAgICAgICAgICAgICAgICAgIHRvIGFsbCBjb25maWd1cmUgc2NyaXB0cyBhdCBhIGNsYXNzIGxldmVsIHRoYXQgbWlnaHQgbm90CisgICAgICAgICAgICAgICAgICAgIGJlIHZhbGlkIGZvciBzb21lIGNvbmZpZ3VyZSBzY3JpcHRzLgorICAgICAgICAgICAgICAgICAgICBJdCBmb2xsb3dzIHRoYXQgbm8gYmVuZWZpdCBleGlzdHMgaW4gc2VlaW5nIGEgd2FybmluZyBhYm91dAorICAgICAgICAgICAgICAgICAgICB0aGVzZSBvcHRpb25zLgorICAgICAgICAgICAgICAgICAgICBGb3IgdGhlc2UgY2FzZXMsIHRoZSBvcHRpb25zIGFyZSBhZGRlZCB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VU5LTk9XTl9DT05GSUdVUkVfV0hJVEVMSVNUPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBjb25maWd1cmUgYXJndW1lbnRzIGNoZWNrIHRoYXQgdXNlcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VU5LTk9XTl9DT05GSUdVUkVfV0hJVEVMSVNUPC9maWxlbmFtZT4gaXMgcGFydAorICAgICAgICAgICAgICAgICAgICBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaW5zYW5lJz48ZmlsZW5hbWU+aW5zYW5lPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGFuZCBpcyBvbmx5IGVuYWJsZWQgaWYgdGhlIHJlY2lwZSBpbmhlcml0cyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYXV0b3Rvb2xzJz48ZmlsZW5hbWU+YXV0b3Rvb2xzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVVQREFURVJDUE4nPjxnbG9zc3Rlcm0+VVBEQVRFUkNQTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBVUERBVEVSQ1BOW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYWNrYWdlIHRoYXQgY29udGFpbnMgdGhlIGluaXRzY3JpcHQgdGhhdCBpcyB0byBiZSBlbmFibGVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEZvciByZWNpcGVzIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXVwZGF0ZS1yYy5kJz48ZmlsZW5hbWU+dXBkYXRlLXJjLmQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIDxmaWxlbmFtZT5VUERBVEVSQ1BOPC9maWxlbmFtZT4gc3BlY2lmaWVzCisgICAgICAgICAgICAgICAgICAgIHRoZSBwYWNrYWdlIHRoYXQgY29udGFpbnMgdGhlIGluaXRzY3JpcHQgdGhhdCBpcyB0byBiZQorICAgICAgICAgICAgICAgICAgICBlbmFibGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAiJHtQTn0iLgorICAgICAgICAgICAgICAgICAgICBHaXZlbiB0aGF0IGFsbW9zdCBhbGwgcmVjaXBlcyB0aGF0IGluc3RhbGwgaW5pdHNjcmlwdHMKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSB0aGVtIGluIHRoZSBtYWluIHBhY2thZ2UgZm9yIHRoZSByZWNpcGUsIHlvdQorICAgICAgICAgICAgICAgICAgICByYXJlbHkgbmVlZCB0byBzZXQgdGhpcyB2YXJpYWJsZSBpbiBpbmRpdmlkdWFsIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVVNFX0RFVkZTJz48Z2xvc3N0ZXJtPlVTRV9ERVZGUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBVU0VfREVWRlNbZG9jXSA9ICJEZXRlcm1pbmVzIGlmIGRldnRtcGZzIGlzIHVzZWQgZm9yIC9kZXYgcG9wdWxhdGlvbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIGlmIDxmaWxlbmFtZT5kZXZ0bXBmczwvZmlsZW5hbWU+IGlzIHVzZWQgZm9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZGV2PC9maWxlbmFtZT4gcG9wdWxhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgdXNlZCBmb3IgPGZpbGVuYW1lPlVTRV9ERVZGUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzICIxIiB3aGVuIG5vIHZhbHVlIGlzIHNwZWNpZmljYWxseSBzZXQuCisgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgeW91IHdvdWxkIHNldCA8ZmlsZW5hbWU+VVNFX0RFVkZTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdG8gIjAiIGZvciBhIHN0YXRpY2FsbHkgcG9wdWxhdGVkIDxmaWxlbmFtZT4vZGV2PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzZWxlY3RpbmctZGV2LW1hbmFnZXInPlNlbGVjdGluZyBhIERldmljZSBNYW5hZ2VyPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvcgorICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVVNFX1ZUJz48Z2xvc3N0ZXJtPlVTRV9WVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBVU0VfVlRbZG9jXSA9ICJXaGVuIHVzaW5nIFN5c1Zpbml0LCBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRvIHJ1biBhIGdldHR5IG9uIGFueSB2aXJ0dWFsIHRlcm1pbmFscyBpbiBvcmRlciB0byBlbmFibGUgbG9nZ2luZyBpbiB0aHJvdWdoIHRob3NlIHRlcm1pbmFscy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I25ldy1yZWNpcGUtZW5hYmxpbmctc3lzdGVtLXNlcnZpY2VzJz5TeXNWaW5pdDwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRvIHJ1biBhCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR2V0dHlfJTI4VW5peCUyOSc+Z2V0dHk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBvbiBhbnkgdmlydHVhbCB0ZXJtaW5hbHMgaW4gb3JkZXIgdG8gZW5hYmxlIGxvZ2dpbmcgaW4KKyAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aG9zZSB0ZXJtaW5hbHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIHVzZWQgZm9yIDxmaWxlbmFtZT5VU0VfVlQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyAiMSIgd2hlbiBubyBkZWZhdWx0IHZhbHVlIGlzIHNwZWNpZmljYWxseSBzZXQuCisgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgeW91IHdvdWxkIHNldCA8ZmlsZW5hbWU+VVNFX1ZUPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdG8gIjAiIGluIHRoZSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgbWFjaGluZXMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBkbyBub3QgaGF2ZSBhIGdyYXBoaWNhbCBkaXNwbGF5IGF0dGFjaGVkIGFuZAorICAgICAgICAgICAgICAgICAgICB0aGVyZWZvcmUgZG8gbm90IG5lZWQgdmlydHVhbCB0ZXJtaW5hbCBmdW5jdGlvbmFsaXR5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVVTRVJfQ0xBU1NFUyc+PGdsb3NzdGVybT5VU0VSX0NMQVNTRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVVNFUl9DTEFTU0VTW2RvY10gPSAiTGlzdCBvZiBhZGRpdGlvbmFsIGNsYXNzZXMgdG8gdXNlIHdoZW4gYnVpbGRpbmcgaW1hZ2VzIHRoYXQgZW5hYmxlIGV4dHJhIGZlYXR1cmVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBjbGFzc2VzIHRvIGdsb2JhbGx5IGluaGVyaXQuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGNsYXNzZXMgYXJlIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgdG8gZW5hYmxlIGV4dHJhIGZlYXR1cmVzIChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idWlsZHN0YXRzPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbWFnZS1ta2xpYnM8L2ZpbGVuYW1lPiwgYW5kIHNvIGZvcnRoKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgbGlzdCBpcyBzZXQgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVVNFUl9DTEFTU0VTID89ICJidWlsZHN0YXRzIGltYWdlLW1rbGlicyBpbWFnZS1wcmVsaW5rIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG8vY29uZi9sb2NhbC5jb25mLnNhbXBsZTwvZmlsZW5hbWU+IGluCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVVNFUkFERF9FUlJPUl9EWU5BTUlDJz48Z2xvc3N0ZXJtPlVTRVJBRERfRVJST1JfRFlOQU1JQzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBVU0VSQUREX0VSUk9SX0RZTkFNSUNbZG9jXSA9ICJGb3JjZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gcHJvZHVjZSBhbiBlcnJvciBpZiB0aGUgdXNlciBpZGVudGlmaWNhdGlvbiAodWlkKSBhbmQgZ3JvdXAgaWRlbnRpZmljYXRpb24gKGdpZCkgdmFsdWVzIGFyZSBub3QgZGVmaW5lZCBpbiBmaWxlcy9wYXNzd2QgYW5kIGZpbGVzL2dyb3VwIGZpbGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEZvcmNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBwcm9kdWNlIGFuIGVycm9yCisgICAgICAgICAgICAgICAgICAgIGlmIHRoZSB1c2VyIGlkZW50aWZpY2F0aW9uICg8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4pIGFuZAorICAgICAgICAgICAgICAgICAgICBncm91cCBpZGVudGlmaWNhdGlvbiAoPGZpbGVuYW1lPmdpZDwvZmlsZW5hbWU+KSB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgYXJlIG5vdCBkZWZpbmVkIGluIDxmaWxlbmFtZT5maWxlcy9wYXNzd2Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmZpbGVzL2dyb3VwPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciB0aGUgYnVpbGQgc3lzdGVtIGlzIHRvIGR5bmFtaWNhbGx5CisgICAgICAgICAgICAgICAgICAgIGFwcGx5IDxmaWxlbmFtZT51aWQ8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpZDwvZmlsZW5hbWU+IHZhbHVlcy4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0aGUgPGZpbGVuYW1lPlVTRVJBRERfRVJST1JfRFlOQU1JQzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIGJ5IGRlZmF1bHQgbm90IHNldC4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHBsYW4gb24gdXNpbmcgc3RhdGljYWxseSBhc3NpZ25lZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2lkPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT51aWQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMsIHlvdSBzaG91bGQgc2V0CisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+VVNFUkFERF9FUlJPUl9EWU5BTUlDPC9maWxlbmFtZT4gdmFyaWFibGUgaW4KKyAgICAgICAgICAgICAgICAgICAgeW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgYXMKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBVU0VSQUREX0VSUk9SX0RZTkFNSUMgPSAiMSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBPdmVycmlkaW5nIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGltcGxpZXMgeW91IGFyZSBnb2luZyB0bworICAgICAgICAgICAgICAgICAgICBhbHNvIHRha2Ugc3RlcHMgdG8gc2V0IHN0YXRpYyA8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naWQ8L2ZpbGVuYW1lPiB2YWx1ZXMgdGhyb3VnaCB1c2Ugb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VU0VSQURERVhURU5TSU9OJz48ZmlsZW5hbWU+VVNFUkFEREVYVEVOU0lPTjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRVJBRERfVUlEX1RBQkxFUyc+PGZpbGVuYW1lPlVTRVJBRERfVUlEX1RBQkxFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VU0VSQUREX0dJRF9UQUJMRVMnPjxmaWxlbmFtZT5VU0VSQUREX0dJRF9UQUJMRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVVTRVJBRERfR0lEX1RBQkxFUyc+PGdsb3NzdGVybT5VU0VSQUREX0dJRF9UQUJMRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVVNFUkFERF9HSURfVEFCTEVTW2RvY10gPSAiU3BlY2lmaWVzIGEgcGFzc3dvcmQgZmlsZSB0byB1c2UgZm9yIG9idGFpbmluZyBzdGF0aWMgZ3JvdXAgaWRlbnRpZmljYXRpb24gKGdpZCkgdmFsdWVzIHdoZW4gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYWRkcyBhIGdyb3VwIHRvIHRoZSBzeXN0ZW0gZHVyaW5nIHBhY2thZ2UgaW5zdGFsbGF0aW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIHBhc3N3b3JkIGZpbGUgdG8gdXNlIGZvciBvYnRhaW5pbmcgc3RhdGljCisgICAgICAgICAgICAgICAgICAgIGdyb3VwIGlkZW50aWZpY2F0aW9uICg8ZmlsZW5hbWU+Z2lkPC9maWxlbmFtZT4pIHZhbHVlcworICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGFkZHMgYSBncm91cCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIGR1cmluZyBwYWNrYWdlIGluc3RhbGxhdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBhcHBseWluZyBzdGF0aWMgZ3JvdXAgaWRlbnRpZmljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5naWQ8L2ZpbGVuYW1lPikgdmFsdWVzLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBsb29rcyBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciBhIDxmaWxlbmFtZT5maWxlcy9ncm91cDwvZmlsZW5hbWU+IGZpbGUgYW5kIHRoZW4gYXBwbGllcworICAgICAgICAgICAgICAgICAgICB0aG9zZSA8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4gdmFsdWVzLgorICAgICAgICAgICAgICAgICAgICBTZXQgdGhlIHZhcmlhYmxlIGFzIGZvbGxvd3MgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVVNFUkFERF9HSURfVEFCTEVTID0gImZpbGVzL2dyb3VwIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VU0VSQURERVhURU5TSU9OJz48ZmlsZW5hbWU+VVNFUkFEREVYVEVOU0lPTjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byAidXNlcmFkZC1zdGF0aWNpZHMiIGNhdXNlcyB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHRvIHVzZSBzdGF0aWMgPGZpbGVuYW1lPmdpZDwvZmlsZW5hbWU+IHZhbHVlcy4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VU0VSQUREX1BBQ0tBR0VTJz48Z2xvc3N0ZXJtPlVTRVJBRERfUEFDS0FHRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVVNFUkFERF9QQUNLQUdFU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIHVzZXJhZGQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBpbmRpdmlkdWFsIHBhY2thZ2VzIHdpdGhpbiB0aGUgcmVjaXBlIHRoYXQgcmVxdWlyZSB1c2VycyBhbmQvb3IgZ3JvdXBzIHRvIGJlIGFkZGVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtdXNlcmFkZCc+PGZpbGVuYW1lPnVzZXJhZGQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIHRoZSBpbmRpdmlkdWFsIHBhY2thZ2VzIHdpdGhpbiB0aGUgcmVjaXBlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSB1c2VycyBhbmQvb3IgZ3JvdXBzIHRvIGJlIGFkZGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBzZXQgdGhpcyB2YXJpYWJsZSBpZiB0aGUgcmVjaXBlIGluaGVyaXRzIHRoZQorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgZW5hYmxlcyBhZGRpbmcgYSB1c2VyIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgbWFpbiBwYWNrYWdlIGluIGEgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFVTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiBmb2xsb3dzIHRoYXQgaWYgeW91IGFyZSBnb2luZyB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VVNFUkFERF9QQUNLQUdFUzwvZmlsZW5hbWU+IHZhcmlhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gc2V0IG9uZSBvciBtb3JlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRVJBRERfUEFSQU0nPjxmaWxlbmFtZT5VU0VSQUREX1BBUkFNPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUdST1VQQUREX1BBUkFNJz48ZmlsZW5hbWU+R1JPVVBBRERfUEFSQU08L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUdST1VQTUVNU19QQVJBTSc+PGZpbGVuYW1lPkdST1VQTUVNU19QQVJBTTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VU0VSQUREX1BBUkFNJz48Z2xvc3N0ZXJtPlVTRVJBRERfUEFSQU08L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVVNFUkFERF9QQVJBTVtkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIHVzZXJhZGQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGZvciBhIHBhY2thZ2Ugd2hhdCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBwYXNzZWQgdG8gdGhlIHVzZXJhZGQgY29tbWFuZCBpZiB5b3Ugd2lzaCB0byBhZGQgYSB1c2VyIHRvIHRoZSBzeXN0ZW0gd2hlbiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy11c2VyYWRkJz48ZmlsZW5hbWU+dXNlcmFkZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgZm9yIGEgcGFja2FnZSB3aGF0IHBhcmFtZXRlcnMgc2hvdWxkIGJlIHBhc3NlZAorICAgICAgICAgICAgICAgICAgICB0byB0aGUgPGZpbGVuYW1lPnVzZXJhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIGlmIHlvdSB3aXNoIHRvIGFkZCBhIHVzZXIgdG8gdGhlIHN5c3RlbSB3aGVuIHRoZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIGlzIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGZyb20gdGhlIDxmaWxlbmFtZT5kYnVzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFVTRVJBRERfUEFSQU1fJHtQTn0gPSAiLS1zeXN0ZW0gLS1ob21lICR7bG9jYWxzdGF0ZWRpcn0vbGliL2RidXMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbm8tY3JlYXRlLWhvbWUgLS1zaGVsbCAvYmluL2ZhbHNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXVzZXItZ3JvdXAgbWVzc2FnZWJ1cyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIHN0YW5kYXJkIExpbnV4IHNoZWxsIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVzZXJhZGQ8L2ZpbGVuYW1lPiwgc2VlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi84L3VzZXJhZGQnPjwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVVTRVJBRERfVUlEX1RBQkxFUyc+PGdsb3NzdGVybT5VU0VSQUREX1VJRF9UQUJMRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVVNFUkFERF9VSURfVEFCTEVTW2RvY10gPSAiU3BlY2lmaWVzIGEgcGFzc3dvcmQgZmlsZSB0byB1c2UgZm9yIG9idGFpbmluZyBzdGF0aWMgdXNlciBpZGVudGlmaWNhdGlvbiAodWlkKSB2YWx1ZXMgd2hlbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhZGRzIGEgdXNlciB0byB0aGUgc3lzdGVtIGR1cmluZyBwYWNrYWdlIGluc3RhbGxhdGlvbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBwYXNzd29yZCBmaWxlIHRvIHVzZSBmb3Igb2J0YWluaW5nIHN0YXRpYworICAgICAgICAgICAgICAgICAgICB1c2VyIGlkZW50aWZpY2F0aW9uICg8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4pIHZhbHVlcworICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGFkZHMgYSB1c2VyIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gZHVyaW5nIHBhY2thZ2UgaW5zdGFsbGF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGFwcGx5aW5nIHN0YXRpYyB1c2VyIGlkZW50aWZpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4pIHZhbHVlcywgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gbG9va3MgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgYSA8ZmlsZW5hbWU+ZmlsZXMvcGFzc3dkPC9maWxlbmFtZT4gZmlsZSBhbmQgdGhlbiBhcHBsaWVzCisgICAgICAgICAgICAgICAgICAgIHRob3NlIDxmaWxlbmFtZT51aWQ8L2ZpbGVuYW1lPiB2YWx1ZXMuCisgICAgICAgICAgICAgICAgICAgIFNldCB0aGUgdmFyaWFibGUgYXMgZm9sbG93cyBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBVU0VSQUREX1VJRF9UQUJMRVMgPSAiZmlsZXMvcGFzc3dkIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VU0VSQURERVhURU5TSU9OJz48ZmlsZW5hbWU+VVNFUkFEREVYVEVOU0lPTjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byAidXNlcmFkZC1zdGF0aWNpZHMiIGNhdXNlcyB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHRvIHVzZSBzdGF0aWMgPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+IHZhbHVlcy4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VU0VSQURERVhURU5TSU9OJz48Z2xvc3N0ZXJtPlVTRVJBRERFWFRFTlNJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVVNFUkFEREVYVEVOU0lPTltkb2NdID0gIldoZW4gc2V0IHRvICJ1c2VyYWRkLXN0YXRpY2lkcyIsIGNhdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBiYXNlIGFsbCB1c2VyIGFuZCBncm91cCBhZGRpdGlvbnMgb24gYSBzdGF0aWMgcGFzc3dkIGFuZCBncm91cCBmaWxlcyBmb3VuZCBpbiBCQlBBVEguIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzZXQgdG8gInVzZXJhZGQtc3RhdGljaWRzIiwgY2F1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGJhc2UgYWxsIHVzZXIgYW5kIGdyb3VwCisgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9ucyBvbiBhIHN0YXRpYworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFzc3dkPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ncm91cDwvZmlsZW5hbWU+IGZpbGVzIGZvdW5kIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIHVzZSBzdGF0aWMgdXNlciBpZGVudGlmaWNhdGlvbiAoPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICBhbmQgZ3JvdXAgaWRlbnRpZmljYXRpb24gKDxmaWxlbmFtZT5naWQ8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzLCBzZXQgdGhlIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGFzIGZvbGxvd3MgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVVNFUkFEREVYVEVOU0lPTiA9ICJ1c2VyYWRkLXN0YXRpY2lkcyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgdGhpcyB2YXJpYWJsZSB0byB1c2Ugc3RhdGljCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5naWQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGNhdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBlbXBsb3kKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtdXNlcmFkZC1zdGF0aWNpZHMnPjxmaWxlbmFtZT51c2VyYWRkLXN0YXRpY2lkczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHVzZSBzdGF0aWMgPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2lkPC9maWxlbmFtZT4gaW5mb3JtYXRpb24sIHlvdSBtdXN0IGFsc28KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGUgPGZpbGVuYW1lPmZpbGVzL3Bhc3N3ZDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZXMvZ3JvdXA8L2ZpbGVuYW1lPiBmaWxlcyBieSBzZXR0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUkFERF9VSURfVEFCTEVTJz48ZmlsZW5hbWU+VVNFUkFERF9VSURfVEFCTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUkFERF9HSURfVEFCTEVTJz48ZmlsZW5hbWU+VVNFUkFERF9HSURfVEFCTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCB5b3Ugc2hvdWxkIGFsc28gc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUkFERF9FUlJPUl9EWU5BTUlDJz48ZmlsZW5hbWU+VVNFUkFERF9FUlJPUl9EWU5BTUlDPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKzwhLS0gICAgICAgICAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS12Jz48dGl0bGU+VjwvdGl0bGU+LS0+Cis8IS0tICAgICAgICAgICAgPC9nbG9zc2Rpdj4tLT4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXcnPjx0aXRsZT5XPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVdBUk5fUUEnPjxnbG9zc3Rlcm0+V0FSTl9RQTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBXQVJOX1FBW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBxdWFsaXR5IGFzc3VyYW5jZSBjaGVja3Mgd2hvc2UgZmFpbHVyZXMgYXJlIHJlcG9ydGVkIGFzIHdhcm5pbmdzIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcXVhbGl0eSBhc3N1cmFuY2UgY2hlY2tzIHdob3NlIGZhaWx1cmVzIGFyZQorICAgICAgICAgICAgICAgICAgICByZXBvcnRlZCBhcyB3YXJuaW5ncyBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGEgbGlzdCBvZiB0aGUgY2hlY2tzIHlvdSBjYW4gY29udHJvbCB3aXRoIHRoaXMgdmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWluc2FuZSc+PGZpbGVuYW1lPmluc2FuZS5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVdPUktESVInPjxnbG9zc3Rlcm0+V09SS0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBXT1JLRElSW2RvY10gPSAiVGhlIHBhdGhuYW1lIG9mIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBidWlsZHMgYSByZWNpcGUuIFRoaXMgZGlyZWN0b3J5IGlzIGxvY2F0ZWQgd2l0aGluIHRoZSBUTVBESVIgZGlyZWN0b3J5IHN0cnVjdHVyZSBhbmQgY2hhbmdlcyBhcyBkaWZmZXJlbnQgcGFja2FnZXMgYXJlIGJ1aWx0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBwYXRobmFtZSBvZiB0aGUgd29yayBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gYnVpbGRzIGEgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBpcyBsb2NhdGVkIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgc3RydWN0dXJlIGFuZCBpcyBzcGVjaWZpYyB0byB0aGUgcmVjaXBlIGJlaW5nCisgICAgICAgICAgICAgICAgICAgIGJ1aWx0IGFuZCB0aGUgc3lzdGVtIGZvciB3aGljaCBpdCBpcyBiZWluZyBidWlsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT4gZGlyZWN0b3J5IGlzIGRlZmluZWQgYXMKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAke1RNUERJUn0vd29yay8ke01VTFRJTUFDSF9UQVJHRVRfU1lTfS8ke1BOfS8ke0VYVEVORFBFfSR7UFZ9LSR7UFJ9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGFjdHVhbCBkaXJlY3RvcnkgZGVwZW5kcyBvbiBzZXZlcmFsIHRoaW5nczoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0b3AtbGV2ZWwgYnVpbGQgb3V0cHV0IGRpcmVjdG9yeTwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PGxpbmsgbGlua2VuZD0ndmFyLU1VTFRJTUFDSF9UQVJHRVRfU1lTJz48ZmlsZW5hbWU+TVVMVElNQUNIX1RBUkdFVF9TWVM8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRhcmdldCBzeXN0ZW0gaWRlbnRpZmllcjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSBuYW1lPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48bGluayBsaW5rZW5kPSd2YXItRVhURU5EUEUnPjxmaWxlbmFtZT5FWFRFTkRQRTwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZXBvY2ggLSAoaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEUnPjxmaWxlbmFtZT5QRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBzcGVjaWZpZWQsIHdoaWNoIGlzIHVzdWFsbHkgdGhlIGNhc2UgZm9yIG1vc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzLCB0aGVuIDxmaWxlbmFtZT5FWFRFTkRQRTwvZmlsZW5hbWU+IGlzIGJsYW5rKTwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PGxpbmsgbGlua2VuZD0ndmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSB2ZXJzaW9uPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48bGluayBsaW5rZW5kPSd2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVjaXBlIHJldmlzaW9uPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGFzc3VtZSBhIFNvdXJjZSBEaXJlY3RvcnkgdG9wLWxldmVsIGZvbGRlcgorICAgICAgICAgICAgICAgICAgICBuYW1lIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4sIGEgZGVmYXVsdCBCdWlsZCBEaXJlY3RvcnkgYXQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3kvYnVpbGQ8L2ZpbGVuYW1lPiwgYW5kIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXV4ODYtcG9reS1saW51eDwvZmlsZW5hbWU+IG1hY2hpbmUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIHN1cHBvc2UgeW91ciByZWNpcGUgaXMgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvb18xLjMuMC1yMC5iYjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSB3b3JrIGRpcmVjdG9yeSB0aGUgYnVpbGQgc3lzdGVtIHVzZXMgdG8KKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgdGhlIHBhY2thZ2Ugd291bGQgYmUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwb2t5L2J1aWxkL3RtcC93b3JrL3FlbXV4ODYtcG9reS1saW51eC9mb28vMS4zLjAtcjAKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS14Jz48dGl0bGU+WDwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1YU0VSVkVSJz48Z2xvc3N0ZXJtPlhTRVJWRVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgWFNFUlZFUltkb2NdID0gIlNwZWNpZmllcyB0aGUgcGFja2FnZXMgdGhhdCBzaG91bGQgYmUgaW5zdGFsbGVkCisgICAgICAgICAgICAgICB0byBwcm92aWRlIGFuIFggc2VydmVyIGFuZCBkcml2ZXJzIGZvciB0aGUgY3VycmVudCBtYWNoaW5lLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGFja2FnZXMgdGhhdCBzaG91bGQgYmUgaW5zdGFsbGVkIHRvCisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGUgYW4gWCBzZXJ2ZXIgYW5kIGRyaXZlcnMgZm9yIHRoZSBjdXJyZW50IG1hY2hpbmUsCisgICAgICAgICAgICAgICAgICAgIGFzc3VtaW5nIHlvdXIgaW1hZ2UgZGlyZWN0bHkgaW5jbHVkZXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC1jb3JlLXgxMS14c2VydmVyPC9maWxlbmFtZT4gb3IsCisgICAgICAgICAgICAgICAgICAgIHBlcmhhcHMgaW5kaXJlY3RseSwgaW5jbHVkZXMgIngxMS1iYXNlIiBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgb2YgPGZpbGVuYW1lPlhTRVJWRVI8L2ZpbGVuYW1lPiwgaWYgbm90CisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBpbiB0aGUgbWFjaGluZSBjb25maWd1cmF0aW9uLCBpcworICAgICAgICAgICAgICAgICAgICAieHNlcnZlci14b3JnIHhmODYtdmlkZW8tZmJkZXYgeGY4Ni1pbnB1dC1ldmRldiIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworPCEtLSAgICAgICAgICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXknPjx0aXRsZT5ZPC90aXRsZT4tLT4KKzwhLS0gICAgICAgICAgICA8L2dsb3NzZGl2Pi0tPgorCis8IS0tICAgICAgICAgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnkteic+PHRpdGxlPlo8L3RpdGxlPi0tPgorPCEtLSAgICAgICAgICAgIDwvZ2xvc3NkaXY+LS0+CisKKzwvZ2xvc3Nhcnk+Cis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi12YXJsb2NhbGl0eS54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtdmFybG9jYWxpdHkueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZjg3MzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtdmFybG9jYWxpdHkueG1sCkBAIC0wLDAgKzEsMTk2IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ncmVmLXZhcmxvY2FsaXR5Jz4KKyAgICA8dGl0bGU+VmFyaWFibGUgQ29udGV4dDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hpbGUgeW91IGNhbiB1c2UgbW9zdCB2YXJpYWJsZXMgaW4gYWxtb3N0IGFueSBjb250ZXh0IHN1Y2ggYXMKKyAgICAgICAgPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4sIDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+LAorICAgICAgICA8ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+LCBhbmQgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGVzLAorICAgICAgICBzb21lIHZhcmlhYmxlcyBhcmUgb2Z0ZW4gYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBsb2NhbGl0eSBvciBjb250ZXh0LgorICAgICAgICBUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIHNvbWUgY29tbW9uIGFzc29jaWF0aW9ucy4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXZhcmxvY2FsaXR5LWNvbmZpZ3VyYXRpb24nPgorICAgICAgICA8dGl0bGU+Q29uZmlndXJhdGlvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN1YnNlY3Rpb25zIHByb3ZpZGUgbGlzdHMgb2YgdmFyaWFibGVzIHdob3NlIGNvbnRleHQgaXMKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IGRpc3RyaWJ1dGlvbiwgbWFjaGluZSwgYW5kIGxvY2FsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3JlZi12YXJsb2NhbGl0eS1jb25maWctZGlzdHJvJz4KKyAgICAgICAgICAgIDx0aXRsZT5EaXN0cmlidXRpb24gKERpc3Rybyk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBsaXN0cyB2YXJpYWJsZXMgd2hvc2UgY29uZmlndXJhdGlvbiBjb250ZXh0IGlzIHRoZQorICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uLCBvciBkaXN0cm8uCisgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURJU1RSTyc+RElTVFJPPC9saW5rPjwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRElTVFJPX05BTUUnPkRJU1RST19OQU1FPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19WRVJTSU9OJz5ESVNUUk9fVkVSU0lPTjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1NQUlOVEFJTkVSJz5NQUlOVEFJTkVSPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+UEFDS0FHRV9DTEFTU0VTPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9PUyc+VEFSR0VUX09TPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9GUFUnPlRBUkdFVF9GUFU8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVENNT0RFJz5UQ01PREU8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVENMSUJDJz5UQ0xJQkM8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncmVmLXZhcmxvY2FsaXR5LWNvbmZpZy1tYWNoaW5lJz4KKyAgICAgICAgICAgIDx0aXRsZT5NYWNoaW5lPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGxpc3RzIHZhcmlhYmxlcyB3aG9zZSBjb25maWd1cmF0aW9uIGNvbnRleHQgaXMgdGhlCisgICAgICAgICAgICAgICAgbWFjaGluZS4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfQVJDSCc+VEFSR0VUX0FSQ0g8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1TRVJJQUxfQ09OU09MRVMnPlNFUklBTF9DT05TT0xFUzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfRVhUUkFfQVJDSFMnPlBBQ0tBR0VfRVhUUkFfQVJDSFM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GU1RZUEVTJz5JTUFHRV9GU1RZUEVTPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORV9GRUFUVVJFUyc+TUFDSElORV9GRUFUVVJFUzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRVhUUkFfUkRFUEVORFMnPk1BQ0hJTkVfRVhUUkFfUkRFUEVORFMKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGluaz48L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTJz5NQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpbms+PC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFMnPk1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpbms+PC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFMnPgorICAgICAgICAgICAgICAgICAgICAgICAgTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFM8L2xpbms+PC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdyZWYtdmFybG9jYWxpdHktY29uZmlnLWxvY2FsJz4KKyAgICAgICAgICAgIDx0aXRsZT5Mb2NhbDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBsaXN0cyB2YXJpYWJsZXMgd2hvc2UgY29uZmlndXJhdGlvbiBjb250ZXh0IGlzIHRoZQorICAgICAgICAgICAgICAgIGxvY2FsIGNvbmZpZ3VyYXRpb24gdGhyb3VnaCB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRElTVFJPJz5ESVNUUk88L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz5NQUNISU5FPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRExfRElSJz5ETF9ESVI8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1CQkZJTEVTJz5CQkZJTEVTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRVhUUkFfSU1BR0VfRkVBVFVSRVMnPkVYVFJBX0lNQUdFX0ZFQVRVUkVTCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpbms+PC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9DTEFTU0VTJz5QQUNLQUdFX0NMQVNTRVM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9OVU1CRVJfVEhSRUFEUyc+QkJfTlVNQkVSX1RIUkVBRFM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1CQklOQ0xVREVMT0dTJz5CQklOQ0xVREVMT0dTPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTic+CisgICAgICAgICAgICAgICAgICAgICAgICBFTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OPC9saW5rPjwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXZhcmxvY2FsaXR5LXJlY2lwZXMnPgorICAgICAgICA8dGl0bGU+UmVjaXBlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN1YnNlY3Rpb25zIHByb3ZpZGUgbGlzdHMgb2YgdmFyaWFibGVzIHdob3NlIGNvbnRleHQgaXMKKyAgICAgICAgICAgIHJlY2lwZXM6IHJlcXVpcmVkLCBkZXBlbmRlbmNpZXMsIHBhdGgsIGFuZCBleHRyYSBidWlsZCBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdyZWYtdmFybG9jYWxpdHktcmVjaXBlLXJlcXVpcmVkJz4KKyAgICAgICAgICAgIDx0aXRsZT5SZXF1aXJlZDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBsaXN0cyB2YXJpYWJsZXMgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTElDRU5TRSc+TElDRU5TRTwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUxJQ19GSUxFU19DSEtTVU0nPkxJQ19GSUxFU19DSEtTVU08L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz5TUkNfVVJJPC9saW5rPjwvZmlsZW5hbWU+IC0gdXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgaW4gcmVjaXBlcyB0aGF0IGZldGNoIGxvY2FsIG9yIHJlbW90ZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3JlZi12YXJsb2NhbGl0eS1yZWNpcGUtZGVwZW5kZW5jaWVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5EZXBlbmRlbmNpZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gbGlzdHMgdmFyaWFibGVzIHRoYXQgZGVmaW5lIHJlY2lwZSBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+REVQRU5EUzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz5SREVQRU5EUzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVJSRUNPTU1FTkRTJz5SUkVDT01NRU5EUzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVJDT05GTElDVFMnPlJDT05GTElDVFM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVQTEFDRVMnPlJSRVBMQUNFUzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncmVmLXZhcmxvY2FsaXR5LXJlY2lwZS1wYXRocyc+CisgICAgICAgICAgICA8dGl0bGU+UGF0aHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gbGlzdHMgdmFyaWFibGVzIHRoYXQgZGVmaW5lIHJlY2lwZSBwYXRocy4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz5XT1JLRElSPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUyc+UzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTJz5GSUxFUzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncmVmLXZhcmxvY2FsaXR5LXJlY2lwZS1idWlsZCc+CisgICAgICAgICAgICA8dGl0bGU+RXh0cmEgQnVpbGQgSW5mb3JtYXRpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gbGlzdHMgdmFyaWFibGVzIHRoYXQgZGVmaW5lIGV4dHJhIGJ1aWxkIGluZm9ybWF0aW9uIGZvciByZWNpcGVzLgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FQ01BS0UnPkVYVFJBX09FQ01BS0U8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRUNPTkYnPkVYVFJBX09FQ09ORjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FTUFLRSc+RVhUUkFfT0VNQUtFPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRVMnPlBBQ0tBR0VTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVGQVVMVF9QUkVGRVJFTkNFJz5ERUZBVUxUX1BSRUZFUkVOQ0UKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGluaz48L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NCBzcGVsbCBzcGVsbGxhbmc9ZW5fZ2IKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVzb3VyY2VzLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3Jlc291cmNlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI5OWY5ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3Jlc291cmNlcy54bWwKQEAgLTAsMCArMSwxMjMgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdyZXNvdXJjZXMnPgorPHRpdGxlPkNvbnRyaWJ1dGluZyB0byB0aGUgWW9jdG8gUHJvamVjdDwvdGl0bGU+CisKKzxzZWN0aW9uIGlkPSdyZXNvdXJjZXMtaW50cm8nPgorICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB0ZWFtIGlzIGhhcHB5IGZvciBwZW9wbGUgdG8gZXhwZXJpbWVudCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICBBIG51bWJlciBvZiBwbGFjZXMgZXhpc3QgdG8gZmluZCBoZWxwIGlmIHlvdSBydW4gaW50byBkaWZmaWN1bHRpZXMgb3IgZmluZCBidWdzLgorICAgICAgICBUbyBmaW5kIG91dCBob3cgdG8gZG93bmxvYWQgc291cmNlIGNvZGUsCisgICAgICAgIHNlZSB0aGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2xvY2FsLXlwLXJlbGVhc2UnPllvY3RvIFByb2plY3QgUmVsZWFzZTwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZXNvdXJjZXMtYnVndHJhY2tlcic+CisgICAgPHRpdGxlPlRyYWNraW5nIEJ1Z3M8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIElmIHlvdSBmaW5kIHByb2JsZW1zIHdpdGggdGhlIFlvY3RvIFByb2plY3QsIHlvdSBzaG91bGQgcmVwb3J0IHRoZW0gdXNpbmcgdGhlCisgICAgICAgIEJ1Z3ppbGxhIGFwcGxpY2F0aW9uIGF0IDx1bGluayB1cmw9JyZZT0NUT19CVUdaSUxMQV9VUkw7Jz48L3VsaW5rPi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZXNvdXJjZXMtbWFpbGluZ2xpc3QnPgorICAgIDx0aXRsZT5NYWlsaW5nIGxpc3RzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBBIG51bWJlciBvZiBtYWlsaW5nIGxpc3RzIG1haW50YWluZWQgYnkgdGhlIFlvY3RvIFByb2plY3QgZXhpc3QKKyAgICAgICAgYXMgd2VsbCBhcyByZWxhdGVkIE9wZW5FbWJlZGRlZCBtYWlsaW5nIGxpc3RzIGZvciBkaXNjdXNzaW9uLAorICAgICAgICBwYXRjaCBzdWJtaXNzaW9uIGFuZCBhbm5vdW5jZW1lbnRzLgorICAgICAgICBUbyBzdWJzY3JpYmUgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmcgbWFpbGluZyBsaXN0cywgY2xpY2sgb24gdGhlCisgICAgICAgIGFwcHJvcHJpYXRlIFVSTCBpbiB0aGUgZm9sbG93aW5nIGxpc3QgYW5kIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19MSVNUU19VUkw7L2xpc3RpbmZvL3lvY3RvJz48L3VsaW5rPiAtCisgICAgICAgICAgICAgICAgR2VuZXJhbCBZb2N0byBQcm9qZWN0IGRpc2N1c3Npb24gbWFpbGluZyBsaXN0LiA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmT0VfTElTVFNfVVJMOy9saXN0aW5mby9vcGVuZW1iZWRkZWQtY29yZSc+PC91bGluaz4gLQorICAgICAgICAgICAgICAgIERpc2N1c3Npb24gbWFpbGluZyBsaXN0IGFib3V0IE9wZW5FbWJlZGRlZC1Db3JlICh0aGUgY29yZSBtZXRhZGF0YSkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJk9FX0xJU1RTX1VSTDsvbGlzdGluZm8vb3BlbmVtYmVkZGVkLWRldmVsJz48L3VsaW5rPiAtCisgICAgICAgICAgICAgICAgRGlzY3Vzc2lvbiBtYWlsaW5nIGxpc3QgYWJvdXQgT3BlbkVtYmVkZGVkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZPRV9MSVNUU19VUkw7L2xpc3RpbmZvL2JpdGJha2UtZGV2ZWwnPjwvdWxpbms+IC0KKyAgICAgICAgICAgICAgICBEaXNjdXNzaW9uIG1haWxpbmcgbGlzdCBhYm91dCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNiaXRiYWtlLXRlcm0nPkJpdEJha2U8L3VsaW5rPgorICAgICAgICAgICAgICAgIGJ1aWxkIHRvb2wuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0xJU1RTX1VSTDsvbGlzdGluZm8vcG9reSc+PC91bGluaz4gLQorICAgICAgICAgICAgICAgIERpc2N1c3Npb24gbWFpbGluZyBsaXN0IGFib3V0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcG9reSc+UG9reTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19MSVNUU19VUkw7L2xpc3RpbmZvL3lvY3RvLWFubm91bmNlJz48L3VsaW5rPiAtCisgICAgICAgICAgICAgICAgTWFpbGluZyBsaXN0IHRvIHJlY2VpdmUgb2ZmaWNpYWwgWW9jdG8gUHJvamVjdCByZWxlYXNlIGFuZCBtaWxlc3RvbmUKKyAgICAgICAgICAgICAgICBhbm5vdW5jZW1lbnRzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisgICAgRm9yIG1vcmUgWW9jdG8gUHJvamVjdC1yZWxhdGVkIG1haWxpbmcgbGlzdHMsIHNlZSB0aGUgWW9jdG8gUHJvamVjdCBjb21tdW5pdHkgbWFpbGluZyBsaXN0cyBwYWdlCisgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy90b29scy1yZXNvdXJjZXMvY29tbXVuaXR5L21haWxpbmctbGlzdHMnPmhlcmU8L3VsaW5rPi4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3Jlc291cmNlcy1pcmMnPgorICAgIDx0aXRsZT5JbnRlcm5ldCBSZWxheSBDaGF0IChJUkMpPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUd28gSVJDIGNoYW5uZWxzIG9uIGZyZWVub2RlIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBZb2N0byBQcm9qZWN0IGFuZCBQb2t5IGRpc2N1c3Npb25zOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT4jeW9jdG88L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT4jcG9reTwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3Jlc291cmNlcy1saW5rcyc+CisgICAgPHRpdGxlPkxpbmtzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBIZXJlIGlzIGEgbGlzdCBvZiByZXNvdXJjZXMgeW91IHdpbGwgZmluZCBoZWxwZnVsOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7Jz5UaGUgWW9jdG8gUHJvamVjdCB3ZWJzaXRlPC91bGluaz46CisgICAgICAgICAgICAgICAgPC9lbXBoYXNpcz4gVGhlIGhvbWUgc2l0ZSBmb3IgdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgUHJvamVjdC48L3BhcmE+PC9saXN0aXRlbT4KKzwhLS0KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5pbnRlbC5jb20vJz5JbnRlbCBDb3Jwb3JhdGlvbjwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhlIGNvbXBhbnkgdGhhdCBhY3F1aXJlZCBPcGVuZWRIYW5kIGluIDIwMDggYW5kIGJlZ2FuCisgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgb24gdGhlIFlvY3RvIFByb2plY3QuPC9wYXJhPjwvbGlzdGl0ZW0+CistLT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJk9FX0hPTUVfVVJMOyc+T3BlbkVtYmVkZGVkPC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBUaGUgdXBzdHJlYW0sIGdlbmVyaWMsIGVtYmVkZGVkIGRpc3RyaWJ1dGlvbiB1c2VkIGFzIHRoZSBiYXNpcworICAgICAgICAgICAgICAgIGZvciB0aGUgYnVpbGQgc3lzdGVtIGluIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIFBva3kgZGVyaXZlcyBmcm9tIGFuZCBjb250cmlidXRlcyBiYWNrIHRvIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICBwcm9qZWN0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3Lm9wZW5lbWJlZGRlZC5vcmcvd2lraS9CaXRCYWtlJz4KKyAgICAgICAgICAgICAgICBCaXRCYWtlPC91bGluaz46PC9lbXBoYXNpcz4gVGhlIHRvb2wgdXNlZCB0byBwcm9jZXNzIG1ldGFkYXRhLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgRm9yIG1vcmUgbGlua3MsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I290aGVyLWluZm9ybWF0aW9uJz5PdGhlciBJbmZvcm1hdGlvbjwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZXNvdXJjZXMtY29udHJpYnV0aW9ucyc+CisgICAgPHRpdGxlPkNvbnRyaWJ1dGlvbnM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGdsYWRseSBhY2NlcHRzIGNvbnRyaWJ1dGlvbnMuCisgICAgICAgIFlvdSBjYW4gc3VibWl0IGNoYW5nZXMgdG8gdGhlIHByb2plY3QgZWl0aGVyIGJ5IGNyZWF0aW5nIGFuZCBzZW5kaW5nCisgICAgICAgIHB1bGwgcmVxdWVzdHMsCisgICAgICAgIG9yIGJ5IHN1Ym1pdHRpbmcgcGF0Y2hlcyB0aHJvdWdoIGVtYWlsLgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGRvIGJvdGggYXMgd2VsbCBhcyBpbmZvcm1hdGlvbiBvbiBob3cKKyAgICAgICAgdG8gaWRlbnRpZnkgdGhlIG1haW50YWluZXIgZm9yIGVhY2ggYXJlYSBvZiBjb2RlLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNob3ctdG8tc3VibWl0LWEtY2hhbmdlJz5Ib3cgdG8gU3VibWl0IGEgQ2hhbmdlPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC90ZWNobmljYWwtZGV0YWlscy54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC90ZWNobmljYWwtZGV0YWlscy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRmMzY1MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3RlY2huaWNhbC1kZXRhaWxzLnhtbApAQCAtMCwwICsxLDE0MjEgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSd0ZWNobmljYWwtZGV0YWlscyc+Cis8dGl0bGU+VGVjaG5pY2FsIERldGFpbHM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2hhcHRlciBwcm92aWRlcyB0ZWNobmljYWwgZGV0YWlscyBmb3IgdmFyaW91cyBwYXJ0cyBvZiB0aGUKKyAgICAgICAgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgQ3VycmVudGx5LCB0b3BpY3MgaW5jbHVkZSBZb2N0byBQcm9qZWN0IGNvbXBvbmVudHMsCisgICAgICAgIGNyb3NzLXRvb2xjaGFpbiBnZW5lcmF0aW9uLCBzaGFyZWQgc3RhdGUgKHNzdGF0ZSkgY2FjaGUsCisgICAgICAgIHgzMiwgV2F5bGFuZCBzdXBwb3J0LCBhbmQgTGljZW5zZXMuCisgICAgPC9wYXJhPgorCis8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWNvbXBvbmVudHMnPgorICAgIDx0aXRsZT5Zb2N0byBQcm9qZWN0IENvbXBvbmVudHM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNiaXRiYWtlLXRlcm0nPkJpdEJha2U8L3VsaW5rPgorICAgICAgICB0YXNrIGV4ZWN1dG9yIHRvZ2V0aGVyIHdpdGggdmFyaW91cyB0eXBlcyBvZiBjb25maWd1cmF0aW9uIGZpbGVzIGZvcm0KKyAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBDb3JlLgorICAgICAgICBUaGlzIHNlY3Rpb24gb3ZlcnZpZXdzIHRoZXNlIGNvbXBvbmVudHMgYnkgZGVzY3JpYmluZyB0aGVpciB1c2UgYW5kCisgICAgICAgIGhvdyB0aGV5IGludGVyYWN0LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBCaXRCYWtlIGhhbmRsZXMgdGhlIHBhcnNpbmcgYW5kIGV4ZWN1dGlvbiBvZiB0aGUgZGF0YSBmaWxlcy4KKyAgICAgICAgVGhlIGRhdGEgaXRzZWxmIGlzIG9mIHZhcmlvdXMgdHlwZXM6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJlY2lwZXM6PC9lbXBoYXNpcz4gUHJvdmlkZXMgZGV0YWlscworICAgICAgICAgICAgICAgIGFib3V0IHBhcnRpY3VsYXIgcGllY2VzIG9mIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DbGFzcyBEYXRhOjwvZW1waGFzaXM+IEFic3RyYWN0cworICAgICAgICAgICAgICAgIGNvbW1vbiBidWlsZCBpbmZvcm1hdGlvbiAoZS5nLiBob3cgdG8gYnVpbGQgYSBMaW51eCBrZXJuZWwpLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Db25maWd1cmF0aW9uIERhdGE6PC9lbXBoYXNpcz4gRGVmaW5lcworICAgICAgICAgICAgICAgIG1hY2hpbmUtc3BlY2lmaWMgc2V0dGluZ3MsIHBvbGljeSBkZWNpc2lvbnMsIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uIGRhdGEgYWN0cyBhcyB0aGUgZ2x1ZSB0byBiaW5kIGV2ZXJ5dGhpbmcKKyAgICAgICAgICAgICAgICB0b2dldGhlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEJpdEJha2Uga25vd3MgaG93IHRvIGNvbWJpbmUgbXVsdGlwbGUgZGF0YSBzb3VyY2VzIHRvZ2V0aGVyIGFuZCByZWZlcnMKKyAgICAgICAgdG8gZWFjaCBkYXRhIHNvdXJjZSBhcyBhIGxheWVyLgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gbGF5ZXJzLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcgYW5kCisgICAgICAgIENyZWF0aW5nIExheWVyczwvdWxpbms+IiBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9sbG93aW5nIGFyZSBzb21lIGJyaWVmIGRldGFpbHMgb24gdGhlc2UgY29yZSBjb21wb25lbnRzLgorICAgICAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBob3cgdGhlc2UgY29tcG9uZW50cyBpbnRlcmFjdCBkdXJpbmcKKyAgICAgICAgYSBidWlsZCwgc2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0nY2xvc2VyLWxvb2snPkEgQ2xvc2VyIExvb2sgYXQgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQ8L2xpbms+IgorICAgICAgICBDaGFwdGVyLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktY29tcG9uZW50cy1iaXRiYWtlJz4KKyAgICAgICAgPHRpdGxlPkJpdEJha2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBpcyB0aGUgdG9vbCBhdCB0aGUgaGVhcnQgb2YgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgIGFuZCBpcyByZXNwb25zaWJsZSBmb3IgcGFyc2luZyB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+LAorICAgICAgICAgICAgZ2VuZXJhdGluZyBhIGxpc3Qgb2YgdGFza3MgZnJvbSBpdCwgYW5kIHRoZW4gZXhlY3V0aW5nIHRob3NlIHRhc2tzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gYnJpZWZseSBpbnRyb2R1Y2VzIEJpdEJha2UuCisgICAgICAgICAgICBJZiB5b3Ugd2FudCBtb3JlIGluZm9ybWF0aW9uIG9uIEJpdEJha2UsIHNlZSB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjYml0YmFrZS11c2VyLW1hbnVhbCc+Qml0QmFrZSBVc2VyIE1hbnVhbDwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBzZWUgYSBsaXN0IG9mIHRoZSBvcHRpb25zIEJpdEJha2Ugc3VwcG9ydHMsIHVzZSBlaXRoZXIgb2YKKyAgICAgICAgICAgIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtaAorICAgICAkIGJpdGJha2UgLS1oZWxwCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBtb3N0IGNvbW1vbiB1c2FnZSBmb3IgQml0QmFrZSBpcyA8ZmlsZW5hbWU+Yml0YmFrZSA8cmVwbGFjZWFibGU+cGFja2FnZW5hbWU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+LCB3aGVyZQorICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2VuYW1lPC9maWxlbmFtZT4gaXMgdGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgeW91IHdhbnQgdG8gYnVpbGQKKyAgICAgICAgICAgIChyZWZlcnJlZCB0byBhcyB0aGUgInRhcmdldCIgaW4gdGhpcyBtYW51YWwpLgorICAgICAgICAgICAgVGhlIHRhcmdldCBvZnRlbiBlcXVhdGVzIHRvIHRoZSBmaXJzdCBwYXJ0IG9mIGEgcmVjaXBlJ3MgZmlsZW5hbWUKKyAgICAgICAgICAgIChlLmcuICJmb28iIGZvciBhIHJlY2lwZSBuYW1lZAorICAgICAgICAgICAgPGZpbGVuYW1lPmZvb18xLjMuMC1yMC5iYjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIFNvLCB0byBwcm9jZXNzIHRoZSA8ZmlsZW5hbWU+bWF0Y2hib3gtZGVza3RvcF8xLjIuMy5iYjwvZmlsZW5hbWU+IHJlY2lwZSBmaWxlLCB5b3UKKyAgICAgICAgICAgIG1pZ2h0IHR5cGUgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIG1hdGNoYm94LWRlc2t0b3AKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFNldmVyYWwgZGlmZmVyZW50IHZlcnNpb25zIG9mIDxmaWxlbmFtZT5tYXRjaGJveC1kZXNrdG9wPC9maWxlbmFtZT4gbWlnaHQgZXhpc3QuCisgICAgICAgICAgICBCaXRCYWtlIGNob29zZXMgdGhlIG9uZSBzZWxlY3RlZCBieSB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICBZb3UgY2FuIGdldCBtb3JlIGRldGFpbHMgYWJvdXQgaG93IEJpdEJha2UgY2hvb3NlcyBiZXR3ZWVuIGRpZmZlcmVudAorICAgICAgICAgICAgdGFyZ2V0IHZlcnNpb25zIGFuZCBwcm92aWRlcnMgaW4gdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyNiYi1iaXRiYWtlLXByZWZlcmVuY2VzJz5QcmVmZXJlbmNlczwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgQml0QmFrZSBVc2VyIE1hbnVhbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBhbHNvIHRyaWVzIHRvIGV4ZWN1dGUgYW55IGRlcGVuZGVudCB0YXNrcyBmaXJzdC4KKyAgICAgICAgICAgIFNvIGZvciBleGFtcGxlLCBiZWZvcmUgYnVpbGRpbmcgPGZpbGVuYW1lPm1hdGNoYm94LWRlc2t0b3A8L2ZpbGVuYW1lPiwgQml0QmFrZQorICAgICAgICAgICAgd291bGQgYnVpbGQgYSBjcm9zcyBjb21waWxlciBhbmQgPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4gaWYgdGhleSBoYWQgbm90IGFscmVhZHkKKyAgICAgICAgICAgIGJlZW4gYnVpbHQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgdXNlZnVsIEJpdEJha2Ugb3B0aW9uIHRvIGNvbnNpZGVyIGlzIHRoZSA8ZmlsZW5hbWU+LWs8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgPGZpbGVuYW1lPi0tY29udGludWU8L2ZpbGVuYW1lPiBvcHRpb24uCisgICAgICAgICAgICBUaGlzIG9wdGlvbiBpbnN0cnVjdHMgQml0QmFrZSB0byB0cnkgYW5kIGNvbnRpbnVlIHByb2Nlc3NpbmcgdGhlIGpvYgorICAgICAgICAgICAgYXMgbG9uZyBhcyBwb3NzaWJsZSBldmVuIGFmdGVyIGVuY291bnRlcmluZyBhbiBlcnJvci4KKyAgICAgICAgICAgIFdoZW4gYW4gZXJyb3Igb2NjdXJzLCB0aGUgdGFyZ2V0IHRoYXQKKyAgICAgICAgICAgIGZhaWxlZCBhbmQgdGhvc2UgdGhhdCBkZXBlbmQgb24gaXQgY2Fubm90IGJlIHJlbWFkZS4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHdoZW4geW91IHVzZSB0aGlzIG9wdGlvbiBvdGhlciBkZXBlbmRlbmNpZXMgY2FuIHN0aWxsIGJlCisgICAgICAgICAgICBwcm9jZXNzZWQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWNvbXBvbmVudHMtbWV0YWRhdGEnPgorICAgICAgICA8dGl0bGU+TWV0YWRhdGEgKFJlY2lwZXMpPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZpbGVzIHRoYXQgaGF2ZSB0aGUgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IHN1ZmZpeCBhcmUgInJlY2lwZXMiCisgICAgICAgICAgICBmaWxlcy4KKyAgICAgICAgICAgIEluIGdlbmVyYWwsIGEgcmVjaXBlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGEgc2luZ2xlIHBpZWNlIG9mCisgICAgICAgICAgICBzb2Z0d2FyZS4KKyAgICAgICAgICAgIFRoaXMgaW5mb3JtYXRpb24gaW5jbHVkZXMgdGhlIGxvY2F0aW9uIGZyb20gd2hpY2ggdG8gZG93bmxvYWQgdGhlCisgICAgICAgICAgICB1bmFsdGVyZWQgc291cmNlLCBhbnkgc291cmNlIHBhdGNoZXMgdG8gYmUgYXBwbGllZCB0byB0aGF0IHNvdXJjZQorICAgICAgICAgICAgKGlmIG5lZWRlZCksIHdoaWNoIHNwZWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGFwcGx5LAorICAgICAgICAgICAgaG93IHRvIGNvbXBpbGUgdGhlIHNvdXJjZSBmaWxlcywgYW5kIGhvdyB0byBwYWNrYWdlIHRoZSBjb21waWxlZAorICAgICAgICAgICAgb3V0cHV0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgdGVybSAicGFja2FnZSIgaXMgc29tZXRpbWVzIHVzZWQgdG8gcmVmZXIgdG8gcmVjaXBlcy4gSG93ZXZlciwKKyAgICAgICAgICAgIHNpbmNlIHRoZSB3b3JkICJwYWNrYWdlIiBpcyB1c2VkIGZvciB0aGUgcGFja2FnZWQgb3V0cHV0IGZyb20gdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgYnVpbGQgc3lzdGVtIChpLmUuIDxmaWxlbmFtZT4uaXBrPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPi5kZWI8L2ZpbGVuYW1lPiBmaWxlcyksCisgICAgICAgICAgICB0aGlzIGRvY3VtZW50IGF2b2lkcyB1c2luZyB0aGUgdGVybSAicGFja2FnZSIgd2hlbiByZWZlcnJpbmcgdG8gcmVjaXBlcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktY29tcG9uZW50cy1jbGFzc2VzJz4KKyAgICAgICAgPHRpdGxlPkNsYXNzZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ2xhc3MgZmlsZXMgKDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+KSBjb250YWluIGluZm9ybWF0aW9uIHRoYXQKKyAgICAgICAgICAgIGlzIHVzZWZ1bCB0byBzaGFyZSBiZXR3ZWVuCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPiBmaWxlcy4KKyAgICAgICAgICAgIEFuIGV4YW1wbGUgaXMgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMnPjxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGNsYXNzLCB3aGljaCBjb250YWlucyBjb21tb24gc2V0dGluZ3MgZm9yIGFueSBhcHBsaWNhdGlvbiB0aGF0CisgICAgICAgICAgICBBdXRvdG9vbHMgdXNlcy4KKyAgICAgICAgICAgIFRoZSAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMnPkNsYXNzZXM8L2xpbms+IiBjaGFwdGVyIHByb3ZpZGVzCisgICAgICAgICAgICBkZXRhaWxzIGFib3V0IGNsYXNzZXMgYW5kIGhvdyB0byB1c2UgdGhlbS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktY29tcG9uZW50cy1jb25maWd1cmF0aW9uJz4KKyAgICAgICAgPHRpdGxlPkNvbmZpZ3VyYXRpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgKDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+KSBkZWZpbmUgdmFyaW91cyBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworICAgICAgICAgICAgdGhhdCBnb3Zlcm4gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBwcm9jZXNzLgorICAgICAgICAgICAgVGhlc2UgZmlsZXMgZmFsbCBpbnRvIHNldmVyYWwgYXJlYXMgdGhhdCBkZWZpbmUgbWFjaGluZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsCisgICAgICAgICAgICBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBvcHRpb25zLCBjb21waWxlciB0dW5pbmcgb3B0aW9ucywgZ2VuZXJhbCBjb21tb24gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgb3B0aW9ucywgYW5kIHVzZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4sIHdoaWNoIGlzIGZvdW5kCisgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJjcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4tZ2VuZXJhdGlvbiI+CisgICAgPHRpdGxlPkNyb3NzLURldmVsb3BtZW50IFRvb2xjaGFpbiBHZW5lcmF0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBkb2VzIG1vc3Qgb2YgdGhlIHdvcmsgZm9yIHlvdSB3aGVuIGl0IGNvbWVzIHRvCisgICAgICAgIGNyZWF0aW5nCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbic+Y3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluczwvdWxpbms+LgorICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgc29tZSB0ZWNobmljYWwgYmFja2dyb3VuZCBvbiBob3cKKyAgICAgICAgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWlucyBhcmUgY3JlYXRlZCBhbmQgdXNlZC4KKyAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdG9vbGNoYWlucywgeW91IGNhbiBhbHNvIHNlZSB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsnPllvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSW4gdGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQsIGNyb3NzLWRldmVsb3BtZW50CisgICAgICAgIHRvb2xjaGFpbnMgYXJlIHVzZWQgdG8gYnVpbGQgdGhlIGltYWdlIGFuZCBhcHBsaWNhdGlvbnMgdGhhdCBydW4gb24gdGhlCisgICAgICAgIHRhcmdldCBoYXJkd2FyZS4KKyAgICAgICAgV2l0aCBqdXN0IGEgZmV3IGNvbW1hbmRzLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjcmVhdGVzCisgICAgICAgIHRoZXNlIG5lY2Vzc2FyeSB0b29sY2hhaW5zIGZvciB5b3UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIHNob3dzIGEgaGlnaC1sZXZlbCBidWlsZCBlbnZpcm9ubWVudCByZWdhcmRpbmcKKyAgICAgICAgdG9vbGNoYWluIGNvbnN0cnVjdGlvbiBhbmQgdXNlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWlucy5wbmciIHdpZHRoPSI4aW4iIGRlcHRoPSI2aW4iIGFsaWduPSJjZW50ZXIiIC8+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIE1vc3Qgb2YgdGhlIHdvcmsgb2NjdXJzIG9uIHRoZSBCdWlsZCBIb3N0LgorICAgICAgICBUaGlzIGlzIHRoZSBtYWNoaW5lIHVzZWQgdG8gYnVpbGQgaW1hZ2VzIGFuZCBnZW5lcmFsbHkgd29yayB3aXRoaW4gdGhlCisgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IGVudmlyb25tZW50LgorICAgICAgICBXaGVuIHlvdSBydW4gQml0QmFrZSB0byBjcmVhdGUgYW4gaW1hZ2UsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgIHVzZXMgdGhlIGhvc3QgPGZpbGVuYW1lPmdjYzwvZmlsZW5hbWU+IGNvbXBpbGVyIHRvIGJvb3RzdHJhcCBhCisgICAgICAgIGNyb3NzLWNvbXBpbGVyIG5hbWVkIDxmaWxlbmFtZT5nY2MtY3Jvc3M8L2ZpbGVuYW1lPi4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5nY2MtY3Jvc3M8L2ZpbGVuYW1lPiBjb21waWxlciBpcyB3aGF0IEJpdEJha2UgdXNlcyB0bworICAgICAgICBjb21waWxlIHNvdXJjZSBmaWxlcyB3aGVuIGNyZWF0aW5nIHRoZSB0YXJnZXQgaW1hZ2UuCisgICAgICAgIFlvdSBjYW4gdGhpbmsgb2YgPGZpbGVuYW1lPmdjYy1jcm9zczwvZmlsZW5hbWU+IHNpbXBseSBhcyBhbgorICAgICAgICBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBjcm9zcy1jb21waWxlciB0aGF0IGlzIHVzZWQgaW50ZXJuYWxseSB3aXRoaW4KKyAgICAgICAgQml0QmFrZSBvbmx5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgY2hhaW4gb2YgZXZlbnRzIHRoYXQgb2NjdXJzIHdoZW4gPGZpbGVuYW1lPmdjYy1jcm9zczwvZmlsZW5hbWU+IGlzCisgICAgICAgIGJvb3RzdHJhcHBlZCBpcyBhcyBmb2xsb3dzOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGdjYyAtPiBiaW51dGlscy1jcm9zcyAtPiBnY2MtY3Jvc3MtaW5pdGlhbCAtPiBsaW51eC1saWJjLWhlYWRlcnMgLT4gZ2xpYmMtaW5pdGlhbCAtPiBnbGliYyAtPiBnY2MtY3Jvc3MgLT4gZ2NjLXJ1bnRpbWUKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5nY2M8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBUaGUgYnVpbGQgaG9zdCdzIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5iaW51dGlscy1jcm9zczwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIFRoZSBiYXJlIG1pbmltdW0gYmluYXJ5IHV0aWxpdGllcyBuZWVkZWQgaW4gb3JkZXIgdG8gcnVuCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5nY2MtY3Jvc3MtaW5pdGlhbDwvZmlsZW5hbWU+IHBoYXNlIG9mIHRoZQorICAgICAgICAgICAgICAgIGJvb3RzdHJhcCBvcGVyYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmdjYy1jcm9zcy1pbml0aWFsPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQW4gZWFybHkgc3RhZ2Ugb2YgdGhlIGJvb3RzdHJhcCBwcm9jZXNzIGZvciBjcmVhdGluZworICAgICAgICAgICAgICAgIHRoZSBjcm9zcy1jb21waWxlci4KKyAgICAgICAgICAgICAgICBUaGlzIHN0YWdlIGJ1aWxkcyBlbm91Z2ggb2YgdGhlIDxmaWxlbmFtZT5nY2MtY3Jvc3M8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICB0aGUgQyBsaWJyYXJ5LCBhbmQgb3RoZXIgcGllY2VzIG5lZWRlZCB0byBmaW5pc2ggYnVpbGRpbmcgdGhlCisgICAgICAgICAgICAgICAgZmluYWwgY3Jvc3MtY29tcGlsZXIgaW4gbGF0ZXIgc3RhZ2VzLgorICAgICAgICAgICAgICAgIFRoaXMgdG9vbCBpcyBhICJuYXRpdmUiIHBhY2thZ2UgKGkuZS4gaXQgaXMgZGVzaWduZWQgdG8gcnVuIG9uCisgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIGhvc3QpLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5saW51eC1saWJjLWhlYWRlcnM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBIZWFkZXJzIG5lZWRlZCBmb3IgdGhlIGNyb3NzLWNvbXBpbGVyLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5nbGliYy1pbml0aWFsPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQW4gaW5pdGlhbCB2ZXJzaW9uIG9mIHRoZSBFbWJlZGRlZCBHTElCQyBuZWVkZWQgdG8gYm9vdHN0cmFwCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmdjYy1jcm9zczwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIFRoZSBmaW5hbCBzdGFnZSBvZiB0aGUgYm9vdHN0cmFwIHByb2Nlc3MgZm9yIHRoZQorICAgICAgICAgICAgICAgIGNyb3NzLWNvbXBpbGVyLgorICAgICAgICAgICAgICAgIFRoaXMgc3RhZ2UgcmVzdWx0cyBpbiB0aGUgYWN0dWFsIGNyb3NzLWNvbXBpbGVyIHRoYXQKKyAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgd2hlbiBpdCBidWlsZHMgYW4gaW1hZ2UgZm9yIGEgdGFyZ2V0ZWQKKyAgICAgICAgICAgICAgICBkZXZpY2UuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgcmVwbGFjaW5nIHRoaXMgY3Jvc3MgY29tcGlsZXIgdG9vbGNoYWluCisgICAgICAgICAgICAgICAgICAgIHdpdGggYSBjdXN0b20gdmVyc2lvbiwgeW91IG11c3QgcmVwbGFjZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2NjLWNyb3NzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIFRoaXMgdG9vbCBpcyBhbHNvIGEgIm5hdGl2ZSIgcGFja2FnZSAoaS5lLiBpdCBpcworICAgICAgICAgICAgICAgIGRlc2lnbmVkIHRvIHJ1biBvbiB0aGUgYnVpbGQgaG9zdCkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmdjYy1ydW50aW1lPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgUnVudGltZSBsaWJyYXJpZXMgcmVzdWx0aW5nIGZyb20gdGhlIHRvb2xjaGFpbiBib290c3RyYXBwaW5nCisgICAgICAgICAgICAgICAgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICBUaGlzIHRvb2wgcHJvZHVjZXMgYSBiaW5hcnkgdGhhdCBjb25zaXN0cyBvZiB0aGUKKyAgICAgICAgICAgICAgICBydW50aW1lIGxpYnJhcmllcyBuZWVkIGZvciB0aGUgdGFyZ2V0ZWQgZGV2aWNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiB1c2UgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gYnVpbGQgYW4gaW5zdGFsbGVyIGZvcgorICAgICAgICB0aGUgcmVsb2NhdGFibGUgU0RLIHVzZWQgdG8gZGV2ZWxvcCBhcHBsaWNhdGlvbnMuCisgICAgICAgIFdoZW4geW91IHJ1biB0aGUgaW5zdGFsbGVyLCBpdCBpbnN0YWxscyB0aGUgdG9vbGNoYWluLCB3aGljaCBjb250YWlucworICAgICAgICB0aGUgZGV2ZWxvcG1lbnQgdG9vbHMgKGUuZy4sIHRoZQorICAgICAgICA8ZmlsZW5hbWU+Z2NjLWNyb3NzLWNhbmFkaWFuPC9maWxlbmFtZT4pLAorICAgICAgICA8ZmlsZW5hbWU+YmludXRpbHMtY3Jvc3MtY2FuYWRpYW48L2ZpbGVuYW1lPiwgYW5kIG90aGVyCisgICAgICAgIDxmaWxlbmFtZT5uYXRpdmVzZGstKjwvZmlsZW5hbWU+IHRvb2xzIHlvdSBuZWVkIHRvIGNyb3NzLWNvbXBpbGUgYW5kCisgICAgICAgIHRlc3QgeW91ciBzb2Z0d2FyZS4KKyAgICAgICAgVGhlIGZpZ3VyZSBzaG93cyB0aGUgY29tbWFuZHMgeW91IHVzZSB0byBlYXNpbHkgYnVpbGQgb3V0IHRoaXMKKyAgICAgICAgdG9vbGNoYWluLgorICAgICAgICBUaGlzIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbiBpcyBidWlsdCB0byBleGVjdXRlIG9uIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLTUFDSElORSc+PGZpbGVuYW1lPlNES01BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIHdoaWNoIG1pZ2h0IG9yIG1pZ2h0IG5vdCBiZSB0aGUgc2FtZQorICAgICAgICBtYWNoaW5lIGFzIHRoZSBCdWlsZCBIb3N0LgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIElmIHlvdXIgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFlvY3RvIFByb2plY3QsCisgICAgICAgICAgICB5b3UgY2FuIHRha2UgYWR2YW50YWdlIG9mIHByZS1idWlsdCBpbWFnZXMgdGhhdCBzaGlwIHdpdGggdGhlCisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IGFuZCBhbHJlYWR5IGNvbnRhaW4gY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluCisgICAgICAgICAgICBpbnN0YWxsZXJzLgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEhlcmUgaXMgdGhlIGJvb3RzdHJhcCBwcm9jZXNzIGZvciB0aGUgcmVsb2NhdGFibGUgdG9vbGNoYWluOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGdjYyAtPiBiaW51dGlscy1jcm9zc3NkayAtPiBnY2MtY3Jvc3NzZGstaW5pdGlhbCAtPiBsaW51eC1saWJjLWhlYWRlcnMgLT4KKyAgICAgICAgZ2xpYmMtaW5pdGlhbCAtPiBuYXRpdmVzZGstZ2xpYmMgLT4gZ2NjLWNyb3Nzc2RrIC0+IGdjYy1jcm9zcy1jYW5hZGlhbgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmdjYzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIFRoZSBidWlsZCBob3N0J3MgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJpbnV0aWxzLWNyb3Nzc2RrPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgVGhlIGJhcmUgbWluaW11bSBiaW5hcnkgdXRpbGl0aWVzIG5lZWRlZCBpbiBvcmRlciB0byBydW4KKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmdjYy1jcm9zc3Nkay1pbml0aWFsPC9maWxlbmFtZT4gcGhhc2Ugb2YgdGhlCisgICAgICAgICAgICAgICAgYm9vdHN0cmFwIG9wZXJhdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Z2NjLWNyb3Nzc2RrLWluaXRpYWw8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBbiBlYXJseSBzdGFnZSBvZiB0aGUgYm9vdHN0cmFwIHByb2Nlc3MgZm9yIGNyZWF0aW5nCisgICAgICAgICAgICAgICAgdGhlIGNyb3NzLWNvbXBpbGVyLgorICAgICAgICAgICAgICAgIFRoaXMgc3RhZ2UgYnVpbGRzIGVub3VnaCBvZiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2NjLWNyb3Nzc2RrPC9maWxlbmFtZT4gYW5kIHN1cHBvcnRpbmcgcGllY2VzIHNvIHRoYXQKKyAgICAgICAgICAgICAgICB0aGUgZmluYWwgc3RhZ2Ugb2YgdGhlIGJvb3RzdHJhcCBwcm9jZXNzIGNhbiBwcm9kdWNlIHRoZQorICAgICAgICAgICAgICAgIGZpbmlzaGVkIGNyb3NzLWNvbXBpbGVyLgorICAgICAgICAgICAgICAgIFRoaXMgdG9vbCBpcyBhICJuYXRpdmUiIGJpbmFyeSB0aGF0IHJ1bnMgb24gdGhlIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmxpbnV4LWxpYmMtaGVhZGVyczwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEhlYWRlcnMgbmVlZGVkIGZvciB0aGUgY3Jvc3MtY29tcGlsZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmdsaWJjLWluaXRpYWw8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBbiBpbml0aWFsIHZlcnNpb24gb2YgdGhlIEVtYmVkZGVkIEdMSUJDIG5lZWRlZCB0byBib290c3RyYXAKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bmF0aXZlc2RrLWdsaWJjPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPm5hdGl2ZXNkay1nbGliYzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIFRoZSBFbWJlZGRlZCBHTElCQyBuZWVkZWQgdG8gYm9vdHN0cmFwIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5nY2MtY3Jvc3NzZGs8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Z2NjLWNyb3Nzc2RrPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgVGhlIGZpbmFsIHN0YWdlIG9mIHRoZSBib290c3RyYXAgcHJvY2VzcyBmb3IgdGhlCisgICAgICAgICAgICAgICAgcmVsb2NhdGFibGUgY3Jvc3MtY29tcGlsZXIuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5nY2MtY3Jvc3NzZGs8L2ZpbGVuYW1lPiBpcyBhIHRyYW5zaXRvcnkgY29tcGlsZXIKKyAgICAgICAgICAgICAgICBhbmQgbmV2ZXIgbGVhdmVzIHRoZSBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgIEl0cyBwdXJwb3NlIGlzIHRvIGhlbHAgaW4gdGhlIGJvb3RzdHJhcCBwcm9jZXNzIHRvIGNyZWF0ZSB0aGUKKyAgICAgICAgICAgICAgICBldmVudHVhbCByZWxvY2F0YWJsZSA8ZmlsZW5hbWU+Z2NjLWNyb3NzLWNhbmFkaWFuPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb21waWxlciwgd2hpY2ggaXMgcmVsb2NhdGFibGUuCisgICAgICAgICAgICAgICAgVGhpcyB0b29sIGlzIGFsc28gYSAibmF0aXZlIiBwYWNrYWdlIChpLmUuIGl0IGlzCisgICAgICAgICAgICAgICAgZGVzaWduZWQgdG8gcnVuIG9uIHRoZSBidWlsZCBob3N0KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Z2NjLWNyb3NzLWNhbmFkaWFuPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgVGhlIGZpbmFsIHJlbG9jYXRhYmxlIGNyb3NzLWNvbXBpbGVyLgorICAgICAgICAgICAgICAgIFdoZW4gcnVuIG9uIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtNQUNISU5FJz48ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICB0aGlzIHRvb2wKKyAgICAgICAgICAgICAgICBwcm9kdWNlcyBleGVjdXRhYmxlIGNvZGUgdGhhdCBydW5zIG9uIHRoZSB0YXJnZXQgZGV2aWNlLgorICAgICAgICAgICAgICAgIE9ubHkgb25lIGNyb3NzLWNhbmFkaWFuIGNvbXBpbGVyIGlzIHByb2R1Y2VkIHBlciBhcmNoaXRlY3R1cmUKKyAgICAgICAgICAgICAgICBzaW5jZSB0aGV5IGNhbiBiZSB0YXJnZXRlZCBhdCBkaWZmZXJlbnQgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMKKyAgICAgICAgICAgICAgICB1c2luZyBjb25maWd1cmF0aW9ucyBwYXNzZWQgdG8gdGhlIGNvbXBpbGVyIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgY29tcGlsZSBjb21tYW5kcy4KKyAgICAgICAgICAgICAgICBUaGlzIGNpcmN1bXZlbnRzIHRoZSBuZWVkIGZvciBtdWx0aXBsZSBjb21waWxlcnMgYW5kIHRodXMKKyAgICAgICAgICAgICAgICByZWR1Y2VzIHRoZSBzaXplIG9mIHRoZSB0b29sY2hhaW5zLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8bm90ZT4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGFkdmFudGFnZXMgZ2FpbmVkIHdoZW4gYnVpbGRpbmcgYQorICAgICAgICBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4gaW5zdGFsbGVyLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyNvcHRpb25hbGx5LWJ1aWxkaW5nLWEtdG9vbGNoYWluLWluc3RhbGxlcic+T3B0aW9uYWxseSBCdWlsZGluZyBhIFRvb2xjaGFpbiBJbnN0YWxsZXI8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICA8L25vdGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJzaGFyZWQtc3RhdGUtY2FjaGUiPgorICAgIDx0aXRsZT5TaGFyZWQgU3RhdGUgQ2FjaGU8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEJ5IGRlc2lnbiwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYnVpbGRzIGV2ZXJ5dGhpbmcgZnJvbSBzY3JhdGNoIHVubGVzcworICAgICAgICBCaXRCYWtlIGNhbiBkZXRlcm1pbmUgdGhhdCBwYXJ0cyBkbyBub3QgbmVlZCB0byBiZSByZWJ1aWx0LgorICAgICAgICBGdW5kYW1lbnRhbGx5LCBidWlsZGluZyBmcm9tIHNjcmF0Y2ggaXMgYXR0cmFjdGl2ZSBhcyBpdCBtZWFucyBhbGwgcGFydHMgYXJlCisgICAgICAgIGJ1aWx0IGZyZXNoIGFuZCB0aGVyZSBpcyBubyBwb3NzaWJpbGl0eSBvZiBzdGFsZSBkYXRhIGNhdXNpbmcgcHJvYmxlbXMuCisgICAgICAgIFdoZW4gZGV2ZWxvcGVycyBoaXQgcHJvYmxlbXMsIHRoZXkgdHlwaWNhbGx5IGRlZmF1bHQgYmFjayB0byBidWlsZGluZyBmcm9tIHNjcmF0Y2gKKyAgICAgICAgc28gdGhleSBrbm93IHRoZSBzdGF0ZSBvZiB0aGluZ3MgZnJvbSB0aGUgc3RhcnQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEJ1aWxkaW5nIGFuIGltYWdlIGZyb20gc2NyYXRjaCBpcyBib3RoIGFuIGFkdmFudGFnZSBhbmQgYSBkaXNhZHZhbnRhZ2UgdG8gdGhlIHByb2Nlc3MuCisgICAgICAgIEFzIG1lbnRpb25lZCBpbiB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLCBidWlsZGluZyBmcm9tIHNjcmF0Y2ggZW5zdXJlcyB0aGF0CisgICAgICAgIGV2ZXJ5dGhpbmcgaXMgY3VycmVudCBhbmQgc3RhcnRzIGZyb20gYSBrbm93biBzdGF0ZS4KKyAgICAgICAgSG93ZXZlciwgYnVpbGRpbmcgZnJvbSBzY3JhdGNoIGFsc28gdGFrZXMgbXVjaCBsb25nZXIgYXMgaXQgZ2VuZXJhbGx5IG1lYW5zCisgICAgICAgIHJlYnVpbGRpbmcgdGhpbmdzIHRoYXQgZG8gbm90IG5lY2Vzc2FyaWx5IG5lZWQgdG8gYmUgcmVidWlsdC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgaW1wbGVtZW50cyBzaGFyZWQgc3RhdGUgY29kZSB0aGF0IHN1cHBvcnRzIGluY3JlbWVudGFsIGJ1aWxkcy4KKyAgICAgICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzaGFyZWQgc3RhdGUgY29kZSBhbnN3ZXJzIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zIHRoYXQKKyAgICAgICAgd2VyZSBmdW5kYW1lbnRhbCByb2FkYmxvY2tzIHdpdGhpbiB0aGUgT3BlbkVtYmVkZGVkIGluY3JlbWVudGFsIGJ1aWxkIHN1cHBvcnQgc3lzdGVtOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoYXQgcGllY2VzIG9mIHRoZSBzeXN0ZW0gaGF2ZSBjaGFuZ2VkIGFuZCB3aGF0IHBpZWNlcyBoYXZlCisgICAgICAgICAgICAgICAgbm90IGNoYW5nZWQ/PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SG93IGFyZSBjaGFuZ2VkIHBpZWNlcyBvZiBzb2Z0d2FyZSByZW1vdmVkIGFuZCByZXBsYWNlZD88L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Ib3cgYXJlIHByZS1idWlsdCBjb21wb25lbnRzIHRoYXQgZG8gbm90IG5lZWQgdG8gYmUgcmVidWlsdCBmcm9tIHNjcmF0Y2gKKyAgICAgICAgICAgICAgICB1c2VkIHdoZW4gdGhleSBhcmUgYXZhaWxhYmxlPzwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIHRoZSBmaXJzdCBxdWVzdGlvbiwgdGhlIGJ1aWxkIHN5c3RlbSBkZXRlY3RzIGNoYW5nZXMgaW4gdGhlICJpbnB1dHMiIHRvIGEgZ2l2ZW4gdGFzayBieQorICAgICAgICBjcmVhdGluZyBhIGNoZWNrc3VtIChvciBzaWduYXR1cmUpIG9mIHRoZSB0YXNrJ3MgaW5wdXRzLgorICAgICAgICBJZiB0aGUgY2hlY2tzdW0gY2hhbmdlcywgdGhlIHN5c3RlbSBhc3N1bWVzIHRoZSBpbnB1dHMgaGF2ZSBjaGFuZ2VkIGFuZCB0aGUgdGFzayBuZWVkcyB0byBiZQorICAgICAgICByZXJ1bi4KKyAgICAgICAgRm9yIHRoZSBzZWNvbmQgcXVlc3Rpb24sIHRoZSBzaGFyZWQgc3RhdGUgKHNzdGF0ZSkgY29kZSB0cmFja3Mgd2hpY2ggdGFza3MgYWRkIHdoaWNoIG91dHB1dAorICAgICAgICB0byB0aGUgYnVpbGQgcHJvY2Vzcy4KKyAgICAgICAgVGhpcyBtZWFucyB0aGUgb3V0cHV0IGZyb20gYSBnaXZlbiB0YXNrIGNhbiBiZSByZW1vdmVkLCB1cGdyYWRlZCBvciBvdGhlcndpc2UgbWFuaXB1bGF0ZWQuCisgICAgICAgIFRoZSB0aGlyZCBxdWVzdGlvbiBpcyBwYXJ0bHkgYWRkcmVzc2VkIGJ5IHRoZSBzb2x1dGlvbiBmb3IgdGhlIHNlY29uZCBxdWVzdGlvbgorICAgICAgICBhc3N1bWluZyB0aGUgYnVpbGQgc3lzdGVtIGNhbiBmZXRjaCB0aGUgc3N0YXRlIG9iamVjdHMgZnJvbSByZW1vdGUgbG9jYXRpb25zIGFuZAorICAgICAgICBpbnN0YWxsIHRoZW0gaWYgdGhleSBhcmUgZGVlbWVkIHRvIGJlIHZhbGlkLgorICAgIDwvcGFyYT4KKworICAgIDxub3RlPgorICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBkb2VzIG5vdCBtYWludGFpbgorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC9saW5rPiBpbmZvcm1hdGlvbgorICAgICAgICBhcyBwYXJ0IG9mIHRoZSBzaGFyZWQgc3RhdGUgcGFja2FnZXMuCisgICAgICAgIENvbnNlcXVlbnRseSwgY29uc2lkZXJhdGlvbnMgZXhpc3QgdGhhdCBhZmZlY3QgbWFpbnRhaW5pbmcgc2hhcmVkCisgICAgICAgIHN0YXRlIGZlZWRzLgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgIHdvcmtzIHdpdGggcGFja2FnZXMgYW5kIGNhbgorICAgICAgICB0cmFjayBpbmNyZW1lbnRpbmcgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4gaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2luY3JlbWVudGluZy1hLXBhY2thZ2UtcmV2aXNpb24tbnVtYmVyJz5JbmNyZW1lbnRpbmcgYSBQYWNrYWdlIFJldmlzaW9uIE51bWJlcjwvdWxpbms+IgorICAgICAgICBzZWN0aW9uLgorICAgIDwvbm90ZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgcmVzdCBvZiB0aGlzIHNlY3Rpb24gZ29lcyBpbnRvIGRldGFpbCBhYm91dCB0aGUgb3ZlcmFsbCBpbmNyZW1lbnRhbCBidWlsZAorICAgICAgICBhcmNoaXRlY3R1cmUsIHRoZSBjaGVja3N1bXMgKHNpZ25hdHVyZXMpLCBzaGFyZWQgc3RhdGUsIGFuZCBzb21lIHRpcHMgYW5kIHRyaWNrcy4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nb3ZlcmFsbC1hcmNoaXRlY3R1cmUnPgorICAgICAgICA8dGl0bGU+T3ZlcmFsbCBBcmNoaXRlY3R1cmU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiBkZXRlcm1pbmluZyB3aGF0IHBhcnRzIG9mIHRoZSBzeXN0ZW0gbmVlZCB0byBiZSBidWlsdCwgQml0QmFrZQorICAgICAgICAgICAgd29ya3Mgb24gYSBwZXItdGFzayBiYXNpcyByYXRoZXIgdGhhbiBhIHBlci1yZWNpcGUgYmFzaXMuCisgICAgICAgICAgICBZb3UgbWlnaHQgd29uZGVyIHdoeSB1c2luZyBhIHBlci10YXNrIGJhc2lzIGlzIHByZWZlcnJlZCBvdmVyIGEgcGVyLXJlY2lwZSBiYXNpcy4KKyAgICAgICAgICAgIFRvIGhlbHAgZXhwbGFpbiwgY29uc2lkZXIgaGF2aW5nIHRoZSBJUEsgcGFja2FnaW5nIGJhY2tlbmQgZW5hYmxlZCBhbmQgdGhlbiBzd2l0Y2hpbmcgdG8gREVCLgorICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgYW5kCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZSc+PGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHRhc2sgb3V0cHV0cyBhcmUgc3RpbGwgdmFsaWQuCisgICAgICAgICAgICBIb3dldmVyLCB3aXRoIGEgcGVyLXJlY2lwZSBhcHByb2FjaCwgdGhlIGJ1aWxkIHdvdWxkIG5vdCBpbmNsdWRlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPi5kZWI8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IHdvdWxkIGhhdmUgdG8gaW52YWxpZGF0ZSB0aGUgd2hvbGUgYnVpbGQgYW5kIHJlcnVuIGl0LgorICAgICAgICAgICAgUmVydW5uaW5nIGV2ZXJ5dGhpbmcgaXMgbm90IHRoZSBiZXN0IHNvbHV0aW9uLgorICAgICAgICAgICAgQWxzbywgaW4gdGhpcyBjYXNlLCB0aGUgY29yZSBtdXN0IGJlICJ0YXVnaHQiIG11Y2ggYWJvdXQgc3BlY2lmaWMgdGFza3MuCisgICAgICAgICAgICBUaGlzIG1ldGhvZG9sb2d5IGRvZXMgbm90IHNjYWxlIHdlbGwgYW5kIGRvZXMgbm90IGFsbG93IHVzZXJzIHRvIGVhc2lseSBhZGQgbmV3IHRhc2tzCisgICAgICAgICAgICBpbiBsYXllcnMgb3IgYXMgZXh0ZXJuYWwgcmVjaXBlcyB3aXRob3V0IHRvdWNoaW5nIHRoZSBwYWNrYWdlZC1zdGFnaW5nIGNvcmUuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nY2hlY2tzdW1zJz4KKyAgICAgICAgPHRpdGxlPkNoZWNrc3VtcyAoU2lnbmF0dXJlcyk8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHNoYXJlZCBzdGF0ZSBjb2RlIHVzZXMgYSBjaGVja3N1bSwgd2hpY2ggaXMgYSB1bmlxdWUgc2lnbmF0dXJlIG9mIGEgdGFzaydzCisgICAgICAgICAgICBpbnB1dHMsIHRvIGRldGVybWluZSBpZiBhIHRhc2sgbmVlZHMgdG8gYmUgcnVuIGFnYWluLgorICAgICAgICAgICAgQmVjYXVzZSBpdCBpcyBhIGNoYW5nZSBpbiBhIHRhc2sncyBpbnB1dHMgdGhhdCB0cmlnZ2VycyBhIHJlcnVuLCB0aGUgcHJvY2VzcworICAgICAgICAgICAgbmVlZHMgdG8gZGV0ZWN0IGFsbCB0aGUgaW5wdXRzIHRvIGEgZ2l2ZW4gdGFzay4KKyAgICAgICAgICAgIEZvciBzaGVsbCB0YXNrcywgdGhpcyB0dXJucyBvdXQgdG8gYmUgZmFpcmx5IGVhc3kgYmVjYXVzZQorICAgICAgICAgICAgdGhlIGJ1aWxkIHByb2Nlc3MgZ2VuZXJhdGVzIGEgInJ1biIgc2hlbGwgc2NyaXB0IGZvciBlYWNoIHRhc2sgYW5kCisgICAgICAgICAgICBpdCBpcyBwb3NzaWJsZSB0byBjcmVhdGUgYSBjaGVja3N1bSB0aGF0IGdpdmVzIHlvdSBhIGdvb2QgaWRlYSBvZiB3aGVuCisgICAgICAgICAgICB0aGUgdGFzaydzIGRhdGEgY2hhbmdlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gY29tcGxpY2F0ZSB0aGUgcHJvYmxlbSwgdGhlcmUgYXJlIHRoaW5ncyB0aGF0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgaW4KKyAgICAgICAgICAgIHRoZSBjaGVja3N1bS4KKyAgICAgICAgICAgIEZpcnN0LCB0aGVyZSBpcyB0aGUgYWN0dWFsIHNwZWNpZmljIGJ1aWxkIHBhdGggb2YgYSBnaXZlbiB0YXNrIC0KKyAgICAgICAgICAgIHRoZSA8bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICBJdCBkb2VzIG5vdCBtYXR0ZXIgaWYgdGhlIHdvcmsgZGlyZWN0b3J5IGNoYW5nZXMgYmVjYXVzZSBpdCBzaG91bGQgbm90CisgICAgICAgICAgICBhZmZlY3QgdGhlIG91dHB1dCBmb3IgdGFyZ2V0IHBhY2thZ2VzLgorICAgICAgICAgICAgQWxzbywgdGhlIGJ1aWxkIHByb2Nlc3MgaGFzIHRoZSBvYmplY3RpdmUgb2YgbWFraW5nIG5hdGl2ZSBvciBjcm9zcyBwYWNrYWdlcyByZWxvY2F0YWJsZS4KKyAgICAgICAgICAgIFRoZSBjaGVja3N1bSB0aGVyZWZvcmUgbmVlZHMgdG8gZXhjbHVkZSA8ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlIHNpbXBsaXN0aWMgYXBwcm9hY2ggZm9yIGV4Y2x1ZGluZyB0aGUgd29yayBkaXJlY3RvcnkgaXMgdG8gc2V0CisgICAgICAgICAgICA8ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+IHRvIHNvbWUgZml4ZWQgdmFsdWUgYW5kIGNyZWF0ZSB0aGUgY2hlY2tzdW0KKyAgICAgICAgICAgIGZvciB0aGUgInJ1biIgc2NyaXB0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBbm90aGVyIHByb2JsZW0gcmVzdWx0cyBmcm9tIHRoZSAicnVuIiBzY3JpcHRzIGNvbnRhaW5pbmcgZnVuY3Rpb25zIHRoYXQKKyAgICAgICAgICAgIG1pZ2h0IG9yIG1pZ2h0IG5vdCBnZXQgY2FsbGVkLgorICAgICAgICAgICAgVGhlIGluY3JlbWVudGFsIGJ1aWxkIHNvbHV0aW9uIGNvbnRhaW5zIGNvZGUgdGhhdCBmaWd1cmVzIG91dCBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgIGJldHdlZW4gc2hlbGwgZnVuY3Rpb25zLgorICAgICAgICAgICAgVGhpcyBjb2RlIGlzIHVzZWQgdG8gcHJ1bmUgdGhlICJydW4iIHNjcmlwdHMgZG93biB0byB0aGUgbWluaW11bSBzZXQsCisgICAgICAgICAgICB0aGVyZWJ5IGFsbGV2aWF0aW5nIHRoaXMgcHJvYmxlbSBhbmQgbWFraW5nIHRoZSAicnVuIiBzY3JpcHRzIG11Y2ggbW9yZQorICAgICAgICAgICAgcmVhZGFibGUgYXMgYSBib251cy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU28gZmFyIHdlIGhhdmUgc29sdXRpb25zIGZvciBzaGVsbCBzY3JpcHRzLgorICAgICAgICAgICAgV2hhdCBhYm91dCBQeXRob24gdGFza3M/CisgICAgICAgICAgICBUaGUgc2FtZSBhcHByb2FjaCBhcHBsaWVzIGV2ZW4gdGhvdWdoIHRoZXNlIHRhc2tzIGFyZSBtb3JlIGRpZmZpY3VsdC4KKyAgICAgICAgICAgIFRoZSBwcm9jZXNzIG5lZWRzIHRvIGZpZ3VyZSBvdXQgd2hhdCB2YXJpYWJsZXMgYSBQeXRob24gZnVuY3Rpb24gYWNjZXNzZXMKKyAgICAgICAgICAgIGFuZCB3aGF0IGZ1bmN0aW9ucyBpdCBjYWxscy4KKyAgICAgICAgICAgIEFnYWluLCB0aGUgaW5jcmVtZW50YWwgYnVpbGQgc29sdXRpb24gY29udGFpbnMgY29kZSB0aGF0IGZpcnN0IGZpZ3VyZXMgb3V0CisgICAgICAgICAgICB0aGUgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIGRlcGVuZGVuY2llcywgYW5kIHRoZW4gY3JlYXRlcyBhIGNoZWNrc3VtIGZvciB0aGUgZGF0YQorICAgICAgICAgICAgdXNlZCBhcyB0aGUgaW5wdXQgdG8gdGhlIHRhc2suCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIExpa2UgdGhlIDxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT4gY2FzZSwgc2l0dWF0aW9ucyBleGlzdCB3aGVyZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgIHNob3VsZCBiZSBpZ25vcmVkLgorICAgICAgICAgICAgRm9yIHRoZXNlIGNhc2VzLCB5b3UgY2FuIGluc3RydWN0IHRoZSBidWlsZCBwcm9jZXNzIHRvIGlnbm9yZSBhIGRlcGVuZGVuY3kKKyAgICAgICAgICAgIGJ5IHVzaW5nIGEgbGluZSBsaWtlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VfQVJDSFNbdmFyZGVwc2V4Y2x1ZGVdID0gIk1BQ0hJTkUiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGlzIGV4YW1wbGUgZW5zdXJlcyB0aGF0IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQVJDSFMnPjxmaWxlbmFtZT5QQUNLQUdFX0FSQ0hTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBkb2VzIG5vdAorICAgICAgICAgICAgZGVwZW5kIG9uIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgZXZlbiBpZiBpdCBkb2VzIHJlZmVyZW5jZSBpdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRXF1YWxseSwgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHdlIG5lZWQgdG8gYWRkIGRlcGVuZGVuY2llcyBCaXRCYWtlIGlzIG5vdCBhYmxlIHRvIGZpbmQuCisgICAgICAgICAgICBZb3UgY2FuIGFjY29tcGxpc2ggdGhpcyBieSB1c2luZyBhIGxpbmUgbGlrZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgUEFDS0FHRV9BUkNIU1t2YXJkZXBzXSA9ICJNQUNISU5FIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhpcyBleGFtcGxlIGV4cGxpY2l0bHkgYWRkcyB0aGUgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBhcyBhCisgICAgICAgICAgICBkZXBlbmRlbmN5IGZvciA8ZmlsZW5hbWU+UEFDS0FHRV9BUkNIUzwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDb25zaWRlciBhIGNhc2Ugd2l0aCBpbi1saW5lIFB5dGhvbiwgZm9yIGV4YW1wbGUsIHdoZXJlIEJpdEJha2UgaXMgbm90CisgICAgICAgICAgICBhYmxlIHRvIGZpZ3VyZSBvdXQgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgV2hlbiBydW5uaW5nIGluIGRlYnVnIG1vZGUgKGkuZS4gdXNpbmcgPGZpbGVuYW1lPi1EREQ8L2ZpbGVuYW1lPiksIEJpdEJha2UKKyAgICAgICAgICAgIHByb2R1Y2VzIG91dHB1dCB3aGVuIGl0IGRpc2NvdmVycyBzb21ldGhpbmcgZm9yIHdoaWNoIGl0IGNhbm5vdCBmaWd1cmUgb3V0CisgICAgICAgICAgICBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB0ZWFtIGhhcyBjdXJyZW50bHkgbm90IG1hbmFnZWQgdG8gY292ZXIgdGhvc2UgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBpbiBkZXRhaWwgYW5kIGlzIGF3YXJlIG9mIHRoZSBuZWVkIHRvIGZpeCB0aGlzIHNpdHVhdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGh1cyBmYXIsIHRoaXMgc2VjdGlvbiBoYXMgbGltaXRlZCBkaXNjdXNzaW9uIHRvIHRoZSBkaXJlY3QgaW5wdXRzIGludG8gYSB0YXNrLgorICAgICAgICAgICAgSW5mb3JtYXRpb24gYmFzZWQgb24gZGlyZWN0IGlucHV0cyBpcyByZWZlcnJlZCB0byBhcyB0aGUgImJhc2VoYXNoIiBpbiB0aGUKKyAgICAgICAgICAgIGNvZGUuCisgICAgICAgICAgICBIb3dldmVyLCB0aGVyZSBpcyBzdGlsbCB0aGUgcXVlc3Rpb24gb2YgYSB0YXNrJ3MgaW5kaXJlY3QgaW5wdXRzIC0gdGhlCisgICAgICAgICAgICB0aGluZ3MgdGhhdCB3ZXJlIGFscmVhZHkgYnVpbHQgYW5kIHByZXNlbnQgaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgVGhlIGNoZWNrc3VtIChvciBzaWduYXR1cmUpIGZvciBhIHBhcnRpY3VsYXIgdGFzayBuZWVkcyB0byBhZGQgdGhlIGhhc2hlcworICAgICAgICAgICAgb2YgYWxsIHRoZSB0YXNrcyBvbiB3aGljaCB0aGUgcGFydGljdWxhciB0YXNrIGRlcGVuZHMuCisgICAgICAgICAgICBDaG9vc2luZyB3aGljaCBkZXBlbmRlbmNpZXMgdG8gYWRkIGlzIGEgcG9saWN5IGRlY2lzaW9uLgorICAgICAgICAgICAgSG93ZXZlciwgdGhlIGVmZmVjdCBpcyB0byBnZW5lcmF0ZSBhIG1hc3RlciBjaGVja3N1bSB0aGF0IGNvbWJpbmVzIHRoZSBiYXNlaGFzaAorICAgICAgICAgICAgYW5kIHRoZSBoYXNoZXMgb2YgdGhlIHRhc2sncyBkZXBlbmRlbmNpZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEF0IHRoZSBjb2RlIGxldmVsLCB0aGVyZSBhcmUgYSB2YXJpZXR5IG9mIHdheXMgYm90aCB0aGUgYmFzZWhhc2ggYW5kIHRoZQorICAgICAgICAgICAgZGVwZW5kZW50IHRhc2sgaGFzaGVzIGNhbiBiZSBpbmZsdWVuY2VkLgorICAgICAgICAgICAgV2l0aGluIHRoZSBCaXRCYWtlIGNvbmZpZ3VyYXRpb24gZmlsZSwgd2UgY2FuIGdpdmUgQml0QmFrZSBzb21lIGV4dHJhIGluZm9ybWF0aW9uCisgICAgICAgICAgICB0byBoZWxwIGl0IGNvbnN0cnVjdCB0aGUgYmFzZWhhc2guCisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN0YXRlbWVudCBlZmZlY3RpdmVseSByZXN1bHRzIGluIGEgbGlzdCBvZiBnbG9iYWwgdmFyaWFibGUKKyAgICAgICAgICAgIGRlcGVuZGVuY3kgZXhjbHVkZXMgLSB2YXJpYWJsZXMgbmV2ZXIgaW5jbHVkZWQgaW4gYW55IGNoZWNrc3VtOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQl9IQVNIQkFTRV9XSElURUxJU1QgPz0gIlRNUERJUiBGSUxFIFBBVEggUFdEIEJCX1RBU0tIQVNIIEJCUEFUSCBETF9ESVIgXAorICAgICAgICAgU1NUQVRFX0RJUiBUSElTRElSIEZJTEVTRVhUUkFQQVRIUyBGSUxFX0RJUk5BTUUgSE9NRSBMT0dOQU1FIFNIRUxMIFRFUk0gXAorICAgICAgICAgVVNFUiBGSUxFU1BBVEggU1RBR0lOR19ESVJfSE9TVCBTVEFHSU5HX0RJUl9UQVJHRVQgQ09SRUJBU0UgUFJTRVJWX0hPU1QgXAorICAgICAgICAgUFJTRVJWX0RVTVBESVIgUFJTRVJWX0RVTVBGSUxFIFBSU0VSVl9MT0NLRE9XTiBQQVJBTExFTF9NQUtFIFwKKyAgICAgICAgIENDQUNIRV9ESVIgRVhURVJOQUxfVE9PTENIQUlOIENDQUNIRSBDQ0FDSEVfRElTQUJMRSBMSUNFTlNFX1BBVEggU0RLUEtHU1VGRklYIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIHByZXZpb3VzIGV4YW1wbGUgZXhjbHVkZXMKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgc2luY2UgdGhhdCB2YXJpYWJsZSBpcyBhY3R1YWxseSBjb25zdHJ1Y3RlZCBhcyBhIHBhdGggd2l0aGluCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+LCB3aGljaCBpcyBvbgorICAgICAgICAgICAgdGhlIHdoaXRlbGlzdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHJ1bGVzIGZvciBkZWNpZGluZyB3aGljaCBoYXNoZXMgb2YgZGVwZW5kZW50IHRhc2tzIHRvIGluY2x1ZGUgdGhyb3VnaAorICAgICAgICAgICAgZGVwZW5kZW5jeSBjaGFpbnMgYXJlIG1vcmUgY29tcGxleCBhbmQgYXJlIGdlbmVyYWxseSBhY2NvbXBsaXNoZWQgd2l0aCBhCisgICAgICAgICAgICBQeXRob24gZnVuY3Rpb24uCisgICAgICAgICAgICBUaGUgY29kZSBpbiA8ZmlsZW5hbWU+bWV0YS9saWIvb2Uvc3N0YXRlc2lnLnB5PC9maWxlbmFtZT4gc2hvd3MgdHdvIGV4YW1wbGVzCisgICAgICAgICAgICBvZiB0aGlzIGFuZCBhbHNvIGlsbHVzdHJhdGVzIGhvdyB5b3UgY2FuIGluc2VydCB5b3VyIG93biBwb2xpY3kgaW50byB0aGUgc3lzdGVtCisgICAgICAgICAgICBpZiBzbyBkZXNpcmVkLgorICAgICAgICAgICAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHR3byBiYXNpYyBzaWduYXR1cmUgZ2VuZXJhdG9ycyA8ZmlsZW5hbWU+T0UtQ29yZTwvZmlsZW5hbWU+CisgICAgICAgICAgICB1c2VzOiAgIk9FQmFzaWMiIGFuZCAiT0VCYXNpY0hhc2giLgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlcmUgaXMgYSBkdW1teSAibm9vcCIgc2lnbmF0dXJlIGhhbmRsZXIgZW5hYmxlZCBpbiBCaXRCYWtlLgorICAgICAgICAgICAgVGhpcyBtZWFucyB0aGF0IGJlaGF2aW9yIGlzIHVuY2hhbmdlZCBmcm9tIHByZXZpb3VzIHZlcnNpb25zLgorICAgICAgICAgICAgPGZpbGVuYW1lPk9FLUNvcmU8L2ZpbGVuYW1lPiB1c2VzIHRoZSAiT0VCYXNpY0hhc2giIHNpZ25hdHVyZSBoYW5kbGVyIGJ5IGRlZmF1bHQKKyAgICAgICAgICAgIHRocm91Z2ggdGhpcyBzZXR0aW5nIGluIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfU0lHTkFUVVJFX0hBTkRMRVIgPz0gIk9FQmFzaWNIYXNoIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlICJPRUJhc2ljSGFzaCIgPGZpbGVuYW1lPkJCX1NJR05BVFVSRV9IQU5ETEVSPC9maWxlbmFtZT4gaXMgdGhlIHNhbWUgYXMgdGhlCisgICAgICAgICAgICAiT0VCYXNpYyIgdmVyc2lvbiBidXQgYWRkcyB0aGUgdGFzayBoYXNoIHRvIHRoZSBzdGFtcCBmaWxlcy4KKyAgICAgICAgICAgIFRoaXMgcmVzdWx0cyBpbiBhbnkKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CisgICAgICAgICAgICBjaGFuZ2UgdGhhdCBjaGFuZ2VzIHRoZSB0YXNrIGhhc2gsIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgIGNhdXNpbmcgdGhlIHRhc2sgdG8gYmUgcnVuIGFnYWluLgorICAgICAgICAgICAgVGhpcyByZW1vdmVzIHRoZSBuZWVkIHRvIGJ1bXAgPGxpbmsgbGlua2VuZD0ndmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhbHVlcywgYW5kIGNoYW5nZXMgdG8gTWV0YWRhdGEgYXV0b21hdGljYWxseSByaXBwbGUgYWNyb3NzIHRoZSBidWlsZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgaXMgYWxzbyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgZW5kIHJlc3VsdCBvZiB0aGVzZSBzaWduYXR1cmUgZ2VuZXJhdG9ycyBpcyB0bworICAgICAgICAgICAgbWFrZSBzb21lIGRlcGVuZGVuY3kgYW5kIGhhc2ggaW5mb3JtYXRpb24gYXZhaWxhYmxlIHRvIHRoZSBidWlsZC4KKyAgICAgICAgICAgIFRoaXMgaW5mb3JtYXRpb24gaW5jbHVkZXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+QkJfQkFTRUhBU0hfdGFzay08L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+OgorICAgICAgICAgICAgICAgICAgICBUaGUgYmFzZSBoYXNoZXMgZm9yIGVhY2ggdGFzayBpbiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX0JBU0VIQVNIXzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmZpbGVuYW1lPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+OjwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnRhc2tuYW1lPC9yZXBsYWNlYWJsZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSBiYXNlIGhhc2hlcyBmb3IgZWFjaCBkZXBlbmRlbnQgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5CQkhBU0hERVBTXzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmZpbGVuYW1lPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+OjwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnRhc2tuYW1lPC9yZXBsYWNlYWJsZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSB0YXNrIGRlcGVuZGVuY2llcyBmb3IgZWFjaCB0YXNrLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX1RBU0tIQVNIPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSBoYXNoIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyB0YXNrLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3NoYXJlZC1zdGF0ZSc+CisgICAgICAgIDx0aXRsZT5TaGFyZWQgU3RhdGU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ2hlY2tzdW1zIGFuZCBkZXBlbmRlbmNpZXMsIGFzIGRpc2N1c3NlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiwgc29sdmUgaGFsZiB0aGUKKyAgICAgICAgICAgIHByb2JsZW0gb2Ygc3VwcG9ydGluZyBhIHNoYXJlZCBzdGF0ZS4KKyAgICAgICAgICAgIFRoZSBvdGhlciBwYXJ0IG9mIHRoZSBwcm9ibGVtIGlzIGJlaW5nIGFibGUgdG8gdXNlIGNoZWNrc3VtIGluZm9ybWF0aW9uIGR1cmluZyB0aGUgYnVpbGQKKyAgICAgICAgICAgIGFuZCBiZWluZyBhYmxlIHRvIHJldXNlIG9yIHJlYnVpbGQgc3BlY2lmaWMgY29tcG9uZW50cy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zc3RhdGUnPjxmaWxlbmFtZT5zc3RhdGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGNsYXNzIGlzIGEgcmVsYXRpdmVseSBnZW5lcmljIGltcGxlbWVudGF0aW9uIG9mIGhvdyB0byAiY2FwdHVyZSIKKyAgICAgICAgICAgIGEgc25hcHNob3Qgb2YgYSBnaXZlbiB0YXNrLgorICAgICAgICAgICAgVGhlIGlkZWEgaXMgdGhhdCB0aGUgYnVpbGQgcHJvY2VzcyBkb2VzIG5vdCBjYXJlIGFib3V0IHRoZSBzb3VyY2Ugb2YgYSB0YXNrJ3Mgb3V0cHV0LgorICAgICAgICAgICAgT3V0cHV0IGNvdWxkIGJlIGZyZXNobHkgYnVpbHQgb3IgaXQgY291bGQgYmUgZG93bmxvYWRlZCBhbmQgdW5wYWNrZWQgZnJvbQorICAgICAgICAgICAgc29tZXdoZXJlIC0gdGhlIGJ1aWxkIHByb2Nlc3MgZG9lcyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCBpdHMgb3JpZ2luLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIG91dHB1dCwgb25lIGlzIGp1c3QgYWJvdXQgY3JlYXRpbmcgYSBkaXJlY3RvcnkKKyAgICAgICAgICAgIGluIDxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgIEEgZ29vZCBleGFtcGxlIGlzIHRoZSBvdXRwdXQgb2YgZWl0aGVyCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIG9yCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZSc+PGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICBUaGUgb3RoZXIgdHlwZSBvZiBvdXRwdXQgb2NjdXJzIHdoZW4gYSBzZXQgb2YgZGF0YSBpcyBtZXJnZWQgaW50byBhIHNoYXJlZCBkaXJlY3RvcnkKKyAgICAgICAgICAgIHRyZWUgc3VjaCBhcyB0aGUgc3lzcm9vdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgdGVhbSBoYXMgdHJpZWQgdG8ga2VlcCB0aGUgZGV0YWlscyBvZiB0aGUKKyAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIGhpZGRlbiBpbiA8ZmlsZW5hbWU+c3N0YXRlPC9maWxlbmFtZT4gY2xhc3MuCisgICAgICAgICAgICBGcm9tIGEgdXNlcidzIHBlcnNwZWN0aXZlLCBhZGRpbmcgc2hhcmVkIHN0YXRlIHdyYXBwaW5nIHRvIGEgdGFzaworICAgICAgICAgICAgaXMgYXMgc2ltcGxlIGFzIHRoaXMKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1kZXBsb3knPjxmaWxlbmFtZT5kb19kZXBsb3k8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGV4YW1wbGUgdGFrZW4gZnJvbSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRlcGxveSc+PGZpbGVuYW1lPmRlcGxveTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFUExPWURJUiA9ICIke1dPUktESVJ9L2RlcGxveS0ke1BOfSIKKyAgICAgU1NUQVRFVEFTS1MgKz0gImRvX2RlcGxveSIKKyAgICAgZG9fZGVwbG95W3NzdGF0ZS1uYW1lXSA9ICJkZXBsb3kiCisgICAgIGRvX2RlcGxveVtzc3RhdGUtaW5wdXRkaXJzXSA9ICIke0RFUExPWURJUn0iCisgICAgIGRvX2RlcGxveVtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtERVBMT1lfRElSX0lNQUdFfSIKKworICAgICBweXRob24gZG9fZGVwbG95X3NldHNjZW5lICgpIHsKKyAgICAgICAgIHNzdGF0ZV9zZXRzY2VuZShkKQorICAgICB9CisgICAgIGFkZHRhc2sgZG9fZGVwbG95X3NldHNjZW5lCisgICAgIGRvX2RlcGxveVtkaXJzXSA9ICIke0RFUExPWURJUn0gJHtCfSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgd2UgYWRkIHNvbWUgZXh0cmEgZmxhZ3MgdG8gdGhlIHRhc2ssIGEgbmFtZSBmaWVsZCAoImRlcGxveSIpLCBhbgorICAgICAgICAgICAgaW5wdXQgZGlyZWN0b3J5IHdoZXJlIHRoZSB0YXNrIHNlbmRzIGRhdGEsIGFuZCB0aGUgb3V0cHV0CisgICAgICAgICAgICBkaXJlY3Rvcnkgd2hlcmUgdGhlIGRhdGEgZnJvbSB0aGUgdGFzayBzaG91bGQgZXZlbnR1YWxseSBiZSBjb3BpZWQuCisgICAgICAgICAgICBXZSBhbHNvIGFkZCBhIDxmaWxlbmFtZT5fc2V0c2NlbmU8L2ZpbGVuYW1lPiB2YXJpYW50IG9mIHRoZSB0YXNrIGFuZCBhZGQgdGhlIHRhc2sKKyAgICAgICAgICAgIG5hbWUgdG8gdGhlIDxmaWxlbmFtZT5TU1RBVEVUQVNLUzwvZmlsZW5hbWU+IGxpc3QuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBoYXZlIGEgZGlyZWN0b3J5IHdob3NlIGNvbnRlbnRzIHlvdSBuZWVkIHRvIHByZXNlcnZlLCB5b3UgY2FuIGRvIHRoaXMgd2l0aAorICAgICAgICAgICAgYSBsaW5lIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZG9fcGFja2FnZVtzc3RhdGUtcGxhaW5kaXJzXSA9ICIke1BLR0R9ICR7UEtHREVTVH0iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGlzIG1ldGhvZCwgYXMgd2VsbCBhcyB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIGFsc28gd29ya3MgZm9yIG11bHRpcGxlIGRpcmVjdG9yaWVzLgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkb19wYWNrYWdlW3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7UEtHREVTVFdPUkt9ICR7U0hMSUJTV09SS0RJUn0iCisgICAgIGRvX3BhY2thZ2Vbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7UEtHREFUQV9ESVJ9ICR7U0hMSUJTRElSfSIKKyAgICAgZG9fcGFja2FnZVtzc3RhdGUtbG9ja2ZpbGVdID0gIiR7UEFDS0FHRUxPQ0t9IgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlc2UgbWV0aG9kcyBhbHNvIGluY2x1ZGUgdGhlIGFiaWxpdHkgdG8gdGFrZSBhIGxvY2tmaWxlIHdoZW4gbWFuaXB1bGF0aW5nCisgICAgICAgICAgICBzaGFyZWQgc3RhdGUgZGlyZWN0b3J5IHN0cnVjdHVyZXMgc2luY2Ugc29tZSBjYXNlcyBhcmUgc2Vuc2l0aXZlIHRvIGZpbGUKKyAgICAgICAgICAgIGFkZGl0aW9ucyBvciByZW1vdmFscy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmVoaW5kIHRoZSBzY2VuZXMsIHRoZSBzaGFyZWQgc3RhdGUgY29kZSB3b3JrcyBieSBsb29raW5nIGluCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1NUQVRFX0RJUic+PGZpbGVuYW1lPlNTVEFURV9ESVI8L2ZpbGVuYW1lPjwvbGluaz4gYW5kCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1NUQVRFX01JUlJPUlMnPjxmaWxlbmFtZT5TU1RBVEVfTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgZm9yIHNoYXJlZCBzdGF0ZSBmaWxlcy4KKyAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1NUQVRFX01JUlJPUlMgPz0gIlwKKyAgICAgZmlsZTovLy4qIGh0dHA6Ly9zb21lc2VydmVyLnRsZC9zaGFyZS9zc3RhdGUvUEFUSCBcbiBcCisgICAgIGZpbGU6Ly8uKiBmaWxlOi8vL3NvbWUvbG9jYWwvZGlyL3NzdGF0ZS9QQVRIIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhlIHNoYXJlZCBzdGF0ZSBkaXJlY3RvcnkgKDxmaWxlbmFtZT5TU1RBVEVfRElSPC9maWxlbmFtZT4pIGlzCisgICAgICAgICAgICAgICAgb3JnYW5pemVkIGludG8gdHdvLWNoYXJhY3RlciBzdWJkaXJlY3Rvcmllcywgd2hlcmUgdGhlIHN1YmRpcmVjdG9yeQorICAgICAgICAgICAgICAgIG5hbWVzIGFyZSBiYXNlZCBvbiB0aGUgZmlyc3QgdHdvIGNoYXJhY3RlcnMgb2YgdGhlIGhhc2guCisgICAgICAgICAgICAgICAgSWYgdGhlIHNoYXJlZCBzdGF0ZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBhIG1pcnJvciBoYXMgdGhlCisgICAgICAgICAgICAgICAgc2FtZSBzdHJ1Y3R1cmUgYXMgPGZpbGVuYW1lPlNTVEFURV9ESVI8L2ZpbGVuYW1lPiwgeW91IG11c3QKKyAgICAgICAgICAgICAgICBzcGVjaWZ5ICJQQVRIIiBhcyBwYXJ0IG9mIHRoZSBVUkkgdG8gZW5hYmxlIHRoZSBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICB0byBtYXAgdG8gdGhlIGFwcHJvcHJpYXRlIHN1YmRpcmVjdG9yeS4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHNoYXJlZCBzdGF0ZSBwYWNrYWdlIHZhbGlkaXR5IGNhbiBiZSBkZXRlY3RlZCBqdXN0IGJ5IGxvb2tpbmcgYXQgdGhlCisgICAgICAgICAgICBmaWxlbmFtZSBzaW5jZSB0aGUgZmlsZW5hbWUgY29udGFpbnMgdGhlIHRhc2sgY2hlY2tzdW0gKG9yIHNpZ25hdHVyZSkgYXMKKyAgICAgICAgICAgIGRlc2NyaWJlZCBlYXJsaWVyIGluIHRoaXMgc2VjdGlvbi4KKyAgICAgICAgICAgIElmIGEgdmFsaWQgc2hhcmVkIHN0YXRlIHBhY2thZ2UgaXMgZm91bmQsIHRoZSBidWlsZCBwcm9jZXNzIGRvd25sb2FkcyBpdAorICAgICAgICAgICAgYW5kIHVzZXMgaXQgdG8gYWNjZWxlcmF0ZSB0aGUgdGFzay4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGJ1aWxkIHByb2Nlc3NlcyB1c2UgdGhlIDxmaWxlbmFtZT4qX3NldHNjZW5lPC9maWxlbmFtZT4gdGFza3MKKyAgICAgICAgICAgIGZvciB0aGUgdGFzayBhY2NlbGVyYXRpb24gcGhhc2UuCisgICAgICAgICAgICBCaXRCYWtlIGdvZXMgdGhyb3VnaCB0aGlzIHBoYXNlIGJlZm9yZSB0aGUgbWFpbiBleGVjdXRpb24gY29kZSBhbmQgdHJpZXMKKyAgICAgICAgICAgIHRvIGFjY2VsZXJhdGUgYW55IHRhc2tzIGZvciB3aGljaCBpdCBjYW4gZmluZCBzaGFyZWQgc3RhdGUgcGFja2FnZXMuCisgICAgICAgICAgICBJZiBhIHNoYXJlZCBzdGF0ZSBwYWNrYWdlIGZvciBhIHRhc2sgaXMgYXZhaWxhYmxlLCB0aGUgc2hhcmVkIHN0YXRlCisgICAgICAgICAgICBwYWNrYWdlIGlzIHVzZWQuCisgICAgICAgICAgICBUaGlzIG1lYW5zIHRoZSB0YXNrIGFuZCBhbnkgdGFza3Mgb24gd2hpY2ggaXQgaXMgZGVwZW5kZW50IGFyZSBub3QKKyAgICAgICAgICAgIGV4ZWN1dGVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyBhIHJlYWwgd29ybGQgZXhhbXBsZSwgdGhlIGFpbSBpcyB3aGVuIGJ1aWxkaW5nIGFuIElQSy1iYXNlZCBpbWFnZSwKKyAgICAgICAgICAgIG9ubHkgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZV93cml0ZV9pcGsnPjxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlX2lwazwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdGFza3Mgd291bGQgaGF2ZSB0aGVpcgorICAgICAgICAgICAgc2hhcmVkIHN0YXRlIHBhY2thZ2VzIGZldGNoZWQgYW5kIGV4dHJhY3RlZC4KKyAgICAgICAgICAgIFNpbmNlIHRoZSBzeXNyb290IGlzIG5vdCB1c2VkLCBpdCB3b3VsZCBuZXZlciBnZXQgZXh0cmFjdGVkLgorICAgICAgICAgICAgVGhpcyBpcyBhbm90aGVyIHJlYXNvbiB3aHkgYSB0YXNrLWJhc2VkIGFwcHJvYWNoIGlzIHByZWZlcnJlZCBvdmVyIGEKKyAgICAgICAgICAgIHJlY2lwZS1iYXNlZCBhcHByb2FjaCwgd2hpY2ggd291bGQgaGF2ZSB0byBpbnN0YWxsIHRoZSBvdXRwdXQgZnJvbSBldmVyeSB0YXNrLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3RpcHMtYW5kLXRyaWNrcyc+CisgICAgICAgIDx0aXRsZT5UaXBzIGFuZCBUcmlja3M8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGNvZGUgaW4gdGhlIGJ1aWxkIHN5c3RlbSB0aGF0IHN1cHBvcnRzIGluY3JlbWVudGFsIGJ1aWxkcyBpcyBub3QKKyAgICAgICAgICAgIHNpbXBsZSBjb2RlLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByZXNlbnRzIHNvbWUgdGlwcyBhbmQgdHJpY2tzIHRoYXQgaGVscCB5b3Ugd29yayBhcm91bmQKKyAgICAgICAgICAgIGlzc3VlcyByZWxhdGVkIHRvIHNoYXJlZCBzdGF0ZSBjb2RlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RlYnVnZ2luZyc+CisgICAgICAgICAgICA8dGl0bGU+RGVidWdnaW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiB0aGluZ3MgZ28gd3JvbmcsIGRlYnVnZ2luZyBuZWVkcyB0byBiZSBzdHJhaWdodGZvcndhcmQuCisgICAgICAgICAgICAgICAgQmVjYXVzZSBvZiB0aGlzLCB0aGUgWW9jdG8gUHJvamVjdCBpbmNsdWRlcyBzdHJvbmcgZGVidWdnaW5nCisgICAgICAgICAgICAgICAgdG9vbHM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZW5ldmVyIGEgc2hhcmVkIHN0YXRlIHBhY2thZ2UgaXMgd3JpdHRlbiBvdXQsIHNvIGlzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgPGZpbGVuYW1lPi5zaWdpbmZvPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcHJhY3RpY2UgcmVzdWx0cyBpbiBhIHBpY2tsZWQgUHl0aG9uIGRhdGFiYXNlIG9mIGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1ldGFkYXRhIHRoYXQgd2VudCBpbnRvIGNyZWF0aW5nIHRoZSBoYXNoIGZvciBhIGdpdmVuIHNoYXJlZCBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPklmIHlvdSBydW4gQml0QmFrZSB3aXRoIHRoZSA8ZmlsZW5hbWU+LS1kdW1wLXNpZ25hdHVyZXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgKG9yIDxmaWxlbmFtZT4tUzwvZmlsZW5hbWU+KSBvcHRpb24sIEJpdEJha2UgZHVtcHMgb3V0CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnNpZ2luZm88L2ZpbGVuYW1lPiBmaWxlcyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHN0YW1wIGRpcmVjdG9yeSBmb3IgZXZlcnkgdGFzayBpdCB3b3VsZCBoYXZlIGV4ZWN1dGVkIGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5nIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IHBhY2thZ2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGVyZSBpcyBhIDxmaWxlbmFtZT5iaXRiYWtlLWRpZmZzaWdzPC9maWxlbmFtZT4gY29tbWFuZCB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICBjYW4gcHJvY2VzcyA8ZmlsZW5hbWU+LnNpZ2luZm88L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBzcGVjaWZ5IG9uZSBvZiB0aGVzZSBmaWxlcywgQml0QmFrZSBkdW1wcyBvdXQgdGhlIGRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGluIHRoZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHNwZWNpZnkgdHdvIGZpbGVzLCBCaXRCYWtlIGNvbXBhcmVzIHRoZSB0d28gZmlsZXMgYW5kIGR1bXBzIG91dAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHR3by4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbW9yZSBlYXNpbHkgaGVscHMgYW5zd2VyIHRoZSBxdWVzdGlvbiBvZiAiV2hhdAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCBiZXR3ZWVuIFggYW5kIFk/IjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2ludmFsaWRhdGluZy1zaGFyZWQtc3RhdGUnPgorICAgICAgICAgICAgPHRpdGxlPkludmFsaWRhdGluZyBTaGFyZWQgU3RhdGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIGNoZWNrc3VtcyBhbmQgc2hhcmVkIHN0YXRlCisgICAgICAgICAgICAgICAgY2FjaGUgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSByZWJ1aWxkaW5nIHRhc2tzLgorICAgICAgICAgICAgICAgIENvbGxlY3RpdmVseSwgdGhpcyBzY2hlbWUgaXMga25vd24gYXMgInNoYXJlZCBzdGF0ZSBjb2RlLiIKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgd2l0aCBhbGwgc2NoZW1lcywgdGhpcyBvbmUgaGFzIHNvbWUgZHJhd2JhY2tzLgorICAgICAgICAgICAgICAgIEl0IGlzIHBvc3NpYmxlIHRoYXQgeW91IGNvdWxkIG1ha2UgaW1wbGljaXQgY2hhbmdlcyB0byB5b3VyCisgICAgICAgICAgICAgICAgY29kZSB0aGF0IHRoZSBjaGVja3N1bSBjYWxjdWxhdGlvbnMgZG8gbm90IHRha2UgaW50bworICAgICAgICAgICAgICAgIGFjY291bnQuCisgICAgICAgICAgICAgICAgVGhlc2UgaW1wbGljaXQgY2hhbmdlcyBhZmZlY3QgYSB0YXNrJ3Mgb3V0cHV0IGJ1dCBkbyBub3QgdHJpZ2dlcgorICAgICAgICAgICAgICAgIHRoZSBzaGFyZWQgc3RhdGUgY29kZSBpbnRvIHJlYnVpbGRpbmcgYSByZWNpcGUuCisgICAgICAgICAgICAgICAgQ29uc2lkZXIgYW4gZXhhbXBsZSBkdXJpbmcgd2hpY2ggYSB0b29sIGNoYW5nZXMgaXRzIG91dHB1dC4KKyAgICAgICAgICAgICAgICBBc3N1bWUgdGhhdCB0aGUgb3V0cHV0IG9mIDxmaWxlbmFtZT5ycG1kZXBzPC9maWxlbmFtZT4gY2hhbmdlcy4KKyAgICAgICAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBjaGFuZ2Ugc2hvdWxkIGJlIHRoYXQgYWxsIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vfd3JpdGVfcnBtPC9maWxlbmFtZT4gc2hhcmVkIHN0YXRlIGNhY2hlCisgICAgICAgICAgICAgICAgaXRlbXMgYmVjb21lIGludmFsaWQuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgYmVjYXVzZSB0aGUgY2hhbmdlIHRvIHRoZSBvdXRwdXQgaXMKKyAgICAgICAgICAgICAgICBleHRlcm5hbCB0byB0aGUgY29kZSBhbmQgdGhlcmVmb3JlIGltcGxpY2l0LAorICAgICAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIHNoYXJlZCBzdGF0ZSBjYWNoZSBpdGVtcyBkbyBub3QgYmVjb21lCisgICAgICAgICAgICAgICAgaW52YWxpZGF0ZWQuCisgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB0aGUgYnVpbGQgcHJvY2VzcyB1c2VzIHRoZSBjYWNoZWQgaXRlbXMgcmF0aGVyCisgICAgICAgICAgICAgICAgdGhhbiBydW5uaW5nIHRoZSB0YXNrIGFnYWluLgorICAgICAgICAgICAgICAgIE9idmlvdXNseSwgdGhlc2UgdHlwZXMgb2YgaW1wbGljaXQgY2hhbmdlcyBjYW4gY2F1c2UgcHJvYmxlbXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGF2b2lkIHRoZXNlIHByb2JsZW1zIGR1cmluZyB0aGUgYnVpbGQsIHlvdSBuZWVkIHRvCisgICAgICAgICAgICAgICAgdW5kZXJzdGFuZCB0aGUgZWZmZWN0cyBvZiBhbnkgY2hhbmdlcyB5b3UgbWFrZS4KKyAgICAgICAgICAgICAgICBSZWFsaXplIHRoYXQgY2hhbmdlcyB5b3UgbWFrZSBkaXJlY3RseSB0byBhIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgYXJlIGF1dG9tYXRpY2FsbHkgZmFjdG9yZWQgaW50byB0aGUgY2hlY2tzdW0gY2FsY3VsYXRpb24uCisgICAgICAgICAgICAgICAgVGh1cywgdGhlc2UgZXhwbGljaXQgY2hhbmdlcyBpbnZhbGlkYXRlIHRoZSBhc3NvY2lhdGVkIGFyZWEgb2YKKyAgICAgICAgICAgICAgICBzaGFyZWQgc3RhdGUgY2FjaGUuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgeW91IG5lZWQgdG8gYmUgYXdhcmUgb2YgYW55IGltcGxpY2l0IGNoYW5nZXMgdGhhdAorICAgICAgICAgICAgICAgIGFyZSBub3Qgb2J2aW91cyBjaGFuZ2VzIHRvIHRoZSBjb2RlIGFuZCBjb3VsZCBhZmZlY3QgdGhlIG91dHB1dAorICAgICAgICAgICAgICAgIG9mIGEgZ2l2ZW4gdGFzay4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiB5b3UgaWRlbnRpZnkgYW4gaW1wbGljaXQgY2hhbmdlLCB5b3UgY2FuIGVhc2lseSB0YWtlIHN0ZXBzCisgICAgICAgICAgICAgICAgdG8gaW52YWxpZGF0ZSB0aGUgY2FjaGUgYW5kIGZvcmNlIHRoZSB0YXNrcyB0byBydW4uCisgICAgICAgICAgICAgICAgVGhlIHN0ZXBzIHlvdSBjYW4gdGFrZSBhcmUgYXMgc2ltcGxlIGFzIGNoYW5naW5nIGEgZnVuY3Rpb24ncworICAgICAgICAgICAgICAgIGNvbW1lbnRzIGluIHRoZSBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdG8gaW52YWxpZGF0ZSBwYWNrYWdlIHNoYXJlZCBzdGF0ZSBmaWxlcywgY2hhbmdlCisgICAgICAgICAgICAgICAgdGhlIGNvbW1lbnQgc3RhdGVtZW50cyBvZgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlJz48ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIG9yIHRoZSBjb21tZW50cyBvZiBvbmUgb2YgdGhlIGZ1bmN0aW9ucyBpdCBjYWxscy4KKyAgICAgICAgICAgICAgICBFdmVuIHRob3VnaCB0aGUgY2hhbmdlIGlzIHB1cmVseSBjb3NtZXRpYywgaXQgY2F1c2VzIHRoZQorICAgICAgICAgICAgICAgIGNoZWNrc3VtIHRvIGJlIHJlY2FsY3VsYXRlZCBhbmQgZm9yY2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICAgICBzeXN0ZW0gdG8gcnVuIHRoZSB0YXNrIGFnYWluLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSBvZiBhIGNvbW1pdCB0aGF0IG1ha2VzIGEgY29zbWV0aWMgY2hhbmdlIHRvCisgICAgICAgICAgICAgICAgaW52YWxpZGF0ZSBzaGFyZWQgc3RhdGUsIHNlZSB0aGlzCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpL3Bva3kvY29tbWl0L21ldGEvY2xhc3Nlcy9wYWNrYWdlLmJiY2xhc3M/aWQ9NzM3ZjhiYmI0ZjI3YjQ4MzcwNDdjYjliNGZiZmUwMWRmZGUzNmQ1NCc+Y29tbWl0PC91bGluaz4uCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSd4MzInPgorICAgIDx0aXRsZT54MzI8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIHgzMiBpcyBhIHByb2Nlc3Nvci1zcGVjaWZpYyBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChwc0FCSSkgZm9yIHg4Nl82NC4KKyAgICAgICAgQW4gQUJJIGRlZmluZXMgdGhlIGNhbGxpbmcgY29udmVudGlvbnMgYmV0d2VlbiBmdW5jdGlvbnMgaW4gYSBwcm9jZXNzaW5nIGVudmlyb25tZW50LgorICAgICAgICBUaGUgaW50ZXJmYWNlIGRldGVybWluZXMgd2hhdCByZWdpc3RlcnMgYXJlIHVzZWQgYW5kIHdoYXQgdGhlIHNpemVzIGFyZSBmb3IgdmFyaW91cyBDIGRhdGEgdHlwZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFNvbWUgcHJvY2Vzc2luZyBlbnZpcm9ubWVudHMgcHJlZmVyIHVzaW5nIDMyLWJpdCBhcHBsaWNhdGlvbnMgZXZlbiB3aGVuIHJ1bm5pbmcKKyAgICAgICAgb24gSW50ZWwgNjQtYml0IHBsYXRmb3Jtcy4KKyAgICAgICAgQ29uc2lkZXIgdGhlIGkzODYgcHNBQkksIHdoaWNoIGlzIGEgdmVyeSBvbGQgMzItYml0IEFCSSBmb3IgSW50ZWwgNjQtYml0IHBsYXRmb3Jtcy4KKyAgICAgICAgVGhlIGkzODYgcHNBQkkgZG9lcyBub3QgcHJvdmlkZSBlZmZpY2llbnQgdXNlIGFuZCBhY2Nlc3Mgb2YgdGhlIEludGVsIDY0LWJpdCBwcm9jZXNzb3IgcmVzb3VyY2VzLAorICAgICAgICBsZWF2aW5nIHRoZSBzeXN0ZW0gdW5kZXJ1dGlsaXplZC4KKyAgICAgICAgTm93IGNvbnNpZGVyIHRoZSB4ODZfNjQgcHNBQkkuCisgICAgICAgIFRoaXMgQUJJIGlzIG5ld2VyIGFuZCB1c2VzIDY0LWJpdHMgZm9yIGRhdGEgc2l6ZXMgYW5kIHByb2dyYW0gcG9pbnRlcnMuCisgICAgICAgIFRoZSBleHRyYSBiaXRzIGluY3JlYXNlIHRoZSBmb290cHJpbnQgc2l6ZSBvZiB0aGUgcHJvZ3JhbXMsIGxpYnJhcmllcywKKyAgICAgICAgYW5kIGFsc28gaW5jcmVhc2VzIHRoZSBtZW1vcnkgYW5kIGZpbGUgc3lzdGVtIHNpemUgcmVxdWlyZW1lbnRzLgorICAgICAgICBFeGVjdXRpbmcgdW5kZXIgdGhlIHgzMiBwc0FCSSBlbmFibGVzIHVzZXIgcHJvZ3JhbXMgdG8gdXRpbGl6ZSBDUFUgYW5kIHN5c3RlbSByZXNvdXJjZXMKKyAgICAgICAgbW9yZSBlZmZpY2llbnRseSB3aGlsZSBrZWVwaW5nIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRoZSBhcHBsaWNhdGlvbnMgbG93LgorICAgICAgICBFeHRyYSBiaXRzIGFyZSB1c2VkIGZvciByZWdpc3RlcnMgYnV0IG5vdCBmb3IgYWRkcmVzc2luZyBtZWNoYW5pc21zLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdzdXBwb3J0Jz4KKyAgICAgICAgPHRpdGxlPlN1cHBvcnQ8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBZb2N0byBQcm9qZWN0IHJlbGVhc2Ugc3VwcG9ydHMgdGhlIGZpbmFsIHNwZWNpZmljYXRpb25zIG9mIHgzMgorICAgICAgICAgICAgcHNBQkkuCisgICAgICAgICAgICBTdXBwb3J0IGZvciB4MzIgcHNBQkkgZXhpc3RzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Zb3UgY2FuIGNyZWF0ZSBwYWNrYWdlcyBhbmQgaW1hZ2VzIGluIHgzMiBwc0FCSSBmb3JtYXQgb24geDg2XzY0IGFyY2hpdGVjdHVyZSB0YXJnZXRzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+WW91IGNhbiBzdWNjZXNzZnVsbHkgYnVpbGQgbWFueSByZWNpcGVzIHdpdGggdGhlIHgzMiB0b29sY2hhaW4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBjYW4gY3JlYXRlIGFuZCBib290IDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2Utc2F0bzwvZmlsZW5hbWU+IGltYWdlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2NvbXBsZXRpbmcteDMyJz4KKyAgICAgICAgPHRpdGxlPkNvbXBsZXRpbmcgeDMyPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZ1dHVyZSBQbGFucyBmb3IgdGhlIHgzMiBwc0FCSSBpbiB0aGUgWW9jdG8gUHJvamVjdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FbmhhbmNlIGFuZCBmaXggdGhlIGZldyByZW1haW5pbmcgcmVjaXBlcyBzbyB0aGV5CisgICAgICAgICAgICAgICAgICAgIHdvcmsgd2l0aCBhbmQgc3VwcG9ydCB4MzIgdG9vbGNoYWlucy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RW5oYW5jZSBSUE0gUGFja2FnZSBNYW5hZ2VyIChSUE0pIHN1cHBvcnQgZm9yIHgzMiBiaW5hcmllcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U3VwcG9ydCBsYXJnZXIgaW1hZ2VzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmcteDMyLXJpZ2h0LW5vdyc+CisgICAgICAgIDx0aXRsZT5Vc2luZyB4MzIgUmlnaHQgTm93PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvbGxvdyB0aGVzZSBzdGVwcyB0byB1c2UgdGhlIHgzMiBzcEFCSToKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVuYWJsZSB0aGUgeDMyIHBzQUJJIHR1bmluZyBmaWxlIGZvciA8ZmlsZW5hbWU+eDg2XzY0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZXMgYnkgZWRpdGluZyB0aGUgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGxpa2UgdGhpczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgTUFDSElORSA9ICJxZW11eDg2LTY0IgorICAgICAgREVGQVVMVFRVTkUgPSAieDg2LTY0LXgzMiIKKyAgICAgIGJhc2VsaWIgPSAiJHtAZC5nZXRWYXIoJ0JBU0VfTElCX3R1bmUtJyArIChkLmdldFZhcignREVGQVVMVFRVTkUnLCBUcnVlKSBcCisgICAgICAgICBvciAnSU5WQUxJRCcpLCBUcnVlKSBvciAnbGliJ30iCisgICAgICAjTUFDSElORSA9ICJnZW5lcmljeDg2IgorICAgICAgI0RFRkFVTFRUVU5FID0gImNvcmUyLTY0LXgzMiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BcyB1c3VhbCwgdXNlIEJpdEJha2UgdG8gYnVpbGQgYW4gaW1hZ2UgdGhhdCBzdXBwb3J0cyB0aGUgeDMyIHBzQUJJLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0bworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFzIHVzdWFsLCBydW4geW91ciBpbWFnZSB1c2luZyBRRU1VOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcnVucWVtdSBxZW11eDg2LTY0IGNvcmUtaW1hZ2Utc2F0bworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9IndheWxhbmQiPgorICAgIDx0aXRsZT5XYXlsYW5kPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dheWxhbmRfKGRpc3BsYXlfc2VydmVyX3Byb3RvY29sKSc+V2F5bGFuZDwvdWxpbms+CisgICAgICAgIGlzIGEgY29tcHV0ZXIgZGlzcGxheSBzZXJ2ZXIgcHJvdG9jb2wgdGhhdAorICAgICAgICBwcm92aWRlcyBhIG1ldGhvZCBmb3IgY29tcG9zaXRpbmcgd2luZG93IG1hbmFnZXJzIHRvIGNvbW11bmljYXRlCisgICAgICAgIGRpcmVjdGx5IHdpdGggYXBwbGljYXRpb25zIGFuZCB2aWRlbyBoYXJkd2FyZSBhbmQgZXhwZWN0cyB0aGVtIHRvCisgICAgICAgIGNvbW11bmljYXRlIHdpdGggaW5wdXQgaGFyZHdhcmUgdXNpbmcgb3RoZXIgbGlicmFyaWVzLgorICAgICAgICBVc2luZyBXYXlsYW5kIHdpdGggc3VwcG9ydGluZyB0YXJnZXRzIGNhbiByZXN1bHQgaW4gYmV0dGVyIGNvbnRyb2wKKyAgICAgICAgb3ZlciBncmFwaGljcyBmcmFtZSByZW5kZXJpbmcgdGhhbiBhbiBhcHBsaWNhdGlvbiBtaWdodCBvdGhlcndpc2UKKyAgICAgICAgYWNoaWV2ZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgdGhlIFdheWxhbmQgcHJvdG9jb2wgbGlicmFyaWVzIGFuZCB0aGUKKyAgICAgICAgcmVmZXJlbmNlCisgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2F5bGFuZF8oZGlzcGxheV9zZXJ2ZXJfcHJvdG9jb2wpI1dlc3Rvbic+V2VzdG9uPC91bGluaz4KKyAgICAgICAgY29tcG9zaXRvciBhcyBwYXJ0IG9mIGl0cyByZWxlYXNlLgorICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHdoYXQgeW91IG5lZWQgdG8gZG8gdG8gaW1wbGVtZW50IFdheWxhbmQgYW5kCisgICAgICAgIHVzZSB0aGUgY29tcG9zaXRvciB3aGVuIGJ1aWxkaW5nIGFuIGltYWdlIGZvciBhIHN1cHBvcnRpbmcgdGFyZ2V0LgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSJ3YXlsYW5kLXN1cHBvcnQiPgorICAgICAgICA8dGl0bGU+U3VwcG9ydDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgV2F5bGFuZCBwcm90b2NvbCBsaWJyYXJpZXMgYW5kIHRoZSByZWZlcmVuY2UgV2VzdG9uIGNvbXBvc2l0b3IKKyAgICAgICAgICAgIHNoaXAgYXMgaW50ZWdyYXRlZCBwYWNrYWdlcyBpbiB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBsYXllcgorICAgICAgICAgICAgb2YgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICBTcGVjaWZpY2FsbHksIHlvdSBjYW4gZmluZCB0aGUgcmVjaXBlcyB0aGF0IGJ1aWxkIGJvdGggV2F5bGFuZAorICAgICAgICAgICAgYW5kIFdlc3RvbiBhdCA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBidWlsZCBib3RoIHRoZSBXYXlsYW5kIGFuZCBXZXN0b24gcGFja2FnZXMgZm9yIHVzZSBvbmx5CisgICAgICAgICAgICB3aXRoIHRhcmdldHMgdGhhdCBhY2NlcHQgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZHJpLmZyZWVkZXNrdG9wLm9yZy93aWtpLyc+TWVzYSAzRCBhbmQgRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZTwvdWxpbms+LAorICAgICAgICAgICAgd2hpY2ggaXMgYWxzbyBrbm93biBhcyBNZXNhIERSSS4KKyAgICAgICAgICAgIFRoaXMgaW1wbGllcyB0aGF0IHlvdSBjYW5ub3QgYnVpbGQgYW5kIHVzZSB0aGUgcGFja2FnZXMgaWYgeW91cgorICAgICAgICAgICAgdGFyZ2V0IHVzZXMsIGZvciBleGFtcGxlLCB0aGUKKyAgICAgICAgICAgIDx0cmFkZW1hcmsgY2xhc3M9J3JlZ2lzdGVyZWQnPkludGVsPC90cmFkZW1hcms+IEVtYmVkZGVkIE1lZGlhIGFuZAorICAgICAgICAgICAgR3JhcGhpY3MgRHJpdmVyICg8dHJhZGVtYXJrIGNsYXNzPSdyZWdpc3RlcmVkJz5JbnRlbDwvdHJhZGVtYXJrPgorICAgICAgICAgICAgRU1HRCkgdGhhdCBvdmVycmlkZXMgTWVzYSBEUkkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIER1ZSB0byBsYWNrIG9mIEVHTCBzdXBwb3J0LCBXZXN0b24gMS4wLjMgd2lsbCBub3QgcnVuIGRpcmVjdGx5IG9uCisgICAgICAgICAgICB0aGUgZW11bGF0ZWQgUUVNVSBoYXJkd2FyZS4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHRoaXMgdmVyc2lvbiBvZiBXZXN0b24gd2lsbCBydW4gdW5kZXIgWCBlbXVsYXRpb24gd2l0aG91dAorICAgICAgICAgICAgaXNzdWVzLgorICAgICAgICA8L25vdGU+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImVuYWJsaW5nLXdheWxhbmQtaW4tYW4taW1hZ2UiPgorICAgICAgICA8dGl0bGU+RW5hYmxpbmcgV2F5bGFuZCBpbiBhbiBJbWFnZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBlbmFibGUgV2F5bGFuZCwgeW91IG5lZWQgdG8gZW5hYmxlIGl0IHRvIGJlIGJ1aWx0IGFuZCBlbmFibGUKKyAgICAgICAgICAgIGl0IHRvIGJlIGluY2x1ZGVkIGluIHRoZSBpbWFnZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJlbmFibGUtYnVpbGRpbmciPgorICAgICAgICAgICAgPHRpdGxlPkJ1aWxkaW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gY2F1c2UgTWVzYSB0byBidWlsZCB0aGUgPGZpbGVuYW1lPndheWxhbmQtZWdsPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBwbGF0Zm9ybSBhbmQgV2VzdG9uIHRvIGJ1aWxkIFdheWxhbmQgd2l0aCBLZXJuZWwgTW9kZQorICAgICAgICAgICAgICAgIFNldHRpbmcKKyAgICAgICAgICAgICAgICAoPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLmFyY2hsaW51eC5vcmcvaW5kZXgucGhwL0tlcm5lbF9Nb2RlX1NldHRpbmcnPktNUzwvdWxpbms+KQorICAgICAgICAgICAgICAgIHN1cHBvcnQsIGluY2x1ZGUgdGhlICJ3YXlsYW5kIiBmbGFnIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9InZhci1ESVNUUk9fRkVBVFVSRVMiPjxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBESVNUUk9fRkVBVFVSRVNfYXBwZW5kID0gIiB3YXlsYW5kIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgSWYgWDExIGhhcyBiZWVuIGVuYWJsZWQgZWxzZXdoZXJlLCBXZXN0b24gd2lsbCBidWlsZCBXYXlsYW5kCisgICAgICAgICAgICAgICAgd2l0aCBYMTEgc3VwcG9ydAorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9ImVuYWJsZS1pbnN0YWxsYXRpb24taW4tYW4taW1hZ2UiPgorICAgICAgICAgICAgPHRpdGxlPkluc3RhbGxpbmc8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBpbnN0YWxsIHRoZSBXYXlsYW5kIGZlYXR1cmUgaW50byBhbiBpbWFnZSwgeW91IG11c3QKKyAgICAgICAgICAgICAgICBpbmNsdWRlIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMJz48ZmlsZW5hbWU+Q09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgc3RhdGVtZW50IGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQ09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMICs9ICJ3YXlsYW5kIHdlc3RvbiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icnVubmluZy13ZXN0b24iPgorICAgICAgICA8dGl0bGU+UnVubmluZyBXZXN0b248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gcnVuIFdlc3RvbiBpbnNpZGUgWDExLCBlbmFibGluZyBpdCBhcyBkZXNjcmliZWQgZWFybGllciBhbmQKKyAgICAgICAgICAgIGJ1aWxkaW5nIGEgU2F0byBpbWFnZSBpcyBzdWZmaWNpZW50LgorICAgICAgICAgICAgSWYgeW91IGFyZSBydW5uaW5nIHlvdXIgaW1hZ2UgdW5kZXIgU2F0bywgYSBXZXN0b24gTGF1bmNoZXIgYXBwZWFycworICAgICAgICAgICAgaW4gdGhlICJVdGlsaXR5IiBjYXRlZ29yeS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBydW4gV2VzdG9uIHRocm91Z2ggdGhlIGNvbW1hbmQtbGluZQorICAgICAgICAgICAgaW50ZXJwcmV0b3IgKENMSSksIHdoaWNoIGlzIGJldHRlciBzdWl0ZWQgZm9yIGRldmVsb3BtZW50IHdvcmsuCisgICAgICAgICAgICBUbyBydW4gV2VzdG9uIHVuZGVyIHRoZSBDTEksIHlvdSBuZWVkIHRvIGRvIHRoZSBmb2xsb3dpbmcgYWZ0ZXIKKyAgICAgICAgICAgIHlvdXIgaW1hZ2UgaXMgYnVpbHQ6CisgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJ1biB0aGVzZSBjb21tYW5kcyB0byBleHBvcnQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlhER19SVU5USU1FX0RJUjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1rZGlyIC1wIC90bXAvJFVTRVItd2VzdG9uCisgICAgIGNobW9kIDA3MDAgL3RtcC8kVVNFUi13ZXN0b24KKyAgICAgZXhwb3J0IFhER19SVU5USU1FX0RJUj0vdG1wLyRVU0VSLXdlc3RvbgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkxhdW5jaCBXZXN0b24gaW4gdGhlIHNoZWxsOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHdlc3RvbgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ibGljZW5zZXMiPgorICAgIDx0aXRsZT5MaWNlbnNlczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgbWVjaGFuaXNtIGJ5IHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgIHRyYWNrcyBjaGFuZ2VzIHRvIGxpY2Vuc2luZyB0ZXh0LgorICAgICAgICBUaGUgc2VjdGlvbiBhbHNvIGRlc2NyaWJlcyBob3cgdG8gZW5hYmxlIGNvbW1lcmNpYWxseSBsaWNlbnNlZCByZWNpcGVzLAorICAgICAgICB3aGljaCBieSBkZWZhdWx0IGFyZSBkaXNhYmxlZC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIHRoYXQgY2FuIGhlbHAgeW91IG1haW50YWluIGNvbXBsaWFuY2Ugd2l0aCB2YXJpb3VzIG9wZW4KKyAgICAgICAgc291cmNlIGxpY2Vuc2luZyBkdXJpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGUgcHJvZHVjdCwgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWFpbnRhaW5pbmctb3Blbi1zb3VyY2UtbGljZW5zZS1jb21wbGlhbmNlLWR1cmluZy15b3VyLXByb2R1Y3RzLWxpZmVjeWNsZSc+TWFpbnRhaW5pbmcgT3BlbiBTb3VyY2UgTGljZW5zZSBDb21wbGlhbmNlIER1cmluZyBZb3VyIFByb2plY3QncyBMaWZlY3ljbGU8L3VsaW5rPiIgc2VjdGlvbgorICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9InVzaW5ncG9reS1jb25maWd1cmluZy1MSUNfRklMRVNfQ0hLU1VNIj4KKyAgICAgICAgPHRpdGxlPlRyYWNraW5nIExpY2Vuc2UgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgbGljZW5zZSBvZiBhbiB1cHN0cmVhbSBwcm9qZWN0IG1pZ2h0IGNoYW5nZSBpbiB0aGUgZnV0dXJlLgorICAgICAgICAgICAgSW4gb3JkZXIgdG8gcHJldmVudCB0aGVzZSBjaGFuZ2VzIGdvaW5nIHVubm90aWNlZCwgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUxJQ19GSUxFU19DSEtTVU0nPkxJQ19GSUxFU19DSEtTVU08L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgIHZhcmlhYmxlIHRyYWNrcyBjaGFuZ2VzIHRvIHRoZSBsaWNlbnNlIHRleHQuIFRoZSBjaGVja3N1bXMgYXJlIHZhbGlkYXRlZCBhdCB0aGUgZW5kIG9mIHRoZQorICAgICAgICAgICAgY29uZmlndXJlIHN0ZXAsIGFuZCBpZiB0aGUgY2hlY2tzdW1zIGRvIG5vdCBtYXRjaCwgdGhlIGJ1aWxkIHdpbGwgZmFpbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJ1c2luZ3Bva3ktc3BlY2lmeWluZy1MSUNfRklMRVNfQ0hLU1VNIj4KKyAgICAgICAgICAgIDx0aXRsZT5TcGVjaWZ5aW5nIHRoZSA8ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+IFZhcmlhYmxlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5MSUNfRklMRVNfQ0hLU1VNPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBjb250YWlucyBjaGVja3N1bXMgb2YgdGhlIGxpY2Vuc2UgdGV4dCBpbiB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIHNwZWNpZnkgPGZpbGVuYW1lPkxJQ19GSUxFU19DSEtTVU08L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PXh4eHggXAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWNmaWxlMS50eHQ7YmVnaW5saW5lPTU7ZW5kbGluZT0yOTttZDU9eXl5eSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpY2ZpbGUyLnR4dDtlbmRsaW5lPTUwO21kNT16enp6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAuLi4iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1TJz5TPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlIGFzCisgICAgICAgICAgICAgICAgdGhlIGRlZmF1bHQgZGlyZWN0b3J5IHdoZW4gc2VhcmNoaW5nIGZpbGVzIGxpc3RlZCBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MSUNfRklMRVNfQ0hLU1VNPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIGV4YW1wbGUgZW1wbG95cyB0aGUgZGVmYXVsdCBkaXJlY3RvcnkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIENvbnNpZGVyIHRoaXMgbmV4dCBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc3JjL2xzLmM7YmVnaW5saW5lPTU7ZW5kbGluZT0xNjtcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kNT1iYjE0ZWQzYzRjZGE1ODNhYmM4NTQwMTMwNGI1Y2Q0ZSIKKyAgICAgTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtXT1JLRElSfS9saWNlbnNlLmh0bWw7bWQ1PTVjOTQ3NjdjZWRiNWQ2OTg3YzkwMmFjODUwZGVkMmM2IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZpcnN0IGxpbmUgbG9jYXRlcyBhIGZpbGUgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtTfS9zcmMvbHMuYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSBzZWNvbmQgbGluZSByZWZlcnMgdG8gYSBmaWxlIGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz5XT1JLRElSPC9saW5rPjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTm90ZSB0aGF0IDxmaWxlbmFtZT5MSUNfRklMRVNfQ0hLU1VNPC9maWxlbmFtZT4gdmFyaWFibGUgaXMKKyAgICAgICAgICAgICAgICBtYW5kYXRvcnkgZm9yIGFsbCByZWNpcGVzLCB1bmxlc3MgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxJQ0VOU0U8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBzZXQgdG8gIkNMT1NFRCIuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0idXNpbmdwb2t5LUxJQ19GSUxFU19DSEtTVU0tZXhwbGFuYXRpb24tb2Ytc3ludGF4Ij4KKyAgICAgICAgICAgIDx0aXRsZT5FeHBsYW5hdGlvbiBvZiBTeW50YXg8L3RpdGxlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgbWVudGlvbmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+IHZhcmlhYmxlIGxpc3RzIGFsbCB0aGUKKyAgICAgICAgICAgICAgICBpbXBvcnRhbnQgZmlsZXMgdGhhdCBjb250YWluIHRoZSBsaWNlbnNlIHRleHQgZm9yIHRoZSBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBzcGVjaWZ5IGEgY2hlY2tzdW0gZm9yIGFuIGVudGlyZSBmaWxlLCBvciBhIHNwZWNpZmljIHNlY3Rpb24gb2YgYQorICAgICAgICAgICAgICAgIGZpbGUgKHNwZWNpZmllZCBieSBiZWdpbm5pbmcgYW5kIGVuZGluZyBsaW5lIG51bWJlcnMgd2l0aCB0aGUgImJlZ2lubGluZSIgYW5kICJlbmRsaW5lIgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMsIHJlc3BlY3RpdmVseSkuCisgICAgICAgICAgICAgICAgVGhlIGxhdHRlciBpcyB1c2VmdWwgZm9yIHNvdXJjZSBmaWxlcyB3aXRoIGEgbGljZW5zZSBub3RpY2UgaGVhZGVyLAorICAgICAgICAgICAgICAgIFJFQURNRSBkb2N1bWVudHMsIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHVzZSB0aGUgImJlZ2lubGluZSIgcGFyYW1ldGVyLCB0aGVuIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgdGV4dCBiZWdpbnMgb24gdGhlCisgICAgICAgICAgICAgICAgZmlyc3QgbGluZSBvZiB0aGUgZmlsZS4KKyAgICAgICAgICAgICAgICBTaW1pbGFybHksIGlmIHlvdSBkbyBub3QgdXNlIHRoZSAiZW5kbGluZSIgcGFyYW1ldGVyLCBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGxpY2Vuc2UgdGV4dAorICAgICAgICAgICAgICAgIGVuZHMgd2l0aCB0aGUgbGFzdCBsaW5lIG9mIHRoZSBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgIm1kNSIgcGFyYW1ldGVyIHN0b3JlcyB0aGUgbWQ1IGNoZWNrc3VtIG9mIHRoZSBsaWNlbnNlIHRleHQuCisgICAgICAgICAgICAgICAgSWYgdGhlIGxpY2Vuc2UgdGV4dCBjaGFuZ2VzIGluIGFueSB3YXkgYXMgY29tcGFyZWQgdG8gdGhpcyBwYXJhbWV0ZXIKKyAgICAgICAgICAgICAgICB0aGVuIGEgbWlzbWF0Y2ggb2NjdXJzLgorICAgICAgICAgICAgICAgIFRoaXMgbWlzbWF0Y2ggdHJpZ2dlcnMgYSBidWlsZCBmYWlsdXJlIGFuZCBub3RpZmllcyB0aGUgZGV2ZWxvcGVyLgorICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbiBhbGxvd3MgdGhlIGRldmVsb3BlciB0byByZXZpZXcgYW5kIGFkZHJlc3MgdGhlIGxpY2Vuc2UgdGV4dCBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIEFsc28gbm90ZSB0aGF0IGlmIGEgbWlzbWF0Y2ggb2NjdXJzIGR1cmluZyB0aGUgYnVpbGQsIHRoZSBjb3JyZWN0IG1kNQorICAgICAgICAgICAgICAgIGNoZWNrc3VtIGlzIHBsYWNlZCBpbiB0aGUgYnVpbGQgbG9nIGFuZCBjYW4gYmUgZWFzaWx5IGNvcGllZCB0byB0aGUgcmVjaXBlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGVyZSBpcyBubyBsaW1pdCB0byBob3cgbWFueSBmaWxlcyB5b3UgY2FuIHNwZWNpZnkgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxJQ19GSUxFU19DSEtTVU08L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBHZW5lcmFsbHksIGhvd2V2ZXIsIGV2ZXJ5IHByb2plY3QgcmVxdWlyZXMgYSBmZXcgc3BlY2lmaWNhdGlvbnMgZm9yIGxpY2Vuc2UgdHJhY2tpbmcuCisgICAgICAgICAgICAgICAgTWFueSBwcm9qZWN0cyBoYXZlIGEgIkNPUFlJTkciIGZpbGUgdGhhdCBzdG9yZXMgdGhlIGxpY2Vuc2UgaW5mb3JtYXRpb24gZm9yIGFsbCB0aGUgc291cmNlCisgICAgICAgICAgICAgICAgY29kZSBmaWxlcy4KKyAgICAgICAgICAgICAgICBUaGlzIHByYWN0aWNlIGFsbG93cyB5b3UgdG8ganVzdCB0cmFjayB0aGUgIkNPUFlJTkciIGZpbGUgYXMgbG9uZyBhcyBpdCBpcyBrZXB0IHVwIHRvIGRhdGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDx0aXA+CisgICAgICAgICAgICAgICAgSWYgeW91IHNwZWNpZnkgYW4gZW1wdHkgb3IgaW52YWxpZCAibWQ1IiBwYXJhbWV0ZXIsIEJpdEJha2UgcmV0dXJucyBhbiBtZDUgbWlzLW1hdGNoCisgICAgICAgICAgICAgICAgZXJyb3IgYW5kIGRpc3BsYXlzIHRoZSBjb3JyZWN0ICJtZDUiIHBhcmFtZXRlciB2YWx1ZSBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgIFRoZSBjb3JyZWN0IHBhcmFtZXRlciBpcyBhbHNvIGNhcHR1cmVkIGluIHRoZSBidWlsZCBsb2cuCisgICAgICAgICAgICA8L3RpcD4KKworICAgICAgICAgICAgPHRpcD4KKyAgICAgICAgICAgICAgICBJZiB0aGUgd2hvbGUgZmlsZSBjb250YWlucyBvbmx5IGxpY2Vuc2UgdGV4dCwgeW91IGRvIG5vdCBuZWVkIHRvIHVzZSB0aGUgImJlZ2lubGluZSIgYW5kCisgICAgICAgICAgICAgICAgImVuZGxpbmUiIHBhcmFtZXRlcnMuCisgICAgICAgICAgICA8L3RpcD4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJlbmFibGluZy1jb21tZXJjaWFsbHktbGljZW5zZWQtcmVjaXBlcyI+CisgICAgICAgIDx0aXRsZT5FbmFibGluZyBDb21tZXJjaWFsbHkgTGljZW5zZWQgUmVjaXBlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBkaXNhYmxlcworICAgICAgICAgICAgY29tcG9uZW50cyB0aGF0IGhhdmUgY29tbWVyY2lhbCBvciBvdGhlciBzcGVjaWFsIGxpY2Vuc2luZworICAgICAgICAgICAgcmVxdWlyZW1lbnRzLgorICAgICAgICAgICAgU3VjaCByZXF1aXJlbWVudHMgYXJlIGRlZmluZWQgb24gYQorICAgICAgICAgICAgcmVjaXBlLWJ5LXJlY2lwZSBiYXNpcyB0aHJvdWdoIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0VfRkxBR1MnPjxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBkZWZpbml0aW9uIGluIHRoZSBhZmZlY3RlZCByZWNpcGUuCisgICAgICAgICAgICBGb3IgaW5zdGFuY2UsIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPnBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLXVnbHk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgcmVjaXBlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBIZXJlIGlzIGEgc2xpZ2h0bHkgbW9yZSBjb21wbGljYXRlZCBleGFtcGxlIHRoYXQgY29udGFpbnMgYm90aCBhbgorICAgICAgICAgICAgZXhwbGljaXQgcmVjaXBlIG5hbWUgYW5kIHZlcnNpb24gKGFmdGVyIHZhcmlhYmxlIGV4cGFuc2lvbik6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJQ0VOU0VfRkxBR1MgPSAibGljZW5zZV8ke1BOfV8ke1BWfSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKwkgICAgICAgIEluIG9yZGVyIGZvciBhIGNvbXBvbmVudCByZXN0cmljdGVkIGJ5IGEgPGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1M8L2ZpbGVuYW1lPgorCSAgICAgICAgZGVmaW5pdGlvbiB0byBiZSBlbmFibGVkIGFuZCBpbmNsdWRlZCBpbiBhbiBpbWFnZSwgaXQKKwkgICAgICAgIG5lZWRzIHRvIGhhdmUgYSBtYXRjaGluZyBlbnRyeSBpbiB0aGUgZ2xvYmFsCisJICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTElDRU5TRV9GTEFHU19XSElURUxJU1QnPjxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTX1dISVRFTElTVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUsIHdoaWNoIGlzIGEgdmFyaWFibGUKKwkgICAgICAgIHR5cGljYWxseSBkZWZpbmVkIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIGVuYWJsZQorCSAgICAgICAgdGhlIDxmaWxlbmFtZT5wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGx1Z2lucy11Z2x5PC9maWxlbmFtZT4KKwkgICAgICAgIHBhY2thZ2UsIHlvdSBjb3VsZCBhZGQgZWl0aGVyIHRoZSBzdHJpbmcKKwkgICAgICAgICJjb21tZXJjaWFsX2dzdC1wbHVnaW5zLXVnbHkiIG9yIHRoZSBtb3JlIGdlbmVyYWwgc3RyaW5nCisJICAgICAgICAiY29tbWVyY2lhbCIgdG8gPGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUPC9maWxlbmFtZT4uCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbGljZW5zZS1mbGFnLW1hdGNoaW5nJz5MaWNlbnNlIEZsYWcgTWF0Y2hpbmc8L2xpbms+IiBzZWN0aW9uCisgICAgICAgICAgICBmb3IgYSBmdWxsIGV4cGxhbmF0aW9uIG9mIGhvdyA8ZmlsZW5hbWU+TElDRU5TRV9GTEFHUzwvZmlsZW5hbWU+IG1hdGNoaW5nIHdvcmtzLgorICAgICAgICAgICAgSGVyZSBpcyB0aGUgZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTElDRU5TRV9GTEFHU19XSElURUxJU1QgPSAiY29tbWVyY2lhbF9nc3QtcGx1Z2lucy11Z2x5IgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorCSAgICAgICAgTGlrZXdpc2UsIHRvIGFkZGl0aW9uYWxseSBlbmFibGUgdGhlIHBhY2thZ2UgYnVpbHQgZnJvbSB0aGUgcmVjaXBlIGNvbnRhaW5pbmcKKwkgICAgICAgIDxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTID0gImxpY2Vuc2VfJHtQTn1fJHtQVn0iPC9maWxlbmFtZT4sIGFuZCBhc3N1bWluZworCSAgICAgICAgdGhhdCB0aGUgYWN0dWFsIHJlY2lwZSBuYW1lIHdhcyA8ZmlsZW5hbWU+ZW1nZF8xLjEwLmJiPC9maWxlbmFtZT4sCisJICAgICAgICB0aGUgZm9sbG93aW5nIHN0cmluZyB3b3VsZCBlbmFibGUgdGhhdCBwYWNrYWdlIGFzIHdlbGwgYXMKKwkgICAgICAgIHRoZSBvcmlnaW5hbCA8ZmlsZW5hbWU+Z3N0LXBsdWdpbnMtdWdseTwvZmlsZW5hbWU+IHBhY2thZ2U6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUID0gImNvbW1lcmNpYWxfZ3N0LXBsdWdpbnMtdWdseSBsaWNlbnNlX2VtZ2RfMS4xMCIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKwkgICAgICAgIEFzIGEgY29udmVuaWVuY2UsIHlvdSBkbyBub3QgbmVlZCB0byBzcGVjaWZ5IHRoZSBjb21wbGV0ZSBsaWNlbnNlIHN0cmluZworCSAgICAgICAgaW4gdGhlIHdoaXRlbGlzdCBmb3IgZXZlcnkgcGFja2FnZS4KKyAgICAgICAgICAgIFlvdSBjYW4gdXNlIGFuIGFiYnJldmlhdGVkIGZvcm0sIHdoaWNoIGNvbnNpc3RzCisJICAgICAgICBvZiBqdXN0IHRoZSBmaXJzdCBwb3J0aW9uIG9yIHBvcnRpb25zIG9mIHRoZSBsaWNlbnNlIHN0cmluZyBiZWZvcmUKKwkgICAgICAgIHRoZSBpbml0aWFsIHVuZGVyc2NvcmUgY2hhcmFjdGVyIG9yIGNoYXJhY3RlcnMuCisgICAgICAgICAgICBBIHBhcnRpYWwgc3RyaW5nIHdpbGwgbWF0Y2gKKwkgICAgICAgIGFueSBsaWNlbnNlIHRoYXQgY29udGFpbnMgdGhlIGdpdmVuIHN0cmluZyBhcyB0aGUgZmlyc3QKKwkgICAgICAgIHBvcnRpb24gb2YgaXRzIGxpY2Vuc2UuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZworCSAgICAgICAgd2hpdGVsaXN0IHN0cmluZyB3aWxsIGFsc28gbWF0Y2ggYm90aCBvZiB0aGUgcGFja2FnZXMKKwkgICAgICAgIHByZXZpb3VzbHkgbWVudGlvbmVkIGFzIHdlbGwgYXMgYW55IG90aGVyIHBhY2thZ2VzIHRoYXQgaGF2ZQorCSAgICAgICAgbGljZW5zZXMgc3RhcnRpbmcgd2l0aCAiY29tbWVyY2lhbCIgb3IgImxpY2Vuc2UiLgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBMSUNFTlNFX0ZMQUdTX1dISVRFTElTVCA9ICJjb21tZXJjaWFsIGxpY2Vuc2UiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ibGljZW5zZS1mbGFnLW1hdGNoaW5nIj4KKyAgICAgICAgICAgIDx0aXRsZT5MaWNlbnNlIEZsYWcgTWF0Y2hpbmc8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKwkJICAgICAgICBMaWNlbnNlIGZsYWcgbWF0Y2hpbmcgYWxsb3dzIHlvdSB0byBjb250cm9sIHdoYXQgcmVjaXBlcyB0aGUKKyAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGluY2x1ZGVzIGluIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICBGdW5kYW1lbnRhbGx5LCB0aGUgYnVpbGQgc3lzdGVtIGF0dGVtcHRzIHRvIG1hdGNoCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0VfRkxBR1MnPjxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgc3RyaW5ncyBmb3VuZCBpbiByZWNpcGVzIGFnYWluc3QKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTElDRU5TRV9GTEFHU19XSElURUxJU1QnPjxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTX1dISVRFTElTVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHN0cmluZ3MgZm91bmQgaW4gdGhlIHdoaXRlbGlzdC4KKyAgICAgICAgICAgICAgICBBIG1hdGNoIGNhdXNlcyB0aGUgYnVpbGQgc3lzdGVtIHRvIGluY2x1ZGUgYSByZWNpcGUgaW4gdGhlCisgICAgICAgICAgICAgICAgYnVpbGQsIHdoaWxlIGZhaWx1cmUgdG8gZmluZCBhIG1hdGNoIGNhdXNlcyB0aGUgYnVpbGQgc3lzdGVtIHRvCisgICAgICAgICAgICAgICAgZXhjbHVkZSBhIHJlY2lwZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gZ2VuZXJhbCwgbGljZW5zZSBmbGFnIG1hdGNoaW5nIGlzIHNpbXBsZS4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB1bmRlcnN0YW5kaW5nIHNvbWUgY29uY2VwdHMgd2lsbCBoZWxwIHlvdQorICAgICAgICAgICAgICAgIGNvcnJlY3RseSBhbmQgZWZmZWN0aXZlbHkgdXNlIG1hdGNoaW5nLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWZvcmUgYSBmbGFnCisgICAgICAgICAgICAgICAgZGVmaW5lZCBieSBhIHBhcnRpY3VsYXIgcmVjaXBlIGlzIHRlc3RlZCBhZ2FpbnN0IHRoZQorICAgICAgICAgICAgICAgIGNvbnRlbnRzIG9mIHRoZSB3aGl0ZWxpc3QsIHRoZSBleHBhbmRlZCBzdHJpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+XyR7UE59PC9maWxlbmFtZT4gaXMgYXBwZW5kZWQgdG8gdGhlIGZsYWcuCisgICAgICAgICAgICAgICAgVGhpcyBleHBhbnNpb24gbWFrZXMgZWFjaCA8ZmlsZW5hbWU+TElDRU5TRV9GTEFHUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmFsdWUgcmVjaXBlLXNwZWNpZmljLgorICAgICAgICAgICAgICAgIEFmdGVyIGV4cGFuc2lvbiwgdGhlIHN0cmluZyBpcyB0aGVuIG1hdGNoZWQgYWdhaW5zdCB0aGUKKyAgICAgICAgICAgICAgICB3aGl0ZWxpc3QuCisgICAgICAgICAgICAgICAgVGh1cywgc3BlY2lmeWluZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBpbiByZWNpcGUgImZvbyIsIGZvciBleGFtcGxlLCByZXN1bHRzIGluIHRoZSBzdHJpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ImNvbW1lcmNpYWxfZm9vIjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEFuZCwgdG8gY3JlYXRlIGEgbWF0Y2gsIHRoYXQgc3RyaW5nIG11c3QgYXBwZWFyIGluIHRoZQorICAgICAgICAgICAgICAgIHdoaXRlbGlzdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSnVkaWNpb3VzIHVzZSBvZiB0aGUgPGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHN0cmluZ3MgYW5kIHRoZSBjb250ZW50cyBvZiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TElDRU5TRV9GTEFHU19XSElURUxJU1Q8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGFsbG93cyB5b3UgYSBsb3Qgb2YgZmxleGliaWxpdHkgZm9yIGluY2x1ZGluZyBvciBleGNsdWRpbmcKKyAgICAgICAgICAgICAgICByZWNpcGVzIGJhc2VkIG9uIGxpY2Vuc2luZy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNhbiBicm9hZGVuIHRoZSBtYXRjaGluZyBjYXBhYmlsaXRpZXMgYnkKKyAgICAgICAgICAgICAgICB1c2luZyBsaWNlbnNlIGZsYWdzIHN0cmluZyBzdWJzZXRzIGluIHRoZSB3aGl0ZWxpc3QuCisgICAgICAgICAgICAgICAgPG5vdGU+V2hlbiB1c2luZyBhIHN0cmluZyBzdWJzZXQsIGJlIHN1cmUgdG8gdXNlIHRoZSBwYXJ0IG9mCisgICAgICAgICAgICAgICAgICAgIHRoZSBleHBhbmRlZCBzdHJpbmcgdGhhdCBwcmVjZWRlcyB0aGUgYXBwZW5kZWQgdW5kZXJzY29yZQorICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgKGUuZy4gPGZpbGVuYW1lPnVzZXRoaXNwYXJ0XzEuMzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dXNldGhpc3BhcnRfMS40PC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzaW1wbHkgc3BlY2lmeWluZyB0aGUgc3RyaW5nICJjb21tZXJjaWFsIiBpbgorICAgICAgICAgICAgICAgIHRoZSB3aGl0ZWxpc3QgbWF0Y2hlcyBhbnkgZXhwYW5kZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TElDRU5TRV9GTEFHUzwvZmlsZW5hbWU+IGRlZmluaXRpb24gdGhhdCBzdGFydHMgd2l0aAorICAgICAgICAgICAgICAgIHRoZSBzdHJpbmcgImNvbW1lcmNpYWwiIHN1Y2ggYXMgImNvbW1lcmNpYWxfZm9vIiBhbmQKKyAgICAgICAgICAgICAgICAiY29tbWVyY2lhbF9iYXIiLCB3aGljaCBhcmUgdGhlIHN0cmluZ3MgdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzIGZvciBoeXBvdGhldGljYWwgcmVjaXBlcyBuYW1lZAorICAgICAgICAgICAgICAgICJmb28iIGFuZCAiYmFyIiBhc3N1bWluZyB0aG9zZSByZWNpcGVzIHNpbXBseSBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgICAgIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGh1cywgeW91IGNhbiBjaG9vc2UgdG8gZXhoYXVzdGl2ZWx5CisgICAgICAgICAgICAgICAgZW51bWVyYXRlIGVhY2ggbGljZW5zZSBmbGFnIGluIHRoZSB3aGl0ZWxpc3QgYW5kCisgICAgICAgICAgICAgICAgYWxsb3cgb25seSBzcGVjaWZpYyByZWNpcGVzIGludG8gdGhlIGltYWdlLCBvcgorICAgICAgICAgICAgICAgIHlvdSBjYW4gdXNlIGEgc3RyaW5nIHN1YnNldCB0aGF0IGNhdXNlcyBhIGJyb2FkZXIgcmFuZ2Ugb2YKKyAgICAgICAgICAgICAgICBtYXRjaGVzIHRvIGFsbG93IGEgcmFuZ2Ugb2YgcmVjaXBlcyBpbnRvIHRoZSBpbWFnZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzY2hlbWUgd29ya3MgZXZlbiBpZiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TElDRU5TRV9GTEFHUzwvZmlsZW5hbWU+IHN0cmluZyBhbHJlYWR5CisgICAgICAgICAgICAgICAgaGFzIDxmaWxlbmFtZT5fJHtQTn08L2ZpbGVuYW1lPiBhcHBlbmRlZC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGJ1aWxkIHN5c3RlbSB0dXJucyB0aGUgbGljZW5zZSBmbGFnCisgICAgICAgICAgICAgICAgImNvbW1lcmNpYWxfMS4yX2ZvbyIgaW50byAiY29tbWVyY2lhbF8xLjJfZm9vX2ZvbyIgYW5kIHdvdWxkCisgICAgICAgICAgICAgICAgbWF0Y2ggYm90aCB0aGUgZ2VuZXJhbCAiY29tbWVyY2lhbCIgYW5kIHRoZSBzcGVjaWZpYworICAgICAgICAgICAgICAgICJjb21tZXJjaWFsXzEuMl9mb28iIHN0cmluZ3MgZm91bmQgaW4gdGhlIHdoaXRlbGlzdCwgYXMKKyAgICAgICAgICAgICAgICBleHBlY3RlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBvdGhlciBzY2VuYXJpb3M6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBjYW4gc3BlY2lmeSBhIHZlcnNpb25lZCBzdHJpbmcgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUgc3VjaCBhcyAiY29tbWVyY2lhbF9mb29fMS4yIiBpbiBhICJmb28iIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gZXhwYW5kcyB0aGlzIHN0cmluZyB0bworICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1lcmNpYWxfZm9vXzEuMl9mb28iLgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tYmluZSB0aGlzIGxpY2Vuc2UgZmxhZyB3aXRoIGEgd2hpdGVsaXN0IHRoYXQgaGFzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc3RyaW5nICJjb21tZXJjaWFsIiBhbmQgeW91IG1hdGNoIHRoZSBmbGFnIGFsb25nCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGFueSBvdGhlciBmbGFnIHRoYXQgc3RhcnRzIHdpdGggdGhlIHN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1lcmNpYWwiLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VW5kZXIgdGhlIHNhbWUgY2lyY3Vtc3RhbmNlcywgeW91IGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgdXNlICJjb21tZXJjaWFsX2ZvbyIgaW4gdGhlIHdoaXRlbGlzdCBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gbm90IG9ubHkgbWF0Y2hlcyAiY29tbWVyY2lhbF9mb29fMS4yIiBidXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsc28gbWF0Y2hlcyBhbnkgbGljZW5zZSBmbGFnIHdpdGggdGhlIHN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1lcmNpYWxfZm9vIiwgcmVnYXJkbGVzcyBvZiB0aGUgdmVyc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+WW91IGNhbiBiZSB2ZXJ5IHNwZWNpZmljIGFuZCB1c2UgYm90aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgYW5kIHZlcnNpb24gcGFydHMgaW4gdGhlIHdoaXRlbGlzdCAoZS5nLgorICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1lcmNpYWxfZm9vXzEuMiIpIHRvIHNwZWNpZmljYWxseSBtYXRjaCBhCisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uZWQgcmVjaXBlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9Im90aGVyLXZhcmlhYmxlcy1yZWxhdGVkLXRvLWNvbW1lcmNpYWwtbGljZW5zZXMiPgorICAgICAgICAgICAgPHRpdGxlPk90aGVyIFZhcmlhYmxlcyBSZWxhdGVkIHRvIENvbW1lcmNpYWwgTGljZW5zZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPdGhlciBoZWxwZnVsIHZhcmlhYmxlcyByZWxhdGVkIHRvIGNvbW1lcmNpYWwKKyAgICAgICAgICAgICAgICBsaWNlbnNlIGhhbmRsaW5nIGV4aXN0IGFuZCBhcmUgZGVmaW5lZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC1kaXN0cm92YXJzLmluYzwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDT01NRVJDSUFMX0FVRElPX1BMVUdJTlMgPz0gIiIKKyAgICAgQ09NTUVSQ0lBTF9WSURFT19QTFVHSU5TID89ICIiCisgICAgIENPTU1FUkNJQUxfUVQgPSAiIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBlbmFibGUgdGhlc2UgY29tcG9uZW50cywgeW91IGNhbiBkbyBzbyBieSBtYWtpbmcgc3VyZSB5b3UgaGF2ZQorICAgICAgICAgICAgICAgIHN0YXRlbWVudHMgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENPTU1FUkNJQUxfQVVESU9fUExVR0lOUyA9ICJnc3QtcGx1Z2lucy11Z2x5LW1hZCBcCisgICAgICAgIGdzdC1wbHVnaW5zLXVnbHktbXBlZ2F1ZGlvcGFyc2UiCisgICAgIENPTU1FUkNJQUxfVklERU9fUExVR0lOUyA9ICJnc3QtcGx1Z2lucy11Z2x5LW1wZWcyZGVjIFwKKyAgICAgICAgZ3N0LXBsdWdpbnMtdWdseS1tcGVnc3RyZWFtIGdzdC1wbHVnaW5zLWJhZC1tcGVndmlkZW9wYXJzZSIKKyAgICAgQ09NTUVSQ0lBTF9RVCA/PSAicW1tcCIKKyAgICAgTElDRU5TRV9GTEFHU19XSElURUxJU1QgPSAiY29tbWVyY2lhbF9nc3QtcGx1Z2lucy11Z2x5IGNvbW1lcmNpYWxfZ3N0LXBsdWdpbnMtYmFkIGNvbW1lcmNpYWxfcW1tcCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgT2YgY291cnNlLCB5b3UgY291bGQgYWxzbyBjcmVhdGUgYSBtYXRjaGluZyB3aGl0ZWxpc3QKKyAgICAgICAgICAgICAgICBmb3IgdGhvc2UgY29tcG9uZW50cyB1c2luZyB0aGUgbW9yZSBnZW5lcmFsICJjb21tZXJjaWFsIgorICAgICAgICAgICAgICAgIGluIHRoZSB3aGl0ZWxpc3QsIGJ1dCB0aGF0IHdvdWxkIGFsc28gZW5hYmxlIGFsbCB0aGUKKyAgICAgICAgICAgICAgICBvdGhlciBwYWNrYWdlcyB3aXRoCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0VfRkxBR1MnPjxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgY29udGFpbmluZyAiY29tbWVyY2lhbCIsIHdoaWNoIHlvdSBtYXkgb3IgbWF5IG5vdCB3YW50OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTElDRU5TRV9GTEFHU19XSElURUxJU1QgPSAiY29tbWVyY2lhbCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNwZWNpZnlpbmcgYXVkaW8gYW5kIHZpZGVvIHBsdWctaW5zIGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNPTU1FUkNJQUxfQVVESU9fUExVR0lOUzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DT01NRVJDSUFMX1ZJREVPX1BMVUdJTlM8L2ZpbGVuYW1lPiBzdGF0ZW1lbnRzCisgICAgICAgICAgICAgICAgb3IgY29tbWVyY2lhbCBRdCBjb21wb25lbnRzIGFzIHBhcnQgb2YKKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPkNPTU1FUkNJQUxfUVQ8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgKGFsb25nCisgICAgICAgICAgICAgICAgd2l0aCB0aGUgZW5hYmxpbmcgPGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUPC9maWxlbmFtZT4pIGluY2x1ZGVzIHRoZQorICAgICAgICAgICAgICAgIHBsdWctaW5zIG9yIGNvbXBvbmVudHMgaW50byBidWlsdCBpbWFnZXMsIHRodXMgYWRkaW5nCisgICAgICAgICAgICAgICAgc3VwcG9ydCBmb3IgbWVkaWEgZm9ybWF0cyBvciBjb21wb25lbnRzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC91c2luZ3Bva3kueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvdXNpbmdwb2t5LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTg3OTYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvdXNpbmdwb2t5LnhtbApAQCAtMCwwICsxLDEwODggQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSd1c2luZ3Bva3knPgorPHRpdGxlPlVzaW5nIHRoZSBZb2N0byBQcm9qZWN0PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIGNvbW1vbiB1c2FnZSBmb3IgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgIFRoZSBpbmZvcm1hdGlvbiBpcyBpbnRyb2R1Y3RvcnkgaW4gbmF0dXJlIGFzIG90aGVyIG1hbnVhbHMgaW4gdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgZG9jdW1lbnRhdGlvbiBzZXQgcHJvdmlkZSBtb3JlIGRldGFpbHMgb24gaG93IHRvIHVzZSB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICA8L3BhcmE+CisKKzxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktYnVpbGQnPgorICAgIDx0aXRsZT5SdW5uaW5nIGEgQnVpbGQ8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBhIHN1bW1hcnkgb2YgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHByb3ZpZGVzIGluZm9ybWF0aW9uCisgICAgICAgIGZvciBsZXNzIG9idmlvdXMgYXNwZWN0cyBvZiB0aGUgYnVpbGQgcHJvY2Vzcy4KKyAgICAgICAgRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gb24gaG93IHRvIGJ1aWxkIGFuIGltYWdlIHVzaW5nIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgc3lzdGVtLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3FzLWJ1aWxkaW5nLWltYWdlcyc+QnVpbGRpbmcgSW1hZ2VzPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J2J1aWxkLW92ZXJ2aWV3Jz4KKyAgICAgICAgPHRpdGxlPkJ1aWxkIE92ZXJ2aWV3PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIHRoZSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCB5b3Ugd2lsbCBuZWVkIHRvIGJ1aWxkIGFuIGltYWdlIHdoZW5ldmVyIHlvdSBjaGFuZ2UgaGFyZHdhcmUKKyAgICAgICAgICAgIHN1cHBvcnQsIGFkZCBvciBjaGFuZ2Ugc3lzdGVtIGxpYnJhcmllcywgb3IgYWRkIG9yIGNoYW5nZSBzZXJ2aWNlcyB0aGF0IGhhdmUgZGVwZW5kZW5jaWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9idWlsZGluZy1hbi1pbWFnZS5wbmciIGZvcm1hdD0iUE5HIiBhbGlnbj0nY2VudGVyJyBzY2FsZWZpdD0nMScvPgorICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgICAgICAgIDxjYXB0aW9uPgorICAgICAgICAgICAgICAgIDxwYXJhPkJ1aWxkaW5nIGFuIEltYWdlPC9wYXJhPgorICAgICAgICAgICAgPC9jYXB0aW9uPgorICAgICAgICA8L21lZGlhb2JqZWN0PgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZpcnN0IHRoaW5nIHlvdSBuZWVkIHRvIGRvIGlzIHNldCB1cCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICBlbnZpcm9ubWVudCBieSBzb3VyY2luZyBhbiBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQKKyAgICAgICAgICAgIChpLmUuCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgb3IKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNvdXJjZSAmT0VfSU5JVF9GSUxFOyBbPHJlcGxhY2VhYmxlPmJ1aWxkX2RpcjwvcmVwbGFjZWFibGU+XQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPHJlcGxhY2VhYmxlPmJ1aWxkX2RpcjwvcmVwbGFjZWFibGU+IGFyZ3VtZW50IGlzIG9wdGlvbmFsIGFuZCBzcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSB0aGUKKyAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyBmb3IgdGhlIGJ1aWxkIC0KKyAgICAgICAgICAgIHRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEgQnVpbGQgRGlyZWN0b3J5LCBpdCBkZWZhdWx0cyB0byBhIGRpcmVjdG9yeQorICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPmJ1aWxkPC9maWxlbmFtZT4gaW4geW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorICAgICAgICAgICAgQSBjb21tb24gcHJhY3RpY2UgaXMgdG8gdXNlIGEgZGlmZmVyZW50IEJ1aWxkIERpcmVjdG9yeSBmb3IgZGlmZmVyZW50IHRhcmdldHMuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgPGZpbGVuYW1lPn4vYnVpbGQveDg2PC9maWxlbmFtZT4gZm9yIGEgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgdGFyZ2V0LCBhbmQgPGZpbGVuYW1lPn4vYnVpbGQvYXJtPC9maWxlbmFtZT4gZm9yIGEgPGZpbGVuYW1lPnFlbXVhcm08L2ZpbGVuYW1lPiB0YXJnZXQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE9uY2UgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIHNldCB1cCwgeW91IGNhbiBidWlsZCBhIHRhcmdldCB1c2luZzoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IGlzIHRoZSBuYW1lIG9mIHRoZSByZWNpcGUgeW91IHdhbnQgdG8gYnVpbGQuCisgICAgICAgICAgICBDb21tb24gdGFyZ2V0cyBhcmUgdGhlIGltYWdlcyBpbiA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLXNhdG8vaW1hZ2VzPC9maWxlbmFtZT4sIGV0Yy4gYWxsIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgT3IsIHRoZSB0YXJnZXQgY2FuIGJlIHRoZSBuYW1lIG9mIGEgcmVjaXBlIGZvciBhIHNwZWNpZmljIHBpZWNlIG9mIHNvZnR3YXJlIHN1Y2ggYXMKKyAgICAgICAgICAgIEJ1c3lCb3guCisgICAgICAgICAgICBGb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBpbWFnZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc3VwcG9ydHMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSJyZWYtaW1hZ2VzIj5JbWFnZXM8L2xpbms+IiBjaGFwdGVyLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBCdWlsZGluZyBhbiBpbWFnZSB3aXRob3V0IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAgICAgICAgICAgIDMgKEdQTHYzKSwgb3Igc2ltaWxhcmx5IGxpY2Vuc2VkLCBjb21wb25lbnRzIGlzIHN1cHBvcnRlZCBmb3IKKyAgICAgICAgICAgIG9ubHkgbWluaW1hbCBhbmQgYmFzZSBpbWFnZXMuCisgICAgICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSdyZWYtaW1hZ2VzJz5JbWFnZXM8L2xpbms+IiBjaGFwdGVyIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICA8L25vdGU+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2J1aWxkaW5nLWFuLWltYWdlLXVzaW5nLWdwbC1jb21wb25lbnRzJz4KKyAgICAgICAgPHRpdGxlPkJ1aWxkaW5nIGFuIEltYWdlIFVzaW5nIEdQTCBDb21wb25lbnRzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gYnVpbGRpbmcgYW4gaW1hZ2UgdXNpbmcgR1BMIGNvbXBvbmVudHMsIHlvdSBuZWVkIHRvIG1haW50YWluIHlvdXIgb3JpZ2luYWwKKyAgICAgICAgICAgIHNldHRpbmdzIGFuZCBub3Qgc3dpdGNoIGJhY2sgYW5kIGZvcnRoIGFwcGx5aW5nIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgR05VCisgICAgICAgICAgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICAgICAgICAgICAgSWYgeW91IHJlYnVpbGQgdXNpbmcgZGlmZmVyZW50IHZlcnNpb25zIG9mIEdQTCwgZGVwZW5kZW5jeSBlcnJvcnMgbWlnaHQgb2NjdXIKKyAgICAgICAgICAgIGR1ZSB0byBzb21lIGNvbXBvbmVudHMgbm90IGJlaW5nIHJlYnVpbHQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktaW5zdGFsbCc+CisgICAgPHRpdGxlPkluc3RhbGxpbmcgYW5kIFVzaW5nIHRoZSBSZXN1bHQ8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIE9uY2UgYW4gaW1hZ2UgaGFzIGJlZW4gYnVpbHQsIGl0IG9mdGVuIG5lZWRzIHRvIGJlIGluc3RhbGxlZC4KKyAgICAgICAgVGhlIGltYWdlcyBhbmQga2VybmVscyBidWlsdCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhcmUgcGxhY2VkIGluIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+IGluCisgICAgICAgIDxmaWxlbmFtZSBjbGFzcz0iZGlyZWN0b3J5Ij50bXAvZGVwbG95L2ltYWdlczwvZmlsZW5hbWU+LgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHJ1biBwcmUtYnVpbHQgaW1hZ2VzIHN1Y2ggYXMgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPgorICAgICAgICBhbmQgPGZpbGVuYW1lPnFlbXVhcm08L2ZpbGVuYW1lPiwgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyN1c2luZy1wcmUtYnVpbHQnPkV4YW1wbGUgVXNpbmcgUHJlLUJ1aWx0IEJpbmFyaWVzIGFuZCBRRU1VPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gaW5zdGFsbCB0aGVzZSBpbWFnZXMsIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgeW91cgorICAgICAgICBwYXJ0aWN1bGFyIGJvYXJkIG9yIG1hY2hpbmUuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWRlYnVnZ2luZyc+CisgICAgPHRpdGxlPkRlYnVnZ2luZyBCdWlsZCBGYWlsdXJlczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGV4YWN0IG1ldGhvZCBmb3IgZGVidWdnaW5nIGJ1aWxkIGZhaWx1cmVzIGRlcGVuZHMgb24gdGhlIG5hdHVyZSBvZgorICAgICAgICB0aGUgcHJvYmxlbSBhbmQgb24gdGhlIHN5c3RlbSdzIGFyZWEgZnJvbSB3aGljaCB0aGUgYnVnIG9yaWdpbmF0ZXMuCisgICAgICAgIFN0YW5kYXJkIGRlYnVnZ2luZyBwcmFjdGljZXMgc3VjaCBhcyBjb21wYXJpc29uIGFnYWluc3QgdGhlIGxhc3QKKyAgICAgICAga25vd24gd29ya2luZyB2ZXJzaW9uIHdpdGggZXhhbWluYXRpb24gb2YgdGhlIGNoYW5nZXMgYW5kIHRoZQorICAgICAgICByZS1hcHBsaWNhdGlvbiBvZiBzdGVwcyB0byBpZGVudGlmeSB0aGUgb25lIGNhdXNpbmcgdGhlIHByb2JsZW0gYXJlCisgICAgICAgIHZhbGlkIGZvciB0aGUgWW9jdG8gUHJvamVjdCBqdXN0IGFzIHRoZXkgYXJlIGZvciBhbnkgb3RoZXIgc3lzdGVtLgorICAgICAgICBFdmVuIHRob3VnaCBpdCBpcyBpbXBvc3NpYmxlIHRvIGRldGFpbCBldmVyeSBwb3NzaWJsZSBwb3RlbnRpYWwgZmFpbHVyZSwKKyAgICAgICAgdGhpcyBzZWN0aW9uIHByb3ZpZGVzIHNvbWUgZ2VuZXJhbCB0aXBzIHRvIGFpZCBpbiBkZWJ1Z2dpbmcuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEEgdXNlZnVsIGZlYXR1cmUgZm9yIGRlYnVnZ2luZyBpcyB0aGUgZXJyb3IgcmVwb3J0aW5nIHRvb2wuCisgICAgICAgIENvbmZpZ3VyaW5nIHRoZSBZb2N0byBQcm9qZWN0IHRvIHVzZSB0aGlzIHRvb2wgY2F1c2VzIHRoZQorICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHByb2R1Y2UgZXJyb3IgcmVwb3J0aW5nIGNvbW1hbmRzIGFzCisgICAgICAgIHBhcnQgb2YgdGhlIGNvbnNvbGUgb3V0cHV0LgorICAgICAgICBZb3UgY2FuIGVudGVyIHRoZSBjb21tYW5kcyBhZnRlciB0aGUgYnVpbGQgY29tcGxldGVzCisgICAgICAgIHRvIGxvZyBlcnJvciBpbmZvcm1hdGlvbgorICAgICAgICBpbnRvIGEgY29tbW9uIGRhdGFiYXNlLCB0aGF0IGNhbiBoZWxwIHlvdSBmaWd1cmUgb3V0IHdoYXQgbWlnaHQgYmUKKyAgICAgICAgZ29pbmcgd3JvbmcuCisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZW5hYmxlIGFuZCB1c2UgdGhpcyBmZWF0dXJlLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1c2luZy10aGUtZXJyb3ItcmVwb3J0aW5nLXRvb2wnPlVzaW5nIHRoZSBFcnJvciBSZXBvcnRpbmcgVG9vbDwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIGRpc2N1c3Npb25zIG9uIGRlYnVnZ2luZywgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGxhdGRldi1nZGItcmVtb3RlZGVidWcnPkRlYnVnZ2luZyBXaXRoIHRoZSBHTlUgUHJvamVjdCBEZWJ1Z2dlciAoR0RCKSBSZW1vdGVseTwvdWxpbms+IgorICAgICAgICBhbmQKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2FkdC1lY2xpcHNlJz5Xb3JraW5nIHdpdGhpbiBFY2xpcHNlPC91bGluaz4iCisgICAgICAgIHNlY3Rpb25zIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+CisKKyAgICA8bm90ZT4KKyAgICAgICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIHNlY3Rpb24gcHJlc2VudHMgbWFueSBleGFtcGxlcyBvZiB0aGUKKyAgICAgICAgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICBZb3UgY2FuIGxlYXJuIGFib3V0IEJpdEJha2UgYnkgcmVhZGluZyB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyNiaXRiYWtlLXVzZXItbWFudWFsJz5CaXRCYWtlIFVzZXIgTWFudWFsPC91bGluaz4uCisgICAgPC9ub3RlPgorCisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWRlYnVnZ2luZy10YXNrZmFpbHVyZXMnPgorICAgICAgICA8dGl0bGU+VGFzayBGYWlsdXJlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+VGhlIGxvZyBmaWxlIGZvciBzaGVsbCB0YXNrcyBpcyBhdmFpbGFibGUgaW4KKyAgICAgICAgICAgIDxmaWxlbmFtZT4ke1dPUktESVJ9L3RlbXAvbG9nLmRvXzxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+LnBpZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+IHRhc2sgZm9yIHRoZSBRRU1VIG1pbmltYWwgaW1hZ2UgZm9yIHRoZSB4ODYKKyAgICAgICAgICAgIG1hY2hpbmUgKDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4pIG1pZ2h0IGJlCisgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL3dvcmsvcWVtdXg4Ni1wb2t5LWxpbnV4L2NvcmUtaW1hZ2UtbWluaW1hbC8xLjAtcjAvdGVtcC9sb2cuZG9fY29tcGlsZS4yMDgzMDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVG8gc2VlIHdoYXQKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+CisgICAgICAgICAgICBydW5zIHRvIGdlbmVyYXRlIHRoYXQgbG9nLCBsb29rIGF0IHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICA8ZmlsZW5hbWU+cnVuLmRvXzxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+LnBpZDwvZmlsZW5hbWU+IGZpbGUgbG9jYXRlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFByZXNlbnRseSwgdGhlIG91dHB1dCBmcm9tIFB5dGhvbiB0YXNrcyBpcyBzZW50IGRpcmVjdGx5IHRvIHRoZSBjb25zb2xlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1kZWJ1Z2dpbmctdGFza3J1bm5pbmcnPgorICAgICAgICA8dGl0bGU+UnVubmluZyBTcGVjaWZpYyBUYXNrczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBbnkgZ2l2ZW4gcGFja2FnZSBjb25zaXN0cyBvZiBhIHNldCBvZiB0YXNrcy4KKyAgICAgICAgICAgIFRoZSBzdGFuZGFyZCBCaXRCYWtlIGJlaGF2aW9yIGluIG1vc3QgY2FzZXMgaXM6CisgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kb191bnBhY2s8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wYXRjaDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlXyo8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fYnVpbGQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFRoZSBkZWZhdWx0IHRhc2sgaXMgPGZpbGVuYW1lPmRvX2J1aWxkPC9maWxlbmFtZT4gYW5kIGFueSB0YXNrcworICAgICAgICAgICAgb24gd2hpY2ggaXQgZGVwZW5kcyBidWlsZCBmaXJzdC4KKyAgICAgICAgICAgIFNvbWUgdGFza3MsIHN1Y2ggYXMgPGZpbGVuYW1lPmRvX2RldnNoZWxsPC9maWxlbmFtZT4sIGFyZSBub3QgcGFydAorICAgICAgICAgICAgb2YgdGhlIGRlZmF1bHQgYnVpbGQgY2hhaW4uCisgICAgICAgICAgICBJZiB5b3Ugd2lzaCB0byBydW4gYSB0YXNrIHRoYXQgaXMgbm90IHBhcnQgb2YgdGhlIGRlZmF1bHQgYnVpbGQKKyAgICAgICAgICAgIGNoYWluLCB5b3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPi1jPC9maWxlbmFtZT4gb3B0aW9uIGluIEJpdEJha2UuCisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBtYXRjaGJveC1kZXNrdG9wIC1jIGRldnNoZWxsCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSB3aXNoIHRvIHJlcnVuIGEgdGFzaywgdXNlIHRoZSA8ZmlsZW5hbWU+LWY8L2ZpbGVuYW1lPiBmb3JjZQorICAgICAgICAgICAgb3B0aW9uLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2UgZm9yY2VzIHJlY29tcGlsYXRpb24gYWZ0ZXIKKyAgICAgICAgICAgIGNoYW5naW5nIGZpbGVzIGluIHRoZSB3b3JrIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIG1hdGNoYm94LWRlc2t0b3AKKyAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgICAgIC4KKyAgICAgICAgPHJlcGxhY2VhYmxlPm1ha2Ugc29tZSBjaGFuZ2VzIHRvIHRoZSBzb3VyY2UgY29kZSBpbiB0aGUgd29yayBkaXJlY3Rvcnk8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAgLgorICAgICAkIGJpdGJha2UgbWF0Y2hib3gtZGVza3RvcCAtYyBjb21waWxlIC1mCisgICAgICQgYml0YmFrZSBtYXRjaGJveC1kZXNrdG9wCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VxdWVuY2UgZmlyc3QgYnVpbGRzIGFuZCB0aGVuIHJlY29tcGlsZXMKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tYXRjaGJveC1kZXNrdG9wPC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGUgbGFzdCBjb21tYW5kIHJlcnVucyBhbGwgdGFza3MgKGJhc2ljYWxseSB0aGUgcGFja2FnaW5nIHRhc2tzKQorICAgICAgICAgICAgYWZ0ZXIgdGhlIGNvbXBpbGUuCisgICAgICAgICAgICBCaXRCYWtlIHJlY29nbml6ZXMgdGhhdCB0aGUgPGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgdGFzayB3YXMgcmVydW4gYW5kIHRoZXJlZm9yZSB1bmRlcnN0YW5kcyB0aGF0IHRoZSBvdGhlciB0YXNrcworICAgICAgICAgICAgYWxzbyBuZWVkIHRvIGJlIHJ1biBhZ2Fpbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiB2aWV3IGEgbGlzdCBvZiB0YXNrcyBpbiBhIGdpdmVuIHBhY2thZ2UgYnkgcnVubmluZyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kb19saXN0dGFza3M8L2ZpbGVuYW1lPiB0YXNrIGFzIGZvbGxvd3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBtYXRjaGJveC1kZXNrdG9wIC1jIGxpc3R0YXNrcworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIHJlc3VsdHMgYXBwZWFyIGFzIG91dHB1dCB0byB0aGUgY29uc29sZSBhbmQgYXJlIGFsc28gaW4gdGhlCisgICAgICAgICAgICBmaWxlIDxmaWxlbmFtZT4ke1dPUktESVJ9L3RlbXAvbG9nLmRvX2xpc3R0YXNrczwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1kZWJ1Z2dpbmctZGVwZW5kZW5jaWVzJz4KKyAgICAgICAgPHRpdGxlPkRlcGVuZGVuY3kgR3JhcGhzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNvbWV0aW1lcyBpdCBjYW4gYmUgaGFyZCB0byBzZWUgd2h5IEJpdEJha2Ugd2FudHMgdG8gYnVpbGQKKyAgICAgICAgICAgIG90aGVyIHBhY2thZ2VzIGJlZm9yZSBidWlsZGluZyBhIGdpdmVuIHBhY2thZ2UgeW91IGhhdmUgc3BlY2lmaWVkLgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iaXRiYWtlIC1nIDxyZXBsYWNlYWJsZT50YXJnZXRuYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICBjcmVhdGVzIHRoZSA8ZmlsZW5hbWU+cG4tYnVpbGRsaXN0PC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+cG4tZGVwZW5kcy5kb3Q8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlLWRlcGVuZHMuZG90PC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPnRhc2stZGVwZW5kcy5kb3Q8L2ZpbGVuYW1lPiBmaWxlcyBpbiB0aGUgY3VycmVudAorICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgVGhlc2UgZmlsZXMgc2hvdyB3aGF0IHdpbGwgYmUgYnVpbHQgYW5kIHRoZSBwYWNrYWdlIGFuZCB0YXNrCisgICAgICAgICAgICBkZXBlbmRlbmNpZXMsIHdoaWNoIGFyZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwcm9ibGVtcy4KKyAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UgLWcgLXUgZGVwZXhwIDxyZXBsYWNlYWJsZT50YXJnZXRuYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgY29tbWFuZCB0byBkaXNwbGF5IHRoZSByZXN1bHRzIGluIGEgbW9yZSBodW1hbi1yZWFkYWJsZSBmb3JtLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1kZWJ1Z2dpbmctYml0YmFrZSc+CisgICAgICAgIDx0aXRsZT5HZW5lcmFsIEJpdEJha2UgUHJvYmxlbXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBzZWUgZGVidWcgb3V0cHV0IGZyb20gQml0QmFrZSBieSB1c2luZyB0aGUgPGZpbGVuYW1lPi1EPC9maWxlbmFtZT4gb3B0aW9uLgorICAgICAgICAgICAgVGhlIGRlYnVnIG91dHB1dCBnaXZlcyBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgQml0QmFrZQorICAgICAgICAgICAgaXMgZG9pbmcgYW5kIHRoZSByZWFzb24gYmVoaW5kIGl0LgorICAgICAgICAgICAgRWFjaCA8ZmlsZW5hbWU+LUQ8L2ZpbGVuYW1lPiBvcHRpb24geW91IHVzZSBpbmNyZWFzZXMgdGhlIGxvZ2dpbmcgbGV2ZWwuCisgICAgICAgICAgICBUaGUgbW9zdCBjb21tb24gdXNhZ2UgaXMgPGZpbGVuYW1lPi1EREQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIG91dHB1dCBmcm9tIDxmaWxlbmFtZT5iaXRiYWtlIC1EREQgLXY8L2ZpbGVuYW1lPiA8cmVwbGFjZWFibGU+dGFyZ2V0bmFtZTwvcmVwbGFjZWFibGU+IGNhbiByZXZlYWwgd2h5CisgICAgICAgICAgICBCaXRCYWtlIGNob3NlIGEgY2VydGFpbiB2ZXJzaW9uIG9mIGEgcGFja2FnZSBvciB3aHkgQml0QmFrZQorICAgICAgICAgICAgcGlja2VkIGEgY2VydGFpbiBwcm92aWRlci4KKyAgICAgICAgICAgIFRoaXMgY29tbWFuZCBjb3VsZCBhbHNvIGhlbHAgeW91IGluIGEgc2l0dWF0aW9uIHdoZXJlIHlvdSB0aGluayBCaXRCYWtlIGRpZCBzb21ldGhpbmcKKyAgICAgICAgICAgIHVuZXhwZWN0ZWQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nZGV2ZWxvcG1lbnQtaG9zdC1zeXN0ZW0taXNzdWVzJz4KKyAgICAgICAgPHRpdGxlPkRldmVsb3BtZW50IEhvc3QgU3lzdGVtIElzc3VlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTb21ldGltZXMgaXNzdWVzIG9uIHRoZSBob3N0IGRldmVsb3BtZW50IHN5c3RlbSBjYW4gY2F1c2UgeW91cgorICAgICAgICAgICAgYnVpbGQgdG8gZmFpbC4KKyAgICAgICAgICAgIEZvbGxvd2luZyBhcmUga25vd24sIGhvc3Qtc3BlY2lmaWMgcHJvYmxlbXMuCisgICAgICAgICAgICBCZSBzdXJlIHRvIGFsd2F5cyBjb25zdWx0IHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1JFTEVBU0VfTk9URVM7Jz5SZWxlYXNlIE5vdGVzPC91bGluaz4KKyAgICAgICAgICAgIGZvciBhIGxvb2sgYXQgYWxsIHJlbGVhc2UtcmVsYXRlZCBpc3N1ZXMuCisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdsaWJjLWluaXRpYWw8L2ZpbGVuYW1lPiBmYWlscyB0byBidWlsZDwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBJZiB5b3VyIGRldmVsb3BtZW50IGhvc3Qgc3lzdGVtIGhhcyB0aGUgdW5wYXRjaGVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5HTlUgTWFrZSAzLjgyPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayBmYWlscyBmb3IgPGZpbGVuYW1lPmdsaWJjLWluaXRpYWw8L2ZpbGVuYW1lPiBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+VHlwaWNhbGx5LCBldmVyeSBkaXN0cmlidXRpb24gdGhhdCBzaGlwcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+R05VIE1ha2UgMy44MjwvZmlsZW5hbWU+IGFzCisgICAgICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IGFscmVhZHkgaGFzIHRoZSBwYXRjaGVkIHZlcnNpb24uCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHNvbWUgZGlzdHJpYnV0aW9ucywgc3VjaCBhcyBEZWJpYW4sIGhhdmUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkdOVSBNYWtlIDMuODI8L2ZpbGVuYW1lPiBhcyBhbiBvcHRpb24sIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIGlzIHVucGF0Y2hlZC4KKyAgICAgICAgICAgICAgICAgICAgWW91IHdpbGwgc2VlIHRoaXMgZXJyb3Igb24gdGhlc2UgdHlwZXMgb2YgZGlzdHJpYnV0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgU3dpdGNoIHRvIDxmaWxlbmFtZT5HTlUgTWFrZSAzLjgxPC9maWxlbmFtZT4gb3IgcGF0Y2gKKyAgICAgICAgICAgICAgICAgICAgeW91ciA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+IHRvIHNvbHZlIHRoZSBwcm9ibGVtLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1kZWJ1Z2dpbmctYnVpbGRmaWxlJz4KKyAgICAgICAgPHRpdGxlPkJ1aWxkaW5nIHdpdGggTm8gRGVwZW5kZW5jaWVzPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBidWlsZCBhIHNwZWNpZmljIHJlY2lwZSAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGUpLAorICAgICAgICAgICAgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIGZvcm06CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtYiA8cmVwbGFjZWFibGU+c29tZXBhdGg8L3JlcGxhY2VhYmxlPi88cmVwbGFjZWFibGU+c29tZXJlY2lwZTwvcmVwbGFjZWFibGU+LmJiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGlzIGNvbW1hbmQgZm9ybSBkb2VzIG5vdCBjaGVjayBmb3IgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3Ugc2hvdWxkIHVzZSBpdAorICAgICAgICAgICAgb25seSB3aGVuIHlvdSBrbm93IGV4aXN0aW5nIGRlcGVuZGVuY2llcyBoYXZlIGJlZW4gbWV0LgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHNwZWNpZnkgZnJhZ21lbnRzIG9mIHRoZSBmaWxlbmFtZS4KKyAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIEJpdEJha2UgY2hlY2tzIGZvciBhIHVuaXF1ZSBtYXRjaC4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktZGVidWdnaW5nLXZhcmlhYmxlcyc+CisgICAgICAgIDx0aXRsZT5WYXJpYWJsZXM8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+LWU8L2ZpbGVuYW1lPiBCaXRCYWtlIG9wdGlvbiB0bworICAgICAgICAgICAgZGlzcGxheSB0aGUgcGFyc2luZyBlbnZpcm9ubWVudCBmb3IgYSBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBkaXNwbGF5cyB0aGUgZ2VuZXJhbCBwYXJzaW5nIGVudmlyb25tZW50OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWUKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgbmV4dCBleGFtcGxlIHNob3dzIHRoZSBwYXJzaW5nIGVudmlyb25tZW50IGZvciBhIHNwZWNpZmljCisgICAgICAgICAgICByZWNpcGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtZSA8cmVwbGFjZWFibGU+cmVjaXBlbmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVjaXBlLWxvZ2dpbmctbWVjaGFuaXNtcyc+CisgICAgICAgIDx0aXRsZT5SZWNpcGUgTG9nZ2luZyBNZWNoYW5pc21zPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCZXN0IHByYWN0aWNlcyBleGlzdCB3aGlsZSB3cml0aW5nIHJlY2lwZXMgdGhhdCBib3RoIGxvZyBidWlsZCBwcm9ncmVzcyBhbmQKKyAgICAgICAgICAgIGFjdCBvbiBidWlsZCBjb25kaXRpb25zIHN1Y2ggYXMgd2FybmluZ3MgYW5kIGVycm9ycy4KKyAgICAgICAgICAgIEJvdGggUHl0aG9uIGFuZCBCYXNoIGxhbmd1YWdlIGJpbmRpbmdzIGV4aXN0IGZvciB0aGUgbG9nZ2luZyBtZWNoYW5pc206CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UHl0aG9uOjwvZW1waGFzaXM+IEZvciBQeXRob24gZnVuY3Rpb25zLCBCaXRCYWtlCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRzIHNldmVyYWwgbG9nbGV2ZWxzOiA8ZmlsZW5hbWU+YmIuZmF0YWw8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmVycm9yPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5iYi53YXJuPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ub3RlPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5iYi5wbGFpbjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmJiLmRlYnVnPC9maWxlbmFtZT4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CYXNoOjwvZW1waGFzaXM+IEZvciBCYXNoIGZ1bmN0aW9ucywgdGhlIHNhbWUgc2V0CisgICAgICAgICAgICAgICAgICAgIG9mIGxvZ2xldmVscyBleGlzdCBhbmQgYXJlIGFjY2Vzc2VkIHdpdGggYSBzaW1pbGFyIHN5bnRheDoKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiZmF0YWw8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmJiZXJyb3I8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJid2FybjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+YmJub3RlPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYnBsYWluPC9maWxlbmFtZT4sIGFuZCA8ZmlsZW5hbWU+YmJkZWJ1ZzwvZmlsZW5hbWU+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBndWlkYW5jZSBvbiBob3cgbG9nZ2luZyBpcyBoYW5kbGVkIGluIGJvdGggUHl0aG9uIGFuZCBCYXNoIHJlY2lwZXMsIHNlZSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2dnaW5nLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY2xhc3NlczwvZmlsZW5hbWU+IGZvbGRlciBvZiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdsb2dnaW5nLXdpdGgtcHl0aG9uJz4KKyAgICAgICAgICAgIDx0aXRsZT5Mb2dnaW5nIFdpdGggUHl0aG9uPC90aXRsZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4gY3JlYXRpbmcgcmVjaXBlcyB1c2luZyBQeXRob24gYW5kIGluc2VydGluZyBjb2RlIHRoYXQgaGFuZGxlcyBidWlsZCBsb2dzLAorICAgICAgICAgICAgICAgIGtlZXAgaW4gbWluZCB0aGUgZ29hbCBpcyB0byBoYXZlIGluZm9ybWF0aXZlIGxvZ3Mgd2hpbGUga2VlcGluZyB0aGUgY29uc29sZSBhcworICAgICAgICAgICAgICAgICJzaWxlbnQiIGFzIHBvc3NpYmxlLgorICAgICAgICAgICAgICAgIEFsc28sIGlmIHlvdSB3YW50IHN0YXR1cyBtZXNzYWdlcyBpbiB0aGUgbG9nLCB1c2UgdGhlICJkZWJ1ZyIgbG9nbGV2ZWwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHdyaXR0ZW4gaW4gUHl0aG9uLgorICAgICAgICAgICAgICAgIFRoZSBjb2RlIGhhbmRsZXMgbG9nZ2luZyBmb3IgYSBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgdGhlCisgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHRhc2tzIG5lZWRlZCB0byBiZSBydW4uCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtbGlzdHRhc2tzJz48ZmlsZW5hbWU+ZG9fbGlzdHRhc2tzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb246CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBweXRob24gZG9fbGlzdHRhc2tzKCkgeworICAgICAgICAgYmIuZGVidWcoMiwgIlN0YXJ0aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIHRhc2sgbGlzdCIpCisgICAgICAgICBpZiBub3Rld29ydGh5X2NvbmRpdGlvbjoKKyAgICAgICAgICAgICBiYi5ub3RlKCJUaGVyZSBhcmUgNDcgdGFza3MgdG8gcnVuIikKKyAgICAgICAgIGJiLmRlYnVnKDIsICJHb3QgdG8gcG9pbnQgeHl6IikKKyAgICAgICAgIGlmIHdhcm5pbmdfdHJpZ2dlcjoKKyAgICAgICAgICAgICBiYi53YXJuKCJEZXRlY3RlZCB3YXJuaW5nX3RyaWdnZXIsIHRoaXMgbWlnaHQgYmUgYSBwcm9ibGVtIGxhdGVyLiIpCisgICAgICAgICBpZiByZWNvdmVyYWJsZV9lcnJvcjoKKyAgICAgICAgICAgICBiYi5lcnJvcigiSGl0IHJlY292ZXJhYmxlX2Vycm9yLCB5b3UgcmVhbGx5IG5lZWQgdG8gZml4IHRoaXMhIikKKyAgICAgICAgIGlmIGZhdGFsX2Vycm9yOgorICAgICAgICAgICAgIGJiLmZhdGFsKCJmYXRhbF9lcnJvciBkZXRlY3RlZCwgdW5hYmxlIHRvIHByaW50IHRoZSB0YXNrIGxpc3QiKQorICAgICAgICAgYmIucGxhaW4oIlRoZSB0YXNrcyBwcmVzZW50IGFyZSBhYmMiKQorICAgICAgICAgYmIuZGVidWcoMiwgIkZpbmlzaGVkIGZpZ3VyaW5nIG91dCB0aGUgdGFza2xpc3QiKQorICAgICB9CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2xvZ2dpbmctd2l0aC1iYXNoJz4KKyAgICAgICAgICAgIDx0aXRsZT5Mb2dnaW5nIFdpdGggQmFzaDwvdGl0bGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIGNyZWF0aW5nIHJlY2lwZXMgdXNpbmcgQmFzaCBhbmQgaW5zZXJ0aW5nIGNvZGUgdGhhdCBoYW5kbGVzIGJ1aWxkCisgICAgICAgICAgICAgICAgbG9ncywgeW91IGhhdmUgdGhlIHNhbWUgZ29hbHMgLSBpbmZvcm1hdGl2ZSB3aXRoIG1pbmltYWwgY29uc29sZSBvdXRwdXQuCisgICAgICAgICAgICAgICAgVGhlIHN5bnRheCB5b3UgdXNlIGZvciByZWNpcGVzIHdyaXR0ZW4gaW4gQmFzaCBpcyBzaW1pbGFyIHRvIHRoYXQgb2YKKyAgICAgICAgICAgICAgICByZWNpcGVzIHdyaXR0ZW4gaW4gUHl0aG9uIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgd3JpdHRlbiBpbiBCYXNoLgorICAgICAgICAgICAgICAgIFRoZSBjb2RlIGxvZ3MgdGhlIHByb2dyZXNzIG9mIHRoZSA8ZmlsZW5hbWU+ZG9fbXlfZnVuY3Rpb248L2ZpbGVuYW1lPiBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX215X2Z1bmN0aW9uKCkgeworICAgICAgICAgYmJkZWJ1ZyAyICJSdW5uaW5nIGRvX215X2Z1bmN0aW9uIgorICAgICAgICAgaWYgWyBleGNlcHRpb25hbF9jb25kaXRpb24gXTsgdGhlbgorICAgICAgICAgICAgIGJibm90ZSAiSGl0IGV4Y2VwdGlvbmFsX2NvbmRpdGlvbiIKKyAgICAgICAgIGZpCisgICAgICAgICBiYmRlYnVnIDIgICJHb3QgdG8gcG9pbnQgeHl6IgorICAgICAgICAgaWYgWyB3YXJuaW5nX3RyaWdnZXIgXTsgdGhlbgorICAgICAgICAgICAgIGJid2FybiAiRGV0ZWN0ZWQgd2FybmluZ190cmlnZ2VyLCB0aGlzIG1pZ2h0IGNhdXNlIGEgcHJvYmxlbSBsYXRlci4iCisgICAgICAgICBmaQorICAgICAgICAgaWYgWyByZWNvdmVyYWJsZV9lcnJvciBdOyB0aGVuCisgICAgICAgICAgICAgYmJlcnJvciAiSGl0IHJlY292ZXJhYmxlX2Vycm9yLCBjb3JyZWN0aW5nIgorICAgICAgICAgZmkKKyAgICAgICAgIGlmIFsgZmF0YWxfZXJyb3IgXTsgdGhlbgorICAgICAgICAgICAgIGJiZmF0YWwgImZhdGFsX2Vycm9yIGRldGVjdGVkIgorICAgICAgICAgZmkKKyAgICAgICAgIGJiZGVidWcgMiAiQ29tcGxldGVkIGRvX215X2Z1bmN0aW9uIgorICAgICB9CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1kZWJ1Z2dpbmctb3RoZXJzJz4KKyAgICAgICAgPHRpdGxlPk90aGVyIFRpcHM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBvdGhlciB0aXBzIHRoYXQgeW91IG1pZ2h0IGZpbmQgdXNlZnVsOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+V2hlbiBhZGRpbmcgbmV3IHBhY2thZ2VzLCBpdCBpcyB3b3J0aCB3YXRjaGluZyBmb3IKKyAgICAgICAgICAgICAgICAgICAgdW5kZXNpcmFibGUgaXRlbXMgbWFraW5nIHRoZWlyIHdheSBpbnRvIGNvbXBpbGVyIGNvbW1hbmQgbGluZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgZG8gbm90IHdhbnQgcmVmZXJlbmNlcyB0byBsb2NhbCBzeXN0ZW0gZmlsZXMgbGlrZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9saWIvPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPi91c3IvaW5jbHVkZS88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPklmIHlvdSB3YW50IHRvIHJlbW92ZSB0aGUgPGZpbGVuYW1lPnBzcGxhc2g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBib290IHNwbGFzaHNjcmVlbiwKKyAgICAgICAgICAgICAgICAgICAgYWRkIDxmaWxlbmFtZT5wc3BsYXNoPWZhbHNlPC9maWxlbmFtZT4gdG8gIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLgorICAgICAgICAgICAgICAgICAgICBEb2luZyBzbyBwcmV2ZW50cyA8ZmlsZW5hbWU+cHNwbGFzaDwvZmlsZW5hbWU+IGZyb20gbG9hZGluZworICAgICAgICAgICAgICAgICAgICBhbmQgdGh1cyBhbGxvd3MgeW91IHRvIHNlZSB0aGUgY29uc29sZS4KKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzd2l0Y2ggb3V0IG9mIHRoZSBzcGxhc2hzY3JlZW4gYnkKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoaW5nIHRoZSB2aXJ0dWFsIGNvbnNvbGUgKGUuZy4gRm4rTGVmdCBvciBGbitSaWdodCBvbiBhIFphdXJ1cykuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdtYWludGFpbmluZy1idWlsZC1vdXRwdXQtcXVhbGl0eSc+CisgICAgPHRpdGxlPk1haW50YWluaW5nIEJ1aWxkIE91dHB1dCBRdWFsaXR5PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBNYW55IGZhY3RvcnMgY2FuIGluZmx1ZW5jZSB0aGUgcXVhbGl0eSBvZiBhIGJ1aWxkLgorICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IHVwZ3JhZGUgYSByZWNpcGUgdG8gdXNlIGEgbmV3IHZlcnNpb24gb2YgYW4gdXBzdHJlYW0gc29mdHdhcmUKKyAgICAgICAgcGFja2FnZSBvciB5b3UgZXhwZXJpbWVudCB3aXRoIHNvbWUgbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3VidGxlIGNoYW5nZXMKKyAgICAgICAgY2FuIG9jY3VyIHRoYXQgeW91IG1pZ2h0IG5vdCBkZXRlY3QgdW50aWwgbGF0ZXIuCisgICAgICAgIENvbnNpZGVyIHRoZSBjYXNlIHdoZXJlIHlvdXIgcmVjaXBlIGlzIHVzaW5nIGEgbmV3ZXIgdmVyc2lvbiBvZiBhbiB1cHN0cmVhbSBwYWNrYWdlLgorICAgICAgICBJbiB0aGlzIGNhc2UsIGEgbmV3IHZlcnNpb24gb2YgYSBwaWVjZSBvZiBzb2Z0d2FyZSBtaWdodCBpbnRyb2R1Y2UgYW4gb3B0aW9uYWwKKyAgICAgICAgZGVwZW5kZW5jeSBvbiBhbm90aGVyIGxpYnJhcnksIHdoaWNoIGlzIGF1dG8tZGV0ZWN0ZWQuCisgICAgICAgIElmIHRoYXQgbGlicmFyeSBoYXMgYWxyZWFkeSBiZWVuIGJ1aWx0IHdoZW4gdGhlIHNvZnR3YXJlIGlzIGJ1aWxkaW5nLAorICAgICAgICB0aGUgc29mdHdhcmUgd2lsbCBsaW5rIHRvIHRoZSBidWlsdCBsaWJyYXJ5IGFuZCB0aGF0IGxpYnJhcnkgd2lsbCBiZSBwdWxsZWQKKyAgICAgICAgaW50byB5b3VyIGltYWdlIGFsb25nIHdpdGggdGhlIG5ldyBzb2Z0d2FyZSBldmVuIGlmIHlvdSBkaWQgbm90IHdhbnQgdGhlCisgICAgICAgIGxpYnJhcnkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1idWlsZGhpc3RvcnknPjxmaWxlbmFtZT5idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MgZXhpc3RzIHRvIGhlbHAgeW91IG1haW50YWluCisgICAgICAgIHRoZSBxdWFsaXR5IG9mIHlvdXIgYnVpbGQgb3V0cHV0LgorICAgICAgICBZb3UgY2FuIHVzZSB0aGUgY2xhc3MgdG8gaGlnaGxpZ2h0IHVuZXhwZWN0ZWQgYW5kIHBvc3NpYmx5IHVud2FudGVkCisgICAgICAgIGNoYW5nZXMgaW4gdGhlIGJ1aWxkIG91dHB1dC4KKyAgICAgICAgV2hlbiB5b3UgZW5hYmxlIGJ1aWxkIGhpc3RvcnksIGl0IHJlY29yZHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbnRlbnRzIG9mCisgICAgICAgIGVhY2ggcGFja2FnZSBhbmQgaW1hZ2UgYW5kIHRoZW4gY29tbWl0cyB0aGF0IGluZm9ybWF0aW9uIHRvIGEgbG9jYWwgR2l0CisgICAgICAgIHJlcG9zaXRvcnkgd2hlcmUgeW91IGNhbiBleGFtaW5lIHRoZSBpbmZvcm1hdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBmb2xsb3dpbmc6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Ib3cgeW91IGNhbiBlbmFibGUgYW5kIGRpc2FibGUKKyAgICAgICAgICAgICAgIGJ1aWxkIGhpc3Rvcnk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkhvdyB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGJ1aWxkIGhpc3RvcnkgY29udGFpbnMKKyAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SG93IHRvIGxpbWl0IHRoZSBpbmZvcm1hdGlvbiB1c2VkIGZvciBidWlsZCBoaXN0b3J5CisgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkhvdyB0byBleGFtaW5lIHRoZSBidWlsZCBoaXN0b3J5IGZyb20gYm90aCBhCisgICAgICAgICAgICAgICBjb21tYW5kLWxpbmUgYW5kIHdlYiBpbnRlcmZhY2U8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nZW5hYmxpbmctYW5kLWRpc2FibGluZy1idWlsZC1oaXN0b3J5Jz4KKyAgICAgICAgPHRpdGxlPkVuYWJsaW5nIGFuZCBEaXNhYmxpbmcgQnVpbGQgSGlzdG9yeTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCdWlsZCBoaXN0b3J5IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICBUbyBlbmFibGUgaXQsIGFkZCB0aGUgZm9sbG93aW5nIDxmaWxlbmFtZT5JTkhFUklUPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHN0YXRlbWVudCBhbmQgc2V0IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVSUxESElTVE9SWV9DT01NSVQnPjxmaWxlbmFtZT5CVUlMREhJU1RPUllfQ09NTUlUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSB0byAiMSIgYXQgdGhlIGVuZCBvZiB5b3VyCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz46CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSEVSSVQgKz0gImJ1aWxkaGlzdG9yeSIKKyAgICAgQlVJTERISVNUT1JZX0NPTU1JVCA9ICIxIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgRW5hYmxpbmcgYnVpbGQgaGlzdG9yeSBhcyBwcmV2aW91c2x5IGRlc2NyaWJlZAorICAgICAgICAgICAgY2F1c2VzIHRoZSBidWlsZCBwcm9jZXNzIHRvIGNvbGxlY3QgYnVpbGQKKyAgICAgICAgICAgIG91dHB1dCBpbmZvcm1hdGlvbiBhbmQgY29tbWl0IGl0IHRvIGEgbG9jYWwKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2dpdCc+R2l0PC91bGluaz4gcmVwb3NpdG9yeS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEVuYWJsaW5nIGJ1aWxkIGhpc3RvcnkgaW5jcmVhc2VzIHlvdXIgYnVpbGQgdGltZXMgc2xpZ2h0bHksCisgICAgICAgICAgICAgICAgcGFydGljdWxhcmx5IGZvciBpbWFnZXMsIGFuZCBpbmNyZWFzZXMgdGhlIGFtb3VudCBvZiBkaXNrCisgICAgICAgICAgICAgICAgc3BhY2UgdXNlZCBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIGRpc2FibGUgYnVpbGQgaGlzdG9yeSBieSByZW1vdmluZyB0aGUgcHJldmlvdXMgc3RhdGVtZW50cworICAgICAgICAgICAgZnJvbSB5b3VyIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VuZGVyc3RhbmRpbmctd2hhdC10aGUtYnVpbGQtaGlzdG9yeS1jb250YWlucyc+CisgICAgICAgIDx0aXRsZT5VbmRlcnN0YW5kaW5nIFdoYXQgdGhlIEJ1aWxkIEhpc3RvcnkgQ29udGFpbnM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQnVpbGQgaGlzdG9yeSBpbmZvcm1hdGlvbiBpcyBrZXB0IGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1UT1BESVInPjxmaWxlbmFtZT5UT1BESVI8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fS9idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeSBhcyBkZWZpbmVkIGJ5IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVSUxESElTVE9SWV9ESVInPjxmaWxlbmFtZT5CVUlMREhJU1RPUllfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBhYmJyZXZpYXRlZCBsaXN0aW5nOgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2J1aWxkaGlzdG9yeS5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI2aW4iIGRlcHRoPSI0aW4iIC8+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEF0IHRoZSB0b3AgbGV2ZWwsIHRoZXJlIGlzIGEgPGZpbGVuYW1lPm1ldGFkYXRhLXJldnM8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICB0aGF0IGxpc3RzIHRoZSByZXZpc2lvbnMgb2YgdGhlIHJlcG9zaXRvcmllcyBmb3IgdGhlIGxheWVycyBlbmFibGVkCisgICAgICAgICAgICB3aGVuIHRoZSBidWlsZCB3YXMgcHJvZHVjZWQuCisgICAgICAgICAgICBUaGUgcmVzdCBvZiB0aGUgZGF0YSBzcGxpdHMgaW50byBzZXBhcmF0ZQorICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2VzPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5pbWFnZXM8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5zZGs8L2ZpbGVuYW1lPiBkaXJlY3RvcmllcywgdGhlIGNvbnRlbnRzIG9mIHdoaWNoIGFyZQorICAgICAgICAgICAgZGVzY3JpYmVkIGJlbG93LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2J1aWxkLWhpc3RvcnktcGFja2FnZS1pbmZvcm1hdGlvbic+CisgICAgICAgICAgICA8dGl0bGU+QnVpbGQgSGlzdG9yeSBQYWNrYWdlIEluZm9ybWF0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGhpc3RvcnkgZm9yIGVhY2ggcGFja2FnZSBjb250YWlucyBhIHRleHQgZmlsZSB0aGF0IGhhcworICAgICAgICAgICAgICAgIG5hbWUtdmFsdWUgcGFpcnMgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFja2FnZS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgPGZpbGVuYW1lPmJ1aWxkaGlzdG9yeS9wYWNrYWdlcy9pNTg2LXBva3ktbGludXgvYnVzeWJveC9idXN5Ym94L2xhdGVzdDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29udGFpbnMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBWID0gMS4yMi4xCisgICAgIFBSID0gcjMyCisgICAgIFJQUk9WSURFUyA9CisgICAgIFJERVBFTkRTID0gZ2xpYmMgKD49IDIuMjApIHVwZGF0ZS1hbHRlcm5hdGl2ZXMtb3BrZworICAgICBSUkVDT01NRU5EUyA9IGJ1c3lib3gtc3lzbG9nIGJ1c3lib3gtdWRoY3BjIHVwZGF0ZS1yYy5kCisgICAgIFBLR1NJWkUgPSA1NDAxNjgKKyAgICAgRklMRVMgPSAvdXNyL2Jpbi8qIC91c3Ivc2Jpbi8qIC91c3IvbGliL2J1c3lib3gvKiAvdXNyL2xpYi9saWIqLnNvLiogXAorICAgICAgICAvZXRjIC9jb20gL3ZhciAvYmluLyogL3NiaW4vKiAvbGliLyouc28uKiAvbGliL3VkZXYvcnVsZXMuZCBcCisgICAgICAgIC91c3IvbGliL3VkZXYvcnVsZXMuZCAvdXNyL3NoYXJlL2J1c3lib3ggL3Vzci9saWIvYnVzeWJveC8qIFwKKyAgICAgICAgL3Vzci9zaGFyZS9waXhtYXBzIC91c3Ivc2hhcmUvYXBwbGljYXRpb25zIC91c3Ivc2hhcmUvaWRsIFwKKyAgICAgICAgL3Vzci9zaGFyZS9vbWYgL3Vzci9zaGFyZS9zb3VuZHMgL3Vzci9saWIvYm9ub2JvL3NlcnZlcnMKKyAgICAgRklMRUxJU1QgPSAvYmluL2J1c3lib3ggL2Jpbi9idXN5Ym94Lm5vc3VpZCAvYmluL2J1c3lib3guc3VpZCAvYmluL3NoIFwKKyAgICAgICAgL2V0Yy9idXN5Ym94LmxpbmtzLm5vc3VpZCAvZXRjL2J1c3lib3gubGlua3Muc3VpZAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBNb3N0IG9mIHRoZXNlIG5hbWUtdmFsdWUgcGFpcnMgY29ycmVzcG9uZCB0byB2YXJpYWJsZXMgdXNlZAorICAgICAgICAgICAgICAgIHRvIHByb2R1Y2UgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgVGhlIGV4Y2VwdGlvbnMgYXJlIDxmaWxlbmFtZT5GSUxFTElTVDwvZmlsZW5hbWU+LCB3aGljaCBpcyB0aGUKKyAgICAgICAgICAgICAgICBhY3R1YWwgbGlzdCBvZiBmaWxlcyBpbiB0aGUgcGFja2FnZSwgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBLR1NJWkU8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgdGhlIHRvdGFsIHNpemUgb2YgZmlsZXMKKyAgICAgICAgICAgICAgICBpbiB0aGUgcGFja2FnZSBpbiBieXRlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlcmUgaXMgYWxzbyBhIGZpbGUgY29ycmVzcG9uZGluZyB0byB0aGUgcmVjaXBlIGZyb20gd2hpY2ggdGhlCisgICAgICAgICAgICAgICAgcGFja2FnZSBjYW1lIChlLmcuCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1aWxkaGlzdG9yeS9wYWNrYWdlcy9pNTg2LXBva3ktbGludXgvYnVzeWJveC9sYXRlc3Q8L2ZpbGVuYW1lPik6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQViA9IDEuMjIuMQorICAgICBQUiA9IHIzMgorICAgICBERVBFTkRTID0gaW5pdHNjcmlwdHMga2Vybi10b29scy1uYXRpdmUgdXBkYXRlLXJjLmQtbmF0aXZlIFwKKyAgICAgICAgdmlydHVhbC9pNTg2LXBva3ktbGludXgtY29tcGlsZXJsaWJzIHZpcnR1YWwvaTU4Ni1wb2t5LWxpbnV4LWdjYyBcCisgICAgICAgIHZpcnR1YWwvbGliYyB2aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMKKyAgICAgUEFDS0FHRVMgPSBidXN5Ym94LXB0ZXN0IGJ1c3lib3gtaHR0cGQgYnVzeWJveC11ZGhjcGQgYnVzeWJveC11ZGhjcGMgXAorICAgICAgICBidXN5Ym94LXN5c2xvZyBidXN5Ym94LW1kZXYgYnVzeWJveC1od2Nsb2NrIGJ1c3lib3gtZGJnIFwKKyAgICAgICAgYnVzeWJveC1zdGF0aWNkZXYgYnVzeWJveC1kZXYgYnVzeWJveC1kb2MgYnVzeWJveC1sb2NhbGUgYnVzeWJveAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRmluYWxseSwgZm9yIHRob3NlIHJlY2lwZXMgZmV0Y2hlZCBmcm9tIGEgdmVyc2lvbiBjb250cm9sCisgICAgICAgICAgICAgICAgc3lzdGVtIChlLmcuLCBHaXQpLCBhIGZpbGUgZXhpc3RzIHRoYXQgbGlzdHMgc291cmNlIHJldmlzaW9ucworICAgICAgICAgICAgICAgIHRoYXQgYXJlIHNwZWNpZmllZCBpbiB0aGUgcmVjaXBlIGFuZCBsaXN0cyB0aGUgYWN0dWFsIHJldmlzaW9ucworICAgICAgICAgICAgICAgIHVzZWQgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICBMaXN0ZWQgYW5kIGFjdHVhbCByZXZpc2lvbnMgbWlnaHQgZGlmZmVyIHdoZW4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDUkVWJz48ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgaXMgc2V0IHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PGxpbmsgbGlua2VuZD0ndmFyLUFVVE9SRVYnPkFVVE9SRVY8L2xpbms+fTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBhc3N1bWluZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idWlsZGhpc3RvcnkvcGFja2FnZXMvcWVtdXg4Ni1wb2t5LWxpbnV4L2xpbnV4LXlvY3RvL2xhdGVzdF9zcmNyZXY8L2ZpbGVuYW1lPik6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIFNSQ1JFVl9tYWNoaW5lID0gIjM4Y2Q1NjBkNTAyMmVkMmRiZDFhYjBkY2E5NjQyZTQ3Yzk4YTBhYTEiCisgICAgIFNSQ1JFVl9tYWNoaW5lID0gIjM4Y2Q1NjBkNTAyMmVkMmRiZDFhYjBkY2E5NjQyZTQ3Yzk4YTBhYTEiCisgICAgICMgU1JDUkVWX21ldGEgPSAiYTIyN2YyMGVmZjA1NmU1MTFkNTA0YjJlNDkwZjM3NzRhYjI2MGQ2ZiIKKyAgICAgU1JDUkVWX21ldGEgPSAiYTIyN2YyMGVmZjA1NmU1MTFkNTA0YjJlNDkwZjM3NzRhYjI2MGQ2ZiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5idWlsZGhpc3RvcnktY29sbGVjdC1zcmNyZXZzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb21tYW5kIHdpdGggdGhlIDxmaWxlbmFtZT4tYTwvZmlsZW5hbWU+IG9wdGlvbiB0bworICAgICAgICAgICAgICAgIGNvbGxlY3QgdGhlIHN0b3JlZCA8ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT4gdmFsdWVzCisgICAgICAgICAgICAgICAgZnJvbSBidWlsZCBoaXN0b3J5IGFuZCByZXBvcnQgdGhlbSBpbiBhIGZvcm1hdCBzdWl0YWJsZSBmb3IKKyAgICAgICAgICAgICAgICB1c2UgaW4gZ2xvYmFsIGNvbmZpZ3VyYXRpb24gKGUuZy4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBvciBhIGRpc3RybyBpbmNsdWRlIGZpbGUpIHRvCisgICAgICAgICAgICAgICAgb3ZlcnJpZGUgZmxvYXRpbmcgPGZpbGVuYW1lPkFVVE9SRVY8L2ZpbGVuYW1lPiB2YWx1ZXMgdG8gYQorICAgICAgICAgICAgICAgIGZpeGVkIHNldCBvZiByZXZpc2lvbnMuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBzb21lIGV4YW1wbGUgb3V0cHV0IGZyb20gdGhpcyBjb21tYW5kOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBidWlsZGhpc3RvcnktY29sbGVjdC1zcmNyZXZzIC1hCisgICAgICMgaTU4Ni1wb2t5LWxpbnV4CisgICAgIFNSQ1JFVl9wbi1nbGliYyA9ICJiODA3OWRkMGQzNjA2NDhlNGU4ZGU0ODY1NmM1YzM4OTcyNjIxMDcyIgorICAgICBTUkNSRVZfcG4tZ2xpYmMtaW5pdGlhbCA9ICJiODA3OWRkMGQzNjA2NDhlNGU4ZGU0ODY1NmM1YzM4OTcyNjIxMDcyIgorICAgICBTUkNSRVZfcG4tb3BrZy11dGlscyA9ICI1MzI3NGYwODc1NjVmZDQ1ZDg0NTJjNTM2Nzk5N2JhNmE2ODJhMzdhIgorICAgICBTUkNSRVZfcG4ta21vZCA9ICJmZDU2NjM4YWVkM2ZlMTQ3MDE1YmZhMTBlZDRhNWY3NDkxMzAzY2I0IgorICAgICAjIHg4Nl82NC1saW51eAorICAgICBTUkNSRVZfcG4tZ3RrLWRvYy1zdHViLW5hdGl2ZSA9ICIxZGVhMjY2NTkzZWRiNzY2ZDZkODk4Yzc5NDUxZWYxOTNlYjE3Y2ZhIgorICAgICBTUkNSRVZfcG4tZHRjLW5hdGl2ZSA9ICI2NWNjNGQyNzQ4YTJjMmU2ZjI3ZjFjZjM5ZTA3YTVkYmFiZDgwZWJmIgorICAgICBTUkNSRVZfcG4tdXBkYXRlLXJjLmQtbmF0aXZlID0gImVjYTY4MGRkZjI4ZDAyNDk1NDg5NWY1OWEyNDFhNjIyZGQ1NzVjMTEiCisgICAgIFNSQ1JFVl9nbGliY19wbi1jcm9zcy1sb2NhbGVkZWYtbmF0aXZlID0gImI4MDc5ZGQwZDM2MDY0OGU0ZThkZTQ4NjU2YzVjMzg5NzI2MjEwNzIiCisgICAgIFNSQ1JFVl9sb2NhbGVkZWZfcG4tY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZSA9ICJjODMzMzY3MzQ4ZDM5ZGFkN2JhMDE4OTkwYmZkYWZmYWVjOGU5ZWQzIgorICAgICBTUkNSRVZfcG4tcHJlbGluay1uYXRpdmUgPSAiZmFhMDY5ZGVlYzk5YmY2MTQxOGQwYmFiODMxYzgzZDdjMWI3OTdjYSIKKyAgICAgU1JDUkVWX3BuLW9wa2ctdXRpbHMtbmF0aXZlID0gIjUzMjc0ZjA4NzU2NWZkNDVkODQ1MmM1MzY3OTk3YmE2YTY4MmEzN2EiCisgICAgIFNSQ1JFVl9wbi1rZXJuLXRvb2xzLW5hdGl2ZSA9ICIyMzM0NWI4ODQ2ZmU0YmQxNjdlZmRmMWJkOGExMjI0YjJiYTlhNWZmIgorICAgICBTUkNSRVZfcG4ta21vZC1uYXRpdmUgPSAiZmQ1NjYzOGFlZDNmZTE0NzAxNWJmYTEwZWQ0YTVmNzQ5MTMwM2NiNCIKKyAgICAgIyBxZW11eDg2LXBva3ktbGludXgKKyAgICAgU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8gPSAiMzhjZDU2MGQ1MDIyZWQyZGJkMWFiMGRjYTk2NDJlNDdjOThhMGFhMSIKKyAgICAgU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8gPSAiYTIyN2YyMGVmZjA1NmU1MTFkNTA0YjJlNDkwZjM3NzRhYjI2MGQ2ZiIKKyAgICAgIyBhbGwtcG9reS1saW51eAorICAgICBTUkNSRVZfcG4tdXBkYXRlLXJjLmQgPSAiZWNhNjgwZGRmMjhkMDI0OTU0ODk1ZjU5YTI0MWE2MjJkZDU3NWMxMSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgbm90ZXMgb24gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idWlsZGhpc3RvcnktY29sbGVjdC1zcmNyZXZzPC9maWxlbmFtZT4gY29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CeSBkZWZhdWx0LCBvbmx5IHZhbHVlcyB3aGVyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT4gd2FzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGhhcmRjb2RlZCAodXN1YWxseSB3aGVuIDxmaWxlbmFtZT5BVVRPUkVWPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXMgdXNlZCkgYXJlIHJlcG9ydGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPi1hPC9maWxlbmFtZT4gb3B0aW9uIHRvIHNlZSBhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT4gdmFsdWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBvdXRwdXQgc3RhdGVtZW50cyBtaWdodCBub3QgaGF2ZSBhbnkgZWZmZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3ZlcnJpZGVzIGFyZSBhcHBsaWVkIGVsc2V3aGVyZSBpbiB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT4tZjwvZmlsZW5hbWU+IG9wdGlvbiB0byBhZGQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvcmNldmFyaWFibGU8L2ZpbGVuYW1lPiBvdmVycmlkZSB0byBlYWNoIG91dHB1dCBsaW5lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgeW91IG5lZWQgdG8gd29yayBhcm91bmQgdGhpcyByZXN0cmljdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgc2NyaXB0IGRvZXMgYXBwbHkgc3BlY2lhbCBoYW5kbGluZyB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmcgZm9yIG11bHRpcGxlIG1hY2hpbmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBzY3JpcHQgZG9lcyBwbGFjZSBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCBiZWZvcmUgZWFjaCBzZXQgb2YgdmFsdWVzIHRoYXQgc3BlY2lmaWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggdHJpcGxldCB0byB3aGljaCB0aGV5IGJlbG9uZyBhcyBzaG93biBhYm92ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuLCA8ZmlsZW5hbWU+aTU4Ni1wb2t5LWxpbnV4PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYnVpbGQtaGlzdG9yeS1pbWFnZS1pbmZvcm1hdGlvbic+CisgICAgICAgICAgICA8dGl0bGU+QnVpbGQgSGlzdG9yeSBJbWFnZSBJbmZvcm1hdGlvbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmaWxlcyBwcm9kdWNlZCBmb3IgZWFjaCBpbWFnZSBhcmUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmltYWdlLWZpbGVzOjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBBIGRpcmVjdG9yeSBjb250YWluaW5nIHNlbGVjdGVkIGZpbGVzIGZyb20gdGhlIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmlsZXMgYXJlIGRlZmluZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMREhJU1RPUllfSU1BR0VfRklMRVMnPjxmaWxlbmFtZT5CVUlMREhJU1RPUllfSU1BR0VfRklMRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5idWlsZC1pZC50eHQ6PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEh1bWFuLXJlYWRhYmxlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBidWlsZCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbWV0YWRhdGEgc291cmNlIHJldmlzaW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZnVsbCBidWlsZCBoZWFkZXIgYXMgcHJpbnRlZAorICAgICAgICAgICAgICAgICAgICAgICAgYnkgQml0QmFrZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT4qLmRvdDo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgRGVwZW5kZW5jeSBncmFwaHMgZm9yIHRoZSBpbWFnZSB0aGF0IGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSB3aXRoIDxmaWxlbmFtZT5ncmFwaHZpejwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+ZmlsZXMtaW4taW1hZ2UudHh0OjwvZmlsZW5hbWU+CisgCSAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIGZpbGVzIGluIHRoZSBpbWFnZSB3aXRoIHBlcm1pc3Npb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIsIGdyb3VwLCBzaXplLCBhbmQgc3ltbGluayBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmltYWdlLWluZm8udHh0OjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBBIHRleHQgZmlsZSBjb250YWluaW5nIG5hbWUtdmFsdWUgcGFpcnMgd2l0aCBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgYWJvdXQgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSBmb2xsb3dpbmcgbGlzdGluZyBleGFtcGxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+aW5zdGFsbGVkLXBhY2thZ2UtbmFtZXMudHh0OjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgaW5zdGFsbGVkIHBhY2thZ2VzIGJ5IG5hbWUgb25seS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5pbnN0YWxsZWQtcGFja2FnZS1zaXplcy50eHQ6PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBpbnN0YWxsZWQgcGFja2FnZXMgb3JkZXJlZCBieSBzaXplLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+aW5zdGFsbGVkLXBhY2thZ2VzLnR4dDo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIGluc3RhbGxlZCBwYWNrYWdlcyB3aXRoIGZ1bGwgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBJbnN0YWxsZWQgcGFja2FnZSBpbmZvcm1hdGlvbiBpcyBhYmxlIHRvIGJlIGdhdGhlcmVkIGFuZAorICAgICAgICAgICAgICAgICAgICBwcm9kdWNlZCBldmVuIGlmIHBhY2thZ2UgbWFuYWdlbWVudCBpcyBkaXNhYmxlZCBmb3IgdGhlIGZpbmFsCisgICAgICAgICAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIG9mIDxmaWxlbmFtZT5pbWFnZS1pbmZvLnR4dDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRElTVFJPID0gcG9reQorICAgICBESVNUUk9fVkVSU0lPTiA9IDEuNworICAgICBVU0VSX0NMQVNTRVMgPSBidWlsZHN0YXRzIGltYWdlLW1rbGlicyBpbWFnZS1wcmVsaW5rCisgICAgIElNQUdFX0NMQVNTRVMgPSBpbWFnZV90eXBlcworICAgICBJTUFHRV9GRUFUVVJFUyA9IGRlYnVnLXR3ZWFrcworICAgICBJTUFHRV9MSU5HVUFTID0KKyAgICAgSU1BR0VfSU5TVEFMTCA9IHBhY2thZ2Vncm91cC1jb3JlLWJvb3QgcnVuLXBvc3RpbnN0cworICAgICBCQURfUkVDT01NRU5EQVRJT05TID0KKyAgICAgTk9fUkVDT01NRU5EQVRJT05TID0KKyAgICAgUEFDS0FHRV9FWENMVURFID0KKyAgICAgUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgPSB3cml0ZV9wYWNrYWdlX21hbmlmZXN0OyBsaWNlbnNlX2NyZWF0ZV9tYW5pZmVzdDsgXAorICAgICAgICB3cml0ZV9pbWFnZV9tYW5pZmVzdCA7IGJ1aWxkaGlzdG9yeV9saXN0X2luc3RhbGxlZF9pbWFnZSA7IFwKKyAgICAgICAgYnVpbGRoaXN0b3J5X2dldF9pbWFnZV9pbnN0YWxsZWQgOyBzc2hfYWxsb3dfZW1wdHlfcGFzc3dvcmQ7ICBcCisgICAgICAgIHBvc3RpbnN0X2VuYWJsZV9sb2dnaW5nOyByb290ZnNfdXBkYXRlX3RpbWVzdGFtcCA7IHNzaF9kaXNhYmxlX2Ruc19sb29rdXAgOworICAgICBJTUFHRV9QT1NUUFJPQ0VTU19DT01NQU5EID0gICBidWlsZGhpc3RvcnlfZ2V0X2ltYWdlaW5mbyA7CisgICAgIElNQUdFU0laRSA9IDY5MDAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgT3RoZXIgdGhhbiA8ZmlsZW5hbWU+SU1BR0VTSVpFPC9maWxlbmFtZT4sIHdoaWNoIGlzIHRoZQorICAgICAgICAgICAgICAgIHRvdGFsIHNpemUgb2YgdGhlIGZpbGVzIGluIHRoZSBpbWFnZSBpbiBLYnl0ZXMsIHRoZQorICAgICAgICAgICAgICAgIG5hbWUtdmFsdWUgcGFpcnMgYXJlIHZhcmlhYmxlcyB0aGF0IG1heSBoYXZlIGluZmx1ZW5jZWQgdGhlCisgICAgICAgICAgICAgICAgY29udGVudCBvZiB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgVGhpcyBpbmZvcm1hdGlvbiBpcyBvZnRlbiB1c2VmdWwgd2hlbiB5b3UgYXJlIHRyeWluZyB0byBkZXRlcm1pbmUKKyAgICAgICAgICAgICAgICB3aHkgYSBjaGFuZ2UgaW4gdGhlIHBhY2thZ2Ugb3IgZmlsZSBsaXN0aW5ncyBoYXMgb2NjdXJyZWQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmctYnVpbGQtaGlzdG9yeS10by1nYXRoZXItaW1hZ2UtaW5mb3JtYXRpb24tb25seSc+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgQnVpbGQgSGlzdG9yeSB0byBHYXRoZXIgSW1hZ2UgSW5mb3JtYXRpb24gT25seTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIHlvdSBjYW4gc2VlLCBidWlsZCBoaXN0b3J5IHByb2R1Y2VzIGltYWdlIGluZm9ybWF0aW9uLAorICAgICAgICAgICAgICAgIGluY2x1ZGluZyBkZXBlbmRlbmN5IGdyYXBocywgc28geW91IGNhbiBzZWUgd2h5IHNvbWV0aGluZworICAgICAgICAgICAgICAgIHdhcyBwdWxsZWQgaW50byB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBqdXN0IGludGVyZXN0ZWQgaW4gdGhpcyBpbmZvcm1hdGlvbiBhbmQgbm90CisgICAgICAgICAgICAgICAgaW50ZXJlc3RlZCBpbiBjb2xsZWN0aW5nIHNwZWNpZmljIHBhY2thZ2Ugb3IgU0RLIGluZm9ybWF0aW9uLAorICAgICAgICAgICAgICAgIHlvdSBjYW4gZW5hYmxlIHdyaXRpbmcgb25seSBpbWFnZSBpbmZvcm1hdGlvbiB3aXRob3V0CisgICAgICAgICAgICAgICAgYW55IGhpc3RvcnkgYnkgYWRkaW5nIHRoZSBmb2xsb3dpbmcgdG8geW91cgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhFUklUICs9ICJidWlsZGhpc3RvcnkiCisgICAgIEJVSUxESElTVE9SWV9DT01NSVQgPSAiMCIKKyAgICAgQlVJTERISVNUT1JZX0ZFQVRVUkVTID0gImltYWdlIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBIZXJlLCB5b3Ugc2V0IHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMREhJU1RPUllfRkVBVFVSRVMnPjxmaWxlbmFtZT5CVUlMREhJU1RPUllfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byB1c2UgdGhlIGltYWdlIGZlYXR1cmUgb25seS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdidWlsZC1oaXN0b3J5LXNkay1pbmZvcm1hdGlvbic+CisgICAgICAgICAgICA8dGl0bGU+QnVpbGQgSGlzdG9yeSBTREsgSW5mb3JtYXRpb248L3RpdGxlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQnVpbGQgaGlzdG9yeSBjb2xsZWN0cyBzaW1pbGFyIGluZm9ybWF0aW9uIG9uIHRoZSBjb250ZW50cworICAgICAgICAgICAgICAgIG9mIFNES3MgKGUuZy4gPGZpbGVuYW1lPm1ldGEtdG9vbGNoYWluPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBvciA8ZmlsZW5hbWU+Yml0YmFrZSAtYyBwb3B1bGF0ZV9zZGsgaW1hZ2VuYW1lPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgYXMgY29tcGFyZWQgdG8gaW5mb3JtYXRpb24gaXQgY29sbGVjdHMgZm9yIGltYWdlcy4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3Qgc2hvd3MgdGhlIGZpbGVzIHByb2R1Y2VkIGZvciBlYWNoIFNESzoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmZpbGVzLWluLXNkay50eHQ6PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBmaWxlcyBpbiB0aGUgU0RLIHdpdGggcGVybWlzc2lvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICBvd25lciwgZ3JvdXAsIHNpemUsIGFuZCBzeW1saW5rIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBsaXN0IGluY2x1ZGVzIGJvdGggdGhlIGhvc3QgYW5kIHRhcmdldCBwYXJ0cworICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnNkay1pbmZvLnR4dDo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgQSB0ZXh0IGZpbGUgY29udGFpbmluZyBuYW1lLXZhbHVlIHBhaXJzIHdpdGggaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGFib3V0IHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIGZvbGxvd2luZyBsaXN0aW5nIGV4YW1wbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYXBwZWFycyB1bmRlcgorICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCBvZiB0aGUgPGZpbGVuYW1lPmhvc3Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT50YXJnZXQ8L2ZpbGVuYW1lPiBkaXJlY3RvcmllcworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBwb3J0aW9ucyBvZiB0aGUgU0RLIHRoYXQgcnVuIG9uIHRoZSBob3N0IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIHRhcmdldCwgcmVzcGVjdGl2ZWx5OgorICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmRlcGVuZHMuZG90OjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcGVuZGVuY3kgZ3JhcGggZm9yIHRoZSBTREsgdGhhdCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlIHdpdGggPGZpbGVuYW1lPmdyYXBodml6PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+aW5zdGFsbGVkLXBhY2thZ2UtbmFtZXMudHh0OjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBpbnN0YWxsZWQgcGFja2FnZXMgYnkgbmFtZSBvbmx5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmluc3RhbGxlZC1wYWNrYWdlLXNpemVzLnR4dDo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgaW5zdGFsbGVkIHBhY2thZ2VzIG9yZGVyZWQgYnkgc2l6ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5pbnN0YWxsZWQtcGFja2FnZXMudHh0OjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBpbnN0YWxsZWQgcGFja2FnZXMgd2l0aCBmdWxsIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiA8ZmlsZW5hbWU+c2RrLWluZm8udHh0PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBESVNUUk8gPSBwb2t5CisgICAgIERJU1RST19WRVJTSU9OID0gMS4zK3NuYXBzaG90LTIwMTMwMzI3CisgICAgIFNES19OQU1FID0gcG9reS1nbGliYy1pNjg2LWFybQorICAgICBTREtfVkVSU0lPTiA9IDEuMytzbmFwc2hvdAorICAgICBTREtNQUNISU5FID0KKyAgICAgU0RLSU1BR0VfRkVBVFVSRVMgPSBkZXYtcGtncyBkYmctcGtncworICAgICBCQURfUkVDT01NRU5EQVRJT05TID0KKyAgICAgU0RLU0laRSA9IDM1MjcxMgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBPdGhlciB0aGFuIDxmaWxlbmFtZT5TREtTSVpFPC9maWxlbmFtZT4sIHdoaWNoIGlzIHRoZQorICAgICAgICAgICAgICAgIHRvdGFsIHNpemUgb2YgdGhlIGZpbGVzIGluIHRoZSBTREsgaW4gS2J5dGVzLCB0aGUKKyAgICAgICAgICAgICAgICBuYW1lLXZhbHVlIHBhaXJzIGFyZSB2YXJpYWJsZXMgdGhhdCBtaWdodCBoYXZlIGluZmx1ZW5jZWQgdGhlCisgICAgICAgICAgICAgICAgY29udGVudCBvZiB0aGUgU0RLLgorICAgICAgICAgICAgICAgIFRoaXMgaW5mb3JtYXRpb24gaXMgb2Z0ZW4gdXNlZnVsIHdoZW4geW91IGFyZSB0cnlpbmcgdG8KKyAgICAgICAgICAgICAgICBkZXRlcm1pbmUgd2h5IGEgY2hhbmdlIGluIHRoZSBwYWNrYWdlIG9yIGZpbGUgbGlzdGluZ3MKKyAgICAgICAgICAgICAgICBoYXMgb2NjdXJyZWQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZXhhbWluaW5nLWJ1aWxkLWhpc3RvcnktaW5mb3JtYXRpb24nPgorICAgICAgICAgICAgPHRpdGxlPkV4YW1pbmluZyBCdWlsZCBIaXN0b3J5IEluZm9ybWF0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBleGFtaW5lIGJ1aWxkIGhpc3Rvcnkgb3V0cHV0IGZyb20gdGhlIGNvbW1hbmQgbGluZSBvcgorICAgICAgICAgICAgICAgIGZyb20gYSB3ZWIgaW50ZXJmYWNlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBzZWUgYW55IGNoYW5nZXMgdGhhdCBoYXZlIG9jY3VycmVkIChhc3N1bWluZyB5b3UgaGF2ZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMREhJU1RPUllfQ09NTUlUJz48ZmlsZW5hbWU+QlVJTERISVNUT1JZX0NPTU1JVCA9ICIxIjwvZmlsZW5hbWU+PC9saW5rPiksCisgICAgICAgICAgICAgICAgeW91IGNhbiBzaW1wbHkKKyAgICAgICAgICAgICAgICB1c2UgYW55IEdpdCBjb21tYW5kIHRoYXQgYWxsb3dzIHlvdSB0byB2aWV3IHRoZSBoaXN0b3J5IG9mCisgICAgICAgICAgICAgICAgYSByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIEhlcmUgaXMgb25lIG1ldGhvZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICAkIGdpdCBsb2cgLXAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gcmVhbGl6ZSwgaG93ZXZlciwgdGhhdCB0aGlzIG1ldGhvZCBkb2VzIHNob3cKKyAgICAgICAgICAgICAgICBjaGFuZ2VzIHRoYXQgYXJlIG5vdCBzaWduaWZpY2FudCAoZS5nLiBhIHBhY2thZ2UncyBzaXplCisgICAgICAgICAgICAgICAgY2hhbmdpbmcgYnkgYSBmZXcgYnl0ZXMpLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIGNvbW1hbmQtbGluZSB0b29sIGNhbGxlZCA8ZmlsZW5hbWU+YnVpbGRoaXN0b3J5LWRpZmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRvZXMgZXhpc3QsIHRob3VnaCwgdGhhdCBxdWVyaWVzIHRoZSBHaXQgcmVwb3NpdG9yeSBhbmQgcHJpbnRzIGp1c3QKKyAgICAgICAgICAgICAgICB0aGUgZGlmZmVyZW5jZXMgdGhhdCBtaWdodCBiZSBzaWduaWZpY2FudCBpbiBodW1hbi1yZWFkYWJsZSBmb3JtLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgfi9wb2t5L3Bva3kvc2NyaXB0cy9idWlsZGhpc3RvcnktZGlmZiAuIEhFQUReCisgICAgIENoYW5nZXMgdG8gaW1hZ2VzL3FlbXV4ODZfNjQvZ2xpYmMvY29yZS1pbWFnZS1taW5pbWFsIChmaWxlcy1pbi1pbWFnZS50eHQpOgorICAgICAgICAvZXRjL2Fub3RoZXJwa2cuY29uZiB3YXMgYWRkZWQKKyAgICAgICAgL3NiaW4vYW5vdGhlcnBrZyB3YXMgYWRkZWQKKyAgICAgICAgKiAoaW5zdGFsbGVkLXBhY2thZ2UtbmFtZXMudHh0KToKKyAgICAgICAgKiAgIGFub3RoZXJwa2cgd2FzIGFkZGVkCisgICAgIENoYW5nZXMgdG8gaW1hZ2VzL3FlbXV4ODZfNjQvZ2xpYmMvY29yZS1pbWFnZS1taW5pbWFsIChpbnN0YWxsZWQtcGFja2FnZS1uYW1lcy50eHQpOgorICAgICAgICBhbm90aGVycGtnIHdhcyBhZGRlZAorICAgICBwYWNrYWdlcy9xZW11eDg2XzY0LXBva3ktbGludXgvdjg2ZDogUEFDS0FHRVM6IGFkZGVkICJ2ODZkLWV4dHJhcyIKKyAgICAgICAgKiBQUiBjaGFuZ2VkIGZyb20gInIwIiB0byAicjEiCisgICAgICAgICogUFYgY2hhbmdlZCBmcm9tICIwLjEuMTAiIHRvICIwLjEuMTIiCisgICAgIHBhY2thZ2VzL3FlbXV4ODZfNjQtcG9reS1saW51eC92ODZkL3Y4NmQ6IFBLR1NJWkUgY2hhbmdlZCBmcm9tIDExMDU3OSB0byAxNDQzODEgKCszMCUpCisgICAgICAgICogUFIgY2hhbmdlZCBmcm9tICJyMCIgdG8gInIxIgorICAgICAgICAqIFBWIGNoYW5nZWQgZnJvbSAiMC4xLjEwIiB0byAiMC4xLjEyIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gc2VlIGNoYW5nZXMgdG8gdGhlIGJ1aWxkIGhpc3RvcnkgdXNpbmcgYSB3ZWIgaW50ZXJmYWNlLCBmb2xsb3cKKyAgICAgICAgICAgICAgICB0aGUgaW5zdHJ1Y3Rpb24gaW4gdGhlIDxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPiBmaWxlIGhlcmUuCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvYnVpbGRoaXN0b3J5LXdlYi8nPjwvdWxpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGEgc2FtcGxlIHNjcmVlbnNob3Qgb2YgdGhlIGludGVyZmFjZToKKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvYnVpbGRoaXN0b3J5LXdlYi5wbmciIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiB3aWR0aD0iMTMwJSIgY29udGVudGRlcHRoPSIxMzAlIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nc3BlZWRpbmctdXAtdGhlLWJ1aWxkJz4KKyAgICA8dGl0bGU+U3BlZWRpbmcgVXAgdGhlIEJ1aWxkPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBCdWlsZCB0aW1lIGNhbiBiZSBhbiBpc3N1ZS4KKyAgICAgICAgQnkgZGVmYXVsdCwgdGhlIGJ1aWxkIHN5c3RlbSB1c2VzIHNpbXBsZSBjb250cm9scyB0byB0cnkgYW5kIG1heGltaXplCisgICAgICAgIGJ1aWxkIGVmZmljaWVuY3kuCisgICAgICAgIEluIGdlbmVyYWwsIHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciBhbGwgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMKKyAgICAgICAgcmVzdWx0IGluIHRoZSBtb3N0IGVmZmljaWVudCBidWlsZCB0aW1lcyB3aGVuIGRlYWxpbmcgd2l0aCBzaW5nbGUKKyAgICAgICAgc29ja2V0IHN5c3RlbXMgKGkuZS4gYSBzaW5nbGUgQ1BVKS4KKyAgICAgICAgSWYgeW91IGhhdmUgbXVsdGlwbGUgQ1BVcywgeW91IG1pZ2h0IHRyeSBpbmNyZWFzaW5nIHRoZSBkZWZhdWx0CisgICAgICAgIHZhbHVlcyB0byBnYWluIG1vcmUgc3BlZWQuCisgICAgICAgIFNlZSB0aGUgZGVzY3JpcHRpb25zIGluIHRoZSBnbG9zc2FyeSBmb3IgZWFjaCB2YXJpYWJsZSBmb3IgbW9yZQorICAgICAgICBpbmZvcm1hdGlvbjoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfTlVNQkVSX1RIUkVBRFMnPjxmaWxlbmFtZT5CQl9OVU1CRVJfVEhSRUFEUzwvZmlsZW5hbWU+OjwvbGluaz4KKyAgICAgICAgICAgICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGhyZWFkcyBCaXRCYWtlIHNpbXVsdGFuZW91c2x5IGV4ZWN1dGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjdmFyLUJCX05VTUJFUl9QQVJTRV9USFJFQURTJz48ZmlsZW5hbWU+QkJfTlVNQkVSX1BBUlNFX1RIUkVBRFM8L2ZpbGVuYW1lPjo8L3VsaW5rPgorICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgdGhyZWFkcyBCaXRCYWtlIHVzZXMgZHVyaW5nIHBhcnNpbmcuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBUkFMTEVMX01BS0UnPjxmaWxlbmFtZT5QQVJBTExFTF9NQUtFPC9maWxlbmFtZT46PC9saW5rPgorICAgICAgICAgICAgICAgIEV4dHJhIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbXBpbGUnPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGFzayBpbiBvcmRlciB0byBzcGVjaWZ5IHBhcmFsbGVsIGNvbXBpbGF0aW9uIG9uIHRoZQorICAgICAgICAgICAgICAgIGxvY2FsIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBUkFMTEVMX01BS0VJTlNUJz48ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRUlOU1Q8L2ZpbGVuYW1lPjo8L2xpbms+CisgICAgICAgICAgICAgICAgRXh0cmEgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB0YXNrIGluIG9yZGVyIHRvIHNwZWNpZnkgcGFyYWxsZWwgaW5zdGFsbGF0aW9uIG9uIHRoZQorICAgICAgICAgICAgICAgIGxvY2FsIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICBBcyBtZW50aW9uZWQsIHRoZXNlIHZhcmlhYmxlcyBhbGwgc2NhbGUgdG8gdGhlIG51bWJlciBvZiBwcm9jZXNzb3IKKyAgICAgICAgY29yZXMgYXZhaWxhYmxlIG9uIHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgIEZvciBzaW5nbGUgc29ja2V0IHN5c3RlbXMsIHRoaXMgYXV0by1zY2FsaW5nIGVuc3VyZXMgdGhhdCB0aGUgYnVpbGQKKyAgICAgICAgc3lzdGVtIGZ1bmRhbWVudGFsbHkgdGFrZXMgYWR2YW50YWdlIG9mIHBvdGVudGlhbCBwYXJhbGxlbCBvcGVyYXRpb25zCisgICAgICAgIGR1cmluZyB0aGUgYnVpbGQgYmFzZWQgb24gdGhlIGJ1aWxkIG1hY2hpbmUncyBjYXBhYmlsaXRpZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvbGxvd2luZyBhcmUgYWRkaXRpb25hbCBmYWN0b3JzIHRoYXQgY2FuIGFmZmVjdCBidWlsZCBzcGVlZDoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBGaWxlIHN5c3RlbSB0eXBlOgorICAgICAgICAgICAgICAgIFRoZSBmaWxlIHN5c3RlbSB0eXBlIHRoYXQgdGhlIGJ1aWxkIGlzIGJlaW5nIHBlcmZvcm1lZCBvbiBjYW4KKyAgICAgICAgICAgICAgICBhbHNvIGluZmx1ZW5jZSBwZXJmb3JtYW5jZS4KKyAgICAgICAgICAgICAgICBVc2luZyA8ZmlsZW5hbWU+ZXh0NDwvZmlsZW5hbWU+IGlzIHJlY29tbWVuZGVkIGFzIGNvbXBhcmVkCisgICAgICAgICAgICAgICAgdG8gPGZpbGVuYW1lPmV4dDI8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmV4dDM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGR1ZSB0byA8ZmlsZW5hbWU+ZXh0NDwvZmlsZW5hbWU+IGltcHJvdmVkIGZlYXR1cmVzCisgICAgICAgICAgICAgICAgc3VjaCBhcyBleHRlbnRzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIERpc2FibGluZyB0aGUgdXBkYXRpbmcgb2YgYWNjZXNzIHRpbWUgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bm9hdGltZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bm9hdGltZTwvZmlsZW5hbWU+IG1vdW50IG9wdGlvbiBwcmV2ZW50cyB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gZnJvbSB1cGRhdGluZyBmaWxlIGFuZCBkaXJlY3RvcnkgYWNjZXNzIHRpbWVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFNldHRpbmcgYSBsb25nZXIgY29tbWl0OgorICAgICAgICAgICAgICAgIFVzaW5nIHRoZSAiY29tbWl0PSIgbW91bnQgb3B0aW9uIGluY3JlYXNlcyB0aGUgaW50ZXJ2YWwKKyAgICAgICAgICAgICAgICBpbiBzZWNvbmRzIGJldHdlZW4gZGlzayBjYWNoZSB3cml0ZXMuCisgICAgICAgICAgICAgICAgQ2hhbmdpbmcgdGhpcyBpbnRlcnZhbCBmcm9tIHRoZSBmaXZlIHNlY29uZCBkZWZhdWx0IHRvCisgICAgICAgICAgICAgICAgc29tZXRoaW5nIGxvbmdlciBpbmNyZWFzZXMgdGhlIHJpc2sgb2YgZGF0YSBsb3NzIGJ1dCBkZWNyZWFzZXMKKyAgICAgICAgICAgICAgICB0aGUgbmVlZCB0byB3cml0ZSB0byB0aGUgZGlzaywgdGh1cyBpbmNyZWFzaW5nIHRoZSBidWlsZAorICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIENob29zaW5nIHRoZSBwYWNrYWdpbmcgYmFja2VuZDoKKyAgICAgICAgICAgICAgICBPZiB0aGUgYXZhaWxhYmxlIHBhY2thZ2luZyBiYWNrZW5kcywgSVBLIGlzIHRoZSBmYXN0ZXN0LgorICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgc2VsZWN0aW5nIGEgc2luZ3VsYXIgcGFja2FnaW5nIGJhY2tlbmQgYWxzbworICAgICAgICAgICAgICAgIGhlbHBzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFVzaW5nIDxmaWxlbmFtZT50bXBmczwvZmlsZW5hbWU+IGZvcgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBhcyBhIHRlbXBvcmFyeSBmaWxlIHN5c3RlbToKKyAgICAgICAgICAgICAgICBXaGlsZSB0aGlzIGNhbiBoZWxwIHNwZWVkIHVwIHRoZSBidWlsZCwgdGhlIGJlbmVmaXRzIGFyZQorICAgICAgICAgICAgICAgIGxpbWl0ZWQgZHVlIHRvIHRoZSBjb21waWxlciB1c2luZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tcGlwZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gZ29lcyB0byBzb21lIGxlbmd0aHMgdG8gYXZvaWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3luYygpPC9maWxlbmFtZT4gY2FsbHMgaW50byB0aGUKKyAgICAgICAgICAgICAgICBmaWxlIHN5c3RlbSBvbiB0aGUgcHJpbmNpcGxlIHRoYXQgaWYgdGhlcmUgd2FzIGEgc2lnbmlmaWNhbnQKKyAgICAgICAgICAgICAgICBmYWlsdXJlLCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgY29udGVudHMgY291bGQgZWFzaWx5IGJlIHJlYnVpbHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgSW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ybS13b3JrJz48ZmlsZW5hbWU+cm1fd29yazwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNsYXNzOgorICAgICAgICAgICAgICAgIEluaGVyaXRpbmcgdGhpcyBjbGFzcyBoYXMgc2hvd24gdG8gc3BlZWQgdXAgYnVpbGRzIGR1ZSB0bworICAgICAgICAgICAgICAgIHNpZ25pZmljYW50bHkgbG93ZXIgYW1vdW50cyBvZiBkYXRhIHN0b3JlZCBpbiB0aGUgZGF0YQorICAgICAgICAgICAgICAgIGNhY2hlIGFzIHdlbGwgYXMgb24gZGlzay4KKyAgICAgICAgICAgICAgICBJbmhlcml0aW5nIHRoaXMgY2xhc3MgYWxzbyBtYWtlcyBjbGVhbnVwIG9mCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGZhc3RlciwgYXQgdGhlIGV4cGVuc2Ugb2YgYmVpbmcgZWFzaWx5IGFibGUgdG8gZGl2ZSBpbnRvIHRoZQorICAgICAgICAgICAgICAgIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgIEZpbGUgc3lzdGVtIG1haW50YWluZXJzIGhhdmUgcmVjb21tZW5kZWQgdGhhdCB0aGUgZmFzdGVzdCB3YXkKKyAgICAgICAgICAgICAgICB0byBjbGVhbiB1cCBsYXJnZSBudW1iZXJzIG9mIGZpbGVzIGlzIHRvIHJlZm9ybWF0IHBhcnRpdGlvbnMKKyAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiBkZWxldGUgZmlsZXMgZHVlIHRvIHRoZSBsaW5lYXIgbmF0dXJlIG9mIHBhcnRpdGlvbnMuCisgICAgICAgICAgICAgICAgVGhpcywgb2YgY291cnNlLCBhc3N1bWVzIHlvdSBzdHJ1Y3R1cmUgdGhlIGRpc2sgcGFydGl0aW9ucyBhbmQKKyAgICAgICAgICAgICAgICBmaWxlIHN5c3RlbXMgaW4gYSB3YXkgdGhhdCB0aGlzIGlzIHByYWN0aWNhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIEFzaWRlIGZyb20gdGhlIHByZXZpb3VzIGxpc3QsIHlvdSBzaG91bGQga2VlcCBzb21lIHRyYWRlIG9mZnMgaW4KKyAgICAgICAgbWluZCB0aGF0IGNhbiBoZWxwIHlvdSBzcGVlZCB1cCB0aGUgYnVpbGQ6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgUmVtb3ZlIGl0ZW1zIGZyb20KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGhhdCB5b3UgbWlnaHQgbm90IG5lZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgRXhjbHVkZSBkZWJ1ZyBzeW1ib2xzIGFuZCBvdGhlciBkZWJ1ZyBpbmZvcm1hdGlvbjoKKyAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IG5lZWQgdGhlc2Ugc3ltYm9scyBhbmQgb3RoZXIgZGVidWcgaW5mb3JtYXRpb24sCisgICAgICAgICAgICAgICAgZGlzYWJsaW5nIHRoZSA8ZmlsZW5hbWU+Ki1kYmc8L2ZpbGVuYW1lPiBwYWNrYWdlIGdlbmVyYXRpb24KKyAgICAgICAgICAgICAgICBjYW4gc3BlZWQgdXAgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZGlzYWJsZSB0aGlzIGdlbmVyYXRpb24gYnkgc2V0dGluZyB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUJz48ZmlsZW5hbWU+SU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gIjEiLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIERpc2FibGUgc3RhdGljIGxpYnJhcnkgZ2VuZXJhdGlvbiBmb3IgcmVjaXBlcyBkZXJpdmVkIGZyb20KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXV0b2NvbmY8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+bGlidG9vbDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHNob3dpbmcgaG93IHRvIGRpc2FibGUgc3RhdGljCisgICAgICAgICAgICAgICAgbGlicmFyaWVzIGFuZCBzdGlsbCBwcm92aWRlIGFuIG92ZXJyaWRlIHRvIGhhbmRsZSBleGNlcHRpb25zOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1RBVElDTElCQ09ORiA9ICItLWRpc2FibGUtc3RhdGljIgorICAgICBTVEFUSUNMSUJDT05GX3NxbGl0ZTMtbmF0aXZlID0gIiIKKyAgICAgRVhUUkFfT0VDT05GICs9ICIke1NUQVRJQ0xJQkNPTkZ9IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+Tm90ZXM8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvbWUgcmVjaXBlcyBuZWVkIHN0YXRpYyBsaWJyYXJpZXMgaW4gb3JkZXIgdG8gd29yaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlY3RseSAoZS5nLiA8ZmlsZW5hbWU+cHNldWRvLW5hdGl2ZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZHMgPGZpbGVuYW1lPnNxbGl0ZTMtbmF0aXZlPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE92ZXJyaWRlcywgYXMgaW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsIGFjY291bnQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlc2Uga2luZHMgb2YgZXhjZXB0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb21lIHBhY2thZ2VzIGhhdmUgcGFja2FnaW5nIGNvZGUgdGhhdCBhc3N1bWVzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbmNlIG9mIHRoZSBzdGF0aWMgbGlicmFyaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHNvLCB5b3UgbWlnaHQgbmVlZCB0byBleGNsdWRlIHRoZW0gYXMgd2VsbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL1ZlcmEudHRmIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL1ZlcmEudHRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4Y2Q2YjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYS50dGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL1ZlcmEueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL1ZlcmEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjODIwNDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYS54bWwKQEAgLTAsMCArMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48Zm9udC1tZXRyaWNzIHR5cGU9IlRZUEUwIj48Zm9udC1uYW1lPkJpdHN0cmVhbVZlcmFTYW5zPC9mb250LW5hbWU+PGVtYmVkLz48Y2FwLWhlaWdodD43Mjk8L2NhcC1oZWlnaHQ+PHgtaGVpZ2h0PjU0NjwveC1oZWlnaHQ+PGFzY2VuZGVyPjkyODwvYXNjZW5kZXI+PGRlc2NlbmRlcj4tMjM1PC9kZXNjZW5kZXI+PGJib3g+PGxlZnQ+LTE4MzwvbGVmdD48Ym90dG9tPi0yMzU8L2JvdHRvbT48cmlnaHQ+MTI4NzwvcmlnaHQ+PHRvcD45Mjg8L3RvcD48L2Jib3g+PGZsYWdzPjMyPC9mbGFncz48c3RlbXY+MDwvc3RlbXY+PGl0YWxpY2FuZ2xlPjA8L2l0YWxpY2FuZ2xlPjxzdWJ0eXBlPlRZUEUwPC9zdWJ0eXBlPjxtdWx0aWJ5dGUtZXh0cmFzPjxjaWQtdHlwZT5DSURGb250VHlwZTI8L2NpZC10eXBlPjxkZWZhdWx0LXdpZHRoPjA8L2RlZmF1bHQtd2lkdGg+PGJmcmFuZ2VzPjxiZiBnaT0iMyIgdWU9IjEyNiIgdXM9IjMyIi8+PGJmIGdpPSIxNzIiIHVlPSIxNjAiIHVzPSIxNjAiLz48YmYgZ2k9IjE2MyIgdWU9IjE2MSIgdXM9IjE2MSIvPjxiZiBnaT0iMTMyIiB1ZT0iMTYzIiB1cz0iMTYyIi8+PGJmIGdpPSIxODkiIHVlPSIxNjQiIHVzPSIxNjQiLz48YmYgZ2k9IjE1MCIgdWU9IjE2NSIgdXM9IjE2NSIvPjxiZiBnaT0iMjMxIiB1ZT0iMTY2IiB1cz0iMTY2Ii8+PGJmIGdpPSIxMzQiIHVlPSIxNjciIHVzPSIxNjciLz48YmYgZ2k9IjE0MiIgdWU9IjE2OCIgdXM9IjE2OCIvPjxiZiBnaT0iMTM5IiB1ZT0iMTY5IiB1cz0iMTY5Ii8+PGJmIGdpPSIxNTciIHVlPSIxNzAiIHVzPSIxNzAiLz48YmYgZ2k9IjE2OSIgdWU9IjE3MSIgdXM9IjE3MSIvPjxiZiBnaT0iMTY0IiB1ZT0iMTcyIiB1cz0iMTcyIi8+PGJmIGdpPSIyNTYiIHVlPSIxNzMiIHVzPSIxNzMiLz48YmYgZ2k9IjEzOCIgdWU9IjE3NCIgdXM9IjE3NCIvPjxiZiBnaT0iMjE3IiB1ZT0iMTc1IiB1cz0iMTc1Ii8+PGJmIGdpPSIxMzEiIHVlPSIxNzYiIHVzPSIxNzYiLz48YmYgZ2k9IjE0NyIgdWU9IjE3NyIgdXM9IjE3NyIvPjxiZiBnaT0iMjQxIiB1ZT0iMTc5IiB1cz0iMTc4Ii8+PGJmIGdpPSIxNDEiIHVlPSIxODAiIHVzPSIxODAiLz48YmYgZ2k9IjE1MSIgdWU9IjE4MSIgdXM9IjE4MSIvPjxiZiBnaT0iMTM2IiB1ZT0iMTgyIiB1cz0iMTgyIi8+PGJmIGdpPSIxOTUiIHVlPSIxODMiIHVzPSIxODMiLz48YmYgZ2k9IjIyMSIgdWU9IjE4NCIgdXM9IjE4NCIvPjxiZiBnaT0iMjQwIiB1ZT0iMTg1IiB1cz0iMTg1Ii8+PGJmIGdpPSIxNTgiIHVlPSIxODYiIHVzPSIxODYiLz48YmYgZ2k9IjE3MCIgdWU9IjE4NyIgdXM9IjE4NyIvPjxiZiBnaT0iMjQzIiB1ZT0iMTkwIiB1cz0iMTg4Ii8+PGJmIGdpPSIxNjIiIHVlPSIxOTEiIHVzPSIxOTEiLz48YmYgZ2k9IjE3MyIgdWU9IjE5MiIgdXM9IjE5MiIvPjxiZiBnaT0iMjAxIiB1ZT0iMTkzIiB1cz0iMTkzIi8+PGJmIGdpPSIxOTkiIHVlPSIxOTQiIHVzPSIxOTQiLz48YmYgZ2k9IjE3NCIgdWU9IjE5NSIgdXM9IjE5NSIvPjxiZiBnaT0iOTgiIHVlPSIxOTciIHVzPSIxOTYiLz48YmYgZ2k9IjE0NCIgdWU9IjE5OCIgdXM9IjE5OCIvPjxiZiBnaT0iMTAwIiB1ZT0iMTk5IiB1cz0iMTk5Ii8+PGJmIGdpPSIyMDMiIHVlPSIyMDAiIHVzPSIyMDAiLz48YmYgZ2k9IjEwMSIgdWU9IjIwMSIgdXM9IjIwMSIvPjxiZiBnaT0iMjAwIiB1ZT0iMjAyIiB1cz0iMjAyIi8+PGJmIGdpPSIyMDIiIHVlPSIyMDMiIHVzPSIyMDMiLz48YmYgZ2k9IjIwNyIgdWU9IjIwNCIgdXM9IjIwNCIvPjxiZiBnaT0iMjA0IiB1ZT0iMjA3IiB1cz0iMjA1Ii8+PGJmIGdpPSIyMzIiIHVlPSIyMDgiIHVzPSIyMDgiLz48YmYgZ2k9IjEwMiIgdWU9IjIwOSIgdXM9IjIwOSIvPjxiZiBnaT0iMjEwIiB1ZT0iMjEwIiB1cz0iMjEwIi8+PGJmIGdpPSIyMDgiIHVlPSIyMTIiIHVzPSIyMTEiLz48YmYgZ2k9IjE3NSIgdWU9IjIxMyIgdXM9IjIxMyIvPjxiZiBnaT0iMTAzIiB1ZT0iMjE0IiB1cz0iMjE0Ii8+PGJmIGdpPSIyMzkiIHVlPSIyMTUiIHVzPSIyMTUiLz48YmYgZ2k9IjE0NSIgdWU9IjIxNiIgdXM9IjIxNiIvPjxiZiBnaT0iMjEzIiB1ZT0iMjE3IiB1cz0iMjE3Ii8+PGJmIGdpPSIyMTEiIHVlPSIyMTkiIHVzPSIyMTgiLz48YmYgZ2k9IjEwNCIgdWU9IjIyMCIgdXM9IjIyMCIvPjxiZiBnaT0iMjM0IiB1ZT0iMjIxIiB1cz0iMjIxIi8+PGJmIGdpPSIyMzYiIHVlPSIyMjIiIHVzPSIyMjIiLz48YmYgZ2k9IjEzNyIgdWU9IjIyMyIgdXM9IjIyMyIvPjxiZiBnaT0iMTA2IiB1ZT0iMjI0IiB1cz0iMjI0Ii8+PGJmIGdpPSIxMDUiIHVlPSIyMjUiIHVzPSIyMjUiLz48YmYgZ2k9IjEwNyIgdWU9IjIyNiIgdXM9IjIyNiIvPjxiZiBnaT0iMTA5IiB1ZT0iMjI3IiB1cz0iMjI3Ii8+PGJmIGdpPSIxMDgiIHVlPSIyMjgiIHVzPSIyMjgiLz48YmYgZ2k9IjExMCIgdWU9IjIyOSIgdXM9IjIyOSIvPjxiZiBnaT0iMTYwIiB1ZT0iMjMwIiB1cz0iMjMwIi8+PGJmIGdpPSIxMTEiIHVlPSIyMzEiIHVzPSIyMzEiLz48YmYgZ2k9IjExMyIgdWU9IjIzMiIgdXM9IjIzMiIvPjxiZiBnaT0iMTEyIiB1ZT0iMjMzIiB1cz0iMjMzIi8+PGJmIGdpPSIxMTQiIHVlPSIyMzUiIHVzPSIyMzQiLz48YmYgZ2k9IjExNyIgdWU9IjIzNiIgdXM9IjIzNiIvPjxiZiBnaT0iMTE2IiB1ZT0iMjM3IiB1cz0iMjM3Ii8+PGJmIGdpPSIxMTgiIHVlPSIyMzkiIHVzPSIyMzgiLz48YmYgZ2k9IjIzMyIgdWU9IjI0MCIgdXM9IjI0MCIvPjxiZiBnaT0iMTIwIiB1ZT0iMjQxIiB1cz0iMjQxIi8+PGJmIGdpPSIxMjIiIHVlPSIyNDIiIHVzPSIyNDIiLz48YmYgZ2k9IjEyMSIgdWU9IjI0MyIgdXM9IjI0MyIvPjxiZiBnaT0iMTIzIiB1ZT0iMjQ0IiB1cz0iMjQ0Ii8+PGJmIGdpPSIxMjUiIHVlPSIyNDUiIHVzPSIyNDUiLz48YmYgZ2k9IjEyNCIgdWU9IjI0NiIgdXM9IjI0NiIvPjxiZiBnaT0iMTg0IiB1ZT0iMjQ3IiB1cz0iMjQ3Ii8+PGJmIGdpPSIxNjEiIHVlPSIyNDgiIHVzPSIyNDgiLz48YmYgZ2k9IjEyNyIgdWU9IjI0OSIgdXM9IjI0OSIvPjxiZiBnaT0iMTI2IiB1ZT0iMjUwIiB1cz0iMjUwIi8+PGJmIGdpPSIxMjgiIHVlPSIyNTIiIHVzPSIyNTEiLz48YmYgZ2k9IjIzNSIgdWU9IjI1MyIgdXM9IjI1MyIvPjxiZiBnaT0iMjM3IiB1ZT0iMjU0IiB1cz0iMjU0Ii8+PGJmIGdpPSIxODYiIHVlPSIyNTUiIHVzPSIyNTUiLz48YmYgZ2k9IjI1MSIgdWU9IjI2MyIgdXM9IjI2MiIvPjxiZiBnaT0iMjUzIiB1ZT0iMjY5IiB1cz0iMjY4Ii8+PGJmIGdpPSIwIiB1ZT0iMjcwIiB1cz0iMjcwIi8+PGJmIGdpPSIwIiB1ZT0iMjcxIiB1cz0iMjcxIi8+PGJmIGdpPSIwIiB1ZT0iMjcyIiB1cz0iMjcyIi8+PGJmIGdpPSIyNTUiIHVlPSIyNzMiIHVzPSIyNzMiLz48YmYgZ2k9IjI0NiIgdWU9IjI4NyIgdXM9IjI4NiIvPjxiZiBnaT0iMjQ4IiB1ZT0iMzA0IiB1cz0iMzA0Ii8+PGJmIGdpPSIyMTQiIHVlPSIzMDUiIHVzPSIzMDUiLz48YmYgZ2k9IjIyNSIgdWU9IjMyMiIgdXM9IjMyMSIvPjxiZiBnaT0iMTc2IiB1ZT0iMzM5IiB1cz0iMzM4Ii8+PGJmIGdpPSIyNDkiIHVlPSIzNTEiIHVzPSIzNTAiLz48YmYgZ2k9IjIyNyIgdWU9IjM1MyIgdXM9IjM1MiIvPjxiZiBnaT0iMTg3IiB1ZT0iMzc2IiB1cz0iMzc2Ii8+PGJmIGdpPSIyMjkiIHVlPSIzODIiIHVzPSIzODEiLz48YmYgZ2k9IjE2NiIgdWU9IjQwMiIgdXM9IjQwMiIvPjxiZiBnaT0iMjE1IiB1ZT0iNzEwIiB1cz0iNzEwIi8+PGJmIGdpPSIyMjQiIHVlPSI3MTEiIHVzPSI3MTEiLz48YmYgZ2k9IjIxOCIgdWU9IjczMCIgdXM9IjcyOCIvPjxiZiBnaT0iMjIzIiB1ZT0iNzMxIiB1cz0iNzMxIi8+PGJmIGdpPSIyMTYiIHVlPSI3MzIiIHVzPSI3MzIiLz48YmYgZ2k9IjIyMiIgdWU9IjczMyIgdXM9IjczMyIvPjxiZiBnaT0iMTU5IiB1ZT0iOTM3IiB1cz0iOTM3Ii8+PGJmIGdpPSIxNTUiIHVlPSI5NjAiIHVzPSI5NjAiLz48YmYgZ2k9IjE3OCIgdWU9IjgyMTIiIHVzPSI4MjExIi8+PGJmIGdpPSIwIiB1ZT0iODIxMyIgdXM9IjgyMTMiLz48YmYgZ2k9IjAiIHVlPSI4MjE0IiB1cz0iODIxNCIvPjxiZiBnaT0iMCIgdWU9IjgyMTUiIHVzPSI4MjE1Ii8+PGJmIGdpPSIxODIiIHVlPSI4MjE3IiB1cz0iODIxNiIvPjxiZiBnaT0iMTk2IiB1ZT0iODIxOCIgdXM9IjgyMTgiLz48YmYgZ2k9IjAiIHVlPSI4MjE5IiB1cz0iODIxOSIvPjxiZiBnaT0iMTgwIiB1ZT0iODIyMSIgdXM9IjgyMjAiLz48YmYgZ2k9IjE5NyIgdWU9IjgyMjIiIHVzPSI4MjIyIi8+PGJmIGdpPSIwIiB1ZT0iODIyMyIgdXM9IjgyMjMiLz48YmYgZ2k9IjEzMCIgdWU9IjgyMjQiIHVzPSI4MjI0Ii8+PGJmIGdpPSIxOTQiIHVlPSI4MjI1IiB1cz0iODIyNSIvPjxiZiBnaT0iMTM1IiB1ZT0iODIyNiIgdXM9IjgyMjYiLz48YmYgZ2k9IjAiIHVlPSI4MjI3IiB1cz0iODIyNyIvPjxiZiBnaT0iMCIgdWU9IjgyMjgiIHVzPSI4MjI4Ii8+PGJmIGdpPSIwIiB1ZT0iODIyOSIgdXM9IjgyMjkiLz48YmYgZ2k9IjE3MSIgdWU9IjgyMzAiIHVzPSI4MjMwIi8+PGJmIGdpPSIxOTgiIHVlPSI4MjQwIiB1cz0iODI0MCIvPjxiZiBnaT0iMTkwIiB1ZT0iODI1MCIgdXM9IjgyNDkiLz48YmYgZ2k9IjI1OCIgdWU9IjgzNjQiIHVzPSI4MzY0Ii8+PGJmIGdpPSIxNDAiIHVlPSI4NDgyIiB1cz0iODQ4MiIvPjxiZiBnaT0iMTUyIiB1ZT0iODcwNiIgdXM9Ijg3MDYiLz48YmYgZ2k9IjAiIHVlPSI4NzA3IiB1cz0iODcwNyIvPjxiZiBnaT0iMCIgdWU9Ijg3MDgiIHVzPSI4NzA4Ii8+PGJmIGdpPSIwIiB1ZT0iODcwOSIgdXM9Ijg3MDkiLz48YmYgZ2k9IjE2OCIgdWU9Ijg3MTAiIHVzPSI4NzEwIi8+PGJmIGdpPSIxNTQiIHVlPSI4NzE5IiB1cz0iODcxOSIvPjxiZiBnaT0iMCIgdWU9Ijg3MjAiIHVzPSI4NzIwIi8+PGJmIGdpPSIxNTMiIHVlPSI4NzIxIiB1cz0iODcyMSIvPjxiZiBnaT0iMjM4IiB1ZT0iODcyMiIgdXM9Ijg3MjIiLz48YmYgZ2k9IjAiIHVlPSI4NzIzIiB1cz0iODcyMyIvPjxiZiBnaT0iMCIgdWU9Ijg3MjQiIHVzPSI4NzI0Ii8+PGJmIGdpPSIxODgiIHVlPSI4NzI1IiB1cz0iODcyNSIvPjxiZiBnaT0iMCIgdWU9Ijg3MjYiIHVzPSI4NzI2Ii8+PGJmIGdpPSIwIiB1ZT0iODcyNyIgdXM9Ijg3MjciLz48YmYgZ2k9IjAiIHVlPSI4NzI4IiB1cz0iODcyOCIvPjxiZiBnaT0iMjU3IiB1ZT0iODcyOSIgdXM9Ijg3MjkiLz48YmYgZ2k9IjE2NSIgdWU9Ijg3MzAiIHVzPSI4NzMwIi8+PGJmIGdpPSIwIiB1ZT0iODczMSIgdXM9Ijg3MzEiLz48YmYgZ2k9IjAiIHVlPSI4NzMyIiB1cz0iODczMiIvPjxiZiBnaT0iMCIgdWU9Ijg3MzMiIHVzPSI4NzMzIi8+PGJmIGdpPSIxNDYiIHVlPSI4NzM0IiB1cz0iODczNCIvPjxiZiBnaT0iMTU2IiB1ZT0iODc0NyIgdXM9Ijg3NDciLz48YmYgZ2k9IjE2NyIgdWU9Ijg3NzYiIHVzPSI4Nzc2Ii8+PGJmIGdpPSIxNDMiIHVlPSI4ODAwIiB1cz0iODgwMCIvPjxiZiBnaT0iMCIgdWU9Ijg4MDEiIHVzPSI4ODAxIi8+PGJmIGdpPSIwIiB1ZT0iODgwMiIgdXM9Ijg4MDIiLz48YmYgZ2k9IjAiIHVlPSI4ODAzIiB1cz0iODgwMyIvPjxiZiBnaT0iMTQ4IiB1ZT0iODgwNSIgdXM9Ijg4MDQiLz48YmYgZ2k9IjE4NSIgdWU9Ijk2NzQiIHVzPSI5Njc0Ii8+PGJmIGdpPSIxOTIiIHVlPSI2NDI1OCIgdXM9IjY0MjU3Ii8+PGJmIGdpPSIwIiB1ZT0iNjU1MzUiIHVzPSI2NTUzNSIvPjwvYmZyYW5nZXM+PGNpZC13aWR0aHMgc3RhcnQtaW5kZXg9IjAiPjx3eCB3PSI2MDAiLz48d3ggdz0iMCIvPjx3eCB3PSIzMTciLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjQwMCIvPjx3eCB3PSI0NTkiLz48d3ggdz0iODM3Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI5NTAiLz48d3ggdz0iNzc5Ii8+PHd4IHc9IjI3NCIvPjx3eCB3PSIzOTAiLz48d3ggdz0iMzkwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI4MzciLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjM2MCIvPjx3eCB3PSIzMTciLz48d3ggdz0iMzM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSIzMzYiLz48d3ggdz0iMzM2Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI4MzciLz48d3ggdz0iODM3Ii8+PHd4IHc9IjUzMCIvPjx3eCB3PSIxMDAwIi8+PHd4IHc9IjY4NCIvPjx3eCB3PSI2ODYiLz48d3ggdz0iNjk4Ii8+PHd4IHc9Ijc3MCIvPjx3eCB3PSI2MzEiLz48d3ggdz0iNTc1Ii8+PHd4IHc9Ijc3NCIvPjx3eCB3PSI3NTEiLz48d3ggdz0iMjk0Ii8+PHd4IHc9IjI5NCIvPjx3eCB3PSI2NTUiLz48d3ggdz0iNTU3Ii8+PHd4IHc9Ijg2MiIvPjx3eCB3PSI3NDgiLz48d3ggdz0iNzg3Ii8+PHd4IHc9IjYwMyIvPjx3eCB3PSI3ODciLz48d3ggdz0iNjk0Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSI2MTAiLz48d3ggdz0iNzMxIi8+PHd4IHc9IjY4NCIvPjx3eCB3PSI5ODgiLz48d3ggdz0iNjg1Ii8+PHd4IHc9IjYxMCIvPjx3eCB3PSI2ODUiLz48d3ggdz0iMzkwIi8+PHd4IHc9IjMzNiIvPjx3eCB3PSIzOTAiLz48d3ggdz0iODM3Ii8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNjEyIi8+PHd4IHc9IjYzNCIvPjx3eCB3PSI1NDkiLz48d3ggdz0iNjM0Ii8+PHd4IHc9IjYxNSIvPjx3eCB3PSIzNTIiLz48d3ggdz0iNjM0Ii8+PHd4IHc9IjYzMyIvPjx3eCB3PSIyNzciLz48d3ggdz0iMjc3Ii8+PHd4IHc9IjU3OSIvPjx3eCB3PSIyNzciLz48d3ggdz0iOTc0Ii8+PHd4IHc9IjYzMyIvPjx3eCB3PSI2MTEiLz48d3ggdz0iNjM0Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSI0MTEiLz48d3ggdz0iNTIwIi8+PHd4IHc9IjM5MiIvPjx3eCB3PSI2MzMiLz48d3ggdz0iNTkxIi8+PHd4IHc9IjgxNyIvPjx3eCB3PSI1OTEiLz48d3ggdz0iNTkxIi8+PHd4IHc9IjUyNCIvPjx3eCB3PSI2MzYiLz48d3ggdz0iMzM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI4MzciLz48d3ggdz0iNjg0Ii8+PHd4IHc9IjY4NCIvPjx3eCB3PSI2OTgiLz48d3ggdz0iNjMxIi8+PHd4IHc9Ijc0OCIvPjx3eCB3PSI3ODciLz48d3ggdz0iNzMxIi8+PHd4IHc9IjYxMiIvPjx3eCB3PSI2MTIiLz48d3ggdz0iNjEyIi8+PHd4IHc9IjYxMiIvPjx3eCB3PSI2MTIiLz48d3ggdz0iNjEyIi8+PHd4IHc9IjU0OSIvPjx3eCB3PSI2MTUiLz48d3ggdz0iNjE1Ii8+PHd4IHc9IjYxNSIvPjx3eCB3PSI2MTUiLz48d3ggdz0iMjc3Ii8+PHd4IHc9IjI3NyIvPjx3eCB3PSIyNzciLz48d3ggdz0iMjc3Ii8+PHd4IHc9IjYzMyIvPjx3eCB3PSI2MTEiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYxMSIvPjx3eCB3PSI2MTEiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYzMyIvPjx3eCB3PSI2MzMiLz48d3ggdz0iNjMzIi8+PHd4IHc9IjYzMyIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjU4OSIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjI5Ii8+PHd4IHc9IjEwMDAiLz48d3ggdz0iMTAwMCIvPjx3eCB3PSIxMDAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iODM3Ii8+PHd4IHc9Ijk3NCIvPjx3eCB3PSI3ODciLz48d3ggdz0iODMzIi8+PHd4IHc9IjgzNyIvPjx3eCB3PSI4MzciLz48d3ggdz0iODM3Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNTE3Ii8+PHd4IHc9IjY3MyIvPjx3eCB3PSI3NTYiLz48d3ggdz0iNTg4Ii8+PHd4IHc9IjUyMCIvPjx3eCB3PSI0NzEiLz48d3ggdz0iNDcxIi8+PHd4IHc9Ijc2NCIvPjx3eCB3PSI5ODEiLz48d3ggdz0iNjExIi8+PHd4IHc9IjUzMCIvPjx3eCB3PSI0MDAiLz48d3ggdz0iODM3Ii8+PHd4IHc9IjYzNyIvPjx3eCB3PSI2MzYiLz48d3ggdz0iODM3Ii8+PHd4IHc9IjY2OCIvPjx3eCB3PSI2MTEiLz48d3ggdz0iNjExIi8+PHd4IHc9IjEwMDAiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjY4NCIvPjx3eCB3PSI2ODQiLz48d3ggdz0iNzg3Ii8+PHd4IHc9IjEwNjkiLz48d3ggdz0iMTAyMiIvPjx3eCB3PSI1MDAiLz48d3ggdz0iMTAwMCIvPjx3eCB3PSI1MTgiLz48d3ggdz0iNTE4Ii8+PHd4IHc9IjMxNyIvPjx3eCB3PSIzMTciLz48d3ggdz0iODM3Ii8+PHd4IHc9IjQ5NCIvPjx3eCB3PSI1OTEiLz48d3ggdz0iNjEwIi8+PHd4IHc9IjE2NiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iMzk5Ii8+PHd4IHc9IjM5OSIvPjx3eCB3PSI2MjkiLz48d3ggdz0iNjI5Ii8+PHd4IHc9IjUwMCIvPjx3eCB3PSIzMTciLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjUxOCIvPjx3eCB3PSIxMzQxIi8+PHd4IHc9IjY4NCIvPjx3eCB3PSI2MzEiLz48d3ggdz0iNjg0Ii8+PHd4IHc9IjYzMSIvPjx3eCB3PSI2MzEiLz48d3ggdz0iMjk0Ii8+PHd4IHc9IjI5NCIvPjx3eCB3PSIyOTQiLz48d3ggdz0iMjk0Ii8+PHd4IHc9Ijc4NyIvPjx3eCB3PSI3ODciLz48d3ggdz0iNzg3Ii8+PHd4IHc9IjczMSIvPjx3eCB3PSI3MzEiLz48d3ggdz0iNzMxIi8+PHd4IHc9IjI3NyIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTYyIi8+PHd4IHc9IjI4NCIvPjx3eCB3PSI2MzQiLz48d3ggdz0iNTIwIi8+PHd4IHc9IjY4NSIvPjx3eCB3PSI1MjQiLz48d3ggdz0iMzM2Ii8+PHd4IHc9Ijc3NCIvPjx3eCB3PSI2MTEiLz48d3ggdz0iNjEwIi8+PHd4IHc9IjU5MSIvPjx3eCB3PSI2MDQiLz48d3ggdz0iNjM0Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI4MzciLz48d3ggdz0iNDAwIi8+PHd4IHc9IjQwMCIvPjx3eCB3PSI0MDAiLz48d3ggdz0iOTY5Ii8+PHd4IHc9Ijk2OSIvPjx3eCB3PSI5NjkiLz48d3ggdz0iNzc0Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSIyOTQiLz48d3ggdz0iNjM0Ii8+PHd4IHc9IjUyMCIvPjx3eCB3PSI2OTgiLz48d3ggdz0iNTQ5Ii8+PHd4IHc9IjY5OCIvPjx3eCB3PSI1NDkiLz48d3ggdz0iNjM0Ii8+PHd4IHc9IjM2MCIvPjx3eCB3PSIzMTciLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjQwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PC9jaWQtd2lkdGhzPjwvbXVsdGlieXRlLWV4dHJhcz48a2VybmluZyBrcHgxPSIyNDYiPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjM1Ij48cGFpciBrZXJuPSItMTQyIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE0NiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI0MyI+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxNiI+PHBhaXIga2Vybj0iMzYiIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0xMTgiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iNTkiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTE4IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49IjM2IiBrcHgyPSI1MiIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSIzNiIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMTE4IiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49IjU1IiBrcHgyPSI0NSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iODkiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMzciLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMTIiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTIzIj48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iOTEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyNTEiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjEzIj48cGFpciBrZXJuPSItMTciIGtweDI9IjIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjA4Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTkiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTg3Ij48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDciLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTExOCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxMjkiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMTA5IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA2Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSI2OCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwOCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9Ijc2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMjAyIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyOCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA5Ii8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjExMCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjExMyI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxNDQiPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1OSI+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExNSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI3MyI+PHBhaXIga2Vybj0iMzEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjQxIj48cGFpciBrZXJuPSItMTciIGtweDI9IjIyNyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxMDciLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTQiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTA1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMjkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSI4NSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTA2Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTI3Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxMDgiLz48cGFpciBrZXJuPSItOTEiIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSI3NiIvPjxwYWlyIGtlcm49Ii0xNjAiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTA5Ii8+PHBhaXIga2Vybj0iLTE4MyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjQ5Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjEyNCI+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjkxIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTY5Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjM5Ii8+PHBhaXIga2Vybj0iNzMiIGtweDI9IjE0NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMDEiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTIzIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzEiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTgiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI2MCI+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xMTgiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTEwOSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDgiLz48cGFpciBrZXJuPSItNzciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTIwMiIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI4NSI+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgwIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcxIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMjUyIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI3MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTExIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3NSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSI5MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODEiLz48cGFpciBrZXJuPSI0MSIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNTEiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg0Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI0NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjYxIj48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIzNCI+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xMTgiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTEwOSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDgiLz48cGFpciBrZXJuPSItNzciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTIwMiIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMDAiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTIyIj48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iOTEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI0NyI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTA0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMjEzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0yMDIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjIxMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iMjIiIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTI2MiIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIyMTIiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMTA5IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjU2Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIxMCI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjU4Ij48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSI4NSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTA2Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iNzYiLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iODIiPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI5MSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTgxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE4NiI+PHBhaXIga2Vybj0iLTE0MiIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNDYiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTc1Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTkiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjA5Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTkiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTAzIj48cGFpciBrZXJuPSItMTciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTkiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iODEiPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI5OCI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xMjMiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjU0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI0MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTExIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iODkiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIxMiI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjYxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIyOSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIzOCI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMjEiPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI5MSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTgxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjU3Ij48cGFpciBrZXJuPSItNjciIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItODYiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItODEiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI2OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMDgiLz48cGFpciBrZXJuPSItNjMiIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI3NiIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTA5Ii8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIzNyI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI0MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI0OSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMjAiPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyNDkiPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iOTgiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjI3Ij48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9Ijk4Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjUxIj48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NiIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODEiLz48cGFpciBrZXJuPSItMjEiIGtweDI9Ijc2Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNTUiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTA5Ii8+PHBhaXIga2Vybj0iLTE2MCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIyOCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMDQiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI3MiI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxOTkiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTIzIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzEiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTgiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1NCI+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSI5OCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxODAiPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjQzIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTE4OCIga3B4Mj0iMTQ0Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjQxIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9Ijg1Ii8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjQ3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIyOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMzciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEyMCIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iNTEiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjUzIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMzciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIzMyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI1MiIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI0MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjM5Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIyMzYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjQ1Ii8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iODkiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjQ2Ii8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjUzIj48cGFpciBrZXJuPSItMjEiIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTA1Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItNDQiIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTI3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMDgiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEyOCIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMDkiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjExMCIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjEzNyI+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTgxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIzMyI+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTgxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjI1MyI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMTEiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI3OCI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDciLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA1Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA2Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTI3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDgiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjEyOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTIiPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMjUiPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI5MSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTgxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjQyIj48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE3MCI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTEwOSIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTEwOSIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTEwOSIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjM5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49Ii04NiIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjM3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTE1Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjkxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjkwIj48cGFpciBrZXJuPSItOTEiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTA0IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMzYiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTIzIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzEiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTgiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1NSI+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTE1NSIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iODYiLz48cGFpciBrZXJuPSItMTUxIiBrcHgyPSIxMjkiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTE0NiIga3B4Mj0iODUiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSI2OCIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTE1NSIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iMjUwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTExOCIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iMjI4Ii8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMjU0Ii8+PHBhaXIga2Vybj0iLTE1MSIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItMTUxIiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjExMSIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMTUxIiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSIxMDgiLz48cGFpciBrZXJuPSItMzAiIGtweDI9Ijc2Ii8+PHBhaXIga2Vybj0iLTE1MSIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSIxMDkiLz48cGFpciBrZXJuPSItMTU1IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjExMCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjExNCI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1MCI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjkxIj48cGFpciBrZXJuPSItMTciIGtweDI9IjI1NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTExIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzAiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMTUiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMzkiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIzNiI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjI5Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjQ1Ij48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTczIj48cGFpciBrZXJuPSItMTciIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iMjciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTEyMyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcxIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTk3Ij48cGFpciBrZXJuPSItMzUiIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI0MyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItMTgzIiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNDQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNDEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iODUiLz48cGFpciBrZXJuPSItMTgzIiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTgzIiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI0NyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0xMjMiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjgxIi8+PHBhaXIga2Vybj0iMTgiIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTE4MyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjM3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjUxIi8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNTMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEzNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjMzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjUyIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTk1IiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMzkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIzNiIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSI0NSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iODkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjQ2Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI5MiI+PHBhaXIga2Vybj0iLTE0MiIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNDYiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iODkiPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI0NiI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDciLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0xMDQiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIyMTMiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjIxMiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIxMDQiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjIxMSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItNDkiIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA5Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjU2Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE3NCI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xMjMiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjU0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI0MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTExIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iODkiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjU2Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjEiLz48L2tlcm5pbmc+PC9mb250LW1ldHJpY3M+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL1ZlcmFNb0JkLnR0ZiBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhTW9CZC50dGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlNjU0NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhTW9CZC50dGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL1ZlcmFNb0JkLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhTW9CZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIzMzEwNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhTW9CZC54bWwKQEAgLTAsMCArMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48Zm9udC1tZXRyaWNzIG1ldHJpY3MtdmVyc2lvbj0iMiIgdHlwZT0iVFlQRTAiPjxmb250LW5hbWU+Qml0c3RyZWFtVmVyYVNhbnNNb25vLUJvbGQ8L2ZvbnQtbmFtZT48ZnVsbC1uYW1lPkJpdHN0cmVhbSBWZXJhIFNhbnMgTW9ubyBCb2xkPC9mdWxsLW5hbWU+PGZhbWlseS1uYW1lPkJpdHN0cmVhbSBWZXJhIFNhbnMgTW9ubzwvZmFtaWx5LW5hbWU+PGVtYmVkLz48Y2FwLWhlaWdodD43Mjk8L2NhcC1oZWlnaHQ+PHgtaGVpZ2h0PjU0NjwveC1oZWlnaHQ+PGFzY2VuZGVyPjc1OTwvYXNjZW5kZXI+PGRlc2NlbmRlcj4tMjQwPC9kZXNjZW5kZXI+PGJib3g+PGxlZnQ+LTE5PC9sZWZ0Pjxib3R0b20+LTIzNTwvYm90dG9tPjxyaWdodD42MDU8L3JpZ2h0Pjx0b3A+OTI4PC90b3A+PC9iYm94PjxmbGFncz4zNDwvZmxhZ3M+PHN0ZW12PjA8L3N0ZW12PjxpdGFsaWNhbmdsZT4wPC9pdGFsaWNhbmdsZT48c3VidHlwZT5UWVBFMDwvc3VidHlwZT48bXVsdGlieXRlLWV4dHJhcz48Y2lkLXR5cGU+Q0lERm9udFR5cGUyPC9jaWQtdHlwZT48ZGVmYXVsdC13aWR0aD4wPC9kZWZhdWx0LXdpZHRoPjxiZnJhbmdlcz48YmYgZ2k9IjMiIHVlPSIxMjYiIHVzPSIzMiIvPjxiZiBnaT0iMTcyIiB1ZT0iMTYwIiB1cz0iMTYwIi8+PGJmIGdpPSIxNjMiIHVlPSIxNjEiIHVzPSIxNjEiLz48YmYgZ2k9IjEzMiIgdWU9IjE2MyIgdXM9IjE2MiIvPjxiZiBnaT0iMTg5IiB1ZT0iMTY0IiB1cz0iMTY0Ii8+PGJmIGdpPSIxNTAiIHVlPSIxNjUiIHVzPSIxNjUiLz48YmYgZ2k9IjIzMSIgdWU9IjE2NiIgdXM9IjE2NiIvPjxiZiBnaT0iMTM0IiB1ZT0iMTY3IiB1cz0iMTY3Ii8+PGJmIGdpPSIxNDIiIHVlPSIxNjgiIHVzPSIxNjgiLz48YmYgZ2k9IjEzOSIgdWU9IjE2OSIgdXM9IjE2OSIvPjxiZiBnaT0iMTU3IiB1ZT0iMTcwIiB1cz0iMTcwIi8+PGJmIGdpPSIxNjkiIHVlPSIxNzEiIHVzPSIxNzEiLz48YmYgZ2k9IjE2NCIgdWU9IjE3MiIgdXM9IjE3MiIvPjxiZiBnaT0iMjU2IiB1ZT0iMTczIiB1cz0iMTczIi8+PGJmIGdpPSIxMzgiIHVlPSIxNzQiIHVzPSIxNzQiLz48YmYgZ2k9IjIxNyIgdWU9IjE3NSIgdXM9IjE3NSIvPjxiZiBnaT0iMTMxIiB1ZT0iMTc2IiB1cz0iMTc2Ii8+PGJmIGdpPSIxNDciIHVlPSIxNzciIHVzPSIxNzciLz48YmYgZ2k9IjI0MSIgdWU9IjE3OSIgdXM9IjE3OCIvPjxiZiBnaT0iMTQxIiB1ZT0iMTgwIiB1cz0iMTgwIi8+PGJmIGdpPSIxNTEiIHVlPSIxODEiIHVzPSIxODEiLz48YmYgZ2k9IjEzNiIgdWU9IjE4MiIgdXM9IjE4MiIvPjxiZiBnaT0iMTk1IiB1ZT0iMTgzIiB1cz0iMTgzIi8+PGJmIGdpPSIyMjEiIHVlPSIxODQiIHVzPSIxODQiLz48YmYgZ2k9IjI0MCIgdWU9IjE4NSIgdXM9IjE4NSIvPjxiZiBnaT0iMTU4IiB1ZT0iMTg2IiB1cz0iMTg2Ii8+PGJmIGdpPSIxNzAiIHVlPSIxODciIHVzPSIxODciLz48YmYgZ2k9IjI0MyIgdWU9IjE5MCIgdXM9IjE4OCIvPjxiZiBnaT0iMTYyIiB1ZT0iMTkxIiB1cz0iMTkxIi8+PGJmIGdpPSIxNzMiIHVlPSIxOTIiIHVzPSIxOTIiLz48YmYgZ2k9IjIwMSIgdWU9IjE5MyIgdXM9IjE5MyIvPjxiZiBnaT0iMTk5IiB1ZT0iMTk0IiB1cz0iMTk0Ii8+PGJmIGdpPSIxNzQiIHVlPSIxOTUiIHVzPSIxOTUiLz48YmYgZ2k9Ijk4IiB1ZT0iMTk3IiB1cz0iMTk2Ii8+PGJmIGdpPSIxNDQiIHVlPSIxOTgiIHVzPSIxOTgiLz48YmYgZ2k9IjEwMCIgdWU9IjE5OSIgdXM9IjE5OSIvPjxiZiBnaT0iMjAzIiB1ZT0iMjAwIiB1cz0iMjAwIi8+PGJmIGdpPSIxMDEiIHVlPSIyMDEiIHVzPSIyMDEiLz48YmYgZ2k9IjIwMCIgdWU9IjIwMiIgdXM9IjIwMiIvPjxiZiBnaT0iMjAyIiB1ZT0iMjAzIiB1cz0iMjAzIi8+PGJmIGdpPSIyMDciIHVlPSIyMDQiIHVzPSIyMDQiLz48YmYgZ2k9IjIwNCIgdWU9IjIwNyIgdXM9IjIwNSIvPjxiZiBnaT0iMjMyIiB1ZT0iMjA4IiB1cz0iMjA4Ii8+PGJmIGdpPSIxMDIiIHVlPSIyMDkiIHVzPSIyMDkiLz48YmYgZ2k9IjIxMCIgdWU9IjIxMCIgdXM9IjIxMCIvPjxiZiBnaT0iMjA4IiB1ZT0iMjEyIiB1cz0iMjExIi8+PGJmIGdpPSIxNzUiIHVlPSIyMTMiIHVzPSIyMTMiLz48YmYgZ2k9IjEwMyIgdWU9IjIxNCIgdXM9IjIxNCIvPjxiZiBnaT0iMjM5IiB1ZT0iMjE1IiB1cz0iMjE1Ii8+PGJmIGdpPSIxNDUiIHVlPSIyMTYiIHVzPSIyMTYiLz48YmYgZ2k9IjIxMyIgdWU9IjIxNyIgdXM9IjIxNyIvPjxiZiBnaT0iMjExIiB1ZT0iMjE5IiB1cz0iMjE4Ii8+PGJmIGdpPSIxMDQiIHVlPSIyMjAiIHVzPSIyMjAiLz48YmYgZ2k9IjIzNCIgdWU9IjIyMSIgdXM9IjIyMSIvPjxiZiBnaT0iMjM2IiB1ZT0iMjIyIiB1cz0iMjIyIi8+PGJmIGdpPSIxMzciIHVlPSIyMjMiIHVzPSIyMjMiLz48YmYgZ2k9IjEwNiIgdWU9IjIyNCIgdXM9IjIyNCIvPjxiZiBnaT0iMTA1IiB1ZT0iMjI1IiB1cz0iMjI1Ii8+PGJmIGdpPSIxMDciIHVlPSIyMjYiIHVzPSIyMjYiLz48YmYgZ2k9IjEwOSIgdWU9IjIyNyIgdXM9IjIyNyIvPjxiZiBnaT0iMTA4IiB1ZT0iMjI4IiB1cz0iMjI4Ii8+PGJmIGdpPSIxMTAiIHVlPSIyMjkiIHVzPSIyMjkiLz48YmYgZ2k9IjE2MCIgdWU9IjIzMCIgdXM9IjIzMCIvPjxiZiBnaT0iMTExIiB1ZT0iMjMxIiB1cz0iMjMxIi8+PGJmIGdpPSIxMTMiIHVlPSIyMzIiIHVzPSIyMzIiLz48YmYgZ2k9IjExMiIgdWU9IjIzMyIgdXM9IjIzMyIvPjxiZiBnaT0iMTE0IiB1ZT0iMjM1IiB1cz0iMjM0Ii8+PGJmIGdpPSIxMTciIHVlPSIyMzYiIHVzPSIyMzYiLz48YmYgZ2k9IjExNiIgdWU9IjIzNyIgdXM9IjIzNyIvPjxiZiBnaT0iMTE4IiB1ZT0iMjM5IiB1cz0iMjM4Ii8+PGJmIGdpPSIyMzMiIHVlPSIyNDAiIHVzPSIyNDAiLz48YmYgZ2k9IjEyMCIgdWU9IjI0MSIgdXM9IjI0MSIvPjxiZiBnaT0iMTIyIiB1ZT0iMjQyIiB1cz0iMjQyIi8+PGJmIGdpPSIxMjEiIHVlPSIyNDMiIHVzPSIyNDMiLz48YmYgZ2k9IjEyMyIgdWU9IjI0NCIgdXM9IjI0NCIvPjxiZiBnaT0iMTI1IiB1ZT0iMjQ1IiB1cz0iMjQ1Ii8+PGJmIGdpPSIxMjQiIHVlPSIyNDYiIHVzPSIyNDYiLz48YmYgZ2k9IjE4NCIgdWU9IjI0NyIgdXM9IjI0NyIvPjxiZiBnaT0iMTYxIiB1ZT0iMjQ4IiB1cz0iMjQ4Ii8+PGJmIGdpPSIxMjciIHVlPSIyNDkiIHVzPSIyNDkiLz48YmYgZ2k9IjEyNiIgdWU9IjI1MCIgdXM9IjI1MCIvPjxiZiBnaT0iMTI4IiB1ZT0iMjUyIiB1cz0iMjUxIi8+PGJmIGdpPSIyMzUiIHVlPSIyNTMiIHVzPSIyNTMiLz48YmYgZ2k9IjIzNyIgdWU9IjI1NCIgdXM9IjI1NCIvPjxiZiBnaT0iMTg2IiB1ZT0iMjU1IiB1cz0iMjU1Ii8+PGJmIGdpPSIyNTEiIHVlPSIyNjMiIHVzPSIyNjIiLz48YmYgZ2k9IjI1MyIgdWU9IjI2OSIgdXM9IjI2OCIvPjxiZiBnaT0iMCIgdWU9IjI3MCIgdXM9IjI3MCIvPjxiZiBnaT0iMCIgdWU9IjI3MSIgdXM9IjI3MSIvPjxiZiBnaT0iMCIgdWU9IjI3MiIgdXM9IjI3MiIvPjxiZiBnaT0iMjU1IiB1ZT0iMjczIiB1cz0iMjczIi8+PGJmIGdpPSIyNDYiIHVlPSIyODciIHVzPSIyODYiLz48YmYgZ2k9IjI0OCIgdWU9IjMwNCIgdXM9IjMwNCIvPjxiZiBnaT0iMjE0IiB1ZT0iMzA1IiB1cz0iMzA1Ii8+PGJmIGdpPSIyMjUiIHVlPSIzMjIiIHVzPSIzMjEiLz48YmYgZ2k9IjE3NiIgdWU9IjMzOSIgdXM9IjMzOCIvPjxiZiBnaT0iMjQ5IiB1ZT0iMzUxIiB1cz0iMzUwIi8+PGJmIGdpPSIyMjciIHVlPSIzNTMiIHVzPSIzNTIiLz48YmYgZ2k9IjE4NyIgdWU9IjM3NiIgdXM9IjM3NiIvPjxiZiBnaT0iMjI5IiB1ZT0iMzgyIiB1cz0iMzgxIi8+PGJmIGdpPSIxNjYiIHVlPSI0MDIiIHVzPSI0MDIiLz48YmYgZ2k9IjIxNSIgdWU9IjcxMCIgdXM9IjcxMCIvPjxiZiBnaT0iMjI0IiB1ZT0iNzExIiB1cz0iNzExIi8+PGJmIGdpPSIyMTgiIHVlPSI3MzAiIHVzPSI3MjgiLz48YmYgZ2k9IjIyMyIgdWU9IjczMSIgdXM9IjczMSIvPjxiZiBnaT0iMjE2IiB1ZT0iNzMyIiB1cz0iNzMyIi8+PGJmIGdpPSIyMjIiIHVlPSI3MzMiIHVzPSI3MzMiLz48YmYgZ2k9IjE1OSIgdWU9IjkzNyIgdXM9IjkzNyIvPjxiZiBnaT0iMTU1IiB1ZT0iOTYwIiB1cz0iOTYwIi8+PGJmIGdpPSIxNzgiIHVlPSI4MjEyIiB1cz0iODIxMSIvPjxiZiBnaT0iMCIgdWU9IjgyMTMiIHVzPSI4MjEzIi8+PGJmIGdpPSIwIiB1ZT0iODIxNCIgdXM9IjgyMTQiLz48YmYgZ2k9IjAiIHVlPSI4MjE1IiB1cz0iODIxNSIvPjxiZiBnaT0iMTgyIiB1ZT0iODIxNyIgdXM9IjgyMTYiLz48YmYgZ2k9IjE5NiIgdWU9IjgyMTgiIHVzPSI4MjE4Ii8+PGJmIGdpPSIwIiB1ZT0iODIxOSIgdXM9IjgyMTkiLz48YmYgZ2k9IjE4MCIgdWU9IjgyMjEiIHVzPSI4MjIwIi8+PGJmIGdpPSIxOTciIHVlPSI4MjIyIiB1cz0iODIyMiIvPjxiZiBnaT0iMCIgdWU9IjgyMjMiIHVzPSI4MjIzIi8+PGJmIGdpPSIxMzAiIHVlPSI4MjI0IiB1cz0iODIyNCIvPjxiZiBnaT0iMTk0IiB1ZT0iODIyNSIgdXM9IjgyMjUiLz48YmYgZ2k9IjEzNSIgdWU9IjgyMjYiIHVzPSI4MjI2Ii8+PGJmIGdpPSIwIiB1ZT0iODIyNyIgdXM9IjgyMjciLz48YmYgZ2k9IjAiIHVlPSI4MjI4IiB1cz0iODIyOCIvPjxiZiBnaT0iMCIgdWU9IjgyMjkiIHVzPSI4MjI5Ii8+PGJmIGdpPSIxNzEiIHVlPSI4MjMwIiB1cz0iODIzMCIvPjxiZiBnaT0iMTk4IiB1ZT0iODI0MCIgdXM9IjgyNDAiLz48YmYgZ2k9IjE5MCIgdWU9IjgyNTAiIHVzPSI4MjQ5Ii8+PGJmIGdpPSIyNTgiIHVlPSI4MzY0IiB1cz0iODM2NCIvPjxiZiBnaT0iMTQwIiB1ZT0iODQ4MiIgdXM9Ijg0ODIiLz48YmYgZ2k9IjE1MiIgdWU9Ijg3MDYiIHVzPSI4NzA2Ii8+PGJmIGdpPSIwIiB1ZT0iODcwNyIgdXM9Ijg3MDciLz48YmYgZ2k9IjAiIHVlPSI4NzA4IiB1cz0iODcwOCIvPjxiZiBnaT0iMCIgdWU9Ijg3MDkiIHVzPSI4NzA5Ii8+PGJmIGdpPSIxNjgiIHVlPSI4NzEwIiB1cz0iODcxMCIvPjxiZiBnaT0iMTU0IiB1ZT0iODcxOSIgdXM9Ijg3MTkiLz48YmYgZ2k9IjAiIHVlPSI4NzIwIiB1cz0iODcyMCIvPjxiZiBnaT0iMTUzIiB1ZT0iODcyMSIgdXM9Ijg3MjEiLz48YmYgZ2k9IjIzOCIgdWU9Ijg3MjIiIHVzPSI4NzIyIi8+PGJmIGdpPSIwIiB1ZT0iODcyMyIgdXM9Ijg3MjMiLz48YmYgZ2k9IjAiIHVlPSI4NzI0IiB1cz0iODcyNCIvPjxiZiBnaT0iMTg4IiB1ZT0iODcyNSIgdXM9Ijg3MjUiLz48YmYgZ2k9IjAiIHVlPSI4NzI2IiB1cz0iODcyNiIvPjxiZiBnaT0iMCIgdWU9Ijg3MjciIHVzPSI4NzI3Ii8+PGJmIGdpPSIwIiB1ZT0iODcyOCIgdXM9Ijg3MjgiLz48YmYgZ2k9IjI1NyIgdWU9Ijg3MjkiIHVzPSI4NzI5Ii8+PGJmIGdpPSIxNjUiIHVlPSI4NzMwIiB1cz0iODczMCIvPjxiZiBnaT0iMCIgdWU9Ijg3MzEiIHVzPSI4NzMxIi8+PGJmIGdpPSIwIiB1ZT0iODczMiIgdXM9Ijg3MzIiLz48YmYgZ2k9IjAiIHVlPSI4NzMzIiB1cz0iODczMyIvPjxiZiBnaT0iMTQ2IiB1ZT0iODczNCIgdXM9Ijg3MzQiLz48YmYgZ2k9IjE1NiIgdWU9Ijg3NDciIHVzPSI4NzQ3Ii8+PGJmIGdpPSIxNjciIHVlPSI4Nzc2IiB1cz0iODc3NiIvPjxiZiBnaT0iMTQzIiB1ZT0iODgwMCIgdXM9Ijg4MDAiLz48YmYgZ2k9IjAiIHVlPSI4ODAxIiB1cz0iODgwMSIvPjxiZiBnaT0iMCIgdWU9Ijg4MDIiIHVzPSI4ODAyIi8+PGJmIGdpPSIwIiB1ZT0iODgwMyIgdXM9Ijg4MDMiLz48YmYgZ2k9IjE0OCIgdWU9Ijg4MDUiIHVzPSI4ODA0Ii8+PGJmIGdpPSIxODUiIHVlPSI5Njc0IiB1cz0iOTY3NCIvPjxiZiBnaT0iMTkyIiB1ZT0iNjQyNTgiIHVzPSI2NDI1NyIvPjxiZiBnaT0iMCIgdWU9IjY1NTM1IiB1cz0iNjU1MzUiLz48L2JmcmFuZ2VzPjxjaWQtd2lkdGhzIHN0YXJ0LWluZGV4PSIwIj48d3ggdz0iNjAyIi8+PHd4IHc9IjAiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48L2NpZC13aWR0aHM+PC9tdWx0aWJ5dGUtZXh0cmFzPjwvZm9udC1tZXRyaWNzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhTW9uby50dGYgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYU1vbm8udHRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzOWYwYjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYU1vbm8udHRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhTW9uby54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYU1vbm8ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMGE4NjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYU1vbm8ueG1sCkBAIC0wLDAgKzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PGZvbnQtbWV0cmljcyBtZXRyaWNzLXZlcnNpb249IjIiIHR5cGU9IlRZUEUwIj48Zm9udC1uYW1lPkJpdHN0cmVhbVZlcmFTYW5zTW9uby1Sb21hbjwvZm9udC1uYW1lPjxmdWxsLW5hbWU+Qml0c3RyZWFtIFZlcmEgU2FucyBNb25vPC9mdWxsLW5hbWU+PGZhbWlseS1uYW1lPkJpdHN0cmVhbSBWZXJhIFNhbnMgTW9ubzwvZmFtaWx5LW5hbWU+PGVtYmVkLz48Y2FwLWhlaWdodD43Mjk8L2NhcC1oZWlnaHQ+PHgtaGVpZ2h0PjU0NjwveC1oZWlnaHQ+PGFzY2VuZGVyPjc1OTwvYXNjZW5kZXI+PGRlc2NlbmRlcj4tMjQwPC9kZXNjZW5kZXI+PGJib3g+PGxlZnQ+LTQ8L2xlZnQ+PGJvdHRvbT4tMjM1PC9ib3R0b20+PHJpZ2h0PjYwNTwvcmlnaHQ+PHRvcD45Mjg8L3RvcD48L2Jib3g+PGZsYWdzPjM0PC9mbGFncz48c3RlbXY+MDwvc3RlbXY+PGl0YWxpY2FuZ2xlPjA8L2l0YWxpY2FuZ2xlPjxzdWJ0eXBlPlRZUEUwPC9zdWJ0eXBlPjxtdWx0aWJ5dGUtZXh0cmFzPjxjaWQtdHlwZT5DSURGb250VHlwZTI8L2NpZC10eXBlPjxkZWZhdWx0LXdpZHRoPjA8L2RlZmF1bHQtd2lkdGg+PGJmcmFuZ2VzPjxiZiBnaT0iMyIgdWU9IjEyNiIgdXM9IjMyIi8+PGJmIGdpPSIxNzIiIHVlPSIxNjAiIHVzPSIxNjAiLz48YmYgZ2k9IjE2MyIgdWU9IjE2MSIgdXM9IjE2MSIvPjxiZiBnaT0iMTMyIiB1ZT0iMTYzIiB1cz0iMTYyIi8+PGJmIGdpPSIxODkiIHVlPSIxNjQiIHVzPSIxNjQiLz48YmYgZ2k9IjE1MCIgdWU9IjE2NSIgdXM9IjE2NSIvPjxiZiBnaT0iMjMxIiB1ZT0iMTY2IiB1cz0iMTY2Ii8+PGJmIGdpPSIxMzQiIHVlPSIxNjciIHVzPSIxNjciLz48YmYgZ2k9IjE0MiIgdWU9IjE2OCIgdXM9IjE2OCIvPjxiZiBnaT0iMTM5IiB1ZT0iMTY5IiB1cz0iMTY5Ii8+PGJmIGdpPSIxNTciIHVlPSIxNzAiIHVzPSIxNzAiLz48YmYgZ2k9IjE2OSIgdWU9IjE3MSIgdXM9IjE3MSIvPjxiZiBnaT0iMTY0IiB1ZT0iMTcyIiB1cz0iMTcyIi8+PGJmIGdpPSIyNTYiIHVlPSIxNzMiIHVzPSIxNzMiLz48YmYgZ2k9IjEzOCIgdWU9IjE3NCIgdXM9IjE3NCIvPjxiZiBnaT0iMjE3IiB1ZT0iMTc1IiB1cz0iMTc1Ii8+PGJmIGdpPSIxMzEiIHVlPSIxNzYiIHVzPSIxNzYiLz48YmYgZ2k9IjE0NyIgdWU9IjE3NyIgdXM9IjE3NyIvPjxiZiBnaT0iMjQxIiB1ZT0iMTc5IiB1cz0iMTc4Ii8+PGJmIGdpPSIxNDEiIHVlPSIxODAiIHVzPSIxODAiLz48YmYgZ2k9IjE1MSIgdWU9IjE4MSIgdXM9IjE4MSIvPjxiZiBnaT0iMTM2IiB1ZT0iMTgyIiB1cz0iMTgyIi8+PGJmIGdpPSIxOTUiIHVlPSIxODMiIHVzPSIxODMiLz48YmYgZ2k9IjIyMSIgdWU9IjE4NCIgdXM9IjE4NCIvPjxiZiBnaT0iMjQwIiB1ZT0iMTg1IiB1cz0iMTg1Ii8+PGJmIGdpPSIxNTgiIHVlPSIxODYiIHVzPSIxODYiLz48YmYgZ2k9IjE3MCIgdWU9IjE4NyIgdXM9IjE4NyIvPjxiZiBnaT0iMjQzIiB1ZT0iMTkwIiB1cz0iMTg4Ii8+PGJmIGdpPSIxNjIiIHVlPSIxOTEiIHVzPSIxOTEiLz48YmYgZ2k9IjE3MyIgdWU9IjE5MiIgdXM9IjE5MiIvPjxiZiBnaT0iMjAxIiB1ZT0iMTkzIiB1cz0iMTkzIi8+PGJmIGdpPSIxOTkiIHVlPSIxOTQiIHVzPSIxOTQiLz48YmYgZ2k9IjE3NCIgdWU9IjE5NSIgdXM9IjE5NSIvPjxiZiBnaT0iOTgiIHVlPSIxOTciIHVzPSIxOTYiLz48YmYgZ2k9IjE0NCIgdWU9IjE5OCIgdXM9IjE5OCIvPjxiZiBnaT0iMTAwIiB1ZT0iMTk5IiB1cz0iMTk5Ii8+PGJmIGdpPSIyMDMiIHVlPSIyMDAiIHVzPSIyMDAiLz48YmYgZ2k9IjEwMSIgdWU9IjIwMSIgdXM9IjIwMSIvPjxiZiBnaT0iMjAwIiB1ZT0iMjAyIiB1cz0iMjAyIi8+PGJmIGdpPSIyMDIiIHVlPSIyMDMiIHVzPSIyMDMiLz48YmYgZ2k9IjIwNyIgdWU9IjIwNCIgdXM9IjIwNCIvPjxiZiBnaT0iMjA0IiB1ZT0iMjA3IiB1cz0iMjA1Ii8+PGJmIGdpPSIyMzIiIHVlPSIyMDgiIHVzPSIyMDgiLz48YmYgZ2k9IjEwMiIgdWU9IjIwOSIgdXM9IjIwOSIvPjxiZiBnaT0iMjEwIiB1ZT0iMjEwIiB1cz0iMjEwIi8+PGJmIGdpPSIyMDgiIHVlPSIyMTIiIHVzPSIyMTEiLz48YmYgZ2k9IjE3NSIgdWU9IjIxMyIgdXM9IjIxMyIvPjxiZiBnaT0iMTAzIiB1ZT0iMjE0IiB1cz0iMjE0Ii8+PGJmIGdpPSIyMzkiIHVlPSIyMTUiIHVzPSIyMTUiLz48YmYgZ2k9IjE0NSIgdWU9IjIxNiIgdXM9IjIxNiIvPjxiZiBnaT0iMjEzIiB1ZT0iMjE3IiB1cz0iMjE3Ii8+PGJmIGdpPSIyMTEiIHVlPSIyMTkiIHVzPSIyMTgiLz48YmYgZ2k9IjEwNCIgdWU9IjIyMCIgdXM9IjIyMCIvPjxiZiBnaT0iMjM0IiB1ZT0iMjIxIiB1cz0iMjIxIi8+PGJmIGdpPSIyMzYiIHVlPSIyMjIiIHVzPSIyMjIiLz48YmYgZ2k9IjEzNyIgdWU9IjIyMyIgdXM9IjIyMyIvPjxiZiBnaT0iMTA2IiB1ZT0iMjI0IiB1cz0iMjI0Ii8+PGJmIGdpPSIxMDUiIHVlPSIyMjUiIHVzPSIyMjUiLz48YmYgZ2k9IjEwNyIgdWU9IjIyNiIgdXM9IjIyNiIvPjxiZiBnaT0iMTA5IiB1ZT0iMjI3IiB1cz0iMjI3Ii8+PGJmIGdpPSIxMDgiIHVlPSIyMjgiIHVzPSIyMjgiLz48YmYgZ2k9IjExMCIgdWU9IjIyOSIgdXM9IjIyOSIvPjxiZiBnaT0iMTYwIiB1ZT0iMjMwIiB1cz0iMjMwIi8+PGJmIGdpPSIxMTEiIHVlPSIyMzEiIHVzPSIyMzEiLz48YmYgZ2k9IjExMyIgdWU9IjIzMiIgdXM9IjIzMiIvPjxiZiBnaT0iMTEyIiB1ZT0iMjMzIiB1cz0iMjMzIi8+PGJmIGdpPSIxMTQiIHVlPSIyMzUiIHVzPSIyMzQiLz48YmYgZ2k9IjExNyIgdWU9IjIzNiIgdXM9IjIzNiIvPjxiZiBnaT0iMTE2IiB1ZT0iMjM3IiB1cz0iMjM3Ii8+PGJmIGdpPSIxMTgiIHVlPSIyMzkiIHVzPSIyMzgiLz48YmYgZ2k9IjIzMyIgdWU9IjI0MCIgdXM9IjI0MCIvPjxiZiBnaT0iMTIwIiB1ZT0iMjQxIiB1cz0iMjQxIi8+PGJmIGdpPSIxMjIiIHVlPSIyNDIiIHVzPSIyNDIiLz48YmYgZ2k9IjEyMSIgdWU9IjI0MyIgdXM9IjI0MyIvPjxiZiBnaT0iMTIzIiB1ZT0iMjQ0IiB1cz0iMjQ0Ii8+PGJmIGdpPSIxMjUiIHVlPSIyNDUiIHVzPSIyNDUiLz48YmYgZ2k9IjEyNCIgdWU9IjI0NiIgdXM9IjI0NiIvPjxiZiBnaT0iMTg0IiB1ZT0iMjQ3IiB1cz0iMjQ3Ii8+PGJmIGdpPSIxNjEiIHVlPSIyNDgiIHVzPSIyNDgiLz48YmYgZ2k9IjEyNyIgdWU9IjI0OSIgdXM9IjI0OSIvPjxiZiBnaT0iMTI2IiB1ZT0iMjUwIiB1cz0iMjUwIi8+PGJmIGdpPSIxMjgiIHVlPSIyNTIiIHVzPSIyNTEiLz48YmYgZ2k9IjIzNSIgdWU9IjI1MyIgdXM9IjI1MyIvPjxiZiBnaT0iMjM3IiB1ZT0iMjU0IiB1cz0iMjU0Ii8+PGJmIGdpPSIxODYiIHVlPSIyNTUiIHVzPSIyNTUiLz48YmYgZ2k9IjI1MSIgdWU9IjI2MyIgdXM9IjI2MiIvPjxiZiBnaT0iMjUzIiB1ZT0iMjY5IiB1cz0iMjY4Ii8+PGJmIGdpPSIwIiB1ZT0iMjcwIiB1cz0iMjcwIi8+PGJmIGdpPSIwIiB1ZT0iMjcxIiB1cz0iMjcxIi8+PGJmIGdpPSIwIiB1ZT0iMjcyIiB1cz0iMjcyIi8+PGJmIGdpPSIyNTUiIHVlPSIyNzMiIHVzPSIyNzMiLz48YmYgZ2k9IjI0NiIgdWU9IjI4NyIgdXM9IjI4NiIvPjxiZiBnaT0iMjQ4IiB1ZT0iMzA0IiB1cz0iMzA0Ii8+PGJmIGdpPSIyMTQiIHVlPSIzMDUiIHVzPSIzMDUiLz48YmYgZ2k9IjIyNSIgdWU9IjMyMiIgdXM9IjMyMSIvPjxiZiBnaT0iMTc2IiB1ZT0iMzM5IiB1cz0iMzM4Ii8+PGJmIGdpPSIyNDkiIHVlPSIzNTEiIHVzPSIzNTAiLz48YmYgZ2k9IjIyNyIgdWU9IjM1MyIgdXM9IjM1MiIvPjxiZiBnaT0iMTg3IiB1ZT0iMzc2IiB1cz0iMzc2Ii8+PGJmIGdpPSIyMjkiIHVlPSIzODIiIHVzPSIzODEiLz48YmYgZ2k9IjE2NiIgdWU9IjQwMiIgdXM9IjQwMiIvPjxiZiBnaT0iMjE1IiB1ZT0iNzEwIiB1cz0iNzEwIi8+PGJmIGdpPSIyMjQiIHVlPSI3MTEiIHVzPSI3MTEiLz48YmYgZ2k9IjIxOCIgdWU9IjczMCIgdXM9IjcyOCIvPjxiZiBnaT0iMjIzIiB1ZT0iNzMxIiB1cz0iNzMxIi8+PGJmIGdpPSIyMTYiIHVlPSI3MzIiIHVzPSI3MzIiLz48YmYgZ2k9IjIyMiIgdWU9IjczMyIgdXM9IjczMyIvPjxiZiBnaT0iMTU5IiB1ZT0iOTM3IiB1cz0iOTM3Ii8+PGJmIGdpPSIxNTUiIHVlPSI5NjAiIHVzPSI5NjAiLz48YmYgZ2k9IjE3OCIgdWU9IjgyMTIiIHVzPSI4MjExIi8+PGJmIGdpPSIwIiB1ZT0iODIxMyIgdXM9IjgyMTMiLz48YmYgZ2k9IjAiIHVlPSI4MjE0IiB1cz0iODIxNCIvPjxiZiBnaT0iMCIgdWU9IjgyMTUiIHVzPSI4MjE1Ii8+PGJmIGdpPSIxODIiIHVlPSI4MjE3IiB1cz0iODIxNiIvPjxiZiBnaT0iMTk2IiB1ZT0iODIxOCIgdXM9IjgyMTgiLz48YmYgZ2k9IjAiIHVlPSI4MjE5IiB1cz0iODIxOSIvPjxiZiBnaT0iMTgwIiB1ZT0iODIyMSIgdXM9IjgyMjAiLz48YmYgZ2k9IjE5NyIgdWU9IjgyMjIiIHVzPSI4MjIyIi8+PGJmIGdpPSIwIiB1ZT0iODIyMyIgdXM9IjgyMjMiLz48YmYgZ2k9IjEzMCIgdWU9IjgyMjQiIHVzPSI4MjI0Ii8+PGJmIGdpPSIxOTQiIHVlPSI4MjI1IiB1cz0iODIyNSIvPjxiZiBnaT0iMTM1IiB1ZT0iODIyNiIgdXM9IjgyMjYiLz48YmYgZ2k9IjAiIHVlPSI4MjI3IiB1cz0iODIyNyIvPjxiZiBnaT0iMCIgdWU9IjgyMjgiIHVzPSI4MjI4Ii8+PGJmIGdpPSIwIiB1ZT0iODIyOSIgdXM9IjgyMjkiLz48YmYgZ2k9IjE3MSIgdWU9IjgyMzAiIHVzPSI4MjMwIi8+PGJmIGdpPSIxOTgiIHVlPSI4MjQwIiB1cz0iODI0MCIvPjxiZiBnaT0iMTkwIiB1ZT0iODI1MCIgdXM9IjgyNDkiLz48YmYgZ2k9IjI1OCIgdWU9IjgzNjQiIHVzPSI4MzY0Ii8+PGJmIGdpPSIxNDAiIHVlPSI4NDgyIiB1cz0iODQ4MiIvPjxiZiBnaT0iMTUyIiB1ZT0iODcwNiIgdXM9Ijg3MDYiLz48YmYgZ2k9IjAiIHVlPSI4NzA3IiB1cz0iODcwNyIvPjxiZiBnaT0iMCIgdWU9Ijg3MDgiIHVzPSI4NzA4Ii8+PGJmIGdpPSIwIiB1ZT0iODcwOSIgdXM9Ijg3MDkiLz48YmYgZ2k9IjE2OCIgdWU9Ijg3MTAiIHVzPSI4NzEwIi8+PGJmIGdpPSIxNTQiIHVlPSI4NzE5IiB1cz0iODcxOSIvPjxiZiBnaT0iMCIgdWU9Ijg3MjAiIHVzPSI4NzIwIi8+PGJmIGdpPSIxNTMiIHVlPSI4NzIxIiB1cz0iODcyMSIvPjxiZiBnaT0iMjM4IiB1ZT0iODcyMiIgdXM9Ijg3MjIiLz48YmYgZ2k9IjAiIHVlPSI4NzIzIiB1cz0iODcyMyIvPjxiZiBnaT0iMCIgdWU9Ijg3MjQiIHVzPSI4NzI0Ii8+PGJmIGdpPSIxODgiIHVlPSI4NzI1IiB1cz0iODcyNSIvPjxiZiBnaT0iMCIgdWU9Ijg3MjYiIHVzPSI4NzI2Ii8+PGJmIGdpPSIwIiB1ZT0iODcyNyIgdXM9Ijg3MjciLz48YmYgZ2k9IjAiIHVlPSI4NzI4IiB1cz0iODcyOCIvPjxiZiBnaT0iMjU3IiB1ZT0iODcyOSIgdXM9Ijg3MjkiLz48YmYgZ2k9IjE2NSIgdWU9Ijg3MzAiIHVzPSI4NzMwIi8+PGJmIGdpPSIwIiB1ZT0iODczMSIgdXM9Ijg3MzEiLz48YmYgZ2k9IjAiIHVlPSI4NzMyIiB1cz0iODczMiIvPjxiZiBnaT0iMCIgdWU9Ijg3MzMiIHVzPSI4NzMzIi8+PGJmIGdpPSIxNDYiIHVlPSI4NzM0IiB1cz0iODczNCIvPjxiZiBnaT0iMTU2IiB1ZT0iODc0NyIgdXM9Ijg3NDciLz48YmYgZ2k9IjE2NyIgdWU9Ijg3NzYiIHVzPSI4Nzc2Ii8+PGJmIGdpPSIxNDMiIHVlPSI4ODAwIiB1cz0iODgwMCIvPjxiZiBnaT0iMCIgdWU9Ijg4MDEiIHVzPSI4ODAxIi8+PGJmIGdpPSIwIiB1ZT0iODgwMiIgdXM9Ijg4MDIiLz48YmYgZ2k9IjAiIHVlPSI4ODAzIiB1cz0iODgwMyIvPjxiZiBnaT0iMTQ4IiB1ZT0iODgwNSIgdXM9Ijg4MDQiLz48YmYgZ2k9IjE4NSIgdWU9Ijk2NzQiIHVzPSI5Njc0Ii8+PGJmIGdpPSIxOTIiIHVlPSI2NDI1OCIgdXM9IjY0MjU3Ii8+PGJmIGdpPSIwIiB1ZT0iNjU1MzUiIHVzPSI2NTUzNSIvPjwvYmZyYW5nZXM+PGNpZC13aWR0aHMgc3RhcnQtaW5kZXg9IjAiPjx3eCB3PSI2MDIiLz48d3ggdz0iMCIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjwvY2lkLXdpZHRocz48L211bHRpYnl0ZS1leHRyYXM+PC9mb250LW1ldHJpY3M+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvY29tcG9uZW50LnRpdGxlLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTIxZDU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wKQEAgLTAsMCArMSwzOSBAQAorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgIHhtbG5zOmQ9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIgorICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIKKyAgZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXM9ImQiPgorCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0iY29tcG9uZW50LnRpdGxlIj4KKyAgICA8eHNsOnBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iLiIvPgorCisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJsZXZlbCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImFuY2VzdG9yOjpkOnNlY3Rpb24iPgorICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChhbmNlc3Rvcjo6ZDpzZWN0aW9uKSsxIi8+CisgICAgICAgIDwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJhbmNlc3Rvcjo6c2VjdDUiPjY8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iYW5jZXN0b3I6OnNlY3Q0Ij41PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImFuY2VzdG9yOjpzZWN0MyI+NDwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJhbmNlc3Rvcjo6c2VjdDIiPjM8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iYW5jZXN0b3I6OnNlY3QxIj4yPC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmVsZW1lbnQgbmFtZT0iaHskbGV2ZWwrMX0iIG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CisgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+dGl0bGU8L3hzbDphdHRyaWJ1dGU+CisgICAgICA8eHNsOmlmIHRlc3Q9IiRnZW5lcmF0ZS5pZC5hdHRyaWJ1dGVzID0gMCI+CisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhbmNob3IiPgorICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9IiRub2RlIi8+CisgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImNvbmRpdGlvbmFsIiBzZWxlY3Q9IjAiLz4KKyAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgIDwveHNsOmlmPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIkbm9kZSIgbW9kZT0ib2JqZWN0LnRpdGxlLm1hcmt1cCI+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJhbGxvdy1hbmNob3JzIiBzZWxlY3Q9IjEiLz4KKyAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwZXJtYWxpbmsiPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSIkbm9kZSIvPgorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8L3hzbDplbGVtZW50PgorICA8L3hzbDp0ZW1wbGF0ZT4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvZGl2aXNpb24udGl0bGUueHNsIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzI2NTk3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbApAQCAtMCwwICsxLDI0IEBACis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAgeG1sbnM6ZD0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgorICBleGNsdWRlLXJlc3VsdC1wcmVmaXhlcz0iZCI+CisgIAorICA8eHNsOnRlbXBsYXRlIG5hbWU9ImRpdmlzaW9uLnRpdGxlIj4KKyAgICA8eHNsOnBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iLiIvPgorICAgIAorICAgIDxoMT4KKyAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj50aXRsZTwveHNsOmF0dHJpYnV0ZT4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhbmNob3IiPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSIkbm9kZSIvPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iY29uZGl0aW9uYWwiIHNlbGVjdD0iMCIvPgorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iJG5vZGUiIG1vZGU9Im9iamVjdC50aXRsZS5tYXJrdXAiPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iYWxsb3ctYW5jaG9ycyIgc2VsZWN0PSIxIi8+CisgICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGVybWFsaW5rIj4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iJG5vZGUiLz4KKyAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPC9oMT4KKyAgPC94c2w6dGVtcGxhdGU+Cis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2RyYWZ0LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9kcmFmdC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMwNTFhOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9kcmFmdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2VtYmVkZGVkX3ZpZGVvLnhzbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9lbWJlZGRlZF92aWRlby54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZiMzNjMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9lbWJlZGRlZF92aWRlby54c2wKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiCisgICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAgIHhtbG5zOmQ9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIj4KKworICAgPHhzbDpvdXRwdXQgbWV0aG9kPSJodG1sIiAvPgorCisgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSIvZDpjaGFwdGVyL2Q6c2VjdGlvbi9kOm1lZGlhb2JqZWN0Ij4KKyAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIuIj4KKyAgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmlkX3VybCI+CisgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9kOnZpZGVvb2JqZWN0L2Q6dmlkZW9kYXRhL0BmaWxlcmVmIiAvPgorICAgICAgICAgPC94c2w6dmFyaWFibGU+CisgICAgICAgICA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbjogYXV0byI+CisgICAgICAgICAgICA8b2JqZWN0IHR5cGU9ImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIiB3aWR0aD0iNjQwIiBoZWlnaHQ9IjQyMCIgZGF0YT0ieyR2aWRfdXJsfT9jb2xvcjI9RkJFOUVDJmFtcDtzaG93c2VhcmNoPTAmYW1wO3ZlcnNpb249MyZhbXA7bW9kZXN0YnJhbmRpbmc9MSZhbXA7ZnM9MSI+CisgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibW92aWUiIHZhbHVlPSJ7JHZpZF91cmx9P2NvbG9yMj1GQkU5RUMmYW1wO3Nob3dzZWFyY2g9MCZhbXA7dmVyc2lvbj0zJmFtcDttb2Rlc3RicmFuZGluZz0xJmFtcDtmcz0xIiAvPgorICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFsbG93RnVsbFNjcmVlbiIgdmFsdWU9InRydWUiIC8+CisgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWxsb3dzY3JpcHRhY2Nlc3MiIHZhbHVlPSJhbHdheXMiIC8+CisgICAgICAgICAgICA8L29iamVjdD4KKyAgICAgICAgIDwvZGl2PgorICAgICAgPC94c2w6Zm9yLWVhY2g+CisgIDwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9mb3AtY29uZmlnLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9mb3AtY29uZmlnLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWNjNWNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2ZvcC1jb25maWcueG1sCkBAIC0wLDAgKzEsNTggQEAKKzxmb3AgdmVyc2lvbj0iMS4wIj4KKworICA8IS0tIFN0cmljdCB1c2VyIGNvbmZpZ3VyYXRpb24gLS0+CisgIDxzdHJpY3QtY29uZmlndXJhdGlvbj50cnVlPC9zdHJpY3QtY29uZmlndXJhdGlvbj4KKworICA8IS0tIFN0cmljdCBGTyB2YWxpZGF0aW9uIC0tPgorICA8c3RyaWN0LXZhbGlkYXRpb24+dHJ1ZTwvc3RyaWN0LXZhbGlkYXRpb24+CisKKyAgIDwhLS0KKyAgICBTZXQgdGhlIGJhc2VEaXIgc28gY29tbW9uL29wZW5lZGhhbmQuc3ZnIHJlZmVyZW5jZXMgaW4gcGxhbnMgc3RpbGwKKyAgICB3b3JrIG9rLiBOb3RlLCByZWxhdGl2ZSBmaWxlIHJlZmVyZW5jZXMgdG8gY3VycmVudCBkaXIgc2hvdWxkIHN0aWxsIHdvcmsuCisgICAgLS0+CQorICA8YmFzZT4uLi90ZW1wbGF0ZTwvYmFzZT4KKyAgPGZvbnQtYmFzZT4uLi90ZW1wbGF0ZTwvZm9udC1iYXNlPgorIAorICA8IS0tIFNvdXJjZSByZXNvbHV0aW9uIGluIGRwaSAoZG90cy9waXhlbHMgcGVyIGluY2gpIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICAgICBzaXplIG9mIHBpeGVscyBpbiBTVkcgYW5kIGJpdG1hcCBpbWFnZXMsIGRlZmF1bHQ6IDcyZHBpIC0tPgorICA8IS0tIDxzb3VyY2UtcmVzb2x1dGlvbj43Mjwvc291cmNlLXJlc29sdXRpb24+IC0tPgorICA8IS0tIFRhcmdldCByZXNvbHV0aW9uIGluIGRwaSAoZG90cy9waXhlbHMgcGVyIGluY2gpIGZvciBzcGVjaWZ5aW5nIHRoZQorICAgICAgIHRhcmdldCByZXNvbHV0aW9uIGZvciBnZW5lcmF0ZWQgYml0bWFwcywgZGVmYXVsdDogNzJkcGkgLS0+CisgIDwhLS0gPHRhcmdldC1yZXNvbHV0aW9uPjcyPC90YXJnZXQtcmVzb2x1dGlvbj4gLS0+CisgCisgIDwhLS0gZGVmYXVsdCBwYWdlLWhlaWdodCBhbmQgcGFnZS13aWR0aCwgaW4gY2FzZQorICAgICAgIHZhbHVlIGlzIHNwZWNpZmllZCBhcyBhdXRvIC0tPgorICA8ZGVmYXVsdC1wYWdlLXNldHRpbmdzIGhlaWdodD0iMTFpbiIgd2lkdGg9IjguMjZpbiIvPiAKKyAKKyAgPCEtLSA8dXNlLWNhY2hlPmZhbHNlPC91c2UtY2FjaGU+IC0tPgorIAorICA8cmVuZGVyZXJzPgorICAgIDxyZW5kZXJlciBtaW1lPSJhcHBsaWNhdGlvbi9wZGYiPgorICAgICAgPGZvbnRzPgorICAgICAgICA8Zm9udCAgbWV0cmljcy1maWxlPSJWZXJhTW9uby54bWwiCisgICAgICAgICAgICAgICBrZXJuaW5nPSJ5ZXMiIAorICAgICAgICAgICAgICAgZW1iZWQtdXJsPSJWZXJhTW9uby50dGYiPgorICAgICAgICAgIDxmb250LXRyaXBsZXQgbmFtZT0idmVyYW1vbm8iIHN0eWxlPSJub3JtYWwiIHdlaWdodD0ibm9ybWFsIi8+CisgICAgICAgIDwvZm9udD4KKworICAgICAgICA8Zm9udCAgbWV0cmljcy1maWxlPSJWZXJhTW9CZC54bWwiCisgICAgICAgICAgICAgICBrZXJuaW5nPSJ5ZXMiIAorICAgICAgICAgICAgICAgZW1iZWQtdXJsPSJWZXJhTW9CZC50dGYiPgorICAgICAgICAgIDxmb250LXRyaXBsZXQgbmFtZT0idmVyYW1vbm8iIHN0eWxlPSJub3JtYWwiIHdlaWdodD0iYm9sZCIvPgorICAgICAgICA8L2ZvbnQ+CisKKyAgICAgICAgPGZvbnQgIG1ldHJpY3MtZmlsZT0iVmVyYS54bWwiCisgICAgICAgICAgICAgICBrZXJuaW5nPSJ5ZXMiIAorICAgICAgICAgICAgICAgZW1iZWQtdXJsPSJWZXJhLnR0ZiI+CisgICAgICAgICAgPGZvbnQtdHJpcGxldCBuYW1lPSJ2ZXJhc2FucyIgc3R5bGU9Im5vcm1hbCIgd2VpZ2h0PSJub3JtYWwiLz4KKyAgICAgICAgICA8Zm9udC10cmlwbGV0IG5hbWU9InZlcmFzYW5zIiBzdHlsZT0ibm9ybWFsIiB3ZWlnaHQ9ImJvbGQiLz4KKyAgICAgICAgICA8Zm9udC10cmlwbGV0IG5hbWU9InZlcmFzYW5zIiBzdHlsZT0iaXRhbGljIiB3ZWlnaHQ9Im5vcm1hbCIvPgorICAgICAgICAgIDxmb250LXRyaXBsZXQgbmFtZT0idmVyYXNhbnMiIHN0eWxlPSJpdGFsaWMiIHdlaWdodD0iYm9sZCIvPgorICAgICAgICA8L2ZvbnQ+CisgICAgICAgIAorICAgICAgICA8YXV0by1kZXRlY3QvPgorICAgICAgPC9mb250cz4KKyAgICA8L3JlbmRlcmVyPgorICA8L3JlbmRlcmVycz4KKzwvZm9wPgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9mb3JtYWwub2JqZWN0LmhlYWRpbmcueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNWU2OTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbApAQCAtMCwwICsxLDIxIEBACis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAgeG1sbnM6ZD0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgorICBleGNsdWRlLXJlc3VsdC1wcmVmaXhlcz0iZCI+CisgIAorICA8eHNsOnRlbXBsYXRlIG5hbWU9ImZvcm1hbC5vYmplY3QuaGVhZGluZyI+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJvYmplY3QiIHNlbGVjdD0iLiIvPgorICAgIDx4c2w6cGFyYW0gbmFtZT0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIkb2JqZWN0IiBtb2RlPSJvYmplY3QudGl0bGUubWFya3VwIj4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImFsbG93LWFuY2hvcnMiIHNlbGVjdD0iMSIvPgorICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICAgIDwveHNsOnBhcmFtPgorICAgIDxwIGNsYXNzPSJ0aXRsZSI+CisgICAgICA8Yj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdGl0bGUiLz48L2I+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGVybWFsaW5rIj4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iJG9iamVjdCIvPgorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8L3A+CisgIDwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9nbG9zcy1wZXJtYWxpbmtzLnhzbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9nbG9zcy1wZXJtYWxpbmtzLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmY1ODExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2dsb3NzLXBlcm1hbGlua3MueHNsCkBAIC0wLDAgKzEsMTQgQEAKKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiDQorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSINCisgIHhtbG5zOmQ9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIg0KKyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KKw0KKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZ2xvc3NlbnRyeS9nbG9zc3Rlcm0iPg0KKyAgICA8eHNsOmFwcGx5LWltcG9ydHMvPg0KKyAgICA8eHNsOmlmIHRlc3Q9IiRnZW5lcmF0ZS5wZXJtYWxpbmsgIT0gMCI+DQorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBlcm1hbGluayI+DQorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSIuLiIvPg0KKyAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+DQorICAgIDwveHNsOmlmPg0KKyAgPC94c2w6dGVtcGxhdGU+DQorPC94c2w6c3R5bGVzaGVldD4NCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvb2hhbmQtY29sb3Iuc3ZnIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL29oYW5kLWNvbG9yLnN2ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDJmZjljCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL29oYW5kLWNvbG9yLnN2ZwpAQCAtMCwwICsxLDE1MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4KKzxzdmcKKyAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKKyAgIHhtbG5zOmNjPSJodHRwOi8vd2ViLnJlc291cmNlLm9yZy9jYy8iCisgICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCisgICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgorICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgorICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgorICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCisgICB3aWR0aD0iMTQxLjE3OTk5IgorICAgaGVpZ2h0PSI1NS4zNCIKKyAgIGlkPSJzdmcyMjA3IgorICAgc29kaXBvZGk6dmVyc2lvbj0iMC4zMiIKKyAgIGlua3NjYXBlOnZlcnNpb249IjAuNDUiCisgICB2ZXJzaW9uPSIxLjAiCisgICBzb2RpcG9kaTpkb2NuYW1lPSJvaGFuZC1jb2xvci5zdmciCisgICBpbmtzY2FwZTpvdXRwdXRfZXh0ZW5zaW9uPSJvcmcuaW5rc2NhcGUub3V0cHV0LnN2Zy5pbmtzY2FwZSIKKyAgIHNvZGlwb2RpOmRvY2Jhc2U9Ii9ob21lL21hbGx1bS9Qcm9qZWN0cy9hZG1pbi9vaC1kb2MtdG9vbHMvY29tbW9uIgorICAgc29kaXBvZGk6bW9kaWZpZWQ9InRydWUiPgorICA8ZGVmcworICAgICBpZD0iZGVmczMiIC8+CisgIDxzb2RpcG9kaTpuYW1lZHZpZXcKKyAgICAgaWQ9ImJhc2UiCisgICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKKyAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCisgICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKKyAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKKyAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKKyAgICAgaW5rc2NhcGU6em9vbT0iMS4yIgorICAgICBpbmtzY2FwZTpjeD0iMTYwIgorICAgICBpbmtzY2FwZTpjeT0iMTQ2LjIxMTg5IgorICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0ibW0iCisgICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKKyAgICAgaGVpZ2h0PSI1NS4zNHB4IgorICAgICB3aWR0aD0iMTQxLjE4cHgiCisgICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iNzcyIgorICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI1ODEiCisgICAgIGlua3NjYXBlOndpbmRvdy14PSI1IgorICAgICBpbmtzY2FwZTp3aW5kb3cteT0iNDgiIC8+CisgIDxtZXRhZGF0YQorICAgICBpZD0ibWV0YWRhdGEyMjExIj4KKyAgICA8cmRmOlJERj4KKyAgICAgIDxjYzpXb3JrCisgICAgICAgICByZGY6YWJvdXQ9IiI+CisgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgorICAgICAgICA8ZGM6dHlwZQorICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgorICAgICAgPC9jYzpXb3JrPgorICAgIDwvcmRmOlJERj4KKyAgPC9tZXRhZGF0YT4KKyAgPGcKKyAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCisgICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCisgICAgIGlkPSJsYXllcjEiPgorICAgIDxnCisgICAgICAgaWQ9ImcyMDk0IgorICAgICAgIHN0eWxlPSJmaWxsOiM2ZDZkNzA7ZmlsbC1vcGFjaXR5OjEiCisgICAgICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSIvaG9tZS9tYWxsdW0vRGVza3RvcC9nMjEyNi5wbmciCisgICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjMxMi43MTg0MSIKKyAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMzEyLjcxODQxIgorICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNTk1NDc2NywwLDAsMC41OTU0NzY3LDMxLjc5MzA1OCwtMTguNDcxMDUyKSI+CisgICAgICA8ZworICAgICAgICAgaWQ9ImcxOSIKKyAgICAgICAgIHN0eWxlPSJmaWxsOiM2ZDZkNzA7ZmlsbC1vcGFjaXR5OjEiPgorICAgICAgICA8cGF0aAorICAgICAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgICBpZD0icGF0aDIxIgorICAgICAgICAgICBkPSJNIDQ4LjY5Myw1MC42MzMgQyA0MC4yODIsNTAuNjMzIDMzLjQzOSw1Ny40NzcgMzMuNDM5LDY1Ljg4OCBMIDMzLjQzOSw4MS4xNDIgTCA0MS4wNjYsODEuMTQyIEwgNDEuMDY2LDY1Ljg4OCBDIDQxLjA2Niw2MS42ODQgNDQuNDg2LDU4LjI2MSA0OC42OTIsNTguMjYxIEMgNTIuODk3LDU4LjI2MSA1Ni4zMiw2MS42ODQgNTYuMzIsNjUuODg4IEMgNTYuMzIsNzAuMDkzIDUyLjg5Nyw3My41MTYgNDguNjkyLDczLjUxNiBDIDQ1LjY3Nyw3My41MTYgNDMuMDY1LDcxLjc1NiA0MS44MjgsNjkuMjExIEwgNDEuODI4LDc5LjUwNCBDIDQzLjg5Miw4MC41NDkgNDYuMjI0LDgxLjE0MiA0OC42OTIsODEuMTQyIEMgNTcuMTAzLDgxLjE0MiA2My45NDcsNzQuMyA2My45NDcsNjUuODg4IEMgNjMuOTQ4LDU3LjQ3NyA1Ny4xMDQsNTAuNjMzIDQ4LjY5Myw1MC42MzMgeiAiIC8+CisgICAgICA8L2c+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9ImZpbGw6IzZkNmQ3MDtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgIGlkPSJwYXRoMjMiCisgICAgICAgICBkPSJNIDE4LjQ4Niw1MC41NTcgQyAyNi45NDIsNTAuNTU3IDMzLjgxOSw1Ny40MzUgMzMuODE5LDY1Ljg4OCBDIDMzLjgxOSw3NC4zNDQgMjYuOTQyLDgxLjIyMyAxOC40ODYsODEuMjIzIEMgMTAuMDMyLDgxLjIyMyAzLjE1Miw3NC4zNDQgMy4xNTIsNjUuODg4IEMgMy4xNTIsNTcuNDM1IDEwLjAzMiw1MC41NTcgMTguNDg2LDUwLjU1NyB6IE0gMTguNDg2LDczLjU1NiBDIDIyLjcxMyw3My41NTYgMjYuMTUzLDcwLjExOCAyNi4xNTMsNjUuODg4IEMgMjYuMTUzLDYxLjY2MSAyMi43MTMsNTguMjIyIDE4LjQ4Niw1OC4yMjIgQyAxNC4yNTgsNTguMjIyIDEwLjgxOSw2MS42NjEgMTAuODE5LDY1Ljg4OCBDIDEwLjgyLDcwLjExNyAxNC4yNTksNzMuNTU2IDE4LjQ4Niw3My41NTYgeiAiIC8+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9ImZpbGw6IzZkNmQ3MDtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgIGlkPSJwYXRoMjUiCisgICAgICAgICBkPSJNIDk0LjA3NCwxMDcuNDY1IEwgOTQuMDc0LDk2LjAxNiBDIDk0LjA3NCw4Ny42MDUgODcuMjMzLDgwLjc2MyA3OC44MjIsODAuNzYzIEMgNzAuNDEsODAuNzYzIDYzLjU2Nyw4Ny42MDUgNjMuNTY3LDk2LjAxNiBDIDYzLjU2NywxMDQuNDI3IDcwLjQxLDExMS4yNjkgNzguODIyLDExMS4yNjkgQyA4MS4yODksMTExLjI2OSA4My42MjEsMTEwLjY3NiA4NS42ODUsMTA5LjYzMSBMIDg1LjY4NSw5OS4zMzkgQyA4NC40NDgsMTAxLjg4NSA4MS44MzYsMTAzLjY0NCA3OC44MjIsMTAzLjY0NCBDIDc0LjYxNSwxMDMuNjQ0IDcxLjE5NCwxMDAuMjIxIDcxLjE5NCw5Ni4wMTYgQyA3MS4xOTQsOTEuODEgNzQuNjE1LDg4LjM4OCA3OC44MjIsODguMzg4IEMgODMuMDI2LDg4LjM4OCA4Ni40NDgsOTEuODEgODYuNDQ4LDk2LjAxNiBMIDg2LjQ0OCwxMDcuNDU2IEMgODYuNDQ4LDEwOS41NjIgODguMTU2LDExMS4yNjggOTAuMjYyLDExMS4yNjggQyA5Mi4zNjQsMTExLjI2OSA5NC4wNjgsMTA5LjU2NiA5NC4wNzQsMTA3LjQ2NSB6ICIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgaWQ9InBhdGgyNyIKKyAgICAgICAgIGQ9Ik0gMTI0LjE5Nyw5NS44MTQgQyAxMjQuMDg4LDg3LjQ5NiAxMTcuMjkzLDgwLjc2MiAxMDguOTQ5LDgwLjc2MiBDIDEwMC41OSw4MC43NjIgOTMuNzgzLDg3LjUyIDkzLjY5Nyw5NS44NTYgTCA5My42OTMsOTUuODU2IEwgOTMuNjk1LDEwNy40NTYgQyA5My42OTUsMTA5LjU2MiA5NS40MDIsMTExLjI2OCA5Ny41MDksMTExLjI2OCBDIDk5LjYxMSwxMTEuMjY4IDEwMS4zMTYsMTA5LjU2NiAxMDEuMzIxLDEwNy40NjQgTCAxMDEuMzIxLDk1Ljk5NCBMIDEwMS4zMjEsOTUuOTk0IEMgMTAxLjMzMyw5MS43OTggMTA0Ljc0Nyw4OC4zODggMTA4Ljk0OCw4OC4zODggQyAxMTMuMTQ3LDg4LjM4OCAxMTYuNTYzLDkxLjc5OCAxMTYuNTc1LDk1Ljk5NCBMIDExNi41NzUsMTA3LjQ1NiBDIDExNi41NzUsMTA5LjU2MiAxMTguMjgyLDExMS4yNjggMTIwLjM4NywxMTEuMjY4IEMgMTIyLjQ5MiwxMTEuMjY4IDEyNC4yMDEsMTA5LjU2MiAxMjQuMjAxLDEwNy40NTYgTCAxMjQuMjAxLDk1LjgxNCBMIDEyNC4xOTcsOTUuODE0IHogIiAvPgorICAgICAgPHBhdGgKKyAgICAgICAgIHN0eWxlPSJmaWxsOiM2ZDZkNzA7ZmlsbC1vcGFjaXR5OjEiCisgICAgICAgICBpZD0icGF0aDI5IgorICAgICAgICAgZD0iTSA2My45NDYsOTYuMDA1IEwgNjMuOTQ2LDk1Ljg1NCBMIDYzLjk0Myw5NS44NTQgTCA2My45NDMsOTUuODE1IEwgNjMuOTQyLDk1LjgxNSBDIDYzLjgzMyw4Ny40OTcgNTcuMDM3LDgwLjc2MSA0OC42OTMsODAuNzYxIEMgNDguNjgyLDgwLjc2MSA0OC42NzEsODAuNzYzIDQ4LjY1OCw4MC43NjMgQyA0OC4zODIsODAuNzYzIDQ4LjEwNyw4MC43NzIgNDcuODMzLDgwLjc4NiBDIDQ3Ljc1LDgwLjc5MSA0Ny42NjgsODAuNzk5IDQ3LjU4Niw4MC44MDYgQyA0Ny4zNzgsODAuODIyIDQ3LjE3Miw4MC44MzggNDYuOTY4LDgwLjg2MiBDIDQ2Ljg4NCw4MC44NzMgNDYuODAxLDgwLjg4MiA0Ni43MTksODAuODkzIEMgNDYuNTA4LDgwLjkyIDQ2LjI5OCw4MC45NTIgNDYuMDkxLDgwLjk4NyBDIDQ2LjAyNCw4MC45OTkgNDUuOTU4LDgxLjAxIDQ1Ljg5MSw4MS4wMjQgQyA0NS42NDksODEuMDY4IDQ1LjQwNiw4MS4xMTkgNDUuMTY4LDgxLjE3NSBDIDQ1LjE0LDgxLjE4MyA0NS4xMTIsODEuMTg5IDQ1LjA4NSw4MS4xOTUgQyA0My42NTYsODEuNTQyIDQyLjMwNiw4Mi4wOTIgNDEuMDY1LDgyLjgxMiBMIDQxLjA2NSw4MC43NjEgTCAzMy40MzgsODAuNzYxIEwgMzMuNDM4LDk1Ljg1NyBMIDMzLjQzNSw5NS44NTcgTCAzMy40MzUsMTA3LjQ1NyBDIDMzLjQzNSwxMDkuNTYzIDM1LjE0MiwxMTEuMjY5IDM3LjI0OCwxMTEuMjY5IEMgMzkuMDkzLDExMS4yNjkgNDAuNjMyLDEwOS45NTggNDAuOTg0LDEwOC4yMTcgQyA0MS4wMzYsMTA3Ljk2MyA0MS4wNjUsMTA3LjcwMiA0MS4wNjUsMTA3LjQzNSBMIDQxLjA2NSw5NS44NzMgQyA0MS4wODYsOTQuNzMyIDQxLjM1Nyw5My42NSA0MS44MjgsOTIuNjg1IEwgNDEuODI4LDkyLjY5MyBDIDQyLjU5OCw5MS4xMDYgNDMuOTA1LDg5LjgyNCA0NS41MTEsODkuMDg1IEMgNDUuNTE5LDg5LjA4IDQ1LjUyOSw4OS4wNzYgNDUuNTM2LDg5LjA3MyBDIDQ1Ljg0OSw4OC45MjggNDYuMTc0LDg4LjgwNyA0Ni41MDgsODguNzA3IEMgNDYuNTIzLDg4LjcwNCA0Ni41MzYsODguNjk5IDQ2LjU1LDg4LjY5NiBDIDQ2LjY5OSw4OC42NTEgNDYuODUsODguNjE0IDQ3LjAwNCw4OC41NzYgQyA0Ny4wMjUsODguNTc1IDQ3LjA0Niw4OC41NjcgNDcuMDY5LDg4LjU2MiBDIDQ3LjIzNCw4OC41MjcgNDcuNDAyLDg4LjQ5NSA0Ny41NzIsODguNDY5IEMgNDcuNTg2LDg4LjQ2OCA0Ny42LDg4LjQ2NiA0Ny42MTUsODguNDYzIEMgNDcuNzYzLDg4LjQ0MyA0Ny45MTYsODguNDI3IDQ4LjA2Nyw4OC40MTUgQyA0OC4xMDYsODguNDEgNDguMTQ1LDg4LjQwNyA0OC4xODYsODguNDA0IEMgNDguMzUyLDg4LjM5MyA0OC41Miw4OC4zODYgNDguNjkxLDg4LjM4NiBDIDUyLjg4OCw4OC4zODcgNTYuMzA0LDkxLjc5NyA1Ni4zMTYsOTUuOTkyIEwgNTYuMzE2LDEwNy40NTQgQyA1Ni4zMTYsMTA5LjU2IDU4LjAyMywxMTEuMjY2IDYwLjEzLDExMS4yNjYgQyA2MS45NzYsMTExLjI2NiA2My41MTYsMTA5Ljk1NCA2My44NjcsMTA4LjIxMSBDIDYzLjkxOSwxMDcuOTYzIDYzLjk0NiwxMDcuNzA2IDYzLjk0NiwxMDcuNDQyIEwgNjMuOTQ2LDk2LjAyNCBDIDYzLjk0Niw5Ni4wMjEgNjMuOTQ3LDk2LjAxOCA2My45NDcsOTYuMDE1IEMgNjMuOTQ4LDk2LjAxMSA2My45NDYsOTYuMDA4IDYzLjk0Niw5Ni4wMDUgeiAiIC8+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9ImZpbGw6IzZkNmQ3MDtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgIGlkPSJwYXRoMzEiCisgICAgICAgICBkPSJNIDE4MC42NDQsNTAuNjMzIEMgMTc4LjUzOSw1MC42MzMgMTc2LjgzMiw1Mi4zNDEgMTc2LjgzMiw1NC40NDcgTCAxNzYuODMyLDY1Ljg4NyBDIDE3Ni44MzIsNzAuMDkyIDE3My40MSw3My41MTMgMTY5LjIwMyw3My41MTMgQyAxNjQuOTk4LDczLjUxMyAxNjEuNTc2LDcwLjA5MiAxNjEuNTc2LDY1Ljg4NyBDIDE2MS41NzYsNjEuNjgzIDE2NC45OTgsNTguMjYgMTY5LjIwMyw1OC4yNiBDIDE3Mi4yMTksNTguMjYgMTc0LjgzLDYwLjAxOSAxNzYuMDY4LDYyLjU2NSBMIDE3Ni4wNjgsNTIuMjcxIEMgMTc0LjAwNCw1MS4yMjUgMTcxLjY3Myw1MC42MzIgMTY5LjIwMyw1MC42MzIgQyAxNjAuNzkzLDUwLjYzMiAxNTMuOTUxLDU3LjQ3NiAxNTMuOTUxLDY1Ljg4NyBDIDE1My45NTEsNzQuMjk4IDE2MC43OTMsODEuMTQxIDE2OS4yMDMsODEuMTQxIEMgMTc3LjYxNSw4MS4xNDEgMTg0LjQ1OSw3NC4yOTggMTg0LjQ1OSw2NS44ODcgTCAxODQuNDU5LDU0LjQ0NyBDIDE4NC40NTgsNTIuMzQxIDE4Mi43NTEsNTAuNjMzIDE4MC42NDQsNTAuNjMzIHogIiAvPgorICAgICAgPHBhdGgKKyAgICAgICAgIHN0eWxlPSJmaWxsOiM2ZDZkNzA7ZmlsbC1vcGFjaXR5OjEiCisgICAgICAgICBpZD0icGF0aDMzIgorICAgICAgICAgZD0iTSAxMjQuMjAzLDc3LjMzOSBMIDEyNC4yMDMsNjUuNjg3IEwgMTI0LjE5Nyw2NS42ODcgQyAxMjQuMDg4LDU3LjM3MSAxMTcuMjkzLDUwLjYzMyAxMDguOTQ5LDUwLjYzMyBDIDEwMC41OTIsNTAuNjMzIDkzLjc4Myw1Ny4zOTMgOTMuNjk3LDY1LjczMSBMIDkzLjY5NSw2NS43MzEgTCA5My42OTUsNjUuODc3IEMgOTMuNjk1LDY1Ljg4MiA5My42OTMsNjUuODg1IDkzLjY5Myw2NS44ODggQyA5My42OTMsNjUuODkxIDkzLjY5NSw2NS44OTYgOTMuNjk1LDY1Ljg5OSBMIDkzLjY5NSw3Ny4zMyBDIDkzLjY5NSw3OS40MzUgOTUuNDAyLDgxLjE0MiA5Ny41MDksODEuMTQyIEMgOTkuNjE0LDgxLjE0MiAxMDEuMzIxLDc5LjQzNSAxMDEuMzIxLDc3LjMzIEwgMTAxLjMyMSw2NS44NjggQyAxMDEuMzMzLDYxLjY3MiAxMDQuNzQ3LDU4LjI2MSAxMDguOTQ4LDU4LjI2MSBDIDExMy4xNDcsNTguMjYxIDExNi41NjMsNjEuNjcyIDExNi41NzUsNjUuODY4IEwgMTE2LjU3NSw2NS44NjggTCAxMTYuNTc1LDc3LjMyOSBDIDExNi41NzUsNzkuNDM0IDExOC4yODIsODEuMTQxIDEyMC4zODksODEuMTQxIEMgMTIyLjQ5Miw4MS4xNDIgMTI0LjE5Nyw3OS40NCAxMjQuMjAzLDc3LjMzOSB6ICIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgaWQ9InBhdGgzNSIKKyAgICAgICAgIGQ9Ik0gMTUwLjUxNyw4MC43NjEgQyAxNDguNDEsODAuNzYxIDE0Ni43MDMsODIuNDY5IDE0Ni43MDMsODQuNTc1IEwgMTQ2LjcwMyw5Ni4wMTUgQyAxNDYuNzAzLDEwMC4yMiAxNDMuMjgzLDEwMy42NDMgMTM5LjA3NiwxMDMuNjQzIEMgMTM0Ljg3MSwxMDMuNjQzIDEzMS40NDksMTAwLjIyIDEzMS40NDksOTYuMDE1IEMgMTMxLjQ0OSw5MS44MDggMTM0Ljg3MSw4OC4zODcgMTM5LjA3Niw4OC4zODcgQyAxNDIuMDkyLDg4LjM4NyAxNDQuNzAzLDkwLjE0NSAxNDUuOTQxLDkyLjY5MiBMIDE0NS45NDEsODIuMzk3IEMgMTQzLjg3NSw4MS4zNTMgMTQxLjU0NSw4MC43NiAxMzkuMDc2LDgwLjc2IEMgMTMwLjY2Niw4MC43NiAxMjMuODIyLDg3LjYwNCAxMjMuODIyLDk2LjAxNSBDIDEyMy44MjIsMTA0LjQyNiAxMzAuNjY2LDExMS4yNjggMTM5LjA3NiwxMTEuMjY4IEMgMTQ3LjQ4NiwxMTEuMjY4IDE1NC4zMywxMDQuNDI2IDE1NC4zMyw5Ni4wMTUgTCAxNTQuMzMsODQuNTc1IEMgMTU0LjMzLDgyLjQ2OSAxNTIuNjIzLDgwLjc2MSAxNTAuNTE3LDgwLjc2MSB6ICIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgaWQ9InBhdGgzNyIKKyAgICAgICAgIGQ9Ik0gODIuNjI1LDc3LjM0NSBDIDgyLjYyNSw3NS4yNDcgODAuOTIzLDczLjU0NyA3OC44MjYsNzMuNTQ3IEwgNzguODI2LDgxLjE0MiBDIDgwLjkyMiw4MS4xNDIgODIuNjI1LDc5LjQ0MiA4Mi42MjUsNzcuMzQ1IHogIiAvPgorICAgICAgPHBhdGgKKyAgICAgICAgIHN0eWxlPSJmaWxsOiM2ZDZkNzA7ZmlsbC1vcGFjaXR5OjEiCisgICAgICAgICBpZD0icGF0aDM5IgorICAgICAgICAgZD0iTSA5MC4yNTIsNjkuNjg1IEMgOTIuMzUsNjkuNjg1IDk0LjA0OCw2Ny45ODcgOTQuMDQ4LDY1Ljg4OCBMIDg2LjQ1Myw2NS44ODggQyA4Ni40NTMsNjcuOTg2IDg4LjE1NCw2OS42ODUgOTAuMjUyLDY5LjY4NSB6ICIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgaWQ9InBhdGg0MSIKKyAgICAgICAgIGQ9Ik0gOTMuODMyLDc3LjMyOSBDIDkzLjgzMiw3NS4yMjMgOTIuMTI1LDczLjUxNiA5MC4wMTgsNzMuNTE2IEwgNzguODI1LDczLjUxNiBDIDc0LjYxOSw3My41MTYgNzEuMTk5LDcwLjA5MyA3MS4xOTksNjUuODg4IEMgNzEuMTk5LDYxLjY4NCA3NC42MTksNTguMjYxIDc4LjgyNSw1OC4yNjEgQyA4My4wMzIsNTguMjYxIDg2LjQ1Myw2MS42ODQgODYuNDUzLDY1Ljg4OCBDIDg2LjQ1Myw2OC45MDQgODQuNjk0LDcxLjUxNCA4Mi4xNDksNzIuNzUyIEwgOTIuNDQyLDcyLjc1MiBDIDkzLjQ4OCw3MC42ODkgOTQuMDgsNjguMzU2IDk0LjA4LDY1Ljg4OCBDIDk0LjA4LDU3LjQ3NyA4Ny4yMzcsNTAuNjMzIDc4LjgyNiw1MC42MzMgQyA3MC40MTUsNTAuNjMzIDYzLjU3MSw1Ny40NzcgNjMuNTcxLDY1Ljg4OCBDIDYzLjU3MSw3NC4zIDcwLjQxNSw4MS4xNDIgNzguODI2LDgxLjE0MiBMIDkwLjAxOCw4MS4xNDIgQyA5Mi4xMjUsODEuMTQyIDkzLjgzMiw3OS40MzUgOTMuODMyLDc3LjMyOSB6ICIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgaWQ9InBhdGg0MyIKKyAgICAgICAgIGQ9Ik0gMTQyLjg2OSw3Ny4zNDUgQyAxNDIuODY5LDc1LjI0NyAxNDEuMTY4LDczLjU0NyAxMzkuMDcsNzMuNTQ3IEwgMTM5LjA3LDgxLjE0MiBDIDE0MS4xNjcsODEuMTQyIDE0Mi44NjksNzkuNDQyIDE0Mi44NjksNzcuMzQ1IHogIiAvPgorICAgICAgPHBhdGgKKyAgICAgICAgIHN0eWxlPSJmaWxsOiM2ZDZkNzA7ZmlsbC1vcGFjaXR5OjEiCisgICAgICAgICBpZD0icGF0aDQ1IgorICAgICAgICAgZD0iTSAxNTAuNDk2LDY5LjY4NSBDIDE1Mi41OTQsNjkuNjg1IDE1NC4yOTMsNjcuOTg3IDE1NC4yOTMsNjUuODg4IEwgMTQ2LjY5OSw2NS44ODggQyAxNDYuNjk5LDY3Ljk4NiAxNDguMzk4LDY5LjY4NSAxNTAuNDk2LDY5LjY4NSB6ICIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgaWQ9InBhdGg0NyIKKyAgICAgICAgIGQ9Ik0gMTU0LjA3Niw3Ny4zMjkgQyAxNTQuMDc2LDc1LjIyMyAxNTIuMzY3LDczLjUxNiAxNTAuMjYyLDczLjUxNiBMIDEzOS4wNyw3My41MTYgQyAxMzQuODY1LDczLjUxNiAxMzEuNDQzLDcwLjA5MyAxMzEuNDQzLDY1Ljg4OCBDIDEzMS40NDMsNjEuNjg0IDEzNC44NjUsNTguMjYxIDEzOS4wNyw1OC4yNjEgQyAxNDMuMjc1LDU4LjI2MSAxNDYuNjk5LDYxLjY4NCAxNDYuNjk5LDY1Ljg4OCBDIDE0Ni42OTksNjguOTA0IDE0NC45MzksNzEuNTE0IDE0Mi4zOTIsNzIuNzUyIEwgMTUyLjY4Nyw3Mi43NTIgQyAxNTMuNzMsNzAuNjg5IDE1NC4zMjQsNjguMzU2IDE1NC4zMjQsNjUuODg4IEMgMTU0LjMyNCw1Ny40NzcgMTQ3LjQ4LDUwLjYzMyAxMzkuMDcsNTAuNjMzIEMgMTMwLjY2LDUwLjYzMyAxMjMuODE2LDU3LjQ3NyAxMjMuODE2LDY1Ljg4OCBDIDEyMy44MTYsNzQuMyAxMzAuNjYsODEuMTQyIDEzOS4wNyw4MS4xNDIgTCAxNTAuMjYxLDgxLjE0MiBDIDE1Mi4zNjcsODEuMTQyIDE1NC4wNzYsNzkuNDM1IDE1NC4wNzYsNzcuMzI5IHogIiAvPgorICAgIDwvZz4KKyAgICA8ZworICAgICAgIGlkPSJnMjEyNiIKKyAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjc2Nzk1NjQsMCwwLDAuNzY3OTU2NCwtNjYuNTIwNjMxLDExLjQyOTAzKSIKKyAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iMzEyLjcxODQxIgorICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSIzMTIuNzE4NDEiCisgICAgICAgc3R5bGU9ImZpbGw6IzM1OTkyYTtmaWxsLW9wYWNpdHk6MSI+CisgICAgICA8ZworICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODYuMzM5NzUsNC4yMzk4NWUtMikiCisgICAgICAgICBzdHlsZT0iZmlsbDojMzU5OTJhO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgaWQ9ImcyMTE0Ij4KKyAgICAgICAgPGcKKyAgICAgICAgICAgc3R5bGU9ImZpbGw6IzM1OTkyYTtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgICAgaWQ9ImcyMTE2Ij4KKyAgICAgICAgICA8cGF0aAorICAgICAgICAgICAgIGlkPSJwYXRoMjExOCIKKyAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtODYuMzM5NzUsLTQuMjM5OTM0ZS0yKSIKKyAgICAgICAgICAgICBkPSJNIDg5Ljk2ODc1LDAuMDMxMjUgQyA4Ny45NjI3NDgsMC4wMzEyNTAwMDEgODYuMzQzNzUsMS42ODE1MDAxIDg2LjM0Mzc1LDMuNjg3NSBMIDg2LjM0Mzc1LDE3LjcxODc1IEwgODYuMzQzNzUsMTkuNjg3NSBMIDg2LjM0Mzc1LDI4LjkwNjI1IEMgODYuMzQzNzUyLDM5LjA2ODI1IDk0LjYxOTI1LDQ3LjM0Mzc1IDEwNC43ODEyNSw0Ny4zNDM3NSBMIDExMy4zNzUsNDcuMzQzNzUgTCAxMjMuMTg3NSw0Ny4zNDM3NSBMIDEyNy4xNTYyNSw0Ny4zNDM3NSBDIDEyOS4xNjMyNSw0Ny4zNDM3NDkgMTMwLjgxMjUsNDUuNzI0NzUgMTMwLjgxMjUsNDMuNzE4NzUgQyAxMzAuODEyNSw0MS43MTI3NSAxMjkuMTYzMjUsNDAuMDkzNzUgMTI3LjE1NjI1LDQwLjA5Mzc1IEwgMTIzLjE4NzUsNDAuMDkzNzUgTCAxMjMuMTg3NSwxOS42ODc1IEwgMTIzLjE4NzUsMTQuNjU2MjUgTCAxMjMuMTg3NSwzLjY4NzUgQyAxMjMuMTg3NSwxLjY4MTUgMTIxLjU2NzUsMC4wMzEyNSAxMTkuNTYyNSwwLjAzMTI1IEMgMTE3LjU1NTUsMC4wMzEyNTAwMDEgMTE1LjkzNzUsMS42ODE1MDAxIDExNS45Mzc1LDMuNjg3NSBMIDExNS45Mzc1LDE0LjI4MTI1IEMgMTE1LjExODUsMTMuNjU0MjUgMTE0LjI2Mjc1LDEzLjEwOSAxMTMuMzQzNzUsMTIuNjI1IEwgMTEzLjM0Mzc1LDMuNjg3NSBDIDExMy4zNDQ3NSwxLjY4MTUgMTExLjY5MjUsMC4wMzEyNSAxMDkuNjg3NSwwLjAzMTI1IEMgMTA3LjY4MjUsMC4wMzEyNTAwMDEgMTA2LjA2MjUsMS42ODE1MDAxIDEwNi4wNjI1LDMuNjg3NSBMIDEwNi4wNjI1LDEwLjU2MjUgQyAxMDUuNjMwNSwxMC41MzI1IDEwNS4yMjAyNSwxMC41IDEwNC43ODEyNSwxMC41IEMgMTA0LjM0MTI1LDEwLjUgMTAzLjkwMDc1LDEwLjUzMjUgMTAzLjQ2ODc1LDEwLjU2MjUgTCAxMDMuNDY4NzUsMy42ODc1IEMgMTAzLjQ2OTc1LDEuNjgxNSAxMDEuODQ5NzUsMC4wMzEyNSA5OS44NDM3NSwwLjAzMTI1IEMgOTcuODM3NzQ5LDAuMDMxMjUwMDAxIDk2LjIxODc1LDEuNjgxNTAwMSA5Ni4yMTg3NSwzLjY4NzUgTCA5Ni4yMTg3NSwxMi42MjUgQyA5NS4yOTk3NTQsMTMuMTA5IDk0LjQxMzc1LDEzLjY1NDI1IDkzLjU5Mzc1LDE0LjI4MTI1IEwgOTMuNTkzNzUsMy42ODc1IEMgOTMuNTk0NzUsMS42ODE1IDkxLjk3NDc1LDAuMDMxMjUgODkuOTY4NzUsMC4wMzEyNSB6IE0gMTA0Ljc4MTI1LDE0LjM0Mzc1IEMgMTEyLjgwODI1LDE0LjM0Mzc1IDExOS4zMTI1LDIwLjg3OTI1IDExOS4zMTI1LDI4LjkwNjI1IEMgMTE5LjMxMjUsMzYuOTMzMjUgMTEyLjgwODI1LDQzLjQ2ODc1IDEwNC43ODEyNSw0My40Njg3NSBDIDk2Ljc1NDI1NCw0My40Njg3NSA5MC4yMTg3NSwzNi45MzQyNSA5MC4yMTg3NSwyOC45MDYyNSBDIDkwLjIxODc1MiwyMC44NzgyNSA5Ni43NTMyNTMsMTQuMzQzNzUgMTA0Ljc4MTI1LDE0LjM0Mzc1IHogIgorICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiMzNTk5MmE7ZmlsbC1vcGFjaXR5OjEiIC8+CisgICAgICAgIDwvZz4KKyAgICAgIDwvZz4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0iZmlsbDojMzU5OTJhO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgaWQ9InBhdGgyMTIyIgorICAgICAgICAgZD0iTSAxMTIuMDQ4NzUsMjguOTEzMzk5IEMgMTEyLjA0ODc1LDI0Ljg5OTM5OSAxMDguNzgyNzUsMjEuNjM0Mzk5IDEwNC43Njk3NSwyMS42MzQzOTkgQyAxMDAuNzU2NzUsMjEuNjM0Mzk5IDk3LjQ5MDc1MywyNC45MDAzOTkgOTcuNDkwNzUzLDI4LjkxMzM5OSBDIDk3LjQ5MDc1MywzMi45MjYzOTkgMTAwLjc1Njc1LDM2LjE5MjM5OSAxMDQuNzY5NzUsMzYuMTkyMzk5IEMgMTA4Ljc4Mjc1LDM2LjE5MjM5OSAxMTIuMDQ4NzUsMzIuOTI3Mzk5IDExMi4wNDg3NSwyOC45MTMzOTkgeiAiIC8+CisgICAgPC9nPgorICA8L2c+Cis8L3N2Zz4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9wZXJtYWxpbmtzLnhzbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9wZXJtYWxpbmtzLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmExYzE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3Blcm1hbGlua3MueHNsCkBAIC0wLDAgKzEsMjUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIKKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUucGVybWFsaW5rIiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJwZXJtYWxpbmsudGV4dCI+wrY8L3hzbDpwYXJhbT4KKworICA8eHNsOnRlbXBsYXRlIG5hbWU9InBlcm1hbGluayI+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJub2RlIi8+CisKKyAgICA8eHNsOmlmIHRlc3Q9IiRnZW5lcmF0ZS5wZXJtYWxpbmsgIT0gJzAnIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJwZXJtYWxpbmsiPgorICAgICAgICA8YSBhbHQ9IlBlcm1hbGluayIgdGl0bGU9IlBlcm1hbGluayI+CisgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iaHJlZiI+CisgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iaHJlZi50YXJnZXQiPgorICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ib2JqZWN0IiAgc2VsZWN0PSIkbm9kZSIvPgorICAgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgICAgICA8L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgPHhzbDpjb3B5LW9mIHNlbGVjdD0iJHBlcm1hbGluay50ZXh0Ii8+CisgICAgICAgIDwvYT4KKyAgICAgIDwvc3Bhbj4KKyAgICA8L3hzbDppZj4KKyAgPC94c2w6dGVtcGxhdGU+Cis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3Bva3ktZGItcGRmLnhzbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9wb2t5LWRiLXBkZi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhhM2RmMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9wb2t5LWRiLXBkZi54c2wKQEAgLTAsMCArMSw2NCBAQAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWxuczpmbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvRm9ybWF0IiB2ZXJzaW9uPSIxLjAiPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC9jdXJyZW50L2ZvL2RvY2Jvb2sueHNsIiAvPgorCisgIDwhLS0gY2hlY2sgcHJvamVjdC1wbGFuLnNoIGZvciBob3cgdGhpcyBpcyBnZW5lcmF0ZWQsIG5lZWRlZCB0byB0d2VhaworICAgICAgIHRoZSBjb3ZlciBwYWdlCisgICAgLS0+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIvdG1wL3RpdGxlcGFnZS54c2wiLz4KKworICA8IS0tIFRvIGZvcmNlIGEgcGFnZSBicmVhayBpbiBkb2N1bWVudCwgaS5lIHBlciBzZWN0aW9uIGFkZCBhCisgICAgICA8P2hhcmQtcGFnZWJyZWFrPz4gdGFnLgorICAtLT4KKyA8eHNsOnRlbXBsYXRlIG1hdGNoPSJwcm9jZXNzaW5nLWluc3RydWN0aW9uKCdoYXJkLXBhZ2VicmVhaycpIj4KKyAgIDxmbzpibG9jayBicmVhay1iZWZvcmU9J3BhZ2UnIC8+CisgPC94c2w6dGVtcGxhdGU+CisKKyAgPCEtLUZpeCBmb3IgZGVmdWFsdCBpbmRlbnQgZ2V0dGluZyBUT0MgYWxsIHdpZXJkLi4KKyAgICAgIFNlZSBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL21sL2RvY2Jvb2stYXBwcy8yMDA1LXExL21zZzAwNDU1Lmh0bWwKKyAgICAgIEZJWE1FOiBtdXN0IGJlIGEgYmV0dGVyIGZpeAorICAgIC0tPgorICA8eHNsOnBhcmFtIG5hbWU9ImJvZHkuc3RhcnQuaW5kZW50IiBzZWxlY3Q9IicwJyIvPgorICA8IS0tPHhzbDpwYXJhbSBuYW1lPSJ0aXRsZS5tYXJnaW4ubGVmdCIgc2VsZWN0PSInMCciLz4tLT4KKworICA8IS0tIHN0b3AgbG9uZy1pc2ggaGVhZGVyIHRpdGxlcyBnZXR0aW5nIHdyYXBwZWQgLS0+CisgIDx4c2w6cGFyYW0gbmFtZT0iaGVhZGVyLmNvbHVtbi53aWR0aHMiPjEgMTAgMTwveHNsOnBhcmFtPgorCisgIDwhLS0gY3VzdG9taXNlIGhlYWRlcnMgYW5kIGZvb3RlcnMgYSBsaXR0bGUgLS0+CisKKyAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJoZWFkLnNlcC5ydWxlIj4KKyAgIDx4c2w6aWYgdGVzdD0iJGhlYWRlci5ydWxlICE9IDAiPgorICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJib3JkZXItYm90dG9tLXdpZHRoIj4wLjVwdDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iYm9yZGVyLWJvdHRvbS1zdHlsZSI+c29saWQ8L3hzbDphdHRyaWJ1dGU+CisgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImJvcmRlci1ib3R0b20tY29sb3IiPiM5OTk5OTk8L3hzbDphdHRyaWJ1dGU+CisgICA8L3hzbDppZj4KKyAgPC94c2w6dGVtcGxhdGU+CisKKyAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmb290LnNlcC5ydWxlIj4KKyAgICA8eHNsOmlmIHRlc3Q9IiRmb290ZXIucnVsZSAhPSAwIj4KKyAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iYm9yZGVyLXRvcC13aWR0aCI+MC41cHQ8L3hzbDphdHRyaWJ1dGU+CisgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImJvcmRlci10b3Atc3R5bGUiPnNvbGlkPC94c2w6YXR0cmlidXRlPgorICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJib3JkZXItdG9wLWNvbG9yIj4jOTk5OTk5PC94c2w6YXR0cmlidXRlPgorICAgIDwveHNsOmlmPgorICA8L3hzbDp0ZW1wbGF0ZT4KKworICA8eHNsOmF0dHJpYnV0ZS1zZXQgbmFtZT0iaGVhZGVyLmNvbnRlbnQucHJvcGVydGllcyI+CisgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY29sb3IiPiM5OTk5OTk8L3hzbDphdHRyaWJ1dGU+CisgIDwveHNsOmF0dHJpYnV0ZS1zZXQ+CisKKyAgPHhzbDphdHRyaWJ1dGUtc2V0IG5hbWU9ImZvb3Rlci5jb250ZW50LnByb3BlcnRpZXMiPgorICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNvbG9yIj4jOTk5OTk5PC94c2w6YXR0cmlidXRlPgorICA8L3hzbDphdHRyaWJ1dGUtc2V0PgorCisKKyAgPCEtLSBnZW5lcmFsIHNldHRpbmdzIC0tPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iZm9wMS5leHRlbnNpb25zIiBzZWxlY3Q9IjEiPjwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9InBhcGVyLnR5cGUiIHNlbGVjdD0iJ0E0JyI+PC94c2w6cGFyYW0+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5hdXRvbGFiZWwiIHNlbGVjdD0iMSI+PC94c2w6cGFyYW0+CisgIDx4c2w6cGFyYW0gbmFtZT0iYm9keS5mb250LmZhbWlseSIgc2VsZWN0PSIndmVyYXNhbnMnIj48L3hzbDpwYXJhbT4KKyAgPHhzbDpwYXJhbSBuYW1lPSJ0aXRsZS5mb250LmZhbWlseSIgc2VsZWN0PSIndmVyYXNhbnMnIj48L3hzbDpwYXJhbT4KKyAgPHhzbDpwYXJhbSBuYW1lPSJtb25vc3BhY2UuZm9udC5mYW1pbHkiIHNlbGVjdD0iJ3ZlcmFtb25vJyI+PC94c2w6cGFyYW0+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvcG9reS1yZWYtbWFudWFsLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9wb2t5LXJlZi1tYW51YWwucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwODVlZGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvcG9reS1yZWYtbWFudWFsLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvcG9reS5zdmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvcG9reS5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRlYTVlMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9wb2t5LnN2ZwpAQCAtMCwwICsxLDE2MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4KKzxzdmcKKyAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCisgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCisgICB2ZXJzaW9uPSIxLjAiCisgICB3aWR0aD0iMTU4LjU2MDc2IgorICAgaGVpZ2h0PSI3OS4yODQ0MjQiCisgICB2aWV3Qm94PSItNDAuOTgxIC05Mi41OTIgMzAwIDMwMCIKKyAgIGlkPSJzdmcyIgorICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+Cis8ZGVmcworICAgaWQ9ImRlZnM0Ij4KKzwvZGVmcz4KKzxwYXRoCisgICBkPSJNIC0zNi41ODUzNzksNTQuNDEyNTc2IEwgLTM2LjU4NTM3OSw1NC40MjEzMDUgTCAtMzYuNTgyNDY5LDU0LjQyMTMwNSBMIC0zNi41ODI0NjksNTQuMjQzODI5IEMgLTM2LjU3OTU2LDU0LjMwMjAxOCAtMzYuNTg1Mzc5LDU0LjM1NzI5NyAtMzYuNTg1Mzc5LDU0LjQxMjU3NiB6ICIKKyAgIHN0eWxlPSJmaWxsOiM2YWM3YmQiCisgICBpZD0icGF0aDYiIC8+Cis8ZworICAgdHJhbnNmb3JtPSJtYXRyaXgoMi45MDk0MTkzLDAsMCwyLjkwOTQxOTMsLTE3OS4wMzA1NSwtODYuNjI0NDM1KSIKKyAgIHN0eWxlPSJvcGFjaXR5OjAuNjUiCisgICBpZD0iZzgiPgorCTxnCisgICBpZD0iZzEwIj4KKwkJPHBhdGgKKyAgIGQ9Ik0gMjQuNDgyLDIzLjk5OCBMIDI0LjQ4MiwyMy45OTUgQyAxMC45NjEsMjMuOTk0IDAsMzQuOTU1IDAsNDguNDc2IEwgMC4wMDEsNDguNDc5IEwgMC4wMDEsNDguNDgyIEMgMC4wMDMsNjIuMDAxIDEwLjk2Miw3Mi45NiAyNC40ODIsNzIuOTYgTCAyNC40ODIsNzIuOTYgTCAwLDcyLjk2IEwgMCw5Ny40NDIgTCAwLjAwMyw5Ny40NDIgQyAxMy41MjMsOTcuNDQgMjQuNDgyLDg2LjQ4IDI0LjQ4Miw3Mi45NjEgTCAyNC40ODUsNzIuOTYxIEMgMzguMDA1LDcyLjk1OSA0OC45NjMsNjIgNDguOTYzLDQ4LjQ3OSBMIDQ4Ljk2Myw0OC40NzYgQyA0OC45NjIsMzQuOTU3IDM4LjAwMSwyMy45OTggMjQuNDgyLDIzLjk5OCB6IE0gMjQuNDgyLDUwLjkyOCBDIDIzLjEzLDUwLjkyOCAyMi4wMzQsNDkuODMyIDIyLjAzNCw0OC40OCBDIDIyLjAzNCw0Ny4xMjggMjMuMTMsNDYuMDMyIDI0LjQ4Miw0Ni4wMzIgQyAyNS44MzQsNDYuMDMyIDI2LjkzLDQ3LjEyOCAyNi45Myw0OC40OCBDIDI2LjkzLDQ5LjgzMiAyNS44MzQsNTAuOTI4IDI0LjQ4Miw1MC45MjggeiAiCisgICBzdHlsZT0iZmlsbDojZWY0MTJhIgorICAgaWQ9InBhdGgxMiIgLz4KKwk8L2c+Cis8L2c+Cis8ZworICAgdHJhbnNmb3JtPSJtYXRyaXgoMi45MDk0MTkzLDAsMCwyLjkwOTQxOTMsLTE3OS4wMzA1NSwtODYuNjI0NDM1KSIKKyAgIHN0eWxlPSJvcGFjaXR5OjAuNjUiCisgICBpZD0iZzE0Ij4KKwk8ZworICAgaWQ9ImcxNiI+CisJCTxwYXRoCisgICBkPSJNIDExOS45Niw0OC44NDIgQyAxMjAuMDI0LDQ3LjU0OCAxMjEuMDg2LDQ2LjUxNiAxMjIuMzk3LDQ2LjUxNiBDIDEyMy43MDcsNDYuNTE2IDEyNC43NjgsNDcuNTQ4IDEyNC44MzMsNDguODQzIEMgMTM3LjIxMSw0Ny42MiAxNDYuODc5LDM3LjE4MSAxNDYuODc5LDI0LjQ4MyBMIDEyMi4zOTcsMjQuNDgzIEMgMTIyLjM5NiwxMC45NjEgMTExLjQzNSwwIDk3LjkxNSwwIEwgOTcuOTE1LDI0LjQ4NSBDIDk3LjkxNywzNy4xODMgMTA3LjU4NCw0Ny42MTkgMTE5Ljk2LDQ4Ljg0MiB6IE0gMTI0LjgzMyw0OS4wODQgQyAxMjQuNzY5LDUwLjM3OSAxMjMuNzA3LDUxLjQxMSAxMjIuMzk3LDUxLjQxMSBMIDEyMi4zOTYsNTEuNDExIEwgMTIyLjM5Niw3My40NDQgTCAxNDYuODc4LDczLjQ0NCBMIDE0Ni44NzgsNzMuNDQxIEMgMTQ2Ljg3Niw2MC43NDUgMTM3LjIwOCw1MC4zMDggMTI0LjgzMyw0OS4wODQgeiBNIDExOS45NDksNDguOTYzIEwgOTcuOTE1LDQ4Ljk2MyBMIDk3LjkxNSw3My40NDIgTCA5Ny45MTUsNzMuNDQyIEMgMTEwLjYxMyw3My40NDIgMTIxLjA1Miw2My43NzQgMTIyLjI3NSw1MS4zOTkgQyAxMjAuOTgxLDUxLjMzNCAxMTkuOTQ5LDUwLjI3NCAxMTkuOTQ5LDQ4Ljk2MyB6ICIKKyAgIHN0eWxlPSJmaWxsOiNhOWM1NDIiCisgICBpZD0icGF0aDE4IiAvPgorCTwvZz4KKzwvZz4KKzxnCisgICB0cmFuc2Zvcm09Im1hdHJpeCgyLjkwOTQxOTMsMCwwLDIuOTA5NDE5MywtMTc5LjAzMDU1LC04Ni42MjQ0MzUpIgorICAgc3R5bGU9Im9wYWNpdHk6MC42NSIKKyAgIGlkPSJnMjAiPgorCTxnCisgICBpZD0iZzIyIj4KKwkJPHBhdGgKKyAgIGQ9Ik0gMTY4LjkxMiw0OC45NjcgQyAxNjguOTEyLDQ3LjY1NiAxNjkuOTQ1LDQ2LjU5NiAxNzEuMjQsNDYuNTMxIEMgMTcwLjAxOCwzNC4xNTIgMTU5LjU3OSwyNC40ODIgMTQ2Ljg3OSwyNC40ODIgTCAxNDYuODc5LDQ4Ljk2MyBDIDE0Ni44NzksNjIuNDg0IDE1Ny44NCw3My40NDQgMTcxLjM2MSw3My40NDQgTCAxNzEuMzYxLDUxLjQxNCBDIDE3MC4wMDcsNTEuNDE1IDE2OC45MTIsNTAuMzE5IDE2OC45MTIsNDguOTY3IHogTSAxOTUuODQxLDQ4Ljk3OCBDIDE5NS44NDEsNDguOTczIDE5NS44NDIsNDguOTY5IDE5NS44NDIsNDguOTY0IEwgMTk1Ljg0MiwyNC40ODIgTCAxOTUuODM4LDI0LjQ4MiBDIDE4My4xNCwyNC40ODQgMTcyLjcwMiwzNC4xNTQgMTcxLjQ4Miw0Ni41MzEgQyAxNzIuNzc2LDQ2LjU5NSAxNzMuODA4LDQ3LjY1NiAxNzMuODA4LDQ4Ljk2NyBDIDE3My44MDgsNTAuMjc4IDE3Mi43NzYsNTEuMzM5IDE3MS40ODEsNTEuNDAzIEMgMTcyLjY3OSw2My41OSAxODIuODE0LDczLjE0NiAxOTUuMjQ0LDczLjQ0NSBMIDE3MS4zNjEsNzMuNDQ1IEwgMTcxLjM2MSw5Ny45MjcgTCAxNzEuMzY0LDk3LjkyNyBDIDE4NC44NzksOTcuOTI1IDE5NS44MzQsODYuOTczIDE5NS44NDIsNzMuNDYgTCAxOTUuODQ0LDczLjQ2IEwgMTk1Ljg0NCw0OC45NzkgTCAxOTUuODQxLDQ4Ljk3OCB6IE0gMTk1LjgzMiw0OC45NjQgTCAxOTUuODQyLDQ4Ljk2NCBMIDE5NS44NDIsNDguOTc4IEwgMTk1LjgzMiw0OC45NjQgeiAiCisgICBzdHlsZT0iZmlsbDojZjljNzU5IgorICAgaWQ9InBhdGgyNCIgLz4KKwk8L2c+Cis8L2c+Cis8ZworICAgdHJhbnNmb3JtPSJtYXRyaXgoMi45MDk0MTkzLDAsMCwyLjkwOTQxOTMsLTE3OS4wMzA1NSwtODYuNjI0NDM1KSIKKyAgIHN0eWxlPSJvcGFjaXR5OjAuNjUiCisgICBpZD0iZzI2Ij4KKwk8ZworICAgaWQ9ImcyOCI+CisJCTxwYXRoCisgICBkPSJNIDcwLjk5NCw0OC40NzkgTCA0OC45NjIsNDguNDc5IEwgNDguOTYyLDQ4LjQ4MSBMIDcwLjk5NSw0OC40ODEgQyA3MC45OTUsNDguNDgxIDcwLjk5NCw0OC40OCA3MC45OTQsNDguNDc5IHogTSA3My40NCwyNC4wMDEgTCA3My40MzcsMjQuMDAxIEwgNzMuNDM3LDQ2LjAzMiBDIDczLjQzOSw0Ni4wMzIgNzMuNDQsNDYuMDMyIDczLjQ0Miw0Ni4wMzIgQyA3NC43OTQsNDYuMDMyIDc1Ljg5LDQ3LjEyOCA3NS44OSw0OC40OCBDIDc1Ljg5LDQ5LjgzMiA3NC43OTQsNTAuOTI4IDczLjQ0Miw1MC45MjggQyA3Mi4wOTEsNTAuOTI4IDcwLjk5Niw0OS44MzQgNzAuOTk0LDQ4LjQ4MyBMIDQ4Ljk1OCw0OC40ODMgTCA0OC45NTgsNDguNDg2IEMgNDguOTYsNjIuMDA1IDU5LjkxOSw3Mi45NjQgNzMuNDM3LDcyLjk2NCBDIDg2Ljk1NSw3Mi45NjQgOTcuOTE0LDYyLjAwNSA5Ny45MTYsNDguNDg2IEwgOTcuOTE2LDQ4LjQ4MyBDIDk3LjkxNiwzNC45NjMgODYuOTU4LDI0LjAwMyA3My40NCwyNC4wMDEgeiAiCisgICBzdHlsZT0iZmlsbDojNmFjN2JkIgorICAgaWQ9InBhdGgzMCIgLz4KKwk8L2c+Cis8L2c+Cis8ZworICAgdHJhbnNmb3JtPSJtYXRyaXgoMi45MDk0MTkzLDAsMCwyLjkwOTQxOTMsLTE3OS4wMzA1NSwtODYuNjI0NDM1KSIKKyAgIHN0eWxlPSJvcGFjaXR5OjAuNjUiCisgICBpZD0iZzMyIj4KKwk8ZworICAgaWQ9ImczNCI+CisJCTxwYXRoCisgICBkPSJNIDI0LjQ4MiwyMy45OTggTCAyNC40ODIsMjMuOTk1IEMgMTAuOTYxLDIzLjk5NCAwLDM0Ljk1NSAwLDQ4LjQ3NiBMIDIyLjAzNCw0OC40NzYgQyAyMi4wMzYsNDcuMTI1IDIzLjEzMSw0Ni4wMzEgMjQuNDgyLDQ2LjAzMSBDIDI1LjgzNCw0Ni4wMzEgMjYuOTMsNDcuMTI3IDI2LjkzLDQ4LjQ3OSBDIDI2LjkzLDQ5LjgzMSAyNS44MzQsNTAuOTI3IDI0LjQ4Miw1MC45MjcgTCAyNC40ODIsNzIuOTM3IEMgMjQuNDY5LDU5LjQyNyAxMy41MTQsNDguNDc5IDAsNDguNDc5IEwgMCw3Mi45NiBMIDI0LjQ4MSw3Mi45NiBMIDI0LjQ4MSw3Mi45NiBMIDAsNzIuOTYgTCAwLDk3LjQ0MiBMIDAuMDAzLDk3LjQ0MiBDIDEzLjUyMyw5Ny40NCAyNC40ODIsODYuNDggMjQuNDgyLDcyLjk2MSBMIDI0LjQ4NSw3Mi45NjEgQyAzOC4wMDUsNzIuOTU5IDQ4Ljk2Myw2MiA0OC45NjMsNDguNDc5IEwgNDguOTYzLDQ4LjQ3NiBDIDQ4Ljk2MiwzNC45NTcgMzguMDAxLDIzLjk5OCAyNC40ODIsMjMuOTk4IHogIgorICAgc3R5bGU9ImZpbGw6I2VmNDEyYSIKKyAgIGlkPSJwYXRoMzYiIC8+CisJPC9nPgorPC9nPgorPGcKKyAgIHRyYW5zZm9ybT0ibWF0cml4KDIuOTA5NDE5MywwLDAsMi45MDk0MTkzLC0xNzkuMDMwNTUsLTg2LjYyNDQzNSkiCisgICBzdHlsZT0ib3BhY2l0eTowLjY1IgorICAgaWQ9ImczOCI+CisJPGcKKyAgIGlkPSJnNDAiPgorCQk8cGF0aAorICAgZD0iTSAxMjIuMzk3LDQ2LjUxNiBDIDEyMy43MDcsNDYuNTE2IDEyNC43NjgsNDcuNTQ4IDEyNC44MzMsNDguODQzIEMgMTM3LjIxMSw0Ny42MiAxNDYuODc5LDM3LjE4MSAxNDYuODc5LDI0LjQ4MyBMIDEyMi4zOTcsMjQuNDgzIEwgMTIyLjM5Nyw0Ni41MTYgTCAxMjIuMzk3LDQ2LjUxNiB6IE0gOTcuOTE1LDAgTCA5Ny45MTUsMjQuNDgyIEwgMTIyLjM5NiwyNC40ODIgQyAxMjIuMzk2LDEwLjk2MSAxMTEuNDM1LDAgOTcuOTE1LDAgeiBNIDEyMi4yNzUsNDYuNTI4IEMgMTIxLjA1MiwzNC4xNTEgMTEwLjYxMywyNC40ODIgOTcuOTE0LDI0LjQ4MiBMIDk3LjkxNCw0OC45NjQgTCA5Ny45MTQsNDguOTY0IEwgOTcuOTE0LDczLjQ0MyBMIDk3LjkxNCw3My40NDMgQyAxMTAuNjEyLDczLjQ0MyAxMjEuMDUxLDYzLjc3NSAxMjIuMjc0LDUxLjQgQyAxMjAuOTgsNTEuMzM1IDExOS45NDgsNTAuMjc1IDExOS45NDgsNDguOTY0IEMgMTE5Ljk0OSw0Ny42NTMgMTIwLjk4LDQ2LjU5MyAxMjIuMjc1LDQ2LjUyOCB6IE0gMTI0LjgzMyw0OS4wODQgQyAxMjQuNzY5LDUwLjM3OSAxMjMuNzA3LDUxLjQxMSAxMjIuMzk3LDUxLjQxMSBMIDEyMi4zOTYsNTEuNDExIEwgMTIyLjM5Niw3My40NDQgTCAxNDYuODc4LDczLjQ0NCBMIDE0Ni44NzgsNzMuNDQxIEMgMTQ2Ljg3Niw2MC43NDUgMTM3LjIwOCw1MC4zMDggMTI0LjgzMyw0OS4wODQgeiAiCisgICBzdHlsZT0iZmlsbDojYTljNTQyIgorICAgaWQ9InBhdGg0MiIgLz4KKwk8L2c+Cis8L2c+Cis8ZworICAgdHJhbnNmb3JtPSJtYXRyaXgoMi45MDk0MTkzLDAsMCwyLjkwOTQxOTMsLTE3OS4wMzA1NSwtODYuNjI0NDM1KSIKKyAgIHN0eWxlPSJvcGFjaXR5OjAuNjUiCisgICBpZD0iZzQ0Ij4KKwk8ZworICAgaWQ9Imc0NiI+CisJCTxwYXRoCisgICBkPSJNIDE3My43OTUsNDkuMSBDIDE3My43MjQsNTAuMzg5IDE3Mi42NjYsNTEuNDE1IDE3MS4zNiw1MS40MTUgQyAxNzAuMDA2LDUxLjQxNSAxNjguOTExLDUwLjMxOSAxNjguOTExLDQ4Ljk2NyBDIDE2OC45MTEsNDcuNjU2IDE2OS45NDQsNDYuNTk2IDE3MS4yMzksNDYuNTMxIEMgMTcwLjAxNywzNC4xNTIgMTU5LjU3OCwyNC40ODIgMTQ2Ljg3OCwyNC40ODIgTCAxNDYuODc4LDQ4Ljk2MyBDIDE0Ni44NzgsNjIuNDg0IDE1Ny44MzksNzMuNDQ0IDE3MS4zNiw3My40NDQgTCAxNzEuMzYsOTcuOTI2IEwgMTcxLjM2Myw5Ny45MjYgQyAxODQuODc4LDk3LjkyNCAxOTUuODMzLDg2Ljk3MiAxOTUuODQxLDczLjQ1OSBMIDE5NS44NDIsNzMuNDU5IEwgMTk1Ljg0Miw3My40NDMgTCAxOTUuODQxLDczLjQ0MyBDIDE5NS44MzMsNjAuNzUzIDE4Ni4xNjcsNTAuMzIyIDE3My43OTUsNDkuMSB6IE0gMTk1LjgzOCwyNC40ODIgQyAxODMuMTQsMjQuNDg0IDE3Mi43MDIsMzQuMTU0IDE3MS40ODIsNDYuNTMxIEMgMTcyLjc3NSw0Ni41OTUgMTczLjgwNiw0Ny42NTUgMTczLjgwOCw0OC45NjQgTCAxOTUuODQxLDQ4Ljk2NCBMIDE5NS44NDEsNDguOTc5IEMgMTk1Ljg0MSw0OC45NzQgMTk1Ljg0Miw0OC45NjkgMTk1Ljg0Miw0OC45NjQgTCAxOTUuODQyLDI0LjQ4MiBMIDE5NS44MzgsMjQuNDgyIHogIgorICAgc3R5bGU9ImZpbGw6I2Y5Yzc1OSIKKyAgIGlkPSJwYXRoNDgiIC8+CisJPC9nPgorPC9nPgorPGcKKyAgIHRyYW5zZm9ybT0ibWF0cml4KDIuOTA5NDE5MywwLDAsMi45MDk0MTkzLC0xNzkuMDMwNTUsLTg2LjYyNDQzNSkiCisgICBzdHlsZT0ib3BhY2l0eTowLjY1IgorICAgaWQ9Imc1MCI+CisJPGcKKyAgIGlkPSJnNTIiPgorCQk8cGF0aAorICAgZD0iTSA3MS4wMDcsNDguMzQ3IEMgNzEuMDc1LDQ3LjEwNSA3Mi4wNjIsNDYuMTE3IDczLjMwNCw0Ni4wNDYgQyA3Mi41MDksMzguMDIgNjcuODUsMzEuMTMzIDYxLjIwMSwyNy4yODQgQyA1Ny42MDEsMjUuMiA1My40MjQsMjQgNDguOTY1LDI0IEwgNDguOTYyLDI0IEMgNDguOTYyLDI4LjQ2IDUwLjE2MSwzMi42MzggNTIuMjQ1LDM2LjI0IEMgNTYuMDkzLDQyLjg5MSA2Mi45OCw0Ny41NTIgNzEuMDA3LDQ4LjM0NyB6IE0gNDguOTYyLDQ4LjQxOCBDIDQ4Ljk2Miw0OC40MzggNDguOTYxLDQ4LjQ1NiA0OC45NjEsNDguNDc2IEwgNDguOTYxLDQ4LjQ3OSBMIDQ4Ljk2Miw0OC40NzkgTCA0OC45NjIsNDguNDE4IHogTSA3MC45OTUsNDguNDgyIEMgNzAuOTk1LDQ4LjQ4MSA3MC45OTUsNDguNDgxIDcwLjk5NSw0OC40OCBMIDQ4Ljk2Miw0OC40OCBMIDQ4Ljk2Miw0OC40ODIgTCA3MC45OTUsNDguNDgyIHogTSA3My40NCwyNC4wMDEgTCA3My40MzcsMjQuMDAxIEwgNzMuNDM3LDQ2LjAzMiBDIDczLjQzOSw0Ni4wMzIgNzMuNDQsNDYuMDMyIDczLjQ0Miw0Ni4wMzIgQyA3NC43OTQsNDYuMDMyIDc1Ljg5LDQ3LjEyOCA3NS44OSw0OC40OCBDIDc1Ljg5LDQ5LjgzMiA3NC43OTQsNTAuOTI4IDczLjQ0Miw1MC45MjggQyA3Mi4wOTEsNTAuOTI4IDcwLjk5Niw0OS44MzQgNzAuOTk0LDQ4LjQ4MyBMIDQ4Ljk1OCw0OC40ODMgTCA0OC45NTgsNDguNDg2IEMgNDguOTYsNjIuMDA1IDU5LjkxOSw3Mi45NjQgNzMuNDM3LDcyLjk2NCBDIDg2Ljk1NSw3Mi45NjQgOTcuOTE0LDYyLjAwNSA5Ny45MTYsNDguNDg2IEwgOTcuOTE2LDQ4LjQ4MyBDIDk3LjkxNiwzNC45NjMgODYuOTU4LDI0LjAwMyA3My40NCwyNC4wMDEgeiAiCisgICBzdHlsZT0iZmlsbDojNmFjN2JkIgorICAgaWQ9InBhdGg1NCIgLz4KKwk8L2c+Cis8L2c+Cis8ZworICAgdHJhbnNmb3JtPSJtYXRyaXgoMi45MDk0MTkzLDAsMCwyLjkwOTQxOTMsLTE3OS4wMzA1NSwtODYuNjI0NDM1KSIKKyAgIHN0eWxlPSJvcGFjaXR5OjAuNjUiCisgICBpZD0iZzU2Ij4KKwk8ZworICAgaWQ9Imc1OCI+CisJCTxwYXRoCisgICBkPSJNIDI0LjQ4MiwyMy45OTggTCAyNC40ODIsMjMuOTk1IEMgMTAuOTYxLDIzLjk5NCAwLDM0Ljk1NSAwLDQ4LjQ3NiBMIDIyLjAzNCw0OC40NzYgQyAyMi4wMzYsNDcuMTI1IDIzLjEzMSw0Ni4wMzEgMjQuNDgyLDQ2LjAzMSBDIDI1LjgzNCw0Ni4wMzEgMjYuOTMsNDcuMTI3IDI2LjkzLDQ4LjQ3OSBDIDI2LjkzLDQ5LjgzMSAyNS44MzQsNTAuOTI3IDI0LjQ4Miw1MC45MjcgQyAyMy4xNzEsNTAuOTI3IDIyLjExLDQ5Ljg5NCAyMi4wNDYsNDguNiBDIDkuNjY5LDQ5LjgyNCAwLjAwMSw2MC4yNjIgMC4wMDEsNzIuOTYgTCAwLDcyLjk2IEwgMCw5Ny40NDIgTCAwLjAwMyw5Ny40NDIgQyAxMy41MjMsOTcuNDQgMjQuNDgyLDg2LjQ4IDI0LjQ4Miw3Mi45NjEgTCAyNC40ODUsNzIuOTYxIEMgMzguMDA1LDcyLjk1OSA0OC45NjMsNjIgNDguOTYzLDQ4LjQ3OSBMIDQ4Ljk2Myw0OC40NzYgQyA0OC45NjIsMzQuOTU3IDM4LjAwMSwyMy45OTggMjQuNDgyLDIzLjk5OCB6ICIKKyAgIHN0eWxlPSJmaWxsOiNlZjQxMmEiCisgICBpZD0icGF0aDYwIiAvPgorCTwvZz4KKzwvZz4KKzxnCisgICB0cmFuc2Zvcm09Im1hdHJpeCgyLjkwOTQxOTMsMCwwLDIuOTA5NDE5MywtMTc5LjAzMDU1LC04Ni42MjQ0MzUpIgorICAgc3R5bGU9Im9wYWNpdHk6MC42NSIKKyAgIGlkPSJnNjIiPgorCTxnCisgICBpZD0iZzY0Ij4KKwkJPHBhdGgKKyAgIGQ9Ik0gMTE5Ljk0OSw0OC45NjMgQyAxMTkuOTQ5LDQ3LjYxMSAxMjEuMDQ1LDQ2LjUxNSAxMjIuMzk3LDQ2LjUxNSBDIDEyMy43MDcsNDYuNTE1IDEyNC43NjgsNDcuNTQ3IDEyNC44MzMsNDguODQyIEMgMTM3LjIxMSw0Ny42MTkgMTQ2Ljg3OSwzNy4xOCAxNDYuODc5LDI0LjQ4MiBMIDEyMi4zOTcsMjQuNDgyIEMgMTIyLjM5NiwxMC45NjEgMTExLjQzNSwwIDk3LjkxNSwwIEwgOTcuOTE1LDI0LjQ4MiBMIDEyMi4zOTQsMjQuNDgyIEMgMTA4Ljg3NCwyNC40ODQgOTcuOTE2LDM1LjQ0NCA5Ny45MTYsNDguOTYzIEwgOTcuOTE2LDQ4Ljk2MyBMIDk3LjkxNiw3My40NDIgTCA5Ny45MTYsNzMuNDQyIEMgMTEwLjYxNCw3My40NDIgMTIxLjA1Myw2My43NzQgMTIyLjI3Niw1MS4zOTkgQyAxMjAuOTgxLDUxLjMzNCAxMTkuOTQ5LDUwLjI3NCAxMTkuOTQ5LDQ4Ljk2MyB6IE0gMTI0LjgzMyw0OS4wODQgQyAxMjQuNzY5LDUwLjM3OSAxMjMuNzA3LDUxLjQxMSAxMjIuMzk3LDUxLjQxMSBMIDEyMi4zOTYsNTEuNDExIEwgMTIyLjM5Niw3My40NDQgTCAxNDYuODc4LDczLjQ0NCBMIDE0Ni44NzgsNzMuNDQxIEMgMTQ2Ljg3Niw2MC43NDUgMTM3LjIwOCw1MC4zMDggMTI0LjgzMyw0OS4wODQgeiAiCisgICBzdHlsZT0iZmlsbDojYTljNTQyIgorICAgaWQ9InBhdGg2NiIgLz4KKwk8L2c+Cis8L2c+Cis8ZworICAgdHJhbnNmb3JtPSJtYXRyaXgoMi45MDk0MTkzLDAsMCwyLjkwOTQxOTMsLTE3OS4wMzA1NSwtODYuNjI0NDM1KSIKKyAgIHN0eWxlPSJvcGFjaXR5OjAuNjUiCisgICBpZD0iZzY4Ij4KKwk8ZworICAgaWQ9Imc3MCI+CisJCTxwYXRoCisgICBkPSJNIDE5NS44NDEsNDguOTc5IEwgMTk1LjgzNSw0OC45NjQgTCAxOTUuODQxLDQ4Ljk2NCBMIDE5NS44NDEsNDguOTc5IEMgMTk1Ljg0MSw0OC45NzQgMTk1Ljg0Miw0OC45NjkgMTk1Ljg0Miw0OC45NjQgTCAxOTUuODQyLDI0LjQ4MiBMIDE5NS44MzgsMjQuNDgyIEMgMTgzLjE0LDI0LjQ4NCAxNzIuNzAyLDM0LjE1NCAxNzEuNDgyLDQ2LjUzMSBDIDE3Mi43NzYsNDYuNTk1IDE3My44MDgsNDcuNjU2IDE3My44MDgsNDguOTY3IEMgMTczLjgwOCw1MC4zMTkgMTcyLjcxMiw1MS40MTUgMTcxLjM2MSw1MS40MTUgQyAxNzAuMDA3LDUxLjQxNSAxNjguOTEyLDUwLjMxOSAxNjguOTEyLDQ4Ljk2NyBDIDE2OC45MTIsNDcuNjU2IDE2OS45NDUsNDYuNTk2IDE3MS4yNCw0Ni41MzEgQyAxNzAuMDE4LDM0LjE1MiAxNTkuNTc5LDI0LjQ4MiAxNDYuODc5LDI0LjQ4MiBMIDE0Ni44NzksNDguOTYzIEMgMTQ2Ljg3OSw2Mi40ODQgMTU3Ljg0LDczLjQ0NCAxNzEuMzYxLDczLjQ0NCBMIDE3MS4zNjEsOTcuOTI2IEwgMTcxLjM2NCw5Ny45MjYgQyAxODQuODgzLDk3LjkyNCAxOTUuODQzLDg2Ljk2MyAxOTUuODQzLDczLjQ0NCBMIDE3MS45NTksNzMuNDQ0IEMgMTg1LjIwMyw3My4xMjYgMTk1Ljg0MSw2Mi4yOTkgMTk1Ljg0MSw0OC45NzkgeiAiCisgICBzdHlsZT0iZmlsbDojZjljNzU5IgorICAgaWQ9InBhdGg3MiIgLz4KKwk8L2c+Cis8L2c+Cis8ZworICAgdHJhbnNmb3JtPSJtYXRyaXgoMi45MDk0MTkzLDAsMCwyLjkwOTQxOTMsLTE3OS4wMzA1NSwtODYuNjI0NDM1KSIKKyAgIHN0eWxlPSJvcGFjaXR5OjAuNjUiCisgICBpZD0iZzc0Ij4KKwk8ZworICAgaWQ9Imc3NiI+CisJCTxwYXRoCisgICBkPSJNIDczLjQ0LDI0LjAwMSBMIDczLjQzNywyNC4wMDEgQyA1OS45MTksMjQuMDAzIDQ4Ljk2LDM0Ljk1OSA0OC45NTgsNDguNDc2IEwgNDguOTU4LDQ4LjQ3OSBMIDQ4Ljk2MSw0OC40NzkgTCA0OC45NjEsNDguNDgxIEwgNDguOTU3LDQ4LjQ4MiBMIDQ4Ljk1Nyw0OC40ODUgQyA0OC45NTksNjIuMDA0IDU5LjkxOCw3Mi45NjMgNzMuNDM2LDcyLjk2MyBDIDg2Ljk1NCw3Mi45NjMgOTcuOTEzLDYyLjAwNCA5Ny45MTUsNDguNDg1IEwgOTcuOTE1LDQ4LjQ4MiBDIDk3LjkxNiwzNC45NjMgODYuOTU4LDI0LjAwMyA3My40NCwyNC4wMDEgeiBNIDczLjQ0Miw1MC45MjggQyA3Mi4wOSw1MC45MjggNzAuOTk0LDQ5LjgzMiA3MC45OTQsNDguNDggQyA3MC45OTQsNDcuMTI4IDcyLjA5LDQ2LjAzMiA3My40NDIsNDYuMDMyIEMgNzQuNzk0LDQ2LjAzMiA3NS44OSw0Ny4xMjggNzUuODksNDguNDggQyA3NS44OSw0OS44MzIgNzQuNzk0LDUwLjkyOCA3My40NDIsNTAuOTI4IHogIgorICAgc3R5bGU9ImZpbGw6IzZhYzdiZCIKKyAgIGlkPSJwYXRoNzgiIC8+CisJPC9nPgorPC9nPgorPC9zdmc+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3FhLWNvZGUtcGVybWFsaW5rcy54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvcWEtY29kZS1wZXJtYWxpbmtzLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzA5MDk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3FhLWNvZGUtcGVybWFsaW5rcy54c2wKQEAgLTAsMCArMSwyMyBAQAorPCEtLQ0KK1RoaXMgWFNMIHNoZWV0IGVuYWJsZXMgY3JlYXRpb24gb2YgcGVybWFsaW5rcyBmb3IgPHBhcmE+PGNvZGU+DQorY29uc3RydWN0cy4gIFJpZ2h0IG5vdywgdGhpcyBjb25zdHJ1Y3Qgb2NjdXJzIG9ubHkgaW4gdGhlIHJlZi1tYW51YWwNCitib29rJ3MgcWEgaXNzdWVzIGFuZCB3YXJuaW5ncyBjaGFwdGVyLiAgSG93ZXZlciwgaWYgdGhlIGNvbnN0cnVjdA0KK3dlcmUgdG8gYXBwZWFyIGFueXdoZXJlIGluIHRoYXQgcmVmLW1hbnVhbCwgYSBwZXJtYWxpbmsgd291bGQgYmUNCitnZW5lcmF0ZWQuICBJIGRvbid0IGZvcmVzZWUgYW55IDxwYXJhPjxjb2RlPiBjb25zdHJ1Y3RzIGJlaW5nIHVzZWQNCitpbiB0aGUgZnV0dXJlIGJ1dCBpZiB0aGV5IGFyZSB0aGVuIGEgcGVybWFsaW5rIHdpdGggYSBnZW5lcmljYWxseQ0KK251bWJlcmVkIHBlcm1hbGluayB3b3VsZCBiZSBnZW5lcmF0ZWQuDQorLS0+DQorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCINCisgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIg0KKyAgeG1sbnM6ZD0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siDQorICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+DQorDQorICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJwYXJhL2NvZGUiPg0KKyAgICA8eHNsOmFwcGx5LWltcG9ydHMvPg0KKyAgICA8eHNsOmlmIHRlc3Q9IiRnZW5lcmF0ZS5wZXJtYWxpbmsgIT0gMCI+DQorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBlcm1hbGluayI+DQorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSIuLiIvPg0KKyAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+DQorICAgIDwveHNsOmlmPg0KKyAgPC94c2w6dGVtcGxhdGU+DQorPC94c2w6c3R5bGVzaGVldD4NCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvc2VjdGlvbi50aXRsZS54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvc2VjdGlvbi50aXRsZS54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM2ZmY5YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9zZWN0aW9uLnRpdGxlLnhzbApAQCAtMCwwICsxLDU1IEBACis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAgeG1sbnM6ZD0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBleGNsdWRlLXJlc3VsdC1wcmVmaXhlcz0iZCI+CisKKyAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLnRpdGxlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InNlY3Rpb24iCisgICAgICBzZWxlY3Q9IihhbmNlc3Rvcjo6c2VjdGlvbiB8CisgICAgICAgICAgICAgICBhbmNlc3Rvcjo6c2ltcGxlc2VjdHwKKyAgICAgICAgICAgICAgIGFuY2VzdG9yOjpzZWN0MXwKKyAgICAgICAgICAgICAgIGFuY2VzdG9yOjpzZWN0MnwKKyAgICAgICAgICAgICAgIGFuY2VzdG9yOjpzZWN0M3wKKyAgICAgICAgICAgICAgIGFuY2VzdG9yOjpzZWN0NHwKKyAgICAgICAgICAgICAgIGFuY2VzdG9yOjpzZWN0NSlbbGFzdCgpXSIvPgorCisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZW5kZXJhcyI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRzZWN0aW9uL0ByZW5kZXJhcyA9ICdzZWN0MSciPjE8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iJHNlY3Rpb24vQHJlbmRlcmFzID0gJ3NlY3QyJyI+MjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkc2VjdGlvbi9AcmVuZGVyYXMgPSAnc2VjdDMnIj4zPC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRzZWN0aW9uL0ByZW5kZXJhcyA9ICdzZWN0NCciPjQ8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iJHNlY3Rpb24vQHJlbmRlcmFzID0gJ3NlY3Q1JyI+NTwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSInJyIvPjwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKworICAgIDx4c2w6dmFyaWFibGUgbmFtZT0ibGV2ZWwiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkcmVuZGVyYXMgIT0gJyciPgorICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmVuZGVyYXMiLz4KKyAgICAgICAgPC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+CisgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Rpb24ubGV2ZWwiPgorICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iJHNlY3Rpb24iLz4KKyAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgICA8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisKKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdGlvbi5oZWFkaW5nIj4KKyAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzZWN0aW9uIiBzZWxlY3Q9IiRzZWN0aW9uIi8+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibGV2ZWwiIHNlbGVjdD0iJGxldmVsIi8+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0idGl0bGUiPgorICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IiRzZWN0aW9uIiBtb2RlPSJvYmplY3QudGl0bGUubWFya3VwIj4KKyAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iYWxsb3ctYW5jaG9ycyIgc2VsZWN0PSIxIi8+CisgICAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgICAgICAgPHhzbDppZiB0ZXN0PSIkbGV2ZWwgJmd0OyAwIj4KKyAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGVybWFsaW5rIj4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9IiRzZWN0aW9uIi8+CisgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgICAgPC94c2w6aWY+CisgICAgICA8L3hzbDp3aXRoLXBhcmFtPgorICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgIDwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS90aXRsZXBhZ2UudGVtcGxhdGVzLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS90aXRsZXBhZ2UudGVtcGxhdGVzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTNmMTQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3RpdGxlcGFnZS50ZW1wbGF0ZXMueG1sCkBAIC0wLDAgKzEsMTIyNyBAQAorPCFET0NUWVBFIHQ6dGVtcGxhdGVzIFsKKzwhRU5USVRZIGhzaXplMCAiMTBwdCI+Cis8IUVOVElUWSBoc2l6ZTEgIjEycHQiPgorPCFFTlRJVFkgaHNpemUyICIxNC40cHQiPgorPCFFTlRJVFkgaHNpemUzICIxNy4yOHB0Ij4KKzwhRU5USVRZIGhzaXplNCAiMjAuNzM2cHQiPgorPCFFTlRJVFkgaHNpemU1ICIyNC44ODMycHQiPgorPCFFTlRJVFkgaHNpemUwc3BhY2UgIjcuNXB0Ij4gPCEtLSAwLjc1ICogaHNpemUwIC0tPgorPCFFTlRJVFkgaHNpemUxc3BhY2UgIjlwdCI+IDwhLS0gMC43NSAqIGhzaXplMSAtLT4KKzwhRU5USVRZIGhzaXplMnNwYWNlICIxMC44cHQiPiA8IS0tIDAuNzUgKiBoc2l6ZTIgLS0+Cis8IUVOVElUWSBoc2l6ZTNzcGFjZSAiMTIuOTZwdCI+IDwhLS0gMC43NSAqIGhzaXplMyAtLT4KKzwhRU5USVRZIGhzaXplNHNwYWNlICIxNS41NTJwdCI+IDwhLS0gMC43NSAqIGhzaXplNCAtLT4KKzwhRU5USVRZIGhzaXplNXNwYWNlICIxOC42NjI0cHQiPiA8IS0tIDAuNzUgKiBoc2l6ZTUgLS0+CitdPgorPHQ6dGVtcGxhdGVzIHhtbG5zOnQ9Imh0dHA6Ly9ud2Fsc2guY29tL2RvY2Jvb2sveHNsL3RlbXBsYXRlLzEuMCIKKwkgICAgIHhtbG5zOnBhcmFtPSJodHRwOi8vbndhbHNoLmNvbS9kb2Nib29rL3hzbC90ZW1wbGF0ZS8xLjAvcGFyYW0iCisgICAgICAgICAgICAgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIKKyAgICAgICAgICAgICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+CisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgJElkOiB0aXRsZXBhZ2UudGVtcGxhdGVzLnhtbCx2IDEuMjMgMjAwMy8xMi8xNiAwMDozMDo0OSBib2JzdGF5dG9uIEV4cCAkCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERvY0Jvb2sgWFNMIFN0eWxlc2hlZXQgZGlzdHJpYnV0aW9uLgorICAgICBTZWUgLi4vUkVBRE1FIG9yIGh0dHA6Ly9kb2Nib29rLnNmLm5ldC8gZm9yIGNvcHlyaWdodAorICAgICBhbmQgb3RoZXIgaW5mb3JtYXRpb24uCisKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImFydGljbGUiIHQ6d3JhcHBlcj0iZm86YmxvY2siCisgICAgICAgICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iPgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iCisgICAgICAgICAgICAgdGV4dC1hbGlnbj0iY2VudGVyIj4KKworICAgIDxtZWRpYW9iamVjdC8+CSAgICAgCisKKyAgICA8dGl0bGUgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmFydGljbGVbMV0iCisJICAga2VlcC13aXRoLW5leHQ9ImFsd2F5cyIKKwkgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisKKyAgICA8c3VidGl0bGUgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6YXJ0aWNsZVsxXSIKKwkgICBrZWVwLXdpdGgtbmV4dD0iYWx3YXlzIgorCSAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgZm9udC13ZWlnaHQ9ImJvbGQiCisgICAgICAgc3BhY2UtYWZ0ZXI9IjAuOGVtIi8+CisKKyAgICA8Y29ycGF1dGhvciBzcGFjZS1iZWZvcmU9IjAuNWVtIgorICAgICAgICAgICAgICAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiLz4KKyAgICA8YXV0aG9yZ3JvdXAgc3BhY2UtYmVmb3JlPSIwLjVlbSIKKyAgICAgICAgICAgICAgICAgZm9udC1zaXplPSImaHNpemUyOyIvPgorICAgIDxhdXRob3Igc3BhY2UtYmVmb3JlPSIwLjVlbSIKKyAgICAgICAgICAgIGZvbnQtc2l6ZT0iJmhzaXplMjsiIAorICAgICAgICAgICAgc3BhY2UtYWZ0ZXI9IjAuOGVtIi8+CisKKyAgICA8ZW1haWwgZm9udC1zaXplPSImaHNpemUyOyIvPgorCisgICAgPG90aGVyY3JlZGl0IHNwYWNlLWJlZm9yZT0iMC41ZW0iLz4KKyAgICA8cmVsZWFzZWluZm8gc3BhY2UtYmVmb3JlPSIwLjVlbSIvPgorICAgIDxjb3B5cmlnaHQgc3BhY2UtYmVmb3JlPSIwLjVlbSIvPgorICAgIDxsZWdhbG5vdGljZSB0ZXh0LWFsaWduPSJzdGFydCIKKyAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ9IjAuNWluIgorICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ9IjAuNWluIgorICAgICAgICAgICAgICAgICBmb250LWZhbWlseT0ieyRib2R5LmZvbnRzZXR9Ii8+CisgICAgPHB1YmRhdGUgc3BhY2UtYmVmb3JlPSIwLjVlbSIvPgorCTxwYXJhPjwvcGFyYT4KKyAgICA8cmV2aXNpb24gc3BhY2UtYmVmb3JlPSIwLjVlbSIvPgorICAgIDxyZXZoaXN0b3J5IHNwYWNlLWJlZm9yZT0iMC41ZW0iLz4KKyAgICA8YWJzdHJhY3Qgc3BhY2UtYmVmb3JlPSIwLjVlbSIKKwkgICAgICB0ZXh0LWFsaWduPSJzdGFydCIKKwkgICAgICBtYXJnaW4tbGVmdD0iMC41aW4iCisgICAgICAgICAgICAgIG1hcmdpbi1yaWdodD0iMC41aW4iCisgICAgICAgICAgICAgIGZvbnQtZmFtaWx5PSJ7JGJvZHkuZm9udHNldH0iLz4KKworICAgIDxwYXJhPjwvcGFyYT4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJzZXQiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZGl2aXNpb24udGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpzZXRbMV0iCisJICAgICB0ZXh0LWFsaWduPSJjZW50ZXIiCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgc3BhY2UtYmVmb3JlPSImaHNpemU1c3BhY2U7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgIHRleHQtYWxpZ249ImNlbnRlciIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iYm9vayIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisKKyAgICAgIDxtZWRpYW9iamVjdC8+CSAgICAgCisKKyAgICAgIDxzdWJ0aXRsZQorCQl0ZXh0LWFsaWduPSJjZW50ZXIiCisJCWZvbnQtc2l6ZT0iJmhzaXplNDsiCisJCXNwYWNlLWJlZm9yZT0iJmhzaXplNHNwYWNlOyIKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICAgIDxjb3JwYXV0aG9yIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJCSAga2VlcC13aXRoLW5leHQ9ImFsd2F5cyIKKwkJICBzcGFjZS1iZWZvcmU9IjJpbiIvPgorICAgICAgPGF1dGhvcmdyb3VwIHNwYWNlLWJlZm9yZT0iMmluIi8+CisgICAgICA8YXV0aG9yIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgICAgc3BhY2UtYmVmb3JlPSImaHNpemUyc3BhY2U7IgorCSAgICAgIGtlZXAtd2l0aC1uZXh0PSJhbHdheXMiLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgICA8Y29ycGF1dGhvci8+CisgICAgICA8YXV0aG9yZ3JvdXAgdDpuYW1lZC10ZW1wbGF0ZT0idmVyc28uYXV0aG9yZ3JvdXAiLz4KKyAgICAgIDxhdXRob3IvPgorICAgICAgPG90aGVyY3JlZGl0Lz4KKyAgICAgIDxwdWJkYXRlIHNwYWNlLWJlZm9yZT0iMWVtIi8+CisgICAgICA8Y29weXJpZ2h0Lz4KKyAgICAgIDxhYnN0cmFjdC8+CisgICAgICA8bGVnYWxub3RpY2UgZm9udC1zaXplPSI4cHQiLz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgICA8Zm86YmxvY2sgYnJlYWstYWZ0ZXI9InBhZ2UiLz4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICAgIDxmbzpibG9jayBicmVhay1hZnRlcj0icGFnZSIvPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InBhcnQiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZGl2aXNpb24udGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpwYXJ0WzFdIgorCSAgICAgdGV4dC1hbGlnbj0iY2VudGVyIgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIHNwYWNlLWJlZm9yZT0iJmhzaXplNXNwYWNlOyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICB0ZXh0LWFsaWduPSJjZW50ZXIiCisJICAgICAgZm9udC1zaXplPSImaHNpemU0OyIKKwkgICAgICBzcGFjZS1iZWZvcmU9IiZoc2l6ZTRzcGFjZTsiCisJICAgICAgZm9udC13ZWlnaHQ9J2JvbGQnCisJICAgICAgZm9udC1zdHlsZT0naXRhbGljJworCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0icGFydGludHJvIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgdGV4dC1hbGlnbj0iY2VudGVyIgorCSAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgc3BhY2UtYmVmb3JlPSIxZW0iCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICB0ZXh0LWFsaWduPSJjZW50ZXIiCisJICAgICAgZm9udC1zaXplPSImaHNpemUyOyIKKwkgICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgICBmb250LXN0eWxlPSJpdGFsaWMiCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8Y29ycGF1dGhvci8+CisgICAgPGF1dGhvcmdyb3VwLz4KKyAgICA8YXV0aG9yLz4KKyAgICA8b3RoZXJjcmVkaXQvPgorICAgIDxyZWxlYXNlaW5mby8+CisgICAgPGNvcHlyaWdodC8+CisgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICA8cHViZGF0ZS8+CisgICAgPHJldmlzaW9uLz4KKyAgICA8cmV2aGlzdG9yeS8+CisgICAgPGFic3RyYWN0Lz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJyZWZlcmVuY2UiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZGl2aXNpb24udGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpyZWZlcmVuY2VbMV0iCisJICAgICB0ZXh0LWFsaWduPSJjZW50ZXIiCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgc3BhY2UtYmVmb3JlPSImaHNpemU1c3BhY2U7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgIHRleHQtYWxpZ249ImNlbnRlciIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InJlZnN5bm9wc2lzZGl2IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJyZWZzZWN0aW9uIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJyZWZzZWN0MSIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0icmVmc2VjdDIiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InJlZnNlY3QzIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImRlZGljYXRpb24iIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6ZGVkaWNhdGlvblsxXSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0icHJlZmFjZSIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpwcmVmYWNlWzFdIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgICAgPGNvcnBhdXRob3IvPgorICAgICAgPGF1dGhvcmdyb3VwLz4KKyAgICAgIDxhdXRob3IvPgorICAgICAgPG90aGVyY3JlZGl0Lz4KKyAgICAgIDxyZWxlYXNlaW5mby8+CisgICAgICA8Y29weXJpZ2h0Lz4KKyAgICAgIDxsZWdhbG5vdGljZS8+CisgICAgICA8cHViZGF0ZS8+CisgICAgICA8cmV2aXNpb24vPgorICAgICAgPHJldmhpc3RvcnkvPgorICAgICAgPGFic3RyYWN0Lz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iY2hhcHRlciIgdDp3cmFwcGVyPSJmbzpibG9jayIKKyAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ij4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIiBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iPgorICAgICAgPHRpdGxlIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmNoYXB0ZXJbMV0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKworICAgICAgPHN1YnRpdGxlIHNwYWNlLWJlZm9yZT0iMC41ZW0iCisJCWZvbnQtc3R5bGU9Iml0YWxpYyIKKwkJZm9udC1zaXplPSImaHNpemUyOyIKKwkJZm9udC13ZWlnaHQ9ImJvbGQiLz4KKworICAgICAgPGNvcnBhdXRob3IgIHNwYWNlLWJlZm9yZT0iMC41ZW0iCisJICAgICAgICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisgICAgICAgICAgICAgICAgICAgZm9udC1zaXplPSImaHNpemUyOyIvPgorCisgICAgICA8YXV0aG9yZ3JvdXAgc3BhY2UtYmVmb3JlPSIwLjVlbSIKKwkgICAgICAgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKyAgICAgICAgICAgICAgICAgICBmb250LXNpemU9IiZoc2l6ZTI7Ii8+CisKKyAgICAgIDxhdXRob3IgICAgICBzcGFjZS1iZWZvcmU9IjAuNWVtIgorCSAgICAgICAgICAgc3BhY2UtYWZ0ZXI9IjAuNWVtIgorICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZT0iJmhzaXplMjsiLz4KKworICAgICAgPG90aGVyY3JlZGl0Lz4KKyAgICAgIDxyZWxlYXNlaW5mby8+CisgICAgICA8Y29weXJpZ2h0Lz4KKyAgICAgIDxsZWdhbG5vdGljZS8+CisgICAgICA8cHViZGF0ZS8+CisgICAgICA8cmV2aXNpb24vPgorICAgICAgPHJldmhpc3RvcnkvPgorICAgICAgPGFic3RyYWN0Lz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iYXBwZW5kaXgiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjphcHBlbmRpeFsxXSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICAgIDxjb3JwYXV0aG9yLz4KKyAgICAgIDxhdXRob3Jncm91cC8+CisgICAgICA8YXV0aG9yLz4KKyAgICAgIDxvdGhlcmNyZWRpdC8+CisgICAgICA8cmVsZWFzZWluZm8vPgorICAgICAgPGNvcHlyaWdodC8+CisgICAgICA8bGVnYWxub3RpY2UvPgorICAgICAgPHB1YmRhdGUvPgorICAgICAgPHJldmlzaW9uLz4KKyAgICAgIDxyZXZoaXN0b3J5Lz4KKyAgICAgIDxhYnN0cmFjdC8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJzZWN0aW9uIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8Y29ycGF1dGhvci8+CisgICAgPGF1dGhvcmdyb3VwLz4KKyAgICA8YXV0aG9yLz4KKyAgICA8b3RoZXJjcmVkaXQvPgorICAgIDxyZWxlYXNlaW5mby8+CisgICAgPGNvcHlyaWdodC8+CisgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICA8cHViZGF0ZS8+CisgICAgPHJldmlzaW9uLz4KKyAgICA8cmV2aGlzdG9yeS8+CisgICAgPGFic3RyYWN0Lz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJzZWN0MSIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ic2VjdDIiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InNlY3QzIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8Y29ycGF1dGhvci8+CisgICAgPGF1dGhvcmdyb3VwLz4KKyAgICA8YXV0aG9yLz4KKyAgICA8b3RoZXJjcmVkaXQvPgorICAgIDxyZWxlYXNlaW5mby8+CisgICAgPGNvcHlyaWdodC8+CisgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICA8cHViZGF0ZS8+CisgICAgPHJldmlzaW9uLz4KKyAgICA8cmV2aGlzdG9yeS8+CisgICAgPGFic3RyYWN0Lz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJzZWN0NCIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ic2VjdDUiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InNpbXBsZXNlY3QiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iYmlibGlvZ3JhcGh5IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmJpYmxpb2dyYXBoeVsxXSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iYmlibGlvZGl2IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZSB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpiaWJsaW9kaXZbMV0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTQ7IgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9Imdsb3NzYXJ5IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6Omdsb3NzYXJ5WzFdIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJnbG9zc2RpdiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6Z2xvc3NkaXZbMV0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTQ7IgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImluZGV4IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmluZGV4WzFdIgorICAgICAgICAgICAgIHBhcmFtOnBhZ2V3aWRlPSIxIgorCSAgICAgbWFyZ2luLWxlZnQ9IjBwdCIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPCEtLSBUaGUgaW5kZXhkaXYudGl0bGUgdGVtcGxhdGUgaXMgdXNlZCBzbyB0aGF0IG1hbnVhbCBhbmQgLS0+CisgIDwhLS0gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgaW5kZXhkaXYgdGl0bGVzIGdldCB0aGUgc2FtZSAtLT4KKyAgPCEtLSBmb3JtYXR0aW5nLiAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJpbmRleGRpdiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImluZGV4ZGl2LnRpdGxlIgorCSAgICAgcGFyYW06dGl0bGU9InRpdGxlIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ic2V0aW5kZXgiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6c2V0aW5kZXhbMV0iCisgICAgICAgICAgICAgcGFyYW06cGFnZXdpZGU9IjEiCisJICAgICBtYXJnaW4tbGVmdD0iMHB0IgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJjb2xvcGhvbiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpjb2xvcGhvblsxXSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0idGFibGUub2YuY29udGVudHMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZ2VudGV4dCIKKwkgICAgIHBhcmFtOmtleT0iJ1RhYmxlb2ZDb250ZW50cyciCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1pbmltdW09IjFlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUub3B0aW11bT0iMS41ZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1heGltdW09IjJlbSIKKwkgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9Imxpc3Qub2YudGFibGVzIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImdlbnRleHQiCisJICAgICBwYXJhbTprZXk9IidMaXN0b2ZUYWJsZXMnIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5taW5pbXVtPSIxZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm9wdGltdW09IjEuNWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5tYXhpbXVtPSIyZW0iCisJICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJsaXN0Lm9mLmZpZ3VyZXMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZ2VudGV4dCIKKwkgICAgIHBhcmFtOmtleT0iJ0xpc3RvZkZpZ3VyZXMnIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5taW5pbXVtPSIxZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm9wdGltdW09IjEuNWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5tYXhpbXVtPSIyZW0iCisJICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJsaXN0Lm9mLmV4YW1wbGVzIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImdlbnRleHQiCisJICAgICBwYXJhbTprZXk9IidMaXN0b2ZFeGFtcGxlcyciCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1pbmltdW09IjFlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUub3B0aW11bT0iMS41ZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1heGltdW09IjJlbSIKKwkgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9Imxpc3Qub2YuZXF1YXRpb25zIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImdlbnRleHQiCisJICAgICBwYXJhbTprZXk9IidMaXN0b2ZFcXVhdGlvbnMnIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5taW5pbXVtPSIxZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm9wdGltdW09IjEuNWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5tYXhpbXVtPSIyZW0iCisJICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJsaXN0Lm9mLnByb2NlZHVyZXMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZ2VudGV4dCIKKwkgICAgIHBhcmFtOmtleT0iJ0xpc3RvZlByb2NlZHVyZXMnIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5taW5pbXVtPSIxZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm9wdGltdW09IjEuNWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5tYXhpbXVtPSIyZW0iCisJICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJsaXN0Lm9mLnVua25vd25zIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImdlbnRleHQiCisJICAgICBwYXJhbTprZXk9IidMaXN0b2ZVbmtub3duJyIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWluaW11bT0iMWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5vcHRpbXVtPSIxLjVlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWF4aW11bT0iMmVtIgorCSAgICAgc3BhY2UtYWZ0ZXI9IjAuNWVtIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemUzOyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzwvdDp0ZW1wbGF0ZXM+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUveW9jdG8tcHJvamVjdC1xcy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUveW9jdG8tcHJvamVjdC1xcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMzNDQyZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS95b2N0by1wcm9qZWN0LXFzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvZmlndXJlcy9ob3N0ZWQtc2VydmljZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvZmlndXJlcy9ob3N0ZWQtc2VydmljZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFmZWE3YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC9maWd1cmVzL2hvc3RlZC1zZXJ2aWNlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvZmlndXJlcy9zaW1wbGUtY29uZmlndXJhdGlvbi5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvZmlndXJlcy9zaW1wbGUtY29uZmlndXJhdGlvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThmY2UyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC9maWd1cmVzL3NpbXBsZS1jb25maWd1cmF0aW9uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvZmlndXJlcy90b2FzdGVyLXRpdGxlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC9maWd1cmVzL3RvYXN0ZXItdGl0bGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZWEzOWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvZmlndXJlcy90b2FzdGVyLXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtY3VzdG9taXphdGlvbi54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc4Njk0YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiIHZlcnNpb249IjEuMCI+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9kb2Nib29rLW1pcnJvci9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKzwhLS0KKworICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9wZXJtYWxpbmtzLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvc2VjdGlvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZW1iZWRkZWRfdmlkZW8ueHNsIi8+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJodG1sLnN0eWxlc2hlZXQiIHNlbGVjdD0iJ3RvYXN0ZXItbWFudWFsLXN0eWxlLmNzcyciIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2hhcHRlci5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJhcHBlbmRpeC5hdXRvbGFiZWwiIHNlbGVjdD0iQSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24ubGFiZWwuaW5jbHVkZXMuY29tcG9uZW50LmxhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUuaWQuYXR0cmlidXRlcyIgc2VsZWN0PSIxIiAvPgorCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLWludHJvLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1pbnRyby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ5ZTA4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1pbnRyby54bWwKQEAgLTAsMCArMSwxNzIgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSd0b2FzdGVyLW1hbnVhbC1pbnRybyc+Cis8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUb2FzdGVyIGlzIGEgd2ViIGludGVyZmFjZSB0byB0aGUgWW9jdG8gUHJvamVjdCdzCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLXN5c3RlbS10ZXJtJz5PcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtPC91bGluaz4uCisgICAgICAgIFRoZSBpbnRlcmZhY2UgZW5hYmxlcyB5b3UgdG8gY29uZmlndXJlIGFuZCBydW4geW91ciBidWlsZHMuCisgICAgICAgIEluZm9ybWF0aW9uIGFib3V0IGJ1aWxkcyBpcyBjb2xsZWN0ZWQgYW5kIHN0b3JlZCBpbiBhIGRhdGFiYXNlLgorICAgICAgICBZb3UgY2FuIHVzZSBUb2FzdGVyIHRvIGNvbmZpZ3VyZSBhbmQgc3RhcnQgYnVpbGRzIG9uIG11bHRpcGxlCisgICAgICAgIHJlbW90ZSBidWlsZCBzZXJ2ZXJzLgorICAgIDwvcGFyYT4KKworICAgIDxub3RlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgcmVsZWFzZSBvZiBUb2FzdGVyIGRvZXMgYWxsb3cgeW91IHRvIGNvbmZpZ3VyZSBhbmQgaW5pdGlhdGUKKyAgICAgICAgICAgIGJ1aWxkcy4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBjYW5ub3QgdXNlIFRvYXN0ZXIgdG8gY3VzdG9taXplIGltYWdlIHJlY2lwZXMsIHdoaWNoCisgICAgICAgICAgICBzdGlsbCBtdXN0IGVpdGhlciBiZSBkb25lIGJ5IGhhbmQgb3IgdGhyb3VnaAorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy90b29scy1yZXNvdXJjZXMvcHJvamVjdHMvaG9iJz5Ib2I8L3VsaW5rPi4KKyAgICAgICAgICAgIEFzIFRvYXN0ZXIgbWF0dXJlcywgaXQgZXZlbnR1YWxseSB3aWxsIGVxdWFsIGFuZCBzdXJwYXNzIEhvYgorICAgICAgICAgICAgZnVuY3Rpb25hbGl0eSwgYXQgd2hpY2ggdGltZSBIb2Igd2lsbCBiZSBkZXByZWNhdGVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBIb2IsCisgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjaW1hZ2UtZGV2ZWxvcG1lbnQtdXNpbmctaG9iJz5JbWFnZSBEZXZlbG9wbWVudCBVc2luZyBIb2I8L3VsaW5rPiIKKyAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L25vdGU+CisKKyAgICA8c2VjdGlvbiBpZD0naW50cm8tbW9kZXMnPgorICAgICAgICA8dGl0bGU+VG9hc3RlciBPcGVyYXRpb25hbCBNb2RlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIHVzZSBUb2FzdGVyIGluIEFuYWx5c2lzIE1vZGUgb3IgQnVpbGQgTW9kZToKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5BbmFseXNpcyBNb2RlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluIEFuYWx5c2lzIE1vZGUsIHlvdSBjYW4gcmVjb3JkIGJ1aWxkcyBhbmQgc3RhdGlzdGljcy4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBNb2RlLCB5b3UgZGlyZWN0bHkgYWNjZXNzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQsIHdoaWNoIHlvdSB0aGVuIHVzZSB0bworICAgICAgICAgICAgICAgICAgICBidWlsZCBpbWFnZXMuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5BbmFseXNpcyBNb2RlIHJlcXVpcmVzIHlvdSB0byBoYXZlIGZpcnN0IHN0YXJ0ZWQKKyAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBhbmQgdGhlbiB0byBpbml0aWF0ZSB5b3VyIGJ1aWxkIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgZnJvbSB0aGUgc2hlbGwuCisgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgbXVzdCBiZSBzdGFydGVkIGJlZm9yZSB0aGUgYnVpbGQgb3IgaXQgd2lsbCBub3QKKyAgICAgICAgICAgICAgICAgICAgY29sbGVjdCBidWlsZCBkYXRhLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+VG9hc3RlciBoYXMgdGhlIGZvbGxvd2luZyBjYXBhYmlsaXRpZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgQW5hbHlzaXMgTW9kZToKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgd2hhdCB3YXMgYnVpbHQgKHJlY2lwZXMgYW5kIHBhY2thZ2VzKSBhbmQgd2hhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIHdlcmUgaW5zdGFsbGVkIGludG8geW91ciBmaW5hbCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcm93c2UgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgb2YgeW91ciBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIHZhbHVlIG9mIGFsbCB2YXJpYWJsZXMgaW4geW91ciBidWlsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24sIGFuZCB3aGljaCBmaWxlcyBzZXQgZWFjaCB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGFtaW5lIGVycm9yLCB3YXJuaW5nIGFuZCB0cmFjZSBtZXNzYWdlcyB0byBhaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBkZWJ1Z2dpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBCaXRCYWtlIHRhc2tzIGV4ZWN1dGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHJldXNlZCBkdXJpbmcgeW91ciBidWlsZCwgaW5jbHVkaW5nIHRob3NlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHNoYXJlZCBzdGF0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXBzIGJldHdlZW4gcmVjaXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBhbmQgdGFza3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgcGVyZm9ybWFuY2UgaW5mb3JtYXRpb24gc3VjaCBhcyBidWlsZCB0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sgdGltZSwgQ1BVIHVzYWdlLCBhbmQgZGlzayBJL08uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIE1vZGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW4gQnVpbGQgTW9kZSwgVG9hc3RlciBoYW5kbGVzIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICBzY2hlZHVsaW5nIGFuZCBleGVjdXRpb24uCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgbW9kZSwgYWxsIHlvdXIgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIGhhcHBlbnMgdGhyb3VnaCB0aGUgd2ViIGludGVyZmFjZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPlVzaW5nIHRoaXMgbW9kZSwgeW91IGNvbmZpZ3VyZSBhbmQgc3RhcnQgeW91ciBidWlsZHMKKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIFRvYXN0ZXIncyBHVUkuCisgICAgICAgICAgICAgICAgICAgIEVhY2ggcHJvamVjdCBjYW4gYmUgY29uZmlndXJlZCBmb3IgYSBzcGVjaWZpYyB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIEFzIHNoaXBwZWQsIFRvYXN0ZXIgc3VwcG9ydHMgWW9jdG8gUHJvamVjdCBSZWxlYXNlcyAxLjcgYW5kCisgICAgICAgICAgICAgICAgICAgIGJleW9uZC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRvYXN0ZXIgaGFzIGFsbCB0aGUgc2FtZSBjYXBhYmlsaXRpZXMgaW4gQnVpbGQgTW9kZQorICAgICAgICAgICAgICAgICAgICBhcyBpdCBkb2VzIGluIEFuYWx5c2lzIE1vZGUgcGx1cyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJyb3dzZSBsYXllcnMgbGlzdGVkIGluIHRoZSB2YXJpb3VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nbGF5ZXItc291cmNlJz5sYXllciBzb3VyY2VzPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgYXJlIGF2YWlsYWJsZSBpbiB5b3VyIHByb2plY3QgKGUuZy4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIE1ldGFkYXRhIEluZGV4IGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2xheWVycy5vcGVuZW1iZWRkZWQub3JnL2xheWVyaW5kZXgvJz48L3VsaW5rPikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1wb3J0IHlvdXIgb3duIGxheWVycyBmb3IgYnVpbGRpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIGFuZCByZW1vdmUgbGF5ZXJzIGZyb20geW91ciBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgYSB0YXJnZXQgb3IgbXVsdGlwbGUgdGFyZ2V0cyB0byBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydCB5b3VyIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1pbnN0YWxsYXRpb24tb3B0aW9ucyc+CisgICAgICAgIDx0aXRsZT5JbnN0YWxsYXRpb24gT3B0aW9uczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIHNldCBUb2FzdGVyIHVwIHRvIHJ1biBhcyBhIGxvY2FsIGluc3RhbmNlIG9yIGFzIGEgc2hhcmVkCisgICAgICAgICAgICBob3N0ZWQgc2VydmljZS4KKyAgICAgICAgICAgIFJlZ2FyZGxlc3Mgb2YgaG93IHlvdSBzZXQgdXAgVG9hc3RlciwgYm90aCBBbmFseXNpcyBhbmQgQnVpbGQKKyAgICAgICAgICAgIE1vZGVzIGFyZSBhdmFpbGFibGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gVG9hc3RlciBpcyBzZXQgdXAgYXMgYSBsb2NhbCBpbnN0YW5jZSwgYWxsIHRoZSBjb21wb25lbnRzCisgICAgICAgICAgICByZXNpZGUgb24gYSBzaW5nbGUgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgIEZ1bmRhbWVudGFsbHksIGEgbG9jYWwgaW5zdGFuY2Ugb2YgVG9hc3RlciBpcyBzdWl0ZWQgZm9yIGEgc2luZ2xlCisgICAgICAgICAgICB1c2VyIGRldmVsb3Bpbmcgb24gYSBzaW5nbGUgYnVpbGQgaG9zdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3NpbXBsZS1jb25maWd1cmF0aW9uLnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjZpbiIgZGVwdGg9IjEuNWluIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUb2FzdGVyIGFzIGEgaG9zdGVkIHNlcnZpY2UgaXMgc3VpdGVkIGZvciBtdWx0aXBsZSB1c2VycworICAgICAgICAgICAgZGV2ZWxvcGluZyBhY3Jvc3Mgc2V2ZXJhbCBidWlsZCBob3N0cy4KKyAgICAgICAgICAgIFdoZW4gVG9hc3RlciBpcyBzZXQgdXAgYXMgYSBob3N0ZWQgc2VydmljZSwgaXRzIGNvbXBvbmVudHMgY2FuCisgICAgICAgICAgICBiZSBzcHJlYWQgYWNyb3NzIHNldmVyYWwgbWFjaGluZXM6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9ob3N0ZWQtc2VydmljZS5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI2aW4iIGRlcHRoPSIzLjVpbiIgLz4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworPCEtLVRISVMgRVhUUkEgSU5GT1JNQVRJT04gUFJPQkFCTFkgV0lMTCBHTyBBV0FZCisgICAgICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGluc3RhbGxpbmcgYW5kIHJ1bm5pbmcgVG9hc3Rlciwgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9Ub2FzdGVyI0luc3RhbGxhdGlvbl9hbmRfUnVubmluZyc+SW5zdGFsbGF0aW9uIGFuZCBSdW5uaW5nPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gb2YgdGhlICJUb2FzdGVyIiB3aWtpIHBhZ2UuCisgICAgICAgIEZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiB0aGUgQVBJIGFuZCBpdHMgc2VhcmNoIG9wZXJhdGlvbgorICAgICAgICBVUkksIHBhcmFtZXRlcnMsIGFuZCByZXNwb25zZXMsIHNlZSB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9SRVNUX0FQSV9Db250cmFjdHMnPlJFU1QgQVBJIENvbnRyYWN0czwvdWxpbms+CisgICAgICAgIFdpa2kgcGFnZS4KKyAgICA8L3BhcmE+CistLT4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1yZWZlcmVuY2UueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLXJlZmVyZW5jZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM5NDAxZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1yZWZlcmVuY2UueG1sCkBAIC0wLDAgKzEsMTA3OCBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J3RvYXN0ZXItbWFudWFsLXJlZmVyZW5jZSc+CisKKzx0aXRsZT5Db25jZXB0cyBhbmQgUmVmZXJlbmNlPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBJbiBvcmRlciB0byBjb25maWd1cmUgYW5kIHVzZSBUb2FzdGVyLCB5b3Ugc2hvdWxkIHVuZGVyc3RhbmQgc29tZQorICAgICAgICBjb25jZXB0cyBhbmQgaGF2ZSBzb21lIGJhc2ljIGNvbW1hbmQgcmVmZXJlbmNlIG1hdGVyaWFsIGF2YWlsYWJsZS4KKyAgICAgICAgVGhpcyBmaW5hbCBjaGFwdGVyIHByb3ZpZGVzIGNvbmNlcHR1YWwgaW5mb3JtYXRpb24gb24gbGF5ZXIgc291cmNlcywKKyAgICAgICAgcmVsZWFzZXMsIGFuZCBKU09OIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgICAgIEFsc28gcHJvdmlkZWQgaXMgYSBxdWljayBsb29rIGF0IHNvbWUgdXNlZnVsCisgICAgICAgIDxmaWxlbmFtZT5tYW5hZ2UucHk8L2ZpbGVuYW1lPiBjb21tYW5kcyB0aGF0IGFyZSBUb2FzdGVyLXNwZWNpZmljLgorICAgICAgICBJbmZvcm1hdGlvbiBvbiA8ZmlsZW5hbWU+bWFuYWdlLnB5PC9maWxlbmFtZT4gY29tbWFuZHMgZG9lcyBleGlzdAorICAgICAgICBhY3Jvc3MgdGhlIFdlYiBhbmQgdGhlIGluZm9ybWF0aW9uIGluIHRoaXMgbWFudWFsIGJ5IG5vIG1lYW5zCisgICAgICAgIGF0dGVtcHRzIHRvIHByb3ZpZGUgYSBjb21tYW5kIGNvbXByZWhlbnNpdmUgcmVmZXJlbmNlLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdsYXllci1zb3VyY2UnPgorICAgICAgICA8dGl0bGU+TGF5ZXIgU291cmNlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIGdlbmVyYWwsIGEgImxheWVyIHNvdXJjZSIgaXMgYSBzb3VyY2Ugb2YgaW5mb3JtYXRpb24gYWJvdXQKKyAgICAgICAgICAgIGV4aXN0aW5nIGxheWVycy4KKyAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIHdlIGFyZSBjb25jZXJuZWQgd2l0aCBsYXllcnMgdGhhdCB5b3UgY2FuIHVzZQorICAgICAgICAgICAgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCBhbmQgVG9hc3Rlci4KKyAgICAgICAgICAgIFRoaXMgY2hhcHRlciBkZXNjcmliZXMgYSBwYXJ0aWN1bGFyIHR5cGUgb2YgbGF5ZXIgc291cmNlIGNhbGxlZAorICAgICAgICAgICAgYSAibGF5ZXIgaW5kZXguIgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIGxheWVyIGluZGV4IGlzIGEgd2ViIGFwcGxpY2F0aW9uIHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24KKyAgICAgICAgICAgIGFib3V0IGEgc2V0IG9mIGN1c3RvbSBsYXllcnMuCisgICAgICAgICAgICBBIGdvb2QgZXhhbXBsZSBvZiBhbiBleGlzdGluZyBsYXllciBpbmRleCBpcyB0aGUKKyAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBNZXRhZGF0YSBJbmRleC4KKyAgICAgICAgICAgIEEgcHVibGljIGluc3RhbmNlIG9mIHRoaXMgbGF5ZXIgaW5kZXggZXhpc3RzIGF0CisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcnPjwvdWxpbms+LgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZSBjb2RlIGZvciB0aGlzIGxheWVyIGluZGV4J3Mgd2ViIGFwcGxpY2F0aW9uIGF0CisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9sYXllcmluZGV4LXdlYi8nPjwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSB0aWUgYSBsYXllciBzb3VyY2UgaW50byBUb2FzdGVyLCBpdCBjYW4gcXVlcnkgdGhlIGxheWVyCisgICAgICAgICAgICBzb3VyY2UgdGhyb3VnaCBhCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1JlcHJlc2VudGF0aW9uYWxfc3RhdGVfdHJhbnNmZXInPlJFU1Q8L3VsaW5rPgorICAgICAgICAgICAgQVBJLCBzdG9yZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxheWVycyBpbiB0aGUgVG9hc3RlcgorICAgICAgICAgICAgZGF0YWJhc2UsIGFuZCB0aGVuIHNob3cgdGhlIGluZm9ybWF0aW9uIHRvIHVzZXJzLgorICAgICAgICAgICAgVXNlcnMgYXJlIHRoZW4gYWJsZSB0byB2aWV3IHRoYXQgaW5mb3JtYXRpb24gYW5kIGJ1aWxkIGxheWVycworICAgICAgICAgICAgZnJvbSBUb2FzdGVyIGl0c2VsZiB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IGNsb25pbmcgb3IgZWRpdGluZworICAgICAgICAgICAgdGhlIEJpdEJha2UgbGF5ZXJzIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVHlpbmcgYSBsYXllciBzb3VyY2UgaW50byBUb2FzdGVyIGlzIGNvbnZlbmllbnQgd2hlbiB5b3UgaGF2ZQorICAgICAgICAgICAgbWFueSBjdXN0b20gbGF5ZXJzIHRoYXQgbmVlZCB0byBiZSBidWlsdCBvbiBhIHJlZ3VsYXIgYmFzaXMgYnkKKyAgICAgICAgICAgIGEgY29tbXVuaXR5IG9mIGRldmVsb3BlcnMuCisgICAgICAgICAgICBJbiBmYWN0LCBUb2FzdGVyIGNvbWVzIHByZS1jb25maWd1cmVkIHdpdGggdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgTWV0YWRhdGEgSW5kZXguCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBZb3UgZG8gbm90IGhhdmUgdG8gdXNlIGEgbGF5ZXIgc291cmNlIHRvIHVzZSBUb2FzdGVyLgorICAgICAgICAgICAgICAgIFR5aW5nIGludG8gYSBsYXllciBzb3VyY2UgaXMgb3B0aW9uYWwuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbGF5ZXItc291cmNlLXVzaW5nLXdpdGgtdG9hc3Rlcic+CisgICAgICAgICAgICA8dGl0bGU+U2V0dGluZyBVcCBhbmQgVXNpbmcgYSBMYXllciBTb3VyY2U8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyB1c2UgeW91ciBvd24gbGF5ZXIgc291cmNlLCB5b3UgbmVlZCB0byBzZXQgdXAgdGhlIGxheWVyCisgICAgICAgICAgICAgICAgc291cmNlIGFuZCB0aGVuIHRpZSBpdCBpbnRvIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgdG8gdGllIGludG8gYSBsYXllciBpbmRleCBpbiBhIG1hbm5lcgorICAgICAgICAgICAgICAgIHNpbWlsYXIgdG8gdGhlIHdheSBUb2FzdGVyIHRpZXMgaW50byB0aGUgT3BlbkVtYmVkZGVkIE1ldGFkYXRhCisgICAgICAgICAgICAgICAgSW5kZXguCisgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3VuZGVyc3RhbmRpbmcteW91ci1sYXllcnMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5VbmRlcnN0YW5kaW5nIFlvdXIgTGF5ZXJzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgb2J2aW91cyBmaXJzdCBzdGVwIGZvciB1c2luZyBhIGxheWVyIGluZGV4IGlzIHRvIGhhdmUKKyAgICAgICAgICAgICAgICAgICAgc2V2ZXJhbCBjdXN0b20gbGF5ZXJzIHRoYXQgZGV2ZWxvcGVycyBidWlsZCBhbmQgYWNjZXNzIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IG9uIGEgcmVndWxhciBiYXNpcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBzZXQgb2YgbGF5ZXJzIG5lZWRzIHRvIGV4aXN0IGFuZCB5b3UgbmVlZCB0byBiZQorICAgICAgICAgICAgICAgICAgICBmYW1pbGlhciB3aXRoIHdoZXJlIHRoZXkgcmVzaWRlLgorICAgICAgICAgICAgICAgICAgICBZb3Ugd2lsbCBuZWVkIHRoYXQgaW5mb3JtYXRpb24gd2hlbiB5b3Ugc2V0IHVwIHRoZQorICAgICAgICAgICAgICAgICAgICBjb2RlIGZvciB0aGUgd2ViIGFwcGxpY2F0aW9uIHRoYXQgImhvb2tzIiBpbnRvIHlvdXIgc2V0IG9mCisgICAgICAgICAgICAgICAgICAgIGxheWVycy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gb24gbGF5ZXJzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNic3AtbGF5ZXJzJz5CU1AgTGF5ZXJzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjdXNpbmctdGhlLXlvY3RvLXByb2plY3RzLWJzcC10b29scyc+VXNpbmcgdGhlIFlvY3RvIFByb2plY3QncyBCU1AgVG9vbHM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMgaW4gdGhlIFlvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApCisgICAgICAgICAgICAgICAgICAgIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyaW5nLXRvYXN0ZXItdG8taG9vay1pbnRvLXlvdXItbGF5ZXItc291cmNlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJpbmcgVG9hc3RlciB0byBIb29rIEludG8gWW91ciBMYXllciBJbmRleDwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgVG9hc3RlciB0byB1c2UgeW91ciBsYXllciBpbmRleCwgeW91IG11c3QgaG9zdAorICAgICAgICAgICAgICAgICAgICB0aGUgd2ViIGFwcGxpY2F0aW9uIGluIGEgc2VydmVyIHRvIHdoaWNoIFRvYXN0ZXIgY2FuCisgICAgICAgICAgICAgICAgICAgIGNvbm5lY3QuCisgICAgICAgICAgICAgICAgICAgIFlvdSBhbHNvIG5lZWQgdG8gZ2l2ZSBUb2FzdGVyIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB5b3VyCisgICAgICAgICAgICAgICAgICAgIGxheWVyIGluZGV4LgorICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgeW91IGhhdmUgdG8gY29uZmlndXJlIFRvYXN0ZXIgdG8gdXNlIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIgaW5kZXguCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdHdvIG1ldGhvZHMgYnkgd2hpY2ggeW91IGNhbgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgYW5kIHVzZSB5b3VyIGxheWVyIGluZGV4LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiB0aGUgcHJldmlvdXMgc2VjdGlvbiwgdGhlIGNvZGUgZm9yIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgTWV0YWRhdGEgSW5kZXggKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2xheWVycy5vcGVuZW1iZWRkZWQub3JnJz48L3VsaW5rPikgd2FzCisgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZWQuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgY29kZSwgd2hpY2ggaXMgYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvbGF5ZXJpbmRleC13ZWIvJz48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYXMgYSBiYXNlIHRvIGNyZWF0ZSB5b3VyIG93biBsYXllciBpbmRleC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0ndXNlLXRoZS1hZG1pbmlzdHJhdGlvbi1pbnRlcmZhY2UnPgorICAgICAgICAgICAgICAgICAgICA8dGl0bGU+VXNlIHRoZSBBZG1pbmlzdHJhdGlvbiBJbnRlcmZhY2U8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXNzIHRoZSBhZG1pbmlzdHJhdGlvbiBpbnRlcmZhY2UgdGhyb3VnaCBhCisgICAgICAgICAgICAgICAgICAgICAgICBicm93c2VyIGJ5IGVudGVyaW5nIHRoZSBVUkwgb2YgeW91ciBUb2FzdGVyIGluc3RhbmNlIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgYWRkaW5nICI8ZmlsZW5hbWU+L2FkbWluPC9maWxlbmFtZT4iIHRvIHRoZSBlbmQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBVUkwuCisgICAgICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBpZiB5b3UgYXJlIHJ1bm5pbmcgVG9hc3RlciBsb2NhbGx5LCB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmcgVVJMOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBodHRwOi8vMTI3LjAuMC4xOjgwMDAvYWRtaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGFkbWluaXN0cmF0aW9uIGludGVyZmFjZSBoYXMgYSAiTGF5ZXIgc291cmNlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gdGhhdCBpbmNsdWRlcyBhbiAiQWRkIGxheWVyIHNvdXJjZSIgYnV0dG9uLgorICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgdGhhdCBidXR0b24gYW5kIHByb3ZpZGUgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgTWFrZSBzdXJlIHlvdSBzZWxlY3QgImxheWVyaW5kZXgiIGFzIHRoZSBsYXllciBzb3VyY2UgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdzZWxlY3QtdGhlLXRvYXN0ZXJjb25mLWpzb24tZmlsZSc+CisgICAgICAgICAgICAgICAgICAgIDx0aXRsZT5Vc2UgdGhlIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4gRmlsZTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHdhbnQgdG8gdXNlIHRoZSBBZG1pbmlzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlLCB5b3UgY2FuIGVkaXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd0b2FzdGVyLWpzb24tZmlsZXMnPjxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGFuZCByZWxvYWQgaXQgdG8gVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3Ugc2V0IHVwIFRvYXN0ZXIgaW4gQnVpbGQgTW9kZSwgeW91IGFyZSBwcm9tcHRlZAorICAgICAgICAgICAgICAgICAgICAgICAgdG8gc2VsZWN0IGEgVG9hc3RlciBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyB1c2VkIHRvIHNldCB1cCB0aGUgaW5pdGlhbAorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiB2YWx1ZXMgd2l0aGluIHRoZSBUb2FzdGVyIGRhdGFiYXNlCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgdGhlIGxheWVyIHNvdXJjZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBUaHJlZSB2ZXJzaW9ucyBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGV4aXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmaXJzdCB2ZXJzaW9uIG9mIHRoZSBmaWxlIGlzIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG88L2ZpbGVuYW1lPiBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0by9jb25mL3RvYXN0ZXJjb25mLmpzb248L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmVyc2lvbiBjb250YWlucyB0aGUgZGVmYXVsdCBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZm9yIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBhcmUgcHJvbXB0ZWQgdG8gc2VsZWN0IHRoaXMgZmlsZSBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgc2V0IHVwIHByb2Nlc3MgaWYgeW91IGhhZCBjbG9uZWQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gcmVwb3NpdG9yeSAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc2Vjb25kIHZlcnNpb24gb2YgdGhlIGZpbGUgaXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b3BlbmVtYmVkZGVkLWNvcmU8L2ZpbGVuYW1lPiBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+bWV0YS9jb25mL3RvYXN0ZXJjb25mLmpzb248L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmVyc2lvbiBjb250YWlucyB0aGUgZGVmYXVsdCBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmb3IgVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGFyZSBwcm9tcHRlZCB0byBzZWxlY3QgdGhpcyBmaWxlIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBzZXQgdXAgcHJvY2VzcyBpZiB5b3UgaGFkIGNsb25lZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9wZW5lbWJlZGRlZC1jb3JlPC9maWxlbmFtZT4gcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLWNvcmU8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRoaXJkIHZlcnNpb24gaXMgYSBzYW1wbGUgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VmdWwgZm9yIHdoZW4geW91IHdhbnQgdG8gc2V0IHVwIGEgaG9zdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UgaW4gQnVpbGQgTW9kZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoaXMgdmVyc2lvbiBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9GaWxlOlRvYXN0ZXJjb25mLmpzb24udHh0LnBhdGNoJz5GaWxlOlRvYXN0ZXJjb25mLmpzb24udHh0LnBhdGNoPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lraSBwYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2VkaXQtdGhlLWNvbmZpZ3VyYXRpb24tZmlsZSc+CisgICAgICAgICAgICAgICAgICAgIDx0aXRsZT5FZGl0IHRoZSBDb25maWd1cmF0aW9uIEZpbGU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgRWRpdCB0aGUgdmVyc2lvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4gZmlsZSB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgdG8gc2V0IHVwIHlvdXIgVG9hc3RlciBpbnN0YW5jZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoZSBmaWxlLCB5b3Ugd2lsbCBmaW5kIGEgc2VjdGlvbiBmb3IgbGF5ZXIgc291cmNlcworICAgICAgICAgICAgICAgICAgICAgICAgc3VjaCBhcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAibGF5ZXJzb3VyY2VzIjogWworICAgICAgICAgeworICAgICAgICAgICAgICJuYW1lIjogIkxvY2FsIFlvY3RvIFByb2plY3QiLAorICAgICAgICAgICAgICJzb3VyY2V0eXBlIjogImxvY2FsIiwKKyAgICAgICAgICAgICAiYXBpdXJsIjogIi4uLy4uLyIsCisgICAgICAgICAgICAgImJyYW5jaGVzIjogWyJIRUFEIiwgIm1hc3RlciIsICJmaWRvIiwgImRpenp5Il0sCisgICAgICAgICAgICAgImxheWVycyI6IFsKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAib3BlbmVtYmVkZGVkLWNvcmUiLAorICAgICAgICAgICAgICAgICAgICAgImxvY2FsX3BhdGgiOiAibWV0YSIsCisgICAgICAgICAgICAgICAgICAgICAidmNzX3VybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICAgICAgICAgICJkaXJwYXRoIjogIm1ldGEiCisgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICJuYW1lIjogIm1ldGEteW9jdG8iLAorICAgICAgICAgICAgICAgICAgICAgImxvY2FsX3BhdGgiOiAibWV0YS15b2N0byIsCisgICAgICAgICAgICAgICAgICAgICAidmNzX3VybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICAgICAgICAgICJkaXJwYXRoIjogIm1ldGEteW9jdG8iCisgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICJuYW1lIjogIm1ldGEteW9jdG8tYnNwIiwKKyAgICAgICAgICAgICAgICAgICAgICJsb2NhbF9wYXRoIjogIm1ldGEteW9jdG8tYnNwIiwKKyAgICAgICAgICAgICAgICAgICAgICJ2Y3NfdXJsIjogInJlbW90ZTpvcmlnaW4iLAorICAgICAgICAgICAgICAgICAgICAgImRpcnBhdGgiOiAibWV0YS15b2N0by1ic3AiCisgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgIF0KKyAgICAgICAgIH0sCisgICAgICAgICB7CisgICAgICAgICAgICAgIm5hbWUiOiAiT3BlbkVtYmVkZGVkIiwKKyAgICAgICAgICAgICAic291cmNldHlwZSI6ICJsYXllcmluZGV4IiwKKyAgICAgICAgICAgICAiYXBpdXJsIjogImh0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZy9sYXllcmluZGV4L2FwaS8iLAorICAgICAgICAgICAgICJicmFuY2hlcyI6IFsibWFzdGVyIiwgImZpZG8iLCAiZGl6enkiXQorICAgICAgICAgfSwKKyAgICAgICAgIHsKKyAgICAgICAgICAgICAibmFtZSI6ICJJbXBvcnRlZCBsYXllcnMiLAorICAgICAgICAgICAgICJzb3VyY2V0eXBlIjogImltcG9ydGVkIiwKKyAgICAgICAgICAgICAiYXBpdXJsIjogIiIsCisgICAgICAgICAgICAgImJyYW5jaGVzIjogWyJtYXN0ZXIiLCAiZmlkbyIsICJkaXp6eSIsICJIRUFEIl0KKworICAgICAgICAgfQorICAgICBdLAorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBhZGQgeW91ciBvd24gbGF5ZXIgc291cmNlIHRvIHRoaXMgc2VjdGlvbiBieQorICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIHRoZSBzYW1lIGZvcm1hdCB1c2VkIGZvciB0aGUgIk9wZW5FbWJlZGRlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyIHNvdXJjZSBzaG93biBhYm92ZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgR2l2ZSB5b3VyIGxheWVyIHNvdXJjZSBhIG5hbWUsIHByb3ZpZGUgdGhlIFVSTCBvZiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBsYXllciBzb3VyY2UgQVBJLCB1c2UgdGhlIHNvdXJjZSB0eXBlICJsYXllcmluZGV4IiwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0ZSB3aGljaCBicmFuY2hlcyBmcm9tIHlvdXIgbGF5ZXIgc291cmNlIHlvdSB3YW50CisgICAgICAgICAgICAgICAgICAgICAgICB0byBtYWtlIGF2YWlsYWJsZSB0aHJvdWdoIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIE9wZW5FbWJlZGRlZCBsYXllciBzb3VyY2UgbWFrZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBvbmx5IGl0cyAibWFzdGVyIiwgImZpZG8iLCBhbmQgImRpenp5IgorICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBicmFuY2hlcyBtdXN0IG1hdGNoIHRoZSBicmFuY2ggeW91CisgICAgICAgICAgICAgICAgICAgICAgICBzZXQgd2hlbiBjb25maWd1cmluZyB5b3VyIHJlbGVhc2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBjb25maWd1cmUgb25lIHJlbGVhc2UgaW4gVG9hc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgYnkgc2V0dGluZyBpdHMgYnJhbmNoIHRvICJicmFuY2gtb25lIiBhbmQgeW91IGNvbmZpZ3VyZQorICAgICAgICAgICAgICAgICAgICAgICAgYW5vdGhlciByZWxlYXNlIGluIFRvYXN0ZXIgYnkgc2V0dGluZyBpdHMgYnJhbmNoIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAiYnJhbmNoLXR3byIsIHRoZSBicmFuY2hlcyBpbiB5b3VyIGxheWVyIHNvdXJjZSBzaG91bGQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlICJicmFuY2gtb25lIiBhbmQgImJyYW5jaC10d28iIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgICAgICAgICBEb2luZyBzbyBjcmVhdGVzIGEgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSByZWxlYXNlcworICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBsYXllciBpbmZvcm1hdGlvbiBmcm9tIHlvdXIgbGF5ZXIgc291cmNlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGh1cywgd2hlbiB1c2VycyBjcmVhdGUgYSBwcm9qZWN0IHdpdGggYSBnaXZlbgorICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSwgdGhleSB3aWxsIHNlZSB0aGUgYXBwcm9wcmlhdGUgbGF5ZXJzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgbGF5ZXIgc291cmNlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBjb25uZWN0aW9uIGVuc3VyZXMgdGhhdCBvbmx5IGxheWVycyB0aGF0IGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSB3aXRoIHRoZSBzZWxlY3RlZCBwcm9qZWN0IHJlbGVhc2UgY2FuIGJlCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBmb3IgYnVpbGRpbmcuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgYWRkZWQgdGhpcyBpbmZvcm1hdGlvbiB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4gZmlsZSwgc2F2ZSB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBJbiBhIHRlcm1pbmFsIHdpbmRvdywgbmF2aWdhdGUgdG8gdGhlIGRpcmVjdG9yeSB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucyB0aGUgVG9hc3RlciBkYXRhYmFzZSwgd2hpY2ggYnkgZGVmYXVsdCBpcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Qgb2YgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGFyZSBsb2NhdGVkIGluIHRoYXQgZGlyZWN0b3J5LCBydW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGZpbGVuYW1lPmxvYWRjb25mPC9maWxlbmFtZT4iIGNvbW1hbmQsIHdoaWNoIHRha2VzIGFzCisgICAgICAgICAgICAgICAgICAgICAgICBhbiBhcmd1bWVudCB0aGUgZnVsbCBwYXRoIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRvYXN0ZXJjb25mLmpzb248L2ZpbGVuYW1lPiBmaWxlIHlvdSBqdXN0IGVkaXRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgY2xvbmVkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiByZXBvc2l0b3J5IGFuZCB5b3UgZWRpdGVkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG8vY29uZi90b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4gZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSB3b3VsZCB0eXBlIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbG9hZGNvbmYgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhLXlvY3RvL2NvbmYvdG9hc3RlcmNvbmYuanNvbgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgZW50ZXJpbmcgdGhpcyBjb21tYW5kLCB5b3UgbmVlZCB0byB1cGRhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdGVyIGRhdGFiYXNlIHdpdGggdGhlIGluZm9ybWF0aW9uIGNvbWluZyBmcm9tIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBsYXllciBzb3VyY2UuCisgICAgICAgICAgICAgICAgICAgICAgICBUbyBkbyB0aGF0LCB5b3Ugc2hvdWxkIHJ1biB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8ZmlsZW5hbWU+bHN1cGRhdGVzPC9maWxlbmFtZT4iIGNvbW1hbmQgZnJvbSB0aGUgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGNvbnRhaW5zIHRoZSBUb2FzdGVyIGRhdGFiYXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGxzdXBkYXRlcworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgVG9hc3RlciBjYW4gcmVhY2ggdGhlIEFQSSBVUkwsIHlvdSBzaG91bGQgc2VlIGEgbWVzc2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgdGVsbGluZyB5b3UgdGhhdCBUb2FzdGVyIGlzIHVwZGF0aW5nIHRoZSBsYXllciBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiB1cGRhdGVkLCB2ZXJpZnkgdGhlIG5ldyBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGJ5IHVzaW5nIHRoZSBUb2FzdGVyIHdlYiBpbnRlcmZhY2UuCisgICAgICAgICAgICAgICAgICAgICAgICBUbyBkbyB0aGF0LCB2aXNpdCB0aGUgIkFsbCBjb21wYXRpYmxlIGxheWVycyIgcGFnZSBpbnNpZGUgYQorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGxheWVycyBmcm9tIHlvdXIgbGF5ZXIgc291cmNlIHNob3VsZCBiZSBsaXN0ZWQgdGhlcmUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1yZWxlYXNlcyc+CisgICAgICAgIDx0aXRsZT5SZWxlYXNlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSBjcmVhdGUgYSBUb2FzdGVyIHByb2plY3QgdXNpbmcgdGhlIHdlYiBpbnRlcmZhY2UsCisgICAgICAgICAgICB5b3UgYXJlIGFza2VkIHRvIGNob29zZSBhICJSZWxlYXNlLiIKKyAgICAgICAgICAgIEluIHRoZSBjb250ZXh0IG9mIFRvYXN0ZXIsIHRoZSB0ZXJtICJSZWxlYXNlIiByZWZlcnMgdG8gYSBzZXQgb2YKKyAgICAgICAgICAgIGxheWVycyBhbmQgYSBCaXRCYWtlIHZlcnNpb24gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcworICAgICAgICAgICAgdG8gYnVpbGQgc29tZXRoaW5nLgorICAgICAgICAgICAgQXMgc2hpcHBlZCwgVG9hc3RlciBpcyBwcmUtY29uZmlndXJlZCB3aXRoIHJlbGVhc2VzIHRoYXQKKyAgICAgICAgICAgIGNvcnJlc3BvbmQgdG8gWW9jdG8gUHJvamVjdCByZWxlYXNlIGJyYW5jaGVzLgorICAgICAgICAgICAgSG93ZXZlciwgeW91IGNhbiBtb2RpZnksIGRlbGV0ZSwgYW5kIGNyZWF0ZSBuZXcgcmVsZWFzZXMKKyAgICAgICAgICAgIGFjY29yZGluZyB0byB5b3VyIG5lZWRzLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIHNvbWUgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBvbiByZWxlYXNlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLXJlbGVhc2VzLXN1cHBvcnRlZCc+CisgICAgICAgICAgICA8dGl0bGU+UHJlLUNvbmZpZ3VyZWQgUmVsZWFzZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBzaGlwcGVkLCBUb2FzdGVyIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIGEgc3BlY2lmaWMgc2V0IG9mCisgICAgICAgICAgICAgICAgcmVsZWFzZXMuCisgICAgICAgICAgICAgICAgT2YgY291cnNlLCB5b3UgY2FuIGFsd2F5cyBjb25maWd1cmUgVG9hc3RlciB0byB1c2UgYW55CisgICAgICAgICAgICAgICAgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IG1pZ2h0IHdhbnQgeW91ciBwcm9qZWN0IHRvIGJ1aWxkIGFnYWluc3QgYQorICAgICAgICAgICAgICAgIHNwZWNpZmljIGNvbW1pdCBvZiBhbnkgb2YgdGhlICJvdXQtb2YtdGhlLWJveCIgcmVsZWFzZXMuCisgICAgICAgICAgICAgICAgT3IsIHlvdSBtaWdodCB3YW50IHlvdXIgcHJvamVjdCB0byBidWlsZCBhZ2FpbnN0IGRpZmZlcmVudAorICAgICAgICAgICAgICAgIHJldmlzaW9ucyBvZiBPcGVuRW1iZWRkZWQgYW5kIEJpdEJha2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIHNoaXBwZWQsIFRvYXN0ZXIgaXMgY29uZmlndXJlZCB0byB3b3JrIHdpdGggdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgIHJlbGVhc2VzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+WW9jdG8gUHJvamVjdCAxLjcgIkRpenp5IiBvciBPcGVuRW1iZWRkZWQgIkRpenp5Ijo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyByZWxlYXNlIGNhdXNlcyB5b3VyIFRvYXN0ZXIgcHJvamVjdHMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGFnYWluc3QgdGhlIGhlYWQgb2YgdGhlIGRpenp5IGJyYW5jaCBhdAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2kvcG9reS9sb2cvP2g9ZGl6enknPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlL2NvbW1pdC8/aD1kaXp6eSc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Zb2N0byBQcm9qZWN0IDEuOCAiRmlkbyIgb3IgT3BlbkVtYmVkZGVkICJGaWRvIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyByZWxlYXNlIGNhdXNlcyB5b3VyIFRvYXN0ZXIgcHJvamVjdHMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGFnYWluc3QgdGhlIGhlYWQgb2YgdGhlIGZpZG8gYnJhbmNoIGF0CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC9jZ2l0LmNnaS9wb2t5L2xvZy8/aD1maWRvJz48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZS9jb21taXQvP2g9Zmlkbyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Zb2N0byBQcm9qZWN0ICJNYXN0ZXIiIG9yIE9wZW5FbWJlZGRlZCAiTWFzdGVyIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyByZWxlYXNlIGNhdXNlcyB5b3VyIFRvYXN0ZXIgUHJvamVjdHMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGFnYWluc3QgdGhlIGhlYWQgb2YgdGhlIG1hc3RlciBicmFuY2gsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBhY3RpdmUgZGV2ZWxvcG1lbnQgdGFrZXMgcGxhY2UsIGF0CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC9jZ2l0LmNnaS9wb2t5L2xvZy8nPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlL2xvZy8nPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TG9jYWwgWW9jdG8gUHJvamVjdCBvciBMb2NhbCBPcGVuRW1iZWRkZWQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVsZWFzZSBjYXVzZXMgeW91ciBUb2FzdGVyIFByb2plY3RzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBhZ2FpbnN0IHRoZSBoZWFkIG9mIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBvciA8ZmlsZW5hbWU+b3BlbmVtYmVkZGVkLWNvcmU8L2ZpbGVuYW1lPiBjbG9uZSB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgbG9jYWwgdG8gdGhlIG1hY2hpbmUgcnVubmluZyBUb2FzdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1yZWxlYXNlcy1jb21wcmlzZWQtb2YnPgorICAgICAgICAgICAgPHRpdGxlPldoYXQgTWFrZXMgVXAgYSBSZWxlYXNlPzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgcmVsZWFzZSBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TmFtZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHJlbGVhc2UgKDxmaWxlbmFtZT5uYW1lPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyByZWxlYXNlIG5hbWUgbmV2ZXIgYXBwZWFycyBpbiB0aGUgdGhlIFRvYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHdlYiBpbnRlcmZhY2UuCisgICAgICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIGEgdXNlciBuZXZlciBzZWVzIHRoZSByZWxlYXNlIG5hbWUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5EZXNjcmlwdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRleHR1YWwgZGVzY3JpcHRpb24gb2YgdGhlIHJlbGVhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+ZGVzY3JpcHRpb248L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGRlc2NyaXB0aW9uIGlzIHdoYXQgdXNlcnMgZW5jb3VudGVyIHdoZW4gY3JlYXRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3RzIHdpdGggdGhlIFRvYXN0ZXIgd2ViIGludGVyZmFjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IGNvbmZpZ3VyZSB5b3VyIHJlbGVhc2UsIGJlIHN1cmUgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICBhIGRlc2NyaXB0aW9uIHRoYXQgc3VmZmljaWVudGx5IGRlc2NyaWJlcyBhbmQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyc3RhbmRhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgVG9hc3RlciBoYXMgbW9yZSB0aGFuIG9uZSByZWxlYXNlIGNvbmZpZ3VyZWQsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSBkZXNjcmlwdGlvbnMgYXBwZWFyIGxpc3RlZCBpbiBhIGRyb3AgZG93biBtZW51CisgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGEgdXNlciBjcmVhdGVzIGEgbmV3IHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiBUb2FzdGVyIGhhcyBvbmx5IG9uZSByZWxlYXNlIGNvbmZpZ3VyZWQsIGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdHMgY3JlYXRlZCB1c2luZyB0aGUgd2ViIGludGVyZmFjZSB0YWtlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2UgYW5kIHRoZSBkcm9wIGRvd24gbWVudSBkb2VzIG5vdCBkaXNwbGF5IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RlciB3ZWIgaW50ZXJmYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Qml0QmFrZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIEJpdGJha2UgdmVyc2lvbiAoPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgdG8gYnVpbGQgbGF5ZXJzIHNldCBpbiB0aGUgY3VycmVudCByZWxlYXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2ZXJzaW9uIGlzIGRlc2NyaWJlZCBieSBhIG5hbWUsIGEgR2l0IFVSTCwgYQorICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoIGluIHRoZSBHaXQgVVJMLCBhbmQgYSBkaXJlY3RvcnkgcGF0aCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBzbmlwcGV0IGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgIGEgVG9hc3RlciBKU09OIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgQml0QmFrZSB2ZXJzaW9uIHVzZXMgdGhlIG1hc3RlciBicmFuY2ggZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCByZXBvc2l0b3J5OgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAiYml0YmFrZSIgOiBbCisgICAgICAgICB7CisgICAgICAgICAgICAgIm5hbWUiOiAibWFzdGVyIiwKKyAgICAgICAgICAgICAiZ2l0dXJsIjogImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UiLAorICAgICAgICAgICAgICJicmFuY2giOiAibWFzdGVyIiwKKyAgICAgICAgICAgICAiZGlycGF0aCI6ICIiCisgICAgICAgICB9CisgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgbW9yZSBkZXRhaWwgb24gZWFjaCBvZiB0aGUgaXRlbXMgdGhhdCBjb21wcmlzZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEJpdEJha2UgdmVyc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5OYW1lOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+bmFtZTwvZmlsZW5hbWU+KSB1c2VkIHRvIHJlZmVyIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB2ZXJzaW9uIG9mIEJpdEJha2UgeW91IGFyZSB1c2luZyB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbmFtZSBpcyBuZXZlciBleHBvc2VkIHRocm91Z2ggVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HaXQgVVJMOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBVUkwgKDxmaWxlbmFtZT5naXR1cmw8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBCaXRCYWtlIEdpdCByZXBvc2l0b3J5IGNsb25lZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgVG9hc3RlciBwcm9qZWN0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CcmFuY2g6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIEdpdCBicmFuY2gsIG9yIHJldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmJyYW5jaDwvZmlsZW5hbWU+KSBvZiB0aGUgQml0QmFrZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5IHVzZWQgd2l0aCBUb2FzdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRpcmVjdG9yeSBQYXRoOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzdWItZGlyZWN0b3J5IG9mIHRoZSBCaXRCYWtlIHJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5kaXJwYXRoPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgR2l0IFVSTCBpbmNsdWRlcyBtb3JlIHRoYW4gb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnksIHlvdSBuZWVkIHRvIHNldCB0aGlzIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIFVSTCBkb2VzIG5vdCBpbmNsdWRlIG1vcmUgdGhhbiBhIHNpbmdsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5LCB5b3UgY2FuIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlycGF0aDwvZmlsZW5hbWU+IHRvIGEgbnVsbCBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4gIiIpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnJhbmNoOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnJhbmNoIGZvciB0aGUgbGF5ZXIgc291cmNlCisgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmJyYW5jaDwvZmlsZW5hbWU+KSB1c2VkIHdpdGggdGhlIHJlbGVhc2UuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZm9yIHRoZSBPcGVuRW1iZWRkZWQgbGF5ZXIgc291cmNlLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICJtYXN0ZXIiLCAiZmlkbyIsIGFuZCAiZGl6enkiIGJyYW5jaGVzIGFyZSBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5EZWZhdWx0IExheWVyczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHNldCBvZiBkZWZhdWx0IGxheWVycworICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5kZWZhdWx0bGF5ZXJzPC9maWxlbmFtZT4pIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkIHRvIHRoZSBwcm9qZWN0IGNvbmZpZ3VyYXRpb24gd2hlbiBhIHByb2plY3QgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5MYXllciBTb3VyY2UgUHJpb3JpdGllczwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBBIHNwZWNpZmljYXRpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2xheWVyLXNvdXJjZSc+bGF5ZXIgc291cmNlPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdGllcyAoPGZpbGVuYW1lPmxheWVyc291cmNlcHJpb3JpdHk8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICBJbiBvcmRlciBmb3IgVG9hc3RlciB0byB3b3JrIGFzIGludGVuZGVkLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICJJbXBvcnRlZCBsYXllcnMiIGxheWVyIHNvdXJjZSBzaG91bGQgaGF2ZSB0aGUgaGlnaGVzdAorICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHksIHdoaWNoIG1lYW5zIHRoYXQgbGF5ZXJzIG1hbnVhbGx5IGltcG9ydGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICB1c2VycyB3aXRoIHRoZSAiSW1wb3J0IGxheWVyIiBmdW5jdGlvbmFsaXR5IHdpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsd2F5cyBiZSB2aXNpYmxlIGFuZCBhdmFpbGFibGUgZm9yIHNlbGVjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkhlbHAgVGV4dDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgSGVscCB0ZXh0ICg8ZmlsZW5hbWU+aGVscHRleHQ8L2ZpbGVuYW1lPikgdGhhdCBleHBsYWlucworICAgICAgICAgICAgICAgICAgICAgICAgd2hhdCB0aGUgcmVsZWFzZSBkb2VzIHdoZW4gc2VsZWN0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGhlbHAgdGV4dCBhcHBlYXJzIGJlbG93IHRoZSByZWxlYXNlIGRyb3AtZG93bgorICAgICAgICAgICAgICAgICAgICAgICAgbWVudSB3aGVuIHlvdSBjcmVhdGUgYSBUb2FzdGVyIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgaGVscCB0ZXh0IHNob3VsZCBhc3Npc3QgdXNlcnMgaW4gbWFraW5nIHRoZSBjb3JyZWN0CisgICAgICAgICAgICAgICAgICAgICAgICBkZWNpc2lvbiByZWdhcmRpbmcgdGhlIHJlbGVhc2UgdG8gdXNlIGZvciBhIGdpdmVuCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHN1bW1hcml6ZSB3aGF0IGNvbXByaXNlcyBhIHJlbGVhc2UsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICBleGFtcGxlIGZyb20gYSBUb2FzdGVyIEpTT04gZmlsZS4KKyAgICAgICAgICAgICAgICBUaGUgY29uZmlndXJhdGlvbiBuYW1lcyB0aGUgcmVsZWFzZSAibWFzdGVyIiBhbmQgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAibWFzdGVyIiBicmFuY2ggcHJvdmlkZWQgYnkgdGhlIGxheWVyIHNvdXJjZSBvZiB0eXBlCisgICAgICAgICAgICAgICAgImxheWVyaW5kZXgiLCB3aGljaCBpcyBjYWxsZWQgIk9wZW5FbWJlZGRlZCIsIGFuZCBzZXRzCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5vcGVuZW1iZWRkZWQtY29yZTwvZmlsZW5hbWU+IGxheWVyIGFzIHRoZSBvbmUKKyAgICAgICAgICAgICAgICB0byBiZSBhZGRlZCBieSBkZWZhdWx0IHRvIGFueSBwcm9qZWN0cyBjcmVhdGVkIGluIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgVGhlIEJpdEJha2UgdmVyc2lvbiB1c2VkIHdvdWxkIGJlIGRlZmluZWQgYXMgc2hvd24gZWFybGllcgorICAgICAgICAgICAgICAgIGluIHRoZSBwcmV2aW91cyBsaXN0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgInJlbGVhc2VzIjogWworICAgICAgICAgeworICAgICAgICAgICAgICJuYW1lIjogIm1hc3RlciIsCisgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9wZW5FbWJlZGRlZCBtYXN0ZXIiLAorICAgICAgICAgICAgICJiaXRiYWtlIjogIm1hc3RlciIsCisgICAgICAgICAgICAgImJyYW5jaCI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgICJkZWZhdWx0bGF5ZXJzIjogWyAib3BlbmVtYmVkZGVkLWNvcmUiIF0sCisgICAgICAgICAgICAgImxheWVyc291cmNlcHJpb3JpdHkiOiB7ICJJbXBvcnRlZCBsYXllcnMiOiA5OSwgIkxvY2FsIE9wZW5FbWJlZGRlZCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAorICAgICAgICAgICAgICJoZWxwdGV4dCI6ICJUb2FzdGVyIHdpbGwgcnVuIHlvdXIgYnVpbGRzIHVzaW5nIHRoZSBPcGVuRW1iZWRkZWQgbWFzdGVyIGJyYW5jaCwgd2hlcmUgYWN0aXZlIGRldmVsb3BtZW50IHRha2VzIHBsYWNlLiBUaGlzIGlzIG5vdCBhIHN0YWJsZSBicmFuY2gsIHNvIHlvdXIgYnVpbGRzIG1pZ2h0IG5vdCB3b3JrIGFzIGV4cGVjdGVkLiIKKyAgICAgICAgIH0KKyAgICAgXQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWpzb24tZmlsZXMnPgorICAgICAgICA8dGl0bGU+SlNPTiBGaWxlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgYXJlIGdvaW5nIHRvIGJlIHVzaW5nIFRvYXN0ZXIgaW4gQnVpbGQgTW9kZSwgaXQgbXVzdAorICAgICAgICAgICAgYmUgaW5pdGlhbGx5IGNvbmZpZ3VyZWQgYmVmb3JlIHVzZS4KKyAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gY3VzdG9taXplcyBsYXllciBzb3VyY2Ugc2V0dGluZ3MgYW5kIFRvYXN0ZXIgZGVmYXVsdHMKKyAgICAgICAgICAgIGZvciBhbGwgdXNlcnMgYW5kIGlzIHBlcmZvcm1lZCBieSB0aGUgcGVyc29uIHJlc3BvbnNpYmxlIGZvcgorICAgICAgICAgICAgVG9hc3RlciBDb25maWd1cmF0aW9uIChpLmUgIHRoZSBUb2FzdGVyIEFkbWluaXN0cmF0b3IpLgorICAgICAgICAgICAgVGhlIFRvYXN0ZXIgQWRtaW5pc3RyYXRvciBwZXJmb3JtcyB0aGlzIGNvbmZpZ3VyYXRpb24gdGhyb3VnaCB0aGUKKyAgICAgICAgICAgIERqYW5nbyBhZG1pbmlzdHJhdGlvbiBpbnRlcmZhY2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIG1ha2UgaXQgZWFzaWVyIHRvIGluaXRpYWxseSBzdGFydCBUb2FzdGVyLCB5b3UgY2FuIGltcG9ydCBhCisgICAgICAgICAgICBwcmUtZGVmaW5lZCBjb25maWd1cmF0aW9uIGZpbGUgdXNpbmcgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd0b2FzdGVyLWNvbW1hbmQtbG9hZGNvbmYnPjxmaWxlbmFtZT5sb2FkY29uZjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY29tbWFuZC4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBjb25maWd1cmF0aW9uIGZpbGUgaXMgYSBKU09OLWZvcm1hdHRlZCB0ZXh0IGZpbGUgd2l0aAorICAgICAgICAgICAgICAgIHNwZWNpZmljIGZpZWxkcyB0aGF0IFRvYXN0ZXIgcmVjb2duaXplcy4KKyAgICAgICAgICAgICAgICBJdCBpcyBub3QgYSBkYXRhIGR1bXAgZnJvbSB0aGUgZGF0YWJhc2UsIHNvIGl0IGNhbm5vdCBiZQorICAgICAgICAgICAgICAgIGxvYWRlZCBkaXJlY3RseSBpbiB0aGUgZGF0YWJhc2UuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJ5IGNvbnZlbnRpb24sIHRoZSBzdXBwbGllZCBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSBuYW1lZAorICAgICAgICAgICAgPGZpbGVuYW1lPnRvYXN0ZXJjb25mLmpzb248L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFRoZSBUb2FzdGVyIEFkbWluaXN0cmF0b3IgY2FuIGN1c3RvbWl6ZSB0aGUgZmlsZSBwcmlvciB0byBsb2FkaW5nCisgICAgICAgICAgICBpdCBpbnRvIFRvYXN0ZXIuCisgICAgICAgICAgICBXaGVuIHlvdSBzZXQgdXAgVG9hc3RlciBsb2NhbGx5IHRvIHJ1biBpbiBCdWlsZCBNb2RlLCB0aGUgc3lzdGVtCisgICAgICAgICAgICBzdGFydHVwIHNjcmlwdCBhY3RpdmVseSBsb29rcyBmb3IgY29tcGF0aWJsZSBjb25maWd1cmF0aW9uIGZpbGVzCisgICAgICAgICAgICBhbmQgcHJvbXB0cyB5b3UgdG8gc2VsZWN0IGEgZmlsZSB0byBsb2FkIGlmIGl0IGRldGVjdHMgdGhhdCB0aGUKKyAgICAgICAgICAgIGRhdGFiYXNlIGhhcyBub3QgYmVlbiBjb25maWd1cmVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2pzb24tZmlsZS1jaG9pY2VzJz4KKyAgICAgICAgICAgIDx0aXRsZT5Db25maWd1cmF0aW9uIEZpbGUgQ2hvaWNlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRocmVlIHZlcnNpb25zIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZXhpc3Q6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0by9jb25mL3RvYXN0ZXJjb25mLmpzb248L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCdzIDxmaWxlbmFtZT5tZXRhLXlvY3RvPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHZlcnNpb24gY29udGFpbnMgdGhlIGRlZmF1bHQgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmb3IgVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBhcmUgcHJvbXB0ZWQgdG8gc2VsZWN0IHRoaXMgZmlsZSBkdXJpbmcgdGhlIFRvYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldCB1cCBwcm9jZXNzIGlmIHlvdSBjbG9uZWQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IHJlcG9zaXRvcnkgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4mWU9DVE9fR0lUX1VSTDsvcG9reTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1ldGEvY29uZi90b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCdzIDxmaWxlbmFtZT5vcGVuZW1iZWRkZWQtY29yZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmVyc2lvbiBjb250YWlucyB0aGUgZGVmYXVsdCBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZm9yIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgYXJlIHByb21wdGVkIHRvIHNlbGVjdCB0aGlzIGZpbGUgZHVyaW5nIHRoZSBUb2FzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdXAgcHJvY2VzcyBpZiB5b3UgaGFkIGNsb25lZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vcGVuZW1iZWRkZWQtY29yZTwvZmlsZW5hbWU+IHJlcG9zaXRvcnkgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlRvYXN0ZXJjb25mLmpzb24udHh0LnBhdGNoPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0ZWQgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL0ZpbGU6VG9hc3RlcmNvbmYuanNvbi50eHQucGF0Y2gnPkZpbGU6VG9hc3RlcmNvbmYuanNvbi50eHQucGF0Y2g8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgd2lraSBwYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2ZXJzaW9uIG9mIHRoZSBmaWxlIGlzIHVzZWZ1bCBhcyBhIHNhbXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmb3Igd2hlbiB5b3Ugd2FudCB0byBzZXQgdXAgVG9hc3RlciBhcyBhCisgICAgICAgICAgICAgICAgICAgICAgICBob3N0ZWQgc2VydmljZSBpbiBCdWlsZCBNb2RlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nanNvbi1zdHJ1Y3R1cmUnPgorICAgICAgICAgICAgPHRpdGxlPkZpbGUgU3RydWN0dXJlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4gZmlsZSBjb25zaXN0cyBvZgorICAgICAgICAgICAgICAgIGVhc2lseSByZWFkYWJsZSBhcmVhczogY29uZmlndXJhdGlvbiwgbGF5ZXIgc291cmNlcywgQml0QmFrZSwKKyAgICAgICAgICAgICAgICBkZWZhdWx0IHJlbGVhc2UsIGFuZCByZWxlYXNlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2pzb24tY29uZmlnLWFyZWEnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Db25maWd1cmF0aW9uIEFyZWE8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgYXJlYSBvZiB0aGUgSlNPTiBmaWxlIHNldHMgd2hpY2ggdmFyaWFibGVzIGFyZSBleHBvc2VkCisgICAgICAgICAgICAgICAgICAgIHRvIHVzZXJzIHRocm91Z2ggdGhlIFRvYXN0ZXIgd2ViIGludGVyZmFjZS4KKyAgICAgICAgICAgICAgICAgICAgVXNlcnMgY2FuIGVhc2lseSBlZGl0IHRoZXNlIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlcyB5b3Ugc2V0IGhlcmUgYXJlIGRpc3BsYXllZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIkNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIiBwYWdlIGluIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgIE1pbmltYWxseSwgeW91IHNob3VsZCBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHdoaWNoIGFwcGVhcnMgdG8gdXNlcnMgYXMgcGFydCBvZiB0aGUgcHJvamVjdAorICAgICAgICAgICAgICAgICAgICBwYWdlIGluIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGRlZmF1bHQgPGZpbGVuYW1lPmNvbmZpZzwvZmlsZW5hbWU+IGFyZWE6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgImNvbmZpZyI6IHsKKyAgICAgICAgICJNQUNISU5FIiAgICAgIDogInFlbXV4ODYiLAorICAgICAgICAgIkRJU1RSTyIgICAgICAgOiAicG9reSIsCisgICAgICAgICAiSU1BR0VfRlNUWVBFUyI6ICJleHQzIGpmZnMyIHRhci5iejIiLAorICAgICAgICAgIklNQUdFX0lOU1RBTExfYXBwZW5kIjogIiIsCisgICAgICAgICAiUEFDS0FHRV9DTEFTU0VTIjogInBhY2thZ2VfcnBtIiwKKyAgICAgICAgICJTREtNQUNISU5FIiAgIDogIng4Nl82NCIKKyAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2pzb24tbGF5ZXJzb3VyY2VzLWFyZWEnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5MYXllciBTb3VyY2VzIEFyZWE8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgYXJlYSBvZiB0aGUgSlNPTiBmaWxlIGRlZmluZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2xheWVyLXNvdXJjZSc+bGF5ZXIgc291cmNlczwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgVG9hc3RlciB1c2VzLgorICAgICAgICAgICAgICAgICAgICBUb2FzdGVyIHJlYWRzIGxheWVyIGluZm9ybWF0aW9uIGZyb20gbGF5ZXIgc291cmNlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhyZWUgdHlwZXMgb2YgbGF5ZXIgc291cmNlcyBleGlzdCB0aGF0IFRvYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgcmVjb2duaXplczogTG9jYWwsIExheWVySW5kZXgsIGFuZCBJbXBvcnRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIExvY2FsIGxheWVyIHNvdXJjZSByZWFkcyBsYXllcnMgZnJvbSBHaXQgY2xvbmVzCisgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBvbiB5b3VyIGxvY2FsIGRyaXZlLgorICAgICAgICAgICAgICAgICAgICBVc2luZyBhIGxvY2FsIGxheWVyIHNvdXJjZSBlbmFibGVzIHlvdSB0byBlYXNpbHkgdGVzdAorICAgICAgICAgICAgICAgICAgICBUb2FzdGVyLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgc2V0dGluZyB1cCBhIGhvc3RlZCB2ZXJzaW9uIG9mIFRvYXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBpdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIGhhdmUgYSBsb2NhbCBsYXllciBzb3VyY2UuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIExheWVySW5kZXggbGF5ZXIgc291cmNlIHVzZXMgYSBSRVNUIEFQSSBleHBvc2VkIGJ5CisgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlcyBvZiB0aGUgTGF5ZXIgSW5kZXggYXBwbGljYXRpb24gKGUuZyB0aGUgcHVibGljCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZy8nPjwvdWxpbms+KQorICAgICAgICAgICAgICAgICAgICB0byByZWFkIGxheWVyIGRhdGEuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBJbXBvcnRlZCBsYXllciBzb3VyY2UgaXMgcmVzZXJ2ZWQgZm9yIGxheWVyIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgbWFudWFsbHkgaW50cm9kdWNlZCBieSB0aGUgdXNlciBvciBUb2FzdGVyIEFkbWluaXN0cmF0b3IKKyAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgR1VJLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGxheWVyIHNvdXJjZSBsZXRzIHVzZXJzIGltcG9ydCB0aGVpciBvd24gbGF5ZXJzCisgICAgICAgICAgICAgICAgICAgIGFuZCBidWlsZCB0aGVtIHdpdGggVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBub3QgcmVtb3ZlIHRoZSBpbXBvcnRlZCBsYXllciBzb3VyY2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGRlZmF1bHQgPGZpbGVuYW1lPmxheWVyc291cmNlczwvZmlsZW5hbWU+IGFyZWE6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgImxheWVyc291cmNlcyI6IFsKKyAgICAgICAgIHsKKyAgICAgICAgICAgICAibmFtZSI6ICJMb2NhbCBZb2N0byBQcm9qZWN0IiwKKyAgICAgICAgICAgICAic291cmNldHlwZSI6ICJsb2NhbCIsCisgICAgICAgICAgICAgImFwaXVybCI6ICIuLi8uLi8iLAorICAgICAgICAgICAgICJicmFuY2hlcyI6IFsiSEVBRCIsICJtYXN0ZXIiLCAiZmlkbyIsICJkaXp6eSJdLAorICAgICAgICAgICAgICJsYXllcnMiOiBbCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICJuYW1lIjogIm9wZW5lbWJlZGRlZC1jb3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICJsb2NhbF9wYXRoIjogIm1ldGEiLAorICAgICAgICAgICAgICAgICAgICAgInZjc191cmwiOiAicmVtb3RlOm9yaWdpbiIsCisgICAgICAgICAgICAgICAgICAgICAiZGlycGF0aCI6ICJtZXRhIgorICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJtZXRhLXlvY3RvIiwKKyAgICAgICAgICAgICAgICAgICAgICJsb2NhbF9wYXRoIjogIm1ldGEteW9jdG8iLAorICAgICAgICAgICAgICAgICAgICAgInZjc191cmwiOiAicmVtb3RlOm9yaWdpbiIsCisgICAgICAgICAgICAgICAgICAgICAiZGlycGF0aCI6ICJtZXRhLXlvY3RvIgorICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJtZXRhLXlvY3RvLWJzcCIsCisgICAgICAgICAgICAgICAgICAgICAibG9jYWxfcGF0aCI6ICJtZXRhLXlvY3RvLWJzcCIsCisgICAgICAgICAgICAgICAgICAgICAidmNzX3VybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICAgICAgICAgICJkaXJwYXRoIjogIm1ldGEteW9jdG8tYnNwIgorICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICBdCisgICAgICAgICB9LAorICAgICAgICAgeworICAgICAgICAgICAgICJuYW1lIjogIk9wZW5FbWJlZGRlZCIsCisgICAgICAgICAgICAgInNvdXJjZXR5cGUiOiAibGF5ZXJpbmRleCIsCisgICAgICAgICAgICAgImFwaXVybCI6ICJodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcvbGF5ZXJpbmRleC9hcGkvIiwKKyAgICAgICAgICAgICAiYnJhbmNoZXMiOiBbIm1hc3RlciIsICJmaWRvIiwgImRpenp5Il0KKyAgICAgICAgIH0sCisgICAgICAgICB7CisgICAgICAgICAgICAgIm5hbWUiOiAiSW1wb3J0ZWQgbGF5ZXJzIiwKKyAgICAgICAgICAgICAic291cmNldHlwZSI6ICJpbXBvcnRlZCIsCisgICAgICAgICAgICAgImFwaXVybCI6ICIiLAorICAgICAgICAgICAgICJicmFuY2hlcyI6IFsibWFzdGVyIiwgImZpZG8iLCAiZGl6enkiLCAiSEVBRCJdCisKKyAgICAgICAgIH0KKyAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2pzb24tYml0YmFrZS1hcmVhJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+Qml0QmFrZSBBcmVhPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGFyZWEgb2YgdGhlIEpTT04gZmlsZSBkZWZpbmVzIHRoZSB2ZXJzaW9uIG9mCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgVG9hc3RlciB1c2VzLgorICAgICAgICAgICAgICAgICAgICBBcyBzaGlwcGVkLCBUb2FzdGVyIGlzIGNvbmZpZ3VyZWQgdG8gcmVjb2duaXplIGZvdXIKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbnMgb2YgQml0QmFrZTogbWFzdGVyLCBmaWRvLCBkaXp6eSwgYW5kIEhFQUQuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgSEVBRCBpcyBhIHNwZWNpYWwgb3B0aW9uIHRoYXQgYnVpbGRzIHdoYXRldmVyIGlzCisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgb24gZGlzaywgd2l0aG91dCBjaGVja2luZyBvdXQgYW55IHJlbW90ZQorICAgICAgICAgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBkZWZhdWx0IDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gYXJlYToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAiYml0YmFrZSIgOiBbCisgICAgICAgICB7CisgICAgICAgICAgICAgIm5hbWUiOiAibWFzdGVyIiwKKyAgICAgICAgICAgICAiZ2l0dXJsIjogInJlbW90ZTpvcmlnaW4iLAorICAgICAgICAgICAgICJicmFuY2giOiAibWFzdGVyIiwKKyAgICAgICAgICAgICAiZGlycGF0aCI6ICJiaXRiYWtlIgorICAgICAgICAgfSwKKyAgICAgICAgIHsKKyAgICAgICAgICAgICAibmFtZSI6ICJmaWRvIiwKKyAgICAgICAgICAgICAiZ2l0dXJsIjogInJlbW90ZTpvcmlnaW4iLAorICAgICAgICAgICAgICJicmFuY2giOiAiZmlkbyIsCisgICAgICAgICAgICAiZGlycGF0aCI6ICJiaXRiYWtlIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAgIm5hbWUiOiAiZGl6enkiLAorICAgICAgICAgICAgICJnaXR1cmwiOiAicmVtb3RlOm9yaWdpbiIsCisgICAgICAgICAgICAgImJyYW5jaCI6ICJkaXp6eSIsCisgICAgICAgICAgICAgImRpcnBhdGgiOiAiYml0YmFrZSIKKyAgICAgICAgIH0sCisgICAgICAgICB7CisgICAgICAgICAgICAgIm5hbWUiOiAiSEVBRCIsCisgICAgICAgICAgICAgImdpdHVybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICAiYnJhbmNoIjogIkhFQUQiLAorICAgICAgICAgICAgICJkaXJwYXRoIjogImJpdGJha2UiCisgICAgICAgICB9CisgICAgIF0sCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdqc29uLWRlZmF1bHQtYXJlYSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkRlZmF1bHQgQXJlYTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBhcmVhIG9mIHRoZSBKU09OIGZpbGUgZXN0YWJsaXNoZXMgYSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgIHJlbGVhc2UgdXNlZCBieSBUb2FzdGVyLgorICAgICAgICAgICAgICAgICAgICBBcyBzaGlwcGVkLCBUb2FzdGVyIHVzZXMgdGhlICJtYXN0ZXIiIHJlbGVhc2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIHN0YXRlbWVudCBpbiB0aGUgSlNPTiBmaWxlIHRoYXQgZXN0YWJsaXNoZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIGRlZmF1bHQgcmVsZWFzZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAiZGVmYXVsdHJlbGVhc2UiOiAibWFzdGVyIiwKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2pzb24tcmVsZWFzZXMtYXJlYSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPlJlbGVhc2VzIEFyZWE8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgYXJlYSBvZiB0aGUgSlNPTiBmaWxlIGRlZmluZXMgdGhlIHZlcnNpb25zIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIFRvYXN0ZXIgcmVjb2duaXplcy4KKyAgICAgICAgICAgICAgICAgICAgQXMgc2hpcHBlZCwgVG9hc3RlciBpcyBjb25maWd1cmVkIHRvIHdvcmsgd2l0aCB0aGUgZm91cgorICAgICAgICAgICAgICAgICAgICByZWxlYXNlcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd0b2FzdGVyLXJlbGVhc2VzLXN1cHBvcnRlZCc+UHJlLUNvbmZpZ3VyZWQgUmVsZWFzZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBkZWZhdWx0IDxmaWxlbmFtZT5yZWxlYXNlczwvZmlsZW5hbWU+IGFyZWE6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgInJlbGVhc2VzIjogWworICAgICAgICAgeworICAgICAgICAgICAgICJuYW1lIjogIm1hc3RlciIsCisgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIllvY3RvIFByb2plY3QgbWFzdGVyIiwKKyAgICAgICAgICAgICAiYml0YmFrZSI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgICJicmFuY2giOiAibWFzdGVyIiwKKyAgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiwgIm1ldGEteW9jdG8iLCAibWV0YS15b2N0by1ic3AiXSwKKyAgICAgICAgICAgICAibGF5ZXJzb3VyY2Vwcmlvcml0eSI6IHsgIkltcG9ydGVkIGxheWVycyI6IDk5LCAiTG9jYWwgWW9jdG8gUHJvamVjdCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAorICAgICAgICAgICAgICJoZWxwdGV4dCI6ICJUb2FzdGVyIHdpbGwgcnVuIHlvdXIgYnVpbGRzIHVzaW5nIHRoZSB0aXAgb2YgdGhlICZsdDthIGhyZWY9XCJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wb2t5L2xvZy9cIiZndDtZb2N0byBQcm9qZWN0IG1hc3RlciBicmFuY2gmbHQ7L2EmZ3Q7LCB3aGVyZSBhY3RpdmUgZGV2ZWxvcG1lbnQgdGFrZXMgcGxhY2UuIFRoaXMgaXMgbm90IGEgc3RhYmxlIGJyYW5jaCwgc28geW91ciBidWlsZHMgbWlnaHQgbm90IHdvcmsgYXMgZXhwZWN0ZWQuIgorICAgICAgICAgfSwKKyAgICAgICAgIHsKKyAgICAgICAgICAgICAibmFtZSI6ICJmaWRvIiwKKyAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiWW9jdG8gUHJvamVjdCAxLjggRmlkbyIsCisgICAgICAgICAgICAgImJpdGJha2UiOiAiZmlkbyIsCisgICAgICAgICAgICAgImJyYW5jaCI6ICJmaWRvIiwKKyAgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiwgIm1ldGEteW9jdG8iLCAibWV0YS15b2N0by1ic3AiXSwKKyAgICAgICAgICAgICAibGF5ZXJzb3VyY2Vwcmlvcml0eSI6IHsgIkltcG9ydGVkIGxheWVycyI6IDk5LCAiTG9jYWwgWW9jdG8gUHJvamVjdCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAorICAgICAgICAgICAgICJoZWxwdGV4dCI6ICJUb2FzdGVyIHdpbGwgcnVuIHlvdXIgYnVpbGRzIHdpdGggdGhlIHRpcCBvZiB0aGUgJmx0O2EgaHJlZj1cImh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL3Bva3kvbG9nLz9oPWZpZG9cIiZndDtZb2N0byBQcm9qZWN0IDEuOCBcIkZpZG9cIiZsdDsvYSZndDsgYnJhbmNoLiIKKyAgICAgICAgIH0sCisgICAgICAgICB7CisgICAgICAgICAgICAgIm5hbWUiOiAiZGl6enkiLAorICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJZb2N0byBQcm9qZWN0IDEuNyBEaXp6eSIsCisgICAgICAgICAgICAgImJpdGJha2UiOiAiZGl6enkiLAorICAgICAgICAgICAgICJicmFuY2giOiAiZGl6enkiLAorICAgICAgICAgICAgICJkZWZhdWx0bGF5ZXJzIjogWyAib3BlbmVtYmVkZGVkLWNvcmUiLCAibWV0YS15b2N0byIsICJtZXRhLXlvY3RvLWJzcCJdLAorICAgICAgICAgICAgICJsYXllcnNvdXJjZXByaW9yaXR5IjogeyAiSW1wb3J0ZWQgbGF5ZXJzIjogOTksICJMb2NhbCBZb2N0byBQcm9qZWN0IiA6IDEwLCAiT3BlbkVtYmVkZGVkIiA6ICAwIH0sCisgICAgICAgICAgICAgImhlbHB0ZXh0IjogIlRvYXN0ZXIgd2lsbCBydW4geW91ciBidWlsZHMgd2l0aCB0aGUgdGlwIG9mIHRoZSAmbHQ7YSBocmVmPVwiaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvcG9reS9sb2cvP2g9ZGl6enlcIiZndDtZb2N0byBQcm9qZWN0IDEuNyBcIkRpenp5XCImbHQ7L2EmZ3Q7IGJyYW5jaC4iCisgICAgICAgICB9LAorICAgICAgICAgeworICAgICAgICAgICAgICJuYW1lIjogImxvY2FsIiwKKyAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9jYWwgWW9jdG8gUHJvamVjdCIsCisgICAgICAgICAgICAgImJpdGJha2UiOiAiSEVBRCIsCisgICAgICAgICAgICAgImJyYW5jaCI6ICJIRUFEIiwKKyAgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiwgIm1ldGEteW9jdG8iLCAibWV0YS15b2N0by1ic3AiXSwKKyAgICAgICAgICAgICAibGF5ZXJzb3VyY2Vwcmlvcml0eSI6IHsgIkltcG9ydGVkIGxheWVycyI6IDk5LCAiTG9jYWwgWW9jdG8gUHJvamVjdCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAorICAgICAgICAgICAgICJoZWxwdGV4dCI6ICJUb2FzdGVyIHdpbGwgcnVuIHlvdXIgYnVpbGRzIHdpdGggdGhlIHZlcnNpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgeW91IGhhdmUgY2xvbmVkIG9yIGRvd25sb2FkZWQgdG8geW91ciBjb21wdXRlci4iCisgICAgICAgICB9CisgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLXVzZWZ1bC1jb21tYW5kcyc+CisgICAgICAgIDx0aXRsZT5Vc2VmdWwgQ29tbWFuZHM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW4gYWRkaXRpb24gdG8gdGhlIHdlYiB1c2VyIGludGVyZmFjZSBhbmQgdGhlIHNjcmlwdHMgdGhhdCBzdGFydAorICAgICAgICAgICAgYW5kIHN0b3AgVG9hc3RlciwgY29tbWFuZC1saW5lIGNvbW1hbmRzIGV4aXN0IHRocm91Z2ggdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWFuYWdlLnB5PC9maWxlbmFtZT4gbWFuYWdlbWVudCBzY3JpcHQuCisgICAgICAgICAgICBZb3UgY2FuIGZpbmQgZ2VuZXJhbCBkb2N1bWVudGF0aW9uIG9uCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWFuYWdlLnB5PC9maWxlbmFtZT4gYXQgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vZW4vMS43L3RvcGljcy9zZXR0aW5ncy8nPkRqYW5nbzwvdWxpbms+CisgICAgICAgICAgICBzaXRlLgorICAgICAgICAgICAgSG93ZXZlciwgc2V2ZXJhbCA8ZmlsZW5hbWU+bWFuYWdlLnB5PC9maWxlbmFtZT4gY29tbWFuZHMgaGF2ZSBiZWVuCisgICAgICAgICAgICBjcmVhdGVkIHRoYXQgYXJlIHNwZWNpZmljIHRvIFRvYXN0ZXIgYW5kIGFyZSB1c2VkIHRvIGNvbnRyb2wKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gYW5kIGJhY2stZW5kIHRhc2tzLgorICAgICAgICAgICAgWW91IGNhbiBsb2NhdGUgdGhlc2UgY29tbWFuZHMgaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4pIGF0CisgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS9saWIvbWFuYWdlLnB5PC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZG9jdW1lbnRzIHRob3NlIGNvbW1hbmRzLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gdXNpbmcgPGZpbGVuYW1lPm1hbmFnZS5weTwvZmlsZW5hbWU+IGNvbW1hbmRzIGdpdmVuCisgICAgICAgICAgICAgICAgICAgIGEgZGVmYXVsdCBjb25maWd1cmF0aW9uLCB5b3UgbXVzdCBiZSBzdXJlIHRoYXQgeW91cgorICAgICAgICAgICAgICAgICAgICB3b3JraW5nIGRpcmVjdG9yeSBpcyBzZXQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIFVzaW5nIDxmaWxlbmFtZT5tYW5hZ2UucHk8L2ZpbGVuYW1lPiBjb21tYW5kcyBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICBCdWlsZCBEaXJlY3RvcnkgYWxsb3dzIFRvYXN0ZXIgdG8gZmluZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRvYXN0ZXIuc3FsaXRlPC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMgbG9jYXRlZAorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3Igbm9uLWRlZmF1bHQgZGF0YWJhc2UgY29uZmlndXJhdGlvbnMsIGl0IGlzIHBvc3NpYmxlCisgICAgICAgICAgICAgICAgICAgIHRoYXQgeW91IGNhbiB1c2UgPGZpbGVuYW1lPm1hbmFnZS5weTwvZmlsZW5hbWU+IGNvbW1hbmRzCisgICAgICAgICAgICAgICAgICAgIGZyb20gYSBkaXJlY3Rvcnkgb3RoZXIgdGhhbiB0aGUgQnVpbGQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBUbyBkbyBzbywgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50b2FzdGVybWFpbi9zZXR0aW5ncy5weTwvZmlsZW5hbWU+IGZpbGUgbXVzdCBiZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmVkIHRvIHBvaW50IHRvIHRoZSBjb3JyZWN0IGRhdGFiYXNlIGJhY2tlbmQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItY29tbWFuZC1idWlsZHNsaXN0Jz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGRzbGlzdDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5idWlsZHNsaXN0PC9maWxlbmFtZT4gY29tbWFuZCBsaXN0cyBhbGwgYnVpbGRzCisgICAgICAgICAgICAgICAgdGhhdCBUb2FzdGVyIGhhcyByZWNvcmRlZC4KKyAgICAgICAgICAgICAgICBBY2Nlc3MgdGhlIGNvbW1hbmQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgYnVpbGRzbGlzdAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgY29tbWFuZCByZXR1cm5zIGEgbGlzdCwgd2hpY2ggaW5jbHVkZXMgbnVtZXJpYworICAgICAgICAgICAgICAgIGlkZW50aWZpY2F0aW9ucywgb2YgdGhlIGJ1aWxkcyB0aGF0IFRvYXN0ZXIgaGFzIHJlY29yZGVkIGluIHRoZQorICAgICAgICAgICAgICAgIGN1cnJlbnQgZGF0YWJhc2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHJ1biB0aGUgPGZpbGVuYW1lPmJ1aWxkc2xpc3Q8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICAgICAgZmlyc3QgdG8gaWRlbnRpZnkgZXhpc3RpbmcgYnVpbGRzIGluIHRoZSBkYXRhYmFzZSBiZWZvcmUKKyAgICAgICAgICAgICAgICB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd0b2FzdGVyLWNvbW1hbmQtYnVpbGRkZWxldGUnPjxmaWxlbmFtZT5idWlsZGRlbGV0ZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgYXNzdW1lcyBkZWZhdWx0IHJlcG9zaXRvcnkgYW5kIGJ1aWxkCisgICAgICAgICAgICAgICAgZGlyZWN0b3J5IG5hbWVzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L3Bva3kvYnVpbGQKKyAgICAgJCBweXRob24gLi4vYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgYnVpbGRzbGlzdAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJZiB5b3VyIFRvYXN0ZXIgZGF0YWJhc2UgaGFkIG9ubHkgb25lIGJ1aWxkLCB0aGUgYWJvdmUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGRzbGlzdDwvZmlsZW5hbWU+IGNvbW1hbmQgd291bGQgcmV0dXJuIHNvbWV0aGluZworICAgICAgICAgICAgICAgIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDE6IHFlbXV4ODYgcG9reSBjb3JlLWltYWdlLW1pbmltYWwKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1jb21tYW5kLWJ1aWxkZGVsZXRlJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGRkZWxldGU8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YnVpbGRkZWxldGU8L2ZpbGVuYW1lPiBjb21tYW5kIGRlbGV0ZXMgZGF0YQorICAgICAgICAgICAgICAgIGFzc29jaWF0ZWQgd2l0aCBhIGJ1aWxkLgorICAgICAgICAgICAgICAgIEFjY2VzcyB0aGUgY29tbWFuZCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBidWlsZGRlbGV0ZSA8cmVwbGFjZWFibGU+YnVpbGRfaWQ8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgY29tbWFuZCBkZWxldGVzIGFsbCB0aGUgYnVpbGQgZGF0YSBmb3IgdGhlIHNwZWNpZmllZAorICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5idWlsZF9pZDwvcmVwbGFjZWFibGU+LgorICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBpcyB1c2VmdWwgZm9yIHJlbW92aW5nIG9sZCBhbmQgdW51c2VkIGRhdGEgZnJvbQorICAgICAgICAgICAgICAgIHRoZSBkYXRhYmFzZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUHJpb3IgdG8gcnVubmluZyB0aGUgPGZpbGVuYW1lPmJ1aWxkZGVsZXRlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb21tYW5kLCB5b3UgbmVlZCB0byBnZXQgdGhlIElEIGFzc29jaWF0ZWQgd2l0aCBidWlsZHMKKyAgICAgICAgICAgICAgICBieSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd0b2FzdGVyLWNvbW1hbmQtYnVpbGRzbGlzdCc+PGZpbGVuYW1lPmJ1aWxkc2xpc3Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBjb21tYW5kLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItY29tbWFuZC1wZXJmJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+cGVyZjwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5wZXJmPC9maWxlbmFtZT4gY29tbWFuZCBtZWFzdXJlcyBUb2FzdGVyCisgICAgICAgICAgICAgICAgcGVyZm9ybWFuY2UuCisgICAgICAgICAgICAgICAgQWNjZXNzIHRoZSBjb21tYW5kIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IHBlcmYKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIGNvbW1hbmQgaXMgYSBzYW5pdHkgY2hlY2sgdGhhdCByZXR1cm5zIHBhZ2UgbG9hZGluZworICAgICAgICAgICAgICAgIHRpbWVzIGluIG9yZGVyIHRvIGlkZW50aWZ5IHBlcmZvcm1hbmNlIHByb2JsZW1zLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItY29tbWFuZC1jaGVja3NldHRpbmdzJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+Y2hlY2tzZXR0aW5nczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jaGVja3NldHRpbmdzPC9maWxlbmFtZT4gY29tbWFuZCB2ZXJpZmllcworICAgICAgICAgICAgICAgIGV4aXN0aW5nIFRvYXN0ZXIgc2V0dGluZ3MuCisgICAgICAgICAgICAgICAgQWNjZXNzIHRoZSBjb21tYW5kIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGNoZWNrc2V0dGluZ3MKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW4gQnVpbGQgTW9kZSwgVG9hc3RlciB1c2VzIHNldHRpbmdzIHRoYXQgYXJlIGJhc2VkIG9uIHRoZQorICAgICAgICAgICAgICAgIGRhdGFiYXNlIHRvIGNvbmZpZ3VyZSB0aGUgYnVpbGRpbmcgdGFza3MuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jaGVja3NldHRpbmdzPC9maWxlbmFtZT4gY29tbWFuZCB2ZXJpZmllcyB0aGF0CisgICAgICAgICAgICAgICAgdGhlIGRhdGFiYXNlIHNldHRpbmdzIGFyZSB2YWxpZCBpbiB0aGUgc2Vuc2UgdGhhdCB0aGV5IGhhdmUKKyAgICAgICAgICAgICAgICB0aGUgbWluaW1hbCBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gc3RhcnQgYSBidWlsZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gb3JkZXIgZm9yIHRoZSA8ZmlsZW5hbWU+Y2hlY2tzZXR0aW5nczwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICB0byB3b3JrLCB0aGUgZGF0YWJhc2UgbXVzdCBiZSBjb3JyZWN0bHkgc2V0IHVwIGFuZCBub3QgaGF2ZQorICAgICAgICAgICAgICAgIGV4aXN0aW5nIGRhdGEuCisgICAgICAgICAgICAgICAgVG8gYmUgc3VyZSB0aGUgZGF0YWJhc2UgaXMgcmVhZHksIHlvdSBjYW4gcnVuIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYeKAi2dlLnB5IHN5bmNkYgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYeKAi2dlLnB5IG1pZ3JhdGUgb3JtCisgICAgICQgYml0YmFrZS9saWIvdG9hc3Rlci9tYW5h4oCLZ2UucHkgbWlncmF0ZSBibGRjb250cm9sCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFmdGVyIHJ1bm5pbmcgdGhlc2UgY29tbWFuZHMsIHlvdSBjYW4gcnVuIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jaGVja3NldHRpbmdzPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWNvbW1hbmQtbG9hZGNvbmYnPgorICAgICAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5sb2FkY29uZjwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5sb2FkY29uZjwvZmlsZW5hbWU+IGNvbW1hbmQgbG9hZHMgYW4KKyAgICAgICAgICAgICAgICBleGlzdGluZyBUb2FzdGVyIGNvbmZpZ3VyYXRpb24gZmlsZSAoSlNPTiBmaWxlKS4KKyAgICAgICAgICAgICAgICBZb3UgbXVzdCBydW4gdGhpcyBvbiBhIG5ldyBkYXRhYmFzZSB0aGF0IGRvZXMgbm90IGhhdmUgYW55CisgICAgICAgICAgICAgICAgZGF0YS4KKyAgICAgICAgICAgICAgICBSdW5uaW5nIHRoaXMgY29tbWFuZCBvbiBhbiBleGlzdGluZyBkYXRhYmFzZSB0aGF0IGhhcyBkYXRhCisgICAgICAgICAgICAgICAgcmVzdWx0cyBpbiBlcnJvcnMuCisgICAgICAgICAgICAgICAgQWNjZXNzIHRoZSBjb21tYW5kIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGxvYWRjb25mIDxyZXBsYWNlYWJsZT5maWxlcGF0aDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bG9hZGNvbmY8L2ZpbGVuYW1lPiBjb21tYW5kIGNvbmZpZ3VyZXMgYSBkYXRhYmFzZQorICAgICAgICAgICAgICAgIGJhc2VkIG9uIHRoZSBzdXBwbGllZCBleGlzdGluZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd0b2FzdGVyLWpzb24tZmlsZXMnPkpTT04gRmlsZXM8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1jb21tYW5kLXJ1bmJ1aWxkcyc+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPnJ1bmJ1aWxkczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5ydW5idWlsZHM8L2ZpbGVuYW1lPiBjb21tYW5kIGxhdW5jaGVzCisgICAgICAgICAgICAgICAgc2NoZWR1bGVkIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICBBY2Nlc3MgdGhlIGNvbW1hbmQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgcnVuYnVpbGRzCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+cnVuYnVpbGRzPC9maWxlbmFtZT4gY29tbWFuZCBjaGVja3MgaWYKKyAgICAgICAgICAgICAgICBzY2hlZHVsZWQgYnVpbGRzIGV4aXN0IGluIHRoZSBkYXRhYmFzZSBhbmQgdGhlbiBsYXVuY2hlcyB0aGVtCisgICAgICAgICAgICAgICAgcGVyIHNjaGVkdWxlLgorICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kIHJldHVybnMgYWZ0ZXIgdGhlIGJ1aWxkcyBzdGFydCBidXQgYmVmb3JlIHRoZXkKKyAgICAgICAgICAgICAgICBjb21wbGV0ZS4KKyAgICAgICAgICAgICAgICBUaGUgVG9hc3RlciBMb2dnaW5nIEludGVyZmFjZSByZWNvcmRzIGFuZCB1cGRhdGVzIHRoZSBkYXRhYmFzZQorICAgICAgICAgICAgICAgIHdoZW4gdGhlIGJ1aWxkcyBjb21wbGV0ZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1zZXR1cC1hbmQtdXNlLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1zZXR1cC1hbmQtdXNlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjlkMjQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLXNldHVwLWFuZC11c2UueG1sCkBAIC0wLDAgKzEsMTAyNCBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J3RvYXN0ZXItbWFudWFsLXNldHVwLWFuZC11c2UnPgorCis8dGl0bGU+U2V0dGluZyBVcCBhbmQgVXNpbmcgVG9hc3RlcjwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmctdG9hc3Rlci1pbi1hbmFseXNpcy1tb2RlJz4KKyAgICAgICAgPHRpdGxlPlVzaW5nIFRvYXN0ZXIgaW4gQW5hbHlzaXMgTW9kZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB0byB1c2UgVG9hc3RlciBpbiBBbmFseXNpcyBNb2RlCisgICAgICAgICAgICBhZnRlciBzZXR0aW5nIFRvYXN0ZXIgdXAgYXMgYSBsb2NhbCBpbnN0YW5jZSBvciBhcyBhIGhvc3RlZAorICAgICAgICAgICAgc2VydmljZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzZXR0aW5nLXVwLWxvY2FsbHktYW5kLXJ1bm5pbmctaW4tYW5hbHlzaXMtbW9kZSc+CisgICAgICAgICAgICA8dGl0bGU+U2V0dGluZyBVcCBMb2NhbGx5IGFuZCBSdW5uaW5nIGluIEFuYWx5c2lzIE1vZGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gc2V0IHVwIGEgbG9jYWwgaW5zdGFuY2Ugb2YgVG9hc3RlciBhbmQKKyAgICAgICAgICAgICAgICB0aGVuIHJ1biBpbiBBbmFseXNpcyBNb2RlOgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QcmVwYXJlIHlvdXIgQnVpbGQgU3lzdGVtOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHlvdXIgc3lzdGVtIGhhcyB0aGUgVG9hc3RlciByZXF1aXJlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGZvbGxvd2luZyB0aGUgc3RlcHMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndG9hc3Rlci1lc3RhYmxpc2hpbmctdG9hc3Rlci1zeXN0ZW0tZGVwZW5kZW5jaWVzJz5Fc3RhYmxpc2hpbmcgVG9hc3RlciBTeXN0ZW0gRGVwZW5kZW5jaWVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HZXQgU2V0IFVwIHRvIFVzZSB0aGUgWW9jdG8gUHJvamVjdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgR2V0IHRoZSByZXF1aXJlbWVudHMgc2V0IHVwIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHRvIGJ1aWxkIGltYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3lwLXJlc291cmNlcyc+U2V0dGluZyBVcCB0byBVc2UgdGhlIFlvY3RvIFByb2plY3Q8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQgZm9yIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U291cmNlIHlvdXIgQnVpbGQgRW52aXJvbm1lbnQgU2V0dXAgU2NyaXB0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBGcm9tIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPnBva3kvYnVpbGQ8L2ZpbGVuYW1lPiksIHNvdXJjZSB0aGUgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHNldHVwIHNjcmlwdAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Ij48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCI+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TdGFydCBUb2FzdGVyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBGcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0IFRvYXN0ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc291cmNlIHRvYXN0ZXIgc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN0YXJ0IFlvdXIgQnVpbGQgVXNpbmcgQml0QmFrZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgdG8gc3RhcnQgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBidWlsZHMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gaW1hZ2U6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBjb3JlLWltYWdlLW1pbmltYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk9wZW4gWW91ciBCcm93c2VyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBPcGVuIHlvdXIgYnJvd3NlciBhbmQgdmlzaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5odHRwOi8vaG9zdDpwb3J0L3RvYXN0ZXJndWk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBob3N0IGFuZCBwb3J0IHZhbHVlcywgc2VlIHRoZSBvdXRwdXQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c291cmNlIHRvYXN0ZXIgc3RhcnQ8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgVG9hc3Rlciwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLXRoZS10b2FzdGVyLXdlYi1pbnRlcmZhY2UnPlVzaW5nIHRoZSBUb2FzdGVyIFdlYiBJbnRlcmZhY2U8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2V0dGluZy11cC1hLWhvc3RlZC1zZXJ2aWNlLWFuZC1ydW5uaW5nLWluLWFuYWx5c2lzLW1vZGUnPgorICAgICAgICAgICAgPHRpdGxlPlNldHRpbmcgVXAgYSBIb3N0ZWQgU2VydmljZSBhbmQgUnVubmluZyBpbiBBbmFseXNpcyBNb2RlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBob3N0ZWQgc2VydmljZSByZXNpZGVzIG9uIGEgc2hhcmVkIHNlcnZlciBhbmQgYWxsb3dzCisgICAgICAgICAgICAgICAgbXVsdGlwbGUgdXNlcnMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgVG9hc3Rlci4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gYSBwcm9kdWN0aW9uIGVudmlyb25tZW50LCB5b3UgbWlnaHQgd2FudCB0byBoYXZlIG11bHRpcGxlCisgICAgICAgICAgICAgICAgbG9jYWwgaW5zdGFuY2VzIG9mIHRoZSBUb2FzdGVyIExvZ2dpbmcgSW50ZXJmYWNlIHJ1bm5pbmcgb24KKyAgICAgICAgICAgICAgICB2YXJpb3VzIHJlbW90ZSBidWlsZCBtYWNoaW5lcywgYW5kIGhhdmUgdGhvc2UgbG9jYWwgaW5zdGFuY2VzCisgICAgICAgICAgICAgICAgYWNjZXNzIGFuZCB1c2UgYSBzaW5nbGUgd2ViIHNlcnZlci4KKyAgICAgICAgICAgICAgICBUbyBkbyB0aGlzLCB5b3UgbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIE1haW50YWluIGEgY29tbW9uIFNRTCBkYXRhYmFzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBTZXQgdXAgc2VwYXJhdGUgaW5zdGFuY2VzIG9mIEJpdEJha2Ugc2VydmVycworICAgICAgICAgICAgICAgICAgICAgICAgYW5kIFRvYXN0ZXIgTG9nZ2luZyBJbnRlcmZhY2VzIGZvciBlYWNoIG9mIHRob3NlCisgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZSBCaXRCYWtlIHNlcnZlcnMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGNvbW1vbiBTUUwgZGF0YWJhc2UgYWxsb3dzIHRoZSBXZWIgc2VydmVyIHRvIHNob3cgZGF0YSBmcm9tCisgICAgICAgICAgICAgICAgYWxsIHRoZSB2YXJpb3VzIEJpdEJha2UgYnVpbGRzLgorICAgICAgICAgICAgICAgIFNldHRpbmcgdGhlIFNRTCBkYXRhYmFzZSBvdXRzaWRlIG9mIGFueQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICBtYWludGFpbnMgYSBzZXBhcmF0aW9uIGJldHdlZW4gdGhlIHZhcmlvdXMgYnVpbGRzLgorICAgICAgICAgICAgICAgIFRoZSBCaXRCYWtlIHNlcnZlcnMsIHRoZSBTUUwgc2VydmVyLCBhbmQgdGhlIFdlYiBzZXJ2ZXIgb3IKKyAgICAgICAgICAgICAgICBzZXJ2ZXJzIGNhbiBiZSBydW4gb24gc2VwYXJhdGUgbWFjaGluZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvdyB0aGVzZSBzdGVwcyB0byBzZXQgdXAgYW5kIHJ1biBhIGhvc3RlZCBzZXJ2aWNlIGFuZCBydW4KKyAgICAgICAgICAgICAgICBUb2FzdGVyIGluIEFuYWx5c2lzIE1vZGU6CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzdGVwcyBhc3N1bWUgYSBUb2FzdGVyIGluc3RhbGxhdGlvbiBwYXRoIG9mCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vb3B0L2JpdGJha2UvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QcmVwYXJlIHlvdXIgQnVpbGQgU3lzdGVtOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHlvdXIgc3lzdGVtIGhhcyB0aGUgVG9hc3RlciByZXF1aXJlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGZvbGxvd2luZyB0aGUgc3RlcHMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndG9hc3Rlci1lc3RhYmxpc2hpbmctdG9hc3Rlci1zeXN0ZW0tZGVwZW5kZW5jaWVzJz5Fc3RhYmxpc2hpbmcgVG9hc3RlciBTeXN0ZW0gRGVwZW5kZW5jaWVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HZXQgU2V0IFVwIHRvIFVzZSB0aGUgWW9jdG8gUHJvamVjdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgR2V0IHRoZSByZXF1aXJlbWVudHMgc2V0IHVwIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHRvIGJ1aWxkIGltYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3lwLXJlc291cmNlcyc+U2V0dGluZyBVcCB0byBVc2UgdGhlIFlvY3RvIFByb2plY3Q8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQgZm9yIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW5zdGFsbCBhbmQgU2V0IHVwIHRoZSBEYXRhYmFzZSBTZXJ2ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIGFueSBTUUwgc2VydmVyIG91dCBvZiB0aGUgYm94LgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bXlzcWwtc2VydmVyPC9maWxlbmFtZT4gYmVjYXVzZSBpdCBoYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhZHZhbnRhZ2VzIG9mIGFkdmFuY2VkIFNRTCBmZWF0dXJlcyBhbG9uZyB3aXRoIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhc3QgYW5kIHJlbGlhYmxlIGRhdGFiYXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgc2V0dGluZyB1cCA8ZmlsZW5hbWU+bXlzcWwtc2VydmVyPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIG1vcmUgY29tcGxleCBhbmQgbWlnaHQgcmVxdWlyZSBhIERhdGFiYXNlCisgICAgICAgICAgICAgICAgICAgICAgICBBZG1pbmlzdHJhdG9yIHRvIHR1bmUgaXQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QW5vdGhlciBzdXBwb3J0ZWQgZGF0YWJhc2UgYmFja2VuZCBpcworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNxbGl0ZTM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdpdGggPGZpbGVuYW1lPnNxbGl0ZTM8L2ZpbGVuYW1lPiwgeW91IGhhdmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbnRhZ2Ugb2Ygbm8gY29uZmlndXJhdGlvbiBhbmQgYW4gZWFzeSBpbnN0YWxsYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBUb2FzdGVyIHN0aWxsIHJlcXVpcmVzIGRpcmVjdCBhY2Nlc3MgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5zcWxpdGU8L2ZpbGVuYW1lPiBiYWNrZW5kIGlzIGFsc28gc2xvd2VyCisgICAgICAgICAgICAgICAgICAgICAgICBhcyBjb21wYXJlZCB0byA8ZmlsZW5hbWU+bXlzcWwtc2VydmVyPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgaGFzIG5vIHRyYW5zYWN0aW9uYWwgc3VwcG9ydC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3Ugc2hvdWxkIHNldCB1cCBwcm9wZXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkCisgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3Mgb24gdGhlIHNoYXJlZCBkYXRhYmFzZSBmb3IgZXZlcnlvbmUgdGhhdCB3aWxsCisgICAgICAgICAgICAgICAgICAgICAgICBiZSB1c2luZyBUb2FzdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgYWRtaW5pc3RyYXRvciByaWdodHMgZm9yIHRoZSByb290IGFjY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBub3QgdGhlIHNhbWUgdGhpbmcgYXMgcm9vdCBhY2Nlc3Mgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLgorICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgaW5zdGFsbHMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5teXNxbC1zZXJ2ZXI8L2ZpbGVuYW1lPiBhbmQgc2V0cyB1cAorICAgICAgICAgICAgICAgICAgICAgICAgc29tZSB1c2VyIGFjY291bnRzIGFuZCB0aGUgZGF0YWJhc2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYXB0LWdldCBpbnN0YWxsIG15c3FsLXNlcnZlcgorICAgICAkIG15c3FsIC11IHJvb3QKKyAgICAgbXlzcWw+IENSRUFURSBVU0VSICduZXd1c2VyJ0AnbG9jYWxob3N0JyBJREVOVElGSUVEIEJZICdwYXNzd29yZCc7CisgICAgIG15c3FsPiBHUkFOVCBBTEwgUFJJVklMRUdFUyBPTiAqIC4gKiBUTyAnbmV3dXNlcidAJ2xvY2FsaG9zdCc7CisgICAgIG15c3FsPiBHUkFOVCBBTEwgUFJJVklMRUdFUyBPTiAqIC4gKiBUTyAnbmV3dXNlcidAJ2xvY2FsaG9zdCc7CisgICAgIG15c3FsPiBDUkVBVEUgREFUQUJBU0UgJ3RvYXN0ZXInOworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgYSBzZXBhcmF0ZSBjbG9uZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1yZXBvc2l0b3JpZXMnPlNvdXJjZSBSZXBvc2l0b3JpZXM8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBEYXRhYmFzZSBTZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGNsb25lIGlzIG9ubHkgdXNlZCBmb3IgZ2V0dGluZyB0aGUgbGF0ZXN0IFRvYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgdGhpcyB1cCB1c2luZyB0aGUgZm9sbG93aW5nIEdpdCBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBzZXQgdXAgdGhlIGRpcmVjdG9yeSBvdXRzaWRlIG9mIGFueQorICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgRGlyZWN0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoZSBzZXBhcmF0ZWx5IGNsb25lZCB0cmVlIGZvciB0aGUgRGF0YWJhc2UgU2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgZWRpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3NldHRpbmdzLnB5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgc28gdGhhdCB0aGUgPGZpbGVuYW1lPkRBVEFCQVNFUzwvZmlsZW5hbWU+IHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMgdG8gdGhlIHByZXZpb3VzbHkgY3JlYXRlZCBkYXRhYmFzZSBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBlc3RhYmxpc2hlZAorICAgICAgICAgICAgICAgICAgICAgICAgZWFybGllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjYXQgL29wdC9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3NldHRpbmdzLnB5CisgICAgICAgIC4uLgorICAgICBEQVRBQkFTRVMgPSB7CisgICAgICAgICAnZGVmYXVsdCc6IHsKKyAgICAgICAgICAgICAnRU5HSU5FJzogJ2RqYW5nby5kYi5iYWNrZW5kcy5teXNxbCcsCisgICAgICAgICAgICAgJ05BTUUnOiAndG9hc3RlcicsCisgICAgICAgICAgICAgJ1VTRVInOiAnbmV3dXNlcicsCisgICAgICAgICAgICAgJ1BBU1NXT1JEJzogJ3Bhc3N3b3JkJywKKyAgICAgICAgICAgICAnSE9TVCc6ICcxOTIuMTY4LjAuMjUnLAorICAgICAgICAgICAgICdQT1JUJzogJzMzMDYnLAorICAgICAgICAgfQorICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkluc3RhbGwgYW5kIFNldCBVcCB0aGUgV2ViIFNlcnZlcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgeW91IGluc3RhbGwgYW5kIHNldCB1cCBhIGZyb250LWVuZCB3ZWIgc2VydmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzZXJ2ZXIgYWxsb3dzIGZvciBsb2FkIGJhbGFuY2luZyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpLXRocmVhZGluZyBvdmVyIFRvYXN0ZXIgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vZW4vMS43L2hvd3RvL2RlcGxveW1lbnQvd3NnaS8nPjxmaWxlbmFtZT5kamFuZ288L2ZpbGVuYW1lPiBXU0dJPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCB1c2VzIEFwYWNoZSB3ZWIgc2VydmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGFwdC1nZXQgaW5zdGFsbCBhcGFjaGUyIGxpYmFwYWNoZTItbW9kLXdzZ2kKKyAgICAgJCBhMmVubW9kIHdzZ2kKKyAgICAgJCBjYXQgL2V0Yy9hcGFjaGUyL3NpdGVzLWF2YWlsYWJsZS8wMDAtZGVmYXVsdC5jb25mCisKKyAgICAgICAgLi4uCisKKyAgICAgIyB0aGUgV1NHSVB5dGhvblBhdGggaXMgZ2xvYmFsCisgICAgIFdTR0lQeXRob25QYXRoIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci8KKworICAgICAgICAuLi4KKworICAgICAjc25pcCAtIGluIFZpcnR1YWxIb3N0CisgICAgIFdTR0lTY3JpcHRBbGlhcyAvIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi93c2dpLnB5CisKKyAgICAgJmx0O0RpcmVjdG9yeSAvL29wdC9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluLyZndDsKKyAgICAgICAgICZsdDtGaWxlcyB3c2dpLnB5Jmd0OworICAgICAgICAgICAgIFJlcXVpcmUgYWxsIGdyYW50ZWQKKyAgICAgICAgICZsdDsvRmlsZXMmZ3Q7CisgICAgICZsdDsvRGlyZWN0b3J5Jmd0OworCisgICAgICAgIC4uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gY29sbGVjdCBzdGF0aWMgbWVkaWEgZnJvbSBUb2FzdGVyIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgY29uZmlndXJpbmcgQXBhY2hlIHRvIHNlcnZlIHRoYXQgc3RhdGljCisgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBta2RpciAvdmFyL3d3dy5odG1sL3N0YXRpYyAmYW1wOyZhbXA7IGNkIC92YXIvd3d3Lmh0bWwvc3RhdGljCisgICAgICQgL29wdC9iaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBjb2xsZWN0c3RhdGljCisgICAgICQgY2F0IC9ldGMvYXBhY2hlMi9zaXRlcy1hdmFpbGFibGUvMDAwLWRlZmF1bHQuY29uZgorCisgICAgICAgIC4uLgorCisgICAgICMgaW4gVmlydHVhbEhvc3QsIEFIRUFEIG9mIHRoZSBXU0dJU2NyaXB0QWxpYXMgZGVmaW5pdGlvbgorICAgICBBbGlhcyAvc3RhdGljLyAvdmFyL3d3dy5odG1sL3N0YXRpYy8KKworICAgICAmbHQ7RGlyZWN0b3J5IC92YXIvd3d3Lmh0bWwvc3RhdGljLyZndDsKKyAgICAgUmVxdWlyZSBhbGwgZ3JhbnRlZAorICAgICAmbHQ7L0RpcmVjdG9yeSZndDsKKworICAgICAgICAuLi4KKworICAgICBXU0dJU2NyaXB0IEFsaWFzIC8gL29wdC9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3dzZ2kucHkKKworICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN0YXJ0IFRvYXN0ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNocm9uaXplIHRoZSBkYXRhYmFzZXMgZm9yIHRvYXN0ZXIsIGFuZCB0aGVuIHN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICB1cCB0aGUgd2ViIHNlcnZlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGNvbnRpbnVlcyB3aXRoIHRoZSBhc3N1bWVkCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzIGZyb20gdGhlIHByZXZpb3VzIHN0ZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgc3luY2RiCisgICAgICQgL29wdC9iaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBtaWdyYXRlIG9ybQorICAgICAkIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbWlncmF0ZSBibGRjb250cm9sCisKKyAgICAgJCBzZXJ2aWNlIGFwYWNoZTIgcmVzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGdlbmVyYWwgZG9jdW1lbnRhdGlvbiBvbgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1hbmFnZS5weTwvZmlsZW5hbWU+IGF0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9kb2NzLmRqYW5nb3Byb2plY3QuY29tL2VuLzEuNy9yZWYvZGphbmdvLWFkbWluLyc+RGphbmdvPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNpdGUuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcmVmZXJlbmNlIGluZm9ybWF0aW9uIG9uIFRvYXN0ZXItc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYW5hZ2UucHk8L2ZpbGVuYW1lPiBjb21tYW5kcywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd0b2FzdGVyLXVzZWZ1bC1jb21tYW5kcyc+VXNlZnVsIENvbW1hbmRzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FbmFibGUgQnVpbGQgTG9nZ2luZyB0byB0aGUgQ29tbW9uIFNRTCBTZXJ2ZXIgZm9yIEVhY2ggQnVpbGQgRGlyZWN0b3J5IHlvdSBhcmUgVXNpbmc6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtdG9hc3Rlcic+PGZpbGVuYW1lPnRvYXN0ZXI8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBhbmQgYnVpbGQgaGlzdG9yeSBhcmUgZW5hYmxlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgZG9uZSBpbiBhCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG9hc3Rlci5jb25mPC9maWxlbmFtZT4gZmlsZSB0aGF0IGlzCisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHRvYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zdGFydDwvZmlsZW5hbWU+IGNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhhdCBsaXZlcyBpbnNpZGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBpbiA8ZmlsZW5hbWU+L2NvbmYvdG9hc3Rlci5jb25mPC9maWxlbmFtZT4uPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhhdCBmaWxlIHNob3VsZCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5IRVJJVCArPSAidG9hc3RlciBidWlsZGhpc3RvcnkiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gYnVpbGQgaGlzdG9yeSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I21haW50YWluaW5nLWJ1aWxkLW91dHB1dC1xdWFsaXR5Jz5NYWludGFpbmluZyBCdWlsZCBPdXRwdXQgUXVhbGl0eTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgTWFudWFsLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBhbHNvIG5lZWQgdG8gcG9pbnQgdG8gdGhlIGRhdGFiYXNlIHRoYXQgeW91IHNldAorICAgICAgICAgICAgICAgICAgICAgICAgdXAgaW4gc3RlcCAzLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkbyB0aGlzIGJ5IGV4cG9ydGluZyB0aGUgPGZpbGVuYW1lPkRBVEFCQVNFX1VSTDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBleHBvcnQgREFUQUJBU0VfVVJMPW15c3FsOi8vbmV3dXNlcjpwYXNzd29yZEAxOTIuMTY4LjAuMjU6MzMwNi90b2FzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgYXNzdW1lcyB0aGF0IHlvdSBhcmUgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5teXNxbC1zZXJ2ZXI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBJUCBhZGRyZXNzIHNob3VsZCBiZSB0aGUgSVAgYWRkcmVzcyBvZiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZSBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Tb3VyY2UgeW91ciBCdWlsZCBFbnZpcm9ubWVudCBTZXR1cCBTY3JpcHQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZyb20geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBvbiBlYWNoIG9mIHRoZSBidWlsZCBzeXN0ZW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPnBva3kvYnVpbGQ8L2ZpbGVuYW1lPiksIHNvdXJjZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Ij48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCI+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4pLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3RhcnQgdGhlIEJpdEJha2UgU2VydmVyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBTdGFydCB0aGUgQml0QmFrZSBzZXJ2ZXIgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLS1wb3N0cmVhZCBjb25mL3RvYXN0ZXIuY29uZiAtLXNlcnZlci1vbmx5IC10IHhtbHJwYyAtQiBsb2NhbGhvc3Q6MCAmYW1wOyZhbXA7IGV4cG9ydCBCQlNFUlZFUj1sb2NhbGhvc3Q6LTEKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN0YXJ0IHRoZSBMb2dnaW5nIFNlcnZlcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnQgdGhlIFRvYXN0ZXIgTG9nZ2luZyBJbnRlcmZhY2UgdXNpbmcgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBub2h1cCBiaXRiYWtlIC0tb2JzZXJ2ZS1vbmx5IC11IHRvYXN0ZXJ1aSA+dG9hc3Rlcl91aS5sb2cgJmFtcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIGhhcmQtY29kZWQgcG9ydHMgYXJlIHVzZWQgaW4gdGhlIEJpdEJha2Ugb3B0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHRoZXJlIGlzIGVub3VnaCBjb2RlIHRvIHJ1bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hdXRvZGlzY292ZXJ5PC9maWxlbmFtZT4gZm9yIEJpdEJha2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb2luZyBzbyBwcmV2ZW50cyBjb2xsaXNpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3RhcnQgQnVpbGRzIFVzaW5nIEJpdEJha2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kIHRvIHN0YXJ0IGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIG9uIGEgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgYnVpbGRzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+IGltYWdlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgY29yZS1pbWFnZS1taW5pbWFsCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBhcmUgZmluaXNoZWQgd2l0aCBhIGJ1aWxkIGluIGEgZ2l2ZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIERpcmVjdG9yeSwgYmUgc3VyZSB0byA8ZmlsZW5hbWU+a2lsbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgQml0QmFrZSBzZXJ2ZXIgZm9yIHRoYXQgYnVpbGQgYXJlYToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1tCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGUgVG9hc3RlciB3ZWIgaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmctdGhlLXRvYXN0ZXItd2ViLWludGVyZmFjZSc+VXNpbmcgdGhlIFRvYXN0ZXIgV2ViIEludGVyZmFjZTwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZy10b2FzdGVyLWluLWJ1aWxkLW1vZGUnPgorICAgICAgICA8dGl0bGU+VXNpbmcgVG9hc3RlciBpbiBCdWlsZCBNb2RlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHRvIHVzZSBUb2FzdGVyIGluIEJ1aWxkIE1vZGUKKyAgICAgICAgICAgIGFmdGVyIHNldHRpbmcgVG9hc3RlciB1cCBhcyBhIGxvY2FsIGluc3RhbmNlIG9yIGFzIGEgaG9zdGVkCisgICAgICAgICAgICBzZXJ2aWNlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NldHRpbmctdXAtbG9jYWxseS1hbmQtcnVubmluZy1pbi1idWlsZC1tb2RlJz4KKyAgICAgICAgICAgIDx0aXRsZT5TZXR0aW5nIFVwIExvY2FsbHkgYW5kIFJ1bm5pbmcgaW4gQnVpbGQgTW9kZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvdyB0aGVzZSBzdGVwcyB0byBzZXQgdXAgYSBsb2NhbCBpbnN0YW5jZSBvZiBUb2FzdGVyIGFuZAorICAgICAgICAgICAgICAgIHRoZW4gcnVuIGluIEJ1aWxkIE1vZGU6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlByZXBhcmUgeW91ciBCdWlsZCBTeXN0ZW06PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgeW91ciBzeXN0ZW0gaGFzIHRoZSBUb2FzdGVyIHJlcXVpcmVtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgYnkgZm9sbG93aW5nIHRoZSBzdGVwcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd0b2FzdGVyLWVzdGFibGlzaGluZy10b2FzdGVyLXN5c3RlbS1kZXBlbmRlbmNpZXMnPkVzdGFibGlzaGluZyBUb2FzdGVyIFN5c3RlbSBEZXBlbmRlbmNpZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkdldCBTZXQgVXAgdG8gVXNlIHRoZSBZb2N0byBQcm9qZWN0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBHZXQgdGhlIHJlcXVpcmVtZW50cyBzZXQgdXAgc28gdGhhdCB5b3UgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgdG8gYnVpbGQgaW1hZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjeXAtcmVzb3VyY2VzJz5TZXR0aW5nIFVwIHRvIFVzZSB0aGUgWW9jdG8gUHJvamVjdDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydCBmb3IgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TdGFydCBUb2FzdGVyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBGcm9tIHRoZSByb290IG9mIHRoZSBzb3VyY2UgZGlyZWN0b3J5IChlLmcKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5LzwvZmlsZW5hbWU+KSwgcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlL2Jpbi90b2FzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgYSBTdXBlcnVzZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIERqYW5nbyB3aWxsIGFzayB5b3UgaWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgc3VwZXJ1c2VyLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBza2lwIHRoaXMgc3RlcCwgYnV0IGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGUgYSBzdXBlcnVzZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgc3VwZXJ1c2VyIHRvIGFjY2VzcyB0aGUgRGphbmdvCisgICAgICAgICAgICAgICAgICAgICAgICBhZG1pbmlzdHJhdGlvbiBpbnRlcmZhY2UgYW5kIG1ha2UgY2hhbmdlcyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNlbGVjdCB0aGUgQnVpbGQgTG9nIERpcmVjdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBhc2tzIHlvdSB0byBzcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgeW91CisgICAgICAgICAgICAgICAgICAgICAgICB3YW50IHRvIHN0b3JlIHRoZSBidWlsZCBsb2cgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBDaG9vc2luZyBhIGRpcmVjdG9yeSBmb3IgdGhlc2UgZmlsZXMgbWFrZXMgc3VyZSB0aGV5CisgICAgICAgICAgICAgICAgICAgICAgICBhcmUgYWx3YXlzIGF2YWlsYWJsZSB0byB5b3UuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IGNob29zZSBhIGRpcmVjdG9yeSwgdGhlIGxvZ3MgY2FuCisgICAgICAgICAgICAgICAgICAgICAgICBkaXNhcHBlYXIgKGUuZy4gZGVsZXRpbmcgdGhlIEJ1aWxkIERpcmVjdG9yeSkuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+V2hlbiBUb2FzdGVyIHByb21wdHMgeW91IGZvciB0aGUgQnVpbGQgTG9nCisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnksIHlvdSBjYW4gc2VsZWN0IHRoZSBzdWdnZXN0ZWQgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgb3IgcHJvdmlkZSBhIHBhdGggdG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3BlY2lmeSB0aGUgTGF5ZXIgQ2hlY2tvdXQgRGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdGVyIGFza3MgeW91IHRvIHNwZWNpZnkgdGhlIGRpcmVjdG9yeSBpbnRvIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICBsYXllcnMgYXJlIGNoZWNrZWQgb3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBjbG9uZXMgYW55IGxheWVycyBuZWVkZWQgZm9yIHlvdXIgYnVpbGRzCisgICAgICAgICAgICAgICAgICAgICAgICBpbnNpZGUgdGhpcyBkaXJlY3RvcnkuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+V2hlbiBUb2FzdGVyIHByb21wdHMgeW91IGZvciB0aGUgTGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrb3V0IGRpcmVjdG9yeSwgeW91IGNhbiBzZWxlY3QgdGhlIHN1Z2dlc3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBvciBwcm92aWRlIGEgcGF0aCB0byBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TcGVjaWZ5IHRoZSBCdWlsZCBEaXJlY3RvcnkgUGF0aDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBhc2tzIHlvdSB0byBzcGVjaWZ5IHRoZSBwYXRoIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZWxlY3QgdGhlIHN1Z2dlc3RlZCBkZWZhdWx0IG9yIHByb3ZpZGUgYQorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCB0byBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DaG9vc2UgV2hldGhlciBvciBub3QgdG8gSW1wb3J0IGEgRGVmYXVsdCBUb2FzdGVyIENvbmZpZ3VyYXRpb24gRmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBhc2tzIHlvdSBpZiB5b3Ugd2FudCB0byBpbXBvcnQgYSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdGVyIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgY29uZmlndXJhdGlvbnMgYXJlIHN0b3JlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgSlNPTiBmaWxlcyBjYWxsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gSlNPTiBmaWxlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3RvYXN0ZXItanNvbi1maWxlcyc+SlNPTiBGaWxlczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjYW4gc2tpcCBpbXBvcnRpbmcgYSBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGVudGVyaW5nICIwIiBhdCB0aGUgcHJvbXB0LgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgaW1wb3J0IG9uZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgbGlzdGVkIGR1cmluZyB0aGlzIHN0ZXAuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsd2F5cyBhbWVuZCB0aGUgaW1wb3J0ZWQgY29uZmlndXJhdGlvbiBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgbGF0ZXIgc3RhZ2UgdGhyb3VnaCB0aGUgRGphbmdvIGFkbWluaXN0cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gb24gRGphbmdvLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS9lbi8xLjcvJz5kb2N1bWVudGF0aW9uPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gZmluZCBpbmZvcm1hdGlvbiBvbiBUb2FzdGVyLXNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFuYWdlLnB5PC9maWxlbmFtZT4gY29tbWFuZHMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndG9hc3Rlci11c2VmdWwtY29tbWFuZHMnPlVzZWZ1bCBDb21tYW5kczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+T3BlbiB0aGUgQnJvd3Nlcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm8gYnJvd3NlciB3aW5kb3cgYXBwZWFycywgb3BlbiB5b3VyIGZhdm9yaXRlCisgICAgICAgICAgICAgICAgICAgICAgICBicm93c2VyIGFuZCBlbnRlciB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBodHRwOi8vbG9jYWxob3N0OjgwMDAvdG9hc3Rlcmd1aQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBub3cgdXNlIHRoZSBUb2FzdGVyIHdlYiBpbnRlcmZhY2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NldHRpbmctdXAtYS1ob3N0ZWQtc2VydmljZS1hbmQtcnVubmluZy1pbi1idWlsZC1tb2RlJz4KKyAgICAgICAgICAgIDx0aXRsZT5TZXR0aW5nIFVwIGEgSG9zdGVkIFNlcnZpY2UgYW5kIFJ1bm5pbmcgaW4gQnVpbGQgTW9kZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvdyB0aGVzZSBzdGVwcyB0byBzZXQgdXAgYSBob3N0ZWQgc2VydmljZSBhbmQgcnVuIFRvYXN0ZXIKKyAgICAgICAgICAgICAgICBpbiBCdWlsZCBNb2RlOgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QcmVwYXJlIHlvdXIgQnVpbGQgU3lzdGVtOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHlvdXIgc3lzdGVtIGhhcyB0aGUgVG9hc3RlciByZXF1aXJlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGZvbGxvd2luZyB0aGUgc3RlcHMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndG9hc3Rlci1lc3RhYmxpc2hpbmctdG9hc3Rlci1zeXN0ZW0tZGVwZW5kZW5jaWVzJz5Fc3RhYmxpc2hpbmcgVG9hc3RlciBTeXN0ZW0gRGVwZW5kZW5jaWVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HZXQgU2V0IFVwIHRvIFVzZSB0aGUgWW9jdG8gUHJvamVjdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgR2V0IHRoZSByZXF1aXJlbWVudHMgc2V0IHVwIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHRvIGJ1aWxkIGltYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3lwLXJlc291cmNlcyc+U2V0dGluZyBVcCB0byBVc2UgdGhlIFlvY3RvIFByb2plY3Q8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQgZm9yIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QmUgU3VyZSBNYW5hZ2VtZW50IGlzIEVuYWJsZWQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgcnVubmluZyBUb2FzdGVyIHVuZGVyIEFwYWNoZSwgeW91IG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGJlIHN1cmUgbWFuYWdlbWVudCBpcyBlbmFibGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gZW5hYmxlIG1hbmFnZW1lbnQsIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1BTkFHRUQ8L2ZpbGVuYW1lPiB0byAiVHJ1ZSIgYnkgYWRkaW5nCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UvbGliL3RvYXN0ZXIvc2V0dGluZ3MucHk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTUFOQUdFRD0iVHJ1ZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNldCBVcCBUb2FzdGVyIGZvciBOb3JtYWwgVXNhZ2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGNvbmZpZ3VyZSBlYWNoIGJ1aWxkIGVudmlyb25tZW50LCBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlcywgYW5kIEJpdEJha2UgdmVyc2lvbnMuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VmVyaWZ5IHRoYXQgeW91ciByZWxlYXNlcyBoYXZlIGJlZW4gbG9hZGVkIGNvcnJlY3RseSBieQorICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIFRvYXN0ZXIgd2ViIGludGVyZmFjZSB0byBjcmVhdGUgYSBuZXcKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICBDaGVjayB0aGUgIlJlbGVhc2VzIiBkcm9wZG93biBtZW51IHRvIGJlIHN1cmUgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3bHkgc3BlY2lmaWVkIHJlbGVhc2VzIGV4aXN0LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSB3YW50IHRvIHVzZSB0aGUgYWRtaW5pc3RyYXRpb24gaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhpcyBzdGVwLCBoZXJlIGlzIGEgc2V0IG9mIGV4YW1wbGUgY29tbWFuZHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggc29tZSBkZXNjcmlwdGlvbnMgYXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBDcmVhdGUgdGhlIHVzZXIgdW5kZXIgd2hpY2ggdGhlIGJ1aWxkcyB3aWxsIHJ1bgorICAgICAkIGFkZHVzZXIgcG9reQorCisgICAgICMgQnJpbmcgdXAgdGhlIGFkbWluaXN0cmF0aW9uIGludGVyZmFjZQorICAgICAkeGRnLW9wZW4gaHR0cDovLzxyZXBsYWNlYWJsZT5zZXJ2ZXItYWRkcmVzczwvcmVwbGFjZWFibGU+L2FkbWluLworCisgICAgICMgTG9naW4gd2l0aCB0aGUgYWRtaW4gdXNlciBwcmV2aW91c2x5IGNyZWF0ZWQKKworICAgICAjIEdvIHRvIHRoZSBCdWlsZEVudmlyb25tZW50IG9iamVjdCBpbiBCdWlsZCBFbnZpcm9ubWVudHMgYW5kCisgICAgICMgc2V0IGFkZHJlc3MgdG8gbG9jYWwgaG9zdCwgc291cmNlZGlyIHRvIC9ob21lL3Bva3ksIGFuZAorICAgICAjIGJ1aWxkZGlyIHRvIC9ob21lL3Bva3lidWlsZC4KKyAgICAgIworICAgICAjIFNhdmUgeW91ciBjaGFuZ2VzIGFuZCBleGl0CisKKyAgICAgIyBHbyB0byBIb21lLCBMYXllciBTb3VyY2VzIGFuZCBzZWxlY3QgYWRkIExheWVyIFNvdXJjZQorICAgICAjIE5hbWU6IE9wZW5FbWJlZGRlZCwgU291cmNldHlwZTogbGF5ZXJpbmRleCwKKyAgICAgIyBBcGl1cmw6IGh0dHA6Ly9sYXllcnMgb3BlbmVtYmVkZGVkLm9yZy9sYXllcmluZGV4L2FwaS8KKyAgICAgIyBTYXZlIHlvdXIgY2hhbmdlcyBhbmQgZXhpdAorCisgICAgICMgR28gdG8gSG9tZSwgQml0YmFrZSBWZXJzaW9ucywgQWRkIGJpdGJha2UgdmVyc2lvbjsKKyAgICAgIyBUYWtlIHZlcnNpb24gaW5mb3JtYXRpb24gZnJvbTogaHR0cDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UvcmVmcy9oZWFkcywKKyAgICAgIyBUaGlzIGV4YW1wbGUgYXNzdW1lcyAibWFzdGVyIiB2ZXJzaW9uLgorICAgICAjIHNldCBOYW1lOiBtYXN0ZXIsIEdpdHVybCBnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlCisgICAgICMgYnJhbmNoIG1hc3RlciwgZGlycGF0aCAvCisgICAgICMgU2F2ZSB5b3VyIGNoYW5nZXMgYW5kIGV4aXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBhbHNvIG5lZWQgdG8gY29uZmlndXJlIHRoZSBwcm9qZWN0IHJlbGVhc2VzLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgdmFyaWFibGVzLCBhbmQgdXBkYXRlIGluZm9ybWF0aW9uIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBsYXllciBpbmRleC4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbnRpbnVpbmcgd2l0aCB0aGUgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBHbyB0byBIb21lLCBSZWxlYXNlcywgQWRkIHJlbGVhc2UKKyAgICAgIyBzZXQgTmFtZTogbWFzdGVyLCBEZXNjcmlwdGlvbjogQ3VycmVudCBtYXN0ZXIgcmVsZWFzZSwgc2VsZWN0IEJpdGJha2UgVmVyc2lvbiwKKyAgICAgIyBhbmQgQnJhbmNoOiBtYXN0ZXIKKyAgICAgIyBTYXZlIHlvdXIgY2hhbmdlcyBhbmQgZXhpdAorCisgICAgICMgR28gdG8gSG9tZSwgVG9hc3RlciBTZXR0aW5ncywgc2VsZWN0IHRoZSBTZXR0aW5nIGZvciBERUZBVUxUX1JFTEVBU0UKKyAgICAgIyBzZXQgSGVscHRleHQ6IFRoaXMgc2VsZWN0cyB0aGUgZGVmYXVsdCByZWxlYXNlLiwgVmFsdWU6IG1hc3RlcgorICAgICAjIFNhdmUgeW91ciBjaGFuZ2VzIGFuZCBleGl0CisKKyAgICAgIyBHbyB0byBIb21lLCBCaXRiYWtlIFZlcnNpb25zLCBBZGQgYml0YmFrZSB2ZXJzaW9uOworICAgICAjIHRha2UgdmVyc2lvbiBpbmZvcm1hdGlvbiBmcm9tIDogaHR0cDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UvcmVmcy9oZWFkcywKKyAgICAgIyB0aGlzIG1hbnVhbCBhc3N1bWVzIHRoZSBtYXN0ZXIgdmVyc2lvbgorICAgICAjIHNldCBOYW1lOiBtYXN0ZXIsIEdpdHVybCBnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlCisgICAgICMgYnJhbmNoIG1hc3RlciwgZGlycGF0aCAvCisgICAgICMgU2F2ZSB5b3VyIGNoYW5nZXMgYW5kIGV4aXQKKworICAgICAjIFVwZGF0ZSB0aGUgaW5mb3JtYXRpb24KKyAgICAgIyBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBsc3VwZGF0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciByZWZlcmVuY2UgaW5mb3JtYXRpb24gb24gVG9hc3Rlci1zcGVjaWZpYworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1hbmFnZS5weTwvZmlsZW5hbWU+IGNvbW1hbmRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndG9hc3Rlci11c2VmdWwtY29tbWFuZHMnPlVzZWZ1bCBDb21tYW5kczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW5zdGFsbCBhbmQgU2V0IHVwIHRoZSBEYXRhYmFzZSBTZXJ2ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIGFueSBTUUwgc2VydmVyIG91dCBvZiB0aGUgYm94LgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bXlzcWwtc2VydmVyPC9maWxlbmFtZT4gYmVjYXVzZSBpdCBoYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhZHZhbnRhZ2VzIG9mIGFkdmFuY2VkIFNRTCBmZWF0dXJlcyBhbG9uZyB3aXRoIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhc3QgYW5kIHJlbGlhYmxlIGRhdGFiYXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgc2V0dGluZyB1cCA8ZmlsZW5hbWU+bXlzcWwtc2VydmVyPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIG1vcmUgY29tcGxleCBhbmQgbWlnaHQgcmVxdWlyZSBhIERhdGFiYXNlCisgICAgICAgICAgICAgICAgICAgICAgICBBZG1pbmlzdHJhdG9yIHRvIHR1bmUgaXQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QW5vdGhlciBzdXBwb3J0ZWQgZGF0YWJhc2UgYmFja2VuZCBpcworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNxbGl0ZTM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdpdGggPGZpbGVuYW1lPnNxbGl0ZTM8L2ZpbGVuYW1lPiwgeW91IGhhdmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbnRhZ2Ugb2Ygbm8gY29uZmlndXJhdGlvbiBhbmQgYW4gZWFzeSBpbnN0YWxsYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBUb2FzdGVyIHN0aWxsIHJlcXVpcmVzIGRpcmVjdCBhY2Nlc3MgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5zcWxpdGU8L2ZpbGVuYW1lPiBiYWNrZW5kIGlzIGFsc28gc2xvd2VyCisgICAgICAgICAgICAgICAgICAgICAgICBhcyBjb21wYXJlZCB0byA8ZmlsZW5hbWU+bXlzcWwtc2VydmVyPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgaGFzIG5vIHRyYW5zYWN0aW9uYWwgc3VwcG9ydC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3Ugc2hvdWxkIHNldCB1cCBwcm9wZXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkCisgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3Mgb24gdGhlIHNoYXJlZCBkYXRhYmFzZSBmb3IgZXZlcnlvbmUgdGhhdCB3aWxsCisgICAgICAgICAgICAgICAgICAgICAgICBiZSB1c2luZyBUb2FzdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgYWRtaW5pc3RyYXRvciByaWdodHMgZm9yIHRoZSByb290IGFjY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBub3QgdGhlIHNhbWUgdGhpbmcgYXMgcm9vdCBhY2Nlc3Mgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLgorICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgaW5zdGFsbHMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5teXNxbC1zZXJ2ZXI8L2ZpbGVuYW1lPiBhbmQgc2V0cyB1cAorICAgICAgICAgICAgICAgICAgICAgICAgc29tZSB1c2VyIGFjY291bnRzIGFuZCB0aGUgZGF0YWJhc2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYXB0LWdldCBpbnN0YWxsIG15c3FsLXNlcnZlcgorICAgICAkIG15c3FsIC11IHJvb3QKKyAgICAgbXlzcWw+IENSRUFURSBVU0VSICduZXd1c2VyJ0AnbG9jYWxob3N0JyBJREVOVElGSUVEIEJZICdwYXNzd29yZCc7CisgICAgIG15c3FsPiBHUkFOVCBBTEwgUFJJVklMRUdFUyBPTiAqIC4gKiBUTyAnbmV3dXNlcidAJ2xvY2FsaG9zdCc7CisgICAgIG15c3FsPiBHUkFOVCBBTEwgUFJJVklMRUdFUyBPTiAqIC4gKiBUTyAnbmV3dXNlcidAJ2xvY2FsaG9zdCc7CisgICAgIG15c3FsPiBDUkVBVEUgREFUQUJBU0UgJ3RvYXN0ZXInOworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgYSBzZXBhcmF0ZSBjbG9uZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1yZXBvc2l0b3JpZXMnPlNvdXJjZSBSZXBvc2l0b3JpZXM8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBEYXRhYmFzZSBTZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGNsb25lIGlzIG9ubHkgdXNlZCBmb3IgZ2V0dGluZyB0aGUgbGF0ZXN0IFRvYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgdGhpcyB1cCB1c2luZyB0aGUgZm9sbG93aW5nIEdpdCBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBzZXQgdXAgdGhlIGRpcmVjdG9yeSBvdXRzaWRlIG9mIGFueQorICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgRGlyZWN0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoZSBzZXBhcmF0ZWx5IGNsb25lZCB0cmVlIGZvciB0aGUgRGF0YWJhc2UgU2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgZWRpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3NldHRpbmdzLnB5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgc28gdGhhdCB0aGUgPGZpbGVuYW1lPkRBVEFCQVNFUzwvZmlsZW5hbWU+IHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMgdG8gdGhlIHByZXZpb3VzbHkgY3JlYXRlZCBkYXRhYmFzZSBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBlc3RhYmxpc2hlZAorICAgICAgICAgICAgICAgICAgICAgICAgZWFybGllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjYXQgL29wdC9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3NldHRpbmdzLnB5CisgICAgICAgIC4uLgorICAgICBEQVRBQkFTRVMgPSB7CisgICAgICAgICAnZGVmYXVsdCc6IHsKKyAgICAgICAgICAgICAnRU5HSU5FJzogJ2RqYW5nby5kYi5iYWNrZW5kcy5teXNxbCcsCisgICAgICAgICAgICAgJ05BTUUnOiAndG9hc3RlcicsCisgICAgICAgICAgICAgJ1VTRVInOiAnbmV3dXNlcicsCisgICAgICAgICAgICAgJ1BBU1NXT1JEJzogJ3Bhc3N3b3JkJywKKyAgICAgICAgICAgICAnSE9TVCc6ICcxOTIuMTY4LjAuMjUnLAorICAgICAgICAgICAgICdQT1JUJzogJzMzMDYnLAorICAgICAgICAgfQorICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0ZSB0aGUgRGF0YWJhc2U8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgdG8gY3JlYXRlIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZSBzdHJ1Y3R1cmU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgc3luY2RiCisgICAgICQgYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbWlncmF0ZSBvcm0KKyAgICAgJCBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBtaWdyYXRlIGJsZGNvbnRyb2wKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBpbnRlcmZhY2UgYXNrcyB5b3UgaWYgeW91IHdhbnQgdG8gY3JlYXRlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1cGVydXNlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIERvIG5vdCBza2lwIHRoaXMgc3RlcC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSB3aWxsIHVzZSB0aGUgc3VwZXJ1c2VyIGFjY291bnQgdG8gYWNjZXNzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYWRtaW5pc3RyYXRpb24gaW50ZXJmYWNlIGFuZCBtYWtlIGNoYW5nZXMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdGVyIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZWxlY3QgV2hlcmUgdGhlIEJ1aWxkIFByb2Nlc3MgVGFrZXMgUGxhY2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGNyZWF0ZSB0aHJlZSBkaXJlY3RvcmllcyBmb3Igc3RvcmluZworICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgYXJ0aWZhY3RzLCBkb3dubG9hZGluZyBzb3VyY2VzLCBhbmQgcnVubmluZworICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRzLgorICAgICAgICAgICAgICAgICAgICAgICAgQWxsIHRocmVlIGRpcmVjdG9yaWVzIG5lZWQgdG8gYmUgd3JpdGFibGUgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB1c2VyLCB3aGljaCBpcyAicG9reSIgaW4gdGhpcyBleGFtcGxlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIGFydGlmYWN0cyBkaXJlY3RvcnkgbmVlZHMgdG8gcmVhZGFibGUgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBhcGFjaGUgdXNlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBhbHNvIG5lZWQgZnJlZSBkaXNrIHNwYWNlIGluIHRoZSByYW5nZSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgMTAwIEdieXRlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgdGhyZWUgc3VnZ2VzdGVkIGRpcmVjdG9yaWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAvaG9tZS9wb2t5L2J1aWxkYXJ0aWZhY3RzLworICAgICAvaG9tZS9wb2t5L2J1aWxkLworICAgICAvaG9tZS9wb2t5L3NvdXJjZXMvCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZXQgVXAgdGhlIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4gRmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9GaWxlOlRvYXN0ZXJjb25mLmpzb24udHh0LnBhdGNoJz5Eb3dubG9hZCB0aGUgaG9zdGVkIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4gZmlsZTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IHdpa2kgYW5kIGVkaXQgaXQgdG8gc3VpdCB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbnMgb2YgdGhlIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndG9hc3Rlci1qc29uLWZpbGVzJz5KU09OIEZpbGVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QWZ0ZXIgZWRpdGluZyB0aGUgZmlsZSwgbG9hZCBpdCBieSBydW5uaW5nCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGxvYWRjb25mIHBhdGgtdG8tdG9hc3RlcmNvbmYuanNvbi1maWxlCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcmVmZXJlbmNlIGluZm9ybWF0aW9uIG9uIFRvYXN0ZXItc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYW5hZ2UucHk8L2ZpbGVuYW1lPiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3RvYXN0ZXItdXNlZnVsLWNvbW1hbmRzJz5Vc2VmdWwgQ29tbWFuZHM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNoZWNrIHRoZSBUb2FzdGVyIFNldHRpbmdzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBDb25maWd1cmUgdGhlIGJ1aWxkIGVudmlyb25tZW50IGJ5IHJ1bm5pbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgY2hlY2tzZXR0aW5ncworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiBwcm9tcHRlZCwgcGFzdGUgaW4gdGhlIGRpcmVjdG9yeSBwYXRocyBjcmVhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c2x5IGR1cmluZyBTdGVwIDcuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcmVmZXJlbmNlIGluZm9ybWF0aW9uIG9uIFRvYXN0ZXItc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYW5hZ2UucHk8L2ZpbGVuYW1lPiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3RvYXN0ZXItdXNlZnVsLWNvbW1hbmRzJz5Vc2VmdWwgQ29tbWFuZHM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkluc3RhbGwgYW5kIFNldCBVcCB0aGUgV2ViIFNlcnZlcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgeW91IGluc3RhbGwgYW5kIHNldCB1cCBhIGZyb250LWVuZCB3ZWIgc2VydmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzZXJ2ZXIgYWxsb3dzIGZvciBsb2FkIGJhbGFuY2luZyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpLXRocmVhZGluZyBvdmVyIFRvYXN0ZXIgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vZW4vMS43L2hvd3RvL2RlcGxveW1lbnQvd3NnaS8nPjxmaWxlbmFtZT5kamFuZ288L2ZpbGVuYW1lPiBXU0dJPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCB1c2VzIEFwYWNoZSB3ZWIgc2VydmVyOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGFwdC1nZXQgaW5zdGFsbCBhcGFjaGUyIGxpYmFwYWNoZTItbW9kLXdzZ2kKKyAgICAgJCBhMmVubW9kIHdzZ2kKKyAgICAgJCBjYXQgL2V0Yy9hcGFjaGUyL3NpdGVzLWF2YWlsYWJsZS8wMDAtZGVmYXVsdC5jb25mCisKKyAgICAgICAgLi4uCisKKyAgICAgIyB0aGUgV1NHSVB5dGhvblBhdGggaXMgZ2xvYmFsCisgICAgIFdTR0lQeXRob25QYXRoIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci8KKworICAgICAgICAuLi4KKworICAgICAjc25pcCAtIGluIFZpcnR1YWxIb3N0CisgICAgIFdTR0lTY3JpcHRBbGlhcyAvIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi93c2dpLnB5CisKKyAgICAgJmx0O0RpcmVjdG9yeSAvL29wdC9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluLyZndDsKKyAgICAgICAgICZsdDtGaWxlcyB3c2dpLnB5Jmd0OworICAgICAgICAgICAgIFJlcXVpcmUgYWxsIGdyYW50ZWQKKyAgICAgICAgICZsdDsvRmlsZXMmZ3Q7CisgICAgICZsdDsvRGlyZWN0b3J5Jmd0OworCisgICAgICAgIC4uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gY29sbGVjdCBzdGF0aWMgbWVkaWEgZnJvbSBUb2FzdGVyIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgY29uZmlndXJpbmcgQXBhY2hlIHRvIHNlcnZlIHRoYXQgc3RhdGljCisgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBta2RpciAvdmFyL3d3dy5odG1sL3N0YXRpYyAmYW1wOyZhbXA7IGNkIC92YXIvd3d3Lmh0bWwvc3RhdGljCisgICAgICQgL29wdCBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBjb2xsZWN0c3RhdGljCisgICAgICQgY2F0IC9ldGMvYXBhY2hlMi9zaXRlcy1hdmFpbGFibGUvMDAwLWRlZmF1bHQuY29uZgorCisgICAgICAgIC4uLgorCisgICAgICMgaW4gVmlydHVhbEhvc3QsIEFIRUFEIG9mIHRoZSBXU0dJU2NyaXB0QWxpYXMgZGVmaW5pdGlvbgorICAgICBBbGlhcyAvc3RhdGljLyAvdmFyL3d3dy5odG1sL3N0YXRpYy8KKworICAgICAmbHQ7RGlyZWN0b3J5IC92YXIvd3d3Lmh0bWwvc3RhdGljLyZndDsKKyAgICAgUmVxdWlyZSBhbGwgZ3JhbnRlZAorICAgICAmbHQ7L0RpcmVjdG9yeSZndDsKKworICAgICAgICAuLi4KKworICAgICBXU0dJU2NyaXB0IEFsaWFzIC8gL29wdC9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3dzZ2kucHkKKworICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN0YXJ0IFRvYXN0ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNocm9uaXplIHRoZSBkYXRhYmFzZXMgZm9yIFRvYXN0ZXIsIGFuZCB0aGVuIHN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICB1cCB0aGUgd2ViIHNlcnZlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGNvbnRpbnVlcyB3aXRoIHRoZSBhc3N1bWVkCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzIGZyb20gdGhlIHByZXZpb3VzIHN0ZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgc3luY2RiCisgICAgICQgL29wdC9iaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBtaWdyYXRlIG9ybQorICAgICAkIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbWlncmF0ZSBibGRjb250cm9sCisKKyAgICAgJCBzZXJ2aWNlIGFwYWNoZTIgcmVzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHJlZmVyZW5jZSBpbmZvcm1hdGlvbiBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYW5hZ2UucHk8L2ZpbGVuYW1lPiBjb21tYW5kcyB1c2VkIGhlcmUsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndG9hc3Rlci11c2VmdWwtY29tbWFuZHMnPlVzZWZ1bCBDb21tYW5kczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2V0IHVwIEJ1aWxkIENvbnRyb2wgYW5kIE9wZW4gdGhlIFdlYiBJbnRlcmZhY2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHJ1biB0aGUgYnVpbGQgY29udHJvbCBtYW5hZ2VyLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkbyB0aGlzIGFzIHNob3duIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBhcyB0aGUgInBva3kiIHVzZXIsIHN0YXJ0IHRoZSBydW5idWlsZHMgY29tbWFuZCBpbiBhIGxvb3AgKG9yIHB1dCBpdCBpbiBjcm9udGFiISkKKyAgICAgJCBzdWRvIC1pIC11IHBva3kKKyAgICAgJCB3aGlsZSB0cnVlOyBkbyAvb3B0L2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IHJ1bmJ1aWxkczsgc2xlZXAgMTA7IGRvbmUKKworICAgICAjIG9wZW4gdXAgdGhlIHdlYiBpbnRlcmZhY2UKKyAgICAgJCB4ZGctb3BlbiBodHRwOi8vW3NlcnZlci1hZGRyZXNzXS90b2FzdGVyZ3VpLworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgc3VnZ2VzdGVkIHRoYXQgeW91IGVuYWJsZSBidWlsZCBjb250cm9sIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nIDxmaWxlbmFtZT5ydW5idWlsZHM8L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jcm9udGFiPC9maWxlbmFtZT4gYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjcm9udGFiIC1sCisgICAgICogKiAqICogKiAgL29wdC9iaXRiYWtlL2xpdC90b2FzdGVyL21hbmFnZS5weSBydW5idWlsZHMKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk9wZW4gdGhlIEJyb3dzZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgdGhlIEFwYWNoZSBzZXJ2ZXIgaXMgcnVubmluZywgY29ubmVjdCB0byBpdCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIGZhdm9yaXRlIGJyb3dzZXIgYW5kIHZlcmlmeSB0aGF0IHRoZSBUb2FzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgY29tZXMgdXA6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC90b2FzdGVyZ3VpCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHRyYWNrIGFjY2Vzc2VzIGFuZCBlcnJvcnMgaW4gdGhlIEFwYWNoZQorICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZSBsb2dzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZy10aGUtdG9hc3Rlci13ZWItaW50ZXJmYWNlJz4KKyAgICAgICAgPHRpdGxlPlVzaW5nIHRoZSBUb2FzdGVyIFdlYiBJbnRlcmZhY2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIFRvYXN0ZXIgd2ViIGludGVyZmFjZSBhbGxvd3MgeW91IHRvIGRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnJvd3NlIHB1Ymxpc2hlZCBsYXllcnMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZyc+T3BlbkVtYmVkZGVkIE1ldGFkYXRhIEluZGV4PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGhhdCBhcmUgYXZhaWxhYmxlIGZvciB5b3VyIHNlbGVjdGVkIHZlcnNpb24gb2YgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbXBvcnQgeW91ciBvd24gbGF5ZXJzIGZvciBidWlsZGluZy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBZGQgYW5kIHJlbW92ZSBsYXllcnMgZnJvbSB5b3VyIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2V0IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBhIHRhcmdldCBvciBtdWx0aXBsZSB0YXJnZXRzIHRvIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFN0YXJ0IHlvdXIgYnVpbGRzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlZSB3aGF0IHdhcyBidWlsdCAocmVjaXBlcyBhbmQgcGFja2FnZXMpIGFuZCB3aGF0CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIHdlcmUgaW5zdGFsbGVkIGludG8geW91ciBmaW5hbCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCcm93c2UgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgb2YgeW91ciBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIHZhbHVlIG9mIGFsbCB2YXJpYWJsZXMgaW4geW91ciBidWlsZCBjb25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICBhbmQgd2hpY2ggZmlsZXMgc2V0IGVhY2ggdmFsdWUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRXhhbWluZSBlcnJvciwgd2FybmluZyBhbmQgdHJhY2UgbWVzc2FnZXMgdG8gYWlkIGluCisgICAgICAgICAgICAgICAgICAgIGRlYnVnZ2luZy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEJpdEJha2UgdGFza3MgZXhlY3V0ZWQgYW5kCisgICAgICAgICAgICAgICAgICAgIHJldXNlZCBkdXJpbmcgeW91ciBidWlsZCwgaW5jbHVkaW5nIHRob3NlIHRoYXQgdXNlZAorICAgICAgICAgICAgICAgICAgICBzaGFyZWQgc3RhdGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHJlY2lwZXMsIHBhY2thZ2VzCisgICAgICAgICAgICAgICAgICAgIGFuZCB0YXNrcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgcGVyZm9ybWFuY2UgaW5mb3JtYXRpb24gc3VjaCBhcyBidWlsZCB0aW1lLCB0YXNrIHRpbWUsCisgICAgICAgICAgICAgICAgICAgIENQVSB1c2FnZSwgYW5kIGRpc2sgSS9PLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgRm9sbG93aW5nIGFyZSBzZXZlcmFsIHZpZGVvcyB0aGF0IHNob3cgaG93IHRvIHVzZSB0aGUgVG9hc3RlciBHVUk6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgQ29uZmlndXJhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9cVlnRFo4WXpWNncnPnZpZGVvPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgb3ZlcnZpZXdzIGFuZCBkZW1vbnN0cmF0ZXMgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Ub2FzdGVyIEhvbWVwYWdlIGFuZCBUYWJsZSBDb250cm9sczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9UUVBUkRuclIxWHcnPnZpZGVvPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgZ29lcyBvdmVyIHRoZSBUb2FzdGVyIGVudHJ5IHBhZ2UsIGFuZCBwcm92aWRlcworICAgICAgICAgICAgICAgICAgICBhbiBvdmVydmlldyBvZiB0aGUgZGF0YSBtYW5pcHVsYXRpb24gY2FwYWJpbGl0aWVzIG9mCisgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIsIHdoaWNoIGluY2x1ZGUgc2VhcmNoLCBzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgYnkKKyAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW50IGNyaXRlcmlhLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIERhc2hib2FyZDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9S0txSFljbnAyZ0UnPnZpZGVvPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgc2hvd3MgeW91IHRoZSBidWlsZCBkYXNoYm9hcmQsIGEgcGFnZSBwcm92aWRpbmcgYW4KKyAgICAgICAgICAgICAgICAgICAgb3ZlcnZpZXcgb2YgdGhlIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBmb3IgYSBzZWxlY3RlZCBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbWFnZSBJbmZvcm1hdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9WHFZR0ZzbUEwUncnPnZpZGVvPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgd2Fsa3MgdGhyb3VnaCB0aGUgaW5mb3JtYXRpb24gVG9hc3RlciBwcm92aWRlcworICAgICAgICAgICAgICAgICAgICBhYm91dCBpbWFnZXM6IHBhY2thZ2VzIGluc3RhbGxlZCBhbmQgcm9vdCBmaWxlIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Db25maWd1cmF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1VVy1qLVQyVHpJZyc+dmlkZW88L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBwcm92aWRlcyBUb2FzdGVyIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VGFza3M6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PUQ0LTl2R1N4UXR3Jz52aWRlbzwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHNob3dzIHRoZSBpbmZvcm1hdGlvbiBUb2FzdGVyIHByb3ZpZGVzIGFib3V0IHRoZQorICAgICAgICAgICAgICAgICAgICB0YXNrcyBydW4gYnkgdGhlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SZWNpcGVzIGFuZCBQYWNrYWdlcyBCdWlsdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9eC02ZHg0aHVObncnPnZpZGVvPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgc2hvd3MgdGhlIGluZm9ybWF0aW9uIFRvYXN0ZXIgcHJvdmlkZXMgYWJvdXQgcmVjaXBlcworICAgICAgICAgICAgICAgICAgICBhbmQgcGFja2FnZXMgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UGVyZm9ybWFuY2UgRGF0YTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9cVdHTXJKb3F1c1EnPnZpZGVvPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgc2hvd3MgdGhlIGJ1aWxkIHBlcmZvcm1hbmNlIGRhdGEgcHJvdmlkZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworPCEtLQorICAgICAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1ndWktdmlkcy0xJz4KKyAgICAgICAgICAgIDx0aXRsZT5Ub2FzdGVyIEhvbWVwYWdlIGFuZCBUYWJsZSBDb250cm9sczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgdmlkZW8gZ29lcyBvdmVyIHRoZSBUb2FzdGVyIGVudHJ5IHBhZ2UsIGFuZCBwcm92aWRlcworICAgICAgICAgICAgICAgIGFuIG92ZXJ2aWV3IG9mIHRoZSBkYXRhIG1hbmlwdWxhdGlvbiBjYXBhYmlsaXRpZXMgb2YgVG9hc3RlciwKKyAgICAgICAgICAgICAgICB3aGljaCBpbmNsdWRlIHNlYXJjaCwgc29ydGluZyBhbmQgZmlsdGVyaW5nIGJ5IGRpZmZlcmVudAorICAgICAgICAgICAgICAgIGNyaXRlcmlhLgorICAgICAgICAgICAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgICAgICAgICAgPHZpZGVvb2JqZWN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvZGF0YSB3aWR0aD0iNjQwIiBoZWlnaHQ9IjQ4MCIgZmlsZXJlZj0iaHR0cDovL3d3dy55b3V0dWJlLmNvbS92L1FFQVJEbnJSMVh3Ij48L3ZpZGVvZGF0YT4KKyAgICAgICAgICAgICAgICAgICAgPC92aWRlb29iamVjdD4KKyAgICAgICAgICAgICAgICA8L21lZGlhb2JqZWN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItZ3VpLXZpZHMtMic+CisgICAgICAgICAgICA8dGl0bGU+QnVpbGQgRGFzaGJvYXJkPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyB2aWRlbyBzaG93cyB5b3UgdGhlIGJ1aWxkIGRhc2hib2FyZCwgYSBwYWdlIHByb3ZpZGluZyBhbgorICAgICAgICAgICAgICAgIG92ZXJ2aWV3IG9mIHRoZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUgZm9yIGEgc2VsZWN0ZWQgYnVpbGQuCisgICAgICAgICAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgICAgICAgICA8dmlkZW9vYmplY3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW9kYXRhIHdpZHRoPSI2NDBweCIgaGVpZ2h0PSI0ODBweCIgZmlsZXJlZj0iaHR0cDovL3d3dy55b3V0dWJlLmNvbS92L0tLcUhZY25wMmdFIj48L3ZpZGVvZGF0YT4KKyAgICAgICAgICAgICAgICAgICAgPC92aWRlb29iamVjdD4KKyAgICAgICAgICAgICAgICA8L21lZGlhb2JqZWN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItZ3VpLXZpZHMtMyc+CisgICAgICAgICAgICA8dGl0bGU+SW1hZ2UgSW5mb3JtYXRpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHZpZGVvIHdhbGtzIHRocm91Z2ggdGhlIGluZm9ybWF0aW9uIFRvYXN0ZXIgcHJvdmlkZXMKKyAgICAgICAgICAgICAgICBhYm91dCBpbWFnZXM6IHBhY2thZ2VzIGluc3RhbGxlZCBhbmQgcm9vdCBmaWxlIHN5c3RlbS4KKyAgICAgICAgICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICAgICAgICAgIDx2aWRlb29iamVjdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlb2RhdGEgd2lkdGg9IjY0MHB4IiBoZWlnaHQ9IjQ4MHB4IiBmaWxlcmVmPSJodHRwOi8vd3d3LnlvdXR1YmUuY29tL3YvWHFZR0ZzbUEwUnciPjwvdmlkZW9kYXRhPgorICAgICAgICAgICAgICAgICAgICA8L3ZpZGVvb2JqZWN0PgorICAgICAgICAgICAgICAgIDwvbWVkaWFvYmplY3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1ndWktdmlkcy00Jz4KKyAgICAgICAgICAgIDx0aXRsZT5Db25maWd1cmF0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyB2aWRlbyBzaG93cyB0aGUgaW5mb3JtYXRpb24gVG9hc3RlciBwcm92aWRlcyBhYm91dCBidWlsZAorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgICAgICAgICA8dmlkZW9vYmplY3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW9kYXRhIHdpZHRoPSI2NDBweCIgaGVpZ2h0PSI0ODBweCIgZmlsZXJlZj0iaHR0cDovL3d3dy55b3V0dWJlLmNvbS92L1VXLWotVDJUeklnIj48L3ZpZGVvZGF0YT4KKyAgICAgICAgICAgICAgICAgICAgPC92aWRlb29iamVjdD4KKyAgICAgICAgICAgICAgICA8L21lZGlhb2JqZWN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItZ3VpLXZpZHMtNSc+CisgICAgICAgICAgICA8dGl0bGU+VGFza3M8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHZpZGVvIHNob3dzIHRoZSBpbmZvcm1hdGlvbiBUb2FzdGVyIHByb3ZpZGVzIGFib3V0IHRoZQorICAgICAgICAgICAgICAgIHRhc2tzIHJ1biBieSB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgICAgICAgICAgPHZpZGVvb2JqZWN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvZGF0YSB3aWR0aD0iNjQwcHgiIGhlaWdodD0iNDgwcHgiIGZpbGVyZWY9Imh0dHA6Ly93d3cueW91dHViZS5jb20vdi9ENC05dkdTeFF0dyI+PC92aWRlb2RhdGE+CisgICAgICAgICAgICAgICAgICAgIDwvdmlkZW9vYmplY3Q+CisgICAgICAgICAgICAgICAgPC9tZWRpYW9iamVjdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWd1aS12aWRzLTYnPgorICAgICAgICAgICAgPHRpdGxlPlJlY2lwZXMgYW5kIFBhY2thZ2VzIEJ1aWx0PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyB2aWRlbyBzaG93cyB0aGUgaW5mb3JtYXRpb24gVG9hc3RlciBwcm92aWRlcyBhYm91dCByZWNpcGVzCisgICAgICAgICAgICAgICAgYW5kIHBhY2thZ2VzIGJ1aWx0LgorICAgICAgICAgICAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgICAgICAgICAgPHZpZGVvb2JqZWN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvZGF0YSB3aWR0aD0iNjQwcHgiIGhlaWdodD0iNDgwcHgiIGZpbGVyZWY9Imh0dHA6Ly93d3cueW91dHViZS5jb20vdi94LTZkeDRodU5udyI+PC92aWRlb2RhdGE+CisgICAgICAgICAgICAgICAgICAgIDwvdmlkZW9vYmplY3Q+CisgICAgICAgICAgICAgICAgPC9tZWRpYW9iamVjdD5xWWdEWjhZelY2dworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWd1aS12aWRzLTcnPgorICAgICAgICAgICAgPHRpdGxlPlBlcmZvcm1hbmNlIERhdGE8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHZpZGVvIHNob3dzIHRoZSBidWlsZCBwZXJmb3JtYW5jZSBkYXRhIHByb3ZpZGVkIGJ5CisgICAgICAgICAgICAgICAgVG9hc3Rlci4KKyAgICAgICAgICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICAgICAgICAgIDx2aWRlb29iamVjdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlb2RhdGEgd2lkdGg9IjY0MHB4IiBoZWlnaHQ9IjQ4MHB4IiBmaWxlcmVmPSJodHRwOi8vd3d3LnlvdXR1YmUuY29tL3YvcVdHTXJKb3F1c1EiPjwvdmlkZW9kYXRhPgorICAgICAgICAgICAgICAgICAgICA8L3ZpZGVvb2JqZWN0PgorICAgICAgICAgICAgICAgIDwvbWVkaWFvYmplY3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKy0tPgorPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLXN0YXJ0LnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1zdGFydC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJkYjVlYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1zdGFydC54bWwKQEAgLTAsMCArMSwxNDEgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSd0b2FzdGVyLW1hbnVhbC1zdGFydCc+CisKKzx0aXRsZT5QcmVwYXJpbmcgdG8gVXNlIFRvYXN0ZXI8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2hhcHRlciBkZXNjcmliZXMgaG93IHlvdSBuZWVkIHRvIHByZXBhcmUgeW91ciBzeXN0ZW0gaW4gb3JkZXIgdG8KKyAgICAgICAgdXNlIFRvYXN0ZXIuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItc2V0dGluZy11cC10aGUtYmFzaWMtc3lzdGVtLXJlcXVpcmVtZW50cyc+CisgICAgICAgIDx0aXRsZT5TZXR0aW5nIFVwIHRoZSBCYXNpYyBTeXN0ZW0gUmVxdWlyZW1lbnRzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBmaXJzdCBuZWVkIHRvIGJlIHN1cmUgeW91ciBidWlsZCBzeXN0ZW0gaXMgc2V0IHVwIHRvIHJ1bgorICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyN5cC1yZXNvdXJjZXMnPlNldHRpbmcgVXAgdG8gVXNlIHRoZSBZb2N0byBQcm9qZWN0PC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0IGZvciBpbmZvcm1hdGlvbiBvbiBob3cKKyAgICAgICAgICAgIHRvIHNldCB1cCB5b3VyIHN5c3RlbSBmb3IgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1lc3RhYmxpc2hpbmctdG9hc3Rlci1zeXN0ZW0tZGVwZW5kZW5jaWVzJz4KKyAgICAgICAgPHRpdGxlPkVzdGFibGlzaGluZyBUb2FzdGVyIFN5c3RlbSBEZXBlbmRlbmNpZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG9hc3RlciByZXF1aXJlcyBleHRyYSBQeXRob24gZGVwZW5kZW5jaWVzIGluIG9yZGVyIHRvIHJ1bi4KKyAgICAgICAgICAgIEEgVG9hc3RlciByZXF1aXJlbWVudHMgZmlsZSBuYW1lZAorICAgICAgICAgICAgPGZpbGVuYW1lPnRvYXN0ZXItcmVxdWlyZW1lbnRzLnR4dDwvZmlsZW5hbWU+IGRlZmluZXMgdGhlCisgICAgICAgICAgICBQeXRob24gZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgVGhlIHJlcXVpcmVtZW50cyBmaWxlIGlzIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGRpcmVjdG9yeSwgd2hpY2ggaXMgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgIHJvb3QgZGlyZWN0b3J5IG9mIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+cG9reS9iaXRiYWtlL3RvYXN0ZXItcmVxdWlyZW1lbnRzLnR4dDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIFRoZSBkZXBlbmRlbmNpZXMgYXBwZWFyIGluIGEgPGZpbGVuYW1lPnBpcDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgaW5zdGFsbC1jb21wYXRpYmxlIGZvcm1hdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLW9wdGlvbmFsLXZpcnR1YWwtZW52aXJvbm1lbnQnPgorICAgICAgICAgICAgPHRpdGxlPk9wdGlvbmFsbHkgU2V0dGluZyBVcCBhIFB5dGhvbiBWaXJ0dWFsIEVudmlyb25tZW50PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSBhIFB5dGhvbiB2aXJ0dWFsCisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgdGhhdCBhbGxvd3MgeW91IHRvIG1haW50YWluIGEgZGVkaWNhdGVkIFB5dGhvbgorICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgYW5kIGl0cyBvd24gc2V0IG9mIGluc3RhbGxlZCBtb2R1bGVzLgorICAgICAgICAgICAgICAgIERvaW5nIHNvIHNlcGFyYXRlcyB0aGUgZXhlY3V0YWJsZSBmcm9tIHRoZSBQeXRob24gYW5kIG1vZHVsZXMKKyAgICAgICAgICAgICAgICBwcm92aWRlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhbmQgdGhlcmVmb3JlIGF2b2lkcyBhbnkKKyAgICAgICAgICAgICAgICB2ZXJzaW9uIGNvbmZsaWN0cy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9sbG93IHRoZXNlIHN0ZXBzIHRvIHNldCB1cCB5b3VyIHZpcnR1YWwgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgVGhlc2Ugc3RlcHMgYXNzdW1lIGEgVWJ1bnR1IGRpc3RyaWJ1dGlvbjoKKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW5zdGFsbCA8ZmlsZW5hbWU+dmlydHVhbGVudjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsIHRoZSBzdXBwb3J0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5weXRob24tdmlydHVhbGVudjwvZmlsZW5hbWU+IHBhY2thZ2UgZnJvbSB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24gcmF0aGVyIHRoYW4gdXNpbmcgPGZpbGVuYW1lPnBpcDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8gYXB0LWdldCBpbnN0YWxsIHB5dGhvbi12aXJ0dWFsZW52CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgYW5kIEFjdGl2YXRlIGEgVmlydHVhbCBFbnZpcm9ubWVudDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHZpcnR1YWxlbnYgdmVudgorICAgICAkIHNvdXJjZSB2ZW52L2Jpbi9hY3RpdmF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIGNob29zZSB0byBzZXQgdXAgYSB2aXJ0dWFsIGVudmlyb25tZW50IGluCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRvIHJ1biBUb2FzdGVyLCB5b3UgbXVzdCBpbml0aWFsaXplIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgdmlydHVhbCBlbnZpcm9ubWVudCBlYWNoIHRpbWUgeW91IHdhbnQgdG8gc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgdG8gaW5pdGlhbGl6ZSB0aGUgZW52aXJvbm1lbnQganVzdAorICAgICAgICAgICAgICAgICAgICBiZWZvcmUgeW91IHN0YXJ0IFRvYXN0ZXI6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzb3VyY2UgdmVudi9iaW4vYWN0aXZhdGUKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWxvYWQtcGFja2FnZXMnPgorICAgICAgICAgICAgPHRpdGxlPkluc3RhbGwgVG9hc3RlciBQYWNrYWdlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGluc3RhbGwgdGhlIHBhY2thZ2VzIHRoYXQgVG9hc3RlciByZXF1aXJlcy4KKyAgICAgICAgICAgICAgICBVc2UgdGhpcyBjb21tYW5kOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBwaXAgaW5zdGFsbCAtciBiaXRiYWtlL3RvYXN0ZXItcmVxdWlyZW1lbnRzLnR4dAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCis8IS0tIENvbW1lbnRpbmcgdGhpcyBzZWN0aW9uIG91dCBmb3Igbm93IGluIGNhc2UgaXQgbmVlZHMgdG8gYmUgdXNlZCBhZ2Fpbi4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1pbnN0YWxsLWRhZW1vbic+CisgICAgICAgICAgICA8dGl0bGU+SW5zdGFsbCA8ZmlsZW5hbWU+ZGFlbW9uPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUb2FzdGVyIGRlcGVuZHMgb24KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LmxpYnNsYWNrLm9yZy9kYWVtb24vJz48ZmlsZW5hbWU+ZGFlbW9uPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24geW91ciBkaXN0cmlidXRpb24sIGhvdyB5b3UgaW5zdGFsbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kYWVtb248L2ZpbGVuYW1lPiBkaWZmZXJzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RGViaWFuLUJhc2VkIFN5c3RlbXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgcnVubmluZyBhIERlYmlhbi1iYXNlZCBkaXN0cmlidXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIDxmaWxlbmFtZT5kYWVtb248L2ZpbGVuYW1lPiB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8gYXB0LWdldCBpbnN0YWxsIGRhZW1vbuKAiworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Tm9uLURlYmlhbi1CYXNlZCBTeXN0ZW1zOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIG5vdCBydW5uaW5nIGEgRGViaWFuLWJhc2VkIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgKFJlZGhhdC1iYXNlZCBkaXN0cmlidXRpb24gc3VjaCBhcyBGZWRvcmEpLAorICAgICAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gZG93bmxvYWQg4oCLdGhlIGZpbGUgcmVsZXZhbnQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUgYW5kIHRoZW4gaW5zdGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRhZW1vbjwvZmlsZW5hbWU+IG1hbnVhbGx5LgorICAgICAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSB0aGUgY29tbWFuZHMgZm9yIDY0LWJpdCBkaXN0cmlidXRpb25zOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHdnZXQgaHR0cDovL2xpYnNsYWNrLm9yZy9kYWVtb24vZG93bmxvYWQvZGFlbW9uLTAuNi40LTEueDg2XzY0LnJwbQorICAgICAkIHN1ZG8gcnBtIC1pIGRhZW1vbi0wLjYuNC0xLng4Nl82NC5ycG0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHRoZSBjb21tYW5kcyBmb3IgYSAzMi1iaXQgZGlzdHJpYnV0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHdnZXQgaHR0cDovL2xpYnNsYWNrLm9yZy9kYWVtb24vZG93bmxvYWQvZGFlbW9uLTAuNi40LTEuaTY4Ni5ycG0KKyAgICAgJCBzdWRvIHJwbSAtaSDigItkYWVtb24tMC42LjQtMS5pNjg2LnJwbeKAiworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4gLS0+CisgICAgPC9zZWN0aW9uPgorPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLXN0eWxlLmNzcyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1zdHlsZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ2YjlmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1zdHlsZS5jc3MKQEAgLTAsMCArMSw5ODQgQEAKKy8qCisgICBHZW5lcmljIFhIVE1MIC8gRG9jQm9vayBYSFRNTCBDU1MgU3R5bGVzaGVldC4KKworICAgQnJvd3NlciB3cmFuZ2xpbmcgYW5kIHR5cG9ncmFwaGljIGRlc2lnbiBieQorICAgICAgT3l2aW5kIEtvbGFzIC8gcGlwcGluQGdpbXAub3JnCisKKyAgIEN1c3RvbWlzZWQgZm9yIFBva3kgYnkKKyAgICAgIE1hdHRoZXcgQWxsdW0gLyBtYWxsdW1Aby1oYW5kLmNvbQorCisgICBUaGFua3MgdG86CisgICAgIExpYW0gUi4gRS4gUXVpbgorICAgICBXaWxsaWFtIFNrYWdncworICAgICBKYWt1YiBTdGVpbmVyCisKKyAgIFN0cnVjdHVyZQorICAgLS0tLS0tLS0tCisKKyAgIFRoZSBzdHlsZXNoZWV0IGlzIGRpdmlkZWQgaW50byB0aGUgZm9sbG93aW5nIHNlY3Rpb25zOgorCisgICAgICAgUG9zaXRpb25pbmcKKyAgICAgICAgICBNYXJnaW5zLCBwYWRkaW5ncywgd2lkdGgsIGZvbnQtc2l6ZSwgY2xlYXJpbmcuCisgICAgICAgRGVjb3JhdGlvbnMKKyAgICAgICAgICBCb3JkZXJzLCBzdHlsZQorICAgICAgIENvbG9ycworICAgICAgICAgIENvbG9ycworICAgICAgIEdyYXBoaWNzCisgICAgICAgICAgR3JhcGhpY2FsIGJhY2tncm91bmRzCisgICAgICAgTmFzdHkgSUUgdHdlYWtzCisgICAgICAgICAgV29ya2Fyb3VuZHMgbmVlZGVkIHRvIG1ha2UgaXQgd29yayBpbiBpbnRlcm5ldCBleHBsb3JlciwKKyAgICAgICAgICBjdXJyZW50bHkgbWFrZXMgdGhlIHN0eWxlc2hlZXQgbm9uIHZhbGlkYXRpbmcsIGJ1dCB1cCB1bnRpbAorICAgICAgICAgIHRoaXMgcG9pbnQgaXQgaXMgdmFsaWRhdGluZy4KKyAgICAgICBNb3ppbGxhIGV4dGVuc2lvbnMKKyAgICAgICAgICBUcmFuc3BhcmVuY3kgZm9yIGZvb3RlcgorCSAgUm91bmRlZCBjb3JuZXJzIG9uIGJveGVzCisKKyovCisKKworICAvKioqKioqKioqKioqKioqIC8KKyAvICBQb3NpdGlvbmluZyAgIC8KKy8gKioqKioqKioqKioqKioqLworCitib2R5IHsKKyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIFNhbnMsIHNhbnMtc2VyaWY7CisKKyAgbWluLXdpZHRoOiA2NDBweDsKKyAgd2lkdGg6IDgwJTsKKyAgbWFyZ2luOiAgMGVtIGF1dG87CisgIHBhZGRpbmc6IDJlbSA1ZW0gNWVtIDVlbTsKKyAgY29sb3I6ICMzMzM7Cit9CisKK2gxLGgyLGgzLGg0LGg1LGg2LGg3IHsKKyAgZm9udC1mYW1pbHk6IEFyaWFsLCBTYW5zOworICBjb2xvcjogIzAwNTU3RDsKKyAgY2xlYXI6IGJvdGg7Cit9CisKK2gxIHsKKyAgZm9udC1zaXplOiAyZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAyZW0gMGVtIDBlbSAwZW07Cit9CisKK2gyLnN1YnRpdGxlIHsKKyAgbWFyZ2luOiAwLjEwZW0gMGVtIDMuMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuOGVtOworICBwYWRkaW5nLWxlZnQ6IDIwJTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCitoMiB7CisgIG1hcmdpbjogMmVtIDBlbSAwLjY2ZW0gMGVtOworICBwYWRkaW5nOiAwLjVlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjVlbTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gzLnN1YnRpdGxlIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDIuMTQlOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworaDMgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g0IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEyMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNSB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDYgeworICBtYXJnaW46IDFlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisuYXV0aG9yZ3JvdXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgcGFkZGluZy10b3A6IDI1NnB4OworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvdG9hc3Rlci10aXRsZS5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCB0b3A7CisgIG1hcmdpbi10b3A6IC0yNTZweDsKKyAgcGFkZGluZy1yaWdodDogNTBweDsKKyAgbWFyZ2luLWxlZnQ6IDBweDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7CisgIHdpZHRoOiA3NDBweDsKK30KKworaDMuYXV0aG9yIHsKKyAgbWFyZ2luOiAwZW0gMG1lIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zaXplOiAxMDAlOworICBjb2xvcjogIzMzMzsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5hdXRob3IgdHQuZW1haWwgeworICBmb250LXNpemU6IDY2JTsKK30KKworLnRpdGxlcGFnZSBociB7CisgIHdpZHRoOiAwZW07CisgIGNsZWFyOiBib3RoOworfQorCisucmV2aGlzdG9yeSB7CisgIHBhZGRpbmctdG9wOiAyZW07CisgIGNsZWFyOiBib3RoOworfQorCisudG9jLAorLmxpc3Qtb2YtdGFibGVzLAorLmxpc3Qtb2YtZXhhbXBsZXMsCisubGlzdC1vZi1maWd1cmVzIHsKKyAgcGFkZGluZzogMS4zM2VtIDBlbSAyLjVlbSAwZW07CisgIGNvbG9yOiAjMDA1NTdEOworfQorCisudG9jIHAsCisubGlzdC1vZi10YWJsZXMgcCwKKy5saXN0LW9mLWZpZ3VyZXMgcCwKKy5saXN0LW9mLWV4YW1wbGVzIHAgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMC4zZW07CisgIG1hcmdpbjogMS41ZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgcCBiLAorLmxpc3Qtb2YtdGFibGVzIHAgYiwKKy5saXN0LW9mLWZpZ3VyZXMgcCBiLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCBieworICBmb250LXNpemU6IDEwMC4wJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy50b2MgZGwsCisubGlzdC1vZi10YWJsZXMgZGwsCisubGlzdC1vZi1maWd1cmVzIGRsLAorLmxpc3Qtb2YtZXhhbXBsZXMgZGwgeworICBtYXJnaW46IDBlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZHQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGRkIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAyLjZlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuZ2xvc3NhcnkgZGwsCitkaXYudmFyaWFibGVsaXN0IGRsIHsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgd2lkdGg6IDIwZW07CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCisudmFyaWFibGVsaXN0IGRsIGR0IHsKKyAgbWFyZ2luLXRvcDogMC41ZW07Cit9CisKKy5nbG9zc2FyeSBkbCBkZCwKKy52YXJpYWJsZWxpc3QgZGwgZGQgeworICBtYXJnaW4tdG9wOiAtMWVtOworICBtYXJnaW4tbGVmdDogMjUuNWVtOworfQorCisuZ2xvc3NhcnkgZGQgcCwKKy52YXJpYWJsZWxpc3QgZGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKK2RpdiBwLmNvcHlyaWdodCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK2Rpdi5sZWdhbG5vdGljZSBwLmxlZ2Fsbm90aWNlLXRpdGxlIHsKKyAgbWFyZ2luLWJvdHRvbTogMGVtOworfQorCitwIHsKKyAgbGluZS1oZWlnaHQ6IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisKK30KKworZGwgeworICBwYWRkaW5nLXRvcDogMGVtOworfQorCitociB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCisKKy5tZWRpYW9iamVjdCwKKy5tZWRpYW9iamVjdGNvIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCitpbWcgeworICBib3JkZXI6IG5vbmU7Cit9CisKK3VsIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMS41ZW07Cit9CisKK3VsIGxpIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCit1bCBsaSBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKwordGFibGUgeworICB3aWR0aCA6MTAwJTsKK30KKwordGggeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3RkIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCitwIGFbaWRdIHsKKyAgbWFyZ2luOiAwcHg7CisgIHBhZGRpbmc6IDBweDsKKyAgZGlzcGxheTogaW5saW5lOworICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOworfQorCithIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGNvbG9yOiAjNDQ0OworfQorCitwcmUgeworICAgIG92ZXJmbG93OiBhdXRvOworfQorCithOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIC8qZm9udC13ZWlnaHQ6IGJvbGQ7Ki8KK30KKworLyogVGhpcyBzdHlsZSBkZWZpbmVzIGhvdyB0aGUgcGVybWFsaW5rIGNoYXJhY3RlcgorICAgYXBwZWFycyBieSBpdHNlbGYgYW5kIHdoZW4gaG92ZXJlZCBvdmVyIHdpdGgKKyAgIHRoZSBtb3VzZS4gKi8KKworW2FsdD0nUGVybWFsaW5rJ10geyBjb2xvcjogI2VlZTsgfQorW2FsdD0nUGVybWFsaW5rJ106aG92ZXIgeyBjb2xvcjogYmxhY2s7IH0KKworCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUgeworICBtYXJnaW46IDFlbSAwZW07CisgIHBhZGRpbmc6IDFlbTsKKyAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOworfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWxleGFtcGxlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbHRhYmxlIHAudGl0bGUgYiwKK2Rpdi5maWd1cmUgcC50aXRsZSBiLAorZGl2LmV4YW1wbGUgcC50aXRsZSBiLAorZGl2LnRhYmxlIHAudGl0bGUgYnsKKyAgICBwYWRkaW5nLXRvcDogMGVtOworICAgIG1hcmdpbi10b3A6IDBlbTsKKyAgICBmb250LXNpemU6IDEwMCU7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKK30KKworLm1lZGlhb2JqZWN0IC5jYXB0aW9uLAorLm1lZGlhb2JqZWN0IC5jYXB0aW9uIHAgIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZy10b3A6IDAuNWVtOworICBwYWRkaW5nLWJvdHRvbTogMC41ZW07Cit9CisKKy5lcGlncmFwaCB7CisgIHBhZGRpbmctbGVmdDogNTUlOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKy5lcGlncmFwaCBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmVwaWdyYXBoIC5xdW90ZSB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKy5lcGlncmFwaCAuYXR0cmlidXRpb24geworICBmb250LXN0eWxlOiBub3JtYWw7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitzcGFuLmFwcGxpY2F0aW9uIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCisucHJvZ3JhbWxpc3RpbmcgeworICBmb250LWZhbWlseTogbW9ub3NwYWNlOworICBmb250LXNpemU6IDgwJTsKKyAgd2hpdGUtc3BhY2U6IHByZTsKKyAgbWFyZ2luOiAxLjMzZW0gMGVtOworICBwYWRkaW5nOiAxLjMzZW07Cit9CisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBtYXJnaW4tdG9wOiAxZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKKworfQorCisvKiBmb3JjZSBmdWxsIHdpZHRoIG9mIHRhYmxlIHdpdGhpbiBkaXYgKi8KKy50aXAgdGFibGUsCisud2FybmluZyB0YWJsZSwKKy5jYXV0aW9uIHRhYmxlLAorLm5vdGUgdGFibGUgeworICBib3JkZXI6IG5vbmU7CisgIHdpZHRoOiAxMDAlOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBwYWRkaW5nOiAwLjhlbSAwLjBlbSAwLjBlbSAwLjBlbTsKKyAgbWFyZ2luIDogMGVtIDBlbSAwZW0gMGVtOworfQorCisudGlwIHAsCisud2FybmluZyBwLAorLmNhdXRpb24gcCwKKy5ub3RlIHAgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMC41ZW07CisgIHBhZGRpbmctcmlnaHQ6IDFlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmFjcm9ueW0geworICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICBwYWRkaW5nOiAwLjA5ZW0gMC4zZW07CisgIG1hcmdpbjogMGVtOworfQorCisuaXRlbWl6ZWRsaXN0IGxpIHsKKyAgY2xlYXI6IG5vbmU7Cit9CisKKy5maWxlbmFtZSB7CisgIGZvbnQtc2l6ZTogbWVkaXVtOworICBmb250LWZhbWlseTogQ291cmllciwgbW9ub3NwYWNlOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGxlZnQ6IDBlbTsKKyAgdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2RmOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAgbGVmdDogMGVtOworICBib3R0b206IDBlbTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworZGl2Lm5hdmhlYWRlciB0ZCwKK2Rpdi5uYXZmb290ZXIgdGQgeworICBmb250LXNpemU6IDY2JTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0aCB7CisgIC8qZm9udC1mYW1pbHk6IEdlb3JnaWEsIFRpbWVzLCBzZXJpZjsqLworICAvKmZvbnQtc2l6ZTogeC1sYXJnZTsqLworICBmb250LXNpemU6IDgwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci1ib3R0b206IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYSwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYSB7CisgIGNvbG9yOiAjNzc3OworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKKy8qIG5vcm1hbCB0ZXh0IGluIHRoZSBmb290ZXIgKi8KK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgeworICBjb2xvcjogYmxhY2s7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTp2aXNpdGVkLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOnZpc2l0ZWQgeworICBjb2xvcjogIzQ0NDsKK30KKworCisvKiBsaW5rcyBpbiBoZWFkZXIgYW5kIGZvb3RlciAqLworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOmhvdmVyLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBjb2xvcjogIzMzYTsKK30KKworZGl2Lm5hdmhlYWRlciBociwKK2Rpdi5uYXZmb290ZXIgaHIgeworICBkaXNwbGF5OiBub25lOworfQorCisKKy5xYW5kYXNldCB0ci5xdWVzdGlvbiB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnFhbmRhc2V0IHRyLmFuc3dlciB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKy5hbnN3ZXIgdGQgeworICBwYWRkaW5nLWJvdHRvbTogMS41ZW07Cit9CisKKy5lbXBoYXNpcyB7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisKKyAgLyoqKioqKioqKioqKiogLworIC8gZGVjb3JhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKi8KKworLnRpdGxlcGFnZSB7Cit9CisKKy5wYXJ0IC50aXRsZSB7Cit9CisKKy5zdWJ0aXRsZSB7CisgICAgYm9yZGVyOiBub25lOworfQorCisvKgoraDEgeworICBib3JkZXI6IG5vbmU7Cit9CisKK2gyIHsKKyAgYm9yZGVyLXRvcDogc29saWQgMC4yZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDMgeworICBib3JkZXItdG9wOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDQgeworICBib3JkZXI6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNSB7CisgIGJvcmRlcjogMGVtOworfQorKi8KKworLnByb2dyYW1saXN0aW5nIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisucXVlc3Rpb24gdGQgeworICBib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7Cit9CisKKy5hbnN3ZXIgeworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZDsKK30KKworICAvKioqKioqKioqIC8KKyAvICBjb2xvcnMgIC8KKy8gKioqKioqKioqLworCitib2R5IHsKKyAgY29sb3I6ICMzMzM7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorCithIHsKKyAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cit9CisKK2E6aG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVkZWRlOworfQorCisKK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3LAoraDggeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKK30KKworaHIgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKKworLnRpcCwgLndhcm5pbmcsIC5jYXV0aW9uLCAubm90ZSB7CisgIGJvcmRlci1jb2xvcjogI2ZmZjsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjsKK30KKworCisud2FybmluZyB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLnRpcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5ub3RlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgY29sb3I6ICMwNDQ7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworcHJlLnByb2dyYW1saXN0aW5nIHsKKyAgY29sb3I6IGJsYWNrOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworICBib3JkZXItY29sb3I6ICNhYWE7CisgIGJvcmRlci13aWR0aDogMnB4OworfQorCisuZ3VpbWVudSwKKy5ndWlsYWJlbCwKKy5ndWltZW51aXRlbSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgYm9yZGVyLWNvbG9yOiAjOTk5OworfQorCisKK2Rpdi5uYXZoZWFkZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKK2Rpdi5uYXZmb290ZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKKyAgLyoqKioqKioqKioqIC8KKyAvICBncmFwaGljcyAgLworLyAqKioqKioqKioqKi8KKworLyoKK2JvZHkgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ib2R5X2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisubmF2aGVhZGVyLAorLm5vdGUsCisudGlwIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvbm90ZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLndhcm5pbmcsCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL3dhcm5pbmdfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5maWd1cmUsCisuaW5mb3JtYWxmaWd1cmUsCisuZXhhbXBsZSwKKy5pbmZvcm1hbGV4YW1wbGUsCisudGFibGUsCisuaW5mb3JtYWx0YWJsZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2ZpZ3VyZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworKi8KK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3eworfQorCisvKgorRXhhbXBsZSBvZiBob3cgdG8gc3RpY2sgYW4gaW1hZ2UgYXMgcGFydCBvZiB0aGUgdGl0bGUuCisKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy93aGl0ZS1vbi1ibGFjay5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7Cit9CisqLworCitkaXYucHJlZmFjZSAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5jb2xvcGhvbiAudGl0bGUsCitkaXYuY2hhcHRlciAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7Cit9CisKK2Rpdi5zZWN0aW9uIGRpdi5zZWN0aW9uIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LnNlY3QyIC50aXRsZXBhZ2UgLnRpdGxlIHsKKyAgICBiYWNrZ3JvdW5kOiBub25lOworfQorCisKK2gxLnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIGhlaWdodDogMjU2cHg7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47Cit9CisKK2gyLnN1YnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47CisgIHdpZHRoOiAwcHg7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyAgcGlwcGluLmdpbXAub3JnIHNwZWNpZmljIGFsdGVyYXRpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgY29sb3I6ICM3Nzc7CisgIGZvbnQtc2l6ZTogODAlOworICBwYWRkaW5nOiAwOworICBtYXJnaW46IDA7CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdG9wOiAwcHg7CisgIGxlZnQ6IDBweDsKKyAgd2lkdGg6IDEwMCU7CisgIGhlaWdodDogNTBweDsKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2hlYWRpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKKyAgYm9yZGVyOiBub25lOworfQorCitkaXYuaGVhZGluZyBhIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyOiBub25lOworICBjb2xvcjogI2RkZDsKKyAgZm9udC1zaXplOiA4MCU7CisgIHRleHQtYWxpZ246cmlnaHQ7CisKKyAgd2lkdGg6IDEwMCU7CisgIHBhZGRpbmctdG9wOiAxMHB4OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGJvdHRvbTogMHB4OworICBsZWZ0OiAwcHg7CisKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2Zvb3RpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7Cit9CisqLworCisKKworICAvKioqKioqKioqKioqKioqKioqIC8KKyAvICBuYXN0eSBpZSB0d2Vha3MgIC8KKy8gKioqKioqKioqKioqKioqKioqLworCisvKgorZGl2LmhlYWRpbmcsIGRpdi5uYXZoZWFkZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKK30KKworZGl2LmZvb3RpbmcsIGRpdi5uYXZmb290ZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKKyAgbWFyZ2luLWxlZnQ6ZXhwcmVzc2lvbigiLTVlbSIpOworfQorYm9keSB7CisgIHBhZGRpbmc6ZXhwcmVzc2lvbigiNGVtIDVlbSAwZW0gNWVtIik7Cit9CisqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8KKyAvIG1vemlsbGEgdmVuZG9yIHNwZWNpZmljIGNzcyBleHRlbnNpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIC1tb3otb3BhY2l0eTogMC44ZW07Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSwKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuNWVtOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuM2VtOworfQorKi8KKwordGFibGUgdHIgdGQgdGFibGUgdHIgdGQgeworICBkaXNwbGF5OiBub25lOworfQorCisKK2hyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKwordGFibGUgeworICBib3JkZXI6IDBlbTsKK30KKworIC5waG90byB7CisgIGZsb2F0OiByaWdodDsKKyAgbWFyZ2luLWxlZnQ6ICAgMS41ZW07CisgIG1hcmdpbi1ib3R0b206IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisgIG1heC13aWR0aDogICAgICAxN2VtOworICBib3JkZXI6ICAgICAxcHggc29saWQgZ3JheTsKKyAgcGFkZGluZzogICAgM3B4OworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKyAuc2VwZXJhdG9yIHsKKyAgIHBhZGRpbmctdG9wOiAyZW07CisgICBjbGVhcjogYm90aDsKKyAgfQorCisgICN2YWxpZGF0b3JzIHsKKyAgICAgIG1hcmdpbi10b3A6IDVlbTsKKyAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgY29sb3I6ICM3Nzc7CisgIH0KKyAgQG1lZGlhIHByaW50IHsKKyAgICAgIGJvZHkgeworICAgICAgICAgIGZvbnQtc2l6ZTogOHB0OworICAgICAgfQorICAgICAgLm5vcHJpbnQgeworICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CisgICAgICB9CisgIH0KKworCisudGlwLAorLm5vdGUgeworICAgYmFja2dyb3VuZDogI2YwZjBmMjsKKyAgIGNvbG9yOiAjMzMzOworICAgcGFkZGluZzogMjBweDsKKyAgIG1hcmdpbjogMjBweDsKK30KKworLnRpcCBoMywKKy5ub3RlIGgzIHsKKyAgIHBhZGRpbmc6IDBlbTsKKyAgIG1hcmdpbjogMGVtOworICAgZm9udC1zaXplOiAyZW07CisgICBmb250LXdlaWdodDogYm9sZDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisudGlwIGEsCisubm90ZSBhIHsKKyAgIGNvbG9yOiAjMzMzOworICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy5mb290bm90ZSB7CisgICBmb250LXNpemU6IHNtYWxsOworICAgY29sb3I6ICMzMzM7Cit9CisKKy8qIENoYW5nZXMgdGhlIGFubm91bmNlbWVudCB0ZXh0ICovCisudGlwIGgzLAorLndhcm5pbmcgaDMsCisuY2F1dGlvbiBoMywKKy5ub3RlIGgzIHsKKyAgIGZvbnQtc2l6ZTpsYXJnZTsKKyAgIGNvbG9yOiAjMDA1NTdEOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRhYzZkOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC54bWwKQEAgLTAsMCArMSw3OCBAQAorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGJvb2sgaWQ9J3RvYXN0ZXItbWFudWFsJyBsYW5nPSdlbicKKyAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIgorICAgICAgeG1sbnM9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIgorICAgICAgPgorICAgIDxib29raW5mbz4KKworICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICA8aW1hZ2VvYmplY3Q+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSdmaWd1cmVzL3RvYXN0ZXItdGl0bGUucG5nJworICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9J1NWRycKKyAgICAgICAgICAgICAgICAgICAgYWxpZ249J2xlZnQnIHNjYWxlZml0PScxJyB3aWR0aD0nMTAwJScvPgorICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgICAgPC9tZWRpYW9iamVjdD4KKworICAgICAgICA8dGl0bGU+CisgICAgICAgICAgICBUb2FzdGVyIFVzZXIgTWFudWFsCisgICAgICAgIDwvdGl0bGU+CisKKyAgICAgICAgPGF1dGhvcmdyb3VwPgorICAgICAgICAgICAgPGF1dGhvcj4KKyAgICAgICAgICAgICAgICA8Zmlyc3RuYW1lPlNjb3R0PC9maXJzdG5hbWU+IDxzdXJuYW1lPlJpZmVuYmFyazwvc3VybmFtZT4KKyAgICAgICAgICAgICAgICA8YWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxvcmduYW1lPkludGVsIENvcnBvcmF0aW9uPC9vcmduYW1lPgorICAgICAgICAgICAgICAgIDwvYWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgPGVtYWlsPnNjb3R0Lm0ucmlmZW5iYXJrQGludGVsLmNvbTwvZW1haWw+CisgICAgICAgICAgICA8L2F1dGhvcj4KKyAgICAgICAgPC9hdXRob3Jncm91cD4KKworICAgICAgICA8cmV2aGlzdG9yeT4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuODwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTU8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuOCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuOTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxNTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS45IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgIDwvcmV2aGlzdG9yeT4KKworICAgIDxjb3B5cmlnaHQ+CisgICAgICA8eWVhcj4mQ09QWVJJR0hUX1lFQVI7PC95ZWFyPgorICAgICAgPGhvbGRlcj5MaW51eCBGb3VuZGF0aW9uPC9ob2xkZXI+CisgICAgPC9jb3B5cmlnaHQ+CisKKyAgICA8bGVnYWxub3RpY2U+CisgICAgICA8cGFyYT4KKyAgICAgICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50IHVuZGVyCisgICAgICAgIHRoZSB0ZXJtcyBvZiB0aGUgPHVsaW5rIHR5cGU9Imh0dHAiIHVybD0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMi4wL3VrLyI+Q3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZSBBbGlrZSAyLjAgVUs6IEVuZ2xhbmQgJmFtcDsgV2FsZXM8L3VsaW5rPiBhcyBwdWJsaXNoZWQgYnkgQ3JlYXRpdmUgQ29tbW9ucy4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxub3RlPgorICAgICAgICAgIEZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtYW51YWwgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2UsIHNlZSB0aGUKKyAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19UT0FTVF9VUkw7Jz5Ub2FzdGVyIFVzZXIgTWFudWFsPC91bGluaz4KKyAgICAgICAgICBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IHdlYnNpdGUuCisgICAgICA8L25vdGU+CisKKyAgICA8L2xlZ2Fsbm90aWNlPgorCisgICAgPC9ib29raW5mbz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InRvYXN0ZXItbWFudWFsLWludHJvLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0idG9hc3Rlci1tYW51YWwtc3RhcnQueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ0b2FzdGVyLW1hbnVhbC1zZXR1cC1hbmQtdXNlLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0idG9hc3Rlci1tYW51YWwtcmVmZXJlbmNlLnhtbCIvPgorCis8L2Jvb2s+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b29scy9lY2xpcHNlLWhlbHAuc2VkIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Rvb2xzL2VjbGlwc2UtaGVscC5zZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg2OTBiYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b29scy9lY2xpcHNlLWhlbHAuc2VkCkBAIC0wLDAgKzEsMTggQEAKKyMgUHJvY2Vzc2VzIHBva3ktcmVmLW1hbnVhbCBhbmQgeW9jdG8tcHJvamVjdC1xcyBtYW51YWwgKDx3b3JkPi08d29yZD4tPHdvcmQ+IHN0eWxlKQorIyBGb3IgZXhhbXBsZToKKyMgICAidWxpbmsiIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuMy9wb2t5LXJlZi1tYW51YWwvcG9reS1yZWYtbWFudWFsLmh0bWwjZmFxIgorIyAgIC0+ICJsaW5rIiBocmVmPSIuLi9wb2t5LXJlZi1tYW51YWwvZmFxLmh0bWwiCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcL1teXC9dKlwvXChbYS16XSotW2Etel0qLVthLXpdKlwpXC9bYS16XSotW2Etel0qLVthLXpdKi5odG1sI1woW15cIl0qXClcIi9cImxpbmtcIiBocmVmPVwiXC5cLlwvXDFcL1wyLmh0bWxcIi9nCisKKyMgUHJvY2Vzc2VzIGFsbCBvdGhlciBtYW51YWxzICg8d29yZD4tPHdvcmQ+IHN0eWxlKQorIyBGb3IgZXhhbXBsZToKKyMgICAidWxpbmsiIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuMy9rZXJuZWwtbWFudWFsL2tlcm5lbC1tYW51YWwuaHRtbCNmYXEiCisjICAgLT4gImxpbmsiIGhyZWY9Ii4uL2tlcm5lbC1tYW51YWwvZmFxLmh0bWwiCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcL1teXC9dKlwvXChbYS16XSotW2Etel0qXClcL1thLXpdKi1bYS16XSouaHRtbCNcKFteXCJdKlwpXCIvXCJsaW5rXCIgaHJlZj1cIlwuXC5cL1wxXC9cMi5odG1sXCIvZworCisjIFByb2Nlc3MgY2FzZXMgd2hlcmUganVzdCBhbiBleHRlcm5hbCBtYW51YWwgaXMgcmVmZXJlbmNlZCB3aXRob3V0IGFuIGlkIGFuY2hvcgorIyBGb3IgZXhhbXBsZToKKyMgICAidWxpbmsiIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuMy9rZXJuZWwtbWFudWFsL2tlcm5lbC1tYW51YWwuaHRtbAorIyAgIC0+ICJsaW5rIiBocmVmPSIuLi9rZXJuZWwtbWFudWFsL2luZGV4Lmh0bWwiCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcL1teXC9dKlwvXChbYS16XSotW2Etel0qLVthLXpdKlwpXC9bYS16XSotW2Etel0qLVthLXpdKi5odG1sXCIvXCJsaW5rXCIgaHJlZj1cIlwuXC5cL1wxXC9pbmRleC5odG1sXCIvZworcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC9bXlwvXSpcL1woW2Etel0qLVthLXpdKlwpXC9bYS16XSotW2Etel0qLmh0bWxcIi9cImxpbmtcIiBocmVmPVwiXC5cLlwvXDFcL2luZGV4Lmh0bWxcIi9nCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9vbHMvbWVnYS1tYW51YWwuc2VkIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Rvb2xzL21lZ2EtbWFudWFsLnNlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWM0MGIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Rvb2xzL21lZ2EtbWFudWFsLnNlZApAQCAtMCwwICsxLDMzIEBACisjIFByb2Nlc3NlcyBwb2t5LXJlZi1tYW51YWwgYW5kIHlvY3RvLXByb2plY3QtcXMgbWFudWFsICg8d29yZD4tPHdvcmQ+LTx3b3JkPiBzdHlsZSkuCisjIFRoaXMgc3R5bGUgaXMgZm9yIG1hbnVhbCBmb2xkZXJzIGxpa2UgInlvY3RvLXByb2plY3QtcXMiIGFuZCAicG9reS1yZWYtbWFudWFsIi4KKyMgVGhpcyBpcyB0aGUgb2xkIHdheSB0aGF0IGRpZCBpdC4gIENhbid0IGRvIHRoYXQgbm93IHRoYXQgd2UgaGF2ZSAiYml0YmFrZS11c2VyLW1hbnVhbCIgc3RyaW5ncworIyBpbiB0aGUgbWVnYS1tYW51YWwuCisjIHMvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC9bYS16XSotW2Etel0qLVthLXpdKlwvW2Etel0qLVthLXpdKi1bYS16XSouaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZworcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL3lvY3RvLXByb2plY3QtcXNcL3lvY3RvLXByb2plY3QtcXMuaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZworcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL3Bva3ktcmVmLW1hbnVhbFwvcG9reS1yZWYtbWFudWFsLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKKworIyBQcm9jZXNzZXMgYWxsIG90aGVyIG1hbnVhbHMgKDx3b3JkPi08d29yZD4gc3R5bGUpIGV4Y2VwdCBmb3IgdGhlIEJpdEJha2UgVXNlciBNYW51YWwgYmVjYXVzZQorIyBpdCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIG1lZ2EtbWFudWFsLgorIyBUaGlzIHN0eWxlIGlzIGZvciBtYW51YWwgZm9sZGVycyB0aGF0IHVzZSB0d28gd29yZCwgd2hpY2ggaXMgdGhlIHN0YW5kYXJkIG5vdyAoZS5nLiAicmVmLW1hbnVhbCIpLgorIyBUaGlzIHdhcyB0aGUgb25lLWxpbmVyIHRoYXQgd29ya2VkIGJlZm9yZSB3ZSBpbnRyb2R1Y2VkIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsLCB3aGljaCBpcworIyBub3QgaW4gdGhlIG1lZ2EtbWFudWFsLgorIyBzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzEuOVwvW2Etel0qLVthLXpdKlwvW2Etel0qLVthLXpdKi5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCisKK3MvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC9hZHQtbWFudWFsXC9hZHQtbWFudWFsLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKK3MvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC9ic3AtZ3VpZGVcL2JzcC1ndWlkZS5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzEuOVwvZGV2LW1hbnVhbFwvZGV2LW1hbnVhbC5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzEuOVwva2VybmVsLWRldlwva2VybmVsLWRldi5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzEuOVwvcHJvZmlsZS1tYW51YWxcL3Byb2ZpbGUtbWFudWFsLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKK3MvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC9yZWYtbWFudWFsXC9yZWYtbWFudWFsLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKK3MvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC90b2FzdGVyLW1hbnVhbFwvdG9hc3Rlci1tYW51YWwuaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZworcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL3lvY3RvLXByb2plY3QtcXNcL3lvY3RvLXByb2plY3QtcXMuaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZworCisjIFByb2Nlc3MgY2FzZXMgd2hlcmUganVzdCBhbiBleHRlcm5hbCBtYW51YWwgaXMgcmVmZXJlbmNlZCB3aXRob3V0IGFuIGlkIGFuY2hvcgorcy88YSBjbGFzcz1cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL3lvY3RvLXByb2plY3QtcXNcL3lvY3RvLXByb2plY3QtcXMuaHRtbFwiIHRhcmdldD1cIl90b3BcIj5Zb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0PFwvYT4vWW9jdG8gUHJvamVjdCBRdWljayBTdGFydC9nCitzLzxhIGNsYXNzPVwidWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzEuOVwvZGV2LW1hbnVhbFwvZGV2LW1hbnVhbC5odG1sXCIgdGFyZ2V0PVwiX3RvcFwiPllvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsPFwvYT4vWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwvZworcy88YSBjbGFzcz1cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL2FkdC1tYW51YWxcL2FkdC1tYW51YWwuaHRtbFwiIHRhcmdldD1cIl90b3BcIj5Zb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlPFwvYT4vWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZS9nCitzLzxhIGNsYXNzPVwidWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzEuOVwvYnNwLWd1aWRlXC9ic3AtZ3VpZGUuaHRtbFwiIHRhcmdldD1cIl90b3BcIj5Zb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZTxcL2E+L1lvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIERldmVsb3BlcidzIEd1aWRlL2cKK3MvPGEgY2xhc3M9XCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC9wcm9maWxlLW1hbnVhbFwvcHJvZmlsZS1tYW51YWwuaHRtbFwiIHRhcmdldD1cIl90b3BcIj5Zb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZyBNYW51YWw8XC9hPi9Zb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZyBNYW51YWwvZworcy88YSBjbGFzcz1cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL2tlcm5lbC1kZXZcL2tlcm5lbC1kZXYuaHRtbFwiIHRhcmdldD1cIl90b3BcIj5Zb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWw8XC9hPi9Zb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWwvZworcy88YSBjbGFzcz1cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL3JlZi1tYW51YWxcL3JlZi1tYW51YWwuaHRtbFwiIHRhcmdldD1cIl90b3BcIj5Zb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWw8XC9hPi9Zb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwvZworcy88YSBjbGFzcz1cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL3RvYXN0ZXItbWFudWFsXC90b2FzdGVyLW1hbnVhbC5odG1sXCIgdGFyZ2V0PVwiX3RvcFwiPlRvYXN0ZXIgVXNlciBNYW51YWw8XC9hPi9Ub2FzdGVyIFVzZXIgTWFudWFsL2cKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b29scy9wb2t5LWRvY2Jvb2stdG8tcGRmIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Rvb2xzL3Bva3ktZG9jYm9vay10by1wZGYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjU1ZmQyNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b29scy9wb2t5LWRvY2Jvb2stdG8tcGRmCkBAIC0wLDAgKzEsNTEgQEAKKyMhL2Jpbi9zaAorCQoraWYgWyAteiAiJDEiIC1vIC16ICIkMiIgXTsgdGhlbgorICAgZWNobyAidXNhZ2U6IFstdl0gJDAgPGRvY2Jvb2sgZmlsZT4gPHRlbXBsYXRlZGlyPiIKKyAgIGVjaG8KKyAgIGVjaG8gIipOT1RFKiB5b3UgbmVlZCB4c2x0cHJvYywgZm9wIGFuZCBud2Fsc2ggZG9jYm9vayBzdHlsZXNoZWV0cyIgCisgICBlY2hvICIgICAgICAgaW5zdGFsbGVkIGZvciB0aGlzIHRvIHdvcmshIgorICAgZWNobworICAgZXhpdCAwCitmaQorCitGTz1gZWNobyAkMSB8IHNlZCBzLy54bWwvLmZvL2AgfHwgZXhpdCAxCitQREY9YGVjaG8gJDEgfCBzZWQgcy8ueG1sLy5wZGYvYCB8fCBleGl0IDEKK1RFTVBMQVRFRElSPSQyCisKKyMjCisjIFRoZXNlIFVSSSBzaG91bGQgYmUgcmV3cml0dGVuIGJ5IHlvdXIgZGlzdHJpYnV0aW9uJ3MgeG1sIGNhdGFsb2cgdG8KKyMgbWF0Y2ggeW91ciBsb2NhbHkgaW5zdGFsbGVkIFhTTCBzdHlsZXNoZWV0cy4KK1hTTF9CQVNFX1VSST0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsL2N1cnJlbnQiCisKKyMgQ3JlYXRlcyBhIHRlbXBvcmFyeSBYU0wgc3R5bGVzaGVldCBiYXNlZCBvbiB0aXRsZXBhZ2UueHNsCit4c2x0cHJvYyAtbyAvdG1wL3RpdGxlcGFnZS54c2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAtLXhpbmNsdWRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgJFhTTF9CQVNFX1VSSS90ZW1wbGF0ZS90aXRsZXBhZ2UueHNsIFwKKyAgICAgICAgICRURU1QTEFURURJUi90aXRsZXBhZ2UudGVtcGxhdGVzLnhtbCB8fCBleGl0IDEKKworIyBDcmVhdGVzIHRoZSBmaWxlIG5lZWRlZCBmb3IgRk9QCit4c2x0cHJvYyAtLXhpbmNsdWRlICAgICAgICAgICAgICAgICAgICBcCisJIC0tc3RyaW5ncGFyYW0gaHlwaGVuYXRlIGZhbHNlIFwKKwkgLS1zdHJpbmdwYXJhbSBmb3JtYWwudGl0bGUucGxhY2VtZW50ICJmaWd1cmUgYWZ0ZXIiIFwKKwkgLS1zdHJpbmdwYXJhbSB1bGluay5zaG93IDEgXAorICAgICAgICAgLS1zdHJpbmdwYXJhbSAgYm9keS5mb250Lm1hc3RlciAgOSBcCisgICAgICAgICAtLXN0cmluZ3BhcmFtICB0aXRsZS5mb250Lm1hc3RlciAgMTEgXAorICAgICAgICAgLS1zdHJpbmdwYXJhbSBkcmFmdC53YXRlcm1hcmsuaW1hZ2UgIiRURU1QTEFURURJUi9kcmFmdC5wbmciIFwKKyAgICAgICAgIC0tc3RyaW5ncGFyYW0gIGNoYXB0ZXIuYXV0b2xhYmVsIDEgXAorICAgICAgICAgLS1zdHJpbmdwYXJhbSAgYXBwZW5kaXguYXV0b2xhYmVsIEEgXAorICAgICAgICAgLS1zdHJpbmdwYXJhbSAgc2VjdGlvbi5hdXRvbGFiZWwgMSBcCisgICAgICAgICAtLXN0cmluZ3BhcmFtICBzZWN0aW9uLmxhYmVsLmluY2x1ZGVzLmNvbXBvbmVudC5sYWJlbCAxIFwKKyAgICAgICAgIC0tb3V0cHV0ICRGTyAgICAgICAgICAgICAgIFwKKyAgICAgICAgICRURU1QTEFURURJUi9wb2t5LWRiLXBkZi54c2wgICAgXAorCSAkMSAgICAgICAgICAgICAgICAgfHwgZXhpdCAxCisKKyMgSW52b2tlcyB0aGUgSmF2YSB2ZXJzaW9uIG9mIEZPUC4gIFVzZXMgdGhlIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBmaWxlIGNvbW1vbi9mb3AtY29uZmlnLnhtbAorZm9wIC1jICRURU1QTEFURURJUi9mb3AtY29uZmlnLnhtbCAtZm8gJEZPIC1wZGYgJFBERiAgICAgICB8fCBleGl0IDEKKworcm0gLWYgJEZPCitybSAtZiAgL3RtcC90aXRsZXBhZ2UueHNsCisKK2VjaG8KK2VjaG8gIiAjIyMjIFN1Y2Nlc3MhICRQREYgcmVhZHkuICMjIyMiCitlY2hvCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9vbHMvdXBkYXRlLWRvY3VtZW50YXRpb24tY29uZiBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b29scy91cGRhdGUtZG9jdW1lbnRhdGlvbi1jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOGQyODAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9vbHMvdXBkYXRlLWRvY3VtZW50YXRpb24tY29uZgpAQCAtMCwwICsxLDE2OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgZG9jdW1lbnRhdGlvbi5jb25mIHVwZGF0ZSBzY3JpcHQKKyMKKyMgQXV0aG9yOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgcmUKK2Zyb20gbHhtbCBpbXBvcnQgZXRyZWUKK2ltcG9ydCBsb2dnaW5nCisKK2RlZiBsb2dnZXJfY3JlYXRlKG5hbWUpOgorICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKG5hbWUpCisgICAgbG9nZ2VyaGFuZGxlciA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCisgICAgbG9nZ2VyaGFuZGxlci5zZXRGb3JtYXR0ZXIobG9nZ2luZy5Gb3JtYXR0ZXIoIiUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIikpCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIobG9nZ2VyaGFuZGxlcikKKyAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgIHJldHVybiBsb2dnZXIKK2xvZ2dlciA9IGxvZ2dlcl9jcmVhdGUoJ2RvY2NvbmZ1cGRhdGVyJykKKworZGVmIG1haW4oKToKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iZG9jdW1lbnRhdGlvbi5jb25mIHVwZGF0ZXIiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2Jhc2VwYXRoJywgaGVscD0nUGF0aCB0byBPRS1Db3JlIGJhc2UgZGlyZWN0b3J5JykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcScsICctLXF1aWV0JywgaGVscD0nUHJpbnQgb25seSB3YXJuaW5ncy9lcnJvcnMnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIGlmIGFyZ3MucXVpZXQ6CisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLldBUk4pCisKKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihhcmdzLmJhc2VwYXRoKToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCdTcGVjaWZpZWQgYmFzZSBwYXRoICVzIG5vdCBmb3VuZCcpCisgICAgICAgIHJldHVybiAxCisKKyAgICBkb2NfY29uZiA9IG9zLnBhdGguam9pbihhcmdzLmJhc2VwYXRoLCAnbWV0YScsICdjb25mJywgJ2RvY3VtZW50YXRpb24uY29uZicpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRvY19jb25mKToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gZmluZCAlcycgJSBkb2NfY29uZikKKyAgICAgICAgcmV0dXJuIDEKKworICAgIGFsbG93ZWRfZmxhZ3MgPSBbJ2RvYyddCisgICAgZmxhZ19yZSA9IHJlLmNvbXBpbGUocidcWyguKz8pXF0nKQorCisgICAgaW5mb3MgPSB7fQorICAgIHRyZWUgPSBldHJlZS5wYXJzZSgncmVmLW1hbnVhbC9yZWYtdmFyaWFibGVzLnhtbCcpCisgICAgcm9vdCA9IHRyZWUuZ2V0cm9vdCgpCisgICAgZm9yIGdsb3NzYXJ5IGluIHJvb3QuZmluZGFsbCgnZ2xvc3NhcnknKToKKyAgICAgICAgZm9yIGdsb3NzZGl2IGluIGdsb3NzYXJ5LmZpbmRhbGwoJ2dsb3NzZGl2Jyk6CisgICAgICAgICAgICBmb3IgZ2xvc3NlbnRyeSBpbiBnbG9zc2Rpdi5maW5kYWxsKCdnbG9zc2VudHJ5Jyk6CisgICAgICAgICAgICAgICAgaW5mbyA9IGdsb3NzZW50cnkuZmluZCgnaW5mbycpCisgICAgICAgICAgICAgICAgaWYgaW5mbyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgaW5mb2xpbmUgPSAnICcuam9pbihpbmZvLnRleHQuc3BsaXQoKSkKKyAgICAgICAgICAgICAgICAgICAgaW5mb2xpbmVzcGxpdCA9IGluZm9saW5lLnNwbGl0KCc9JywgMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGluZm9saW5lKSA8IDI6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybignSW52YWxpZCBpbmZvIGxpbmUgKG5vID0gY2hhcmFjdGVyKSwgaWdub3Jpbmc6ICVzJyAlIGluZm9saW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBmbGFnX3JlLmZpbmRhbGwoaW5mb2xpbmVzcGxpdFswXSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGZsYWdzOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0ludmFsaWQgaW5mbyBsaW5lIChubyB2YXJmbGFnKSwgaWdub3Jpbmc6ICVzJyAlIGluZm9saW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZm9yIGZsYWcgaW4gZmxhZ3M6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmbGFnIG5vdCBpbiBhbGxvd2VkX2ZsYWdzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCdJbnZhbGlkIGluZm8gbGluZSAodmFyZmxhZyAlcyBub3QgaW4gYWxsb3dlZCBsaXN0KSwgaWdub3Jpbmc6ICVzJyAlIChmbGFnLCBpbmZvbGluZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgaW5mb3NbaW5mb2xpbmVzcGxpdFswXS5yc3RyaXAoKV0gPSBpbmZvbGluZXNwbGl0WzFdLmxzdHJpcCgpCisKKyAgICBpZiBub3QgaW5mb3M6CisgICAgICAgIGxvZ2dlci5lcnJvcignRVJST1I6IFVuYWJsZSB0byBmaW5kIGFueSBpbmZvIHRhZ3MgaW4gdGhlIGdsb3NzYXJ5JykKKyAgICAgICAgcmV0dXJuIDEKKworICAgIGRlZiBzb3J0a2V5KGtleSk6CisgICAgICAgICMgVW5kZXJzY29yZXMgc29ydCB1bmRlc2lyYWJseSwgc28gcmVwbGFjZSB0aGVtCisgICAgICAgIHJldHVybiBrZXkuc3BsaXQoJ1snKVswXS5yZXBsYWNlKCdfJywgJy0nKQorCisgICAgY2hhbmdlZCA9IEZhbHNlCisgICAgbGluZXMgPSBbXQorICAgIGludmFycyA9IEZhbHNlCisgICAgbGFzdGxldHRlciA9IE5vbmUKKyAgICBhZGRlZCA9IFtdCisgICAgd2l0aCBvcGVuKGRvY19jb25mLCAncicpIGFzIGRjZjoKKyAgICAgICAgZm9yIGxpbmUgaW4gZGNmOgorICAgICAgICAgICAgaWYgbm90IGludmFyczoKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyMnKSBhbmQgJ0RFU0NSSVBUSU9OUyBGT1IgVkFSSUFCTEVTJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICBpbnZhcnMgPSBUcnVlCisgICAgICAgICAgICBlbGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgoJyMnKToKKyAgICAgICAgICAgICAgICBsaW5lc3BsaXQgPSBsaW5lLnNwbGl0KCc9JywgMSkKKyAgICAgICAgICAgICAgICBpZiBsZW4obGluZXNwbGl0KSA+IDE6CisgICAgICAgICAgICAgICAgICAgIGtleSA9IGxpbmVzcGxpdFswXS5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBsYXN0bGV0dGVyID0ga2V5WzBdCisgICAgICAgICAgICAgICAgICAgICMgRmluZCBhbnl0aGluZyBpbiB0aGUgZGljdCB0aGF0IHNob3VsZCBjb21lIGJlZm9yZSB0aGUgY3VycmVudCBrZXkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGRrZXkgaW4gc29ydGVkKGluZm9zLmtleXMoKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzb3J0a2V5KGRrZXkpIDwgc29ydGtleShrZXkpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJXMgPSAlc1xuJyAlIChka2V5LCBpbmZvc1tka2V5XSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWQuYXBwZW5kKGRrZXkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGluZm9zW2RrZXldCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgbmV3dmFsdWUgPSBpbmZvcy5nZXQoa2V5LCBOb25lKQorICAgICAgICAgICAgICAgICAgICBpZiBuZXd2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBpbmZvc1trZXldCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBuZXd2YWx1ZSAhPSBsaW5lc3BsaXRbMV0uc3RyaXAoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyVzID0gJXNcbicgJSAoa2V5LCBuZXd2YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBlbGlmIGtleSBpbiBhZGRlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgYWxyZWFkeSBhZGRlZCBhIG5ldyB2YWx1ZSBmb3IgdGhpcyBrZXksIHNvIHNraXAgaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxpZiBsYXN0bGV0dGVyOgorICAgICAgICAgICAgICAgICAgICAjIEVuc3VyZSB3ZSB3cml0ZSBvdXQgYW55dGhpbmcgYW55dGhpbmcgbGVmdCBvdmVyIGZvciB0aGlzIGxldHRlcgorICAgICAgICAgICAgICAgICAgICBmb3IgZGtleSBpbiBzb3J0ZWQoaW5mb3Mua2V5cygpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRrZXlbMF0gPT0gbGFzdGxldHRlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyVzID0gJXNcbicgJSAoZGtleSwgaW5mb3NbZGtleV0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBpbmZvc1tka2V5XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGRrZXlbMF0gPiBsYXN0bGV0dGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTGlzdCBpcyBzb3J0ZWQsIHNvIHdlJ3JlIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBsYXN0bGV0dGVyID0gTm9uZQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKGxpbmUpCisKKyAgICBpZiBub3QgaW52YXJzOgorICAgICAgICBsb2dnZXIuZXJyb3IoJ0VSUk9SOiBVbmFibGUgdG8gZmluZCB2YXJpYWJsZXMgc2VjdGlvbiBpbiBkb2N1bWVudGF0aW9uLmNvbmYnKQorICAgICAgICByZXR1cm4gMQorCisgICAgaWYgaW5mb3M6CisgICAgICAgIGNoYW5nZWQgPSBUcnVlCisgICAgICAgICMgV3JpdGUgb3V0IGFueXRoaW5nIGxlZnQgb3ZlcgorICAgICAgICBsaW5lcy5hcHBlbmQoJ1xuXG4nKQorICAgICAgICBmb3Iga2V5IGluIHNvcnRlZChpbmZvcy5rZXlzKCkpOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCclcyA9ICVzXG4nICUgKGtleSwgaW5mb3Nba2V5XSkpCisKKyAgICBpZiBjaGFuZ2VkOgorICAgICAgICBsb2dnZXIuaW5mbygnVXBkYXRpbmcgJXMnICUgZG9jX2NvbmYpCisgICAgICAgIHdpdGggb3Blbihkb2NfY29uZiwgJ3cnKSBhcyBkY2Y6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICBkY2Yud3JpdGUobGluZSkKKyAgICBlbHNlOgorICAgICAgICBsb2dnZXIuaW5mbygnTm8gY2hhbmdlcyByZXF1aXJlZCcpCisKKyAgICByZXR1cm4gMAorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdHJ5OgorICAgICAgICByZXQgPSBtYWluKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICByZXQgPSAxCisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Yyg1KQorICAgIHN5cy5leGl0KHJldCkKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy9maWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi95b2N0by1wcm9qZWN0LXFzL2ZpZ3VyZXMveW9jdG8tZW52aXJvbm1lbnQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYjdhNTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy9maWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy9maWd1cmVzL3lvY3RvLXByb2plY3QtdHJhbnNwLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi95b2N0by1wcm9qZWN0LXFzL2ZpZ3VyZXMveW9jdG8tcHJvamVjdC10cmFuc3AucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMxZDJiMTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy9maWd1cmVzL3lvY3RvLXByb2plY3QtdHJhbnNwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy9xcy1zdHlsZS5jc3MgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy9xcy1zdHlsZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM1Yzg1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi95b2N0by1wcm9qZWN0LXFzL3FzLXN0eWxlLmNzcwpAQCAtMCwwICsxLDk4MyBAQAorLyoKKyAgIEdlbmVyaWMgWEhUTUwgLyBEb2NCb29rIFhIVE1MIENTUyBTdHlsZXNoZWV0LgorCisgICBCcm93c2VyIHdyYW5nbGluZyBhbmQgdHlwb2dyYXBoaWMgZGVzaWduIGJ5CisgICAgICBPeXZpbmQgS29sYXMgLyBwaXBwaW5AZ2ltcC5vcmcKKworICAgQ3VzdG9taXNlZCBmb3IgUG9reSBieQorICAgICAgTWF0dGhldyBBbGx1bSAvIG1hbGx1bUBvLWhhbmQuY29tCisKKyAgIFRoYW5rcyB0bzoKKyAgICAgTGlhbSBSLiBFLiBRdWluCisgICAgIFdpbGxpYW0gU2thZ2dzCisgICAgIEpha3ViIFN0ZWluZXIKKworICAgU3RydWN0dXJlCisgICAtLS0tLS0tLS0KKworICAgVGhlIHN0eWxlc2hlZXQgaXMgZGl2aWRlZCBpbnRvIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnM6CisKKyAgICAgICBQb3NpdGlvbmluZworICAgICAgICAgIE1hcmdpbnMsIHBhZGRpbmdzLCB3aWR0aCwgZm9udC1zaXplLCBjbGVhcmluZy4KKyAgICAgICBEZWNvcmF0aW9ucworICAgICAgICAgIEJvcmRlcnMsIHN0eWxlCisgICAgICAgQ29sb3JzCisgICAgICAgICAgQ29sb3JzCisgICAgICAgR3JhcGhpY3MKKyAgICAgICAgICBHcmFwaGljYWwgYmFja2dyb3VuZHMKKyAgICAgICBOYXN0eSBJRSB0d2Vha3MKKyAgICAgICAgICBXb3JrYXJvdW5kcyBuZWVkZWQgdG8gbWFrZSBpdCB3b3JrIGluIGludGVybmV0IGV4cGxvcmVyLAorICAgICAgICAgIGN1cnJlbnRseSBtYWtlcyB0aGUgc3R5bGVzaGVldCBub24gdmFsaWRhdGluZywgYnV0IHVwIHVudGlsCisgICAgICAgICAgdGhpcyBwb2ludCBpdCBpcyB2YWxpZGF0aW5nLgorICAgICAgIE1vemlsbGEgZXh0ZW5zaW9ucworICAgICAgICAgIFRyYW5zcGFyZW5jeSBmb3IgZm9vdGVyCisJICBSb3VuZGVkIGNvcm5lcnMgb24gYm94ZXMKKworKi8KKworCisgIC8qKioqKioqKioqKioqKiogLworIC8gIFBvc2l0aW9uaW5nICAgLworLyAqKioqKioqKioqKioqKiovCisKK2JvZHkgeworICBmb250LWZhbWlseTogVmVyZGFuYSwgU2Fucywgc2Fucy1zZXJpZjsKKworICBtaW4td2lkdGg6IDY0MHB4OworICB3aWR0aDogODAlOworICBtYXJnaW46ICAwZW0gYXV0bzsKKyAgcGFkZGluZzogMmVtIDVlbSA1ZW0gNWVtOworICBjb2xvcjogIzMzMzsKK30KKworaDEsaDIsaDMsaDQsaDUsaDYsaDcgeworICBmb250LWZhbWlseTogQXJpYWwsIFNhbnM7CisgIGNvbG9yOiAjMDA1NTdEOworICBjbGVhcjogYm90aDsKK30KKworaDEgeworICBmb250LXNpemU6IDJlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDJlbSAwZW0gMGVtIDBlbTsKK30KKworaDIuc3VidGl0bGUgeworICBtYXJnaW46IDAuMTBlbSAwZW0gMy4wZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS44ZW07CisgIHBhZGRpbmctbGVmdDogMjAlOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK2gyIHsKKyAgbWFyZ2luOiAyZW0gMGVtIDAuNjZlbSAwZW07CisgIHBhZGRpbmc6IDAuNWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuNWVtOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDMuc3VidGl0bGUgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0Mi4xNCU7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitoMyB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDQgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTIwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g1IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNiB7CisgIG1hcmdpbjogMWVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy5hdXRob3Jncm91cCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBwYWRkaW5nLXRvcDogMjU2cHg7CisgIGJhY2tncm91bmQtcG9zaXRpb246IHRvcDsKKyAgbWFyZ2luLXRvcDogLTI1NnB4OworICBwYWRkaW5nLXJpZ2h0OiA1MHB4OworICBtYXJnaW4tbGVmdDogNTBweDsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICB3aWR0aDogNjAwcHg7Cit9CisKK2gzLmF1dGhvciB7CisgIG1hcmdpbjogMGVtIDBtZSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc2l6ZTogMTAwJTsKKyAgY29sb3I6ICMzMzM7CisgIGNsZWFyOiBib3RoOworfQorCisuYXV0aG9yIHR0LmVtYWlsIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKKy50aXRsZXBhZ2UgaHIgeworICB3aWR0aDogMGVtOworICBjbGVhcjogYm90aDsKK30KKworLnJldmhpc3RvcnkgeworICBwYWRkaW5nLXRvcDogMmVtOworICBjbGVhcjogYm90aDsKK30KKworLnRvYywKKy5saXN0LW9mLXRhYmxlcywKKy5saXN0LW9mLWV4YW1wbGVzLAorLmxpc3Qtb2YtZmlndXJlcyB7CisgIHBhZGRpbmc6IDEuMzNlbSAwZW0gMi41ZW0gMGVtOworICBjb2xvcjogIzAwNTU3RDsKK30KKworLnRvYyBwLAorLmxpc3Qtb2YtdGFibGVzIHAsCisubGlzdC1vZi1maWd1cmVzIHAsCisubGlzdC1vZi1leGFtcGxlcyBwIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDAuM2VtOworICBtYXJnaW46IDEuNWVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIHAgYiwKKy5saXN0LW9mLXRhYmxlcyBwIGIsCisubGlzdC1vZi1maWd1cmVzIHAgYiwKKy5saXN0LW9mLWV4YW1wbGVzIHAgYnsKKyAgZm9udC1zaXplOiAxMDAuMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisudG9jIGRsLAorLmxpc3Qtb2YtdGFibGVzIGRsLAorLmxpc3Qtb2YtZmlndXJlcyBkbCwKKy5saXN0LW9mLWV4YW1wbGVzIGRsIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGR0IHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkZCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMi42ZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworZGl2Lmdsb3NzYXJ5IGRsLAorZGl2LnZhcmlhYmxlbGlzdCBkbCB7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHdpZHRoOiAyMGVtOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworLnZhcmlhYmxlbGlzdCBkbCBkdCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworfQorCisuZ2xvc3NhcnkgZGwgZGQsCisudmFyaWFibGVsaXN0IGRsIGRkIHsKKyAgbWFyZ2luLXRvcDogLTFlbTsKKyAgbWFyZ2luLWxlZnQ6IDI1LjVlbTsKK30KKworLmdsb3NzYXJ5IGRkIHAsCisudmFyaWFibGVsaXN0IGRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCitkaXYgcC5jb3B5cmlnaHQgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCitkaXYubGVnYWxub3RpY2UgcC5sZWdhbG5vdGljZS10aXRsZSB7CisgIG1hcmdpbi1ib3R0b206IDBlbTsKK30KKworcCB7CisgIGxpbmUtaGVpZ2h0OiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworCit9CisKK2RsIHsKKyAgcGFkZGluZy10b3A6IDBlbTsKK30KKworaHIgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworCisubWVkaWFvYmplY3QsCisubWVkaWFvYmplY3RjbyB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworaW1nIHsKKyAgYm9yZGVyOiBub25lOworfQorCit1bCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDEuNWVtOworfQorCit1bCBsaSB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKwordWwgbGkgcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK3RhYmxlIHsKKyAgd2lkdGggOjEwMCU7Cit9CisKK3RoIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBmb250LXdlaWdodDogbm9ybWFsOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCit0ZCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKworcCBhW2lkXSB7CisgIG1hcmdpbjogMHB4OworICBwYWRkaW5nOiAwcHg7CisgIGRpc3BsYXk6IGlubGluZTsKKyAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKK30KKworYSB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBjb2xvcjogIzQ0NDsKK30KKworcHJlIHsKKyAgICBvdmVyZmxvdzogYXV0bzsKK30KKworYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICAvKmZvbnQtd2VpZ2h0OiBib2xkOyovCit9CisKKy8qIFRoaXMgc3R5bGUgZGVmaW5lcyBob3cgdGhlIHBlcm1hbGluayBjaGFyYWN0ZXIKKyAgIGFwcGVhcnMgYnkgaXRzZWxmIGFuZCB3aGVuIGhvdmVyZWQgb3ZlciB3aXRoCisgICB0aGUgbW91c2UuICovCisKK1thbHQ9J1Blcm1hbGluayddIHsgY29sb3I6ICNlZWU7IH0KK1thbHQ9J1Blcm1hbGluayddOmhvdmVyIHsgY29sb3I6IGJsYWNrOyB9CisKKworZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlIHsKKyAgbWFyZ2luOiAxZW0gMGVtOworICBwYWRkaW5nOiAxZW07CisgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsKK30KKworCitkaXYuaW5mb3JtYWxmaWd1cmUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWx0YWJsZSBwLnRpdGxlIGIsCitkaXYuZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5leGFtcGxlIHAudGl0bGUgYiwKK2Rpdi50YWJsZSBwLnRpdGxlIGJ7CisgICAgcGFkZGluZy10b3A6IDBlbTsKKyAgICBtYXJnaW4tdG9wOiAwZW07CisgICAgZm9udC1zaXplOiAxMDAlOworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9CisKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiwKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiBwICB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmctdG9wOiAwLjVlbTsKKyAgcGFkZGluZy1ib3R0b206IDAuNWVtOworfQorCisuZXBpZ3JhcGggeworICBwYWRkaW5nLWxlZnQ6IDU1JTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisuZXBpZ3JhcGggcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5lcGlncmFwaCAucXVvdGUgeworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisuZXBpZ3JhcGggLmF0dHJpYnV0aW9uIHsKKyAgZm9udC1zdHlsZTogbm9ybWFsOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworc3Bhbi5hcHBsaWNhdGlvbiB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLnByb2dyYW1saXN0aW5nIHsKKyAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgZm9udC1zaXplOiA4MCU7CisgIHdoaXRlLXNwYWNlOiBwcmU7CisgIG1hcmdpbjogMS4zM2VtIDBlbTsKKyAgcGFkZGluZzogMS4zM2VtOworfQorCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgbWFyZ2luLXRvcDogMWVtOworICBtYXJnaW4tYm90dG9tOiAxZW07CisKK30KKworLyogZm9yY2UgZnVsbCB3aWR0aCBvZiB0YWJsZSB3aXRoaW4gZGl2ICovCisudGlwIHRhYmxlLAorLndhcm5pbmcgdGFibGUsCisuY2F1dGlvbiB0YWJsZSwKKy5ub3RlIHRhYmxlIHsKKyAgYm9yZGVyOiBub25lOworICB3aWR0aDogMTAwJTsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgcGFkZGluZzogMC44ZW0gMC4wZW0gMC4wZW0gMC4wZW07CisgIG1hcmdpbiA6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRpcCBwLAorLndhcm5pbmcgcCwKKy5jYXV0aW9uIHAsCisubm90ZSBwIHsKKyAgbWFyZ2luLXRvcDogMC41ZW07CisgIG1hcmdpbi1ib3R0b206IDAuNWVtOworICBwYWRkaW5nLXJpZ2h0OiAxZW07CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5hY3JvbnltIHsKKyAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgcGFkZGluZzogMC4wOWVtIDAuM2VtOworICBtYXJnaW46IDBlbTsKK30KKworLml0ZW1pemVkbGlzdCBsaSB7CisgIGNsZWFyOiBub25lOworfQorCisuZmlsZW5hbWUgeworICBmb250LXNpemU6IG1lZGl1bTsKKyAgZm9udC1mYW1pbHk6IENvdXJpZXIsIG1vbm9zcGFjZTsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgcG9zaXRpb246IGFic29sdXRlOworICBsZWZ0OiAwZW07CisgIHRvcDogMGVtOworICB3aWR0aDogMTAwJTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2NkZjsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBwb3NpdGlvbjogZml4ZWQ7CisgIGxlZnQ6IDBlbTsKKyAgYm90dG9tOiAwZW07CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIHdpZHRoOiAxMDAlOworfQorCisKK2Rpdi5uYXZoZWFkZXIgdGQsCitkaXYubmF2Zm9vdGVyIHRkIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGggeworICAvKmZvbnQtZmFtaWx5OiBHZW9yZ2lhLCBUaW1lcywgc2VyaWY7Ki8KKyAgLypmb250LXNpemU6IHgtbGFyZ2U7Ki8KKyAgZm9udC1zaXplOiA4MCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLXRvcDogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItYm90dG9tOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGEsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGEgeworICBjb2xvcjogIzc3NzsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCisvKiBub3JtYWwgdGV4dCBpbiB0aGUgZm9vdGVyICovCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIHsKKyAgY29sb3I6IGJsYWNrOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6dmlzaXRlZCwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTp2aXNpdGVkIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKKworLyogbGlua3MgaW4gaGVhZGVyIGFuZCBmb290ZXIgKi8KK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTpob3ZlciwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgY29sb3I6ICMzM2E7Cit9CisKK2Rpdi5uYXZoZWFkZXIgaHIsCitkaXYubmF2Zm9vdGVyIGhyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCisucWFuZGFzZXQgdHIucXVlc3Rpb24gdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy5xYW5kYXNldCB0ci5hbnN3ZXIgdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisuYW5zd2VyIHRkIHsKKyAgcGFkZGluZy1ib3R0b206IDEuNWVtOworfQorCisuZW1waGFzaXMgeworICBmb250LXdlaWdodDogYm9sZDsKK30KKworCisgIC8qKioqKioqKioqKioqIC8KKyAvIGRlY29yYXRpb25zICAvCisvICoqKioqKioqKioqKiovCisKKy50aXRsZXBhZ2UgeworfQorCisucGFydCAudGl0bGUgeworfQorCisuc3VidGl0bGUgeworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyoKK2gxIHsKKyAgYm9yZGVyOiBub25lOworfQorCitoMiB7CisgIGJvcmRlci10b3A6IHNvbGlkIDAuMmVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2gzIHsKKyAgYm9yZGVyLXRvcDogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g0IHsKKyAgYm9yZGVyOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDUgeworICBib3JkZXI6IDBlbTsKK30KKyovCisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworLnF1ZXN0aW9uIHRkIHsKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOworfQorCisuYW5zd2VyIHsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBib3JkZXItdG9wOiAxcHggc29saWQ7Cit9CisKKyAgLyoqKioqKioqKiAvCisgLyAgY29sb3JzICAvCisvICoqKioqKioqKi8KKworYm9keSB7CisgIGNvbG9yOiAjMzMzOworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKworYSB7CisgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OworfQorCithOmhvdmVyIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2RlZGVkZTsKK30KKworCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoNywKK2g4IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Cit9CisKK2hyIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCisKKy50aXAsIC53YXJuaW5nLCAuY2F1dGlvbiwgLm5vdGUgeworICBib3JkZXItY29sb3I6ICNmZmY7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7Cit9CisKKworLndhcm5pbmcgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy50aXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisubm90ZSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGNvbG9yOiAjMDQ0OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKK3ByZS5wcm9ncmFtbGlzdGluZyB7CisgIGNvbG9yOiBibGFjazsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworICBib3JkZXItd2lkdGg6IDJweDsKK30KKworLmd1aW1lbnUsCisuZ3VpbGFiZWwsCisuZ3VpbWVudWl0ZW0geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIGJvcmRlci1jb2xvcjogIzk5OTsKK30KKworCitkaXYubmF2aGVhZGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCitkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCisgIC8qKioqKioqKioqKiAvCisgLyAgZ3JhcGhpY3MgIC8KKy8gKioqKioqKioqKiovCisKKy8qCitib2R5IHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvYm9keV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLm5hdmhlYWRlciwKKy5ub3RlLAorLnRpcCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL25vdGVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy53YXJuaW5nLAorLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy93YXJuaW5nX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisuZmlndXJlLAorLmluZm9ybWFsZmlndXJlLAorLmV4YW1wbGUsCisuaW5mb3JtYWxleGFtcGxlLAorLnRhYmxlLAorLmluZm9ybWFsdGFibGUgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9maWd1cmVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKyovCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoN3sKK30KKworLyoKK0V4YW1wbGUgb2YgaG93IHRvIHN0aWNrIGFuIGltYWdlIGFzIHBhcnQgb2YgdGhlIHRpdGxlLgorCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvd2hpdGUtb24tYmxhY2sucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworfQorKi8KKworZGl2LnByZWZhY2UgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuY29sb3Bob24gLnRpdGxlLAorZGl2LmNoYXB0ZXIgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworfQorCitkaXYuc2VjdGlvbiBkaXYuc2VjdGlvbiAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5zZWN0MiAudGl0bGVwYWdlIC50aXRsZSB7CisgICAgYmFja2dyb3VuZDogbm9uZTsKK30KKworCitoMS50aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBoZWlnaHQ6IDI1NnB4OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworfQorCitoMi5zdWJ0aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworICB3aWR0aDogMHB4OworICBkaXNwbGF5OiBub25lOworfQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gIHBpcHBpbi5naW1wLm9yZyBzcGVjaWZpYyBhbHRlcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIGNvbG9yOiAjNzc3OworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZzogMDsKKyAgbWFyZ2luOiAwOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMHB4OworICBsZWZ0OiAwcHg7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDUwcHg7CisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9oZWFkaW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7CisgIGJvcmRlcjogbm9uZTsKK30KKworZGl2LmhlYWRpbmcgYSB7CisgIGNvbG9yOiAjNDQ0OworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlcjogbm9uZTsKKyAgY29sb3I6ICNkZGQ7CisgIGZvbnQtc2l6ZTogODAlOworICB0ZXh0LWFsaWduOnJpZ2h0OworCisgIHdpZHRoOiAxMDAlOworICBwYWRkaW5nLXRvcDogMTBweDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBib3R0b206IDBweDsKKyAgbGVmdDogMHB4OworCisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9mb290aW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworfQorKi8KKworCisKKyAgLyoqKioqKioqKioqKioqKioqKiAvCisgLyAgbmFzdHkgaWUgdHdlYWtzICAvCisvICoqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7CisgIG1hcmdpbi1sZWZ0OmV4cHJlc3Npb24oIi01ZW0iKTsKK30KK2JvZHkgeworICBwYWRkaW5nOmV4cHJlc3Npb24oIjRlbSA1ZW0gMGVtIDVlbSIpOworfQorKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyBtb3ppbGxhIHZlbmRvciBzcGVjaWZpYyBjc3MgZXh0ZW5zaW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICAtbW96LW9wYWNpdHk6IDAuOGVtOworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUsCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjVlbTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjNlbTsKK30KKyovCisKK3RhYmxlIHRyIHRkIHRhYmxlIHRyIHRkIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCitociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKK3RhYmxlIHsKKyAgYm9yZGVyOiAwZW07Cit9CisKKyAucGhvdG8geworICBmbG9hdDogcmlnaHQ7CisgIG1hcmdpbi1sZWZ0OiAgIDEuNWVtOworICBtYXJnaW4tYm90dG9tOiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXgtd2lkdGg6ICAgICAgMTdlbTsKKyAgYm9yZGVyOiAgICAgMXB4IHNvbGlkIGdyYXk7CisgIHBhZGRpbmc6ICAgIDNweDsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisgLnNlcGVyYXRvciB7CisgICBwYWRkaW5nLXRvcDogMmVtOworICAgY2xlYXI6IGJvdGg7CisgIH0KKworICAjdmFsaWRhdG9ycyB7CisgICAgICBtYXJnaW4tdG9wOiA1ZW07CisgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgIGNvbG9yOiAjNzc3OworICB9CisgIEBtZWRpYSBwcmludCB7CisgICAgICBib2R5IHsKKyAgICAgICAgICBmb250LXNpemU6IDhwdDsKKyAgICAgIH0KKyAgICAgIC5ub3ByaW50IHsKKyAgICAgICAgICBkaXNwbGF5OiBub25lOworICAgICAgfQorICB9CisKKworLnRpcCwKKy5ub3RlIHsKKyAgIGJhY2tncm91bmQ6ICNmMGYwZjI7CisgICBjb2xvcjogIzMzMzsKKyAgIHBhZGRpbmc6IDIwcHg7CisgICBtYXJnaW46IDIwcHg7Cit9CisKKy50aXAgaDMsCisubm90ZSBoMyB7CisgICBwYWRkaW5nOiAwZW07CisgICBtYXJnaW46IDBlbTsKKyAgIGZvbnQtc2l6ZTogMmVtOworICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICBjb2xvcjogIzMzMzsKK30KKworLnRpcCBhLAorLm5vdGUgYSB7CisgICBjb2xvcjogIzMzMzsKKyAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisuZm9vdG5vdGUgeworICAgZm9udC1zaXplOiBzbWFsbDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisvKiBDaGFuZ2VzIHRoZSBhbm5vdW5jZW1lbnQgdGV4dCAqLworLnRpcCBoMywKKy53YXJuaW5nIGgzLAorLmNhdXRpb24gaDMsCisubm90ZSBoMyB7CisgICBmb250LXNpemU6bGFyZ2U7CisgICBjb2xvcjogIzAwNTU3RDsKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi95b2N0by1wcm9qZWN0LXFzL3lvY3RvLXByb2plY3QtcXMtY3VzdG9taXphdGlvbi54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLWN1c3RvbWl6YXRpb24ueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYzAyZGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIgdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL2RvY2Jvb2stbWlycm9yL2RvY2Jvb2steHNsLTEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworPCEtLQorCisgIDx4c2w6aW1wb3J0IGhyZWY9Ii4uL3RlbXBsYXRlLzEuNzYuMS9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0ieW9jdG8tcHJvamVjdC1xcy10aXRsZXBhZ2UueHNsIi8+CisKKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL3Blcm1hbGlua3MueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9zZWN0aW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvY29tcG9uZW50LnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZGl2aXNpb24udGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9mb3JtYWwub2JqZWN0LmhlYWRpbmcueHNsIi8+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS50b2MiIHNlbGVjdD0iJ2FydGljbGUgbm9wJyI+PC94c2w6cGFyYW0+CisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9Iidxcy1zdHlsZS5jc3MnIiAvPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi95b2N0by1wcm9qZWN0LXFzL3lvY3RvLXByb2plY3QtcXMtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi95b2N0by1wcm9qZWN0LXFzL3lvY3RvLXByb2plY3QtcXMtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGU2ODMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMveW9jdG8tcHJvamVjdC1xcy1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsMzQgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0CisJeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisJeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIKKwl2ZXJzaW9uPSIxLjAiPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3IvZG9jYm9vay1taXJyb3IvZG9jYm9vay14c2wtMS43Ni4xL2VjbGlwc2UvZWNsaXBzZTMueHNsIiAvPgorCis8IS0tCisKKyAgPHhzbDppbXBvcnQgaHJlZj0iLi4vdGVtcGxhdGUvMS43Ni4xL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworICA8eHNsOmltcG9ydAorCSAgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0ieW9jdG8tcHJvamVjdC1xcy10aXRsZXBhZ2UueHNsIi8+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVua2VyLm91dHB1dC5pbmRlbnQiIHNlbGVjdD0iJ3llcyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5xdWlldGx5IiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJ1c2UuaWQuYXMuZmlsZW5hbWUiIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9InVsaW5rLnRhcmdldCIgc2VsZWN0PSInX3NlbGYnIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImJhc2UuZGlyIiBzZWxlY3Q9IidodG1sL3lvY3RvLXByb2plY3QtcXMvJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNodW5rLnNlY3Rpb24uZGVwdGgiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSInLi4vYm9vay5jc3MnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZWNsaXBzZS5tYW5pZmVzdCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY3JlYXRlLnBsdWdpbi54bWwiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InN1cHByZXNzLm5hdmlnYXRpb24iIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmluZGV4IiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS50b2MiIHNlbGVjdD0iJ2FydGljbGUgbm9wJyI+PC94c2w6cGFyYW0+CisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9IidzdHlsZS5jc3MnIiAvPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi95b2N0by1wcm9qZWN0LXFzL3lvY3RvLXByb2plY3QtcXMtdGl0bGVwYWdlLnhzbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi95b2N0by1wcm9qZWN0LXFzL3lvY3RvLXByb2plY3QtcXMtdGl0bGVwYWdlLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDM1YWM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMveW9jdG8tcHJvamVjdC1xcy10aXRsZXBhZ2UueHNsCkBAIC0wLDAgKzEsMzgyMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+CisKKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM6ZXhzbD0iaHR0cDovL2V4c2x0Lm9yZy9jb21tb24iIHZlcnNpb249IjEuMCIgZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXM9ImV4c2wiPgorCis8IS0tIFRoaXMgc3R5bGVzaGVldCB3YXMgY3JlYXRlZCBieSB0ZW1wbGF0ZS90aXRsZXBhZ2UueHNsLS0+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8iPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXJ0aWNsZWluZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGhlYWRlci9hYnN0cmFjdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0iYXJ0aWNsZWluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iYXJ0aGVhZGVyL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRoZWFkZXIvdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJhcnRpY2xlaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXJ0aWNsZWluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJhcnRoZWFkZXIvc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGhlYWRlci9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGhlYWRlci9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRoZWFkZXIvYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXJ0aGVhZGVyL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRoZWFkZXIvb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRoZWFkZXIvcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXJ0aGVhZGVyL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRoZWFkZXIvbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGhlYWRlci9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRoZWFkZXIvcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGhlYWRlci9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3Jldmhpc3RvcnkiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImFydGljbGUudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImFydGljbGUudGl0bGVwYWdlLnNlcGFyYXRvciI+PGhyLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImFydGljbGUudGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJhcnRpY2xlLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYXJ0aWNsZS50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYXJ0aWNsZS50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFydGljbGUudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFydGljbGUudGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFydGljbGUudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+CisgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhbmNob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPgorPCEtLSBvcmlnbmFsbHkgZ2VuZXJhdGVkIGNvbnRlbnQgLS0+Cis8IS0tIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPiAtLT4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRpdGxlIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcnBhdXRob3IiIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yZ3JvdXAiIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im90aGVyY3JlZGl0IiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJlbGVhc2VpbmZvIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcHlyaWdodCIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJsZWdhbG5vdGljZSIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJwdWJkYXRlIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmlzaW9uIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmhpc3RvcnkiIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZXQudGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNldGluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2V0aW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzZXRpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNldGluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZXRpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNldGluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZXRpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZXRpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2V0aW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNldGluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNldGluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZXRpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNldGluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZXRpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNldGluZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2V0LnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZXQudGl0bGVwYWdlLnNlcGFyYXRvciI+PGhyLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNldC50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNldC50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNldC50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2V0LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZXQudGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZXQudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNldC50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2V0LnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2V0LnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGl0bGUiIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2V0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2V0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29ycGF1dGhvciIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZXQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3Jncm91cCIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZXQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3IiIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2V0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ib3RoZXJjcmVkaXQiIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2V0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmVsZWFzZWluZm8iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2V0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29weXJpZ2h0IiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNldC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImxlZ2Fsbm90aWNlIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNldC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InB1YmRhdGUiIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2V0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aXNpb24iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2V0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aGlzdG9yeSIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZXQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhYnN0cmFjdCIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZXQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImJvb2sudGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImJvb2tpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJib29raW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0idGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImJvb2tpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJib29raW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImJvb2tpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYm9va2luZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImJvb2tpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImJvb2tpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJib29raW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYm9va2luZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYm9va2luZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImJvb2tpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYm9va2luZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImJvb2tpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYm9va2luZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYWJzdHJhY3QiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImJvb2sudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImJvb2sudGl0bGVwYWdlLnNlcGFyYXRvciI+PGhyLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImJvb2sudGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJib29rLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYm9vay50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYm9vay50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYm9vay50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImJvb2sudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImJvb2sudGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImJvb2sudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iYm9vay50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRpdGxlIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJib29rLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJib29rLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcnBhdXRob3IiIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImJvb2sudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yZ3JvdXAiIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImJvb2sudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJib29rLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im90aGVyY3JlZGl0IiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJib29rLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJlbGVhc2VpbmZvIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJib29rLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcHlyaWdodCIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYm9vay50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJsZWdhbG5vdGljZSIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYm9vay50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJwdWJkYXRlIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJib29rLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmlzaW9uIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJib29rLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmhpc3RvcnkiIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImJvb2sudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYWJzdHJhY3QiIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImJvb2sudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYXJ0LnRpdGxlcGFnZS5yZWN0byI+CisgIDxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImRpdmlzaW9uLnRpdGxlIj4KKzx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9ImFuY2VzdG9yLW9yLXNlbGY6OnBhcnRbMV0iLz4KKzwveHNsOmNhbGwtdGVtcGxhdGU+PC9kaXY+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJwYXJ0aW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icGFydGluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InN1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icGFydGluZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icGFydGluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icGFydGluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icGFydGluZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2Fic3RyYWN0Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYXJ0LnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYXJ0LnRpdGxlcGFnZS5zZXBhcmF0b3IiPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icGFydC50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InBhcnQudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYXJ0LnRpdGxlcGFnZSI+CisgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYXJ0LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYXJ0LnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFydC50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFydC50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFydC50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29ycGF1dGhvciIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3Jncm91cCIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3IiIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ib3RoZXJjcmVkaXQiIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmVsZWFzZWluZm8iIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29weXJpZ2h0IiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImxlZ2Fsbm90aWNlIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InB1YmRhdGUiIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aXNpb24iIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aGlzdG9yeSIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhYnN0cmFjdCIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8iPgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0icGFydGludHJvaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW50cm9pbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0idGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InBhcnRpbnRyb2luZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icGFydGludHJvaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InN1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbnRyb2luZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbnRyb2luZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbnRyb2luZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbnRyb2luZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbnRyb2luZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbnRyb2luZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbnRyb2luZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbnRyb2luZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbnRyb2luZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbnRyb2luZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbnRyb2luZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hYnN0cmFjdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2Fic3RyYWN0Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYXJ0aW50cm8udGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InBhcnRpbnRyby50aXRsZXBhZ2Uuc2VwYXJhdG9yIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InBhcnRpbnRyby50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InBhcnRpbnRyby50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InBhcnRpbnRyby50aXRsZXBhZ2UiPgorICA8ZGl2PgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFydGludHJvLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYXJ0aW50cm8udGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhcnRpbnRyby50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFydGludHJvLnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGl0bGUiIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29ycGF1dGhvciIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3Jncm91cCIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3IiIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ib3RoZXJjcmVkaXQiIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmVsZWFzZWluZm8iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29weXJpZ2h0IiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImxlZ2Fsbm90aWNlIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InB1YmRhdGUiIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aXNpb24iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aGlzdG9yeSIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhYnN0cmFjdCIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8iPgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0icmVmZXJlbmNlaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJyZWZlcmVuY2VpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0idGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InJlZmVyZW5jZWluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icmVmZXJlbmNlaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InN1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InJlZmVyZW5jZWluZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InJlZmVyZW5jZWluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InJlZmVyZW5jZWluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InJlZmVyZW5jZWluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InJlZmVyZW5jZWluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InJlZmVyZW5jZWluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InJlZmVyZW5jZWluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InJlZmVyZW5jZWluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InJlZmVyZW5jZWluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InJlZmVyZW5jZWluZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InJlZmVyZW5jZWluZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hYnN0cmFjdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2Fic3RyYWN0Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJyZWZlcmVuY2UudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InJlZmVyZW5jZS50aXRsZXBhZ2Uuc2VwYXJhdG9yIj48aHIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icmVmZXJlbmNlLnRpdGxlcGFnZSI+CisgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJyZWZlcmVuY2UudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InJlZmVyZW5jZS50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icmVmZXJlbmNlLnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJyZWZlcmVuY2UudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icmVmZW50cnkudGl0bGVwYWdlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InJlZmVudHJ5LnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJyZWZlbnRyeS50aXRsZXBhZ2Uuc2VwYXJhdG9yIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InJlZmVudHJ5LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icmVmZW50cnkudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJyZWZlbnRyeS50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icmVmZW50cnkudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InJlZmVudHJ5LnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icmVmZW50cnkudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InJlZmVudHJ5LnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJyZWZlbnRyeS50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InJlZmVudHJ5LnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0icmVmZW50cnkudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImRlZGljYXRpb24udGl0bGVwYWdlLnJlY3RvIj4KKyAgPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY29tcG9uZW50LnRpdGxlIj4KKzx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9ImFuY2VzdG9yLW9yLXNlbGY6OmRlZGljYXRpb25bMV0iLz4KKzwveHNsOmNhbGwtdGVtcGxhdGU+PC9kaXY+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkZWRpY2F0aW9uaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZGVkaWNhdGlvbmluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImRlZGljYXRpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InN1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImRlZGljYXRpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iZGVkaWNhdGlvbi50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iZGVkaWNhdGlvbi50aXRsZXBhZ2Uuc2VwYXJhdG9yIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImRlZGljYXRpb24udGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iZGVkaWNhdGlvbi50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZGVkaWNhdGlvbi50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZGVkaWNhdGlvbi50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImRlZGljYXRpb24udGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImRlZGljYXRpb24udGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImRlZGljYXRpb24udGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iZGVkaWNhdGlvbi50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImRlZGljYXRpb24udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2UucmVjdG8iPgorICA8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjb21wb25lbnQudGl0bGUiPgorPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iYW5jZXN0b3Itb3Itc2VsZjo6YWNrbm93bGVkZ2VtZW50c1sxXSIvPgorPC94c2w6Y2FsbC10ZW1wbGF0ZT48L2Rpdj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImFja25vd2xlZGdlbWVudHNpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhY2tub3dsZWRnZW1lbnRzaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZS5zZXBhcmF0b3IiPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZSI+CisgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLnJlY3RvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0byI+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJwcmVmYWNlaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icHJlZmFjZWluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0icHJlZmFjZWluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InByZWZhY2VpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InByZWZhY2VpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwcmVmYWNlaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icHJlZmFjZWluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InByZWZhY2VpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwcmVmYWNlaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icHJlZmFjZWluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InByZWZhY2VpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwcmVmYWNlaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icHJlZmFjZWluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InByZWZhY2VpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwcmVmYWNlaW5mby9hYnN0cmFjdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hYnN0cmFjdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icHJlZmFjZS50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icHJlZmFjZS50aXRsZXBhZ2Uuc2VwYXJhdG9yIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InByZWZhY2UudGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwcmVmYWNlLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icHJlZmFjZS50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icHJlZmFjZS50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InByZWZhY2UudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InByZWZhY2UudGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InByZWZhY2UudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRpdGxlIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcnBhdXRob3IiIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yZ3JvdXAiIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im90aGVyY3JlZGl0IiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJlbGVhc2VpbmZvIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcHlyaWdodCIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJsZWdhbG5vdGljZSIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJwdWJkYXRlIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmlzaW9uIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmhpc3RvcnkiIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYWJzdHJhY3QiIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0byI+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJjaGFwdGVyaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iY2hhcHRlcmluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0iY2hhcHRlcmluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImNoYXB0ZXJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImNoYXB0ZXJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJjaGFwdGVyaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iY2hhcHRlcmluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImNoYXB0ZXJpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJjaGFwdGVyaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iY2hhcHRlcmluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImNoYXB0ZXJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJjaGFwdGVyaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iY2hhcHRlcmluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImNoYXB0ZXJpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJjaGFwdGVyaW5mby9hYnN0cmFjdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hYnN0cmFjdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iY2hhcHRlci50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iY2hhcHRlci50aXRsZXBhZ2Uuc2VwYXJhdG9yIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImNoYXB0ZXIudGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJjaGFwdGVyLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iY2hhcHRlci50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY2hhcHRlci50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNoYXB0ZXIudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNoYXB0ZXIudGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNoYXB0ZXIudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRpdGxlIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcnBhdXRob3IiIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yZ3JvdXAiIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im90aGVyY3JlZGl0IiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJlbGVhc2VpbmZvIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcHlyaWdodCIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJsZWdhbG5vdGljZSIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJwdWJkYXRlIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmlzaW9uIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmhpc3RvcnkiIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYWJzdHJhY3QiIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8iPgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0iYXBwZW5kaXhpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXBwZW5kaXhpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0idGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImFwcGVuZGl4aW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFwcGVuZGl4aW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXBwZW5kaXhpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcHBlbmRpeGluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFwcGVuZGl4aW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXBwZW5kaXhpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcHBlbmRpeGluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFwcGVuZGl4aW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXBwZW5kaXhpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcHBlbmRpeGluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFwcGVuZGl4aW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXBwZW5kaXhpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcHBlbmRpeGluZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYXBwZW5kaXgudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImFwcGVuZGl4LnRpdGxlcGFnZS5zZXBhcmF0b3IiPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYXBwZW5kaXgudGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJhcHBlbmRpeC50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImFwcGVuZGl4LnRpdGxlcGFnZSI+CisgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhcHBlbmRpeC50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhcHBlbmRpeC50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYXBwZW5kaXgudGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFwcGVuZGl4LnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRpdGxlIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcnBhdXRob3IiIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yZ3JvdXAiIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im90aGVyY3JlZGl0IiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJlbGVhc2VpbmZvIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcHlyaWdodCIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJsZWdhbG5vdGljZSIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJwdWJkYXRlIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmlzaW9uIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmhpc3RvcnkiIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYWJzdHJhY3QiIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0byI+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzZWN0aW9uaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdGlvbmluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzZWN0aW9uaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdGlvbmluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0aW9uaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Rpb25pbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0aW9uaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0aW9uaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdGlvbmluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Rpb25pbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Rpb25pbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0aW9uaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Rpb25pbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0aW9uaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Rpb25pbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2Fic3RyYWN0Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLnRpdGxlcGFnZS5zZXBhcmF0b3IiPjx4c2w6aWYgdGVzdD0iY291bnQocGFyZW50OjoqKT0nMCciPjxoci8+PC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdGlvbi50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3Rpb24udGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Rpb24udGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNlY3QxaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QxaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0ic2VjdDFpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDFpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDFpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MWluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDFpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDFpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QxaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MWluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MWluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDFpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MWluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDFpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MWluZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2Fic3RyYWN0Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0MS50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDEudGl0bGVwYWdlLnNlcGFyYXRvciI+PHhzbDppZiB0ZXN0PSJjb3VudChwYXJlbnQ6OiopPScwJyI+PGhyLz48L3hzbDppZj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3QxLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDEudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0MS50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDEudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3QxLnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDEudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3QxLnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0MS50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNlY3QyaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QyaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0ic2VjdDJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MmluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDJpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QyaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MmluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MmluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MmluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDJpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MmluZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2Fic3RyYWN0Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0Mi50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDIudGl0bGVwYWdlLnNlcGFyYXRvciI+PHhzbDppZiB0ZXN0PSJjb3VudChwYXJlbnQ6OiopPScwJyI+PGhyLz48L3hzbDppZj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3QyLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDIudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0Mi50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDIudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3QyLnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDIudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3QyLnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0Mi50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNlY3QzaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QzaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0ic2VjdDNpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDNpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDNpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0M2luZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDNpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDNpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QzaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0M2luZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0M2luZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDNpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0M2luZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDNpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0M2luZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2Fic3RyYWN0Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0My50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDMudGl0bGVwYWdlLnNlcGFyYXRvciI+PHhzbDppZiB0ZXN0PSJjb3VudChwYXJlbnQ6OiopPScwJyI+PGhyLz48L3hzbDppZj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3QzLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDMudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0My50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDMudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3QzLnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDMudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3QzLnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0My50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNlY3Q0aW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q0aW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0ic2VjdDRpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDRpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDRpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NGluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDRpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDRpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q0aW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NGluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NGluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDRpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NGluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDRpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NGluZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2Fic3RyYWN0Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0NC50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDQudGl0bGVwYWdlLnNlcGFyYXRvciI+PHhzbDppZiB0ZXN0PSJjb3VudChwYXJlbnQ6OiopPScwJyI+PGhyLz48L3hzbDppZj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3Q0LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDQudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0NC50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDQudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDQudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Q0LnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0NC50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNlY3Q1aW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q1aW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0ic2VjdDVpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDVpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDVpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NWluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDVpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDVpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q1aW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NWluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NWluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDVpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NWluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDVpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NWluZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2Fic3RyYWN0Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0NS50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDUudGl0bGVwYWdlLnNlcGFyYXRvciI+PHhzbDppZiB0ZXN0PSJjb3VudChwYXJlbnQ6OiopPScwJyI+PGhyLz48L3hzbDppZj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3Q1LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDUudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0NS50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDUudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDUudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Q1LnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0NS50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8iPgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0ic2ltcGxlc2VjdGluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNpbXBsZXNlY3RpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0idGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNpbXBsZXNlY3RpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzaW1wbGVzZWN0aW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzaW1wbGVzZWN0aW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2ltcGxlc2VjdGluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNpbXBsZXNlY3RpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzaW1wbGVzZWN0aW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2ltcGxlc2VjdGluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNpbXBsZXNlY3RpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzaW1wbGVzZWN0aW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2ltcGxlc2VjdGluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNpbXBsZXNlY3RpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzaW1wbGVzZWN0aW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2ltcGxlc2VjdGluZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYWJzdHJhY3QiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnNlcGFyYXRvciI+PHhzbDppZiB0ZXN0PSJjb3VudChwYXJlbnQ6OiopPScwJyI+PGhyLz48L3hzbDppZj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNpbXBsZXNlY3QudGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNpbXBsZXNlY3QudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRpdGxlIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcnBhdXRob3IiIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yZ3JvdXAiIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im90aGVyY3JlZGl0IiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJlbGVhc2VpbmZvIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcHlyaWdodCIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJsZWdhbG5vdGljZSIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJwdWJkYXRlIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmlzaW9uIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmhpc3RvcnkiIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYWJzdHJhY3QiIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLnJlY3RvIj4KKyAgPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjb21wb25lbnQudGl0bGUiPgorPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iYW5jZXN0b3Itb3Itc2VsZjo6YmlibGlvZ3JhcGh5WzFdIi8+Cis8L3hzbDpjYWxsLXRlbXBsYXRlPjwvZGl2PgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0iYmlibGlvZ3JhcGh5aW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJiaWJsaW9ncmFwaHlpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImJpYmxpb2dyYXBoeS50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5zZXBhcmF0b3IiPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZSI+CisgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImJpYmxpb2dyYXBoeS50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImJpYmxpb2dyYXBoeS50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLnJlY3RvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9Imdsb3NzYXJ5LnRpdGxlcGFnZS5yZWN0byI+CisgIDxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iZ2xvc3NhcnkudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjb21wb25lbnQudGl0bGUiPgorPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iYW5jZXN0b3Itb3Itc2VsZjo6Z2xvc3NhcnlbMV0iLz4KKzwveHNsOmNhbGwtdGVtcGxhdGU+PC9kaXY+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJnbG9zc2FyeWluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iZ2xvc3NhcnkudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJnbG9zc2FyeWluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9Imdsb3NzYXJ5LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iZ2xvc3NhcnkudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iZ2xvc3NhcnkudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iZ2xvc3NhcnkudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9Imdsb3NzYXJ5LnRpdGxlcGFnZS5zZXBhcmF0b3IiPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iZ2xvc3NhcnkudGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJnbG9zc2FyeS50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9Imdsb3NzYXJ5LnRpdGxlcGFnZSI+CisgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnbG9zc2FyeS50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2xvc3NhcnkudGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnbG9zc2FyeS50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2xvc3NhcnkudGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9Imdsb3NzYXJ5LnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iZ2xvc3NhcnkudGl0bGVwYWdlLnJlY3RvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJnbG9zc2FyeS50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJnbG9zc2FyeS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iZ2xvc3NhcnkudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iZ2xvc3NhcnkudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iaW5kZXgudGl0bGVwYWdlLnJlY3RvIj4KKyAgPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJpbmRleC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNvbXBvbmVudC50aXRsZSI+Cis8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSJhbmNlc3Rvci1vci1zZWxmOjppbmRleFsxXSIvPgorPC94c2w6Y2FsbC10ZW1wbGF0ZT48L2Rpdj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZGV4aW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJpbmRleC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZGV4aW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iaW5kZXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJpbmRleC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJpbmRleC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJpbmRleC50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iaW5kZXgudGl0bGVwYWdlLnNlcGFyYXRvciI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJpbmRleC50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImluZGV4LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iaW5kZXgudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImluZGV4LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJpbmRleC50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImluZGV4LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJpbmRleC50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iaW5kZXgudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJpbmRleC50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9ImluZGV4LnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9ImluZGV4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJpbmRleC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJpbmRleC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZXRpbmRleC50aXRsZXBhZ2UucmVjdG8iPgorICA8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNldGluZGV4LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY29tcG9uZW50LnRpdGxlIj4KKzx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9ImFuY2VzdG9yLW9yLXNlbGY6OnNldGluZGV4WzFdIi8+Cis8L3hzbDpjYWxsLXRlbXBsYXRlPjwvZGl2PgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0ic2V0aW5kZXhpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldGluZGV4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2V0aW5kZXhpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXRpbmRleC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldGluZGV4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InN1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldGluZGV4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNldGluZGV4LnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZXRpbmRleC50aXRsZXBhZ2Uuc2VwYXJhdG9yIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNldGluZGV4LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2V0aW5kZXgudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZXRpbmRleC50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2V0aW5kZXgudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNldGluZGV4LnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2V0aW5kZXgudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNldGluZGV4LnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZXRpbmRleC50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNldGluZGV4LnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2V0aW5kZXgudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0ic2V0aW5kZXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNldGluZGV4LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNldGluZGV4LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNpZGViYXIudGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNpZGViYXJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpZGViYXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzaWRlYmFyaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2lkZWJhci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpZGViYXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2lkZWJhci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzaWRlYmFyaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2lkZWJhcmluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpZGViYXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InN1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpZGViYXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2lkZWJhci50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2lkZWJhci50aXRsZXBhZ2Uuc2VwYXJhdG9yIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNpZGViYXIudGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzaWRlYmFyLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2lkZWJhci50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2lkZWJhci50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2lkZWJhci50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNpZGViYXIudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNpZGViYXIudGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNpZGViYXIudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2lkZWJhci50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRpdGxlIiBtb2RlPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZm9ybWFsLm9iamVjdC5oZWFkaW5nIj4KKzx4c2w6d2l0aC1wYXJhbSBuYW1lPSJvYmplY3QiIHNlbGVjdD0iYW5jZXN0b3Itb3Itc2VsZjo6c2lkZWJhclsxXSIvPgorPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNpZGViYXIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzwveHNsOnN0eWxlc2hlZXQ+CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi95b2N0by1wcm9qZWN0LXFzL3lvY3RvLXByb2plY3QtcXMueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMveW9jdG8tcHJvamVjdC1xcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRhNzMxNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi95b2N0by1wcm9qZWN0LXFzL3lvY3RvLXByb2plY3QtcXMueG1sCkBAIC0wLDAgKzEsNzk1IEBACis8IURPQ1RZUEUgYXJ0aWNsZSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8YXJ0aWNsZSBpZD0neW9jdG8tcHJvamVjdC1xcy1pbnRybyc+CisgICAgPGFydGljbGVpbmZvPgorICAgICAgICA8dGl0bGU+WW9jdG8gUHJvamVjdCBRdWljayBTdGFydDwvdGl0bGU+CisKKyAgICAgICAgPGNvcHlyaWdodD4KKyAgICAgICAgICAgIDx5ZWFyPiZDT1BZUklHSFRfWUVBUjs8L3llYXI+CisgICAgICAgICAgICA8aG9sZGVyPkxpbnV4IEZvdW5kYXRpb248L2hvbGRlcj4KKyAgICAgICAgPC9jb3B5cmlnaHQ+CisKKyAgICAgICAgPGxlZ2Fsbm90aWNlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50IHVuZGVyCisgICAgICAgICAgICAgICAgdGhlIHRlcm1zIG9mIHRoZSA8dWxpbmsgdHlwZT0iaHR0cCIgdXJsPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8yLjAvdWsvIj5DcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlIEFsaWtlIDIuMCBVSzogRW5nbGFuZCAmYW1wOyBXYWxlczwvdWxpbms+IGFzIHB1Ymxpc2hlZCBieSBDcmVhdGl2ZSBDb21tb25zLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgRm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1hbnVhbCBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsnPllvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQ8L3VsaW5rPgorICAgICAgICAgICAgICAgIGZyb20gdGhlIFlvY3RvIFByb2plY3Qgd2Vic2l0ZS4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9sZWdhbG5vdGljZT4KKworCisgICAgICAgIDxhYnN0cmFjdD4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy95b2N0by1wcm9qZWN0LXRyYW5zcC5wbmciCisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD0iNmluIiBkZXB0aD0iMWluIgorICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ249InJpZ2h0IiBzY2FsZT0iMjUiIC8+CisgICAgICAgIDwvYWJzdHJhY3Q+CisgICAgPC9hcnRpY2xlaW5mbz4KKworICAgIDxzZWN0aW9uIGlkPSd3ZWxjb21lJz4KKyAgICAgICAgPHRpdGxlPldlbGNvbWUhPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXZWxjb21lIHRvIHRoZSBZb2N0byBQcm9qZWN0IQorICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgaXMgYW4gb3Blbi1zb3VyY2UgY29sbGFib3JhdGlvbiBwcm9qZWN0IHdob3NlCisgICAgICAgICAgICBmb2N1cyBpcyBkZXZlbG9wZXJzIG9mIGVtYmVkZGVkIExpbnV4IHN5c3RlbXMuCisgICAgICAgICAgICBBbW9uZyBvdGhlciB0aGluZ3MsIHRoZSBZb2N0byBQcm9qZWN0IHVzZXMgYSBidWlsZCBob3N0IGJhc2VkCisgICAgICAgICAgICBvbiB0aGUgT3BlbkVtYmVkZGVkIChPRSkgcHJvamVjdCwgd2hpY2ggdXNlcyB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+CisgICAgICAgICAgICB0b29sLCB0byBjb25zdHJ1Y3QgY29tcGxldGUgTGludXggaW1hZ2VzLgorICAgICAgICAgICAgVGhlIEJpdEJha2UgYW5kIE9FIGNvbXBvbmVudHMgYXJlIGNvbWJpbmVkIHRvZ2V0aGVyIHRvIGZvcm0KKyAgICAgICAgICAgIGEgcmVmZXJlbmNlIGJ1aWxkIGhvc3QsIGhpc3RvcmljYWxseSBrbm93biBhcworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcG9reSc+UG9reTwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgZG8gbm90IGhhdmUgYSBzeXN0ZW0gdGhhdCBydW5zIExpbnV4IGFuZCB5b3Ugd2FudCB0byBnaXZlCisgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCBhIHRlc3QgcnVuLCB5b3UgbWlnaHQgY29uc2lkZXIgdXNpbmcgdGhlIFlvY3RvCisgICAgICAgICAgICBQcm9qZWN0IEJ1aWxkIEFwcGxpYW5jZS4KKyAgICAgICAgICAgIFRoZSBCdWlsZCBBcHBsaWFuY2UgYWxsb3dzIHlvdSB0byBidWlsZCBhbmQgYm9vdCBhIGN1c3RvbSBlbWJlZGRlZAorICAgICAgICAgICAgTGludXggaW1hZ2Ugd2l0aCB0aGUgWW9jdG8gUHJvamVjdCB1c2luZyBhIG5vbi1MaW51eCBkZXZlbG9wbWVudAorICAgICAgICAgICAgc3lzdGVtLgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy90b29scy1yZXNvdXJjZXMvcHJvamVjdHMvYnVpbGQtYXBwbGlhbmNlJz5Zb2N0byBQcm9qZWN0IEJ1aWxkIEFwcGxpYW5jZTwvdWxpbms+CisgICAgICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBxdWljayBzdGFydCBpcyB3cml0dGVuIHNvIHRoYXQgeW91IGNhbiBxdWlja2x5IGdldCBhIGhvc3QKKyAgICAgICAgICAgIGJ1aWxkIGhvc3Qgc2V0IHVwIHRvIHVzZSB0aGUgWW9jdG8gUHJvamVjdCBhbmQgdGhlbiBidWlsZCBzb21lCisgICAgICAgICAgICBMaW51eCBpbWFnZXMuCisgICAgICAgICAgICBSYXRoZXIgdGhhbiBnbyBpbnRvIGdyZWF0IGRldGFpbCBhYm91dCB0aGUgWW9jdG8gUHJvamVjdCBhbmQgaXRzCisgICAgICAgICAgICBtYW55IGNhcGFiaWxpdGllcywgdGhpcyBxdWljayBzdGFydCBwcm92aWRlcyB0aGUgbWluaW1hbAorICAgICAgICAgICAgaW5mb3JtYXRpb24geW91IG5lZWQgdG8gdHJ5IG91dCB0aGUgWW9jdG8gUHJvamVjdCB1c2luZyBhCisgICAgICAgICAgICBzdXBwb3J0ZWQgTGludXggYnVpbGQgaG9zdC4KKyAgICAgICAgICAgIFJlYWRpbmcgYW5kIHVzaW5nIHRoZSBxdWljayBzdGFydCBzaG91bGQgcmVzdWx0IGluIHlvdSBoYXZpbmcgYQorICAgICAgICAgICAgYmFzaWMgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZSBZb2N0byBQcm9qZWN0IGlzIGFuZCBob3cgdG8gdXNlCisgICAgICAgICAgICBzb21lIG9mIGl0cyBjb3JlIGNvbXBvbmVudHMuCisgICAgICAgICAgICBZb3Ugd2lsbCBhbHNvIGhhdmUgd29ya2VkIHRocm91Z2ggc3RlcHMgdG8gcHJvZHVjZSB0d28gaW1hZ2VzOgorICAgICAgICAgICAgb25lIHN1aXRhYmxlIGZvciBlbXVsYXRpb24gYW5kIG9uZSB0aGF0IGNhbiBiZSB1c2VkIG9uIGFjdHVhbAorICAgICAgICAgICAgaGFyZHdhcmUuCisgICAgICAgICAgICBUaGUgZXhhbXBsZXMgaGlnaGxpZ2h0IHRoZSBlYXNlIHdpdGggd2hpY2ggeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHRvIGNyZWF0ZSBpbWFnZXMgZm9yIG11bHRpcGxlIHR5cGVzIG9mIGhhcmR3YXJlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgWW9jdG8gUHJvamVjdCwgeW91IGNhbgorICAgICAgICAgICAgcmVmZXJlbmNlIHRoZXNlIHJlc291cmNlczoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5XZWJzaXRlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7Jz5Zb2N0byBQcm9qZWN0IFdlYnNpdGU8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBwcm92aWRlcyB0aGUgbGF0ZXN0IGJ1aWxkcywgYnJlYWtpbmcgbmV3cywgZnVsbCBkZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uLCBhbmQgYWNjZXNzIHRvIGEgcmljaCBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIERldmVsb3BtZW50IENvbW11bml0eSBpbnRvIHdoaWNoIHlvdSBjYW4gdGFwLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkZBUXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgY29tbW9ubHkgYXNrZWQgWW9jdG8gUHJvamVjdCBxdWVzdGlvbnMgYW5kIGFuc3dlcnMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0d28gRkFRczoKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1dJS0lfVVJMOy93aWtpL0ZBUSc+WW9jdG8gUHJvamVjdCBGQVE8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBvbiBhIHdpa2ksIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2ZhcSc+RkFRPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIGNoYXB0ZXIgaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5EZXZlbG9wZXIgU2NyZWVuY2FzdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3ZpbWVvLmNvbS8zNjQ1MDMyMSc+R2V0dGluZyBTdGFydGVkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgLSBOZXcgRGV2ZWxvcGVyIFNjcmVlbmNhc3QgVHV0b3JpYWw8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBwcm92aWRlcyBhIDMwLW1pbnV0ZSB2aWRlbyBjcmVhdGVkIGZvciB1c2VycyB1bmZhbWlsaWFyCisgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIFlvY3RvIFByb2plY3QgYnV0IGZhbWlsaWFyIHdpdGggTGludXggYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgaG9zdHMuCisgICAgICAgICAgICAgICAgICAgIFdoaWxlIHRoaXMgc2NyZWVuY2FzdCBpcyBzb21ld2hhdCBkYXRlZCwgdGhlIGludHJvZHVjdG9yeQorICAgICAgICAgICAgICAgICAgICBhbmQgZnVuZGFtZW50YWwgY29uY2VwdHMgYXJlIHVzZWZ1bCBmb3IgdGhlIGJlZ2lubmVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3lwLWludHJvJz4KKyAgICAgICAgPHRpdGxlPkludHJvZHVjaW5nIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHRocm91Z2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcHJvdmlkZXMgYW4KKyAgICAgICAgICAgIG9wZW4gc291cmNlIGRldmVsb3BtZW50IGVudmlyb25tZW50IHRhcmdldGluZyB0aGUgQVJNLCBNSVBTLAorICAgICAgICAgICAgUG93ZXJQQywgYW5kIHg4NiBhcmNoaXRlY3R1cmVzIGZvciBhIHZhcmlldHkgb2YgcGxhdGZvcm1zCisgICAgICAgICAgICBpbmNsdWRpbmcgeDg2LTY0IGFuZCBlbXVsYXRlZCBvbmVzLgorICAgICAgICAgICAgWW91IGNhbiB1c2UgY29tcG9uZW50cyBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IHRvIGRlc2lnbiwgZGV2ZWxvcCwKKyAgICAgICAgICAgIGJ1aWxkLCBkZWJ1Zywgc2ltdWxhdGUsIGFuZCB0ZXN0IHRoZSBjb21wbGV0ZSBzb2Z0d2FyZSBzdGFjayB1c2luZworICAgICAgICAgICAgTGludXgsIHRoZSBYIFdpbmRvdyBTeXN0ZW0sIEdUSysgZnJhbWV3b3JrcywgYW5kIFF0IGZyYW1ld29ya3MuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICA8aW1hZ2VvYmplY3Q+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZyIKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSJQTkciIGFsaWduPSdjZW50ZXInIHNjYWxlZml0PScxJyB3aWR0aD0iMTAwJSIvPgorICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgICAgICAgIDxjYXB0aW9uPgorICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50PC9wYXJhPgorICAgICAgICAgICAgPC9jYXB0aW9uPgorICAgICAgICAgPC9tZWRpYW9iamVjdD4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgaGlnaGxpZ2h0cyBmb3IgdGhlIFlvY3RvIFByb2plY3Q6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFByb3ZpZGVzIGEgcmVjZW50IExpbnV4IGtlcm5lbCBhbG9uZyB3aXRoIGEgc2V0IG9mIHN5c3RlbQorICAgICAgICAgICAgICAgIGNvbW1hbmRzIGFuZCBsaWJyYXJpZXMgc3VpdGFibGUgZm9yIHRoZSBlbWJlZGRlZAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIE1ha2VzIGF2YWlsYWJsZSBzeXN0ZW0gY29tcG9uZW50cyBzdWNoIGFzIFgxMSwgR1RLKywgUXQsCisgICAgICAgICAgICAgICAgQ2x1dHRlciwgYW5kIFNETCAoYW1vbmcgb3RoZXJzKSBzbyB5b3UgY2FuIGNyZWF0ZSBhIHJpY2ggdXNlcgorICAgICAgICAgICAgICAgIGV4cGVyaWVuY2Ugb24gZGV2aWNlcyB0aGF0IGhhdmUgZGlzcGxheSBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICBGb3IgZGV2aWNlcyB0aGF0IGRvIG5vdCBoYXZlIGEgZGlzcGxheSBvciB3aGVyZSB5b3Ugd2lzaCB0bworICAgICAgICAgICAgICAgIHVzZSBhbHRlcm5hdGl2ZSBVSSBmcmFtZXdvcmtzLCB0aGVzZSBjb21wb25lbnRzIG5lZWQgbm90IGJlCisgICAgICAgICAgICAgICAgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIENyZWF0ZXMgYSBmb2N1c2VkIGFuZCBzdGFibGUgY29yZSBjb21wYXRpYmxlIHdpdGggdGhlCisgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIHByb2plY3Qgd2l0aCB3aGljaCB5b3UgY2FuIGVhc2lseSBhbmQgcmVsaWFibHkKKyAgICAgICAgICAgICAgICBidWlsZCBhbmQgZGV2ZWxvcC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBGdWxseSBzdXBwb3J0cyBhIHdpZGUgcmFuZ2Ugb2YgaGFyZHdhcmUgYW5kIGRldmljZSBlbXVsYXRpb24KKyAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZSBRdWljayBFTVVsYXRvciAoUUVNVSkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgUHJvdmlkZXMgYSBsYXllciBtZWNoYW5pc20gdGhhdCBhbGxvd3MgeW91IHRvIGVhc2lseSBleHRlbmQKKyAgICAgICAgICAgICAgICB0aGUgc3lzdGVtLCBtYWtlIGN1c3RvbWl6YXRpb25zLCBhbmQga2VlcCB0aGVtIG9yZ2FuaXplZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgWW9jdG8gUHJvamVjdCB0byBnZW5lcmF0ZSBpbWFnZXMgZm9yIG1hbnkga2luZHMKKyAgICAgICAgICAgIG9mIGRldmljZXMuCisgICAgICAgICAgICBBcyBtZW50aW9uZWQgZWFybGllciwgdGhlIFlvY3RvIFByb2plY3Qgc3VwcG9ydHMgY3JlYXRpb24gb2YKKyAgICAgICAgICAgIHJlZmVyZW5jZSBpbWFnZXMgdGhhdCB5b3UgY2FuIGJvb3Qgd2l0aGluIGFuZCBlbXVsYXRlIHVzaW5nIFFFTVUuCisgICAgICAgICAgICBUaGUgc3RhbmRhcmQgZXhhbXBsZSBtYWNoaW5lcyB0YXJnZXQgUUVNVSBmdWxsLXN5c3RlbQorICAgICAgICAgICAgZW11bGF0aW9uIGZvciAzMi1iaXQgYW5kIDY0LWJpdCB2YXJpYW50cyBvZiB4ODYsIEFSTSwgTUlQUywgYW5kCisgICAgICAgICAgICBQb3dlclBDIGFyY2hpdGVjdHVyZXMuCisgICAgICAgICAgICBCZXlvbmQgZW11bGF0aW9uLCB5b3UgY2FuIHVzZSB0aGUgbGF5ZXIgbWVjaGFuaXNtIHRvIGV4dGVuZAorICAgICAgICAgICAgc3VwcG9ydCB0byBqdXN0IGFib3V0IGFueSBwbGF0Zm9ybSB0aGF0IExpbnV4IGNhbiBydW4gb24gYW5kIHRoYXQKKyAgICAgICAgICAgIGEgdG9vbGNoYWluIGNhbiB0YXJnZXQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFub3RoZXIgWW9jdG8gUHJvamVjdCBmZWF0dXJlIGlzIHRoZSBTYXRvIHJlZmVyZW5jZSBVc2VyCisgICAgICAgICAgICBJbnRlcmZhY2UuCisgICAgICAgICAgICBUaGlzIG9wdGlvbmFsIFVJIHRoYXQgaXMgYmFzZWQgb24gR1RLKyBpcyBpbnRlbmRlZCBmb3IgZGV2aWNlcyB3aXRoCisgICAgICAgICAgICByZXN0cmljdGVkIHNjcmVlbiBzaXplcyBhbmQgaXMgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUKKyAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBDb3JlIGxheWVyIHNvIHRoYXQgZGV2ZWxvcGVycyBjYW4gdGVzdCBwYXJ0cyBvZiB0aGUKKyAgICAgICAgICAgIHNvZnR3YXJlIHN0YWNrLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3lwLXJlc291cmNlcyc+CisgICAgICAgIDx0aXRsZT5TZXR0aW5nIFVwIHRvIFVzZSB0aGUgWW9jdG8gUHJvamVjdDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3Qgc2hvd3Mgd2hhdCB5b3UgbmVlZCBpbiBvcmRlciB0byB1c2UgYQorICAgICAgICAgICAgTGludXgtYmFzZWQgYnVpbGQgaG9zdCB0byB1c2UgdGhlIFlvY3RvIFByb2plY3QgdG8gYnVpbGQgaW1hZ2VzOgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgSG9zdDwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQSBidWlsZCBob3N0IHdpdGggYSBtaW5pbXVtIG9mIDUwIEdieXRlcyBvZiBmcmVlIGRpc2sKKyAgICAgICAgICAgICAgICBzcGFjZSB0aGF0IGlzIHJ1bm5pbmcgYSBzdXBwb3J0ZWQgTGludXggZGlzdHJpYnV0aW9uIChpLmUuCisgICAgICAgICAgICAgICAgcmVjZW50IHJlbGVhc2VzIG9mIEZlZG9yYSwgb3BlblNVU0UsIENlbnRPUywgRGViaWFuLCBvcgorICAgICAgICAgICAgICAgIFVidW50dSkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIEhvc3QgUGFja2FnZXM8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEFwcHJvcHJpYXRlIHBhY2thZ2VzIGluc3RhbGxlZCBvbiB0aGUgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VGhlIFlvY3RvIFByb2plY3Q8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEEgcmVsZWFzZSBvZiB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RoZS1saW51eC1kaXN0cm8nPgorICAgICAgICAgICAgPHRpdGxlPlRoZSBMaW51eCBEaXN0cmlidXRpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB0ZWFtIHZlcmlmaWVzIGVhY2ggcmVsZWFzZSBhZ2FpbnN0IHJlY2VudAorICAgICAgICAgICAgICAgIHZlcnNpb25zIG9mIHRoZSBtb3N0IHBvcHVsYXIgTGludXggZGlzdHJpYnV0aW9ucyB0aGF0CisgICAgICAgICAgICAgICAgcHJvdmlkZSBzdGFibGUgcmVsZWFzZXMuCisgICAgICAgICAgICAgICAgSW4gZ2VuZXJhbCwgaWYgeW91IGhhdmUgdGhlIGN1cnJlbnQgcmVsZWFzZSBtaW51cyBvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgZm9sbG93aW5nIGRpc3RyaWJ1dGlvbnMsIHlvdSBzaG91bGQgaGF2ZSBubyBwcm9ibGVtcy4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBVYnVudHUKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBGZWRvcmEKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBvcGVuU1VTRQorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIENlbnRPUworICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIERlYmlhbgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgRm9yIGEgbW9yZSBkZXRhaWxlZCBsaXN0IG9mIGRpc3RyaWJ1dGlvbnMgdGhhdCBzdXBwb3J0IHRoZQorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjZGV0YWlsZWQtc3VwcG9ydGVkLWRpc3Ryb3MnPlN1cHBvcnRlZCBMaW51eCBEaXN0cmlidXRpb25zPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBzaG91bGQgYmUgYWJsZSB0byBydW4gb24gYW55CisgICAgICAgICAgICAgICAgbW9kZXJuIGRpc3RyaWJ1dGlvbiB0aGF0IGhhcyB0aGUgZm9sbG93aW5nIHZlcnNpb25zIGZvcgorICAgICAgICAgICAgICAgIEdpdCwgdGFyLCBhbmQgUHl0aG9uLgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEdpdCAxLjcuOCBvciBncmVhdGVyCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgdGFyIDEuMjQgb3IgZ3JlYXRlcgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFB5dGhvbiAyLjcuMyBvciBncmVhdGVyIGV4Y2x1ZGluZyBQeXRob24KKyAgICAgICAgICAgICAgICAgICAgICAgIDMueCwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIElmIHlvdXIgYnVpbGQgaG9zdCBkb2VzIG5vdCBtZWV0IGFueSBvZiB0aGVzZSB0aHJlZSBsaXN0ZWQKKyAgICAgICAgICAgICAgICB2ZXJzaW9uIHJlcXVpcmVtZW50cywgeW91IGNhbiB0YWtlIHN0ZXBzIHRvIHByZXBhcmUgdGhlCisgICAgICAgICAgICAgICAgc3lzdGVtIHNvIHRoYXQgeW91IGNhbiBzdGlsbCB1c2UgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZXF1aXJlZC1naXQtdGFyLWFuZC1weXRob24tdmVyc2lvbnMnPlJlcXVpcmVkIEdpdCwgdGFyLCBhbmQgUHl0aG9uIFZlcnNpb25zPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsIGZvciBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwYWNrYWdlcyc+CisgICAgICAgICAgICA8dGl0bGU+VGhlIEJ1aWxkIEhvc3QgUGFja2FnZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBSZXF1aXJlZCBidWlsZCBob3N0IHBhY2thZ2VzIHZhcnkgZGVwZW5kaW5nIG9uIHlvdXIKKyAgICAgICAgICAgICAgICBidWlsZCBtYWNoaW5lIGFuZCB3aGF0IHlvdSB3YW50IHRvIGRvIHdpdGggdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGJ1aWxkIGFuIGltYWdlIHRoYXQgY2FuIHJ1bgorICAgICAgICAgICAgICAgIG9uIFFFTVUgaW4gZ3JhcGhpY2FsIG1vZGUgKGEgbWluaW1hbCwgYmFzaWMgYnVpbGQKKyAgICAgICAgICAgICAgICByZXF1aXJlbWVudCksIHRoZW4gdGhlIGJ1aWxkIGhvc3QgcGFja2FnZSByZXF1aXJlbWVudHMKKyAgICAgICAgICAgICAgICBhcmUgZGlmZmVyZW50IHRoYW4gaWYgeW91IHdhbnQgdG8gYnVpbGQgYW4gaW1hZ2Ugb24gYSBoZWFkbGVzcworICAgICAgICAgICAgICAgIHN5c3RlbSBvciBidWlsZCBvdXQgdGhlIFlvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbiBzZXQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIENvbGxlY3RpdmVseSwgdGhlIG51bWJlciBvZiByZXF1aXJlZCBwYWNrYWdlcyBpcyBsYXJnZQorICAgICAgICAgICAgICAgIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gY292ZXIgYWxsIGNhc2VzLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBJbiBnZW5lcmFsLCB5b3UgbmVlZCB0byBoYXZlIHJvb3QgYWNjZXNzIGFuZCB0aGVuIGluc3RhbGwKKyAgICAgICAgICAgICAgICAgICAgdGhlIHJlcXVpcmVkIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBUaHVzLCB0aGUgY29tbWFuZHMgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uIG1heSBvciBtYXkKKyAgICAgICAgICAgICAgICAgICAgbm90IHdvcmsgZGVwZW5kaW5nIG9uIHdoZXRoZXIgb3Igbm90IHlvdXIgTGludXgKKyAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uIGhhcyA8ZmlsZW5hbWU+c3VkbzwvZmlsZW5hbWU+IGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBzaG93cyB0aGUgcmVxdWlyZWQgcGFja2FnZXMgbmVlZGVkIHRvIGJ1aWxkCisgICAgICAgICAgICAgICAgYW4gaW1hZ2UgdGhhdCBydW5zIG9uIFFFTVUgaW4gZ3JhcGhpY2FsIG1vZGUgKGUuZy4gZXNzZW50aWFsCisgICAgICAgICAgICAgICAgcGx1cyBncmFwaGljcyBzdXBwb3J0KS4KKyAgICAgICAgICAgICAgICBGb3IgbGlzdHMgb2YgcmVxdWlyZWQgcGFja2FnZXMgZm9yIG90aGVyIHNjZW5hcmlvcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZXF1aXJlZC1wYWNrYWdlcy1mb3ItdGhlLWhvc3QtZGV2ZWxvcG1lbnQtc3lzdGVtJz5SZXF1aXJlZCBQYWNrYWdlcyBmb3IgdGhlIEhvc3QgRGV2ZWxvcG1lbnQgU3lzdGVtPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VWJ1bnR1IGFuZCBEZWJpYW48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8gYXB0LWdldCBpbnN0YWxsICZVQlVOVFVfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUw7IGxpYnNkbDEuMi1kZXYgeHRlcm0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkZlZG9yYTwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyB5dW0gaW5zdGFsbCAmRkVET1JBX0hPU1RfUEFDS0FHRVNfRVNTRU5USUFMOyBTREwtZGV2ZWwgeHRlcm0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk9wZW5TVVNFPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHp5cHBlciBpbnN0YWxsICZPUEVOU1VTRV9IT1NUX1BBQ0tBR0VTX0VTU0VOVElBTDsgbGliU0RMLWRldmVsIHh0ZXJtCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DZW50T1M8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8geXVtIGluc3RhbGwgJkNFTlRPU19IT1NUX1BBQ0tBR0VTX0VTU0VOVElBTDsgU0RMLWRldmVsIHh0ZXJtCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDZW50T1MgNi54IHVzZXJzIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHJlcXVpcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbnMgb2YgR2l0LCB0YXIgYW5kIFB5dGhvbiBhcmUgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBkZXRhaWxzLCBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlcXVpcmVkLWdpdC10YXItYW5kLXB5dGhvbi12ZXJzaW9ucyc+UmVxdWlyZWQgR2l0LCB0YXIsIGFuZCBQeXRob24gVmVyc2lvbnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdyZWxlYXNlcyc+CisgICAgICAgICAgICA8dGl0bGU+WW9jdG8gUHJvamVjdCBSZWxlYXNlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGxhc3QgcmVxdWlyZW1lbnQgeW91IG5lZWQgdG8gbWVldCBiZWZvcmUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBpcyBnZXR0aW5nIGEgWW9jdG8gUHJvamVjdCByZWxlYXNlLgorICAgICAgICAgICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGdldCB0aGUgbGF0ZXN0IFlvY3RvIFByb2plY3QgcmVsZWFzZQorICAgICAgICAgICAgICAgIGJ5IHNldHRpbmcgdXAgKGNsb25pbmcgaW4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNnaXQnPkdpdDwvdWxpbms+IHRlcm1zKSBhCisgICAgICAgICAgICAgICAgbG9jYWwgY29weSBvZiB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSBvbgorICAgICAgICAgICAgICAgIHlvdXIgYnVpbGQgaG9zdCBhbmQgdGhlbiBjaGVja2luZyBvdXQgdGhlIGxhdGVzdCByZWxlYXNlLgorICAgICAgICAgICAgICAgIERvaW5nIHNvIGFsbG93cyB5b3UgdG8gZWFzaWx5IHVwZGF0ZSB0byBuZXdlciBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgcmVsZWFzZXMgYXMgd2VsbCBhcyBjb250cmlidXRlIGJhY2sgdG8gdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBmcm9tIGFuIFVidW50dSBidWlsZCBob3N0IHRoYXQgY2xvbmVzIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gcmVwb3NpdG9yeSBhbmQgdGhlbiBjaGVja3Mgb3V0IHRoZQorICAgICAgICAgICAgICAgIGxhdGVzdCBZb2N0byBQcm9qZWN0IFJlbGVhc2UgKGkuZS4gJkRJU1RSTzspOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reQorICAgICBDbG9uaW5nIGludG8gJ3Bva3knLi4uCisgICAgIHJlbW90ZTogQ291bnRpbmcgb2JqZWN0czogMjI2NzkwLCBkb25lLgorICAgICByZW1vdGU6IENvbXByZXNzaW5nIG9iamVjdHM6IDEwMCUgKDU3NDY1LzU3NDY1KSwgZG9uZS4KKyAgICAgcmVtb3RlOiBUb3RhbCAyMjY3OTAgKGRlbHRhIDE2NTIxMiksIHJldXNlZCAyMjU4ODcgKGRlbHRhIDE2NDMyNykKKyAgICAgUmVjZWl2aW5nIG9iamVjdHM6IDEwMCUgKDIyNjc5MC8yMjY3OTApLCAxMDAuOTggTWlCIHwgMjYzIEtpQi9zLCBkb25lLgorICAgICBSZXNvbHZpbmcgZGVsdGFzOiAxMDAlICgxNjUyMTIvMTY1MjEyKSwgZG9uZS4KKyAgICAgJCBnaXQgY2hlY2tvdXQgJkRJU1RST19OQU1FOworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gZ2V0IHRoZSBZb2N0byBQcm9qZWN0IEZpbGVzIGJ5IGRvd25sb2FkaW5nCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCByZWxlYXNlcyBmcm9tIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9IiZZT0NUT19IT01FX1VSTDsiPllvY3RvIFByb2plY3Qgd2Vic2l0ZTwvdWxpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBnZXR0aW5nIHNldCB1cCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgcmVsZWFzZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNsb2NhbC15cC1yZWxlYXNlJz5Zb2N0byBQcm9qZWN0IFJlbGVhc2U8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBpdGVtIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdxcy1idWlsZGluZy1pbWFnZXMnPgorICAgICAgICA8dGl0bGU+QnVpbGRpbmcgSW1hZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE5vdyB0aGF0IHlvdSBoYXZlIHlvdXIgc3lzdGVtIHJlcXVpcmVtZW50cyBpbiBvcmRlciwgeW91IGNhbiBnaXZlCisgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCBhIHRyeS4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcmVzZW50cyBzdGVwcyB0aGF0IGxldCB5b3UgZG8gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCdWlsZCBhIDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4gcmVmZXJlbmNlIGltYWdlCisgICAgICAgICAgICAgICAgICAgIGFuZCBydW4gaXQgaW4gdGhlIFFFTVUgZW11bGF0b3IuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRWFzaWx5IGNoYW5nZSBjb25maWd1cmF0aW9ucyBzbyB0aGF0IHlvdSBjYW4gcXVpY2tseQorICAgICAgICAgICAgICAgICAgICBjcmVhdGUgYSBzZWNvbmQgaW1hZ2UsIHdoaWNoIHdvdWxkIGJlIGZvciBNaW5ub3dCb2FyZAorICAgICAgICAgICAgICAgICAgICBNQVgtY29tcGF0aWJsZSBib2FyZHMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBUaGUgc3RlcHMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBwcm92aWRlIGRldGFpbCwgYnV0IHJhdGhlcgorICAgICAgICAgICAgICAgIHByb3ZpZGUgbWluaW1hbCwgd29ya2luZyBjb21tYW5kcyBhbmQgZXhhbXBsZXMgZGVzaWduZWQgdG8KKyAgICAgICAgICAgICAgICBqdXN0IGdldCB5b3Ugc3RhcnRlZC4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgdGhlIGFwcHJvcHJpYXRlIG1hbnVhbHMgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy9kb2N1bWVudGF0aW9uJz5Zb2N0byBQcm9qZWN0IG1hbnVhbCBzZXQ8L3VsaW5rPi4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgdG8gYnVpbGQgeW91ciBpbWFnZS4KKyAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNyZWF0ZXMgYW4gZW50aXJlIExpbnV4CisgICAgICAgICAgICBkaXN0cmlidXRpb24sIGluY2x1ZGluZyB0aGUgdG9vbGNoYWluLCBmcm9tIHNvdXJjZS4KKyAgICAgICAgICAgIDxub3RlPjx0aXRsZT5Ob3RlIGFib3V0IE5ldHdvcmsgUHJveGllczwvdGl0bGU+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBidWlsZCBwcm9jZXNzIHNlYXJjaGVzIGZvciBzb3VyY2UgY29kZQorICAgICAgICAgICAgICAgICAgICB1c2luZyBhIHByZS1kZXRlcm1pbmVkIG9yZGVyIHRocm91Z2ggYSBzZXQgb2YKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHdvcmtpbmcgYmVoaW5kIGEgZmlyZXdhbGwgYW5kIHlvdXIgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgaG9zdCBpcyBub3Qgc2V0IHVwIGZvciBwcm94aWVzLCB5b3UgY291bGQgZW5jb3VudGVyCisgICAgICAgICAgICAgICAgICAgIHByb2JsZW1zIHdpdGggdGhlIGJ1aWxkIHByb2Nlc3Mgd2hlbiBmZXRjaGluZyBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgY29kZSAoZS5nLiBmZXRjaGVyIGZhaWx1cmVzIG9yIEdpdCBmYWlsdXJlcykuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qga25vdyB5b3VyIHByb3h5IHNldHRpbmdzLCBjb25zdWx0IHlvdXIKKyAgICAgICAgICAgICAgICAgICAgbG9jYWwgbmV0d29yayBpbmZyYXN0cnVjdHVyZSByZXNvdXJjZXMgYW5kIGdldCB0aGF0CisgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICBBIGdvb2Qgc3RhcnRpbmcgcG9pbnQgY291bGQgYWxzbyBiZSB0byBjaGVjayB5b3VyIHdlYgorICAgICAgICAgICAgICAgICAgICBicm93c2VyIHNldHRpbmdzLgorICAgICAgICAgICAgICAgICAgICBGaW5hbGx5LCB5b3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBiZWhpbmQgYSBmaXJld2FsbCBpbiB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgTWFudWFsCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2hvdy1kb2VzLXRoZS15b2N0by1wcm9qZWN0LW9idGFpbi1zb3VyY2UtY29kZS1hbmQtd2lsbC1pdC13b3JrLWJlaGluZC1teS1maXJld2FsbC1vci1wcm94eS1zZXJ2ZXInPkZBUTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9J2h0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvV29ya2luZ19CZWhpbmRfYV9OZXR3b3JrX1Byb3h5Jz5Xb3JraW5nIEJlaGluZCBhIE5ldHdvcmsgUHJveHk8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgd2lraSBwYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QmUgU3VyZSBZb3VyIEJ1aWxkIEhvc3QgaXMgU2V0IFVwOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzdGVwcyB0byBidWlsZCBhbiBpbWFnZSBpbiB0aGlzIHNlY3Rpb24gZGVwZW5kIG9uCisgICAgICAgICAgICAgICAgICAgIHlvdXIgYnVpbGQgaG9zdCBiZWluZyBwcm9wZXJseSBzZXQgdXAuCisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgeW91IGhhdmUgd29ya2VkIHRocm91Z2ggdGhlIHJlcXVpcmVtZW50cworICAgICAgICAgICAgICAgICAgICBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd5cC1yZXNvdXJjZXMnPlNldHRpbmcgVXAgdG8gVXNlIHRoZSBZb2N0byBQcm9qZWN0PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DaGVjayBPdXQgWW91ciBCcmFuY2g6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB5b3UgYXJlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPikgYW5kIHRoZW4gY2hlY2sgb3V0CisgICAgICAgICAgICAgICAgICAgIHRoZSBicmFuY2ggYXNzb2NpYXRlZCB3aXRoIHRoZSBsYXRlc3QgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICBSZWxlYXNlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2Qgfi9wb2t5CisgICAgICQgZ2l0IGNoZWNrb3V0IC1iICZESVNUUk9fTkFNRTsgb3JpZ2luLyZESVNUUk9fTkFNRTsKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBHaXQncyA8ZmlsZW5hbWU+Y2hlY2tvdXQ8L2ZpbGVuYW1lPiBjb21tYW5kIGNoZWNrcyBvdXQKKyAgICAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgWW9jdG8gUHJvamVjdCByZWxlYXNlIGludG8gYSBsb2NhbCBicmFuY2gKKyAgICAgICAgICAgICAgICAgICAgd2hvc2UgbmFtZSBtYXRjaGVzIHRoZSByZWxlYXNlIChpLmUuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4mRElTVFJPX05BTUU7PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYWwgYnJhbmNoIHRyYWNrcyB0aGUgdXBzdHJlYW0gYnJhbmNoIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBzYW1lIG5hbWUuCisgICAgICAgICAgICAgICAgICAgIENyZWF0aW5nIHlvdXIgb3duIGJyYW5jaCBiYXNlZCBvbiB0aGUgcmVsZWFzZWQKKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoIGVuc3VyZXMgeW91IGFyZSB1c2luZyB0aGUgbGF0ZXN0IGZpbGVzIGZvcgorICAgICAgICAgICAgICAgICAgICB0aGF0IHJlbGVhc2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW5pdGlhbGl6ZSB0aGUgQnVpbGQgRW52aXJvbm1lbnQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUnVuIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IHRvIGRlZmluZSB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGVudmlyb25tZW50IG9uIHlvdXIgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNvdXJjZSAmT0VfSU5JVF9GSUxFOworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEFtb25nIG90aGVyIHRoaW5ncywgdGhlIHNjcmlwdCBjcmVhdGVzIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyA8ZmlsZW5hbWU+YnVpbGQ8L2ZpbGVuYW1lPiBpbiB0aGlzIGNhc2UKKyAgICAgICAgICAgICAgICAgICAgYW5kIGlzIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgdGhlIHNjcmlwdCBydW5zLCB5b3VyIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIHRoZSBCdWlsZCBEaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIExhdGVyLCB3aGVuIHRoZSBidWlsZCBjb21wbGV0ZXMsIHRoZSBCdWlsZCBEaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgYWxsIHRoZSBmaWxlcyBjcmVhdGVkIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHJ1bm5pbmcgYSBtZW1vcnktcmVzaWRlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3VzaW5ncG9reS1jb21wb25lbnRzLWJpdGJha2UnPkJpdEJha2U8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBzZXR1cCBzY3JpcHQuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FeGFtaW5lIFlvdXIgTG9jYWwgQ29uZmlndXJhdGlvbiBGaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHNldCB1cCB0aGUgYnVpbGQgZW52aXJvbm1lbnQsIGEgbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIG5hbWVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gYmVjb21lcyBhdmFpbGFibGUgaW4KKyAgICAgICAgICAgICAgICAgICAgYSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IHN1YmRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBCZWZvcmUgdXNpbmcgQml0QmFrZSB0byBzdGFydCB0aGUgYnVpbGQsIHlvdSBjYW4KKyAgICAgICAgICAgICAgICAgICAgbG9vayBhdCB0aGlzIGZpbGUgYW5kIGJlIHN1cmUgeW91ciBnZW5lcmFsCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zIGFyZSBob3cgeW91IHdhbnQgdGhlbToKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbyBoZWxwIGNvbnNlcnZlIGRpc2sgc3BhY2UgZHVyaW5nIGJ1aWxkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIGFkZCB0aGUgZm9sbG93aW5nIHN0YXRlbWVudCB0byB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdCdzIGNvbmZpZ3VyYXRpb24gZmlsZSwgd2hpY2ggZm9yIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFtcGxlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3kvYnVpbGQvY29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkaW5nIHRoaXMgc3RhdGVtZW50IGRlbGV0ZXMgdGhlIHdvcmsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgdXNlZCBmb3IgYnVpbGRpbmcgYSByZWNpcGUgb25jZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUgaXMgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhFUklUICs9ICJybV93b3JrIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgdGFyZ2V0IG1hY2hpbmUgZm9yIHRoZSBidWlsZCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggcHJvZHVjZXMgYW4gaW1hZ2UgdGhhdCBjYW4gYmUgdXNlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBRRU1VIGVtdWxhdG9yIGFuZCBpcyB0YXJnZXRlZCBhdCBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFkZW1hcmsgY2xhc3M9J3JlZ2lzdGVyZWQnPkludGVsPC90cmFkZW1hcms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzItYml0IGJhc2VkIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdXJ0aGVyIG9uIGluIHRoaXMgZXhhbXBsZSwgdGhpcyBkZWZhdWx0IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFzaWx5IGNoYW5nZWQgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgc28gdGhhdCB5b3UgY2FuIHF1aWNrbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBhbiBpbWFnZSBmb3IgYSBkaWZmZXJlbnQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbm90aGVyIGNvbnNpZGVyYXRpb24gYmVmb3JlIHlvdSBidWlsZCBpcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG1hbmFnZXIgdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBzZWxlY3RzIHRoZSBSUE0gcGFja2FnZSBtYW5hZ2VyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY29udHJvbCB0aGlzIGNvbmZpZ3VyYXRpb24gYnkgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+U2VsZWN0aW9uIG9mIHRoZSBwYWNrYWdlIG1hbmFnZXIgaXMgc2VwYXJhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHdoZXRoZXIgcGFja2FnZSBtYW5hZ2VtZW50IGlzIHVzZWQgYXQgcnVudGltZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSB0YXJnZXQgaW1hZ2UuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkZvciBhZGRpdGlvbmFsIHBhY2thZ2UgbWFuYWdlciBzZWxlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1wYWNrYWdlJz48ZmlsZW5hbWU+cGFja2FnZSouYmJjbGFzczwvZmlsZW5hbWU+PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TdGFydCB0aGUgQnVpbGQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udGludWUgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gYnVpbGQgYW4gT1MgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSB0YXJnZXQsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPiBpbiB0aGlzIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHRoZSBudW1iZXIgb2YgcHJvY2Vzc29ycyBhbmQgY29yZXMsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYW1vdW50IG9mIFJBTSwgdGhlIHNwZWVkIG9mIHlvdXIgSW50ZXJuZXQgY29ubmVjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG90aGVyIGZhY3RvcnMsIHRoZSBidWlsZCBwcm9jZXNzIGNvdWxkIHRha2Ugc2V2ZXJhbAorICAgICAgICAgICAgICAgICAgICAgICAgaG91cnMgdGhlIGZpcnN0IHRpbWUgeW91IHJ1biBpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN1YnNlcXVlbnQgYnVpbGRzIHJ1biBtdWNoIGZhc3RlciBzaW5jZSBwYXJ0cyBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGFyZSBjYWNoZWQuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3VzaW5ncG9reS1jb21wb25lbnRzLWJpdGJha2UnPkJpdEJha2U8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLCBvciBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I2JpdGJha2UtdXNlci1tYW51YWwtY29tbWFuZCc+Qml0QmFrZSBDb21tYW5kPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIEJpdEJha2UgVXNlciBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBvdGhlciB0YXJnZXRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtaW1hZ2VzJz5JbWFnZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgY2hhcHRlciBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNpbXVsYXRlIFlvdXIgSW1hZ2UgVXNpbmcgUUVNVTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBPbmNlIHRoaXMgcGFydGljdWxhciBpbWFnZSBpcyBidWlsdCwgeW91IGNhbiBzdGFydCBRRU1VCisgICAgICAgICAgICAgICAgICAgIGFuZCBydW4gdGhlIGltYWdlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcnVucWVtdSBxZW11eDg2CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gbGVhcm4gbW9yZSBhYm91dCBydW5uaW5nIFFFTVUsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9IiZZT0NUT19ET0NTX0RFVl9VUkw7I2Rldi1tYW51YWwtcWVtdSI+VXNpbmcgdGhlIFF1aWNrIEVNVWxhdG9yIChRRU1VKTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBjaGFwdGVyIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FeGl0IFFFTVU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRXhpdCBRRU1VIGJ5IGVpdGhlciBjbGlja2luZyBvbiB0aGUgc2h1dGRvd24gaWNvbiBvciBieQorICAgICAgICAgICAgICAgICAgICBvcGVuaW5nIGEgdGVybWluYWwsIHR5cGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG93ZXJvZmY8L2ZpbGVuYW1lPiwgYW5kIHRoZW4gcHJlc3NpbmcgIkVudGVyIi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN0ZXBzIHNob3cgaG93IGVhc3kgaXQgaXMgdG8gc2V0IHVwIHRvIGJ1aWxkIGFuCisgICAgICAgICAgICBpbWFnZSBmb3IgYSBuZXcgbWFjaGluZS4KKyAgICAgICAgICAgIFRoZXNlIHN0ZXBzIGJ1aWxkIGFuIGltYWdlIGZvciB0aGUgTWlubm93Qm9hcmQgTUFYLCB3aGljaCBpcworICAgICAgICAgICAgc3VwcG9ydGVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0IGFuZCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gPGZpbGVuYW1lPmludGVsLWNvcmVpNy02NDwvZmlsZW5hbWU+CisgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmludGVsLWNvcmUyLTMyPC9maWxlbmFtZT4gQm9hcmQgU3VwcG9ydCBQYWNrYWdlcworICAgICAgICAgICAgKEJTUHMpLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhlIE1pbm5vd0JvYXJkIE1BWCBzaGlwcyB3aXRoIDY0LWJpdCBmaXJtd2FyZS4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIGJvYXJkIGluIDMyLWJpdCBtb2RlLCB5b3UgbXVzdAorICAgICAgICAgICAgICAgIGRvd25sb2FkIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9maXJtd2FyZS5pbnRlbC5jb20vcHJvamVjdHMvbWlubm93Ym9hcmQtbWF4Jz4zMi1iaXQgZmlybXdhcmU8L3VsaW5rPi4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIGEgTG9jYWwgQ29weSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBSZXBvc2l0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEJ1aWxkaW5nIGFuIGltYWdlIGZvciB0aGUgTWlubm93Qm9hcmQgTUFYIHJlcXVpcmVzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+IGxheWVyLgorICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5naXQgY2xvbmU8L2ZpbGVuYW1lPiBjb21tYW5kIHRvIGNyZWF0ZQorICAgICAgICAgICAgICAgICAgICBhIGxvY2FsIGNvcHkgb2YgdGhlIHJlcG9zaXRvcnk6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbWV0YS1pbnRlbAorICAgICBDbG9uaW5nIGludG8gJ21ldGEtaW50ZWwnLi4uCisgICAgIHJlbW90ZTogQ291bnRpbmcgb2JqZWN0czogMTA4MjQsIGRvbmUuCisgICAgIHJlbW90ZTogQ29tcHJlc3Npbmcgb2JqZWN0czogMTAwJSAoMzUwOC8zNTA4KSwgZG9uZS4KKyAgICAgcmVtb3RlOiBUb3RhbCAxMDgyNCAoZGVsdGEgNjIxOSksIHJldXNlZCAxMDU4MCAoZGVsdGEgNTk3NSkKKyAgICAgUmVjZWl2aW5nIG9iamVjdHM6IDEwMCUgKDEwODI0LzEwODI0KSwgMi43MiBNaUIgfCA0ODIuMDAgS2lCL3MsIGRvbmUuCisgICAgIFJlc29sdmluZyBkZWx0YXM6IDEwMCUgKDYyMTkvNjIxOSksIGRvbmUuCisgICAgIENoZWNraW5nIGNvbm5lY3Rpdml0eS4uLiBkb25lLgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q29uZmlndXJlIHRoZSBCdWlsZDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUbyBjb25maWd1cmUgdGhlIGJ1aWxkLCB5b3UgZWRpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlcywgYm90aCBvZiB3aGljaCBhcmUKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRlZCBpbiB0aGUgPGZpbGVuYW1lPmJ1aWxkL2NvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT5IZXJlIGlzIGEgcXVpY2sgd2F5IHRvIG1ha2UgdGhlIGVkaXRzLgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgY29tbWFuZCB1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS1sYXllcnMgYWRkLWxheWVyPC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgICAgICB0byBhZGQgdGhlIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIsIHdoaWNoIGNvbnRhaW5zIHRoZSA8ZmlsZW5hbWU+aW50ZWwtY29yZSo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBCU1BzIHRvIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNlY29uZCBjb21tYW5kIHNlbGVjdHMgdGhlIEJTUCBieSBzZXR0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZS1sYXllcnMgYWRkLWxheWVyICIkSE9NRS9zb3VyY2UvcG9reS9tZXRhLWludGVsIgorICAgICAkIGVjaG8gJ01BQ0hJTkUgPSAiaW50ZWwtY29yZWk3LTY0IicgPj4gY29uZi9sb2NhbC5jb25mCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+PHRpdGxlPk5vdGVzPC90aXRsZT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCBhIDY0LWJpdCBidWlsZCwgdXNlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZWNobyAnTUFDSElORSA9ICJpbnRlbC1jb3JlaTctNjQiJyA+PiBjb25mL2xvY2FsLmNvbmYKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgMzItYml0IGltYWdlcywgdXNlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZWNobyAnTUFDSElORSA9ICJpbnRlbC1jb3JlMi0zMiInID4+IGNvbmYvbG9jYWwuY29uZgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCBhIE1pbmltYWwgSW1hZ2UgZm9yIE1pbm5vd0JvYXJkIE1BWDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGJ1aWxkIHRoZSBtaW5pbWFsIGltYWdlIGZvcgorICAgICAgICAgICAgICAgICAgICBNaW5ub3dCb2FyZCBNQVguCisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGFyZSBtaW5pbWFsIHRvIHNldCB1cCBmb3IKKyAgICAgICAgICAgICAgICAgICAgdGhpcyBzZWNvbmQgYnVpbGQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNhbgorICAgICAgICAgICAgICAgICAgICByZS11c2UgZmlsZXMgZnJvbSBwcmV2aW91cyBidWlsZHMgYXMgbXVjaCBhcyBwb3NzaWJsZS4KKyAgICAgICAgICAgICAgICAgICAgUmUtdXNpbmcgZmlsZXMgbWVhbnMgdGhpcyBzZWNvbmQgYnVpbGQgd2lsbCBiZSBtdWNoIGZhc3RlcgorICAgICAgICAgICAgICAgICAgICB0aGFuIGFuIGluaXRpYWwgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIE9uY2UgdGhlIGJ1aWxkIGNvbXBsZXRlcywgdGhlIHJlc3VsdGluZyBiYXNpYyBjb25zb2xlIGltYWdlCisgICAgICAgICAgICAgICAgICAgIGlzIGxvY2F0ZWQgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeSBoZXJlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHRtcC9kZXBsb3kvaW1hZ2VzL2ludGVsLWNvcmVpNy02NC9jb3JlLWltYWdlLW1pbmltYWwtaW50ZWwtY29yZWk3LTY0LmhkZGltZworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+V3JpdGUgdGhlIEltYWdlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gd3JpdGUgdGhlIGltYWdlIHRvIGEgVVNCIGtleSwgU0FUQSBkcml2ZSwgb3IgU0QKKyAgICAgICAgICAgICAgICAgICAgY2FyZCBieSB1c2luZyB0aGUgPGZpbGVuYW1lPm1rZWZpZGlzay5zaDwvZmlsZW5hbWU+IHNjcmlwdCwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgaW5jbHVkZWQgaW4gdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSBhdAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2NyaXB0cy9jb250cmliL21rZWZpZGlzay5zaDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyAkSE9NRS9zb3VyY2UvcG9reS9zY3JpcHRzL2NvbnRyaWIvbWtlZmlkaXNrLnNoIDxyZXBsYWNlYWJsZT5IT1NUX0RFVklDRTwvcmVwbGFjZWFibGU+IFwKKyAgICAgICAgdG1wL2RlcGxveS9pbWFnZXMvaW50ZWwtY29yZWk3LTY0L2NvcmUtaW1hZ2UtbWluaW1hbC1pbnRlbC1jb3JlaTctNjQuaGRkaW1nIDxyZXBsYWNlYWJsZT5UQVJHRVRfREVWSUNFPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBJbiB0aGUgcHJldmlvdXMgY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPkhPU1RfREVWSUNFPC9yZXBsYWNlYWJsZT4gaXMgdGhlIGRldmljZSBub2RlCisgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBidWlsZCBob3N0IChlLmcuIDxmaWxlbmFtZT4vZGV2L3NkYzwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZGV2L21tY2JsazA8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5UQVJHRVRfREVWSUNFPC9yZXBsYWNlYWJsZT4gaXMgdGhlIG5hbWUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGRldmljZSBhcyB0aGUgTWlubm93Qm9hcmQgTUFYIHNlZXMgaXQgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9kZXYvc2RhPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9kZXYvbW1jYmxrMDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Cb290IHRoZSBIYXJkd2FyZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBXaXRoIHRoZSBib290IGRldmljZSBwcm92aXNpb25lZCwgeW91IGNhbiBpbnNlcnQgdGhlCisgICAgICAgICAgICAgICAgICAgIG1lZGlhIGludG8gdGhlIE1pbm5vd0JvYXJkIE1BWCBhbmQgYm9vdCB0aGUgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBib2FyZCBzaG91bGQgYXV0b21hdGljYWxseSBkZXRlY3QgdGhlIG1lZGlhIGFuZCBib290IHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBib290bG9hZGVyIGFuZCBzdWJzZXF1ZW50bHkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB0aGUgYm9hcmQgZG9lcyBub3QgYm9vdCBhdXRvbWF0aWNhbGx5LCB5b3UgY2FuCisgICAgICAgICAgICAgICAgICAgIGJvb3QgaXQgbWFudWFsbHkgZnJvbSB0aGUgRUZJIHNoZWxsIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU2hlbGw+IGNvbm5lY3QgLXIKKyAgICAgU2hlbGw+IG1hcCAtcgorICAgICBTaGVsbD4gZnMwOgorICAgICBTaGVsbD4gYm9vdHg2NAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGEgMzItYml0IGltYWdlIHVzZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTaGVsbD4gYm9vdGlhMzIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncXMtbmV4dC1zdGVwcyc+CisgICAgICAgIDx0aXRsZT5OZXh0IFN0ZXBzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBjb21wbGV0ZWQgYWxsIHRoZSBzdGVwcyBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiB0aGVuCisgICAgICAgICAgICBjb25ncmF0dWxhdGlvbnMgdG8geW91IQorICAgICAgICAgICAgV2hhdCBub3c/CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIERlcGVuZGluZyBvbiB3aGF0IHlvdSBwcmltYXJ5IGludGVyZXN0cyBhcmUgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCwKKyAgICAgICAgICAgIHlvdSBjb3VsZCBjb25zaWRlciBhbnkgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5WaXNpdCB0aGUgWW9jdG8gUHJvamVjdCBXZWIgU2l0ZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgb2ZmaWNpYWwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOyc+WW9jdG8gUHJvamVjdDwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHdlYiBzaXRlIGNvbnRhaW5zIGluZm9ybWF0aW9uIG9uIHRoZSBlbnRpcmUgcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgVmlzaXRpbmcgdGhpcyBzaXRlIGlzIGEgZ29vZCB3YXkgdG8gZmFtaWxpYXJpemUgeW91cnNlbGYKKyAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgb3ZlcmFsbCBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkV4cGxvcmUgRGV2ZWxvcG1lbnQgTW9kZWxzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZGV2LW1hbnVhbC1tb2RlbCc+Q29tbW9uIERldmVsb3BtZW50IE1vZGVsczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbAorICAgICAgICAgICAgICAgICAgICB0byBnZXQgYW4gb3ZlcnZpZXcgb2YgdGhlIHZhcmlvdXMgd2F5cyBieSB3aGljaAorICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIHVzZSB0aGUgWW9jdG8gUHJvamVjdCB0byBkZXZlbG9wIHByb2plY3RzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxlYXJuIFNvbWUgT3BlbiBTb3VyY2UgQmFzaWNzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgbmV3IHRvIHRoZSBvcGVuIHNvdXJjZSBlbnZpcm9ubWVudCwgeW91IG1pZ2h0CisgICAgICAgICAgICAgICAgICAgIHJlYWQgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNkZXYtbWFudWFsLW5ld2JpZSc+VGhlIFlvY3RvIFByb2plY3QgT3BlbiBTb3VyY2UgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgY2hhcHRlciBvZiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY2hhcHRlciBwcmVzZW50cyBvdmVydmlldyBtYXRlcmlhbCBmb3Igb3BlbiBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TGVhcm4gQWJvdXQgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91ciBwcmltYXJ5IGludGVyZXN0cyBsaWUgaW4gZGV2ZWxvcGluZyBhcHBsaWNhdGlvbnMsCisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gcmVmZXJlbmNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyNhZHQtbWFudWFsLWludHJvJz5Zb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TGVhcm4gQWJvdXQgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQcyk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gbGVhcm4gYWJvdXQgQlNQcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNic3AnPllvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxlYXJuIEFib3V0IFVzaW5nIEVjbGlwc2UgV2l0aCB0aGUgWW9jdG8gUHJvamVjdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGFuIEVjbGlwc2UgdXNlciwgeW91IGNhbiBsZWFybiBhYm91dCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBpbiB0aGF0IGRldmVsb3BtZW50IGVudmlyb25tZW50IGJ5IHJlYWRpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN3b3JrZmxvdy11c2luZy10aGUtYWR0LWFuZC1lY2xpcHNlJz5Xb3JrZmxvdyBVc2luZyB0aGUgQURUIGFuZCBFY2xpcHNl4oSiPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxlYXJuIEFib3V0IFRvYXN0ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBpcyBhIHdlYiBpbnRlcmZhY2UgdG8gdGhlIFlvY3RvIFByb2plY3QncworICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gdXNpbmcgdGhpcyB0eXBlIG9mIGludGVyZmFjZSB0bworICAgICAgICAgICAgICAgICAgICBjcmVhdGUgaW1hZ2VzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1RPQVNUX1VSTDsjdG9hc3Rlci1tYW51YWwtaW50cm8nPlRvYXN0ZXIgVXNlciBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FeHBsb3JlIFlvY3RvIFByb2plY3QgQ29tbW9uIFRhc2tzIGFuZCBUZWNobmljYWwgRGV0YWlsczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gYSBtaXggb2YgY29tbW9uIHRhc2tzIHRoYXQgaGF2ZSB0bworICAgICAgICAgICAgICAgICAgICBkbyB3aXRoIHByb2plY3QgZGV2ZWxvcCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZXh0ZW5kcG9reSc+Q29tbW9uIFRhc2tzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCBtb3JlIGRldGFpbCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtbWFudWFsLWludHJvJz5Zb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvYXJ0aWNsZT4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L0NPUFlJTkcuTUlUIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L0NPUFlJTkcuTUlUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZGUzNTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvQ09QWUlORy5NSVQKQEAgLTAsMCArMSwxNyBAQAorUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvUkVBRE1FIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWE2ZmVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L1JFQURNRQpAQCAtMCwwICsxLDMgQEAKK1RoaXMgbGF5ZXIgaXMgaW50ZW5kZWQgYXMgdGVzdCBsYXllciwgdXNlZCBieSBzY3JpcHRzL29lLXNlbGZ0ZXN0CithbmQgaXQncyBwcm9iYWJseSBhIG1pc3Rha2UgdG8gaW5jbHVkZSBpdCBpbiB5b3VyIGJ1aWxkcyAodW5sZXNzIHlvdQord2FudCB0byBydW4gdGhlIHNjcmlwdCkuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvY2xhc3Nlcy90ZXN0X2V2ZW50cy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L2NsYXNzZXMvdGVzdF9ldmVudHMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTMyNGViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L2NsYXNzZXMvdGVzdF9ldmVudHMuYmJjbGFzcwpAQCAtMCwwICsxLDE2IEBACitweXRob24gdGVzdDFfZXZlbnRoYW5kbGVyKCkgeworICAgIGJiLm5vdGUoIlRlc3QgZm9yIGJiLmV2ZW50LkJ1aWxkU3RhcnRlZCIpCit9CitweXRob24gdGVzdDJfZXZlbnRoYW5kbGVyKCkgeworICAgIGJiLm5vdGUoIlRlc3QgZm9yIGJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkIikKK30KK3B5dGhvbiB0ZXN0M19ldmVudGhhbmRsZXIoKSB7CisgICAgYmIubm90ZSgiVGVzdCBmb3IgYmIuZXZlbnQuSW52YWxpZEV2ZW50IikKK30KKworYWRkaGFuZGxlciB0ZXN0MV9ldmVudGhhbmRsZXIKK3Rlc3QxX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LkJ1aWxkU3RhcnRlZCIKK2FkZGhhbmRsZXIgdGVzdDJfZXZlbnRoYW5kbGVyCit0ZXN0Ml9ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZENvbXBsZXRlZCIKK2FkZGhhbmRsZXIgdGVzdDNfZXZlbnRoYW5kbGVyCit0ZXN0M19ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5JbnZhbGlkRXZlbnQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvY29uZi9sYXllci5jb25mIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L2NvbmYvbGF5ZXIuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODQ3Yjc4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L2NvbmYvbGF5ZXIuY29uZgpAQCAtMCwwICsxLDEwIEBACisjIFdlIGhhdmUgYSBjb25mIGFuZCBjbGFzc2VzIGRpcmVjdG9yeSwgYWRkIHRvIEJCUEFUSAorQkJQQVRIIC49ICI6JHtMQVlFUkRJUn0iCisKKyMgV2UgaGF2ZSByZWNpcGVzLSogZGlyZWN0b3JpZXMsIGFkZCB0byBCQkZJTEVTCitCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiIFwKKwkke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIgorCitCQkZJTEVfQ09MTEVDVElPTlMgKz0gInNlbGZ0ZXN0IgorQkJGSUxFX1BBVFRFUk5fc2VsZnRlc3QgPSAiXiR7TEFZRVJESVJ9LyIKK0JCRklMRV9QUklPUklUWV9zZWxmdGVzdCA9ICI1IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9hc3BlbGwvYXNwZWxsXzAuMC4wLjEuYmIgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2FzcGVsbC9hc3BlbGxfMC4wLjAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGEwYWI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9hc3BlbGwvYXNwZWxsXzAuMC4wLjEuYmIKQEAgLTAsMCArMSwzMCBAQAorIyBUaGlzIHJlY2lwZSBpcyBhIGNvcHkgZnJvbSB0aGUgb2UtY29yZSBvbmUuCisjIEl0IGhhcyBhIGxvd2VyIGFuZCBpbnZhbGlkIHZlcnNpb24gbnVtYmVyIGluIG9yZGVyIG5vdCB0byBiZSBhY2NpZGVudGFsbHkgdXNlZCBieSBiaXRiYWtlLgorIyBJdCBpcyB1c2VkIGZvciB0ZXN0cyB0aGF0IHJlcXVpcmUgb3ZlcmxheWVkIHJlY2lwZSBmaWxlcy4KKworU1VNTUFSWSA9ICJHTlUgQXNwZWxsIHNwZWxsLWNoZWNrZXIiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKK0xJQ0VOU0UgPSAiTEdQTHYyIHwgTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCIKKworUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9hc3BlbGwvYXNwZWxsLSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICJlNjZhOWM5YWY2YTYwZGM0NjEzNGZkYWNmNmNlOTdkNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmNTI1ODNhODNhNjM2MzM3MDFjNWY3MWRiM2RjNDBhYWI4N2I3Zjc2YjI5NzIzYWViMjc5NDFlZmY0MmRmNmUxIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tjdXJzZXNdID0gIi0tZW5hYmxlLWN1cnNlcywtLWRpc2FibGUtY3Vyc2VzLG5jdXJzZXMiCisKK1BBQ0tBR0VTICs9ICJsaWJhc3BlbGwgbGlicHNwZWxsIGxpYnBzcGVsbC1kZXYgYXNwZWxsLXV0aWxzIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9hc3BlbGwtMC42MC8uZGVidSoiCitGSUxFU19saWJhc3BlbGwgPSAiJHtsaWJkaXJ9L2xpYmFzcGVsbC5zby4qICR7bGliZGlyfS9hc3BlbGwqIgorRklMRVNfYXNwZWxsLXV0aWxzID0gIiR7YmluZGlyfS93b3JkLWxpc3QtY29tcHJlc3MgJHtiaW5kaXJ9L2FzcGVsbC1pbXBvcnQgJHtiaW5kaXJ9L3J1bi13aXRoLWFzcGVsbCAke2JpbmRpcn0vcHJlKiIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9hc3BlbGwiCitGSUxFU19saWJwc3BlbGwgPSAiJHtsaWJkaXJ9L2xpYnBzcGVsbC5zby4qIgorRklMRVNfbGlicHNwZWxsLWRldiA9ICIke2xpYmRpcn0vbGlicHNwZWxsKiAke2JpbmRpcn0vcHNwZWxsLWNvbmZpZyAke2luY2x1ZGVkaXJ9L3BzcGVsbCIKKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2FzcGVsbC9hc3BlbGxfMC42MC42LjEuYmJhcHBlbmQgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2FzcGVsbC9hc3BlbGxfMC42MC42LjEuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA1NzIwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvYXNwZWxsL2FzcGVsbF8wLjYwLjYuMS5iYmFwcGVuZApAQCAtMCwwICsxLDIgQEAKKyMgVGhpcyBiYmFwcGVuZCBpcyB1c2VkIHRvIGFsdGVyIHRoZSByZWNpcGUgdXNpbmcgdGhlIHRlc3RfcmVjaXBlLmluYyBmaWxlIGNyZWF0ZWQgYnkgdGVzdHMuCitpbmNsdWRlIHRlc3RfcmVjaXBlLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2RldnRvb2wtdXBncmFkZV8wLjEuYmIgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2RldnRvb2wvZGV2dG9vbC11cGdyYWRlXzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2ZmYzg4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2RldnRvb2wtdXBncmFkZV8wLjEuYmIKQEAgLTAsMCArMSwyNSBAQAorIworIyBUaGlzIGZpbGUgd2FzIGRlcml2ZWQgZnJvbSB0aGUgJ0hlbGxvIFdvcmxkIScgZXhhbXBsZSByZWNpcGUgaW4gdGhlCisjIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorIworCitERVNDUklQVElPTiA9ICJTaW1wbGUgaGVsbG93b3JsZCBhcHBsaWNhdGlvbiB1c2VkIHRvIHRlc3QgdGhlIGRldnRvb2wgdXBncmFkZSBmZWF0dXJlIgorU0VDVElPTiA9ICJkZXZ0b29sIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vTUlUO21kNT0wODM1YWRlNjk4ZTBiY2Y4NTA2ZWNkYTJmN2I0ZjMwMiIKK1BSID0gInIwIgorCitTUkNfVVJJID0gImZpbGU6Ly8ke1RISVNESVJ9L2ZpbGVzLyR7UH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaGVsbG93b3JkLmMtZXhpdC13aXRoLUVYSVRfU1VDQ0VTUy1pbnN0ZWFkLW9mLWEtbWFnaS5wYXRjaCBcCisgICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9LyR7UH0iCisKK2RvX2NvbXBpbGUoKSB7CisJICAgICAke0NDfSBoZWxsb3dvcmxkLmMgLW8gaGVsbG93b3JsZAorfQorCitkb19pbnN0YWxsKCkgeworCSAgICAgaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJICAgICBpbnN0YWxsIC1tIDA3NTUgaGVsbG93b3JsZCAke0R9JHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2RldnRvb2wvZmlsZXMvMDAwMS1oZWxsb3dvcmQuYy1leGl0LXdpdGgtRVhJVF9TVUNDRVNTLWluc3RlYWQtb2YtYS1tYWdpLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2ZpbGVzLzAwMDEtaGVsbG93b3JkLmMtZXhpdC13aXRoLUVYSVRfU1VDQ0VTUy1pbnN0ZWFkLW9mLWEtbWFnaS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjk0YTA5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2ZpbGVzLzAwMDEtaGVsbG93b3JkLmMtZXhpdC13aXRoLUVYSVRfU1VDQ0VTUy1pbnN0ZWFkLW9mLWEtbWFnaS5wYXRjaApAQCAtMCwwICsxLDI3IEBACitGcm9tIDBmMzdhZmZiYzZlNmM3MTY4NzMwMWQ5OWQ3MjU5ZjE5NjhlNTdjNDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPgorRGF0ZTogV2VkLCAyNiBBdWcgMjAxNSAxMjo0MjoyMyArMDAwMAorU3ViamVjdDogW1BBVENIXSBoZWxsb3dvcmQuYzogZXhpdCB3aXRoIEVYSVRfU1VDQ0VTUyBpbnN0ZWFkIG9mIGEgbWFnaWMgbnVtYmVyCisKKy0tLQorIGhlbGxvd29ybGQuYyB8IDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvaGVsbG93b3JsZC5jIGIvaGVsbG93b3JsZC5jCitpbmRleCA3MWYyZTQ2Li41NGJmNTBiIDEwMDY0NAorLS0tIGEvaGVsbG93b3JsZC5jCisrKysgYi9oZWxsb3dvcmxkLmMKK0BAIC0xLDggKzEsOSBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyAKKyBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgeworICAgICBwcmludGYoIkhlbGxvIFdvcmxkIVxuIik7CisgCistICAgIHJldHVybiAwOworKyAgICByZXR1cm4gRVhJVF9TVUNDRVNTOworIH0KKy0tIAorMS44LjQuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2RldnRvb2wvZmlsZXMvZGV2dG9vbC11cGdyYWRlLTAuMS50YXIuZ3ogYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2RldnRvb2wvZmlsZXMvZGV2dG9vbC11cGdyYWRlLTAuMS50YXIuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZhMWM0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvZGV2dG9vbC9maWxlcy9kZXZ0b29sLXVwZ3JhZGUtMC4xLnRhci5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2RldnRvb2wvZmlsZXMvZGV2dG9vbC11cGdyYWRlLTAuMi50YXIuZ3ogYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2RldnRvb2wvZmlsZXMvZGV2dG9vbC11cGdyYWRlLTAuMi50YXIuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIwZGNmNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvZGV2dG9vbC9maWxlcy9kZXZ0b29sLXVwZ3JhZGUtMC4yLnRhci5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2VtcHR5dGVzdC9lbXB0eXRlc3QuYmIgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2VtcHR5dGVzdC9lbXB0eXRlc3QuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg3ZjRkNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvZW1wdHl0ZXN0L2VtcHR5dGVzdC5iYgpAQCAtMCwwICsxLDUgQEAKK2luY2x1ZGUgdGVzdF9yZWNpcGUuaW5jCisKKyMgU2V0IExJQ0VOU0UgdG8gc29tZXRoaW5nIHNvIHRoYXQgYml0YmFrZSAtcCB0aGF0IGlzIHJhbiBhdCB0aGUgYmVnaW5uaW5nCisjIGlzIHN1Y2Nlc3NmdWwgc2luY2UgdGVzdF9yZWNpcGUuaW5jIGhhcyBub3QgeWV0IGJlZW4gbW9kaWZpZWQuCitMSUNFTlNFID0gIiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvaW1hZ2VzL29lLXNlbGZ0ZXN0LWltYWdlLmJiIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9pbWFnZXMvb2Utc2VsZnRlc3QtaW1hZ2UuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE3MDk0YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvaW1hZ2VzL29lLXNlbGZ0ZXN0LWltYWdlLmJiCkBAIC0wLDAgKzEsOSBAQAorU1VNTUFSWSA9ICJBbiBpbWFnZSB1c2VkIGR1cmluZyBvZS1zZWxmdGVzdCB0ZXN0cyIKKworSU1BR0VfSU5TVEFMTCA9ICJwYWNrYWdlZ3JvdXAtY29yZS1ib290ICR7Uk9PVEZTX1BLR01BTkFHRV9CT09UU1RSQVB9IGRyb3BiZWFyIgorSU1BR0VfRkVBVFVSRVMgPSAiZGVidWctdHdlYWtzIgorCitJTUFHRV9MSU5HVUFTID0gIiAiCisKK2luaGVyaXQgY29yZS1pbWFnZQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC5iYiBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvaW1hZ2VzL3dpYy1pbWFnZS1taW5pbWFsLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3M2M1NjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC5iYgpAQCAtMCwwICsxLDE0IEBACitTVU1NQVJZID0gIkFuIGV4YW1wbGUgb2YgcGFydGl0aW9uZWQgaW1hZ2UuIgorCitJTUFHRV9JTlNUQUxMID0gInBhY2thZ2Vncm91cC1jb3JlLWJvb3QgJHtST09URlNfUEtHTUFOQUdFX0JPT1RTVFJBUH0iCisKK0lNQUdFX0ZTVFlQRVMgPSAid2ljLmJ6MiIKK1JNX09MRF9JTUFHRSA9ICIxIgorCisjIGNvcmUtaW1hZ2UtbWluaW1hbCBpcyByZWZlcmVuY2VkIGluIC53a3MsIHNvIHdlIG5lZWQgaXRzIHJvb3RmcworIyB0byBiZSByZWFkeSBiZWZvcmUgb3VyIHJvb3RmcworZG9fcm9vdGZzW2RlcGVuZHNdICs9ICJjb3JlLWltYWdlLW1pbmltYWw6ZG9fcm9vdGZzIgorCitJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UgPSAiMjAwMCIKKworaW5oZXJpdCBpbWFnZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9pbWFnZXMvd2ljLWltYWdlLW1pbmltYWwud2tzIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9pbWFnZXMvd2ljLWltYWdlLW1pbmltYWwud2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5Y2Q4ZjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC53a3MKQEAgLTAsMCArMSwxMCBAQAorIyBzaG9ydC1kZXNjcmlwdGlvbjogRXhhbXBsZSBvZiBwYXJ0aXRpb25lZCBpbWFnZSB3aXRoIGNvbXBsZXggbGF5b3V0CisjIGxvbmctZGVzY3JpcHRpb246IFRoaXMgaW1hZ2UgY29udGFpbnMgYm9vdCBwYXJ0aXRpb24gYW5kIDMgcm9vdGZzIHBhcnRpdGlvbnMKKyMgY3JlYXRlZCBmcm9tIGNvcmUtaW1hZ2UtbWluaW1hbCBhbmQgd2ljLWltYWdlLW1pbmltYWwgaW1hZ2UgcmVjaXBlcy4KKworcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLXBjYmlvcyAtLW9uZGlzayBzZGEgLS1sYWJlbCBib290IC0tYWN0aXZlIC0tYWxpZ24gMTAyNAorcGFydCAvIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0MiAtLWxhYmVsIHBsYXRmb3JtIC0tYWxpZ24gMTAyNAorcGFydCAvY29yZSAtLXNvdXJjZSByb290ZnMgLS1yb290ZnMtZGlyPWNvcmUtaW1hZ2UtbWluaW1hbCAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0MiAtLWxhYmVsIGNvcmUgLS1hbGlnbiAxMDI0CitwYXJ0IC9iYWNrdXAgLS1zb3VyY2Ugcm9vdGZzIC0tcm9vdGZzLWRpcj13aWMtaW1hZ2UtbWluaW1hbCAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0MiAtLWxhYmVsIGJhY2t1cCAtLWFsaWduIDEwMjQKKworYm9vdGxvYWRlciAgLS10aW1lb3V0PTAgIC0tYXBwZW5kPSJyb290d2FpdCBjb25zb2xlPXR0eTAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L200L200XzEuNC4xNy5iYmFwcGVuZCBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvbTQvbTRfMS40LjE3LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNTcyMDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L200L200XzEuNC4xNy5iYmFwcGVuZApAQCAtMCwwICsxLDIgQEAKKyMgVGhpcyBiYmFwcGVuZCBpcyB1c2VkIHRvIGFsdGVyIHRoZSByZWNpcGUgdXNpbmcgdGhlIHRlc3RfcmVjaXBlLmluYyBmaWxlIGNyZWF0ZWQgYnkgdGVzdHMuCitpbmNsdWRlIHRlc3RfcmVjaXBlLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9tYW4vbWFuL21hbi0xLjVoMS1tYWtlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9tYW4vbWFuL21hbi0xLjVoMS1tYWtlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZDU5YjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L21hbi9tYW4vbWFuLTEuNWgxLW1ha2UucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAorVGVzdCBwYXRjaCBoZXJlIQorVGhpcyBpcyBpbnZhbGlkIHBhdGNoIHVzZWQgYnkgdGVzdHMgaW4gc2NyaXB0cy9saWIvc2VsZnRlc3RzLgorCistLS0gbWFuLTEuNWcvbWFuL01ha2VmaWxlLmluLm1pa2UJRnJpIEFwciAgOSAxMzozNTo1NCAxOTk5CisrKysgbWFuLTEuNWcvbWFuL01ha2VmaWxlLmluCUZyaSBBcHIgIDkgMTM6MzY6NDUgMTk5OQorQEAgLTEsOCArMSw4IEBACisgI01BS0UgVEhJUyBQQVRDSCBJTlZBTElECisgTUFOMSA9IG1hbiB3aGF0aXMgYXByb3BvcworLU1BTjUgPSBtYW4uY29uZgorK01BTjUgPSBtYW4uY29uZmlnCisgTUFOOCA9IG1ha2V3aGF0aXMKKy1BTEwgPSBtYW4uMSB3aGF0aXMuMSBhcHJvcG9zLjEgbWFuLmNvbmYuNQorK0FMTCA9IG1hbi4xIHdoYXRpcy4xIGFwcm9wb3MuMSBtYW4uY29uZmlnLjUKKyBNQVlCRTggPSBtYWtld2hhdGlzCisgCisgLlNVRkZJWEVTOiAubWFuIC4xIC41IC44CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L21hbi9tYW5fMS42Zy5iYmFwcGVuZCBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvbWFuL21hbl8xLjZnLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNTcyMDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L21hbi9tYW5fMS42Zy5iYmFwcGVuZApAQCAtMCwwICsxLDIgQEAKKyMgVGhpcyBiYmFwcGVuZCBpcyB1c2VkIHRvIGFsdGVyIHRoZSByZWNpcGUgdXNpbmcgdGhlIHRlc3RfcmVjaXBlLmluYyBmaWxlIGNyZWF0ZWQgYnkgdGVzdHMuCitpbmNsdWRlIHRlc3RfcmVjaXBlLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL2FkZC1maWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL2FkZC1maWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYzk5YzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvYWRkLWZpbGUucGF0Y2gKQEAgLTAsMCArMSw4IEBACitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjA0OWI0MmUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDIgQEAKKytUZXN0IGZpbGUgMgorKzQ1NgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL2ZpbGUxIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL2ZpbGUxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NzFhYTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvZmlsZTEKQEAgLTAsMCArMSwyIEBACitGaXJzdCB0ZXN0IGZpbGUKKzEyMwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL2luc3RhbGxzY3JpcHQuc2ggYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvaW5zdGFsbHNjcmlwdC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGUzMGQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL2luc3RhbGxzY3JpcHQuc2gKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKK2VjaG8gIlRoaXJkIGZpbGUiID4gJDEvc2VsZnRlc3QtcmVwbGFjZW1lLXNjcmlwdGVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1mdW5jIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LWZ1bmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgwMmJiMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1mdW5jCkBAIC0wLDAgKzEgQEAKK0EgZmlsZSBpbnN0YWxsZWQgYnkgYSBmdW5jdGlvbiBjYWxsZWQgYnkgZG9faW5zdGFsbApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LWdsb2JmaWxlIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LWdsb2JmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NjI5OGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZ2xvYmZpbGUKQEAgLTAsMCArMSBAQAorQSBmaWxlIG1hdGNoZWQgYnkgYSBnbG9iIGluIGRvX2luc3RhbGwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC10b2Rpci1nbG9iZmlsZSBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC10b2Rpci1nbG9iZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODVhZTNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LXRvZGlyLWdsb2JmaWxlCkBAIC0wLDAgKzEgQEAKK0EgZmlsZSBtYXRjaGVkIGJ5IGEgZ2xvYiBpbiBkb19pbnN0YWxsIHRvIGEgZGlyZWN0b3J5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLW9yaWcgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLW9yaWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzZDZhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtb3JpZwpAQCAtMCwwICsxIEBACitTdHJhaWdodCB0aHJvdWdoIHdpdGggc2FtZSBuYW0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtc3JjLWdsb2JmaWxlIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL3NlbGZ0ZXN0LXJlcGxhY2VtZS1zcmMtZ2xvYmZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUyMGEyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtc3JjLWdsb2JmaWxlCkBAIC0wLDAgKzEgQEAKK0EgZmlsZSBtYXRjaGVkIGJ5IGEgZ2xvYiBpbiBTUkNfVVJJCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLXRvZGlyIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL3NlbGZ0ZXN0LXJlcGxhY2VtZS10b2RpcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWJkNWViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL3NlbGZ0ZXN0LXJlcGxhY2VtZS10b2RpcgpAQCAtMCwwICsxIEBACitGaWxlIGluIFNSQ19VUkkgaW5zdGFsbGVkIGp1c3QgdG8gZGlyZWN0b3J5IHBhdGgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zdWJkaXIvZmlsZWluc3ViZGlyIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL3N1YmRpci9maWxlaW5zdWJkaXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxNmI0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zdWJkaXIvZmlsZWluc3ViZGlyCkBAIC0wLDAgKzEgQEAKK0EgZmlsZSBpbiBhIHN1YmRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZS5iYiBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9zZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QwYTA0MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9zZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUuYmIKQEAgLTAsMCArMSw0MiBAQAorU1VNTUFSWSA9ICJUZXN0IHJlY2lwZSBmb3IgcmVjaXBldG9vbCBhcHBlbmRmaWxlIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vTUlUO21kNT0wODM1YWRlNjk4ZTBiY2Y4NTA2ZWNkYTJmN2I0ZjMwMiIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworU1JDX1VSSSA9ICJmaWxlOi8vaW5zdGFsbHNjcmlwdC5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9zZWxmdGVzdC1yZXBsYWNlbWUtb3JpZyBcCisgICAgICAgICAgIGZpbGU6Ly9zZWxmdGVzdC1yZXBsYWNlbWUtdG9kaXIgXAorICAgICAgICAgICBmaWxlOi8vZmlsZTEgXAorICAgICAgICAgICBmaWxlOi8vYWRkLWZpbGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc3ViZGlyIFwKKyAgICAgICAgICAgZmlsZTovL3NlbGZ0ZXN0LXJlcGxhY2VtZS1zcmMtZ2xvYiogXAorICAgICAgICAgICBmaWxlOi8vc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZ2xvYmZpbGUgXAorICAgICAgICAgICBmaWxlOi8vc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtdG9kaXItZ2xvYmZpbGUgXAorICAgICAgICAgICBmaWxlOi8vc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZnVuYyIKKworaW5zdGFsbF9leHRyYWZ1bmMoKSB7CisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZnVuYyAke0R9JHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1mdW5jCit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zZWxmdGVzdC1yZXBsYWNlbWUtb3JpZyAke0R9JHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtb3JpZworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS10b2RpciAke0R9JHtkYXRhZGlyfQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2ZpbGUxICR7RH0ke2RhdGFkaXJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1yZW5hbWVkCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc3ViZGlyL2ZpbGVpbnN1YmRpciAke0R9JHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtc3ViZGlyCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2VsZnRlc3QtcmVwbGFjZW1lLXNyYy1nbG9iZmlsZSAke0R9JHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtc3JjLWdsb2JmaWxlCisJY3AgJHtXT1JLRElSfS9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1nbG9iKiAke0R9JHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1nbG9iZmlsZQorCWNwICR7V09SS0RJUn0vc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtdG9kaXItZ2xvYiogJHtEfSR7ZGF0YWRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vZmlsZTIgJHtEfSR7c3lzY29uZmRpcn0vc2VsZnRlc3QtcmVwbGFjZW1lLXBhdGNoZWQKKwlzaCAke1dPUktESVJ9L2luc3RhbGxzY3JpcHQuc2ggJHtEfSR7ZGF0YWRpcn0KKwlpbnN0YWxsX2V4dHJhZnVuYworfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWVjaG8gIlRlc3QgZmlsZSBpbnN0YWxsZWQgYnkgcG9zdGluc3QiID4gJEQke2RhdGFkaXJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1wb3N0aW5zdAorfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWVfMC4xLjEuYmJhcHBlbmQgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUveGN1cnNvci10cmFuc3BhcmVudC10aGVtZV8wLjEuMS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDU3MjA5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWVfMC4xLjEuYmJhcHBlbmQKQEAgLTAsMCArMSwyIEBACisjIFRoaXMgYmJhcHBlbmQgaXMgdXNlZCB0byBhbHRlciB0aGUgcmVjaXBlIHVzaW5nIHRoZSB0ZXN0X3JlY2lwZS5pbmMgZmlsZSBjcmVhdGVkIGJ5IHRlc3RzLgoraW5jbHVkZSB0ZXN0X3JlY2lwZS5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9DT1BZSU5HLk1JVCBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9DT1BZSU5HLk1JVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjk1MGRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL0NPUFlJTkcuTUlUCkBAIC0wLDAgKzEsMTcgQEAKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgCitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCAKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIAorZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIAorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIAorVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL2NvbmYvbGF5ZXIuY29uZiBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9jb25mL2xheWVyLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNhMTYzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9jb25mL2xheWVyLmNvbmYKQEAgLTAsMCArMSwxNSBAQAorIyBXZSBoYXZlIGEgY29uZiBhbmQgY2xhc3NlcyBkaXJlY3RvcnksIGFkZCB0byBCQlBBVEgKK0JCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IgorCisjIFdlIGhhdmUgcmVjaXBlcy0qIGRpcmVjdG9yaWVzLCBhZGQgdG8gQkJGSUxFUworQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYiAke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIgorCitCQkZJTEVfQ09MTEVDVElPTlMgKz0gInNrZWxldG9uIgorQkJGSUxFX1BBVFRFUk5fc2tlbGV0b24gPSAiXiR7TEFZRVJESVJ9LyIKK0JCRklMRV9QUklPUklUWV9za2VsZXRvbiA9ICIxIgorCisjIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW5jcmVtZW50ZWQgb24gc2lnbmlmaWNhbnQgY2hhbmdlcyB0aGF0IHdpbGwKKyMgY2F1c2UgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2l0aCBvdGhlciBsYXllcnMKK0xBWUVSVkVSU0lPTl9za2VsZXRvbiA9ICIxIgorCitMQVlFUkRFUEVORFNfc2tlbGV0b24gPSAiY29yZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9jb25mL211bHRpbGliLWV4YW1wbGUuY29uZiBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9jb25mL211bHRpbGliLWV4YW1wbGUuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTZkYTdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL2NvbmYvbXVsdGlsaWItZXhhbXBsZS5jb25mCkBAIC0wLDAgKzEsMTMgQEAKKyMKKyMgU2FtcGxlIG11bHRpbGliIGNvbmZpZ3VyYXRpb24gd2hpY2ggdGhlIHVzZXIgY2FuIGVpdGhlciBhZGQgaW4gbG9jYWwuY29uZgorIyBvciBzcGVjaWZpYyBpbiBhbiBjb25maWd1cmF0aW9uIGZpbGUgbGlrZSB0aGlzLCB0aGVuIHJlcXVpcmUgaXQuCisjCisjIFRoaXMgY29uZmlndXJhdGlvbiBzcGVjaWZpZXMgYW4geDg2IDY0IGJpdCBtYWNoaW5lIGFzIHRoZSBtYWluIG1hY2hpbmUKKyMgdHlwZSBhbmQgdGhlbiBhZGRzIGEgbXVsdGlsaWIgaW4gdGhlICJsaWIzMiIgZGlyZWN0b3J5IHdoZXJlIHRob3NlCisjIGxpYnJhcmllcyBhcmUgY29tcGlsZWQgd2l0aCB0aGUgIng4NiIgdHVuZS4KKyMKKworTUFDSElORSA9ICJxZW11eDg2LTY0IgorcmVxdWlyZSBjb25mL211bHRpbGliLmNvbmYKK01VTFRJTElCUyA9ICJtdWx0aWxpYjpsaWIzMiIKK0RFRkFVTFRUVU5FX3ZpcnRjbGFzcy1tdWx0aWxpYi1saWIzMiA9ICJ4ODYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vY29uZi9tdWx0aWxpYi1leGFtcGxlMi5jb25mIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL2NvbmYvbXVsdGlsaWItZXhhbXBsZTIuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTk2ZjYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL2NvbmYvbXVsdGlsaWItZXhhbXBsZTIuY29uZgpAQCAtMCwwICsxLDEzIEBACisjCisjIFNhbXBsZSBtdWx0aWxpYiBjb25maWd1cmF0aW9uIHdoaWNoIHRoZSB1c2VyIGNhbiBlaXRoZXIgYWRkIGluIGxvY2FsLmNvbmYKKyMgb3Igc3BlY2lmaWMgaW4gYW4gY29uZmlndXJhdGlvbiBmaWxlIGxpa2UgdGhpcywgdGhlbiByZXF1aXJlIGl0LgorIworIyBUaGlzIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVzIGFuIHg4NiA2NCBiaXQgbWFjaGluZSBhcyB0aGUgbWFpbiBtYWNoaW5lCisjIHR5cGUgYW5kIHRoZW4gYWRkcyBhIG11bHRpbGliIGluIHRoZSAibGlieDMyIiBkaXJlY3Rvcnkgd2hlcmUgdGhvc2UKKyMgbGlicmFyaWVzIGFyZSBjb21waWxlZCB3aXRoIHRoZSAieDg2LTY0LXgzMiIgdHVuZS4KKyMKKworTUFDSElORSA9ICJxZW11eDg2LTY0IgorcmVxdWlyZSBjb25mL211bHRpbGliLmNvbmYKK01VTFRJTElCUyA9ICJtdWx0aWxpYjpsaWJ4MzIiCitERUZBVUxUVFVORV92aXJ0Y2xhc3MtbXVsdGlsaWItbGlieDMyID0gIng4Ni02NC14MzIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9ub19yZmtpbGwuY2ZnIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvbm9fcmZraWxsLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODQwZWNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvbm9fcmZraWxsLmNmZwpAQCAtMCwwICsxIEBACisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3hfJS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94XyUuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRjZGVmYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94XyUuYmJhcHBlbmQKQEAgLTAsMCArMSwxMiBAQAorIyBFeGFtcGxlIHVzZSBvZiBjb25maWd1cmF0aW9uIGZyYWdtZW50cyBmb3IgYnVzeWJveCwgd2hpY2ggdXNlcyB0aGUgc2FtZQorIyBtZWNoYW5pc20gYXMgdGhlIGxpbnV4LXlvY3RvIGtlcm5lbCByZWNpcGUuCisjCisjIFRoZSBlbnRyaWVzIGhlcmUgd2lsbCBvdmVycmlkZSBhbnkgZW50cmllcyBpbiB0aGUgYmFzZSBidXN5Ym94IHJlY2lwZQorIworIyBNb3JlIGRldGFpbHMgY2FuIGJlIGZvdW5kIGluIHRoZSBLZXJuZWwgRGV2IE1hbnVhbAorIyBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9jdXJyZW50L2tlcm5lbC1kZXYva2VybmVsLWRldi5odG1sI2NoYW5naW5nLXRoZS1jb25maWd1cmF0aW9uCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisKK1NSQ19VUkkgKz0gIiBcCisJICAgIGZpbGU6Ly9ub19yZmtpbGwuY2ZnIFwKKyAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2hlbGxvLW1vZC9maWxlcy9DT1BZSU5HIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2hlbGxvLW1vZC9maWxlcy9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNDU1MTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvaGVsbG8tbW9kL2ZpbGVzL0NPUFlJTkcKQEAgLTAsMCArMSwzNDAgQEAKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICAgICAgICAgICAgICAgICAgICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvaGVsbG8tbW9kL2ZpbGVzL01ha2VmaWxlIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2hlbGxvLW1vZC9maWxlcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGVkMzVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2hlbGxvLW1vZC9maWxlcy9NYWtlZmlsZQpAQCAtMCwwICsxLDE0IEBACitvYmotbSA6PSBoZWxsby5vCisKK1NSQyA6PSAkKHNoZWxsIHB3ZCkKKworYWxsOgorCSQoTUFLRSkgLUMgJChLRVJORUxfU1JDKSBNPSQoU1JDKQorCittb2R1bGVzX2luc3RhbGw6CisJJChNQUtFKSAtQyAkKEtFUk5FTF9TUkMpIE09JChTUkMpIG1vZHVsZXNfaW5zdGFsbAorCitjbGVhbjoKKwlybSAtZiAqLm8gKn4gY29yZSAuZGVwZW5kIC4qLmNtZCAqLmtvICoubW9kLmMKKwlybSAtZiBNb2R1bGUubWFya2VycyBNb2R1bGUuc3ltdmVycyBtb2R1bGVzLm9yZGVyCisJcm0gLXJmIC50bXBfdmVyc2lvbnMgTW9kdWxlcy5zeW12ZXJzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvaGVsbG8tbW9kL2ZpbGVzL2hlbGxvLmMgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvaGVsbG8tbW9kL2ZpbGVzL2hlbGxvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNjMGQzNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9oZWxsby1tb2QvZmlsZXMvaGVsbG8uYwpAQCAtMCwwICsxLDMzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICBDb3B5cmlnaHQgKEMpIDIwMTEgIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7ICB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlCisgKiAgIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07ICBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKK2ludCBpbml0X21vZHVsZSh2b2lkKQoreworCXByaW50aygiSGVsbG8gV29ybGQhXG4iKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXByaW50aygiR29vZGJ5ZSBDcnVlbCBXb3JsZCFcbiIpOworfQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvaGVsbG8tbW9kL2hlbGxvLW1vZF8wLjEuYmIgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvaGVsbG8tbW9kL2hlbGxvLW1vZF8wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE0MGIwYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9oZWxsby1tb2QvaGVsbG8tbW9kXzAuMS5iYgpAQCAtMCwwICsxLDE1IEBACitTVU1NQVJZID0gIkV4YW1wbGUgb2YgaG93IHRvIGJ1aWxkIGFuIGV4dGVybmFsIExpbnV4IGtlcm5lbCBtb2R1bGUiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTJmODg0ZDJhZTFmZjg3YzA5ZTViN2NjYzJjNGNhN2UiCisKK2luaGVyaXQgbW9kdWxlCisKK1NSQ19VUkkgPSAiZmlsZTovL01ha2VmaWxlIFwKKyAgICAgICAgICAgZmlsZTovL2hlbGxvLmMgXAorICAgICAgICAgICBmaWxlOi8vQ09QWUlORyBcCisgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0iCisKKyMgVGhlIGluaGVyaXQgb2YgbW9kdWxlLmJiY2xhc3Mgd2lsbCBhdXRvbWF0aWNhbGx5IG5hbWUgbW9kdWxlIHBhY2thZ2VzIHdpdGgKKyMgImtlcm5lbC1tb2R1bGUtIiBwcmVmaXggYXMgcmVxdWlyZWQgYnkgdGhlIG9lLWNvcmUgYnVpbGQgZW52aXJvbm1lbnQuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tLmJiIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2U0NGQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS5iYgpAQCAtMCwwICsxLDcyIEBACisjIGxpbnV4LXlvY3RvLWN1c3RvbS5iYjoKKyMKKyMgICBBbiBleGFtcGxlIGtlcm5lbCByZWNpcGUgdGhhdCB1c2VzIHRoZSBsaW51eC15b2N0byBhbmQgb2UtY29yZQorIyAgIGtlcm5lbCBjbGFzc2VzIHRvIGFwcGx5IGEgc3Vic2V0IG9mIHlvY3RvIGtlcm5lbCBtYW5hZ2VtZW50IHRvIGdpdAorIyAgIG1hbmFnZWQga2VybmVsIHJlcG9zaXRvcmllcy4KKyMKKyMgICBUbyB1c2UgbGludXgteW9jdG8tY3VzdG9tIGluIHlvdXIgbGF5ZXIsIGNvcHkgdGhpcyByZWNpcGUgKG9wdGlvbmFsbHkKKyMgICByZW5hbWUgaXQgYXMgd2VsbCkgYW5kIG1vZGlmeSBpdCBhcHByb3ByaWF0ZWx5IGZvciB5b3VyIG1hY2hpbmUuIGkuZS46CisjCisjICAgICBDT01QQVRJQkxFX01BQ0hJTkVfeW91cm1hY2hpbmUgPSAieW91cm1hY2hpbmUiCisjCisjICAgWW91IG11c3QgYWxzbyBwcm92aWRlIGEgTGludXgga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBtb3N0IGRpcmVjdAorIyAgIG1ldGhvZCBpcyB0byBjb3B5IHlvdXIgLmNvbmZpZyB0byBmaWxlcy9kZWZjb25maWcgaW4geW91ciBsYXllciwKKyMgICBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGNvcHkgKGFuZCByZW5hbWUpIG9mIHRoaXMgcmVjaXBlIGFuZAorIyAgIGFkZCBmaWxlOi8vZGVmY29uZmlnIHRvIHlvdXIgU1JDX1VSSS4KKyMKKyMgICBUbyB1c2UgdGhlIHlvY3RvIGtlcm5lbCB0b29saW5nIHRvIGdlbmVyYXRlIGEgQlNQIGNvbmZpZ3VyYXRpb24KKyMgICB1c2luZyBtb2R1bGFyIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzLCBzZWUgdGhlIHlvY3RvLWJzcCBhbmQKKyMgICB5b2N0by1rZXJuZWwgdG9vbHMgZG9jdW1lbnRhdGlvbi4KKyMKKyMgV2FybmluZzoKKyMKKyMgICBCdWlsZGluZyB0aGlzIGV4YW1wbGUgd2l0aG91dCBwcm92aWRpbmcgYSBkZWZjb25maWcgb3IgQlNQCisjICAgY29uZmlndXJhdGlvbiB3aWxsIHJlc3VsdCBpbiBidWlsZCBvciBib290IGVycm9ycy4gVGhpcyBpcyBub3QgYQorIyAgIGJ1Zy4KKyMKKyMKKyMgTm90ZXM6CisjCisjICAgcGF0Y2hlczogcGF0Y2hlcyBjYW4gYmUgbWVyZ2VkIGludG8gdG8gdGhlIHNvdXJjZSBnaXQgdHJlZSBpdHNlbGYsCisjICAgICAgICAgICAgYWRkZWQgdmlhIHRoZSBTUkNfVVJJLCBvciBjb250cm9sbGVkIHZpYSBhIEJTUAorIyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uCisjCisjICAgZGVmY29uZmlnOiBXaGVuIGEgZGVmY29uZmlnIGlzIHByb3ZpZGVkLCB0aGUgbGludXgteW9jdG8gY29uZmlndXJhdGlvbgorIyAgICAgICAgICAgICAgdXNlcyB0aGUgZmlsZW5hbWUgYXMgYSB0cmlnZ2VyIHRvIHVzZSBhICdhbGxub2NvbmZpZycgYmFzZWxpbmUKKyMgICAgICAgICAgICAgIGJlZm9yZSBtZXJnaW5nIHRoZSBkZWZjb25maWcgaW50byB0aGUgYnVpbGQuIAorIworIyAgICAgICAgICAgICAgSWYgdGhlIGRlZmNvbmZpZyBmaWxlIHdhcyBjcmVhdGVkIHdpdGggbWFrZV9zYXZlZGVmY29uZmlnLCAKKyMgICAgICAgICAgICAgIG5vdCBhbGwgb3B0aW9ucyBhcmUgc3BlY2lmaWVkLCBhbmQgc2hvdWxkIGJlIHJlc3RvcmVkIHdpdGggdGhlaXIKKyMgICAgICAgICAgICAgIGRlZmF1bHRzLCBub3Qgc2V0IHRvICduJy4gVG8gcHJvcGVybHkgZXhwYW5kIGEgZGVmY29uZmlnIGxpa2UKKyMgICAgICAgICAgICAgIHRoaXMsIHNwZWNpZnk6IEtDT05GSUdfTU9ERT0iLS1hbGxkZWZjb25maWciIGluIHRoZSBrZXJuZWwKKyMgICAgICAgICAgICAgIHJlY2lwZS4KKyMgICAKKyMgICBleGFtcGxlIGNvbmZpZ3VyYXRpb24gYWRkaXRpb246CisjICAgICAgICAgICAgU1JDX1VSSSArPSAiZmlsZTovL3NtcC5jZmciCisjICAgZXhhbXBsZSBwYXRjaCBhZGRpdGlvbiAoZm9yIGtlcm5lbCB2My40IG9ubHkpOgorIyAgICAgICAgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLWxpbnV4LXZlcnNpb24tdHdlYWsucGF0Y2gKKyMgICBleGFtcGxlIGZlYXR1cmUgYWRkaXRpb24gKGZvciBrZXJuZWwgdjMuNCBvbmx5KToKKyMgICAgICAgICAgICBTUkNfVVJJICs9ICJmaWxlOi8vZmVhdHVyZS5zY2MiCisjCisKK2luaGVyaXQga2VybmVsCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCisjIE92ZXJyaWRlIFNSQ19VUkkgaW4gYSBjb3B5IG9mIHRoaXMgcmVjaXBlIHRvIHBvaW50IGF0IGEgZGlmZmVyZW50IHNvdXJjZQorIyB0cmVlIGlmIHlvdSBkbyBub3Qgd2FudCB0byBidWlsZCBmcm9tIExpbnVzJyB0cmVlLgorU1JDX1VSSSA9ICJnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdG9ydmFsZHMvbGludXguZ2l0O3Byb3RvY29sPWdpdDtub2NoZWNrb3V0PTE7bmFtZT1tYWNoaW5lIgorCitMSU5VWF9WRVJTSU9OID89ICIzLjQiCitMSU5VWF9WRVJTSU9OX0VYVEVOU0lPTiA/PSAiLWN1c3RvbSIKKworIyBNb2RpZnkgU1JDUkVWIHRvIGEgZGlmZmVyZW50IGNvbW1pdCBoYXNoIGluIGEgY29weSBvZiB0aGlzIHJlY2lwZSB0bworIyBidWlsZCBhIGRpZmZlcmVudCByZWxlYXNlIG9mIHRoZSBMaW51eCBrZXJuZWwuCisjIHRhZzogdjMuNCA3NmUxMGQxNThlZmI2ZDQ1MTYwMTg4NDZmNjBjMmFiNTUwMTkwMGJjCitTUkNSRVZfbWFjaGluZT0iNzZlMTBkMTU4ZWZiNmQ0NTE2MDE4ODQ2ZjYwYzJhYjU1MDE5MDBiYyIKKworUFIgPSAicjEiCitQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgorCisjIE92ZXJyaWRlIENPTVBBVElCTEVfTUFDSElORSB0byBpbmNsdWRlIHlvdXIgbWFjaGluZSBpbiBhIGNvcHkgb2YgdGhpcyByZWNpcGUKKyMgZmlsZS4gTGVhdmluZyBpdCBlbXB0eSBoZXJlIGVuc3VyZXMgYW4gZWFybHkgZXhwbGljaXQgYnVpbGQgZmFpbHVyZS4KK0NPTVBBVElCTEVfTUFDSElORSA9ICIoXiQpIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS8wMDAxLWxpbnV4LXZlcnNpb24tdHdlYWsucGF0Y2ggYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tLzAwMDEtbGludXgtdmVyc2lvbi10d2Vhay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTU2MmRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS8wMDAxLWxpbnV4LXZlcnNpb24tdHdlYWsucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorRnJvbSA1YTU1OTQzYTZiYmIxMGE3OTk5NGEwYjE4MDcxYjI0MjdkZmZiMTVmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJ1Y2UgQXNoZmllbGQgPGJydWNlLmFzaGZpZWxkQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDExIEp1biAyMDEyIDE1OjMxOjQyIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGxpbnV4OiB2ZXJzaW9uIHR3ZWFrCisKK1NpZ25lZC1vZmYtYnk6IEJydWNlIEFzaGZpZWxkIDxicnVjZS5hc2hmaWVsZEB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUgfCAgICAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCBhNjg3OTYzLi5mNWIxYWMzIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMiw3ICsyLDcgQEAgVkVSU0lPTiA9IDMKKyBQQVRDSExFVkVMID0gNAorIFNVQkxFVkVMID0gMAorIEVYVFJBVkVSU0lPTiA9CistTkFNRSA9IFNhYmVyLXRvb3RoZWQgU3F1aXJyZWwKKytOQU1FID0gU2FiZXItdG9vdGhlZCBTcXVpcnJlbC1jdXN0b20KKyAKKyAjICpET0NVTUVOVEFUSU9OKgorICMgVG8gc2VlIGEgbGlzdCBvZiB0eXBpY2FsIHRhcmdldHMgZXhlY3V0ZSAibWFrZSBoZWxwIgorLS0gCisxLjcuNS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vZmVhdHVyZS5zY2MgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL2ZlYXR1cmUuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZDVhZjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL2ZlYXR1cmUuc2NjCkBAIC0wLDAgKzEgQEAKK3BhdGNoIDAwMDEtbGludXgtdmVyc2lvbi10d2Vhay5wYXRjaApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS9zbXAuY2ZnIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS9zbXAuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMjZhODYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL3NtcC5jZmcKQEAgLTAsMCArMSBAQAorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLW11bHRpbGliL2ltYWdlcy9jb3JlLWltYWdlLW11bHRpbGliLWV4YW1wbGUuYmIgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1tdWx0aWxpYi9pbWFnZXMvY29yZS1pbWFnZS1tdWx0aWxpYi1leGFtcGxlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMzE4NmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1tdWx0aWxpYi9pbWFnZXMvY29yZS1pbWFnZS1tdWx0aWxpYi1leGFtcGxlLmJiCkBAIC0wLDAgKzEsMTMgQEAKKyMKKyMgQW4gZXhhbXBsZSBvZiBhIG11bHRpbGliIGltYWdlCisjCisjIFRoaXMgZXhhbXBsZSBpbmNsdWRlcyBhIGxpYjMyIHZlcnNpb24gb2YgYmFzaCBpbnRvIGFuIG90aGVyd2lzZSBzdGFuZGFyZAorIyBzYXRvIGltYWdlLiBJdCBhc3N1bWVzIGEgImxpYjMyIiBtdWx0aWxpYiBoYXMgYmVlbiBlbmFibGVkIGluIHRoZSB1c2VyJ3MKKyMgY29uZmlndXJhdGlvbiAoc2VlIHRoZSBleGFtcGxlIGNvbmYgZmlsZXMgZm9yIGV4YW1wbGVzIG9mIHRoaXMuKQorIworCisjIEZpcnN0IGluY2x1ZGUgYSBiYXNlIGltYWdlIHRvIGJhc2UgdGhpbmdzIG9mZgorcmVxdWlyZSByZWNpcGVzLXNhdG8vaW1hZ2VzL2NvcmUtaW1hZ2Utc2F0by5iYgorCisjIE5vdyBhZGQgdGhlIG11bHRpbGliIHBhY2thZ2VzIHdlIHdhbnQgdG8gaW5zdGFsbAorSU1BR0VfSU5TVEFMTCArPSAibGliMzItYmFzaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3NlcnZpY2Uvc2VydmljZS9DT1BZUklHSFQgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi9zZXJ2aWNlL3NlcnZpY2UvQ09QWVJJR0hUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjM2UxNzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi9zZXJ2aWNlL3NlcnZpY2UvQ09QWVJJR0hUCkBAIC0wLDAgKzEsMTUgQEAKK1N5c3Zpbml0IGlzIENvcHlyaWdodCAoQykgMTk5MS0yMDA0IE1pcXVlbCB2YW4gU21vb3JlbmJ1cmcKKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSBVU0EKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3NlcnZpY2Uvc2VydmljZS9za2VsZXRvbiBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3NlcnZpY2Uvc2VydmljZS9za2VsZXRvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2VkYzlkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vc2VydmljZS9zZXJ2aWNlL3NrZWxldG9uCkBAIC0wLDAgKzEsMTkzIEBACisjISAvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBza2VsZXRvbgorIyBSZXF1aXJlZC1TdGFydDogICAgJGxvY2FsX2ZzCisjIFNob3VsZC1TdGFydDoKKyMgUmVxdWlyZWQtU3RvcDogICAgICRsb2NhbF9mcworIyBTaG91bGQtU3RvcDoKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBFeGFtcGxlIGluaXRzY3JpcHQKKyMgRGVzY3JpcHRpb246ICAgICAgIFRoaXMgZmlsZSBzaG91bGQgYmUgdXNlZCB0byBjb25zdHJ1Y3Qgc2NyaXB0cyB0byBiZQorIyAgICAgICAgICAgICAgICAgICAgcGxhY2VkIGluIC9ldGMvaW5pdC5kCisjIyMgRU5EIElOSVQgSU5GTworCisjIFRoZSBkZWZpbml0aW9uIG9mIGFjdGlvbnM6IChGcm9tIExTQiAzLjEuMCkKKyMgc3RhcnQgICAgICAgICBzdGFydCB0aGUgc2VydmljZQorIyBzdG9wICAgICAgICAgIHN0b3AgdGhlIHNlcnZpY2UKKyMgcmVzdGFydCAgICAgICBzdG9wIGFuZCByZXN0YXJ0IHRoZSBzZXJ2aWNlIGlmIHRoZSBzZXJ2aWNlIGlzIGFscmVhZHkgcnVubmluZywKKyMgICAgICAgICAgICAgICBvdGhlcndpc2Ugc3RhcnQgdGhlIHNlcnZpY2UKKyMgdHJ5LXJlc3RhcnQJcmVzdGFydCB0aGUgc2VydmljZSBpZiB0aGUgc2VydmljZSBpcyBhbHJlYWR5IHJ1bm5pbmcKKyMgcmVsb2FkCWNhdXNlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBzZXJ2aWNlIHRvIGJlIHJlbG9hZGVkIHdpdGhvdXQKKyMgICAgICAgICAgICAgICBhY3R1YWxseSBzdG9wcGluZyBhbmQgcmVzdGFydGluZyB0aGUgc2VydmljZQorIyBmb3JjZS1yZWxvYWQJY2F1c2UgdGhlIGNvbmZpZ3VyYXRpb24gdG8gYmUgcmVsb2FkZWQgaWYgdGhlIHNlcnZpY2Ugc3VwcG9ydHMKKyMgICAgICAgICAgICAgICB0aGlzLCBvdGhlcndpc2UgcmVzdGFydCB0aGUgc2VydmljZSBpZiBpdCBpcyBydW5uaW5nCisjIHN0YXR1cwlwcmludCB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHNlcnZpY2UKKworIyBUaGUgc3RhcnQsIHN0b3AsIHJlc3RhcnQsIGZvcmNlLXJlbG9hZCwgYW5kIHN0YXR1cyBhY3Rpb25zIHNoYWxsIGJlIHN1cHBvcnRlZAorIyBieSBhbGwgaW5pdCBzY3JpcHRzOyB0aGUgcmVsb2FkIGFuZCB0aGUgdHJ5LXJlc3RhcnQgYWN0aW9ucyBhcmUgb3B0aW9uYWwKKworIyBDb21tb24gc3RlcHMgdG8gY29udmVydCB0aGlzIHNrZWxldG9uIGludG8gYSByZWFsIGluaXQgc2NyaXB0CisjIDEpIGNwIHNrZWxldG9uIDx0aGVfcmVhbF9uYW1lPgorIyAyKSBTZXQgREVTQyBhbmQgTkFNRQorIyAzKSBDaGVjayB3aGV0aGVyIHRoZSBkYWVtb24gYXBwIGlzIC91c3Ivc2Jpbi8kTkFNRSwgaWYgbm90LCBzZXQgaXQuCisjIDQpIFNldCBEQUVNT05fQVJHUyBpZiB0aGVyZSBpcyBhbnkKKyMgNSkgUmVtb3ZlIHRoZSB1c2VsZXNzIGNvZGUKKworIyBOT1RFOiBUaGUgc2tlbGV0b24gZG9lc24ndCBzdXBwb3J0IHRoZSBkYWVtb24gd2hpY2ggaXMgYSBzY3JpcHQgdW5sZXNzIHRoZQorIyAgICAgICBwaWRvZiBzdXBwb3J0cyAiLXgiIG9wdGlvbiwgcGxlYXNlIHNlZSBtb3JlIGNvbW1lbnRzIGZvciBwaWRvZnByb2MgKCkKKyMgICAgICAgaW4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKKyMgUEFUSCBzaG91bGQgb25seSBpbmNsdWRlIC91c3IvKiBpZiBpdCBydW5zIGFmdGVyIHRoZSBtb3VudG5mcy5zaCBzY3JpcHQKK1BBVEg9L3NiaW46L3Vzci9zYmluOi9iaW46L3Vzci9iaW4KKworREVTQz0ic2tlbGV0b24iCitOQU1FPSJza2VsZXRvbi10ZXN0IgorREFFTU9OPS91c3Ivc2Jpbi8kTkFNRQorREFFTU9OX0FSR1M9IiIKK1BJREZJTEU9L3Zhci9ydW4vJE5BTUUucGlkCisKKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zIHx8IGV4aXQgMQorCisjIEV4aXQgaWYgdGhlIHBhY2thZ2UgaXMgbm90IGluc3RhbGxlZAorWyAteCAiJERBRU1PTiIgXSB8fCBleGl0IDAKKworIyBSZWFkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZmlsZSBpZiBpdCBpcyBwcmVzZW50CitbIC1yIC9ldGMvZGVmYXVsdC8kTkFNRSBdICYmIC4gL2V0Yy9kZWZhdWx0LyROQU1FCisKKyMKKyMgRnVuY3Rpb24gdGhhdCBzdGFydHMgdGhlIGRhZW1vbi9zZXJ2aWNlCisjCitkb19zdGFydCgpIHsKKwlsb2NhbCBzdGF0dXMgcGlkCisKKwlzdGF0dXM9MAorCXBpZD1gcGlkb2Zwcm9jICROQU1FYCB8fCBzdGF0dXM9JD8KKwljYXNlICRzdGF0dXMgaW4KKwkwKQorCQllY2hvICIkREVTQyBhbHJlYWR5IHJ1bm5pbmcgKCRwaWQpLiIKKwkJZXhpdCAxCisJCTs7CisJKikKKwkJZWNobyAiU3RhcnRpbmcgJERFU0MgLi4uIgorCQlleGVjICREQUVNT04gJERBRU1PTl9BUkdTID4vZGV2L251bGwgMj4mMSB8fCBzdGF0dXM9JD8KKwkJZWNobyAiRVJST1I6IEZhaWxlZCB0byBzdGFydCAkREVTQy4iCisJCWV4aXQgJHN0YXR1cworCQk7OworCWVzYWMKKworCSMgQWRkIGNvZGUgaGVyZSwgaWYgbmVjZXNzYXJ5LCB0aGF0IHdhaXRzIGZvciB0aGUgcHJvY2VzcyB0byBiZSByZWFkeQorCSMgdG8gaGFuZGxlIHJlcXVlc3RzIGZyb20gc2VydmljZXMgc3RhcnRlZCBzdWJzZXF1ZW50bHkgd2hpY2ggZGVwZW5kCisJIyBvbiB0aGlzIG9uZS4gIEFzIGEgbGFzdCByZXNvcnQsIHNsZWVwIGZvciBzb21lIHRpbWUuCit9CisKKyMKKyMgRnVuY3Rpb24gdGhhdCBzdG9wcyB0aGUgZGFlbW9uL3NlcnZpY2UKKyMKK2RvX3N0b3AoKSB7CisJbG9jYWwgcGlkIHN0YXR1cworCisJc3RhdHVzPTAKKwlwaWQ9YHBpZG9mcHJvYyAkTkFNRWAgfHwgc3RhdHVzPSQ/CisJY2FzZSAkc3RhdHVzIGluCisJMCkKKwkJIyBFeGl0IHdoZW4gZmFpbCB0byBzdG9wLCB0aGUga2lsbCB3b3VsZCBjb21wbGFpbiB3aGVuIGZhaWwKKwkJa2lsbCAtcyAxNSAkcGlkID4vZGV2L251bGwgJiYgcm0gLWYgJFBJREZJTEUgJiYgXAorCQkJZWNobyAiU3RvcHBlZCAkREVTQyAoJHBpZCkuIiB8fCBleGl0ICQ/CisJCTs7CisJKikKKwkJZWNobyAiJERFU0MgaXMgbm90IHJ1bm5pbmc7IG5vbmUga2lsbGVkLiIgPiYyCisJCTs7CisJZXNhYworCisJIyBXYWl0IGZvciBjaGlsZHJlbiB0byBmaW5pc2ggdG9vIGlmIHRoaXMgaXMgYSBkYWVtb24gdGhhdCBmb3JrcworCSMgYW5kIGlmIHRoZSBkYWVtb24gaXMgb25seSBldmVyIHJ1biBmcm9tIHRoaXMgaW5pdHNjcmlwdC4KKwkjIElmIHRoZSBhYm92ZSBjb25kaXRpb25zIGFyZSBub3Qgc2F0aXNmaWVkIHRoZW4gYWRkIHNvbWUgb3RoZXIgY29kZQorCSMgdGhhdCB3YWl0cyBmb3IgdGhlIHByb2Nlc3MgdG8gZHJvcCBhbGwgcmVzb3VyY2VzIHRoYXQgY291bGQgYmUKKwkjIG5lZWRlZCBieSBzZXJ2aWNlcyBzdGFydGVkIHN1YnNlcXVlbnRseS4gIEEgbGFzdCByZXNvcnQgaXMgdG8KKwkjIHNsZWVwIGZvciBzb21lIHRpbWUuCisJcmV0dXJuICRzdGF0dXMKK30KKworIworIyBGdW5jdGlvbiB0aGF0IHNlbmRzIGEgU0lHSFVQIHRvIHRoZSBkYWVtb24vc2VydmljZQorIworZG9fcmVsb2FkKCkgeworCWxvY2FsIHBpZCBzdGF0dXMKKworCXN0YXR1cz0wCisgICAgICAgICMgSWYgdGhlIGRhZW1vbiBjYW4gcmVsb2FkIGl0cyBjb25maWd1cmF0aW9uIHdpdGhvdXQKKyAgICAgICAgIyByZXN0YXJ0aW5nIChmb3IgZXhhbXBsZSwgd2hlbiBpdCBpcyBzZW50IGEgU0lHSFVQKSwKKyAgICAgICAgIyB0aGVuIGltcGxlbWVudCB0aGF0IGhlcmUuCisJcGlkPWBwaWRvZnByb2MgJE5BTUVgIHx8IHN0YXR1cz0kPworCWNhc2UgJHN0YXR1cyBpbgorCTApCisJCWVjaG8gIlJlbG9hZGluZyAkREVTQyAuLi4iCisJCWtpbGwgLXMgMSAkcGlkIHx8IGV4aXQgJD8KKwkJOzsKKwkqKQorCQllY2hvICIkREVTQyBpcyBub3QgcnVubmluZzsgbm9uZSByZWxvYWRlZC4iID4mMgorCQk7OworCWVzYWMKKwlleGl0ICRzdGF0dXMKK30KKworCisjCisjIEZ1bmN0aW9uIHRoYXQgc2hvd3MgdGhlIGRhZW1vbi9zZXJ2aWNlIHN0YXR1cworIworc3RhdHVzX29mX3Byb2MgKCkgeworCWxvY2FsIHBpZCBzdGF0dXMKKworCXN0YXR1cz0wCisJIyBwaWRvZiBvdXRwdXQgbnVsbCB3aGVuIG5vIHByb2dyYW0gaXMgcnVubmluZywgc28gbm8gIjI+L2Rldi9udWxsIi4KKwlwaWQ9YHBpZG9mcHJvYyAkTkFNRWAgfHwgc3RhdHVzPSQ/CisJY2FzZSAkc3RhdHVzIGluCisJMCkKKwkJZWNobyAiJERFU0MgaXMgcnVubmluZyAoJHBpZCkuIgorCQlleGl0IDAKKwkJOzsKKwkqKQorCQllY2hvICIkREVTQyBpcyBub3QgcnVubmluZy4iID4mMgorCQlleGl0ICRzdGF0dXMKKwkJOzsKKwllc2FjCit9CisKK2Nhc2UgIiQxIiBpbgorc3RhcnQpCisJZG9fc3RhcnQKKwk7Oworc3RvcCkKKwlkb19zdG9wIHx8IGV4aXQgJD8KKwk7Oworc3RhdHVzKQorCXN0YXR1c19vZl9wcm9jCisJOzsKK3Jlc3RhcnQpCisJIyBBbHdheXMgc3RhcnQgdGhlIHNlcnZpY2UgcmVnYXJkbGVzcyB0aGUgc3RhdHVzIG9mIGRvX3N0b3AKKwlkb19zdG9wCisJZG9fc3RhcnQKKwk7OwordHJ5LXJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorCSMgZm9yY2UtcmVsb2FkIGlzIHRoZSBzYW1lIGFzIHJlbG9hZCBvciB0cnktcmVzdGFydCBhY2NvcmRpbmcKKwkjIHRvIGl0cyBkZWZpbml0aW9uLCB0aGUgcmVsb2FkIGlzIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzbworCSMgZm9yY2UtcmVsb2FkIGlzIHRoZSBhbGlhcyBvZiB0cnktcmVzdGFydCBoZXJlLCBidXQgaXQgc2hvdWxkCisJIyBiZSB0aGUgYWxpYXMgb2YgcmVsb2FkIGlmIHJlbG9hZCBpcyBpbXBsZW1lbnRlZC4KKwkjCisJIyBPbmx5IHN0YXJ0IHRoZSBzZXJ2aWNlIHdoZW4gZG9fc3RvcCBzdWNjZWVkcworCWRvX3N0b3AgJiYgZG9fc3RhcnQKKwk7OworI3JlbG9hZCkKKwkjIElmIHRoZSAicmVsb2FkIiBhY3Rpb24gaXMgaW1wbGVtZW50ZWQgcHJvcGVybHksIHRoZW4gbGV0IHRoZQorCSMgZm9yY2UtcmVsb2FkIGJlIHRoZSBhbGlhcyBvZiByZWxvYWQsIGFuZCByZW1vdmUgaXQgZnJvbQorCSMgdHJ5LXJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorCSMKKwkjZG9fcmVsb2FkCisJIzs7CisqKQorCWVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydHx0cnktcmVzdGFydHxmb3JjZS1yZWxvYWR9IiA+JjIKKwlleGl0IDMKKwk7OworZXNhYworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi9zZXJ2aWNlL3NlcnZpY2Uvc2tlbGV0b25fdGVzdC5jIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vc2VydmljZS9zZXJ2aWNlL3NrZWxldG9uX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmM2N2FjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vc2VydmljZS9zZXJ2aWNlL3NrZWxldG9uX3Rlc3QuYwpAQCAtMCwwICsxLDEyIEBACisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKy8qIFRoaXMgZGVtbyBkb2VzIG5vdGhpbmcgZXhjZXB0IGZvciB0ZXN0aW5nIC9ldGMvaW5pdC5kL3NrZWxldG9uICovCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZGFlbW9uKDAsIDApOworCXdoaWxlICgxKSB7CisJCXNsZWVwKDEpOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3NlcnZpY2Uvc2VydmljZV8wLjEuYmIgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi9zZXJ2aWNlL3NlcnZpY2VfMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1Y2Q3YTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi9zZXJ2aWNlL3NlcnZpY2VfMC4xLmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiVGhlIGNhbm9uaWNhbCBleGFtcGxlIG9mIGluaXQgc2NyaXB0cyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke1dPUktESVJ9L0NPUFlSSUdIVDttZDU9MzQ5Yzg3MmUwMDY2MTU1ZTE4MThiNzg2OTM4ODc2YTQiCisKK1NSQ19VUkkgPSAiZmlsZTovL3NrZWxldG9uIFwKKwkgICBmaWxlOi8vc2tlbGV0b25fdGVzdC5jIFwKKwkgICBmaWxlOi8vQ09QWVJJR0hUIFwKKwkgICAiCisKK2RvX2NvbXBpbGUgKCkgeworCSR7Q0N9ICR7V09SS0RJUn0vc2tlbGV0b25fdGVzdC5jIC1vICR7V09SS0RJUn0vc2tlbGV0b24tdGVzdAorfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWNhdCAke1dPUktESVJ9L3NrZWxldG9uIHwgXAorCSAgc2VkIC1lICdzLC9ldGMsJHtzeXNjb25mZGlyfSxnJyBcCisJICAgICAgLWUgJ3MsL3Vzci9zYmluLCR7c2JpbmRpcn0sZycgXAorCSAgICAgIC1lICdzLC92YXIsJHtsb2NhbHN0YXRlZGlyfSxnJyBcCisJICAgICAgLWUgJ3MsL3Vzci9iaW4sJHtiaW5kaXJ9LGcnIFwKKwkgICAgICAtZSAncywvdXNyLCR7cHJlZml4fSxnJyA+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9za2VsZXRvbgorCWNobW9kIGEreCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvc2tlbGV0b24KKworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9za2VsZXRvbi10ZXN0ICR7RH0ke3NiaW5kaXJ9LworfQorCitSREVQRU5EU18ke1BOfSA9ICJpbml0c2NyaXB0cyIKKworQ09ORkZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9za2VsZXRvbiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3VzZXJhZGQvdXNlcmFkZC1leGFtcGxlLmJiIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vdXNlcmFkZC91c2VyYWRkLWV4YW1wbGUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNjMDJkNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3VzZXJhZGQvdXNlcmFkZC1leGFtcGxlLmJiCkBAIC0wLDAgKzEsNzYgQEAKK1NVTU1BUlkgPSAiRXhhbXBsZSByZWNpcGUgZm9yIHVzaW5nIGluaGVyaXQgdXNlcmFkZCIKK0RFU0NSSVBUSU9OID0gIlRoaXMgcmVjaXBlIHNlcnZlcyBhcyBhbiBleGFtcGxlIGZvciB1c2luZyBmZWF0dXJlcyBmcm9tIHVzZXJhZGQuYmJjbGFzcyIKK1NFQ1RJT04gPSAiZXhhbXBsZXMiCitQUiA9ICJyMSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1NSQ19VUkkgPSAiZmlsZTovL2ZpbGUxIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbGUyIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbGUzIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbGU0IgorCitTID0gIiR7V09SS0RJUn0iCisKK1BBQ0tBR0VTID0rICIke1BOfS11c2VyMyIKKworaW5oZXJpdCB1c2VyYWRkCisKKyMgWW91IG11c3Qgc2V0IFVTRVJBRERfUEFDS0FHRVMgd2hlbiB5b3UgaW5oZXJpdCB1c2VyYWRkLiBUaGlzCisjIGxpc3RzIHdoaWNoIG91dHB1dCBwYWNrYWdlcyB3aWxsIGluY2x1ZGUgdGhlIHVzZXIvZ3JvdXAKKyMgY3JlYXRpb24gY29kZS4KK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0gJHtQTn0tdXNlcjMiCisKKyMgWW91IG11c3QgYWxzbyBzZXQgVVNFUkFERF9QQVJBTSBhbmQvb3IgR1JPVVBBRERfUEFSQU0gd2hlbgorIyB5b3UgaW5oZXJpdCB1c2VyYWRkLgorCisjIFVTRVJBRERfUEFSQU0gc3BlY2lmaWVzIGNvbW1hbmQgbGluZSBvcHRpb25zIHRvIHBhc3MgdG8gdGhlCisjIHVzZXJhZGQgY29tbWFuZC4gTXVsdGlwbGUgdXNlcnMgY2FuIGJlIGNyZWF0ZWQgYnkgc2VwYXJhdGluZworIyB0aGUgY29tbWFuZHMgd2l0aCBhIHNlbWljb2xvbi4gSGVyZSB3ZSdsbCBjcmVhdGUgdHdvIHVzZXJzLAorIyB1c2VyMSBhbmQgdXNlcjI6CitVU0VSQUREX1BBUkFNXyR7UE59ID0gIi11IDEyMDAgLWQgL2hvbWUvdXNlcjEgLXIgLXMgL2Jpbi9iYXNoIHVzZXIxOyAtdSAxMjAxIC1kIC9ob21lL3VzZXIyIC1yIC1zIC9iaW4vYmFzaCB1c2VyMiIKKworIyB1c2VyMyB3aWxsIGJlIG1hbmFnZWQgaW4gdGhlIHVzZXJhZGQtZXhhbXBsZS11c2VyMyBwYWNha2dlOgorIyBBcyBhbiBleGFtcGxlLCB3ZSB1c2UgdGhlIC1QIG9wdGlvbiB0byBzZXQgY2xlYXIgdGV4dCBwYXNzd29yZCBmb3IgdXNlcjMKK1VTRVJBRERfUEFSQU1fJHtQTn0tdXNlcjMgPSAiLXUgMTIwMiAtZCAvaG9tZS91c2VyMyAtciAtcyAvYmluL2Jhc2ggLVAgJ3VzZXIzJyB1c2VyMyIKKworIyBHUk9VUEFERF9QQVJBTSB3b3JrcyB0aGUgc2FtZSB3YXksIHdoaWNoIHlvdSBzZXQgdG8gdGhlIG9wdGlvbnMKKyMgeW91J2Qgbm9ybWFsbHkgcGFzcyB0byB0aGUgZ3JvdXBhZGQgY29tbWFuZC4gVGhpcyB3aWxsIGNyZWF0ZQorIyBncm91cHMgZ3JvdXAxIGFuZCBncm91cDI6CitHUk9VUEFERF9QQVJBTV8ke1BOfSA9ICItZyA4ODAgZ3JvdXAxOyAtZyA4OTAgZ3JvdXAyIgorCisjIExpa2V3aXNlLCB3ZSdsbCBtYW5hZ2UgZ3JvdXAzIGluIHRoZSB1c2VyYWRkLWV4YW1wbGUtdXNlcjMgcGFja2FnZToKK0dST1VQQUREX1BBUkFNXyR7UE59LXVzZXIzID0gIi1nIDkwMCBncm91cDMiCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgLW0gNzU1ICR7RH0ke2RhdGFkaXJ9L3VzZXIxCisJaW5zdGFsbCAtZCAtbSA3NTUgJHtEfSR7ZGF0YWRpcn0vdXNlcjIKKwlpbnN0YWxsIC1kIC1tIDc1NSAke0R9JHtkYXRhZGlyfS91c2VyMworCisJaW5zdGFsbCAtcCAtbSA2NDQgZmlsZTEgJHtEfSR7ZGF0YWRpcn0vdXNlcjEvCisJaW5zdGFsbCAtcCAtbSA2NDQgZmlsZTIgJHtEfSR7ZGF0YWRpcn0vdXNlcjEvCisKKwlpbnN0YWxsIC1wIC1tIDY0NCBmaWxlMiAke0R9JHtkYXRhZGlyfS91c2VyMi8KKwlpbnN0YWxsIC1wIC1tIDY0NCBmaWxlMyAke0R9JHtkYXRhZGlyfS91c2VyMi8KKworCWluc3RhbGwgLXAgLW0gNjQ0IGZpbGUzICR7RH0ke2RhdGFkaXJ9L3VzZXIzLworCWluc3RhbGwgLXAgLW0gNjQ0IGZpbGU0ICR7RH0ke2RhdGFkaXJ9L3VzZXIzLworCisJIyBUaGUgbmV3IHVzZXJzIGFuZCBncm91cHMgYXJlIGNyZWF0ZWQgYmVmb3JlIHRoZSBkb19pbnN0YWxsCisJIyBzdGVwLCBzbyB5b3UgYXJlIG5vdyBmcmVlIHRvIG1ha2UgdXNlIG9mIHRoZW06CisJY2hvd24gLVIgdXNlcjEgJHtEfSR7ZGF0YWRpcn0vdXNlcjEKKwljaG93biAtUiB1c2VyMiAke0R9JHtkYXRhZGlyfS91c2VyMgorCWNob3duIC1SIHVzZXIzICR7RH0ke2RhdGFkaXJ9L3VzZXIzCisKKwljaGdycCAtUiBncm91cDEgJHtEfSR7ZGF0YWRpcn0vdXNlcjEKKwljaGdycCAtUiBncm91cDIgJHtEfSR7ZGF0YWRpcn0vdXNlcjIKKwljaGdycCAtUiBncm91cDMgJHtEfSR7ZGF0YWRpcn0vdXNlcjMKK30KKworRklMRVNfJHtQTn0gPSAiJHtkYXRhZGlyfS91c2VyMS8qICR7ZGF0YWRpcn0vdXNlcjIvKiIKK0ZJTEVTXyR7UE59LXVzZXIzID0gIiR7ZGF0YWRpcn0vdXNlcjMvKiIKKworIyBQcmV2ZW50cyBkb19wYWNrYWdlIGZhaWx1cmVzIHdpdGg6CisjIGRlYnVnc291cmNlcy5saXN0OiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5OgorSU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUID0gIjEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi91c2VyYWRkL3VzZXJhZGQtZXhhbXBsZS9maWxlMSBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3VzZXJhZGQvdXNlcmFkZC1leGFtcGxlL2ZpbGUxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi91c2VyYWRkL3VzZXJhZGQtZXhhbXBsZS9maWxlMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vdXNlcmFkZC91c2VyYWRkLWV4YW1wbGUvZmlsZTIgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi91c2VyYWRkL3VzZXJhZGQtZXhhbXBsZS9maWxlMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vdXNlcmFkZC91c2VyYWRkLWV4YW1wbGUvZmlsZTIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3VzZXJhZGQvdXNlcmFkZC1leGFtcGxlL2ZpbGUzIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vdXNlcmFkZC91c2VyYWRkLWV4YW1wbGUvZmlsZTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3VzZXJhZGQvdXNlcmFkZC1leGFtcGxlL2ZpbGUzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi91c2VyYWRkL3VzZXJhZGQtZXhhbXBsZS9maWxlNCBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3VzZXJhZGQvdXNlcmFkZC1leGFtcGxlL2ZpbGU0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi91c2VyYWRkL3VzZXJhZGQtZXhhbXBsZS9maWxlNApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL2xheWVyLmNvbmYgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbGF5ZXIuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGRiY2E2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL2xheWVyLmNvbmYKQEAgLTAsMCArMSwxMSBAQAorIyBXZSBoYXZlIGEgY29uZiBhbmQgY2xhc3NlcyBkaXJlY3RvcnksIGFkZCB0byBCQlBBVEgKK0JCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IgorCisjIFdlIGhhdmUgcmVjaXBlcy0qIGRpcmVjdG9yaWVzLCBhZGQgdG8gQkJGSUxFUworQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYiBcCisgICAgICAgICAgICAke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIgorCitCQkZJTEVfQ09MTEVDVElPTlMgKz0gInlvY3RvYnNwIgorQkJGSUxFX1BBVFRFUk5feW9jdG9ic3AgPSAiXiR7TEFZRVJESVJ9LyIKK0JCRklMRV9QUklPUklUWV95b2N0b2JzcCA9ICI1IgorTEFZRVJWRVJTSU9OX3lvY3RvYnNwID0gIjMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9iZWFnbGVib25lLmNvbmYgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9iZWFnbGVib25lLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRhZWJmMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2JlYWdsZWJvbmUuY29uZgpAQCAtMCwwICsxLDM5IEBACisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRTogQmVhZ2xlYm9uZSBtYWNoaW5lCisjQERFU0NSSVBUSU9OOiBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZm9yIGh0dHA6Ly9iZWFnbGVib2FyZC5vcmcvYm9uZSBhbmQgaHR0cDovL2JlYWdsZWJvYXJkLm9yZy9ibGFjayBib2FyZHMKKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwveHNlcnZlciA/PSAieHNlcnZlci14b3JnIgorWFNFUlZFUiA/PSAieHNlcnZlci14b3JnIFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1ldmRldiBcCisgICAgICAgICAgIHhmODYtaW5wdXQtbW91c2UgXAorICAgICAgICAgICB4Zjg2LXZpZGVvLWZiZGV2IFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1rZXlib2FyZCIKKworTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyA9ICIga2VybmVsLW1vZHVsZXMga2VybmVsLWRldmljZXRyZWUiCisKK0VYVFJBX0lNQUdFREVQRU5EUyArPSAidS1ib290IgorCitERUZBVUxUVFVORSA/PSAiY29ydGV4YThoZi1uZW9uIgoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE4LmluYworCitJTUFHRV9GU1RZUEVTICs9ICJ0YXIuYnoyIGpmZnMyIgorRVhUUkFfSU1BR0VDTURfamZmczIgPSAiLWxucCAiCisKK1NFUklBTF9DT05TT0xFID0gIjExNTIwMCB0dHlPMCIKKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJsaW51eC15b2N0byIKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvID89ICIzLjE5JSIKKworS0VSTkVMX0lNQUdFVFlQRSA9ICJ6SW1hZ2UiCitLRVJORUxfREVWSUNFVFJFRSA9ICJhbTMzNXgtYm9uZS5kdGIgYW0zMzV4LWJvbmVibGFjay5kdGIiCitLRVJORUxfRVhUUkFfQVJHUyArPSAiTE9BREFERFI9JHtVQk9PVF9FTlRSWVBPSU5UfSIKKworU1BMX0JJTkFSWSA9ICJNTE8iCitVQk9PVF9TVUZGSVggPSAiaW1nIgorVUJPT1RfTUFDSElORSA9ICJhbTMzNXhfZXZtX2NvbmZpZyIKK1VCT09UX0VOVFJZUE9JTlQgPSAiMHg4MDAwODAwMCIKK1VCT09UX0xPQURBRERSRVNTID0gIjB4ODAwMDgwMDAiCisKK01BQ0hJTkVfRkVBVFVSRVMgPSAidXNiZ2FkZ2V0IHVzYmhvc3QgdmZhdCBhbHNhIgorCitJTUFHRV9CT09UX0ZJTEVTID89ICJ1LWJvb3QuJHtVQk9PVF9TVUZGSVh9IE1MTyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2VkZ2Vyb3V0ZXIuY29uZiBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2VkZ2Vyb3V0ZXIuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWVmMjM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvZWRnZXJvdXRlci5jb25mCkBAIC0wLDAgKzEsMjIgQEAKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiBFZGdlcm91dGVyCisjQERFU0NSSVBUSU9OOiBFZGdlcm91dGVyCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzNjQuaW5jCisKK01BQ0hJTkVfRkVBVFVSRVMgPSAicGNpIGV4dDIgZXh0MyBzZXJpYWwiCisKK0tFUk5FTF9JTUFHRVRZUEUgPSAidm1saW51eCIKK0tFUk5FTF9BTFRfSU1BR0VUWVBFID0gInZtbGludXguYmluIgorS0VSTkVMX0lNQUdFX1NUUklQX0VYVFJBX1NFQ1RJT05TICA9ICIuY29tbWVudCIKKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJsaW51eC15b2N0byIKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvID89ICIzLjE5JSIKKworU0VSSUFMX0NPTlNPTEUgPSAiMTE1MjAwIHR0eVMwIgorVVNFX1ZUID89ICIwIgorCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTID0gIiBrZXJuZWwtbW9kdWxlcyIKKworSU1BR0VfRlNUWVBFUyA/PSAiamZmczIgdGFyLmJ6MiIKK0pGRlMyX0VSQVNFQkxPQ0sgPSAiMHgxMDAwMCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2dlbmVyaWN4ODYtNjQuY29uZiBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2dlbmVyaWN4ODYtNjQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzZlMzVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvZ2VuZXJpY3g4Ni02NC5jb25mCkBAIC0wLDAgKzEsOCBAQAorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IEdlbmVyaWMgWDg2XzY0LgorCisjQERFU0NSSVBUSU9OOiBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZm9yIGdlbmVyaWMgWDg2XzY0ICg2NC1iaXQpIFBDcyBhbmQgc2VydmVycy4gU3VwcG9ydHMgYSBtb2RlcmF0ZWx5IHdpZGUgcmFuZ2Ugb2YgZHJpdmVycyB0aGF0IHNob3VsZCBib290IGFuZCBiZSB1c2FibGUgb24gInR5cGljYWwiIGhhcmR3YXJlLgorCitERUZBVUxUVFVORSA/PSAiY29yZTItNjQiCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZTIuaW5jCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2dlbmVyaWN4ODYtY29tbW9uLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvZ2VuZXJpY3g4Ni5jb25mIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvZ2VuZXJpY3g4Ni5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NDJjYWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9nZW5lcmljeDg2LmNvbmYKQEAgLTAsMCArMSw4IEBACisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRTogR2VuZXJpYyBYODYuCisKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3IgZ2VuZXJpYyBYODYgKDMyLWJpdCkgUENzLiBTdXBwb3J0cyBhIG1vZGVyYXRlbHkgd2lkZSByYW5nZSBvZiBkcml2ZXJzIHRoYXQgc2hvdWxkIGJvb3QgYW5kIGJlIHVzYWJsZSBvbiAidHlwaWNhbCIgaGFyZHdhcmUuCisKK0RFRkFVTFRUVU5FID89ICJjb3JlMi0zMiIKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlMi5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvZ2VuZXJpY3g4Ni1jb21tb24uaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9pbmNsdWRlL2dlbmVyaWN4ODYtY29tbW9uLmluYyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2luY2x1ZGUvZ2VuZXJpY3g4Ni1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMTBiNTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9pbmNsdWRlL2dlbmVyaWN4ODYtY29tbW9uLmluYwpAQCAtMCwwICsxLDIwIEBACitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni1iYXNlLmluYworTUFDSElORV9GRUFUVVJFUyArPSAid2lmaSBlZmkgcGNiaW9zIgorCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gImxpbnV4LXlvY3RvIgorUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8gPz0gIjQuMSUiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID89ICJ4c2VydmVyLXhvcmciCitYU0VSVkVSID89ICIke1hTRVJWRVJfWDg2X0JBU0V9IFwKKyAgICAgICAgICAgICR7WFNFUlZFUl9YODZfRVhUfSBcCisgICAgICAgICAgICAke1hTRVJWRVJfWDg2X0k5MTV9IFwKKyAgICAgICAgICAgICR7WFNFUlZFUl9YODZfSTk2NX0gXAorICAgICAgICAgICAgJHtYU0VSVkVSX1g4Nl9GQkRFVn0gXAorICAgICAgICAgICAgJHtYU0VSVkVSX1g4Nl9WRVNBfSBcCisgICAgICAgICAgICAke1hTRVJWRVJfWDg2X01PREVTRVRUSU5HfSBcCisgICAgICAgICAgICIKKworTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyArPSAibGludXgtZmlybXdhcmUgdjg2ZCBlZWUtYWNwaS1zY3JpcHRzIgorCitHTElCQ19BRERPTlMgPSAibnB0bCIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9wbi1tYXRjaGJveC1wYW5lbC0yID0gIiAtLXdpdGgtYmF0dGVyeT1hY3BpIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvbXBjODMxNWUtcmRiLmNvbmYgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9tcGM4MzE1ZS1yZGIuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmVlZjQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvbXBjODMxNWUtcmRiLmNvbmYKQEAgLTAsMCArMSwzMyBAQAorI0BUWVBFOiBNYWNoaW5lCisjQERFU0NSSVBUSU9OOiBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZm9yIHJ1bm5pbmcgCisKK1RBUkdFVF9GUFUgPSAiIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTMwMGMzLmluYworCitLRVJORUxfSU1BR0VUWVBFID0gInVJbWFnZSIKKworRVhUUkFfSU1BR0VERVBFTkRTICs9ICJ1LWJvb3QiCitVQk9PVF9NQUNISU5FX21wYzgzMTVlLXJkYiA9ICJNUEM4MzE1RVJEQl9jb25maWciCisKK1NFUklBTF9DT05TT0xFID0gIjExNTIwMCB0dHlTMCIKKworTUFDSElORV9GRUFUVVJFUyA9ICJrZXlib2FyZCBwY2kgZXh0MiBleHQzIHNlcmlhbCIKKworUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8gPz0gIjMuMTklIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID0gImxpbnV4LXlvY3RvIgorCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID89ICJ4c2VydmVyLXhvcmciCitYU0VSVkVSID89ICJ4c2VydmVyLXhvcmcgXAorICAgICAgICAgICAgeGY4Ni1pbnB1dC1ldmRldiBcCisgICAgICAgICAgICB4Zjg2LXZpZGVvLWZiZGV2IgorCitQUkVGRVJSRURfVkVSU0lPTl91LWJvb3QgPz0gInYyMDEzLjA3JSIKK1VCT09UX0VOVFJZUE9JTlQgPSAiMHgwMDAwMDAwMCIKKworS0VSTkVMX0RFVklDRVRSRUUgPSAibXBjODMxNWVyZGIuZHRiIgorCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTID0gIiBrZXJuZWwtbW9kdWxlcyIKKworSU1BR0VfRlNUWVBFUyA/PSAiamZmczIgdGFyLmJ6MiIKK0pGRlMyX0VSQVNFQkxPQ0sgPSAiMHg0MDAwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvbGliL29lcWEvY29udHJvbGxlcnMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvbGliL29lcWEvY29udHJvbGxlcnMvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvbGliL29lcWEvY29udHJvbGxlcnMvYmVhZ2xlYm9uZXRhcmdldC5weSBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvbGliL29lcWEvY29udHJvbGxlcnMvYmVhZ2xlYm9uZXRhcmdldC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjFhZWIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9iZWFnbGVib25ldGFyZ2V0LnB5CkBAIC0wLDAgKzEsOTggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCisjIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCB0byB0ZXN0aW1hZ2UuYmJjbGFzcyB0byBkZXBsb3kgaW1hZ2VzIGFuZCBydW4KKyMgdGVzdHMgb24gYSBCZWFnbGVCb25lIChvcmlnaW5hbCAid2hpdGUiIG9yIEJsYWNrIG1vZGVscykuIFRoZSBkZXZpY2UgbXVzdAorIyBiZSBzZXQgdXAgYXMgcGVyIFJFQURNRS5oYXJkd2FyZSBhbmQgdGhlIG1hc3RlciBpbWFnZSBzaG91bGQgYmUgZGVwbG95ZWQKKyMgb250byB0aGUgY2FyZCBzbyB0aGF0IGl0IGJvb3RzIGludG8gaXQgYnkgZGVmYXVsdC4gRm9yIGJvb3RpbmcgaW50byB0aGUKKyMgaW1hZ2UgdW5kZXIgdGVzdCB3ZSBpbnRlcmFjdCB3aXRoIHUtYm9vdCBvdmVyIHNlcmlhbCwgc28gZm9yIHRoZQorIyBCZWFnbGVCb25lIEJsYWNrIHlvdSB3aWxsIG5lZWQgYW4gYWRkaXRpb25hbCBUVEwgc2VyaWFsIGNhYmxlIHNpbmNlIGEKKyMgc2VyaWFsIGludGVyZmFjZSBpc24ndCBhdXRvbWF0aWNhbGx5IHByb3ZpZGVkIG92ZXIgdGhlIFVTQiBjb25uZWN0aW9uIGFzCisjIGl0IGlzIG9uIHRoZSBvcmlnaW5hbCBCZWFnbGVCb25lICgid2hpdGUiKSB2ZXJzaW9uLiBUaGUgc2VwYXJhdGUgZXh0MworIyBwYXJ0aXRpb24gdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGltYWdlIHRvIGJlIHRlc3RlZCBtdXN0IGJlIGxhYmVsbGVkCisjICJ0ZXN0cm9vdGZzIiBzbyB0aGF0IHRoZSBkZXBsb3ltZW50IGNvZGUgYmVsb3cgY2FuIGZpbmQgaXQuCisjCisjIE5PVEU6IGZvciB0aGUgQmVhZ2xlQm9uZSAid2hpdGUiIChvcmlnaW5hbCB2ZXJzaW9uKSB5b3UgbWF5IG5lZWQgdG8gdXNlCisjIGEgc2NyaXB0IHdoaWNoIGhhbmRsZXMgdGhlIHNlcmlhbCBkZXZpY2UgZGlzYXBwZWFyaW5nIG9uIHBvd2VyIGRvd24sIHN1Y2gKKyMgYXMgc2NyaXB0cy9jb250cmliL3NlcmRldnRyeSBpbiBPRS1Db3JlLgorCitpbXBvcnQgb3MKK2ltcG9ydCBiYgoraW1wb3J0IHRpbWUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgcGV4cGVjdAorCitpbXBvcnQgb2VxYS51dGlscy5zc2hjb250cm9sIGFzIHNzaGNvbnRyb2wKK2Zyb20gb2VxYS5jb250cm9sbGVycy5tYXN0ZXJpbWFnZSBpbXBvcnQgTWFzdGVySW1hZ2VIYXJkd2FyZVRhcmdldAorCisKK2NsYXNzIEJlYWdsZUJvbmVUYXJnZXQoTWFzdGVySW1hZ2VIYXJkd2FyZVRhcmdldCk6CisKKyAgICBkdGJzID0geyd1SW1hZ2UtYW0zMzV4LWJvbmUuZHRiJzogJ2FtMzM1eC1ib25lLmR0YicsICd1SW1hZ2UtYW0zMzV4LWJvbmVibGFjay5kdGInOiAnYW0zMzV4LWJvbmVibGFjay5kdGInfQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdldF9leHRyYV9maWxlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5kdGJzLmtleXMoKSkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc3VwZXIoQmVhZ2xlQm9uZVRhcmdldCwgc2VsZikuX19pbml0X18oZCkKKworICAgICAgICBzZWxmLmltYWdlX2ZzdHlwZSA9IHNlbGYuZ2V0X2ltYWdlX2ZzdHlwZShkKQorICAgICAgICBzZWxmLmRlcGxveV9jbWRzID0gWworICAgICAgICAgICAgICAgICdta2RpciAtcCAvbW50L3Rlc3Ryb290ZnMnLAorICAgICAgICAgICAgICAgICdtb3VudCAtTCB0ZXN0cm9vdGZzIC9tbnQvdGVzdHJvb3RmcycsCisgICAgICAgICAgICAgICAgJ3JtIC1yZiAvbW50L3Rlc3Ryb290ZnMvKicsCisgICAgICAgICAgICAgICAgJ3RhciB4dmYgfi90ZXN0LXJvb3Rmcy4lcyAtQyAvbW50L3Rlc3Ryb290ZnMnICUgc2VsZi5pbWFnZV9mc3R5cGUsCisgICAgICAgICAgICAgICAgJ1sgLWUgL21udC90ZXN0cm9vdGZzL2Jvb3QvdUltYWdlIF0gfHwgWyAtTCAvbW50L3Rlc3Ryb290ZnMvYm9vdC91SW1hZ2UgXSB8fCBjcCB+L3Rlc3Qta2VybmVsIC9tbnQvdGVzdHJvb3Rmcy9ib290L3VJbWFnZScsCisgICAgICAgICAgICAgICAgXQorCisgICAgICAgIGZvciBfLCBkdGJmbiBpbiBzZWxmLmR0YnMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAjIEtlcm5lbCBhbmQgZHRiIGZpbGVzIG1heSBub3QgYmUgaW4gdGhlIGltYWdlLCBzbyBjb3B5IHRoZW0gaWYgbm90CisgICAgICAgICAgICBzZWxmLmRlcGxveV9jbWRzLmFwcGVuZCgnWyAtZSAvbW50L3Rlc3Ryb290ZnMvYm9vdC97MH0gXSB8fCBjcCB+L3swfSAvbW50L3Rlc3Ryb290ZnMvYm9vdC8nLmZvcm1hdChkdGJmbikpCisKKyAgICAgICAgaWYgbm90IHNlbGYuc2VyaWFsY29udHJvbF9jbWQ6CisgICAgICAgICAgICBiYi5mYXRhbCgiVGhpcyBURVNUX1RBUkdFVCBuZWVkcyBhIFRFU1RfU0VSSUFMQ09OVFJPTF9DTUQgZGVmaW5lZCBpbiBsb2NhbC5jb25mLiIpCisKKworICAgIGRlZiBfZGVwbG95KHNlbGYpOgorICAgICAgICBzZWxmLm1hc3Rlci5ydW4oInVtb3VudCAvYm9vdDsgdW1vdW50IC9tbnQvdGVzdHJvb3RmczsiKQorICAgICAgICBzZWxmLm1hc3Rlci5pZ25vcmVfc3RhdHVzID0gRmFsc2UKKyAgICAgICAgIyBLZXJuZWwgYW5kIGR0YiBmaWxlcyBtYXkgbm90IGJlIGluIHRoZSBpbWFnZSwgc28gY29weSB0aGVtIGp1c3QgaW4gY2FzZQorICAgICAgICBzZWxmLm1hc3Rlci5jb3B5X3RvKHNlbGYua2VybmVsLCAifi90ZXN0LWtlcm5lbCIpCisgICAgICAgIGtlcm5lbHBhdGggPSBvcy5wYXRoLmRpcm5hbWUoc2VsZi5rZXJuZWwpCisgICAgICAgIGZvciBkdGJvcmlnLCBkdGJmbiBpbiBzZWxmLmR0YnMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBkdGJmaWxlID0gb3MucGF0aC5qb2luKGtlcm5lbHBhdGgsIGR0Ym9yaWcpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkdGJmaWxlKToKKyAgICAgICAgICAgICAgICBzZWxmLm1hc3Rlci5jb3B5X3RvKGR0YmZpbGUsICJ+LyVzIiAlIGR0YmZuKQorICAgICAgICBzZWxmLm1hc3Rlci5jb3B5X3RvKHNlbGYucm9vdGZzLCAifi90ZXN0LXJvb3Rmcy4lcyIgJSBzZWxmLmltYWdlX2ZzdHlwZSkKKyAgICAgICAgZm9yIGNtZCBpbiBzZWxmLmRlcGxveV9jbWRzOgorICAgICAgICAgICAgc2VsZi5tYXN0ZXIucnVuKGNtZCkKKworICAgIGRlZiBfc3RhcnQoc2VsZiwgcGFyYW1zPU5vbmUpOgorICAgICAgICBzZWxmLnBvd2VyX2N5Y2xlKHNlbGYubWFzdGVyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZXJpYWxjb25uID0gcGV4cGVjdC5zcGF3bihzZWxmLnNlcmlhbGNvbnRyb2xfY21kLCBlbnY9c2VsZi5vcmlnZW52LCBsb2dmaWxlPXN5cy5zdGRvdXQpCisgICAgICAgICAgICAjIFdlJ2Qgd2FpdCBmb3IgIlUtQm9vdCIgaGVyZSBidXQgc29tZXRpbWVzIHdlIGNvbm5lY3QgdG9vIGxhdGUgb24gQmVhZ2xlQm9uZSB3aGl0ZSB0byBzZWUgaXQKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uZXhwZWN0KCJOQU5EOiIpCisgICAgICAgICAgICBzZXJpYWxjb25uLmV4cGVjdCgiTU1DOiIpCisgICAgICAgICAgICBzZXJpYWxjb25uLnNlbmRsaW5lKCJhIikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uZXhwZWN0KCJVLUJvb3QjIikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uc2VuZGxpbmUoInNldGVudiBib290cGFydCAwOjMiKQorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoIlUtQm9vdCMiKQorICAgICAgICAgICAgc2VyaWFsY29ubi5zZW5kbGluZSgic2V0ZW52IG1tY3Jvb3QgL2Rldi9tbWNibGswcDMgcm8iKQorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoIlUtQm9vdCMiKQorICAgICAgICAgICAgc2VyaWFsY29ubi5zZW5kbGluZSgiYm9vdCIpCisgICAgICAgICAgICBzZXJpYWxjb25uLmV4cGVjdCgibG9naW46IiwgdGltZW91dD0xMjApCisgICAgICAgICAgICBzZXJpYWxjb25uLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IHBleHBlY3QuRXhjZXB0aW9uUGV4cGVjdCBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoJ1NlcmlhbCBpbnRlcmFjdGlvbiBmYWlsZWQ6ICVzJyAlIHN0cihlKSkKKworICAgIGRlZiBfd2FpdF91bnRpbF9ib290ZWQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlcmlhbGNvbm4gPSBwZXhwZWN0LnNwYXduKHNlbGYuc2VyaWFsY29udHJvbF9jbWQsIGVudj1zZWxmLm9yaWdlbnYsIGxvZ2ZpbGU9c3lzLnN0ZG91dCkKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uZXhwZWN0KCJsb2dpbjoiLCB0aW1lb3V0PTEyMCkKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uY2xvc2UoKQorICAgICAgICBleGNlcHQgcGV4cGVjdC5FeGNlcHRpb25QZXhwZWN0IGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgnU2VyaWFsIGludGVyYWN0aW9uIGZhaWxlZDogJXMnICUgc3RyKGUpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9lZGdlcm91dGVydGFyZ2V0LnB5IGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9lZGdlcm91dGVydGFyZ2V0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMzM4Y2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL2NvbnRyb2xsZXJzL2VkZ2Vyb3V0ZXJ0YXJnZXQucHkKQEAgLTAsMCArMSw5MCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IHRvIHRlc3RpbWFnZS5iYmNsYXNzIHRvIGRlcGxveSBpbWFnZXMgYW5kIHJ1bgorIyB0ZXN0cyBvbiBhIFViaXF1aXRpIE5ldHdvcmtzIEVkZ2VSb3V0ZXIgTGl0ZS4gVGhlIGRldmljZSBtdXN0IGJlIHNldCB1cAorIyB0byBib290IGludG8gdGhlIG1hc3RlciBpbWFnZSBhbHJlYWR5IC0gdGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoYXQgaXMgYXMKKyMgZm9sbG93czoKKyMKKyMgMS4gVGFrZSBvdXQgdGhlIGludGVybmFsIFVTQiBkcml2ZSBhbmQgcGx1ZyBpdCBpbnRvIHlvdXIgUEMKKyMgMi4gUmVwYXJ0aXRpb24gdGhlIFVTQiBkcml2ZSBzbyB0aGF0IHlvdSBoYXZlIHRocmVlIHBhcnRpdGlvbnMgaW4gdGhpcworIyAgICBvcmRlcjoKKyMgICAgICAxOiB2ZmF0LCBsYWJlbGxlZCAiYm9vdCIgKGl0IHdpbGwgbmVlZCB0byBiZSBmb3JtYXR0ZWQgd2l0aCBta2ZzLnZmYXQKKyMgICAgICAgICBmb3IgdGhpcyB0byBiZSBwb3NzaWJsZSwgc2luY2UgRkFUIHBhcnRpdGlvbnMgZm9ybWF0dGVkIHVuZGVyCisjICAgICAgICAgRE9TL1dpbmRvd3Mgd2lsbCBvbmx5IHN1cHBvcnQgdXBwZXJjYXNlIGxhYmVscykKKyMgICAgICAyOiBleHQzIChmb3IgbWFzdGVyIGltYWdlKSBsYWJlbGxlZCAidGVzdG1hc3RlciIKKyMgICAgICAzOiBleHQzIChmb3IgaW1hZ2UgdW5kZXIgdGVzdCkgbGFiZWxsZWQgInRlc3Ryb290ZnMiCisjIDMuIENvcHkgdGhlIGtlcm5lbCB0byBiZSB1c2VkIGJ5IHRoZSBtYXN0ZXIgaW1hZ2UgdG8gdGhlIEZBVCBwYXJ0aXRpb24KKyMgICAgKGl0IHNob3VsZCBiZSBuYW1lZCAidm1saW51eC42NCIgd2l0aCB0aGUgZmFjdG9yeSB1LWJvb3QgY29uZmlndXJhdGlvbikKKyMgNC4gSW5zdGFsbCB0aGUgbWFzdGVyIGltYWdlIG9udG8gdGhlICJ0ZXN0bWFzdGVyIiBleHQzIHBhcnRpdGlvbi4gSWYKKyMgICAgeW91IGRvIHRoaXMgYnkganVzdCBleHRyYWN0aW5nIHRoZSBjb250ZW50cyBvZiBhbiBpbWFnZSBvbnRvIHRoZQorIyAgICBwYXJ0aXRpb24sIHlvdSB3aWxsIGFsc28gbGlrZWx5IG5lZWQgdG8gY3JlYXRlIHRoZSBtYXN0ZXIgaW1hZ2UgbWFya2VyCisjICAgIGZpbGUgL2V0Yy9tYXN0ZXJpbWFnZSB3aXRoaW4gdGhpcyBwYXJ0aXRpb24gc28gdGhhdCB3ZSBjYW4gdGVsbCB3aGVuCisjICAgIHdlJ3JlIGJvb3RlZCBpbnRvIGl0IHRoYXQgaXQgaXMgdGhlIG1hc3RlciBpbWFnZS4KKyMgNS4gUHV0IHRoZSBVU0IgZHJpdmUgYmFjayBpbnRvIHRoZSBkZXZpY2UsIGFuZCBlbnN1cmUgdGhlIGNvbnNvbGUgcG9ydAorIyAgICBhbmQgZmlyc3QgZXRoZXJuZXQgcG9ydCBhcmUgY29ubmVjdGVkIGJlZm9yZSBwb3dlcmluZyBvbgorIworIyBURVNUX1NFUklBTENPTlRST0xfQ01EIHdpbGwgbmVlZCB0byBiZSBzZXQgaW4gbG9jYWwuY29uZiBzbyB0aGF0IHdlIGNhbgorIyBpbnRlcmFjdCB3aXRoIHUtYm9vdCBvdmVyIHRoZSBzZXJpYWwgY29uc29sZSBwb3J0LgorCitpbXBvcnQgb3MKK2ltcG9ydCBiYgoraW1wb3J0IHRpbWUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgcGV4cGVjdAorCitpbXBvcnQgb2VxYS51dGlscy5zc2hjb250cm9sIGFzIHNzaGNvbnRyb2wKK2Zyb20gb2VxYS5jb250cm9sbGVycy5tYXN0ZXJpbWFnZSBpbXBvcnQgTWFzdGVySW1hZ2VIYXJkd2FyZVRhcmdldAorCisKK2NsYXNzIEVkZ2VSb3V0ZXJUYXJnZXQoTWFzdGVySW1hZ2VIYXJkd2FyZVRhcmdldCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisgICAgICAgIHN1cGVyKEVkZ2VSb3V0ZXJUYXJnZXQsIHNlbGYpLl9faW5pdF9fKGQpCisKKwlzZWxmLmltYWdlX2ZzdHlwZSA9IHNlbGYuZ2V0X2ltYWdlX2ZzdHlwZShkKQorICAgICAgICBzZWxmLmRlcGxveV9jbWRzID0gWworICAgICAgICAgICAgICAgICdtb3VudCAtTCBib290IC9ib290JywKKyAgICAgICAgICAgICAgICAnbWtkaXIgLXAgL21udC90ZXN0cm9vdGZzJywKKyAgICAgICAgICAgICAgICAnbW91bnQgLUwgdGVzdHJvb3RmcyAvbW50L3Rlc3Ryb290ZnMnLAorICAgICAgICAgICAgICAgICdjcCB+L3Rlc3Qta2VybmVsIC9ib290JywKKyAgICAgICAgICAgICAgICAncm0gLXJmIC9tbnQvdGVzdHJvb3Rmcy8qJywKKyAgICAgICAgICAgICAgICAndGFyIHh2ZiB+L3Rlc3Qtcm9vdGZzLiVzIC1DIC9tbnQvdGVzdHJvb3RmcycgJSBzZWxmLmltYWdlX2ZzdHlwZQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgaWYgbm90IHNlbGYuc2VyaWFsY29udHJvbF9jbWQ6CisgICAgICAgICAgICBiYi5mYXRhbCgiVGhpcyBURVNUX1RBUkdFVCBuZWVkcyBhIFRFU1RfU0VSSUFMQ09OVFJPTF9DTUQgZGVmaW5lZCBpbiBsb2NhbC5jb25mLiIpCisKKworICAgIGRlZiBfZGVwbG95KHNlbGYpOgorICAgICAgICBzZWxmLm1hc3Rlci5ydW4oInVtb3VudCAvbW50L3Rlc3Ryb290ZnM7IikKKyAgICAgICAgc2VsZi5tYXN0ZXIuaWdub3JlX3N0YXR1cyA9IEZhbHNlCisgICAgICAgIHNlbGYubWFzdGVyLmNvcHlfdG8oc2VsZi5rZXJuZWwsICJ+L3Rlc3Qta2VybmVsIikKKyAgICAgICAgc2VsZi5tYXN0ZXIuY29weV90byhzZWxmLnJvb3RmcywgIn4vdGVzdC1yb290ZnMuJXMiICUgc2VsZi5pbWFnZV9mc3R5cGUpCisgICAgICAgIGZvciBjbWQgaW4gc2VsZi5kZXBsb3lfY21kczoKKyAgICAgICAgICAgIHNlbGYubWFzdGVyLnJ1bihjbWQpCisKKyAgICBkZWYgX3N0YXJ0KHNlbGYsIHBhcmFtcz1Ob25lKToKKyAgICAgICAgc2VsZi5wb3dlcl9jeWNsZShzZWxmLm1hc3RlcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VyaWFsY29ubiA9IHBleHBlY3Quc3Bhd24oc2VsZi5zZXJpYWxjb250cm9sX2NtZCwgZW52PXNlbGYub3JpZ2VudiwgbG9nZmlsZT1zeXMuc3Rkb3V0KQorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoIlUtQm9vdCIpCisgICAgICAgICAgICBzZXJpYWxjb25uLnNlbmRsaW5lKCJhIikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uZXhwZWN0KCJPY3Rlb24gdWJudF9lMTAwIyIpCisgICAgICAgICAgICBzZXJpYWxjb25uLnNlbmRsaW5lKCJmYXRsb2FkIHVzYiAwOjEgJGxvYWRhZGRyIHRlc3Qta2VybmVsIikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uZXhwZWN0KCIgYnl0ZXMgcmVhZCIpCisgICAgICAgICAgICBzZXJpYWxjb25uLmV4cGVjdCgiT2N0ZW9uIHVibnRfZTEwMCMiKQorICAgICAgICAgICAgc2VyaWFsY29ubi5zZW5kbGluZSgiYm9vdG9jdGxpbnV4ICRsb2FkYWRkciBjb3JlbWFzaz0weDMgcm9vdD0vZGV2L3NkYTMgcncgcm9vdHdhaXQgbXRkcGFydHM9cGh5c19tYXBwZWRfZmxhc2g6NTEyayhib290MCksNTEyayhib290MSksNjRrQDMwNzJrKGVlcHJvbSkiKQorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoImxvZ2luOiIsIHRpbWVvdXQ9MTIwKQorICAgICAgICAgICAgc2VyaWFsY29ubi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBwZXhwZWN0LkV4Y2VwdGlvblBleHBlY3QgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCdTZXJpYWwgaW50ZXJhY3Rpb24gZmFpbGVkOiAlcycgJSBzdHIoZSkpCisKKyAgICBkZWYgX3dhaXRfdW50aWxfYm9vdGVkKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZXJpYWxjb25uID0gcGV4cGVjdC5zcGF3bihzZWxmLnNlcmlhbGNvbnRyb2xfY21kLCBlbnY9c2VsZi5vcmlnZW52LCBsb2dmaWxlPXN5cy5zdGRvdXQpCisgICAgICAgICAgICBzZXJpYWxjb25uLmV4cGVjdCgibG9naW46IiwgdGltZW91dD0xMjApCisgICAgICAgICAgICBzZXJpYWxjb25uLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IHBleHBlY3QuRXhjZXB0aW9uUGV4cGVjdCBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoJ1NlcmlhbCBpbnRlcmFjdGlvbiBmYWlsZWQ6ICVzJyAlIHN0cihlKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvbGliL29lcWEvY29udHJvbGxlcnMvZ3J1YnRhcmdldC5weSBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvbGliL29lcWEvY29udHJvbGxlcnMvZ3J1YnRhcmdldC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmM4MDdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9ncnVidGFyZ2V0LnB5CkBAIC0wLDAgKzEsNzEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCisjIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCB0byB0ZXN0aW1hZ2UuYmJjbGFzcyB0byBkZXBsb3kgaW1hZ2VzIGFuZCBydW4KKyMgdGVzdHMgb24gYSBHZW5lcmljIFBDIHRoYXQgYm9vdHMgdXNpbmcgZ3J1YiBib290bG9hZGVyLiBUaGUgZGV2aWNlIG11c3QKKyMgYmUgc2V0IHVwIGFzIHBlciBSRUFETUUuaGFyZHdhcmUgYW5kIHRoZSBtYXN0ZXIgaW1hZ2Ugc2hvdWxkIGJlIGRlcGxveWVkCisjIG9udG8gdGhlIGhhcmRkaXNrIHNvIHRoYXQgaXQgYm9vdHMgaW50byBpdCBieSBkZWZhdWx0LkZvciBib290aW5nIGludG8gdGhlCisjIGltYWdlIHVuZGVyIHRlc3Qgd2UgaW50ZXJhY3Qgd2l0aCBncnViIG92ZXIgc2VyaWFsLCBzbyBmb3IgdGhlCisjIEdlbmVyaWMgUEMgeW91IHdpbGwgbmVlZCBhbiBhZGRpdGlvbmFsIHNlcmlhbCBjYWJsZSBhbmQgZGV2aWNlIHVuZGVyIHRlc3QKKyMgbmVlZHMgdG8gaGF2ZSBhIHNlcmlhbCBpbnRlcmZhY2UuIFRoZSBzZXBhcmF0ZSBleHQzCisjIHBhcnRpdGlvbiB0aGF0IHdpbGwgY29udGFpbiB0aGUgaW1hZ2UgdG8gYmUgdGVzdGVkIG11c3QgYmUgbGFiZWxsZWQKKyMgInRlc3Ryb290ZnMiIHNvIHRoYXQgdGhlIGRlcGxveW1lbnQgY29kZSBiZWxvdyBjYW4gZmluZCBpdC4KKworaW1wb3J0IG9zCitpbXBvcnQgYmIKK2ltcG9ydCB0aW1lCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHBleHBlY3QKKworaW1wb3J0IG9lcWEudXRpbHMuc3NoY29udHJvbCBhcyBzc2hjb250cm9sCitmcm9tIG9lcWEuY29udHJvbGxlcnMubWFzdGVyaW1hZ2UgaW1wb3J0IE1hc3RlckltYWdlSGFyZHdhcmVUYXJnZXQKKworY2xhc3MgR3J1YlRhcmdldChNYXN0ZXJJbWFnZUhhcmR3YXJlVGFyZ2V0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc3VwZXIoR3J1YlRhcmdldCwgc2VsZikuX19pbml0X18oZCkKKyAgICAgICAgc2VsZi5kZXBsb3lfY21kcyA9IFsKKyAgICAgICAgICAgICAgICAnbW91bnQgLUwgYm9vdCAvYm9vdCcsCisgICAgICAgICAgICAgICAgJ21rZGlyIC1wIC9tbnQvdGVzdHJvb3RmcycsCisgICAgICAgICAgICAgICAgJ21vdW50IC1MIHRlc3Ryb290ZnMgL21udC90ZXN0cm9vdGZzJywKKyAgICAgICAgICAgICAgICAnY3Agfi90ZXN0LWtlcm5lbCAvYm9vdCcsCisgICAgICAgICAgICAgICAgJ3JtIC1yZiAvbW50L3Rlc3Ryb290ZnMvKicsCisgICAgICAgICAgICAgICAgJ3RhciB4dmYgfi90ZXN0LXJvb3Rmcy4lcyAtQyAvbW50L3Rlc3Ryb290ZnMnICUgc2VsZi5pbWFnZV9mc3R5cGUsCisgICAgICAgICAgICAgICAgXQorCisgICAgICAgIGlmIG5vdCBzZWxmLnNlcmlhbGNvbnRyb2xfY21kOgorICAgICAgICAgICAgYmIuZmF0YWwoIlRoaXMgVEVTVF9UQVJHRVQgbmVlZHMgYSBURVNUX1NFUklBTENPTlRST0xfQ01EIGRlZmluZWQgaW4gbG9jYWwuY29uZi4iKQorCisKKyAgICBkZWYgX2RlcGxveShzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhlc2UgYXJlbid0IG1vdW50ZWQKKyAgICAgICAgc2VsZi5tYXN0ZXIucnVuKCJ1bW91bnQgL2Jvb3Q7IHVtb3VudCAvbW50L3Rlc3Ryb290ZnM7IikKKyAgICAgICAgc2VsZi5tYXN0ZXIuaWdub3JlX3N0YXR1cyA9IEZhbHNlCisgICAgICAgICMgS2VybmVsIGZpbGVzIG1heSBub3QgYmUgaW4gdGhlIGltYWdlLCBzbyBjb3B5IHRoZW0ganVzdCBpbiBjYXNlCisgICAgICAgIHNlbGYubWFzdGVyLmNvcHlfdG8oc2VsZi5yb290ZnMsICJ+L3Rlc3Qtcm9vdGZzLiIgKyBzZWxmLmltYWdlX2ZzdHlwZSkKKyAgICAgICAgc2VsZi5tYXN0ZXIuY29weV90byhzZWxmLmtlcm5lbCwgIn4vdGVzdC1rZXJuZWwiKQorICAgICAgICBmb3IgY21kIGluIHNlbGYuZGVwbG95X2NtZHM6CisgICAgICAgICAgICBzZWxmLm1hc3Rlci5ydW4oY21kKQorCisgICAgZGVmIF9zdGFydChzZWxmLCBwYXJhbXM9Tm9uZSk6CisgICAgICAgIHNlbGYucG93ZXJfY3ljbGUoc2VsZi5tYXN0ZXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlcmlhbGNvbm4gPSBwZXhwZWN0LnNwYXduKHNlbGYuc2VyaWFsY29udHJvbF9jbWQsIGVudj1zZWxmLm9yaWdlbnYsIGxvZ2ZpbGU9c3lzLnN0ZG91dCkKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uZXhwZWN0KCJHTlUgR1JVQiAgdmVyc2lvbiAyLjAwIikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uZXhwZWN0KCJMaW51eCIpCisgICAgICAgICAgICBzZXJpYWxjb25uLnNlbmRsaW5lKCJ4IikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uZXhwZWN0KCJsb2dpbjoiLCB0aW1lb3V0PTEyMCkKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uY2xvc2UoKQorICAgICAgICBleGNlcHQgcGV4cGVjdC5FeGNlcHRpb25QZXhwZWN0IGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgnU2VyaWFsIGludGVyYWN0aW9uIGZhaWxlZDogJXMnICUgc3RyKGUpKQorCisgICAgZGVmIF93YWl0X3VudGlsX2Jvb3RlZChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VyaWFsY29ubiA9IHBleHBlY3Quc3Bhd24oc2VsZi5zZXJpYWxjb250cm9sX2NtZCwgZW52PXNlbGYub3JpZ2VudiwgbG9nZmlsZT1zeXMuc3Rkb3V0KQorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoImxvZ2luOiIsIHRpbWVvdXQ9MTIwKQorICAgICAgICAgICAgc2VyaWFsY29ubi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBwZXhwZWN0LkV4Y2VwdGlvblBleHBlY3QgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCdTZXJpYWwgaW50ZXJhY3Rpb24gZmFpbGVkOiAlcycgJSBzdHIoZSkpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvbGliL29lcWEvc2VsZnRlc3QvX19pbml0X18ucHkgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL3NlbGZ0ZXN0L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL3NlbGZ0ZXN0L19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL3NlbGZ0ZXN0L2d1bW1pYm9vdC5weSBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvbGliL29lcWEvc2VsZnRlc3QvZ3VtbWlib290LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYWEzNmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL3NlbGZ0ZXN0L2d1bW1pYm9vdC5weQpAQCAtMCwwICsxLDgzIEBACitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIHJ1bnFlbXUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQoraW1wb3J0IHJlCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCisKKworY2xhc3MgR3VtbWlib290KG9lU2VsZlRlc3QpOgorCisgICAgZGVmIF9jb21tb25fc2V0dXAoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDb21tb24gc2V0dXAgZm9yIHRlc3QgY2FzZXM6IDExMDEsIDExMDMKKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBTZXQgRUZJX1BST1ZJREVSID0gImd1bW1pYm9vdCIgYW5kIE1BQ0hJTkUgPSAiZ2VuZXJpY3g4Ni02NCIgaW4gY29uZi9sb2NhbC5jb25mCisgICAgICAgIGZlYXR1cmVzID0gJ0VGSV9QUk9WSURFUiA9ICJndW1taWJvb3QiXG4nCisgICAgICAgIGZlYXR1cmVzICs9ICdNQUNISU5FID0gImdlbmVyaWN4ODYtNjQiJworICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoZmVhdHVyZXMpCisKKyAgICBkZWYgX2NvbW1vbl9idWlsZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbW1vbiBidWlsZCBmb3IgdGVzdCBjYXNlczogMTEwMSwgMTEwMworICAgICAgICAiIiIKKworICAgICAgICAjIEJ1aWxkIGEgZ2VuZXJpY3g4Ni02NC9lZmkgZ3VtbWlib290IGltYWdlCisgICAgICAgIGJpdGJha2UoJ3N5c2xpbnV4IHN5c2xpbnV4LW5hdGl2ZSBwYXJ0ZWQtbmF0aXZlIGRvc2ZzdG9vbHMtbmF0aXZlIG10b29scy1uYXRpdmUgY29yZS1pbWFnZS1taW5pbWFsJykKKworCisgICAgQHRlc3RjYXNlKDExMDEpCisgICAgZGVmIHRlc3RfZWZpX2d1bW1pYm9vdF9pbWFnZXNfY2FuX2JlX2J1aWx0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VtbWFyeTogICAgIENoZWNrIGlmIGVmaS9ndW1taWJvb3QgaW1hZ2VzIGNhbiBiZSBidWlsdAorICAgICAgICBFeHBlY3RlZDogICAgMS4gRmlsZSBndW1taWJvb3R4NjQuZWZpIHNob3VsZCBiZSBhdmFpbGFibGUgaW4gYnVpbGQvdG1wL2RlcGxveS9pbWFnZXMvZ2VuZXJpY3g4Ni02NAorICAgICAgICAgICAgICAgICAgICAgMi4gRWZpL2d1bW1pYm9vdCBpbWFnZXMgY2FuIGJlIGJ1aWx0CisgICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogICAgICBJb251dCBDaGlzYW5vdmljaSA8aW9udXR4LmNoaXNhbm92aWNpQGludGVsLmNvbT4KKyAgICAgICAgQXV0b21hdGVkQnk6IERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBXZSdkIHVzZSBERVBMT1lfRElSX0lNQUdFIGhlcmUsIGV4Y2VwdCB0aGF0IHdlIG5lZWQgaXRzIHZhbHVlIGZvcgorICAgICAgICAjIE1BQ0hJTkU9ImdlbmVyaWN4ODYtNjQgd2hpY2ggaXMgcHJvYmFibHkgbm90IHRoZSBvbmUgY29uZmlndXJlZAorICAgICAgICBndW1taWJvb3RmaWxlID0gb3MucGF0aC5qb2luKGdldF9iYl92YXIoJ0RFUExPWV9ESVInKSwgJ2ltYWdlcycsICdnZW5lcmljeDg2LTY0JywgJ2d1bW1pYm9vdHg2NC5lZmknKQorCisgICAgICAgIHNlbGYuX2NvbW1vbl9zZXR1cCgpCisKKyAgICAgICAgIyBFbnN1cmUgd2UncmUgYWN0dWFsbHkgdGVzdGluZyB0aGF0IHRoaXMgZ2V0cyBidWlsdCBhbmQgbm90IHRoYXQKKyAgICAgICAgIyBpdCB3YXMgYXJvdW5kIGZyb20gYW4gZWFybGllciBidWlsZAorICAgICAgICBiaXRiYWtlKCctYyBjbGVhbnNzdGF0ZSBndW1taWJvb3QnKQorICAgICAgICBydW5DbWQoJ3JtIC1mICVzJyAlIGd1bW1pYm9vdGZpbGUpCisKKyAgICAgICAgc2VsZi5fY29tbW9uX2J1aWxkKCkKKworICAgICAgICBmb3VuZCA9IG9zLnBhdGguaXNmaWxlKGd1bW1pYm9vdGZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZCwgJ0d1bW1pYm9vdCBmaWxlICVzIG5vdCBmb3VuZCcgJSBndW1taWJvb3RmaWxlKQorCisgICAgQHRlc3RjYXNlKDExMDMpCisgICAgZGVmIHRlc3Rfd2ljX2NvbW1hbmRfY2FuX2NyZWF0ZV9lZmlfZ3VtbWlib290X2luc3RhbGxhdGlvbl9pbWFnZXMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgQ2hlY2sgdGhhdCB3aWMgY29tbWFuZCBjYW4gY3JlYXRlIGVmaS9ndW1taWJvb3QgaW5zdGFsbGF0aW9uIGltYWdlcworICAgICAgICBFeHBlY3RlZDogICAgQSAuZGlyZWN0IGZpbGUgaW4gZm9sZGVyIC92YXIvdG1wL3dpYy8gbXVzdCBiZSBjcmVhdGVkLgorICAgICAgICBQcm9kdWN0OiAgICAgb2UtY29yZQorICAgICAgICBBdXRob3I6ICAgICAgSW9udXQgQ2hpc2Fub3ZpY2kgPGlvbnV0eC5jaGlzYW5vdmljaUBpbnRlbC5jb20+CisgICAgICAgIEF1dG9tYXRlZEJ5OiBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+CisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuX2NvbW1vbl9zZXR1cCgpCisgICAgICAgIHNlbGYuX2NvbW1vbl9idWlsZCgpCisKKyAgICAgICAgIyBDcmVhdGUgZWZpL2d1bW1pYm9vdCBpbnN0YWxsYXRpb24gaW1hZ2VzCisgICAgICAgIHdpY19jcmVhdGVfY21kID0gJ3dpYyBjcmVhdGUgbWtndW1taWRpc2sgLWUgY29yZS1pbWFnZS1taW5pbWFsJworICAgICAgICByZXN1bHQgPSBydW5DbWQod2ljX2NyZWF0ZV9jbWQpCisKKyAgICAgICAgIyBGaW5kIGZpbGUgd3JpdHRlbiBieSB3aWMgZnJvbSBvdXRwdXQKKyAgICAgICAgcmVzID0gcmUuc2VhcmNoKCcoL3Zhci90bXAvd2ljLy4qXC5kaXJlY3QpJywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgaWYgcmVzOgorICAgICAgICAgICAgZGlyZWN0X2ZpbGUgPSByZXMuZ3JvdXAoMSkKKyAgICAgICAgICAgICMgQ2hlY2sgaXQgYWN0dWFsbHkgZXhpc3RzCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGlyZWN0X2ZpbGUpOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnd2ljIHJlcG9ydGVkIGRpcmVjdCBmaWxlICIlcyIgZG9lcyBub3QgZXhpc3Q7IHdpYyBvdXRwdXQ6XG4lcycgJSAoZGlyZWN0X2ZpbGUsIHJlc3VsdC5vdXRwdXQpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdObyAuZGlyZWN0IGZpbGUgcmVwb3J0ZWQgaW4gd2ljIG91dHB1dDpcbiVzJyAlIHJlc3VsdC5vdXRwdXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZDk5MWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS5iYmFwcGVuZApAQCAtMCwwICsxIEBACitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS9iZWFnbGVib2FyZC9hc291bmQuc3RhdGUgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS9iZWFnbGVib2FyZC9hc291bmQuc3RhdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkyNDQ5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlL2JlYWdsZWJvYXJkL2Fzb3VuZC5zdGF0ZQpAQCAtMCwwICsxLDY1NiBAQAorc3RhdGUub21hcDNiZWFnbGUgeworCWNvbnRyb2wuMSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgRU5VTUVSQVRFRAorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5pdGVtLjAgJ09wdGlvbiAyICh2b2ljZS9hdWRpbyknCisJCWNvbW1lbnQuaXRlbS4xICdPcHRpb24gMSAoYXVkaW8pJworCQlpZmFjZSBNSVhFUgorCQluYW1lICdDb2RlYyBPcGVyYXRpb24gTW9kZScKKwkJdmFsdWUgJ09wdGlvbiAxIChhdWRpbyknCisJfQorCWNvbnRyb2wuMiB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgSU5URUdFUgorCQljb21tZW50LmNvdW50IDIKKwkJY29tbWVudC5yYW5nZSAnMCAtIDYzJworCQljb21tZW50LmRibWluIC02MzAwCisJCWNvbW1lbnQuZGJtYXggMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdEQUMxIERpZ2l0YWwgRmluZSBQbGF5YmFjayBWb2x1bWUnCisJCXZhbHVlLjAgMAorCQl2YWx1ZS4xIDAKKwl9CisJY29udHJvbC4zIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMgorCQljb21tZW50LnJhbmdlICcwIC0gNjMnCisJCWNvbW1lbnQuZGJtaW4gLTYzMDAKKwkJY29tbWVudC5kYm1heCAwCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0RBQzIgRGlnaXRhbCBGaW5lIFBsYXliYWNrIFZvbHVtZScKKwkJdmFsdWUuMCA1MAorCQl2YWx1ZS4xIDUwCisJfQorCWNvbnRyb2wuNCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgSU5URUdFUgorCQljb21tZW50LmNvdW50IDIKKwkJY29tbWVudC5yYW5nZSAnMCAtIDInCisJCWNvbW1lbnQuZGJtaW4gMAorCQljb21tZW50LmRibWF4IDEyMDAKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnREFDMSBEaWdpdGFsIENvYXJzZSBQbGF5YmFjayBWb2x1bWUnCisJCXZhbHVlLjAgMAorCQl2YWx1ZS4xIDAKKwl9CisJY29udHJvbC41IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMgorCQljb21tZW50LnJhbmdlICcwIC0gMicKKwkJY29tbWVudC5kYm1pbiAwCisJCWNvbW1lbnQuZGJtYXggMTIwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdEQUMyIERpZ2l0YWwgQ29hcnNlIFBsYXliYWNrIFZvbHVtZScKKwkJdmFsdWUuMCAyCisJCXZhbHVlLjEgMgorCX0KKwljb250cm9sLjYgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAyCisJCWNvbW1lbnQucmFuZ2UgJzAgLSAxOCcKKwkJY29tbWVudC5kYm1pbiAtMjQwMAorCQljb21tZW50LmRibWF4IDEyMDAKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnREFDMSBBbmFsb2cgUGxheWJhY2sgVm9sdW1lJworCQl2YWx1ZS4wIDAKKwkJdmFsdWUuMSAwCisJfQorCWNvbnRyb2wuNyB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgSU5URUdFUgorCQljb21tZW50LmNvdW50IDIKKwkJY29tbWVudC5yYW5nZSAnMCAtIDE4JworCQljb21tZW50LmRibWluIC0yNDAwCisJCWNvbW1lbnQuZGJtYXggMTIwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdEQUMyIEFuYWxvZyBQbGF5YmFjayBWb2x1bWUnCisJCXZhbHVlLjAgMTUKKwkJdmFsdWUuMSAxNQorCX0KKwljb250cm9sLjggeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAyCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0RBQzEgQW5hbG9nIFBsYXliYWNrIFN3aXRjaCcKKwkJdmFsdWUuMCBmYWxzZQorCQl2YWx1ZS4xIGZhbHNlCisJfQorCWNvbnRyb2wuOSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDIKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnREFDMiBBbmFsb2cgUGxheWJhY2sgU3dpdGNoJworCQl2YWx1ZS4wIHRydWUKKwkJdmFsdWUuMSB0cnVlCisJfQorCWNvbnRyb2wuMTAgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAxCisJCWNvbW1lbnQucmFuZ2UgJzAgLSA0OScKKwkJY29tbWVudC5kYm1pbiAtMzcwMAorCQljb21tZW50LmRibWF4IDEyMDAKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnREFDIFZvaWNlIERpZ2l0YWwgRG93bmxpbmsgVm9sdW1lJworCQl2YWx1ZSAwCisJfQorCWNvbnRyb2wuMTEgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAxCisJCWNvbW1lbnQucmFuZ2UgJzAgLSAxOCcKKwkJY29tbWVudC5kYm1pbiAtMjQwMAorCQljb21tZW50LmRibWF4IDEyMDAKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnREFDIFZvaWNlIEFuYWxvZyBEb3dubGluayBWb2x1bWUnCisJCXZhbHVlIDE4CisJfQorCWNvbnRyb2wuMTIgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0RBQyBWb2ljZSBBbmFsb2cgRG93bmxpbmsgU3dpdGNoJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjEzIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMgorCQljb21tZW50LnJhbmdlICcwIC0gMycKKwkJY29tbWVudC5kYm1pbiAtMTIwMAorCQljb21tZW50LmRibWF4IDYwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdQcmVEcml2IFBsYXliYWNrIFZvbHVtZScKKwkJdmFsdWUuMCAwCisJCXZhbHVlLjEgMAorCX0KKwljb250cm9sLjE0IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMgorCQljb21tZW50LnJhbmdlICcwIC0gMycKKwkJY29tbWVudC5kYm1pbiAtMTIwMAorCQljb21tZW50LmRibWF4IDYwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdIZWFkc2V0IFBsYXliYWNrIFZvbHVtZScKKwkJdmFsdWUuMCAzCisJCXZhbHVlLjEgMworCX0KKwljb250cm9sLjE1IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMgorCQljb21tZW50LnJhbmdlICcwIC0gMycKKwkJY29tbWVudC5kYm1pbiAtMTIwMAorCQljb21tZW50LmRibWF4IDYwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdDYXJraXQgUGxheWJhY2sgVm9sdW1lJworCQl2YWx1ZS4wIDAKKwkJdmFsdWUuMSAwCisJfQorCWNvbnRyb2wuMTYgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAxCisJCWNvbW1lbnQucmFuZ2UgJzAgLSAzJworCQljb21tZW50LmRibWluIC02MDAKKwkJY29tbWVudC5kYm1heCAxMjAwCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0VhcnBpZWNlIFBsYXliYWNrIFZvbHVtZScKKwkJdmFsdWUgMAorCX0KKwljb250cm9sLjE3IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMgorCQljb21tZW50LnJhbmdlICcwIC0gMzEnCisJCWNvbW1lbnQuZGJtaW4gMAorCQljb21tZW50LmRibWF4IDMxMDAKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnVFgxIERpZ2l0YWwgQ2FwdHVyZSBWb2x1bWUnCisJCXZhbHVlLjAgMTIKKwkJdmFsdWUuMSAxMgorCX0KKwljb250cm9sLjE4IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMgorCQljb21tZW50LnJhbmdlICcwIC0gMzEnCisJCWNvbW1lbnQuZGJtaW4gMAorCQljb21tZW50LmRibWF4IDMxMDAKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnVFgyIERpZ2l0YWwgQ2FwdHVyZSBWb2x1bWUnCisJCXZhbHVlLjAgMAorCQl2YWx1ZS4xIDAKKwl9CisJY29udHJvbC4xOSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgSU5URUdFUgorCQljb21tZW50LmNvdW50IDIKKwkJY29tbWVudC5yYW5nZSAnMCAtIDUnCisJCWNvbW1lbnQuZGJtaW4gMAorCQljb21tZW50LmRibWF4IDMwMDAKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnQW5hbG9nIENhcHR1cmUgVm9sdW1lJworCQl2YWx1ZS4wIDAKKwkJdmFsdWUuMSAwCisJfQorCWNvbnRyb2wuMjAgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEVOVU1FUkFURUQKKwkJY29tbWVudC5jb3VudCAxCisJCWNvbW1lbnQuaXRlbS4wICdWb2ljZSBoaWdoIHByaW9yaXR5JworCQljb21tZW50Lml0ZW0uMSAnSGlGaSBoaWdoIHByaW9yaXR5JworCQlpZmFjZSBNSVhFUgorCQluYW1lICdBVkFEQyBDbG9jayBQcmlvcml0eScKKwkJdmFsdWUgJ1ZvaWNlIGhpZ2ggcHJpb3JpdHknCisJfQorCWNvbnRyb2wuMjEgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEVOVU1FUkFURUQKKwkJY29tbWVudC5jb3VudCAxCisJCWNvbW1lbnQuaXRlbS4wICcyNy8yMC8xNCBtcycKKwkJY29tbWVudC5pdGVtLjEgJzU1LzQwLzI3IG1zJworCQljb21tZW50Lml0ZW0uMiAnMTA5LzgxLzU1IG1zJworCQljb21tZW50Lml0ZW0uMyAnMjE4LzE2MS8xMDkgbXMnCisJCWNvbW1lbnQuaXRlbS40ICc0MzcvMzIzLzIxOCBtcycKKwkJY29tbWVudC5pdGVtLjUgJzg3NC82NDUvNDM3IG1zJworCQljb21tZW50Lml0ZW0uNiAnMTc0OC8xMjkxLzg3NCBtcycKKwkJY29tbWVudC5pdGVtLjcgJzM0OTUvMjU4MS8xNzQ4IG1zJworCQlpZmFjZSBNSVhFUgorCQluYW1lICdIUyByYW1wIGRlbGF5JworCQl2YWx1ZSAnMjcvMjAvMTQgbXMnCisJfQorCWNvbnRyb2wuMjIgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEVOVU1FUkFURUQKKwkJY29tbWVudC5jb3VudCAxCisJCWNvbW1lbnQuaXRlbS4wICdWaWJyYSBILWJyaWRnZSBkaXJlY3Rpb24nCisJCWNvbW1lbnQuaXRlbS4xICdBdWRpbyBkYXRhIE1TQicKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnVmlicmEgSC1icmlkZ2UgbW9kZScKKwkJdmFsdWUgJ1ZpYnJhIEgtYnJpZGdlIGRpcmVjdGlvbicKKwl9CisJY29udHJvbC4yMyB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgRU5VTUVSQVRFRAorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5pdGVtLjAgJ1Bvc2l0aXZlIHBvbGFyaXR5JworCQljb21tZW50Lml0ZW0uMSAnTmVnYXRpdmUgcG9sYXJpdHknCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ1ZpYnJhIEgtYnJpZGdlIGRpcmVjdGlvbicKKwkJdmFsdWUgJ1Bvc2l0aXZlIHBvbGFyaXR5JworCX0KKwljb250cm9sLjI0IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdBbmFsb2cgUmlnaHQgU3ViIE1pYyBDYXB0dXJlIFN3aXRjaCcKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC4yNSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnQW5hbG9nIFJpZ2h0IEFVWFIgQ2FwdHVyZSBTd2l0Y2gnCisJCXZhbHVlIHRydWUKKwl9CisJY29udHJvbC4yNiB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnQW5hbG9nIExlZnQgTWFpbiBNaWMgQ2FwdHVyZSBTd2l0Y2gnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuMjcgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0FuYWxvZyBMZWZ0IEhlYWRzZXQgTWljIENhcHR1cmUgU3dpdGNoJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjI4IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdBbmFsb2cgTGVmdCBBVVhMIENhcHR1cmUgU3dpdGNoJworCQl2YWx1ZSB0cnVlCisJfQorCWNvbnRyb2wuMjkgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0FuYWxvZyBMZWZ0IENhcmtpdCBNaWMgQ2FwdHVyZSBTd2l0Y2gnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuMzAgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEVOVU1FUkFURUQKKwkJY29tbWVudC5jb3VudCAxCisJCWNvbW1lbnQuaXRlbS4wIEFuYWxvZworCQljb21tZW50Lml0ZW0uMSBEaWdpbWljMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdUWDIgQ2FwdHVyZSBSb3V0ZScKKwkJdmFsdWUgQW5hbG9nCisJfQorCWNvbnRyb2wuMzEgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEVOVU1FUkFURUQKKwkJY29tbWVudC5jb3VudCAxCisJCWNvbW1lbnQuaXRlbS4wIEFuYWxvZworCQljb21tZW50Lml0ZW0uMSBEaWdpbWljMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdUWDEgQ2FwdHVyZSBSb3V0ZScKKwkJdmFsdWUgQW5hbG9nCisJfQorCWNvbnRyb2wuMzIgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEVOVU1FUkFURUQKKwkJY29tbWVudC5jb3VudCAxCisJCWNvbW1lbnQuaXRlbS4wICdMb2NhbCB2aWJyYXRvcicKKwkJY29tbWVudC5pdGVtLjEgQXVkaW8KKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnVmlicmEgUm91dGUnCisJCXZhbHVlICdMb2NhbCB2aWJyYXRvcicKKwl9CisJY29udHJvbC4zMyB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgRU5VTUVSQVRFRAorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5pdGVtLjAgQXVkaW9MMQorCQljb21tZW50Lml0ZW0uMSBBdWRpb1IxCisJCWNvbW1lbnQuaXRlbS4yIEF1ZGlvTDIKKwkJY29tbWVudC5pdGVtLjMgQXVkaW9SMgorCQlpZmFjZSBNSVhFUgorCQluYW1lICdWaWJyYSBNdXgnCisJCXZhbHVlIEF1ZGlvTDEKKwl9CisJY29udHJvbC4zNCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnSGFuZHNmcmVlUiBTd2l0Y2gnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuMzUgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEVOVU1FUkFURUQKKwkJY29tbWVudC5jb3VudCAxCisJCWNvbW1lbnQuaXRlbS4wIFZvaWNlCisJCWNvbW1lbnQuaXRlbS4xIEF1ZGlvUjEKKwkJY29tbWVudC5pdGVtLjIgQXVkaW9SMgorCQljb21tZW50Lml0ZW0uMyBBdWRpb0wyCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0hhbmRzZnJlZVIgTXV4JworCQl2YWx1ZSBWb2ljZQorCX0KKwljb250cm9sLjM2IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdIYW5kc2ZyZWVMIFN3aXRjaCcKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC4zNyB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgRU5VTUVSQVRFRAorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5pdGVtLjAgVm9pY2UKKwkJY29tbWVudC5pdGVtLjEgQXVkaW9MMQorCQljb21tZW50Lml0ZW0uMiBBdWRpb0wyCisJCWNvbW1lbnQuaXRlbS4zIEF1ZGlvUjIKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnSGFuZHNmcmVlTCBNdXgnCisJCXZhbHVlIFZvaWNlCisJfQorCWNvbnRyb2wuMzggeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0NhcmtpdFIgTWl4ZXIgVm9pY2UnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuMzkgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0NhcmtpdFIgTWl4ZXIgQXVkaW9SMScKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC40MCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnQ2Fya2l0UiBNaXhlciBBdWRpb1IyJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjQxIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdDYXJraXRMIE1peGVyIFZvaWNlJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjQyIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdDYXJraXRMIE1peGVyIEF1ZGlvTDEnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNDMgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0NhcmtpdEwgTWl4ZXIgQXVkaW9MMicKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC40NCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnSGVhZHNldFIgTWl4ZXIgVm9pY2UnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNDUgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0hlYWRzZXRSIE1peGVyIEF1ZGlvUjEnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNDYgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0hlYWRzZXRSIE1peGVyIEF1ZGlvUjInCisJCXZhbHVlIHRydWUKKwl9CisJY29udHJvbC40NyB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnSGVhZHNldEwgTWl4ZXIgVm9pY2UnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNDggeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0hlYWRzZXRMIE1peGVyIEF1ZGlvTDEnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNDkgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0hlYWRzZXRMIE1peGVyIEF1ZGlvTDInCisJCXZhbHVlIHRydWUKKwl9CisJY29udHJvbC41MCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnUHJlZHJpdmVSIE1peGVyIFZvaWNlJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjUxIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdQcmVkcml2ZVIgTWl4ZXIgQXVkaW9SMScKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC41MiB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnUHJlZHJpdmVSIE1peGVyIEF1ZGlvUjInCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNTMgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ1ByZWRyaXZlUiBNaXhlciBBdWRpb0wyJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjU0IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdQcmVkcml2ZUwgTWl4ZXIgVm9pY2UnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNTUgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ1ByZWRyaXZlTCBNaXhlciBBdWRpb0wxJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjU2IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdQcmVkcml2ZUwgTWl4ZXIgQXVkaW9MMicKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC41NyB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnUHJlZHJpdmVMIE1peGVyIEF1ZGlvUjInCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNTggeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0VhcnBpZWNlIE1peGVyIFZvaWNlJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjU5IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdFYXJwaWVjZSBNaXhlciBBdWRpb0wxJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjYwIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdFYXJwaWVjZSBNaXhlciBBdWRpb0wyJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjYxIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdFYXJwaWVjZSBNaXhlciBBdWRpb1IxJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjYyIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMQorCQljb21tZW50LnJhbmdlICcwIC0gNDEnCisJCWNvbW1lbnQuZGJtaW4gLTUxMDAKKwkJY29tbWVudC5kYm1heCAtMTAwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdWb2ljZSBEaWdpdGFsIExvb3BiYWNrIFZvbHVtZScKKwkJdmFsdWUgMAorCX0KKwljb250cm9sLjYzIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMQorCQljb21tZW50LnJhbmdlICcwIC0gNycKKwkJY29tbWVudC5kYm1pbiAtMjQwMAorCQljb21tZW50LmRibWF4IDAKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnUmlnaHQgRGlnaXRhbCBMb29wYmFjayBWb2x1bWUnCisJCXZhbHVlIDAKKwl9CisJY29udHJvbC42NCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgSU5URUdFUgorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5yYW5nZSAnMCAtIDcnCisJCWNvbW1lbnQuZGJtaW4gLTI0MDAKKwkJY29tbWVudC5kYm1heCAwCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0xlZnQgRGlnaXRhbCBMb29wYmFjayBWb2x1bWUnCisJCXZhbHVlIDAKKwl9CisJY29udHJvbC42NSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnVm9pY2UgQW5hbG9nIExvb3BiYWNrIFN3aXRjaCcKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC42NiB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnTGVmdDIgQW5hbG9nIExvb3BiYWNrIFN3aXRjaCcKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC42NyB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnUmlnaHQyIEFuYWxvZyBMb29wYmFjayBTd2l0Y2gnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNjggeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0xlZnQxIEFuYWxvZyBMb29wYmFjayBTd2l0Y2gnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNjkgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ1JpZ2h0MSBBbmFsb2cgTG9vcGJhY2sgU3dpdGNoJworCQl2YWx1ZSBmYWxzZQorCX0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL2JlYWdsZWJvYXJkL21hY2hjb25maWcgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvci9iZWFnbGVib2FyZC9tYWNoY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE0Njg1OWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvci9iZWFnbGVib2FyZC9tYWNoY29uZmlnCkBAIC0wLDAgKzEsMyBAQAorIyBBc3N1bWUgYSBVU0IgbW91c2UgYW5kIHRvdWNoc2NyZWVuIGFyZSBjb25uZWN0ZWQKK0hBVkVfVE9VQ0hTQ1JFRU49MAorSEFWRV9LRVlCT0FSRD0xCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvci9nZW5lcmljeDg2LTY0L21hY2hjb25maWcgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvci9nZW5lcmljeDg2LTY0L21hY2hjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgxYTIzYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL2dlbmVyaWN4ODYtNjQvbWFjaGNvbmZpZwpAQCAtMCwwICsxLDYgQEAKK0hBVkVfVE9VQ0hTQ1JFRU49MAorSEFWRV9LRVlCT0FSRD0xCisKK0RJU1BMQVlfQ0FOX1JPVEFURT0wCitESVNQTEFZX09SSUVOVEFUSU9OPTAKK0RJU1BMQVlfRFBJPTEzMwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3IvZ2VuZXJpY3g4Ni9tYWNoY29uZmlnIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3IvZ2VuZXJpY3g4Ni9tYWNoY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MWEyM2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvci9nZW5lcmljeDg2L21hY2hjb25maWcKQEAgLTAsMCArMSw2IEBACitIQVZFX1RPVUNIU0NSRUVOPTAKK0hBVkVfS0VZQk9BUkQ9MQorCitESVNQTEFZX0NBTl9ST1RBVEU9MAorRElTUExBWV9PUklFTlRBVElPTj0wCitESVNQTEFZX0RQST0xMzMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yXzAuMC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yXzAuMC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmQ5OTFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiYXBwZW5kCkBAIC0wLDAgKzEgQEAKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtcHJvZmlsZS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtcHJvZmlsZS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODY1OTVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlLmJiYXBwZW5kCkBAIC0wLDAgKzEsMiBAQAorUkRFUEVORFNfJHtQTn1fYXBwZW5kX2dlbmVyaWN4ODYgPSAiIGx0dG5nLXVzdCBzeXN0ZW10YXAiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMvZ2VuZXJpY3g4Ni02NC91Q2xpYmMubWFjaGluZSBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMvZ2VuZXJpY3g4Ni02NC91Q2xpYmMubWFjaGluZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDVkYzY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy9nZW5lcmljeDg2LTY0L3VDbGliYy5tYWNoaW5lCkBAIC0wLDAgKzEsNjkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgRnJpIE5vdiAyMyAxNTo0OTozMyAyMDA3CisjCisjIFRBUkdFVF9hbHBoYSBpcyBub3Qgc2V0CisjIFRBUkdFVF9hcm0gaXMgbm90IHNldAorIyBUQVJHRVRfYmZpbiBpcyBub3Qgc2V0CisjIFRBUkdFVF9jcmlzIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2UxIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2ZydiBpcyBub3Qgc2V0CisjIFRBUkdFVF9oODMwMCBpcyBub3Qgc2V0CisjIFRBUkdFVF9ocHBhIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2kzODY9eQorIyBUQVJHRVRfaTk2MCBpcyBub3Qgc2V0CisjIFRBUkdFVF9pYTY0IGlzIG5vdCBzZXQKKyMgVEFSR0VUX202OGsgaXMgbm90IHNldAorIyBUQVJHRVRfbWljcm9ibGF6ZSBpcyBub3Qgc2V0CisjIFRBUkdFVF9taXBzIGlzIG5vdCBzZXQKKyMgVEFSR0VUX25pb3MgaXMgbm90IHNldAorIyBUQVJHRVRfbmlvczIgaXMgbm90IHNldAorIyBUQVJHRVRfcG93ZXJwYyBpcyBub3Qgc2V0CisjIFRBUkdFVF9zaCBpcyBub3Qgc2V0CisjIFRBUkdFVF9zaDY0IGlzIG5vdCBzZXQKKyMgVEFSR0VUX3NwYXJjIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3Y4NTAgaXMgbm90IHNldAorIyBUQVJHRVRfdmF4IGlzIG5vdCBzZXQKK1RBUkdFVF94ODZfNjQ9eQorCisjCisjIFRhcmdldCBBcmNoaXRlY3R1cmUgRmVhdHVyZXMgYW5kIE9wdGlvbnMKKyMKK1RBUkdFVF9BUkNIPSJ4ODZfNjQiCitGT1JDRV9PUFRJT05TX0ZPUl9BUkNIPXkKKyMgQ09ORklHX0dFTkVSSUNfMzg2IGlzIG5vdCBzZXQKKyMgQ09ORklHXzM4NiBpcyBub3Qgc2V0CisjIENPTkZJR180ODYgaXMgbm90IHNldAorIyBDT05GSUdfNTg2IGlzIG5vdCBzZXQKKyMgQ09ORklHXzU4Nk1NWCBpcyBub3Qgc2V0CisjIENPTkZJR182ODYgaXMgbm90IHNldAorIyBDT05GSUdfUEVOVElVTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFTlRJVU1JSUkgaXMgbm90IHNldAorIyBDT05GSUdfUEVOVElVTTQgaXMgbm90IHNldAorIyBDT05GSUdfSzYgaXMgbm90IHNldAorIyBDT05GSUdfSzcgaXMgbm90IHNldAorIyBDT05GSUdfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUlVTT0UgaXMgbm90IHNldAorIyBDT05GSUdfV0lOQ0hJUEM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTkNISVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NZUklYSUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FSEVNSUFIIGlzIG5vdCBzZXQKK1RBUkdFVF9TVUJBUkNIPSIiCisKKyMKKyMgVXNpbmcgRUxGIGZpbGUgZm9ybWF0CisjCitBUkNIX0xJVFRMRV9FTkRJQU49eQorCisjCisjIFVzaW5nIExpdHRsZSBFbmRpYW4KKyMKK0FSQ0hfSEFTX01NVT15CitBUkNIX1VTRV9NTVU9eQorVUNMSUJDX0hBU19GTE9BVFM9eQorVUNMSUJDX0hBU19GUFU9eQorRE9fQzk5X01BVEg9eQorS0VSTkVMX0hFQURFUlM9Ii91c3IvaW5jbHVkZSIKK0hBVkVfRE9UX0NPTkZJRz15CisKK1VDTElCQ19IQVNfRkVOVj15CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjL2dlbmVyaWN4ODYvdUNsaWJjLm1hY2hpbmUgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjL2dlbmVyaWN4ODYvdUNsaWJjLm1hY2hpbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRmMTVmOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMvZ2VuZXJpY3g4Ni91Q2xpYmMubWFjaGluZQpAQCAtMCwwICsxLDY5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIEZyaSBOb3YgMjMgMTU6NDk6MzMgMjAwNworIworIyBUQVJHRVRfYWxwaGEgaXMgbm90IHNldAorIyBUQVJHRVRfYXJtIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2JmaW4gaXMgbm90IHNldAorIyBUQVJHRVRfY3JpcyBpcyBub3Qgc2V0CisjIFRBUkdFVF9lMSBpcyBub3Qgc2V0CisjIFRBUkdFVF9mcnYgaXMgbm90IHNldAorIyBUQVJHRVRfaDgzMDAgaXMgbm90IHNldAorIyBUQVJHRVRfaHBwYSBpcyBub3Qgc2V0CitUQVJHRVRfaTM4Nj15CisjIFRBUkdFVF9pOTYwIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2lhNjQgaXMgbm90IHNldAorIyBUQVJHRVRfbTY4ayBpcyBub3Qgc2V0CisjIFRBUkdFVF9taWNyb2JsYXplIGlzIG5vdCBzZXQKKyMgVEFSR0VUX21pcHMgaXMgbm90IHNldAorIyBUQVJHRVRfbmlvcyBpcyBub3Qgc2V0CisjIFRBUkdFVF9uaW9zMiBpcyBub3Qgc2V0CisjIFRBUkdFVF9wb3dlcnBjIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3NoIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3NoNjQgaXMgbm90IHNldAorIyBUQVJHRVRfc3BhcmMgaXMgbm90IHNldAorIyBUQVJHRVRfdjg1MCBpcyBub3Qgc2V0CisjIFRBUkdFVF92YXggaXMgbm90IHNldAorIyBUQVJHRVRfeDg2XzY0IGlzIG5vdCBzZXQKKworIworIyBUYXJnZXQgQXJjaGl0ZWN0dXJlIEZlYXR1cmVzIGFuZCBPcHRpb25zCisjCitUQVJHRVRfQVJDSD0iaTM4NiIKK0ZPUkNFX09QVElPTlNfRk9SX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfMzg2PXkKKyMgQ09ORklHXzM4NiBpcyBub3Qgc2V0CisjIENPTkZJR180ODYgaXMgbm90IHNldAorIyBDT05GSUdfNTg2IGlzIG5vdCBzZXQKKyMgQ09ORklHXzU4Nk1NWCBpcyBub3Qgc2V0CisjIENPTkZJR182ODYgaXMgbm90IHNldAorIyBDT05GSUdfUEVOVElVTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFTlRJVU1JSUkgaXMgbm90IHNldAorIyBDT05GSUdfUEVOVElVTTQgaXMgbm90IHNldAorIyBDT05GSUdfSzYgaXMgbm90IHNldAorIyBDT05GSUdfSzcgaXMgbm90IHNldAorIyBDT05GSUdfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUlVTT0UgaXMgbm90IHNldAorIyBDT05GSUdfV0lOQ0hJUEM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTkNISVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NZUklYSUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FSEVNSUFIIGlzIG5vdCBzZXQKK1RBUkdFVF9TVUJBUkNIPSIiCisKKyMKKyMgVXNpbmcgRUxGIGZpbGUgZm9ybWF0CisjCitBUkNIX0xJVFRMRV9FTkRJQU49eQorCisjCisjIFVzaW5nIExpdHRsZSBFbmRpYW4KKyMKK0FSQ0hfSEFTX01NVT15CitBUkNIX1VTRV9NTVU9eQorVUNMSUJDX0hBU19GTE9BVFM9eQorVUNMSUJDX0hBU19GUFU9eQorRE9fQzk5X01BVEg9eQorS0VSTkVMX0hFQURFUlM9Ii91c3IvaW5jbHVkZSIKK0hBVkVfRE9UX0NPTkZJRz15CisKK1VDTElCQ19IQVNfRkVOVj15CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjX2dpdC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmNfZ2l0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZDk5MWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjX2dpdC5iYmFwcGVuZApAQCAtMCwwICsxIEBACitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvZ2VuZXJpY3g4Ni02NC94b3JnLmNvbmYgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvZ2VuZXJpY3g4Ni02NC94b3JnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9nZW5lcmljeDg2LTY0L3hvcmcuY29uZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL2dlbmVyaWN4ODYveG9yZy5jb25mIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL2dlbmVyaWN4ODYveG9yZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvZ2VuZXJpY3g4Ni94b3JnLmNvbmYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZ18wLjEuYmJhcHBlbmQgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZDk5MWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiYXBwZW5kCkBAIC0wLDAgKzEgQEAKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmZkMDdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMTEgQEAKK0tCUkFOQ0hfZ2VuZXJpY3g4NiAgPSAic3RhbmRhcmQvY29tbW9uLXBjL2Jhc2UiCitLQlJBTkNIX2dlbmVyaWN4ODYtNjQgID0gInN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIgorCitLTUFDSElORV9nZW5lcmljeDg2ID89ICJjb21tb24tcGMiCitLTUFDSElORV9nZW5lcmljeDg2LTY0ID89ICJjb21tb24tcGMtNjQiCisKK1NSQ1JFVl9tYWNoaW5lX2dlbmVyaWN4ODYgPz0gImJkYTE3NTk2NjAwOWQ1YTk0MTAzNTU5ZTZlNmFlNTEyNzk5NTJmMzkiCitTUkNSRVZfbWFjaGluZV9nZW5lcmljeDg2LTY0ID89ICJiZGExNzU5NjYwMDlkNWE5NDEwMzU1OWU2ZTZhZTUxMjc5OTUyZjM5IgorCitDT01QQVRJQkxFX01BQ0hJTkVfZ2VuZXJpY3g4NiA9ICJnZW5lcmljeDg2IgorQ09NUEFUSUJMRV9NQUNISU5FX2dlbmVyaWN4ODYtNjQgPSAiZ2VuZXJpY3g4Ni02NCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODllY2U3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMjAgQEAKK0tCUkFOQ0hfZ2VuZXJpY3g4NiAgPSAic3RhbmRhcmQvY29tbW9uLXBjL2Jhc2UiCitLQlJBTkNIX2dlbmVyaWN4ODYtNjQgID0gInN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIgorS0JSQU5DSF9lZGdlcm91dGVyID0gInN0YW5kYXJkL2VkZ2Vyb3V0ZXIiCitLQlJBTkNIX2JlYWdsZWJvbmUgPSAic3RhbmRhcmQvYmVhZ2xlYm9uZSIKK0tCUkFOQ0hfbXBjODMxNWUtcmRiID0gInN0YW5kYXJkL2ZzbC1tcGM4MzE1ZS1yZGIiCisKK0tNQUNISU5FX2dlbmVyaWN4ODYgPz0gImNvbW1vbi1wYyIKK0tNQUNISU5FX2dlbmVyaWN4ODYtNjQgPz0gImNvbW1vbi1wYy02NCIKKworU1JDUkVWX21hY2hpbmVfZ2VuZXJpY3g4NiA/PSAiYWYxZjdmNTg2YmQzMmQzOWMwNTdmMTc2MDY5OTFiODg3ZWFkYjM4OSIKK1NSQ1JFVl9tYWNoaW5lX2dlbmVyaWN4ODYtNjQgPz0gIjU3ODYwMmE3MjJkYmZiMjYwODAxZjNiMzdjNmVhZmQyYWJiMjM0MGQiCitTUkNSRVZfbWFjaGluZV9lZGdlcm91dGVyID89ICI1Nzg2MDJhNzIyZGJmYjI2MDgwMWYzYjM3YzZlYWZkMmFiYjIzNDBkIgorU1JDUkVWX21hY2hpbmVfYmVhZ2xlYm9uZSA/PSAiNTc4NjAyYTcyMmRiZmIyNjA4MDFmM2IzN2M2ZWFmZDJhYmIyMzQwZCIKK1NSQ1JFVl9tYWNoaW5lX21wYzgzMTVlLXJkYiA/PSAiMWNiMWJiYWY2M2NlY2M5MThjZjM2Yzg5ODE5YTc0NjRhZjRjNGIxMyIKKworQ09NUEFUSUJMRV9NQUNISU5FX2dlbmVyaWN4ODYgPSAiZ2VuZXJpY3g4NiIKK0NPTVBBVElCTEVfTUFDSElORV9nZW5lcmljeDg2LTY0ID0gImdlbmVyaWN4ODYtNjQiCitDT01QQVRJQkxFX01BQ0hJTkVfZWRnZXJvdXRlciA9ICJlZGdlcm91dGVyIgorQ09NUEFUSUJMRV9NQUNISU5FX2JlYWdsZWJvbmUgPSAiYmVhZ2xlYm9uZSIKK0NPTVBBVElCTEVfTUFDSElORV9tcGM4MzE1ZS1yZGIgPSAibXBjODMxNWUtcmRiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4N2Y4NDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQKQEAgLTAsMCArMSwyMCBAQAorS0JSQU5DSF9nZW5lcmljeDg2ICA9ICJzdGFuZGFyZC9jb21tb24tcGMiCitLQlJBTkNIX2dlbmVyaWN4ODYtNjQgID0gInN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIgorS0JSQU5DSF9lZGdlcm91dGVyID0gInN0YW5kYXJkL2VkZ2Vyb3V0ZXIiCitLQlJBTkNIX2JlYWdsZWJvbmUgPSAic3RhbmRhcmQvYmVhZ2xlYm9uZSIKK0tCUkFOQ0hfbXBjODMxNWUtcmRiID0gInN0YW5kYXJkL2ZzbC1tcGM4MzE1ZS1yZGIiCisKK0tNQUNISU5FX2dlbmVyaWN4ODYgPz0gImNvbW1vbi1wYyIKK0tNQUNISU5FX2dlbmVyaWN4ODYtNjQgPz0gImNvbW1vbi1wYy02NCIKKworU1JDUkVWX21hY2hpbmVfZ2VuZXJpY3g4NiA/PSAiZTE1MjM0OWRlNTliNDNiMmE3NWYyYzMzMmI0NDE3MWRmNDYxZDVhMCIKK1NSQ1JFVl9tYWNoaW5lX2dlbmVyaWN4ODYtNjQgPz0gImUxNTIzNDlkZTU5YjQzYjJhNzVmMmMzMzJiNDQxNzFkZjQ2MWQ1YTAiCitTUkNSRVZfbWFjaGluZV9lZGdlcm91dGVyID89ICJlMTUyMzQ5ZGU1OWI0M2IyYTc1ZjJjMzMyYjQ0MTcxZGY0NjFkNWEwIgorU1JDUkVWX21hY2hpbmVfYmVhZ2xlYm9uZSA/PSAiZTE1MjM0OWRlNTliNDNiMmE3NWYyYzMzMmI0NDE3MWRmNDYxZDVhMCIKK1NSQ1JFVl9tYWNoaW5lX21wYzgzMTVlLXJkYiA/PSAiMjg5M2YzZThlY2U3MmY2ZjQ3MzI5NzE0ZDZhZmU0YzljNTQ1YmJmOSIKKworQ09NUEFUSUJMRV9NQUNISU5FX2dlbmVyaWN4ODYgPSAiZ2VuZXJpY3g4NiIKK0NPTVBBVElCTEVfTUFDSElORV9nZW5lcmljeDg2LTY0ID0gImdlbmVyaWN4ODYtNjQiCitDT01QQVRJQkxFX01BQ0hJTkVfZWRnZXJvdXRlciA9ICJlZGdlcm91dGVyIgorQ09NUEFUSUJMRV9NQUNISU5FX2JlYWdsZWJvbmUgPSAiYmVhZ2xlYm9uZSIKK0NPTVBBVElCTEVfTUFDSElORV9tcGM4MzE1ZS1yZGIgPSAibXBjODMxNWUtcmRiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEuYmJhcHBlbmQgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWZlMGU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEuYmJhcHBlbmQKQEAgLTAsMCArMSwxMSBAQAorS0JSQU5DSF9nZW5lcmljeDg2ICA9ICJzdGFuZGFyZC9iYXNlIgorS0JSQU5DSF9nZW5lcmljeDg2LTY0ICA9ICJzdGFuZGFyZC9iYXNlIgorCitLTUFDSElORV9nZW5lcmljeDg2ID89ICJjb21tb24tcGMiCitLTUFDSElORV9nZW5lcmljeDg2LTY0ID89ICJjb21tb24tcGMtNjQiCisKK1NSQ1JFVl9tYWNoaW5lX2dlbmVyaWN4ODYgPz0gIjRlMzBlNjRjNDRkZjllNTliZDEzMjM5OTUxYmI4ZDJiNWIyNzZlNmYiCitTUkNSRVZfbWFjaGluZV9nZW5lcmljeDg2LTY0ID89ICI0ZTMwZTY0YzQ0ZGY5ZTU5YmQxMzIzOTk1MWJiOGQyYjViMjc2ZTZmIgorCitDT01QQVRJQkxFX01BQ0hJTkVfZ2VuZXJpY3g4NiA9ICJnZW5lcmljeDg2IgorQ09NUEFUSUJMRV9NQUNISU5FX2dlbmVyaWN4ODYtNjQgPSAiZ2VuZXJpY3g4Ni02NCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by9jbGFzc2VzL3Bva3ktc2FuaXR5LmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEteW9jdG8vY2xhc3Nlcy9wb2t5LXNhbml0eS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YzI2NmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8vY2xhc3Nlcy9wb2t5LXNhbml0eS5iYmNsYXNzCkBAIC0wLDAgKzEsMjggQEAKKyMgUHJvdmlkZSBzb21lIGV4dGVuc2lvbnMgdG8gc2FuaXR5LmJiY2xhc3MgdG8gaGFuZGxlIHBva3ktc3BlY2lmaWMgY29uZiBmaWxlIHVwZ3JhZGVzCisKK3B5dGhvbiBwb2t5X3VwZGF0ZV9iYmxheWVyc2NvbmYoKSB7CisgICAgY3VycmVudF92ZXJzaW9uID0gaW50KGQuZ2V0VmFyKCdMQ09ORl9WRVJTSU9OJywgVHJ1ZSkgb3IgLTEpCisgICAgbGF0ZXN0X3ZlcnNpb24gPSBpbnQoZC5nZXRWYXIoJ0xBWUVSX0NPTkZfVkVSU0lPTicsIFRydWUpIG9yIC0xKQorCisgICAgYmJsYXllcnNfZm4gPSBiYmxheWVyc19jb25mX2ZpbGUoZCkKKyAgICBsaW5lcyA9IHNhbml0eV9jb25mX3JlYWQoYmJsYXllcnNfZm4pCisKKyAgICBpZiBjdXJyZW50X3ZlcnNpb24gPT0gNSBhbmQgbGF0ZXN0X3ZlcnNpb24gPiA1OgorICAgICAgICAjIEhhbmRsZSBzcGxpdCBvdXQgb2YgbWV0YS15b2N0by1ic3AgZnJvbSBtZXRhLXlvY3RvCisgICAgICAgIGlmICcvbWV0YS15b2N0by1ic3AnIG5vdCBpbiBkLmdldFZhcignQkJMQVlFUlMnLCBUcnVlKToKKyAgICAgICAgICAgIGluZGV4LCBtZXRhX3lvY3RvX2xpbmUgPSBzYW5pdHlfY29uZl9maW5kX2xpbmUoJ21ldGEteW9jdG9ccypcXFxcXFxuJywgbGluZXMpCisgICAgICAgICAgICBpZiBtZXRhX3lvY3RvX2xpbmU6CisgICAgICAgICAgICAgICAgbGluZXMuaW5zZXJ0KGluZGV4ICsgMSwgbWV0YV95b2N0b19saW5lLnJlcGxhY2UoJ21ldGEteW9jdG8nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZXRhLXlvY3RvLWJzcCcpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgpCisKKyAgICAgICAgY3VycmVudF92ZXJzaW9uICs9IDEKKyAgICAgICAgc2FuaXR5X2NvbmZfdXBkYXRlKGJibGF5ZXJzX2ZuLCBsaW5lcywgJ0xDT05GX1ZFUlNJT04nLCBjdXJyZW50X3ZlcnNpb24pCisgICAgICAgIHJldHVybgorCisgICAgc3lzLmV4aXQoKQorfQorCisjIFByZXBlbmQgdG8gZW5zdXJlIG91ciBmdW5jdGlvbiBydW5zIGJlZm9yZSB0aGUgT0UtQ29yZSBvbmUKK0JCTEFZRVJTX0NPTkZfVVBEQVRFX0ZVTkNTID0rICJwb2t5X3VwZGF0ZV9iYmxheWVyc2NvbmYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9iYmxheWVycy5jb25mLnNhbXBsZSBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2JibGF5ZXJzLmNvbmYuc2FtcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZGE1NjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9iYmxheWVycy5jb25mLnNhbXBsZQpAQCAtMCwwICsxLDE2IEBACisjIExBWUVSX0NPTkZfVkVSU0lPTiBpcyBpbmNyZWFzZWQgZWFjaCB0aW1lIGJ1aWxkL2NvbmYvYmJsYXllcnMuY29uZgorIyBjaGFuZ2VzIGluY29tcGF0aWJseQorTENPTkZfVkVSU0lPTiA9ICI2IgorCitCQlBBVEggPSAiJHtUT1BESVJ9IgorQkJGSUxFUyA/PSAiIgorCitCQkxBWUVSUyA/PSAiIFwKKyAgIyNPRVJPT1QjIy9tZXRhIFwKKyAgIyNPRVJPT1QjIy9tZXRhLXlvY3RvIFwKKyAgIyNPRVJPT1QjIy9tZXRhLXlvY3RvLWJzcCBcCisgICIKK0JCTEFZRVJTX05PTl9SRU1PVkFCTEUgPz0gIiBcCisgICMjT0VST09UIyMvbWV0YSBcCisgICMjT0VST09UIyMvbWV0YS15b2N0byBcCisgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2NvbmYtbm90ZXMudHh0IGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvY29uZi1ub3Rlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZlNjMxOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2NvbmYtbm90ZXMudHh0CkBAIC0wLDAgKzEsOCBAQAorQ29tbW9uIHRhcmdldHMgYXJlOgorICAgIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgIGNvcmUtaW1hZ2Utc2F0bworICAgIG1ldGEtdG9vbGNoYWluCisgICAgYWR0LWluc3RhbGxlcgorICAgIG1ldGEtaWRlLXN1cHBvcnQKKworWW91IGNhbiBhbHNvIHJ1biBnZW5lcmF0ZWQgcWVtdSBpbWFnZXMgd2l0aCBhIGNvbW1hbmQgbGlrZSAncnVucWVtdSBxZW11eDg2JwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL2luY2x1ZGUvbWFpbnRhaW5lcnMuaW5jIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL2luY2x1ZGUvbWFpbnRhaW5lcnMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmOGI2NDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9kaXN0cm8vaW5jbHVkZS9tYWludGFpbmVycy5pbmMKQEAgLTAsMCArMSw3NjEgQEAKKyMgWW9jdG8gUHJvamVjdCAvIE9wZW5FbWJlZGRlZC1Db3JlIChPRS1Db3JlKSBNYWludGFpbmVycyBGaWxlCisjCisjIFRoaXMgZmlsZSBjb250YWlucyBhIGxpc3Qgb2YgcmVjaXBlIG1haW50YWluZXJzLgorIworIyBQbGVhc2Ugc3VibWl0IGFueSBwYXRjaGVzIGFnYWluc3QgcmVjaXBlcyBpbiBtZXRhIHRvIHRoZSAKKyMgT0UtQ29yZSBtYWlsIGxpc3QgKG9wZW5lbWJlZGRlZC1jb3JlQGxpc3RzLm9wZW5lbWJlZGRlZC5vcmcpCisjIEZvciByZWNpcGVzIGluIG1ldGEteW9jdG8gcGxlYXNlIHVzZSB0aGUgUG9reSBsaXN0IChwb2t5QHlvY3RvcHJvamVjdC5vcmcpCisjCisjIElmIHlvdSBoYXZlIHByb2JsZW1zIHdpdGggb3IgcXVlc3Rpb25zIGFib3V0IGEgcGFydGljdWxhciByZWNpcGUsIGZlZWwKKyMgZnJlZSB0byBjb250YWN0IHRoZSBtYWludGFpbmVyIGRpcmVjdGx5IChjYzppbmcgdGhlIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdAorIyBwdXRzIGl0IGluIHRoZSBhcmNoaXZlIGFuZCBoZWxwcyBvdGhlciBwZW9wbGUgd2hvIG1pZ2h0IGhhdmUgdGhlIHNhbWUKKyMgcXVlc3Rpb25zIGluIHRoZSBmdXR1cmUpLCBidXQgcGxlYXNlIHRyeSB0byBkbyB0aGUgZm9sbG93aW5nIGZpcnN0OgorIworIyAgLSBsb29rIGluIHRoZSBZb2N0byBQcm9qZWN0IEJ1Z3ppbGxhCisjICAgIChodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8pIHRvIHNlZSBpZiBhIHByb2JsZW0gaGFzCisjICAgIGFscmVhZHkgYmVlbiByZXBvcnRlZAorIworIyAtIGxvb2sgdGhyb3VnaCByZWNlbnQgZW50cmllcyBvZiB0aGUgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0IGFyY2hpdmVzCisjICAgKGh0dHA6Ly9saXN0cy5saW51eHRvZ28ub3JnL3BpcGVybWFpbC9vcGVuZW1iZWRkZWQtY29yZSBvcgorIyAgICBodHRwczovL2xpc3RzLnlvY3RvcHJvamVjdC5vcmcvcGlwZXJtYWlsL3Bva3kvKSB0byBzZWUgaWYgb3RoZXIKKyMgICBwZW9wbGUgaGF2ZSBydW4gaW50byBzaW1pbGFyIHByb2JsZW1zIG9yIGhhZCBzaW1pbGFyIHF1ZXN0aW9ucworIyAgIGFuc3dlcmVkLgorIworIyBUaGUgZm9ybWF0IGlzIGFzIGEgYml0YmFrZSB2YXJpYWJsZSBvdmVycmlkZSBmb3IgZWFjaCByZWNpcGUKKyMKKyMJUkVDSVBFX01BSU5UQUlORVJfcG4tPHJlY2lwZSBuYW1lPiA9ICJGdWxsIE5hbWUgPGFkZHJlc3NAZG9tYWluPiIKKyMKKyMgUGxlYXNlIGtlZXAgdGhpcyBsaXN0IGluIGFscGhhYmV0aWNhbCBvcmRlci4KKyMKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFjbCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYWNwaWQgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYWR0LWluc3RhbGxlciA9ICJKZXNzaWNhIFpoYW5nIDxqZXNzaWNhLnpoYW5nQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hZHdhaXRhLWljb24tdGhlbWUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hbHNhLWxpYiA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hbHNhLXBsdWdpbnMgPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYWxzYS1zdGF0ZSA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hbHNhLXRvb2xzID0gIlRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFsc2EtdXRpbHMgPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYWxzYS11dGlscy1zY3JpcHRzID0gIlRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFwbWQgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hcHIgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFwci11dGlsID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hcHQgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXNwZWxsID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWF0ayA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWF0ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hdC1zcGkyLWF0ayA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWF0LXNwaTItY29yZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWF0dHIgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWF1Z2VhcyA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hdXRvY29uZiA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hdXRvZ2VuID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWF1dG9tYWtlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWF2YWhpLXVpID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWF2YWhpID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJhYmVsdHJhY2UgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iYXNlLWZpbGVzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYmFzZS1wYXNzd2QgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iYXNoID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iYyA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iZHdnYyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iZWVjcnlwdCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYmlncmVxc3Byb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5qdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYmluZCA9ICJLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iaW51dGlscyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iaXNvbiA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYmxrdG9vbCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ibGt0cmFjZSA9ICJUb20gWmFudXNzaSA8dG9tLnphbnVzc2lAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJsdWV6NSA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJvb3N0ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYnRyZnMtdG9vbHMgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYnVpbGQtYXBwbGlhbmNlLWltYWdlID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYnVpbGQtY29tcGFyZSA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJ1aWxkZXIgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1idXN5Ym94ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ieWFjYyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYnppcDIgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNhLWNlcnRpZmljYXRlcyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNhaXJvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY2FsaWJyYXRlcHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jY2FjaGUgPSAiV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY2RydG9vbHMgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY2hrY29uZmlnID0gIldlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNoa2NvbmZpZy1hbHRlcm5hdGl2ZXMtbmF0aXZlID0gIldlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNocnBhdGggPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY2x1dHRlci1nc3QtMy4wID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY2x1dHRlci1ndGstMS4wID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY2x1dHRlci0xLjAgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jbWFrZS1uYXRpdmUgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY21ha2UgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29nbC0xLjAgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb21wb3NpdGVwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvbm5tYW4gPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb25ubWFuLWdub21lID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29uc29sZWtpdCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29uc29sZS10b29scyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1iYXNlID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1jbHV0dGVyID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1kaXJlY3RmYiA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1sc2ItZGV2ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1sc2IgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLWxzYi1zZGsgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLW1pbmltYWwtZGV2ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2UtbWluaW1hbC1tdGR1dGlscyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2UtbWluaW1hbCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2UtcnQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLXJ0LXNkayA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2Utc2F0by1kZXYgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLXNhdG8gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLXNhdG8tc2RrID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS14MTEgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JldXRpbHMgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNwaW8gPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNyYWNrbGliID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jcmVhdGVyZXBvID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jcm9uaWUgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZSA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWN1cHMgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWN1cmwgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWN3YXV0b21hY3JvcyA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRhbWFnZXByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGIgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kYnVzID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kYnVzLWdsaWIgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRidXMtdGVzdCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGJ1cy13YWl0ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kZXNrdG9wLWZpbGUtdXRpbHMtbmF0aXZlID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGhjcCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGlmZnN0YXQgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRpZmZ1dGlscyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGlyZWN0ZmItZXhhbXBsZXMgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRpcmVjdGZiID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kaXN0Y2MgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRpc3RjYy1jb25maWcgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZG14cHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kb2Nib29rLWRzc3NsLXN0eWxlc2hlZXQgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZG9jYm9vay1kc3NzbC1zdHlsZXNoZWV0cy1uYXRpdmUgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZG9jYm9vay1zZ21sLWR0ZC0zLjEtbmF0aXZlID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRvY2Jvb2stc2dtbC1kdGQtNC4xLW5hdGl2ZSA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kb2Nib29rLXNnbWwtZHRkLTQuNS1uYXRpdmUgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZG9jYm9vay1zZ21sLWR0ZCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kb2Nib29rLXV0aWxzID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRvc2ZzdG9vbHMgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZHBrZyA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kcmkycHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kcmkzcHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kcm9wYmVhciA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kdGMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1lMmZzcHJvZ3MgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZWQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1lZWUtYWNwaS1zY3JpcHRzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZWxmdXRpbHMgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWVuY2hhbnQgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1lbmNvZGluZ3MgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1lcGlwaGFueSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWV0aHRvb2wgPSAiUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1leHBhdCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1maWxlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWZpbmR1dGlscyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZml4ZXNwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWZsYWMgPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZmxleCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZm9udC1hbGlhcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWZvbnRjb25maWcgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1mb250c3Byb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZm9udC11dGlsID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZm9vbWF0aWMtZmlsdGVycyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZm9ybWZhY3RvciA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWZvdG93YWxsID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWZyZWV0eXBlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZnN0ZXN0cyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nYWt1ID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2F3ayA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2NjID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdjYy1zb3VyY2UgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2NjbWFrZWRlcCA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nY2MtcnVudGltZSA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nY29uZiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdjciA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdkYiA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nZGJtID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2RrLXBpeGJ1ZiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdlbmV4dDJmcyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nZXR0ZXh0LW1pbmltYWwtbmF0aXZlID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nZXR0ZXh0ID0gIldlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdob3N0c2NyaXB0ID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1naWZsaWIgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1naXQgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2xldyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdsaWItMi4wID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2xpYmMgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2xpYi1uZXR3b3JraW5nID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2xwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdtcCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbm9tZS1jb21tb24gPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ25vbWUtZGVza3RvcCA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbm9tZS1kZXNrdG9wLXRlc3RpbmcgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbm9tZS1kZXNrdG9wMyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdub21lLWRvYy11dGlscyA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbm9tZS1taW1lLWRhdGEgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ251LWNvbmZpZyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbnUtZWZpID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdudXBnID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbnV0bHMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ncGVyZiA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdwZ21lID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdyZXAgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdyb2ZmID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ncnViID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3N0cmVhbWVyMS4wID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3N0cmVhbWVyMS4wLWxpYmF2ID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5ID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3N0LXBsYXllciA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd0ay1kb2Mtc3R1YiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd0ay1kb2MgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ndGstZW5naW5lcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd0ay1zYXRvLWVuZ2luZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd0ay10aGVtZS10b3J0dXJlciA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd0ay1pY29uLXV0aWxzLW5hdGl2ZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd0aysgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ndGsrMyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd1aWxlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd1aWx0LW5hdGl2ZSA9ICJCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ndW1taWJvb3QgPSAiRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3ppcCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taGFyZmJ1enogPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1oZHBhcm0gPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taGVscDJtYW4tbmF0aXZlID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1oaWNvbG9yLWljb24tdGhlbWUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ob3N0YXAtY29uZiA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWhvc3RhcC11dGlscyA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWh3bGF0ZGV0ZWN0ID0gIkRhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taWN1ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taW5pdHJhbWZzLWJvb3QgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pbml0cmFtZnMtZnJhbWV3b3JrID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taW5pdHJhbWZzLWxpdmUtYm9vdCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWluaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taW5pdHJhbWZzLWxpdmUtaW5zdGFsbCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWluaXRzY3JpcHRzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taW5wdXRwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWluc3NlcnYgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taW50bHRvb2wgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taXByb3V0ZTIgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pcHRhYmxlcyA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWlwdXRpbHMgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taXJkYS11dGlscyA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWlzby1jb2RlcyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWpwZWcgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tanNvbi1nbGliID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4ta2JkID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4ta2Jwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWtjb25maWctZnJvbnRlbmRzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4ta2VybmVsc2hhcmsgPSAiRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4ta2Vybi10b29scy1uYXRpdmUgPSAiQnJ1Y2UgQXNoZmllbGQgPGJydWNlLmFzaGZpZWxkQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4ta2V4ZWMtdG9vbHMgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4ta2V5bWFwcyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWttb2QgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxhbWUgPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGF0ZW5jeXRvcCA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sZGNvbmZpZy1uYXRpdmUgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sZWFmcGFkID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGVzcyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJhNTIgPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliYWNwaSA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJhaW8gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJhcmNoaXZlID0gIlBhdWwgQmFya2VyIDxwYXVsQHBhdWxiYXJrZXIubWUudWs+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliYXJ0LWxncGwgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJhc3N1YW4gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJhdG9taWNzLW9wcyA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmF2ID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmJzZCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJjYXAgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliY2dyb3VwID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliY2hlY2sgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliY2xhc3MtaXNhLXBlcmwgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJjb252ZXJ0LWFzbjEtcGVybCA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmNyb2NvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZGFlbW9uID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZG14ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5qdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZHJtID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmR1bXB2YWx1ZS1wZXJsID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZW52LXBlcmwgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJlcG94eSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmVyYXRpb24tZm9udHMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJldmRldiA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJldmVudCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJleGlmID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZmFrZWtleSA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmZmaSAgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJmaWxlLWNoZWNrdHJlZS1wZXJsID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZm0gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJmb250ZW5jID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZ2NjID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmdjcnlwdCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZ2ZvcnRyYW4gPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZ2xhZGUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJnbHUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmp1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJncGctZXJyb3IgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliaTE4bi1jb2xsYXRlLXBlcmwgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJpY2FsID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliaWNlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliaWNvbnYgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJpZDN0YWcgPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliaWRuID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliaW5wdXQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJqc29uID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmtzYmEgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJtYWQgPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlibWF0Y2hib3ggPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJtcGMgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlibmV3dCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlibmV3dC1weXRob24gPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm5mc2lkbWFwID0gIlJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlibmwgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJub3RpZnkgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJuc3MtbWRucyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm9nZyA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm9pbCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm9teGlsID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlib3dsLWF2ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlib3dsID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlicGFtID0gIlJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlicGNhcCA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnBjaWFjY2VzcyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJwY3JlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnBmbTQgPSAiTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJwbmcgPSAiUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJwbmcxMiA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnBvZC1wbGFpbmVyLXBlcmwgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJwcm94eSA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnB0aHJlYWQtc3R1YnMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJyc3ZnID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlic2FtcGxlcmF0ZTAgPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlic2RsID0gIkthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnNkbDIgPSAiS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlic2VjcmV0ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlic20gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJzbmRmaWxlMSA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJzb3VwLTIuNCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnRhc24xID0gIlJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidGVsZXBhdGh5ID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidGhlb3JhID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidGltZWRhdGUtcGVybCA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnRpcnBjID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidG9vbCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ1bmlzdHJpbmcgPSAiUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ1cmN1ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidXJpLXBlcmwgPSAiS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidXNiMSA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ1c2ItY29tcGF0ID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnVzZXIgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidm9yYmlzID0gIlRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYndlYnAgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ3bmNrMyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYngxMS1kaWV0ID0gIkthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYngxMSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhhdSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhjYWxpYnJhdGUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4Y2IgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4Y29tcG9zaXRlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGN1cnNvciA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhkYW1hZ2UgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4ZG1jcCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhleHQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4Zml4ZXMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4Zm9udCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhmdCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhpbmVyYW1hID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGkgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4a2Jjb21tb24gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmp1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4a2JmaWxlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieG1sMiA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieG1sLW5hbWVzcGFjZXN1cHBvcnQtcGVybCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhtbC1wYXJzZXItcGVybCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieG1sLXBlcmwgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4bWwtc2F4LXBlcmwgPSAiS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieG1sLXNpbXBsZS1wZXJsID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieG11ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHBtID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHAgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4cmFuZHIgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4cmVuZGVyID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHJlcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhzY3Juc2F2ZXIgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4c2V0dGluZ3MtY2xpZW50ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHNobWZlbmNlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHNsdCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnh0ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHRzdCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnh2bWMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4diA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnh4Zjg2ZGdhID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHhmODZtaXNjID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHhmODZ2bSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnlhbWwgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWdodHRwZCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpbnV4ZG9jLXRvb2xzID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpbnV4LWR1bW15ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGludXgtZmlybXdhcmUgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saW51eC1saWJjLWhlYWRlcnMgPSAiQnJ1Y2UgQXNoZmllbGQgPGJydWNlLmFzaGZpZWxkQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGludXgtbGliYy1oZWFkZXJzLXlvY3RvID0gIkJydWNlIEFzaGZpZWxkIDxicnVjZS5hc2hmaWVsZEB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpbnV4LXlvY3RvID0gIkRhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpbnV4LXlvY3RvLWRldiA9ICJEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saW51eC15b2N0by1ydCA9ICJEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saW51eC15b2N0by10aW55ID0gIkRhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxvZ3JvdGF0ZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1scnpzeiA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxzYmluaXRzY3JpcHRzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbHNidGVzdCA9ICJZaSBaaGFvIDx5aS56aGFvQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbHNiID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sc29mID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWx0cCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sdHRuZy1tb2R1bGVzID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWx0dG5nLXRvb2xzID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWx0dG5nLXVzdCA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sem9wID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbHpvID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbHo0ID0gIkFybWluIEt1c3RlciA8YWt1c3RlcjgwOEBnbWFpbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbTQgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWFpbHggPSAiS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWFrZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYWtlZGVwZW5kID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1ha2VkZXZzID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYW4tcGFnZXMgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hbiA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWF0Y2hib3gtY29uZmlnLWd0ayA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hdGNoYm94LWRlc2t0b3Atc2F0byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hdGNoYm94LWRlc2t0b3AgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYXRjaGJveC1rZXlib2FyZCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hdGNoYm94LXBhbmVsLTIgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYXRjaGJveC1zZXNzaW9uLXNhdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYXRjaGJveC1zZXNzaW9uID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWF0Y2hib3gtdGVybWluYWwgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYXRjaGJveC10aGVtZS1zYXRvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWF0Y2hib3gtd20gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYyA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tZGFkbSA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1lbnUtY2FjaGUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tZXNhID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWVzYS1kZW1vcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1lc2EtZ2wgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tZXRhLWlkZS1zdXBwb3J0ID0gIkplc3NpY2EgWmhhbmcgPGplc3NpY2EuemhhbmdAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1ldGEtdG9vbGNoYWluLXF0ZSA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tZXRhLXRvb2xjaGFpbiA9ICJKZXNzaWNhIFpoYW5nIDxqZXNzaWNhLnpoYW5nQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1taW5nZXR0eSA9ICJLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1taW5pY29tID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWluaS14LXNlc3Npb24gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmp1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ta2VsZmltYWdlID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWtmb250ZGlyID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5qdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWtmb250c2NhbGUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmp1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ta2xpYnMtbmF0aXZlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1rdGVtcCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tb2JpbGUtYnJvYWRiYW5kLXByb3ZpZGVyLWluZm8gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tb2R1dGlscy1pbml0c2NyaXB0cyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tcGVnMmRlYyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1wZnIgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbXNtdHAgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tdGRldiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW10ZC11dGlscyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW10b29scyA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW14LTEuMCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW5hc20gPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1xdGUtdG9vbGNoYWluLWhvc3QgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmF0aXZlc2RrLXFlbXUtaGVscGVyID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmF0aXZlc2RrLXF0NC10b29scyA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uY3Vyc2VzID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uZWFyZCA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW5lb24gPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uZXRiYXNlID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmV0dGxlID0gIkFybWluIEt1c3RlciA8YWt1c3RlcjgwOEBnbWFpbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmV0LXRvb2xzID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmZzLWV4cG9ydC1yb290ID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW5mcy11dGlscyA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ucHRoID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbnNwciA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW5zcyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9jZi1saW51eCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9mb25vID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb2gtcHV6emxlcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wZW5qYWRlID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wZW5zcCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1vcGVuc3NoID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wZW5zc2wgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1vcGtnLWNvbGxhdGVyYWwgPSAiUGF1bCBCYXJrZXIgPHBhdWxAcGF1bGJhcmtlci5tZS51az4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1vcGtnLWNvbmZpZy1iYXNlID0gIlBhdWwgQmFya2VyIDxwYXVsQHBhdWxiYXJrZXIubWUudWs+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb3BrZyA9ICJQYXVsIEJhcmtlciA8cGF1bEBwYXVsYmFya2VyLm1lLnVrPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wa2ctdXRpbHMgPSAiUGF1bCBCYXJrZXIgPHBhdWxAcGF1bGJhcmtlci5tZS51az4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1vcHJvZmlsZSA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1vcHJvZmlsZXVpID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wcm9maWxldWktc2VydmVyID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb3NzcC11dWlkID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb3dsLXZpZGVvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcDExLWtpdCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1iYXNlID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtYm9vdCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLWJ1aWxkZXNzZW50aWFsID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtY2x1dHRlciA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLWRldmljZS1kZXZlbCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLWRpcmVjdGZiID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtbHNiID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtbmZzID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLXF0NGUgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtcXQgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtc2RrID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtc3NoLWRyb3BiZWFyID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtc3NoLW9wZW5zc2ggPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS10b29scy1kZWJ1ZyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXByb2ZpbGUgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS10b29scy10ZXN0YXBwcyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLXgxMS1iYXNlID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS14MTEgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS14MTEteHNlcnZlciA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1xdGUtdG9vbGNoYWluLXRhcmdldCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlLWluZGV4ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFuZ28gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYXJ0ZWQgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhdGNoID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYXgtdXRpbHMgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBheCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGNpdXRpbHMgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBjbWFuZm0gPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGNtY2lhdXRpbHMgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGVyZiA9ICJCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wZXJsID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1waWdsaXQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1waWd6ID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1waW5lbnRyeSA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXI4MDhAZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBpeG1hbiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBrZ2NvbmZpZyA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wbS11dGlscyA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBvaW50ZXJjYWwgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wb25nLWNsb2NrID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcG9wdCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wb3J0bWFwID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBvd2VydG9wID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBwcCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHBwLWRpYWxpbiA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHJlbGluayA9ICJNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHJlc2VudHByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHJvY3BzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHNldWRvID0gIk1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wc21pc2MgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wc3BsYXNoID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB0aCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB1bHNlYXVkaW8gPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHV6emxlcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbiA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tYXN5bmMgPSAiUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tZGJ1cyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tZGlzdHJpYnV0ZSA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tZG9jdXRpbHMgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLWdpdCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tZ2l0ZGIgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLWltYWdpbmcgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLW1ha28gPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tbm9zZSA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1udW1weSA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1weWNhaXJvID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1weWN1cmwgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLXB5Z29iamVjdCA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tcHlndGsgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLXB5cmV4ID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1zY29ucyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tc2V0dXB0b29scyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tc21hcnRwbSA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tc21tYXAgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uMyA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24zLWRpc3RyaWJ1dGUgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1xZW11LWhlbHBlci1uYXRpdmUgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1xZW11ID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcW1tcCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcXQ0ZS1kZW1vLWltYWdlID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXF0NC1lbWJlZGRlZCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1xdDQtZ3JhcGhpY3Mtc3lzdGVtID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXF0NC1uYXRpdmUgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcXQ0LXgxMS1mcmVlID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXF0LWRlbW8taW5pdCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1xdWlja3kgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcXVpbHQgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcXVvdGEgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1yYW5kcnByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcmVhZGxpbmUgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXJlY29yZHByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcmVtYWtlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXJlbmRlcnByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcmVzb2x2Y29uZiA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcmVzb3VyY2Vwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXJnYiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXJwY2JpbmQgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXJwbSA9ICJNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcnBtcmVzb2x2ZSA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1yc3luYyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ydC10ZXN0cyA9ICJEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ydWJ5ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcnVuLXBvc3RpbnN0cyA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXJ4dnQtdW5pY29kZSA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNhdG8taWNvbi10aGVtZSA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zYXRvLXNjcmVlbnNob3QgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmp1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zYmMgPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2NyZWVuID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNjcm5zYXZlcnByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2VkID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zZXRzZXJpYWwgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2V0dGluZ3MtZGFlbW9uID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2dtbC1jb21tb24gPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2dtbHNwbCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zaGFkb3cgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNoYWRvdy1zZWN1cmV0dHkgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNoYWRvdy1zeXNyb290ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zaGFyZWQtbWltZS1pbmZvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2h1dGRvd24tZGVza3RvcCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNsYW5nID0gIkthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNvY2F0ID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zcGVleCA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zcGVleGRzcCA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zcWxpdGUzID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNxdWFzaGZzLXRvb2xzID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXN0YXJ0dXAtbm90aWZpY2F0aW9uID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3RhdCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3RyYWNlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXN1YnZlcnNpb24gPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3VkbyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3dhYmJlci1uYXRpdmUgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zeXNmc3V0aWxzID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zeXNrbG9nZCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzbGludXggPSAiRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzcHJvZiA9ICJUb20gWmFudXNzaSA8dG9tLnphbnVzc2lAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXN5c3N0YXQgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXN5c3RlbWQgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXN5c3RlbXRhcCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXN5c3RlbXRhcC11cHJvYmVzID0gIlRvbSBaYW51c3NpIDx0b20uemFudXNzaUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzdmluaXQtaW5pdHRhYiA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXN5c3Zpbml0ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGFnbGliID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGFyLXJlcGxhY2VtZW50LW5hdGl2ZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10YXIgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRjZi1hZ2VudCA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRjbCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10Y3Atd3JhcHBlcnMgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGNwLXdyYXBwZXJzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGVsZXBhdGh5LWdsaWIgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10ZWxlcGF0aHktaWRsZSA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRlbGVwYXRoeS1taXNzaW9uLWNvbnRyb2wgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10ZWxlcGF0aHktcHl0aG9uID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGV4aTJodG1sID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRleGluZm8gPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGlmZiA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRpbWUgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGlueS1pbml0ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdHJhY2UtY21kID0gIkRhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRyZW1vciA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10c2xpYiA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10dGYtYml0c3RyZWFtLXZlcmEgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdHpjb2RlLW5hdGl2ZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10emRhdGEgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdS1ib290ID0gIkRlbnlzIERteXRyaXllbmtvIDxkZW5pc0BkZW5peC5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdS1ib290LWZ3LXV0aWxzID0gIkRlbnlzIERteXRyaXllbmtvIDxkZW5pc0BkZW5peC5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdS1ib290LW1raW1hZ2UgPSAiRGVueXMgRG15dHJpeWVua28gPGRlbmlzQGRlbml4Lm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11Ym9vdGNoYXJ0ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdWNsaWJjID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdWRldi1leHRyYWNvbmYgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdWRldiA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11bmlmZGVmID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXVuemlwID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXVwZGF0ZS1yYy5kID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdXNiaW5pdCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXVzYnV0aWxzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdW5mczMgPSAiUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11dGlsLWxpbnV4ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11dGlsLW1hY3JvcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXY4NmQgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdmFsYSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXZhbGdyaW5kID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdmlkZW9wcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXZ0ZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXdhZmZsZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXdhdGNoZG9nID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4td2F5bGFuZCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXdlYmtpdGd0ayA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXdlYi13ZWJraXQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi13ZXN0b24gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi13Z2V0ID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXdoaWNoID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXdpcmVsZXNzLXRvb2xzID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4td3BhLXN1cHBsaWNhbnQgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14MTEtY29tbW9uID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teDExcGVyZiA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14MTF2bmMgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teDI2NCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14YXV0aCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhjYi1wcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhjYi11dGlsLWltYWdlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGNiLXV0aWwta2V5c3ltcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhjYi11dGlsID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGNiLXV0aWwtcmVuZGVydXRpbCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhjYi11dGlsLXdtID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGNtaXNjcHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGRnLXV0aWxzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGRweWluZm8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14ZXYgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14ZXh0cHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14ZXllcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODZkZ2Fwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODZkcmlwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtaW5wdXQtZXZkZXYgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LWlucHV0LWtleWJvYXJkID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4Ni1pbnB1dC1tb3VzZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtaW5wdXQtc3luYXB0aWNzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4Ni1pbnB1dC12bW1vdXNlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4Nm1pc2Nwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtdmlkZW8tY2lycnVzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4Ni12aWRlby1mYmRldiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtdmlkZW8taW50ZWwgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LXZpZGVvLW1vZGVzZXR0aW5nID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4Ni12aWRlby1vbWFwZmIgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LXZpZGVvLW9tYXAgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LXZpZGVvLXZlc2EgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LXZpZGVvLXZtd2FyZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODZ2aWRtb2RlcHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14aG9zdCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhpbmVyYW1hcHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14aW5ldGQgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGluaXQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14aW5wdXQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14aW5wdXQtY2FsaWJyYXRvciA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhrYmNvbXAgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14a2V5Ym9hcmQtY29uZmlnID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teG1sdG8gPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhtb2RtYXAgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14b3JnLW1pbmltYWwtZm9udHMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14cHJvcCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhyYW5kciA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14cmVzdG9wID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teHNlcnZlci1ub2RtLWluaXQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14c2VydmVyLXhmODYtY29uZmlnID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teHNlcnZlci14b3JnID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teHNldCA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14dHJhbnMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14dHNjYWwgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14dmlkZW8tdGVzdHMgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14dmluZm8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14d2luaW5mbyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXh6ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi15YXNtID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXphdXJ1c2QgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4temlwID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi16bGliID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9kaXN0cm8vaW5jbHVkZS9wb2t5LWZsb2F0aW5nLXJldmlzaW9ucy5pbmMgYi95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9kaXN0cm8vaW5jbHVkZS9wb2t5LWZsb2F0aW5nLXJldmlzaW9ucy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjExZjJjZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9pbmNsdWRlL3Bva3ktZmxvYXRpbmctcmV2aXNpb25zLmluYwpAQCAtMCwwICsxLDczIEBACisjCisjIFBhY2thZ2UgVmVyc2lvbnMgZm9yIGN1dHRpbmcgZWRnZSB0ZXN0aW5nOgorIworCisjU1JDUkVWX3BuLW9wa2ctbmF0aXZlID89ICIke0FVVE9SRVZ9IgorI1NSQ1JFVl9wbi1vcGtnLXNkayA/PSAiJHtBVVRPUkVWfSIKKyNTUkNSRVZfcG4tb3BrZyA/PSAiJHtBVVRPUkVWfSIKKyNTUkNSRVZfcG4tb3BrZy11dGlscy1uYWl0dmUgPz0gIiR7QVVUT1JFVn0iCisjU1JDUkVWX3BuLW9wa2ctdXRpbHMgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tZ2NvbmYtZGJ1cyA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1tYXRjaGJveC1jb21tb24gPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbWF0Y2hib3gtY29uZmlnLWd0ayA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1tYXRjaGJveC1kZXNrdG9wID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW1hdGNoYm94LWtleWJvYXJkID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW1hdGNoYm94LXBhbmVsID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW1hdGNoYm94LXBhbmVsLTIgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbWF0Y2hib3gtdGhlbWVzLWV4dHJhID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW1hdGNoYm94LXRlcm1pbmFsID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW1hdGNoYm94LXdtID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW1hdGNoYm94LXdtLTIgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tc2V0dGluZ3MtZGFlbW9uID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLXNjcmVlbnNob3QgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbGliZmFrZWtleSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1vcHJvZmlsZXVpID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLXphdXJ1c2QgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbGlib3dsLWF2ID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW93bC12aWRlbyA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1wc3BsYXNoID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLWV4bWFwLWNvbnNvbGUgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tZ3RrLXNhdG8tZW5naW5lID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW1hdGNoYm94LXRoZW1lLXNhdG8gPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbWF0Y2hib3gtdGhlbWUtc2F0by0yID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLXNhdG8taWNvbi10aGVtZSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1tYXRjaGJveC1kZXNrdG9wLXNhdG8gPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tb2gtcHV6emxlcyA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1saWJvd2wgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbWF0Y2hib3gtYXBwbGV0LWxpZ2h0ID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLWZzdGVzdHMgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4teHZpZGVvLXRlc3RzID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLWNsdXR0ZXIgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tY2x1dHRlci1nc3QgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tZ2FrdSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1neXBzeSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1hYWluYSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1jbHV0dGVyLWNhaXJvID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLXRhYmxlID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLWxpYm1hdGNoYm94ID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLXRhc2tzID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW9mb25vID89ICIke0FVVE9SRVZ9IgorCitTUkNSRVZfcG4tZHJpMnByb3RvID0gIiR7QVVUT1JFVn0iCisjUFJFRkVSUkVEX1ZFUlNJT05fZHJpMnByb3RvID89ICIxLjk5LjErZ2l0JSIKK1NSQ1JFVl9wbi1saWJkcm0gPSAiJHtBVVRPUkVWfSIKKyNQUkVGRVJSRURfVkVSU0lPTl9saWJkcm0gPz0gIjIuNC4wK2dpdCUiCitTUkNSRVZfcG4tbGlieGNiID0gIiR7QVVUT1JFVn0iCisjUFJFRkVSUkVEX1ZFUlNJT05fbGlieGNiID89ICIxLjEuOTAuMStnaXRyJSIKK1NSQ1JFVl9wbi1saWItcHJvdG8gPSAiJHtBVVRPUkVWfSIKKyNQUkVGRVJSRURfVkVSU0lPTl94Y2ItcHJvdG8gPz0gIjEuMitnaXRyJSIKK1NSQ1JFVl9wbi1saWJ4Y2Itc2RrID0gIiR7QVVUT1JFVn0iCisjUFJFRkVSUkVEX1ZFUlNJT05fbGlieGNiLXNkayA/PSAiMS4xLjkwLjErZ2l0ciUiCitTUkNSRVZfcG4teGY4Ni1pbnB1dC1ldmRldiA9ICIke0FVVE9SRVZ9IgorI1BSRUZFUlJFRF9WRVJTSU9OX3hmODYtaW5wdXQtZXZkZXYgPz0gIjIuMC40IgorU1JDUkVWX3BuLXhmODYtaW5wdXQtbW91c2UgPSAiJHtBVVRPUkVWfSIKKyNQUkVGRVJSRURfVkVSU0lPTl94Zjg2LWlucHV0LW1vdXNlID89ICIxLjMuMCtnaXQlIgorU1JDUkVWX3BuLXhmODYtaW5wdXQta2V5Ym9hcmQgPSAiJHtBVVRPUkVWfSIKKyNQUkVGRVJSRURfVkVSU0lPTl94Zjg2LWlucHV0LWtleWJvYXJkID89ICIxLjMuMStnaXQlIgorU1JDUkVWX3BuLXhmODYtaW5wdXQtc3luYXB0aWNzID0gIiR7QVVUT1JFVn0iCisjUFJFRkVSUkVEX1ZFUlNJT05feGY4Ni1pbnB1dC1zeW5hcHRpY3MgPz0gIjAuMTUuMitnaXQlIgorCisjU1JDREFURV9vcHJvZmlsZSA/PSAiJHtEQVRFfSIKKworUFJFRkVSUkVEX1ZFUlNJT05fb3Byb2ZpbGUgPz0gIjAuOS40K2N2cyR7U1JDREFURV9vcHJvZmlsZX0iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9wb2t5LWJsZWVkaW5nLmNvbmYgYi95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9kaXN0cm8vcG9reS1ibGVlZGluZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkM2UwNDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9kaXN0cm8vcG9reS1ibGVlZGluZy5jb25mCkBAIC0wLDAgKzEsMTEgQEAKK1BSRUZFUlJFRF9WRVJTSU9OX2dsaWItMi4wID89ICIyLjE3LjQiCitQUkVGRVJSRURfVkVSU0lPTl9nbGliLTIuMC1uYXRpdmUgPz0gIjIuMTcuNCIKK1BSRUZFUlJFRF9WRVJTSU9OX2F0ayA/PSAiMS4yMi4wIgorUFJFRkVSUkVEX1ZFUlNJT05fcGFuZ28gPz0gIjEuMjEuMiIKK1BSRUZFUlJFRF9WRVJTSU9OX2d0aysgPz0gIjIuMTMuMyIKKworcmVxdWlyZSBjb25mL2Rpc3Ryby9pbmNsdWRlL3Bva3ktZmxvYXRpbmctcmV2aXNpb25zLmluYworcmVxdWlyZSBjb25mL2Rpc3Ryby9wb2t5LmNvbmYKKworRElTVFJPID0gInBva3ktYmxlZWRpbmciCitESVNUUk9PVkVSUklERVMgPSAicG9reSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9wb2t5LWxzYi5jb25mIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL3Bva3ktbHNiLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYyYmU4MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9wb2t5LWxzYi5jb25mCkBAIC0wLDAgKzEsMTUgQEAKKworcmVxdWlyZSBjb25mL2Rpc3Ryby9wb2t5LmNvbmYKK3JlcXVpcmUgY29uZi9kaXN0cm8vaW5jbHVkZS9zZWN1cml0eV9mbGFncy5pbmMKKworRElTVFJPID0gInBva3ktbHNiIgorRElTVFJPT1ZFUlJJREVTID0gInBva3k6bGludXhzdGRiYXNlIgorCitESVNUUk9fRkVBVFVSRVNfYXBwZW5kID0gIiBwYW0gbGFyZ2VmaWxlIG9wZW5nbCIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYngxMSA9ICJsaWJ4MTEiCisKKyMgRW5zdXJlIHRoZSBrZXJuZWwgbmZzIHNlcnZlciBpcyBlbmFibGVkCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3BuLWxpbnV4LXlvY3RvID0gIiBmZWF0dXJlcy9uZnNkL25mc2QtZW5hYmxlLnNjYyIKKworIyBVc2UgdGhlIExUU0kgS2VybmVsIGZvciBMU0IgVGVzdGluZworUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG9fbGludXhzdGRiYXNlID89ICIzLjE0JSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9wb2t5LXRpbnkuY29uZiBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9wb2t5LXRpbnkuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDIyN2RlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL3Bva3ktdGlueS5jb25mCkBAIC0wLDAgKzEsMTQ0IEBACisjIERpc3RyaWJ1dGlvbiBkZWZpbml0aW9uIGZvcjogcG9reS10aW55CisjCisjIENvcHlyaWdodCAoYykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgYXMgZGVzY3JpYmVkIGluCisjIC4uL21ldGEvQ09QWUlORy5NSVQuCisjCisjIFBva3ktdGlueSBpcyBpbnRlbmRlZCB0byBkZWZpbmUgYSB0aW55IExpbnV4IHN5c3RlbSBjb21wcmlzZWQgb2YgYQorIyBMaW51eCBrZXJuZWwgdGFpbG9yZWQgdG8gc3VwcG9ydCBlYWNoIHNwZWNpZmljIE1BQ0hJTkUgYW5kIGJ1c3lib3guCisjIFBva3ktdGlueSBzZXRzIHNvbWUgYmFzaWMgcG9saWN5IHRvIGVuc3VyZSBhIHVzYWJsZSBzeXN0ZW0gd2hpbGUgc3RpbGwKKyMga2VlcGluZyB0aGUgcm9vdGZzIGFuZCBrZXJuZWwgaW1hZ2UgYXMgc21hbGwgYXMgcG9zc2libGUuCisjCisjIFRoZSBwb2xpY2llcyBkZWZpbmVkIGFyZSBpbnRlbmRlZCB0byBtZWV0IHRoZSBmb2xsb3dpbmcgZ29hbHM6CisjIG8gU2VyaWFsIGNvbnNvbGVzIG9ubHkgKG5vIGZyYW1lYnVmZmVyIG9yIFZHQSBjb25zb2xlKQorIyBvIEJhc2ljIHN1cHBvcnQgZm9yIElQVjQgbmV0d29ya2luZworIyBvIFNpbmdsZSB1c2VyIGFzaCBzaGVsbAorIyBvIFN0YXRpYyBpbWFnZXMgKG5vIHN1cHBvcnQgZm9yIGFkZGluZyBwYWNrYWdlcyBvciBsaWJyYXJpZXMgbGF0ZXIpCisjIG8gUmVhZC1vbmx5IG9yIFJBTUZTIHJvb3QgZmlsZXN5c3RlbQorIyBvIENvbWJpbmVkIExpbnV4IGtlcm5lbCArIHJvb3RmcyBpbiB1bmRlciA0TUIKKyMgbyBBbGxvdyB0aGUgdXNlciB0byBzZWxlY3QgYmV0d2VlbiBlZ2xpYmMgb3IgdWNsaWJjIHdpdGggdGhlIFRDTElCQyB2YXJpYWJsZQorIworIyBUaGlzIGlzIGN1cnJlbnRseSBhIHBhcnRpYWwgZGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyB0YXNrcyByZW1haW46CisjIFsgXSBJbnRlZ3JhdGUgbGludXgteW9jdG8tdGlueSBrdHlwZSBpbnRvIGxpbnV4LXlvY3RvCisjIFsgXSBEZWZpbmUgbGludXgteW9jdG8tdGlueSBjb25maWdzIGZvciBhbGwgc3VwcG9ydGVkIEJTUHMKKyMgWyBdIERyb3AgbGRjb25maWcgZnJvbSB0aGUgaW5zdGFsbGF0aW9uCisjIFsgXSBNb2RpZnkgdGhlIHJ1bnFlbXUgc2NyaXB0cyB0byB3b3JrIHdpdGggZXh0MiBwYXJhbWV0ZXI6CisjICAgICBydW5xZW11IHFlbXV4ODYgcWVtdXBhcmFtcz0iLW5vZ3JhcGhpYyIgYm9vdHBhcmFtcz0iY29uc29sZT10dHlTMCwxMTUyMDAgcm9vdD0wODAwIiAKKyMgWyBdIE1vZGlmeSBidXN5Ym94IHRvIGFsbG93IGZvciBESVNUUk9fRkVBVFVSRVMtbGlrZSBjb25maXJ1cmF0aW9uCisKK3JlcXVpcmUgY29uZi9kaXN0cm8vcG9reS5jb25mCitESVNUUk8gPSAicG9reS10aW55IgorCisjIEZJWE1FOiBjb25zaWRlciBhZGRpbmcgYSBuZXcgInRpbnkiIGZlYXR1cmUKKyNESVNUUk9fRkVBVFVSRVNfYXBwZW5kID0gIiB0aW55IgorCisjIERpc3RybyBjb25maWcgaXMgZXZhbHVhdGVkIGFmdGVyIHRoZSBtYWNoaW5lIGNvbmZpZywgc28gd2UgaGF2ZSB0byBleHBsaWNpdGx5CisjIHNldCB0aGUga2VybmVsIHByb3ZpZGVyIHRvIG92ZXJyaWRlIGEgbWFjaGluZSBjb25maWcuCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPSAibGludXgteW9jdG8tdGlueSIKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvLXRpbnkgPz0gIjMuMTklIgorCisjIFdlIGNhbiB1c2UgcGFja2FnZWdyb3VwLWNvcmUtYm9vdCwgYnV0IGluIHRoZSBmdXR1cmUgd2UgbWF5IG5lZWQgYSBuZXcgcGFja2FnZWdyb3VwLWNvcmUtdGlueQorI1BPS1lfREVGQVVMVF9FWFRSQV9SREVQRU5EUyArPSAicGFja2FnZWdyb3VwLWNvcmUtYm9vdCIKKyMgRHJvcCBrZXJuZWwtbW9kdWxlLWFmLXBhY2tldCBmcm9tIFJSRUNPTU1FTkRTCitQT0tZX0RFRkFVTFRfRVhUUkFfUlJFQ09NTUVORFMgPSAiIgorCisjIEZJWE1FOiB3aGF0IHNob3VsZCB3ZSBkbyB3aXRoIHRoaXM/CitUQ0xJQkNBUFBFTkQgPSAiIgorCisjIERpc2FibGUgd2lkZSBjaGFyIHN1cHBvcnQgZm9yIG5jdXJzZXMgYXMgd2UgZG9uJ3QgaW5jbHVkZSBpdCBpbgorIyBpbiB0aGUgTElCQyBmZWF0dXJlcyBiZWxvdy4KKyMgTGVhdmUgbmF0aXZlIGVuYWJsZSB0byBhdm9pZCBidWlsZCBmYWlsdXJlcworRU5BQkxFX1dJREVDID0gImZhbHNlIgorRU5BQkxFX1dJREVDX2NsYXNzLW5hdGl2ZSA9ICJ0cnVlIgorCisjIERyb3AgbmF0aXZlIGxhbmd1YWdlIHN1cHBvcnQuIFRoaXMgcmVtb3ZlcyB0aGUKKyMgZWdsaWJjLT5iYXNoLT5nZXR0ZXh0LT5saWJjLXBvc2l4LWNsYW5nLXdjaGFyIGRlcGVuZGVuY3kuCitVU0VfTkxTPSJubyIKKworIyBSZWNvbmZpZ3VyZSBlZ2xpYmMgZm9yIGEgc21hbGxlciBpbnN0YWxsYXRpb24KKyMgQ29tbWVudCBvdXQgYW55IG9mIHRoZSBsaW5lcyBiZWxvdyB0byBkaXNhYmxlIHRoZW0gaW4gdGhlIGJ1aWxkCitESVNUUk9fRkVBVFVSRVNfTElCQ19USU5ZID0gImxpYmMtbGlibSBsaWJjLWNyeXB0IgorRElTVFJPX0ZFQVRVUkVTX0xJQkNfVElOWV9hcHBlbmRfeDg2LTY0ID0gIiBsaWJjLWxpYm0tYmlnIgorCisjIFJlcXVpcmVkIGZvciAid2hvIgorRElTVFJPX0ZFQVRVUkVTX0xJQkNfTUlOSU1BTCA9ICJsaWJjLXV0bXAgbGliYy11dG1weCBsaWJjLWdldGxvZ2luIgorRElTVFJPX0ZFQVRVUkVTX0xJQkNfUkVHRVggPSAibGliYy1wb3NpeC1yZWdleHAiCitESVNUUk9fRkVBVFVSRVNfTElCQ19ORVQgPSAibGliYy1pbmV0IGxpYmMtbmlzIgorCitESVNUUk9fRkVBVFVSRVNfTElCQyA9ICIke0RJU1RST19GRUFUVVJFU19MSUJDX1RJTll9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7RElTVFJPX0ZFQVRVUkVTX0xJQkNfTUlOSU1BTH0gXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtESVNUUk9fRkVBVFVSRVNfTElCQ19SRUdFWH0gXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtESVNUUk9fRkVBVFVSRVNfTElCQ19ORVR9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIgorCisjIENvbW1lbnQgb3V0IGFueSBvZiB0aGUgbGluZXMgYmVsb3cgdG8gZGlzYWJsZSB0aGVtIGluIHRoZSBidWlsZAorIyBESVNUUk9fRkVBVFVSRVMgb3B0aW9uczoKKyMgYWxzYSBibHVldG9vdGggZXh0MiBpcmRhIHBjbWNpYSB1c2JnYWRnZXQgdXNiaG9zdCB3aWZpIG5mcyB6ZXJvY29uZiBwY2kKK0RJU1RST19GRUFUVVJFU19USU5ZID0gInBjaSIKK0RJU1RST19GRUFUVVJFU19ORVQgPSAiaXB2NCIKK0RJU1RST19GRUFUVVJFU19VU0IgPSAidXNiaG9zdCIKKyNESVNUUk9fRkVBVFVSRVNfVVNCR0FER0VUID0gInVzYmdhZGdldCIKKyNESVNUUk9fRkVBVFVSRVNfV0lGSSA9ICJ3aWZpIgorCitESVNUUk9fRkVBVFVSRVMgPSAiJHtESVNUUk9fRkVBVFVSRVNfVElOWX0gXAorICAgICAgICAgICAgICAgICAgICR7RElTVFJPX0ZFQVRVUkVTX05FVH0gXAorICAgICAgICAgICAgICAgICAgICR7RElTVFJPX0ZFQVRVUkVTX1VTQn0gXAorICAgICAgICAgICAgICAgICAgICR7RElTVFJPX0ZFQVRVUkVTX1VTQkdBREdFVH0gXAorICAgICAgICAgICAgICAgICAgICR7RElTVFJPX0ZFQVRVUkVTX1dJRkl9IFwKKyAgICAgICAgICAgICAgICAgICAke0RJU1RST19GRUFUVVJFU19MSUJDfSBcCisgICAgICAgICAgICAgICAgICAiCisKKyMgRW5hYmxlIExGUyAtIHNlZSBidWcgWU9DVE8gIzU4NjUKK0RJU1RST19GRUFUVVJFU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiIGxhcmdlZmlsZSIKKworRElTVFJPX0ZFQVRVUkVTX2NsYXNzLW5hdGl2ZSA9ICIke0RJU1RST19GRUFUVVJFU19ERUZBVUxUfSAke0RJU1RST19GRUFUVVJFU19MSUJDfSAke1BPS1lfREVGQVVMVF9ESVNUUk9fRkVBVFVSRVN9IgorCisjIFVzZSB0bXBkZXZmcyBhbmQgdGhlIGJ1c3lib3ggcnVudGltZSBzZXJ2aWNlcworVklSVFVBTC1SVU5USU1FX2Rldl9tYW5hZ2VyID0gIiIKK1ZJUlRVQUwtUlVOVElNRV9sb2dpbl9tYW5hZ2VyID0gIiIKK1ZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIgPSAidGlueS1pbml0IgorVklSVFVBTC1SVU5USU1FX2tleW1hcHMgPSAiIgorCisjIEZJWE1FOiBDb25zaWRlciBhZGRpbmcgIm1vZHVsZXMiIHRvIE1BQ0hJTkVfRkVBVFVSRVMgYW5kIHVzaW5nIHRoYXQgaW4KKyMgcGFja2FnZWdyb3VwLWNvcmUtYmFzZSB0byBzZWxlY3QgbW9kdXRpbHMtaW5pdHNjcmlwdHMgb3Igbm90LiAgU2ltaWxhciB3aXRoICJuZXQiIGFuZAorIyBuZXRiYXNlLgorCisjIEJ5IGRlZmF1bHQgd2Ugb25seSBzdXBwb3J0IGluaXRyYW1mcy4gV2UgZG9uJ3QgYnVpbGQgbGl2ZSBhcyB0aGF0CisjIHB1bGxzIGluIGEgbG90IG9mIGRlcGVuZGVuY2llcyBmb3IgdGhlIGxpdmUgaW1hZ2UgYW5kIHRoZSBpbnN0YWxsZXIsIGxpa2UKKyMgdWRldiwgZ3J1YiwgZXRjLiAgVGhlc2UgcHVsbCBpbiBnZXR0ZXh0LCB3aGljaCBmYWlscyB0byBidWlsZCB3aXRoIHdpZGUKKyMgY2hhcmFjdGVyIHN1cHBvcnQuCitJTUFHRV9GU1RZUEVTID0gImNwaW8uZ3oiCisKKyMgRHJvcCB2ODZkIGZyb20gcWVtdSBkZXBlbmRlbmN5IGxpc3QgKHdlIHN1cHBvcnQgc2VyaWFsKQorIyBEcm9wIGdydWIgZnJvbSBtZXRhLWludGVsIEJTUHMKKyMgRklYTUU6IEEgZGlmZmVyZW50IG1lY2hhbmlzbSBpcyBuZWVkZWQgaGVyZS4gV2UgY291bGQgZGVmaW5lIC10aW55CisjICAgICAgICB2YXJpYW50cyBvZiBhbGwgY29tcGF0aWJsZSBtYWNoaW5lcywgYnV0IHRoYXQgbGVhZHMgdG8gYSBsb3QKKyMgICAgICAgIG1vcmUgbWFjaGluZSBjb25maWdzIHRvIG1haW50YWluIGxvbmcgdGVybS4KK01BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTID0gIiIKKworIyBUaGUgbXRyYWNlIHNjcmlwdCBpbmNsdWRlZCBieSBlZ2xpYmMgaXMgYSBwZXJsIHNjcmlwdC4gVGhpcyBtZWFucyB0aGUgc3lzdGVtCisjIHdpbGwgYnVpbGQgcGVybCBpbiBjYXNlIHRoaXMgcGFja2FnZSBpcyBpbnN0YWxsZWQuIFNpbmNlIHdlIGRvbid0IGNhcmUgYWJvdXQKKyMgdGhpcyBzY3JpcHQgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aW55LCByZW1vdmUgdGhlIGRlcGVuZGVuY3kgZnJvbSBoZXJlLgorUkRFUEVORFNfJHtQTn0tbXRyYWNlX3BuLWVnbGliYyA9ICIiCisKK1BOQkxBQ0tMSVNUW2J1aWxkLWFwcGxpYW5jZS1pbWFnZV0gPSAibm90IGJ1aWxkYWJsZSB3aXRoIHBva3ktdGlueSIKK1BOQkxBQ0tMSVNUW2NvcmUtaW1hZ2UtYmFzZV0gPSAibm90IGJ1aWxkYWJsZSB3aXRoIHBva3ktdGlueSIKK1BOQkxBQ0tMSVNUW2NvcmUtaW1hZ2UtY2x1dHRlcl0gPSAibm90IGJ1aWxkYWJsZSB3aXRoIHBva3ktdGlueSIKK1BOQkxBQ0tMSVNUW2NvcmUtaW1hZ2UtZGlyZWN0ZmJdID0gIm5vdCBidWlsZGFibGUgd2l0aCBwb2t5LXRpbnkiCitQTkJMQUNLTElTVFtjb3JlLWltYWdlLWZ1bGwtY21kbGluZV0gPSAibm90IGJ1aWxkYWJsZSB3aXRoIHBva3ktdGlueSIKK1BOQkxBQ0tMSVNUW2NvcmUtaW1hZ2UtbHNiXSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbY29yZS1pbWFnZS1sc2ItZGV2XSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbY29yZS1pbWFnZS1sc2Itc2RrXSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbY29yZS1pbWFnZS1ydF0gPSAibm90IGJ1aWxkYWJsZSB3aXRoIHBva3ktdGlueSIKK1BOQkxBQ0tMSVNUW2NvcmUtaW1hZ2UtcnQtc2RrXSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbY29yZS1pbWFnZS1zYXRvXSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbY29yZS1pbWFnZS1zYXRvLWRldl0gPSAibm90IGJ1aWxkYWJsZSB3aXRoIHBva3ktdGlueSIKK1BOQkxBQ0tMSVNUW2NvcmUtaW1hZ2Utc2F0by1zZGtdID0gIm5vdCBidWlsZGFibGUgd2l0aCBwb2t5LXRpbnkiCitQTkJMQUNLTElTVFtjb3JlLWltYWdlLXgxMV0gPSAibm90IGJ1aWxkYWJsZSB3aXRoIHBva3ktdGlueSIKK1BOQkxBQ0tMSVNUW3F0NGUtZGVtby1pbWFnZV0gPSAibm90IGJ1aWxkYWJsZSB3aXRoIHBva3ktdGlueSIKK1BOQkxBQ0tMSVNUW2NvcmUtaW1hZ2Utd2VzdG9uXSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorCisjIERpc2FibGUgcHl0aG9uIHVzYWdlIGluIG9wa2ctdXRpbHMgc2luY2UgaXQgd29uJ3QgYnVpbGQgd2l0aCB0aW55IGNvbmZpZworUEFDS0FHRUNPTkZJR19wbi1vcGtnLXV0aWxzID0gIiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9wb2t5LmNvbmYgYi95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9kaXN0cm8vcG9reS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYzE3ZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9kaXN0cm8vcG9reS5jb25mCkBAIC0wLDAgKzEsMTA0IEBACitESVNUUk8gPSAicG9reSIKK0RJU1RST19OQU1FID0gIlBva3kgKFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIERpc3RybykiCitESVNUUk9fVkVSU0lPTiA9ICIxLjgrc25hcHNob3QtJHtEQVRFfSIKK0RJU1RST19DT0RFTkFNRSA9ICJtYXN0ZXIiCitTREtfVkVORE9SID0gIi1wb2t5c2RrIgorU0RLX1ZFUlNJT04gOj0gIiR7QCcke0RJU1RST19WRVJTSU9OfScucmVwbGFjZSgnc25hcHNob3QtJHtEQVRFfScsJ3NuYXBzaG90Jyl9IgorCitNQUlOVEFJTkVSID0gIlBva3kgPHBva3lAeW9jdG9wcm9qZWN0Lm9yZz4iCisKK1RBUkdFVF9WRU5ET1IgPSAiLXBva3kiCisKK0xPQ0FMQ09ORl9WRVJTSU9OID0gIjEiCisKKyMgT3ZlcnJpZGUgdGhlc2UgaW4gcG9reSBiYXNlZCBkaXN0cm9zCitQT0tZX0RFRkFVTFRfRElTVFJPX0ZFQVRVUkVTID0gImxhcmdlZmlsZSBvcGVuZ2wgcHRlc3QgbXVsdGlhcmNoIHdheWxhbmQiCitQT0tZX0RFRkFVTFRfRVhUUkFfUkRFUEVORFMgPSAicGFja2FnZWdyb3VwLWNvcmUtYm9vdCIKK1BPS1lfREVGQVVMVF9FWFRSQV9SUkVDT01NRU5EUyA9ICJrZXJuZWwtbW9kdWxlLWFmLXBhY2tldCIKKworRElTVFJPX0ZFQVRVUkVTID89ICIke0RJU1RST19GRUFUVVJFU19ERUZBVUxUfSAke0RJU1RST19GRUFUVVJFU19MSUJDfSAke1BPS1lfREVGQVVMVF9ESVNUUk9fRkVBVFVSRVN9IgorCitQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0byA/PSAiNC4xJSIKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvX3FlbXV4ODYgPz0gIjQuMSUiCitQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0b19xZW11eDg2LTY0ID89ICI0LjElIgorUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG9fcWVtdWFybSA/PSAiNC4xJSIKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvX3FlbXVtaXBzID89ICI0LjElIgorUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG9fcWVtdW1pcHM2NCA/PSAiNC4xJSIKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvX3FlbXVwcGMgPz0gIjQuMSUiCisKK1NES19OQU1FID0gIiR7RElTVFJPfS0ke1RDTElCQ30tJHtTREtfQVJDSH0tJHtJTUFHRV9CQVNFTkFNRX0tJHtUVU5FX1BLR0FSQ0h9IgorU0RLUEFUSCA9ICIvb3B0LyR7RElTVFJPfS8ke1NES19WRVJTSU9OfSIKKworRElTVFJPX0VYVFJBX1JERVBFTkRTICs9ICIgJHtQT0tZX0RFRkFVTFRfRVhUUkFfUkRFUEVORFN9IgorRElTVFJPX0VYVFJBX1JSRUNPTU1FTkRTICs9ICIgJHtQT0tZX0RFRkFVTFRfRVhUUkFfUlJFQ09NTUVORFN9IgorCitQT0tZUUVNVURFUFMgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIklOQ09NUEFUSUJMRV9MSUNFTlNFIiwgIkdQTC0zLjAiLCAiIiwgInBhY2thZ2Vncm91cC1jb3JlLWRldmljZS1kZXZlbCIsZCl9IgorRElTVFJPX0VYVFJBX1JERVBFTkRTX2FwcGVuZF9xZW11YXJtID0gIiAke1BPS1lRRU1VREVQU30iCitESVNUUk9fRVhUUkFfUkRFUEVORFNfYXBwZW5kX3FlbXVhcm02NCA9ICIgJHtQT0tZUUVNVURFUFN9IgorRElTVFJPX0VYVFJBX1JERVBFTkRTX2FwcGVuZF9xZW11bWlwcyA9ICIgJHtQT0tZUUVNVURFUFN9IgorRElTVFJPX0VYVFJBX1JERVBFTkRTX2FwcGVuZF9xZW11cHBjID0gIiAke1BPS1lRRU1VREVQU30iCitESVNUUk9fRVhUUkFfUkRFUEVORFNfYXBwZW5kX3FlbXV4ODYgPSAiICR7UE9LWVFFTVVERVBTfSIKK0RJU1RST19FWFRSQV9SREVQRU5EU19hcHBlbmRfcWVtdXg4Ni02NCA9ICIgJHtQT0tZUUVNVURFUFN9IgorCitUQ0xJQkNBUFBFTkQgPSAiIgorCitRRU1VX1RBUkdFVFMgPz0gImFybSBhYXJjaDY0IGkzODYgbWlwcyBtaXBzZWwgbWlwczY0IHBwYyB4ODZfNjQiCisjIE90aGVyIFFFTVVfVEFSR0VUUyAibWlwczY0ZWwgc2g0IgorCitQUkVNSVJST1JTID8/PSAiXAorYnpyOi8vLiovLiogICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKK2N2czovLy4qLy4qICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitnaXQ6Ly8uKi8uKiAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorZ2l0c206Ly8uKi8uKiBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKK2hnOi8vLiovLiogICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitvc2M6Ly8uKi8uKiAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorcDQ6Ly8uKi8uKiAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKK3N2bjovLy4qLy4qICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiIKKworTUlSUk9SUyA9KyAiXAorZnRwOi8vLiovLiogICAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKK2h0dHA6Ly8uKi8uKiAgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitodHRwczovLy4qLy4qICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4iCisKKyMgVGhlIENPTk5FQ1RJVklUWV9DSEVDS19VUkkncyBhcmUgdXNlZCB0byB0ZXN0IHdoZXRoZXIgd2UgY2FuIHN1Y2Nlc2Z1bGx5CisjIGZldGNoIGZyb20gdGhlIG5ldHdvcmsgKGFuZCB3YXJuIHlvdSBpZiBub3QpLiBUbyBkaXNhYmxlIHRoZSB0ZXN0IHNldAorIyB0aGUgdmFyaWFibGUgdG8gYmUgZW1wdHkuCisjIEdpdCBleGFtcGxlIHVybDogZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8tZmlyZXdhbGwtdGVzdDtwcm90b2NvbD1naXQ7cmV2PW1hc3RlcgorCitDT05ORUNUSVZJVFlfQ0hFQ0tfVVJJUyA/PSAiIFwKKyAgICAgICAgICAgICBodHRwczovL2V1bGEtZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvaW5kZXgucGhwIFwKKyAgICAgICAgICAgICBodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy9yZXBvcnQuY2dpIgorCitTQU5JVFlfVEVTVEVEX0RJU1RST1MgPz0gIiBcCisgICAgICAgICAgICBwb2t5LTEuNyBcbiBcCisgICAgICAgICAgICBwb2t5LTEuOCBcbiBcCisgICAgICAgICAgICBVYnVudHUtMTQuMDQgXG4gXAorICAgICAgICAgICAgVWJ1bnR1LTE0LjEwIFxuIFwKKyAgICAgICAgICAgIFVidW50dS0xNS4wNCBcbiBcCisgICAgICAgICAgICBGZWRvcmEtMjEgXG4gXAorICAgICAgICAgICAgQ2VudE9TLTYuKiBcbiBcCisgICAgICAgICAgICBDZW50T1MtNy4qIFxuIFwKKyAgICAgICAgICAgIERlYmlhbi03LiogXG4gXAorICAgICAgICAgICAgRGViaWFuLTguKiBcbiBcCisgICAgICAgICAgICBvcGVuU1VTRS1wcm9qZWN0LTEzLjIgXG4gXAorICAgICAgICAgICAgIgorCisjIERlZmF1bHQgaGFzaCBwb2xpY3kgZm9yIGRpc3RybworQkJfU0lHTkFUVVJFX0hBTkRMRVIgPz0gJ09FQmFzaWNIYXNoJworIworIyBPRUxBWU9VVF9BQkkgYWxsb3dzIHVzIHRvIG5vdGlmeSB1c2VycyB3aGVuIHRoZSBmb3JtYXQgb2YgVE1QRElSIGNoYW5nZXMgaW4gCisjIGFuIGluY29tcGF0aWJsZSB3YXkuIFN1Y2ggY2hhbmdlcyBzaG91bGQgdXN1YWxseSBiZSBkZXRhaWxlZCBpbiB0aGUgY29tbWl0CisjIHRoYXQgYnJlYWtzIHRoZSBmb3JtYXQgYW5kIGhhdmUgYmVlbiBwcmV2aW91c2x5IGRpc2N1c3NlZCBvbiB0aGUgbWFpbGluZyBsaXN0IAorIyB3aXRoIGdlbmVyYWwgYWdyZWVtZW50IGZyb20gdGhlIGNvcmUgdGVhbS4KKyMKK09FTEFZT1VUX0FCSSA9ICIxMSIKKworIyBhZGQgcG9reSBzYW5pdHkgYmJjbGFzcworSU5IRVJJVCArPSAicG9reS1zYW5pdHkiCisKKyMgUUEgY2hlY2sgc2V0dGluZ3MgLSBhIGxpdHRsZSBzdHJpY3RlciB0aGFuIHRoZSBPRS1Db3JlIGRlZmF1bHRzCitXQVJOX1RPX0VSUk9SX1FBID0gImFscmVhZHktc3RyaXBwZWQgY29tcGlsZS1ob3N0LXBhdGggaW5zdGFsbC1ob3N0LXBhdGggXAorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQtdnMtc2hpcHBlZCBsZGZsYWdzIHBuLW92ZXJyaWRlcyBycGF0aHMgc3RhdGljZGV2IFwKKyAgICAgICAgICAgICAgICAgICAgdXNlbGVzcy1ycGF0aHMiCitXQVJOX1FBX3JlbW92ZSA9ICIke1dBUk5fVE9fRVJST1JfUUF9IgorRVJST1JfUUFfYXBwZW5kID0gIiAke1dBUk5fVE9fRVJST1JfUUF9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvbGF5ZXIuY29uZiBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2xheWVyLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk0MmI1MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2xheWVyLmNvbmYKQEAgLTAsMCArMSwxNiBAQAorIyBXZSBoYXZlIGEgY29uZiBhbmQgY2xhc3NlcyBkaXJlY3RvcnksIGFkZCB0byBCQlBBVEgKK0JCUEFUSCA9LiAiJHtMQVlFUkRJUn06IgorCisjIFdlIGhhdmUgcmVjaXBlcy0qIGRpcmVjdG9yaWVzLCBhZGQgdG8gQkJGSUxFUworQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYiBcCisgICAgICAgICAgICAke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIgorCitCQkZJTEVfQ09MTEVDVElPTlMgKz0gInlvY3RvIgorQkJGSUxFX1BBVFRFUk5feW9jdG8gPSAiXiR7TEFZRVJESVJ9LyIKK0JCRklMRV9QUklPUklUWV95b2N0byA9ICI1IgorCisjIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW5jcmVtZW50ZWQgb24gc2lnbmlmaWNhbnQgY2hhbmdlcyB0aGF0IHdpbGwKKyMgY2F1c2UgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2l0aCBvdGhlciBsYXllcnMKK0xBWUVSVkVSU0lPTl95b2N0byA9ICIyIgorCitMQVlFUkRFUEVORFNfeW9jdG8gPSAiY29yZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2xvY2FsLmNvbmYuc2FtcGxlIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvbG9jYWwuY29uZi5zYW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcxMzQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2xvY2FsLmNvbmYuc2FtcGxlCkBAIC0wLDAgKzEsMjM2IEBACisjCisjIFRoaXMgZmlsZSBpcyB5b3VyIGxvY2FsIGNvbmZpZ3VyYXRpb24gZmlsZSBhbmQgaXMgd2hlcmUgYWxsIGxvY2FsIHVzZXIgc2V0dGluZ3MKKyMgYXJlIHBsYWNlZC4gVGhlIGNvbW1lbnRzIGluIHRoaXMgZmlsZSBnaXZlIHNvbWUgZ3VpZGUgdG8gdGhlIG9wdGlvbnMgYSBuZXcgdXNlcgorIyB0byB0aGUgc3lzdGVtIG1pZ2h0IHdhbnQgdG8gY2hhbmdlIGJ1dCBwcmV0dHkgbXVjaCBhbnkgY29uZmlndXJhdGlvbiBvcHRpb24gY2FuCisjIGJlIHNldCBpbiB0aGlzIGZpbGUuIE1vcmUgYWR2ZW50dXJvdXMgdXNlcnMgY2FuIGxvb2sgYXQgbG9jYWwuY29uZi5leHRlbmRlZCAKKyMgd2hpY2ggY29udGFpbnMgb3RoZXIgZXhhbXBsZXMgb2YgY29uZmlndXJhdGlvbiB3aGljaCBjYW4gYmUgcGxhY2VkIGluIHRoaXMgZmlsZQorIyBidXQgbmV3IHVzZXJzIGxpa2VseSB3b24ndCBuZWVkIGFueSBvZiB0aGVtIGluaXRpYWxseS4KKyMKKyMgTGluZXMgc3RhcnRpbmcgd2l0aCB0aGUgJyMnIGNoYXJhY3RlciBhcmUgY29tbWVudGVkIG91dCBhbmQgaW4gc29tZSBjYXNlcyB0aGUgCisjIGRlZmF1bHQgdmFsdWVzIGFyZSBwcm92aWRlZCBhcyBjb21tZW50cyB0byBzaG93IHBlb3BsZSBleGFtcGxlIHN5bnRheC4gRW5hYmxpbmcKKyMgdGhlIG9wdGlvbiBpcyBhIHF1ZXN0aW9uIG9mIHJlbW92aW5nIHRoZSAjIGNoYXJhY3RlciBhbmQgbWFraW5nIGFueSBjaGFuZ2UgdG8gdGhlCisjIHZhcmlhYmxlIGFzIHJlcXVpcmVkLgorCisjCisjIE1hY2hpbmUgU2VsZWN0aW9uCisjCisjIFlvdSBuZWVkIHRvIHNlbGVjdCBhIHNwZWNpZmljIG1hY2hpbmUgdG8gdGFyZ2V0IHRoZSBidWlsZCB3aXRoLiBUaGVyZSBhcmUgYSBzZWxlY3Rpb24KKyMgb2YgZW11bGF0ZWQgbWFjaGluZXMgYXZhaWxhYmxlIHdoaWNoIGNhbiBib290IGFuZCBydW4gaW4gdGhlIFFFTVUgZW11bGF0b3I6CisjCisjTUFDSElORSA/PSAicWVtdWFybSIKKyNNQUNISU5FID89ICJxZW11YXJtNjQiCisjTUFDSElORSA/PSAicWVtdW1pcHMiCisjTUFDSElORSA/PSAicWVtdXBwYyIKKyNNQUNISU5FID89ICJxZW11eDg2IgorI01BQ0hJTkUgPz0gInFlbXV4ODYtNjQiCisjCisjIFRoZXJlIGFyZSBhbHNvIHRoZSBmb2xsb3dpbmcgaGFyZHdhcmUgYm9hcmQgdGFyZ2V0IG1hY2hpbmVzIGluY2x1ZGVkIGZvciAKKyMgZGVtb25zdHJhdGlvbiBwdXJwb3NlczoKKyMKKyNNQUNISU5FID89ICJiZWFnbGVib25lIgorI01BQ0hJTkUgPz0gImdlbmVyaWN4ODYiCisjTUFDSElORSA/PSAiZ2VuZXJpY3g4Ni02NCIKKyNNQUNISU5FID89ICJtcGM4MzE1ZS1yZGIiCisjTUFDSElORSA/PSAiZWRnZXJvdXRlciIKKyMKKyMgVGhpcyBzZXRzIHRoZSBkZWZhdWx0IG1hY2hpbmUgdG8gYmUgcWVtdXg4NiBpZiBubyBvdGhlciBtYWNoaW5lIGlzIHNlbGVjdGVkOgorTUFDSElORSA/Pz0gInFlbXV4ODYiCisKKyMKKyMgV2hlcmUgdG8gcGxhY2UgZG93bmxvYWRzCisjCisjIER1cmluZyBhIGZpcnN0IGJ1aWxkIHRoZSBzeXN0ZW0gd2lsbCBkb3dubG9hZCBtYW55IGRpZmZlcmVudCBzb3VyY2UgY29kZSB0YXJiYWxscworIyBmcm9tIHZhcmlvdXMgdXBzdHJlYW0gcHJvamVjdHMuIFRoaXMgY2FuIHRha2UgYSB3aGlsZSwgcGFydGljdWxhcmx5IGlmIHlvdXIgbmV0d29yaworIyBjb25uZWN0aW9uIGlzIHNsb3cuIFRoZXNlIGFyZSBhbGwgc3RvcmVkIGluIERMX0RJUi4gV2hlbiB3aXBpbmcgYW5kIHJlYnVpbGRpbmcgeW91CisjIGNhbiBwcmVzZXJ2ZSB0aGlzIGRpcmVjdG9yeSB0byBzcGVlZCB1cCB0aGlzIHBhcnQgb2Ygc3Vic2VxdWVudCBidWlsZHMuIFRoaXMgZGlyZWN0b3J5CisjIGlzIHNhZmUgdG8gc2hhcmUgYmV0d2VlbiBtdWx0aXBsZSBidWlsZHMgb24gdGhlIHNhbWUgbWFjaGluZSB0b28uCisjCisjIFRoZSBkZWZhdWx0IGlzIGEgZG93bmxvYWRzIGRpcmVjdG9yeSB1bmRlciBUT1BESVIgd2hpY2ggaXMgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyMKKyNETF9ESVIgPz0gIiR7VE9QRElSfS9kb3dubG9hZHMiCisKKyMKKyMgV2hlcmUgdG8gcGxhY2Ugc2hhcmVkLXN0YXRlIGZpbGVzCisjCisjIEJpdEJha2UgaGFzIHRoZSBjYXBhYmlsaXR5IHRvIGFjY2VsZXJhdGUgYnVpbGRzIGJhc2VkIG9uIHByZXZpb3VzbHkgYnVpbHQgb3V0cHV0LgorIyBUaGlzIGlzIGRvbmUgdXNpbmcgInNoYXJlZCBzdGF0ZSIgZmlsZXMgd2hpY2ggY2FuIGJlIHRob3VnaHQgb2YgYXMgY2FjaGUgb2JqZWN0cworIyBhbmQgdGhpcyBvcHRpb24gZGV0ZXJtaW5lcyB3aGVyZSB0aG9zZSBmaWxlcyBhcmUgcGxhY2VkLgorIworIyBZb3UgY2FuIHdpcGUgb3V0IFRNUERJUiBsZWF2aW5nIHRoaXMgZGlyZWN0b3J5IGludGFjdCBhbmQgdGhlIGJ1aWxkIHdvdWxkIHJlZ2VuZXJhdGUKKyMgZnJvbSB0aGVzZSBmaWxlcyBpZiBubyBjaGFuZ2VzIHdlcmUgbWFkZSB0byB0aGUgY29uZmlndXJhdGlvbi4gSWYgY2hhbmdlcyB3ZXJlIG1hZGUKKyMgdG8gdGhlIGNvbmZpZ3VyYXRpb24sIG9ubHkgc2hhcmVkIHN0YXRlIGZpbGVzIHdoZXJlIHRoZSBzdGF0ZSB3YXMgc3RpbGwgdmFsaWQgd291bGQKKyMgYmUgdXNlZCAoZG9uZSB1c2luZyBjaGVja3N1bXMpLgorIworIyBUaGUgZGVmYXVsdCBpcyBhIHNzdGF0ZS1jYWNoZSBkaXJlY3RvcnkgdW5kZXIgVE9QRElSLgorIworI1NTVEFURV9ESVIgPz0gIiR7VE9QRElSfS9zc3RhdGUtY2FjaGUiCisKKyMKKyMgV2hlcmUgdG8gcGxhY2UgdGhlIGJ1aWxkIG91dHB1dAorIworIyBUaGlzIG9wdGlvbiBzcGVjaWZpZXMgd2hlcmUgdGhlIGJ1bGsgb2YgdGhlIGJ1aWxkaW5nIHdvcmsgc2hvdWxkIGJlIGRvbmUgYW5kCisjIHdoZXJlIEJpdEJha2Ugc2hvdWxkIHBsYWNlIGl0cyB0ZW1wb3JhcnkgZmlsZXMgYW5kIG91dHB1dC4gS2VlcCBpbiBtaW5kIHRoYXQKKyMgdGhpcyBpbmNsdWRlcyB0aGUgZXh0cmFjdGlvbiBhbmQgY29tcGlsYXRpb24gb2YgbWFueSBhcHBsaWNhdGlvbnMgYW5kIHRoZSB0b29sY2hhaW4KKyMgd2hpY2ggY2FuIHVzZSBHaWdhYnl0ZXMgb2YgaGFyZCBkaXNrIHNwYWNlLgorIworIyBUaGUgZGVmYXVsdCBpcyBhIHRtcCBkaXJlY3RvcnkgdW5kZXIgVE9QRElSLgorIworI1RNUERJUiA9ICIke1RPUERJUn0vdG1wIgorCisjCisjIERlZmF1bHQgcG9saWN5IGNvbmZpZworIworIyBUaGUgZGlzdHJpYnV0aW9uIHNldHRpbmcgY29udHJvbHMgd2hpY2ggcG9saWN5IHNldHRpbmdzIGFyZSB1c2VkIGFzIGRlZmF1bHRzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBmaW5lIGZvciBnZW5lcmFsIFlvY3RvIHByb2plY3QgdXNlLCBhdCBsZWFzdCBpbml0aWFsbHkuCisjIFVsdGltYXRlbHkgd2hlbiBjcmVhdGluZyBjdXN0b20gcG9saWN5LCBwZW9wbGUgd2lsbCBsaWtlbHkgZW5kIHVwIHN1YmNsYXNzaW5nIAorIyB0aGVzZSBkZWZhdWx0cy4KKyMKK0RJU1RSTyA/PSAicG9reSIKKyMgQXMgYW4gZXhhbXBsZSBvZiBhIHN1YmNsYXNzIHRoZXJlIGlzIGEgImJsZWVkaW5nIiBlZGdlIHBvbGljeSBjb25maWd1cmF0aW9uCisjIHdoZXJlIG1hbnkgdmVyc2lvbnMgYXJlIHNldCB0byB0aGUgYWJzb2x1dGUgbGF0ZXN0IGNvZGUgZnJvbSB0aGUgdXBzdHJlYW0gCisjIHNvdXJjZSBjb250cm9sIHN5c3RlbXMuIFRoaXMgaXMganVzdCBtZW50aW9uZWQgaGVyZSBhcyBhbiBleGFtcGxlLCBpdHMgbm90CisjIHVzZWZ1bCB0byBtb3N0IG5ldyB1c2Vycy4KKyMgRElTVFJPID89ICJwb2t5LWJsZWVkaW5nIgorCisjCisjIFBhY2thZ2UgTWFuYWdlbWVudCBjb25maWd1cmF0aW9uCisjCisjIFRoaXMgdmFyaWFibGUgbGlzdHMgd2hpY2ggcGFja2FnaW5nIGZvcm1hdHMgdG8gZW5hYmxlLiBNdWx0aXBsZSBwYWNrYWdlIGJhY2tlbmRzIAorIyBjYW4gYmUgZW5hYmxlZCBhdCBvbmNlIGFuZCB0aGUgZmlyc3QgaXRlbSBsaXN0ZWQgaW4gdGhlIHZhcmlhYmxlIHdpbGwgYmUgdXNlZCAKKyMgdG8gZ2VuZXJhdGUgdGhlIHJvb3QgZmlsZXN5c3RlbXMuCisjIE9wdGlvbnMgYXJlOgorIyAgLSAncGFja2FnZV9kZWInIGZvciBkZWJpYW4gc3R5bGUgZGViIGZpbGVzCisjICAtICdwYWNrYWdlX2lwaycgZm9yIGlwayBmaWxlcyBhcmUgdXNlZCBieSBvcGtnIChhIGRlYmlhbiBzdHlsZSBlbWJlZGRlZCBwYWNrYWdlIG1hbmFnZXIpCisjICAtICdwYWNrYWdlX3JwbScgZm9yIHJwbSBzdHlsZSBwYWNrYWdlcworIyBFLmcuOiBQQUNLQUdFX0NMQVNTRVMgPz0gInBhY2thZ2VfcnBtIHBhY2thZ2VfZGViIHBhY2thZ2VfaXBrIgorIyBXZSBkZWZhdWx0IHRvIHJwbToKK1BBQ0tBR0VfQ0xBU1NFUyA/PSAicGFja2FnZV9ycG0iCisKKyMKKyMgU0RLL0FEVCB0YXJnZXQgYXJjaGl0ZWN0dXJlCisjCisjIFRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBhcmNoaXRlY3R1cmUgdG8gYnVpbGQgU0RLL0FEVCBpdGVtcyBmb3IgYW5kIG1lYW5zCisjIHlvdSBjYW4gYnVpbGQgdGhlIFNESyBwYWNrYWdlcyBmb3IgYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSBtYWNoaW5lIHlvdSBhcmUgCisjIHJ1bm5pbmcgdGhlIGJ1aWxkIG9uIChpLmUuIGJ1aWxkaW5nIGk2ODYgcGFja2FnZXMgb24gYW4geDg2XzY0IGhvc3QpLgorIyBTdXBwb3J0ZWQgdmFsdWVzIGFyZSBpNjg2IGFuZCB4ODZfNjQKKyNTREtNQUNISU5FID89ICJpNjg2IgorCisjCisjIEV4dHJhIGltYWdlIGNvbmZpZ3VyYXRpb24gZGVmYXVsdHMKKyMKKyMgVGhlIEVYVFJBX0lNQUdFX0ZFQVRVUkVTIHZhcmlhYmxlIGFsbG93cyBleHRyYSBwYWNrYWdlcyB0byBiZSBhZGRlZCB0byB0aGUgZ2VuZXJhdGVkIAorIyBpbWFnZXMuIFNvbWUgb2YgdGhlc2Ugb3B0aW9ucyBhcmUgYWRkZWQgdG8gY2VydGFpbiBpbWFnZSB0eXBlcyBhdXRvbWF0aWNhbGx5LiBUaGUKKyMgdmFyaWFibGUgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBvcHRpb25zOgorIyAgImRiZy1wa2dzIiAgICAgICAtIGFkZCAtZGJnIHBhY2thZ2VzIGZvciBhbGwgaW5zdGFsbGVkIHBhY2thZ2VzCisjICAgICAgICAgICAgICAgICAgICAgKGFkZHMgc3ltYm9sIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dpbmcvcHJvZmlsaW5nKQorIyAgImRldi1wa2dzIiAgICAgICAtIGFkZCAtZGV2IHBhY2thZ2VzIGZvciBhbGwgaW5zdGFsbGVkIHBhY2thZ2VzCisjICAgICAgICAgICAgICAgICAgICAgKHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBkZXZlbG9wIGFnYWluc3QgbGlicyBpbiB0aGUgaW1hZ2UpCisjICAicHRlc3QtcGtncyIgICAgIC0gYWRkIC1wdGVzdCBwYWNrYWdlcyBmb3IgYWxsIHB0ZXN0LWVuYWJsZWQgcGFja2FnZXMKKyMgICAgICAgICAgICAgICAgICAgICAodXNlZnVsIGlmIHlvdSB3YW50IHRvIHJ1biB0aGUgcGFja2FnZSB0ZXN0IHN1aXRlcykKKyMgICJ0b29scy1zZGsiICAgICAgLSBhZGQgZGV2ZWxvcG1lbnQgdG9vbHMgKGdjYywgbWFrZSwgcGtnY29uZmlnIGV0Yy4pCisjICAidG9vbHMtZGVidWciICAgIC0gYWRkIGRlYnVnZ2luZyB0b29scyAoZ2RiLCBzdHJhY2UpCisjICAiZWNsaXBzZS1kZWJ1ZyIgIC0gYWRkIEVjbGlwc2UgcmVtb3RlIGRlYnVnZ2luZyBzdXBwb3J0CisjICAidG9vbHMtcHJvZmlsZSIgIC0gYWRkIHByb2ZpbGluZyB0b29scyAob3Byb2ZpbGUsIGV4bWFwLCBsdHRuZywgdmFsZ3JpbmQpCisjICAidG9vbHMtdGVzdGFwcHMiIC0gYWRkIHVzZWZ1bCB0ZXN0aW5nIHRvb2xzICh0c19wcmludCwgYXBsYXksIGFyZWNvcmQgZXRjLikKKyMgICJkZWJ1Zy10d2Vha3MiICAgLSBtYWtlIGFuIGltYWdlIHN1aXRhYmxlIGZvciBkZXZlbG9wbWVudAorIyAgICAgICAgICAgICAgICAgICAgIGUuZy4gc3NoIHJvb3QgYWNjZXNzIGhhcyBhIGJsYW5rIHBhc3N3b3JkCisjIFRoZXJlIGFyZSBvdGhlciBhcHBsaWNhdGlvbiB0YXJnZXRzIHRoYXQgY2FuIGJlIHVzZWQgaGVyZSB0b28sIHNlZQorIyBtZXRhL2NsYXNzZXMvaW1hZ2UuYmJjbGFzcyBhbmQgbWV0YS9jbGFzc2VzL2NvcmUtaW1hZ2UuYmJjbGFzcyBmb3IgbW9yZSBkZXRhaWxzLgorIyBXZSBkZWZhdWx0IHRvIGVuYWJsaW5nIHRoZSBkZWJ1Z2dpbmcgdHdlYWtzLgorRVhUUkFfSU1BR0VfRkVBVFVSRVMgPSAiZGVidWctdHdlYWtzIgorCisjCisjIEFkZGl0aW9uYWwgaW1hZ2UgZmVhdHVyZXMKKyMKKyMgVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qgb2YgYWRkaXRpb25hbCBjbGFzc2VzIHRvIHVzZSB3aGVuIGJ1aWxkaW5nIGltYWdlcyB3aGljaAorIyBlbmFibGUgZXh0cmEgZmVhdHVyZXMuIFNvbWUgYXZhaWxhYmxlIG9wdGlvbnMgd2hpY2ggY2FuIGJlIGluY2x1ZGVkIGluIHRoaXMgdmFyaWFibGUgCisjIGFyZToKKyMgICAtICdidWlsZHN0YXRzJyBjb2xsZWN0IGJ1aWxkIHN0YXRpc3RpY3MKKyMgICAtICdpbWFnZS1ta2xpYnMnIHRvIHJlZHVjZSBzaGFyZWQgbGlicmFyeSBmaWxlcyBzaXplIGZvciBhbiBpbWFnZQorIyAgIC0gJ2ltYWdlLXByZWxpbmsnIGluIG9yZGVyIHRvIHByZWxpbmsgdGhlIGZpbGVzeXN0ZW0gaW1hZ2UKKyMgICAtICdpbWFnZS1zd2FiJyB0byBwZXJmb3JtIGhvc3Qgc3lzdGVtIGludHJ1c2lvbiBkZXRlY3Rpb24KKyMgTk9URTogaWYgbGlzdGluZyBta2xpYnMgJiBwcmVsaW5rIGJvdGgsIHRoZW4gbWFrZSBzdXJlIG1rbGlicyBpcyBiZWZvcmUgcHJlbGluaworIyBOT1RFOiBta2xpYnMgYWxzbyBuZWVkcyB0byBiZSBleHBsaWNpdGx5IGVuYWJsZWQgZm9yIGEgZ2l2ZW4gaW1hZ2UsIHNlZSBsb2NhbC5jb25mLmV4dGVuZGVkCitVU0VSX0NMQVNTRVMgPz0gImJ1aWxkc3RhdHMgaW1hZ2UtbWtsaWJzIGltYWdlLXByZWxpbmsiCisKKyMKKyMgUnVudGltZSB0ZXN0aW5nIG9mIGltYWdlcworIworIyBUaGUgYnVpbGQgc3lzdGVtIGNhbiB0ZXN0IGJvb3RpbmcgdmlydHVhbCBtYWNoaW5lIGltYWdlcyB1bmRlciBxZW11IChhbiBlbXVsYXRvcikKKyMgYWZ0ZXIgYW55IHJvb3QgZmlsZXN5c3RlbXMgYXJlIGNyZWF0ZWQgYW5kIHJ1biB0ZXN0cyBhZ2FpbnN0IHRob3NlIGltYWdlcy4gVG8KKyMgZW5hYmxlIHRoaXMgdW5jb21tZW50IHRoaXMgbGluZS4gU2VlIGNsYXNzZXMvdGVzdGltYWdlKC1hdXRvKS5iYmNsYXNzIGZvcgorIyBmdXJ0aGVyIGRldGFpbHMuCisjVEVTVF9JTUFHRSA9ICIxIgorIworIyBJbnRlcmFjdGl2ZSBzaGVsbCBjb25maWd1cmF0aW9uCisjCisjIFVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyB0aGUgc3lzdGVtIG1heSBuZWVkIGlucHV0IGZyb20geW91IGFuZCB0byBkbyB0aGlzIGl0IAorIyBjYW4gbGF1bmNoIGFuIGludGVyYWN0aXZlIHNoZWxsLiBJdCBuZWVkcyB0byBkbyB0aGlzIHNpbmNlIHRoZSBidWlsZCBpcyAKKyMgbXVsdGl0aHJlYWRlZCBhbmQgbmVlZHMgdG8gYmUgYWJsZSB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbW9yZSB0aGFuIG9uZSBwYXJhbGxlbAorIyBwcm9jZXNzIG1heSByZXF1aXJlIHRoZSB1c2VyJ3MgYXR0ZW50aW9uLiBUaGUgZGVmYXVsdCBpcyBpdGVyYXRlIG92ZXIgdGhlIGF2YWlsYWJsZQorIyB0ZXJtaW5hbCB0eXBlcyB0byBmaW5kIG9uZSB0aGF0IHdvcmtzLgorIworIyBFeGFtcGxlcyBvZiB0aGUgb2NjYXNpb25zIHRoaXMgbWF5IGhhcHBlbiBhcmUgd2hlbiByZXNvbHZpbmcgcGF0Y2hlcyB3aGljaCBjYW5ub3QKKyMgYmUgYXBwbGllZCwgdG8gdXNlIHRoZSBkZXZzaGVsbCBvciB0aGUga2VybmVsIG1lbnVjb25maWcKKyMKKyMgU3VwcG9ydGVkIHZhbHVlcyBhcmUgYXV0bywgZ25vbWUsIHhmY2UsIHJ4dnQsIHNjcmVlbiwga29uc29sZSAoS0RFIDMueCBvbmx5KSwgbm9uZQorIyBOb3RlOiBjdXJyZW50bHksIEtvbnNvbGUgc3VwcG9ydCBvbmx5IHdvcmtzIGZvciBLREUgMy54IGR1ZSB0byB0aGUgd2F5CisjIG5ld2VyIEtvbnNvbGUgdmVyc2lvbnMgYmVoYXZlCisjT0VfVEVSTUlOQUwgPSAiYXV0byIKKyMgQnkgZGVmYXVsdCBkaXNhYmxlIGludGVyYWN0aXZlIHBhdGNoIHJlc29sdXRpb24gKHRhc2tzIHdpbGwganVzdCBmYWlsIGluc3RlYWQpOgorUEFUQ0hSRVNPTFZFID0gIm5vb3AiCisKKyMKKyMgRGlzayBTcGFjZSBNb25pdG9yaW5nIGR1cmluZyB0aGUgYnVpbGQKKyMKKyMgTW9uaXRvciB0aGUgZGlzayBzcGFjZSBkdXJpbmcgdGhlIGJ1aWxkLiBJZiB0aGVyZSBpcyBsZXNzIHRoYXQgMUdCIG9mIHNwYWNlIG9yIGxlc3MKKyMgdGhhbiAxMDBLIGlub2RlcyBpbiBhbnkga2V5IGJ1aWxkIGxvY2F0aW9uIChUTVBESVIsIERMX0RJUiwgU1NUQVRFX0RJUiksIGdyYWNlZnVsbHkKKyMgc2h1dGRvd24gdGhlIGJ1aWxkLiBJZiB0aGVyZSBpcyBsZXNzIHRoYXQgMTAwTUIgb3IgMUsgaW5vZGVzLCBwZXJmb3JtIGEgaGFyZCBhYm9ydAorIyBvZiB0aGUgYnVpbGQuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCBydW5uaW5nIGNvbXBsZXRlbHkgb3V0IG9mIHNwYWNlIGNhbiBjb3JydXB0CisjIGZpbGVzIGFuZCBkYW1hZ2VzIHRoZSBidWlsZCBpbiB3YXlzIHdoaWNoIG1heSBub3QgYmUgZWFzaWx5IHJlY292ZXJhYmxlLgorIyBJdCdzIG5lY2VzYXJ5IHRvIG1vbml0b3IgL3RtcCwgaWYgdGhlcmUgaXMgbm8gc3BhY2UgbGVmdCB0aGUgYnVpbGQgd2lsbCBmYWlsCisjIHdpdGggdmVyeSBleG90aWMgZXJyb3JzLgorQkJfRElTS01PTl9ESVJTID0gIlwKKyAgICBTVE9QVEFTS1MsJHtUTVBESVJ9LDFHLDEwMEsgXAorICAgIFNUT1BUQVNLUywke0RMX0RJUn0sMUcsMTAwSyBcCisgICAgU1RPUFRBU0tTLCR7U1NUQVRFX0RJUn0sMUcsMTAwSyBcCisgICAgU1RPUFRBU0tTLC90bXAsMTAwTSwxMDBLIFwKKyAgICBBQk9SVCwke1RNUERJUn0sMTAwTSwxSyBcCisgICAgQUJPUlQsJHtETF9ESVJ9LDEwME0sMUsgXAorICAgIEFCT1JULCR7U1NUQVRFX0RJUn0sMTAwTSwxSyBcCisgICAgQUJPUlQsL3RtcCwxME0sMUsiCisKKyMKKyMgU2hhcmVkLXN0YXRlIGZpbGVzIGZyb20gb3RoZXIgbG9jYXRpb25zCisjCisjIEFzIG1lbnRpb25lZCBhYm92ZSwgc2hhcmVkIHN0YXRlIGZpbGVzIGFyZSBwcmVidWlsdCBjYWNoZSBkYXRhIG9iamVjdHMgd2hpY2ggY2FuIAorIyB1c2VkIHRvIGFjY2VsZXJhdGUgYnVpbGQgdGltZS4gVGhpcyB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgdGhlIHN5c3RlbQorIyB0byBzZWFyY2ggb3RoZXIgbWlycm9yIGxvY2F0aW9ucyBmb3IgdGhlc2Ugb2JqZWN0cyBiZWZvcmUgaXQgYnVpbGRzIHRoZSBkYXRhIGl0c2VsZi4KKyMKKyMgVGhpcyBjYW4gYmUgYSBmaWxlc3lzdGVtIGRpcmVjdG9yeSwgb3IgYSByZW1vdGUgdXJsIHN1Y2ggYXMgaHR0cCBvciBmdHAuIFRoZXNlCisjIHdvdWxkIGNvbnRhaW4gdGhlIHNzdGF0ZS1jYWNoZSByZXN1bHRzIGZyb20gcHJldmlvdXMgYnVpbGRzIChwb3NzaWJseSBmcm9tIG90aGVyIAorIyBtYWNoaW5lcykuIFRoaXMgdmFyaWFibGUgd29ya3MgbGlrZSBmZXRjaGVyIE1JUlJPUlMvUFJFTUlSUk9SUyBhbmQgcG9pbnRzIHRvIHRoZSAKKyMgY2FjaGUgbG9jYXRpb25zIHRvIGNoZWNrIGZvciB0aGUgc2hhcmVkIG9iamVjdHMuCisjIE5PVEU6IGlmIHRoZSBtaXJyb3IgdXNlcyB0aGUgc2FtZSBzdHJ1Y3R1cmUgYXMgU1NUQVRFX0RJUiwgeW91IG5lZWQgdG8gYWRkIFBBVEgKKyMgYXQgdGhlIGVuZCBhcyBzaG93biBpbiB0aGUgZXhhbXBsZXMgYmVsb3cuIFRoaXMgd2lsbCBiZSBzdWJzdGl0dXRlZCB3aXRoIHRoZQorIyBjb3JyZWN0IHBhdGggd2l0aGluIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlLgorI1NTVEFURV9NSVJST1JTID89ICJcCisjZmlsZTovLy4qIGh0dHA6Ly9zb21lc2VydmVyLnRsZC9zaGFyZS9zc3RhdGUvUEFUSDtkb3dubG9hZGZpbGVuYW1lPVBBVEggXG4gXAorI2ZpbGU6Ly8uKiBmaWxlOi8vL3NvbWUvbG9jYWwvZGlyL3NzdGF0ZS9QQVRIIgorCisKKyMKKyMgUWVtdSBjb25maWd1cmF0aW9uCisjCisjIEJ5IGRlZmF1bHQgcWVtdSB3aWxsIGJ1aWxkIHdpdGggYSBidWlsdGluIFZOQyBzZXJ2ZXIgd2hlcmUgZ3JhcGhpY2FsIG91dHB1dCBjYW4gYmUKKyMgc2Vlbi4gVGhlIHR3byBsaW5lcyBiZWxvdyBlbmFibGUgdGhlIFNETCBiYWNrZW5kIHRvby4gVGhpcyBhc3N1bWVzIHRoZXJlIGlzIGEKKyMgbGlic2RsIGxpYnJhcnkgYXZhaWxhYmxlIG9uIHlvdXIgYnVpbGQgc3lzdGVtLgorUEFDS0FHRUNPTkZJR19hcHBlbmRfcG4tcWVtdS1uYXRpdmUgPSAiIHNkbCIKK1BBQ0tBR0VDT05GSUdfYXBwZW5kX3BuLW5hdGl2ZXNkay1xZW11ID0gIiBzZGwiCitBU1NVTUVfUFJPVklERUQgKz0gImxpYnNkbC1uYXRpdmUiCisKKworIyBDT05GX1ZFUlNJT04gaXMgaW5jcmVhc2VkIGVhY2ggdGltZSBidWlsZC9jb25mLyBjaGFuZ2VzIGluY29tcGF0aWJseSBhbmQgaXMgdXNlZCB0bworIyB0cmFjayB0aGUgdmVyc2lvbiBvZiB0aGlzIGZpbGUgd2hlbiBpdCB3YXMgZ2VuZXJhdGVkLiBUaGlzIGNhbiBzYWZlbHkgYmUgaWdub3JlZCBpZgorIyB0aGlzIGRvZXNuJ3QgbWVhbiBhbnl0aGluZyB0byB5b3UuCitDT05GX1ZFUlNJT04gPSAiMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2xvY2FsLmNvbmYuc2FtcGxlLmV4dGVuZGVkIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvbG9jYWwuY29uZi5zYW1wbGUuZXh0ZW5kZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NkZDMyNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2xvY2FsLmNvbmYuc2FtcGxlLmV4dGVuZGVkCkBAIC0wLDAgKzEsMzc0IEBACisjIEJCTUFTSyBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIHRlbGwgQml0QmFrZSB0byBpZ25vcmUKKyMgY2VydGFpbiByZWNpcGVzLgorI0JCTUFTSyA9ICIiCisKKyMKKyMgUGFyYWxsZWxpc20gT3B0aW9ucworIworIyBUaGVzZSB0d28gb3B0aW9ucyBjb250cm9sIGhvdyBtdWNoIHBhcmFsbGVsaXNtIEJpdEJha2Ugc2hvdWxkIHVzZS4gVGhlIGZpcnN0CisjIG9wdGlvbiBkZXRlcm1pbmVzIGhvdyBtYW55IHRhc2tzIGJpdGJha2Ugc2hvdWxkIHJ1biBpbiBwYXJhbGxlbDoKKyMKKyNCQl9OVU1CRVJfVEhSRUFEUyA/PSAiNCIKKyMKKyMgRGVmYXVsdCB0byBzZXR0aW5nIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gY3B1IGNvdW50CisjQkJfTlVNQkVSX1RIUkVBRFMgPz0gIiR7QG9lLnV0aWxzLmNwdV9jb3VudCgpfSIKKyMKKyMgVGhlIHNlY29uZCBvcHRpb24gY29udHJvbHMgaG93IG1hbnkgcHJvY2Vzc2VzIG1ha2Ugc2hvdWxkIHJ1biBpbiBwYXJhbGxlbCB3aGVuCisjIHJ1bm5pbmcgY29tcGlsZSB0YXNrczoKKyMKKyNQQVJBTExFTF9NQUtFID89ICItaiA0IgorIworIyBEZWZhdWx0IHRvIHNldHRpbmcgYXV0b21hdGljYWxseSBiYXNlZCBvbiBjcHUgY291bnQKKyNQQVJBTExFTF9NQUtFID89ICItaiAke0BvZS51dGlscy5jcHVfY291bnQoKX0iCisjCisjIEZvciBhIHF1YWQtY29yZSBtYWNoaW5lLCBCQl9OVU1CRVJfVEhSRUFEUyA9ICI0IiwgUEFSQUxMRUxfTUFLRSA9ICItaiA0IiB3b3VsZAorIyBiZSBhcHByb3ByaWF0ZSBmb3IgZXhhbXBsZS4KKworCisjIGdsaWJjIGNvbmZpZ3VyYWJpbGl0eSBpcyB1c2VkIHRvIHJlZHVjZSBtaW5pbWFsIGltYWdlJ3Mgc2l6ZS4KKyMgdGhlIGFsbCBzdXBwb3J0ZWQgZ2xpYmMgb3B0aW9ucyBhcmUgbGlzdGVkIGluIERJU1RST19GRUFUVVJFU19MSUJDCisjIGFuZCBkaXNhYmxlZCBieSBkZWZhdWx0LiBVbmNvbW1lbnQgYW5kIGNvcHkgdGhlIERJU1RST19GRUFUVVJFU19MSUJDCisjIGFuZCBESVNUUk9fRkVBVFVSRVMgZGVmaW5pdGlvbnMgdG8gbG9jYWwuY29uZiB0byBlbmFibGUgdGhlIG9wdGlvbnMuCisjRElTVFJPX0ZFQVRVUkVTX0xJQkMgPSAiaXB2NiBsaWJjLWJhY2t0cmFjZSBsaWJjLWJpZy1tYWNyb3MgbGliYy1ic2QgbGliYy1jeHgtdGVzdHMgbGliYy1jYXRnZXRzIGxpYmMtY2hhcnNldHMgbGliYy1jcnlwdCBcCisjICAgICAgICAgICAgICAgbGliYy1jcnlwdC11ZmMgbGliYy1kYi1hbGlhc2VzIGxpYmMtZW52eiBsaWJjLWZjdnQgbGliYy1mbXRtc2cgbGliYy1mc3RhYiBsaWJjLWZ0cmF2ZXJzZSBcCisjICAgICAgICAgICAgICAgbGliYy1nZXRsb2dpbiBsaWJjLWlkbiBsaWJjLWluZXQgbGliYy1pbmV0LWFubCBsaWJjLWxpYm0gbGliYy1sb2NhbGVzIGxpYmMtbG9jYWxlLWNvZGUgXAorIyAgICAgICAgICAgICAgIGxpYmMtbWVtdXNhZ2UgbGliYy1uaXMgbGliYy1uc3N3aXRjaCBsaWJjLXJjbWQgbGliYy1ydGxkLWRlYnVnIGxpYmMtc3Bhd24gbGliYy1zdHJlYW1zIGxpYmMtc3VucnBjIFwKKyMgICAgICAgICAgICAgICBsaWJjLXV0bXAgbGliYy11dG1weCBsaWJjLXdvcmRleHAgbGliYy1wb3NpeC1jbGFuZy13Y2hhciBsaWJjLXBvc2l4LXJlZ2V4cCBsaWJjLXBvc2l4LXJlZ2V4cC1nbGliYyBcCisjICAgICAgICAgICAgICAgbGliYy1wb3NpeC13Y2hhci1pbyIKKworI0RJU1RST19GRUFUVVJFUyA9ICJhbHNhIGJsdWV0b290aCBleHQyIGlyZGEgcGNtY2lhIHVzYmdhZGdldCB1c2Job3N0IHdpZmkgbmZzIHplcm9jb25mIHBjaSAke0RJU1RST19GRUFUVVJFU19MSUJDfSIKKworIyBJZiB5b3Ugd2FudCB0byBnZXQgYW4gaW1hZ2UgYmFzZWQgb24gZGlyZWN0ZmIgd2l0aG91dCB4MTEsIFBsZWFzZSBjb3B5IHRoaXMgdmFyaWFibGUgdG8gYnVpbGQvY29uZi9sb2NhbC5jb25mCisjRElTVFJPX0ZFQVRVUkVTID0gImFsc2EgYXJncCBibHVldG9vdGggZXh0MiBpcmRhIGxhcmdlZmlsZSBwY21jaWEgdXNiZ2FkZ2V0IHVzYmhvc3Qgd2lmaSB4YXR0ciBuZnMgemVyb2NvbmYgcGNpIDNnIGRpcmVjdGZiICR7RElTVFJPX0ZFQVRVUkVTX0xJQkN9IgorCisjIEVOQUJMRV9CSU5BUllfTE9DQUxFX0dFTkVSQVRJT04gY29udHJvbHMgdGhlIGdlbmVyYXRpb24gb2YgYmluYXJ5IGxvY2FsZQorIyBwYWNrYWdlcyBhdCBidWlsZCB0aW1lIHVzaW5nIHFlbXUtbmF0aXZlLiBEaXNhYmxpbmcgaXQgKGJ5IHNldHRpbmcgaXQgdG8gMCkKKyMgd2lsbCBzYXZlIHNvbWUgYnVpbGQgdGltZSBhdCB0aGUgZXhwZW5zZSBvZiBicmVha2luZyBpMThuIG9uIGRldmljZXMgd2l0aAorIyBsZXNzIHRoYW4gMTI4TUIgUkFNLgorI0VOQUJMRV9CSU5BUllfTE9DQUxFX0dFTkVSQVRJT04gPSAiMSIKKworIyBTZXQgR0xJQkNfR0VORVJBVEVfTE9DQUxFUyB0byB0aGUgbG9jYWxlcyB5b3Ugd2lzaCB0byBnZW5lcmF0ZSBzaG91bGQgeW91IG5vdAorIyB3aXNoIHRvIHBlcmZvcm0gdGhlIHRpbWUtY29uc3VtaW5nIHN0ZXAgb2YgZ2VuZXJhdGluZyBhbGwgTElCQyBsb2NhbGVzLgorIyBOT1RFOiBJZiByZW1vdmluZyBlbl9VUy5VVEYtOCB5b3Ugd2lsbCBhbHNvIG5lZWQgdG8gdW5jb21tZW50LCBhbmQgc2V0CisjIGFwcHJvcHJpYXRlIHZhbHVlIGZvciBJTUFHRV9MSU5HVUFTLgorIyBXQVJOSU5HOiB0aGlzIG1heSBicmVhayBsb2NhbGlzYXRpb24hCisjR0xJQkNfR0VORVJBVEVfTE9DQUxFUyA9ICJlbl9HQi5VVEYtOCBlbl9VUy5VVEYtOCIKKyNJTUFHRV9MSU5HVUFTID89ICJlbi1nYiIKKworIyBUaGUgZm9sbG93aW5nIGFyZSB1c2VkIHRvIGNvbnRyb2wgb3B0aW9ucyByZWxhdGVkIHRvIGRlYnVnZ2luZy4KKyMKKyMgVW5jb21tZW50IHRoaXMgdG8gY2hhbmdlIHRoZSBvcHRpbWl6YXRpb24gdG8gbWFrZSBkZWJ1Z2dpbmcgZWFzZXIsIGF0IHRoZSAKKyMgcG9zc2libGUgY29zdCBvZiBwZXJmb3JtYW5jZS4KKyMgREVCVUdfQlVJTEQgPSAiMSIKKyMKKyMgVW5jb21tZW50IHRoaXMgdG8gZGlzYWJsZSB0aGUgc3RyaXBwaW5nIG9mIHRoZSBpbnN0YWxsZWQgYmluYXJpZXMKKyMgSU5ISUJJVF9QQUNLQUdFX1NUUklQID0gIjEiCisjCisjIFVuY29tbWVudCB0aGlzIHRvIGRpc2FibGUgdGhlIHNwbGl0IG9mIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBpbnRvIC1kYmcgZmlsZXMKKyMgSU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUID0gIjEiCisjCisjIFdoZW4gc3BsaXR0aW5nIGRlYnVnIGluZm9ybWF0aW9uLCB0aGUgZm9sbG93aW5nIGNvbnRyb2xzIHRoZSByZXN1bHRzIG9mIHRoZQorIyBmaWxlIHNwbGl0dGluZy4KKyMKKyMgIC5kZWJ1ZyAoZGVmYXVsdCk6CisjICAgIFdoZW4gc3BsaXR0aW5nIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiB3aWxsIGJlIHBsYWNlZCBpbnRvCisjICAgIGEgLmRlYnVnIGRpcmVjdG9yeSBpbiB0aGUgc2FtZSBkaXJuYW1lIG9mIHRoZSBiaW5hcnkgcHJvZHVjZWQ6CisjICAgICAgL2Jpbi9mb28gLT4gL2Jpbi8uZGVidWcvZm9vCisjCisjICBkZWJ1Zy1maWxlLWRpcmVjdG9yeToKKyMgICAgV2hlbiBzcGxpdHRpbmcgdGhlIGRlYnVnIGluZm9ybWF0aW9uIHdpbGwgYmUgcGxhY2VkIGludG8KKyMgICAgYSBjZW50cmFsIGRlYnVnLWZpbGUtZGlyZWN0b3J5LCAvdXNyL2xpYi9kZWJ1ZzoKKyMgICAgICAvYmluL2ZvbyAtPiAvdXNyL2xpYi9kZWJ1Zy9iaW4vZm9vLmRlYnVnCisjCisjICAgIEFueSBzb3VyY2UgY29kZSByZWZlcmVuY2VkIGluIHRoZSBkZWJ1ZyBzeW1ib2xzIHdpbGwgYmUgY29waWVkCisjICAgIGFuZCBtYWRlIGF2YWlsYWJsZSB3aXRoaW4gdGhlIC91c3Ivc3JjL2RlYnVnIGRpcmVjdG9yeQorIworI1BBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEUgPSAnLmRlYnVnJworIyBQQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxFID0gJ2RlYnVnLWZpbGUtZGlyZWN0b3J5JworCisjIFVuY29tbWVudCB0aGVzZSB0byBidWlsZCBhIHBhY2thZ2Ugc3VjaCB0aGF0IHlvdSBjYW4gdXNlIGdwcm9mIHRvIHByb2ZpbGUgaXQuCisjIE5PVEU6IFRoaXMgd2lsbCBvbmx5IHdvcmsgd2l0aCAnbGludXgnIHRhcmdldHMsIG5vdAorIyAnbGludXgtdWNsaWJjJywgYXMgdUNsaWJjIGRvZXNuJ3QgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5CisjIG9iamVjdCBmaWxlcy4gIEFsc28sIGRvbid0IGJ1aWxkIGdsaWJjIGl0c2VsZiB3aXRoIHRoZXNlCisjIGZsYWdzLCBvciBpdCdsbCBmYWlsIHRvIGJ1aWxkLgorIworIyBQUk9GSUxFX09QVElNSVpBVElPTiA9ICItcGciCisjIFNFTEVDVEVEX09QVElNSVpBVElPTiA9ICIke1BST0ZJTEVfT1BUSU1JWkFUSU9OfSIKKyMgTERGTEFHUyA9KyAiLXBnIgorCisjIFRDTU9ERSBjb250cm9scyB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBnZW5lcmF0ZWQgcGFja2FnZXMvaW1hZ2VzIGJ5CisjIHRlbGxpbmcgcG9reSB3aGljaCB0b29sY2hhaW4gJ3Byb2ZpbGUnIHRvIHVzZS4KKyMKKyMgVGhlIGRlZmF1bHQgaXMgImRlZmF1bHQiIHdoaWNoIHVzZXMgdGhlIGludGVybmFsIHRvb2xjaGFpbi4gV2l0aAorIyBhZGRpdGlvbmFsIGxheWVycywgaXQgaXMgcG9zc2libGUgdG8gc2V0IHRoaXMgdG8gdXNlIGEgcHJlY29tcGlsZWQKKyMgZXh0ZXJuYWwgdG9vbGNoYWluLiBPbmUgZXhhbXBsZSBpcyB0aGUgU291cmNlcnkgRysrIFRvb2xjaGFpbiwgc3VwcG9ydAorIyBmb3Igd2hpY2ggaXMgbm93IGluIHRoZSBzZXBhcmF0ZSBtZXRhLXNvdXJjZXJ5IGxheWVyOgorIworIyAgaHR0cDovL2dpdGh1Yi5jb20vTWVudG9yRW1iZWRkZWQvbWV0YS1zb3VyY2VyeS8KKyMKKyMgbWV0YS1zb3VyY2VyeSBjYW4gYmUgdXNlZCBhcyBhIHRlbXBsYXRlIGZvciBhZGRpbmcgc3VwcG9ydCBmb3Igb3RoZXIKKyMgZXh0ZXJuYWwgdG9vbGNoYWlucy4gU2VlIHRoZSBsaW5rIGFib3ZlIGZvciBmdXJ0aGVyIGRldGFpbHMuCisjCisjIFRDTU9ERSBwb2ludHMgdGhlIHN5c3RlbSB0byBhIGZpbGUgaW4gY29uZi9kaXN0cm8vaW5jbHVkZS90Y21vZGUtJHtUQ01PREV9LmluYywKKyMgc28gZm9yIG1ldGEtc291cmNlcnkgd2hpY2ggaGFzIGNvbmYvZGlzdHJvL2luY2x1ZGUvdGNtb2RlLWV4dGVybmFsLXNvdXJjZXJ5LmluYworIyB5b3Ugd291bGQgc2V0IGl0IGFzIGZvbGxvd3M6CisjCisjIFRDTU9ERSA/PSAiZXh0ZXJuYWwtc291cmNlcnkiCisKKyMgbWtsaWJzIGxpYnJhcnkgc2l6ZSBvcHRpbWl6YXRpb24gaXMgbW9yZSB1c2VmdWwgdG8gc21hbGxlciBpbWFnZXMsCisjIGFuZCBsZXNzIHVzZWZ1bCBmb3IgYmlnZ2VyIGltYWdlcy4gQWxzbyBta2xpYnMgbGlicmFyeSBvcHRpbWl6YXRpb24KKyMgY2FuIGJyZWFrIHRoZSBBQkkgY29tcGF0aWJpbGl0eSwgc28gc2hvdWxkIG5vdCBiZSBhcHBsaWVkIHRvIHRoZQorIyBpbWFnZXMgd2hpY2ggYXJlIHRvIGJlIGV4dGVuZGVkIG9yIHVwZ3JhZGVkIGxhdGVyLgorI1RoaXMgZW5hYmxlZCBta2xpYnMgbGlicmFyeSBzaXplIG9wdGltaXphdGlvbiBqdXN0IGZvciB0aGUgc3BlY2lmaWVkIGltYWdlLgorI01LTElCU19PUFRJTUlaRURfSU1BR0VTID89ICJjb3JlLWltYWdlLW1pbmltYWwiCisjVGhpcyBlbmFibGUgbWtsaWJzIGxpYnJhcnkgc2l6ZSBvcHRpbWl6YXRpb24gd2lsbCBiZSBmb3IgYWxsIHRoZSBpbWFnZXMuCisjTUtMSUJTX09QVElNSVpFRF9JTUFHRVMgPz0gImFsbCIKKworIyBVbmNvbW1lbnQgdGhpcyBpZiB5b3VyIGhvc3QgZGlzdHJpYnV0aW9uIHByb3ZpZGVzIHRoZSBoZWxwMm1hbiB0b29sLgorI0FTU1VNRV9QUk9WSURFRCArPSAiaGVscDJtYW4tbmF0aXZlIgorCisjIFRoaXMgdmFsdWUgaXMgY3VycmVudGx5IHVzZWQgYnkgcHNldWRvIHRvIGRldGVybWluZSBpZiB0aGUgcmVjaXBlIHNob3VsZAorIyBidWlsZCBib3RoIHRoZSAzMi1iaXQgYW5kIDY0LWJpdCB3cmFwcGVyIGxpYnJhcmllcyBvbiBhIDY0LWJpdCBidWlsZCBzeXN0ZW0uCisjCisjIFBzZXVkbyB3aWxsIGF0dGVtcHQgdG8gZGV0ZXJtaW5lIGlmIGEgMzItYml0IHdyYXBwZXIgaXMgbmVjZXNzYXJ5LCBidXQKKyMgaXQgZG9lc24ndCBhbHdheXMgZ3Vlc3MgcHJvcGVybHkuICBJZiB5b3UgaGF2ZSAzMi1iaXQgZXhlY3V0YWJsZXMgb24gCisjIHlvdXIgNjQtYml0IGJ1aWxkIHN5c3RlbSwgeW91IGxpa2VseSB3YW50IHRvIHNldCB0aGlzIHRvICIwIiwgCisjIG90aGVyd2lzZSB5b3UgY291bGQgZW5kIHVwIHdpdGggaW5jb3JyZWN0IGZpbGUgYXR0cmlidXRlcyBvbiB0aGUgCisjIHRhcmdldCBmaWxlc3lzdGVtLgorIworIyBEZWZhdWx0IGlzIHRvIG5vdCBidWlsZCAzMiBiaXQgbGlicyBvbiA2NCBiaXQgc3lzdGVtcywgdW5jb21tZW50IHRoaXMKKyMgaWYgeW91IG5lZWQgdGhlIDMyIGJpdHMgbGlicworI05PMzJMSUJTID0gIjAiCisKKyMgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXMgdG8gZW5hYmxlIG11bHRpbGliIGJ1aWxkcworI3JlcXVpcmUgY29uZi9tdWx0aWxpYi5jb25mCisjTVVMVElMSUJTID0gIm11bHRpbGliOmxpYjMyIgorI0RFRkFVTFRUVU5FX3ZpcnRjbGFzcy1tdWx0aWxpYi1saWIzMiA9ICJ4ODYiCisKKyMgU2V0IFJQTV9QUkVGRVJfRUxGX0FSQ0ggdG8gY29uZmlndXJlIHByZWZlcnJlZCBBQkkgd2hlbiB1c2luZyBycG0gcGFja2FnaW5nCisjIGJhY2tlbmQgdG8gZ2VuZXJhdGUgYSByb290ZnMsIGNob2ljZXMgYXJlOgorIyAxOiBFTEYzMiB3aW5zCisjIDI6IEVMRjY0IHdpbnMKKyMgNDogRUxGNjQgTjMyIHdpbnMgKGZvciBtaXBzNjQgb3IgbWlwczY0ZWwgb25seSkKKyNSUE1fUFJFRkVSX0VMRl9BUkNIID89ICIyIgorCisjIFRoZSBuZXR3b3JrIGJhc2VkIFBSIHNlcnZpY2UgaG9zdCBhbmQgcG9ydAorIyBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byBlbmFibGUgUFJzZXJ2aWNlLgorIyBTZXQgUFJTRVJWX0hPU1QgdG8gJ2xvY2FsaG9zdDowJyB0byBhdXRvbWF0aWNhbGx5CisjIHN0YXJ0IGxvY2FsIFBSU2VydmljZS4KKyMgU2V0IHRvIG90aGVyIHZhbHVlcyB0byB1c2UgcmVtb3RlIFBSU2VydmljZS4KKyNQUlNFUlZfSE9TVCA9ICJsb2NhbGhvc3Q6MCIKKworIyBBZGRpdGlvbmFsIGltYWdlIGdlbmVyYXRpb24gZmVhdHVyZXMKKyMKKyMgVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qgb2YgY2xhc3NlcyB0byBpbXBvcnQgdG8gdXNlIGluIHRoZSBnZW5lcmF0aW9uIG9mIGltYWdlcworIyBjdXJyZW50bHkgYW4gZXhhbXBsZSBjbGFzcyBpcyBpbWFnZV90eXBlc191Ym9vdAorIyBJTUFHRV9DTEFTU0VTID0gIiBpbWFnZV90eXBlc191Ym9vdCIKKworIyBJbmNyZW1lbnRhbCBycG0gaW1hZ2UgZ2VuZXJhdGlvbiwgdGhlIHJvb3RmcyB3b3VsZCBiZSB0b3RhbGx5IHJlbW92ZWQKKyMgYW5kIHJlLWNyZWF0ZWQgaW4gdGhlIHNlY29uZCBnZW5lcmF0aW9uIGJ5IGRlZmF1bHQsIGJ1dCB3aXRoCisjIElOQ19SUE1fSU1BR0VfR0VOID0gIjEiLCB0aGUgcnBtIGJhc2VkIHJvb3RmcyB3b3VsZCBiZSBrZXB0LCBhbmQgd2lsbAorIyBkbyB1cGRhdGUocmVtb3ZlL2FkZCBzb21lIHBrZ3MpIG9uIGl0LiAgTk9URTogVGhpcyBpcyBub3Qgc3VnZ2VzdGVkCisjIHdoZW4geW91IHdhbnQgdG8gY3JlYXRlIGEgcHJvZHVjdGl2ZSByb290ZnMKKyNJTkNfUlBNX0lNQUdFX0dFTiA9ICIxIgorCisjIFRoaXMgaXMgYSBsaXN0IG9mIHBhY2thZ2VzIHRoYXQgcmVxdWlyZSBhIGNvbW1lcmNpYWwgbGljZW5zZSB0byBzaGlwCisjIHByb2R1Y3QuIElmIHNoaXBwZWQgYXMgcGFydCBvZiBhbiBpbWFnZSB0aGVzZSBwYWNrYWdlcyBtYXkgaGF2ZQorIyBpbXBsaWNhdGlvbnMgc28gdGhleSBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdC4gIFRvIGVuYWJsZSB0aGVtLAorIyB1bi1jb21tZW50IHRoZSBiZWxvdyBhcyBhcHByb3ByaWF0ZS4KKyNMSUNFTlNFX0ZMQUdTX1dISVRFTElTVCA9ICJjb21tZXJjaWFsX2dzdC1mbHVlbmRvLW1wMyBcCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVyY2lhbF9nc3Qtb3Blbm1heCBcCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVyY2lhbF9nc3QtcGx1Z2lucy11Z2x5IFwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZXJjaWFsX2xhbWUgXAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lcmNpYWxfbGlibWFkIFwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZXJjaWFsX2xpYm9teGlsIFwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZXJjaWFsX21wZWcyZGVjIFwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZXJjaWFsX3FtbXAiCisKKworIworIyBEaXNrIHNwYWNlIG1vbml0b3IsIHRha2UgYWN0aW9uIHdoZW4gdGhlIGRpc2sgc3BhY2Ugb3IgdGhlIGFtb3VudCBvZgorIyBpbm9kZSBpcyBydW5uaW5nIGxvdywgaXQgaXMgZW5hYmxlZCB3aGVuIEJCX0RJU0tNT05fRElSUyBpcyBzZXQuCisjCisjIFNldCB0aGUgZGlyZWN0b3J5IGZvciB0aGUgbW9uaXRvciwgdGhlIGZvcm1hdCBpczoKKyMgImFjdGlvbixkaXJlY3RvcnksbWluaW11bV9zcGFjZSxtaW5pbXVtX2ZyZWVfaW5vZGUiCisjCisjIFRoZSAiYWN0aW9uIiBtdXN0IGJlIHNldCBhbmQgc2hvdWxkIGJlIG9uZSBvZjoKKyMgQUJPUlQ6IEltbWVkaWF0ZWx5IGFib3J0CisjIFNUT1BUQVNLUzogVGhlIG5ldyB0YXNrcyBjYW4ndCBiZSBleGVjdXRlZCBhbnkgbW9yZSwgd2lsbCBzdG9wIHRoZSBidWlsZAorIyAgICAgICAgICAgd2hlbiB0aGUgcnVubmluZyB0YXNrcyBoYXZlIGJlZW4gZG9uZS4KKyMgV0FSTjogc2hvdyB3YXJuaW5ncyAoc2VlIEJCX0RJU0tNT05fV0FSTklOVEVSVkFMIGZvciBtb3JlIGluZm9ybWF0aW9uKQorIworIyBUaGUgImRpcmVjdG9yeSIgbXVzdCBiZSBzZXQsIGFueSBkaXJlY3RvcnkgaXMgT0suCisjCisjIEVpdGhlciAibWluaW11bV9zcGFjZSIgb3IgIm1pbmltdW1fZnJlZV9pbm9kZSIgKG9yIGJvdGggb2YgdGhlbSkKKyMgc2hvdWxkIGJlIHNldCwgb3RoZXJ3aXNlIHRoZSBtb25pdG9yIHdvdWxkIG5vdCBiZSBlbmFibGVkLAorIyB0aGUgdW5pdCBjYW4gYmUgRywgTSwgSyBvciBub25lLCBidXQgZG8gTk9UIHVzZSBHQiwgTUIgb3IgS0IKKyMgKEIgaXMgbm90IG5lZWRlZCkuCisjQkJfRElTS01PTl9ESVJTID0gIlNUT1BUQVNLUywke1RNUERJUn0sMUcsMTAwSyBXQVJOLCR7U1NUQVRFX0RJUn0sMUcsMTAwSyIKKyMKKyMgU2V0IGRpc2sgc3BhY2UgYW5kIGlub2RlIGludGVydmFsIChvbmx5IHdvcmtzIHdoZW4gdGhlIGFjdGlvbiBpcyAiV0FSTiIsCisjIHRoZSB1bml0IGNhbiBiZSBHLCBNLCBvciBLLCBidXQgZG8gTk9UIHVzZSB0aGUgR0IsIE1CIG9yIEtCCisjIChCIGlzIG5vdCBuZWVkZWQpLCB0aGUgZm9ybWF0IGlzOgorIyAiZGlza19zcGFjZV9pbnRlcnZhbCxkaXNrX2lub2RlX2ludGVydmFsIiwgdGhlIGRlZmF1bHQgdmFsdWUgaXMKKyMgIjUwTSw1SyIgd2hpY2ggbWVhbnMgdGhhdCBpdCB3b3VsZCB3YXJuIHdoZW4gdGhlIGZyZWUgc3BhY2UgaXMKKyMgbG93ZXIgdGhhbiB0aGUgbWluaW11bSBzcGFjZShvciBpbm9kZSksIGFuZCB3b3VsZCByZXBlYXQgdGhlIHdhcm5pbmcKKyMgd2hlbiB0aGUgZGlzayBzcGFjZSByZWR1Y2VzIDUwTSAob3IgdGhlIGFtb3VudCBvZiBpbm9kZSByZWR1Y2VzIDVrKS4KKyNCQl9ESVNLTU9OX1dBUk5JTlRFUlZBTCA9ICI1ME0sNUsiCisKKyMgQXJjaGl2ZSB0aGUgc291cmNlIGFuZCBwdXQgdGhlbSB0byAke0RFUExPWV9ESVJ9L3NvdXJjZXMvLgorIworI0lOSEVSSVQgKz0gImFyY2hpdmVyIgorIworIyBUaGUgdGFyYmFsbCBmb3IgdGhlIHBhdGNoZWQgc291cmNlIHdpbGwgYmUgY3JlYXRlZCBieSBkZWZhdWx0LCBhbmQgeW91CisjIGNhbiBjb25maWd1cmUgdGhlIGFyY2hpdmVyIGFzIGZvbGxvdzoKKyMKKyMgQ3JlYXRlIGFyY2hpdmUgZm9yOgorIyAxKSBvcmlnaW5hbCAob3IgdW5wYWNrZWQpIHNvdXJjZToKKyNBUkNISVZFUl9NT0RFW3NyY10gPSAib3JpZ2luYWwiCisjIDIpIHBhdGNoZWQgc291cmNlOiAoZGVmYXVsdCkKKyNBUkNISVZFUl9NT0RFW3NyY10gPSAicGF0Y2hlZCIKKyMgMykgY29uZmlndXJlZCBzb3VyY2U6CisjQVJDSElWRVJfTU9ERVtzcmNdID0gImNvbmZpZ3VyZWQiCisjCisjIDQpIHRoZSBwYXRjaGVzIGJldHdlZW4gZG9fdW5wYWNrIGFuZCBkb19wYXRjaDoKKyNBUkNISVZFUl9NT0RFW2RpZmZdID0gIjEiCisjIHNldCB0aGUgZmlsZXMgdGhhdCB5b3UnZCBsaWtlIHRvIGV4Y2x1ZGUgZnJvbSB0aGUgZGlmZjoKKyNBUkNISVZFUl9NT0RFW2RpZmYtZXhjbHVkZV0gPz0gIi5wYyBhdXRvbTR0ZS5jYWNoZSBwYXRjaGVzIgorIworIyA1KSB0aGUgZW52aXJvbm1lbnQgZGF0YSwgc2ltaWxhciB0byAnYml0YmFrZSAtZSByZWNpcGUnOgorI0FSQ0hJVkVSX01PREVbZHVtcGRhdGFdID0gIjEiCisjCisjIDYpIHRoZSByZWNpcGUgKC5iYiBhbmQgLmluYyk6CisjQVJDSElWRVJfTU9ERVtyZWNpcGVdID0gIjEiCisjCisjIDcpIFdoZXRoZXIgb3V0cHV0IHRoZSAuc3JjLnJwbSBwYWNrYWdlOgorI0FSQ0hJVkVSX01PREVbc3JwbV0gPSAiMSIKKyMKKyMgOCkgRmlsdGVyIHRoZSBsaWNlbnNlLCB0aGUgcmVjaXBlIHdob3NlIGxpY2Vuc2UgaW4KKyMgICAgQ09QWUxFRlRfTElDRU5TRV9JTkNMVURFIHdpbGwgYmUgaW5jbHVkZWQsIGFuZCBpbgorIyAgICBDT1BZTEVGVF9MSUNFTlNFX0VYQ0xVREUgd2lsbCBiZSBleGNsdWRlZC4KKyNDT1BZTEVGVF9MSUNFTlNFX0lOQ0xVREUgPSAnR1BMKiBMR1BMKicKKyNDT1BZTEVGVF9MSUNFTlNFX0VYQ0xVREUgPSAnQ0xPU0VEIFByb3ByaWV0YXJ5JworIworIyA5KSBDb25maWcgdGhlIHJlY2lwZSB0eXBlIHRoYXQgd2lsbCBiZSBhcmNoaXZlZCwgdGhlIHR5cGUgY2FuIGJlCisjICAgIHRhcmdldCwgbmF0aXZlLCBuYXRpdmVzZGssIGNyb3NzLCBjcm9zc3NkayBhbmQgY3Jvc3MtY2FuYWRpYW4sCisjICAgIHlvdSBjYW4gc2V0IG9uZSBvciBtb3JlIHR5cGVzLiBBcmNoaXZlIGFsbCB0eXBlcyBieSBkZWZhdWx0LgorI0NPUFlMRUZUX1JFQ0lQRV9UWVBFUyA9ICd0YXJnZXQnCisjCisKKyMgUmVtb3ZlIHRoZSBvbGQgaW1hZ2UgYmVmb3JlIHRoZSBuZXcgb25lIGdlbmVyYXRlZCB0byBzYXZlIGRpc2sgc3BhY2UKKyNSTV9PTERfSU1BR0UgPSAiMSIKKworIworIyBHQ0MvTEQgRkxBR1MgdG8gZW5hYmxlIG1vcmUgc2VjdXJlIGNvZGUgZ2VuZXJhdGlvbgorIyAKKyMgQnkgaW5jbHVkaW5nIHRoZSBzZWN1cml0eV9mbGFncyBpbmNsdWRlIGZpbGUgeW91IGVuYWJsZSBmbGFncworIyB0byB0aGUgY29tcGlsZXIgYW5kIGxpbmtlciB0aGF0IGNhdXNlIHRoZW0gdG8gZ2VuZXJhdGUgbW9yZSBzZWN1cmUKKyMgY29kZSwgdGhpcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdGhlIHBva3ktbHNiIGRpc3Ryby4KKyMgVGhpcyBkb2VzIGFmZmVjdCBjb21waWxlIHNwZWVkIHNsaWdodGx5LgorIworIyBVc2UgdGhlIGZvbGxvd2luZyBsaW5lIHRvIGVuYWJsZSB0aGUgc2VjdXJpdHkgY29tcGlsZXIgYW5kIGxpbmtlciBmbGFncyB0byB5b3VyIGJ1aWxkCisjcmVxdWlyZSBjb25mL2Rpc3Ryby9pbmNsdWRlL3NlY3VyaXR5X2ZsYWdzLmluYworCisjIEltYWdlIGxldmVsIHVzZXIvZ3JvdXAgY29uZmlndXJhdGlvbi4KKyMgSW5oZXJpdCBleHRyYXVzZXJzIHRvIG1ha2UgdGhlIHNldHRpbmcgb2YgRVhUUkFfVVNFUlNfUEFSQU1TIGVmZmVjdGl2ZS4KKyNJTkhFUklUICs9ICJleHRyYXVzZXJzIgorIyBVc2VyIC8gZ3JvdXAgc2V0dGluZ3MKKyMgVGhlIHNldHRpbmdzIGFyZSBzcGVyYXRlZCBieSB0aGUgOyBjaGFyYWN0ZXIuCisjIEVhY2ggc2V0dGluZyBpcyBhY3R1YWxseSBhIGNvbW1hbmQuIFRoZSBzdXBwb3J0ZWQgY29tbWFuZHMgYXJlIHVzZXJhZGQsCisjIGdyb3VwYWRkLCB1c2VyZGVsLCBncm91cGRlbCwgdXNlcm1vZCBhbmQgZ3JvdXBtb2QuCisjRVhUUkFfVVNFUlNfUEFSQU1TID0gIlwKKyN1c2VyYWRkIC1wICcnIHRlc3RlcjsgXAorI2dyb3VwYWRkIGRldmVsb3BlcnM7IFwKKyN1c2VyZGVsIG5vYm9keTsgXAorI2dyb3VwZGVsIHZpZGVvOyBcCisjZ3JvdXBtb2QgLWcgMTAyMCBkZXZlbG9wZXJzOyBcCisjdXNlcm1vZCAtcyAvYmluL3NoIHRlc3RlcjsgXAorIyIKKworIyBWYXJpb3VzIHBhY2thZ2VzIGR5bmFtaWNhbGx5IGFkZCB1c2VycyBhbmQgZ3JvdXBzIHRvIHRoZSBzeXN0ZW0gYXQgcGFja2FnZQorIyBpbnN0YWxsIHRpbWUuICBGb3IgcHJvZ3JhbXMgdGhhdCBkbyBub3QgY2FyZSB3aGF0IHRoZSB1aWQvZ2lkIGlzIG9mIHRoZQorIyByZXN1bHRpbmcgdXNlcnMvZ3JvdXBzLCB0aGUgb3JkZXIgb2YgdGhlIGluc3RhbGwgd2lsbCBkZXRlcm1pbmUgdGhlIGZpbmFsCisjIHVpZC9naWQuICBUaGlzIGNhbiBsZWFkIHRvIG5vbi1kZXRlcm1pbmlzdGljIHVpZC9naWQgdmFsdWVzIGZyb20gb25lIGJ1aWxkCisjIHRvIGFub3RoZXIuICBVc2UgdGhlIGZvbGxvd2luZyBzZXR0aW5ncyB0byBzcGVjaWZ5IHRoYXQgYWxsIHVzZXIvZ3JvdXAgYWRkcworIyBzaG91bGQgYmUgY3JlYXRlZCBiYXNlZCBvbiBhIHN0YXRpYyBwYXNzd2QvZ3JvdXAgZmlsZS4KKyMKKyMgTm90ZSwgaWYgeW91IGVuYWJsZSBvciBkaXNhYmxlIHRoZSB1c2VyYWRkLXN0YXRpY2lkcyBpbiBhIGNvbmZpZ3VyZWQgc3lzdGVtLAorIyB0aGUgVE1QRElSIG1heSBjb250YWluIGluY29ycmVjdCB1aWQvZ2lkIHZhbHVlcy4gIENsZWFyaW5nIHRoZSBUTVBESVIKKyMgd2lsbCBjb3JyZWN0IHRoaXMgY29uZGl0aW9uLgorIworIyBCeSBkZWZhdWx0IHRoZSBzeXN0ZW0gbG9va3MgaW4gdGhlIEJCUEFUSCBmb3IgZmlsZXMvcGFzc3dkIGFuZCBmaWxlcy9ncm91cAorIyB0aGUgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGVuIGJ5IHNwZWZ5aW5nIFVTRVJBRERfVUlEL0dJRF9UQUJMRVMuCisjCisjVVNFUkFEREVYVEVOU0lPTiA9ICJ1c2VyYWRkLXN0YXRpY2lkcyIKKyNVU0VSQUREX1VJRF9UQUJMRVMgPSAiZmlsZXMvcGFzc3dkIgorI1VTRVJBRERfR0lEX1RBQkxFUyA9ICJmaWxlcy9ncm91cCIKKyMKKyMgSW4gb3JkZXIgdG8gcHJldmVudCBnZW5lcmF0aW5nIGEgc3lzdGVtIHdoZXJlIGEgZHluYW1pY2x5IGFzc2lnbmVkIHVpZC9naWQKKyMgY2FuIGV4aXN0LCB5b3Ugc2hvdWxkIGVuYWJsZSB0aGUgZm9sbG93aW5nIHNldHRpbmcuICBUaGlzIHdpbGwgZm9yY2UgdGhlCisjIHN5c3RlbSB0byBlcnJvciBvdXQgaWYgdGhlIHVzZXIvZ3JvdXAgbmFtZSBpcyBub3QgZGVmaW5lZCBpbiB0aGUKKyMgZmlsZXMvcGFzc3dkIG9yIGZpbGVzL2dyb3VwIChvciBzcGVjaWZpZWQgcmVwbGFjZW1lbnRzLikKKyNVU0VSQUREX0VSUk9SX0RZTkFNSUMgPSAiMSIKKworIyBFbmFibGluZyBGT1JUUkFOCisjIE5vdGUgdGhpcyBpcyBub3Qgb2ZmaWNpYWxseSBzdXBwb3J0ZWQgYW5kIGlzIGp1c3QgaWxsdXN0cmF0ZWQgaGVyZSB0bworIyBzaG93IGFuIGV4YW1wbGUgb2YgaG93IGl0IGNhbiBiZSBkb25lCisjIFlvdSdsbCBhbHNvIG5lZWQgeW91ciBmb3J0cmFuIHJlY2lwZSB0byBkZXBlbmQgb24gbGliZ2ZvcnRyYW4KKyNGT1JUUkFOX2ZvcmNldmFyaWFibGUgPSAiLGZvcnRyYW4iCisjUlVOVElNRVRBUkdFVF9hcHBlbmRfcG4tZ2NjLXJ1bnRpbWUgPSAiIGxpYnF1YWRtYXRoIgorCisjCisjIEtlcm5lbCBpbWFnZSBmZWF0dXJlcworIworIyBUaGUgSU5JVFJBTUZTX0lNQUdFIGltYWdlIHZhcmlhYmxlIHdpbGwgY2F1c2UgYW4gYWRkaXRpb25hbCByZWNpcGUgdG8KKyMgYmUgYnVpbHQgYXMgYSBkZXBlbmRlbmN5IHRvIHRoZSB3aGF0IGV2ZXIgcm9vdGZzIHJlY2lwZSB5b3UgbWlnaHQgYmUKKyMgdXNpbmcgc3VjaCBhcyBjb3JlLWltYWdlLXNhdG8uICBUaGUgaW5pdHJhbWZzIG1pZ2h0IGJlIG5lZWRlZCBmb3IKKyMgdGhlIGluaXRpYWwgYm9vdCBvZiBvZiB0aGUgdGFyZ2V0IHN5c3RlbSBzdWNoIGFzIHRvIGxvYWQga2VybmVsCisjIG1vZHVsZXMgcHJpb3IgdG8gbW91bnRpbmcgdGhlIHJvb3QgZmlsZSBzeXN0ZW0uCisjCisjIElOSVRSQU1GU19JTUFHRV9CVU5ETEUgdmFyaWFibGUgY29udHJvbHMgaWYgdGhlIGltYWdlIHJlY2lwZQorIyBzcGVjaWZpZWQgYnkgdGhlIElOSVRSQU1GU19JTUFHRSB3aWxsIGJlIHJ1biB0aHJvdWdoIGFuIGV4dHJhIHBhc3MKKyMgdGhyb3VnaCB0aGUga2VybmVsIGNvbXBpbGF0aW9uIGluIG9yZGVyIHRvIGJ1aWxkIGEgc2luZ2xlIGJpbmFyeQorIyB3aGljaCBjb250YWlucyBib3RoIHRoZSBrZXJuZWwgaW1hZ2UgYW5kIHRoZSBpbml0cmFtZnMuICBUaGUKKyMgY29tYmluZWQgYmluYXJ5IHdpbGwgYmUgZGVwb3NpdGVkIGludG8gdGhlIHRtcC9kZXBsb3kgZGlyZWN0b3J5LgorIyBOT1RFOiBZb3UgY2FuIHNldCBJTklUUkFNRlNfSU1BR0UgaW4gYW4gaW1hZ2UgcmVjaXBlLCBidXQKKyMgICAgICAgSU5JVFJBTUZTX0lNQUdFX0JVTkRMRSBjYW4gb25seSBiZSBzZXQgaW4gYSBjb25mIGZpbGUuCisjCisjSU5JVFJBTUZTX0lNQUdFID0gImNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMiCisjSU5JVFJBTUZTX0lNQUdFX0JVTkRMRSA9ICIxIgorCisjCisjIElQSyBIaWVyYXJjaGljYWwgZmVlZAorIworIyBJbiBzb21lIGNhc2VzIGl0IG1heSBiZSBkZXNpcmFibGUgbm90IHRvIGhhdmUgYWxsIHBhY2thZ2UgZmlsZXMgaW4gdGhlIHNhbWUKKyMgZGlyZWN0b3J5LiBBbiBleGFtcGxlIHdvdWxkIGJlIHdoZW4gcGFja2FnZSBmZWVkcyBhcmUgdG8gYmUgdXBsb2FkZWQgdG8gYQorIyBzaGFyZWQgd2ViaG9zdGluZyBzZXJ2aWNlIG9yIHRyYW5zZmVycmVkIHRvIGEgV2luZG93cyBtYWNoaW5lIHdoaWNoIG1heSBoYXZlCisjIHByb2JsZW1zIHdpdGggZGlyZWN0b3JpZXMgY29udGFpbmluZyBtdWx0aXBsZSB0aG91c2FuZHMgb2YgZmlsZXMuCisjCisjIElmIHRoZSBJUEtfSElFUkFSQ0hJQ0FMX0ZFRUQgdmFyaWFibGUgaXMgc2V0IHRvICIxIiwgcGFja2FnZXMgd2lsbCBiZSBzcGxpdAorIyBiZXR3ZWVuIHN1YmRpcmVjdG9yaWVzIGluIGEgc2ltaWxhciB3YXkgdG8gaG93IERlYmlhbiBwYWNrYWdlIGZlZWRzIGFyZQorIyBvcmdhbmlzZWQuIEluIHRoZSBoaWVyYXJjaGljYWwgZmVlZCwgcGFja2FnZSBmaWxlcyBhcmUgd3JpdHRlbiB0bworIyA8b3V0ZGlyPi88YXJjaD4vPHBrZ19wcmVmaXg+Lzxwa2dfc3ViZGlyPiwgd2hlcmUgcGtnX3ByZWZpeCBpcyB0aGUgZmlyc3QKKyMgbGV0dGVyIG9mIHRoZSBwYWNrYWdlIGZpbGUgbmFtZSBmb3Igbm9uLWxpYiBwYWNrYWdlcyBvciAibGliIiBwbHVzIHRoZSA0dGgKKyMgbGV0dGVyIG9mIHRoZSBwYWNrYWdlIGZpbGUgbmFtZSBmb3IgbGliIHBhY2thZ2VzIChlZywgJ2wnIGZvciBsZXNzLCAnbGliYycgZm9yCisjIGxpYmM2KS4gIHBrZ19zdWJkaXIgaXMgdGhlIHJvb3Qgb2YgdGhlIHBhY2thZ2UgZmlsZSBuYW1lLCBkaXNjYXJkaW5nIHRoZQorIyB2ZXJzaW9uIGFuZCBhcmNoaXRlY3R1cmUgcGFydHMgYW5kIHRoZSBjb21tb24gc3VmZml4ZXMgJy1kYmcnLCAnLWRldicsICctZG9jJywKKyMgJy1zdGF0aWNkZXYnLCAnLWxvY2FsZScgYW5kICctbG9jYWxlLSonIHdoaWNoIGFyZSBsaXN0ZWQgaW4KKyMgbWV0YS9jb25mL2JpdGJha2UuY29uZi4KKyMKKyMgSWYgSVBLX0hJRVJBUkNISUNBTF9GRUVEIGlzIHVuc2V0IG9yIHNldCB0byBhbnkgb3RoZXIgdmFsdWUsIHRoZSB0cmFkaXRpb25hbAorIyBmZWVkIGxheW91dCBpcyB1c2VkIHdoZXJlIHBhY2thZ2UgZmlsZXMgYXJlIHBsYWNlZCBpbiA8b3V0ZGlyPi88YXJjaD4vLgorIworI0lQS19ISUVSQVJDSElDQUxfRkVFRCA9ICIxIgorIworCisjIFVzaW5nIFJQTTQKKyMKKyMgQ3VycmVudGx5IHRoZSByb290ZnNfcnBtIGNvZGUgaGFzIGEgaGFyZCBkZXBlbmRzIG9uIHJwbXJlc29sdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCwKKyMgd2hlbiB1c2luZyBycG00IHRoZSBycG1yZXNvbHZlIGNvZGUgd2lsbCBub3QgY29tcGlsZSBkdWUgdG8gYSBtaXNzaW5nIGhlYWRlciBmaWxlLgorIyBUaGF0IGRlcGVuZGVuY3kgbmVlZHMgdG8gYmUgcmVtb3ZlZCB3aGVuIHVzaW5nIFJQTTQsIGFsc28gdGhlIFBSRUZSUkVEX1ZFUlNJT04gbmVlZHMKKyMgdG8gYmUgc2V0LiBUaGlzIGV4YW1wbGUgc2hvd3MgaG93IHRvIGVuYWJsZSBycG00CisjIFBSRUZFUlJFRF9WRVJTSU9OX3JwbSA9ICI0LjExLjIiCisjIFBSRUZFUlJFRF9WRVJTSU9OX3JwbS1uYXRpdmUgPSAiNC4xMS4yIgorIyBSUE1ST09URlNERVBFTkRTX3JlbW92ZSA9ICJycG1yZXNvbHZlLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvc2l0ZS5jb25mLnNhbXBsZSBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL3NpdGUuY29uZi5zYW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU1MWU4ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL3NpdGUuY29uZi5zYW1wbGUKQEAgLTAsMCArMSwzMSBAQAorIworIyBsb2NhbC5jb25mIGNvdmVycyB1c2VyIHNldHRpbmdzLCBzaXRlLmNvbmYgY292ZXJzIHNpdGUgc3BlY2lmaWMgaW5mb3JtYXRpb24KKyMgc3VjaCBhcyBwcm94eSBzZXJ2ZXIgYWRkcmVzc2VzIGFuZCBvcHRpb25hbGx5IGFueSBzaGFyZWQgZG93bmxvYWQgbG9jYXRpb24KKyMKKyMgU0lURV9DT05GX1ZFUlNJT04gaXMgaW5jcmVhc2VkIGVhY2ggdGltZSBidWlsZC9jb25mL3NpdGUuY29uZgorIyBjaGFuZ2VzIGluY29tcGF0aWJseQorU0NPTkZfVkVSU0lPTiA9ICIxIgorCisjIFVuY29tbWVudCB0byBjYXVzZSBDVlMgdG8gdXNlIHRoZSBwcm94eSBob3N0IHNwZWNpZmllZAorI0NWU19QUk9YWV9IT1NUID0gInByb3h5LmV4YW1wbGUuY29tIgorI0NWU19QUk9YWV9QT1JUID0gIjgxIgorCisjIEZvciBzdm4sIHlvdSBuZWVkIHRvIGNyZWF0ZSB+Ly5zdWJ2ZXJzaW9uL3NlcnZlcnMgY29udGFpbmluZzoKKyNbZ2xvYmFsXQorI2h0dHAtcHJveHktaG9zdCA9IHByb3h5LmV4YW1wbGUuY29tCisjaHR0cC1wcm94eS1wb3J0ID0gODEKKyMKKworIyBUbyB1c2UgZ2l0IHdpdGggYSBwcm94eSwgeW91IG11c3QgdXNlIGFuIGV4dGVybmFsIGdpdCBwcm94eSBjb21tYW5kLCBzdWNoIGFzCisjIHRoZSBvbmUgcHJvdmlkZWQgYnkgc2NyaXB0cy9vZS1naXQtcHJveHkuc2guIFRvIHVzZSB0aGlzIHNjcmlwdCwgY29weSBpdCB0bworIyB5b3VyIFBBVEggYW5kIHVuY29tbWVudCB0aGUgZm9sbG93aW5nOgorI0dJVF9QUk9YWV9DT01NQU5EID89ICJvZS1naXQtcHJveHkiCisjQUxMX1BST1hZID89ICJzb2NrczovL3NvY2tzLmV4YW1wbGUuY29tOjEwODAiCisjb3IKKyNBTExfUFJPWFkgPz0gImh0dHBzOi8vcHJveHkuZXhhbXBsZS5jb206ODA4MCIKKyMgSWYgeW91IHdpc2ggdG8gdXNlIGNlcnRhaW4gaG9zdHMgd2l0aG91dCB0aGUgcHJveHksIHNwZWNpZnkgdGhlbSBpbiBOT19QUk9YWS4KKyMgU2VlIHRoZSBzY3JpcHQgZm9yIGRldGFpbHMgb24gc3ludGF4LgorCisjIFVuY29tbWVudCB0aGlzIHRvIHVzZSBhIHNoYXJlZCBkb3dubG9hZCBkaXJlY3RvcnkKKyNETF9ESVIgPSAiL3NvbWUvc2hhcmVkL2Rvd25sb2FkL2RpcmVjdG9yeS8iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL3RvYXN0ZXJjb25mLmpzb24gYi95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi90b2FzdGVyY29uZi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NTUyNzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi90b2FzdGVyY29uZi5qc29uCkBAIC0wLDAgKzEsMTE5IEBACit7CisgICAgImNvbmZpZyI6IHsKKyAgICAgICAgIk1BQ0hJTkUiICAgICAgOiAicWVtdXg4NiIsCisgICAgICAgICJESVNUUk8iICAgICAgIDogInBva3kiLAorICAgICAgICAiSU1BR0VfRlNUWVBFUyI6ICJleHQzIGpmZnMyIHRhci5iejIiLAorICAgICAgICAiSU1BR0VfSU5TVEFMTF9hcHBlbmQiOiAiIiwKKyAgICAgICAgIlBBQ0tBR0VfQ0xBU1NFUyI6ICJwYWNrYWdlX3JwbSIsCisgICAgICAgICJTREtNQUNISU5FIiAgIDogIng4Nl82NCIKKyAgICB9LAorICAgICJsYXllcnNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkxvY2FsIFlvY3RvIFByb2plY3QiLAorICAgICAgICAgICAgInNvdXJjZXR5cGUiOiAibG9jYWwiLAorICAgICAgICAgICAgImFwaXVybCI6ICIuLi8uLi8iLAorICAgICAgICAgICAgImJyYW5jaGVzIjogWyJIRUFEIiwgIm1hc3RlciIsICJmaWRvIiwgImRpenp5Il0sCisgICAgICAgICAgICAibGF5ZXJzIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAib3BlbmVtYmVkZGVkLWNvcmUiLAorICAgICAgICAgICAgICAgICAgICAibG9jYWxfcGF0aCI6ICJtZXRhIiwKKyAgICAgICAgICAgICAgICAgICAgInZjc191cmwiOiAicmVtb3RlOm9yaWdpbiIsCisgICAgICAgICAgICAgICAgICAgICJkaXJwYXRoIjogIm1ldGEiCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJuYW1lIjogIm1ldGEteW9jdG8iLAorICAgICAgICAgICAgICAgICAgICAibG9jYWxfcGF0aCI6ICJtZXRhLXlvY3RvIiwKKyAgICAgICAgICAgICAgICAgICAgInZjc191cmwiOiAicmVtb3RlOm9yaWdpbiIsCisgICAgICAgICAgICAgICAgICAgICJkaXJwYXRoIjogIm1ldGEteW9jdG8iCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJuYW1lIjogIm1ldGEteW9jdG8tYnNwIiwKKyAgICAgICAgICAgICAgICAgICAgImxvY2FsX3BhdGgiOiAibWV0YS15b2N0by1ic3AiLAorICAgICAgICAgICAgICAgICAgICAidmNzX3VybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICAgICAgICAgImRpcnBhdGgiOiAibWV0YS15b2N0by1ic3AiCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIk9wZW5FbWJlZGRlZCIsCisgICAgICAgICAgICAic291cmNldHlwZSI6ICJsYXllcmluZGV4IiwKKyAgICAgICAgICAgICJhcGl1cmwiOiAiaHR0cDovL2xheWVycy5vcGVuZW1iZWRkZWQub3JnL2xheWVyaW5kZXgvYXBpLyIsCisgICAgICAgICAgICAiYnJhbmNoZXMiOiBbIm1hc3RlciIsICJmaWRvIiwgImRpenp5Il0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiSW1wb3J0ZWQgbGF5ZXJzIiwKKyAgICAgICAgICAgICJzb3VyY2V0eXBlIjogImltcG9ydGVkIiwKKyAgICAgICAgICAgICJhcGl1cmwiOiAiIiwKKyAgICAgICAgICAgICJicmFuY2hlcyI6IFsibWFzdGVyIiwgImZpZG8iLCAiZGl6enkiLCAiSEVBRCJdCisKKyAgICAgICAgfQorICAgIF0sCisgICAgImJpdGJha2UiIDogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgImdpdHVybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICJicmFuY2giOiAibWFzdGVyIiwKKyAgICAgICAgICAgICJkaXJwYXRoIjogImJpdGJha2UiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImZpZG8iLAorICAgICAgICAgICAgImdpdHVybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICJicmFuY2giOiAiZmlkbyIsCisgICAgICAgICAgICAiZGlycGF0aCI6ICJiaXRiYWtlIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJkaXp6eSIsCisgICAgICAgICAgICAiZ2l0dXJsIjogInJlbW90ZTpvcmlnaW4iLAorICAgICAgICAgICAgImJyYW5jaCI6ICJkaXp6eSIsCisgICAgICAgICAgICAiZGlycGF0aCI6ICJiaXRiYWtlIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJIRUFEIiwKKyAgICAgICAgICAgICJnaXR1cmwiOiAicmVtb3RlOm9yaWdpbiIsCisgICAgICAgICAgICAiYnJhbmNoIjogIkhFQUQiLAorICAgICAgICAgICAgImRpcnBhdGgiOiAiYml0YmFrZSIKKyAgICAgICAgfQorICAgIF0sCisKKyAgICAiZGVmYXVsdHJlbGVhc2UiOiAibWFzdGVyIiwKKworICAgICJyZWxlYXNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibWFzdGVyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJZb2N0byBQcm9qZWN0IG1hc3RlciIsCisgICAgICAgICAgICAiYml0YmFrZSI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgImJyYW5jaCI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgImRlZmF1bHRsYXllcnMiOiBbICJvcGVuZW1iZWRkZWQtY29yZSIsICJtZXRhLXlvY3RvIiwgIm1ldGEteW9jdG8tYnNwIl0sCisgICAgICAgICAgICAibGF5ZXJzb3VyY2Vwcmlvcml0eSI6IHsgIkltcG9ydGVkIGxheWVycyI6IDk5LCAiTG9jYWwgWW9jdG8gUHJvamVjdCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAorICAgICAgICAgICAgImhlbHB0ZXh0IjogIlRvYXN0ZXIgd2lsbCBydW4geW91ciBidWlsZHMgdXNpbmcgdGhlIHRpcCBvZiB0aGUgPGEgaHJlZj1cImh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL3Bva3kvbG9nL1wiPllvY3RvIFByb2plY3QgbWFzdGVyIGJyYW5jaDwvYT4sIHdoZXJlIGFjdGl2ZSBkZXZlbG9wbWVudCB0YWtlcyBwbGFjZS4gVGhpcyBpcyBub3QgYSBzdGFibGUgYnJhbmNoLCBzbyB5b3VyIGJ1aWxkcyBtaWdodCBub3Qgd29yayBhcyBleHBlY3RlZC4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImZpZG8iLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIllvY3RvIFByb2plY3QgMS44IEZpZG8iLAorICAgICAgICAgICAgImJpdGJha2UiOiAiZmlkbyIsCisgICAgICAgICAgICAiYnJhbmNoIjogImZpZG8iLAorICAgICAgICAgICAgImRlZmF1bHRsYXllcnMiOiBbICJvcGVuZW1iZWRkZWQtY29yZSIsICJtZXRhLXlvY3RvIiwgIm1ldGEteW9jdG8tYnNwIl0sCisgICAgICAgICAgICAibGF5ZXJzb3VyY2Vwcmlvcml0eSI6IHsgIkltcG9ydGVkIGxheWVycyI6IDk5LCAiTG9jYWwgWW9jdG8gUHJvamVjdCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAorICAgICAgICAgICAgImhlbHB0ZXh0IjogIlRvYXN0ZXIgd2lsbCBydW4geW91ciBidWlsZHMgd2l0aCB0aGUgdGlwIG9mIHRoZSA8YSBocmVmPVwiaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvcG9reS9sb2cvP2g9Zmlkb1wiPllvY3RvIFByb2plY3QgMS44IFwiRmlkb1wiPC9hPiBicmFuY2guIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJkaXp6eSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiWW9jdG8gUHJvamVjdCAxLjcgRGl6enkiLAorICAgICAgICAgICAgImJpdGJha2UiOiAiZGl6enkiLAorICAgICAgICAgICAgImJyYW5jaCI6ICJkaXp6eSIsCisgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiwgIm1ldGEteW9jdG8iLCAibWV0YS15b2N0by1ic3AiXSwKKyAgICAgICAgICAgICJsYXllcnNvdXJjZXByaW9yaXR5IjogeyAiSW1wb3J0ZWQgbGF5ZXJzIjogOTksICJMb2NhbCBZb2N0byBQcm9qZWN0IiA6IDEwLCAiT3BlbkVtYmVkZGVkIiA6ICAwIH0sCisgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB3aXRoIHRoZSB0aXAgb2YgdGhlIDxhIGhyZWY9XCJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wb2t5L2xvZy8/aD1kaXp6eVwiPllvY3RvIFByb2plY3QgMS43IFwiRGl6enlcIjwvYT4gYnJhbmNoLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9jYWwiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvY2FsIFlvY3RvIFByb2plY3QiLAorICAgICAgICAgICAgImJpdGJha2UiOiAiSEVBRCIsCisgICAgICAgICAgICAiYnJhbmNoIjogIkhFQUQiLAorICAgICAgICAgICAgImRlZmF1bHRsYXllcnMiOiBbICJvcGVuZW1iZWRkZWQtY29yZSIsICJtZXRhLXlvY3RvIiwgIm1ldGEteW9jdG8tYnNwIl0sCisgICAgICAgICAgICAibGF5ZXJzb3VyY2Vwcmlvcml0eSI6IHsgIkltcG9ydGVkIGxheWVycyI6IDk5LCAiTG9jYWwgWW9jdG8gUHJvamVjdCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAorICAgICAgICAgICAgImhlbHB0ZXh0IjogIlRvYXN0ZXIgd2lsbCBydW4geW91ciBidWlsZHMgd2l0aCB0aGUgdmVyc2lvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCB5b3UgaGF2ZSBjbG9uZWQgb3IgZG93bmxvYWRlZCB0byB5b3VyIGNvbXB1dGVyLiIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3Bva3ktdGlueS9kZWZjb25maWcgYi95b2N0by1wb2t5L21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9wb2t5LXRpbnkvZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNWQ1YzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9wb2t5LXRpbnkvZGVmY29uZmlnCkBAIC0wLDAgKzEsMTAwOSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBCdXN5Ym94IHZlcnNpb246IDEuMTkuMworIyBXZWQgTm92IDMwIDA5OjMzOjE2IDIwMTEKKyMKK0NPTkZJR19IQVZFX0RPVF9DT05GSUc9eQorCisjCisjIEJ1c3lib3ggU2V0dGluZ3MKKyMKKworIworIyBHZW5lcmFsIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0RFU0tUT1AgaXMgbm90IHNldAorIyBDT05GSUdfRVhUUkFfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOQ0xVREVfU1VTdjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNFX1BPUlRBQkxFX0NPREUgaXMgbm90IHNldAorQ09ORklHX1BMQVRGT1JNX0xJTlVYPXkKK0NPTkZJR19GRUFUVVJFX0JVRkZFUlNfVVNFX01BTExPQz15CisjIENPTkZJR19GRUFUVVJFX0JVRkZFUlNfR09fT05fU1RBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CVUZGRVJTX0dPX0lOX0JTUyBpcyBub3Qgc2V0CitDT05GSUdfU0hPV19VU0FHRT15CisjIENPTkZJR19GRUFUVVJFX1ZFUkJPU0VfVVNBR0UgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfQ09NUFJFU1NfVVNBR0U9eQorIyBDT05GSUdfRkVBVFVSRV9JTlNUQUxMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSU5TVEFMTF9OT19VU1IgaXMgbm90IHNldAorQ09ORklHX0xPQ0FMRV9TVVBQT1JUPXkKKyMgQ09ORklHX1VOSUNPREVfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VTklDT0RFX1VTSU5HX0xPQ0FMRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIRUNLX1VOSUNPREVfSU5fRU5WIGlzIG5vdCBzZXQKK0NPTkZJR19TVUJTVF9XQ0hBUj0wCitDT05GSUdfTEFTVF9TVVBQT1JURURfV0NIQVI9MAorIyBDT05GSUdfVU5JQ09ERV9DT01CSU5JTkdfV0NIQVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSUNPREVfV0lERV9XQ0hBUlMgaXMgbm90IHNldAorIyBDT05GSUdfVU5JQ09ERV9CSURJX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVU5JQ09ERV9ORVVUUkFMX1RBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSUNPREVfUFJFU0VSVkVfQlJPS0VOIGlzIG5vdCBzZXQKK0NPTkZJR19MT05HX09QVFM9eQorQ09ORklHX0ZFQVRVUkVfREVWUFRTPXkKKyMgQ09ORklHX0ZFQVRVUkVfQ0xFQU5fVVAgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVVRNUD15CisjIENPTkZJR19GRUFUVVJFX1dUTVAgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfUElERklMRT15CitDT05GSUdfRkVBVFVSRV9TVUlEPXkKK0NPTkZJR19GRUFUVVJFX1NVSURfQ09ORklHPXkKK0NPTkZJR19GRUFUVVJFX1NVSURfQ09ORklHX1FVSUVUPXkKKyMgQ09ORklHX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9QUkVGRVJfQVBQTEVUUyBpcyBub3Qgc2V0CitDT05GSUdfQlVTWUJPWF9FWEVDX1BBVEg9Ii9wcm9jL3NlbGYvZXhlIgorQ09ORklHX0ZFQVRVUkVfU1lTTE9HPXkKK0NPTkZJR19GRUFUVVJFX0hBVkVfUlBDPXkKKworIworIyBCdWlsZCBPcHRpb25zCisjCisjIENPTkZJR19TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfUElFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PTU1VIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JVSUxEX0xJQkJVU1lCT1ggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTkRJVklEVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU0hBUkVEX0JVU1lCT1ggaXMgbm90IHNldAorQ09ORklHX0xGUz15CitDT05GSUdfQ1JPU1NfQ09NUElMRVJfUFJFRklYPSIiCitDT05GSUdfRVhUUkFfQ0ZMQUdTPSIiCisKKyMKKyMgRGVidWdnaW5nIE9wdGlvbnMKKyMKKyMgQ09ORklHX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BFU1NJTUlaRSBpcyBub3Qgc2V0CisjIENPTkZJR19XRVJST1IgaXMgbm90IHNldAorQ09ORklHX05PX0RFQlVHX0xJQj15CisjIENPTkZJR19ETUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGRU5DRSBpcyBub3Qgc2V0CisKKyMKKyMgSW5zdGFsbGF0aW9uIE9wdGlvbnMgKCJtYWtlIGluc3RhbGwiIGJlaGF2aW9yKQorIworQ09ORklHX0lOU1RBTExfQVBQTEVUX1NZTUxJTktTPXkKKyMgQ09ORklHX0lOU1RBTExfQVBQTEVUX0hBUkRMSU5LUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlNUQUxMX0FQUExFVF9TQ1JJUFRfV1JBUFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSU5TVEFMTF9BUFBMRVRfRE9OVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlNUQUxMX1NIX0FQUExFVF9TWU1MSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTExfU0hfQVBQTEVUX0hBUkRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTExfU0hfQVBQTEVUX1NDUklQVF9XUkFQUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVGSVg9Ii4vX2luc3RhbGwiCisKKyMKKyMgQnVzeWJveCBMaWJyYXJ5IFR1bmluZworIworQ09ORklHX0ZFQVRVUkVfU1lTVEVNRD15CitDT05GSUdfRkVBVFVSRV9SVE1JTk1BWD15CitDT05GSUdfUEFTU1dPUkRfTUlOTEVOPTYKK0NPTkZJR19NRDVfU0laRV9WU19TUEVFRD0yCitDT05GSUdfRkVBVFVSRV9GQVNUX1RPUD15CisjIENPTkZJR19GRUFUVVJFX0VUQ19ORVRXT1JLUyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9VU0VfVEVSTUlPUz15CitDT05GSUdfRkVBVFVSRV9FRElUSU5HPXkKK0NPTkZJR19GRUFUVVJFX0VESVRJTkdfTUFYX0xFTj0xMDI0CisjIENPTkZJR19GRUFUVVJFX0VESVRJTkdfVkkgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfRURJVElOR19ISVNUT1JZPTE1CitDT05GSUdfRkVBVFVSRV9FRElUSU5HX1NBVkVISVNUT1JZPXkKKyMgQ09ORklHX0ZFQVRVUkVfUkVWRVJTRV9TRUFSQ0ggaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVEFCX0NPTVBMRVRJT049eQorQ09ORklHX0ZFQVRVUkVfVVNFUk5BTUVfQ09NUExFVElPTj15CitDT05GSUdfRkVBVFVSRV9FRElUSU5HX0ZBTkNZX1BST01QVD15CisjIENPTkZJR19GRUFUVVJFX0VESVRJTkdfQVNLX1RFUk1JTkFMIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX05PTl9QT1NJWF9DUD15CisjIENPTkZJR19GRUFUVVJFX1ZFUkJPU0VfQ1BfTUVTU0FHRSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9DT1BZQlVGX0tCPTQKK0NPTkZJR19GRUFUVVJFX1NLSVBfUk9PVEZTPXkKK0NPTkZJR19NT05PVE9OSUNfU1lTQ0FMTD15CitDT05GSUdfSU9DVExfSEVYMlNUUl9FUlJPUj15CitDT05GSUdfRkVBVFVSRV9IV0lCPXkKKworIworIyBBcHBsZXRzCisjCisKKyMKKyMgQXJjaGl2YWwgVXRpbGl0aWVzCisjCisjIENPTkZJR19GRUFUVVJFX1NFQU1MRVNTX1haIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1NFQU1MRVNTX0xaTUE9eQorQ09ORklHX0ZFQVRVUkVfU0VBTUxFU1NfQloyPXkKK0NPTkZJR19GRUFUVVJFX1NFQU1MRVNTX0daPXkKK0NPTkZJR19GRUFUVVJFX1NFQU1MRVNTX1o9eQorQ09ORklHX0FSPXkKKyMgQ09ORklHX0ZFQVRVUkVfQVJfTE9OR19GSUxFTkFNRVMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9BUl9DUkVBVEUgaXMgbm90IHNldAorQ09ORklHX0JVTlpJUDI9eQorIyBDT05GSUdfQlpJUDIgaXMgbm90IHNldAorQ09ORklHX0NQSU89eQorIyBDT05GSUdfRkVBVFVSRV9DUElPX08gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DUElPX1AgaXMgbm90IHNldAorIyBDT05GSUdfRFBLRyBpcyBub3Qgc2V0CisjIENPTkZJR19EUEtHX0RFQiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0RQS0dfREVCX0VYVFJBQ1RfT05MWSBpcyBub3Qgc2V0CitDT05GSUdfR1VOWklQPXkKK0NPTkZJR19HWklQPXkKKyMgQ09ORklHX0ZFQVRVUkVfR1pJUF9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTFpPUCBpcyBub3Qgc2V0CisjIENPTkZJR19MWk9QX0NPTVBSX0hJR0ggaXMgbm90IHNldAorIyBDT05GSUdfUlBNMkNQSU8gaXMgbm90IHNldAorIyBDT05GSUdfUlBNIGlzIG5vdCBzZXQKK0NPTkZJR19UQVI9eQorQ09ORklHX0ZFQVRVUkVfVEFSX0NSRUFURT15CitDT05GSUdfRkVBVFVSRV9UQVJfQVVUT0RFVEVDVD15CitDT05GSUdfRkVBVFVSRV9UQVJfRlJPTT15CitDT05GSUdfRkVBVFVSRV9UQVJfT0xER05VX0NPTVBBVElCSUxJVFk9eQorIyBDT05GSUdfRkVBVFVSRV9UQVJfT0xEU1VOX0NPTVBBVElCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVEFSX0dOVV9FWFRFTlNJT05TPXkKKyMgQ09ORklHX0ZFQVRVUkVfVEFSX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RBUl9UT19DT01NQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEFSX1VOQU1FX0dOQU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEFSX05PUFJFU0VSVkVfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RBUl9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOQ09NUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfVU5MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTFpNQV9GQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfVU5YWiBpcyBub3Qgc2V0CisjIENPTkZJR19YWiBpcyBub3Qgc2V0CitDT05GSUdfVU5aSVA9eQorCisjCisjIENvcmV1dGlscworIworQ09ORklHX0JBU0VOQU1FPXkKK0NPTkZJR19DQVQ9eQorQ09ORklHX0RBVEU9eQorIyBDT05GSUdfRkVBVFVSRV9EQVRFX0lTT0ZNVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0RBVEVfTkFOTyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9EQVRFX0NPTVBBVD15CitDT05GSUdfSUQ9eQorQ09ORklHX0dST1VQUz15CitDT05GSUdfVEVTVD15CitDT05GSUdfRkVBVFVSRV9URVNUXzY0PXkKK0NPTkZJR19UT1VDSD15CitDT05GSUdfVFI9eQorQ09ORklHX0ZFQVRVUkVfVFJfQ0xBU1NFUz15CisjIENPTkZJR19GRUFUVVJFX1RSX0VRVUlWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBU0U2NCBpcyBub3Qgc2V0CitDT05GSUdfV0hPPXkKK0NPTkZJR19VU0VSUz15CisjIENPTkZJR19DQUwgaXMgbm90IHNldAorIyBDT05GSUdfQ0FUViBpcyBub3Qgc2V0CitDT05GSUdfQ0hHUlA9eQorQ09ORklHX0NITU9EPXkKK0NPTkZJR19DSE9XTj15CisjIENPTkZJR19GRUFUVVJFX0NIT1dOX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfQ0hST09UPXkKKyMgQ09ORklHX0NLU1VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTU0gaXMgbm90IHNldAorQ09ORklHX0NQPXkKKyMgQ09ORklHX0ZFQVRVUkVfQ1BfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19DVVQ9eQorQ09ORklHX0REPXkKK0NPTkZJR19GRUFUVVJFX0REX1NJR05BTF9IQU5ETElORz15CisjIENPTkZJR19GRUFUVVJFX0REX1RISVJEX1NUQVRVU19MSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRERfSUJTX09CUyBpcyBub3Qgc2V0CitDT05GSUdfREY9eQorIyBDT05GSUdfRkVBVFVSRV9ERl9GQU5DWSBpcyBub3Qgc2V0CitDT05GSUdfRElSTkFNRT15CisjIENPTkZJR19ET1MyVU5JWCBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYMkRPUyBpcyBub3Qgc2V0CitDT05GSUdfRFU9eQorQ09ORklHX0ZFQVRVUkVfRFVfREVGQVVMVF9CTE9DS1NJWkVfMUs9eQorQ09ORklHX0VDSE89eQorQ09ORklHX0ZFQVRVUkVfRkFOQ1lfRUNITz15CitDT05GSUdfRU5WPXkKK0NPTkZJR19GRUFUVVJFX0VOVl9MT05HX09QVElPTlM9eQorIyBDT05GSUdfRVhQQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRVhQQU5EX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfRVhQUj15CitDT05GSUdfRVhQUl9NQVRIX1NVUFBPUlRfNjQ9eQorQ09ORklHX0ZBTFNFPXkKKyMgQ09ORklHX0ZPTEQgaXMgbm90IHNldAorIyBDT05GSUdfRlNZTkMgaXMgbm90IHNldAorQ09ORklHX0hFQUQ9eQorIyBDT05GSUdfRkVBVFVSRV9GQU5DWV9IRUFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RJRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlNUQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5TVEFMTF9MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0xOPXkKK0NPTkZJR19MT0dOQU1FPXkKK0NPTkZJR19MUz15CitDT05GSUdfRkVBVFVSRV9MU19GSUxFVFlQRVM9eQorQ09ORklHX0ZFQVRVUkVfTFNfRk9MTE9XTElOS1M9eQorQ09ORklHX0ZFQVRVUkVfTFNfUkVDVVJTSVZFPXkKK0NPTkZJR19GRUFUVVJFX0xTX1NPUlRGSUxFUz15CitDT05GSUdfRkVBVFVSRV9MU19USU1FU1RBTVBTPXkKK0NPTkZJR19GRUFUVVJFX0xTX1VTRVJOQU1FPXkKK0NPTkZJR19GRUFUVVJFX0xTX0NPTE9SPXkKKyMgQ09ORklHX0ZFQVRVUkVfTFNfQ09MT1JfSVNfREVGQVVMVCBpcyBub3Qgc2V0CitDT05GSUdfTUQ1U1VNPXkKK0NPTkZJR19NS0RJUj15CitDT05GSUdfRkVBVFVSRV9NS0RJUl9MT05HX09QVElPTlM9eQorQ09ORklHX01LRklGTz15CitDT05GSUdfTUtOT0Q9eQorQ09ORklHX01WPXkKKyMgQ09ORklHX0ZFQVRVUkVfTVZfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JQ0UgaXMgbm90IHNldAorQ09ORklHX05PSFVQPXkKK0NPTkZJR19PRD15CisjIENPTkZJR19QUklOVEVOViBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRGPXkKK0NPTkZJR19QV0Q9eQorQ09ORklHX1JFQURMSU5LPXkKK0NPTkZJR19GRUFUVVJFX1JFQURMSU5LX0ZPTExPVz15CitDT05GSUdfUkVBTFBBVEg9eQorQ09ORklHX1JNPXkKK0NPTkZJR19STURJUj15CisjIENPTkZJR19GRUFUVVJFX1JNRElSX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfU0VRPXkKKyMgQ09ORklHX1NIQTFTVU0gaXMgbm90IHNldAorIyBDT05GSUdfU0hBMjU2U1VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQTUxMlNVTSBpcyBub3Qgc2V0CitDT05GSUdfU0xFRVA9eQorQ09ORklHX0ZFQVRVUkVfRkFOQ1lfU0xFRVA9eQorIyBDT05GSUdfRkVBVFVSRV9GTE9BVF9TTEVFUCBpcyBub3Qgc2V0CitDT05GSUdfU09SVD15CitDT05GSUdfRkVBVFVSRV9TT1JUX0JJRz15CisjIENPTkZJR19TUExJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NQTElUX0ZBTkNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TVEFUX0ZPUk1BVCBpcyBub3Qgc2V0CitDT05GSUdfU1RUWT15CisjIENPTkZJR19TVU0gaXMgbm90IHNldAorQ09ORklHX1NZTkM9eQorIyBDT05GSUdfVEFDIGlzIG5vdCBzZXQKK0NPTkZJR19UQUlMPXkKK0NPTkZJR19GRUFUVVJFX0ZBTkNZX1RBSUw9eQorQ09ORklHX1RFRT15CisjIENPTkZJR19GRUFUVVJFX1RFRV9VU0VfQkxPQ0tfSU8gaXMgbm90IHNldAorQ09ORklHX1RSVUU9eQorQ09ORklHX1RUWT15CitDT05GSUdfVU5BTUU9eQorIyBDT05GSUdfVU5FWFBBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9VTkVYUEFORF9MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX1VOSVE9eQorQ09ORklHX1VTTEVFUD15CisjIENPTkZJR19VVURFQ09ERSBpcyBub3Qgc2V0CisjIENPTkZJR19VVUVOQ09ERSBpcyBub3Qgc2V0CitDT05GSUdfV0M9eQorIyBDT05GSUdfRkVBVFVSRV9XQ19MQVJHRSBpcyBub3Qgc2V0CitDT05GSUdfV0hPQU1JPXkKK0NPTkZJR19ZRVM9eQorCisjCisjIENvbW1vbiBvcHRpb25zIGZvciBjcCBhbmQgbXYKKyMKKyMgQ09ORklHX0ZFQVRVUkVfUFJFU0VSVkVfSEFSRExJTktTIGlzIG5vdCBzZXQKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgbHMsIG1vcmUgYW5kIHRlbG5ldAorIworQ09ORklHX0ZFQVRVUkVfQVVUT1dJRFRIPXkKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgZGYsIGR1LCBscworIworQ09ORklHX0ZFQVRVUkVfSFVNQU5fUkVBREFCTEU9eQorCisjCisjIENvbW1vbiBvcHRpb25zIGZvciBtZDVzdW0sIHNoYTFzdW0sIHNoYTI1NnN1bSwgc2hhNTEyc3VtCisjCitDT05GSUdfRkVBVFVSRV9NRDVfU0hBMV9TVU1fQ0hFQ0s9eQorCisjCisjIENvbnNvbGUgVXRpbGl0aWVzCisjCitDT05GSUdfQ0hWVD15CisjIENPTkZJR19GR0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0NMRUFSPXkKK0NPTkZJR19ERUFMTE9DVlQ9eQorQ09ORklHX0RVTVBLTUFQPXkKKyMgQ09ORklHX0tCRF9NT0RFIGlzIG5vdCBzZXQKK0NPTkZJR19MT0FERk9OVD15CitDT05GSUdfTE9BREtNQVA9eQorQ09ORklHX09QRU5WVD15CitDT05GSUdfUkVTRVQ9eQorIyBDT05GSUdfUkVTSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUkVTSVpFX1BSSU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TRVRDT05TT0xFPXkKKyMgQ09ORklHX0ZFQVRVUkVfU0VUQ09OU09MRV9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VURk9OVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NFVEZPTlRfVEVYVFVBTF9NQVAgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VURk9OVF9ESVI9IiIKKyMgQ09ORklHX1NFVEtFWUNPREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFVExPR0NPTlMgaXMgbm90IHNldAorIyBDT05GSUdfU0hPV0tFWSBpcyBub3Qgc2V0CisKKyMKKyMgQ29tbW9uIG9wdGlvbnMgZm9yIGxvYWRmb250IGFuZCBzZXRmb250CisjCisjIENPTkZJR19GRUFUVVJFX0xPQURGT05UX1BTRjIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MT0FERk9OVF9SQVcgaXMgbm90IHNldAorCisjCisjIERlYmlhbiBVdGlsaXRpZXMKKyMKK0NPTkZJR19NS1RFTVA9eQorIyBDT05GSUdfUElQRV9QUk9HUkVTUyBpcyBub3Qgc2V0CitDT05GSUdfUlVOX1BBUlRTPXkKK0NPTkZJR19GRUFUVVJFX1JVTl9QQVJUU19MT05HX09QVElPTlM9eQorIyBDT05GSUdfRkVBVFVSRV9SVU5fUEFSVFNfRkFOQ1kgaXMgbm90IHNldAorQ09ORklHX1NUQVJUX1NUT1BfREFFTU9OPXkKK0NPTkZJR19GRUFUVVJFX1NUQVJUX1NUT1BfREFFTU9OX0ZBTkNZPXkKK0NPTkZJR19GRUFUVVJFX1NUQVJUX1NUT1BfREFFTU9OX0xPTkdfT1BUSU9OUz15CitDT05GSUdfV0hJQ0g9eQorCisjCisjIEVkaXRvcnMKKyMKK0NPTkZJR19QQVRDSD15CitDT05GSUdfVkk9eQorQ09ORklHX0ZFQVRVUkVfVklfTUFYX0xFTj0xMDI0CitDT05GSUdfRkVBVFVSRV9WSV84QklUPXkKK0NPTkZJR19GRUFUVVJFX1ZJX0NPTE9OPXkKK0NPTkZJR19GRUFUVVJFX1ZJX1lBTktNQVJLPXkKK0NPTkZJR19GRUFUVVJFX1ZJX1NFQVJDSD15CisjIENPTkZJR19GRUFUVVJFX1ZJX1JFR0VYX1NFQVJDSCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9WSV9VU0VfU0lHTkFMUz15CisjIENPTkZJR19GRUFUVVJFX1ZJX0RPVF9DTUQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WSV9SRUFET05MWSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZJX1NFVE9QVFMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WSV9TRVQgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVklfV0lOX1JFU0laRT15CisjIENPTkZJR19GRUFUVVJFX1ZJX0FTS19URVJNSU5BTCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9WSV9PUFRJTUlaRV9DVVJTT1I9eQorQ09ORklHX0FXSz15CisjIENPTkZJR19GRUFUVVJFX0FXS19MSUJNIGlzIG5vdCBzZXQKK0NPTkZJR19DTVA9eQorQ09ORklHX0RJRkY9eQorIyBDT05GSUdfRkVBVFVSRV9ESUZGX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9ESUZGX0RJUj15CisjIENPTkZJR19FRCBpcyBub3Qgc2V0CitDT05GSUdfU0VEPXkKK0NPTkZJR19GRUFUVVJFX0FMTE9XX0VYRUM9eQorCisjCisjIEZpbmRpbmcgVXRpbGl0aWVzCisjCitDT05GSUdfRklORD15CitDT05GSUdfRkVBVFVSRV9GSU5EX1BSSU5UMD15CitDT05GSUdfRkVBVFVSRV9GSU5EX01USU1FPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfTU1JTj15CitDT05GSUdfRkVBVFVSRV9GSU5EX1BFUk09eQorQ09ORklHX0ZFQVRVUkVfRklORF9UWVBFPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfWERFVj15CitDT05GSUdfRkVBVFVSRV9GSU5EX01BWERFUFRIPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfTkVXRVI9eQorIyBDT05GSUdfRkVBVFVSRV9GSU5EX0lOVU0gaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfRklORF9FWEVDPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfVVNFUj15CitDT05GSUdfRkVBVFVSRV9GSU5EX0dST1VQPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfTk9UPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfREVQVEg9eQorQ09ORklHX0ZFQVRVUkVfRklORF9QQVJFTj15CitDT05GSUdfRkVBVFVSRV9GSU5EX1NJWkU9eQorQ09ORklHX0ZFQVRVUkVfRklORF9QUlVORT15CisjIENPTkZJR19GRUFUVVJFX0ZJTkRfREVMRVRFIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0ZJTkRfUEFUSD15CitDT05GSUdfRkVBVFVSRV9GSU5EX1JFR0VYPXkKKyMgQ09ORklHX0ZFQVRVUkVfRklORF9DT05URVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRklORF9MSU5LUyBpcyBub3Qgc2V0CitDT05GSUdfR1JFUD15CitDT05GSUdfRkVBVFVSRV9HUkVQX0VHUkVQX0FMSUFTPXkKK0NPTkZJR19GRUFUVVJFX0dSRVBfRkdSRVBfQUxJQVM9eQorQ09ORklHX0ZFQVRVUkVfR1JFUF9DT05URVhUPXkKK0NPTkZJR19YQVJHUz15CisjIENPTkZJR19GRUFUVVJFX1hBUkdTX1NVUFBPUlRfQ09ORklSTUFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfWEFSR1NfU1VQUE9SVF9RVU9URVMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9YQVJHU19TVVBQT1JUX1RFUk1PUFQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9YQVJHU19TVVBQT1JUX1pFUk9fVEVSTSBpcyBub3Qgc2V0CisKKyMKKyMgSW5pdCBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0JPT1RDSEFSVEQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CT09UQ0hBUlREX0JMT0FURURfSEVBREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQk9PVENIQVJURF9DT05GSUdfRklMRSBpcyBub3Qgc2V0CitDT05GSUdfSEFMVD15CisjIENPTkZJR19GRUFUVVJFX0NBTExfVEVMSU5JVCBpcyBub3Qgc2V0CitDT05GSUdfVEVMSU5JVF9QQVRIPSIiCisjIENPTkZJR19JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVVNFX0lOSVRUQUIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9LSUxMX1JFTU9WRUQgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfS0lMTF9ERUxBWT0wCisjIENPTkZJR19GRUFUVVJFX0lOSVRfU0NUVFkgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTklUX1NZU0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0VYVFJBX1FVSUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5JVF9DT1JFRFVNUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0lOSVRfVEVSTUlOQUxfVFlQRT0iIgorIyBDT05GSUdfTUVTRyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01FU0dfRU5BQkxFX09OTFlfR1JPVVAgaXMgbm90IHNldAorCisjCisjIExvZ2luL1Bhc3N3b3JkIE1hbmFnZW1lbnQgVXRpbGl0aWVzCisjCisjIENPTkZJR19BRERfU0hFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUkVNT1ZFX1NIRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU0hBRE9XUEFTU1dEUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VfQkJfUFdEX0dSUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VfQkJfU0hBRE9XIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VfQkJfQ1JZUFQ9eQorIyBDT05GSUdfVVNFX0JCX0NSWVBUX1NIQSBpcyBub3Qgc2V0CisjIENPTkZJR19BRERVU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQUREVVNFUl9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DSEVDS19OQU1FUyBpcyBub3Qgc2V0CitDT05GSUdfRklSU1RfU1lTVEVNX0lEPTAKK0NPTkZJR19MQVNUX1NZU1RFTV9JRD0wCisjIENPTkZJR19BRERHUk9VUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0FEREdST1VQX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0FERFVTRVJfVE9fR1JPVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVMVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUxHUk9VUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0RFTF9VU0VSX0ZST01fR1JPVVAgaXMgbm90IHNldAorIyBDT05GSUdfR0VUVFkgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSU4gaXMgbm90IHNldAorIyBDT05GSUdfUEFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lOX1NDUklQVFMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9OT0xPR0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU0VDVVJFVFRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBU1NXRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1BBU1NXRF9XRUFLX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUUFcgaXMgbm90IHNldAorIyBDT05GSUdfQ0hQQVNTV0QgaXMgbm90IHNldAorIyBDT05GSUdfU1UgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TVV9TWVNMT0cgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TVV9DSEVDS1NfU0hFTExTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTE9HSU4gaXMgbm90IHNldAorIyBDT05GSUdfVkxPQ0sgaXMgbm90IHNldAorCisjCisjIExpbnV4IEV4dDIgRlMgUHJvZ3MKKyMKK0NPTkZJR19DSEFUVFI9eQorQ09ORklHX0ZTQ0s9eQorIyBDT05GSUdfTFNBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTkUyRlMgaXMgbm90IHNldAorCisjCisjIExpbnV4IE1vZHVsZSBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX01PRElORk8gaXMgbm90IHNldAorIyBDT05GSUdfTU9EUFJPQkVfU01BTEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NT0RQUk9CRV9TTUFMTF9PUFRJT05TX09OX0NNRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NT0RQUk9CRV9TTUFMTF9DSEVDS19BTFJFQURZX0xPQURFRCBpcyBub3Qgc2V0CitDT05GSUdfSU5TTU9EPXkKK0NPTkZJR19STU1PRD15CitDT05GSUdfTFNNT0Q9eQorIyBDT05GSUdfRkVBVFVSRV9MU01PRF9QUkVUVFlfMl82X09VVFBVVCBpcyBub3Qgc2V0CitDT05GSUdfTU9EUFJPQkU9eQorIyBDT05GSUdfRkVBVFVSRV9NT0RQUk9CRV9CTEFDS0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVQTU9EIGlzIG5vdCBzZXQKKworIworIyBPcHRpb25zIGNvbW1vbiB0byBtdWx0aXBsZSBtb2R1dGlscworIworIyBDT05GSUdfRkVBVFVSRV8yXzRfTU9EVUxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9UUllfTU1BUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9WRVJTSU9OX0NIRUNLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5TTU9EX0tTWU1PT1BTX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTlNNT0RfTE9BRElOS01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9MT0FEX01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9MT0FEX01BUF9GVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0NIRUNLX1RBSU5URURfTU9EVUxFPXkKK0NPTkZJR19GRUFUVVJFX01PRFVUSUxTX0FMSUFTPXkKK0NPTkZJR19GRUFUVVJFX01PRFVUSUxTX1NZTUJPTFM9eQorQ09ORklHX0RFRkFVTFRfTU9EVUxFU19ESVI9Ii9saWIvbW9kdWxlcyIKK0NPTkZJR19ERUZBVUxUX0RFUE1PRF9GSUxFPSJtb2R1bGVzLmRlcCIKKworIworIyBMaW51eCBTeXN0ZW0gVXRpbGl0aWVzCisjCisjIENPTkZJR19CTE9DS0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19SRVYgaXMgbm90IHNldAorIyBDT05GSUdfQUNQSUQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9BQ1BJRF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLSUQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CTEtJRF9UWVBFIGlzIG5vdCBzZXQKK0NPTkZJR19ETUVTRz15CitDT05GSUdfRkVBVFVSRV9ETUVTR19QUkVUVFk9eQorQ09ORklHX0ZCU0VUPXkKK0NPTkZJR19GRUFUVVJFX0ZCU0VUX0ZBTkNZPXkKK0NPTkZJR19GRUFUVVJFX0ZCU0VUX1JFQURNT0RFPXkKKyMgQ09ORklHX0ZERkxVU0ggaXMgbm90IHNldAorIyBDT05GSUdfRkRGT1JNQVQgaXMgbm90IHNldAorQ09ORklHX0ZESVNLPXkKKyMgQ09ORklHX0ZESVNLX1NVUFBPUlRfTEFSR0VfRElTS1MgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfRkRJU0tfV1JJVEFCTEU9eQorIyBDT05GSUdfRkVBVFVSRV9BSVhfTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TR0lfTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TVU5fTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9PU0ZfTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9HUFRfTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9GRElTS19BRFZBTkNFRCBpcyBub3Qgc2V0CisjIENPTkZJR19GSU5ERlMgaXMgbm90IHNldAorQ09ORklHX0ZMT0NLPXkKKyMgQ09ORklHX0ZSRUVSQU1ESVNLIGlzIG5vdCBzZXQKK0NPTkZJR19GU0NLX01JTklYPXkKKyMgQ09ORklHX01LRlNfRVhUMiBpcyBub3Qgc2V0CitDT05GSUdfTUtGU19NSU5JWD15CitDT05GSUdfRkVBVFVSRV9NSU5JWDI9eQorIyBDT05GSUdfTUtGU19SRUlTRVIgaXMgbm90IHNldAorIyBDT05GSUdfTUtGU19WRkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFVE9QVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0dFVE9QVF9MT05HIGlzIG5vdCBzZXQKK0NPTkZJR19IRVhEVU1QPXkKKyMgQ09ORklHX0ZFQVRVUkVfSEVYRFVNUF9SRVZFUlNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19IV0NMT0NLPXkKK0NPTkZJR19GRUFUVVJFX0hXQ0xPQ0tfTE9OR19PUFRJT05TPXkKK0NPTkZJR19GRUFUVVJFX0hXQ0xPQ0tfQURKVElNRV9GSFM9eQorIyBDT05GSUdfSVBDUk0gaXMgbm90IHNldAorIyBDT05GSUdfSVBDUyBpcyBub3Qgc2V0CitDT05GSUdfTE9TRVRVUD15CisjIENPTkZJR19MU1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19MU1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19NREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTURFVl9DT05GIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTURFVl9SRU5BTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NREVWX1JFTkFNRV9SRUdFWFAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NREVWX0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NREVWX0xPQURfRklSTVdBUkUgaXMgbm90IHNldAorQ09ORklHX01LU1dBUD15CisjIENPTkZJR19GRUFUVVJFX01LU1dBUF9VVUlEIGlzIG5vdCBzZXQKK0NPTkZJR19NT1JFPXkKK0NPTkZJR19NT1VOVD15CisjIENPTkZJR19GRUFUVVJFX01PVU5UX0ZBS0UgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NT1VOVF9WRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTU9VTlRfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01PVU5UX0xBQkVMIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX01PVU5UX05GUz15CisjIENPTkZJR19GRUFUVVJFX01PVU5UX0NJRlMgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfTU9VTlRfRkxBR1M9eQorQ09ORklHX0ZFQVRVUkVfTU9VTlRfRlNUQUI9eQorQ09ORklHX1BJVk9UX1JPT1Q9eQorQ09ORklHX1JEQVRFPXkKKyMgQ09ORklHX1JERVYgaXMgbm90IHNldAorIyBDT05GSUdfUkVBRFBST0ZJTEUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDV0FLRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1JJUFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NSSVBUUkVQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFVEFSQ0ggaXMgbm90IHNldAorQ09ORklHX1NXQVBPTk9GRj15CisjIENPTkZJR19GRUFUVVJFX1NXQVBPTl9QUkkgaXMgbm90IHNldAorQ09ORklHX1NXSVRDSF9ST09UPXkKK0NPTkZJR19VTU9VTlQ9eQorQ09ORklHX0ZFQVRVUkVfVU1PVU5UX0FMTD15CisKKyMKKyMgQ29tbW9uIG9wdGlvbnMgZm9yIG1vdW50L3Vtb3VudAorIworQ09ORklHX0ZFQVRVUkVfTU9VTlRfTE9PUD15CitDT05GSUdfRkVBVFVSRV9NT1VOVF9MT09QX0NSRUFURT15CisjIENPTkZJR19GRUFUVVJFX01UQUJfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19WT0xVTUVJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0JUUkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfUkVJU0VSRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9GQVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9IRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9KRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9YRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9OVEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfSVNPOTY2MCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX1VERiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0xVS1MgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9MSU5VWFNXQVAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9ST01GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX1NZU1YgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9PQ0ZTMiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0xJTlVYUkFJRCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0NPTlNQWSBpcyBub3Qgc2V0CitDT05GSUdfTEVTUz15CitDT05GSUdfRkVBVFVSRV9MRVNTX01BWExJTkVTPTk5OTk5OTkKK0NPTkZJR19GRUFUVVJFX0xFU1NfQlJBQ0tFVFM9eQorQ09ORklHX0ZFQVRVUkVfTEVTU19GTEFHUz15CisjIENPTkZJR19GRUFUVVJFX0xFU1NfTUFSS1MgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MRVNTX1JFR0VYUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xFU1NfV0lOQ0ggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MRVNTX0FTS19URVJNSU5BTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xFU1NfREFTSENNRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xFU1NfTElORU5VTVMgaXMgbm90IHNldAorIyBDT05GSUdfTkFORFdSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTkREVU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFVFNFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VQklBVFRBQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVUJJREVUQUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSU1LVk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSVJNVk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSVJTVk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSVVQREFURVZPTCBpcyBub3Qgc2V0CisjIENPTkZJR19BREpUSU1FWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQkNPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NPTVBSRVNTX0JCQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRVAgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfQkVFUF9GUkVRPTAKK0NPTkZJR19GRUFUVVJFX0JFRVBfTEVOR1RIX01TPTAKKyMgQ09ORklHX0NIQVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DSEFUX05PRkFJTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfVFRZX0hJRkkgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DSEFUX0lNUExJQ0lUX0NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hBVF9TV0FMTE9XX09QVFMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DSEFUX1NFTkRfRVNDQVBFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfVkFSX0FCT1JUX0xFTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfQ0xSX0FCT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JPTkQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DUk9ORF9EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ1JPTkRfQ0FMTF9TRU5ETUFJTCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9DUk9ORF9ESVI9IiIKKyMgQ09ORklHX0NST05UQUIgaXMgbm90IHNldAorQ09ORklHX0RDPXkKKyMgQ09ORklHX0ZFQVRVUkVfRENfTElCTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZGU0QgaXMgbm90IHNldAorIyBDT05GSUdfREVWRlNEX01PRExPQUQgaXMgbm90IHNldAorIyBDT05GSUdfREVWRlNEX0ZHX05QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVkZTRF9WRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfREVWRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRUpFQ1RfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19GQlNQTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19GTEFTSENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZMQVNIX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfRkxBU0hfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZMQVNIX0VSQVNFQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPTklDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTk9USUZZRCBpcyBub3Qgc2V0CisjIENPTkZJR19MQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTEFTVF9TTUFMTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xBU1RfRkFOQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSERQQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSERQQVJNX0dFVF9JREVOVElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hEUEFSTV9IRElPX1NDQU5fSFdJRiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hEUEFSTV9IRElPX1VOUkVHSVNURVJfSFdJRiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hEUEFSTV9IRElPX0RSSVZFX1JFU0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSERQQVJNX0hESU9fVFJJU1RBVEVfSFdJRiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hEUEFSTV9IRElPX0dFVFNFVF9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfTUFLRURFVlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NQUtFREVWU19MRUFGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTUFLRURFVlNfVEFCTEUgaXMgbm90IHNldAorIyBDT05GSUdfTUFOIGlzIG5vdCBzZXQKK0NPTkZJR19NSUNST0NPTT15CisjIENPTkZJR19NT1VOVFBPSU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBSURBVVRPUlVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQURBSEVBRCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfUlVOTEVWRUwgaXMgbm90IHNldAorIyBDT05GSUdfUlggaXMgbm90IHNldAorQ09ORklHX1NFVFNJRD15CitDT05GSUdfU1RSSU5HUz15CisjIENPTkZJR19UQVNLU0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEFTS1NFVF9GQU5DWSBpcyBub3Qgc2V0CitDT05GSUdfVElNRT15CisjIENPTkZJR19USU1FT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RUWVNJWkUgaXMgbm90IHNldAorIyBDT05GSUdfVk9MTkFNRSBpcyBub3Qgc2V0CisjIENPTkZJR19XQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JraW5nIFV0aWxpdGllcworIworIyBDT05GSUdfTkFNRUlGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTkFNRUlGX0VYVEVOREVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05CRENMSUVOVCBpcyBub3Qgc2V0CitDT05GSUdfTkM9eQorIyBDT05GSUdfTkNfU0VSVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DX0VYVFJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DXzExMF9DT01QQVQgaXMgbm90IHNldAorQ09ORklHX1BJTkc9eQorQ09ORklHX1BJTkc2PXkKK0NPTkZJR19GRUFUVVJFX0ZBTkNZX1BJTkc9eQorIyBDT05GSUdfV0hPSVMgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfSVBWNj15CisjIENPTkZJR19GRUFUVVJFX1VOSVhfTE9DQUwgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfUFJFRkVSX0lQVjRfQUREUkVTUz15CisjIENPTkZJR19WRVJCT1NFX1JFU09MVVRJT05fRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBJTkcgaXMgbm90IHNldAorIyBDT05GSUdfQlJDVEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CUkNUTF9GQU5DWSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JSQ1RMX1NIT1cgaXMgbm90IHNldAorIyBDT05GSUdfRE5TRCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhFUl9XQUtFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBS0VJREVOVEQgaXMgbm90IHNldAorIyBDT05GSUdfRlRQRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0ZUUF9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0ZUUERfQUNDRVBUX0JST0tFTl9MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUEdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFBQVVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9GVFBHRVRQVVRfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19IT1NUTkFNRT15CisjIENPTkZJR19IVFRQRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX1JBTkdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX1VTRV9TRU5ERklMRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX1NFVFVJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0JBU0lDX0FVVEggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IVFRQRF9BVVRIX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0NHSSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0NPTkZJR19XSVRIX1NDUklQVF9JTlRFUlBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfU0VUX1JFTU9URV9QT1JUX1RPX0VOViBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0VOQ09ERV9VUkxfU1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfRVJST1JfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IVFRQRF9QUk9YWSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0daSVAgaXMgbm90IHNldAorQ09ORklHX0lGQ09ORklHPXkKK0NPTkZJR19GRUFUVVJFX0lGQ09ORklHX1NUQVRVUz15CisjIENPTkZJR19GRUFUVVJFX0lGQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JRkNPTkZJR19NRU1TVEFSVF9JT0FERFJfSVJRIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0lGQ09ORklHX0hXPXkKKyMgQ09ORklHX0ZFQVRVUkVfSUZDT05GSUdfQlJPQURDQVNUX1BMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSUZFTlNMQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lGUExVR0QgaXMgbm90IHNldAorQ09ORklHX0lGVVBET1dOPXkKK0NPTkZJR19JRlVQRE9XTl9JRlNUQVRFX1BBVEg9Ii92YXIvcnVuL2lmc3RhdGUiCisjIENPTkZJR19GRUFUVVJFX0lGVVBET1dOX0lQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVBfQlVJTFRJTiBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9JRkNPTkZJR19CVUlMVElOPXkKK0NPTkZJR19GRUFUVVJFX0lGVVBET1dOX0lQVjQ9eQorQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVBWNj15CitDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9NQVBQSU5HPXkKKyMgQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fRVhURVJOQUxfREhDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVURCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lORVREX1NVUFBPUlRfQlVJTFRJTl9FQ0hPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5FVERfU1VQUE9SVF9CVUlMVElOX0RJU0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTkVURF9TVVBQT1JUX0JVSUxUSU5fVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lORVREX1NVUFBPUlRfQlVJTFRJTl9EQVlUSU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5FVERfU1VQUE9SVF9CVUlMVElOX0NIQVJHRU4gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTkVURF9SUEMgaXMgbm90IHNldAorQ09ORklHX0lQPXkKK0NPTkZJR19GRUFUVVJFX0lQX0FERFJFU1M9eQorQ09ORklHX0ZFQVRVUkVfSVBfTElOSz15CitDT05GSUdfRkVBVFVSRV9JUF9ST1VURT15CitDT05GSUdfRkVBVFVSRV9JUF9UVU5ORUw9eQorIyBDT05GSUdfRkVBVFVSRV9JUF9SVUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSVBfU0hPUlRfRk9STVMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JUF9SQVJFX1BST1RPQ09MUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUEFERFIgaXMgbm90IHNldAorIyBDT05GSUdfSVBMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBUVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBSVUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ0FMQyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lQQ0FMQ19GQU5DWSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lQQ0FMQ19MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX05FVFNUQVQ9eQorIyBDT05GSUdfRkVBVFVSRV9ORVRTVEFUX1dJREUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9ORVRTVEFUX1BSRyBpcyBub3Qgc2V0CitDT05GSUdfTlNMT09LVVA9eQorIyBDT05GSUdfTlRQRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX05UUERfU0VSVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BTQ0FOIGlzIG5vdCBzZXQKK0NPTkZJR19ST1VURT15CisjIENPTkZJR19TTEFUVEFDSCBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BTVkQgaXMgbm90IHNldAorQ09ORklHX1RFTE5FVD15CisjIENPTkZJR19GRUFUVVJFX1RFTE5FVF9UVFlQRSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9URUxORVRfQVVUT0xPR0lOPXkKKyMgQ09ORklHX1RFTE5FVEQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9URUxORVREX1NUQU5EQUxPTkUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9URUxORVREX0lORVREX1dBSVQgaXMgbm90IHNldAorQ09ORklHX1RGVFA9eQorIyBDT05GSUdfVEZUUEQgaXMgbm90IHNldAorCisjCisjIENvbW1vbiBvcHRpb25zIGZvciB0ZnRwL3RmdHBkCisjCitDT05GSUdfRkVBVFVSRV9URlRQX0dFVD15CitDT05GSUdfRkVBVFVSRV9URlRQX1BVVD15CisjIENPTkZJR19GRUFUVVJFX1RGVFBfQkxPQ0tTSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEZUUF9QUk9HUkVTU19CQVIgaXMgbm90IHNldAorIyBDT05GSUdfVEZUUF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfVFJBQ0VST1VURT15CisjIENPTkZJR19UUkFDRVJPVVRFNiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RSQUNFUk9VVEVfVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RSQUNFUk9VVEVfU09VUkNFX1JPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVFJBQ0VST1VURV9VU0VfSUNNUCBpcyBub3Qgc2V0CisjIENPTkZJR19UVU5DVEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UVU5DVExfVUcgaXMgbm90IHNldAorQ09ORklHX1VESENQRD15CisjIENPTkZJR19ESENQUkVMQVkgaXMgbm90IHNldAorQ09ORklHX0RVTVBMRUFTRVM9eQorIyBDT05GSUdfRkVBVFVSRV9VREhDUERfV1JJVEVfTEVBU0VTX0VBUkxZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVURIQ1BEX0JBU0VfSVBfT05fTUFDIGlzIG5vdCBzZXQKK0NPTkZJR19ESENQRF9MRUFTRVNfRklMRT0iL3Zhci9saWIvbWlzYy91ZGhjcGQubGVhc2VzIgorQ09ORklHX1VESENQQz15CitDT05GSUdfRkVBVFVSRV9VREhDUENfQVJQSU5HPXkKKyMgQ09ORklHX0ZFQVRVUkVfVURIQ1BfUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVURIQ1BfREVCVUc9MAorIyBDT05GSUdfRkVBVFVSRV9VREhDUF9SRkMzMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVURIQ1BfODAyMVEgaXMgbm90IHNldAorQ09ORklHX1VESENQQ19ERUZBVUxUX1NDUklQVD0iL3Vzci9zaGFyZS91ZGhjcGMvZGVmYXVsdC5zY3JpcHQiCitDT05GSUdfVURIQ1BDX1NMQUNLX0ZPUl9CVUdHWV9TRVJWRVJTPTgwCitDT05GSUdfSUZVUERPV05fVURIQ1BDX0NNRF9PUFRJT05TPSItUiAtbiIKKyMgQ09ORklHX1VEUFNWRCBpcyBub3Qgc2V0CisjIENPTkZJR19WQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19XR0VUPXkKK0NPTkZJR19GRUFUVVJFX1dHRVRfU1RBVFVTQkFSPXkKK0NPTkZJR19GRUFUVVJFX1dHRVRfQVVUSEVOVElDQVRJT049eQorQ09ORklHX0ZFQVRVUkVfV0dFVF9MT05HX09QVElPTlM9eQorQ09ORklHX0ZFQVRVUkVfV0dFVF9USU1FT1VUPXkKKyMgQ09ORklHX1pDSVAgaXMgbm90IHNldAorCisjCisjIFByaW50IFV0aWxpdGllcworIworIyBDT05GSUdfTFBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xQUiBpcyBub3Qgc2V0CisjIENPTkZJR19MUFEgaXMgbm90IHNldAorCisjCisjIE1haWwgVXRpbGl0aWVzCisjCisjIENPTkZJR19NQUtFTUlNRSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9NSU1FX0NIQVJTRVQ9IiIKKyMgQ09ORklHX1BPUE1BSUxESVIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9QT1BNQUlMRElSX0RFTElWRVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFRk9STUlNRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1JFRk9STUlNRV9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfU0VORE1BSUwgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3MgVXRpbGl0aWVzCisjCisjIENPTkZJR19JT1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVBTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05NRVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BTVFJFRSBpcyBub3Qgc2V0CisjIENPTkZJR19QV0RYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNRU1DQVAgaXMgbm90IHNldAorQ09ORklHX1VQVElNRT15CisjIENPTkZJR19GRUFUVVJFX1VQVElNRV9VVE1QX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZSRUU9eQorQ09ORklHX0ZVU0VSPXkKK0NPTkZJR19LSUxMPXkKK0NPTkZJR19LSUxMQUxMPXkKKyMgQ09ORklHX0tJTExBTEw1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BHUkVQIGlzIG5vdCBzZXQKK0NPTkZJR19QSURPRj15CisjIENPTkZJR19GRUFUVVJFX1BJRE9GX1NJTkdMRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1BJRE9GX09NSVQgaXMgbm90IHNldAorIyBDT05GSUdfUEtJTEwgaXMgbm90IHNldAorQ09ORklHX1BTPXkKK0NPTkZJR19GRUFUVVJFX1BTX1dJREU9eQorIyBDT05GSUdfRkVBVFVSRV9QU19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUFNfQURESVRJT05BTF9DT0xVTU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUFNfVU5VU1VBTF9TWVNURU1TIGlzIG5vdCBzZXQKK0NPTkZJR19SRU5JQ0U9eQorQ09ORklHX0JCX1NZU0NUTD15CitDT05GSUdfVE9QPXkKK0NPTkZJR19GRUFUVVJFX1RPUF9DUFVfVVNBR0VfUEVSQ0VOVEFHRT15CitDT05GSUdfRkVBVFVSRV9UT1BfQ1BVX0dMT0JBTF9QRVJDRU5UUz15CisjIENPTkZJR19GRUFUVVJFX1RPUF9TTVBfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVE9QX0RFQ0lNQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVE9QX1NNUF9QUk9DRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVE9QTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU0hPV19USFJFQURTIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSD15CisKKyMKKyMgUnVuaXQgVXRpbGl0aWVzCisjCisjIENPTkZJR19SVU5TViBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5TVkRJUiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1JVTlNWRElSX0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19TViBpcyBub3Qgc2V0CitDT05GSUdfU1ZfREVGQVVMVF9TRVJWSUNFX0RJUj0iIgorIyBDT05GSUdfU1ZMT0dEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUFNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFVFVJREdJRCBpcyBub3Qgc2V0CisjIENPTkZJR19FTlZVSURHSUQgaXMgbm90IHNldAorIyBDT05GSUdfRU5WRElSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPRlRMSU1JVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSENPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQ09OX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRVRFTkZPUkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFVFNFQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19MT0FEX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NQVRDSFBBVEhDT04gaXMgbm90IHNldAorIyBDT05GSUdfUkVTVE9SRUNPTiBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5DT04gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9SVU5DT05fTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTElOVVhFTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFVEVORk9SQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0VURklMRVMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TRVRGSUxFU19DSEVDS19PUFRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0VUU0VCT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFU1RBVFVTIGlzIG5vdCBzZXQKKworIworIyBTaGVsbHMKKyMKK0NPTkZJR19BU0g9eQorQ09ORklHX0FTSF9CQVNIX0NPTVBBVD15CisjIENPTkZJR19BU0hfSURMRV9USU1FT1VUIGlzIG5vdCBzZXQKK0NPTkZJR19BU0hfSk9CX0NPTlRST0w9eQorQ09ORklHX0FTSF9BTElBUz15CitDT05GSUdfQVNIX0dFVE9QVFM9eQorQ09ORklHX0FTSF9CVUlMVElOX0VDSE89eQorQ09ORklHX0FTSF9CVUlMVElOX1BSSU5URj15CitDT05GSUdfQVNIX0JVSUxUSU5fVEVTVD15CisjIENPTkZJR19BU0hfQ01EQ01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FTSF9NQUlMIGlzIG5vdCBzZXQKK0NPTkZJR19BU0hfT1BUSU1JWkVfRk9SX1NJWkU9eQorIyBDT05GSUdfQVNIX1JBTkRPTV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19BU0hfRVhQQU5EX1BSTVQ9eQorQ09ORklHX0NUVFlIQUNLPXkKKyMgQ09ORklHX0hVU0ggaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9CQVNIX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0JSQUNFX0VYUEFOU0lPTiBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0hFTFAgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9JTlRFUkFDVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX1NBVkVISVNUT1JZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfSk9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0lGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfTE9PUFMgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9DQVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfRlVOQ1RJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfTE9DQUwgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9SQU5ET01fU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0VYUE9SVF9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfTU9ERV9YIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TSCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9TSF9JU19BU0g9eQorIyBDT05GSUdfRkVBVFVSRV9TSF9JU19IVVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU0hfSVNfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JBU0hfSVNfQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQkFTSF9JU19IVVNIIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0JBU0hfSVNfTk9ORT15CitDT05GSUdfU0hfTUFUSF9TVVBQT1JUPXkKKyMgQ09ORklHX1NIX01BVEhfU1VQUE9SVF82NCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9TSF9FWFRSQV9RVUlFVD15CisjIENPTkZJR19GRUFUVVJFX1NIX1NUQU5EQUxPTkUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TSF9OT0ZPUksgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfU0hfSElTVEZJTEVTSVpFPXkKKworIworIyBTeXN0ZW0gTG9nZ2luZyBVdGlsaXRpZXMKKyMKK0NPTkZJR19TWVNMT0dEPXkKK0NPTkZJR19GRUFUVVJFX1JPVEFURV9MT0dGSUxFPXkKK0NPTkZJR19GRUFUVVJFX1JFTU9URV9MT0c9eQorQ09ORklHX0ZFQVRVUkVfU1lTTE9HRF9EVVA9eQorQ09ORklHX0ZFQVRVUkVfU1lTTE9HRF9DRkc9eQorQ09ORklHX0ZFQVRVUkVfU1lTTE9HRF9SRUFEX0JVRkZFUl9TSVpFPTI1NgorQ09ORklHX0ZFQVRVUkVfSVBDX1NZU0xPRz15CitDT05GSUdfRkVBVFVSRV9JUENfU1lTTE9HX0JVRkZFUl9TSVpFPTE2CitDT05GSUdfTE9HUkVBRD15CitDT05GSUdfRkVBVFVSRV9MT0dSRUFEX1JFRFVDRURfTE9DS0lORz15CitDT05GSUdfS0xPR0Q9eQorQ09ORklHX0ZFQVRVUkVfS0xPR0RfS0xPR0NUTD15CitDT05GSUdfTE9HR0VSPXkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94XyUuYmJhcHBlbmQgYi95b2N0by1wb2t5L21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveF8lLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMDU3ODcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveF8lLmJiYXBwZW5kCkBAIC0wLDAgKzEsMiBAQAorRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtCUE59OiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzL3BzcGxhc2gtcG9reS1pbWcuaCBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvcHNwbGFzaC9maWxlcy9wc3BsYXNoLXBva3ktaW1nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg0ZGFjOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvcHNwbGFzaC9maWxlcy9wc3BsYXNoLXBva3ktaW1nLmgKQEAgLTAsMCArMSw5MTQgQEAKKy8qIFlvY3RvIFByb2plY3QgbG9nbyBmb3IgcHNwbGFzaAorICoKKyAqIENyZWF0ZWQgdXNpbmcgbWFrZS1pbWFnZS1oZWFkZXIuc2ggKGRpc3RyaWJ1dGVkIHdpdGggcHNwbGFzaCkKKyAqLworCisvKiBHZGtQaXhidWYgUkdCQSBDLVNvdXJjZSBpbWFnZSBkdW1wIDEtYnl0ZS1ydW4tbGVuZ3RoLWVuY29kZWQgKi8KKworI2RlZmluZSBQT0tZX0lNR19ST1dTVFJJREUgKDE3MDgpCisjZGVmaW5lIFBPS1lfSU1HX1dJRFRIICg0MjcpCisjZGVmaW5lIFBPS1lfSU1HX0hFSUdIVCAoMjE0KQorI2RlZmluZSBQT0tZX0lNR19CWVRFU19QRVJfUElYRUwgKDQpIC8qIDM6UkdCLCA0OlJHQkEgKi8KKyNkZWZpbmUgUE9LWV9JTUdfUkxFX1BJWEVMX0RBVEEgKCh1aW50OCopIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDIzN1wzNTBcMzU0XDM0MFwzNzdcMVwzNTBcMzU0XDM0MlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDJcMjQxXDI0MyIgXAorICAiXDI0NFwzNzc7QUNcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMjUyXDM1MFwzNTRcMzQwXDM3N1wyXDI3NVwyNzdcMjc3XDM3N0xRUlwzNzdcMjAyLjQ2XDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDI1MFwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wyXDMyMVwzMjJcMzIzXDM3N11hY1wzNzdcMjA0LjQ2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDI0NlwzNTBcMzU0XDM0MFwzNzdcM1wzNDZcMzQ3XDM0N1wzNzciIFwKKyAgInd7fFwzNzcvNTdcMzc3XDIwNS40NlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyNDVcMzUwXDM1NFwzNDBcMzc3XDJcMjIzXDIyNlwyMjdcMzc3NTs9XDM3N1wyMDcuNDYiIFwKKyAgIlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjQzIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDJcMjUzXDI1NVwyNTZcMzc3QkhKXDM3N1wyMTEuNDZcMzc3XDM3N1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjQxXDM1MFwzNTRcMzQwXDM3N1wyXDMwNCIgXAorICAiXDMwNlwzMDZcMzc3UFVXXDM3N1wyMTMuNDZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMjQwXDM1MFwzNTRcMzQwXDM3N1wxXDMwNlwzMTBcMzExXDM3N1wyMTUuNDZcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjQwXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNDBcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3IiBcCisgICJcMjE1LjQ2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDI0MFwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDI0MFwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzIiBcCisgICJcMzA0XDM3N1wyMTUuNDZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMjQwXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjQwXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNDBcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNDBcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDI0MFwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMjQwXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjQwXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDMiIFwKKyAgIlwzMDRcMzc3XDIxNS40NlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMDVcMzUwXDM1NFwzNDBcMzc3XDFcMzQ2XDM0NyIgXAorICAiXDM0N1wzNzdcMjU2XDM1MFwzNTRcMzQwXDM3N1wxXDM0MVwzNDJcMzQzXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDI1MiIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzA0IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDNcMjIwXDIyM1wyMjRcMzc3NTs9XDM3N1wyNDRcMjQ3XDI1MFwzNzdcMjU0XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDRcMzAyXDMwM1wzMDRcMzc3MTc5XDM3N1wyMDVcMjEwXDIxMlwzNzdcMzUwXDM1NFwzNDJcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyNTBcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDMwMlwzNTBcMzU0XDM0MFwzNzdcMlwyNTBcMjUzXDI1M1wzNzc+REZcMzc3XDIwMi40NiIgXAorICAiXDM3N1wxQEZHXDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFZXmBcMzc3XDIwMi40NlwzNzdcMjtBQ1wzNzdcMjQxXDI0MyIgXAorICAiXDI0NFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNDdcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDMwMFwzNTBcMzU0XDM0MFwzNzdcMlwzMDNcMzA1XDMwNVwzNzdQVVciIFwKKyAgIlwzNzdcMjA1LjQ2XDM3N1wxXDIzMFwyMzNcMjM0XDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3XDFcMzAzXDMwNVwzMDVcMzc3IiBcCisgICJcMjA1LjQ2XDM3N1wyTFFSXDM3N1wyNzVcMjc3XDI3N1wzNzdcMjQ0XDM1MFwzNTRcMzQwXDM3N1wxNlwzNTBcMzUyXDM1MSIgXAorICAiXDM3N1wzMTNcMzE0XDMxNVwzNzdcMjU0XDI1N1wyNTdcMzc3XDIyNFwyMjdcMjMwXDM3N1wyMTRcMjIwXDIyMVwzNzciIFwKKyAgIlwyMDJcMjA1XDIwNlwzNzd3e3xcMzc3dXl7XDM3N1wyMDJcMjA1XDIwNlwzNzdcMjEzXDIxNlwyMTdcMzc3XDIyM1wyMjYiIFwKKyAgIlwyMjdcMzc3XDI1M1wyNTVcMjU2XDM3N1wzMTBcMzEyXDMxMlwzNzdcMzQ2XDM0NlwzNDdcMzc3XDM2MlwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDI2N1wzNTBcMzU0XDM0MFwzNzdcMTZcMzUyXDM1NCIgXAorICAiXDM0NVwzNzdcMzE1XDMxNlwzMTdcMzc3XDI1N1wyNjJcMjYzXDM3N1wyMjVcMjMwXDIzMVwzNzdcMjE2XDIyMVwyMjIiIFwKKyAgIlwzNzdcMjAyXDIwNVwyMDZcMzc3eHx9XDM3N3R4eVwzNzdcMjAyXDIwNVwyMDZcMzc3XDIxMVwyMTRcMjE1XDM3N1wyMjEiIFwKKyAgIlwyMjRcMjI1XDM3N1wyNDdcMjUyXDI1M1wzNzdcMzA1XDMwNlwzMDdcMzc3XDM0MlwzNDNcMzQzXDM3N1wzNzBcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMlwzMjdcMzMwXDMzMFwzNzdiZ2hcMzc3XDIwNy40NlwzNzdcMSIiOVw3N0FcMzc3XDI1MlwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxXWFjXDM3N1wyMDcuNDZcMzc3XDJiZ2hcMzc3XDMyN1wzMzBcMzMwXDM3N1wyMzZcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcNFwzMjNcMzI0XDMyNFwzNzdcMjM3XDI0MlwyNDNcMzc3a29wXDM3Nzk+QFwzNzdcMjE2LjQ2XDM3N1w0IiBcCisgICI3PVw3N1wzNzdmamxcMzc3XDIzMlwyMzVcMjM2XDM3N1wzMTZcMzE3XDMyMFwzNzdcMzAzXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDdcMzUyXDM1NFwzNDZcMzc3XDMzMlwzMzNcMzM0XDM3N1wzMDNcMzA1XDMwNVwzNzdcMjcxXDI3M1wyNzRcMzc3XDI2MyIgXAorICAiXDI2NVwyNjZcMzc3XDI1M1wyNTZcMjU3XDM3N1wyNDdcMjUyXDI1M1wzNzdcMjQ0XDIzNVwyNDBcMjQxXDM3N1wxfVwyMDAiIFwKKyAgIlwyMDJcMzc3XDIxNS40NlwzNzdcMVwyMjdcMjMyXDIzM1wzNzdcMjIxXDIzNVwyNDBcMjQxXDM3N1wxXDMzNVwzMzZcMzM2IiBcCisgICJcMzc3XDI0MFwzNTBcMzU0XDM0MFwzNzdcNFwzMzBcMzMyXDMzMlwzNzdcMjQ0XDI0N1wyNTBcMzc3cHR1XDM3Nz5DRSIgXAorICAiXDM3N1wyMTYuNDZcMzc3XDQiIjQ6PFwzNzdfZGVcMzc3XDIyNFwyMzBcMjMxXDM3N1wzMTFcMzEyXDMxM1wzNzdcMzYyIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDNcMzUyXDM1M1wzNDdcMzc3flwyMDJcMjAzXDM3NzA2OFwzNzdcMjExLjQ2XDM3N1wxXDIxNiIgXAorICAiXDIyMVwyMjJcMzc3XDI1MFwzNTBcMzU0XDM0MFwzNzdcMVwzMDZcMzEwXDMxMVwzNzdcMjExLjQ2XDM3N1wzIiIwNjgiIFwKKyAgIlwzNzd+XDIwMlwyMDNcMzc3XDM1MlwzNTNcMzQ3XDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3XDNcMzMyXDMzM1wzMzRcMzc3IiBcCisgICJcMjE0XDIyMFwyMjFcMzc3Q0lKXDM3N1wyMjYuNDZcMzc3XDM+Q0VcMzc3XDIwN1wyMTJcMjEzXDM3N1wzMjFcMzIyXDMyMyIgXAorICAiXDM3N1wyNzJcMzUwXDM1NFwzNDBcMzc3XDZcMzI0XDMyNVwzMjVcMzc3XDI1N1wyNjFcMjYyXDM3N1wyMTNcMjE3XDIyMCIgXAorICAiXDM3N2drbFwzNzdGS01cMzc3Mjg6XDM3N1wzMTMuNDZcMzc3XDFcMjY1XDI2N1wyNzBcMzc3XDIzNVwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzXDM0MVwzNDJcMzQyXDM3N1wyMjRcMjMwXDIzMVwzNzdKT1FcMzc3XDIyNi40NlwzNzdcMyIiOVw3N0FcMzc3IiBcCisgICJ9XDIwMFwyMDJcMzc3XDMxMlwzMTNcMzE0XDM3N1wzNTZcMzUwXDM1NFwzNDBcMzc3XDJcMjI1XDIzMFwyMzFcMzc3OCIgXAorICAiPlw3N1wzNzdcMjEzLjQ2XDM3N1wyIiI1Oz1cMzc3XDM1MFwzNTJcMzUxXDM3N1wyNDdcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIl9kZVwzNzdcMjEzLjQ2XDM3N1wyIiI4Plw3N1wzNzdcMjMyXDIzNVwyMzZcMzc3XDIyNlwzNTBcMzU0XDM0MFwzNzdcMiIgXAorICAiXDI2NFwyNjZcMjY2XDM3N1ZbXVwzNzdcMjM0LjQ2XDM3N1wyUFVWXDM3N1wyNTNcMjU2XDI1N1wzNzdcMjY0XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDRcMzIyXDMyM1wzMjRcMzc3XDIzNVwyMzdcMjQwXDM3N2drbFwzNzc2PD5cMzc3XDMyMS40NlwzNzdcMSIgXAorICAiXDI2NVwyNjdcMjcwXDM3N1wyMzNcMzUwXDM1NFwzNDBcMzc3XDJcMjc3XDMwMVwzMDJcMzc3YGVmXDM3N1wyMzQuNDYiIFwKKyAgIlwzNzdcMkdNTlwzNzdcMjQwXDI0M1wyNDRcMzc3XDM1NFwzNTBcMzU0XDM0MFwzNzdcMUJISlwzNzdcMjE1LjQ2XDM3NyIgXAorICAiXDFcMjAyXDIwNVwyMDZcMzc3XDI0NlwzNTBcMzU0XDM0MFwzNzdcMVwzMTFcMzEyXDMxM1wzNzdcMjE1LjQ2XDM3N1wxIiBcCisgICJDSUpcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMlwyNDFcMjQzXDI0NFwzNzdGS01cMzc3XDI0MC40NlwzNzdcMkBGRyIgXAorICAiXDM3N1wyMzFcMjMzXDIzNFwzNzdcMjU3XDM1MFwzNTRcMzQwXDM3N1wzXDMyNVwzMjZcMzI3XDM3N1wyMTRcMjIwXDIyMSIgXAorICAiXDM3N0VKTFwzNzdcMzI1LjQ2XDM3N1wxXDI2NVwyNjdcMjcwXDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3XDJcMjU1XDI1NyIgXAorICAiXDI2MFwzNzdOU1VcMzc3XDI0MC40NlwzNzdcMyIiOVw3N0FcMzc3XDIyMFwyMjNcMjI0XDM3N1wzNTBcMzU0XDM0MlwzNzciIFwKKyAgIlwzNTFcMzUwXDM1NFwzNDBcMzc3XDFcMjUxXDI1M1wyNTRcMzc3XDIxNS40NlwzNzdcMiIiMTc5XDM3N1wzNDFcMzQyIiBcCisgICJcMzQzXDM3N1wyNDVcMzUwXDM1NFwzNDBcMzc3XDFiZmhcMzc3XDIxNS40NlwzNzdcMVwyNDRcMjQ3XDI1MFwzNzdcMjIyIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDJcMjc1XDI3N1wyNzdcMzc3TFFSXDM3N1wyNDQuNDZcMzc3XDJCSEpcMzc3XDI2NFwyNjciIFwKKyAgIlwyNjdcMzc3XDI1M1wzNTBcMzU0XDM0MFwzNzdcMlwyNTNcMjU2XDI1N1wzNzdQVVZcMzc3XDMzMC40NlwzNzdcMVwyNjUiIFwKKyAgIlwyNjdcMjcwXDM3N1wyMjdcMzUwXDM1NFwzNDBcMzc3XDJcMzEzXDMxNFwzMTVcMzc3VVlbXDM3N1wyNDQuNDZcMzc3IiBcCisgICJcMjtBQ1wzNzdcMjQ3XDI1MlwyNTNcMzc3XDM1MVwzNTBcMzU0XDM0MFwzNzdcMUxRU1wzNzdcMjE1LjQ2XDM3N1wxeCIgXAorICAifH1cMzc3XDI0NFwzNTBcMzU0XDM0MFwzNzdcMVwzMTRcMzE2XDMxNlwzNzdcMjE1LjQ2XDM3N1wxQkdJXDM3N1wyMjEiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMlwzNDZcMzQ3XDM0N1wzNzdobW5cMzc3XDI1MC40NlwzNzdcMl1hY1wzNzdcMzQwXDM0MSIgXAorICAiXDM0MVwzNzdcMjQ3XDM1MFwzNTRcMzQwXDM3N1wyXDIzNVwyMzdcMjQwXDM3N0JHSVwzNzdcMzMyLjQ2XDM3N1wxXDI2NSIgXAorICAiXDI2N1wyNzBcMzc3XDIyNVwzNTBcMzU0XDM0MFwzNzdcMlwzNTBcMzU0XDM0MlwzNzd0eHpcMzc3XDI1MC40NlwzNzciIFwKKyAgIlwyUFVXXDM3N1wzMjRcMzI2XDMyNlwzNzdcMzQ3XDM1MFwzNTRcMzQwXDM3N1wxXDI3MFwyNzJcMjcyXDM3N1wyMTUuIiBcCisgICI0NlwzNzdcMiIiMDY4XDM3N1wzMzBcMzMyXDMzMlwzNzdcMjQzXDM1MFwzNTRcMzQwXDM3N1wxZWlrXDM3N1wyMTUuNCIgXAorICAiNlwzNzdcMVwyNDJcMjQ0XDI0NVwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wyXDI3NVwyNzdcMjc3XDM3Nz1CRFwzNzciIFwKKyAgIlwyNTIuNDZcMzc3XDIiIjg+XDc3XDM3N1wyNjFcMjYzXDI2NFwzNzdcMjQ0XDM1MFwzNTRcMzQwXDM3N1wyXDI2NVwyNjciIFwKKyAgIlwyNzBcMzc3QkhKXDM3N1wzMzQuNDZcMzc3XDFcMjY1XDI2N1wyNzBcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMlwzMTMiIFwKKyAgIlwzMTVcMzE1XDM3N0VKTFwzNzdcMjUyLjQ2XDM3N1wyIiIyODpcMzc3XDI0MFwyNDNcMjQ0XDM3N1wzNDdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVZbXVwzNzdcMjE1LjQ2XDM3N1wxa3BxXDM3N1wyNDJcMzUwXDM1NFwzNDBcMzc3XDFcMzE2XDMxN1wzMjAiIFwKKyAgIlwzNzdcMjE1LjQ2XDM3N1wxQEZHXDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDFcMjEwXDIxNFwyMTVcMzc3XDI1Ni40IiBcCisgICI2XDM3N1wxeX1cMTc3XDM3N1wyNDFcMzUwXDM1NFwzNDBcMzc3XDJcMzM2XDMzN1wzMzdcMzc3YWVnXDM3N1wzMzYuNCIgXAorICAiNlwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wyXDIzMVwyMzRcMjM1XDM3NzA2OFwzNzciIFwKKyAgIlwyNTUuNDZcMzc3XDFpbW9cMzc3XDM0NlwzNTBcMzU0XDM0MFwzNzdcMVwzMDRcMzA2XDMwNlwzNzdcMjE2LjQ2XDM3NyIgXAorICAiXDFcMzE3XDMyMVwzMjFcMzc3XDI0MVwzNTBcMzU0XDM0MFwzNzdcMWdsbVwzNzdcMjE1LjQ2XDM3N1wxXDIzNlwyNDEiIFwKKyAgIlwyNDJcMzc3XDIxN1wzNTBcMzU0XDM0MFwzNzdcMXB0dVwzNzdcMjYwLjQ2XDM3N1wxY2hpXDM3N1wyMzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMlwyNjRcMjY3XDI2N1wzNzc4Plw3N1wzNzdcMzM3LjQ2XDM3N1wxXDI2NVwyNjdcMjcwXDM3N1wyMjIiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwyMDJcMjA1XDIwNlwzNzdcMjYwLjQ2XDM3N1wyVFlaXDM3N1wzNTJcMzUzXDM0N1wzNzciIFwKKyAgIlwzNDVcMzUwXDM1NFwzNDBcMzc3XDFjaGlcMzc3XDIxNS40NlwzNzdcMWJmaFwzNzdcMjQwXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMzIxXDMyMlwzMjNcMzc3XDIxNS40NlwzNzdcMT5ERlwzNzdcMjE3XDM1MFwzNTRcMzQwXDM3N1wxX2RlXDM3N1wyNjIiIFwKKyAgIi40NlwzNzdcMlRZWlwzNzdcMzUyXDM1M1wzNDdcMzc3XDIzNFwzNTBcMzU0XDM0MFwzNzdcMVwyMDJcMjA1XDIwNlwzNzciIFwKKyAgIlwzNDEuNDZcMzc3XDFcMjY1XDI2N1wyNzBcMzc3XDIyMVwzNTBcMzU0XDM0MFwzNzdcMXB0dlwzNzdcMjYyLjQ2XDM3NyIgXAorICAiXDJITU9cMzc3XDMzN1wzNDBcMzQwXDM3N1wzNDRcMzUwXDM1NFwzNDBcMzc3XDJcMzIyXDMyM1wzMjRcMzc3LzU3XDM3NyIgXAorICAiXDIxNS40NlwzNzdcMVwzMDRcMzA2XDMwNlwzNzdcMjM3XDM1MFwzNTRcMzQwXDM3N1wxa29wXDM3N1wyMTUuNDZcMzc3IiBcCisgICJcMVwyMzRcMjM3XDI0MFwzNzdcMjE2XDM1MFwzNTRcMzQwXDM3N1wxYWVnXDM3N1wyNjQuNDZcMzc3XDFTWFlcMzc3XDIzMyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxZmpsXDM3N1wzNDIuNDZcMzc3XDFcMjY1XDI2N1wyNzBcMzc3XDIyMFwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxcHR1XDM3N1wyNjQuNDZcMzc3XDJFSkxcMzc3XDM1MFwzNTFcMzUxXDM3N1wzNDRcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMXB0dlwzNzdcMjE1LjQ2XDM3N1wxVltdXDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3XDFcMzI0XDMyNlwzMjZcMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wxPUJEXDM3N1wyMTZcMzUwXDM1NFwzNDBcMzc3XDFucnNcMzc3XDIyNi40NlwzNzdcMTI9QkRcMzc3YGUiIFwKKyAgImZcMzc3XDIwMFwyMDRcMjA1XDM3N1wyMjBcMjIzXDIyNFwzNzdcMjMzXDIzNlwyMzdcMzc3XDIzNFwyMzdcMjQwXDM3NyIgXAorICAiXDIyMFwyMjNcMjI0XDM3N1wyMDJcMjA1XDIwNlwzNzdiZ2hcMzc3PkRGXDM3N1wyMjYuNDZcMzc3XDFkaWpcMzc3XDIzMSIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxX2RlXDM3N1wyMzEuNDZcMzc3XDMiIjM5O1wzNzdFSkxcMzc3WV5gXDM3N1wyMDJmamwiIFwKKyAgIlwzNzdcMXN3eFwzNzdcMjQ0dHh5XDM3N1wxX2RlXDM3N1wyMTUuNDZcMzc3XDFwdHVcMzc3XDIyMXR4eVwzNzdcMVwzMTYiIFwKKyAgIlwzMTdcMzIwXDM3N1wyMTdcMzUwXDM1NFwzNDBcMzc3XDFcMjA0XDIxMFwyMTFcMzc3XDIyNi40NlwzNzdcMTIiIjlcNzciIFwKKyAgIkFcMzc3W2BhXDM3N31cMjAwXDIwMlwzNzdcMjIwXDIyM1wyMjRcMzc3XDIzMVwyMzRcMjM1XDM3N1wyMzVcMjQwXDI0MSIgXAorICAiXDM3N1wyMjBcMjIzXDIyNFwzNzdcMjA1XDIxMFwyMTJcMzc3ZmpsXDM3N0JISlwzNzdcMjI2LjQ2XDM3N1wxU1hZXDM3NyIgXAorICAiXDM0NFwzNTBcMzU0XDM0MFwzNzdcMlwzMzVcMzM2XDMzNlwzNzcwNjhcMzc3XDIxNS40NlwzNzdcMVwyNzFcMjczXDI3NCIgXAorICAiXDM3N1wyMzVcMzUwXDM1NFwzNDBcMzc3XDFscXJcMzc3XDIxNS40NlwzNzdcMVwyMzFcMjMzXDIzNFwzNzdcMjE1XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFcMjA3XDIxM1wyMTRcMzc3XDIyNC40NlwzNzdcM1BVV1wzNzdcMjM0XDIzN1wyNDBcMzc3XDMyNyIgXAorICAiXDMzMFwzMzBcMzc3XDIxMlwzNTBcMzU0XDM0MFwzNzdcM1wzMzJcMzMzXDMzNFwzNzdcMjM2XDI0MVwyNDJcMzc3UFUiIFwKKyAgIlZcMzc3XDIyNC40NlwzNzdcMXh8fVwzNzdcMjI3XDM1MFwzNTRcMzQwXDM3N1wxW2BhXDM3N1wyMjUuNDZcMzc3XDVLIiBcCisgICJQUlwzNzdcMTc3XDIwM1wyMDRcMzc3XDI0N1wyNTJcMjUzXDM3N1wzMTFcMzEyXDMxM1wzNzdcMzUyXDM1NFwzNDZcMzc3IiBcCisgICJcMjUyXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDI0MVwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxXDIzN1wyNDJcMjQzXDM3N1wyMjQuNDZcMzc3XDNKT1FcMzc3XDIyNlwyMzFcMjMyXDM3N1wzMjBcMzIyXDMyMlwzNzciIFwKKyAgIlwyMTJcMzUwXDM1NFwzNDBcMzc3XDNcMzM2XDMzN1wzMzdcMzc3XDI0MlwyNDVcMjQ2XDM3N1ldX1wzNzdcMjI0LjQ2IiBcCisgICJcMzc3XDFlaWtcMzc3XDM0NFwzNTBcMzU0XDM0MFwzNzdcMX5cMjAxXDIwMlwzNzdcMjE1LjQ2XDM3N1wxT1RWXDM3NyIgXAorICAiXDIzNFwzNTBcMzU0XDM0MFwzNzdcMlwzMjZcMzI3XDMzMFwzNzcvNTdcMzc3XDIxNC40NlwzNzdcMTtBQ1wzNzdcMjE1IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMjcxXDI3M1wyNzRcMzc3XDIyMi40NlwzNzdcMy81N1wzNzdwdHVcMzc3XDMxNFwzMTYiIFwKKyAgIlwzMTZcMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcMlwzMTJcMzEzXDMxNFwzNzdqbnBcMzc3XDIyMy40NlwzNzdcMVwyNTQiIFwKKyAgIlwyNTdcMjU3XDM3N1wyMjVcMzUwXDM1NFwzNDBcMzc3XDF5fH5cMzc3XDIyMi40NlwzNzdcNC81N1wzNzddYWNcMzc3IiBcCisgICJcMjQ3XDI1MlwyNTNcMzc3XDM0NlwzNDdcMzQ3XDM3N1wyNTdcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3IiBcCisgICJcMjE1LjQ2XDM3N1wyNDBcMzUwXDM1NFwzNDBcMzc3XDJcMzE2XDMxN1wzMjBcMzc3MDY4XDM3N1wyMjIuNDZcMzc3XDIiIFwKKyAgImZqbFwzNzdcMzA1XDMwNlwzMDdcMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcM1wzMjNcMzI0XDMyNFwzNzd0eHlcMzc3IiBcCisgICIwNjhcMzc3XDIyMi40NlwzNzdcMVwyMjVcMjMwXDIzMVwzNzdcMzQzXDM1MFwzNTRcMzQwXDM3N1wyXDM0N1wzNTBcMzUwIiBcCisgICJcMzc3NTo8XDM3N1wyMTUuNDZcMzc3XDFcMjU2XDI2MFwyNjFcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMXB0dVwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDFcMjI2XDIzMVwyMzJcMzc3XDIxNFwzNTBcMzU0XDM0MFwzNzdcMlwzNDRcMzQ1XDM0NVwzNzc6IiBcCisgICJAQlwzNzdcMjIxLjQ2XDM3N1wyZ2tsXDM3N1wzMzJcMzMzXDMzNFwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wyXDMyNCIgXAorICAiXDMyNlwzMjZcMzc3XmNlXDM3N1wyMjEuNDZcMzc3XDIiIjY8PlwzNzdcMzM1XDMzNlwzMzdcMzc3XDIyM1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXDIzNVwyNDBcMjQxXDM3N1wyMjEuNDZcMzc3XDMiIjM5O1wzNzdcMTc3XDIwM1wyMDRcMzc3XDM0MSIgXAorICAiXDM0MlwzNDJcMzc3XDI2MlwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMlwzNTBcMzU0XDM0MlwzNzdGS01cMzc3XDIyMS40NlwzNzdcMltgYVwzNzdcMzIxXDMyMlwzMjMiIFwKKyAgIlwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wyXDMzNVwzMzZcMzM3XDM3N2tvcFwzNzdcMjIxLjQ2XDM3N1wyIiIwNjhcMzc3IiBcCisgICJcMzE0XDMxNlwzMTZcMzc3XDM0M1wzNTBcMzU0XDM0MFwzNzdcMVwyMTNcMjE3XDIyMFwzNzdcMjE1LjQ2XDM3N1wxRiIgXAorICAiS01cMzc3XDIzMlwzNTBcMzU0XDM0MFwzNzdcMlwzMzFcMzMyXDMzM1wzNzcvNTdcMzc3XDIxNC40NlwzNzdcMTpAQlwzNzciIFwKKyAgIlwyMTVcMzUwXDM1NFwzNDBcMzc3XDFeY2VcMzc3XDIyMC40NlwzNzdcMjtBQ1wzNzdcMjY1XDI2N1wyNzBcMzc3XDIzMCIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyXDI1MVwyNTNcMjU0XDM3NzU7PVwzNzdcMjIwLjQ2XDM3N1wxWV1fXDM3N1wyMjJcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMlwzMjVcMzI2XDMyN1wzNzcwNjhcMzc3XDIyMC40NlwzNzdcMnB0dVwzNzdcMzQ2XDM0NlwzNDciIFwKKyAgIlwzNzdcMjY0XDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzN1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxdHh6XDM3N1wyMjAuNDZcMzc3XDIiIjY8PlwzNzdcMjUwXDI1M1wyNTNcMzc3XDIzMFwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwyXDI3MFwyNzJcMjcyXDM3NzxCQ1wzNzdcMjIwLjQ2XDM3N1wxR01OXDM3N1wzNDNcMzUwXDM1NFwzNDBcMzc3XDJcMzUwIiBcCisgICJcMzU0XDM0MlwzNzc5XDc3QVwzNzdcMjE1LjQ2XDM3N1wxXDI0NFwyNDdcMjUwXDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMXJ2d1wzNzdcMjE1LjQ2XDM3N1wxXDIyM1wyMjZcMjI3XDM3N1wyMTRcMzUwXDM1NFwzNDBcMzc3XDFcMjYxXDI2MyIgXAorICAiXDI2NFwzNzdcMjIwLjQ2XDM3N1wyWF1eXDM3N1wzNDRcMzQ1XDM0NVwzNzdcMjMyXDM1MFwzNTRcMzQwXDM3N1wyXDMyNyIgXAorICAiXDMzMFwzMzBcMzc3SE1PXDM3N1wyMjAuNDZcMzc3XDFcMjU1XDI1N1wyNjBcMzc3XDIyMVwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxVVlbXDM3N1wyMTcuNDZcMzc3XDI8QkNcMzc3XDI3NFwyNzZcMjc2XDM3N1wyNjZcMzUwXDM1NFwzNDBcMzc3XDFcMzAyIiBcCisgICJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3XDFcMzExXDMxMlwzMTNcMzc3XDIyMC40NiIgXAorICAiXDM3N1wyTFFTXDM3N1wzMzBcMzMyXDMzMlwzNzdcMjMyXDM1MFwzNTRcMzQwXDM3N1wyXDM0MlwzNDNcMzQzXDM3N1MiIFwKKyAgIlhZXDM3N1wyMjAuNDZcMzc3XDFcMjI0XDIzMFwyMzFcMzc3XDM0M1wzNTBcMzU0XDM0MFwzNzdcMVwyMzBcMjMzXDIzNCIgXAorICAiXDM3N1wyMTUuNDZcMzc3XDFARkdcMzc3XDIzMFwzNTBcMzU0XDM0MFwzNzdcMlwzMzJcMzMzXDMzNFwzNzcwNjhcMzc3IiBcCisgICJcMjE0LjQ2XDM3N1wxIiI5PkBcMzc3XDIxNVwzNTBcMzU0XDM0MFwzNzdcMUFGSFwzNzdcMjE3LjQ2XDM3N1wxZ2tsXDM3NyIgXAorICAiXDIzNVwzNTBcMzU0XDM0MFwzNzdcMlwzNTJcMzUzXDM0N1wzNzdPVFZcMzc3XDIxNy40NlwzNzdcMVw3N0VHXDM3N1wyMjAiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwyMzJcMjM1XDIzNlwzNzdcMjE3LjQ2XDM3N1wyTVJUXDM3N1wzNDBcMzQxXDM0MVwzNzciIFwKKyAgIlwyNjdcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjM2XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFPVFZcMzc3XDIxNy40NlwzNzdcMldcXF1cMzc3XDM1MFwzNTRcMzQyXDM3N1wyMzVcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIlxcYWJcMzc3XDIxNy40NlwzNzdcMiIiNTo8XDM3N1wzNDZcMzQ2XDM0N1wzNzdcMzQzXDM1MFwzNTRcMzQwXDM3N1wxIiBcCisgICJBRkhcMzc3XDIxNS40NlwzNzdcMVwyMzBcMjMzXDIzNFwzNzdcMjI3XDM1MFwzNTRcMzQwXDM3N1wxdXl7XDM3N1wyMTUiIFwKKyAgIi40NlwzNzdcMVwyMjBcMjI0XDIyNVwzNzdcMjE0XDM1MFwzNTRcMzQwXDM3N1wxXDIxN1wyMjJcMjIzXDM3N1wyMTcuIiBcCisgICI0NlwzNzdcMWltb1wzNzdcMjM3XDM1MFwzNTRcMzQwXDM3N1wyXDM1MlwzNTRcMzQ2XDM3N0xRUlwzNzdcMjE3LjQ2XDM3NyIgXAorICAiXDFcMjIwXDIyNFwyMjVcMzc3XDIxN1wzNTBcMzU0XDM0MFwzNzdcMSIiOT5AXDM3N1wyMTYuNDZcMzc3XDJPVFZcMzc3IiBcCisgICJcMzUxXDM1NFwzNDNcMzc3XDI3MFwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzUiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwyNDZcMjUxXDI1MlwzNzdcMjE3LjQ2XDM3N1wxW2BhXDM3N1wyNDBcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMVtgYVwzNzdcMjE3LjQ2XDM3N1wxe1wxNzdcMjAwXDM3N1wzNDNcMzUwXDM1NFwzNDBcMzc3XDFcMjQ2XDI1MSIgXAorICAiXDI1MlwzNzdcMjE1LjQ2XDM3N1wyIiI5XDc3QVwzNzdcMzUwXDM1NFwzNDJcMzc3XDIyNVwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwyXDMzNVwzMzZcMzM3XDM3NzA2OFwzNzdcMjE0LjQ2XDM3N1wyIiI4Plw3N1wzNzdcMzUxXDM1NFwzNDNcMzc3XDIxNCIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxIiI5PkBcMzc3XDIxNi40NlwzNzdcMVFWWFwzNzdcMjQxXDM1MFwzNTRcMzQwXDM3N1wyIiBcCisgICJcMzQxXDM0MlwzNDNcMzc3XDc3RUdcMzc3XDIxNi40NlwzNzdcMTtBQ1wzNzdcMjE2XDM1MFwzNTRcMzQwXDM3N1wxXDIyNCIgXAorICAiXDIzMFwyMzFcMzc3XDIxNi40NlwzNzdcMkdMTlwzNzdcMzUwXDM1MVwzNTFcMzc3XDI3MVwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzNVwzNTBcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjE2LjQ2XDM3NyIgXAorICAiXDJFSkxcMzc3XDM1MFwzNTFcMzUxXDM3N1wyNDBcMzUwXDM1NFwzNDBcMzc3XDJcMzUxXDM1NFwzNDNcMzc3Sk9RXDM3NyIgXAorICAiXDIxNi40NlwzNzdcMiIiMTc5XDM3N1wzNDZcMzQ3XDM0N1wzNzdcMzQzXDM1MFwzNTRcMzQwXDM3N1wxSU5QXDM3N1wyMTUiIFwKKyAgIi40NlwzNzdcMVwyMTZcMjIxXDIyMlwzNzdcMjI1XDM1MFwzNTRcMzQwXDM3N1wxeHx9XDM3N1wyMTUuNDZcMzc3XDFcMjE2IiBcCisgICJcMjIxXDIyMlwzNzdcMjE0XDM1MFwzNTRcMzQwXDM3N1wxXDIzMFwyMzNcMjM0XDM3N1wyMTYuNDZcMzc3XDIiIjc9XDc3IiBcCisgICJcMzc3XDMzN1wzNDBcMzQwXDM3N1wyNDJcMzUwXDM1NFwzNDBcMzc3XDJcMzEyXDMxM1wzMTRcMzc3MDY4XDM3N1wyMTYiIFwKKyAgIi40NlwzNzdcMVwyNDJcMjQ0XDI0NVwzNzdcMjE1XDM1MFwzNTRcMzQwXDM3N1wxO0FDXDM3N1wyMTUuNDZcMzc3XDIiIjAiIFwKKyAgIjY4XDM3N1wzMTZcMzE3XDMyMFwzNzdcMjcyXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3IiBcCisgICJcMjM0XDM1MFwzNTRcMzQwXDM3N1wxXDI1N1wyNjFcMjYyXDM3N1wyMTYuNDZcMzc3XDIiIjA2OFwzNzdcMzE3XDMyMCIgXAorICAiXDMyMFwzNzdcMjQyXDM1MFwzNTRcMzQwXDM3N1wyXDMzMFwzMzJcMzMyXDM3NzU6PFwzNzdcMjE2LjQ2XDM3N1wxXDIxMyIgXAorICAiXDIxNlwyMTdcMzc3XDM0M1wzNTBcMzU0XDM0MFwzNzdcMVwyNjRcMjY2XDI2NlwzNzdcMjE1LjQ2XDM3N1wyIiI1Oz0iIFwKKyAgIlwzNzdcMzUwXDM1MlwzNTFcMzc3XDIyM1wzNTBcMzU0XDM0MFwzNzdcMlwzMzdcMzQwXDM0MFwzNzcwNjhcMzc3XDIxNCIgXAorICAiLjQ2XDM3N1wyIiI2PD5cMzc3XDM1MlwzNTRcMzQ2XDM3N1wyMTRcMzUwXDM1NFwzNDBcMzc3XDE+REZcMzc3XDIxNi4iIFwKKyAgIjQ2XDM3N1wxXDI0NlwyNTBcMjUxXDM3N1wyNDRcMzUwXDM1NFwzNDBcMzc3XDFcMjE2XDIyMVwyMjJcMzc3XDIxNi40IiBcCisgICI2XDM3N1wxR0xOXDM3N1wyMTRcMzUwXDM1NFwzNDBcMzc3XDFcMjQ2XDI1MVwyNTJcMzc3XDIxNi40NlwzNzdcMVwyMjMiIFwKKyAgIlwyMjZcMjI3XDM3N1wyNzNcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjM0XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFPVFZcMzc3XDIxNi40NlwzNzdcMVwyMjBcMjIzXDIyNFwzNzdcMjQ0XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMjQ0XDI0N1wyNTBcMzc3XDIxNi40NlwzNzdcMSIiOD5cNzdcMzc3XDM0NFwzNTBcMzU0XDM0MFwzNzdcMVVZW1wzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDFcMjAyXDIwNVwyMDZcMzc3XDIyM1wzNTBcMzU0XDM0MFwzNzdcMXp+XDE3N1wzNzdcMjE1LjQ2IiBcCisgICJcMzc3XDFcMjEzXDIxNlwyMTdcMzc3XDIxNFwzNTBcMzU0XDM0MFwzNzdcMVwyNzFcMjczXDI3NFwzNzdcMjE2LjQ2XDM3NyIgXAorICAiXDFaX2FcMzc3XDI0NlwzNTBcMzU0XDM0MFwzNzdcMUpPUVwzNzdcMjE2LjQ2XDM3N1wxXDMxMFwzMTJcMzEyXDM3N1wyMTMiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVtgYVwzNzdcMjE1LjQ2XDM3N1wxQkhKXDM3N1wyNzRcMzUwXDM1NFwzNDBcMzc3XDFcMzAyIiBcCisgICJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzNcMzUwXDM1NFwzNDBcMzc3XDFcMzIwXDMyMlwzMjJcMzc3XDIxNi40NiIgXAorICAiXDM3N1wxSE1PXDM3N1wyNDZcMzUwXDM1NFwzNDBcMzc3XDFcXGFiXDM3N1wyMTYuNDZcMzc3XDFcMjYwXDI2M1wyNjMiIFwKKyAgIlwzNzdcMzQzXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIiIjE3OVwzNzdcMzQxIiBcCisgICJcMzQyXDM0MlwzNzdcMjIxXDM1MFwzNTRcMzQwXDM3N1wyXDM0MVwzNDJcMzQzXDM3NzE3OVwzNzdcMjE0LjQ2XDM3NyIgXAorICAiXDIiIjU7PVwzNzdcMzUyXDM1M1wzNDdcMzc3XDIxNFwzNTBcMzU0XDM0MFwzNzdcMW5yc1wzNzdcMjE2LjQ2XDM3N1wxIiBcCisgICJcMzE2XDMxN1wzMjBcMzc3XDI0NlwzNTBcMzU0XDM0MFwzNzdcMVwyNzNcMjc1XDI3NlwzNzdcMjE2LjQ2XDM3N1wxfCIgXAorICAiXDIwMFwyMDFcMzc3XDIxMlwzNTBcMzU0XDM0MFwzNzdcMVwzNDFcMzQyXDM0M1wzNzdcMjE2LjQ2XDM3N1wxXDI1M1wyNTUiIFwKKyAgIlwyNTZcMzc3XDI3NFwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzNcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVwyMDRcMjEwXDIxMVwzNzdcMjE2LjQ2XDM3N1wxXDI3MFwyNzJcMjcyXDM3N1wyNDZcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMlwzMjFcMzIyXDMyM1wzNzcvNTdcMzc3XDIxNS40NlwzNzdcMWVpa1wzNzdcMzQ0XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFfZGVcMzc3XDIxNS40NlwzNzdcMXh8fVwzNzdcMjIxXDM1MFwzNTRcMzQwXDM3N1wxflwyMDFcMjAyXDM3N1wyMTUiIFwKKyAgIi40NlwzNzdcMVwyMTBcMjE0XDIxNVwzNzdcMjE0XDM1MFwzNTRcMzQwXDM3N1wyXDM1MFwzNTRcMzQyXDM3NzI4OlwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDFobW5cMzc3XDI1MFwzNTBcMzU0XDM0MFwzNzdcMVhdXlwzNzdcMjE1LjQ2XDM3N1wxIiI5PkBcMzc3IiBcCisgICJcMjEyXDM1MFwzNTRcMzQwXDM3N1wxXDIzMVwyMzRcMjM1XDM3N1wyMTUuNDZcMzc3XDE7QUNcMzc3XDI3NVwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMT1CRFwzNzdcMjE1IiBcCisgICIuNDZcMzc3XDFQVVdcMzc3XDI1MFwzNTBcMzU0XDM0MFwzNzdcMW9zdFwzNzdcMjE1LjQ2XDM3N1wyIiIwNjhcMzc3XDM1MSIgXAorICAiXDM1MlwzNTBcMzc3XDM0M1wzNTBcMzU0XDM0MFwzNzdcMVwzMTZcMzE3XDMyMFwzNzdcMjE1LjQ2XDM3N1wyIiIwNjgiIFwKKyAgIlwzNzdcMzMwXDMzMlwzMzJcMzc3XDIxN1wzNTBcMzU0XDM0MFwzNzdcMlwzNDNcMzQ0XDM0NFwzNzcxNzlcMzc3XDIxNCIgXAorICAiLjQ2XDM3N1wyIiI0OjxcMzc3XDM1MFwzNTJcMzUxXDM3N1wyMTRcMzUwXDM1NFwzNDBcMzc3XDFcMjY1XDI2N1wyNzAiIFwKKyAgIlwzNzdcMjE2LjQ2XDM3N1wxXDMwNVwzMDZcMzA3XDM3N1wyNTBcMzUwXDM1NFwzNDBcMzc3XDFcMjcxXDI3M1wyNzNcMzc3IiBcCisgICJcMjE2LjQ2XDM3N1wxXDMwM1wzMDVcMzA1XDM3N1wyMTFcMzUwXDM1NFwzNDBcMzc3XDFlaWtcMzc3XDIxNS40NlwzNzciIFwKKyAgIlwxXDIwN1wyMTJcMjEzXDM3N1wyNzVcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMyIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMzEzXDMxNFwzMTVcMzc3XDIxNi40NlwzNzdcMVwyNjBcMjYzXDI2M1wzNzdcMjUwXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFcMzE3XDMyMFwzMjBcMzc3XDIxNi40NlwzNzdcMVwyNTRcMjU3XDI1N1wzNzdcMzQ0XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFucnNcMzc3XDIxNS40NlwzNzdcMWtwcVwzNzdcMjE3XDM1MFwzNTRcMzQwXDM3N1wxXDIwMFwyMDRcMjA1IiBcCisgICJcMzc3XDIxNS40NlwzNzdcMVwyMDVcMjEwXDIxMlwzNzdcMjE1XDM1MFwzNTRcMzQwXDM3N1wxXDIwMVwyMDRcMjA2XDM3NyIgXAorICAiXDIxNS40NlwzNzdcMU1SVFwzNzdcMjUyXDM1MFwzNTRcMzQwXDM3N1wxQkhKXDM3N1wyMTUuNDZcMzc3XDFcMjE3XDIyMiIgXAorICAiXDIyM1wzNzdcMjExXDM1MFwzNTRcMzQwXDM3N1wxIiI2PD5cMzc3XDIxNS40NlwzNzdcMVwzMTJcMzEzXDMxNFwzNzciIFwKKyAgIlwyNzVcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMyXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMjI2XDIzMVwyMzJcMzc3XDIxNS40NlwzNzdcMT1CRFwzNzdcMjUyXDM1MFwzNTRcMzQwXDM3N1wxV1xcXVwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDF4fH1cMzc3XDM0NFwzNTBcMzU0XDM0MFwzNzdcMlwzMzNcMzM0XDMzNFwzNzcwNjhcMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wxXDMxN1wzMjBcMzIwXDM3N1wyMTVcMzUwXDM1NFwzNDBcMzc3XDJcMzQ1XDM0NlwzNDZcMzc3Mzk7XDM3NyIgXAorICAiXDIxNC40NlwzNzdcMiIiMzk7XDM3N1wzNDdcMzUwXDM1MFwzNzdcMjE1XDM1MFwzNTRcMzQwXDM3N1wxTFFSXDM3N1wyMTUiIFwKKyAgIi40NlwzNzdcMVwyMjVcMjMwXDIzMVwzNzdcMjUyXDM1MFwzNTRcMzQwXDM3N1wxXDIxMVwyMTRcMjE1XDM3N1wyMTUuIiBcCisgICI0NlwzNzdcMVxcYWJcMzc3XDIxMFwzNTBcMzU0XDM0MFwzNzdcMVwzMjFcMzIyXDMyM1wzNzdcMjE1LjQ2XDM3N1wxOiIgXAorICAiQEJcMzc3XDI3NlwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzJcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMWJnaFwzNzdcMjE1LjQ2XDM3N1wxXDE3N1wyMDNcMjA0XDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM3IiBcCisgICJcMjQyXDI0M1wzNzdcMjE1LjQ2XDM3N1wxRElLXDM3N1wzNDVcMzUwXDM1NFwzNDBcMzc3XDF6flwxNzdcMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wxYmZoXDM3N1wyMTVcMzUwXDM1NFwzNDBcMzc3XDFcMjAzXDIwN1wyMTBcMzc3XDIxNS40NlwzNzdcMVwyMDMiIFwKKyAgIlwyMDdcMjEwXDM3N1wyMTVcMzUwXDM1NFwzNDBcMzc3XDFcMzUyXDM1NFwzNDZcMzc3XDIxNi40NlwzNzdcMVwzMzVcMzM2IiBcCisgICJcMzM2XDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3XDFcMzE2XDMxN1wzMjBcMzc3XDIxNS40NlwzNzdcMSIiMTc5XDM3NyIgXAorICAiXDIxMFwzNTBcMzU0XDM0MFwzNzdcMVwyNDZcMjUxXDI1MlwzNzdcMjE1LjQ2XDM3N1wxaW1vXDM3N1wyNzZcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzJcMzUwXDM1NFwzNDBcMzc3XDEiIjU6PFwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDFcMzA2XDMxMFwzMTFcMzc3XDI1MlwzNTBcMzU0XDM0MFwzNzdcMVwzNDRcMzQ1XDM0NVwzNzdcMjE2IiBcCisgICIuNDZcMzc3XDFcMzQ0XDM0NVwzNDVcMzc3XDI1MlwzNTBcMzU0XDM0MFwzNzdcNVwzMDRcMzM2XDM3M1wzNzdcMjM2XDMxMSIgXAorICAiXDM3MFwzNzdcMjIwXDMwMVwzNjdcMzc3XDIzNFwzMTBcMzcwXDM3N1wyNzNcMzMxXDM3MlwzNzdcMjY1XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDJcMzQ0XDM0NVwzNDVcMzc3Mzk7XDM3N1wyMTUuNDZcMzc3XDFcMzA0XDMwNlwzMDZcMzc3XDIxM1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wyXDM0N1wzNTBcMzUwXDM3NzM5O1wzNzdcMjE0LjQ2XDM3N1wyIiIyODpcMzc3XDM0NVwzNDZcMzQ2IiBcCisgICJcMzc3XDIxNVwzNTBcMzU0XDM0MFwzNzdcMVwzMTNcMzE1XDMxNVwzNzdcMjE1LjQ2XDM3N1wxQEZHXDM3N1wyNTRcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMSIiNjw+XDM3N1wyMTUuNDZcMzc3XDFcMzMxXDMzMlwzMzNcMzc3XDIwN1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxXDIxMlwyMTVcMjE2XDM3N1wyMTUuNDZcMzc3XDFcMjIyXDIyNVwyMjZcMzc3XDI3NlwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzdcMVwzNDFcMzQyXDM0M1wzNzdcMjE1IiBcCisgICIuNDZcMzc3XDEiIjI4OlwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wxSE1PXDM3N1wyMTUuNDZcMzc3XDFcMzAyXDMwNCIgXAorICAiXDMwNVwzNzdcMjUwXDM1MFwzNTRcMzQwXDM3N1wyXDI2MlwzMjRcMzcxXDM3N1tcMjQ0XDM2M1wzNzdcMjA1T1wyMzUiIFwKKyAgIlwzNjJcMzc3XDJVXDI0MFwzNjJcMzc3XDIzNlwzMTFcMzcwXDM3N1wyNjRcMzUwXDM1NFwzNDBcMzc3XDFcMjExXDIxNCIgXAorICAiXDIxNVwzNzdcMjE1LjQ2XDM3N1wxVltdXDM3N1wyMTNcMzUwXDM1NFwzNDBcMzc3XDFcMjA1XDIxMFwyMTJcMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wxXDIwMFwyMDRcMjA1XDM3N1wyMTZcMzUwXDM1NFwzNDBcMzc3XDFcMjUzXDI1NlwyNTdcMzc3XDIxNS4iIFwKKyAgIjQ2XDM3N1wxcXV3XDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFjaGlcMzc3XDIxNS40NlwzNzdcMVwyNzVcMjc3XDI3NyIgXAorICAiXDM3N1wyMDdcMzUwXDM1NFwzNDBcMzc3XDFtcXNcMzc3XDIxNS40NlwzNzdcMVwyNzBcMjcyXDI3MlwzNzdcMjc2XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDQiIFwKKyAgIlwzMDVcMzc3XDIxNS40NlwzNzdcMVtgYVwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wxeX1cMTc3XDM3N1wyMTUuNDZcMzc3IiBcCisgICJcMVwyNDZcMjUwXDI1MVwzNzdcMjQ3XDM1MFwzNTRcMzQwXDM3N1wxXDIxNFwyNzdcMzY2XDM3N1wyMTFPXDIzNVwzNjIiIFwKKyAgIlwzNzdcMXVcMjYyXDM2NVwzNzdcMjYzXDM1MFwzNTRcMzQwXDM3N1wyXDM1MlwzNTRcMzQ1XDM3Nzk+QFwzNzdcMjE1IiBcCisgICIuNDZcMzc3XDFcMjcxXDI3M1wyNzNcMzc3XDIxMVwzNTBcMzU0XDM0MFwzNzdcMlwzNTBcMzUyXDM1MVwzNzc1OjxcMzc3IiBcCisgICJcMjE0LjQ2XDM3N1wyIiIxNzlcMzc3XDM0M1wzNDRcMzQ0XDM3N1wyMTZcMzUwXDM1NFwzNDBcMzc3XDFcMjE3XDIyMiIgXAorICAiXDIyM1wzNzdcMjE1LjQ2XDM3N1wxXDIzMVwyMzNcMjM0XDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMjEyXDIxNVwyMTYiIFwKKyAgIlwzNzdcMjE1LjQ2XDM3N1wxXDIzNVwyNDBcMjQxXDM3N1wyMDdcMzUwXDM1NFwzNDBcMzc3XDFRVlhcMzc3XDIxNS40IiBcCisgICI2XDM3N1wxXDMyMFwzMjJcMzIyXDM3N1wyNzZcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NiIgXAorICAiXDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3XDFcMjQ2XDI1MFwyNTFcMzc3XDIxNS40NlwzNzdcMVwyMDJcMjA1XDIwNlwzNzciIFwKKyAgIlwyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMjM3XDI0MlwyNDNcMzc3XDIxNS40NlwzNzdcMVwyMDdcMjEyXDIxM1wzNzdcMjQ2IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMjM2XDMxMVwzNzBcMzc3XDIxM09cMjM1XDM2MlwzNzdcMVwxNzdcMjcwXDM2NlwzNzciIFwKKyAgIlwyNjNcMzUwXDM1NFwzNDBcMzc3XDFcMjI1XDIzMFwyMzFcMzc3XDIxNS40NlwzNzdcMU9UVlwzNzdcMjExXDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFcMjEwXDIxNFwyMTVcMzc3XDIxNS40NlwzNzdcMX1cMjAwXDIwMlwzNzdcMjE3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDF5fH5cMzc3XDIxNS40NlwzNzdcMVwyNjRcMjY3XDI2N1wzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wxXDI0NiIgXAorICAiXDI1MVwyNTJcMzc3XDIxNS40NlwzNzdcMVwyMDZcMjExXDIxMlwzNzdcMjA3XDM1MFwzNTRcMzQwXDM3N1wxO0FDXDM3NyIgXAorICAiXDIxNS40NlwzNzdcMVwzNDdcMzUwXDM1MFwzNzdcMjc2XDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUiIFwKKyAgIi40NlwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3N1wxXDIxNlwyMjFcMjIyXDM3N1wyMTUuNDZcMzc3XDFcMjM1XDI0MFwyNDEiIFwKKyAgIlwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wxXDI3NFwyNzZcMjc2XDM3N1wyMTUuNDZcMzc3XDFucnNcMzc3XDI0NVwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wyXDM0MlwzNTdcMzc1XDM3N1FcMjM2XDM2MlwzNzdcMjE0T1wyMzVcMzYyXDM3N1wxXDMwNFwzMzYiIFwKKyAgIlwzNzNcMzc3XDI2M1wzNTBcMzU0XDM0MFwzNzdcMT5ERlwzNzdcMjE1LjQ2XDM3N1wxXDI1NlwyNjBcMjYxXDM3N1wyMDciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMlwzNTJcMzUzXDM0N1wzNzc1Oz1cMzc3XDIxNC40NlwzNzdcMiIiMTc5XDM3N1wzNDFcMzQyIiBcCisgICJcMzQyXDM3N1wyMTdcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIxNS40NlwzNzdcMVwzMTNcMzE1XDMxNVwzNzdcMjU0IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMjc2XDMwMFwzMDFcMzc3XDIxNS40NlwzNzdcMXtcMTc3XDIwMFwzNzdcMjA3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDEiIjE3OVwzNzdcMjE1LjQ2XDM3N1wyNzdcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDQiIFwKKyAgIlwzNzdcMjE1LjQ2XDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3XDFcMjA0XDIxMFwyMTFcMzc3XDIxNS40NlwzNzdcMVwyNjciIFwKKyAgIlwyNzFcMjcyXDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMzI2XDMyN1wzMzBcMzc3XDIxNS40NlwzNzdcMWVpa1wzNzciIFwKKyAgIlwyNDVcMzUwXDM1NFwzNDBcMzc3XDFcMjMyXDMwN1wzNzBcMzc3XDIxNU9cMjM1XDM2MlwzNzdcMXpcMjY1XDM2NVwzNzciIFwKKyAgIlwyNjNcMzUwXDM1NFwzNDBcMzc3XDFcMjQzXDI0NlwyNDdcMzc3XDIxNS40NlwzNzdcMUZLTVwzNzdcMjA3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFcMjEzXDIxNlwyMTdcMzc3XDIxNS40NlwzNzdcMXl9XDE3N1wzNzdcMjIwXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFiZ2hcMzc3XDIxNS40NlwzNzdcMVwzMzJcMzMzXDMzNFwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wxXDMxNFwzMTYiIFwKKyAgIlwzMTZcMzc3XDIxNS40NlwzNzdcMXF1d1wzNzdcMjA3XDM1MFwzNTRcMzQwXDM3N1wyMTYuNDZcMzc3XDI3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzdcMXl8flwzNzdcMjE1IiBcCisgICIuNDZcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMVwzNDFcMzQyXDM0M1wzNzdcMjE1LiIgXAorICAiNDZcMzc3XDFbYGFcMzc3XDI0NVwzNTBcMzU0XDM0MFwzNzdcMWlcMjU0XDM2NFwzNzdcMjE1T1wyMzVcMzYyXDM3N1wxIiBcCisgICJRXDIzNlwzNjJcMzc3XDI2NFwzNTBcMzU0XDM0MFwzNzdcMUdNTlwzNzdcMjE1LjQ2XDM3N1wxXDI0M1wyNDZcMjQ3XDM3NyIgXAorICAiXDIwNVwzNTBcMzU0XDM0MFwzNzdcMlwzNTJcMzU0XDM0NlwzNzc2PD5cMzc3XDIxNC40NlwzNzdcMiIiMDY4XDM3N1wzMzciIFwKKyAgIlwzNDBcMzQwXDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDFZXmBcMzc3XDIxNS40NlwzNzdcMVwzNDFcMzQyXDM0M1wzNzciIFwKKyAgIlwyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMzI0XDMyNlwzMjZcMzc3XDIxNS40NlwzNzdcMWhtblwzNzdcMjA3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDIxNS40NlwzNzdcMSIiOD5cNzdcMzc3XDI3N1wzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzdcMXB0dVwzNzdcMjE1LjQ2XDM3N1wxXDMxNFwzMTZcMzE2XDM3NyIgXAorICAiXDI1NFwzNTBcMzU0XDM0MFwzNzdcMVwzNTFcMzUyXDM1MFwzNzdcMjE1LjQ2XDM3N1wxUVZYXDM3N1wyNDVcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVVcMjQwXDM2MlwzNzdcMjE2T1wyMzVcMzYyXDM3N1wxXDM0NFwzNjBcMzc1XDM3N1wyNjNcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVwyNjBcMjYzXDI2M1wzNzdcMjE1LjQ2XDM3N1wxQEZHXDM3N1wyMDVcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIlwyMTZcMjIxXDIyMlwzNzdcMjE1LjQ2XDM3N1wxd3t8XDM3N1wyMjFcMzUwXDM1NFwzNDBcMzc3XDFZXV9cMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wxXDM0MlwzNDNcMzQzXDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMzI1XDMyNlwzMjdcMzc3XDIxNS4iIFwKKyAgIjQ2XDM3N1wxZ2xtXDM3N1wyMDZcMzUwXDM1NFwzNDBcMzc3XDFcMzUxXDM1MlwzNTBcMzc3XDIxNS40NlwzNzdcMSIiNSIgXAorICAiOz1cMzc3XDI3N1wzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzFcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMXB0dVwzNzdcMjE1LjQ2XDM3N1wxXDMxNVwzMTZcMzE3XDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMzUyIiBcCisgICJcMzUzXDM0N1wzNzdcMjE1LjQ2XDM3N1wxUVZYXDM3N1wyNDVcMzUwXDM1NFwzNDBcMzc3XDFVXDI0MFwzNjJcMzc3XDIxNiIgXAorICAiT1wyMzVcMzYyXDM3N1wxXDM0NVwzNjFcMzc1XDM3N1wyNjRcMzUwXDM1NFwzNDBcMzc3XDFQVVdcMzc3XDIxNS40NlwzNzciIFwKKyAgIlwxXDIzMFwyMzNcMjM0XDM3N1wyMDNcMzUwXDM1NFwzNDBcMzc3XDJcMzUxXDM1NFwzNDNcMzc3OD5cNzdcMzc3XDIxNCIgXAorICAiLjQ2XDM3N1wyIiIwNjhcMzc3XDMzNVwzMzZcMzM2XDM3N1wyMjFcMzUwXDM1NFwzNDBcMzc3XDFiZmhcMzc3XDIxNS4iIFwKKyAgIjQ2XDM3N1wxXDMzMlwzMzNcMzM0XDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMzE0XDMxNlwzMTZcMzc3XDIxNS40IiBcCisgICI2XDM3N1wxcXV3XDM3N1wyMDdcMzUwXDM1NFwzNDBcMzc3XDIxNi40NlwzNzdcMjc3XDM1MFwzNTRcMzQwXDM3N1wxXDMwMiIgXAorICAiXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3N1wxeHx9XDM3N1wyMTUuNDZcMzc3XDFcMzAyIiBcCisgICJcMzAzXDMwNFwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wxXDM0MVwzNDJcMzQzXDM3N1wyMTUuNDZcMzc3XDFaX2FcMzc3IiBcCisgICJcMjQ1XDM1MFwzNTRcMzQwXDM3N1wxbFwyNTVcMzY0XDM3N1wyMTVPXDIzNVwzNjJcMzc3XDFSXDIzN1wzNjJcMzc3XDI2NSIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDI3NVwyNzdcMzAwXDM3N1wyMTUuNDZcMzc3XDIiIjlcNzdBXDM3N1wzNTBcMzU0XDM0MiIgXAorICAiXDM3N1wyMDJcMzUwXDM1NFwzNDBcMzc3XDFcMjIwXDIyNFwyMjVcMzc3XDIxNS40NlwzNzdcMXR4elwzNzdcMjIyXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIxNS40NlwzNzdcMVwzMTRcMzE2XDMxNlwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMjc3XDMwMVwzMDJcMzc3XDIxNS40NlwzNzdcMXp+XDE3N1wzNzdcMjA3XDM1MFwzNTRcMzQwXDM3N1wyMTYuNDYiIFwKKyAgIlwzNzdcMVwzNTJcMzU0XDM0NVwzNzdcMjc2XDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3IiBcCisgICJcMjMxXDM1MFwzNTRcMzQwXDM3N1wxXDIwNFwyMTBcMjExXDM3N1wyMTUuNDZcMzc3XDFcMjcxXDI3M1wyNzNcMzc3XDI1NCIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDMyN1wzMzBcMzMwXDM3N1wyMTUuNDZcMzc3XDFkaWpcMzc3XDI0NVwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxXDIzNlwzMTFcMzcwXDM3N1wyMTVPXDIzNVwzNjJcMzc3XDFcMTc3XDI3MFwzNjZcMzc3XDI2NlwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXWFjXDM3N1wyMTUuNDZcMzc3XDRcMjE1XDIyMFwyMjFcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNTBcMzU0IiBcCisgICJcMzQyXDM3Nzk+QFwzNzdcMjE0LjQ2XDM3N1wyLzU3XDM3N1wzMzJcMzMzXDMzNFwzNzdcMjIyXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDF3e3xcMzc3XDIxNS40NlwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wxXDI1MFwyNTMiIFwKKyAgIlwyNTNcMzc3XDIxNS40NlwzNzdcMVwyMDVcMjEwXDIxMlwzNzdcMjA3XDM1MFwzNTRcMzQwXDM3N1wxIiIwNjhcMzc3IiBcCisgICJcMjE1LjQ2XDM3N1wxXDM0MVwzNDJcMzQyXDM3N1wyNzZcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3XDFcMjE1XDIyMFwyMjFcMzc3XDIxNS40NlwzNzdcMVwyMzdcMjQyXDI0MyIgXAorICAiXDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMjc2XDMwMFwzMDFcMzc3XDIxNS40NlwzNzdcMW1xc1wzNzdcMjQ1XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDJcMzUwXDM2MlwzNzVcMzc3U1wyMzdcMzYyXDM3N1wyMTRPXDIzNVwzNjJcMzc3XDFcMzE1XDM0MyIgXAorICAiXDM3M1wzNzdcMjY2XDM1MFwzNTRcMzQwXDM3N1wxXDMxM1wzMTVcMzE1XDM3N1wyMTUuNDZcMzc3XDMiIjU7PVwzNzciIFwKKyAgIlwzNTBcMzUyXDM1MVwzNzdcMjIzXDIyNlwyMjdcMzc3XDIxNS40NlwzNzdcMXF1d1wzNzdcMjIzXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcMjE2XDIyMVwyMjJcMzc3XDIxNS40NlwzNzdcMVwyMzFcMjM0XDIzNVwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMjE0XDIyMFwyMjFcMzc3XDIxNS40NlwzNzdcMVwyMzRcMjM3XDI0MFwzNzdcMjA3XDM1MFwzNTRcMzQwXDM3N1wxIiBcCisgICJBRkhcMzc3XDIxNS40NlwzNzdcMVwzMjFcMzIyXDMyM1wzNzdcMjc2XDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0IiBcCisgICJcMzc3XDIxNS40NlwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3N1wxXDI0NFwyNDdcMjUwXDM3N1wyMTUuNDZcMzc3XDFcMjAzIiBcCisgICJcMjA3XDIxMFwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wxXDI0MVwyNDNcMjQ0XDM3N1wyMTUuNDZcMzc3XDFcMjA1XDIxMCIgXAorICAiXDIxMlwzNzdcMjQ2XDM1MFwzNTRcMzQwXDM3N1wxXDI1M1wzMjBcMzcxXDM3N1wyMTNPXDIzNVwzNjJcMzc3XDFcMjE0IiBcCisgICJcMjc3XDM2NlwzNzdcMjcwXDM1MFwzNTRcMzQwXDM3N1wxaW1vXDM3N1wyMTUuNDZcMzc3XDJ1eXtcMzc3OkBCXDM3NyIgXAorICAiXDIxNC40NlwzNzdcMi81N1wzNzdcMzMwXDMzMlwzMzJcMzc3XDIyM1wzNTBcMzU0XDM0MFwzNzdcMVwyNTJcMjU0XDI1NSIgXAorICAiXDM3N1wyMTUuNDZcMzc3XDF0eHlcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMWdrbFwzNzdcMjE1LjQ2XDM3N1wxXDI3MiIgXAorICAiXDI3NFwyNzVcMzc3XDIwN1wzNTBcMzU0XDM0MFwzNzdcMVdcXF1cMzc3XDIxNS40NlwzNzdcMVwyNTFcMjUzXDI1NFwzNzciIFwKKyAgIlwyNzZcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMzAxXDMwMlwzMDNcMzc3XDIxNS40NlwzNzdcMV5jZVwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wxfVwyMDBcMjAyIiBcCisgICJcMzc3XDIxNS40NlwzNzdcMVwyNDNcMjQ2XDI0N1wzNzdcMjQ3XDM1MFwzNTRcMzQwXDM3N1wxXDIzMVwzMDZcMzY3XDM3NyIgXAorICAiXDIxMU9cMjM1XDM2MlwzNzdcMVwyMDBcMjcwXDM2NlwzNzdcMjcxXDM1MFwzNTRcMzQwXDM3N1wyXDMyN1wzMzBcMzMwIiBcCisgICJcMzc3MDY4XDM3N1wyMzIuNDZcMzc3XDFucnNcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMVwzMTFcMzEyXDMxM1wzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDFDSUpcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMSIiOD5cNzdcMzc3XDIxNS40NlwzNzdcMVwzMzAiIFwKKyAgIlwzMzFcMzMxXDM3N1wyMDdcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIxNS40NlwzNzdcMVwxNzdcMjAzXDIwNFwzNzciIFwKKyAgIlwyNzZcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMzM3XDM0MFwzNDBcMzc3XDIxNS40NlwzNzdcMSIiNDo8XDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFMUVJcMzc3IiBcCisgICJcMjE1LjQ2XDM3N1wxXDMwMVwzMDJcMzAzXDM3N1wyNTBcMzUwXDM1NFwzNDBcMzc3XDJcMzAzXDMzNlwzNzNcMzc3ZCIgXAorICAiXDI1MVwzNjRcMzc3XDIwNU9cMjM1XDM2MlwzNzdcMlpcMjQzXDM2M1wzNzdcMjYwXDMyM1wzNzFcMzc3XDI3M1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxeHx9XDM3N1wyMzEuNDZcMzc3XDIvNTdcMzc3XDMyNVwzMjZcMzI3XDM3N1wyMjRcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVwzNTFcMzUyXDM1MFwzNzdcMjE2LjQ2XDM3N1wxXDM0MFwzNDFcMzQxXDM3N1wyNTJcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMVwzMjFcMzIyXDMyM1wzNzdcMjE1LjQ2XDM3N1wxIiIwNjhcMzc3XDIxMFwzNTBcMzU0XDM0MFwzNzdcMVwyMTMiIFwKKyAgIlwyMTdcMjIwXDM3N1wyMTUuNDZcMzc3XDFWW11cMzc3XDI3NlwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDIzMlwzNTBcMzU0XDM0MFwzNzdcMSIiMzk7XDM3N1wyMTUuNDZcMzc3XDFcMzEyXDMxM1wzMTRcMzc3IiBcCisgICJcMjUyXDM1MFwzNTRcMzQwXDM3N1wxXDM1MFwzNTFcMzUxXDM3N1wyMTYuNDZcMzc3XDFcMzQxXDM0MlwzNDJcMzc3XDI1MiIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1w1XDMyM1wzNDZcMzc0XDM3N1wyNTVcMzIxXDM3MVwzNzdcMjM2XDMxMVwzNzBcMzc3XDI1MSIgXAorICAiXDMxN1wzNzFcMzc3XDMxM1wzNDJcMzczXDM3N1wyNzVcMzUwXDM1NFwzNDBcMzc3XDJcMzQyXDM0M1wzNDNcMzc3MjgiIFwKKyAgIjpcMzc3XDIzMC40NlwzNzdcMWtwcVwzNzdcMjI2XDM1MFwzNTRcMzQwXDM3N1wxSU5QXDM3N1wyMTUuNDZcMzc3XDFcMjMyIiBcCisgICJcMjM1XDIzNlwzNzdcMjUyXDM1MFwzNTRcMzQwXDM3N1wxXDIxNFwyMjBcMjIxXDM3N1wyMTUuNDZcMzc3XDFYXV5cMzc3IiBcCisgICJcMjEwXDM1MFwzNTRcMzQwXDM3N1wxXDI2MVwyNjNcMjY0XDM3N1wyMTUuNDZcMzc3XDEiIjE3OVwzNzdcMjc2XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMyXDM1MFwzNTRcMzQwXDM3N1wxX2RlXDM3NyIgXAorICAiXDIxNS40NlwzNzdcMVwyMDRcMjEwXDIxMVwzNzdcMjUyXDM1MFwzNTRcMzQwXDM3N1wxXDI0M1wyNDZcMjQ3XDM3N1wyMTUiIFwKKyAgIi40NlwzNzdcMUJHSVwzNzdcMzU2XDM1MFwzNTRcMzQwXDM3N1wxXDIwNFwyMTBcMjExXDM3N1wyMzAuNDZcMzc3XDFcMzIzIiBcCisgICJcMzI0XDMyNFwzNzdcMjI2XDM1MFwzNTRcMzQwXDM3N1wxfVwyMDBcMjAyXDM3N1wyMTUuNDZcMzc3XDFRVlhcMzc3XDI1MiIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMTUuNDZcMzc3XDFcMjE0XDIyMFwyMjFcMzc3XDIxMFwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxXDMzMFwzMzFcMzMxXDM3N1wyMTYuNDZcMzc3XDFcMjUzXDI1NlwyNTdcMzc3XDI3NVwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzMlwzNTBcMzU0XDM0MFwzNzdcMVwyMjRcMjI3XDIzMFwzNzdcMjE1IiBcCisgICIuNDZcMzc3XDFcNzdFR1wzNzdcMjUyXDM1MFwzNTRcMzQwXDM3N1wxW2BhXDM3N1wyMTUuNDZcMzc3XDF0eHpcMzc3XDM1NiIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyXDM1MlwzNTNcMzQ3XDM3NzY8PlwzNzdcMjI2LjQ2XDM3N1wxaW1vXDM3N1wyMjdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMVwyNjJcMjY0XDI2NVwzNzdcMjE2LjQ2XDM3N1wxXDMxM1wzMTRcMzE1XDM3N1wyNTBcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVwyNzZcMzAwXDMwMVwzNzdcMjE2LjQ2XDM3N1wxXDMwMFwzMDJcMzAyXDM3N1wyMTFcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMTtBQ1wzNzdcMjE1LjQ2XDM3N1wxX2RlXDM3N1wyNzVcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3IiBcCisgICJcMjE1LjQ2XDM3N1wyMzJcMzUwXDM1NFwzNDBcMzc3XDFcMzA2XDMxMFwzMTFcMzc3XDIxNi40NlwzNzdcMVwyNjVcMjY3IiBcCisgICJcMjcwXDM3N1wyNTBcMzUwXDM1NFwzNDBcMzc3XDFcMzI0XDMyNVwzMjVcMzc3XDIxNi40NlwzNzdcMVwyNTFcMjUzXDI1NCIgXAorICAiXDM3N1wzNTdcMzUwXDM1NFwzNDBcMzc3XDFcMjIzXDIyNlwyMjdcMzc3XDIyNi40NlwzNzdcMVwzMjBcMzIyXDMyMlwzNzciIFwKKyAgIlwyMjdcMzUwXDM1NFwzNDBcMzc3XDJcMzUyXDM1NFwzNTBcMzc3MTc5XDM3N1wyMTUuNDZcMzc3XDFvc3RcMzc3XDI1MCIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXWFjXDM3N1wyMTUuNDZcMzc3XDEiIjY8PlwzNzdcMjEyXDM1MFwzNTRcMzQwXDM3N1wxIiBcCisgICJtcXNcMzc3XDIxNS40NlwzNzdcMi81N1wzNzdcMzQxXDM0MlwzNDNcMzc3XDI3NFwzNTBcMzU0XDM0MFwzNzdcMVwzMDIiIFwKKyAgIlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMSIiOVw3N0FcMzc3XDIxNS40NlwzNzdcMSIgXAorICAiVltdXDM3N1wyNTBcMzUwXDM1NFwzNDBcMzc3XDF0eHpcMzc3XDIxNS40NlwzNzdcMi81N1wzNzdcMzQ2XDM0NlwzNDciIFwKKyAgIlwzNzdcMzYwXDM1MFwzNTRcMzQwXDM3N1wxPUJEXDM3N1wyMjQuNDZcMzc3XDFmamxcMzc3XDIzMVwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxaW1vXDM3N1wyMTUuNDZcMzc3XDIvNTdcMzc3XDMyNFwzMjVcMzI1XDM3N1wyNDZcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVwzMDNcMzA1XDMwNVwzNzdcMjE2LjQ2XDM3N1wxeHx9XDM3N1wyMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjQ2XDI1MSIgXAorICAiXDI1MlwzNzdcMjE2LjQ2XDM3N1wxeX1cMTc3XDM3N1wyNzRcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3IiBcCisgICJcMjE1LjQ2XDM3N1wyMzNcMzUwXDM1NFwzNDBcMzc3XDFcMjAwXDIwNFwyMDVcMzc3XDIxNi40NlwzNzdcMVwyNzZcMzAwIiBcCisgICJcMzAxXDM3N1wyNDZcMzUwXDM1NFwzNDBcMzc3XDJcMzMwXDMzMVwzMzFcMzc3MDY4XDM3N1wyMTUuNDZcMzc3XDFgZSIgXAorICAiZlwzNzdcMzYxXDM1MFwzNTRcMzQwXDM3N1wxXDIzN1wyNDJcMjQzXDM3N1wyMjQuNDZcMzc3XDFcMzE2XDMxN1wzMjAiIFwKKyAgIlwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3N1wxXDI2NFwyNjdcMjY3XDM3N1wyMTYuNDZcMzc3XDFhZWdcMzc3XDI0NlwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxT1RWXDM3N1wyMTYuNDZcMzc3XDFcMzAzXDMwNVwzMDVcMzc3XDIxMlwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwyXDM1MVwzNTJcMzUwXDM3NzA2OFwzNzdcMjE1LjQ2XDM3N1wyLzU3XDM3N1wzMjNcMzI0XDMyNFwzNzdcMjczXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wxXDMxM1wzMTUiIFwKKyAgIlwzMTVcMzc3XDIxNi40NlwzNzdcMU5TVVwzNzdcMjQ2XDM1MFwzNTRcMzQwXDM3N1wxY2hpXDM3N1wyMTYuNDZcMzc3IiBcCisgICJcMVwyNTNcMjU2XDI1N1wzNzdcMzYyXDM1MFwzNTRcMzQwXDM3N1wxRElLXDM3N1wyMjIuNDZcMzc3XDFjaGlcMzc3XDIzMyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxO0FDXDM3N1wyMTYuNDZcMzc3XDFcMjU3XDI2MlwyNjNcMzc3XDI0NFwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxXDIzMFwyMzNcMjM0XDM3N1wyMTYuNDZcMzc3XDFCSEpcMzc3XDIxNFwzNTBcMzU0XDM0MFwzNzdcMWFlZ1wzNzciIFwKKyAgIlwyMTYuNDZcMzc3XDFdYWNcMzc3XDI3M1wzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3NyIgXAorICAiXDIzNFwzNTBcMzU0XDM0MFwzNzdcMUpPUVwzNzdcMjE2LjQ2XDM3N1wxXDIzMVwyMzNcMjM0XDM3N1wyNDRcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVwyNTZcMjYwXDI2MVwzNzdcMjE2LjQ2XDM3N1wxIiI1Oz1cMzc3XDM2M1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxXDI1NlwyNjBcMjYxXDM3N1wyMjIuNDZcMzc3XDFcMzEzXDMxNFwzMTVcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMSIgXAorICAiXDIyNFwyMjdcMjMwXDM3N1wyMTYuNDZcMzc3XDI6QEJcMzc3XDM0NlwzNDZcMzQ3XDM3N1wyNDJcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMlwzMjJcMzIzXDMyNFwzNzcxNzlcMzc3XDIxNi40NlwzNzdcMVwyMzVcMjQwXDI0MVwzNzdcMjE0XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFcMjYyXDI2NFwyNjVcMzc3XDIxNy40NlwzNzdcMVwyMjBcMjIzXDIyNFwzNzdcMjcyXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjM0XDM1MFwzNTRcMzQwXDM3N1wxXDI1MlwyNTRcMjU1XDM3NyIgXAorICAiXDIxNi40NlwzNzdcMiIiMzk7XDM3N1wzMjZcMzI3XDMzMFwzNzdcMjQyXDM1MFwzNTRcMzQwXDM3N1wyXDM0MFwzNDEiIFwKKyAgIlwzNDFcMzc3OD5cNzdcMzc3XDIxNi40NlwzNzdcMVwyMDdcMjEyXDIxM1wzNzdcMzY0XDM1MFwzNTRcMzQwXDM3N1wxIiBcCisgICJPVFZcMzc3XDIyMC40NlwzNzdcMWBlZlwzNzdcMjM0XDM1MFwzNTRcMzQwXDM3N1wyXDM1MFwzNTRcMzQyXDM3Nzg+XDc3IiBcCisgICJcMzc3XDIxNi40NlwzNzdcMVldX1wzNzdcMjQxXDM1MFwzNTRcMzQwXDM3N1wyXDM1MFwzNTFcMzUxXDM3N0VKTFwzNzciIFwKKyAgIlwyMTYuNDZcMzc3XDE7QUNcMzc3XDIxNlwzNTBcMzU0XDM0MFwzNzdcMUJISlwzNzdcMjE2LjQ2XDM3N1wyLzU3XDM3NyIgXAorICAiXDI2NFwyNjdcMjY3XDM3N1wyNzFcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjM1IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFFSkxcMzc3XDIxNi40NlwzNzdcMktQUlwzNzdcMzUxXDM1NFwzNDNcMzc3XDI0MVwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxTlNVXDM3N1wyMTYuNDZcMzc3XDIiIjE3OVwzNzdcMzQ2XDM0NlwzNDdcMzc3XDM2NFwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXDI3MlwyNzRcMjc1XDM3N1wyMjAuNDZcMzc3XDFcMzA3XDMxMVwzMTFcMzc3XDIzNVwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxXDIyMFwyMjNcMjI0XDM3N1wyMTcuNDZcMzc3XDFzd3hcMzc3XDI0MFwzNTBcMzU0XDM0MFwzNzdcMVNYWVwzNzciIFwKKyAgIlwyMTcuNDZcMzc3XDFcMjIwXDIyNFwyMjVcMzc3XDIxNlwzNTBcMzU0XDM0MFwzNzdcMVwyMzNcMjM2XDIzN1wzNzdcMjE3IiBcCisgICIuNDZcMzc3XDIiIjY8PlwzNzdcMzAxXDMwMlwzMDNcMzc3XDI3MFwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNCIgXAorICAiXDM3N1wyMTUuNDZcMzc3XDFcMzUyXDM1NFwzNTBcMzc3XDIzNFwzNTBcMzU0XDM0MFwzNzdcMVwyNDZcMjUxXDI1MlwzNzciIFwKKyAgIlwyMTcuNDZcMzc3XDFiZmhcMzc3XDI0MFwzNTBcMzU0XDM0MFwzNzdcMWNoaVwzNzdcMjE3LjQ2XDM3N1wxen5cMTc3IiBcCisgICJcMzc3XDM2NlwzNTBcMzU0XDM0MFwzNzdcMVldX1wzNzdcMjE2LjQ2XDM3N1wxXmNlXDM3N1wyMzdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMUJHSVwzNzdcMjE3LjQ2XDM3N1wxbHFyXDM3N1wyMzVcMzUwXDM1NFwzNDBcMzc3XDJcMzUyXDM1NFwzNTBcMzc3IiBcCisgICJTWFlcMzc3XDIxNy40NlwzNzdcMUJHSVwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wxQEZHXDM3N1wyMTcuNDZcMzc3XDIiIFwKKyAgIjA2OFwzNzdcMjQ2XDI1MVwyNTJcMzc3XDI2N1wzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2IiBcCisgICJcMzc3XDFcMzM1XDMzNlwzMzdcMzc3XDIzNVwzNTBcMzU0XDM0MFwzNzdcMVFWWFwzNzdcMjE3LjQ2XDM3N1wxXFxhYiIgXAorICAiXDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3XDFfZGVcMzc3XDIxNy40NlwzNzdcMiIiNjw+XDM3N1wzNDZcMzQ3XDM0N1wzNzciIFwKKyAgIlwzNjZcMzUwXDM1NFwzNDBcMzc3XDFcMzExXDMxMlwzMTNcMzc3XDIxNi40NlwzNzdcMVwzMDRcMzA2XDMwNlwzNzdcMjM3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMjY1XDI2N1wyNzBcMzc3XDIyMC40NlwzNzdcMldcXF1cMzc3XDM0NFwzNDVcMzQ1XDM3NyIgXAorICAiXDIzMlwzNTBcMzU0XDM0MFwzNzdcMlwzMjZcMzI3XDMzMFwzNzdITU9cMzc3XDIyMC40NlwzNzdcMVwyNjFcMjYzXDI2NCIgXAorICAiXDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDFcMjQ3XDI1MlwyNTNcMzc3XDIyMS40NlwzNzdcMVwyMDJcMjA2XDIwN1wzNzciIFwKKyAgIlwyNDJcMzUwXDM1NFwzNDBcMzc3XDJcMjY0XDI2N1wyNjdcMzc3XDI3NlwzMDBcMzAxXDM3N1wyMjJcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMVwzMTBcMzEyXDMxMlwzNzdcMjE1LjQ2XDM3N1wxXDI2N1wyNzFcMjcyXDM3N1wyMzVcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMlwzMTRcMzE2XDMxNlwzNzcvNTdcMzc3XDIxNy40NlwzNzdcMkxRU1wzNzdcMzMwXDMzMVwzMzFcMzc3XDIzMlwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wyXDM0MVwzNDJcMzQyXDM3N1NYWVwzNzdcMjIwLjQ2XDM3N1wxXDIzMVwyMzNcMjM0XDM3N1wzNjciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMlwzNDFcMzQyXDM0M1wzNzcwNjhcMzc3XDIxNC40NlwzNzdcMVtgYVwzNzdcMjQxXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFlaWtcMzc3XDIyMC40NlwzNzdcMjtBQ1wzNzdcMjYzXDI2NVwyNjZcMzc3XDIzMFwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wyXDI0NlwyNTFcMjUyXDM3NzU6PFwzNzdcMjIwLjQ2XDM3N1wxXWFjXDM3N1wyMjJcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMVldX1wzNzdcMjIxLjQ2XDM3N1wyQkhKXDM3N1wyNjRcMjY3XDI2N1wzNzdcMjM1XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDVcMzMxXDMzMlwzMzNcMzc3XDIwN1wyMTNcMjE0XDM3Nz1CRFwzNzcuNDZcMzc3RktNXDM3N1wyMjJcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMVwzMjdcMzMwXDMzMFwzNzdcMjE1LjQ2XDM3N1wxdXl7XDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDFcMzUwIiBcCisgICJcMzU0XDM0MlwzNzdcMjE1XDM1MFwzNTRcMzQwXDM3N1wxfFwyMDBcMjAxXDM3N1wyMjAuNDZcMzc3XDIiIjU6PFwzNzciIFwKKyAgIlwyNDVcMjQ3XDI1MFwzNzdcMjMwXDM1MFwzNTRcMzQwXDM3N1wyXDI2NVwyNjdcMjcwXDM3NztBQ1wzNzdcMjIwLjQ2IiBcCisgICJcMzc3XDFLUFJcMzc3XDM3MFwzNTBcMzU0XDM0MFwzNzdcMVwyMDVcMjEwXDIxMlwzNzdcMjE1LjQ2XDM3N1wxXDMwMiIgXAorICAiXDMwM1wzMDRcMzc3XDI0MVwzNTBcMzU0XDM0MFwzNzdcMlwzNTBcMzUxXDM1MVwzNzc+REZcMzc3XDIyMS40NlwzNzciIFwKKyAgIlwyZmpsXDM3N1wzMzVcMzM2XDMzNlwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wyXDMyN1wzMzBcMzMwXDM3N15iZFwzNzciIFwKKyAgIlwyMjEuNDZcMzc3XDIiIjlcNzdBXDM3N1wzNDJcMzQzXDM0M1wzNzdcMjIyXDM1MFwzNTRcMzQwXDM3N1wyXDMzMlwzMzMiIFwKKyAgIlwzMzRcMzc3Mzk7XDM3N1wyMjIuNDZcMzc3XDJXXFxdXDM3N1wyNTdcMjYyXDI2M1wzNzdcMjMwXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDNcMzIwXDMyMlwzMjJcMzc3XDIxN1wyMjJcMjIzXDM3N01SVFwzNzdcMjA1LjQ2XDM3N1wxXDI0NlwyNTBcMjUxIiBcCisgICJcMzc3XDIyMVwzNTBcMzU0XDM0MFwzNzdcMVwzNDdcMzUwXDM1MFwzNzdcMjE1LjQ2XDM3N1wyIiIxNzlcMzc3XDMyNCIgXAorICAiXDMyNlwzMjZcMzc3XDIxNVwzNTBcMzU0XDM0MFwzNzdcM1wyMzVcMjQwXDI0MVwzNzdDSUpcMzc3dHh6XDM3N1wyMTYiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMUtQUlwzNzdcMjIxLjQ2XDM3N1wyW2BhXDM3N1wzMjRcMzI1XDMyNVwzNzdcMjI0XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDJcMzQxXDM0MlwzNDJcMzc3a29wXDM3N1wyMjEuNDZcMzc3XDIiIjM5O1wzNzdcMzIzXDMyNFwzMjQiIFwKKyAgIlwzNzdcMzY3XDM1MFwzNTRcMzQwXDM3N1wyXDM1MFwzNTRcMzQyXDM3NzU7PVwzNzdcMjE0LjQ2XDM3N1wxWV1fXDM3NyIgXAorICAiXDI0M1wzNTBcMzU0XDM0MFwzNzdcMlwzMDNcMzA1XDMwNVwzNzcvNTdcMzc3XDIyMS40NlwzNzdcMyIiMDY4XDM3N3siIFwKKyAgIlwxNzdcMjAwXDM3N1wzMzJcMzMzXDMzNFwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wzXDMyNVwzMjZcMzI3XDM3N3R4IiBcCisgICJ6XDM3Ny81N1wzNzdcMjIyLjQ2XDM3N1wxXDI3MFwyNzJcMjcyXDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFcMjQ0XDI0NyIgXAorICAiXDI1MFwzNzdcMjI0LjQ2XDM3N1wzPkRGXDM3N1wyMDZcMjExXDIxMlwzNzdcMjc3XDMwMVwzMDJcMzc3XDIyMVwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1w0XDMyNVwzMjZcMzI3XDM3N1wyNDVcMjQ3XDI1MFwzNzd0eHlcMzc3QkdJXDM3N1wyMTAuNDZcMzc3IiBcCisgICJcMUJHSVwzNzdcMjIyXDM1MFwzNTRcMzQwXDM3N1wxLzU3XDM3N1wyMTUuNDZcMzc3XDJDSUpcMzc3XDMzMFwzMzJcMzMyIiBcCisgICJcMzc3XDIxMVwzNTBcMzU0XDM0MFwzNzdcM1wzMDJcMzA0XDMwNVwzNzd8XDIwMFwyMDFcMzc3Nz1cNzdcMzc3XDIwMiIgXAorICAiLjQ2XDM3N1wyIiIwNjhcMzc3XDMzMlwzMzNcMzM0XDM3N1wyMTVcMzUwXDM1NFwzNDBcMzc3XDJcMzI2XDMyN1wzMzAiIFwKKyAgIlwzNzc0OjxcMzc3XDIyMS40NlwzNzdcMy81N1wzNzdwdHZcMzc3XDMyMFwzMjJcMzIyXDM3N1wyMjBcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcM1wzMzZcMzM3XDMzN1wzNzdcMjAxXDIwNFwyMDZcMzc3MTc5XDM3N1wyMjIuNDZcMzc3XDFcMjM3XDI0MlwyNDMiIFwKKyAgIlwzNzdcMzcwXDM1MFwzNTRcMzQwXDM3N1wxXDIyNFwyMjdcMjMwXDM3N1wyMTUuNDZcMzc3XDFcMjc3XDMwMVwzMDJcMzc3IiBcCisgICJcMjQ0XDM1MFwzNTRcMzQwXDM3N1wxXDIyNFwyMjdcMjMwXDM3N1wyMjQuNDZcMzc3XDNUWVpcMzc3XDIzMlwyMzVcMjM2IiBcCisgICJcMzc3XDMxN1wzMjBcMzIwXDM3N1wyMTJcMzUwXDM1NFwzNDBcMzc3XDNcMzIxXDMyMlwzMjNcMzc3XDIzMlwyMzVcMjM2IiBcCisgICJcMzc3U1hZXDM3N1wyMjQuNDZcMzc3XDFcMjA3XDIxMlwyMTNcMzc3XDIyNlwzNTBcMzU0XDM0MFwzNzdcMXZ6e1wzNzciIFwKKyAgIlwyMjYuNDZcMzc3XDIxIiIxNzlcMzc3XFxhYlwzNzd+XDIwMVwyMDJcMzc3XDIzM1wyMzZcMjM3XDM3N1wyNzJcMjc0IiBcCisgICJcMjc1XDM3N1wzMTNcMzE1XDMxNVwzNzdcMzI1XDMyNlwzMjdcMzc3XDMzM1wzMzRcMzM0XDM3N1wzNDNcMzQ0XDM0NCIgXAorICAiXDM3N1wzMzFcMzMyXDMzM1wzNzdcMzE1XDMxNlwzMTdcMzc3XDMwMVwzMDJcMzAzXDM3N1wyNjRcMjY2XDI2NlwzNzciIFwKKyAgIlwyMjRcMjMwXDIzMVwzNzd1eXtcMzc3VltdXDM3NzY8PlwzNzdcMjE1LjQ2XDM3N1wxXDIzNlwyNDFcMjQyXDM3N1wyMjEiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVBVV1wzNzdcMjE2LjQ2XDM3N1wxMiIiMTc5XDM3N3l9XDE3N1wzNzdcMjc0XDI3NlwyNzYiIFwKKyAgIlwzNzdcMzM3XDM0MFwzNDBcMzc3XDM0M1wzNDRcMzQ0XDM3N1wzMzJcMzMzXDMzNFwzNzdcMzA1XDMwNlwzMDdcMzc3IiBcCisgICJcMjM1XDIzN1wyNDBcMzc3cnZ3XDM3NzxCQ1wzNzdcMjA2LjQ2XDM3N1wxcXV3XDM3N1wyMTZcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVwyNTNcMjU2XDI1N1wzNzdcMjI0LjQ2XDM3N1wzTlNVXDM3N1wyMjNcMjI2XDIyN1wzNzdcMzEyXDMxM1wzMTRcMzc3IiBcCisgICJcMjEyXDM1MFwzNTRcMzQwXDM3N1wzXDMyN1wzMzBcMzMwXDM3N1wyNDFcMjQzXDI0NFwzNzddYWNcMzc3XDIyNC40NiIgXAorICAiXDM3N1wxcHR1XDM3N1wzNzFcMzUwXDM1NFwzNDBcMzc3XDE9QkRcMzc3XDIxNC40NlwzNzdcMVZbXVwzNzdcMjQ2XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDF8XDIwMFwyMDFcMzc3XDIyNi40NlwzNzdcMTIiIjM5O1wzNzdQVVZcMzc3bnJzXDM3N35cMjAxIiBcCisgICJcMjAyXDM3N1wyMDdcMjEyXDIxM1wzNzdcMjEwXDIxNFwyMTVcMzc3flwyMDJcMjAzXDM3N29zdFwzNzdSV1lcMzc3NCIgXAorICAiOjxcMzc3XDIyNi40NlwzNzdcMW5yc1wzNzdcMjMwXDM1MFwzNTRcMzQwXDM3N1wxYWVnXDM3N1wyNjMuNDZcMzc3XDEiIFwKKyAgIj5DRVwzNzdcMjIxXDM1MFwzNTRcMzQwXDM3N1wxXDIwNFwyMTBcMjExXDM3N1wyMzYuNDZcMzc3XDIvNTdcMzc3XDMzMCIgXAorICAiXDMzMVwzMzFcMzc3XDIxNlwzNTBcMzU0XDM0MFwzNzdcMVwyMjBcMjI0XDIyNVwzNzdcMjI2LjQ2XDM3N1wxMiIiMjgiIFwKKyAgIjpcMzc3TFFTXDM3N2tvcFwzNzd8XDIwMFwyMDFcMzc3XDIwNVwyMTBcMjEyXDM3N1wyMTFcMjE0XDIxNVwzNzdcMjAwIiBcCisgICJcMjA0XDIwNVwzNzdwdHZcMzc3VVpcXFwzNzc2PD5cMzc3XDIyNi40NlwzNzdcMVtgYVwzNzdcMzcxXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcMjI1XDIzMFwyMzFcMzc3XDIxNS40NlwzNzdcMVwyNzRcMjc2XDI3NlwzNzdcMjQ3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFucnNcMzc3XDI2NC40NlwzNzdcMVtgYVwzNzdcMjMyXDM1MFwzNTRcMzQwXDM3N1wxVVpcXFwzNzdcMjYzLjQ2XDM3NyIgXAorICAiXDFcMjMxXDIzM1wyMzRcMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcMVwyNzBcMjcyXDI3MlwzNzdcMjM3LjQ2XDM3N1wxIiBcCisgICJvc3RcMzc3XDIxN1wzNTBcMzU0XDM0MFwzNzdcMVwyMDRcMjEwXDIxMVwzNzdcMjY0LjQ2XDM3N1wyUFVXXDM3N1wzNTEiIFwKKyAgIlwzNTRcMzQzXDM3N1wzNzBcMzUwXDM1NFwzNDBcMzc3XDJcMzUwXDM1NFwzNDJcMzc3OT5AXDM3N1wyMTQuNDZcMzc3IiBcCisgICJcMVRZWlwzNzdcMjUxXDM1MFwzNTRcMzQwXDM3N1wxbnJzXDM3N1wyNjIuNDZcMzc3XDFiZmhcMzc3XDIzNFwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxX2RlXDM3N1wyNjIuNDZcMzc3XDE6QEJcMzc3XDIyMVwzNTBcMzU0XDM0MFwzNzdcMUJISlwzNzdcMjM2IiBcCisgICIuNDZcMzc3XDIvNTdcMzc3XDMyNlwzMjdcMzMwXDM3N1wyMTdcMzUwXDM1NFwzNDBcMzc3XDFcMTc3XDIwM1wyMDRcMzc3IiBcCisgICJcMjYyLjQ2XDM3N1wyU1hZXDM3N1wzNTFcMzUyXDM1MFwzNzdcMzcxXDM1MFwzNTRcMzQwXDM3N1wxXDIxM1wyMTdcMjIwIiBcCisgICJcMzc3XDIxNS40NlwzNzdcMVwyNzFcMjczXDI3NFwzNzdcMjUyXDM1MFwzNTRcMzQwXDM3N1wxXDE3N1wyMDNcMjA0XDM3NyIgXAorICAiXDI2MC40NlwzNzdcMXF1d1wzNzdcMjM2XDM1MFwzNTRcMzQwXDM3N1wxcnZ3XDM3N1wyNjIuNDZcMzc3XDFcMjIyXDIyNSIgXAorICAiXDIyNlwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wxXDIzMVwyMzRcMjM1XDM3N1wyMzcuNDZcMzc3XDFtcXNcMzc3XDIyMCIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDIyNFwyMjdcMjMwXDM3N1wyNjAuNDZcMzc3XDFiZmhcMzc3XDM3MlwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wyXDM1MFwzNTJcMzUxXDM3NzU6PFwzNzdcMjE0LjQ2XDM3N1wxUVZYXDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMlwyMzFcMjMzXDIzNFwzNzcwNjhcMzc3XDI1NC40NlwzNzdcMi81N1wzNzdcMjE0XDIyMFwyMjFcMzc3XDI0MFwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wyXDIzN1wyNDJcMjQzXDM3NzA2OFwzNzdcMjYwLjQ2XDM3N1wyIiI3PVw3N1wzNzdcMzUyXDM1NCIgXAorICAiXDM0NVwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wxQkhKXDM3N1wyMzcuNDZcMzc3XDFcMzIzXDMyNFwzMjRcMzc3XDIyMCIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyXDI1M1wyNTZcMjU3XDM3NzQ6PFwzNzdcMjU1LjQ2XDM3N1wxeXx+XDM3N1wzNzNcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMVwyMDJcMjA1XDIwNlwzNzdcMjE1LjQ2XDM3N1wxXDI2NlwyNzBcMjcxXDM3N1wyNTVcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMlwzMTJcMzEzXDMxNFwzNzdDSUpcMzc3XDI1Mi40NlwzNzdcMj5DRVwzNzdcMjc3XDMwMVwzMDJcMzc3IiBcCisgICJcMjQyXDM1MFwzNTRcMzQwXDM3N1wyXDMyMlwzMjNcMzI0XDM3N1BVVlwzNzdcMjYwLjQ2XDM3N1wxXDIxM1wyMTZcMjE3IiBcCisgICJcMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcMlwzMDdcMzExXDMxMVwzNzcvNTdcMzc3XDIzNi40NlwzNzdcMWpucFwzNzciIFwKKyAgIlwyMjFcMzUwXDM1NFwzNDBcMzc3XDJcMzMwXDMzMVwzMzFcMzc3TFFTXDM3N1wyNTIuNDZcMzc3XDIiIjY8PlwzNzdcMjU3IiBcCisgICJcMjYyXDI2M1wzNzdcMzczXDM1MFwzNTRcMzQwXDM3N1wyXDM0MlwzNDNcMzQzXDM3NzE3OVwzNzdcMjE0LjQ2XDM3NyIgXAorICAiXDFOU1VcMzc3XDI1N1wzNTBcMzU0XDM0MFwzNzdcMlwzNTFcMzU0XDM0M1wzNzdxdXdcMzc3XDI1MC40NlwzNzdcMmYiIFwKKyAgImpsXDM3N1wzNDZcMzQ3XDM0N1wzNzdcMjQ1XDM1MFwzNTRcMzQwXDM3N1wyXDIyNFwyMzBcMjMxXDM3NzU7PVwzNzdcMjU1IiBcCisgICIuNDZcMzc3XDJXXFxdXDM3N1wyNjVcMjY3XDI3MFwzNzdcMjIxXDM1MFwzNTRcMzQwXDM3N1wxXDIyN1wyMzJcMjMzXDM3NyIgXAorICAiXDIzNy40NlwzNzdcMVwzMjFcMzIyXDMyM1wzNzdcMjIyXDM1MFwzNTRcMzQwXDM3N1wyXDIwMFwyMDRcMjA1XDM3Ny8iIFwKKyAgIjU3XDM3N1wyNDcuNDZcMzc3XDJZXmBcMzc3XDMzNVwzMzZcMzM2XDM3N1wzNzRcMzUwXDM1NFwzNDBcMzc3XDFwdHVcMzc3IiBcCisgICJcMjE1LjQ2XDM3N1wxXDI2NFwyNjdcMjY3XDM3N1wyNjFcMzUwXDM1NFwzNDBcMzc3XDJcMzA0XDMwNlwzMDZcMzc3TCIgXAorICAiUVJcMzc3XDI0NC40NlwzNzdcMkZLTVwzNzdcMjcxXDI3M1wyNzRcMzc3XDI1MFwzNTBcMzU0XDM0MFwzNzdcM1wzNDYiIFwKKyAgIlwzNDdcMzQ3XDM3N3xcMjAwXDIwMVwzNzcyODpcMzc3XDI1MC40NlwzNzdcMyIiMjg6XDM3N3Z6e1wzNzdcMzE3XDMyMSIgXAorICAiXDMyMVwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMzQuNDZcMzc3XDMvNTdcMzc3cXUiIFwKKyAgIndcMzc3XDM0MVwzNDJcMzQyXDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3XDJcMzIxXDMyMlwzMjNcMzc3VltdXDM3N1wyNDQiIFwKKyAgIi40NlwzNzdcMj5ERlwzNzdcMjUzXDI1NlwyNTdcMzc3XDM3NVwzNTBcMzU0XDM0MFwzNzdcMVwzMDZcMzA3XDMxMFwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDFNUlRcMzc3XDI2NFwzNTBcMzU0XDM0MFwzNzdcMlwyNDJcMjQ1XDI0NlwzNzdDSUpcMzc3XDI0MCIgXAorICAiLjQ2XDM3N1wyPkNFXDM3N1wyMzFcMjMzXDIzNFwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wzXDM0NlwzNDZcMzQ3XDM3NyIgXAorICAiXDIwN1wyMTNcMjE0XDM3NzpAQlwzNzdcMjQzLjQ2XDM3N1w0LzU3XDM3N1leYFwzNzdcMjM1XDI0MFwyNDFcMzc3XDM1MiIgXAorICAiXDM1M1wzNDdcMzc3XDIyN1wzNTBcMzU0XDM0MFwzNzdcMlwyNjZcMjcwXDI3MVwzNzc+Q0VcMzc3XDIzMC40NlwzNzciIFwKKyAgIlwzIiIxNzlcMzc3cXV3XDM3N1wzMjRcMzI2XDMyNlwzNzdcMjI3XDM1MFwzNTRcMzQwXDM3N1wyXDI1NVwyNTdcMjYwIiBcCisgICJcMzc3S1BSXDM3N1wyNDAuNDZcMzc3XDMiIjk+QFwzNzdcMjE1XDIyMFwyMjFcMzc3XDM1MFwzNTRcMzQyXDM3N1wzNzYiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMU9UVlwzNzdcMjE1LjQ2XDM3N1wxXDI2MlwyNjRcMjY1XDM3N1wyNjZcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMlwyNTJcMjU0XDI1NVwzNzdLUFJcMzc3XDIzNC40NlwzNzdcMkRJS1wzNzdcMjQyXDI0NFwyNDVcMzc3XDI2MSIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzXDI1NlwyNjBcMjYxXDM3N2RpalwzNzcwNjhcMzc3XDIzNS40NlwzNzdcNCIiMDY4XDM3NyIgXAorICAiYGVmXDM3N1wyNDNcMjQ2XDI0N1wzNzdcMzQ2XDM0N1wzNDdcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcM1wzNTJcMzU0IiBcCisgICJcMzQ1XDM3N3p+XDE3N1wzNzcyODpcMzc3XDIyNC40NlwzNzdcM0hNT1wzNzdcMjI0XDIzMFwyMzFcMzc3XDM1MFwzNTEiIFwKKyAgIlwzNTFcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMlwyNjVcMjY3XDI3MFwzNzdTWFlcMzc3XDIzNC40NlwzNzdcMj5DIiBcCisgICJFXDM3N1wyMjZcMjMxXDIzMlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyXDM1MFwzNTRcMzQwXDM3N1wyMjdcMjMyXDIzMyIgXAorICAiXDM3N1wyMTUuNDZcMzc3XDFQVVdcMzc3XDI3MVwzNTBcMzU0XDM0MFwzNzdcM1wzMTdcMzIwXDMyMFwzNzdcMjEwXDIxNCIgXAorICAiXDIxNVwzNzdCSEpcMzc3XDIyNi40NlwzNzdcMz5DRVwzNzdcMjAxXDIwNFwyMDZcMzc3XDMxMlwzMTNcMzE0XDM3N1wyNjUiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcNFwzNTBcMzU0XDM0MlwzNzdcMjU3XDI2MVwyNjJcMzc3eHx9XDM3N0JISlwzNzdcMjI2IiBcCisgICIuNDZcMzc3XDUiIjY8PlwzNzdgZWZcMzc3XDIyMFwyMjNcMjI0XDM3N1wyNzdcMzAxXDMwMlwzNzdcMzUwXDM1NFwzNDIiIFwKKyAgIlwzNzdcMjQwXDM1MFwzNTRcMzQwXDM3N1wzXDM0N1wzNTBcMzUwXDM3N1wyMjBcMjIzXDIyNFwzNzdITU9cMzc3XDIxNiIgXAorICAiLjQ2XDM3N1w0IiIxNzlcMzc3W2BhXDM3N1wyMjRcMjI3XDIzMFwzNzdcMzI2XDMyN1wzMzBcMzc3XDI0MFwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzXDMzMFwzMzFcMzMxXDM3N1wyMjBcMjIzXDIyNFwzNzdITU9cMzc3XDIyNi40NlwzNzdcMyIiOT5AXDM3NyIgXAorICAien5cMTc3XDM3N1wzMDFcMzAyXDMwM1wzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMDJcMzUwXDM1NFwzNDBcMzc3XDIiIFwKKyAgIlwzMzJcMzMzXDMzNFwzNzczOTtcMzc3XDIxNS40NlwzNzdcMVwyNzVcMjc3XDI3N1wzNzdcMjc0XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDRcMzI2XDMyN1wzMzBcMzc3XDI0NFwyNDdcMjUwXDM3N3N3eFwzNzdDSUpcMzc3XDIxNi40NlwzNzdcNEBGRyIgXAorICAiXDM3N25yc1wzNzdcMjQwXDI0M1wyNDRcMzc3XDMyMVwzMjJcMzIzXDM3N1wyNzRcMzUwXDM1NFwzNDBcMzc3XDdcMzUwIiBcCisgICJcMzUyXDM1MVwzNzdcMzA2XDMwN1wzMTBcMzc3XDI0MlwyNDRcMjQ1XDM3N1wxNzdcMjAzXDIwNFwzNzdZXmBcMzc3QiIgXAorICAiSEpcMzc3NTs9XDM3N1wyMTEuNDZcMzc3XDZDSUpcMzc3X2RlXDM3N3p+XDE3N1wzNzdcMjI2XDIzMVwyMzJcMzc3XDI2MiIgXAorICAiXDI2NFwyNjVcMzc3XDMyNVwzMjZcMzI3XDM3N1wyNTBcMzUwXDM1NFwzNDBcMzc3XDZcMzM2XDMzN1wzMzdcMzc3XDI0NiIgXAorICAiXDI1MVwyNTJcMzc3XDIwNVwyMTBcMjEyXDM3N2ZqbFwzNzdMUVNcMzc3RElLXDM3N1wyMDI8QkNcMzc3XDZHTE5cMzc3IiBcCisgICJTWFlcMzc3ZWlrXDM3N1wyMDRcMjEwXDIxMVwzNzdcMjQyXDI0NVwyNDZcMzc3XDMxMVwzMTJcMzEzXDM3N1wyNDdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcNFwzMzNcMzM0XDMzNFwzNzdcMjUxXDI1M1wyNTRcMzc3eHx9XDM3N0hNT1wzNzdcMjE2LjQ2XDM3NyIgXAorICAiXDQ7QUNcMzc3aW1vXDM3N1wyMzJcMjM1XDIzNlwzNzdcMzE0XDMxNlwzMTZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwyMDVcMzUwXDM1NFwzNDBcMzc3XDFVWlxcXDM3N1wyMTUuNDZcMzc3XDFcXGFiXDM3N1wzMDJcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMTRcMzMwXDMzMVwzMzFcMzc3XDI3NFwyNzZcMjc2XDM3N1wyNDRcMjQ3XDI1MFwzNzdcMjM1XDIzN1wyNDBcMzc3XDIyMCIgXAorICAiXDIyM1wyMjRcMzc3XDIxMFwyMTRcMjE1XDM3N1wyMDdcMjEyXDIxM1wzNzdcMjIwXDIyM1wyMjRcMzc3XDIzNFwyMzciIFwKKyAgIlwyNDBcMzc3XDI0M1wyNDZcMjQ3XDM3N1wyNzFcMjczXDI3M1wzNzdcMzI2XDMyN1wzMzBcMzc3XDMxMVwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1w1XDM1MlwzNTRcMzQ1XDM3N1wzNDBcMzQxXDM0MVwzNzdcMzI1XDMyNlwzMjdcMzc3XDM0MVwzNDJcMzQyIiBcCisgICJcMzc3XDM0M1wzNDRcMzQ0XDM3N1wzNTNcMzUwXDM1NFwzNDBcMzc3XDE1XDMzM1wzMzRcMzM0XDM3N1wyNzZcMzAwXDMwMSIgXAorICAiXDM3N1wyNDZcMjUwXDI1MVwzNzdcMjM1XDI0MFwyNDFcMzc3XDIyMFwyMjRcMjI1XDM3N1wyMTFcMjE0XDIxNVwzNzciIFwKKyAgIlwyMDVcMjEwXDIxMlwzNzdcMjIwXDIyM1wyMjRcMzc3XDIzMlwyMzVcMjM2XDM3N1wyNDJcMjQ0XDI0NVwzNzdcMjY1IiBcCisgICJcMjY3XDI3MFwzNzdcMzIzXDMyNFwzMjRcMzc3XDM1MFwzNTRcMzQyXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIxMCIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDIwNVwyMTBcMjEyXDM3N1wyMTYuNDZcMzc3XDFcMzEzXDMxNVwzMTVcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjM1XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcMjY0XDI2N1wyNjdcMzc3XDIxNi40NlwzNzdcMXR4elwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMzVcMzUwXDM1NFwzNDBcMzc3XDJcMzIyXDMyM1wzMjRcMzc3IiBcCisgICI1OjxcMzc3XDIxNS40NlwzNzdcMiIiOT5AXDM3N1wzNTBcMzUyXDM1MVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMzRcMzUwXDM1NFwzNDBcMzc3XDJcMzM0XDMzNVwzMzUiIFwKKyAgIlwzNzdcNzdFR1wzNzdcMjE2LjQ2XDM3N1wxXDI0M1wyNDZcMjQ3XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIzNFwzNTBcMzU0XDM0MFwzNzdcMlwzMzVcMzM2XDMzN1wzNzciIFwKKyAgIkBGR1wzNzdcMjE2LjQ2XDM3N1wxVltdXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDIzNFwzNTBcMzU0XDM0MFwzNzdcMlwzMzZcMzM3XDMzN1wzNzdCR0lcMzc3XDIxNi40NiIgXAorICAiXDM3N1wyIiI2PD5cMzc3XDMzNVwzMzZcMzM2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMlwzMzNcMzM0XDMzNFwzNzdCSEpcMzc3XDIxNyIgXAorICAiLjQ2XDM3N1wxXDI1MlwyNTRcMjU1XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMlwyNzdcMzAxXDMwMlwzNzc5PkBcMzc3XDIxNy40NiIgXAorICAiXDM3N1wxcHR1XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMlwyMTVcMjIwXDIyMVwzNzcvNTdcMzc3XDIxNy40NlwzNzdcMUxRU1wzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMzJcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMlwzMDRcMzA2XDMwNlwzNzdQVVdcMzc3XDIyMC40NlwzNzdcMlw3N0VHXDM3N1wzNDFcMzQyXDM0MyIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMzAiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMlwzMzVcMzM2XDMzNlwzNzdpbW9cMzc3XDIyMS40NlwzNzdcMiIiNTo8XDM3N1wzMjJcMzIzIiBcCisgICJcMzI0XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDIyN1wzNTBcMzU0XDM0MFwzNzdcM1wzMTJcMzEzXDMxNFwzNzd2entcMzc3MTc5XDM3N1wyMjEuNDZcMzc3XDIiIjIiIFwKKyAgIjg6XDM3N1wyNzVcMjc3XDI3N1wzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wyMjVcMzUwXDM1NFwzNDBcMzc3XDNcMzQxXDM0MlwzNDNcMzc3XDIzN1wyNDJcMjQzXDM3N01SIiBcCisgICJUXDM3N1wyMjMuNDZcMzc3XDIiIjA2OFwzNzdcMjcxXDI3M1wyNzRcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wzXDMxMFwzMTJcMzEyXDM3NyIgXAorICAiXDIxNVwyMjBcMjIxXDM3N09UVlwzNzdcMjI1LjQ2XDM3N1wyIiIwNjhcMzc3XDI2NFwyNjdcMjY3XDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIyMVwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzXDIxN1wyMjJcMjIzXDM3N1leYFwzNzcxNzlcMzc3XDIyNy40NlwzNzdcMiIiNTo8XDM3N1wyNzVcMjc3XDMwMCIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMjIiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwyMDFcMjA0XDIwNlwzNzdcMjMwLjQ2XDM3N1wyO0FDXDM3N1wzMTNcMzE1XDMxNVwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMjNcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMlwzNDFcMzQyXDM0M1wzNzcxNzlcMzc3XDIyNi40NlwzNzdcMk5TVVwzNzdcMzM1XDMzNlwzMzciIFwKKyAgIlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjI1IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDF4fH1cMzc3XDIyNS40NlwzNzdcMXB0dVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMjdcMzUwXDM1NFwzNDBcMzc3XDJcMzMzXDMzNFwzMzQiIFwKKyAgIlwzNzcvNTdcMzc3XDIyMi40NlwzNzdcMiIiOT5AXDM3N1wyNTJcMjU0XDI1NVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3XDFwdHVcMzc3IiBcCisgICJcMjIxLjQ2XDM3N1wyZWlrXDM3N1wzNDRcMzQ1XDM0NVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMzJcMzUwXDM1NFwzNDBcMzc3XDFcMzI0XDMyNVwzMjVcMzc3XDIxNyIgXAorICAiLjQ2XDM3N1wyUFVXXDM3N1wyNzVcMjc3XDI3N1wzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMzVcMzUwXDM1NFwzNDBcMzc3XDFna2xcMzc3XDIxNC40NlwzNzdcMkxRIiBcCisgICJTXDM3N1wyNjBcMjYzXDI2M1wzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wyMzdcMzUwXDM1NFwzNDBcMzc3XDFcMzEzXDMxNVwzMTVcMzc3XDIxMS40NlwzNzdcMyIiMDY4IiBcCisgICJcMzc3am5wXDM3N1wyNzVcMjc3XDI3N1wzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyNDJcMzUwXDM1NFwzNDBcMzc3XDFeY2VcMzc3XDIwNS40NlwzNzdcNCIiOD5cNzdcMzc3IiBcCisgICJrcHFcMzc3XDI1M1wyNTVcMjU2XDM3N1wzNTBcMzUyXDM1MVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNDRcMzUwXDM1NFwzNDBcMzc3XDZcMzAyXDMwNFwzMDVcMzc3LjQiIFwKKyAgIjZcMzc3O0FDXDM3N2JnaFwzNzdcMjI0XDIzMFwyMzFcMzc3XDMxNFwzMTZcMzE2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDI1MVwzNTBcMzU0XDM0MFwzNzdcMVwzNDVcMzQ2IiBcCisgICJcMzQ2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDMzN1wzNTBcMzU0XDM0MFwzNzdcMVwzNTJcMzU0XDM1MFwzNzdcMjEwXDMyNVwzMjZcMzI3XDM3N1wxXDM0MSIgXAorICAiXDM0MlwzNDJcMzc3XDIzMlwzNTBcMzU0XDM0MFwzNzdcMVwzNDFcMzQyXDM0M1wzNzdcMjA3XDMyNVwzMjZcMzI3XDM3NyIgXAorICAiXDFcMzQzXDM0NFwzNDRcMzc3XDI0NFwzNTBcMzU0XDM0MFwzNzdcMlwzMTRcMzE2XDMxNlwzNzdcMjY3XDI3MVwyNzIiIFwKKyAgIlwzNzdcMjAyXDI0NFwyNDdcMjUwXDM3N1wyXDI2N1wyNzFcMjcyXDM3N1wzMTVcMzE2XDMxN1wzNzdcMjM2XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFcMzUwXDM1MVwzNTFcMzc3XDIwNFwzNDNcMzQ0XDM0NFwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxIiBcCisgICJcMzMyXDMzM1wzMzRcMzc3XDIxN1wzMjVcMzI2XDMyN1wzNzdcMjMyXDM1MFwzNTRcMzQwXDM3N1wzXDMwMFwzMDJcMzAyIiBcCisgICJcMzc3XDIzNVwyMzdcMjQwXDM3N1wyMDZcMjExXDIxMlwzNzdcMjAyXDIwMlwyMDVcMjA2XDM3N1wzXDIxMlwyMTVcMjE2IiBcCisgICJcMzc3XDI0MlwyNDVcMjQ2XDM3N1wzMDdcMzExXDMxMVwzNzdcMjI1XDM1MFwzNTRcMzQwXDM3N1wxXDM0NFwzNDVcMzQ1IiBcCisgICJcMzc3XDIyM1wzMjVcMzI2XDMyN1wzNzdcMVwzMzVcMzM2XDMzNlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMDJcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMVwyMzVcMjM3XDI0MFwzNzdcMjEyLjQ2XDM3N1wzS1BSXDM3N1wyMTNcMjE2XDIxN1wzNzdcMzM1IiBcCisgICJcMzM2XDMzN1wzNzdcMjI2XDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMTEuNDZcMzc3XDNCR0lcMzc3dHh5XDM3NyIgXAorICAiXDI3MVwyNzNcMjczXDM3N1wyMzVcMzUwXDM1NFwzNDBcMzc3XDNcMjY1XDI2N1wyNzBcMzc3bHFyXDM3NzY8PlwzNzciIFwKKyAgIlwyMDYuNDZcMzc3XDMiIjY8PlwzNzducnNcMzc3XDI3MFwyNzJcMjcyXDM3N1wyMzNcMzUwXDM1NFwzNDBcMzc3XDFTIiBcCisgICJYWVwzNzdcMjA0LjQ2XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIxNy40NlwzNzdcMVwzMzFcMzMyXDMzMyIgXAorICAiXDM3N1wyMjZcMzUwXDM1NFwzNDBcMzc3XDNcMjY3XDI3MVwyNzJcMzc3ZmpsXDM3NzA2OFwzNzdcMjEwLjQ2XDM3N1w0IiBcCisgICIwNjhcMzc3YWVnXDM3N1wyNDZcMjUxXDI1MlwzNzdcMzUwXDM1NFwzNDJcMzc3XDIyMVwzNTBcMzU0XDM0MFwzNzdcMSIgXAorICAieHx9XDM3N1wyMjMuNDZcMzc3XDFTWFlcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzAyXDM1MFwzNTRcMzQwXDM3N1wxIiBcCisgICJcMjM1XDIzN1wyNDBcMzc3XDIxNC40NlwzNzdcMiIiMTc5XDM3N1wyMTNcMjE3XDIyMFwzNzdcMjI1XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFrcHFcMzc3XDIxNC40NlwzNzdcMlBVV1wzNzdcMzI2XDMyN1wzMzBcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwyXDI3NVwyNzdcMzAwXDM3N1BVVlwzNzdcMjE0LjQ2XDM3N1wyUldZXDM3N1wyNzdcMzAxXDMwMlwzNzdcMjMxXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFTWFlcMzc3XDIwNC40NlwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMTcuNDYiIFwKKyAgIlwzNzdcMVwzMzJcMzMzXDMzNFwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wyXDMxMlwzMTNcMzE0XDM3N1FWWFwzNzdcMjE2IiBcCisgICIuNDZcMzc3XDIiIjY8PlwzNzdcMjA3XDIxM1wyMTRcMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcMXR4elwzNzdcMjIzLiIgXAorICAiNDZcMzc3XDFTWFlcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzAyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwIiBcCisgICJcMzc3XDIxNi40NlwzNzdcMXN3eFwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMTUuNDZcMzc3XDIiIjciIFwKKyAgIj1cNzdcMzc3XDMxN1wzMjFcMzIxXDM3N1wyMjdcMzUwXDM1NFwzNDBcMzc3XDFcMjEwXDIxNFwyMTVcMzc3XDIyMC40IiBcCisgICI2XDM3N1wxXDIxMVwyMTRcMjE1XDM3N1wyMzBcMzUwXDM1NFwzNDBcMzc3XDFTWFlcMzc3XDIwNC40NlwzNzdcMjI0XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIxNy40NlwzNzdcMVwzMzRcMzM1XDMzNVwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDJcMjI1XDIzMFwyMzFcMzc3MDY4XDM3N1wyMjAuNDZcMzc3XDFKT1FcMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcMWsiIFwKKyAgInBxXDM3N1wyMjMuNDZcMzc3XDFTWFlcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzAyXDM1MFwzNTRcMzQwXDM3N1wxIiBcCisgICJcMjM1XDIzN1wyNDBcMzc3XDIwNC40NlwzNzdcMUBGR1wzNzdcMjAySk9RXDM3N1wyRktNXDM3NzA2OFwzNzdcMjA2LiIgXAorICAiNDZcMzc3XDFcMjU3XDI2MVwyNjJcMzc3XDIyM1wzNTBcMzU0XDM0MFwzNzdcMWtwcVwzNzdcMjA0LjQ2XDM3N1wxR0wiIFwKKyAgIk5cMzc3XDIwMkpPUVwzNzdcMUFGSFwzNzdcMjA2LjQ2XDM3N1wxR01OXDM3N1wyMjZcMzUwXDM1NFwzNDBcMzc3XDFnIiBcCisgICJsbVwzNzdcMjA3LjQ2XDM3N1w0PEJDXDM3N1FWWFwzNzdSV1lcMzc3PkNFXDM3N1wyMDcuNDZcMzc3XDFnbG1cMzc3XDIyNyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxU1hZXDM3N1wyMDQuNDZcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjAzIiBcCisgICIuNDZcMzc3XDEvNTdcMzc3XDIxMzxCQ1wzNzdcMVwzNTBcMzUxXDM1MVwzNzdcMjIyXDM1MFwzNTRcMzQwXDM3N1wxXDIwNCIgXAorICAiXDIxMFwyMTFcMzc3XDIwNy40NlwzNzdcNklOUFwzNzdmamxcMzc3dHh5XDM3N2ltb1wzNzdRVlhcMzc3Mjg6XDM3N1wyMDUiIFwKKyAgIi40NlwzNzdcMVwyNTVcMjU3XDI2MFwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wxdXl7XDM3N1wyMDY8QkNcMzc3XDE7IiBcCisgICJBQ1wzNzdcMjA0LjQ2XDM3N1wxIiIwNjhcMzc3XDIwNzxCQ1wzNzdcMV5jZVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDMwMlwzNTBcMzU0XDM0MFwzNzdcMVwyMzVcMjM3XDI0MFwzNzdcMjA0LjQ2XDM3N1wxXDI2NVwyNjdcMjcwXDM3N1wyMDQiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMlwyNTBcMjUzXDI1M1wzNzc2PD5cMzc3XDIwNC40NlwzNzdcMVNYWVwzNzdcMjIzXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIwNC40NlwzNzdcMVwzNDZcMzQ3XDM0N1wzNzdcMjAzXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDJcMzUyXDM1NFwzNDVcMzc3XDIwN1wyMTNcMjE0XDM3N1wyMDUuNDZcMzc3XDFcMjcxXDI3M1wyNzRcMzc3XDIyNFwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxen5cMTc3XDM3N1wyMDUuNDZcMzc3XDMiIjU7PVwzNzdcMjEzXDIxN1wyMjBcMzc3XDMyN1wzMzAiIFwKKyAgIlwzMzBcMzc3XDIwNFwzNTBcMzU0XDM0MFwzNzdcM1wzMzRcMzM1XDMzNVwzNzdcMjIzXDIyNlwyMjdcMzc3OD5cNzdcMzc3IiBcCisgICJcMjA1LjQ2XDM3N1wxeXx+XDM3N1wyMjZcMzUwXDM1NFwzNDBcMzc3XDFTWFlcMzc3XDIwNC40NlwzNzdcMjI0XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIwMy40NlwzNzdcMTpAQlwzNzdcMjM1XDM1MFwzNTRcMzQwXDM3N1wxXDI0MFwyNDMiIFwKKyAgIlwyNDRcMzc3XDIwNS40NlwzNzdcMzpAQlwzNzdcMjI0XDIzMFwyMzFcMzc3XDM0NFwzNDVcMzQ1XDM3N1wyMDZcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcNVwzMDZcMzA3XDMxMFwzNzdcMjAyXDIwNVwyMDZcMzc3OkBCXDM3Ny40NlwzNzdHTU5cMzc3XDIzMSIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzEyXDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIwNC40NlwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjA1XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcMjU1XDI1N1wyNjBcMzc3XDIwNS40NlwzNzdcMVwzNTFcMzU0XDM0M1wzNzdcMjIyXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFrcHFcMzc3XDIwNC40NlwzNzdcMVwzNDZcMzQ3XDM0N1wzNzdcMjA1XDM1MFwzNTRcMzQwXDM3N1wxen5cMTc3XDM3NyIgXAorICAiXDIwNC40NlwzNzdcMVwyMTBcMjE0XDIxNVwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wxXDI1N1wyNjJcMjYzXDM3N1wyMDUiIFwKKyAgIi40NlwzNzdcMl5iZFwzNzdcMzUwXDM1MlwzNTFcMzc3XDIxMFwzNTBcMzU0XDM0MFwzNzdcMlwzNTFcMzU0XDM0M1wzNzciIFwKKyAgImdsbVwzNzdcMjA1LjQ2XDM3N1wxXDI1M1wyNTZcMjU3XDM3N1wyMjVcMzUwXDM1NFwzNDBcMzc3XDFTWFlcMzc3XDIwNCIgXAorICAiLjQ2XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIwMy40NlwzNzdcMTpAQlwzNzdcMjM0XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDJcMzMyXDMzM1wzMzRcMzc3Mjg6XDM3N1wyMDQuNDZcMzc3XDJbYGFcMzc3XDM0N1wzNTBcMzUwXDM3NyIgXAorICAiXDIxM1wzNTBcMzU0XDM0MFwzNzdcMlwyMzdcMjQyXDI0M1wzNzdcMjY0XDI2NlwyNjZcMzc3XDIzMVwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzEyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNSIgXAorICAiXDIzN1wyNDBcMzc3XDIwNC40NlwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjA2XDM1MFwzNTRcMzQwXDM3N1wyMDUuNDYiIFwKKyAgIlwzNzdcMVwzMzBcMzMxXDMzMVwzNzdcMjIyXDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMDQuNDZcMzc3XDFcMzQ2IiBcCisgICJcMzQ3XDM0N1wzNzdcMjA1XDM1MFwzNTRcMzQwXDM3N1wxXDMxMFwzMTJcMzEyXDM3N1wyMDQuNDZcMzc3XDFxdXdcMzc3IiBcCisgICJcMjIzXDM1MFwzNTRcMzQwXDM3N1wxQkdJXDM3N1wyMDQuNDZcMzc3XDFna2xcMzc3XDIxNFwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxdHh5XDM3N1wyMDQuNDZcMzc3XDFBRkhcMzc3XDIyNVwzNTBcMzU0XDM0MFwzNzdcMVNYWVwzNzdcMjA0LjQ2XDM3NyIgXAorICAiXDIyNFwzNTBcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjAzLjQ2XDM3N1wxOkBCXDM3N1wyMzRcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMWpucFwzNzdcMjA0LjQ2XDM3N1wxVVpcXFwzNzdcMjUwXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIwNC40NlwzNzciIFwKKyAgIlwxXDI2NVwyNjdcMjcwXDM3N1wyMDVcMzUwXDM1NFwzNDBcMzc3XDFcMzUyXDM1NFwzNDVcMzc3XDIwNS40NlwzNzdcMSIgXAorICAiXDM0MFwzNDFcMzQxXDM3N1wyMjJcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIwNC40NlwzNzdcMVwzNDZcMzQ3XDM0NyIgXAorICAiXDM3N1wyMDVcMzUwXDM1NFwzNDBcMzc3XDFcMjcxXDI3M1wyNzNcMzc3XDIwNC40NlwzNzdcMVwyMDFcMjA0XDIwNlwzNzciIFwKKyAgIlwyMjJcMzUwXDM1NFwzNDBcMzc3XDFcMjM0XDIzN1wyNDBcMzc3XDIwNC40NlwzNzdcMUNJSlwzNzdcMjE2XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFQVVZcMzc3XDIwNC40NlwzNzdcMVwyMzNcMjM2XDIzN1wzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxIiBcCisgICJTWFlcMzc3XDIwNC40NlwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMDMuNDZcMzc3XDE6QEJcMzc3XDIzMyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDM0MVwzNDJcMzQyXDM3N1wyMDQuNDZcMzc3XDIiIjE3OVwzNzdcMzM1XDMzNlwzMzciIFwKKyAgIlwzNzdcMjUwXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzEyIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIwNC40NlwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjA1XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFcMjIyXDIyNVwyMjZcMzc3XDIwNC40NlwzNzdcMSIiMDY4XDM3N1wyMjNcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMWtwcVwzNzdcMjA0LjQ2XDM3N1wxXDM0NlwzNDdcMzQ3XDM3N1wyMDVcMzUwXDM1NFwzNDBcMzc3XDFiZmhcMzc3IiBcCisgICJcMjA0LjQ2XDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMjJcMzUwXDM1NFwzNDBcMzc3XDFWW11cMzc3XDIwNC40NlwzNzciIFwKKyAgIlwxXDI1M1wyNTZcMjU3XDM3N1wyMTZcMzUwXDM1NFwzNDBcMzc3XDFcMjczXDI3NVwyNzZcMzc3XDIwNC40NlwzNzdcMSIgXAorICAiVFlaXDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFTWFlcMzc3XDIwNC40NlwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxIiBcCisgICJHTE5cMzc3XDIwMy40NlwzNzdcMTpAQlwzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wxXDIzMVwyMzNcMjM0XDM3N1wyMDQiIFwKKyAgIi40NlwzNzdcMXl9XDE3N1wzNzdcMjUxXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIwNC40NlwzNzdcMVwyNjVcMjY3XDI3MCIgXAorICAiXDM3N1wyMDNcMzUwXDM1NFwzNDBcMzc3XDNcMzQ1XDM0NlwzNDZcMzc3XDIwNlwyMTFcMjEyXDM3Ny81N1wzNzdcMjA0IiBcCisgICIuNDZcMzc3XDFbYGFcMzc3XDIyM1wzNTBcMzU0XDM0MFwzNzdcMWtwcVwzNzdcMjA0LjQ2XDM3N1wxXDM0NlwzNDdcMzQ3IiBcCisgICJcMzc3XDIwM1wzNTBcMzU0XDM0MFwzNzdcMlwzMjNcMzI0XDMyNFwzNzdmamxcMzc3XDIwNC40NlwzNzdcMi81N1wzNzciIFwKKyAgIlwzMzZcMzM3XDMzN1wzNzdcMjIxXDM1MFwzNTRcMzQwXDM3N1wxXDM0NVwzNDZcMzQ2XDM3N1wyMDQuNDZcMzc3XDEiIjkiIFwKKyAgIlw3N0FcMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcMUJISlwzNzdcMjA0LjQ2XDM3N1wxXDM0MVwzNDJcMzQyXDM3N1wyMjMiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVNYWVwzNzdcMjA0LjQ2XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIwMyIgXAorICAiLjQ2XDM3N1wxOkBCXDM3N1wyMzNcMzUwXDM1NFwzNDBcMzc3XDFna2xcMzc3XDIwNC40NlwzNzdcMVwzMDBcMzAyXDMwMiIgXAorICAiXDM3N1wyNTFcMzUwXDM1NFwzNDBcMzc3XDIwNC40NlwzNzdcMVNYWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMTIiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwyMzVcMjM3XDI0MFwzNzdcMjA0LjQ2XDM3N1wxIiI3PVw3N1wzNzdcMjAzPEJDXDM3NyIgXAorICAiXDEvNTdcMzc3XDIwNi40NlwzNzdcMVwyNTdcMjYyXDI2M1wzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMDQiIFwKKyAgIi40NlwzNzdcMTpAQlwzNzdcMjAyPEJDXDM3N1wxIiI5PkBcMzc3XDIwNi40NlwzNzdcMVwyMDBcMjA0XDIwNVwzNzdcMjIyIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIwNC40NlwzNzdcMXJ2d1wzNzdcMjIwXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDF+XDIwMlwyMDNcMzc3XDIwNC40NlwzNzdcMVwyNzRcMjc2XDI3NlwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFTWFlcMzc3XDIwNC40NlwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMDMuNDZcMzc3XDEiIjE3OVwzNzciIFwKKyAgIlwyMTFmamxcMzc3XDFcMzExXDMxMlwzMTNcMzc3XDIyMVwzNTBcMzU0XDM0MFwzNzdcMUBGR1wzNzdcMjA0LjQ2XDM3NyIgXAorICAiXDFcMzUyXDM1NFwzNDVcMzc3XDI1MVwzNTBcMzU0XDM0MFwzNzdcMjA0LjQ2XDM3N1wxU1hZXDM3N1wzNzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMzEyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMTYuNDZcMzc3XDFlaWtcMzc3XDIyNCIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMTUuNDZcMzc3XDFwdHZcMzc3XDIyM1wzNTBcMzU0XDM0MFwzNzdcMVwyNTYiIFwKKyAgIlwyNjBcMjYxXDM3N1wyMDQuNDZcMzc3XDFcMjE3XDIyMlwyMjNcMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcMVwyMzVcMjM3IiBcCisgICJcMjQwXDM3N1wyMDQuNDZcMzc3XDFcMjQ2XDI1MFwyNTFcMzc3XDIyM1wzNTBcMzU0XDM0MFwzNzdcMVNYWVwzNzdcMjA0IiBcCisgICIuNDZcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjE1LjQ2XDM3N1wxXDI2NVwyNjdcMjcwXDM3N1wyMjEiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMSIiMTc5XDM3N1wyMDMuNDZcMzc3XDEiIjM5O1wzNzdcMjUyXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDIwNC40NlwzNzdcMVNYWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzNyIgXAorICAiXDI0MFwzNzdcMjE1LjQ2XDM3N1wxcHR1XDM3N1wyMjVcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIxMy40NlwzNzciIFwKKyAgIlwyOkBCXDM3N1wyNTVcMjU3XDI2MFwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxXDIzNlwyNDFcMjQyXDM3N1wyMDQuIiBcCisgICI0NlwzNzdcMVwyMzVcMjM3XDI0MFwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wxXDI1MVwyNTNcMjU0XDM3N1wyMDQuNCIgXAorICAiNlwzNzdcMVwyMzFcMjMzXDIzNFwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wxU1hZXDM3N1wyMDQuNDZcMzc3XDIyNFwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMTUuNDZcMzc3XDFcMjY1XDI2N1wyNzBcMzc3XDIyMVwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwyMDQuNDZcMzc3XDE6QEJcMzc3XDI1MlwzNTBcMzU0XDM0MFwzNzdcMjA0LjQ2XDM3N1wxU1hZXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzEyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMTIuNDZcMzc3XDMiIjg+XDc3IiBcCisgICJcMzc3b3N0XDM3N1wzMTBcMzEyXDMxMlwzNzdcMjI2XDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMTMuNDZcMzc3XDIiIFwKKyAgIjc9XDc3XDM3N1wzNTJcMzU0XDM1MFwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxXDI1N1wyNjJcMjYzXDM3N1wyMDQuIiBcCisgICI0NlwzNzdcMVwyMTRcMjIwXDIyMVwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wxXDIzMVwyMzRcMjM1XDM3N1wyMDQuNCIgXAorICAiNlwzNzdcMVwyNTFcMjUzXDI1NFwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wxU1hZXDM3N1wyMDQuNDZcMzc3XDIyNFwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMTUuNDZcMzc3XDFcMjY1XDI2N1wyNzBcMzc3XDIyMVwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxIiI1Oz1cMzc3XDIwMy40NlwzNzdcMSIiMDY4XDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3XDIwNC40NlwzNzdcMVNYIiBcCisgICJZXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDMxMlwzNTBcMzU0XDM0MFwzNzdcMVwyMzVcMjM3XDI0MFwzNzdcMjA0LiIgXAorICAiNDZcMzc3XDF4fH1cMzc3XDIwMlwyNTNcMjU2XDI1N1wzNzdcM1wyNTRcMjU3XDI1N1wzNzdcMzAwXDMwMlwzMDJcMzc3IiBcCisgICJcMzI2XDMyN1wzMzBcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzdcMWtwcVwzNzdcMjA0LjQ2XDM3N1wxXDMwMlwzMDNcMzA0IiBcCisgICJcMzc3XDIwMlwzMjVcMzI2XDMyN1wzNzdcMVwyMDRcMjEwXDIxMVwzNzdcMjA0LjQ2XDM3N1wxXDIwMlwyMDZcMjA3XDM3NyIgXAorICAiXDIyNFwzNTBcMzU0XDM0MFwzNzdcMVwzMDRcMzA2XDMwNlwzNzdcMjA0LjQ2XDM3N1wxa3BxXDM3N1wyMjBcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMXp+XDE3N1wzNzdcMjA0LjQ2XDM3N1wxXDI3NVwyNzdcMjc3XDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVNYWVwzNzdcMjA0LjQ2XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIwMy40NlwzNzdcMSIiNjw+XDM3NyIgXAorICAiXDIxMVwyNzFcMjczXDI3NFwzNzdcMVwzNDZcMzQ3XDM0N1wzNzdcMjIxXDM1MFwzNTRcMzQwXDM3N1wxSU5QXDM3N1wyMDQiIFwKKyAgIi40NlwzNzdcMVwzMzFcMzMyXDMzM1wzNzdcMjUxXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIwNC40NlwzNzdcMVwyNTEiIFwKKyAgIlwyNTNcMjU0XDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIwNC40NlwzNzdcMVwzNDZcMzQ3XDM0N1wzNzciIFwKKyAgIlwyMDJcMzUwXDM1NFwzNDBcMzc3XDJcMzUwXDM1NFwzNDJcMzc3OVw3N0FcMzc3XDIwMy40NlwzNzdcMiIiMTc5XDM3NyIgXAorICAiXDMzNlwzMzdcMzM3XDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3XDJcMzUxXDM1MlwzNTBcMzc3MDY4XDM3N1wyMDMuNDYiIFwKKyAgIlwzNzdcMSIiNTs9XDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDE9QkRcMzc3XDIwMy40NlwzNzdcMi81N1wzNzdcMzQ3IiBcCisgICJcMzUwXDM1MFwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wxU1hZXDM3N1wyMDQuNDZcMzc3XDIyNFwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxR0xOXDM3N1wyMDMuNDZcMzc3XDE6QEJcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMXN3eFwzNzdcMjA0LjQiIFwKKyAgIjZcMzc3XDFcMjM1XDI0MFwyNDFcMzc3XDI1MVwzNTBcMzU0XDM0MFwzNzdcMjA0LjQ2XDM3N1wxU1hZXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzEyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMDQuNDZcMzc3XDFcMjUxXDI1MyIgXAorICAiXDI1NFwzNzdcMjM2XDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMDQuNDZcMzc3XDFcMzQ2XDM0N1wzNDdcMzc3XDIwMyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDIyNFwyMzBcMjMxXDM3N1wyMDQuNDZcMzc3XDFwdHVcMzc3XDIyNFwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxXFxhYlwzNzdcMjA0LjQ2XDM3N1wxXDI0MlwyNDRcMjQ1XDM3N1wyMTZcMzUwXDM1NFwzNDBcMzc3XDFcMjYwIiBcCisgICJcMjYzXDI2M1wzNzdcMjA0LjQ2XDM3N1wxWV5gXDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFTWFlcMzc3XDIwNC40NiIgXAorICAiXDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIwMy40NlwzNzdcMTpAQlwzNzdcMjMzXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcMjUwXDI1M1wyNTNcMzc3XDIwNC40NlwzNzdcMUhNT1wzNzdcMjUxXDM1MFwzNTRcMzQwXDM3N1wyMDQuNCIgXAorICAiNlwzNzdcMVNYWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDAiIFwKKyAgIlwzNzdcMjA0LjQ2XDM3N1wxXDI1MVwyNTNcMjU0XDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIwNC40IiBcCisgICI2XDM3N1wxXDM0NlwzNDdcMzQ3XDM3N1wyMDRcMzUwXDM1NFwzNDBcMzc3XDE8QkNcMzc3XDIwNC40NlwzNzdcMVwzMTciIFwKKyAgIlwzMjBcMzIwXDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3XDFcMjQ1XDI0N1wyNTBcMzc3XDIwNC40NlwzNzdcMjxCQ1wzNzciIFwKKyAgIlwzNDZcMzQ3XDM0N1wzNzdcMjE0XDM1MFwzNTRcMzQwXDM3N1wyXDM1MVwzNTRcMzQzXDM3N0ZLTVwzNzdcMjA0LjQ2IiBcCisgICJcMzc3XDFcMjQzXDI0NlwyNDdcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMVNYWVwzNzdcMjA0LjQ2XDM3N1wyMjRcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjAzLjQ2XDM3N1wxOkBCXDM3N1wyMzRcMzUwXDM1NFwzNDBcMzc3XDEiIjU6PCIgXAorICAiXDM3N1wyMDQuNDZcMzc3XDFcMjMwXDIzM1wyMzRcMzc3XDI1MFwzNTBcMzU0XDM0MFwzNzdcMjA0LjQ2XDM3N1wxU1giIFwKKyAgIllcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzEyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMDQuIiBcCisgICI0NlwzNzdcMVwyNTFcMjUzXDI1NFwzNzdcMjM2XDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMDQuNDZcMzc3XDFcMzQ2IiBcCisgICJcMzQ3XDM0N1wzNzdcMjA0XDM1MFwzNTRcMzQwXDM3N1wxXDIzM1wyMzZcMjM3XDM3N1wyMDQuNDZcMzc3XDFeYmRcMzc3IiBcCisgICJcMjI0XDM1MFwzNTRcMzQwXDM3N1wxSU5QXDM3N1wyMDQuNDZcMzc3XDFXXFxdXDM3N1wyMTRcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMWNoaVwzNzdcMjA0LjQ2XDM3N1wxSE1PXDM3N1wyMjVcMzUwXDM1NFwzNDBcMzc3XDFTWFlcMzc3XDIwNC40NlwzNzciIFwKKyAgIlwyMjRcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIwMy40NlwzNzdcMTpAQlwzNzdcMjM0XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMjA1XDIxMFwyMTJcMzc3XDIwNC40NlwzNzdcMiIiMDY4XDM3N1wyNjdcMjcxXDI3MlwzNzdcMjE1XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFcMzMwXDMzMlwzMzJcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzdcMjA0LjQ2XDM3N1wxU1hZXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzEyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMDQuNDZcMzc3XDFcMjUxIiBcCisgICJcMjUzXDI1NFwzNzdcMjM2XDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMDQuNDZcMzc3XDFcMzQ2XDM0N1wzNDdcMzc3IiBcCisgICJcMjA1XDM1MFwzNTRcMzQwXDM3N1wxQEZHXDM3N1wyMDQuNDZcMzc3XDFcMjc0XDI3NlwyNzZcMzc3XDIyM1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXDI3NFwyNzZcMjc2XDM3N1wyMDUuNDZcMzc3XDJNUlRcMzc3XDMyN1wzMzBcMzMwXDM3N1wyMTBcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMlwzMzVcMzM2XDMzNlwzNzdVWVtcMzc3XDIwNS40NlwzNzdcMVwyNzJcMjc0XDI3NVwzNzdcMjI1IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDE9QkRcMzc3XDIwMy40NlwzNzdcMSIiNjw+XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIkdMTlwzNzdcMjAzLjQ2XDM3N1wxOkBCXDM3N1wyMzVcMzUwXDM1NFwzNDBcMzc3XDFBRkhcMzc3XDIwNC40NlwzNzdcMiIgXAorICAiLzU3XDM3N1wyMTdcMjIyXDIyM1wzNzdcMjEyXDM1MFwzNTRcMzQwXDM3N1w0XDI3NFwyNzZcMjc2XDM3N2JnaFwzNzciIFwKKyAgIi40NlwzNzdcMzI3XDMzMFwzMzBcMzc3XDIzMFwzNTBcMzU0XDM0MFwzNzdcMjA0LjQ2XDM3N1wxU1hZXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzEyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMDQuNDZcMzc3XDFcMjUxXDI1MyIgXAorICAiXDI1NFwzNzdcMjM2XDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMDQuNDZcMzc3XDFcMzQ2XDM0N1wzNDdcMzc3XDIwNSIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDI0MFwyNDNcMjQ0XDM3N1wyMDQuNDZcMzc3XDFNUlRcMzc3XDIyNFwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxXDIyMFwyMjRcMjI1XDM3N1wyMDUuNDZcMzc3XDMiIjA2OFwzNzd5fVwxNzdcMzc3XDMwMlwzMDRcMzA1XDM3NyIgXAorICAiXDIwNFwzNTBcMzU0XDM0MFwzNzdcM1wzMDZcMzA3XDMxMFwzNzdcMjAwXDIwNFwyMDVcMzc3MTc5XDM3N1wyMDUuNDYiIFwKKyAgIlwzNzdcMVwyMjBcMjIzXDIyNFwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wzXDMwNlwzMDdcMzEwXDM3N1wyNTdcMjYxIiBcCisgICJcMjYyXDM3N2htblwzNzdcMjA0LjQ2XDM3N1wxX2RlXDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIwMyIgXAorICAiLjQ2XDM3N1wxIiI5PkBcMzc3XDIxM1wzNDNcMzQ0XDM0NFwzNzdcMjIyXDM1MFwzNTRcMzQwXDM3N1wyXDMxM1wzMTUiIFwKKyAgIlwzMTVcMzc3Mzk7XDM3N1wyMDUuNDZcMzc3XDEyQEZHXDM3N1wyMTJcMjE1XDIxNlwzNzdcMzAyXDMwM1wzMDRcMzc3IiBcCisgICJcMzQxXDM0MlwzNDJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNDdcMzUwXDM1MFwzNzdcMzIwXDMyMlwzMjJcMzc3XDI1MyIgXAorICAiXDI1NlwyNTdcMzc3d3t8XDM3Nz1CRFwzNzdcMjAzLjQ2XDM3N1wxXDIxMlwyMTVcMjE2XDM3N1wyMzBcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMjA0LjQ2XDM3N1wxU1hZXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDMxMlwzNTBcMzU0XDM0MFwzNzdcMVwyMzUiIFwKKyAgIlwyMzdcMjQwXDM3N1wyMDQuNDZcMzc3XDFcMjY0XDI2NlwyNjZcMzc3XDIzNlwzNTBcMzU0XDM0MFwzNzdcMWtwcVwzNzciIFwKKyAgIlwyMDQuNDZcMzc3XDFcMzQ2XDM0N1wzNDdcMzc3XDIwNlwzNTBcMzU0XDM0MFwzNzdcMUJISlwzNzdcMjA0LjQ2XDM3NyIgXAorICAiXDFcMjUxXDI1M1wyNTRcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMXR4elwzNzdcMjEwLjQ2XDM3N1wyIiI3PVw3N1wzNzciIFwKKyAgIjg+XDc3XDM3N1wyMTAuNDZcMzc3XDF0eHpcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMVNYWVwzNzdcMjA2LjQ2XDM3NyIgXAorICAiXDFcMjUxXDI1M1wyNTRcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjE3LjQ2XDM3N1wxXDMyMFwzMjIiIFwKKyAgIlwzMjJcMzc3XDIyMlwzNTBcMzU0XDM0MFwzNzdcMlwyNzZcMzAwXDMwMVwzNzc1Oz1cMzc3XDIyMS40NlwzNzdcMUBGIiBcCisgICJHXDM3N1wyMzBcMzUwXDM1NFwzNDBcMzc3XDIwNC40NlwzNzdcMVNYWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMTIiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwyMzVcMjM3XDI0MFwzNzdcMjA0LjQ2XDM3N1wxXDI2NVwyNjdcMjcwXDM3N1wyMzZcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMWtwcVwzNzdcMjA0LjQ2XDM3N1wxXDM0NlwzNDdcMzQ3XDM3N1wyMDZcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVwyNDZcMjUxXDI1MlwzNzdcMjA0LjQ2XDM3N1wxQUZIXDM3N1wyMjVcMzUwXDM1NFwzNDBcMzc3XDJcMjMyXDIzNSIgXAorICAiXDIzNlwzNzcwNjhcMzc3XDIxNi40NlwzNzdcMiIiMDY4XDM3N1wyMzJcMjM1XDIzNlwzNzdcMjI1XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFYXV5cMzc3XDIwNS40NlwzNzdcMUxRU1wzNzdcMjI1XDM1MFwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMTcuNCIgXAorICAiNlwzNzdcMVwzMTZcMzE3XDMyMFwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wyXDMyNFwzMjVcMzI1XDM3N05TVVwzNzciIFwKKyAgIlwyMjAuNDZcMzc3XDIiIjA2OFwzNzdcMzIxXDMyMlwzMjNcMzc3XDIyN1wzNTBcMzU0XDM0MFwzNzdcMjA0LjQ2XDM3NyIgXAorICAiXDFTWFlcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzEyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMDQiIFwKKyAgIi40NlwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjM2XDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMDQuNDZcMzc3XDFcMzQ2IiBcCisgICJcMzQ3XDM0N1wzNzdcMjA3XDM1MFwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMDQuNDZcMzc3XDFcMjI2XDIzMVwyMzJcMzc3IiBcCisgICJcMjI1XDM1MFwzNTRcMzQwXDM3N1wyXDMxN1wzMjBcMzIwXDM3N2BlZlwzNzdcMjE0LjQ2XDM3N1wyYmdoXDM3N1wzMTciIFwKKyAgIlwzMjFcMzIxXDM3N1wyMjZcMzUwXDM1NFwzNDBcMzc3XDFfZGVcMzc3XDIwNC40NlwzNzdcMjpAQlwzNzdcMzMyXDMzMyIgXAorICAiXDMzNFwzNzdcMjI1XDM1MFwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMTcuNDZcMzc3XDFcMzE2XDMxN1wzMjBcMzc3XDIyNSIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyXDIzNlwyNDFcMjQyXDM3N0JHSVwzNzdcMjE0LjQ2XDM3N1wzIiI4Plw3N1wzNzd+XDIwMSIgXAorICAiXDIwMlwzNzdcMzM1XDMzNlwzMzdcMzc3XDIzMFwzNTBcMzU0XDM0MFwzNzdcMjA0LjQ2XDM3N1wxU1hZXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzEyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMDQuNDZcMzc3XDFcMjY1IiBcCisgICJcMjY3XDI3MFwzNzdcMjM2XDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMDQuNDZcMzc3XDFcMzQ2XDM0N1wzNDdcMzc3IiBcCisgICJcMjA3XDM1MFwzNTRcMzQwXDM3N1wxXDI1NFwyNTdcMjU3XDM3N1wyMDQuNDZcMzc3XDIiIjg+XDc3XDM3N1wzNTJcMzU0IiBcCisgICJcMzUwXDM3N1wyMjZcMzUwXDM1NFwzNDBcMzc3XDNcMzExXDMxMlwzMTNcMzc3XDIwMFwyMDRcMjA1XDM3N0VKTFwzNzciIFwKKyAgIlwyMDYuNDZcMzc3XDNFSkxcMzc3XDIwM1wyMDdcMjEwXDM3N1wzMTNcMzE0XDMxNVwzNzdcMjMwXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFfZGVcMzc3XDIwMi40NlwzNzdcMy81N1wzNzdmamxcMzc3XDM0MlwzNDNcMzQzXDM3N1wyMjZcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVNYWVwzNzdcMjE3PEJDXDM3N1wxXDMwN1wzMTFcMzExXDM3N1wyMjdcMzUwXDM1NFwzNDBcMzc3XDQiIFwKKyAgIlwyNzVcMjc3XDMwMFwzNzd+XDIwMVwyMDJcMzc3T1RWXDM3NzA2OFwzNzdcMjA0LjQ2XDM3N1w0IiIzOTtcMzc3UVZYIiBcCisgICJcMzc3XDIwMVwyMDRcMjA2XDM3N1wyNzBcMjcyXDI3MlwzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDEiIFwKKyAgIlNYWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIzNFwzNTBcMzU0XDM0MFwzNzdcMiIgXAorICAiXDM0NVwzNDZcMzQ2XDM3N1wzMTdcMzIxXDMyMVwzNzdcMjAyXDI3NVwyNzdcMzAwXDM3N1wyXDMxN1wzMjFcMzIxXDM3NyIgXAorICAiXDM0NVwzNDZcMzQ2XDM3N1wyMzNcMzUwXDM1NFwzNDBcMzc3XDRcMzAyXDMwNFwzMDVcMzc3XDI1NVwyNTdcMjYwXDM3NyIgXAorICAiXDMwMVwzMDJcMzAzXDM3N1wzNDZcMzQ2XDM0N1wzNzdcMzA0XDM1MFwzNTRcMzQwXDM3N1w0XDM0NlwzNDdcMzQ3XDM3NyIgXAorICAiXDMyN1wzMzBcMzMwXDM3N1wzMzVcMzM2XDMzN1wzNzdcMzQ3XDM1MFwzNTBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNDZcMzUwXDM1NFwzNDBcMzc3IikKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL3BzcGxhc2gvcHNwbGFzaF9naXQuYmJhcHBlbmQgYi95b2N0by1wb2t5L21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL3BzcGxhc2gvcHNwbGFzaF9naXQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMzZWY2NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvcHNwbGFzaC9wc3BsYXNoX2dpdC5iYmFwcGVuZApAQCAtMCwwICsxLDIgQEAKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kX3Bva3kgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL3RpbnktaW5pdC9maWxlcy9pbml0IGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS90aW55LWluaXQvZmlsZXMvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTQwZTk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS90aW55LWluaXQvZmlsZXMvaW5pdApAQCAtMCwwICsxLDI2IEBACisjIS9iaW4vc2gKKworIyBNb3VudCB0aGUgTGludXgga2VybmVsIHZpcnR1YWwgZmlsZXN5c3RlbXMKK21vdW50IG5vbmUgLXQgcHJvYyAvcHJvYworbW91bnQgbm9uZSAtdCBzeXNmcyAvc3lzCisKKyMgRW5zdXJlIGRldnRtcGZzIGlzIG1vdW50ZWQsIGl0IG11c3QgYmUgZG9uZSBtYW51YWxseSB3aXRoIGluaXRyYW1mcworbW91bnQgbm9uZSAtdCBkZXZ0bXBmcyAvZGV2CisKKyMgU2V0dXAgUFRZIGluZnJhc3RydWN0dXJlCitta2RpciAvZGV2L3B0cworbW91bnQgbm9uZSAtdCBkZXZwdHMgL2Rldi9wdHMKKworaWZ1cCBsbworCisjIEFsbG93IGZvciBkaXN0cm8gb3IgbG9jYWwgY3VzdG9taXphdGlvbnMKK2lmIFsgLWYgL2V0Yy9yYy5sb2NhbCBdIDsgdGhlbgorCS4gL2V0Yy9yYy5sb2NhbAorZmkKKworIyBCZWNvbWUgc2Vzc2lvbiBsZWFkZXIgYW5kIHRyeSB0byBmaW5kIGEgcmVhbCB0dHkgKGUuZy4gdHR5UzApCit3aGlsZSB0cnVlOyBkbworCXNldHNpZCBjdHR5aGFjayBzaAorCWVjaG8gIkNvbnNvbGUgc2ggZXhpdGVkIHdpdGggJD8sIHJlc3Bhd25pbmcuLi4iCisJc2xlZXAgMQorZG9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS90aW55LWluaXQvZmlsZXMvcmMubG9jYWwuc2FtcGxlIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS90aW55LWluaXQvZmlsZXMvcmMubG9jYWwuc2FtcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZTE5OGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL3RpbnktaW5pdC9maWxlcy9yYy5sb2NhbC5zYW1wbGUKQEAgLTAsMCArMSwyMyBAQAorIyEvYmluL3NoCisKKyMgU3RhcnQgc2VydmljZXMgYW5kIGN1c3RvbWl6ZSB0aGUgYm9vdCBwcm9jZXNzIGhlcmUuCitlY2hvICJSdW5uaW5nIC9ldGMvcmMubG9jYWwuLi4iCisKKyMgVXNlIGluaXQgc2NyaXB0cyBpbmNsdWRlZCB3aXRoIHBhY2thZ2VzIHN1Y2ggYXMgZHJvcGJlYXIKKyMvZXRjL2luaXQuZC9kcm9wYmVhciBzdGFydAorCisjIFNwYXduIGEgZ2V0dHkgbWFudWFsbHkKKyNzZXRzaWQgL3NiaW4vZ2V0dHkgMTE1MjAwIHR0eVMyCisKKyMgUHJpbnQgYSBiYW5uZXIKKyNlY2hvICJZb3UgYXJlIHJ1bm5pbmcgYSBwb2t5LXRpbnkgaW1hZ2UgYnJvdWdodCB0byB5b3UgYnkgdGhlIFlvY3RvIFByb2plY3QuIgorCisjIFNldHVwIGEgZGVidWdnaW5nIGVudmlyb25tZW50CisjbWtkaXIgL2RlYnVnZnMKKyNtb3VudCBub25lIC10IGRlYnVnZnMgL2RlYnVnZnMKKworIyBMb2FkIG1vZHVsZXMgKG5vdGU6IGxpbnV4LXlvY3RvLXRpbnkgZG9lcyBub3QgaGF2ZSBtb2R1bGUgc3VwcG9ydCBieSBkZWZhdWx0KQorI21vZHByb2JlIHlvdXJkcml2ZXIKKworIyBETyBOT1QgcnVuIGFueSBsb25nIHJ1bm5pbmcgdGFza3Mgb3IgbG9vcHMgYXMgdGhlc2Ugd2lsbCBkZWxheQorIyB0aGUgL2luaXQgc2NyaXB0IGFuZCB0aGUgY29uc29sZSBzaGVsbC4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvdGlueS1pbml0L3RpbnktaW5pdC5iYiBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvdGlueS1pbml0L3RpbnktaW5pdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDRlMzRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS90aW55LWluaXQvdGlueS1pbml0LmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiUG9reS10aW55IGluaXQiCitERVNDUklQVElPTiA9ICJCYXNpYyBpbml0IHN5c3RlbSBmb3IgcG9reS10aW55IgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworUFIgPSAicjIiCisKK1JERVBFTkRTXyR7UE59ID0gImJ1c3lib3giCisKK1NSQ19VUkkgPSAiZmlsZTovL2luaXQgXAorCSAgIGZpbGU6Ly9yYy5sb2NhbC5zYW1wbGUgXAorCSAgIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwk6Cit9CisKK2RvX2NvbXBpbGUoKSB7CisJOgorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0ICR7RH0KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9yYy5sb2NhbC5zYW1wbGUgJHtEfSR7c3lzY29uZmRpcn0KK30KKworRklMRVNfJHtQTn0gPSAiL2luaXQgJHtzeXNjb25mZGlyfS9yYy5sb2NhbC5zYW1wbGUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvQ09QWUlORy5HUEx2MiBiL3lvY3RvLXBva3kvbWV0YS9DT1BZSU5HLkdQTHYyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MTE5MDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvQ09QWUlORy5HUEx2MgpAQCAtMCwwICsxLDMzOSBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvQ09QWUlORy5NSVQgYi95b2N0by1wb2t5L21ldGEvQ09QWUlORy5NSVQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI5NTBkYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9DT1BZSU5HLk1JVApAQCAtMCwwICsxLDE3IEBACitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IAorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIAordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIAorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIAorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIAorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiAKK1RIRSBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2FsbGFyY2guYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2FsbGFyY2guYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmVhN2MwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYWxsYXJjaC5iYmNsYXNzCkBAIC0wLDAgKzEsNDMgQEAKKyMKKyMgVGhpcyBjbGFzcyBpcyB1c2VkIGZvciBhcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQgcmVjaXBlcy9kYXRhIGZpbGVzICh1c2FsbHkgc2NyaXB0cykKKyMKKworIyBFeHBhbmQgU1RBR0lOR19ESVJfSE9TVCBzaW5jZSBmb3IgY3Jvc3MtY2FuYWRpYW4vbmF0aXZlL25hdGl2ZXNkaywgdGhpcyB3aWxsCisjIHBvaW50IGVsc2V3aGVyZSBhZnRlciB0aGVzZSBjaGFuZ2VzLgorU1RBR0lOR19ESVJfSE9TVCA6PSAiJHtTVEFHSU5HX0RJUl9IT1NUfSIKKworUEFDS0FHRV9BUkNIID0gImFsbCIKKworcHl0aG9uICgpIHsKKyAgICAjIEFsbG93IHRoaXMgY2xhc3MgdG8gYmUgaW5jbHVkZWQgYnV0IG92ZXJyaWRkZW4gLSBvbmx5IHNldAorICAgICMgdGhlIHZhbHVlcyBpZiB3ZSdyZSBzdGlsbCAiYWxsIiBwYWNrYWdlIGFyY2guCisgICAgaWYgZC5nZXRWYXIoIlBBQ0tBR0VfQVJDSCIsIFRydWUpID09ICJhbGwiOgorICAgICAgICAjIE5vIG5lZWQgZm9yIHZpcnR1YWwvbGliYyBvciBhIGNyb3NzIGNvbXBpbGVyCisgICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX0RFRkFVTFRfREVQUyIsIjEiKQorCisgICAgICAgICMgU2V0IHRoZXNlIHRvIGEgY29tbW9uIHNldCBvZiB2YWx1ZXMsIHdlIHNob3VsZG4ndCBiZSB1c2luZyB0aGVtIG90aGVyIHRoYXQgZm9yIFdPUktESVIgZGlyZWN0b3J5CisgICAgICAgICMgbmFtaW5nIGFueXdheQorICAgICAgICBkLnNldFZhcigiVEFSR0VUX0FSQ0giLCAiYWxsYXJjaCIpCisgICAgICAgIGQuc2V0VmFyKCJUQVJHRVRfT1MiLCAibGludXgiKQorICAgICAgICBkLnNldFZhcigiVEFSR0VUX0NDX0FSQ0giLCAibm9uZSIpCisgICAgICAgIGQuc2V0VmFyKCJUQVJHRVRfTERfQVJDSCIsICJub25lIikKKyAgICAgICAgZC5zZXRWYXIoIlRBUkdFVF9BU19BUkNIIiwgIm5vbmUiKQorICAgICAgICBkLnNldFZhcigiVEFSR0VUX0ZQVSIsICIiKQorICAgICAgICBkLnNldFZhcigiVEFSR0VUX1BSRUZJWCIsICIiKQorICAgICAgICBkLnNldFZhcigiUEFDS0FHRV9FWFRSQV9BUkNIUyIsICIiKQorICAgICAgICBkLnNldFZhcigiU0RLX0FSQ0giLCAibm9uZSIpCisgICAgICAgIGQuc2V0VmFyKCJTREtfQ0NfQVJDSCIsICJub25lIikKKworICAgICAgICAjIEF2b2lkIHRoaXMgYmVpbmcgdW5uZWNlc3NhcmlseSBkaWZmZXJlbnQgZHVlIHRvIG51YW5jZXMgb2YKKyAgICAgICAgIyB0aGUgdGFyZ2V0IG1hY2hpbmUgdGhhdCBhcmVuJ3QgaW1wb3J0YW50IGZvciAiYWxsIiBhcmNoCisgICAgICAgICMgcGFja2FnZXMuCisgICAgICAgIGQuc2V0VmFyKCJMREZMQUdTIiwgIiIpCisKKyAgICAgICAgIyBObyBuZWVkIHRvIGRvIHNoYXJlZCBsaWJyYXJ5IHByb2Nlc3Npbmcgb3IgZGVidWcgc3ltYm9sIGhhbmRsaW5nCisgICAgICAgIGQuc2V0VmFyKCJFWENMVURFX0ZST01fU0hMSUJTIiwgIjEiKQorICAgICAgICBkLnNldFZhcigiSU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUIiwgIjEiKQorICAgICAgICBkLnNldFZhcigiSU5ISUJJVF9QQUNLQUdFX1NUUklQIiwgIjEiKQorICAgIGVsaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygncGFja2FnZWdyb3VwJywgZCkgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKToKKyAgICAgICAgYmIuZXJyb3IoIlBsZWFzZSBlbnN1cmUgcmVjaXBlICVzIHNldHMgUEFDS0FHRV9BUkNIIGJlZm9yZSBpbmhlcml0IHBhY2thZ2Vncm91cCIgJSBkLmdldFZhcigiRklMRSIsIFRydWUpKQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9hcmNoaXZlci5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYXJjaGl2ZXIuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODlkNzA3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYXJjaGl2ZXIuYmJjbGFzcwpAQCAtMCwwICsxLDM4NSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgVGhpcyBiYmNsYXNzIGlzIHVzZWQgZm9yIGNyZWF0aW5nIGFyY2hpdmUgZm9yOgorIyAxKSBvcmlnaW5hbCAob3IgdW5wYWNrZWQpIHNvdXJjZTogQVJDSElWRVJfTU9ERVtzcmNdID0gIm9yaWdpbmFsIgorIyAyKSBwYXRjaGVkIHNvdXJjZTogQVJDSElWRVJfTU9ERVtzcmNdID0gInBhdGNoZWQiIChkZWZhdWx0KQorIyAzKSBjb25maWd1cmVkIHNvdXJjZTogQVJDSElWRVJfTU9ERVtzcmNdID0gImNvbmZpZ3VyZWQiCisjIDQpIFRoZSBwYXRjaGVzIGJldHdlZW4gZG9fdW5wYWNrIGFuZCBkb19wYXRjaDoKKyMgICAgQVJDSElWRVJfTU9ERVtkaWZmXSA9ICIxIgorIyAgICBBbmQgeW91IGNhbiBzZXQgdGhlIG9uZSB0aGF0IHlvdSdkIGxpa2UgdG8gZXhjbHVkZSBmcm9tIHRoZSBkaWZmOgorIyAgICBBUkNISVZFUl9NT0RFW2RpZmYtZXhjbHVkZV0gPz0gIi5wYyBhdXRvbTR0ZS5jYWNoZSBwYXRjaGVzIgorIyA1KSBUaGUgZW52aXJvbm1lbnQgZGF0YSwgc2ltaWxhciB0byAnYml0YmFrZSAtZSByZWNpcGUnOgorIyAgICBBUkNISVZFUl9NT0RFW2R1bXBkYXRhXSA9ICIxIgorIyA2KSBUaGUgcmVjaXBlICguYmIgYW5kIC5pbmMpOiBBUkNISVZFUl9NT0RFW3JlY2lwZV0gPSAiMSIKKyMgNykgV2hldGhlciBvdXRwdXQgdGhlIC5zcmMucnBtIHBhY2thZ2U6CisjICAgIEFSQ0hJVkVSX01PREVbc3JwbV0gPSAiMSIKKyMgOCkgRmlsdGVyIHRoZSBsaWNlbnNlLCB0aGUgcmVjaXBlIHdob3NlIGxpY2Vuc2UgaW4KKyMgICAgQ09QWUxFRlRfTElDRU5TRV9JTkNMVURFIHdpbGwgYmUgaW5jbHVkZWQsIGFuZCBpbgorIyAgICBDT1BZTEVGVF9MSUNFTlNFX0VYQ0xVREUgd2lsbCBiZSBleGNsdWRlZC4KKyMgICAgQ09QWUxFRlRfTElDRU5TRV9JTkNMVURFID0gJ0dQTCogTEdQTConCisjICAgIENPUFlMRUZUX0xJQ0VOU0VfRVhDTFVERSA9ICdDTE9TRUQgUHJvcHJpZXRhcnknCisjIDkpIFRoZSByZWNpcGUgdHlwZSB0aGF0IHdpbGwgYmUgYXJjaGl2ZWQ6CisjICAgIENPUFlMRUZUX1JFQ0lQRV9UWVBFUyA9ICd0YXJnZXQnCisjCisKKyMgRG9uJ3QgZmlsdGVyIHRoZSBsaWNlbnNlIGJ5IGRlZmF1bHQKK0NPUFlMRUZUX0xJQ0VOU0VfSU5DTFVERSA/PSAnJworQ09QWUxFRlRfTElDRU5TRV9FWENMVURFID89ICcnCisjIENyZWF0ZSBhcmNoaXZlIGZvciBhbGwgdGhlIHJlY2lwZSB0eXBlcworQ09QWUxFRlRfUkVDSVBFX1RZUEVTID89ICd0YXJnZXQgbmF0aXZlIG5hdGl2ZXNkayBjcm9zcyBjcm9zc3NkayBjcm9zcy1jYW5hZGlhbicKK2luaGVyaXQgY29weWxlZnRfZmlsdGVyCisKK0FSQ0hJVkVSX01PREVbc3JwbV0gPz0gIjAiCitBUkNISVZFUl9NT0RFW3NyY10gPz0gInBhdGNoZWQiCitBUkNISVZFUl9NT0RFW2RpZmZdID89ICIwIgorQVJDSElWRVJfTU9ERVtkaWZmLWV4Y2x1ZGVdID89ICIucGMgYXV0b200dGUuY2FjaGUgcGF0Y2hlcyIKK0FSQ0hJVkVSX01PREVbZHVtcGRhdGFdID89ICIwIgorQVJDSElWRVJfTU9ERVtyZWNpcGVdID89ICIwIgorCitERVBMT1lfRElSX1NSQyA/PSAiJHtERVBMT1lfRElSfS9zb3VyY2VzIgorQVJDSElWRVJfVE9QRElSID89ICIke1dPUktESVJ9L2RlcGxveS1zb3VyY2VzIgorQVJDSElWRVJfT1VURElSID0gIiR7QVJDSElWRVJfVE9QRElSfS8ke1RBUkdFVF9TWVN9LyR7UEZ9LyIKK0FSQ0hJVkVSX1dPUktESVIgPSAiJHtXT1JLRElSfS9hcmNoaXZlci13b3JrLyIKKworZG9fZHVtcGRhdGFbZGlyc10gPSAiJHtBUkNISVZFUl9PVVRESVJ9IgorZG9fYXJfcmVjaXBlW2RpcnNdID0gIiR7QVJDSElWRVJfT1VURElSfSIKK2RvX2FyX29yaWdpbmFsW2RpcnNdID0gIiR7QVJDSElWRVJfT1VURElSfSAke0FSQ0hJVkVSX1dPUktESVJ9IgorZG9fZGVwbG95X2FyY2hpdmVzW2RpcnNdID0gIiR7V09SS0RJUn0iCitkb19kZXBsb3lfYWxsX2FyY2hpdmVzW2RpcnNdID0gIiR7V09SS0RJUn0iCisKKyMgVGhpcyBpcyBhIGNvbnZlbmllbmNlIGZvciB0aGUgc2hlbGwgc2NyaXB0IHRvIHVzZSBpdAorCisKK3B5dGhvbiAoKSB7CisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorCisgICAgaW5jbHVkZWQsIHJlYXNvbiA9IGNvcHlsZWZ0X3Nob3VsZF9pbmNsdWRlKGQpCisgICAgaWYgbm90IGluY2x1ZGVkOgorICAgICAgICBiYi5kZWJ1ZygxLCAnYXJjaGl2ZXI6ICVzIGlzIGV4Y2x1ZGVkOiAlcycgJSAocG4sIHJlYXNvbikpCisgICAgICAgIHJldHVybgorICAgIGVsc2U6CisgICAgICAgIGJiLmRlYnVnKDEsICdhcmNoaXZlcjogJXMgaXMgaW5jbHVkZWQ6ICVzJyAlIChwbiwgcmVhc29uKSkKKworICAgIGFyX3NyYyA9IGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdzcmMnLCBUcnVlKQorICAgIGFyX2R1bXBkYXRhID0gZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ2R1bXBkYXRhJywgVHJ1ZSkKKyAgICBhcl9yZWNpcGUgPSBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAncmVjaXBlJywgVHJ1ZSkKKworICAgIGlmIGFyX3NyYyA9PSAib3JpZ2luYWwiOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2RlcGxveV9hcmNoaXZlcycsICdkZXBlbmRzJywgJyAlczpkb19hcl9vcmlnaW5hbCcgJSBwbikKKyAgICBlbGlmIGFyX3NyYyA9PSAicGF0Y2hlZCI6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZGVwbG95X2FyY2hpdmVzJywgJ2RlcGVuZHMnLCAnICVzOmRvX2FyX3BhdGNoZWQnICUgcG4pCisgICAgZWxpZiBhcl9zcmMgPT0gImNvbmZpZ3VyZWQiOgorICAgICAgICAjIFdlIGNhbid0IHVzZSAiYWRkdGFzayBkb19hcl9jb25maWd1cmVkIGFmdGVyIGRvX2NvbmZpZ3VyZSIgc2luY2UgaXQKKyAgICAgICAgIyB3aWxsIGNhdXNlIHRoZSBkZXB0YXNrIG9mIGRvX3BvcHVsYXRlX3N5c3Jvb3QgdG8gcnVuIG5vdCBtYXR0ZXIgd2hhdAorICAgICAgICAjIGFyY2hpdmVzIHdlIG5lZWQsIHNvIHdlIGFkZCB0aGUgZGVwZW5kcyBoZXJlLgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2FyX2NvbmZpZ3VyZWQnLCAnZGVwZW5kcycsICcgJXM6ZG9fY29uZmlndXJlJyAlIHBuKQorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2RlcGxveV9hcmNoaXZlcycsICdkZXBlbmRzJywgJyAlczpkb19hcl9jb25maWd1cmVkJyAlIHBuKQorICAgIGVsaWYgYXJfc3JjOgorICAgICAgICBiYi5mYXRhbCgiSW52YWxpZCBBUkNISVZFUl9NT0RFW3NyY106ICVzIiAlIGFyX3NyYykKKworICAgIGlmIGFyX2R1bXBkYXRhID09ICIxIjoKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19kZXBsb3lfYXJjaGl2ZXMnLCAnZGVwZW5kcycsICcgJXM6ZG9fZHVtcGRhdGEnICUgcG4pCisKKyAgICBpZiBhcl9yZWNpcGUgPT0gIjEiOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2RlcGxveV9hcmNoaXZlcycsICdkZXBlbmRzJywgJyAlczpkb19hcl9yZWNpcGUnICUgcG4pCisKKyAgICAjIE91dHB1dCB0aGUgc3JwbSBwYWNrYWdlCisgICAgYXJfc3JwbSA9IGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdzcnBtJywgVHJ1ZSkKKyAgICBpZiBhcl9zcnBtID09ICIxIjoKKyAgICAgICAgaWYgZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgIT0gJycgYW5kIGQuZ2V0VmFyKCdJTUFHRV9QS0dUWVBFJywgVHJ1ZSkgPT0gJ3JwbSc6CisgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2RlcGxveV9hcmNoaXZlcycsICdkZXBlbmRzJywgJyAlczpkb19wYWNrYWdlX3dyaXRlX3JwbScgJSBwbikKKyAgICAgICAgICAgIGlmIGFyX2R1bXBkYXRhID09ICIxIjoKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJywgJ2RlcGVuZHMnLCAnICVzOmRvX2R1bXBkYXRhJyAlIHBuKQorICAgICAgICAgICAgaWYgYXJfcmVjaXBlID09ICIxIjoKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJywgJ2RlcGVuZHMnLCAnICVzOmRvX2FyX3JlY2lwZScgJSBwbikKKyAgICAgICAgICAgIGlmIGFyX3NyYyA9PSAib3JpZ2luYWwiOgorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV9ycG0nLCAnZGVwZW5kcycsICcgJXM6ZG9fYXJfb3JpZ2luYWwnICUgcG4pCisgICAgICAgICAgICBlbGlmIGFyX3NyYyA9PSAicGF0Y2hlZCI6CisgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlX3dyaXRlX3JwbScsICdkZXBlbmRzJywgJyAlczpkb19hcl9wYXRjaGVkJyAlIHBuKQorICAgICAgICAgICAgZWxpZiBhcl9zcmMgPT0gImNvbmZpZ3VyZWQiOgorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV9ycG0nLCAnZGVwZW5kcycsICcgJXM6ZG9fYXJfY29uZmlndXJlZCcgJSBwbikKKworICAgICMgVGhlIGdjYyBzdGFmZiB1c2VzIHNoYXJlZCBzb3VyY2UKKyAgICBmbGFnID0gZC5nZXRWYXJGbGFnKCJkb191bnBhY2siLCAic3RhbXAtYmFzZSIsIFRydWUpCisgICAgaWYgZmxhZzoKKyAgICAgICAgaWYgYXJfc3JjIGluIFsgJ29yaWdpbmFsJywgJ3BhdGNoZWQnIF06CisgICAgICAgICAgICBhcl9vdXRkaXIgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0FSQ0hJVkVSX1RPUERJUicsIFRydWUpLCAnd29yay1zaGFyZWQnKQorICAgICAgICAgICAgZC5zZXRWYXIoJ0FSQ0hJVkVSX09VVERJUicsIGFyX291dGRpcikKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19hcl9vcmlnaW5hbCcsICdzdGFtcC1iYXNlJywgZmxhZykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19hcl9wYXRjaGVkJywgJ3N0YW1wLWJhc2UnLCBmbGFnKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3VucGFja19hbmRfcGF0Y2gnLCAnc3RhbXAtYmFzZScsIGZsYWcpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fYXJfb3JpZ2luYWwnLCAndmFyZGVwc2V4Y2x1ZGUnLCAnUE4gUEYgQVJDSElWRVJfT1VURElSIFdPUktESVInKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3VucGFja19hbmRfcGF0Y2gnLCAndmFyZGVwc2V4Y2x1ZGUnLCAnUE4gUEYgQVJDSElWRVJfT1VURElSIFdPUktESVInKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2FyX3BhdGNoZWQnLCAndmFyZGVwc2V4Y2x1ZGUnLCAnUE4gUEYgQVJDSElWRVJfT1VURElSIFdPUktESVInKQorICAgICAgICBkLnNldFZhckZsYWcoJ2NyZWF0ZV9kaWZmX2d6JywgJ3ZhcmRlcHNleGNsdWRlJywgJ1BGJykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdjcmVhdGVfdGFyYmFsbCcsICd2YXJkZXBzZXhjbHVkZScsICdQRicpCisKKyAgICAgICAgZmxhZ19jbGVhbiA9IGQuZ2V0VmFyRmxhZygnZG9fdW5wYWNrJywgJ3N0YW1wLWJhc2UtY2xlYW4nLCBUcnVlKQorICAgICAgICBpZiBmbGFnX2NsZWFuOgorICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19hcl9vcmlnaW5hbCcsICdzdGFtcC1iYXNlLWNsZWFuJywgZmxhZ19jbGVhbikKKyAgICAgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fYXJfcGF0Y2hlZCcsICdzdGFtcC1iYXNlLWNsZWFuJywgZmxhZ19jbGVhbikKKyAgICAgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fdW5wYWNrX2FuZF9wYXRjaCcsICdzdGFtcC1iYXNlLWNsZWFuJywgZmxhZ19jbGVhbikKK30KKworIyBUYWtlIGFsbCB0aGUgc291cmNlcyBmb3IgYSByZWNpcGUgYW5kIHB1dHMgdGhlbSBpbiBXT1JLRElSL2FyY2hpdmVyLXdvcmsvLgorIyBGaWxlcyBpbiBTUkNfVVJJIGFyZSBjb3BpZWQgZGlyZWN0bHksIGFueXRoaW5nIHRoYXQncyBhIGRpcmVjdG9yeQorIyAoZS5nLiBnaXQgcmVwb3NpdG9yaWVzKSBpcyAidW5wYWNrZWQiIGFuZCB0aGVuIHB1dCBpbnRvIGEgdGFyYmFsbC4KK3B5dGhvbiBkb19hcl9vcmlnaW5hbCgpIHsKKworICAgIGltcG9ydCBzaHV0aWwsIHRhcmZpbGUsIHRlbXBmaWxlCisKKyAgICBpZiBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnc3JjJywgVHJ1ZSkgIT0gIm9yaWdpbmFsIjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBhcl9vdXRkaXIgPSBkLmdldFZhcignQVJDSElWRVJfT1VURElSJywgVHJ1ZSkKKyAgICBiYi5ub3RlKCdBcmNoaXZpbmcgdGhlIG9yaWdpbmFsIHNvdXJjZS4uLicpCisgICAgZmV0Y2ggPSBiYi5mZXRjaDIuRmV0Y2goW10sIGQpCisgICAgZm9yIHVybCBpbiBmZXRjaC51cmxzOgorICAgICAgICBsb2NhbCA9IGZldGNoLmxvY2FscGF0aCh1cmwpLnJzdHJpcCgiLyIpOworICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShsb2NhbCk6CisgICAgICAgICAgICBzaHV0aWwuY29weShsb2NhbCwgYXJfb3V0ZGlyKQorICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIobG9jYWwpOgorICAgICAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGxvY2FsKQorCisgICAgICAgICAgICB0bXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKGRpcj1kLmdldFZhcignQVJDSElWRVJfV09SS0RJUicsIFRydWUpKQorICAgICAgICAgICAgZmV0Y2gudW5wYWNrKHRtcGRpciwgKHVybCwpKQorCisgICAgICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgICAgICAjIFdlIGVsaW1pbmF0ZSBhbnkgQVVUT0lOQysgaW4gdGhlIHJldmlzaW9uLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNyY19yZXYgPSBiYi5mZXRjaDIuZ2V0X3NyY3JldihkKS5yZXBsYWNlKCdBVVRPSU5DKycsJycpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgc3JjX3JldiA9ICdOT1JFVicKKyAgICAgICAgICAgIHRhcm5hbWUgPSBvcy5wYXRoLmpvaW4oYXJfb3V0ZGlyLCBiYXNlbmFtZSArICcuJyArIHNyY19yZXYgKyAnLnRhci5neicpCisgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odGFybmFtZSwgJ3c6Z3onKQorICAgICAgICAgICAgdGFyLmFkZCgnLicpCisgICAgICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgIyBFbWl0IHBhdGNoIHNlcmllcyBmaWxlcyBmb3IgJ29yaWdpbmFsJworICAgIGJiLm5vdGUoJ1dyaXRpbmcgcGF0Y2ggc2VyaWVzIGZpbGVzLi4uJykKKyAgICBmb3IgcGF0Y2ggaW4gc3JjX3BhdGNoZXMoZCk6CisgICAgICAgIF8sIF8sIGxvY2FsLCBfLCBfLCBwYXJtID0gYmIuZmV0Y2guZGVjb2RldXJsKHBhdGNoKQorICAgICAgICBwYXRjaGRpciA9IHBhcm0uZ2V0KCdwYXRjaGRpcicpCisgICAgICAgIGlmIHBhdGNoZGlyOgorICAgICAgICAgICAgc2VyaWVzID0gb3MucGF0aC5qb2luKGFyX291dGRpciwgJ3Nlcmllcy5zdWJkaXIuJXMnICUgcGF0Y2hkaXIucmVwbGFjZSgnLycsICdfJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZXJpZXMgPSBvcy5wYXRoLmpvaW4oYXJfb3V0ZGlyLCAnc2VyaWVzJykKKworICAgICAgICB3aXRoIG9wZW4oc2VyaWVzLCAnYScpIGFzIHM6CisgICAgICAgICAgICBzLndyaXRlKCclcyAtcCVzXG4nICUgKG9zLnBhdGguYmFzZW5hbWUobG9jYWwpLCBwYXJtWydzdHJpcGxldmVsJ10pKQorfQorCitweXRob24gZG9fYXJfcGF0Y2hlZCgpIHsKKworICAgIGlmIGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdzcmMnLCBUcnVlKSAhPSAncGF0Y2hlZCc6CisgICAgICAgIHJldHVybgorCisgICAgIyBHZXQgdGhlIEFSQ0hJVkVSX09VVERJUiBiZWZvcmUgd2UgcmVzZXQgdGhlIFdPUktESVIKKyAgICBhcl9vdXRkaXIgPSBkLmdldFZhcignQVJDSElWRVJfT1VURElSJywgVHJ1ZSkKKyAgICBiYi5ub3RlKCdBcmNoaXZpbmcgdGhlIHBhdGNoZWQgc291cmNlLi4uJykKKyAgICBkLnNldFZhcignV09SS0RJUicsIGQuZ2V0VmFyKCdBUkNISVZFUl9XT1JLRElSJywgVHJ1ZSkpCisgICAgIyBUaGUgZ2NjIHN0YWZmIHVzZXMgc2hhcmVkIHNvdXJjZQorICAgIGZsYWcgPSBkLmdldFZhckZsYWcoJ2RvX3VucGFjaycsICdzdGFtcC1iYXNlJywgVHJ1ZSkKKyAgICBpZiBmbGFnOgorICAgICAgICBjcmVhdGVfdGFyYmFsbChkLCBkLmdldFZhcignUycsIFRydWUpLCAncGF0Y2hlZCcsIGFyX291dGRpciwgJ2djYycpCisgICAgZWxzZToKKyAgICAgICAgY3JlYXRlX3RhcmJhbGwoZCwgZC5nZXRWYXIoJ1MnLCBUcnVlKSwgJ3BhdGNoZWQnLCBhcl9vdXRkaXIpCit9CisKK3B5dGhvbiBkb19hcl9jb25maWd1cmVkKCkgeworICAgIGltcG9ydCBzaHV0aWwKKworICAgIGFyX291dGRpciA9IGQuZ2V0VmFyKCdBUkNISVZFUl9PVVRESVInLCBUcnVlKQorICAgIGlmIGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdzcmMnLCBUcnVlKSA9PSAnY29uZmlndXJlZCc6CisgICAgICAgIGJiLm5vdGUoJ0FyY2hpdmluZyB0aGUgY29uZmlndXJlZCBzb3VyY2UuLi4nKQorICAgICAgICAjIFRoZSBsaWJ0b29sLW5hdGl2ZSdzIGRvX2NvbmZpZ3VyZSB3aWxsIHJlbW92ZSB0aGUKKyAgICAgICAgIyAke1NUQUdJTkdfREFUQURJUn0vYWNsb2NhbC9saWJ0b29sLm00LCBzbyB3ZSBjYW4ndCByZS1ydW4gdGhlCisgICAgICAgICMgZG9fY29uZmlndXJlLCB3ZSBhcmNoaXZlIHRoZSBhbHJlYWR5IGNvbmZpZ3VyZWQgJHtTfSB0bworICAgICAgICAjIGluc3RlYWQgb2YuCisgICAgICAgIGlmIGQuZ2V0VmFyKCdQTicsIFRydWUpICE9ICdsaWJ0b29sLW5hdGl2ZSc6CisgICAgICAgICAgICAjIENoYW5nZSB0aGUgV09SS0RJUiB0byBtYWtlIGRvX2NvbmZpZ3VyZSBydW4gaW4gYW5vdGhlciBkaXIuCisgICAgICAgICAgICBkLnNldFZhcignV09SS0RJUicsIGQuZ2V0VmFyKCdBUkNISVZFUl9XT1JLRElSJywgVHJ1ZSkpCisgICAgICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwteW9jdG8nLCBkKToKKyAgICAgICAgICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2RvX2tlcm5lbF9jb25maWdtZScsIGQpCisgICAgICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjbWFrZScsIGQpOgorICAgICAgICAgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9fZ2VuZXJhdGVfdG9vbGNoYWluX2ZpbGUnLCBkKQorICAgICAgICAgICAgcHJlZnVuY3MgPSBkLmdldFZhckZsYWcoJ2RvX2NvbmZpZ3VyZScsICdwcmVmdW5jcycsIFRydWUpCisgICAgICAgICAgICBmb3IgZnVuYyBpbiAocHJlZnVuY3Mgb3IgJycpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaWYgZnVuYyAhPSAic3lzcm9vdF9jbGVhbnNzdGF0ZSI6CisgICAgICAgICAgICAgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhmdW5jLCBkKQorICAgICAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdkb19jb25maWd1cmUnLCBkKQorICAgICAgICAgICAgcG9zdGZ1bmNzID0gZC5nZXRWYXJGbGFnKCdkb19jb25maWd1cmUnLCAncG9zdGZ1bmNzJywgVHJ1ZSkKKyAgICAgICAgICAgIGZvciBmdW5jIGluIChwb3N0ZnVuY3Mgb3IgJycpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaWYgZnVuYyAhPSAiZG9fcWFfY29uZmlndXJlIjoKKyAgICAgICAgICAgICAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGZ1bmMsIGQpCisgICAgICAgIHNyY2RpciA9IGQuZ2V0VmFyKCdTJywgVHJ1ZSkKKyAgICAgICAgYnVpbGRkaXIgPSBkLmdldFZhcignQicsIFRydWUpCisgICAgICAgIGlmIHNyY2RpciAhPSBidWlsZGRpcjoKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGJ1aWxkZGlyKToKKyAgICAgICAgICAgICAgICBvZS5wYXRoLmNvcHl0cmVlKGJ1aWxkZGlyLCBvcy5wYXRoLmpvaW4oc3JjZGlyLCBcCisgICAgICAgICAgICAgICAgICAgICdidWlsZC4lcy5hcl9jb25maWd1cmVkJyAlIGQuZ2V0VmFyKCdQRicsIFRydWUpKSkKKyAgICAgICAgY3JlYXRlX3RhcmJhbGwoZCwgc3JjZGlyLCAnY29uZmlndXJlZCcsIGFyX291dGRpcikKK30KKworZGVmIGNyZWF0ZV90YXJiYWxsKGQsIHNyY2Rpciwgc3VmZml4LCBhcl9vdXRkaXIsIHBmPU5vbmUpOgorICAgICIiIgorICAgIGNyZWF0ZSB0aGUgdGFyYmFsbCBmcm9tIHNyY2RpcgorICAgICIiIgorICAgIGltcG9ydCB0YXJmaWxlCisKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoYXJfb3V0ZGlyKQorICAgIGlmIHBmOgorICAgICAgICB0YXJuYW1lID0gb3MucGF0aC5qb2luKGFyX291dGRpciwgJyVzLSVzLnRhci5neicgJSAocGYsIHN1ZmZpeCkpCisgICAgZWxzZToKKyAgICAgICAgdGFybmFtZSA9IG9zLnBhdGguam9pbihhcl9vdXRkaXIsICclcy0lcy50YXIuZ3onICUgXAorICAgICAgICAgICAgKGQuZ2V0VmFyKCdQRicsIFRydWUpLCBzdWZmaXgpKQorCisgICAgc3JjZGlyID0gc3JjZGlyLnJzdHJpcCgnLycpCisgICAgZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZShzcmNkaXIpCisgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHNyY2RpcikKKyAgICBvcy5jaGRpcihkaXJuYW1lKQorICAgIGJiLm5vdGUoJ0NyZWF0aW5nICVzJyAlIHRhcm5hbWUpCisgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRhcm5hbWUsICd3Omd6JykKKyAgICB0YXIuYWRkKGJhc2VuYW1lKQorICAgIHRhci5jbG9zZSgpCisKKyMgY3JlYXRpbmcgLmRpZmYuZ3ogYmV0d2VlbiBzb3VyY2Uub3JpZyBhbmQgc291cmNlCitkZWYgY3JlYXRlX2RpZmZfZ3ooZCwgc3JjX29yaWcsIHNyYywgYXJfb3V0ZGlyKToKKworICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzcmMpIG9yIG5vdCBvcy5wYXRoLmlzZGlyKHNyY19vcmlnKToKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIFRoZSBkaWZmIC0tZXhjbHVkZSBjYW4ndCBleGNsdWRlIHRoZSBmaWxlIHdpdGggcGF0aCwgc28gd2UgY29weQorICAgICMgdGhlIHBhdGNoZWQgc291cmNlLCBhbmQgcmVtb3ZlIHRoZSBmaWxlcyB0aGF0IHdlJ2QgbGlrZSB0bworICAgICMgZXhjbHVkZS4KKyAgICBzcmNfcGF0Y2hlZCA9IHNyYyArICcucGF0Y2hlZCcKKyAgICBvZS5wYXRoLmNvcHloYXJkbGlua3RyZWUoc3JjLCBzcmNfcGF0Y2hlZCkKKyAgICBmb3IgaSBpbiBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnZGlmZi1leGNsdWRlJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKG9zLnBhdGguam9pbihzcmNfb3JpZywgaSksIHJlY3Vyc2U9VHJ1ZSkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKG9zLnBhdGguam9pbihzcmNfcGF0Y2hlZCwgaSksIHJlY3Vyc2U9VHJ1ZSkKKworICAgIGRpcm5hbWUgPSBvcy5wYXRoLmRpcm5hbWUoc3JjKQorICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShzcmMpCisgICAgb3MuY2hkaXIoZGlybmFtZSkKKyAgICBvdXRfZmlsZSA9IG9zLnBhdGguam9pbihhcl9vdXRkaXIsICclcy1kaWZmLmd6JyAlIGQuZ2V0VmFyKCdQRicsIFRydWUpKQorICAgIGRpZmZfY21kID0gJ2RpZmYgLU5hdXIgJXMub3JpZyAlcy5wYXRjaGVkIHwgZ3ppcCAtYyA+ICVzJyAlIChiYXNlbmFtZSwgYmFzZW5hbWUsIG91dF9maWxlKQorICAgIHN1YnByb2Nlc3MuY2FsbChkaWZmX2NtZCwgc2hlbGw9VHJ1ZSkKKyAgICBiYi51dGlscy5yZW1vdmUoc3JjX3BhdGNoZWQsIHJlY3Vyc2U9VHJ1ZSkKKworIyBSdW4gZG9fdW5wYWNrIGFuZCBkb19wYXRjaAorcHl0aG9uIGRvX3VucGFja19hbmRfcGF0Y2goKSB7CisgICAgaWYgZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ3NyYycsIFRydWUpIG5vdCBpbiBcCisgICAgICAgICAgICBbICdwYXRjaGVkJywgJ2NvbmZpZ3VyZWQnXSBhbmQgXAorICAgICAgICAgICAgZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ2RpZmYnLCBUcnVlKSAhPSAnMSc6CisgICAgICAgIHJldHVybgorCisgICAgYXJfb3V0ZGlyID0gZC5nZXRWYXIoJ0FSQ0hJVkVSX09VVERJUicsIFRydWUpCisKKyAgICAjIENoYW5nZSB0aGUgV09SS0RJUiB0byBtYWtlIGRvX3VucGFjayBkb19wYXRjaCBydW4gaW4gYW5vdGhlciBkaXIuCisgICAgZC5zZXRWYXIoJ1dPUktESVInLCBkLmdldFZhcignQVJDSElWRVJfV09SS0RJUicsIFRydWUpKQorCisgICAgIyBUaGUgY2hhbmdlZCAnV09SS0RJUicgYWxzbyBjYXN1ZWQgJ0InIGNoYW5nZWQsIGNyZWF0ZSBkaXIgJ0InIGZvciB0aGUKKyAgICAjIHBvc3NpYmx5IHJlcXVpcmluZyBvZiB0aGUgZm9sbG93aW5nIHRhc2tzIChzdWNoIGFzIHNvbWUgcmVjaXBlcydzCisgICAgIyBkb19wYXRjaCByZXF1aXJlZCAnQicgZXhpc3RlZCkuCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGQuZ2V0VmFyKCdCJywgVHJ1ZSkpCisKKyAgICAjIFRoZSBrZXJuZWwgc291cmNlIGlzIHJlYWR5IGFmdGVyIGRvX3ZhbGlkYXRlX2JyYW5jaGVzCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygna2VybmVsLXlvY3RvJywgZCk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9fdW5wYWNrJywgZCkKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdkb19rZXJuZWxfY2hlY2tvdXQnLCBkKQorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2RvX3ZhbGlkYXRlX2JyYW5jaGVzJywgZCkKKyAgICBlbHNlOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2RvX3VucGFjaycsIGQpCisKKyAgICAjIFNhdmUgdGhlIG9yaWdpbmFsIHNvdXJjZSBmb3IgY3JlYXRpbmcgdGhlIHBhdGNoZXMKKyAgICBpZiBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnZGlmZicsIFRydWUpID09ICcxJzoKKyAgICAgICAgc3JjID0gZC5nZXRWYXIoJ1MnLCBUcnVlKS5yc3RyaXAoJy8nKQorICAgICAgICBzcmNfb3JpZyA9ICclcy5vcmlnJyAlIHNyYworICAgICAgICBvZS5wYXRoLmNvcHl0cmVlKHNyYywgc3JjX29yaWcpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdkb19wYXRjaCcsIGQpCisgICAgIyBDcmVhdGUgdGhlIHBhdGNoZXMKKyAgICBpZiBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnZGlmZicsIFRydWUpID09ICcxJzoKKyAgICAgICAgYmIubm90ZSgnQ3JlYXRpbmcgZGlmZiBnei4uLicpCisgICAgICAgIGNyZWF0ZV9kaWZmX2d6KGQsIHNyY19vcmlnLCBzcmMsIGFyX291dGRpcikKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNyY19vcmlnLCByZWN1cnNlPVRydWUpCit9CisKK3B5dGhvbiBkb19hcl9yZWNpcGUgKCkgeworICAgICIiIgorICAgIGFyY2hpdmUgdGhlIHJlY2lwZSwgaW5jbHVkaW5nIC5iYiBhbmQgLmluYy4KKyAgICAiIiIKKyAgICBpbXBvcnQgcmUKKyAgICBpbXBvcnQgc2h1dGlsCisKKyAgICByZXF1aXJlX3JlID0gcmUuY29tcGlsZSggciJyZXF1aXJlXHMrKC4rKSIgKQorICAgIGluY2x1ZGVfcmUgPSByZS5jb21waWxlKCByImluY2x1ZGVccysoLispIiApCisgICAgYmJmaWxlID0gZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKQorICAgIG91dGRpciA9IG9zLnBhdGguam9pbihkLmdldFZhcignV09SS0RJUicsIFRydWUpLCBcCisgICAgICAgICAgICAnJXMtcmVjaXBlJyAlIGQuZ2V0VmFyKCdQRicsIFRydWUpKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihvdXRkaXIpCisgICAgc2h1dGlsLmNvcHkoYmJmaWxlLCBvdXRkaXIpCisKKyAgICBkaXJuYW1lID0gb3MucGF0aC5kaXJuYW1lKGJiZmlsZSkKKyAgICBiYnBhdGggPSAnJXM6JXMnICUgKGRpcm5hbWUsIGQuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKSkKKyAgICBmID0gb3BlbihiYmZpbGUsICdyJykKKyAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICBpbmNmaWxlID0gTm9uZQorICAgICAgICBpZiByZXF1aXJlX3JlLm1hdGNoKGxpbmUpOgorICAgICAgICAgICAgaW5jZmlsZSA9IHJlcXVpcmVfcmUubWF0Y2gobGluZSkuZ3JvdXAoMSkKKyAgICAgICAgZWxpZiBpbmNsdWRlX3JlLm1hdGNoKGxpbmUpOgorICAgICAgICAgICAgaW5jZmlsZSA9IGluY2x1ZGVfcmUubWF0Y2gobGluZSkuZ3JvdXAoMSkKKyAgICAgICAgaWYgaW5jZmlsZToKKyAgICAgICAgICAgIGluY2ZpbGUgPSBiYi5kYXRhLmV4cGFuZChpbmNmaWxlLCBkKQorICAgICAgICAgICAgaW5jZmlsZSA9IGJiLnV0aWxzLndoaWNoKGJicGF0aCwgaW5jZmlsZSkKKyAgICAgICAgICAgIGlmIGluY2ZpbGU6CisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkoaW5jZmlsZSwgb3V0ZGlyKQorCisgICAgY3JlYXRlX3RhcmJhbGwoZCwgb3V0ZGlyLCAncmVjaXBlJywgZC5nZXRWYXIoJ0FSQ0hJVkVSX09VVERJUicsIFRydWUpKQorICAgIGJiLnV0aWxzLnJlbW92ZShvdXRkaXIsIHJlY3Vyc2U9VHJ1ZSkKK30KKworcHl0aG9uIGRvX2R1bXBkYXRhICgpIHsKKyAgICAiIiIKKyAgICBkdW1wIGVudmlyb25tZW50IGRhdGEgdG8gJHtQRn0tc2hvd2RhdGEuZHVtcAorICAgICIiIgorCisgICAgZHVtcGZpbGUgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0FSQ0hJVkVSX09VVERJUicsIFRydWUpLCBcCisgICAgICAgICclcy1zaG93ZGF0YS5kdW1wJyAlIGQuZ2V0VmFyKCdQRicsIFRydWUpKQorICAgIGJiLm5vdGUoJ0R1bXBpbmcgbWV0YWRhdGEgaW50byAlcycgJSBkdW1wZmlsZSkKKyAgICBmID0gb3BlbihkdW1wZmlsZSwgJ3cnKQorICAgICMgZW1pdCB2YXJpYWJsZXMgYW5kIHNoZWxsIGZ1bmN0aW9ucworICAgIGJiLmRhdGEuZW1pdF9lbnYoZiwgZCwgVHJ1ZSkKKyAgICAjIGVtaXQgdGhlIG1ldGFkYXRhIHdoaWNoIGlzbid0IHZhbGlkIHNoZWxsCisgICAgZm9yIGUgaW4gZC5rZXlzKCk6CisgICAgICAgIGlmIGJiLmRhdGEuZ2V0VmFyRmxhZyhlLCAncHl0aG9uJywgZCk6CisgICAgICAgICAgICBmLndyaXRlKCJcbnB5dGhvbiAlcyAoKSB7XG4lc31cbiIgJSAoZSwgYmIuZGF0YS5nZXRWYXIoZSwgZCwgVHJ1ZSkpKQorICAgIGYuY2xvc2UoKQorfQorCitTU1RBVEVUQVNLUyArPSAiZG9fZGVwbG95X2FyY2hpdmVzIgorZG9fZGVwbG95X2FyY2hpdmVzICgpIHsKKyAgICBlY2hvICJEZXBsb3lpbmcgc291cmNlIGFyY2hpdmUgZmlsZXMgLi4uIgorfQorcHl0aG9uIGRvX2RlcGxveV9hcmNoaXZlc19zZXRzY2VuZSAoKSB7CisgICAgc3N0YXRlX3NldHNjZW5lKGQpCit9Citkb19kZXBsb3lfYXJjaGl2ZXNbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtBUkNISVZFUl9UT1BESVJ9IgorZG9fZGVwbG95X2FyY2hpdmVzW3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke0RFUExPWV9ESVJfU1JDfSIKKworYWRkdGFzayBkb19hcl9vcmlnaW5hbCBhZnRlciBkb191bnBhY2sKK2FkZHRhc2sgZG9fdW5wYWNrX2FuZF9wYXRjaCBhZnRlciBkb19wYXRjaAorYWRkdGFzayBkb19hcl9wYXRjaGVkIGFmdGVyIGRvX3VucGFja19hbmRfcGF0Y2gKK2FkZHRhc2sgZG9fYXJfY29uZmlndXJlZCBhZnRlciBkb191bnBhY2tfYW5kX3BhdGNoCithZGR0YXNrIGRvX2R1bXBkYXRhCithZGR0YXNrIGRvX2FyX3JlY2lwZQorYWRkdGFzayBkb19kZXBsb3lfYXJjaGl2ZXMgYmVmb3JlIGRvX2J1aWxkCisKK2FkZHRhc2sgZG9fZGVwbG95X2FsbF9hcmNoaXZlcyBhZnRlciBkb19kZXBsb3lfYXJjaGl2ZXMKK2RvX2RlcGxveV9hbGxfYXJjaGl2ZXNbcmVjcmRlcHRhc2tdID0gImRvX2RlcGxveV9hcmNoaXZlcyIKK2RvX2RlcGxveV9hbGxfYXJjaGl2ZXNbcmVjaWRlcHRhc2tdID0gImRvXyR7QkJfREVGQVVMVF9UQVNLfSIKK2RvX2RlcGxveV9hbGxfYXJjaGl2ZXMoKSB7CisgICAgICAgIDoKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2F1dG90b29scy1icm9rZW5zZXAuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2F1dG90b29scy1icm9rZW5zZXAuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWNmOTdhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYXV0b3Rvb2xzLWJyb2tlbnNlcC5iYmNsYXNzCkBAIC0wLDAgKzEsNSBAQAorIyBBdXRvdG9vbHMgY2xhc3MgZm9yIHJlY2lwZXMgd2hlcmUgc2VwYXJhdGUgYnVpbGQgZGlyIGRvZXNuJ3Qgd29yaworIyBJZGVhbGx5IHdlIHNob3VsZCBmaXggc29mdHdhcmUgc28gaXQgZG9lcyB3b3JrLiBTdGFuZGFyZCBhdXRvdG9vbHMgc3VwcG9ydHMKKyMgdGhpcy4KK2luaGVyaXQgYXV0b3Rvb2xzCitCID0gIiR7U30iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9hdXRvdG9vbHMuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2F1dG90b29scy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljY2Q3ZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9hdXRvdG9vbHMuYmJjbGFzcwpAQCAtMCwwICsxLDMxMiBAQAorZGVmIGF1dG90b29sc19kZXBfcHJlcGVuZChkKToKKyAgICBpZiBkLmdldFZhcignSU5ISUJJVF9BVVRPVE9PTFNfREVQUycsIFRydWUpOgorICAgICAgICByZXR1cm4gJycKKworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBkZXBzID0gJycKKworICAgIGlmIHBuIGluIFsnYXV0b2NvbmYtbmF0aXZlJywgJ2F1dG9tYWtlLW5hdGl2ZScsICdoZWxwMm1hbi1uYXRpdmUnXToKKyAgICAgICAgcmV0dXJuIGRlcHMKKyAgICBkZXBzICs9ICdhdXRvY29uZi1uYXRpdmUgYXV0b21ha2UtbmF0aXZlICcKKworICAgIGlmIG5vdCBwbiBpbiBbJ2xpYnRvb2wnLCAnbGlidG9vbC1uYXRpdmUnXSBhbmQgbm90IHBuLmVuZHN3aXRoKCJsaWJ0b29sLWNyb3NzIik6CisgICAgICAgIGRlcHMgKz0gJ2xpYnRvb2wtbmF0aXZlICcKKyAgICAgICAgaWYgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBub3QgZC5nZXRWYXIoJ0lOSElCSVRfREVGQVVMVF9ERVBTJywgVHJ1ZSk6CisgICAgICAgICAgICBkZXBzICs9ICdsaWJ0b29sLWNyb3NzICcKKworICAgIHJldHVybiBkZXBzICsgJ2dudS1jb25maWctbmF0aXZlICcKKworRVhUUkFfT0VNQUtFID0gIiIKKworREVQRU5EU19wcmVwZW5kID0gIiR7QGF1dG90b29sc19kZXBfcHJlcGVuZChkKX0gIgorCitpbmhlcml0IHNpdGVpbmZvCisKKyMgU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2Ygc2hlbGwgc2NyaXB0cyB3aXRoIHZhcmlhYmxlcyBkZWZpbmVkIHRvIHN1cHBseSB0ZXN0CisjIHJlc3VsdHMgZm9yIGF1dG9jb25mIHRlc3RzIHdlIGNhbm5vdCBydW4gYXQgYnVpbGQgdGltZS4KK2V4cG9ydCBDT05GSUdfU0lURSA9ICIke0BzaXRlaW5mb19nZXRfZmlsZXMoZCwgRmFsc2UpfSIKKworYWNwYXRocyA9ICJkZWZhdWx0IgorRVhUUkFfQVVUT1JFQ09ORiA9ICItLWV4Y2x1ZGU9YXV0b3BvaW50IgorCitleHBvcnQgbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgPSAiJHtsaWJkaXJ9ICR7YmFzZV9saWJkaXJ9IgorCisjIFdoZW4gYnVpbGRpbmcgdG9vbHMgZm9yIHVzZSBhdCBidWlsZC10aW1lIGl0J3MgcmVjb21tZW5kZWQgZm9yIHRoZSBidWlsZAorIyBzeXN0ZW0gdG8gdXNlIHRoZXNlIHZhcmlhYmxlcyB3aGVuIGNyb3NzLWNvbXBpbGluZy4KKyMgKGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vYXV0b2Jvb2svYXV0b2Jvb2svYXV0b2Jvb2tfMjcwLmh0bWwpCitleHBvcnQgQ1BQX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0NQUH0iCitleHBvcnQgQ1BQRkxBR1NfRk9SX0JVSUxEID0gIiR7QlVJTERfQ1BQRkxBR1N9IgorCitleHBvcnQgQ0NfRk9SX0JVSUxEID0gIiR7QlVJTERfQ0N9IgorZXhwb3J0IENGTEFHU19GT1JfQlVJTEQgPSAiJHtCVUlMRF9DRkxBR1N9IgorCitleHBvcnQgQ1hYX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0NYWH0iCitleHBvcnQgQ1hYRkxBR1NfRk9SX0JVSUxEPSIke0JVSUxEX0NYWEZMQUdTfSIKKworZXhwb3J0IExEX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0xEfSIKK2V4cG9ydCBMREZMQUdTX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0xERkxBR1N9IgorCitkZWYgYXBwZW5kX2xpYnRvb2xfc3lzcm9vdChkKToKKyAgICAjIE9ubHkgc3VwcGx5IGxpYnRvb2wgc3lzcm9vdCBvcHRpb24gZm9yIG5vbi1uYXRpdmUgcGFja2FnZXMKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCk6CisgICAgICAgIHJldHVybiAnLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0ke1NUQUdJTkdfRElSX0hPU1R9JworICAgIHJldHVybiAiIgorCitDT05GSUdVUkVPUFRTID0gIiAtLWJ1aWxkPSR7QlVJTERfU1lTfSBcCisJCSAgLS1ob3N0PSR7SE9TVF9TWVN9IFwKKwkJICAtLXRhcmdldD0ke1RBUkdFVF9TWVN9IFwKKwkJICAtLXByZWZpeD0ke3ByZWZpeH0gXAorCQkgIC0tZXhlY19wcmVmaXg9JHtleGVjX3ByZWZpeH0gXAorCQkgIC0tYmluZGlyPSR7YmluZGlyfSBcCisJCSAgLS1zYmluZGlyPSR7c2JpbmRpcn0gXAorCQkgIC0tbGliZXhlY2Rpcj0ke2xpYmV4ZWNkaXJ9IFwKKwkJICAtLWRhdGFkaXI9JHtkYXRhZGlyfSBcCisJCSAgLS1zeXNjb25mZGlyPSR7c3lzY29uZmRpcn0gXAorCQkgIC0tc2hhcmVkc3RhdGVkaXI9JHtzaGFyZWRzdGF0ZWRpcn0gXAorCQkgIC0tbG9jYWxzdGF0ZWRpcj0ke2xvY2Fsc3RhdGVkaXJ9IFwKKwkJICAtLWxpYmRpcj0ke2xpYmRpcn0gXAorCQkgIC0taW5jbHVkZWRpcj0ke2luY2x1ZGVkaXJ9IFwKKwkJICAtLW9sZGluY2x1ZGVkaXI9JHtvbGRpbmNsdWRlZGlyfSBcCisJCSAgLS1pbmZvZGlyPSR7aW5mb2Rpcn0gXAorCQkgIC0tbWFuZGlyPSR7bWFuZGlyfSBcCisJCSAgLS1kaXNhYmxlLXNpbGVudC1ydWxlcyBcCisJCSAgJHtDT05GSUdVUkVPUFRfREVQVFJBQ0t9IFwKKwkJICAke0BhcHBlbmRfbGlidG9vbF9zeXNyb290KGQpfSIKK0NPTkZJR1VSRU9QVF9ERVBUUkFDSyA/PSAiLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmciCisKKworb2VfcnVuY29uZiAoKSB7CisJY2Znc2NyaXB0PSIke1N9L2NvbmZpZ3VyZSIKKwlpZiBbIC14ICIkY2Znc2NyaXB0IiBdIDsgdGhlbgorCQliYm5vdGUgIlJ1bm5pbmcgJGNmZ3NjcmlwdCAke0NPTkZJR1VSRU9QVFN9ICR7RVhUUkFfT0VDT05GfSAkQCIKKwkJc2V0ICtlCisJCSR7Q0FDSEVEX0NPTkZJR1VSRVZBUlN9ICRjZmdzY3JpcHQgJHtDT05GSUdVUkVPUFRTfSAke0VYVFJBX09FQ09ORn0gIiRAIgorCQlpZiBbICIkPyIgIT0gIjAiIF07IHRoZW4KKwkJCWVjaG8gIkNvbmZpZ3VyZSBmYWlsZWQuIFRoZSBjb250ZW50cyBvZiBhbGwgY29uZmlnLmxvZyBmaWxlcyBmb2xsb3dzIHRvIGFpZCBkZWJ1Z2dpbmciCisJCQlmaW5kICR7U30gLWlnbm9yZV9yZWFkZGlyX3JhY2UgLW5hbWUgY29uZmlnLmxvZyAtcHJpbnQgLWV4ZWMgY2F0IHt9IFw7CisJCQlkaWUgIm9lX3J1bmNvbmYgZmFpbGVkIgorCQlmaQorCQlzZXQgLWUKKwllbHNlCisJCWJiZmF0YWwgIm5vIGNvbmZpZ3VyZSBzY3JpcHQgZm91bmQgYXQgJGNmZ3NjcmlwdCIKKwlmaQorfQorCitBVVRPVE9PTFNfQVVYRElSID89ICIke1N9IgorCitDT05GSUdVUkVTVEFNUEZJTEUgPSAiJHtXT1JLRElSfS9jb25maWd1cmUuc3N0YXRlIgorCithdXRvdG9vbHNfcHJlY29uZmlndXJlKCkgeworCWlmIFsgLW4gIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgLWEgLWUgIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgXTsgdGhlbgorCQlpZiBbICJgY2F0ICR7Q09ORklHVVJFU1RBTVBGSUxFfWAiICE9ICIke0JCX1RBU0tIQVNIfSIgXTsgdGhlbgorCQkJaWYgWyAiJHtTfSIgIT0gIiR7Qn0iIF07IHRoZW4KKwkJCQllY2hvICJQcmV2aW91c2x5IGNvbmZpZ3VyZWQgc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5IGRldGVjdGVkLCBjbGVhbmluZyAke0J9IgorCQkJCXJtIC1yZiAke0J9CisJCQkJbWtkaXIgJHtCfQorCQkJZWxzZQorCQkJCSMgQXQgbGVhc3QgcmVtb3ZlIHRoZSAubGEgZmlsZXMgc2luY2UgYXV0b21ha2Ugd29uJ3QgYXV0b21hdGljYWxseQorCQkJCSMgcmVnZW5lcmF0ZSB0aGVtIGV2ZW4gaWYgQ0ZMQUdTL0xERkxBR1MgYXJlIGRpZmZlcmVudAorCQkJCWNkICR7U30KKwkJCQlpZiBbICIke0NMRUFOQlJPS0VOfSIgIT0gIjEiIC1hIFwoIC1lIE1ha2VmaWxlIC1vIC1lIG1ha2VmaWxlIC1vIC1lIEdOVW1ha2VmaWxlIFwpIF07IHRoZW4KKwkJCQkJZWNobyAiUnVubmluZyBcIiR7TUFLRX0gY2xlYW5cIiBpbiAke1N9IgorCQkJCQkke01BS0V9IGNsZWFuCisJCQkJZmkKKwkJCQlmaW5kICR7U30gLWlnbm9yZV9yZWFkZGlyX3JhY2UgLW5hbWUgXCoubGEgLWRlbGV0ZQorCQkJZmkKKwkJZmkKKwlmaQorfQorCithdXRvdG9vbHNfcG9zdGNvbmZpZ3VyZSgpeworCWlmIFsgLW4gIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgXTsgdGhlbgorCQllY2hvICR7QkJfVEFTS0hBU0h9ID4gJHtDT05GSUdVUkVTVEFNUEZJTEV9CisJZmkKK30KKworRVhUUkFDT05GRlVOQ1MgPz89ICIiCisKK2RvX2NvbmZpZ3VyZVtwcmVmdW5jc10gKz0gImF1dG90b29sc19wcmVjb25maWd1cmUgYXV0b3Rvb2xzX2NvcHlfYWNsb2NhbHMgJHtFWFRSQUNPTkZGVU5DU30iCitkb19jb25maWd1cmVbcG9zdGZ1bmNzXSArPSAiYXV0b3Rvb2xzX3Bvc3Rjb25maWd1cmUiCisKK0FDTE9DQUxESVIgPSAiJHtCfS9hY2xvY2FsLWNvcHkiCisKK3B5dGhvbiBhdXRvdG9vbHNfY29weV9hY2xvY2FscyAoKSB7CisgICAgcyA9IGQuZ2V0VmFyKCJTIiwgVHJ1ZSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocyArICIvY29uZmlndXJlLmluIikgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyhzICsgIi9jb25maWd1cmUuYWMiKToKKyAgICAgICAgaWYgbm90IGQuZ2V0VmFyKCJBVVRPVE9PTFNfQ09QWUFDTE9DQUwiLCBGYWxzZSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgIHRhc2tkZXBkYXRhID0gZC5nZXRWYXIoIkJCX1RBU0tERVBEQVRBIiwgRmFsc2UpCisgICAgI2JiLndhcm4oc3RyKHRhc2tkZXBkYXRhKSkKKyAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgYWNsb2NhbGRpciA9IGQuZ2V0VmFyKCJBQ0xPQ0FMRElSIiwgVHJ1ZSkKKyAgICBvZS5wYXRoLnJlbW92ZShhY2xvY2FsZGlyKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihhY2xvY2FsZGlyKQorICAgIHN0YXJ0ID0gTm9uZQorICAgIGNvbmZpZ3VyZWRlcHMgPSBbXQorCisgICAgZm9yIGRlcCBpbiB0YXNrZGVwZGF0YToKKyAgICAgICAgZGF0YSA9IHRhc2tkZXBkYXRhW2RlcF0KKyAgICAgICAgaWYgZGF0YVsxXSA9PSAiZG9fY29uZmlndXJlIiBhbmQgZGF0YVswXSA9PSBwbjoKKyAgICAgICAgICAgIHN0YXJ0ID0gZGVwCisgICAgICAgICAgICBicmVhaworICAgIGlmIHN0YXJ0IGlzIE5vbmU6CisgICAgICAgIGJiLmZhdGFsKCJDb3VsZG4ndCBmaW5kIG91cnNlbGYgaW4gQkJfVEFTS0RFUERBVEE/IikKKworICAgICMgV2UgbmVlZCB0byBmaW5kIGNvbmZpZ3VyZSB0YXNrcyB3aGljaCBhcmUgZWl0aGVyIGZyb20gPHRhcmdldD4gLT4gPHRhcmdldD4KKyAgICAjIG9yIDxuYXRpdmU+IC0+IDxuYXRpdmU+IGJ1dCBub3QgPHRhcmdldD4gLT4gPG5hdGl2ZT4gdW5sZXNzIHRoZXkncmUgZGlyZWN0CisgICAgIyBkZXBlbmRlbmNpZXMuIFRoaXMgbWlycm9ycyB3aGF0IHdvdWxkIGdldCByZXN0b3JlZCBmcm9tIHNzdGF0ZS4KKyAgICBkb25lID0gW2RlcF0KKyAgICBuZXh0ID0gW2RlcF0KKyAgICB3aGlsZSBuZXh0OgorICAgICAgICBuZXcgPSBbXQorICAgICAgICBmb3IgZGVwIGluIG5leHQ6CisgICAgICAgICAgICBkYXRhID0gdGFza2RlcGRhdGFbZGVwXQorICAgICAgICAgICAgZm9yIGRhdGFkZXAgaW4gZGF0YVszXToKKyAgICAgICAgICAgICAgICBpZiBkYXRhZGVwIGluIGRvbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoZGF0YWRlcCkKKyAgICAgICAgICAgICAgICBpZiAobm90IGRhdGFbMF0uZW5kc3dpdGgoIi1uYXRpdmUiKSkgYW5kIHRhc2tkZXBkYXRhW2RhdGFkZXBdWzBdLmVuZHN3aXRoKCItbmF0aXZlIikgYW5kIGRlcCAhPSBzdGFydDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBuZXcuYXBwZW5kKGRhdGFkZXApCisgICAgICAgICAgICAgICAgaWYgdGFza2RlcGRhdGFbZGF0YWRlcF1bMV0gPT0gImRvX2NvbmZpZ3VyZSI6CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWRlcHMuYXBwZW5kKHRhc2tkZXBkYXRhW2RhdGFkZXBdWzBdKQorICAgICAgICBuZXh0ID0gbmV3CisKKyAgICAjY29uZmlndXJlZGVwczIgPSBbXQorICAgICNmb3IgZGVwIGluIHRhc2tkZXBkYXRhOgorICAgICMgICAgZGF0YSA9IHRhc2tkZXBkYXRhW2RlcF0KKyAgICAjICAgIGlmIGRhdGFbMV0gPT0gImRvX2NvbmZpZ3VyZSIgYW5kIGRhdGFbMF0gIT0gcG46CisgICAgIyAgICAgICAgY29uZmlndXJlZGVwczIuYXBwZW5kKGRhdGFbMF0pCisgICAgI2NvbmZpZ3VyZWRlcHMuc29ydCgpCisgICAgI2NvbmZpZ3VyZWRlcHMyLnNvcnQoKQorICAgICNiYi53YXJuKHN0cihjb25maWd1cmVkZXBzKSkKKyAgICAjYmIud2FybihzdHIoY29uZmlndXJlZGVwczIpKQorCisgICAgY3AgPSBbXQorICAgIHNpdGVjb25mID0gW10gICAgCisgICAgZm9yIGMgaW4gY29uZmlndXJlZGVwczoKKyAgICAgICAgaWYgYy5lbmRzd2l0aCgiLW5hdGl2ZSIpOgorICAgICAgICAgICAgbWFuaWZlc3QgPSBkLmV4cGFuZCgiJHtTU1RBVEVfTUFOSUZFU1RTfS9tYW5pZmVzdC0ke0JVSUxEX0FSQ0h9LSVzLnBvcHVsYXRlX3N5c3Jvb3QiICUgYykKKyAgICAgICAgZWxpZiBjLnN0YXJ0c3dpdGgoIm5hdGl2ZXNkay0iKToKKyAgICAgICAgICAgIG1hbmlmZXN0ID0gZC5leHBhbmQoIiR7U1NUQVRFX01BTklGRVNUU30vbWFuaWZlc3QtJHtTREtfQVJDSH1fJHtTREtfT1N9LSVzLnBvcHVsYXRlX3N5c3Jvb3QiICUgYykKKyAgICAgICAgZWxpZiAiLWNyb3NzLSIgaW4gYyBvciAiLWNyb3Nzc2RrIiBpbiBjOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hbmlmZXN0ID0gZC5leHBhbmQoIiR7U1NUQVRFX01BTklGRVNUU30vbWFuaWZlc3QtJHtNQUNISU5FfS0lcy5wb3B1bGF0ZV9zeXNyb290IiAlIGMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSBvcGVuKG1hbmlmZXN0LCAiciIpCisgICAgICAgICAgICBmb3IgbCBpbiBmOgorICAgICAgICAgICAgICAgIGlmICIvYWNsb2NhbC8iIGluIGwgYW5kIGwuc3RyaXAoKS5lbmRzd2l0aCgiLm00Iik6CisgICAgICAgICAgICAgICAgICAgIGNwLmFwcGVuZChsLnN0cmlwKCkpCisgICAgICAgICAgICAgICAgZWxpZiAiY29uZmlnX3NpdGUuZC8iIGluIGw6CisgICAgICAgICAgICAgICAgICAgIGNwLmFwcGVuZChsLnN0cmlwKCkpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGJiLndhcm4oIiVzIG5vdCBmb3VuZCIgJSBtYW5pZmVzdCkKKworICAgIGZvciBjIGluIGNwOgorICAgICAgICB0ID0gb3MucGF0aC5qb2luKGFjbG9jYWxkaXIsIG9zLnBhdGguYmFzZW5hbWUoYykpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0KToKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoYywgdCkKKyAgICAgICAgICAgIAorICAgIGQuc2V0VmFyKCJDT05GSUdfU0lURSIsIHNpdGVpbmZvX2dldF9maWxlcyhkLCBGYWxzZSkpCit9CithdXRvdG9vbHNfY29weV9hY2xvY2Fsc1t2YXJkZXBzZXhjbHVkZV0gKz0gIk1BQ0hJTkUgU0RLX0FSQ0ggQlVJTERfQVJDSCBTREtfT1MgQkJfVEFTS0RFUERBVEEiCisKK2F1dG90b29sc19kb19jb25maWd1cmUoKSB7CisJIyBXQVJOSU5HOiBncm9zcyBoYWNrIGZvbGxvd3M6CisJIyBBbiBhdXRvdG9vbHMgYnVpbHQgcGFja2FnZSBnZW5lcmFsbHkgbmVlZHMgdGhlc2Ugc2NyaXB0cywgaG93ZXZlciBvbmx5CisJIyBhdXRvbWFrZSBvciBsaWJ0b29saXplIGFjdHVhbGx5IGluc3RhbGwgdGhlIGN1cnJlbnQgdmVyc2lvbnMgb2YgdGhlbS4KKwkjIFRoaXMgaXMgYSBwcm9ibGVtIGluIGJ1aWxkcyB0aGF0IGRvIG5vdCB1c2UgbGlidG9vbCBvciBhdXRvbWFrZSwgaW4gdGhlIGNhc2UKKwkjIHdoZXJlIHdlIC1uZWVkLSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlc2Ugc2NyaXB0cy4gIGUuZy4gcnVubmluZyBhIGJ1aWxkCisJIyBmb3IgYSBwYWNrYWdlIHdob3NlIGF1dG90b29scyBhcmUgb2xkLCBvbiBhbiB4ODZfNjQgbWFjaGluZSwgd2hpY2ggdGhlIG9sZAorCSMgY29uZmlnLnN1YiBkb2VzIG5vdCBzdXBwb3J0LiAgV29yayBhcm91bmQgdGhpcyBieSBpbnN0YWxsaW5nIHRoZW0gbWFudWFsbHkKKwkjIHJlZ2FyZGxlc3MuCisJKCBmb3IgYWMgaW4gYGZpbmQgJHtTfSAtaWdub3JlX3JlYWRkaXJfcmFjZSAtbmFtZSBjb25maWd1cmUuaW4gLW8gLW5hbWUgY29uZmlndXJlLmFjYDsgZG8KKwkJcm0gLWYgYGRpcm5hbWUgJGFjYC9jb25maWd1cmUKKwkJZG9uZSApCisJaWYgWyAtZSAke1N9L2NvbmZpZ3VyZS5pbiAtbyAtZSAke1N9L2NvbmZpZ3VyZS5hYyBdOyB0aGVuCisJCW9sZGRpcj1gcHdkYAorCQljZCAke1N9CisJCUFDTE9DQUw9ImFjbG9jYWwgLS1zeXN0ZW0tYWNkaXI9JHtBQ0xPQ0FMRElSfS8iCisJCWlmIFsgeCIke2FjcGF0aHN9IiA9IHhkZWZhdWx0IF07IHRoZW4KKwkJCWFjcGF0aHM9CisJCQlmb3IgaSBpbiBgZmluZCAke1N9IC1pZ25vcmVfcmVhZGRpcl9yYWNlIC1tYXhkZXB0aCAyIC1uYW1lIFwqLm00fGdyZXAgLXYgJ2FjbG9jYWwubTQnfCBcCisJCQkJZ3JlcCAtdiAnYWNpbmNsdWRlLm00JyB8IGdyZXAgLXYgJ2FjbG9jYWwtY29weScgfCBzZWQgLWUgJ3MsXCguKi9cKS4qJCxcMSwnfHNvcnQgLXVgOyBkbworCQkJCWFjcGF0aHM9IiRhY3BhdGhzIC1JICRpIgorCQkJZG9uZQorCQllbHNlCisJCQlhY3BhdGhzPSIke2FjcGF0aHN9IgorCQlmaQorCQlBVVRPVj1gYXV0b21ha2UgLS12ZXJzaW9uIHwgc2VkIC1lICcxe3MvLiogLy87cy9cLlswLTldXCskLy99O3EnYAorCQlhdXRvbWFrZSAtLXZlcnNpb24KKwkJZWNobyAiQVVUT1YgaXMgJEFVVE9WIgorCQlpZiBbIC1kICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vYWNsb2NhbC0kQVVUT1YgXTsgdGhlbgorCQkJQUNMT0NBTD0iJEFDTE9DQUwgLS1hdXRvbWFrZS1hY2Rpcj0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2FjbG9jYWwtJEFVVE9WIgorCQlmaQorCQkjIGF1dG9yZWNvbmYgaXMgdG9vIHNoeSB0byBvdmVyd3JpdGUgYWNsb2NhbC5tNCBpZiBpdCBkb2Vzbid0IGxvb2sKKwkJIyBsaWtlIGl0IHdhcyBhdXRvLWdlbmVyYXRlZC4gIFdvcmsgYXJvdW5kIHRoaXMgYnkgYmxvd2luZyBpdCBhd2F5CisJCSMgYnkgaGFuZCwgdW5sZXNzIHRoZSBwYWNrYWdlIHNwZWNpZmljYWxseSBhc2tlZCBub3QgdG8gcnVuIGFjbG9jYWwuCisJCWlmICEgZWNobyAke0VYVFJBX0FVVE9SRUNPTkZ9IHwgZ3JlcCAtcSAiYWNsb2NhbCI7IHRoZW4KKwkJCXJtIC1mIGFjbG9jYWwubTQKKwkJZmkKKwkJaWYgWyAtZSBjb25maWd1cmUuaW4gXTsgdGhlbgorCQkJQ09ORklHVVJFX0FDPWNvbmZpZ3VyZS5pbgorCQllbHNlCisJCQlDT05GSUdVUkVfQUM9Y29uZmlndXJlLmFjCisJCWZpCisJCWlmIGdyZXAgIl5bWzpzcGFjZTpdXSpBTV9HTElCX0dOVV9HRVRURVhUIiAkQ09ORklHVVJFX0FDID4vZGV2L251bGw7IHRoZW4KKwkJCWlmIGdyZXAgInNlZC4qUE9URklMRVMiICRDT05GSUdVUkVfQUMgPi9kZXYvbnVsbDsgdGhlbgorCQkJCTogZG8gbm90aGluZyAtLSB3ZSBzdGlsbCBoYXZlIGFuIG9sZCB1bm1vZGlmaWVkIGNvbmZpZ3VyZS5hYworCSAgICAJCWVsc2UKKwkJCQliYm5vdGUgRXhlY3V0aW5nIGdsaWItZ2V0dGV4dGl6ZSAtLWZvcmNlIC0tY29weQorCQkJCWVjaG8gIm5vIiB8IGdsaWItZ2V0dGV4dGl6ZSAtLWZvcmNlIC0tY29weQorCQkJZmkKKwkJZWxzZSBpZiBncmVwICJeW1s6c3BhY2U6XV0qQU1fR05VX0dFVFRFWFQiICRDT05GSUdVUkVfQUMgPi9kZXYvbnVsbDsgdGhlbgorCQkJIyBXZSdkIGNhbGwgZ2V0dGV4dGl6ZSBoZXJlIGlmIGl0IHdhc24ndCBzbyBicm9rZW4uLi4KKwkJCQljcCAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dldHRleHQvY29uZmlnLnJwYXRoICR7QVVUT1RPT0xTX0FVWERJUn0vCisJCQkJaWYgWyAtZCAke1N9L3BvLyBdOyB0aGVuCisJCQkJCWNwIC1mICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ2V0dGV4dC9wby9NYWtlZmlsZS5pbi5pbiAke1N9L3BvLworCQkJCQlpZiBbICEgLWUgJHtTfS9wby9yZW1vdmUtcG90Y2RhdGUuc2luIF07IHRoZW4KKwkJCQkJCWNwICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ2V0dGV4dC9wby9yZW1vdmUtcG90Y2RhdGUuc2luICR7U30vcG8vCisJCQkJCWZpCisJCQkJZmkKKwkJCQlmb3IgaSBpbiBnZXR0ZXh0Lm00IGljb252Lm00IGxpYi1sZC5tNCBsaWItbGluay5tNCBsaWItcHJlZml4Lm00IG5scy5tNCBwby5tNCBwcm9ndGVzdC5tNDsgZG8KKwkJCQkJZm9yIGogaW4gYGZpbmQgJHtTfSAtaWdub3JlX3JlYWRkaXJfcmFjZSAtbmFtZSAkaSB8IGdyZXAgLXYgYWNsb2NhbC1jb3B5YDsgZG8KKwkJCQkJCXJtICRqCisJCQkJCWRvbmUKKwkJCQlkb25lCisJCQlmaQorCQlmaQorCQlta2RpciAtcCBtNAorCQlpZiBncmVwICJeW1s6c3BhY2U6XV0qW0FJXVtDVF1fUFJPR19JTlRMVE9PTCIgJENPTkZJR1VSRV9BQyA+L2Rldi9udWxsOyB0aGVuCisJCQliYm5vdGUgRXhlY3V0aW5nIGludGx0b29saXplIC0tY29weSAtLWZvcmNlIC0tYXV0b21ha2UKKwkJCWludGx0b29saXplIC0tY29weSAtLWZvcmNlIC0tYXV0b21ha2UKKwkJZmkKKwkJYmJub3RlIEV4ZWN1dGluZyBBQ0xPQ0FMPVwiJEFDTE9DQUxcIiBhdXRvcmVjb25mIC0tdmVyYm9zZSAtLWluc3RhbGwgLS1mb3JjZSAke0VYVFJBX0FVVE9SRUNPTkZ9ICRhY3BhdGhzCisJCUFDTE9DQUw9IiRBQ0xPQ0FMIiBhdXRvcmVjb25mIC1XY3Jvc3MgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlICR7RVhUUkFfQVVUT1JFQ09ORn0gJGFjcGF0aHMgfHwgZGllICJhdXRvcmVjb25mIGV4ZWN1dGlvbiBmYWlsZWQuIgorCQljZCAkb2xkZGlyCisJZmkKKwlpZiBbIC1lICR7U30vY29uZmlndXJlIF07IHRoZW4KKwkJb2VfcnVuY29uZgorCWVsc2UKKwkJYmJub3RlICJub3RoaW5nIHRvIGNvbmZpZ3VyZSIKKwlmaQorfQorCithdXRvdG9vbHNfZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKKwkjIEluZm8gZGlyIGxpc3RpbmcgaXNuJ3QgaW50ZXJlc3RpbmcgYXQgdGhpcyBwb2ludCBzbyByZW1vdmUgaXQgaWYgaXQgZXhpc3RzLgorCWlmIFsgLWUgIiR7RH0ke2luZm9kaXJ9L2RpciIgXTsgdGhlbgorCQlybSAtZiAke0R9JHtpbmZvZGlyfS9kaXIKKwlmaQorfQorCitpbmhlcml0IHNpdGVjb25maWcKKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb25maWd1cmUgZG9faW5zdGFsbAorCitCID0gIiR7V09SS0RJUn0vYnVpbGQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9hdXRvdG9vbHNfc3RhZ2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2F1dG90b29sc19zdGFnZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYzQxZTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9hdXRvdG9vbHNfc3RhZ2UuYmJjbGFzcwpAQCAtMCwwICsxLDIgQEAKK2luaGVyaXQgYXV0b3Rvb2xzCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Jhc2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Jhc2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDc4MDAxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsNjI5IEBACitCQl9ERUZBVUxUX1RBU0sgPz0gImJ1aWxkIgorQ0xBU1NPVkVSUklERSA/PSAiY2xhc3MtdGFyZ2V0IgorCitpbmhlcml0IHBhdGNoCitpbmhlcml0IHN0YWdpbmcKKworaW5oZXJpdCBtaXJyb3JzCitpbmhlcml0IHV0aWxzCitpbmhlcml0IHV0aWxpdHktdGFza3MKK2luaGVyaXQgbWV0YWRhdGFfc2NtCitpbmhlcml0IGxvZ2dpbmcKKworT0VfSU1QT1JUUyArPSAib3Mgc3lzIHRpbWUgb2UucGF0aCBvZS51dGlscyBvZS5kYXRhIG9lLnBhY2thZ2Ugb2UucGFja2FnZWdyb3VwIG9lLnNzdGF0ZXNpZyBvZS5sc2Igb2UuY2FjaGVkcGF0aCIKK09FX0lNUE9SVFNbdHlwZV0gPSAibGlzdCIKKworZGVmIG9lX2ltcG9ydChkKToKKyAgICBpbXBvcnQgc3lzCisKKyAgICBiYnBhdGggPSBkLmdldFZhcigiQkJQQVRIIiwgVHJ1ZSkuc3BsaXQoIjoiKQorICAgIHN5cy5wYXRoWzA6MF0gPSBbb3MucGF0aC5qb2luKGRpciwgImxpYiIpIGZvciBkaXIgaW4gYmJwYXRoXQorCisgICAgZGVmIGluamVjdChuYW1lLCB2YWx1ZSk6CisgICAgICAgICIiIk1ha2UgYSBweXRob24gb2JqZWN0IGFjY2Vzc2libGUgZnJvbSB0aGUgbWV0YWRhdGEiIiIKKyAgICAgICAgaWYgaGFzYXR0cihiYi51dGlscywgIl9jb250ZXh0Iik6CisgICAgICAgICAgICBiYi51dGlscy5fY29udGV4dFtuYW1lXSA9IHZhbHVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfX2J1aWx0aW5zX19bbmFtZV0gPSB2YWx1ZQorCisgICAgaW1wb3J0IG9lLmRhdGEKKyAgICBmb3IgdG9pbXBvcnQgaW4gb2UuZGF0YS50eXBlZF92YWx1ZSgiT0VfSU1QT1JUUyIsIGQpOgorICAgICAgICBpbXBvcnRlZCA9IF9faW1wb3J0X18odG9pbXBvcnQpCisgICAgICAgIGluamVjdCh0b2ltcG9ydC5zcGxpdCgiLiIsIDEpWzBdLCBpbXBvcnRlZCkKKworICAgIHJldHVybiAiIgorCisjIFdlIG5lZWQgdGhlIG9lIG1vZHVsZSBuYW1lIHNwYWNlIGVhcmx5IChiZWZvcmUgSU5IRVJJVHMgZ2V0IGFkZGVkKQorT0VfSU1QT1JURUQgOj0gIiR7QG9lX2ltcG9ydChkKX0iCisKK2RlZiBsc2JfZGlzdHJvX2lkZW50aWZpZXIoZCk6CisgICAgYWRqdXN0ID0gZC5nZXRWYXIoJ0xTQl9ESVNUUk9fQURKVVNUJywgVHJ1ZSkKKyAgICBhZGp1c3RfZnVuYyA9IE5vbmUKKyAgICBpZiBhZGp1c3Q6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFkanVzdF9mdW5jID0gZ2xvYmFscygpW2FkanVzdF0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgIHJldHVybiBvZS5sc2IuZGlzdHJvX2lkZW50aWZpZXIoYWRqdXN0X2Z1bmMpCisKK2RpZSgpIHsKKwliYmZhdGFsX2xvZyAiJCoiCit9CisKK29lX3J1bm1ha2VfY2FsbCgpIHsKKwliYm5vdGUgJHtNQUtFfSAke0VYVFJBX09FTUFLRX0gIiRAIgorCSR7TUFLRX0gJHtFWFRSQV9PRU1BS0V9ICIkQCIKK30KKworb2VfcnVubWFrZSgpIHsKKwlvZV9ydW5tYWtlX2NhbGwgIiRAIiB8fCBkaWUgIm9lX3J1bm1ha2UgZmFpbGVkIgorfQorCisKK2RlZiBiYXNlX2RlcF9wcmVwZW5kKGQpOgorICAgICMKKyAgICAjIElkZWFsbHkgdGhpcyB3aWxsIGNoZWNrIGEgZmxhZyBzbyB3ZSB3aWxsIG9wZXJhdGUgcHJvcGVybHkgaW4KKyAgICAjIHRoZSBjYXNlIHdoZXJlIGhvc3QgPT0gYnVpbGQgPT0gdGFyZ2V0LCBmb3Igbm93IHdlIGRvbid0IHdvcmsgaW4KKyAgICAjIHRoYXQgY2FzZSB0aG91Z2guCisgICAgIworCisgICAgZGVwcyA9ICIiCisgICAgIyBJTkhJQklUX0RFRkFVTFRfREVQUyBkb2Vzbid0IGFwcGx5IHRvIHRoZSBwYXRjaCBjb21tYW5kLiAgV2hldGhlciBvciAgbm90CisgICAgIyB3ZSBuZWVkIHRoYXQgYnVpbHQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBwYXRjaCBmdW5jdGlvbiAvIGNsYXNzLCBub3QKKyAgICAjIHRoZSBhcHBsaWNhdGlvbi4KKyAgICBpZiBub3QgZC5nZXRWYXIoJ0lOSElCSVRfREVGQVVMVF9ERVBTJywgRmFsc2UpOgorICAgICAgICBpZiAoZC5nZXRWYXIoJ0hPU1RfU1lTJywgVHJ1ZSkgIT0gZC5nZXRWYXIoJ0JVSUxEX1NZUycsIFRydWUpKToKKyAgICAgICAgICAgIGRlcHMgKz0gIiB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Y29tcGlsZXJsaWJzIHZpcnR1YWwvbGliYyAiCisgICAgcmV0dXJuIGRlcHMKKworQkFTRURFUEVORFMgPSAiJHtAYmFzZV9kZXBfcHJlcGVuZChkKX0iCisKK0RFUEVORFNfcHJlcGVuZD0iJHtCQVNFREVQRU5EU30gIgorCitGSUxFU1BBVEggPSAiJHtAYmFzZV9zZXRfZmlsZXNwYXRoKFsiJHtGSUxFX0RJUk5BTUV9LyR7QlB9IiwgIiR7RklMRV9ESVJOQU1FfS8ke0JQTn0iLCAiJHtGSUxFX0RJUk5BTUV9L2ZpbGVzIl0sIGQpfSIKKyMgVEhJU0RJUiBvbmx5IHdvcmtzIHByb3Blcmx5IHdpdGggaW1lZGlhdGUgZXhwYW5zaW9uIGFzIGl0IGhhcyB0byBydW4KKyMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxvY2F0aW9uIGl0cyB1c2VkICg6PSkKK1RISVNESVIgPSAiJHtAb3MucGF0aC5kaXJuYW1lKGQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkpfSIKKworZGVmIGV4dHJhX3BhdGhfZWxlbWVudHMoZCk6CisgICAgcGF0aCA9ICIiCisgICAgZWxlbWVudHMgPSAoZC5nZXRWYXIoJ0VYVFJBTkFUSVZFUEFUSCcsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgZm9yIGUgaW4gZWxlbWVudHM6CisgICAgICAgIHBhdGggPSBwYXRoICsgIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8iICsgZSArICI6IgorICAgIHJldHVybiBwYXRoCisKK1BBVEhfcHJlcGVuZCA9ICIke0BleHRyYV9wYXRoX2VsZW1lbnRzKGQpfSIKKworZGVmIGdldF9saWNfY2hlY2tzdW1fZmlsZV9saXN0KGQpOgorICAgIGZpbGVsaXN0ID0gW10KKyAgICBsaWNfZmlsZXMgPSBkLmdldFZhcigiTElDX0ZJTEVTX0NIS1NVTSIsIFRydWUpIG9yICcnCisgICAgdG1wZGlyID0gZC5nZXRWYXIoIlRNUERJUiIsIFRydWUpCisKKyAgICB1cmxzID0gbGljX2ZpbGVzLnNwbGl0KCkKKyAgICBmb3IgdXJsIGluIHVybHM6CisgICAgICAgICMgV2Ugb25seSBjYXJlIGFib3V0IGl0ZW1zIHRoYXQgYXJlIGFic29sdXRlIHBhdGhzIHNpbmNlCisgICAgICAgICMgYW55IG90aGVycyBzaG91bGQgYmUgY292ZXJlZCBieSBTUkNfVVJJLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXRoID0gYmIuZmV0Y2guZGVjb2RldXJsKHVybClbMl0KKyAgICAgICAgICAgIGlmIHBhdGhbMF0gPT0gJy8nOgorICAgICAgICAgICAgICAgIGlmIHBhdGguc3RhcnRzd2l0aCh0bXBkaXIpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGZpbGVsaXN0LmFwcGVuZChwYXRoICsgIjoiICsgc3RyKG9zLnBhdGguZXhpc3RzKHBhdGgpKSkKKyAgICAgICAgZXhjZXB0IGJiLmZldGNoLk1hbGZvcm1lZFVybDoKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoZC5nZXRWYXIoJ1BOJywgVHJ1ZSkgKyAiOiBMSUNfRklMRVNfQ0hLU1VNIGNvbnRhaW5zIGFuIGludmFsaWQgVVJMOiAiICsgdXJsKQorICAgIHJldHVybiAiICIuam9pbihmaWxlbGlzdCkKKworYWRkdGFzayBmZXRjaAorZG9fZmV0Y2hbZGlyc10gPSAiJHtETF9ESVJ9IgorZG9fZmV0Y2hbZmlsZS1jaGVja3N1bXNdID0gIiR7QGJiLmZldGNoLmdldF9jaGVja3N1bV9maWxlX2xpc3QoZCl9IgorZG9fZmV0Y2hbZmlsZS1jaGVja3N1bXNdICs9ICIgJHtAZ2V0X2xpY19jaGVja3N1bV9maWxlX2xpc3QoZCl9IgorZG9fZmV0Y2hbdmFyZGVwc10gKz0gIlNSQ1JFViIKK3B5dGhvbiBiYXNlX2RvX2ZldGNoKCkgeworCisgICAgc3JjX3VyaSA9IChkLmdldFZhcignU1JDX1VSSScsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgaWYgbGVuKHNyY191cmkpID09IDA6CisgICAgICAgIHJldHVybgorCisgICAgdHJ5OgorICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2gyLkZldGNoKHNyY191cmksIGQpCisgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQorICAgIGV4Y2VwdCBiYi5mZXRjaDIuQkJGZXRjaEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKGUpCit9CisKK2FkZHRhc2sgdW5wYWNrIGFmdGVyIGRvX2ZldGNoCitkb191bnBhY2tbZGlyc10gPSAiJHtXT1JLRElSfSIKK3B5dGhvbiBiYXNlX2RvX3VucGFjaygpIHsKKyAgICBzcmNfdXJpID0gKGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiBsZW4oc3JjX3VyaSkgPT0gMDoKKyAgICAgICAgcmV0dXJuCisKKyAgICByb290ZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorCisgICAgIyBFbnN1cmUgdGhhdCB3ZSBjbGVhbnVwICR7U30vcGF0Y2hlcworICAgICMgVE9ETzogSW52ZXN0aWdhdGUgaWYgd2UgY2FuIHJlbW92ZQorICAgICMgdGhlIGVudGlyZSAke1N9IGluIHRoaXMgY2FzZS4KKyAgICBzX2RpciA9IGQuZ2V0VmFyKCdTJywgVHJ1ZSkKKyAgICBwX2RpciA9IG9zLnBhdGguam9pbihzX2RpciwgJ3BhdGNoZXMnKQorICAgIGJiLnV0aWxzLnJlbW92ZShwX2RpciwgVHJ1ZSkKKworICAgIHRyeToKKyAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChzcmNfdXJpLCBkKQorICAgICAgICBmZXRjaGVyLnVucGFjayhyb290ZGlyKQorICAgIGV4Y2VwdCBiYi5mZXRjaDIuQkJGZXRjaEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKGUpCit9CisKK2RlZiBwa2dhcmNoX21hcHBpbmcoZCk6CisgICAgIyBDb21wYXRpYmlsaXR5IG1hcHBpbmdzIG9mIFRVTkVfUEtHQVJDSCAob3B0IGluKQorICAgIGlmIGQuZ2V0VmFyKCJQS0dBUkNIQ09NUEFUX0FSTVY3QSIsIFRydWUpOgorICAgICAgICBpZiBkLmdldFZhcigiVFVORV9QS0dBUkNIIiwgVHJ1ZSkgPT0gImFybXY3YS12ZnAtbmVvbiI6CisgICAgICAgICAgICBkLnNldFZhcigiVFVORV9QS0dBUkNIIiwgImFybXY3YSIpCisKK2RlZiBnZXRfbGF5ZXJzX2JyYW5jaF9yZXYoZCk6CisgICAgbGF5ZXJzID0gKGQuZ2V0VmFyKCJCQkxBWUVSUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgbGF5ZXJzX2JyYW5jaF9yZXYgPSBbIiUtMTdzID0gXCIlczolc1wiIiAlIChvcy5wYXRoLmJhc2VuYW1lKGkpLCBcCisgICAgICAgIGJhc2VfZ2V0X21ldGFkYXRhX2dpdF9icmFuY2goaSwgTm9uZSkuc3RyaXAoKSwgXAorICAgICAgICBiYXNlX2dldF9tZXRhZGF0YV9naXRfcmV2aXNpb24oaSwgTm9uZSkpIFwKKyAgICAgICAgICAgIGZvciBpIGluIGxheWVyc10KKyAgICBpID0gbGVuKGxheWVyc19icmFuY2hfcmV2KS0xCisgICAgcDEgPSBsYXllcnNfYnJhbmNoX3JldltpXS5maW5kKCI9IikKKyAgICBzMSA9IGxheWVyc19icmFuY2hfcmV2W2ldW3AxOl0KKyAgICB3aGlsZSBpID4gMDoKKyAgICAgICAgcDIgPSBsYXllcnNfYnJhbmNoX3JldltpLTFdLmZpbmQoIj0iKQorICAgICAgICBzMj0gbGF5ZXJzX2JyYW5jaF9yZXZbaS0xXVtwMjpdCisgICAgICAgIGlmIHMxID09IHMyOgorICAgICAgICAgICAgbGF5ZXJzX2JyYW5jaF9yZXZbaS0xXSA9IGxheWVyc19icmFuY2hfcmV2W2ktMV1bMDpwMl0KKyAgICAgICAgICAgIGkgLT0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaSAtPSAxCisgICAgICAgICAgICBwMSA9IGxheWVyc19icmFuY2hfcmV2W2ldLmZpbmQoIj0iKQorICAgICAgICAgICAgczE9IGxheWVyc19icmFuY2hfcmV2W2ldW3AxOl0KKyAgICByZXR1cm4gbGF5ZXJzX2JyYW5jaF9yZXYKKworCitCVUlMRENGR19GVU5DUyA/Pz0gImJ1aWxkY2ZnX3ZhcnMgZ2V0X2xheWVyc19icmFuY2hfcmV2IGJ1aWxkY2ZnX25lZWRlZHZhcnMiCitCVUlMRENGR19GVU5DU1t0eXBlXSA9ICJsaXN0IgorCitkZWYgYnVpbGRjZmdfdmFycyhkKToKKyAgICBzdGF0dXN2YXJzID0gb2UuZGF0YS50eXBlZF92YWx1ZSgnQlVJTERDRkdfVkFSUycsIGQpCisgICAgZm9yIHZhciBpbiBzdGF0dXN2YXJzOgorICAgICAgICB2YWx1ZSA9IGQuZ2V0VmFyKHZhciwgVHJ1ZSkKKyAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB5aWVsZCAnJS0xN3MgPSAiJXMiJyAlICh2YXIsIHZhbHVlKQorCitkZWYgYnVpbGRjZmdfbmVlZGVkdmFycyhkKToKKyAgICBuZWVkZWRfdmFycyA9IG9lLmRhdGEudHlwZWRfdmFsdWUoIkJVSUxEQ0ZHX05FRURFRFZBUlMiLCBkKQorICAgIHBlc3RlcnVzZXIgPSBbXQorICAgIGZvciB2IGluIG5lZWRlZF92YXJzOgorICAgICAgICB2YWwgPSBkLmdldFZhcih2LCBUcnVlKQorICAgICAgICBpZiBub3QgdmFsIG9yIHZhbCA9PSAnSU5WQUxJRCc6CisgICAgICAgICAgICBwZXN0ZXJ1c2VyLmFwcGVuZCh2KQorCisgICAgaWYgcGVzdGVydXNlcjoKKyAgICAgICAgYmIuZmF0YWwoJ1RoZSBmb2xsb3dpbmcgdmFyaWFibGUocykgd2VyZSBub3Qgc2V0OiAlc1xuUGxlYXNlIHNldCB0aGVtIGRpcmVjdGx5LCBvciBjaG9vc2UgYSBNQUNISU5FIG9yIERJU1RSTyB0aGF0IHNldHMgdGhlbS4nICUgJywgJy5qb2luKHBlc3RlcnVzZXIpKQorCithZGRoYW5kbGVyIGJhc2VfZXZlbnRoYW5kbGVyCitiYXNlX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LkNvbmZpZ1BhcnNlZCBiYi5ldmVudC5CdWlsZFN0YXJ0ZWQgYmIuZXZlbnQuUmVjaXBlUHJlRmluYWxpc2UgYmIucnVucXVldWUuc2NlbmVRdWV1ZUNvbXBsZXRlIgorcHl0aG9uIGJhc2VfZXZlbnRoYW5kbGVyKCkgeworICAgIGltcG9ydCBiYi5ydW5xdWV1ZQorCisgICAgaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5Db25maWdQYXJzZWQpOgorICAgICAgICBpZiBub3QgZS5kYXRhLmdldFZhcigiTkFUSVZFTFNCU1RSSU5HIiwgRmFsc2UpOgorICAgICAgICAgICAgZS5kYXRhLnNldFZhcigiTkFUSVZFTFNCU1RSSU5HIiwgbHNiX2Rpc3Ryb19pZGVudGlmaWVyKGUuZGF0YSkpCisgICAgICAgIGUuZGF0YS5zZXRWYXIoJ0JCX1ZFUlNJT04nLCBiYi5fX3ZlcnNpb25fXykKKyAgICAgICAgcGtnYXJjaF9tYXBwaW5nKGUuZGF0YSkKKyAgICAgICAgb2UudXRpbHMuZmVhdHVyZXNfYmFja2ZpbGwoIkRJU1RST19GRUFUVVJFUyIsIGUuZGF0YSkKKyAgICAgICAgb2UudXRpbHMuZmVhdHVyZXNfYmFja2ZpbGwoIk1BQ0hJTkVfRkVBVFVSRVMiLCBlLmRhdGEpCisKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LkJ1aWxkU3RhcnRlZCk6CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShlLmRhdGEpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICBzdGF0dXNsaW5lcyA9IFtdCisgICAgICAgIGZvciBmdW5jIGluIG9lLmRhdGEudHlwZWRfdmFsdWUoJ0JVSUxEQ0ZHX0ZVTkNTJywgbG9jYWxkYXRhKToKKyAgICAgICAgICAgIGcgPSBnbG9iYWxzKCkKKyAgICAgICAgICAgIGlmIGZ1bmMgbm90IGluIGc6CisgICAgICAgICAgICAgICAgYmIud2FybigiQnVpbGQgY29uZmlndXJhdGlvbiBmdW5jdGlvbiAnJXMnIGRvZXMgbm90IGV4aXN0IiAlIGZ1bmMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZsaW5lcyA9IGdbZnVuY10obG9jYWxkYXRhKQorICAgICAgICAgICAgICAgIGlmIGZsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzbGluZXMuZXh0ZW5kKGZsaW5lcykKKworICAgICAgICBzdGF0dXNoZWFkZXIgPSBlLmRhdGEuZ2V0VmFyKCdCVUlMRENGR19IRUFERVInLCBUcnVlKQorICAgICAgICBiYi5wbGFpbignXG4lc1xuJXNcbicgJSAoc3RhdHVzaGVhZGVyLCAnXG4nLmpvaW4oc3RhdHVzbGluZXMpKSkKKworICAgICMgVGhpcyBjb2RlIGlzIHRvIHNpbGVuY2Ugd2FybmluZ3Mgd2hlcmUgdGhlIFNESyB2YXJpYWJsZXMgb3ZlcndyaXRlIHRoZSAKKyAgICAjIHRhcmdldCBvbmVzIGFuZCB3ZSdkIHNlZSBkdWxwaWNhdGUga2V5IG5hbWVzIG92ZXJ3cml0aW5nIGVhY2ggb3RoZXIKKyAgICAjIGZvciB2YXJpb3VzIFBSRUZFUlJFRF9QUk9WSURFUlMKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LlJlY2lwZVByZUZpbmFsaXNlKToKKyAgICAgICAgaWYgZS5kYXRhLmdldFZhcigiVEFSR0VUX1BSRUZJWCIsIFRydWUpID09IGUuZGF0YS5nZXRWYXIoIlNES19QUkVGSVgiLCBUcnVlKToKKyAgICAgICAgICAgIGUuZGF0YS5kZWxWYXIoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscyIpCisgICAgICAgICAgICBlLmRhdGEuZGVsVmFyKCJQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjLWluaXRpYWwiKQorICAgICAgICAgICAgZS5kYXRhLmRlbFZhcigiUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYyIpCisgICAgICAgICAgICBlLmRhdGEuZGVsVmFyKCJQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9ZysrIikKKyAgICAgICAgICAgIGUuZGF0YS5kZWxWYXIoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1jb21waWxlcmxpYnMiKQorCisgICAgaWYgaXNpbnN0YW5jZShlLCBiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlQ29tcGxldGUpOgorICAgICAgICBjb21wbGV0aW9ucyA9IGUuZGF0YS5leHBhbmQoIiR7U1RBR0lOR19ESVJ9L3NzdGF0ZWNvbXBsZXRpb25zIikKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29tcGxldGlvbnMpOgorICAgICAgICAgICAgY21kcyA9IHNldCgpCisgICAgICAgICAgICB3aXRoIG9wZW4oY29tcGxldGlvbnMsICJyIikgYXMgZjoKKyAgICAgICAgICAgICAgICBjbWRzID0gc2V0KGYpCisgICAgICAgICAgICBlLmRhdGEuc2V0VmFyKCJjb21wbGV0aW9uX2Z1bmN0aW9uIiwgIlxuIi5qb2luKGNtZHMpKQorICAgICAgICAgICAgZS5kYXRhLnNldFZhckZsYWcoImNvbXBsZXRpb25fZnVuY3Rpb24iLCAiZnVuYyIsICIxIikKKyAgICAgICAgICAgIGJiLmRlYnVnKDEsICJFeGVjdXRpbmcgU2NlbmVRdWV1ZSBDb21wbGV0aW9uIGNvbW1hbmRzOiAlcyIgJSAiXG4iLmpvaW4oY21kcykpCisgICAgICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoImNvbXBsZXRpb25fZnVuY3Rpb24iLCBlLmRhdGEpCisgICAgICAgICAgICBvcy5yZW1vdmUoY29tcGxldGlvbnMpCit9CisKK0NPTkZJR1VSRVNUQU1QRklMRSA9ICIke1dPUktESVJ9L2NvbmZpZ3VyZS5zc3RhdGUiCitDTEVBTkJST0tFTiA9ICIwIgorCithZGR0YXNrIGNvbmZpZ3VyZSBhZnRlciBkb19wYXRjaAorZG9fY29uZmlndXJlW2RpcnNdID0gIiR7Qn0iCitkb19jb25maWd1cmVbZGVwdGFza10gPSAiZG9fcG9wdWxhdGVfc3lzcm9vdCIKK2Jhc2VfZG9fY29uZmlndXJlKCkgeworCWlmIFsgLW4gIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgLWEgLWUgIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgXTsgdGhlbgorCQlpZiBbICJgY2F0ICR7Q09ORklHVVJFU1RBTVBGSUxFfWAiICE9ICIke0JCX1RBU0tIQVNIfSIgXTsgdGhlbgorCQkJY2QgJHtCfQorCQkJaWYgWyAiJHtDTEVBTkJST0tFTn0iICE9ICIxIiAtYSBcKCAtZSBNYWtlZmlsZSAtbyAtZSBtYWtlZmlsZSAtbyAtZSBHTlVtYWtlZmlsZSBcKSBdOyB0aGVuCisJCQkJb2VfcnVubWFrZSBjbGVhbgorCQkJZmkKKwkJCWZpbmQgJHtCfSAtaWdub3JlX3JlYWRkaXJfcmFjZSAtbmFtZSBcKi5sYSAtZGVsZXRlCisJCWZpCisJZmkKKwlpZiBbIC1uICIke0NPTkZJR1VSRVNUQU1QRklMRX0iIF07IHRoZW4KKwkJZWNobyAke0JCX1RBU0tIQVNIfSA+ICR7Q09ORklHVVJFU1RBTVBGSUxFfQorCWZpCit9CisKK2FkZHRhc2sgY29tcGlsZSBhZnRlciBkb19jb25maWd1cmUKK2RvX2NvbXBpbGVbZGlyc10gPSAiJHtCfSIKK2Jhc2VfZG9fY29tcGlsZSgpIHsKKwlpZiBbIC1lIE1ha2VmaWxlIC1vIC1lIG1ha2VmaWxlIC1vIC1lIEdOVW1ha2VmaWxlIF07IHRoZW4KKwkJb2VfcnVubWFrZSB8fCBkaWUgIm1ha2UgZmFpbGVkIgorCWVsc2UKKwkJYmJub3RlICJub3RoaW5nIHRvIGNvbXBpbGUiCisJZmkKK30KKworYWRkdGFzayBpbnN0YWxsIGFmdGVyIGRvX2NvbXBpbGUKK2RvX2luc3RhbGxbZGlyc10gPSAiJHtEfSAke0J9IgorIyBSZW1vdmUgYW5kIHJlLWNyZWF0ZSAke0R9IHNvIHRoYXQgaXMgaXQgZ3VhcmFudGVlZCB0byBiZSBlbXB0eQorZG9faW5zdGFsbFtjbGVhbmRpcnNdID0gIiR7RH0iCisKK2Jhc2VfZG9faW5zdGFsbCgpIHsKKwk6Cit9CisKK2Jhc2VfZG9fcGFja2FnZSgpIHsKKwk6Cit9CisKK2FkZHRhc2sgYnVpbGQgYWZ0ZXIgZG9fcG9wdWxhdGVfc3lzcm9vdAorZG9fYnVpbGRbbm9leGVjXSA9ICIxIgorZG9fYnVpbGRbcmVjcmRlcHRhc2tdICs9ICJkb19kZXBsb3kiCitkb19idWlsZCAoKSB7CisJOgorfQorCitkZWYgc2V0X3BhY2thZ2V0cmlwbGV0KGQpOgorICAgIGFyY2hzID0gW10KKyAgICB0b3MgPSBbXQorICAgIHR2cyA9IFtdCisKKyAgICBhcmNocy5hcHBlbmQoZC5nZXRWYXIoIlBBQ0tBR0VfQVJDSFMiLCBUcnVlKS5zcGxpdCgpKQorICAgIHRvcy5hcHBlbmQoZC5nZXRWYXIoIlRBUkdFVF9PUyIsIFRydWUpKQorICAgIHR2cy5hcHBlbmQoZC5nZXRWYXIoIlRBUkdFVF9WRU5ET1IiLCBUcnVlKSkKKworICAgIGRlZiBzZXR0cmlwbGV0KGQsIHZhcm5hbWUsIGFyY2hzLCB0b3MsIHR2cyk6CisgICAgICAgIHRyaXBsZXRzID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGFyY2hzKSk6CisgICAgICAgICAgICBmb3IgYXJjaCBpbiBhcmNoc1tpXToKKyAgICAgICAgICAgICAgICB0cmlwbGV0cy5hcHBlbmQoYXJjaCArIHR2c1tpXSArICItIiArIHRvc1tpXSkKKyAgICAgICAgdHJpcGxldHMucmV2ZXJzZSgpCisgICAgICAgIGQuc2V0VmFyKHZhcm5hbWUsICIgIi5qb2luKHRyaXBsZXRzKSkKKworICAgIHNldHRyaXBsZXQoZCwgIlBLR1RSSVBMRVRTIiwgYXJjaHMsIHRvcywgdHZzKQorCisgICAgdmFyaWFudHMgPSBkLmdldFZhcigiTVVMVElMSUJfVkFSSUFOVFMiLCBUcnVlKSBvciAiIgorICAgIGZvciBpdGVtIGluIHZhcmlhbnRzLnNwbGl0KCk6CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyAiOnZpcnRjbGFzcy1tdWx0aWxpYi0iICsgaXRlbQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBvdmVycmlkZXMpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGFyY2hzLmFwcGVuZChsb2NhbGRhdGEuZ2V0VmFyKCJQQUNLQUdFX0FSQ0hTIiwgVHJ1ZSkuc3BsaXQoKSkKKyAgICAgICAgdG9zLmFwcGVuZChsb2NhbGRhdGEuZ2V0VmFyKCJUQVJHRVRfT1MiLCBUcnVlKSkKKyAgICAgICAgdHZzLmFwcGVuZChsb2NhbGRhdGEuZ2V0VmFyKCJUQVJHRVRfVkVORE9SIiwgVHJ1ZSkpCisKKyAgICBzZXR0cmlwbGV0KGQsICJQS0dNTFRSSVBMRVRTIiwgYXJjaHMsIHRvcywgdHZzKQorCitweXRob24gKCkgeworICAgIGltcG9ydCBzdHJpbmcsIHJlCisKKyAgICAjIEhhbmRsZSBQQUNLQUdFQ09ORklHCisgICAgIworICAgICMgVGhlc2UgdGFrZSB0aGUgZm9ybToKKyAgICAjCisgICAgIyBQQUNLQUdFQ09ORklHID8/PSAiPGRlZmF1bHQgb3B0aW9ucz4iCisgICAgIyBQQUNLQUdFQ09ORklHW2Zvb10gPSAiLS1lbmFibGUtZm9vLC0tZGlzYWJsZS1mb28sZm9vX2RlcGVuZHMsZm9vX3J1bnRpbWVfZGVwZW5kcyIKKyAgICBwa2djb25maWdmbGFncyA9IGQuZ2V0VmFyRmxhZ3MoIlBBQ0tBR0VDT05GSUciKSBvciB7fQorICAgIGlmIHBrZ2NvbmZpZ2ZsYWdzOgorICAgICAgICBwa2djb25maWcgPSAoZC5nZXRWYXIoJ1BBQ0tBR0VDT05GSUcnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisKKyAgICAgICAgbWxwcmVmaXggPSBkLmdldFZhcigiTUxQUkVGSVgiLCBUcnVlKQorCisgICAgICAgIGRlZiBleHBhbmRGaWx0ZXIoYXBwZW5kcywgZXh0ZW5zaW9uLCBwcmVmaXgpOgorICAgICAgICAgICAgYXBwZW5kcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhkLmV4cGFuZCgiICIuam9pbihhcHBlbmRzKSkpCisgICAgICAgICAgICBuZXdhcHBlbmRzID0gW10KKyAgICAgICAgICAgIGZvciBhIGluIGFwcGVuZHM6CisgICAgICAgICAgICAgICAgaWYgYS5lbmRzd2l0aCgiLW5hdGl2ZSIpIG9yICgiLWNyb3NzLSIgaW4gYSk6CisgICAgICAgICAgICAgICAgICAgIG5ld2FwcGVuZHMuYXBwZW5kKGEpCisgICAgICAgICAgICAgICAgZWxpZiBhLnN0YXJ0c3dpdGgoInZpcnR1YWwvIik6CisgICAgICAgICAgICAgICAgICAgIHN1YnMgPSBhLnNwbGl0KCIvIiwgMSlbMV0KKyAgICAgICAgICAgICAgICAgICAgbmV3YXBwZW5kcy5hcHBlbmQoInZpcnR1YWwvIiArIHByZWZpeCArIHN1YnMgKyBleHRlbnNpb24pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgYS5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdhcHBlbmRzLmFwcGVuZChhICsgZXh0ZW5zaW9uKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3YXBwZW5kcy5hcHBlbmQocHJlZml4ICsgYSArIGV4dGVuc2lvbikKKyAgICAgICAgICAgIHJldHVybiBuZXdhcHBlbmRzCisKKyAgICAgICAgZGVmIGFwcGVuZFZhcih2YXJuYW1lLCBhcHBlbmRzKToKKyAgICAgICAgICAgIGlmIG5vdCBhcHBlbmRzOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaWYgdmFybmFtZS5maW5kKCJERVBFTkRTIikgIT0gLTE6CisgICAgICAgICAgICAgICAgaWYgcG4uc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmRzID0gZXhwYW5kRmlsdGVyKGFwcGVuZHMsICIiLCAibmF0aXZlc2RrLSIpCisgICAgICAgICAgICAgICAgaWYgcG4uZW5kc3dpdGgoIi1uYXRpdmUiKToKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kcyA9IGV4cGFuZEZpbHRlcihhcHBlbmRzLCAiLW5hdGl2ZSIsICIiKQorICAgICAgICAgICAgICAgIGlmIG1scHJlZml4OgorICAgICAgICAgICAgICAgICAgICBhcHBlbmRzID0gZXhwYW5kRmlsdGVyKGFwcGVuZHMsICIiLCBtbHByZWZpeCkKKyAgICAgICAgICAgIHZhcm5hbWUgPSBkLmV4cGFuZCh2YXJuYW1lKQorICAgICAgICAgICAgZC5hcHBlbmRWYXIodmFybmFtZSwgIiAiICsgIiAiLmpvaW4oYXBwZW5kcykpCisKKyAgICAgICAgZXh0cmFkZXBzID0gW10KKyAgICAgICAgZXh0cmFyZGVwcyA9IFtdCisgICAgICAgIGV4dHJhY29uZiA9IFtdCisgICAgICAgIGZvciBmbGFnLCBmbGFndmFsIGluIHNvcnRlZChwa2djb25maWdmbGFncy5pdGVtcygpKToKKyAgICAgICAgICAgIGl0ZW1zID0gZmxhZ3ZhbC5zcGxpdCgiLCIpCisgICAgICAgICAgICBudW0gPSBsZW4oaXRlbXMpCisgICAgICAgICAgICBpZiBudW0gPiA0OgorICAgICAgICAgICAgICAgIGJiLmVycm9yKCJPbmx5IGVuYWJsZSxkaXNhYmxlLGRlcGVuZCxyZGVwZW5kIGNhbiBiZSBzcGVjaWZpZWQhIikKKworICAgICAgICAgICAgaWYgZmxhZyBpbiBwa2djb25maWc6CisgICAgICAgICAgICAgICAgaWYgbnVtID49IDMgYW5kIGl0ZW1zWzJdOgorICAgICAgICAgICAgICAgICAgICBleHRyYWRlcHMuYXBwZW5kKGl0ZW1zWzJdKQorICAgICAgICAgICAgICAgIGlmIG51bSA+PSA0IGFuZCBpdGVtc1szXToKKyAgICAgICAgICAgICAgICAgICAgZXh0cmFyZGVwcy5hcHBlbmQoaXRlbXNbM10pCisgICAgICAgICAgICAgICAgaWYgbnVtID49IDEgYW5kIGl0ZW1zWzBdOgorICAgICAgICAgICAgICAgICAgICBleHRyYWNvbmYuYXBwZW5kKGl0ZW1zWzBdKQorICAgICAgICAgICAgZWxpZiBudW0gPj0gMiBhbmQgaXRlbXNbMV06CisgICAgICAgICAgICAgICAgICAgIGV4dHJhY29uZi5hcHBlbmQoaXRlbXNbMV0pCisgICAgICAgIGFwcGVuZFZhcignREVQRU5EUycsIGV4dHJhZGVwcykKKyAgICAgICAgYXBwZW5kVmFyKCdSREVQRU5EU18ke1BOfScsIGV4dHJhcmRlcHMpCisgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2NtYWtlJywgZCk6CisgICAgICAgICAgICBhcHBlbmRWYXIoJ0VYVFJBX09FQ01BS0UnLCBleHRyYWNvbmYpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcHBlbmRWYXIoJ0VYVFJBX09FQ09ORicsIGV4dHJhY29uZikKKworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBsaWNlbnNlID0gZC5nZXRWYXIoJ0xJQ0VOU0UnLCBUcnVlKQorICAgIGlmIGxpY2Vuc2UgPT0gIklOVkFMSUQiOgorICAgICAgICBiYi5mYXRhbCgnVGhpcyByZWNpcGUgZG9lcyBub3QgaGF2ZSB0aGUgTElDRU5TRSBmaWVsZCBzZXQgKCVzKScgJSBwbikKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2xpY2Vuc2UnLCBkKToKKyAgICAgICAgY2hlY2tfbGljZW5zZV9mb3JtYXQoZCkKKyAgICAgICAgdW5tYXRjaGVkX2xpY2Vuc2VfZmxhZyA9IGNoZWNrX2xpY2Vuc2VfZmxhZ3MoZCkKKyAgICAgICAgaWYgdW5tYXRjaGVkX2xpY2Vuc2VfZmxhZzoKKyAgICAgICAgICAgIGJiLmRlYnVnKDEsICJTa2lwcGluZyAlcyBiZWNhdXNlIGl0IGhhcyBhIHJlc3RyaWN0ZWQgbGljZW5zZSBub3QiCisgICAgICAgICAgICAgICAgICIgd2hpdGVsaXN0ZWQgaW4gTElDRU5TRV9GTEFHU19XSElURUxJU1QiICUgcG4pCisgICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiYmVjYXVzZSBpdCBoYXMgYSByZXN0cmljdGVkIGxpY2Vuc2Ugbm90IgorICAgICAgICAgICAgICAgICAiIHdoaXRlbGlzdGVkIGluIExJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUIikKKworICAgICMgSWYgd2UncmUgYnVpbGRpbmcgYSB0YXJnZXQgcGFja2FnZSB3ZSBuZWVkIHRvIHVzZSBmYWtlcm9vdCAocHNldWRvKQorICAgICMgaW4gb3JkZXIgdG8gY2FwdHVyZSBwZXJtaXNzaW9ucywgb3duZXJzLCBncm91cHMgYW5kIHNwZWNpYWwgZmlsZXMKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpOgorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3VucGFjaycsICd1bWFzaycsICcwMjInKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2NvbmZpZ3VyZScsICd1bWFzaycsICcwMjInKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2NvbXBpbGUnLCAndW1hc2snLCAnMDIyJykKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19pbnN0YWxsJywgJ2RlcGVuZHMnLCAnIHZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2luc3RhbGwnLCAnZmFrZXJvb3QnLCAxKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2luc3RhbGwnLCAndW1hc2snLCAnMDIyJykKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlJywgJ2RlcGVuZHMnLCAnIHZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3BhY2thZ2UnLCAnZmFrZXJvb3QnLCAxKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3BhY2thZ2UnLCAndW1hc2snLCAnMDIyJykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19wYWNrYWdlX3NldHNjZW5lJywgJ2Zha2Vyb290JywgMSkKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlX3NldHNjZW5lJywgJ2RlcGVuZHMnLCAnIHZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2RldnNoZWxsJywgJ2Zha2Vyb290JywgMSkKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19kZXZzaGVsbCcsICdkZXBlbmRzJywgJyB2aXJ0dWFsL2Zha2Vyb290LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKyAgICBzb3VyY2VfbWlycm9yX2ZldGNoID0gZC5nZXRWYXIoJ1NPVVJDRV9NSVJST1JfRkVUQ0gnLCAwKQorICAgIGlmIG5vdCBzb3VyY2VfbWlycm9yX2ZldGNoOgorICAgICAgICBuZWVkX2hvc3QgPSBkLmdldFZhcignQ09NUEFUSUJMRV9IT1NUJywgVHJ1ZSkKKyAgICAgICAgaWYgbmVlZF9ob3N0OgorICAgICAgICAgICAgaW1wb3J0IHJlCisgICAgICAgICAgICB0aGlzX2hvc3QgPSBkLmdldFZhcignSE9TVF9TWVMnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHJlLm1hdGNoKG5lZWRfaG9zdCwgdGhpc19ob3N0KToKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiaW5jb21wYXRpYmxlIHdpdGggaG9zdCAlcyAobm90IGluIENPTVBBVElCTEVfSE9TVCkiICUgdGhpc19ob3N0KQorCisgICAgICAgIG5lZWRfbWFjaGluZSA9IGQuZ2V0VmFyKCdDT01QQVRJQkxFX01BQ0hJTkUnLCBUcnVlKQorICAgICAgICBpZiBuZWVkX21hY2hpbmU6CisgICAgICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgICAgIGNvbXBhdF9tYWNoaW5lcyA9IChkLmdldFZhcignTUFDSElORU9WRVJSSURFUycsIFRydWUpIG9yICIiKS5zcGxpdCgiOiIpCisgICAgICAgICAgICBmb3IgbSBpbiBjb21wYXRfbWFjaGluZXM6CisgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2gobmVlZF9tYWNoaW5lLCBtKToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoImluY29tcGF0aWJsZSB3aXRoIG1hY2hpbmUgJXMgKG5vdCBpbiBDT01QQVRJQkxFX01BQ0hJTkUpIiAlIGQuZ2V0VmFyKCdNQUNISU5FJywgVHJ1ZSkpCisKKworICAgICAgICBiYWRfbGljZW5zZXMgPSAoZC5nZXRWYXIoJ0lOQ09NUEFUSUJMRV9MSUNFTlNFJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgICAgICBjaGVja19saWNlbnNlID0gRmFsc2UgaWYgcG4uc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpIGVsc2UgVHJ1ZQorICAgICAgICBmb3IgdCBpbiBbIi1uYXRpdmUiLCAiLWNyb3NzLSR7VEFSR0VUX0FSQ0h9IiwgIi1jcm9zcy1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IiwKKyAgICAgICAgICAgICAgIi1jcm9zc3Nkay0ke1NES19BUkNIfSIsICItY3Jvc3NzZGstaW5pdGlhbC0ke1NES19BUkNIfSIsCisgICAgICAgICAgICAgICItY3Jvc3MtY2FuYWRpYW4tJHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfSJdOgorICAgICAgICAgICAgaWYgcG4uZW5kc3dpdGgoZC5leHBhbmQodCkpOgorICAgICAgICAgICAgICAgIGNoZWNrX2xpY2Vuc2UgPSBGYWxzZQorICAgICAgICBpZiBwbi5zdGFydHN3aXRoKCJnY2Mtc291cmNlLSIpOgorICAgICAgICAgICAgY2hlY2tfbGljZW5zZSA9IEZhbHNlCisKKyAgICAgICAgaWYgY2hlY2tfbGljZW5zZSBhbmQgYmFkX2xpY2Vuc2VzOgorICAgICAgICAgICAgYmFkX2xpY2Vuc2VzID0gZXhwYW5kX3dpbGRjYXJkX2xpY2Vuc2VzKGQsIGJhZF9saWNlbnNlcykKKworICAgICAgICAgICAgd2hpdGVsaXN0ID0gW10KKyAgICAgICAgICAgIGluY29tcGF0d2wgPSBbXQorICAgICAgICAgICAgaHRpbmNvbXBhdHdsID0gW10KKyAgICAgICAgICAgIGZvciBsaWMgaW4gYmFkX2xpY2Vuc2VzOgorICAgICAgICAgICAgICAgIHNwZHhfbGljZW5zZSA9IHJldHVybl9zcGR4KGQsIGxpYykKKyAgICAgICAgICAgICAgICBmb3IgdyBpbiBbIkhPU1RUT09MU19XSElURUxJU1RfIiwgIkxHUEx2Ml9XSElURUxJU1RfIiwgIldISVRFTElTVF8iXToKKyAgICAgICAgICAgICAgICAgICAgd2hpdGVsaXN0LmV4dGVuZCgoZC5nZXRWYXIodyArIGxpYywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgICAgICAgICAgICAgICAgIGlmIHNwZHhfbGljZW5zZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaXRlbGlzdC5leHRlbmQoKGQuZ2V0VmFyKHcgKyBzcGR4X2xpY2Vuc2UsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgICAgICAgICAgICAgICAgICAnJycKKyAgICAgICAgICAgICAgICAgICAgV2UgbmVlZCB0byB0cmFjayB3aGF0IHdlIGFyZSB3aGl0ZWxpc3RpbmcgYW5kIHdoeS4gSWYgcG4gaXMgCisgICAgICAgICAgICAgICAgICAgIGluY29tcGF0aWJsZSBhbmQgaXMgbm90IEhPU1RUT09MU19XSElURUxJU1RfIHdlIG5lZWQgdG8gYmUgCisgICAgICAgICAgICAgICAgICAgIGFibGUgdG8gbm90ZSB0aGF0IHRoZSBpbWFnZSB0aGF0IGlzIGNyZWF0ZWQgbWF5IGluZmFjdCAKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbiBpbmNvbXBhdGlibGUgbGljZW5zZXMgZGVzcGl0ZSBJTkNPTVBBVElCTEVfTElDRU5TRSAKKyAgICAgICAgICAgICAgICAgICAgYmVpbmcgc2V0LgorICAgICAgICAgICAgICAgICAgICAnJycKKyAgICAgICAgICAgICAgICAgICAgaWYgIkhPU1RUT09MUyIgaW4gdzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0aW5jb21wYXR3bC5leHRlbmQoKGQuZ2V0VmFyKHcgKyBsaWMsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3BkeF9saWNlbnNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0aW5jb21wYXR3bC5leHRlbmQoKGQuZ2V0VmFyKHcgKyBzcGR4X2xpY2Vuc2UsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5jb21wYXR3bC5leHRlbmQoKGQuZ2V0VmFyKHcgKyBsaWMsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3BkeF9saWNlbnNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY29tcGF0d2wuZXh0ZW5kKChkLmdldFZhcih3ICsgc3BkeF9saWNlbnNlLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKworICAgICAgICAgICAgaWYgbm90IHBuIGluIHdoaXRlbGlzdDoKKyAgICAgICAgICAgICAgICByZWNpcGVfbGljZW5zZSA9IGQuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBwa2dzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgICAgICAgICAgICAgIHNraXBwZWRfcGtncyA9IFtdCisgICAgICAgICAgICAgICAgdW5za2lwcGVkX3BrZ3MgPSBbXQorICAgICAgICAgICAgICAgIGZvciBwa2cgaW4gcGtnczoKKyAgICAgICAgICAgICAgICAgICAgaWYgaW5jb21wYXRpYmxlX2xpY2Vuc2UoZCwgYmFkX2xpY2Vuc2VzLCBwa2cpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2tpcHBlZF9wa2dzLmFwcGVuZChwa2cpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNraXBwZWRfcGtncy5hcHBlbmQocGtnKQorICAgICAgICAgICAgICAgIGFsbF9za2lwcGVkID0gc2tpcHBlZF9wa2dzIGFuZCBub3QgdW5za2lwcGVkX3BrZ3MKKyAgICAgICAgICAgICAgICBpZiB1bnNraXBwZWRfcGtnczoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiBza2lwcGVkX3BrZ3M6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi5kZWJ1ZygxLCAiU0tJUFBJTkcgdGhlIHBhY2thZ2UgIiArIHBrZyArICIgYXQgZG9fcm9vdGZzIGJlY2F1c2UgaXQncyAiICsgcmVjaXBlX2xpY2Vuc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBkLnNldFZhcignTElDRU5TRV9FWENMVVNJT04tJyArIHBrZywgMSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiB1bnNraXBwZWRfcGtnczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICJJTkNMVURJTkcgdGhlIHBhY2thZ2UgIiArIHBrZykKKyAgICAgICAgICAgICAgICBlbGlmIGFsbF9za2lwcGVkIG9yIGluY29tcGF0aWJsZV9saWNlbnNlKGQsIGJhZF9saWNlbnNlcyk6CisgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICJTS0lQUElORyByZWNpcGUgJXMgYmVjYXVzZSBpdCdzICVzIiAlIChwbiwgcmVjaXBlX2xpY2Vuc2UpKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiaW5jb21wYXRpYmxlIHdpdGggbGljZW5zZSAlcyIgJSByZWNpcGVfbGljZW5zZSkKKyAgICAgICAgICAgIGVsaWYgcG4gaW4gd2hpdGVsaXN0OgorICAgICAgICAgICAgICAgIGlmIHBuIGluIGluY29tcGF0d2w6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIklOQ0xVRElORyAiICsgcG4gKyAiIGFzIGJ1aWxkYWJsZSBkZXNwaXRlIElOQ09NUEFUSUJMRV9MSUNFTlNFIGJlY2F1c2UgaXQgaGFzIGJlZW4gd2hpdGVsaXN0ZWQiKQorICAgICAgICAgICAgICAgIGVsaWYgcG4gaW4gaHRpbmNvbXBhdHdsOgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJJTkNMVURJTkcgIiArIHBuICsgIiBhcyBidWlsZGFibGUgZGVzcGl0ZSBJTkNPTVBBVElCTEVfTElDRU5TRSBiZWNhdXNlIGl0IGhhcyBiZWVuIHdoaXRlbGlzdGVkIGZvciBIT1NUVE9PTFMiKQorCisgICAgc3JjdXJpID0gZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKQorICAgICMgU3ZuIHBhY2thZ2VzIHNob3VsZCBERVBFTkQgb24gc3VidmVyc2lvbi1uYXRpdmUKKyAgICBpZiAic3ZuOi8vIiBpbiBzcmN1cmk6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZmV0Y2gnLCAnZGVwZW5kcycsICcgc3VidmVyc2lvbi1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisKKyAgICAjIEdpdCBwYWNrYWdlcyBzaG91bGQgREVQRU5EIG9uIGdpdC1uYXRpdmUKKyAgICBpZiAiZ2l0Oi8vIiBpbiBzcmN1cmk6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZmV0Y2gnLCAnZGVwZW5kcycsICcgZ2l0LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKworICAgICMgTWVyY3VyaWFsIHBhY2thZ2VzIHNob3VsZCBERVBFTkQgb24gbWVyY3VyaWFsLW5hdGl2ZQorICAgIGVsaWYgImhnOi8vIiBpbiBzcmN1cmk6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZmV0Y2gnLCAnZGVwZW5kcycsICcgbWVyY3VyaWFsLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKworICAgICMgT1NDIHBhY2thZ2VzIHNob3VsZCBERVBFTkQgb24gb3NjLW5hdGl2ZQorICAgIGVsaWYgIm9zYzovLyIgaW4gc3JjdXJpOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2ZldGNoJywgJ2RlcGVuZHMnLCAnIG9zYy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisKKyAgICAjICoubHo0IHNob3VsZCBkZXBlbmRzIG9uIGx6NC1uYXRpdmUgZm9yIHVucGFja2luZworICAgICMgTm90IGVuZHN3aXRoIGJlY2F1c2Ugb2YgIioucGF0Y2gubHo0O3BhdGNoPTEiLiBOZWVkIGJiLmZldGNoLmRlY29kZXVybCBpbiBmdXR1cmUKKyAgICBpZiAnLmx6NCcgaW4gc3JjdXJpOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3VucGFjaycsICdkZXBlbmRzJywgJyBsejQtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorCisgICAgIyAqLnh6IHNob3VsZCBkZXBlbmRzIG9uIHh6LW5hdGl2ZSBmb3IgdW5wYWNraW5nCisgICAgIyBOb3QgZW5kc3dpdGggYmVjYXVzZSBvZiAiKi5wYXRjaC54ejtwYXRjaD0xIi4gTmVlZCBiYi5mZXRjaC5kZWNvZGV1cmwgaW4gZnV0dXJlCisgICAgaWYgJy54eicgaW4gc3JjdXJpOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3VucGFjaycsICdkZXBlbmRzJywgJyB4ei1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisKKyAgICAjIHVuemlwLW5hdGl2ZSBzaG91bGQgYWxyZWFkeSBiZSBzdGFnZWQgYmVmb3JlIHVucGFja2luZyBaSVAgcmVjaXBlcworICAgIGlmICIuemlwIiBpbiBzcmN1cmk6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fdW5wYWNrJywgJ2RlcGVuZHMnLCAnIHVuemlwLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKworICAgICMgZmlsZSBpcyBuZWVkZWQgYnkgcnBtMmNwaW8uc2gKKyAgICBpZiAiLnNyYy5ycG0iIGluIHNyY3VyaToKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb191bnBhY2snLCAnZGVwZW5kcycsICcgZmlsZS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisKKyAgICBzZXRfcGFja2FnZXRyaXBsZXQoZCkKKworICAgICMgJ211bHRpbWFjaGluZScgaGFuZGxpbmcKKyAgICBtYWNoX2FyY2ggPSBkLmdldFZhcignTUFDSElORV9BUkNIJywgVHJ1ZSkKKyAgICBwa2dfYXJjaCA9IGQuZ2V0VmFyKCdQQUNLQUdFX0FSQ0gnLCBUcnVlKQorCisgICAgaWYgKHBrZ19hcmNoID09IG1hY2hfYXJjaCk6CisgICAgICAgICMgQWxyZWFkeSBtYWNoaW5lIHNwZWNpZmljIC0gbm90aGluZyBmdXJ0aGVyIHRvIGRvCisgICAgICAgIHJldHVybgorCisgICAgIworICAgICMgV2UgYWx3YXlzIHRyeSB0byBzY2FuIFNSQ19VUkkgZm9yIHVybHMgd2l0aCBtYWNoaW5lIG92ZXJyaWRlcworICAgICMgdW5sZXNzIHRoZSBwYWNrYWdlIHNldHMgU1JDX1VSSV9PVkVSUklERVNfUEFDS0FHRV9BUkNIPTAKKyAgICAjCisgICAgb3ZlcnJpZGUgPSBkLmdldFZhcignU1JDX1VSSV9PVkVSUklERVNfUEFDS0FHRV9BUkNIJywgVHJ1ZSkKKyAgICBpZiBvdmVycmlkZSAhPSAnMCc6CisgICAgICAgIHBhdGhzID0gW10KKyAgICAgICAgZnBhdGhzID0gKGQuZ2V0VmFyKCdGSUxFU1BBVEgnLCBUcnVlKSBvciAnJykuc3BsaXQoJzonKQorICAgICAgICBtYWNoaW5lID0gZC5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKQorICAgICAgICBmb3IgcCBpbiBmcGF0aHM6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmJhc2VuYW1lKHApID09IG1hY2hpbmUgYW5kIG9zLnBhdGguaXNkaXIocCk6CisgICAgICAgICAgICAgICAgcGF0aHMuYXBwZW5kKHApCisKKyAgICAgICAgaWYgbGVuKHBhdGhzKSAhPSAwOgorICAgICAgICAgICAgZm9yIHMgaW4gc3JjdXJpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaWYgbm90IHMuc3RhcnRzd2l0aCgiZmlsZTovLyIpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goW3NdLCBkKQorICAgICAgICAgICAgICAgIGxvY2FsID0gZmV0Y2hlci5sb2NhbHBhdGgocykKKyAgICAgICAgICAgICAgICBmb3IgbXAgaW4gcGF0aHM6CisgICAgICAgICAgICAgICAgICAgIGlmIGxvY2FsLnN0YXJ0c3dpdGgobXApOgorICAgICAgICAgICAgICAgICAgICAgICAgI2JiLm5vdGUoIm92ZXJyaWRpbmcgUEFDS0FHRV9BUkNIIGZyb20gJXMgdG8gJXMgZm9yICVzIiAlIChwa2dfYXJjaCwgbWFjaF9hcmNoLCBwbikpCisgICAgICAgICAgICAgICAgICAgICAgICBkLnNldFZhcignUEFDS0FHRV9BUkNIJywgIiR7TUFDSElORV9BUkNIfSIpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgIHBrZ2FyY2ggPSBkLmdldFZhcigiUEFDS0FHRV9BUkNIXyVzIiAlIHBrZywgVHJ1ZSkKKworICAgICAgICAjIFdlIGNvdWxkIGxvb2sgZm9yICE9IFBBQ0tBR0VfQVJDSCBoZXJlIGJ1dCBob3cgdG8gY2hvb3NlCisgICAgICAgICMgaWYgbXVsdGlwbGUgZGlmZmVyZW5jZXMgYXJlIHByZXNlbnQ/CisgICAgICAgICMgTG9vayB0aHJvdWdoIFBBQ0tBR0VfQVJDSFMgZm9yIHRoZSBwcmlvcml0eSBvcmRlcj8KKyAgICAgICAgaWYgcGtnYXJjaCBhbmQgcGtnYXJjaCA9PSBtYWNoX2FyY2g6CisgICAgICAgICAgICBkLnNldFZhcignUEFDS0FHRV9BUkNIJywgIiR7TUFDSElORV9BUkNIfSIpCisgICAgICAgICAgICBiYi53YXJuKCJSZWNpcGUgJXMgaXMgbWFya2VkIGFzIG9ubHkgYmVpbmcgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGJ1dCBzZWVtcyB0byBoYXZlIG1hY2hpbmUgc3BlY2lmaWMgcGFja2FnZXM/ISBUaGUgcmVjaXBlIG1heSBhcyB3ZWxsIG1hcmsgaXRzZWxmIGFzIG1hY2hpbmUgc3BlY2lmaWMgZGlyZWN0bHkuIiAlIGQuZ2V0VmFyKCJQTiIsIFRydWUpKQorfQorCithZGR0YXNrIGNsZWFuc3N0YXRlIGFmdGVyIGRvX2NsZWFuCitweXRob24gZG9fY2xlYW5zc3RhdGUoKSB7CisgICAgICAgIHNzdGF0ZV9jbGVhbl9jYWNoZWZpbGVzKGQpCit9CisKK2FkZHRhc2sgY2xlYW5hbGwgYWZ0ZXIgZG9fY2xlYW5zc3RhdGUKK3B5dGhvbiBkb19jbGVhbmFsbCgpIHsKKyAgICBzcmNfdXJpID0gKGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiBsZW4oc3JjX3VyaSkgPT0gMDoKKyAgICAgICAgcmV0dXJuCisKKyAgICB0cnk6CisgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goc3JjX3VyaSwgZCkKKyAgICAgICAgZmV0Y2hlci5jbGVhbigpCisgICAgZXhjZXB0IGJiLmZldGNoMi5CQkZldGNoRXhjZXB0aW9uLCBlOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKGUpCit9Citkb19jbGVhbmFsbFtub3N0YW1wXSA9ICIxIgorCisKK0VYUE9SVF9GVU5DVElPTlMgZG9fZmV0Y2ggZG9fdW5wYWNrIGRvX2NvbmZpZ3VyZSBkb19jb21waWxlIGRvX2luc3RhbGwgZG9fcGFja2FnZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmluX3BhY2thZ2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Jpbl9wYWNrYWdlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUyYjc1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Jpbl9wYWNrYWdlLmJiY2xhc3MKQEAgLTAsMCArMSwzNiBAQAorIworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29tbW9uIHZhcmlhYmxlIGFuZCB0YXNrIGZvciB0aGUgYmluYXJ5IHBhY2thZ2UgcmVjaXBlLgorIyBCYXNpYyBwcmluY2lwbGU6CisjICogVGhlIGZpbGVzIGhhdmUgYmVlbiB1bnBhY2tlZCB0byAke1N9IGJ5IGJhc2UuYmJjbGFzcworIyAqIFNraXAgZG9fY29uZmlndXJlIGFuZCBkb19jb21waWxlCisjICogVXNlIGRvX2luc3RhbGwgdG8gaW5zdGFsbCB0aGUgZmlsZXMgdG8gJHtEfQorIworIyBOb3RlOgorIyBUaGUgInN1YmRpciIgcGFyYW1ldGVyIGluIHRoZSBTUkNfVVJJIGlzIHVzZWZ1bCB3aGVuIHRoZSBpbnB1dCBwYWNrYWdlCisjIGlzIHJwbSwgaXBrLCBkZWIgYW5kIHNvIG9uLCBmb3IgZXhhbXBsZToKKyMKKyMgU1JDX1VSSSA9ICJodHRwOi8vZm9vLmNvbS9mb28tMS4wLXIxLmk1ODYucnBtO3N1YmRpcj1mb28tMS4wIgorIworIyBUaGVuIHRoZSBmaWxlcyB3b3VsZCBiZSB1bnBhY2tlZCB0byAke1dPUktESVJ9L2Zvby0xLjAsIG90aGVyd2lzZQorIyB0aGV5IHdvdWxkIGJlIGluICR7V09SS0RJUn0uCisjCisKKyMgU2tpcCB0aGUgdW53YW50ZWQgc3RlcHMKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKKworIyBJbnN0YWxsIHRoZSBmaWxlcyB0byAke0R9CitiaW5fcGFja2FnZV9kb19pbnN0YWxsICgpIHsKKyAgICAjIERvIGl0IGNhcmVmdWxseQorICAgIFsgLWQgIiR7U30iIF0gfHwgZXhpdCAxCisgICAgY2QgJHtTfSB8fCBleGl0IDEKKyAgICB0YXIgLS1uby1zYW1lLW93bmVyIC0tZXhjbHVkZT0nLi9wYXRjaGVzJyAtLWV4Y2x1ZGU9Jy4vLnBjJyAtY3BmIC0gLiBcCisgICAgICAgIHwgdGFyIC0tbm8tc2FtZS1vd25lciAteHBmIC0gLUMgJHtEfQorfQorCitGSUxFU18ke1BOfSA9ICIvIgorCitFWFBPUlRfRlVOQ1RJT05TIGRvX2luc3RhbGwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2JpbmNvbmZpZy1kaXNhYmxlZC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmluY29uZmlnLWRpc2FibGVkLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAyYTY2OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2JpbmNvbmZpZy1kaXNhYmxlZC5iYmNsYXNzCkBAIC0wLDAgKzEsMjkgQEAKKyMKKyMgQ2xhc3MgdG8gZGlzYWJsZSBiaW5jb25maWcgZmlsZXMgaW5zdGVhZCBvZiBpbnN0YWxsaW5nIHRoZW0KKyMKKworIyBUaGUgbGlzdCBvZiBzY3JpcHRzIHdoaWNoIHNob3VsZCBiZSBkaXNhYmxlZC4KK0JJTkNPTkZJRyA/PSAiIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS8qLWNvbmZpZyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWZvciB4IGluICR7QklOQ09ORklHfTsgZG8KKwkJIyBNYWtlIHRoZSBkaXNhYmxlZCBzY3JpcHQgZW1pdCBpbnZhbGlkIHBhcmFtZXRlcnMgZm9yIHRob3NlIGNvbmZpZ3VyZQorCQkjIHNjcmlwdHMgd2hpY2ggY2FsbCBpdCB3aXRob3V0IGNoZWNraW5nIHRoZSByZXR1cm4gY29kZS4KKwkJZWNobyAiIyEvYmluL3NoIiA+ICR7RH0keAorCQllY2hvICJlY2hvICdFUlJPUjogJHggc2hvdWxkIG5vdCBiZSB1c2VkLCB1c2UgYW4gYWx0ZXJuYXRpdmUgc3VjaCBhcyBwa2ctY29uZmlnJyA+JjIiID4+ICR7RH0keAorCQllY2hvICJlY2hvICctLXNob3VsZC1ub3QtaGF2ZS11c2VkLSR4JyIgPj4gJHtEfSR4CisJCWVjaG8gImV4aXQgMSIgPj4gJHtEfSR4CisJZG9uZQorfQorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImJpbmNvbmZpZ19kaXNhYmxlZF9zeXNyb290X3ByZXByb2Nlc3MiCisKK2JpbmNvbmZpZ19kaXNhYmxlZF9zeXNyb290X3ByZXByb2Nlc3MgKCkgeworCWZvciB4IGluICR7QklOQ09ORklHfTsgZG8KKwkJY29uZmlnbmFtZT1gYmFzZW5hbWUgJHhgCisJCWluc3RhbGwgLWQgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQorCQlpbnN0YWxsICR7RH0keCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9CisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmluY29uZmlnLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9iaW5jb25maWcuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmM0MTczCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmluY29uZmlnLmJiY2xhc3MKQEAgLTAsMCArMSw2MyBAQAorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vKi1jb25maWciCisgCisjIFRoZSBuYW1lc3BhY2VzIGNhbiBjbGFzaCBoZXJlIGhlbmNlIHRoZSB0d28gc3RlcCByZXBsYWNlCitkZWYgZ2V0X2JpbmNvbmZpZ19tYW5nbGUoZCk6CisgICAgcyA9ICItZSAnJyIKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCk6CisgICAgICAgIG9wdGlvbmFsX3F1b3RlID0gciJcKFwiXD9cKSIKKyAgICAgICAgcyArPSAiIC1lICdzOj0lcyR7YmFzZV9saWJkaXJ9Oj1cXDFPRUJBU0VMSUJESVI6OyciICUgb3B0aW9uYWxfcXVvdGUKKyAgICAgICAgcyArPSAiIC1lICdzOj0lcyR7bGliZGlyfTo9XFwxT0VMSUJESVI6OyciICUgb3B0aW9uYWxfcXVvdGUKKyAgICAgICAgcyArPSAiIC1lICdzOj0lcyR7aW5jbHVkZWRpcn06PVxcMU9FSU5DRElSOjsnIiAlIG9wdGlvbmFsX3F1b3RlCisgICAgICAgIHMgKz0gIiAtZSAnczo9JXMke2RhdGFkaXJ9Oj1cXDFPRURBVEFESVI6JyIgJSBvcHRpb25hbF9xdW90ZQorICAgICAgICBzICs9ICIgLWUgJ3M6PSVzJHtwcmVmaXh9Lzo9XFwxT0VQUkVGSVgvOiciICUgb3B0aW9uYWxfcXVvdGUKKyAgICAgICAgcyArPSAiIC1lICdzOj0lcyR7ZXhlY19wcmVmaXh9Lzo9XFwxT0VFWEVDUFJFRklYLzonIiAlIG9wdGlvbmFsX3F1b3RlCisgICAgICAgIHMgKz0gIiAtZSAnczotTCR7bGliZGlyfTotTE9FTElCRElSOjsnIgorICAgICAgICBzICs9ICIgLWUgJ3M6LUkke2luY2x1ZGVkaXJ9Oi1JT0VJTkNESVI6OyciCisgICAgICAgIHMgKz0gIiAtZSAnczpPRUJBU0VMSUJESVI6JHtTVEFHSU5HX0JBU0VMSUJESVJ9OjsnIgorICAgICAgICBzICs9ICIgLWUgJ3M6T0VMSUJESVI6JHtTVEFHSU5HX0xJQkRJUn06OyciCisgICAgICAgIHMgKz0gIiAtZSAnczpPRUlOQ0RJUjoke1NUQUdJTkdfSU5DRElSfTo7JyIKKyAgICAgICAgcyArPSAiIC1lICdzOk9FREFUQURJUjoke1NUQUdJTkdfREFUQURJUn06JyIKKyAgICAgICAgcyArPSAiIC1lICdzOk9FUFJFRklYOiR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH06JyIKKyAgICAgICAgcyArPSAiIC1lICdzOk9FRVhFQ1BSRUZJWDoke1NUQUdJTkdfRElSX0hPU1R9JHtleGVjX3ByZWZpeH06JyIKKyAgICAgICAgcyArPSAiIC1lICdzOi1JJHtXT1JLRElSfTotSSR7U1RBR0lOR19JTkNESVJ9OiciCisgICAgICAgIHMgKz0gIiAtZSAnczotTCR7V09SS0RJUn06LUwke1NUQUdJTkdfTElCRElSfTonIgorICAgICAgICBpZiBiYi5kYXRhLmdldFZhcigiT0VfQklOQ09ORklHX0VYVFJBX01BTkdMRSIsIGQpOgorICAgICAgICAgICAgcyArPSBiYi5kYXRhLmdldFZhcigiT0VfQklOQ09ORklHX0VYVFJBX01BTkdMRSIsIGQpCisKKyAgICByZXR1cm4gcworCitCSU5DT05GSUdfR0xPQiA/PSAiKi1jb25maWciCisKK1BBQ0tBR0VfUFJFUFJPQ0VTU19GVU5DUyArPSAiYmluY29uZmlnX3BhY2thZ2VfcHJlcHJvY2VzcyIKKworYmluY29uZmlnX3BhY2thZ2VfcHJlcHJvY2VzcyAoKSB7CisJZm9yIGNvbmZpZyBpbiBgZmluZCAke1BLR0R9IC1uYW1lICcke0JJTkNPTkZJR19HTE9CfSdgOyBkbworCQlzZWQgLWkgXAorCQkgICAgLWUgJ3M6JHtTVEFHSU5HX0JBU0VMSUJESVJ9OiR7YmFzZV9saWJkaXJ9Omc7JyBcCisJCSAgICAtZSAnczoke1NUQUdJTkdfTElCRElSfToke2xpYmRpcn06ZzsnIFwKKwkJICAgIC1lICdzOiR7U1RBR0lOR19JTkNESVJ9OiR7aW5jbHVkZWRpcn06ZzsnIFwKKwkJICAgIC1lICdzOiR7U1RBR0lOR19EQVRBRElSfToke2RhdGFkaXJ9OicgXAorCQkgICAgLWUgJ3M6JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fToke3ByZWZpeH06JyBcCisgICAgICAgICAgICAgICAgICAgICRjb25maWcKKwlkb25lCisJZm9yIGxhZmlsZSBpbiBgZmluZCAke1BLR0R9IC1uYW1lICIqLmxhImAgOyBkbworCQlzZWQgLWkgXAorCQkgICAgLWUgJ3M6JHtTVEFHSU5HX0JBU0VMSUJESVJ9OiR7YmFzZV9saWJkaXJ9Omc7JyBcCisJCSAgICAtZSAnczoke1NUQUdJTkdfTElCRElSfToke2xpYmRpcn06ZzsnIFwKKwkJICAgIC1lICdzOiR7U1RBR0lOR19JTkNESVJ9OiR7aW5jbHVkZWRpcn06ZzsnIFwKKwkJICAgIC1lICdzOiR7U1RBR0lOR19EQVRBRElSfToke2RhdGFkaXJ9OicgXAorCQkgICAgLWUgJ3M6JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fToke3ByZWZpeH06JyBcCisJCSAgICAkbGFmaWxlCisJZG9uZQkgICAgCit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiYmluY29uZmlnX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworYmluY29uZmlnX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJZm9yIGNvbmZpZyBpbiBgZmluZCAke1N9IC1uYW1lICcke0JJTkNPTkZJR19HTE9CfSdgIGBmaW5kICR7Qn0gLW5hbWUgJyR7QklOQ09ORklHX0dMT0J9J2A7IGRvCisJCWNvbmZpZ25hbWU9YGJhc2VuYW1lICRjb25maWdgCisJCWluc3RhbGwgLWQgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQorCQlzZWQgJHtAZ2V0X2JpbmNvbmZpZ19tYW5nbGUoZCl9ICRjb25maWcgPiAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LyRjb25maWduYW1lCisJCWNobW9kIHUreCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LyRjb25maWduYW1lCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmxhY2tsaXN0LmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ibGFja2xpc3QuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDE0MWE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmxhY2tsaXN0LmJiY2xhc3MKQEAgLTAsMCArMSw0NSBAQAorIyBhbm9ueW1vdXMgc3VwcG9ydCBjbGFzcyBmcm9tIG9yaWdpbmFsbHkgZnJvbSBhbmdzdHJvbQorIyAKKyMgVG8gdXNlIHRoZSBibGFja2xpc3QsIGEgZGlzdHJpYnV0aW9uIHNob3VsZCBpbmNsdWRlIHRoaXMKKyMgY2xhc3MgaW4gdGhlIElOSEVSSVRfRElTVFJPCisjCisjIE5vIGxvbmdlciB1c2UgQU5HU1RST01fQkxBQ0tMSVNULCBpbnN0ZWFkIHVzZSBhIHRhYmxlIG9mCisjIHJlY2lwZXMgaW4gUE5CTEFDS0xJU1QKKyMKKyMgRmVhdHVyZXM6CisjCisjICogVG8gYWRkIGEgcGFja2FnZSB0byB0aGUgYmxhY2tsaXN0LCBzZXQ6CisjICAgUE5CTEFDS0xJU1RbcG5dID0gIm1lc3NhZ2UiCisjCisKKyMgQ29wZSB3aXRoIFBOQkxBQ0tMSVNUIGZsYWdzIGZvciBtdWx0aWxpYiBjYXNlCithZGRoYW5kbGVyIGJsYWNrbGlzdF9tdWx0aWxpYl9ldmVudGhhbmRsZXIKK2JsYWNrbGlzdF9tdWx0aWxpYl9ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5Db25maWdQYXJzZWQiCitweXRob24gYmxhY2tsaXN0X211bHRpbGliX2V2ZW50aGFuZGxlcigpIHsKKyAgICBtdWx0aWxpYnMgPSBlLmRhdGEuZ2V0VmFyKCdNVUxUSUxJQlMnLCBUcnVlKQorICAgIGlmIG5vdCBtdWx0aWxpYnM6CisgICAgICAgIHJldHVybgorCisgICAgIyB0aGlzIGJsb2NrIGhhcyBiZWVuIGNvcGllZCBmcm9tIGJhc2UuYmJjbGFzcyBzbyBrZWVwIGl0IGluIHN5bmMKKyAgICBwcmVmaXhlcyA9IFtdCisgICAgZm9yIGV4dCBpbiBtdWx0aWxpYnMuc3BsaXQoKToKKyAgICAgICAgZWV4dCA9IGV4dC5zcGxpdCgnOicpCisgICAgICAgIGlmIGxlbihlZXh0KSA+IDEgYW5kIGVleHRbMF0gPT0gJ211bHRpbGliJzoKKyAgICAgICAgICAgIHByZWZpeGVzLmFwcGVuZChlZXh0WzFdKQorCisgICAgYmxhY2tsaXN0cyA9IGUuZGF0YS5nZXRWYXJGbGFncygnUE5CTEFDS0xJU1QnKSBvciB7fQorICAgIGZvciBwa2csIHJlYXNvbiBpbiBibGFja2xpc3RzLml0ZW1zKCk6CisgICAgICAgIGlmIHBrZy5lbmRzd2l0aCgoIi1uYXRpdmUiLCAiLWNyb3Nzc2RrIikpIG9yIHBrZy5zdGFydHN3aXRoKCgibmF0aXZlc2RrLSIsICJ2aXJ0dWFsL25hdGl2ZXNkay0iKSkgb3IgJ2Nyb3NzLWNhbmFkaWFuJyBpbiBwa2c6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmb3IgcCBpbiBwcmVmaXhlczoKKyAgICAgICAgICAgIG5ld3BrZyA9IHAgKyAiLSIgKyBwa2cKKyAgICAgICAgICAgIGlmIG5vdCBlLmRhdGEuZ2V0VmFyRmxhZygnUE5CTEFDS0xJU1QnLCBuZXdwa2csIFRydWUpOgorICAgICAgICAgICAgICAgIGUuZGF0YS5zZXRWYXJGbGFnKCdQTkJMQUNLTElTVCcsIG5ld3BrZywgcmVhc29uKQorfQorCitweXRob24gKCkgeworICAgIGJsYWNrbGlzdCA9IGQuZ2V0VmFyRmxhZygnUE5CTEFDS0xJU1QnLCBkLmdldFZhcignUE4nLCBUcnVlKSwgVHJ1ZSkKKworICAgIGlmIGJsYWNrbGlzdDoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIlJlY2lwZSBpcyBibGFja2xpc3RlZDogJXMiICUgKGJsYWNrbGlzdCkpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ibHVldG9vdGguYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2JsdWV0b290aC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4OGI0YWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ibHVldG9vdGguYmJjbGFzcwpAQCAtMCwwICsxLDE0IEBACisjIEF2b2lkIGNvZGUgZHVwbGljYXRpb24gaW4gYmx1ZXRvb3RoLWRlcGVuZGVudCByZWNpcGVzLgorCisjIERlZmluZSBhIHZhcmlhYmxlIHRoYXQgZXhwYW5kcyB0byB0aGUgcmVjaXBlIChwYWNrYWdlKSBwcm92aWRpbmcgY29yZQorIyBibHVldG9vdGggc3VwcG9ydCBvbiB0aGUgcGxhdGZvcm06CisjICIiIGlmIGJsdWV0b290aCBpcyBub3QgaW4gRElTVFJPX0ZFQVRVUkVTCisjIGVsc2UgImJsdWV6NSIgaWYgYmx1ZXo1IGlzIGluIERJU1RST19GRUFUVVJFUworIyBlbHNlICJibHVlejQiCisKKyMgVXNlIHRoaXMgd2l0aDoKKyMgIGluaGVyaXQgYmx1ZXRvb3RoCisjICBQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCAnJHtCTFVFWn0nLCAnJywgZCl9CisjICBQQUNLQUdFQ09ORklHW2JsdWV6NF0gPSAiLS1lbmFibGUtYmx1ZXo0LC0tZGlzYWJsZS1ibHVlejQsYmx1ZXo0IgorCitCTFVFWiA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV6NScsICdibHVlejUnLCAnYmx1ZXo0JywgZCksICcnLCBkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ib290LWRpcmVjdGRpc2suYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Jvb3QtZGlyZWN0ZGlzay5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMGUyMWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ib290LWRpcmVjdGRpc2suYmJjbGFzcwpAQCAtMCwwICsxLDE5NCBAQAorIyBib290LWRpcmVjdGRpc2suYmJjbGFzcworIyAobG9vc2x5IGJhc2VkIG9mZiBib290aW1nLmJiY2xhc3MgQ29weXJpZ2h0IChDKSAyMDA0LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuKQorIworIyBDcmVhdGUgYW4gaW1hZ2Ugd2hpY2ggY2FuIGJlIHBsYWNlZCBkaXJlY3RseSBvbnRvIGEgaGFyZGRpc2sgdXNpbmcgZGQgYW5kIHRoZW4KKyMgYm9vdGVkLgorIworIyBUaGlzIHVzZXMgc3lzbGludXguIGV4dGxpbnV4IHdvdWxkIGhhdmUgYmVlbiBuaWNlIGJ1dCByZXF1aXJlZCB0aGUgZXh0Mi8zIAorIyBwYXJ0aXRpb24gdG8gYmUgbW91bnRlZC4gZ3J1YiByZXF1aXJlcyB0byBydW4gaXRzZWxmIGFzIHBhcnQgb2YgdGhlIGluc3RhbGwgCisjIHByb2Nlc3MuCisjCisjIFRoZSBlbmQgcmVzdWx0IGlzIGEgNTEyIGJvb3Qgc2VjdG9yIHBvcHVsYXRlZCB3aXRoIGFuIE1CUiBhbmQgcGFydGl0aW9uIHRhYmxlCisjIGZvbGxvd2VkIGJ5IGFuIG1zZG9zIGZhdDE2IHBhcnRpdGlvbiBjb250YWluaW5nIHN5c2xpbnV4IGFuZCBhIGxpbnV4IGtlcm5lbAorIyBjb21wbGV0ZWQgYnkgdGhlIGV4dDIvMyByb290ZnMuCisjCisjIFdlIGhhdmUgdG8gcHVzaCB0aGUgbXNkb3MgcGFyaXRpb24gdGFibGUgc2l6ZSA+IDE2TUIgc28gZmF0IDE2IGlzIHVzZWQgYXMgcGFydGVkCisjIHdvbid0IHRvdWNoIGZhdDEyIHBhcnRpdGlvbnMuCisKKyMgRXh0ZXJuYWwgdmFyaWFibGVzIG5lZWRlZAorCisjICR7Uk9PVEZTfSAtIHRoZSByb290ZnMgaW1hZ2UgdG8gaW5jb3Jwb3JhdGUKKworZG9fYm9vdGRpcmVjdGRpc2tbZGVwZW5kc10gKz0gImRvc2ZzdG9vbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWwva2VybmVsOmRvX2RlcGxveSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzbGludXg6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzbGludXgtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRlZC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290ICIKKworUEFDS0FHRVMgPSAiICIKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgorCitCT09URERfVk9MVU1FX0lEICAgPz0gImJvb3QiCitCT09URERfRVhUUkFfU1BBQ0UgPz0gIjE2Mzg0IgorCitFRkkgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiZWZpIiwgIjEiLCAiMCIsIGQpfSIKK0VGSV9QUk9WSURFUiA/PSAiZ3J1Yi1lZmkiCitFRklfQ0xBU1MgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiZWZpIiwgIiR7RUZJX1BST1ZJREVSfSIsICIiLCBkKX0iCisKKyMgSW5jbHVkZSBsZWdhY3kgYm9vdCBpZiBNQUNISU5FX0ZFQVRVUkVTIGluY2x1ZGVzICJwY2Jpb3MiIG9yIGlmIGl0IGRvZXMgbm90CisjIGNvbnRhaW4gImVmaSIuIFRoaXMgd2F5IGxlZ2FjeSBpcyBzdXBwb3J0ZWQgYnkgZGVmYXVsdCBpZiBuZWl0aGVyIGlzCisjIHNwZWNpZmllZCwgbWFpbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGJlaGF2aW9yLgorZGVmIHBjYmlvcyhkKToKKyAgICBwY2Jpb3MgPSBiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJwY2Jpb3MiLCAiMSIsICIwIiwgZCkKKyAgICBpZiBwY2Jpb3MgPT0gIjAiOgorICAgICAgICBwY2Jpb3MgPSBiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJlZmkiLCAiMCIsICIxIiwgZCkKKyAgICByZXR1cm4gcGNiaW9zCisKK2RlZiBwY2Jpb3NfY2xhc3MoZCk6CisgICAgaWYgZC5nZXRWYXIoIlBDQklPUyIsIFRydWUpID09ICIxIjoKKyAgICAgICAgcmV0dXJuICJzeXNsaW51eCIKKyAgICByZXR1cm4gIiIKKworUENCSU9TID0gIiR7QHBjYmlvcyhkKX0iCitQQ0JJT1NfQ0xBU1MgPSAiJHtAcGNiaW9zX2NsYXNzKGQpfSIKKworaW5oZXJpdCAke1BDQklPU19DTEFTU30KK2luaGVyaXQgJHtFRklfQ0xBU1N9CisKKyMgR2V0IHRoZSBidWlsZF9zeXNsaW51eF9jZmcoKSBmdW5jdGlvbiBmcm9tIHRoZSBzeXNsaW51eCBjbGFzcworCitBVVRPX1NZU0xJTlVYQ0ZHID0gIjEiCitESVNLX1NJR05BVFVSRSA/PSAiJHtESVNLX1NJR05BVFVSRV9HRU5FUkFURUR9IgorU1lTTElOVVhfUk9PVCA/PSAicm9vdD0vZGV2L3NkYTIiCitTWVNMSU5VWF9USU1FT1VUID89ICIxMCIKKworSVNfVk0gPSAnJHtAYmIudXRpbHMuY29udGFpbnNfYW55KCJJTUFHRV9GU1RZUEVTIiwgWyJ2bWRrIiwgInZkaSIsICJxY293MiJdLCAidHJ1ZSIsICJmYWxzZSIsIGQpfScKKworYm9vdF9kaXJlY3RfcG9wdWxhdGUoKSB7CisJZGVzdD0kMQorCWluc3RhbGwgLWQgJGRlc3QKKworCSMgSW5zdGFsbCBiekltYWdlLCBpbml0cmQsIGFuZCByb290ZnMuaW1nIGluIERFU1QgZm9yIGFsbCBsb2FkZXJzIHRvIHVzZS4KKwlpZiBbIC1lICR7REVQTE9ZX0RJUl9JTUFHRX0vYnpJbWFnZSBdOyB0aGVuCisJCWluc3RhbGwgLW0gMDY0NCAke0RFUExPWV9ESVJfSU1BR0V9L2J6SW1hZ2UgJGRlc3Qvdm1saW51egorCWZpCisKKwkjIGluaXRyZCBpcyBtYWRlIG9mIGNvbmNhdGVuYXRpb24gb2YgbXVsdGlwbGUgZmlsZXN5c3RlbSBpbWFnZXMKKwlpZiBbIC1uICIke0lOSVRSRH0iIF07IHRoZW4KKwkJcm0gLWYgJGRlc3QvaW5pdHJkCisJCWZvciBmcyBpbiAke0lOSVRSRH0KKwkJZG8KKwkJCWlmIFsgLXMgIiR7ZnN9IiBdOyB0aGVuCisJCQkJY2F0ICR7ZnN9ID4+ICRkZXN0L2luaXRyZAorCQkJZWxzZQorCQkJCWJiZmF0YWwgIiR7ZnN9IGlzIGludmFsaWQuIGluaXRyZCBpbWFnZSBjcmVhdGlvbiBmYWlsZWQuIgorCQkJZmkKKwkJZG9uZQorCQljaG1vZCAwNjQ0ICRkZXN0L2luaXRyZAorCWZpCit9CisKK2J1aWxkX2Jvb3RfZGQoKSB7CisJSERERElSPSIke1N9L2hkZC9ib290IgorCUhERElNRz0iJHtTfS9oZGQuaW1hZ2UiCisJSU1BR0U9JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LmhkZGRpcmVjdAorCisJYm9vdF9kaXJlY3RfcG9wdWxhdGUgJEhERERJUgorCisJaWYgWyAiJHtQQ0JJT1N9IiA9ICIxIiBdOyB0aGVuCisJCXN5c2xpbnV4X2hkZGltZ19wb3B1bGF0ZSAkSERERElSCisJZmkKKwlpZiBbICIke0VGSX0iID0gIjEiIF07IHRoZW4KKwkJZWZpX2hkZGltZ19wb3B1bGF0ZSAkSERERElSCisJZmkKKworCWlmIFsgIiR7SVNfVk19IiA9ICJ0cnVlIiBdOyB0aGVuCisJCWlmIFsgIngke0FVVE9fU1lTTElOVVhNRU5VfSIgPSAieDEiIF0gOyB0aGVuCisJCQlpbnN0YWxsIC1tIDA2NDQgJHtTVEFHSU5HX0RJUn0vJHtNQUNISU5FfS91c3Ivc2hhcmUvc3lzbGludXgvdmVzYW1lbnUuYzMyICRIRERESVIvJHtTWVNMSU5VWERJUn0vCisJCQlpZiBbICJ4JHtTWVNMSU5VWF9TUExBU0h9IiAhPSAieCIgXSA7IHRoZW4KKwkJCQlpbnN0YWxsIC1tIDA2NDQgJHtTWVNMSU5VWF9TUExBU0h9ICRIRERESVIvJHtTWVNMSU5VWERJUn0vc3BsYXNoLmxzcworCQkJZmkKKwkJZmkKKwlmaQorCisJQkxPQ0tTPWBkdSAtYmtzICRIRERESVIgfCBjdXQgLWYgMWAKKwlCTE9DS1M9YGV4cHIgJEJMT0NLUyArICR7Qk9PVEREX0VYVFJBX1NQQUNFfWAKKworCSMgRW5zdXJlIHRvdGFsIHNlY3RvcnMgaXMgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIHNlY3RvcnMgcGVyCisJIyB0cmFjayBvciBtY29weSB3aWxsIGNvbXBsYWluLiBTZWN0b3JzIGFyZSA1MTIgYnl0ZXMsIGFuZCB3ZQorCSMgZ2VuZXJhdGUgaW1hZ2VzIHdpdGggMzIgc2VjdG9ycyBwZXIgdHJhY2suIFRoaXMgY2FsY3VsYXRpb24gaXMKKwkjIGRvbmUgaW4gYmxvY2tzLCB0aHVzIHRoZSBtb2QgYnkgMTYgaW5zdGVhZCBvZiAzMi4KKwlCTE9DS1M9JChleHByICRCTE9DS1MgKyAkKGV4cHIgMTYgLSAkKGV4cHIgJEJMT0NLUyAlIDE2KSkpCisKKwlta2Rvc2ZzIC1uICR7Qk9PVEREX1ZPTFVNRV9JRH0gLVMgNTEyIC1DICRIRERJTUcgJEJMT0NLUyAKKwltY29weSAtaSAkSERESU1HIC1zICRIRERESVIvKiA6Oi8KKworCWlmIFsgIiR7UENCSU9TfSIgPSAiMSIgXTsgdGhlbgorCQlzeXNsaW51eF9oZGRkaXJlY3RfaW5zdGFsbCAkSERESU1HCisJZmkJCisJY2htb2QgNjQ0ICRIRERJTUcKKworCVJPT1RGU0JMT0NLUz1gZHUgLUxia3MgJHtST09URlN9IHwgY3V0IC1mIDFgCisJVE9UQUxTSVpFPWBleHByICRCTE9DS1MgKyAkUk9PVEZTQkxPQ0tTYAorCUVORDE9YGV4cHIgJEJMT0NLUyBcKiAxMDI0YAorCUVORDI9YGV4cHIgJEVORDEgKyA1MTJgCisJRU5EMz1gZXhwciBcKCAkUk9PVEZTQkxPQ0tTIFwqIDEwMjQgXCkgKyAkRU5EMWAKKworCWVjaG8gJFJPT1RGU0JMT0NLUyAkVE9UQUxTSVpFICRFTkQxICRFTkQyICRFTkQzCisJcm0gLXJmICRJTUFHRQorCWRkIGlmPS9kZXYvemVybyBvZj0kSU1BR0UgYnM9MTAyNCBzZWVrPSRUT1RBTFNJWkUgY291bnQ9MQorCisJcGFydGVkICRJTUFHRSBta2xhYmVsIG1zZG9zCisJcGFydGVkICRJTUFHRSBta3BhcnQgcHJpbWFyeSBmYXQxNiAwICR7RU5EMX1CCisJcGFydGVkICRJTUFHRSB1bml0IEIgbWtwYXJ0IHByaW1hcnkgZXh0MiAke0VORDJ9QiAke0VORDN9QgorCXBhcnRlZCAkSU1BR0Ugc2V0IDEgYm9vdCBvbiAKKworCXBhcnRlZCAkSU1BR0UgcHJpbnQKKworCWF3ayAiQkVHSU4geyBwcmludGYgXCIkKGVjaG8gJHtESVNLX1NJR05BVFVSRX0gfCBmb2xkIC13IDIgfCB0YWMgfCBwYXN0ZSAtc2QgJycgfCBzZWQgJ3MvXCguLlwpL1xceCYvZycpXCIgfSIgfCBcCisJCWRkIG9mPSRJTUFHRSBicz0xIHNlZWs9NDQwIGNvbnY9bm90cnVuYworCisJT0ZGU0VUPWBleHByICRFTkQyIC8gNTEyYAorCWlmIFsgIiR7UENCSU9TfSIgPSAiMSIgXTsgdGhlbgorCQlkZCBpZj0ke1NUQUdJTkdfREFUQURJUn0vc3lzbGludXgvbWJyLmJpbiBvZj0kSU1BR0UgY29udj1ub3RydW5jCisJZmkKKworCWRkIGlmPSRIRERJTUcgb2Y9JElNQUdFIGNvbnY9bm90cnVuYyBzZWVrPTEgYnM9NTEyCisJZGQgaWY9JHtST09URlN9IG9mPSRJTUFHRSBjb252PW5vdHJ1bmMgc2Vlaz0kT0ZGU0VUIGJzPTUxMgorCisJY2QgJHtERVBMT1lfRElSX0lNQUdFfQorCXJtIC1mICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9MSU5LX05BTUV9LmhkZGRpcmVjdAorCWxuIC1zICR7SU1BR0VfTkFNRX0uaGRkZGlyZWN0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9MSU5LX05BTUV9LmhkZGRpcmVjdAorfSAKKworcHl0aG9uIGRvX2Jvb3RkaXJlY3RkaXNrKCkgeworICAgIHZhbGlkYXRlX2Rpc2tfc2lnbmF0dXJlKGQpCisgICAgaWYgZC5nZXRWYXIoIlBDQklPUyIsIFRydWUpID09ICIxIjoKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdidWlsZF9zeXNsaW51eF9jZmcnLCBkKQorICAgIGlmIGQuZ2V0VmFyKCJFRkkiLCBUcnVlKSA9PSAiMSI6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnYnVpbGRfZWZpX2NmZycsIGQpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdidWlsZF9ib290X2RkJywgZCkKK30KKworZGVmIGdlbmVyYXRlX2Rpc2tfc2lnbmF0dXJlKCk6CisgICAgaW1wb3J0IHV1aWQKKworICAgIHNpZ25hdHVyZSA9IHN0cih1dWlkLnV1aWQ0KCkpWzo4XQorCisgICAgaWYgc2lnbmF0dXJlICE9ICcwMDAwMDAwMCc6CisgICAgICAgIHJldHVybiBzaWduYXR1cmUKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gJ2ZmZmZmZmZmJworCitkZWYgdmFsaWRhdGVfZGlza19zaWduYXR1cmUoZCk6CisgICAgaW1wb3J0IHJlCisKKyAgICBkaXNrX3NpZ25hdHVyZSA9IGQuZ2V0VmFyKCJESVNLX1NJR05BVFVSRSIsIFRydWUpCisKKyAgICBpZiBub3QgcmUubWF0Y2gocideWzAtOWEtZkEtRl17OH0kJywgZGlza19zaWduYXR1cmUpOgorICAgICAgICBiYi5mYXRhbCgiRElTS19TSUdOQVRVUkUgJyVzJyBtdXN0IGJlIGFuIDggZGlnaXQgaGV4IHN0cmluZyIgJSBkaXNrX3NpZ25hdHVyZSkKKworRElTS19TSUdOQVRVUkVfR0VORVJBVEVEIDo9ICIke0BnZW5lcmF0ZV9kaXNrX3NpZ25hdHVyZSgpfSIKKworYWRkdGFzayBib290ZGlyZWN0ZGlzayBiZWZvcmUgZG9fYnVpbGQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Jvb3RpbWcuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Jvb3RpbWcuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzlkMGI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYm9vdGltZy5iYmNsYXNzCkBAIC0wLDAgKzEsMzAzIEBACisjIENvcHlyaWdodCAoQykgMjAwNCwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBwYWNrYWdlcy9DT1BZSU5HKQorCisjIENyZWF0ZXMgYSBib290YWJsZSBpbWFnZSB1c2luZyBzeXNsaW51eCwgeW91ciBrZXJuZWwgYW5kIGFuIG9wdGlvbmFsCisjIGluaXRyZAorCisjCisjIEVuZCByZXN1bHQgaXMgdHdvIHRoaW5nczoKKyMKKyMgMS4gQSAuaGRkaW1nIGZpbGUgd2hpY2ggaXMgYW4gbXNkb3MgZmlsZXN5c3RlbSBjb250YWluaW5nIHN5c2xpbnV4LCBhIGtlcm5lbCwKKyMgYW4gaW5pdHJkIGFuZCBhIHJvb3RmcyBpbWFnZS4gVGhlc2UgY2FuIGJlIHdyaXR0ZW4gdG8gaGFyZGRpc2tzIGRpcmVjdGx5IGFuZAorIyBhbHNvIGJvb3RlZCBvbiBVU0IgZmxhc2ggZGlza3MgKHdyaXRlIHRoZW0gdGhlcmUgd2l0aCBkZCkuCisjCisjIDIuIEEgQ0QgLmlzbyBpbWFnZQorCisjIEJvb3QgcHJvY2VzcyBpcyB0aGF0IHRoZSBpbml0cmQgd2lsbCBib290IGFuZCBwcm9jZXNzIHdoaWNoIGxhYmVsIHdhcyBzZWxlY3RlZAorIyBpbiBzeXNsaW51eC4gQWN0aW9ucyBiYXNlZCBvbiB0aGUgbGFiZWwgYXJlIHRoZW4gcGVyZm9ybWVkIChlLmcuIGluc3RhbGxpbmcgdG8KKyMgYW4gaGRkKQorCisjIEV4dGVybmFsIHZhcmlhYmxlcyAoYWxzbyB1c2VkIGJ5IHN5c2xpbnV4LmJiY2xhc3MpCisjICR7SU5JVFJEfSAtIGluZGljYXRlcyBhIGxpc3Qgb2YgZmlsZXN5c3RlbSBpbWFnZXMgdG8gY29uY2F0ZW5hdGUgYW5kIHVzZSBhcyBhbiBpbml0cmQgKG9wdGlvbmFsKQorIyAke0NPTVBSRVNTSVNPfSAtIFRyYW5zcGFyZW50IGNvbXByZXNzIElTTywgcmVkdWNlIHNpemUgfjQwJSBpZiBzZXQgdG8gMQorIyAke05PSVNPfSAgLSBza2lwIGJ1aWxkaW5nIHRoZSBJU08gaW1hZ2UgaWYgc2V0IHRvIDEKKyMgJHtOT0hERH0gIC0gc2tpcCBidWlsZGluZyB0aGUgSEREIGltYWdlIGlmIHNldCB0byAxCisjICR7SERESU1HX0lEfSAtIEZBVCBpbWFnZSB2b2x1bWUtaWQKKyMgJHtST09URlN9IC0gaW5kaWNhdGVzIGEgZmlsZXN5c3RlbSBpbWFnZSB0byBpbmNsdWRlIGFzIHRoZSByb290IGZpbGVzeXN0ZW0gKG9wdGlvbmFsKQorCitkb19ib290aW1nW2RlcGVuZHNdICs9ICJkb3Nmc3Rvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIG10b29scy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgICAgICAgICAgICAgICAgICAgICBjZHJ0b29scy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsL2tlcm5lbDpkb19kZXBsb3kgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtAb2UudXRpbHMuaWZlbHNlKGQuZ2V0VmFyKCdDT01QUkVTU0lTTycsIEZhbHNlKSwnemlzb2ZzLXRvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JywnJyl9IgorCitQQUNLQUdFUyA9ICIgIgorRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK0hERERJUiA9ICIke1N9L2hkZGltZyIKK0lTT0RJUiA9ICIke1N9L2lzbyIKK0VGSUlNR0RJUiA9ICIke1N9L2VmaV9pbWciCitDT01QQUNUX0lTT0RJUiA9ICIke1N9L2lzby56IgorQ09NUFJFU1NJU08gPz0gIjAiCisKK0JPT1RJTUdfVk9MVU1FX0lEICAgPz0gImJvb3QiCitCT09USU1HX0VYVFJBX1NQQUNFID89ICI1MTIiCisKK0VGSSA9ICIke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJlZmkiLCAiMSIsICIwIiwgZCl9IgorRUZJX1BST1ZJREVSID89ICJncnViLWVmaSIKK0VGSV9DTEFTUyA9ICIke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJlZmkiLCAiJHtFRklfUFJPVklERVJ9IiwgIiIsIGQpfSIKKworS0VSTkVMX0lNQUdFVFlQRSA/Pz0gImJ6SW1hZ2UiCisKKyMgSW5jbHVkZSBsZWdhY3kgYm9vdCBpZiBNQUNISU5FX0ZFQVRVUkVTIGluY2x1ZGVzICJwY2Jpb3MiIG9yIGlmIGl0IGRvZXMgbm90CisjIGNvbnRhaW4gImVmaSIuIFRoaXMgd2F5IGxlZ2FjeSBpcyBzdXBwb3J0ZWQgYnkgZGVmYXVsdCBpZiBuZWl0aGVyIGlzCisjIHNwZWNpZmllZCwgbWFpbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGJlaGF2aW9yLgorZGVmIHBjYmlvcyhkKToKKyAgICBwY2Jpb3MgPSBiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJwY2Jpb3MiLCAiMSIsICIwIiwgZCkKKyAgICBpZiBwY2Jpb3MgPT0gIjAiOgorICAgICAgICBwY2Jpb3MgPSBiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJlZmkiLCAiMCIsICIxIiwgZCkKKyAgICByZXR1cm4gcGNiaW9zCisKK1BDQklPUyA9ICIke0BwY2Jpb3MoZCl9IgorCisjIFRoZSBzeXNsaW51eCBpcyByZXF1aXJlZCBmb3IgdGhlIGlzb2h5YnJpZCBjb21tYW5kIGFuZCBib290IGNhdGFsb2cKK2luaGVyaXQgc3lzbGludXgKK2luaGVyaXQgJHtFRklfQ0xBU1N9CisKK3BvcHVsYXRlKCkgeworCURFU1Q9JDEKKwlpbnN0YWxsIC1kICR7REVTVH0KKworCSMgSW5zdGFsbCBrZXJuZWwsIGluaXRyZCwgYW5kIHJvb3Rmcy5pbWcgaW4gREVTVCBmb3IgYWxsIGxvYWRlcnMgdG8gdXNlLgorCWluc3RhbGwgLW0gMDY0NCAke0RFUExPWV9ESVJfSU1BR0V9LyR7S0VSTkVMX0lNQUdFVFlQRX0gJHtERVNUfS92bWxpbnV6CisJCisJIyBpbml0cmQgaXMgbWFkZSBvZiBjb25jYXRlbmF0aW9uIG9mIG11bHRpcGxlIGZpbGVzeXN0ZW0gaW1hZ2VzCisJaWYgWyAtbiAiJHtJTklUUkR9IiBdOyB0aGVuCisJCXJtIC1mICR7REVTVH0vaW5pdHJkCisJCWZvciBmcyBpbiAke0lOSVRSRH0KKwkJZG8KKwkJCWlmIFsgLXMgIiR7ZnN9IiBdOyB0aGVuCisJCQkJY2F0ICR7ZnN9ID4+ICR7REVTVH0vaW5pdHJkCisJCQllbHNlCisJCQkJYmJmYXRhbCAiJHtmc30gaXMgaW52YWxpZC4gaW5pdHJkIGltYWdlIGNyZWF0aW9uIGZhaWxlZC4iCisJCQlmaQorCQlkb25lCisJCWNobW9kIDA2NDQgJHtERVNUfS9pbml0cmQKKwlmaQorCisJaWYgWyAtbiAiJHtST09URlN9IiBdICYmIFsgLXMgIiR7Uk9PVEZTfSIgXTsgdGhlbgorCQlpbnN0YWxsIC1tIDA2NDQgJHtST09URlN9ICR7REVTVH0vcm9vdGZzLmltZworCWZpCisKK30KKworYnVpbGRfaXNvKCkgeworCSMgT25seSBjcmVhdGUgYW4gSVNPIGlmIHdlIGhhdmUgYW4gSU5JVFJEIGFuZCBOT0lTTyB3YXMgbm90IHNldAorCWlmIFsgLXogIiR7SU5JVFJEfSIgXSB8fCBbICIke05PSVNPfSIgPSAiMSIgXTsgdGhlbgorCQliYm5vdGUgIklTTyBpbWFnZSB3aWxsIG5vdCBiZSBjcmVhdGVkLiIKKwkJcmV0dXJuCisJZmkKKwkjICR7SU5JVFJEfSBpcyBhIGxpc3Qgb2YgbXVsdGlwbGUgZmlsZXN5c3RlbSBpbWFnZXMKKwlmb3IgZnMgaW4gJHtJTklUUkR9CisJZG8KKwkJaWYgWyAhIC1zICIke2ZzfSIgXTsgdGhlbgorCQkJYmJub3RlICJJU08gaW1hZ2Ugd2lsbCBub3QgYmUgY3JlYXRlZC4gJHtmc30gaXMgaW52YWxpZC4iCisJCQlyZXR1cm4KKwkJZmkKKwlkb25lCisKKworCXBvcHVsYXRlICR7SVNPRElSfQorCisJaWYgWyAiJHtQQ0JJT1N9IiA9ICIxIiBdOyB0aGVuCisJCXN5c2xpbnV4X2lzb19wb3B1bGF0ZSAke0lTT0RJUn0KKwlmaQorCWlmIFsgIiR7RUZJfSIgPSAiMSIgXTsgdGhlbgorCQllZmlfaXNvX3BvcHVsYXRlICR7SVNPRElSfQorCQlidWlsZF9mYXRfaW1nICR7RUZJSU1HRElSfSAke0lTT0RJUn0vZWZpLmltZworCWZpCisKKwkjIEVGSSBvbmx5CisJaWYgWyAiJHtQQ0JJT1N9IiAhPSAiMSIgXSAmJiBbICIke0VGSX0iID0gIjEiIF0gOyB0aGVuCisJCSMgV29yayBhcm91bmQgYnVnIGluIGlzb2h5YnJpZCB3aGVyZSBpdCByZXF1aXJlcyBpc29saW51eC5iaW4KKwkJIyBJbiB0aGUgYm9vdCBjYXRhbG9nLCBldmVuIHRob3VnaCBpdCBpcyBub3QgdXNlZAorCQlta2RpciAtcCAke0lTT0RJUn0vJHtJU09MSU5VWERJUn0KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7U1RBR0lOR19EQVRBRElSfS9zeXNsaW51eC9pc29saW51eC5iaW4gJHtJU09ESVJ9JHtJU09MSU5VWERJUn0KKwlmaQorCisJaWYgWyAiJHtDT01QUkVTU0lTT30iID0gIjEiIF0gOyB0aGVuCisJCSMgY3JlYXRlIGNvbXBhY3QgZGlyZWN0b3J5LCBjb21wcmVzcyBpc28KKwkJbWtkaXIgLXAgJHtDT01QQUNUX0lTT0RJUn0KKwkJbWt6ZnRyZWUgLXogOSAtcCA0IC1GICR7SVNPRElSfS9yb290ZnMuaW1nICR7Q09NUEFDVF9JU09ESVJ9L3Jvb3Rmcy5pbWcKKworCQkjIG1vdmUgY29tcGFjdCBpc28gdG8gaXNvLCB0aGVuIHJlbW92ZSBjb21wYWN0IGRpcmVjdG9yeQorCQltdiAke0NPTVBBQ1RfSVNPRElSfS9yb290ZnMuaW1nICR7SVNPRElSfS9yb290ZnMuaW1nCisJCXJtIC1SZiAke0NPTVBBQ1RfSVNPRElSfQorCQlta2lzb2ZzX2NvbXByZXNzX29wdHM9Ii1SIC16IC1EIC1sIgorCWVsc2UKKwkJbWtpc29mc19jb21wcmVzc19vcHRzPSItciIKKwlmaQorCisJIyBDaGVjayB0aGUgc2l6ZSBvZiAke0lTT0RJUn0vcm9vdGZzLmltZywgdXNlIG1raXNvZnMgLWlzby1sZXZlbCAzCisJIyB3aGVuIGl0IGV4Y2VlZHMgMy44R0IsIHRoZSBzcGVjaWZpY2F0aW9uIGlzIDRHIC0gMSBieXRlcywgd2UgbmVlZAorCSMgbGVhdmUgYSBmZXcgc3BhY2UgZm9yIG90aGVyIGZpbGVzLgorCW1raXNvZnNfaXNvX2xldmVsPSIiCisKKyAgICAgICAgaWYgWyAtbiAiJHtST09URlN9IiBdICYmIFsgLXMgIiR7Uk9PVEZTfSIgXTsgdGhlbgorCQlyb290ZnNfaW1nX3NpemU9YHN0YXQgLWMgJyVzJyAke0lTT0RJUn0vcm9vdGZzLmltZ2AKKwkJIyA0MDgwMjE4OTMxID0gMy44ICogMTAyNCAqIDEwMjQgKiAxMDI0CisJCWlmIFsgJHJvb3Rmc19pbWdfc2l6ZSAtZ3QgNDA4MDIxODkzMSBdOyB0aGVuCisJCQliYm5vdGUgIiR7SVNPRElSfS9yb290ZnMuaW1nIGV4ZWNlZWRzIDMuOEdCLCB1c2luZyAnLWlzby1sZXZlbCAzJyBmb3IgbWtpc29mcyIKKwkJCW1raXNvZnNfaXNvX2xldmVsPSItaXNvLWxldmVsIDMiCisJCWZpCisJZmkKKworCWlmIFsgIiR7UENCSU9TfSIgPSAiMSIgXSAmJiBbICIke0VGSX0iICE9ICIxIiBdIDsgdGhlbgorCQkjIFBDQklPUyBvbmx5IG1lZGlhCisJCW1raXNvZnMgLVYgJHtCT09USU1HX1ZPTFVNRV9JRH0gXAorCQkgICAgICAgIC1vICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5pc28gXAorCQkJLWIgJHtJU09fQk9PVElNR30gLWMgJHtJU09fQk9PVENBVH0gXAorCQkJJG1raXNvZnNfY29tcHJlc3Nfb3B0cyBcCisJCQkke01LSVNPRlNfT1BUSU9OU30gJG1raXNvZnNfaXNvX2xldmVsICR7SVNPRElSfQorCWVsc2UKKwkJIyBFRkkgb25seSBPUiBFRkkrUENCSU9TCisJCW1raXNvZnMgLUEgJHtCT09USU1HX1ZPTFVNRV9JRH0gLVYgJHtCT09USU1HX1ZPTFVNRV9JRH0gXAorCQkgICAgICAgIC1vICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5pc28gXAorCQkJLWIgJHtJU09fQk9PVElNR30gLWMgJHtJU09fQk9PVENBVH0gXAorCQkJJG1raXNvZnNfY29tcHJlc3Nfb3B0cyAke01LSVNPRlNfT1BUSU9OU30gJG1raXNvZnNfaXNvX2xldmVsIFwKKwkJCS1lbHRvcml0by1hbHQtYm9vdCAtZWx0b3JpdG8tcGxhdGZvcm0gZWZpIFwKKwkJCS1iIGVmaS5pbWcgLW5vLWVtdWwtYm9vdCBcCisJCQkke0lTT0RJUn0KKwkJaXNvaHlicmlkX2FyZ3M9Ii11IgorCWZpCisKKwlpc29oeWJyaWQgJGlzb2h5YnJpZF9hcmdzICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5pc28KKworCWNkICR7REVQTE9ZX0RJUl9JTUFHRX0KKwlybSAtZiAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTElOS19OQU1FfS5pc28KKwlsbiAtcyAke0lNQUdFX05BTUV9LmlzbyAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTElOS19OQU1FfS5pc28KK30KKworYnVpbGRfZmF0X2ltZygpIHsKKwlGQVRTT1VSQ0VESVI9JDEKKwlGQVRJTUc9JDIKKworCSMgQ2FsY3VsYXRlIHRoZSBzaXplIHJlcXVpcmVkIGZvciB0aGUgZmluYWwgaW1hZ2UgaW5jbHVkaW5nIHRoZQorCSMgZGF0YSBhbmQgZmlsZXN5c3RlbSBvdmVyaGVhZC4KKwkjIFNlY3RvcnM6IDUxMiBieXRlcworCSMgIEJsb2NrczogMTAyNCBieXRlcworCisJIyBEZXRlcm1pbmUgdGhlIHNlY3RvciBjb3VudCBqdXN0IGZvciB0aGUgZGF0YQorCVNFQ1RPUlM9JChleHByICQoZHUgLS1hcHBhcmVudC1zaXplIC1rcyAke0ZBVFNPVVJDRURJUn0gfCBjdXQgLWYgMSkgXCogMikKKworCSMgQWNjb3VudCBmb3IgdGhlIGZpbGVzeXN0ZW0gb3ZlcmhlYWQuIFRoaXMgaW5jbHVkZXMgZGlyZWN0b3J5CisJIyBlbnRyaWVzIGluIHRoZSBjbHVzdGVycyBhcyB3ZWxsIGFzIHRoZSBGQVQgaXRzZWxmLgorCSMgQXNzdW1wdGlvbnM6CisJIyAgIEZBVDMyICgxMiBvciAxNiBtYXkgYmUgc2VsZWN0ZWQgYnkgbWtkb3NmcywgYnV0IHRoZSBleHRyYQorCSMgICBwYWRkaW5nIHdpbGwgYmUgbWluaW1hbCBvbiB0aG9zZSBzbWFsbGVyIGltYWdlcyBhbmQgbm90CisJIyAgIHdvcnRoIHRoZSBsb2dpYyBoZXJlIHRvIGNhY2x1bGF0ZSB0aGUgc21hbGxlciBGQVQgc2l6ZXMpCisJIyAgIDwgMTYgZW50cmllcyBwZXIgZGlyZWN0b3J5CisJIyAgIDguMyBmaWxlbmFtZXMgb25seQorCisJIyAzMiBieXRlcyBwZXIgZGlyIGVudHJ5CisJRElSX0JZVEVTPSQoZXhwciAkKGZpbmQgJHtGQVRTT1VSQ0VESVJ9IHwgdGFpbCAtbiArMiB8IHdjIC1sKSBcKiAzMikKKwkjIDMyIGJ5dGVzIGZvciBldmVyeSBlbmQtb2YtZGlyZWN0b3J5IGRpciBlbnRyeQorCURJUl9CWVRFUz0kKGV4cHIgJERJUl9CWVRFUyArICQoZXhwciAkKGZpbmQgJHtGQVRTT1VSQ0VESVJ9IC10eXBlIGQgfCB0YWlsIC1uICsyIHwgd2MgLWwpIFwqIDMyKSkKKwkjIDQgYnl0ZXMgcGVyIEZBVCBlbnRyeSBwZXIgc2VjdG9yIG9mIGRhdGEKKwlGQVRfQllURVM9JChleHByICRTRUNUT1JTIFwqIDQpCisJIyA0IGJ5dGVzIHBlciBGQVQgZW50cnkgcGVyIGVuZC1vZi1jbHVzdGVyIGxpc3QKKwlGQVRfQllURVM9JChleHByICRGQVRfQllURVMgKyAkKGV4cHIgJChmaW5kICR7RkFUU09VUkNFRElSfSAtdHlwZSBkIHwgdGFpbCAtbiArMiB8IHdjIC1sKSBcKiA0KSkKKworCSMgVXNlIGEgY2VpbGluZyBmdW5jdGlvbiB0byBkZXRlcm1pbmUgRlMgb3ZlcmhlYWQgaW4gc2VjdG9ycworCURJUl9TRUNUT1JTPSQoZXhwciAkKGV4cHIgJERJUl9CWVRFUyArIDUxMSkgLyA1MTIpCisJIyBUaGVyZSBhcmUgdHdvIEZBVHMgb24gdGhlIGltYWdlCisJRkFUX1NFQ1RPUlM9JChleHByICQoZXhwciAkKGV4cHIgJEZBVF9CWVRFUyArIDUxMSkgLyA1MTIpIFwqIDIpCisJU0VDVE9SUz0kKGV4cHIgJFNFQ1RPUlMgKyAkKGV4cHIgJERJUl9TRUNUT1JTICsgJEZBVF9TRUNUT1JTKSkKKworCSMgRGV0ZXJtaW5lIHRoZSBmaW5hbCBzaXplIGluIGJsb2NrcyBhY2NvdW50aW5nIGZvciBzb21lIHBhZGRpbmcKKwlCTE9DS1M9JChleHByICQoZXhwciAkU0VDVE9SUyAvIDIpICsgJHtCT09USU1HX0VYVFJBX1NQQUNFfSkKKworCSMgRW5zdXJlIHRvdGFsIHNlY3RvcnMgaXMgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIHNlY3RvcnMgcGVyCisJIyB0cmFjayBvciBtY29weSB3aWxsIGNvbXBsYWluLiBTZWN0b3JzIGFyZSA1MTIgYnl0ZXMsIGFuZCB3ZQorCSMgZ2VuZXJhdGUgaW1hZ2VzIHdpdGggMzIgc2VjdG9ycyBwZXIgdHJhY2suIFRoaXMgY2FsY3VsYXRpb24gaXMKKwkjIGRvbmUgaW4gYmxvY2tzLCB0aHVzIHRoZSBtb2QgYnkgMTYgaW5zdGVhZCBvZiAzMi4KKwlCTE9DS1M9JChleHByICRCTE9DS1MgKyAkKGV4cHIgMTYgLSAkKGV4cHIgJEJMT0NLUyAlIDE2KSkpCisKKwkjIG1rZG9zZnMgd2lsbCBzb21ldGltZXMgdXNlIEZBVDE2IHdoZW4gaXQgaXMgbm90IGFwcHJvcHJpYXRlLAorCSMgcmVzdWx0aW5nIGluIGEgYm9vdCBmYWlsdXJlIGZyb20gU1lTTElOVVguIFVzZSBGQVQzMiBmb3IKKwkjIGltYWdlcyBsYXJnZXIgdGhhbiA1MTJNQiwgb3RoZXJ3aXNlIGxldCBta2Rvc2ZzIGRlY2lkZS4KKwlpZiBbICQoZXhwciAkQkxPQ0tTIC8gMTAyNCkgLWd0IDUxMiBdOyB0aGVuCisJCUZBVFNJWkU9Ii1GIDMyIgorCWZpCisKKwkjIG1rZG9zZnMgd2lsbCBmYWlsIGlmICR7RkFUSU1HfSBleGlzdHMuIFNpbmNlIHdlIGFyZSBjcmVhdGluZyBhbgorCSMgbmV3IGltYWdlLCBpdCBpcyBzYWZlIHRvIGRlbGV0ZSBhbnkgcHJldmlvdXMgaW1hZ2UuCisJaWYgWyAtZSAke0ZBVElNR30gXTsgdGhlbgorCQlybSAke0ZBVElNR30KKwlmaQorCisJaWYgWyAteiAiJHtIRERJTUdfSUR9IiBdOyB0aGVuCisJCW1rZG9zZnMgJHtGQVRTSVpFfSAtbiAke0JPT1RJTUdfVk9MVU1FX0lEfSAtUyA1MTIgLUMgJHtGQVRJTUd9IFwKKwkJCSR7QkxPQ0tTfQorCWVsc2UKKwkJbWtkb3NmcyAke0ZBVFNJWkV9IC1uICR7Qk9PVElNR19WT0xVTUVfSUR9IC1TIDUxMiAtQyAke0ZBVElNR30gXAorCQkke0JMT0NLU30gLWkgJHtIRERJTUdfSUR9CisJZmkKKworCSMgQ29weSBGQVRTT1VSQ0VESVIgcmVjdXJzaXZlbHkgaW50byB0aGUgaW1hZ2UgZmlsZSBkaXJlY3RseQorCW1jb3B5IC1pICR7RkFUSU1HfSAtcyAke0ZBVFNPVVJDRURJUn0vKiA6Oi8KK30KKworYnVpbGRfaGRkaW1nKCkgeworCSMgQ3JlYXRlIGFuIEhERCBpbWFnZQorCWlmIFsgIiR7Tk9IRER9IiAhPSAiMSIgXSA7IHRoZW4KKwkJcG9wdWxhdGUgJHtIRERESVJ9CisKKwkJaWYgWyAiJHtQQ0JJT1N9IiA9ICIxIiBdOyB0aGVuCisJCQlzeXNsaW51eF9oZGRpbWdfcG9wdWxhdGUgJHtIRERESVJ9CisJCWZpCisJCWlmIFsgIiR7RUZJfSIgPSAiMSIgXTsgdGhlbgorCQkJZWZpX2hkZGltZ19wb3B1bGF0ZSAke0hERERJUn0KKwkJZmkKKworCQkjIENoZWNrIHRoZSBzaXplIG9mICR7SERERElSfS9yb290ZnMuaW1nLCBlcnJvciBvdXQgaWYgaXQKKwkJIyBleGNlZWRzIDRHQiwgaXQgaXMgdGhlIHNpbmdsZSBmaWxlJ3MgbWF4IHNpemUgb2YgRkFUIGZzLgorCQlpZiBbIC1mICR7SERERElSfS9yb290ZnMuaW1nIF07IHRoZW4KKwkJCXJvb3Rmc19pbWdfc2l6ZT1gc3RhdCAtYyAnJXMnICR7SERERElSfS9yb290ZnMuaW1nYAorCQkJbWF4X3NpemU9YGV4cHIgNCBcKiAxMDI0IFwqIDEwMjQgXCogMTAyNGAKKwkJCWlmIFsgJHJvb3Rmc19pbWdfc2l6ZSAtZ3QgJG1heF9zaXplIF07IHRoZW4KKwkJCQliYmVycm9yICIke0hERERJUn0vcm9vdGZzLmltZyBleGVjZWVkcyA0R0IsIgorCQkJCWJiZXJyb3IgInRoaXMgZG9lc24ndCB3b3JrIG9uIEZBVCBmaWxlc3lzdGVtLCB5b3UgY2FuIHRyeSBlaXRoZXIgb2Y6IgorCQkJCWJiZXJyb3IgIjEpIFJlZHVjZSB0aGUgc2l6ZSBvZiByb290ZnMuaW1nIgorCQkJCWJiZmF0YWwgIjIpIFVzZSBpc28sIHZtZGsgb3IgdmRpIHRvIGluc3RlYWQgb2YgaGRkaW1nXG4iCisJCQlmaQorCQlmaQorCisJCWJ1aWxkX2ZhdF9pbWcgJHtIRERESVJ9ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5oZGRpbWcKKworCQlpZiBbICIke1BDQklPU30iID0gIjEiIF07IHRoZW4KKwkJCXN5c2xpbnV4X2hkZGltZ19pbnN0YWxsCisJCWZpCisKKwkJY2htb2QgNjQ0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5oZGRpbWcKKworCQljZCAke0RFUExPWV9ESVJfSU1BR0V9CisJCXJtIC1mICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9MSU5LX05BTUV9LmhkZGltZworCQlsbiAtcyAke0lNQUdFX05BTUV9LmhkZGltZyAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTElOS19OQU1FfS5oZGRpbWcKKwlmaQorfQorCitweXRob24gZG9fYm9vdGltZygpIHsKKyAgICBpZiBkLmdldFZhcigiUENCSU9TIiwgVHJ1ZSkgPT0gIjEiOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2J1aWxkX3N5c2xpbnV4X2NmZycsIGQpCisgICAgaWYgZC5nZXRWYXIoIkVGSSIsIFRydWUpID09ICIxIjoKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdidWlsZF9lZmlfY2ZnJywgZCkKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2J1aWxkX2hkZGltZycsIGQpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdidWlsZF9pc28nLCBkKQorfQorCitJTUFHRV9UWVBFREVQX2lzbyA9ICJleHQ0IgorSU1BR0VfVFlQRURFUF9oZGRpbWcgPSAiZXh0NCIKK0lNQUdFX1RZUEVTX01BU0tFRCArPSAiaXNvIGhkZGltZyIKKworYWRkdGFzayBib290aW1nIGJlZm9yZSBkb19idWlsZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYnVnemlsbGEuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1Z3ppbGxhLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZjODk1NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1Z3ppbGxhLmJiY2xhc3MKQEAgLTAsMCArMSwxODcgQEAKKyMKKyMgU21hbGwgZXZlbnQgaGFuZGxlciB0byBhdXRvbWF0aWNhbGx5IG9wZW4gVVJMcyBhbmQgZmlsZQorIyBidWcgcmVwb3J0cyBhdCBhIGJ1Z3ppbGxhIG9mIHlvdXIgY2hvaWNoZQorIyBpdCB1c2VzIFhNTC1SUEMgaW50ZXJmYWNlLCBzbyB5b3UgbXVzdCBoYXZlIGl0IGVuYWJsZWQKKyMKKyMgQmVmb3JlIHVzaW5nIHlvdSBtdXN0IGRlZmluZSBCVUdaSUxMQV9VU0VSLCBCVUdaSUxMQV9QQVNTIGNyZWRlbnRpYWxzLAorIyBCVUdaSUxMQV9YTUxSUEMgLSB1cmkgb2YgeG1scnBjLmNnaSwKKyMgQlVHWklMTEFfUFJPRFVDVCwgQlVHWklMTEFfQ09NUE9ORU5UIC0gYSBwbGFjZSBpbiBCVFMgZm9yIGJ1aWxkIGJ1Z3MKKyMgQlVHWklMTEFfVkVSU0lPTiAtIHZlcnNpb24gYWdhaW5zdCB3aGljaCB0byByZXBvcnQgbmV3IGJ1Z3MKKyMKKworZGVmIGJ1Z3ppbGxhX2ZpbmRfYnVnX3JlcG9ydChkZWJ1Z19maWxlLCBzZXJ2ZXIsIGFyZ3MsIGJ1Z25hbWUpOgorICAgIGFyZ3NbJ3N1bW1hcnknXSA9IGJ1Z25hbWUKKyAgICBidWdzID0gc2VydmVyLkJ1Zy5zZWFyY2goYXJncykKKyAgICBpZiBsZW4oYnVnc1snYnVncyddKSA9PSAwOgorICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiQnVncyBub3QgZm91bmQiCisgICAgICAgIHJldHVybiAoRmFsc2UsTm9uZSkKKyAgICBlbHNlOiAjIHNpbGVudGx5IHBpY2sgdGhlIGZpcnN0IHJlc3VsdAorICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiUmVzdWx0IG9mIGJ1ZyBzZWFyY2ggaXMgIgorICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCBidWdzCisgICAgICAgIHN0YXR1cyA9IGJ1Z3NbJ2J1Z3MnXVswXVsnc3RhdHVzJ10KKyAgICAgICAgaWQgPSBidWdzWydidWdzJ11bMF1bJ2lkJ10KKyAgICAgICAgcmV0dXJuIChub3Qgc3RhdHVzIGluIFsiQ0xPU0VEIiwgIlJFU09MVkVEIiwgIlZFUklGSUVEIl0saWQpCisKK2RlZiBidWd6aWxsYV9maWxlX2J1ZyhkZWJ1Z19maWxlLCBzZXJ2ZXIsIGFyZ3MsIG5hbWUsIHRleHQsIHZlcnNpb24pOgorICAgIGFyZ3NbJ3N1bW1hcnknXSA9IG5hbWUKKyAgICBhcmdzWydjb21tZW50J10gPSB0ZXh0CisgICAgYXJnc1sndmVyc2lvbiddID0gdmVyc2lvbgorICAgIGFyZ3NbJ29wX3N5cyddID0gJ0xpbnV4JworICAgIGFyZ3NbJ3BsYXRmb3JtJ10gPSAnT3RoZXInCisgICAgYXJnc1snc2V2ZXJpdHknXSA9ICdub3JtYWwnCisgICAgYXJnc1sncHJpb3JpdHknXSA9ICdOb3JtYWwnCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gc2VydmVyLkJ1Zy5jcmVhdGUoYXJncylbJ2lkJ10KKyAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCByZXByKGUpCisgICAgICAgIHJldHVybiBOb25lCisKK2RlZiBidWd6aWxsYV9yZW9wZW5fYnVnKGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncywgYnVnX251bWJlcik6CisgICAgYXJnc1snaWRzJ10gPSBbYnVnX251bWJlcl0KKyAgICBhcmdzWydzdGF0dXMnXSA9ICJDT05GSVJNRUQiCisgICAgdHJ5OgorICAgICAgICBzZXJ2ZXIuQnVnLnVwZGF0ZShhcmdzKQorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsIHJlcHIoZSkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBidWd6aWxsYV9jcmVhdGVfYXR0YWNobWVudChkZWJ1Z19maWxlLCBzZXJ2ZXIsIGFyZ3MsIGJ1Z19udW1iZXIsIHRleHQsIGZpbGVfbmFtZSwgbG9nLCBsb2dkZXNjcmlwdGlvbik6CisgICAgYXJnc1snaWRzJ10gPSBbYnVnX251bWJlcl0KKyAgICBhcmdzWydmaWxlX25hbWUnXSA9IGZpbGVfbmFtZQorICAgIGFyZ3NbJ3N1bW1hcnknXSA9IGxvZ2Rlc2NyaXB0aW9uCisgICAgYXJnc1snY29udGVudF90eXBlJ10gPSAidGV4dC9wbGFpbiIKKyAgICBhcmdzWydkYXRhJ10gPSBsb2cKKyAgICBhcmdzWydjb21tZW50J10gPSB0ZXh0CisgICAgdHJ5OgorICAgICAgICBzZXJ2ZXIuQnVnLmFkZF9hdHRhY2htZW50KGFyZ3MpCisgICAgICAgIHJldHVybiBUcnVlCisgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgcmVwcihlKQorICAgICAgICByZXR1cm4gRmFsc2UKKworZGVmIGJ1Z3ppbGxhX2FkZF9jb21tZW50KGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncywgYnVnX251bWJlciwgdGV4dCk6CisgICAgYXJnc1snaWQnXSA9IGJ1Z19udW1iZXIKKyAgICBhcmdzWydjb21tZW50J10gPSB0ZXh0CisgICAgdHJ5OgorICAgICAgICBzZXJ2ZXIuQnVnLmFkZF9jb21tZW50KGFyZ3MpCisgICAgICAgIHJldHVybiBUcnVlCisgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgcmVwcihlKQorICAgICAgICByZXR1cm4gRmFsc2UKKworYWRkaGFuZGxlciBidWd6aWxsYV9ldmVudGhhbmRsZXIKK2J1Z3ppbGxhX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50Lk1zZ05vdGUgYmIuYnVpbGQuVGFza0ZhaWxlZCIKK3B5dGhvbiBidWd6aWxsYV9ldmVudGhhbmRsZXIoKSB7CisgICAgaW1wb3J0IGdsb2IKKyAgICBpbXBvcnQgeG1scnBjbGliLCBodHRwbGliCisKKyAgICBjbGFzcyBQcm94aWVkVHJhbnNwb3J0KHhtbHJwY2xpYi5UcmFuc3BvcnQpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJveHksIHVzZV9kYXRldGltZSA9IDApOgorICAgICAgICAgICAgeG1scnBjbGliLlRyYW5zcG9ydC5fX2luaXRfXyhzZWxmLCB1c2VfZGF0ZXRpbWUpCisgICAgICAgICAgICBzZWxmLnByb3h5ID0gcHJveHkKKyAgICAgICAgICAgIHNlbGYudXNlciA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYucGFzc3dvcmQgPSBOb25lCisKKyAgICAgICAgZGVmIHNldF91c2VyKHNlbGYsIHVzZXIpOgorICAgICAgICAgICAgc2VsZi51c2VyID0gdXNlcgorCisgICAgICAgIGRlZiBzZXRfcGFzc3dvcmQoc2VsZiwgcGFzc3dvcmQpOgorICAgICAgICAgICAgc2VsZi5wYXNzd29yZCA9IHBhc3N3b3JkCisKKyAgICAgICAgZGVmIG1ha2VfY29ubmVjdGlvbihzZWxmLCBob3N0KToKKyAgICAgICAgICAgIHNlbGYucmVhbGhvc3QgPSBob3N0CisgICAgICAgICAgICByZXR1cm4gaHR0cGxpYi5IVFRQKHNlbGYucHJveHkpCisKKyAgICAgICAgZGVmIHNlbmRfcmVxdWVzdChzZWxmLCBjb25uZWN0aW9uLCBoYW5kbGVyLCByZXF1ZXN0X2JvZHkpOgorICAgICAgICAgICAgY29ubmVjdGlvbi5wdXRyZXF1ZXN0KCJQT1NUIiwgJ2h0dHA6Ly8lcyVzJyAlIChzZWxmLnJlYWxob3N0LCBoYW5kbGVyKSkKKyAgICAgICAgICAgIGlmIHNlbGYudXNlciAhPSBOb25lOgorICAgICAgICAgICAgICAgIGlmIHNlbGYucGFzc3dvcmQgIT0gTm9uZToKKyAgICAgICAgICAgICAgICAgICAgYXV0aCA9ICIlczolcyIgJSAoc2VsZi51c2VyLCBzZWxmLnBhc3N3b3JkKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGF1dGggPSBzZWxmLnVzZXIKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnB1dGhlYWRlcigiUHJveHktYXV0aG9yaXphdGlvbiIsICJCYXNpYyAiICsgYmFzZTY0LmVuY29kZXN0cmluZyhhdXRoKSkKKworICAgIGV2ZW50ID0gZQorICAgIGRhdGEgPSBlLmRhdGEKKyAgICBuYW1lID0gYmIuZXZlbnQuZ2V0TmFtZShldmVudCkKKyAgICBpZiBuYW1lID09ICJNc2dOb3RlIjoKKyAgICAgICAgIyBhdm9pZCByZWN1cnNpb24KKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBuYW1lID09ICJUYXNrRmFpbGVkIjoKKyAgICAgICAgeG1scnBjICA9IGRhdGEuZ2V0VmFyKCJCVUdaSUxMQV9YTUxSUEMiLCBUcnVlKQorICAgICAgICB1c2VyICAgID0gZGF0YS5nZXRWYXIoIkJVR1pJTExBX1VTRVIiLCBUcnVlKQorICAgICAgICBwYXNzdyAgID0gZGF0YS5nZXRWYXIoIkJVR1pJTExBX1BBU1MiLCBUcnVlKQorICAgICAgICBwcm9kdWN0ID0gZGF0YS5nZXRWYXIoIkJVR1pJTExBX1BST0RVQ1QiLCBUcnVlKQorICAgICAgICBjb21wb24gID0gZGF0YS5nZXRWYXIoIkJVR1pJTExBX0NPTVBPTkVOVCIsIFRydWUpCisgICAgICAgIHZlcnNpb24gPSBkYXRhLmdldFZhcigiQlVHWklMTEFfVkVSU0lPTiIsIFRydWUpCisKKyAgICAgICAgcHJveHkgICA9IGRhdGEuZ2V0VmFyKCdodHRwX3Byb3h5JywgVHJ1ZSApCisgICAgICAgIGlmIChwcm94eSk6CisgICAgICAgICAgICBpbXBvcnQgdXJsbGliMgorICAgICAgICAgICAgcywgdSwgcCwgaG9zdHBvcnQgPSB1cmxsaWIyLl9wYXJzZV9wcm94eShwcm94eSkKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IFByb3hpZWRUcmFuc3BvcnQoaG9zdHBvcnQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cmFuc3BvcnQgPSBOb25lCisKKyAgICAgICAgc2VydmVyID0geG1scnBjbGliLlNlcnZlclByb3h5KHhtbHJwYywgdHJhbnNwb3J0PXRyYW5zcG9ydCwgdmVyYm9zZT0wKQorICAgICAgICBhcmdzID0geworICAgICAgICAgICAgJ0J1Z3ppbGxhX2xvZ2luJzogdXNlciwKKyAgICAgICAgICAgICdCdWd6aWxsYV9wYXNzd29yZCc6IHBhc3N3LAorICAgICAgICAgICAgJ3Byb2R1Y3QnOiBwcm9kdWN0LAorICAgICAgICAgICAgJ2NvbXBvbmVudCc6IGNvbXBvbn0KKworICAgICAgICAjIGV2aWwgaGFjayB0byBmaWd1cmUgb3V0IHdoYXQgaXMgZ29pbmcgb24KKyAgICAgICAgZGVidWdfZmlsZSA9IG9wZW4ob3MucGF0aC5qb2luKGRhdGEuZ2V0VmFyKCJUTVBESVIiLCBUcnVlKSwiLi4iLCJidWd6aWxsYS1sb2ciKSwiYSIpCisKKyAgICAgICAgZmlsZSA9IE5vbmUKKyAgICAgICAgYnVnbmFtZSA9ICIlKHBhY2thZ2Upcy0lKHB2KXMtYXV0b2J1aWxkIiAlIHsgInBhY2thZ2UiIDogZGF0YS5nZXRWYXIoIlBOIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdiIgICAgICA6IGRhdGEuZ2V0VmFyKCJQViIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIGxvZ19maWxlID0gZ2xvYi5nbG9iKCIlcy9sb2cuJXMuKiIgJSAoZXZlbnQuZGF0YS5nZXRWYXIoJ1QnLCBUcnVlKSwgZXZlbnQudGFzaykpCisgICAgICAgIHRleHQgICAgID0gIlRoZSAlcyBzdGVwIGluICVzIGZhaWxlZCBhdCAlcyBmb3IgbWFjaGluZSAlcyIgJSAoZS50YXNrLCBkYXRhLmdldFZhcigiUE4iLCBUcnVlKSwgZGF0YS5nZXRWYXIoJ0RBVEVUSU1FJywgVHJ1ZSksIGRhdGEuZ2V0VmFyKCAnTUFDSElORScsIFRydWUgKSApCisgICAgICAgIGlmIGxlbihsb2dfZmlsZSkgIT0gMDoKKyAgICAgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJBZGRpbmcgbG9nIGZpbGUgJXMiICUgbG9nX2ZpbGVbMF0KKyAgICAgICAgICAgIGZpbGUgPSBvcGVuKGxvZ19maWxlWzBdLCAncicpCisgICAgICAgICAgICBsb2cgPSBmaWxlLnJlYWQoKQorICAgICAgICAgICAgZmlsZS5jbG9zZSgpOworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIk5vIGxvZyBmaWxlIGZvdW5kIGZvciB0aGUgZ2xvYiIKKyAgICAgICAgICAgIGxvZyA9IE5vbmUKKworICAgICAgICAoYnVnX29wZW4sIGJ1Z19udW1iZXIpID0gYnVnemlsbGFfZmluZF9idWdfcmVwb3J0KGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncy5jb3B5KCksIGJ1Z25hbWUpCisgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJCdWcgaXMgb3BlbjogJXMgYW5kIGJ1ZyBudW1iZXI6ICVzIiAlIChidWdfb3BlbiwgYnVnX251bWJlcikKKworICAgICAgICAjIFRoZSBidWcgaXMgcHJlc2VudCBhbmQgc3RpbGwgb3BlbiwgYXR0YWNoIGFuIGVycm9yIGxvZworICAgICAgICBpZiBub3QgYnVnX251bWJlcjoKKyAgICAgICAgICAgIGJ1Z19udW1iZXIgPSBidWd6aWxsYV9maWxlX2J1ZyhkZWJ1Z19maWxlLCBzZXJ2ZXIsIGFyZ3MuY29weSgpLCBidWduYW1lLCB0ZXh0LCB2ZXJzaW9uKQorICAgICAgICAgICAgaWYgbm90IGJ1Z19udW1iZXI6CisgICAgICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIkNvdWxkbid0IGFjcXVpcmUgYSBuZXcgYnVnX251bWVyLCBmaWxpbmcgYSBidWdyZXBvcnQgZmFpbGVkIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiVGhlIG5ldyBidWdfbnVtYmVyOiAnJXMnIiAlIGJ1Z19udW1iZXIKKyAgICAgICAgZWxpZiBub3QgYnVnX29wZW46CisgICAgICAgICAgICBpZiBub3QgYnVnemlsbGFfcmVvcGVuX2J1ZyhkZWJ1Z19maWxlLCBzZXJ2ZXIsIGFyZ3MuY29weSgpLCBidWdfbnVtYmVyKToKKyAgICAgICAgICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiRmFpbGVkIHRvIHJlb3BlbiB0aGUgYnVnICMlcyIgJSBidWdfbnVtYmVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJSZW9wZW5lZCB0aGUgYnVnICMlcyIgJSBidWdfbnVtYmVyCisKKyAgICAgICAgaWYgYnVnX251bWJlciBhbmQgbG9nOgorICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIlRoZSBidWcgaXMga25vd24gYXMgJyVzJyIgJSBidWdfbnVtYmVyCisgICAgICAgICAgICBkZXNjID0gIkJ1aWxkIGxvZyBmb3IgbWFjaGluZSAlcyIgJSAoZGF0YS5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKSkKKyAgICAgICAgICAgIGlmIG5vdCBidWd6aWxsYV9jcmVhdGVfYXR0YWNobWVudChkZWJ1Z19maWxlLCBzZXJ2ZXIsIGFyZ3MuY29weSgpLCBidWdfbnVtYmVyLCB0ZXh0LCBsb2dfZmlsZVswXSwgbG9nLCBkZXNjKToKKyAgICAgICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIkZhaWxlZCB0byBhdHRhY2ggdGhlIGJ1aWxkIGxvZyBmb3IgYnVnICMlcyIgJSBidWdfbnVtYmVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiQ3JlYXRlZCBhbiBhdHRhY2htZW50IGZvciAnJXMnICclcycgJyVzJyIgJSAocHJvZHVjdCwgY29tcG9uLCBidWdfbnVtYmVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIk5vdCB0cnlpbmcgdG8gY3JlYXRlIGFuIGF0dGFjaG1lbnQgZm9yIGJ1ZyAjJXMiICUgYnVnX251bWJlcgorICAgICAgICAgICAgaWYgbm90IGJ1Z3ppbGxhX2FkZF9jb21tZW50KGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncy5jb3B5KCksIGJ1Z19udW1iZXIsIHRleHQsICk6CisgICAgICAgICAgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJGYWlsZWQgdG8gY3JlYXRlIGEgY29tbWVudCB0aGUgYnVpbGQgbG9nIGZvciBidWcgIyVzIiAlIGJ1Z19udW1iZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJDcmVhdGVkIGFuIGF0dGFjaG1lbnQgZm9yICclcycgJyVzJyAnJXMnIiAlIChwcm9kdWN0LCBjb21wb24sIGJ1Z19udW1iZXIpCisKKyAgICAgICAgIyBzdG9yZSBidWcgbnVtYmVyIGZvciBvZXN0YXRzLWNsaWVudAorICAgICAgICBpZiBidWdfbnVtYmVyOgorICAgICAgICAgICAgZGF0YS5zZXRWYXIoJ09FU1RBVFNfQlVHX05VTUJFUicsIGJ1Z19udW1iZXIpCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1aWxkaGlzdG9yeS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYnVpbGRoaXN0b3J5LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRiMDQ0MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1aWxkaGlzdG9yeS5iYmNsYXNzCkBAIC0wLDAgKzEsNzY1IEBACisjCisjIFJlY29yZHMgaGlzdG9yeSBvZiBidWlsZCBvdXRwdXQgaW4gb3JkZXIgdG8gZGV0ZWN0IHJlZ3Jlc3Npb25zCisjCisjIEJhc2VkIGluIHBhcnQgb24gdGVzdGxhYi5iYmNsYXNzIGFuZCBwYWNrYWdlaGlzdG9yeS5iYmNsYXNzCisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDE0IEludGVsIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAoQykgMjAwNy0yMDExIEtvZW4gS29vaSA8a29lbkBvcGVuZW1iZWRkZWQub3JnPgorIworCitCVUlMREhJU1RPUllfRkVBVFVSRVMgPz0gImltYWdlIHBhY2thZ2Ugc2RrIgorQlVJTERISVNUT1JZX0RJUiA/PSAiJHtUT1BESVJ9L2J1aWxkaGlzdG9yeSIKK0JVSUxESElTVE9SWV9ESVJfSU1BR0UgPSAiJHtCVUlMREhJU1RPUllfRElSfS9pbWFnZXMvJHtNQUNISU5FX0FSQ0h9LyR7VENMSUJDfS8ke0lNQUdFX0JBU0VOQU1FfSIKK0JVSUxESElTVE9SWV9ESVJfUEFDS0FHRSA9ICIke0JVSUxESElTVE9SWV9ESVJ9L3BhY2thZ2VzLyR7TVVMVElNQUNIX1RBUkdFVF9TWVN9LyR7UE59IgorQlVJTERISVNUT1JZX0RJUl9TREsgPSAiJHtCVUlMREhJU1RPUllfRElSfS9zZGsvJHtTREtfTkFNRX0vJHtJTUFHRV9CQVNFTkFNRX0iCitCVUlMREhJU1RPUllfSU1BR0VfRklMRVMgPz0gIi9ldGMvcGFzc3dkIC9ldGMvZ3JvdXAiCitCVUlMREhJU1RPUllfQ09NTUlUID89ICIwIgorQlVJTERISVNUT1JZX0NPTU1JVF9BVVRIT1IgPz0gImJ1aWxkaGlzdG9yeSA8YnVpbGRoaXN0b3J5QCR7RElTVFJPfT4iCitCVUlMREhJU1RPUllfUFVTSF9SRVBPID89ICIiCisKK1NTVEFURVBPU1RJTlNURlVOQ1NfYXBwZW5kID0gIiBidWlsZGhpc3RvcnlfZW1pdF9wa2doaXN0b3J5IgorIyBXZSB3YW50IHRvIGF2b2lkIGluZmx1ZW5jZSB0aGUgc2lnbmF0dXJlcyBvZiBzc3RhdGUgdGFza3MgLSBmaXJzdCB0aGUgZnVuY3Rpb24gaXRzZWxmOgorc3N0YXRlX2luc3RhbGxbdmFyZGVwc2V4Y2x1ZGVdICs9ICJidWlsZGhpc3RvcnlfZW1pdF9wa2doaXN0b3J5IgorIyB0aGVuIHRoZSB2YWx1ZSBhZGRlZCB0byBTU1RBVEVQT1NUSU5TVEZVTkNTOgorU1NUQVRFUE9TVElOU1RGVU5DU1t2YXJkZXB2YWx1ZWV4Y2x1ZGVdIC49ICJ8IGJ1aWxkaGlzdG9yeV9lbWl0X3BrZ2hpc3RvcnkiCisKKyMKKyMgV3JpdGUgb3V0IG1ldGFkYXRhIGFib3V0IHRoaXMgcGFja2FnZSBmb3IgY29tcGFyaXNpb24gd2hlbiB3cml0aW5nIGZ1dHVyZSBwYWNrYWdlcworIworcHl0aG9uIGJ1aWxkaGlzdG9yeV9lbWl0X3BrZ2hpc3RvcnkoKSB7CisgICAgaWYgbm90IGQuZ2V0VmFyKCdCQl9DVVJSRU5UVEFTSycsIFRydWUpIGluIFsncGFja2FnZWRhdGEnLCAncGFja2FnZWRhdGFfc2V0c2NlbmUnXToKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGlmIG5vdCAicGFja2FnZSIgaW4gKGQuZ2V0VmFyKCdCVUlMREhJU1RPUllfRkVBVFVSRVMnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGltcG9ydCByZQorICAgIGltcG9ydCBqc29uCisgICAgaW1wb3J0IGVycm5vCisKKyAgICBwa2doaXN0ZGlyID0gZC5nZXRWYXIoJ0JVSUxESElTVE9SWV9ESVJfUEFDS0FHRScsIFRydWUpCisKKyAgICBjbGFzcyBSZWNpcGVJbmZvOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgICAgICBzZWxmLnBlID0gIjAiCisgICAgICAgICAgICBzZWxmLnB2ID0gIjAiCisgICAgICAgICAgICBzZWxmLnByID0gInIwIgorICAgICAgICAgICAgc2VsZi5kZXBlbmRzID0gIiIKKyAgICAgICAgICAgIHNlbGYucGFja2FnZXMgPSAiIgorICAgICAgICAgICAgc2VsZi5zcmNyZXYgPSAiIgorCisKKyAgICBjbGFzcyBQYWNrYWdlSW5mbzoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICAgICAgc2VsZi5wZSA9ICIwIgorICAgICAgICAgICAgc2VsZi5wdiA9ICIwIgorICAgICAgICAgICAgc2VsZi5wciA9ICJyMCIKKyAgICAgICAgICAgICMgcGtnL3BrZ2UvcGtndi9wa2dyIHNob3VsZCBiZSBlbXB0eSBiZWNhdXNlIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBkZWZhdWx0IHRoZW0KKyAgICAgICAgICAgIHNlbGYucGtnID0gIiIKKyAgICAgICAgICAgIHNlbGYucGtnZSA9ICIiCisgICAgICAgICAgICBzZWxmLnBrZ3YgPSAiIgorICAgICAgICAgICAgc2VsZi5wa2dyID0gIiIKKyAgICAgICAgICAgIHNlbGYuc2l6ZSA9IDAKKyAgICAgICAgICAgIHNlbGYuZGVwZW5kcyA9ICIiCisgICAgICAgICAgICBzZWxmLnJwcm92aWRlcyA9ICIiCisgICAgICAgICAgICBzZWxmLnJkZXBlbmRzID0gIiIKKyAgICAgICAgICAgIHNlbGYucnJlY29tbWVuZHMgPSAiIgorICAgICAgICAgICAgc2VsZi5yc3VnZ2VzdHMgPSAiIgorICAgICAgICAgICAgc2VsZi5ycmVwbGFjZXMgPSAiIgorICAgICAgICAgICAgc2VsZi5yY29uZmxpY3RzID0gIiIKKyAgICAgICAgICAgIHNlbGYuZmlsZXMgPSAiIgorICAgICAgICAgICAgc2VsZi5maWxlbGlzdCA9ICIiCisgICAgICAgICAgICAjIFZhcmlhYmxlcyB0aGF0IG5lZWQgdG8gYmUgd3JpdHRlbiB0byB0aGVpciBvd24gc2VwYXJhdGUgZmlsZQorICAgICAgICAgICAgc2VsZi5maWxldmFycyA9IGRpY3QuZnJvbWtleXMoWydwa2dfcHJlaW5zdCcsICdwa2dfcG9zdGluc3QnLCAncGtnX3ByZXJtJywgJ3BrZ19wb3N0cm0nXSkKKworICAgICMgU2hvdWxkIGNoZWNrIFBBQ0tBR0VTIGhlcmUgdG8gc2VlIGlmIGFueXRoaW5nIHJlbW92ZWQKKworICAgIGRlZiByZWFkUGFja2FnZUluZm8ocGtnLCBoaXN0ZmlsZSk6CisgICAgICAgIHBrZ2luZm8gPSBQYWNrYWdlSW5mbyhwa2cpCisgICAgICAgIHdpdGggb3BlbihoaXN0ZmlsZSwgInIiKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBsbnMgPSBsaW5lLnNwbGl0KCc9JykKKyAgICAgICAgICAgICAgICBuYW1lID0gbG5zWzBdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGxuc1sxXS5zdHJpcCgiIFx0XHJcbiIpLnN0cmlwKCciJykKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICJQRSI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucGUgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUFYiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnB2ID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlBSIjoKKyAgICAgICAgICAgICAgICAgICAgcGtnaW5mby5wciA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJQS0ciOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnBrZyA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJQS0dFIjoKKyAgICAgICAgICAgICAgICAgICAgcGtnaW5mby5wa2dlID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlBLR1YiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnBrZ3YgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUEtHUiI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucGtnciA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJSUFJPVklERVMiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnJwcm92aWRlcyA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJSREVQRU5EUyI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucmRlcGVuZHMgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUlJFQ09NTUVORFMiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnJyZWNvbW1lbmRzID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlJTVUdHRVNUUyI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucnN1Z2dlc3RzID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlJSRVBMQUNFUyI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucnJlcGxhY2VzID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlJDT05GTElDVFMiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnJjb25mbGljdHMgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUEtHU0laRSI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8uc2l6ZSA9IGxvbmcodmFsdWUpCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJGSUxFUyI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8uZmlsZXMgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiRklMRUxJU1QiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLmZpbGVsaXN0ID0gdmFsdWUKKyAgICAgICAgIyBBcHBseSBkZWZhdWx0cworICAgICAgICBpZiBub3QgcGtnaW5mby5wa2c6CisgICAgICAgICAgICBwa2dpbmZvLnBrZyA9IHBrZ2luZm8ubmFtZQorICAgICAgICBpZiBub3QgcGtnaW5mby5wa2dlOgorICAgICAgICAgICAgcGtnaW5mby5wa2dlID0gcGtnaW5mby5wZQorICAgICAgICBpZiBub3QgcGtnaW5mby5wa2d2OgorICAgICAgICAgICAgcGtnaW5mby5wa2d2ID0gcGtnaW5mby5wdgorICAgICAgICBpZiBub3QgcGtnaW5mby5wa2dyOgorICAgICAgICAgICAgcGtnaW5mby5wa2dyID0gcGtnaW5mby5wcgorICAgICAgICByZXR1cm4gcGtnaW5mbworCisgICAgZGVmIGdldGxhc3Rwa2d2ZXJzaW9uKHBrZyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGhpc3RmaWxlID0gb3MucGF0aC5qb2luKHBrZ2hpc3RkaXIsIHBrZywgImxhdGVzdCIpCisgICAgICAgICAgICByZXR1cm4gcmVhZFBhY2thZ2VJbmZvKHBrZywgaGlzdGZpbGUpCisgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzb3J0cGtnbGlzdChzdHJpbmcpOgorICAgICAgICBwa2dpdGVyID0gcmUuZmluZGl0ZXIocidbYS16QS1aMC05ListXSsoIFwoWz48PV0rIFteICldK1wpKT8nLCBzdHJpbmcsIDApCisgICAgICAgIHBrZ2xpc3QgPSBbcC5ncm91cCgwKSBmb3IgcCBpbiBwa2dpdGVyXQorICAgICAgICBwa2dsaXN0LnNvcnQoKQorICAgICAgICByZXR1cm4gJyAnLmpvaW4ocGtnbGlzdCkKKworICAgIGRlZiBzb3J0bGlzdChzdHJpbmcpOgorICAgICAgICBpdGVtcyA9IHN0cmluZy5zcGxpdCgnICcpCisgICAgICAgIGl0ZW1zLnNvcnQoKQorICAgICAgICByZXR1cm4gJyAnLmpvaW4oaXRlbXMpCisKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgcGUgPSBkLmdldFZhcignUEUnLCBUcnVlKSBvciAiMCIKKyAgICBwdiA9IGQuZ2V0VmFyKCdQVicsIFRydWUpCisgICAgcHIgPSBkLmdldFZhcignUFInLCBUcnVlKQorCisgICAgcGtnZGF0YV9kaXIgPSBkLmdldFZhcignUEtHREFUQV9ESVInLCBUcnVlKQorICAgIHBhY2thZ2VzID0gIiIKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ocGtnZGF0YV9kaXIsIHBuKSkgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdQQUNLQUdFUzogJyk6CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzID0gb2UudXRpbHMuc3F1YXNoc3BhY2VzKGxpbmUuc3BsaXQoJzogJywgMSlbMV0pCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAjIFByb2JhYmx5IGEgLWNyb3NzIHJlY2lwZSwganVzdCBpZ25vcmUKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZQorCisgICAgcGFja2FnZWxpc3QgPSBwYWNrYWdlcy5zcGxpdCgpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBrZ2hpc3RkaXIpOgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocGtnaGlzdGRpcikKKyAgICBlbHNlOgorICAgICAgICAjIFJlbW92ZSBmaWxlcyBmb3IgcGFja2FnZXMgdGhhdCBubyBsb25nZXIgZXhpc3QKKyAgICAgICAgZm9yIGl0ZW0gaW4gb3MubGlzdGRpcihwa2doaXN0ZGlyKToKKyAgICAgICAgICAgIGlmIGl0ZW0gIT0gImxhdGVzdCIgYW5kIGl0ZW0gIT0gImxhdGVzdF9zcmNyZXYiOgorICAgICAgICAgICAgICAgIGlmIGl0ZW0gbm90IGluIHBhY2thZ2VsaXN0OgorICAgICAgICAgICAgICAgICAgICBpdGVtcGF0aCA9IG9zLnBhdGguam9pbihwa2doaXN0ZGlyLCBpdGVtKQorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGl0ZW1wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzdWJmaWxlIGluIG9zLmxpc3RkaXIoaXRlbXBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4oaXRlbXBhdGgsIHN1YmZpbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgb3Mucm1kaXIoaXRlbXBhdGgpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoaXRlbXBhdGgpCisKKyAgICByY3BpbmZvID0gUmVjaXBlSW5mbyhwbikKKyAgICByY3BpbmZvLnBlID0gcGUKKyAgICByY3BpbmZvLnB2ID0gcHYKKyAgICByY3BpbmZvLnByID0gcHIKKyAgICByY3BpbmZvLmRlcGVuZHMgPSBzb3J0bGlzdChvZS51dGlscy5zcXVhc2hzcGFjZXMoZC5nZXRWYXIoJ0RFUEVORFMnLCBUcnVlKSBvciAiIikpCisgICAgcmNwaW5mby5wYWNrYWdlcyA9IHBhY2thZ2VzCisgICAgd3JpdGVfcmVjaXBlaGlzdG9yeShyY3BpbmZvLCBkKQorCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VsaXN0OgorICAgICAgICBwa2dkYXRhID0ge30KKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihwa2dkYXRhX2RpciwgJ3J1bnRpbWUnLCBwa2cpKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICBpdGVtID0gbGluZS5yc3RyaXAoJ1xuJykuc3BsaXQoJzogJywgMSkKKyAgICAgICAgICAgICAgICBrZXkgPSBpdGVtWzBdCisgICAgICAgICAgICAgICAgaWYga2V5LmVuZHN3aXRoKCdfJyArIHBrZyk6CisgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleVs6LWxlbihwa2cpLTFdCisgICAgICAgICAgICAgICAgcGtnZGF0YVtrZXldID0gaXRlbVsxXS5kZWNvZGUoJ3V0Zi04JykuZGVjb2RlKCdzdHJpbmdfZXNjYXBlJykKKworICAgICAgICBwa2dlID0gcGtnZGF0YS5nZXQoJ1BLR0UnLCAnMCcpCisgICAgICAgIHBrZ3YgPSBwa2dkYXRhWydQS0dWJ10KKyAgICAgICAgcGtnciA9IHBrZ2RhdGFbJ1BLR1InXQorICAgICAgICAjCisgICAgICAgICMgRmluZCBvdXQgd2hhdCB0aGUgbGFzdCB2ZXJzaW9uIHdhcworICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgdmVyc2lvbiBkaWQgbm90IGRlY3JlYXNlCisgICAgICAgICMKKyAgICAgICAgbGFzdHZlcnNpb24gPSBnZXRsYXN0cGtndmVyc2lvbihwa2cpCisgICAgICAgIGlmIGxhc3R2ZXJzaW9uOgorICAgICAgICAgICAgbGFzdF9wa2dlID0gbGFzdHZlcnNpb24ucGtnZQorICAgICAgICAgICAgbGFzdF9wa2d2ID0gbGFzdHZlcnNpb24ucGtndgorICAgICAgICAgICAgbGFzdF9wa2dyID0gbGFzdHZlcnNpb24ucGtncgorICAgICAgICAgICAgciA9IGJiLnV0aWxzLnZlcmNtcCgocGtnZSwgcGtndiwgcGtnciksIChsYXN0X3BrZ2UsIGxhc3RfcGtndiwgbGFzdF9wa2dyKSkKKyAgICAgICAgICAgIGlmIHIgPCAwOgorICAgICAgICAgICAgICAgIG1zZyA9ICJQYWNrYWdlIHZlcnNpb24gZm9yIHBhY2thZ2UgJXMgd2VudCBiYWNrd2FyZHMgd2hpY2ggd291bGQgYnJlYWsgcGFja2FnZSBmZWVkcyBmcm9tICglczolcy0lcyB0byAlczolcy0lcykiICUgKHBrZywgbGFzdF9wa2dlLCBsYXN0X3BrZ3YsIGxhc3RfcGtnciwgcGtnZSwgcGtndiwgcGtncikKKyAgICAgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigidmVyc2lvbi1nb2luZy1iYWNrd2FyZHMiLCBtc2csIGQpCisKKyAgICAgICAgcGtnaW5mbyA9IFBhY2thZ2VJbmZvKHBrZykKKyAgICAgICAgIyBBcHBhcmVudGx5IHRoZSB2ZXJzaW9uIGNhbiBiZSBkaWZmZXJlbnQgb24gYSBwZXItcGFja2FnZSBiYXNpcyAoc2VlIFB5dGhvbikKKyAgICAgICAgcGtnaW5mby5wZSA9IHBrZ2RhdGEuZ2V0KCdQRScsICcwJykKKyAgICAgICAgcGtnaW5mby5wdiA9IHBrZ2RhdGFbJ1BWJ10KKyAgICAgICAgcGtnaW5mby5wciA9IHBrZ2RhdGFbJ1BSJ10KKyAgICAgICAgcGtnaW5mby5wa2cgPSBwa2dkYXRhWydQS0cnXQorICAgICAgICBwa2dpbmZvLnBrZ2UgPSBwa2dlCisgICAgICAgIHBrZ2luZm8ucGtndiA9IHBrZ3YKKyAgICAgICAgcGtnaW5mby5wa2dyID0gcGtncgorICAgICAgICBwa2dpbmZvLnJwcm92aWRlcyA9IHNvcnRwa2dsaXN0KG9lLnV0aWxzLnNxdWFzaHNwYWNlcyhwa2dkYXRhLmdldCgnUlBST1ZJREVTJywgIiIpKSkKKyAgICAgICAgcGtnaW5mby5yZGVwZW5kcyA9IHNvcnRwa2dsaXN0KG9lLnV0aWxzLnNxdWFzaHNwYWNlcyhwa2dkYXRhLmdldCgnUkRFUEVORFMnLCAiIikpKQorICAgICAgICBwa2dpbmZvLnJyZWNvbW1lbmRzID0gc29ydHBrZ2xpc3Qob2UudXRpbHMuc3F1YXNoc3BhY2VzKHBrZ2RhdGEuZ2V0KCdSUkVDT01NRU5EUycsICIiKSkpCisgICAgICAgIHBrZ2luZm8ucnN1Z2dlc3RzID0gc29ydHBrZ2xpc3Qob2UudXRpbHMuc3F1YXNoc3BhY2VzKHBrZ2RhdGEuZ2V0KCdSU1VHR0VTVFMnLCAiIikpKQorICAgICAgICBwa2dpbmZvLnJyZXBsYWNlcyA9IHNvcnRwa2dsaXN0KG9lLnV0aWxzLnNxdWFzaHNwYWNlcyhwa2dkYXRhLmdldCgnUlJFUExBQ0VTJywgIiIpKSkKKyAgICAgICAgcGtnaW5mby5yY29uZmxpY3RzID0gc29ydHBrZ2xpc3Qob2UudXRpbHMuc3F1YXNoc3BhY2VzKHBrZ2RhdGEuZ2V0KCdSQ09ORkxJQ1RTJywgIiIpKSkKKyAgICAgICAgcGtnaW5mby5maWxlcyA9IG9lLnV0aWxzLnNxdWFzaHNwYWNlcyhwa2dkYXRhLmdldCgnRklMRVMnLCAiIikpCisgICAgICAgIGZvciBmaWxldmFyIGluIHBrZ2luZm8uZmlsZXZhcnM6CisgICAgICAgICAgICBwa2dpbmZvLmZpbGV2YXJzW2ZpbGV2YXJdID0gcGtnZGF0YS5nZXQoZmlsZXZhciwgIiIpCisKKyAgICAgICAgIyBHYXRoZXIgaW5mb3JtYXRpb24gYWJvdXQgcGFja2FnZWQgZmlsZXMKKyAgICAgICAgdmFsID0gcGtnZGF0YS5nZXQoJ0ZJTEVTX0lORk8nLCAnJykKKyAgICAgICAgZGljdHZhbCA9IGpzb24ubG9hZHModmFsKQorICAgICAgICBmaWxlbGlzdCA9IGRpY3R2YWwua2V5cygpCisgICAgICAgIGZpbGVsaXN0LnNvcnQoKQorICAgICAgICBwa2dpbmZvLmZpbGVsaXN0ID0gIiAiLmpvaW4oZmlsZWxpc3QpCisKKyAgICAgICAgcGtnaW5mby5zaXplID0gaW50KHBrZ2RhdGFbJ1BLR1NJWkUnXSkKKworICAgICAgICB3cml0ZV9wa2doaXN0b3J5KHBrZ2luZm8sIGQpCisKKyAgICAjIENyZWF0ZSBmaWxlcy1pbi08cGFja2FnZS1uYW1lPi50eHQgZmlsZXMgY29udGFpbmluZyBhIGxpc3Qgb2YgZmlsZXMgb2YgZWFjaCByZWNpcGUncyBwYWNrYWdlCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJidWlsZGhpc3RvcnlfbGlzdF9wa2dfZmlsZXMiLCBkKQorfQorCisKK2RlZiB3cml0ZV9yZWNpcGVoaXN0b3J5KHJjcGluZm8sIGQpOgorICAgIGltcG9ydCBjb2RlY3MKKworICAgIGJiLmRlYnVnKDIsICJXcml0aW5nIHJlY2lwZSBoaXN0b3J5IikKKworICAgIHBrZ2hpc3RkaXIgPSBkLmdldFZhcignQlVJTERISVNUT1JZX0RJUl9QQUNLQUdFJywgVHJ1ZSkKKworICAgIGluZm9maWxlID0gb3MucGF0aC5qb2luKHBrZ2hpc3RkaXIsICJsYXRlc3QiKQorICAgIHdpdGggY29kZWNzLm9wZW4oaW5mb2ZpbGUsICJ3IiwgZW5jb2Rpbmc9J3V0ZjgnKSBhcyBmOgorICAgICAgICBpZiByY3BpbmZvLnBlICE9ICIwIjoKKyAgICAgICAgICAgIGYud3JpdGUodSJQRSA9ICVzXG4iICUgIHJjcGluZm8ucGUpCisgICAgICAgIGYud3JpdGUodSJQViA9ICVzXG4iICUgIHJjcGluZm8ucHYpCisgICAgICAgIGYud3JpdGUodSJQUiA9ICVzXG4iICUgIHJjcGluZm8ucHIpCisgICAgICAgIGYud3JpdGUodSJERVBFTkRTID0gJXNcbiIgJSAgcmNwaW5mby5kZXBlbmRzKQorICAgICAgICBmLndyaXRlKHUiUEFDS0FHRVMgPSAlc1xuIiAlICByY3BpbmZvLnBhY2thZ2VzKQorCisKK2RlZiB3cml0ZV9wa2doaXN0b3J5KHBrZ2luZm8sIGQpOgorICAgIGltcG9ydCBjb2RlY3MKKworICAgIGJiLmRlYnVnKDIsICJXcml0aW5nIHBhY2thZ2UgaGlzdG9yeSBmb3IgcGFja2FnZSAlcyIgJSBwa2dpbmZvLm5hbWUpCisKKyAgICBwa2doaXN0ZGlyID0gZC5nZXRWYXIoJ0JVSUxESElTVE9SWV9ESVJfUEFDS0FHRScsIFRydWUpCisKKyAgICBwa2dwYXRoID0gb3MucGF0aC5qb2luKHBrZ2hpc3RkaXIsIHBrZ2luZm8ubmFtZSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGtncGF0aCk6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihwa2dwYXRoKQorCisgICAgaW5mb2ZpbGUgPSBvcy5wYXRoLmpvaW4ocGtncGF0aCwgImxhdGVzdCIpCisgICAgd2l0aCBjb2RlY3Mub3BlbihpbmZvZmlsZSwgInciLCBlbmNvZGluZz0ndXRmOCcpIGFzIGY6CisgICAgICAgIGlmIHBrZ2luZm8ucGUgIT0gIjAiOgorICAgICAgICAgICAgZi53cml0ZSh1IlBFID0gJXNcbiIgJSAgcGtnaW5mby5wZSkKKyAgICAgICAgZi53cml0ZSh1IlBWID0gJXNcbiIgJSAgcGtnaW5mby5wdikKKyAgICAgICAgZi53cml0ZSh1IlBSID0gJXNcbiIgJSAgcGtnaW5mby5wcikKKworICAgICAgICBwa2d2YXJzID0ge30KKyAgICAgICAgcGtndmFyc1snUEtHJ10gPSBwa2dpbmZvLnBrZyBpZiBwa2dpbmZvLnBrZyAhPSBwa2dpbmZvLm5hbWUgZWxzZSAnJworICAgICAgICBwa2d2YXJzWydQS0dFJ10gPSBwa2dpbmZvLnBrZ2UgaWYgcGtnaW5mby5wa2dlICE9IHBrZ2luZm8ucGUgZWxzZSAnJworICAgICAgICBwa2d2YXJzWydQS0dWJ10gPSBwa2dpbmZvLnBrZ3YgaWYgcGtnaW5mby5wa2d2ICE9IHBrZ2luZm8ucHYgZWxzZSAnJworICAgICAgICBwa2d2YXJzWydQS0dSJ10gPSBwa2dpbmZvLnBrZ3IgaWYgcGtnaW5mby5wa2dyICE9IHBrZ2luZm8ucHIgZWxzZSAnJworICAgICAgICBmb3IgcGtndmFyIGluIHBrZ3ZhcnM6CisgICAgICAgICAgICB2YWwgPSBwa2d2YXJzW3BrZ3Zhcl0KKyAgICAgICAgICAgIGlmIHZhbDoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHUiJXMgPSAlc1xuIiAlIChwa2d2YXIsIHZhbCkpCisKKyAgICAgICAgZi53cml0ZSh1IlJQUk9WSURFUyA9ICVzXG4iICUgIHBrZ2luZm8ucnByb3ZpZGVzKQorICAgICAgICBmLndyaXRlKHUiUkRFUEVORFMgPSAlc1xuIiAlICBwa2dpbmZvLnJkZXBlbmRzKQorICAgICAgICBmLndyaXRlKHUiUlJFQ09NTUVORFMgPSAlc1xuIiAlICBwa2dpbmZvLnJyZWNvbW1lbmRzKQorICAgICAgICBpZiBwa2dpbmZvLnJzdWdnZXN0czoKKyAgICAgICAgICAgIGYud3JpdGUodSJSU1VHR0VTVFMgPSAlc1xuIiAlICBwa2dpbmZvLnJzdWdnZXN0cykKKyAgICAgICAgaWYgcGtnaW5mby5ycmVwbGFjZXM6CisgICAgICAgICAgICBmLndyaXRlKHUiUlJFUExBQ0VTID0gJXNcbiIgJSAgcGtnaW5mby5ycmVwbGFjZXMpCisgICAgICAgIGlmIHBrZ2luZm8ucmNvbmZsaWN0czoKKyAgICAgICAgICAgIGYud3JpdGUodSJSQ09ORkxJQ1RTID0gJXNcbiIgJSAgcGtnaW5mby5yY29uZmxpY3RzKQorICAgICAgICBmLndyaXRlKHUiUEtHU0laRSA9ICVkXG4iICUgIHBrZ2luZm8uc2l6ZSkKKyAgICAgICAgZi53cml0ZSh1IkZJTEVTID0gJXNcbiIgJSAgcGtnaW5mby5maWxlcykKKyAgICAgICAgZi53cml0ZSh1IkZJTEVMSVNUID0gJXNcbiIgJSAgcGtnaW5mby5maWxlbGlzdCkKKworICAgIGZvciBmaWxldmFyIGluIHBrZ2luZm8uZmlsZXZhcnM6CisgICAgICAgIGZpbGV2YXJwYXRoID0gb3MucGF0aC5qb2luKHBrZ3BhdGgsICJsYXRlc3QuJXMiICUgZmlsZXZhcikKKyAgICAgICAgdmFsID0gcGtnaW5mby5maWxldmFyc1tmaWxldmFyXQorICAgICAgICBpZiB2YWw6CisgICAgICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKGZpbGV2YXJwYXRoLCAidyIsIGVuY29kaW5nPSd1dGY4JykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHZhbCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZpbGV2YXJwYXRoKToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoZmlsZXZhcnBhdGgpCisKKyMKKyMgcm9vdGZzX3R5cGUgY2FuIGJlOiBpbWFnZSwgc2RrX3RhcmdldCwgc2RrX2hvc3QKKyMKK2RlZiBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWQoZCwgcm9vdGZzX3R5cGU9ImltYWdlIik6CisgICAgZnJvbSBvZS5yb290ZnMgaW1wb3J0IGltYWdlX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzCisgICAgZnJvbSBvZS5zZGsgaW1wb3J0IHNka19saXN0X2luc3RhbGxlZF9wYWNrYWdlcworCisgICAgcHJvY2Vzc19saXN0ID0gWygnZmlsZScsICdiaF9pbnN0YWxsZWRfcGtncy50eHQnKSxcCisgICAgICAgICAgICAgICAgICAgICgnZGVwcycsICdiaF9pbnN0YWxsZWRfcGtnc19kZXBzLnR4dCcpXQorCisgICAgZm9yIG91dHB1dF90eXBlLCBvdXRwdXRfZmlsZSBpbiBwcm9jZXNzX2xpc3Q6CisgICAgICAgIG91dHB1dF9maWxlX2Z1bGwgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSwgb3V0cHV0X2ZpbGUpCisKKyAgICAgICAgd2l0aCBvcGVuKG91dHB1dF9maWxlX2Z1bGwsICd3JykgYXMgb3V0cHV0OgorICAgICAgICAgICAgaWYgcm9vdGZzX3R5cGUgPT0gImltYWdlIjoKKyAgICAgICAgICAgICAgICBvdXRwdXQud3JpdGUoaW1hZ2VfbGlzdF9pbnN0YWxsZWRfcGFja2FnZXMoZCwgb3V0cHV0X3R5cGUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvdXRwdXQud3JpdGUoc2RrX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzKGQsIHJvb3Rmc190eXBlID09ICJzZGtfdGFyZ2V0Iiwgb3V0cHV0X3R5cGUpKQorCitweXRob24gYnVpbGRoaXN0b3J5X2xpc3RfaW5zdGFsbGVkX2ltYWdlKCkgeworICAgIGJ1aWxkaGlzdG9yeV9saXN0X2luc3RhbGxlZChkKQorfQorCitweXRob24gYnVpbGRoaXN0b3J5X2xpc3RfaW5zdGFsbGVkX3Nka190YXJnZXQoKSB7CisgICAgYnVpbGRoaXN0b3J5X2xpc3RfaW5zdGFsbGVkKGQsICJzZGtfdGFyZ2V0IikKK30KKworcHl0aG9uIGJ1aWxkaGlzdG9yeV9saXN0X2luc3RhbGxlZF9zZGtfaG9zdCgpIHsKKyAgICBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWQoZCwgInNka19ob3N0IikKK30KKworYnVpbGRoaXN0b3J5X2dldF9pbnN0YWxsZWQoKSB7CisJbWtkaXIgLXAgJDEKKworCSMgR2V0IGxpc3Qgb2YgaW5zdGFsbGVkIHBhY2thZ2VzCisJcGtnY2FjaGU9IiQxL2luc3RhbGxlZC1wYWNrYWdlcy50bXAiCisJY2F0ICR7V09SS0RJUn0vYmhfaW5zdGFsbGVkX3BrZ3MudHh0IHwgc29ydCA+ICRwa2djYWNoZSAmJiBybSAke1dPUktESVJ9L2JoX2luc3RhbGxlZF9wa2dzLnR4dAorCisJY2F0ICRwa2djYWNoZSB8IGF3ayAneyBwcmludCAkMSB9JyA+ICQxL2luc3RhbGxlZC1wYWNrYWdlLW5hbWVzLnR4dAorCWlmIFsgLXMgJHBrZ2NhY2hlIF0gOyB0aGVuCisJCWNhdCAkcGtnY2FjaGUgfCBhd2sgJ3sgcHJpbnQgJDIgfScgfCB4YXJncyAtbjEgYmFzZW5hbWUgPiAkMS9pbnN0YWxsZWQtcGFja2FnZXMudHh0CisJZWxzZQorCQlwcmludGYgIiIgPiAkMS9pbnN0YWxsZWQtcGFja2FnZXMudHh0CisJZmkKKworCSMgUHJvZHVjZSBkZXBlbmRlbmN5IGdyYXBoCisJIyBGaXJzdCwgcXVvdGUgZWFjaCBuYW1lIHRvIGhhbmRsZSBjaGFyYWN0ZXJzIHRoYXQgY2F1c2UgaXNzdWVzIGZvciBkb3QKKwlzZWQgJ3M6XChbXnwgXSpcKToiXDEiOmcnICR7V09SS0RJUn0vYmhfaW5zdGFsbGVkX3BrZ3NfZGVwcy50eHQgPiAkMS9kZXBlbmRzLnRtcCAmJiBcCisJCXJtICR7V09SS0RJUn0vYmhfaW5zdGFsbGVkX3BrZ3NfZGVwcy50eHQKKwkjIENoYW5nZSBkZWxpbWl0ZXIgZnJvbSBwaXBlIHRvIC0+IGFuZCBzZXQgc3R5bGUgZm9yIHJlY29tbWVuZCBsaW5lcworCXNlZCAtaSAtZSAnczp8OiAtPiA6JyAtZSAnczoiXFtSRUNcXSI6W3N0eWxlPWRvdHRlZF06JyAtZSAnczokOjs6JyAkMS9kZXBlbmRzLnRtcAorCSMgQWRkIGhlYWRlciwgc29ydGVkIGFuZCBkZS1kdXBlZCBjb250ZW50cyBhbmQgZm9vdGVyIGFuZCB0aGVuIGRlbGV0ZSB0aGUgdGVtcCBmaWxlCisJcHJpbnRmICJkaWdyYXBoIGRlcGVuZHMge1xuICAgIG5vZGUgW3NoYXBlPXBsYWludGV4dF1cbiIgPiAkMS9kZXBlbmRzLmRvdAorCWNhdCAkMS9kZXBlbmRzLnRtcCB8IHNvcnQgfCB1bmlxID4+ICQxL2RlcGVuZHMuZG90CisJZWNobyAifSIgPj4gICQxL2RlcGVuZHMuZG90CisJcm0gJDEvZGVwZW5kcy50bXAKKworCSMgUHJvZHVjZSBpbnN0YWxsZWQgcGFja2FnZSBzaXplcyBsaXN0CisJcHJpbnRmICIiID4gJDEvaW5zdGFsbGVkLXBhY2thZ2Utc2l6ZXMudG1wCisJY2F0ICRwa2djYWNoZSB8IHdoaWxlIHJlYWQgcGtnIHBrZ2ZpbGUgcGtnYXJjaAorCWRvCisJCXNpemU9YG9lLXBrZ2RhdGEtdXRpbCAtcCAke1BLR0RBVEFfRElSfSByZWFkLXZhbHVlICJQS0dTSVpFIiAke3BrZ31fJHtwa2dhcmNofWAKKwkJaWYgWyAiJHNpemUiICE9ICIiIF0gOyB0aGVuCisJCQllY2hvICIkc2l6ZSAkcGtnIiA+PiAkMS9pbnN0YWxsZWQtcGFja2FnZS1zaXplcy50bXAKKwkJZmkKKwlkb25lCisJY2F0ICQxL2luc3RhbGxlZC1wYWNrYWdlLXNpemVzLnRtcCB8IHNvcnQgLW4gLXIgfCBhd2sgJ3twcmludCAkMSAiXHRLaUIgIiAkMn0nID4gJDEvaW5zdGFsbGVkLXBhY2thZ2Utc2l6ZXMudHh0CisJcm0gJDEvaW5zdGFsbGVkLXBhY2thZ2Utc2l6ZXMudG1wCisKKwkjIFdlJ3JlIG5vdyBkb25lIHdpdGggdGhlIGNhY2hlLCBkZWxldGUgaXQKKwlybSAkcGtnY2FjaGUKKworCWlmIFsgIiQyIiAhPSAic2RrIiBdIDsgdGhlbgorCQkjIFByb2R1Y2Ugc29tZSBjdXQtZG93biBncmFwaHMgKGZvciByZWFkYWJpbGl0eSkKKwkJZ3JlcCAtdiBrZXJuZWxfaW1hZ2UgJDEvZGVwZW5kcy5kb3QgfCBncmVwIC12IGtlcm5lbC0yIHwgZ3JlcCAtdiBrZXJuZWwtMyA+ICQxL2RlcGVuZHMtbm9rZXJuZWwuZG90CisJCWdyZXAgLXYgbGliYzYgJDEvZGVwZW5kcy1ub2tlcm5lbC5kb3QgfCBncmVwIC12IGxpYmdjYyA+ICQxL2RlcGVuZHMtbm9rZXJuZWwtbm9saWJjLmRvdAorCQlncmVwIC12IHVwZGF0ZS0gJDEvZGVwZW5kcy1ub2tlcm5lbC1ub2xpYmMuZG90ID4gJDEvZGVwZW5kcy1ub2tlcm5lbC1ub2xpYmMtbm91cGRhdGUuZG90CisJCWdyZXAgLXYga2VybmVsLW1vZHVsZSAkMS9kZXBlbmRzLW5va2VybmVsLW5vbGliYy1ub3VwZGF0ZS5kb3QgPiAkMS9kZXBlbmRzLW5va2VybmVsLW5vbGliYy1ub3VwZGF0ZS1ub21vZHVsZXMuZG90CisJZmkKKworCSMgYWRkIGNvbXBsZW1lbnRhcnkgcGFja2FnZSBpbmZvcm1hdGlvbgorCWlmIFsgLWUgJHtXT1JLRElSfS9jb21wbGVtZW50YXJ5X3BrZ3MudHh0IF07IHRoZW4KKwkJY3AgJHtXT1JLRElSfS9jb21wbGVtZW50YXJ5X3BrZ3MudHh0ICQxCisJZmkKK30KKworYnVpbGRoaXN0b3J5X2dldF9pbWFnZV9pbnN0YWxsZWQoKSB7CisJIyBBbnl0aGluZyByZXF1aXJpbmcgdGhlIHVzZSBvZiB0aGUgcGFja2FnaW5nIHN5c3RlbSBzaG91bGQgYmUgZG9uZSBpbiBoZXJlCisJIyBpbiBjYXNlIHRoZSBwYWNrYWdpbmcgZmlsZXMgYXJlIGdvaW5nIHRvIGJlIHJlbW92ZWQgZm9yIHRoaXMgaW1hZ2UKKworCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdCVUlMREhJU1RPUllfRkVBVFVSRVMnLCAnaW1hZ2UnLCAnMScsICcwJywgZCl9IiA9ICIwIiBdIDsgdGhlbgorCQlyZXR1cm4KKwlmaQorCisJYnVpbGRoaXN0b3J5X2dldF9pbnN0YWxsZWQgJHtCVUlMREhJU1RPUllfRElSX0lNQUdFfQorfQorCitidWlsZGhpc3RvcnlfZ2V0X3Nka19pbnN0YWxsZWQoKSB7CisJIyBBbnl0aGluZyByZXF1aXJpbmcgdGhlIHVzZSBvZiB0aGUgcGFja2FnaW5nIHN5c3RlbSBzaG91bGQgYmUgZG9uZSBpbiBoZXJlCisJIyBpbiBjYXNlIHRoZSBwYWNrYWdpbmcgZmlsZXMgYXJlIGdvaW5nIHRvIGJlIHJlbW92ZWQgZm9yIHRoaXMgU0RLCisKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnQlVJTERISVNUT1JZX0ZFQVRVUkVTJywgJ3NkaycsICcxJywgJzAnLCBkKX0iID0gIjAiIF0gOyB0aGVuCisJCXJldHVybgorCWZpCisKKwlidWlsZGhpc3RvcnlfZ2V0X2luc3RhbGxlZCAke0JVSUxESElTVE9SWV9ESVJfU0RLfS8kMSBzZGsKK30KKworYnVpbGRoaXN0b3J5X2dldF9zZGtfaW5zdGFsbGVkX2hvc3QoKSB7CisJYnVpbGRoaXN0b3J5X2dldF9zZGtfaW5zdGFsbGVkIGhvc3QKK30KKworYnVpbGRoaXN0b3J5X2dldF9zZGtfaW5zdGFsbGVkX3RhcmdldCgpIHsKKwlidWlsZGhpc3RvcnlfZ2V0X3Nka19pbnN0YWxsZWQgdGFyZ2V0Cit9CisKK2J1aWxkaGlzdG9yeV9saXN0X2ZpbGVzKCkgeworCSMgTGlzdCB0aGUgZmlsZXMgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnksIGJ1dCBleGNsdWRlIGRhdGUvdGltZSBldGMuCisJIyBUaGlzIGF3ayBzY3JpcHQgaXMgc29tZXdoYXQgbWVzc3ksIGJ1dCBoYW5kbGVzIHdoZXJlIHRoZSBzaXplIGlzIG5vdCBwcmludGVkIGZvciBkZXZpY2UgZmlsZXMgdW5kZXIgcHNldWRvCisJaWYgWyAiJDMiID0gImZha2Vyb290IiBdIDsgdGhlbgorCQkoIGNkICQxICYmICR7RkFLRVJPT1RFTlZ9ICR7RkFLRVJPT1RDTUR9IGZpbmQgLiAhIC1wYXRoIC4gLXByaW50ZiAiJU0gJS0xMHUgJS0xMGcgJTEwcyAlcCAtPiAlbFxuIiB8IHNvcnQgLWs1IHwgc2VkICdzLyAqIC0+ICQvLycgPiAkMiApCisJZWxzZQorCQkoIGNkICQxICYmIGZpbmQgLiAhIC1wYXRoIC4gLXByaW50ZiAiJU0gJS0xMHUgJS0xMGcgJTEwcyAlcCAtPiAlbFxuIiB8IHNvcnQgLWs1IHwgc2VkICdzLyAqIC0+ICQvLycgPiAkMiApCisJZmkKK30KKworYnVpbGRoaXN0b3J5X2xpc3RfcGtnX2ZpbGVzKCkgeworCSMgQ3JlYXRlIGluZGl2aWR1YWwgZmlsZXMtaW4tcGFja2FnZSBmb3IgZWFjaCByZWNpcGUncyBwYWNrYWdlCisJZm9yIHBrZ2RpciBpbiAkKGZpbmQgJHtQS0dERVNUfS8qIC1tYXhkZXB0aCAwIC10eXBlIGQpOyBkbworCQlwa2duYW1lPSQoYmFzZW5hbWUgJHBrZ2RpcikKKwkJb3V0Zm9sZGVyPSIke0JVSUxESElTVE9SWV9ESVJfUEFDS0FHRX0vJHBrZ25hbWUiCisJCW91dGZpbGU9IiRvdXRmb2xkZXIvZmlsZXMtaW4tcGFja2FnZS50eHQiCisJCSMgTWFrZSBzdXJlIHRoZSBvdXRwdXQgZm9sZGVyIGV4aXN0cyBzbyB3ZSBjYW4gY3JlYXRlIHRoZSBmaWxlCisJCWlmIFsgISAtZCAkb3V0Zm9sZGVyIF0gOyB0aGVuCisJCQliYmRlYnVnIDIgIkZvbGRlciAkb3V0Zm9sZGVyIGRvZXMgbm90IGV4aXN0LCBmaWxlICRvdXRmaWxlIG5vdCBjcmVhdGVkIgorCQkJY29udGludWUKKwkJZmkKKwkJYnVpbGRoaXN0b3J5X2xpc3RfZmlsZXMgJHBrZ2RpciAkb3V0ZmlsZSBmYWtlcm9vdAorCWRvbmUKK30KKworYnVpbGRoaXN0b3J5X2dldF9pbWFnZWluZm8oKSB7CisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0JVSUxESElTVE9SWV9GRUFUVVJFUycsICdpbWFnZScsICcxJywgJzAnLCBkKX0iID0gIjAiIF0gOyB0aGVuCisJCXJldHVybgorCWZpCisKKwlidWlsZGhpc3RvcnlfbGlzdF9maWxlcyAke0lNQUdFX1JPT1RGU30gJHtCVUlMREhJU1RPUllfRElSX0lNQUdFfS9maWxlcy1pbi1pbWFnZS50eHQKKworCSMgQ29sbGVjdCBmaWxlcyByZXF1ZXN0ZWQgaW4gQlVJTERISVNUT1JZX0lNQUdFX0ZJTEVTCisJcm0gLXJmICR7QlVJTERISVNUT1JZX0RJUl9JTUFHRX0vaW1hZ2UtZmlsZXMKKwlmb3IgZiBpbiAke0JVSUxESElTVE9SWV9JTUFHRV9GSUxFU307IGRvCisJCWlmIFsgLWYgJHtJTUFHRV9ST09URlN9LyRmIF0gOyB0aGVuCisJCQlta2RpciAtcCAke0JVSUxESElTVE9SWV9ESVJfSU1BR0V9L2ltYWdlLWZpbGVzL2BkaXJuYW1lICRmYAorCQkJY3AgJHtJTUFHRV9ST09URlN9LyRmICR7QlVJTERISVNUT1JZX0RJUl9JTUFHRX0vaW1hZ2UtZmlsZXMvJGYKKwkJZmkKKwlkb25lCisKKwkjIFJlY29yZCBzb21lIG1hY2hpbmUtcmVhZGFibGUgbWV0YS1pbmZvcm1hdGlvbiBhYm91dCB0aGUgaW1hZ2UKKwlwcmludGYgIiIgID4gJHtCVUlMREhJU1RPUllfRElSX0lNQUdFfS9pbWFnZS1pbmZvLnR4dAorCWNhdCA+PiAke0JVSUxESElTVE9SWV9ESVJfSU1BR0V9L2ltYWdlLWluZm8udHh0IDw8RU5ECiske0BidWlsZGhpc3RvcnlfZ2V0X2ltYWdldmFycyhkKX0KK0VORAorCWltYWdlc2l6ZT1gZHUgLWtzICR7SU1BR0VfUk9PVEZTfSB8IGF3ayAneyBwcmludCAkMSB9J2AKKwllY2hvICJJTUFHRVNJWkUgPSAkaW1hZ2VzaXplIiA+PiAke0JVSUxESElTVE9SWV9ESVJfSU1BR0V9L2ltYWdlLWluZm8udHh0CisKKwkjIEFkZCBzb21lIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24KKwllY2hvICIke01BQ0hJTkV9OiAke0lNQUdFX0JBU0VOQU1FfSBjb25maWd1cmVkIGZvciAke0RJU1RST30gJHtESVNUUk9fVkVSU0lPTn0iID4gJHtCVUlMREhJU1RPUllfRElSX0lNQUdFfS9idWlsZC1pZC50eHQKKworCWNhdCA+PiAke0JVSUxESElTVE9SWV9ESVJfSU1BR0V9L2J1aWxkLWlkLnR4dCA8PEVORAorJHtAYnVpbGRoaXN0b3J5X2dldF9idWlsZF9pZChkKX0KK0VORAorfQorCitidWlsZGhpc3RvcnlfZ2V0X3Nka2luZm8oKSB7CisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0JVSUxESElTVE9SWV9GRUFUVVJFUycsICdzZGsnLCAnMScsICcwJywgZCl9IiA9ICIwIiBdIDsgdGhlbgorCQlyZXR1cm4KKwlmaQorCisJYnVpbGRoaXN0b3J5X2xpc3RfZmlsZXMgJHtTREtfT1VUUFVUfSAke0JVSUxESElTVE9SWV9ESVJfU0RLfS9maWxlcy1pbi1zZGsudHh0CisKKwkjIFJlY29yZCBzb21lIG1hY2hpbmUtcmVhZGFibGUgbWV0YS1pbmZvcm1hdGlvbiBhYm91dCB0aGUgU0RLCisJcHJpbnRmICIiICA+ICR7QlVJTERISVNUT1JZX0RJUl9TREt9L3Nkay1pbmZvLnR4dAorCWNhdCA+PiAke0JVSUxESElTVE9SWV9ESVJfU0RLfS9zZGstaW5mby50eHQgPDxFTkQKKyR7QGJ1aWxkaGlzdG9yeV9nZXRfc2RrdmFycyhkKX0KK0VORAorCXNka3NpemU9YGR1IC1rcyAke1NES19PVVRQVVR9IHwgYXdrICd7IHByaW50ICQxIH0nYAorCWVjaG8gIlNES1NJWkUgPSAkc2Rrc2l6ZSIgPj4gJHtCVUlMREhJU1RPUllfRElSX1NES30vc2RrLWluZm8udHh0Cit9CisKKyMgQnkgdXNpbmcgUk9PVEZTX1BPU1RVTklOU1RBTExfQ09NTUFORCB3ZSBnZXQgaW4gYWZ0ZXIgdW5pbnN0YWxsYXRpb24gb2YKKyMgdW5uZWVkZWQgcGFja2FnZXMgYnV0IGJlZm9yZSB0aGUgcmVtb3ZhbCBvZiBwYWNrYWdpbmcgZmlsZXMKK1JPT1RGU19QT1NUVU5JTlNUQUxMX0NPTU1BTkQgKz0gIiBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWRfaW1hZ2UgO1wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRoaXN0b3J5X2dldF9pbWFnZV9pbnN0YWxsZWQgOyAiCisKK0lNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gIiBidWlsZGhpc3RvcnlfZ2V0X2ltYWdlaW5mbyA7ICIKKworIyBXZSB3YW50IHRoZXNlIHRvIGJlIHRoZSBsYXN0IHJ1biBzbyB0aGF0IHdlIGdldCBjYWxsZWQgYWZ0ZXIgY29tcGxlbWVudGFyeSBwYWNrYWdlIGluc3RhbGxhdGlvbgorUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkRfYXBwZW5kID0gIiBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWRfc2RrX3RhcmdldCA7XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGhpc3RvcnlfZ2V0X3Nka19pbnN0YWxsZWRfdGFyZ2V0IDsgIgorUE9QVUxBVEVfU0RLX1BPU1RfSE9TVF9DT01NQU5EX2FwcGVuZCA9ICIgYnVpbGRoaXN0b3J5X2xpc3RfaW5zdGFsbGVkX3Nka19ob3N0IDtcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGhpc3RvcnlfZ2V0X3Nka19pbnN0YWxsZWRfaG9zdCA7ICIKKworU0RLX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gImJ1aWxkaGlzdG9yeV9nZXRfc2RraW5mbyA7ICIKKworZGVmIGJ1aWxkaGlzdG9yeV9nZXRfYnVpbGRfaWQoZCk6CisgICAgaWYgZC5nZXRWYXIoJ0JCX1dPUktFUkNPTlRFWFQnLCBUcnVlKSAhPSAnMSc6CisgICAgICAgIHJldHVybiAiIgorICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgIHN0YXR1c2xpbmVzID0gW10KKyAgICBmb3IgZnVuYyBpbiBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdCVUlMRENGR19GVU5DUycsIGxvY2FsZGF0YSk6CisgICAgICAgIGcgPSBnbG9iYWxzKCkKKyAgICAgICAgaWYgZnVuYyBub3QgaW4gZzoKKyAgICAgICAgICAgIGJiLndhcm4oIkJ1aWxkIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24gJyVzJyBkb2VzIG5vdCBleGlzdCIgJSBmdW5jKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmxpbmVzID0gZ1tmdW5jXShsb2NhbGRhdGEpCisgICAgICAgICAgICBpZiBmbGluZXM6CisgICAgICAgICAgICAgICAgc3RhdHVzbGluZXMuZXh0ZW5kKGZsaW5lcykKKworICAgIHN0YXR1c2hlYWRlciA9IGQuZ2V0VmFyKCdCVUlMRENGR19IRUFERVInLCBUcnVlKQorICAgIHJldHVybignXG4lc1xuJXNcbicgJSAoc3RhdHVzaGVhZGVyLCAnXG4nLmpvaW4oc3RhdHVzbGluZXMpKSkKKworZGVmIGJ1aWxkaGlzdG9yeV9nZXRfbWV0YWRhdGFfcmV2cyhkKToKKyAgICAjIFdlIHdhbnQgYW4gZWFzaWx5IG1hY2hpbmUtcmVhZGFibGUgZm9ybWF0IGhlcmUsIHNvIGdldF9sYXllcnNfYnJhbmNoX3JldiBpc24ndCBxdWl0ZSB3aGF0IHdlIHdhbnQKKyAgICBsYXllcnMgPSAoZC5nZXRWYXIoIkJCTEFZRVJTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBtZWRhZGF0YV9yZXZzID0gWyIlLTE3cyA9ICVzOiVzIiAlIChvcy5wYXRoLmJhc2VuYW1lKGkpLCBcCisgICAgICAgIGJhc2VfZ2V0X21ldGFkYXRhX2dpdF9icmFuY2goaSwgTm9uZSkuc3RyaXAoKSwgXAorICAgICAgICBiYXNlX2dldF9tZXRhZGF0YV9naXRfcmV2aXNpb24oaSwgTm9uZSkpIFwKKyAgICAgICAgICAgIGZvciBpIGluIGxheWVyc10KKyAgICByZXR1cm4gJ1xuJy5qb2luKG1lZGFkYXRhX3JldnMpCisKK2RlZiBvdXRwdXR2YXJzKHZhcnMsIGxpc3R2YXJzLCBkKToKKyAgICB2YXJzID0gdmFycy5zcGxpdCgpCisgICAgbGlzdHZhcnMgPSBsaXN0dmFycy5zcGxpdCgpCisgICAgcmV0ID0gIiIKKyAgICBmb3IgdmFyIGluIHZhcnM6CisgICAgICAgIHZhbHVlID0gZC5nZXRWYXIodmFyLCBUcnVlKSBvciAiIgorICAgICAgICBpZiB2YXIgaW4gbGlzdHZhcnM6CisgICAgICAgICAgICAjIFNxdWFzaCBvdXQgc3BhY2VzCisgICAgICAgICAgICB2YWx1ZSA9IG9lLnV0aWxzLnNxdWFzaHNwYWNlcyh2YWx1ZSkKKyAgICAgICAgcmV0ICs9ICIlcyA9ICVzXG4iICUgKHZhciwgdmFsdWUpCisgICAgcmV0dXJuIHJldC5yc3RyaXAoJ1xuJykKKworZGVmIGJ1aWxkaGlzdG9yeV9nZXRfaW1hZ2V2YXJzKGQpOgorICAgIGlmIGQuZ2V0VmFyKCdCQl9XT1JLRVJDT05URVhUJywgVHJ1ZSkgIT0gJzEnOgorICAgICAgICByZXR1cm4gIiIKKyAgICBpbWFnZXZhcnMgPSAiRElTVFJPIERJU1RST19WRVJTSU9OIFVTRVJfQ0xBU1NFUyBJTUFHRV9DTEFTU0VTIElNQUdFX0ZFQVRVUkVTIElNQUdFX0xJTkdVQVMgSU1BR0VfSU5TVEFMTCBCQURfUkVDT01NRU5EQVRJT05TIE5PX1JFQ09NTUVOREFUSU9OUyBQQUNLQUdFX0VYQ0xVREUgUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgSU1BR0VfUE9TVFBST0NFU1NfQ09NTUFORCIKKyAgICBsaXN0dmFycyA9ICJVU0VSX0NMQVNTRVMgSU1BR0VfQ0xBU1NFUyBJTUFHRV9GRUFUVVJFUyBJTUFHRV9MSU5HVUFTIElNQUdFX0lOU1RBTEwgQkFEX1JFQ09NTUVOREFUSU9OUyBQQUNLQUdFX0VYQ0xVREUiCisgICAgcmV0dXJuIG91dHB1dHZhcnMoaW1hZ2V2YXJzLCBsaXN0dmFycywgZCkKKworZGVmIGJ1aWxkaGlzdG9yeV9nZXRfc2RrdmFycyhkKToKKyAgICBpZiBkLmdldFZhcignQkJfV09SS0VSQ09OVEVYVCcsIFRydWUpICE9ICcxJzoKKyAgICAgICAgcmV0dXJuICIiCisgICAgc2RrdmFycyA9ICJESVNUUk8gRElTVFJPX1ZFUlNJT04gU0RLX05BTUUgU0RLX1ZFUlNJT04gU0RLTUFDSElORSBTREtJTUFHRV9GRUFUVVJFUyBCQURfUkVDT01NRU5EQVRJT05TIE5PX1JFQ09NTUVOREFUSU9OUyBQQUNLQUdFX0VYQ0xVREUiCisgICAgbGlzdHZhcnMgPSAiU0RLSU1BR0VfRkVBVFVSRVMgQkFEX1JFQ09NTUVOREFUSU9OUyBQQUNLQUdFX0VYQ0xVREUiCisgICAgcmV0dXJuIG91dHB1dHZhcnMoc2RrdmFycywgbGlzdHZhcnMsIGQpCisKKworZGVmIGJ1aWxkaGlzdG9yeV9nZXRfY21kbGluZShkKToKKyAgICBpZiBzeXMuYXJndlswXS5lbmRzd2l0aCgnYmluL2JpdGJha2UnKToKKyAgICAgICAgYmluY21kID0gJ2JpdGJha2UnCisgICAgZWxzZToKKyAgICAgICAgYmluY21kID0gc3lzLmFyZ3ZbMF0KKyAgICByZXR1cm4gJyVzICVzJyAlIChiaW5jbWQsICcgJy5qb2luKHN5cy5hcmd2WzE6XSkpCisKKworYnVpbGRoaXN0b3J5X3NpbmdsZV9jb21taXQoKSB7CisJaWYgWyAiJDMiID0gIiIgXSA7IHRoZW4KKwkJY29tbWl0b3B0cz0iJHtCVUlMREhJU1RPUllfRElSfS8gLS1hbGxvdy1lbXB0eSIKKwkJaXRlbT0iTm8gY2hhbmdlcyIKKwllbHNlCisJCWNvbW1pdG9wdHM9IiQzIG1ldGFkYXRhLXJldnMiCisJCWl0ZW09IiQzIgorCWZpCisJaWYgWyAiJHtCVUlMREhJU1RPUllfQlVJTERfRkFJTFVSRVN9IiA9ICIwIiBdIDsgdGhlbgorCQlyZXN1bHQ9InN1Y2NlZWRlZCIKKwllbHNlCisJCXJlc3VsdD0iZmFpbGVkIgorCWZpCisJY2FzZSAke0JVSUxESElTVE9SWV9CVUlMRF9JTlRFUlJVUFRFRH0gaW4KKwkJMSkKKwkJCXJlc3VsdD0iJHJlc3VsdCAoaW50ZXJydXB0ZWQpIgorCQkJOzsKKwkJMikKKwkJCXJlc3VsdD0iJHJlc3VsdCAoZm9yY2UgaW50ZXJydXB0ZWQpIgorCQkJOzsKKwllc2FjCisJY29tbWl0bXNnZmlsZT1gbWt0ZW1wYAorCWNhdCA+ICRjb21taXRtc2dmaWxlIDw8IEVORAorJGl0ZW06IEJ1aWxkICR7QlVJTEROQU1FfSBvZiAke0RJU1RST30gJHtESVNUUk9fVkVSU0lPTn0gZm9yIG1hY2hpbmUgJHtNQUNISU5FfSBvbiAkMgorCitjbWQ6ICQxCisKK3Jlc3VsdDogJHJlc3VsdAorCittZXRhZGF0YSByZXZpc2lvbnM6CitFTkQKKwljYXQgJHtCVUlMREhJU1RPUllfRElSfS9tZXRhZGF0YS1yZXZzID4+ICRjb21taXRtc2dmaWxlCisJZ2l0IGNvbW1pdCAkY29tbWl0b3B0cyAtRiAkY29tbWl0bXNnZmlsZSAtLWF1dGhvciAiJHtCVUlMREhJU1RPUllfQ09NTUlUX0FVVEhPUn0iID4gL2Rldi9udWxsCisJcm0gJGNvbW1pdG1zZ2ZpbGUKK30KKworYnVpbGRoaXN0b3J5X2NvbW1pdCgpIHsKKwlpZiBbICEgLWQgJHtCVUlMREhJU1RPUllfRElSfSBdIDsgdGhlbgorCQkjIENvZGUgYWJvdmUgdGhhdCBjcmVhdGVzIHRoaXMgZGlyIG5ldmVyIGV4ZWN1dGVkLCBzbyB0aGVyZSBjYW4ndCBiZSBhbnl0aGluZyB0byBjb21taXQKKwkJcmV0dXJuCisJZmkKKworCSMgQ3JlYXRlIGEgbWFjaGluZS1yZWFkYWJsZSBsaXN0IG9mIG1ldGFkYXRhIHJldmlzaW9ucyBmb3IgZWFjaCBsYXllcgorCWNhdCA+ICR7QlVJTERISVNUT1JZX0RJUn0vbWV0YWRhdGEtcmV2cyA8PEVORAorJHtAYnVpbGRoaXN0b3J5X2dldF9tZXRhZGF0YV9yZXZzKGQpfQorRU5ECisKKwkoIGNkICR7QlVJTERISVNUT1JZX0RJUn0vCisJCSMgSW5pdGlhbGlzZSB0aGUgcmVwbyBpZiBuZWNlc3NhcnkKKwkJaWYgWyAhIC1kIC5naXQgXSA7IHRoZW4KKwkJCWdpdCBpbml0IC1xCisJCWVsc2UKKwkJCWdpdCB0YWcgLWYgYnVpbGQtbWludXMtMyBidWlsZC1taW51cy0yID4gL2Rldi9udWxsIDI+JjEgfHwgdHJ1ZQorCQkJZ2l0IHRhZyAtZiBidWlsZC1taW51cy0yIGJ1aWxkLW1pbnVzLTEgPiAvZGV2L251bGwgMj4mMSB8fCB0cnVlCisJCQlnaXQgdGFnIC1mIGJ1aWxkLW1pbnVzLTEgPiAvZGV2L251bGwgMj4mMSB8fCB0cnVlCisJCWZpCisJCSMgSWYgdGhlIHVzZXIgaGFzbid0IHNldCB1cCB0aGVpciBuYW1lL2VtYWlsLCBzZXQgc29tZSBkZWZhdWx0cworCQkjIGp1c3QgZm9yIHRoaXMgcmVwbyAob3RoZXJ3aXNlIHRoZSBjb21taXQgd2lsbCBmYWlsIHdpdGggb2xkZXIKKwkJIyB2ZXJzaW9ucyBvZiBnaXQpCisJCWlmICEgZ2l0IGNvbmZpZyB1c2VyLmVtYWlsID4gL2Rldi9udWxsIDsgdGhlbgorCQkJZ2l0IGNvbmZpZyAtLWxvY2FsIHVzZXIuZW1haWwgImJ1aWxkaGlzdG9yeUAke0RJU1RST30iCisJCWZpCisJCWlmICEgZ2l0IGNvbmZpZyB1c2VyLm5hbWUgPiAvZGV2L251bGwgOyB0aGVuCisJCQlnaXQgY29uZmlnIC0tbG9jYWwgdXNlci5uYW1lICJidWlsZGhpc3RvcnkiCisJCWZpCisJCSMgQ2hlY2sgaWYgdGhlcmUgYXJlIG5ldy9jaGFuZ2VkIGZpbGVzIHRvIGNvbW1pdCAob3RoZXIgdGhhbiBtZXRhZGF0YS1yZXZzKQorCQlyZXBvc3RhdHVzPWBnaXQgc3RhdHVzIC0tcG9yY2VsYWluIHwgZ3JlcCAtdiAiIG1ldGFkYXRhLXJldnMkImAKKwkJSE9TVE5BTUU9YGhvc3RuYW1lIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKwkJQ01ETElORT0iJHtAYnVpbGRoaXN0b3J5X2dldF9jbWRsaW5lKGQpfSIKKwkJaWYgWyAiJHJlcG9zdGF0dXMiICE9ICIiIF0gOyB0aGVuCisJCQlnaXQgYWRkIC1BIC4KKwkJCSMgcG9yY2VsYWluIG91dHB1dCBsb29rcyBsaWtlICI/PyBwYWNrYWdlcy9mb28vYmFyIgorCQkJIyBFbnN1cmUgd2UgY29tbWl0IG1ldGFkYXRhLXJldnMgd2l0aCB0aGUgZmlyc3QgY29tbWl0CisJCQlmb3IgZW50cnkgaW4gYGVjaG8gIiRyZXBvc3RhdHVzIiB8IGF3ayAne3ByaW50ICQyfScgfCBhd2sgLUYvICd7cHJpbnQgJDF9JyB8IHNvcnQgfCB1bmlxYCA7IGRvCisJCQkJYnVpbGRoaXN0b3J5X3NpbmdsZV9jb21taXQgIiRDTURMSU5FIiAiJEhPU1ROQU1FIiAiJGVudHJ5IgorCQkJZG9uZQorCQkJZ2l0IGdjIC0tYXV0byAtLXF1aWV0CisJCWVsc2UKKwkJCWJ1aWxkaGlzdG9yeV9zaW5nbGVfY29tbWl0ICIkQ01ETElORSIgIiRIT1NUTkFNRSIKKwkJZmkKKwkJaWYgWyAiJHtCVUlMREhJU1RPUllfUFVTSF9SRVBPfSIgIT0gIiIgXSA7IHRoZW4KKwkJCWdpdCBwdXNoIC1xICR7QlVJTERISVNUT1JZX1BVU0hfUkVQT30KKwkJZmkpIHx8IHRydWUKK30KKworcHl0aG9uIGJ1aWxkaGlzdG9yeV9ldmVudGhhbmRsZXIoKSB7CisgICAgaWYgZS5kYXRhLmdldFZhcignQlVJTERISVNUT1JZX0ZFQVRVUkVTJywgVHJ1ZSkuc3RyaXAoKToKKyAgICAgICAgaWYgZS5kYXRhLmdldFZhcigiQlVJTERISVNUT1JZX0NPTU1JVCIsIFRydWUpID09ICIxIjoKKyAgICAgICAgICAgIGJiLm5vdGUoIldyaXRpbmcgYnVpbGRoaXN0b3J5IikKKyAgICAgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShlLmRhdGEpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdCVUlMREhJU1RPUllfQlVJTERfRkFJTFVSRVMnLCBzdHIoZS5fZmFpbHVyZXMpKQorICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSBnZXRhdHRyKGUsICdfaW50ZXJydXB0ZWQnLCAwKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignQlVJTERISVNUT1JZX0JVSUxEX0lOVEVSUlVQVEVEJywgc3RyKGludGVycnVwdGVkKSkKKyAgICAgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiYnVpbGRoaXN0b3J5X2NvbW1pdCIsIGxvY2FsZGF0YSkKK30KKworYWRkaGFuZGxlciBidWlsZGhpc3RvcnlfZXZlbnRoYW5kbGVyCitidWlsZGhpc3RvcnlfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQiCisKKworIyBGSVhNRSB0aGlzIG91Z2h0IHRvIGJlIG1vdmVkIGludG8gdGhlIGZldGNoZXIKK2RlZiBfZ2V0X3NyY3Jldl92YWx1ZXMoZCk6CisgICAgIiIiCisgICAgUmV0dXJuIHRoZSB2ZXJzaW9uIHN0cmluZ3MgZm9yIHRoZSBjdXJyZW50IHJlY2lwZQorICAgICIiIgorCisgICAgc2NtcyA9IFtdCisgICAgZmV0Y2hlciA9IGJiLmZldGNoLkZldGNoKGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkuc3BsaXQoKSwgZCkKKyAgICB1cmxkYXRhID0gZmV0Y2hlci51ZAorICAgIGZvciB1IGluIHVybGRhdGE6CisgICAgICAgIGlmIHVybGRhdGFbdV0ubWV0aG9kLnN1cHBvcnRzX3NyY3JldigpOgorICAgICAgICAgICAgc2Ntcy5hcHBlbmQodSkKKworICAgIGF1dG9pbmNfdGVtcGwgPSAnQVVUT0lOQysnCisgICAgZGljdF9zcmNyZXZzID0ge30KKyAgICBkaWN0X3RhZ19zcmNyZXZzID0ge30KKyAgICBmb3Igc2NtIGluIHNjbXM6CisgICAgICAgIHVkID0gdXJsZGF0YVtzY21dCisgICAgICAgIGZvciBuYW1lIGluIHVkLm5hbWVzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldiA9IHVkLm1ldGhvZC5zb3J0YWJsZV9yZXZpc2lvbih1ZCwgZCwgbmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgIyBzdXBwb3J0IG9sZCBiaXRiYWtlIHZlcnNpb25zCisgICAgICAgICAgICAgICAgcmV2ID0gdWQubWV0aG9kLnNvcnRhYmxlX3JldmlzaW9uKHNjbSwgdWQsIGQsIG5hbWUpCisgICAgICAgICAgICAjIENsZWFuIHRoaXMgdXAgd2hlbiB3ZSBuZXh0IGJ1bXAgYml0YmFrZSB2ZXJzaW9uCisgICAgICAgICAgICBpZiB0eXBlKHJldikgIT0gc3RyOgorICAgICAgICAgICAgICAgIGF1dG9pbmMsIHJldiA9IHJldgorICAgICAgICAgICAgZWxpZiByZXYuc3RhcnRzd2l0aChhdXRvaW5jX3RlbXBsKToKKyAgICAgICAgICAgICAgICByZXYgPSByZXZbbGVuKGF1dG9pbmNfdGVtcGwpOl0KKyAgICAgICAgICAgIGRpY3Rfc3JjcmV2c1tuYW1lXSA9IHJldgorICAgICAgICAgICAgaWYgJ3RhZycgaW4gdWQucGFybToKKyAgICAgICAgICAgICAgICB0YWcgPSB1ZC5wYXJtWyd0YWcnXTsKKyAgICAgICAgICAgICAgICBrZXkgPSBuYW1lKydfJyt0YWcKKyAgICAgICAgICAgICAgICBkaWN0X3RhZ19zcmNyZXZzW2tleV0gPSByZXYKKyAgICByZXR1cm4gKGRpY3Rfc3JjcmV2cywgZGljdF90YWdfc3JjcmV2cykKKworZG9fZmV0Y2hbcG9zdGZ1bmNzXSArPSAid3JpdGVfc3JjcmV2IgorZG9fZmV0Y2hbdmFyZGVwc2V4Y2x1ZGVdICs9ICJ3cml0ZV9zcmNyZXYiCitweXRob24gd3JpdGVfc3JjcmV2KCkgeworICAgIHBrZ2hpc3RkaXIgPSBkLmdldFZhcignQlVJTERISVNUT1JZX0RJUl9QQUNLQUdFJywgVHJ1ZSkKKyAgICBzcmNyZXZmaWxlID0gb3MucGF0aC5qb2luKHBrZ2hpc3RkaXIsICdsYXRlc3Rfc3JjcmV2JykKKworICAgIHNyY3JldnMsIHRhZ19zcmNyZXZzID0gX2dldF9zcmNyZXZfdmFsdWVzKGQpCisgICAgaWYgc3JjcmV2czoKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBrZ2hpc3RkaXIpOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHBrZ2hpc3RkaXIpCisgICAgICAgIG9sZF90YWdfc3JjcmV2cyA9IHt9CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNyY3JldmZpbGUpOgorICAgICAgICAgICAgd2l0aCBvcGVuKHNyY3JldmZpbGUpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcjIHRhZ18nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleSwgdmFsdWUgPSBsaW5lLnNwbGl0KCI9IiwgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleS5yZXBsYWNlKCcjIHRhZ18nLCAnJykuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCciJywgJycpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9sZF90YWdfc3JjcmV2c1trZXldID0gdmFsdWUKKyAgICAgICAgd2l0aCBvcGVuKHNyY3JldmZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIG9yaWdfc3JjcmV2ID0gZC5nZXRWYXIoJ1NSQ1JFVicsIEZhbHNlKSBvciAnSU5WQUxJRCcKKyAgICAgICAgICAgIGlmIG9yaWdfc3JjcmV2ICE9ICdJTlZBTElEJzoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCcjIFNSQ1JFViA9ICIlcyJcbicgJSBvcmlnX3NyY3JldikKKyAgICAgICAgICAgIGlmIGxlbihzcmNyZXZzKSA+IDE6CisgICAgICAgICAgICAgICAgZm9yIG5hbWUsIHNyY3JldiBpbiBzcmNyZXZzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIG9yaWdfc3JjcmV2ID0gZC5nZXRWYXIoJ1NSQ1JFVl8lcycgJSBuYW1lLCBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgb3JpZ19zcmNyZXY6CisgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCcjIFNSQ1JFVl8lcyA9ICIlcyJcbicgJSAobmFtZSwgb3JpZ19zcmNyZXYpKQorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCdTUkNSRVZfJXMgPSAiJXMiXG4nICUgKG5hbWUsIHNyY3JldikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ1NSQ1JFViA9ICIlcyJcbicgJSBzcmNyZXZzLml0ZXJ2YWx1ZXMoKS5uZXh0KCkpCisgICAgICAgICAgICBpZiBsZW4odGFnX3NyY3JldnMpID4gMDoKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSwgc3JjcmV2IGluIHRhZ19zcmNyZXZzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJyMgdGFnXyVzID0gIiVzIlxuJyAlIChuYW1lLCBzcmNyZXYpKQorICAgICAgICAgICAgICAgICAgICBpZiBuYW1lIGluIG9sZF90YWdfc3JjcmV2cyBhbmQgb2xkX3RhZ19zcmNyZXZzW25hbWVdICE9IHNyY3JldjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZyA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJSZXZpc2lvbiBmb3IgdGFnICVzIGluIHBhY2thZ2UgJXMgd2FzIGNoYW5nZWQgc2luY2UgbGFzdCBidWlsZCAoZnJvbSAlcyB0byAlcykiICUgKG5hbWUsIHBrZywgb2xkX3RhZ19zcmNyZXZzW25hbWVdLCBzcmNyZXYpKQorCisgICAgZWxzZToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3JjcmV2ZmlsZSk6CisgICAgICAgICAgICBvcy5yZW1vdmUoc3JjcmV2ZmlsZSkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1aWxkc3RhdHMtc3VtbWFyeS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYnVpbGRzdGF0cy1zdW1tYXJ5LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVlYWQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1aWxkc3RhdHMtc3VtbWFyeS5iYmNsYXNzCkBAIC0wLDAgKzEsMzcgQEAKKyMgU3VtbWFyaXplIHNzdGF0ZSB1c2FnZSBhdCB0aGUgZW5kIG9mIHRoZSBidWlsZAorcHl0aG9uIGJ1aWxkc3RhdHNfc3VtbWFyeSAoKSB7CisgICAgaW1wb3J0IGNvbGxlY3Rpb25zCisgICAgaW1wb3J0IG9zLnBhdGgKKworICAgIGJuID0gZ2V0X2JuKGUpCisgICAgYnNkaXIgPSBvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksIGJuKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhic2Rpcik6CisgICAgICAgIHJldHVybgorCisgICAgc3N0YXRldGFza3MgPSAoZS5kYXRhLmdldFZhcignU1NUQVRFVEFTS1MnLCBUcnVlKSBvciAnJykuc3BsaXQoKQorICAgIGJ1aWx0ID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGFtYmRhOiBbc2V0KCksIHNldCgpXSkKKyAgICBmb3IgcGYgaW4gb3MubGlzdGRpcihic2Rpcik6CisgICAgICAgIHRhc2tkaXIgPSBvcy5wYXRoLmpvaW4oYnNkaXIsIHBmKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcih0YXNrZGlyKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgdGFza3MgPSBvcy5saXN0ZGlyKHRhc2tkaXIpCisgICAgICAgIGZvciB0IGluIHNzdGF0ZXRhc2tzOgorICAgICAgICAgICAgbm9fc3N0YXRlLCBzc3RhdGUgPSBidWlsdFt0XQorICAgICAgICAgICAgaWYgdCBpbiB0YXNrczoKKyAgICAgICAgICAgICAgICBub19zc3RhdGUuYWRkKHBmKQorICAgICAgICAgICAgZWxpZiB0ICsgJ19zZXRzY2VuZScgaW4gdGFza3M6CisgICAgICAgICAgICAgICAgc3N0YXRlLmFkZChwZikKKworICAgIGhlYWRlcl9wcmludGVkID0gRmFsc2UKKyAgICBmb3IgdCBpbiBzc3RhdGV0YXNrczoKKyAgICAgICAgbm9fc3N0YXRlLCBzc3RhdGUgPSBidWlsdFt0XQorICAgICAgICBpZiBub19zc3RhdGUgfCBzc3RhdGU6CisgICAgICAgICAgICBpZiBub3QgaGVhZGVyX3ByaW50ZWQ6CisgICAgICAgICAgICAgICAgaGVhZGVyX3ByaW50ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgYmIubm90ZSgiQnVpbGQgY29tcGxldGlvbiBzdW1tYXJ5OiIpCisKKyAgICAgICAgICAgIGJiLm5vdGUoIiAgezB9OiB7MX0lIHNzdGF0ZSByZXVzZSAoezJ9IHNldHNjZW5lLCB7M30gc2NyYXRjaCkiLmZvcm1hdCh0LCAxMDAqbGVuKHNzdGF0ZSkvKGxlbihzc3RhdGUpK2xlbihub19zc3RhdGUpKSwgbGVuKHNzdGF0ZSksIGxlbihub19zc3RhdGUpKSkKK30KK2FkZGhhbmRsZXIgYnVpbGRzdGF0c19zdW1tYXJ5CitidWlsZHN0YXRzX3N1bW1hcnlbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZENvbXBsZXRlZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1aWxkc3RhdHMuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1aWxkc3RhdHMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmVjNTcxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYnVpbGRzdGF0cy5iYmNsYXNzCkBAIC0wLDAgKzEsMjcwIEBACitCVUlMRFNUQVRTX0JBU0UgPSAiJHtUTVBESVJ9L2J1aWxkc3RhdHMvIgorQlVJTERTVEFUU19CTkZJTEUgPSAiJHtCVUlMRFNUQVRTX0JBU0V9Ly5idWlsZG5hbWUiCitCVUlMRFNUQVRTX0RFVkZJTEUgPSAiJHtCVUlMRFNUQVRTX0JBU0V9Ly5kZXZpY2UiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJ1aWxkIHN0YXRpc3RpY3MgZ2F0aGVyaW5nLgorIworIyBUaGUgQ1BVIGFuZCBUaW1lIGdhdGhlcmluZy90cmFja2luZyBmdW5jdGlvbnMgYW5kIGJiZXZlbnQgaW5zcGlyYXRpb24KKyMgd2VyZSB3cml0dGVuIGJ5IENocmlzdG9waGVyIExhcnNvbiBhbmQgY2FuIGJlIHNlZW4gaGVyZToKKyMgaHR0cDovL2tlcmdvdGgucGFzdGV5Lm5ldC8xNDI4MTMKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZiBnZXRfcHJvY2Vzc19jcHV0aW1lKHBpZCk6CisgICAgd2l0aCBvcGVuKCIvcHJvYy8lZC9zdGF0IiAlIHBpZCwgInIiKSBhcyBmOgorICAgICAgICBmaWVsZHMgPSBmLnJlYWRsaW5lKCkucnN0cmlwKCkuc3BsaXQoKQorICAgICMgMTM6IHV0aW1lLCAxNDogc3RpbWUsIDE1OiBjdXRpbWUsIDE2OiBjc3RpbWUKKyAgICByZXR1cm4gc3VtKGludChmaWVsZCkgZm9yIGZpZWxkIGluIGZpZWxkc1sxMzoxNl0pCisKK2RlZiBnZXRfY3B1dGltZSgpOgorICAgIHdpdGggb3BlbigiL3Byb2Mvc3RhdCIsICJyIikgYXMgZjoKKyAgICAgICAgZmllbGRzID0gZi5yZWFkbGluZSgpLnJzdHJpcCgpLnNwbGl0KClbMTpdCisgICAgcmV0dXJuIHN1bShpbnQoZmllbGQpIGZvciBmaWVsZCBpbiBmaWVsZHMpCisKK2RlZiBzZXRfYm4oZSk6CisgICAgYm4gPSBlLmdldFBrZ3MoKVswXSArICItIiArIGUuZGF0YS5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKQorICAgIHRyeToKKyAgICAgICAgb3MucmVtb3ZlKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQk5GSUxFJywgVHJ1ZSkpCisgICAgZXhjZXB0OgorICAgICAgICBwYXNzCisgICAgd2l0aCBvcGVuKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQk5GSUxFJywgVHJ1ZSksICJ3IikgYXMgZjoKKyAgICAgICAgZi53cml0ZShvcy5wYXRoLmpvaW4oYm4sIGUuZGF0YS5nZXRWYXIoJ0JVSUxETkFNRScsIFRydWUpKSkKKworZGVmIGdldF9ibihlKToKKyAgICB3aXRoIG9wZW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CTkZJTEUnLCBUcnVlKSkgYXMgZjoKKyAgICAgICAgYm4gPSBmLnJlYWRsaW5lKCkKKyAgICByZXR1cm4gYm4KKworZGVmIHNldF9kZXZpY2UoZSk6CisgICAgdG1wZGlyID0gZS5kYXRhLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICBkZXZmaWxlID0gZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19ERVZGSUxFJywgVHJ1ZSkKKyAgICB0cnk6CisgICAgICAgIG9zLnJlbW92ZShkZXZmaWxlKQorICAgIGV4Y2VwdDoKKyAgICAgICAgcGFzcworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIFdlIGxvb2sgZm9yIHRoZSB2b2x1bWUgVE1QRElSIGxpdmVzIG9uLiBUbyBkbyBhbGwgZGlza3Mgd291bGQgbWFrZSBsaXR0bGUKKyAgICAjIHNlbnNlIGFuZCBub3QgZ2l2ZSB1cyBhbnkgcGFydGljdWxhcmx5IHVzZWZ1bCBkYXRhLiBJbiB0aGVvcnkgd2UgY291bGQgZG8KKyAgICAjIHNvbWV0aGluZyBsaWtlIHN0aWNrIERMX0RJUiBvbiBhIGRpZmZlcmVudCBwYXJ0aXRpb24gYW5kIHRoaXMgd291bGQKKyAgICAjIHRocm93IHN0YXRzIGdhdGhlcmluZyBvZmYuIFRoZSBzYW1lIGdvZXMgd2l0aCBTU1RBVEVfRElSLiBIb3dldmVyLCBsZXQncworICAgICMgZ2V0IHRoZSBiYXNpY3MgaW4gaGVyZSBhbmQgd29yayBvbiB0aGUgY29ybmVyY2FzZXMgbGF0ZXIuCisgICAgIyBBIG5vdGUuIC9wcm9jL2Rpc2tzdGF0cyBkb2VzIG5vdCBjb250YWluIGluZm8gb24gZW5jcnlwdGZzLCB0bXBmcywgZXRjLgorICAgICMgSWYgd2UgZW5kIHVwIGhpdHRpbmcgb25lIG9mIHRoZXNlIGZzLCB3ZSdsbCBqdXN0IHNraXAgZGlza3N0YXRzIGNvbGxlY3Rpb24uCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgIGRldmljZSA9IG9zLnN0YXQodG1wZGlyKQorICAgIG1ham9yZGV2ID0gb3MubWFqb3IobG9uZyhkZXZpY2Uuc3RfZGV2KSkKKyAgICBtaW5vcmRldiA9IG9zLm1pbm9yKGxvbmcoZGV2aWNlLnN0X2RldikpCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgQnVnIDE3MDA6CisgICAgIyBCZWNhdXNlIHRtcGZzL2VuY3J5cHRmcy9yYW1mcyBldGMgaW5zZXJ0cyBubyBlbnRyeSBpbiAvcHJvYy9kaXNrc3RhdHMKKyAgICAjIHdlIHNldCByZGV2IHRvIE5vTG9naWNhbERldmljZSBhbmQgc2VhcmNoIGZvciBpdCBsYXRlci4gSWYgd2UgZmluZCBOTEQKKyAgICAjIHdlIGRvIG5vdCBjb2xsZWN0IGRpc2tzdGF0cyBhcyB0aGUgbWV0aG9kIHRvIGNvbGxlY3QgbWVhbmluZ2Z1bCBzdGF0aXN0aWNzCisgICAgIyBmb3IgdGhlc2UgZnMgdHlwZXMgcmVxdWlyZXMgYSBiaXQgbW9yZSByZXNlYXJjaC4KKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgcmRldiA9ICJOb0xvZ2ljYWxEZXZpY2UiCisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oIi9wcm9jL2Rpc2tzdGF0cyIsICJyIikgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgaWYgbWFqb3JkZXYgPT0gaW50KGxpbmUuc3BsaXQoKVswXSkgYW5kIG1pbm9yZGV2ID09IGludChsaW5lLnNwbGl0KClbMV0pOgorICAgICAgICAgICAgICAgICAgICByZGV2ID0gbGluZS5zcGxpdCgpWzJdCisgICAgZXhjZXB0OgorICAgICAgICBwYXNzCisgICAgd2l0aCBvcGVuKGRldmZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgZi53cml0ZShyZGV2KQorCitkZWYgZ2V0X2RldmljZShlKToKKyAgICB3aXRoIG9wZW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19ERVZGSUxFJywgVHJ1ZSkpIGFzIGY6CisgICAgICAgIGRldmljZSA9IGYucmVhZGxpbmUoKQorICAgIHJldHVybiBkZXZpY2UKKworZGVmIGdldF9kaXNrc3RhdHMoZGV2KToKKyAgICBpbXBvcnQgaXRlcnRvb2xzCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgRm9yIGluZm8gb24gd2hhdCB0aGVzZSBhcmUsIHNlZSBrZXJuZWwgZG9jIGZpbGUgaW9zdGF0cy50eHQKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgRFNUQVRfS0VZUyA9IFsnUmVhZHNDb21wJywgJ1JlYWRzTWVyZ2VkJywgJ1NlY3RSZWFkJywgJ1RpbWVSZWFkcycsICdXcml0ZXNDb21wJywgJ1NlY3RXcml0ZScsICdUaW1lV3JpdGUnLCAnSU9pblByb2dyZXNzJywgJ1RpbWVJTycsICdXVGltZUlPJ10KKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbigiL3Byb2MvZGlza3N0YXRzIiwgInIiKSBhcyBmOgorICAgICAgICAgICAgZm9yIHggaW4gZjoKKyAgICAgICAgICAgICAgICBpZiBkZXYgaW4geDoKKyAgICAgICAgICAgICAgICAgICAgZGlza3N0YXRzX3ZhbCA9IHgucnN0cmlwKCkuc3BsaXQoKVs0Ol0KKyAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICByZXR1cm4KKyAgICBkaXNrc3RhdHMgPSBkaWN0KGl0ZXJ0b29scy5pemlwKERTVEFUX0tFWVMsIGRpc2tzdGF0c192YWwpKQorICAgIHJldHVybiBkaXNrc3RhdHMKKworZGVmIHNldF9kaXNrZGF0YSh2YXIsIGRldiwgZGF0YSk6CisgICAgZGF0YS5zZXRWYXIodmFyLCBnZXRfZGlza3N0YXRzKGRldikpCisKK2RlZiBnZXRfZGlza2RhdGEodmFyLCBkZXYsIGRhdGEpOgorICAgIG9sZGRpc2tkYXRhID0gZGF0YS5nZXRWYXIodmFyLCBGYWxzZSkKKyAgICBkaXNrZGF0YSA9IHt9CisgICAgaWYgb2xkZGlza2RhdGEgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuCisgICAgbmV3ZGlza2RhdGEgPSBnZXRfZGlza3N0YXRzKGRldikKKyAgICBmb3Iga2V5IGluIG9sZGRpc2tkYXRhLml0ZXJrZXlzKCk6CisgICAgICAgIGRpc2tkYXRhWyJTdGFydCIra2V5XSA9IHN0cihpbnQob2xkZGlza2RhdGFba2V5XSkpCisgICAgICAgIGRpc2tkYXRhWyJFbmQiK2tleV0gPSBzdHIoaW50KG5ld2Rpc2tkYXRhW2tleV0pKQorICAgIHJldHVybiBkaXNrZGF0YQorCitkZWYgc2V0X3RpbWVkYXRhKHZhciwgZGF0YSwgc2VydmVyX3RpbWU9Tm9uZSk6CisgICAgaW1wb3J0IHRpbWUKKyAgICBpZiBzZXJ2ZXJfdGltZToKKyAgICAgICAgdGltZSA9IHNlcnZlcl90aW1lCisgICAgZWxzZToKKyAgICAgICAgdGltZSA9IHRpbWUudGltZSgpCisgICAgY3B1dGltZSA9IGdldF9jcHV0aW1lKCkKKyAgICBwcm9jdGltZSA9IGdldF9wcm9jZXNzX2NwdXRpbWUob3MuZ2V0cGlkKCkpCisgICAgZGF0YS5zZXRWYXIodmFyLCAodGltZSwgY3B1dGltZSwgcHJvY3RpbWUpKQorCitkZWYgZ2V0X3RpbWVkYXRhKHZhciwgZGF0YSwgc2VydmVyX3RpbWU9Tm9uZSk6CisgICAgaW1wb3J0IHRpbWUKKyAgICB0aW1lZGF0YSA9IGRhdGEuZ2V0VmFyKHZhciwgRmFsc2UpCisgICAgaWYgdGltZWRhdGEgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuCisgICAgb2xkdGltZSwgb2xkY3B1LCBvbGRwcm9jID0gdGltZWRhdGEKKyAgICBwcm9jZGlmZiA9IGdldF9wcm9jZXNzX2NwdXRpbWUob3MuZ2V0cGlkKCkpIC0gb2xkcHJvYworICAgIGNwdWRpZmYgPSBnZXRfY3B1dGltZSgpIC0gb2xkY3B1CisgICAgaWYgc2VydmVyX3RpbWU6CisgICAgICAgIGVuZF90aW1lID0gc2VydmVyX3RpbWUKKyAgICBlbHNlOgorICAgICAgICBlbmRfdGltZSA9IHRpbWUudGltZSgpCisgICAgdGltZWRpZmYgPSBlbmRfdGltZSAtIG9sZHRpbWUKKyAgICBpZiBjcHVkaWZmID4gMDoKKyAgICAgICAgY3B1cGVyYyA9IGZsb2F0KHByb2NkaWZmKSAqIDEwMCAvIGNwdWRpZmYKKyAgICBlbHNlOgorICAgICAgICBjcHVwZXJjID0gTm9uZQorICAgIHJldHVybiB0aW1lZGlmZiwgY3B1cGVyYworCitkZWYgd3JpdGVfdGFza19kYXRhKHN0YXR1cywgbG9nZmlsZSwgZGV2LCBlKToKKyAgICBibiA9IGdldF9ibihlKQorICAgIGJzZGlyID0gb3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCBibikKKyAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGxvZ2ZpbGUpLCAiYSIpIGFzIGY6CisgICAgICAgIHRpbWVkYXRhID0gZ2V0X3RpbWVkYXRhKCJfX3RpbWVkYXRhX3Rhc2siLCBlLmRhdGEsIGUudGltZSkKKyAgICAgICAgaWYgdGltZWRhdGE6CisgICAgICAgICAgICBlbGFwc2VkdGltZSwgY3B1ID0gdGltZWRhdGEKKyAgICAgICAgICAgIGYud3JpdGUoYmIuZGF0YS5leHBhbmQoIiR7UEZ9OiAlczogRWxhcHNlZCB0aW1lOiAlMC4yZiBzZWNvbmRzIFxuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS50YXNrLCBlbGFwc2VkdGltZSksIGUuZGF0YSkpCisgICAgICAgICAgICBpZiBjcHU6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiQ1BVIHVzYWdlOiAlMC4xZiUlIFxuIiAlIGNwdSkKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAjIEhlcmUgd2UgZ2F0aGVyIHVwIGRpc2sgZGF0YS4gSW4gYW4gZWZmb3J0IHRvIGF2b2lkIGx5aW5nIHdpdGggc3RhdHMKKyAgICAgICAgIyBJIGRvIGEgYmFyZSBtaW5pbXVtIG9mIGFuYWx5c2lzIG9mIGNvbGxlY3RlZCBkYXRhLgorICAgICAgICAjIFRoZSBzaW1wbGUgZmFjdCBpcywgZG9pbmcgZGlzayBpbyBjb2xsZWN0aW9uIG9uIGEgcGVyIHByb2Nlc3MgYmFzaXMKKyAgICAgICAgIyB3aXRob3V0IGVmZmVjdGluZyBidWlsZCB0aW1lIHdvdWxkIGJlIGRpZmZpY3VsdC4KKyAgICAgICAgIyBGb3IgdGhlIGJlc3QgaW5mb3JtYXRpb24sIHJ1bm5pbmcgdGhpbmdzIHdpdGggQkJfVE9UQUxfVEhSRUFEUyA9ICIxIgorICAgICAgICAjIHdvdWxkIHJldHVybiBhY2N1cmF0ZSBwZXIgdGFzayByZXN1bHRzLgorICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgIGlmIGRldiAhPSAiTm9Mb2dpY2FsRGV2aWNlIjoKKyAgICAgICAgICAgIGRpc2tkYXRhID0gZ2V0X2Rpc2tkYXRhKCJfX2Rpc2tkYXRhX3Rhc2siLCBkZXYsIGUuZGF0YSkKKyAgICAgICAgICAgIGlmIGRpc2tkYXRhOgorICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gc29ydGVkKGRpc2tkYXRhLml0ZXJrZXlzKCkpOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGtleSArICI6ICIgKyBkaXNrZGF0YVtrZXldICsgIlxuIikKKyAgICAgICAgaWYgc3RhdHVzIGlzICJwYXNzZWQiOgorICAgICAgICAgICAgZi53cml0ZSgiU3RhdHVzOiBQQVNTRUQgXG4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZi53cml0ZSgiU3RhdHVzOiBGQUlMRUQgXG4iKQorICAgICAgICBmLndyaXRlKCJFbmRlZDogJTAuMmYgXG4iICUgZS50aW1lKQorCitweXRob24gcnVuX2J1aWxkc3RhdHMgKCkgeworICAgIGltcG9ydCBiYi5idWlsZAorICAgIGltcG9ydCBiYi5ldmVudAorICAgIGltcG9ydCBiYi5kYXRhCisgICAgaW1wb3J0IHRpbWUsIHN1YnByb2Nlc3MsIHBsYXRmb3JtCisKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LkJ1aWxkU3RhcnRlZCk6CisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAjIGF0IGZpcnN0IHBhc3MgbWFrZSB0aGUgYnVpbGRzdGF0cyBoZXJpYXJjaHkgYW5kIHRoZW4KKyAgICAgICAgIyBzZXQgdGhlIGJ1aWxkbmFtZQorICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpKQorICAgICAgICBzZXRfYm4oZSkKKyAgICAgICAgYm4gPSBnZXRfYm4oZSkKKyAgICAgICAgc2V0X2RldmljZShlKQorICAgICAgICBkZXZpY2UgPSBnZXRfZGV2aWNlKGUpCisKKyAgICAgICAgYnNkaXIgPSBvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksIGJuKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoYnNkaXIpCisgICAgICAgIGlmIGRldmljZSAhPSAiTm9Mb2dpY2FsRGV2aWNlIjoKKyAgICAgICAgICAgIHNldF9kaXNrZGF0YSgiX19kaXNrZGF0YV9idWlsZCIsIGRldmljZSwgZS5kYXRhKQorICAgICAgICBzZXRfdGltZWRhdGEoIl9fdGltZWRhdGFfYnVpbGQiLCBlLmRhdGEpCisgICAgICAgIGJ1aWxkX3RpbWUgPSBvcy5wYXRoLmpvaW4oYnNkaXIsICJidWlsZF9zdGF0cyIpCisgICAgICAgICMgd3JpdGUgc3RhcnQgb2YgYnVpbGQgaW50byBidWlsZF90aW1lCisgICAgICAgIHdpdGggb3BlbihidWlsZF90aW1lLCAiYSIpIGFzIGY6CisgICAgICAgICAgICBob3N0X2luZm8gPSBwbGF0Zm9ybS51bmFtZSgpCisgICAgICAgICAgICBmLndyaXRlKCJIb3N0IEluZm86ICIpCisgICAgICAgICAgICBmb3IgeCBpbiBob3N0X2luZm86CisgICAgICAgICAgICAgICAgaWYgeDoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSh4ICsgIiAiKQorICAgICAgICAgICAgZi53cml0ZSgiXG4iKQorICAgICAgICAgICAgZi53cml0ZSgiQnVpbGQgU3RhcnRlZDogJTAuMmYgXG4iICUgdGltZS50aW1lKCkpCisKKyAgICBlbGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQpOgorICAgICAgICBibiA9IGdldF9ibihlKQorICAgICAgICBkZXZpY2UgPSBnZXRfZGV2aWNlKGUpCisgICAgICAgIGJzZGlyID0gb3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCBibikKKyAgICAgICAgYnVpbGRfdGltZSA9IG9zLnBhdGguam9pbihic2RpciwgImJ1aWxkX3N0YXRzIikKKyAgICAgICAgd2l0aCBvcGVuKGJ1aWxkX3RpbWUsICJhIikgYXMgZjoKKyAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAgICAgIyBXcml0ZSBidWlsZCBzdGF0aXN0aWNzIGZvciB0aGUgYnVpbGQKKyAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAgICAgdGltZWRhdGEgPSBnZXRfdGltZWRhdGEoIl9fdGltZWRhdGFfYnVpbGQiLCBlLmRhdGEpCisgICAgICAgICAgICBpZiB0aW1lZGF0YToKKyAgICAgICAgICAgICAgICB0aW1lLCBjcHUgPSB0aW1lZGF0YQorICAgICAgICAgICAgICAgICMgd3JpdGUgZW5kIG9mIGJ1aWxkIGFuZCBjcHUgdXNlZCBpbnRvIGJ1aWxkX3RpbWUKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJFbGFwc2VkIHRpbWU6ICUwLjJmIHNlY29uZHMgXG4iICUgKHRpbWUpKQorICAgICAgICAgICAgICAgIGlmIGNwdToKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiQ1BVIHVzYWdlOiAlMC4xZiUlIFxuIiAlIGNwdSkKKyAgICAgICAgICAgIGlmIGRldmljZSAhPSAiTm9Mb2dpY2FsRGV2aWNlIjoKKyAgICAgICAgICAgICAgICBkaXNraW8gPSBnZXRfZGlza2RhdGEoIl9fZGlza2RhdGFfYnVpbGQiLCBkZXZpY2UsIGUuZGF0YSkKKyAgICAgICAgICAgICAgICBpZiBkaXNraW86CisgICAgICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gc29ydGVkKGRpc2tpby5pdGVya2V5cygpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoa2V5ICsgIjogIiArIGRpc2tpb1trZXldICsgIlxuIikKKworICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuYnVpbGQuVGFza1N0YXJ0ZWQpOgorICAgICAgICBibiA9IGdldF9ibihlKQorICAgICAgICBkZXZpY2UgPSBnZXRfZGV2aWNlKGUpCisgICAgICAgIGJzZGlyID0gb3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCBibikKKyAgICAgICAgdGFza2RpciA9IG9zLnBhdGguam9pbihic2RpciwgZS5kYXRhLmdldFZhcignUEYnLCBUcnVlKSkKKyAgICAgICAgaWYgZGV2aWNlICE9ICJOb0xvZ2ljYWxEZXZpY2UiOgorICAgICAgICAgICAgc2V0X2Rpc2tkYXRhKCJfX2Rpc2tkYXRhX3Rhc2siLCBkZXZpY2UsIGUuZGF0YSkKKyAgICAgICAgc2V0X3RpbWVkYXRhKCJfX3RpbWVkYXRhX3Rhc2siLCBlLmRhdGEsIGUudGltZSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHRhc2tkaXIpCisgICAgICAgICMgd3JpdGUgaW50byB0aGUgdGFzayBldmVudCBmaWxlIHRoZSBuYW1lIGFuZCBzdGFydCB0aW1lCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4odGFza2RpciwgZS50YXNrKSwgImEiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgiRXZlbnQ6ICVzIFxuIiAlIGJiLmV2ZW50LmdldE5hbWUoZSkpCisgICAgICAgICAgICBmLndyaXRlKCJTdGFydGVkOiAlMC4yZiBcbiIgJSBlLnRpbWUpCisKKyAgICBlbGlmIGlzaW5zdGFuY2UoZSwgYmIuYnVpbGQuVGFza1N1Y2NlZWRlZCk6CisgICAgICAgIGJuID0gZ2V0X2JuKGUpCisgICAgICAgIGRldmljZSA9IGdldF9kZXZpY2UoZSkKKyAgICAgICAgYnNkaXIgPSBvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksIGJuKQorICAgICAgICB0YXNrZGlyID0gb3MucGF0aC5qb2luKGJzZGlyLCBlLmRhdGEuZ2V0VmFyKCdQRicsIFRydWUpKQorICAgICAgICB3cml0ZV90YXNrX2RhdGEoInBhc3NlZCIsIG9zLnBhdGguam9pbih0YXNrZGlyLCBlLnRhc2spLCBkZXZpY2UsIGUpCisgICAgICAgIGlmIGUudGFzayA9PSAiZG9fcm9vdGZzIjoKKyAgICAgICAgICAgIGJzID0gb3MucGF0aC5qb2luKGJzZGlyLCAiYnVpbGRfc3RhdHMiKQorICAgICAgICAgICAgd2l0aCBvcGVuKGJzLCAiYSIpIGFzIGY6CisgICAgICAgICAgICAgICAgcm9vdGZzID0gZS5kYXRhLmdldFZhcignSU1BR0VfUk9PVEZTJywgVHJ1ZSkKKyAgICAgICAgICAgICAgICByb290ZnNfc2l6ZSA9IHN1YnByb2Nlc3MuUG9wZW4oWyJkdSIsICItc2giLCByb290ZnNdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQucmVhZCgpCisgICAgICAgICAgICAgICAgZi53cml0ZSgiVW5jb21wcmVzc2VkIFJvb3RmcyBzaXplOiAlcyIgJSByb290ZnNfc2l6ZSkKKworICAgIGVsaWYgaXNpbnN0YW5jZShlLCBiYi5idWlsZC5UYXNrRmFpbGVkKToKKyAgICAgICAgYm4gPSBnZXRfYm4oZSkKKyAgICAgICAgZGV2aWNlID0gZ2V0X2RldmljZShlKQorICAgICAgICBic2RpciA9IG9zLnBhdGguam9pbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0JBU0UnLCBUcnVlKSwgYm4pCisgICAgICAgIHRhc2tkaXIgPSBvcy5wYXRoLmpvaW4oYnNkaXIsIGUuZGF0YS5nZXRWYXIoJ1BGJywgVHJ1ZSkpCisgICAgICAgIHdyaXRlX3Rhc2tfZGF0YSgiZmFpbGVkIiwgb3MucGF0aC5qb2luKHRhc2tkaXIsIGUudGFzayksIGRldmljZSwgZSkKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgTGV0cyBtYWtlIHRoaW5ncyBlYXNpZXIgYW5kIHRlbGwgcGVvcGxlIHdoZXJlIHRoZSBidWlsZCBmYWlsZWQgaW4KKyAgICAgICAgIyBidWlsZF9zdGF0dXMuIFdlIGRvIHRoaXMgaGVyZSBiZWNhdXNlIEJ1aWxkQ29tcGxldGVkIHRyaWdnZXJzIG5vCisgICAgICAgICMgbWF0dGVyIHdoYXQgdGhlIHN0YXR1cyBvZiB0aGUgYnVpbGQgYWN0dWFsbHkgaXMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgIGJ1aWxkX3N0YXR1cyA9IG9zLnBhdGguam9pbihic2RpciwgImJ1aWxkX3N0YXRzIikKKyAgICAgICAgd2l0aCBvcGVuKGJ1aWxkX3N0YXR1cywgImEiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShlLmRhdGEuZXhwYW5kKCJGYWlsZWQgYXQ6ICR7UEZ9IGF0IHRhc2s6ICVzIFxuIiAlIGUudGFzaykpCit9CisKK2FkZGhhbmRsZXIgcnVuX2J1aWxkc3RhdHMKK3J1bl9idWlsZHN0YXRzW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRTdGFydGVkIGJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkIGJiLmJ1aWxkLlRhc2tTdGFydGVkIGJiLmJ1aWxkLlRhc2tTdWNjZWVkZWQgYmIuYnVpbGQuVGFza0ZhaWxlZCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY2NhY2hlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jY2FjaGUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2RjZTQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY2NhY2hlLmJiY2xhc3MKQEAgLTAsMCArMSw4IEBACitDQ0FDSEUgPSAiJHtAYmIudXRpbHMud2hpY2goZC5nZXRWYXIoJ1BBVEgnLCBUcnVlKSwgJ2NjYWNoZScpIGFuZCAnY2NhY2hlICd9IgorZXhwb3J0IENDQUNIRV9ESVIgPz0gIiR7VE1QRElSfS9jY2FjaGUvJHtNVUxUSU1BQ0hfSE9TVF9TWVN9LyR7UE59IgorQ0NBQ0hFX0RJU0FCTEVbdW5leHBvcnRdID0gIjEiCisKK2RvX2NvbmZpZ3VyZVtkaXJzXSA9KyAiJHtDQ0FDSEVfRElSfSIKK2RvX2tlcm5lbF9jb25maWdtZVtkaXJzXSA9KyAiJHtDQ0FDSEVfRElSfSIKKworZG9fY2xlYW5bY2xlYW5kaXJzXSArPSAiJHtDQ0FDSEVfRElSfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NocnBhdGguYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NocnBhdGguYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTE2MGFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY2hycGF0aC5iYmNsYXNzCkBAIC0wLDAgKzEsMTE3IEBACitDSFJQQVRIX0JJTiA/PSAiY2hycGF0aCIKK1BSRVBST0NFU1NfUkVMT0NBVEVfRElSUyA/PSAiIgorCitkZWYgcHJvY2Vzc19maWxlX2xpbnV4KGNtZCwgZnBhdGgsIHJvb3RkaXIsIGJhc2VwcmVmaXgsIHRtcGRpciwgZCk6CisgICAgaW1wb3J0IHN1YnByb2Nlc3MgYXMgc3ViCisKKyAgICBwID0gc3ViLlBvcGVuKFtjbWQsICctbCcsIGZwYXRoXSxzdGRvdXQ9c3ViLlBJUEUsc3RkZXJyPXN1Yi5QSVBFKQorICAgIGVyciwgb3V0ID0gcC5jb21tdW5pY2F0ZSgpCisgICAgIyBJZiByZXR1cm5lZCBzdWNjZXNmdWxseSwgcHJvY2VzcyBzdGRlcnIgZm9yIHJlc3VsdHMKKyAgICBpZiBwLnJldHVybmNvZGUgIT0gMDoKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIEhhbmRsZSBSVU5QQVRIIGFzIHdlbGwgYXMgUlBBVEgKKyAgICBlcnIgPSBlcnIucmVwbGFjZSgiUlVOUEFUSD0iLCJSUEFUSD0iKQorICAgICMgVGhyb3cgYXdheSBldmVyeXRoaW5nIG90aGVyIHRoYW4gdGhlIHJwYXRoIGxpc3QKKyAgICBjdXJyX3JwYXRoID0gZXJyLnBhcnRpdGlvbigiUlBBVEg9IilbMl0KKyAgICAjYmIubm90ZSgiQ3VycmVudCBycGF0aCBmb3IgJXMgaXMgJXMiICUgKGZwYXRoLCBjdXJyX3JwYXRoLnN0cmlwKCkpKQorICAgIHJwYXRocyA9IGN1cnJfcnBhdGguc3BsaXQoIjoiKQorICAgIG5ld19ycGF0aHMgPSBbXQorICAgIG1vZGlmaWVkID0gRmFsc2UKKyAgICBmb3IgcnBhdGggaW4gcnBhdGhzOgorICAgICAgICAjIElmIHJwYXRoIGlzIGFscmVhZHkgZHluYW1pYyBjb3B5IGl0IHRvIG5ld19ycGF0aCBhbmQgY29udGludWUKKyAgICAgICAgaWYgcnBhdGguZmluZCgiJE9SSUdJTiIpICE9IC0xOgorICAgICAgICAgICAgbmV3X3JwYXRocy5hcHBlbmQocnBhdGguc3RyaXAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHJwYXRoID0gIG9zLnBhdGgubm9ybXBhdGgocnBhdGgpCisgICAgICAgIGlmIGJhc2VwcmVmaXggbm90IGluIHJwYXRoIGFuZCB0bXBkaXIgbm90IGluIHJwYXRoOgorICAgICAgICAgICAgbmV3X3JwYXRocy5hcHBlbmQocnBhdGguc3RyaXAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIG5ld19ycGF0aHMuYXBwZW5kKCIkT1JJR0lOLyIgKyBvcy5wYXRoLnJlbHBhdGgocnBhdGguc3RyaXAoKSwgb3MucGF0aC5kaXJuYW1lKGZwYXRoLnJlcGxhY2Uocm9vdGRpciwgIi8iKSkpKQorICAgICAgICBtb2RpZmllZCA9IFRydWUKKworICAgICMgaWYgd2UgaGF2ZSBtb2RpZmllZCBzb21lIHJwYXRocyBjYWxsIGNocnBhdGggdG8gdXBkYXRlIHRoZSBiaW5hcnkKKyAgICBpZiBtb2RpZmllZDoKKyAgICAgICAgYXJncyA9ICI6Ii5qb2luKG5ld19ycGF0aHMpCisgICAgICAgICNiYi5ub3RlKCJTZXR0aW5nIHJwYXRoIGZvciAlcyB0byAlcyIgJShmcGF0aCwgYXJncykpCisgICAgICAgIHAgPSBzdWIuUG9wZW4oW2NtZCwgJy1yJywgYXJncywgZnBhdGhdLHN0ZG91dD1zdWIuUElQRSxzdGRlcnI9c3ViLlBJUEUpCisgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIGlmIHAucmV0dXJuY29kZSAhPSAwOgorICAgICAgICAgICAgYmIuZXJyb3IoIiVzOiBjaHJwYXRoIGNvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVkOlxuJXMlcyIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIHAucmV0dXJuY29kZSwgb3V0LCBlcnIpKQorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZAorCitkZWYgcHJvY2Vzc19maWxlX2RhcndpbihjbWQsIGZwYXRoLCByb290ZGlyLCBiYXNlcHJlZml4LCB0bXBkaXIsIGQpOgorICAgIGltcG9ydCBzdWJwcm9jZXNzIGFzIHN1YgorCisgICAgcCA9IHN1Yi5Qb3BlbihbZC5leHBhbmQoIiR7SE9TVF9QUkVGSVh9b3Rvb2wiKSwgJy1MJywgZnBhdGhdLHN0ZG91dD1zdWIuUElQRSxzdGRlcnI9c3ViLlBJUEUpCisgICAgZXJyLCBvdXQgPSBwLmNvbW11bmljYXRlKCkKKyAgICAjIElmIHJldHVybmVkIHN1Y2Nlc2Z1bGx5LCBwcm9jZXNzIHN0ZGVyciBmb3IgcmVzdWx0cworICAgIGlmIHAucmV0dXJuY29kZSAhPSAwOgorICAgICAgICByZXR1cm4KKyAgICBmb3IgbCBpbiBlcnIuc3BsaXQoIlxuIik6CisgICAgICAgIGlmICIoY29tcGF0aWJpbGl0eSIgbm90IGluIGw6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBycGF0aCA9IGwucGFydGl0aW9uKCIoY29tcGF0aWJpbGl0eSIpWzBdLnN0cmlwKCkKKyAgICAgICAgaWYgYmFzZXByZWZpeCBub3QgaW4gcnBhdGg6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIG5ld3BhdGggPSAiQGxvYWRlcl9wYXRoLyIgKyBvcy5wYXRoLnJlbHBhdGgocnBhdGgsIG9zLnBhdGguZGlybmFtZShmcGF0aC5yZXBsYWNlKHJvb3RkaXIsICIvIikpKQorICAgICAgICBwID0gc3ViLlBvcGVuKFtkLmV4cGFuZCgiJHtIT1NUX1BSRUZJWH1pbnN0YWxsX25hbWVfdG9vbCIpLCAnLWNoYW5nZScsIHJwYXRoLCBuZXdwYXRoLCBmcGF0aF0sc3Rkb3V0PXN1Yi5QSVBFLHN0ZGVycj1zdWIuUElQRSkKKyAgICAgICAgZXJyLCBvdXQgPSBwLmNvbW11bmljYXRlKCkKKworZGVmIHByb2Nlc3NfZGlyIChyb290ZGlyLCBkaXJlY3RvcnksIGQpOgorICAgIGltcG9ydCBzdGF0CisKKyAgICByb290ZGlyID0gb3MucGF0aC5ub3JtcGF0aChyb290ZGlyKQorICAgIGNtZCA9IGQuZXhwYW5kKCcke0NIUlBBVEhfQklOfScpCisgICAgdG1wZGlyID0gb3MucGF0aC5ub3JtcGF0aChkLmdldFZhcignVE1QRElSJywgRmFsc2UpKQorICAgIGJhc2VwcmVmaXggPSBvcy5wYXRoLm5vcm1wYXRoKGQuZXhwYW5kKCcke2Jhc2VfcHJlZml4fScpKQorICAgIGhvc3RvcyA9IGQuZ2V0VmFyKCJIT1NUX09TIiwgVHJ1ZSkKKworICAgICNiYi5kZWJ1ZygiQ2hlY2tpbmcgJXMgZm9yIGJpbmFyaWVzIHRvIHByb2Nlc3MiICUgZGlyZWN0b3J5KQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXJlY3RvcnkpOgorICAgICAgICByZXR1cm4KKworICAgIGlmICJsaW51eCIgaW4gaG9zdG9zOgorICAgICAgICBwcm9jZXNzX2ZpbGUgPSBwcm9jZXNzX2ZpbGVfbGludXgKKyAgICBlbGlmICJkYXJ3aW4iIGluIGhvc3RvczoKKyAgICAgICAgcHJvY2Vzc19maWxlID0gcHJvY2Vzc19maWxlX2RhcndpbgorICAgIGVsc2U6CisgICAgICAgICMgUmVsb2NhdGlvbnMgbm90IHN1cHBvcnRlZAorICAgICAgICByZXR1cm4KKworICAgIGRpcnMgPSBvcy5saXN0ZGlyKGRpcmVjdG9yeSkKKyAgICBmb3IgZmlsZSBpbiBkaXJzOgorICAgICAgICBmcGF0aCA9IGRpcmVjdG9yeSArICIvIiArIGZpbGUKKyAgICAgICAgZnBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKGZwYXRoKQorICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmcGF0aCk6CisgICAgICAgICAgICAjIFNraXAgc3ltbGlua3MKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmcGF0aCk6CisgICAgICAgICAgICBwcm9jZXNzX2Rpcihyb290ZGlyLCBmcGF0aCwgZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICNiYi5ub3RlKCJUZXN0aW5nICVzIGZvciByZWxvY2F0YWJpbGl0eSIgJSBmcGF0aCkKKworICAgICAgICAgICAgIyBXZSBuZWVkIHJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zIGZvciBjaHJwYXRoLCBpZiB3ZSBkb24ndCBoYXZlCisgICAgICAgICAgICAjIHRoZW0gdGhlbiBzZXQgdGhlbSB0ZW1wb3JhcmlseS4gVGFrZSBhIGNvcHkgb2YgdGhlIGZpbGVzCisgICAgICAgICAgICAjIHBlcm1pc3Npb25zIHNvIHRoYXQgd2UgY2FuIHJlc3RvcmUgdGhlbSBhZnRlcndhcmRzLgorICAgICAgICAgICAgcGVybXMgPSBvcy5zdGF0KGZwYXRoKVtzdGF0LlNUX01PREVdCisgICAgICAgICAgICBpZiBvcy5hY2Nlc3MoZnBhdGgsIG9zLldfT0t8b3MuUl9PSyk6CisgICAgICAgICAgICAgICAgcGVybXMgPSBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgVGVtcG9yYXJpbHkgbWFrZSB0aGUgZmlsZSB3cml0ZWFibGUgc28gd2UgY2FuIGNocnBhdGggaXQKKyAgICAgICAgICAgICAgICBvcy5jaG1vZChmcGF0aCwgcGVybXN8c3RhdC5TX0lSV1hVKQorICAgICAgICAgICAgcHJvY2Vzc19maWxlKGNtZCwgZnBhdGgsIHJvb3RkaXIsIGJhc2VwcmVmaXgsIHRtcGRpciwgZCkKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIHBlcm1zOgorICAgICAgICAgICAgICAgIG9zLmNobW9kKGZwYXRoLCBwZXJtcykKKworZGVmIHJwYXRoX3JlcGxhY2UgKHBhdGgsIGQpOgorICAgIGJpbmRpcnMgPSBkLmV4cGFuZCgiJHtiaW5kaXJ9ICR7c2JpbmRpcn0gJHtiYXNlX3NiaW5kaXJ9ICR7YmFzZV9iaW5kaXJ9ICR7bGliZGlyfSAke2Jhc2VfbGliZGlyfSAke2xpYmV4ZWNkaXJ9ICR7UFJFUFJPQ0VTU19SRUxPQ0FURV9ESVJTfSIpLnNwbGl0KCkKKworICAgIGZvciBiaW5kaXIgaW4gYmluZGlyczoKKyAgICAgICAgI2JiLm5vdGUgKCJQcm9jZXNzaW5nIGRpcmVjdG9yeSAiICsgYmluZGlyKQorICAgICAgICBkaXJlY3RvcnkgPSBwYXRoICsgIi8iICsgYmluZGlyCisgICAgICAgIHByb2Nlc3NfZGlyIChwYXRoLCBkaXJlY3RvcnksIGQpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NsdXR0ZXIuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NsdXR0ZXIuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjc0MDdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY2x1dHRlci5iYmNsYXNzCkBAIC0wLDAgKzEsMjIgQEAKKworZGVmIGdldF9taW5vcl9kaXIodik6CisgICAgaW1wb3J0IHJlCisgICAgbSA9IHJlLm1hdGNoKCJeKFswLTldKylcLihbMC05XSspIiwgdikKKyAgICByZXR1cm4gIiVzLiVzIiAlIChtLmdyb3VwKDEpLCBtLmdyb3VwKDIpKQorCitkZWYgZ2V0X3JlYWxfbmFtZShuKToKKyAgICBpbXBvcnQgcmUKKyAgICBtID0gcmUubWF0Y2goIl4oW2Etel0rKC1bYS16XSspPykoLVswLTldK1wuWzAtOV0rKT8iLCBuKQorICAgIHJldHVybiAiJXMiICUgKG0uZ3JvdXAoMSkpCisKK1ZFUk1JTk9SID0gIiR7QGdldF9taW5vcl9kaXIoIiR7UFZ9Iil9IgorUkVBTE5BTUUgPSAiJHtAZ2V0X3JlYWxfbmFtZSgiJHtCUE59Iil9IgorCitDTFVUVEVSX1NSQ19GVFAgPSAiJHtHTk9NRV9NSVJST1J9LyR7UkVBTE5BTUV9LyR7VkVSTUlOT1J9LyR7UkVBTE5BTUV9LSR7UFZ9LnRhci54ejtuYW1lPWFyY2hpdmUiCisKK0NMVVRURVJfU1JDX0dJVCA9ICJnaXQ6Ly9naXQuZ25vbWUub3JnLyR7UkVBTE5BTUV9IgorCitTUkNfVVJJID0gIiR7Q0xVVFRFUl9TUkNfRlRQfSIKK1MgPSAiJHtXT1JLRElSfS8ke1JFQUxOQU1FfS0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGd0ay1kb2MgZ2V0dGV4dApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY21ha2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NtYWtlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUzY2MwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NtYWtlLmJiY2xhc3MKQEAgLTAsMCArMSwxMzggQEAKKyMgUGF0aCB0byB0aGUgQ01ha2UgZmlsZSB0byBwcm9jZXNzLgorT0VDTUFLRV9TT1VSQ0VQQVRIID89ICIke1N9IgorCitERVBFTkRTX3ByZXBlbmQgPSAiY21ha2UtbmF0aXZlICIKK0IgPSAiJHtXT1JLRElSfS9idWlsZCIKKworIyBXZSBuZWVkIHRvIHVuc2V0IENDQUNIRSBvdGhlcndpc2UgY21ha2UgZ2V0cyB0b28gY29uZnVzZWQKK0NDQUNIRSA9ICIiCisKKyMgV2Ugd2FudCB0aGUgc3RhZ2luZyBhbmQgaW5zdGFsbGluZyBmdW5jdGlvbnMgZnJvbSBhdXRvdG9vbHMKK2luaGVyaXQgYXV0b3Rvb2xzCisKKyMgQy9DKysgQ29tcGlsZXIgKHdpdGhvdXQgY3B1IGFyY2gvdHVuZSBhcmd1bWVudHMpCitPRUNNQUtFX0NfQ09NUElMRVIgPz0gImBlY2hvICR7Q0N9IHwgc2VkICdzL15cKFteIF0qXCkuKi9cMS8nYCIKK09FQ01BS0VfQ1hYX0NPTVBJTEVSID89ICJgZWNobyAke0NYWH0gfCBzZWQgJ3MvXlwoW14gXSpcKS4qL1wxLydgIgorT0VDTUFLRV9BUiA/PSAiJHtBUn0iCisKKyMgQ29tcGlsZXIgZmxhZ3MKK09FQ01BS0VfQ19GTEFHUyA/PSAiJHtIT1NUX0NDX0FSQ0h9ICR7VE9PTENIQUlOX09QVElPTlN9ICR7Q0ZMQUdTfSIKK09FQ01BS0VfQ1hYX0ZMQUdTID89ICIke0hPU1RfQ0NfQVJDSH0gJHtUT09MQ0hBSU5fT1BUSU9OU30gJHtDWFhGTEFHU30iCitPRUNNQUtFX0NfRkxBR1NfUkVMRUFTRSA/PSAiJHtTRUxFQ1RFRF9PUFRJTUlaQVRJT059ICR7Q0ZMQUdTfSAtRE5ERUJVRyIKK09FQ01BS0VfQ1hYX0ZMQUdTX1JFTEVBU0UgPz0gIiR7U0VMRUNURURfT1BUSU1JWkFUSU9OfSAke0NYWEZMQUdTfSAtRE5ERUJVRyIKK09FQ01BS0VfQ19MSU5LX0ZMQUdTID89ICIke0hPU1RfQ0NfQVJDSH0gJHtUT09MQ0hBSU5fT1BUSU9OU30gJHtDUFBGTEFHU30gJHtMREZMQUdTfSIKK09FQ01BS0VfQ1hYX0xJTktfRkxBR1MgPz0gIiR7SE9TVF9DQ19BUkNIfSAke1RPT0xDSEFJTl9PUFRJT05TfSAke0NYWEZMQUdTfSAke0xERkxBR1N9IgorCitPRUNNQUtFX1JQQVRIID89ICIiCitPRUNNQUtFX1BFUkxOQVRJVkVfRElSID8/PSAiIgorT0VDTUFLRV9FWFRSQV9ST09UX1BBVEggPz0gIiIKKworT0VDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX1BST0dSQU0gPSAiT05MWSIKK09FQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9QUk9HUkFNX2NsYXNzLW5hdGl2ZSA9ICJCT1RIIgorCisjIENNYWtlIGV4cGVjdHMgdGFyZ2V0IGFyY2hpdGVjdHVyZXMgaW4gdGhlIGZvcm1hdCBvZiB1bmFtZSgyKSwKKyMgd2hpY2ggZG8gbm90IGFsd2F5cyBtYXRjaCBUQVJHRVRfQVJDSCwgc28gYWxsIHRoZSBuZWNlc3NhcnkKKyMgY29udmVyc2lvbnMgc2hvdWxkIGhhcHBlbiBoZXJlLgorZGVmIG1hcF90YXJnZXRfYXJjaF90b191bmFtZV9hcmNoKHRhcmdldF9hcmNoKToKKyAgICBpZiB0YXJnZXRfYXJjaCA9PSAicG93ZXJwYyI6CisgICAgICAgIHJldHVybiAicHBjIgorICAgIGlmIHRhcmdldF9hcmNoID09ICJwb3dlcnBjNjQiOgorICAgICAgICByZXR1cm4gInBwYzY0IgorICAgIHJldHVybiB0YXJnZXRfYXJjaAorCitjbWFrZV9kb19nZW5lcmF0ZV90b29sY2hhaW5fZmlsZSgpIHsKKwljYXQgPiAke1dPUktESVJ9L3Rvb2xjaGFpbi5jbWFrZSA8PEVPRgorIyBDTWFrZSBzeXN0ZW0gbmFtZSBtdXN0IGJlIHNvbWV0aGluZyBsaWtlICJMaW51eCIuCisjIFRoaXMgaXMgaW1wb3J0YW50IGZvciBjcm9zcy1jb21waWxpbmcuCitzZXQoIENNQUtFX1NZU1RFTV9OQU1FIGBlY2hvICR7VEFSR0VUX09TfSB8IHNlZCAtZSAncy9eLi9cdSYvJyAtZSAncy9eXChMaW51eFwpLiovXDEvJ2AgKQorc2V0KCBDTUFLRV9TWVNURU1fUFJPQ0VTU09SICR7QG1hcF90YXJnZXRfYXJjaF90b191bmFtZV9hcmNoKGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpKX0gKQorc2V0KCBDTUFLRV9DX0NPTVBJTEVSICR7T0VDTUFLRV9DX0NPTVBJTEVSfSApCitzZXQoIENNQUtFX0NYWF9DT01QSUxFUiAke09FQ01BS0VfQ1hYX0NPTVBJTEVSfSApCitzZXQoIENNQUtFX0FTTV9DT01QSUxFUiAke09FQ01BS0VfQ19DT01QSUxFUn0gKQorc2V0KCBDTUFLRV9BUiAke09FQ01BS0VfQVJ9IENBQ0hFIEZJTEVQQVRIICJBcmNoaXZlciIgKQorc2V0KCBDTUFLRV9DX0ZMQUdTICIke09FQ01BS0VfQ19GTEFHU30iIENBQ0hFIFNUUklORyAiQ0ZMQUdTIiApCitzZXQoIENNQUtFX0NYWF9GTEFHUyAiJHtPRUNNQUtFX0NYWF9GTEFHU30iIENBQ0hFIFNUUklORyAiQ1hYRkxBR1MiICkKK3NldCggQ01BS0VfQVNNX0ZMQUdTICIke09FQ01BS0VfQ19GTEFHU30iIENBQ0hFIFNUUklORyAiQVNNIEZMQUdTIiApCitzZXQoIENNQUtFX0NfRkxBR1NfUkVMRUFTRSAiJHtPRUNNQUtFX0NfRkxBR1NfUkVMRUFTRX0iIENBQ0hFIFNUUklORyAiQ0ZMQUdTIGZvciByZWxlYXNlIiApCitzZXQoIENNQUtFX0NYWF9GTEFHU19SRUxFQVNFICIke09FQ01BS0VfQ1hYX0ZMQUdTX1JFTEVBU0V9IiBDQUNIRSBTVFJJTkcgIkNYWEZMQUdTIGZvciByZWxlYXNlIiApCitzZXQoIENNQUtFX0FTTV9GTEFHU19SRUxFQVNFICIke09FQ01BS0VfQ19GTEFHU19SRUxFQVNFfSIgQ0FDSEUgU1RSSU5HICJBU00gRkxBR1MgZm9yIHJlbGVhc2UiICkKK3NldCggQ01BS0VfQ19MSU5LX0ZMQUdTICIke09FQ01BS0VfQ19MSU5LX0ZMQUdTfSIgQ0FDSEUgU1RSSU5HICJMREZMQUdTIiApCitzZXQoIENNQUtFX0NYWF9MSU5LX0ZMQUdTICIke09FQ01BS0VfQ1hYX0xJTktfRkxBR1N9IiBDQUNIRSBTVFJJTkcgIkxERkxBR1MiICkKKworIyBvbmx5IHNlYXJjaCBpbiB0aGUgcGF0aHMgcHJvdmlkZWQgc28gY21ha2UgZG9lc250IHBpY2sKKyMgdXAgbGlicmFyaWVzIGFuZCB0b29scyBmcm9tIHRoZSBuYXRpdmUgYnVpbGQgbWFjaGluZQorc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSCAke1NUQUdJTkdfRElSX0hPU1R9ICR7U1RBR0lOR19ESVJfTkFUSVZFfSAke0NST1NTX0RJUn0gJHtPRUNNQUtFX1BFUkxOQVRJVkVfRElSfSAke09FQ01BS0VfRVhUUkFfUk9PVF9QQVRIfSAke0VYVEVSTkFMX1RPT0xDSEFJTn0pCitzZXQoIENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfUEFDS0FHRSBPTkxZICkKK3NldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9QUk9HUkFNICR7T0VDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX1BST0dSQU19ICkKK3NldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9MSUJSQVJZIE9OTFkgKQorc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX0lOQ0xVREUgT05MWSApCisKKyMgVXNlIHF0LmNvbmYgc2V0dGluZ3MKK3NldCggRU5We1FUX0NPTkZfUEFUSH0gJHtXT1JLRElSfS9xdC5jb25mICkKKworIyBXZSBuZWVkIHRvIHNldCB0aGUgcnBhdGggdG8gdGhlIGNvcnJlY3QgZGlyZWN0b3J5IGFzIGNtYWtlIGRvZXMgbm90IHByb3ZpZGUgYW55CisjIGRpcmVjdG9yeSBhcyBycGF0aCBieSBkZWZhdWx0CitzZXQoIENNQUtFX0lOU1RBTExfUlBBVEggJHtPRUNNQUtFX1JQQVRIfSApCisKKyMgVXNlIG5hdGl2ZSBjbWFrZSBtb2R1bGVzCitsaXN0KEFQUEVORCBDTUFLRV9NT0RVTEVfUEFUSCAiJHtTVEFHSU5HX0RBVEFESVJ9L2NtYWtlL01vZHVsZXMvIikKKworIyBhZGQgZm9yIG5vbiAvdXNyL2xpYiBsaWJkaXIsIGUuZy4gL3Vzci9saWI2NAorc2V0KCBDTUFLRV9MSUJSQVJZX1BBVEggJHtsaWJkaXJ9ICR7YmFzZV9saWJkaXJ9KQorCitFT0YKK30KKworYWRkdGFzayBnZW5lcmF0ZV90b29sY2hhaW5fZmlsZSBhZnRlciBkb19wYXRjaCBiZWZvcmUgZG9fY29uZmlndXJlCisKK2NtYWtlX2RvX2NvbmZpZ3VyZSgpIHsKKwlpZiBbICIke09FQ01BS0VfQlVJTERQQVRIfSIgXTsgdGhlbgorCQliYm5vdGUgImNtYWtlLmJiY2xhc3Mgbm8gbG9uZ2VyIHVzZXMgT0VDTUFLRV9CVUlMRFBBVEguICBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgbm93IG91dC1vZi10cmVlIGJ1aWxkcyB3aXRoIEI9V09SS0RJUi9idWlsZC4iCisJZmkKKworCWlmIFsgIiR7U30iICE9ICIke0J9IiBdOyB0aGVuCisJCXJtIC1yZiAke0J9CisJCW1rZGlyIC1wICR7Qn0KKwkJY2QgJHtCfQorCWVsc2UKKwkJZmluZCAke0J9IC1uYW1lIENNYWtlRmlsZXMgLW9yIC1uYW1lIE1ha2VmaWxlIC1vciAtbmFtZSBjbWFrZV9pbnN0YWxsLmNtYWtlIC1vciAtbmFtZSBDTWFrZUNhY2hlLnR4dCAtZGVsZXRlCisJZmkKKworCSMgSnVzdCBsaWtlIGF1dG90b29scyBjbWFrZSBjYW4gdXNlIGEgc2l0ZSBmaWxlIHRvIGNhY2hlIHJlc3VsdCB0aGF0IG5lZWQgZ2VuZXJhdGVkIGJpbmFyaWVzIHRvIHJ1bgorCWlmIFsgLWUgJHtXT1JLRElSfS9zaXRlLWZpbGUuY21ha2UgXSA7IHRoZW4KKwkJT0VDTUFLRV9TSVRFRklMRT0iIC1DICR7V09SS0RJUn0vc2l0ZS1maWxlLmNtYWtlIgorCWVsc2UKKwkJT0VDTUFLRV9TSVRFRklMRT0iIgorCWZpCisKKwljbWFrZSBcCisJICAke09FQ01BS0VfU0lURUZJTEV9IFwKKwkgICR7T0VDTUFLRV9TT1VSQ0VQQVRIfSBcCisJICAtRENNQUtFX0lOU1RBTExfUFJFRklYOlBBVEg9JHtwcmVmaXh9IFwKKwkgIC1EQ01BS0VfSU5TVEFMTF9CSU5ESVI6UEFUSD0ke2JpbmRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX1NCSU5ESVI6UEFUSD0ke3NiaW5kaXJ9IFwKKwkgIC1EQ01BS0VfSU5TVEFMTF9MSUJFWEVDRElSOlBBVEg9JHtsaWJleGVjZGlyfSBcCisJICAtRENNQUtFX0lOU1RBTExfU1lTQ09ORkRJUjpQQVRIPSR7c3lzY29uZmRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX1NIQVJFRFNUQVRFRElSOlBBVEg9JHtzaGFyZWRzdGF0ZWRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX0xPQ0FMU1RBVEVESVI6UEFUSD0ke2xvY2Fsc3RhdGVkaXJ9IFwKKwkgIC1EQ01BS0VfSU5TVEFMTF9MSUJESVI6UEFUSD0ke2xpYmRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX0lOQ0xVREVESVI6UEFUSD0ke2luY2x1ZGVkaXJ9IFwKKwkgIC1EQ01BS0VfSU5TVEFMTF9EQVRBUk9PVERJUjpQQVRIPSR7ZGF0YWRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX1NPX05PX0VYRT0wIFwKKwkgIC1EQ01BS0VfVE9PTENIQUlOX0ZJTEU9JHtXT1JLRElSfS90b29sY2hhaW4uY21ha2UgXAorCSAgLURDTUFLRV9WRVJCT1NFX01BS0VGSUxFPTEgXAorCSAgJHtFWFRSQV9PRUNNQUtFfSBcCisJICAtV25vLWRldgorfQorCitjbWFrZV9kb19jb21waWxlKCkgIHsKKwljZCAke0J9CisJYmFzZV9kb19jb21waWxlCit9CisKK2NtYWtlX2RvX2luc3RhbGwoKSB7CisJY2QgJHtCfQorCWF1dG90b29sc19kb19pbnN0YWxsCit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29uZmlndXJlIGRvX2NvbXBpbGUgZG9faW5zdGFsbCBkb19nZW5lcmF0ZV90b29sY2hhaW5fZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY21sMS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY21sMS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1Y2Y1ODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jbWwxLmJiY2xhc3MKQEAgLTAsMCArMSw3NSBAQAorY21sMV9kb19jb25maWd1cmUoKSB7CisJc2V0IC1lCisJdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MKKwlvZV9ydW5tYWtlIG9sZGNvbmZpZworfQorCitFWFBPUlRfRlVOQ1RJT05TIGRvX2NvbmZpZ3VyZQorYWRkdGFzayBjb25maWd1cmUgYWZ0ZXIgZG9fdW5wYWNrIGRvX3BhdGNoIGJlZm9yZSBkb19jb21waWxlCisKK2luaGVyaXQgdGVybWluYWwKKworT0VfVEVSTUlOQUxfRVhQT1JUUyArPSAiSE9TVF9FWFRSQUNGTEFHUyBIT1NUTERGTEFHUyBURVJNSU5GTyBDUk9TU19DVVJTRVNfTElCIENST1NTX0NVUlNFU19JTkMiCitIT1NUX0VYVFJBQ0ZMQUdTID0gIiR7QlVJTERfQ0ZMQUdTfSAke0JVSUxEX0xERkxBR1N9IgorSE9TVExERkxBR1MgPSAiJHtCVUlMRF9MREZMQUdTfSIKK0NST1NTX0NVUlNFU19MSUIgPSAiLWxuY3Vyc2VzIC1sdGluZm8iCitDUk9TU19DVVJTRVNfSU5DID0gJy1EQ1VSU0VTX0xPQz0iPGN1cnNlcy5oPiInCitURVJNSU5GTyA9ICIke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L3Rlcm1pbmZvIgorCitLQ09ORklHX0NPTkZJR19DT01NQU5EID8/PSAibWVudWNvbmZpZyIKK3B5dGhvbiBkb19tZW51Y29uZmlnKCkgeworICAgIGltcG9ydCBzaHV0aWwKKworICAgIHRyeToKKyAgICAgICAgbXRpbWUgPSBvcy5wYXRoLmdldG10aW1lKCIuY29uZmlnIikKKyAgICAgICAgc2h1dGlsLmNvcHkoIi5jb25maWciLCAiLmNvbmZpZy5vcmlnIikKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgbXRpbWUgPSAwCisKKyAgICBvZV90ZXJtaW5hbCgiJHtTSEVMTH0gLWMgXCJtYWtlICR7S0NPTkZJR19DT05GSUdfQ09NTUFORH07IGlmIFsgXCQ/IC1uZSAwIF07IHRoZW4gZWNobyAnQ29tbWFuZCBmYWlsZWQuJzsgcHJpbnRmICdQcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlLi4uICc7IHJlYWQgcjsgZmlcIiIsICcke1BOfSBDb25maWd1cmF0aW9uJywgZCkKKworICAgICMgRklYTUUgdGhpcyBjaGVjayBjYW4gYmUgcmVtb3ZlZCB3aGVuIHRoZSBtaW5pbXVtIGJpdGJha2UgdmVyc2lvbiBoYXMgYmVlbiBidW1wZWQKKyAgICBpZiBoYXNhdHRyKGJiLmJ1aWxkLCAnd3JpdGVfdGFpbnQnKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmV3bXRpbWUgPSBvcy5wYXRoLmdldG10aW1lKCIuY29uZmlnIikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBuZXdtdGltZSA9IDAKKworICAgICAgICBpZiBuZXdtdGltZSA+IG10aW1lOgorICAgICAgICAgICAgYmIubm90ZSgiQ29uZmlndXJhdGlvbiBjaGFuZ2VkLCByZWNvbXBpbGUgd2lsbCBiZSBmb3JjZWQiKQorICAgICAgICAgICAgYmIuYnVpbGQud3JpdGVfdGFpbnQoJ2RvX2NvbXBpbGUnLCBkKQorfQorZG9fbWVudWNvbmZpZ1tkZXBlbmRzXSArPSAibmN1cnNlcy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK2RvX21lbnVjb25maWdbbm9zdGFtcF0gPSAiMSIKK2FkZHRhc2sgbWVudWNvbmZpZyBhZnRlciBkb19jb25maWd1cmUKKworcHl0aG9uIGRvX2RpZmZjb25maWcoKSB7CisgICAgaW1wb3J0IHNodXRpbAorICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIGZyYWdtZW50ID0gd29ya2RpciArICcvZnJhZ21lbnQuY2ZnJworICAgIGNvbmZpZ29yaWcgPSAnLmNvbmZpZy5vcmlnJworICAgIGNvbmZpZyA9ICcuY29uZmlnJworCisgICAgdHJ5OgorICAgICAgICBtZDVuZXdjb25maWcgPSBiYi51dGlscy5tZDVfZmlsZShjb25maWdvcmlnKQorICAgICAgICBtZDVjb25maWcgPSBiYi51dGlscy5tZDVfZmlsZShjb25maWcpCisgICAgICAgIGlzZGlmZiA9IG1kNW5ld2NvbmZpZyAhPSBtZDVjb25maWcKKyAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBiYi5mYXRhbCgiTm8gY29uZmlnIGZpbGVzIGZvdW5kLiBEaWQgeW91IGRvIG1lbnVjb25maWcgP1xuJXMiICUgZSkKKworICAgIGlmIGlzZGlmZjoKKyAgICAgICAgc3RhdGVtZW50ID0gJ2RpZmYgLS11bmNoYW5nZWQtbGluZS1mb3JtYXQ9IC0tb2xkLWxpbmUtZm9ybWF0PSAtLW5ldy1saW5lLWZvcm1hdD0iJUwiICcgKyBjb25maWdvcmlnICsgJyAnICsgY29uZmlnICsgJz4nICsgZnJhZ21lbnQKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKHN0YXRlbWVudCwgc2hlbGw9VHJ1ZSkKKworICAgICAgICBzaHV0aWwuY29weShjb25maWdvcmlnLCBjb25maWcpCisKKyAgICAgICAgYmIucGxhaW4oIkNvbmZpZyBmcmFnbWVudCBoYXMgYmVlbiBkdW1wZWQgaW50bzpcbiAlcyIgJSBmcmFnbWVudCkKKyAgICBlbHNlOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmcmFnbWVudCk6CisgICAgICAgICAgICBvcy51bmxpbmsoZnJhZ21lbnQpCit9CisKK2RvX2RpZmZjb25maWdbbm9zdGFtcF0gPSAiMSIKK2FkZHRhc2sgZGlmZmNvbmZpZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY29tcHJlc3NfZG9jLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jb21wcmVzc19kb2MuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjU4ZDgyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY29tcHJlc3NfZG9jLmJiY2xhc3MKQEAgLTAsMCArMSwyNjAgQEAKKyMgQ29tcHJlc3MgbWFuIHBhZ2VzIGluICR7bWFuZGlyfSBhbmQgaW5mbyBwYWdlcyBpbiAke2luZm9kaXJ9CisjCisjIDEuIFRoZSBkb2Mgd2lsbCBiZSBjb21wcmVzc2VkIHRvIGd6IGZvcm1hdCBieSBkZWZhdWx0LgorIworIyAyLiBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgY29ycmVjdCB0aGUgY29tcHJlc3NlZCBkb2Mgd2hpY2ggaXMgbm90CisjIGluICR7RE9DX0NPTVBSRVNTfSBidXQgaW4gJHtET0NfQ09NUFJFU1NfTElTVH0gdG8gdGhlIGZvcm1hdAorIyBvZiAke0RPQ19DT01QUkVTU30gcG9saWN5CisjCisjIDMuIEl0IGlzIGVhc3kgdG8gYWRkIGEgbmV3IHR5cGUgY29tcHJlc3Npb24gYnkgZWRpdGluZworIyBsb2NhbC5jb25mLCBzdWNoIGFzOgorIyBET0NfQ09NUFJFU1NfTElTVF9hcHBlbmQgPSAnIGFiYycKKyMgRE9DX0NPTVBSRVNTID0gJ2FiYycKKyMgRE9DX0NPTVBSRVNTX0NNRFthYmNdID0gJ2FiYyBjb21wcmVzcyBjbWQgKioqJworIyBET0NfREVDT01QUkVTU19DTURbYWJjXSA9ICdhYmMgZGVjb21wcmVzcyBjbWQgKioqJworCisjIEFsbCBzdXBwb3J0ZWQgY29tcHJlc3Npb24gcG9saWN5CitET0NfQ09NUFJFU1NfTElTVCA/PSAiZ3ogeHogYnoyIgorCisjIENvbXByZXNzaW9uIHBvbGljeSwgbXVzdCBiZSBvbmUgb2YgJHtET0NfQ09NUFJFU1NfTElTVH0KK0RPQ19DT01QUkVTUyA/PSAiZ3oiCisKKyMgQ29tcHJlc3Npb24gc2hlbGwgY29tbWFuZAorRE9DX0NPTVBSRVNTX0NNRFtnel0gPz0gJ2d6aXAgLXYgLTkgLW4nCitET0NfQ09NUFJFU1NfQ01EW2J6Ml0gPz0gImJ6aXAyIC12IC05IgorRE9DX0NPTVBSRVNTX0NNRFt4el0gPz0gInh6IC12IgorCisjIERlY29tcHJlc3Npb24gc2hlbGwgY29tbWFuZAorRE9DX0RFQ09NUFJFU1NfQ01EW2d6XSA/PSAnZ3VuemlwIC12JworRE9DX0RFQ09NUFJFU1NfQ01EW2J6Ml0gPz0gImJ1bnppcDIgLXYiCitET0NfREVDT01QUkVTU19DTURbeHpdID89ICJ1bnh6IC12IgorCitQQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1MgKz0gInBhY2thZ2VfZG9fY29tcHJlc3NfZG9jIGNvbXByZXNzX2RvY191cGRhdGVhbHRlcm5hdGl2ZXMiCitweXRob24gcGFja2FnZV9kb19jb21wcmVzc19kb2MoKSB7CisgICAgY29tcHJlc3NfbW9kZSA9IGQuZ2V0VmFyKCdET0NfQ09NUFJFU1MnLCBUcnVlKQorICAgIGNvbXByZXNzX2xpc3QgPSAoZC5nZXRWYXIoJ0RPQ19DT01QUkVTU19MSVNUJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkKKyAgICBpZiBjb21wcmVzc19tb2RlIG5vdCBpbiBjb21wcmVzc19saXN0OgorICAgICAgICBiYi5mYXRhbCgnQ29tcHJlc3Npb24gcG9saWN5ICVzIG5vdCBzdXBwb3J0ZWQgKG5vdCBsaXN0ZWQgaW4gJXMpXG4nICUgKGNvbXByZXNzX21vZGUsIGNvbXByZXNzX2xpc3QpKQorCisgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKyAgICBjb21wcmVzc19jbWRzID0ge30KKyAgICBkZWNvbXByZXNzX2NtZHMgPSB7fQorICAgIGZvciBtb2RlIGluIGNvbXByZXNzX2xpc3Q6CisgICAgICAgIGNvbXByZXNzX2NtZHNbbW9kZV0gPSBkLmdldFZhckZsYWcoJ0RPQ19DT01QUkVTU19DTUQnLCBtb2RlKQorICAgICAgICBkZWNvbXByZXNzX2NtZHNbbW9kZV0gPSBkLmdldFZhckZsYWcoJ0RPQ19ERUNPTVBSRVNTX0NNRCcsIG1vZGUpCisKKyAgICBtYW5kaXIgPSBvcy5wYXRoLmFic3BhdGgoZHZhciArIG9zLnNlcCArIGQuZ2V0VmFyKCJtYW5kaXIiLCBUcnVlKSkKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhtYW5kaXIpOgorICAgICAgICAjIERlY29tcHJlc3MgZG9jIGZpbGVzIHdoaWNoIGZvcm1hdCBpcyBub3QgY29tcHJlc3NfbW9kZQorICAgICAgICBkZWNvbXByZXNzX2RvYyhtYW5kaXIsIGNvbXByZXNzX21vZGUsIGRlY29tcHJlc3NfY21kcykKKyAgICAgICAgY29tcHJlc3NfZG9jKG1hbmRpciwgY29tcHJlc3NfbW9kZSwgY29tcHJlc3NfY21kcykKKworICAgIGluZm9kaXIgPSBvcy5wYXRoLmFic3BhdGgoZHZhciArIG9zLnNlcCArIGQuZ2V0VmFyKCJpbmZvZGlyIiwgVHJ1ZSkpCisgICAgaWYgb3MucGF0aC5leGlzdHMoaW5mb2Rpcik6CisgICAgICAgICMgRGVjb21wcmVzcyBkb2MgZmlsZXMgd2hpY2ggZm9ybWF0IGlzIG5vdCBjb21wcmVzc19tb2RlCisgICAgICAgIGRlY29tcHJlc3NfZG9jKGluZm9kaXIsIGNvbXByZXNzX21vZGUsIGRlY29tcHJlc3NfY21kcykKKyAgICAgICAgY29tcHJlc3NfZG9jKGluZm9kaXIsIGNvbXByZXNzX21vZGUsIGNvbXByZXNzX2NtZHMpCit9CisKK2RlZiBfZ2V0X2NvbXByZXNzX2Zvcm1hdChmaWxlLCBjb21wcmVzc19mb3JtYXRfbGlzdCk6CisgICAgZm9yIGNvbXByZXNzX2Zvcm1hdCBpbiBjb21wcmVzc19mb3JtYXRfbGlzdDoKKyAgICAgICAgY29tcHJlc3Nfc3VmZml4ID0gJy4nICsgY29tcHJlc3NfZm9ybWF0CisgICAgICAgIGlmIGZpbGUuZW5kc3dpdGgoY29tcHJlc3Nfc3VmZml4KToKKyAgICAgICAgICAgIHJldHVybiBjb21wcmVzc19mb3JtYXQKKworICAgIHJldHVybiAnJworCisjIENvbGxlY3QgaGFyZGxpbmtzIHRvIGRpY3QsIGVhY2ggZWxlbWVudCBpbiBkaWN0IGxpc3RzIGhhcmRsaW5rcworIyB3aGljaCBwb2ludHMgdG8gdGhlIHNhbWUgZG9jIGZpbGUuCisjIHtoYXJkbGluazEwOiBbaGFyZGxpbmsxMSwgaGFyZGxpbmsxMl0sLCx9CisjIFRoZSBoYXJkbGluazEwLCBoYXJkbGluazExIGFuZCBoYXJkbGluazEyIGFyZSB0aGUgc2FtZSBmaWxlLgorZGVmIF9jb2xsZWN0X2hhcmRsaW5rKGhhcmRsaW5rX2RpY3QsIGZpbGUpOgorICAgIGZvciBoYXJkbGluayBpbiBoYXJkbGlua19kaWN0OgorICAgICAgICAjIEFkZCB0byB0aGUgZXhpc3RlZCBoYXJkbGluaworICAgICAgICBpZiBvcy5wYXRoLnNhbWVmaWxlKGhhcmRsaW5rLCBmaWxlKToKKyAgICAgICAgICAgIGhhcmRsaW5rX2RpY3RbaGFyZGxpbmtdLmFwcGVuZChmaWxlKQorICAgICAgICAgICAgcmV0dXJuIGhhcmRsaW5rX2RpY3QKKworICAgIGhhcmRsaW5rX2RpY3RbZmlsZV0gPSBbXQorICAgIHJldHVybiBoYXJkbGlua19kaWN0CisKK2RlZiBfcHJvY2Vzc19oYXJkbGluayhoYXJkbGlua19kaWN0LCBjb21wcmVzc19tb2RlLCBzaGVsbF9jbWRzLCBkZWNvbXByZXNzPUZhbHNlKToKKyAgICBmb3IgdGFyZ2V0IGluIGhhcmRsaW5rX2RpY3Q6CisgICAgICAgIGlmIGRlY29tcHJlc3M6CisgICAgICAgICAgICBjb21wcmVzc19mb3JtYXQgPSBfZ2V0X2NvbXByZXNzX2Zvcm1hdCh0YXJnZXQsIHNoZWxsX2NtZHMua2V5cygpKQorICAgICAgICAgICAgY21kID0gIiVzIC1mICVzIiAlIChzaGVsbF9jbWRzW2NvbXByZXNzX2Zvcm1hdF0sIHRhcmdldCkKKyAgICAgICAgICAgIGJiLm5vdGUoJ2RlY29tcHJlc3MgaGFyZGxpbmsgJXMnICUgdGFyZ2V0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY21kID0gIiVzIC1mICVzIiAlIChzaGVsbF9jbWRzW2NvbXByZXNzX21vZGVdLCB0YXJnZXQpCisgICAgICAgICAgICBiYi5ub3RlKCdjb21wcmVzcyBoYXJkbGluayAlcycgJSB0YXJnZXQpCisgICAgICAgIChyZXR2YWwsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgICAgICBpZiByZXR2YWw6CisgICAgICAgICAgICBiYi53YXJuKCJkZS9jb21wcmVzcyBmaWxlIGZhaWxlZCAlcyAoY21kIHdhcyAlcyklcyIgJSAocmV0dmFsLCBjbWQsICI6XG4lcyIgJSBvdXRwdXQgaWYgb3V0cHV0IGVsc2UgIiIpKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZm9yIGhhcmRsaW5rX2R1cCBpbiBoYXJkbGlua19kaWN0W3RhcmdldF06CisgICAgICAgICAgICBpZiBkZWNvbXByZXNzOgorICAgICAgICAgICAgICAgICMgUmVtb3ZlIGNvbXByZXNzIHN1ZmZpeAorICAgICAgICAgICAgICAgIGNvbXByZXNzX3N1ZmZpeCA9ICcuJyArIGNvbXByZXNzX2Zvcm1hdAorICAgICAgICAgICAgICAgIG5ld19oYXJkbGluayA9IGhhcmRsaW5rX2R1cFs6LWxlbihjb21wcmVzc19zdWZmaXgpXQorICAgICAgICAgICAgICAgIG5ld190YXJnZXQgPSB0YXJnZXRbOi1sZW4oY29tcHJlc3Nfc3VmZml4KV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBBcHBlbmQgY29tcHJlc3Mgc3VmZml4CisgICAgICAgICAgICAgICAgY29tcHJlc3Nfc3VmZml4ID0gJy4nICsgY29tcHJlc3NfbW9kZQorICAgICAgICAgICAgICAgIG5ld19oYXJkbGluayA9IGhhcmRsaW5rX2R1cCArIGNvbXByZXNzX3N1ZmZpeAorICAgICAgICAgICAgICAgIG5ld190YXJnZXQgPSB0YXJnZXQgKyBjb21wcmVzc19zdWZmaXgKKworICAgICAgICAgICAgYmIubm90ZSgnaGFyZGxpbmsgJXMtLT4lcycgJSAobmV3X2hhcmRsaW5rLCBuZXdfdGFyZ2V0KSkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhuZXdfaGFyZGxpbmspOgorICAgICAgICAgICAgICAgIG9zLmxpbmsobmV3X3RhcmdldCwgbmV3X2hhcmRsaW5rKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoaGFyZGxpbmtfZHVwKToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoaGFyZGxpbmtfZHVwKQorCitkZWYgX3Byb2Nlc3Nfc3ltbGluayhmaWxlLCBjb21wcmVzc19mb3JtYXQsIGRlY29tcHJlc3M9RmFsc2UpOgorICAgIGNvbXByZXNzX3N1ZmZpeCA9ICcuJyArIGNvbXByZXNzX2Zvcm1hdAorICAgIGlmIGRlY29tcHJlc3M6CisgICAgICAgICMgUmVtb3ZlIGNvbXByZXNzIHN1ZmZpeAorICAgICAgICBuZXdfbGlua25hbWUgPSBmaWxlWzotbGVuKGNvbXByZXNzX3N1ZmZpeCldCisgICAgICAgIG5ld19zb3VyY2UgPSBvcy5yZWFkbGluayhmaWxlKVs6LWxlbihjb21wcmVzc19zdWZmaXgpXQorICAgIGVsc2U6CisgICAgICAgICMgQXBwZW5kIGNvbXByZXNzIHN1ZmZpeAorICAgICAgICBuZXdfbGlua25hbWUgPSBmaWxlICsgY29tcHJlc3Nfc3VmZml4CisgICAgICAgIG5ld19zb3VyY2UgPSBvcy5yZWFkbGluayhmaWxlKSArIGNvbXByZXNzX3N1ZmZpeAorCisgICAgYmIubm90ZSgnc3ltbGluayAlcy0tPiVzJyAlIChuZXdfbGlua25hbWUsIG5ld19zb3VyY2UpKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhuZXdfbGlua25hbWUpOgorICAgICAgICBvcy5zeW1saW5rKG5ld19zb3VyY2UsIG5ld19saW5rbmFtZSkKKworICAgIG9zLnVubGluayhmaWxlKQorCitkZWYgX2lzX2luZm8oZmlsZSk6CisgICAgZmxhZ3MgPSAnLmluZm8gLmluZm8tJy5zcGxpdCgpCisgICAgZm9yIGZsYWcgaW4gZmxhZ3M6CisgICAgICAgIGlmIGZsYWcgaW4gb3MucGF0aC5iYXNlbmFtZShmaWxlKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICByZXR1cm4gRmFsc2UKKworZGVmIF9pc19tYW4oZmlsZSk6CisgICAgaW1wb3J0IHJlCisKKyAgICAjIEl0IHJlZmVycyBNQU5TRUNULXZhciBpbiBtYW4oMS42ZykncyBtYW4uY29uZmlnCisgICAgIyAiLjE6LjFwOi44Oi4yOi4zOi4zcDouNDouNTouNjouNzouOTouMHA6LnRjbDoubjoubDoucDoubyIKKyAgICAjIE5vdCBzdGFydCB3aXRoICcuJywgYW5kIGNvbnRhaW4gdGhlIGFib3ZlIGNvbG9uLXNlcGVyYXRlIGVsZW1lbnQKKyAgICBwID0gcmUuY29tcGlsZShyJ1teXC5dK1wuKFsxLTlsbm9wXXwwcHx0Y2wpJykKKyAgICBpZiBwLnNlYXJjaChmaWxlKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIHJldHVybiBGYWxzZQorCitkZWYgX2lzX2NvbXByZXNzX2RvYyhmaWxlLCBjb21wcmVzc19mb3JtYXRfbGlzdCk6CisgICAgY29tcHJlc3NfZm9ybWF0ID0gX2dldF9jb21wcmVzc19mb3JtYXQoZmlsZSwgY29tcHJlc3NfZm9ybWF0X2xpc3QpCisgICAgY29tcHJlc3Nfc3VmZml4ID0gJy4nICsgY29tcHJlc3NfZm9ybWF0CisgICAgaWYgZmlsZS5lbmRzd2l0aChjb21wcmVzc19zdWZmaXgpOgorICAgICAgICAjIFJlbW92ZSB0aGUgY29tcHJlc3Mgc3VmZml4CisgICAgICAgIHVuY29tcHJlc3NfZmlsZSA9IGZpbGVbOi1sZW4oY29tcHJlc3Nfc3VmZml4KV0KKyAgICAgICAgaWYgX2lzX2luZm8odW5jb21wcmVzc19maWxlKSBvciBfaXNfbWFuKHVuY29tcHJlc3NfZmlsZSk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZSwgY29tcHJlc3NfZm9ybWF0CisKKyAgICByZXR1cm4gRmFsc2UsICcnCisKK2RlZiBjb21wcmVzc19kb2ModG9wZGlyLCBjb21wcmVzc19tb2RlLCBjb21wcmVzc19jbWRzKToKKyAgICBoYXJkbGlua19kaWN0ID0ge30KKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayh0b3BkaXIpOgorICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgIGZpbGUgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZikKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZmlsZSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgX2lzX2luZm8oZmlsZSkgb3IgX2lzX21hbihmaWxlKToKKyAgICAgICAgICAgICAgICAjIFN5bWxpbmsKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgX3Byb2Nlc3Nfc3ltbGluayhmaWxlLCBjb21wcmVzc19tb2RlKQorICAgICAgICAgICAgICAgICMgSGFyZGxpbmsKKyAgICAgICAgICAgICAgICBlbGlmIG9zLmxzdGF0KGZpbGUpLnN0X25saW5rID4gMToKKyAgICAgICAgICAgICAgICAgICAgX2NvbGxlY3RfaGFyZGxpbmsoaGFyZGxpbmtfZGljdCwgZmlsZSkKKyAgICAgICAgICAgICAgICAjIE5vcm1hbCBmaWxlCisgICAgICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZmlsZShmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgY21kID0gIiVzICVzIiAlIChjb21wcmVzc19jbWRzW2NvbXByZXNzX21vZGVdLCBmaWxlKQorICAgICAgICAgICAgICAgICAgICAocmV0dmFsLCBvdXRwdXQpID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKyAgICAgICAgICAgICAgICAgICAgaWYgcmV0dmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybigiY29tcHJlc3MgZmFpbGVkICVzIChjbWQgd2FzICVzKSVzIiAlIChyZXR2YWwsIGNtZCwgIjpcbiVzIiAlIG91dHB1dCBpZiBvdXRwdXQgZWxzZSAiIikpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCdjb21wcmVzcyBmaWxlICVzJyAlIGZpbGUpCisKKyAgICBfcHJvY2Vzc19oYXJkbGluayhoYXJkbGlua19kaWN0LCBjb21wcmVzc19tb2RlLCBjb21wcmVzc19jbWRzKQorCisjIERlY29tcHJlc3MgZG9jIGZpbGVzIHdoaWNoIGZvcm1hdCBpcyBub3QgY29tcHJlc3NfbW9kZQorZGVmIGRlY29tcHJlc3NfZG9jKHRvcGRpciwgY29tcHJlc3NfbW9kZSwgZGVjb21wcmVzc19jbWRzKToKKyAgICBoYXJkbGlua19kaWN0ID0ge30KKyAgICBkZWNvbXByZXNzID0gVHJ1ZQorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHRvcGRpcik6CisgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgZmlsZSA9IG9zLnBhdGguam9pbihyb290LCBmKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmaWxlKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICByZXMsIGNvbXByZXNzX2Zvcm1hdCA9IF9pc19jb21wcmVzc19kb2MoZmlsZSwgZGVjb21wcmVzc19jbWRzLmtleXMoKSkKKyAgICAgICAgICAgICMgRGVjb21wcmVzcyBmaWxlcyB3aGljaCBmb3JtYXQgaXMgbm90IGNvbXByZXNzX21vZGUKKyAgICAgICAgICAgIGlmIHJlcyBhbmQgY29tcHJlc3NfbW9kZSE9Y29tcHJlc3NfZm9ybWF0OgorICAgICAgICAgICAgICAgICMgU3ltbGluaworICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGZpbGUpOgorICAgICAgICAgICAgICAgICAgICBfcHJvY2Vzc19zeW1saW5rKGZpbGUsIGNvbXByZXNzX2Zvcm1hdCwgZGVjb21wcmVzcykKKyAgICAgICAgICAgICAgICAjIEhhcmRsaW5rCisgICAgICAgICAgICAgICAgZWxpZiBvcy5sc3RhdChmaWxlKS5zdF9ubGluayA+IDE6CisgICAgICAgICAgICAgICAgICAgIF9jb2xsZWN0X2hhcmRsaW5rKGhhcmRsaW5rX2RpY3QsIGZpbGUpCisgICAgICAgICAgICAgICAgIyBOb3JtYWwgZmlsZQorICAgICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2ZpbGUoZmlsZSk6CisgICAgICAgICAgICAgICAgICAgIGNtZCA9ICIlcyAlcyIgJSAoZGVjb21wcmVzc19jbWRzW2NvbXByZXNzX2Zvcm1hdF0sIGZpbGUpCisgICAgICAgICAgICAgICAgICAgIChyZXR2YWwsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgICAgICAgICAgICAgICAgICBpZiByZXR2YWw6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJkZWNvbXByZXNzIGZhaWxlZCAlcyAoY21kIHdhcyAlcyklcyIgJSAocmV0dmFsLCBjbWQsICI6XG4lcyIgJSBvdXRwdXQgaWYgb3V0cHV0IGVsc2UgIiIpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgnZGVjb21wcmVzcyBmaWxlICVzJyAlIGZpbGUpCisKKyAgICBfcHJvY2Vzc19oYXJkbGluayhoYXJkbGlua19kaWN0LCBjb21wcmVzc19tb2RlLCBkZWNvbXByZXNzX2NtZHMsIGRlY29tcHJlc3MpCisKK3B5dGhvbiBjb21wcmVzc19kb2NfdXBkYXRlYWx0ZXJuYXRpdmVzICgpIHsKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygndXBkYXRlLWFsdGVybmF0aXZlcycsIGQpOgorICAgICAgICByZXR1cm4KKworICAgIG1hbmRpciA9IGQuZ2V0VmFyKCJtYW5kaXIiLCBUcnVlKQorICAgIGluZm9kaXIgPSBkLmdldFZhcigiaW5mb2RpciIsIFRydWUpCisgICAgY29tcHJlc3NfbW9kZSA9IGQuZ2V0VmFyKCdET0NfQ09NUFJFU1MnLCBUcnVlKQorICAgIGZvciBwa2cgaW4gKGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICBvbGRfbmFtZXMgPSAoZC5nZXRWYXIoJ0FMVEVSTkFUSVZFXyVzJyAlIHBrZywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgbmV3X25hbWVzID0gW10KKyAgICAgICAgZm9yIG9sZF9uYW1lIGluIG9sZF9uYW1lczoKKyAgICAgICAgICAgIG9sZF9saW5rICAgICA9IGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgb2xkX25hbWUsIFRydWUpCisgICAgICAgICAgICBvbGRfdGFyZ2V0ICAgPSBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIG9sZF9uYW1lLCBUcnVlKSBvciBcCisgICAgICAgICAgICAgICAgZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBvbGRfbmFtZSwgVHJ1ZSkgb3IgXAorICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBUcnVlKSBvciBcCisgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIFRydWUpIG9yIFwKKyAgICAgICAgICAgICAgICBvbGRfbGluaworICAgICAgICAgICAgIyBTb21ldGltZXMgb2xkX3RhcmdldCBpcyBzcGVjaWZpZWQgYXMgcmVsYXRpdmUgdG8gdGhlIGxpbmsgbmFtZS4KKyAgICAgICAgICAgIG9sZF90YXJnZXQgICA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob2xkX2xpbmspLCBvbGRfdGFyZ2V0KQorCisgICAgICAgICAgICAjIFRoZSB1cGRhdGVhbHRlcm5hdGl2ZXMgdXNlZCBmb3IgY29tcHJlc3MgZG9jCisgICAgICAgICAgICBpZiBtYW5kaXIgaW4gb2xkX3RhcmdldCBvciBpbmZvZGlyIGluIG9sZF90YXJnZXQ6CisgICAgICAgICAgICAgICAgbmV3X25hbWUgPSBvbGRfbmFtZSArICcuJyArIGNvbXByZXNzX21vZGUKKyAgICAgICAgICAgICAgICBuZXdfbGluayA9IG9sZF9saW5rICsgJy4nICsgY29tcHJlc3NfbW9kZQorICAgICAgICAgICAgICAgIG5ld190YXJnZXQgPSBvbGRfdGFyZ2V0ICsgJy4nICsgY29tcHJlc3NfbW9kZQorICAgICAgICAgICAgICAgIGQuZGVsVmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgb2xkX25hbWUpCisgICAgICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBuZXdfbmFtZSwgbmV3X2xpbmspCisgICAgICAgICAgICAgICAgaWYgZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBvbGRfbmFtZSwgVHJ1ZSk6CisgICAgICAgICAgICAgICAgICAgIGQuZGVsVmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgb2xkX25hbWUpCisgICAgICAgICAgICAgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgbmV3X25hbWUsIG5ld190YXJnZXQpCisgICAgICAgICAgICAgICAgZWxpZiBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIG9sZF9uYW1lLCBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgZC5kZWxWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBvbGRfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBuZXdfbmFtZSwgbmV3X3RhcmdldCkKKyAgICAgICAgICAgICAgICBlbGlmIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIG5ld190YXJnZXQpCisgICAgICAgICAgICAgICAgZWxpZiBkLmdldFZhcignQUxURVJOQVRJVkVfVEFSR0VUJywgb2xkX25hbWUsIFRydWUpOgorICAgICAgICAgICAgICAgICAgICBkLnNldFZhcignQUxURVJOQVRJVkVfVEFSR0VUJywgbmV3X3RhcmdldCkKKworICAgICAgICAgICAgICAgIG5ld19uYW1lcy5hcHBlbmQobmV3X25hbWUpCisKKyAgICAgICAgaWYgbmV3X25hbWVzOgorICAgICAgICAgICAgZC5zZXRWYXIoJ0FMVEVSTkFUSVZFXyVzJyAlIHBrZywgJyAnLmpvaW4obmV3X25hbWVzKSkKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY29weWxlZnRfY29tcGxpYW5jZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY29weWxlZnRfY29tcGxpYW5jZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwN2MxODMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jb3B5bGVmdF9jb21wbGlhbmNlLmJiY2xhc3MKQEAgLTAsMCArMSw2NCBAQAorIyBEZXBsb3kgc291cmNlcyBmb3IgcmVjaXBlcyBmb3IgY29tcGxpYW5jZSB3aXRoIGNvcHlsZWZ0LXN0eWxlIGxpY2Vuc2VzCisjIERlZmF1bHRzIHRvIHVzaW5nIHN5bWxpbmtzLCBhcyBpdCdzIGEgcXVpY2sgb3BlcmF0aW9uLCBhbmQgb25lIGNhbiBlYXNpbHkKKyMgZm9sbG93IHRoZSBsaW5rcyB3aGVuIG1ha2luZyB1c2Ugb2YgdGhlIGZpbGVzIChlLmcuIHRhciB3aXRoIHRoZSAtaCBhcmcpLgorIworIyB2aTpzdHM9NDpzdz00OmV0CisKK2luaGVyaXQgY29weWxlZnRfZmlsdGVyCisKK0NPUFlMRUZUX1NPVVJDRVNfRElSID89ICcke0RFUExPWV9ESVJ9L2NvcHlsZWZ0X3NvdXJjZXMnCisKK3B5dGhvbiBkb19wcmVwYXJlX2NvcHlsZWZ0X3NvdXJjZXMgKCkgeworICAgICIiIlBvcHVsYXRlIGEgdHJlZSBvZiB0aGUgcmVjaXBlIHNvdXJjZXMgYW5kIGVtaXQgcGF0Y2ggc2VyaWVzIGZpbGVzIiIiCisgICAgaW1wb3J0IG9zLnBhdGgKKyAgICBpbXBvcnQgc2h1dGlsCisKKyAgICBwID0gZC5nZXRWYXIoJ1AnLCBUcnVlKQorICAgIGluY2x1ZGVkLCByZWFzb24gPSBjb3B5bGVmdF9zaG91bGRfaW5jbHVkZShkKQorICAgIGlmIG5vdCBpbmNsdWRlZDoKKyAgICAgICAgYmIuZGVidWcoMSwgJ2NvcHlsZWZ0OiAlcyBpcyBleGNsdWRlZDogJXMnICUgKHAsIHJlYXNvbikpCisgICAgICAgIHJldHVybgorICAgIGVsc2U6CisgICAgICAgIGJiLmRlYnVnKDEsICdjb3B5bGVmdDogJXMgaXMgaW5jbHVkZWQ6ICVzJyAlIChwLCByZWFzb24pKQorCisgICAgc291cmNlc19kaXIgPSBkLmdldFZhcignQ09QWUxFRlRfU09VUkNFU19ESVInLCBUcnVlKQorICAgIGRsX2RpciA9IGQuZ2V0VmFyKCdETF9ESVInLCBUcnVlKQorICAgIHNyY191cmkgPSBkLmdldFZhcignU1JDX1VSSScsIFRydWUpLnNwbGl0KCkKKyAgICBmZXRjaCA9IGJiLmZldGNoMi5GZXRjaChzcmNfdXJpLCBkKQorICAgIHVkID0gZmV0Y2gudWQKKworICAgIHBmID0gZC5nZXRWYXIoJ1BGJywgVHJ1ZSkKKyAgICBkZXN0ID0gb3MucGF0aC5qb2luKHNvdXJjZXNfZGlyLCBwZikKKyAgICBzaHV0aWwucm10cmVlKGRlc3QsIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZGVzdCkKKworICAgIGZvciB1IGluIHVkLnZhbHVlcygpOgorICAgICAgICBsb2NhbCA9IG9zLnBhdGgubm9ybXBhdGgoZmV0Y2gubG9jYWxwYXRoKHUudXJsKSkKKyAgICAgICAgaWYgbG9jYWwuZW5kc3dpdGgoJy5iYicpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZWxpZiBsb2NhbC5lbmRzd2l0aCgnLycpOgorICAgICAgICAgICAgbG9jYWwgPSBsb2NhbFs6LTFdCisKKyAgICAgICAgaWYgdS5taXJyb3J0YXJiYWxsOgorICAgICAgICAgICAgdGFyYmFsbF9wYXRoID0gb3MucGF0aC5qb2luKGRsX2RpciwgdS5taXJyb3J0YXJiYWxsKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHModGFyYmFsbF9wYXRoKToKKyAgICAgICAgICAgICAgICBsb2NhbCA9IHRhcmJhbGxfcGF0aAorCisgICAgICAgIG9lLnBhdGguc3ltbGluayhsb2NhbCwgb3MucGF0aC5qb2luKGRlc3QsIG9zLnBhdGguYmFzZW5hbWUobG9jYWwpKSwgZm9yY2U9VHJ1ZSkKKworICAgIHBhdGNoZXMgPSBzcmNfcGF0Y2hlcyhkKQorICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzOgorICAgICAgICBfLCBfLCBsb2NhbCwgXywgXywgcGFybSA9IGJiLmZldGNoLmRlY29kZXVybChwYXRjaCkKKyAgICAgICAgcGF0Y2hkaXIgPSBwYXJtLmdldCgncGF0Y2hkaXInKQorICAgICAgICBpZiBwYXRjaGRpcjoKKyAgICAgICAgICAgIHNlcmllcyA9IG9zLnBhdGguam9pbihkZXN0LCAnc2VyaWVzLnN1YmRpci4lcycgJSBwYXRjaGRpci5yZXBsYWNlKCcvJywgJ18nKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlcmllcyA9IG9zLnBhdGguam9pbihkZXN0LCAnc2VyaWVzJykKKworICAgICAgICB3aXRoIG9wZW4oc2VyaWVzLCAnYScpIGFzIHM6CisgICAgICAgICAgICBzLndyaXRlKCclcyAtcCVzXG4nICUgKG9zLnBhdGguYmFzZW5hbWUobG9jYWwpLCBwYXJtWydzdHJpcGxldmVsJ10pKQorfQorCithZGR0YXNrIHByZXBhcmVfY29weWxlZnRfc291cmNlcyBhZnRlciBkb19mZXRjaCBiZWZvcmUgZG9fYnVpbGQKK2RvX3ByZXBhcmVfY29weWxlZnRfc291cmNlc1tkaXJzXSA9ICIke1dPUktESVJ9IgorZG9fYnVpbGRbcmVjcmRlcHRhc2tdICs9ICdkb19wcmVwYXJlX2NvcHlsZWZ0X3NvdXJjZXMnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jb3B5bGVmdF9maWx0ZXIuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NvcHlsZWZ0X2ZpbHRlci5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YmU3ZjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jb3B5bGVmdF9maWx0ZXIuYmJjbGFzcwpAQCAtMCwwICsxLDc5IEBACisjIEZpbHRlciB0aGUgbGljZW5zZSwgdGhlIGNvcHlsZWZ0X3Nob3VsZF9pbmNsdWRlIHJldHVybnMgVHJ1ZSBmb3IgdGhlCisjIENPUFlMRUZUX0xJQ0VOU0VfSU5DTFVERSByZWNpcGUsIGFuZCBGYWxzZSBmb3IgdGhlCisjIENPUFlMRUZUX0xJQ0VOU0VfRVhDTFVERS4KKyMKKyMgQnkgZGVmYXVsdCwgaW5jbHVkZXMgYWxsIEdQTCBhbmQgTEdQTCwgYW5kIGV4Y2x1ZGVzIENMT1NFRCBhbmQgUHJvcHJpZXRhcnkuCisjCisjIHZpOnN0cz00OnN3PTQ6ZXQKKworQ09QWUxFRlRfTElDRU5TRV9JTkNMVURFID89ICdHUEwqIExHUEwqJworQ09QWUxFRlRfTElDRU5TRV9JTkNMVURFW3R5cGVdID0gJ2xpc3QnCitDT1BZTEVGVF9MSUNFTlNFX0lOQ0xVREVbZG9jXSA9ICdTcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBnbG9icyB3aGljaCBpbmNsdWRlIGxpY2Vuc2VzJworCitDT1BZTEVGVF9MSUNFTlNFX0VYQ0xVREUgPz0gJ0NMT1NFRCBQcm9wcmlldGFyeScKK0NPUFlMRUZUX0xJQ0VOU0VfRVhDTFVERVt0eXBlXSA9ICdsaXN0JworQ09QWUxFRlRfTElDRU5TRV9FWENMVURFW2RvY10gPSAnU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgZ2xvYnMgd2hpY2ggZXhjbHVkZSBsaWNlbnNlcycKKworQ09QWUxFRlRfUkVDSVBFX1RZUEUgPz0gJyR7QGNvcHlsZWZ0X3JlY2lwZV90eXBlKGQpfScKK0NPUFlMRUZUX1JFQ0lQRV9UWVBFW2RvY10gPSAnVGhlICJ0eXBlIiBvZiB0aGUgY3VycmVudCByZWNpcGUgKGUuZy4gdGFyZ2V0LCBuYXRpdmUsIGNyb3NzKScKKworQ09QWUxFRlRfUkVDSVBFX1RZUEVTID89ICd0YXJnZXQnCitDT1BZTEVGVF9SRUNJUEVfVFlQRVNbdHlwZV0gPSAnbGlzdCcKK0NPUFlMRUZUX1JFQ0lQRV9UWVBFU1tkb2NdID0gJ1NwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIHJlY2lwZSB0eXBlcyB0byBpbmNsdWRlJworCitDT1BZTEVGVF9BVkFJTEFCTEVfUkVDSVBFX1RZUEVTID0gJ3RhcmdldCBuYXRpdmUgbmF0aXZlc2RrIGNyb3NzIGNyb3Nzc2RrIGNyb3NzLWNhbmFkaWFuJworQ09QWUxFRlRfQVZBSUxBQkxFX1JFQ0lQRV9UWVBFU1t0eXBlXSA9ICdsaXN0JworQ09QWUxFRlRfQVZBSUxBQkxFX1JFQ0lQRV9UWVBFU1tkb2NdID0gJ1NwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGF2YWlsYWJsZSByZWNpcGUgdHlwZXMnCisKK0NPUFlMRUZUX1BOX0lOQ0xVREUgPz0gJycKK0NPUFlMRUZUX1BOX0lOQ0xVREVbdHlwZV0gPSAnbGlzdCcKK0NPUFlMRUZUX1BOX0lOQ0xVREVbZG9jXSA9ICdTcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiByZWNpcGUgbmFtZXMgdG8gaW5jbHVkZScKKworQ09QWUxFRlRfUE5fRVhDTFVERSA/PSAnJworQ09QWUxFRlRfUE5fRVhDTFVERVt0eXBlXSA9ICdsaXN0JworQ09QWUxFRlRfUE5fRVhDTFVERVtkb2NdID0gJ1NwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIHJlY2lwZSBuYW1lcyB0byBleGNsdWRlJworCitkZWYgY29weWxlZnRfcmVjaXBlX3R5cGUoZCk6CisgICAgZm9yIHJlY2lwZV90eXBlIGluIG9lLmRhdGEudHlwZWRfdmFsdWUoJ0NPUFlMRUZUX0FWQUlMQUJMRV9SRUNJUEVfVFlQRVMnLCBkKToKKyAgICAgICAgaWYgb2UudXRpbHMuaW5oZXJpdHMoZCwgcmVjaXBlX3R5cGUpOgorICAgICAgICAgICAgcmV0dXJuIHJlY2lwZV90eXBlCisgICAgcmV0dXJuICd0YXJnZXQnCisKK2RlZiBjb3B5bGVmdF9zaG91bGRfaW5jbHVkZShkKToKKyAgICAiIiIKKyAgICBEZXRlcm1pbmUgaWYgdGhpcyByZWNpcGUncyBzb3VyY2VzIHNob3VsZCBiZSBkZXBsb3llZCBmb3IgY29tcGxpYW5jZQorICAgICIiIgorICAgIGltcG9ydCBhc3QKKyAgICBpbXBvcnQgb2UubGljZW5zZQorICAgIGZyb20gZm5tYXRjaCBpbXBvcnQgZm5tYXRjaGNhc2UgYXMgZm5tYXRjaAorCisgICAgaW5jbHVkZWQsIG1vdGl2ZSA9IEZhbHNlLCAncmVjaXBlIGRpZCBub3QgbWF0Y2ggYW55dGhpbmcnCisKKyAgICByZWNpcGVfdHlwZSA9IGQuZ2V0VmFyKCdDT1BZTEVGVF9SRUNJUEVfVFlQRScsIFRydWUpCisgICAgaWYgcmVjaXBlX3R5cGUgbm90IGluIG9lLmRhdGEudHlwZWRfdmFsdWUoJ0NPUFlMRUZUX1JFQ0lQRV9UWVBFUycsIGQpOgorICAgICAgICBpbmNsdWRlLCBtb3RpdmUgPSBGYWxzZSwgJ3JlY2lwZSB0eXBlICIlcyIgaXMgZXhjbHVkZWQnICUgcmVjaXBlX3R5cGUKKworICAgIGluY2x1ZGUgPSBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdDT1BZTEVGVF9MSUNFTlNFX0lOQ0xVREUnLCBkKQorICAgIGV4Y2x1ZGUgPSBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdDT1BZTEVGVF9MSUNFTlNFX0VYQ0xVREUnLCBkKQorCisgICAgdHJ5OgorICAgICAgICBpc19pbmNsdWRlZCwgcmVhc29uID0gb2UubGljZW5zZS5pc19pbmNsdWRlZChkLmdldFZhcignTElDRU5TRScsIFRydWUpLCBpbmNsdWRlLCBleGNsdWRlKQorICAgIGV4Y2VwdCBvZS5saWNlbnNlLkxpY2Vuc2VFcnJvciBhcyBleGM6CisgICAgICAgIGJiLmZhdGFsKCclczogJXMnICUgKGQuZ2V0VmFyKCdQRicsIFRydWUpLCBleGMpKQorICAgIGVsc2U6CisgICAgICAgIGlmIGlzX2luY2x1ZGVkOgorICAgICAgICAgICAgaWYgcmVhc29uOgorICAgICAgICAgICAgICAgIGluY2x1ZGVkLCBtb3RpdmUgPSBUcnVlLCAncmVjaXBlIGhhcyBpbmNsdWRlZCBsaWNlbnNlczogJXMnICUgJywgJy5qb2luKHJlYXNvbikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW5jbHVkZWQsIG1vdGl2ZSA9IEZhbHNlLCAncmVjaXBlIGRvZXMgbm90IGluY2x1ZGUgYSBjb3B5bGVmdCBsaWNlbnNlJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW5jbHVkZWQsIG1vdGl2ZSA9IEZhbHNlLCAncmVjaXBlIGhhcyBleGNsdWRlZCBsaWNlbnNlczogJXMnICUgJywgJy5qb2luKHJlYXNvbikKKworICAgIGlmIGFueShmbm1hdGNoKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBuYW1lKSBcCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdDT1BZTEVGVF9QTl9JTkNMVURFJywgZCkpOgorICAgICAgICBpbmNsdWRlZCwgbW90aXZlID0gIFRydWUsICdyZWNpcGUgaW5jbHVkZWQgYnkgbmFtZScKKyAgICBpZiBhbnkoZm5tYXRjaChkLmdldFZhcignUE4nLCBUcnVlKSwgbmFtZSkgXAorICAgICAgICAgICAgZm9yIG5hbWUgaW4gb2UuZGF0YS50eXBlZF92YWx1ZSgnQ09QWUxFRlRfUE5fRVhDTFVERScsIGQpKToKKyAgICAgICAgaW5jbHVkZWQsIG1vdGl2ZSA9IEZhbHNlLCAncmVjaXBlIGV4Y2x1ZGVkIGJ5IG5hbWUnCisKKyAgICByZXR1cm4gaW5jbHVkZWQsIG1vdGl2ZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY29yZS1pbWFnZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY29yZS1pbWFnZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMzQwZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jb3JlLWltYWdlLmJiY2xhc3MKQEAgLTAsMCArMSw3MyBAQAorIyBDb21tb24gY29kZSBmb3IgZ2VuZXJhdGluZyBjb3JlIHJlZmVyZW5jZSBpbWFnZXMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTEgTGludXggRm91bmRhdGlvbgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworIyBJTUFHRV9GRUFUVVJFUyBjb250cm9sIGNvbnRlbnQgb2YgdGhlIGNvcmUgcmVmZXJlbmNlIGltYWdlcworIyAKKyMgQnkgZGVmYXVsdCB3ZSBpbnN0YWxsIHBhY2thZ2Vncm91cC1jb3JlLWJvb3QgYW5kIHBhY2thZ2Vncm91cC1iYXNlLWV4dGVuZGVkIHBhY2thZ2VzOworIyB0aGlzIGdpdmVzIHVzIHdvcmtpbmcgKGNvbnNvbGUgb25seSkgcm9vdGZzLgorIworIyBBdmFpbGFibGUgSU1BR0VfRkVBVFVSRVM6CisjCisjIC0geDExICAgICAgICAgICAgICAgICAtIFggc2VydmVyCisjIC0geDExLWJhc2UgICAgICAgICAgICAtIFggc2VydmVyIHdpdGggbWluaW1hbCBlbnZpcm9ubWVudAorIyAtIHgxMS1zYXRvICAgICAgICAgICAgLSBPcGVuZWRIYW5kIFNhdG8gZW52aXJvbm1lbnQKKyMgLSB0b29scy1kZWJ1ZyAgICAgICAgIC0gZGVidWdnaW5nIHRvb2xzCisjIC0gZWNsaXBzZS1kZWJ1ZyAgICAgICAtIEVjbGlwc2UgcmVtb3RlIGRlYnVnZ2luZyBzdXBwb3J0CisjIC0gdG9vbHMtcHJvZmlsZSAgICAgICAtIHByb2ZpbGluZyB0b29scworIyAtIHRvb2xzLXRlc3RhcHBzICAgICAgLSB0b29scyB1c2FibGUgdG8gbWFrZSBzb21lIGRldmljZSB0ZXN0cworIyAtIHRvb2xzLXNkayAgICAgICAgICAgLSBTREsgKEMvQysrIGNvbXBpbGVyLCBhdXRvdG9vbHMsIGV0Yy4pCisjIC0gbmZzLXNlcnZlciAgICAgICAgICAtIE5GUyBzZXJ2ZXIKKyMgLSBuZnMtY2xpZW50ICAgICAgICAgIC0gTkZTIGNsaWVudAorIyAtIHNzaC1zZXJ2ZXItZHJvcGJlYXIgLSBTU0ggc2VydmVyIChkcm9wYmVhcikKKyMgLSBzc2gtc2VydmVyLW9wZW5zc2ggIC0gU1NIIHNlcnZlciAob3BlbnNzaCkKKyMgLSBxdDQtcGtncyAgICAgICAgICAgIC0gUXQ0L1gxMSBhbmQgZGVtbyBhcHBsaWNhdGlvbnMKKyMgLSBod2NvZGVjcyAgICAgICAgICAgIC0gSW5zdGFsbCBoYXJkd2FyZSBhY2NlbGVyYXRpb24gY29kZWNzCisjIC0gcGFja2FnZS1tYW5hZ2VtZW50ICAtIGluc3RhbGxzIHBhY2thZ2UgbWFuYWdlbWVudCB0b29scyBhbmQgcHJlc2VydmVzIHRoZSBwYWNrYWdlIG1hbmFnZXIgZGF0YWJhc2UKKyMgLSBkZWJ1Zy10d2Vha3MgICAgICAgIC0gbWFrZXMgYW4gaW1hZ2Ugc3VpdGFibGUgZm9yIGRldmVsb3BtZW50LCBlLmcuIGFsbG93aW5nIHBhc3N3b3JkbGVzcyByb290IGxvZ2lucworIyAtIGRldi1wa2dzICAgICAgICAgICAgLSBkZXZlbG9wbWVudCBwYWNrYWdlcyAoaGVhZGVycywgZXRjLikgZm9yIGFsbCBpbnN0YWxsZWQgcGFja2FnZXMgaW4gdGhlIHJvb3RmcworIyAtIGRiZy1wa2dzICAgICAgICAgICAgLSBkZWJ1ZyBzeW1ib2wgcGFja2FnZXMgZm9yIGFsbCBpbnN0YWxsZWQgcGFja2FnZXMgaW4gdGhlIHJvb3RmcworIyAtIGRvYy1wa2dzICAgICAgICAgICAgLSBkb2N1bWVudGF0aW9uIHBhY2thZ2VzIGZvciBhbGwgaW5zdGFsbGVkIHBhY2thZ2VzIGluIHRoZSByb290ZnMKKyMgLSBwdGVzdC1wa2dzICAgICAgICAgIC0gcHRlc3QgcGFja2FnZXMgZm9yIGFsbCBwdGVzdC1lbmFibGVkIHJlY2lwZXMKKyMgLSByZWFkLW9ubHktcm9vdGZzICAgIC0gdHdlYWtzIGFuIGltYWdlIHRvIHN1cHBvcnQgcmVhZC1vbmx5IHJvb3RmcworIworRkVBVFVSRV9QQUNLQUdFU194MTEgPSAicGFja2FnZWdyb3VwLWNvcmUteDExIgorRkVBVFVSRV9QQUNLQUdFU194MTEtYmFzZSA9ICJwYWNrYWdlZ3JvdXAtY29yZS14MTEtYmFzZSIKK0ZFQVRVUkVfUEFDS0FHRVNfeDExLXNhdG8gPSAicGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8iCitGRUFUVVJFX1BBQ0tBR0VTX3Rvb2xzLWRlYnVnID0gInBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLWRlYnVnIgorRkVBVFVSRV9QQUNLQUdFU19lY2xpcHNlLWRlYnVnID0gInBhY2thZ2Vncm91cC1jb3JlLWVjbGlwc2UtZGVidWciCitGRUFUVVJFX1BBQ0tBR0VTX3Rvb2xzLXByb2ZpbGUgPSAicGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtcHJvZmlsZSIKK0ZFQVRVUkVfUEFDS0FHRVNfdG9vbHMtdGVzdGFwcHMgPSAicGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtdGVzdGFwcHMiCitGRUFUVVJFX1BBQ0tBR0VTX3Rvb2xzLXNkayA9ICJwYWNrYWdlZ3JvdXAtY29yZS1zZGsgcGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1zZGstdGFyZ2V0IgorRkVBVFVSRV9QQUNLQUdFU19uZnMtc2VydmVyID0gInBhY2thZ2Vncm91cC1jb3JlLW5mcy1zZXJ2ZXIiCitGRUFUVVJFX1BBQ0tBR0VTX25mcy1jbGllbnQgPSAicGFja2FnZWdyb3VwLWNvcmUtbmZzLWNsaWVudCIKK0ZFQVRVUkVfUEFDS0FHRVNfc3NoLXNlcnZlci1kcm9wYmVhciA9ICJwYWNrYWdlZ3JvdXAtY29yZS1zc2gtZHJvcGJlYXIiCitGRUFUVVJFX1BBQ0tBR0VTX3NzaC1zZXJ2ZXItb3BlbnNzaCA9ICJwYWNrYWdlZ3JvdXAtY29yZS1zc2gtb3BlbnNzaCIKK0ZFQVRVUkVfUEFDS0FHRVNfcXQ0LXBrZ3MgPSAicGFja2FnZWdyb3VwLWNvcmUtcXQtZGVtb2FwcHMiCitGRUFUVVJFX1BBQ0tBR0VTX2h3Y29kZWNzID0gIiR7TUFDSElORV9IV0NPREVDU30iCisKKworIyBJTUFHRV9GRUFUVVJFU19SRVBMQUNFU19mb28gPSAnYmFyMSBiYXIyJworIyBJbmNsdWRpbmcgaW1hZ2UgZmVhdHVyZSBmb28gd291bGQgcmVwbGFjZSB0aGUgaW1hZ2UgZmVhdHVyZXMgYmFyMSBhbmQgYmFyMgorSU1BR0VfRkVBVFVSRVNfUkVQTEFDRVNfc3NoLXNlcnZlci1vcGVuc3NoID0gInNzaC1zZXJ2ZXItZHJvcGJlYXIiCisKKyMgSU1BR0VfRkVBVFVSRVNfQ09ORkxJQ1RTX2ZvbyA9ICdiYXIxIGJhcjInCisjIEFuIGVycm9yIGV4Y2VwdGlvbiB3b3VsZCBiZSByYWlzZWQgaWYgYm90aCBpbWFnZSBmZWF0dXJlcyBmb28gYW5kIGJhcjEob3IgYmFyMikgYXJlIGluY2x1ZGVkCisKK01BQ0hJTkVfSFdDT0RFQ1MgPz89ICIiCisKK0NPUkVfSU1BR0VfQkFTRV9JTlNUQUxMID0gJ1wKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1ib290IFwKKyAgICBwYWNrYWdlZ3JvdXAtYmFzZS1leHRlbmRlZCBcCisgICAgXAorICAgICR7Q09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMfSBcCisgICAgJworCitDT1JFX0lNQUdFX0VYVFJBX0lOU1RBTEwgPz0gIiIKKworSU1BR0VfSU5TVEFMTCA/PSAiJHtDT1JFX0lNQUdFX0JBU0VfSU5TVEFMTH0iCisKK2luaGVyaXQgaW1hZ2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NwYW4tYmFzZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY3Bhbi1iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk4MTdiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NwYW4tYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsNTUgQEAKKyMKKyMgY3Bhbi1iYXNlIHByb3ZpZGVycyB2YXJpb3VzIHBlcmwgcmVsYXRlZCBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIGJ1aWxkaW5nCisjIGNwYW4gbW9kdWxlcworIworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9wZXJsICR7ZGF0YWRpcn0vcGVybCIKKworREVQRU5EUyAgKz0gIiR7QFsicGVybCIsICJwZXJsLW5hdGl2ZSJdWyhiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSldfSIKK1JERVBFTkRTXyR7UE59ICs9ICIke0BbInBlcmwiLCAiIl1bKGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpKV19IgorCitQRVJMX09XTl9ESVIgPSAiJHtAWyIiLCAiL3BlcmwtbmF0aXZlIl1bKGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpKV19IgorCisjIERldGVybWluZSB0aGUgc3RhZ2VkIHZlcnNpb24gb2YgcGVybCBmcm9tIHRoZSBwZXJsIGNvbmZpZ3VyYXRpb24gZmlsZQorIyBBc3NpZ24gdmFyZGVwdmFsdWUsIGJlY2F1c2Ugb3RoZXJ3aXNlIHNpZ25hdHVyZSBpcyBjaGFuZ2VkIGJlZm9yZSBhbmQgYWZ0ZXIKKyMgcGVybCBpcyBidWlsdCAoZnJvbSBOb25lIHRvIHJlYWwgdmVyc2lvbiBpbiBjb25maWcuc2gpLgorZ2V0X3BlcmxfdmVyc2lvblt2YXJkZXB2YWx1ZV0gPSAiJHtQRVJMX09XTl9ESVJ9IgorZGVmIGdldF9wZXJsX3ZlcnNpb24oZCk6CisgICAgaW1wb3J0IHJlCisgICAgY2ZnID0gZC5leHBhbmQoJyR7U1RBR0lOR19MSUJESVJ9JHtQRVJMX09XTl9ESVJ9L3BlcmwvY29uZmlnLnNoJykKKyAgICB0cnk6CisgICAgICAgIGYgPSBvcGVuKGNmZywgJ3InKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIGwgPSBmLnJlYWRsaW5lcygpOworICAgIGYuY2xvc2UoKTsKKyAgICByID0gcmUuY29tcGlsZSgiXnZlcnNpb249JyhcZCpcLlxkKlwuXGQqKSciKQorICAgIGZvciBzIGluIGw6CisgICAgICAgIG0gPSByLm1hdGNoKHMpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICByZXR1cm4gbS5ncm91cCgxKQorICAgIHJldHVybiBOb25lCisKKyMgRGV0ZXJtaW5lIHdoZXJlIHRoZSBsaWJyYXJ5IGRpcmVjdG9yaWVzIGFyZQorZGVmIHBlcmxfZ2V0X2xpYmRpcnMoZCk6CisgICAgbGliZGlyID0gZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpCisgICAgaWYgaXNfdGFyZ2V0KGQpID09ICJubyI6CisgICAgICAgIGxpYmRpciArPSAnL3BlcmwtbmF0aXZlJworICAgIGxpYmRpciArPSAnL3BlcmwnCisgICAgcmV0dXJuIGxpYmRpcgorCitkZWYgaXNfdGFyZ2V0KGQpOgorICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKToKKyAgICAgICAgcmV0dXJuICJ5ZXMiCisgICAgcmV0dXJuICJubyIKKworUEVSTExJQkRJUlMgOj0gIiR7QHBlcmxfZ2V0X2xpYmRpcnMoZCl9IgorUEVSTFZFUlNJT04gOj0gIiR7QGdldF9wZXJsX3ZlcnNpb24oZCl9IgorUEVSTFZFUlNJT05bdmFyZGVwdmFsdWVdID0gIiIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke1BFUkxMSUJESVJTfS9hdXRvLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQRVJMTElCRElSU30vYXV0by8qLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQRVJMTElCRElSU30vYXV0by8qLyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke1BFUkxMSUJESVJTfS92ZW5kb3JfcGVybC8ke1BFUkxWRVJTSU9OfS9hdXRvLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQRVJMTElCRElSU30vdmVuZG9yX3BlcmwvJHtQRVJMVkVSU0lPTn0vYXV0by8qLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQRVJMTElCRElSU30vdmVuZG9yX3BlcmwvJHtQRVJMVkVSU0lPTn0vYXV0by8qLyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcGFuLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcGFuLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJiYmQyZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NwYW4uYmJjbGFzcwpAQCAtMCwwICsxLDU1IEBACisjCisjIFRoaXMgaXMgZm9yIHBlcmwgbW9kdWxlcyB0aGF0IHVzZSB0aGUgb2xkIE1ha2VmaWxlLlBMIGJ1aWxkIHN5c3RlbQorIworaW5oZXJpdCBjcGFuLWJhc2UgcGVybG5hdGl2ZQorCitFWFRSQV9DUEFORkxBR1MgPz0gIiIKK0VYVFJBX1BFUkxGTEFHUyA/PSAiIgorCisjIEVudiB2YXIgd2hpY2ggdGVsbHMgcGVybCBpZiBpdCBzaG91bGQgdXNlIGhvc3QgKG5vKSBvciB0YXJnZXQgKHllcykgc2V0dGluZ3MKK2V4cG9ydCBQRVJMQ09ORklHVEFSR0VUID0gIiR7QGlzX3RhcmdldChkKX0iCisKKyMgRW52IHZhciB3aGljaCB0ZWxscyBwZXJsIHdoZXJlIHRoZSBwZXJsIGluY2x1ZGUgZmlsZXMgYXJlCitleHBvcnQgUEVSTF9JTkMgPSAiJHtTVEFHSU5HX0xJQkRJUn0ke1BFUkxfT1dOX0RJUn0vcGVybC8ke0BnZXRfcGVybF92ZXJzaW9uKGQpfS9DT1JFIgorZXhwb3J0IFBFUkxfTElCID0gIiR7U1RBR0lOR19MSUJESVJ9JHtQRVJMX09XTl9ESVJ9L3BlcmwvJHtAZ2V0X3BlcmxfdmVyc2lvbihkKX0iCitleHBvcnQgUEVSTF9BUkNITElCID0gIiR7U1RBR0lOR19MSUJESVJ9JHtQRVJMX09XTl9ESVJ9L3BlcmwvJHtAZ2V0X3BlcmxfdmVyc2lvbihkKX0iCitleHBvcnQgUEVSTEhPU1RMSUIgPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3BlcmwtbmF0aXZlL3BlcmwvJHtAZ2V0X3BlcmxfdmVyc2lvbihkKX0vIgorCitjcGFuX2RvX2NvbmZpZ3VyZSAoKSB7CisJZXhwb3J0IFBFUkw1TElCPSIke1BFUkxfQVJDSExJQn0iCisJeWVzICcnIHwgcGVybCAke0VYVFJBX1BFUkxGTEFHU30gTWFrZWZpbGUuUEwgJHtFWFRSQV9DUEFORkxBR1N9CisKKwkjIE1ha2VmaWxlLlBMcyBjYW4gZXhpdCB3aXRoIHN1Y2Nlc3Mgd2l0aG91dCBnZW5lcmF0aW5nIGEKKwkjIE1ha2VmaWxlLCBlLmcuIGluIGNhc2VzIG9mIG1pc3NpbmcgY29uZmlndXJlIHRpbWUKKwkjIGRlcGVuZGVuY2llcy4gVGhpcyBpcyBjb25zaWRlcmVkIGEgYmVzdCBwcmFjdGljZSBieQorCSMgY3BhbnRlc3RlcnMub3JnLiBTZWU6CisJIyAgKiBodHRwOi8vd2lraS5jcGFudGVzdGVycy5vcmcvd2lraS9DUEFOQXV0aG9yTm90ZXMKKwkjICAqIGh0dHA6Ly93d3cubm50cC5wZXJsLm9yZy9ncm91cC9wZXJsLnFhLzIwMDgvMDgvbXNnMTEyMzYuaHRtbAorCVsgLWUgTWFrZWZpbGUgXSB8fCBiYmZhdGFsICJObyBNYWtlZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IE1ha2VmaWxlLlBMIgorCisJaWYgWyAiJHtCVUlMRF9TWVN9IiAhPSAiJHtIT1NUX1NZU30iIF07IHRoZW4KKwkJLiAke1NUQUdJTkdfTElCRElSfSR7UEVSTF9PV05fRElSfS9wZXJsL2NvbmZpZy5zaAorCQkjIFVzZSBmaW5kIHNpbmNlIHRoZXJlIGNhbiBiZSBhIE1ha2VmaWxlIGdlbmVyYXRlZCBmb3IgZWFjaCBNYWtlZmlsZS5QTAorCQlmb3IgZiBpbiBgZmluZCAtbmFtZSBNYWtlZmlsZS5QTGA7IGRvCisJCQlmMj1gZWNobyAkZiB8IHNlZCAtZSAncy8uUEwvLydgCisJCQl0ZXN0IC1mICRmMiB8fCBjb250aW51ZQorCQkJc2VkIC1pIC1lICJzOlwoUEVSTF9BUkNITElCID0gXCkuKjpcMSR7UEVSTF9BUkNITElCfToiIFwKKwkJCQktZSAncy9wZXJsLnJlYWwvcGVybC8nIFwKKwkJCQktZSAic3xeXChDQ0ZMQUdTID0uKlwpfFwxICR7Q0ZMQUdTfXwiIFwKKwkJCQkkZjIKKwkJZG9uZQorCWZpCit9CisKK2NwYW5fZG9fY29tcGlsZSAoKSB7CisJb2VfcnVubWFrZSBQQVNUSFJVX0lOQz0iJHtDRkxBR1N9IiBMRD0iJHtDQ0xEfSIKK30KKworY3Bhbl9kb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlIERFU1RESVI9IiR7RH0iIGluc3RhbGxfdmVuZG9yCisJZm9yIFBFUkxTQ1JJUFQgaW4gYGdyZXAgLXJJRWwgJyMhICoke2JpbmRpcn0vcGVybC1uYXRpdmUuKi9wZXJsJyAke0R9YDsgZG8KKwkJc2VkIC1pIC1lICdzfCR7YmluZGlyfS9wZXJsLW5hdGl2ZS4qL3Blcmx8L3Vzci9iaW4vZW52IG5hdGl2ZXBlcmx8JyAkUEVSTFNDUklQVAorCWRvbmUKK30KKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb25maWd1cmUgZG9fY29tcGlsZSBkb19pbnN0YWxsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcGFuX2J1aWxkLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcGFuX2J1aWxkLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY2NDhhNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NwYW5fYnVpbGQuYmJjbGFzcwpAQCAtMCwwICsxLDM3IEBACisjCisjIFRoaXMgaXMgZm9yIHBlcmwgbW9kdWxlcyB0aGF0IHVzZSB0aGUgbmV3IEJ1aWxkLlBMIGJ1aWxkIHN5c3RlbQorIworaW5oZXJpdCBjcGFuLWJhc2UgcGVybG5hdGl2ZQorCitFWFRSQV9DUEFOX0JVSUxEX0ZMQUdTID89ICIiCisKKyMgRW52IHZhciB3aGljaCB0ZWxscyBwZXJsIGlmIGl0IHNob3VsZCB1c2UgaG9zdCAobm8pIG9yIHRhcmdldCAoeWVzKSBzZXR0aW5ncworZXhwb3J0IFBFUkxDT05GSUdUQVJHRVQgPSAiJHtAaXNfdGFyZ2V0KGQpfSIKK2V4cG9ydCBQRVJMX0FSQ0hMSUIgPSAiJHtTVEFHSU5HX0xJQkRJUn0ke1BFUkxfT1dOX0RJUn0vcGVybC8ke0BnZXRfcGVybF92ZXJzaW9uKGQpfSIKK2V4cG9ydCBMRCA9ICIke0NDTER9IgorCitjcGFuX2J1aWxkX2RvX2NvbmZpZ3VyZSAoKSB7CisJaWYgWyAiJHtAaXNfdGFyZ2V0KGQpfSIgPSAieWVzIiBdOyB0aGVuCisJCSMgYnVpbGQgZm9yIHRhcmdldAorCQkuICR7U1RBR0lOR19MSUJESVJ9L3BlcmwvY29uZmlnLnNoCisJZmkKKworCXBlcmwgQnVpbGQuUEwgLS1pbnN0YWxsZGlycyB2ZW5kb3IgXAorCQkJCS0tZGVzdGRpciAke0R9IFwKKwkJCQktLWluc3RhbGxfcGF0aCBhcmNoPSIke2xpYmRpcn0vcGVybCIgXAorCQkJCS0taW5zdGFsbF9wYXRoIHNjcmlwdD0ke2JpbmRpcn0gXAorCQkJCS0taW5zdGFsbF9wYXRoIGJpbj0ke2JpbmRpcn0gXAorCQkJCS0taW5zdGFsbF9wYXRoIGJpbmRvYz0ke21hbmRpcn0vbWFuMSBcCisJCQkJLS1pbnN0YWxsX3BhdGggbGliZG9jPSR7bWFuZGlyfS9tYW4zIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtFWFRSQV9DUEFOX0JVSUxEX0ZMQUdTfQorfQorCitjcGFuX2J1aWxkX2RvX2NvbXBpbGUgKCkgeworICAgICAgICBwZXJsIEJ1aWxkCit9CisKK2NwYW5fYnVpbGRfZG9faW5zdGFsbCAoKSB7CisJcGVybCBCdWlsZCBpbnN0YWxsCit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29uZmlndXJlIGRvX2NvbXBpbGUgZG9faW5zdGFsbApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY3Jvc3MtY2FuYWRpYW4uYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Nyb3NzLWNhbmFkaWFuLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMwYTE2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Nyb3NzLWNhbmFkaWFuLmJiY2xhc3MKQEAgLTAsMCArMSwxODUgQEAKKyMKKyMgTk9URSAtIFdoZW4gdXNpbmcgdGhpcyBjbGFzcyB0aGUgdXNlciBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdAorIyBUUkFOU0xBVEVEX1RBUkdFVF9BUkNIIGlzIGFkZGVkIGludG8gUE4uIFRoaXMgZW5zdXJlcyB0aGF0IGlmIHRoZSBUQVJHRVRfQVJDSAorIyBpcyBjaGFuZ2VkLCBhbm90aGVyIG5hdGl2ZXNkayB4eHgtY2FuYWRpYW4tY3Jvc3MgY2FuIGJlIGluc3RhbGxlZAorIworCisKKyMgU0RLIHBhY2thZ2VzIGFyZSBidWlsdCBlaXRoZXIgZXhwbGljaXRseSBieSB0aGUgdXNlciwKKyMgb3IgaW5kaXJlY3RseSB2aWEgZGVwZW5kZW5jeS4gIE5vIG5lZWQgdG8gYmUgaW4gJ3dvcmxkJy4KK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgorQ0xBU1NPVkVSUklERSA9ICJjbGFzcy1jcm9zcy1jYW5hZGlhbiIKK1NUQUdJTkdfQklORElSX1RPT0xDSEFJTiA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9LyR7U0RLX0FSQ0h9JHtTREtfVkVORE9SfS0ke1NES19PU306JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiaW5kaXJfbmF0aXZlfS8ke1RBUkdFVF9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9IgorCisjCisjIFVwZGF0ZSBCQVNFX1BBQ0tBR0VfQVJDSCBhbmQgUEFDS0FHRV9BUkNIUworIworUEFDS0FHRV9BUkNIID0gIiR7U0RLX0FSQ0h9LSR7U0RLUEtHU1VGRklYfSIKK0NBTkFESUFORVhUUkFPUyA9ICJsaW51eC11Y2xpYmMgbGludXgtbXVzbCIKK0NBTkFESUFORVhUUkFWRU5ET1IgPSAiIgorTU9ESUZZVE9TID8/PSAiMSIKK3B5dGhvbiAoKSB7CisgICAgYXJjaHMgPSBkLmdldFZhcignUEFDS0FHRV9BUkNIUycsIFRydWUpLnNwbGl0KCkKKyAgICBzZGthcmNocyA9IFtdCisgICAgZm9yIGFyY2ggaW4gYXJjaHM6CisgICAgICAgIHNka2FyY2hzLmFwcGVuZChhcmNoICsgJy0ke1NES1BLR1NVRkZJWH0nKQorICAgIGQuc2V0VmFyKCdQQUNLQUdFX0FSQ0hTJywgIiAiLmpvaW4oc2RrYXJjaHMpKQorCisgICAgIyBBbGxvdyB0aGUgZm9sbG93aW5nIGNvZGUgc2VnbWVudCB0byBiZSBkaXNhYmxlZCwgZS5nLiBtZXRhLWVudmlyb25tZW50CisgICAgaWYgZC5nZXRWYXIoIk1PRElGWVRPUyIsIFRydWUpICE9ICIxIjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBkLmdldFZhcigiVENMSUJDIiwgVHJ1ZSkgPT0gImJhcmVtZXRhbCI6CisgICAgICAgIHJldHVybgorCisgICAgdG9zID0gZC5nZXRWYXIoIlRBUkdFVF9PUyIsIFRydWUpCisgICAgd2hpdGVsaXN0ID0gW10KKyAgICBmb3IgdmFyaWFudCBpbiBbIiIsICJzcGUiLCAieDMyIiwgImVhYmkiLCAibjMyIl06CisgICAgICAgIGZvciBsaWJjIGluIFsiIiwgInVjbGliYyIsICJtdXNsIl06CisgICAgICAgICAgICBlbnRyeSA9ICJsaW51eCIKKyAgICAgICAgICAgIGlmIHZhcmlhbnQgYW5kIGxpYmM6CisgICAgICAgICAgICAgICAgZW50cnkgPSBlbnRyeSArICItIiArIGxpYmMgKyB2YXJpYW50CisgICAgICAgICAgICBlbGlmIHZhcmlhbnQ6CisgICAgICAgICAgICAgICAgZW50cnkgPSBlbnRyeSArICItZ251IiArIHZhcmlhbnQKKyAgICAgICAgICAgIGVsaWYgbGliYzoKKyAgICAgICAgICAgICAgICBlbnRyeSA9IGVudHJ5ICsgIi0iICsgbGliYworICAgICAgICAgICAgd2hpdGVsaXN0LmFwcGVuZChlbnRyeSkKKyAgICBpZiB0b3Mgbm90IGluIHdoaXRlbGlzdDoKKyAgICAgICAgYmIuZmF0YWwoIkJ1aWxkaW5nIGNyb3NzLWNhbmRpYW4gZm9yIGFuIHVua25vd24gVEFSR0VUX1NZUyAoJXMpLCBwbGVhc2UgdXBkYXRlIGNyb3NzLWNhbmFkaWFuLmJiY2xhc3MiICUgZC5nZXRWYXIoIlRBUkdFVF9TWVMiLCBUcnVlKSkKKworICAgIGZvciBuIGluIFsiUFJPVklERVMiLCAiREVQRU5EUyJdOgorICAgICAgICBkLnNldFZhcihuLCBkLmdldFZhcihuLCBUcnVlKSkKKyAgICBkLnNldFZhcigiU1RBR0lOR19CSU5ESVJfVE9PTENIQUlOIiwgZC5nZXRWYXIoIlNUQUdJTkdfQklORElSX1RPT0xDSEFJTiIsIFRydWUpKQorICAgIGZvciBwcmVmaXggaW4gWyJBUiIsICJBUyIsICJETExUT09MIiwgIkNDIiwgIkNYWCIsICJHQ0MiLCAiTEQiLCAiTElQTyIsICJOTSIsICJPQkpEVU1QIiwgIlJBTkxJQiIsICJTVFJJUCIsICJXSU5EUkVTIl06CisgICAgICAgIG4gPSBwcmVmaXggKyAiX0ZPUl9UQVJHRVQiCisgICAgICAgIGQuc2V0VmFyKG4sIGQuZ2V0VmFyKG4sIFRydWUpKQorICAgICMgVGhpcyBpcyBhIGJpdCB1Z2x5LiBXZSBuZWVkIHRvIHplcm8gTElCQy9BQkkgZXh0ZW5zaW9uIHdoaWNoIHdpbGwgY2hhbmdlIFRBUkdFVF9PUworICAgICMgaG93ZXZlciB3ZSBuZWVkIHRoZSBvbGQgdmFsdWUgaW4gc29tZSB2YXJpYWJsZXMuIFdlIGV4cGFuZCB0aG9zZSBoZXJlIGZpcnN0LgorICAgIHRhcmNoID0gZC5nZXRWYXIoIlRBUkdFVF9BUkNIIiwgVHJ1ZSkKKyAgICBpZiB0YXJjaCA9PSAieDg2XzY0IjoKKyAgICAgICAgZC5zZXRWYXIoIkxJQkNFWFRFTlNJT04iLCAiIikKKyAgICAgICAgZC5zZXRWYXIoIkFCSUVYVEVOU0lPTiIsICIiKQorICAgICAgICBkLmFwcGVuZFZhcigiQ0FOQURJQU5FWFRSQU9TIiwgIiBsaW51eC1nbnV4MzIgbGludXgtdWNsaWJjeDMyIGxpbnV4LW11c2x4MzIiKQorICAgIGVsaWYgdGFyY2ggPT0gInBvd2VycGMiOgorICAgICAgICAjIFBvd2VyUEMgY2FuIGJ1aWxkICJsaW51eCIgYW5kICJsaW51eC1nbnVzcGUiCisgICAgICAgIGQuc2V0VmFyKCJMSUJDRVhURU5TSU9OIiwgIiIpCisgICAgICAgIGQuc2V0VmFyKCJBQklFWFRFTlNJT04iLCAiIikKKyAgICAgICAgZC5hcHBlbmRWYXIoIkNBTkFESUFORVhUUkFPUyIsICIgbGludXgtZ251c3BlIGxpbnV4LXVjbGliY3NwZSBsaW51eC1tdXNsc3BlIikKKyAgICBlbGlmIHRhcmNoID09ICJtaXBzNjQiOgorICAgICAgICBkLmFwcGVuZFZhcigiQ0FOQURJQU5FWFRSQU9TIiwgIiBsaW51eC1nbnVuMzIgbGludXgtdWNsaWJjbjMyIGxpbnV4LW11c2xuMzIiKQorICAgIGlmIHRhcmNoID09ICJhcm0iOgorICAgICAgICBkLnNldFZhcigiVEFSR0VUX09TIiwgImxpbnV4LWdudWVhYmkiKQorICAgIGVsc2U6CisgICAgICAgIGQuc2V0VmFyKCJUQVJHRVRfT1MiLCAibGludXgiKQorCisgICAgIyBBbHNvIG5lZWQgdG8gaGFuZGxlIG11bHRpbGliIHRhcmdldCB2ZW5kb3JzCisgICAgdmVuZG9ycyA9IGQuZ2V0VmFyKCJDQU5BRElBTkVYVFJBVkVORE9SIiwgVHJ1ZSkKKyAgICBpZiBub3QgdmVuZG9yczoKKyAgICAgICAgdmVuZG9ycyA9IGFsbF9tdWx0aWxpYl90dW5lX3ZhbHVlcyhkLCAnVEFSR0VUX1ZFTkRPUicpCisgICAgb3JpZ3ZlbmRvciA9IGQuZ2V0VmFyKCJUQVJHRVRfVkVORE9SX01VTFRJTElCX09SSUdJTkFMIiwgVHJ1ZSkKKyAgICBpZiBvcmlndmVuZG9yOgorICAgICAgICBkLnNldFZhcigiVEFSR0VUX1ZFTkRPUiIsIG9yaWd2ZW5kb3IpCisgICAgICAgIGlmIG9yaWd2ZW5kb3Igbm90IGluIHZlbmRvcnMuc3BsaXQoKToKKyAgICAgICAgICAgIHZlbmRvcnMgPSBvcmlndmVuZG9yICsgIiAiICsgdmVuZG9ycworICAgIGQuc2V0VmFyKCJDQU5BRElBTkVYVFJBVkVORE9SIiwgdmVuZG9ycykKK30KK01VTFRJTUFDSF9UQVJHRVRfU1lTID0gIiR7UEFDS0FHRV9BUkNIfSR7SE9TVF9WRU5ET1J9LSR7SE9TVF9PU30iCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK1NUQUdJTkdfRElSX0hPU1QgPSAiJHtTVEFHSU5HX0RJUn0vJHtIT1NUX0FSQ0h9LSR7U0RLUEtHU1VGRklYfSR7SE9TVF9WRU5ET1J9LSR7SE9TVF9PU30iCisKK1RPT0xDSEFJTl9PUFRJT05TID0gIiAtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUn0vJHtIT1NUX0FSQ0h9LSR7U0RLUEtHU1VGRklYfSR7SE9TVF9WRU5ET1J9LSR7SE9TVF9PU30iCisKK1BBVEhfYXBwZW5kID0gIjoke1RNUERJUn0vc3lzcm9vdHMvJHtIT1NUX0FSQ0h9LyR7YmluZGlyX2Nyb3NzfSIKK1BLR0hJU1RfRElSID0gIiR7VE1QRElSfS9wa2doaXN0b3J5LyR7SE9TVF9BUkNIfS0ke1NES1BLR1NVRkZJWH0ke0hPU1RfVkVORE9SfS0ke0hPU1RfT1N9LyIKKworSE9TVF9BUkNIID0gIiR7U0RLX0FSQ0h9IgorSE9TVF9WRU5ET1IgPSAiJHtTREtfVkVORE9SfSIKK0hPU1RfT1MgPSAiJHtTREtfT1N9IgorSE9TVF9QUkVGSVggPSAiJHtTREtfUFJFRklYfSIKK0hPU1RfQ0NfQVJDSCA9ICIke1NES19DQ19BUkNIfSIKK0hPU1RfTERfQVJDSCA9ICIke1NES19MRF9BUkNIfSIKK0hPU1RfQVNfQVJDSCA9ICIke1NES19BU19BUkNIfSIKKworI2Fzc2lnbiBEUEtHX0FSQ0gKK0RQS0dfQVJDSCA9ICIke1NES19BUkNIfSIKKworQ1BQRkxBR1MgPSAiJHtCVUlMRFNES19DUFBGTEFHU30iCitDRkxBR1MgPSAiJHtCVUlMRFNES19DRkxBR1N9IgorQ1hYRkxBR1MgPSAiJHtCVUlMRFNES19DRkxBR1N9IgorTERGTEFHUyA9ICIke0JVSUxEU0RLX0xERkxBR1N9IFwKKyAgICAgICAgICAgLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKKyAgICAgICAgICAgLVdsLC1ycGF0aCwke2xpYmRpcn0vLi4gIgorCitERVBFTkRTX0dFVFRFWFQgPSAiZ2V0dGV4dC1uYXRpdmUgbmF0aXZlc2RrLWdldHRleHQiCisKKyMKKyMgV2UgbmVlZCBjaHJwYXRoID49IDAuMTQgdG8gZW5zdXJlIHdlIGNhbiBkZWFsIHdpdGggMzIgYW5kIDY0IGJpdAorIyBiaW5hcmllcworIworREVQRU5EU19hcHBlbmQgPSAiIGNocnBhdGgtcmVwbGFjZW1lbnQtbmF0aXZlIgorRVhUUkFOQVRJVkVQQVRIICs9ICJjaHJwYXRoLW5hdGl2ZSIKKworIyBQYXRoIG1hbmdsaW5nIG5lZWRlZCBieSB0aGUgY3Jvc3MgcGFja2FnaW5nCisjIE5vdGUgdGhhdCB3ZSB1c2UgOj0gaGVyZSB0byBlbnN1cmUgdGhhdCBsaWJkaXIgYW5kIGluY2x1ZGVkaXIgYXJlCisjIHRhcmdldCBwYXRocy4KK3RhcmdldF9iYXNlX3ByZWZpeCA6PSAiJHtiYXNlX3ByZWZpeH0iCit0YXJnZXRfcHJlZml4IDo9ICIke3ByZWZpeH0iCit0YXJnZXRfZXhlY19wcmVmaXggOj0gIiR7ZXhlY19wcmVmaXh9IgordGFyZ2V0X2Jhc2VfbGliZGlyID0gIiR7dGFyZ2V0X2Jhc2VfcHJlZml4fS8ke2Jhc2VsaWJ9IgordGFyZ2V0X2xpYmRpciA9ICIke3RhcmdldF9leGVjX3ByZWZpeH0vJHtiYXNlbGlifSIKK3RhcmdldF9pbmNsdWRlZGlyIDo9ICIke2luY2x1ZGVkaXJ9IgorCisjIENoYW5nZSB0byBwbGFjZSBmaWxlcyBpbiBTREtQQVRICitiYXNlX3ByZWZpeCA9ICIke1NES1BBVEhOQVRJVkV9IgorcHJlZml4ID0gIiR7U0RLUEFUSE5BVElWRX0ke3ByZWZpeF9uYXRpdmVzZGt9IgorZXhlY19wcmVmaXggPSAiJHtTREtQQVRITkFUSVZFfSR7cHJlZml4X25hdGl2ZXNka30iCitiaW5kaXIgPSAiJHtleGVjX3ByZWZpeH0vYmluLyR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30iCitzYmluZGlyID0gIiR7YmluZGlyfSIKK2Jhc2VfYmluZGlyID0gIiR7YmluZGlyfSIKK2Jhc2Vfc2JpbmRpciA9ICIke2JpbmRpcn0iCitsaWJkaXIgPSAiJHtleGVjX3ByZWZpeH0vbGliLyR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30iCitsaWJleGVjZGlyID0gIiR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMvJHtUQVJHRVRfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfSIKKworRklMRVNfJHtQTn0gPSAiJHtwcmVmaXh9IgorRklMRVNfJHtQTn0tZGJnICs9ICIke3ByZWZpeH0vLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtwcmVmaXh9L2Jpbi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICIKKworZXhwb3J0IFBLR19DT05GSUdfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0ke2xheW91dF9saWJkaXJ9L3BrZ2NvbmZpZyIKK2V4cG9ydCBQS0dfQ09ORklHX1NZU1JPT1RfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0iCisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorZG9fcGFja2FnZWRhdGFbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorCitVU0VfTkxTID0gIiR7U0RLVVNFX05MU30iCisKKyMgV2UgaGF2ZSB0byB1cyBUQVJHRVRfQVJDSCBidXQgd2UgY2FyZSBhYm91dCB0aGUgYWJzb2x1dGUgdmFsdWUKKyMgYW5kIG5vdCBhbnkgcGFydGljdWxhciB0dW5lIHRoYXQgaXMgZW5hYmxlZC4KK1RBUkdFVF9BUkNIW3ZhcmRlcHNleGNsdWRlXSA9ICJUVU5FX0FSQ0giCisKKyMgSWYgTUxQUkVGSVggaXMgc2V0IGJ5IG11bHRpbGliIGNvZGUsIHNobGlicworIyBwb2ludHMgdG8gdGhlIHdyb25nIHBsYWNlIHNvIGZvcmNlIGl0CitTSExJQlNESVJTID0gIiR7UEtHREFUQV9ESVJ9L25hdGl2ZXNkay1zaGxpYnMyIgorU0hMSUJTV09SS0RJUiA9ICIke1BLR0RBVEFfRElSfS9uYXRpdmVzZGstc2hsaWJzMiIKKworY3Jvc3NfY2FuYWRpYW5fYmluZGlybGlua3MgKCkgeworCWZvciBpIGluIGxpbnV4ICR7Q0FOQURJQU5FWFRSQU9TfQorCWRvCisJCWZvciB2IGluICR7Q0FOQURJQU5FWFRSQVZFTkRPUn0KKwkJZG8KKwkJCWQ9JHtEfSR7YmluZGlyfS8uLi8ke1RBUkdFVF9BUkNIfSR2LSRpCisJCQlpZiBbIC1kICRkIF07CisJCQl0aGVuCisJCQkgICAgY29udGludWUKKwkJCWZpCisJCQlpbnN0YWxsIC1kICRkCisJCQlmb3IgaiBpbiBgbHMgJHtEfSR7YmluZGlyfWAKKwkJCWRvCisJCQkJcD0ke1RBUkdFVF9BUkNIfSR2LSRpLWBlY2hvICRqIHwgc2VkIC1lIHMsJHtUQVJHRVRfUFJFRklYfSwsYAorCQkJCWxuIC1zIC4uLyR7VEFSR0VUX1NZU30vJGogJGQvJHAKKwkJCWRvbmUKKwkJZG9uZQorICAgICAgIGRvbmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Nyb3NzLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcm9zcy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYWI1YjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcm9zcy5iYmNsYXNzCkBAIC0wLDAgKzEsNzcgQEAKK2luaGVyaXQgcmVsb2NhdGFibGUKKworIyBDcm9zcyBwYWNrYWdlcyBhcmUgYnVpbHQgaW5kaXJlY3RseSB2aWEgZGVwZW5kZW5jeSwKKyMgbm8gbmVlZCBmb3IgdGhlbSB0byBiZSBhIGRpcmVjdCB0YXJnZXQgb2YgJ3dvcmxkJworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK0NMQVNTT1ZFUlJJREUgPSAiY2xhc3MtY3Jvc3MiCitQQUNLQUdFUyA9ICIiCitQQUNLQUdFU19EWU5BTUlDID0gIiIKK1BBQ0tBR0VTX0RZTkFNSUNfY2xhc3MtbmF0aXZlID0gIiIKKworSE9TVF9BUkNIID0gIiR7QlVJTERfQVJDSH0iCitIT1NUX1ZFTkRPUiA9ICIke0JVSUxEX1ZFTkRPUn0iCitIT1NUX09TID0gIiR7QlVJTERfT1N9IgorSE9TVF9QUkVGSVggPSAiJHtCVUlMRF9QUkVGSVh9IgorSE9TVF9DQ19BUkNIID0gIiR7QlVJTERfQ0NfQVJDSH0iCitIT1NUX0xEX0FSQ0ggPSAiJHtCVUlMRF9MRF9BUkNIfSIKK0hPU1RfQVNfQVJDSCA9ICIke0JVSUxEX0FTX0FSQ0h9IgorCitTVEFHSU5HX0RJUl9IT1NUID0gIiR7U1RBR0lOR19ESVJ9LyR7SE9TVF9BUkNIfSR7SE9TVF9WRU5ET1J9LSR7SE9TVF9PU30iCisKK1BBQ0tBR0VfQVJDSCA9ICIke0JVSUxEX0FSQ0h9IgorCitNVUxUSU1BQ0hfVEFSR0VUX1NZUyA9ICIke1BBQ0tBR0VfQVJDSH0ke0JVSUxEX1ZFTkRPUn0tJHtCVUlMRF9PU30iCisKK2V4cG9ydCBQS0dfQ09ORklHX0RJUiA9ICIke2V4ZWNfcHJlZml4fS9saWIvcGtnY29uZmlnIgorZXhwb3J0IFBLR19DT05GSUdfU1lTUk9PVF9ESVIgPSAiIgorCitDUFBGTEFHUyA9ICIke0JVSUxEX0NQUEZMQUdTfSIKK0NGTEFHUyA9ICIke0JVSUxEX0NGTEFHU30iCitDWFhGTEFHUyA9ICIke0JVSUxEX0NGTEFHU30iCitMREZMQUdTID0gIiR7QlVJTERfTERGTEFHU30iCitMREZMQUdTX2J1aWxkLWRhcndpbiA9ICItTCR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSIKKworVE9PTENIQUlOX09QVElPTlMgPSAiIgorCitERVBFTkRTX0dFVFRFWFQgPSAiZ2V0dGV4dC1uYXRpdmUiCisKKyMgUGF0aCBtYW5nbGluZyBuZWVkZWQgYnkgdGhlIGNyb3NzIHBhY2thZ2luZworIyBOb3RlIHRoYXQgd2UgdXNlIDo9IGhlcmUgdG8gZW5zdXJlIHRoYXQgbGliZGlyIGFuZCBpbmNsdWRlZGlyIGFyZQorIyB0YXJnZXQgcGF0aHMuCit0YXJnZXRfYmFzZV9wcmVmaXggOj0gIiR7YmFzZV9wcmVmaXh9IgordGFyZ2V0X3ByZWZpeCA6PSAiJHtwcmVmaXh9IgordGFyZ2V0X2V4ZWNfcHJlZml4IDo9ICIke2V4ZWNfcHJlZml4fSIKK3RhcmdldF9iYXNlX2xpYmRpciA9ICIke3RhcmdldF9iYXNlX3ByZWZpeH0vJHtiYXNlbGlifSIKK3RhcmdldF9saWJkaXIgPSAiJHt0YXJnZXRfZXhlY19wcmVmaXh9LyR7YmFzZWxpYn0iCit0YXJnZXRfaW5jbHVkZWRpciA6PSAiJHtpbmNsdWRlZGlyfSIKKworIyBPdmVycmlkZXMgZm9yIHBhdGhzCitDUk9TU19UQVJHRVRfU1lTX0RJUiA9ICIke1RBUkdFVF9TWVN9IgorcHJlZml4ID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0iCitiYXNlX3ByZWZpeCA9ICIke1NUQUdJTkdfRElSX05BVElWRX0iCitleGVjX3ByZWZpeCA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9IgorYmluZGlyID0gIiR7ZXhlY19wcmVmaXh9L2Jpbi8ke0NST1NTX1RBUkdFVF9TWVNfRElSfSIKK3NiaW5kaXIgPSAiJHtiaW5kaXJ9IgorYmFzZV9iaW5kaXIgPSAiJHtiaW5kaXJ9IgorYmFzZV9zYmluZGlyID0gIiR7YmluZGlyfSIKK2xpYmRpciA9ICIke2V4ZWNfcHJlZml4fS9saWIvJHtDUk9TU19UQVJHRVRfU1lTX0RJUn0iCitsaWJleGVjZGlyID0gIiR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMvJHtDUk9TU19UQVJHRVRfU1lTX0RJUn0iCisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtTWVNST09UX0RFU1RESVJ9LyR7U1RBR0lOR19ESVJfTkFUSVZFfS8iCitkb19wb3B1bGF0ZV9zeXNyb290W3N0YW1wLWV4dHJhLWluZm9dID0gIiIKK2RvX3BhY2thZ2VkYXRhW3N0YW1wLWV4dHJhLWluZm9dID0gIiIKKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCit9CisKK1VTRV9OTFMgPSAibm8iCisKK2RlbHRhc2sgcGFja2FnZQorZGVsdGFzayBwYWNrYWdlZGF0YQorZGVsdGFzayBwYWNrYWdlX3FhCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGVfaXBrCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGVfZGViCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGVfcnBtCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Nyb3Nzc2RrLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcm9zc3Nkay5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZDVjZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcm9zc3Nkay5iYmNsYXNzCkBAIC0wLDAgKzEsMzYgQEAKK2luaGVyaXQgY3Jvc3MKKworQ0xBU1NPVkVSUklERSA9ICJjbGFzcy1jcm9zc3NkayIKK01BQ0hJTkVPVkVSUklERVMgPSAiIgorUEFDS0FHRV9BUkNIID0gIiR7U0RLX0FSQ0h9IgorcHl0aG9uICgpIHsKKwkjIHNldCBUVU5FX1BLR0FSQ0ggdG8gU0RLX0FSQ0gKKwlkLnNldFZhcignVFVORV9QS0dBUkNIJywgZC5nZXRWYXIoJ1NES19BUkNIJywgVHJ1ZSkpCit9CisKK1NUQUdJTkdfRElSX1RBUkdFVCA9ICIke1NUQUdJTkdfRElSfS8ke1NES19BUkNIfS0ke1NES1BLR1NVRkZJWH0ke1NES19WRU5ET1J9LSR7U0RLX09TfSIKK1NUQUdJTkdfQklORElSX1RPT0xDSEFJTiA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9LyR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30iCisKK1RBUkdFVF9BUkNIID0gIiR7U0RLX0FSQ0h9IgorVEFSR0VUX1ZFTkRPUiA9ICIke1NES19WRU5ET1J9IgorVEFSR0VUX09TID0gIiR7U0RLX09TfSIKK1RBUkdFVF9QUkVGSVggPSAiJHtTREtfUFJFRklYfSIKK1RBUkdFVF9DQ19BUkNIID0gIiR7U0RLX0NDX0FSQ0h9IgorVEFSR0VUX0xEX0FSQ0ggPSAiJHtTREtfTERfQVJDSH0iCitUQVJHRVRfQVNfQVJDSCA9ICIke1NES19BU19BUkNIfSIKK1RBUkdFVF9GUFUgPSAiIgorCit0YXJnZXRfbGliZGlyID0gIiR7U0RLUEFUSE5BVElWRX0ke2xpYmRpcl9uYXRpdmVzZGt9IgordGFyZ2V0X2luY2x1ZGVkaXIgPSAiJHtTREtQQVRITkFUSVZFfSR7aW5jbHVkZWRpcl9uYXRpdmVzZGt9IgordGFyZ2V0X2Jhc2VfbGliZGlyID0gIiR7U0RLUEFUSE5BVElWRX0ke2Jhc2VfbGliZGlyX25hdGl2ZXNka30iCit0YXJnZXRfcHJlZml4ID0gIiR7U0RLUEFUSE5BVElWRX0ke3ByZWZpeF9uYXRpdmVzZGt9IgordGFyZ2V0X2V4ZWNfcHJlZml4ID0gIiR7U0RLUEFUSE5BVElWRX0ke3ByZWZpeF9uYXRpdmVzZGt9IgorYmFzZWxpYiA9ICJsaWIiCisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorZG9fcGFja2FnZWRhdGFbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorCisjIE5lZWQgdG8gZm9yY2UgdGhpcyB0byBlbnN1cmUgY29uc2l0ZW5jeSBhY2Nyb3NzIGFyY2hpdGVjdHVyZXMKK0VYVFJBX09FQ09ORl9HQ0NfRkxPQVQgPSAiIgorCitVU0VfTkxTID0gIm5vIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGViaWFuLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kZWJpYW4uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjY5NzlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGViaWFuLmJiY2xhc3MKQEAgLTAsMCArMSwxNDEgQEAKKyMgRGViaWFuIHBhY2thZ2UgcmVuYW1pbmcgb25seSBvY2N1cnMgd2hlbiBhIHBhY2thZ2UgaXMgYnVpbHQKKyMgV2UgdGhlcmVmb3JlIGhhdmUgdG8gbWFrZSBzdXJlIHdlIGJ1aWxkIGFsbCBydW50aW1lIHBhY2thZ2VzCisjIGJlZm9yZSBidWlsZGluZyB0aGUgY3VycmVudCBwYWNrYWdlIHRvIG1ha2UgdGhlIHBhY2thZ2VzIHJ1bnRpbWUKKyMgZGVwZW5kcyBhcmUgY29ycmVjdAorIworIyBDdXN0b20gbGlicmFyeSBwYWNrYWdlIG5hbWVzIGNhbiBiZSBkZWZpbmVkIHNldHRpbmcKKyMgREVCSUFOTkFNRV8gKyBwa2duYW1lIHRvIHRoZSBkZXNpcmVkIG5hbWUuCisjCisjIEJldHRlciBleHByZXNzZWQgYXMgZW5zdXJlIGFsbCBSREVQRU5EUyBwYWNrYWdlIGJlZm9yZSB3ZSBwYWNrYWdlCisjIFRoaXMgbWVhbnMgd2UgY2FuJ3QgaGF2ZSBjaXJjdWxhciBSREVQRU5EUy9SUkVDT01NRU5EUworCitBVVRPX0xJQk5BTUVfUEtHUyA9ICIke1BBQ0tBR0VTfSIKKworaW5oZXJpdCBwYWNrYWdlCisKK0RFQklBTlJERVAgPSAiZG9fcGFja2FnZWRhdGEiCitkb19wYWNrYWdlX3dyaXRlX2lwa1tyZGVwdGFza10gPSAiJHtERUJJQU5SREVQfSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW3JkZXB0YXNrXSA9ICIke0RFQklBTlJERVB9IgorZG9fcGFja2FnZV93cml0ZV90YXJbcmRlcHRhc2tdID0gIiR7REVCSUFOUkRFUH0iCitkb19wYWNrYWdlX3dyaXRlX3JwbVtyZGVwdGFza10gPSAiJHtERUJJQU5SREVQfSIKKworcHl0aG9uICgpIHsKKyAgICBpZiBub3QgZC5nZXRWYXIoIlBBQ0tBR0VTIiwgVHJ1ZSk6CisgICAgICAgIGQuc2V0VmFyKCJERUJJQU5SREVQIiwgIiIpCit9CisKK3B5dGhvbiBkZWJpYW5fcGFja2FnZV9uYW1lX2hvb2sgKCkgeworICAgIGltcG9ydCBnbG9iLCBjb3B5LCBzdGF0LCBlcnJubywgcmUKKworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIGJpbl9yZSA9IHJlLmNvbXBpbGUoIi4qL3M/IiArIG9zLnBhdGguYmFzZW5hbWUoZC5nZXRWYXIoImJpbmRpciIsIFRydWUpKSArICIkIikKKyAgICBsaWJfcmUgPSByZS5jb21waWxlKCIuKi8iICsgb3MucGF0aC5iYXNlbmFtZShkLmdldFZhcigibGliZGlyIiwgVHJ1ZSkpICsgIiQiKQorICAgIHNvX3JlID0gcmUuY29tcGlsZSgibGliLipcLnNvIikKKworICAgIGRlZiBzb2NydW5jaChzKToKKyAgICAgICAgcyA9IHMubG93ZXIoKS5yZXBsYWNlKCdfJywgJy0nKQorICAgICAgICBtID0gcmUubWF0Y2goIl4oLiopKC4pXC5zb1wuKC4qKSQiLCBzKQorICAgICAgICBpZiBtIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBpZiBtLmdyb3VwKDIpIGluICcwMTIzNDU2Nzg5JzoKKyAgICAgICAgICAgIGJpbiA9ICclcyVzLSVzJyAlIChtLmdyb3VwKDEpLCBtLmdyb3VwKDIpLCBtLmdyb3VwKDMpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmluID0gbS5ncm91cCgxKSArIG0uZ3JvdXAoMikgKyBtLmdyb3VwKDMpCisgICAgICAgIGRldiA9IG0uZ3JvdXAoMSkgKyBtLmdyb3VwKDIpCisgICAgICAgIHJldHVybiAoYmluLCBkZXYpCisKKyAgICBkZWYgaXNleGVjKHBhdGgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gb3Muc3RhdChwYXRoKQorICAgICAgICBleGNlcHQgKG9zLmVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICByZXR1cm4gKHNbc3RhdC5TVF9NT0RFXSAmIHN0YXQuU19JRVhFQykKKworICAgIGRlZiBhZGRfcnByb3ZpZGVzKHBrZywgZCk6CisgICAgICAgIG5ld3BrZyA9IGQuZ2V0VmFyKCdQS0dfJyArIHBrZywgRmFsc2UpCisgICAgICAgIGlmIG5ld3BrZyBhbmQgbmV3cGtnICE9IHBrZzoKKyAgICAgICAgICAgIHByb3ZzID0gKGQuZ2V0VmFyKCdSUFJPVklERVNfJyArIHBrZywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgICAgIGlmIHBrZyBub3QgaW4gcHJvdnM6CisgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ1JQUk9WSURFU18nICsgcGtnLCAiICIgKyBwa2cgKyAiICg9IiArIGQuZ2V0VmFyKCJQS0dWIiwgVHJ1ZSkgKyAiKSIpCisKKyAgICBkZWYgYXV0b19saWJuYW1lKHBhY2thZ2VzLCBvcmlnX3BrZyk6CisgICAgICAgIHNvbmFtZXMgPSBbXQorICAgICAgICBoYXNfYmlucyA9IDAKKyAgICAgICAgaGFzX2xpYnMgPSAwCisgICAgICAgIGZvciBmaWxlIGluIHBrZ2ZpbGVzW29yaWdfcGtnXToKKyAgICAgICAgICAgIHJvb3QgPSBvcy5wYXRoLmRpcm5hbWUoZmlsZSkKKyAgICAgICAgICAgIGlmIGJpbl9yZS5tYXRjaChyb290KToKKyAgICAgICAgICAgICAgICBoYXNfYmlucyA9IDEKKyAgICAgICAgICAgIGlmIGxpYl9yZS5tYXRjaChyb290KToKKyAgICAgICAgICAgICAgICBoYXNfbGlicyA9IDEKKyAgICAgICAgICAgICAgICBpZiBzb19yZS5tYXRjaChvcy5wYXRoLmJhc2VuYW1lKGZpbGUpKToKKyAgICAgICAgICAgICAgICAgICAgY21kID0gKGQuZ2V0VmFyKCdUQVJHRVRfUFJFRklYJywgVHJ1ZSkgb3IgIiIpICsgIm9iamR1bXAgLXAgIiArIGZpbGUgKyAiIDI+L2Rldi9udWxsIgorICAgICAgICAgICAgICAgICAgICBmZCA9IG9zLnBvcGVuKGNtZCkKKyAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBmZC5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgICAgICBmZC5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCJccytTT05BTUVccysoW15cc10qKSIsIGwpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBtIGFuZCBub3QgbS5ncm91cCgxKSBpbiBzb25hbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbmFtZXMuYXBwZW5kKG0uZ3JvdXAoMSkpCisKKyAgICAgICAgYmIuZGVidWcoMSwgJ0xJQk5BTUVTOiBwa2cgJXMgbGlicyAlZCBiaW5zICVkIHNvbmFtZXMgJXMnICUgKG9yaWdfcGtnLCBoYXNfbGlicywgaGFzX2JpbnMsIHNvbmFtZXMpKQorICAgICAgICBzb25hbWUgPSBOb25lCisgICAgICAgIGlmIGxlbihzb25hbWVzKSA9PSAxOgorICAgICAgICAgICAgc29uYW1lID0gc29uYW1lc1swXQorICAgICAgICBlbGlmIGxlbihzb25hbWVzKSA+IDE6CisgICAgICAgICAgICBsZWFkID0gZC5nZXRWYXIoJ0xFQURfU09OQU1FJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGxlYWQ6CisgICAgICAgICAgICAgICAgciA9IHJlLmNvbXBpbGUobGVhZCkKKyAgICAgICAgICAgICAgICBmaWx0ZXJlZCA9IFtdCisgICAgICAgICAgICAgICAgZm9yIHMgaW4gc29uYW1lczoKKyAgICAgICAgICAgICAgICAgICAgaWYgci5tYXRjaChzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkLmFwcGVuZChzKQorICAgICAgICAgICAgICAgIGlmIGxlbihmaWx0ZXJlZCkgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgc29uYW1lID0gZmlsdGVyZWRbMF0KKyAgICAgICAgICAgICAgICBlbGlmIGxlbihmaWx0ZXJlZCkgPiAxOgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJNdWx0aXBsZSBtYXRjaGVzICglcykgZm9yIExFQURfU09OQU1FICclcyciICUgKCIsICIuam9pbihmaWx0ZXJlZCksIGxlYWQpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIk11bHRpcGxlIGxpYnJhcmllcyAoJXMpIGZvdW5kLCBidXQgTEVBRF9TT05BTUUgJyVzJyBkb2Vzbid0IG1hdGNoIGFueSBvZiB0aGVtIiAlICgiLCAiLmpvaW4oc29uYW1lcyksIGxlYWQpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJNdWx0aXBsZSBsaWJyYXJpZXMgKCVzKSBmb3VuZCBhbmQgTEVBRF9TT05BTUUgbm90IGRlZmluZWQiICUgIiwgIi5qb2luKHNvbmFtZXMpKQorCisgICAgICAgIGlmIGhhc19saWJzIGFuZCBub3QgaGFzX2JpbnMgYW5kIHNvbmFtZToKKyAgICAgICAgICAgIHNvbmFtZV9yZXN1bHQgPSBzb2NydW5jaChzb25hbWUpCisgICAgICAgICAgICBpZiBzb25hbWVfcmVzdWx0OgorICAgICAgICAgICAgICAgIChwa2duYW1lLCBkZXZuYW1lKSA9IHNvbmFtZV9yZXN1bHQKKyAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIGlmIChkLmdldFZhcignUEtHXycgKyBwa2csIEZhbHNlKSBvciBkLmdldFZhcignREVCSUFOX05PQVVUT05BTUVfJyArIHBrZywgRmFsc2UpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9ycHJvdmlkZXMocGtnLCBkKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZGViaWFuX3BuID0gZC5nZXRWYXIoJ0RFQklBTk5BTUVfJyArIHBrZywgRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIGlmIGRlYmlhbl9wbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BrZyA9IGRlYmlhbl9wbgorICAgICAgICAgICAgICAgICAgICBlbGlmIHBrZyA9PSBvcmlnX3BrZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BrZyA9IHBrZ25hbWUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BrZyA9IHBrZy5yZXBsYWNlKG9yaWdfcGtnLCBkZXZuYW1lLCAxKQorICAgICAgICAgICAgICAgICAgICBtbHByZT1kLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICBpZiBtbHByZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdwa2cuZmluZChtbHByZSkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdwa2cgPSBtbHByZSArIG5ld3BrZworICAgICAgICAgICAgICAgICAgICBpZiBuZXdwa2cgIT0gcGtnOgorICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIoJ1BLR18nICsgcGtnLCBuZXdwa2cpCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRfcnByb3ZpZGVzKHBrZywgZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFkZF9ycHJvdmlkZXMob3JpZ19wa2csIGQpCisKKyAgICAjIHJldmVyc2VkIHNvcnQgaXMgbmVlZGVkIHdoZW4gc29tZSBwYWNrYWdlIGlzIHN1YnN0cmluZyBvZiBhbm90aGVyCisgICAgIyBpZSBpbiBuY3Vyc2VzIHdlIGdldCB3aXRob3V0IHJldmVyc2Ugc29ydDogCisgICAgIyBERUJVRzogTElCTkFNRVM6IHBrZ25hbWUgbGlidGljNSBkZXZuYW1lIGxpYnRpYyBwa2cgbmN1cnNlcy1saWJ0aWMgb3JpZ19wa2cgbmN1cnNlcy1saWJ0aWMgZGViaWFuX3BuIE5vbmUgbmV3cGtnIGxpYnRpYzUKKyAgICAjIGFuZCBsYXRlcgorICAgICMgREVCVUc6IExJQk5BTUVTOiBwa2duYW1lIGxpYnRpYzUgZGV2bmFtZSBsaWJ0aWMgcGtnIG5jdXJzZXMtbGlidGljdyBvcmlnX3BrZyBuY3Vyc2VzLWxpYnRpYyBkZWJpYW5fcG4gTm9uZSBuZXdwa2cgbGlidGljdworICAgICMgc28gd2UgbmVlZCB0byBoYW5kbGUgbmN1cnNlcy1saWJ0aWN3LT5saWJ0aWN3NSBiZWZvcmUgbmN1cnNlcy1saWJ0aWMtPmxpYnRpYzUKKyAgICBmb3IgcGtnIGluIHNvcnRlZCgoZC5nZXRWYXIoJ0FVVE9fTElCTkFNRV9QS0dTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCksIHJldmVyc2U9VHJ1ZSk6CisgICAgICAgIGF1dG9fbGlibmFtZShwYWNrYWdlcywgcGtnKQorfQorCitFWFBPUlRfRlVOQ1RJT05TIHBhY2thZ2VfbmFtZV9ob29rCisKK0RFQklBTl9OQU1FUyA9ICIxIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kZXBsb3kuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2RlcGxveS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ZjVlNGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kZXBsb3kuYmJjbGFzcwpAQCAtMCwwICsxLDEwIEBACitERVBMT1lESVIgPSAiJHtXT1JLRElSfS9kZXBsb3ktJHtQTn0iCitTU1RBVEVUQVNLUyArPSAiZG9fZGVwbG95IgorZG9fZGVwbG95W3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7REVQTE9ZRElSfSIKK2RvX2RlcGxveVtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtERVBMT1lfRElSX0lNQUdFfSIKKworcHl0aG9uIGRvX2RlcGxveV9zZXRzY2VuZSAoKSB7CisgICAgc3N0YXRlX3NldHNjZW5lKGQpCit9CithZGR0YXNrIGRvX2RlcGxveV9zZXRzY2VuZQorZG9fZGVwbG95W2RpcnNdID0gIiR7REVQTE9ZRElSfSAke0J9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGV2c2hlbGwuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2RldnNoZWxsLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ1MTQzNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2RldnNoZWxsLmJiY2xhc3MKQEAgLTAsMCArMSwxNTYgQEAKK2luaGVyaXQgdGVybWluYWwKKworREVWU0hFTEwgPSAiJHtTSEVMTH0iCisKK3B5dGhvbiBkb19kZXZzaGVsbCAoKSB7CisgICAgaWYgZC5nZXRWYXJGbGFnKCJkb19kZXZzaGVsbCIsICJtYW51YWxmYWtlcm9vdCIpOgorICAgICAgIGQucHJlcGVuZFZhcigiREVWU0hFTEwiLCAicHNldWRvICIpCisgICAgICAgZmFrZWVudiA9IGQuZ2V0VmFyKCJGQUtFUk9PVEVOViIsIFRydWUpLnNwbGl0KCkKKyAgICAgICBmb3IgZiBpbiBmYWtlZW52OgorICAgICAgICAgICAgayA9IGYuc3BsaXQoIj0iKQorICAgICAgICAgICAgZC5zZXRWYXIoa1swXSwga1sxXSkgICAgICAgICAgIAorICAgICAgICAgICAgZC5hcHBlbmRWYXIoIk9FX1RFUk1JTkFMX0VYUE9SVFMiLCAiICIgKyBrWzBdKQorICAgICAgIGQuZGVsVmFyRmxhZygiZG9fZGV2c2hlbGwiLCAiZmFrZXJvb3QiKQorCisgICAgb2VfdGVybWluYWwoZC5nZXRWYXIoJ0RFVlNIRUxMJywgVHJ1ZSksICdPcGVuRW1iZWRkZWQgRGV2ZWxvcGVyIFNoZWxsJywgZCkKK30KKworYWRkdGFzayBkZXZzaGVsbCBhZnRlciBkb19wYXRjaAorCisjIFRoZSBkaXJlY3RvcnkgdGhhdCB0aGUgdGVybWluYWwgc3RhcnRzIGluCitERVZTSEVMTF9TVEFSVERJUiA/PSAiJHtTfSIKK2RvX2RldnNoZWxsW2RpcnNdID0gIiR7REVWU0hFTExfU1RBUlRESVJ9IgorZG9fZGV2c2hlbGxbbm9zdGFtcF0gPSAiMSIKKworIyBkZXZzaGVsbCBhbmQgZmFrZXJvb3QvcHNldWRvIG5lZWQgY2FyZWZ1bCBoYW5kbGluZyBzaW5jZSBvbmx5IHRoZSBmaW5hbAorIyBjb21tYW5kIHNob3VsZCBydW4gdW5kZXIgZmFrZXJvb3QgZW11bGF0aW9uLCBhbnkgWCBjb25uZWN0aW9uIHNob3VsZAorIyBiZSBkb25lIGFzIHRoZSBub3JtYWwgdXNlci4gV2UgdGhlcmZvcmUgY2FyZWZ1bGx5IGNvbnN0cnVjdCB0aGUgZW52aW9ubWVudAorIyBtYW51YWxseQorcHl0aG9uICgpIHsKKyAgICBpZiBkLmdldFZhckZsYWcoImRvX2RldnNoZWxsIiwgImZha2Vyb290Iik6CisgICAgICAgIyBXZSBuZWVkIHRvIHNpZ25hbCBvdXIgY29kZSB0aGF0IHdlIHdhbnQgZmFrZXJvb3QgaG93ZXZlciB3ZQorICAgICAgICMgY2FuJ3QgbWFuaXB1bGF0ZSB0aGUgZW52aXJvbm1lbnQgYW5kIHZhcmlhYmxlcyBoZXJlIHlldCAoc2VlIFlPQ1RPICM0Nzk1KQorICAgICAgIGQuc2V0VmFyRmxhZygiZG9fZGV2c2hlbGwiLCAibWFudWFsZmFrZXJvb3QiLCAiMSIpCisgICAgICAgZC5kZWxWYXJGbGFnKCJkb19kZXZzaGVsbCIsICJmYWtlcm9vdCIpCit9IAorCitkZWYgZGV2cHlzaGVsbChkKToKKworICAgIGltcG9ydCBjb2RlCisgICAgaW1wb3J0IHNlbGVjdAorICAgIGltcG9ydCBzaWduYWwKKyAgICBpbXBvcnQgdGVybWlvcworCisgICAgbSwgcyA9IG9zLm9wZW5wdHkoKQorICAgIHNuYW1lID0gb3MudHR5bmFtZShzKQorCisgICAgZGVmIG5vZWNob2ljYW5vbihmZCk6CisgICAgICAgIG9sZCA9IHRlcm1pb3MudGNnZXRhdHRyKGZkKQorICAgICAgICBvbGRbM10gPSBvbGRbM10gJn4gdGVybWlvcy5FQ0hPICZ+IHRlcm1pb3MuSUNBTk9OCisgICAgICAgICMgJn4gdGVybWlvcy5JU0lHCisgICAgICAgIHRlcm1pb3MudGNzZXRhdHRyKGZkLCB0ZXJtaW9zLlRDU0FEUkFJTiwgb2xkKQorICAgIAorICAgICMgTm8gZWNobyBvciBidWZmZXJpbmcgb3ZlciB0aGUgcHR5CisgICAgbm9lY2hvaWNhbm9uKHMpCisKKyAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICBpZiBwaWQ6CisgICAgICAgIG9zLmNsb3NlKG0pCisgICAgICAgIG9lX3Rlcm1pbmFsKCJvZXB5ZGV2c2hlbGwtaW50ZXJuYWwucHkgJXMgJWQiICUgKHNuYW1lLCBwaWQpLCAnT3BlbkVtYmVkZGVkIERldmVsb3BlciBQeVNoZWxsJywgZCkKKyAgICAgICAgb3MuX2V4aXQoMCkKKyAgICBlbHNlOgorICAgICAgICBvcy5jbG9zZShzKQorCisgICAgICAgIG9zLmR1cDIobSwgc3lzLnN0ZGluLmZpbGVubygpKQorICAgICAgICBvcy5kdXAyKG0sIHN5cy5zdGRvdXQuZmlsZW5vKCkpCisgICAgICAgIG9zLmR1cDIobSwgc3lzLnN0ZGVyci5maWxlbm8oKSkKKworICAgICAgICBzeXMuc3Rkb3V0ID0gb3MuZmRvcGVuKHN5cy5zdGRvdXQuZmlsZW5vKCksICd3JywgMCkKKyAgICAgICAgc3lzLnN0ZGluID0gb3MuZmRvcGVuKHN5cy5zdGRpbi5maWxlbm8oKSwgJ3InLCAwKQorCisgICAgICAgIGJiLnV0aWxzLm5vbmJsb2NraW5nZmQoc3lzLnN0ZG91dCkKKyAgICAgICAgYmIudXRpbHMubm9uYmxvY2tpbmdmZChzeXMuc3RkZXJyKQorICAgICAgICBiYi51dGlscy5ub25ibG9ja2luZ2ZkKHN5cy5zdGRpbikKKworICAgICAgICBfY29udGV4dCA9IHsKKyAgICAgICAgICAgICJvcyI6IG9zLAorICAgICAgICAgICAgImJiIjogYmIsCisgICAgICAgICAgICAidGltZSI6IHRpbWUsCisgICAgICAgICAgICAiZCI6IGQsCisgICAgICAgIH0KKworICAgICAgICBwczEgPSAicHlkZXZzaGVsbD4gIgorICAgICAgICBwczIgPSAiLi4uICIKKyAgICAgICAgYnVmID0gW10KKyAgICAgICAgbW9yZSA9IEZhbHNlCisKKyAgICAgICAgaSA9IGNvZGUuSW50ZXJhY3RpdmVJbnRlcnByZXRlcihsb2NhbHM9X2NvbnRleHQpCisgICAgICAgIHByaW50KCJPRSBQeVNoZWxsIChQTiA9ICVzKVxuIiAlIGQuZ2V0VmFyKCJQTiIsIFRydWUpKQorCisgICAgICAgIGRlZiBwcm9tcHQobW9yZSk6CisgICAgICAgICAgICBpZiBtb3JlOgorICAgICAgICAgICAgICAgIHByb21wdCA9IHBzMgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcm9tcHQgPSBwczEKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUocHJvbXB0KQorCisgICAgICAgICMgUmVzdG9yZSBDdHJsK0Mgc2luY2UgYml0YmFrZSBtYXNrcyB0aGlzCisgICAgICAgIGRlZiBzaWduYWxfaGFuZGxlcihzaWduYWwsIGZyYW1lKToKKyAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0CisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0lOVCwgc2lnbmFsX2hhbmRsZXIpCisKKyAgICAgICAgY2hpbGQgPSBOb25lCisKKyAgICAgICAgcHJvbXB0KG1vcmUpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAociwgXywgXykgPSBzZWxlY3Quc2VsZWN0KFtzeXMuc3RkaW5dLCBbXSwgW10sIDEpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IHN5cy5zdGRpbi5yZWFkbGluZSgpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9tcHQobW9yZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKyAgICAgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIElPRXJyb3IpIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gMTE6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IDU6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgY2hpbGQ6CisgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IGludChsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSAiXG4iLmpvaW4oYnVmKQorICAgICAgICAgICAgICAgICAgICBtb3JlID0gaS5ydW5zb3VyY2Uoc291cmNlLCAiPHB5c2hlbGw+IikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG1vcmU6CisgICAgICAgICAgICAgICAgICAgICAgICBidWYgPSBbXQorICAgICAgICAgICAgICAgICAgICBwcm9tcHQobW9yZSkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICBpLndyaXRlKCJcbktleWJvYXJkSW50ZXJydXB0XG4iKQorICAgICAgICAgICAgICAgIGJ1ZiA9IFtdCisgICAgICAgICAgICAgICAgbW9yZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgcHJvbXB0KG1vcmUpCisgICAgICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKKyAgICAgICAgICAgICAgICAjIEVhc2llc3Qgd2F5IHRvIGVuc3VyZSBldmVyeXRoaW5nIGV4aXRzCisgICAgICAgICAgICAgICAgb3Mua2lsbChjaGlsZCwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICAgICAgYnJlYWsKKworcHl0aG9uIGRvX2RldnB5c2hlbGwoKSB7CisgICAgaW1wb3J0IHNpZ25hbAorCisgICAgdHJ5OgorICAgICAgICBkZXZweXNoZWxsKGQpCisgICAgZXhjZXB0IFN5c3RlbUV4aXQ6CisgICAgICAgICMgU3RvcCB0aGUgU0lHVEVSTSBhYm92ZSBjYXVzaW5nIGFuIGVycm9yIGV4aXQgY29kZSAgICAKKyAgICAgICAgcmV0dXJuCisgICAgZmluYWxseToKKyAgICAgICAgcmV0dXJuCit9CithZGR0YXNrIGRldnB5c2hlbGwgYWZ0ZXIgZG9fcGF0Y2gKKworZG9fZGV2cHlzaGVsbFtub3N0YW1wXSA9ICIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHJvX2ZlYXR1cmVzX2NoZWNrLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0cm9fZmVhdHVyZXNfY2hlY2suYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTkxZGJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHJvX2ZlYXR1cmVzX2NoZWNrLmJiY2xhc3MKQEAgLTAsMCArMSwzNyBAQAorIyBBbGxvdyBjaGVja2luZyBvZiByZXF1aXJlZCBhbmQgY29uZmxpY3RpbmcgRElTVFJPX0ZFQVRVUkVTCisjCisjIEFOWV9PRl9ESVNUUk9fRkVBVFVSRVM6ICAgZW5zdXJlIGF0IGxlYXN0IG9uZSBpdGVtIG9uIHRoaXMgbGlzdCBpcyBpbmNsdWRlZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIERJU1RST19GRUFUVVJFUy4KKyMgUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTOiBlbnN1cmUgZXZlcnkgaXRlbSBvbiB0aGlzIGxpc3QgaXMgaW5jbHVkZWQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBESVNUUk9fRkVBVFVSRVMuCisjIENPTkZMSUNUX0RJU1RST19GRUFUVVJFUzogZW5zdXJlIG5vIGl0ZW0gaW4gdGhpcyBsaXN0IGlzIGluY2x1ZGVkIGluCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgRElTVFJPX0ZFQVRVUkVTLgorIworIyBDb3B5cmlnaHQgMjAxMyAoQykgTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisKK3B5dGhvbiAoKSB7CisgICAgIyBBc3N1bWUgYXQgbGVhc3Qgb25lIHZhciBpcyBzZXQuCisgICAgZGlzdHJvX2ZlYXR1cmVzID0gKGQuZ2V0VmFyKCdESVNUUk9fRkVBVFVSRVMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorCisgICAgYW55X29mX2Rpc3Ryb19mZWF0dXJlcyA9IGQuZ2V0VmFyKCdBTllfT0ZfRElTVFJPX0ZFQVRVUkVTJywgVHJ1ZSkKKyAgICBpZiBhbnlfb2ZfZGlzdHJvX2ZlYXR1cmVzOgorICAgICAgICBhbnlfb2ZfZGlzdHJvX2ZlYXR1cmVzID0gYW55X29mX2Rpc3Ryb19mZWF0dXJlcy5zcGxpdCgpCisgICAgICAgIGlmIHNldC5pc2Rpc2pvaW50KHNldChhbnlfb2ZfZGlzdHJvX2ZlYXR1cmVzKSxzZXQoZGlzdHJvX2ZlYXR1cmVzKSk6CisgICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgib25lIG9mICclcycgbmVlZHMgdG8gYmUgaW4gRElTVFJPX0ZFQVRVUkVTIiAlIGFueV9vZl9kaXN0cm9fZmVhdHVyZXMpCisKKyAgICByZXF1aXJlZF9kaXN0cm9fZmVhdHVyZXMgPSBkLmdldFZhcignUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTJywgVHJ1ZSkKKyAgICBpZiByZXF1aXJlZF9kaXN0cm9fZmVhdHVyZXM6CisgICAgICAgIHJlcXVpcmVkX2Rpc3Ryb19mZWF0dXJlcyA9IHJlcXVpcmVkX2Rpc3Ryb19mZWF0dXJlcy5zcGxpdCgpCisgICAgICAgIGZvciBmIGluIHJlcXVpcmVkX2Rpc3Ryb19mZWF0dXJlczoKKyAgICAgICAgICAgIGlmIGYgaW4gZGlzdHJvX2ZlYXR1cmVzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJtaXNzaW5nIHJlcXVpcmVkIGRpc3RybyBmZWF0dXJlICclcycgKG5vdCBpbiBESVNUUk9fRkVBVFVSRVMpIiAlIGYpCisKKyAgICBjb25mbGljdF9kaXN0cm9fZmVhdHVyZXMgPSBkLmdldFZhcignQ09ORkxJQ1RfRElTVFJPX0ZFQVRVUkVTJywgVHJ1ZSkKKyAgICBpZiBjb25mbGljdF9kaXN0cm9fZmVhdHVyZXM6CisgICAgICAgIGNvbmZsaWN0X2Rpc3Ryb19mZWF0dXJlcyA9IGNvbmZsaWN0X2Rpc3Ryb19mZWF0dXJlcy5zcGxpdCgpCisgICAgICAgIGZvciBmIGluIGNvbmZsaWN0X2Rpc3Ryb19mZWF0dXJlczoKKyAgICAgICAgICAgIGlmIGYgaW4gZGlzdHJvX2ZlYXR1cmVzOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJjb25mbGljdGluZyBkaXN0cm8gZmVhdHVyZSAnJXMnIChpbiBESVNUUk9fRkVBVFVSRVMpIiAlIGYpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0cm9kYXRhLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0cm9kYXRhLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE2OGU0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3Ryb2RhdGEuYmJjbGFzcwpAQCAtMCwwICsxLDQ3NCBAQAoraW5jbHVkZSBjb25mL2Rpc3Ryby9pbmNsdWRlL3BhY2thZ2VfcmVnZXguaW5jCitpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvdXBzdHJlYW1fdHJhY2tpbmcuaW5jCitpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvZGlzdHJvX2FsaWFzLmluYworaW5jbHVkZSBjb25mL2Rpc3Ryby9pbmNsdWRlL21haW50YWluZXJzLmluYworCithZGRoYW5kbGVyIGRpc3Ryb19ldmVudGhhbmRsZXIKK2Rpc3Ryb19ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZFN0YXJ0ZWQiCitweXRob24gZGlzdHJvX2V2ZW50aGFuZGxlcigpIHsKKyAgICBpbXBvcnQgb2UuZGlzdHJvX2NoZWNrIGFzIGRjCisgICAgaW1wb3J0IGNzdgorICAgIGxvZ2ZpbGUgPSBkYy5jcmVhdGVfbG9nX2ZpbGUoZS5kYXRhLCAiZGlzdHJvZGF0YS5jc3YiKQorCisgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZSgiJXMubG9jayIgJSBsb2dmaWxlKQorICAgIHdpdGggb3Blbihsb2dmaWxlLCAiYSIpIGFzIGY6CisgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZikKKyAgICAgICAgd3JpdGVyLndyaXRlcm93KFsnUGFja2FnZScsICdEZXNjcmlwdGlvbicsICdPd25lcicsICdMaWNlbnNlJywgCisgICAgICAgICAgICAnVmVyTWF0Y2gnLCAnVmVyc2lvbicsICdVcHN0cmVhbScsICdSZWFzb24nLCAnUmVjaXBlIFN0YXR1cycsCisgICAgICAgICAgICAnRGlzdHJvIDEnLCAnRGlzdHJvIDInLCAnRGlzdHJvIDMnXSkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKworICAgIHJldHVybgorfQorCithZGR0YXNrIGRpc3Ryb2RhdGFfbnAKK2RvX2Rpc3Ryb2RhdGFfbnBbbm9zdGFtcF0gPSAiMSIKK3B5dGhvbiBkb19kaXN0cm9kYXRhX25wKCkgeworICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgICAgICBiYi5ub3RlKCJQYWNrYWdlIE5hbWU6ICVzIiAlIHBuKQorCisgICAgICAgIGltcG9ydCBvZS5kaXN0cm9fY2hlY2sgYXMgZGlzdF9jaGVjaworICAgICAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICAgICAgZGlzdHJvX2NoZWNrX2RpciA9IG9zLnBhdGguam9pbih0bXBkaXIsICJkaXN0cm9fY2hlY2siKQorICAgICAgICBkYXRldGltZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RBVEVUSU1FJywgVHJ1ZSkKKyAgICAgICAgZGlzdF9jaGVjay51cGRhdGVfZGlzdHJvX2RhdGEoZGlzdHJvX2NoZWNrX2RpciwgZGF0ZXRpbWUpCisKKyAgICAgICAgaWYgcG4uZmluZCgiLW5hdGl2ZSIpICE9IC0xOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItbmF0aXZlIikKKyAgICAgICAgICAgIGJiLm5vdGUoIk5hdGl2ZSBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGlmIHBuLmZpbmQoIi1jcm9zcyIpICE9IC0xOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItY3Jvc3MiKQorICAgICAgICAgICAgYmIubm90ZSgiY3Jvc3MgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBpZiBwbi5maW5kKCItY3Jvc3NzZGsiKSAhPSAtMToKKyAgICAgICAgICAgIHBuc3RyaXBwZWQgPSBwbi5zcGxpdCgiLWNyb3Nzc2RrIikKKyAgICAgICAgICAgIGJiLm5vdGUoImNyb3NzIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzBdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgaWYgcG4uc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnJlcGxhY2UoIm5hdGl2ZXNkay0iLCAiIikKKyAgICAgICAgICAgIGJiLm5vdGUoIk5hdGl2ZVNESyBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZCArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisKKyAgICAgICAgaWYgcG4uZmluZCgiLWluaXRpYWwiKSAhPSAtMToKKyAgICAgICAgICAgIHBuc3RyaXBwZWQgPSBwbi5zcGxpdCgiLWluaXRpYWwiKQorICAgICAgICAgICAgYmIubm90ZSgiaW5pdGlhbCBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgICIiImdlbmVyYXRlIHBhY2thZ2UgaW5mb3JtYXRpb24gZnJvbSAuYmIgZmlsZSIiIgorICAgICAgICBwbmFtZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgcGN1cnZlciA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BWJywgVHJ1ZSkKKyAgICAgICAgcGRlc2MgPSBsb2NhbGRhdGEuZ2V0VmFyKCdERVNDUklQVElPTicsIFRydWUpCisgICAgICAgIGlmIHBkZXNjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHBkZXNjID0gcGRlc2MucmVwbGFjZSgnLCcsJycpCisgICAgICAgICAgICAgICAgcGRlc2MgPSBwZGVzYy5yZXBsYWNlKCdcbicsJycpCisKKyAgICAgICAgcGdycCA9IGxvY2FsZGF0YS5nZXRWYXIoJ1NFQ1RJT04nLCBUcnVlKQorICAgICAgICBwbGljZW5zZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ0xJQ0VOU0UnLCBUcnVlKS5yZXBsYWNlKCcsJywnXycpCisKKyAgICAgICAgcnN0YXR1cyA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9DT0xPUicsIFRydWUpCisgICAgICAgIGlmIHJzdGF0dXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcnN0YXR1cyA9IHJzdGF0dXMucmVwbGFjZSgnLCcsJycpCisKKyAgICAgICAgcHVwdmVyID0gbG9jYWxkYXRhLmdldFZhcignUkVDSVBFX1VQU1RSRUFNX1ZFUlNJT04nLCBUcnVlKQorICAgICAgICBpZiBwY3VydmVyID09IHB1cHZlcjoKKyAgICAgICAgICAgICAgICB2ZXJtYXRjaD0iMSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2ZXJtYXRjaD0iMCIKKyAgICAgICAgbm91cGRhdGVfcmVhc29uID0gbG9jYWxkYXRhLmdldFZhcignUkVDSVBFX05PX1VQREFURV9SRUFTT04nLCBUcnVlKQorICAgICAgICBpZiBub3VwZGF0ZV9yZWFzb24gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBub3VwZGF0ZT0iMCIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBub3VwZGF0ZT0iMSIKKyAgICAgICAgICAgICAgICBub3VwZGF0ZV9yZWFzb24gPSBub3VwZGF0ZV9yZWFzb24ucmVwbGFjZSgnLCcsJycpCisKKyAgICAgICAgbWFpbnRhaW5lciA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9NQUlOVEFJTkVSJywgVHJ1ZSkKKyAgICAgICAgcmxyZCA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9VUFNUUkVBTV9EQVRFJywgVHJ1ZSkKKyAgICAgICAgcmVzdWx0ID0gZGlzdF9jaGVjay5jb21wYXJlX2luX2Rpc3Ryb19wYWNrYWdlc19saXN0KGRpc3Ryb19jaGVja19kaXIsIGxvY2FsZGF0YSkKKworICAgICAgICBiYi5ub3RlKCJESVNUUk86ICVzLCVzLCVzLCVzLCVzLCVzLCVzLCVzLCVzXG4iICUgXAorICAgICAgICAgICAgICAgICAgKHBuYW1lLCBwZGVzYywgbWFpbnRhaW5lciwgcGxpY2Vuc2UsIHZlcm1hdGNoLCBwY3VydmVyLCBwdXB2ZXIsIG5vdXBkYXRlX3JlYXNvbiwgcnN0YXR1cykpCisgICAgICAgIGxpbmUgPSBwbgorICAgICAgICBmb3IgaSBpbiByZXN1bHQ6CisgICAgICAgICAgICBsaW5lID0gbGluZSArICIsIiArIGkKKyAgICAgICAgYmIubm90ZSgiJXNcbiIgJSBsaW5lKQorfQorCithZGR0YXNrIGRpc3Ryb2RhdGEKK2RvX2Rpc3Ryb2RhdGFbbm9zdGFtcF0gPSAiMSIKK3B5dGhvbiBkb19kaXN0cm9kYXRhKCkgeworICAgICAgICBpbXBvcnQgY3N2CisgICAgICAgIGxvZ3BhdGggPSBkLmdldFZhcignTE9HX0RJUicsIFRydWUpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihsb2dwYXRoKQorICAgICAgICBsb2dmaWxlID0gb3MucGF0aC5qb2luKGxvZ3BhdGgsICJkaXN0cm9kYXRhLmNzdiIpCisKKyAgICAgICAgaW1wb3J0IG9lLmRpc3Ryb19jaGVjayBhcyBkaXN0X2NoZWNrCisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICAgICAgZGlzdHJvX2NoZWNrX2RpciA9IG9zLnBhdGguam9pbih0bXBkaXIsICJkaXN0cm9fY2hlY2siKQorICAgICAgICBkYXRldGltZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RBVEVUSU1FJywgVHJ1ZSkKKyAgICAgICAgZGlzdF9jaGVjay51cGRhdGVfZGlzdHJvX2RhdGEoZGlzdHJvX2NoZWNrX2RpciwgZGF0ZXRpbWUpCisKKyAgICAgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgICAgICBiYi5ub3RlKCJQYWNrYWdlIE5hbWU6ICVzIiAlIHBuKQorCisgICAgICAgIGlmIHBuLmZpbmQoIi1uYXRpdmUiKSAhPSAtMToKKyAgICAgICAgICAgIHBuc3RyaXBwZWQgPSBwbi5zcGxpdCgiLW5hdGl2ZSIpCisgICAgICAgICAgICBiYi5ub3RlKCJOYXRpdmUgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBpZiBwbi5zdGFydHN3aXRoKCJuYXRpdmVzZGstIik6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG4ucmVwbGFjZSgibmF0aXZlc2RrLSIsICIiKQorICAgICAgICAgICAgYmIubm90ZSgiTmF0aXZlU0RLIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgaWYgcG4uZmluZCgiLWNyb3NzIikgIT0gLTE6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG4uc3BsaXQoIi1jcm9zcyIpCisgICAgICAgICAgICBiYi5ub3RlKCJjcm9zcyBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGlmIHBuLmZpbmQoIi1jcm9zc3NkayIpICE9IC0xOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItY3Jvc3NzZGsiKQorICAgICAgICAgICAgYmIubm90ZSgiY3Jvc3MgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBpZiBwbi5maW5kKCItaW5pdGlhbCIpICE9IC0xOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItaW5pdGlhbCIpCisgICAgICAgICAgICBiYi5ub3RlKCJpbml0aWFsIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzBdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgIiIiZ2VuZXJhdGUgcGFja2FnZSBpbmZvcm1hdGlvbiBmcm9tIC5iYiBmaWxlIiIiCisgICAgICAgIHBuYW1lID0gbG9jYWxkYXRhLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICBwY3VydmVyID0gbG9jYWxkYXRhLmdldFZhcignUFYnLCBUcnVlKQorICAgICAgICBwZGVzYyA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkKKyAgICAgICAgaWYgcGRlc2MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcGRlc2MgPSBwZGVzYy5yZXBsYWNlKCcsJywnJykKKyAgICAgICAgICAgICAgICBwZGVzYyA9IHBkZXNjLnJlcGxhY2UoJ1xuJywnJykKKworICAgICAgICBwZ3JwID0gbG9jYWxkYXRhLmdldFZhcignU0VDVElPTicsIFRydWUpCisgICAgICAgIHBsaWNlbnNlID0gbG9jYWxkYXRhLmdldFZhcignTElDRU5TRScsIFRydWUpLnJlcGxhY2UoJywnLCdfJykKKworICAgICAgICByc3RhdHVzID0gbG9jYWxkYXRhLmdldFZhcignUkVDSVBFX0NPTE9SJywgVHJ1ZSkKKyAgICAgICAgaWYgcnN0YXR1cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByc3RhdHVzID0gcnN0YXR1cy5yZXBsYWNlKCcsJywnJykKKworICAgICAgICBwdXB2ZXIgPSBsb2NhbGRhdGEuZ2V0VmFyKCdSRUNJUEVfVVBTVFJFQU1fVkVSU0lPTicsIFRydWUpCisgICAgICAgIGlmIHBjdXJ2ZXIgPT0gcHVwdmVyOgorICAgICAgICAgICAgICAgIHZlcm1hdGNoPSIxIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZlcm1hdGNoPSIwIgorCisgICAgICAgIG5vdXBkYXRlX3JlYXNvbiA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9OT19VUERBVEVfUkVBU09OJywgVHJ1ZSkKKyAgICAgICAgaWYgbm91cGRhdGVfcmVhc29uIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbm91cGRhdGU9IjAiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbm91cGRhdGU9IjEiCisgICAgICAgICAgICAgICAgbm91cGRhdGVfcmVhc29uID0gbm91cGRhdGVfcmVhc29uLnJlcGxhY2UoJywnLCcnKQorCisgICAgICAgIG1haW50YWluZXIgPSBsb2NhbGRhdGEuZ2V0VmFyKCdSRUNJUEVfTUFJTlRBSU5FUicsIFRydWUpCisgICAgICAgIHJscmQgPSBsb2NhbGRhdGEuZ2V0VmFyKCdSRUNJUEVfVVBTVFJFQU1fREFURScsIFRydWUpCisgICAgICAgICMgZG8gdGhlIGNvbXBhcmlzb24KKyAgICAgICAgcmVzdWx0ID0gZGlzdF9jaGVjay5jb21wYXJlX2luX2Rpc3Ryb19wYWNrYWdlc19saXN0KGRpc3Ryb19jaGVja19kaXIsIGxvY2FsZGF0YSkKKworICAgICAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKCIlcy5sb2NrIiAlIGxvZ2ZpbGUpCisgICAgICAgIHdpdGggb3Blbihsb2dmaWxlLCAiYSIpIGFzIGY6CisgICAgICAgICAgICByb3cgPSBbcG5hbWUsIHBkZXNjLCBtYWludGFpbmVyLCBwbGljZW5zZSwgdmVybWF0Y2gsIHBjdXJ2ZXIsIHB1cHZlciwgbm91cGRhdGVfcmVhc29uLCByc3RhdHVzXQorICAgICAgICAgICAgcm93LmV4dGVuZChyZXN1bHQpCisKKyAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZikKKyAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhyb3cpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKK30KKworYWRkdGFzayBkaXN0cm9kYXRhYWxsIGFmdGVyIGRvX2Rpc3Ryb2RhdGEKK2RvX2Rpc3Ryb2RhdGFhbGxbcmVjcmRlcHRhc2tdID0gImRvX2Rpc3Ryb2RhdGFhbGwgZG9fZGlzdHJvZGF0YSIKK2RvX2Rpc3Ryb2RhdGFhbGxbcmVjaWRlcHRhc2tdID0gImRvXyR7QkJfREVGQVVMVF9UQVNLfSIKK2RvX2Rpc3Ryb2RhdGFhbGxbbm9zdGFtcF0gPSAiMSIKK2RvX2Rpc3Ryb2RhdGFhbGwoKSB7CisgICAgICAgIDoKK30KKworYWRkaGFuZGxlciBjaGVja3BrZ19ldmVudGhhbmRsZXIKK2NoZWNrcGtnX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LkJ1aWxkU3RhcnRlZCBiYi5ldmVudC5CdWlsZENvbXBsZXRlZCIKK3B5dGhvbiBjaGVja3BrZ19ldmVudGhhbmRsZXIoKSB7CisgICAgaW1wb3J0IGNzdgorCisgICAgZGVmIHBhcnNlX2Nzdl9maWxlKGZpbGVuYW1lKToKKyAgICAgICAgcGFja2FnZV9kaWN0ID0ge30KKworICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyIikgYXMgZjoKKyAgICAgICAgICAgIHJlYWRlciA9IGNzdi5yZWFkZXIoZiwgZGVsaW1pdGVyPSdcdCcpCisgICAgICAgICAgICBmb3Igcm93IGluIHJlYWRlcjoKKyAgICAgICAgICAgICAgICBwbiA9IHJvd1swXQorCisgICAgICAgICAgICAgICAgaWYgcmVhZGVyLmxpbmVfbnVtID09IDE6CisgICAgICAgICAgICAgICAgICAgIGhlYWRlciA9IHJvdworICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgbm90IHBuIGluIHBhY2thZ2VfZGljdC5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VfZGljdFtwbl0gPSByb3cKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInciKSBhcyBmOgorICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmLCBkZWxpbWl0ZXI9J1x0JykKKyAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhoZWFkZXIpCisgICAgICAgICAgICBmb3IgcG4gaW4gcGFja2FnZV9kaWN0LmtleXMoKToKKyAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVyb3cocGFja2FnZV9kaWN0W3BuXSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGRlbCBwYWNrYWdlX2RpY3QKKworICAgIGlmIGJiLmV2ZW50LmdldE5hbWUoZSkgPT0gIkJ1aWxkU3RhcnRlZCI6CisgICAgICAgIGltcG9ydCBvZS5kaXN0cm9fY2hlY2sgYXMgZGMKKyAgICAgICAgbG9nZmlsZSA9IGRjLmNyZWF0ZV9sb2dfZmlsZShlLmRhdGEsICJjaGVja3BrZy5jc3YiKQorCisgICAgICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUoIiVzLmxvY2siICUgbG9nZmlsZSkKKyAgICAgICAgd2l0aCBvcGVuKGxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZiwgZGVsaW1pdGVyPSdcdCcpCisgICAgICAgICAgICBoZWFkZXJzID0gWydQYWNrYWdlJywgJ1ZlcnNpb24nLCAnVXB2ZXInLCAnTGljZW5zZScsICdTZWN0aW9uJywKKyAgICAgICAgICAgICAgICAnSG9tZScsICdSZWxlYXNlJywgJ0RlcGVuZHMnLCAnQnVnVHJhY2tlcicsICdQRScsICdEZXNjcmlwdGlvbicsCisgICAgICAgICAgICAgICAgJ1N0YXR1cycsICdUcmFja2luZycsICdVUkknLCAnTUFJTlRBSU5FUicsICdOb1VwUmVhc29uJ10KKyAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhoZWFkZXJzKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgZWxpZiBiYi5ldmVudC5nZXROYW1lKGUpID09ICJCdWlsZENvbXBsZXRlZCI6CisgICAgICAgIGltcG9ydCBvcworICAgICAgICBmaWxlbmFtZSA9ICJ0bXAvbG9nL2NoZWNrcGtnLmNzdiIKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZW5hbWUpOgorICAgICAgICAgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZSgiJXMubG9jayIlZmlsZW5hbWUpCisgICAgICAgICAgICBwYXJzZV9jc3ZfZmlsZShmaWxlbmFtZSkKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgcmV0dXJuCit9CisKK2FkZHRhc2sgY2hlY2twa2cKK2RvX2NoZWNrcGtnW25vc3RhbXBdID0gIjEiCitweXRob24gZG9fY2hlY2twa2coKSB7CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICBpbXBvcnQgY3N2CisgICAgICAgIGltcG9ydCByZQorICAgICAgICBpbXBvcnQgdGVtcGZpbGUKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisgICAgICAgIGZyb20gYmIudXRpbHMgaW1wb3J0IHZlcmNtcF9zdHJpbmcKKyAgICAgICAgZnJvbSBiYi5mZXRjaDIgaW1wb3J0IEZldGNoRXJyb3IsIE5vTWV0aG9kRXJyb3IsIGRlY29kZXVybAorCisgICAgICAgICIiImZpcnN0IGNoZWNrIHdoZXRoZXIgYSB1cmkgaXMgcHJvdmlkZWQiIiIKKyAgICAgICAgc3JjX3VyaSA9IGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHNyY191cmk6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHVyaV90eXBlLCBfLCBfLCBfLCBfLCBfID0gZGVjb2RldXJsKHNyY191cmkpCisKKyAgICAgICAgIiIiaW5pdGlhbGl6ZSBsb2cgZmlsZXMuIiIiCisgICAgICAgIGxvZ3BhdGggPSBkLmdldFZhcignTE9HX0RJUicsIFRydWUpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihsb2dwYXRoKQorICAgICAgICBsb2dmaWxlID0gb3MucGF0aC5qb2luKGxvZ3BhdGgsICJjaGVja3BrZy5jc3YiKQorCisgICAgICAgICIiImdlbmVyYXRlIHBhY2thZ2UgaW5mb3JtYXRpb24gZnJvbSAuYmIgZmlsZSIiIgorICAgICAgICBwbmFtZSA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisKKyAgICAgICAgaWYgcG5hbWUuZmluZCgiLW5hdGl2ZSIpICE9IC0xOgorICAgICAgICAgICAgaWYgZC5nZXRWYXIoJ0JCQ0xBU1NFWFRFTkQnLCBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG5hbWUuc3BsaXQoIi1uYXRpdmUiKQorICAgICAgICAgICAgYmIubm90ZSgiTmF0aXZlIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzBdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgaWYgcG5hbWUuc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpOgorICAgICAgICAgICAgaWYgZC5nZXRWYXIoJ0JCQ0xBU1NFWFRFTkQnLCBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG5hbWUucmVwbGFjZSgibmF0aXZlc2RrLSIsICIiKQorICAgICAgICAgICAgYmIubm90ZSgiTmF0aXZlU0RLIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgaWYgcG5hbWUuZmluZCgiLWNyb3NzIikgIT0gLTE6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG5hbWUuc3BsaXQoIi1jcm9zcyIpCisgICAgICAgICAgICBiYi5ub3RlKCJjcm9zcyBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGlmIHBuYW1lLmZpbmQoIi1pbml0aWFsIikgIT0gLTE6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG5hbWUuc3BsaXQoIi1pbml0aWFsIikKKyAgICAgICAgICAgIGJiLm5vdGUoImluaXRpYWwgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBwZGVzYyA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkKKyAgICAgICAgcGdycCA9IGxvY2FsZGF0YS5nZXRWYXIoJ1NFQ1RJT04nLCBUcnVlKQorICAgICAgICBwdmVyc2lvbiA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BWJywgVHJ1ZSkKKyAgICAgICAgcGxpY2Vuc2UgPSBsb2NhbGRhdGEuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkKKyAgICAgICAgcHNlY3Rpb24gPSBsb2NhbGRhdGEuZ2V0VmFyKCdTRUNUSU9OJywgVHJ1ZSkKKyAgICAgICAgcGhvbWUgPSBsb2NhbGRhdGEuZ2V0VmFyKCdIT01FUEFHRScsIFRydWUpCisgICAgICAgIHByZWxlYXNlID0gbG9jYWxkYXRhLmdldFZhcignUFInLCBUcnVlKQorICAgICAgICBwZGVwZW5kcyA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RFUEVORFMnLCBUcnVlKQorICAgICAgICBwYnVndHJhY2tlciA9IGxvY2FsZGF0YS5nZXRWYXIoJ0JVR1RSQUNLRVInLCBUcnVlKQorICAgICAgICBwcGUgPSBsb2NhbGRhdGEuZ2V0VmFyKCdQRScsIFRydWUpCisgICAgICAgIHBzcmN1cmkgPSBsb2NhbGRhdGEuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkKKyAgICAgICAgbWFpbnRhaW5lciA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9NQUlOVEFJTkVSJywgVHJ1ZSkKKworICAgICAgICAiIiIgR2V0IHVwc3RyZWFtIHZlcnNpb24gdmVyc2lvbiAiIiIKKyAgICAgICAgcHVwdmVyID0gIiIKKyAgICAgICAgcHN0YXR1cyA9ICIiCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdXYgPSBvZS5yZWNpcGV1dGlscy5nZXRfcmVjaXBlX3Vwc3RyZWFtX3ZlcnNpb24obG9jYWxkYXRhKQorCisgICAgICAgICAgICBwdXB2ZXIgPSB1dlsndmVyc2lvbiddCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGlmIGUgaXMgRmV0Y2hFcnJvcjoKKyAgICAgICAgICAgICAgICBwc3RhdHVzID0gIkVyckFjY2VzcyIKKyAgICAgICAgICAgIGVsaWYgZSBpcyBOb01ldGhvZEVycm9yOgorICAgICAgICAgICAgICAgIHBzdGF0dXMgPSAiRXJyVW5zdXBwb3J0ZWRQcm90byIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHN0YXR1cyA9ICJFcnJVbmtub3duIgorCisgICAgICAgICIiIlNldCB1cHN0cmVhbSB2ZXJzaW9uIHN0YXR1cyIiIgorICAgICAgICBpZiBub3QgcHVwdmVyOgorICAgICAgICAgICAgcHVwdmVyID0gIk4vQSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHB2LCBfLCBfID0gb2UucmVjaXBldXRpbHMuZ2V0X3JlY2lwZV9wdl93aXRob3V0X3NyY3B2KHB2ZXJzaW9uLCB1cmlfdHlwZSkKKyAgICAgICAgICAgIHVwdiwgXywgXyA9IG9lLnJlY2lwZXV0aWxzLmdldF9yZWNpcGVfcHZfd2l0aG91dF9zcmNwdihwdXB2ZXIsIHVyaV90eXBlKQorCisgICAgICAgICAgICBjbXAgPSB2ZXJjbXBfc3RyaW5nKHB2LCB1cHYpCisgICAgICAgICAgICBpZiBjbXAgPT0gLTE6CisgICAgICAgICAgICAgICAgcHN0YXR1cyA9ICJVUERBVEUiCisgICAgICAgICAgICBlbGlmIGNtcCA9PSAwOgorICAgICAgICAgICAgICAgIHBzdGF0dXMgPSAiTUFUQ0giCisKKyAgICAgICAgcHNyY3VyaSA9IHBzcmN1cmkuc3BsaXQoKVswXQorICAgICAgICBwZGVwZW5kcyA9ICIiLmpvaW4ocGRlcGVuZHMuc3BsaXQoIlx0IikpCisgICAgICAgIHBkZXNjID0gIiIuam9pbihwZGVzYy5zcGxpdCgiXHQiKSkKKyAgICAgICAgbm9fdXBncl9yZWFzb24gPSBkLmdldFZhcignUkVDSVBFX05PX1VQREFURV9SRUFTT04nLCBUcnVlKQorICAgICAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKCIlcy5sb2NrIiAlIGxvZ2ZpbGUpCisgICAgICAgIHdpdGggb3Blbihsb2dmaWxlLCAiYSIpIGFzIGY6CisgICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGYsIGRlbGltaXRlcj0nXHQnKQorICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KFtwbmFtZSwgcHZlcnNpb24sIHB1cHZlciwgcGxpY2Vuc2UsIHBzZWN0aW9uLCBwaG9tZSwgCisgICAgICAgICAgICAgICAgcHJlbGVhc2UsIHBkZXBlbmRzLCBwYnVndHJhY2tlciwgcHBlLCBwZGVzYywgcHN0YXR1cywgcHVwdmVyLAorICAgICAgICAgICAgICAgIHBzcmN1cmksIG1haW50YWluZXIsIG5vX3VwZ3JfcmVhc29uXSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorfQorCithZGR0YXNrIGNoZWNrcGtnYWxsIGFmdGVyIGRvX2NoZWNrcGtnCitkb19jaGVja3BrZ2FsbFtyZWNyZGVwdGFza10gPSAiZG9fY2hlY2twa2dhbGwgZG9fY2hlY2twa2ciCitkb19jaGVja3BrZ2FsbFtyZWNpZGVwdGFza10gPSAiZG9fJHtCQl9ERUZBVUxUX1RBU0t9IgorZG9fY2hlY2twa2dhbGxbbm9zdGFtcF0gPSAiMSIKK2RvX2NoZWNrcGtnYWxsKCkgeworICAgICAgICA6Cit9CisKK2FkZGhhbmRsZXIgZGlzdHJvX2NoZWNrX2V2ZW50aGFuZGxlcgorZGlzdHJvX2NoZWNrX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LkJ1aWxkU3RhcnRlZCIKK3B5dGhvbiBkaXN0cm9fY2hlY2tfZXZlbnRoYW5kbGVyKCkgeworICAgICIiImluaXRpYWxpemUgbG9nIGZpbGVzLiIiIgorICAgIGltcG9ydCBvZS5kaXN0cm9fY2hlY2sgYXMgZGMKKyAgICByZXN1bHRfZmlsZSA9IGRjLmNyZWF0ZV9sb2dfZmlsZShlLmRhdGEsICJkaXN0cm9jaGVjay5jc3YiKQorICAgIHJldHVybgorfQorCithZGR0YXNrIGRpc3Ryb19jaGVjaworZG9fZGlzdHJvX2NoZWNrW25vc3RhbXBdID0gIjEiCitweXRob24gZG9fZGlzdHJvX2NoZWNrKCkgeworICAgICIiImNoZWNrcyBpZiB0aGUgcGFja2FnZSBpcyBwcmVzZW50IGluIG90aGVyIHB1YmxpYyBMaW51eCBkaXN0cm9zIiIiCisgICAgaW1wb3J0IG9lLmRpc3Ryb19jaGVjayBhcyBkYworICAgIGltcG9ydCBzaHV0aWwKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3NkaycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3Nzc2RrJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJyxkKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICBkaXN0cm9fY2hlY2tfZGlyID0gb3MucGF0aC5qb2luKHRtcGRpciwgImRpc3Ryb19jaGVjayIpCisgICAgbG9ncGF0aCA9IGQuZ2V0VmFyKCdMT0dfRElSJywgVHJ1ZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIobG9ncGF0aCkKKyAgICByZXN1bHRfZmlsZSA9IG9zLnBhdGguam9pbihsb2dwYXRoLCAiZGlzdHJvY2hlY2suY3N2IikKKyAgICBkYXRldGltZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RBVEVUSU1FJywgVHJ1ZSkKKyAgICBkYy51cGRhdGVfZGlzdHJvX2RhdGEoZGlzdHJvX2NoZWNrX2RpciwgZGF0ZXRpbWUpCisKKyAgICAjIGRvIHRoZSBjb21wYXJpc29uCisgICAgcmVzdWx0ID0gZGMuY29tcGFyZV9pbl9kaXN0cm9fcGFja2FnZXNfbGlzdChkaXN0cm9fY2hlY2tfZGlyLCBkKQorCisgICAgIyBzYXZlIHRoZSByZXN1bHRzCisgICAgZGMuc2F2ZV9kaXN0cm9fY2hlY2tfcmVzdWx0KHJlc3VsdCwgZGF0ZXRpbWUsIHJlc3VsdF9maWxlLCBkKQorfQorCithZGR0YXNrIGRpc3Ryb19jaGVja2FsbCBhZnRlciBkb19kaXN0cm9fY2hlY2sKK2RvX2Rpc3Ryb19jaGVja2FsbFtyZWNyZGVwdGFza10gPSAiZG9fZGlzdHJvX2NoZWNrYWxsIGRvX2Rpc3Ryb19jaGVjayIKK2RvX2Rpc3Ryb19jaGVja2FsbFtyZWNpZGVwdGFza10gPSAiZG9fJHtCQl9ERUZBVUxUX1RBU0t9IgorZG9fZGlzdHJvX2NoZWNrYWxsW25vc3RhbXBdID0gIjEiCitkb19kaXN0cm9fY2hlY2thbGwoKSB7CisgICAgICAgIDoKK30KKyMKKyNDaGVjayBNaXNzaW5nIExpY2Vuc2UgVGV4dC4KKyNVc2UgdGhpcyB0YXNrIHRvIGdlbmVyYXRlIHRoZSBtaXNzaW5nIGxpY2Vuc2UgdGV4dCBkYXRhIGZvciBwa2ctcmVwb3J0IHN5c3RlbSwKKyN0aGVuIHdlIGNhbiBzZWFyY2ggdGhvc2UgcmVjaXBlcyB3aGljaCBsaWNlbnNlIHRleHQgaXNuJ3QgZXhzaXQgaW4gY29tbW9uLWxpY2Vuc2VzIGRpcmVjdG9yeQorIworYWRkaGFuZGxlciBjaGVja2xpY2Vuc2VfZXZlbnRoYW5kbGVyCitjaGVja2xpY2Vuc2VfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRTdGFydGVkIgorcHl0aG9uIGNoZWNrbGljZW5zZV9ldmVudGhhbmRsZXIoKSB7CisgICAgIiIiaW5pdGlhbGl6ZSBsb2cgZmlsZXMuIiIiCisgICAgaW1wb3J0IGNzdgorICAgIGltcG9ydCBvZS5kaXN0cm9fY2hlY2sgYXMgZGMKKyAgICBsb2dmaWxlID0gZGMuY3JlYXRlX2xvZ19maWxlKGUuZGF0YSwgIm1pc3NpbmdsaWNlbnNlLmNzdiIpCisgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZSgiJXMubG9jayIgJSBsb2dmaWxlKQorICAgIHdpdGggb3Blbihsb2dmaWxlLCAiYSIpIGFzIGY6CisgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZiwgZGVsaW1pdGVyPSdcdCcpCisgICAgICAgIHdyaXRlci53cml0ZXJvdyhbJ1BhY2thZ2UnLCAnTGljZW5zZScsICdNaXNzaW5nTGljZW5zZSddKQorICAgICAgICBmLmNsb3NlKCkKKyAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgIHJldHVybgorfQorCithZGR0YXNrIGNoZWNrbGljZW5zZQorZG9fY2hlY2tsaWNlbnNlW25vc3RhbXBdID0gIjEiCitweXRob24gZG9fY2hlY2tsaWNlbnNlKCkgeworICAgIGltcG9ydCBjc3YKKyAgICBpbXBvcnQgc2h1dGlsCisgICAgbG9ncGF0aCA9IGQuZ2V0VmFyKCdMT0dfRElSJywgVHJ1ZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIobG9ncGF0aCkKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgbG9nZmlsZSA9IG9zLnBhdGguam9pbihsb2dwYXRoLCAibWlzc2luZ2xpY2Vuc2UuY3N2IikKKyAgICBnZW5lcmljX2RpcmVjdG9yeSA9IGQuZ2V0VmFyKCdDT01NT05fTElDRU5TRV9ESVInLCBUcnVlKQorICAgIGxpY2Vuc2VfdHlwZXMgPSBkLmdldFZhcignTElDRU5TRScsIFRydWUpCisgICAgZm9yIGxpY2Vuc2VfdHlwZSBpbiAoKGxpY2Vuc2VfdHlwZXMucmVwbGFjZSgnKycsICcnKS5yZXBsYWNlKCd8JywgJyYnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnKCcsICcnKS5yZXBsYWNlKCcpJywgJycpLnJlcGxhY2UoJzsnLCAnJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJywnLCAnJykucmVwbGFjZSgiICIsICIiKS5zcGxpdCgiJiIpKSk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZ2VuZXJpY19kaXJlY3RvcnksIGxpY2Vuc2VfdHlwZSkpOgorICAgICAgICAgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZSgiJXMubG9jayIgJSBsb2dmaWxlKQorICAgICAgICAgICAgd2l0aCBvcGVuKGxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGYsIGRlbGltaXRlcj0nXHQnKQorICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhbcG4sIGxpY2Vuc2VfdHlwZXMsIGxpY2Vuc2VfdHlwZV0pCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgIHJldHVybgorfQorCithZGR0YXNrIGNoZWNrbGljZW5zZWFsbCBhZnRlciBkb19jaGVja2xpY2Vuc2UKK2RvX2NoZWNrbGljZW5zZWFsbFtyZWNyZGVwdGFza10gPSAiZG9fY2hlY2tsaWNlbnNlYWxsIGRvX2NoZWNrbGljZW5zZSIKK2RvX2NoZWNrbGljZW5zZWFsbFtyZWNpZGVwdGFza10gPSAiZG9fJHtCQl9ERUZBVUxUX1RBU0t9IgorZG9fY2hlY2tsaWNlbnNlYWxsW25vc3RhbXBdID0gIjEiCitkb19jaGVja2xpY2Vuc2VhbGwoKSB7CisgICAgICAgIDoKK30KKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMtYmFzZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLWJhc2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTE4ZThiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLWJhc2UuYmJjbGFzcwpAQCAtMCwwICsxLDQgQEAKK0RFUEVORFMgICs9ICIke0BbIiR7UFlUSE9OX1BOfS1uYXRpdmUgJHtQWVRIT05fUE59IiwgIiJdWyhkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSA9PSAnJyldfSIKK1JERVBFTkRTXyR7UE59ICs9ICIke0BbJycsICcke1BZVEhPTl9QTn0tY29yZSddWycke0NMQVNTT1ZFUlJJREV9JyA9PSAnY2xhc3MtdGFyZ2V0J119IgorCitpbmhlcml0IGRpc3R1dGlscy1jb21tb24tYmFzZSBweXRob25uYXRpdmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy1jb21tb24tYmFzZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLWNvbW1vbi1iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI3Mjc1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy1jb21tb24tYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsMjQgQEAKK2luaGVyaXQgcHl0aG9uLWRpcgorCitFWFRSQV9PRU1BS0UgPSAiIgorCitleHBvcnQgU1RBR0lOR19JTkNESVIKK2V4cG9ydCBTVEFHSU5HX0xJQkRJUgorCitQQUNLQUdFUyA9ICIke1BOfS1zdGF0aWNkZXYgJHtQTn0tZGV2ICR7UE59LWRiZyAke1BOfS1kb2MgJHtQTn0iCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vKiAke2xpYmRpcn0vJHtQWVRIT05fRElSfS8qIgorCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIlwKKyAgJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vKi5hIFwKKyIKK0ZJTEVTXyR7UE59LWRldiArPSAiXAorICAke2RhdGFkaXJ9L3BrZ2NvbmZpZyBcCisgICR7bGliZGlyfS9wa2djb25maWcgXAorICAke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8qLmxhIFwKKyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiXAorICAke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8uZGVidWcgXAorICAke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8qLy5kZWJ1ZyBcCisgICR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LyovKi8uZGVidWcgXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLW5hdGl2ZS1iYXNlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMtbmF0aXZlLWJhc2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDljYjk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLW5hdGl2ZS1iYXNlLmJiY2xhc3MKQEAgLTAsMCArMSwzIEBACitpbmhlcml0IGRpc3R1dGlscy1jb21tb24tYmFzZQorCitERVBFTkRTICArPSAiJHtAWyIke1BZVEhPTl9QTn0tbmF0aXZlIiwgIiJdWyhkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSA9PSAnJyldfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy10b29scy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLXRvb2xzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQzNDUwZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy10b29scy5iYmNsYXNzCkBAIC0wLDAgKzEsNzcgQEAKK0RJU1RVVElMU19CVUlMRF9BUkdTID89ICIiCitESVNUVVRJTFNfU1RBR0VfSEVBREVSU19BUkdTID89ICItLWluc3RhbGwtZGlyPSR7U1RBR0lOR19JTkNESVJ9LyR7UFlUSE9OX0RJUn0iCitESVNUVVRJTFNfU1RBR0VfQUxMX0FSR1MgPz0gIi0tcHJlZml4PSR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH0gXAorICAgIC0taW5zdGFsbC1kYXRhPSR7U1RBR0lOR19EQVRBRElSfSIKK0RJU1RVVElMU19JTlNUQUxMX0FSR1MgPz0gIi0tcHJlZml4PSR7RH0vJHtwcmVmaXh9IFwKKyAgICAtLWluc3RhbGwtZGF0YT0ke0R9LyR7ZGF0YWRpcn0iCisKK2Rpc3R1dGlsc19kb19jb21waWxlKCkgeworICAgICAgICAgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisgICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgYnVpbGQgJHtESVNUVVRJTFNfQlVJTERfQVJHU30gfHwgXAorICAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGJ1aWxkX2V4dCBleGVjdXRpb24gZmFpbGVkLiIKK30KKworZGlzdHV0aWxzX3N0YWdlX2hlYWRlcnMoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtTVEFHSU5HX0RJUl9IT1NUfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbF9oZWFkZXJzICR7RElTVFVUSUxTX1NUQUdFX0hFQURFUlNfQVJHU30gfHwgXAorICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbF9oZWFkZXJzIGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitkaXN0dXRpbHNfc3RhZ2VfYWxsKCkgeworICAgICAgICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgaW5zdGFsbCAtZCAke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKyAgICAgICAgUFlUSE9OUEFUSD0ke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gXAorICAgICAgICBCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgJHtESVNUVVRJTFNfU1RBR0VfQUxMX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgKHN0YWdlKSBleGVjdXRpb24gZmFpbGVkLiIKK30KKworZGlzdHV0aWxzX2RvX2luc3RhbGwoKSB7CisgICAgICAgIGVjaG8gIkJlZ2lubmluZyAke1BOfSBJbnN0YWxsIC4uLiIKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKyAgICAgICAgZWNobyAiU3RlcCAyIG9mICR7UE59IEluc3RhbGwgLi4uIgorICAgICAgICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgUFlUSE9OUEFUSD0ke0R9LyR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IFwKKyAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsIC0taW5zdGFsbC1saWI9JHtEfS8ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSAke0RJU1RVVElMU19JTlNUQUxMX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgZXhlY3V0aW9uIGZhaWxlZC4iCisKKyAgICAgICAgZWNobyAiU3RlcCAzIG9mICR7UE59IEluc3RhbGwgLi4uIgorICAgICAgICAjIHN1cHBvcnQgZmlsZW5hbWVzIHdpdGggKnNwYWNlcyoKKyAgICAgICAgZmluZCAke0R9IC1uYW1lICIqLnB5IiAtcHJpbnQwIHwgd2hpbGUgcmVhZCAtZCAkJ1wwJyBpIDsgZG8gXAorICAgICAgICAgICAgc2VkIC1pIC1lIHM6JHtEfTo6ZyAkaQorICAgICAgICBkb25lCisKKyAgICAgICAgZWNobyAiU3RlcCA0IG9mICR7UE59IEluc3RhbGwgLi4uIgorICAgICAgICBpZiB0ZXN0IC1lICR7RH0ke2JpbmRpcn0gOyB0aGVuCQorICAgICAgICAgICAgZm9yIGkgaW4gJHtEfSR7YmluZGlyfS8qIDsgZG8gXAorICAgICAgICAgICAgICAgIHNlZCAtaSAtZSBzOiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfToke2JpbmRpcn06ZyAkaQorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorCisgICAgICAgIGVjaG8gIlN0ZXAgNCBvZiAke1BOfSBJbnN0YWxsIC4uLiIKKyAgICAgICAgaWYgdGVzdCAtZSAke0R9JHtzYmluZGlyfTsgdGhlbgorICAgICAgICAgICAgZm9yIGkgaW4gJHtEfSR7c2JpbmRpcn0vKiA7IGRvIFwKKyAgICAgICAgICAgICAgICBzZWQgLWkgLWUgczoke1NUQUdJTkdfQklORElSX05BVElWRX06JHtiaW5kaXJ9OmcgJGkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKworICAgICAgICBlY2hvICJTdGVwIDUgb2YgJHtQTn0gSW5zdGFsbCAuLi4iCisgICAgICAgIHJtIC1mICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9lYXN5LWluc3RhbGwucHRoCisgICAgICAgIAorICAgICAgICAjCisgICAgICAgICMgRklYTUU6IEJhbmRhaWQgYWdhaW5zdCB3cm9uZyBkYXRhZGlyIGNvbXB1dGF0aW9uCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAtZSAke0R9JHtkYXRhZGlyfS9zaGFyZTsgdGhlbgorICAgICAgICAgICAgbXYgLWYgJHtEfSR7ZGF0YWRpcn0vc2hhcmUvKiAke0R9JHtkYXRhZGlyfS8KKyAgICAgICAgZmkKK30KKworI0VYUE9SVF9GVU5DVElPTlMgZG9fY29tcGlsZSBkb19pbnN0YWxsCisKK2V4cG9ydCBMRFNIQVJFRD0iJHtDQ0xEfSAtc2hhcmVkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDA2NzEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLmJiY2xhc3MKQEAgLTAsMCArMSw4NiBAQAoraW5oZXJpdCBkaXN0dXRpbHMtYmFzZQorCitESVNUVVRJTFNfQlVJTERfQVJHUyA/PSAiIgorRElTVFVUSUxTX1NUQUdFX0hFQURFUlNfQVJHUyA/PSAiLS1pbnN0YWxsLWRpcj0ke1NUQUdJTkdfSU5DRElSfS8ke1BZVEhPTl9ESVJ9IgorRElTVFVUSUxTX1NUQUdFX0FMTF9BUkdTID89ICItLXByZWZpeD0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9IFwKKyAgICAtLWluc3RhbGwtZGF0YT0ke1NUQUdJTkdfREFUQURJUn0iCitESVNUVVRJTFNfSU5TVEFMTF9BUkdTID89ICItLXByZWZpeD0ke0R9LyR7cHJlZml4fSBcCisgICAgLS1pbnN0YWxsLWRhdGE9JHtEfS8ke2RhdGFkaXJ9IgorCitkaXN0dXRpbHNfZG9fY29tcGlsZSgpIHsKKyAgICAgICAgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorICAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGJ1aWxkICR7RElTVFVUSUxTX0JVSUxEX0FSR1N9IHx8IFwKKyAgICAgICAgIGJiZmF0YWwgIiR7UFlUSE9OX1BOfSBzZXR1cC5weSBidWlsZCBleGVjdXRpb24gZmFpbGVkLiIKK30KKworZGlzdHV0aWxzX3N0YWdlX2hlYWRlcnMoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtTVEFHSU5HX0RJUl9IT1NUfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbF9oZWFkZXJzICR7RElTVFVUSUxTX1NUQUdFX0hFQURFUlNfQVJHU30gfHwgXAorICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbF9oZWFkZXJzIGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitkaXN0dXRpbHNfc3RhZ2VfYWxsKCkgeworICAgICAgICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgaW5zdGFsbCAtZCAke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKyAgICAgICAgUFlUSE9OUEFUSD0ke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gXAorICAgICAgICBCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgJHtESVNUVVRJTFNfU1RBR0VfQUxMX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgKHN0YWdlKSBleGVjdXRpb24gZmFpbGVkLiIKK30KKworZGlzdHV0aWxzX2RvX2luc3RhbGwoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CisgICAgICAgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICBQWVRIT05QQVRIPSR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSBcCisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbCAtLWluc3RhbGwtbGliPSR7RH0vJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gJHtESVNUVVRJTFNfSU5TVEFMTF9BUkdTfSB8fCBcCisgICAgICAgIGJiZmF0YWwgIiR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsIGV4ZWN1dGlvbiBmYWlsZWQuIgorCisgICAgICAgICMgc3VwcG9ydCBmaWxlbmFtZXMgd2l0aCAqc3BhY2VzKgorICAgICAgICAjIG9ubHkgbW9kaWZ5IGZpbGUgaWYgaXQgY29udGFpbnMgcGF0aCAgYW5kIHJlY29tcGlsZSBpdAorICAgICAgICBmaW5kICR7RH0gLW5hbWUgIioucHkiIC1leGVjIGdyZXAgLXEgJHtEfSB7fSBcOyAtZXhlYyBzZWQgLWkgLWUgczoke0R9OjpnIHt9IFw7IC1leGVjICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbiAtbWNvbXBpbGVhbGwge30gXDsKKworICAgICAgICBpZiB0ZXN0IC1lICR7RH0ke2JpbmRpcn0gOyB0aGVuCQorICAgICAgICAgICAgZm9yIGkgaW4gJHtEfSR7YmluZGlyfS8qIDsgZG8gXAorICAgICAgICAgICAgICAgIGlmIFsgJHtQTn0gIT0gIiR7QlBOfS1uYXRpdmUiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAJc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uOiR7YmluZGlyfS9lbnZcIHB5dGhvbjpnICRpCisJCWZpCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9OiR7YmluZGlyfTpnICRpCisgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisKKyAgICAgICAgaWYgdGVzdCAtZSAke0R9JHtzYmluZGlyfTsgdGhlbgorICAgICAgICAgICAgZm9yIGkgaW4gJHtEfSR7c2JpbmRpcn0vKiA7IGRvIFwKKyAgICAgICAgICAgICAgICBpZiBbICR7UE59ICE9ICIke0JQTn0tbmF0aXZlIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgCXNlZCAtaSAtZSBzOiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbjoke2JpbmRpcn0vZW52XCBweXRob246ZyAkaQorCQlmaQorICAgICAgICAgICAgICAgIHNlZCAtaSAtZSBzOiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfToke2JpbmRpcn06ZyAkaQorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorCisgICAgICAgIHJtIC1mICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9lYXN5LWluc3RhbGwucHRoCisgICAgICAgIHJtIC1mICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9zaXRlLnB5KgorICAgICAgICAKKyAgICAgICAgIworICAgICAgICAjIEZJWE1FOiBCYW5kYWlkIGFnYWluc3Qgd3JvbmcgZGF0YWRpciBjb21wdXRhdGlvbgorICAgICAgICAjCisgICAgICAgIGlmIHRlc3QgLWUgJHtEfSR7ZGF0YWRpcn0vc2hhcmU7IHRoZW4KKyAgICAgICAgICAgIG12IC1mICR7RH0ke2RhdGFkaXJ9L3NoYXJlLyogJHtEfSR7ZGF0YWRpcn0vCisgICAgICAgICAgICBybWRpciAke0R9JHtkYXRhZGlyfS9zaGFyZQorICAgICAgICBmaQorCisJIyBGaXggYmFja3BvcnQgbW9kdWxlcworCWlmIHRlc3QgLWUgJHtTVEFHSU5HX0xJQkRJUn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzL2JhY2twb3J0cy9fX2luaXRfXy5weSAmJiB0ZXN0IC1lICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9iYWNrcG9ydHMvX19pbml0X18ucHk7IHRoZW4KKwkgICBybSAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vYmFja3BvcnRzL19faW5pdF9fLnB5OworCSAgIHJtICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9iYWNrcG9ydHMvX19pbml0X18ucHljOworCWZpCit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29tcGlsZSBkb19pbnN0YWxsCisKK2V4cG9ydCBMRFNIQVJFRD0iJHtDQ0xEfSAtc2hhcmVkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy1iYXNlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMzLWJhc2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjNhYTAwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy1iYXNlLmJiY2xhc3MKQEAgLTAsMCArMSw4IEBACitERVBFTkRTICArPSAiJHtAWyIke1BZVEhPTl9QTn0tbmF0aXZlICR7UFlUSE9OX1BOfSIsICIiXVsoZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgPT0gJycpXX0iCitSREVQRU5EU18ke1BOfSArPSAiJHtAWycnLCAnJHtQWVRIT05fUE59LWNvcmUnXVsnJHtDTEFTU09WRVJSSURFfScgPT0gJ2NsYXNzLXRhcmdldCddfSIKKworUFlUSE9OX0JBU0VWRVJTSU9OID0gIjMuNCIKK1BZVEhPTl9BQkkgPSAibSIKKworaW5oZXJpdCBkaXN0dXRpbHMtY29tbW9uLWJhc2UgcHl0aG9uM25hdGl2ZQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMzLW5hdGl2ZS1iYXNlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMzLW5hdGl2ZS1iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTExNzEwMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3R1dGlsczMtbmF0aXZlLWJhc2UuYmJjbGFzcwpAQCAtMCwwICsxLDQgQEAKK1BZVEhPTl9CQVNFVkVSU0lPTiA9ICIzLjQiCitQWVRIT05fQUJJID0gIm0iCisKK2luaGVyaXQgZGlzdHV0aWxzLW5hdGl2ZS1iYXNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMzLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkwOWVmNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3R1dGlsczMuYmJjbGFzcwpAQCAtMCwwICsxLDk2IEBACitpbmhlcml0IGRpc3R1dGlsczMtYmFzZQorCitESVNUVVRJTFNfQlVJTERfQVJHUyA/PSAiIgorRElTVFVUSUxTX0JVSUxEX0VYVF9BUkdTID89ICIiCitESVNUVVRJTFNfU1RBR0VfSEVBREVSU19BUkdTID89ICItLWluc3RhbGwtZGlyPSR7U1RBR0lOR19JTkNESVJ9LyR7UFlUSE9OX0RJUn0iCitESVNUVVRJTFNfU1RBR0VfQUxMX0FSR1MgPz0gIi0tcHJlZml4PSR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH0gXAorICAgIC0taW5zdGFsbC1kYXRhPSR7U1RBR0lOR19EQVRBRElSfSIKK0RJU1RVVElMU19JTlNUQUxMX0FSR1MgPz0gIi0tcHJlZml4PSR7RH0vJHtwcmVmaXh9IFwKKyAgICAtLWluc3RhbGwtZGF0YT0ke0R9LyR7ZGF0YWRpcn0iCisKK2Rpc3R1dGlsczNfZG9fY29tcGlsZSgpIHsKKyAgICAgICAgaWYgWyAke0JVSUxEX1NZU30gIT0gJHtIT1NUX1NZU30gXTsgdGhlbgorICAgICAgICAgICAgICAgIFNZUz0ke01BQ0hJTkV9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBTWVM9JHtIT1NUX1NZU30KKyAgICAgICAgZmkKKyAgICAgICAgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtTWVN9IFwKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IFwKKyAgICAgICAgYnVpbGQgJHtESVNUVVRJTFNfQlVJTERfQVJHU30gfHwgXAorICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgYnVpbGRfZXh0IGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitkaXN0dXRpbHMzX3N0YWdlX2hlYWRlcnMoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtTVEFHSU5HX0RJUl9IT1NUfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CisgICAgICAgIGlmIFsgJHtCVUlMRF9TWVN9ICE9ICR7SE9TVF9TWVN9IF07IHRoZW4KKyAgICAgICAgICAgICAgICBTWVM9JHtNQUNISU5FfQorICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgU1lTPSR7SE9TVF9TWVN9CisgICAgICAgIGZpCisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtTWVN9IFwKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGxfaGVhZGVycyAke0RJU1RVVElMU19TVEFHRV9IRUFERVJTX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGxfaGVhZGVycyBleGVjdXRpb24gZmFpbGVkLiIKK30KKworZGlzdHV0aWxzM19zdGFnZV9hbGwoKSB7CisgICAgICAgIGlmIFsgJHtCVUlMRF9TWVN9ICE9ICR7SE9TVF9TWVN9IF07IHRoZW4KKyAgICAgICAgICAgICAgICBTWVM9JHtNQUNISU5FfQorICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgU1lTPSR7SE9TVF9TWVN9CisgICAgICAgIGZpCisgICAgICAgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICBpbnN0YWxsIC1kICR7U1RBR0lOR19ESVJfSE9TVH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfQorICAgICAgICBQWVRIT05QQVRIPSR7U1RBR0lOR19ESVJfSE9TVH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSBcCisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtTWVN9IFwKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgJHtESVNUVVRJTFNfU1RBR0VfQUxMX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgKHN0YWdlKSBleGVjdXRpb24gZmFpbGVkLiIKK30KKworZGlzdHV0aWxzM19kb19pbnN0YWxsKCkgeworICAgICAgICBpbnN0YWxsIC1kICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfQorICAgICAgICBpZiBbICR7QlVJTERfU1lTfSAhPSAke0hPU1RfU1lTfSBdOyB0aGVuCisgICAgICAgICAgICAgICAgU1lTPSR7TUFDSElORX0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFNZUz0ke0hPU1RfU1lTfQorICAgICAgICBmaQorICAgICAgICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgUFlUSE9OUEFUSD0ke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gXAorICAgICAgICBCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7U1lTfSBcCisgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsIC0taW5zdGFsbC1saWI9JHtEfS8ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSAke0RJU1RVVElMU19JTlNUQUxMX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgZXhlY3V0aW9uIGZhaWxlZC4iCisKKyAgICAgICAgIyBzdXBwb3J0IGZpbGVuYW1lcyB3aXRoICpzcGFjZXMqCisgICAgICAgIGZpbmQgJHtEfSAtbmFtZSAiKi5weSIgLWV4ZWMgZ3JlcCAtcSAke0R9IHt9IFw7IC1leGVjIHNlZCAtaSAtZSBzOiR7RH06Omcge30gXDsKKworICAgICAgICBpZiB0ZXN0IC1lICR7RH0ke2JpbmRpcn0gOyB0aGVuCQorICAgICAgICAgICAgZm9yIGkgaW4gJHtEfSR7YmluZGlyfS8qIDsgZG8gXAorICAgICAgICAgICAgICAgIHNlZCAtaSAtZSBzOiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfToke2JpbmRpcn0vZW52XCAke1BZVEhPTl9QTn06ZyAkaQorICAgICAgICAgICAgICAgIHNlZCAtaSAtZSBzOiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfToke2JpbmRpcn06ZyAkaQorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorCisgICAgICAgIGlmIHRlc3QgLWUgJHtEfSR7c2JpbmRpcn07IHRoZW4KKyAgICAgICAgICAgIGZvciBpIGluICR7RH0ke3NiaW5kaXJ9LyogOyBkbyBcCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi0ke1BZVEhPTl9QTn0vJHtQWVRIT05fUE59OiR7YmluZGlyfS9lbnZcICR7UFlUSE9OX1BOfTpnICRpCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9OiR7YmluZGlyfTpnICRpCisgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisKKyAgICAgICAgcm0gLWYgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2Vhc3ktaW5zdGFsbC5wdGgKKyAgICAgICAgCisgICAgICAgICMKKyAgICAgICAgIyBGSVhNRTogQmFuZGFpZCBhZ2FpbnN0IHdyb25nIGRhdGFkaXIgY29tcHV0YXRpb24KKyAgICAgICAgIworICAgICAgICBpZiB0ZXN0IC1lICR7RH0ke2RhdGFkaXJ9L3NoYXJlOyB0aGVuCisgICAgICAgICAgICBtdiAtZiAke0R9JHtkYXRhZGlyfS9zaGFyZS8qICR7RH0ke2RhdGFkaXJ9LworICAgICAgICAgICAgcm1kaXIgJHtEfSR7ZGF0YWRpcn0vc2hhcmUKKyAgICAgICAgZmkKK30KKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb21waWxlIGRvX2luc3RhbGwKKworZXhwb3J0IExEU0hBUkVEPSIke0NDTER9IC1zaGFyZWQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9leHRlcm5hbHNyYy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZXh0ZXJuYWxzcmMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmE1ODE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZXh0ZXJuYWxzcmMuYmJjbGFzcwpAQCAtMCwwICsxLDkyIEBACisjIENvcHlyaWdodCAoQykgMjAxMiBMaW51eCBGb3VuZGF0aW9uCisjIEF1dGhvcjogUmljaGFyZCBQdXJkaWUKKyMgU29tZSBjb2RlIGFuZCBpbmZsdWVuY2UgdGFrZW4gZnJvbSBzcmN0cmVlLmJiY2xhc3M6CisjIENvcHlyaWdodCAoQykgMjAwOSBDaHJpcyBMYXJzb24gPGNsYXJzb25Aa2VyZ290aC5jb20+CisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUIGZvciB0aGUgdGVybXMpCisjCisjIGV4dGVybmFsc3JjLmJiY2xhc3MgZW5hYmxlcyB1c2Ugb2YgYW4gZXhpc3Rpbmcgc291cmNlIHRyZWUsIHVzdWFsbHkgZXh0ZXJuYWwgdG8gCisjIHRoZSBidWlsZCBzeXN0ZW0gdG8gYnVpbGQgYSBwaWVjZSBvZiBzb2Z0d2FyZSByYXRoZXIgdGhhbiB0aGUgdXN1YWwgZmV0Y2gvdW5wYWNrL3BhdGNoCisjIHByb2Nlc3MuCisjCisjIFRvIHVzZSwgYWRkIGV4dGVybmFsc3JjIHRvIHRoZSBnbG9iYWwgaW5oZXJpdCBhbmQgc2V0IEVYVEVSTkFMU1JDIHRvIHBvaW50IGF0IHRoZQorIyBkaXJlY3RvcnkgeW91IHdhbnQgdG8gdXNlIGNvbnRhaW5pbmcgdGhlIHNvdXJjZXMgZS5nLiBmcm9tIGxvY2FsLmNvbmYgZm9yIGEgcmVjaXBlCisjIGNhbGxlZCAibXlyZWNpcGUiIHlvdSB3b3VsZCBkbzoKKyMKKyMgSU5IRVJJVCArPSAiZXh0ZXJuYWxzcmMiCisjIEVYVEVSTkFMU1JDX3BuLW15cmVjaXBlID0gIi9wYXRoL3RvL215L3NvdXJjZS90cmVlIgorIworIyBJbiBvcmRlciB0byBtYWtlIHRoaXMgY2xhc3Mgd29yayBmb3IgYm90aCB0YXJnZXQgYW5kIG5hdGl2ZSB2ZXJzaW9ucyAob3Igd2l0aAorIyBtdWx0aWxpYnMvY3Jvc3Mgb3Igb3RoZXIgQkJDTEFTU0VYVEVORCB2YXJpYW50cyksIEIgaXMgc2V0IHRvIHBvaW50IHRvIGEgc2VwYXJhdGUKKyMgZGlyZWN0b3J5IHVuZGVyIHRoZSB3b3JrIGRpcmVjdG9yeSAoc3BsaXQgc291cmNlIGFuZCBidWlsZCBkaXJlY3RvcmllcykuIFRoaXMgaXMKKyMgdGhlIGRlZmF1bHQsIGJ1dCB0aGUgYnVpbGQgZGlyZWN0b3J5IGNhbiBiZSBzZXQgdG8gdGhlIHNvdXJjZSBkaXJlY3RvcnkgaWYKKyMgY2lyY3Vtc3RhbmNlcyBkaWN0YXRlIGJ5IHNldHRpbmcgRVhURVJOQUxTUkNfQlVJTEQgdG8gdGhlIHNhbWUgdmFsdWUsIGUuZy46CisjCisjIEVYVEVSTkFMU1JDX0JVSUxEX3BuLW15cmVjaXBlID0gIi9wYXRoL3RvL215L3NvdXJjZS90cmVlIgorIworCitTUkNUUkVFQ09WRVJFRFRBU0tTID89ICJkb19wYXRjaCBkb191bnBhY2sgZG9fZmV0Y2giCisKK3B5dGhvbiAoKSB7CisgICAgZXh0ZXJuYWxzcmMgPSBkLmdldFZhcignRVhURVJOQUxTUkMnLCBUcnVlKQorICAgIGlmIGV4dGVybmFsc3JjOgorICAgICAgICBkLnNldFZhcignUycsIGV4dGVybmFsc3JjKQorICAgICAgICBleHRlcm5hbHNyY2J1aWxkID0gZC5nZXRWYXIoJ0VYVEVSTkFMU1JDX0JVSUxEJywgVHJ1ZSkKKyAgICAgICAgaWYgZXh0ZXJuYWxzcmNidWlsZDoKKyAgICAgICAgICAgIGQuc2V0VmFyKCdCJywgZXh0ZXJuYWxzcmNidWlsZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGQuc2V0VmFyKCdCJywgJyR7V09SS0RJUn0vJHtCUE59LSR7UFZ9LycpCisKKyAgICAgICAgbG9jYWxfc3JjdXJpID0gW10KKyAgICAgICAgZmV0Y2ggPSBiYi5mZXRjaDIuRmV0Y2goKGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCksIGQpCisgICAgICAgIGZvciB1cmwgaW4gZmV0Y2gudXJsczoKKyAgICAgICAgICAgIHVybF9kYXRhID0gZmV0Y2gudWRbdXJsXQorICAgICAgICAgICAgcGFybSA9IHVybF9kYXRhLnBhcm0KKyAgICAgICAgICAgIGlmICh1cmxfZGF0YS50eXBlID09ICdmaWxlJyBvcgorICAgICAgICAgICAgICAgICAgICAndHlwZScgaW4gcGFybSBhbmQgcGFybVsndHlwZSddID09ICdrbWV0YScpOgorICAgICAgICAgICAgICAgIGxvY2FsX3NyY3VyaS5hcHBlbmQodXJsKQorCisgICAgICAgIGQuc2V0VmFyKCdTUkNfVVJJJywgJyAnLmpvaW4obG9jYWxfc3JjdXJpKSkKKworICAgICAgICBpZiAne1NSQ1BWfScgaW4gZC5nZXRWYXIoJ1BWJywgRmFsc2UpOgorICAgICAgICAgICAgIyBEdW1teSB2YWx1ZSBiZWNhdXNlIHRoZSBkZWZhdWx0IGZ1bmN0aW9uIGNhbid0IGJlIGNhbGxlZCB3aXRoIGJsYW5rIFNSQ19VUkkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdTUkNQVicsICc5OTknKQorCisgICAgICAgIHRhc2tzID0gZmlsdGVyKGxhbWJkYSBrOiBkLmdldFZhckZsYWcoaywgInRhc2siKSwgZC5rZXlzKCkpCisKKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CisgICAgICAgICAgICBpZiB0YXNrLmVuZHN3aXRoKCJfc2V0c2NlbmUiKToKKyAgICAgICAgICAgICAgICAjIHNzdGF0ZSBpcyBuZXZlciBnb2luZyB0byB3b3JrIGZvciBleHRlcm5hbCBzb3VyY2UgdHJlZXMsIGRpc2FibGUgaXQKKyAgICAgICAgICAgICAgICBiYi5idWlsZC5kZWx0YXNrKHRhc2ssIGQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgU2luY2UgY29uZmlndXJlIHdpbGwgbGlrZWx5IHRvdWNoICR7U30sIGVuc3VyZSBvbmx5IHdlIGxvY2sgc28gb25lIHRhc2sgaGFzIGFjY2VzcyBhdCBhIHRpbWUKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcodGFzaywgImxvY2tmaWxlcyIsICIgJHtTfS9zaW5nbGV0YXNrLmxvY2siKQorCisgICAgICAgICAgICAjIFdlIGRvIG5vdCB3YW50IG91ciBzb3VyY2UgdG8gYmUgd2lwZWQgb3V0LCBldmVyIChrZXJuZWwuYmJjbGFzcyBkb2VzIHRoaXMgZm9yIGRvX2NsZWFuKQorICAgICAgICAgICAgY2xlYW5kaXJzID0gKGQuZ2V0VmFyRmxhZyh0YXNrLCAnY2xlYW5kaXJzJywgRmFsc2UpIG9yICcnKS5zcGxpdCgpCisgICAgICAgICAgICBzZXR2YWx1ZSA9IEZhbHNlCisgICAgICAgICAgICBmb3IgY2xlYW5kaXIgaW4gY2xlYW5kaXJzWzpdOgorICAgICAgICAgICAgICAgIGlmIGQuZXhwYW5kKGNsZWFuZGlyKSA9PSBleHRlcm5hbHNyYzoKKyAgICAgICAgICAgICAgICAgICAgY2xlYW5kaXJzLnJlbW92ZShjbGVhbmRpcikKKyAgICAgICAgICAgICAgICAgICAgc2V0dmFsdWUgPSBUcnVlCisgICAgICAgICAgICBpZiBzZXR2YWx1ZToKKyAgICAgICAgICAgICAgICBkLnNldFZhckZsYWcodGFzaywgJ2NsZWFuZGlycycsICcgJy5qb2luKGNsZWFuZGlycykpCisKKyAgICAgICAgZmV0Y2hfdGFza3MgPSBbJ2RvX2ZldGNoJywgJ2RvX3VucGFjayddCisgICAgICAgICMgSWYgd2UgZGVsdGFzayBkb19wYXRjaCwgdGhlcmUncyBubyBkZXBlbmRlbmN5IHRvIGVuc3VyZSBkb191bnBhY2sgZ2V0cyBydW4sIHNvIGFkZCBvbmUKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19jb25maWd1cmUnLCAnZGVwcycsIFsnZG9fdW5wYWNrJ10pCisKKyAgICAgICAgZm9yIHRhc2sgaW4gZC5nZXRWYXIoIlNSQ1RSRUVDT1ZFUkVEVEFTS1MiLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgbG9jYWxfc3JjdXJpIGFuZCB0YXNrIGluIGZldGNoX3Rhc2tzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBiYi5idWlsZC5kZWx0YXNrKHRhc2ssIGQpCisKKyAgICAgICAgZC5wcmVwZW5kVmFyRmxhZygnZG9fY29tcGlsZScsICdwcmVmdW5jcycsICJleHRlcm5hbHNyY19jb21waWxlX3ByZWZ1bmMgIikKKworICAgICAgICAjIEVuc3VyZSBjb21waWxhdGlvbiBoYXBwZW5zIGV2ZXJ5IHRpbWUKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19jb21waWxlJywgJ25vc3RhbXAnLCAnMScpCit9CisKK3B5dGhvbiBleHRlcm5hbHNyY19jb21waWxlX3ByZWZ1bmMoKSB7CisgICAgIyBNYWtlIGl0IG9idmlvdXMgdGhhdCB0aGlzIGlzIGhhcHBlbmluZywgc2luY2UgZm9yZ2V0dGluZyBhYm91dCBpdCBjb3VsZCBsZWFkIHRvIG11Y2ggY29uZnVzaW9uCisgICAgYmIud2FybignQ29tcGlsaW5nICVzIGZyb20gZXh0ZXJuYWwgc291cmNlICVzJyAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgZC5nZXRWYXIoJ0VYVEVSTkFMU1JDJywgVHJ1ZSkpKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZXh0cmF1c2Vycy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZXh0cmF1c2Vycy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZjU3YjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9leHRyYXVzZXJzLmJiY2xhc3MKQEAgLTAsMCArMSw2NSBAQAorIyBUaGlzIGJiY2xhc3MgaXMgbWFpbmx5IHVzZWQgZm9yIGltYWdlIGxldmVsIHVzZXIvZ3JvdXAgY29uZmlndXJhdGlvbi4KKyMgSW5oZXJpdCB0aGlzIGNsYXNzIGlmIHlvdSB3YW50IHRvIG1ha2UgRVhUUkFfVVNFUlNfUEFSQU1TIGVmZmVjdGl2ZS4KKworIyBCZWxvdyBpcyBhbiBleGFtcGxlIHNob3dpbmcgaG93IHRvIHVzZSB0aGlzIGZ1bmN0aW9uYWxpdHkuCisjIElOSEVSSVQgKz0gImV4dHJhdXNlcnMiCisjIEVYVFJBX1VTRVJTX1BBUkFNUyA9ICJcCisjIHVzZXJhZGQgLXAgJycgdGVzdGVyOyBcCisjIGdyb3VwYWRkIGRldmVsb3BlcnM7IFwKKyMgdXNlcmRlbCBub2JvZHk7IFwKKyMgZ3JvdXBkZWwgLWcgdmlkZW87IFwKKyMgZ3JvdXBtb2QgLWcgMTAyMCBkZXZlbG9wZXJzOyBcCisjIHVzZXJtb2QgLXMgL2Jpbi9zaCB0ZXN0ZXI7IFwKKyMgIgorCisKK2luaGVyaXQgdXNlcmFkZF9iYXNlCisKK0lNQUdFX0lOU1RBTExfYXBwZW5kID0gIiAke0BbJycsICdiYXNlLXBhc3N3ZCBzaGFkb3cnXVtib29sKGQuZ2V0VmFyKCdFWFRSQV9VU0VSU19QQVJBTVMnLCBUcnVlKSldfSIKKworIyBJbWFnZSBsZXZlbCB1c2VyIC8gZ3JvdXAgc2V0dGluZ3MKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EX2FwcGVuZCA9ICIgc2V0X3VzZXJfZ3JvdXA7IgorCisjIEltYWdlIGxldmVsIHVzZXIgLyBncm91cCBzZXR0aW5ncworc2V0X3VzZXJfZ3JvdXAgKCkgeworCXVzZXJfZ3JvdXBfc2V0dGluZ3M9IiR7RVhUUkFfVVNFUlNfUEFSQU1TfSIKKwlleHBvcnQgUFNFVURPPSIke0ZBS0VST09URU5WfSAke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcn0vcHNldWRvIgorCXNldHRpbmc9YGVjaG8gJHVzZXJfZ3JvdXBfc2V0dGluZ3MgfCBjdXQgLWQgJzsnIC1mMWAKKwlyZW1haW5pbmc9YGVjaG8gJHVzZXJfZ3JvdXBfc2V0dGluZ3MgfCBjdXQgLWQgJzsnIC1mMi1gCisJd2hpbGUgdGVzdCAieCRzZXR0aW5nIiAhPSAieCI7IGRvCisJCWNtZD1gZWNobyAkc2V0dGluZyB8IGN1dCAtZCAnICcgLWYxYAorCQlvcHRzPWBlY2hvICRzZXR0aW5nIHwgY3V0IC1kICcgJyAtZjItYAorCQkjIERpZmZlcmVudCBmcm9tIHVzZXJhZGQuYmJjbGFzcywgdGhlcmUncyBubyBmaWxlIGxvY2tpbmcgaXNzdWUgaGVyZSwgYXMKKwkJIyB0aGlzIHNldHRpbmcgaXMgYWN0dWFsbHkgYSBzZXJpYWwgcHJvY2Vzcy4gU28gd2Ugb25seSByZXRyeSBvbmNlLgorCQljYXNlICRjbWQgaW4KKwkJCXVzZXJhZGQpCisJCQkJcGVyZm9ybV91c2VyYWRkICIke0lNQUdFX1JPT1RGU30iICItUiAke0lNQUdFX1JPT1RGU30gJG9wdHMiIDEKKwkJCQk7OworCQkJZ3JvdXBhZGQpCisJCQkJcGVyZm9ybV9ncm91cGFkZCAiJHtJTUFHRV9ST09URlN9IiAiLVIgJHtJTUFHRV9ST09URlN9ICRvcHRzIiAxCisJCQkJOzsKKwkJCXVzZXJkZWwpCisJCQkJcGVyZm9ybV91c2VyZGVsICIke0lNQUdFX1JPT1RGU30iICItUiAke0lNQUdFX1JPT1RGU30gJG9wdHMiIDEKKwkJCQk7OworCQkJZ3JvdXBkZWwpCisJCQkJcGVyZm9ybV9ncm91cGRlbCAiJHtJTUFHRV9ST09URlN9IiAiLVIgJHtJTUFHRV9ST09URlN9ICRvcHRzIiAxCisJCQkJOzsKKwkJCXVzZXJtb2QpCisJCQkJcGVyZm9ybV91c2VybW9kICIke0lNQUdFX1JPT1RGU30iICItUiAke0lNQUdFX1JPT1RGU30gJG9wdHMiIDEKKwkJCQk7OworCQkJZ3JvdXBtb2QpCisJCQkJcGVyZm9ybV9ncm91cG1vZCAiJHtJTUFHRV9ST09URlN9IiAiLVIgJHtJTUFHRV9ST09URlN9ICRvcHRzIiAxCisJCQkJOzsKKwkJCSopCisJCQkJYmJmYXRhbCAiSW52YWxpZCBjb21tYW5kIGluIEVYVFJBX1VTRVJTX1BBUkFNUzogJGNtZCIKKwkJCQk7OworCQllc2FjCisJCSMgQXZvaWQgaW5maW5pdGUgbG9vcCBpZiB0aGUgbGFzdCBwYXJhbWV0ZXIgZG9lc24ndCBlbmQgd2l0aCAnOycKKwkJaWYgWyAiJHNldHRpbmciID0gIiRyZW1haW5pbmciIF07IHRoZW4KKwkJCWJyZWFrCisJCWZpCisJCSMgaXRlcmF0ZSB0byB0aGUgbmV4dCBzZXR0aW5nCisJCXNldHRpbmc9YGVjaG8gJHJlbWFpbmluZyB8IGN1dCAtZCAnOycgLWYxYAorCQlyZW1haW5pbmc9YGVjaG8gJHJlbWFpbmluZyB8IGN1dCAtZCAnOycgLWYyLWAKKwlkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9mb250Y2FjaGUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ZvbnRjYWNoZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMjIzODcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9mb250Y2FjaGUuYmJjbGFzcwpAQCAtMCwwICsxLDQ1IEBACisjCisjIFRoaXMgY2xhc3Mgd2lsbCBnZW5lcmF0ZSB0aGUgcHJvcGVyIHBvc3RpbnN0L3Bvc3RybSBzY3JpcHRsZXRzIGZvciBmb250CisjIHBhY2thZ2VzLgorIworCitERVBFTkRTICs9ICJxZW11LW5hdGl2ZSIKK2luaGVyaXQgcWVtdQorCitGT05UX1BBQ0tBR0VTID8/PSAiJHtQTn0iCitGT05UX0VYVFJBX1JERVBFTkRTID89ICJmb250Y29uZmlnLXV0aWxzIgorRk9OVENPTkZJR19DQUNIRV9ESVIgPz0gIiR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvZm9udGNvbmZpZyIKK2ZvbnRjYWNoZV9jb21tb24oKSB7CitpZiBbICJ4JEQiICE9ICJ4IiBdIDsgdGhlbgorCSRJTlRFUkNFUFRfRElSL3Bvc3RpbnN0X2ludGVyY2VwdCB1cGRhdGVfZm9udF9jYWNoZSAke1BLR30gbWxwcmVmaXg9JHtNTFBSRUZJWH0gYmluZGlyPSR7YmluZGlyfSBcCisJCWxpYmRpcj0ke2xpYmRpcn0gYmFzZV9saWJkaXI9JHtiYXNlX2xpYmRpcn0gZm9udGNvbmZpZ2NhY2hlZGlyPSR7Rk9OVENPTkZJR19DQUNIRV9ESVJ9CitlbHNlCisJZmMtY2FjaGUKK2ZpCit9CisKK3B5dGhvbiAoKSB7CisgICAgZm9udF9wa2dzID0gZC5nZXRWYXIoJ0ZPTlRfUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgZGVwcyA9IGQuZ2V0VmFyKCJGT05UX0VYVFJBX1JERVBFTkRTIiwgVHJ1ZSkKKworICAgIGZvciBwa2cgaW4gZm9udF9wa2dzOgorICAgICAgICBpZiBkZXBzOiBkLmFwcGVuZFZhcignUkRFUEVORFNfJyArIHBrZywgJyAnK2RlcHMpCit9CisKK3B5dGhvbiBhZGRfZm9udGNhY2hlX3Bvc3RpbnN0cygpIHsKKyAgICBmb3IgcGtnIGluIGQuZ2V0VmFyKCdGT05UX1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgYmIubm90ZSgiYWRkaW5nIGZvbnRzIHBvc3RpbnN0IGFuZCBwb3N0cm0gc2NyaXB0cyB0byAlcyIgJSBwa2cpCisgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdwa2dfcG9zdGluc3QnLCBUcnVlKQorICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcG9zdGluc3QgKz0gZC5nZXRWYXIoJ2ZvbnRjYWNoZV9jb21tb24nLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCisKKyAgICAgICAgcG9zdHJtID0gZC5nZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBUcnVlKSBvciBkLmdldFZhcigncGtnX3Bvc3RybScsIFRydWUpCisgICAgICAgIGlmIG5vdCBwb3N0cm06CisgICAgICAgICAgICBwb3N0cm0gPSAnIyEvYmluL3NoXG4nCisgICAgICAgIHBvc3RybSArPSBkLmdldFZhcignZm9udGNhY2hlX2NvbW1vbicsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgcG9zdHJtKQorfQorCitQQUNLQUdFRlVOQ1MgPSsgImFkZF9mb250Y2FjaGVfcG9zdGluc3RzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZnMtdXVpZC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZnMtdXVpZC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMjYxM2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9mcy11dWlkLmJiY2xhc3MKQEAgLTAsMCArMSwyNCBAQAorIyBFeHRyYWN0IFVVSUQgZnJvbSAke1JPT1RGU30sIHdoaWNoIG11c3QgaGF2ZSBiZWVuIGJ1aWx0CisjIGJ5IHRoZSB0aW1lIHRoYXQgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZC4gT25seSB3b3JrcworIyBvbiBleHQgZmlsZSBzeXN0ZW1zIGFuZCBkZXBlbmRzIG9uIHR1bmUyZnMuCitkZWYgZ2V0X3Jvb3Rmc191dWlkKGQpOgorICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgcm9vdGZzID0gZC5nZXRWYXIoJ1JPT1RGUycsIFRydWUpCisgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyd0dW5lMmZzJywgJy1sJywgcm9vdGZzXSkKKyAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXQoJ1xuJyk6CisgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnRmlsZXN5c3RlbSBVVUlEOicpOgorICAgICAgICAgICAgdXVpZCA9IGxpbmUuc3BsaXQoKVstMV0KKyAgICAgICAgICAgIGJiLm5vdGUoJ1VVSUQgb2YgJXM6ICVzJyAlIChyb290ZnMsIHV1aWQpKQorICAgICAgICAgICAgcmV0dXJuIHV1aWQKKyAgICBiYi5mYXRhbCgnQ291bGQgbm90IGRldGVybWluZSBmaWxlc3lzdGVtIFVVSUQgb2YgJXMnICUgcm9vdGZzKQorCisjIFJlcGxhY2UgdGhlIHNwZWNpYWwgPDx1dWlkLW9mLXJvb3Rmcz4+IGluc2lkZSBhIHN0cmluZyAobGlrZSB0aGUKKyMgcm9vdD0gQVBQRU5EIHN0cmluZyBpbiBhIHN5c2xpbnV4LmNmZyBvciBndW1taWJvb3QgZW50cnkpIHdpdGggdGhlCisjIGFjdHVhbCBVVUlEIG9mIHRoZSByb290ZnMuIERvZXMgbm90aGluZyBpZiB0aGUgc3BlY2lhbCBzdHJpbmcKKyMgaXMgbm90IHVzZWQuCitkZWYgcmVwbGFjZV9yb290ZnNfdXVpZChkLCBzdHJpbmcpOgorICAgIFVVSURfUExBQ0VIT0xERVIgPSAnPDx1dWlkLW9mLXJvb3Rmcz4+JworICAgIGlmIFVVSURfUExBQ0VIT0xERVIgaW4gc3RyaW5nOgorICAgICAgICB1dWlkID0gZ2V0X3Jvb3Rmc191dWlkKGQpCisgICAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKFVVSURfUExBQ0VIT0xERVIsIHV1aWQpCisgICAgcmV0dXJuIHN0cmluZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ2NvbmYuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2djb25mLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdhZmE3MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2djb25mLmJiY2xhc3MKQEAgLTAsMCArMSw3MCBAQAorREVQRU5EUyArPSAiZ2NvbmYgZ2NvbmYtbmF0aXZlIgorCisjIFRoZXNlIGFyZSBmb3Igd2hlbiBnY29uZnRvb2wgaXMgdXNlZCBuYXRpdmVseSBhbmQgdGhlIHByZWZpeCBpc24ndCBuZWNlc3NhcmlseQorIyB0aGUgc3lzcm9vdC4gIFRPRE86IHJlcGxpY2F0ZSB0aGUgcG9zdGluc3QgbG9naWMgZm9yIC1uYXRpdmUgcGFja2FnZXMgZ29pbmcKKyMgaW50byBzeXNyb290IGFzIHRoZXkgd29uJ3QgYmUgcnVubmluZyB0aGVpciBvd24gaW5zdGFsbC10aW1lIHNjaGVtYQorIyByZWdpc3RyYXRpb24gKGRpc2FibGVkIGJlbG93KSBub3IgdGhlIHBvc3RpbnN0IHNjcmlwdCAoYXMgdGhleSBkb24ndCBoYXBwZW4pLgorZXhwb3J0IEdDT05GX1NDSEVNQV9JTlNUQUxMX1NPVVJDRSA9ICJ4bWw6bWVyZ2VkOiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7c3lzY29uZmRpcn0vZ2NvbmYvZ2NvbmYueG1sLmRlZmF1bHRzIgorZXhwb3J0IEdDT05GX0JBQ0tFTkRfRElSID0gIiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9HQ29uZi8yIgorCisjIERpc2FibGUgaW5zdGFsbC10aW1lIHNjaGVtYSByZWdpc3RyYXRpb24gYXMgd2UncmUgYSBwYWNrYWdpbmcgc3lzdGVtIHNvIHRoaXMKKyMgaGFwcGVucyBpbiB0aGUgcG9zdGluc3Qgc2NyaXB0LCBub3QgYXQgaW5zdGFsbCB0aW1lLiAgU2V0IGJvdGggdGhlIGNvbmZpZ3VyZQorIyBzY3JpcHQgb3B0aW9uIGFuZCB0aGUgdHJhZGl0aW9uYWwgZW52aW9ubWVudCB2YXJpYWJsZSBqdXN0IHRvIG1ha2Ugc3VyZS4KK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLXNjaGVtYXMtaW5zdGFsbCIKK2V4cG9ydCBHQ09ORl9ESVNBQkxFX01BS0VGSUxFX1NDSEVNQV9JTlNUQUxMID0gIjEiCisKK2djb25mX3Bvc3RpbnN0KCkgeworaWYgWyAieCREIiAhPSAieCIgXTsgdGhlbgorCWV4cG9ydCBHQ09ORl9DT05GSUdfU09VUkNFPSJ4bWw6OiREJHtzeXNjb25mZGlyfS9nY29uZi9nY29uZi54bWwuZGVmYXVsdHMiCitlbHNlCisJZXhwb3J0IEdDT05GX0NPTkZJR19TT1VSQ0U9YGdjb25mdG9vbC0yIC0tZ2V0LWRlZmF1bHQtc291cmNlYAorZmkKKworU0NIRU1BX0xPQ0FUSU9OPSREL2V0Yy9nY29uZi9zY2hlbWFzCitmb3IgU0NIRU1BIGluICR7U0NIRU1BX0ZJTEVTfTsgZG8KKwlpZiBbIC1lICRTQ0hFTUFfTE9DQVRJT04vJFNDSEVNQSBdOyB0aGVuCisJCUhPTUU9JEQvcm9vdCBnY29uZnRvb2wtMiBcCisJCQktLW1ha2VmaWxlLWluc3RhbGwtcnVsZSAkU0NIRU1BX0xPQ0FUSU9OLyRTQ0hFTUEgPiAvZGV2L251bGwKKwlmaQorZG9uZQorfQorCitnY29uZl9wcmVybSgpIHsKK1NDSEVNQV9MT0NBVElPTj0vZXRjL2djb25mL3NjaGVtYXMKK2ZvciBTQ0hFTUEgaW4gJHtTQ0hFTUFfRklMRVN9OyBkbworCWlmIFsgLWUgJFNDSEVNQV9MT0NBVElPTi8kU0NIRU1BIF07IHRoZW4KKwkJSE9NRT0vcm9vdCBHQ09ORl9DT05GSUdfU09VUkNFPWBnY29uZnRvb2wtMiAtLWdldC1kZWZhdWx0LXNvdXJjZWAgXAorCQkJZ2NvbmZ0b29sLTIgXAorCQkJLS1tYWtlZmlsZS11bmluc3RhbGwtcnVsZSAkU0NIRU1BX0xPQ0FUSU9OLyRTQ0hFTUEgPiAvZGV2L251bGwKKwlmaQorZG9uZQorfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfYXBwZW5kICgpIHsKKyAgICBpbXBvcnQgcmUKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBwa2dkZXN0ID0gIGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICAKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICBzY2hlbWFfZGlyID0gJyVzLyVzL2V0Yy9nY29uZi9zY2hlbWFzJyAlIChwa2dkZXN0LCBwa2cpCisgICAgICAgIHNjaGVtYXMgPSBbXQorICAgICAgICBzY2hlbWFfcmUgPSByZS5jb21waWxlKCIuKlwuc2NoZW1hcyQiKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzY2hlbWFfZGlyKToKKyAgICAgICAgICAgIGZvciBmIGluIG9zLmxpc3RkaXIoc2NoZW1hX2Rpcik6CisgICAgICAgICAgICAgICAgaWYgc2NoZW1hX3JlLm1hdGNoKGYpOgorICAgICAgICAgICAgICAgICAgICBzY2hlbWFzLmFwcGVuZChmKQorICAgICAgICBpZiBzY2hlbWFzICE9IFtdOgorICAgICAgICAgICAgYmIubm90ZSgiYWRkaW5nIGdjb25mIHBvc3RpbnN0IGFuZCBwcmVybSBzY3JpcHRzIHRvICVzIiAlIHBrZykKKyAgICAgICAgICAgIGQuc2V0VmFyKCdTQ0hFTUFfRklMRVMnLCAiICIuam9pbihzY2hlbWFzKSkKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpCisgICAgICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICAgICAgcG9zdGluc3QgPSAnIyEvYmluL3NoXG4nCisgICAgICAgICAgICBwb3N0aW5zdCArPSBkLmdldFZhcignZ2NvbmZfcG9zdGluc3QnLCBUcnVlKQorICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorICAgICAgICAgICAgcHJlcm0gPSBkLmdldFZhcigncGtnX3ByZXJtXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBwcmVybToKKyAgICAgICAgICAgICAgICBwcmVybSA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgICAgIHByZXJtICs9IGQuZ2V0VmFyKCdnY29uZl9wcmVybScsIFRydWUpCisgICAgICAgICAgICBkLnNldFZhcigncGtnX3ByZXJtXyVzJyAlIHBrZywgcHJlcm0pCisgICAgICAgICAgICBkLmFwcGVuZFZhcigiUkRFUEVORFNfJXMiICUgcGtnLCAnICcgKyBkLmdldFZhcignTUxQUkVGSVgnLCBGYWxzZSkgKyAnZ2NvbmYnKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ2V0dGV4dC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ2V0dGV4dC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYjg5YjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9nZXR0ZXh0LmJiY2xhc3MKQEAgLTAsMCArMSwxOSBAQAorZGVmIGdldHRleHRfZGVwZW5kZW5jaWVzKGQpOgorICAgIGlmIGQuZ2V0VmFyKCdJTkhJQklUX0RFRkFVTFRfREVQUycsIFRydWUpIGFuZCBub3Qgb2UudXRpbHMuaW5oZXJpdHMoZCwgJ2Nyb3NzLWNhbmFkaWFuJyk6CisgICAgICAgIHJldHVybiAiIgorICAgIGlmIGQuZ2V0VmFyKCdVU0VfTkxTJywgVHJ1ZSkgPT0gJ25vJzoKKyAgICAgICAgcmV0dXJuICJnZXR0ZXh0LW1pbmltYWwtbmF0aXZlIgorICAgIHJldHVybiBkLmdldFZhcignREVQRU5EU19HRVRURVhUJywgRmFsc2UpCisKK2RlZiBnZXR0ZXh0X29lY29uZihkKToKKyAgICBpZiBkLmdldFZhcignVVNFX05MUycsIFRydWUpID09ICdubyc6CisgICAgICAgIHJldHVybiAnLS1kaXNhYmxlLW5scycKKyAgICAjIFJlbW92ZSB0aGUgTkxTIGJpdHMgaWYgVVNFX05MUyBpcyBubyBvciBJTkhJQklUX0RFRkFVTFRfREVQUyBpcyBzZXQKKyAgICBpZiBkLmdldFZhcignSU5ISUJJVF9ERUZBVUxUX0RFUFMnLCBUcnVlKSBhbmQgbm90IG9lLnV0aWxzLmluaGVyaXRzKGQsICdjcm9zcy1jYW5hZGlhbicpOgorICAgICAgICByZXR1cm4gJy0tZGlzYWJsZS1ubHMnCisgICAgcmV0dXJuICItLWVuYWJsZS1ubHMiCisKK0RFUEVORFNfR0VUVEVYVCA/Pz0gInZpcnR1YWwvZ2V0dGV4dCBnZXR0ZXh0LW5hdGl2ZSIKKworQkFTRURFUEVORFMgPSsgIiR7QGdldHRleHRfZGVwZW5kZW5jaWVzKGQpfSIKK0VYVFJBX09FQ09ORl9hcHBlbmQgPSAiICR7QGdldHRleHRfb2Vjb25mKGQpfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2dub21lLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9nbm9tZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MjAyYmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9nbm9tZS5iYmNsYXNzCkBAIC0wLDAgKzEgQEAKK2luaGVyaXQgZ25vbWViYXNlIGd0ay1pY29uLWNhY2hlIGdjb25mIG1pbWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2dub21lYmFzZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ25vbWViYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIyYmE1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2dub21lYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsMzMgQEAKK2RlZiBnbm9tZV92ZXJkaXIodik6CisgICAgcmV0dXJuIG9lLnV0aWxzLnRyaW1fdmVyc2lvbih2LCAyKQorCitHTk9NRV9DT01QUkVTU19UWVBFID89ICJ4eiIKK1NFQ1RJT04gPz0gIngxMS9nbm9tZSIKK0dOT01FQk4gPz0gIiR7QlBOfSIKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9LyR7R05PTUVCTn0vJHtAZ25vbWVfdmVyZGlyKCIke1BWfSIpfS8ke0dOT01FQk59LSR7UFZ9LnRhci4ke0dOT01FX0NPTVBSRVNTX1RZUEV9O25hbWU9YXJjaGl2ZSIKKworREVQRU5EUyArPSAiZ25vbWUtY29tbW9uLW5hdGl2ZSIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vYXBwbGljYXRpb24tcmVnaXN0cnkgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L21pbWUtaW5mbyBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9taW1lL3BhY2thZ2VzIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L21pbWUvYXBwbGljYXRpb24gXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ25vbWUtMi4wIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3BvbGtpdCogXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vR0NvbmYgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ2xpYi0yLjAvc2NoZW1hcyBcCisiCisKK0ZJTEVTXyR7UE59LWRvYyArPSAiJHtkYXRhZGlyfS9kZXZoZWxwIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJcm0gLXJmICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9zY3JvbGxrZWVwZXIvKgorCXJtIC1yZiAke0R9JHtsb2NhbHN0YXRlZGlyfS9zY3JvbGxrZWVwZXIvKgorCXJtIC1mICR7RH0ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8qLmNhY2hlCit9CisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iCisKK1VOS05PV05fQ09ORklHVVJFX1dISVRFTElTVCArPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ncnViLWVmaS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3J1Yi1lZmkuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGRjMmJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3J1Yi1lZmkuYmJjbGFzcwpAQCAtMCwwICsxLDE0NSBAQAorIyBncnViLWVmaS5iYmNsYXNzCisjIENvcHlyaWdodCAoYykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIHBhY2thZ2VzL0NPUFlJTkcpCisKKyMgUHJvdmlkZSBncnViLWVmaSBzcGVjaWZpYyBmdW5jdGlvbnMgZm9yIGJ1aWxkaW5nIGJvb3RhYmxlIGltYWdlcy4KKworIyBFeHRlcm5hbCB2YXJpYWJsZXMKKyMgJHtJTklUUkR9IC0gaW5kaWNhdGVzIGEgbGlzdCBvZiBmaWxlc3lzdGVtIGltYWdlcyB0byBjb25jYXRlbmF0ZSBhbmQgdXNlIGFzIGFuIGluaXRyZCAob3B0aW9uYWwpCisjICR7Uk9PVEZTfSAtIGluZGljYXRlcyBhIGZpbGVzeXN0ZW0gaW1hZ2UgdG8gaW5jbHVkZSBhcyB0aGUgcm9vdCBmaWxlc3lzdGVtIChvcHRpb25hbCkKKyMgJHtHUlVCX0dGWFNFUklBTH0gLSBzZXQgdGhpcyB0byAxIHRvIGhhdmUgZ3JhcGhpY3MgYW5kIHNlcmlhbCBpbiB0aGUgYm9vdCBtZW51CisjICR7TEFCRUxTfSAtIGEgbGlzdCBvZiB0YXJnZXRzIGZvciB0aGUgYXV0b21hdGljIGNvbmZpZworIyAke0FQUEVORH0gLSBhbiBvdmVycmlkZSBsaXN0IG9mIGFwcGVuZCBzdHJpbmdzIGZvciBlYWNoIGxhYmVsCisjICR7R1JVQl9PUFRTfSAtIGFkZGl0aW9uYWwgb3B0aW9ucyB0byBhZGQgdG8gdGhlIGNvbmZpZywgJzsnIGRlbGltaXRlZCAjIChvcHRpb25hbCkKKyMgJHtHUlVCX1RJTUVPVVR9IC0gdGltZW91dCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBkZWF1bHQgbGFiZWwgKG9wdGlvbmFsKQorCitkb19ib290aW1nW2RlcGVuZHNdICs9ICIke01MUFJFRklYfWdydWItZWZpOmRvX2RlcGxveSIKK2RvX2Jvb3RkaXJlY3RkaXNrW2RlcGVuZHNdICs9ICIke01MUFJFRklYfWdydWItZWZpOmRvX2RlcGxveSIKKworR1JVQl9TRVJJQUwgPz0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIgorR1JVQkNGRyA9ICIke1N9L2dydWIuY2ZnIgorR1JVQl9USU1FT1VUID89ICIxMCIKKyNGSVhNRTogYnVpbGQgdGhpcyBmcm9tIHRoZSBtYWNoaW5lIGNvbmZpZworR1JVQl9PUFRTID89ICJzZXJpYWwgLS11bml0PTAgLS1zcGVlZD0xMTUyMDAgLS13b3JkPTggLS1wYXJpdHk9bm8gLS1zdG9wPTEiCisKK0VGSURJUiA9ICIvRUZJL0JPT1QiCisKKyMgTmVlZCBVVUlEIHV0aWxpdHkgY29kZS4KK2luaGVyaXQgZnMtdXVpZAorCitlZmlfcG9wdWxhdGUoKSB7CisJIyBERVNUIG11c3QgYmUgdGhlIHJvb3Qgb2YgdGhlIGltYWdlIHNvIHRoYXQgRUZJRElSIGlzIG5vdAorCSMgbmVzdGVkIHVuZGVyIGEgdG9wIGxldmVsIGRpcmVjdG9yeS4KKwlERVNUPSQxCisKKwlpbnN0YWxsIC1kICR7REVTVH0ke0VGSURJUn0KKworCUdSVUJfSU1BR0U9ImJvb3RpYTMyLmVmaSIKKwlpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAieDg2XzY0IiBdOyB0aGVuCisJCUdSVUJfSU1BR0U9ImJvb3R4NjQuZWZpIgorCWZpCisJaW5zdGFsbCAtbSAwNjQ0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtHUlVCX0lNQUdFfSAke0RFU1R9JHtFRklESVJ9CisKKwlpbnN0YWxsIC1tIDA2NDQgJHtHUlVCQ0ZHfSAke0RFU1R9JHtFRklESVJ9L2dydWIuY2ZnCit9CisKK2VmaV9pc29fcG9wdWxhdGUoKSB7CisJaXNvX2Rpcj0kMQorCWVmaV9wb3B1bGF0ZSAkaXNvX2RpcgorCSMgQnVpbGQgYSBFRkkgZGlyZWN0b3J5IHRvIGNyZWF0ZSBlZmkuaW1nCisJbWtkaXIgLXAgJHtFRklJTUdESVJ9LyR7RUZJRElSfQorCWNwICRpc29fZGlyLyR7RUZJRElSfS8qICR7RUZJSU1HRElSfSR7RUZJRElSfQorCWNwICRpc29fZGlyL3ZtbGludXogJHtFRklJTUdESVJ9CisJZWNobyAiJHtHUlVCX0lNQUdFfSIgPiAke0VGSUlNR0RJUn0vc3RhcnR1cC5uc2gKKwlpZiBbIC1mICIkaXNvX2Rpci9pbml0cmQiIF0gOyB0aGVuCisJCWNwICRpc29fZGlyL2luaXRyZCAke0VGSUlNR0RJUn0KKwlmaQorfQorCitlZmlfaGRkaW1nX3BvcHVsYXRlKCkgeworCWVmaV9wb3B1bGF0ZSAkMQorfQorCitweXRob24gYnVpbGRfZWZpX2NmZygpIHsKKyAgICBpbXBvcnQgc3lzCisKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIGlmIG5vdCB3b3JrZGlyOgorICAgICAgICBiYi5lcnJvcigiV09SS0RJUiBub3QgZGVmaW5lZCwgdW5hYmxlIHRvIHBhY2thZ2UiKQorICAgICAgICByZXR1cm4KKworICAgIGdmeHNlcmlhbCA9IGQuZ2V0VmFyKCdHUlVCX0dGWFNFUklBTCcsIFRydWUpIG9yICIiCisKKyAgICBsYWJlbHMgPSBkLmdldFZhcignTEFCRUxTJywgVHJ1ZSkKKyAgICBpZiBub3QgbGFiZWxzOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTEFCRUxTIG5vdCBkZWZpbmVkLCBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBsYWJlbHMgPT0gW106CisgICAgICAgIGJiLmRlYnVnKDEsICJObyBsYWJlbHMsIG5vdGhpbmcgdG8gZG8iKQorICAgICAgICByZXR1cm4KKworICAgIGNmaWxlID0gZC5nZXRWYXIoJ0dSVUJDRkcnLCBUcnVlKQorICAgIGlmIG5vdCBjZmlsZToKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgnVW5hYmxlIHRvIHJlYWQgR1JVQkNGRycpCisKKyAgICB0cnk6CisgICAgICAgICBjZmdmaWxlID0gZmlsZShjZmlsZSwgJ3cnKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICByYWlzZSBiYi5idWlsZC5mdW5jRmFpbGVkKCdVbmFibGUgdG8gb3BlbiAlcycgJSAoY2ZpbGUpKQorCisgICAgY2ZnZmlsZS53cml0ZSgnIyBBdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgT0VcbicpCisKKyAgICBvcHRzID0gZC5nZXRWYXIoJ0dSVUJfT1BUUycsIFRydWUpCisgICAgaWYgb3B0czoKKyAgICAgICAgZm9yIG9wdCBpbiBvcHRzLnNwbGl0KCc7Jyk6CisgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCclc1xuJyAlIG9wdCkKKworICAgIGNmZ2ZpbGUud3JpdGUoJ2RlZmF1bHQ9JXNcbicgJSAobGFiZWxzLnNwbGl0KClbMF0pKQorCisgICAgdGltZW91dCA9IGQuZ2V0VmFyKCdHUlVCX1RJTUVPVVQnLCBUcnVlKQorICAgIGlmIHRpbWVvdXQ6CisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ3RpbWVvdXQ9JXNcbicgJSB0aW1lb3V0KQorICAgIGVsc2U6CisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ3RpbWVvdXQ9NTBcbicpCisKKyAgICBpZiBnZnhzZXJpYWwgPT0gIjEiOgorICAgICAgICBidHlwZXMgPSBbIFsgIiBncmFwaGljcyBjb25zb2xlIiwgIiIgXSwKKyAgICAgICAgICAgIFsgIiBzZXJpYWwgY29uc29sZSIsIGQuZ2V0VmFyKCdHUlVCX1NFUklBTCcsIFRydWUpIG9yICIiIF0gXQorICAgIGVsc2U6CisgICAgICAgIGJ0eXBlcyA9IFsgWyAiIiwgIiIgXSBdCisKKyAgICBmb3IgbGFiZWwgaW4gbGFiZWxzLnNwbGl0KCk6CisgICAgICAgIGxvY2FsZGF0YSA9IGQuY3JlYXRlQ29weSgpCisKKyAgICAgICAgb3ZlcnJpZGVzID0gbG9jYWxkYXRhLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IG92ZXJyaWRlczoKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoJ09WRVJSSURFUyBub3QgZGVmaW5lZCcpCisKKyAgICAgICAgZm9yIGJ0eXBlIGluIGJ0eXBlczoKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsIGxhYmVsICsgJzonICsgb3ZlcnJpZGVzKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ1xubWVudWVudHJ5IFwnJXMlc1wne1xuJyAlIChsYWJlbCwgYnR5cGVbMF0pKQorICAgICAgICAgICAgbGIgPSBsYWJlbAorICAgICAgICAgICAgaWYgbGFiZWwgPT0gImluc3RhbGwiOgorICAgICAgICAgICAgICAgIGxiID0gImluc3RhbGwtZWZpIgorICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnbGludXggL3ZtbGludXogTEFCRUw9JXMnICUgKGxiKSkKKworICAgICAgICAgICAgYXBwZW5kID0gbG9jYWxkYXRhLmdldFZhcignQVBQRU5EJywgVHJ1ZSkKKyAgICAgICAgICAgIGluaXRyZCA9IGxvY2FsZGF0YS5nZXRWYXIoJ0lOSVRSRCcsIFRydWUpCisKKyAgICAgICAgICAgIGlmIGFwcGVuZDoKKyAgICAgICAgICAgICAgICBhcHBlbmQgPSByZXBsYWNlX3Jvb3Rmc191dWlkKGQsIGFwcGVuZCkKKyAgICAgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCclcycgJSAoYXBwZW5kKSkKKyAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJyAlcycgJSBidHlwZVsxXSkKKyAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ1xuJykKKworICAgICAgICAgICAgaWYgaW5pdHJkOgorICAgICAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ2luaXRyZCAvaW5pdHJkJykKKyAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ1xufVxuJykKKworICAgIGNmZ2ZpbGUuY2xvc2UoKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3NldHRpbmdzLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9nc2V0dGluZ3MuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWM1YWJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3NldHRpbmdzLmJiY2xhc3MKQEAgLTAsMCArMSwzNyBAQAorIyBBIGJiY2xhc3MgdG8gaGFuZGxlIGluc3RhbGxlZCBHU2V0dGluZ3MgKGdsaWIpIHNjaGVtYXMsIHVwZGF0ZWQgdGhlIGNvbXBpbGVkCisjIGZvcm0gb24gcGFja2FnZSBpbnN0YWxsIGFuZCByZW1vdmUuCisjCisjIFRoZSBjb21waWxlZCBzY2hlbWFzIGFyZSBwbGF0Zm9ybS1hZ25vc3RpYywgc28gd2UgY2FuIGRlcGVuZCBvbgorIyBnbGliLTIuMC1uYXRpdmUgZm9yIHRoZSBuYXRpdmUgdG9vbCBhbmQgcnVuIHRoZSBwb3N0aW5zdCBzY3JpcHQgd2hlbiB0aGUKKyMgcm9vdGZzIGJ1aWxkcyB0byBzYXZlIGEgbGl0dGxlIHRpbWUgb24gZmlyc3QgYm9vdC4KKworIyBUT0RPIHVzZSBhIHRyaWdnZXIgc28gdGhhdCB0aGlzIHJ1bnMgb25jZSBwZXIgcGFja2FnZSBvcGVyYXRpb24gcnVuCisKK0RFUEVORFMgKz0gImdsaWItMi4wLW5hdGl2ZSIKKworUkRFUEVORFNfJHtQTn0gKz0gImdsaWItMi4wLXV0aWxzIgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9nbGliLTIuMC9zY2hlbWFzIgorCitnc2V0dGluZ3NfcG9zdGluc3RybSAoKSB7CisJZ2xpYi1jb21waWxlLXNjaGVtYXMgJEQke2RhdGFkaXJ9L2dsaWItMi4wL3NjaGVtYXMKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX2FwcGVuZCAoKSB7CisgICAgcGtnID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBiYi5ub3RlKCJhZGRpbmcgZ3NldHRpbmdzIHBvc3RpbnN0IHNjcmlwdHMgdG8gJXMiICUgcGtnKQorCisgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdCcsIFRydWUpCisgICAgaWYgbm90IHBvc3RpbnN0OgorICAgICAgICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICBwb3N0aW5zdCArPSBkLmdldFZhcignZ3NldHRpbmdzX3Bvc3RpbnN0cm0nLCBUcnVlKQorICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBwb3N0aW5zdCkKKworICAgIGJiLm5vdGUoImFkZGluZyBnc2V0dGluZ3MgcG9zdHJtIHNjcmlwdHMgdG8gJXMiICUgcGtnKQorCisgICAgcG9zdHJtID0gZC5nZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBUcnVlKSBvciBkLmdldFZhcigncGtnX3Bvc3RybScsIFRydWUpCisgICAgaWYgbm90IHBvc3RybToKKyAgICAgICAgcG9zdHJtID0gJyMhL2Jpbi9zaFxuJworICAgIHBvc3RybSArPSBkLmdldFZhcignZ3NldHRpbmdzX3Bvc3RpbnN0cm0nLCBUcnVlKQorICAgIGQuc2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgcG9zdHJtKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3RrLWRvYy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3RrLWRvYy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMmY5OGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ndGstZG9jLmJiY2xhc3MKQEAgLTAsMCArMSwyNSBAQAorIyBIZWxwZXIgY2xhc3MgdG8gcHVsbCBpbiB0aGUgcmlnaHQgZ3RrLWRvYyBkZXBlbmRlbmNpZXMgYW5kIGRpc2FibGUKKyMgZ3RrLWRvYy4KKyMKKyMgTG9uZy10ZXJtIGl0IHdvdWxkIGJlIGdyZWF0IGlmIHRoaXMgY2xhc3MgY291bGQgYmUgdG9nZ2xlZCBiZXR3ZWVuCisjIGd0ay1kb2Mtc3R1Yi1uYXRpdmUgYW5kIHRoZSByZWFsIGd0ay1kb2MtbmF0aXZlLCB3aGljaCB3b3VsZCBlbmFibGUKKyMgcmUtZ2VuZXJhdGlvbiBvZiBkb2N1bWVudGF0aW9uLiAgRm9yIG5vdywgd2UnbGwgbWFrZSBkbyB3aXRoIHRoaXMgd2hpY2gKKyMgcGFja2FnZXMgdXAgYW55IGV4aXN0aW5nIGRvY3VtZW50YXRpb24gKHNvIGZyb20gdGFyYmFsbCBidWlsZHMpLgorCisjIFRoZSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeSwgd2hlcmUgdGhlIGluZnJhc3RydWN0dXJlIHdpbGwgYmUgY29waWVkLgorIyBndGtkb2NpemUgaGFzIGEgZGVmYXVsdCBvZiAiLiIgc28gdG8gaGFuZGxlIG91dC1vZi10cmVlIGJ1aWxkcyBzZXQgdGhpcyB0byAkUy4KK0dUS0RPQ19ET0NESVIgPz0gIiR7U30iCisKK0RFUEVORFNfYXBwZW5kID0gIiBndGstZG9jLXN0dWItbmF0aXZlIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kID0gIlwKKyAgLS1kaXNhYmxlLWd0ay1kb2MgXAorICAtLWRpc2FibGUtZ3RrLWRvYy1odG1sIFwKKyAgLS1kaXNhYmxlLWd0ay1kb2MtcGRmIFwKKyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSggY2QgJHtTfTsgZ3RrZG9jaXplIC0tZG9jZGlyICR7R1RLRE9DX0RPQ0RJUn0gKQorfQorCitpbmhlcml0IHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3RrLWljb24tY2FjaGUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2d0ay1pY29uLWNhY2hlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIzNThlMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2d0ay1pY29uLWNhY2hlLmJiY2xhc3MKQEAgLTAsMCArMSw2MiBAQAorRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vaWNvbnMvaGljb2xvciIKKworREVQRU5EUyArPSAiJHtAWydoaWNvbG9yLWljb24tdGhlbWUnLCAnJ11bJyR7QlBOfScgPT0gJ2hpY29sb3ItaWNvbi10aGVtZSddfSBndGstaWNvbi11dGlscy1uYXRpdmUiCisKK2d0a19pY29uX2NhY2hlX3Bvc3RpbnN0KCkgeworaWYgWyAieCREIiAhPSAieCIgXTsgdGhlbgorCSRJTlRFUkNFUFRfRElSL3Bvc3RpbnN0X2ludGVyY2VwdCB1cGRhdGVfaWNvbl9jYWNoZSAke1BLR30gbWxwcmVmaXg9JHtNTFBSRUZJWH0gbGliZGlyPSR7bGliZGlyfSBcCisJCWJhc2VfbGliZGlyPSR7YmFzZV9saWJkaXJ9CitlbHNlCisKKwkjIFVwZGF0ZSB0aGUgcGl4YnVmIGxvYWRlcnMgaW4gY2FzZSB0aGV5IGhhdmVuJ3QgYmVlbiByZWdpc3RlcmVkIHlldAorCUdES19QSVhCVUZfTU9EVUxFRElSPSR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8yLjEwLjAvbG9hZGVycyBnZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMgLS11cGRhdGUtY2FjaGUKKworCWZvciBpY29uZGlyIGluIC91c3Ivc2hhcmUvaWNvbnMvKiA7IGRvCisJCWlmIFsgLWQgJGljb25kaXIgXSA7IHRoZW4KKwkJCWd0ay11cGRhdGUtaWNvbi1jYWNoZSAtZnF0ICAkaWNvbmRpcgorCQlmaQorCWRvbmUKK2ZpCit9CisKK2d0a19pY29uX2NhY2hlX3Bvc3RybSgpIHsKK2lmIFsgIngkRCIgIT0gIngiIF07IHRoZW4KKwkkSU5URVJDRVBUX0RJUi9wb3N0aW5zdF9pbnRlcmNlcHQgdXBkYXRlX2ljb25fY2FjaGUgJHtQS0d9IG1scHJlZml4PSR7TUxQUkVGSVh9IGxpYmRpcj0ke2xpYmRpcn0gXAorCQliYXNlX2xpYmRpcj0ke2Jhc2VfbGliZGlyfQorZWxzZQorCWZvciBpY29uZGlyIGluIC91c3Ivc2hhcmUvaWNvbnMvKiA7IGRvCisJCWlmIFsgLWQgJGljb25kaXIgXSA7IHRoZW4KKwkJCWd0ay11cGRhdGUtaWNvbi1jYWNoZSAtcXQgICRpY29uZGlyCisJCWZpCisJZG9uZQorZmkKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX2FwcGVuZCAoKSB7CisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgcGtnZGVzdCA9ICBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgaWNvbl9kaXIgPSAnJXMvJXMvJXMvaWNvbnMnICUgKHBrZ2Rlc3QsIHBrZywgZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGljb25fZGlyKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgYmIubm90ZSgiYWRkaW5nIGhpY29sb3ItaWNvbi10aGVtZSBkZXBlbmRlbmN5IHRvICVzIiAlIHBrZykKKyAgICAgICAgcmRlcGVuZHMgPSAnICcgKyBkLmdldFZhcignTUxQUkVGSVgnLCBGYWxzZSkgKyAiaGljb2xvci1pY29uLXRoZW1lIgorICAgICAgICBkLmFwcGVuZFZhcignUkRFUEVORFNfJXMnICUgcGtnLCByZGVwZW5kcykKKyAgICAKKyAgICAgICAgYmIubm90ZSgiYWRkaW5nIGd0ay1pY29uLWNhY2hlIHBvc3RpbnN0IGFuZCBwb3N0cm0gc2NyaXB0cyB0byAlcyIgJSBwa2cpCisgICAgICAgIAorICAgICAgICBwb3N0aW5zdCA9IGQuZ2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcG9zdGluc3QgKz0gZC5nZXRWYXIoJ2d0a19pY29uX2NhY2hlX3Bvc3RpbnN0JywgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorCisgICAgICAgIHBvc3RybSA9IGQuZ2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBvc3RybToKKyAgICAgICAgICAgIHBvc3RybSA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcG9zdHJtICs9IGQuZ2V0VmFyKCdndGtfaWNvbl9jYWNoZV9wb3N0cm0nLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RybV8lcycgJSBwa2csIHBvc3RybSkKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3RrLWltbW9kdWxlcy1jYWNoZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3RrLWltbW9kdWxlcy1jYWNoZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNjMxNmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ndGstaW1tb2R1bGVzLWNhY2hlLmJiY2xhc3MKQEAgLTAsMCArMSw4MyBAQAorIyBUaGlzIGNsYXNzIHdpbGwgdXBkYXRlIHRoZSBpbnB1dG1ldGhvZCBtb2R1bGUgY2FjaGUgZm9yIHZpcnR1YWwga2V5Ym9hcmRzCisjCisjIFVzYWdlOiBTZXQgR1RLSU1NT0RVTEVTX1BBQ0tBR0VTIHRvIHRoZSBwYWNrYWdlcyB0aGF0IG5lZWRzIHRvIHVwZGF0ZSB0aGUgaW5wdXRtZXRob2QgbW9kdWxlcworCitERVBFTkRTID0rICJxZW11LW5hdGl2ZSIKKworaW5oZXJpdCBxZW11CisKK0dUS0lNTU9EVUxFU19QQUNLQUdFUyA/PSAiJHtQTn0iCisKK2d0a19pbW1vZHVsZV9jYWNoZV9wb3N0aW5zdCgpIHsKK2lmIFsgIngkRCIgIT0gIngiIF07IHRoZW4KKyAgICBmb3IgbWFqX3ZlciBpbiAyIDM7IGRvCisgICAgICAgIGlmIFsgLXggJEQke2JpbmRpcn0vZ3RrLXF1ZXJ5LWltbW9kdWxlcy0kbWFqX3Zlci4wIF07IHRoZW4KKyAgICAgICAgICAgIElNRklMRVM9JChscyAkRCR7bGliZGlyfS9ndGstJG1hal92ZXIuMC8qL2ltbW9kdWxlcy8qLnNvKQorICAgICAgICAgICAgJHtAcWVtdV9ydW5fYmluYXJ5KGQsICckRCcsICcke2JpbmRpcn0vZ3RrLXF1ZXJ5LWltbW9kdWxlcy0kbWFqX3Zlci4wJyl9IFwKKyAgICAgICAgICAgICAgICAkSU1GSUxFUyA+ICREL2V0Yy9ndGstJG1hal92ZXIuMC9ndGsuaW1tb2R1bGVzIDI+L2Rldi9udWxsICYmCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lICJzOiREOjoiICREL2V0Yy9ndGstJG1hal92ZXIuMC9ndGsuaW1tb2R1bGVzCisKKyAgICAgICAgICAgIFsgJD8gLW5lIDAgXSAmJiBleGl0IDEKKyAgICAgICAgZmkKKyAgICBkb25lCisKKyAgICBleGl0IDAKK2ZpCitpZiBbICEgLXogYHdoaWNoIGd0ay1xdWVyeS1pbW1vZHVsZXMtMi4wYCBdOyB0aGVuCisgICAgZ3RrLXF1ZXJ5LWltbW9kdWxlcy0yLjAgPiAvZXRjL2d0ay0yLjAvZ3RrLmltbW9kdWxlcworZmkKK2lmIFsgISAteiBgd2hpY2ggZ3RrLXF1ZXJ5LWltbW9kdWxlcy0zLjBgIF07IHRoZW4KKyAgICBndGstcXVlcnktaW1tb2R1bGVzLTMuMCA+IC9ldGMvZ3RrLTMuMC9ndGsuaW1tb2R1bGVzCitmaQorfQorCitndGtfaW1tb2R1bGVfY2FjaGVfcG9zdHJtKCkgeworaWYgWyAieCREIiAhPSAieCIgXTsgdGhlbgorICAgIGZvciBtYWpfdmVyIGluIDIgMzsgZG8KKyAgICAgICAgaWYgWyAteCAkRCR7YmluZGlyfS9ndGstcXVlcnktaW1tb2R1bGVzLSRtYWpfdmVyLjAgXTsgdGhlbgorICAgICAgICAgICAgSU1GSUxFUz0kKGxzICREJHtsaWJkaXJ9L2d0ay0kbWFqX3Zlci4wLyovaW1tb2R1bGVzLyouc28pCisgICAgICAgICAgICAke0BxZW11X3J1bl9iaW5hcnkoZCwgJyREJywgJyR7YmluZGlyfS9ndGstcXVlcnktaW1tb2R1bGVzLSRtYWpfdmVyLjAnKX0gXAorICAgICAgICAgICAgICAgICRJTUZJTEVTID4gJEQvZXRjL2d0ay0kbWFqX3Zlci4wL2d0ay5pbW1vZHVsZXMgMj4vZGV2L251bGwgJiYKKyAgICAgICAgICAgICAgICBzZWQgLWkgLWUgInM6JEQ6OiIgJEQvZXRjL2d0ay0kbWFqX3Zlci4wL2d0ay5pbW1vZHVsZXMKKworICAgICAgICAgICAgWyAkPyAtbmUgMCBdICYmIGV4aXQgMQorICAgICAgICBmaQorICAgIGRvbmUKKworICAgIGV4aXQgMAorZmkKK2lmIFsgISAteiBgd2hpY2ggZ3RrLXF1ZXJ5LWltbW9kdWxlcy0yLjBgIF07IHRoZW4KKyAgICBndGstcXVlcnktaW1tb2R1bGVzLTIuMCA+IC9ldGMvZ3RrLTIuMC9ndGsuaW1tb2R1bGVzCitmaQoraWYgWyAhIC16IGB3aGljaCBndGstcXVlcnktaW1tb2R1bGVzLTMuMGAgXTsgdGhlbgorICAgIGd0ay1xdWVyeS1pbW1vZHVsZXMtMy4wID4gL2V0Yy9ndGstMy4wL2d0ay5pbW1vZHVsZXMKK2ZpCit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19hcHBlbmQgKCkgeworICAgIGd0a2ltbW9kdWxlc19wa2dzID0gZC5nZXRWYXIoJ0dUS0lNTU9EVUxFU19QQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKworICAgIGZvciBwa2cgaW4gZ3RraW1tb2R1bGVzX3BrZ3M6CisgICAgICAgICAgICBiYi5ub3RlKCJhZGRpbmcgZ3RrLWltbW9kdWxlLWNhY2hlIHBvc3RpbnN0IGFuZCBwb3N0cm0gc2NyaXB0cyB0byAlcyIgJSBwa2cpCisKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpCisgICAgICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICAgICAgcG9zdGluc3QgPSAnIyEvYmluL3NoXG4nCisgICAgICAgICAgICBwb3N0aW5zdCArPSBkLmdldFZhcignZ3RrX2ltbW9kdWxlX2NhY2hlX3Bvc3RpbnN0JywgVHJ1ZSkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBwb3N0aW5zdCkKKworICAgICAgICAgICAgcG9zdHJtID0gZC5nZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHBvc3RybToKKyAgICAgICAgICAgICAgICBwb3N0cm0gPSAnIyEvYmluL3NoXG4nCisgICAgICAgICAgICBwb3N0cm0gKz0gZC5nZXRWYXIoJ2d0a19pbW1vZHVsZV9jYWNoZV9wb3N0cm0nLCBUcnVlKQorICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBwb3N0cm0pCit9CisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpOgorICAgICAgICBndGtpbW1vZHVsZXNfY2hlY2sgPSBkLmdldFZhcignR1RLSU1NT0RVTEVTX1BBQ0tBR0VTJywgRmFsc2UpCisgICAgICAgIGlmIG5vdCBndGtpbW1vZHVsZXNfY2hlY2s6CisgICAgICAgICAgICBiYl9maWxlbmFtZSA9IGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpCisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJFUlJPUjogJXMgaW5oZXJpdHMgZ3RrLWltbW9kdWxlcy1jYWNoZSBidXQgZG9lc24ndCBzZXQgR1RLSU1NT0RVTEVTX1BBQ0tBR0VTIiAlIGJiX2ZpbGVuYW1lKQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ndW1taWJvb3QuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2d1bW1pYm9vdC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkOWMwOGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ndW1taWJvb3QuYmJjbGFzcwpAQCAtMCwwICsxLDExOCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgZ3VtbWlib290LmJiY2xhc3MgLSBlcXVpdmFsZW50IG9mIGdydWItZWZpLmJiY2xhc3MKKyMgU2V0IEVGSV9QUk9WSURFUiA9ICJndW1taWJvb3QiIHRvIHVzZSBndW1taWJvb3Qgb24geW91ciBsaXZlIGltYWdlcyBpbnN0ZWFkIG9mIGdydWItZWZpCisjIChpbWFnZXMgYnVpbHQgYnkgYm9vdGltYWdlLmJiY2xhc3Mgb3IgYm9vdC1kaXJlY3RkaXNrLmJiY2xhc3MpCisKK2RvX2Jvb3RpbWdbZGVwZW5kc10gKz0gIiR7TUxQUkVGSVh9Z3VtbWlib290OmRvX2RlcGxveSIKK2RvX2Jvb3RkaXJlY3RkaXNrW2RlcGVuZHNdICs9ICIke01MUFJFRklYfWd1bW1pYm9vdDpkb19kZXBsb3kiCisKK0VGSURJUiA9ICIvRUZJL0JPT1QiCisKK0dVTU1JQk9PVF9DRkcgPz0gIiR7U30vbG9hZGVyLmNvbmYiCitHVU1NSUJPT1RfRU5UUklFUyA/PSAiIgorR1VNTUlCT09UX1RJTUVPVVQgPz0gIjEwIgorCisjIE5lZWQgVVVJRCB1dGlsaXR5IGNvZGUuCitpbmhlcml0IGZzLXV1aWQKKworZWZpX3BvcHVsYXRlKCkgeworICAgICAgICBERVNUPSQxCisKKyAgICAgICAgRUZJX0lNQUdFPSJndW1taWJvb3RpYTMyLmVmaSIKKyAgICAgICAgREVTVF9FRklfSU1BR0U9ImJvb3RpYTMyLmVmaSIKKyAgICAgICAgaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIng4Nl82NCIgXTsgdGhlbgorICAgICAgICAgICAgRUZJX0lNQUdFPSJndW1taWJvb3R4NjQuZWZpIgorICAgICAgICAgICAgREVTVF9FRklfSU1BR0U9ImJvb3R4NjQuZWZpIgorICAgICAgICBmaQorCisgICAgICAgIGluc3RhbGwgLWQgJHtERVNUfSR7RUZJRElSfQorICAgICAgICAjIGd1bW1pYm9vdCByZXF1aXJlcyB0aGVzZSBwYXRocyBmb3IgY29uZmlndXJhdGlvbiBmaWxlcworICAgICAgICAjIHRoZXkgYXJlIG5vdCBjdXN0b21pemFibGUgc28gbm8gcG9pbnQgaW4gbmV3IHZhcnMKKyAgICAgICAgaW5zdGFsbCAtZCAke0RFU1R9L2xvYWRlcgorICAgICAgICBpbnN0YWxsIC1kICR7REVTVH0vbG9hZGVyL2VudHJpZXMKKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtFRklfSU1BR0V9ICR7REVTVH0ke0VGSURJUn0vJHtERVNUX0VGSV9JTUFHRX0KKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7R1VNTUlCT09UX0NGR30gJHtERVNUfS9sb2FkZXIvbG9hZGVyLmNvbmYKKyAgICAgICAgZm9yIGkgaW4gJHtHVU1NSUJPT1RfRU5UUklFU307IGRvCisgICAgICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtpfSAke0RFU1R9L2xvYWRlci9lbnRyaWVzCisgICAgICAgIGRvbmUKK30KKworZWZpX2lzb19wb3B1bGF0ZSgpIHsKKyAgICAgICAgaXNvX2Rpcj0kMQorICAgICAgICBlZmlfcG9wdWxhdGUgJGlzb19kaXIKKyAgICAgICAgbWtkaXIgLXAgJHtFRklJTUdESVJ9LyR7RUZJRElSfQorICAgICAgICBjcCAkaXNvX2Rpci8ke0VGSURJUn0vKiAke0VGSUlNR0RJUn0ke0VGSURJUn0KKyAgICAgICAgY3AgJGlzb19kaXIvdm1saW51eiAke0VGSUlNR0RJUn0KKyAgICAgICAgZWNobyAiJHtERVNUX0VGSV9JTUFHRX0iID4gJHtFRklJTUdESVJ9L3N0YXJ0dXAubnNoCisgICAgICAgIGlmIFsgLWYgIiRpc29fZGlyL2luaXRyZCIgXSA7IHRoZW4KKyAgICAgICAgICAgIGNwICRpc29fZGlyL2luaXRyZCAke0VGSUlNR0RJUn0KKyAgICAgICAgZmkKK30KKworZWZpX2hkZGltZ19wb3B1bGF0ZSgpIHsKKyAgICAgICAgZWZpX3BvcHVsYXRlICQxCit9CisKK3B5dGhvbiBidWlsZF9lZmlfY2ZnKCkgeworICAgIHMgPSBkLmdldFZhcigiUyIsIFRydWUpCisgICAgbGFiZWxzID0gZC5nZXRWYXIoJ0xBQkVMUycsIFRydWUpCisgICAgaWYgbm90IGxhYmVsczoKKyAgICAgICAgYmIuZGVidWcoMSwgIkxBQkVMUyBub3QgZGVmaW5lZCwgbm90aGluZyB0byBkbyIpCisgICAgICAgIHJldHVybgorCisgICAgaWYgbGFiZWxzID09IFtdOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTm8gbGFiZWxzLCBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBjZmlsZSA9IGQuZ2V0VmFyKCdHVU1NSUJPT1RfQ0ZHJywgVHJ1ZSkKKyAgICB0cnk6CisgICAgICAgICBjZmdmaWxlID0gb3BlbihjZmlsZSwgJ3cnKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICByYWlzZSBiYi5idWlsZC5mdW5jRmFpbGVkKCdVbmFibGUgdG8gb3BlbiAlcycgJSAoY2ZpbGUpKQorCisgICAgY2ZnZmlsZS53cml0ZSgnIyBBdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgT0VcbicpCisgICAgY2ZnZmlsZS53cml0ZSgnZGVmYXVsdCAlc1xuJyAlIChsYWJlbHMuc3BsaXQoKVswXSkpCisgICAgdGltZW91dCA9IGQuZ2V0VmFyKCdHVU1NSUJPT1RfVElNRU9VVCcsIFRydWUpCisgICAgaWYgdGltZW91dDoKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgndGltZW91dCAlc1xuJyAlIHRpbWVvdXQpCisgICAgZWxzZToKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgndGltZW91dCAxMFxuJykKKyAgICBjZmdmaWxlLmNsb3NlKCkKKworICAgIGZvciBsYWJlbCBpbiBsYWJlbHMuc3BsaXQoKToKKyAgICAgICAgbG9jYWxkYXRhID0gZC5jcmVhdGVDb3B5KCkKKworICAgICAgICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKQorICAgICAgICBpZiBub3Qgb3ZlcnJpZGVzOgorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgnT1ZFUlJJREVTIG5vdCBkZWZpbmVkJykKKworICAgICAgICBlbnRyeWZpbGUgPSAiJXMvJXMuY29uZiIgJSAocywgbGFiZWwpCisgICAgICAgIGQuYXBwZW5kVmFyKCJHVU1NSUJPT1RfRU5UUklFUyIsICIgIiArIGVudHJ5ZmlsZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZW50cnljZmcgPSBvcGVuKGVudHJ5ZmlsZSwgInciKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLmZ1bmNGYWlsZWQoJ1VuYWJsZSB0byBvcGVuICVzJyAlIChlbnRyeWZpbGUpKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCBsYWJlbCArICc6JyArIG92ZXJyaWRlcykKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgZW50cnljZmcud3JpdGUoJ3RpdGxlICVzXG4nICUgbGFiZWwpCisgICAgICAgIGVudHJ5Y2ZnLndyaXRlKCdsaW51eCAvdm1saW51elxuJykKKworICAgICAgICBhcHBlbmQgPSBsb2NhbGRhdGEuZ2V0VmFyKCdBUFBFTkQnLCBUcnVlKQorICAgICAgICBpbml0cmQgPSBsb2NhbGRhdGEuZ2V0VmFyKCdJTklUUkQnLCBUcnVlKQorCisgICAgICAgIGlmIGluaXRyZDoKKyAgICAgICAgICAgIGVudHJ5Y2ZnLndyaXRlKCdpbml0cmQgL2luaXRyZFxuJykKKyAgICAgICAgbGIgPSBsYWJlbAorICAgICAgICBpZiBsYWJlbCA9PSAiaW5zdGFsbCI6CisgICAgICAgICAgICBsYiA9ICJpbnN0YWxsLWVmaSIKKyAgICAgICAgZW50cnljZmcud3JpdGUoJ29wdGlvbnMgTEFCRUw9JXMgJyAlIGxiKQorICAgICAgICBpZiBhcHBlbmQ6CisgICAgICAgICAgICBhcHBlbmQgPSByZXBsYWNlX3Jvb3Rmc191dWlkKGQsIGFwcGVuZCkKKyAgICAgICAgICAgIGVudHJ5Y2ZnLndyaXRlKCclcycgJSBhcHBlbmQpCisgICAgICAgIGVudHJ5Y2ZnLndyaXRlKCdcbicpCisgICAgICAgIGVudHJ5Y2ZnLmNsb3NlKCkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2d6aXBuYXRpdmUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2d6aXBuYXRpdmUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjZjYmJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3ppcG5hdGl2ZS5iYmNsYXNzCkBAIC0wLDAgKzEsNSBAQAorRVhUUkFOQVRJVkVQQVRIICs9ICJwaWd6LW5hdGl2ZSBnemlwLW5hdGl2ZSIKK0RFUEVORFMgKz0gImd6aXAtbmF0aXZlIgorCisjIHRhciBtYXkgZ2V0IHJ1biBieSBkb191bnBhY2sgb3IgZG9fcG9wdWxhdGVfbGljIHdoaWNoIGNvdWxkIGNhbGwgZ3ppcAorZG9fdW5wYWNrW2RlcGVuZHNdICs9ICJnemlwLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaWNlY2MuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ljZWNjLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFiOGJiMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ljZWNjLmJiY2xhc3MKQEAgLTAsMCArMSwzMzMgQEAKKyMgSWNlQ3JlYW0gZGlzdHJpYnV0ZWQgY29tcGlsaW5nIHN1cHBvcnQKKyMKKyMgU3RhZ2VzIGRpcmVjdG9yaWVzIHdpdGggc3ltbGlua3MgZnJvbSBnY2MvZysrIHRvIGljZWNjLCBmb3IgYm90aAorIyBuYXRpdmUgYW5kIGNyb3NzIGNvbXBpbGVycy4gRGVwZW5kaW5nIG9uIGVhY2ggY29uZmlndXJlIG9yIGNvbXBpbGUsCisjIHRoZSBkaXJlY3RvcmllcyBhcmUgYWRkZWQgYXQgdGhlIGhlYWQgb2YgdGhlIFBBVEggbGlzdCBhbmQgSUNFQ0NfQ1hYCisjIGFuZCBJQ0VDX0NDIGFyZSBzZXQuCisjCisjIEZvciB0aGUgY3Jvc3MgY29tcGlsZXIsIGNyZWF0ZXMgYSB0YXIuZ3ogb2Ygb3VyIHRvb2xjaGFpbiBhbmQgc2V0cworIyBJQ0VDQ19WRVJTSU9OIGFjY29yZGluZ2x5LgorIworIyBUaGUgY2xhc3Mgbm93IGhhbmRsZXMgYWxsIDMgZGlmZmVyZW50IGNvbXBpbGUgJ3N0YWdlcycgKGkuZSBuYXRpdmUgLGNyb3NzLWtlcm5lbCBhbmQgdGFyZ2V0KSBjcmVhdGluZyB0aGUKKyMgbmVjZXNzYXJ5IGVudmlyb25tZW50IHRhci5neiBmaWxlIHRvIGJlIHVzZWQgYnkgdGhlIHJlbW90ZSBtYWNoaW5lcy4KKyMgSXQgYWxzbyBzdXBwb3J0cyBtZXRhLXRvb2xjaGFpbiBnZW5lcmF0aW9uCisjCisjIElmIElDRUNDX1BBVEggaXMgbm90IHNldCBpbiBsb2NhbC5jb25mIHRoZW4gdGhlIGNsYXNzIHdpbGwgdHJ5IHRvIGxvY2F0ZSBpdCB1c2luZyAnYmIudXRpbHMud2hpY2gnCisjIGJ1dCBub3RoaW5nIGlzIHN1cmUgOykKKyMKKyMgSWYgSUNFQ0NfRU5WX0VYRUMgaXMgc2V0IGluIGxvY2FsLmNvbmYsIHRoZW4gaXQgc2hvdWxkIHBvaW50IHRvIHRoZSBpY2VjYy1jcmVhdGUtZW52IHNjcmlwdCBwcm92aWRlZCBieSB0aGUgdXNlcgorIyBvciB0aGUgZGVmYXVsdCBvbmUgcHJvdmlkZWQgYnkgaWNlY2MtY3JlYXRlLWVudi5iYiB3aWxsIGJlIHVzZWQKKyMgKE5PVEUgdGhhdCB0aGlzIGlzIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgc2NyaXB0IG5lZWQgaXQgYW5kICpub3QgdGhlIG9uZSB0aGF0IGNvbWVzIHdpdGggaWNlY2MqCisjCisjIFVzZXIgY2FuIHNwZWNpZnkgaWYgc3BlY2lmaWMgcGFja2FnZXMgb3IgcGFja2FnZXMgYmVsb25naW5nIHRvIGNsYXNzIHNob3VsZCBub3QgdXNlIGljZWNjIHRvIGRpc3RyaWJ1dGUKKyMgY29tcGlsZSBqb2JzIHRvIHJlbW90ZSBtYWNoaW5lcywgYnV0IGhhbmRsZWQgbG9jYWxseSwgYnkgZGVmaW5pbmcgSUNFQ0NfVVNFUl9DTEFTU19CTCBhbmQgSUNFQ0NfVVNFUl9QQUNLQUdFX0JMCisjIHdpdGggdGhlIGFwcHJvcHJpYXRlIHZhbHVlcyBpbiBsb2NhbC5jb25mLiBJbiBhZGRpdGlvbiB0aGUgdXNlciBjYW4gZm9yY2UgdG8gZW5hYmxlIGljZWNjIGZvciBwYWNrYWdlcworIyB3aGljaCBzZXQgYW4gZW1wdHkgUEFSQUxMRUxfTUFLRSB2YXJpYWJsZSBieSBkZWZpbmluZyBJQ0VDQ19VU0VSX1BBQ0tBR0VfV0wuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworI0Vycm9yIGNoZWNraW5nIGlzIGtlcHQgdG8gbWluaW11bSBzbyBkb3VibGUgY2hlY2sgYW55IHBhcmFtZXRlcnMgeW91IHBhc3MgdG8gdGhlIGNsYXNzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0JCX0hBU0hCQVNFX1dISVRFTElTVCArPSAiSUNFQ0NfUEFSQUxMRUxfTUFLRSBJQ0VDQ19ESVNBQkxFRCBJQ0VDQ19VU0VSX1BBQ0tBR0VfQkwgSUNFQ0NfVVNFUl9DTEFTU19CTCBJQ0VDQ19VU0VSX1BBQ0tBR0VfV0wgSUNFQ0NfUEFUSCBJQ0VDQ19FTlZfRVhFQyIKKworSUNFQ0NfRU5WX0VYRUMgPz0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9pY2VjYy1jcmVhdGUtZW52IgorCitkZWYgaWNlY2NfZGVwX3ByZXBlbmQoZCk6CisgICAgIyBJTkhJQklUX0RFRkFVTFRfREVQUyBkb2Vzbid0IGFwcGx5IHRvIHRoZSBwYXRjaCBjb21tYW5kLiAgV2hldGhlciBvciAgbm90CisgICAgIyB3ZSBuZWVkIHRoYXQgYnVpbHQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBwYXRjaCBmdW5jdGlvbiAvIGNsYXNzLCBub3QKKyAgICAjIHRoZSBhcHBsaWNhdGlvbi4KKyAgICBpZiBub3QgZC5nZXRWYXIoJ0lOSElCSVRfREVGQVVMVF9ERVBTJywgRmFsc2UpOgorICAgICAgICByZXR1cm4gImljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlIgorICAgIHJldHVybiAiIgorCitERVBFTkRTX3ByZXBlbmQgKz0gIiR7QGljZWNjX2RlcF9wcmVwZW5kKGQpfSAiCisKK2RlZiBnZXRfY3Jvc3Nfa2VybmVsX2NjKGJiLGQpOgorICAgIGtlcm5lbF9jYyA9IGQuZ2V0VmFyKCdLRVJORUxfQ0MnLCBGYWxzZSkKKworICAgICMgZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gYnkgdGhlIHNoZWxsIGlmIG5lY2Vzc2FyeQorICAgIGlmICdgJyBpbiBrZXJuZWxfY2Mgb3IgJyQoJyBpbiBrZXJuZWxfY2M6CisgICAgICAgIGtlcm5lbF9jYyA9IG9zLnBvcGVuKCJlY2hvICVzIiAlIGtlcm5lbF9jYykucmVhZCgpWzotMV0KKworICAgIGtlcm5lbF9jYyA9IGQuZXhwYW5kKGtlcm5lbF9jYykKKyAgICBrZXJuZWxfY2MgPSBrZXJuZWxfY2MucmVwbGFjZSgnY2NhY2hlJywgJycpLnN0cmlwKCkKKyAgICBrZXJuZWxfY2MgPSBrZXJuZWxfY2Muc3BsaXQoJyAnKVswXQorICAgIGtlcm5lbF9jYyA9IGtlcm5lbF9jYy5zdHJpcCgpCisgICAgcmV0dXJuIGtlcm5lbF9jYworCitkZWYgZ2V0X2ljZWNjKGQpOgorICAgIHJldHVybiBkLmdldFZhcignSUNFQ0NfUEFUSCcsIEZhbHNlKSBvciBiYi51dGlscy53aGljaChvcy5nZXRlbnYoIlBBVEgiKSwgImljZWNjIikKKworZGVmIGNyZWF0ZV9wYXRoKGNvbXBpbGVycywgYmIsIGQpOgorICAgICIiIgorICAgIENyZWF0ZSBTeW1saW5rcyBmb3IgdGhlIGljZWNjIGluIHRoZSBzdGFnaW5nIGRpcmVjdG9yeQorICAgICIiIgorICAgIHN0YWdpbmcgPSBvcy5wYXRoLmpvaW4oZC5leHBhbmQoJyR7U1RBR0lOR19CSU5ESVJ9JyksICJpY2UiKQorICAgIGlmIGljY19pc19rZXJuZWwoYmIsIGQpOgorICAgICAgICBzdGFnaW5nICs9ICIta2VybmVsIgorCisgICAgI2NoZWNrIGlmIHRoZSBpY2VjYyBwYXRoIGlzIHNldCBieSB0aGUgdXNlcgorICAgIGljZWNjID0gZ2V0X2ljZWNjKGQpCisKKyAgICAjIENyZWF0ZSB0aGUgZGlyIGlmIG5lY2Vzc2FyeQorICAgIHRyeToKKyAgICAgICAgb3Muc3RhdChzdGFnaW5nKQorICAgIGV4Y2VwdDoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MubWFrZWRpcnMoc3RhZ2luZykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworCisgICAgZm9yIGNvbXBpbGVyIGluIGNvbXBpbGVyczoKKyAgICAgICAgZ2NjX3BhdGggPSBvcy5wYXRoLmpvaW4oc3RhZ2luZywgY29tcGlsZXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnN0YXQoZ2NjX3BhdGgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5zeW1saW5rKGljZWNjLCBnY2NfcGF0aCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICByZXR1cm4gc3RhZ2luZworCitkZWYgdXNlX2ljYyhiYixkKToKKyAgICBpZiBkLmdldFZhcignSUNFQ0NfRElTQUJMRUQnLCBGYWxzZSkgPT0gIjEiOgorICAgICAgICAjIGRvbid0IGV2ZW4gdHJ5IGl0LCB3aGVuIGV4cGxpY2l0bHkgZGlzYWJsZWQKKyAgICAgICAgcmV0dXJuICJubyIKKworICAgICMgYWxsYXJjaCByZWNpcGVzIGRvbid0IHVzZSBjb21waWxlcgorICAgIGlmIGljY19pc19hbGxhcmNoKGJiLCBkKToKKyAgICAgICAgcmV0dXJuICJubyIKKworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgIHN5c3RlbV9jbGFzc19ibGFja2xpc3QgPSBbXQorICAgIHVzZXJfY2xhc3NfYmxhY2tsaXN0ID0gKGQuZ2V0VmFyKCdJQ0VDQ19VU0VSX0NMQVNTX0JMJywgRmFsc2UpIG9yICJub25lIikuc3BsaXQoKQorICAgIHBhY2thZ2VfY2xhc3NfYmxhY2tsaXN0ID0gc3lzdGVtX2NsYXNzX2JsYWNrbGlzdCArIHVzZXJfY2xhc3NfYmxhY2tsaXN0CisKKyAgICBmb3IgYmxhY2sgaW4gcGFja2FnZV9jbGFzc19ibGFja2xpc3Q6CisgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoYmxhY2ssIGQpOgorICAgICAgICAgICAgYmIuZGVidWcoMSwgIiVzOiBjbGFzcyAlcyBmb3VuZCBpbiBibGFja2xpc3QsIGRpc2FibGUgaWNlY2MiICUgKHBuLCBibGFjaykpCisgICAgICAgICAgICByZXR1cm4gIm5vIgorCisgICAgIyAic3lzdGVtIiByZWNpcGUgYmxhY2tsaXN0IGNvbnRhaW5zIGEgbGlzdCBvZiBwYWNrYWdlcyB0aGF0IGNhbiBub3QgZGlzdHJpYnV0ZSBjb21waWxlIHRhc2tzCisgICAgIyBmb3Igb25lIHJlYXNvbiBvciB0aGUgb3RoZXIKKyAgICAjIHRoaXMgaXMgdGhlIG9sZCBsaXN0ICh3aGljaCBkb2Vzbid0IHNlZW0gdG8gYmUgdmFsaWQgYW55bW9yZSwgYmVjYXVzZSBJIHdhcyBhYmxlIHRvIGJ1aWxkCisgICAgIyBhbGwgdGhlc2Ugd2l0aCBpY2VjYyBlbmFibGVkKQorICAgICMgc3lzdGVtX3BhY2thZ2VfYmxhY2tsaXN0ID0gWyAidWNsaWJjIiwgImdsaWJjIiwgImdjYyIsICJiaW5kIiwgInUtYm9vdCIsICJkaGNwLWZvcndhcmRlciIsICJlbmNoYW50IiwgImNvbm5tYW4iLCAib3JiaXQyIiBdCisgICAgIyB3aGVuIGFkZGluZyBuZXcgZW50cnksIHBsZWFzZSBkb2N1bWVudCB3aHkgKGhvdyBpdCBmYWlsZWQpIHNvIHRoYXQgd2UgY2FuIHJlLWV2YWx1YXRlIGl0IGxhdGVyCisgICAgIyBlLmcuIHdoZW4gdGhlcmUgaXMgbmV3IHZlcnNpb24KKyAgICAjIGJ1aWxkaW5nIGxpYmdjYy1pbml0aWFsIHdpdGggaWNlY2MgZmFpbHMgd2l0aCBDUFAgc2FuaXR5IGNoZWNrIGVycm9yIGlmIGhvc3Qgc3lzcm9vdCBjb250YWlucyBjcm9zcyBnY2MgYnVpbHQgZm9yIGFub3RoZXIgdGFyZ2V0IHR1bmUvdmFyaWFudAorICAgIHN5c3RlbV9wYWNrYWdlX2JsYWNrbGlzdCA9IFsibGliZ2NjLWluaXRpYWwiXQorICAgIHVzZXJfcGFja2FnZV9ibGFja2xpc3QgPSAoZC5nZXRWYXIoJ0lDRUNDX1VTRVJfUEFDS0FHRV9CTCcsIEZhbHNlKSBvciAiIikuc3BsaXQoKQorICAgIHVzZXJfcGFja2FnZV93aGl0ZWxpc3QgPSAoZC5nZXRWYXIoJ0lDRUNDX1VTRVJfUEFDS0FHRV9XTCcsIEZhbHNlKSBvciAiIikuc3BsaXQoKQorICAgIHBhY2thZ2VfYmxhY2tsaXN0ID0gc3lzdGVtX3BhY2thZ2VfYmxhY2tsaXN0ICsgdXNlcl9wYWNrYWdlX2JsYWNrbGlzdAorCisgICAgaWYgcG4gaW4gcGFja2FnZV9ibGFja2xpc3Q6CisgICAgICAgIGJiLmRlYnVnKDEsICIlczogZm91bmQgaW4gYmxhY2tsaXN0LCBkaXNhYmxlIGljZWNjIiAlIHBuKQorICAgICAgICByZXR1cm4gIm5vIgorCisgICAgaWYgcG4gaW4gdXNlcl9wYWNrYWdlX3doaXRlbGlzdDoKKyAgICAgICAgYmIuZGVidWcoMSwgIiVzOiBmb3VuZCBpbiB3aGl0ZWxpc3QsIGVuYWJsZSBpY2VjYyIgJSBwbikKKyAgICAgICAgcmV0dXJuICJ5ZXMiCisKKyAgICBpZiBkLmdldFZhcignUEFSQUxMRUxfTUFLRScsIEZhbHNlKSA9PSAiIjoKKyAgICAgICAgYmIuZGVidWcoMSwgIiVzOiBoYXMgZW1wdHkgUEFSQUxMRUxfTUFLRSwgZGlzYWJsZSBpY2VjYyIgJSBwbikKKyAgICAgICAgcmV0dXJuICJubyIKKworICAgIHJldHVybiAieWVzIgorCitkZWYgaWNjX2lzX2FsbGFyY2goYmIsIGQpOgorICAgIHJldHVybiBkLmdldFZhcigiUEFDS0FHRV9BUkNIIiwgRmFsc2UpID09ICJhbGwiCisKK2RlZiBpY2NfaXNfa2VybmVsKGJiLCBkKToKKyAgICByZXR1cm4gXAorICAgICAgICBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJrZXJuZWwiLCBkKTsKKworZGVmIGljY19pc19uYXRpdmUoYmIsIGQpOgorICAgIHJldHVybiBcCisgICAgICAgIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoImNyb3NzIiwgZCkgb3IgXAorICAgICAgICBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJuYXRpdmUiLCBkKTsKKworIyBEb24ndCBwb2xsdXRlIGFsbGFyY2ggc2lnbmF0dXJlcyB3aXRoIFRBUkdFVF9GUFUKK2ljY192ZXJzaW9uW3ZhcmRlcHNleGNsdWRlXSArPSAiVEFSR0VUX0ZQVSIKK2RlZiBpY2NfdmVyc2lvbihiYiwgZCk6CisgICAgaWYgdXNlX2ljYyhiYiwgZCkgPT0gIm5vIjoKKyAgICAgICAgcmV0dXJuICIiCisKKyAgICBwYXJhbGxlbCA9IGQuZ2V0VmFyKCdJQ0VDQ19QQVJBTExFTF9NQUtFJywgRmFsc2UpIG9yICIiCisgICAgaWYgbm90IGQuZ2V0VmFyKCdQQVJBTExFTF9NQUtFJywgRmFsc2UpID09ICIiIGFuZCBwYXJhbGxlbDoKKyAgICAgICAgZC5zZXRWYXIoIlBBUkFMTEVMX01BS0UiLCBwYXJhbGxlbCkKKworICAgIGlmIGljY19pc19uYXRpdmUoYmIsIGQpOgorICAgICAgICBhcmNoaXZlX25hbWUgPSAibG9jYWwtaG9zdC1lbnYiCisgICAgZWxpZiBkLmV4cGFuZCgnJHtIT1NUX1BSRUZJWH0nKSA9PSAiIjoKKyAgICAgICAgYmIuZmF0YWwoZC5leHBhbmQoIiR7UE59IiksICIgTlVMTCBwcmVmaXgiKQorICAgIGVsc2U6CisgICAgICAgIHByZWZpeCA9IGQuZXhwYW5kKCcke0hPU1RfUFJFRklYfScgKQorICAgICAgICBkaXN0cm8gPSBkLmV4cGFuZCgnJHtESVNUUk99JykKKyAgICAgICAgdGFyZ2V0X3N5cyA9IGQuZXhwYW5kKCcke1RBUkdFVF9TWVN9JykKKyAgICAgICAgZmxvYXQgPSBkLmdldFZhcignVEFSR0VUX0ZQVScsIEZhbHNlKSBvciAiaGFyZCIKKyAgICAgICAgYXJjaGl2ZV9uYW1lID0gcHJlZml4ICsgZGlzdHJvICsgIi0iICAgICAgICArIHRhcmdldF9zeXMgKyAiLSIgKyBmbG9hdAorICAgICAgICBpZiBpY2NfaXNfa2VybmVsKGJiLCBkKToKKyAgICAgICAgICAgIGFyY2hpdmVfbmFtZSArPSAiLWtlcm5lbCIKKworICAgIGltcG9ydCBzb2NrZXQKKyAgICBpY2VfZGlyID0gZC5leHBhbmQoJyR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0nKQorICAgIHRhcl9maWxlID0gb3MucGF0aC5qb2luKGljZV9kaXIsICdpY2UnLCBhcmNoaXZlX25hbWUgKyAiLUBWRVJTSU9OQC0iICsgc29ja2V0LmdldGhvc3RuYW1lKCkgKyAnLnRhci5neicpCisKKyAgICByZXR1cm4gdGFyX2ZpbGUKKworZGVmIGljY19wYXRoKGJiLGQpOgorICAgIGlmIHVzZV9pY2MoYmIsIGQpID09ICJubyI6CisgICAgICAgICMgZG9uJ3QgY3JlYXRlIHVubmVjZXNzYXJ5IGRpcmVjdG9yaWVzIHdoZW4gaWNlY2MgaXMgZGlzYWJsZWQKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBpY2NfaXNfa2VybmVsKGJiLCBkKToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZV9wYXRoKCBbZ2V0X2Nyb3NzX2tlcm5lbF9jYyhiYixkKSwgXSwgYmIsIGQpCisKKyAgICBlbHNlOgorICAgICAgICBwcmVmaXggPSBkLmV4cGFuZCgnJHtIT1NUX1BSRUZJWH0nKQorICAgICAgICByZXR1cm4gY3JlYXRlX3BhdGgoIFtwcmVmaXgrImdjYyIsIHByZWZpeCsiZysrIl0sIGJiLCBkKQorCitkZWYgaWNjX2dldF9leHRlcm5hbF90b29sKGJiLCBkLCB0b29sKToKKyAgICBleHRlcm5hbF90b29sY2hhaW5fYmluZGlyID0gZC5leHBhbmQoJyR7RVhURVJOQUxfVE9PTENIQUlOfSR7YmluZGlyX2Nyb3NzfScpCisgICAgdGFyZ2V0X3ByZWZpeCA9IGQuZXhwYW5kKCcke1RBUkdFVF9QUkVGSVh9JykKKyAgICByZXR1cm4gb3MucGF0aC5qb2luKGV4dGVybmFsX3Rvb2xjaGFpbl9iaW5kaXIsICclcyVzJyAlICh0YXJnZXRfcHJlZml4LCB0b29sKSkKKworIyBEb24ndCBwb2xsdXRlIG5hdGl2ZSBzaWduYXR1cmVzIHdpdGggdGFyZ2V0IFRVTkVfUEtHQVJDSCB0aHJvdWdoIFNUQUdJTkdfQklORElSX1RPT0xDSEFJTgoraWNjX2dldF90b29sW3ZhcmRlcHNleGNsdWRlXSArPSAiU1RBR0lOR19CSU5ESVJfVE9PTENIQUlOIgorZGVmIGljY19nZXRfdG9vbChiYiwgZCwgdG9vbCk6CisgICAgaWYgaWNjX2lzX25hdGl2ZShiYiwgZCk6CisgICAgICAgIHJldHVybiBiYi51dGlscy53aGljaChvcy5nZXRlbnYoIlBBVEgiKSwgdG9vbCkKKyAgICBlbGlmIGljY19pc19rZXJuZWwoYmIsIGQpOgorICAgICAgICByZXR1cm4gYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCJQQVRIIiksIGdldF9jcm9zc19rZXJuZWxfY2MoYmIsIGQpKQorICAgIGVsc2U6CisgICAgICAgIGljZV9kaXIgPSBkLmV4cGFuZCgnJHtTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU59JykKKyAgICAgICAgdGFyZ2V0X3N5cyA9IGQuZXhwYW5kKCcke1RBUkdFVF9TWVN9JykKKyAgICAgICAgdG9vbF9iaW4gPSBvcy5wYXRoLmpvaW4oaWNlX2RpciwgIiVzLSVzIiAlICh0YXJnZXRfc3lzLCB0b29sKSkKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUodG9vbF9iaW4pOgorICAgICAgICAgICAgcmV0dXJuIHRvb2xfYmluCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleHRlcm5hbF90b29sX2JpbiA9IGljY19nZXRfZXh0ZXJuYWxfdG9vbChiYiwgZCwgdG9vbCkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGV4dGVybmFsX3Rvb2xfYmluKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZXh0ZXJuYWxfdG9vbF9iaW4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICIiCisKK2RlZiBpY2NfZ2V0X2FuZF9jaGVja190b29sKGJiLCBkLCB0b29sKToKKyAgICAjIENoZWNrIHRoYXQgZysrIG9yIGdjYyBpcyBub3QgYSBzeW1ib2xpYyBsaW5rIHRvIGljZWNjIGJpbmFyeSBpbgorICAgICMgUEFUSCBvciBpY2VjYy1jcmVhdGUtZW52IHNjcmlwdCB3aWxsIHNpbGVudGx5IGNyZWF0ZSBhbiBpbnZhbGlkCisgICAgIyBjb21waWxlciBlbnZpcm9ubWVudCBwYWNrYWdlLgorICAgIHQgPSBpY2NfZ2V0X3Rvb2woYmIsIGQsIHRvb2wpCisgICAgaWYgdCBhbmQgb3MucG9wZW4oInJlYWRsaW5rIC1mICVzIiAlIHQpLnJlYWQoKVs6LTFdID09IGdldF9pY2VjYyhkKToKKyAgICAgICAgYmIuZXJyb3IoIiVzIGlzIGEgc3ltbGluayB0byAlcyBpbiBQQVRIIGFuZCB0aGlzIHByZXZlbnRzIGljZWNjIGZyb20gd29ya2luZyIgJSAodCwgZ2V0X2ljZWNjKGQpKSkKKyAgICAgICAgcmV0dXJuICIiCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHQKKword2FpdF9mb3JfZmlsZSgpIHsKKyAgICBsb2NhbCBUSU1FX0VMQVBTRUQ9MAorICAgIGxvY2FsIEZJTEVfVE9fVEVTVD0kMQorICAgIGxvY2FsIFRJTUVPVVQ9JDIKKyAgICB1bnRpbCBbIC1mICIkRklMRV9UT19URVNUIiBdCisgICAgZG8KKyAgICAgICAgVElNRV9FTEFQU0VEPWBleHByICRUSU1FX0VMQVBTRUQgKyAxYAorICAgICAgICBpZiBbICRUSU1FX0VMQVBTRUQgLWd0ICRUSU1FT1VUIF0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZmkKKyAgICAgICAgc2xlZXAgMQorICAgIGRvbmUKK30KKworZGVmIHNldF9pY2VjY19lbnYoKToKKyAgICAjIGR1bW15IHB5dGhvbiB2ZXJzaW9uIG9mIHNldF9pY2VjY19lbnYKKyAgICByZXR1cm4KKworc2V0X2ljZWNjX2VudigpIHsKKyAgICBpZiBbICIke0B1c2VfaWNjKGJiLCBkKX0iID0gIm5vIiBdCisgICAgdGhlbgorICAgICAgICByZXR1cm4KKyAgICBmaQorICAgIElDRUNDX1ZFUlNJT049IiR7QGljY192ZXJzaW9uKGJiLCBkKX0iCisgICAgaWYgWyAieCR7SUNFQ0NfVkVSU0lPTn0iID0gIngiIF0KKyAgICB0aGVuCisgICAgICAgIGJid2FybiAiQ2Fubm90IHVzZSBpY2VjYzogY291bGQgbm90IGdldCBJQ0VDQ19WRVJTSU9OIgorICAgICAgICByZXR1cm4KKyAgICBmaQorCisgICAgSUNFX1BBVEg9IiR7QGljY19wYXRoKGJiLCBkKX0iCisgICAgaWYgWyAieCR7SUNFX1BBVEh9IiA9ICJ4IiBdCisgICAgdGhlbgorICAgICAgICBiYndhcm4gIkNhbm5vdCB1c2UgaWNlY2M6IGNvdWxkIG5vdCBnZXQgSUNFX1BBVEgiCisgICAgICAgIHJldHVybgorICAgIGZpCisKKyAgICBJQ0VDQ19DQz0iJHtAaWNjX2dldF9hbmRfY2hlY2tfdG9vbChiYiwgZCwgImdjYyIpfSIKKyAgICBJQ0VDQ19DWFg9IiR7QGljY19nZXRfYW5kX2NoZWNrX3Rvb2woYmIsIGQsICJnKysiKX0iCisgICAgIyBjYW5ub3QgdXNlIGljY19nZXRfYW5kX2NoZWNrX3Rvb2wgaGVyZSBiZWNhdXNlIGl0IGFzc3VtZXMgYXMgd2l0aG91dCB0YXJnZXRfc3lzIHByZWZpeAorICAgIElDRUNDX1dISUNIX0FTPSIke0BiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgJ2FzJyl9IgorICAgIGlmIFsgISAteCAiJHtJQ0VDQ19DQ30iIC1vICEgLXggIiR7SUNFQ0NfQ1hYfSIgXQorICAgIHRoZW4KKyAgICAgICAgYmJ3YXJuICJDYW5ub3QgdXNlIGljZWNjOiBjb3VsZCBub3QgZ2V0IElDRUNDX0NDIG9yIElDRUNDX0NYWCIKKyAgICAgICAgcmV0dXJuCisgICAgZmkKKworICAgIElDRV9WRVJTSU9OPWAkSUNFQ0NfQ0MgLWR1bXB2ZXJzaW9uYAorICAgIElDRUNDX1ZFUlNJT049YGVjaG8gJHtJQ0VDQ19WRVJTSU9OfSB8IHNlZCAtZSAicy9AVkVSU0lPTkAvJElDRV9WRVJTSU9OL2ciYAorICAgIGlmIFsgISAteCAiJHtJQ0VDQ19FTlZfRVhFQ30iIF0KKyAgICB0aGVuCisgICAgICAgIGJid2FybiAiQ2Fubm90IHVzZSBpY2VjYzogaW52YWxpZCBJQ0VDQ19FTlZfRVhFQyIKKyAgICAgICAgcmV0dXJuCisgICAgZmkKKworICAgIElDRUNDX0FTPSJgJHtJQ0VDQ19DQ30gLXByaW50LXByb2ctbmFtZT1hc2AiCisgICAgIyBmb3IgdGFyZ2V0IHJlY2lwZXMgc2hvdWxkIHJldHVybiBzb21ldGhpbmcgbGlrZToKKyAgICAjIC9PRS90bXAtZWdsaWJjL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliZXhlYy9hcm05MjB0dC1vZS1saW51eC1nbnVlYWJpL2djYy9hcm0tb2UtbGludXgtZ251ZWFiaS80LjguMi9hcworICAgICMgYW5kIGp1c3QgImFzIiBmb3IgbmF0aXZlLCBpZiBpdCByZXR1cm5zICJhcyIgaW4gY3VycmVudCBkaXJlY3RvcnkgKGZvciB3aGF0ZXZlciByZWFzb24pIHVzZSAiYXMiIGZyb20gUEFUSAorICAgIGlmIFsgImBkaXJuYW1lICIke0lDRUNDX0FTfSJgIiA9ICIuIiBdCisgICAgdGhlbgorICAgICAgICBJQ0VDQ19BUz0iJHtJQ0VDQ19XSElDSF9BU30iCisgICAgZmkKKworICAgIGlmIFsgISAtZiAiJHtJQ0VDQ19WRVJTSU9OfS5kb25lIiBdCisgICAgdGhlbgorICAgICAgICBta2RpciAtcCAiYGRpcm5hbWUgIiR7SUNFQ0NfVkVSU0lPTn0iYCIKKworICAgICAgICAjIHRoZSBJQ0VDQ19WRVJTSU9OIGdlbmVyYXRpb24gc3RlcCBtdXN0IGJlIGxvY2tlZCBieSBhIG11dGV4CisgICAgICAgICMgaW4gb3JkZXIgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMKKyAgICAgICAgaWYgZmxvY2sgLW4gIiR7SUNFQ0NfVkVSU0lPTn0ubG9jayIgXAorICAgICAgICAgICAgJHtJQ0VDQ19FTlZfRVhFQ30gIiR7SUNFQ0NfQ0N9IiAiJHtJQ0VDQ19DWFh9IiAiJHtJQ0VDQ19BU30iICIke0lDRUNDX1ZFUlNJT059IgorICAgICAgICB0aGVuCisgICAgICAgICAgICB0b3VjaCAiJHtJQ0VDQ19WRVJTSU9OfS5kb25lIgorICAgICAgICBlbGlmIFsgISB3YWl0X2Zvcl9maWxlICIke0lDRUNDX1ZFUlNJT059LmRvbmUiIDMwIF0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgIyBsb2NraW5nIGZhaWxlZCBzbyB3YWl0IGZvciAke0lDRUNDX1ZFUlNJT059LmRvbmUgdG8gYXBwZWFyCisgICAgICAgICAgICBiYndhcm4gIlRpbWVvdXQgd2FpdGluZyBmb3IgJHtJQ0VDQ19WRVJTSU9OfS5kb25lIgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGZpCisgICAgZmkKKworICAgIGV4cG9ydCBJQ0VDQ19WRVJTSU9OIElDRUNDX0NDIElDRUNDX0NYWAorICAgIGV4cG9ydCBQQVRIPSIkSUNFX1BBVEg6JFBBVEgiCisgICAgZXhwb3J0IENDQUNIRV9QQVRIPSIkUEFUSCIKKworICAgIGJibm90ZSAiVXNpbmcgaWNlY2MiCit9CisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHNldF9pY2VjY19lbnYKK30KKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgIHNldF9pY2VjY19lbnYKK30KKworZG9fY29tcGlsZV9rZXJuZWxtb2R1bGVzX3ByZXBlbmQoKSB7CisgICAgc2V0X2ljZWNjX2VudgorfQorCitkb19pbnN0YWxsX3ByZXBlbmQoKSB7CisgICAgc2V0X2ljZWNjX2VudgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtYnVpbGRpbmZvLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS1idWlsZGluZm8uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTE3Y2M4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtYnVpbGRpbmZvLmJiY2xhc3MKQEAgLTAsMCArMSw2OSBAQAorIworIyBXcml0ZXMgYnVpbGQgaW5mb3JtYXRpb24gdG8gdGFyZ2V0IGZpbGVzeXN0ZW0gb24gL2V0Yy9idWlsZAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMgQXV0aG9yOiBBbGVqYW5kcm8gRW5lZGlubyBIZXJuYW5kZXogU2FtYW5pZWdvIDxhbGVqYW5kcm8uaGVybmFuZGV6QGludGVsLmNvbT4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLCBzZWUgQ09QWUlORy5NSVQgZm9yIGRldGFpbHMKKyMKKyMgVXNhZ2U6IGFkZCBJTkhFUklUICs9ICJpbWFnZS1idWlsZGluZm8iIHRvIHlvdXIgY29uZiBmaWxlCisjCisKKyMgRGVzaXJlZCB2YXJpYWJsZXMgdG8gZGlzcGxheSAKK0lNQUdFX0JVSUxESU5GT19WQVJTID89ICJESVNUUk8gRElTVFJPX1ZFUlNJT04iCisKKyMgRnJvbSBidWlsZGhpc3RvcnkuYmJjbGFzcworZGVmIGltYWdlX2J1aWxkaW5mb19vdXRwdXR2YXJzKHZhcnMsIGxpc3R2YXJzLCBkKTogCisgICAgdmFycyA9IHZhcnMuc3BsaXQoKQorICAgIGxpc3R2YXJzID0gbGlzdHZhcnMuc3BsaXQoKQorICAgIHJldCA9ICIiCisgICAgZm9yIHZhciBpbiB2YXJzOgorICAgICAgICB2YWx1ZSA9IGQuZ2V0VmFyKHZhciwgVHJ1ZSkgb3IgIiIKKyAgICAgICAgaWYgKGQuZ2V0VmFyRmxhZyh2YXIsICd0eXBlJykgPT0gImxpc3QiKToKKyAgICAgICAgICAgIHZhbHVlID0gb2UudXRpbHMuc3F1YXNoc3BhY2VzKHZhbHVlKQorICAgICAgICByZXQgKz0gIiVzID0gJXNcbiIgJSAodmFyLCB2YWx1ZSkKKyAgICByZXR1cm4gcmV0LnJzdHJpcCgnXG4nKQorCisjIEdldHMgZ2l0IGJyYW5jaCdzIHN0YXR1cyAoY2xlYW4gb3IgZGlydHkpCitkZWYgZ2V0X2xheWVyX2dpdF9zdGF0dXMocGF0aCk6CisgICAgZiA9IG9zLnBvcGVuKCJjZCAlczsgZ2l0IGRpZmYgLS1zdGF0IDI+JjEgfCB0YWlsIC1uIDEiICUgcGF0aCkKKyAgICBkYXRhID0gZi5yZWFkKCkKKyAgICBpZiBmLmNsb3NlKCkgaXMgTm9uZToKKyAgICAgICAgaWYgbGVuKGRhdGEpICE9IDA6CisgICAgICAgICAgICByZXR1cm4gIi0tIG1vZGlmaWVkIgorICAgIHJldHVybiAiIgorCisjIFJldHVybnMgbGF5ZXIgcmV2aXNpb25zIGFsb25nIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSBzdGF0dXMKK2RlZiBnZXRfbGF5ZXJfcmV2cyhkKToKKyAgICBsYXllcnMgPSAoZC5nZXRWYXIoIkJCTEFZRVJTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBtZWRhZGF0YV9yZXZzID0gWyIlLTE3cyA9ICVzOiVzICVzIiAlIChvcy5wYXRoLmJhc2VuYW1lKGkpLCBcCisgICAgICAgIGJhc2VfZ2V0X21ldGFkYXRhX2dpdF9icmFuY2goaSwgTm9uZSkuc3RyaXAoKSwgXAorICAgICAgICBiYXNlX2dldF9tZXRhZGF0YV9naXRfcmV2aXNpb24oaSwgTm9uZSksIFwKKyAgICAgICAgZ2V0X2xheWVyX2dpdF9zdGF0dXMoaSkpIFwKKyAgICAgICAgICAgIGZvciBpIGluIGxheWVyc10KKyAgICByZXR1cm4gJ1xuJy5qb2luKG1lZGFkYXRhX3JldnMpCisKK2RlZiBidWlsZGluZm9fdGFyZ2V0KGQpOgorICAgICAgICAjIEdldCBjb250ZXh0CisgICAgICAgIGlmIGQuZ2V0VmFyKCdCQl9XT1JLRVJDT05URVhUJywgVHJ1ZSkgIT0gJzEnOgorICAgICAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICAjIFNpbmdsZSBhbmQgbGlzdCB2YXJpYWJsZXMgdG8gYmUgcmVhZAorICAgICAgICB2YXJzID0gKGQuZ2V0VmFyKCJJTUFHRV9CVUlMRElORk9fVkFSUyIsIFRydWUpIG9yICIiKQorICAgICAgICBsaXN0dmFycyA9IChkLmdldFZhcigiSU1BR0VfQlVJTERJTkZPX0xWQVJTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIHJldHVybiBpbWFnZV9idWlsZGluZm9fb3V0cHV0dmFycyh2YXJzLCBsaXN0dmFycywgZCkKKworIyBXcml0ZSBidWlsZCBpbmZvcm1hdGlvbiB0byB0YXJnZXQgZmlsZXN5c3RlbQorYnVpbGRpbmZvICgpIHsKK2NhdCA+ICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vYnVpbGQgPDwgRU5ECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQnVpbGQgQ29uZmlndXJhdGlvbjogIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiske0BidWlsZGluZm9fdGFyZ2V0KGQpfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xheWVyIFJldmlzaW9uczogICAgICB8ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJHtAZ2V0X2xheWVyX3JldnMoZCl9CitFTkQKK30KKworSU1BR0VfUFJFUFJPQ0VTU19DT01NQU5EICs9ICJidWlsZGluZm87IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtbGl2ZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtbGl2ZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhN2ExMzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS1saXZlLmJiY2xhc3MKQEAgLTAsMCArMSwxOCBAQAorCitBVVRPX1NZU0xJTlVYQ0ZHID0gIjEiCitJTklUUkRfSU1BR0UgPz0gImNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMiCitJTklUUkQgPz0gIiR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTklUUkRfSU1BR0V9LSR7TUFDSElORX0uY3Bpby5neiIKK1NZU0xJTlVYX1JPT1QgPSAicm9vdD0vZGV2L3JhbTAiCitTWVNMSU5VWF9USU1FT1VUID89ICI1MCIKK1NZU0xJTlVYX0xBQkVMUyA/PSAiYm9vdCBpbnN0YWxsIgorTEFCRUxTX2FwcGVuZCA9ICIgJHtTWVNMSU5VWF9MQUJFTFN9ICIKKworUk9PVEZTID89ICIke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfQkFTRU5BTUV9LSR7TUFDSElORX0uZXh0NCIKKworZG9fYm9vdGltZ1tkZXBlbmRzXSArPSAiJHtJTklUUkRfSU1BR0V9OmRvX3Jvb3RmcyIKK2RvX2Jvb3RpbWdbZGVwZW5kc10gKz0gIiR7UE59OmRvX3Jvb3RmcyIKKworaW5oZXJpdCBib290aW1nCisKK0lNQUdFX1RZUEVERVBfbGl2ZSA9ICJleHQ0IgorSU1BR0VfVFlQRVNfTUFTS0VEICs9ICJsaXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtbWtsaWJzLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS1ta2xpYnMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDU1YThlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtbWtsaWJzLmJiY2xhc3MKQEAgLTAsMCArMSw3MSBAQAorZG9fcm9vdGZzW2RlcGVuZHNdICs9ICJta2xpYnMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK0lNQUdFX1BSRVBST0NFU1NfQ09NTUFORCArPSAibWtsaWJzX29wdGltaXplX2ltYWdlOyAiCisKK21rbGlic19vcHRpbWl6ZV9pbWFnZV9kb2l0KCkgeworCXJtIC1yZiAke1dPUktESVJ9L21rbGlicworCW1rZGlyIC1wICR7V09SS0RJUn0vbWtsaWJzL2Rlc3QKKwljZCAke0lNQUdFX1JPT1RGU30KKwlkdSAtYnMgPiAke1dPUktESVJ9L21rbGlicy9kdS5iZWZvcmUubWtsaWJzLnR4dAorCWZvciBpIGluIGBmaW5kIC5gOyBkbyBmaWxlICRpOyBkb25lIFwKKwkJfCBncmVwIEVMRiBcCisJCXwgZ3JlcCAiTFNCICpleGVjdXRhYmxlIiBcCisJCXwgZ3JlcCAiZHluYW1pY2FsbHkgbGlua2VkIiBcCisJCXwgc2VkICJzLzouKi8vIiBcCisJCXwgc2VkICJzK15cLi8rKyIgXAorCQk+ICR7V09SS0RJUn0vbWtsaWJzL2V4ZWN1dGFibGVzLmxpc3QKKworCWNhc2UgJHtUQVJHRVRfQVJDSH0gaW4KKwkJcG93ZXJwYyB8IG1pcHMgfCBtaXBzZWwgfCBtaWNyb2JsYXplICkKKwkJCWR5bmFtaWNfbG9hZGVyPSIke2Jhc2VfbGliZGlyfS9sZC5zby4xIgorCQkJOzsKKwkJcG93ZXJwYzY0KQorCQkJZHluYW1pY19sb2FkZXI9IiR7YmFzZV9saWJkaXJ9L2xkNjQuc28uMSIKKwkJCTs7CisJCXg4Nl82NCkKKwkJCWR5bmFtaWNfbG9hZGVyPSIke2Jhc2VfbGliZGlyfS9sZC1saW51eC14ODYtNjQuc28uMiIKKwkJCTs7CisJCWk1ODYgKQorCQkJZHluYW1pY19sb2FkZXI9IiR7YmFzZV9saWJkaXJ9L2xkLWxpbnV4LnNvLjIiCisJCQk7OworCQlhcm0gKQorCQkJZHluYW1pY19sb2FkZXI9IiR7YmFzZV9saWJkaXJ9L2xkLWxpbnV4LnNvLjMiCisJCQk7OworCQkqICkKKwkJCWR5bmFtaWNfbG9hZGVyPSIvdW5rbm93bl9keW5hbWljX2xpbmtlciIKKwkJCTs7CisJZXNhYworCisJbWtsaWJzIC12IFwKKwkJLS1sZGxpYiAke2R5bmFtaWNfbG9hZGVyfSBcCisJCS0tbGliZGlyICR7YmFzZWxpYn0gXAorCQktLXN5c3Jvb3QgJHtQS0dfQ09ORklHX1NZU1JPT1RfRElSfSBcCisJCS0tZ2NjLW9wdGlvbnMgIi0tc3lzcm9vdD0ke1BLR19DT05GSUdfU1lTUk9PVF9ESVJ9IiBcCisJCS0tcm9vdCAke0lNQUdFX1JPT1RGU30gXAorCQktLXRhcmdldCBgZWNobyAke1RBUkdFVF9QUkVGSVh9IHwgc2VkICdzLy0kLy8nIGAgXAorCQktZCAke1dPUktESVJ9L21rbGlicy9kZXN0IFwKKwkJYGNhdCAke1dPUktESVJ9L21rbGlicy9leGVjdXRhYmxlcy5saXN0YAorCisJY2QgJHtXT1JLRElSfS9ta2xpYnMvZGVzdAorCWZvciBpIGluICoKKwlkbworCQljcCAkaSBgZmluZCAke0lNQUdFX1JPT1RGU30gLW5hbWUgJGlgCisJZG9uZQorCisJY2QgJHtJTUFHRV9ST09URlN9CisJZHUgLWJzID4gJHtXT1JLRElSfS9ta2xpYnMvZHUuYWZ0ZXIubWtsaWJzLnR4dAorCisJZWNobyByb290ZnMgc2l6ZSBiZWZvcmUgbWtsaWJzIG9wdGltaXphdGlvbjogYGNhdCAke1dPUktESVJ9L21rbGlicy9kdS5iZWZvcmUubWtsaWJzLnR4dGAKKwllY2hvIHJvb3RmcyBzaXplIGFmdGVyIG1rbGlicyBvcHRpbWl6YXRpb246IGBjYXQgJHtXT1JLRElSfS9ta2xpYnMvZHUuYWZ0ZXIubWtsaWJzLnR4dGAKK30KKworbWtsaWJzX29wdGltaXplX2ltYWdlKCkgeworCWZvciBpbWcgaW4gJHtNS0xJQlNfT1BUSU1JWkVEX0lNQUdFU30KKwlkbworCQlpZiBbICIke2ltZ30iID0gIiR7UE59IiBdIHx8IFsgIiR7aW1nfSIgPSAiYWxsIiBdCisJCXRoZW4KKwkJCW1rbGlic19vcHRpbWl6ZV9pbWFnZV9kb2l0CisJCQlicmVhaworCQlmaQorCWRvbmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlLXByZWxpbmsuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlLXByZWxpbmsuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGJiM2FlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtcHJlbGluay5iYmNsYXNzCkBAIC0wLDAgKzEsMzMgQEAKK2RvX3Jvb3Rmc1tkZXBlbmRzXSArPSAicHJlbGluay1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworSU1BR0VfUFJFUFJPQ0VTU19DT01NQU5EICs9ICJwcmVsaW5rX2ltYWdlOyAiCisKK3ByZWxpbmtfaW1hZ2UgKCkgeworIwlleHBvcnQgUFNFVURPX0RFQlVHPTQKKyMJL2Jpbi9lbnYgfCAvYmluL2dyZXAgUFNFVURPCisjCWVjaG8gIkxEX0xJQlJBUllfUEFUSD0kTERfTElCUkFSWV9QQVRIIgorIwllY2hvICJMRF9QUkVMT0FEPSRMRF9QUkVMT0FEIgorCisJcHJlX3ByZWxpbmtfc2l6ZT1gZHUgLWtzICR7SU1BR0VfUk9PVEZTfSB8IGF3ayAne3NpemUgPSAkMSA7IHByaW50IHNpemUgfSdgCisJZWNobyAiU2l6ZSBiZWZvcmUgcHJlbGlua2luZyAkcHJlX3ByZWxpbmtfc2l6ZS4iCisKKwkjIFdlIG5lZWQgYSBwcmVsaW5rIGNvbmYgb24gdGhlIGZpbGVzeXN0ZW0sIGFkZCBvbmUgaWYgaXQncyBtaXNzaW5nCisJaWYgWyAhIC1lICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vcHJlbGluay5jb25mIF07IHRoZW4KKwkJY3AgJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtzeXNjb25mZGlyX25hdGl2ZX0vcHJlbGluay5jb25mIFwKKwkJCSR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vcHJlbGluay5jb25mCisJCWR1bW15X3ByZWxpbmtfY29uZj10cnVlOworCWVsc2UKKwkJZHVtbXlfcHJlbGlua19jb25mPWZhbHNlOworCWZpCisKKwkjIHByZWxpbmshCisJJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtzYmluZGlyX25hdGl2ZX0vcHJlbGluayAtLXJvb3QgJHtJTUFHRV9ST09URlN9IC1hbVIgLU4gLWMgJHtzeXNjb25mZGlyfS9wcmVsaW5rLmNvbmYKKworCSMgUmVtb3ZlIHRoZSBwcmVsaW5rLmNvbmYgaWYgd2UgaGFkIHRvIGFkZCBpdC4KKwlpZiBbICIkZHVtbXlfcHJlbGlua19jb25mIiA9ICJ0cnVlIiBdOyB0aGVuCisJCXJtIC1mICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vcHJlbGluay5jb25mCisJZmkKKworCXByZV9wcmVsaW5rX3NpemU9YGR1IC1rcyAke0lNQUdFX1JPT1RGU30gfCBhd2sgJ3tzaXplID0gJDEgOyBwcmludCBzaXplIH0nYAorCWVjaG8gIlNpemUgYWZ0ZXIgcHJlbGlua2luZyAkcHJlX3ByZWxpbmtfc2l6ZS4iCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS1zd2FiLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS1zd2FiLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkzMTg1NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlLXN3YWIuYmJjbGFzcwpAQCAtMCwwICsxLDk0IEBACitIT1NUX0RBVEEgPz0gIiR7VE1QRElSfS9ob3N0LWNvbnRhbWluYXRpb24tZGF0YS8iCitTV0FCQkVSX1JFUE9SVCA/PSAiJHtMT0dfRElSfS9zd2FiYmVyLyIKK1NXQUJCRVJfTE9HUyA/PSAiJHtMT0dfRElSfS9jb250YW1pbmF0aW9uLWxvZ3MiCitUUkFDRV9MT0dESVIgPz0gIiR7U1dBQkJFUl9MT0dTfS8ke1BBQ0tBR0VfQVJDSH0iCitUUkFDRV9MT0dGSUxFID0gIiR7VFJBQ0VfTE9HRElSfS8ke1BOfS0ke1BWfSIKKworU1dBQl9PUklHX1RBU0sgOj0gIiR7QkJfREVGQVVMVF9UQVNLfSIKK0JCX0RFRkFVTFRfVEFTSyA9ICJnZW5lcmF0ZV9zd2FiYmVyX3JlcG9ydCIKKworIyBTZXZlcmFsIHJlY2lwZXMgZG9uJ3QgYnVpbGQgd2l0aCBwYXJhbGxlbCBtYWtlIHdoZW4gcnVuIHVuZGVyIHN0cmFjZQorIyBJZGVhbGx5IHRoZXNlIHNob3VsZCBiZSBmaXhlZCBidXQgYXMgYSB0ZW1wb3JhcnkgbWVhc3VyZSBkaXNhYmxlIHBhcmFsbGVsCisjIGJ1aWxkcyBmb3IgdHJvdWJsZXNvbWUgcmVjaXBlcworUEFSQUxMRUxfTUFLRV9wbi1vcGVuc3NsID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tZ2xpYmMgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1nbGliLTIuMCA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWxpYnhtbDIgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1yZWFkbGluZSA9ICIiCitQQVJBTExFTF9NQUtFX3BuLXV0aWwtbGludXggPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1iaW51dGlscyA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWJpc29uID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tY21ha2UgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1lbGZ1dGlscyA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWdjYyA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWdjYy1ydW50aW1lID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tbTQgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1vcGtnID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tcGtnY29uZmlnID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tcHJlbGluayA9ICIiCitQQVJBTExFTF9NQUtFX3BuLXJwbSA9ICIiCitQQVJBTExFTF9NQUtFX3BuLXRjbCA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWJlZWNyeXB0ID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tY3VybCA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWdtcCA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWxpYm1wYyA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWxpYnhzbHQgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1sem8gPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1wb3B0ID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tbGludXgtd3JzID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tbGliZ2NyeXB0ID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tZ3BnbWUgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi11ZGV2ID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tZ251dGxzID0gIiIKKworcHl0aG9uKCkgeworICAgICMgTk9URTogSXQgbWlnaHQgYmUgdXNlZnVsIHRvIGRldGVjdCBob3N0IGluZmVjdGlvbiBvbiBuYXRpdmUgYW5kIGNyb3NzCisgICAgIyBwYWNrYWdlcyBidXQgYXMgaXQgdHVybnMgb3V0IHRvIGJlIHByZXR0eSBoYXJkIHRvIGRvIHRoaXMgZm9yIGFsbCBuYXRpdmUKKyAgICAjIGFuZCBjcm9zcyBwYWNrYWdlcyB3aGljaCBhcmVuJ3Qgc3dhYmJlci1uYXRpdmUgb3Igb25lIG9mIGl0cyBkZXBlbmRlbmNpZXMKKyAgICAjIEkgaGF2ZSBpZ25vcmVkIHRoZW0gZm9yIG5vdy4uLgorICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGQpIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MnLCBkKToKKyAgICAgICAgZGVwcyA9IChkLmdldFZhckZsYWcoJ2RvX3NldHNjZW5lJywgJ2RlcGVuZHMnKSBvciAiIikuc3BsaXQoKQorICAgICAgICBkZXBzLmFwcGVuZCgnc3RyYWNlLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19zZXRzY2VuZScsICdkZXBlbmRzJywgIiAiLmpvaW4oZGVwcykpCisgICAgICAgIGxvZ2RpciA9IGQuZXhwYW5kKCIke1RSQUNFX0xPR0RJUn0iKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIobG9nZGlyKQorICAgIGVsc2U6CisgICAgICAgIGQuc2V0VmFyKCdTVFJBQ0VGVU5DJywgJycpCit9CisKK1NUUkFDRVBJRCA9ICIke0Bvcy5nZXRwaWQoKX0iCitTVFJBQ0VGVU5DID0gImltYWdlc3dhYl9hdHRhY2hzdHJhY2UiCisKK2RvX2NvbmZpZ3VyZVtwcmVmdW5jc10gKz0gIiR7U1RSQUNFRlVOQ30iCitkb19jb21waWxlW3ByZWZ1bmNzXSArPSAiJHtTVFJBQ0VGVU5DfSIKKworaW1hZ2Vzd2FiX2F0dGFjaHN0cmFjZSAoKSB7CisJU1RSQUNFPWB3aGljaCBzdHJhY2VgCisKKwlpZiBbIC14ICIkU1RSQUNFIiBdOyB0aGVuCisJCXN3YWJiZXItc3RyYWNlLWF0dGFjaCAiJFNUUkFDRSAtZiAtbyAke1RSQUNFX0xPR0ZJTEV9LSR7QkJfQ1VSUkVOVFRBU0t9LmxvZyAtZSB0cmFjZT1vcGVuLGV4ZWN2ZSAtcCAke1NUUkFDRVBJRH0iICIke1RSQUNFX0xPR0ZJTEV9LXRyYWNlYXR0YWNoLSR7QkJfQ1VSUkVOVFRBU0t9LmxvZyIKKwlmaQorfQorCitkb19nZW5lcmF0ZV9zd2FiYmVyX3JlcG9ydCAoKSB7CisKKwl1cGRhdGVfZGlzdHJvICR7SE9TVF9EQVRBfQorCisJIyBTd2FiYmVyIGNhbid0IGNyZWF0ZSB0aGUgZGlyZWN0b3J5IGZvciB1cworCW1rZGlyIC1wICR7U1dBQkJFUl9SRVBPUlR9CisKKwlSRVBPUlRTVEFNUD0ke1NXQUJfT1JJR19UQVNLfS1gZGF0ZSArJTJtJTJkJTJIJTJNJVlgCisKKwlpZiBbIGB3aGljaCBjY2FjaGVgIF0gOyB0aGVuCisJCUNDQUNIRV9ESVI9YCggY2NhY2hlIC1zIHwgZ3JlcCAiY2FjaGUgZGlyZWN0b3J5IiB8IGdyZXAgLW8gJ1teIF0qJCcgMj4gL2Rldi9udWxsIClgCisgCWZpCisKKwlpZiBbICIkKGxzIC1BICR7SE9TVF9EQVRBfSkiIF07IHRoZW4KKwkJZWNobyAiR2VuZXJhdGluZyBzd2FiYmVyIHJlcG9ydCIKKwkJc3dhYmJlciAtZCAke0hPU1RfREFUQX0gLWwgJHtTV0FCQkVSX0xPR1N9IC1vICR7U1dBQkJFUl9SRVBPUlR9L3JlcG9ydC0ke1JFUE9SVFNUQU1QfS50eHQgLXIgJHtTV0FCQkVSX1JFUE9SVH0vZXh0cmFfcmVwb3J0LSR7UkVQT1JUU1RBTVB9LnR4dCAtYyBhbGwgLXAgJHtUT1BESVJ9IC1mICR7T0VST09UfS9tZXRhL2NvbmYvc3dhYmJlciAke1RPUERJUn0gJHtPRVJPT1R9ICR7Q0NBQ0hFX0RJUn0KKwllbHNlCisJCWVjaG8gIk5vIGhvc3QgZGF0YSwgY2Fubm90IGdlbmVyYXRlIHN3YWJiZXIgcmVwb3J0LiIKKwlmaQorfQorYWRkdGFzayBnZW5lcmF0ZV9zd2FiYmVyX3JlcG9ydCBhZnRlciBkb18ke1NXQUJfT1JJR19UQVNLfQorZG9fZ2VuZXJhdGVfc3dhYmJlcl9yZXBvcnRbZGVwZW5kc10gPSAic3dhYmJlci1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlLXZtLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS12bS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MzI2NjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS12bS5iYmNsYXNzCkBAIC0wLDAgKzEsNDkgQEAKKworU1lTTElOVVhfUFJPTVBUID89ICIwIgorU1lTTElOVVhfTEFCRUxTID0gImJvb3QiCitMQUJFTFNfYXBwZW5kID0gIiAke1NZU0xJTlVYX0xBQkVMU30gIgorCisjIFVzaW5nIGFuIGluaXRyYW1mcyBpcyBvcHRpb25hbC4gRW5hYmxlIGl0IGJ5IHNldHRpbmcgSU5JVFJEX0lNQUdFLgorSU5JVFJEX0lNQUdFID89ICIiCitJTklUUkQgPz0gIiR7QCcke0RFUExPWV9ESVJfSU1BR0V9LyR7SU5JVFJEX0lNQUdFfS0ke01BQ0hJTkV9LmNwaW8uZ3onIGlmICcke0lOSVRSRF9JTUFHRX0nIGVsc2UgJyd9IgorZG9fYm9vdGRpcmVjdGRpc2tbZGVwZW5kc10gKz0gIiR7QCcke0lOSVRSRF9JTUFHRX06ZG9fcm9vdGZzJyBpZiAnJHtJTklUUkRfSU1BR0V9JyBlbHNlICcnfSIKKworIyBuZWVkIHRvIGRlZmluZSB0aGUgZGVwZW5kZW5jeSBhbmQgdGhlIFJPT1RGUyBmb3IgZGlyZWN0ZGlzaworZG9fYm9vdGRpcmVjdGRpc2tbZGVwZW5kc10gKz0gIiR7UE59OmRvX3Jvb3RmcyIKK1JPT1RGUyA/PSAiJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX0JBU0VOQU1FfS0ke01BQ0hJTkV9LmV4dDQiCisKKyMgY3JlYXRpbmcgVk0gaW1hZ2VzIHJlbGllcyBvbiBoYXZpbmcgYSBoZGRpbWcgc28gZW5zdXJlIHdlIGluaGVyaXQgaXQgaGVyZS4KK2luaGVyaXQgYm9vdC1kaXJlY3RkaXNrCisKK0lNQUdFX1RZUEVERVBfdm1kayA9ICJleHQ0IgorSU1BR0VfVFlQRURFUF92ZGkgPSAiZXh0NCIKK0lNQUdFX1RZUEVERVBfcWNvdzIgPSAiZXh0NCIKK0lNQUdFX1RZUEVTX01BU0tFRCArPSAidm1kayB2ZGkgcWNvdzIiCisKK2NyZWF0ZV92bWRrX2ltYWdlICgpIHsKKyAgICBxZW11LWltZyBjb252ZXJ0IC1PIHZtZGsgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LmhkZGRpcmVjdCAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0udm1kaworICAgIGxuIC1zZiAke0lNQUdFX05BTUV9LnZtZGsgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX0xJTktfTkFNRX0udm1kaworfQorCitjcmVhdGVfdmRpX2ltYWdlICgpIHsKKyAgICBxZW11LWltZyBjb252ZXJ0IC1PIHZkaSAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0uaGRkZGlyZWN0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS52ZGkKKyAgICBsbiAtc2YgJHtJTUFHRV9OQU1FfS52ZGkgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX0xJTktfTkFNRX0udmRpCit9CisKK2NyZWF0ZV9xY293Ml9pbWFnZSAoKSB7CisgICAgcWVtdS1pbWcgY29udmVydCAtTyBxY293MiAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0uaGRkZGlyZWN0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5xY293MgorICAgIGxuIC1zZiAke0lNQUdFX05BTUV9LnFjb3cyICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9MSU5LX05BTUV9LnFjb3cyCit9CisKK3B5dGhvbiBkb192bWltZygpIHsKKyAgICBpZiAndm1kaycgaW4gZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdjcmVhdGVfdm1ka19pbWFnZScsIGQpCisgICAgaWYgJ3ZkaScgaW4gZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdjcmVhdGVfdmRpX2ltYWdlJywgZCkKKyAgICBpZiAncWNvdzInIGluIGQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJywgVHJ1ZSk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnY3JlYXRlX3Fjb3cyX2ltYWdlJywgZCkKK30KKworYWRkdGFzayB2bWltZyBhZnRlciBkb19ib290ZGlyZWN0ZGlzayBiZWZvcmUgZG9fYnVpbGQKK2RvX3ZtaW1nW2RlcGVuZHNdICs9ICJxZW11LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzdkNjRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UuYmJjbGFzcwpAQCAtMCwwICsxLDUwNCBAQAoraW5oZXJpdCByb290ZnNfJHtJTUFHRV9QS0dUWVBFfQorCitpbmhlcml0IHBvcHVsYXRlX3Nka19leHQKKworVE9PTENIQUlOX1RBUkdFVF9UQVNLICs9ICIke1BBQ0tBR0VfSU5TVEFMTH0iCitUT09MQ0hBSU5fVEFSR0VUX1RBU0tfQVRURU1QVE9OTFkgKz0gIiR7UEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZfSIKK1BPUFVMQVRFX1NES19QT1NUX1RBUkdFVF9DT01NQU5EICs9ICJyb290ZnNfc3lzcm9vdF9yZWxhdGl2ZWxpbmtzOyAiCisKK2luaGVyaXQgZ3ppcG5hdGl2ZQorCitMSUNFTlNFID0gIk1JVCIKK1BBQ0tBR0VTID0gIiIKK0RFUEVORFMgKz0gIiR7TUxQUkVGSVh9cWVtdXdyYXBwZXItY3Jvc3MgJHtNTFBSRUZJWH1kZXBtb2R3cmFwcGVyLWNyb3NzIgorUkRFUEVORFMgKz0gIiR7UEFDS0FHRV9JTlNUQUxMfSAke0xJTkdVQVNfSU5TVEFMTH0iCitSUkVDT01NRU5EUyArPSAiJHtQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFl9IgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitURVNUSU1BR0VDTEFTUyA9ICIke0BiYXNlX2NvbmRpdGlvbmFsKCdURVNUX0lNQUdFJywgJzEnLCAndGVzdGltYWdlLWF1dG8nLCAnJywgZCl9IgoraW5oZXJpdCAke1RFU1RJTUFHRUNMQVNTfQorCisjIElNQUdFX0ZFQVRVUkVTIG1heSBjb250YWluIGFueSBhdmFpbGFibGUgcGFja2FnZSBncm91cAorSU1BR0VfRkVBVFVSRVMgPz0gIiIKK0lNQUdFX0ZFQVRVUkVTW3R5cGVdID0gImxpc3QiCitJTUFHRV9GRUFUVVJFU1t2YWxpZGl0ZW1zXSArPSAiZGVidWctdHdlYWtzIHJlYWQtb25seS1yb290ZnMgZW1wdHktcm9vdC1wYXNzd29yZCBhbGxvdy1lbXB0eS1wYXNzd29yZCBwb3N0LWluc3RhbGwtbG9nZ2luZyIKKworIyBHZW5lcmF0ZSBjb21wYW5pb24gZGVidWdmcz8KK0lNQUdFX0dFTl9ERUJVR0ZTID89ICIwIgorCisjIHJvb3RmcyBib290c3RyYXAgaW5zdGFsbAorUk9PVEZTX0JPT1RTVFJBUF9JTlNUQUxMID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJJTUFHRV9GRUFUVVJFUyIsICJwYWNrYWdlLW1hbmFnZW1lbnQiLCAiIiwgIiR7Uk9PVEZTX1BLR01BTkFHRV9CT09UU1RSQVB9IixkKX0iCisKKyMgcGFja2FnZXMgdG8gaW5zdGFsbCBmcm9tIGZlYXR1cmVzCitGRUFUVVJFX0lOU1RBTEwgPSAiJHtAJyAnLmpvaW4ob2UucGFja2FnZWdyb3VwLnJlcXVpcmVkX3BhY2thZ2VzKG9lLmRhdGEudHlwZWRfdmFsdWUoJ0lNQUdFX0ZFQVRVUkVTJywgZCksIGQpKX0iCitGRUFUVVJFX0lOU1RBTExbdmFyZGVwdmFsdWVdID0gIiR7RkVBVFVSRV9JTlNUQUxMfSIKK0ZFQVRVUkVfSU5TVEFMTF9PUFRJT05BTCA9ICIke0AnICcuam9pbihvZS5wYWNrYWdlZ3JvdXAub3B0aW9uYWxfcGFja2FnZXMob2UuZGF0YS50eXBlZF92YWx1ZSgnSU1BR0VfRkVBVFVSRVMnLCBkKSwgZCkpfSIKK0ZFQVRVUkVfSU5TVEFMTF9PUFRJT05BTFt2YXJkZXB2YWx1ZV0gPSAiJHtGRUFUVVJFX0lOU1RBTExfT1BUSU9OQUx9IgorCisjIERlZmluZSBzb21lIHZlcnkgYmFzaWMgZmVhdHVyZSBwYWNrYWdlIGdyb3VwcworRkVBVFVSRV9QQUNLQUdFU19wYWNrYWdlLW1hbmFnZW1lbnQgPSAiJHtST09URlNfUEtHTUFOQUdFfSIKK1NQTEFTSCA/PSAicHNwbGFzaCIKK0ZFQVRVUkVfUEFDS0FHRVNfc3BsYXNoID0gIiR7U1BMQVNIfSIKKworSU1BR0VfSU5TVEFMTF9DT01QTEVNRU5UQVJZID0gJyR7QGNvbXBsZW1lbnRhcnlfZ2xvYnMoIklNQUdFX0ZFQVRVUkVTIiwgZCl9JworCitkZWYgY2hlY2tfaW1hZ2VfZmVhdHVyZXMoZCk6CisgICAgdmFsaWRfZmVhdHVyZXMgPSAoZC5nZXRWYXJGbGFnKCdJTUFHRV9GRUFUVVJFUycsICd2YWxpZGl0ZW1zJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICB2YWxpZF9mZWF0dXJlcyArPSBkLmdldFZhckZsYWdzKCdDT01QTEVNRU5UQVJZX0dMT0InKS5rZXlzKCkKKyAgICBmb3IgdmFyIGluIGQ6CisgICAgICAgaWYgdmFyLnN0YXJ0c3dpdGgoIlBBQ0tBR0VfR1JPVVBfIik6CisgICAgICAgICAgIGJiLndhcm4oIlBBQ0tBR0VfR1JPVVAgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSBGRUFUVVJFX1BBQ0tBR0VTIGluc3RlYWQiKQorICAgICAgICAgICB2YWxpZF9mZWF0dXJlcy5hcHBlbmQodmFyWzE0Ol0pCisgICAgICAgZWxpZiB2YXIuc3RhcnRzd2l0aCgiRkVBVFVSRV9QQUNLQUdFU18iKToKKyAgICAgICAgICAgdmFsaWRfZmVhdHVyZXMuYXBwZW5kKHZhclsxNzpdKQorICAgIHZhbGlkX2ZlYXR1cmVzLnNvcnQoKQorCisgICAgZmVhdHVyZXMgPSBzZXQob2UuZGF0YS50eXBlZF92YWx1ZSgnSU1BR0VfRkVBVFVSRVMnLCBkKSkKKyAgICBmb3IgZmVhdHVyZSBpbiBmZWF0dXJlczoKKyAgICAgICAgaWYgZmVhdHVyZSBub3QgaW4gdmFsaWRfZmVhdHVyZXM6CisgICAgICAgICAgICBpZiBiYi51dGlscy5jb250YWlucygnRVhUUkFfSU1BR0VfRkVBVFVSRVMnLCBmZWF0dXJlLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFJlY2lwZSgiJyVzJyBpbiBJTUFHRV9GRUFUVVJFUyAoYWRkZWQgdmlhIEVYVFJBX0lNQUdFX0ZFQVRVUkVTKSBpcyBub3QgYSB2YWxpZCBpbWFnZSBmZWF0dXJlLiBWYWxpZCBmZWF0dXJlczogJXMiICUgKGZlYXR1cmUsICcgJy5qb2luKHZhbGlkX2ZlYXR1cmVzKSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBSZWNpcGUoIiclcycgaW4gSU1BR0VfRkVBVFVSRVMgaXMgbm90IGEgdmFsaWQgaW1hZ2UgZmVhdHVyZS4gVmFsaWQgZmVhdHVyZXM6ICVzIiAlIChmZWF0dXJlLCAnICcuam9pbih2YWxpZF9mZWF0dXJlcykpKQorCitJTUFHRV9JTlNUQUxMID89ICIiCitJTUFHRV9JTlNUQUxMW3R5cGVdID0gImxpc3QiCitleHBvcnQgUEFDS0FHRV9JTlNUQUxMID89ICIke0lNQUdFX0lOU1RBTEx9ICR7Uk9PVEZTX0JPT1RTVFJBUF9JTlNUQUxMfSAke0ZFQVRVUkVfSU5TVEFMTH0iCitQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFkgPz0gIiR7RkVBVFVSRV9JTlNUQUxMX09QVElPTkFMfSIKKworIyBJbWFnZXMgYXJlIGdlbmVyYWxseSBidWlsdCBleHBsaWNpdGx5LCBkbyBub3QgbmVlZCB0byBiZSBwYXJ0IG9mIHdvcmxkLgorRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK1VTRV9ERVZGUyA/PSAiMSIKK1VTRV9ERVBNT0QgPz0gIjEiCisKK1BJRCA9ICIke0Bvcy5nZXRwaWQoKX0iCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK0xEQ09ORklHREVQRU5EID89ICJsZGNvbmZpZy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK0xEQ09ORklHREVQRU5EX2xpYmMtdWNsaWJjID0gIiIKK0xEQ09ORklHREVQRU5EX2xpYmMtbXVzbCA9ICIiCisKKyMgVGhpcyBpcyBuZWVkZWQgdG8gaGF2ZSBkZXBtb2QgZGF0YSBpbiBQS0dEQVRBX0RJUiwKKyMgYnV0IGlmIHlvdSdyZSBidWlsZGluZyBzbWFsbCBpbml0cmFtZnMgaW1hZ2UKKyMgZS5nLiB0byBpbmNsdWRlIGl0IGluIHlvdXIga2VybmVsLCB5b3UgcHJvYmFibHkKKyMgZG9uJ3Qgd2FudCB0aGlzIGRlcGVuZGVuY3ksIHdoaWNoIGlzIGNhdXNpbmcgZGVwZW5kZW5jeSBsb29wCitLRVJORUxERVBNT0RERVBFTkQgPz0gInZpcnR1YWwva2VybmVsOmRvX3BhY2thZ2VkYXRhIgorCitkb19yb290ZnNbZGVwZW5kc10gKz0gIiBcCisgICAgbWFrZWRldnMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgdmlydHVhbC9mYWtlcm9vdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCAke0xEQ09ORklHREVQRU5EfSBcCisgICAgdmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IHVwZGF0ZS1yYy5kLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IFwKKyAgICAke0tFUk5FTERFUE1PRERFUEVORH0gXAorIgorZG9fcm9vdGZzW3JlY3JkZXB0YXNrXSArPSAiZG9fcGFja2FnZWRhdGEiCisKK2RlZiBjb21tYW5kX3ZhcmlhYmxlcyhkKToKKyAgICByZXR1cm4gWydST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCcsJ1JPT1RGU19QUkVQUk9DRVNTX0NPTU1BTkQnLCdST09URlNfUE9TVElOU1RBTExfQ09NTUFORCcsJ09QS0dfUFJFUFJPQ0VTU19DT01NQU5EUycsJ09QS0dfUE9TVFBST0NFU1NfQ09NTUFORFMnLCdJTUFHRV9QT1NUUFJPQ0VTU19DT01NQU5EJywKKyAgICAgICAgICAgICdJTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQnLCdST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCcsJ1BPUFVMQVRFX1NES19QT1NUX0hPU1RfQ09NTUFORCcsJ1BPUFVMQVRFX1NES19QT1NUX1RBUkdFVF9DT01NQU5EJywnU0RLX1BPU1RQUk9DRVNTX0NPTU1BTkQnLCdSUE1fUFJFUFJPQ0VTU19DT01NQU5EUycsICAgICAgICAgCisgICAgICAgICAgICAnUlBNX1BPU1RQUk9DRVNTX0NPTU1BTkRTJ10KKworcHl0aG9uICgpIHsKKyAgICB2YXJpYWJsZXMgPSBjb21tYW5kX3ZhcmlhYmxlcyhkKQorICAgIGZvciB2YXIgaW4gdmFyaWFibGVzOgorICAgICAgICBpZiBkLmdldFZhcih2YXIsIEZhbHNlKToKKyAgICAgICAgICAgIGQuc2V0VmFyRmxhZyh2YXIsICdmdW5jJywgJzEnKQorfQorCitkZWYgcm9vdGZzX3ZhcmlhYmxlcyhkKToKKyAgICBmcm9tIG9lLnJvb3RmcyBpbXBvcnQgdmFyaWFibGVfZGVwZW5kcworICAgIHZhcmlhYmxlcyA9IFsnSU1BR0VfREVWSUNFX1RBQkxFUycsJ0JVSUxEX0lNQUdFU19GUk9NX0ZFRURTJywnSU1BR0VfVFlQRURFUF8nLCdJTUFHRV9UWVBFU19NQVNLRUQnLCdJTUFHRV9ST09URlNfQUxJR05NRU5UJywnSU1BR0VfT1ZFUkhFQURfRkFDVE9SJywnSU1BR0VfUk9PVEZTX1NJWkUnLCdJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UnLAorICAgICAgICAgICAgICAgICAnSU1BR0VfUk9PVEZTX01BWFNJWkUnLCdJTUFHRV9OQU1FJywnSU1BR0VfTElOS19OQU1FJywnSU1BR0VfTUFOSUZFU1QnLCdERVBMT1lfRElSX0lNQUdFJywnUk1fT0xEX0lNQUdFJywnSU1BR0VfRlNUWVBFUycsJ0lNQUdFX0lOU1RBTExfQ09NUExFTUVOVEFSWScsJ0lNQUdFX0xJTkdVQVMnLCdTREtfT1MnLAorICAgICAgICAgICAgICAgICAnU0RLX09VVFBVVCcsJ1NES1BBVEhOQVRJVkUnLCdTREtUQVJHRVRTWVNST09UJywnU0RLX0RJUicsJ1NES19WRU5ET1InLCdTREtJTUFHRV9JTlNUQUxMX0NPTVBMRU1FTlRBUlknLCdTREtfUEFDS0FHRV9BUkNIUycsJ1NES19PVVRQVVQnLCdTREtUQVJHRVRTWVNST09UJywnTVVMVElMSUJSRV9BTExPV19SRVAnLAorICAgICAgICAgICAgICAgICAnTVVMVElMSUJfVEVNUF9ST09URlMnLCdNVUxUSUxJQl9WQVJJQU5UUycsJ01VTFRJTElCUycsJ0FMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTJywnTVVMVElMSUJfR0xPQkFMX1ZBUklBTlRTJywnQkFEX1JFQ09NTUVOREFUSU9OUycsJ05PX1JFQ09NTUVOREFUSU9OUycsJ1BBQ0tBR0VfQVJDSFMnLAorICAgICAgICAgICAgICAgICAnUEFDS0FHRV9DTEFTU0VTJywnVEFSR0VUX1ZFTkRPUicsJ1RBUkdFVF9WRU5ET1InLCdUQVJHRVRfQVJDSCcsJ1RBUkdFVF9PUycsJ09WRVJSSURFUycsJ0JCRVhURU5EVkFSSUFOVCcsJ0ZFRURfREVQTE9ZRElSX0JBU0VfVVJJJywnSU5URVJDRVBUX0RJUicsJ1VTRV9ERVZGUycsCisgICAgICAgICAgICAgICAgICdDT01QUkVTU0lPTlRZUEVTJywgJ0lNQUdFX0dFTl9ERUJVR0ZTJ10KKyAgICB2YXJpYWJsZXMuZXh0ZW5kKGNvbW1hbmRfdmFyaWFibGVzKGQpKQorICAgIHZhcmlhYmxlcy5leHRlbmQodmFyaWFibGVfZGVwZW5kcyhkKSkKKyAgICByZXR1cm4gIiAiLmpvaW4odmFyaWFibGVzKQorCitkb19yb290ZnNbdmFyZGVwc10gKz0gIiR7QHJvb3Rmc192YXJpYWJsZXMoZCl9IgorCitkb19idWlsZFtkZXBlbmRzXSArPSAidmlydHVhbC9rZXJuZWw6ZG9fZGVwbG95IgorCitkZWYgYnVpbGRfbGl2ZShkKToKKyAgICBpZiBiYi51dGlscy5jb250YWlucygiSU1BR0VfRlNUWVBFUyIsICJsaXZlIiwgImxpdmUiLCAiMCIsIGQpID09ICIwIjogIyBsaXZlIGlzIG5vdCBzZXQgYnV0IGhvYiBtaWdodCBzZXQgaXNvIG9yIGhkZGltZworICAgICAgICBkLnNldFZhcignTk9JU08nLCBiYi51dGlscy5jb250YWlucygnSU1BR0VfRlNUWVBFUycsICJpc28iLCAiMCIsICIxIiwgZCkpCisgICAgICAgIGQuc2V0VmFyKCdOT0hERCcsIGJiLnV0aWxzLmNvbnRhaW5zKCdJTUFHRV9GU1RZUEVTJywgImhkZGltZyIsICIwIiwgIjEiLCBkKSkKKyAgICAgICAgaWYgZC5nZXRWYXIoJ05PSVNPJywgVHJ1ZSkgPT0gIjAiIG9yIGQuZ2V0VmFyKCdOT0hERCcsIFRydWUpID09ICIwIjoKKyAgICAgICAgICAgIHJldHVybiAiaW1hZ2UtbGl2ZSIKKyAgICAgICAgcmV0dXJuICIiCisgICAgcmV0dXJuICJpbWFnZS1saXZlIgorCitJTUFHRV9UWVBFX2xpdmUgPSAiJHtAYnVpbGRfbGl2ZShkKX0iCitpbmhlcml0ICR7SU1BR0VfVFlQRV9saXZlfQorCitJTUFHRV9UWVBFX3ZtID0gJyR7QGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiSU1BR0VfRlNUWVBFUyIsIFsidm1kayIsICJ2ZGkiLCAicWNvdzIiXSwgImltYWdlLXZtIiwgIiIsIGQpfScKK2luaGVyaXQgJHtJTUFHRV9UWVBFX3ZtfQorCitweXRob24gKCkgeworICAgIGRlcHMgPSAiICIgKyBpbWFnZXR5cGVzX2dldGRlcGVuZHMoZCkKKyAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3Jvb3RmcycsICdkZXBlbmRzJywgZGVwcykKKworICAgIGRlcHMgPSAiIgorICAgIGZvciBkZXAgaW4gKGQuZ2V0VmFyKCdFWFRSQV9JTUFHRURFUEVORFMnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgZGVwcyArPSAiICVzOmRvX3BvcHVsYXRlX3N5c3Jvb3QiICUgZGVwCisgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19idWlsZCcsICdkZXBlbmRzJywgZGVwcykKKworICAgICNwcm9jZXNzIElNQUdFX0ZFQVRVUkVTLCB3ZSBtdXN0IGRvIHRoaXMgYmVmb3JlIHJ1bnRpbWVfbWFwcGluZ19yZW5hbWUKKyAgICAjQ2hlY2sgZm9yIHJlcGxhY2VzIGltYWdlIGZlYXR1cmVzCisgICAgZmVhdHVyZXMgPSBzZXQob2UuZGF0YS50eXBlZF92YWx1ZSgnSU1BR0VfRkVBVFVSRVMnLCBkKSkKKyAgICByZW1haW5fZmVhdHVyZXMgPSBmZWF0dXJlcy5jb3B5KCkKKyAgICBmb3IgZmVhdHVyZSBpbiBmZWF0dXJlczoKKyAgICAgICAgcmVwbGFjZXMgPSBzZXQoKGQuZ2V0VmFyKCJJTUFHRV9GRUFUVVJFU19SRVBMQUNFU18lcyIgJSBmZWF0dXJlLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKyAgICAgICAgcmVtYWluX2ZlYXR1cmVzIC09IHJlcGxhY2VzCisKKyAgICAjQ2hlY2sgZm9yIGNvbmZsaWN0IGltYWdlIGZlYXR1cmVzCisgICAgZm9yIGZlYXR1cmUgaW4gcmVtYWluX2ZlYXR1cmVzOgorICAgICAgICBjb25mbGljdHMgPSBzZXQoKGQuZ2V0VmFyKCJJTUFHRV9GRUFUVVJFU19DT05GTElDVFNfJXMiICUgZmVhdHVyZSwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgICAgIHRlbXAgPSBjb25mbGljdHMgJiByZW1haW5fZmVhdHVyZXMKKyAgICAgICAgaWYgdGVtcDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCIlcyBjb250YWlucyBjb25mbGljdGluZyBJTUFHRV9GRUFUVVJFUyAlcyAlcyIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIGZlYXR1cmUsICcgJy5qb2luKGxpc3QodGVtcCkpKSkKKworICAgIGQuc2V0VmFyKCdJTUFHRV9GRUFUVVJFUycsICcgJy5qb2luKGxpc3QocmVtYWluX2ZlYXR1cmVzKSkpCisKKyAgICBjaGVja19pbWFnZV9mZWF0dXJlcyhkKQorICAgIGluaXRyYW1mc19pbWFnZSA9IGQuZ2V0VmFyKCdJTklUUkFNRlNfSU1BR0UnLCBUcnVlKSBvciAiIgorICAgIGlmIGluaXRyYW1mc19pbWFnZSAhPSAiIjoKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19idWlsZCcsICdkZXBlbmRzJywgIiAlczpkb19idW5kbGVfaW5pdHJhbWZzIiAlICBkLmdldFZhcignUE4nLCBUcnVlKSkKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19idW5kbGVfaW5pdHJhbWZzJywgJ2RlcGVuZHMnLCAiICVzOmRvX3Jvb3RmcyIgJSBpbml0cmFtZnNfaW1hZ2UpCit9CisKK0lNQUdFX0NMQVNTRVMgKz0gImltYWdlX3R5cGVzIgoraW5oZXJpdCAke0lNQUdFX0NMQVNTRVN9CisKK0lNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkQgPz0gIiIKKworIyBaYXAgdGhlIHJvb3QgcGFzc3dvcmQgaWYgZGVidWctdHdlYWtzIGZlYXR1cmUgaXMgbm90IGVuYWJsZWQKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EICs9ICcke0BiYi51dGlscy5jb250YWluc19hbnkoIklNQUdFX0ZFQVRVUkVTIiwgWyAnZGVidWctdHdlYWtzJywgJ2VtcHR5LXJvb3QtcGFzc3dvcmQnIF0sICIiLCAiemFwX2VtcHR5X3Jvb3RfcGFzc3dvcmQgOyAiLGQpfScKKworIyBBbGxvdyBkcm9wYmVhci9vcGVuc3NoIHRvIGFjY2VwdCBsb2dpbnMgZnJvbSBhY2NvdW50cyB3aXRoIGFuIGVtcHR5IHBhc3N3b3JkIHN0cmluZyBpZiBkZWJ1Zy10d2Vha3MgaXMgZW5hYmxlZAorUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gJyR7QGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiSU1BR0VfRkVBVFVSRVMiLCBbICdkZWJ1Zy10d2Vha3MnLCAnYWxsb3ctZW1wdHktcGFzc3dvcmQnIF0sICJzc2hfYWxsb3dfZW1wdHlfcGFzc3dvcmQ7ICIsICIiLGQpfScKKworIyBFbmFibGUgcG9zdGluc3QgbG9nZ2luZyBpZiBkZWJ1Zy10d2Vha3MgaXMgZW5hYmxlZAorUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gJyR7QGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiSU1BR0VfRkVBVFVSRVMiLCBbICdkZWJ1Zy10d2Vha3MnLCAncG9zdC1pbnN0YWxsLWxvZ2dpbmcnIF0sICJwb3N0aW5zdF9lbmFibGVfbG9nZ2luZzsgIiwgIiIsZCl9JworCisjIENyZWF0ZSAvZXRjL3RpbWVzdGFtcCBkdXJpbmcgaW1hZ2UgY29uc3RydWN0aW9uIHRvIGdpdmUgYSByZWFzb25hYmx5IHNhbmUgZGVmYXVsdCB0aW1lIHNldHRpbmcKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EICs9ICJyb290ZnNfdXBkYXRlX3RpbWVzdGFtcCA7ICIKKworIyBUd2VhayB0aGUgbW91bnQgb3B0aW9ucyBmb3Igcm9vdGZzIGluIC9ldGMvZnN0YWIgaWYgcmVhZC1vbmx5LXJvb3RmcyBpcyBlbmFibGVkCitST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCArPSAnJHtAYmIudXRpbHMuY29udGFpbnMoIklNQUdFX0ZFQVRVUkVTIiwgInJlYWQtb25seS1yb290ZnMiLCAicmVhZF9vbmx5X3Jvb3Rmc19ob29rOyAiLCAiIixkKX0nCisKKyMgV3JpdGUgbWFuaWZlc3QKK0lNQUdFX01BTklGRVNUID0gIiR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMubWFuaWZlc3QiCitST09URlNfUE9TVFVOSU5TVEFMTF9DT01NQU5EID0rICJ3cml0ZV9pbWFnZV9tYW5pZmVzdCA7ICIKKyMgU2V0IGRlZmF1bHQgcG9zdGluc3QgbG9nIGZpbGUKK1BPU1RJTlNUX0xPR0ZJTEUgPz0gIiR7bG9jYWxzdGF0ZWRpcn0vbG9nL3Bvc3RpbnN0YWxsLmxvZyIKKyMgU2V0IGRlZmF1bHQgdGFyZ2V0IGZvciBzeXN0ZW1kIGltYWdlcworU1lTVEVNRF9ERUZBVUxUX1RBUkdFVCA/PSAnJHtAYmIudXRpbHMuY29udGFpbnMoIklNQUdFX0ZFQVRVUkVTIiwgIngxMS1iYXNlIiwgImdyYXBoaWNhbC50YXJnZXQiLCAibXVsdGktdXNlci50YXJnZXQiLCBkKX0nCitST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCArPSAnJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJzeXN0ZW1kIiwgInNldF9zeXN0ZW1kX2RlZmF1bHRfdGFyZ2V0OyAiLCAiIiwgZCl9JworCitST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCArPSAnZW1wdHlfdmFyX3ZvbGF0aWxlOycKKworIyBzb21lIGRlZmF1bHQgbG9jYWxlcworSU1BR0VfTElOR1VBUyA/PSAiZGUtZGUgZnItZnIgZW4tZ2IiCisKK0xJTkdVQVNfSU5TVEFMTCA/PSAiJHtAIiAiLmpvaW4obWFwKGxhbWJkYSBzOiAibG9jYWxlLWJhc2UtJXMiICUgcywgZC5nZXRWYXIoJ0lNQUdFX0xJTkdVQVMnLCBUcnVlKS5zcGxpdCgpKSl9IgorCisjIFByZWZlciBpbWFnZSwgYnV0IHVzZSB0aGUgZmFsbGJhY2sgZmlsZXMgZm9yIGxvb2t1cHMgaWYgdGhlIGltYWdlIG9uZXMKKyMgYXJlbid0IHlldCBhdmFpbGFibGUuCitQU0VVRE9fUEFTU1dEID0gIiR7SU1BR0VfUk9PVEZTfToke1NUQUdJTkdfRElSX05BVElWRX0iCisKK2RvX3Jvb3Rmc1tkaXJzXSA9ICIke1RPUERJUn0iCitkb19yb290ZnNbbG9ja2ZpbGVzXSArPSAiJHtJTUFHRV9ST09URlN9LmxvY2siCitkb19yb290ZnNbY2xlYW5kaXJzXSArPSAiJHtTfSIKKworIyBNdXN0IGNhbGwgcmVhbF9kb19yb290ZnMoKSBmcm9tIGluc2lkZSBoZXJlLCByYXRoZXIgdGhhbiBhcyBhIHNlcGFyYXRlCisjIHRhc2ssIHNvIHRoYXQgd2UgaGF2ZSBhIHNpbmdsZSBmYWtlcm9vdCBjb250ZXh0IGZvciB0aGUgd2hvbGUgcHJvY2Vzcy4KK2RvX3Jvb3Rmc1t1bWFza10gPSAiMDIyIgorCisjIEEgaG9vayBmdW5jdGlvbiB0byBzdXBwb3J0IHJlYWQtb25seS1yb290ZnMgSU1BR0VfRkVBVFVSRVMKK3JlYWRfb25seV9yb290ZnNfaG9vayAoKSB7CisJIyBUd2VhayB0aGUgbW91bnQgb3B0aW9uIGFuZCBmc19wYXNzbm8gZm9yIHJvb3RmcyBpbiBmc3RhYgorCXNlZCAtaSAtZSAnL15bI1s6c3BhY2U6XV0qXC9kZXZcL3Jvb3Qve3MvZGVmYXVsdHMvcm8vO3MvXChbWzpzcGFjZTpdXSpbWzpkaWdpdDpdXVwpXChbWzpzcGFjZTpdXSpcKVtbOmRpZ2l0Ol1dJC9cMVwyMC99JyAke0lNQUdFX1JPT1RGU30vZXRjL2ZzdGFiCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgInN5c3Zpbml0IiwgInRydWUiLCAiZmFsc2UiLCBkKX07IHRoZW4KKwkJIyBDaGFuZ2UgdGhlIHZhbHVlIG9mIFJPT1RGU19SRUFEX09OTFkgaW4gL2V0Yy9kZWZhdWx0L3JjUyB0byB5ZXMKKwkJaWYgWyAtZSAke0lNQUdFX1JPT1RGU30vZXRjL2RlZmF1bHQvcmNTIF07IHRoZW4KKwkJCXNlZCAtaSAncy9ST09URlNfUkVBRF9PTkxZPW5vL1JPT1RGU19SRUFEX09OTFk9eWVzLycgJHtJTUFHRV9ST09URlN9L2V0Yy9kZWZhdWx0L3JjUworCQlmaQorCQkjIFJ1biBwb3B1bGF0ZS12b2xhdGlsZS5zaCBhdCByb290ZnMgdGltZSB0byBzZXQgdXAgYmFzaWMgZmlsZXMKKwkJIyBhbmQgZGlyZWN0b3JpZXMgdG8gc3VwcG9ydCByZWFkLW9ubHkgcm9vdGZzLgorCQlpZiBbIC14ICR7SU1BR0VfUk9PVEZTfS9ldGMvaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIF07IHRoZW4KKwkJCSR7SU1BR0VfUk9PVEZTfS9ldGMvaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoCisJCWZpCisJCSMgSWYgd2UncmUgdXNpbmcgb3BlbnNzaCBhbmQgdGhlIC9ldGMvc3NoIGRpcmVjdG9yeSBoYXMgbm8gcHJlLWdlbmVyYXRlZCBrZXlzLAorCQkjIHdlIHNob3VsZCBjb25maWd1cmUgb3BlbnNzaCB0byB1c2UgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSAvZXRjL3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQorCQkjIGFuZCB0aGUga2V5cyB1bmRlciAvdmFyL3J1bi9zc2guCisJCWlmIFsgLWQgJHtJTUFHRV9ST09URlN9L2V0Yy9zc2ggXTsgdGhlbgorCQkJaWYgWyAtZSAke0lNQUdFX1JPT1RGU30vZXRjL3NzaC9zc2hfaG9zdF9yc2Ffa2V5IF07IHRoZW4KKwkJCQllY2hvICJTWVNDT05GRElSPS9ldGMvc3NoIiA+PiAke0lNQUdFX1JPT1RGU30vZXRjL2RlZmF1bHQvc3NoCisJCQkJZWNobyAiU1NIRF9PUFRTPSIgPj4gJHtJTUFHRV9ST09URlN9L2V0Yy9kZWZhdWx0L3NzaAorCQkJZWxzZQorCQkJCWVjaG8gIlNZU0NPTkZESVI9L3Zhci9ydW4vc3NoIiA+PiAke0lNQUdFX1JPT1RGU30vZXRjL2RlZmF1bHQvc3NoCisJCQkJZWNobyAiU1NIRF9PUFRTPSctZiAvZXRjL3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seSciID4+ICR7SU1BR0VfUk9PVEZTfS9ldGMvZGVmYXVsdC9zc2gKKwkJCWZpCisJCWZpCisJZmkKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAic3lzdGVtZCIsICJ0cnVlIiwgImZhbHNlIiwgZCl9OyB0aGVuCisJICAgICMgVXBkYXRlIHVzZXIgZGF0YWJhc2UgZmlsZXMgc28gdGhhdCBzZXJ2aWNlcyBkb24ndCBmYWlsIGZvciBhIHJlYWQtb25seSBzeXN0ZW1kIHN5c3RlbQorCSAgICBmb3IgY29uZmZpbGUgaW4gJHtJTUFHRV9ST09URlN9L3Vzci9saWIvc3lzdXNlcnMuZC9zeXN0ZW1kLmNvbmYgJHtJTUFHRV9ST09URlN9L3Vzci9saWIvc3lzdXNlcnMuZC9zeXN0ZW1kLXJlbW90ZS5jb25mOyBkbworCQlbIC1lICRjb25mZmlsZSBdIHx8IGNvbnRpbnVlCisJCWdyZXAgLXYgIl4jIiAkY29uZmZpbGUgfCBzZWQgLWUgJy9eJC9kJyB8IHdoaWxlIHJlYWQgdHlwZSBuYW1lIGlkIGNvbW1lbnQ7IGRvCisJCSAgICBpZiBbICIkdHlwZSIgPSAidSIgXTsgdGhlbgorCQkJdXNlcmFkZF9wYXJhbXM9IiIKKwkJCVsgIiRpZCIgIT0gIi0iIF0gJiYgdXNlcmFkZF9wYXJhbXM9IiR1c2VyYWRkX3BhcmFtcyAtLXVpZCAkaWQiCisJCQlbICIkY29tbWVudCIgIT0gIi0iIF0gJiYgdXNlcmFkZF9wYXJhbXM9IiR1c2VyYWRkX3BhcmFtcyAtLWNvbW1lbnQgJGNvbW1lbnQiCisJCQl1c2VyYWRkX3BhcmFtcz0iJHVzZXJhZGRfcGFyYW1zIC0tc3lzdGVtICRuYW1lIgorCQkJZXZhbCB1c2VyYWRkIC0tcm9vdCAke0lNQUdFX1JPT1RGU30gJHVzZXJhZGRfcGFyYW1zIHx8IHRydWUKKwkJICAgIGVsaWYgWyAiJHR5cGUiID0gImciIF07IHRoZW4KKwkJCWdyb3VwYWRkX3BhcmFtcz0iIgorCQkJWyAiJGlkIiAhPSAiLSIgXSAmJiBncm91cGFkZF9wYXJhbXM9IiRncm91cGFkZF9wYXJhbXMgLS1naWQgJGlkIgorCQkJZ3JvdXBhZGRfcGFyYW1zPSIkZ3JvdXBhZGRfcGFyYW1zIC0tc3lzdGVtICRuYW1lIgorCQkJZXZhbCBncm91cGFkZCAtLXJvb3QgJHtJTUFHRV9ST09URlN9ICRncm91cGFkZF9wYXJhbXMgfHwgdHJ1ZQorCQkgICAgZmkKKwkJZG9uZQorCSAgICBkb25lCisJZmkKK30KKworUEFDS0FHRV9FWENMVURFID8/PSAiIgorUEFDS0FHRV9FWENMVURFW3R5cGVdID0gImxpc3QiCisKK3B5dGhvbiByb290ZnNfcHJvY2Vzc19pZ25vcmUoKSB7CisgICAgZXhjbF9wa2dzID0gZC5nZXRWYXIoIlBBQ0tBR0VfRVhDTFVERSIsIFRydWUpLnNwbGl0KCkKKyAgICBpbnN0X3BrZ3MgPSBkLmdldFZhcigiUEFDS0FHRV9JTlNUQUxMIiwgVHJ1ZSkuc3BsaXQoKQorICAgIGluc3RfYXR0ZW1wdF9wa2dzID0gZC5nZXRWYXIoIlBBQ0tBR0VfSU5TVEFMTF9BVFRFTVBUT05MWSIsIFRydWUpLnNwbGl0KCkKKworICAgIGQuc2V0VmFyKCdQQUNLQUdFX0lOU1RBTExfT1JJRycsICcgJy5qb2luKGluc3RfcGtncykpCisgICAgZC5zZXRWYXIoJ1BBQ0tBR0VfSU5TVEFMTF9BVFRFTVBUT05MWScsICcgJy5qb2luKGluc3RfYXR0ZW1wdF9wa2dzKSkKKworICAgIGZvciBwa2cgaW4gZXhjbF9wa2dzOgorICAgICAgICBpZiBwa2cgaW4gaW5zdF9wa2dzOgorICAgICAgICAgICAgYmIud2FybigiUGFja2FnZSAlcywgc2V0IHRvIGJlIGV4Y2x1ZGVkLCBpcyBpbiAlcyBQQUNLQUdFX0lOU1RBTEwgKCVzKS4gIEl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LiIgJSAocGtnLCBkLmdldFZhcignUE4nLCBUcnVlKSwgaW5zdF9wa2dzKSkKKyAgICAgICAgICAgIGluc3RfcGtncy5yZW1vdmUocGtnKQorCisgICAgICAgIGlmIHBrZyBpbiBpbnN0X2F0dGVtcHRfcGtnczoKKyAgICAgICAgICAgIGJiLndhcm4oIlBhY2thZ2UgJXMsIHNldCB0byBiZSBleGNsdWRlZCwgaXMgaW4gJXMgUEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZICglcykuICBJdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgbGlzdC4iICUgKHBrZywgZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIGluc3RfcGtncykpCisgICAgICAgICAgICBpbnN0X2F0dGVtcHRfcGtncy5yZW1vdmUocGtnKQorCisgICAgZC5zZXRWYXIoIlBBQ0tBR0VfSU5TVEFMTCIsICcgJy5qb2luKGluc3RfcGtncykpCisgICAgZC5zZXRWYXIoIlBBQ0tBR0VfSU5TVEFMTF9BVFRFTVBUT05MWSIsICcgJy5qb2luKGluc3RfYXR0ZW1wdF9wa2dzKSkKK30KK2RvX3Jvb3Rmc1twcmVmdW5jc10gKz0gInJvb3Rmc19wcm9jZXNzX2lnbm9yZSIKKworIyBXZSBoYXZlIHRvIGRlbGF5IHRoZSBydW50aW1lX21hcHBpbmdfcmVuYW1lIHVudGlsIGp1c3QgYmVmb3JlIHJvb3RmcyBydW5zCisjIG90aGVyd2lzZSwgdGhlIG11bHRpbGliIHJlbmFtaW5nIGNvdWxkIHN0ZXAgaW4gYW5kIHNxdWFzaCBhbnkgZml4dXBzIHRoYXQKKyMgbWF5IGhhdmUgb2NjdXJyZWQuCitweXRob24gcm9vdGZzX3J1bnRpbWVfbWFwcGluZygpIHsKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgcnVudGltZV9tYXBwaW5nX3JlbmFtZSgiUEFDS0FHRV9JTlNUQUxMIiwgcG4sIGQpCisgICAgcnVudGltZV9tYXBwaW5nX3JlbmFtZSgiUEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZIiwgcG4sIGQpCisgICAgcnVudGltZV9tYXBwaW5nX3JlbmFtZSgiQkFEX1JFQ09NTUVOREFUSU9OUyIsIHBuLCBkKQorfQorZG9fcm9vdGZzW3ByZWZ1bmNzXSArPSAicm9vdGZzX3J1bnRpbWVfbWFwcGluZyIKKworZmFrZXJvb3QgcHl0aG9uIGRvX3Jvb3RmcyAoKSB7CisgICAgZnJvbSBvZS5yb290ZnMgaW1wb3J0IGNyZWF0ZV9yb290ZnMKKyAgICBmcm9tIG9lLmltYWdlIGltcG9ydCBjcmVhdGVfaW1hZ2UKKyAgICBmcm9tIG9lLm1hbmlmZXN0IGltcG9ydCBjcmVhdGVfbWFuaWZlc3QKKworICAgICMgZ2VuZXJhdGUgdGhlIGluaXRpYWwgbWFuaWZlc3QKKyAgICBjcmVhdGVfbWFuaWZlc3QoZCkKKworICAgICMgZ2VuZXJhdGUgcm9vdGZzCisgICAgY3JlYXRlX3Jvb3RmcyhkKQorCisgICAgIyBnZW5lcmF0ZSBmaW5hbCBpbWFnZXMKKyAgICBjcmVhdGVfaW1hZ2UoZCkKK30KKworaW5zZXJ0X2ZlZWRfdXJpcyAoKSB7CisJCisJZWNobyAiQnVpbGRpbmcgZmVlZHMgZm9yIFske0RJU1RST31dLi4iCisKKwlmb3IgbGluZSBpbiAke0ZFRURfVVJJU30KKwlkbworCQkjIHN0cmlwIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcy90YWJzLCB0aGVuIHNwbGl0IGludG8gbmFtZSBhbmQgdXJpCisJCWxpbmVfY2xlYW49ImBlY2hvICIkbGluZSJ8c2VkICdzL15bIFx0XSovLztzL1sgXHRdKiQvLydgIgorCQlmZWVkX25hbWU9ImBlY2hvICIkbGluZV9jbGVhbiIgfCBzZWQgLW4gJ3MvXCguKlwpIyNcKC4qXCkvXDEvcCdgIgorCQlmZWVkX3VyaT0iYGVjaG8gIiRsaW5lX2NsZWFuIiB8IHNlZCAtbiAncy9cKC4qXCkjI1woLipcKS9cMi9wJ2AiCisJCQorCQllY2hvICJBZGRlZCAkZmVlZF9uYW1lIGZlZWQgd2l0aCBVUkwgJGZlZWRfdXJpIgorCQkKKwkJIyBpbnNlcnQgbmV3IGZlZWQtc291cmNlcworCQllY2hvICJzcmMvZ3ogJGZlZWRfbmFtZSAkZmVlZF91cmkiID4+ICR7SU1BR0VfUk9PVEZTfS9ldGMvb3BrZy8ke2ZlZWRfbmFtZX0tZmVlZC5jb25mCisJZG9uZQorfQorCitNVUxUSUxJQlJFX0FMTE9XX1JFUCA9LiAiJHtiYXNlX2JpbmRpcn18JHtiYXNlX3NiaW5kaXJ9fCR7YmluZGlyfXwke3NiaW5kaXJ9fCR7bGliZXhlY2Rpcn18JHtzeXNjb25mZGlyfXwke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXZ8L2xpYi9tb2R1bGVzL1teL10qL21vZHVsZXMuKnwiCitNVUxUSUxJQl9DSEVDS19GSUxFID0gIiR7V09SS0RJUn0vbXVsdGlsaWJfY2hlY2sucHkiCitNVUxUSUxJQl9URU1QX1JPT1RGUyA9ICIke1dPUktESVJ9L211bHRpbGliIgorCisjIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gZGlzYWxsb3cgZW1wdHkgcm9vdCBwYXNzd29yZCBpZiAnZGVidWctdHdlYWtzJyBpcyBub3QgaW4gSU1BR0VfRkVBVFVSRVMuCit6YXBfZW1wdHlfcm9vdF9wYXNzd29yZCAoKSB7CisJaWYgWyAtZSAke0lNQUdFX1JPT1RGU30vZXRjL3NoYWRvdyBdOyB0aGVuCisJCXNlZCAtaSAncyVecm9vdDo6JXJvb3Q6KjolJyAke0lNQUdFX1JPT1RGU30vZXRjL3NoYWRvdworICAgICAgICBmaQorCWlmIFsgLWUgJHtJTUFHRV9ST09URlN9L2V0Yy9wYXNzd2QgXTsgdGhlbgorCQlzZWQgLWkgJ3MlXnJvb3Q6OiVyb290Oio6JScgJHtJTUFHRV9ST09URlN9L2V0Yy9wYXNzd2QKKwlmaQorfSAKKworIyBhbGxvdyBkcm9wYmVhci9vcGVuc3NoIHRvIGFjY2VwdCByb290IGxvZ2lucyBhbmQgbG9naW5zIGZyb20gYWNjb3VudHMgd2l0aCBhbiBlbXB0eSBwYXNzd29yZCBzdHJpbmcKK3NzaF9hbGxvd19lbXB0eV9wYXNzd29yZCAoKSB7CisJaWYgWyAtZSAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZyBdOyB0aGVuCisJCXNlZCAtaSAncy9eWyNbOnNwYWNlOl1dKlBlcm1pdFJvb3RMb2dpbi4qL1Blcm1pdFJvb3RMb2dpbiB5ZXMvJyAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZworCQlzZWQgLWkgJ3MvXlsjWzpzcGFjZTpdXSpQZXJtaXRFbXB0eVBhc3N3b3Jkcy4qL1Blcm1pdEVtcHR5UGFzc3dvcmRzIHllcy8nICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnCisJZmkKKworCWlmIFsgLWUgJHtJTUFHRV9ST09URlN9JHtzYmluZGlyfS9kcm9wYmVhciBdIDsgdGhlbgorCQlpZiBncmVwIC1xIERST1BCRUFSX0VYVFJBX0FSR1MgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9kZWZhdWx0L2Ryb3BiZWFyIDI+L2Rldi9udWxsIDsgdGhlbgorCQkJaWYgISBncmVwIC1xICJEUk9QQkVBUl9FWFRSQV9BUkdTPS4qLUIiICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9kcm9wYmVhciA7IHRoZW4KKwkJCQlzZWQgLWkgJ3MvXkRST1BCRUFSX0VYVFJBX0FSR1M9IipcKFteIl0qXCkiKi9EUk9QQkVBUl9FWFRSQV9BUkdTPSJcMSAtQiIvJyAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvZHJvcGJlYXIKKwkJCWZpCisJCWVsc2UKKwkJCXByaW50ZiAnXG5EUk9QQkVBUl9FWFRSQV9BUkdTPSItQiJcbicgPj4gJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9kZWZhdWx0L2Ryb3BiZWFyCisJCWZpCisJZmkKKworCWlmIFsgLWQgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9wYW0uZCBdIDsgdGhlbgorCQlzZWQgLWkgJ3MvbnVsbG9rX3NlY3VyZS9udWxsb2svJyAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L3BhbS5kLyoKKwlmaQorfQorCisjIERpc2FibGUgRE5TIGxvb2t1cHMsIHRoZSBTU0hfRElTQUJMRV9ETlNfTE9PS1VQIGNhbiBiZSBvdmVycmlkZGVuIHRvIGFsbG93CisjIGRpc3Ryb3MgdG8gY2hvb3NlIG5vdCB0byB0YWtlIHRoaXMgY2hhbmdlCitTU0hfRElTQUJMRV9ETlNfTE9PS1VQID89ICIgc3NoX2Rpc2FibGVfZG5zX2xvb2t1cCA7ICIKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EX2FwcGVuZF9xZW11YWxsID0gIiR7U1NIX0RJU0FCTEVfRE5TX0xPT0tVUH0iCitzc2hfZGlzYWJsZV9kbnNfbG9va3VwICgpIHsKKwlpZiBbIC1lICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnIF07IHRoZW4KKwkJc2VkIC1pIC1lICdzOiNVc2VETlMgeWVzOlVzZUROUyBubzonICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnCisJZmkKK30KKworIyBFbmFibGUgcG9zdGluc3QgbG9nZ2luZyBpZiBkZWJ1Zy10d2Vha3MgaXMgZW5hYmxlZAorcG9zdGluc3RfZW5hYmxlX2xvZ2dpbmcgKCkgeworCW1rZGlyIC1wICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vZGVmYXVsdAorCWVjaG8gIlBPU1RJTlNUX0xPR0dJTkc9MSIgPj4gJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3Bvc3RpbnN0CisJZWNobyAiTE9HRklMRT0ke1BPU1RJTlNUX0xPR0ZJTEV9IiA+PiAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvcG9zdGluc3QKK30KKworIyBNb2RpZnkgc3lzdGVtZCBkZWZhdWx0IHRhcmdldAorc2V0X3N5c3RlbWRfZGVmYXVsdF90YXJnZXQgKCkgeworCWlmIFsgLWQgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9zeXN0ZW1kL3N5c3RlbSAtYSAtZSAke0lNQUdFX1JPT1RGU30ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyR7U1lTVEVNRF9ERUZBVUxUX1RBUkdFVH0gXTsgdGhlbgorCQlsbiAtc2YgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8ke1NZU1RFTURfREVGQVVMVF9UQVJHRVR9ICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vc3lzdGVtZC9zeXN0ZW0vZGVmYXVsdC50YXJnZXQKKwlmaQorfQorCisjIElmIC92YXIvdm9sYXRpbGUgaXMgbm90IGVtcHR5LCB3ZSBoYXZlIHNlZW4gcHJvYmxlbXMgd2hlcmUgcHJvZ3JhbXMgc3VjaCBhcyB0aGUKKyMgam91cm5hbCBtYWtlIGFzc3VtcHRpb25zIGJhc2VkIG9uIHRoZSBjb250ZW50cyBvZiAvdmFyL3ZvbGF0aWxlLiBUaGUgam91cm5hbAorIyB3b3VsZCB0aGVuIHdyaXRlIHRvIC92YXIvdm9sYXRpbGUgYmVmb3JlIGl0IHdhcyBtb3VudGVkLCB0aHVzIGhpZGluZyB0aGUKKyMgaXRlbXMgcHJldmlvdXNseSB3cml0dGVuLgorIworIyBUaGlzIGNoYW5nZSBpcyB0byBhdHRlbXB0IHRvIGZpeCB0aG9zZSB0eXBlcyBvZiBpc3N1ZXMgaW4gYSB3YXkgdGhhdCBkb2Vzbid0CisjIGFmZmVjdCB1c2VycyB0aGF0IG1heSBub3QgYmUgdXNpbmcgL3Zhci92b2xhdGlsZS4KK2VtcHR5X3Zhcl92b2xhdGlsZSAoKSB7CisJaWYgWyAtZSAke0lNQUdFX1JPT1RGU30vZXRjL2ZzdGFiIF07IHRoZW4KKwkJbWF0Y2g9YGF3ayAnJDEgIX4gIiMiICYmICQyIH4gL1wvdmFyXC92b2xhdGlsZS97cHJpbnQgJDJ9JyAke0lNQUdFX1JPT1RGU30vZXRjL2ZzdGFiIDI+IC9kZXYvbnVsbGAKKwkJaWYgWyAtbiAiJG1hdGNoIiBdOyB0aGVuCisJCQlmaW5kICR7SU1BR0VfUk9PVEZTfS92YXIvdm9sYXRpbGUgLW1pbmRlcHRoIDEgLWRlbGV0ZQorCQlmaQorCWZpCit9CisKKyMgVHVybiBhbnkgc3ltYm9saWMgL3NiaW4vaW5pdCBsaW5rIGludG8gYSBmaWxlCityZW1vdmVfaW5pdF9saW5rICgpIHsKKwlpZiBbIC1oICR7SU1BR0VfUk9PVEZTfS9zYmluL2luaXQgXTsgdGhlbgorCQlMSU5LRklMRT0ke0lNQUdFX1JPT1RGU31gcmVhZGxpbmsgJHtJTUFHRV9ST09URlN9L3NiaW4vaW5pdGAKKwkJcm0gJHtJTUFHRV9ST09URlN9L3NiaW4vaW5pdAorCQljcCAkTElOS0ZJTEUgJHtJTUFHRV9ST09URlN9L3NiaW4vaW5pdAorCWZpCit9CisKK21ha2VfemltYWdlX3N5bWxpbmtfcmVsYXRpdmUgKCkgeworCWlmIFsgLUwgJHtJTUFHRV9ST09URlN9L2Jvb3QvekltYWdlIF07IHRoZW4KKwkJKGNkICR7SU1BR0VfUk9PVEZTfS9ib290LyAmJiBmb3IgaSBpbiBgbHMgekltYWdlLSogfCBzb3J0YDsgZG8gbG4gLXNmICRpIHpJbWFnZTsgZG9uZSkKKwlmaQorfQorCitweXRob24gd3JpdGVfaW1hZ2VfbWFuaWZlc3QgKCkgeworICAgIGZyb20gb2Uucm9vdGZzIGltcG9ydCBpbWFnZV9saXN0X2luc3RhbGxlZF9wYWNrYWdlcworICAgIHdpdGggb3BlbihkLmdldFZhcignSU1BR0VfTUFOSUZFU1QnLCBUcnVlKSwgJ3crJykgYXMgaW1hZ2VfbWFuaWZlc3Q6CisgICAgICAgIGltYWdlX21hbmlmZXN0LndyaXRlKGltYWdlX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzKGQsICd2ZXInKSkKKyAgICAgICAgaW1hZ2VfbWFuaWZlc3Qud3JpdGUoIlxuIikKK30KKworIyBDYW4gYmUgdXNlIHRvIGNyZWF0ZSAvZXRjL3RpbWVzdGFtcCBkdXJpbmcgaW1hZ2UgY29uc3RydWN0aW9uIHRvIGdpdmUgYSByZWFzb25hYmx5IAorIyBzYW5lIGRlZmF1bHQgdGltZSBzZXR0aW5nCityb290ZnNfdXBkYXRlX3RpbWVzdGFtcCAoKSB7CisJZGF0ZSAtdSArJTRZJTJtJTJkJTJIJTJNJTJTID4ke0lNQUdFX1JPT1RGU30vZXRjL3RpbWVzdGFtcAorfQorCisjIFByZXZlbnQgWCBmcm9tIGJlaW5nIHN0YXJ0ZWQKK3Jvb3Rmc19ub194X3N0YXJ0dXAgKCkgeworCWlmIFsgLWYgJHtJTUFHRV9ST09URlN9L2V0Yy9pbml0LmQveHNlcnZlci1ub2RtIF07IHRoZW4KKwkJY2htb2QgYS14ICR7SU1BR0VfUk9PVEZTfS9ldGMvaW5pdC5kL3hzZXJ2ZXItbm9kbQorCWZpCit9CisKK3Jvb3Rmc190cmltX3NjaGVtYXMgKCkgeworCWZvciBzY2hlbWEgaW4gJHtJTUFHRV9ST09URlN9L2V0Yy9nY29uZi9zY2hlbWFzLyouc2NoZW1hcworCWRvCisJCSMgTmVlZCB0aGlzIGluIGNhc2Ugbm8gZmlsZXMgZXhpc3QKKwkJaWYgWyAtZSAkc2NoZW1hIF07IHRoZW4KKwkJCW9lLXRyaW0tc2NoZW1hcyAkc2NoZW1hID4gJHNjaGVtYS5uZXcKKwkJCW12ICRzY2hlbWEubmV3ICRzY2hlbWEKKwkJZmkKKwlkb25lCit9CisKK3Jvb3Rmc19jaGVja19ob3N0X3VzZXJfY29udGFtaW5hdGVkICgpIHsKKwljb250YW1pbmF0ZWQ9IiR7V09SS0RJUn0vaG9zdC11c2VyLWNvbnRhbWluYXRlZC50eHQiCisJSE9TVF9VU0VSX1VJRD0iJChQU0VVRE9fVU5MT0FEPTEgaWQgLXUpIgorCUhPU1RfVVNFUl9HSUQ9IiQoUFNFVURPX1VOTE9BRD0xIGlkIC1nKSIKKworCWZpbmQgIiR7SU1BR0VfUk9PVEZTfSIgLXdob2xlbmFtZSAiJHtJTUFHRV9ST09URlN9L2hvbWUiIC1wcnVuZSBcCisJICAgIC11c2VyICIkSE9TVF9VU0VSX1VJRCIgLW8gLWdyb3VwICIkSE9TVF9VU0VSX0dJRCIgPiIkY29udGFtaW5hdGVkIgorCisJaWYgWyAtcyAiJGNvbnRhbWluYXRlZCIgXTsgdGhlbgorCQllY2hvICJXQVJOSU5HOiBQYXRocyBpbiB0aGUgcm9vdGZzIGFyZSBvd25lZCBieSB0aGUgc2FtZSB1c2VyIG9yIGdyb3VwIGFzIHRoZSB1c2VyIHJ1bm5pbmcgYml0YmFrZS4gU2VlIHRoZSBsb2dmaWxlIGZvciB0aGUgc3BlY2lmaWMgcGF0aHMuIgorCQljYXQgIiRjb250YW1pbmF0ZWQiIHwgc2VkICJzLF4sICAsIgorCWZpCit9CisKKyMgTWFrZSBhbnkgYWJzb2x1dGUgbGlua3MgaW4gYSBzeXNyb290IHJlbGF0aXZlCityb290ZnNfc3lzcm9vdF9yZWxhdGl2ZWxpbmtzICgpIHsKKwlzeXNyb290LXJlbGF0aXZlbGlua3MucHkgJHtTREtfT1VUUFVUfS8ke1NES1RBUkdFVFNZU1JPT1R9Cit9CisKK2RvX2ZldGNoW25vZXhlY10gPSAiMSIKK2RvX3VucGFja1tub2V4ZWNdID0gIjEiCitkb19wYXRjaFtub2V4ZWNdID0gIjEiCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgorZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCitkb19pbnN0YWxsW25vZXhlY10gPSAiMSIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZVtub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlX3FhW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2VkYXRhW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW25vZXhlY10gPSAiMSIKKworYWRkdGFzayByb290ZnMgYmVmb3JlIGRvX2J1aWxkCisjIEFsbG93IHRoZSBrZXJuZWwgdG8gYmUgcmVwYWNrZWQgd2l0aCB0aGUgaW5pdHJhbWZzIGFuZCBib290IGltYWdlIGZpbGUgYXMgYSBzaW5nbGUgZmlsZQorZG9fYnVuZGxlX2luaXRyYW1mc1tkZXBlbmRzXSArPSAidmlydHVhbC9rZXJuZWw6ZG9fYnVuZGxlX2luaXRyYW1mcyIKK2RvX2J1bmRsZV9pbml0cmFtZnNbbm9zdGFtcF0gPSAiMSIKK2RvX2J1bmRsZV9pbml0cmFtZnNbbm9leGVjXSA9ICIxIgorZG9fYnVuZGxlX2luaXRyYW1mcyAoKSB7CisJOgorfQorYWRkdGFzayBidW5kbGVfaW5pdHJhbWZzIGFmdGVyIGRvX3Jvb3RmcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2VfdHlwZXMuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlX3R5cGVzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA2NDAzZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlX3R5cGVzLmJiY2xhc3MKQEAgLTAsMCArMSwyNjAgQEAKKworIyBUaGUgZGVmYXVsdCBhbGlnbWVudCBvZiB0aGUgc2l6ZSBvZiB0aGUgcm9vdGZzIGlzIHNldCB0byAxS2lCLiBJbiBjYXNlCisjIHlvdSdyZSB1c2luZyB0aGUgU0QgY2FyZCBlbXVsYXRpb24gb2YgYSBRRU1VIHN5c3RlbSBzaW11bGF0b3IgeW91IG1heQorIyBzZXQgdGhpcyB2YWx1ZSB0byAyMDQ4ICgyTWlCIGFsaWdubWVudCkuCitJTUFHRV9ST09URlNfQUxJR05NRU5UID89ICIxIgorCitkZWYgaW1hZ2V0eXBlc19nZXRkZXBlbmRzKGQpOgorICAgIGRlZiBhZGRkZXAoZGVwc3RyLCBkZXBzKToKKyAgICAgICAgZm9yIGkgaW4gKGRlcHN0ciBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIGkgbm90IGluIGRlcHM6CisgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQoaSkKKworICAgIGRlcHMgPSBbXQorICAgIGN0eXBlcyA9IGQuZ2V0VmFyKCdDT01QUkVTU0lPTlRZUEVTJywgVHJ1ZSkuc3BsaXQoKQorICAgIGZvciB0eXBlIGluIChkLmdldFZhcignSU1BR0VfRlNUWVBFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICBpZiB0eXBlIGluIFsidm1kayIsICJ2ZGkiLCAicWNvdzIiLCAibGl2ZSIsICJpc28iLCAiaGRkaW1nIl06CisgICAgICAgICAgICB0eXBlID0gImV4dDQiCisgICAgICAgIGJhc2V0eXBlID0gdHlwZQorICAgICAgICBmb3IgY3R5cGUgaW4gY3R5cGVzOgorICAgICAgICAgICAgaWYgdHlwZS5lbmRzd2l0aCgiLiIgKyBjdHlwZSk6CisgICAgICAgICAgICAgICAgYmFzZXR5cGUgPSB0eXBlWzotbGVuKCIuIiArIGN0eXBlKV0KKyAgICAgICAgICAgICAgICBhZGRkZXAoZC5nZXRWYXIoIkNPTVBSRVNTX0RFUEVORFNfJXMiICUgY3R5cGUsIFRydWUpLCBkZXBzKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGZvciB0eXBlZGVwZW5kcyBpbiAoZC5nZXRWYXIoIklNQUdFX1RZUEVERVBfJXMiICUgYmFzZXR5cGUsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgYWRkZGVwKGQuZ2V0VmFyKCdJTUFHRV9ERVBFTkRTXyVzJyAlIHR5cGVkZXBlbmRzLCBUcnVlKSAsIGRlcHMpCisgICAgICAgIGFkZGRlcChkLmdldFZhcignSU1BR0VfREVQRU5EU18lcycgJSBiYXNldHlwZSwgVHJ1ZSkgLCBkZXBzKQorCisgICAgZGVwc3RyID0gIiIKKyAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgIGRlcHN0ciArPSAiICIgKyBkZXAgKyAiOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisgICAgcmV0dXJuIGRlcHN0cgorCisKK1haX0NPTVBSRVNTSU9OX0xFVkVMID89ICItZSAtNiIKK1haX0lOVEVHUklUWV9DSEVDSyA/PSAiY3JjMzIiCitYWl9USFJFQURTID89ICItVCAwIgorCitKRkZTMl9TVU1fRVhUUkFfQVJHUyA/PSAiIgorSU1BR0VfQ01EX2pmZnMyID0gIm1rZnMuamZmczIgLS1yb290PSR7SU1BR0VfUk9PVEZTfSAtLWZha2V0aW1lIC0tb3V0cHV0PSR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuamZmczIgJHtFWFRSQV9JTUFHRUNNRH0iCisKK0lNQUdFX0NNRF9jcmFtZnMgPSAibWtmcy5jcmFtZnMgJHtJTUFHRV9ST09URlN9ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuY3JhbWZzICR7RVhUUkFfSU1BR0VDTUR9IgorCitvZV9ta2V4dDIzNGZzICgpIHsKKwlmc3R5cGU9JDEKKwlleHRyYV9pbWFnZWNtZD0iIgorCisJaWYgWyAkIyAtZ3QgMSBdOyB0aGVuCisJCXNoaWZ0CisJCWV4dHJhX2ltYWdlY21kPSRACisJZmkKKworCSMgSWYgZ2VuZXJhdGluZyBhbiBlbXB0eSBpbWFnZSB0aGUgc2l6ZSBvZiB0aGUgc3BhcnNlIGJsb2NrIHNob3VsZCBiZSBsYXJnZQorCSMgZW5vdWdoIHRvIGFsbG9jYXRlIGFuIGV4dDQgZmlsZXN5c3RlbSB1c2luZyA0MDk2IGJ5dGVzIHBlciBpbm9kZSwgdGhpcyBpcworCSMgYWJvdXQgNjBLLCBzbyBkZCBuZWVkcyBhIG1pbmltdW0gY291bnQgb2YgNjAsIHdpdGggYnM9MTAyNCAoYnl0ZXMgcGVyIElPKQorCWV2YWwgbG9jYWwgQ09VTlQ9XCIwXCIKKwlldmFsIGxvY2FsIE1JTl9DT1VOVD1cIjYwXCIKKwlpZiBbICRST09URlNfU0laRSAtbHQgJE1JTl9DT1VOVCBdOyB0aGVuCisJCWV2YWwgQ09VTlQ9XCIkTUlOX0NPVU5UXCIKKwlmaQorCSMgQ3JlYXRlIGEgc3BhcnNlIGltYWdlIGJsb2NrCisJZGQgaWY9L2Rldi96ZXJvIG9mPSR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuJGZzdHlwZSBzZWVrPSRST09URlNfU0laRSBjb3VudD0kQ09VTlQgYnM9MTAyNAorCW1rZnMuJGZzdHlwZSAtRiAkZXh0cmFfaW1hZ2VjbWQgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy4kZnN0eXBlIC1kICR7SU1BR0VfUk9PVEZTfQorfQorCitJTUFHRV9DTURfZXh0MiA9ICJvZV9ta2V4dDIzNGZzIGV4dDIgJHtFWFRSQV9JTUFHRUNNRH0iCitJTUFHRV9DTURfZXh0MyA9ICJvZV9ta2V4dDIzNGZzIGV4dDMgJHtFWFRSQV9JTUFHRUNNRH0iCitJTUFHRV9DTURfZXh0NCA9ICJvZV9ta2V4dDIzNGZzIGV4dDQgJHtFWFRSQV9JTUFHRUNNRH0iCisKK01JTl9CVFJGU19TSVpFID89ICIxNjM4NCIKK0lNQUdFX0NNRF9idHJmcyAoKSB7CisJaWYgWyAke1JPT1RGU19TSVpFfSAtZ3QgJHtNSU5fQlRSRlNfU0laRX0gXTsgdGhlbgorCQlkZCBpZj0vZGV2L3plcm8gb2Y9JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5idHJmcyBjb3VudD0ke1JPT1RGU19TSVpFfSBicz0xMDI0CisJCW1rZnMuYnRyZnMgJHtFWFRSQV9JTUFHRUNNRH0gLXIgJHtJTUFHRV9ST09URlN9ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuYnRyZnMKKwllbHNlCisJCWJiZmF0YWwgIlJvb3RmcyBpcyB0b28gc21hbGwgZm9yIEJUUkZTIChSb290ZnMgQWN0dWFsIFNpemU6ICR7Uk9PVEZTX1NJWkV9LCBCVFJGUyBNaW5pbXVtIFNpemU6ICR7TUlOX0JUUkZTX1NJWkV9KSIKKwlmaQorfQorCitJTUFHRV9DTURfc3F1YXNoZnMgPSAibWtzcXVhc2hmcyAke0lNQUdFX1JPT1RGU30gJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5zcXVhc2hmcyAke0VYVFJBX0lNQUdFQ01EfSAtbm9hcHBlbmQiCitJTUFHRV9DTURfc3F1YXNoZnMteHogPSAibWtzcXVhc2hmcyAke0lNQUdFX1JPT1RGU30gJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5zcXVhc2hmcy14eiAke0VYVFJBX0lNQUdFQ01EfSAtbm9hcHBlbmQgLWNvbXAgeHoiCitJTUFHRV9DTURfc3F1YXNoZnMtbHpvID0gIm1rc3F1YXNoZnMgJHtJTUFHRV9ST09URlN9ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuc3F1YXNoZnMtbHpvICR7RVhUUkFfSU1BR0VDTUR9IC1ub2FwcGVuZCAtY29tcCBsem8iCisKKyMgQnkgZGVmYXVsdCwgdGFyIGZyb20gdGhlIGhvc3QgaXMgdXNlZCwgd2hpY2ggY2FuIGJlIHF1aXRlIG9sZC4gSWYKKyMgeW91IG5lZWQgc3BlY2lhbCBwYXJhbWV0ZXJzIChsaWtlIC0teGF0dHJzKSB3aGljaCBhcmUgb25seSBzdXBwb3J0ZWQKKyMgYnkgR05VIHRhciB1cHN0cmVhbSA+PSAxLjI3LCB0aGVuIG92ZXJyaWRlIHRoYXQgZGVmYXVsdDoKKyMgSU1BR0VfQ01EX1RBUiA9ICJ0YXIgLS14YXR0cnMgLS14YXR0cnMtaW5jbHVkZT0qIgorIyBJTUFHRV9ERVBFTkRTX3Rhcl9hcHBlbmQgPSAiIHRhci1yZXBsYWNlbWVudC1uYXRpdmUiCisjIEVYVFJBTkFUSVZFUEFUSCArPSAidGFyLW5hdGl2ZSIKKyMKKyMgVGhlIEdOVSBkb2N1bWVudGF0aW9uIGRvZXMgbm90IHNwZWNpZnkgd2hldGhlciAtLXhhdHRycy1pbmNsdWRlIGlzIG5lY2Vzc2FyeS4KKyMgSW4gcHJhY3RpY2UsIGl0IHR1cm5lZCBvdXQgdG8gYmUgbm90IG5lZWRlZCB3aGVuIGNyZWF0aW5nIGFyY2hpdmVzIGFuZAorIyByZXF1aXJlZCB3aGVuIGV4dHJhY3RpbmcsIGJ1dCBpdCBzZWVtcyBwcnVkZW50IHRvIHVzZSBpdCBpbiBib3RoIGNhc2VzLgorSU1BR0VfQ01EX1RBUiA/PSAidGFyIgorSU1BR0VfQ01EX3RhciA9ICIke0lNQUdFX0NNRF9UQVJ9IC1jdmYgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy50YXIgLUMgJHtJTUFHRV9ST09URlN9IC4iCisKK2RvX3Jvb3Rmc1tjbGVhbmRpcnNdICs9ICIke1dPUktESVJ9L2NwaW9fYXBwZW5kIgorSU1BR0VfQ01EX2NwaW8gKCkgeworCShjZCAke0lNQUdFX1JPT1RGU30gJiYgZmluZCAuIHwgY3BpbyAtbyAtSCBuZXdjID4ke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmNwaW8pCisJaWYgWyAhIC1MICR7SU1BR0VfUk9PVEZTfS9pbml0IC1hICEgLWUgJHtJTUFHRV9ST09URlN9L2luaXQgXTsgdGhlbgorCQlpZiBbIC1MICR7SU1BR0VfUk9PVEZTfS9zYmluL2luaXQgLW8gLWUgJHtJTUFHRV9ST09URlN9L3NiaW4vaW5pdCBdOyB0aGVuCisJCQlsbiAtc2YgL3NiaW4vaW5pdCAke1dPUktESVJ9L2NwaW9fYXBwZW5kL2luaXQKKwkJZWxzZQorCQkJdG91Y2ggJHtXT1JLRElSfS9jcGlvX2FwcGVuZC9pbml0CisJCWZpCisJCShjZCAgJHtXT1JLRElSfS9jcGlvX2FwcGVuZCAmJiBlY2hvIC4vaW5pdCB8IGNwaW8gLW9BIC1IIG5ld2MgLUYgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5jcGlvKQorCWZpCit9CisKK0VMRl9LRVJORUwgPz0gIiR7U1RBR0lOR19ESVJfSE9TVH0vdXNyL3NyYy9rZXJuZWwvJHtLRVJORUxfSU1BR0VUWVBFfSIKK0VMRl9BUFBFTkQgPz0gInJhbWRpc2tfc2l6ZT0zMjc2OCByb290PS9kZXYvcmFtMCBydyBjb25zb2xlPSIKKworSU1BR0VfQ01EX2VsZiAoKSB7CisJdGVzdCAtZiAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmVsZiAmJiBybSAtZiAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmVsZgorCW1rZWxmSW1hZ2UgLS1rZXJuZWw9JHtFTEZfS0VSTkVMfSAtLWluaXRyZD0ke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmNwaW8uZ3ogLS1vdXRwdXQ9JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5lbGYgLS1hcHBlbmQ9JyR7RUxGX0FQUEVORH0nICR7RVhUUkFfSU1BR0VDTUR9Cit9CitJTUFHRV9UWVBFREVQX2VsZiA9ICJjcGlvLmd6IgorCitVQklfVk9MTkFNRSA/PSAiJHtNQUNISU5FfS1yb290ZnMiCisKK211bHRpdWJpX21rZnMoKSB7CisJbG9jYWwgbWt1Ymlmc19hcmdzPSIkMSIKKwlsb2NhbCB1YmluaXplX2FyZ3M9IiQyIgorCWlmIFsgLXogIiQzIiBdOyB0aGVuCisJCWxvY2FsIHZuYW1lPSIiCisJZWxzZQorCQlsb2NhbCB2bmFtZT0iXyQzIgorCWZpCisKKwllY2hvIFxbdWJpZnNcXSA+IHViaW5pemUke3ZuYW1lfS5jZmcKKwllY2hvIG1vZGU9dWJpID4+IHViaW5pemUke3ZuYW1lfS5jZmcKKwllY2hvIGltYWdlPSR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfSR7dm5hbWV9LnJvb3Rmcy51YmlmcyA+PiB1YmluaXplJHt2bmFtZX0uY2ZnCisJZWNobyB2b2xfaWQ9MCA+PiB1YmluaXplJHt2bmFtZX0uY2ZnCisJZWNobyB2b2xfdHlwZT1keW5hbWljID4+IHViaW5pemUke3ZuYW1lfS5jZmcKKwllY2hvIHZvbF9uYW1lPSR7VUJJX1ZPTE5BTUV9ID4+IHViaW5pemUke3ZuYW1lfS5jZmcKKwllY2hvIHZvbF9mbGFncz1hdXRvcmVzaXplID4+IHViaW5pemUke3ZuYW1lfS5jZmcKKwlta2ZzLnViaWZzIC1yICR7SU1BR0VfUk9PVEZTfSAtbyAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ke3ZuYW1lfS5yb290ZnMudWJpZnMgJHtta3ViaWZzX2FyZ3N9CisJdWJpbml6ZSAtbyAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ke3ZuYW1lfS5yb290ZnMudWJpICR7dWJpbml6ZV9hcmdzfSB1YmluaXplJHt2bmFtZX0uY2ZnCisKKwkjIENsZWFudXAgY2ZnIGZpbGUKKwltdiB1YmluaXplJHt2bmFtZX0uY2ZnICR7REVQTE9ZX0RJUl9JTUFHRX0vCisKKwkjIENyZWF0ZSBvd24gc3ltbGluaworCWNkICR7REVQTE9ZX0RJUl9JTUFHRX0KKwlpZiBbIC1lICR7SU1BR0VfTkFNRX0ke3ZuYW1lfS5yb290ZnMudWJpZnMgXTsgdGhlbgorCQlsbiAtc2YgJHtJTUFHRV9OQU1FfSR7dm5hbWV9LnJvb3Rmcy51YmlmcyBcCisJCSR7SU1BR0VfTElOS19OQU1FfSR7dm5hbWV9LnViaWZzCisJZmkKKwlpZiBbIC1lICR7SU1BR0VfTkFNRX0ke3ZuYW1lfS5yb290ZnMudWJpIF07IHRoZW4KKwkJbG4gLXNmICR7SU1BR0VfTkFNRX0ke3ZuYW1lfS5yb290ZnMudWJpIFwKKwkJJHtJTUFHRV9MSU5LX05BTUV9JHt2bmFtZX0udWJpCisJZmkKKwljZCAtCit9CisKK0lNQUdFX0NNRF9tdWx0aXViaSAoKSB7CisJIyBTcGxpdCBNS1VCSUZTX0FSR1NfPG5hbWU+IGFuZCBVQklOSVpFX0FSR1NfPG5hbWU+CisJZm9yIG5hbWUgaW4gJHtNVUxUSVVCSV9CVUlMRH07IGRvCisJCWV2YWwgbG9jYWwgbWt1Ymlmc19hcmdzPVwiXCRNS1VCSUZTX0FSR1NfJHtuYW1lfVwiCisJCWV2YWwgbG9jYWwgdWJpbml6ZV9hcmdzPVwiXCRVQklOSVpFX0FSR1NfJHtuYW1lfVwiCisKKwkJbXVsdGl1YmlfbWtmcyAiJHtta3ViaWZzX2FyZ3N9IiAiJHt1YmluaXplX2FyZ3N9IiAiJHtuYW1lfSIKKwlkb25lCit9CisKK0lNQUdFX0NNRF91YmkgKCkgeworCW11bHRpdWJpX21rZnMgIiR7TUtVQklGU19BUkdTfSIgIiR7VUJJTklaRV9BUkdTfSIKK30KKworSU1BR0VfQ01EX3ViaWZzID0gIm1rZnMudWJpZnMgLXIgJHtJTUFHRV9ST09URlN9IC1vICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMudWJpZnMgJHtNS1VCSUZTX0FSR1N9IgorCitJTUFHRV9DTURfd2ljICgpIHsKKwlvdXQ9JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9CisJd2tzPSR7RklMRV9ESVJOQU1FfS8ke0lNQUdFX0JBU0VOQU1FfS4ke01BQ0hJTkV9LndrcworCVsgLWUgJHdrcyBdIHx8IHdrcz0ke0ZJTEVfRElSTkFNRX0vJHtJTUFHRV9CQVNFTkFNRX0ud2tzCisJWyAtZSAkd2tzIF0gfHwgYmJmYXRhbCAiS2lza3N0YXJ0IGZpbGUgJHdrcyBkb2Vzbid0IGV4aXN0IgorCUJVSUxERElSPSR7VE9QRElSfSB3aWMgY3JlYXRlICR3a3MgLS12YXJzICR7U1RBR0lOR19ESVJfVEFSR0VUfS9pbWdkYXRhLyAtZSAke0lNQUdFX0JBU0VOQU1FfSAtbyAkb3V0LworCW12ICRvdXQvYnVpbGQvJHtJTUFHRV9CQVNFTkFNRX0qLmRpcmVjdCAkb3V0LnJvb3Rmcy53aWMKKwlybSAtcmYgJG91dC8KK30KKworRVhUUkFfSU1BR0VDTUQgPSAiIgorCitpbmhlcml0IHNpdGVpbmZvCitKRkZTMl9FTkRJQU5ORVNTID89ICIke0BiYXNlX2NvbmRpdGlvbmFsKCdTSVRFSU5GT19FTkRJQU5ORVNTJywgJ2xlJywgJy1sJywgJy1iJywgZCl9IgorSkZGUzJfRVJBU0VCTE9DSyA/PSAiMHg0MDAwMCIKK0VYVFJBX0lNQUdFQ01EX2pmZnMyID89ICItLXBhZCAke0pGRlMyX0VORElBTk5FU1N9IC0tZXJhc2VibG9jaz0ke0pGRlMyX0VSQVNFQkxPQ0t9IC0tbm8tY2xlYW5tYXJrZXJzIgorCisjIENoYW5nZSB0aGVzZSBpZiB5b3Ugd2FudCBkZWZhdWx0IG1rZnMgYmVoYXZpb3IgKGkuZS4gY3JlYXRlIG1pbmltYWwgaW5vZGUgbnVtYmVyKQorRVhUUkFfSU1BR0VDTURfZXh0MiA/PSAiLWkgNDA5NiIKK0VYVFJBX0lNQUdFQ01EX2V4dDMgPz0gIi1pIDQwOTYiCitFWFRSQV9JTUFHRUNNRF9leHQ0ID89ICItaSA0MDk2IgorRVhUUkFfSU1BR0VDTURfYnRyZnMgPz0gIiIKK0VYVFJBX0lNQUdFQ01EX2VsZiA/PSAiIgorCitJTUFHRV9ERVBFTkRTID0gIiIKK0lNQUdFX0RFUEVORFNfamZmczIgPSAibXRkLXV0aWxzLW5hdGl2ZSIKK0lNQUdFX0RFUEVORFNfY3JhbWZzID0gInV0aWwtbGludXgtbmF0aXZlIgorSU1BR0VfREVQRU5EU19leHQyID0gImUyZnNwcm9ncy1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX2V4dDMgPSAiZTJmc3Byb2dzLW5hdGl2ZSIKK0lNQUdFX0RFUEVORFNfZXh0NCA9ICJlMmZzcHJvZ3MtbmF0aXZlIgorSU1BR0VfREVQRU5EU19idHJmcyA9ICJidHJmcy10b29scy1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX3NxdWFzaGZzID0gInNxdWFzaGZzLXRvb2xzLW5hdGl2ZSIKK0lNQUdFX0RFUEVORFNfc3F1YXNoZnMteHogPSAic3F1YXNoZnMtdG9vbHMtbmF0aXZlIgorSU1BR0VfREVQRU5EU19zcXVhc2hmcy1sem8gPSAic3F1YXNoZnMtdG9vbHMtbmF0aXZlIgorSU1BR0VfREVQRU5EU19lbGYgPSAidmlydHVhbC9rZXJuZWwgbWtlbGZpbWFnZS1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX3ViaSA9ICJtdGQtdXRpbHMtbmF0aXZlIgorSU1BR0VfREVQRU5EU191YmlmcyA9ICJtdGQtdXRpbHMtbmF0aXZlIgorSU1BR0VfREVQRU5EU19tdWx0aXViaSA9ICJtdGQtdXRpbHMtbmF0aXZlIgorSU1BR0VfREVQRU5EU193aWMgPSAicGFydGVkLW5hdGl2ZSIKKworIyBUaGlzIHZhcmlhYmxlIGlzIGF2YWlsYWJsZSB0byByZXF1ZXN0IHdoaWNoIHZhbHVlcyBhcmUgc3VpdGFibGUgZm9yIElNQUdFX0ZTVFlQRVMKK0lNQUdFX1RZUEVTID0gIiBcCisgICAgamZmczIgamZmczIuc3VtIFwKKyAgICBjcmFtZnMgXAorICAgIGV4dDIgZXh0Mi5neiBleHQyLmJ6MiBleHQyLmx6bWEgXAorICAgIGV4dDMgZXh0My5neiBcCisgICAgZXh0NCBleHQ0Lmd6IFwKKyAgICBidHJmcyBcCisgICAgaXNvIFwKKyAgICBoZGRpbWcgXAorICAgIHNxdWFzaGZzIHNxdWFzaGZzLXh6IHNxdWFzaGZzLWx6byBcCisgICAgdWJpIHViaWZzIG11bHRpdWJpIFwKKyAgICB0YXIgdGFyLmd6IHRhci5iejIgdGFyLnh6IHRhci5sejQgXAorICAgIGNwaW8gY3Bpby5neiBjcGlvLnh6IGNwaW8ubHptYSBjcGlvLmx6NCBcCisgICAgdm1kayBcCisgICAgdmRpIFwKKyAgICBxY293MiBcCisgICAgZWxmIFwKKyAgICB3aWMgd2ljLmd6IHdpYy5iejIgd2ljLmx6bWEgXAorIgorCitDT01QUkVTU0lPTlRZUEVTID0gImd6IGJ6MiBsem1hIHh6IGx6NCBzdW0iCitDT01QUkVTU19DTURfbHptYSA9ICJsem1hIC1rIC1mIC03ICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0iCitDT01QUkVTU19DTURfZ3ogPSAiZ3ppcCAtZiAtOSAtYyAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9ID4gJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfS5neiIKK0NPTVBSRVNTX0NNRF9iejIgPSAicGJ6aXAyIC1mIC1rICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0iCitDT01QUkVTU19DTURfeHogPSAieHogLWYgLWsgLWMgJHtYWl9DT01QUkVTU0lPTl9MRVZFTH0gJHtYWl9USFJFQURTfSAtLWNoZWNrPSR7WFpfSU5URUdSSVRZX0NIRUNLfSAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9ID4gJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfS54eiIKK0NPTVBSRVNTX0NNRF9sejQgPSAibHo0YyAtOSAtYyAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9ID4gJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfS5sejQiCitDT01QUkVTU19DTURfc3VtID0gInN1bXRvb2wgLWkgJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfSAtbyAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9LnN1bSAke0pGRlMyX1NVTV9FWFRSQV9BUkdTfSIKK0NPTVBSRVNTX0RFUEVORFNfbHptYSA9ICJ4ei1uYXRpdmUiCitDT01QUkVTU19ERVBFTkRTX2d6ID0gIiIKK0NPTVBSRVNTX0RFUEVORFNfYnoyID0gInBiemlwMi1uYXRpdmUiCitDT01QUkVTU19ERVBFTkRTX3h6ID0gInh6LW5hdGl2ZSIKK0NPTVBSRVNTX0RFUEVORFNfbHo0ID0gImx6NC1uYXRpdmUiCitDT01QUkVTU19ERVBFTkRTX3N1bSA9ICJtdGQtdXRpbHMtbmF0aXZlIgorCitSVU5OQUJMRV9JTUFHRV9UWVBFUyA/PSAiZXh0MiBleHQzIGV4dDQiCitSVU5OQUJMRV9NQUNISU5FX1BBVFRFUk5TID89ICJxZW11IgorCitERVBMT1lBQkxFX0lNQUdFX1RZUEVTID89ICJoZGRpbWcgaXNvIiAKKworIyBVc2UgSU1BR0VfRVhURU5TSU9OX3h4eCB0byBtYXAgaW1hZ2UgdHlwZSAneHh4JyB3aXRoIHJlYWwgaW1hZ2UgZmlsZSBleHRlbnNpb24gbmFtZShzKSBmb3IgSG9iCitJTUFHRV9FWFRFTlNJT05fbGl2ZSA9ICJoZGRpbWcgaXNvIgorCisjIFRoZSBJTUFHRV9UWVBFU19NQVNLRUQgdmFyaWFibGUgd2lsbCBiZSB1c2VkIHRvIG1hc2sgb3V0IGZyb20gdGhlIElNQUdFX0ZTVFlQRVMsCisjIGltYWdlcyB0aGF0IHdpbGwgbm90IGJlIGJ1aWx0IGF0IGRvX3Jvb3RmcyB0aW1lOiB2bWRrLCB2ZGksIHFjb3cyLCBoZGRpbWcsIGlzbywgZXRjLgorSU1BR0VfVFlQRVNfTUFTS0VEID89ICIiCisKKyMgVGhlIFdJQ1ZBUlMgdmFyaWFibGUgaXMgdXNlZCB0byBkZWZpbmUgbGlzdCBvZiBiaXRiYWtlIHZhcmlhYmxlcyB1c2VkIGluIHdpYyBjb2RlCisjIHZhcmlhYmxlcyBmcm9tIHRoaXMgbGlzdCBpcyB3cml0dGVuIHRvIDxpbWFnZT4uZW52IGZpbGUKK1dJQ1ZBUlMgPz0gIkJCTEFZRVJTIERFUExPWV9ESVJfSU1BR0UgSERERElSIElNQUdFX0JBU0VOQU1FIElNQUdFX0JPT1RfRklMRVMgSU1BR0VfTElOS19OQU1FIElNQUdFX1JPT1RGUyBJTklUUkFNRlNfRlNUWVBFUyBJTklUUkQgSVNPRElSIE1BQ0hJTkVfQVJDSCBST09URlNfU0laRSBTVEFHSU5HX0RBVEFESVIgU1RBR0lOR19ESVJfTkFUSVZFIFNUQUdJTkdfTElCRElSIFRBUkdFVF9TWVMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZV90eXBlc191Ym9vdC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2VfdHlwZXNfdWJvb3QuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODFiY2EyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2VfdHlwZXNfdWJvb3QuYmJjbGFzcwpAQCAtMCwwICsxLDI2IEBACitpbmhlcml0IGltYWdlX3R5cGVzIGtlcm5lbC1hcmNoCisKK29lX21raW1hZ2UgKCkgeworICAgIG1raW1hZ2UgLUEgJHtVQk9PVF9BUkNIfSAtTyBsaW51eCAtVCByYW1kaXNrIC1DICQyIC1uICR7SU1BR0VfTkFNRX0gXAorICAgICAgICAtZCAke0RFUExPWV9ESVJfSU1BR0V9LyQxICR7REVQTE9ZX0RJUl9JTUFHRX0vJDEudS1ib290CisgICAgaWYgWyB4JDMgPSB4ImNsZWFuIiBdOyB0aGVuCisgICAgICAgIHJtICQxCisgICAgZmkKK30KKworQ09NUFJFU1NJT05UWVBFUyArPSAiZ3oudS1ib290IGJ6Mi51LWJvb3QgbHptYS51LWJvb3QgdS1ib290IgorCitDT01QUkVTU19ERVBFTkRTX3UtYm9vdCA9ICJ1LWJvb3QtbWtpbWFnZS1uYXRpdmUiCitDT01QUkVTU19DTURfdS1ib290ICAgICAgPSAib2VfbWtpbWFnZSAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9IG5vbmUiCisKK0NPTVBSRVNTX0RFUEVORFNfZ3oudS1ib290ID0gInUtYm9vdC1ta2ltYWdlLW5hdGl2ZSIKK0NPTVBSRVNTX0NNRF9nei51LWJvb3QgICAgICA9ICIke0NPTVBSRVNTX0NNRF9nen07IG9lX21raW1hZ2UgJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfS5neiBnemlwIGNsZWFuIgorCitDT01QUkVTU19ERVBFTkRTX2J6Mi51LWJvb3QgPSAidS1ib290LW1raW1hZ2UtbmF0aXZlIgorQ09NUFJFU1NfQ01EX2J6Mi51LWJvb3QgICAgICA9ICIke0NPTVBSRVNTX0NNRF9iejJ9OyBvZV9ta2ltYWdlICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0uYnoyIGJ6aXAyIGNsZWFuIgorCitDT01QUkVTU19ERVBFTkRTX2x6bWEudS1ib290ID0gInUtYm9vdC1ta2ltYWdlLW5hdGl2ZSIKK0NPTVBSRVNTX0NNRF9sem1hLnUtYm9vdCAgICAgID0gIiR7Q09NUFJFU1NfQ01EX2x6bWF9OyBvZV9ta2ltYWdlICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0ubHptYSBsem1hIGNsZWFuIgorCitJTUFHRV9UWVBFUyArPSAiZXh0Mi51LWJvb3QgZXh0Mi5nei51LWJvb3QgZXh0Mi5iejIudS1ib290IGV4dDIubHptYS51LWJvb3QgZXh0My5nei51LWJvb3QgZXh0NC5nei51LWJvb3QiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2luc2FuZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW5zYW5lLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM4NjI5YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2luc2FuZS5iYmNsYXNzCkBAIC0wLDAgKzEsMTI4MCBAQAorIyBCQiBDbGFzcyBpbnNwaXJlZCBieSBlYnVpbGQuc2gKKyMKKyMgVGhpcyBjbGFzcyB3aWxsIHRlc3QgZmlsZXMgYWZ0ZXIgaW5zdGFsbGF0aW9uIGZvciBjZXJ0YWluCisjIHNlY3VyaXR5IGlzc3VlcyBhbmQgb3RoZXIga2luZCBvZiBpc3N1ZXMuCisjCisjIENoZWNrcyB3ZSBkbzoKKyMgIC1DaGVjayB0aGUgb3duZXJzaGlwIGFuZCBwZXJtaXNzaW9ucworIyAgLUNoZWNrIHRoZSBSVU5USU1FIHBhdGggZm9yIHRoZSAkVE1QRElSCisjICAtQ2hlY2sgaWYgLmxhIGZpbGVzIHdyb25nbHkgcG9pbnQgdG8gd29ya2RpcgorIyAgLUNoZWNrIGlmIC5wYyBmaWxlcyB3cm9uZ2x5IHBvaW50IHRvIHdvcmtkaXIKKyMgIC1DaGVjayBpZiBwYWNrYWdlcyBjb250YWlucyAuZGVidWcgZGlyZWN0b3JpZXMgb3IgLnNvIGZpbGVzCisjICAgd2hlcmUgdGhleSBzaG91bGQgYmUgaW4gLWRldiBvciAtZGJnCisjICAtQ2hlY2sgaWYgY29uZmlnLmxvZyBjb250YWlucyB0cmFjZXMgdG8gYnJva2VuIGF1dG9jb25mIHRlc3RzCisjICAtQ2hlY2sgaW52YWxpZCBjaGFyYWN0ZXJzIChub24tdXRmOCkgb24gc29tZSBwYWNrYWdlIG1ldGFkYXRhCisjICAtRW5zdXJlIHRoYXQgYmluYXJpZXMgaW4gYmFzZV9bYmluZGlyfHNiaW5kaXJ8bGliZGlyXSBkbyBub3QgbGluaworIyAgIGludG8gZXhlY19wcmVmaXgKKyMgIC1DaGVjayB0aGF0IHNjcmlwdHMgaW4gYmFzZV9bYmluZGlyfHNiaW5kaXJ8bGliZGlyXSBkbyBub3QgcmVmZXJlbmNlCisjICAgZmlsZXMgdW5kZXIgZXhlY19wcmVmaXgKKworCisjIHVuc2FmZS1yZWZlcmVuY2VzLWluLWJpbmFyaWVzIHJlcXVpcmVzIHByZWxpbmstcnRsZCBmcm9tCisjIHByZWxpbmstbmF0aXZlLCBidXQgd2UgZG9uJ3Qgd2FudCB0aGlzIERFUEVORFMgZm9yIC1uYXRpdmUgYnVpbGRzCitRQURFUEVORFMgPSAicHJlbGluay1uYXRpdmUiCitRQURFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKK1FBREVQRU5EU19jbGFzcy1uYXRpdmVzZGsgPSAiIgorUUFfU0FORSA9ICJUcnVlIgorCisjIEVsZWN0IHdoZXRoZXIgYSBnaXZlbiB0eXBlIG9mIGVycm9yIGlzIGEgd2FybmluZyBvciBlcnJvciwgdGhleSBtYXkKKyMgaGF2ZSBiZWVuIHNldCBieSBvdGhlciBmaWxlcy4KK1dBUk5fUUEgPz0gImxkZmxhZ3MgdXNlbGVzcy1ycGF0aHMgcnBhdGhzIHN0YXRpY2RldiBsaWJkaXIgeG9yZy1kcml2ZXItYWJpIFwKKyAgICAgICAgICAgIHRleHRyZWwgYWxyZWFkeS1zdHJpcHBlZCBpbmNvbXBhdGlibGUtbGljZW5zZSBmaWxlcy1pbnZhbGlkIFwKKyAgICAgICAgICAgIGluc3RhbGxlZC12cy1zaGlwcGVkIGNvbXBpbGUtaG9zdC1wYXRoIGluc3RhbGwtaG9zdC1wYXRoIFwKKyAgICAgICAgICAgIHBuLW92ZXJyaWRlcyBpbmZvZGlyIGJ1aWxkLWRlcHMgZmlsZS1yZGVwcyBcCisgICAgICAgICAgICB1bmtub3duLWNvbmZpZ3VyZS1vcHRpb24gc3ltbGluay10by1zeXNyb290IG11bHRpbGliIFwKKyAgICAgICAgICAgIGludmFsaWQtcGtnY29uZmlnIGhvc3QtdXNlci1jb250YW1pbmF0ZWQgXAorICAgICAgICAgICAgIgorRVJST1JfUUEgPz0gImRldi1zbyBkZWJ1Zy1kZXBzIGRldi1kZXBzIGRlYnVnLWZpbGVzIGFyY2ggcGtnY29uZmlnIGxhIFwKKyAgICAgICAgICAgIHBlcm1zIGRlcC1jbXAgcGtndmFyY2hlY2sgcGVybS1jb25maWcgcGVybS1saW5lIHBlcm0tbGluayBcCisgICAgICAgICAgICBzcGxpdC1zdHJpcCBwYWNrYWdlcy1saXN0IHBrZ3YtdW5kZWZpbmVkIHZhci11bmRlZmluZWQgXAorICAgICAgICAgICAgdmVyc2lvbi1nb2luZy1iYWNrd2FyZHMgZXhwYW5kZWQtZCBpbnZhbGlkLWNoYXJzIFwKKyAgICAgICAgICAgICIKK0ZBS0VST09UX1FBID0gImhvc3QtdXNlci1jb250YW1pbmF0ZWQiCitGQUtFUk9PVF9RQVtkb2NdID0gIlFBIHRlc3RzIHdoaWNoIG5lZWQgdG8gcnVuIHVuZGVyIGZha2Vyb290LiBJZiBhbnkgXAorZW5hYmxlZCB0ZXN0cyBhcmUgbGlzdGVkIGhlcmUsIHRoZSBkb19wYWNrYWdlX3FhIHRhc2sgd2lsbCBydW4gdW5kZXIgZmFrZXJvb3QuIgorCitBTExfUUEgPSAiJHtXQVJOX1FBfSAke0VSUk9SX1FBfSIKKworVU5LTk9XTl9DT05GSUdVUkVfV0hJVEVMSVNUID89ICItLWVuYWJsZS1ubHMgLS1kaXNhYmxlLW5scyAtLWRpc2FibGUtc2lsZW50LXJ1bGVzIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIC0td2l0aC1saWJ0b29sLXN5c3Jvb3QiCisKKyMKKyMgZGljdGlvbmFyeSBmb3IgZWxmIGhlYWRlcnMKKyMKKyMgZmVlbCBmcmVlIHRvIGFkZCBhbmQgY29ycmVjdC4KKyMKKyMgICAgICAgICAgIFRBUkdFVF9PUyAgVEFSR0VUX0FSQ0ggICBNQUNISU5FLCBPU0FCSSwgQUJJVkVSU0lPTiwgTGl0dGxlIEVuZGlhbiwgMzJiaXQ/CitkZWYgcGFja2FnZV9xYV9nZXRfbWFjaGluZV9kaWN0KCk6CisgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICJkYXJ3aW45IiA6IHsgCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtIiA6ICAgICAgICg0MCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImVhYmkiIDogeworICAgICAgICAgICAgICAgICAgICAgICAgImFybSIgOiAgICAgICAoNDAsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJlbGYiIDogeworICAgICAgICAgICAgICAgICAgICAgICAgImk1ODYiIDogICAgICAoMywgICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAieDg2XzY0IjogICAgICg2MiwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJlcGlwaGFueSI6ICAgKDQ2NDMsICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGludXgiIDogeyAKKyAgICAgICAgICAgICAgICAgICAgICAgICJhYXJjaDY0IiA6ICAgKDE4MywgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgImFhcmNoNjRfYmUiIDooMTgzLCAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtIiA6ICAgICAgICg0MCwgICAgOTcsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcm1lYiI6ICAgICAgKDQwLCAgICA5NywgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgInBvd2VycGMiOiAgICAoMjAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAicG93ZXJwYzY0IjogICgyMSwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpMzg2IjogICAgICAgKCAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImk0ODYiOiAgICAgICAoIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiaTU4NiI6ICAgICAgICggMywgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpNjg2IjogICAgICAgKCAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIng4Nl82NCI6ICAgICAoNjIsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAiaWE2NCI6ICAgICAgICg1MCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhbHBoYSI6ICAgICAgKDM2OTAyLCAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgImhwcGEiOiAgICAgICAoMTUsICAgICAzLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibTY4ayI6ICAgICAgICggNCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzIjogICAgICAgKCA4LCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHNlbCI6ICAgICAoIDgsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwczY0IjogICAgICggOCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzNjRlbCI6ICAgKCA4LCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgInMzOTAiOiAgICAgICAoMjIsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAic2g0IjogICAgICAgICg0MiwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJzcGFyYyI6ICAgICAgKCAyLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pY3JvYmxhemUiOiAgKDE4OSwgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibWljcm9ibGF6ZWViIjooMTg5LCAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaWNyb2JsYXplZWwiOigxODksICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGludXgtdWNsaWJjIiA6IHsgCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtIiA6ICAgICAgICggIDQwLCAgICA5NywgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImFybWViIjogICAgICAoICA0MCwgICAgOTcsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJwb3dlcnBjIjogICAgKCAgMjAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiaTM4NiI6ICAgICAgICggICAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImk0ODYiOiAgICAgICAoICAgMywgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpNTg2IjogICAgICAgKCAgIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiaTY4NiI6ICAgICAgICggICAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIng4Nl82NCI6ICAgICAoICA2MiwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzIjogICAgICAgKCAgIDgsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwc2VsIjogICAgICggICA4LCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHM2NCI6ICAgICAoICAgOCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzNjRlbCI6ICAgKCAgIDgsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAiYXZyMzIiOiAgICAgICg2MzE3LCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgInNoNCI6ICAgICAgICAoNDIsICAgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKworICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGludXgtbXVzbCIgOiB7IAorICAgICAgICAgICAgICAgICAgICAgICAgImFhcmNoNjQiIDogICAoMTgzLCAgICAwLCAgICAwLCAgICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhYXJjaDY0X2JlIiA6KDE4MywgICAgMCwgICAgMCwgICAgICAgICAgICBGYWxzZSwgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtIiA6ICAgICAgICggIDQwLCAgICA5NywgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImFybWViIjogICAgICAoICA0MCwgICAgOTcsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJwb3dlcnBjIjogICAgKCAgMjAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiaTM4NiI6ICAgICAgICggICAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImk0ODYiOiAgICAgICAoICAgMywgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpNTg2IjogICAgICAgKCAgIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiaTY4NiI6ICAgICAgICggICAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIng4Nl82NCI6ICAgICAoICA2MiwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzIjogICAgICAgKCAgIDgsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwc2VsIjogICAgICggICA4LCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHM2NCI6ICAgICAoICAgOCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzNjRlbCI6ICAgKCAgIDgsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJ1Y2xpbnV4LXVjbGliYyIgOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAiYmZpbiI6ICAgICAgICggMTA2LCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgfSwgCisgICAgICAgICAgICAibGludXgtZ251ZWFiaSIgOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtIiA6ICAgICAgICg0MCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcm1lYiIgOiAgICAgKDQwLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGludXgtbXVzbGVhYmkiIDogeworICAgICAgICAgICAgICAgICAgICAgICAgImFybSIgOiAgICAgICAoNDAsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtZWIiIDogICAgICg0MCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxpbnV4LXVjbGliY2VhYmkiIDogeworICAgICAgICAgICAgICAgICAgICAgICAgImFybSIgOiAgICAgICAoNDAsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtZWIiIDogICAgICg0MCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxpbnV4LWdudXNwZSIgOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAicG93ZXJwYyI6ICAgICgyMCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxpbnV4LW11c2xzcGUiIDogeworICAgICAgICAgICAgICAgICAgICAgICAgInBvd2VycGMiOiAgICAoMjAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsaW51eC11Y2xpYmNzcGUiIDogeworICAgICAgICAgICAgICAgICAgICAgICAgInBvd2VycGMiOiAgICAoMjAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsaW51eC1nbnUiIDogICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgInBvd2VycGMiOiAgICAoMjAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAic2g0IjogICAgICAgICg0MiwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxpbnV4LWdudXgzMiIgOiAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAieDg2XzY0IjogICAgICg2MiwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxpbnV4LWdudW4zMiIgOiAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAibWlwczY0IjogICAgICAgKCA4LCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHM2NGVsIjogICAgICggOCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICB9CisKKworZGVmIHBhY2thZ2VfcWFfY2xlYW5fcGF0aChwYXRoLGQpOgorICAgICIiIiBSZW1vdmUgdGhlIGNvbW1vbiBwcmVmaXggZnJvbSB0aGUgcGF0aC4gSW4gdGhpcyBjYXNlIGl0IGlzIHRoZSBUTVBESVIiIiIKKyAgICByZXR1cm4gcGF0aC5yZXBsYWNlKGQuZ2V0VmFyKCdUTVBESVInLFRydWUpLCIiKQorCitkZWYgcGFja2FnZV9xYV93cml0ZV9lcnJvcih0eXBlLCBlcnJvciwgZCk6CisgICAgbG9nZmlsZSA9IGQuZ2V0VmFyKCdRQV9MT0dGSUxFJywgVHJ1ZSkKKyAgICBpZiBsb2dmaWxlOgorICAgICAgICBwID0gZC5nZXRWYXIoJ1AnLCBUcnVlKQorICAgICAgICBmID0gZmlsZSggbG9nZmlsZSwgImErIikKKyAgICAgICAgcHJpbnQgPj4gZiwgIiVzOiAlcyBbJXNdIiAlIChwLCBlcnJvciwgdHlwZSkKKyAgICAgICAgZi5jbG9zZSgpCisKK2RlZiBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcihlcnJvcl9jbGFzcywgZXJyb3JfbXNnLCBkKToKKyAgICBwYWNrYWdlX3FhX3dyaXRlX2Vycm9yKGVycm9yX2NsYXNzLCBlcnJvcl9tc2csIGQpCisgICAgaWYgZXJyb3JfY2xhc3MgaW4gKGQuZ2V0VmFyKCJFUlJPUl9RQSIsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICBiYi5lcnJvcigiUUEgSXNzdWU6ICVzIFslc10iICUgKGVycm9yX21zZywgZXJyb3JfY2xhc3MpKQorICAgICAgICBkLnNldFZhcigiUUFfU0FORSIsIEZhbHNlKQorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBlbGlmIGVycm9yX2NsYXNzIGluIChkLmdldFZhcigiV0FSTl9RQSIsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICBiYi53YXJuKCJRQSBJc3N1ZTogJXMgWyVzXSIgJSAoZXJyb3JfbXNnLCBlcnJvcl9jbGFzcykpCisgICAgZWxzZToKKyAgICAgICAgYmIubm90ZSgiUUEgSXNzdWU6ICVzIFslc10iICUgKGVycm9yX21zZywgZXJyb3JfY2xhc3MpKQorICAgIHJldHVybiBUcnVlCisKK1FBUEFUSFRFU1RbbGliZXhlY10gPSAicGFja2FnZV9xYV9jaGVja19saWJleGVjIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfbGliZXhlYyhwYXRoLG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorCisgICAgIyBTa2lwIHRoZSBjYXNlIHdoZXJlIHRoZSBkZWZhdWx0IGlzIGV4cGxpY2l0bHkgL3Vzci9saWJleGVjCisgICAgbGliZXhlYyA9IGQuZ2V0VmFyKCdsaWJleGVjZGlyJywgVHJ1ZSkKKyAgICBpZiBsaWJleGVjID09ICIvdXNyL2xpYmV4ZWMiOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgaWYgJ2xpYmV4ZWMnIGluIHBhdGguc3BsaXQob3MucGF0aC5zZXApOgorICAgICAgICBtZXNzYWdlc1sibGliZXhlYyJdID0gIiVzOiAlcyBpcyB1c2luZyBsaWJleGVjIHBsZWFzZSByZWxvY2F0ZSB0byAlcyIgJSAobmFtZSwgcGFja2FnZV9xYV9jbGVhbl9wYXRoKHBhdGgsIGQpLCBsaWJleGVjKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHJldHVybiBUcnVlCisKK1FBUEFUSFRFU1RbcnBhdGhzXSA9ICJwYWNrYWdlX3FhX2NoZWNrX3JwYXRoIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfcnBhdGgoZmlsZSxuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBDaGVjayBmb3IgZGFuZ2Vyb3VzIFJQQVRIcworICAgICIiIgorICAgIGlmIG5vdCBlbGY6CisgICAgICAgIHJldHVybgorCisgICAgaWYgb3MucGF0aC5pc2xpbmsoZmlsZSk6CisgICAgICAgIHJldHVybgorCisgICAgYmFkX2RpcnMgPSBbZC5nZXRWYXIoJ0JBU0VfV09SS0RJUicsIFRydWUpLCBkLmdldFZhcignU1RBR0lOR19ESVJfVEFSR0VUJywgVHJ1ZSldCisKKyAgICBwaGRycyA9IGVsZi5ydW5fb2JqZHVtcCgiLXAiLCBkKQorCisgICAgaW1wb3J0IHJlCisgICAgcnBhdGhfcmUgPSByZS5jb21waWxlKCJccytSUEFUSFxzKyguKikiKQorICAgIGZvciBsaW5lIGluIHBoZHJzLnNwbGl0KCJcbiIpOgorICAgICAgICBtID0gcnBhdGhfcmUubWF0Y2gobGluZSkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHJwYXRoID0gbS5ncm91cCgxKQorICAgICAgICAgICAgZm9yIGRpciBpbiBiYWRfZGlyczoKKyAgICAgICAgICAgICAgICBpZiBkaXIgaW4gcnBhdGg6CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzWyJycGF0aHMiXSA9ICJwYWNrYWdlICVzIGNvbnRhaW5zIGJhZCBSUEFUSCAlcyBpbiBmaWxlICVzIiAlIChuYW1lLCBycGF0aCwgZmlsZSkKKworUUFQQVRIVEVTVFt1c2VsZXNzLXJwYXRoc10gPSAicGFja2FnZV9xYV9jaGVja191c2VsZXNzX3JwYXRocyIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX3VzZWxlc3NfcnBhdGhzKGZpbGUsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIGZvciBSUEFUSHMgdGhhdCBhcmUgdXNlbGVzcyBidXQgbm90IGRhbmdlcm91cworICAgICIiIgorICAgIGRlZiBycGF0aF9lcShhLCBiKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGgubm9ybXBhdGgoYSkgPT0gb3MucGF0aC5ub3JtcGF0aChiKQorCisgICAgaWYgbm90IGVsZjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBvcy5wYXRoLmlzbGluayhmaWxlKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBsaWJkaXIgPSBkLmdldFZhcigibGliZGlyIiwgVHJ1ZSkKKyAgICBiYXNlX2xpYmRpciA9IGQuZ2V0VmFyKCJiYXNlX2xpYmRpciIsIFRydWUpCisKKyAgICBwaGRycyA9IGVsZi5ydW5fb2JqZHVtcCgiLXAiLCBkKQorCisgICAgaW1wb3J0IHJlCisgICAgcnBhdGhfcmUgPSByZS5jb21waWxlKCJccytSUEFUSFxzKyguKikiKQorICAgIGZvciBsaW5lIGluIHBoZHJzLnNwbGl0KCJcbiIpOgorICAgICAgICBtID0gcnBhdGhfcmUubWF0Y2gobGluZSkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHJwYXRoID0gbS5ncm91cCgxKQorICAgICAgICAgICAgaWYgcnBhdGhfZXEocnBhdGgsIGxpYmRpcikgb3IgcnBhdGhfZXEocnBhdGgsIGJhc2VfbGliZGlyKToKKyAgICAgICAgICAgICAgICAjIFRoZSBkeW5hbWljIGxpbmtlciBzZWFyY2hlcyBib3RoIHRoZXNlIHBsYWNlcyBhbnl3YXkuICBUaGVyZSBpcyBubyBwb2ludCBpbgorICAgICAgICAgICAgICAgICMgbG9va2luZyB0aGVyZSBhZ2Fpbi4KKyAgICAgICAgICAgICAgICBtZXNzYWdlc1sidXNlbGVzcy1ycGF0aHMiXSA9ICIlczogJXMgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIICVzIiAlIChuYW1lLCBwYWNrYWdlX3FhX2NsZWFuX3BhdGgoZmlsZSwgZCksIHJwYXRoKQorCitRQVBBVEhURVNUW2Rldi1zb10gPSAicGFja2FnZV9xYV9jaGVja19kZXYiCitkZWYgcGFja2FnZV9xYV9jaGVja19kZXYocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgZm9yICIuc28iIGxpYnJhcnkgc3ltbGlua3MgaW4gbm9uLWRldiBwYWNrYWdlcworICAgICIiIgorCisgICAgaWYgbm90IG5hbWUuZW5kc3dpdGgoIi1kZXYiKSBhbmQgbm90IG5hbWUuZW5kc3dpdGgoIi1kYmciKSBhbmQgbm90IG5hbWUuZW5kc3dpdGgoIi1wdGVzdCIpIGFuZCBub3QgbmFtZS5zdGFydHN3aXRoKCJuYXRpdmVzZGstIikgYW5kIHBhdGguZW5kc3dpdGgoIi5zbyIpIGFuZCBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgbWVzc2FnZXNbImRldi1zbyJdID0gIm5vbiAtZGV2Ly1kYmcvbmF0aXZlc2RrLSBwYWNrYWdlIGNvbnRhaW5zIHN5bWxpbmsgLnNvOiAlcyBwYXRoICclcyciICUgXAorICAgICAgICAgICAgICAgICAobmFtZSwgcGFja2FnZV9xYV9jbGVhbl9wYXRoKHBhdGgsZCkpCisKK1FBUEFUSFRFU1Rbc3RhdGljZGV2XSA9ICJwYWNrYWdlX3FhX2NoZWNrX3N0YXRpY2RldiIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX3N0YXRpY2RldihwYXRoLCBuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBDaGVjayBmb3IgIi5hIiBsaWJyYXJ5IGluIG5vbi1zdGF0aWNkZXYgcGFja2FnZXMKKyAgICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgZXhjZXB0aW9ucyB0byB0aGlzIHJ1bGUsIC1waWMgcGFja2FnZXMgY2FuIGNvbnRhaW4KKyAgICBzdGF0aWMgbGlicmFyaWVzLCB0aGUgX25vbnNoYXJlZC5hIGJlbG9uZyB3aXRoIHRoZWlyIC1kZXYgcGFja2FnZXMgYW5kCisgICAgbGliZ2NjLmEsIGxpYmdjb3YuYSB3aWxsIGJlIHNraXBwZWQgaW4gdGhlaXIgcGFja2FnZXMKKyAgICAiIiIKKworICAgIGlmIG5vdCBuYW1lLmVuZHN3aXRoKCItcGljIikgYW5kIG5vdCBuYW1lLmVuZHN3aXRoKCItc3RhdGljZGV2IikgYW5kIG5vdCBuYW1lLmVuZHN3aXRoKCItcHRlc3QiKSBhbmQgcGF0aC5lbmRzd2l0aCgiLmEiKSBhbmQgbm90IHBhdGguZW5kc3dpdGgoIl9ub25zaGFyZWQuYSIpOgorICAgICAgICBtZXNzYWdlc1sic3RhdGljZGV2Il0gPSAibm9uIC1zdGF0aWNkZXYgcGFja2FnZSBjb250YWlucyBzdGF0aWMgLmEgbGlicmFyeTogJXMgcGF0aCAnJXMnIiAlIFwKKyAgICAgICAgICAgICAgICAgKG5hbWUsIHBhY2thZ2VfcWFfY2xlYW5fcGF0aChwYXRoLGQpKQorCitkZWYgcGFja2FnZV9xYV9jaGVja19saWJkaXIoZCk6CisgICAgIiIiCisgICAgQ2hlY2sgZm9yIHdyb25nIGxpYnJhcnkgaW5zdGFsbGF0aW9uIHBhdGhzLiBGb3IgaW5zdGFuY2UsIGNhdGNoCisgICAgcmVjaXBlcyBpbnN0YWxsaW5nIC9saWIvYmFyLnNvIHdoZW4gJHtiYXNlX2xpYmRpcn09ImxpYjMyIiBvcgorICAgIGluc3RhbGxpbmcgaW4gL3Vzci9saWI2NCB3aGVuICR7bGliZGlyfT0iL3Vzci9saWIiCisgICAgIiIiCisgICAgaW1wb3J0IHJlCisKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIGJhc2VfbGliZGlyID0gZC5nZXRWYXIoImJhc2VfbGliZGlyIixUcnVlKSArIG9zLnNlcAorICAgIGxpYmRpciA9IGQuZ2V0VmFyKCJsaWJkaXIiLCBUcnVlKSArIG9zLnNlcAorICAgIGV4ZWNfcHJlZml4ID0gZC5nZXRWYXIoImV4ZWNfcHJlZml4IiwgVHJ1ZSkgKyBvcy5zZXAKKworICAgIG1lc3NhZ2VzID0gW10KKworICAgIGxpYl9yZSA9IHJlLmNvbXBpbGUoIl4vbGliLitcLnNvKFwuLispPyQiKQorICAgIGV4ZWNfcmUgPSByZS5jb21waWxlKCJeJXMuKi9saWIuK1wuc28oXC4uKyk/JCIgJSBleGVjX3ByZWZpeCkKKworICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBrZ2Rlc3QpOgorICAgICAgICBpZiByb290ID09IHBrZ2Rlc3Q6CisgICAgICAgICAgICAjIFNraXAgc3ViZGlyZWN0b3JpZXMgZm9yIGFueSBwYWNrYWdlcyB3aXRoIGxpYmRpciBpbiBJTlNBTkVfU0tJUAorICAgICAgICAgICAgc2tpcHBhY2thZ2VzID0gW10KKyAgICAgICAgICAgIGZvciBwYWNrYWdlIGluIGRpcnM6CisgICAgICAgICAgICAgICAgaWYgJ2xpYmRpcicgaW4gKGQuZ2V0VmFyKCdJTlNBTkVfU0tJUF8nICsgcGFja2FnZSwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIlBhY2thZ2UgJXMgc2tpcHBpbmcgbGliZGlyIFFBIHRlc3QiICUgKHBhY2thZ2UpKQorICAgICAgICAgICAgICAgICAgICBza2lwcGFja2FnZXMuYXBwZW5kKHBhY2thZ2UpCisgICAgICAgICAgICBmb3IgcGFja2FnZSBpbiBza2lwcGFja2FnZXM6CisgICAgICAgICAgICAgICAgZGlycy5yZW1vdmUocGFja2FnZSkKKyAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4ocm9vdCwgZmlsZSkKKyAgICAgICAgICAgIHJlbF9wYXRoID0gb3MucGF0aC5yZWxwYXRoKGZ1bGxfcGF0aCwgcGtnZGVzdCkKKyAgICAgICAgICAgIGlmIG9zLnNlcCBpbiByZWxfcGF0aDoKKyAgICAgICAgICAgICAgICBwYWNrYWdlLCByZWxfcGF0aCA9IHJlbF9wYXRoLnNwbGl0KG9zLnNlcCwgMSkKKyAgICAgICAgICAgICAgICByZWxfcGF0aCA9IG9zLnNlcCArIHJlbF9wYXRoCisgICAgICAgICAgICAgICAgaWYgbGliX3JlLm1hdGNoKHJlbF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgYmFzZV9saWJkaXIgbm90IGluIHJlbF9wYXRoOgorICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXMuYXBwZW5kKCIlczogZm91bmQgbGlicmFyeSBpbiB3cm9uZyBsb2NhdGlvbjogJXMiICUgKHBhY2thZ2UsIHJlbF9wYXRoKSkKKyAgICAgICAgICAgICAgICBpZiBleGVjX3JlLm1hdGNoKHJlbF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbGliZGlyIG5vdCBpbiByZWxfcGF0aDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzLmFwcGVuZCgiJXM6IGZvdW5kIGxpYnJhcnkgaW4gd3JvbmcgbG9jYXRpb246ICVzIiAlIChwYWNrYWdlLCByZWxfcGF0aCkpCisKKyAgICBpZiBtZXNzYWdlczoKKyAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImxpYmRpciIsICJcbiIuam9pbihtZXNzYWdlcyksIGQpCisKK1FBUEFUSFRFU1RbZGVidWctZmlsZXNdID0gInBhY2thZ2VfcWFfY2hlY2tfZGJnIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfZGJnKHBhdGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIGZvciAiLmRlYnVnIiBmaWxlcyBvciBkaXJlY3RvcmllcyBvdXRzaWRlIG9mIHRoZSBkYmcgcGFja2FnZQorICAgICIiIgorCisgICAgaWYgbm90ICItZGJnIiBpbiBuYW1lIGFuZCBub3QgIi1wdGVzdCIgaW4gbmFtZToKKyAgICAgICAgaWYgJy5kZWJ1ZycgaW4gcGF0aC5zcGxpdChvcy5wYXRoLnNlcCk6CisgICAgICAgICAgICBtZXNzYWdlc1siZGVidWctZmlsZXMiXSA9ICJub24gZGVidWcgcGFja2FnZSBjb250YWlucyAuZGVidWcgZGlyZWN0b3J5OiAlcyBwYXRoICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgIChuYW1lLCBwYWNrYWdlX3FhX2NsZWFuX3BhdGgocGF0aCxkKSkKKworUUFQQVRIVEVTVFtwZXJtc10gPSAicGFja2FnZV9xYV9jaGVja19wZXJtIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfcGVybShwYXRoLG5hbWUsZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgdGhlIHBlcm1pc3Npb24gb2YgZmlsZXMKKyAgICAiIiIKKyAgICByZXR1cm4KKworUUFQQVRIVEVTVFt1bnNhZmUtcmVmZXJlbmNlcy1pbi1iaW5hcmllc10gPSAicGFja2FnZV9xYV9jaGVja191bnNhZmVfcmVmZXJlbmNlc19pbl9iaW5hcmllcyIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX3Vuc2FmZV9yZWZlcmVuY2VzX2luX2JpbmFyaWVzKHBhdGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIEVuc3VyZSBiaW5hcmllcyBpbiBiYXNlX1tiaW5kaXJ8c2JpbmRpcnxsaWJkaXJdIGRvIG5vdCBsaW5rIHRvIGZpbGVzIHVuZGVyIGV4ZWNfcHJlZml4CisgICAgIiIiCisgICAgaWYgdW5zYWZlX3JlZmVyZW5jZXNfc2tpcHBhYmxlKHBhdGgsIG5hbWUsIGQpOgorICAgICAgICByZXR1cm4KKworICAgIGlmIGVsZjoKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MgYXMgc3ViCisgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgICAgICBleGVjX3ByZWZpeCA9IGQuZ2V0VmFyKCdleGVjX3ByZWZpeCcsIFRydWUpCisgICAgICAgIHN5c3Jvb3RfcGF0aCA9IGQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9UQVJHRVQnLCBUcnVlKQorICAgICAgICBzeXNyb290X3BhdGhfdXNyID0gc3lzcm9vdF9wYXRoICsgZXhlY19wcmVmaXgKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsZGRfb3V0cHV0ID0gYmIucHJvY2Vzcy5Qb3BlbihbInByZWxpbmstcnRsZCIsICItLXJvb3QiLCBzeXNyb290X3BhdGgsIHBhdGhdLCBzdGRvdXQ9c3ViLlBJUEUpLnN0ZG91dC5yZWFkKCkKKyAgICAgICAgZXhjZXB0IGJiLnByb2Nlc3MuQ21kRXJyb3I6CisgICAgICAgICAgICBlcnJvcl9tc2cgPSBwbiArICI6IHByZWxpbmstcnRsZCBhYm9ydGVkIHdoZW4gcHJvY2Vzc2luZyAlcyIgJSBwYXRoCisgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigidW5zYWZlLXJlZmVyZW5jZXMtaW4tYmluYXJpZXMiLCBlcnJvcl9tc2csIGQpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBzeXNyb290X3BhdGhfdXNyIGluIGxkZF9vdXRwdXQ6CisgICAgICAgICAgICBsZGRfb3V0cHV0ID0gbGRkX291dHB1dC5yZXBsYWNlKHN5c3Jvb3RfcGF0aCwgIiIpCisKKyAgICAgICAgICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgICAgICAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisKKyAgICAgICAgICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgc2hvcnRfcGF0aCA9IHBhdGgucmVwbGFjZSgnJXMvJXMnICUgKHBrZ2Rlc3QsIHBhY2thZ2UpLCAiIiwgMSkKKyAgICAgICAgICAgICAgICBpZiAoc2hvcnRfcGF0aCAhPSBwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgYmFzZV9lcnIgPSBwbiArICI6ICVzLCBpbnN0YWxsZWQgaW4gdGhlIGJhc2VfcHJlZml4LCByZXF1aXJlcyBhIHNoYXJlZCBsaWJyYXJ5IHVuZGVyIGV4ZWNfcHJlZml4ICglcykiICUgKHNob3J0X3BhdGgsIGV4ZWNfcHJlZml4KQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGRkX291dHB1dC5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICBpZiBleGVjX3ByZWZpeCBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiJXM6ICVzIiAlIChiYXNlX2VyciwgbGluZS5zdHJpcCgpKQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigidW5zYWZlLXJlZmVyZW5jZXMtaW4tYmluYXJpZXMiLCBlcnJvcl9tc2csIGQpCisKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCitRQVBBVEhURVNUW3Vuc2FmZS1yZWZlcmVuY2VzLWluLXNjcmlwdHNdID0gInBhY2thZ2VfcWFfY2hlY2tfdW5zYWZlX3JlZmVyZW5jZXNfaW5fc2NyaXB0cyIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX3Vuc2FmZV9yZWZlcmVuY2VzX2luX3NjcmlwdHMocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgV2FybiBpZiBzY3JpcHRzIGluIGJhc2VfW2JpbmRpcnxzYmluZGlyfGxpYmRpcl0gcmVmZXJlbmNlIGZpbGVzIHVuZGVyIGV4ZWNfcHJlZml4CisgICAgIiIiCisgICAgaWYgdW5zYWZlX3JlZmVyZW5jZXNfc2tpcHBhYmxlKHBhdGgsIG5hbWUsIGQpOgorICAgICAgICByZXR1cm4KKworICAgIGlmIG5vdCBlbGY6CisgICAgICAgIGltcG9ydCBzdGF0CisgICAgICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgICAgICAjIEVuc3VyZSB3ZSdyZSBjaGVja2luZyBhbiBleGVjdXRhYmxlIHNjcmlwdAorICAgICAgICBzdGF0aW5mbyA9IG9zLnN0YXQocGF0aCkKKyAgICAgICAgaWYgYm9vbChzdGF0aW5mby5zdF9tb2RlICYgc3RhdC5TX0lYVVNSKToKKyAgICAgICAgICAgICMgZ3JlcCBzaGVsbCBzY3JpcHRzIGZvciBwb3NzaWJsZSByZWZlcmVuY2VzIHRvIC9leGVjX3ByZWZpeC8KKyAgICAgICAgICAgIGV4ZWNfcHJlZml4ID0gZC5nZXRWYXIoJ2V4ZWNfcHJlZml4JywgVHJ1ZSkKKyAgICAgICAgICAgIHN0YXRlbWVudCA9ICJncmVwIC1lICclcy8nICVzID4gL2Rldi9udWxsIiAlIChleGVjX3ByZWZpeCwgcGF0aCkKKyAgICAgICAgICAgIGlmIHN1YnByb2Nlc3MuY2FsbChzdGF0ZW1lbnQsIHNoZWxsPVRydWUpID09IDA6CisgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gcG4gKyAiOiBGb3VuZCBhIHJlZmVyZW5jZSB0byAlcy8gaW4gJXMiICUgKGV4ZWNfcHJlZml4LCBwYXRoKQorICAgICAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJ1bnNhZmUtcmVmZXJlbmNlcy1pbi1zY3JpcHRzIiwgZXJyb3JfbXNnLCBkKQorICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICJTaGVsbCBzY3JpcHRzIGluIGJhc2VfYmluZGlyIGFuZCBiYXNlX3NiaW5kaXIgc2hvdWxkIG5vdCByZWZlcmVuY2UgYW55dGhpbmcgaW4gZXhlY19wcmVmaXgiCisgICAgICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInVuc2FmZS1yZWZlcmVuY2VzLWluLXNjcmlwdHMiLCBlcnJvcl9tc2csIGQpCisKK2RlZiB1bnNhZmVfcmVmZXJlbmNlc19za2lwcGFibGUocGF0aCwgbmFtZSwgZCk6CisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCk6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBpZiAiLWRiZyIgaW4gbmFtZSBvciAiLWRldiIgaW4gbmFtZToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgICMgT3RoZXIgcGFja2FnZSBuYW1lcyB0byBza2lwOgorICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgia2VybmVsLW1vZHVsZS0iKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgICMgU2tpcCBzeW1saW5rcworICAgIGlmIG9zLnBhdGguaXNsaW5rKHBhdGgpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIyBTa2lwIHVudXN1YWwgcm9vdGZzIGxheW91dHMgd2hpY2ggbWFrZSB0aGVzZSB0ZXN0cyBpcnJlbGV2YW50CisgICAgZXhlY19wcmVmaXggPSBkLmdldFZhcignZXhlY19wcmVmaXgnLCBUcnVlKQorICAgIGlmIGV4ZWNfcHJlZml4ID09ICIiOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBwa2dkZXN0ID0gcGtnZGVzdCArICIvIiArIG5hbWUKKyAgICBwa2dkZXN0ID0gb3MucGF0aC5hYnNwYXRoKHBrZ2Rlc3QpCisgICAgYmFzZV9iaW5kaXIgPSBwa2dkZXN0ICsgZC5nZXRWYXIoJ2Jhc2VfYmluZGlyJywgVHJ1ZSkKKyAgICBiYXNlX3NiaW5kaXIgPSBwa2dkZXN0ICsgZC5nZXRWYXIoJ2Jhc2Vfc2JpbmRpcicsIFRydWUpCisgICAgYmFzZV9saWJkaXIgPSBwa2dkZXN0ICsgZC5nZXRWYXIoJ2Jhc2VfbGliZGlyJywgVHJ1ZSkKKyAgICBiaW5kaXIgPSBwa2dkZXN0ICsgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpCisgICAgc2JpbmRpciA9IHBrZ2Rlc3QgKyBkLmdldFZhcignc2JpbmRpcicsIFRydWUpCisgICAgbGliZGlyID0gcGtnZGVzdCArIGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKQorCisgICAgaWYgYmFzZV9iaW5kaXIgPT0gYmluZGlyIGFuZCBiYXNlX3NiaW5kaXIgPT0gc2JpbmRpciBhbmQgYmFzZV9saWJkaXIgPT0gbGliZGlyOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIyBTa2lwIGZpbGVzIG5vdCBpbiBiYXNlX1tiaW5kaXJ8c2JpbmRpcnxsaWJkaXJdCisgICAgcGF0aCA9IG9zLnBhdGguYWJzcGF0aChwYXRoKQorICAgIGlmIG5vdCAoYmFzZV9iaW5kaXIgaW4gcGF0aCBvciBiYXNlX3NiaW5kaXIgaW4gcGF0aCBvciBiYXNlX2xpYmRpciBpbiBwYXRoKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIHJldHVybiBGYWxzZQorCitRQVBBVEhURVNUW2FyY2hdID0gInBhY2thZ2VfcWFfY2hlY2tfYXJjaCIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX2FyY2gocGF0aCxuYW1lLGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIGlmIGFyY2hzIGFyZSBjb21wYXRpYmxlCisgICAgIiIiCisgICAgaWYgbm90IGVsZjoKKyAgICAgICAgcmV0dXJuCisKKyAgICB0YXJnZXRfb3MgICA9IGQuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKQorICAgIHRhcmdldF9hcmNoID0gZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSkKKyAgICBwcm92aWRlcyA9IGQuZ2V0VmFyKCdQUk9WSURFUycsIFRydWUpCisgICAgYnBuID0gZC5nZXRWYXIoJ0JQTicsIFRydWUpCisKKyAgICBpZiB0YXJnZXRfYXJjaCA9PSAiYWxsYXJjaCI6CisgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgbWVzc2FnZXNbImFyY2giXSA9IHBuICsgIjogUmVjaXBlIGluaGVyaXRzIHRoZSBhbGxhcmNoIGNsYXNzLCBidXQgaGFzIHBhY2thZ2VkIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBiaW5hcmllcyIKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIEZJWE1FOiBDcm9zcyBwYWNrYWdlIGNvbmZ1c2UgdGhpcyBjaGVjaywgc28ganVzdCBza2lwIHRoZW0KKyAgICBmb3IgcyBpbiBbJ2Nyb3NzJywgJ25hdGl2ZXNkaycsICdjcm9zcy1jYW5hZGlhbiddOgorICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKHMsIGQpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAjIGF2b2lkIGZvbGxvd2luZyBsaW5rcyB0byAvdXNyL2JpbiAoZS5nLiBvbiB1ZGV2IGJ1aWxkcykKKyAgICAjIHdlIHdpbGwgY2hlY2sgdGhlIGZpbGVzIHBvaW50ZWQgdG8gYW55d2F5Li4uCisgICAgaWYgb3MucGF0aC5pc2xpbmsocGF0aCk6CisgICAgICAgIHJldHVybgorCisgICAgI2lmIHRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24sIHRoZW4gZml4IHRoZSBkaWN0IGFib3ZlCisgICAgKG1hY2hpbmUsIG9zYWJpLCBhYml2ZXJzaW9uLCBsaXR0bGVlbmRpYW4sIGJpdHMpIFwKKyAgICAgICAgPSBwYWNrYWdlX3FhX2dldF9tYWNoaW5lX2RpY3QoKVt0YXJnZXRfb3NdW3RhcmdldF9hcmNoXQorCisgICAgIyBDaGVjayB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBlbmRpYW5uZXMgb2YgdGhlIGJpbmFyeQorICAgIGlmIG5vdCAoKG1hY2hpbmUgPT0gZWxmLm1hY2hpbmUoKSkgb3IgXAorICAgICAgICAoKCgidmlydHVhbC9rZXJuZWwiIGluIHByb3ZpZGVzKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJtb2R1bGUiLCBkKSApIGFuZCAodGFyZ2V0X29zID09ICJsaW51eC1nbnV4MzIiIG9yIHRhcmdldF9vcyA9PSAibGludXgtZ251bjMyIikpKToKKyAgICAgICAgbWVzc2FnZXNbImFyY2giXSA9ICJBcmNoaXRlY3R1cmUgZGlkIG5vdCBtYXRjaCAoJWQgdG8gJWQpIG9uICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgKG1hY2hpbmUsIGVsZi5tYWNoaW5lKCksIHBhY2thZ2VfcWFfY2xlYW5fcGF0aChwYXRoLGQpKQorICAgIGVsaWYgbm90ICgoYml0cyA9PSBlbGYuYWJpU2l6ZSgpKSBvciAgXAorICAgICAgICAoKCgidmlydHVhbC9rZXJuZWwiIGluIHByb3ZpZGVzKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJtb2R1bGUiLCBkKSApIGFuZCAodGFyZ2V0X29zID09ICJsaW51eC1nbnV4MzIiIG9yIHRhcmdldF9vcyA9PSAibGludXgtZ251bjMyIikpKToKKyAgICAgICAgbWVzc2FnZXNbImFyY2giXSA9ICJCaXQgc2l6ZSBkaWQgbm90IG1hdGNoICglZCB0byAlZCkgJXMgb24gJXMiICUgXAorICAgICAgICAgICAgICAgICAoYml0cywgZWxmLmFiaVNpemUoKSwgYnBuLCBwYWNrYWdlX3FhX2NsZWFuX3BhdGgocGF0aCxkKSkKKyAgICBlbGlmIG5vdCBsaXR0bGVlbmRpYW4gPT0gZWxmLmlzTGl0dGxlRW5kaWFuKCk6CisgICAgICAgIG1lc3NhZ2VzWyJhcmNoIl0gPSAiRW5kaWFubmVzIGRpZCBub3QgbWF0Y2ggKCVkIHRvICVkKSBvbiAlcyIgJSBcCisgICAgICAgICAgICAgICAgIChsaXR0bGVlbmRpYW4sIGVsZi5pc0xpdHRsZUVuZGlhbigpLCBwYWNrYWdlX3FhX2NsZWFuX3BhdGgocGF0aCxkKSkKKworUUFQQVRIVEVTVFtkZXNrdG9wXSA9ICJwYWNrYWdlX3FhX2NoZWNrX2Rlc2t0b3AiCitkZWYgcGFja2FnZV9xYV9jaGVja19kZXNrdG9wKHBhdGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIFJ1biBhbGwgZGVza3RvcCBmaWxlcyB0aHJvdWdoIGRlc2t0b3AtZmlsZS12YWxpZGF0ZS4KKyAgICAiIiIKKyAgICBpZiBwYXRoLmVuZHN3aXRoKCIuZGVza3RvcCIpOgorICAgICAgICBkZXNrdG9wX2ZpbGVfdmFsaWRhdGUgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ1NUQUdJTkdfQklORElSX05BVElWRScsVHJ1ZSksJ2Rlc2t0b3AtZmlsZS12YWxpZGF0ZScpCisgICAgICAgIG91dHB1dCA9IG9zLnBvcGVuKCIlcyAlcyIgJSAoZGVza3RvcF9maWxlX3ZhbGlkYXRlLCBwYXRoKSkKKyAgICAgICAgIyBUaGlzIG9ubHkgcHJvZHVjZXMgb3V0cHV0IG9uIGVycm9ycworICAgICAgICBmb3IgbCBpbiBvdXRwdXQ6CisgICAgICAgICAgICBtZXNzYWdlc1siZGVza3RvcCJdID0gIkRlc2t0b3AgZmlsZSBpc3N1ZTogIiArIGwuc3RyaXAoKQorCitRQVBBVEhURVNUW3RleHRyZWxdID0gInBhY2thZ2VfcWFfdGV4dHJlbCIKK2RlZiBwYWNrYWdlX3FhX3RleHRyZWwocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgaWYgdGhlIGJpbmFyeSBjb250YWlucyByZWxvY2F0aW9ucyBpbiAudGV4dAorICAgICIiIgorCisgICAgaWYgbm90IGVsZjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBwaGRycyA9IGVsZi5ydW5fb2JqZHVtcCgiLXAiLCBkKQorICAgIHNhbmUgPSBUcnVlCisKKyAgICBpbXBvcnQgcmUKKyAgICB0ZXh0cmVsX3JlID0gcmUuY29tcGlsZSgiXHMrVEVYVFJFTFxzKyIpCisgICAgZm9yIGxpbmUgaW4gcGhkcnMuc3BsaXQoIlxuIik6CisgICAgICAgIGlmIHRleHRyZWxfcmUubWF0Y2gobGluZSk6CisgICAgICAgICAgICBzYW5lID0gRmFsc2UKKworICAgIGlmIG5vdCBzYW5lOgorICAgICAgICBtZXNzYWdlc1sidGV4dHJlbCJdID0gIkVMRiBiaW5hcnkgJyVzJyBoYXMgcmVsb2NhdGlvbnMgaW4gLnRleHQiICUgcGF0aAorCitRQVBBVEhURVNUW2xkZmxhZ3NdID0gInBhY2thZ2VfcWFfaGFzaF9zdHlsZSIKK2RlZiBwYWNrYWdlX3FhX2hhc2hfc3R5bGUocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgaWYgdGhlIGJpbmFyeSBoYXMgdGhlIHJpZ2h0IGhhc2ggc3R5bGUuLi4KKyAgICAiIiIKKworICAgIGlmIG5vdCBlbGY6CisgICAgICAgIHJldHVybgorCisgICAgaWYgb3MucGF0aC5pc2xpbmsocGF0aCk6CisgICAgICAgIHJldHVybgorCisgICAgZ251X2hhc2ggPSAiLS1oYXNoLXN0eWxlPWdudSIgaW4gZC5nZXRWYXIoJ0xERkxBR1MnLCBUcnVlKQorICAgIGlmIG5vdCBnbnVfaGFzaDoKKyAgICAgICAgZ251X2hhc2ggPSAiLS1oYXNoLXN0eWxlPWJvdGgiIGluIGQuZ2V0VmFyKCdMREZMQUdTJywgVHJ1ZSkKKyAgICBpZiBub3QgZ251X2hhc2g6CisgICAgICAgIHJldHVybgorCisgICAgc2FuZSA9IEZhbHNlCisgICAgaGFzX3N5bXMgPSBGYWxzZQorCisgICAgcGhkcnMgPSBlbGYucnVuX29iamR1bXAoIi1wIiwgZCkKKworICAgICMgSWYgdGhpcyBiaW5hcnkgaGFzIHN5bWJvbHMsIHdlIGV4cGVjdCBpdCB0byBoYXZlIEdOVV9IQVNIIHRvby4KKyAgICBmb3IgbGluZSBpbiBwaGRycy5zcGxpdCgiXG4iKToKKyAgICAgICAgaWYgIlNZTVRBQiIgaW4gbGluZToKKyAgICAgICAgICAgIGhhc19zeW1zID0gVHJ1ZQorICAgICAgICBpZiAiR05VX0hBU0giIGluIGxpbmU6CisgICAgICAgICAgICBzYW5lID0gVHJ1ZQorICAgICAgICBpZiAiW21pcHMzMl0iIGluIGxpbmUgb3IgIlttaXBzNjRdIiBpbiBsaW5lOgorICAgICAgICAgICAgc2FuZSA9IFRydWUKKworICAgIGlmIGhhc19zeW1zIGFuZCBub3Qgc2FuZToKKyAgICAgICAgbWVzc2FnZXNbImxkZmxhZ3MiXSA9ICJObyBHTlVfSEFTSCBpbiB0aGUgZWxmIGJpbmFyeTogJyVzJyIgJSBwYXRoCisKKworUUFQQVRIVEVTVFtidWlsZHBhdGhzXSA9ICJwYWNrYWdlX3FhX2NoZWNrX2J1aWxkcGF0aHMiCitkZWYgcGFja2FnZV9xYV9jaGVja19idWlsZHBhdGhzKHBhdGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIGZvciBidWlsZCBwYXRocyBpbnNpZGUgdGFyZ2V0IGZpbGVzIGFuZCBlcnJvciBpZiBub3QgZm91bmQgaW4gdGhlIHdoaXRlbGlzdAorICAgICIiIgorICAgICMgSWdub3JlIC5kZWJ1ZyBmaWxlcywgbm90IGludGVyZXN0aW5nCisgICAgaWYgcGF0aC5maW5kKCIuZGVidWciKSAhPSAtMToKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIElnbm9yZSBzeW1saW5rcworICAgIGlmIG9zLnBhdGguaXNsaW5rKHBhdGgpOgorICAgICAgICByZXR1cm4KKworICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorICAgIHdpdGggb3BlbihwYXRoKSBhcyBmOgorICAgICAgICBmaWxlX2NvbnRlbnQgPSBmLnJlYWQoKQorICAgICAgICBpZiB0bXBkaXIgaW4gZmlsZV9jb250ZW50OgorICAgICAgICAgICAgbWVzc2FnZXNbImJ1aWxkcGF0aHMiXSA9ICJGaWxlICVzIGluIHBhY2thZ2UgY29udGFpbmVkIHJlZmVyZW5jZSB0byB0bXBkaXIiICUgcGFja2FnZV9xYV9jbGVhbl9wYXRoKHBhdGgsZCkKKworCitRQVBBVEhURVNUW3hvcmctZHJpdmVyLWFiaV0gPSAicGFja2FnZV9xYV9jaGVja194b3JnX2RyaXZlcl9hYmkiCitkZWYgcGFja2FnZV9xYV9jaGVja194b3JnX2RyaXZlcl9hYmkocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgdGhhdCBhbGwgcGFja2FnZXMgY29udGFpbmluZyBYb3JnIGRyaXZlcnMgaGF2ZSBBQkkgZGVwZW5kZW5jaWVzCisgICAgIiIiCisKKyAgICAjIFNraXAgZGV2LCBkYmcgb3IgbmF0aXZlc2RrIHBhY2thZ2VzCisgICAgaWYgbmFtZS5lbmRzd2l0aCgiLWRldiIpIG9yIG5hbWUuZW5kc3dpdGgoIi1kYmciKSBvciBuYW1lLnN0YXJ0c3dpdGgoIm5hdGl2ZXNkay0iKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkcml2ZXJkaXIgPSBkLmV4cGFuZCgiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9kcml2ZXJzLyIpCisgICAgaWYgZHJpdmVyZGlyIGluIHBhdGggYW5kIHBhdGguZW5kc3dpdGgoIi5zbyIpOgorICAgICAgICBtbHByZWZpeCA9IGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpIG9yICcnCisgICAgICAgIGZvciByZGVwIGluIGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhkLmdldFZhcignUkRFUEVORFNfJyArIG5hbWUsIFRydWUpIG9yICIiKToKKyAgICAgICAgICAgIGlmIHJkZXAuc3RhcnRzd2l0aCgiJXN4b3JnLWFiaS0iICUgbWxwcmVmaXgpOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBtZXNzYWdlc1sieG9yZy1kcml2ZXItYWJpIl0gPSAiUGFja2FnZSAlcyBjb250YWlucyBYb3JnIGRyaXZlciAoJXMpIGJ1dCBubyB4b3JnLWFiaS0gZGVwZW5kZW5jaWVzIiAlIChuYW1lLCBvcy5wYXRoLmJhc2VuYW1lKHBhdGgpKQorCitRQVBBVEhURVNUW2luZm9kaXJdID0gInBhY2thZ2VfcWFfY2hlY2tfaW5mb2RpciIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX2luZm9kaXIocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgdGhhdCAvdXNyL3NoYXJlL2luZm8vZGlyIGlzbid0IHNoaXBwZWQgaW4gYSBwYXJ0aWN1bGFyIHBhY2thZ2UKKyAgICAiIiIKKyAgICBpbmZvZGlyID0gZC5leHBhbmQoIiR7aW5mb2Rpcn0vZGlyIikKKworICAgIGlmIGluZm9kaXIgaW4gcGF0aDoKKyAgICAgICAgbWVzc2FnZXNbImluZm9kaXIiXSA9ICJUaGUgL3Vzci9zaGFyZS9pbmZvL2RpciBmaWxlIGlzIG5vdCBtZWFudCB0byBiZSBzaGlwcGVkIGluIGEgcGFydGljdWxhciBwYWNrYWdlLiIKKworUUFQQVRIVEVTVFtzeW1saW5rLXRvLXN5c3Jvb3RdID0gInBhY2thZ2VfcWFfY2hlY2tfc3ltbGlua190b19zeXNyb290IgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfc3ltbGlua190b19zeXNyb290KHBhdGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIHRoYXQgdGhlIHBhY2thZ2UgZG9lc24ndCBjb250YWluIGFueSBhYnNvbHV0ZSBzeW1saW5rcyB0byB0aGUgc3lzcm9vdC4KKyAgICAiIiIKKyAgICBpZiBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgdGFyZ2V0ID0gb3MucmVhZGxpbmsocGF0aCkKKyAgICAgICAgaWYgb3MucGF0aC5pc2Ficyh0YXJnZXQpOgorICAgICAgICAgICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisgICAgICAgICAgICBpZiB0YXJnZXQuc3RhcnRzd2l0aCh0bXBkaXIpOgorICAgICAgICAgICAgICAgIHRyaW1tZWQgPSBwYXRoLnJlcGxhY2Uob3MucGF0aC5qb2luIChkLmdldFZhcigiUEtHREVTVCIsIFRydWUpLCBuYW1lKSwgIiIpCisgICAgICAgICAgICAgICAgbWVzc2FnZXNbInN5bWxpbmstdG8tc3lzcm9vdCJdID0gIlN5bWxpbmsgJXMgaW4gJXMgcG9pbnRzIHRvIFRNUERJUiIgJSAodHJpbW1lZCwgbmFtZSkKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX2xpY2Vuc2Uod29ya2RpciwgZCk6CisgICAgIiIiCisgICAgQ2hlY2sgZm9yIGNoYW5nZXMgaW4gdGhlIGxpY2Vuc2UgZmlsZXMgCisgICAgIiIiCisgICAgaW1wb3J0IHRlbXBmaWxlCisgICAgc2FuZSA9IFRydWUKKworICAgIGxpY19maWxlcyA9IGQuZ2V0VmFyKCdMSUNfRklMRVNfQ0hLU1VNJywgVHJ1ZSkKKyAgICBsaWMgPSBkLmdldFZhcignTElDRU5TRScsIFRydWUpCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorCisgICAgaWYgbGljID09ICJDTE9TRUQiOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgaWYgbm90IGxpY19maWxlczoKKyAgICAgICAgYmIuZXJyb3IocG4gKyAiOiBSZWNpcGUgZmlsZSBkb2VzIG5vdCBoYXZlIGxpY2Vuc2UgZmlsZSBpbmZvcm1hdGlvbiAoTElDX0ZJTEVTX0NIS1NVTSkiKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHNyY2RpciA9IGQuZ2V0VmFyKCdTJywgVHJ1ZSkKKworICAgIGZvciB1cmwgaW4gbGljX2ZpbGVzLnNwbGl0KCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICh0eXBlLCBob3N0LCBwYXRoLCB1c2VyLCBwc3dkLCBwYXJtKSA9IGJiLmZldGNoLmRlY29kZXVybCh1cmwpCisgICAgICAgIGV4Y2VwdCBiYi5mZXRjaC5NYWxmb3JtZWRVcmw6CisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCBwbiArICI6IExJQ19GSUxFU19DSEtTVU0gY29udGFpbnMgYW4gaW52YWxpZCBVUkw6ICIgKyB1cmwpCisgICAgICAgIHNyY2xpY2ZpbGUgPSBvcy5wYXRoLmpvaW4oc3JjZGlyLCBwYXRoKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoc3JjbGljZmlsZSk6CisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCBwbiArICI6IExJQ19GSUxFU19DSEtTVU0gcG9pbnRzIHRvIGFuIGludmFsaWQgZmlsZTogIiArIHNyY2xpY2ZpbGUpCisKKyAgICAgICAgcmVjaXBlbWQ1ID0gcGFybS5nZXQoJ21kNScsICcnKQorICAgICAgICBiZWdpbmxpbmUsIGVuZGxpbmUgPSAwLCAwCisgICAgICAgIGlmICdiZWdpbmxpbmUnIGluIHBhcm06CisgICAgICAgICAgICBiZWdpbmxpbmUgPSBpbnQocGFybVsnYmVnaW5saW5lJ10pCisgICAgICAgIGlmICdlbmRsaW5lJyBpbiBwYXJtOgorICAgICAgICAgICAgZW5kbGluZSA9IGludChwYXJtWydlbmRsaW5lJ10pCisKKyAgICAgICAgaWYgKG5vdCBiZWdpbmxpbmUpIGFuZCAobm90IGVuZGxpbmUpOgorICAgICAgICAgICAgbWQ1Y2hrc3VtID0gYmIudXRpbHMubWQ1X2ZpbGUoc3JjbGljZmlsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpID0gb3BlbihzcmNsaWNmaWxlLCAncmInKQorICAgICAgICAgICAgZm8gPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUobW9kZT0nd2InLCBwcmVmaXg9J3Bva3kuJywgc3VmZml4PScudG1wJywgZGVsZXRlPUZhbHNlKQorICAgICAgICAgICAgdG1wbGljZmlsZSA9IGZvLm5hbWU7CisgICAgICAgICAgICBsaW5lbm8gPSAwCisgICAgICAgICAgICBsaW5lc291dCA9IDAKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGZpOgorICAgICAgICAgICAgICAgIGxpbmVubyArPSAxCisgICAgICAgICAgICAgICAgaWYgKGxpbmVubyA+PSBiZWdpbmxpbmUpOiAKKyAgICAgICAgICAgICAgICAgICAgaWYgKChsaW5lbm8gPD0gZW5kbGluZSkgb3Igbm90IGVuZGxpbmUpOgorICAgICAgICAgICAgICAgICAgICAgICAgZm8ud3JpdGUobGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzb3V0ICs9IDEKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmby5mbHVzaCgpCisgICAgICAgICAgICBmby5jbG9zZSgpCisgICAgICAgICAgICBmaS5jbG9zZSgpCisgICAgICAgICAgICBtZDVjaGtzdW0gPSBiYi51dGlscy5tZDVfZmlsZSh0bXBsaWNmaWxlKQorICAgICAgICAgICAgb3MudW5saW5rKHRtcGxpY2ZpbGUpCisKKyAgICAgICAgaWYgcmVjaXBlbWQ1ID09IG1kNWNoa3N1bToKKyAgICAgICAgICAgIGJiLm5vdGUgKHBuICsgIjogbWQ1IGNoZWNrc3VtIG1hdGNoZWQgZm9yICIsIHVybCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHJlY2lwZW1kNToKKyAgICAgICAgICAgICAgICBiYi5lcnJvcihwbiArICI6IG1kNSBkYXRhIGlzIG5vdCBtYXRjaGluZyBmb3IgIiwgdXJsKQorICAgICAgICAgICAgICAgIGJiLmVycm9yKHBuICsgIjogVGhlIG5ldyBtZDUgY2hlY2tzdW0gaXMgIiwgbWQ1Y2hrc3VtKQorICAgICAgICAgICAgICAgIGlmIGJlZ2lubGluZToKKyAgICAgICAgICAgICAgICAgICAgaWYgZW5kbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyY2ZpbGVkZXNjID0gIiVzIChsaW5lcyAlZCB0aHJvdWdoIHRvICVkKSIgJSAoc3JjbGljZmlsZSwgYmVnaW5saW5lLCBlbmRsaW5lKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc3JjZmlsZWRlc2MgPSAiJXMgKGJlZ2lubmluZyBvbiBsaW5lICVkKSIgJSAoc3JjbGljZmlsZSwgYmVnaW5saW5lKQorICAgICAgICAgICAgICAgIGVsaWYgZW5kbGluZToKKyAgICAgICAgICAgICAgICAgICAgc3JjZmlsZWRlc2MgPSAiJXMgKGVuZGluZyBvbiBsaW5lICVkKSIgJSAoc3JjbGljZmlsZSwgZW5kbGluZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzcmNmaWxlZGVzYyA9IHNyY2xpY2ZpbGUKKyAgICAgICAgICAgICAgICBiYi5lcnJvcihwbiArICI6IENoZWNrIGlmIHRoZSBsaWNlbnNlIGluZm9ybWF0aW9uIGhhcyBjaGFuZ2VkIGluICVzIHRvIHZlcmlmeSB0aGF0IHRoZSBMSUNFTlNFIHZhbHVlIFwiJXNcIiByZW1haW5zIHZhbGlkIiAlIChzcmNmaWxlZGVzYywgbGljKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYmIuZXJyb3IocG4gKyAiOiBtZDUgY2hlY2tzdW0gaXMgbm90IHNwZWNpZmllZCBmb3IgIiwgdXJsKQorICAgICAgICAgICAgICAgIGJiLmVycm9yKHBuICsgIjogVGhlIG1kNSBjaGVja3N1bSBpcyAiLCBtZDVjaGtzdW0pCisgICAgICAgICAgICBzYW5lID0gRmFsc2UKKworICAgIHJldHVybiBzYW5lCisKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX3N0YWdlZChwYXRoLGQpOgorICAgICIiIgorICAgIENoZWNrIHN0YWdlZCBsYSBhbmQgcGMgZmlsZXMgZm9yIHNhbml0eQorICAgICAgLWUuZy4gaW5zdGFsbGVkIGJlaW5nIGZhbHNlCisKKyAgICAgICAgQXMgdGhpcyBpcyBydW4gYWZ0ZXIgZXZlcnkgc3RhZ2Ugd2Ugc2hvdWxkIGJlIGFibGUKKyAgICAgICAgdG8gZmluZCB0aGUgb25lIHJlc3BvbnNpYmxlIGZvciB0aGUgZXJyb3JzIGVhc2lseSBldmVuCisgICAgICAgIGlmIHdlIGxvb2sgYXQgZXZlcnkgLnBjIGFuZCAubGEgZmlsZQorICAgICIiIgorCisgICAgc2FuZSA9IFRydWUKKyAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICB3b3JrZGlyID0gb3MucGF0aC5qb2luKHRtcGRpciwgIndvcmsiKQorCisgICAgaW5zdGFsbGVkID0gImluc3RhbGxlZD15ZXMiCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygibmF0aXZlIiwgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygiY3Jvc3MiLCBkKToKKyAgICAgICAgcGtnY29uZmlnY2hlY2sgPSB3b3JrZGlyCisgICAgZWxzZToKKyAgICAgICAgcGtnY29uZmlnY2hlY2sgPSB0bXBkaXIKKworICAgICMgZmluZCBhbGwgLmxhIGFuZCAucGMgZmlsZXMKKyAgICAjIHJlYWQgdGhlIGNvbnRlbnQKKyAgICAjIGFuZCBjaGVjayBmb3Igc3R1ZmYgdGhhdCBsb29rcyB3cm9uZworICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBhdGgpOgorICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocm9vdCxmaWxlKQorICAgICAgICAgICAgaWYgZmlsZS5lbmRzd2l0aCgiLmxhIik6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGZpbGVfY29udGVudCA9IGYucmVhZCgpCisgICAgICAgICAgICAgICAgICAgIGlmIHdvcmtkaXIgaW4gZmlsZV9jb250ZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIiVzIGZhaWxlZCBzYW5pdHkgdGVzdCAod29ya2RpcikgaW4gcGF0aCAlcyIgJSAoZmlsZSxyb290KQorICAgICAgICAgICAgICAgICAgICAgICAgc2FuZSA9IHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJsYSIsIGVycm9yX21zZywgZCkKKyAgICAgICAgICAgIGVsaWYgZmlsZS5lbmRzd2l0aCgiLnBjIik6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGZpbGVfY29udGVudCA9IGYucmVhZCgpCisgICAgICAgICAgICAgICAgICAgIGlmIHBrZ2NvbmZpZ2NoZWNrIGluIGZpbGVfY29udGVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICIlcyBmYWlsZWQgc2FuaXR5IHRlc3QgKHRtcGRpcikgaW4gcGF0aCAlcyIgJSAoZmlsZSxyb290KQorICAgICAgICAgICAgICAgICAgICAgICAgc2FuZSA9IHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJwa2djb25maWciLCBlcnJvcl9tc2csIGQpCisKKyAgICByZXR1cm4gc2FuZQorCisjIFdhbGsgb3ZlciBhbGwgZmlsZXMgaW4gYSBkaXJlY3RvcnkgYW5kIGNhbGwgZnVuYworZGVmIHBhY2thZ2VfcWFfd2FsayhwYXRoLCB3YXJuZnVuY3MsIGVycm9yZnVuY3MsIHNraXAsIHBhY2thZ2UsIGQpOgorICAgIGltcG9ydCBvZS5xYQorCisgICAgI2lmIHRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24sIHRoZW4gZml4IHRoZSBkaWN0IGFib3ZlCisgICAgdGFyZ2V0X29zICAgPSBkLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSkKKyAgICB0YXJnZXRfYXJjaCA9IGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpCisKKyAgICB3YXJuaW5ncyA9IHt9CisgICAgZXJyb3JzID0ge30KKyAgICBmb3IgcGF0aCBpbiBwa2dmaWxlc1twYWNrYWdlXToKKyAgICAgICAgICAgIGVsZiA9IG9lLnFhLkVMRkZpbGUocGF0aCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBlbGYub3BlbigpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgZWxmID0gTm9uZQorICAgICAgICAgICAgZm9yIGZ1bmMgaW4gd2FybmZ1bmNzOgorICAgICAgICAgICAgICAgIGZ1bmMocGF0aCwgcGFja2FnZSwgZCwgZWxmLCB3YXJuaW5ncykKKyAgICAgICAgICAgIGZvciBmdW5jIGluIGVycm9yZnVuY3M6CisgICAgICAgICAgICAgICAgZnVuYyhwYXRoLCBwYWNrYWdlLCBkLCBlbGYsIGVycm9ycykKKworICAgIGZvciB3IGluIHdhcm5pbmdzOgorICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcih3LCB3YXJuaW5nc1t3XSwgZCkKKyAgICBmb3IgZSBpbiBlcnJvcnM6CisgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKGUsIGVycm9yc1tlXSwgZCkKKworICAgIHJldHVybiBsZW4oZXJyb3JzKSA9PSAwCisKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX3JkZXBlbmRzKHBrZywgcGtnZGVzdCwgc2tpcCwgdGFza2RlcHMsIHBhY2thZ2VzLCBkKToKKyAgICAjIERvbid0IGRvIHRoaXMgY2hlY2sgZm9yIGtlcm5lbC9tb2R1bGUgcmVjaXBlcywgdGhlcmUgYXJlbid0IHRvbyBtYW55IGRlYnVnL2RldmVsb3BtZW50CisgICAgIyBwYWNrYWdlcyBhbmQgeW91IGNhbiBnZXQgZmFsc2UgcG9zaXRpdmVzIGUuZy4gb24ga2VybmVsLW1vZHVsZS1saXJjLWRldgorICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoImtlcm5lbCIsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoIm1vZHVsZS1iYXNlIiwgZCk6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBzYW5lID0gVHJ1ZQorICAgIGlmIG5vdCAiLWRiZyIgaW4gcGtnIGFuZCBub3QgInBhY2thZ2Vncm91cC0iIGluIHBrZyBhbmQgbm90ICItaW1hZ2UiIGluIHBrZzoKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsIHBrZykKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgIyBOb3cgY2hlY2sgdGhlIFJERVBFTkRTCisgICAgICAgIHJkZXBlbmRzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBzKGxvY2FsZGF0YS5nZXRWYXIoJ1JERVBFTkRTJywgVHJ1ZSkgb3IgIiIpCisKKyAgICAgICAgIyBOb3cgZG8gdGhlIHNhbml0eSBjaGVjayEhIQorICAgICAgICBpZiAiYnVpbGQtZGVwcyIgbm90IGluIHNraXA6CisgICAgICAgICAgICBmb3IgcmRlcGVuZCBpbiByZGVwZW5kczoKKyAgICAgICAgICAgICAgICBpZiAiLWRiZyIgaW4gcmRlcGVuZCBhbmQgImRlYnVnLWRlcHMiIG5vdCBpbiBza2lwOgorICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiJXMgcmRlcGVuZHMgb24gJXMiICUgKHBrZyxyZGVwZW5kKQorICAgICAgICAgICAgICAgICAgICBzYW5lID0gcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImRlYnVnLWRlcHMiLCBlcnJvcl9tc2csIGQpCisgICAgICAgICAgICAgICAgaWYgKG5vdCAiLWRldiIgaW4gcGtnIGFuZCBub3QgIi1zdGF0aWNkZXYiIGluIHBrZykgYW5kIHJkZXBlbmQuZW5kc3dpdGgoIi1kZXYiKSBhbmQgImRldi1kZXBzIiBub3QgaW4gc2tpcDoKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIiVzIHJkZXBlbmRzIG9uICVzIiAlIChwa2csIHJkZXBlbmQpCisgICAgICAgICAgICAgICAgICAgIHNhbmUgPSBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiZGV2LWRlcHMiLCBlcnJvcl9tc2csIGQpCisgICAgICAgICAgICAgICAgaWYgcmRlcGVuZCBub3QgaW4gcGFja2FnZXM6CisgICAgICAgICAgICAgICAgICAgIHJkZXBfZGF0YSA9IG9lLnBhY2thZ2VkYXRhLnJlYWRfc3VicGtnZGF0YShyZGVwZW5kLCBkKQorICAgICAgICAgICAgICAgICAgICBpZiByZGVwX2RhdGEgYW5kICdQTicgaW4gcmRlcF9kYXRhIGFuZCByZGVwX2RhdGFbJ1BOJ10gaW4gdGFza2RlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmRlcF9kYXRhIG9yIG5vdCAnUE4nIGluIHJkZXBfZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ2RhdGFfZGlyID0gZC5nZXRWYXIoIlBLR0RBVEFfRElSIiwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZXMgPSBvcy5saXN0ZGlyKCIlcy9ydW50aW1lLXJwcm92aWRlcy8lcy8iICUgKHBrZ2RhdGFfZGlyLCByZGVwZW5kKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlcyA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBwb3NzaWJsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRlcF9kYXRhID0gb2UucGFja2FnZWRhdGEucmVhZF9zdWJwa2dkYXRhKHAsIGQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmRlcF9kYXRhIGFuZCAnUE4nIGluIHJkZXBfZGF0YSBhbmQgcmRlcF9kYXRhWydQTiddIGluIHRhc2tkZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBpZiByZGVwX2RhdGEgYW5kICdQTicgaW4gcmRlcF9kYXRhIGFuZCByZGVwX2RhdGFbJ1BOJ10gaW4gdGFza2RlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiJXMgcmRlcGVuZHMgb24gJXMsIGJ1dCBpdCBpc24ndCBhIGJ1aWxkIGRlcGVuZGVuY3k/IiAlIChwa2csIHJkZXBlbmQpCisgICAgICAgICAgICAgICAgICAgIHNhbmUgPSBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiYnVpbGQtZGVwcyIsIGVycm9yX21zZywgZCkKKworICAgICAgICBpZiAiZmlsZS1yZGVwcyIgbm90IGluIHNraXA6CisgICAgICAgICAgICBpZ25vcmVkX2ZpbGVfcmRlcHMgPSBzZXQoWycvYmluL3NoJywgJy91c3IvYmluL2VudicsICdydGxkKEdOVV9IQVNIKSddKQorICAgICAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCk6CisgICAgICAgICAgICAgICAgaWdub3JlZF9maWxlX3JkZXBzIHw9IHNldChbJy9iaW4vYmFzaCcsICcvdXNyL2Jpbi9wZXJsJ10pCisgICAgICAgICAgICAjIEZvciBTYXZpbmcgdGhlIEZJTEVSREVQRU5EUworICAgICAgICAgICAgZmlsZXJkZXBlbmRzID0ge30KKyAgICAgICAgICAgIHJkZXBfZGF0YSA9IG9lLnBhY2thZ2VkYXRhLnJlYWRfc3VicGtnZGF0YShwa2csIGQpCisgICAgICAgICAgICBmb3Iga2V5IGluIHJkZXBfZGF0YToKKyAgICAgICAgICAgICAgICBpZiBrZXkuc3RhcnRzd2l0aCgiRklMRVJERVBFTkRTXyIpOgorICAgICAgICAgICAgICAgICAgICBmb3Igc3Via2V5IGluIHJkZXBfZGF0YVtrZXldLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzdWJrZXkgbm90IGluIGlnbm9yZWRfZmlsZV9yZGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGFscmVhZHkga25vdyBpdCBzdGFydHMgd2l0aCBGSUxFUkRFUEVORFNfCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXJkZXBlbmRzW3N1YmtleV0gPSBrZXlbMTM6XQorCisgICAgICAgICAgICBpZiBmaWxlcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgbmV4dCA9IHJkZXBlbmRzCisgICAgICAgICAgICAgICAgZG9uZSA9IHJkZXBlbmRzWzpdCisgICAgICAgICAgICAgICAgIyBGaW5kIGFsbCB0aGUgcmRlcGVuZHMgb24gdGhlIGRlcGVuZGVuY3kgY2hhaW4KKyAgICAgICAgICAgICAgICB3aGlsZSBuZXh0OgorICAgICAgICAgICAgICAgICAgICBuZXcgPSBbXQorICAgICAgICAgICAgICAgICAgICBmb3IgcmRlcCBpbiBuZXh0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmRlcF9kYXRhID0gb2UucGFja2FnZWRhdGEucmVhZF9zdWJwa2dkYXRhKHJkZXAsIGQpCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJfcmRlcHMgPSByZGVwX2RhdGEuZ2V0KCJSREVQRU5EU18iICsgcmRlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzdWJfcmRlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzdWJfcmRlcCBpbiBzdWJfcmRlcHMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzdWJfcmRlcCBpbiBkb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzdWJfcmRlcC5zdGFydHN3aXRoKCcoJykgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lLnBhY2thZ2VkYXRhLmhhc19zdWJwa2dkYXRhKHN1Yl9yZGVwLCBkKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJdCdzIGEgbmV3IHJkZXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoc3ViX3JkZXApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldy5hcHBlbmQoc3ViX3JkZXApCisgICAgICAgICAgICAgICAgICAgIG5leHQgPSBuZXcKKworICAgICAgICAgICAgICAgICMgQWRkIHRoZSBycHJvdmlkZXMgb2YgaXRzZWxmCisgICAgICAgICAgICAgICAgaWYgcGtnIG5vdCBpbiBkb25lOgorICAgICAgICAgICAgICAgICAgICBkb25lLmluc2VydCgwLCBwa2cpCisKKyAgICAgICAgICAgICAgICAjIFRoZSBweXRob24gaXMgbm90IGEgcGFja2FnZSwgYnV0IHB5dGhvbi1jb3JlIHByb3ZpZGVzIGl0LCBzbworICAgICAgICAgICAgICAgICMgc2tpcCBjaGVja2luZyAvdXNyL2Jpbi9weXRob24gaWYgcHl0aG9uIGlzIGluIHRoZSByZGVwcywgaW4KKyAgICAgICAgICAgICAgICAjIGNhc2UgdGhlcmUgaXMgYSBSREVQRU5EU19wa2cgPSAicHl0aG9uIiBpbiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgIGZvciBweSBpbiBbIGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpICsgInB5dGhvbiIsICJweXRob24iIF06CisgICAgICAgICAgICAgICAgICAgIGlmIHB5IGluIGRvbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcmRlcGVuZHMucG9wKCIvdXNyL2Jpbi9weXRob24iLE5vbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBkb25lLnJlbW92ZShweSkKKyAgICAgICAgICAgICAgICBmb3IgcmRlcCBpbiBkb25lOgorICAgICAgICAgICAgICAgICAgICAjIEZvciBTYXZpbmcgdGhlIEZJTEVSUFJPVklERVMsIFJQUk9WSURFUyBhbmQgRklMRVNfSU5GTworICAgICAgICAgICAgICAgICAgICByZGVwX2RhdGEgPSBvZS5wYWNrYWdlZGF0YS5yZWFkX3N1YnBrZ2RhdGEocmRlcCwgZCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGtleSBpbiByZGVwX2RhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBrZXkuc3RhcnRzd2l0aCgiRklMRVJQUk9WSURFU18iKSBvciBrZXkuc3RhcnRzd2l0aCgiUlBST1ZJREVTXyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzdWJrZXkgaW4gcmRlcF9kYXRhW2tleV0uc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXJkZXBlbmRzLnBvcChzdWJrZXksTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIHRoZSBmaWxlcyBsaXN0IHRvIHRoZSBycHJvdmlkZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGtleSA9PSAiRklMRVNfSU5GTyI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBVc2UgZXZhbCgpIHRvIG1ha2UgaXQgYXMgYSBkaWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHN1YmtleSBpbiBldmFsKHJkZXBfZGF0YVtrZXldKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXJkZXBlbmRzLnBvcChzdWJrZXksTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGZpbGVyZGVwZW5kczoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQnJlYWsgaWYgYWxsIHRoZSBmaWxlIHJkZXBlbmRzIGFyZSBtZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBmaWxlcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgZm9yIGtleSBpbiBmaWxlcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICIlcyBjb250YWluZWQgaW4gcGFja2FnZSAlcyByZXF1aXJlcyAlcywgYnV0IG5vIHByb3ZpZGVycyBmb3VuZCBpbiBpdHMgUkRFUEVORFMiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlcmRlcGVuZHNba2V5XSxwa2csIGtleSkKKyAgICAgICAgICAgICAgICBzYW5lID0gcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImZpbGUtcmRlcHMiLCBlcnJvcl9tc2csIGQpCisKKyAgICByZXR1cm4gc2FuZQorCitkZWYgcGFja2FnZV9xYV9jaGVja19kZXBzKHBrZywgcGtnZGVzdCwgc2tpcCwgZCk6CisgICAgc2FuZSA9IFRydWUKKworICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsIHBrZykKKyAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgIGRlZiBjaGVja192YWxpZF9kZXBzKHZhcik6CisgICAgICAgIHNhbmUgPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJ2YXIgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcih2YXIsIFRydWUpIG9yICIiKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIiVzXyVzOiAlcyIgJSAodmFyLCBwa2csIGUpKQorICAgICAgICBmb3IgZGVwIGluIHJ2YXI6CisgICAgICAgICAgICBmb3IgdiBpbiBydmFyW2RlcF06CisgICAgICAgICAgICAgICAgaWYgdiBhbmQgbm90IHYuc3RhcnRzd2l0aCgoJzwgJywgJz0gJywgJz4gJywgJzw9ICcsICc+PScpKToKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIiVzXyVzIGlzIGludmFsaWQ6ICVzICglcykgICBvbmx5IGNvbXBhcmlzb25zIDwsID0sID4sIDw9LCBhbmQgPj0gYXJlIGFsbG93ZWQiICUgKHZhciwgcGtnLCBkZXAsIHYpCisgICAgICAgICAgICAgICAgICAgIHNhbmUgPSBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiZGVwLWNtcCIsIGVycm9yX21zZywgZCkKKyAgICAgICAgcmV0dXJuIHNhbmUKKworICAgIHNhbmUgPSBUcnVlCisgICAgaWYgbm90IGNoZWNrX3ZhbGlkX2RlcHMoJ1JERVBFTkRTJyk6CisgICAgICAgIHNhbmUgPSBGYWxzZQorICAgIGlmIG5vdCBjaGVja192YWxpZF9kZXBzKCdSUkVDT01NRU5EUycpOgorICAgICAgICBzYW5lID0gRmFsc2UKKyAgICBpZiBub3QgY2hlY2tfdmFsaWRfZGVwcygnUlNVR0dFU1RTJyk6CisgICAgICAgIHNhbmUgPSBGYWxzZQorICAgIGlmIG5vdCBjaGVja192YWxpZF9kZXBzKCdSUFJPVklERVMnKToKKyAgICAgICAgc2FuZSA9IEZhbHNlCisgICAgaWYgbm90IGNoZWNrX3ZhbGlkX2RlcHMoJ1JSRVBMQUNFUycpOgorICAgICAgICBzYW5lID0gRmFsc2UKKyAgICBpZiBub3QgY2hlY2tfdmFsaWRfZGVwcygnUkNPTkZMSUNUUycpOgorICAgICAgICBzYW5lID0gRmFsc2UKKworICAgIHJldHVybiBzYW5lCisKK1FBUEFUSFRFU1RbZXhwYW5kZWQtZF0gPSAicGFja2FnZV9xYV9jaGVja19leHBhbmRlZF9kIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfZXhwYW5kZWRfZChwYXRoLG5hbWUsZCxlbGYsbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIGZvciB0aGUgZXhwYW5kZWQgRCAoJHtEfSkgdmFsdWUgaW4gcGtnXyogYW5kIEZJTEVTCisgICAgdmFyaWFibGVzLCB3YXJuIHRoZSB1c2VyIHRvIHVzZSBpdCBjb3JyZWN0bHkuCisgICAgIiIiCisKKyAgICBzYW5lID0gVHJ1ZQorICAgIGV4cGFuZGVkX2QgPSBkLmdldFZhcignRCcsVHJ1ZSkKKworICAgICMgR2V0IHBhY2thZ2VzIGZvciBjdXJyZW50IHJlY2lwZSBhbmQgaXRlcmF0ZQorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoIiAiKQorICAgIGZvciBwYWsgaW4gcGFja2FnZXM6CisgICAgIyBHbyB0aHJvdWdoIGFsbCB2YXJpYWJsZXMgYW5kIGNoZWNrIGlmIGV4cGFuZGVkIEQgaXMgZm91bmQsIHdhcm4gdGhlIHVzZXIgYWNjb3JkaW5nbHkKKyAgICAgICAgZm9yIHZhciBpbiAnRklMRVMnLCdwa2dfcHJlaW5zdCcsICdwa2dfcG9zdGluc3QnLCAncGtnX3ByZXJtJywgJ3BrZ19wb3N0cm0nOgorICAgICAgICAgICAgYmJ2YXIgPSBkLmdldFZhcih2YXIgKyAiXyIgKyBwYWssIEZhbHNlKQorICAgICAgICAgICAgaWYgYmJ2YXI6CisgICAgICAgICAgICAgICAgIyBCaXRiYWtlIGV4cGFuZHMgJHtEfSB3aXRoaW4gYmJ2YXIgZHVyaW5nIHRoZSBwcmV2aW91cyBzdGVwLCBzbyB3ZSBjaGVjayBmb3IgaXRzIGV4cGFuZGVkIHZhbHVlCisgICAgICAgICAgICAgICAgaWYgZXhwYW5kZWRfZCBpbiBiYnZhcjoKKyAgICAgICAgICAgICAgICAgICAgaWYgdmFyID09ICdGSUxFUyc6CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlc1siZXhwYW5kZWQtZCJdID0gIkZJTEVTIGluICVzIHJlY2lwZSBzaG91bGQgbm90IGNvbnRhaW4gdGhlICR7RH0gdmFyaWFibGUgYXMgaXQgcmVmZXJlbmNlcyB0aGUgbG9jYWwgYnVpbGQgZGlyZWN0b3J5IG5vdCB0aGUgdGFyZ2V0IGZpbGVzeXN0ZW0sIGJlc3Qgc29sdXRpb24gaXMgdG8gcmVtb3ZlIHRoZSAke0R9IHJlZmVyZW5jZSIgJSBwYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNhbmUgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXNbImV4cGFuZGVkLWQiXSA9ICIlcyBpbiAlcyByZWNpcGUgY29udGFpbnMgJHtEfSwgaXQgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5ICREIGluc3RlYWQiICUgKHZhciwgcGFrKQorICAgICAgICAgICAgICAgICAgICAgICAgc2FuZSA9IEZhbHNlCisgICAgcmV0dXJuIHNhbmUKKworZGVmIHBhY2thZ2VfcWFfY2hlY2tfZW5jb2Rpbmcoa2V5cywgZW5jb2RlLCBkKToKKyAgICBkZWYgY2hlY2tfZW5jb2Rpbmcoa2V5LGVuYyk6CisgICAgICAgIHNhbmUgPSBUcnVlCisgICAgICAgIHZhbHVlID0gZC5nZXRWYXIoa2V5LCBUcnVlKQorICAgICAgICBpZiB2YWx1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzID0gdW5pY29kZSh2YWx1ZSwgZW5jKQorICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICIlcyBoYXMgbm9uICVzIGNoYXJhY3RlcnMiICUgKGtleSxlbmMpCisgICAgICAgICAgICAgICAgc2FuZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImludmFsaWQtY2hhcnMiLCBlcnJvcl9tc2csIGQpCisgICAgICAgIHJldHVybiBzYW5lCisKKyAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgIHNhbmUgPSBjaGVja19lbmNvZGluZyhrZXksIGVuY29kZSkKKyAgICAgICAgaWYgbm90IHNhbmU6CisgICAgICAgICAgICBicmVhaworCitIT1NUX1VTRVJfVUlEIDo9ICIke0Bvcy5nZXR1aWQoKX0iCitIT1NUX1VTRVJfR0lEIDo9ICIke0Bvcy5nZXRnaWQoKX0iCisKK1FBUEFUSFRFU1RbaG9zdC11c2VyLWNvbnRhbWluYXRlZF0gPSAicGFja2FnZV9xYV9jaGVja19ob3N0X3VzZXIiCitkZWYgcGFja2FnZV9xYV9jaGVja19ob3N0X3VzZXIocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiQ2hlY2sgZm9yIHBhdGhzIG91dHNpZGUgb2YgL2hvbWUgd2hpY2ggYXJlIG93bmVkIGJ5IHRoZSB1c2VyIHJ1bm5pbmcgYml0YmFrZS4iIiIKKworICAgIGlmIG5vdCBvcy5wYXRoLmxleGlzdHMocGF0aCk6CisgICAgICAgIHJldHVybgorCisgICAgZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBob21lID0gb3MucGF0aC5qb2luKGRlc3QsICdob21lJykKKyAgICBpZiBwYXRoID09IGhvbWUgb3IgcGF0aC5zdGFydHN3aXRoKGhvbWUgKyBvcy5zZXApOgorICAgICAgICByZXR1cm4KKworICAgIHRyeToKKyAgICAgICAgc3RhdCA9IG9zLmxzdGF0KHBhdGgpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICBpbXBvcnQgZXJybm8KKyAgICAgICAgaWYgZXhjLmVycm5vICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgIHJhaXNlCisgICAgZWxzZToKKyAgICAgICAgY2hlY2tfdWlkID0gaW50KGQuZ2V0VmFyKCdIT1NUX1VTRVJfVUlEJywgVHJ1ZSkpCisgICAgICAgIGlmIHN0YXQuc3RfdWlkID09IGNoZWNrX3VpZDoKKyAgICAgICAgICAgIG1lc3NhZ2VzWyJob3N0LXVzZXItY29udGFtaW5hdGVkIl0gPSAiJXMgaXMgb3duZWQgYnkgdWlkICVkLCB3aGljaCBpcyB0aGUgc2FtZSBhcyB0aGUgdXNlciBydW5uaW5nIGJpdGJha2UuIFRoaXMgbWF5IGJlIGR1ZSB0byBob3N0IGNvbnRhbWluYXRpb24iICUgKHBhdGgsIGNoZWNrX3VpZCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGNoZWNrX2dpZCA9IGludChkLmdldFZhcignSE9TVF9VU0VSX0dJRCcsIFRydWUpKQorICAgICAgICBpZiBzdGF0LnN0X2dpZCA9PSBjaGVja19naWQ6CisgICAgICAgICAgICBtZXNzYWdlc1siaG9zdC11c2VyLWNvbnRhbWluYXRlZCJdID0gIiVzIGlzIG93bmVkIGJ5IGdpZCAlZCwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIHVzZXIgcnVubmluZyBiaXRiYWtlLiBUaGlzIG1heSBiZSBkdWUgdG8gaG9zdCBjb250YW1pbmF0aW9uIiAlIChwYXRoLCBjaGVja19naWQpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gVHJ1ZQorCisjIFRoZSBQQUNLQUdFIEZVTkMgdG8gc2NhbiBlYWNoIHBhY2thZ2UKK3B5dGhvbiBkb19wYWNrYWdlX3FhICgpIHsKKyAgICBpbXBvcnQgc3VicHJvY2VzcworICAgIGltcG9ydCBvZS5wYWNrYWdlZGF0YQorCisgICAgYmIubm90ZSgiRE8gUEFDS0FHRSBRQSIpCisKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoInJlYWRfc3VicGFja2FnZV9tZXRhZGF0YSIsIGQpCisKKyAgICAjIENoZWNrIG5vbiBVVEYtOCBjaGFyYWN0ZXJzIG9uIHJlY2lwZSdzIG1ldGFkYXRhCisgICAgcGFja2FnZV9xYV9jaGVja19lbmNvZGluZyhbJ0RFU0NSSVBUSU9OJywgJ1NVTU1BUlknLCAnTElDRU5TRScsICdTRUNUSU9OJ10sICd1dGYtOCcsIGQpCisKKyAgICBsb2dkaXIgPSBkLmdldFZhcignVCcsIFRydWUpCisgICAgcGtnID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgICMgQ2hlY2sgdGhlIGNvbXBpbGUgbG9nIGZvciBob3N0IGNvbnRhbWluYXRpb24KKyAgICBjb21waWxlbG9nID0gb3MucGF0aC5qb2luKGxvZ2RpciwibG9nLmRvX2NvbXBpbGUiKQorCisgICAgaWYgb3MucGF0aC5leGlzdHMoY29tcGlsZWxvZyk6CisgICAgICAgIHN0YXRlbWVudCA9ICJncmVwIC1lICdDUk9TUyBDT01QSUxFIEJhZG5lc3M6JyAtZSAnaXMgdW5zYWZlIGZvciBjcm9zcy1jb21waWxhdGlvbicgJXMgPiAvZGV2L251bGwiICUgY29tcGlsZWxvZworICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoc3RhdGVtZW50LCBzaGVsbD1UcnVlKSA9PSAwOgorICAgICAgICAgICAgbXNnID0gIiVzOiBUaGUgY29tcGlsZSBsb2cgaW5kaWNhdGVzIHRoYXQgaG9zdCBpbmNsdWRlIGFuZC9vciBsaWJyYXJ5IHBhdGhzIHdlcmUgdXNlZC5cbiBcCisgICAgICAgIFBsZWFzZSBjaGVjayB0aGUgbG9nICclcycgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAlIChwa2csIGNvbXBpbGVsb2cpCisgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiY29tcGlsZS1ob3N0LXBhdGgiLCBtc2csIGQpCisKKyAgICAjIENoZWNrIHRoZSBpbnN0YWxsIGxvZyBmb3IgaG9zdCBjb250YW1pbmF0aW9uCisgICAgaW5zdGFsbGxvZyA9IG9zLnBhdGguam9pbihsb2dkaXIsImxvZy5kb19pbnN0YWxsIikKKworICAgIGlmIG9zLnBhdGguZXhpc3RzKGluc3RhbGxsb2cpOgorICAgICAgICBzdGF0ZW1lbnQgPSAiZ3JlcCAtZSAnQ1JPU1MgQ09NUElMRSBCYWRuZXNzOicgLWUgJ2lzIHVuc2FmZSBmb3IgY3Jvc3MtY29tcGlsYXRpb24nICVzID4gL2Rldi9udWxsIiAlIGluc3RhbGxsb2cKKyAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKHN0YXRlbWVudCwgc2hlbGw9VHJ1ZSkgPT0gMDoKKyAgICAgICAgICAgIG1zZyA9ICIlczogVGhlIGluc3RhbGwgbG9nIGluZGljYXRlcyB0aGF0IGhvc3QgaW5jbHVkZSBhbmQvb3IgbGlicmFyeSBwYXRocyB3ZXJlIHVzZWQuXG4gXAorICAgICAgICBQbGVhc2UgY2hlY2sgdGhlIGxvZyAnJXMnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgJSAocGtnLCBpbnN0YWxsbG9nKQorICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImluc3RhbGwtaG9zdC1wYXRoIiwgbXNnLCBkKQorCisgICAgIyBTY2FuIHRoZSBwYWNrYWdlcy4uLgorICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgcGFja2FnZXMgPSBzZXQoKGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpIG9yICcnKS5zcGxpdCgpKQorCisgICAgY3BhdGggPSBvZS5jYWNoZWRwYXRoLkNhY2hlZFBhdGgoKQorICAgIGdsb2JhbCBwa2dmaWxlcworICAgIHBrZ2ZpbGVzID0ge30KKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICBwa2dmaWxlc1twa2ddID0gW10KKyAgICAgICAgZm9yIHdhbGtyb290LCBkaXJzLCBmaWxlcyBpbiBjcGF0aC53YWxrKHBrZ2Rlc3QgKyAiLyIgKyBwa2cpOgorICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgcGtnZmlsZXNbcGtnXS5hcHBlbmQod2Fsa3Jvb3QgKyBvcy5zZXAgKyBmaWxlKQorCisgICAgIyBubyBwYWNrYWdlcyBzaG91bGQgYmUgc2Nhbm5lZAorICAgIGlmIG5vdCBwYWNrYWdlczoKKyAgICAgICAgcmV0dXJuCisKKyAgICB0ZXN0bWF0cml4ID0gZC5nZXRWYXJGbGFncygiUUFQQVRIVEVTVCIpCisgICAgaW1wb3J0IHJlCisgICAgIyBUaGUgcGFja2FnZSBuYW1lIG1hdGNoZXMgdGhlIFthLXowLTkuKy1dKyByZWd1bGFyIGV4cHJlc3Npb24KKyAgICBwa2duYW1lX3BhdHRlcm4gPSByZS5jb21waWxlKCJeW2EtejAtOS4rLV0rJCIpCisKKyAgICB0YXNrZGVwZGF0YSA9IGQuZ2V0VmFyKCJCQl9UQVNLREVQREFUQSIsIEZhbHNlKQorICAgIHRhc2tkZXBzID0gc2V0KCkKKyAgICBmb3IgZGVwIGluIHRhc2tkZXBkYXRhOgorICAgICAgICB0YXNrZGVwcy5hZGQodGFza2RlcGRhdGFbZGVwXVswXSkKKworICAgIGcgPSBnbG9iYWxzKCkKKyAgICB3YWxrX3NhbmUgPSBUcnVlCisgICAgcmRlcGVuZHNfc2FuZSA9IFRydWUKKyAgICBkZXBzX3NhbmUgPSBUcnVlCisgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgIHNraXAgPSAoZC5nZXRWYXIoJ0lOU0FORV9TS0lQXycgKyBwYWNrYWdlLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBpZiBza2lwOgorICAgICAgICAgICAgYmIubm90ZSgiUGFja2FnZSAlcyBza2lwcGluZyBRQSB0ZXN0czogJXMiICUgKHBhY2thZ2UsIHN0cihza2lwKSkpCisgICAgICAgIHdhcm5jaGVja3MgPSBbXQorICAgICAgICBmb3IgdyBpbiAoZC5nZXRWYXIoIldBUk5fUUEiLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIHcgaW4gc2tpcDoKKyAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiB3IGluIHRlc3RtYXRyaXggYW5kIHRlc3RtYXRyaXhbd10gaW4gZzoKKyAgICAgICAgICAgICAgICB3YXJuY2hlY2tzLmFwcGVuZChnW3Rlc3RtYXRyaXhbd11dKQorICAgICAgICBlcnJvcmNoZWNrcyA9IFtdCisgICAgICAgIGZvciBlIGluIChkLmdldFZhcigiRVJST1JfUUEiLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIGUgaW4gc2tpcDoKKyAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBlIGluIHRlc3RtYXRyaXggYW5kIHRlc3RtYXRyaXhbZV0gaW4gZzoKKyAgICAgICAgICAgICAgICBlcnJvcmNoZWNrcy5hcHBlbmQoZ1t0ZXN0bWF0cml4W2VdXSkKKworICAgICAgICBiYi5ub3RlKCJDaGVja2luZyBQYWNrYWdlOiAlcyIgJSBwYWNrYWdlKQorICAgICAgICAjIENoZWNrIHBhY2thZ2UgbmFtZQorICAgICAgICBpZiBub3QgcGtnbmFtZV9wYXR0ZXJuLm1hdGNoKHBhY2thZ2UpOgorICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInBrZ25hbWUiLAorICAgICAgICAgICAgICAgICAgICAiJXMgZG9lc24ndCBtYXRjaCB0aGUgW2EtejAtOS4rLV0rIHJlZ2V4XG4iICUgcGFja2FnZSwgZCkKKworICAgICAgICBwYXRoID0gIiVzLyVzIiAlIChwa2dkZXN0LCBwYWNrYWdlKQorICAgICAgICBpZiBub3QgcGFja2FnZV9xYV93YWxrKHBhdGgsIHdhcm5jaGVja3MsIGVycm9yY2hlY2tzLCBza2lwLCBwYWNrYWdlLCBkKToKKyAgICAgICAgICAgIHdhbGtfc2FuZSAgPSBGYWxzZQorICAgICAgICBpZiBub3QgcGFja2FnZV9xYV9jaGVja19yZGVwZW5kcyhwYWNrYWdlLCBwa2dkZXN0LCBza2lwLCB0YXNrZGVwcywgcGFja2FnZXMsIGQpOgorICAgICAgICAgICAgcmRlcGVuZHNfc2FuZSA9IEZhbHNlCisgICAgICAgIGlmIG5vdCBwYWNrYWdlX3FhX2NoZWNrX2RlcHMocGFja2FnZSwgcGtnZGVzdCwgc2tpcCwgZCk6CisgICAgICAgICAgICBkZXBzX3NhbmUgPSBGYWxzZQorCisKKyAgICBpZiAnbGliZGlyJyBpbiBkLmdldFZhcigiQUxMX1FBIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgcGFja2FnZV9xYV9jaGVja19saWJkaXIoZCkKKworICAgIHFhX3NhbmUgPSBkLmdldFZhcigiUUFfU0FORSIsIFRydWUpCisgICAgaWYgbm90IHdhbGtfc2FuZSBvciBub3QgcmRlcGVuZHNfc2FuZSBvciBub3QgZGVwc19zYW5lIG9yIG5vdCBxYV9zYW5lOgorICAgICAgICBiYi5mYXRhbCgiUUEgcnVuIGZvdW5kIGZhdGFsIGVycm9ycy4gUGxlYXNlIGNvbnNpZGVyIGZpeGluZyB0aGVtLiIpCisgICAgYmIubm90ZSgiRE9ORSB3aXRoIFBBQ0tBR0UgUUEiKQorfQorCitkb19wYWNrYWdlX3FhW3JkZXB0YXNrXSA9ICJkb19wYWNrYWdlZGF0YSIKK2FkZHRhc2sgZG9fcGFja2FnZV9xYSBhZnRlciBkb19wYWNrYWdlZGF0YSBkb19wYWNrYWdlIGJlZm9yZSBkb19idWlsZAorCitTU1RBVEVUQVNLUyArPSAiZG9fcGFja2FnZV9xYSIKK2RvX3BhY2thZ2VfcWFbc3N0YXRlLWlucHV0ZGlyc10gPSAiIgorZG9fcGFja2FnZV9xYVtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiIgorcHl0aG9uIGRvX3BhY2thZ2VfcWFfc2V0c2NlbmUgKCkgeworICAgIHNzdGF0ZV9zZXRzY2VuZShkKQorfQorYWRkdGFzayBkb19wYWNrYWdlX3FhX3NldHNjZW5lCisKK3B5dGhvbiBkb19xYV9zdGFnaW5nKCkgeworICAgIGJiLm5vdGUoIlFBIGNoZWNraW5nIHN0YWdpbmciKQorCisgICAgaWYgbm90IHBhY2thZ2VfcWFfY2hlY2tfc3RhZ2VkKGQuZXhwYW5kKCcke1NZU1JPT1RfREVTVERJUn0ke1NUQUdJTkdfTElCRElSfScpLCBkKToKKyAgICAgICAgYmIuZmF0YWwoIlFBIHN0YWdpbmcgd2FzIGJyb2tlbiBieSB0aGUgcGFja2FnZSBidWlsdCBhYm92ZSIpCit9CisKK3B5dGhvbiBkb19xYV9jb25maWd1cmUoKSB7CisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgQ2hlY2sgY29uZmlnLmxvZyBmb3IgY3Jvc3MgY29tcGlsZSBpc3N1ZXMKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgIGNvbmZpZ3MgPSBbXQorICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgYmIubm90ZSgiQ2hlY2tpbmcgYXV0b3Rvb2xzIGVudmlyb25tZW50IGZvciBjb21tb24gbWlzY29uZmlndXJhdGlvbiIpCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsod29ya2Rpcik6CisgICAgICAgIHN0YXRlbWVudCA9ICJncmVwIC1lICdDUk9TUyBDT01QSUxFIEJhZG5lc3M6JyAtZSAnaXMgdW5zYWZlIGZvciBjcm9zcy1jb21waWxhdGlvbicgJXMgPiAvZGV2L251bGwiICUgXAorICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ocm9vdCwiY29uZmlnLmxvZyIpCisgICAgICAgIGlmICJjb25maWcubG9nIiBpbiBmaWxlczoKKyAgICAgICAgICAgIGlmIHN1YnByb2Nlc3MuY2FsbChzdGF0ZW1lbnQsIHNoZWxsPVRydWUpID09IDA6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIiIiVGhpcyBhdXRvY29uZiBsb2cgaW5kaWNhdGVzIGVycm9ycywgaXQgbG9va2VkIGF0IGhvc3QgaW5jbHVkZSBhbmQvb3IgbGlicmFyeSBwYXRocyB3aGlsZSBkZXRlcm1pbmluZyBzeXN0ZW0gY2FwYWJpbGl0aWVzLgorUmVydW4gY29uZmlndXJlIHRhc2sgYWZ0ZXIgZml4aW5nIHRoaXMuIFRoZSBwYXRoIHdhcyAnJXMnIiIiICUgcm9vdCkKKworICAgICAgICBpZiAiY29uZmlndXJlLmFjIiBpbiBmaWxlczoKKyAgICAgICAgICAgIGNvbmZpZ3MuYXBwZW5kKG9zLnBhdGguam9pbihyb290LCJjb25maWd1cmUuYWMiKSkKKyAgICAgICAgaWYgImNvbmZpZ3VyZS5pbiIgaW4gZmlsZXM6CisgICAgICAgICAgICBjb25maWdzLmFwcGVuZChvcy5wYXRoLmpvaW4ocm9vdCwgImNvbmZpZ3VyZS5pbiIpKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBDaGVjayBnZXR0ZXh0IGNvbmZpZ3VyYXRpb24gYW5kIGRlcGVuZGVuY2llcyBhcmUgY29ycmVjdAorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgY25mID0gZC5nZXRWYXIoJ0VYVFJBX09FQ09ORicsIFRydWUpIG9yICIiCisgICAgaWYgImdldHRleHQiIG5vdCBpbiBkLmdldFZhcignUCcsIFRydWUpIGFuZCAiZ2NjLXJ1bnRpbWUiIG5vdCBpbiBkLmdldFZhcignUCcsIFRydWUpIGFuZCAiLS1kaXNhYmxlLW5scyIgbm90IGluIGNuZjoKKyAgICAgICAgbWwgPSBkLmdldFZhcigiTUxQUkVGSVgiLCBUcnVlKSBvciAiIgorICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3Nzc2RrJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCk6CisgICAgICAgICAgICBndCA9ICJnZXR0ZXh0LW5hdGl2ZSIKKyAgICAgICAgZWxpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcy1jYW5hZGlhbicsIGQpOgorICAgICAgICAgICAgZ3QgPSAibmF0aXZlc2RrLWdldHRleHQiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBndCA9ICJ2aXJ0dWFsLyIgKyBtbCArICJnZXR0ZXh0IgorICAgICAgICBkZXBzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBzKGQuZ2V0VmFyKCdERVBFTkRTJywgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGlmIGd0IG5vdCBpbiBkZXBzOgorICAgICAgICAgICAgZm9yIGNvbmZpZyBpbiBjb25maWdzOgorICAgICAgICAgICAgICAgIGdudSA9ICJncmVwIFwiXltbOnNwYWNlOl1dKkFNX0dOVV9HRVRURVhUXCIgJXMgPi9kZXYvbnVsbCIgJSBjb25maWcKKyAgICAgICAgICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoZ251LCBzaGVsbD1UcnVlKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgiIiIlcyByZXF1aXJlZCBidXQgbm90IGluIERFUEVORFMgZm9yIGZpbGUgJXMuCitNaXNzaW5nIGluaGVyaXQgZ2V0dGV4dD8iIiIgJSAoZ3QsIGNvbmZpZykpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIENoZWNrIGxpY2Vuc2UgdmFyaWFibGVzCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICBpZiBub3QgcGFja2FnZV9xYV9jaGVja19saWNlbnNlKHdvcmtkaXIsIGQpOgorICAgICAgICBiYi5mYXRhbCgiTGljZW5zaW5nIEVycm9yOiBMSUNfRklMRVNfQ0hLU1VNIGRvZXMgbm90IG1hdGNoLCBwbGVhc2UgZml4IikKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgQ2hlY2sgdW5yZWNvZ25pc2VkIGNvbmZpZ3VyZSBvcHRpb25zICh3aXRoIGEgd2hpdGUgbGlzdCkKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJhdXRvdG9vbHMiLCBkKToKKyAgICAgICAgYmIubm90ZSgiQ2hlY2tpbmcgY29uZmlndXJlIG91dHB1dCBmb3IgdW5yZWNvZ25pc2VkIG9wdGlvbnMiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmbGFnID0gIldBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiIKKyAgICAgICAgICAgIGxvZyA9IG9zLnBhdGguam9pbihkLmdldFZhcignQicsIFRydWUpLCAnY29uZmlnLmxvZycpCisgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ2dyZXAnLCAnLUYnLCBmbGFnLCBsb2ddKS5yZXBsYWNlKCcsICcsICcgJykKKyAgICAgICAgICAgIG9wdGlvbnMgPSBzZXQoKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgICAgICBvcHRpb25zIHw9IHNldChsaW5lLnBhcnRpdGlvbihmbGFnKVsyXS5zcGxpdCgpKQorICAgICAgICAgICAgd2hpdGVsaXN0ID0gc2V0KGQuZ2V0VmFyKCJVTktOT1dOX0NPTkZJR1VSRV9XSElURUxJU1QiLCBUcnVlKS5zcGxpdCgpKQorICAgICAgICAgICAgb3B0aW9ucyAtPSB3aGl0ZWxpc3QKKyAgICAgICAgICAgIGlmIG9wdGlvbnM6CisgICAgICAgICAgICAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICAgICAgICAgIGVycm9yX21zZyA9IHBuICsgIjogY29uZmlndXJlIHdhcyBwYXNzZWQgdW5yZWNvZ25pc2VkIG9wdGlvbnM6ICIgKyAiICIuam9pbihvcHRpb25zKQorICAgICAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJ1bmtub3duLWNvbmZpZ3VyZS1vcHRpb24iLCBlcnJvcl9tc2csIGQpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICMgQ2hlY2sgaW52YWxpZCBQQUNLQUdFQ09ORklHCisgICAgcGtnY29uZmlnID0gKGQuZ2V0VmFyKCJQQUNLQUdFQ09ORklHIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiBwa2djb25maWc6CisgICAgICAgIHBrZ2NvbmZpZ2ZsYWdzID0gZC5nZXRWYXJGbGFncygiUEFDS0FHRUNPTkZJRyIpIG9yIHt9CisgICAgICAgIGZvciBwY29uZmlnIGluIHBrZ2NvbmZpZzoKKyAgICAgICAgICAgIGlmIHBjb25maWcgbm90IGluIHBrZ2NvbmZpZ2ZsYWdzOgorICAgICAgICAgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiJXM6IGludmFsaWQgUEFDS0FHRUNPTkZJRzogJXMiICUgKHBuLCBwY29uZmlnKQorICAgICAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJpbnZhbGlkLXBrZ2NvbmZpZyIsIGVycm9yX21zZywgZCkKK30KKworcHl0aG9uIGRvX3FhX3VucGFjaygpIHsKKyAgICBiYi5ub3RlKCJDaGVja2luZyBoYXMgJHtTfSBiZWVuIGNyZWF0ZWQiKQorCisgICAgc19kaXIgPSBkLmdldFZhcignUycsIFRydWUpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNfZGlyKToKKyAgICAgICAgYmIud2FybignJXM6IHRoZSBkaXJlY3RvcnkgJXMgKCVzKSBwb2ludGVkIHRvIGJ5IHRoZSBTIHZhcmlhYmxlIGRvZXNuXCd0IGV4aXN0IC0gcGxlYXNlIHNldCBTIHdpdGhpbiB0aGUgcmVjaXBlIHRvIHBvaW50IHRvIHdoZXJlIHRoZSBzb3VyY2UgaGFzIGJlZW4gdW5wYWNrZWQgdG8nICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBkLmdldFZhcignUycsIEZhbHNlKSwgc19kaXIpKQorfQorCisjIFRoZSBTdGFnaW5nIEZ1bmMsIHRvIGNoZWNrIGFsbCBzdGFnaW5nCisjYWRkdGFzayBxYV9zdGFnaW5nIGFmdGVyIGRvX3BvcHVsYXRlX3N5c3Jvb3QgYmVmb3JlIGRvX2J1aWxkCitkb19wb3B1bGF0ZV9zeXNyb290W3Bvc3RmdW5jc10gKz0gImRvX3FhX3N0YWdpbmcgIgorCisjIENoZWNrIGJyb2tlbiBjb25maWcubG9nIGZpbGVzLCBmb3IgcGFja2FnZXMgcmVxdWlyaW5nIEdldHRleHQgd2hpY2ggZG9uJ3QKKyMgaGF2ZSBpdCBpbiBERVBFTkRTIGFuZCBmb3IgY29ycmVjdCBMSUNfRklMRVNfQ0hLU1VNCisjYWRkdGFzayBxYV9jb25maWd1cmUgYWZ0ZXIgZG9fY29uZmlndXJlIGJlZm9yZSBkb19jb21waWxlCitkb19jb25maWd1cmVbcG9zdGZ1bmNzXSArPSAiZG9fcWFfY29uZmlndXJlICIKKworIyBDaGVjayBkb2VzIFMgZXhpc3QuCitkb191bnBhY2tbcG9zdGZ1bmNzXSArPSAiZG9fcWFfdW5wYWNrIgorCitweXRob24gKCkgeworICAgIHRlc3RzID0gZC5nZXRWYXIoJ0FMTF9RQScsIFRydWUpLnNwbGl0KCkKKyAgICBpZiAiZGVza3RvcCIgaW4gdGVzdHM6CisgICAgICAgIGQuYXBwZW5kVmFyKCJQQUNLQUdFX0RFUEVORFMiLCAiIGRlc2t0b3AtZmlsZS11dGlscy1uYXRpdmUiKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBDaGVjayB2YXJpb3VzIHZhcmlhYmxlcworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyBDaGVja2luZyAke0ZJTEVTRVhUUkFQQVRIU30KKyAgICBleHRyYXBhdGhzID0gKGQuZ2V0VmFyKCJGSUxFU0VYVFJBUEFUSFMiLCBUcnVlKSBvciAiIikKKyAgICBpZiAnX19kZWZhdWx0JyBub3QgaW4gZXh0cmFwYXRocy5zcGxpdCgiOiIpOgorICAgICAgICBtc2cgPSAiRklMRVNFWFRSQVBBVEhTLXZhcmlhYmxlLCBtdXN0IGFsd2F5cyB1c2UgX3ByZXBlbmQgKG9yIF9hcHBlbmQpXG4iCisgICAgICAgIG1zZyArPSAidHlwZSBvZiBhc3NpZ25tZW50LCBhbmQgZG9uJ3QgZm9yZ2V0IHRoZSBjb2xvbi5cbiIKKyAgICAgICAgbXNnICs9ICJQbGVhc2UgYXNzaWduIGl0IHdpdGggdGhlIGZvcm1hdCBvZjpcbiIKKyAgICAgICAgbXNnICs9ICIgIEZJTEVTRVhUUkFQQVRIU19hcHBlbmQgOj0gXCI6JHtUSElTRElSfS9Zb3VyX0ZpbGVzX1BhdGhcIiBvclxuIgorICAgICAgICBtc2cgKz0gIiAgRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gXCIke1RISVNESVJ9L1lvdXJfRmlsZXNfUGF0aDpcIlxuIgorICAgICAgICBtc2cgKz0gImluIHlvdXIgYmJhcHBlbmQgZmlsZVxuXG4iCisgICAgICAgIG1zZyArPSAiWW91ciBpbmNvcnJlY3QgYXNzaWdubWVudCBpczpcbiIKKyAgICAgICAgbXNnICs9ICIlc1xuIiAlIGV4dHJhcGF0aHMKKyAgICAgICAgYmIud2Fybihtc2cpCisKKyAgICBpZiBkLmdldFZhcignZG9fc3RhZ2UnLCBUcnVlKSBpcyBub3QgTm9uZToKKyAgICAgICAgYmIuZmF0YWwoIkxlZ2FjeSBzdGFnaW5nIGZvdW5kIGZvciAlcyBhcyBpdCBoYXMgYSBkb19zdGFnZSBmdW5jdGlvbi4gVGhpcyB3aWxsIG5lZWQgY29udmVyc2lvbiB0byBhIGRvX2luc3RhbGwgb3Igb2Z0ZW4gc2ltcGx5IHJlbW92YWwgdG8gd29yayB3aXRoIE9FLWNvcmUiICUgZC5nZXRWYXIoIkZJTEUiLCBUcnVlKSkKKworICAgIG92ZXJyaWRlcyA9IGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKS5zcGxpdCgnOicpCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGlmIHBuIGluIG92ZXJyaWRlczoKKyAgICAgICAgbXNnID0gJ1JlY2lwZSAlcyBoYXMgUE4gb2YgIiVzIiB3aGljaCBpcyBpbiBPVkVSUklERVMsIHRoaXMgY2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGJlaGF2aW91ci4nICUgKGQuZ2V0VmFyKCJGSUxFIiwgVHJ1ZSksIHBuKQorICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigicG4tb3ZlcnJpZGVzIiwgbXNnLCBkKQorCisgICAgaXNzdWVzID0gW10KKyAgICBpZiAoZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgIGZvciBkZXAgaW4gKGQuZ2V0VmFyKCdRQURFUEVORFMnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcGFja2FnZV9xYScsICdkZXBlbmRzJywgIiAlczpkb19wb3B1bGF0ZV9zeXNyb290IiAlIGRlcCkKKyAgICAgICAgZm9yIHZhciBpbiAnUkRFUEVORFMnLCAnUlJFQ09NTUVORFMnLCAnUlNVR0dFU1RTJywgJ1JDT05GTElDVFMnLCAnUlBST1ZJREVTJywgJ1JSRVBMQUNFUycsICdGSUxFUycsICdwa2dfcHJlaW5zdCcsICdwa2dfcG9zdGluc3QnLCAncGtnX3ByZXJtJywgJ3BrZ19wb3N0cm0nLCAnQUxMT1dfRU1QVFknOgorICAgICAgICAgICAgaWYgZC5nZXRWYXIodmFyLCBGYWxzZSk6CisgICAgICAgICAgICAgICAgaXNzdWVzLmFwcGVuZCh2YXIpCisKKyAgICAgICAgZmFrZXJvb3RfdGVzdHMgPSBkLmdldFZhcignRkFLRVJPT1RfUUEnLCBUcnVlKS5zcGxpdCgpCisgICAgICAgIGlmIHNldCh0ZXN0cykgJiBzZXQoZmFrZXJvb3RfdGVzdHMpOgorICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19wYWNrYWdlX3FhJywgJ2Zha2Vyb290JywgJzEnKQorICAgICAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlX3FhJywgJ2RlcGVuZHMnLCAnIHZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorICAgIGVsc2U6CisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fcGFja2FnZV9xYScsICdyZGVwdGFzaycsICcnKQorICAgIGZvciBpIGluIGlzc3VlczoKKyAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInBrZ3ZhcmNoZWNrIiwgIiVzOiBWYXJpYWJsZSAlcyBpcyBzZXQgYXMgbm90IGJlaW5nIHBhY2thZ2Ugc3BlY2lmaWMsIHBsZWFzZSBmaXggdGhpcy4iICUgKGQuZ2V0VmFyKCJGSUxFIiwgVHJ1ZSksIGkpLCBkKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLWFyY2guYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC1hcmNoLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjExYjcyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC1hcmNoLmJiY2xhc3MKQEAgLTAsMCArMSw1OSBAQAorIworIyBzZXQgdGhlIEFSQ0ggZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIGtlcm5lbCBjb21waWxhdGlvbiAoaW5jbHVkaW5nCisjIG1vZHVsZXMpLiByZXR1cm4gdmFsdWUgbXVzdCBtYXRjaCBvbmUgb2YgdGhlIGFyY2hpdGVjdHVyZSBkaXJlY3RvcmllcworIyBpbiB0aGUga2VybmVsIHNvdXJjZSAiYXJjaCIgZGlyZWN0b3J5CisjCisKK3ZhbGlkX2FyY2hzID0gImFscGhhIGNyaXMgaWE2NCBcCisgICAgICAgICAgICAgICBpMzg2IHg4NiBcCisgICAgICAgICAgICAgICBtNjhrbm9tbXUgbTY4ayBwcGMgcG93ZXJwYyBwb3dlcnBjNjQgcHBjNjQgIFwKKyAgICAgICAgICAgICAgIHNwYXJjIHNwYXJjNjQgXAorICAgICAgICAgICAgICAgYXJtIGFhcmNoNjQgXAorICAgICAgICAgICAgICAgbTMyciBtaXBzIFwKKyAgICAgICAgICAgICAgIHNoIHNoNjQgdW0gaDgzMDAgICBcCisgICAgICAgICAgICAgICBwYXJpc2MgczM5MCAgdjg1MCBcCisgICAgICAgICAgICAgICBhdnIzMiBibGFja2ZpbiBcCisgICAgICAgICAgICAgICBtaWNyb2JsYXplIgorCitkZWYgbWFwX2tlcm5lbF9hcmNoKGEsIGQpOgorICAgIGltcG9ydCByZQorCisgICAgdmFsaWRfYXJjaHMgPSBkLmdldFZhcigndmFsaWRfYXJjaHMnLCBUcnVlKS5zcGxpdCgpCisKKyAgICBpZiAgIHJlLm1hdGNoKCcoaS44NnxhdGhsb258eDg2LjY0KSQnLCBhKTogIHJldHVybiAneDg2JworICAgIGVsaWYgcmUubWF0Y2goJ2FybWViJCcsIGEpOiAgICAgICAgICAgICAgICAgcmV0dXJuICdhcm0nCisgICAgZWxpZiByZS5tYXRjaCgnYWFyY2g2NCQnLCBhKTogICAgICAgICAgICAgICByZXR1cm4gJ2FybTY0JworICAgIGVsaWYgcmUubWF0Y2goJ2FhcmNoNjRfYmUkJywgYSk6ICAgICAgICAgICAgcmV0dXJuICdhcm02NCcKKyAgICBlbGlmIHJlLm1hdGNoKCdtaXBzKGVsfDY0fDY0ZWwpJCcsIGEpOiAgICAgIHJldHVybiAnbWlwcycKKyAgICBlbGlmIHJlLm1hdGNoKCdwKHBjfG93ZXJwYykofDY0KScsIGEpOiAgICAgIHJldHVybiAncG93ZXJwYycKKyAgICBlbGlmIHJlLm1hdGNoKCdzaCgzfDQpJCcsIGEpOiAgICAgICAgICAgICAgIHJldHVybiAnc2gnCisgICAgZWxpZiByZS5tYXRjaCgnYmZpbicsIGEpOiAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2JsYWNrZmluJworICAgIGVsaWYgcmUubWF0Y2goJ21pY3JvYmxhemVlW2JsXScsIGEpOiAgICAgICAgcmV0dXJuICdtaWNyb2JsYXplJworICAgIGVsaWYgYSBpbiB2YWxpZF9hcmNoczogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEKKyAgICBlbHNlOgorICAgICAgICBiYi5lcnJvcigiY2Fubm90IG1hcCAnJXMnIHRvIGEgbGludXgga2VybmVsIGFyY2hpdGVjdHVyZSIgJSBhKQorCitleHBvcnQgQVJDSCA9ICIke0BtYXBfa2VybmVsX2FyY2goZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSksIGQpfSIKKworZGVmIG1hcF91Ym9vdF9hcmNoKGEsIGQpOgorICAgIGltcG9ydCByZQorCisgICAgaWYgICByZS5tYXRjaCgncChwY3xvd2VycGMpKHw2NCknLCBhKTogcmV0dXJuICdwcGMnCisgICAgZWxpZiByZS5tYXRjaCgnaS44NiQnLCBhKTogcmV0dXJuICd4ODYnCisgICAgcmV0dXJuIGEKKworZXhwb3J0IFVCT09UX0FSQ0ggPSAiJHtAbWFwX3Vib290X2FyY2goZC5nZXRWYXIoJ0FSQ0gnLCBUcnVlKSwgZCl9IgorCisjIFNldCBUQVJHRVRfPz9fS0VSTkVMX0FSQ0ggaW4gdGhlIG1hY2hpbmUgLmNvbmYgdG8gc2V0IGFyY2hpdGVjdHVyZQorIyBzcGVjaWZpYyBvcHRpb25zIG5lY2Vzc2FyeSBmb3IgYnVpbGRpbmcgdGhlIGtlcm5lbCBhbmQgbW9kdWxlcy4KK1RBUkdFVF9DQ19LRVJORUxfQVJDSCA/PSAiIgorSE9TVF9DQ19LRVJORUxfQVJDSCA/PSAiJHtUQVJHRVRfQ0NfS0VSTkVMX0FSQ0h9IgorVEFSR0VUX0xEX0tFUk5FTF9BUkNIID89ICIiCitIT1NUX0xEX0tFUk5FTF9BUkNIID89ICIke1RBUkdFVF9MRF9LRVJORUxfQVJDSH0iCitUQVJHRVRfQVJfS0VSTkVMX0FSQ0ggPz0gIiIKK0hPU1RfQVJfS0VSTkVMX0FSQ0ggPz0gIiR7VEFSR0VUX0FSX0tFUk5FTF9BUkNIfSIKKworS0VSTkVMX0NDID0gIiR7Q0NBQ0hFfSR7SE9TVF9QUkVGSVh9Z2NjICR7SE9TVF9DQ19LRVJORUxfQVJDSH0gLWZ1c2UtbGQ9YmZkIgorS0VSTkVMX0xEID0gIiR7Q0NBQ0hFfSR7SE9TVF9QUkVGSVh9bGQuYmZkICR7SE9TVF9MRF9LRVJORUxfQVJDSH0iCitLRVJORUxfQVIgPSAiJHtDQ0FDSEV9JHtIT1NUX1BSRUZJWH1hciAke0hPU1RfQVJfS0VSTkVMX0FSQ0h9IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwtZml0aW1hZ2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC1maXRpbWFnZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNTZhNTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwtZml0aW1hZ2UuYmJjbGFzcwpAQCAtMCwwICsxLDIzNCBAQAoraW5oZXJpdCBrZXJuZWwtdWJvb3QKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBrZXJuZWx0eXBlID0gZC5nZXRWYXIoJ0tFUk5FTF9JTUFHRVRZUEUnLCBUcnVlKQorICAgIGlmIGtlcm5lbHR5cGUgPT0gJ2ZpdEltYWdlJzoKKyAgICAgICAgZGVwZW5kcyA9IGQuZ2V0VmFyKCJERVBFTkRTIiwgVHJ1ZSkKKyAgICAgICAgZGVwZW5kcyA9ICIlcyB1LWJvb3QtbWtpbWFnZS1uYXRpdmUgZHRjLW5hdGl2ZSIgJSBkZXBlbmRzCisgICAgICAgIGQuc2V0VmFyKCJERVBFTkRTIiwgZGVwZW5kcykKKworCSMgT3ZlcnJpZGUgS0VSTkVMX0lNQUdFVFlQRV9GT1JfTUFLRSB2YXJpYWJsZSwgd2hpY2ggaXMgaW50ZXJuYWwKKwkjIHRvIGtlcm5lbC5iYmNsYXNzIC4gV2UgaGF2ZSB0byBvdmVycmlkZSBpdCwgc2luY2Ugd2UgcGFjayB6SW1hZ2UKKwkjIChhdCBsZWFzdCBmb3Igbm93KSBpbnRvIHRoZSBmaXRJbWFnZSAuCisgICAgICAgIGQuc2V0VmFyKCJLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFIiwgInpJbWFnZSIpCisKKyAgICAgICAgaW1hZ2UgPSBkLmdldFZhcignSU5JVFJBTUZTX0lNQUdFJywgVHJ1ZSkKKyAgICAgICAgaWYgaW1hZ2U6CisgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2Fzc2VtYmxlX2ZpdGltYWdlJywgJ2RlcGVuZHMnLCAnICR7SU5JVFJBTUZTX0lNQUdFfTpkb19yb290ZnMnKQorfQorCisjCisjIEVtaXQgdGhlIGZpdEltYWdlIElUUyBoZWFkZXIKKyMKK2ZpdGltYWdlX2VtaXRfZml0X2hlYWRlcigpIHsKKwljYXQgPDwgRU9GID4+IGZpdC1pbWFnZS5pdHMKKy9kdHMtdjEvOworCisvIHsKKyAgICAgICAgZGVzY3JpcHRpb24gPSAiVS1Cb290IGZpdEltYWdlIGZvciAke0RJU1RST19OQU1FfS8ke1BWfS8ke01BQ0hJTkV9IjsKKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSA8MT47CitFT0YKK30KKworIworIyBFbWl0IHRoZSBmaXRJbWFnZSBzZWN0aW9uIGJpdHMKKyMKKyMgJDEgLi4uIFNlY3Rpb24gYml0IHR5cGU6IGltYWdlc3RhcnQgLSBpbWFnZSBzZWN0aW9uIHN0YXJ0CisjICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mc3RhcnQgIC0gY29uZmlndXJhdGlvbiBzZWN0aW9uIHN0YXJ0CisjICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0ZW5kICAgIC0gc2VjdGlvbiBlbmQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgIGZpdGVuZCAgICAgLSBmaXRpbWFnZSBlbmQKKyMKK2ZpdGltYWdlX2VtaXRfc2VjdGlvbl9tYWludCgpIHsKKwljYXNlICQxIGluCisJaW1hZ2VzdGFydCkKKwkJY2F0IDw8IEVPRiA+PiBmaXQtaW1hZ2UuaXRzCisKKyAgICAgICAgaW1hZ2VzIHsKK0VPRgorCTs7CisJY29uZnN0YXJ0KQorCQljYXQgPDwgRU9GID4+IGZpdC1pbWFnZS5pdHMKKworICAgICAgICBjb25maWd1cmF0aW9ucyB7CitFT0YKKwk7OworCXNlY3RlbmQpCisJCWNhdCA8PCBFT0YgPj4gZml0LWltYWdlLml0cworCX07CitFT0YKKwk7OworCWZpdGVuZCkKKwkJY2F0IDw8IEVPRiA+PiBmaXQtaW1hZ2UuaXRzCit9OworRU9GCisJOzsKKwllc2FjCit9CisKKyMKKyMgRW1pdCB0aGUgZml0SW1hZ2UgSVRTIGtlcm5lbCBzZWN0aW9uCisjCisjICQxIC4uLiBJbWFnZSBjb3VudGVyCisjICQyIC4uLiBQYXRoIHRvIGtlcm5lbCBpbWFnZQorIyAkMyAuLi4gQ29tcHJlc3Npb24gdHlwZQorZml0aW1hZ2VfZW1pdF9zZWN0aW9uX2tlcm5lbCgpIHsKKworCWtlcm5lbF9jc3VtPSJzaGExIgorCisJRU5UUllQT0lOVD0ke1VCT09UX0VOVFJZUE9JTlR9CisJaWYgdGVzdCAtbiAiJHtVQk9PVF9FTlRSWVNZTUJPTH0iOyB0aGVuCisJCUVOVFJZUE9JTlQ9YCR7SE9TVF9QUkVGSVh9bm0gJHtTfS92bWxpbnV4IHwgXAorCQkJYXdrICckMz09IiR7VUJPT1RfRU5UUllTWU1CT0x9IiB7cHJpbnQgJDF9J2AKKwlmaQorCisJY2F0IDw8IEVPRiA+PiBmaXQtaW1hZ2UuaXRzCisgICAgICAgICAgICAgICAga2VybmVsQCR7MX0geworICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiTGludXgga2VybmVsIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSAvaW5jYmluLygiJHsyfSIpOworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICJrZXJuZWwiOworICAgICAgICAgICAgICAgICAgICAgICAgYXJjaCA9ICIke1VCT09UX0FSQ0h9IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zID0gImxpbnV4IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uID0gIiR7M30iOworICAgICAgICAgICAgICAgICAgICAgICAgbG9hZCA9IDwke1VCT09UX0xPQURBRERSRVNTfT47CisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeSA9IDwke0VOVFJZUE9JTlR9PjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hAMSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZ28gPSAiJHtrZXJuZWxfY3N1bX0iOworICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9OworRU9GCit9CisKKyMKKyMgRW1pdCB0aGUgZml0SW1hZ2UgSVRTIERUQiBzZWN0aW9uCisjCisjICQxIC4uLiBJbWFnZSBjb3VudGVyCisjICQyIC4uLiBQYXRoIHRvIERUQiBpbWFnZQorZml0aW1hZ2VfZW1pdF9zZWN0aW9uX2R0YigpIHsKKworCWR0Yl9jc3VtPSJzaGExIgorCisJY2F0IDw8IEVPRiA+PiBmaXQtaW1hZ2UuaXRzCisgICAgICAgICAgICAgICAgZmR0QCR7MX0geworICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiRmxhdHRlbmVkIERldmljZSBUcmVlIGJsb2IiOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IC9pbmNiaW4vKCIkezJ9Iik7CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gImZsYXRfZHQiOworICAgICAgICAgICAgICAgICAgICAgICAgYXJjaCA9ICIke1VCT09UX0FSQ0h9IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uID0gIm5vbmUiOworICAgICAgICAgICAgICAgICAgICAgICAgaGFzaEAxIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnbyA9ICIke2R0Yl9jc3VtfSI7CisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH07CitFT0YKK30KKworIworIyBFbWl0IHRoZSBmaXRJbWFnZSBJVFMgY29uZmlndXJhdGlvbiBzZWN0aW9uCisjCisjICQxIC4uLiBMaW51eCBrZXJuZWwgSUQKKyMgJDIgLi4uIERUQiBpbWFnZSBJRAorZml0aW1hZ2VfZW1pdF9zZWN0aW9uX2NvbmZpZygpIHsKKworCWNvbmZfY3N1bT0ic2hhMSIKKworCSMgVGVzdCBpZiB3ZSBoYXZlIGFueSBEVEJzIGF0IGFsbAorCWlmIFsgLXogIiR7Mn0iIF0gOyB0aGVuCisJCWNvbmZfZGVzYz0iQm9vdCBMaW51eCBrZXJuZWwiCisJCWZkdF9saW5lPSIiCisJZWxzZQorCQljb25mX2Rlc2M9IkJvb3QgTGludXgga2VybmVsIHdpdGggRkRUIGJsb2IiCisJCWZkdF9saW5lPSJmZHQgPSBcImZkdEAkezJ9XCI7IgorCWZpCisJa2VybmVsX2xpbmU9Imtlcm5lbCA9IFwia2VybmVsQCR7MX1cIjsiCisKKwljYXQgPDwgRU9GID4+IGZpdC1pbWFnZS5pdHMKKyAgICAgICAgICAgICAgICBkZWZhdWx0ID0gImNvbmZAMSI7CisgICAgICAgICAgICAgICAgY29uZkAxIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gIiR7Y29uZl9kZXNjfSI7CisJCQkke2tlcm5lbF9saW5lfQorCQkJJHtmZHRfbGluZX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hAMSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZ28gPSAiJHtjb25mX2NzdW19IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfTsKK0VPRgorfQorCitkb19hc3NlbWJsZV9maXRpbWFnZSgpIHsKKwlpZiB0ZXN0ICJ4JHtLRVJORUxfSU1BR0VUWVBFfSIgPSAieGZpdEltYWdlIiA7IHRoZW4KKwkJa2VybmVsY291bnQ9MQorCQlkdGJjb3VudD0iIgorCQlybSAtZiBmaXQtaW1hZ2UuaXRzCisKKwkJZml0aW1hZ2VfZW1pdF9maXRfaGVhZGVyCisKKwkJIworCQkjIFN0ZXAgMTogUHJlcGFyZSBhIGtlcm5lbCBpbWFnZSBzZWN0aW9uLgorCQkjCisJCWZpdGltYWdlX2VtaXRfc2VjdGlvbl9tYWludCBpbWFnZXN0YXJ0CisKKwkJdWJvb3RfcHJlcF9raW1hZ2UKKwkJZml0aW1hZ2VfZW1pdF9zZWN0aW9uX2tlcm5lbCAiJHtrZXJuZWxjb3VudH0iIGxpbnV4LmJpbiAiJHtsaW51eF9jb21wfSIKKworCQkjCisJCSMgU3RlcCAyOiBQcmVwYXJlIGEgRFRCIGltYWdlIHNlY3Rpb24KKwkJIworCQlpZiB0ZXN0IC1uICIke0tFUk5FTF9ERVZJQ0VUUkVFfSI7IHRoZW4KKwkJCWR0YmNvdW50PTEKKwkJCWZvciBEVEIgaW4gJHtLRVJORUxfREVWSUNFVFJFRX07IGRvCisJCQkJaWYgZWNobyAke0RUQn0gfCBncmVwIC1xICcvZHRzLyc7IHRoZW4KKwkJCQkJYmJ3YXJuICIke0RUQn0gY29udGFpbnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgdGhlIGR0cyBmaWxlLCBidXQgb25seSB0aGUgZHRiIG5hbWUgc2hvdWxkIGJlIHVzZWQuIgorCQkJCQlEVEI9YGJhc2VuYW1lICR7RFRCfSB8IHNlZCAncyxcLmR0cyQsLmR0YixnJ2AKKwkJCQlmaQorCQkJCURUQl9QQVRIPSJhcmNoLyR7QVJDSH0vYm9vdC9kdHMvJHtEVEJ9IgorCQkJCWlmIFsgISAtZSAiJHtEVEJfUEFUSH0iIF07IHRoZW4KKwkJCQkJRFRCX1BBVEg9ImFyY2gvJHtBUkNIfS9ib290LyR7RFRCfSIKKwkJCQlmaQorCisJCQkJZml0aW1hZ2VfZW1pdF9zZWN0aW9uX2R0YiAke2R0YmNvdW50fSAke0RUQl9QQVRIfQorCQkJCWR0YmNvdW50PWBleHByICR7ZHRiY291bnR9ICsgMWAKKwkJCWRvbmUKKwkJZmkKKworCQlmaXRpbWFnZV9lbWl0X3NlY3Rpb25fbWFpbnQgc2VjdGVuZAorCisJCSMgRm9yY2UgdGhlIGZpcnN0IEtlcm5lbCBhbmQgRFRCIGluIHRoZSBkZWZhdWx0IGNvbmZpZworCQlrZXJuZWxjb3VudD0xCisJCWR0YmNvdW50PTEKKworCQkjCisJCSMgU3RlcCAzOiBQcmVwYXJlIGEgY29uZmlndXJhdGlvbnMgc2VjdGlvbgorCQkjCisJCWZpdGltYWdlX2VtaXRfc2VjdGlvbl9tYWludCBjb25mc3RhcnQKKworCQlmaXRpbWFnZV9lbWl0X3NlY3Rpb25fY29uZmlnICR7a2VybmVsY291bnR9ICR7ZHRiY291bnR9CisKKwkJZml0aW1hZ2VfZW1pdF9zZWN0aW9uX21haW50IHNlY3RlbmQKKworCQlmaXRpbWFnZV9lbWl0X3NlY3Rpb25fbWFpbnQgZml0ZW5kCisKKwkJIworCQkjIFN0ZXAgNDogQXNzZW1ibGUgdGhlIGltYWdlCisJCSMKKwkJdWJvb3QtbWtpbWFnZSAtZiBmaXQtaW1hZ2UuaXRzIGFyY2gvJHtBUkNIfS9ib290L2ZpdEltYWdlCisJZmkKK30KKworYWRkdGFzayBhc3NlbWJsZV9maXRpbWFnZSBiZWZvcmUgZG9faW5zdGFsbCBhZnRlciBkb19jb21waWxlCisKK2tlcm5lbF9kb19kZXBsb3lfYXBwZW5kKCkgeworCSMgVXBkYXRlIGRlcGxveSBkaXJlY3RvcnkKKwlpZiB0ZXN0ICJ4JHtLRVJORUxfSU1BR0VUWVBFfSIgPSAieGZpdEltYWdlIiA7IHRoZW4KKwkJY2QgJHtCfQorCQllY2hvICJDb3B5aW5nIGZpdC1pbWFnZS5pdHMgc291cmNlIGZpbGUuLi4iCisJCWl0c19iYXNlX25hbWU9IiR7S0VSTkVMX0lNQUdFVFlQRX0taXRzLSR7UFZ9LSR7UFJ9LSR7TUFDSElORX0tJHtEQVRFVElNRX0iCisJCWl0c19zeW1saW5rX25hbWU9JHtLRVJORUxfSU1BR0VUWVBFfS1pdHMtJHtNQUNISU5FfQorCQlpbnN0YWxsIC1tIDA2NDQgZml0LWltYWdlLml0cyAke0RFUExPWURJUn0vJHtpdHNfYmFzZV9uYW1lfS5pdHMKKwkJbGludXhfYmluX2Jhc2VfbmFtZT0iJHtLRVJORUxfSU1BR0VUWVBFfS1saW51eC5iaW4tJHtQVn0tJHtQUn0tJHtNQUNISU5FfS0ke0RBVEVUSU1FfSIKKwkJbGludXhfYmluX3N5bWxpbmtfbmFtZT0ke0tFUk5FTF9JTUFHRVRZUEV9LWxpbnV4LmJpbi0ke01BQ0hJTkV9CisJCWluc3RhbGwgLW0gMDY0NCBsaW51eC5iaW4gJHtERVBMT1lESVJ9LyR7bGludXhfYmluX2Jhc2VfbmFtZX0uYmluCisKKwkJY2QgJHtERVBMT1lESVJ9CisJCWxuIC1zZiAke2l0c19iYXNlX25hbWV9Lml0cyAke2l0c19zeW1saW5rX25hbWV9Lml0cworCQlsbiAtc2YgJHtsaW51eF9iaW5fYmFzZV9uYW1lfS5iaW4gJHtsaW51eF9iaW5fc3ltbGlua19uYW1lfS5iaW4KKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLWdydWIuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC1ncnViLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYzZjQ4MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC1ncnViLmJiY2xhc3MKQEAgLTAsMCArMSw5MSBAQAorIworIyBXaGlsZSBpbnN0YWxsaW5nIGEgcnBtIHRvIHVwZGF0ZSBrZXJuZWwgb24gYSBkZXBsb3llZCB0YXJnZXQsIGl0IHdpbGwgdXBkYXRlCisjIHRoZSBib290IGFyZWEgYW5kIHRoZSBib290IG1lbnUgd2l0aCB0aGUga2VybmVsIGFzIHRoZSBwcmlvcml0eSBidXQgYWxsb3cKKyMgeW91IHRvIGZhbGwgYmFjayB0byB0aGUgb3JpZ2luYWwga2VybmVsIGFzIHdlbGwuCisjCisjIC0gSW4ga2VybmVsLWltYWdlJ3MgcHJlaW5zdGFsbCBzY3JpcHRsZXQsIGl0IGJhY2tzIHVwIG9yaWdpbmFsIGtlcm5lbCB0byBhdm9pZAorIyAgIHByb2JhYmxlIGNvbmZsaWN0aW9uIHdpdGggdGhlIG5ldyBvbmUuCisjCisjIC0gSW4ga2VybmVsLWltYWdlJ3MgcG9zdGluc3RhbGwgc2NyaXB0bGV0LCBpdCBtb2RpZmllcyBncnViJ3MgY29uZmlnIGZpbGUgdG8KKyMgICB1cGRhdGVzIHRoZSBuZXcga2VybmVsIGFzIHRoZSBib290IHByaW9yaXR5LgorIworCitwa2dfcHJlaW5zdF9rZXJuZWwtaW1hZ2VfYXBwZW5kICgpIHsKKwkjIFBhcnNpbmcgY29uZmxpY3Rpb24KKwlbIC1mICIkRC9ib290L2dydWIvbWVudS5saXN0IiBdICYmIGdydWJjZmc9IiREL2Jvb3QvZ3J1Yi9tZW51Lmxpc3QiCisJWyAtZiAiJEQvYm9vdC9ncnViL2dydWIuY2ZnIiBdICYmIGdydWJjZmc9IiREL2Jvb3QvZ3J1Yi9ncnViLmNmZyIKKwlpZiBbIC1uICIkZ3J1YmNmZyIgXTsgdGhlbgorCQkjIERlcmVmZXJlbmNlIHN5bWxpbmsgdG8gYXZvaWQgY29uZmxpY3Rpb24gd2l0aCBuZXcga2VybmVsIG5hbWUuCisJCWlmIGdyZXAgLXEgIi8ke0tFUk5FTF9JTUFHRVRZUEV9IFwrcm9vdD0iICRncnViY2ZnOyB0aGVuCisJCQlpZiBbIC1MICIkRC9ib290LyR7S0VSTkVMX0lNQUdFVFlQRX0iIF07IHRoZW4KKwkJCQlraW1hZ2U9YHJlYWxwYXRoICREL2Jvb3QvJHtLRVJORUxfSU1BR0VUWVBFfSAyPi9kZXYvbnVsbGAKKwkJCQlpZiBbIC1mICIkRCRraW1hZ2UiIF07IHRoZW4KKwkJCQkJc2VkIC1pICJzOiR7S0VSTkVMX0lNQUdFVFlQRX0gXCtyb290PToke2tpbWFnZSMjKi99IHJvb3Q9OiIgJGdydWJjZmcKKwkJCQlmaQorCQkJZmkKKwkJZmkKKworCQkjIFJlbmFtZSBvbGQga2VybmVsIGlmIGl0IGNvbmZsaWN0cyB3aXRoIG5ldyBrZXJuZWwgbmFtZS4KKwkJaWYgZ3JlcCAtcSAiLyR7S0VSTkVMX0lNQUdFVFlQRX0tJHtLRVJORUxfVkVSU0lPTn0gXCtyb290PSIgJGdydWJjZmc7IHRoZW4KKwkJCWlmIFsgLWYgIiREL2Jvb3QvJHtLRVJORUxfSU1BR0VUWVBFfS0ke0tFUk5FTF9WRVJTSU9OfSIgXTsgdGhlbgorCQkJCXRpbWVzdGFtcD1gZGF0ZSArJXNgCisJCQkJa2ltYWdlPSIkRC9ib290LyR7S0VSTkVMX0lNQUdFVFlQRX0tJHtLRVJORUxfVkVSU0lPTn0tJHRpbWVzdGFtcC1iYWNrIgorCQkJCXNlZCAtaSAiczoke0tFUk5FTF9JTUFHRVRZUEV9LSR7S0VSTkVMX1ZFUlNJT059IFwrcm9vdD06JHtraW1hZ2UjIyovfSByb290PToiICRncnViY2ZnCisJCQkJbXYgIiREL2Jvb3QvJHtLRVJORUxfSU1BR0VUWVBFfS0ke0tFUk5FTF9WRVJTSU9OfSIgIiRraW1hZ2UiCisJCQlmaQorCQlmaQorCWZpCit9CisKK3BrZ19wb3N0aW5zdF9rZXJuZWwtaW1hZ2VfcHJlcGVuZCAoKSB7CisJZ2V0X25ld19ncnViX2NmZygpIHsKKwkJZ3J1YmNmZz0iJDEiCisJCW9sZF9pbWFnZT0iJDIiCisJCXRpdGxlPSJVcGRhdGUgJHtLRVJORUxfSU1BR0VUWVBFfS0ke0tFUk5FTF9WRVJTSU9OfS0ke1BWfSIKKwkJaWYgWyAiJHtncnViY2ZnIyMqL30iID0gImdydWIuY2ZnIiBdOyB0aGVuCisJCQlyb290ZnM9YGdyZXAgIiAqbGludXggXCtbXiBdXCsgXCtyb290PSIgJGdydWJjZmcgLW0gMSB8IFwKKwkJCQkgc2VkICJzIyR7b2xkX2ltYWdlfSMke29sZF9pbWFnZSUvKn0vJHtLRVJORUxfSU1BR0VUWVBFfS0ke0tFUk5FTF9WRVJTSU9OfSMiYAorCisJCQllY2hvICJtZW51ZW50cnkgXCIkdGl0bGVcIiB7IgorCQkJZWNobyAiICAgIHNldCByb290PShoZDAsMSkiCisJCQllY2hvICIkcm9vdGZzIgorCQkJZWNobyAifSIKKwkJZWxpZiBbICIke2dydWJjZmcjIyovfSIgPSAibWVudS5saXN0IiBdOyB0aGVuCisJCQlyb290ZnM9YGdyZXAgImtlcm5lbCBcK1teIF1cKyBcK3Jvb3Q9IiAkZ3J1YmNmZyAtbSAxIHwgXAorCQkJCSBzZWQgInMjJHtvbGRfaW1hZ2V9IyR7b2xkX2ltYWdlJS8qfS8ke0tFUk5FTF9JTUFHRVRZUEV9LSR7S0VSTkVMX1ZFUlNJT059IyJgCisKKwkJCWVjaG8gImRlZmF1bHQgMCIKKwkJCWVjaG8gInRpbWVvdXQgMzAiCisJCQllY2hvICJ0aXRsZSAkdGl0bGUiCisJCQllY2hvICJyb290ICAoaGQwLDApIgorCQkJZWNobyAiJHJvb3RmcyIKKwkJZmkKKwl9CisKKwlnZXRfb2xkX2dydWJfY2ZnKCkgeworCQlncnViY2ZnPSIkMSIKKwkJaWYgWyAiJHtncnViY2ZnIyMqL30iID0gImdydWIuY2ZnIiBdOyB0aGVuCisJCQljYXQgIiRncnViY2ZnIgorCQllbGlmIFsgIiR7Z3J1YmNmZyMjKi99IiA9ICJtZW51Lmxpc3QiIF07IHRoZW4KKwkJCXNlZCAtZSAnL15kZWZhdWx0L2QnIC1lICcvXnRpbWVvdXQvZCcgIiRncnViY2ZnIgorCQlmaQorCX0KKworCWlmIFsgLWYgIiREL2Jvb3QvZ3J1Yi9ncnViLmNmZyIgXTsgdGhlbgorCQlncnViY2ZnPSIkRC9ib290L2dydWIvZ3J1Yi5jZmciCisJCW9sZF9pbWFnZT1gZ3JlcCAnICpsaW51eCBcK1teIF1cKyBcK3Jvb3Q9JyAtbSAxICIkZ3J1YmNmZyIgfCBhd2sgJ3twcmludCAkMn0nYAorCWVsaWYgWyAtZiAiJEQvYm9vdC9ncnViL21lbnUubGlzdCIgXTsgdGhlbgorCQlncnViY2ZnPSIkRC9ib290L2dydWIvbWVudS5saXN0IgorCQlvbGRfaW1hZ2U9YGdyZXAgJ15rZXJuZWwgXCtbXiBdXCsgXCtyb290PScgLW0gMSAiJGdydWJjZmciIHwgYXdrICd7cHJpbnQgJDJ9J2AKKwlmaQorCisJIyBEb24ndCB1cGRhdGUgZ3J1YmNmZyBhdCBmaXJzdCBpbnN0YWxsIHdoaWxlIG9sZCBiekltYWdlIGRvZXNuJ3QgZXhpc3QuCisJaWYgWyAtZiAiJEQvYm9vdC8ke29sZF9pbWFnZSMjKi99IiBdOyB0aGVuCisJCWdydWJjZmd0bXA9IiRncnViY2ZnLnRtcCIKKwkJZ2V0X25ld19ncnViX2NmZyAiJGdydWJjZmciICIkb2xkX2ltYWdlIiAgPiAkZ3J1YmNmZ3RtcAorCQlnZXRfb2xkX2dydWJfY2ZnICIkZ3J1YmNmZyIgPj4gJGdydWJjZmd0bXAKKwkJbXYgJGdydWJjZmd0bXAgJGdydWJjZmcKKwkJZWNobyAiQ2F1dGlvbiEgVXBkYXRlIGtlcm5lbCBtYXkgYWZmZWN0IGtlcm5lbC1tb2R1bGUhIgorCWZpCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC1tb2R1bGUtc3BsaXQuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC1tb2R1bGUtc3BsaXQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWE3MGU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLW1vZHVsZS1zcGxpdC5iYmNsYXNzCkBAIC0wLDAgKzEsMjAzIEBACitwa2dfcG9zdGluc3RfbW9kdWxlcyAoKSB7CitpZiBbIC16ICIkRCIgXTsgdGhlbgorCWRlcG1vZCAtYSAke0tFUk5FTF9WRVJTSU9OfQorZWxzZQorCSMgaW1hZ2UuYmJjbGFzcyB3aWxsIGNhbGwgZGVwbW9kd3JhcHBlciBhZnRlciBldmVyeXRoaW5nIGlzIGluc3RhbGxlZCwKKwkjIG5vIG5lZWQgdG8gZG8gaXQgaGVyZSBhcyB3ZWxsCisJOgorZmkKK30KKworcGtnX3Bvc3RybV9tb2R1bGVzICgpIHsKK2lmIFsgLXogIiREIiBdOyB0aGVuCisJZGVwbW9kIC1hICR7S0VSTkVMX1ZFUlNJT059CitlbHNlCisJZGVwbW9kd3JhcHBlciAtYSAtYiAkRCAke0tFUk5FTF9WRVJTSU9OfQorZmkKK30KKworYXV0b2xvYWRfcG9zdGluc3RfZnJhZ21lbnQoKSB7CitpZiBbIHgiJEQiID0gIngiIF07IHRoZW4KKwltb2Rwcm9iZSAlcyB8fCB0cnVlCitmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L21vZHVsZXMtbG9hZC5kLyAke0R9JHtzeXNjb25mZGlyfS9tb2Rwcm9iZS5kLworfQorCitQQUNLQUdFU1BMSVRGVU5DU19wcmVwZW5kID0gInNwbGl0X2tlcm5lbF9tb2R1bGVfcGFja2FnZXMgIgorCitLRVJORUxfTU9EVUxFU19NRVRBX1BBQ0tBR0UgPz0gImtlcm5lbC1tb2R1bGVzIgorCitweXRob24gc3BsaXRfa2VybmVsX21vZHVsZV9wYWNrYWdlcyAoKSB7CisgICAgaW1wb3J0IHJlCisKKyAgICBtb2RpbmZvZXhwID0gcmUuY29tcGlsZSgiKFtePV0rKT0oLiopIikKKyAgICBrZXJ2ZXJyZXhwID0gcmUuY29tcGlsZSgnXiguKi1oaC4qKVtcLlwrXS4qJCcpCisgICAgZGVwbW9kcGF0MCA9IHJlLmNvbXBpbGUoIl4oLipcLms/byk6Li4qJCIpCisgICAgZGVwbW9kcGF0MSA9IHJlLmNvbXBpbGUoIl4oLipcLms/byk6XHMqKC4qXC5rP28pXHMqJCIpCisgICAgZGVwbW9kcGF0MiA9IHJlLmNvbXBpbGUoIl4oLipcLms/byk6XHMqKC4qXC5rP28pXHMqXFxcJCIpCisgICAgZGVwbW9kcGF0MyA9IHJlLmNvbXBpbGUoIl5cdCguKlwuaz9vKVxzKlxcXCQiKQorICAgIGRlcG1vZHBhdDQgPSByZS5jb21waWxlKCJeXHQoLipcLms/bylccyokIikKKworICAgIGRlZiBleHRyYWN0X21vZGluZm8oZmlsZSk6CisgICAgICAgIGltcG9ydCB0ZW1wZmlsZSwgc3VicHJvY2VzcworICAgICAgICB0ZW1wZmlsZS50ZW1wZGlyID0gZC5nZXRWYXIoIldPUktESVIiLCBUcnVlKQorICAgICAgICB0ZiA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICB0bXBmaWxlID0gdGZbMV0KKyAgICAgICAgY21kID0gIiVzb2JqY29weSAtaiAubW9kaW5mbyAtTyBiaW5hcnkgJXMgJXMiICUgKGQuZ2V0VmFyKCJIT1NUX1BSRUZJWCIsIFRydWUpIG9yICIiLCBmaWxlLCB0bXBmaWxlKQorICAgICAgICBzdWJwcm9jZXNzLmNhbGwoY21kLCBzaGVsbD1UcnVlKQorICAgICAgICBmID0gb3Blbih0bXBmaWxlKQorICAgICAgICBsID0gZi5yZWFkKCkuc3BsaXQoIlwwMDAiKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgb3MuY2xvc2UodGZbMF0pCisgICAgICAgIG9zLnVubGluayh0bXBmaWxlKQorICAgICAgICB2YWxzID0ge30KKyAgICAgICAgZm9yIGkgaW4gbDoKKyAgICAgICAgICAgIG0gPSBtb2RpbmZvZXhwLm1hdGNoKGkpCisgICAgICAgICAgICBpZiBub3QgbToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdmFsc1ttLmdyb3VwKDEpXSA9IG0uZ3JvdXAoMikKKyAgICAgICAgcmV0dXJuIHZhbHMKKworICAgIGRlZiBwYXJzZV9kZXBtb2QoKToKKworICAgICAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorCisgICAgICAgIGtlcm5lbHZlciA9IGQuZ2V0VmFyKCdLRVJORUxfVkVSU0lPTicsIFRydWUpCisgICAgICAgIGtlcm5lbHZlcl9zdHJpcHBlZCA9IGtlcm5lbHZlcgorICAgICAgICBtID0ga2VydmVycmV4cC5tYXRjaChrZXJuZWx2ZXIpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBrZXJuZWx2ZXJfc3RyaXBwZWQgPSBtLmdyb3VwKDEpCisgICAgICAgIHN0YWdpbmdfa2VybmVsX2RpciA9IGQuZ2V0VmFyKCJTVEFHSU5HX0tFUk5FTF9CVUlMRERJUiIsIFRydWUpCisgICAgICAgIHN5c3RlbV9tYXBfZmlsZSA9ICIlcy9ib290L1N5c3RlbS5tYXAtJXMiICUgKGR2YXIsIGtlcm5lbHZlcikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHN5c3RlbV9tYXBfZmlsZSk6CisgICAgICAgICAgICBzeXN0ZW1fbWFwX2ZpbGUgPSAiJXMvU3lzdGVtLm1hcC0lcyIgJSAoc3RhZ2luZ19rZXJuZWxfZGlyLCBrZXJuZWx2ZXIpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3lzdGVtX21hcF9maWxlKToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiU3lzdGVtLm1hcC0lcyBkb2VzIG5vdCBleGlzdCBpbiAnJXMvYm9vdCcgbm9yIFNUQUdJTkdfS0VSTkVMX0JVSUxERElSICclcyciICUgKGtlcm5lbHZlciwgZHZhciwgc3RhZ2luZ19rZXJuZWxfZGlyKSkKKworICAgICAgICBjbWQgPSAiZGVwbW9kIC1uIC1hIC1iICVzIC1GICVzICVzIiAlIChkdmFyLCBzeXN0ZW1fbWFwX2ZpbGUsIGtlcm5lbHZlcl9zdHJpcHBlZCkKKyAgICAgICAgZiA9IG9zLnBvcGVuKGNtZCwgJ3InKQorCisgICAgICAgIGRlcHMgPSB7fQorICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgIHdoaWxlIGxpbmU6CisgICAgICAgICAgICBpZiBub3QgZGVwbW9kcGF0MC5tYXRjaChsaW5lKToKKyAgICAgICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIG0xID0gZGVwbW9kcGF0MS5tYXRjaChsaW5lKQorICAgICAgICAgICAgaWYgbTE6CisgICAgICAgICAgICAgICAgZGVwc1ttMS5ncm91cCgxKV0gPSBtMS5ncm91cCgyKS5zcGxpdCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG0yID0gZGVwbW9kcGF0Mi5tYXRjaChsaW5lKQorICAgICAgICAgICAgICAgIGlmIG0yOgorICAgICAgICAgICAgICAgICAgICBkZXBzW20yLmdyb3VwKDEpXSA9IG0yLmdyb3VwKDIpLnNwbGl0KCkKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgICAgICBtMyA9IGRlcG1vZHBhdDMubWF0Y2gobGluZSkKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgbTM6CisgICAgICAgICAgICAgICAgICAgICAgICBkZXBzW20yLmdyb3VwKDEpXS5leHRlbmQobTMuZ3JvdXAoMSkuc3BsaXQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG0zID0gZGVwbW9kcGF0My5tYXRjaChsaW5lKQorICAgICAgICAgICAgICAgICAgICBtNCA9IGRlcG1vZHBhdDQubWF0Y2gobGluZSkKKyAgICAgICAgICAgICAgICAgICAgZGVwc1ttMi5ncm91cCgxKV0uZXh0ZW5kKG00Lmdyb3VwKDEpLnNwbGl0KCkpCisgICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICByZXR1cm4gZGVwcworCisgICAgZGVmIGdldF9kZXBlbmRlbmNpZXMoZmlsZSwgcGF0dGVybiwgZm9ybWF0KToKKyAgICAgICAgIyBmaWxlIG5vIGxvbmdlciBpbmNsdWRlcyBQS0dECisgICAgICAgIGZpbGUgPSBmaWxlLnJlcGxhY2UoZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKSBvciAnJywgJycsIDEpCisgICAgICAgICMgaW5zdGVhZCBpcyBwcmVmaXhlZCB3aXRoIC9saWIvbW9kdWxlcy8ke0tFUk5FTF9WRVJTSU9OfQorICAgICAgICBmaWxlID0gZmlsZS5yZXBsYWNlKCIvbGliL21vZHVsZXMvJXMvIiAlIGQuZ2V0VmFyKCdLRVJORUxfVkVSU0lPTicsIFRydWUpIG9yICcnLCAnJywgMSkKKworICAgICAgICBpZiBmaWxlIGluIG1vZHVsZV9kZXBzOgorICAgICAgICAgICAgZGVwZW5kZW5jaWVzID0gW10KKyAgICAgICAgICAgIGZvciBpIGluIG1vZHVsZV9kZXBzW2ZpbGVdOgorICAgICAgICAgICAgICAgIG0gPSByZS5tYXRjaChwYXR0ZXJuLCBvcy5wYXRoLmJhc2VuYW1lKGkpKQorICAgICAgICAgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIG9uID0gbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUobS5ncm91cCgxKSkKKyAgICAgICAgICAgICAgICBkZXBlbmRlbmN5X3BrZyA9IGZvcm1hdCAlIG9uCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzLmFwcGVuZChkZXBlbmRlbmN5X3BrZykKKyAgICAgICAgICAgIHJldHVybiBkZXBlbmRlbmNpZXMKKyAgICAgICAgcmV0dXJuIFtdCisKKyAgICBkZWYgZnJvYl9tZXRhZGF0YShmaWxlLCBwa2csIHBhdHRlcm4sIGZvcm1hdCwgYmFzZW5hbWUpOgorICAgICAgICB2YWxzID0gZXh0cmFjdF9tb2RpbmZvKGZpbGUpCisKKyAgICAgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKworICAgICAgICAjIElmIGF1dG9sb2FkaW5nIGlzIHJlcXVlc3RlZCwgb3V0cHV0IC9ldGMvbW9kdWxlcy1sb2FkLmQvPG5hbWU+LmNvbmYgYW5kIGFwcGVuZAorICAgICAgICAjIGFwcHJvcHJpYXRlIG1vZHByb2JlIGNvbW1hbmRzIHRvIHRoZSBwb3N0aW5zdAorICAgICAgICBhdXRvbG9hZGxpc3QgPSAoZC5nZXRWYXIoIktFUk5FTF9NT0RVTEVfQVVUT0xPQUQiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBhdXRvbG9hZCA9IGQuZ2V0VmFyKCdtb2R1bGVfYXV0b2xvYWRfJXMnICUgYmFzZW5hbWUsIFRydWUpCisgICAgICAgIGlmIGF1dG9sb2FkIGFuZCBhdXRvbG9hZCA9PSBiYXNlbmFtZToKKyAgICAgICAgICAgIGJiLndhcm4oIm1vZHVsZV9hdXRvbG9hZF8lcyB3YXMgcmVwbGFjZWQgYnkgS0VSTkVMX01PRFVMRV9BVVRPTE9BRCBmb3IgY2FzZXMgd2hlcmUgYmFzZW5hbWUgPT0gbW9kdWxlIG5hbWUsIHBsZWFzZSBkcm9wIGl0IiAlIGJhc2VuYW1lKQorICAgICAgICBpZiBhdXRvbG9hZCBhbmQgYmFzZW5hbWUgbm90IGluIGF1dG9sb2FkbGlzdDoKKyAgICAgICAgICAgIGJiLndhcm4oIm1vZHVsZV9hdXRvbG9hZF8lcyBpcyBkZWZpbmVkIGJ1dCAnJXMnIGlzbid0IGluY2x1ZGVkIGluIEtFUk5FTF9NT0RVTEVfQVVUT0xPQUQsIHBsZWFzZSBhZGQgaXQgdGhlcmUiICUgKGJhc2VuYW1lLCBiYXNlbmFtZSkpCisgICAgICAgIGlmIGJhc2VuYW1lIGluIGF1dG9sb2FkbGlzdDoKKyAgICAgICAgICAgIG5hbWUgPSAnJXMvZXRjL21vZHVsZXMtbG9hZC5kLyVzLmNvbmYnICUgKGR2YXIsIGJhc2VuYW1lKQorICAgICAgICAgICAgZiA9IG9wZW4obmFtZSwgJ3cnKQorICAgICAgICAgICAgaWYgYXV0b2xvYWQ6CisgICAgICAgICAgICAgICAgZm9yIG0gaW4gYXV0b2xvYWQuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnJXNcbicgJSBtKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmLndyaXRlKCclc1xuJyAlIGJhc2VuYW1lKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBwb3N0aW5zdCA9IGQuZ2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHBvc3RpbnN0OgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJwa2dfcG9zdGluc3RfJXMgbm90IGRlZmluZWQiICUgcGtnKQorICAgICAgICAgICAgcG9zdGluc3QgKz0gZC5nZXRWYXIoJ2F1dG9sb2FkX3Bvc3RpbnN0X2ZyYWdtZW50JywgVHJ1ZSkgJSAoYXV0b2xvYWQgb3IgYmFzZW5hbWUpCisgICAgICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCisKKyAgICAgICAgIyBXcml0ZSBvdXQgYW55IG1vZGNvbmYgZnJhZ21lbnQKKyAgICAgICAgbW9kY29uZmxpc3QgPSAoZC5nZXRWYXIoIktFUk5FTF9NT0RVTEVfUFJPQkVDT05GIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgbW9kY29uZiA9IGQuZ2V0VmFyKCdtb2R1bGVfY29uZl8lcycgJSBiYXNlbmFtZSwgVHJ1ZSkKKyAgICAgICAgaWYgbW9kY29uZiBhbmQgYmFzZW5hbWUgaW4gbW9kY29uZmxpc3Q6CisgICAgICAgICAgICBuYW1lID0gJyVzL2V0Yy9tb2Rwcm9iZS5kLyVzLmNvbmYnICUgKGR2YXIsIGJhc2VuYW1lKQorICAgICAgICAgICAgZiA9IG9wZW4obmFtZSwgJ3cnKQorICAgICAgICAgICAgZi53cml0ZSgiJXNcbiIgJSBtb2Rjb25mKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGVsaWYgbW9kY29uZjoKKyAgICAgICAgICAgIGJiLmVycm9yKCJQbGVhc2UgZW5zdXJlIG1vZHVsZSAlcyBpcyBsaXN0ZWQgaW4gS0VSTkVMX01PRFVMRV9QUk9CRUNPTkYgc2luY2UgbW9kdWxlX2NvbmZfJXMgaXMgc2V0IiAlIChiYXNlbmFtZSwgYmFzZW5hbWUpKQorCisgICAgICAgIGZpbGVzID0gZC5nZXRWYXIoJ0ZJTEVTXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgZmlsZXMgPSAiJXMgL2V0Yy9tb2R1bGVzLWxvYWQuZC8lcy5jb25mIC9ldGMvbW9kcHJvYmUuZC8lcy5jb25mIiAlIChmaWxlcywgYmFzZW5hbWUsIGJhc2VuYW1lKQorICAgICAgICBkLnNldFZhcignRklMRVNfJXMnICUgcGtnLCBmaWxlcykKKworICAgICAgICBpZiAiZGVzY3JpcHRpb24iIGluIHZhbHM6CisgICAgICAgICAgICBvbGRfZGVzYyA9IGQuZ2V0VmFyKCdERVNDUklQVElPTl8nICsgcGtnLCBUcnVlKSBvciAiIgorICAgICAgICAgICAgZC5zZXRWYXIoJ0RFU0NSSVBUSU9OXycgKyBwa2csIG9sZF9kZXNjICsgIjsgIiArIHZhbHNbImRlc2NyaXB0aW9uIl0pCisKKyAgICAgICAgcmRlcGVuZHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZC5nZXRWYXIoJ1JERVBFTkRTXycgKyBwa2csIFRydWUpIG9yICIiKQorICAgICAgICBmb3IgZGVwIGluIGdldF9kZXBlbmRlbmNpZXMoZmlsZSwgcGF0dGVybiwgZm9ybWF0KToKKyAgICAgICAgICAgIGlmIG5vdCBkZXAgaW4gcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgcmRlcGVuZHNbZGVwXSA9IFtdCisgICAgICAgIGQuc2V0VmFyKCdSREVQRU5EU18nICsgcGtnLCBiYi51dGlscy5qb2luX2RlcHMocmRlcGVuZHMsIGNvbW1hc2VwPUZhbHNlKSkKKworICAgICAgICAjIEF2b2lkIGF1dG9tYXRpYyAtZGV2IHJlY29tbWVuZGF0aW9ucyBmb3IgbW9kdWxlcyBlbmRpbmcgd2l0aCAtZGV2LgorICAgICAgICBkLnNldFZhckZsYWcoJ1JSRUNPTU1FTkRTXycgKyBwa2csICdub2RlcHJyZWNzJywgMSkKKworICAgIG1vZHVsZV9kZXBzID0gcGFyc2VfZGVwbW9kKCkKKyAgICBtb2R1bGVfcmVnZXggPSAnXiguKilcLms/byQnCisgICAgbW9kdWxlX3BhdHRlcm4gPSAna2VybmVsLW1vZHVsZS0lcycKKworICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF9tb2R1bGVzJywgVHJ1ZSkKKyAgICBwb3N0cm0gPSBkLmdldFZhcigncGtnX3Bvc3RybV9tb2R1bGVzJywgVHJ1ZSkKKworICAgIG1vZHVsZXMgPSBkb19zcGxpdF9wYWNrYWdlcyhkLCByb290PScvbGliL21vZHVsZXMnLCBmaWxlX3JlZ2V4PW1vZHVsZV9yZWdleCwgb3V0cHV0X3BhdHRlcm49bW9kdWxlX3BhdHRlcm4sIGRlc2NyaXB0aW9uPSclcyBrZXJuZWwgbW9kdWxlJywgcG9zdGluc3Q9cG9zdGluc3QsIHBvc3RybT1wb3N0cm0sIHJlY3Vyc2l2ZT1UcnVlLCBob29rPWZyb2JfbWV0YWRhdGEsIGV4dHJhX2RlcGVuZHM9J2tlcm5lbC0lcycgJSAoZC5nZXRWYXIoIktFUk5FTF9WRVJTSU9OIiwgVHJ1ZSkpKQorICAgIGlmIG1vZHVsZXM6CisgICAgICAgIG1ldGFwa2cgPSBkLmdldFZhcignS0VSTkVMX01PRFVMRVNfTUVUQV9QQUNLQUdFJywgVHJ1ZSkKKyAgICAgICAgZC5hcHBlbmRWYXIoJ1JERVBFTkRTXycgKyBtZXRhcGtnLCAnICcrJyAnLmpvaW4obW9kdWxlcykpCisKKyAgICAjIElmIG1vZHVsZXMtbG9hZC5kIGFuZCBtb2Rwcm9iZS5kIGFyZSBlbXB0eSBhdCB0aGlzIHBvaW50LCByZW1vdmUgdGhlbSB0bworICAgICMgYXZvaWQgd2FybmluZ3MuIHJlbW92ZWRpcnMgb25seSByYWlzZXMgYW4gT1NFcnJvciBpZiBhbiBlbXB0eQorICAgICMgZGlyZWN0b3J5IGNhbm5vdCBiZSByZW1vdmVkLgorICAgIGR2YXIgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisgICAgZm9yIGRpciBpbiBbIiVzL2V0Yy9tb2Rwcm9iZS5kIiAlIChkdmFyKSwgIiVzL2V0Yy9tb2R1bGVzLWxvYWQuZCIgJSAoZHZhciksICIlcy9ldGMiICUgKGR2YXIpXToKKyAgICAgICAgaWYgbGVuKG9zLmxpc3RkaXIoZGlyKSkgPT0gMDoKKyAgICAgICAgICAgIG9zLnJtZGlyKGRpcikKK30KKworZG9fcGFja2FnZVt2YXJkZXBzXSArPSAnJHtAIiAiLmpvaW4obWFwKGxhbWJkYSBzOiAibW9kdWxlX2NvbmZfIiArIHMsIChkLmdldFZhcigiS0VSTkVMX01PRFVMRV9QUk9CRUNPTkYiLCBUcnVlKSBvciAiIikuc3BsaXQoKSkpfScKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC11Ym9vdC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLXVib290LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ1ZTdmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC11Ym9vdC5iYmNsYXNzCkBAIC0wLDAgKzEsMjAgQEAKK3Vib290X3ByZXBfa2ltYWdlKCkgeworCWlmIHRlc3QgLWUgYXJjaC8ke0FSQ0h9L2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4IDsgdGhlbgorCQl2bWxpbnV4X3BhdGg9ImFyY2gvJHtBUkNIfS9ib290L2NvbXByZXNzZWQvdm1saW51eCIKKwkJbGludXhfc3VmZml4PSIiCisJCWxpbnV4X2NvbXA9Im5vbmUiCisJZWxzZQorCQl2bWxpbnV4X3BhdGg9InZtbGludXgiCisJCWxpbnV4X3N1ZmZpeD0iLmd6IgorCQlsaW51eF9jb21wPSJnemlwIgorCWZpCisKKwkke09CSkNPUFl9IC1PIGJpbmFyeSAtUiAubm90ZSAtUiAuY29tbWVudCAtUyAiJHt2bWxpbnV4X3BhdGh9IiBsaW51eC5iaW4KKworCWlmIFsgIiR7bGludXhfY29tcH0iICE9ICJub25lIiBdIDsgdGhlbgorCQlnemlwIC05IGxpbnV4LmJpbgorCQltdiAtZiAibGludXguYmluJHtsaW51eF9zdWZmaXh9IiBsaW51eC5iaW4KKwlmaQorCisJZWNobyAiJHtsaW51eF9jb21wfSIKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC11aW1hZ2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC11aW1hZ2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzM5NjViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLXVpbWFnZS5iYmNsYXNzCkBAIC0wLDAgKzEsMzYgQEAKK2luaGVyaXQga2VybmVsLXVib290CisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAga2VybmVsdHlwZSA9IGQuZ2V0VmFyKCdLRVJORUxfSU1BR0VUWVBFJywgVHJ1ZSkKKyAgICBpZiBrZXJuZWx0eXBlID09ICd1SW1hZ2UnOgorICAgICAgICBkZXBlbmRzID0gZC5nZXRWYXIoIkRFUEVORFMiLCBUcnVlKQorICAgICAgICBkZXBlbmRzID0gIiVzIHUtYm9vdC1ta2ltYWdlLW5hdGl2ZSIgJSBkZXBlbmRzCisgICAgICAgIGQuc2V0VmFyKCJERVBFTkRTIiwgZGVwZW5kcykKKworCSMgT3ZlcnJpZGUgS0VSTkVMX0lNQUdFVFlQRV9GT1JfTUFLRSB2YXJpYWJsZSwgd2hpY2ggaXMgaW50ZXJuYWwKKwkjIHRvIGtlcm5lbC5iYmNsYXNzIC4gV2Ugb3ZlcnJpZGUgdGhlIHZhcmlhYmxlIGhlcmUsIHNpbmNlIHdlIG5lZWQKKwkjIHRvIGJ1aWxkIHVJbWFnZSB1c2luZyB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBpZiBhbmQgb25seSBpZgorCSMgS0VFUFVJTUFHRSA9PSB5ZXMuIE90aGVyd2lzZSwgd2UgcGFjayBjb21wcmVzc2VkIHZtbGludXggaW50bworCSMgdGhlIHVJbWFnZSAuCisJaWYgZC5nZXRWYXIoIktFRVBVSU1BR0UiLCBUcnVlKSAhPSAneWVzJzoKKyAgICAgICAgICAgIGQuc2V0VmFyKCJLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFIiwgInpJbWFnZSIpCit9CisKK2RvX3Vib290X21raW1hZ2UoKSB7CisJaWYgdGVzdCAieCR7S0VSTkVMX0lNQUdFVFlQRX0iID0gInh1SW1hZ2UiIDsgdGhlbgorCQlpZiB0ZXN0ICJ4JHtLRUVQVUlNQUdFfSIgIT0gInh5ZXMiIDsgdGhlbgorCQkJdWJvb3RfcHJlcF9raW1hZ2UKKworCQkJRU5UUllQT0lOVD0ke1VCT09UX0VOVFJZUE9JTlR9CisJCQlpZiB0ZXN0IC1uICIke1VCT09UX0VOVFJZU1lNQk9MfSI7IHRoZW4KKwkJCQlFTlRSWVBPSU5UPWAke0hPU1RfUFJFRklYfW5tICR7U30vdm1saW51eCB8IFwKKwkJCQkJYXdrICckMz09IiR7VUJPT1RfRU5UUllTWU1CT0x9IiB7cHJpbnQgJDF9J2AKKwkJCWZpCisKKwkJCXVib290LW1raW1hZ2UgLUEgJHtVQk9PVF9BUkNIfSAtTyBsaW51eCAtVCBrZXJuZWwgLUMgIiR7bGludXhfY29tcH0iIC1hICR7VUJPT1RfTE9BREFERFJFU1N9IC1lICRFTlRSWVBPSU5UIC1uICIke0RJU1RST19OQU1FfS8ke1BWfS8ke01BQ0hJTkV9IiAtZCBsaW51eC5iaW4gYXJjaC8ke0FSQ0h9L2Jvb3QvdUltYWdlCisJCQlybSAtZiBsaW51eC5iaW4KKwkJZmkKKwlmaQorfQorCithZGR0YXNrIHVib290X21raW1hZ2UgYmVmb3JlIGRvX2luc3RhbGwgYWZ0ZXIgZG9fY29tcGlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLXlvY3RvLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwteW9jdG8uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjVmOTRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLXlvY3RvLmJiY2xhc3MKQEAgLTAsMCArMSwzNjggQEAKKyMgcmVtb3ZlIHRhc2tzIHRoYXQgbW9kaWZ5IHRoZSBzb3VyY2UgdHJlZSBpbiBjYXNlIGV4dGVybmFsc3JjIGlzIGluaGVyaXRlZAorU1JDVFJFRUNPVkVSRURUQVNLUyArPSAiZG9fa2VybmVsX2xpbmtfdm1saW51eCBkb19rZXJuZWxfY29uZmlnbWUgZG9fdmFsaWRhdGVfYnJhbmNoZXMgZG9fa2VybmVsX2NvbmZpZ2NoZWNrIGRvX2tlcm5lbF9jaGVja291dCBkb19zaGFyZWRfd29ya2RpciBkb19mZXRjaCBkb191bnBhY2sgZG9fcGF0Y2giCisKKyMgcmV0dXJucyBsb2NhbCAoYWJzb2x1dGUpIHBhdGggbmFtZXMgZm9yIGFsbCB2YWxpZCBwYXRjaGVzIGluIHRoZQorIyBzcmNfdXJpCitkZWYgZmluZF9wYXRjaGVzKGQpOgorICAgIHBhdGNoZXMgPSBzcmNfcGF0Y2hlcyhkKQorICAgIHBhdGNoX2xpc3Q9W10KKyAgICBmb3IgcCBpbiBwYXRjaGVzOgorICAgICAgICBfLCBfLCBsb2NhbCwgXywgXywgXyA9IGJiLmZldGNoLmRlY29kZXVybChwKQorICAgICAgICBwYXRjaF9saXN0LmFwcGVuZChsb2NhbCkKKworICAgIHJldHVybiBwYXRjaF9saXN0CisKKyMgcmV0dXJucyBhbGwgdGhlIGVsZW1lbnRzIGZyb20gdGhlIHNyYyB1cmkgdGhhdCBhcmUgLnNjYyBmaWxlcworZGVmIGZpbmRfc2NjcyhkKToKKyAgICBzb3VyY2VzPXNyY19wYXRjaGVzKGQsIFRydWUpCisgICAgc291cmNlc19saXN0PVtdCisgICAgZm9yIHMgaW4gc291cmNlczoKKyAgICAgICAgYmFzZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKHMpKQorICAgICAgICBpZiBleHQgYW5kIGV4dCBpbiBbIi5zY2MiLCAiLmNmZyJdOgorICAgICAgICAgICAgc291cmNlc19saXN0LmFwcGVuZChzKQorICAgICAgICBlbGlmIGJhc2UgYW5kIGJhc2UgaW4gJ2RlZmNvbmZpZyc6CisgICAgICAgICAgICBzb3VyY2VzX2xpc3QuYXBwZW5kKHMpCisKKyAgICByZXR1cm4gc291cmNlc19saXN0CisKKyMgY2hlY2sgdGhlIFNSQ19VUkkgZm9yICJrbWV0YSIgdHlwZSdkIGdpdCByZXBvc2l0b3JpZXMuIFJldHVybiB0aGUgbmFtZSBvZgorIyB0aGUgcmVwb3NpdG9yeSBhcyBpdCB3aWxsIGJlIGZvdW5kIGluIFdPUktESVIKK2RlZiBmaW5kX2tlcm5lbF9mZWF0dXJlX2RpcnMoZCk6CisgICAgZmVhdHVyZV9kaXJzPVtdCisgICAgZmV0Y2ggPSBiYi5mZXRjaDIuRmV0Y2goW10sIGQpCisgICAgZm9yIHVybCBpbiBmZXRjaC51cmxzOgorICAgICAgICB1cmxkYXRhID0gZmV0Y2gudWRbdXJsXQorICAgICAgICBwYXJtID0gdXJsZGF0YS5wYXJtCisgICAgICAgIHR5cGU9IiIKKyAgICAgICAgaWYgInR5cGUiIGluIHBhcm06CisgICAgICAgICAgICB0eXBlID0gcGFybVsidHlwZSJdCisgICAgICAgIGlmICJkZXN0c3VmZml4IiBpbiBwYXJtOgorICAgICAgICAgICAgZGVzdGRpciA9IHBhcm1bImRlc3RzdWZmaXgiXQorICAgICAgICAgICAgaWYgdHlwZSA9PSAia21ldGEiOgorICAgICAgICAgICAgICAgIGZlYXR1cmVfZGlycy5hcHBlbmQoZGVzdGRpcikKKwkgICAgCisgICAgcmV0dXJuIGZlYXR1cmVfZGlycworCisjIGZpbmQgdGhlIG1hc3Rlci9tYWNoaW5lIHNvdXJjZSBicmFuY2guIEluIHRoZSBzYW1lIHdheSB0aGF0IHRoZSBmZXRjaGVyIHByb2Nlc2VzCisjIGdpdCByZXBvc2l0b3JpZXMgaW4gdGhlIFNSQ19VUkkgd2UgdGFrZSB0aGUgZmlyc3QgcmVwbyBmb3VuZCwgZmlyc3QgYnJhbmNoLgorZGVmIGdldF9tYWNoaW5lX2JyYW5jaChkLCBkZWZhdWx0KToKKyAgICBmZXRjaCA9IGJiLmZldGNoMi5GZXRjaChbXSwgZCkKKyAgICBmb3IgdXJsIGluIGZldGNoLnVybHM6CisgICAgICAgIHVybGRhdGEgPSBmZXRjaC51ZFt1cmxdCisgICAgICAgIHBhcm0gPSB1cmxkYXRhLnBhcm0KKyAgICAgICAgaWYgImJyYW5jaCIgaW4gcGFybToKKyAgICAgICAgICAgIGJyYW5jaGVzID0gdXJsZGF0YS5wYXJtLmdldCgiYnJhbmNoIikuc3BsaXQoJywnKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaGVzWzBdCisJICAgIAorICAgIHJldHVybiBkZWZhdWx0CisKK2RvX2tlcm5lbF9tZXRhZGF0YSgpIHsKKwlzZXQgK2UKKwljZCAke1N9CisJZXhwb3J0IEtNRVRBPSR7S01FVEF9CisKKwkjIGlmIGtlcm5lbCB0b29scyBhcmUgYXZhaWxhYmxlIGluLXRyZWUsIHRoZXkgYXJlIHByZWZlcnJlZAorCSMgYW5kIGFyZSBwbGFjZWQgb24gdGhlIHBhdGggYmVmb3JlIGFueSBleHRlcm5hbCB0b29scy4gVW5sZXNzCisJIyB0aGUgZXh0ZXJuYWwgdG9vbHMgZmxhZyBpcyBzZXQsIGluIHRoYXQgY2FzZSB3ZSBkbyBub3RoaW5nLgorCWlmIFsgLWYgIiR7U30vc2NyaXB0cy91dGlsL2NvbmZpZ21lIiBdOyB0aGVuCisJCWlmIFsgLXogIiR7RVhURVJOQUxfS0VSTkVMX1RPT0xTfSIgXTsgdGhlbgorCQkJUEFUSD0ke1N9L3NjcmlwdHMvdXRpbDoke1BBVEh9CisJCWZpCisJZmkKKworCW1hY2hpbmVfYnJhbmNoPSIke0AgZ2V0X21hY2hpbmVfYnJhbmNoKGQsICIke0tCUkFOQ0h9IiApfSIKKwltYWNoaW5lX3NyY3Jldj0iJHtTUkNSRVZfbWFjaGluZX0iCisJaWYgWyAteiAiJHttYWNoaW5lX3NyY3Jldn0iIF07IHRoZW4KKwkJIyBmYWxsYmFjayB0byBTUkNSRVYgaWYgYSBub24gbWFjaGluZV9tZXRhIHRyZWUgaXMgYmVpbmcgYnVpbHQKKwkJbWFjaGluZV9zcmNyZXY9IiR7U1JDUkVWfSIKKwlmaQorCisJIyBJbiBhIHNpbWlsYXIgbWFubmVyIHRvIHRoZSBrZXJuZWwgaXRzZWxmOgorCSMKKwkjICAgZGVmY29uZmlnOiAkKG9iaikvY29uZgorCSMgICBpZmVxICgkKEtCVUlMRF9ERUZDT05GSUcpLCkKKwkjCSQ8IC0tZGVmY29uZmlnICQoS2NvbmZpZykKKwkjICAgZWxzZQorCSMJQGVjaG8gIioqKiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gaXMgYmFzZWQgb24gJyQoS0JVSUxEX0RFRkNPTkZJRyknIgorCSMJJChRKSQ8IC0tZGVmY29uZmlnPWFyY2gvJChTUkNBUkNIKS9jb25maWdzLyQoS0JVSUxEX0RFRkNPTkZJRykgJChLY29uZmlnKQorCSMgICBlbmRpZgorCSMKKwkjIElmIGEgZGVmY29uZmlnIGlzIHNwZWNpZmllZCB2aWEgdGhlIEtCVUlMRF9ERUZDT05GSUcgdmFyaWFibGUsIHdlIGNvcHkgaXQKKwkjIGZyb20gdGhlIHNvdXJjZSB0cmVlLCBpbnRvIGEgY29tbW9uIGxvY2F0aW9uIGFuZCBub3JtYWxpemVkICJkZWZjb25maWciIG5hbWUsCisJIyB3aGVyZSB0aGUgcmVzdCBvZiB0aGUgcHJvY2VzcyB3aWxsIGluY2x1ZGUgYW5kIGluY29yb3BvcmF0ZSBpdCBpbnRvIHRoZSBidWlsZAorCSMKKwkjIElmIHRoZSBmZXRjaGVyIGhhcyBhbHJlYWR5IHBsYWNlZCBhIGRlZmNvbmZpZyBpbiBXT1JLRElSIChmcm9tIHRoZSBTUkNfVVJJKSwKKwkjIHdlIGRvbid0IG92ZXJ3cml0ZSBpdCwgYnV0IGluc3RlYWQgd2FybiB0aGUgdXNlciB0aGF0IFNSQ19VUkkgZGVmY29uZmlncyB0YWtlCisJIyBwcmVjZW5kZW5jZS4KKwkjCisJaWYgWyAtbiAiJHtLQlVJTERfREVGQ09ORklHfSIgXTsgdGhlbgorCQlpZiBbIC1mICIke1N9L2FyY2gvJHtBUkNIfS9jb25maWdzLyR7S0JVSUxEX0RFRkNPTkZJR30iIF07IHRoZW4KKwkJCWlmIFsgLWYgIiR7V09SS0RJUn0vZGVmY29uZmlnIiBdOyB0aGVuCisJCQkJIyBJZiB0aGUgdHdvIGRlZmNvbmZpZydzIGFyZSBkaWZmZXJlbnQsIHdhcm4gdGhhdCB3ZSBkaWRuJ3Qgb3ZlcndyaXRlIHRoZQorCQkJCSMgb25lIGFscmVhZHkgcGxhY2VkIGluIFdPUktESVIgYnkgdGhlIGZldGNoZXIuCisJCQkJY21wICIke1dPUktESVJ9L2RlZmNvbmZpZyIgIiR7U30vYXJjaC8ke0FSQ0h9L2NvbmZpZ3MvJHtLQlVJTERfREVGQ09ORklHfSIKKwkJCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJCQkJYmJ3YXJuICJkZWZjb25maWcgZGV0ZWN0ZWQgaW4gV09SS0RJUi4gJHtLQlVJTERfREVGQ09ORklHfSBza2lwcGVkIgorCQkJCWZpCisJCQllbHNlCisJCQkJY3AgLWYgJHtTfS9hcmNoLyR7QVJDSH0vY29uZmlncy8ke0tCVUlMRF9ERUZDT05GSUd9ICR7V09SS0RJUn0vZGVmY29uZmlnCisJCQkJc2Njcz0iJHtXT1JLRElSfS9kZWZjb25maWciCisJCQlmaQorCQllbHNlCisJCQliYmZhdGFsICJBIEtCVUlMRF9ERUNPTkZJRyAnJHtLQlVJTERfREVGQ09ORklHfScgd2FzIHNwZWNpZmllZCwgYnV0IG5vdCBwcmVzZW50IGluIHRoZSBzb3VyY2UgdHJlZSIKKwkJZmkKKwlmaQorCisJc2Njcz0iJHNjY3MgJHtAIiAiLmpvaW4oZmluZF9zY2NzKGQpKX0iCisJcGF0Y2hlcz0iJHtAIiAiLmpvaW4oZmluZF9wYXRjaGVzKGQpKX0iCisJZmVhdF9kaXJzPSIke0AiICIuam9pbihmaW5kX2tlcm5lbF9mZWF0dXJlX2RpcnMoZCkpfSIKKworCSMgYWRkIGFueSBleHBsaWNpdGx5IHJlZmVyZW5jZWQgZmVhdHVyZXMgb250byB0aGUgZW5kIG9mIHRoZSBmZWF0dXJlCisJIyBsaXN0IHRoYXQgaXMgcGFzc2VkIHRvIHRoZSBrZXJuZWwgYnVpbGQgc2NyaXB0cy4KKwlpZiBbIC1uICIke0tFUk5FTF9GRUFUVVJFU30iIF07IHRoZW4KKwkJZm9yIGZlYXQgaW4gJHtLRVJORUxfRkVBVFVSRVN9OyBkbworCQkJYWRkb25fZmVhdHVyZXM9IiRhZGRvbl9mZWF0dXJlcyAtLWZlYXR1cmUgJGZlYXQiCisJCWRvbmUKKwlmaQorCisJIyBjaGVjayBmb3IgZmVhdHVyZSBkaXJlY3Rvcmllcy9yZXBvcy9icmFuY2hlcyB0aGF0IHdlcmUgcGFydCBvZiB0aGUKKwkjIFNSQ19VUkkuIElmIHRoZXkgd2VyZSBzdXBwbGllZCwgd2UgY29udmVydCB0aGVtIGludG8gaW5jbHVkZSBkaXJlY3RpdmVzCisJIyBmb3IgdGhlIHVwZGF0ZSBwYXJ0IG9mIHRoZSBwcm9jZXNzCisJaWYgWyAtbiAiJHtmZWF0X2RpcnN9IiBdOyB0aGVuCisJICAgIGZvciBmIGluICR7ZmVhdF9kaXJzfTsgZG8KKwkJaWYgWyAtZCAiJHtXT1JLRElSfS8kZi9tZXRhIiBdOyB0aGVuCisJCSAgICBpbmNsdWRlcz0iJGluY2x1ZGVzIC1JJHtXT1JLRElSfS8kZi9tZXRhIgorCQllbGlmIFsgLWQgIiR7V09SS0RJUn0vJGYiIF07IHRoZW4KKwkJICAgIGluY2x1ZGVzPSIkaW5jbHVkZXMgLUkke1dPUktESVJ9LyRmIgorCQlmaQorCSAgICBkb25lCisJZmkKKworCSMgdXBkYXRlcyBvciBnZW5lcmF0ZXMgdGhlIHRhcmdldCBkZXNjcmlwdGlvbgorCXVwZGF0ZW1lICR7dXBkYXRlbWVfZmxhZ3N9IC1ES0RFU0M9JHtLTUFDSElORX06JHtMSU5VWF9LRVJORUxfVFlQRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZXN9ICR7YWRkb25fZmVhdHVyZXN9ICR7QVJDSH0gJHtLTUFDSElORX0gJHtzY2NzfSAke3BhdGNoZXN9CisJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCWJiZmF0YWxfbG9nICJDb3VsZCBub3QgdXBkYXRlICR7bWFjaGluZV9icmFuY2h9IgorCWZpCit9CisKK2RvX3BhdGNoKCkgeworCWNkICR7U30KKworCSMgZXhlY3V0ZXMgYW5kIG1vZGlmaWVzIHRoZSBzb3VyY2UgdHJlZSBhcyByZXF1aXJlZAorCXBhdGNobWUgJHtLTUFDSElORX0KKwlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJYmJlcnJvciAiQ291bGQgbm90IGFwcGx5IHBhdGNoZXMgZm9yICR7S01BQ0hJTkV9LiIKKwkJYmJmYXRhbF9sb2cgIlBhdGNoIGZhaWx1cmVzIGNhbiBiZSByZXNvbHZlZCBpbiB0aGUgbGludXggc291cmNlIGRpcmVjdG9yeSAke1N9KSIKKwlmaQorCisJIyBjaGVjayB0byBzZWUgaWYgdGhlIHNwZWNpZmllZCBTUkNSRVYgaXMgcmVhY2hhYmxlIGZyb20gdGhlIGZpbmFsIGJyYW5jaC4KKwkjIGlmIGl0IHdhc24ndCBzb21ldGhpbmcgd3JvbmcgaGFzIGhhcHBlbmVkLCBhbmQgd2Ugc2hvdWxkIGVycm9yLgorCW1hY2hpbmVfc3JjcmV2PSIke1NSQ1JFVl9tYWNoaW5lfSIKKwlpZiBbIC16ICIke21hY2hpbmVfc3JjcmV2fSIgXTsgdGhlbgorCQkjIGZhbGxiYWNrIHRvIFNSQ1JFViBpZiBhIG5vbiBtYWNoaW5lX21ldGEgdHJlZSBpcyBiZWluZyBidWlsdAorCQltYWNoaW5lX3NyY3Jldj0iJHtTUkNSRVZ9IgorCQkjIGlmIFNSQ1JFViBjYW5ub3QgYmUgcmVhY2hlZCBzb21ldGhpbmcgaXMgd3JvbmcuCisJCWlmIFsgLXogIiR7bWFjaGluZV9zcmNyZXZ9IiBdOyB0aGVuCisJCQliYmZhdGFsICJOZWl0aGVyIFNSQ1JFVl9tYWNoaW5lIG9yIFNSQ1JFViB3YXMgc3BlY2lmaWVkISIKKwkJZmkKKwlmaQorCisJaWYgWyAiJHttYWNoaW5lX3NyY3Jldn0iICE9ICJBVVRPSU5DIiBdOyB0aGVuCisJCWlmICEgWyAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICR7bWFjaGluZV9zcmNyZXZ9fjApIiA9ICIkKGdpdCBtZXJnZS1iYXNlICR7bWFjaGluZV9zcmNyZXZ9IEhFQUQpIiBdOyB0aGVuCisJCQliYmVycm9yICJTUkNSRVYgJHttYWNoaW5lX3NyY3Jldn0gd2FzIHNwZWNpZmllZCwgYnV0IGlzIG5vdCByZWFjaGFibGUiCisJCQliYmZhdGFsICJDaGVjayB0aGUgQlNQIGRlc2NyaXB0aW9uIGZvciBpbmNvcnJlY3QgYnJhbmNoIHNlbGVjdGlvbiwgb3Igb3RoZXIgZXJyb3JzLiIKKwkJZmkKKwlmaQorfQorCitkb19rZXJuZWxfY2hlY2tvdXQoKSB7CisJc2V0ICtlCisKKwlzb3VyY2VfZGlyPWBlY2hvICR7U30gfCBzZWQgJ3MlLyQlJSdgCisJc291cmNlX3dvcmtkaXI9IiR7V09SS0RJUn0vZ2l0IgorCWlmIFsgLWQgIiR7V09SS0RJUn0vZ2l0LyIgXTsgdGhlbgorCQkjIGNhc2U6IGdpdCByZXBvc2l0b3J5IChiYXJlIG9yIG5vbi1iYXJlKQorCQkjIGlmIFMgaXMgV09SS0RJUi9naXQsIHRoZW4gd2Ugc2hvdWxkbid0IGJlIG1vdmluZyBvciBkZWxldGluZyB0aGUgdHJlZS4KKwkJaWYgWyAiJHtzb3VyY2VfZGlyfSIgIT0gIiR7c291cmNlX3dvcmtkaXJ9IiBdOyB0aGVuCisJCQlybSAtcmYgJHtTfQorCQkJbXYgJHtXT1JLRElSfS9naXQgJHtTfQorCQlmaQorCQljZCAke1N9CisJZWxzZQorCQkjIGNhc2U6IHdlIGhhdmUgbm8gZ2l0IHJlcG9zaXRvcnkgYXQgYWxsLiAKKwkJIyBUbyBzdXBwb3J0IGxvdyBiYW5kd2lkdGggb3B0aW9ucyBmb3IgYnVpbGRpbmcgdGhlIGtlcm5lbCwgd2UnbGwganVzdCAKKwkJIyBjb252ZXJ0IHRoZSB0cmVlIHRvIGEgZ2l0IHJlcG8gYW5kIGxldCB0aGUgcmVzdCBvZiB0aGUgcHJvY2VzcyB3b3JrIHVuY2hhbmdlZAorCQkKKwkJIyBpZiAke1N9IGhhc24ndCBiZWVuIHNldCB0byB0aGUgcHJvcGVyIHN1YmRpcmVjdG9yeSBhIGRlZmF1bHQgb2YgImxpbnV4IiBpcyAKKwkJIyB1c2VkLCBidXQgd2UgY2FuJ3QgaW5pdGlhbGl6ZSB0aGF0IGVtcHR5IGRpcmVjdG9yeS4gU28gY2hlY2sgaXQgYW5kIHRocm93IGEKKwkJIyBjbGVhciBlcnJvcgorCisJICAgICAgICBjZCAke1N9CisJCWlmIFsgISAtZiAiTWFrZWZpbGUiIF07IHRoZW4KKwkJCWJiZXJyb3IgIlMgaXMgbm90IHNldCB0byB0aGUgbGludXggc291cmNlIGRpcmVjdG9yeS4gQ2hlY2sgIgorCQkJYmJmYXRhbCAidGhlIHJlY2lwZSBhbmQgc2V0IFMgdG8gdGhlIHByb3BlciBleHRyYWN0ZWQgc3ViZGlyZWN0b3J5IgorCQlmaQorCQlybSAtZiAuZ2l0aWdub3JlCisJCWdpdCBpbml0CisJCWdpdCBhZGQgLgorCQlnaXQgY29tbWl0IC1xIC1tICJiYXNlbGluZSBjb21taXQ6IGNyZWF0aW5nIHJlcG8gZm9yICR7UE59LSR7UFZ9IgorCQlnaXQgY2xlYW4gLWQgLWYKKwlmaQorCisJIyBjb252ZXJ0IGFueSByZW1vdGUgYnJhbmNoZXMgdG8gbG9jYWwgdHJhY2tpbmcgb25lcworCWZvciBpIGluIGBnaXQgYnJhbmNoIC1hIC0tbm8tY29sb3IgfCBncmVwIHJlbW90ZXMgfCBncmVwIC12IEhFQURgOyBkbworCQliPWBlY2hvICRpIHwgY3V0IC1kJyAnIC1mMiB8IHNlZCAncyVyZW1vdGVzL29yaWdpbi8lJSdgOworCQlnaXQgc2hvdy1yZWYgLS1xdWlldCAtLXZlcmlmeSAtLSAicmVmcy9oZWFkcy8kYiIKKwkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCQlnaXQgYnJhbmNoICRiICRpID4gL2Rldi9udWxsCisJCWZpCisJZG9uZQorCisJIyBDcmVhdGUgYSB3b3JraW5nIHRyZWUgY29weSBvZiB0aGUga2VybmVsIGJ5IGNoZWNraW5nIG91dCBhIGJyYW5jaAorCW1hY2hpbmVfYnJhbmNoPSIke0AgZ2V0X21hY2hpbmVfYnJhbmNoKGQsICIke0tCUkFOQ0h9IiApfSIKKworCSMgY2hlY2tvdXQgYW5kIGNsb2JiZXIgYW55IHVuaW1wb3J0YW50IGZpbGVzCisJZ2l0IGNoZWNrb3V0IC1mICR7bWFjaGluZV9icmFuY2h9Cit9Citkb19rZXJuZWxfY2hlY2tvdXRbZGlyc10gPSAiJHtTfSIKKworYWRkdGFzayBrZXJuZWxfY2hlY2tvdXQgYmVmb3JlIGRvX2tlcm5lbF9tZXRhZGF0YSBhZnRlciBkb191bnBhY2sKK2FkZHRhc2sga2VybmVsX21ldGFkYXRhIGFmdGVyIGRvX3ZhbGlkYXRlX2JyYW5jaGVzIGRvX3VucGFjayBiZWZvcmUgZG9fcGF0Y2gKK2RvX2tlcm5lbF9tZXRhZGF0YVtkZXBlbmRzXSA9ICJrZXJuLXRvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorCitkb19rZXJuZWxfY29uZmlnbWVbZGlyc10gKz0gIiR7U30gJHtCfSIKK2RvX2tlcm5lbF9jb25maWdtZSgpIHsKKwliYm5vdGUgImtlcm5lbCBjb25maWdtZSIKKwlleHBvcnQgS01FVEE9JHtLTUVUQX0KKworCWlmIFsgLW4gIiR7S0NPTkZJR19NT0RFfSIgXTsgdGhlbgorCQljb25maWdtZWZsYWdzPSR7S0NPTkZJR19NT0RFfQorCWVsc2UKKwkJIyBJZiBhIGRlZmNvbmZpZyB3YXMgcGFzc2VkLCB1c2UgPW4gYXMgdGhlIGJhc2VsaW5lLCB3aGljaCBpcyBhY2hpZXZlZAorCQkjIHZpYSAtLWFsbG5vY29uZmlnCisJCWlmIFsgLWYgJHtXT1JLRElSfS9kZWZjb25maWcgXTsgdGhlbgorCQkJY29uZmlnbWVmbGFncz0iLS1hbGxub2NvbmZpZyIKKwkJZmkKKwlmaQorCisJY2QgJHtTfQorCVBBVEg9JHtQQVRIfToke1N9L3NjcmlwdHMvdXRpbAorCWNvbmZpZ21lICR7Y29uZmlnbWVmbGFnc30gLS1yZWNvbmZpZyAtLW91dHB1dCAke0J9ICR7TElOVVhfS0VSTkVMX1RZUEV9ICR7S01BQ0hJTkV9CisJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCWJiZmF0YWxfbG9nICJDb3VsZCBub3QgY29uZmlndXJlICR7S01BQ0hJTkV9LSR7TElOVVhfS0VSTkVMX1RZUEV9IgorCWZpCisJCisJZWNobyAiIyBHbG9iYWwgc2V0dGluZ3MgZnJvbSBsaW51eCByZWNpcGUiID4+ICR7Qn0vLmNvbmZpZworCWVjaG8gIkNPTkZJR19MT0NBTFZFUlNJT049IlwiJHtMSU5VWF9WRVJTSU9OX0VYVEVOU0lPTn1cIiA+PiAke0J9Ly5jb25maWcKK30KKworYWRkdGFzayBrZXJuZWxfY29uZmlnbWUgYmVmb3JlIGRvX2NvbmZpZ3VyZSBhZnRlciBkb19wYXRjaAorCitweXRob24gZG9fa2VybmVsX2NvbmZpZ2NoZWNrKCkgeworICAgIGltcG9ydCByZSwgc3RyaW5nLCBzeXMKKworICAgICMgaWYgS01FVEEgaXNuJ3Qgc2V0IGdsb2JhbGx5IGJ5IGEgcmVjaXBlIHVzaW5nIHRoaXMgcm91dGluZSwgd2UgbmVlZCB0bworICAgICMgc2V0IHRoZSBkZWZhdWx0IHRvICdtZXRhJy4gT3RoZXJ3aXNlLCBrY29uZl9jaGVjayBpcyBub3QgcGFzc2VkIGEgdmFsaWQKKyAgICAjIG1ldGEtc2VyaWVzIGZvciBwcm9jZXNzaW5nCisgICAga21ldGEgPSBkLmdldFZhciggIktNRVRBIiwgVHJ1ZSApIG9yICJtZXRhIgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhrbWV0YSk6CisgICAgICAgIGttZXRhID0gIi4iICsga21ldGEKKworICAgIHBhdGhwcmVmaXggPSAiZXhwb3J0IFBBVEg9JXM6JXM7ICIgJSAoZC5nZXRWYXIoJ1BBVEgnLCBUcnVlKSwgIiR7U30vc2NyaXB0cy91dGlsLyIpCisgICAgY21kID0gZC5leHBhbmQoImNkICR7U307IGtjb25mX2NoZWNrIC1jb25maWcgJXMvbWV0YS1zZXJpZXMgJHtTfSAke0J9IiAlIGttZXRhKQorICAgIHJldCwgcmVzdWx0ID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCIlcyVzIiAlIChwYXRocHJlZml4LCBjbWQpKQorCisgICAgY29uZmlnX2NoZWNrX3Zpc2liaWxpdHkgPSBpbnQoZC5nZXRWYXIoICJLQ09ORl9BVURJVF9MRVZFTCIsIFRydWUgKSBvciAwKQorICAgIGJzcF9jaGVja192aXNpYmlsaXR5ID0gaW50KGQuZ2V0VmFyKCAiS0NPTkZfQlNQX0FVRElUX0xFVkVMIiwgVHJ1ZSApIG9yIDApCisKKyAgICAjIGlmIGNvbmZpZyBjaGVjayB2aXNpYmlsaXR5IGlzIG5vbi16ZXJvLCByZXBvcnQgZHJvcHBlZCBjb25maWd1cmF0aW9uIHZhbHVlcworICAgIG1pc21hdGNoX2ZpbGUgPSAiJHtTfS8iICsga21ldGEgKyAiLyIgKyAibWlzbWF0Y2guY2ZnIgorICAgIGlmIG9zLnBhdGguZXhpc3RzKG1pc21hdGNoX2ZpbGUpOgorICAgICAgICBpZiBjb25maWdfY2hlY2tfdmlzaWJpbGl0eToKKyAgICAgICAgICAgIHdpdGggb3BlbiAobWlzbWF0Y2hfZmlsZSwgInIiKSBhcyBteWZpbGU6CisgICAgICAgICAgICAgICAgcmVzdWx0cyA9IG15ZmlsZS5yZWFkKCkKKyAgICAgICAgICAgICAgICBiYi53YXJuKCAiW2tlcm5lbCBjb25maWddOiBzcGVjaWZpZWQgdmFsdWVzIGRpZCBub3QgbWFrZSBpdCBpbnRvIHRoZSBrZXJuZWwncyBmaW5hbCBjb25maWd1cmF0aW9uOlxuXG4lcyIgJSByZXN1bHRzKQorCisgICAgIyBpZiBjb25maWcgY2hlY2sgdmlzaWJpbGl0eSBpcyBsZXZlbCAyIG9yIGhpZ2hlciwgcmVwb3J0IG5vbi1oYXJkd2FyZSBvcHRpb25zCisgICAgbm9uaHdfZmlsZSA9ICIke1N9LyIgKyBrbWV0YSArICIvIiArICJub25od19yZXBvcnQuY2ZnIgorICAgIGlmIG9zLnBhdGguZXhpc3RzKG5vbmh3X2ZpbGUpOgorICAgICAgICBpZiBjb25maWdfY2hlY2tfdmlzaWJpbGl0eSA+IDE6CisgICAgICAgICAgICB3aXRoIG9wZW4gKG5vbmh3X2ZpbGUsICJyIikgYXMgbXlmaWxlOgorICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBteWZpbGUucmVhZCgpCisgICAgICAgICAgICAgICAgYmIud2FybiggIltrZXJuZWwgY29uZmlnXTogQlNQIHNwZWNpZmllZCBub24taHcgY29uZmlndXJhdGlvbjpcblxuJXMiICUgcmVzdWx0cykKKworICAgIGJzcF9kZXNjID0gIiR7U30vIiArIGttZXRhICsgIi8iICsgInRvcF90Z3QiCisgICAgaWYgb3MucGF0aC5leGlzdHMoYnNwX2Rlc2MpIGFuZCBic3BfY2hlY2tfdmlzaWJpbGl0eSA+IDE6CisgICAgICAgIHdpdGggb3BlbiAoYnNwX2Rlc2MsICJyIikgYXMgbXlmaWxlOgorICAgICAgICAgICAgYnNwX3RndCA9IG15ZmlsZS5yZWFkKCkKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaCgiXiguKilzY3JhdGNoLm9iaiguKikkIiwgYnNwX3RndCkKKyAgICAgICAgICAgIGlmIG5vdCBtIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgYmIud2FybiggIltrZXJuZWxdOiBBbiBhdXRvIGdlbmVyYXRlZCBCU1AgZGVzY3JpcHRpb24gd2FzIHVzZWQsIHRoaXMgbm9ybWFsbHkgaW5kaWNhdGVzIGEgbWlzY29uZmlndXJhdGlvbi5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICJDaGVjayB0aGF0IHlvdXIgbWFjaGluZSAoJXMpIGhhcyBhbiBhc3NvY2lhdGVkIGtlcm5lbCBkZXNjcmlwdGlvbi4iICUgIiR7TUFDSElORX0iICkKK30KKworIyBFbnN1cmUgdGhhdCB0aGUgYnJhbmNoZXMgKEJTUCBhbmQgbWV0YSkgYXJlIG9uIHRoZSBsb2NhdGlvbnMgc3BlY2lmaWVkIGJ5CisjIHRoZWlyIFNSQ1JFViB2YWx1ZXMuIElmIHRoZXkgYXJlIE5PVCBvbiB0aGUgcmlnaHQgY29tbWl0cywgdGhlIGJyYW5jaGVzCisjIGFyZSBjb3JyZWN0ZWQgdG8gdGhlIHByb3BlciBjb21taXQuCitkb192YWxpZGF0ZV9icmFuY2hlcygpIHsKKwlzZXQgK2UKKwljZCAke1N9CisKKwltYWNoaW5lX2JyYW5jaD0iJHtAIGdldF9tYWNoaW5lX2JyYW5jaChkLCAiJHtLQlJBTkNIfSIgKX0iCisJbWFjaGluZV9zcmNyZXY9IiR7U1JDUkVWX21hY2hpbmV9IgorCisJIyBpZiBTUkNSRVYgaXMgQVVUT1JFViBpdCBzaG93cyB1cCBhcyBBVVRPSU5DIHRoZXJlJ3Mgbm90aGluZyB0bworCSMgY2hlY2sgYW5kIHdlIGNhbiBleGl0IGVhcmx5CisJaWYgWyAiJHttYWNoaW5lX3NyY3Jldn0iID0gIkFVVE9JTkMiIF07IHRoZW4KKwkJYmJub3RlICJTUkNSRVYgdmFsaWRhdGlvbiBpcyBub3QgcmVxdWlyZWQgZm9yIEFVVE9SRVYiCisJZWxpZiBbICIke21hY2hpbmVfc3JjcmV2fSIgPSAiIiBdOyB0aGVuCisJCWlmIFsgIiR7U1JDUkVWfSIgIT0gIkFVVE9JTkMiIF0gJiYgWyAiJHtTUkNSRVZ9IiAhPSAiSU5WQUxJRCIgXTsgdGhlbgorCQkgICAgICAgIyBTUkNSRVZfbWFjaGluZV88TUFDSElORT4gd2FzIG5vdCBzZXQuIFRoaXMgbWVhbnMgdGhhdCBhIGN1c3RvbSByZWNpcGUKKwkJICAgICAgICMgdGhhdCBkb2Vzbid0IHVzZSB0aGUgU1JDUkVWX0ZPUk1BVCAibWFjaGluZV9tZXRhIiBpcyBiZWluZyBidWlsdC4gSW4KKwkJICAgICAgICMgdGhpcyBjYXNlLCB3ZSBuZWVkIHRvIHJlc2V0IHRvIHRoZSBnaXZlIFNSQ1JFViBiZWZvcmUgaGVhZGluZyB0byBwYXRjaGluZworCQkgICAgICAgYmJub3RlICJjdXN0b20gcmVjaXBlIGlzIGJlaW5nIGJ1aWx0LCBmb3JjaW5nIFNSQ1JFViB0byAke1NSQ1JFVn0iCisJCSAgICAgICBmb3JjZV9zcmNyZXY9IiR7U1JDUkVWfSIKKwkJZmkKKwllbHNlCisJCWdpdCBjYXQtZmlsZSAtdCAke21hY2hpbmVfc3JjcmV2fSA+IC9kZXYvbnVsbAorCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJCWJiZXJyb3IgIiR7bWFjaGluZV9zcmNyZXZ9IGlzIG5vdCBhIHZhbGlkIGNvbW1pdCBJRC4iCisJCQliYmZhdGFsX2xvZyAiVGhlIGtlcm5lbCBzb3VyY2UgdHJlZSBtYXkgYmUgb3V0IG9mIHN5bmMiCisJCWZpCisJCWZvcmNlX3NyY3Jldj0ke21hY2hpbmVfc3JjcmV2fQorCWZpCisKKwlnaXQgY2hlY2tvdXQgLXEgLWYgJHttYWNoaW5lX2JyYW5jaH0KKwlpZiBbIC1uICIke2ZvcmNlX3NyY3Jldn0iIF07IHRoZW4KKwkJIyBzZWUgaWYgdGhlIGJyYW5jaCB3ZSBhcmUgYWJvdXQgdG8gcGF0Y2ggaGFzIGJlZW4gcHJvcGVybHkgcmVzZXQgdG8gdGhlIGRlZmluZWQKKwkJIyBTUkNSRVYgLi4gaWYgbm90LCB3ZSByZXNldCBpdC4KKwkJYnJhbmNoX2hlYWQ9YGdpdCByZXYtcGFyc2UgSEVBRGAKKwkJaWYgWyAiJHtmb3JjZV9zcmNyZXZ9IiAhPSAiJHticmFuY2hfaGVhZH0iIF07IHRoZW4KKwkJCWN1cnJlbnRfYnJhbmNoPWBnaXQgcmV2LXBhcnNlIC0tYWJicmV2LXJlZiBIRUFEYAorCQkJZ2l0IGJyYW5jaCAiJGN1cnJlbnRfYnJhbmNoLW9yaWciCisJCQlnaXQgcmVzZXQgLS1oYXJkICR7Zm9yY2Vfc3JjcmV2fQorCQlmaQorCWZpCit9CisKKyMgTWFueSBzY3JpcHRzIHdhbnQgdG8gbG9vayBpbiBhcmNoLyRhcmNoL2Jvb3QgZm9yIHRoZSBib290YWJsZQorIyBpbWFnZS4gVGhpcyBwb3NlcyBhIHByb2JsZW0gZm9yIHZtbGludXggYmFzZWQgYm9vdGluZy4gVGhpcyAKKyMgdGFzayBhcnJhbmdlcyB0byBoYXZlIHZtbGludXggYXBwZWFyIGluIHRoZSBub3JtYWxpemVkIGRpcmVjdG9yeQorIyBsb2NhdGlvbi4KK2RvX2tlcm5lbF9saW5rX3ZtbGludXgoKSB7CisJaWYgWyAhIC1kICIke0J9L2FyY2gvJHtBUkNIfS9ib290IiBdOyB0aGVuCisJCW1rZGlyICR7Qn0vYXJjaC8ke0FSQ0h9L2Jvb3QKKwlmaQorCWNkICR7Qn0vYXJjaC8ke0FSQ0h9L2Jvb3QKKwlsbiAtc2YgLi4vLi4vLi4vdm1saW51eAorfQorCitPRV9URVJNSU5BTF9FWFBPUlRTICs9ICJLQlVJTERfT1VUUFVUIgorS0JVSUxEX09VVFBVVCA9ICIke0J9IgorCitweXRob24gKCkgeworICAgICMgSWYgZGlmZmNvbmZpZyBpcyBhdmFpbGFibGUsIGVuc3VyZSBpdCBydW5zIGFmdGVyIGtlcm5lbF9jb25maWdtZQorICAgIGlmICdkb19kaWZmY29uZmlnJyBpbiBkOgorICAgICAgICBiYi5idWlsZC5hZGR0YXNrKCdkb19kaWZmY29uZmlnJywgTm9uZSwgJ2RvX2tlcm5lbF9jb25maWdtZScsIGQpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYmRmZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwuYmJjbGFzcwpAQCAtMCwwICsxLDQ5MCBAQAoraW5oZXJpdCBsaW51eC1rZXJuZWwtYmFzZSBrZXJuZWwtbW9kdWxlLXNwbGl0CisKK1BST1ZJREVTICs9ICJ2aXJ0dWFsL2tlcm5lbCIKK0RFUEVORFMgKz0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYyBrbW9kLW5hdGl2ZSBkZXBtb2R3cmFwcGVyLWNyb3NzIGJjLW5hdGl2ZSIKKworUyA9ICIke1NUQUdJTkdfS0VSTkVMX0RJUn0iCitCID0gIiR7V09SS0RJUn0vYnVpbGQiCitLQlVJTERfT1VUUFVUID0gIiR7Qn0iCitPRV9URVJNSU5BTF9FWFBPUlRTICs9ICJLQlVJTERfT1VUUFVUIgorCisjIHdlIGluY2x1ZGUgZ2NjIGFib3ZlLCB3ZSBkb250IG5lZWQgdmlydHVhbC9saWJjCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitLRVJORUxfSU1BR0VUWVBFID89ICJ6SW1hZ2UiCitJTklUUkFNRlNfSU1BR0UgPz0gIiIKK0lOSVRSQU1GU19UQVNLID89ICIiCitJTklUUkFNRlNfSU1BR0VfQlVORExFID89ICIiCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgaW1wb3J0IHJlCisKKyAgICBrZXJuZWx0eXBlID0gZC5nZXRWYXIoJ0tFUk5FTF9JTUFHRVRZUEUnLCBUcnVlKQorCisgICAgZC5zZXRWYXIoIktFUk5FTF9JTUFHRVRZUEVfRk9SX01BS0UiLCByZS5zdWIocidcLmd6JCcsICcnLCBrZXJuZWx0eXBlKSkKKworICAgIGltYWdlID0gZC5nZXRWYXIoJ0lOSVRSQU1GU19JTUFHRScsIFRydWUpCisgICAgaWYgaW1hZ2U6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fYnVuZGxlX2luaXRyYW1mcycsICdkZXBlbmRzJywgJyAke0lOSVRSQU1GU19JTUFHRX06ZG9fcm9vdGZzJykKKworICAgICMgTk9URTogc2V0dGluZyBJTklUUkFNRlNfVEFTSyBpcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eQorICAgICMgICAgICAgVGhlIHByZWZlcnJlZCBtZXRob2QgaXMgdG8gc2V0IElOSVRSQU1GU19JTUFHRSwgYmVjYXVzZQorICAgICMgICAgICAgdGhpcyBJTklUUkFNRlNfVEFTSyBoYXMgY2lyY3VsYXIgZGVwZW5kZW5jeSBwcm9ibGVtcworICAgICMgICAgICAgaWYgdGhlIGluaXRyYW1mcyByZXF1aXJlcyBrZXJuZWwgbW9kdWxlcworICAgIGltYWdlX3Rhc2sgPSBkLmdldFZhcignSU5JVFJBTUZTX1RBU0snLCBUcnVlKQorICAgIGlmIGltYWdlX3Rhc2s6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fY29uZmlndXJlJywgJ2RlcGVuZHMnLCAnICR7SU5JVFJBTUZTX1RBU0t9JykKK30KKworIyBIZXJlIHdlIHB1bGwgaW4gYWxsIHZhcmlvdXMga2VybmVsIGltYWdlIHR5cGVzIHdoaWNoIHdlIHN1cHBvcnQuCisjCisjIEluIGNhc2UgeW91J3JlIHdvbmRlcmluZyB3aHkga2VybmVsLmJiY2xhc3MgaW5oZXJpdHMgdGhlIG90aGVyIGltYWdlCisjIHR5cGVzIGluc3RlYWQgb2YgdGhlIG90aGVyIHdheSBhcm91bmQsIHRoZSByZWFzb24gZm9yIHRoYXQgaXMgdG8KKyMgbWFpbnRhaW4gY29tcGF0aWJpbGl0eSB3aXRoIHZhcmlvdXMgY3VycmVudGx5IGV4aXN0aW5nIG1ldGEtbGF5ZXJzLgorIyBCeSBwdWxsaW5nIGluIHRoZSB2YXJpb3VzIGtlcm5lbCBpbWFnZSB0eXBlcyBoZXJlLCB3ZSByZXRhaW4gdGhlCisjIG9yaWdpbmFsIGJlaGF2aW9yIG9mIGtlcm5lbC5iYmNsYXNzLCBzbyBubyBtZXRhLWxheWVycyBzaG91bGQgZ2V0CisjIGJyb2tlbi4KKyMKKyMgS0VSTkVMX0NMQVNTRVMgYnkgZGVmYXVsdCBwdWxscyBpbiBrZXJuZWwtdWltYWdlLmJiY2xhc3MsIHNpbmNlIHRoaXMKKyMgdXNlZCB0byBiZSB0aGUgZGVmYXVsdCBiZWhhdmlvciB3aGVuIG9ubHkgdUltYWdlIHdhcyBzdXBwb3J0ZWQuIFRoaXMKKyMgdmFyaWFibGUgY2FuIGJlIGFwcGVuZGVkIGJ5IHVzZXJzIHdobyBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgbmV3IGtlcm5lbAorIyBpbWFnZSB0eXBlcy4KKworS0VSTkVMX0NMQVNTRVMgPz0gIiBrZXJuZWwtdWltYWdlICIKK2luaGVyaXQgJHtLRVJORUxfQ0xBU1NFU30KKworIyBPbGQgc3R5bGUga2VybmVscyBtYXkgc2V0ICR7U30gPSAke1dPUktESVJ9L2dpdCBmb3IgZXhhbXBsZQorIyBXZSBuZWVkIHRvIG1vdmUgdGhlc2Ugb3ZlciB0byBTVEFHSU5HX0tFUk5FTF9ESVIuIFdlIGNhbid0IGp1c3QKKyMgY3JlYXRlIHRoZSBzeW1saW5rIGluIGFkdmFuY2UgYXMgdGhlIGdpdCBmZXRjaGVyIGNhbid0IGNvcGUgd2l0aAorIyB0aGUgc3ltbGluay4KK2RvX3VucGFja1tjbGVhbmRpcnNdICs9ICIgJHtTfSAke1NUQUdJTkdfS0VSTkVMX0RJUn0gJHtCfSAke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfSIKK2RvX2NsZWFuW2NsZWFuZGlyc10gKz0gIiAke1N9ICR7U1RBR0lOR19LRVJORUxfRElSfSAke0J9ICR7U1RBR0lOR19LRVJORUxfQlVJTERESVJ9IgorYmFzZV9kb191bnBhY2tfYXBwZW5kICgpIHsKKyAgICBzID0gZC5nZXRWYXIoIlMiLCBUcnVlKQorICAgIGlmIHNbLTFdID09ICcvJzoKKyAgICAgICAgIyBkcm9wIHRyYWlsaW5nIHNsYXNoLCBzbyB0aGF0IG9zLnN5bWxpbmsoa2VybnNyYywgcykgZG9lc24ndCB1c2UgcyBhcyBkaXJlY3RvcnkgbmFtZSBhbmQgZmFpbAorICAgICAgICBzPXNbOi0xXQorICAgIGtlcm5zcmMgPSBkLmdldFZhcigiU1RBR0lOR19LRVJORUxfRElSIiwgVHJ1ZSkKKyAgICBpZiBzICE9IGtlcm5zcmM6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihrZXJuc3JjKQorICAgICAgICBiYi51dGlscy5yZW1vdmUoa2VybnNyYywgcmVjdXJzZT1UcnVlKQorICAgICAgICBpZiBkLmdldFZhcigiRVhURVJOQUxTUkMiLCBUcnVlKToKKyAgICAgICAgICAgICMgV2l0aCBFWFRFUk5BTFNSQyBTIHdpbGwgbm90IGJlIHdpcGVkIHNvIHdlIGNhbiBzeW1saW5rIHRvIGl0CisgICAgICAgICAgICBvcy5zeW1saW5rKHMsIGtlcm5zcmMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpbXBvcnQgc2h1dGlsCisgICAgICAgICAgICBzaHV0aWwubW92ZShzLCBrZXJuc3JjKQorICAgICAgICAgICAgb3Muc3ltbGluayhrZXJuc3JjLCBzKQorfQorCitpbmhlcml0IGtlcm5lbC1hcmNoIGRlcGxveQorCitQQUNLQUdFU19EWU5BTUlDICs9ICJea2VybmVsLW1vZHVsZS0uKiIKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5rZXJuZWwtaW1hZ2UtLioiCitQQUNLQUdFU19EWU5BTUlDICs9ICJea2VybmVsLWZpcm13YXJlLS4qIgorCitleHBvcnQgT1MgPSAiJHtUQVJHRVRfT1N9IgorZXhwb3J0IENST1NTX0NPTVBJTEUgPSAiJHtUQVJHRVRfUFJFRklYfSIKKworS0VSTkVMX1BSSU9SSVRZID89ICIke0BpbnQoZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLScpWzBdLnNwbGl0KCcrJylbMF0uc3BsaXQoJy4nKVswXSkgKiAxMDAwMCArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50KGQuZ2V0VmFyKCdQVicsMSkuc3BsaXQoJy0nKVswXS5zcGxpdCgnKycpWzBdLnNwbGl0KCcuJylbMV0pICogMTAwICsgXAorICAgICAgICAgICAgICAgICAgICAgICBpbnQoZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLScpWzBdLnNwbGl0KCcrJylbMF0uc3BsaXQoJy4nKVstMV0pfSIKKworS0VSTkVMX1JFTEVBU0UgPz0gIiR7S0VSTkVMX1ZFUlNJT059IgorCisjIFdoZXJlIGJ1aWx0IGtlcm5lbCBsaWVzIGluIHRoZSBrZXJuZWwgdHJlZQorS0VSTkVMX09VVFBVVCA/PSAiYXJjaC8ke0FSQ0h9L2Jvb3QvJHtLRVJORUxfSU1BR0VUWVBFfSIKK0tFUk5FTF9JTUFHRURFU1QgPSAiYm9vdCIKKworIworIyBjb25maWd1cmF0aW9uCisjCitleHBvcnQgQ01ETElORV9DT05TT0xFID0gImNvbnNvbGU9JHtAZC5nZXRWYXIoIktFUk5FTF9DT05TT0xFIiwxKSBvciAidHR5UzAifSIKKworS0VSTkVMX1ZFUlNJT04gPSAiJHtAZ2V0X2tlcm5lbHZlcnNpb25faGVhZGVycygnJHtCfScpfSIKKworS0VSTkVMX0xPQ0FMVkVSU0lPTiA/PSAiIgorCisjIGtlcm5lbHMgYXJlIGdlbmVyYWxseSBtYWNoaW5lIHNwZWNpZmljCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCisjIFUtQm9vdCBzdXBwb3J0CitVQk9PVF9FTlRSWVBPSU5UID89ICIyMDAwODAwMCIKK1VCT09UX0xPQURBRERSRVNTID89ICIke1VCT09UX0VOVFJZUE9JTlR9IgorCisjIFNvbWUgTGludXgga2VybmVsIGNvbmZpZ3VyYXRpb25zIG5lZWQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIG9uIHRoZSBjb21tYW5kIGxpbmUKK0tFUk5FTF9FWFRSQV9BUkdTID89ICIiCisKKyMgRm9yIHRoZSBrZXJuZWwsIHdlIGRvbid0IHdhbnQgdGhlICctZSBNQUtFRkxBR1M9JyBpbiBFWFRSQV9PRU1BS0UuCisjIFdlIGRvbid0IHdhbnQgdG8gb3ZlcnJpZGUga2VybmVsIE1ha2VmaWxlIHZhcmlhYmxlcyBmcm9tIHRoZSBlbnZpcm9ubWVudAorRVhUUkFfT0VNQUtFID0gIiIKKworS0VSTkVMX0FMVF9JTUFHRVRZUEUgPz89ICIiCisKKyMgRGVmaW5lIHdoZXJlIHRoZSBrZXJuZWwgaGVhZGVycyBhcmUgaW5zdGFsbGVkIG9uIHRoZSB0YXJnZXQgYXMgd2VsbCBhcyB3aGVyZQorIyB0aGV5IGFyZSBzdGFnZWQuCitLRVJORUxfU1JDX1BBVEggPSAiL3Vzci9zcmMva2VybmVsIgorCitjb3B5X2luaXRyYW1mcygpIHsKKwllY2hvICJDb3B5aW5nIGluaXRyYW1mcyBpbnRvIC4vdXNyIC4uLiIKKwkjIEluIGNhc2UgdGhlIGRpcmVjdG9yeSBpcyBub3QgY3JlYXRlZCB5ZXQgZnJvbSB0aGUgZmlyc3QgcGFzcyBjb21waWxlOgorCW1rZGlyIC1wICR7Qn0vdXNyCisJIyBGaW5kIGFuZCB1c2UgdGhlIGZpcnN0IGluaXRyYW1mcyBpbWFnZSBhcmNoaXZlIHR5cGUgd2UgZmluZAorCXJtIC1mICR7Qn0vdXNyLyR7SU5JVFJBTUZTX0lNQUdFfS0ke01BQ0hJTkV9LmNwaW8KKwlmb3IgaW1nIGluIGNwaW8uZ3ogY3Bpby5sejQgY3Bpby5sem8gY3Bpby5sem1hIGNwaW8ueHo7IGRvCisJCWlmIFsgLWUgIiR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTklUUkFNRlNfSU1BR0V9LSR7TUFDSElORX0uJGltZyIgXTsgdGhlbgorCQkJY3AgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lOSVRSQU1GU19JTUFHRX0tJHtNQUNISU5FfS4kaW1nICR7Qn0vdXNyLy4KKwkJCWNhc2UgJGltZyBpbgorCQkJKmd6KQorCQkJCWVjaG8gImd6aXAgZGVjb21wcmVzc2luZyBpbWFnZSIKKwkJCQlndW56aXAgLWYgJHtCfS91c3IvJHtJTklUUkFNRlNfSU1BR0V9LSR7TUFDSElORX0uJGltZworCQkJCWJyZWFrCisJCQkJOzsKKwkJCSpsejQpCisJCQkJZWNobyAibHo0IGRlY29tcHJlc3NpbmcgaW1hZ2UiCisJCQkJbHo0IC1kZiAke0J9L3Vzci8ke0lOSVRSQU1GU19JTUFHRX0tJHtNQUNISU5FfS4kaW1nCisJCQkJYnJlYWsKKwkJCQk7OworCQkJKmx6bykKKwkJCQllY2hvICJsem8gZGVjb21wcmVzc2luZyBpbWFnZSIKKwkJCQlsem9wIC1kZiAke0J9L3Vzci8ke0lOSVRSQU1GU19JTUFHRX0tJHtNQUNISU5FfS4kaW1nCisJCQkJYnJlYWsKKwkJCQk7OworCQkJKmx6bWEpCisJCQkJZWNobyAibHptYSBkZWNvbXByZXNzaW5nIGltYWdlIgorCQkJCWx6bWEgLWRmICR7Qn0vdXNyLyR7SU5JVFJBTUZTX0lNQUdFfS0ke01BQ0hJTkV9LiRpbWcKKwkJCQlicmVhaworCQkJCTs7CisJCQkqeHopCisJCQkJZWNobyAieHogZGVjb21wcmVzc2luZyBpbWFnZSIKKwkJCQl4eiAtZGYgJHtCfS91c3IvJHtJTklUUkFNRlNfSU1BR0V9LSR7TUFDSElORX0uJGltZworCQkJCWJyZWFrCisJCQkJOzsKKwkJCWVzYWMKKwkJZmkKKwlkb25lCisJZWNobyAiRmluaXNoZWQgY29weSBvZiBpbml0cmFtZnMgaW50byAuL3VzciIKK30KKworSU5JVFJBTUZTX0JBU0VfTkFNRSA9ICIke0tFUk5FTF9JTUFHRVRZUEV9LWluaXRyYW1mcy0ke1BWfS0ke1BSfS0ke01BQ0hJTkV9LSR7REFURVRJTUV9IgorSU5JVFJBTUZTX0JBU0VfTkFNRVt2YXJkZXBzZXhjbHVkZV0gPSAiREFURVRJTUUiCitkb19idW5kbGVfaW5pdHJhbWZzICgpIHsKKwlpZiBbICEgLXogIiR7SU5JVFJBTUZTX0lNQUdFfSIgLWEgeCIke0lOSVRSQU1GU19JTUFHRV9CVU5ETEV9IiA9IHgxIF07IHRoZW4KKwkJZWNobyAiQ3JlYXRpbmcgYSBrZXJuZWwgaW1hZ2Ugd2l0aCBhIGJ1bmRsZWQgaW5pdHJhbWZzLi4uIgorCQljb3B5X2luaXRyYW1mcworCQlpZiBbIC1lICR7S0VSTkVMX09VVFBVVH0gXSA7IHRoZW4KKwkJCW12IC1mICR7S0VSTkVMX09VVFBVVH0gJHtLRVJORUxfT1VUUFVUfS5iYWsKKwkJZmkKKwkJdXNlX2FsdGVybmF0ZV9pbml0cmQ9Q09ORklHX0lOSVRSQU1GU19TT1VSQ0U9JHtCfS91c3IvJHtJTklUUkFNRlNfSU1BR0V9LSR7TUFDSElORX0uY3BpbworCQlrZXJuZWxfZG9fY29tcGlsZQorCQltdiAtZiAke0tFUk5FTF9PVVRQVVR9ICR7S0VSTkVMX09VVFBVVH0uaW5pdHJhbWZzCisJCW12IC1mICR7S0VSTkVMX09VVFBVVH0uYmFrICR7S0VSTkVMX09VVFBVVH0KKwkJIyBVcGRhdGUgaW5zdGFsbCBhcmVhCisJCWVjaG8gIlRoZXJlIGlzIGtlcm5lbCBpbWFnZSBidW5kbGVkIHdpdGggaW5pdHJhbWZzOiAke0J9LyR7S0VSTkVMX09VVFBVVH0uaW5pdHJhbWZzIgorCQlpbnN0YWxsIC1tIDA2NDQgJHtCfS8ke0tFUk5FTF9PVVRQVVR9LmluaXRyYW1mcyAke0R9L2Jvb3QvJHtLRVJORUxfSU1BR0VUWVBFfS1pbml0cmFtZnMtJHtNQUNISU5FfS5iaW4KKwkJZWNobyAiJHtCfS8ke0tFUk5FTF9PVVRQVVR9LmluaXRyYW1mcyIKKwlmaQorfQorCitweXRob24gZG9fZGV2c2hlbGxfcHJlcGVuZCAoKSB7CisgICAgb3MuZW52aXJvblsiTERGTEFHUyJdID0gJycKK30KKworYWRkdGFzayBidW5kbGVfaW5pdHJhbWZzIGFmdGVyIGRvX2luc3RhbGwgYmVmb3JlIGRvX2RlcGxveQorCitrZXJuZWxfZG9fY29tcGlsZSgpIHsKKwl1bnNldCBDRkxBR1MgQ1BQRkxBR1MgQ1hYRkxBR1MgTERGTEFHUyBNQUNISU5FCisJIyBUaGUgJHVzZV9hbHRlcm5hdGVfaW5pdHJkIGlzIG9ubHkgc2V0IGZyb20KKwkjIGRvX2J1bmRsZV9pbml0cmFtZnMoKSBUaGlzIHZhcmlhYmxlIGlzIHNwZWNpZmljYWxseSBmb3IgdGhlCisJIyBjYXNlIHdoZXJlIHdlIGFyZSBtYWtpbmcgYSBzZWNvbmQgcGFzcyBhdCB0aGUga2VybmVsCisJIyBjb21waWxhdGlvbiBhbmQgd2Ugd2FudCB0byBmb3JjZSB0aGUga2VybmVsIGJ1aWxkIHRvIHVzZSBhCisJIyBkaWZmZXJlbnQgaW5pdHJhbWZzIGltYWdlLiAgVGhlIHdheSB0byBkbyB0aGF0IGluIHRoZSBrZXJuZWwKKwkjIGlzIHRvIHNwZWNpZnk6CisJIyBtYWtlIC4uLmFyZ3MuLi4gQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9c29tZV9vdGhlcl9pbml0cmFtZnMuY3BpbworCWlmIFsgIiR1c2VfYWx0ZXJuYXRlX2luaXRyZCIgPSAiIiBdICYmIFsgIiR7SU5JVFJBTUZTX1RBU0t9IiAhPSAiIiBdIDsgdGhlbgorCQkjIFRoZSBvbGQgc3R5bGUgd2F5IG9mIGNvcHlpbmcgYW4gcHJlYnVpbHQgaW1hZ2UgYW5kIGJ1aWxkaW5nIGl0CisJCSMgaXMgdHVybmVkIG9uIHZpYSBJTlRJUkFNRlNfVEFTSyAhPSAiIgorCQljb3B5X2luaXRyYW1mcworCQl1c2VfYWx0ZXJuYXRlX2luaXRyZD1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0ke0J9L3Vzci8ke0lOSVRSQU1GU19JTUFHRX0tJHtNQUNISU5FfS5jcGlvCisJZmkKKwlvZV9ydW5tYWtlICR7S0VSTkVMX0lNQUdFVFlQRV9GT1JfTUFLRX0gJHtLRVJORUxfQUxUX0lNQUdFVFlQRX0gQ0M9IiR7S0VSTkVMX0NDfSIgTEQ9IiR7S0VSTkVMX0xEfSIgJHtLRVJORUxfRVhUUkFfQVJHU30gJHVzZV9hbHRlcm5hdGVfaW5pdHJkCisJaWYgdGVzdCAiJHtLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFfS5neiIgPSAiJHtLRVJORUxfSU1BR0VUWVBFfSI7IHRoZW4KKwkJZ3ppcCAtOWMgPCAiJHtLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFfSIgPiAiJHtLRVJORUxfT1VUUFVUfSIKKwlmaQorfQorCitkb19jb21waWxlX2tlcm5lbG1vZHVsZXMoKSB7CisJdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MgTUFDSElORQorCWlmIChncmVwIC1xIC1pIC1lICdeQ09ORklHX01PRFVMRVM9eSQnICR7Qn0vLmNvbmZpZyk7IHRoZW4KKwkJb2VfcnVubWFrZSAtQyAke0J9ICR7UEFSQUxMRUxfTUFLRX0gbW9kdWxlcyBDQz0iJHtLRVJORUxfQ0N9IiBMRD0iJHtLRVJORUxfTER9IiAke0tFUk5FTF9FWFRSQV9BUkdTfQorCWVsc2UKKwkJYmJub3RlICJubyBtb2R1bGVzIHRvIGNvbXBpbGUiCisJZmkKK30KK2FkZHRhc2sgY29tcGlsZV9rZXJuZWxtb2R1bGVzIGFmdGVyIGRvX2NvbXBpbGUgYmVmb3JlIGRvX3N0cmlwCisKK2tlcm5lbF9kb19pbnN0YWxsKCkgeworCSMKKwkjIEZpcnN0IGluc3RhbGwgdGhlIG1vZHVsZXMKKwkjCisJdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MgTUFDSElORQorCWlmIChncmVwIC1xIC1pIC1lICdeQ09ORklHX01PRFVMRVM9eSQnIC5jb25maWcpOyB0aGVuCisJCW9lX3J1bm1ha2UgREVQTU9EPWVjaG8gSU5TVEFMTF9NT0RfUEFUSD0iJHtEfSIgbW9kdWxlc19pbnN0YWxsCisJCXJtICIke0R9L2xpYi9tb2R1bGVzLyR7S0VSTkVMX1ZFUlNJT059L2J1aWxkIgorCQlybSAiJHtEfS9saWIvbW9kdWxlcy8ke0tFUk5FTF9WRVJTSU9OfS9zb3VyY2UiCisJCSMgSWYgdGhlIGtlcm5lbC8gZGlyZWN0b3J5IGlzIGVtcHR5IHJlbW92ZSBpdCB0byBwcmV2ZW50IFFBIGlzc3VlcworCQlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAiJHtEfS9saWIvbW9kdWxlcy8ke0tFUk5FTF9WRVJTSU9OfS9rZXJuZWwiCisJZWxzZQorCQliYm5vdGUgIm5vIG1vZHVsZXMgdG8gaW5zdGFsbCIKKwlmaQorCisJIworCSMgSW5zdGFsbCB2YXJpb3VzIGtlcm5lbCBvdXRwdXQgKHpJbWFnZSwgbWFwIGZpbGUsIGNvbmZpZywgbW9kdWxlIHN1cHBvcnQgZmlsZXMpCisJIworCWluc3RhbGwgLWQgJHtEfS8ke0tFUk5FTF9JTUFHRURFU1R9CisJaW5zdGFsbCAtZCAke0R9L2Jvb3QKKwlpbnN0YWxsIC1tIDA2NDQgJHtLRVJORUxfT1VUUFVUfSAke0R9LyR7S0VSTkVMX0lNQUdFREVTVH0vJHtLRVJORUxfSU1BR0VUWVBFfS0ke0tFUk5FTF9WRVJTSU9OfQorCWluc3RhbGwgLW0gMDY0NCBTeXN0ZW0ubWFwICR7RH0vYm9vdC9TeXN0ZW0ubWFwLSR7S0VSTkVMX1ZFUlNJT059CisJaW5zdGFsbCAtbSAwNjQ0IC5jb25maWcgJHtEfS9ib290L2NvbmZpZy0ke0tFUk5FTF9WRVJTSU9OfQorCWluc3RhbGwgLW0gMDY0NCB2bWxpbnV4ICR7RH0vYm9vdC92bWxpbnV4LSR7S0VSTkVMX1ZFUlNJT059CisJWyAtZSBNb2R1bGUuc3ltdmVycyBdICYmIGluc3RhbGwgLW0gMDY0NCBNb2R1bGUuc3ltdmVycyAke0R9L2Jvb3QvTW9kdWxlLnN5bXZlcnMtJHtLRVJORUxfVkVSU0lPTn0KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L21vZHVsZXMtbG9hZC5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9tb2Rwcm9iZS5kCit9Citkb19pbnN0YWxsW3ByZWZ1bmNzXSArPSAicGFja2FnZV9nZXRfYXV0b19wciIKKworYWRkdGFzayBzaGFyZWRfd29ya2RpciBhZnRlciBkb19jb21waWxlIGJlZm9yZSBkb19jb21waWxlX2tlcm5lbG1vZHVsZXMKK2FkZHRhc2sgc2hhcmVkX3dvcmtkaXJfc2V0c2NlbmUKKworZG9fc2hhcmVkX3dvcmtkaXJfc2V0c2NlbmUgKCkgeworCWV4aXQgMQorfQorCitlbWl0X2RlcG1vZF9wa2dkYXRhKCkgeworCSMgU3Rhc2ggZGF0YSBmb3IgZGVwbW9kCisJaW5zdGFsbCAtZCAke1BLR0RFU1RXT1JLfS9rZXJuZWwtZGVwbW9kLworCWVjaG8gIiR7S0VSTkVMX1ZFUlNJT059IiA+ICR7UEtHREVTVFdPUkt9L2tlcm5lbC1kZXBtb2Qva2VybmVsLWFiaXZlcnNpb24KKwljcCAke0J9L1N5c3RlbS5tYXAgJHtQS0dERVNUV09SS30va2VybmVsLWRlcG1vZC9TeXN0ZW0ubWFwLSR7S0VSTkVMX1ZFUlNJT059Cit9CisKK1BBQ0tBR0VGVU5DUyArPSAiZW1pdF9kZXBtb2RfcGtnZGF0YSIKKworZG9fc2hhcmVkX3dvcmtkaXIgKCkgeworCWNkICR7Qn0KKworCWtlcm5lbGRpcj0ke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfQorCWluc3RhbGwgLWQgJGtlcm5lbGRpcgorCisJIworCSMgU3RvcmUgdGhlIGtlcm5lbCB2ZXJzaW9uIGluIHN5c3Jvb3RzIGZvciBtb2R1bGUtYmFzZS5iYmNsYXNzCisJIworCisJZWNobyAiJHtLRVJORUxfVkVSU0lPTn0iID4gJGtlcm5lbGRpci9rZXJuZWwtYWJpdmVyc2lvbgorCisJIyBDb3B5IGZpbGVzIHJlcXVpcmVkIGZvciBtb2R1bGUgYnVpbGRzCisJY3AgU3lzdGVtLm1hcCAka2VybmVsZGlyL1N5c3RlbS5tYXAtJHtLRVJORUxfVkVSU0lPTn0KKwljcCBNb2R1bGUuc3ltdmVycyAka2VybmVsZGlyLworCWNwIC5jb25maWcgJGtlcm5lbGRpci8KKwlta2RpciAtcCAka2VybmVsZGlyL2luY2x1ZGUvY29uZmlnCisJY3AgaW5jbHVkZS9jb25maWcva2VybmVsLnJlbGVhc2UgJGtlcm5lbGRpci9pbmNsdWRlL2NvbmZpZy9rZXJuZWwucmVsZWFzZQorCisJIyBXZSBjYW4gYWxzbyBjb3B5IG92ZXIgYWxsIHRoZSBnZW5lcmF0ZWQgZmlsZXMgYW5kIGF2b2lkIHNwZWNpYWwgY2FzZXMKKwkjIGxpa2UgdmVyc2lvbi5oLCBidXQgd2UndmUgb3B0ZWQgdG8ga2VlcCB0aGlzIHNtYWxsIHVudGlsIGZpbGUgY3JlZXAgc3RhcnRzCisJIyB0byBoYXBwZW4KKwlpZiBbIC1lIGluY2x1ZGUvbGludXgvdmVyc2lvbi5oIF07IHRoZW4KKwkJbWtkaXIgLXAgJGtlcm5lbGRpci9pbmNsdWRlL2xpbnV4CisJCWNwIGluY2x1ZGUvbGludXgvdmVyc2lvbi5oICRrZXJuZWxkaXIvaW5jbHVkZS9saW51eC92ZXJzaW9uLmgKKwlmaQorCisJIyBBcyBvZiBMaW51eCBrZXJuZWwgdmVyc2lvbiAzLjAuMSwgdGhlIGNsZWFuIHRhcmdldCByZW1vdmVzCisJIyBhcmNoL3Bvd2VycGMvbGliL2NydHNhdnJlcy5vIHdoaWNoIGlzIHByZXNlbnQgaW4KKwkjIEtCVUlMRF9MREZMQUdTX01PRFVMRSwgbWFraW5nIGl0IHJlcXVpcmVkIHRvIGJ1aWxkIGV4dGVybmFsIG1vZHVsZXMuCisJaWYgWyAke0FSQ0h9ID0gInBvd2VycGMiIF07IHRoZW4KKwkJbWtkaXIgLXAgJGtlcm5lbGRpci9hcmNoL3Bvd2VycGMvbGliLworCQljcCBhcmNoL3Bvd2VycGMvbGliL2NydHNhdnJlcy5vICRrZXJuZWxkaXIvYXJjaC9wb3dlcnBjL2xpYi9jcnRzYXZyZXMubworCWZpCisKKwlpZiBbIC1kIGluY2x1ZGUvZ2VuZXJhdGVkIF07IHRoZW4KKwkJbWtkaXIgLXAgJGtlcm5lbGRpci9pbmNsdWRlL2dlbmVyYXRlZC8KKwkJY3AgLWZSIGluY2x1ZGUvZ2VuZXJhdGVkLyogJGtlcm5lbGRpci9pbmNsdWRlL2dlbmVyYXRlZC8KKwlmaQorCisJaWYgWyAtZCBhcmNoLyR7QVJDSH0vaW5jbHVkZS9nZW5lcmF0ZWQgXTsgdGhlbgorCQlta2RpciAtcCAka2VybmVsZGlyL2FyY2gvJHtBUkNIfS9pbmNsdWRlL2dlbmVyYXRlZC8KKwkJY3AgLWZSIGFyY2gvJHtBUkNIfS9pbmNsdWRlL2dlbmVyYXRlZC8qICRrZXJuZWxkaXIvYXJjaC8ke0FSQ0h9L2luY2x1ZGUvZ2VuZXJhdGVkLworCWZpCit9CisKKyMgV2UgZG9uJ3QgbmVlZCB0byBzdGFnZSBhbnl0aGluZywgbm90IHRoZSBtb2R1bGVzL2Zpcm13YXJlIHNpbmNlIHRob3NlIHdvdWxkIGNsYXNoIHdpdGggbGludXgtZmlybXdhcmUKK3N5c3Jvb3Rfc3RhZ2VfYWxsICgpIHsKKwk6Cit9CisKK0tFUk5FTF9DT05GSUdfQ09NTUFORCA/PSAib2VfcnVubWFrZV9jYWxsIC1DICR7U30gTz0ke0J9IG9sZG5vY29uZmlnIHx8IHllcyAnJyB8IG9lX3J1bm1ha2UgLUMgJHtTfSBPPSR7Qn0gb2xkY29uZmlnIgorCitrZXJuZWxfZG9fY29uZmlndXJlKCkgeworCSMgZml4ZXMgZXh0cmEgKyBpbiAvbGliL21vZHVsZXMvMi42LjM3KworCSMgJCBzY3JpcHRzL3NldGxvY2FsdmVyc2lvbiAuID0+ICsKKwkjICQgbWFrZSBrZXJuZWx2ZXJzaW9uID0+IDIuNi4zNworCSMgJCBtYWtlIGtlcm5lbHJlbGVhc2UgPT4gMi42LjM3KworCXRvdWNoICR7Qn0vLnNjbXZlcnNpb24gJHtTfS8uc2NtdmVyc2lvbgorCisJaWYgWyAiJHtTfSIgIT0gIiR7Qn0iIF0gJiYgWyAtZiAiJHtTfS8uY29uZmlnIiBdICYmIFsgISAtZiAiJHtCfS8uY29uZmlnIiBdOyB0aGVuCisJCW12ICIke1N9Ly5jb25maWciICIke0J9Ly5jb25maWciCisJZmkKKworCSMgQ29weSBkZWZjb25maWcgdG8gLmNvbmZpZyBpZiAuY29uZmlnIGRvZXMgbm90IGV4aXN0LiBUaGlzIGFsbG93cworCSMgcmVjaXBlcyB0byBtYW5hZ2UgdGhlIC5jb25maWcgdGhlbXNlbHZlcyBpbiBkb19jb25maWd1cmVfcHJlcGVuZCgpLgorCWlmIFsgLWYgIiR7V09SS0RJUn0vZGVmY29uZmlnIiBdICYmIFsgISAtZiAiJHtCfS8uY29uZmlnIiBdOyB0aGVuCisJCWNwICIke1dPUktESVJ9L2RlZmNvbmZpZyIgIiR7Qn0vLmNvbmZpZyIKKwlmaQorCWV2YWwgJHtLRVJORUxfQ09ORklHX0NPTU1BTkR9Cit9CisKK2RvX3NhdmVkZWZjb25maWcoKSB7CisJb2VfcnVubWFrZSAtQyAke0J9IHNhdmVkZWZjb25maWcKK30KK2RvX3NhdmVkZWZjb25maWdbbm9zdGFtcF0gPSAiMSIKK2FkZHRhc2sgc2F2ZWRlZmNvbmZpZyBhZnRlciBkb19jb25maWd1cmUKKworaW5oZXJpdCBjbWwxCisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29tcGlsZSBkb19pbnN0YWxsIGRvX2NvbmZpZ3VyZQorCisjIGtlcm5lbC1iYXNlIGJlY29tZXMga2VybmVsLSR7S0VSTkVMX1ZFUlNJT059CisjIGtlcm5lbC1pbWFnZSBiZWNvbWVzIGtlcm5lbC1pbWFnZS0ke0tFUk5FTF9WRVJJU09OfQorUEFDS0FHRVMgPSAia2VybmVsIGtlcm5lbC1iYXNlIGtlcm5lbC12bWxpbnV4IGtlcm5lbC1pbWFnZSBrZXJuZWwtZGV2IGtlcm5lbC1tb2R1bGVzIgorRklMRVNfJHtQTn0gPSAiIgorRklMRVNfa2VybmVsLWJhc2UgPSAiL2xpYi9tb2R1bGVzLyR7S0VSTkVMX1ZFUlNJT059L21vZHVsZXMub3JkZXIgL2xpYi9tb2R1bGVzLyR7S0VSTkVMX1ZFUlNJT059L21vZHVsZXMuYnVpbHRpbiIKK0ZJTEVTX2tlcm5lbC1pbWFnZSA9ICIvYm9vdC8ke0tFUk5FTF9JTUFHRVRZUEV9KiIKK0ZJTEVTX2tlcm5lbC1kZXYgPSAiL2Jvb3QvU3lzdGVtLm1hcCogL2Jvb3QvTW9kdWxlLnN5bXZlcnMqIC9ib290L2NvbmZpZyogJHtLRVJORUxfU1JDX1BBVEh9IC9saWIvbW9kdWxlcy8ke0tFUk5FTF9WRVJTSU9OfS9idWlsZCIKK0ZJTEVTX2tlcm5lbC12bWxpbnV4ID0gIi9ib290L3ZtbGludXgqIgorRklMRVNfa2VybmVsLW1vZHVsZXMgPSAiIgorUkRFUEVORFNfa2VybmVsID0gImtlcm5lbC1iYXNlIgorIyBBbGxvdyBtYWNoaW5lcyB0byBvdmVycmlkZSB0aGlzIGRlcGVuZGVuY3kgaWYga2VybmVsIGltYWdlIGZpbGVzIGFyZSAKKyMgbm90IHdhbnRlZCBpbiBpbWFnZXMgYXMgc3RhbmRhcmQKK1JERVBFTkRTX2tlcm5lbC1iYXNlID89ICJrZXJuZWwtaW1hZ2UiCitQS0dfa2VybmVsLWltYWdlID0gImtlcm5lbC1pbWFnZS0ke0BsZWdpdGltaXplX3BhY2thZ2VfbmFtZSgnJHtLRVJORUxfVkVSU0lPTn0nKX0iCitSREVQRU5EU19rZXJuZWwtaW1hZ2UgKz0gIiR7QGJhc2VfY29uZGl0aW9uYWwoJ0tFUk5FTF9JTUFHRVRZUEUnLCAndm1saW51eCcsICdrZXJuZWwtdm1saW51eCcsICcnLCBkKX0iCitQS0dfa2VybmVsLWJhc2UgPSAia2VybmVsLSR7QGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKCcke0tFUk5FTF9WRVJTSU9OfScpfSIKK1JQUk9WSURFU19rZXJuZWwtYmFzZSArPSAia2VybmVsLSR7S0VSTkVMX1ZFUlNJT059IgorQUxMT1dfRU1QVFlfa2VybmVsID0gIjEiCitBTExPV19FTVBUWV9rZXJuZWwtYmFzZSA9ICIxIgorQUxMT1dfRU1QVFlfa2VybmVsLWltYWdlID0gIjEiCitBTExPV19FTVBUWV9rZXJuZWwtbW9kdWxlcyA9ICIxIgorREVTQ1JJUFRJT05fa2VybmVsLW1vZHVsZXMgPSAiS2VybmVsIG1vZHVsZXMgbWV0YSBwYWNrYWdlIgorCitwa2dfcG9zdGluc3Rfa2VybmVsLWJhc2UgKCkgeworCWlmIFsgISAtZSAiJEQvbGliL21vZHVsZXMvJHtLRVJORUxfVkVSU0lPTn0iIF07IHRoZW4KKwkJbWtkaXIgLXAgJEQvbGliL21vZHVsZXMvJHtLRVJORUxfVkVSU0lPTn0KKwlmaQorCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCWRlcG1vZHdyYXBwZXIgLWEgLWIgJEQgJHtLRVJORUxfVkVSU0lPTn0KKwllbHNlCisJCWRlcG1vZCAtYSAke0tFUk5FTF9WRVJTSU9OfQorCWZpCit9CisKK3BrZ19wb3N0aW5zdF9rZXJuZWwtaW1hZ2UgKCkgeworCXVwZGF0ZS1hbHRlcm5hdGl2ZXMgLS1pbnN0YWxsIC8ke0tFUk5FTF9JTUFHRURFU1R9LyR7S0VSTkVMX0lNQUdFVFlQRX0gJHtLRVJORUxfSU1BR0VUWVBFfSAvJHtLRVJORUxfSU1BR0VERVNUfS8ke0tFUk5FTF9JTUFHRVRZUEV9LSR7S0VSTkVMX1ZFUlNJT059ICR7S0VSTkVMX1BSSU9SSVRZfSB8fCB0cnVlCit9CisKK3BrZ19wb3N0cm1fa2VybmVsLWltYWdlICgpIHsKKwl1cGRhdGUtYWx0ZXJuYXRpdmVzIC0tcmVtb3ZlICR7S0VSTkVMX0lNQUdFVFlQRX0gJHtLRVJORUxfSU1BR0VUWVBFfS0ke0tFUk5FTF9WRVJTSU9OfSB8fCB0cnVlCit9CisKK1BBQ0tBR0VTUExJVEZVTkNTX3ByZXBlbmQgPSAic3BsaXRfa2VybmVsX3BhY2thZ2VzICIKKworcHl0aG9uIHNwbGl0X2tlcm5lbF9wYWNrYWdlcyAoKSB7CisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcm9vdD0nL2xpYi9maXJtd2FyZScsIGZpbGVfcmVnZXg9J14oLiopXC4oYmlufGZ3fGNpc3xkc3ApJCcsIG91dHB1dF9wYXR0ZXJuPSdrZXJuZWwtZmlybXdhcmUtJXMnLCBkZXNjcmlwdGlvbj0nRmlybXdhcmUgZm9yICVzJywgcmVjdXJzaXZlPVRydWUsIGV4dHJhX2RlcGVuZHM9JycpCit9CisKK2RvX3N0cmlwKCkgeworCWlmIFsgLW4gIiR7S0VSTkVMX0lNQUdFX1NUUklQX0VYVFJBX1NFQ1RJT05TfSIgXTsgdGhlbgorCQlpZiBbICIke0tFUk5FTF9JTUFHRVRZUEV9IiAhPSAidm1saW51eCIgXTsgdGhlbgorCQkJYmJ3YXJuICJpbWFnZSB0eXBlIHdpbGwgbm90IGJlIHN0cmlwcGVkIChub3Qgc3VwcG9ydGVkKTogJHtLRVJORUxfSU1BR0VUWVBFfSIKKwkJCXJldHVybgorCQlmaQorCisJCWNkICR7Qn0KKwkJaGVhZGVycz1gIiRDUk9TU19DT01QSUxFInJlYWRlbGYgLVMgJHtLRVJORUxfT1VUUFVUfSB8IFwKKwkJCSAgZ3JlcCAiXiBcezEsXH1cW1swLTkgXVx7MSxcfVxdIFteIF0iIHwgXAorCQkJICBzZWQgInMvXiBcezEsXH1cW1swLTkgXVx7MSxcfVxdIC8vIiB8IFwKKwkJCSAgZ2F3ayAne3ByaW50ICQxfSdgCisKKwkJZm9yIHN0ciBpbiAke0tFUk5FTF9JTUFHRV9TVFJJUF9FWFRSQV9TRUNUSU9OU307IGRvIHsKKwkJCWlmIFsgIiRoZWFkZXJzIiAhPSAqIiRzdHIiKiBdOyB0aGVuCisJCQkJYmJ3YXJuICJTZWN0aW9uIG5vdCBmb3VuZDogJHN0ciI7CisJCQlmaQorCisJCQkiJENST1NTX0NPTVBJTEUic3RyaXAgLXMgLVIgJHN0ciAke0tFUk5FTF9PVVRQVVR9CisJCX07IGRvbmUKKworCQliYm5vdGUgIktFUk5FTF9JTUFHRV9TVFJJUF9FWFRSQV9TRUNUSU9OUyBpcyBzZXQsIHN0cmlwcGluZyBzZWN0aW9uczoiIFwKKwkJCSIke0tFUk5FTF9JTUFHRV9TVFJJUF9FWFRSQV9TRUNUSU9OU30iCisJZmk7Cit9Citkb19zdHJpcFtkaXJzXSA9ICIke0J9IgorCithZGR0YXNrIGRvX3N0cmlwIGJlZm9yZSBkb19zaXplY2hlY2sgYWZ0ZXIgZG9fa2VybmVsX2xpbmtfdm1saW51eAorCisjIFN1cHBvcnQgY2hlY2tpbmcgdGhlIGtlcm5lbCBzaXplIHNpbmNlIHNvbWUga2VybmVscyBuZWVkIHRvIHJlc2lkZSBpbiBwYXJ0aXRpb25zCisjIHdpdGggYSBmaXhlZCBsZW5ndGggb3IgdGhlcmUgaXMgYSBsaW1pdCBpbiB0cmFuc2ZlcnJpbmcgdGhlIGtlcm5lbCB0byBtZW1vcnkKK2RvX3NpemVjaGVjaygpIHsKKwlpZiBbICEgLXogIiR7S0VSTkVMX0lNQUdFX01BWFNJWkV9IiBdOyB0aGVuCisJCWludmFsaWQ9YGVjaG8gJHtLRVJORUxfSU1BR0VfTUFYU0laRX0gfCBzZWQgJ3MvWzAtOV0vL2cnYAorCQlpZiBbIC1uICIkaW52YWxpZCIgXTsgdGhlbgorCQkJZGllICJJbnZhbGlkIEtFUk5FTF9JTUFHRV9NQVhTSVpFOiAke0tFUk5FTF9JTUFHRV9NQVhTSVpFfSwgc2hvdWxkIGJlIGFuIGludGVnZXJ4IChUaGUgdW5pdCBpcyBLYnl0ZXMpIgorCQlmaQorCQlzaXplPWBkdSAta3MgJHtCfS8ke0tFUk5FTF9PVVRQVVR9IHwgYXdrICd7IHByaW50ICQxfSdgCisJCWlmIFsgJHNpemUgLWdlICR7S0VSTkVMX0lNQUdFX01BWFNJWkV9IF07IHRoZW4KKwkJCWRpZSAiVGhpcyBrZXJuZWwgKHNpemU9JHNpemUoSykgPiAke0tFUk5FTF9JTUFHRV9NQVhTSVpFfShLKSkgaXMgdG9vIGJpZyBmb3IgeW91ciBkZXZpY2UuIFBsZWFzZSByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGtlcm5lbCBieSBtYWtpbmcgbW9yZSBvZiBpdCBtb2R1bGFyLiIKKwkJZmkKKwlmaQorfQorZG9fc2l6ZWNoZWNrW2RpcnNdID0gIiR7Qn0iCisKK2FkZHRhc2sgc2l6ZWNoZWNrIGJlZm9yZSBkb19pbnN0YWxsIGFmdGVyIGRvX3N0cmlwCisKK0tFUk5FTF9JTUFHRV9CQVNFX05BTUUgPz0gIiR7S0VSTkVMX0lNQUdFVFlQRX0tJHtQS0dFfS0ke1BLR1Z9LSR7UEtHUn0tJHtNQUNISU5FfS0ke0RBVEVUSU1FfSIKKyMgRG9uJ3QgaW5jbHVkZSB0aGUgREFURVRJTUUgdmFyaWFibGUgaW4gdGhlIHNzdGF0ZSBwYWNrYWdlIHNpZ25hdHVyZXMKK0tFUk5FTF9JTUFHRV9CQVNFX05BTUVbdmFyZGVwc2V4Y2x1ZGVdID0gIkRBVEVUSU1FIgorS0VSTkVMX0lNQUdFX1NZTUxJTktfTkFNRSA/PSAiJHtLRVJORUxfSU1BR0VUWVBFfS0ke01BQ0hJTkV9IgorTU9EVUxFX0lNQUdFX0JBU0VfTkFNRSA/PSAibW9kdWxlcy0ke1BLR0V9LSR7UEtHVn0tJHtQS0dSfS0ke01BQ0hJTkV9LSR7REFURVRJTUV9IgorTU9EVUxFX0lNQUdFX0JBU0VfTkFNRVt2YXJkZXBzZXhjbHVkZV0gPSAiREFURVRJTUUiCitNT0RVTEVfVEFSQkFMTF9CQVNFX05BTUUgPz0gIiR7TU9EVUxFX0lNQUdFX0JBU0VfTkFNRX0udGd6IgorIyBEb24ndCBpbmNsdWRlIHRoZSBEQVRFVElNRSB2YXJpYWJsZSBpbiB0aGUgc3N0YXRlIHBhY2thZ2Ugc2lnbmF0dXJlcworTU9EVUxFX1RBUkJBTExfU1lNTElOS19OQU1FID89ICJtb2R1bGVzLSR7TUFDSElORX0udGd6IgorTU9EVUxFX1RBUkJBTExfREVQTE9ZID89ICIxIgorCitrZXJuZWxfZG9fZGVwbG95KCkgeworCWluc3RhbGwgLW0gMDY0NCAke0tFUk5FTF9PVVRQVVR9ICR7REVQTE9ZRElSfS8ke0tFUk5FTF9JTUFHRV9CQVNFX05BTUV9LmJpbgorCWlmIFsgJHtNT0RVTEVfVEFSQkFMTF9ERVBMT1l9ID0gIjEiIF0gJiYgKGdyZXAgLXEgLWkgLWUgJ15DT05GSUdfTU9EVUxFUz15JCcgLmNvbmZpZyk7IHRoZW4KKwkJbWtkaXIgLXAgJHtEfS9saWIKKwkJdGFyIC1jdnpmICR7REVQTE9ZRElSfS8ke01PRFVMRV9UQVJCQUxMX0JBU0VfTkFNRX0gLUMgJHtEfSBsaWIKKwkJbG4gLXNmICR7TU9EVUxFX1RBUkJBTExfQkFTRV9OQU1FfSAke0RFUExPWURJUn0vJHtNT0RVTEVfVEFSQkFMTF9TWU1MSU5LX05BTUV9CisJZmkKKworCWxuIC1zZiAke0tFUk5FTF9JTUFHRV9CQVNFX05BTUV9LmJpbiAke0RFUExPWURJUn0vJHtLRVJORUxfSU1BR0VfU1lNTElOS19OQU1FfS5iaW4KKwlsbiAtc2YgJHtLRVJORUxfSU1BR0VfQkFTRV9OQU1FfS5iaW4gJHtERVBMT1lESVJ9LyR7S0VSTkVMX0lNQUdFVFlQRX0KKworCWNwICR7Q09SRUJBU0V9L21ldGEvZmlsZXMvZGVwbG95ZGlyX3JlYWRtZS50eHQgJHtERVBMT1lESVJ9L1JFQURNRV8tX0RPX05PVF9ERUxFVEVfRklMRVNfSU5fVEhJU19ESVJFQ1RPUlkudHh0CisKKwljZCAke0J9CisJIyBVcGRhdGUgZGVwbG95IGRpcmVjdG9yeQorCWlmIFsgLWUgIiR7S0VSTkVMX09VVFBVVH0uaW5pdHJhbWZzIiBdOyB0aGVuCisJCWVjaG8gIkNvcHlpbmcgZGVwbG95IGtlcm5lbC1pbml0cmFtZnMgaW1hZ2UgYW5kIHNldHRpbmcgdXAgbGlua3MuLi4iCisJCWluaXRyYW1mc19iYXNlX25hbWU9JHtJTklUUkFNRlNfQkFTRV9OQU1FfQorCQlpbml0cmFtZnNfc3ltbGlua19uYW1lPSR7S0VSTkVMX0lNQUdFVFlQRX0taW5pdHJhbWZzLSR7TUFDSElORX0KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7S0VSTkVMX09VVFBVVH0uaW5pdHJhbWZzICR7REVQTE9ZRElSfS8ke2luaXRyYW1mc19iYXNlX25hbWV9LmJpbgorCQljZCAke0RFUExPWURJUn0KKwkJbG4gLXNmICR7aW5pdHJhbWZzX2Jhc2VfbmFtZX0uYmluICR7aW5pdHJhbWZzX3N5bWxpbmtfbmFtZX0uYmluCisJZmkKK30KK2RvX2RlcGxveVtkaXJzXSA9ICIke0RFUExPWURJUn0gJHtCfSIKK2RvX2RlcGxveVtwcmVmdW5jc10gKz0gInBhY2thZ2VfZ2V0X2F1dG9fcHIiCisKK2FkZHRhc2sgZGVwbG95IGFmdGVyIGRvX3BvcHVsYXRlX3N5c3Jvb3QKKworRVhQT1JUX0ZVTkNUSU9OUyBkb19kZXBsb3kKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsc3JjLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWxzcmMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWZkNDZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsc3JjLmJiY2xhc3MKQEAgLTAsMCArMSwxMCBAQAorUyA9ICIke1NUQUdJTkdfS0VSTkVMX0RJUn0iCitkb19mZXRjaFtub2V4ZWNdID0gIjEiCitkb191bnBhY2tbZGVwZW5kc10gKz0gInZpcnR1YWwva2VybmVsOmRvX3BhdGNoIgorZG9fdW5wYWNrW25vZXhlY10gPSAiMSIKK2RvX3BhdGNoW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2VbZGVwZW5kc10gKz0gInZpcnR1YWwva2VybmVsOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCitLRVJORUxfVkVSU0lPTiA9ICIke0BnZXRfa2VybmVsdmVyc2lvbl9maWxlKCIke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfSIpfSIKKworaW5oZXJpdCBsaW51eC1rZXJuZWwtYmFzZQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saWJfcGFja2FnZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbGliX3BhY2thZ2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODQ5ZjU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbGliX3BhY2thZ2UuYmJjbGFzcwpAQCAtMCwwICsxLDcgQEAKKyMKKyMgJHtQTn0tYmluIGlzIGRlZmluZWQgaW4gYml0YmFrZS5jb25mCisjCisjIFdlIG5lZWQgdG8gYWxsb3cgdGhlIG90aGVyIHBhY2thZ2VzIHRvIGJlIGdyZWVkeSB3aXRoIHdoYXQgdGhleQorIyB3YW50IG91dCBvZiAvdXNyL2JpbiBhbmQgL3Vzci9zYmluIGJlZm9yZSAke1BOfS1iaW4gZ2V0cyBncmVlZHkuCisjIAorUEFDS0FHRV9CRUZPUkVfUE4gPSAiJHtQTn0tYmluIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbGliYy1jb21tb24uYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpYmMtY29tbW9uLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJjODAxNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpYmMtY29tbW9uLmJiY2xhc3MKQEAgLTAsMCArMSw0MyBAQAorZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGxfcm9vdD0ke0R9IGluc3RhbGwKKwlmb3IgciBpbiAke3JwY3N2Y307IGRvCisJCWg9YGVjaG8gJHJ8c2VkIC1lJ3MsXC54JCwuaCwnYAorCQlpbnN0YWxsIC1tIDA2NDQgJHtTfS9zdW5ycGMvcnBjc3ZjLyRoICR7RH0vJHtpbmNsdWRlZGlyfS9ycGNzdmMvCisJZG9uZQorCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9LyAKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9ldGMvbGQuc28uY29uZiAke0R9LyR7c3lzY29uZmRpcn0vCisJaW5zdGFsbCAtZCAke0R9JHtsb2NhbGVkaXJ9CisJbWFrZSAtZiAke1dPUktESVJ9L2dlbmVyYXRlLXN1cHBvcnRlZC5tayBJTj0iJHtTfS9sb2NhbGVkYXRhL1NVUFBPUlRFRCIgT1VUPSIke1dPUktESVJ9L1NVUFBPUlRFRCIKKwkjIGdldCByaWQgb2Ygc29tZSBicm9rZW4gZmlsZXMuLi4KKwlmb3IgaSBpbiAke0dMSUJDX0JST0tFTl9MT0NBTEVTfTsgZG8KKwkJZ3JlcCAtdiAkaSAke1dPUktESVJ9L1NVUFBPUlRFRCA+ICR7V09SS0RJUn0vU1VQUE9SVEVELnRtcAorCQltdiAke1dPUktESVJ9L1NVUFBPUlRFRC50bXAgJHtXT1JLRElSfS9TVVBQT1JURUQKKwlkb25lCisJcm0gLWYgJHtEfSR7c3lzY29uZmRpcn0vcnBjCisJcm0gLXJmICR7RH0ke2RhdGFkaXJ9L3pvbmVpbmZvCisJcm0gLXJmICR7RH0ke2xpYmV4ZWNkaXJ9L2dldGNvbmYKK30KKworZGVmIGdldF9saWJjX2ZwdV9zZXR0aW5nKGJiLCBkKToKKyAgICBpZiBkLmdldFZhcignVEFSR0VUX0ZQVScsIFRydWUpIGluIFsgJ3NvZnQnLCAncHBjLWVmZCcgXToKKyAgICAgICAgcmV0dXJuICItLXdpdGhvdXQtZnAiCisgICAgcmV0dXJuICIiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBpZiBkLmdldFZhcignREVCSUFOX05BTUVTJywgVHJ1ZSk6CisgICAgICAgIHBrZ3MgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgICAgIGJwbiA9IGQuZ2V0VmFyKCdCUE4nLCBUcnVlKQorICAgICAgICBwcmVmaXggPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKSBvciAiIgorICAgICAgICAjIFNldCB0aGUgYmFzZSBwYWNrYWdlLi4uCisgICAgICAgIGQuc2V0VmFyKCdQS0dfJyArIHByZWZpeCArIGJwbiwgcHJlZml4ICsgJ2xpYmM2JykKKyAgICAgICAgbGliY3ByZWZpeCA9IHByZWZpeCArIGJwbiArICctJworICAgICAgICBmb3IgcCBpbiBwa2dzOgorICAgICAgICAgICAgIyBBbmQgYWxsIHRoZSBzdWJwYWNrYWdlcy4KKyAgICAgICAgICAgIGlmIHAuc3RhcnRzd2l0aChsaWJjcHJlZml4KToKKyAgICAgICAgICAgICAgICByZW5hbWVkID0gcC5yZXBsYWNlKGJwbiwgJ2xpYmM2JywgMSkKKyAgICAgICAgICAgICAgICBkLnNldFZhcignUEtHXycgKyBwLCByZW5hbWVkKQorICAgICAgICAjIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggb2xkIC1kYmcgcGFja2FnZQorICAgICAgICBkLmFwcGVuZFZhcignUlBST1ZJREVTXycgKyBsaWJjcHJlZml4ICsgJ2RiZycsICcgJyArIHByZWZpeCArICdsaWJjLWRiZycpCisgICAgICAgIGQuYXBwZW5kVmFyKCdSQ09ORkxJQ1RTXycgKyBsaWJjcHJlZml4ICsgJ2RiZycsICcgJyArIHByZWZpeCArICdsaWJjLWRiZycpCisgICAgICAgIGQuYXBwZW5kVmFyKCdSUkVQTEFDRVNfJyArIGxpYmNwcmVmaXggKyAnZGJnJywgJyAnICsgcHJlZml4ICsgJ2xpYmMtZGJnJykKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpYmMtcGFja2FnZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbGliYy1wYWNrYWdlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdiZTY5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpYmMtcGFja2FnZS5iYmNsYXNzCkBAIC0wLDAgKzEsMzg4IEBACisjCisjIFRoaXMgY2xhc3Mga25vd3MgaG93IHRvIHBhY2thZ2UgdXAgW2VdZ2xpYmMuIEl0cyBzaGFyZWQgc2luY2UgcHJlYnVpbGQgYmluYXJ5IHRvb2xjaGFpbnMKKyMgbWF5IG5lZWQgcGFja2FnaW5nIGFuZCBpdHMgcG9pbnRsZXNzIHRvIGR1cGxpY2F0ZSB0aGlzIGNvZGUuCisjCisjIENhbGxlciBzaG91bGQgc2V0IEdMSUJDX0lOVEVSTkFMX1VTRV9CSU5BUllfTE9DQUxFIHRvIG9uZSBvZjoKKyMgICJjb21waWxlIiAtIFVzZSBRRU1VIHRvIGdlbmVyYXRlIHRoZSBiaW5hcnkgbG9jYWxlIGZpbGVzCisjICAicHJlY29tcGlsZWQiIC0gVGhlIGJpbmFyeSBsb2NhbGUgZmlsZXMgYXJlIHByZWdlbmVyYXRlZCBhbmQgYWxyZWFkeSBwcmVzZW50CisjICAib25kZXZpY2UiIC0gVGhlIGRldmljZSB3aWxsIGJ1aWxkIHRoZSBsb2NhbGUgZmlsZXMgdXBvbiBmaXJzdCBib290IHRocm91Z2ggdGhlIHBvc3RpbnN0CisKK0dMSUJDX0lOVEVSTkFMX1VTRV9CSU5BUllfTE9DQUxFID89ICJvbmRldmljZSIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBlbmFibGVkID0gZC5nZXRWYXIoIkVOQUJMRV9CSU5BUllfTE9DQUxFX0dFTkVSQVRJT04iLCBUcnVlKQorCisgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgIGlmIHBuLmVuZHN3aXRoKCItaW5pdGlhbCIpOgorICAgICAgICBlbmFibGVkID0gRmFsc2UKKworICAgIGlmIGVuYWJsZWQgYW5kIGludChlbmFibGVkKToKKyAgICAgICAgaW1wb3J0IHJlCisKKyAgICAgICAgdGFyZ2V0X2FyY2ggPSBkLmdldFZhcigiVEFSR0VUX0FSQ0giLCBUcnVlKQorICAgICAgICBiaW5hcnlfYXJjaGVzID0gZC5nZXRWYXIoIkJJTkFSWV9MT0NBTEVfQVJDSEVTIiwgVHJ1ZSkgb3IgIiIKKyAgICAgICAgdXNlX2Nyb3NzX2xvY2FsZWRlZiA9IGQuZ2V0VmFyKCJMT0NBTEVfR0VORVJBVElPTl9XSVRIX0NST1NTLUxPQ0FMRURFRiIsIFRydWUpIG9yICIiCisKKyAgICAgICAgZm9yIHJlZ2V4cCBpbiBiaW5hcnlfYXJjaGVzLnNwbGl0KCIgIik6CisgICAgICAgICAgICByID0gcmUuY29tcGlsZShyZWdleHApCisKKyAgICAgICAgICAgIGlmIHIubWF0Y2godGFyZ2V0X2FyY2gpOgorICAgICAgICAgICAgICAgIGRlcGVuZHMgPSBkLmdldFZhcigiREVQRU5EUyIsIFRydWUpCisgICAgICAgICAgICAgICAgaWYgdXNlX2Nyb3NzX2xvY2FsZWRlZiA9PSAiMSIgOgorICAgICAgICAgICAgICAgICAgICBkZXBlbmRzID0gIiVzIGNyb3NzLWxvY2FsZWRlZi1uYXRpdmUiICUgZGVwZW5kcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMgPSAiJXMgcWVtdS1uYXRpdmUiICUgZGVwZW5kcworICAgICAgICAgICAgICAgIGQuc2V0VmFyKCJERVBFTkRTIiwgZGVwZW5kcykKKyAgICAgICAgICAgICAgICBkLnNldFZhcigiR0xJQkNfSU5URVJOQUxfVVNFX0JJTkFSWV9MT0NBTEUiLCAiY29tcGlsZSIpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICMgdHJ5IHRvIGZpeCBkaXNhYmxlIGNoYXJzZXRzL2xvY2FsZXMvbG9jYWxlLWNvZGUgY29tcGlsZSBmYWlsCisgICAgaWYgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWNoYXJzZXRzJywgVHJ1ZSwgRmFsc2UsIGQpIGFuZCBcCisgICAgICAgICAgICBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtbG9jYWxlcycsIFRydWUsIEZhbHNlLCBkKSBhbmQgXAorICAgICAgICAgICAgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWxvY2FsZS1jb2RlJywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBkLnNldFZhcignUEFDS0FHRV9OT19HQ09OVicsICcwJykKKyAgICBlbHNlOgorICAgICAgICBkLnNldFZhcignUEFDS0FHRV9OT19HQ09OVicsICcxJykKK30KKworT1ZFUlJJREVTX2FwcGVuZCA9ICI6JHtUQVJHRVRfQVJDSH0tJHtUQVJHRVRfT1N9IgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAgICAgaWYgWyAtZSAke1N9L2VsZi9sZGQuYmFzaC5pbiBdOyB0aGVuCisgICAgICAgICAgICAgICAgc2VkIC1lICJzI0BCQVNIQCMvYmluL3NoIyIgLWkgJHtTfS9lbGYvbGRkLmJhc2guaW4KKyAgICAgICAgZmkKK30KKworCisKKyMgaW5kZW50YXRpb24gcmVtb3ZlZCBvbiBwdXJwb3NlCitsb2NhbGVfYmFzZV9wb3N0aW5zdCgpIHsKKyMhL2Jpbi9zaAorCitpZiBbICJ4JEQiICE9ICJ4IiBdOyB0aGVuCisJZXhpdCAxCitmaQorCitybSAtcmYgJHtUTVBfTE9DQUxFfQorbWtkaXIgLXAgJHtUTVBfTE9DQUxFfQoraWYgWyAtZiAke2xvY2FsZWRpcn0vbG9jYWxlLWFyY2hpdmUgXTsgdGhlbgorICAgICAgICBjcCAke2xvY2FsZWRpcn0vbG9jYWxlLWFyY2hpdmUgJHtUTVBfTE9DQUxFfS8KK2ZpCitsb2NhbGVkZWYgLS1pbnB1dGZpbGU9JHtkYXRhZGlyfS9pMThuL2xvY2FsZXMvJXMgLS1jaGFybWFwPSVzIC0tcHJlZml4PS90bXAvbG9jYWxlICVzCitta2RpciAtcCAke2xvY2FsZWRpcn0vCittdiAke1RNUF9MT0NBTEV9L2xvY2FsZS1hcmNoaXZlICR7bG9jYWxlZGlyfS8KK3JtIC1yZiAke1RNUF9MT0NBTEV9Cit9CisKKyMgaW5kZW50YXRpb24gcmVtb3ZlZCBvbiBwdXJwb3NlCitsb2NhbGVfYmFzZV9wb3N0cm0oKSB7CisjIS9iaW4vc2gKKworcm0gLXJmICR7VE1QX0xPQ0FMRX0KK21rZGlyIC1wICR7VE1QX0xPQ0FMRX0KK2lmIFsgLWYgJHtsb2NhbGVkaXJ9L2xvY2FsZS1hcmNoaXZlIF07IHRoZW4KKwljcCAke2xvY2FsZWRpcn0vbG9jYWxlLWFyY2hpdmUgJHtUTVBfTE9DQUxFfS8KK2ZpCitsb2NhbGVkZWYgLS1kZWxldGUtZnJvbS1hcmNoaXZlIC0taW5wdXRmaWxlPSR7ZGF0YWRpcn0vbG9jYWxlcy8lcyAtLWNoYXJtYXA9JXMgLS1wcmVmaXg9L3RtcC9sb2NhbGUgJXMKK212ICR7VE1QX0xPQ0FMRX0vbG9jYWxlLWFyY2hpdmUgJHtsb2NhbGVkaXJ9Lworcm0gLXJmICR7VE1QX0xPQ0FMRX0KK30KKworCitUTVBfTE9DQUxFPSIvdG1wL2xvY2FsZSR7bG9jYWxlZGlyfSIKK0xPQ0FMRVRSRUVTUkMgPz0gIiR7UEtHRH0iCisKK2RvX3ByZXBfbG9jYWxlX3RyZWUoKSB7CisJdHJlZWRpcj0ke1dPUktESVJ9L2xvY2FsZS10cmVlCisJcm0gLXJmICR0cmVlZGlyCisJbWtkaXIgLXAgJHRyZWVkaXIvJHtiYXNlX2JpbmRpcn0gJHRyZWVkaXIvJHtiYXNlX2xpYmRpcn0gJHRyZWVkaXIvJHtkYXRhZGlyfSAkdHJlZWRpci8ke2xvY2FsZWRpcn0KKwl0YXIgLWNmIC0gLUMgJHtMT0NBTEVUUkVFU1JDfSR7ZGF0YWRpcn0gLXAgaTE4biB8IHRhciAteGYgLSAtQyAkdHJlZWRpci8ke2RhdGFkaXJ9CisJIyB1bnppcCB0byBhdm9pZCBwYXJzaW5nIGVycm9ycworCWZvciBpIGluICR0cmVlZGlyLyR7ZGF0YWRpcn0vaTE4bi9jaGFybWFwcy8qZ3o7IGRvIAorCQlndW56aXAgJGkKKwlkb25lCisJdGFyIC1jZiAtIC1DICR7TE9DQUxFVFJFRVNSQ30ke2Jhc2VfbGliZGlyfSAtcCAuIHwgdGFyIC14ZiAtIC1DICR0cmVlZGlyLyR7YmFzZV9saWJkaXJ9CisJaWYgWyAtZiAke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9L2xpYi9saWJnY2Nfcy4qIF07IHRoZW4KKwkJdGFyIC1jZiAtIC1DICR7U1RBR0lOR19ESVJfTkFUSVZFfS8ke3ByZWZpeF9uYXRpdmV9LyR7YmFzZV9saWJkaXJ9IC1wIGxpYmdjY19zLiogfCB0YXIgLXhmIC0gLUMgJHRyZWVkaXIvJHtiYXNlX2xpYmRpcn0KKwlmaQorCWluc3RhbGwgLW0gMDc1NSAke0xPQ0FMRVRSRUVTUkN9JHtiaW5kaXJ9L2xvY2FsZWRlZiAkdHJlZWRpci8ke2Jhc2VfYmluZGlyfQorfQorCitkb19jb2xsZWN0X2JpbnNfZnJvbV9sb2NhbGVfdHJlZSgpIHsKKwl0cmVlZGlyPSR7V09SS0RJUn0vbG9jYWxlLXRyZWUKKworCXBhcmVudD0kKGRpcm5hbWUgJHtsb2NhbGVkaXJ9KQorCW1rZGlyIC1wICR7UEtHRH0vJHBhcmVudAorCXRhciAtY2YgLSAtQyAkdHJlZWRpci8kcGFyZW50IC1wICQoYmFzZW5hbWUgJHtsb2NhbGVkaXJ9KSB8IHRhciAteGYgLSAtQyAke1BLR0R9JHBhcmVudAorfQorCitpbmhlcml0IHFlbXUKKworcHl0aG9uIHBhY2thZ2VfZG9fc3BsaXRfZ2NvbnZzICgpIHsKKyAgICBpbXBvcnQgcmUKKyAgICBpZiAoZC5nZXRWYXIoJ1BBQ0tBR0VfTk9fR0NPTlYnLCBUcnVlKSA9PSAnMScpOgorICAgICAgICBiYi5ub3RlKCJwYWNrYWdlIHJlcXVlc3RlZCBub3Qgc3BsaXR0aW5nIGdjb252cyIpCisgICAgICAgIHJldHVybgorCisgICAgaWYgbm90IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpOgorICAgICAgICByZXR1cm4KKworICAgIG1scHJlZml4ID0gZC5nZXRWYXIoIk1MUFJFRklYIiwgVHJ1ZSkgb3IgIiIKKworICAgIGJwbiA9IGQuZ2V0VmFyKCdCUE4nLCBUcnVlKQorICAgIGxpYmRpciA9IGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKQorICAgIGlmIG5vdCBsaWJkaXI6CisgICAgICAgIGJiLmVycm9yKCJsaWJkaXIgbm90IGRlZmluZWQiKQorICAgICAgICByZXR1cm4KKyAgICBkYXRhZGlyID0gZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKQorICAgIGlmIG5vdCBkYXRhZGlyOgorICAgICAgICBiYi5lcnJvcigiZGF0YWRpciBub3QgZGVmaW5lZCIpCisgICAgICAgIHJldHVybgorCisgICAgZ2NvbnZfbGliZGlyID0gYmFzZV9wYXRoX2pvaW4obGliZGlyLCAiZ2NvbnYiKQorICAgIGNoYXJtYXBfZGlyID0gYmFzZV9wYXRoX2pvaW4oZGF0YWRpciwgImkxOG4iLCAiY2hhcm1hcHMiKQorICAgIGxvY2FsZXNfZGlyID0gYmFzZV9wYXRoX2pvaW4oZGF0YWRpciwgImkxOG4iLCAibG9jYWxlcyIpCisgICAgYmluYXJ5X2xvY2FsZXNfZGlyID0gZC5nZXRWYXIoJ2xvY2FsZWRpcicsIFRydWUpCisKKyAgICBkZWYgY2FsY19nY29udl9kZXBzKGZuLCBwa2csIGZpbGVfcmVnZXgsIG91dHB1dF9wYXR0ZXJuLCBncm91cCk6CisgICAgICAgIGRlcHMgPSBbXQorICAgICAgICBmID0gb3BlbihmbiwgInJiIikKKyAgICAgICAgY19yZSA9IHJlLmNvbXBpbGUoJ15jb3B5ICIoLiopIicpCisgICAgICAgIGlfcmUgPSByZS5jb21waWxlKCdeaW5jbHVkZSAiKFx3KykiLionKQorICAgICAgICBmb3IgbCBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgbSA9IGNfcmUubWF0Y2gobCkgb3IgaV9yZS5tYXRjaChsKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBkcCA9IGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKCclcyVzLWdjb252LSVzJyAlIChtbHByZWZpeCwgYnBuLCBtLmdyb3VwKDEpKSkKKyAgICAgICAgICAgICAgICBpZiBub3QgZHAgaW4gZGVwczoKKyAgICAgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQoZHApCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBpZiBkZXBzICE9IFtdOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1JERVBFTkRTXyVzJyAlIHBrZywgIiAiLmpvaW4oZGVwcykpCisgICAgICAgIGlmIGJwbiAhPSAnZ2xpYmMnOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1JQUk9WSURFU18lcycgJSBwa2csIHBrZy5yZXBsYWNlKGJwbiwgJ2dsaWJjJykpCisKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBnY29udl9saWJkaXIsIGZpbGVfcmVnZXg9J14oLiopXC5zbyQnLCBvdXRwdXRfcGF0dGVybj1icG4rJy1nY29udi0lcycsIFwKKyAgICAgICAgZGVzY3JpcHRpb249J2djb252IG1vZHVsZSBmb3IgY2hhcmFjdGVyIHNldCAlcycsIGhvb2s9Y2FsY19nY29udl9kZXBzLCBcCisgICAgICAgIGV4dHJhX2RlcGVuZHM9YnBuKyctZ2NvbnYnKQorCisgICAgZGVmIGNhbGNfY2hhcm1hcF9kZXBzKGZuLCBwa2csIGZpbGVfcmVnZXgsIG91dHB1dF9wYXR0ZXJuLCBncm91cCk6CisgICAgICAgIGRlcHMgPSBbXQorICAgICAgICBmID0gb3BlbihmbiwgInJiIikKKyAgICAgICAgY19yZSA9IHJlLmNvbXBpbGUoJ15jb3B5ICIoLiopIicpCisgICAgICAgIGlfcmUgPSByZS5jb21waWxlKCdeaW5jbHVkZSAiKFx3KykiLionKQorICAgICAgICBmb3IgbCBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgbSA9IGNfcmUubWF0Y2gobCkgb3IgaV9yZS5tYXRjaChsKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBkcCA9IGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKCclcyVzLWNoYXJtYXAtJXMnICUgKG1scHJlZml4LCBicG4sIG0uZ3JvdXAoMSkpKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkcCBpbiBkZXBzOgorICAgICAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZChkcCkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGlmIGRlcHMgIT0gW106CisgICAgICAgICAgICBkLnNldFZhcignUkRFUEVORFNfJXMnICUgcGtnLCAiICIuam9pbihkZXBzKSkKKyAgICAgICAgaWYgYnBuICE9ICdnbGliYyc6CisgICAgICAgICAgICBkLnNldFZhcignUlBST1ZJREVTXyVzJyAlIHBrZywgcGtnLnJlcGxhY2UoYnBuLCAnZ2xpYmMnKSkKKworICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGNoYXJtYXBfZGlyLCBmaWxlX3JlZ2V4PSdeKC4qKVwuZ3okJywgb3V0cHV0X3BhdHRlcm49YnBuKyctY2hhcm1hcC0lcycsIFwKKyAgICAgICAgZGVzY3JpcHRpb249J2NoYXJhY3RlciBtYXAgZm9yICVzIGVuY29kaW5nJywgaG9vaz1jYWxjX2NoYXJtYXBfZGVwcywgZXh0cmFfZGVwZW5kcz0nJykKKworICAgIGRlZiBjYWxjX2xvY2FsZV9kZXBzKGZuLCBwa2csIGZpbGVfcmVnZXgsIG91dHB1dF9wYXR0ZXJuLCBncm91cCk6CisgICAgICAgIGRlcHMgPSBbXQorICAgICAgICBmID0gb3BlbihmbiwgInJiIikKKyAgICAgICAgY19yZSA9IHJlLmNvbXBpbGUoJ15jb3B5ICIoLiopIicpCisgICAgICAgIGlfcmUgPSByZS5jb21waWxlKCdeaW5jbHVkZSAiKFx3KykiLionKQorICAgICAgICBmb3IgbCBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgbSA9IGNfcmUubWF0Y2gobCkgb3IgaV9yZS5tYXRjaChsKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBkcCA9IGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKG1scHJlZml4K2JwbisnLWxvY2FsZWRhdGEtJXMnICUgbS5ncm91cCgxKSkKKyAgICAgICAgICAgICAgICBpZiBub3QgZHAgaW4gZGVwczoKKyAgICAgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQoZHApCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBpZiBkZXBzICE9IFtdOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1JERVBFTkRTXyVzJyAlIHBrZywgIiAiLmpvaW4oZGVwcykpCisgICAgICAgIGlmIGJwbiAhPSAnZ2xpYmMnOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1JQUk9WSURFU18lcycgJSBwa2csIHBrZy5yZXBsYWNlKGJwbiwgJ2dsaWJjJykpCisKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsb2NhbGVzX2RpciwgZmlsZV9yZWdleD0nKC4qKScsIG91dHB1dF9wYXR0ZXJuPWJwbisnLWxvY2FsZWRhdGEtJXMnLCBcCisgICAgICAgIGRlc2NyaXB0aW9uPSdsb2NhbGUgZGVmaW5pdGlvbiBmb3IgJXMnLCBob29rPWNhbGNfbG9jYWxlX2RlcHMsIGV4dHJhX2RlcGVuZHM9JycpCisgICAgZC5zZXRWYXIoJ1BBQ0tBR0VTJywgZC5nZXRWYXIoJ1BBQ0tBR0VTJywgRmFsc2UpICsgJyAnICsgZC5nZXRWYXIoJ01MUFJFRklYJywgRmFsc2UpICsgYnBuICsgJy1nY29udicpCisKKyAgICB1c2VfYmluID0gZC5nZXRWYXIoIkdMSUJDX0lOVEVSTkFMX1VTRV9CSU5BUllfTE9DQUxFIiwgVHJ1ZSkKKworICAgIGRvdF9yZSA9IHJlLmNvbXBpbGUoIiguKilcLiguKikiKQorCisgICAgIyBSZWFkIGluIHN1cHBvcnRlZCBsb2NhbGVzIGFuZCBhc3NvY2lhdGVkIGVuY29kaW5ncworICAgIHN1cHBvcnRlZCA9IHt9CisgICAgd2l0aCBvcGVuKGJhc2VfcGF0aF9qb2luKGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSksICJTVVBQT1JURUQiKSkgYXMgZjoKKyAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsb2NhbGUsIGNoYXJzZXQgPSBsaW5lLnJzdHJpcCgpLnNwbGl0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzdXBwb3J0ZWRbbG9jYWxlXSA9IGNoYXJzZXQKKworICAgICMgR0xJQkNfR0VORVJBVEVfTE9DQUxFUyB2YXIgc3BlY2lmaWVzIHdoaWNoIGxvY2FsZXMgdG8gYmUgZ2VuZXJhdGVkLiBlbXB0eSBvciAiYWxsIiBtZWFucyBhbGwgbG9jYWxlcworICAgIHRvX2dlbmVyYXRlID0gZC5nZXRWYXIoJ0dMSUJDX0dFTkVSQVRFX0xPQ0FMRVMnLCBUcnVlKQorICAgIGlmIG5vdCB0b19nZW5lcmF0ZSBvciB0b19nZW5lcmF0ZSA9PSAnYWxsJzoKKyAgICAgICAgdG9fZ2VuZXJhdGUgPSBzdXBwb3J0ZWQua2V5cygpCisgICAgZWxzZToKKyAgICAgICAgdG9fZ2VuZXJhdGUgPSB0b19nZW5lcmF0ZS5zcGxpdCgpCisgICAgICAgIGZvciBsb2NhbGUgaW4gdG9fZ2VuZXJhdGU6CisgICAgICAgICAgICBpZiBsb2NhbGUgbm90IGluIHN1cHBvcnRlZDoKKyAgICAgICAgICAgICAgICBpZiAnLicgaW4gbG9jYWxlOgorICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gbG9jYWxlLnNwbGl0KCcuJylbMV0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gJ1VURi04JworICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJVbnN1cHBvcnRlZCBsb2NhbGUgJyVzJywgYXNzdW1pbmcgZW5jb2RpbmcgJyVzJyIgJSAobG9jYWxlLCBjaGFyc2V0KSkKKyAgICAgICAgICAgICAgICBzdXBwb3J0ZWRbbG9jYWxlXSA9IGNoYXJzZXQKKworICAgIGRlZiBvdXRwdXRfbG9jYWxlX3NvdXJjZShuYW1lLCBwa2duYW1lLCBsb2NhbGUsIGVuY29kaW5nKToKKyAgICAgICAgZC5zZXRWYXIoJ1JERVBFTkRTXyVzJyAlIHBrZ25hbWUsICdsb2NhbGVkZWYgJXMtbG9jYWxlZGF0YS0lcyAlcy1jaGFybWFwLSVzJyAlIFwKKyAgICAgICAgKG1scHJlZml4K2JwbiwgbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUobG9jYWxlKSwgbWxwcmVmaXgrYnBuLCBsZWdpdGltaXplX3BhY2thZ2VfbmFtZShlbmNvZGluZykpKQorICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZ25hbWUsIGQuZ2V0VmFyKCdsb2NhbGVfYmFzZV9wb3N0aW5zdCcsIFRydWUpIFwKKyAgICAgICAgJSAobG9jYWxlLCBlbmNvZGluZywgbG9jYWxlKSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnbmFtZSwgZC5nZXRWYXIoJ2xvY2FsZV9iYXNlX3Bvc3RybScsIFRydWUpICUgXAorICAgICAgICAobG9jYWxlLCBlbmNvZGluZywgbG9jYWxlKSkKKworICAgIGRlZiBvdXRwdXRfbG9jYWxlX2JpbmFyeV9yZGVwZW5kcyhuYW1lLCBwa2duYW1lLCBsb2NhbGUsIGVuY29kaW5nKToKKyAgICAgICAgbSA9IHJlLm1hdGNoKCIoLiopXC4oLiopIiwgbmFtZSkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIGxpYmNfbmFtZSA9ICIlcy4lcyIgJSAobS5ncm91cCgxKSwgbS5ncm91cCgyKS5sb3dlcigpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGliY19uYW1lID0gbmFtZQorICAgICAgICBkLnNldFZhcignUkRFUEVORFNfJXMnICUgcGtnbmFtZSwgbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUoJyVzLWJpbmFyeS1sb2NhbGVkYXRhLSVzJyBcCisgICAgICAgICAgICAlIChtbHByZWZpeCticG4sIGxpYmNfbmFtZSkpKQorCisgICAgY29tbWFuZHMgPSB7fQorCisgICAgZGVmIG91dHB1dF9sb2NhbGVfYmluYXJ5KG5hbWUsIHBrZ25hbWUsIGxvY2FsZSwgZW5jb2RpbmcpOgorICAgICAgICB0cmVlZGlyID0gYmFzZV9wYXRoX2pvaW4oZC5nZXRWYXIoIldPUktESVIiLCBUcnVlKSwgImxvY2FsZS10cmVlIikKKyAgICAgICAgbGRsaWJkaXIgPSBiYXNlX3BhdGhfam9pbih0cmVlZGlyLCBkLmdldFZhcigiYmFzZV9saWJkaXIiLCBUcnVlKSkKKyAgICAgICAgcGF0aCA9IGQuZ2V0VmFyKCJQQVRIIiwgVHJ1ZSkKKyAgICAgICAgaTE4bnBhdGggPSBiYXNlX3BhdGhfam9pbih0cmVlZGlyLCBkYXRhZGlyLCAiaTE4biIpCisgICAgICAgIGdjb252cGF0aCA9IGJhc2VfcGF0aF9qb2luKHRyZWVkaXIsICJpY29udmRhdGEiKQorICAgICAgICBvdXRwdXRwYXRoID0gYmFzZV9wYXRoX2pvaW4odHJlZWRpciwgYmluYXJ5X2xvY2FsZXNfZGlyKQorCisgICAgICAgIHVzZV9jcm9zc19sb2NhbGVkZWYgPSBkLmdldFZhcigiTE9DQUxFX0dFTkVSQVRJT05fV0lUSF9DUk9TUy1MT0NBTEVERUYiLCBUcnVlKSBvciAiMCIKKyAgICAgICAgaWYgdXNlX2Nyb3NzX2xvY2FsZWRlZiA9PSAiMSI6CisgICAgICAgICAgICB0YXJnZXRfYXJjaCA9IGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpCisgICAgICAgICAgICBsb2NhbGVfYXJjaF9vcHRpb25zID0geyBcCisgICAgICAgICAgICAgICAgImFybSI6ICAgICAiIC0tdWludDMyLWFsaWduPTQgLS1saXR0bGUtZW5kaWFuICIsIFwKKyAgICAgICAgICAgICAgICAiYXJtZWIiOiAgICIgLS11aW50MzItYWxpZ249NCAtLWJpZy1lbmRpYW4gIiwgICAgXAorICAgICAgICAgICAgICAgICJhYXJjaDY0IjogIiAtLXVpbnQzMi1hbGlnbj00IC0tbGl0dGxlLWVuZGlhbiAiLCAgICBcCisgICAgICAgICAgICAgICAgImFhcmNoNjRfYmUiOiAiIC0tdWludDMyLWFsaWduPTQgLS1iaWctZW5kaWFuICIsICAgIFwKKyAgICAgICAgICAgICAgICAic2g0IjogICAgICIgLS11aW50MzItYWxpZ249NCAtLWJpZy1lbmRpYW4gIiwgICAgXAorICAgICAgICAgICAgICAgICJwb3dlcnBjIjogIiAtLXVpbnQzMi1hbGlnbj00IC0tYmlnLWVuZGlhbiAiLCAgICBcCisgICAgICAgICAgICAgICAgInBvd2VycGM2NCI6ICIgLS11aW50MzItYWxpZ249NCAtLWJpZy1lbmRpYW4gIiwgIFwKKyAgICAgICAgICAgICAgICAibWlwcyI6ICAgICIgLS11aW50MzItYWxpZ249NCAtLWJpZy1lbmRpYW4gIiwgICAgXAorICAgICAgICAgICAgICAgICJtaXBzNjQiOiAgIiAtLXVpbnQzMi1hbGlnbj00IC0tYmlnLWVuZGlhbiAiLCAgICBcCisgICAgICAgICAgICAgICAgIm1pcHNlbCI6ICAiIC0tdWludDMyLWFsaWduPTQgLS1saXR0bGUtZW5kaWFuICIsIFwKKyAgICAgICAgICAgICAgICAibWlwczY0ZWwiOiIgLS11aW50MzItYWxpZ249NCAtLWxpdHRsZS1lbmRpYW4gIiwgXAorICAgICAgICAgICAgICAgICJpNTg2IjogICAgIiAtLXVpbnQzMi1hbGlnbj00IC0tbGl0dGxlLWVuZGlhbiAiLCBcCisgICAgICAgICAgICAgICAgImk2ODYiOiAgICAiIC0tdWludDMyLWFsaWduPTQgLS1saXR0bGUtZW5kaWFuICIsIFwKKyAgICAgICAgICAgICAgICAieDg2XzY0IjogICIgLS11aW50MzItYWxpZ249NCAtLWxpdHRsZS1lbmRpYW4gIiAgfQorCisgICAgICAgICAgICBpZiB0YXJnZXRfYXJjaCBpbiBsb2NhbGVfYXJjaF9vcHRpb25zOgorICAgICAgICAgICAgICAgIGxvY2FsZWRlZl9vcHRzID0gbG9jYWxlX2FyY2hfb3B0aW9uc1t0YXJnZXRfYXJjaF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYmIuZXJyb3IoImxvY2FsZV9hcmNoX29wdGlvbnMgbm90IGZvdW5kIGZvciB0YXJnZXRfYXJjaD0iICsgdGFyZ2V0X2FyY2gpCisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5rbm93biBhcmNoOiIgKyB0YXJnZXRfYXJjaCArICIgZm9yIGxvY2FsZV9hcmNoX29wdGlvbnMiKQorCisgICAgICAgICAgICBsb2NhbGVkZWZfb3B0cyArPSAiIC0tZm9yY2UgLS1vbGQtc3R5bGUgLS1uby1hcmNoaXZlIC0tcHJlZml4PSVzIFwKKyAgICAgICAgICAgICAgICAtLWlucHV0ZmlsZT0lcy8lcy9pMThuL2xvY2FsZXMvJXMgLS1jaGFybWFwPSVzICVzLyVzIiBcCisgICAgICAgICAgICAgICAgJSAodHJlZWRpciwgdHJlZWRpciwgZGF0YWRpciwgbG9jYWxlLCBlbmNvZGluZywgb3V0cHV0cGF0aCwgbmFtZSkKKworICAgICAgICAgICAgY21kID0gIlBBVEg9XCIlc1wiIEkxOE5QQVRIPVwiJXNcIiBHQ09OVl9QQVRIPVwiJXNcIiBjcm9zcy1sb2NhbGVkZWYgJXMiICUgXAorICAgICAgICAgICAgICAgIChwYXRoLCBpMThucGF0aCwgZ2NvbnZwYXRoLCBsb2NhbGVkZWZfb3B0cykKKyAgICAgICAgZWxzZTogIyBlYXJsaWVyIHNsb3dlciBxZW11IHdheSAKKyAgICAgICAgICAgIHFlbXUgPSBxZW11X3RhcmdldF9iaW5hcnkoZCkgCisgICAgICAgICAgICBsb2NhbGVkZWZfb3B0cyA9ICItLWZvcmNlIC0tb2xkLXN0eWxlIC0tbm8tYXJjaGl2ZSAtLXByZWZpeD0lcyBcCisgICAgICAgICAgICAgICAgLS1pbnB1dGZpbGU9JXMvaTE4bi9sb2NhbGVzLyVzIC0tY2hhcm1hcD0lcyAlcyIgXAorICAgICAgICAgICAgICAgICUgKHRyZWVkaXIsIGRhdGFkaXIsIGxvY2FsZSwgZW5jb2RpbmcsIG5hbWUpCisKKyAgICAgICAgICAgIHFlbXVfb3B0aW9ucyA9IGQuZ2V0VmFyKCdRRU1VX09QVElPTlMnLCBUcnVlKQorCisgICAgICAgICAgICBjbWQgPSAiUFNFVURPX1JFTE9BREVEPVlFUyBQQVRIPVwiJXNcIiBJMThOUEFUSD1cIiVzXCIgJXMgLUwgJXMgXAorICAgICAgICAgICAgICAgIC1FIExEX0xJQlJBUllfUEFUSD0lcyAlcyAlcy9iaW4vbG9jYWxlZGVmICVzIiAlIFwKKyAgICAgICAgICAgICAgICAocGF0aCwgaTE4bnBhdGgsIHFlbXUsIHRyZWVkaXIsIGxkbGliZGlyLCBxZW11X29wdGlvbnMsIHRyZWVkaXIsIGxvY2FsZWRlZl9vcHRzKQorCisgICAgICAgIGNvbW1hbmRzWyIlcy8lcyIgJSAob3V0cHV0cGF0aCwgbmFtZSldID0gY21kCisKKyAgICAgICAgYmIubm90ZSgiZ2VuZXJhdGluZyBsb2NhbGUgJXMgKCVzKSIgJSAobG9jYWxlLCBlbmNvZGluZykpCisKKyAgICBkZWYgb3V0cHV0X2xvY2FsZShuYW1lLCBsb2NhbGUsIGVuY29kaW5nKToKKyAgICAgICAgcGtnbmFtZSA9IGQuZ2V0VmFyKCdNTFBSRUZJWCcsIEZhbHNlKSArICdsb2NhbGUtYmFzZS0nICsgbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUobmFtZSkKKyAgICAgICAgZC5zZXRWYXIoJ0FMTE9XX0VNUFRZXyVzJyAlIHBrZ25hbWUsICcxJykKKyAgICAgICAgZC5zZXRWYXIoJ1BBQ0tBR0VTJywgJyVzICVzJyAlIChwa2duYW1lLCBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSkpCisgICAgICAgIHJwcm92aWRlcyA9ICcgJXN2aXJ0dWFsLWxvY2FsZS0lcycgJSAobWxwcmVmaXgsIGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKG5hbWUpKQorICAgICAgICBtID0gcmUubWF0Y2goIiguKilfKC4qKSIsIG5hbWUpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBycHJvdmlkZXMgKz0gJyAlc3ZpcnR1YWwtbG9jYWxlLSVzJyAlIChtbHByZWZpeCwgbS5ncm91cCgxKSkKKyAgICAgICAgZC5zZXRWYXIoJ1JQUk9WSURFU18lcycgJSBwa2duYW1lLCBycHJvdmlkZXMpCisKKyAgICAgICAgaWYgdXNlX2JpbiA9PSAiY29tcGlsZSI6CisgICAgICAgICAgICBvdXRwdXRfbG9jYWxlX2JpbmFyeV9yZGVwZW5kcyhuYW1lLCBwa2duYW1lLCBsb2NhbGUsIGVuY29kaW5nKQorICAgICAgICAgICAgb3V0cHV0X2xvY2FsZV9iaW5hcnkobmFtZSwgcGtnbmFtZSwgbG9jYWxlLCBlbmNvZGluZykKKyAgICAgICAgZWxpZiB1c2VfYmluID09ICJwcmVjb21waWxlZCI6CisgICAgICAgICAgICBvdXRwdXRfbG9jYWxlX2JpbmFyeV9yZGVwZW5kcyhuYW1lLCBwa2duYW1lLCBsb2NhbGUsIGVuY29kaW5nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3V0cHV0X2xvY2FsZV9zb3VyY2UobmFtZSwgcGtnbmFtZSwgbG9jYWxlLCBlbmNvZGluZykKKworICAgIGlmIHVzZV9iaW4gPT0gImNvbXBpbGUiOgorICAgICAgICBiYi5ub3RlKCJwcmVwYXJpbmcgdHJlZSBmb3IgYmluYXJ5IGxvY2FsZSBnZW5lcmF0aW9uIikKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJkb19wcmVwX2xvY2FsZV90cmVlIiwgZCkKKworICAgIHV0Zjhfb25seSA9IGludChkLmdldFZhcignTE9DQUxFX1VURjhfT05MWScsIFRydWUpIG9yIDApCisgICAgZW5jb2RpbmdzID0ge30KKyAgICBmb3IgbG9jYWxlIGluIHRvX2dlbmVyYXRlOgorICAgICAgICBjaGFyc2V0ID0gc3VwcG9ydGVkW2xvY2FsZV0KKyAgICAgICAgaWYgdXRmOF9vbmx5IGFuZCBjaGFyc2V0ICE9ICdVVEYtOCc6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIG0gPSBkb3RfcmUubWF0Y2gobG9jYWxlKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgYmFzZSA9IG0uZ3JvdXAoMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJhc2UgPSBsb2NhbGUKKworICAgICAgICAjIFByZWNvbXBpbGVkIGxvY2FsZXMgYXJlIGtlcHQgYXMgaXMsIG9iZXlpbmcgU1VQUE9SVEVELCB3aGlsZQorICAgICAgICAjIG90aGVycyBhcmUgYWRqdXN0ZWQsIGVuc3VyaW5nIHRoYXQgdGhlIG5vbi1zdWZmaXhlZCBsb2NhbGVzCisgICAgICAgICMgYXJlIHV0Zi04LCB3aGlsZSB0aGUgc3VmZml4ZWQgYXJlIG5vdC4KKyAgICAgICAgaWYgdXNlX2JpbiA9PSAicHJlY29tcGlsZWQiOgorICAgICAgICAgICAgb3V0cHV0X2xvY2FsZShsb2NhbGUsIGJhc2UsIGNoYXJzZXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBjaGFyc2V0ID09ICdVVEYtOCc6CisgICAgICAgICAgICAgICAgb3V0cHV0X2xvY2FsZShiYXNlLCBiYXNlLCBjaGFyc2V0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvdXRwdXRfbG9jYWxlKCclcy4lcycgJSAoYmFzZSwgY2hhcnNldCksIGJhc2UsIGNoYXJzZXQpCisKKyAgICBpZiB1c2VfYmluID09ICJjb21waWxlIjoKKyAgICAgICAgbWFrZWZpbGUgPSBiYXNlX3BhdGhfam9pbihkLmdldFZhcigiV09SS0RJUiIsIFRydWUpLCAibG9jYWxlLXRyZWUiLCAiTWFrZWZpbGUiKQorICAgICAgICBtID0gb3BlbihtYWtlZmlsZSwgInciKQorICAgICAgICBtLndyaXRlKCJhbGw6ICVzXG5cbiIgJSAiICIuam9pbihjb21tYW5kcy5rZXlzKCkpKQorICAgICAgICBmb3IgY21kIGluIGNvbW1hbmRzOgorICAgICAgICAgICAgbS53cml0ZShjbWQgKyAiOlxuIikKKyAgICAgICAgICAgIG0ud3JpdGUoIlx0IiArIGNvbW1hbmRzW2NtZF0gKyAiXG5cbiIpCisgICAgICAgIG0uY2xvc2UoKQorICAgICAgICBkLnNldFZhcigiRVhUUkFfT0VNQUtFIiwgIi1DICVzICR7UEFSQUxMRUxfTUFLRX0iICUgKG9zLnBhdGguZGlybmFtZShtYWtlZmlsZSkpKQorICAgICAgICBiYi5ub3RlKCJFeGVjdXRpbmcgYmluYXJ5IGxvY2FsZSBnZW5lcmF0aW9uIG1ha2VmaWxlIikKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJvZV9ydW5tYWtlIiwgZCkKKyAgICAgICAgYmIubm90ZSgiY29sbGVjdGluZyBiaW5hcnkgbG9jYWxlcyBmcm9tIGxvY2FsZSB0cmVlIikKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJkb19jb2xsZWN0X2JpbnNfZnJvbV9sb2NhbGVfdHJlZSIsIGQpCisgICAgICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGJpbmFyeV9sb2NhbGVzX2RpciwgZmlsZV9yZWdleD0nKC4qKScsIFwKKyAgICAgICAgICAgIG91dHB1dF9wYXR0ZXJuPWJwbisnLWJpbmFyeS1sb2NhbGVkYXRhLSVzJywgXAorICAgICAgICAgICAgZGVzY3JpcHRpb249J2JpbmFyeSBsb2NhbGUgZGVmaW5pdGlvbiBmb3IgJXMnLCBleHRyYV9kZXBlbmRzPScnLCBhbGxvd19kaXJzPVRydWUpCisgICAgZWxpZiB1c2VfYmluID09ICJwcmVjb21waWxlZCI6CisgICAgICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGJpbmFyeV9sb2NhbGVzX2RpciwgZmlsZV9yZWdleD0nKC4qKScsIFwKKyAgICAgICAgICAgIG91dHB1dF9wYXR0ZXJuPWJwbisnLWJpbmFyeS1sb2NhbGVkYXRhLSVzJywgXAorICAgICAgICAgICAgZGVzY3JpcHRpb249J2JpbmFyeSBsb2NhbGUgZGVmaW5pdGlvbiBmb3IgJXMnLCBleHRyYV9kZXBlbmRzPScnLCBhbGxvd19kaXJzPVRydWUpCisgICAgZWxzZToKKyAgICAgICAgYmIubm90ZSgiZ2VuZXJhdGlvbiBvZiBiaW5hcnkgbG9jYWxlcyBkaXNhYmxlZC4gdGhpcyBtYXkgYnJlYWsgaTE4biEiKQorCit9CisKKyMgV2Ugd2FudCB0byBkbyB0aGlzIGluZGlyZWN0aW9uIHNvIHRoYXQgd2UgY2FuIHNhZmVseSAncmV0dXJuJworIyBmcm9tIHRoZSBjYWxsZWQgZnVuY3Rpb24gZXZlbiB0aG91Z2ggd2UncmUgcHJlcGVuZGluZworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygncGFja2FnZV9kb19zcGxpdF9nY29udnMnLCBkKQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saWNlbnNlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saWNlbnNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYxNmEyMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpY2Vuc2UuYmJjbGFzcwpAQCAtMCwwICsxLDQ4MyBAQAorIyBQb3B1bGF0ZXMgTElDRU5TRV9ESVJFQ1RPUlkgYXMgc2V0IGluIGRpc3RybyBjb25maWcgd2l0aCB0aGUgbGljZW5zZSBmaWxlcyBhcyBzZXQgYnkKKyMgTElDX0ZJTEVTX0NIS1NVTS4KKyMgVE9ETzoKKyMgLSBUaGVyZSBpcyBhIHJlYWwgaXNzdWUgcmV2b2x2aW5nIGFyb3VuZCBsaWNlbnNlIG5hbWluZyBzdGFuZGFyZHMuCisKK0xJQ0VOU0VfRElSRUNUT1JZID8/PSAiJHtERVBMT1lfRElSfS9saWNlbnNlcyIKK0xJQ1NTVEFURURJUiA9ICIke1dPUktESVJ9L2xpY2Vuc2UtZGVzdGRpci8iCisKKyMgQ3JlYXRlIGV4dHJhIHBhY2thZ2Ugd2l0aCBsaWNlbnNlIHRleHRzIGFuZCBhZGQgaXQgdG8gUlJFQ09NTUVORFNfJHtQTn0KK0xJQ0VOU0VfQ1JFQVRFX1BBQ0tBR0VbdHlwZV0gPSAiYm9vbGVhbiIKK0xJQ0VOU0VfQ1JFQVRFX1BBQ0tBR0UgPz89ICIwIgorTElDRU5TRV9QQUNLQUdFX1NVRkZJWCA/Pz0gIi1saWMiCitMSUNFTlNFX0ZJTEVTX0RJUkVDVE9SWSA/Pz0gIiR7ZGF0YWRpcn0vbGljZW5zZXMvIgorCithZGR0YXNrIHBvcHVsYXRlX2xpYyBhZnRlciBkb19wYXRjaCBiZWZvcmUgZG9fYnVpbGQKK2RvX3BvcHVsYXRlX2xpY1tkaXJzXSA9ICIke0xJQ1NTVEFURURJUn0vJHtQTn0iCitkb19wb3B1bGF0ZV9saWNbY2xlYW5kaXJzXSA9ICIke0xJQ1NTVEFURURJUn0iCisKK3B5dGhvbiB3cml0ZV9wYWNrYWdlX21hbmlmZXN0KCkgeworICAgICMgR2V0IGxpc3Qgb2YgaW5zdGFsbGVkIHBhY2thZ2VzCisgICAgbGljZW5zZV9pbWFnZV9kaXIgPSBkLmV4cGFuZCgnJHtMSUNFTlNFX0RJUkVDVE9SWX0vJHtJTUFHRV9OQU1FfScpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGxpY2Vuc2VfaW1hZ2VfZGlyKQorICAgIGZyb20gb2Uucm9vdGZzIGltcG9ydCBpbWFnZV9saXN0X2luc3RhbGxlZF9wYWNrYWdlcworICAgIG9wZW4ob3MucGF0aC5qb2luKGxpY2Vuc2VfaW1hZ2VfZGlyLCAncGFja2FnZS5tYW5pZmVzdCcpLAorICAgICAgICAndysnKS53cml0ZShpbWFnZV9saXN0X2luc3RhbGxlZF9wYWNrYWdlcyhkKSkKK30KKworcHl0aG9uIGxpY2Vuc2VfY3JlYXRlX21hbmlmZXN0KCkgeworICAgIGltcG9ydCByZQorICAgIGltcG9ydCBvZS5wYWNrYWdlZGF0YQorICAgIGZyb20gb2Uucm9vdGZzIGltcG9ydCBpbWFnZV9saXN0X2luc3RhbGxlZF9wYWNrYWdlcworCisgICAgYmFkX2xpY2Vuc2VzID0gKGQuZ2V0VmFyKCJJTkNPTVBBVElCTEVfTElDRU5TRSIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgYmFkX2xpY2Vuc2VzID0gbWFwKGxhbWJkYSBsOiBjYW5vbmljYWxfbGljZW5zZShkLCBsKSwgYmFkX2xpY2Vuc2VzKQorICAgIGJhZF9saWNlbnNlcyA9IGV4cGFuZF93aWxkY2FyZF9saWNlbnNlcyhkLCBiYWRfbGljZW5zZXMpCisKKyAgICBidWlsZF9pbWFnZXNfZnJvbV9mZWVkcyA9IGQuZ2V0VmFyKCdCVUlMRF9JTUFHRVNfRlJPTV9GRUVEUycsIFRydWUpCisgICAgaWYgYnVpbGRfaW1hZ2VzX2Zyb21fZmVlZHMgPT0gIjEiOgorICAgICAgICByZXR1cm4gMAorCisgICAgcGtnX2RpYyA9IHt9CisgICAgZm9yIHBrZyBpbiBpbWFnZV9saXN0X2luc3RhbGxlZF9wYWNrYWdlcyhkKS5zcGxpdGxpbmVzKCk6CisgICAgICAgIHBrZ19pbmZvID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdQS0dEQVRBX0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVudGltZS1yZXZlcnNlJywgcGtnKQorICAgICAgICBwa2dfbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUob3MucmVhZGxpbmsocGtnX2luZm8pKQorCisgICAgICAgIHBrZ19kaWNbcGtnX25hbWVdID0gb2UucGFja2FnZWRhdGEucmVhZF9wa2dkYXRhZmlsZShwa2dfaW5mbykKKyAgICAgICAgaWYgbm90ICJMSUNFTlNFIiBpbiBwa2dfZGljW3BrZ19uYW1lXS5rZXlzKCk6CisgICAgICAgICAgICBwa2dfbGljX25hbWUgPSAiTElDRU5TRV8iICsgcGtnX25hbWUKKyAgICAgICAgICAgIHBrZ19kaWNbcGtnX25hbWVdWyJMSUNFTlNFIl0gPSBwa2dfZGljW3BrZ19uYW1lXVtwa2dfbGljX25hbWVdCisKKyAgICBsaWNlbnNlX21hbmlmZXN0ID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdMSUNFTlNFX0RJUkVDVE9SWScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ0lNQUdFX05BTUUnLCBUcnVlKSwgJ2xpY2Vuc2UubWFuaWZlc3QnKQorICAgIHdpdGggb3BlbihsaWNlbnNlX21hbmlmZXN0LCAidyIpIGFzIGxpY2Vuc2VfZmlsZToKKyAgICAgICAgZm9yIHBrZyBpbiBzb3J0ZWQocGtnX2RpYyk6CisgICAgICAgICAgICBpZiBiYWRfbGljZW5zZXM6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAocGtnX2RpY1twa2ddWyJMSUNFTlNFIl0sIHBrZ19kaWNbcGtnXVsiTElDRU5TRVMiXSkgPSBcCisgICAgICAgICAgICAgICAgICAgICAgICBvZS5saWNlbnNlLm1hbmlmZXN0X2xpY2Vuc2VzKHBrZ19kaWNbcGtnXVsiTElDRU5TRSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgYmFkX2xpY2Vuc2VzLCBjYW5vbmljYWxfbGljZW5zZSwgZCkKKyAgICAgICAgICAgICAgICBleGNlcHQgb2UubGljZW5zZS5MaWNlbnNlRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgnJXM6ICVzJyAlIChkLmdldFZhcignUCcsIFRydWUpLCBleGMpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwa2dfZGljW3BrZ11bIkxJQ0VOU0VTIl0gPSByZS5zdWIoJ1t8JigpKl0nLCAnJywgcGtnX2RpY1twa2ddWyJMSUNFTlNFIl0pCisgICAgICAgICAgICAgICAgcGtnX2RpY1twa2ddWyJMSUNFTlNFUyJdID0gcmUuc3ViKCcgIConLCAnICcsIHBrZ19kaWNbcGtnXVsiTElDRU5TRVMiXSkKKyAgICAgICAgICAgICAgICBwa2dfZGljW3BrZ11bIkxJQ0VOU0VTIl0gPSBwa2dfZGljW3BrZ11bIkxJQ0VOU0VTIl0uc3BsaXQoKQorCisgICAgICAgICAgICBsaWNlbnNlX2ZpbGUud3JpdGUoIlBBQ0tBR0UgTkFNRTogJXNcbiIgJSBwa2cpCisgICAgICAgICAgICBsaWNlbnNlX2ZpbGUud3JpdGUoIlBBQ0tBR0UgVkVSU0lPTjogJXNcbiIgJSBwa2dfZGljW3BrZ11bIlBWIl0pCisgICAgICAgICAgICBsaWNlbnNlX2ZpbGUud3JpdGUoIlJFQ0lQRSBOQU1FOiAlc1xuIiAlIHBrZ19kaWNbcGtnXVsiUE4iXSkKKyAgICAgICAgICAgIGxpY2Vuc2VfZmlsZS53cml0ZSgiTElDRU5TRTogJXNcblxuIiAlIHBrZ19kaWNbcGtnXVsiTElDRU5TRSJdKQorCisgICAgICAgICAgICAjIElmIHRoZSBwYWNrYWdlIGRvZXNuJ3QgY29udGFpbiBhbnkgZmlsZSwgdGhhdCBpcywgaXRzIHNpemUgaXMgMCwgdGhlIGxpY2Vuc2UKKyAgICAgICAgICAgICMgaXNuJ3QgcmVsZXZhbnQgYXMgZmFyIGFzIHRoZSBmaW5hbCBpbWFnZSBpcyBjb25jZXJuZWQuIFNvIGRvaW5nIGxpY2Vuc2UgY2hlY2sKKyAgICAgICAgICAgICMgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UsIHNraXAgaXQuCisgICAgICAgICAgICBpZiBwa2dfZGljW3BrZ11bIlBLR1NJWkVfJXMiICUgcGtnXSA9PSAiMCI6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZm9yIGxpYyBpbiBwa2dfZGljW3BrZ11bIkxJQ0VOU0VTIl06CisgICAgICAgICAgICAgICAgbGljX2ZpbGUgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0xJQ0VOU0VfRElSRUNUT1JZJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnX2RpY1twa2ddWyJQTiJdLCAiZ2VuZXJpY18lcyIgJSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZS5zdWIoJ1wrJywgJycsIGxpYykpCisgICAgICAgICAgICAgICAgIyBhZGQgZXhwbGljaXR5IGF2b2lkIG9mIENMT1NFRCBsaWNlbnNlIGJlY2F1c2UgaXNuJ3QgZ2VuZXJpYworICAgICAgICAgICAgICAgIGlmIGxpYyA9PSAiQ0xPU0VEIjoKKyAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGxpY19maWxlKToKKyAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJUaGUgbGljZW5zZSBsaXN0ZWQgJXMgd2FzIG5vdCBpbiB0aGUgIlwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpY2Vuc2VzIGNvbGxlY3RlZCBmb3IgcmVjaXBlICVzIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChsaWMsIHBrZ19kaWNbcGtnXVsiUE4iXSkpCisKKyAgICAjIFR3byBvcHRpb25zIGhlcmU6CisgICAgIyAtIEp1c3QgY29weSB0aGUgbWFuaWZlc3QKKyAgICAjIC0gQ29weSB0aGUgbWFuaWZlc3QgYW5kIHRoZSBsaWNlbnNlIGRpcmVjdG9yaWVzCisgICAgIyBXaXRoIGJvdGggb3B0aW9ucyBzZXQgd2Ugc2VlIGEgLjUgTSBpbmNyZWFzZSBpbiBjb3JlLWltYWdlLW1pbmltYWwKKyAgICBjb3B5X2xpY19tYW5pZmVzdCA9IGQuZ2V0VmFyKCdDT1BZX0xJQ19NQU5JRkVTVCcsIFRydWUpCisgICAgY29weV9saWNfZGlycyA9IGQuZ2V0VmFyKCdDT1BZX0xJQ19ESVJTJywgVHJ1ZSkKKyAgICBpZiBjb3B5X2xpY19tYW5pZmVzdCA9PSAiMSI6CisgICAgICAgIHJvb3Rmc19saWNlbnNlX2RpciA9IG9zLnBhdGguam9pbihkLmdldFZhcignSU1BR0VfUk9PVEZTJywgJ1RydWUnKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1c3InLCAnc2hhcmUnLCAnY29tbW9uLWxpY2Vuc2VzJykKKyAgICAgICAgb3MubWFrZWRpcnMocm9vdGZzX2xpY2Vuc2VfZGlyKQorICAgICAgICByb290ZnNfbGljZW5zZV9tYW5pZmVzdCA9IG9zLnBhdGguam9pbihyb290ZnNfbGljZW5zZV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGljZW5zZS5tYW5pZmVzdCcpCisgICAgICAgIG9zLmxpbmsobGljZW5zZV9tYW5pZmVzdCwgcm9vdGZzX2xpY2Vuc2VfbWFuaWZlc3QpCisKKyAgICAgICAgaWYgY29weV9saWNfZGlycyA9PSAiMSI6CisgICAgICAgICAgICBmb3IgcGtnIGluIHNvcnRlZChwa2dfZGljKToKKyAgICAgICAgICAgICAgICBwa2dfcm9vdGZzX2xpY2Vuc2VfZGlyID0gb3MucGF0aC5qb2luKHJvb3Rmc19saWNlbnNlX2RpciwgcGtnKQorICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKHBrZ19yb290ZnNfbGljZW5zZV9kaXIpCisgICAgICAgICAgICAgICAgcGtnX2xpY2Vuc2VfZGlyID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdMSUNFTlNFX0RJUkVDVE9SWScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2dfZGljW3BrZ11bIlBOIl0pIAorICAgICAgICAgICAgICAgIGxpY2Vuc2VzID0gb3MubGlzdGRpcihwa2dfbGljZW5zZV9kaXIpCisgICAgICAgICAgICAgICAgZm9yIGxpYyBpbiBsaWNlbnNlczoKKyAgICAgICAgICAgICAgICAgICAgcm9vdGZzX2xpY2Vuc2UgPSBvcy5wYXRoLmpvaW4ocm9vdGZzX2xpY2Vuc2VfZGlyLCBsaWMpCisgICAgICAgICAgICAgICAgICAgIHBrZ19saWNlbnNlID0gb3MucGF0aC5qb2luKHBrZ19saWNlbnNlX2RpciwgbGljKQorICAgICAgICAgICAgICAgICAgICBwa2dfcm9vdGZzX2xpY2Vuc2UgPSBvcy5wYXRoLmpvaW4ocGtnX3Jvb3Rmc19saWNlbnNlX2RpciwgbGljKQorCisgICAgICAgICAgICAgICAgICAgIGlmIHJlLm1hdGNoKCJeZ2VuZXJpY18uKiQiLCBsaWMpOgorICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJpY19saWMgPSByZS5zZWFyY2goIl5nZW5lcmljXyguKikkIiwgbGljKS5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgb2UubGljZW5zZS5saWNlbnNlX29rKGNhbm9uaWNhbF9saWNlbnNlKGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJpY19saWMpLCBiYWRfbGljZW5zZXMpID09IEZhbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhyb290ZnNfbGljZW5zZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MubGluayhwa2dfbGljZW5zZSwgcm9vdGZzX2xpY2Vuc2UpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsob3MucGF0aC5qb2luKCcuLicsIGxpYyksIHBrZ19yb290ZnNfbGljZW5zZSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9lLmxpY2Vuc2UubGljZW5zZV9vayhjYW5vbmljYWxfbGljZW5zZShkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYyksIGJhZF9saWNlbnNlcykgPT0gRmFsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICAgICAgICAgb3MubGluayhwa2dfbGljZW5zZSwgcGtnX3Jvb3Rmc19saWNlbnNlKQorfQorCitweXRob24gZG9fcG9wdWxhdGVfbGljKCkgeworICAgICIiIgorICAgIFBvcHVsYXRlIExJQ0VOU0VfRElSRUNUT1JZIHdpdGggbGljZW5zZXMuCisgICAgIiIiCisgICAgbGljX2ZpbGVzX3BhdGhzID0gZmluZF9saWNlbnNlX2ZpbGVzKGQpCisKKyAgICAjIFRoZSBiYXNlIGRpcmVjdG9yeSB3ZSB3cmFuZ2xlIGxpY2Vuc2VzIHRvCisgICAgZGVzdGRpciA9IG9zLnBhdGguam9pbihkLmdldFZhcignTElDU1NUQVRFRElSJywgVHJ1ZSksIGQuZ2V0VmFyKCdQTicsIFRydWUpKQorICAgIGNvcHlfbGljZW5zZV9maWxlcyhsaWNfZmlsZXNfcGF0aHMsIGRlc3RkaXIpCit9CisKKyMgaXQgd291bGQgYmUgYmV0dGVyIHRvIGNvcHkgdGhlbSBpbiBkb19pbnN0YWxsX2FwcGVuZCwgYnV0IGZpbmRfbGljZW5zZV9maWxlc2EgaXMgcHl0aG9uCitweXRob24gcGVyZm9ybV9wYWNrYWdlY29weV9wcmVwZW5kICgpIHsKKyAgICBlbmFibGVkID0gb2UuZGF0YS50eXBlZF92YWx1ZSgnTElDRU5TRV9DUkVBVEVfUEFDS0FHRScsIGQpCisgICAgaWYgZC5nZXRWYXIoJ0NMQVNTT1ZFUlJJREUnLCBUcnVlKSA9PSAnY2xhc3MtdGFyZ2V0JyBhbmQgZW5hYmxlZDoKKyAgICAgICAgbGljX2ZpbGVzX3BhdGhzID0gZmluZF9saWNlbnNlX2ZpbGVzKGQpCisKKyAgICAgICAgIyBMSUNFTlNFX0ZJTEVTX0RJUkVDVE9SWSBzdGFydHMgd2l0aCAnLycgc28gb3MucGF0aC5qb2luIGNhbm5vdCBiZSB1c2VkIHRvIGpvaW4gRCBhbmQgTElDRU5TRV9GSUxFU19ESVJFQ1RPUlkKKyAgICAgICAgZGVzdGRpciA9IGQuZ2V0VmFyKCdEJywgVHJ1ZSkgKyBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0xJQ0VOU0VfRklMRVNfRElSRUNUT1JZJywgVHJ1ZSksIGQuZ2V0VmFyKCdQTicsIFRydWUpKQorICAgICAgICBjb3B5X2xpY2Vuc2VfZmlsZXMobGljX2ZpbGVzX3BhdGhzLCBkZXN0ZGlyKQorICAgICAgICBhZGRfcGFja2FnZV9hbmRfZmlsZXMoZCkKK30KKworZGVmIGFkZF9wYWNrYWdlX2FuZF9maWxlcyhkKToKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgZmlsZXMgPSBkLmdldFZhcignTElDRU5TRV9GSUxFU19ESVJFQ1RPUlknLCBUcnVlKQorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBwbl9saWMgPSAiJXMlcyIgJSAocG4sIGQuZ2V0VmFyKCdMSUNFTlNFX1BBQ0tBR0VfU1VGRklYJywgRmFsc2UpKQorICAgIGlmIHBuX2xpYyBpbiBwYWNrYWdlczoKKyAgICAgICAgYmIud2FybigiJXMgcGFja2FnZSBhbHJlYWR5IGV4aXN0ZWQgaW4gJXMuIiAlIChwbl9saWMsIHBuKSkKKyAgICBlbHNlOgorICAgICAgICAjIGZpcnN0IGluIFBBQ0tBR0VTIHRvIGJlIHN1cmUgdGhhdCBub3RoaW5nIGVsc2UgZ2V0cyBMSUNFTlNFX0ZJTEVTX0RJUkVDVE9SWQorICAgICAgICBkLnNldFZhcignUEFDS0FHRVMnLCAiJXMgJXMiICUgKHBuX2xpYywgcGFja2FnZXMpKQorICAgICAgICBkLnNldFZhcignRklMRVNfJyArIHBuX2xpYywgZmlsZXMpCisgICAgICAgIHJyZWNvbW1lbmRzX3BuID0gZC5nZXRWYXIoJ1JSRUNPTU1FTkRTXycgKyBwbiwgVHJ1ZSkKKyAgICAgICAgaWYgcnJlY29tbWVuZHNfcG46CisgICAgICAgICAgICBkLnNldFZhcignUlJFQ09NTUVORFNfJyArIHBuLCAiJXMgJXMiICUgKHBuX2xpYywgcnJlY29tbWVuZHNfcG4pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1JSRUNPTU1FTkRTXycgKyBwbiwgIiVzIiAlIChwbl9saWMpKQorCitkZWYgY29weV9saWNlbnNlX2ZpbGVzKGxpY19maWxlc19wYXRocywgZGVzdGRpcik6CisgICAgaW1wb3J0IHNodXRpbAorCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGRlc3RkaXIpCisgICAgZm9yIChiYXNlbmFtZSwgcGF0aCkgaW4gbGljX2ZpbGVzX3BhdGhzOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzcmMgPSBwYXRoCisgICAgICAgICAgICBkc3QgPSBvcy5wYXRoLmpvaW4oZGVzdGRpciwgYmFzZW5hbWUpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkc3QpOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShkc3QpCisgICAgICAgICAgICBpZiBvcy5hY2Nlc3Moc3JjLCBvcy5XX09LKSBhbmQgKG9zLnN0YXQoc3JjKS5zdF9kZXYgPT0gb3Muc3RhdChkZXN0ZGlyKS5zdF9kZXYpOgorICAgICAgICAgICAgICAgIG9zLmxpbmsoc3JjLCBkc3QpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzcmMsIGRzdCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgYmIud2FybigiQ291bGQgbm90IGNvcHkgbGljZW5zZSBmaWxlICVzIHRvICVzOiAlcyIgJSAoc3JjLCBkc3QsIGUpKQorCitkZWYgZmluZF9saWNlbnNlX2ZpbGVzKGQpOgorICAgICIiIgorICAgIENyZWF0ZXMgbGlzdCBvZiBmaWxlcyB1c2VkIGluIExJQ19GSUxFU19DSEtTVU0gYW5kIGdlbmVyaWMgTElDRU5TRSBmaWxlcy4KKyAgICAiIiIKKyAgICBpbXBvcnQgc2h1dGlsCisgICAgaW1wb3J0IG9lLmxpY2Vuc2UKKworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBmb3IgcGFja2FnZSBpbiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKToKKyAgICAgICAgaWYgZC5nZXRWYXIoJ0xJQ0VOU0VfJyArIHBhY2thZ2UsIFRydWUpOgorICAgICAgICAgICAgbGljZW5zZV90eXBlcyA9IGxpY2Vuc2VfdHlwZXMgKyAnICYgJyArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcignTElDRU5TRV8nICsgcGFja2FnZSwgVHJ1ZSkKKworICAgICNJZiB3ZSBnZXQgaGVyZSB3aXRoIG5vIGxpY2Vuc2UgdHlwZXMsIHRoZW4gdGhhdCBtZWFucyB3ZSBoYXZlIGEgcmVjaXBlIAorICAgICNsZXZlbCBsaWNlbnNlLiBJZiBzbywgd2UgZ3JhYiBvbmx5IHRob3NlLgorICAgIHRyeToKKyAgICAgICAgbGljZW5zZV90eXBlcworICAgIGV4Y2VwdCBOYW1lRXJyb3I6ICAgICAgICAKKyAgICAgICAgIyBBbGwgdGhlIGxpY2Vuc2UgdHlwZXMgYXQgdGhlIHJlY2lwZSBsZXZlbAorICAgICAgICBsaWNlbnNlX3R5cGVzID0gZC5nZXRWYXIoJ0xJQ0VOU0UnLCBUcnVlKQorIAorICAgICMgQWxsIHRoZSBsaWNlbnNlIGZpbGVzIGZvciB0aGUgcGFja2FnZQorICAgIGxpY19maWxlcyA9IGQuZ2V0VmFyKCdMSUNfRklMRVNfQ0hLU1VNJywgVHJ1ZSkKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgIyBUaGUgbGljZW5zZSBmaWxlcyBhcmUgbG9jYXRlZCBpbiBTL0xJQ19GSUxFX0NIRUNLU1VNLgorICAgIHNyY2RpciA9IGQuZ2V0VmFyKCdTJywgVHJ1ZSkKKyAgICAjIERpcmVjdG9yeSB3ZSBzdG9yZSB0aGUgZ2VuZXJpYyBsaWNlbnNlcyBhcyBzZXQgaW4gdGhlIGRpc3RybyBjb25maWd1cmF0aW9uCisgICAgZ2VuZXJpY19kaXJlY3RvcnkgPSBkLmdldFZhcignQ09NTU9OX0xJQ0VOU0VfRElSJywgVHJ1ZSkKKyAgICAjIExpc3Qgb2YgYmFzZW5hbWUsIHBhdGggdHVwbGVzCisgICAgbGljX2ZpbGVzX3BhdGhzID0gW10KKyAgICBsaWNlbnNlX3NvdXJjZV9kaXJzID0gW10KKyAgICBsaWNlbnNlX3NvdXJjZV9kaXJzLmFwcGVuZChnZW5lcmljX2RpcmVjdG9yeSkKKyAgICB0cnk6CisgICAgICAgIGFkZGl0aW9uYWxfbGljX2RpcnMgPSBkLmdldFZhcignTElDRU5TRV9QQVRIJywgVHJ1ZSkuc3BsaXQoKQorICAgICAgICBmb3IgbGljX2RpciBpbiBhZGRpdGlvbmFsX2xpY19kaXJzOgorICAgICAgICAgICAgbGljZW5zZV9zb3VyY2VfZGlycy5hcHBlbmQobGljX2RpcikKKyAgICBleGNlcHQ6CisgICAgICAgIHBhc3MKKworICAgIGNsYXNzIEZpbmRWaXNpdG9yKG9lLmxpY2Vuc2UuTGljZW5zZVZpc2l0b3IpOgorICAgICAgICBkZWYgdmlzaXRfU3RyKHNlbGYsIG5vZGUpOgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBVbnRpbCBJIGZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoCisgICAgICAgICAgICAjIHRoZSB0d28gbW9kaWZpZXJzIEkgc3VwcG9ydCAob3IgZ3JlYXRlciA9ICsKKyAgICAgICAgICAgICMgYW5kICJ3aXRoIGV4Y2VwdGlvbnMiIGJlaW5nICoKKyAgICAgICAgICAgICMgd2UnbGwganVzdCBzdHJpcCBvdXQgdGhlIG1vZGlmaWVyIGFuZCBwdXQKKyAgICAgICAgICAgICMgdGhlIGJhc2UgbGljZW5zZS4KKyAgICAgICAgICAgIGZpbmRfbGljZW5zZShub2RlLnMucmVwbGFjZSgiKyIsICIiKS5yZXBsYWNlKCIqIiwgIiIpKQorICAgICAgICAgICAgc2VsZi5nZW5lcmljX3Zpc2l0KG5vZGUpCisKKyAgICBkZWYgZmluZF9saWNlbnNlKGxpY2Vuc2VfdHlwZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihnZW5fbGljX2Rlc3QpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc3BkeF9nZW5lcmljID0gTm9uZQorICAgICAgICBsaWNlbnNlX3NvdXJjZSA9IE5vbmUKKyAgICAgICAgIyBJZiB0aGUgZ2VuZXJpYyBkb2VzIG5vdCBleGlzdCB3ZSBuZWVkIHRvIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBTUERYIG1hcHBpbmcgdG8gaXQsCisgICAgICAgICMgdW5sZXNzIE5PX0dFTkVSSUNfTElDRU5TRSBpcyBzZXQuCisKKyAgICAgICAgZm9yIGxpY19kaXIgaW4gbGljZW5zZV9zb3VyY2VfZGlyczoKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4obGljX2RpciwgbGljZW5zZV90eXBlKSk6CisgICAgICAgICAgICAgICAgaWYgZC5nZXRWYXJGbGFnKCdTUERYTElDRU5TRU1BUCcsIGxpY2Vuc2VfdHlwZSkgIT0gTm9uZToKKyAgICAgICAgICAgICAgICAgICAgIyBHcmVhdCwgdGhlcmUgaXMgYW4gU1BEWExJQ0VOU0VNQVAuIFdlIGNhbiBjb3B5IQorICAgICAgICAgICAgICAgICAgICBiYi5kZWJ1ZygxLCAiV2UgbmVlZCB0byB1c2UgYSBTUERYTElDRU5TRU1BUCBmb3IgJXMiICUgKGxpY2Vuc2VfdHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHNwZHhfZ2VuZXJpYyA9IGQuZ2V0VmFyRmxhZygnU1BEWExJQ0VOU0VNQVAnLCBsaWNlbnNlX3R5cGUpCisgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2Vfc291cmNlID0gbGljX2RpcgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4obGljX2RpciwgbGljZW5zZV90eXBlKSk6CisgICAgICAgICAgICAgICAgc3BkeF9nZW5lcmljID0gbGljZW5zZV90eXBlCisgICAgICAgICAgICAgICAgbGljZW5zZV9zb3VyY2UgPSBsaWNfZGlyCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBpZiBzcGR4X2dlbmVyaWMgYW5kIGxpY2Vuc2Vfc291cmNlOgorICAgICAgICAgICAgIyB3ZSByZWFsbHkgc2hvdWxkIGNvcHkgdG8gZ2VuZXJpY18gKyBzcGR4X2dlbmVyaWMsIGhvd2V2ZXIsIHRoYXQgZW5kcyB1cCBtZXNzaW5nIHRoZSBtYW5pZmVzdAorICAgICAgICAgICAgIyBhdWRpdCB1cC4gVGhpcyBzaG91bGQgYmUgZml4ZWQgaW4gZW1pdF9wa2dkYXRhIChvciwgd2UgYWN0dWFsbHkgZ290IGFuZCBmaXggYWxsIHRoZSByZWNpcGVzKQorCisgICAgICAgICAgICBsaWNfZmlsZXNfcGF0aHMuYXBwZW5kKCgiZ2VuZXJpY18iICsgbGljZW5zZV90eXBlLCBvcy5wYXRoLmpvaW4obGljZW5zZV9zb3VyY2UsIHNwZHhfZ2VuZXJpYykpKQorCisgICAgICAgICAgICAjIFRoZSB1c2VyIG1heSBhdHRlbXB0IHRvIHVzZSBOT19HRU5FUklDX0xJQ0VOU0UgZm9yIGEgZ2VuZXJpYyBsaWNlbnNlIHdoaWNoIGRvZXNuJ3QgbWFrZSBzZW5zZQorICAgICAgICAgICAgIyBhbmQgc2hvdWxkIG5vdCBiZSBhbGxvd2VkLCB3YXJuIHRoZSB1c2VyIGluIHRoaXMgY2FzZS4KKyAgICAgICAgICAgIGlmIGQuZ2V0VmFyRmxhZygnTk9fR0VORVJJQ19MSUNFTlNFJywgbGljZW5zZV90eXBlKToKKyAgICAgICAgICAgICAgICBiYi53YXJuKCIlczogJXMgaXMgYSBnZW5lcmljIGxpY2Vuc2UsIHBsZWFzZSBkb24ndCB1c2UgTk9fR0VORVJJQ19MSUNFTlNFIGZvciBpdC4iICUgKHBuLCBsaWNlbnNlX3R5cGUpKQorCisgICAgICAgIGVsaWYgZC5nZXRWYXJGbGFnKCdOT19HRU5FUklDX0xJQ0VOU0UnLCBsaWNlbnNlX3R5cGUpOgorICAgICAgICAgICAgIyBpZiBOT19HRU5FUklDX0xJQ0VOU0UgaXMgc2V0LCB3ZSBjb3B5IHRoZSBsaWNlbnNlIGZpbGVzIGZyb20gdGhlIGZldGNoZWQgc291cmNlCisgICAgICAgICAgICAjIG9mIHRoZSBwYWNrYWdlIHJhdGhlciB0aGFuIHRoZSBsaWNlbnNlX3NvdXJjZV9kaXJzLgorICAgICAgICAgICAgZm9yIChiYXNlbmFtZSwgcGF0aCkgaW4gbGljX2ZpbGVzX3BhdGhzOgorICAgICAgICAgICAgICAgIGlmIGQuZ2V0VmFyRmxhZygnTk9fR0VORVJJQ19MSUNFTlNFJywgbGljZW5zZV90eXBlKSA9PSBiYXNlbmFtZToKKyAgICAgICAgICAgICAgICAgICAgbGljX2ZpbGVzX3BhdGhzLmFwcGVuZCgoImdlbmVyaWNfIiArIGxpY2Vuc2VfdHlwZSwgcGF0aCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEFkZCBleHBsaWNpdHkgYXZvaWQgb2YgQ0xPU0VEIGxpY2Vuc2UgYmVjYXVzZSB0aGlzIGlzbid0IGdlbmVyaWMKKyAgICAgICAgICAgIGlmIGxpY2Vuc2VfdHlwZSAhPSAnQ0xPU0VEJzoKKyAgICAgICAgICAgICAgICAjIEFuZCBoZXJlIGlzIHdoZXJlIHdlIHdhcm4gcGVvcGxlIHRoYXQgdGhlaXIgbGljZW5zZXMgYXJlIGxvdXN5CisgICAgICAgICAgICAgICAgYmIud2FybigiJXM6IE5vIGdlbmVyaWMgbGljZW5zZSBmaWxlIGV4aXN0cyBmb3I6ICVzIGluIGFueSBwcm92aWRlciIgJSAocG4sIGxpY2Vuc2VfdHlwZSkpCisgICAgICAgICAgICBwYXNzCisKKyAgICBpZiBub3QgZ2VuZXJpY19kaXJlY3Rvcnk6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIkNPTU1PTl9MSUNFTlNFX0RJUiBpcyB1bnNldC4gUGxlYXNlIHNldCB0aGlzIGluIHlvdXIgZGlzdHJvIGNvbmZpZyIpCisKKyAgICBpZiBub3QgbGljX2ZpbGVzOgorICAgICAgICAjIE5vIHJlY2lwZSBzaG91bGQgaGF2ZSBhbiBpbnZhbGlkIGxpY2Vuc2UgZmlsZS4gVGhpcyBpcyBjaGVja2VkIGVsc2UKKyAgICAgICAgIyB3aGVyZSwgYnV0IGxldCdzIGJlIHBlZGFudGljCisgICAgICAgIGJiLm5vdGUocG4gKyAiOiBSZWNpcGUgZmlsZSBkb2VzIG5vdCBoYXZlIGxpY2Vuc2UgZmlsZSBpbmZvcm1hdGlvbi4iKQorICAgICAgICByZXR1cm4gbGljX2ZpbGVzX3BhdGhzCisKKyAgICBmb3IgdXJsIGluIGxpY19maWxlcy5zcGxpdCgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAodHlwZSwgaG9zdCwgcGF0aCwgdXNlciwgcHN3ZCwgcGFybSkgPSBiYi5mZXRjaC5kZWNvZGV1cmwodXJsKQorICAgICAgICBleGNlcHQgYmIuZmV0Y2guTWFsZm9ybWVkVXJsOgorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXM6IExJQ19GSUxFU19DSEtTVU0gY29udGFpbnMgYW4gaW52YWxpZCBVUkw6ICAlcyIgJSAoZC5nZXRWYXIoJ1BGJywgVHJ1ZSksIHVybCkpCisgICAgICAgICMgV2Ugd2FudCB0aGUgbGljZW5zZSBmaWxlbmFtZSBhbmQgcGF0aAorICAgICAgICBzcmNsaWNmaWxlID0gb3MucGF0aC5qb2luKHNyY2RpciwgcGF0aCkKKyAgICAgICAgbGljX2ZpbGVzX3BhdGhzLmFwcGVuZCgob3MucGF0aC5iYXNlbmFtZShwYXRoKSwgc3JjbGljZmlsZSkpCisKKyAgICB2ID0gRmluZFZpc2l0b3IoKQorICAgIHRyeToKKyAgICAgICAgdi52aXNpdF9zdHJpbmcobGljZW5zZV90eXBlcykKKyAgICBleGNlcHQgb2UubGljZW5zZS5JbnZhbGlkTGljZW5zZSBhcyBleGM6CisgICAgICAgIGJiLmZhdGFsKCclczogJXMnICUgKGQuZ2V0VmFyKCdQRicsIFRydWUpLCBleGMpKQorICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgYmIud2FybigiJXM6IEZhaWxlZCB0byBwYXJzZSBpdCdzIExJQ0VOU0UgZmllbGQuIiAlIChkLmdldFZhcignUEYnLCBUcnVlKSkpCisKKyAgICByZXR1cm4gbGljX2ZpbGVzX3BhdGhzCisKK2RlZiByZXR1cm5fc3BkeChkLCBsaWNlbnNlKToKKyAgICAiIiIKKyAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNwZHggbWFwcGluZyBvZiBhIGxpY2Vuc2UgaWYgaXQgZXhpc3RzLgorICAgICAiIiIKKyAgICByZXR1cm4gZC5nZXRWYXJGbGFnKCdTUERYTElDRU5TRU1BUCcsIGxpY2Vuc2UsIFRydWUpCisKK2RlZiBjYW5vbmljYWxfbGljZW5zZShkLCBsaWNlbnNlKToKKyAgICAiIiIKKyAgICBSZXR1cm4gdGhlIGNhbm9uaWNhbCAoU1BEWCkgZm9ybSBvZiB0aGUgbGljZW5zZSBpZiBhdmFpbGFibGUgKHNvIEdQTHYzCisgICAgYmVjb21lcyBHUEwtMy4wKSwgZm9yIHRoZSBsaWNlbnNlIG5hbWVkICdYKycsIHJldHVybiBjYW5vbmljYWwgZm9ybSBvZgorICAgICdYJyBpZiBhdmFpbGFiZWwgYW5kIHRoZSB0YWlsaW5nICcrJyAoc28gR1BMdjMrIGJlY29tZXMgR1BMLTMuMCspLCAKKyAgICBvciB0aGUgcGFzc2VkIGxpY2Vuc2UgaWYgdGhlcmUgaXMgbm8gY2Fub25pY2FsIGZvcm0uCisgICAgIiIiCisgICAgbGljID0gZC5nZXRWYXJGbGFnKCdTUERYTElDRU5TRU1BUCcsIGxpY2Vuc2UsIFRydWUpIG9yICIiCisgICAgaWYgbm90IGxpYyBhbmQgbGljZW5zZS5lbmRzd2l0aCgnKycpOgorICAgICAgICBsaWMgPSBkLmdldFZhckZsYWcoJ1NQRFhMSUNFTlNFTUFQJywgbGljZW5zZS5yc3RyaXAoJysnKSwgVHJ1ZSkKKyAgICAgICAgaWYgbGljOgorICAgICAgICAgICAgbGljICs9ICcrJworICAgIHJldHVybiBsaWMgb3IgbGljZW5zZQorCitkZWYgZXhwYW5kX3dpbGRjYXJkX2xpY2Vuc2VzKGQsIHdpbGRjYXJkX2xpY2Vuc2VzKToKKyAgICAiIiIKKyAgICBSZXR1cm4gYWN0dWFsIHNwZHggZm9ybWF0IGxpY2Vuc2UgbmFtZXMgaWYgd2lsZGNhcmQgdXNlZC4gV2UgZXhwYW5kCisgICAgd2lsZGNhcmRzIGZyb20gU1BEWExJQ0VOU0VNQVAgZmxhZ3MgYW5kIFNSQ19ESVNUUklCVVRFX0xJQ0VOU0VTIHZhbHVlcy4KKyAgICAiIiIKKyAgICBpbXBvcnQgZm5tYXRjaAorICAgIGxpY2Vuc2VzID0gW10KKyAgICBzcGR4bWFwa2V5cyA9IGQuZ2V0VmFyRmxhZ3MoJ1NQRFhMSUNFTlNFTUFQJykua2V5cygpCisgICAgZm9yIHdsZF9saWMgaW4gd2lsZGNhcmRfbGljZW5zZXM6CisgICAgICAgIHNwZHhmbGFncyA9IGZubWF0Y2guZmlsdGVyKHNwZHhtYXBrZXlzLCB3bGRfbGljKQorICAgICAgICBsaWNlbnNlcyArPSBbZC5nZXRWYXJGbGFnKCdTUERYTElDRU5TRU1BUCcsIGZsYWcpIGZvciBmbGFnIGluIHNwZHhmbGFnc10KKworICAgIHNwZHhfbGljcyA9IChkLmdldFZhcignU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMnLCBGYWxzZSkgb3IgJycpLnNwbGl0KCkKKyAgICBmb3Igd2xkX2xpYyBpbiB3aWxkY2FyZF9saWNlbnNlczoKKyAgICAgICAgbGljZW5zZXMgKz0gZm5tYXRjaC5maWx0ZXIoc3BkeF9saWNzLCB3bGRfbGljKQorCisgICAgbGljZW5zZXMgPSBsaXN0KHNldChsaWNlbnNlcykpCisgICAgcmV0dXJuIGxpY2Vuc2VzCisKK2RlZiBpbmNvbXBhdGlibGVfbGljZW5zZV9jb250YWlucyhsaWNlbnNlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpOgorICAgIGxpY2Vuc2UgPSBjYW5vbmljYWxfbGljZW5zZShkLCBsaWNlbnNlKQorICAgIGJhZF9saWNlbnNlcyA9IChkLmdldFZhcignSU5DT01QQVRJQkxFX0xJQ0VOU0UnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGJhZF9saWNlbnNlcyA9IGV4cGFuZF93aWxkY2FyZF9saWNlbnNlcyhkLCBiYWRfbGljZW5zZXMpCisgICAgcmV0dXJuIHRydWV2YWx1ZSBpZiBsaWNlbnNlIGluIGJhZF9saWNlbnNlcyBlbHNlIGZhbHNldmFsdWUKKworZGVmIGluY29tcGF0aWJsZV9saWNlbnNlKGQsIGRvbnRfd2FudF9saWNlbnNlcywgcGFja2FnZT1Ob25lKToKKyAgICAiIiIKKyAgICBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBhIHJlY2lwZSBoYXMgb25seSBpbmNvbXBhdGlibGUgbGljZW5zZXMuIEl0IGFsc28KKyAgICB0YWtlIGludG8gY29uc2lkZXJhdGlvbiAnb3InIG9wZXJhbmQuICBkb250X3dhbnRfbGljZW5zZXMgc2hvdWxkIGJlIHBhc3NlZAorICAgIGFzIGNhbm9uaWNhbCAoU1BEWCkgbmFtZXMuCisgICAgIiIiCisgICAgaW1wb3J0IG9lLmxpY2Vuc2UKKyAgICBsaWNlbnNlID0gZC5nZXRWYXIoIkxJQ0VOU0VfJXMiICUgcGFja2FnZSwgVHJ1ZSkgaWYgcGFja2FnZSBlbHNlIE5vbmUKKyAgICBpZiBub3QgbGljZW5zZToKKyAgICAgICAgbGljZW5zZSA9IGQuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkKKworICAgICMgSGFuZGxlcyBhbiAib3IiIG9yIHR3byBsaWNlbnNlIHNldHMgcHJvdmlkZWQgYnkKKyAgICAjIGZsYXR0ZW5lZF9saWNlbnNlcygpLCBwaWNrIG9uZSB0aGF0IHdvcmtzIGlmIHBvc3NpYmxlLgorICAgIGRlZiBjaG9vc2VfbGljX3NldChhLCBiKToKKyAgICAgICAgcmV0dXJuIGEgaWYgYWxsKG9lLmxpY2Vuc2UubGljZW5zZV9vayhjYW5vbmljYWxfbGljZW5zZShkLCBsaWMpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb250X3dhbnRfbGljZW5zZXMpIGZvciBsaWMgaW4gYSkgZWxzZSBiCisKKyAgICB0cnk6CisgICAgICAgIGxpY2Vuc2VzID0gb2UubGljZW5zZS5mbGF0dGVuZWRfbGljZW5zZXMobGljZW5zZSwgY2hvb3NlX2xpY19zZXQpCisgICAgZXhjZXB0IG9lLmxpY2Vuc2UuTGljZW5zZUVycm9yIGFzIGV4YzoKKyAgICAgICAgYmIuZmF0YWwoJyVzOiAlcycgJSAoZC5nZXRWYXIoJ1AnLCBUcnVlKSwgZXhjKSkKKyAgICByZXR1cm4gYW55KG5vdCBvZS5saWNlbnNlLmxpY2Vuc2Vfb2soY2Fub25pY2FsX2xpY2Vuc2UoZCwgbCksIFwKKwkJZG9udF93YW50X2xpY2Vuc2VzKSBmb3IgbCBpbiBsaWNlbnNlcykKKworZGVmIGNoZWNrX2xpY2Vuc2VfZmxhZ3MoZCk6CisgICAgIiIiCisgICAgVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgYSByZWNpcGUgaGFzIGFueSBMSUNFTlNFX0ZMQUdTIHRoYXQKKyAgICBhcmVuJ3Qgd2hpdGVsaXN0ZWQuCisKKyAgICBJZiBpdCBkb2VzLCBpdCByZXR1cm5zIHRoZSBmaXJzdCBMSUNFTlNFX0ZMQUdTIGl0ZW0gbWlzc2luZyBmcm9tIHRoZQorICAgIHdoaXRlbGlzdCwgb3IgYWxsIG9mIHRoZSBMSUNFTlNFX0ZMQUdTIGlmIHRoZXJlIGlzIG5vIHdoaXRlbGlzdC4KKworICAgIElmIGV2ZXJ5dGhpbmcgaXMgaXMgcHJvcGVybHkgd2hpdGVsaXN0ZWQsIGl0IHJldHVybnMgTm9uZS4KKyAgICAiIiIKKworICAgIGRlZiBsaWNlbnNlX2ZsYWdfbWF0Y2hlcyhmbGFnLCB3aGl0ZWxpc3QsIHBuKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBUcnVlIGlmIGZsYWcgbWF0Y2hlcyBzb21ldGhpbmcgaW4gd2hpdGVsaXN0LCBOb25lIGlmIG5vdC4KKworICAgICAgICBCZWZvcmUgd2UgdGVzdCBhIGZsYWcgYWdhaW5zdCB0aGUgd2hpdGVsaXN0LCB3ZSBhcHBlbmQgXyR7UE59CisgICAgICAgIHRvIGl0LiAgV2UgdGhlbiB0cnkgdG8gbWF0Y2ggdGhhdCBzdHJpbmcgYWdhaW5zdCB0aGUKKyAgICAgICAgd2hpdGVsaXN0LiAgVGhpcyBjb3ZlcnMgdGhlIG5vcm1hbCBjYXNlLCB3aGVyZSB3ZSBleHBlY3QKKyAgICAgICAgTElDRU5TRV9GTEFHUyB0byBiZSBhIHNpbXBsZSBzdHJpbmcgbGlrZSAnY29tbWVyY2lhbCcsIHdoaWNoCisgICAgICAgIHRoZSB1c2VyIHR5cGljYWxseSBtYXRjaGVzIGV4YWN0bHkgaW4gdGhlIHdoaXRlbGlzdCBieQorICAgICAgICBleHBsaWNpdGx5IGFwcGVuZGluZyB0aGUgcGFja2FnZSBuYW1lIGUuZyAnY29tbWVyY2lhbF9mb28nLgorICAgICAgICBJZiB3ZSBmYWlsIHRoZSBtYXRjaCBob3dldmVyLCB3ZSB0aGVuIHNwbGl0IHRoZSBmbGFnIGFjcm9zcworICAgICAgICAnXycgYW5kIGFwcGVuZCBlYWNoIGZyYWdtZW50IGFuZCB0ZXN0IHVudGlsIHdlIGVpdGhlciBtYXRjaCBvcgorICAgICAgICBydW4gb3V0IG9mIGZyYWdtZW50cy4KKyAgICAgICAgIiIiCisgICAgICAgIGZsYWdfcG4gPSAoIiVzXyVzIiAlIChmbGFnLCBwbikpCisgICAgICAgIGZvciBjYW5kaWRhdGUgaW4gd2hpdGVsaXN0OgorICAgICAgICAgICAgaWYgZmxhZ19wbiA9PSBjYW5kaWRhdGU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgZmxhZ19jdXIgPSAiIgorICAgICAgICBmbGFnbWVudHMgPSBmbGFnX3BuLnNwbGl0KCJfIikKKyAgICAgICAgZmxhZ21lbnRzLnBvcCgpICMgd2UndmUgYWxyZWFkeSB0ZXN0ZWQgdGhlIGZ1bGwgc3RyaW5nCisgICAgICAgIGZvciBmbGFnbWVudCBpbiBmbGFnbWVudHM6CisgICAgICAgICAgICBpZiBmbGFnX2N1cjoKKyAgICAgICAgICAgICAgICBmbGFnX2N1ciArPSAiXyIKKyAgICAgICAgICAgIGZsYWdfY3VyICs9IGZsYWdtZW50CisgICAgICAgICAgICBmb3IgY2FuZGlkYXRlIGluIHdoaXRlbGlzdDoKKyAgICAgICAgICAgICAgICBpZiBmbGFnX2N1ciA9PSBjYW5kaWRhdGU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGFsbF9saWNlbnNlX2ZsYWdzX21hdGNoKGxpY2Vuc2VfZmxhZ3MsIHdoaXRlbGlzdCk6CisgICAgICAgICIiIiBSZXR1cm4gZmlyc3QgdW5tYXRjaGVkIGZsYWcsIE5vbmUgaWYgYWxsIGZsYWdzIG1hdGNoICIiIgorICAgICAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgIHNwbGl0X3doaXRlbGlzdCA9IHdoaXRlbGlzdC5zcGxpdCgpCisgICAgICAgIGZvciBmbGFnIGluIGxpY2Vuc2VfZmxhZ3Muc3BsaXQoKToKKyAgICAgICAgICAgIGlmIG5vdCBsaWNlbnNlX2ZsYWdfbWF0Y2hlcyhmbGFnLCBzcGxpdF93aGl0ZWxpc3QsIHBuKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmxhZworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgbGljZW5zZV9mbGFncyA9IGQuZ2V0VmFyKCdMSUNFTlNFX0ZMQUdTJywgVHJ1ZSkKKyAgICBpZiBsaWNlbnNlX2ZsYWdzOgorICAgICAgICB3aGl0ZWxpc3QgPSBkLmdldFZhcignTElDRU5TRV9GTEFHU19XSElURUxJU1QnLCBUcnVlKQorICAgICAgICBpZiBub3Qgd2hpdGVsaXN0OgorICAgICAgICAgICAgcmV0dXJuIGxpY2Vuc2VfZmxhZ3MKKyAgICAgICAgdW5tYXRjaGVkX2ZsYWcgPSBhbGxfbGljZW5zZV9mbGFnc19tYXRjaChsaWNlbnNlX2ZsYWdzLCB3aGl0ZWxpc3QpCisgICAgICAgIGlmIHVubWF0Y2hlZF9mbGFnOgorICAgICAgICAgICAgcmV0dXJuIHVubWF0Y2hlZF9mbGFnCisgICAgcmV0dXJuIE5vbmUKKworZGVmIGNoZWNrX2xpY2Vuc2VfZm9ybWF0KGQpOgorICAgICIiIgorICAgIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIExJQ0VOU0UgaXMgd2VsbCBkZWZpbmVkLAorICAgICAgICBWYWxpZGF0ZSBvcGVyYXRvcnMgaW4gTElDRU5TRVMuCisgICAgICAgIE5vIHNwYWNlcyBhcmUgYWxsb3dlZCBiZXR3ZWVuIExJQ0VOU0VTLgorICAgICIiIgorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBsaWNlbnNlcyA9IGQuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkKKyAgICBmcm9tIG9lLmxpY2Vuc2UgaW1wb3J0IGxpY2Vuc2Vfb3BlcmF0b3IsIGxpY2Vuc2Vfb3BlcmF0b3JfY2hhcnMsIGxpY2Vuc2VfcGF0dGVybgorCisgICAgZWxlbWVudHMgPSBmaWx0ZXIobGFtYmRhIHg6IHguc3RyaXAoKSwgbGljZW5zZV9vcGVyYXRvci5zcGxpdChsaWNlbnNlcykpCisgICAgZm9yIHBvcywgZWxlbWVudCBpbiBlbnVtZXJhdGUoZWxlbWVudHMpOgorICAgICAgICBpZiBsaWNlbnNlX3BhdHRlcm4ubWF0Y2goZWxlbWVudCk6CisgICAgICAgICAgICBpZiBwb3MgPiAwIGFuZCBsaWNlbnNlX3BhdHRlcm4ubWF0Y2goZWxlbWVudHNbcG9zIC0gMV0pOgorICAgICAgICAgICAgICAgIGJiLndhcm4oJyVzOiBMSUNFTlNFIHZhbHVlICIlcyIgaGFzIGFuIGludmFsaWQgZm9ybWF0IC0gbGljZW5zZSBuYW1lcyAnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICdtdXN0IGJlIHNlcGFyYXRlZCBieSB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgdG8gaW5kaWNhdGUgJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAndGhlIGxpY2Vuc2Ugc2VsZWN0aW9uOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgKHBuLCBsaWNlbnNlcywgbGljZW5zZV9vcGVyYXRvcl9jaGFycykpCisgICAgICAgIGVsaWYgbm90IGxpY2Vuc2Vfb3BlcmF0b3IubWF0Y2goZWxlbWVudCk6CisgICAgICAgICAgICBiYi53YXJuKCclczogTElDRU5TRSB2YWx1ZSAiJXMiIGhhcyBhbiBpbnZhbGlkIHNlcGFyYXRvciAiJXMiIHRoYXQgaXMgbm90ICcgXAorICAgICAgICAgICAgICAgICAgICAnaW4gdGhlIHZhbGlkIGxpc3Qgb2Ygc2VwYXJhdG9ycyAoJXMpJyAlCisgICAgICAgICAgICAgICAgICAgIChwbiwgbGljZW5zZXMsIGVsZW1lbnQsIGxpY2Vuc2Vfb3BlcmF0b3JfY2hhcnMpKQorCitTU1RBVEVUQVNLUyArPSAiZG9fcG9wdWxhdGVfbGljIgorZG9fcG9wdWxhdGVfbGljW3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7TElDU1NUQVRFRElSfSIKK2RvX3BvcHVsYXRlX2xpY1tzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtMSUNFTlNFX0RJUkVDVE9SWX0vIgorCitST09URlNfUE9TVFBST0NFU1NfQ09NTUFORF9wcmVwZW5kID0gIndyaXRlX3BhY2thZ2VfbWFuaWZlc3Q7IGxpY2Vuc2VfY3JlYXRlX21hbmlmZXN0OyAiCisKK2RvX3BvcHVsYXRlX2xpY19zZXRzY2VuZVtkaXJzXSA9ICIke0xJQ1NTVEFURURJUn0vJHtQTn0iCitkb19wb3B1bGF0ZV9saWNfc2V0c2NlbmVbY2xlYW5kaXJzXSA9ICIke0xJQ1NTVEFURURJUn0iCitweXRob24gZG9fcG9wdWxhdGVfbGljX3NldHNjZW5lICgpIHsKKyAgICBzc3RhdGVfc2V0c2NlbmUoZCkKK30KK2FkZHRhc2sgZG9fcG9wdWxhdGVfbGljX3NldHNjZW5lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saW51eC1rZXJuZWwtYmFzZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbGludXgta2VybmVsLWJhc2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWNlNzE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbGludXgta2VybmVsLWJhc2UuYmJjbGFzcwpAQCAtMCwwICsxLDQxIEBACisjIHBhcnNlIGtlcm5lbCBBQkkgdmVyc2lvbiBvdXQgb2YgPGxpbnV4L3ZlcnNpb24uaD4KK2RlZiBnZXRfa2VybmVsdmVyc2lvbl9oZWFkZXJzKHApOgorICAgIGltcG9ydCByZQorCisgICAgZm4gPSBwICsgJy9pbmNsdWRlL2xpbnV4L3V0c3JlbGVhc2UuaCcKKyAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoZm4pOgorICAgICAgICAjIGFmdGVyIDIuNi4zMy1yYzEKKyAgICAgICAgZm4gPSBwICsgJy9pbmNsdWRlL2dlbmVyYXRlZC91dHNyZWxlYXNlLmgnCisgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGZuKToKKyAgICAgICAgZm4gPSBwICsgJy9pbmNsdWRlL2xpbnV4L3ZlcnNpb24uaCcKKworICAgIHRyeToKKyAgICAgICAgZiA9IG9wZW4oZm4sICdyJykKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGwgPSBmLnJlYWRsaW5lcygpCisgICAgZi5jbG9zZSgpCisgICAgciA9IHJlLmNvbXBpbGUoIiNkZWZpbmUgVVRTX1JFTEVBU0UgXCIoLiopXCIiKQorICAgIGZvciBzIGluIGw6CisgICAgICAgIG0gPSByLm1hdGNoKHMpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICByZXR1cm4gbS5ncm91cCgxKQorICAgIHJldHVybiBOb25lCisKKworZGVmIGdldF9rZXJuZWx2ZXJzaW9uX2ZpbGUocCk6CisgICAgZm4gPSBwICsgJy9rZXJuZWwtYWJpdmVyc2lvbicKKworICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGZuLCAncicpIGFzIGY6CisgICAgICAgICAgICByZXR1cm4gZi5yZWFkbGluZXMoKVswXS5zdHJpcCgpCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHJldHVybiBOb25lCisKK2RlZiBsaW51eF9tb2R1bGVfcGFja2FnZXMocywgZCk6CisJc3VmZml4ID0gIiIKKwlyZXR1cm4gIiAiLmpvaW4obWFwKGxhbWJkYSBzOiAia2VybmVsLW1vZHVsZS0lcyVzIiAlIChzLmxvd2VyKCkucmVwbGFjZSgnXycsICctJykucmVwbGFjZSgnQCcsICcrJyksIHN1ZmZpeCksIHMuc3BsaXQoKSkpCisKKyMgdGhhdCdzIGFsbAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9sb2dnaW5nLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9sb2dnaW5nLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZjN2MzMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xvZ2dpbmcuYmJjbGFzcwpAQCAtMCwwICsxLDEwMSBAQAorIyBUaGUgZm9sbG93aW5nIGxvZ2dpbmcgbWVjaGFuaXNtcyBhcmUgdG8gYmUgdXNlZCBpbiBiYXNoIGZ1bmN0aW9ucyBvZiByZWNpcGVzLgorIyBUaGV5IGFyZSBpbnRlbmRlZCB0byBtYXAgb25lIHRvIG9uZSBpbiBpbnRlbnRpb24gYW5kIG91dHB1dCBmb3JtYXQgd2l0aCB0aGUKKyMgcHl0aG9uIHJlY2lwZSBsb2dnaW5nIGZ1bmN0aW9ucyBvZiBhIHNpbWlsYXIgbmFtaW5nIGNvbnZlbnRpb246IGJiLnBsYWluKCksCisjIGJiLm5vdGUoKSwgZXRjLgorCitMT0dGSUZPID0gIiR7VH0vZmlmby4ke0Bvcy5nZXRwaWQoKX0iCisKKyMgUHJpbnQgdGhlIG91dHB1dCBleGFjdGx5IGFzIGl0IGlzIHBhc3NlZCBpbi4gVHlwaWNhbGx5IHVzZWQgZm9yIG91dHB1dCBvZgorIyB0YXNrcyB0aGF0IHNob3VsZCBiZSBzZWVuIG9uIHRoZSBjb25zb2xlLiBVc2Ugc3BhcmluZ2x5LgorIyBPdXRwdXQ6IGxvZ3MgY29uc29sZQorYmJwbGFpbigpIHsKKwlpZiBbIC1wICR7TE9HRklGT30gXSA7IHRoZW4KKwkJcHJpbnRmICIlYlwwIiAiYmJwbGFpbiAkKiIgPiAke0xPR0ZJRk99CisJZWxzZQorCQllY2hvICIkKiIKKwlmaQorfQorCisjIE5vdGlmeSB0aGUgdXNlciBvZiBhIG5vdGV3b3J0aHkgY29uZGl0aW9uLiAKKyMgT3V0cHV0OiBsb2dzCitiYm5vdGUoKSB7CisJaWYgWyAtcCAke0xPR0ZJRk99IF0gOyB0aGVuCisJCXByaW50ZiAiJWJcMCIgImJibm90ZSAkKiIgPiAke0xPR0ZJRk99CisJZWxzZQorCQllY2hvICJOT1RFOiAkKiIKKwlmaQorfQorCisjIFByaW50IGEgd2FybmluZyB0byB0aGUgbG9nLiBXYXJuaW5ncyBhcmUgbm9uLWZhdGFsLCBhbmQgZG8gbm90CisjIGluZGljYXRlIGEgYnVpbGQgZmFpbHVyZS4KKyMgT3V0cHV0OiBsb2dzIGNvbnNvbGUKK2Jid2FybigpIHsKKwlpZiBbIC1wICR7TE9HRklGT30gXSA7IHRoZW4KKwkJcHJpbnRmICIlYlwwIiAiYmJ3YXJuICQqIiA+ICR7TE9HRklGT30KKwllbHNlCisJCWVjaG8gIldBUk5JTkc6ICQqIgorCWZpCit9CisKKyMgUHJpbnQgYW4gZXJyb3IgdG8gdGhlIGxvZy4gRXJyb3JzIGFyZSBub24tZmF0YWwgaW4gdGhhdCB0aGUgYnVpbGQgY2FuCisjIGNvbnRpbnVlLCBidXQgdGhleSBkbyBpbmRpY2F0ZSBhIGJ1aWxkIGZhaWx1cmUuCisjIE91dHB1dDogbG9ncyBjb25zb2xlCitiYmVycm9yKCkgeworCWlmIFsgLXAgJHtMT0dGSUZPfSBdIDsgdGhlbgorCQlwcmludGYgIiViXDAiICJiYmVycm9yICQqIiA+ICR7TE9HRklGT30KKwllbHNlCisJCWVjaG8gIkVSUk9SOiAkKiIKKwlmaQorfQorCisjIFByaW50IGEgZmF0YWwgZXJyb3IgdG8gdGhlIGxvZy4gRmF0YWwgZXJyb3JzIGluZGljYXRlIGJ1aWxkIGZhaWx1cmUKKyMgYW5kIGhhbHQgdGhlIGJ1aWxkLCBleGl0aW5nIHdpdGggYW4gZXJyb3IgY29kZS4KKyMgT3V0cHV0OiBsb2dzIGNvbnNvbGUKK2JiZmF0YWwoKSB7CisJaWYgWyAtcCAke0xPR0ZJRk99IF0gOyB0aGVuCisJCXByaW50ZiAiJWJcMCIgImJiZmF0YWwgJCoiID4gJHtMT0dGSUZPfQorCWVsc2UKKwkJZWNobyAiRVJST1I6ICQqIgorCWZpCisJZXhpdCAxCit9CisKKyMgTGlrZSBiYmZhdGFsLCBleGNlcHQgcHJldmVudHMgdGhlIHN1cHByZXNzaW9uIG9mIHRoZSBlcnJvciBsb2cgYnkKKyMgYml0YmFrZSdzIFVJLgorIyBPdXRwdXQ6IGxvZ3MgY29uc29sZQorYmJmYXRhbF9sb2coKSB7CisJaWYgWyAtcCAke0xPR0ZJRk99IF0gOyB0aGVuCisJCXByaW50ZiAiJWJcMCIgImJiZmF0YWxfbG9nICQqIiA+ICR7TE9HRklGT30KKwllbHNlCisJCWVjaG8gIkVSUk9SOiAkKiIKKwlmaQorCWV4aXQgMQorfQorCisjIFByaW50IGRlYnVnIG1lc3NhZ2VzLiBUaGVzZSBhcmUgYXBwcm9wcmlhdGUgZm9yIHByb2dyZXNzIGNoZWNrcG9pbnQKKyMgbWVzc2FnZXMgdG8gdGhlIGxvZ3MuIERlcGVuZGluZyBvbiB0aGUgZGVidWcgbG9nIGxldmVsLCB0aGV5IG1heSBhbHNvCisjIGdvIHRvIHRoZSBjb25zb2xlLgorIyBPdXRwdXQ6IGxvZ3MgY29uc29sZQorIyBVc2FnZTogYmJkZWJ1ZyAxICJmaXJzdCBsZXZlbCBkZWJ1ZyBtZXNzYWdlIgorIyAgICAgICAgYmJkZWJ1ZyAyICJzZWNvbmQgbGV2ZWwgZGVidWcgbWVzc2FnZSIKK2JiZGVidWcoKSB7CisJVVNBR0U9J1VzYWdlOiBiYmRlYnVnIFsxMjNdICJtZXNzYWdlIicKKwlpZiBbICQjIC1sdCAyIF07IHRoZW4KKwkJYmJmYXRhbCAiJFVTQUdFIgorCWZpCisJCisJIyBTdHJpcCBvZmYgdGhlIGRlYnVnIGxldmVsIGFuZCBlbnN1cmUgaXQgaXMgYW4gaW50ZWdlcgorCURCR0xWTD0kMTsgc2hpZnQKKwlOT05ESUdJVFM9JChlY2hvICIkREJHTFZMIiB8IHRyIC1kIFs6ZGlnaXQ6XSkKKwlpZiBbICIkTk9ORElHSVRTIiBdOyB0aGVuCisJCWJiZmF0YWwgIiRVU0FHRSIKKwlmaQorCisJIyBBbGwgZGVidWcgb3V0cHV0IGlzIHByaW50ZWQgdG8gdGhlIGxvZ3MKKwlpZiBbIC1wICR7TE9HRklGT30gXSA7IHRoZW4KKwkJcHJpbnRmICIlYlwwIiAiYmJkZWJ1ZyAkREJHTFZMICQqIiA+ICR7TE9HRklGT30KKwllbHNlCisJCWVjaG8gIkRFQlVHOiAkKiIKKwlmaQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tZXRhLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tZXRhLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU2ODkwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL21ldGEuYmJjbGFzcwpAQCAtMCwwICsxLDQgQEAKKworUEFDS0FHRVMgPSAiIgorCitkb19idWlsZFtyZWNyZGVwdGFza10gPSAiZG9fYnVpbGQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tZXRhZGF0YV9zY20uYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL21ldGFkYXRhX3NjbS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzN2U2MTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tZXRhZGF0YV9zY20uYmJjbGFzcwpAQCAtMCwwICsxLDgyIEBACitNRVRBREFUQV9CUkFOQ0ggPz0gIiR7QGJhc2VfZGV0ZWN0X2JyYW5jaChkKX0iCitNRVRBREFUQV9SRVZJU0lPTiA/PSAiJHtAYmFzZV9kZXRlY3RfcmV2aXNpb24oZCl9IgorCitkZWYgYmFzZV9kZXRlY3RfcmV2aXNpb24oZCk6CisgICAgcGF0aCA9IGJhc2VfZ2V0X3NjbWJhc2VwYXRoKGQpCisKKyAgICBzY21zID0gW2Jhc2VfZ2V0X21ldGFkYXRhX2dpdF9yZXZpc2lvbiwgXAorICAgICAgICAgICAgYmFzZV9nZXRfbWV0YWRhdGFfc3ZuX3JldmlzaW9uXQorCisgICAgZm9yIHNjbSBpbiBzY21zOgorICAgICAgICByZXYgPSBzY20ocGF0aCwgZCkKKyAgICAgICAgaWYgcmV2ICE9ICI8dW5rbm93bj4iOgorICAgICAgICAgICAgcmV0dXJuIHJldgorCisgICAgcmV0dXJuICI8dW5rbm93bj4iCisKK2RlZiBiYXNlX2RldGVjdF9icmFuY2goZCk6CisgICAgcGF0aCA9IGJhc2VfZ2V0X3NjbWJhc2VwYXRoKGQpCisKKyAgICBzY21zID0gW2Jhc2VfZ2V0X21ldGFkYXRhX2dpdF9icmFuY2hdCisKKyAgICBmb3Igc2NtIGluIHNjbXM6CisgICAgICAgIHJldiA9IHNjbShwYXRoLCBkKQorICAgICAgICBpZiByZXYgIT0gIjx1bmtub3duPiI6CisgICAgICAgICAgICByZXR1cm4gcmV2LnN0cmlwKCkKKworICAgIHJldHVybiAiPHVua25vd24+IgorCitkZWYgYmFzZV9nZXRfc2NtYmFzZXBhdGgoZCk6CisgICAgcmV0dXJuIGQuZ2V0VmFyKCAnQ09SRUJBU0UnLCBUcnVlKQorCitkZWYgYmFzZV9nZXRfbWV0YWRhdGFfbW9ub3RvbmVfYnJhbmNoKHBhdGgsIGQpOgorICAgIG1vbm90b25lX2JyYW5jaCA9ICI8dW5rbm93bj4iCisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oIiVzL19NVE4vb3B0aW9ucyIgJSBwYXRoKSBhcyBmOgorICAgICAgICAgICAgbW9ub3RvbmVfYnJhbmNoID0gZi5yZWFkKCkuc3RyaXAoKQorICAgICAgICAgICAgaWYgbW9ub3RvbmVfYnJhbmNoLnN0YXJ0c3dpdGgoICJkYXRhYmFzZSIgKToKKyAgICAgICAgICAgICAgICBtb25vdG9uZV9icmFuY2hfd29yZHMgPSBtb25vdG9uZV9icmFuY2guc3BsaXQoKQorICAgICAgICAgICAgICAgIG1vbm90b25lX2JyYW5jaCA9IG1vbm90b25lX2JyYW5jaF93b3Jkc1sgbW9ub3RvbmVfYnJhbmNoX3dvcmRzLmluZGV4KCAiYnJhbmNoIiApKzFdWzE6LTFdCisgICAgZXhjZXB0OgorICAgICAgICBwYXNzCisgICAgcmV0dXJuIG1vbm90b25lX2JyYW5jaAorCitkZWYgYmFzZV9nZXRfbWV0YWRhdGFfbW9ub3RvbmVfcmV2aXNpb24ocGF0aCwgZCk6CisgICAgbW9ub3RvbmVfcmV2aXNpb24gPSAiPHVua25vd24+IgorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKCIlcy9fTVROL3JldmlzaW9uIiAlIHBhdGgpIGFzIGY6CisgICAgICAgICAgICBtb25vdG9uZV9yZXZpc2lvbiA9IGYucmVhZCgpLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG1vbm90b25lX3JldmlzaW9uLnN0YXJ0c3dpdGgoICJmb3JtYXRfdmVyc2lvbiIgKToKKyAgICAgICAgICAgICAgICBtb25vdG9uZV9yZXZpc2lvbl93b3JkcyA9IG1vbm90b25lX3JldmlzaW9uLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBtb25vdG9uZV9yZXZpc2lvbiA9IG1vbm90b25lX3JldmlzaW9uX3dvcmRzWyBtb25vdG9uZV9yZXZpc2lvbl93b3Jkcy5pbmRleCggIm9sZF9yZXZpc2lvbiIgKSsxXVsxOi0xXQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBwYXNzCisgICAgcmV0dXJuIG1vbm90b25lX3JldmlzaW9uCisKK2RlZiBiYXNlX2dldF9tZXRhZGF0YV9zdm5fcmV2aXNpb24ocGF0aCwgZCk6CisgICAgIyBUaGlzIG9ubHkgd29ya3Mgd2l0aCBvbGRlciBzdWJ2ZXJzaW9uLiBGb3IgbmV3ZXIgdmVyc2lvbnMgCisgICAgIyB0aGlzIGZ1bmN0aW9uIHdpbGwgbmVlZCB0byBiZSBmaXhlZCBieSBzb21lb25lIGludGVyZXN0ZWQKKyAgICByZXZpc2lvbiA9ICI8dW5rbm93bj4iCisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oIiVzLy5zdm4vZW50cmllcyIgJSBwYXRoKSBhcyBmOgorICAgICAgICAgICAgcmV2aXNpb24gPSBmLnJlYWRsaW5lcygpWzNdLnN0cmlwKCkKKyAgICBleGNlcHQgKElPRXJyb3IsIEluZGV4RXJyb3IpOgorICAgICAgICBwYXNzCisgICAgcmV0dXJuIHJldmlzaW9uCisKK2RlZiBiYXNlX2dldF9tZXRhZGF0YV9naXRfYnJhbmNoKHBhdGgsIGQpOgorICAgIGJyYW5jaCA9IG9zLnBvcGVuKCdjZCAlczsgZ2l0IGJyYW5jaCAyPiYxIHwgZ3JlcCAiXiogIiB8IHRyIC1kICIqICInICUgcGF0aCkucmVhZCgpCisKKyAgICBpZiBsZW4oYnJhbmNoKSAhPSAwOgorICAgICAgICByZXR1cm4gYnJhbmNoCisgICAgcmV0dXJuICI8dW5rbm93bj4iCisKK2RlZiBiYXNlX2dldF9tZXRhZGF0YV9naXRfcmV2aXNpb24ocGF0aCwgZCk6CisgICAgZiA9IG9zLnBvcGVuKCJjZCAlczsgZ2l0IGxvZyAtbiAxIC0tcHJldHR5PW9uZWxpbmUgLS0gMj4mMSIgJSBwYXRoKQorICAgIGRhdGEgPSBmLnJlYWQoKQorICAgIGlmIGYuY2xvc2UoKSBpcyBOb25lOiAgICAgICAgCisgICAgICAgIHJldiA9IGRhdGEuc3BsaXQoIiAiKVswXQorICAgICAgICBpZiBsZW4ocmV2KSAhPSAwOgorICAgICAgICAgICAgcmV0dXJuIHJldgorICAgIHJldHVybiAiPHVua25vd24+IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9taWdyYXRlX2xvY2FsY291bnQuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL21pZ3JhdGVfbG9jYWxjb3VudC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMGRmOGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9taWdyYXRlX2xvY2FsY291bnQuYmJjbGFzcwpAQCAtMCwwICsxLDQ2IEBACitQUlNFUlZfRFVNUERJUiA/Pz0gIiR7TE9HX0RJUn0vZGIiCitMT0NBTENPVU5UX0RVTVBGSUxFID8/PSAiJHtQUlNFUlZfRFVNUERJUn0vcHJzZXJ2LWxvY2FsY291bnQtZXhwb3J0cy5pbmMiCisKK3B5dGhvbiBtaWdyYXRlX2xvY2FsY291bnRfaGFuZGxlciAoKSB7CisgICAgaW1wb3J0IGJiLmV2ZW50CisgICAgaWYgbm90IGUuZGF0YToKKyAgICAgICAgcmV0dXJuCisKKyAgICBwdiA9IGUuZGF0YS5nZXRWYXIoJ1BWJywgVHJ1ZSkKKyAgICBpZiBub3QgJ0FVVE9JTkMnIGluIHB2OgorICAgICAgICByZXR1cm4KKworICAgIGxvY2FsY291bnRzID0gYmIucGVyc2lzdF9kYXRhLnBlcnNpc3QoJ0JCX1VSSV9MT0NBTENPVU5UJywgZS5kYXRhKQorICAgIHBuID0gZS5kYXRhLmdldFZhcignUE4nLCBUcnVlKQorICAgIHJldnMgPSBsb2NhbGNvdW50cy5nZXRfYnlfcGF0dGVybignJSUtJXNfcmV2JyAlIHBuKQorICAgIGNvdW50cyA9IGxvY2FsY291bnRzLmdldF9ieV9wYXR0ZXJuKCclJS0lc19jb3VudCcgJSBwbikKKyAgICBpZiBub3QgcmV2cyBvciBub3QgY291bnRzOgorICAgICAgICByZXR1cm4KKworICAgIGlmIGxlbihyZXZzKSAhPSBsZW4oY291bnRzKToKKyAgICAgICAgYmIud2FybigiVGhlIG51bWJlciBvZiByZXZzIGFuZCBsb2NhbGNvdW50cyBkb24ndCBtYXRjaCBpbiAlcyIgJSBwbikKKyAgICAgICAgcmV0dXJuCisKKyAgICB2ZXJzaW9uID0gZS5kYXRhLmdldFZhcignUFJBVVRPSU5YJywgVHJ1ZSkKKyAgICBzcmNyZXYgPSBiYi5mZXRjaDIuZ2V0X3NyY3JldihlLmRhdGEpCisgICAgYmFzZV92ZXIgPSAnQVVUT0lOQy0lcycgJSB2ZXJzaW9uWzp2ZXJzaW9uLmZpbmQoc3JjcmV2KV0KKyAgICBwa2dhcmNoID0gZS5kYXRhLmdldFZhcignUEFDS0FHRV9BUkNIJywgVHJ1ZSkKKyAgICB2YWx1ZSA9IG1heChpbnQoY291bnQpIGZvciBjb3VudCBpbiBjb3VudHMpCisKKyAgICBpZiBsZW4ocmV2cykgPT0gMToKKyAgICAgICAgaWYgc3JjcmV2ICE9ICgnQVVUT0lOQyslcycgJSByZXZzWzBdKToKKyAgICAgICAgICAgIHZhbHVlICs9IDEKKyAgICBlbHNlOgorICAgICAgICB2YWx1ZSArPSAxCisKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZS5kYXRhLmdldFZhcignUFJTRVJWX0RVTVBESVInLCBUcnVlKSkKKyAgICBkZiA9IGUuZGF0YS5nZXRWYXIoJ0xPQ0FMQ09VTlRfRFVNUEZJTEUnLCBUcnVlKQorICAgIGZsb2NrID0gYmIudXRpbHMubG9ja2ZpbGUoIiVzLmxvY2siICUgZGYpCisgICAgd2l0aCBvcGVuKGRmLCAnYScpIGFzIGZkOgorICAgICAgICBmZC53cml0ZSgnUFJBVVRPJCVzJCVzJCVzID0gIiVzIlxuJyAlCisgICAgICAgICAgICAgICAgKGJhc2VfdmVyLCBwa2dhcmNoLCBzcmNyZXYsIHN0cih2YWx1ZSkpKQorICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUoZmxvY2spCit9CisKK2FkZGhhbmRsZXIgbWlncmF0ZV9sb2NhbGNvdW50X2hhbmRsZXIKK21pZ3JhdGVfbG9jYWxjb3VudF9oYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuUmVjaXBlUGFyc2VkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbWltZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbWltZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMWM3M2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9taW1lLmJiY2xhc3MKQEAgLTAsMCArMSw1NiBAQAorREVQRU5EUyArPSAic2hhcmVkLW1pbWUtaW5mby1uYXRpdmUgc2hhcmVkLW1pbWUtaW5mbyIKKworbWltZV9wb3N0aW5zdCgpIHsKK2lmIFsgIiQxIiA9IGNvbmZpZ3VyZSBdOyB0aGVuCisJVVBEQVRFTUlNRURCPWB3aGljaCB1cGRhdGUtbWltZS1kYXRhYmFzZWAKKwlpZiBbIC14ICIkVVBEQVRFTUlNRURCIiBdIDsgdGhlbgorCQllY2hvICJVcGRhdGluZyBNSU1FIGRhdGFiYXNlLi4uIHRoaXMgbWF5IHRha2UgYSB3aGlsZS4iCisJCSRVUERBVEVNSU1FREIgJEQke2RhdGFkaXJ9L21pbWUKKwllbHNlCisJCWVjaG8gIk1pc3NpbmcgdXBkYXRlLW1pbWUtZGF0YWJhc2UsIHVwZGF0ZSBvZiBtaW1lIGRhdGFiYXNlIGZhaWxlZCEiCisJCWV4aXQgMQorCWZpCitmaQorfQorCittaW1lX3Bvc3RybSgpIHsKK2lmIFsgIiQxIiA9IHJlbW92ZSBdIHx8IFsgIiQxIiA9IHVwZ3JhZGUgXTsgdGhlbgorCVVQREFURU1JTUVEQj1gd2hpY2ggdXBkYXRlLW1pbWUtZGF0YWJhc2VgCisJaWYgWyAteCAiJFVQREFURU1JTUVEQiIgXSA7IHRoZW4KKwkJZWNobyAiVXBkYXRpbmcgTUlNRSBkYXRhYmFzZS4uLiB0aGlzIG1heSB0YWtlIGEgd2hpbGUuIgorCQkkVVBEQVRFTUlNRURCICREJHtkYXRhZGlyfS9taW1lCisJZWxzZQorCQllY2hvICJNaXNzaW5nIHVwZGF0ZS1taW1lLWRhdGFiYXNlLCB1cGRhdGUgb2YgbWltZSBkYXRhYmFzZSBmYWlsZWQhIgorCQlleGl0IDEKKwlmaQorZmkKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX2FwcGVuZCAoKSB7CisgICAgaW1wb3J0IHJlCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgcGtnZGVzdCA9ICBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICBtaW1lX2RpciA9ICclcy8lcy91c3Ivc2hhcmUvbWltZS9wYWNrYWdlcycgJSAocGtnZGVzdCwgcGtnKQorICAgICAgICBtaW1lcyA9IFtdCisgICAgICAgIG1pbWVfcmUgPSByZS5jb21waWxlKCIuKlwueG1sJCIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG1pbWVfZGlyKToKKyAgICAgICAgICAgIGZvciBmIGluIG9zLmxpc3RkaXIobWltZV9kaXIpOgorICAgICAgICAgICAgICAgIGlmIG1pbWVfcmUubWF0Y2goZik6CisgICAgICAgICAgICAgICAgICAgIG1pbWVzLmFwcGVuZChmKQorICAgICAgICBpZiBtaW1lczoKKyAgICAgICAgICAgIGJiLm5vdGUoImFkZGluZyBtaW1lIHBvc3RpbnN0IGFuZCBwb3N0cm0gc2NyaXB0cyB0byAlcyIgJSBwa2cpCisgICAgICAgICAgICBwb3N0aW5zdCA9IGQuZ2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHBvc3RpbnN0OgorICAgICAgICAgICAgICAgIHBvc3RpbnN0ID0gJyMhL2Jpbi9zaFxuJworICAgICAgICAgICAgcG9zdGluc3QgKz0gZC5nZXRWYXIoJ21pbWVfcG9zdGluc3QnLCBUcnVlKQorICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorICAgICAgICAgICAgcG9zdHJtID0gZC5nZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHBvc3RybToKKyAgICAgICAgICAgICAgICBwb3N0cm0gPSAnIyEvYmluL3NoXG4nCisgICAgICAgICAgICBwb3N0cm0gKz0gZC5nZXRWYXIoJ21pbWVfcG9zdHJtJywgVHJ1ZSkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgcG9zdHJtKQorICAgICAgICAgICAgYmIubm90ZSgiYWRkaW5nIHNoYXJlZC1taW1lLWluZm8tZGF0YSBkZXBlbmRlbmN5IHRvICVzIiAlIHBrZykKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdSREVQRU5EU18nICsgcGtnLCAiIHNoYXJlZC1taW1lLWluZm8tZGF0YSIpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9taXJyb3JzLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9taXJyb3JzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk2YzA3MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL21pcnJvcnMuYmJjbGFzcwpAQCAtMCwwICsxLDY3IEBACitNSVJST1JTICs9ICJcCiske0RFQklBTl9NSVJST1J9CWh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLWFyY2hpdmUvMjAxMjAzMjhUMDkyNzUyWi9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLWFyY2hpdmUvMjAxMTAxMjdUMDg0MjU3Wi9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLWFyY2hpdmUvMjAwOTA4MDJUMDA0MTUzWi9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5kZS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLmF1LmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAuY2wuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5oci5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLmZpLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAuaGsuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5odS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLmllLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAuaXQuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5qcC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLm5vLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAucGwuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5yby5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLnNpLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAuZXMuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5zZS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLnRyLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtHTlVfTUlSUk9SfQlmdHA6Ly9taXJyb3JzLmtlcm5lbC5vcmcvZ251IFxuIFwKKyR7S0VSTkVMT1JHX01JUlJPUn0JaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1YiBcbiBcCitmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC8gICAgIGZ0cDovL2Z0cC5mcmFua2VuLmRlL3B1Yi9jcnlwdC9taXJyb3IvZnRwLmdudXBnLm9yZy9nY3J5cHQvIFxuIFwKK2Z0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0LyAgICAgZnRwOi8vZnRwLnN1cmZuZXQubmwvcHViL3NlY3VyaXR5L2dudXBnLyBcbiBcCitmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC8gICAgIGh0dHA6Ly9ndWx1cy5VU2hlcmJyb29rZS5jYS9wdWIvYXBwbC9HbnVQRy8gXG4gXAorZnRwOi8vZGFudGUuY3Rhbi5vcmcvdGV4LWFyY2hpdmUgZnRwOi8vZnRwLmZ1LWJlcmxpbi5kZS90ZXgvQ1RBTiBcbiBcCitmdHA6Ly9kYW50ZS5jdGFuLm9yZy90ZXgtYXJjaGl2ZSBodHRwOi8vc3Vuc2l0ZS5zdXQuYWMuanAvcHViL2FyY2hpdmVzL2N0YW4vIFxuIFwKK2Z0cDovL2RhbnRlLmN0YW4ub3JnL3RleC1hcmNoaXZlIGh0dHA6Ly9jdGFuLnVuc3cuZWR1LmF1LyBcbiBcCitmdHA6Ly9mdHAuZ251dGxzLm9yZy9nY3J5cHQvZ251dGxzIGZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0L2dudXRscy8gXG4gXAoraHR0cDovL2Z0cC5pbmZvLXppcC5vcmcvcHViL2luZm96aXAvc3JjLyBodHRwOi8vbWlycm9yLnN3aXRjaC5jaC9mdHAvbWlycm9yL2luZm96aXAvc3JjLyBcbiBcCitodHRwOi8vZnRwLmluZm8temlwLm9yZy9wdWIvaW5mb3ppcC9zcmMvIGZ0cDovL3N1bnNpdGUuaWNtLmVkdS5wbC9wdWIvdW5peC9hcmNoaXZpbmcvaW5mby16aXAvc3JjLyBcbiBcCitmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vZnRwLmNlcmlhcy5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L3N5c3V0aWxzL2xzb2YvIFxuIFwKK2Z0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9mdHAudGF1LmFjLmlsL3B1Yi91bml4L2FkbWluLyBcbiBcCitmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vZnRwLmNlcnQuZGZuLmRlL3B1Yi90b29scy9hZG1pbi9sc29mLyBcbiBcCitmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vZnRwLmZ1LWJlcmxpbi5kZS9wdWIvdW5peC90b29scy9sc29mLyBcbiBcCitmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vZnRwLmthaXpvLm9yZy9wdWIvbHNvZi8gXG4gXAorZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL2Z0cC50dS1kYXJtc3RhZHQuZGUvcHViL3N5c2FkbWluL2xzb2YvIFxuIFwKK2Z0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9mdHAudHV4Lm9yZy9wdWIvc2l0ZXMvdmljLmNjLnB1cmR1ZS5lZHUvdG9vbHMvdW5peC9sc29mLyBcbiBcCitmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vZ2QudHV3aWVuLmFjLmF0L3V0aWxzL2FkbWluLXRvb2xzL2xzb2YvIFxuIFwKK2Z0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9zdW5zaXRlLnVhbGJlcnRhLmNhL3B1Yi9NaXJyb3IvbHNvZi8gXG4gXAorZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL3RoZS53aXJldGFwcGVkLm5ldC9wdWIvc2VjdXJpdHkvaG9zdC1zZWN1cml0eS9sc29mLyBcbiBcCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvZGlzdCAgaHR0cDovL2FyY2hpdmUuYXBhY2hlLm9yZy9kaXN0IFxuIFwKK2h0dHA6Ly9kb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L3dhdGNoZG9nLyBodHRwOi8vZm9zc2llcy5vcmcvbGludXgvbWlzYy8gXG4gXAorJHtTQVZBTk5BSF9HTlVfTUlSUk9SfSBodHRwOi8vZG93bmxvYWQtbWlycm9yLnNhdmFubmFoLmdudS5vcmcvcmVsZWFzZXMgXG4gXAorJHtTQVZBTk5BSF9OT05HTlVfTUlSUk9SfSBodHRwOi8vZG93bmxvYWQtbWlycm9yLnNhdmFubmFoLm5vbmdudS5vcmcvcmVsZWFzZXMgXG4gXAorY3ZzOi8vLiovLiogICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorc3ZuOi8vLiovLiogICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorZ2l0Oi8vLiovLiogICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAoraGc6Ly8uKi8uKiAgICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorYnpyOi8vLiovLiogICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorcDQ6Ly8uKi8uKiAgICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorb3NjOi8vLiovLiogICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAoraHR0cHM/JDovLy4qLy4qIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorZnRwOi8vLiovLiogICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorY3ZzOi8vLiovLiogICAgIGh0dHA6Ly9zb3VyY2VzLm9wZW5lbWJlZGRlZC5vcmcvIFxuIFwKK3N2bjovLy4qLy4qICAgICBodHRwOi8vc291cmNlcy5vcGVuZW1iZWRkZWQub3JnLyBcbiBcCitnaXQ6Ly8uKi8uKiAgICAgaHR0cDovL3NvdXJjZXMub3BlbmVtYmVkZGVkLm9yZy8gXG4gXAoraGc6Ly8uKi8uKiAgICAgIGh0dHA6Ly9zb3VyY2VzLm9wZW5lbWJlZGRlZC5vcmcvIFxuIFwKK2J6cjovLy4qLy4qICAgICBodHRwOi8vc291cmNlcy5vcGVuZW1iZWRkZWQub3JnLyBcbiBcCitwNDovLy4qLy4qICAgICAgaHR0cDovL3NvdXJjZXMub3BlbmVtYmVkZGVkLm9yZy8gXG4gXAorb3NjOi8vLiovLiogICAgIGh0dHA6Ly9zb3VyY2VzLm9wZW5lbWJlZGRlZC5vcmcvIFxuIFwKK2h0dHBzPyQ6Ly8uKi8uKiBodHRwOi8vc291cmNlcy5vcGVuZW1iZWRkZWQub3JnLyBcbiBcCitmdHA6Ly8uKi8uKiAgICAgaHR0cDovL3NvdXJjZXMub3BlbmVtYmVkZGVkLm9yZy8gXG4gXAorJHtDUEFOX01JUlJPUn0gIGh0dHA6Ly9jcGFuLm1ldGFjcGFuLm9yZy8gXG4gXAorJHtDUEFOX01JUlJPUn0gIGh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi8gXG4gXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbW9kdWxlLWJhc2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL21vZHVsZS1iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJlMjZjNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL21vZHVsZS1iYXNlLmJiY2xhc3MKQEAgLTAsMCArMSwyNyBAQAoraW5oZXJpdCBrZXJuZWwtYXJjaAorCisjIFRoaXMgaXMgaW5zdGVhZCBvZiBERVBFTkRTID0gInZpcnR1YWwva2VybmVsIgorZG9fY29uZmlndXJlW2RlcGVuZHNdICs9ICJ2aXJ0dWFsL2tlcm5lbDpkb19zaGFyZWRfd29ya2RpciIKKworZXhwb3J0IE9TID0gIiR7VEFSR0VUX09TfSIKK2V4cG9ydCBDUk9TU19DT01QSUxFID0gIiR7VEFSR0VUX1BSRUZJWH0iCisKKyMgVGhpcyBwb2ludHMgdG8gdGhlIGJ1aWxkIGFydGVmYWN0cyBmcm9tIHRoZSBtYWluIGtlcm5lbCBidWlsZAorIyBzdWNoIGFzIC5jb25maWcgYW5kIFN5c3RlbS5tYXAKKyMgQ29uZnVzaW5nbHkgaXQgaXMgbm90IHRoZSBtb2R1bGUgYnVpbGQgb3V0cHV0ICh3aGljaCBpcyAke0J9KSBidXQKKyMgd2UgZGlkbid0IHBpY2sgdGhlIG5hbWUuCitleHBvcnQgS0JVSUxEX09VVFBVVCA9ICIke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfSIKKworZXhwb3J0IEtFUk5FTF9WRVJTSU9OID0gIiR7QGJhc2VfcmVhZF9maWxlKCcke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfS9rZXJuZWwtYWJpdmVyc2lvbicpfSIKK0tFUk5FTF9PQkpFQ1RfU1VGRklYID0gIi5rbyIKKworIyBrZXJuZWwgbW9kdWxlcyBhcmUgZ2VuZXJhbGx5IG1hY2hpbmUgc3BlY2lmaWMKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKKyMgRnVuY3Rpb24gdG8gZW5zdXJlIHRoZSBrZXJuZWwgc2NyaXB0cyBhcmUgY3JlYXRlZC4gRXhwZWN0ZWQgdG8KKyMgYmUgY2FsbGVkIGJlZm9yZSBkb19jb21waWxlLiBTZWUgbW9kdWxlLmJiY2xhc3MgZm9yIGFuIGV4bWFwbGUuCitkb19tYWtlX3NjcmlwdHMoKSB7CisJdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MgCisJbWFrZSBDQz0iJHtLRVJORUxfQ0N9IiBMRD0iJHtLRVJORUxfTER9IiBBUj0iJHtLRVJORUxfQVJ9IiBcCisJICAgICAgICAgICAtQyAke1NUQUdJTkdfS0VSTkVMX0RJUn0gTz0ke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfSBzY3JpcHRzCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tb2R1bGUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL21vZHVsZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NTJjMGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tb2R1bGUuYmJjbGFzcwpAQCAtMCwwICsxLDMyIEBACitpbmhlcml0IG1vZHVsZS1iYXNlIGtlcm5lbC1tb2R1bGUtc3BsaXQKKworYWRkdGFzayBtYWtlX3NjcmlwdHMgYWZ0ZXIgZG9fcGF0Y2ggYmVmb3JlIGRvX2NvbXBpbGUKK2RvX21ha2Vfc2NyaXB0c1tsb2NrZmlsZXNdID0gIiR7VE1QRElSfS9rZXJuZWwtc2NyaXB0cy5sb2NrIgorZG9fbWFrZV9zY3JpcHRzW2RlcGVuZHNdICs9ICJ2aXJ0dWFsL2tlcm5lbDpkb19zaGFyZWRfd29ya2RpciIKKworRVhUUkFfT0VNQUtFICs9ICJLRVJORUxfU1JDPSR7U1RBR0lOR19LRVJORUxfRElSfSIKKworbW9kdWxlX2RvX2NvbXBpbGUoKSB7CisJdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MKKwlvZV9ydW5tYWtlIEtFUk5FTF9QQVRIPSR7U1RBR0lOR19LRVJORUxfRElSfSAgIFwKKwkJICAgS0VSTkVMX1ZFUlNJT049JHtLRVJORUxfVkVSU0lPTn0gICAgXAorCQkgICBDQz0iJHtLRVJORUxfQ0N9IiBMRD0iJHtLRVJORUxfTER9IiBcCisJCSAgIEFSPSIke0tFUk5FTF9BUn0iIFwKKwkgICAgICAgICAgIE89JHtTVEFHSU5HX0tFUk5FTF9CVUlMRERJUn0gXAorCQkgICAke01BS0VfVEFSR0VUU30KK30KKworbW9kdWxlX2RvX2luc3RhbGwoKSB7CisJdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MKKwlvZV9ydW5tYWtlIERFUE1PRD1lY2hvIElOU1RBTExfTU9EX1BBVEg9IiR7RH0iIFwKKwkgICAgICAgICAgIENDPSIke0tFUk5FTF9DQ30iIExEPSIke0tFUk5FTF9MRH0iIFwKKwkgICAgICAgICAgIE89JHtTVEFHSU5HX0tFUk5FTF9CVUlMRERJUn0gXAorCSAgICAgICAgICAgbW9kdWxlc19pbnN0YWxsCit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29tcGlsZSBkb19pbnN0YWxsCisKKyMgYWRkIGFsbCBzcGxpdHRlZCBtb2R1bGVzIHRvIFBOIFJERVBFTkRTLCBQTiBjYW4gYmUgZW1wdHkgbm93CitLRVJORUxfTU9EVUxFU19NRVRBX1BBQ0tBR0UgPSAiJHtQTn0iCitGSUxFU18ke1BOfSA9ICIiCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbXVsdGlsaWIuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL211bHRpbGliLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY2MWQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL211bHRpbGliLmJiY2xhc3MKQEAgLTAsMCArMSwxNTEgQEAKK3B5dGhvbiBtdWx0aWxpYl92aXJ0Y2xhc3NfaGFuZGxlciAoKSB7CisgICAgY2xzID0gZS5kYXRhLmdldFZhcigiQkJFWFRFTkRDVVJSIiwgVHJ1ZSkKKyAgICB2YXJpYW50ID0gZS5kYXRhLmdldFZhcigiQkJFWFRFTkRWQVJJQU5UIiwgVHJ1ZSkKKyAgICBpZiBjbHMgIT0gIm11bHRpbGliIiBvciBub3QgdmFyaWFudDoKKyAgICAgICAgcmV0dXJuCisKKyAgICBlLmRhdGEuc2V0VmFyKCdTVEFHSU5HX0tFUk5FTF9ESVInLCBlLmRhdGEuZ2V0VmFyKCdTVEFHSU5HX0tFUk5FTF9ESVInLCBUcnVlKSkKKworICAgICMgVGhlcmUgc2hvdWxkIG9ubHkgYmUgb25lIGtlcm5lbCBpbiBtdWx0aWxpYiBjb25maWdzCisgICAgIyBXZSBhbHNvIHNraXAgbXVsdGlsaWIgc2V0dXAgZm9yIG1vZHVsZSBwYWNrYWdlcy4KKyAgICBwcm92aWRlcyA9IChlLmRhdGEuZ2V0VmFyKCJQUk9WSURFUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgaWYgInZpcnR1YWwva2VybmVsIiBpbiBwcm92aWRlcyBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdtb2R1bGUtYmFzZScsIGUuZGF0YSk6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJXZSBzaG91bGRuJ3QgaGF2ZSBtdWx0aWxpYiB2YXJpYW50cyBmb3IgdGhlIGtlcm5lbCIpCisKKyAgICBzYXZlX3Zhcl9uYW1lPWUuZGF0YS5nZXRWYXIoIk1VTFRJTElCX1NBVkVfVkFSTkFNRSIsIFRydWUpIG9yICIiCisgICAgZm9yIG5hbWUgaW4gc2F2ZV92YXJfbmFtZS5zcGxpdCgpOgorICAgICAgICB2YWw9ZS5kYXRhLmdldFZhcihuYW1lLCBUcnVlKQorICAgICAgICBpZiB2YWw6CisgICAgICAgICAgICBlLmRhdGEuc2V0VmFyKG5hbWUgKyAiX01VTFRJTElCX09SSUdJTkFMIiwgdmFsKQorCisgICAgb3ZlcnJpZGVzID0gZS5kYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpCisgICAgcG4gPSBlLmRhdGEuZ2V0VmFyKCJQTiIsIEZhbHNlKQorICAgIG92ZXJyaWRlcyA9IG92ZXJyaWRlcy5yZXBsYWNlKCJwbi0ke1BOfSIsICJwbi0ke1BOfTpwbi0iICsgcG4pCisgICAgZS5kYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgb3ZlcnJpZGVzKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnaW1hZ2UnLCBlLmRhdGEpOgorICAgICAgICBlLmRhdGEuc2V0VmFyKCJNTFBSRUZJWCIsIHZhcmlhbnQgKyAiLSIpCisgICAgICAgIGUuZGF0YS5zZXRWYXIoIlBOIiwgdmFyaWFudCArICItIiArIGUuZGF0YS5nZXRWYXIoIlBOIiwgRmFsc2UpKQorICAgICAgICB0YXJnZXRfdmVuZG9yID0gZS5kYXRhLmdldFZhcigiVEFSR0VUX1ZFTkRPUl8iICsgInZpcnRjbGFzcy1tdWx0aWxpYi0iICsgdmFyaWFudCwgRmFsc2UpCisgICAgICAgIGlmIHRhcmdldF92ZW5kb3I6CisgICAgICAgICAgICBlLmRhdGEuc2V0VmFyKCJUQVJHRVRfVkVORE9SIiwgdGFyZ2V0X3ZlbmRvcikKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcy1jYW5hZGlhbicsIGUuZGF0YSk6CisgICAgICAgIGUuZGF0YS5zZXRWYXIoIk1MUFJFRklYIiwgdmFyaWFudCArICItIikKKyAgICAgICAgb3ZlcnJpZGUgPSAiOnZpcnRjbGFzcy1tdWx0aWxpYi0iICsgdmFyaWFudAorICAgICAgICBlLmRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBlLmRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyBvdmVycmlkZSkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShlLmRhdGEpCisgICAgICAgIHJldHVybgorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZS5kYXRhKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIldlIGNhbid0IGV4dGVuZCBuYXRpdmUgcmVjaXBlcyIpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBlLmRhdGEpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3Nzc2RrJywgZS5kYXRhKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIldlIGNhbid0IGV4dGVuZCBuYXRpdmVzZGsgcmVjaXBlcyIpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdhbGxhcmNoJywgZS5kYXRhKSBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3BhY2thZ2Vncm91cCcsIGUuZGF0YSk6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJEb24ndCBleHRlbmQgYWxsYXJjaCByZWNpcGVzIHdoaWNoIGFyZSBub3QgcGFja2FnZWdyb3VwcyIpCisKKworICAgICMgRXhwYW5kIHRoaXMgc2luY2UgdGhpcyB3b24ndCB3b3JrIGNvcnJlY3RseSBvbmNlIHdlIHNldCBhIG11bHRpbGliIGludG8gcGxhY2UKKyAgICBlLmRhdGEuc2V0VmFyKCJBTExfTVVMVElMSUJfUEFDS0FHRV9BUkNIUyIsIGUuZGF0YS5nZXRWYXIoIkFMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTIiwgVHJ1ZSkpCisgCisgICAgb3ZlcnJpZGUgPSAiOnZpcnRjbGFzcy1tdWx0aWxpYi0iICsgdmFyaWFudAorCisgICAgZS5kYXRhLnNldFZhcigiTUxQUkVGSVgiLCB2YXJpYW50ICsgIi0iKQorICAgIGUuZGF0YS5zZXRWYXIoIlBOIiwgdmFyaWFudCArICItIiArIGUuZGF0YS5nZXRWYXIoIlBOIiwgRmFsc2UpKQorICAgIGUuZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIGUuZGF0YS5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArIG92ZXJyaWRlKQorCisgICAgIyBFeHBhbmQgdGhlIFdISVRFTElTVHMgd2l0aCBtdWx0aWxpYiBwcmVmaXgKKyAgICBmb3Igd2hpdGVsaXN0IGluIFsiSE9TVFRPT0xTX1dISVRFTElTVF9HUEwtMy4wIiwgIldISVRFTElTVF9HUEwtMy4wIiwgIkxHUEx2Ml9XSElURUxJU1RfR1BMLTMuMCJdOgorICAgICAgICBwa2dzID0gZS5kYXRhLmdldFZhcih3aGl0ZWxpc3QsIFRydWUpCisgICAgICAgIGZvciBwa2cgaW4gcGtncy5zcGxpdCgpOgorICAgICAgICAgICAgcGtncyArPSAiICIgKyB2YXJpYW50ICsgIi0iICsgcGtnCisgICAgICAgIGUuZGF0YS5zZXRWYXIod2hpdGVsaXN0LCBwa2dzKQorCisgICAgIyBERUZBVUxUVFVORSBjYW4gY2hhbmdlIFRBUkdFVF9BUkNIIG92ZXJyaWRlIHNvIGV4cGFuZCB0aGlzIG5vdyBiZWZvcmUgdXBkYXRlX2RhdGEKKyAgICBuZXd0dW5lID0gZS5kYXRhLmdldFZhcigiREVGQVVMVFRVTkVfIiArICJ2aXJ0Y2xhc3MtbXVsdGlsaWItIiArIHZhcmlhbnQsIEZhbHNlKQorICAgIGlmIG5ld3R1bmU6CisgICAgICAgIGUuZGF0YS5zZXRWYXIoIkRFRkFVTFRUVU5FIiwgbmV3dHVuZSkKKyAgICAgICAgZS5kYXRhLnNldFZhcignREVGQVVMVFRVTkVfTUxfJXMnICUgdmFyaWFudCwgbmV3dHVuZSkKK30KKworYWRkaGFuZGxlciBtdWx0aWxpYl92aXJ0Y2xhc3NfaGFuZGxlcgorbXVsdGlsaWJfdmlydGNsYXNzX2hhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5SZWNpcGVQcmVGaW5hbGlzZSIKKworU1RBR0lOR0NDX3ByZXBlbmQgPSAiJHtCQkVYVEVORFZBUklBTlR9LSIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICB2YXJpYW50ID0gZC5nZXRWYXIoIkJCRVhURU5EVkFSSUFOVCIsIFRydWUpCisKKyAgICBpbXBvcnQgb2UuY2xhc3NleHRlbmQKKworICAgIGNsc2V4dGVuZCA9IG9lLmNsYXNzZXh0ZW5kLkNsYXNzRXh0ZW5kZXIodmFyaWFudCwgZCkKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2ltYWdlJywgZCk6CisgICAgICAgIGNsc2V4dGVuZC5tYXBfZGVwZW5kc192YXJpYWJsZSgiUEFDS0FHRV9JTlNUQUxMIikKKyAgICAgICAgY2xzZXh0ZW5kLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJMSU5HVUFTX0lOU1RBTEwiKQorICAgICAgICBjbHNleHRlbmQubWFwX2RlcGVuZHNfdmFyaWFibGUoIlJERVBFTkRTIikKKyAgICAgICAgcGluc3RhbGwgPSBkLmdldFZhcigiTElOR1VBU19JTlNUQUxMIiwgVHJ1ZSkgKyAiICIgKyBkLmdldFZhcigiUEFDS0FHRV9JTlNUQUxMIiwgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoIlBBQ0tBR0VfSU5TVEFMTCIsIHBpbnN0YWxsKQorICAgICAgICBkLnNldFZhcigiTElOR1VBU19JTlNUQUxMIiwgIiIpCisgICAgICAgICMgRklYTUUsIHdlIG5lZWQgdG8gbWFwIHRoaXMgdG8gc29tZXRoaW5nLCBub3QgZGVsZXRlIGl0IQorICAgICAgICBkLnNldFZhcigiUEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZIiwgIiIpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdwb3B1bGF0ZV9zZGtfYmFzZScsIGQpOgorICAgICAgICBjbHNleHRlbmQubWFwX2RlcGVuZHNfdmFyaWFibGUoIlRPT0xDSEFJTl9UQVJHRVRfVEFTSyIpCisgICAgICAgIGNsc2V4dGVuZC5tYXBfZGVwZW5kc192YXJpYWJsZSgiVE9PTENIQUlOX1RBUkdFVF9UQVNLX0FUVEVNUFRPTkxZIikKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2ltYWdlJywgZCk6CisgICAgICAgIHJldHVybgorCisgICAgY2xzZXh0ZW5kLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJERVBFTkRTIikKKyAgICBjbHNleHRlbmQubWFwX3ZhcmlhYmxlKCJQUk9WSURFUyIpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcy1jYW5hZGlhbicsIGQpOgorICAgICAgICByZXR1cm4KKworICAgIGNsc2V4dGVuZC5yZW5hbWVfcGFja2FnZXMoKQorICAgIGNsc2V4dGVuZC5yZW5hbWVfcGFja2FnZV92YXJpYWJsZXMoKGQuZ2V0VmFyKCJQQUNLQUdFVkFSUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorCisgICAgY2xzZXh0ZW5kLm1hcF9wYWNrYWdldmFycygpCisgICAgY2xzZXh0ZW5kLm1hcF9yZWdleHBfdmFyaWFibGUoIlBBQ0tBR0VTX0RZTkFNSUMiKQorICAgIGNsc2V4dGVuZC5tYXBfdmFyaWFibGUoIlBBQ0tBR0VfSU5TVEFMTCIpCisgICAgY2xzZXh0ZW5kLm1hcF92YXJpYWJsZSgiSU5JVFNDUklQVF9QQUNLQUdFUyIpCisgICAgY2xzZXh0ZW5kLm1hcF92YXJpYWJsZSgiVVNFUkFERF9QQUNLQUdFUyIpCisgICAgY2xzZXh0ZW5kLm1hcF92YXJpYWJsZSgiU1lTVEVNRF9QQUNLQUdFUyIpCit9CisKK1BBQ0tBR0VGVU5DU19hcHBlbmQgPSAiIGRvX3BhY2thZ2VfcWFfbXVsdGlsaWIiCisKK3B5dGhvbiBkb19wYWNrYWdlX3FhX211bHRpbGliKCkgeworCisgICAgZGVmIGNoZWNrX21scHJlZml4KHBrZywgdmFyLCBtbHByZWZpeCk6CisgICAgICAgIHZhbHVlcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhkLmdldFZhcignJXNfJXMnICUgKHZhciwgcGtnKSwgVHJ1ZSkgb3IgZC5nZXRWYXIodmFyLCBUcnVlKSBvciAiIikKKyAgICAgICAgY2FuZGlkYXRlcyA9IFtdCisgICAgICAgIGZvciBpIGluIHZhbHVlczoKKyAgICAgICAgICAgIGlmIGkuc3RhcnRzd2l0aCgndmlydHVhbC8nKToKKyAgICAgICAgICAgICAgICBpID0gaVtsZW4oJ3ZpcnR1YWwvJyk6XQorICAgICAgICAgICAgaWYgKG5vdCBpLnN0YXJ0c3dpdGgoJ2tlcm5lbC1tb2R1bGUnKSkgYW5kIChub3QgaS5zdGFydHN3aXRoKG1scHJlZml4KSkgYW5kIFwKKyAgICAgICAgICAgICAgICAobm90ICdjcm9zcy1jYW5hZGlhbicgaW4gaSkgYW5kIChub3QgaS5zdGFydHN3aXRoKCJuYXRpdmVzZGstIikpIGFuZCBcCisgICAgICAgICAgICAgICAgKG5vdCBpLnN0YXJ0c3dpdGgoInJ0bGQiKSkgYW5kIChub3QgaS5zdGFydHN3aXRoKCdrZXJuZWwtdm1saW51eCcpKToKKyAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChpKQorICAgICAgICBpZiBsZW4oY2FuZGlkYXRlcykgPiAwOgorICAgICAgICAgICAgbXNnID0gIiVzIHBhY2thZ2UgJXMgLSBzdXNwaWNpb3VzIHZhbHVlcyAnJXMnIGluICVzIiBcCisgICAgICAgICAgICAgICAgICAgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIHBrZywgJyAnLmpvaW4oY2FuZGlkYXRlcyksIHZhcikKKyAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJtdWx0aWxpYiIsIG1zZywgZCkKKworICAgIG1sID0gZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkKKyAgICBpZiBub3QgbWw6CisgICAgICAgIHJldHVybgorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgY2hlY2tfbWxwcmVmaXgocGtnLCAnUkRFUEVORFMnLCBtbCkKKyAgICAgICAgY2hlY2tfbWxwcmVmaXgocGtnLCAnUlBST1ZJREVTJywgbWwpCisgICAgICAgIGNoZWNrX21scHJlZml4KHBrZywgJ1JSRUNPTU1FTkRTJywgbWwpCisgICAgICAgIGNoZWNrX21scHJlZml4KHBrZywgJ1JTVUdHRVNUUycsIG1sKQorICAgICAgICBjaGVja19tbHByZWZpeChwa2csICdSUkVQTEFDRVMnLCBtbCkKKyAgICAgICAgY2hlY2tfbWxwcmVmaXgocGtnLCAnUkNPTkZMSUNUUycsIG1sKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbXVsdGlsaWJfZ2xvYmFsLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tdWx0aWxpYl9nbG9iYWwuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTJjZmI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbXVsdGlsaWJfZ2xvYmFsLmJiY2xhc3MKQEAgLTAsMCArMSwxNjIgQEAKK2RlZiBwcmVmZXJyZWRfbWxfdXBkYXRlcyhkKToKKyAgICAjIElmIGFueSBQUkVGRVJSRURfUFJPVklERVIgb3IgUFJFRkVSUkVEX1ZFUlNJT04gYXJlIHNldCwKKyAgICAjIHdlIG5lZWQgdG8gbWlycm9yIHRoZXNlIHZhcmlhYmxlcyBpbiB0aGUgbXVsdGlsaWIgY2FzZTsKKyAgICBtdWx0aWxpYnMgPSBkLmdldFZhcignTVVMVElMSUJTJywgVHJ1ZSkgb3IgIiIKKyAgICBpZiBub3QgbXVsdGlsaWJzOgorICAgICAgICByZXR1cm4KKworICAgIHByZWZpeGVzID0gW10KKyAgICBmb3IgZXh0IGluIG11bHRpbGlicy5zcGxpdCgpOgorICAgICAgICBlZXh0ID0gZXh0LnNwbGl0KCc6JykKKyAgICAgICAgaWYgbGVuKGVleHQpID4gMSBhbmQgZWV4dFswXSA9PSAnbXVsdGlsaWInOgorICAgICAgICAgICAgcHJlZml4ZXMuYXBwZW5kKGVleHRbMV0pCisKKyAgICB2ZXJzaW9ucyA9IFtdCisgICAgcHJvdmlkZXJzID0gW10KKyAgICBmb3IgdiBpbiBkLmtleXMoKToKKyAgICAgICAgaWYgdi5zdGFydHN3aXRoKCJQUkVGRVJSRURfVkVSU0lPTl8iKToKKyAgICAgICAgICAgIHZlcnNpb25zLmFwcGVuZCh2KQorICAgICAgICBpZiB2LnN0YXJ0c3dpdGgoIlBSRUZFUlJFRF9QUk9WSURFUl8iKToKKyAgICAgICAgICAgIHByb3ZpZGVycy5hcHBlbmQodikKKworICAgIGZvciB2IGluIHZlcnNpb25zOgorICAgICAgICB2YWwgPSBkLmdldFZhcih2LCBGYWxzZSkKKyAgICAgICAgcGtnID0gdi5yZXBsYWNlKCJQUkVGRVJSRURfVkVSU0lPTl8iLCAiIikKKyAgICAgICAgaWYgcGtnLmVuZHN3aXRoKCItbmF0aXZlIikgb3IgIi1jcm9zc3Nkay0iIGluIHBrZyBvciBwa2cuc3RhcnRzd2l0aCgoIm5hdGl2ZXNkay0iLCAidmlydHVhbC9uYXRpdmVzZGstIikpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgJy1jcm9zcy0nIGluIHBrZyBhbmQgJyR7JyBpbiBwa2c6CisgICAgICAgICAgICBmb3IgcCBpbiBwcmVmaXhlczoKKyAgICAgICAgICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgICAgICAgICBvdmVycmlkZSA9ICI6dmlydGNsYXNzLW11bHRpbGliLSIgKyBwCisgICAgICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgbG9jYWxkYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgb3ZlcnJpZGUpCisgICAgICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgICAgICAgICAgaWYgIi1jYW5hZGlhbi0iIGluIHBrZzoKKyAgICAgICAgICAgICAgICAgICAgbmV3bmFtZSA9IGxvY2FsZGF0YS5leHBhbmQodikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBuZXduYW1lID0gbG9jYWxkYXRhLmV4cGFuZCh2KS5yZXBsYWNlKCJQUkVGRVJSRURfVkVSU0lPTl8iLCAiUFJFRkVSUkVEX1ZFUlNJT05fIiArIHAgKyAnLScpCisgICAgICAgICAgICAgICAgaWYgbmV3bmFtZSAhPSB2OgorICAgICAgICAgICAgICAgICAgICBuZXd2YWwgPSBsb2NhbGRhdGEuZXhwYW5kKHZhbCkKKyAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIobmV3bmFtZSwgbmV3dmFsKQorICAgICAgICAgICAgIyBBdm9pZCBmdXR1cmUgdmFyaWFibGUga2V5IGV4cGFuc2lvbgorICAgICAgICAgICAgdmV4cCA9IGQuZXhwYW5kKHYpCisgICAgICAgICAgICBpZiB2ICE9IHZleHAgYW5kIGQuZ2V0VmFyKHYsIEZhbHNlKToKKyAgICAgICAgICAgICAgICBkLnJlbmFtZVZhcih2LCB2ZXhwKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZm9yIHAgaW4gcHJlZml4ZXM6CisgICAgICAgICAgICBuZXduYW1lID0gIlBSRUZFUlJFRF9WRVJTSU9OXyIgKyBwICsgIi0iICsgcGtnCisgICAgICAgICAgICBpZiBub3QgZC5nZXRWYXIobmV3bmFtZSwgRmFsc2UpOgorICAgICAgICAgICAgICAgIGQuc2V0VmFyKG5ld25hbWUsIHZhbCkKKworICAgIGZvciBwcm92IGluIHByb3ZpZGVyczoKKyAgICAgICAgdmFsID0gZC5nZXRWYXIocHJvdiwgRmFsc2UpCisgICAgICAgIHBrZyA9IHByb3YucmVwbGFjZSgiUFJFRkVSUkVEX1BST1ZJREVSXyIsICIiKQorICAgICAgICBpZiBwa2cuZW5kc3dpdGgoIi1uYXRpdmUiKSBvciAiLWNyb3Nzc2RrLSIgaW4gcGtnIG9yIHBrZy5zdGFydHN3aXRoKCgibmF0aXZlc2RrLSIsICJ2aXJ0dWFsL25hdGl2ZXNkay0iKSk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiAnY3Jvc3MtY2FuYWRpYW4nIGluIHBrZzoKKyAgICAgICAgICAgIGZvciBwIGluIHByZWZpeGVzOgorICAgICAgICAgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICAgICAgICAgIG92ZXJyaWRlID0gIjp2aXJ0Y2xhc3MtbXVsdGlsaWItIiArIHAKKyAgICAgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBsb2NhbGRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyBvdmVycmlkZSkKKyAgICAgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgICAgICAgICBuZXduYW1lID0gbG9jYWxkYXRhLmV4cGFuZChwcm92KQorICAgICAgICAgICAgICAgIGlmIG5ld25hbWUgIT0gcHJvdjoKKyAgICAgICAgICAgICAgICAgICAgbmV3dmFsID0gbG9jYWxkYXRhLmV4cGFuZCh2YWwpCisgICAgICAgICAgICAgICAgICAgIGQuc2V0VmFyKG5ld25hbWUsIG5ld3ZhbCkKKyAgICAgICAgICAgICMgQXZvaWQgZnV0dXJlIHZhcmlhYmxlIGtleSBleHBhbnNpb24KKyAgICAgICAgICAgIHByb3ZleHAgPSBkLmV4cGFuZChwcm92KQorICAgICAgICAgICAgaWYgcHJvdiAhPSBwcm92ZXhwIGFuZCBkLmdldFZhcihwcm92LCBGYWxzZSk6CisgICAgICAgICAgICAgICAgZC5yZW5hbWVWYXIocHJvdiwgcHJvdmV4cCkKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHZpcnQgPSAiIgorICAgICAgICBpZiBwa2cuc3RhcnRzd2l0aCgidmlydHVhbC8iKToKKyAgICAgICAgICAgIHBrZyA9IHBrZy5yZXBsYWNlKCJ2aXJ0dWFsLyIsICIiKQorICAgICAgICAgICAgdmlydCA9ICJ2aXJ0dWFsLyIKKyAgICAgICAgZm9yIHAgaW4gcHJlZml4ZXM6CisgICAgICAgICAgICBpZiBwa2cgIT0gImtlcm5lbCI6CisgICAgICAgICAgICAgICAgbmV3dmFsID0gcCArICItIiArIHZhbAorCisgICAgICAgICAgICAjIGltcGxlbWVudCB2YXJpYWJsZSBrZXlzCisgICAgICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgICAgIG92ZXJyaWRlID0gIjp2aXJ0Y2xhc3MtbXVsdGlsaWItIiArIHAKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIGxvY2FsZGF0YS5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArIG92ZXJyaWRlKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgICAgICBuZXduYW1lID0gbG9jYWxkYXRhLmV4cGFuZChwcm92KQorICAgICAgICAgICAgaWYgbmV3bmFtZSAhPSBwcm92IGFuZCBub3QgZC5nZXRWYXIobmV3bmFtZSwgRmFsc2UpOgorICAgICAgICAgICAgICAgIGQuc2V0VmFyKG5ld25hbWUsIGxvY2FsZGF0YS5leHBhbmQobmV3dmFsKSkKKworICAgICAgICAgICAgIyBpbXBsZW1lbnQgYWx0ZXJuYXRpdmUgbXVsdGlsaWIgbmFtZQorICAgICAgICAgICAgbmV3bmFtZSA9IGxvY2FsZGF0YS5leHBhbmQoIlBSRUZFUlJFRF9QUk9WSURFUl8iICsgdmlydCArIHAgKyAiLSIgKyBwa2cpCisgICAgICAgICAgICBpZiBub3QgZC5nZXRWYXIobmV3bmFtZSwgRmFsc2UpOgorICAgICAgICAgICAgICAgIGQuc2V0VmFyKG5ld25hbWUsIGxvY2FsZGF0YS5leHBhbmQobmV3dmFsKSkKKyAgICAgICAgIyBBdm9pZCBmdXR1cmUgdmFyaWFibGUga2V5IGV4cGFuc2lvbgorICAgICAgICBwcm92ZXhwID0gZC5leHBhbmQocHJvdikKKyAgICAgICAgaWYgcHJvdiAhPSBwcm92ZXhwIGFuZCBkLmdldFZhcihwcm92LCBGYWxzZSk6CisgICAgICAgICAgICBkLnJlbmFtZVZhcihwcm92LCBwcm92ZXhwKQorCisKKyAgICBtcCA9IChkLmdldFZhcigiTVVMVElfUFJPVklERVJfV0hJVEVMSVNUIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBleHRyYW1wID0gW10KKyAgICBmb3IgcCBpbiBtcDoKKyAgICAgICAgaWYgcC5lbmRzd2l0aCgiLW5hdGl2ZSIpIG9yICItY3Jvc3NzZGstIiBpbiBwIG9yIHAuc3RhcnRzd2l0aCgoIm5hdGl2ZXNkay0iLCAidmlydHVhbC9uYXRpdmVzZGstIikpIG9yICdjcm9zcy1jYW5hZGlhbicgaW4gcDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHZpcnQgPSAiIgorICAgICAgICBpZiBwLnN0YXJ0c3dpdGgoInZpcnR1YWwvIik6CisgICAgICAgICAgICBwID0gcC5yZXBsYWNlKCJ2aXJ0dWFsLyIsICIiKQorICAgICAgICAgICAgdmlydCA9ICJ2aXJ0dWFsLyIKKyAgICAgICAgZm9yIHByZWYgaW4gcHJlZml4ZXM6CisgICAgICAgICAgICBleHRyYW1wLmFwcGVuZCh2aXJ0ICsgcHJlZiArICItIiArIHApCisgICAgZC5zZXRWYXIoIk1VTFRJX1BST1ZJREVSX1dISVRFTElTVCIsICIgIi5qb2luKG1wICsgZXh0cmFtcCkpCisKK3B5dGhvbiBtdWx0aWxpYl92aXJ0Y2xhc3NfaGFuZGxlcl92ZW5kb3IgKCkgeworICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuQ29uZmlnUGFyc2VkKToKKyAgICAgICAgZm9yIHYgaW4gZS5kYXRhLmdldFZhcigiTVVMVElMSUJfVkFSSUFOVFMiLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgZS5kYXRhLmdldFZhcigiVEFSR0VUX1ZFTkRPUl92aXJ0Y2xhc3MtbXVsdGlsaWItIiArIHYsIEZhbHNlKSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGUuZGF0YS5zZXRWYXIoIlRBUkdFVF9WRU5ET1JfdmlydGNsYXNzLW11bHRpbGliLSIgKyB2LCBlLmRhdGEuZ2V0VmFyKCJUQVJHRVRfVkVORE9SIiwgRmFsc2UpICsgIm1sIiArIHYpCisgICAgICAgIHByZWZlcnJlZF9tbF91cGRhdGVzKGUuZGF0YSkKK30KK2FkZGhhbmRsZXIgbXVsdGlsaWJfdmlydGNsYXNzX2hhbmRsZXJfdmVuZG9yCittdWx0aWxpYl92aXJ0Y2xhc3NfaGFuZGxlcl92ZW5kb3JbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5Db25maWdQYXJzZWQiCisKK3B5dGhvbiBtdWx0aWxpYl92aXJ0Y2xhc3NfaGFuZGxlcl9nbG9iYWwgKCkgeworICAgIGlmIG5vdCBlLmRhdGE6CisgICAgICAgIHJldHVybgorCisgICAgdmFyaWFudCA9IGUuZGF0YS5nZXRWYXIoIkJCRVhURU5EVkFSSUFOVCIsIFRydWUpCisKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LlJlY2lwZVBhcnNlZCkgYW5kIG5vdCB2YXJpYW50OgorICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwnLCBlLmRhdGEpIG9yIFwKKyAgICAgICAgICAgIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ21vZHVsZS1iYXNlJywgZS5kYXRhKSBvciBcCisgICAgICAgICAgICAoYmIuZGF0YS5pbmhlcml0c19jbGFzcygnYWxsYXJjaCcsIGUuZGF0YSkgYW5kXAorICAgICAgICAgICAgIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdwYWNrYWdlZ3JvdXAnLCBlLmRhdGEpKToKKyAgICAgICAgICAgIHZhcmlhbnRzID0gKGUuZGF0YS5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgICAgICAgICAgaW1wb3J0IG9lLmNsYXNzZXh0ZW5kCisgICAgICAgICAgICBjbHNleHRlbmRzID0gW10KKyAgICAgICAgICAgIGZvciB2YXJpYW50IGluIHZhcmlhbnRzOgorICAgICAgICAgICAgICAgIGNsc2V4dGVuZHMuYXBwZW5kKG9lLmNsYXNzZXh0ZW5kLkNsYXNzRXh0ZW5kZXIodmFyaWFudCwgZS5kYXRhKSkKKworICAgICAgICAgICAgIyBQcm9jZXNzIFBST1ZJREVTCisgICAgICAgICAgICBvcmlncHJvdnMgPSBwcm92cyA9IGUuZGF0YS5nZXRWYXIoIlBST1ZJREVTIiwgVHJ1ZSkgb3IgIiIKKyAgICAgICAgICAgIGZvciBjbHNleHRlbmQgaW4gY2xzZXh0ZW5kczoKKyAgICAgICAgICAgICAgICBwcm92cyA9IHByb3ZzICsgIiAiICsgY2xzZXh0ZW5kLm1hcF92YXJpYWJsZSgiUFJPVklERVMiLCBzZXR2YXI9RmFsc2UpCisgICAgICAgICAgICBlLmRhdGEuc2V0VmFyKCJQUk9WSURFUyIsIHByb3ZzKQorCisgICAgICAgICAgICAjIFByb2Nlc3MgUlBST1ZJREVTCisgICAgICAgICAgICBvcmlncnByb3ZzID0gcnByb3ZzID0gZS5kYXRhLmdldFZhcigiUlBST1ZJREVTIiwgVHJ1ZSkgb3IgIiIKKyAgICAgICAgICAgIGZvciBjbHNleHRlbmQgaW4gY2xzZXh0ZW5kczoKKyAgICAgICAgICAgICAgICBycHJvdnMgPSBycHJvdnMgKyAiICIgKyBjbHNleHRlbmQubWFwX3ZhcmlhYmxlKCJSUFJPVklERVMiLCBzZXR2YXI9RmFsc2UpCisgICAgICAgICAgICBpZiBycHJvdnMuc3RyaXAoKToKKyAgICAgICAgICAgICAgICBlLmRhdGEuc2V0VmFyKCJSUFJPVklERVMiLCBycHJvdnMpCisKKwkgICAgIyBQcm9jZXNzIFJQUk9WSURFU18ke1BOfS4uLgorICAgICAgICAgICAgZm9yIHBrZyBpbiAoZS5kYXRhLmdldFZhcigiUEFDS0FHRVMiLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBvcmlncnByb3ZzID0gcnByb3ZzID0gZS5kYXRhLmdldFZhcigiUlBST1ZJREVTXyVzIiAlIHBrZywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgICAgICAgICBmb3IgY2xzZXh0ZW5kIGluIGNsc2V4dGVuZHM6CisgICAgICAgICAgICAgICAgICAgIHJwcm92cyA9IHJwcm92cyArICIgIiArIGNsc2V4dGVuZC5tYXBfdmFyaWFibGUoIlJQUk9WSURFU18lcyIgJSBwa2csIHNldHZhcj1GYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgcnByb3ZzID0gcnByb3ZzICsgIiAiICsgY2xzZXh0ZW5kLmV4dG5hbWUgKyAiLSIgKyBwa2cKKyAgICAgICAgICAgICAgICBlLmRhdGEuc2V0VmFyKCJSUFJPVklERVNfJXMiICUgcGtnLCBycHJvdnMpCit9CisKK2FkZGhhbmRsZXIgbXVsdGlsaWJfdmlydGNsYXNzX2hhbmRsZXJfZ2xvYmFsCittdWx0aWxpYl92aXJ0Y2xhc3NfaGFuZGxlcl9nbG9iYWxbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5SZWNpcGVQcmVGaW5hbGlzZSBiYi5ldmVudC5SZWNpcGVQYXJzZWQiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL211bHRpbGliX2hlYWRlci5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbXVsdGlsaWJfaGVhZGVyLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVlMGEyZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL211bHRpbGliX2hlYWRlci5iYmNsYXNzCkBAIC0wLDAgKzEsNTQgQEAKK2luaGVyaXQgc2l0ZWluZm8KKworIyBJZiBhcHBsaWNhYmxlIG9uIHRoZSBhcmNoaXRlY3R1cmUsIHRoaXMgcm91dGluZSB3aWxsIHJlbmFtZSB0aGUgaGVhZGVyIGFuZAorIyBhZGQgYSB1bmlxdWUgaWRlbnRpZmllciB0byB0aGUgbmFtZSBmb3IgdGhlIEFCSS9iaXRzaXplIHRoYXQgaXMgYmVpbmcgdXNlZC4KKyMgQSB3cmFwcGVyIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciB0aGUgYXJjaGl0ZWN0dXJlIHRoYXQga25vd3MgaG93IHRvIGNhbGwKKyMgYWxsIG9mIHRoZSBBQkkgdmFyaWFudHMgZm9yIHRoYXQgZ2l2ZW4gYXJjaGl0ZWN0dXJlLgorIworb2VfbXVsdGlsaWJfaGVhZGVyKCkgeworCisJY2FzZSAke0hPU1RfT1N9IGluCisJKi1tdXNsKikKKwkJcmV0dXJuCisJCTs7CisJKikKKwllc2FjCisgICAgICAgICMgV2UgdXNlCisgICAgICAgICMgRm9yIEFSTTogV2UgZG9uJ3Qgc3VwcG9ydCBtdWx0aWxpYiBidWlsZHMuCisgICAgICAgICMgRm9yIE1JUFM6ICJuMzIiIGlzIGEgc3BlY2lhbCBjYXNlLCB3aGljaCBuZWVkcyB0byBiZQorICAgICAgICAjIGRpc3RpbmN0IGZyb20gYm90aCA2NC1iaXQgYW5kIDMyLWJpdC4KKyAgICAgICAgY2FzZSAke1RBUkdFVF9BUkNIfSBpbgorICAgICAgICBhcm0qKSAgIHJldHVybgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgIG1pcHMqKSAgY2FzZSAiJHtNSVBTUEtHU0ZYX0FCSX0iIGluCisgICAgICAgICAgICAgICAgIi1uMzIiKQorICAgICAgICAgICAgICAgICAgICAgICBpZGVudD1uMzIgICAKKyAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAqKSAgICAgCisgICAgICAgICAgICAgICAgICAgICAgIGlkZW50PSR7U0lURUlORk9fQklUU30KKyAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgKikgICAgICBpZGVudD0ke1NJVEVJTkZPX0JJVFN9CisgICAgICAgIGVzYWMKKwlpZiBlY2hvICR7VEFSR0VUX0FSQ0h9IHwgZ3JlcCAtcSBhcm07IHRoZW4KKwkgICAgcmV0dXJuCisJZmkKKwlmb3IgZWFjaF9oZWFkZXIgaW4gIiRAIiA7IGRvCisJICAgaWYgWyAhIC1mICIke0R9LyR7aW5jbHVkZWRpcn0vJGVhY2hfaGVhZGVyIiBdOyB0aGVuCisJICAgICAgYmJlcnJvciAib2VfbXVsdGlsaWJfaGVhZGVyOiBVbmFibGUgdG8gZmluZCBoZWFkZXIgJGVhY2hfaGVhZGVyLiIKKwkgICAgICBjb250aW51ZQorCSAgIGZpCisJICAgc3RlbT0kKGVjaG8gJGVhY2hfaGVhZGVyIHwgc2VkICdzI1wuaCQjIycpCisJICAgIyBpZiBtaXBzNjQvbjMyIHNldCBpZGVudCB0byBuMzIKKwkgICBtdiAke0R9LyR7aW5jbHVkZWRpcn0vJGVhY2hfaGVhZGVyICR7RH0vJHtpbmNsdWRlZGlyfS8ke3N0ZW19LSR7aWRlbnR9LmgKKworCSAgIHNlZCAtZSAicyNFTlRFUl9IRUFERVJfRklMRU5BTUVfSEVSRSMke3N0ZW19I2ciICR7Q09SRUJBU0V9L3NjcmlwdHMvbXVsdGlsaWJfaGVhZGVyX3dyYXBwZXIuaCA+ICR7RH0vJHtpbmNsdWRlZGlyfS8kZWFjaF9oZWFkZXIKKwlkb25lCit9CisKKyMgRGVwZW5kZW5jaWVzIG9uIGFyY2ggdmFyaWFibGVzIGxpa2UgTUlQU1BLR1NGWF9BQkkgY2FuIGJlIHByb2JsZW1hdGljLgorIyBXZSBkb24ndCBuZWVkIG11bHRpbGliIGhlYWRlcnMgZm9yIG5hdGl2ZSBidWlsZHMgc28gYnJ1dGUgZm9yY2UgdGhpbmdzLgorb2VfbXVsdGlsaWJfaGVhZGVyX2NsYXNzLW5hdGl2ZSAoKSB7CisJcmV0dXJuCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9uYXRpdmUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL25hdGl2ZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYmNkNjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9uYXRpdmUuYmJjbGFzcwpAQCAtMCwwICsxLDE4MyBAQAorIyBXZSB3YW50IG5hdGl2ZSBwYWNrYWdlcyB0byBiZSByZWxvY2F0YWJsZQoraW5oZXJpdCByZWxvY2F0YWJsZQorCisjIE5hdGl2ZSBwYWNrYWdlcyBhcmUgYnVpbHQgaW5kaXJlY3RseSB2aWEgZGVwZW5kZW5jeSwKKyMgbm8gbmVlZCBmb3IgdGhlbSB0byBiZSBhIGRpcmVjdCB0YXJnZXQgb2YgJ3dvcmxkJworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK1BBQ0tBR0VTID0gIiIKK1BBQ0tBR0VTX2NsYXNzLW5hdGl2ZSA9ICIiCitQQUNLQUdFU19EWU5BTUlDID0gIiIKK1BBQ0tBR0VTX0RZTkFNSUNfY2xhc3MtbmF0aXZlID0gIiIKK1BBQ0tBR0VfQVJDSCA9ICIke0JVSUxEX0FSQ0h9IgorCisjIHVzZWQgYnkgY21ha2UgY2xhc3MKK09FQ01BS0VfUlBBVEggPSAiJHtsaWJkaXJ9IgorT0VDTUFLRV9SUEFUSF9jbGFzcy1uYXRpdmUgPSAiJHtsaWJkaXJ9IgorCisjIFdoZW4gdGhpcyBjbGFzcyBoYXMgcGFja2FnaW5nIGVuYWJsZWQsIHNldHRpbmcgCisjIFJQUk9WSURFUyBiZWNvbWVzIHVubmVjZXNzYXJ5LgorUlBST1ZJREVTID0gIiR7UE59IgorCitUQVJHRVRfQVJDSCA9ICIke0JVSUxEX0FSQ0h9IgorVEFSR0VUX09TID0gIiR7QlVJTERfT1N9IgorVEFSR0VUX1ZFTkRPUiA9ICIke0JVSUxEX1ZFTkRPUn0iCitUQVJHRVRfUFJFRklYID0gIiR7QlVJTERfUFJFRklYfSIKK1RBUkdFVF9DQ19BUkNIID0gIiR7QlVJTERfQ0NfQVJDSH0iCitUQVJHRVRfTERfQVJDSCA9ICIke0JVSUxEX0xEX0FSQ0h9IgorVEFSR0VUX0FTX0FSQ0ggPSAiJHtCVUlMRF9BU19BUkNIfSIKK1RBUkdFVF9DUFBGTEFHUyA9ICIke0JVSUxEX0NQUEZMQUdTfSIKK1RBUkdFVF9DRkxBR1MgPSAiJHtCVUlMRF9DRkxBR1N9IgorVEFSR0VUX0NYWEZMQUdTID0gIiR7QlVJTERfQ1hYRkxBR1N9IgorVEFSR0VUX0xERkxBR1MgPSAiJHtCVUlMRF9MREZMQUdTfSIKK1RBUkdFVF9GUFUgPSAiIgorCitIT1NUX0FSQ0ggPSAiJHtCVUlMRF9BUkNIfSIKK0hPU1RfT1MgPSAiJHtCVUlMRF9PU30iCitIT1NUX1ZFTkRPUiA9ICIke0JVSUxEX1ZFTkRPUn0iCitIT1NUX1BSRUZJWCA9ICIke0JVSUxEX1BSRUZJWH0iCitIT1NUX0NDX0FSQ0ggPSAiJHtCVUlMRF9DQ19BUkNIfSIKK0hPU1RfTERfQVJDSCA9ICIke0JVSUxEX0xEX0FSQ0h9IgorSE9TVF9BU19BUkNIID0gIiR7QlVJTERfQVNfQVJDSH0iCisKK0NQUEZMQUdTID0gIiR7QlVJTERfQ1BQRkxBR1N9IgorQ0ZMQUdTID0gIiR7QlVJTERfQ0ZMQUdTfSIKK0NYWEZMQUdTID0gIiR7QlVJTERfQ0ZMQUdTfSIKK0xERkxBR1MgPSAiJHtCVUlMRF9MREZMQUdTfSIKK0xERkxBR1NfYnVpbGQtZGFyd2luID0gIi1MJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9ICIKKworU1RBR0lOR19CSU5ESVIgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9IgorU1RBR0lOR19CSU5ESVJfQ1JPU1MgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9IgorCisjIG5hdGl2ZSBwa2cgZG9lc24ndCBuZWVkIHRoZSBUT09MQ0hBSU5fT1BUSU9OUy4KK1RPT0xDSEFJTl9PUFRJT05TID0gIiIKKworREVQRU5EU19HRVRURVhUID0gImdldHRleHQtbmF0aXZlIgorCisjIERvbid0IGJ1aWxkIHB0ZXN0IG5hdGl2ZWx5CitQVEVTVF9FTkFCTEVEID0gIjAiCisKKyMgRG9uJ3QgdXNlIHNpdGUgZmlsZXMgZm9yIG5hdGl2ZSBidWlsZHMKK2V4cG9ydCBDT05GSUdfU0lURSA9ICIke0NPUkVCQVNFfS9tZXRhL3NpdGUvbmF0aXZlIgorCisjIHNldCB0aGUgY29tcGlsZXIgYXMgd2VsbC4gSXQgY291bGQgaGF2ZSBiZWVuIHNldCB0byBzb21ldGhpbmcgZWxzZQorZXhwb3J0IENDID0gIiR7QlVJTERfQ0N9IgorZXhwb3J0IENYWCA9ICIke0JVSUxEX0NYWH0iCitleHBvcnQgRkMgPSAiJHtCVUlMRF9GQ30iCitleHBvcnQgQ1BQID0gIiR7QlVJTERfQ1BQfSIKK2V4cG9ydCBMRCA9ICIke0JVSUxEX0xEfSIKK2V4cG9ydCBDQ0xEID0gIiR7QlVJTERfQ0NMRH0iCitleHBvcnQgQVIgPSAiJHtCVUlMRF9BUn0iCitleHBvcnQgQVMgPSAiJHtCVUlMRF9BU30iCitleHBvcnQgUkFOTElCID0gIiR7QlVJTERfUkFOTElCfSIKK2V4cG9ydCBTVFJJUCA9ICIke0JVSUxEX1NUUklQfSIKK2V4cG9ydCBOTSA9ICIke0JVSUxEX05NfSIKKworIyBQYXRoIHByZWZpeGVzCitiYXNlX3ByZWZpeCA9ICIke1NUQUdJTkdfRElSX05BVElWRX0iCitwcmVmaXggPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfSIKK2V4ZWNfcHJlZml4ID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0iCisKK2JpbmRpciA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0iCitzYmluZGlyID0gIiR7U1RBR0lOR19TQklORElSX05BVElWRX0iCitsaWJkaXIgPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IgoraW5jbHVkZWRpciA9ICIke1NUQUdJTkdfSU5DRElSX05BVElWRX0iCitzeXNjb25mZGlyID0gIiR7U1RBR0lOR19FVENESVJfTkFUSVZFfSIKK2RhdGFkaXIgPSAiJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfSIKKworYmFzZWxpYiA9ICJsaWIiCisKKyMgTGlidG9vbCdzIGRlZmF1bHQgcGF0aHMgYXJlIGNvcnJlY3QgZm9yIHRoZSBuYXRpdmUgbWFjaGluZQorbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWNbdW5leHBvcnRdID0gIjEiCisKK05BVElWRV9QQUNLQUdFX1BBVEhfU1VGRklYID89ICIiCitiaW5kaXIgLj0gIiR7TkFUSVZFX1BBQ0tBR0VfUEFUSF9TVUZGSVh9IgorbGliZGlyIC49ICIke05BVElWRV9QQUNLQUdFX1BBVEhfU1VGRklYfSIKK2xpYmV4ZWNkaXIgLj0gIiR7TkFUSVZFX1BBQ0tBR0VfUEFUSF9TVUZGSVh9IgorCitkb19wb3B1bGF0ZV9zeXNyb290W3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7U1lTUk9PVF9ERVNURElSfS8ke1NUQUdJTkdfRElSX05BVElWRX0vIgorZG9fcG9wdWxhdGVfc3lzcm9vdFtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9LyIKKworIyBTaW5jZSB3ZSBhY3R1YWxseSBpbnN0YWxsIHRoZXNlIGludG8gc2l0dSB0aGVyZSBpcyBubyBzdGFnaW5nIHByZWZpeAorU1RBR0lOR19ESVJfSE9TVCA9ICIiCitTVEFHSU5HX0RJUl9UQVJHRVQgPSAiIgorUEtHX0NPTkZJR19ESVIgPSAiJHtsaWJkaXJ9L3BrZ2NvbmZpZyIKKworRVhUUkFfTkFUSVZFX1BLR0NPTkZJR19QQVRIID89ICIiCitQS0dfQ09ORklHX1BBVEggLj0gIiR7RVhUUkFfTkFUSVZFX1BLR0NPTkZJR19QQVRIfSIKK1BLR19DT05GSUdfU1lTUk9PVF9ESVIgPSAiIgorCisjIHdlIGRvbnQgd2FudCBsaWJjLXVjbGliYyBvciBsaWJjLWdsaWJjIHRvIGtpY2sgaW4gZm9yIG5hdGl2ZSByZWNpcGVzCitMSUJDT1ZFUlJJREUgPSAiIgorQ0xBU1NPVkVSUklERSA9ICJjbGFzcy1uYXRpdmUiCitNQUNISU5FT1ZFUlJJREVTID0gIiIKKworUEFUSF9wcmVwZW5kID0gIiR7Q09SRUJBU0V9L3NjcmlwdHMvbmF0aXZlLWludGVyY2VwdDoiCisKK3B5dGhvbiBuYXRpdmVfdmlydGNsYXNzX2hhbmRsZXIgKCkgeworICAgIGNsYXNzZXh0ZW5kID0gZS5kYXRhLmdldFZhcignQkJDTEFTU0VYVEVORCcsIFRydWUpIG9yICIiCisgICAgaWYgIm5hdGl2ZSIgbm90IGluIGNsYXNzZXh0ZW5kOgorICAgICAgICByZXR1cm4KKworICAgIHBuID0gZS5kYXRhLmdldFZhcigiUE4iLCBUcnVlKQorICAgIGlmIG5vdCBwbi5lbmRzd2l0aCgiLW5hdGl2ZSIpOgorICAgICAgICByZXR1cm4KKworICAgIGRlZiBtYXBfZGVwZW5kZW5jaWVzKHZhcm5hbWUsIGQsIHN1ZmZpeCA9ICIiKToKKyAgICAgICAgaWYgc3VmZml4OgorICAgICAgICAgICAgdmFybmFtZSA9IHZhcm5hbWUgKyAiXyIgKyBzdWZmaXgKKyAgICAgICAgZGVwcyA9IGQuZ2V0VmFyKHZhcm5hbWUsIFRydWUpCisgICAgICAgIGlmIG5vdCBkZXBzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGRlcHMgPSBiYi51dGlscy5leHBsb2RlX2RlcHMoZGVwcykKKyAgICAgICAgbmV3ZGVwcyA9IFtdCisgICAgICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgICAgIGlmIGRlcCA9PSBwbjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxpZiAiLWNyb3NzLSIgaW4gZGVwOgorICAgICAgICAgICAgICAgIG5ld2RlcHMuYXBwZW5kKGRlcC5yZXBsYWNlKCItY3Jvc3MiLCAiLW5hdGl2ZSIpKQorICAgICAgICAgICAgZWxpZiBub3QgZGVwLmVuZHN3aXRoKCItbmF0aXZlIik6CisgICAgICAgICAgICAgICAgbmV3ZGVwcy5hcHBlbmQoZGVwICsgIi1uYXRpdmUiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXdkZXBzLmFwcGVuZChkZXApCisgICAgICAgIGQuc2V0VmFyKHZhcm5hbWUsICIgIi5qb2luKG5ld2RlcHMpKQorCisgICAgZS5kYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgZS5kYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgIjp2aXJ0Y2xhc3MtbmF0aXZlIikKKworICAgIG1hcF9kZXBlbmRlbmNpZXMoIkRFUEVORFMiLCBlLmRhdGEpCisgICAgZm9yIHBrZyBpbiBbZS5kYXRhLmdldFZhcigiUE4iLCBUcnVlKSwgIiIsICIke1BOfSJdOgorICAgICAgICBtYXBfZGVwZW5kZW5jaWVzKCJSREVQRU5EUyIsIGUuZGF0YSwgcGtnKQorICAgICAgICBtYXBfZGVwZW5kZW5jaWVzKCJSUkVDT01NRU5EUyIsIGUuZGF0YSwgcGtnKQorICAgICAgICBtYXBfZGVwZW5kZW5jaWVzKCJSU1VHR0VTVFMiLCBlLmRhdGEsIHBrZykKKyAgICAgICAgbWFwX2RlcGVuZGVuY2llcygiUlBST1ZJREVTIiwgZS5kYXRhLCBwa2cpCisgICAgICAgIG1hcF9kZXBlbmRlbmNpZXMoIlJSRVBMQUNFUyIsIGUuZGF0YSwgcGtnKQorCisgICAgcHJvdmlkZXMgPSBlLmRhdGEuZ2V0VmFyKCJQUk9WSURFUyIsIFRydWUpCisgICAgbnByb3ZpZGVzID0gW10KKyAgICBmb3IgcHJvdiBpbiBwcm92aWRlcy5zcGxpdCgpOgorICAgICAgICBpZiBwcm92LmZpbmQocG4pICE9IC0xOgorICAgICAgICAgICAgbnByb3ZpZGVzLmFwcGVuZChwcm92KQorICAgICAgICBlbGlmIG5vdCBwcm92LmVuZHN3aXRoKCItbmF0aXZlIik6CisgICAgICAgICAgICBucHJvdmlkZXMuYXBwZW5kKHByb3YucmVwbGFjZShwcm92LCBwcm92ICsgIi1uYXRpdmUiKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5wcm92aWRlcy5hcHBlbmQocHJvdikKKyAgICBlLmRhdGEuc2V0VmFyKCJQUk9WSURFUyIsICcgJy5qb2luKG5wcm92aWRlcykpCisKKworfQorCithZGRoYW5kbGVyIG5hdGl2ZV92aXJ0Y2xhc3NfaGFuZGxlcgorbmF0aXZlX3ZpcnRjbGFzc19oYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuUmVjaXBlUHJlRmluYWxpc2UiCisKK2RlbHRhc2sgcGFja2FnZQorZGVsdGFzayBwYWNrYWdlZGF0YQorZGVsdGFzayBwYWNrYWdlX3FhCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGVfaXBrCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGVfZGViCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGVfcnBtCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGUKKworZG9fcGFja2FnZWRhdGFbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorZG9fcG9wdWxhdGVfc3lzcm9vdFtzdGFtcC1leHRyYS1pbmZvXSA9ICIiCisKK1VTRV9OTFMgPSAibm8iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9uYXRpdmVzZGsuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL25hdGl2ZXNkay5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NGRhNjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9uYXRpdmVzZGsuYmJjbGFzcwpAQCAtMCwwICsxLDk3IEBACisjIFNESyBwYWNrYWdlcyBhcmUgYnVpbHQgZWl0aGVyIGV4cGxpY2l0bHkgYnkgdGhlIHVzZXIsCisjIG9yIGluZGlyZWN0bHkgdmlhIGRlcGVuZGVuY3kuICBObyBuZWVkIHRvIGJlIGluICd3b3JsZCcuCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKKworU1RBR0lOR19CSU5ESVJfVE9PTENIQUlOID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyX25hdGl2ZX0vJHtTREtfQVJDSH0ke1NES19WRU5ET1J9LSR7U0RLX09TfSIKKworIyBsaWJjIGZvciB0aGUgU0RLIGNhbiBiZSBkaWZmZXJlbnQgdG8gdGhhdCBvZiB0aGUgdGFyZ2V0CitOQVRJVkVTREtMSUJDID89ICJsaWJjLWdsaWJjIgorTElCQ09WRVJSSURFID0gIjoke05BVElWRVNES0xJQkN9IgorQ0xBU1NPVkVSUklERSA9ICJjbGFzcy1uYXRpdmVzZGsiCitNQUNISU5FT1ZFUlJJREVTID0gIiIKKworIworIyBVcGRhdGUgUEFDS0FHRV9BUkNIIGFuZCBQQUNLQUdFX0FSQ0hTCisjCitQQUNLQUdFX0FSQ0ggPSAiJHtTREtfQVJDSH0tJHtTREtQS0dTVUZGSVh9IgorUEFDS0FHRV9BUkNIUyA9ICIke1NES19QQUNLQUdFX0FSQ0hTfSIKKworIworIyBXZSBuZWVkIGNocnBhdGggPj0gMC4xNCB0byBlbnN1cmUgd2UgY2FuIGRlYWwgd2l0aCAzMiBhbmQgNjQgYml0CisjIGJpbmFyaWVzCisjCitERVBFTkRTX2FwcGVuZCA9ICIgY2hycGF0aC1yZXBsYWNlbWVudC1uYXRpdmUiCitFWFRSQU5BVElWRVBBVEggKz0gImNocnBhdGgtbmF0aXZlIgorCitTVEFHSU5HX0RJUl9IT1NUID0gIiR7U1RBR0lOR19ESVJ9LyR7TVVMVElNQUNIX0hPU1RfU1lTfSIKK1NUQUdJTkdfRElSX1RBUkdFVCA9ICIke1NUQUdJTkdfRElSfS8ke01VTFRJTUFDSF9UQVJHRVRfU1lTfSIKK1BLR0RBVEFfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0vcGtnZGF0YSIKKworSE9TVF9BUkNIID0gIiR7U0RLX0FSQ0h9IgorSE9TVF9WRU5ET1IgPSAiJHtTREtfVkVORE9SfSIKK0hPU1RfT1MgPSAiJHtTREtfT1N9IgorSE9TVF9QUkVGSVggPSAiJHtTREtfUFJFRklYfSIKK0hPU1RfQ0NfQVJDSCA9ICIke1NES19DQ19BUkNIfSIKK0hPU1RfTERfQVJDSCA9ICIke1NES19MRF9BUkNIfSIKK0hPU1RfQVNfQVJDSCA9ICIke1NES19BU19BUkNIfSIKKyNIT1NUX1NZUyA9ICIke0hPU1RfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7SE9TVF9PU30iCisKK1RBUkdFVF9BUkNIID0gIiR7U0RLX0FSQ0h9IgorVEFSR0VUX1ZFTkRPUiA9ICIke1NES19WRU5ET1J9IgorVEFSR0VUX09TID0gIiR7U0RLX09TfSIKK1RBUkdFVF9QUkVGSVggPSAiJHtTREtfUFJFRklYfSIKK1RBUkdFVF9DQ19BUkNIID0gIiR7U0RLX0NDX0FSQ0h9IgorVEFSR0VUX0xEX0FSQ0ggPSAiJHtTREtfTERfQVJDSH0iCitUQVJHRVRfQVNfQVJDSCA9ICIke1NES19BU19BUkNIfSIKK1RBUkdFVF9GUFUgPSAiIgorRVhUUkFfT0VDT05GX0dDQ19GTE9BVCA9ICIiCisKK0NQUEZMQUdTID0gIiR7QlVJTERTREtfQ1BQRkxBR1N9IgorQ0ZMQUdTID0gIiR7QlVJTERTREtfQ0ZMQUdTfSIKK0NYWEZMQUdTID0gIiR7QlVJTERTREtfQ0ZMQUdTfSIKK0xERkxBR1MgPSAiJHtCVUlMRFNES19MREZMQUdTfSIKKworIyBDaGFuZ2UgdG8gcGxhY2UgZmlsZXMgaW4gU0RLUEFUSAorYmFzZV9wcmVmaXggPSAiJHtTREtQQVRITkFUSVZFfSIKK3ByZWZpeCA9ICIke1NES1BBVEhOQVRJVkV9JHtwcmVmaXhfbmF0aXZlc2RrfSIKK2V4ZWNfcHJlZml4ID0gIiR7U0RLUEFUSE5BVElWRX0ke3ByZWZpeF9uYXRpdmVzZGt9IgorYmFzZWxpYiA9ICJsaWIiCitzYmluZGlyID0gIiR7YmluZGlyfSIKKworZXhwb3J0IFBLR19DT05GSUdfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0ke2xpYmRpcn0vcGtnY29uZmlnIgorZXhwb3J0IFBLR19DT05GSUdfU1lTUk9PVF9ESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfSIKKworcHl0aG9uIG5hdGl2ZXNka192aXJ0Y2xhc3NfaGFuZGxlciAoKSB7CisgICAgcG4gPSBlLmRhdGEuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgaWYgbm90IChwbi5lbmRzd2l0aCgiLW5hdGl2ZXNkayIpIG9yIHBuLnN0YXJ0c3dpdGgoIm5hdGl2ZXNkay0iKSk6CisgICAgICAgIHJldHVybgorCisgICAgZS5kYXRhLnNldFZhcigiTUxQUkVGSVgiLCAibmF0aXZlc2RrLSIpCisgICAgZS5kYXRhLnNldFZhcigiUE4iLCAibmF0aXZlc2RrLSIgKyBlLmRhdGEuZ2V0VmFyKCJQTiIsIFRydWUpLnJlcGxhY2UoIi1uYXRpdmVzZGsiLCAiIikucmVwbGFjZSgibmF0aXZlc2RrLSIsICIiKSkKKyAgICBlLmRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBlLmRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyAiOnZpcnRjbGFzcy1uYXRpdmVzZGsiKQorfQorCitweXRob24gKCkgeworICAgIHBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICBpZiBub3QgcG4uc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpOgorICAgICAgICByZXR1cm4KKworICAgIGltcG9ydCBvZS5jbGFzc2V4dGVuZAorCisgICAgY2xzZXh0ZW5kID0gb2UuY2xhc3NleHRlbmQuTmF0aXZlc2RrQ2xhc3NFeHRlbmRlcigibmF0aXZlc2RrIiwgZCkKKyAgICBjbHNleHRlbmQucmVuYW1lX3BhY2thZ2VzKCkKKyAgICBjbHNleHRlbmQucmVuYW1lX3BhY2thZ2VfdmFyaWFibGVzKChkLmdldFZhcigiUEFDS0FHRVZBUlMiLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKworICAgIGNsc2V4dGVuZC5tYXBfZGVwZW5kc192YXJpYWJsZSgiREVQRU5EUyIpCisgICAgY2xzZXh0ZW5kLm1hcF9wYWNrYWdldmFycygpCisgICAgY2xzZXh0ZW5kLm1hcF92YXJpYWJsZSgiUFJPVklERVMiKQorICAgIGNsc2V4dGVuZC5tYXBfcmVnZXhwX3ZhcmlhYmxlKCJQQUNLQUdFU19EWU5BTUlDIikKK30KKworYWRkaGFuZGxlciBuYXRpdmVzZGtfdmlydGNsYXNzX2hhbmRsZXIKK25hdGl2ZXNka192aXJ0Y2xhc3NfaGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LlJlY2lwZVByZUZpbmFsaXNlIgorCitkb19wb3B1bGF0ZV9zeXNyb290W3N0YW1wLWV4dHJhLWluZm9dID0gIiIKK2RvX3BhY2thZ2VkYXRhW3N0YW1wLWV4dHJhLWluZm9dID0gIiIKKworVVNFX05MUyA9ICIke1NES1VTRV9OTFN9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvb2VsaW50LmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9vZWxpbnQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjA1MWNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvb2VsaW50LmJiY2xhc3MKQEAgLTAsMCArMSw4NCBAQAorYWRkdGFzayBsaW50IGJlZm9yZSBkb19idWlsZAorZG9fbGludFtub3N0YW1wXSA9ICIxIgorcHl0aG9uIGRvX2xpbnQoKSB7CisgICAgcGtnbmFtZSA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIFRlc3QgdGhhdCBERVNDUklQVElPTiBleGlzdHMKKyAgICAjCisgICAgZGVzY3JpcHRpb24gPSBkLmdldFZhcigiREVTQ1JJUFRJT04iLCBGYWxzZSkKKyAgICBpZiBkZXNjcmlwdGlvblsxOjEwXSA9PSAne1NVTU1BUll9JzoKKyAgICAgICAgYmIud2FybigiJXM6IERFU0NSSVBUSU9OIGlzIG5vdCBzZXQiICUgcGtnbmFtZSkKKworCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBUZXN0IHRoYXQgSE9NRVBBR0UgZXhpc3RzCisgICAgIworICAgIGhvbWVwYWdlID0gZC5nZXRWYXIoIkhPTUVQQUdFIiwgRmFsc2UpCisgICAgaWYgaG9tZXBhZ2UgPT0gJyc6CisgICAgICAgIGJiLndhcm4oIiVzOiBIT01FUEFHRSBpcyBub3Qgc2V0IiAlIHBrZ25hbWUpCisgICAgZWxpZiBub3QgaG9tZXBhZ2Uuc3RhcnRzd2l0aCgiaHR0cDovLyIpIGFuZCBub3QgaG9tZXBhZ2Uuc3RhcnRzd2l0aCgiaHR0cHM6Ly8iKToKKyAgICAgICAgYmIud2FybigiJXM6IEhPTUVQQUdFIGRvZXNuJ3Qgc3RhcnQgd2l0aCBodHRwOi8vIG9yIGh0dHBzOi8vIiAlIHBrZ25hbWUpCisKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgVGVzdCBmb3IgdmFsaWQgU0VDVElPTgorICAgICMKKyAgICBzZWN0aW9uID0gZC5nZXRWYXIoIlNFQ1RJT04iLCBGYWxzZSkKKyAgICBpZiBzZWN0aW9uID09ICcnOgorICAgICAgICBiYi53YXJuKCIlczogU0VDVElPTiBpcyBub3Qgc2V0IiAlIHBrZ25hbWUpCisgICAgZWxpZiBub3Qgc2VjdGlvbi5pc2xvd2VyKCk6CisgICAgICAgIGJiLndhcm4oIiVzOiBTRUNUSU9OIHNob3VsZCBvbmx5IHVzZSBsb3dlciBjYXNlIiAlIHBrZ25hbWUpCisKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgQ2hlY2sgdGhhdCBhbGwgcGF0Y2hlcyBoYXZlIFNpZ25lZC1vZmYtYnkgYW5kIFVwc3RyZWFtLVN0YXR1cworICAgICMKKyAgICBzcmN1cmkgPSBkLmdldFZhcigiU1JDX1VSSSIsIEZhbHNlKS5zcGxpdCgpCisgICAgZnBhdGhzID0gKGQuZ2V0VmFyKCdGSUxFU1BBVEgnLCBUcnVlKSBvciAnJykuc3BsaXQoJzonKQorCisgICAgZGVmIGZpbmRQYXRjaChwYXRjaG5hbWUpOgorICAgICAgICBmb3IgZGlyIGluIGZwYXRoczoKKyAgICAgICAgICAgIHBhdGNocGF0aCA9IGRpciArIHBhdGNobmFtZQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGF0Y2hwYXRoKToKKyAgICAgICAgICAgICAgICAgcmV0dXJuIHBhdGNocGF0aAorCisgICAgZGVmIGZpbmRLZXkocGF0aCwga2V5KToKKyAgICAgICAgcmV0ID0gVHJ1ZQorICAgICAgICBmID0gZmlsZSgnJXMnICUgcGF0aCwgbW9kZSA9ICdyJykKKyAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQorICAgICAgICB3aGlsZSBsaW5lOgorICAgICAgICAgICAgaWYgbGluZS5maW5kKGtleSkgIT0gLTE6CisgICAgICAgICAgICAgICAgcmV0ID0gRmFsc2UKKyAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHJldHVybiByZXQKKworICAgIGRlZiBjaGVja1BOKHBrZ25hbWUsIHZhcm5hbWUsIHN0cik6CisgICAgICAgIGlmIHN0ci5maW5kKCJ7UE59IikgIT0gLTE6CisgICAgICAgICAgICBiYi53YXJuKCIlczogc2hvdWxkIHVzZSBCUE4gaW5zdGVhZCBvZiBQTiBpbiAlcyIgJSAocGtnbmFtZSwgdmFybmFtZSkpCisgICAgICAgIGlmIHN0ci5maW5kKCJ7UH0iKSAhPSAtMToKKyAgICAgICAgICAgIGJiLndhcm4oIiVzOiBzaG91bGQgdXNlIEJQIGluc3RlYWQgb2YgUCBpbiAlcyIgJSAocGtnbmFtZSwgdmFybmFtZSkpCisKKyAgICBsZW5ndGggPSBsZW4oImZpbGU6Ly8iKQorICAgIGZvciBpdGVtIGluIHNyY3VyaToKKyAgICAgICAgaWYgaXRlbS5zdGFydHN3aXRoKCJmaWxlOi8vIik6CisgICAgICAgICAgICBpdGVtID0gaXRlbVtsZW5ndGg6XQorICAgICAgICAgICAgaWYgaXRlbS5lbmRzd2l0aCgiLnBhdGNoIikgb3IgaXRlbS5lbmRzd2l0aCgiLmRpZmYiKToKKyAgICAgICAgICAgICAgICBwYXRoID0gZmluZFBhdGNoKGl0ZW0pCisgICAgICAgICAgICAgICAgaWYgZmluZEtleShwYXRoLCAiU2lnbmVkLW9mZi1ieSIpOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCIlczogJXMgZG9lc24ndCBoYXZlIFNpZ25lZC1vZmYtYnkiICUgKHBrZ25hbWUsIGl0ZW0pKQorICAgICAgICAgICAgICAgIGlmIGZpbmRLZXkocGF0aCwgIlVwc3RyZWFtLVN0YXR1cyIpOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCIlczogJXMgZG9lc24ndCBoYXZlIFVwc3RyZWFtLVN0YXR1cyIgJSAocGtnbmFtZSwgaXRlbSkpCisKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgQ2hlY2sgZm9yICR7UE59IG9yICR7UH0gdXNhZ2UgaW4gU1JDX1VSSSBvciBTCisgICAgIyBTaG91bGQgdXNlICR7QlBOfSBvciAke0JQfSBpbnN0ZWFkIHRvIGF2b2lkIGJyZWFraW5nIG11bHRpbGliCisgICAgIworICAgIGZvciBzIGluIHNyY3VyaToKKyAgICAgICAgaWYgbm90IHMuc3RhcnRzd2l0aCgiZmlsZTovLyIpOgorICAgICAgICAgICAgY2hlY2tQTihwa2duYW1lLCAnU1JDX1VSSScsIHMpCisKKyAgICBjaGVja1BOKHBrZ25hbWUsICdTJywgZC5nZXRWYXIoJ1MnLCBGYWxzZSkpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9vd24tbWlycm9ycy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvb3duLW1pcnJvcnMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjM1MjI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvb3duLW1pcnJvcnMuYmJjbGFzcwpAQCAtMCwwICsxLDEyIEBACitQUkVNSVJST1JTKCkgeworY3ZzOi8vLiovLiogICAgICR7U09VUkNFX01JUlJPUl9VUkx9Citzdm46Ly8uKi8uKiAgICAgJHtTT1VSQ0VfTUlSUk9SX1VSTH0KK2dpdDovLy4qLy4qICAgICAke1NPVVJDRV9NSVJST1JfVVJMfQorZ2l0c206Ly8uKi8uKiAgICR7U09VUkNFX01JUlJPUl9VUkx9CitoZzovLy4qLy4qICAgICAgJHtTT1VSQ0VfTUlSUk9SX1VSTH0KK2J6cjovLy4qLy4qICAgICAke1NPVVJDRV9NSVJST1JfVVJMfQorcDQ6Ly8uKi8uKiAgICAgICR7U09VUkNFX01JUlJPUl9VUkx9Citvc2M6Ly8uKi8uKiAgICAgJHtTT1VSQ0VfTUlSUk9SX1VSTH0KK2h0dHBzPyQ6Ly8uKi8uKiAke1NPVVJDRV9NSVJST1JfVVJMfQorZnRwOi8vLiovLiogICAgICR7U09VUkNFX01JUlJPUl9VUkx9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q5MmJlYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2UuYmJjbGFzcwpAQCAtMCwwICsxLDIwODYgQEAKKyMKKyMgUGFja2FnaW5nIHByb2Nlc3MKKyMKKyMgRXhlY3V0aXZlIHN1bW1hcnk6IFRoaXMgY2xhc3MgaXRlcmF0ZXMgb3ZlciB0aGUgZnVuY3Rpb25zIGxpc3RlZCBpbiBQQUNLQUdFRlVOQ1MKKyMgVGFraW5nIEQgYW5kIHNwbGl0dGluZyBpdCB1cCBpbnRvIHRoZSBwYWNrYWdlcyBsaXN0ZWQgaW4gUEFDS0FHRVMsIHBsYWNpbmcgdGhlCisjIHJlc3VsdGluZyBvdXRwdXQgaW4gUEtHREVTVC4KKyMKKyMgVGhlcmUgYXJlIHRoZSBmb2xsb3dpbmcgZGVmYXVsdCBzdGVwcyBidXQgUEFDS0FHRUZVTkNTIGNhbiBiZSBleHRlbmRlZDoKKyMKKyMgYSkgcGFja2FnZV9nZXRfYXV0b19wciAtIGdldCBQUkFVVE8gZnJvbSByZW1vdGUgUFIgc2VydmljZQorIworIyBiKSBwZXJmb3JtX3BhY2thZ2Vjb3B5IC0gQ29weSBEIGludG8gUEtHRAorIworIyBjKSBwYWNrYWdlX2RvX3NwbGl0X2xvY2FsZXMgLSBTcGxpdCBvdXQgdGhlIGxvY2FsZSBmaWxlcywgdXBkYXRlcyBGSUxFUyBhbmQgUEFDS0FHRVMKKyMKKyMgZCkgc3BsaXRfYW5kX3N0cmlwX2ZpbGVzIC0gc3BsaXQgdGhlIGZpbGVzIGludG8gcnVudGltZSBhbmQgZGVidWcgYW5kIHN0cmlwIHRoZW0uCisjICAgIERlYnVnIGZpbGVzIGluY2x1ZGUgZGVidWcgaW5mbyBzcGxpdCwgYW5kIGFzc29jaWF0ZWQgc291cmNlcyB0aGF0IGVuZCB1cCBpbiAtZGJnIHBhY2thZ2VzCisjCisjIGUpIGZpeHVwX3Blcm1zIC0gRml4IHVwIHBlcm1pc3Npb25zIGluIHRoZSBwYWNrYWdlIGJlZm9yZSB3ZSBzcGxpdCBpdC4KKyMKKyMgZikgcG9wdWxhdGVfcGFja2FnZXMgLSBTcGxpdCB0aGUgZmlsZXMgaW4gUEtHRCBpbnRvIHNlcGFyYXRlIHBhY2thZ2VzIGluIFBLR0RFU1QvPHBrZ25hbWU+CisjICAgIEFsc28gdHJpZ2dlcnMgdGhlIGJpbmFyeSBzdHJpcHBpbmcgY29kZSB0byBwdXQgZmlsZXMgaW4gLWRiZyBwYWNrYWdlcy4KKyMKKyMgZykgcGFja2FnZV9kb19maWxlZGVwcyAtIENvbGxlY3QgcGVyZmlsZSBydW4tdGltZSBkZXBlbmRlbmN5IG1ldGFkYXRhCisjICAgIFRoZSBkYXRhIGlzIHN0b3JlcyBpbiBGSUxFUntQUk9WSURFUyxERVBFTkRTfV9maWxlX3BrZyB2YXJpYWJsZXMgd2l0aAorIyAgICBhIGxpc3Qgb2YgYWZmZWN0ZWQgZmlsZXMgaW4gRklMRVJ7UFJPVklERVMsREVQRU5EU31GTElTVF9wa2cKKyMKKyMgaCkgcGFja2FnZV9kb19zaGxpYnMgLSBMb29rIGF0IHRoZSBzaGFyZWQgbGlicmFyaWVzIGdlbmVyYXRlZCBhbmQgYXV0b3RtYXRpY2FsbHkgYWRkIGFueQorIyAgICBkZXBlbmVkZW5jaWVzIGZvdW5kLiBBbHNvIHN0b3JlcyB0aGUgcGFja2FnZSBuYW1lIHNvIGFueW9uZSBlbHNlIHVzaW5nIHRoaXMgbGlicmFyeQorIyAgICBrbm93cyB3aGljaCBwYWNrYWdlIHRvIGRlcGVuZCBvbi4KKyMKKyMgaSkgcGFja2FnZV9kb19wa2djb25maWcgLSBLZWVwIHRyYWNrIG9mIHdoaWNoIHBhY2thZ2VzIG5lZWQgYW5kIHByb3ZpZGUgd2hpY2ggLnBjIGZpbGVzCisjCisjIGopIHJlYWRfc2hsaWJkZXBzIC0gUmVhZHMgdGhlIHN0b3JlZCBzaGxpYnMgaW5mb3JtYXRpb24gaW50byB0aGUgbWV0YWRhdGEKKyMKKyMgaykgcGFja2FnZV9kZXBjaGFpbnMgLSBBZGRzIGF1dG9tYXRpYyBkZXBlbmRlbmNpZXMgdG8gLWRiZyBhbmQgLWRldiBwYWNrYWdlcworIworIyBsKSBlbWl0X3BrZ2RhdGEgLSBzYXZlcyB0aGUgcGFja2FnaW5nIGRhdGEgaW50byBQS0dEQVRBX0RJUiBmb3IgdXNlIGluIGxhdGVyCisjICAgIHBhY2thZ2luZyBzdGVwcworCitpbmhlcml0IHBhY2thZ2VkYXRhCitpbmhlcml0IHByc2VydgoraW5oZXJpdCBjaHJwYXRoCisKKyMgTmVlZCB0aGUgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoKSBpbiBpbnNhbmUuYmJjbGFzcworaW5oZXJpdCBpbnNhbmUKKworUEtHRCAgICA9ICIke1dPUktESVJ9L3BhY2thZ2UiCitQS0dERVNUID0gIiR7V09SS0RJUn0vcGFja2FnZXMtc3BsaXQiCisKK0xPQ0FMRV9TRUNUSU9OID89ICcnCisKK0FMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTID0gIiR7QGFsbF9tdWx0aWxpYl90dW5lX3ZhbHVlcyhkLCAnUEFDS0FHRV9BUkNIUycpfSIKKworIyBycG0gaXMgdXNlZCBmb3IgdGhlIHBlci1maWxlIGRlcGVuZGVuY3kgaWRlbnRpZmljYXRpb24KK1BBQ0tBR0VfREVQRU5EUyArPSAicnBtLW5hdGl2ZSIKKworZGVmIGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKHMpOgorICAgICIiIgorICAgIE1ha2Ugc3VyZSBwYWNrYWdlIG5hbWVzIGFyZSBsZWdpdGltYXRlIHN0cmluZ3MKKyAgICAiIiIKKyAgICBpbXBvcnQgcmUKKworICAgIGRlZiBmaXh1dGYobSk6CisgICAgICAgIGNwID0gbS5ncm91cCgxKQorICAgICAgICBpZiBjcDoKKyAgICAgICAgICAgIHJldHVybiAoJ1x1JXMnICUgY3ApLmRlY29kZSgndW5pY29kZV9lc2NhcGUnKS5lbmNvZGUoJ3V0Zi04JykKKworICAgICMgSGFuZGxlIHVuaWNvZGUgY29kZXBvaW50cyBlbmNvZGVkIGFzIDxVMDEyMz4sIGFzIGluIGdsaWJjIGxvY2FsZSBmaWxlcy4KKyAgICBzID0gcmUuc3ViKCc8VShbMC05QS1GYS1mXXsxLDR9KT4nLCBmaXh1dGYsIHMpCisKKyAgICAjIFJlbWFpbmluZyBwYWNrYWdlIG5hbWUgdmFsaWRpdHkgZml4ZXMKKyAgICByZXR1cm4gcy5sb3dlcigpLnJlcGxhY2UoJ18nLCAnLScpLnJlcGxhY2UoJ0AnLCAnKycpLnJlcGxhY2UoJywnLCAnKycpLnJlcGxhY2UoJy8nLCAnLScpCisKK2RlZiBkb19zcGxpdF9wYWNrYWdlcyhkLCByb290LCBmaWxlX3JlZ2V4LCBvdXRwdXRfcGF0dGVybiwgZGVzY3JpcHRpb24sIHBvc3RpbnN0PU5vbmUsIHJlY3Vyc2l2ZT1GYWxzZSwgaG9vaz1Ob25lLCBleHRyYV9kZXBlbmRzPU5vbmUsIGF1eF9maWxlc19wYXR0ZXJuPU5vbmUsIHBvc3RybT1Ob25lLCBhbGxvd19kaXJzPUZhbHNlLCBwcmVwZW5kPUZhbHNlLCBtYXRjaF9wYXRoPUZhbHNlLCBhdXhfZmlsZXNfcGF0dGVybl92ZXJiYXRpbT1Ob25lLCBhbGxvd19saW5rcz1GYWxzZSwgc3VtbWFyeT1Ob25lKToKKyAgICAiIiIKKyAgICBVc2VkIGluIC5iYiBmaWxlcyB0byBzcGxpdCB1cCBkeW5hbWljYWxseSBnZW5lcmF0ZWQgc3VicGFja2FnZXMgb2YgYQorICAgIGdpdmVuIHBhY2thZ2UsIHVzdWFsbHkgcGx1Z2lucyBvciBtb2R1bGVzLgorCisgICAgQXJndW1lbnRzOgorICAgIHJvb3QgICAgICAgICAgIC0tIHRoZSBwYXRoIGluIHdoaWNoIHRvIHNlYXJjaAorICAgIGZpbGVfcmVnZXggICAgIC0tIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBzZWFyY2hlZCBmaWxlcy4gVXNlCisgICAgICAgICAgICAgICAgICAgICAgcGFyZW50aGVzZXMgKCkgdG8gbWFyayB0aGUgcGFydCBvZiB0aGlzIGV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICAgICAgICB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGRlcml2ZSB0aGUgbW9kdWxlIG5hbWUgKHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgc3Vic3RpdHV0ZWQgd2hlcmUgJXMgaXMgdXNlZCBpbiBvdGhlciBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cyBhcyBub3RlZCBiZWxvdykKKyAgICBvdXRwdXRfcGF0dGVybiAtLSBwYXR0ZXJuIHRvIHVzZSBmb3IgdGhlIHBhY2thZ2UgbmFtZXMuIE11c3QgaW5jbHVkZSAlcy4KKyAgICBkZXNjcmlwdGlvbiAgICAtLSBkZXNjcmlwdGlvbiB0byBzZXQgZm9yIGVhY2ggcGFja2FnZS4gTXVzdCBpbmNsdWRlICVzLgorICAgIHBvc3RpbnN0ICAgICAgIC0tIHBvc3RpbnN0YWxsIHNjcmlwdCB0byB1c2UgZm9yIGFsbCBwYWNrYWdlcyAoYXMgYQorICAgICAgICAgICAgICAgICAgICAgIHN0cmluZykKKyAgICByZWN1cnNpdmUgICAgICAtLSBUcnVlIHRvIHBlcmZvcm0gYSByZWN1cnNpdmUgc2VhcmNoIC0gZGVmYXVsdCBGYWxzZQorICAgIGhvb2sgICAgICAgICAgIC0tIGEgaG9vayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZm9yIGV2ZXJ5IG1hdGNoLiBUaGUKKyAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgKGluIHRoZSBvcmRlciBsaXN0ZWQpOgorICAgICAgICAgICAgICAgICAgICAgICAgZjogZnVsbCBwYXRoIHRvIHRoZSBmaWxlL2RpcmVjdG9yeSBtYXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgcGtnOiB0aGUgcGFja2FnZSBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3JlZ2V4OiBhcyBhYm92ZQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm46IGFzIGFib3ZlCisgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVuYW1lOiB0aGUgbW9kdWxlIG5hbWUgZGVyaXZlZCB1c2luZyBmaWxlX3JlZ2V4CisgICAgZXh0cmFfZGVwZW5kcyAgLS0gZXh0cmEgcnVudGltZSBkZXBlbmRlbmNpZXMgKFJERVBFTkRTKSB0byBiZSBzZXQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgYWxsIHBhY2thZ2VzLiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBOb25lIGNhdXNlcyBhCisgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSBvbiB0aGUgbWFpbiBwYWNrYWdlICgke1BOfSkgLSBpZiB5b3UgZG8KKyAgICAgICAgICAgICAgICAgICAgICBub3Qgd2FudCB0aGlzLCBwYXNzICcnIGZvciB0aGlzIHBhcmFtZXRlci4KKyAgICBhdXhfZmlsZXNfcGF0dGVybiAtLSBleHRyYSBpdGVtKHMpIHRvIGJlIGFkZGVkIHRvIEZJTEVTIGZvciBlYWNoCisgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZS4gQ2FuIGJlIGEgc2luZ2xlIHN0cmluZyBpdGVtIG9yIGEgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3MgZm9yIG11bHRpcGxlIGl0ZW1zLiAgTXVzdCBpbmNsdWRlICVzLgorICAgIHBvc3RybSAgICAgICAgIC0tIHBvc3RybSBzY3JpcHQgdG8gdXNlIGZvciBhbGwgcGFja2FnZXMgKGFzIGEgc3RyaW5nKQorICAgIGFsbG93X2RpcnMgICAgIC0tIFRydWUgYWxsb3cgZGlyZWN0b3JpZXMgdG8gYmUgbWF0Y2hlZCAtIGRlZmF1bHQgRmFsc2UKKyAgICBwcmVwZW5kICAgICAgICAtLSBpZiBUcnVlLCBwcmVwZW5kIGNyZWF0ZWQgcGFja2FnZXMgdG8gUEFDS0FHRVMgaW5zdGVhZAorICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBkZWZhdWx0IEZhbHNlIHdoaWNoIGFwcGVuZHMgdGhlbQorICAgIG1hdGNoX3BhdGggICAgIC0tIG1hdGNoIGZpbGVfcmVnZXggb24gdGhlIHdob2xlIHJlbGF0aXZlIHBhdGggdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgcm9vdCByYXRoZXIgdGhhbiBqdXN0IHRoZSBmaWxlIG5hbWUKKyAgICBhdXhfZmlsZXNfcGF0dGVybl92ZXJiYXRpbSAtLSBleHRyYSBpdGVtKHMpIHRvIGJlIGFkZGVkIHRvIEZJTEVTIGZvcgorICAgICAgICAgICAgICAgICAgICAgIGVhY2ggcGFja2FnZSwgdXNpbmcgdGhlIGFjdHVhbCBkZXJpdmVkIG1vZHVsZSBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgcmF0aGVyIHRoYW4gY29udmVydGluZyBpdCB0byBzb21ldGhpbmcgbGVnYWwgZm9yIGEKKyAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG5hbWUuIENhbiBiZSBhIHNpbmdsZSBzdHJpbmcgaXRlbSBvciBhIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgICBvZiBzdHJpbmdzIGZvciBtdWx0aXBsZSBpdGVtcy4gTXVzdCBpbmNsdWRlICVzLgorICAgIGFsbG93X2xpbmtzICAgIC0tIFRydWUgdG8gYWxsb3cgc3ltbGlua3MgdG8gYmUgbWF0Y2hlZCAtIGRlZmF1bHQgRmFsc2UKKyAgICBzdW1tYXJ5ICAgICAgICAtLSBTdW1tYXJ5IHRvIHNldCBmb3IgZWFjaCBwYWNrYWdlLiBNdXN0IGluY2x1ZGUgJXM7CisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdHMgdG8gZGVzY3JpcHRpb24gaWYgbm90IHNldC4KKworICAgICIiIgorCisgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKworICAgICMgSWYgdGhlIHJvb3QgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QsIGRvbid0IGVycm9yIG91dCBsYXRlciBidXQgc2lsZW50bHkgZG8KKyAgICAjIG5vIHNwbGl0dGluZy4KKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZHZhciArIHJvb3QpOgorICAgICAgICByZXR1cm4gW10KKworICAgIG1sID0gZC5nZXRWYXIoIk1MUFJFRklYIiwgVHJ1ZSkKKyAgICBpZiBtbDoKKyAgICAgICAgaWYgbm90IG91dHB1dF9wYXR0ZXJuLnN0YXJ0c3dpdGgobWwpOgorICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm4gPSBtbCArIG91dHB1dF9wYXR0ZXJuCisKKyAgICAgICAgbmV3ZGVwcyA9IFtdCisgICAgICAgIGZvciBkZXAgaW4gKGV4dHJhX2RlcGVuZHMgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICBpZiBkZXAuc3RhcnRzd2l0aChtbCk6CisgICAgICAgICAgICAgICAgbmV3ZGVwcy5hcHBlbmQoZGVwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXdkZXBzLmFwcGVuZChtbCArIGRlcCkKKyAgICAgICAgaWYgbmV3ZGVwczoKKyAgICAgICAgICAgIGV4dHJhX2RlcGVuZHMgPSAiICIuam9pbihuZXdkZXBzKQorCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBzcGxpdF9wYWNrYWdlcyA9IFtdCisKKyAgICBpZiBwb3N0aW5zdDoKKyAgICAgICAgcG9zdGluc3QgPSAnIyEvYmluL3NoXG4nICsgcG9zdGluc3QgKyAnXG4nCisgICAgaWYgcG9zdHJtOgorICAgICAgICBwb3N0cm0gPSAnIyEvYmluL3NoXG4nICsgcG9zdHJtICsgJ1xuJworICAgIGlmIG5vdCByZWN1cnNpdmU6CisgICAgICAgIG9ianMgPSBvcy5saXN0ZGlyKGR2YXIgKyByb290KQorICAgIGVsc2U6CisgICAgICAgIG9ianMgPSBbXQorICAgICAgICBmb3Igd2Fsa3Jvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoZHZhciArIHJvb3QpOgorICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgcmVscGF0aCA9IG9zLnBhdGguam9pbih3YWxrcm9vdCwgZmlsZSkucmVwbGFjZShkdmFyICsgcm9vdCArICcvJywgJycsIDEpCisgICAgICAgICAgICAgICAgaWYgcmVscGF0aDoKKyAgICAgICAgICAgICAgICAgICAgb2Jqcy5hcHBlbmQocmVscGF0aCkKKworICAgIGlmIGV4dHJhX2RlcGVuZHMgPT0gTm9uZToKKyAgICAgICAgZXh0cmFfZGVwZW5kcyA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisKKyAgICBpZiBub3Qgc3VtbWFyeToKKyAgICAgICAgc3VtbWFyeSA9IGRlc2NyaXB0aW9uCisKKyAgICBmb3IgbyBpbiBzb3J0ZWQob2Jqcyk6CisgICAgICAgIGltcG9ydCByZSwgc3RhdAorICAgICAgICBpZiBtYXRjaF9wYXRoOgorICAgICAgICAgICAgbSA9IHJlLm1hdGNoKGZpbGVfcmVnZXgsIG8pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtID0gcmUubWF0Y2goZmlsZV9yZWdleCwgb3MucGF0aC5iYXNlbmFtZShvKSkKKworICAgICAgICBpZiBub3QgbToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGYgPSBvcy5wYXRoLmpvaW4oZHZhciArIHJvb3QsIG8pCisgICAgICAgIG1vZGUgPSBvcy5sc3RhdChmKS5zdF9tb2RlCisgICAgICAgIGlmIG5vdCAoc3RhdC5TX0lTUkVHKG1vZGUpIG9yIChhbGxvd19saW5rcyBhbmQgc3RhdC5TX0lTTE5LKG1vZGUpKSBvciAoYWxsb3dfZGlycyBhbmQgc3RhdC5TX0lTRElSKG1vZGUpKSk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBvbiA9IGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKG0uZ3JvdXAoMSkpCisgICAgICAgIHBrZyA9IG91dHB1dF9wYXR0ZXJuICUgb24KKyAgICAgICAgc3BsaXRfcGFja2FnZXMuYXBwZW5kKHBrZykKKyAgICAgICAgaWYgbm90IHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgIGlmIHByZXBlbmQ6CisgICAgICAgICAgICAgICAgcGFja2FnZXMgPSBbcGtnXSArIHBhY2thZ2VzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhY2thZ2VzLmFwcGVuZChwa2cpCisgICAgICAgIG9sZGZpbGVzID0gZC5nZXRWYXIoJ0ZJTEVTXycgKyBwa2csIFRydWUpCisgICAgICAgIG5ld2ZpbGUgPSBvcy5wYXRoLmpvaW4ocm9vdCwgbykKKyAgICAgICAgIyBUaGVzZSBuYW1lcyB3aWxsIGJlIHBhc3NlZCB0aHJvdWdoIGdsb2IoKSBzbyBpZiB0aGUgZmlsZW5hbWUgYWN0dWFsbHkKKyAgICAgICAgIyBjb250YWlucyAqIG9yID8gKHJhcmUsIGJ1dCBwb3NzaWJsZSkgd2UgbmVlZCB0byBoYW5kbGUgdGhhdCBzcGVjaWFsbHkKKyAgICAgICAgbmV3ZmlsZSA9IG5ld2ZpbGUucmVwbGFjZSgnKicsICdbKl0nKQorICAgICAgICBuZXdmaWxlID0gbmV3ZmlsZS5yZXBsYWNlKCc/JywgJ1s/XScpCisgICAgICAgIGlmIG5vdCBvbGRmaWxlczoKKyAgICAgICAgICAgIHRoZV9maWxlcyA9IFtuZXdmaWxlXQorICAgICAgICAgICAgaWYgYXV4X2ZpbGVzX3BhdHRlcm46CisgICAgICAgICAgICAgICAgaWYgdHlwZShhdXhfZmlsZXNfcGF0dGVybikgaXMgbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGZwIGluIGF1eF9maWxlc19wYXR0ZXJuOgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlX2ZpbGVzLmFwcGVuZChmcCAlIG9uKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRoZV9maWxlcy5hcHBlbmQoYXV4X2ZpbGVzX3BhdHRlcm4gJSBvbikKKyAgICAgICAgICAgIGlmIGF1eF9maWxlc19wYXR0ZXJuX3ZlcmJhdGltOgorICAgICAgICAgICAgICAgIGlmIHR5cGUoYXV4X2ZpbGVzX3BhdHRlcm5fdmVyYmF0aW0pIGlzIGxpc3Q6CisgICAgICAgICAgICAgICAgICAgIGZvciBmcCBpbiBhdXhfZmlsZXNfcGF0dGVybl92ZXJiYXRpbToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZV9maWxlcy5hcHBlbmQoZnAgJSBtLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRoZV9maWxlcy5hcHBlbmQoYXV4X2ZpbGVzX3BhdHRlcm5fdmVyYmF0aW0gJSBtLmdyb3VwKDEpKQorICAgICAgICAgICAgZC5zZXRWYXIoJ0ZJTEVTXycgKyBwa2csICIgIi5qb2luKHRoZV9maWxlcykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkLnNldFZhcignRklMRVNfJyArIHBrZywgb2xkZmlsZXMgKyAiICIgKyBuZXdmaWxlKQorICAgICAgICBpZiBleHRyYV9kZXBlbmRzICE9ICcnOgorICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ1JERVBFTkRTXycgKyBwa2csICcgJyArIGV4dHJhX2RlcGVuZHMpCisgICAgICAgIGlmIG5vdCBkLmdldFZhcignREVTQ1JJUFRJT05fJyArIHBrZywgVHJ1ZSk6CisgICAgICAgICAgICBkLnNldFZhcignREVTQ1JJUFRJT05fJyArIHBrZywgZGVzY3JpcHRpb24gJSBvbikKKyAgICAgICAgaWYgbm90IGQuZ2V0VmFyKCdTVU1NQVJZXycgKyBwa2csIFRydWUpOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1NVTU1BUllfJyArIHBrZywgc3VtbWFyeSAlIG9uKQorICAgICAgICBpZiBwb3N0aW5zdDoKKyAgICAgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJyArIHBrZywgcG9zdGluc3QpCisgICAgICAgIGlmIHBvc3RybToKKyAgICAgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdHJtXycgKyBwa2csIHBvc3RybSkKKyAgICAgICAgaWYgY2FsbGFibGUoaG9vayk6CisgICAgICAgICAgICBob29rKGYsIHBrZywgZmlsZV9yZWdleCwgb3V0cHV0X3BhdHRlcm4sIG0uZ3JvdXAoMSkpCisKKyAgICBkLnNldFZhcignUEFDS0FHRVMnLCAnICcuam9pbihwYWNrYWdlcykpCisgICAgcmV0dXJuIHNwbGl0X3BhY2thZ2VzCisKK1BBQ0tBR0VfREVQRU5EUyArPSAiZmlsZS1uYXRpdmUiCisKK3B5dGhvbiAoKSB7CisgICAgaWYgZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgIT0gJyc6CisgICAgICAgIGRlcHMgPSAiIgorICAgICAgICBmb3IgZGVwIGluIChkLmdldFZhcignUEFDS0FHRV9ERVBFTkRTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICBkZXBzICs9ICIgJXM6ZG9fcG9wdWxhdGVfc3lzcm9vdCIgJSBkZXAKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlJywgJ2RlcGVuZHMnLCBkZXBzKQorCisgICAgICAgICMgc2hsaWJzIHJlcXVpcmVzIGFueSBERVBFTkRTIHRvIGhhdmUgYWxyZWFkeSBwYWNrYWdlZCBmb3IgdGhlICoubGlzdCBmaWxlcworICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2UnLCAnZGVwdGFzaycsICIgZG9fcGFja2FnZWRhdGEiKQorfQorCisjIEdldCBhIGxpc3Qgb2YgZmlsZXMgZnJvbSBmaWxlIHZhcnMgYnkgc2VhcmNoaW5nIGZpbGVzIHVuZGVyIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKKyMgVGhlIGxpc3QgY29udGFpbnMgc3ltbGlua3MsIGRpcmVjdG9yaWVzIGFuZCBub3JtYWwgZmlsZXMuCitkZWYgZmlsZXNfZnJvbV9maWxldmFycyhmaWxldmFycyk6CisgICAgaW1wb3J0IG9zLGdsb2IKKyAgICBjcGF0aCA9IG9lLmNhY2hlZHBhdGguQ2FjaGVkUGF0aCgpCisgICAgZmlsZXMgPSBbXQorICAgIGZvciBmIGluIGZpbGV2YXJzOgorICAgICAgICBpZiBvcy5wYXRoLmlzYWJzKGYpOgorICAgICAgICAgICAgZiA9ICcuJyArIGYKKyAgICAgICAgaWYgbm90IGYuc3RhcnRzd2l0aCgiLi8iKToKKyAgICAgICAgICAgIGYgPSAnLi8nICsgZgorICAgICAgICBnbG9iYmVkID0gZ2xvYi5nbG9iKGYpCisgICAgICAgIGlmIGdsb2JiZWQ6CisgICAgICAgICAgICBpZiBbIGYgXSAhPSBnbG9iYmVkOgorICAgICAgICAgICAgICAgIGZpbGVzICs9IGdsb2JiZWQKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmaWxlcy5hcHBlbmQoZikKKworICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICBpZiBub3QgY3BhdGguaXNsaW5rKGYpOgorICAgICAgICAgICAgaWYgY3BhdGguaXNkaXIoZik6CisgICAgICAgICAgICAgICAgbmV3ZmlsZXMgPSBbIG9zLnBhdGguam9pbihmLHgpIGZvciB4IGluIG9zLmxpc3RkaXIoZikgXQorICAgICAgICAgICAgICAgIGlmIG5ld2ZpbGVzOgorICAgICAgICAgICAgICAgICAgICBmaWxlcyArPSBuZXdmaWxlcworCisgICAgcmV0dXJuIGZpbGVzCisKKyMgQ2FsbGVkIGluIHBhY2thZ2VfPHJwbSxpcGssZGViPi5iYmNsYXNzIHRvIGdldCB0aGUgY29ycmVjdCBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZXMKK2RlZiBnZXRfY29uZmZpbGVzKHBrZywgZCk6CisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICByb290ID0gb3MucGF0aC5qb2luKHBrZ2Rlc3QsIHBrZykKKyAgICBjd2QgPSBvcy5nZXRjd2QoKQorICAgIG9zLmNoZGlyKHJvb3QpCisKKyAgICBjb25mZmlsZXMgPSBkLmdldFZhcignQ09ORkZJTEVTXyVzJyAlIHBrZywgVHJ1ZSk7CisgICAgaWYgY29uZmZpbGVzID09IE5vbmU6CisgICAgICAgIGNvbmZmaWxlcyA9IGQuZ2V0VmFyKCdDT05GRklMRVMnLCBUcnVlKQorICAgIGlmIGNvbmZmaWxlcyA9PSBOb25lOgorICAgICAgICBjb25mZmlsZXMgPSAiIgorICAgIGNvbmZmaWxlcyA9IGNvbmZmaWxlcy5zcGxpdCgpCisgICAgY29uZl9vcmlnX2xpc3QgPSBmaWxlc19mcm9tX2ZpbGV2YXJzKGNvbmZmaWxlcykKKworICAgICMgUmVtb3ZlIGxpbmtzIGFuZCBkaXJlY3RvcmllcyBmcm9tIGNvbmZfb3JpZ19saXN0IHRvIGdldCBjb25mX2xpc3Qgd2hpY2ggb25seSBjb250YWlucyBub3JtYWwgZmlsZXMKKyAgICBjb25mX2xpc3QgPSBbXQorICAgIGZvciBmIGluIGNvbmZfb3JpZ19saXN0OgorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGYpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoZik6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZik6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBjb25mX2xpc3QuYXBwZW5kKGYpCisKKyAgICAjIFJlbW92ZSB0aGUgbGVhZGluZyAnLi8nCisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGNvbmZfbGlzdCkpOgorICAgICAgICBjb25mX2xpc3RbaV0gPSBjb25mX2xpc3RbaV1bMTpdCisKKyAgICBvcy5jaGRpcihjd2QpCisgICAgcmV0dXJuIGNvbmZfbGlzdAorCitkZWYgc3BsaXRkZWJ1Z2luZm8oZmlsZSwgZGVidWdmaWxlLCBkZWJ1Z3NyY2Rpciwgc291cmNlZmlsZSwgZCk6CisgICAgIyBGdW5jdGlvbiB0byBzcGxpdCBhIHNpbmdsZSBmaWxlIGludG8gdHdvIGNvbXBvbmVudHMsIG9uZSBpcyB0aGUgc3RyaXBwZWQKKyAgICAjIHRhcmdldCBzeXN0ZW0gYmluYXJ5LCB0aGUgb3RoZXIgY29udGFpbnMgYW55IGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4gVGhlCisgICAgIyB0d28gZmlsZXMgYXJlIGxpbmtlZCB0byByZWZlcmVuY2UgZWFjaCBvdGhlci4KKyAgICAjCisgICAgIyBzb3VyY2VmaWxlIGlzIGFsc28gZ2VuZXJhdGVkIGNvbnRhaW5pbmcgYSBsaXN0IG9mIGRlYnVnc291cmNlcworCisgICAgaW1wb3J0IHN0YXQKKworICAgIGR2YXIgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisgICAgb2JqY29weSA9IGQuZ2V0VmFyKCJPQkpDT1BZIiwgVHJ1ZSkKKyAgICBkZWJ1Z2VkaXQgPSBkLmV4cGFuZCgiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3JwbS9iaW4vZGVidWdlZGl0IikKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoIldPUktESVIiLCBUcnVlKQorICAgIHdvcmtwYXJlbnRkaXIgPSBkLmdldFZhcigiREVCVUdTUkNfT1ZFUlJJREVfUEFUSCIsIFRydWUpIG9yIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUod29ya2RpcikpCisKKyAgICAjIFdlIGlnbm9yZSBrZXJuZWwgbW9kdWxlcywgd2UgZG9uJ3QgZ2VuZXJhdGUgZGVidWcgaW5mbyBmaWxlcy4KKyAgICBpZiBmaWxlLmZpbmQoIi9saWIvbW9kdWxlcy8iKSAhPSAtMSBhbmQgZmlsZS5lbmRzd2l0aCgiLmtvIik6CisgICAgICAgIHJldHVybiAxCisKKyAgICBuZXdtb2RlID0gTm9uZQorICAgIGlmIG5vdCBvcy5hY2Nlc3MoZmlsZSwgb3MuV19PSykgb3Igb3MuYWNjZXNzKGZpbGUsIG9zLlJfT0spOgorICAgICAgICBvcmlnbW9kZSA9IG9zLnN0YXQoZmlsZSlbc3RhdC5TVF9NT0RFXQorICAgICAgICBuZXdtb2RlID0gb3JpZ21vZGUgfCBzdGF0LlNfSVdSSVRFIHwgc3RhdC5TX0lSRUFECisgICAgICAgIG9zLmNobW9kKGZpbGUsIG5ld21vZGUpCisKKyAgICAjIFdlIG5lZWQgdG8gZXh0cmFjdCB0aGUgZGVidWcgc3JjIGluZm9ybWF0aW9uIGhlcmUuLi4KKyAgICBpZiBkZWJ1Z3NyY2RpcjoKKyAgICAgICAgY21kID0gIiclcycgLWIgJyVzJyAtZCAnJXMnIC1pIC1sICclcycgJyVzJyIgJSAoZGVidWdlZGl0LCB3b3JrcGFyZW50ZGlyLCBkZWJ1Z3NyY2Rpciwgc291cmNlZmlsZSwgZmlsZSkKKyAgICAgICAgKHJldHZhbCwgb3V0cHV0KSA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dChjbWQpCisgICAgICAgIGlmIHJldHZhbDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJkZWJ1Z2VkaXQgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVzIChjbWQgd2FzICVzKSVzIiAlIChyZXR2YWwsIGNtZCwgIjpcbiVzIiAlIG91dHB1dCBpZiBvdXRwdXQgZWxzZSAiIikpCisKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGRlYnVnZmlsZSkpCisKKyAgICBjbWQgPSAiJyVzJyAtLW9ubHkta2VlcC1kZWJ1ZyAnJXMnICclcyciICUgKG9iamNvcHksIGZpbGUsIGRlYnVnZmlsZSkKKyAgICAocmV0dmFsLCBvdXRwdXQpID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKyAgICBpZiByZXR2YWw6CisgICAgICAgIGJiLmZhdGFsKCJvYmpjb3B5IGZhaWxlZCB3aXRoIGV4aXQgY29kZSAlcyAoY21kIHdhcyAlcyklcyIgJSAocmV0dmFsLCBjbWQsICI6XG4lcyIgJSBvdXRwdXQgaWYgb3V0cHV0IGVsc2UgIiIpKQorCisgICAgIyBTZXQgdGhlIGRlYnVnbGluayB0byBoYXZlIHRoZSB2aWV3IG9mIHRoZSBmaWxlIHBhdGggb24gdGhlIHRhcmdldAorICAgIGNtZCA9ICInJXMnIC0tYWRkLWdudS1kZWJ1Z2xpbms9JyVzJyAnJXMnIiAlIChvYmpjb3B5LCBkZWJ1Z2ZpbGUsIGZpbGUpCisgICAgKHJldHZhbCwgb3V0cHV0KSA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dChjbWQpCisgICAgaWYgcmV0dmFsOgorICAgICAgICBiYi5mYXRhbCgib2JqY29weSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJXMgKGNtZCB3YXMgJXMpJXMiICUgKHJldHZhbCwgY21kLCAiOlxuJXMiICUgb3V0cHV0IGlmIG91dHB1dCBlbHNlICIiKSkKKworICAgIGlmIG5ld21vZGU6CisgICAgICAgIG9zLmNobW9kKGZpbGUsIG9yaWdtb2RlKQorCisgICAgcmV0dXJuIDAKKworZGVmIGNvcHlkZWJ1Z3NvdXJjZXMoZGVidWdzcmNkaXIsIGQpOgorICAgICMgVGhlIGRlYnVnIHNyYyBpbmZvcm1hdGlvbiB3cml0dGVuIG91dCB0byBzb3VyY2VmaWxlIGlzIGZ1cnRoZXIgcHJvY2VjZXNzZWQKKyAgICAjIGFuZCBjb3BpZWQgdG8gdGhlIGRlc3RpbmF0aW9uIGhlcmUuCisKKyAgICBpbXBvcnQgc3RhdAorCisgICAgc291cmNlZmlsZSA9IGQuZXhwYW5kKCIke1dPUktESVJ9L2RlYnVnc291cmNlcy5saXN0IikKKyAgICBpZiBkZWJ1Z3NyY2RpciBhbmQgb3MucGF0aC5pc2ZpbGUoc291cmNlZmlsZSk6CisgICAgICAgIGR2YXIgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisgICAgICAgIHN0cmlwID0gZC5nZXRWYXIoIlNUUklQIiwgVHJ1ZSkKKyAgICAgICAgb2JqY29weSA9IGQuZ2V0VmFyKCJPQkpDT1BZIiwgVHJ1ZSkKKyAgICAgICAgZGVidWdlZGl0ID0gZC5leHBhbmQoIiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9ycG0vYmluL2RlYnVnZWRpdCIpCisgICAgICAgIHdvcmtkaXIgPSBkLmdldFZhcigiV09SS0RJUiIsIFRydWUpCisgICAgICAgIHdvcmtwYXJlbnRkaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKHdvcmtkaXIpKQorICAgICAgICB3b3JrYmFzZWRpciA9IG9zLnBhdGguYmFzZW5hbWUob3MucGF0aC5kaXJuYW1lKHdvcmtkaXIpKSArICIvIiArIG9zLnBhdGguYmFzZW5hbWUod29ya2RpcikKKworICAgICAgICBub3N1Y2hkaXIgPSBbXQorICAgICAgICBiYXNlcGF0aCA9IGR2YXIKKyAgICAgICAgZm9yIHAgaW4gZGVidWdzcmNkaXIuc3BsaXQoIi8iKToKKyAgICAgICAgICAgIGJhc2VwYXRoID0gYmFzZXBhdGggKyAiLyIgKyBwCisgICAgICAgICAgICBpZiBub3QgY3BhdGguZXhpc3RzKGJhc2VwYXRoKToKKyAgICAgICAgICAgICAgICBub3N1Y2hkaXIuYXBwZW5kKGJhc2VwYXRoKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoYmFzZXBhdGgpCisgICAgICAgIGNwYXRoLnVwZGF0ZWNhY2hlKGJhc2VwYXRoKQorCisgICAgICAgIHByb2Nlc3NkZWJ1Z3NyYyA9ICAiTENfQUxMPUMgOyBzb3J0IC16IC11ICclcycgfCBlZ3JlcCAtdiAteiAnKDxpbnRlcm5hbD58PGJ1aWx0LWluPikkJyB8ICIKKyAgICAgICAgIyBXZSBuZWVkIHRvIGlnbm9yZSBmaWxlcyB0aGF0IGFyZSBub3QgYWN0dWFsbHkgb3VycworICAgICAgICAjIHdlIGRvIHRoaXMgYnkgb25seSBwYXlpbmcgYXR0ZW50aW9uIHRvIGl0ZW1zIGZyb20gdGhpcyBwYWNrYWdlCisgICAgICAgIHByb2Nlc3NkZWJ1Z3NyYyArPSAiZmdyZXAgLXp3ICclcycgfCAiCisgICAgICAgIHByb2Nlc3NkZWJ1Z3NyYyArPSAiKGNkICclcycgOyBjcGlvIC1wZDBtbEwgLS1uby1wcmVzZXJ2ZS1vd25lciAnJXMlcycgMj4vZGV2L251bGwpIgorCisgICAgICAgIGNtZCA9IHByb2Nlc3NkZWJ1Z3NyYyAlIChzb3VyY2VmaWxlLCB3b3JrYmFzZWRpciwgd29ya3BhcmVudGRpciwgZHZhciwgZGVidWdzcmNkaXIpCisgICAgICAgIChyZXR2YWwsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgICAgICAjIENhbiAiZmFpbCIgaWYgaW50ZXJuYWwgaGVhZGVycy90cmFuc2llbnQgc291cmNlcyBhcmUgYXR0ZW1wdGVkCisgICAgICAgICNpZiByZXR2YWw6CisgICAgICAgICMgICAgYmIuZmF0YWwoImRlYnVnIHNvdXJjZSBjb3B5IGZhaWxlZCB3aXRoIGV4aXQgY29kZSAlcyAoY21kIHdhcyAlcykiICUgKHJldHZhbCwgY21kKSkKKworICAgICAgICAjIGNwaW8gc2VlbXMgdG8gaGF2ZSBhIGJ1ZyB3aXRoIC1sTCB0b2dldGhlciBhbmQgc3ltYm9saWMgbGlua3MgYXJlIGp1c3QgY29waWVkLCBub3QgZGVyZWZlcmVuY2VkLgorICAgICAgICAjIFdvcmsgYXJvdW5kIHRoaXMgYnkgbWFudWFsbHkgZmluZGluZyBhbmQgY29weWluZyBhbnkgc3ltYm9saWMgbGlua3MgdGhhdCBtYWRlIGl0IHRocm91Z2guCisgICAgICAgIGNtZCA9ICJmaW5kICVzJXMgLXR5cGUgbCAtcHJpbnQwIC1kZWxldGUgfCBzZWQgcyMlcyVzLyMjZyB8IChjZCAnJXMnIDsgY3BpbyAtcGQwbUwgLS1uby1wcmVzZXJ2ZS1vd25lciAnJXMlcycgMj4vZGV2L251bGwpIiAlIChkdmFyLCBkZWJ1Z3NyY2RpciwgZHZhciwgZGVidWdzcmNkaXIsIHdvcmtwYXJlbnRkaXIsIGR2YXIsIGRlYnVnc3JjZGlyKQorICAgICAgICAocmV0dmFsLCBvdXRwdXQpID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKyAgICAgICAgaWYgcmV0dmFsOgorICAgICAgICAgICAgYmIuZmF0YWwoImRlYnVnc3JjIHN5bWxpbmsgZml4dXAgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVzIChjbWQgd2FzICVzKSIgJSAocmV0dmFsLCBjbWQpKQorCisgICAgICAgICMgVGhlIGNvcHkgYnkgY3BpbyBtYXkgaGF2ZSByZXN1bHRlZCBpbiBzb21lIGVtcHR5IGRpcmVjdG9yaWVzISAgUmVtb3ZlIHRoZXNlCisgICAgICAgIGNtZCA9ICJmaW5kICVzJXMgLWVtcHR5IC10eXBlIGQgLWRlbGV0ZSIgJSAoZHZhciwgZGVidWdzcmNkaXIpCisgICAgICAgIChyZXR2YWwsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgICAgICBpZiByZXR2YWw6CisgICAgICAgICAgICBiYi5mYXRhbCgiZW1wdHkgZGlyZWN0b3J5IHJlbW92YWwgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVzIChjbWQgd2FzICVzKSVzIiAlIChyZXR2YWwsIGNtZCwgIjpcbiVzIiAlIG91dHB1dCBpZiBvdXRwdXQgZWxzZSAiIikpCisKKyAgICAgICAgIyBBbHNvIHJlbW92ZSBkZWJ1Z3NyY2RpciBpZiBpdHMgZW1wdHkKKyAgICAgICAgZm9yIHAgaW4gbm9zdWNoZGlyWzo6LTFdOgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocCkgYW5kIG5vdCBvcy5saXN0ZGlyKHApOgorICAgICAgICAgICAgICAgIG9zLnJtZGlyKHApCisKKyMKKyMgUGFja2FnZSBkYXRhIGhhbmRsaW5nIHJvdXRpbmVzCisjCisKK2RlZiBnZXRfcGFja2FnZV9tYXBwaW5nIChwa2csIGJhc2Vwa2csIGQpOgorICAgIGltcG9ydCBvZS5wYWNrYWdlZGF0YQorCisgICAgZGF0YSA9IG9lLnBhY2thZ2VkYXRhLnJlYWRfc3VicGtnZGF0YShwa2csIGQpCisgICAga2V5ID0gIlBLR18lcyIgJSBwa2cKKworICAgIGlmIGtleSBpbiBkYXRhOgorICAgICAgICAjIEhhdmUgdG8gYXZvaWQgdW5kb2luZyB0aGUgd3JpdGVfZXh0cmFfcGtncyhnbG9iYWxfdmFyaWFudHMuLi4pCisgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2FsbGFyY2gnLCBkKSBhbmQgZGF0YVtrZXldID09IGJhc2Vwa2c6CisgICAgICAgICAgICByZXR1cm4gcGtnCisgICAgICAgIHJldHVybiBkYXRhW2tleV0KKworICAgIHJldHVybiBwa2cKKworZGVmIGdldF9wYWNrYWdlX2FkZGl0aW9uYWxfbWV0YWRhdGEgKHBrZ190eXBlLCBkKToKKyAgICBiYXNlX2tleSA9ICJQQUNLQUdFX0FERF9NRVRBREFUQSIKKyAgICBmb3Iga2V5IGluICgiJXNfJXMiICUgKGJhc2Vfa2V5LCBwa2dfdHlwZS51cHBlcigpKSwgYmFzZV9rZXkpOgorICAgICAgICBpZiBkLmdldFZhcihrZXksIEZhbHNlKSBpcyBOb25lOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZC5zZXRWYXJGbGFnKGtleSwgInR5cGUiLCAibGlzdCIpCisgICAgICAgIGlmIGQuZ2V0VmFyRmxhZyhrZXksICJzZXBhcmF0b3IiKSBpcyBOb25lOgorICAgICAgICAgICAgZC5zZXRWYXJGbGFnKGtleSwgInNlcGFyYXRvciIsICJcXG4iKQorICAgICAgICBtZXRhZGF0YV9maWVsZHMgPSBbZmllbGQuc3RyaXAoKSBmb3IgZmllbGQgaW4gb2UuZGF0YS50eXBlZF92YWx1ZShrZXksIGQpXQorICAgICAgICByZXR1cm4gIlxuIi5qb2luKG1ldGFkYXRhX2ZpZWxkcykuc3RyaXAoKQorCitkZWYgcnVudGltZV9tYXBwaW5nX3JlbmFtZSAodmFybmFtZSwgcGtnLCBkKToKKyAgICAjYmIubm90ZSgiJXMgYmVmb3JlOiAlcyIgJSAodmFybmFtZSwgZC5nZXRWYXIodmFybmFtZSwgVHJ1ZSkpKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygncGFja2FnZWdyb3VwJywgZCk6CisgICAgICAgIHJldHVybgorCisgICAgbmV3X2RlcGVuZHMgPSB7fQorICAgIGRlcHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZC5nZXRWYXIodmFybmFtZSwgVHJ1ZSkgb3IgIiIpCisgICAgZm9yIGRlcGVuZCBpbiBkZXBzOgorICAgICAgICBuZXdfZGVwZW5kID0gZ2V0X3BhY2thZ2VfbWFwcGluZyhkZXBlbmQsIHBrZywgZCkKKyAgICAgICAgbmV3X2RlcGVuZHNbbmV3X2RlcGVuZF0gPSBkZXBzW2RlcGVuZF0KKworICAgIGQuc2V0VmFyKHZhcm5hbWUsIGJiLnV0aWxzLmpvaW5fZGVwcyhuZXdfZGVwZW5kcywgY29tbWFzZXA9RmFsc2UpKQorCisgICAgI2JiLm5vdGUoIiVzIGFmdGVyOiAlcyIgJSAodmFybmFtZSwgZC5nZXRWYXIodmFybmFtZSwgVHJ1ZSkpKQorCisjCisjIFBhY2thZ2UgZnVuY3Rpb25zIHN1aXRhYmxlIGZvciBpbmNsdXNpb24gaW4gUEFDS0FHRUZVTkNTCisjCisKK3B5dGhvbiBwYWNrYWdlX2dldF9hdXRvX3ByKCkgeworICAgIGltcG9ydCBvZS5wcnNlcnZpY2UKKyAgICBpbXBvcnQgcmUKKworICAgICMgU3VwcG9ydCBwZXIgcmVjaXBlIFBSU0VSVl9IT1NUCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGhvc3QgPSBkLmdldFZhcigiUFJTRVJWX0hPU1RfIiArIHBuLCBUcnVlKQorICAgIGlmIG5vdCAoaG9zdCBpcyBOb25lKToKKyAgICAgICAgZC5zZXRWYXIoIlBSU0VSVl9IT1NUIiwgaG9zdCkKKworICAgIHBrZ3YgPSBkLmdldFZhcigiUEtHViIsIFRydWUpCisKKyAgICAjIFBSIFNlcnZlciBub3QgYWN0aXZlLCBoYW5kbGUgQVVUT0lOQworICAgIGlmIG5vdCBkLmdldFZhcignUFJTRVJWX0hPU1QnLCBUcnVlKToKKyAgICAgICAgaWYgJ0FVVE9JTkMnIGluIHBrZ3Y6CisgICAgICAgICAgICBkLnNldFZhcigiUEtHViIsIHBrZ3YucmVwbGFjZSgiQVVUT0lOQyIsICIwIikpCisgICAgICAgIHJldHVybgorCisgICAgYXV0b19wciA9IE5vbmUKKyAgICBwdiA9IGQuZ2V0VmFyKCJQViIsIFRydWUpCisgICAgdmVyc2lvbiA9IGQuZ2V0VmFyKCJQUkFVVE9JTlgiLCBUcnVlKQorICAgIHBrZ2FyY2ggPSBkLmdldFZhcigiUEFDS0FHRV9BUkNIIiwgVHJ1ZSkKKyAgICBjaGVja3N1bSA9IGQuZ2V0VmFyKCJCQl9UQVNLSEFTSCIsIFRydWUpCisKKyAgICBpZiBkLmdldFZhcignUFJTRVJWX0xPQ0tET1dOJywgVHJ1ZSk6CisgICAgICAgIGF1dG9fcHIgPSBkLmdldFZhcignUFJBVVRPXycgKyB2ZXJzaW9uICsgJ18nICsgcGtnYXJjaCwgVHJ1ZSkgb3IgZC5nZXRWYXIoJ1BSQVVUT18nICsgdmVyc2lvbiwgVHJ1ZSkgb3IgTm9uZQorICAgICAgICBpZiBhdXRvX3ByIGlzIE5vbmU6CisgICAgICAgICAgICBiYi5mYXRhbCgiQ2FuIE5PVCBnZXQgUFJBVVRPIGZyb20gbG9ja2Rvd24gZXhwb3J0ZWQgZmlsZSIpCisgICAgICAgIGQuc2V0VmFyKCdQUkFVVE8nLHN0cihhdXRvX3ByKSkKKyAgICAgICAgcmV0dXJuCisKKyAgICB0cnk6CisgICAgICAgIGNvbm4gPSBkLmdldFZhcigiX19QUlNFUlZfQ09OTiIsIFRydWUpCisgICAgICAgIGlmIGNvbm4gaXMgTm9uZToKKyAgICAgICAgICAgIGNvbm4gPSBvZS5wcnNlcnZpY2UucHJzZXJ2X21ha2VfY29ubihkKQorICAgICAgICBpZiBjb25uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgIkFVVE9JTkMiIGluIHBrZ3Y6CisgICAgICAgICAgICAgICAgc3JjcHYgPSBiYi5mZXRjaDIuZ2V0X3NyY3JldihkKQorICAgICAgICAgICAgICAgIGJhc2VfdmVyID0gIkFVVE9JTkMtJXMiICUgdmVyc2lvbls6dmVyc2lvbi5maW5kKHNyY3B2KV0KKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvbm4uZ2V0UFIoYmFzZV92ZXIsIHBrZ2FyY2gsIHNyY3B2KQorICAgICAgICAgICAgICAgIGQuc2V0VmFyKCJQS0dWIiwgcGtndi5yZXBsYWNlKCJBVVRPSU5DIiwgc3RyKHZhbHVlKSkpCisKKyAgICAgICAgICAgIGF1dG9fcHIgPSBjb25uLmdldFBSKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgYmIuZmF0YWwoIkNhbiBOT1QgZ2V0IFBSQVVUTywgZXhjZXB0aW9uICVzIiAlICBzdHIoZSkpCisgICAgaWYgYXV0b19wciBpcyBOb25lOgorICAgICAgICBiYi5mYXRhbCgiQ2FuIE5PVCBnZXQgUFJBVVRPIGZyb20gcmVtb3RlIFBSIHNlcnZpY2UiKQorICAgIGQuc2V0VmFyKCdQUkFVVE8nLHN0cihhdXRvX3ByKSkKK30KKworTE9DQUxFQkFTRVBOID8/PSAiJHtQTn0iCisKK3B5dGhvbiBwYWNrYWdlX2RvX3NwbGl0X2xvY2FsZXMoKSB7CisgICAgaWYgKGQuZ2V0VmFyKCdQQUNLQUdFX05PX0xPQ0FMRScsIFRydWUpID09ICcxJyk6CisgICAgICAgIGJiLmRlYnVnKDEsICJwYWNrYWdlIHJlcXVlc3RlZCBub3Qgc3BsaXR0aW5nIGxvY2FsZXMiKQorICAgICAgICByZXR1cm4KKworICAgIHBhY2thZ2VzID0gKGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisKKyAgICBkYXRhZGlyID0gZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKQorICAgIGlmIG5vdCBkYXRhZGlyOgorICAgICAgICBiYi5ub3RlKCJkYXRhZGlyIG5vdCBkZWZpbmVkIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorICAgIHBuID0gZC5nZXRWYXIoJ0xPQ0FMRUJBU0VQTicsIFRydWUpCisKKyAgICBpZiBwbiArICctbG9jYWxlJyBpbiBwYWNrYWdlczoKKyAgICAgICAgcGFja2FnZXMucmVtb3ZlKHBuICsgJy1sb2NhbGUnKQorCisgICAgbG9jYWxlZGlyID0gb3MucGF0aC5qb2luKGR2YXIgKyBkYXRhZGlyLCAnbG9jYWxlJykKKworICAgIGlmIG5vdCBjcGF0aC5pc2Rpcihsb2NhbGVkaXIpOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTm8gbG9jYWxlIGZpbGVzIGluIHRoaXMgcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgbG9jYWxlcyA9IG9zLmxpc3RkaXIobG9jYWxlZGlyKQorCisgICAgc3VtbWFyeSA9IGQuZ2V0VmFyKCdTVU1NQVJZJywgVHJ1ZSkgb3IgcG4KKyAgICBkZXNjcmlwdGlvbiA9IGQuZ2V0VmFyKCdERVNDUklQVElPTicsIFRydWUpIG9yICIiCisgICAgbG9jYWxlX3NlY3Rpb24gPSBkLmdldFZhcignTE9DQUxFX1NFQ1RJT04nLCBUcnVlKQorICAgIG1scHJlZml4ID0gZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkgb3IgIiIKKyAgICBmb3IgbCBpbiBzb3J0ZWQobG9jYWxlcyk6CisgICAgICAgIGxuID0gbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUobCkKKyAgICAgICAgcGtnID0gcG4gKyAnLWxvY2FsZS0nICsgbG4KKyAgICAgICAgcGFja2FnZXMuYXBwZW5kKHBrZykKKyAgICAgICAgZC5zZXRWYXIoJ0ZJTEVTXycgKyBwa2csIG9zLnBhdGguam9pbihkYXRhZGlyLCAnbG9jYWxlJywgbCkpCisgICAgICAgIGQuc2V0VmFyKCdSUkVDT01NRU5EU18nICsgcGtnLCAnJXN2aXJ0dWFsLWxvY2FsZS0lcycgJSAobWxwcmVmaXgsIGxuKSkKKyAgICAgICAgZC5zZXRWYXIoJ1JQUk9WSURFU18nICsgcGtnLCAnJXMtbG9jYWxlICVzJXMtdHJhbnNsYXRpb24nICUgKHBuLCBtbHByZWZpeCwgbG4pKQorICAgICAgICBkLnNldFZhcignU1VNTUFSWV8nICsgcGtnLCAnJXMgLSAlcyB0cmFuc2xhdGlvbnMnICUgKHN1bW1hcnksIGwpKQorICAgICAgICBkLnNldFZhcignREVTQ1JJUFRJT05fJyArIHBrZywgJyVzICBUaGlzIHBhY2thZ2UgY29udGFpbnMgbGFuZ3VhZ2UgdHJhbnNsYXRpb24gZmlsZXMgZm9yIHRoZSAlcyBsb2NhbGUuJyAlIChkZXNjcmlwdGlvbiwgbCkpCisgICAgICAgIGlmIGxvY2FsZV9zZWN0aW9uOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1NFQ1RJT05fJyArIHBrZywgbG9jYWxlX3NlY3Rpb24pCisKKyAgICBkLnNldFZhcignUEFDS0FHRVMnLCAnICcuam9pbihwYWNrYWdlcykpCisKKyAgICAjIERpc2FibGVkIGJ5IFJQIDE4LzA2LzA3CisgICAgIyBXaWxkY2FyZHMgYXJlbid0IHN1cHBvcnRlZCBpbiBkZWJpYW4KKyAgICAjIFRoZXkgYnJlYWsgd2l0aCBpcGtnIHNpbmNlIGdsaWJjLWxvY2FsZSogd2lsbCBtZWFuIHRoYXQKKyAgICAjIGdsaWJjLWxvY2FsZWRhdGEtdHJhbnNsaXQqIHdvbid0IGluc3RhbGwgYXMgYSBkZXBlbmRlbmN5CisgICAgIyBmb3Igc29tZSBvdGhlciBwYWNrYWdlIHdoaWNoIGJyZWFrcyBtZXRhLXRvb2xjaGFpbgorICAgICMgUHJvYmFibHkgYnJlYWtzIHNpbmNlIHZpcnR1YWwtbG9jYWxlLSBpc24ndCBwcm92aWRlZCBhbnl3aGVyZQorICAgICNyZGVwID0gKGQuZ2V0VmFyKCdSREVQRU5EU18lcycgJSBwbiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAjcmRlcC5hcHBlbmQoJyVzLWxvY2FsZSonICUgcG4pCisgICAgI2Quc2V0VmFyKCdSREVQRU5EU18lcycgJSBwbiwgJyAnLmpvaW4ocmRlcCkpCit9CisKK3B5dGhvbiBwZXJmb3JtX3BhY2thZ2Vjb3B5ICgpIHsKKyAgICBkZXN0ID0gZC5nZXRWYXIoJ0QnLCBUcnVlKQorICAgIGR2YXIgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisKKyAgICAjIFN0YXJ0IGJ5IHBhY2thZ2UgcG9wdWxhdGlvbiBieSB0YWtpbmcgYSBjb3B5IG9mIHRoZSBpbnN0YWxsZWQKKyAgICAjIGZpbGVzIHRvIG9wZXJhdGUgb24KKyAgICAjIFByZXNlcnZlIHNwYXJzZSBmaWxlcyBhbmQgaGFyZCBsaW5rcworICAgIGNtZCA9ICd0YXIgLWNmIC0gLUMgJXMgLXAgLiB8IHRhciAteGYgLSAtQyAlcycgJSAoZGVzdCwgZHZhcikKKyAgICAocmV0dmFsLCBvdXRwdXQpID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKyAgICBpZiByZXR2YWw6CisgICAgICAgIGJiLmZhdGFsKCJmaWxlIGNvcHkgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVzIChjbWQgd2FzICVzKSVzIiAlIChyZXR2YWwsIGNtZCwgIjpcbiVzIiAlIG91dHB1dCBpZiBvdXRwdXQgZWxzZSAiIikpCisKKyAgICAjIHJlcGxhY2UgUlBBVEhzIGZvciB0aGUgbmF0aXZlc2RrIGJpbmFyaWVzLCB0byBtYWtlIHRoZW0gcmVsb2NhdGFibGUKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcy1jYW5hZGlhbicsIGQpOgorICAgICAgICBycGF0aF9yZXBsYWNlIChkdmFyLCBkKQorfQorcGVyZm9ybV9wYWNrYWdlY29weVtjbGVhbmRpcnNdID0gIiR7UEtHRH0iCitwZXJmb3JtX3BhY2thZ2Vjb3B5W2RpcnNdID0gIiR7UEtHRH0iCisKKyMgV2UgZ2VuZXJhdGUgYSBtYXN0ZXIgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBwcm9jZXNzLCB3ZSBzdGFydCBieQorIyBzZWVkaW5nIHRoaXMgbGlzdCB3aXRoIHJlYXNvbmFibGUgZGVmYXVsdHMsIHRoZW4gbG9hZCBmcm9tCisjIHRoZSBmcy1wZXJtcy50eHQgZmlsZXMKK3B5dGhvbiBmaXh1cF9wZXJtcyAoKSB7CisgICAgaW1wb3J0IHB3ZCwgZ3JwCisKKyAgICAjIGluaXQgdXNpbmcgYSBzdHJpbmcgd2l0aCB0aGUgc2FtZSBmb3JtYXQgYXMgYSBsaW5lIGFzIGRvY3VtZW50ZWQgaW4KKyAgICAjIHRoZSBmcy1wZXJtcy50eHQgZmlsZQorICAgICMgPHBhdGg+IDxtb2RlPiA8dWlkPiA8Z2lkPiA8d2Fsaz4gPGZtb2RlPiA8ZnVpZD4gPGZnaWQ+CisgICAgIyA8cGF0aD4gbGluayA8bGluayB0YXJnZXQ+CisgICAgIworICAgICMgX19zdHJfXyBjYW4gYmUgdXNlZCB0byBwcmludCBvdXQgYW4gZW50cnkgaW4gdGhlIGlucHV0IGZvcm1hdAorICAgICMKKyAgICAjIGlmIGZzX3Blcm1zX2VudHJ5LnBhdGggaXMgTm9uZToKKyAgICAjICAgIGFuIGVycm9yIG9jY3VyZWQKKyAgICAjIGlmIGZzX3Blcm1zX2VudHJ5LmxpbmssIHlvdSBjYW4gcmV0cmlldmU6CisgICAgIyAgICBmc19wZXJtc19lbnRyeS5wYXRoID0gcGF0aAorICAgICMgICAgZnNfcGVybXNfZW50cnkubGluayA9IHRhcmdldCBvZiBsaW5rCisgICAgIyBpZiBub3QgZnNfcGVybXNfZW50cnkubGluaywgeW91IGNhbiByZXRyaWV2ZToKKyAgICAjICAgIGZzX3Blcm1zX2VudHJ5LnBhdGggPSBwYXRoCisgICAgIyAgICBmc19wZXJtc19lbnRyeS5tb2RlID0gZXhwZWN0ZWQgZGlyIG1vZGUgb3IgTm9uZQorICAgICMgICAgZnNfcGVybXNfZW50cnkudWlkID0gZXhwZWN0ZWQgdWlkIG9yIC0xCisgICAgIyAgICBmc19wZXJtc19lbnRyeS5naWQgPSBleHBlY3RlZCBnaWQgb3IgLTEKKyAgICAjICAgIGZzX3Blcm1zX2VudHJ5LndhbGsgPSAndHJ1ZScgb3Igc29tZXRoaW5nIGVsc2UKKyAgICAjICAgIGZzX3Blcm1zX2VudHJ5LmZtb2RlID0gZXhwZWN0ZWQgZmlsZSBtb2RlIG9yIE5vbmUKKyAgICAjICAgIGZzX3Blcm1zX2VudHJ5LmZ1aWQgPSBleHBlY3RlZCBmaWxlIHVpZCBvciAtMQorICAgICMgICAgZnNfcGVybXNfZW50cnlfZmdpZCA9IGV4cGVjdGVkIGZpbGUgZ2lkIG9yIC0xCisgICAgY2xhc3MgZnNfcGVybXNfZW50cnkoKToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpbmUpOgorICAgICAgICAgICAgbHNwbGl0ID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICBpZiBsZW4obHNwbGl0KSA9PSAzIGFuZCBsc3BsaXRbMV0ubG93ZXIoKSA9PSAibGluayI6CisgICAgICAgICAgICAgICAgc2VsZi5fc2V0bGluayhsc3BsaXRbMF0sIGxzcGxpdFsyXSkKKyAgICAgICAgICAgIGVsaWYgbGVuKGxzcGxpdCkgPT0gODoKKyAgICAgICAgICAgICAgICBzZWxmLl9zZXRkaXIobHNwbGl0WzBdLCBsc3BsaXRbMV0sIGxzcGxpdFsyXSwgbHNwbGl0WzNdLCBsc3BsaXRbNF0sIGxzcGxpdFs1XSwgbHNwbGl0WzZdLCBsc3BsaXRbN10pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1zZyA9ICJGaXh1cCBQZXJtczogaW52YWxpZCBjb25maWcgbGluZSAlcyIgJSBsaW5lCisgICAgICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInBlcm0tY29uZmlnIiwgbXNnLCBkKQorICAgICAgICAgICAgICAgIHNlbGYucGF0aCA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLmxpbmsgPSBOb25lCisKKyAgICAgICAgZGVmIF9zZXRkaXIoc2VsZiwgcGF0aCwgbW9kZSwgdWlkLCBnaWQsIHdhbGssIGZtb2RlLCBmdWlkLCBmZ2lkKToKKyAgICAgICAgICAgIHNlbGYucGF0aCA9IG9zLnBhdGgubm9ybXBhdGgocGF0aCkKKyAgICAgICAgICAgIHNlbGYubGluayA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYubW9kZSA9IHNlbGYuX3Byb2Ntb2RlKG1vZGUpCisgICAgICAgICAgICBzZWxmLnVpZCAgPSBzZWxmLl9wcm9jdWlkKHVpZCkKKyAgICAgICAgICAgIHNlbGYuZ2lkICA9IHNlbGYuX3Byb2NnaWQoZ2lkKQorICAgICAgICAgICAgc2VsZi53YWxrID0gd2Fsay5sb3dlcigpCisgICAgICAgICAgICBzZWxmLmZtb2RlID0gc2VsZi5fcHJvY21vZGUoZm1vZGUpCisgICAgICAgICAgICBzZWxmLmZ1aWQgPSBzZWxmLl9wcm9jdWlkKGZ1aWQpCisgICAgICAgICAgICBzZWxmLmZnaWQgPSBzZWxmLl9wcm9jZ2lkKGZnaWQpCisKKyAgICAgICAgZGVmIF9zZXRsaW5rKHNlbGYsIHBhdGgsIGxpbmspOgorICAgICAgICAgICAgc2VsZi5wYXRoID0gb3MucGF0aC5ub3JtcGF0aChwYXRoKQorICAgICAgICAgICAgc2VsZi5saW5rID0gbGluaworCisgICAgICAgIGRlZiBfcHJvY21vZGUoc2VsZiwgbW9kZSk6CisgICAgICAgICAgICBpZiBub3QgbW9kZSBvciAobW9kZSBhbmQgbW9kZSA9PSAiLSIpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnQobW9kZSw4KQorCisgICAgICAgICMgTm90ZSB1aWQvZ2lkIC0xIGhhcyBzcGVjaWFsIHNpZ25pZmljYW5jZSBpbiBvcy5sY2hvd24KKyAgICAgICAgZGVmIF9wcm9jdWlkKHNlbGYsIHVpZCk6CisgICAgICAgICAgICBpZiB1aWQgaXMgTm9uZSBvciB1aWQgPT0gIi0iOgorICAgICAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICAgICAgZWxpZiB1aWQuaXNkaWdpdCgpOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnQodWlkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcHdkLmdldHB3bmFtKHVpZCkucHdfdWlkCisKKyAgICAgICAgZGVmIF9wcm9jZ2lkKHNlbGYsIGdpZCk6CisgICAgICAgICAgICBpZiBnaWQgaXMgTm9uZSBvciBnaWQgPT0gIi0iOgorICAgICAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICAgICAgZWxpZiBnaWQuaXNkaWdpdCgpOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnQoZ2lkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gZ3JwLmdldGdybmFtKGdpZCkuZ3JfZ2lkCisKKyAgICAgICAgIyBVc2UgZm9yIGRlYnVnZ2luZyB0aGUgZW50cmllcworICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYubGluazoKKyAgICAgICAgICAgICAgICByZXR1cm4gIiVzIGxpbmsgJXMiICUgKHNlbGYucGF0aCwgc2VsZi5saW5rKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtb2RlID0gIi0iCisgICAgICAgICAgICAgICAgaWYgc2VsZi5tb2RlOgorICAgICAgICAgICAgICAgICAgICBtb2RlID0gIjAlbyIgJSBzZWxmLm1vZGUKKyAgICAgICAgICAgICAgICBmbW9kZSA9ICItIgorICAgICAgICAgICAgICAgIGlmIHNlbGYuZm1vZGU6CisgICAgICAgICAgICAgICAgICAgIGZtb2RlID0gIjAlbyIgJSBzZWxmLmZtb2RlCisgICAgICAgICAgICAgICAgdWlkID0gc2VsZi5fbWFwdWdpZChzZWxmLnVpZCkKKyAgICAgICAgICAgICAgICBnaWQgPSBzZWxmLl9tYXB1Z2lkKHNlbGYuZ2lkKQorICAgICAgICAgICAgICAgIGZ1aWQgPSBzZWxmLl9tYXB1Z2lkKHNlbGYuZnVpZCkKKyAgICAgICAgICAgICAgICBmZ2lkID0gc2VsZi5fbWFwdWdpZChzZWxmLmZnaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuICIlcyAlcyAlcyAlcyAlcyAlcyAlcyAlcyIgJSAoc2VsZi5wYXRoLCBtb2RlLCB1aWQsIGdpZCwgc2VsZi53YWxrLCBmbW9kZSwgZnVpZCwgZmdpZCkKKworICAgICAgICBkZWYgX21hcHVnaWQoc2VsZiwgaWQpOgorICAgICAgICAgICAgaWYgaWQgaXMgTm9uZSBvciBpZCA9PSAtMToKKyAgICAgICAgICAgICAgICByZXR1cm4gIi0iCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAiJWQiICUgaWQKKworICAgICMgRml4IHRoZSBwZXJtaXNzaW9uLCBvd25lciBhbmQgZ3JvdXAgb2YgcGF0aAorICAgIGRlZiBmaXhfcGVybXMocGF0aCwgbW9kZSwgdWlkLCBnaWQsIGRpcik6CisgICAgICAgIGlmIG1vZGUgYW5kIG5vdCBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgICAgICNiYi5ub3RlKCJGaXh1cCBQZXJtczogY2htb2QgMCVvICVzIiAlIChtb2RlLCBkaXIpKQorICAgICAgICAgICAgb3MuY2htb2QocGF0aCwgbW9kZSkKKyAgICAgICAgIyAtMSBpcyBhIHNwZWNpYWwgdmFsdWUgdGhhdCBtZWFucyBkb24ndCBjaGFuZ2UgdGhlIHVpZC9naWQKKyAgICAgICAgIyBpZiB0aGV5IGFyZSBCT1RIIC0xLCBkb24ndCBib3RoZXIgdG8gbGNob3duCisgICAgICAgIGlmIG5vdCAodWlkID09IC0xIGFuZCBnaWQgPT0gLTEpOgorICAgICAgICAgICAgI2JiLm5vdGUoIkZpeHVwIFBlcm1zOiBsY2hvd24gJWQ6JWQgJXMiICUgKHVpZCwgZ2lkLCBkaXIpKQorICAgICAgICAgICAgb3MubGNob3duKHBhdGgsIHVpZCwgZ2lkKQorCisgICAgIyBSZXR1cm4gYSBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZXMgYmFzZWQgb24gZWl0aGVyIHRoZSBkZWZhdWx0CisgICAgIyBmaWxlcy9mcy1wZXJtcy50eHQgb3IgdGhlIGNvbnRlbnRzIG9mIEZJTEVTWVNURU1fUEVSTVNfVEFCTEVTCisgICAgIyBwYXRocyBhcmUgcmVzb2x2ZWQgdmlhIEJCUEFUSAorICAgIGRlZiBnZXRfZnNfcGVybXNfbGlzdChkKToKKyAgICAgICAgc3RyID0gIiIKKyAgICAgICAgYmJwYXRoID0gZC5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpCisgICAgICAgIGZzX3Blcm1zX3RhYmxlcyA9IGQuZ2V0VmFyKCdGSUxFU1lTVEVNX1BFUk1TX1RBQkxFUycsIFRydWUpCisgICAgICAgIGlmIG5vdCBmc19wZXJtc190YWJsZXM6CisgICAgICAgICAgICBmc19wZXJtc190YWJsZXMgPSAnZmlsZXMvZnMtcGVybXMudHh0JworICAgICAgICBmb3IgY29uZl9maWxlIGluIGZzX3Blcm1zX3RhYmxlcy5zcGxpdCgpOgorICAgICAgICAgICAgc3RyICs9ICIgJXMiICUgYmIudXRpbHMud2hpY2goYmJwYXRoLCBjb25mX2ZpbGUpCisgICAgICAgIHJldHVybiBzdHIKKworCisKKyAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorCisgICAgZnNfcGVybXNfdGFibGUgPSB7fQorCisgICAgIyBCeSBkZWZhdWx0IGFsbCBvZiB0aGUgc3RhbmRhcmQgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGluCisgICAgIyBiaXRiYWtlLmNvbmYgd2lsbCBnZXQgMDc1NSByb290OnJvb3QuCisgICAgdGFyZ2V0X3BhdGhfdmFycyA9IFsgICAgJ2Jhc2VfcHJlZml4JywKKyAgICAgICAgICAgICAgICAncHJlZml4JywKKyAgICAgICAgICAgICAgICAnZXhlY19wcmVmaXgnLAorICAgICAgICAgICAgICAgICdiYXNlX2JpbmRpcicsCisgICAgICAgICAgICAgICAgJ2Jhc2Vfc2JpbmRpcicsCisgICAgICAgICAgICAgICAgJ2Jhc2VfbGliZGlyJywKKyAgICAgICAgICAgICAgICAnZGF0YWRpcicsCisgICAgICAgICAgICAgICAgJ3N5c2NvbmZkaXInLAorICAgICAgICAgICAgICAgICdzZXJ2aWNlZGlyJywKKyAgICAgICAgICAgICAgICAnc2hhcmVkc3RhdGVkaXInLAorICAgICAgICAgICAgICAgICdsb2NhbHN0YXRlZGlyJywKKyAgICAgICAgICAgICAgICAnaW5mb2RpcicsCisgICAgICAgICAgICAgICAgJ21hbmRpcicsCisgICAgICAgICAgICAgICAgJ2RvY2RpcicsCisgICAgICAgICAgICAgICAgJ2JpbmRpcicsCisgICAgICAgICAgICAgICAgJ3NiaW5kaXInLAorICAgICAgICAgICAgICAgICdsaWJleGVjZGlyJywKKyAgICAgICAgICAgICAgICAnbGliZGlyJywKKyAgICAgICAgICAgICAgICAnaW5jbHVkZWRpcicsCisgICAgICAgICAgICAgICAgJ29sZGluY2x1ZGVkaXInIF0KKworICAgIGZvciBwYXRoIGluIHRhcmdldF9wYXRoX3ZhcnM6CisgICAgICAgIGRpciA9IGQuZ2V0VmFyKHBhdGgsIFRydWUpIG9yICIiCisgICAgICAgIGlmIGRpciA9PSAiIjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGZzX3Blcm1zX3RhYmxlW2Rpcl0gPSBmc19wZXJtc19lbnRyeShiYi5kYXRhLmV4cGFuZCgiJXMgMDc1NSByb290IHJvb3QgZmFsc2UgLSAtIC0iICUgKGRpciksIGQpKQorCisgICAgIyBOb3cgd2UgYWN0dWFsbHkgbG9hZCBmcm9tIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzCisgICAgZm9yIGNvbmYgaW4gZ2V0X2ZzX3Blcm1zX2xpc3QoZCkuc3BsaXQoKToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29uZik6CisgICAgICAgICAgICBmID0gb3Blbihjb25mKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyMnKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBsc3BsaXQgPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBpZiBsZW4obHNwbGl0KSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIGxlbihsc3BsaXQpICE9IDggYW5kIG5vdCAobGVuKGxzcGxpdCkgPT0gMyBhbmQgbHNwbGl0WzFdLmxvd2VyKCkgPT0gImxpbmsiKToKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gIkZpeHVwIHBlcm1zOiAlcyBpbnZhbGlkIGxpbmU6ICVzIiAlIChjb25mLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigicGVybS1saW5lIiwgbXNnLCBkKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVudHJ5ID0gZnNfcGVybXNfZW50cnkoZC5leHBhbmQobGluZSkpCisgICAgICAgICAgICAgICAgaWYgZW50cnkgYW5kIGVudHJ5LnBhdGg6CisgICAgICAgICAgICAgICAgICAgIGZzX3Blcm1zX3RhYmxlW2VudHJ5LnBhdGhdID0gZW50cnkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgIyBEZWJ1ZyAtLSBsaXN0IG91dCBpbi1tZW1vcnkgdGFibGUKKyAgICAjZm9yIGRpciBpbiBmc19wZXJtc190YWJsZToKKyAgICAjICAgIGJiLm5vdGUoIkZpeHVwIFBlcm1zOiAlczogJXMiICUgKGRpciwgc3RyKGZzX3Blcm1zX3RhYmxlW2Rpcl0pKSkKKworICAgICMgV2UgcHJvY2VzcyBsaW5rcyBmaXJzdCwgc28gd2UgY2FuIGdvIGJhY2sgYW5kIGZpeHVwIGRpcmVjdG9yeSBvd25lcnNoaXAKKyAgICAjIGZvciBhbnkgbmV3bHkgY3JlYXRlZCBkaXJlY3RvcmllcworICAgIGZvciBkaXIgaW4gZnNfcGVybXNfdGFibGU6CisgICAgICAgIGlmIG5vdCBmc19wZXJtc190YWJsZVtkaXJdLmxpbms6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIG9yaWdpbiA9IGR2YXIgKyBkaXIKKyAgICAgICAgaWYgbm90IChjcGF0aC5leGlzdHMob3JpZ2luKSBhbmQgY3BhdGguaXNkaXIob3JpZ2luKSBhbmQgbm90IGNwYXRoLmlzbGluayhvcmlnaW4pKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgbGluayA9IGZzX3Blcm1zX3RhYmxlW2Rpcl0ubGluaworICAgICAgICBpZiBsaW5rWzBdID09ICIvIjoKKyAgICAgICAgICAgIHRhcmdldCA9IGR2YXIgKyBsaW5rCisgICAgICAgICAgICBwdGFyZ2V0ID0gbGluaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGFyZ2V0ID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcmlnaW4pLCBsaW5rKQorICAgICAgICAgICAgcHRhcmdldCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoZGlyKSwgbGluaykKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHModGFyZ2V0KToKKyAgICAgICAgICAgIG1zZyA9ICJGaXh1cCBQZXJtczogVW5hYmxlIHRvIGNvcnJlY3QgZGlyZWN0b3J5IGxpbmssIHRhcmdldCBhbHJlYWR5IGV4aXN0czogJXMgLT4gJXMiICUgKGRpciwgcHRhcmdldCkKKyAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJwZXJtLWxpbmsiLCBtc2csIGQpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICMgQ3JlYXRlIHBhdGggdG8gbW92ZSBkaXJlY3RvcnkgdG8sIG1vdmUgaXQsIGFuZCB0aGVuIHNldHVwIHRoZSBzeW1saW5rCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUodGFyZ2V0KSkKKyAgICAgICAgI2JiLm5vdGUoIkZpeHVwIFBlcm1zOiBSZW5hbWUgJXMgLT4gJXMiICUgKGRpciwgcHRhcmdldCkpCisgICAgICAgIG9zLnJlbmFtZShvcmlnaW4sIHRhcmdldCkKKyAgICAgICAgI2JiLm5vdGUoIkZpeHVwIFBlcm1zOiBMaW5rICVzIC0+ICVzIiAlIChkaXIsIGxpbmspKQorICAgICAgICBvcy5zeW1saW5rKGxpbmssIG9yaWdpbikKKworICAgIGZvciBkaXIgaW4gZnNfcGVybXNfdGFibGU6CisgICAgICAgIGlmIGZzX3Blcm1zX3RhYmxlW2Rpcl0ubGluazoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgb3JpZ2luID0gZHZhciArIGRpcgorICAgICAgICBpZiBub3QgKGNwYXRoLmV4aXN0cyhvcmlnaW4pIGFuZCBjcGF0aC5pc2RpcihvcmlnaW4pKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgZml4X3Blcm1zKG9yaWdpbiwgZnNfcGVybXNfdGFibGVbZGlyXS5tb2RlLCBmc19wZXJtc190YWJsZVtkaXJdLnVpZCwgZnNfcGVybXNfdGFibGVbZGlyXS5naWQsIGRpcikKKworICAgICAgICBpZiBmc19wZXJtc190YWJsZVtkaXJdLndhbGsgPT0gJ3RydWUnOgorICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsob3JpZ2luKToKKyAgICAgICAgICAgICAgICBmb3IgZHIgaW4gZGlyczoKKyAgICAgICAgICAgICAgICAgICAgZWFjaF9kaXIgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZHIpCisgICAgICAgICAgICAgICAgICAgIGZpeF9wZXJtcyhlYWNoX2RpciwgZnNfcGVybXNfdGFibGVbZGlyXS5tb2RlLCBmc19wZXJtc190YWJsZVtkaXJdLnVpZCwgZnNfcGVybXNfdGFibGVbZGlyXS5naWQsIGRpcikKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgZWFjaF9maWxlID0gb3MucGF0aC5qb2luKHJvb3QsIGYpCisgICAgICAgICAgICAgICAgICAgIGZpeF9wZXJtcyhlYWNoX2ZpbGUsIGZzX3Blcm1zX3RhYmxlW2Rpcl0uZm1vZGUsIGZzX3Blcm1zX3RhYmxlW2Rpcl0uZnVpZCwgZnNfcGVybXNfdGFibGVbZGlyXS5mZ2lkLCBkaXIpCit9CisKK3B5dGhvbiBzcGxpdF9hbmRfc3RyaXBfZmlsZXMgKCkgeworICAgIGltcG9ydCBzdGF0LCBlcnJubworCisgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisKKyAgICAjIFdlIGRlZmF1bHQgdG8gJy5kZWJ1Zycgc3R5bGUKKyAgICBpZiBkLmdldFZhcignUEFDS0FHRV9ERUJVR19TUExJVF9TVFlMRScsIFRydWUpID09ICdkZWJ1Zy1maWxlLWRpcmVjdG9yeSc6CisgICAgICAgICMgU2luZ2xlIGRlYnVnLWZpbGUtZGlyZWN0b3J5IHN0eWxlIGRlYnVnIGluZm8KKyAgICAgICAgZGVidWdhcHBlbmQgPSAiLmRlYnVnIgorICAgICAgICBkZWJ1Z2RpciA9ICIiCisgICAgICAgIGRlYnVnbGliZGlyID0gIi91c3IvbGliL2RlYnVnIgorICAgICAgICBkZWJ1Z3NyY2RpciA9ICIvdXNyL3NyYy9kZWJ1ZyIKKyAgICBlbGlmIGQuZ2V0VmFyKCdQQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxFJywgVHJ1ZSkgPT0gJ2RlYnVnLXdpdGhvdXQtc3JjJzoKKyAgICAgICAgIyBPcmlnaW5hbCBPRS1jb3JlLCBhLmsuYS4gIi5kZWJ1ZyIsIHN0eWxlIGRlYnVnIGluZm8sIGJ1dCB3aXRob3V0IHNvdXJjZXMgaW4gL3Vzci9zcmMvZGVidWcKKyAgICAgICAgZGVidWdhcHBlbmQgPSAiIgorICAgICAgICBkZWJ1Z2RpciA9ICIvLmRlYnVnIgorICAgICAgICBkZWJ1Z2xpYmRpciA9ICIiCisgICAgICAgIGRlYnVnc3JjZGlyID0gIiIKKyAgICBlbHNlOgorICAgICAgICAjIE9yaWdpbmFsIE9FLWNvcmUsIGEuay5hLiAiLmRlYnVnIiwgc3R5bGUgZGVidWcgaW5mbworICAgICAgICBkZWJ1Z2FwcGVuZCA9ICIiCisgICAgICAgIGRlYnVnZGlyID0gIi8uZGVidWciCisgICAgICAgIGRlYnVnbGliZGlyID0gIiIKKyAgICAgICAgZGVidWdzcmNkaXIgPSAiL3Vzci9zcmMvZGVidWciCisKKyAgICBzb3VyY2VmaWxlID0gZC5leHBhbmQoIiR7V09SS0RJUn0vZGVidWdzb3VyY2VzLmxpc3QiKQorICAgIGJiLnV0aWxzLnJlbW92ZShzb3VyY2VmaWxlKQorCisgICAgb3MuY2hkaXIoZHZhcikKKworICAgICMgUmV0dXJuIHR5cGUgKGJpdHMpOgorICAgICMgMCAtIG5vdCBlbGYKKyAgICAjIDEgLSBFTEYKKyAgICAjIDIgLSBzdHJpcHBlZAorICAgICMgNCAtIGV4ZWN1dGFibGUKKyAgICAjIDggLSBzaGFyZWQgbGlicmFyeQorICAgICMgMTYgLSBrZXJuZWwgbW9kdWxlCisgICAgZGVmIGlzRUxGKHBhdGgpOgorICAgICAgICB0eXBlID0gMAorICAgICAgICByZXQsIHJlc3VsdCA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgiZmlsZSBcIiVzXCIiICUgcGF0aC5yZXBsYWNlKCJcIiIsICJcXFwiIikpCisKKyAgICAgICAgaWYgcmV0OgorICAgICAgICAgICAgbXNnID0gInNwbGl0X2FuZF9zdHJpcF9maWxlczogJ2ZpbGUgJXMnIGZhaWxlZCIgJSBwYXRoCisgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigic3BsaXQtc3RyaXAiLCBtc2csIGQpCisgICAgICAgICAgICByZXR1cm4gdHlwZQorCisgICAgICAgICMgTm90IHN0cmlwcGVkCisgICAgICAgIGlmICJFTEYiIGluIHJlc3VsdDoKKyAgICAgICAgICAgIHR5cGUgfD0gMQorICAgICAgICAgICAgaWYgIm5vdCBzdHJpcHBlZCIgbm90IGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICB0eXBlIHw9IDIKKyAgICAgICAgICAgIGlmICJleGVjdXRhYmxlIiBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgdHlwZSB8PSA0CisgICAgICAgICAgICBpZiAic2hhcmVkIiBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgdHlwZSB8PSA4CisgICAgICAgIHJldHVybiB0eXBlCisKKworICAgICMKKyAgICAjIEZpcnN0IGxldHMgZmlndXJlIG91dCBhbGwgb2YgdGhlIGZpbGVzIHdlIG1heSBoYXZlIHRvIHByb2Nlc3MgLi4uIGRvIHRoaXMgb25seSBvbmNlIQorICAgICMKKyAgICBlbGZmaWxlcyA9IHt9CisgICAgc3ltbGlua3MgPSB7fQorICAgIGtlcm5tb2RzID0gW10KKyAgICBpbm9kZXMgPSB7fQorICAgIGxpYmRpciA9IG9zLnBhdGguYWJzcGF0aChkdmFyICsgb3Muc2VwICsgZC5nZXRWYXIoImxpYmRpciIsIFRydWUpKQorICAgIGJhc2VsaWJkaXIgPSBvcy5wYXRoLmFic3BhdGgoZHZhciArIG9zLnNlcCArIGQuZ2V0VmFyKCJiYXNlX2xpYmRpciIsIFRydWUpKQorICAgIGlmIChkLmdldFZhcignSU5ISUJJVF9QQUNLQUdFX1NUUklQJywgVHJ1ZSkgIT0gJzEnKToKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIGNwYXRoLndhbGsoZHZhcik6CisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBmaWxlID0gb3MucGF0aC5qb2luKHJvb3QsIGYpCisgICAgICAgICAgICAgICAgaWYgZmlsZS5lbmRzd2l0aCgiLmtvIikgYW5kIGZpbGUuZmluZCgiL2xpYi9tb2R1bGVzLyIpICE9IC0xOgorICAgICAgICAgICAgICAgICAgICBrZXJubW9kcy5hcHBlbmQoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICMgU2tpcCBkZWJ1ZyBmaWxlcworICAgICAgICAgICAgICAgIGlmIGRlYnVnYXBwZW5kIGFuZCBmaWxlLmVuZHN3aXRoKGRlYnVnYXBwZW5kKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBkZWJ1Z2RpciBhbmQgZGVidWdkaXIgaW4gb3MucGF0aC5kaXJuYW1lKGZpbGVbbGVuKGR2YXIpOl0pOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBsdGFyZ2V0ID0gY3BhdGgucmVhbHBhdGgoZmlsZSwgZHZhciwgRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHMgPSBjcGF0aC5sc3RhdChsdGFyZ2V0KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIChlcnIsIHN0cmVycm9yKSA9IGUuYXJncworICAgICAgICAgICAgICAgICAgICBpZiBlcnIgIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgIyBTa2lwIGJyb2tlbiBzeW1saW5rcworICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIG5vdCBzOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICMgQ2hlY2sgaXRzIGFuIGV4Y3V0YWJsZQorICAgICAgICAgICAgICAgIGlmIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhVU1IpIG9yIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhHUlApIG9yIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhPVEgpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yICgoZmlsZS5zdGFydHN3aXRoKGxpYmRpcikgb3IgZmlsZS5zdGFydHN3aXRoKGJhc2VsaWJkaXIpKSBhbmQgIi5zbyIgaW4gZik6CisgICAgICAgICAgICAgICAgICAgICMgSWYgaXQncyBhIHN5bWxpbmssIGFuZCBwb2ludHMgdG8gYW4gRUxGIGZpbGUsIHdlIGNhcHR1cmUgdGhlIHJlYWRsaW5rIHRhcmdldAorICAgICAgICAgICAgICAgICAgICBpZiBjcGF0aC5pc2xpbmsoZmlsZSk6CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBvcy5yZWFkbGluayhmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNFTEYobHRhcmdldCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2JiLm5vdGUoIlN5bTogJXMgKCVkKSIgJSAobHRhcmdldCwgaXNFTEYobHRhcmdldCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzW2ZpbGVdID0gdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgICMgSXQncyBhIGZpbGUgKG9yIGhhcmRsaW5rKSwgbm90IGEgbGluaworICAgICAgICAgICAgICAgICAgICAjIC4uLmJ1dCBpcyBpdCBFTEYsIGFuZCBpcyBpdCBhbHJlYWR5IHN0cmlwcGVkPworICAgICAgICAgICAgICAgICAgICBlbGZfZmlsZSA9IGlzRUxGKGZpbGUpCisgICAgICAgICAgICAgICAgICAgIGlmIGVsZl9maWxlICYgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVsZl9maWxlICYgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAnYWxyZWFkeS1zdHJpcHBlZCcgaW4gKGQuZ2V0VmFyKCdJTlNBTkVfU0tJUF8nICsgcG4sIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJTa2lwcGluZyBmaWxlICVzIGZyb20gJXMgZm9yIGFscmVhZHktc3RyaXBwZWQgUUEgdGVzdCIgJSAoZmlsZVtsZW4oZHZhcik6XSwgcG4pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJGaWxlICclcycgZnJvbSAlcyB3YXMgYWxyZWFkeSBzdHJpcHBlZCwgdGhpcyB3aWxsIHByZXZlbnQgZnV0dXJlIGRlYnVnZ2luZyEiICUgKGZpbGVbbGVuKGR2YXIpOl0sIHBuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiYWxyZWFkeS1zdHJpcHBlZCIsIG1zZywgZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgICAgICAjIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbiB1bnN0cmlwcGVkIGVsZiBmaWxlLiBXZSBuZWVkIHRvOgorICAgICAgICAgICAgICAgICAgICAgICAgIyAgYSkgTWFrZSBzdXJlIGFueSBmaWxlIHdlIHN0cmlwIGlzIG5vdCBoYXJkbGlua2VkIHRvIGFueXRoaW5nIGVsc2Ugb3V0c2lkZSB0aGlzIHRyZWUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgIGIpIE9ubHkgc3RyaXAgYW55IGhhcmRsaW5rZWQgZmlsZSBvbmNlIChubyByYWNlcykKKyAgICAgICAgICAgICAgICAgICAgICAgICMgIGMpIFRyYWNrIGFueSBoYXJkbGlua3MgYmV0d2VlbiBmaWxlcyBzbyB0aGF0IHdlIGNhbiByZWNvbnN0cnVjdCBtYXRjaGluZyBkZWJ1ZyBmaWxlIGhhcmRsaW5rcworCisgICAgICAgICAgICAgICAgICAgICAgICAjIFVzZSBhIHJlZmVyZW5jZSBvZiBkZXZpY2UgSUQgYW5kIGlub2RlIG51bWJlciB0byBpbmRlbnRpZnkgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfcmVmZXJlbmNlID0gIiVkXyVkIiAlIChzLnN0X2Rldiwgcy5zdF9pbm8pCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmaWxlX3JlZmVyZW5jZSBpbiBpbm9kZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MubGluayhpbm9kZXNbZmlsZV9yZWZlcmVuY2VdWzBdLCBmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlub2Rlc1tmaWxlX3JlZmVyZW5jZV0uYXBwZW5kKGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlub2Rlc1tmaWxlX3JlZmVyZW5jZV0gPSBbZmlsZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGJyZWFrIGhhcmRsaW5rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMuY29weWZpbGUoZmlsZSwgZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGZmaWxlc1tmaWxlXSA9IGVsZl9maWxlCisgICAgICAgICAgICAgICAgICAgICAgICAjIE1vZGlmaWVkIHRoZSBmaWxlIHNvIGNsZWFyIHRoZSBjYWNoZQorICAgICAgICAgICAgICAgICAgICAgICAgY3BhdGgudXBkYXRlY2FjaGUoZmlsZSkKKworICAgICMKKyAgICAjIEZpcnN0IGxldHMgcHJvY2VzcyBkZWJ1ZyBzcGxpdHRpbmcKKyAgICAjCisgICAgaWYgKGQuZ2V0VmFyKCdJTkhJQklUX1BBQ0tBR0VfREVCVUdfU1BMSVQnLCBUcnVlKSAhPSAnMScpOgorICAgICAgICBmb3IgZmlsZSBpbiBlbGZmaWxlczoKKyAgICAgICAgICAgIHNyYyA9IGZpbGVbbGVuKGR2YXIpOl0KKyAgICAgICAgICAgIGRlc3QgPSBkZWJ1Z2xpYmRpciArIG9zLnBhdGguZGlybmFtZShzcmMpICsgZGVidWdkaXIgKyAiLyIgKyBvcy5wYXRoLmJhc2VuYW1lKHNyYykgKyBkZWJ1Z2FwcGVuZAorICAgICAgICAgICAgZnBhdGggPSBkdmFyICsgZGVzdAorCisgICAgICAgICAgICAjIFNwbGl0IHRoZSBmaWxlLi4uCisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGZwYXRoKSkKKyAgICAgICAgICAgICNiYi5ub3RlKCJTcGxpdCAlcyAtPiAlcyIgJSAoZmlsZSwgZnBhdGgpKQorICAgICAgICAgICAgIyBPbmx5IHN0b3JlIG9mZiB0aGUgaGFyZCBsaW5rIHJlZmVyZW5jZSBpZiB3ZSBzdWNjZXNzZnVsbHkgc3BsaXQhCisgICAgICAgICAgICBzcGxpdGRlYnVnaW5mbyhmaWxlLCBmcGF0aCwgZGVidWdzcmNkaXIsIHNvdXJjZWZpbGUsIGQpCisKKyAgICAgICAgIyBIYXJkbGluayBvdXIgZGVidWcgc3ltYm9scyB0byB0aGUgb3RoZXIgaGFyZGxpbmsgY29waWVzCisgICAgICAgIGZvciByZWYgaW4gaW5vZGVzOgorICAgICAgICAgICAgaWYgbGVuKGlub2Rlc1tyZWZdKSA9PSAxOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmb3IgZmlsZSBpbiBpbm9kZXNbcmVmXVsxOl06CisgICAgICAgICAgICAgICAgc3JjID0gZmlsZVtsZW4oZHZhcik6XQorICAgICAgICAgICAgICAgIGRlc3QgPSBkZWJ1Z2xpYmRpciArIG9zLnBhdGguZGlybmFtZShzcmMpICsgZGVidWdkaXIgKyAiLyIgKyBvcy5wYXRoLmJhc2VuYW1lKHNyYykgKyBkZWJ1Z2FwcGVuZAorICAgICAgICAgICAgICAgIGZwYXRoID0gZHZhciArIGRlc3QKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSBpbm9kZXNbcmVmXVswXVtsZW4oZHZhcik6XQorICAgICAgICAgICAgICAgIGZ0YXJnZXQgPSBkdmFyICsgZGVidWdsaWJkaXIgKyBvcy5wYXRoLmRpcm5hbWUodGFyZ2V0KSArIGRlYnVnZGlyICsgIi8iICsgb3MucGF0aC5iYXNlbmFtZSh0YXJnZXQpICsgZGVidWdhcHBlbmQKKyAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGZwYXRoKSkKKyAgICAgICAgICAgICAgICAjYmIubm90ZSgiTGluayAlcyAtPiAlcyIgJSAoZnBhdGgsIGZ0YXJnZXQpKQorICAgICAgICAgICAgICAgIG9zLmxpbmsoZnRhcmdldCwgZnBhdGgpCisKKyAgICAgICAgIyBDcmVhdGUgc3ltbGlua3MgZm9yIGFsbCBjYXNlcyB3ZSB3ZXJlIGFibGUgdG8gc3BsaXQgc3ltYm9scworICAgICAgICBmb3IgZmlsZSBpbiBzeW1saW5rczoKKyAgICAgICAgICAgIHNyYyA9IGZpbGVbbGVuKGR2YXIpOl0KKyAgICAgICAgICAgIGRlc3QgPSBkZWJ1Z2xpYmRpciArIG9zLnBhdGguZGlybmFtZShzcmMpICsgZGVidWdkaXIgKyAiLyIgKyBvcy5wYXRoLmJhc2VuYW1lKHNyYykgKyBkZWJ1Z2FwcGVuZAorICAgICAgICAgICAgZnBhdGggPSBkdmFyICsgZGVzdAorICAgICAgICAgICAgIyBTa2lwIGl0IGlmIHRoZSB0YXJnZXQgZG9lc24ndCBleGlzdAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMgPSBvcy5zdGF0KGZwYXRoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAoZXJyLCBzdHJlcnJvcikgPSBlLmFyZ3MKKyAgICAgICAgICAgICAgICBpZiBlcnIgIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGx0YXJnZXQgPSBzeW1saW5rc1tmaWxlXQorICAgICAgICAgICAgbHBhdGggPSBvcy5wYXRoLmRpcm5hbWUobHRhcmdldCkKKyAgICAgICAgICAgIGxiYXNlID0gb3MucGF0aC5iYXNlbmFtZShsdGFyZ2V0KQorICAgICAgICAgICAgZnRhcmdldCA9ICIiCisgICAgICAgICAgICBpZiBscGF0aCBhbmQgbHBhdGggIT0gIi4iOgorICAgICAgICAgICAgICAgIGZ0YXJnZXQgKz0gbHBhdGggKyBkZWJ1Z2RpciArICIvIgorICAgICAgICAgICAgZnRhcmdldCArPSBsYmFzZSArIGRlYnVnYXBwZW5kCisgICAgICAgICAgICBpZiBscGF0aC5zdGFydHN3aXRoKCIuLiIpOgorICAgICAgICAgICAgICAgIGZ0YXJnZXQgPSBvcy5wYXRoLmpvaW4oIi4uIiwgZnRhcmdldCkKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZnBhdGgpKQorICAgICAgICAgICAgI2JiLm5vdGUoIlN5bWxpbmsgJXMgLT4gJXMiICUgKGZwYXRoLCBmdGFyZ2V0KSkKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoZnRhcmdldCwgZnBhdGgpCisKKyAgICAgICAgIyBQcm9jZXNzIHRoZSBkZWJ1Z3NyY2RpciBpZiByZXF1ZXN0ZWQuLi4KKyAgICAgICAgIyBUaGlzIGNvcGllcyBhbmQgcGxhY2VzIHRoZSByZWZlcmVuY2VkIHNvdXJjZXMgZm9yIGxhdGVyIGRlYnVnZ2luZy4uLgorICAgICAgICBjb3B5ZGVidWdzb3VyY2VzKGRlYnVnc3JjZGlyLCBkKQorICAgICMKKyAgICAjIEVuZCBvZiBkZWJ1ZyBzcGxpdHRpbmcKKyAgICAjCisKKyAgICAjCisgICAgIyBOb3cgbGV0cyBnbyBiYWNrIG92ZXIgdGhpbmdzIGFuZCBzdHJpcCB0aGVtCisgICAgIworICAgIGlmIChkLmdldFZhcignSU5ISUJJVF9QQUNLQUdFX1NUUklQJywgVHJ1ZSkgIT0gJzEnKToKKyAgICAgICAgc3RyaXAgPSBkLmdldFZhcigiU1RSSVAiLCBUcnVlKQorICAgICAgICBzZmlsZXMgPSBbXQorICAgICAgICBmb3IgZmlsZSBpbiBlbGZmaWxlczoKKyAgICAgICAgICAgIGVsZl9maWxlID0gaW50KGVsZmZpbGVzW2ZpbGVdKQorICAgICAgICAgICAgI2JiLm5vdGUoIlN0cmlwICVzIiAlIGZpbGUpCisgICAgICAgICAgICBzZmlsZXMuYXBwZW5kKChmaWxlLCBlbGZfZmlsZSwgc3RyaXApKQorICAgICAgICBmb3IgZiBpbiBrZXJubW9kczoKKyAgICAgICAgICAgIHNmaWxlcy5hcHBlbmQoKGYsIDE2LCBzdHJpcCkpCisKKyAgICAgICAgb2UudXRpbHMubXVsdGlwcm9jZXNzX2V4ZWMoc2ZpbGVzLCBvZS5wYWNrYWdlLnJ1bnN0cmlwKQorCisgICAgIworICAgICMgRW5kIG9mIHN0cmlwCisgICAgIworfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXMgKCkgeworICAgIGltcG9ydCBnbG9iLCByZQorCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBvdXRkaXIgPSBkLmdldFZhcignREVQTE9ZX0RJUicsIFRydWUpCisgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG91dGRpcikKKyAgICBvcy5jaGRpcihkdmFyKQorCisgICAgIyBTYW5pdHkgY2hlY2sgUEFDS0FHRVMgZm9yIGR1cGxpY2F0ZXMKKyAgICAjIFNhbml0eSBzaG91bGQgYmUgbW92ZWQgdG8gc2FuaXR5LmJiY2xhc3Mgb25jZSB3ZSBoYXZlIHRoZSBpbmZyYXN0dWN0dXJlCisgICAgcGFja2FnZV9saXN0ID0gW10KKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgaWYgcGtnIGluIHBhY2thZ2VfbGlzdDoKKyAgICAgICAgICAgIG1zZyA9ICIlcyBpcyBsaXN0ZWQgaW4gUEFDS0FHRVMgbXVsdGlwbGUgdGltZXMsIHRoaXMgbGVhZHMgdG8gcGFja2FnaW5nIGVycm9ycy4iICUgcGtnCisgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigicGFja2FnZXMtbGlzdCIsIG1zZywgZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhY2thZ2VfbGlzdC5hcHBlbmQocGtnKQorICAgIGQuc2V0VmFyKCdQQUNLQUdFUycsICcgJy5qb2luKHBhY2thZ2VfbGlzdCkpCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKworICAgIHNlZW4gPSBbXQorCisgICAgIyBvcy5ta2RpciBtYXNrcyB0aGUgcGVybWlzc2lvbnMgd2l0aCB1bWFzayBzbyB3ZSBoYXZlIHRvIHVuc2V0IGl0IGZpcnN0CisgICAgb2xkdW1hc2sgPSBvcy51bWFzaygwKQorCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlX2xpc3Q6CisgICAgICAgIHJvb3QgPSBvcy5wYXRoLmpvaW4ocGtnZGVzdCwgcGtnKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocm9vdCkKKworICAgICAgICBmaWxlc3ZhciA9IGQuZ2V0VmFyKCdGSUxFU18lcycgJSBwa2csIFRydWUpIG9yICIiCisgICAgICAgIGlmICIvLyIgaW4gZmlsZXN2YXI6CisgICAgICAgICAgICBtc2cgPSAiRklMRVMgdmFyaWFibGUgZm9yIHBhY2thZ2UgJXMgY29udGFpbnMgJy8vJyB3aGljaCBpcyBpbnZhbGlkLiBBdHRlbXB0aW5nIHRvIGZpeCB0aGlzIGJ1dCB5b3Ugc2hvdWxkIGNvcnJlY3QgdGhlIG1ldGFkYXRhLlxuIiAlIHBrZworICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImZpbGVzLWludmFsaWQiLCBtc2csIGQpCisgICAgICAgICAgICBmaWxlc3Zhci5yZXBsYWNlKCIvLyIsICIvIikKKworICAgICAgICBvcmlnZmlsZXMgPSBmaWxlc3Zhci5zcGxpdCgpCisgICAgICAgIGZpbGVzID0gZmlsZXNfZnJvbV9maWxldmFycyhvcmlnZmlsZXMpCisKKyAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICBpZiAobm90IGNwYXRoLmlzbGluayhmaWxlKSkgYW5kIChub3QgY3BhdGguZXhpc3RzKGZpbGUpKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZmlsZSBpbiBzZWVuOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWVuLmFwcGVuZChmaWxlKQorCisgICAgICAgICAgICBkZWYgbWtkaXIoc3JjLCBkZXN0LCBwKToKKyAgICAgICAgICAgICAgICBzcmMgPSBvcy5wYXRoLmpvaW4oc3JjLCBwKQorICAgICAgICAgICAgICAgIGRlc3QgPSBvcy5wYXRoLmpvaW4oZGVzdCwgcCkKKyAgICAgICAgICAgICAgICBmc3RhdCA9IGNwYXRoLnN0YXQoc3JjKQorICAgICAgICAgICAgICAgIG9zLm1rZGlyKGRlc3QsIGZzdGF0LnN0X21vZGUpCisgICAgICAgICAgICAgICAgb3MuY2hvd24oZGVzdCwgZnN0YXQuc3RfdWlkLCBmc3RhdC5zdF9naWQpCisgICAgICAgICAgICAgICAgaWYgcCBub3QgaW4gc2VlbjoKKyAgICAgICAgICAgICAgICAgICAgc2Vlbi5hcHBlbmQocCkKKyAgICAgICAgICAgICAgICBjcGF0aC51cGRhdGVjYWNoZShkZXN0KQorCisgICAgICAgICAgICBkZWYgbWtkaXJfcmVjdXJzZShzcmMsIGRlc3QsIHBhdGhzKToKKyAgICAgICAgICAgICAgICBpZiBjcGF0aC5leGlzdHMoZGVzdCArICcvJyArIHBhdGhzKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgd2hpbGUgcGF0aHMuc3RhcnRzd2l0aCgiLi8iKToKKyAgICAgICAgICAgICAgICAgICAgcGF0aHMgPSBwYXRoc1syOl0KKyAgICAgICAgICAgICAgICBwID0gIi4iCisgICAgICAgICAgICAgICAgZm9yIGMgaW4gcGF0aHMuc3BsaXQoIi8iKToKKyAgICAgICAgICAgICAgICAgICAgcCA9IG9zLnBhdGguam9pbihwLCBjKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgY3BhdGguZXhpc3RzKG9zLnBhdGguam9pbihkZXN0LCBwKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBta2RpcihzcmMsIGRlc3QsIHApCisKKyAgICAgICAgICAgIGlmIGNwYXRoLmlzZGlyKGZpbGUpIGFuZCBub3QgY3BhdGguaXNsaW5rKGZpbGUpOgorICAgICAgICAgICAgICAgIG1rZGlyX3JlY3Vyc2UoZHZhciwgcm9vdCwgZmlsZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBta2Rpcl9yZWN1cnNlKGR2YXIsIHJvb3QsIG9zLnBhdGguZGlybmFtZShmaWxlKSkKKyAgICAgICAgICAgIGZwYXRoID0gb3MucGF0aC5qb2luKHJvb3QsZmlsZSkKKyAgICAgICAgICAgIGlmIG5vdCBjcGF0aC5pc2xpbmsoZmlsZSk6CisgICAgICAgICAgICAgICAgb3MubGluayhmaWxlLCBmcGF0aCkKKyAgICAgICAgICAgICAgICBmc3RhdCA9IGNwYXRoLnN0YXQoZmlsZSkKKyAgICAgICAgICAgICAgICBvcy5jaG1vZChmcGF0aCwgZnN0YXQuc3RfbW9kZSkKKyAgICAgICAgICAgICAgICBvcy5jaG93bihmcGF0aCwgZnN0YXQuc3RfdWlkLCBmc3RhdC5zdF9naWQpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHJldCA9IGJiLnV0aWxzLmNvcHlmaWxlKGZpbGUsIGZwYXRoKQorICAgICAgICAgICAgaWYgcmV0IGlzIEZhbHNlIG9yIHJldCA9PSAwOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIkZpbGUgcG9wdWxhdGlvbiBmYWlsZWQiKQorCisgICAgb3MudW1hc2sob2xkdW1hc2spCisgICAgb3MuY2hkaXIod29ya2RpcikKKworICAgICMgSGFuZGxlIExJQ0VOU0VfRVhDTFVTSU9OCisgICAgcGFja2FnZV9saXN0ID0gW10KKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIGlmIGQuZ2V0VmFyKCdMSUNFTlNFX0VYQ0xVU0lPTi0nICsgcGtnLCBUcnVlKToKKyAgICAgICAgICAgIG1zZyA9ICIlcyBoYXMgYW4gaW5jb21wYXRpYmxlIGxpY2Vuc2UuIEV4Y2x1ZGluZyBmcm9tIHBhY2thZ2luZy4iICUgcGtnCisgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiaW5jb21wYXRpYmxlLWxpY2Vuc2UiLCBtc2csIGQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYWNrYWdlX2xpc3QuYXBwZW5kKHBrZykKKyAgICBkLnNldFZhcignUEFDS0FHRVMnLCAnICcuam9pbihwYWNrYWdlX2xpc3QpKQorCisgICAgdW5zaGlwcGVkID0gW10KKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gY3BhdGgud2FsayhkdmFyKToKKyAgICAgICAgZGlyID0gcm9vdFtsZW4oZHZhcik6XQorICAgICAgICBpZiBub3QgZGlyOgorICAgICAgICAgICAgZGlyID0gb3Muc2VwCisgICAgICAgIGZvciBmIGluIChmaWxlcyArIGRpcnMpOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihkaXIsIGYpCisgICAgICAgICAgICBpZiAoJy4nICsgcGF0aCkgbm90IGluIHNlZW46CisgICAgICAgICAgICAgICAgdW5zaGlwcGVkLmFwcGVuZChwYXRoKQorCisgICAgaWYgdW5zaGlwcGVkICE9IFtdOgorICAgICAgICBtc2cgPSBwbiArICI6IEZpbGVzL2RpcmVjdG9yaWVzIHdlcmUgaW5zdGFsbGVkIGJ1dCBub3Qgc2hpcHBlZCBpbiBhbnkgcGFja2FnZToiCisgICAgICAgIGlmICJpbnN0YWxsZWQtdnMtc2hpcHBlZCIgaW4gKGQuZ2V0VmFyKCdJTlNBTkVfU0tJUF8nICsgcG4sIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgYmIubm90ZSgiUGFja2FnZSAlcyBza2lwcGluZyBRQSB0ZXN0czogaW5zdGFsbGVkLXZzLXNoaXBwZWQiICUgcG4pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgZiBpbiB1bnNoaXBwZWQ6CisgICAgICAgICAgICAgICAgbXNnID0gbXNnICsgIlxuICAiICsgZgorICAgICAgICAgICAgbXNnID0gbXNnICsgIlxuUGxlYXNlIHNldCBGSUxFUyBzdWNoIHRoYXQgdGhlc2UgaXRlbXMgYXJlIHBhY2thZ2VkLiBBbHRlcm5hdGl2ZWx5IGlmIHRoZXkgYXJlIHVubmVlZGVkLCBhdm9pZCBpbnN0YWxsaW5nIHRoZW0gb3IgZGVsZXRlIHRoZW0gd2l0aGluIGRvX2luc3RhbGwuIgorICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImluc3RhbGxlZC12cy1zaGlwcGVkIiwgbXNnLCBkKQorfQorcG9wdWxhdGVfcGFja2FnZXNbZGlyc10gPSAiJHtEfSIKKworcHl0aG9uIHBhY2thZ2VfZml4c3ltbGlua3MgKCkgeworICAgIGltcG9ydCBlcnJubworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgcGFja2FnZXMgPSBkLmdldFZhcigiUEFDS0FHRVMiLCBGYWxzZSkuc3BsaXQoKQorCisgICAgZGFuZ2xpbmdfbGlua3MgPSB7fQorICAgIHBrZ19maWxlcyA9IHt9CisgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgZGFuZ2xpbmdfbGlua3NbcGtnXSA9IFtdCisgICAgICAgIHBrZ19maWxlc1twa2ddID0gW10KKyAgICAgICAgaW5zdF9yb290ID0gb3MucGF0aC5qb2luKHBrZ2Rlc3QsIHBrZykKKyAgICAgICAgZm9yIHBhdGggaW4gcGtnZmlsZXNbcGtnXToKKyAgICAgICAgICAgICAgICBycGF0aCA9IHBhdGhbbGVuKGluc3Rfcm9vdCk6XQorICAgICAgICAgICAgICAgIHBrZ19maWxlc1twa2ddLmFwcGVuZChycGF0aCkKKyAgICAgICAgICAgICAgICBydGFyZ2V0ID0gY3BhdGgucmVhbHBhdGgocGF0aCwgaW5zdF9yb290LCBUcnVlLCBhc3N1bWVfZGlyID0gVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiBub3QgY3BhdGgubGV4aXN0cyhydGFyZ2V0KToKKyAgICAgICAgICAgICAgICAgICAgZGFuZ2xpbmdfbGlua3NbcGtnXS5hcHBlbmQob3MucGF0aC5ub3JtcGF0aChydGFyZ2V0W2xlbihpbnN0X3Jvb3QpOl0pKQorCisgICAgbmV3cmRlcGVuZHMgPSB7fQorICAgIGZvciBwa2cgaW4gZGFuZ2xpbmdfbGlua3M6CisgICAgICAgIGZvciBsIGluIGRhbmdsaW5nX2xpbmtzW3BrZ106CisgICAgICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgICAgICBiYi5kZWJ1ZygxLCAiJXMgY29udGFpbnMgZGFuZ2xpbmcgbGluayAlcyIgJSAocGtnLCBsKSkKKyAgICAgICAgICAgIGZvciBwIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgICAgIGlmIGwgaW4gcGtnX2ZpbGVzW3BdOgorICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBiYi5kZWJ1ZygxLCAidGFyZ2V0IGZvdW5kIGluICVzIiAlIHApCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwID09IHBrZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGtnIG5vdCBpbiBuZXdyZGVwZW5kczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZGVwZW5kc1twa2ddID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3JkZXBlbmRzW3BrZ10uYXBwZW5kKHApCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgZm91bmQgPT0gRmFsc2U6CisgICAgICAgICAgICAgICAgYmIubm90ZSgiJXMgY29udGFpbnMgZGFuZ2xpbmcgc3ltbGluayB0byAlcyIgJSAocGtnLCBsKSkKKworICAgIGZvciBwa2cgaW4gbmV3cmRlcGVuZHM6CisgICAgICAgIHJkZXBlbmRzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGQuZ2V0VmFyKCdSREVQRU5EU18nICsgcGtnLCBUcnVlKSBvciAiIikKKyAgICAgICAgZm9yIHAgaW4gbmV3cmRlcGVuZHNbcGtnXToKKyAgICAgICAgICAgIGlmIHAgbm90IGluIHJkZXBlbmRzOgorICAgICAgICAgICAgICAgIHJkZXBlbmRzW3BdID0gW10KKyAgICAgICAgZC5zZXRWYXIoJ1JERVBFTkRTXycgKyBwa2csIGJiLnV0aWxzLmpvaW5fZGVwcyhyZGVwZW5kcywgY29tbWFzZXA9RmFsc2UpKQorfQorCisKK3B5dGhvbiBwYWNrYWdlX3BhY2thZ2VfbmFtZV9ob29rKCkgeworICAgICIiIgorICAgIEEgcGFja2FnZV9uYW1lX2hvb2sgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gcmV3cml0ZSB0aGUgcGFja2FnZSBuYW1lcyBieQorICAgIGNoYW5naW5nIFBLRy4gIEZvciBhbiBleGFtcGxlLCBzZWUgZGViaWFuLmJiY2xhc3MuCisgICAgIiIiCisgICAgcGFzcworfQorCitFWFBPUlRfRlVOQ1RJT05TIHBhY2thZ2VfbmFtZV9ob29rCisKKworUEtHREVTVFdPUksgPSAiJHtXT1JLRElSfS9wa2dkYXRhIgorCitweXRob24gZW1pdF9wa2dkYXRhKCkgeworICAgIGZyb20gZ2xvYiBpbXBvcnQgZ2xvYgorICAgIGltcG9ydCBqc29uCisKKyAgICBkZWYgd3JpdGVfaWZfZXhpc3RzKGYsIHBrZywgdmFyKToKKyAgICAgICAgZGVmIGVuY29kZShzdHIpOgorICAgICAgICAgICAgaW1wb3J0IGNvZGVjcworICAgICAgICAgICAgYyA9IGNvZGVjcy5nZXRlbmNvZGVyKCJzdHJpbmdfZXNjYXBlIikKKyAgICAgICAgICAgIHJldHVybiBjKHN0cilbMF0KKworICAgICAgICB2YWwgPSBkLmdldFZhcignJXNfJXMnICUgKHZhciwgcGtnKSwgVHJ1ZSkKKyAgICAgICAgaWYgdmFsOgorICAgICAgICAgICAgZi53cml0ZSgnJXNfJXM6ICVzXG4nICUgKHZhciwgcGtnLCBlbmNvZGUodmFsKSkpCisgICAgICAgICAgICByZXR1cm4gdmFsCisgICAgICAgIHZhbCA9IGQuZ2V0VmFyKCclcycgJSAodmFyKSwgVHJ1ZSkKKyAgICAgICAgaWYgdmFsOgorICAgICAgICAgICAgZi53cml0ZSgnJXM6ICVzXG4nICUgKHZhciwgZW5jb2RlKHZhbCkpKQorICAgICAgICByZXR1cm4gdmFsCisKKyAgICBkZWYgd3JpdGVfZXh0cmFfcGtncyh2YXJpYW50cywgcG4sIHBhY2thZ2VzLCBwa2dkYXRhZGlyKToKKyAgICAgICAgZm9yIHZhcmlhbnQgaW4gdmFyaWFudHM6CisgICAgICAgICAgICB3aXRoIG9wZW4oIiVzLyVzLSVzIiAlIChwa2dkYXRhZGlyLCB2YXJpYW50LCBwbiksICd3JykgYXMgZmQ6CisgICAgICAgICAgICAgICAgZmQud3JpdGUoIlBBQ0tBR0VTOiAlc1xuIiAlICcgJy5qb2luKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChsYW1iZGEgcGtnOiAnJXMtJXMnICUgKHZhcmlhbnQsIHBrZyksIHBhY2thZ2VzLnNwbGl0KCkpKSkKKworICAgIGRlZiB3cml0ZV9leHRyYV9ydW50aW1lX3BrZ3ModmFyaWFudHMsIHBhY2thZ2VzLCBwa2dkYXRhZGlyKToKKyAgICAgICAgZm9yIHZhcmlhbnQgaW4gdmFyaWFudHM6CisgICAgICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgbWxfcGtnID0gIiVzLSVzIiAlICh2YXJpYW50LCBwa2cpCisgICAgICAgICAgICAgICAgc3ViZGF0YV9maWxlID0gIiVzL3J1bnRpbWUvJXMiICUgKHBrZ2RhdGFkaXIsIG1sX3BrZykKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc3ViZGF0YV9maWxlLCAndycpIGFzIGZkOgorICAgICAgICAgICAgICAgICAgICBmZC53cml0ZSgiUEtHXyVzOiAlcyIgJSAobWxfcGtnLCBwa2cpKQorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgcGtnZGF0YWRpciA9IGQuZ2V0VmFyKCdQS0dERVNUV09SSycsIFRydWUpCisKKyAgICAjIFRha2Ugc2hhcmVkIGxvY2sgc2luY2Ugd2UncmUgb25seSByZWFkaW5nLCBub3Qgd3JpdGluZworICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUoZC5leHBhbmQoIiR7UEFDS0FHRUxPQ0t9IiksIFRydWUpCisKKyAgICBkYXRhX2ZpbGUgPSBwa2dkYXRhZGlyICsgZC5leHBhbmQoIi8ke1BOfSIgKQorICAgIGYgPSBvcGVuKGRhdGFfZmlsZSwgJ3cnKQorICAgIGYud3JpdGUoIlBBQ0tBR0VTOiAlc1xuIiAlIHBhY2thZ2VzKQorICAgIGYuY2xvc2UoKQorCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGdsb2JhbF92YXJpYW50cyA9IChkLmdldFZhcignTVVMVElMSUJfR0xPQkFMX1ZBUklBTlRTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICB2YXJpYW50cyA9IChkLmdldFZhcignTVVMVElMSUJfVkFSSUFOVFMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygna2VybmVsJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbW9kdWxlLWJhc2UnLCBkKToKKyAgICAgICAgd3JpdGVfZXh0cmFfcGtncyh2YXJpYW50cywgcG4sIHBhY2thZ2VzLCBwa2dkYXRhZGlyKQorCisgICAgaWYgKGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2FsbGFyY2gnLCBkKSBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3BhY2thZ2Vncm91cCcsIGQpKToKKyAgICAgICAgd3JpdGVfZXh0cmFfcGtncyhnbG9iYWxfdmFyaWFudHMsIHBuLCBwYWNrYWdlcywgcGtnZGF0YWRpcikKKworICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIHBrZ3ZhbCA9IGQuZ2V0VmFyKCdQS0dfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBwa2d2YWwgaXMgTm9uZToKKyAgICAgICAgICAgIHBrZ3ZhbCA9IHBrZworICAgICAgICAgICAgZC5zZXRWYXIoJ1BLR18lcycgJSBwa2csIHBrZykKKworICAgICAgICBwa2dkZXN0cGtnID0gb3MucGF0aC5qb2luKHBrZ2Rlc3QsIHBrZykKKyAgICAgICAgZmlsZXMgPSB7fQorICAgICAgICB0b3RhbF9zaXplID0gMAorICAgICAgICBmb3IgZiBpbiBwa2dmaWxlc1twa2ddOgorICAgICAgICAgICAgcmVscHRoID0gb3MucGF0aC5yZWxwYXRoKGYsIHBrZ2Rlc3Rwa2cpCisgICAgICAgICAgICBmc3RhdCA9IG9zLmxzdGF0KGYpCisgICAgICAgICAgICB0b3RhbF9zaXplICs9IGZzdGF0LnN0X3NpemUKKyAgICAgICAgICAgIGZpbGVzW29zLnNlcCArIHJlbHB0aF0gPSBmc3RhdC5zdF9zaXplCisgICAgICAgIGQuc2V0VmFyKCdGSUxFU19JTkZPJywganNvbi5kdW1wcyhmaWxlcykpCisKKyAgICAgICAgc3ViZGF0YV9maWxlID0gcGtnZGF0YWRpciArICIvcnVudGltZS8lcyIgJSBwa2cKKyAgICAgICAgc2YgPSBvcGVuKHN1YmRhdGFfZmlsZSwgJ3cnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1BOJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdQRScpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUFYnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1BSJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdQS0dFJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdQS0dWJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdQS0dSJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdMSUNFTlNFJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdERVNDUklQVElPTicpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnU1VNTUFSWScpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUkRFUEVORFMnKQorICAgICAgICBycHJvdiA9IHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUlBST1ZJREVTJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdSUkVDT01NRU5EUycpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUlNVR0dFU1RTJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdSUkVQTEFDRVMnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1JDT05GTElDVFMnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1NFQ1RJT04nKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1BLRycpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnQUxMT1dfRU1QVFknKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ0ZJTEVTJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdwa2dfcG9zdGluc3QnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ3BrZ19wb3N0cm0nKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ3BrZ19wcmVpbnN0JykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdwa2dfcHJlcm0nKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ0ZJTEVSUFJPVklERVNGTElTVCcpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnRklMRVNfSU5GTycpCisgICAgICAgIGZvciBkZmlsZSBpbiAoZC5nZXRWYXIoJ0ZJTEVSUFJPVklERVNGTElTVF8nICsgcGtnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnRklMRVJQUk9WSURFU18nICsgZGZpbGUpCisKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdGSUxFUkRFUEVORFNGTElTVCcpCisgICAgICAgIGZvciBkZmlsZSBpbiAoZC5nZXRWYXIoJ0ZJTEVSREVQRU5EU0ZMSVNUXycgKyBwa2csIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdGSUxFUkRFUEVORFNfJyArIGRmaWxlKQorCisgICAgICAgIHNmLndyaXRlKCclc18lczogJWRcbicgJSAoJ1BLR1NJWkUnLCBwa2csIHRvdGFsX3NpemUpKQorICAgICAgICBzZi5jbG9zZSgpCisKKyAgICAgICAgIyBTeW1saW5rcyBuZWVkZWQgZm9yIHJwcm92aWRlcyBsb29rdXAKKyAgICAgICAgaWYgcnByb3Y6CisgICAgICAgICAgICBmb3IgcCBpbiBycHJvdi5zdHJpcCgpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgc3ViZGF0YV9zeW0gPSBwa2dkYXRhZGlyICsgIi9ydW50aW1lLXJwcm92aWRlcy8lcy8lcyIgJSAocCwgcGtnKQorICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoc3ViZGF0YV9zeW0pKQorICAgICAgICAgICAgICAgIG9lLnBhdGguc3ltbGluaygiLi4vLi4vcnVudGltZS8lcyIgJSBwa2csIHN1YmRhdGFfc3ltLCBUcnVlKQorCisgICAgICAgIGFsbG93X2VtcHR5ID0gZC5nZXRWYXIoJ0FMTE9XX0VNUFRZXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IGFsbG93X2VtcHR5OgorICAgICAgICAgICAgYWxsb3dfZW1wdHkgPSBkLmdldFZhcignQUxMT1dfRU1QVFknLCBUcnVlKQorICAgICAgICByb290ID0gIiVzLyVzIiAlIChwa2dkZXN0LCBwa2cpCisgICAgICAgIG9zLmNoZGlyKHJvb3QpCisgICAgICAgIGcgPSBnbG9iKCcqJykKKyAgICAgICAgaWYgZyBvciBhbGxvd19lbXB0eSA9PSAiMSI6CisgICAgICAgICAgICAjIFN5bWxpbmtzIG5lZWRlZCBmb3IgcmV2ZXJzZSBsb29rdXBzIChmcm9tIHRoZSBmaW5hbCBwYWNrYWdlIG5hbWUpCisgICAgICAgICAgICBzdWJkYXRhX3N5bSA9IHBrZ2RhdGFkaXIgKyAiL3J1bnRpbWUtcmV2ZXJzZS8lcyIgJSBwa2d2YWwKKyAgICAgICAgICAgIG9lLnBhdGguc3ltbGluaygiLi4vcnVudGltZS8lcyIgJSBwa2csIHN1YmRhdGFfc3ltLCBUcnVlKQorCisgICAgICAgICAgICBwYWNrYWdlZGZpbGUgPSBwa2dkYXRhZGlyICsgJy9ydW50aW1lLyVzLnBhY2thZ2VkJyAlIHBrZworICAgICAgICAgICAgb3BlbihwYWNrYWdlZGZpbGUsICd3JykuY2xvc2UoKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygna2VybmVsJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbW9kdWxlLWJhc2UnLCBkKToKKyAgICAgICAgd3JpdGVfZXh0cmFfcnVudGltZV9wa2dzKHZhcmlhbnRzLCBwYWNrYWdlcywgcGtnZGF0YWRpcikKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2FsbGFyY2gnLCBkKSBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3BhY2thZ2Vncm91cCcsIGQpOgorICAgICAgICB3cml0ZV9leHRyYV9ydW50aW1lX3BrZ3MoZ2xvYmFsX3ZhcmlhbnRzLCBwYWNrYWdlcywgcGtnZGF0YWRpcikKKworICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCit9CitlbWl0X3BrZ2RhdGFbZGlyc10gPSAiJHtQS0dERVNUV09SS30vcnVudGltZSAke1BLR0RFU1RXT1JLfS9ydW50aW1lLXJldmVyc2UgJHtQS0dERVNUV09SS30vcnVudGltZS1ycHJvdmlkZXMiCisKK2xkY29uZmlnX3Bvc3RpbnN0X2ZyYWdtZW50KCkgeworaWYgWyB4IiREIiA9ICJ4IiBdOyB0aGVuCisJaWYgWyAteCAvc2Jpbi9sZGNvbmZpZyBdOyB0aGVuIC9zYmluL2xkY29uZmlnIDsgZmkKK2ZpCit9CisKK1JQTURFUFMgPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3JwbS9iaW4vcnBtZGVwcy1vZWNvcmUgLS1tYWNyb3MgJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3JwbS9tYWNyb3MgLS1kZWZpbmUgJ19ycG1mY19tYWdpY19wYXRoICR7U1RBR0lOR19ESVJfTkFUSVZFfSR7ZGF0YWRpcl9uYXRpdmV9L21pc2MvbWFnaWMubWdjJyAtLXJwbXBvcHQgJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3JwbS9ycG1wb3B0IgorCisjIENvbGxlY3QgcGVyZmlsZSBydW4tdGltZSBkZXBlbmRlbmN5IG1ldGFkYXRhCisjIE91dHB1dDoKKyMgIEZJTEVSUFJPVklERVNGTElTVF9wa2cgLSBsaXN0IG9mIGFsbCBmaWxlcyB3LyBkZXBzCisjICBGSUxFUlBST1ZJREVTX2ZpbGVwYXRoX3BrZyAtIHBlciBmaWxlIGRlcAorIworIyAgRklMRVJERVBFTkRTRkxJU1RfcGtnIC0gbGlzdCBvZiBhbGwgZmlsZXMgdy8gZGVwcworIyAgRklMRVJERVBFTkRTX2ZpbGVwYXRoX3BrZyAtIHBlciBmaWxlIGRlcAorCitweXRob24gcGFja2FnZV9kb19maWxlZGVwcygpIHsKKyAgICBpZiBkLmdldFZhcignU0tJUF9GSUxFREVQUycsIFRydWUpID09ICcxJzoKKyAgICAgICAgcmV0dXJuCisKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICBycG1kZXBzID0gZC5nZXRWYXIoJ1JQTURFUFMnLCBUcnVlKQorCisgICAgZGVmIGNodW5rcyhmaWxlcywgbik6CisgICAgICAgIHJldHVybiBbZmlsZXNbaTppK25dIGZvciBpIGluIHJhbmdlKDAsIGxlbihmaWxlcyksIG4pXQorCisgICAgcGtnbGlzdCA9IFtdCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBpZiBkLmdldFZhcignU0tJUF9GSUxFREVQU18nICsgcGtnLCBUcnVlKSA9PSAnMSc6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBwa2cuZW5kc3dpdGgoJy1kYmcnKSBvciBwa2cuZW5kc3dpdGgoJy1kb2MnKSBvciBwa2cuZmluZCgnLWxvY2FsZS0nKSAhPSAtMSBvciBwa2cuZmluZCgnLWxvY2FsZWRhdGEtJykgIT0gLTEgb3IgcGtnLmZpbmQoJy1nY29udi0nKSAhPSAtMSBvciBwa2cuZmluZCgnLWNoYXJtYXAtJykgIT0gLTEgb3IgcGtnLnN0YXJ0c3dpdGgoJ2tlcm5lbC1tb2R1bGUtJyk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmb3IgZmlsZXMgaW4gY2h1bmtzKHBrZ2ZpbGVzW3BrZ10sIDEwMCk6CisgICAgICAgICAgICBwa2dsaXN0LmFwcGVuZCgocGtnLCBmaWxlcywgcnBtZGVwcywgcGtnZGVzdCkpCisKKyAgICBwcm9jZXNzZWQgPSBvZS51dGlscy5tdWx0aXByb2Nlc3NfZXhlYyggcGtnbGlzdCwgb2UucGFja2FnZS5maWxlZGVwcnVubmVyKQorCisgICAgcHJvdmlkZXNfZmlsZXMgPSB7fQorICAgIHJlcXVpcmVzX2ZpbGVzID0ge30KKworICAgIGZvciByZXN1bHQgaW4gcHJvY2Vzc2VkOgorICAgICAgICAocGtnLCBwcm92aWRlcywgcmVxdWlyZXMpID0gcmVzdWx0CisKKyAgICAgICAgaWYgcGtnIG5vdCBpbiBwcm92aWRlc19maWxlczoKKyAgICAgICAgICAgIHByb3ZpZGVzX2ZpbGVzW3BrZ10gPSBbXQorICAgICAgICBpZiBwa2cgbm90IGluIHJlcXVpcmVzX2ZpbGVzOgorICAgICAgICAgICAgcmVxdWlyZXNfZmlsZXNbcGtnXSA9IFtdCisKKyAgICAgICAgZm9yIGZpbGUgaW4gcHJvdmlkZXM6CisgICAgICAgICAgICBwcm92aWRlc19maWxlc1twa2ddLmFwcGVuZChmaWxlKQorICAgICAgICAgICAga2V5ID0gIkZJTEVSUFJPVklERVNfIiArIGZpbGUgKyAiXyIgKyBwa2cKKyAgICAgICAgICAgIGQuc2V0VmFyKGtleSwgIiAiLmpvaW4ocHJvdmlkZXNbZmlsZV0pKQorCisgICAgICAgIGZvciBmaWxlIGluIHJlcXVpcmVzOgorICAgICAgICAgICAgcmVxdWlyZXNfZmlsZXNbcGtnXS5hcHBlbmQoZmlsZSkKKyAgICAgICAgICAgIGtleSA9ICJGSUxFUkRFUEVORFNfIiArIGZpbGUgKyAiXyIgKyBwa2cKKyAgICAgICAgICAgIGQuc2V0VmFyKGtleSwgIiAiLmpvaW4ocmVxdWlyZXNbZmlsZV0pKQorCisgICAgZm9yIHBrZyBpbiByZXF1aXJlc19maWxlczoKKyAgICAgICAgZC5zZXRWYXIoIkZJTEVSREVQRU5EU0ZMSVNUXyIgKyBwa2csICIgIi5qb2luKHJlcXVpcmVzX2ZpbGVzW3BrZ10pKQorICAgIGZvciBwa2cgaW4gcHJvdmlkZXNfZmlsZXM6CisgICAgICAgIGQuc2V0VmFyKCJGSUxFUlBST1ZJREVTRkxJU1RfIiArIHBrZywgIiAiLmpvaW4ocHJvdmlkZXNfZmlsZXNbcGtnXSkpCit9CisKK1NITElCU0RJUlMgPSAiJHtQS0dEQVRBX0RJUn0vJHtNTFBSRUZJWH1zaGxpYnMyIgorU0hMSUJTV09SS0RJUiA9ICIke1BLR0RFU1RXT1JLfS8ke01MUFJFRklYfXNobGliczIiCisKK3B5dGhvbiBwYWNrYWdlX2RvX3NobGlicygpIHsKKyAgICBpbXBvcnQgcmUsIHBpcGVzCisgICAgaW1wb3J0IHN1YnByb2Nlc3MgYXMgc3ViCisKKyAgICBleGNsdWRlX3NobGlicyA9IGQuZ2V0VmFyKCdFWENMVURFX0ZST01fU0hMSUJTJywgMCkKKyAgICBpZiBleGNsdWRlX3NobGliczoKKyAgICAgICAgYmIubm90ZSgibm90IGdlbmVyYXRpbmcgc2hsaWJzIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBsaWJfcmUgPSByZS5jb21waWxlKCJeLipcLnNvIikKKyAgICBsaWJkaXJfcmUgPSByZS5jb21waWxlKCIuKi8lcyQiICUgZC5nZXRWYXIoJ2Jhc2VsaWInLCBUcnVlKSkKKworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICB0YXJnZXRvcyA9IGQuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKQorCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKworICAgIHZlciA9IGQuZ2V0VmFyKCdQS0dWJywgVHJ1ZSkKKyAgICBpZiBub3QgdmVyOgorICAgICAgICBtc2cgPSAiUEtHViBub3QgZGVmaW5lZCIKKyAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInBrZ3YtdW5kZWZpbmVkIiwgbXNnLCBkKQorICAgICAgICByZXR1cm4KKworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisKKyAgICBzaGxpYnN3b3JrX2RpciA9IGQuZ2V0VmFyKCdTSExJQlNXT1JLRElSJywgVHJ1ZSkKKworICAgICMgVGFrZSBzaGFyZWQgbG9jayBzaW5jZSB3ZSdyZSBvbmx5IHJlYWRpbmcsIG5vdCB3cml0aW5nCisgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZShkLmV4cGFuZCgiJHtQQUNLQUdFTE9DS30iKSkKKworICAgIGRlZiBsaW51eF9zbyhmaWxlLCBuZWVkZWQsIHNvbmFtZXMsIHJlbmFtZXMsIHBrZ3Zlcik6CisgICAgICAgIG5lZWRzX2xkY29uZmlnID0gRmFsc2UKKyAgICAgICAgbGRpciA9IG9zLnBhdGguZGlybmFtZShmaWxlKS5yZXBsYWNlKHBrZ2Rlc3QgKyAiLyIgKyBwa2csICcnKQorICAgICAgICBjbWQgPSBkLmdldFZhcignT0JKRFVNUCcsIFRydWUpICsgIiAtcCAiICsgcGlwZXMucXVvdGUoZmlsZSkgKyAiIDI+L2Rldi9udWxsIgorICAgICAgICBmZCA9IG9zLnBvcGVuKGNtZCkKKyAgICAgICAgbGluZXMgPSBmZC5yZWFkbGluZXMoKQorICAgICAgICBmZC5jbG9zZSgpCisgICAgICAgIHJwYXRoID0gW10KKyAgICAgICAgZm9yIGwgaW4gbGluZXM6CisgICAgICAgICAgICBtID0gcmUubWF0Y2goIlxzK1JQQVRIXHMrKFteXHNdKikiLCBsKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBycGF0aHMgPSBtLmdyb3VwKDEpLnJlcGxhY2UoIiRPUklHSU4iLCBsZGlyKS5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgcnBhdGggPSBtYXAob3MucGF0aC5ub3JtcGF0aCwgcnBhdGhzKQorICAgICAgICBmb3IgbCBpbiBsaW5lczoKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaCgiXHMrTkVFREVEXHMrKFteXHNdKikiLCBsKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBkZXAgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgaWYgZGVwIG5vdCBpbiBuZWVkZWRbcGtnXToKKyAgICAgICAgICAgICAgICAgICAgbmVlZGVkW3BrZ10uYXBwZW5kKChkZXAsIGZpbGUsIHJwYXRoKSkKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaCgiXHMrU09OQU1FXHMrKFteXHNdKikiLCBsKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICB0aGlzX3NvbmFtZSA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICBwcm92ID0gKHRoaXNfc29uYW1lLCBsZGlyLCBwa2d2ZXIpCisgICAgICAgICAgICAgICAgaWYgbm90IHByb3YgaW4gc29uYW1lczoKKyAgICAgICAgICAgICAgICAgICAgIyBpZiBsaWJyYXJ5IGlzIHByaXZhdGUgKG9ubHkgdXNlZCBieSBwYWNrYWdlKSB0aGVuIGRvIG5vdCBidWlsZCBzaGxpYiBmb3IgaXQKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHByaXZhdGVfbGlicyBvciB0aGlzX3NvbmFtZSBub3QgaW4gcHJpdmF0ZV9saWJzOgorICAgICAgICAgICAgICAgICAgICAgICAgc29uYW1lcy5hcHBlbmQocHJvdikKKyAgICAgICAgICAgICAgICBpZiBsaWJkaXJfcmUubWF0Y2gob3MucGF0aC5kaXJuYW1lKGZpbGUpKToKKyAgICAgICAgICAgICAgICAgICAgbmVlZHNfbGRjb25maWcgPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgc25hcF9zeW1saW5rcyBhbmQgKG9zLnBhdGguYmFzZW5hbWUoZmlsZSkgIT0gdGhpc19zb25hbWUpOgorICAgICAgICAgICAgICAgICAgICByZW5hbWVzLmFwcGVuZCgoZmlsZSwgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShmaWxlKSwgdGhpc19zb25hbWUpKSkKKyAgICAgICAgcmV0dXJuIG5lZWRzX2xkY29uZmlnCisKKyAgICBkZWYgZGFyd2luX3NvKGZpbGUsIG5lZWRlZCwgc29uYW1lcywgcmVuYW1lcywgcGtndmVyKToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGUpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGxkaXIgPSBvcy5wYXRoLmRpcm5hbWUoZmlsZSkucmVwbGFjZShwa2dkZXN0ICsgIi8iICsgcGtnLCAnJykKKworICAgICAgICBkZWYgZ2V0X2NvbWJpbmF0aW9ucyhiYXNlKToKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgR2l2ZW4gYSBiYXNlIGxpYnJhcnkgbmFtZSwgZmluZCBhbGwgY29tYmluYXRpb25zIG9mIHRoaXMgc3BsaXQgYnkgIi4iIGFuZCAiLSIKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgIGNvbWJvcyA9IFtdCisgICAgICAgICAgICBvcHRpb25zID0gYmFzZS5zcGxpdCgiLiIpCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4ob3B0aW9ucykgKyAxKToKKyAgICAgICAgICAgICAgICBjb21ib3MuYXBwZW5kKCIuIi5qb2luKG9wdGlvbnNbMDppXSkpCisgICAgICAgICAgICBvcHRpb25zID0gYmFzZS5zcGxpdCgiLSIpCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4ob3B0aW9ucykgKyAxKToKKyAgICAgICAgICAgICAgICBjb21ib3MuYXBwZW5kKCItIi5qb2luKG9wdGlvbnNbMDppXSkpCisgICAgICAgICAgICByZXR1cm4gY29tYm9zCisKKyAgICAgICAgaWYgKGZpbGUuZW5kc3dpdGgoJy5keWxpYicpIG9yIGZpbGUuZW5kc3dpdGgoJy5zbycpKSBhbmQgbm90IHBrZy5lbmRzd2l0aCgnLWRldicpIGFuZCBub3QgcGtnLmVuZHN3aXRoKCctZGJnJyk6CisgICAgICAgICAgICAjIERyb3Agc3VmZml4CisgICAgICAgICAgICBuYW1lID0gb3MucGF0aC5iYXNlbmFtZShmaWxlKS5yc3BsaXQoIi4iLDEpWzBdCisgICAgICAgICAgICAjIEZpbmQgYWxsIGNvbWJpbmF0aW9ucworICAgICAgICAgICAgY29tYm9zID0gZ2V0X2NvbWJpbmF0aW9ucyhuYW1lKQorICAgICAgICAgICAgZm9yIGNvbWJvIGluIGNvbWJvczoKKyAgICAgICAgICAgICAgICBpZiBub3QgY29tYm8gaW4gc29uYW1lczoKKyAgICAgICAgICAgICAgICAgICAgcHJvdiA9IChjb21ibywgbGRpciwgcGtndmVyKQorICAgICAgICAgICAgICAgICAgICBzb25hbWVzLmFwcGVuZChwcm92KQorICAgICAgICBpZiBmaWxlLmVuZHN3aXRoKCcuZHlsaWInKSBvciBmaWxlLmVuZHN3aXRoKCcuc28nKToKKyAgICAgICAgICAgIHJwYXRoID0gW10KKyAgICAgICAgICAgIHAgPSBzdWIuUG9wZW4oW2QuZXhwYW5kKCIke0hPU1RfUFJFRklYfW90b29sIiksICctbCcsIGZpbGVdLHN0ZG91dD1zdWIuUElQRSxzdGRlcnI9c3ViLlBJUEUpCisgICAgICAgICAgICBlcnIsIG91dCA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICAgICAgIyBJZiByZXR1cm5lZCBzdWNjZXNmdWxseSwgcHJvY2VzcyBzdGRlcnIgZm9yIHJlc3VsdHMKKyAgICAgICAgICAgIGlmIHAucmV0dXJuY29kZSA9PSAwOgorICAgICAgICAgICAgICAgIGZvciBsIGluIGVyci5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgICAgICAgICAgbCA9IGwuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBpZiBsLnN0YXJ0c3dpdGgoJ3BhdGggJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBycGF0aC5hcHBlbmQobC5zcGxpdCgpWzFdKQorCisgICAgICAgIHAgPSBzdWIuUG9wZW4oW2QuZXhwYW5kKCIke0hPU1RfUFJFRklYfW90b29sIiksICctTCcsIGZpbGVdLHN0ZG91dD1zdWIuUElQRSxzdGRlcnI9c3ViLlBJUEUpCisgICAgICAgIGVyciwgb3V0ID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgICMgSWYgcmV0dXJuZWQgc3VjY2VzZnVsbHksIHByb2Nlc3Mgc3RkZXJyIGZvciByZXN1bHRzCisgICAgICAgIGlmIHAucmV0dXJuY29kZSA9PSAwOgorICAgICAgICAgICAgZm9yIGwgaW4gZXJyLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgICAgIGwgPSBsLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgbCBvciBsLmVuZHN3aXRoKCI6Iik6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgImlzIG5vdCBhbiBvYmplY3QgZmlsZSIgaW4gbDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBuYW1lID0gb3MucGF0aC5iYXNlbmFtZShsLnNwbGl0KClbMF0pLnJzcGxpdCgiLiIsIDEpWzBdCisgICAgICAgICAgICAgICAgaWYgbmFtZSBhbmQgbmFtZSBub3QgaW4gbmVlZGVkW3BrZ106CisgICAgICAgICAgICAgICAgICAgICBuZWVkZWRbcGtnXS5hcHBlbmQoKG5hbWUsIGZpbGUsIFtdKSkKKworICAgIGlmIGQuZ2V0VmFyKCdQQUNLQUdFX1NOQVBfTElCX1NZTUxJTktTJywgVHJ1ZSkgPT0gIjEiOgorICAgICAgICBzbmFwX3N5bWxpbmtzID0gVHJ1ZQorICAgIGVsc2U6CisgICAgICAgIHNuYXBfc3ltbGlua3MgPSBGYWxzZQorCisgICAgaWYgKGQuZ2V0VmFyKCdVU0VfTERDT05GSUcnLCBUcnVlKSBvciAiMSIpID09ICIxIjoKKyAgICAgICAgdXNlX2xkY29uZmlnID0gVHJ1ZQorICAgIGVsc2U6CisgICAgICAgIHVzZV9sZGNvbmZpZyA9IEZhbHNlCisKKyAgICBuZWVkZWQgPSB7fQorICAgIHNobGliX3Byb3ZpZGVyID0gb2UucGFja2FnZS5yZWFkX3NobGliX3Byb3ZpZGVycyhkKQorCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBwcml2YXRlX2xpYnMgPSBkLmdldFZhcignUFJJVkFURV9MSUJTXycgKyBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdQUklWQVRFX0xJQlMnLCBUcnVlKSBvciAiIgorICAgICAgICBwcml2YXRlX2xpYnMgPSBwcml2YXRlX2xpYnMuc3BsaXQoKQorICAgICAgICBuZWVkc19sZGNvbmZpZyA9IEZhbHNlCisgICAgICAgIGJiLmRlYnVnKDIsICJjYWxjdWxhdGluZyBzaGxpYiBwcm92aWRlcyBmb3IgJXMiICUgcGtnKQorCisgICAgICAgIHBrZ3ZlciA9IGQuZ2V0VmFyKCdQS0dWXycgKyBwa2csIFRydWUpCisgICAgICAgIGlmIG5vdCBwa2d2ZXI6CisgICAgICAgICAgICBwa2d2ZXIgPSBkLmdldFZhcignUFZfJyArIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBrZ3ZlcjoKKyAgICAgICAgICAgIHBrZ3ZlciA9IHZlcgorCisgICAgICAgIG5lZWRlZFtwa2ddID0gW10KKyAgICAgICAgc29uYW1lcyA9IGxpc3QoKQorICAgICAgICByZW5hbWVzID0gbGlzdCgpCisgICAgICAgIGZvciBmaWxlIGluIHBrZ2ZpbGVzW3BrZ106CisgICAgICAgICAgICAgICAgc29uYW1lID0gTm9uZQorICAgICAgICAgICAgICAgIGlmIGNwYXRoLmlzbGluayhmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiB0YXJnZXRvcyA9PSAiZGFyd2luIiBvciB0YXJnZXRvcyA9PSAiZGFyd2luOCI6CisgICAgICAgICAgICAgICAgICAgIGRhcndpbl9zbyhmaWxlLCBuZWVkZWQsIHNvbmFtZXMsIHJlbmFtZXMsIHBrZ3ZlcikKKyAgICAgICAgICAgICAgICBlbGlmIG9zLmFjY2VzcyhmaWxlLCBvcy5YX09LKSBvciBsaWJfcmUubWF0Y2goZmlsZSk6CisgICAgICAgICAgICAgICAgICAgIGxkY29uZmlnID0gbGludXhfc28oZmlsZSwgbmVlZGVkLCBzb25hbWVzLCByZW5hbWVzLCBwa2d2ZXIpCisgICAgICAgICAgICAgICAgICAgIG5lZWRzX2xkY29uZmlnID0gbmVlZHNfbGRjb25maWcgb3IgbGRjb25maWcKKyAgICAgICAgZm9yIChvbGQsIG5ldykgaW4gcmVuYW1lczoKKyAgICAgICAgICAgIGJiLm5vdGUoIlJlbmFtaW5nICVzIHRvICVzIiAlIChvbGQsIG5ldykpCisgICAgICAgICAgICBvcy5yZW5hbWUob2xkLCBuZXcpCisgICAgICAgICAgICBwa2dmaWxlc1twa2ddLnJlbW92ZShvbGQpCisJICAgIAorICAgICAgICBzaGxpYnNfZmlsZSA9IG9zLnBhdGguam9pbihzaGxpYnN3b3JrX2RpciwgcGtnICsgIi5saXN0IikKKyAgICAgICAgaWYgbGVuKHNvbmFtZXMpOgorICAgICAgICAgICAgZmQgPSBvcGVuKHNobGlic19maWxlLCAndycpCisgICAgICAgICAgICBmb3IgcyBpbiBzb25hbWVzOgorICAgICAgICAgICAgICAgIGlmIHNbMF0gaW4gc2hsaWJfcHJvdmlkZXIgYW5kIHNbMV0gaW4gc2hsaWJfcHJvdmlkZXJbc1swXV06CisgICAgICAgICAgICAgICAgICAgIChvbGRfcGtnLCBvbGRfcGtndmVyKSA9IHNobGliX3Byb3ZpZGVyW3NbMF1dW3NbMV1dCisgICAgICAgICAgICAgICAgICAgIGlmIG9sZF9wa2cgIT0gcGtnOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybignJXMtJXMgd2FzIHJlZ2lzdGVyZWQgYXMgc2hsaWIgcHJvdmlkZXIgZm9yICVzLCBjaGFuZ2luZyBpdCB0byAlcy0lcyBiZWNhdXNlIGl0IHdhcyBidWlsdCBsYXRlcicgJSAob2xkX3BrZywgb2xkX3BrZ3Zlciwgc1swXSwgcGtnLCBwa2d2ZXIpKQorICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICdyZWdpc3RlcmluZyAlcy0lcyBhcyBzaGxpYiBwcm92aWRlciBmb3IgJXMnICUgKHBrZywgcGtndmVyLCBzWzBdKSkKKyAgICAgICAgICAgICAgICBmZC53cml0ZShzWzBdICsgJzonICsgc1sxXSArICc6JyArIHNbMl0gKyAnXG4nKQorICAgICAgICAgICAgICAgIGlmIHNbMF0gbm90IGluIHNobGliX3Byb3ZpZGVyOgorICAgICAgICAgICAgICAgICAgICBzaGxpYl9wcm92aWRlcltzWzBdXSA9IHt9CisgICAgICAgICAgICAgICAgc2hsaWJfcHJvdmlkZXJbc1swXV1bc1sxXV0gPSAocGtnLCBwa2d2ZXIpCisgICAgICAgICAgICBmZC5jbG9zZSgpCisgICAgICAgIGlmIG5lZWRzX2xkY29uZmlnIGFuZCB1c2VfbGRjb25maWc6CisgICAgICAgICAgICBiYi5kZWJ1ZygxLCAnYWRkaW5nIGxkY29uZmlnIGNhbGwgdG8gcG9zdGluc3QgZm9yICVzJyAlIHBrZykKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpCisgICAgICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICAgICAgcG9zdGluc3QgPSAnIyEvYmluL3NoXG4nCisgICAgICAgICAgICBwb3N0aW5zdCArPSBkLmdldFZhcignbGRjb25maWdfcG9zdGluc3RfZnJhZ21lbnQnLCBUcnVlKQorICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorICAgICAgICBiYi5kZWJ1ZygxLCAnTElCTkFNRVM6IHBrZyAlcyBzb25hbWVzICVzJyAlIChwa2csIHNvbmFtZXMpKQorCisgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKworICAgIGFzc3VtZWRfbGlicyA9IGQuZ2V0VmFyKCdBU1NVTUVfU0hMSUJTJywgVHJ1ZSkKKyAgICBpZiBhc3N1bWVkX2xpYnM6CisgICAgICAgIGxpYmRpciA9IGQuZ2V0VmFyKCJsaWJkaXIiLCBUcnVlKQorICAgICAgICBmb3IgZSBpbiBhc3N1bWVkX2xpYnMuc3BsaXQoKToKKyAgICAgICAgICAgIGwsIGRlcF9wa2cgPSBlLnNwbGl0KCI6IikKKyAgICAgICAgICAgIGxpYl92ZXIgPSBOb25lCisgICAgICAgICAgICBkZXBfcGtnID0gZGVwX3BrZy5yc3BsaXQoIl8iLCAxKQorICAgICAgICAgICAgaWYgbGVuKGRlcF9wa2cpID09IDI6CisgICAgICAgICAgICAgICAgbGliX3ZlciA9IGRlcF9wa2dbMV0KKyAgICAgICAgICAgIGRlcF9wa2cgPSBkZXBfcGtnWzBdCisgICAgICAgICAgICBpZiBsIG5vdCBpbiBzaGxpYl9wcm92aWRlcjoKKyAgICAgICAgICAgICAgICBzaGxpYl9wcm92aWRlcltsXSA9IHt9CisgICAgICAgICAgICBzaGxpYl9wcm92aWRlcltsXVtsaWJkaXJdID0gKGRlcF9wa2csIGxpYl92ZXIpCisKKyAgICBsaWJzZWFyY2hwYXRoID0gW2QuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2Jhc2VfbGliZGlyJywgVHJ1ZSldCisKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIGJiLmRlYnVnKDIsICJjYWxjdWxhdGluZyBzaGxpYiByZXF1aXJlbWVudHMgZm9yICVzIiAlIHBrZykKKworICAgICAgICBkZXBzID0gbGlzdCgpCisgICAgICAgIGZvciBuIGluIG5lZWRlZFtwa2ddOgorICAgICAgICAgICAgIyBpZiBuIGlzIGluIHByaXZhdGUgbGlicmFyaWVzLCBkb24ndCB0cnkgdG8gc2VhcmNoIHByb3ZpZGVyIGZvciBpdAorICAgICAgICAgICAgIyB0aGlzIGNvdWxkIGNhdXNlIHByb2JsZW0gaW4gY2FzZSBzb21lIGFiYy5iYiBwcm92aWRlcyBwcml2YXRlCisgICAgICAgICAgICAjIC9vcHQvYWJjL2xpYi9saWJmb28uc28uMSBhbmQgY29udGFpbnMgL3Vzci9iaW4vYWJjIGRlcGVuZGluZyBvbiBzeXN0ZW0gbGlicmFyeSBsaWJmb28uc28uMQorICAgICAgICAgICAgIyBidXQgc2tpcHBpbmcgaXQgaXMgc3RpbGwgYmV0dGVyIGFsdGVybmF0aXZlIHRoYW4gcHJvdmlkaW5nIG93bgorICAgICAgICAgICAgIyB2ZXJzaW9uIGFuZCB0aGVuIGFkZGluZyBydW50aW1lIGRlcGVuZGVuY3kgZm9yIHRoZSBzYW1lIHN5c3RlbSBsaWJyYXJ5CisgICAgICAgICAgICBpZiBwcml2YXRlX2xpYnMgYW5kIG5bMF0gaW4gcHJpdmF0ZV9saWJzOgorICAgICAgICAgICAgICAgIGJiLmRlYnVnKDIsICclczogRGVwZW5kZW5jeSAlcyBjb3ZlcmVkIGJ5IFBSSVZBVEVfTElCUycgJSAocGtnLCBuWzBdKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgblswXSBpbiBzaGxpYl9wcm92aWRlci5rZXlzKCk6CisgICAgICAgICAgICAgICAgc2hsaWJfcHJvdmlkZXJfcGF0aCA9IGxpc3QoKQorICAgICAgICAgICAgICAgIGZvciBrIGluIHNobGliX3Byb3ZpZGVyW25bMF1dLmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgc2hsaWJfcHJvdmlkZXJfcGF0aC5hcHBlbmQoaykKKyAgICAgICAgICAgICAgICBtYXRjaCA9IE5vbmUKKyAgICAgICAgICAgICAgICBmb3IgcCBpbiBuWzJdICsgc2hsaWJfcHJvdmlkZXJfcGF0aCArIGxpYnNlYXJjaHBhdGg6CisgICAgICAgICAgICAgICAgICAgIGlmIHAgaW4gc2hsaWJfcHJvdmlkZXJbblswXV06CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IHAKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIChkZXBfcGtnLCB2ZXJfbmVlZGVkKSA9IHNobGliX3Byb3ZpZGVyW25bMF1dW21hdGNoXQorCisgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDIsICclczogRGVwZW5kZW5jeSAlcyByZXF1aXJlcyBwYWNrYWdlICVzICh1c2VkIGJ5IGZpbGVzOiAlcyknICUgKHBrZywgblswXSwgZGVwX3BrZywgblsxXSkpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwX3BrZyA9PSBwa2c6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgIGlmIHZlcl9uZWVkZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBkZXAgPSAiJXMgKD49ICVzKSIgJSAoZGVwX3BrZywgdmVyX25lZWRlZCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcCA9IGRlcF9wa2cKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRlcCBpbiBkZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQoZGVwKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgYmIubm90ZSgiQ291bGRuJ3QgZmluZCBzaGFyZWQgbGlicmFyeSBwcm92aWRlciBmb3IgJXMsIHVzZWQgYnkgZmlsZXM6ICVzIiAlIChuWzBdLCBuWzFdKSkKKworICAgICAgICBkZXBzX2ZpbGUgPSBvcy5wYXRoLmpvaW4ocGtnZGVzdCwgcGtnICsgIi5zaGxpYmRlcHMiKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkZXBzX2ZpbGUpOgorICAgICAgICAgICAgb3MucmVtb3ZlKGRlcHNfZmlsZSkKKyAgICAgICAgaWYgbGVuKGRlcHMpOgorICAgICAgICAgICAgZmQgPSBvcGVuKGRlcHNfZmlsZSwgJ3cnKQorICAgICAgICAgICAgZm9yIGRlcCBpbiBkZXBzOgorICAgICAgICAgICAgICAgIGZkLndyaXRlKGRlcCArICdcbicpCisgICAgICAgICAgICBmZC5jbG9zZSgpCit9CisKK3B5dGhvbiBwYWNrYWdlX2RvX3BrZ2NvbmZpZyAoKSB7CisgICAgaW1wb3J0IHJlCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorCisgICAgc2hsaWJzX2RpcnMgPSBkLmdldFZhcignU0hMSUJTRElSUycsIFRydWUpLnNwbGl0KCkKKyAgICBzaGxpYnN3b3JrX2RpciA9IGQuZ2V0VmFyKCdTSExJQlNXT1JLRElSJywgVHJ1ZSkKKworICAgIHBjX3JlID0gcmUuY29tcGlsZSgnKC4qKVwucGMkJykKKyAgICB2YXJfcmUgPSByZS5jb21waWxlKCcoLiopPSguKiknKQorICAgIGZpZWxkX3JlID0gcmUuY29tcGlsZSgnKC4qKTogKC4qKScpCisKKyAgICBwa2djb25maWdfcHJvdmlkZWQgPSB7fQorICAgIHBrZ2NvbmZpZ19uZWVkZWQgPSB7fQorICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgcGtnY29uZmlnX3Byb3ZpZGVkW3BrZ10gPSBbXQorICAgICAgICBwa2djb25maWdfbmVlZGVkW3BrZ10gPSBbXQorICAgICAgICBmb3IgZmlsZSBpbiBwa2dmaWxlc1twa2ddOgorICAgICAgICAgICAgICAgIG0gPSBwY19yZS5tYXRjaChmaWxlKQorICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgIHBkID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgcGtnY29uZmlnX3Byb3ZpZGVkW3BrZ10uYXBwZW5kKG5hbWUpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5hY2Nlc3MoZmlsZSwgb3MuUl9PSyk6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBmID0gb3BlbihmaWxlLCAncicpCisgICAgICAgICAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGwgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBtID0gdmFyX3JlLm1hdGNoKGwpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gbS5ncm91cCgyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkLnNldFZhcihuYW1lLCBwZC5leHBhbmQodmFsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgbSA9IGZpZWxkX3JlLm1hdGNoKGwpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkciA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHAgPSBiYi5kYXRhLmV4cGFuZChtLmdyb3VwKDIpLCBwZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBoZHIgPT0gJ1JlcXVpcmVzJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnY29uZmlnX25lZWRlZFtwa2ddICs9IGV4cC5yZXBsYWNlKCcsJywgJyAnKS5zcGxpdCgpCisKKyAgICAjIFRha2Ugc2hhcmVkIGxvY2sgc2luY2Ugd2UncmUgb25seSByZWFkaW5nLCBub3Qgd3JpdGluZworICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUoZC5leHBhbmQoIiR7UEFDS0FHRUxPQ0t9IikpCisKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIHBrZ3NfZmlsZSA9IG9zLnBhdGguam9pbihzaGxpYnN3b3JrX2RpciwgcGtnICsgIi5wY2xpc3QiKQorICAgICAgICBpZiBwa2djb25maWdfcHJvdmlkZWRbcGtnXSAhPSBbXToKKyAgICAgICAgICAgIGYgPSBvcGVuKHBrZ3NfZmlsZSwgJ3cnKQorICAgICAgICAgICAgZm9yIHAgaW4gcGtnY29uZmlnX3Byb3ZpZGVkW3BrZ106CisgICAgICAgICAgICAgICAgZi53cml0ZSgnJXNcbicgJSBwKQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAjIEdvIGZyb20gbGVhc3QgdG8gbW9zdCBzcGVjaWZpYyBzaW5jZSB0aGUgbGFzdCBvbmUgZm91bmQgd2lucworICAgIGZvciBkaXIgaW4gcmV2ZXJzZWQoc2hsaWJzX2RpcnMpOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGlyKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGZvciBmaWxlIGluIG9zLmxpc3RkaXIoZGlyKToKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaCgnXiguKilcLnBjbGlzdCQnLCBmaWxlKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBwa2cgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgZmQgPSBvcGVuKG9zLnBhdGguam9pbihkaXIsIGZpbGUpKQorICAgICAgICAgICAgICAgIGxpbmVzID0gZmQucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICAgICBmZC5jbG9zZSgpCisgICAgICAgICAgICAgICAgcGtnY29uZmlnX3Byb3ZpZGVkW3BrZ10gPSBbXQorICAgICAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICBwa2djb25maWdfcHJvdmlkZWRbcGtnXS5hcHBlbmQobC5yc3RyaXAoKSkKKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgZGVwcyA9IFtdCisgICAgICAgIGZvciBuIGluIHBrZ2NvbmZpZ19uZWVkZWRbcGtnXToKKyAgICAgICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgICAgIGZvciBrIGluIHBrZ2NvbmZpZ19wcm92aWRlZC5rZXlzKCk6CisgICAgICAgICAgICAgICAgaWYgbiBpbiBwa2djb25maWdfcHJvdmlkZWRba106CisgICAgICAgICAgICAgICAgICAgIGlmIGsgIT0gcGtnIGFuZCBub3QgKGsgaW4gZGVwcyk6CisgICAgICAgICAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZChrKQorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgIGlmIGZvdW5kID09IEZhbHNlOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoImNvdWxkbid0IGZpbmQgcGtnY29uZmlnIG1vZHVsZSAnJXMnIGluIGFueSBwYWNrYWdlIiAlIG4pCisgICAgICAgIGRlcHNfZmlsZSA9IG9zLnBhdGguam9pbihwa2dkZXN0LCBwa2cgKyAiLnBjZGVwcyIpCisgICAgICAgIGlmIGxlbihkZXBzKToKKyAgICAgICAgICAgIGZkID0gb3BlbihkZXBzX2ZpbGUsICd3JykKKyAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgICAgICAgICBmZC53cml0ZShkZXAgKyAnXG4nKQorICAgICAgICAgICAgZmQuY2xvc2UoKQorCisgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKK30KKworZGVmIHJlYWRfbGliZGVwX2ZpbGVzKGQpOgorICAgIHBrZ2xpYmRlcHMgPSB7fQorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgIHBrZ2xpYmRlcHNbcGtnXSA9IHt9CisgICAgICAgIGZvciBleHRlbnNpb24gaW4gIi5zaGxpYmRlcHMiLCAiLnBjZGVwcyIsICIuY2xpbGliZGVwcyI6CisgICAgICAgICAgICBkZXBzZmlsZSA9IGQuZXhwYW5kKCIke1BLR0RFU1R9LyIgKyBwa2cgKyBleHRlbnNpb24pCisgICAgICAgICAgICBpZiBvcy5hY2Nlc3MoZGVwc2ZpbGUsIG9zLlJfT0spOgorICAgICAgICAgICAgICAgIGZkID0gb3BlbihkZXBzZmlsZSkKKyAgICAgICAgICAgICAgICBsaW5lcyA9IGZkLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgZmQuY2xvc2UoKQorICAgICAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICBsLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGRlcHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBkZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRlcCBpbiBwa2dsaWJkZXBzW3BrZ106CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnbGliZGVwc1twa2ddW2RlcF0gPSBkZXBzW2RlcF0KKyAgICByZXR1cm4gcGtnbGliZGVwcworCitweXRob24gcmVhZF9zaGxpYmRlcHMgKCkgeworICAgIHBrZ2xpYmRlcHMgPSByZWFkX2xpYmRlcF9maWxlcyhkKQorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgcmRlcGVuZHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZC5nZXRWYXIoJ1JERVBFTkRTXycgKyBwa2csIFRydWUpIG9yICIiKQorICAgICAgICBmb3IgZGVwIGluIHBrZ2xpYmRlcHNbcGtnXToKKyAgICAgICAgICAgICMgQWRkIHRoZSBkZXAgaWYgaXQncyBub3QgYWxyZWFkeSB0aGVyZSwgb3IgaWYgbm8gY29tcGFyaXNvbiBpcyBzZXQKKyAgICAgICAgICAgIGlmIGRlcCBub3QgaW4gcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgcmRlcGVuZHNbZGVwXSA9IFtdCisgICAgICAgICAgICBmb3IgdiBpbiBwa2dsaWJkZXBzW3BrZ11bZGVwXToKKyAgICAgICAgICAgICAgICBpZiB2IG5vdCBpbiByZGVwZW5kc1tkZXBdOgorICAgICAgICAgICAgICAgICAgICByZGVwZW5kc1tkZXBdLmFwcGVuZCh2KQorICAgICAgICBkLnNldFZhcignUkRFUEVORFNfJyArIHBrZywgYmIudXRpbHMuam9pbl9kZXBzKHJkZXBlbmRzLCBjb21tYXNlcD1GYWxzZSkpCit9CisKK3B5dGhvbiBwYWNrYWdlX2RlcGNoYWlucygpIHsKKyAgICAiIiIKKyAgICBGb3IgYSBnaXZlbiBzZXQgb2YgcHJlZml4IGFuZCBwb3N0Zml4IG1vZGlmaWVycywgbWFrZSB0aG9zZSBwYWNrYWdlcworICAgIFJSRUNPTU1FTkRTIG9uIHRoZSBjb3JyZXNwb25kaW5nIHBhY2thZ2VzIGZvciBpdHMgUkRFUEVORFMuCisKKyAgICBFeGFtcGxlOiAgSWYgcGFja2FnZSBBIGRlcGVuZHMgdXBvbiBwYWNrYWdlIEIsIGFuZCBBJ3MgLmJiIGVtaXRzIGFuCisgICAgQS1kZXYgcGFja2FnZSwgdGhpcyB3b3VsZCBtYWtlIEEtZGV2IFJlY29tbWVuZHM6IEItZGV2LgorCisgICAgSWYgb25seSBvbmUgb2YgYSBnaXZlbiBzdWZmaXggaXMgc3BlY2lmaWVkLCBpdCB3aWxsIHRha2UgdGhlIFJSRUNPTU1FTkRTCisgICAgYmFzZWQgb24gdGhlIFJERVBFTkRTIG9mICphbGwqIG90aGVyIHBhY2thZ2VzLiBJZiBtb3JlIHRoYW4gb25lIG9mIGEgZ2l2ZW4KKyAgICBzdWZmaXggaXMgc3BlY2lmaWVkLCBpdHMgd2lsbCBvbmx5IHVzZSB0aGUgUkRFUEVORFMgb2YgdGhlIHNpbmdsZSBwYXJlbnQKKyAgICBwYWNrYWdlLgorICAgICIiIgorCisgICAgcGFja2FnZXMgID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICBwb3N0Zml4ZXMgPSAoZC5nZXRWYXIoJ0RFUENIQUlOX1BPU1QnLCBUcnVlKSBvciAnJykuc3BsaXQoKQorICAgIHByZWZpeGVzICA9IChkLmdldFZhcignREVQQ0hBSU5fUFJFJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkKKworICAgIGRlZiBwa2dfYWRkZGVwcnJlY3MocGtnLCBiYXNlLCBzdWZmaXgsIGdldG5hbWUsIGRlcGVuZHMsIGQpOgorCisgICAgICAgICNiYi5ub3RlKCdkZXBlbmRzIGZvciAlcyBpcyAlcycgJSAoYmFzZSwgZGVwZW5kcykpCisgICAgICAgIHJyZWNsaXN0ID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGQuZ2V0VmFyKCdSUkVDT01NRU5EU18nICsgcGtnLCBUcnVlKSBvciAiIikKKworICAgICAgICBmb3IgZGVwZW5kIGluIGRlcGVuZHM6CisgICAgICAgICAgICBpZiBkZXBlbmQuZmluZCgnLW5hdGl2ZScpICE9IC0xIG9yIGRlcGVuZC5maW5kKCctY3Jvc3MnKSAhPSAtMSBvciBkZXBlbmQuc3RhcnRzd2l0aCgndmlydHVhbC8nKToKKyAgICAgICAgICAgICAgICAjYmIubm90ZSgiU2tpcHBpbmcgJXMiICUgZGVwZW5kKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBkZXBlbmQuZW5kc3dpdGgoJy1kZXYnKToKKyAgICAgICAgICAgICAgICBkZXBlbmQgPSBkZXBlbmRbOi00XQorICAgICAgICAgICAgaWYgZGVwZW5kLmVuZHN3aXRoKCctZGJnJyk6CisgICAgICAgICAgICAgICAgZGVwZW5kID0gZGVwZW5kWzotNF0KKyAgICAgICAgICAgIHBrZ25hbWUgPSBnZXRuYW1lKGRlcGVuZCwgc3VmZml4KQorICAgICAgICAgICAgI2JiLm5vdGUoIkFkZGluZyAlcyBmb3IgJXMiICUgKHBrZ25hbWUsIGRlcGVuZCkpCisgICAgICAgICAgICBpZiBwa2duYW1lIG5vdCBpbiBycmVjbGlzdCBhbmQgcGtnbmFtZSAhPSBwa2c6CisgICAgICAgICAgICAgICAgcnJlY2xpc3RbcGtnbmFtZV0gPSBbXQorCisgICAgICAgICNiYi5ub3RlKCdzZXR0aW5nOiBSUkVDT01NRU5EU18lcz0lcycgJSAocGtnLCAnICcuam9pbihycmVjbGlzdCkpKQorICAgICAgICBkLnNldFZhcignUlJFQ09NTUVORFNfJXMnICUgcGtnLCBiYi51dGlscy5qb2luX2RlcHMocnJlY2xpc3QsIGNvbW1hc2VwPUZhbHNlKSkKKworICAgIGRlZiBwa2dfYWRkcnJlY3MocGtnLCBiYXNlLCBzdWZmaXgsIGdldG5hbWUsIHJkZXBlbmRzLCBkKToKKworICAgICAgICAjYmIubm90ZSgncmRlcGVuZHMgZm9yICVzIGlzICVzJyAlIChiYXNlLCByZGVwZW5kcykpCisgICAgICAgIHJyZWNsaXN0ID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGQuZ2V0VmFyKCdSUkVDT01NRU5EU18nICsgcGtnLCBUcnVlKSBvciAiIikKKworICAgICAgICBmb3IgZGVwZW5kIGluIHJkZXBlbmRzOgorICAgICAgICAgICAgaWYgZGVwZW5kLmZpbmQoJ3ZpcnR1YWwtbG9jYWxlLScpICE9IC0xOgorICAgICAgICAgICAgICAgICNiYi5ub3RlKCJTa2lwcGluZyAlcyIgJSBkZXBlbmQpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGRlcGVuZC5lbmRzd2l0aCgnLWRldicpOgorICAgICAgICAgICAgICAgIGRlcGVuZCA9IGRlcGVuZFs6LTRdCisgICAgICAgICAgICBpZiBkZXBlbmQuZW5kc3dpdGgoJy1kYmcnKToKKyAgICAgICAgICAgICAgICBkZXBlbmQgPSBkZXBlbmRbOi00XQorICAgICAgICAgICAgcGtnbmFtZSA9IGdldG5hbWUoZGVwZW5kLCBzdWZmaXgpCisgICAgICAgICAgICAjYmIubm90ZSgiQWRkaW5nICVzIGZvciAlcyIgJSAocGtnbmFtZSwgZGVwZW5kKSkKKyAgICAgICAgICAgIGlmIHBrZ25hbWUgbm90IGluIHJyZWNsaXN0IGFuZCBwa2duYW1lICE9IHBrZzoKKyAgICAgICAgICAgICAgICBycmVjbGlzdFtwa2duYW1lXSA9IFtdCisKKyAgICAgICAgI2JiLm5vdGUoJ3NldHRpbmc6IFJSRUNPTU1FTkRTXyVzPSVzJyAlIChwa2csICcgJy5qb2luKHJyZWNsaXN0KSkpCisgICAgICAgIGQuc2V0VmFyKCdSUkVDT01NRU5EU18lcycgJSBwa2csIGJiLnV0aWxzLmpvaW5fZGVwcyhycmVjbGlzdCwgY29tbWFzZXA9RmFsc2UpKQorCisgICAgZGVmIGFkZF9kZXAobGlzdCwgZGVwKToKKyAgICAgICAgaWYgZGVwIG5vdCBpbiBsaXN0OgorICAgICAgICAgICAgbGlzdC5hcHBlbmQoZGVwKQorCisgICAgZGVwZW5kcyA9IFtdCisgICAgZm9yIGRlcCBpbiBiYi51dGlscy5leHBsb2RlX2RlcHMoZC5nZXRWYXIoJ0RFUEVORFMnLCBUcnVlKSBvciAiIik6CisgICAgICAgIGFkZF9kZXAoZGVwZW5kcywgZGVwKQorCisgICAgcmRlcGVuZHMgPSBbXQorICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgZm9yIGRlcCBpbiBiYi51dGlscy5leHBsb2RlX2RlcHMoZC5nZXRWYXIoJ1JERVBFTkRTXycgKyBwa2csIFRydWUpIG9yICIiKToKKyAgICAgICAgICAgIGFkZF9kZXAocmRlcGVuZHMsIGRlcCkKKworICAgICNiYi5ub3RlKCdyZGVwZW5kcyBpcyAlcycgJSByZGVwZW5kcykKKworICAgIGRlZiBwb3N0X2dldG5hbWUobmFtZSwgc3VmZml4KToKKyAgICAgICAgcmV0dXJuICclcyVzJyAlIChuYW1lLCBzdWZmaXgpCisgICAgZGVmIHByZV9nZXRuYW1lKG5hbWUsIHN1ZmZpeCk6CisgICAgICAgIHJldHVybiAnJXMlcycgJSAoc3VmZml4LCBuYW1lKQorCisgICAgcGtncyA9IHt9CisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBmb3IgcG9zdGZpeCBpbiBwb3N0Zml4ZXM6CisgICAgICAgICAgICBpZiBwa2cuZW5kc3dpdGgocG9zdGZpeCk6CisgICAgICAgICAgICAgICAgaWYgbm90IHBvc3RmaXggaW4gcGtnczoKKyAgICAgICAgICAgICAgICAgICAgcGtnc1twb3N0Zml4XSA9IHt9CisgICAgICAgICAgICAgICAgcGtnc1twb3N0Zml4XVtwa2ddID0gKHBrZ1s6LWxlbihwb3N0Zml4KV0sIHBvc3RfZ2V0bmFtZSkKKworICAgICAgICBmb3IgcHJlZml4IGluIHByZWZpeGVzOgorICAgICAgICAgICAgaWYgcGtnLnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgICAgICAgICBpZiBub3QgcHJlZml4IGluIHBrZ3M6CisgICAgICAgICAgICAgICAgICAgIHBrZ3NbcHJlZml4XSA9IHt9CisgICAgICAgICAgICAgICAgcGtnc1twcmVmaXhdW3BrZ10gPSAocGtnWzotbGVuKHByZWZpeCldLCBwcmVfZ2V0bmFtZSkKKworICAgIGlmICItZGJnIiBpbiBwa2dzOgorICAgICAgICBwa2dsaWJkZXBzID0gcmVhZF9saWJkZXBfZmlsZXMoZCkKKyAgICAgICAgcGtnbGliZGVwbGlzdCA9IFtdCisgICAgICAgIGZvciBwa2cgaW4gcGtnbGliZGVwczoKKyAgICAgICAgICAgIGZvciBrIGluIHBrZ2xpYmRlcHNbcGtnXToKKyAgICAgICAgICAgICAgICBhZGRfZGVwKHBrZ2xpYmRlcGxpc3QsIGspCisgICAgICAgICMgRklYTUUgdGhpcyBzaG91bGQgbm90IGxvb2sgYXQgUE4gb25jZSBhbGwgdGFzayByZWNpcGVzIGluaGVyaXQgZnJvbSB0YXNrLmJiY2xhc3MKKyAgICAgICAgZGJnZGVmYXVsdGRlcHMgPSAoKGQuZ2V0VmFyKCdERVBDSEFJTl9EQkdERUZBVUxUREVQUycsIFRydWUpID09ICcxJykgb3IgKGQuZ2V0VmFyKCdQTicsIFRydWUpIG9yICcnKS5zdGFydHN3aXRoKCdwYWNrYWdlZ3JvdXAtJykpCisKKyAgICBmb3Igc3VmZml4IGluIHBrZ3M6CisgICAgICAgIGZvciBwa2cgaW4gcGtnc1tzdWZmaXhdOgorICAgICAgICAgICAgaWYgZC5nZXRWYXJGbGFnKCdSUkVDT01NRU5EU18nICsgcGtnLCAnbm9kZXBycmVjcycpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAoYmFzZSwgZnVuYykgPSBwa2dzW3N1ZmZpeF1bcGtnXQorICAgICAgICAgICAgaWYgc3VmZml4ID09ICItZGV2IjoKKyAgICAgICAgICAgICAgICBwa2dfYWRkZGVwcnJlY3MocGtnLCBiYXNlLCBzdWZmaXgsIGZ1bmMsIGRlcGVuZHMsIGQpCisgICAgICAgICAgICBlbGlmIHN1ZmZpeCA9PSAiLWRiZyI6CisgICAgICAgICAgICAgICAgaWYgbm90IGRiZ2RlZmF1bHRkZXBzOgorICAgICAgICAgICAgICAgICAgICBwa2dfYWRkcnJlY3MocGtnLCBiYXNlLCBzdWZmaXgsIGZ1bmMsIHBrZ2xpYmRlcGxpc3QsIGQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBsZW4ocGtnc1tzdWZmaXhdKSA9PSAxOgorICAgICAgICAgICAgICAgIHBrZ19hZGRycmVjcyhwa2csIGJhc2UsIHN1ZmZpeCwgZnVuYywgcmRlcGVuZHMsIGQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJkZXBzID0gW10KKyAgICAgICAgICAgICAgICBmb3IgZGVwIGluIGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhkLmdldFZhcignUkRFUEVORFNfJyArIGJhc2UsIFRydWUpIG9yICIiKToKKyAgICAgICAgICAgICAgICAgICAgYWRkX2RlcChyZGVwcywgZGVwKQorICAgICAgICAgICAgICAgIHBrZ19hZGRycmVjcyhwa2csIGJhc2UsIHN1ZmZpeCwgZnVuYywgcmRlcHMsIGQpCit9CisKKyMgU2luY2UgYml0YmFrZSBjYW4ndCBkZXRlcm1pbmUgd2hpY2ggdmFyaWFibGVzIGFyZSBhY2Nlc3NlZCBkdXJpbmcgcGFja2FnZQorIyBpdGVyYXRpb24sIHdlIG5lZWQgdG8gbGlzdCB0aGVtIGhlcmU6CitQQUNLQUdFVkFSUyA9ICJGSUxFUyBSREVQRU5EUyBSUkVDT01NRU5EUyBTVU1NQVJZIERFU0NSSVBUSU9OIFJTVUdHRVNUUyBSUFJPVklERVMgUkNPTkZMSUNUUyBQS0cgQUxMT1dfRU1QVFkgcGtnX3Bvc3RpbnN0IHBrZ19wb3N0cm0gSU5JVFNDUklQVF9OQU1FIElOSVRTQ1JJUFRfUEFSQU1TIERFQklBTl9OT0FVVE9OQU1FIEFMVEVSTkFUSVZFIFBLR0UgUEtHViBQS0dSIFVTRVJBRERfUEFSQU0gR1JPVVBBRERfUEFSQU0gQ09ORkZJTEVTIFNZU1RFTURfU0VSVklDRSBMSUNFTlNFIFNFQ1RJT04gcGtnX3ByZWluc3QgcGtnX3ByZXJtIFJSRVBMQUNFUyBHUk9VUE1FTVNfUEFSQU0gU1lTVEVNRF9BVVRPX0VOQUJMRSIKKworZGVmIGdlbl9wYWNrYWdldmFyKGQpOgorICAgIHJldCA9IFtdCisgICAgcGtncyA9IChkLmdldFZhcigiUEFDS0FHRVMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIHZhcnMgPSAoZC5nZXRWYXIoIlBBQ0tBR0VWQVJTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBmb3IgcCBpbiBwa2dzOgorICAgICAgICBmb3IgdiBpbiB2YXJzOgorICAgICAgICAgICAgcmV0LmFwcGVuZCh2ICsgIl8iICsgcCkKKworICAgICAgICAjIEVuc3VyZSB0aGF0IGNoYW5nZXMgdG8gSU5DT01QQVRJQkxFX0xJQ0VOU0UgcmUtcnVuIGRvX3BhY2thZ2UgZm9yCisgICAgICAgICMgYWZmZWN0ZWQgcmVjaXBlcy4KKyAgICAgICAgcmV0LmFwcGVuZCgnTElDRU5TRV9FWENMVVNJT04tJXMnICUgcCkKKyAgICByZXR1cm4gIiAiLmpvaW4ocmV0KQorCitQQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1MgPz0gIiIKKyMgRnVuY3Rpb25zIGZvciBzZXR0aW5nIHVwIFBLR0QKK1BBQ0tBR0VCVUlMRFBLR0QgPz0gIiBcCisgICAgICAgICAgICAgICAgcGVyZm9ybV9wYWNrYWdlY29weSBcCisgICAgICAgICAgICAgICAgJHtQQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1N9IFwKKyAgICAgICAgICAgICAgICBzcGxpdF9hbmRfc3RyaXBfZmlsZXMgXAorICAgICAgICAgICAgICAgIGZpeHVwX3Blcm1zIFwKKyAgICAgICAgICAgICAgICAiCisjIEZ1bmN0aW9ucyB3aGljaCBzcGxpdCBQS0dEIHVwIGludG8gc2VwYXJhdGUgcGFja2FnZXMKK1BBQ0tBR0VTUExJVEZVTkNTID89ICIgXAorICAgICAgICAgICAgICAgIHBhY2thZ2VfZG9fc3BsaXRfbG9jYWxlcyBcCisgICAgICAgICAgICAgICAgcG9wdWxhdGVfcGFja2FnZXMiCisjIEZ1bmN0aW9ucyB3aGljaCBwcm9jZXNzIG1ldGFkYXRhIGJhc2VkIG9uIHNwbGl0IHBhY2thZ2VzCitQQUNLQUdFRlVOQ1MgKz0gIiBcCisgICAgICAgICAgICAgICAgcGFja2FnZV9maXhzeW1saW5rcyBcCisgICAgICAgICAgICAgICAgcGFja2FnZV9uYW1lX2hvb2sgXAorICAgICAgICAgICAgICAgIHBhY2thZ2VfZG9fZmlsZWRlcHMgXAorICAgICAgICAgICAgICAgIHBhY2thZ2VfZG9fc2hsaWJzIFwKKyAgICAgICAgICAgICAgICBwYWNrYWdlX2RvX3BrZ2NvbmZpZyBcCisgICAgICAgICAgICAgICAgcmVhZF9zaGxpYmRlcHMgXAorICAgICAgICAgICAgICAgIHBhY2thZ2VfZGVwY2hhaW5zIFwKKyAgICAgICAgICAgICAgICBlbWl0X3BrZ2RhdGEiCisKK3B5dGhvbiBkb19wYWNrYWdlICgpIHsKKyAgICAjIENoYW5nZSB0aGUgZm9sbG93aW5nIHZlcnNpb24gdG8gY2F1c2Ugc3N0YXRlIHRvIGludmFsaWRhdGUgdGhlIHBhY2thZ2UKKyAgICAjIGNhY2hlLiAgVGhpcyBpcyB1c2VmdWwgaWYgYW4gaXRlbSB0aGlzIGNsYXNzIGRlcGVuZHMgb24gY2hhbmdlcyBpbiBhCisgICAgIyB3YXkgdGhhdCB0aGUgb3V0cHV0IG9mIHRoaXMgY2xhc3MgY2hhbmdlcy4gIHJwbWRlcHMgaXMgYSBnb29kIGV4YW1wbGUKKyAgICAjIGFzIGFueSBjaGFuZ2UgdG8gcnBtZGVwcyByZXF1aXJlcyB0aGlzIHRvIGJlIHJlcnVuLgorICAgICMgUEFDS0FHRV9CQkNMQVNTX1ZFUlNJT04gPSAiMSIKKworICAgICMgSW5pdCBjYWNoZWRwYXRoCisgICAgZ2xvYmFsIGNwYXRoCisgICAgY3BhdGggPSBvZS5jYWNoZWRwYXRoLkNhY2hlZFBhdGgoKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBTYW5pdHkgdGVzdCB0aGUgc2V0dXAKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgIHBhY2thZ2VzID0gKGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgaWYgbGVuKHBhY2thZ2VzKSA8IDE6CisgICAgICAgIGJiLmRlYnVnKDEsICJObyBwYWNrYWdlcyB0byBidWlsZCwgc2tpcHBpbmcgZG9fcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBvdXRkaXIgPSBkLmdldFZhcignREVQTE9ZX0RJUicsIFRydWUpCisgICAgZGVzdCA9IGQuZ2V0VmFyKCdEJywgVHJ1ZSkKKyAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgIGlmIG5vdCB3b3JrZGlyIG9yIG5vdCBvdXRkaXIgb3Igbm90IGRlc3Qgb3Igbm90IGR2YXIgb3Igbm90IHBuOgorICAgICAgICBtc2cgPSAiV09SS0RJUiwgREVQTE9ZX0RJUiwgRCwgUE4gYW5kIFBLR0QgYWxsIG11c3QgYmUgZGVmaW5lZCwgdW5hYmxlIHRvIHBhY2thZ2UiCisgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJ2YXItdW5kZWZpbmVkIiwgbXNnLCBkKQorICAgICAgICByZXR1cm4KKworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygicGFja2FnZV9nZXRfYXV0b19wciIsIGQpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIE9wdGltaXNhdGlvbnMKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICMgQ29udGludWFsbHkgZXhwYW5kaW5nIGNvbXBsZXggZXhwcmVzc2lvbnMgaXMgaW5lZmZpY2llbnQsIHBhcnRpY3VsYXJseQorICAgICMgd2hlbiB3ZSB3cml0ZSB0byB0aGUgZGF0YXN0b3JlIGFuZCBpbnZhbGlkYXRlIHRoZSBleHBhbnNpb24gY2FjaGUuIFRoaXMKKyAgICAjIGNvZGUgcHJlLWV4cGFuZHMgc29tZSBmcmVxdWVudGx5IHVzZWQgdmFyaWFibGVzCisKKyAgICBkZWYgZXhwYW5kVmFyKHgsIGQpOgorICAgICAgICBkLnNldFZhcih4LCBkLmdldFZhcih4LCBUcnVlKSkKKworICAgIGZvciB4IGluICdQTicsICdQVicsICdCUE4nLCAnVEFSR0VUX1NZUycsICdFWFRFTkRQUkFVVE8nOgorICAgICAgICBleHBhbmRWYXIoeCwgZCkKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgU2V0dXAgUEtHRCAoZnJvbSBEKQorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgZm9yIGYgaW4gKGQuZ2V0VmFyKCdQQUNLQUdFQlVJTERQS0dEJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhmLCBkKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBTcGxpdCB1cCBQS0dEIGludG8gUEtHREVTVAorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgY3BhdGggPSBvZS5jYWNoZWRwYXRoLkNhY2hlZFBhdGgoKQorCisgICAgZm9yIGYgaW4gKGQuZ2V0VmFyKCdQQUNLQUdFU1BMSVRGVU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoZiwgZCkKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgUHJvY2VzcyBQS0dERVNUCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAjIEJ1aWxkIGdsb2JhbCBsaXN0IG9mIGZpbGVzIGluIGVhY2ggc3BsaXQgcGFja2FnZQorICAgIGdsb2JhbCBwa2dmaWxlcworICAgIHBrZ2ZpbGVzID0ge30KKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgIHBrZ2ZpbGVzW3BrZ10gPSBbXQorICAgICAgICBmb3Igd2Fsa3Jvb3QsIGRpcnMsIGZpbGVzIGluIGNwYXRoLndhbGsocGtnZGVzdCArICIvIiArIHBrZyk6CisgICAgICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBwa2dmaWxlc1twa2ddLmFwcGVuZCh3YWxrcm9vdCArIG9zLnNlcCArIGZpbGUpCisKKyAgICBmb3IgZiBpbiAoZC5nZXRWYXIoJ1BBQ0tBR0VGVU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoZiwgZCkKK30KKworZG9fcGFja2FnZVtkaXJzXSA9ICIke1NITElCU1dPUktESVJ9ICR7UEtHREVTVFdPUkt9ICR7RH0iCitkb19wYWNrYWdlW3ZhcmRlcHNdICs9ICIke1BBQ0tBR0VCVUlMRFBLR0R9ICR7UEFDS0FHRVNQTElURlVOQ1N9ICR7UEFDS0FHRUZVTkNTfSAke0BnZW5fcGFja2FnZXZhcihkKX0iCithZGR0YXNrIHBhY2thZ2UgYWZ0ZXIgZG9faW5zdGFsbAorCitQQUNLQUdFTE9DSyA9ICIke1NUQUdJTkdfRElSfS9wYWNrYWdlLW91dHB1dC5sb2NrIgorU1NUQVRFVEFTS1MgKz0gImRvX3BhY2thZ2UiCitkb19wYWNrYWdlW2NsZWFuZGlyc10gPSAiJHtQS0dERVNUfSAke1BLR0RFU1RXT1JLfSIKK2RvX3BhY2thZ2Vbc3N0YXRlLXBsYWluZGlyc10gPSAiJHtQS0dEfSAke1BLR0RFU1R9ICR7UEtHREVTVFdPUkt9IgorZG9fcGFja2FnZVtzc3RhdGUtbG9ja2ZpbGUtc2hhcmVkXSA9ICIke1BBQ0tBR0VMT0NLfSIKK2RvX3BhY2thZ2Vfc2V0c2NlbmVbZGlyc10gPSAiJHtTVEFHSU5HX0RJUn0iCisKK3B5dGhvbiBkb19wYWNrYWdlX3NldHNjZW5lICgpIHsKKyAgICBzc3RhdGVfc2V0c2NlbmUoZCkKK30KK2FkZHRhc2sgZG9fcGFja2FnZV9zZXRzY2VuZQorCitkb19wYWNrYWdlZGF0YSAoKSB7CisJOgorfQorCithZGR0YXNrIHBhY2thZ2VkYXRhIGJlZm9yZSBkb19idWlsZCBhZnRlciBkb19wYWNrYWdlCisKK1NTVEFURVRBU0tTICs9ICJkb19wYWNrYWdlZGF0YSIKK2RvX3BhY2thZ2VkYXRhW3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7UEtHREVTVFdPUkt9IgorZG9fcGFja2FnZWRhdGFbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7UEtHREFUQV9ESVJ9IgorZG9fcGFja2FnZWRhdGFbc3N0YXRlLWxvY2tmaWxlLXNoYXJlZF0gPSAiJHtQQUNLQUdFTE9DS30iCitkb19wYWNrYWdlZGF0YVtzdGFtcC1leHRyYS1pbmZvXSA9ICIke01BQ0hJTkV9IgorCitweXRob24gZG9fcGFja2FnZWRhdGFfc2V0c2NlbmUgKCkgeworICAgIHNzdGF0ZV9zZXRzY2VuZShkKQorfQorYWRkdGFzayBkb19wYWNrYWdlZGF0YV9zZXRzY2VuZQorCisjCisjIEhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBwYWNrYWdlIHdyaXRpbmcgY2xhc3NlcworIworCitkZWYgbWFwcGluZ19yZW5hbWVfaG9vayhkKToKKyAgICAiIiIKKyAgICBSZXdyaXRlIHZhcmlhYmxlcyB0byBhY2NvdW50IGZvciBwYWNrYWdlIHJlbmFtaW5nIGluIHRoaW5ncworICAgIGxpa2UgZGViaWFuLmJiY2xhc3Mgb3IgbWFudWFsIFBLRyB2YXJpYWJsZSBuYW1lIGNoYW5nZXMKKyAgICAiIiIKKyAgICBwa2cgPSBkLmdldFZhcigiUEtHIiwgVHJ1ZSkKKyAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJSREVQRU5EUyIsIHBrZywgZCkKKyAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJSUkVDT01NRU5EUyIsIHBrZywgZCkKKyAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJSU1VHR0VTVFMiLCBwa2csIGQpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VfZGViLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlX2RlYi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZmVhNGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlX2RlYi5iYmNsYXNzCkBAIC0wLDAgKzEsMzM4IEBACisjCisjIENvcHlyaWdodCAyMDA2LTIwMDggT3BlbmVkSGFuZCBMdGQuCisjCisKK2luaGVyaXQgcGFja2FnZQorCitJTUFHRV9QS0dUWVBFID89ICJkZWIiCisKK0RQS0dfQVJDSCA/PSAiJHtUQVJHRVRfQVJDSH0iIAorCitQS0dXUklURURJUkRFQiA9ICIke1dPUktESVJ9L2RlcGxveS1kZWJzIgorCitBUFRDT05GX1RBUkdFVCA9ICIke1dPUktESVJ9IgorCitBUFRfQVJHUyA9ICIke0BbJycsICctLW5vLWluc3RhbGwtcmVjb21tZW5kcyddW2QuZ2V0VmFyKCJOT19SRUNPTU1FTkRBVElPTlMiLCBUcnVlKSA9PSAiMSJdfSIKKworIworIyBpbnN0YWxsIGEgYnVuY2ggb2YgcGFja2FnZXMgdXNpbmcgYXB0CisjIHRoZSBmb2xsb3dpbmcgc2hlbGwgdmFyaWFibGVzIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmM6CisjIElOU1RBTExfUk9PVEZTX0RFQiAtIGluc3RhbGwgcm9vdCBkaXIKKyMgSU5TVEFMTF9CQVNFQVJDSF9ERUIgLSBpbnN0YWxsIGJhc2UgYXJjaGl0ZWN1dHJlCisjIElOU1RBTExfQVJDSFNfREVCIC0gbGlzdCBvZiBhdmFpbGFibGUgYXJjaHMKKyMgSU5TVEFMTF9QQUNLQUdFU19OT1JNQUxfREVCIC0gcGFja2FnZXMgdG8gYmUgaW5zdGFsbGVkCisjIElOU1RBTExfUEFDS0FHRVNfQVRURU1QVE9OTFlfREVCIC0gcGFja2FnZXMgYXR0ZW1wZWQgdG8gYmUgaW5zdGFsbGVkIG9ubHkKKyMgSU5TVEFMTF9QQUNLQUdFU19MSU5HVUFTX0RFQiAtIGFkZGl0aW9uYWwgcGFja2FnZXMgZm9yIHVjbGliYworIyBJTlNUQUxMX1RBU0tfREVCIC0gdGFzayBuYW1lCisKK3B5dGhvbiBkb19wYWNrYWdlX2RlYiAoKSB7CisgICAgaW1wb3J0IHJlLCBjb3B5CisgICAgaW1wb3J0IHRleHR3cmFwCisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgaWYgbm90IHdvcmtkaXI6CisgICAgICAgIGJiLmVycm9yKCJXT1JLRElSIG5vdCBkZWZpbmVkLCB1bmFibGUgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgb3V0ZGlyID0gZC5nZXRWYXIoJ1BLR1dSSVRFRElSREVCJywgVHJ1ZSkKKyAgICBpZiBub3Qgb3V0ZGlyOgorICAgICAgICBiYi5lcnJvcigiUEtHV1JJVEVESVJERUIgbm90IGRlZmluZWQsIHVuYWJsZSB0byBwYWNrYWdlIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgaWYgbm90IHBhY2thZ2VzOgorICAgICAgICBiYi5kZWJ1ZygxLCAiUEFDS0FHRVMgbm90IGRlZmluZWQsIG5vdGhpbmcgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisKKyAgICBpZiBvcy5hY2Nlc3Mob3MucGF0aC5qb2luKHRtcGRpciwgInN0YW1wcyIsICJERUJfUEFDS0FHRV9JTkRFWF9DTEVBTiIpLG9zLlJfT0spOgorICAgICAgICBvcy51bmxpbmsob3MucGF0aC5qb2luKHRtcGRpciwgInN0YW1wcyIsICJERUJfUEFDS0FHRV9JTkRFWF9DTEVBTiIpKQorCisgICAgaWYgcGFja2FnZXMgPT0gW106CisgICAgICAgIGJiLmRlYnVnKDEsICJObyBwYWNrYWdlczsgbm90aGluZyB0byBkbyIpCisgICAgICAgIHJldHVybgorCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKworICAgIGRlZiBjbGVhbnVwY29udHJvbChyb290KToKKyAgICAgICAgZm9yIHAgaW4gWydDT05UUk9MJywgJ0RFQklBTiddOgorICAgICAgICAgICAgcCA9IG9zLnBhdGguam9pbihyb290LCBwKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocCk6CisgICAgICAgICAgICAgICAgYmIudXRpbHMucHJ1bmVkaXIocCkKKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIHJvb3QgPSAiJXMvJXMiICUgKHBrZ2Rlc3QsIHBrZykKKworICAgICAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKHJvb3QgKyAiLmxvY2siKQorCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1JPT1QnLCAnJykKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUk9PVF8lcycgJSBwa2csIHJvb3QpCisgICAgICAgIHBrZ25hbWUgPSBsb2NhbGRhdGEuZ2V0VmFyKCdQS0dfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcGtnbmFtZToKKyAgICAgICAgICAgIHBrZ25hbWUgPSBwa2cKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUEtHJywgcGtnbmFtZSkKKworICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCBkLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgIjoiICsgcGtnKQorCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShyb290KSkKKworICAgICAgICBwa2dvdXRkaXIgPSBvcy5wYXRoLmpvaW4ob3V0ZGlyLCBsb2NhbGRhdGEuZ2V0VmFyKCdQQUNLQUdFX0FSQ0gnLCBUcnVlKSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHBrZ291dGRpcikKKworICAgICAgICBvcy5jaGRpcihyb290KQorICAgICAgICBjbGVhbnVwY29udHJvbChyb290KQorICAgICAgICBmcm9tIGdsb2IgaW1wb3J0IGdsb2IKKyAgICAgICAgZyA9IGdsb2IoJyonKQorICAgICAgICBpZiBub3QgZyBhbmQgbG9jYWxkYXRhLmdldFZhcignQUxMT1dfRU1QVFknLCBGYWxzZSkgIT0gIjEiOgorICAgICAgICAgICAgYmIubm90ZSgiTm90IGNyZWF0aW5nIGVtcHR5IGFyY2hpdmUgZm9yICVzLSVzLSVzIiAlIChwa2csIGxvY2FsZGF0YS5nZXRWYXIoJ1BLR1YnLCBUcnVlKSwgbG9jYWxkYXRhLmdldFZhcignUEtHUicsIFRydWUpKSkKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGNvbnRyb2xkaXIgPSBvcy5wYXRoLmpvaW4ocm9vdCwgJ0RFQklBTicpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihjb250cm9sZGlyKQorICAgICAgICBvcy5jaG1vZChjb250cm9sZGlyLCAwNzU1KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgY29kZWNzCisgICAgICAgICAgICBjdHJsZmlsZSA9IGNvZGVjcy5vcGVuKG9zLnBhdGguam9pbihjb250cm9sZGlyLCAnY29udHJvbCcpLCAndycsICd1dGYtOCcpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoInVuYWJsZSB0byBvcGVuIGNvbnRyb2wgZmlsZSBmb3Igd3JpdGluZy4iKQorCisgICAgICAgIGZpZWxkcyA9IFtdCisgICAgICAgIHBlID0gZC5nZXRWYXIoJ1BLR0UnLCBUcnVlKQorICAgICAgICBpZiBwZSBhbmQgaW50KHBlKSA+IDA6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKFsiVmVyc2lvbjogJXM6JXMtJXNcbiIsIFsnUEtHRScsICdQS0dWJywgJ1BLR1InXV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKFsiVmVyc2lvbjogJXMtJXNcbiIsIFsnUEtHVicsICdQS0dSJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiRGVzY3JpcHRpb246ICVzXG4iLCBbJ0RFU0NSSVBUSU9OJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiU2VjdGlvbjogJXNcbiIsIFsnU0VDVElPTiddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIlByaW9yaXR5OiAlc1xuIiwgWydQUklPUklUWSddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIk1haW50YWluZXI6ICVzXG4iLCBbJ01BSU5UQUlORVInXV0pCisgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJBcmNoaXRlY3R1cmU6ICVzXG4iLCBbJ0RQS0dfQVJDSCddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIk9FOiAlc1xuIiwgWydQTiddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIlBhY2thZ2VBcmNoOiAlc1xuIiwgWydQQUNLQUdFX0FSQ0gnXV0pCisgICAgICAgIGlmIGQuZ2V0VmFyKCdIT01FUEFHRScsIFRydWUpOgorICAgICAgICAgICAgZmllbGRzLmFwcGVuZChbIkhvbWVwYWdlOiAlc1xuIiwgWydIT01FUEFHRSddXSkKKworICAgICAgICAjIFBhY2thZ2UsIFZlcnNpb24sIE1haW50YWluZXIsIERlc2NyaXB0aW9uIC0gbWFuZGF0b3J5CisgICAgICAgICMgU2VjdGlvbiwgUHJpb3JpdHksIEVzc2VudGlhbCwgQXJjaGl0ZWN0dXJlLCBTb3VyY2UsIERlcGVuZHMsIFByZS1EZXBlbmRzLCBSZWNvbW1lbmRzLCBTdWdnZXN0cywgQ29uZmxpY3RzLCBSZXBsYWNlcywgUHJvdmlkZXMgLSBPcHRpb25hbAorCisKKyAgICAgICAgZGVmIHB1bGxEYXRhKGwsIGQpOgorICAgICAgICAgICAgbDIgPSBbXQorICAgICAgICAgICAgZm9yIGkgaW4gbDoKKyAgICAgICAgICAgICAgICBkYXRhID0gZC5nZXRWYXIoaSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiBkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKGYpCisgICAgICAgICAgICAgICAgaWYgaSA9PSAnRFBLR19BUkNIJyBhbmQgZC5nZXRWYXIoJ1BBQ0tBR0VfQVJDSCcsIFRydWUpID09ICdhbGwnOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gJ2FsbCcKKyAgICAgICAgICAgICAgICBlbGlmIGkgPT0gJ1BBQ0tBR0VfQVJDSCcgb3IgaSA9PSAnRFBLR19BUkNIJzoKKyAgICAgICAgICAgICAgICAgICAjIFRoZSBwYXJhbXMgaW4gZGViIHBhY2thZ2UgY29udHJvbCBkb24ndCBhbGxvdyBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAgICAjIGBfJywgc28gY2hhbmdlIHRoZSBhcmNoJ3MgYF8nIHRvIGAtJy4gU3VjaCBhcyBgeDg2XzY0JworICAgICAgICAgICAgICAgICAgICMgLS0+YHg4Ni02NCcKKyAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKCdfJywgJy0nKQorICAgICAgICAgICAgICAgIGwyLmFwcGVuZChkYXRhKQorICAgICAgICAgICAgcmV0dXJuIGwyCisKKyAgICAgICAgY3RybGZpbGUud3JpdGUoIlBhY2thZ2U6ICVzXG4iICUgcGtnbmFtZSkKKyAgICAgICAgIyBjaGVjayBmb3IgcmVxdWlyZWQgZmllbGRzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciAoYywgZnMpIGluIGZpZWxkczoKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBmczoKKyAgICAgICAgICAgICAgICAgICAgIGlmIGxvY2FsZGF0YS5nZXRWYXIoZiwgRmFsc2UpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoZikKKyAgICAgICAgICAgICAgICAjIFNwZWNpYWwgYmVoYXZpb3IgZm9yIGRlc2NyaXB0aW9uLi4uCisgICAgICAgICAgICAgICAgaWYgJ0RFU0NSSVBUSU9OJyBpbiBmczoKKyAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnkgPSBsb2NhbGRhdGEuZ2V0VmFyKCdTVU1NQVJZJywgVHJ1ZSkgb3IgbG9jYWxkYXRhLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKSBvciAiLiIKKyAgICAgICAgICAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCdEZXNjcmlwdGlvbjogJXNcbicgJSB1bmljb2RlKHN1bW1hcnksJ3V0Zi04JykpCisgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkgb3IgIi4iCisgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IHRleHR3cmFwLmRlZGVudChkZXNjcmlwdGlvbikuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgaWYgJ1xcbicgaW4gZGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAgIyBNYW51YWxseSBpbmRlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdCBpbiBkZXNjcmlwdGlvbi5zcGxpdCgnXFxuJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgZG9uJ3QgbGltaXQgdGhlIHdpZHRoIHdoZW4gbWFudWFsbHkgaW5kZW50LCBidXQgd2UgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBuZWVkIHRoZSB0ZXh0d3JhcC5maWxsKCkgdG8gc2V0IHRoZSBpbml0aWFsX2luZGVudCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzdWJzZXF1ZW50X2luZGVudCwgc28gc2V0IGEgbGFyZ2Ugd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoJyVzXG4nICUgdW5pY29kZSh0ZXh0d3JhcC5maWxsKHQsIHdpZHRoPTEwMDAwMCwgaW5pdGlhbF9pbmRlbnQ9JyAnLCBzdWJzZXF1ZW50X2luZGVudD0nICcpLCd1dGYtOCcpKQorICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAjIEF1dG8gaW5kZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoJyVzXG4nICUgdW5pY29kZSh0ZXh0d3JhcC5maWxsKGRlc2NyaXB0aW9uLnN0cmlwKCksIHdpZHRoPTc0LCBpbml0aWFsX2luZGVudD0nICcsIHN1YnNlcXVlbnRfaW5kZW50PScgJyksJ3V0Zi04JykpCisKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgY3RybGZpbGUud3JpdGUodW5pY29kZShjICUgdHVwbGUocHVsbERhdGEoZnMsIGxvY2FsZGF0YSkpLCd1dGYtOCcpKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICAodHlwZSwgdmFsdWUsIHRyYWNlYmFjaykgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgIGN0cmxmaWxlLmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIk1pc3NpbmcgZmllbGQgZm9yIGRlYiBnZW5lcmF0aW9uOiAlcyIgJSB2YWx1ZSkKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICBjdHJsZmlsZS5jbG9zZSgpCisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJOb24gVVRGLTggY2hhcmFjdGVycyBmb3VuZCBpbiBvbmUgb2YgdGhlIGZpZWxkcyIpCisKKyAgICAgICAgIyBtb3JlIGZpZWxkcworCisgICAgICAgIGN1c3RvbV9maWVsZHNfY2h1bmsgPSBnZXRfcGFja2FnZV9hZGRpdGlvbmFsX21ldGFkYXRhKCJkZWIiLCBsb2NhbGRhdGEpCisgICAgICAgIGlmIGN1c3RvbV9maWVsZHNfY2h1bmsgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSh1bmljb2RlKGN1c3RvbV9maWVsZHNfY2h1bmspKQorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlxuIikKKworICAgICAgICBtYXBwaW5nX3JlbmFtZV9ob29rKGxvY2FsZGF0YSkKKworICAgICAgICBkZWYgZGViaWFuX2NtcF9yZW1hcCh2YXIpOgorICAgICAgICAgICAgIyBkcGtnIGRvZXMgbm90IGFsbG93IGZvciAnKCcgb3IgJyknIGluIGEgZGVwZW5kZW5jeSBuYW1lCisgICAgICAgICAgICAjIHJlcGxhY2UgdGhlc2UgaW5zdGFuY2VzIHdpdGggJ19fJyBhbmQgJ19fJworICAgICAgICAgICAgIworICAgICAgICAgICAgIyBJbiBkZWJpYW4gJz4nIGFuZCAnPCcgZG8gbm90IG1lYW4gd2hhdCBpdCBhcHBlYXJzIHRoZXkgbWVhbgorICAgICAgICAgICAgIyAgICc8JyA9IGxlc3Mgb3IgZXF1YWwKKyAgICAgICAgICAgICMgICAnPicgPSBncmVhdGVyIG9yIGVxdWFsCisgICAgICAgICAgICAjIGFkanVzdCB0aGVzZSB0byB0aGUgJzw8JyBhbmQgJz4+JyBlcXVpdmFsZW50cworICAgICAgICAgICAgIworICAgICAgICAgICAgZm9yIGRlcCBpbiB2YXI6CisgICAgICAgICAgICAgICAgaWYgJygnIGluIGRlcDoKKyAgICAgICAgICAgICAgICAgICAgbmV3ZGVwID0gZGVwLnJlcGxhY2UoJygnLCAnX18nKQorICAgICAgICAgICAgICAgICAgICBuZXdkZXAgPSBuZXdkZXAucmVwbGFjZSgnKScsICdfXycpCisgICAgICAgICAgICAgICAgICAgIGlmIG5ld2RlcCAhPSBkZXA6CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJbbmV3ZGVwXSA9IHZhcltkZXBdCisgICAgICAgICAgICAgICAgICAgICAgICBkZWwgdmFyW2RlcF0KKyAgICAgICAgICAgIGZvciBkZXAgaW4gdmFyOgorICAgICAgICAgICAgICAgIGZvciBpLCB2IGluIGVudW1lcmF0ZSh2YXJbZGVwXSk6CisgICAgICAgICAgICAgICAgICAgIGlmICh2IG9yICIiKS5zdGFydHN3aXRoKCI8ICIpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyW2RlcF1baV0gPSB2YXJbZGVwXVtpXS5yZXBsYWNlKCI8ICIsICI8PCAiKQorICAgICAgICAgICAgICAgICAgICBlbGlmICh2IG9yICIiKS5zdGFydHN3aXRoKCI+ICIpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyW2RlcF1baV0gPSB2YXJbZGVwXVtpXS5yZXBsYWNlKCI+ICIsICI+PiAiKQorCisgICAgICAgIHJkZXBlbmRzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJERVBFTkRTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocmRlcGVuZHMpCisgICAgICAgIGZvciBkZXAgaW4gcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgaWYgJyonIGluIGRlcDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCByZGVwZW5kc1tkZXBdCisgICAgICAgIHJyZWNvbW1lbmRzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJSRUNPTU1FTkRTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocnJlY29tbWVuZHMpCisgICAgICAgIGZvciBkZXAgaW4gcnJlY29tbWVuZHM6CisgICAgICAgICAgICAgICAgaWYgJyonIGluIGRlcDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBycmVjb21tZW5kc1tkZXBdCisgICAgICAgIHJzdWdnZXN0cyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSU1VHR0VTVFMiLCBUcnVlKSBvciAiIikKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChyc3VnZ2VzdHMpCisgICAgICAgICMgRGVsaWJlcmF0ZWx5IGRyb3AgdmVyc2lvbiBpbmZvcm1hdGlvbiBoZXJlLCBub3Qgd2FudGVkL3N1cHBvcnRlZCBieSBkZWIKKyAgICAgICAgcnByb3ZpZGVzID0gZGljdC5mcm9ta2V5cyhiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUlBST1ZJREVTIiwgVHJ1ZSkgb3IgIiIpLCBbXSkKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChycHJvdmlkZXMpCisgICAgICAgIHJyZXBsYWNlcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSUkVQTEFDRVMiLCBUcnVlKSBvciAiIikKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChycmVwbGFjZXMpCisgICAgICAgIHJjb25mbGljdHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUkNPTkZMSUNUUyIsIFRydWUpIG9yICIiKQorICAgICAgICBkZWJpYW5fY21wX3JlbWFwKHJjb25mbGljdHMpCisgICAgICAgIGlmIHJkZXBlbmRzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIkRlcGVuZHM6ICVzXG4iICUgdW5pY29kZShiYi51dGlscy5qb2luX2RlcHMocmRlcGVuZHMpKSkKKyAgICAgICAgaWYgcnN1Z2dlc3RzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlN1Z2dlc3RzOiAlc1xuIiAlIHVuaWNvZGUoYmIudXRpbHMuam9pbl9kZXBzKHJzdWdnZXN0cykpKQorICAgICAgICBpZiBycmVjb21tZW5kczoKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJSZWNvbW1lbmRzOiAlc1xuIiAlIHVuaWNvZGUoYmIudXRpbHMuam9pbl9kZXBzKHJyZWNvbW1lbmRzKSkpCisgICAgICAgIGlmIHJwcm92aWRlczoKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJQcm92aWRlczogJXNcbiIgJSB1bmljb2RlKGJiLnV0aWxzLmpvaW5fZGVwcyhycHJvdmlkZXMpKSkKKyAgICAgICAgaWYgcnJlcGxhY2VzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlJlcGxhY2VzOiAlc1xuIiAlIHVuaWNvZGUoYmIudXRpbHMuam9pbl9kZXBzKHJyZXBsYWNlcykpKQorICAgICAgICBpZiByY29uZmxpY3RzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIkNvbmZsaWN0czogJXNcbiIgJSB1bmljb2RlKGJiLnV0aWxzLmpvaW5fZGVwcyhyY29uZmxpY3RzKSkpCisgICAgICAgIGN0cmxmaWxlLmNsb3NlKCkKKworICAgICAgICBmb3Igc2NyaXB0IGluIFsicHJlaW5zdCIsICJwb3N0aW5zdCIsICJwcmVybSIsICJwb3N0cm0iXToKKyAgICAgICAgICAgIHNjcmlwdHZhciA9IGxvY2FsZGF0YS5nZXRWYXIoJ3BrZ18lcycgJSBzY3JpcHQsIFRydWUpCisgICAgICAgICAgICBpZiBub3Qgc2NyaXB0dmFyOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzY3JpcHR2YXIgPSBzY3JpcHR2YXIuc3RyaXAoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNjcmlwdGZpbGUgPSBvcGVuKG9zLnBhdGguam9pbihjb250cm9sZGlyLCBzY3JpcHQpLCAndycpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoInVuYWJsZSB0byBvcGVuICVzIHNjcmlwdCBmaWxlIGZvciB3cml0aW5nLiIgJSBzY3JpcHQpCisKKyAgICAgICAgICAgIGlmIHNjcmlwdHZhci5zdGFydHN3aXRoKCIjISIpOgorICAgICAgICAgICAgICAgIHBvcyA9IHNjcmlwdHZhci5maW5kKCJcbiIpICsgMQorICAgICAgICAgICAgICAgIHNjcmlwdGZpbGUud3JpdGUoc2NyaXB0dmFyWzpwb3NdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwb3MgPSAwCisgICAgICAgICAgICAgICAgc2NyaXB0ZmlsZS53cml0ZSgiIyEvYmluL3NoXG4iKQorCisgICAgICAgICAgICAjIFByZXZlbnQgdGhlIHByZXJtL3Bvc3RybSBzY3JpcHRzIGZyb20gYmVpbmcgcnVuIGR1cmluZyBhbiB1cGdyYWRlCisgICAgICAgICAgICBpZiBzY3JpcHQgaW4gKCdwcmVybScsICdwb3N0cm0nKToKKyAgICAgICAgICAgICAgICBzY3JpcHRmaWxlLndyaXRlKCdbICIkMSIgIT0gInVwZ3JhZGUiIF0gfHwgZXhpdCAwXG4nKQorCisgICAgICAgICAgICBzY3JpcHRmaWxlLndyaXRlKHNjcmlwdHZhcltwb3M6XSkKKyAgICAgICAgICAgIHNjcmlwdGZpbGUud3JpdGUoJ1xuJykKKyAgICAgICAgICAgIHNjcmlwdGZpbGUuY2xvc2UoKQorICAgICAgICAgICAgb3MuY2htb2Qob3MucGF0aC5qb2luKGNvbnRyb2xkaXIsIHNjcmlwdCksIDA3NTUpCisKKyAgICAgICAgY29uZmZpbGVzX3N0ciA9ICcgJy5qb2luKGdldF9jb25mZmlsZXMocGtnLCBkKSkKKyAgICAgICAgaWYgY29uZmZpbGVzX3N0cjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjb25mZmlsZXMgPSBvcGVuKG9zLnBhdGguam9pbihjb250cm9sZGlyLCAnY29uZmZpbGVzJyksICd3JykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5hYmxlIHRvIG9wZW4gY29uZmZpbGVzIGZvciB3cml0aW5nLiIpCisgICAgICAgICAgICBmb3IgZiBpbiBjb25mZmlsZXNfc3RyLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob2UucGF0aC5qb2luKHJvb3QsIGYpKToKKyAgICAgICAgICAgICAgICAgICAgY29uZmZpbGVzLndyaXRlKCclc1xuJyAlIGYpCisgICAgICAgICAgICBjb25mZmlsZXMuY2xvc2UoKQorCisgICAgICAgIG9zLmNoZGlyKGJhc2VkaXIpCisgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgiUEFUSD1cIiVzXCIgZHBrZy1kZWIgLWIgJXMgJXMiICUgKGxvY2FsZGF0YS5nZXRWYXIoIlBBVEgiLCBUcnVlKSwgcm9vdCwgcGtnb3V0ZGlyKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgaWYgcmV0ICE9IDA6CisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiZHBrZy1kZWIgZXhlY3V0aW9uIGZhaWxlZCIpCisKKyAgICAgICAgY2xlYW51cGNvbnRyb2wocm9vdCkKKyAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKK30KKyMgT3RoZXJ3aXNlIGFsbGFyY2ggcGFja2FnZXMgbWF5IGNoYW5nZSBkZXBlbmRpbmcgb24gb3ZlcnJpZGUgY29uZmlndXJhdGlvbgorZG9fcGFja2FnZV9kZWJbdmFyZGVwc2V4Y2x1ZGVdID0gIk9WRVJSSURFUyIKKworCitTU1RBVEVUQVNLUyArPSAiZG9fcGFja2FnZV93cml0ZV9kZWIiCitkb19wYWNrYWdlX3dyaXRlX2RlYltzc3RhdGUtaW5wdXRkaXJzXSA9ICIke1BLR1dSSVRFRElSREVCfSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke0RFUExPWV9ESVJfREVCfSIKKworcHl0aG9uIGRvX3BhY2thZ2Vfd3JpdGVfZGViX3NldHNjZW5lICgpIHsKKyAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKworICAgIGlmIG9zLmFjY2Vzcyhvcy5wYXRoLmpvaW4odG1wZGlyLCAic3RhbXBzIiwgIkRFQl9QQUNLQUdFX0lOREVYX0NMRUFOIiksb3MuUl9PSyk6CisgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4odG1wZGlyLCAic3RhbXBzIiwgIkRFQl9QQUNLQUdFX0lOREVYX0NMRUFOIikpCisKKyAgICBzc3RhdGVfc2V0c2NlbmUoZCkKK30KK2FkZHRhc2sgZG9fcGFja2FnZV93cml0ZV9kZWJfc2V0c2NlbmUKKworcHl0aG9uICgpIHsKKyAgICBpZiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSAhPSAnJzoKKyAgICAgICAgZGVwcyA9ICcgZHBrZy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCB2aXJ0dWFsL2Zha2Vyb290LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JworICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfZGViJywgJ2RlcGVuZHMnLCBkZXBzKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfZGViJywgJ2Zha2Vyb290JywgIjEiKQorCisgICAgIyBNYXAgVEFSR0VUX0FSQ0ggdG8gRGViaWFuJ3MgaWRlYXMgYWJvdXQgYXJjaGl0ZWN0dXJlcworICAgIGRhcmNoID0gZC5nZXRWYXIoJ0RQS0dfQVJDSCcsIFRydWUpCisgICAgaWYgZGFyY2ggaW4gWyJ4ODYiLCAiaTQ4NiIsICJpNTg2IiwgImk2ODYiLCAicGVudGl1bSJdOgorICAgICAgICAgZC5zZXRWYXIoJ0RQS0dfQVJDSCcsICdpMzg2JykKKyAgICBlbGlmIGRhcmNoID09ICJ4ODZfNjQiOgorICAgICAgICAgZC5zZXRWYXIoJ0RQS0dfQVJDSCcsICdhbWQ2NCcpCisgICAgZWxpZiBkYXJjaCA9PSAiYXJtIjoKKyAgICAgICAgIGQuc2V0VmFyKCdEUEtHX0FSQ0gnLCAnYXJtZWwnKQorfQorCitweXRob24gZG9fcGFja2FnZV93cml0ZV9kZWIgKCkgeworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygicmVhZF9zdWJwYWNrYWdlX21ldGFkYXRhIiwgZCkKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoImRvX3BhY2thZ2VfZGViIiwgZCkKK30KK2RvX3BhY2thZ2Vfd3JpdGVfZGViW2RpcnNdID0gIiR7UEtHV1JJVEVESVJERUJ9IgorZG9fcGFja2FnZV93cml0ZV9kZWJbY2xlYW5kaXJzXSA9ICIke1BLR1dSSVRFRElSREVCfSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW3VtYXNrXSA9ICIwMjIiCithZGR0YXNrIHBhY2thZ2Vfd3JpdGVfZGViIGFmdGVyIGRvX3BhY2thZ2VkYXRhIGRvX3BhY2thZ2UKKworCitQQUNLQUdFSU5ERVhERVBTICs9ICJkcGtnLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorUEFDS0FHRUlOREVYREVQUyArPSAiYXB0LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorCitkb19idWlsZFtyZWNyZGVwdGFza10gKz0gImRvX3BhY2thZ2Vfd3JpdGVfZGViIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZV9pcGsuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VfaXBrLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRkN2E3ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VfaXBrLmJiY2xhc3MKQEAgLTAsMCArMSwyODkgQEAKK2luaGVyaXQgcGFja2FnZQorCitJTUFHRV9QS0dUWVBFID89ICJpcGsiCisKK0lQS0dDT05GX1RBUkdFVCA9ICIke1dPUktESVJ9L29wa2cuY29uZiIKK0lQS0dDT05GX1NESyA9ICAiJHtXT1JLRElSfS9vcGtnLXNkay5jb25mIgorCitQS0dXUklURURJUklQSyA9ICIke1dPUktESVJ9L2RlcGxveS1pcGtzIgorCisjIFByb2dyYW0gdG8gYmUgdXNlZCB0byBidWlsZCBvcGtnIHBhY2thZ2VzCitPUEtHQlVJTERDTUQgPz89ICJvcGtnLWJ1aWxkIgorCitPUEtHX0FSR1MgPSAiLS1mb3JjZV9wb3N0aW5zdGFsbCAtLXByZWZlci1hcmNoLXRvLXZlcnNpb24iCitPUEtHX0FSR1MgKz0gIiR7QFsnJywgJy0tbm8taW5zdGFsbC1yZWNvbW1lbmRzJ11bZC5nZXRWYXIoIk5PX1JFQ09NTUVOREFUSU9OUyIsIFRydWUpID09ICIxIl19IgorT1BLR19BUkdTICs9ICIke0BbJycsICctLWFkZC1leGNsdWRlICcgKyAnIC0tYWRkLWV4Y2x1ZGUgJy5qb2luKChkLmdldFZhcignUEFDS0FHRV9FWENMVURFJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpXVsoZC5nZXRWYXIoIlBBQ0tBR0VfRVhDTFVERSIsIFRydWUpIG9yICIiKSAhPSAiIl19IgorCitPUEtHTElCRElSID0gIiR7bG9jYWxzdGF0ZWRpcn0vbGliIgorCitweXRob24gZG9fcGFja2FnZV9pcGsgKCkgeworICAgIGltcG9ydCByZSwgY29weQorICAgIGltcG9ydCB0ZXh0d3JhcAorICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIG91dGRpciA9IGQuZ2V0VmFyKCdQS0dXUklURURJUklQSycsIFRydWUpCisgICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBpZiBub3Qgd29ya2RpciBvciBub3Qgb3V0ZGlyIG9yIG5vdCB0bXBkaXI6CisgICAgICAgIGJiLmVycm9yKCJWYXJpYWJsZXMgaW5jb3JyZWN0bHkgc2V0LCB1bmFibGUgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIGlmIG5vdCBwYWNrYWdlcyBvciBwYWNrYWdlcyA9PSAnJzoKKyAgICAgICAgYmIuZGVidWcoMSwgIk5vIHBhY2thZ2VzOyBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIFdlJ3JlIGFib3V0IHRvIGFkZCBuZXcgcGFja2FnZXMgc28gdGhlIGluZGV4IG5lZWRzIHRvIGJlIGNoZWNrZWQKKyAgICAjIHNvIHJlbW92ZSB0aGUgYXBwcm9wcmlhdGUgc3RhbXAgZmlsZS4KKyAgICBpZiBvcy5hY2Nlc3Mob3MucGF0aC5qb2luKHRtcGRpciwgInN0YW1wcyIsICJJUEtfUEFDS0FHRV9JTkRFWF9DTEVBTiIpLCBvcy5SX09LKToKKyAgICAgICAgb3MudW5saW5rKG9zLnBhdGguam9pbih0bXBkaXIsICJzdGFtcHMiLCAiSVBLX1BBQ0tBR0VfSU5ERVhfQ0xFQU4iKSkKKworICAgIGRlZiBjbGVhbnVwY29udHJvbChyb290KToKKyAgICAgICAgZm9yIHAgaW4gWydDT05UUk9MJywgJ0RFQklBTiddOgorICAgICAgICAgICAgcCA9IG9zLnBhdGguam9pbihyb290LCBwKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocCk6CisgICAgICAgICAgICAgICAgYmIudXRpbHMucHJ1bmVkaXIocCkKKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIHJvb3QgPSAiJXMvJXMiICUgKHBrZ2Rlc3QsIHBrZykKKworICAgICAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKHJvb3QgKyAiLmxvY2siKQorCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1JPT1QnLCAnJykKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUk9PVF8lcycgJSBwa2csIHJvb3QpCisgICAgICAgIHBrZ25hbWUgPSBsb2NhbGRhdGEuZ2V0VmFyKCdQS0dfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcGtnbmFtZToKKyAgICAgICAgICAgIHBrZ25hbWUgPSBwa2cKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUEtHJywgcGtnbmFtZSkKKworICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCBkLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgIjoiICsgcGtnKQorCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShyb290KSkKKyAgICAgICAgYXJjaCA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BBQ0tBR0VfQVJDSCcsIFRydWUpCisKKyAgICAgICAgaWYgbG9jYWxkYXRhLmdldFZhcignSVBLX0hJRVJBUkNISUNBTF9GRUVEJywgRmFsc2UpID09ICIxIjoKKyAgICAgICAgICAgICMgU3ByZWFkIHBhY2thZ2VzIGFjcm9zcyBzdWJkaXJlY3RvcmllcyBzbyBlYWNoIGlzbid0IHRvbyBjcm93ZGVkCisgICAgICAgICAgICBpZiBwa2duYW1lLnN0YXJ0c3dpdGgoJ2xpYicpOgorICAgICAgICAgICAgICAgIHBrZ19wcmVmaXggPSAnbGliJyArIHBrZ25hbWVbM10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGtnX3ByZWZpeCA9IHBrZ25hbWVbMF0KKworICAgICAgICAgICAgIyBLZWVwIC1kYmcsIC1kZXYsIC1kb2MsIC1zdGF0aWNkZXYsIC1sb2NhbGUgYW5kIC1sb2NhbGUtKiBwYWNrYWdlcworICAgICAgICAgICAgIyB0b2dldGhlci4gVGhlc2UgcGFja2FnZSBzdWZmaXhlcyBhcmUgdGFrZW4gZnJvbSB0aGUgZGVmaW5pdGlvbnMgb2YKKyAgICAgICAgICAgICMgUEFDS0FHRVMgYW5kIFBBQ0tBR0VTX0RZTkFNSUMgaW4gbWV0YS9jb25mL2JpdGJha2UuY29uZgorICAgICAgICAgICAgaWYgcGtnbmFtZVstNDpdIGluICgnLWRiZycsICctZGV2JywgJy1kb2MnKToKKyAgICAgICAgICAgICAgICBwa2dfc3ViZGlyID0gcGtnbmFtZVs6LTRdCisgICAgICAgICAgICBlbGlmIHBrZ25hbWUuZW5kc3dpdGgoJy1zdGF0aWNkZXYnKToKKyAgICAgICAgICAgICAgICBwa2dfc3ViZGlyID0gcGtnbmFtZVs6LTEwXQorICAgICAgICAgICAgZWxpZiBwa2duYW1lLmVuZHN3aXRoKCctbG9jYWxlJyk6CisgICAgICAgICAgICAgICAgcGtnX3N1YmRpciA9IHBrZ25hbWVbOi03XQorICAgICAgICAgICAgZWxpZiAnLWxvY2FsZS0nIGluIHBrZ25hbWU6CisgICAgICAgICAgICAgICAgcGtnX3N1YmRpciA9IHBrZ25hbWVbOnBrZ25hbWUuZmluZCgnLWxvY2FsZS0nKV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGtnX3N1YmRpciA9IHBrZ25hbWUKKworICAgICAgICAgICAgcGtnb3V0ZGlyID0gIiVzLyVzLyVzLyVzIiAlIChvdXRkaXIsIGFyY2gsIHBrZ19wcmVmaXgsIHBrZ19zdWJkaXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwa2dvdXRkaXIgPSAiJXMvJXMiICUgKG91dGRpciwgYXJjaCkKKworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocGtnb3V0ZGlyKQorICAgICAgICBvcy5jaGRpcihyb290KQorICAgICAgICBjbGVhbnVwY29udHJvbChyb290KQorICAgICAgICBmcm9tIGdsb2IgaW1wb3J0IGdsb2IKKyAgICAgICAgZyA9IGdsb2IoJyonKQorICAgICAgICBpZiBub3QgZyBhbmQgbG9jYWxkYXRhLmdldFZhcignQUxMT1dfRU1QVFknLCBGYWxzZSkgIT0gIjEiOgorICAgICAgICAgICAgYmIubm90ZSgiTm90IGNyZWF0aW5nIGVtcHR5IGFyY2hpdmUgZm9yICVzLSVzLSVzIiAlIChwa2csIGxvY2FsZGF0YS5nZXRWYXIoJ1BLR1YnLCBUcnVlKSwgbG9jYWxkYXRhLmdldFZhcignUEtHUicsIFRydWUpKSkKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGNvbnRyb2xkaXIgPSBvcy5wYXRoLmpvaW4ocm9vdCwgJ0NPTlRST0wnKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoY29udHJvbGRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3RybGZpbGUgPSBvcGVuKG9zLnBhdGguam9pbihjb250cm9sZGlyLCAnY29udHJvbCcpLCAndycpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoInVuYWJsZSB0byBvcGVuIGNvbnRyb2wgZmlsZSBmb3Igd3JpdGluZy4iKQorCisgICAgICAgIGZpZWxkcyA9IFtdCisgICAgICAgIHBlID0gZC5nZXRWYXIoJ1BLR0UnLCBUcnVlKQorICAgICAgICBpZiBwZSBhbmQgaW50KHBlKSA+IDA6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKFsiVmVyc2lvbjogJXM6JXMtJXNcbiIsIFsnUEtHRScsICdQS0dWJywgJ1BLR1InXV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKFsiVmVyc2lvbjogJXMtJXNcbiIsIFsnUEtHVicsICdQS0dSJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiRGVzY3JpcHRpb246ICVzXG4iLCBbJ0RFU0NSSVBUSU9OJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiU2VjdGlvbjogJXNcbiIsIFsnU0VDVElPTiddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIlByaW9yaXR5OiAlc1xuIiwgWydQUklPUklUWSddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIk1haW50YWluZXI6ICVzXG4iLCBbJ01BSU5UQUlORVInXV0pCisgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJMaWNlbnNlOiAlc1xuIiwgWydMSUNFTlNFJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiQXJjaGl0ZWN0dXJlOiAlc1xuIiwgWydQQUNLQUdFX0FSQ0gnXV0pCisgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJPRTogJXNcbiIsIFsnUE4nXV0pCisgICAgICAgIGlmIGQuZ2V0VmFyKCdIT01FUEFHRScsIFRydWUpOgorICAgICAgICAgICAgZmllbGRzLmFwcGVuZChbIkhvbWVwYWdlOiAlc1xuIiwgWydIT01FUEFHRSddXSkKKworICAgICAgICBkZWYgcHVsbERhdGEobCwgZCk6CisgICAgICAgICAgICBsMiA9IFtdCisgICAgICAgICAgICBmb3IgaSBpbiBsOgorICAgICAgICAgICAgICAgIGwyLmFwcGVuZChkLmdldFZhcihpLCBUcnVlKSkKKyAgICAgICAgICAgIHJldHVybiBsMgorCisgICAgICAgIGN0cmxmaWxlLndyaXRlKCJQYWNrYWdlOiAlc1xuIiAlIHBrZ25hbWUpCisgICAgICAgICMgY2hlY2sgZm9yIHJlcXVpcmVkIGZpZWxkcworICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgKGMsIGZzKSBpbiBmaWVsZHM6CisgICAgICAgICAgICAgICAgZm9yIGYgaW4gZnM6CisgICAgICAgICAgICAgICAgICAgIGlmIGxvY2FsZGF0YS5nZXRWYXIoZiwgRmFsc2UpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcihmKQorICAgICAgICAgICAgICAgICMgU3BlY2lhbCBiZWhhdmlvciBmb3IgZGVzY3JpcHRpb24uLi4KKyAgICAgICAgICAgICAgICBpZiAnREVTQ1JJUFRJT04nIGluIGZzOgorICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5ID0gbG9jYWxkYXRhLmdldFZhcignU1VNTUFSWScsIFRydWUpIG9yIGxvY2FsZGF0YS5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkgb3IgIi4iCisgICAgICAgICAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCdEZXNjcmlwdGlvbjogJXNcbicgJSBzdW1tYXJ5KQorICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkgb3IgIi4iCisgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGV4dHdyYXAuZGVkZW50KGRlc2NyaXB0aW9uKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGlmICdcXG4nIGluIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBNYW51YWxseSBpbmRlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0IGluIGRlc2NyaXB0aW9uLnNwbGl0KCdcXG4nKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGRvbid0IGxpbWl0IHRoZSB3aWR0aCB3aGVuIG1hbnVhbGx5IGluZGVudCwgYnV0IHdlIGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBuZWVkIHRoZSB0ZXh0d3JhcC5maWxsKCkgdG8gc2V0IHRoZSBpbml0aWFsX2luZGVudCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN1YnNlcXVlbnRfaW5kZW50LCBzbyBzZXQgYSBsYXJnZSB3aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCclc1xuJyAlIHRleHR3cmFwLmZpbGwodC5zdHJpcCgpLCB3aWR0aD0xMDAwMDAsIGluaXRpYWxfaW5kZW50PScgJywgc3Vic2VxdWVudF9pbmRlbnQ9JyAnKSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQXV0byBpbmRlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCclc1xuJyAlIHRleHR3cmFwLmZpbGwoZGVzY3JpcHRpb24sIHdpZHRoPTc0LCBpbml0aWFsX2luZGVudD0nICcsIHN1YnNlcXVlbnRfaW5kZW50PScgJykpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoYyAlIHR1cGxlKHB1bGxEYXRhKGZzLCBsb2NhbGRhdGEpKSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIGN0cmxmaWxlLmNsb3NlKCkKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJNaXNzaW5nIGZpZWxkIGZvciBpcGsgZ2VuZXJhdGlvbjogJXMiICUgdmFsdWUpCisgICAgICAgICMgbW9yZSBmaWVsZHMKKworICAgICAgICBjdXN0b21fZmllbGRzX2NodW5rID0gZ2V0X3BhY2thZ2VfYWRkaXRpb25hbF9tZXRhZGF0YSgiaXBrIiwgbG9jYWxkYXRhKQorICAgICAgICBpZiBjdXN0b21fZmllbGRzX2NodW5rIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoY3VzdG9tX2ZpZWxkc19jaHVuaykKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJcbiIpCisKKyAgICAgICAgbWFwcGluZ19yZW5hbWVfaG9vayhsb2NhbGRhdGEpCisKKyAgICAgICAgZGVmIGRlYmlhbl9jbXBfcmVtYXAodmFyKToKKyAgICAgICAgICAgICMgSW4gZGViaWFuICc+JyBhbmQgJzwnIGRvIG5vdCBtZWFuIHdoYXQgaXQgYXBwZWFycyB0aGV5IG1lYW4KKyAgICAgICAgICAgICMgICAnPCcgPSBsZXNzIG9yIGVxdWFsCisgICAgICAgICAgICAjICAgJz4nID0gZ3JlYXRlciBvciBlcXVhbAorICAgICAgICAgICAgIyBhZGp1c3QgdGhlc2UgdG8gdGhlICc8PCcgYW5kICc+PicgZXF1aXZhbGVudHMKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgIGZvciBkZXAgaW4gdmFyOgorICAgICAgICAgICAgICAgIGZvciBpLCB2IGluIGVudW1lcmF0ZSh2YXJbZGVwXSk6CisgICAgICAgICAgICAgICAgICAgIGlmICh2IG9yICIiKS5zdGFydHN3aXRoKCI8ICIpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyW2RlcF1baV0gPSB2YXJbZGVwXVtpXS5yZXBsYWNlKCI8ICIsICI8PCAiKQorICAgICAgICAgICAgICAgICAgICBlbGlmICh2IG9yICIiKS5zdGFydHN3aXRoKCI+ICIpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyW2RlcF1baV0gPSB2YXJbZGVwXVtpXS5yZXBsYWNlKCI+ICIsICI+PiAiKQorCisgICAgICAgIHJkZXBlbmRzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJERVBFTkRTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocmRlcGVuZHMpCisgICAgICAgIHJyZWNvbW1lbmRzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJSRUNPTU1FTkRTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocnJlY29tbWVuZHMpCisgICAgICAgIHJzdWdnZXN0cyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSU1VHR0VTVFMiLCBUcnVlKSBvciAiIikKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChyc3VnZ2VzdHMpCisgICAgICAgICMgRGVsaWJlcmF0ZWx5IGRyb3AgdmVyc2lvbiBpbmZvcm1hdGlvbiBoZXJlLCBub3Qgd2FudGVkL3N1cHBvcnRlZCBieSBpcGsKKyAgICAgICAgcnByb3ZpZGVzID0gZGljdC5mcm9ta2V5cyhiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUlBST1ZJREVTIiwgVHJ1ZSkgb3IgIiIpLCBbXSkKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChycHJvdmlkZXMpCisgICAgICAgIHJyZXBsYWNlcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSUkVQTEFDRVMiLCBUcnVlKSBvciAiIikKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChycmVwbGFjZXMpCisgICAgICAgIHJjb25mbGljdHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUkNPTkZMSUNUUyIsIFRydWUpIG9yICIiKQorICAgICAgICBkZWJpYW5fY21wX3JlbWFwKHJjb25mbGljdHMpCisKKyAgICAgICAgaWYgcmRlcGVuZHM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiRGVwZW5kczogJXNcbiIgJSBiYi51dGlscy5qb2luX2RlcHMocmRlcGVuZHMpKQorICAgICAgICBpZiByc3VnZ2VzdHM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiU3VnZ2VzdHM6ICVzXG4iICUgYmIudXRpbHMuam9pbl9kZXBzKHJzdWdnZXN0cykpCisgICAgICAgIGlmIHJyZWNvbW1lbmRzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlJlY29tbWVuZHM6ICVzXG4iICUgYmIudXRpbHMuam9pbl9kZXBzKHJyZWNvbW1lbmRzKSkKKyAgICAgICAgaWYgcnByb3ZpZGVzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlByb3ZpZGVzOiAlc1xuIiAlIGJiLnV0aWxzLmpvaW5fZGVwcyhycHJvdmlkZXMpKQorICAgICAgICBpZiBycmVwbGFjZXM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiUmVwbGFjZXM6ICVzXG4iICUgYmIudXRpbHMuam9pbl9kZXBzKHJyZXBsYWNlcykpCisgICAgICAgIGlmIHJjb25mbGljdHM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiQ29uZmxpY3RzOiAlc1xuIiAlIGJiLnV0aWxzLmpvaW5fZGVwcyhyY29uZmxpY3RzKSkKKyAgICAgICAgc3JjX3VyaSA9IGxvY2FsZGF0YS5nZXRWYXIoIlNSQ19VUkkiLCBUcnVlKS5zdHJpcCgpIG9yICJOb25lIgorICAgICAgICBpZiBzcmNfdXJpOgorICAgICAgICAgICAgc3JjX3VyaSA9IHJlLnN1YigiXHMrIiwgIiAiLCBzcmNfdXJpKQorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlNvdXJjZTogJXNcbiIgJSAiICIuam9pbihzcmNfdXJpLnNwbGl0KCkpKQorICAgICAgICBjdHJsZmlsZS5jbG9zZSgpCisKKyAgICAgICAgZm9yIHNjcmlwdCBpbiBbInByZWluc3QiLCAicG9zdGluc3QiLCAicHJlcm0iLCAicG9zdHJtIl06CisgICAgICAgICAgICBzY3JpcHR2YXIgPSBsb2NhbGRhdGEuZ2V0VmFyKCdwa2dfJXMnICUgc2NyaXB0LCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHNjcmlwdHZhcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNjcmlwdGZpbGUgPSBvcGVuKG9zLnBhdGguam9pbihjb250cm9sZGlyLCBzY3JpcHQpLCAndycpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoInVuYWJsZSB0byBvcGVuICVzIHNjcmlwdCBmaWxlIGZvciB3cml0aW5nLiIgJSBzY3JpcHQpCisgICAgICAgICAgICBzY3JpcHRmaWxlLndyaXRlKHNjcmlwdHZhcikKKyAgICAgICAgICAgIHNjcmlwdGZpbGUuY2xvc2UoKQorICAgICAgICAgICAgb3MuY2htb2Qob3MucGF0aC5qb2luKGNvbnRyb2xkaXIsIHNjcmlwdCksIDA3NTUpCisKKyAgICAgICAgY29uZmZpbGVzX3N0ciA9ICcgJy5qb2luKGdldF9jb25mZmlsZXMocGtnLCBkKSkKKyAgICAgICAgaWYgY29uZmZpbGVzX3N0cjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjb25mZmlsZXMgPSBvcGVuKG9zLnBhdGguam9pbihjb250cm9sZGlyLCAnY29uZmZpbGVzJyksICd3JykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5hYmxlIHRvIG9wZW4gY29uZmZpbGVzIGZvciB3cml0aW5nLiIpCisgICAgICAgICAgICBmb3IgZiBpbiBjb25mZmlsZXNfc3RyLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob2UucGF0aC5qb2luKHJvb3QsIGYpKToKKyAgICAgICAgICAgICAgICAgICAgY29uZmZpbGVzLndyaXRlKCclc1xuJyAlIGYpCisgICAgICAgICAgICBjb25mZmlsZXMuY2xvc2UoKQorCisgICAgICAgIG9zLmNoZGlyKGJhc2VkaXIpCisgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgiUEFUSD1cIiVzXCIgJXMgJXMgJXMiICUgKGxvY2FsZGF0YS5nZXRWYXIoIlBBVEgiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcigiT1BLR0JVSUxEQ01EIiwxKSwgcGtnLCBwa2dvdXRkaXIpLCBzaGVsbD1UcnVlKQorICAgICAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJvcGtnLWJ1aWxkIGV4ZWN1dGlvbiBmYWlsZWQiKQorCisgICAgICAgIGNsZWFudXBjb250cm9sKHJvb3QpCisgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisKK30KKyMgT3RoZXJ3aXNlIGFsbGFyY2ggcGFja2FnZXMgbWF5IGNoYW5nZSBkZXBlbmRpbmcgb24gb3ZlcnJpZGUgY29uZmlndXJhdGlvbgorZG9fcGFja2FnZV9pcGtbdmFyZGVwc2V4Y2x1ZGVdID0gIk9WRVJSSURFUyIKKworU1NUQVRFVEFTS1MgKz0gImRvX3BhY2thZ2Vfd3JpdGVfaXBrIgorZG9fcGFja2FnZV93cml0ZV9pcGtbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtQS0dXUklURURJUklQS30iCitkb19wYWNrYWdlX3dyaXRlX2lwa1tzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtERVBMT1lfRElSX0lQS30iCisKK3B5dGhvbiBkb19wYWNrYWdlX3dyaXRlX2lwa19zZXRzY2VuZSAoKSB7CisgICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisKKyAgICBpZiBvcy5hY2Nlc3Mob3MucGF0aC5qb2luKHRtcGRpciwgInN0YW1wcyIsICJJUEtfUEFDS0FHRV9JTkRFWF9DTEVBTiIpLCBvcy5SX09LKToKKyAgICAgICAgb3MudW5saW5rKG9zLnBhdGguam9pbih0bXBkaXIsICJzdGFtcHMiLCAiSVBLX1BBQ0tBR0VfSU5ERVhfQ0xFQU4iKSkKKworICAgIHNzdGF0ZV9zZXRzY2VuZShkKQorfQorYWRkdGFzayBkb19wYWNrYWdlX3dyaXRlX2lwa19zZXRzY2VuZQorCitweXRob24gKCkgeworICAgIGlmIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpICE9ICcnOgorICAgICAgICBkZXBzID0gJyBvcGtnLXV0aWxzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IHZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnCisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV9pcGsnLCAnZGVwZW5kcycsIGRlcHMpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV9pcGsnLCAnZmFrZXJvb3QnLCAiMSIpCit9CisKK3B5dGhvbiBkb19wYWNrYWdlX3dyaXRlX2lwayAoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJyZWFkX3N1YnBhY2thZ2VfbWV0YWRhdGEiLCBkKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiZG9fcGFja2FnZV9pcGsiLCBkKQorfQorZG9fcGFja2FnZV93cml0ZV9pcGtbZGlyc10gPSAiJHtQS0dXUklURURJUklQS30iCitkb19wYWNrYWdlX3dyaXRlX2lwa1tjbGVhbmRpcnNdID0gIiR7UEtHV1JJVEVESVJJUEt9IgorZG9fcGFja2FnZV93cml0ZV9pcGtbdW1hc2tdID0gIjAyMiIKK2FkZHRhc2sgcGFja2FnZV93cml0ZV9pcGsgYWZ0ZXIgZG9fcGFja2FnZWRhdGEgZG9fcGFja2FnZQorCitQQUNLQUdFSU5ERVhERVBTICs9ICJvcGtnLXV0aWxzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorUEFDS0FHRUlOREVYREVQUyArPSAib3BrZy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworZG9fYnVpbGRbcmVjcmRlcHRhc2tdICs9ICJkb19wYWNrYWdlX3dyaXRlX2lwayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VfcnBtLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlX3JwbS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYTE2MzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlX3JwbS5iYmNsYXNzCkBAIC0wLDAgKzEsNzc0IEBACitpbmhlcml0IHBhY2thZ2UKKworSU1BR0VfUEtHVFlQRSA/PSAicnBtIgorCitSUE09InJwbSIKK1JQTUJVSUxEPSJycG1idWlsZCIKKworUEtHV1JJVEVESVJSUE0gPSAiJHtXT1JLRElSfS9kZXBsb3ktcnBtcyIKKworIyBNYWludGFpbmluZyB0aGUgcGVyZmlsZSBkZXBlbmRlbmNpZXMgaGFzIHNpbmdpZmljYW50IG92ZXJoZWFkIHdoZW4gd3JpdGluZyB0aGUgCisjIHBhY2thZ2VzLiBXaGVuIHNldCwgdGhpcyB2YWx1ZSBtZXJnZXMgdGhlbSBmb3IgZWZmaWNpZW5jeS4KK01FUkdFUEVSRklMRURFUFMgPSAiMSIKKworIyBDb25zdHJ1Y3QgcGVyIGZpbGUgZGVwZW5kZW5jaWVzIGZpbGUKK2RlZiB3cml0ZV9ycG1fcGVyZmlsZWRhdGEoc3JjbmFtZSwgZCk6CisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgcGtnZCA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKworICAgIGRlZiBkdW1wX2ZpbGVyZGVwcyh2YXJuYW1lLCBvdXRmaWxlLCBkKToKKyAgICAgICAgb3V0ZmlsZS53cml0ZSgiIyEvdXNyL2Jpbi9lbnYgcHl0aG9uXG5cbiIpCisgICAgICAgIG91dGZpbGUud3JpdGUoIiMgRGVwZW5kZW5jeSB0YWJsZVxuIikKKyAgICAgICAgb3V0ZmlsZS53cml0ZSgnZGVwcyA9IHtcbicpCisgICAgICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgICAgIGRlcGVuZHNmbGlzdF9rZXkgPSAnRklMRScgKyB2YXJuYW1lICsgJ0ZMSVNUJyArICJfIiArIHBrZworICAgICAgICAgICAgZGVwZW5kc2ZsaXN0ID0gKGQuZ2V0VmFyKGRlcGVuZHNmbGlzdF9rZXksIFRydWUpIG9yICIiKQorICAgICAgICAgICAgZm9yIGRmaWxlIGluIGRlcGVuZHNmbGlzdC5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGtleSA9ICJGSUxFIiArIHZhcm5hbWUgKyAiXyIgKyBkZmlsZSArICJfIiArIHBrZworICAgICAgICAgICAgICAgIGRlcGVuZHNfZGljdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zKGQuZ2V0VmFyKGtleSwgVHJ1ZSkgb3IgIiIpCisgICAgICAgICAgICAgICAgZmlsZSA9IGRmaWxlLnJlcGxhY2UoIkB1bmRlcnNjb3JlQCIsICJfIikKKyAgICAgICAgICAgICAgICBmaWxlID0gZmlsZS5yZXBsYWNlKCJAY2xvc2VicmFjZUAiLCAiXSIpCisgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGUucmVwbGFjZSgiQG9wZW5icmFjZUAiLCAiWyIpCisgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGUucmVwbGFjZSgiQHRhYkAiLCAiXHQiKQorICAgICAgICAgICAgICAgIGZpbGUgPSBmaWxlLnJlcGxhY2UoIkBzcGFjZUAiLCAiICIpCisgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGUucmVwbGFjZSgiQGF0QCIsICJAIikKKyAgICAgICAgICAgICAgICBvdXRmaWxlLndyaXRlKCciJyArIHBrZ2QgKyBmaWxlICsgJyIgOiAiJykKKyAgICAgICAgICAgICAgICBmb3IgZGVwIGluIGRlcGVuZHNfZGljdDoKKyAgICAgICAgICAgICAgICAgICAgdmVyID0gZGVwZW5kc19kaWN0W2RlcF0KKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwIGFuZCB2ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXIgPSB2ZXIucmVwbGFjZSgiKCIsIiIpCisgICAgICAgICAgICAgICAgICAgICAgICB2ZXIgPSB2ZXIucmVwbGFjZSgiKSIsIiIpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRmaWxlLndyaXRlKGRlcCArICIgIiArIHZlciArICIgIikKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGZpbGUud3JpdGUoZGVwICsgIiAiKQorICAgICAgICAgICAgICAgIG91dGZpbGUud3JpdGUoJyIsXG4nKQorICAgICAgICBvdXRmaWxlLndyaXRlKCd9XG5cbicpCisgICAgICAgIG91dGZpbGUud3JpdGUoImltcG9ydCBzeXNcbiIpCisgICAgICAgIG91dGZpbGUud3JpdGUoIndoaWxlIDE6XG4iKQorICAgICAgICBvdXRmaWxlLndyaXRlKCJcdGxpbmUgPSBzeXMuc3RkaW4ucmVhZGxpbmUoKS5zdHJpcCgpXG4iKQorICAgICAgICBvdXRmaWxlLndyaXRlKCJcdGlmIG5vdCBsaW5lOlxuIikKKyAgICAgICAgb3V0ZmlsZS53cml0ZSgiXHRcdHN5cy5leGl0KDApXG4iKQorICAgICAgICBvdXRmaWxlLndyaXRlKCJcdGlmIGxpbmUgaW4gZGVwczpcbiIpCisgICAgICAgIG91dGZpbGUud3JpdGUoIlx0XHRwcmludChkZXBzW2xpbmVdICsgJ1xcbicpXG4iKQorCisgICAgIyBPRS1jb3JlIGRlcGVuZGVuY2llcyBhLmsuYS4gUlBNIHJlcXVpcmVzCisgICAgb3V0ZGVwZW5kcyA9IHdvcmtkaXIgKyAiLyIgKyBzcmNuYW1lICsgIi5yZXF1aXJlcyIKKworICAgIHRyeToKKyAgICAgICAgZGVwZW5kc2ZpbGUgPSBvcGVuKG91dGRlcGVuZHMsICd3JykKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5hYmxlIHRvIG9wZW4gc3BlYyBmaWxlIGZvciB3cml0aW5nLiIpCisKKyAgICBkdW1wX2ZpbGVyZGVwcygnUkRFUEVORFMnLCBkZXBlbmRzZmlsZSwgZCkKKworICAgIGRlcGVuZHNmaWxlLmNsb3NlKCkKKyAgICBvcy5jaG1vZChvdXRkZXBlbmRzLCAwNzU1KQorCisgICAgIyBPRS1jb3JlIC8gUlBNIFByb3ZpZGVzCisgICAgb3V0cHJvdmlkZXMgPSB3b3JrZGlyICsgIi8iICsgc3JjbmFtZSArICIucHJvdmlkZXMiCisKKyAgICB0cnk6CisgICAgICAgIHByb3ZpZGVzZmlsZSA9IG9wZW4ob3V0cHJvdmlkZXMsICd3JykKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5hYmxlIHRvIG9wZW4gc3BlYyBmaWxlIGZvciB3cml0aW5nLiIpCisKKyAgICBkdW1wX2ZpbGVyZGVwcygnUlBST1ZJREVTJywgcHJvdmlkZXNmaWxlLCBkKQorCisgICAgcHJvdmlkZXNmaWxlLmNsb3NlKCkKKyAgICBvcy5jaG1vZChvdXRwcm92aWRlcywgMDc1NSkKKworICAgIHJldHVybiAob3V0ZGVwZW5kcywgb3V0cHJvdmlkZXMpCisKKworcHl0aG9uIHdyaXRlX3NwZWNmaWxlICgpIHsKKyAgICBpbXBvcnQgb2UucGFja2FnZWRhdGEKKworICAgICMgYXBwZW5kIGluZm9ybWF0aW9uIGZvciBsb2dzIGFuZCBwYXRjaGVzIHRvICVwcmVwCisgICAgZGVmIGFkZF9wcmVwKGQsc3BlY19maWxlc19ib3R0b20pOgorICAgICAgICBpZiBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnc3JwbScsIFRydWUpID09ICcxJyBhbmQgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnYXJjaGl2ZXInLCBkKToKKyAgICAgICAgICAgIHNwZWNfZmlsZXNfYm90dG9tLmFwcGVuZCgnJSVwcmVwIC1uICVzJyAlIGQuZ2V0VmFyKCdQTicsIFRydWUpICkKKyAgICAgICAgICAgIHNwZWNfZmlsZXNfYm90dG9tLmFwcGVuZCgnJXMnICUgImVjaG8gXCJpbmNsdWRlIGxvZ3MgYW5kIHBhdGNoZXMsIFBsZWFzZSBjaGVjayB0aGVtIGluIFNPVVJDRVNcIiIpCisgICAgICAgICAgICBzcGVjX2ZpbGVzX2JvdHRvbS5hcHBlbmQoJycpCisKKyAgICAjIGFwcGVuZCB0aGUgbmFtZSBvZiB0YXJiYWxsIHRvIGtleSB3b3JkICdTT1VSQ0UnIGluIHh4eC5zcGVjLgorICAgIGRlZiB0YWlsX3NvdXJjZShkKToKKyAgICAgICAgaWYgZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ3NycG0nLCBUcnVlKSA9PSAnMScgYW5kIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2FyY2hpdmVyJywgZCk6CisgICAgICAgICAgICBhcl9vdXRkaXIgPSBkLmdldFZhcignQVJDSElWRVJfT1VURElSJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhcl9vdXRkaXIpOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc291cmNlX2xpc3QgPSBvcy5saXN0ZGlyKGFyX291dGRpcikKKyAgICAgICAgICAgIHNvdXJjZV9udW1iZXIgPSAwCisgICAgICAgICAgICBmb3Igc291cmNlIGluIHNvdXJjZV9saXN0OgorICAgICAgICAgICAgICAgICMgVGhlIHJwbWJ1aWxkIGRvZXNuJ3QgbmVlZCB0aGUgcm9vdCBwZXJtaXNzaW9uLCBidXQgaXQgbmVlZHMKKyAgICAgICAgICAgICAgICAjIHRvIGtub3cgdGhlIGZpbGUncyB1c2VyIGFuZCBncm91cCBuYW1lLCB0aGUgb25seSB1c2VyIGFuZAorICAgICAgICAgICAgICAgICMgZ3JvdXAgaW4gZmFrZXJvb3QgaXMgInJvb3QiIHdoZW4gd29ya2luZyBpbiBmYWtlcm9vdC4KKyAgICAgICAgICAgICAgICBmID0gb3MucGF0aC5qb2luKGFyX291dGRpciwgc291cmNlKQorICAgICAgICAgICAgICAgIG9zLmNob3duKGYsIDAsIDApCisgICAgICAgICAgICAgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCdTb3VyY2UlczogJXMnICUgKHNvdXJjZV9udW1iZXIsIHNvdXJjZSkpCisgICAgICAgICAgICAgICAgc291cmNlX251bWJlciArPSAxCisgICAgIyBXZSBuZWVkIGEgc2ltcGxlIHdheSB0byByZW1vdmUgdGhlIE1MUFJFRklYIGZyb20gdGhlIHBhY2thZ2UgbmFtZSwKKyAgICAjIGFuZCBkZXBlbmRlbmN5IGluZm9ybWF0aW9uLi4uCisgICAgZGVmIHN0cmlwX211bHRpbGliKG5hbWUsIGQpOgorICAgICAgICBtdWx0aWxpYnMgPSBkLmdldFZhcignTVVMVElMSUJTJywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgZm9yIGV4dCBpbiBtdWx0aWxpYnMuc3BsaXQoKToKKyAgICAgICAgICAgIGVleHQgPSBleHQuc3BsaXQoJzonKQorICAgICAgICAgICAgaWYgbGVuKGVleHQpID4gMSBhbmQgZWV4dFswXSA9PSAnbXVsdGlsaWInIGFuZCBuYW1lIGFuZCBuYW1lLmZpbmQoZWV4dFsxXSArICctJykgPj0gMDoKKyAgICAgICAgICAgICAgICBuYW1lID0gIiIuam9pbihuYW1lLnNwbGl0KGVleHRbMV0gKyAnLScpKQorICAgICAgICByZXR1cm4gbmFtZQorCisgICAgZGVmIHN0cmlwX211bHRpbGliX2RlcHMoZGVwcywgZCk6CisgICAgICAgIGRlcGVuZHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZGVwcyBvciAiIikKKyAgICAgICAgbmV3ZGVwcyA9IHt9CisgICAgICAgIGZvciBkZXAgaW4gZGVwZW5kczoKKyAgICAgICAgICAgIG5ld2RlcHNbc3RyaXBfbXVsdGlsaWIoZGVwLCBkKV0gPSBkZXBlbmRzW2RlcF0KKyAgICAgICAgcmV0dXJuIGJiLnV0aWxzLmpvaW5fZGVwcyhuZXdkZXBzKQorCisjICAgICAgICBtbCA9IGQuZ2V0VmFyKCJNTFBSRUZJWCIsIFRydWUpCisjICAgICAgICBpZiBtbCBhbmQgbmFtZSBhbmQgbGVuKG1sKSAhPSAwIGFuZCBuYW1lLmZpbmQobWwpID09IDA6CisjICAgICAgICAgICAgcmV0dXJuIG1sLmpvaW4obmFtZS5zcGxpdChtbCwgMSlbMTpdKQorIyAgICAgICAgcmV0dXJuIG5hbWUKKworICAgICMgSW4gUlBNLCBkZXBlbmRlbmNpZXMgYXJlIG9mIHRoZSBmb3JtYXQ6IHBrZyA8Pj0gRXBvY2g6VmVyc2lvbi1SZWxlYXNlCisgICAgIyBUaGlzIGZvcm1hdCBpcyBzaW1pbGFyIHRvIE9FLCBob3dldmVyIHRoZXJlIGFyZSByZXN0cmljdGlvbnMgb24gdGhlCisgICAgIyBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlIGluIGEgZmllbGQuICBJbiB0aGUgVmVyc2lvbiBmaWVsZCwgIi0iCisgICAgIyBjaGFyYWN0ZXJzIGFyZSBub3QgYWxsb3dlZC4gICItIiBpcyBhbGxvd2VkIGluIHRoZSBSZWxlYXNlIGZpZWxkLgorICAgICMKKyAgICAjIFdlIHRyYW5zbGF0ZSB0aGUgIi0iIGluIHRoZSB2ZXJzaW9uIHRvIGEgIisiLCBieSBsb2FkaW5nIHRoZSBQS0dWCisgICAgIyBmcm9tIHRoZSBkZXBlbmRlbnQgcmVjaXBlLCByZXBsYWNpbmcgdGhlIC0gd2l0aCBhICssIGFuZCB0aGVuIHVzaW5nCisgICAgIyB0aGF0IHZhbHVlIHRvIGRvIGEgcmVwbGFjZSBpbnNpZGUgb2YgdGhpcyByZWNpcGUncyBkZXBlbmRlbmNpZXMuCisgICAgIyBUaGlzIHByZXNlcnZlcyB0aGUgIi0iIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSB2ZXJzaW9uIGFuZCByZWxlYXNlLCBhcworICAgICMgd2VsbCBhcyBhbnkgIi0iIGNoYXJhY3RlcnMgaW5zaWRlIG9mIHRoZSByZWxlYXNlIGZpZWxkLgorICAgICMKKyAgICAjIEFsbCBvZiB0aGlzIGhhcyB0byBoYXBwZW4gQkVGT1JFIHRoZSBtYXBwaW5nX3JlbmFtZV9ob29rIGFzCisgICAgIyBhZnRlciByZW5hbWluZyB3ZSBjYW5ub3QgbG9vayB1cCB0aGUgZGVwZW5kZW5jaWVzIGluIHRoZSBwYWNrYWdlZGF0YQorICAgICMgc3RvcmUuCisgICAgZGVmIHRyYW5zbGF0ZV92ZXJzKHZhcm5hbWUsIGQpOgorICAgICAgICBkZXBlbmRzID0gZC5nZXRWYXIodmFybmFtZSwgVHJ1ZSkKKyAgICAgICAgaWYgZGVwZW5kczoKKyAgICAgICAgICAgIGRlcGVuZHNfZGljdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihkZXBlbmRzKQorICAgICAgICAgICAgbmV3ZGVwc19kaWN0ID0ge30KKyAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwZW5kc19kaWN0OgorICAgICAgICAgICAgICAgIHZlcmxpc3QgPSBbXQorICAgICAgICAgICAgICAgIGZvciB2ZXIgaW4gZGVwZW5kc19kaWN0W2RlcF06CisgICAgICAgICAgICAgICAgICAgIGlmICctJyBpbiB2ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICBzdWJkID0gb2UucGFja2FnZWRhdGEucmVhZF9zdWJwa2dkYXRhX2RpY3QoZGVwLCBkKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ1BLR1YnIGluIHN1YmQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHYgPSBzdWJkWydQViddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtndiA9IHN1YmRbJ1BLR1YnXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHB2ID0gcGtndi5yZXBsYWNlKCctJywgJysnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlciA9IHZlci5yZXBsYWNlKHB2LCByZXBwdikucmVwbGFjZShwa2d2LCByZXBwdikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICdQS0dSJyBpbiBzdWJkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWFrZSBzdXJlIFBLR1IgcmF0aGVyIHRoYW4gUFIgaW4gdmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHIgPSAnLScgKyBzdWJkWydQUiddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnciA9ICctJyArIHN1YmRbJ1BLR1InXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBrZ3Igbm90IGluIHZlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyID0gdmVyLnJlcGxhY2UocHIsIHBrZ3IpCisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJsaXN0LmFwcGVuZCh2ZXIpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJsaXN0LmFwcGVuZCh2ZXIpCisgICAgICAgICAgICAgICAgbmV3ZGVwc19kaWN0W2RlcF0gPSB2ZXJsaXN0CisgICAgICAgICAgICBkZXBlbmRzID0gYmIudXRpbHMuam9pbl9kZXBzKG5ld2RlcHNfZGljdCkKKyAgICAgICAgICAgIGQuc2V0VmFyKHZhcm5hbWUsIGRlcGVuZHMuc3RyaXAoKSkKKworICAgICMgV2UgbmVlZCB0byBjaGFuZ2UgdGhlIHN0eWxlIHRoZSBkZXBlbmRlbmN5IGZyb20gQkIgdG8gUlBNCisgICAgIyBUaGlzIG5lZWRzIHRvIGhhcHBlbiBBRlRFUiB0aGUgbWFwcGluZ19yZW5hbWVfaG9vaworICAgIGRlZiBwcmludF9kZXBzKHZhcmlhYmxlLCB0YWcsIGFycmF5LCBkKToKKyAgICAgICAgZGVwZW5kcyA9IHZhcmlhYmxlCisgICAgICAgIGlmIGRlcGVuZHM6CisgICAgICAgICAgICBkZXBlbmRzX2RpY3QgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZGVwZW5kcykKKyAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwZW5kc19kaWN0OgorICAgICAgICAgICAgICAgIGZvciB2ZXIgaW4gZGVwZW5kc19kaWN0W2RlcF06CisgICAgICAgICAgICAgICAgICAgIHZlciA9IHZlci5yZXBsYWNlKCcoJywgJycpCisgICAgICAgICAgICAgICAgICAgIHZlciA9IHZlci5yZXBsYWNlKCcpJywgJycpCisgICAgICAgICAgICAgICAgICAgIGFycmF5LmFwcGVuZCgiJXM6ICVzICVzIiAlICh0YWcsIGRlcCwgdmVyKSkKKyAgICAgICAgICAgICAgICBpZiBub3QgbGVuKGRlcGVuZHNfZGljdFtkZXBdKToKKyAgICAgICAgICAgICAgICAgICAgYXJyYXkuYXBwZW5kKCIlczogJXMiICUgKHRhZywgZGVwKSkKKworICAgIGRlZiB3YWxrX2ZpbGVzKHdhbGtwYXRoLCB0YXJnZXQsIGNvbmZmaWxlcywgZGlyZmlsZXMpOgorICAgICAgICAjIFdlIGNhbiByYWNlIGFnYWluc3QgdGhlIGlway9kZWIgYmFja2VuZHMgd2hpY2ggY3JlYXRlIENPTlRST0wgb3IgREVCSUFOIGRpcmVjdG9yaWVzCisgICAgICAgICMgd2hlbiBwYWNrYWdpbmcuIFdlIGp1c3QgaWdub3JlIHRoZXNlIGZpbGVzIHdoaWNoIGFyZSBjcmVhdGVkIGluIAorICAgICAgICAjIHBhY2thZ2VzLXNwbGl0LyBhbmQgbm90IHBhY2thZ2UvCisgICAgICAgICMgV2UgaGF2ZSB0aGUgb2RkIHNpdHVhdGlvbiB3aGVyZSB0aGUgQ09OVFJPTC9ERUJJQU4gZGlyZWN0b3J5IGNhbiBiZSByZW1vdmVkIGluIHRoZSBtaWRkbGUgb2YKKyAgICAgICAgIyBvZiB0aGUgd2FsaywgdGhlIGlzZGlyKCkgdGVzdCB3b3VsZCB0aGVuIGZhaWwgYW5kIHRoZSB3YWxrIGNvZGUgd291bGQgYXNzdW1lIGl0cyBhIGZpbGUKKyAgICAgICAgIyBoZW5jZSB3ZSBjaGVjayBmb3IgdGhlIG5hbWVzIGluIGZpbGVzIHRvby4KKyAgICAgICAgZm9yIHJvb3RwYXRoLCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHdhbGtwYXRoKToKKyAgICAgICAgICAgIHBhdGggPSByb290cGF0aC5yZXBsYWNlKHdhbGtwYXRoLCAiIikKKyAgICAgICAgICAgIGlmIHBhdGguZW5kc3dpdGgoIkRFQklBTiIpIG9yIHBhdGguZW5kc3dpdGgoIkNPTlRST0wiKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgiJSIsICIlJSUlJSUlJSIpCisKKyAgICAgICAgICAgICMgVHJlYXQgYWxsIHN5bWxpbmtzIHRvIGRpcmVjdG9yaWVzIGFzIG5vcm1hbCBmaWxlcy4KKyAgICAgICAgICAgICMgb3Mud2FsaygpIGxpc3RzIHRoZW0gYXMgZGlyZWN0b3JpZXMuCisgICAgICAgICAgICBkZWYgbW92ZV90b19maWxlcyhkaXIpOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKG9zLnBhdGguam9pbihyb290cGF0aCwgZGlyKSk6CisgICAgICAgICAgICAgICAgICAgIGZpbGVzLmFwcGVuZChkaXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBkaXJzWzpdID0gW2RpciBmb3IgZGlyIGluIGRpcnMgaWYgbm90IG1vdmVfdG9fZmlsZXMoZGlyKV0KKworICAgICAgICAgICAgIyBEaXJlY3RvcnkgaGFuZGxpbmcgY2FuIGhhcHBlbiBpbiB0d28gd2F5cywgZWl0aGVyIERJUkZJTEVTIGlzIG5vdCBzZXQgYXQgYWxsCisgICAgICAgICAgICAjIGluIHdoaWNoIGNhc2Ugd2UgZmFsbCBiYWNrIHRvIHRoZSBvbGRlciBiZWhhdmlvdXIgb2YgcGFja2FnZXMgb3duaW5nIGFsbCB0aGVpcgorICAgICAgICAgICAgIyBkaXJlY3RvcmllcworICAgICAgICAgICAgaWYgZGlyZmlsZXMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBmb3IgZGlyIGluIGRpcnM6CisgICAgICAgICAgICAgICAgICAgIGlmIGRpciA9PSAiQ09OVFJPTCIgb3IgZGlyID09ICJERUJJQU4iOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZGlyID0gZGlyLnJlcGxhY2UoIiUiLCAiJSUlJSUlJSUiKQorICAgICAgICAgICAgICAgICAgICAjIEFsbCBwYWNrYWdlcyBvd24gdGhlIGRpcmVjdG9yaWVzIHRoZWlyIGZpbGVzIGFyZSBpbi4uLgorICAgICAgICAgICAgICAgICAgICB0YXJnZXQuYXBwZW5kKCclZGlyICInICsgcGF0aCArICcvJyArIGRpciArICciJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBwYWNrYWdlcyBvd24gb25seSBlbXB0eSBkaXJlY3RvcmllcyBvciBleHBsaWN0IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAjIFRoaXMgd2lsbCBwcmV2ZW50IHRoZSBvdmVybGFwcGluZyBvZiBzZWN1cml0eSBwZXJtaXNzaW9uLgorICAgICAgICAgICAgICAgIGlmIHBhdGggYW5kIG5vdCBmaWxlcyBhbmQgbm90IGRpcnM6CisgICAgICAgICAgICAgICAgICAgIHRhcmdldC5hcHBlbmQoJyVkaXIgIicgKyBwYXRoICsgJyInKQorICAgICAgICAgICAgICAgIGVsaWYgcGF0aCBhbmQgcGF0aCBpbiBkaXJmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmFwcGVuZCgnJWRpciAiJyArIHBhdGggKyAnIicpCisKKyAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGlmIGZpbGUgPT0gIkNPTlRST0wiIG9yIGZpbGUgPT0gIkRFQklBTiI6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGUucmVwbGFjZSgiJSIsICIlJSUlJSUlJSIpCisgICAgICAgICAgICAgICAgaWYgY29uZmZpbGVzLmNvdW50KHBhdGggKyAnLycgKyBmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmFwcGVuZCgnJWNvbmZpZyAiJyArIHBhdGggKyAnLycgKyBmaWxlICsgJyInKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRhcmdldC5hcHBlbmQoJyInICsgcGF0aCArICcvJyArIGZpbGUgKyAnIicpCisKKyAgICAjIFByZXZlbnQgdGhlIHByZXJtL3Bvc3RybSBzY3JpcHRzIGZyb20gYmVpbmcgcnVuIGR1cmluZyBhbiB1cGdyYWRlCisgICAgZGVmIHdyYXBfdW5pbnN0YWxsKHNjcmlwdHZhcik6CisgICAgICAgIHNjciA9IHNjcmlwdHZhci5zdHJpcCgpCisgICAgICAgIGlmIHNjci5zdGFydHN3aXRoKCIjISIpOgorICAgICAgICAgICAgcG9zID0gc2NyLmZpbmQoIlxuIikgKyAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwb3MgPSAwCisgICAgICAgIHNjciA9IHNjcls6cG9zXSArICdpZiBbICIkMSIgPSAiMCIgXSA7IHRoZW5cbicgKyBzY3JbcG9zOl0gKyAnXG5maScKKyAgICAgICAgcmV0dXJuIHNjcgorCisgICAgZGVmIGdldF9wZXJmaWxlKHZhcm5hbWUsIHBrZywgZCk6CisgICAgICAgIGRlcHMgPSBbXQorICAgICAgICBkZXBlbmRzZmxpc3Rfa2V5ID0gJ0ZJTEUnICsgdmFybmFtZSArICdGTElTVCcgKyAiXyIgKyBwa2cKKyAgICAgICAgZGVwZW5kc2ZsaXN0ID0gKGQuZ2V0VmFyKGRlcGVuZHNmbGlzdF9rZXksIFRydWUpIG9yICIiKQorICAgICAgICBmb3IgZGZpbGUgaW4gZGVwZW5kc2ZsaXN0LnNwbGl0KCk6CisgICAgICAgICAgICBrZXkgPSAiRklMRSIgKyB2YXJuYW1lICsgIl8iICsgZGZpbGUgKyAiXyIgKyBwa2cKKyAgICAgICAgICAgIGRlcGVuZHMgPSBkLmdldFZhcihrZXksIFRydWUpCisgICAgICAgICAgICBpZiBkZXBlbmRzOgorICAgICAgICAgICAgICAgIGRlcHMuYXBwZW5kKGRlcGVuZHMpCisgICAgICAgIHJldHVybiAiICIuam9pbihkZXBzKQorCisgICAgZGVmIGFwcGVuZF9kZXNjcmlwdGlvbihzcGVjX3ByZWFtYmxlLCB0ZXh0KToKKyAgICAgICAgIiIiCisgICAgICAgIEFkZCB0aGUgZGVzY3JpcHRpb24gdG8gdGhlIHNwZWMgZmlsZS4KKyAgICAgICAgIiIiCisgICAgICAgIGltcG9ydCB0ZXh0d3JhcAorICAgICAgICBkZWRlbnRfdGV4dCA9IHRleHR3cmFwLmRlZGVudCh0ZXh0KS5zdHJpcCgpCisgICAgICAgICMgQml0YmFrZSBzYXZlcyAiXG4iIGFzICJcXG4iCisgICAgICAgIGlmICdcXG4nIGluIGRlZGVudF90ZXh0OgorICAgICAgICAgICAgZm9yIHQgaW4gZGVkZW50X3RleHQuc3BsaXQoJ1xcbicpOgorICAgICAgICAgICAgICAgIHNwZWNfcHJlYW1ibGUuYXBwZW5kKHQuc3RyaXAoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNwZWNfcHJlYW1ibGUuYXBwZW5kKCclcycgJSB0ZXh0d3JhcC5maWxsKGRlZGVudF90ZXh0LCB3aWR0aD03NSkpCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgaWYgbm90IHBhY2thZ2VzIG9yIHBhY2thZ2VzID09ICcnOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTm8gcGFja2FnZXM7IG5vdGhpbmcgdG8gZG8iKQorICAgICAgICByZXR1cm4KKworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgaWYgbm90IHBrZ2Rlc3Q6CisgICAgICAgIGJiLmZhdGFsKCJObyBQS0dERVNUIikKKworICAgIG91dHNwZWNmaWxlID0gZC5nZXRWYXIoJ09VVFNQRUNGSUxFJywgVHJ1ZSkKKyAgICBpZiBub3Qgb3V0c3BlY2ZpbGU6CisgICAgICAgIGJiLmZhdGFsKCJObyBPVVRTUEVDRklMRSIpCisKKyAgICAjIENvbnN0cnVjdCB0aGUgU1BFQyBmaWxlLi4uCisgICAgc3JjbmFtZSAgICA9IHN0cmlwX211bHRpbGliKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBkKQorICAgIHNyY3N1bW1hcnkgPSAoZC5nZXRWYXIoJ1NVTU1BUlknLCBUcnVlKSBvciBkLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKSBvciAiLiIpCisgICAgc3JjdmVyc2lvbiA9IGQuZ2V0VmFyKCdQS0dWJywgVHJ1ZSkucmVwbGFjZSgnLScsICcrJykKKyAgICBzcmNyZWxlYXNlID0gZC5nZXRWYXIoJ1BLR1InLCBUcnVlKQorICAgIHNyY2Vwb2NoICAgPSAoZC5nZXRWYXIoJ1BLR0UnLCBUcnVlKSBvciAiIikKKyAgICBzcmNsaWNlbnNlID0gZC5nZXRWYXIoJ0xJQ0VOU0UnLCBUcnVlKQorICAgIHNyY3NlY3Rpb24gPSBkLmdldFZhcignU0VDVElPTicsIFRydWUpCisgICAgc3JjbWFpbnRhaW5lciAgPSBkLmdldFZhcignTUFJTlRBSU5FUicsIFRydWUpCisgICAgc3JjaG9tZXBhZ2UgICAgPSBkLmdldFZhcignSE9NRVBBR0UnLCBUcnVlKQorICAgIHNyY2Rlc2NyaXB0aW9uID0gZC5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkgb3IgIi4iCisgICAgc3JjY3VzdG9tdGFnc2NodW5rID0gZ2V0X3BhY2thZ2VfYWRkaXRpb25hbF9tZXRhZGF0YSgicnBtIiwgZCkKKworICAgIHNyY2RlcGVuZHMgICAgID0gc3RyaXBfbXVsdGlsaWJfZGVwcyhkLmdldFZhcignREVQRU5EUycsIFRydWUpLCBkKQorICAgIHNyY3JkZXBlbmRzICAgID0gW10KKyAgICBzcmNycmVjb21tZW5kcyA9IFtdCisgICAgc3JjcnN1Z2dlc3RzICAgPSBbXQorICAgIHNyY3Jwcm92aWRlcyAgID0gW10KKyAgICBzcmNycmVwbGFjZXMgICA9IFtdCisgICAgc3JjcmNvbmZsaWN0cyAgPSBbXQorICAgIHNyY3JvYnNvbGV0ZXMgID0gW10KKworICAgIHNyY3JwcmVpbnN0ICA9IFtdCisgICAgc3JjcnBvc3RpbnN0ID0gW10KKyAgICBzcmNycHJlcm0gICAgPSBbXQorICAgIHNyY3Jwb3N0cm0gICA9IFtdCisKKyAgICBzcGVjX3ByZWFtYmxlX3RvcCA9IFtdCisgICAgc3BlY19wcmVhbWJsZV9ib3R0b20gPSBbXQorCisgICAgc3BlY19zY3JpcHRsZXRzX3RvcCA9IFtdCisgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbSA9IFtdCisKKyAgICBzcGVjX2ZpbGVzX3RvcCA9IFtdCisgICAgc3BlY19maWxlc19ib3R0b20gPSBbXQorCisgICAgcGVyZmlsZWRlcHMgPSAoZC5nZXRWYXIoIk1FUkdFUEVSRklMRURFUFMiLCBUcnVlKSBvciAiMCIpID09ICIwIgorICAgIGV4dHJhX3BrZ2RhdGEgPSAoZC5nZXRWYXIoIlJQTV9FWFRSQV9QS0dEQVRBIiwgVHJ1ZSkgb3IgIjAiKSA9PSAiMSIKKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisKKyAgICAgICAgcm9vdCA9ICIlcy8lcyIgJSAocGtnZGVzdCwgcGtnKQorCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1JPT1QnLCAnJykKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUk9PVF8lcycgJSBwa2csIHJvb3QpCisgICAgICAgIHBrZ25hbWUgPSBsb2NhbGRhdGEuZ2V0VmFyKCdQS0dfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcGtnbmFtZToKKyAgICAgICAgICAgIHBrZ25hbWUgPSBwa2cKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUEtHJywgcGtnbmFtZSkKKworICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCBkLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgIjoiICsgcGtnKQorCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGNvbmZmaWxlcyA9IGdldF9jb25mZmlsZXMocGtnLCBkKQorICAgICAgICBkaXJmaWxlcyA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RJUkZJTEVTJywgVHJ1ZSkKKyAgICAgICAgaWYgZGlyZmlsZXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkaXJmaWxlcyA9IGRpcmZpbGVzLnNwbGl0KCkKKworICAgICAgICBzcGxpdG5hbWUgICAgPSBzdHJpcF9tdWx0aWxpYihwa2duYW1lLCBkKQorCisgICAgICAgIHNwbGl0c3VtbWFyeSA9IChsb2NhbGRhdGEuZ2V0VmFyKCdTVU1NQVJZJywgVHJ1ZSkgb3IgbG9jYWxkYXRhLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKSBvciAiLiIpCisgICAgICAgIHNwbGl0dmVyc2lvbiA9IChsb2NhbGRhdGEuZ2V0VmFyKCdQS0dWJywgVHJ1ZSkgb3IgIiIpLnJlcGxhY2UoJy0nLCAnKycpCisgICAgICAgIHNwbGl0cmVsZWFzZSA9IChsb2NhbGRhdGEuZ2V0VmFyKCdQS0dSJywgVHJ1ZSkgb3IgIiIpCisgICAgICAgIHNwbGl0ZXBvY2ggICA9IChsb2NhbGRhdGEuZ2V0VmFyKCdQS0dFJywgVHJ1ZSkgb3IgIiIpCisgICAgICAgIHNwbGl0bGljZW5zZSA9IChsb2NhbGRhdGEuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkgb3IgIiIpCisgICAgICAgIHNwbGl0c2VjdGlvbiA9IChsb2NhbGRhdGEuZ2V0VmFyKCdTRUNUSU9OJywgVHJ1ZSkgb3IgIiIpCisgICAgICAgIHNwbGl0ZGVzY3JpcHRpb24gPSAobG9jYWxkYXRhLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKSBvciAiLiIpCisgICAgICAgIHNwbGl0Y3VzdG9tdGFnc2NodW5rID0gZ2V0X3BhY2thZ2VfYWRkaXRpb25hbF9tZXRhZGF0YSgicnBtIiwgbG9jYWxkYXRhKQorCisgICAgICAgIHRyYW5zbGF0ZV92ZXJzKCdSREVQRU5EUycsIGxvY2FsZGF0YSkKKyAgICAgICAgdHJhbnNsYXRlX3ZlcnMoJ1JSRUNPTU1FTkRTJywgbG9jYWxkYXRhKQorICAgICAgICB0cmFuc2xhdGVfdmVycygnUlNVR0dFU1RTJywgbG9jYWxkYXRhKQorICAgICAgICB0cmFuc2xhdGVfdmVycygnUlBST1ZJREVTJywgbG9jYWxkYXRhKQorICAgICAgICB0cmFuc2xhdGVfdmVycygnUlJFUExBQ0VTJywgbG9jYWxkYXRhKQorICAgICAgICB0cmFuc2xhdGVfdmVycygnUkNPTkZMSUNUUycsIGxvY2FsZGF0YSkKKworICAgICAgICAjIE1hcCB0aGUgZGVwZW5kZW5jaWVzIGludG8gdGhlaXIgZmluYWwgZm9ybQorICAgICAgICBtYXBwaW5nX3JlbmFtZV9ob29rKGxvY2FsZGF0YSkKKworICAgICAgICBzcGxpdHJkZXBlbmRzICAgID0gc3RyaXBfbXVsdGlsaWJfZGVwcyhsb2NhbGRhdGEuZ2V0VmFyKCdSREVQRU5EUycsIFRydWUpLCBkKQorICAgICAgICBzcGxpdHJyZWNvbW1lbmRzID0gc3RyaXBfbXVsdGlsaWJfZGVwcyhsb2NhbGRhdGEuZ2V0VmFyKCdSUkVDT01NRU5EUycsIFRydWUpLCBkKQorICAgICAgICBzcGxpdHJzdWdnZXN0cyAgID0gc3RyaXBfbXVsdGlsaWJfZGVwcyhsb2NhbGRhdGEuZ2V0VmFyKCdSU1VHR0VTVFMnLCBUcnVlKSwgZCkKKyAgICAgICAgc3BsaXRycHJvdmlkZXMgICA9IHN0cmlwX211bHRpbGliX2RlcHMobG9jYWxkYXRhLmdldFZhcignUlBST1ZJREVTJywgVHJ1ZSksIGQpCisgICAgICAgIHNwbGl0cnJlcGxhY2VzICAgPSBzdHJpcF9tdWx0aWxpYl9kZXBzKGxvY2FsZGF0YS5nZXRWYXIoJ1JSRVBMQUNFUycsIFRydWUpLCBkKQorICAgICAgICBzcGxpdHJjb25mbGljdHMgID0gc3RyaXBfbXVsdGlsaWJfZGVwcyhsb2NhbGRhdGEuZ2V0VmFyKCdSQ09ORkxJQ1RTJywgVHJ1ZSksIGQpCisgICAgICAgIHNwbGl0cm9ic29sZXRlcyAgPSBbXQorCisgICAgICAgIHNwbGl0cnByZWluc3QgID0gbG9jYWxkYXRhLmdldFZhcigncGtnX3ByZWluc3QnLCBUcnVlKQorICAgICAgICBzcGxpdHJwb3N0aW5zdCA9IGxvY2FsZGF0YS5nZXRWYXIoJ3BrZ19wb3N0aW5zdCcsIFRydWUpCisgICAgICAgIHNwbGl0cnByZXJtICAgID0gbG9jYWxkYXRhLmdldFZhcigncGtnX3ByZXJtJywgVHJ1ZSkKKyAgICAgICAgc3BsaXRycG9zdHJtICAgPSBsb2NhbGRhdGEuZ2V0VmFyKCdwa2dfcG9zdHJtJywgVHJ1ZSkKKworCisgICAgICAgIGlmIG5vdCBwZXJmaWxlZGVwczoKKyAgICAgICAgICAgICMgQWRkIGluIHN1bW1hcnkgb2YgcGVyIGZpbGUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBzcGxpdHJkZXBlbmRzID0gc3BsaXRyZGVwZW5kcyArICIgIiArIGdldF9wZXJmaWxlKCdSREVQRU5EUycsIHBrZywgZCkKKyAgICAgICAgICAgIHNwbGl0cnByb3ZpZGVzID0gc3BsaXRycHJvdmlkZXMgKyAiICIgKyBnZXRfcGVyZmlsZSgnUlBST1ZJREVTJywgcGtnLCBkKQorCisgICAgICAgICMgR2F0aGVyIHNwZWNpYWwgc3JjL2ZpcnN0IHBhY2thZ2UgZGF0YQorICAgICAgICBpZiBzcmNuYW1lID09IHNwbGl0bmFtZToKKyAgICAgICAgICAgIHNyY3JkZXBlbmRzICAgID0gc3BsaXRyZGVwZW5kcworICAgICAgICAgICAgc3JjcnJlY29tbWVuZHMgPSBzcGxpdHJyZWNvbW1lbmRzCisgICAgICAgICAgICBzcmNyc3VnZ2VzdHMgICA9IHNwbGl0cnN1Z2dlc3RzCisgICAgICAgICAgICBzcmNycHJvdmlkZXMgICA9IHNwbGl0cnByb3ZpZGVzCisgICAgICAgICAgICBzcmNycmVwbGFjZXMgICA9IHNwbGl0cnJlcGxhY2VzCisgICAgICAgICAgICBzcmNyY29uZmxpY3RzICA9IHNwbGl0cmNvbmZsaWN0cworCisgICAgICAgICAgICBzcmNycHJlaW5zdCAgICA9IHNwbGl0cnByZWluc3QKKyAgICAgICAgICAgIHNyY3Jwb3N0aW5zdCAgID0gc3BsaXRycG9zdGluc3QKKyAgICAgICAgICAgIHNyY3JwcmVybSAgICAgID0gc3BsaXRycHJlcm0KKyAgICAgICAgICAgIHNyY3Jwb3N0cm0gICAgID0gc3BsaXRycG9zdHJtCisKKyAgICAgICAgICAgIGZpbGVfbGlzdCA9IFtdCisgICAgICAgICAgICB3YWxrX2ZpbGVzKHJvb3QsIGZpbGVfbGlzdCwgY29uZmZpbGVzLCBkaXJmaWxlcykKKyAgICAgICAgICAgIGlmIG5vdCBmaWxlX2xpc3QgYW5kIGxvY2FsZGF0YS5nZXRWYXIoJ0FMTE9XX0VNUFRZJywgRmFsc2UpICE9ICIxIjoKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJOb3QgY3JlYXRpbmcgZW1wdHkgUlBNIHBhY2thZ2UgZm9yICVzIiAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYmIubm90ZSgiQ3JlYXRpbmcgUlBNIHBhY2thZ2UgZm9yICVzIiAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgICAgICBzcGVjX2ZpbGVzX3RvcC5hcHBlbmQoJyVmaWxlcycpCisgICAgICAgICAgICAgICAgaWYgZXh0cmFfcGtnZGF0YToKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZV9ycG1fZXh0cmFfcGtnZGF0YShzcGxpdG5hbWUsIHNwZWNfZmlsZXNfdG9wLCBsb2NhbGRhdGEpCisgICAgICAgICAgICAgICAgc3BlY19maWxlc190b3AuYXBwZW5kKCclZGVmYXR0cigtLC0sLSwtKScpCisgICAgICAgICAgICAgICAgaWYgZmlsZV9saXN0OgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJDcmVhdGluZyBSUE0gcGFja2FnZSBmb3IgJXMiICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgICAgICAgICBzcGVjX2ZpbGVzX3RvcC5leHRlbmQoZmlsZV9saXN0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIkNyZWF0aW5nIEVNUFRZIFJQTSBQYWNrYWdlIGZvciAlcyIgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICAgICAgc3BlY19maWxlc190b3AuYXBwZW5kKCcnKQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAjIFByb2Nlc3Mgc3VicGFja2FnZSBkYXRhCisgICAgICAgIHNwZWNfcHJlYW1ibGVfYm90dG9tLmFwcGVuZCgnJSVwYWNrYWdlIC1uICVzJyAlIHNwbGl0bmFtZSkKKyAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5kKCdTdW1tYXJ5OiAlcycgJSBzcGxpdHN1bW1hcnkpCisgICAgICAgIGlmIHNyY3ZlcnNpb24gIT0gc3BsaXR2ZXJzaW9uOgorICAgICAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5kKCdWZXJzaW9uOiAlcycgJSBzcGxpdHZlcnNpb24pCisgICAgICAgIGlmIHNyY3JlbGVhc2UgIT0gc3BsaXRyZWxlYXNlOgorICAgICAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5kKCdSZWxlYXNlOiAlcycgJSBzcGxpdHJlbGVhc2UpCisgICAgICAgIGlmIHNyY2Vwb2NoICE9IHNwbGl0ZXBvY2g6CisgICAgICAgICAgICBzcGVjX3ByZWFtYmxlX2JvdHRvbS5hcHBlbmQoJ0Vwb2NoOiAlcycgJSBzcGxpdGVwb2NoKQorICAgICAgICBpZiBzcmNsaWNlbnNlICE9IHNwbGl0bGljZW5zZToKKyAgICAgICAgICAgIHNwZWNfcHJlYW1ibGVfYm90dG9tLmFwcGVuZCgnTGljZW5zZTogJXMnICUgc3BsaXRsaWNlbnNlKQorICAgICAgICBzcGVjX3ByZWFtYmxlX2JvdHRvbS5hcHBlbmQoJ0dyb3VwOiAlcycgJSBzcGxpdHNlY3Rpb24pCisKKyAgICAgICAgaWYgc3JjY3VzdG9tdGFnc2NodW5rICE9IHNwbGl0Y3VzdG9tdGFnc2NodW5rOgorICAgICAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5kKHNwbGl0Y3VzdG9tdGFnc2NodW5rKQorCisgICAgICAgICMgUmVwbGFjZXMgPT0gT2Jzb2xldGVzICYmIFByb3ZpZGVzCisgICAgICAgIHJvYnNvbGV0ZXMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoc3BsaXRyb2Jzb2xldGVzIG9yICIiKQorICAgICAgICBycHJvdmlkZXMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoc3BsaXRycHJvdmlkZXMgb3IgIiIpCisgICAgICAgIHJyZXBsYWNlcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihzcGxpdHJyZXBsYWNlcyBvciAiIikKKyAgICAgICAgZm9yIGRlcCBpbiBycmVwbGFjZXM6CisgICAgICAgICAgICBpZiBub3QgZGVwIGluIHJvYnNvbGV0ZXM6CisgICAgICAgICAgICAgICAgcm9ic29sZXRlc1tkZXBdID0gcnJlcGxhY2VzW2RlcF0KKyAgICAgICAgICAgIGlmIG5vdCBkZXAgaW4gcnByb3ZpZGVzOgorICAgICAgICAgICAgICAgIHJwcm92aWRlc1tkZXBdID0gcnJlcGxhY2VzW2RlcF0KKyAgICAgICAgc3BsaXRyb2Jzb2xldGVzID0gYmIudXRpbHMuam9pbl9kZXBzKHJvYnNvbGV0ZXMsIGNvbW1hc2VwPUZhbHNlKQorICAgICAgICBzcGxpdHJwcm92aWRlcyA9IGJiLnV0aWxzLmpvaW5fZGVwcyhycHJvdmlkZXMsIGNvbW1hc2VwPUZhbHNlKQorCisgICAgICAgIHByaW50X2RlcHMoc3BsaXRyZGVwZW5kcywgIlJlcXVpcmVzIiwgc3BlY19wcmVhbWJsZV9ib3R0b20sIGQpCisgICAgICAgIGlmIHNwbGl0cnByZWluc3Q6CisgICAgICAgICAgICBwcmludF9kZXBzKHNwbGl0cmRlcGVuZHMsICJSZXF1aXJlcyhwcmUpIiwgc3BlY19wcmVhbWJsZV9ib3R0b20sIGQpCisgICAgICAgIGlmIHNwbGl0cnBvc3RpbnN0OgorICAgICAgICAgICAgcHJpbnRfZGVwcyhzcGxpdHJkZXBlbmRzLCAiUmVxdWlyZXMocG9zdCkiLCBzcGVjX3ByZWFtYmxlX2JvdHRvbSwgZCkKKyAgICAgICAgaWYgc3BsaXRycHJlcm06CisgICAgICAgICAgICBwcmludF9kZXBzKHNwbGl0cmRlcGVuZHMsICJSZXF1aXJlcyhwcmV1bikiLCBzcGVjX3ByZWFtYmxlX2JvdHRvbSwgZCkKKyAgICAgICAgaWYgc3BsaXRycG9zdHJtOgorICAgICAgICAgICAgcHJpbnRfZGVwcyhzcGxpdHJkZXBlbmRzLCAiUmVxdWlyZXMocG9zdHVuKSIsIHNwZWNfcHJlYW1ibGVfYm90dG9tLCBkKQorCisgICAgICAgICMgU3VnZ2VzdHMgaW4gUlBNIGFyZSBsaWtlIHJlY29tbWVuZHMgaW4gT0UtY29yZSEKKyAgICAgICAgcHJpbnRfZGVwcyhzcGxpdHJyZWNvbW1lbmRzLCAiU3VnZ2VzdHMiLCBzcGVjX3ByZWFtYmxlX2JvdHRvbSwgZCkKKyAgICAgICAgIyBXaGlsZSB0aGVyZSBpcyBubyBhbmFsb2cgZm9yIHN1Z2dlc3RzLi4uIChTbyBjYWxsIHRoZW0gcmVjb21tZW5kcyBmb3Igbm93KQorICAgICAgICBwcmludF9kZXBzKHNwbGl0cnN1Z2dlc3RzLCAgIlJlY29tbWVuZHMiLCBzcGVjX3ByZWFtYmxlX2JvdHRvbSwgZCkKKyAgICAgICAgcHJpbnRfZGVwcyhzcGxpdHJwcm92aWRlcywgICJQcm92aWRlcyIsIHNwZWNfcHJlYW1ibGVfYm90dG9tLCBkKQorICAgICAgICBwcmludF9kZXBzKHNwbGl0cm9ic29sZXRlcywgIk9ic29sZXRlcyIsIHNwZWNfcHJlYW1ibGVfYm90dG9tLCBkKQorCisgICAgICAgICMgY29uZmxpY3RzIGNhbiBub3QgYmUgaW4gYSBwcm92aWRlISAgV2Ugd2lsbCBuZWVkIHRvIGZpbHRlciBpdC4KKyAgICAgICAgaWYgc3BsaXRyY29uZmxpY3RzOgorICAgICAgICAgICAgZGVwZW5kc19kaWN0ID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKHNwbGl0cmNvbmZsaWN0cykKKyAgICAgICAgICAgIG5ld2RlcHNfZGljdCA9IHt9CisgICAgICAgICAgICBmb3IgZGVwIGluIGRlcGVuZHNfZGljdDoKKyAgICAgICAgICAgICAgICBpZiBkZXAgbm90IGluIHNwbGl0cnByb3ZpZGVzOgorICAgICAgICAgICAgICAgICAgICBuZXdkZXBzX2RpY3RbZGVwXSA9IGRlcGVuZHNfZGljdFtkZXBdCisgICAgICAgICAgICBpZiBuZXdkZXBzX2RpY3Q6CisgICAgICAgICAgICAgICAgc3BsaXRyY29uZmxpY3RzID0gYmIudXRpbHMuam9pbl9kZXBzKG5ld2RlcHNfZGljdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3BsaXRyY29uZmxpY3RzID0gIiIKKworICAgICAgICBwcmludF9kZXBzKHNwbGl0cmNvbmZsaWN0cywgICJDb25mbGljdHMiLCBzcGVjX3ByZWFtYmxlX2JvdHRvbSwgZCkKKworICAgICAgICBzcGVjX3ByZWFtYmxlX2JvdHRvbS5hcHBlbmQoJycpCisKKyAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5kKCclJWRlc2NyaXB0aW9uIC1uICVzJyAlIHNwbGl0bmFtZSkKKyAgICAgICAgYXBwZW5kX2Rlc2NyaXB0aW9uKHNwZWNfcHJlYW1ibGVfYm90dG9tLCBzcGxpdGRlc2NyaXB0aW9uKQorCisgICAgICAgIHNwZWNfcHJlYW1ibGVfYm90dG9tLmFwcGVuZCgnJykKKworICAgICAgICAjIE5vdyBwcm9jZXNzIHNjcmlwdGxldHMKKyAgICAgICAgaWYgc3BsaXRycHJlaW5zdDoKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCclJXByZSAtbiAlcycgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZCgnIyAlcyAtIHByZWluc3QnICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoc3BsaXRycHJlaW5zdCkKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCcnKQorICAgICAgICBpZiBzcGxpdHJwb3N0aW5zdDoKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCclJXBvc3QgLW4gJXMnICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoJyMgJXMgLSBwb3N0aW5zdCcgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZChzcGxpdHJwb3N0aW5zdCkKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCcnKQorICAgICAgICBpZiBzcGxpdHJwcmVybToKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCclJXByZXVuIC1uICVzJyAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCcjICVzIC0gcHJlcm0nICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgc2NyaXB0dmFyID0gd3JhcF91bmluc3RhbGwoc3BsaXRycHJlcm0pCisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZChzY3JpcHR2YXIpCisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZCgnJykKKyAgICAgICAgaWYgc3BsaXRycG9zdHJtOgorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoJyUlcG9zdHVuIC1uICVzJyAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCcjICVzIC0gcG9zdHJtJyAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgIHNjcmlwdHZhciA9IHdyYXBfdW5pbnN0YWxsKHNwbGl0cnBvc3RybSkKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKHNjcmlwdHZhcikKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCcnKQorCisgICAgICAgICMgTm93IHByb2Nlc3MgZmlsZXMKKyAgICAgICAgZmlsZV9saXN0ID0gW10KKyAgICAgICAgd2Fsa19maWxlcyhyb290LCBmaWxlX2xpc3QsIGNvbmZmaWxlcywgZGlyZmlsZXMpCisgICAgICAgIGlmIG5vdCBmaWxlX2xpc3QgYW5kIGxvY2FsZGF0YS5nZXRWYXIoJ0FMTE9XX0VNUFRZJywgRmFsc2UpICE9ICIxIjoKKyAgICAgICAgICAgIGJiLm5vdGUoIk5vdCBjcmVhdGluZyBlbXB0eSBSUE0gcGFja2FnZSBmb3IgJXMiICUgc3BsaXRuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3BlY19maWxlc19ib3R0b20uYXBwZW5kKCclJWZpbGVzIC1uICVzJyAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgIGlmIGV4dHJhX3BrZ2RhdGE6CisgICAgICAgICAgICAgICAgcGFja2FnZV9ycG1fZXh0cmFfcGtnZGF0YShzcGxpdG5hbWUsIHNwZWNfZmlsZXNfYm90dG9tLCBsb2NhbGRhdGEpCisgICAgICAgICAgICBzcGVjX2ZpbGVzX2JvdHRvbS5hcHBlbmQoJyVkZWZhdHRyKC0sLSwtLC0pJykKKyAgICAgICAgICAgIGlmIGZpbGVfbGlzdDoKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJDcmVhdGluZyBSUE0gcGFja2FnZSBmb3IgJXMiICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgICAgIHNwZWNfZmlsZXNfYm90dG9tLmV4dGVuZChmaWxlX2xpc3QpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoIkNyZWF0aW5nIEVNUFRZIFJQTSBQYWNrYWdlIGZvciAlcyIgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICBzcGVjX2ZpbGVzX2JvdHRvbS5hcHBlbmQoJycpCisKKyAgICAgICAgZGVsIGxvY2FsZGF0YQorICAgIAorICAgIGFkZF9wcmVwKGQsc3BlY19maWxlc19ib3R0b20pCisgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCdTdW1tYXJ5OiAlcycgJSBzcmNzdW1tYXJ5KQorICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFwcGVuZCgnTmFtZTogJXMnICUgc3JjbmFtZSkKKyAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ1ZlcnNpb246ICVzJyAlIHNyY3ZlcnNpb24pCisgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCdSZWxlYXNlOiAlcycgJSBzcmNyZWxlYXNlKQorICAgIGlmIHNyY2Vwb2NoIGFuZCBzcmNlcG9jaC5zdHJpcCgpICE9ICIiOgorICAgICAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ0Vwb2NoOiAlcycgJSBzcmNlcG9jaCkKKyAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ0xpY2Vuc2U6ICVzJyAlIHNyY2xpY2Vuc2UpCisgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCdHcm91cDogJXMnICUgc3Jjc2VjdGlvbikKKyAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ1BhY2thZ2VyOiAlcycgJSBzcmNtYWludGFpbmVyKQorICAgIGlmIHNyY2hvbWVwYWdlOgorICAgICAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ1VSTDogJXMnICUgc3JjaG9tZXBhZ2UpCisgICAgaWYgc3JjY3VzdG9tdGFnc2NodW5rOgorICAgICAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoc3JjY3VzdG9tdGFnc2NodW5rKQorICAgIHRhaWxfc291cmNlKGQpCisKKyAgICAjIFJlcGxhY2VzID09IE9ic29sZXRlcyAmJiBQcm92aWRlcworICAgIHJvYnNvbGV0ZXMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoc3Jjcm9ic29sZXRlcyBvciAiIikKKyAgICBycHJvdmlkZXMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoc3JjcnByb3ZpZGVzIG9yICIiKQorICAgIHJyZXBsYWNlcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihzcmNycmVwbGFjZXMgb3IgIiIpCisgICAgZm9yIGRlcCBpbiBycmVwbGFjZXM6CisgICAgICAgIGlmIG5vdCBkZXAgaW4gcm9ic29sZXRlczoKKyAgICAgICAgICAgIHJvYnNvbGV0ZXNbZGVwXSA9IHJyZXBsYWNlc1tkZXBdCisgICAgICAgIGlmIG5vdCBkZXAgaW4gcnByb3ZpZGVzOgorICAgICAgICAgICAgcnByb3ZpZGVzW2RlcF0gPSBycmVwbGFjZXNbZGVwXQorICAgIHNyY3JvYnNvbGV0ZXMgPSBiYi51dGlscy5qb2luX2RlcHMocm9ic29sZXRlcywgY29tbWFzZXA9RmFsc2UpCisgICAgc3JjcnByb3ZpZGVzID0gYmIudXRpbHMuam9pbl9kZXBzKHJwcm92aWRlcywgY29tbWFzZXA9RmFsc2UpCisKKyAgICBwcmludF9kZXBzKHNyY2RlcGVuZHMsICJCdWlsZFJlcXVpcmVzIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCisgICAgcHJpbnRfZGVwcyhzcmNyZGVwZW5kcywgIlJlcXVpcmVzIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCisgICAgaWYgc3JjcnByZWluc3Q6CisgICAgICAgIHByaW50X2RlcHMoc3JjcmRlcGVuZHMsICJSZXF1aXJlcyhwcmUpIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCisgICAgaWYgc3JjcnBvc3RpbnN0OgorICAgICAgICBwcmludF9kZXBzKHNyY3JkZXBlbmRzLCAiUmVxdWlyZXMocG9zdCkiLCBzcGVjX3ByZWFtYmxlX3RvcCwgZCkKKyAgICBpZiBzcmNycHJlcm06CisgICAgICAgIHByaW50X2RlcHMoc3JjcmRlcGVuZHMsICJSZXF1aXJlcyhwcmV1bikiLCBzcGVjX3ByZWFtYmxlX3RvcCwgZCkKKyAgICBpZiBzcmNycG9zdHJtOgorICAgICAgICBwcmludF9kZXBzKHNyY3JkZXBlbmRzLCAiUmVxdWlyZXMocG9zdHVuKSIsIHNwZWNfcHJlYW1ibGVfdG9wLCBkKQorCisgICAgIyBTdWdnZXN0cyBpbiBSUE0gYXJlIGxpa2UgcmVjb21tZW5kcyBpbiBPRS1jb3JlIQorICAgIHByaW50X2RlcHMoc3JjcnJlY29tbWVuZHMsICJTdWdnZXN0cyIsIHNwZWNfcHJlYW1ibGVfdG9wLCBkKQorICAgICMgV2hpbGUgdGhlcmUgaXMgbm8gYW5hbG9nIGZvciBzdWdnZXN0cy4uLiAoU28gY2FsbCB0aGVtIHJlY29tbWVuZHMgZm9yIG5vdykKKyAgICBwcmludF9kZXBzKHNyY3JzdWdnZXN0cywgIlJlY29tbWVuZHMiLCBzcGVjX3ByZWFtYmxlX3RvcCwgZCkKKyAgICBwcmludF9kZXBzKHNyY3Jwcm92aWRlcywgIlByb3ZpZGVzIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCisgICAgcHJpbnRfZGVwcyhzcmNyb2Jzb2xldGVzLCAiT2Jzb2xldGVzIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCisgICAgCisgICAgIyBjb25mbGljdHMgY2FuIG5vdCBiZSBpbiBhIHByb3ZpZGUhICBXZSB3aWxsIG5lZWQgdG8gZmlsdGVyIGl0LgorICAgIGlmIHNyY3Jjb25mbGljdHM6CisgICAgICAgIGRlcGVuZHNfZGljdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihzcmNyY29uZmxpY3RzKQorICAgICAgICBuZXdkZXBzX2RpY3QgPSB7fQorICAgICAgICBmb3IgZGVwIGluIGRlcGVuZHNfZGljdDoKKyAgICAgICAgICAgIGlmIGRlcCBub3QgaW4gc3JjcnByb3ZpZGVzOgorICAgICAgICAgICAgICAgIG5ld2RlcHNfZGljdFtkZXBdID0gZGVwZW5kc19kaWN0W2RlcF0KKyAgICAgICAgaWYgbmV3ZGVwc19kaWN0OgorICAgICAgICAgICAgc3JjcmNvbmZsaWN0cyA9IGJiLnV0aWxzLmpvaW5fZGVwcyhuZXdkZXBzX2RpY3QpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzcmNyY29uZmxpY3RzID0gIiIKKworICAgIHByaW50X2RlcHMoc3JjcmNvbmZsaWN0cywgIkNvbmZsaWN0cyIsIHNwZWNfcHJlYW1ibGVfdG9wLCBkKQorCisgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCcnKQorCisgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCclZGVzY3JpcHRpb24nKQorICAgIGFwcGVuZF9kZXNjcmlwdGlvbihzcGVjX3ByZWFtYmxlX3RvcCwgc3JjZGVzY3JpcHRpb24pCisKKyAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJycpCisKKyAgICBpZiBzcmNycHJlaW5zdDoKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJyVwcmUnKQorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZCgnIyAlcyAtIHByZWluc3QnICUgc3JjbmFtZSkKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoc3JjcnByZWluc3QpCisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCcnKQorICAgIGlmIHNyY3Jwb3N0aW5zdDoKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJyVwb3N0JykKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJyMgJXMgLSBwb3N0aW5zdCcgJSBzcmNuYW1lKQorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZChzcmNycG9zdGluc3QpCisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCcnKQorICAgIGlmIHNyY3JwcmVybToKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJyVwcmV1bicpCisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCcjICVzIC0gcHJlcm0nICUgc3JjbmFtZSkKKyAgICAgICAgc2NyaXB0dmFyID0gd3JhcF91bmluc3RhbGwoc3JjcnByZXJtKQorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZChzY3JpcHR2YXIpCisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCcnKQorICAgIGlmIHNyY3Jwb3N0cm06CisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCclcG9zdHVuJykKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJyMgJXMgLSBwb3N0cm0nICUgc3JjbmFtZSkKKyAgICAgICAgc2NyaXB0dmFyID0gd3JhcF91bmluc3RhbGwoc3JjcnBvc3RybSkKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoc2NyaXB0dmFyKQorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZCgnJykKKworICAgICMgV3JpdGUgdGhlIFNQRUMgZmlsZQorICAgIHRyeToKKyAgICAgICAgc3BlY2ZpbGUgPSBvcGVuKG91dHNwZWNmaWxlLCAndycpCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoInVuYWJsZSB0byBvcGVuIHNwZWMgZmlsZSBmb3Igd3JpdGluZy4iKQorCisgICAgIyBSUE1TUEVDX1BSRUFNQkxFIGlzIGEgd2F5IHRvIGFkZCBhcmJpdHJhcnkgdGV4dCB0byB0aGUgdG9wCisgICAgIyBvZiB0aGUgZ2VuZXJhdGVkIHNwZWMgZmlsZQorICAgIGV4dGVybmFsX3ByZWFtYmxlID0gZC5nZXRWYXIoIlJQTVNQRUNfUFJFQU1CTEUiLCBUcnVlKQorICAgIGlmIGV4dGVybmFsX3ByZWFtYmxlOgorICAgICAgICBzcGVjZmlsZS53cml0ZShleHRlcm5hbF9wcmVhbWJsZSArICJcbiIpCisKKyAgICBmb3IgbGluZSBpbiBzcGVjX3ByZWFtYmxlX3RvcDoKKyAgICAgICAgc3BlY2ZpbGUud3JpdGUobGluZSArICJcbiIpCisKKyAgICBmb3IgbGluZSBpbiBzcGVjX3ByZWFtYmxlX2JvdHRvbToKKyAgICAgICAgc3BlY2ZpbGUud3JpdGUobGluZSArICJcbiIpCisKKyAgICBmb3IgbGluZSBpbiBzcGVjX3NjcmlwdGxldHNfdG9wOgorICAgICAgICBzcGVjZmlsZS53cml0ZShsaW5lICsgIlxuIikKKworICAgIGZvciBsaW5lIGluIHNwZWNfc2NyaXB0bGV0c19ib3R0b206CisgICAgICAgIHNwZWNmaWxlLndyaXRlKGxpbmUgKyAiXG4iKQorCisgICAgZm9yIGxpbmUgaW4gc3BlY19maWxlc190b3A6CisgICAgICAgIHNwZWNmaWxlLndyaXRlKGxpbmUgKyAiXG4iKQorCisgICAgZm9yIGxpbmUgaW4gc3BlY19maWxlc19ib3R0b206CisgICAgICAgIHNwZWNmaWxlLndyaXRlKGxpbmUgKyAiXG4iKQorCisgICAgc3BlY2ZpbGUuY2xvc2UoKQorfQorIyBPdGhlcndpc2UgYWxsYXJjaCBwYWNrYWdlcyBtYXkgY2hhbmdlIGRlcGVuZGluZyBvbiBvdmVycmlkZSBjb25maWd1cmF0aW9uCit3cml0ZV9zcGVjZmlsZVt2YXJkZXBzZXhjbHVkZV0gPSAiT1ZFUlJJREVTIgorCitweXRob24gZG9fcGFja2FnZV9ycG0gKCkgeworICAgICMgV2UgbmVlZCBhIHNpbXBsZSB3YXkgdG8gcmVtb3ZlIHRoZSBNTFBSRUZJWCBmcm9tIHRoZSBwYWNrYWdlIG5hbWUsCisgICAgIyBhbmQgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbi4uLgorICAgIGRlZiBzdHJpcF9tdWx0aWxpYihuYW1lLCBkKToKKyAgICAgICAgbWwgPSBkLmdldFZhcigiTUxQUkVGSVgiLCBUcnVlKQorICAgICAgICBpZiBtbCBhbmQgbmFtZSBhbmQgbGVuKG1sKSAhPSAwIGFuZCBuYW1lLmZpbmQobWwpID49IDA6CisgICAgICAgICAgICByZXR1cm4gIiIuam9pbihuYW1lLnNwbGl0KG1sKSkKKyAgICAgICAgcmV0dXJuIG5hbWUKKworICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisgICAgcGtnZCA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIGlmIG5vdCB3b3JrZGlyIG9yIG5vdCBwa2dkIG9yIG5vdCB0bXBkaXI6CisgICAgICAgIGJiLmVycm9yKCJWYXJpYWJsZXMgaW5jb3JyZWN0bHkgc2V0LCB1bmFibGUgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIGlmIG5vdCBwYWNrYWdlcyBvciBwYWNrYWdlcyA9PSAnJzoKKyAgICAgICAgYmIuZGVidWcoMSwgIk5vIHBhY2thZ2VzOyBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIENvbnN0cnVjdCB0aGUgc3BlYyBmaWxlLi4uCisgICAgIyBJZiB0aGUgc3BlYyBmaWxlIGFscmVhZHkgZXhpc3QsIGFuZCBoYXMgbm90IGJlZW4gc3RvcmVkIGludG8gCisgICAgIyBwc2V1ZG8ncyBmaWxlcy5kYiwgaXQgbWF5YmUgY2F1c2UgcnBtYnVpbGQgc3JjLnJwbSBmYWlsLAorICAgICMgc28gcmVtb3ZlIGl0IGJlZm9yZSBkb2luZyBycG1idWlsZCBzcmMucnBtLgorICAgIHNyY25hbWUgICAgPSBzdHJpcF9tdWx0aWxpYihkLmdldFZhcignUE4nLCBUcnVlKSwgZCkKKyAgICBvdXRzcGVjZmlsZSA9IHdvcmtkaXIgKyAiLyIgKyBzcmNuYW1lICsgIi5zcGVjIgorICAgIGlmIG9zLnBhdGguaXNmaWxlKG91dHNwZWNmaWxlKToKKyAgICAgICAgb3MucmVtb3ZlKG91dHNwZWNmaWxlKQorICAgIGQuc2V0VmFyKCdPVVRTUEVDRklMRScsIG91dHNwZWNmaWxlKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnd3JpdGVfc3BlY2ZpbGUnLCBkKQorCisgICAgcGVyZmlsZWRlcHMgPSAoZC5nZXRWYXIoIk1FUkdFUEVSRklMRURFUFMiLCBUcnVlKSBvciAiMCIpID09ICIwIgorICAgIGlmIHBlcmZpbGVkZXBzOgorICAgICAgICBvdXRkZXBlbmRzLCBvdXRwcm92aWRlcyA9IHdyaXRlX3JwbV9wZXJmaWxlZGF0YShzcmNuYW1lLCBkKQorCisgICAgIyBTZXR1cCB0aGUgcnBtYnVpbGQgYXJndW1lbnRzLi4uCisgICAgcnBtYnVpbGQgPSBkLmdldFZhcignUlBNQlVJTEQnLCBUcnVlKQorICAgIHRhcmdldHN5cyA9IGQuZ2V0VmFyKCdUQVJHRVRfU1lTJywgVHJ1ZSkKKyAgICB0YXJnZXR2ZW5kb3IgPSBkLmdldFZhcignSE9TVF9WRU5ET1InLCBUcnVlKQorICAgIHBhY2thZ2VfYXJjaCA9IChkLmdldFZhcignUEFDS0FHRV9BUkNIJywgVHJ1ZSkgb3IgIiIpLnJlcGxhY2UoIi0iLCAiXyIpCisgICAgc2RrcGtnc3VmZml4ID0gKGQuZ2V0VmFyKCdTREtQS0dTVUZGSVgnLCBUcnVlKSBvciAibmF0aXZlc2RrIikucmVwbGFjZSgiLSIsICJfIikKKyAgICBpZiBwYWNrYWdlX2FyY2ggbm90IGluICJhbGwgYW55IG5vYXJjaCIuc3BsaXQoKSBhbmQgbm90IHBhY2thZ2VfYXJjaC5lbmRzd2l0aChzZGtwa2dzdWZmaXgpOgorICAgICAgICBtbF9wcmVmaXggPSAoZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkgb3IgIiIpLnJlcGxhY2UoIi0iLCAiXyIpCisgICAgICAgIGQuc2V0VmFyKCdQQUNLQUdFX0FSQ0hfRVhURU5EJywgbWxfcHJlZml4ICsgcGFja2FnZV9hcmNoKQorICAgIGVsc2U6CisgICAgICAgIGQuc2V0VmFyKCdQQUNLQUdFX0FSQ0hfRVhURU5EJywgcGFja2FnZV9hcmNoKQorICAgIHBrZ3dyaXRlZGlyID0gZC5leHBhbmQoJyR7UEtHV1JJVEVESVJSUE19LyR7UEFDS0FHRV9BUkNIX0VYVEVORH0nKQorICAgIGQuc2V0VmFyKCdSUE1fUEtHV1JJVEVESVInLCBwa2d3cml0ZWRpcikKKyAgICBiYi5kZWJ1ZygxLCAnUEtHV1JJVEVESVI6ICVzJyAlIGQuZ2V0VmFyKCdSUE1fUEtHV1JJVEVESVInLCBUcnVlKSkKKyAgICBwa2dhcmNoID0gZC5leHBhbmQoJyR7UEFDS0FHRV9BUkNIX0VYVEVORH0ke0hPU1RfVkVORE9SfS0ke0hPU1RfT1N9JykKKyAgICBtYWdpY2ZpbGUgPSBkLmV4cGFuZCgnJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtkYXRhZGlyX25hdGl2ZX0vbWlzYy9tYWdpYy5tZ2MnKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihwa2d3cml0ZWRpcikKKyAgICBvcy5jaG1vZChwa2d3cml0ZWRpciwgMDc1NSkKKworICAgIGNtZCA9IHJwbWJ1aWxkCisgICAgY21kID0gY21kICsgIiAtLW5vZGVwcyAtLXNob3J0LWNpcmN1aXQgLS10YXJnZXQgIiArIHBrZ2FyY2ggKyAiIC0tYnVpbGRyb290ICIgKyBwa2dkCisgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX3RvcGRpciAiICsgd29ya2RpciArICInIC0tZGVmaW5lICdfcnBtZGlyICIgKyBwa2d3cml0ZWRpciArICInIgorICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ19idWlsZGRpciAiICsgZC5nZXRWYXIoJ1MnLCBUcnVlKSArICInIgorICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ19idWlsZF9uYW1lX2ZtdCAlJXtOQU1FfS0lJXtWRVJTSU9OfS0lJXtSRUxFQVNFfS4lJXtBUkNIfS5ycG0nIgorICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ191c2VfaW50ZXJuYWxfZGVwZW5kZW5jeV9nZW5lcmF0b3IgMCciCisgICAgaWYgcGVyZmlsZWRlcHM6CisgICAgICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ19fZmluZF9yZXF1aXJlcyAiICsgb3V0ZGVwZW5kcyArICInIgorICAgICAgICBjbWQgPSBjbWQgKyAiIC0tZGVmaW5lICdfX2ZpbmRfcHJvdmlkZXMgIiArIG91dHByb3ZpZGVzICsgIiciCisgICAgZWxzZToKKyAgICAgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX19maW5kX3JlcXVpcmVzICV7bmlsfSciCisgICAgICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ19fZmluZF9wcm92aWRlcyAle25pbH0nIgorICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ191bnBhY2thZ2VkX2ZpbGVzX3Rlcm1pbmF0ZV9idWlsZCAwJyIKKyAgICBjbWQgPSBjbWQgKyAiIC0tZGVmaW5lICdkZWJ1Z19wYWNrYWdlICV7bmlsfSciCisgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX3JwbWZjX21hZ2ljX3BhdGggIiArIG1hZ2ljZmlsZSArICInIgorICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ190bXBwYXRoICIgKyB3b3JrZGlyICsgIiciCisgICAgaWYgZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ3NycG0nLCBUcnVlKSA9PSAnMScgYW5kIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2FyY2hpdmVyJywgZCk6CisgICAgICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ19zb3VyY2VkaXIgIiArIGQuZ2V0VmFyKCdBUkNISVZFUl9PVVRESVInLCBUcnVlKSArICInIgorICAgICAgICBjbWRzcnBtID0gY21kICsgIiAtLWRlZmluZSAnX3NyY3JwbWRpciAiICsgZC5nZXRWYXIoJ0FSQ0hJVkVSX09VVERJUicsIFRydWUpICsgIiciCisgICAgICAgIGNtZHNycG0gPSBjbWRzcnBtICsgIiAtYnMgIiArIG91dHNwZWNmaWxlCisgICAgICAgICMgQnVpbGQgdGhlIC5zcmMucnBtCisgICAgICAgIGQuc2V0VmFyKCdTQlVJTERTUEVDJywgY21kc3JwbSArICJcbiIpCisgICAgICAgIGQuc2V0VmFyRmxhZygnU0JVSUxEU1BFQycsICdmdW5jJywgJzEnKQorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ1NCVUlMRFNQRUMnLCBkKQorICAgIGNtZCA9IGNtZCArICIgLWJiICIgKyBvdXRzcGVjZmlsZQorCisgICAgIyBCdWlsZCB0aGUgcnBtIHBhY2thZ2UhCisgICAgZC5zZXRWYXIoJ0JVSUxEU1BFQycsIGNtZCArICJcbiIpCisgICAgZC5zZXRWYXJGbGFnKCdCVUlMRFNQRUMnLCAnZnVuYycsICcxJykKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ0JVSUxEU1BFQycsIGQpCisKKyAgICBpZiBkLmdldFZhcignUlBNX1NJR05fUEFDS0FHRVMnLCBUcnVlKSA9PSAnMSc6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygic2lnbl9ycG0iLCBkKQorfQorCitweXRob24gKCkgeworICAgIGlmIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpICE9ICcnOgorICAgICAgICBkZXBzID0gJyBycG0tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgdmlydHVhbC9mYWtlcm9vdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlX3dyaXRlX3JwbScsICdkZXBlbmRzJywgZGVwcykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19wYWNrYWdlX3dyaXRlX3JwbScsICdmYWtlcm9vdCcsIDEpCit9CisKK1NTVEFURVRBU0tTICs9ICJkb19wYWNrYWdlX3dyaXRlX3JwbSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7UEtHV1JJVEVESVJSUE19IgorZG9fcGFja2FnZV93cml0ZV9ycG1bc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7REVQTE9ZX0RJUl9SUE19IgorIyBUYWtlIGEgc2hhcmVkIGxvY2ssIHdlIGNhbiB3cml0ZSBtdWx0aXBsZSBwYWNrYWdlcyBhdCB0aGUgc2FtZSB0aW1lLi4uCisjIGJ1dCB3ZSBuZWVkIHRvIHN0b3AgdGhlIHJvb3Rmcy9zb2x2ZXIgZnJvbSBydW5uaW5nIHdoaWxlIHdlIGRvLi4uCitkb19wYWNrYWdlX3dyaXRlX3JwbVtzc3RhdGUtbG9ja2ZpbGUtc2hhcmVkXSArPSAiJHtERVBMT1lfRElSX1JQTX0vcnBtLmxvY2siCisKK3B5dGhvbiBkb19wYWNrYWdlX3dyaXRlX3JwbV9zZXRzY2VuZSAoKSB7CisgICAgc3N0YXRlX3NldHNjZW5lKGQpCit9CithZGR0YXNrIGRvX3BhY2thZ2Vfd3JpdGVfcnBtX3NldHNjZW5lCisKK3B5dGhvbiBkb19wYWNrYWdlX3dyaXRlX3JwbSAoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJyZWFkX3N1YnBhY2thZ2VfbWV0YWRhdGEiLCBkKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiZG9fcGFja2FnZV9ycG0iLCBkKQorfQorCitkb19wYWNrYWdlX3dyaXRlX3JwbVtkaXJzXSA9ICIke1BLR1dSSVRFRElSUlBNfSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW2NsZWFuZGlyc10gPSAiJHtQS0dXUklURURJUlJQTX0iCitkb19wYWNrYWdlX3dyaXRlX3JwbVt1bWFza10gPSAiMDIyIgorYWRkdGFzayBwYWNrYWdlX3dyaXRlX3JwbSBhZnRlciBkb19wYWNrYWdlZGF0YSBkb19wYWNrYWdlCisKK1BBQ0tBR0VJTkRFWERFUFMgKz0gInJwbS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK1BBQ0tBR0VJTkRFWERFUFMgKz0gImNyZWF0ZXJlcG8tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK2RvX2J1aWxkW3JlY3JkZXB0YXNrXSArPSAiZG9fcGFja2FnZV93cml0ZV9ycG0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlX3Rhci5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZV90YXIuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWUyMjkyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZV90YXIuYmJjbGFzcwpAQCAtMCwwICsxLDY5IEBACitpbmhlcml0IHBhY2thZ2UKKworSU1BR0VfUEtHVFlQRSA/PSAidGFyIgorCitweXRob24gZG9fcGFja2FnZV90YXIgKCkgeworICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBpZiBub3Qgd29ya2RpcjoKKyAgICAgICAgYmIuZXJyb3IoIldPUktESVIgbm90IGRlZmluZWQsIHVuYWJsZSB0byBwYWNrYWdlIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBvdXRkaXIgPSBkLmdldFZhcignREVQTE9ZX0RJUl9UQVInLCBUcnVlKQorICAgIGlmIG5vdCBvdXRkaXI6CisgICAgICAgIGJiLmVycm9yKCJERVBMT1lfRElSX1RBUiBub3QgZGVmaW5lZCwgdW5hYmxlIHRvIHBhY2thZ2UiKQorICAgICAgICByZXR1cm4KKworICAgIGR2YXIgPSBkLmdldFZhcignRCcsIFRydWUpCisgICAgaWYgbm90IGR2YXI6CisgICAgICAgIGJiLmVycm9yKCJEIG5vdCBkZWZpbmVkLCB1bmFibGUgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIGlmIG5vdCBwYWNrYWdlczoKKyAgICAgICAgYmIuZGVidWcoMSwgIlBBQ0tBR0VTIG5vdCBkZWZpbmVkLCBub3RoaW5nIHRvIHBhY2thZ2UiKQorICAgICAgICByZXR1cm4KKworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3V0ZGlyKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihkdmFyKQorCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgcm9vdCA9ICIlcy8lcyIgJSAocGtnZGVzdCwgcGtnKQorCisgICAgICAgIG92ZXJyaWRlcyA9IGxvY2FsZGF0YS5nZXRWYXIoJ09WRVJSSURFUycsIEZhbHNlKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAnJXM6JXMnICUgKG92ZXJyaWRlcywgcGtnKSkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHJvb3QpCisgICAgICAgIGJhc2VkaXIgPSBvcy5wYXRoLmRpcm5hbWUocm9vdCkKKyAgICAgICAgdGFyZm4gPSBsb2NhbGRhdGEuZXhwYW5kKCIke0RFUExPWV9ESVJfVEFSfS8ke1BLR30tJHtQS0dWfS0ke1BLR1J9LnRhci5neiIpCisgICAgICAgIG9zLmNoZGlyKHJvb3QpCisgICAgICAgIGRsaXN0ID0gb3MubGlzdGRpcihyb290KQorICAgICAgICBpZiBub3QgZGxpc3Q6CisgICAgICAgICAgICBiYi5ub3RlKCJOb3QgY3JlYXRpbmcgZW1wdHkgYXJjaGl2ZSBmb3IgJXMtJXMtJXMiICUgKHBrZywgbG9jYWxkYXRhLmdldFZhcignUEtHVicsIFRydWUpLCBsb2NhbGRhdGEuZ2V0VmFyKCdQS0dSJywgVHJ1ZSkpKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgYXJncyA9ICJ0YXIgLWN6IC0tZXhjbHVkZT1DT05UUk9MIC0tZXhjbHVkZT1ERUJJQU4gLWYiLnNwbGl0KCkKKyAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKGFyZ3MgKyBbdGFyZm5dICsgZGxpc3QpCisgICAgICAgIGlmIHJldCAhPSAwOgorICAgICAgICAgICAgYmIuZXJyb3IoIkNyZWF0aW9uIG9mIHRhciAlcyBmYWlsZWQuIiAlIHRhcmZuKQorfQorCitweXRob24gKCkgeworICAgIGlmIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpICE9ICcnOgorICAgICAgICBkZXBzID0gKGQuZ2V0VmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV90YXInLCAnZGVwZW5kcycpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIGRlcHMuYXBwZW5kKCd0YXItbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorICAgICAgICBkZXBzLmFwcGVuZCgndmlydHVhbC9mYWtlcm9vdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV90YXInLCAnZGVwZW5kcycsICIgIi5qb2luKGRlcHMpKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfdGFyJywgJ2Zha2Vyb290JywgIjEiKQorfQorCisKK3B5dGhvbiBkb19wYWNrYWdlX3dyaXRlX3RhciAoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJyZWFkX3N1YnBhY2thZ2VfbWV0YWRhdGEiLCBkKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiZG9fcGFja2FnZV90YXIiLCBkKQorfQorZG9fcGFja2FnZV93cml0ZV90YXJbZGlyc10gPSAiJHtEfSIKK2FkZHRhc2sgcGFja2FnZV93cml0ZV90YXIgYmVmb3JlIGRvX2J1aWxkIGFmdGVyIGRvX3BhY2thZ2VkYXRhIGRvX3BhY2thZ2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VkYXRhLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlZGF0YS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOTdmMWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlZGF0YS5iYmNsYXNzCkBAIC0wLDAgKzEsMzQgQEAKK3B5dGhvbiByZWFkX3N1YnBhY2thZ2VfbWV0YWRhdGEgKCkgeworICAgIGltcG9ydCBvZS5wYWNrYWdlZGF0YQorCisgICAgdmFycyA9IHsKKyAgICAgICAgIlBOIiA6IGQuZ2V0VmFyKCdQTicsIFRydWUpLCAKKyAgICAgICAgIlBFIiA6IGQuZ2V0VmFyKCdQRScsIFRydWUpLCAKKyAgICAgICAgIlBWIiA6IGQuZ2V0VmFyKCdQVicsIFRydWUpLAorICAgICAgICAiUFIiIDogZC5nZXRWYXIoJ1BSJywgVHJ1ZSksCisgICAgfQorCisgICAgZGF0YSA9IG9lLnBhY2thZ2VkYXRhLnJlYWRfcGtnZGF0YSh2YXJzWyJQTiJdLCBkKQorCisgICAgZm9yIGtleSBpbiBkYXRhLmtleXMoKToKKyAgICAgICAgZC5zZXRWYXIoa2V5LCBkYXRhW2tleV0pCisKKyAgICBmb3IgcGtnIGluIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIHNkYXRhID0gb2UucGFja2FnZWRhdGEucmVhZF9zdWJwa2dkYXRhKHBrZywgZCkKKyAgICAgICAgZm9yIGtleSBpbiBzZGF0YS5rZXlzKCk6CisgICAgICAgICAgICBpZiBrZXkgaW4gdmFyczoKKyAgICAgICAgICAgICAgICBpZiBzZGF0YVtrZXldICE9IHZhcnNba2V5XToKKyAgICAgICAgICAgICAgICAgICAgaWYga2V5ID09ICJQTiI6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgiUmVjaXBlICVzIGlzIHRyeWluZyB0byBjcmVhdGUgcGFja2FnZSAlcyB3aGljaCB3YXMgYWxyZWFkeSB3cml0dGVuIGJ5IHJlY2lwZSAlcy4gVGhpcyB3aWxsIGNhdXNlIGNvcnJ1cHRpb24sIHBsZWFzZSByZXNvbHZlIHRoaXMgYW5kIG9ubHkgcHJvdmlkZSB0aGUgcGFja2FnZSBmcm9tIG9uZSByZWNpcGUgb3IgdGhlIG90aGVyIG9yIG9ubHkgYnVpbGQgb25lIG9mIHRoZSByZWNpcGVzLiIgJSAodmFyc1trZXldLCBwa2csIHNkYXRhW2tleV0pKQorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgiUmVjaXBlICVzIGlzIHRyeWluZyB0byBjaGFuZ2UgJXMgZnJvbSAnJXMnIHRvICclcycuIFRoaXMgd2lsbCBjYXVzZSBkb19wYWNrYWdlX3dyaXRlXyogZmFpbHVyZXMgc2luY2UgdGhlIGluY29ycmVjdCBkYXRhIHdpbGwgYmUgdXNlZCBhbmQgdGhleSB3aWxsIGJlIHVuYWJsZSB0byBmaW5kIHRoZSByaWdodCB3b3JrZGlyLiIgJSAodmFyc1siUE4iXSwga2V5LCB2YXJzW2tleV0sIHNkYXRhW2tleV0pKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIElmIHdlIHNldCB1bnN1ZmZpeGVkIHZhcmlhYmxlcyBoZXJlIHRoZXJlIGlzIGEgY2hhbmNlIHRoZXkgY291bGQgY2xvYmJlciBvdmVycmlkZSB2ZXJzaW9ucworICAgICAgICAgICAgIyBvZiB0aGF0IHZhcmlhYmxlLCBlLmcuIERFU0NSSVBUSU9OIGNvdWxkIGNsb2JiZXIgREVTQ1JJUFRJT05fPHBrZ25hbWU+CisgICAgICAgICAgICAjIFdlIHRoZXJlZm9yZSBkb24ndCBjbG9iYmVyIGZvciB0aGUgdW5zdWZmaXhlZCB2YXJpYWJsZSB2ZXJzaW9ucworICAgICAgICAgICAgIworICAgICAgICAgICAgaWYga2V5LmVuZHN3aXRoKCJfIiArIHBrZyk6CisgICAgICAgICAgICAgICAgZC5zZXRWYXIoa2V5LCBzZGF0YVtrZXldKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkLnNldFZhcihrZXksIHNkYXRhW2tleV0sIHBhcnNpbmc9VHJ1ZSkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2Vncm91cC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZWdyb3VwLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZjZmVhZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2Vncm91cC5iYmNsYXNzCkBAIC0wLDAgKzEsNTIgQEAKKyMgQ2xhc3MgZm9yIHBhY2thZ2Vncm91cCAocGFja2FnZSBncm91cCkgcmVjaXBlcworCisjIEJ5IGRlZmF1bHQsIG9ubHkgdGhlIHBhY2thZ2Vncm91cCBwYWNrYWdlIGl0c2VsZiBpcyBpbiBQQUNLQUdFUy4KKyMgLWRiZyBhbmQgLWRldiBmbGF2b3VycyBhcmUgaGFuZGxlZCBieSB0aGUgYW5vbmZ1bmMgYmVsb3cuCisjIFRoaXMgbWVhbnMgdGhhdCBwYWNrYWdlZ3JvdXAgcmVjaXBlcyB1c2VkIHRvIGJ1aWxkIG11bHRpcGxlIHBhY2thZ2Vncm91cAorIyBwYWNrYWdlcyBoYXZlIHRvIG1vZGlmeSBQQUNLQUdFUyBhZnRlciBpbmhlcml0aW5nIHBhY2thZ2Vncm91cC5iYmNsYXNzLgorUEFDS0FHRVMgPSAiJHtQTn0iCisKKyMgQnkgZGVmYXVsdCwgcGFja2FnZWdyb3VwIHBhY2thZ2VzIGRvIG5vdCBkZXBlbmQgb24gYSBjZXJ0YWluIGFyY2hpdGVjdHVyZS4KKyMgT25seSBpZiBkZXBlbmRlbmNpZXMgYXJlIG1vZGlmaWVkIGJ5IE1BQ0hJTkVfRkVBVFVSRVMsIHBhY2thZ2VzCisjIG5lZWQgdG8gYmUgc2V0IHRvIE1BQ0hJTkVfQVJDSCBhZnRlciBpbmhlcml0aW5nIHBhY2thZ2Vncm91cC5iYmNsYXNzCitQQUNLQUdFX0FSQ0ggPz0gImFsbCIKKworIyBGdWxseSBleHBhbmRlZCAtIHNvIGl0IGFwcGxpZXMgdGhlIG92ZXJyaWRlcyBhcyB3ZWxsCitQQUNLQUdFX0FSQ0hfRVhQQU5ERUQgOj0gIiR7UEFDS0FHRV9BUkNIfSIKKworaW5oZXJpdCAke0BvZS51dGlscy5pZmVsc2UoZC5nZXRWYXIoJ1BBQ0tBR0VfQVJDSF9FWFBBTkRFRCcsIFRydWUpID09ICdhbGwnLCAnYWxsYXJjaCcsICcnKX0KKworIyBUaGlzIGF1dG9tYXRpY2FsbHkgYWRkcyAtZGJnIGFuZCAtZGV2IGZsYXZvdXJzIG9mIGFsbCBQQUNLQUdFUworIyB0byB0aGUgbGlzdC4gVGhlaXIgZGVwZW5kZW5jaWVzIChSUkVDT01NRU5EUykgYXJlIGhhbmRsZWQgYXMgdXN1YWwKKyMgYnkgcGFja2FnZV9kZXBjaGFpbnMgaW4gYSBmb2xsb3dpbmcgc3RlcC4KKyMgQWxzbyBtYXJrIGFsbCBwYWNrYWdlcyBhcyBBTExPV19FTVBUWQorcHl0aG9uICgpIHsKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBnZW5wYWNrYWdlcyA9IFtdCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgZC5zZXRWYXIoIkFMTE9XX0VNUFRZXyVzIiAlIHBrZywgIjEiKQorICAgICAgICBmb3IgcG9zdGZpeCBpbiBbJy1kYmcnLCAnLWRldicsICctcHRlc3QnXToKKyAgICAgICAgICAgIGdlbnBhY2thZ2VzLmFwcGVuZChwa2crcG9zdGZpeCkKKyAgICBpZiBkLmdldFZhcignUEFDS0FHRUdST1VQX0RJU0FCTEVfQ09NUExFTUVOVEFSWScsIFRydWUpICE9ICcxJzoKKyAgICAgICAgZC5zZXRWYXIoJ1BBQ0tBR0VTJywgJyAnLmpvaW4ocGFja2FnZXMrZ2VucGFja2FnZXMpKQorfQorCisjIFdlIGRvbid0IHdhbnQgdG8gbG9vayBhdCBzaGFyZWQgbGlicmFyeSBkZXBlbmRlbmNpZXMgZm9yIHRoZQorIyBkYmcgcGFja2FnZXMKK0RFUENIQUlOX0RCR0RFRkFVTFRERVBTID0gIjEiCisKKyMgV2Ugb25seSBuZWVkIHRoZSBwYWNrYWdpbmcgdGFza3MgLSBkaXNhYmxlIHRoZSByZXN0Citkb19mZXRjaFtub2V4ZWNdID0gIjEiCitkb191bnBhY2tbbm9leGVjXSA9ICIxIgorZG9fcGF0Y2hbbm9leGVjXSA9ICIxIgorZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorZG9faW5zdGFsbFtub2V4ZWNdID0gIjEiCitkb19wb3B1bGF0ZV9zeXNyb290W25vZXhlY10gPSAiMSIKKworcHl0aG9uICgpIHsKKyAgICBpbml0bWFuID0gZC5nZXRWYXIoIlZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIiLCBUcnVlKQorICAgIGlmIGluaXRtYW4gYW5kIGluaXRtYW4gaW4gWydzeXN2aW5pdCcsICdzeXN0ZW1kJ10gYW5kIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgaW5pdG1hbiwgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBiYi5mYXRhbCgiUGxlYXNlIGVuc3VyZSB0aGF0IHlvdXIgc2V0dGluZyBvZiBWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyICglcykgbWF0Y2hlcyB0aGUgZW50cmllcyBlbmFibGVkIGluIERJU1RST19GRUFUVVJFUyIgJSBpbml0bWFuKQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlaW5mby5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZWluZm8uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDYwYWNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZWluZm8uYmJjbGFzcwpAQCAtMCwwICsxLDIyIEBACitweXRob24gcGFja2FnZWluZm9faGFuZGxlciAoKSB7CisgICAgaW1wb3J0IG9lLnBhY2thZ2VkYXRhCisgICAgcGtnaW5mb2xpc3QgPSBbXQorCisgICAgcGtnZGF0YV9kaXIgPSBlLmRhdGEuZ2V0VmFyKCJQS0dEQVRBX0RJUiIsIFRydWUpICsgJy9ydW50aW1lLycKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhwa2dkYXRhX2Rpcik6CisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBrZ2RhdGFfZGlyKToKKyAgICAgICAgICAgIGZvciBwa2duYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGlmIHBrZ25hbWUuZW5kc3dpdGgoJy5wYWNrYWdlZCcpOgorICAgICAgICAgICAgICAgICAgICBwa2duYW1lID0gcGtnbmFtZVs6LTldCisgICAgICAgICAgICAgICAgICAgIHBrZ2RhdGFmaWxlID0gcm9vdCArIHBrZ25hbWUKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2RhdGEgPSBvZS5wYWNrYWdlZGF0YS5yZWFkX3BrZ2RhdGFmaWxlKHBrZ2RhdGFmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgc2RhdGFbJ1BLRyddID0gcGtnbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgcGtnaW5mb2xpc3QuYXBwZW5kKHNkYXRhKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJGYWlsZWQgdG8gcmVhZCBwa2dkYXRhIGZpbGUgJXM6ICVzOiAlcyIgJSAocGtnZGF0YWZpbGUsIGUuX19jbGFzc19fLCBzdHIoZSkpKQorICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuUGFja2FnZUluZm8ocGtnaW5mb2xpc3QpLCBlLmRhdGEpCit9CisKK2FkZGhhbmRsZXIgcGFja2FnZWluZm9faGFuZGxlcgorcGFja2FnZWluZm9faGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LlJlcXVlc3RQYWNrYWdlSW5mbyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhdGNoLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYXRjaC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMmFhYjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYXRjaC5iYmNsYXNzCkBAIC0wLDAgKzEsMTg4IEBACisjIENvcHlyaWdodCAoQykgMjAwNiAgT3BlbmVkSGFuZCBMVEQKKworIyBQb2ludCB0byBhbiBlbXB0eSBmaWxlIHNvIGFueSB1c2VyJ3MgY3VzdG9tIHNldHRpbmdzIGRvbid0IGJyZWFrIHRoaW5ncworUVVJTFRSQ0ZJTEUgPz0gIiR7U1RBR0lOR19FVENESVJfTkFUSVZFfS9xdWlsdHJjIgorCitQQVRDSERFUEVOREVOQ1kgPSAiJHtQQVRDSFRPT0x9LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorCitpbmhlcml0IHRlcm1pbmFsCisKK2RlZiBzcmNfcGF0Y2hlcyhkLCBhbGwgPSBGYWxzZSApOgorICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgZmV0Y2ggPSBiYi5mZXRjaDIuRmV0Y2goW10sIGQpCisgICAgcGF0Y2hlcyA9IFtdCisgICAgc291cmNlcyA9IFtdCisgICAgZm9yIHVybCBpbiBmZXRjaC51cmxzOgorICAgICAgICBsb2NhbCA9IHBhdGNoX3BhdGgodXJsLCBmZXRjaCwgd29ya2RpcikKKyAgICAgICAgaWYgbm90IGxvY2FsOgorICAgICAgICAgICAgaWYgYWxsOgorICAgICAgICAgICAgICAgIGxvY2FsID0gZmV0Y2gubG9jYWxwYXRoKHVybCkKKyAgICAgICAgICAgICAgICBzb3VyY2VzLmFwcGVuZChsb2NhbCkKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgdXJsZGF0YSA9IGZldGNoLnVkW3VybF0KKyAgICAgICAgcGFybSA9IHVybGRhdGEucGFybQorICAgICAgICBwYXRjaG5hbWUgPSBwYXJtLmdldCgncG5hbWUnKSBvciBvcy5wYXRoLmJhc2VuYW1lKGxvY2FsKQorCisgICAgICAgIGFwcGx5LCByZWFzb24gPSBzaG91bGRfYXBwbHkocGFybSwgZCkKKyAgICAgICAgaWYgbm90IGFwcGx5OgorICAgICAgICAgICAgaWYgcmVhc29uOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoIlBhdGNoICVzICVzIiAlIChwYXRjaG5hbWUsIHJlYXNvbikpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHBhdGNocGFybSA9IHsncGF0Y2huYW1lJzogcGF0Y2huYW1lfQorICAgICAgICBpZiAic3RyaXBsZXZlbCIgaW4gcGFybToKKyAgICAgICAgICAgIHN0cmlwbGV2ZWwgPSBwYXJtWyJzdHJpcGxldmVsIl0KKyAgICAgICAgZWxpZiAicG51bSIgaW4gcGFybToKKyAgICAgICAgICAgICNiYi5tc2cud2FybihOb25lLCAiRGVwcmVjYXRlZCB1c2FnZSBvZiAncG51bScgdXJsIHBhcmFtZXRlciBpbiAnJXMnLCBwbGVhc2UgdXNlICdzdHJpcGxldmVsJyIgJSB1cmwpCisgICAgICAgICAgICBzdHJpcGxldmVsID0gcGFybVsicG51bSJdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdHJpcGxldmVsID0gJzEnCisgICAgICAgIHBhdGNocGFybVsnc3RyaXBsZXZlbCddID0gc3RyaXBsZXZlbAorCisgICAgICAgIHBhdGNoZGlyID0gcGFybS5nZXQoJ3BhdGNoZGlyJykKKyAgICAgICAgaWYgcGF0Y2hkaXI6CisgICAgICAgICAgICBwYXRjaHBhcm1bJ3BhdGNoZGlyJ10gPSBwYXRjaGRpcgorCisgICAgICAgIGxvY2FsdXJsID0gYmIuZmV0Y2guZW5jb2RldXJsKCgnZmlsZScsICcnLCBsb2NhbCwgJycsICcnLCBwYXRjaHBhcm0pKQorICAgICAgICBwYXRjaGVzLmFwcGVuZChsb2NhbHVybCkKKworICAgIGlmIGFsbDoKKyAgICAgICAgcmV0dXJuIHNvdXJjZXMKKworICAgIHJldHVybiBwYXRjaGVzCisKK2RlZiBwYXRjaF9wYXRoKHVybCwgZmV0Y2gsIHdvcmtkaXIpOgorICAgICIiIlJldHVybiB0aGUgbG9jYWwgcGF0aCBvZiBhIHBhdGNoLCBvciBOb25lIGlmIHRoaXMgaXNuJ3QgYSBwYXRjaCIiIgorCisgICAgbG9jYWwgPSBmZXRjaC5sb2NhbHBhdGgodXJsKQorICAgIGJhc2UsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShsb2NhbCkpCisgICAgaWYgZXh0IGluICgnLmd6JywgJy5iejInLCAnLlonKToKKyAgICAgICAgbG9jYWwgPSBvcy5wYXRoLmpvaW4od29ya2RpciwgYmFzZSkKKyAgICAgICAgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChiYXNlKVsxXQorCisgICAgdXJsZGF0YSA9IGZldGNoLnVkW3VybF0KKyAgICBpZiAiYXBwbHkiIGluIHVybGRhdGEucGFybToKKyAgICAgICAgYXBwbHkgPSBvZS50eXBlcy5ib29sZWFuKHVybGRhdGEucGFybVsiYXBwbHkiXSkKKyAgICAgICAgaWYgbm90IGFwcGx5OgorICAgICAgICAgICAgcmV0dXJuCisgICAgZWxpZiBleHQgbm90IGluICgiLmRpZmYiLCAiLnBhdGNoIik6CisgICAgICAgIHJldHVybgorCisgICAgcmV0dXJuIGxvY2FsCisKK2RlZiBzaG91bGRfYXBwbHkocGFybSwgZCk6CisgICAgIiIiRGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBhcHBseSB0aGUgZ2l2ZW4gcGF0Y2giIiIKKworICAgIGlmICJtaW5kYXRlIiBpbiBwYXJtIG9yICJtYXhkYXRlIiBpbiBwYXJtOgorICAgICAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgIHNyY2RhdGUgPSBkLmdldFZhcignU1JDREFURV8lcycgJSBwbiwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHNyY2RhdGU6CisgICAgICAgICAgICBzcmNkYXRlID0gZC5nZXRWYXIoJ1NSQ0RBVEUnLCBUcnVlKQorCisgICAgICAgIGlmIHNyY2RhdGUgPT0gIm5vdyI6CisgICAgICAgICAgICBzcmNkYXRlID0gZC5nZXRWYXIoJ0RBVEUnLCBUcnVlKQorCisgICAgICAgIGlmICJtYXhkYXRlIiBpbiBwYXJtIGFuZCBwYXJtWyJtYXhkYXRlIl0gPCBzcmNkYXRlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCAnaXMgb3V0ZGF0ZWQnCisKKyAgICAgICAgaWYgIm1pbmRhdGUiIGluIHBhcm0gYW5kIHBhcm1bIm1pbmRhdGUiXSA+IHNyY2RhdGU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UsICdpcyBwcmVkYXRlZCcKKworCisgICAgaWYgIm1pbnJldiIgaW4gcGFybToKKyAgICAgICAgc3JjcmV2ID0gZC5nZXRWYXIoJ1NSQ1JFVicsIFRydWUpCisgICAgICAgIGlmIHNyY3JldiBhbmQgc3JjcmV2IDwgcGFybVsibWlucmV2Il06CisgICAgICAgICAgICByZXR1cm4gRmFsc2UsICdhcHBsaWVzIHRvIGxhdGVyIHJldmlzaW9ucycKKworICAgIGlmICJtYXhyZXYiIGluIHBhcm06CisgICAgICAgIHNyY3JldiA9IGQuZ2V0VmFyKCdTUkNSRVYnLCBUcnVlKQorICAgICAgICBpZiBzcmNyZXYgYW5kIHNyY3JldiA+IHBhcm1bIm1heHJldiJdOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCAnYXBwbGllcyB0byBlYXJsaWVyIHJldmlzaW9ucycKKworICAgIGlmICJyZXYiIGluIHBhcm06CisgICAgICAgIHNyY3JldiA9IGQuZ2V0VmFyKCdTUkNSRVYnLCBUcnVlKQorICAgICAgICBpZiBzcmNyZXYgYW5kIHBhcm1bInJldiJdIG5vdCBpbiBzcmNyZXY6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UsICJkb2Vzbid0IGFwcGx5IHRvIHJldmlzaW9uIgorCisgICAgaWYgIm5vdHJldiIgaW4gcGFybToKKyAgICAgICAgc3JjcmV2ID0gZC5nZXRWYXIoJ1NSQ1JFVicsIFRydWUpCisgICAgICAgIGlmIHNyY3JldiBhbmQgcGFybVsibm90cmV2Il0gaW4gc3JjcmV2OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCAiZG9lc24ndCBhcHBseSB0byByZXZpc2lvbiIKKworICAgIHJldHVybiBUcnVlLCBOb25lCisKK3Nob3VsZF9hcHBseVt2YXJkZXBzZXhjbHVkZV0gPSAiREFURSBTUkNEQVRFIgorCitweXRob24gcGF0Y2hfZG9fcGF0Y2goKSB7CisgICAgaW1wb3J0IG9lLnBhdGNoCisKKyAgICBwYXRjaHNldG1hcCA9IHsKKyAgICAgICAgInBhdGNoIjogb2UucGF0Y2guUGF0Y2hUcmVlLAorICAgICAgICAicXVpbHQiOiBvZS5wYXRjaC5RdWlsdFRyZWUsCisgICAgICAgICJnaXQiOiBvZS5wYXRjaC5HaXRBcHBseVRyZWUsCisgICAgfQorCisgICAgY2xzID0gcGF0Y2hzZXRtYXBbZC5nZXRWYXIoJ1BBVENIVE9PTCcsIFRydWUpIG9yICdxdWlsdCddCisKKyAgICByZXNvbHZlcm1hcCA9IHsKKyAgICAgICAgIm5vb3AiOiBvZS5wYXRjaC5OT09QUmVzb2x2ZXIsCisgICAgICAgICJ1c2VyIjogb2UucGF0Y2guVXNlclJlc29sdmVyLAorICAgIH0KKworICAgIHJjbHMgPSByZXNvbHZlcm1hcFtkLmdldFZhcignUEFUQ0hSRVNPTFZFJywgVHJ1ZSkgb3IgJ3VzZXInXQorCisgICAgY2xhc3NlcyA9IHt9CisKKyAgICBzID0gZC5nZXRWYXIoJ1MnLCBUcnVlKQorCisgICAgcGF0aCA9IG9zLmdldGVudignUEFUSCcpCisgICAgb3MucHV0ZW52KCdQQVRIJywgZC5nZXRWYXIoJ1BBVEgnLCBUcnVlKSkKKworICAgICMgV2UgbXVzdCB1c2Ugb25lIFRNUERJUiBwZXIgcHJvY2VzcyBzbyB0aGF0IHRoZSAicGF0Y2giIHByb2Nlc3NlcworICAgICMgZG9uJ3QgZ2VuZXJhdGUgdGhlIHNhbWUgdGVtcCBmaWxlIG5hbWUuCisKKyAgICBpbXBvcnQgdGVtcGZpbGUKKyAgICBwcm9jZXNzX3RtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgIG9zLmVudmlyb25bJ1RNUERJUiddID0gcHJvY2Vzc190bXBkaXIKKworICAgIGZvciBwYXRjaCBpbiBzcmNfcGF0Y2hlcyhkKToKKyAgICAgICAgXywgXywgbG9jYWwsIF8sIF8sIHBhcm0gPSBiYi5mZXRjaC5kZWNvZGV1cmwocGF0Y2gpCisKKyAgICAgICAgaWYgInBhdGNoZGlyIiBpbiBwYXJtOgorICAgICAgICAgICAgcGF0Y2hkaXIgPSBwYXJtWyJwYXRjaGRpciJdCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhwYXRjaGRpcik6CisgICAgICAgICAgICAgICAgcGF0Y2hkaXIgPSBvcy5wYXRoLmpvaW4ocywgcGF0Y2hkaXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXRjaGRpciA9IHMKKworICAgICAgICBpZiBub3QgcGF0Y2hkaXIgaW4gY2xhc3NlczoKKyAgICAgICAgICAgIHBhdGNoc2V0ID0gY2xzKHBhdGNoZGlyLCBkKQorICAgICAgICAgICAgcmVzb2x2ZXIgPSByY2xzKHBhdGNoc2V0LCBvZV90ZXJtaW5hbCkKKyAgICAgICAgICAgIGNsYXNzZXNbcGF0Y2hkaXJdID0gKHBhdGNoc2V0LCByZXNvbHZlcikKKyAgICAgICAgICAgIHBhdGNoc2V0LkNsZWFuKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhdGNoc2V0LCByZXNvbHZlciA9IGNsYXNzZXNbcGF0Y2hkaXJdCisKKyAgICAgICAgYmIubm90ZSgiQXBwbHlpbmcgcGF0Y2ggJyVzJyAoJXMpIiAlIChwYXJtWydwYXRjaG5hbWUnXSwgb2UucGF0aC5mb3JtYXRfZGlzcGxheShsb2NhbCwgZCkpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXRjaHNldC5JbXBvcnQoeyJmaWxlIjpsb2NhbCwgInN0cmlwcGF0aCI6IHBhcm1bJ3N0cmlwbGV2ZWwnXX0sIFRydWUpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHByb2Nlc3NfdG1wZGlyLCBUcnVlKQorICAgICAgICAgICAgYmIuZmF0YWwoc3RyKGV4YykpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc29sdmVyLlJlc29sdmUoKQorICAgICAgICBleGNlcHQgYmIuQkJIYW5kbGVkRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUocHJvY2Vzc190bXBkaXIsIFRydWUpCisgICAgICAgICAgICBiYi5mYXRhbChzdHIoZSkpCisKKyAgICBiYi51dGlscy5yZW1vdmUocHJvY2Vzc190bXBkaXIsIFRydWUpCisgICAgZGVsIG9zLmVudmlyb25bJ1RNUERJUiddCit9CitwYXRjaF9kb19wYXRjaFt2YXJkZXBzZXhjbHVkZV0gPSAiUEFUQ0hSRVNPTFZFIgorCithZGR0YXNrIHBhdGNoIGFmdGVyIGRvX3VucGFjaworZG9fcGF0Y2hbZGlyc10gPSAiJHtXT1JLRElSfSIKK2RvX3BhdGNoW2RlcGVuZHNdID0gIiR7UEFUQ0hERVBFTkRFTkNZfSIKKworRVhQT1JUX0ZVTkNUSU9OUyBkb19wYXRjaApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGVybG5hdGl2ZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGVybG5hdGl2ZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOGRlOGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wZXJsbmF0aXZlLmJiY2xhc3MKQEAgLTAsMCArMSwzIEBACitFWFRSQU5BVElWRVBBVEggKz0gInBlcmwtbmF0aXZlIgorREVQRU5EUyArPSAicGVybC1uYXRpdmUiCitPRUNNQUtFX1BFUkxOQVRJVkVfRElSID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BpeGJ1ZmNhY2hlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9waXhidWZjYWNoZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0OTk2N2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9waXhidWZjYWNoZS5iYmNsYXNzCkBAIC0wLDAgKzEsNjcgQEAKKyMKKyMgVGhpcyBjbGFzcyB3aWxsIGdlbmVyYXRlIHRoZSBwcm9wZXIgcG9zdGluc3QvcG9zdHJtIHNjcmlwdGxldHMgZm9yIHBpeGJ1ZgorIyBwYWNrYWdlcy4KKyMKKworREVQRU5EUyArPSAicWVtdS1uYXRpdmUiCitpbmhlcml0IHFlbXUKKworUElYQlVGX1BBQ0tBR0VTID8/PSAiJHtQTn0iCisKK3BpeGJ1ZmNhY2hlX2NvbW1vbigpIHsKK2lmIFsgIngkRCIgIT0gIngiIF07IHRoZW4KKwkkSU5URVJDRVBUX0RJUi9wb3N0aW5zdF9pbnRlcmNlcHQgdXBkYXRlX3BpeGJ1Zl9jYWNoZSAke1BLR30gbWxwcmVmaXg9JHtNTFBSRUZJWH0gbGliZGlyPSR7bGliZGlyfSBcCisJCWJpbmRpcj0ke2JpbmRpcn0gYmFzZV9saWJkaXI9JHtiYXNlX2xpYmRpcn0KK2Vsc2UKKworCSMgVXBkYXRlIHRoZSBwaXhidWYgbG9hZGVycyBpbiBjYXNlIHRoZXkgaGF2ZW4ndCBiZWVuIHJlZ2lzdGVyZWQgeWV0CisJR0RLX1BJWEJVRl9NT0RVTEVESVI9JHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLzIuMTAuMC9sb2FkZXJzIGdkay1waXhidWYtcXVlcnktbG9hZGVycyAtLXVwZGF0ZS1jYWNoZQorCisJaWYgWyAteCAke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlIF0gJiYgWyAtZCAke2RhdGFkaXJ9L2ljb25zIF07IHRoZW4KKwkJZm9yIGljb25kaXIgaW4gL3Vzci9zaGFyZS9pY29ucy8qOyBkbworCQkJaWYgWyAtZCAke2ljb25kaXJ9IF07IHRoZW4KKwkJCQlndGstdXBkYXRlLWljb24tY2FjaGUgLXQgLXEgJHtpY29uZGlyfQorCQkJZmkKKwkJZG9uZQorCWZpCitmaQorfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfYXBwZW5kKCkgeworICAgIHBpeGJ1Zl9wa2dzID0gZC5nZXRWYXIoJ1BJWEJVRl9QQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKworICAgIGZvciBwa2cgaW4gcGl4YnVmX3BrZ3M6CisgICAgICAgIGJiLm5vdGUoImFkZGluZyBwaXhidWYgcG9zdGluc3QgYW5kIHBvc3RybSBzY3JpcHRzIHRvICVzIiAlIHBrZykKKyAgICAgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdCcsIFRydWUpCisgICAgICAgIGlmIG5vdCBwb3N0aW5zdDoKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gJyMhL2Jpbi9zaFxuJworICAgICAgICBwb3N0aW5zdCArPSBkLmdldFZhcigncGl4YnVmY2FjaGVfY29tbW9uJywgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorCisgICAgICAgIHBvc3RybSA9IGQuZ2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ3BrZ19wb3N0cm0nLCBUcnVlKQorICAgICAgICBpZiBub3QgcG9zdHJtOgorICAgICAgICAgICAgcG9zdHJtID0gJyMhL2Jpbi9zaFxuJworICAgICAgICBwb3N0cm0gKz0gZC5nZXRWYXIoJ3BpeGJ1ZmNhY2hlX2NvbW1vbicsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgcG9zdHJtKQorfQorCitnZGtwaXhidWZfY29tcGxldGUoKSB7CisJR0RLX1BJWEJVRl9GQVRBTF9MT0FERVI9MSAke1NUQUdJTkdfQklORElSX05BVElWRX0vZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzIC0tdXBkYXRlLWNhY2hlIHx8IGV4aXQgMQorfQorCisjCisjIEFkZCBhbiBzc3RhdGUgcG9zdGluc3QgaG9vayB0byB1cGRhdGUgdGhlIGNhY2hlIGZvciBuYXRpdmUgcGFja2FnZXMuCisjIEFuIGVycm9yIGV4aXQgZHVyaW5nIHBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUgYWxsb3dzIGJpdGJha2UgdG8KKyMgdHJ5IHRvIHJlY292ZXIgYnkgcmUtYnVpbGRpbmcgdGhlIHBhY2thZ2UuCisjCitTU1RBVEVQT1NUSU5TVEZVTkNTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIHBpeGJ1ZmNhY2hlX3NzdGF0ZV9wb3N0aW5zdCIKKworIyBTZWUgYmFzZS5iYmNsYXNzIGZvciB0aGUgb3RoZXIgaGFsZiBvZiB0aGlzCitwaXhidWZjYWNoZV9zc3RhdGVfcG9zdGluc3QoKSB7CisJaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3QiIF07IHRoZW4KKwkJJHtnZGtwaXhidWZfY29tcGxldGV9CisJZWxpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXTsgdGhlbgorCQllY2hvICIke2dka3BpeGJ1Zl9jb21wbGV0ZX0iID4+ICR7U1RBR0lOR19ESVJ9L3NzdGF0ZWNvbXBsZXRpb25zCisJZmkKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGtnY29uZmlnLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wa2djb25maWcuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDFmODRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGtnY29uZmlnLmJiY2xhc3MKQEAgLTAsMCArMSwyIEBACitERVBFTkRTX3ByZXBlbmQgPSAicGtnY29uZmlnLW5hdGl2ZSAiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nkay5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcG9wdWxhdGVfc2RrLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY0YTkxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nkay5iYmNsYXNzCkBAIC0wLDAgKzEsNyBAQAorIyBUaGUgbWFqb3JpdHkgb2YgcG9wdWxhdGVfc2RrIGlzIGxvY2F0ZWQgaW4gcG9wdWxhdGVfc2RrX2Jhc2UKKyMgVGhpcyBjaHVuayBzaW1wbHkgZmFjaWxpdGF0ZXMgY29tcGF0aWJpbGl0eSB3aXRoIFNESyBvbmx5IHJlY2lwZXMuCisKK2luaGVyaXQgcG9wdWxhdGVfc2RrX2Jhc2UKKworYWRkdGFzayBwb3B1bGF0ZV9zZGsgYWZ0ZXIgZG9faW5zdGFsbCBiZWZvcmUgZG9fYnVpbGQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcG9wdWxhdGVfc2RrX2Jhc2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nka19iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE3YTlhNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nka19iYXNlLmJiY2xhc3MKQEAgLTAsMCArMSwyMDMgQEAKK2luaGVyaXQgbWV0YQorCisjIFdpbGRjYXJkcyBzcGVjaWZ5aW5nIGNvbXBsZW1lbnRhcnkgcGFja2FnZXMgdG8gaW5zdGFsbCBmb3IgZXZlcnkgcGFja2FnZSB0aGF0IGhhcyBiZWVuIGV4cGxpY2l0bHkKKyMgaW5zdGFsbGVkIGludG8gdGhlIHJvb3RmcworQ09NUExFTUVOVEFSWV9HTE9CW2Rldi1wa2dzXSA9ICcqLWRldicKK0NPTVBMRU1FTlRBUllfR0xPQltzdGF0aWNkZXYtcGtnc10gPSAnKi1zdGF0aWNkZXYnCitDT01QTEVNRU5UQVJZX0dMT0JbZG9jLXBrZ3NdID0gJyotZG9jJworQ09NUExFTUVOVEFSWV9HTE9CW2RiZy1wa2dzXSA9ICcqLWRiZycKK0NPTVBMRU1FTlRBUllfR0xPQltwdGVzdC1wa2dzXSA9ICcqLXB0ZXN0JworCitkZWYgY29tcGxlbWVudGFyeV9nbG9icyhmZWF0dXJldmFyLCBkKToKKyAgICBhbGxfZ2xvYnMgPSBkLmdldFZhckZsYWdzKCdDT01QTEVNRU5UQVJZX0dMT0InKQorICAgIGdsb2JzID0gW10KKyAgICBmZWF0dXJlcyA9IHNldCgoZC5nZXRWYXIoZmVhdHVyZXZhciwgVHJ1ZSkgb3IgJycpLnNwbGl0KCkpCisgICAgZm9yIG5hbWUsIGdsb2IgaW4gYWxsX2dsb2JzLml0ZW1zKCk6CisgICAgICAgIGlmIG5hbWUgaW4gZmVhdHVyZXM6CisgICAgICAgICAgICBnbG9icy5hcHBlbmQoZ2xvYikKKyAgICByZXR1cm4gJyAnLmpvaW4oZ2xvYnMpCisKK1NES0lNQUdFX0ZFQVRVUkVTID8/PSAiZGV2LXBrZ3MgZGJnLXBrZ3MiCitTREtJTUFHRV9JTlNUQUxMX0NPTVBMRU1FTlRBUlkgPSAnJHtAY29tcGxlbWVudGFyeV9nbG9icygiU0RLSU1BR0VfRkVBVFVSRVMiLCBkKX0nCisKK2luaGVyaXQgcm9vdGZzXyR7SU1BR0VfUEtHVFlQRX0KKworU0RLX0RJUiA9ICIke1dPUktESVJ9L3NkayIKK1NES19PVVRQVVQgPSAiJHtTREtfRElSfS9pbWFnZSIKK1NES19ERVBMT1kgPSAiJHtERVBMT1lfRElSfS9zZGsiCisKK0JfdGFzay1wb3B1bGF0ZS1zZGsgPSAiJHtTREtfRElSfSIKKworU0RLVEFSR0VUU1lTUk9PVCA9ICIke1NES1BBVEh9L3N5c3Jvb3RzLyR7UkVBTF9NVUxUSU1BQ0hfVEFSR0VUX1NZU30iCisKK1RPT0xDSEFJTl9IT1NUX1RBU0sgPz0gIm5hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtc2RrLWhvc3QgcGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLSR7TUFDSElORX0iCitUT09MQ0hBSU5fSE9TVF9UQVNLX0FUVEVNUFRPTkxZID89ICIiCitUT09MQ0hBSU5fVEFSR0VUX1RBU0sgPz0gIiBcCisgICAgJHtAbXVsdGlsaWJfcGtnX2V4dGVuZChkLCAncGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1zZGstdGFyZ2V0Jyl9IFwKKyAgICAke0BtdWx0aWxpYl9wa2dfZXh0ZW5kKGQsICdwYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQtZGJnJyl9IFwKKyAgICAiCitUT09MQ0hBSU5fVEFSR0VUX1RBU0tfQVRURU1QVE9OTFkgPz0gIiIKK1RPT0xDSEFJTl9PVVRQVVROQU1FID89ICIke1NES19OQU1FfS10b29sY2hhaW4tJHtTREtfVkVSU0lPTn0iCisKK1NES19SREVQRU5EUyA9ICIke1RPT0xDSEFJTl9UQVJHRVRfVEFTS30gJHtUT09MQ0hBSU5fSE9TVF9UQVNLfSIKK1NES19ERVBFTkRTID0gInZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlIHBiemlwMi1uYXRpdmUiCisKKyMgV2Ugd2FudCB0aGUgTVVMVElBUkNIX1RBUkdFVF9TWVMgdG8gcG9pbnQgdG8gdGhlIFRVTkVfUEtHQVJDSCwgbm90IFBBQ0tBR0VfQVJDSCBhcyBpdAorIyBjb3VsZCBiZSBzZXQgdG8gdGhlIE1BQ0hJTkVfQVJDSAorUkVBTF9NVUxUSU1BQ0hfVEFSR0VUX1NZUyA9ICIke1RVTkVfUEtHQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfSIKKworUElEID0gIiR7QG9zLmdldHBpZCgpfSIKKworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK1NES19QQUNLQUdJTkdfRlVOQyA/PSAiY3JlYXRlX3NoYXIiCitTREtfUFJFX0lOU1RBTExfQ09NTUFORCA/PSAiIgorU0RLX1BPU1RfSU5TVEFMTF9DT01NQU5EID89ICIiCitTREtfUkVMT0NBVEVfQUZURVJfSU5TVEFMTCA/PSAiMSIKKworU0RLRVhUUEFUSCA/PSAifi8ke0BkLmdldFZhcignRElTVFJPJywgVHJ1ZSl9X3NkayIKK1NES19USVRMRSA/PSAiJHtAZC5nZXRWYXIoJ0RJU1RST19OQU1FJywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ0RJU1RSTycsIFRydWUpfSBTREsiCisKK1NES19UQVJHRVRfTUFOSUZFU1QgPSAiJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS50YXJnZXQubWFuaWZlc3QiCitTREtfSE9TVF9NQU5JRkVTVCA9ICIke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9Lmhvc3QubWFuaWZlc3QiCitweXRob24gd3JpdGVfdGFyZ2V0X3Nka19tYW5pZmVzdCAoKSB7CisgICAgZnJvbSBvZS5zZGsgaW1wb3J0IHNka19saXN0X2luc3RhbGxlZF9wYWNrYWdlcworICAgIHNka21hbmlmZXN0ZGlyID0gb3MucGF0aC5kaXJuYW1lKGQuZ2V0VmFyKCJTREtfVEFSR0VUX01BTklGRVNUIiwgVHJ1ZSkpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNka21hbmlmZXN0ZGlyKToKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNka21hbmlmZXN0ZGlyKQorICAgIHdpdGggb3BlbihkLmdldFZhcignU0RLX1RBUkdFVF9NQU5JRkVTVCcsIFRydWUpLCAndycpIGFzIG91dHB1dDoKKyAgICAgICAgb3V0cHV0LndyaXRlKHNka19saXN0X2luc3RhbGxlZF9wYWNrYWdlcyhkLCBUcnVlLCAndmVyJykpCit9CisKK3B5dGhvbiB3cml0ZV9ob3N0X3Nka19tYW5pZmVzdCAoKSB7CisgICAgZnJvbSBvZS5zZGsgaW1wb3J0IHNka19saXN0X2luc3RhbGxlZF9wYWNrYWdlcworICAgIHNka21hbmlmZXN0ZGlyID0gb3MucGF0aC5kaXJuYW1lKGQuZ2V0VmFyKCJTREtfSE9TVF9NQU5JRkVTVCIsIFRydWUpKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZGttYW5pZmVzdGRpcik6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZGttYW5pZmVzdGRpcikKKyAgICB3aXRoIG9wZW4oZC5nZXRWYXIoJ1NES19IT1NUX01BTklGRVNUJywgVHJ1ZSksICd3JykgYXMgb3V0cHV0OgorICAgICAgICBvdXRwdXQud3JpdGUoc2RrX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzKGQsIEZhbHNlLCAndmVyJykpCit9CisKK1BPUFVMQVRFX1NES19QT1NUX1RBUkdFVF9DT01NQU5EX2FwcGVuZCA9ICIgd3JpdGVfdGFyZ2V0X3Nka19tYW5pZmVzdCA7ICIKK1BPUFVMQVRFX1NES19QT1NUX0hPU1RfQ09NTUFORF9hcHBlbmQgPSAiIHdyaXRlX2hvc3Rfc2RrX21hbmlmZXN0OyAiCisKKyMgU29tZSBhcmNocyBvdmVycmlkZSB0aGlzLCB3ZSBuZWVkIHRoZSBuYXRpdmVzZGsgdmVyc2lvbgorIyB0dXJucyBvdXQgdGhpcyBpcyBoYXJkIHRvIGdldCBmcm9tIHRoZSBkYXRhc3RvcmUgZHVlIHRvIFRSQU5TTEFURURfVEFSR0VUX0FSQ0gKKyMgbWFuaXB1bGF0aW9uLgorU0RLX09MREVTVF9LRVJORUwgPSAiMi42LjMyIgorCitmYWtlcm9vdCBweXRob24gZG9fcG9wdWxhdGVfc2RrKCkgeworICAgIGZyb20gb2Uuc2RrIGltcG9ydCBwb3B1bGF0ZV9zZGsKKyAgICBmcm9tIG9lLm1hbmlmZXN0IGltcG9ydCBjcmVhdGVfbWFuaWZlc3QsIE1hbmlmZXN0CisKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgcnVudGltZV9tYXBwaW5nX3JlbmFtZSgiVE9PTENIQUlOX1RBUkdFVF9UQVNLIiwgcG4sIGQpCisgICAgcnVudGltZV9tYXBwaW5nX3JlbmFtZSgiVE9PTENIQUlOX1RBUkdFVF9UQVNLX0FUVEVNUFRPTkxZIiwgcG4sIGQpCisKKyAgICBsZCA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIGxkLnNldFZhcigiUEtHREFUQV9ESVIiLCAiJHtTVEFHSU5HX0RJUn0vJHtTREtfQVJDSH0tJHtTREtQS0dTVUZGSVh9JHtTREtfVkVORE9SfS0ke1NES19PU30vcGtnZGF0YSIpCisgICAgcnVudGltZV9tYXBwaW5nX3JlbmFtZSgiVE9PTENIQUlOX0hPU1RfVEFTSyIsIHBuLCBsZCkKKyAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJUT09MQ0hBSU5fSE9TVF9UQVNLX0FUVEVNUFRPTkxZIiwgcG4sIGxkKQorICAgIGQuc2V0VmFyKCJUT09MQ0hBSU5fSE9TVF9UQVNLIiwgbGQuZ2V0VmFyKCJUT09MQ0hBSU5fSE9TVF9UQVNLIiwgVHJ1ZSkpCisgICAgZC5zZXRWYXIoIlRPT0xDSEFJTl9IT1NUX1RBU0tfQVRURU1QVE9OTFkiLCBsZC5nZXRWYXIoIlRPT0xDSEFJTl9IT1NUX1RBU0tfQVRURU1QVE9OTFkiLCBUcnVlKSkKKyAgICAKKyAgICAjIGNyZWF0ZSB0YXJnZXQvaG9zdCBTREsgbWFuaWZlc3RzCisgICAgY3JlYXRlX21hbmlmZXN0KGQsIG1hbmlmZXN0X2Rpcj1kLmdldFZhcignU0RLX0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdF90eXBlPU1hbmlmZXN0Lk1BTklGRVNUX1RZUEVfU0RLX0hPU1QpCisgICAgY3JlYXRlX21hbmlmZXN0KGQsIG1hbmlmZXN0X2Rpcj1kLmdldFZhcignU0RLX0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdF90eXBlPU1hbmlmZXN0Lk1BTklGRVNUX1RZUEVfU0RLX1RBUkdFVCkKKworICAgIHBvcHVsYXRlX3NkayhkKQorCisgICAgIyBQcm9jZXNzIERFRkFVTFRUVU5FCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJjcmVhdGVfc2RrX2ZpbGVzIiwgZCkKKworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygidGFyX3NkayIsIGQpCisKKyAgICBzZGtfcGFja2FnaW5nX2Z1bmMgPSBkLmdldFZhcigiU0RLX1BBQ0tBR0lOR19GVU5DIiwgVHJ1ZSkgb3IgIiIKKyAgICBpZiBzZGtfcGFja2FnaW5nX2Z1bmMuc3RyaXAoKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGQuZ2V0VmFyKCJTREtfUEFDS0FHSU5HX0ZVTkMiLCBUcnVlKSwgZCkKK30KKworZmFrZXJvb3QgY3JlYXRlX3Nka19maWxlcygpIHsKKwljcCAke0NPUkVCQVNFfS9zY3JpcHRzL3JlbG9jYXRlX3Nkay5weSAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vCisKKwkjIFJlcGxhY2UgdGhlICMjREVGQVVMVF9JTlNUQUxMX0RJUiMjIHdpdGggdGhlIGNvcnJlY3QgcGF0dGVybi4KKwkjIEVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgbGlrZSAnKycgYW5kICcuJyBpbiB0aGUgU0RLUEFUSAorCWVzY2FwZWRfc2RrcGF0aD0kKGVjaG8gJHtTREtQQVRIfSB8c2VkIC1lICJzOltcK1wuXTpcXFxcXFxcXFwwOmciKQorCXNlZCAtaSAtZSAiczojI0RFRkFVTFRfSU5TVEFMTF9ESVIjIzokZXNjYXBlZF9zZGtwYXRoOiIgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L3JlbG9jYXRlX3Nkay5weQorfQorCitTREtUQVJPUFRTID0gIi0tb3duZXI9cm9vdCAtLWdyb3VwPXJvb3QiCisKK2Zha2Vyb290IHRhcl9zZGsoKSB7CisJIyBQYWNrYWdlIGl0IHVwCisJbWtkaXIgLXAgJHtTREtfREVQTE9ZfQorCWNkICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfQorCXRhciAke1NES1RBUk9QVFN9IC1jZiAtIC4gfCBwYnppcDIgPiAke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnRhci5iejIKK30KKworZmFrZXJvb3QgY3JlYXRlX3NoYXIoKSB7CisJIyBjb3B5IGluIHRoZSB0ZW1wbGF0ZSBzaGFyIGV4dHJhY3RvciBzY3JpcHQKKwljcCAke0NPUkVCQVNFfS9tZXRhL2ZpbGVzL3Rvb2xjaGFpbi1zaGFyLWV4dHJhY3Quc2ggJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS5zaAorCisJcm0gLWYgJHtUfS9wcmVfaW5zdGFsbF9jb21tYW5kICR7VH0vcG9zdF9pbnN0YWxsX2NvbW1hbmQKKworCWlmIFsgJHtTREtfUkVMT0NBVEVfQUZURVJfSU5TVEFMTH0gLWVxIDEgXSA7IHRoZW4KKwkJY3AgJHtDT1JFQkFTRX0vbWV0YS9maWxlcy90b29sY2hhaW4tc2hhci1yZWxvY2F0ZS5zaCAke1R9L3Bvc3RfaW5zdGFsbF9jb21tYW5kCisJZmkKKwljYXQgPDwgIkVPRiIgPj4gJHtUfS9wcmVfaW5zdGFsbF9jb21tYW5kCiske1NES19QUkVfSU5TVEFMTF9DT01NQU5EfQorRU9GCisKKwljYXQgPDwgIkVPRiIgPj4gJHtUfS9wb3N0X2luc3RhbGxfY29tbWFuZAorJHtTREtfUE9TVF9JTlNUQUxMX0NPTU1BTkR9CitFT0YKKwlzZWQgLWkgLWUgJy9AU0RLX1BSRV9JTlNUQUxMX0NPTU1BTkRAL3IgJHtUfS9wcmVfaW5zdGFsbF9jb21tYW5kJyBcCisJCS1lICcvQFNES19QT1NUX0lOU1RBTExfQ09NTUFOREAvciAke1R9L3Bvc3RfaW5zdGFsbF9jb21tYW5kJyBcCisJCSR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uc2gKKworCSMgc3Vic3RpdHV0ZSB2YXJpYWJsZXMKKwlzZWQgLWkgLWUgJ3MjQFNES19BUkNIQCMke1NES19BUkNIfSNnJyBcCisJCS1lICdzI0BTREtQQVRIQCMke1NES1BBVEh9I2cnIFwKKwkJLWUgJ3MjQFNES0VYVFBBVEhAIyR7U0RLRVhUUEFUSH0jZycgXAorCQktZSAncyNAT0xERVNUX0tFUk5FTEAjJHtTREtfT0xERVNUX0tFUk5FTH0jZycgXAorCQktZSAncyNAUkVBTF9NVUxUSU1BQ0hfVEFSR0VUX1NZU0AjJHtSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTfSNnJyBcCisJCS1lICdzI0BTREtfVElUTEVAIyR7U0RLX1RJVExFfSNnJyBcCisJCS1lICdzI0BTREtfVkVSU0lPTkAjJHtTREtfVkVSU0lPTn0jZycgXAorCQktZSAnL0BTREtfUFJFX0lOU1RBTExfQ09NTUFOREAvZCcgXAorCQktZSAnL0BTREtfUE9TVF9JTlNUQUxMX0NPTU1BTkRAL2QnIFwKKwkJJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS5zaAorCisJIyBhZGQgZXhlY3V0aW9uIHBlcm1pc3Npb24KKwljaG1vZCAreCAke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnNoCisKKwkjIGFwcGVuZCB0aGUgU0RLIHRhcmJhbGwKKwljYXQgJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS50YXIuYnoyID4+ICR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uc2gKKworCSMgZGVsZXRlIHRoZSBvbGQgdGFyYmFsbCwgd2UgZG9uJ3QgbmVlZCBpdCBhbnltb3JlCisJcm0gJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS50YXIuYnoyCit9CisKK3BvcHVsYXRlX3Nka19sb2dfY2hlY2soKSB7CisJZm9yIHRhcmdldCBpbiAkKgorCWRvCisJCWxmX3BhdGg9ImBkaXJuYW1lICR7QkJfTE9HRklMRX1gL2xvZy5kb18kdGFyZ2V0LiR7UElEfSIKKworCQllY2hvICJsb2dfY2hlY2s6IFVzaW5nICRsZl9wYXRoIGFzIGxvZ2ZpbGUiCisKKwkJaWYgdGVzdCAtZSAiJGxmX3BhdGgiCisJCXRoZW4KKwkJCSR7SU1BR0VfUEtHVFlQRX1fbG9nX2NoZWNrICR0YXJnZXQgJGxmX3BhdGgKKwkJZWxzZQorCQkJZWNobyAiQ2Fubm90IGZpbmQgbG9nZmlsZSBbJGxmX3BhdGhdIgorCQlmaQorCQllY2hvICJMb2dmaWxlIGlzIGNsZWFuIgorCWRvbmUKK30KKworZG9fcG9wdWxhdGVfc2RrW2RpcnNdID0gIiR7VE9QRElSfSIKK2RvX3BvcHVsYXRlX3Nka1tkZXBlbmRzXSArPSAiJHtAJyAnLmpvaW4oW3ggKyAnOmRvX3BvcHVsYXRlX3N5c3Jvb3QnIGZvciB4IGluIGQuZ2V0VmFyKCdTREtfREVQRU5EUycsIFRydWUpLnNwbGl0KCldKX0gICR7QGQuZ2V0VmFyRmxhZygnZG9fcm9vdGZzJywgJ2RlcGVuZHMnLCBGYWxzZSl9IgorZG9fcG9wdWxhdGVfc2RrW3JkZXBlbmRzXSA9ICIke0AnICcuam9pbihbeCArICc6ZG9fcG9wdWxhdGVfc3lzcm9vdCcgZm9yIHggaW4gZC5nZXRWYXIoJ1NES19SREVQRU5EUycsIFRydWUpLnNwbGl0KCldKX0iCitkb19wb3B1bGF0ZV9zZGtbcmVjcmRlcHRhc2tdICs9ICJkb19wYWNrYWdlZGF0YSBkb19wYWNrYWdlX3dyaXRlX3JwbSBkb19wYWNrYWdlX3dyaXRlX2lwayBkb19wYWNrYWdlX3dyaXRlX2RlYiIKK2FkZHRhc2sgcG9wdWxhdGVfc2RrCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wb3B1bGF0ZV9zZGtfZXh0LmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wb3B1bGF0ZV9zZGtfZXh0LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVmODgzOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nka19leHQuYmJjbGFzcwpAQCAtMCwwICsxLDI3NSBAQAorIyBFeHRlbnNpYmxlIFNESworCitpbmhlcml0IHBvcHVsYXRlX3Nka19iYXNlCisKKyMgTk9URTogbm9ybWFsbHkgeW91IGNhbm5vdCB1c2UgdGFzayBvdmVycmlkZXMgZm9yIHRoaXMga2luZCBvZiB0aGluZyAtIHRoaXMKKyMgb25seSB3b3JrcyBiZWNhdXNlIG9mIGdldF9zZGtfZXh0X3JkZXBlbmRzKCkKKworVE9PTENIQUlOX0hPU1RfVEFTS190YXNrLXBvcHVsYXRlLXNkay1leHQgPSAiIFwKKyAgICBtZXRhLWVudmlyb25tZW50LWV4dHNkay0ke01BQ0hJTkV9IFwKKyAgICAiCisKK1RPT0xDSEFJTl9UQVJHRVRfVEFTS190YXNrLXBvcHVsYXRlLXNkay1leHQgPSAiIgorCitTREtfUkRFUEVORFNfYXBwZW5kX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICIgJHtTREtfVEFSR0VUU30iCisKK1NES19SRUxPQ0FURV9BRlRFUl9JTlNUQUxMX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICIwIgorCitTREtfTE9DQUxfQ09ORl9XSElURUxJU1QgPz0gIiIKK1NES19MT0NBTF9DT05GX0JMQUNLTElTVCA/PSAiQ09ORl9WRVJTSU9OIEJCX05VTUJFUl9USFJFQURTIFBBUkFMTEVMX01BS0UgUFJTRVJWX0hPU1QiCitTREtfSU5IRVJJVF9CTEFDS0xJU1QgPz0gImJ1aWxkaGlzdG9yeSBpY2VjYyIKK1NES19VUERBVEVfVVJMID89ICIiCisKK1NES19UQVJHRVRTID89ICIke1BOfSIKK09FX0lOSVRfRU5WX1NDUklQVCA/PSAib2UtaW5pdC1idWlsZC1lbnYiCisKKyMgVGhlIGZpbGVzIGZyb20gQ09SRUJBU0UgdGhhdCB5b3Ugd2FudCBwcmVzZXJ2ZWQgaW4gdGhlIENPUkVCQVNFIGNvcGllZAorIyBpbnRvIHRoZSBzZGsuIFRoaXMgYWxsb3dzIHNvbWVvbmUgdG8gaGF2ZSB0aGVpciBvd24gc2V0dXAgc2NyaXB0cyBpbgorIyBDT1JFQkFTRSBiZSBwcmVzZXJ2ZWQgYXMgd2VsbCBhcyB1bnRyYWNrZWQgZmlsZXMuCitDT1JFQkFTRV9GSUxFUyA/PSAiIFwKKyAgICBvZS1pbml0LWJ1aWxkLWVudiBcCisgICAgb2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzIFwKKyAgICBzY3JpcHRzIFwKKyAgICBMSUNFTlNFIFwKKyAgICAudGVtcGxhdGVjb25mIFwKKyIKKworU0RLX0RJUl90YXNrLXBvcHVsYXRlLXNkay1leHQgPSAiJHtXT1JLRElSfS9zZGstZXh0IgorQl90YXNrLXBvcHVsYXRlLXNkay1leHQgPSAiJHtTREtfRElSfSIKK1RPT0xDSEFJTl9PVVRQVVROQU1FX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICIke1NES19OQU1FfS10b29sY2hhaW4tZXh0LSR7U0RLX1ZFUlNJT059IgorCitTREtfVElUTEVfdGFzay1wb3B1bGF0ZS1zZGstZXh0ID0gIiR7QGQuZ2V0VmFyKCdESVNUUk9fTkFNRScsIFRydWUpIG9yIGQuZ2V0VmFyKCdESVNUUk8nLCBUcnVlKX0gRXh0ZW5zaWJsZSBTREsiCisKK3B5dGhvbiBjb3B5X2J1aWxkc3lzdGVtICgpIHsKKyAgICBpbXBvcnQgcmUKKyAgICBpbXBvcnQgb2UuY29weV9idWlsZHN5c3RlbQorCisgICAgb2VfaW5pdF9lbnZfc2NyaXB0ID0gZC5nZXRWYXIoJ09FX0lOSVRfRU5WX1NDUklQVCcsIFRydWUpCisKKyAgICBjb25mX2JicGF0aCA9ICcnCisgICAgY29uZl9pbml0cGF0aCA9ICcnCisgICAgY29yZV9tZXRhX3N1YmRpciA9ICcnCisKKyAgICAjIENvcHkgaW4gYWxsIG1ldGFkYXRhIGxheWVycyArIGJpdGJha2UgKGFzIHJlcG9zaXRvcmllcykKKyAgICBidWlsZHN5c3RlbSA9IG9lLmNvcHlfYnVpbGRzeXN0ZW0uQnVpbGRTeXN0ZW0oZCkKKyAgICBiYXNlb3V0cGF0aCA9IGQuZ2V0VmFyKCdTREtfT1VUUFVUJywgVHJ1ZSkgKyAnLycgKyBkLmdldFZhcignU0RLUEFUSCcsIFRydWUpCisgICAgbGF5ZXJzX2NvcGllZCA9IGJ1aWxkc3lzdGVtLmNvcHlfYml0YmFrZV9hbmRfbGF5ZXJzKGJhc2VvdXRwYXRoICsgJy9sYXllcnMnKQorCisgICAgc2RrYmJsYXllcnMgPSBbXQorICAgIGNvcmViYXNlID0gb3MucGF0aC5iYXNlbmFtZShkLmdldFZhcignQ09SRUJBU0UnLCBUcnVlKSkKKyAgICBmb3IgbGF5ZXIgaW4gbGF5ZXJzX2NvcGllZDoKKyAgICAgICAgaWYgY29yZWJhc2UgPT0gb3MucGF0aC5iYXNlbmFtZShsYXllcik6CisgICAgICAgICAgICBjb25mX2JicGF0aCA9IG9zLnBhdGguam9pbignbGF5ZXJzJywgbGF5ZXIsICdiaXRiYWtlJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNka2JibGF5ZXJzLmFwcGVuZChsYXllcikKKworICAgIGZvciBwYXRoIGluIG9zLmxpc3RkaXIoYmFzZW91dHBhdGggKyAnL2xheWVycycpOgorICAgICAgICByZWxwYXRoID0gb3MucGF0aC5qb2luKCdsYXllcnMnLCBwYXRoLCBvZV9pbml0X2Vudl9zY3JpcHQpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihiYXNlb3V0cGF0aCwgcmVscGF0aCkpOgorICAgICAgICAgICAgY29uZl9pbml0cGF0aCA9IHJlbHBhdGgKKworICAgICAgICByZWxwYXRoID0gb3MucGF0aC5qb2luKCdsYXllcnMnLCBwYXRoLCAnc2NyaXB0cycsICdkZXZ0b29sJykKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGJhc2VvdXRwYXRoLCByZWxwYXRoKSk6CisgICAgICAgICAgICBzY3JpcHRyZWxwYXRoID0gb3MucGF0aC5kaXJuYW1lKHJlbHBhdGgpCisKKyAgICAgICAgcmVscGF0aCA9IG9zLnBhdGguam9pbignbGF5ZXJzJywgcGF0aCwgJ21ldGEnKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oYmFzZW91dHBhdGgsIHJlbHBhdGgsICdsaWInLCAnb2UnKSk6CisgICAgICAgICAgICBjb3JlX21ldGFfc3ViZGlyID0gcmVscGF0aAorCisgICAgZC5zZXRWYXIoJ29lX2luaXRfYnVpbGRfZW52X3BhdGgnLCBjb25mX2luaXRwYXRoKQorICAgIGQuc2V0VmFyKCdzY3JpcHRyZWxwYXRoJywgc2NyaXB0cmVscGF0aCkKKworICAgICMgV3JpdGUgb3V0IGNvbmZpZyBmaWxlIGZvciBkZXZ0b29sCisgICAgaW1wb3J0IENvbmZpZ1BhcnNlcgorICAgIGNvbmZpZyA9IENvbmZpZ1BhcnNlci5TYWZlQ29uZmlnUGFyc2VyKCkKKyAgICBjb25maWcuYWRkX3NlY3Rpb24oJ0dlbmVyYWwnKQorICAgIGNvbmZpZy5zZXQoJ0dlbmVyYWwnLCAnYml0YmFrZV9zdWJkaXInLCBjb25mX2JicGF0aCkKKyAgICBjb25maWcuc2V0KCdHZW5lcmFsJywgJ2luaXRfcGF0aCcsIGNvbmZfaW5pdHBhdGgpCisgICAgY29uZmlnLnNldCgnR2VuZXJhbCcsICdjb3JlX21ldGFfc3ViZGlyJywgY29yZV9tZXRhX3N1YmRpcikKKyAgICBjb25maWcuYWRkX3NlY3Rpb24oJ1NESycpCisgICAgY29uZmlnLnNldCgnU0RLJywgJ3Nka190YXJnZXRzJywgZC5nZXRWYXIoJ1NES19UQVJHRVRTJywgVHJ1ZSkpCisgICAgdXBkYXRldXJsID0gZC5nZXRWYXIoJ1NES19VUERBVEVfVVJMJywgVHJ1ZSkKKyAgICBpZiB1cGRhdGV1cmw6CisgICAgICAgIGNvbmZpZy5zZXQoJ1NESycsICd1cGRhdGVzZXJ2ZXInLCB1cGRhdGV1cmwpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguam9pbihiYXNlb3V0cGF0aCwgJ2NvbmYnKSkKKyAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGJhc2VvdXRwYXRoLCAnY29uZicsICdkZXZ0b29sLmNvbmYnKSwgJ3cnKSBhcyBmOgorICAgICAgICBjb25maWcud3JpdGUoZikKKworICAgICMgQ3JlYXRlIGEgbGF5ZXIgZm9yIG5ldyByZWNpcGVzIC8gYXBwZW5kcworICAgIGJicGF0aCA9IGQuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKQorICAgIGJiLnByb2Nlc3MucnVuKFsnZGV2dG9vbCcsICctLWJicGF0aCcsIGJicGF0aCwgJy0tYmFzZXBhdGgnLCBiYXNlb3V0cGF0aCwgJ2NyZWF0ZS13b3Jrc3BhY2UnLCAnLS1jcmVhdGUtb25seScsIG9zLnBhdGguam9pbihiYXNlb3V0cGF0aCwgJ3dvcmtzcGFjZScpXSkKKworICAgICMgQ3JlYXRlIGJibGF5ZXJzLmNvbmYKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoYmFzZW91dHBhdGggKyAnL2NvbmYnKQorICAgIHdpdGggb3BlbihiYXNlb3V0cGF0aCArICcvY29uZi9iYmxheWVycy5jb25mJywgJ3cnKSBhcyBmOgorICAgICAgICBmLndyaXRlKCcjIFdBUk5JTkc6IHRoaXMgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBhbmQgaW5cbicpCisgICAgICAgIGYud3JpdGUoJyMgbW9zdCBjYXNlcyBzaG91bGQgbm90IGJlIGVkaXRlZC4gSWYgeW91IG5lZWQgbW9yZSBmbGV4aWJpbGl0eSB0aGFuXG4nKQorICAgICAgICBmLndyaXRlKCcjIHRoaXMgY29uZmlndXJhdGlvbiBwcm92aWRlcywgaXQgaXMgc3Ryb25nbHkgc3VnZ2VzdGVkIHRoYXQgeW91IHNldFxuJykKKyAgICAgICAgZi53cml0ZSgnIyB1cCBhIHByb3BlciBpbnN0YW5jZSBvZiB0aGUgZnVsbCBidWlsZCBzeXN0ZW0gYW5kIHVzZSB0aGF0IGluc3RlYWQuXG5cbicpCisKKyAgICAgICAgZi53cml0ZSgnTENPTkZfVkVSU0lPTiA9ICIlcyJcblxuJyAlIGQuZ2V0VmFyKCdMQ09ORl9WRVJTSU9OJywgRmFsc2UpKQorICAgICAgICBmLndyaXRlKCdCQlBBVEggPSAiJCcgKyAne1RPUERJUn0iXG4nKQorICAgICAgICBmLndyaXRlKCdTREtCQVNFTUVUQVBBVEggPSAiJCcgKyAne1RPUERJUn0iXG4nKQorICAgICAgICBmLndyaXRlKCdCQkxBWUVSUyA6PSAiIFxcXG4nKQorICAgICAgICBmb3IgbGF5ZXJyZWxwYXRoIGluIHNka2JibGF5ZXJzOgorICAgICAgICAgICAgZi53cml0ZSgnICAgICQnICsgJ3tTREtCQVNFTUVUQVBBVEh9L2xheWVycy8lcyBcXFxuJyAlIGxheWVycmVscGF0aCkKKyAgICAgICAgZi53cml0ZSgnICAgICQnICsgJ3tTREtCQVNFTUVUQVBBVEh9L3dvcmtzcGFjZSBcXFxuJykKKyAgICAgICAgZi53cml0ZSgnICAgICJcbicpCisKKyAgICAjIENyZWF0ZSBsb2NhbC5jb25mCisgICAgbG9jYWxfY29uZl93aGl0ZWxpc3QgPSAoZC5nZXRWYXIoJ1NES19MT0NBTF9DT05GX1dISVRFTElTVCcsIFRydWUpIG9yICcnKS5zcGxpdCgpCisgICAgbG9jYWxfY29uZl9ibGFja2xpc3QgPSAoZC5nZXRWYXIoJ1NES19MT0NBTF9DT05GX0JMQUNLTElTVCcsIFRydWUpIG9yICcnKS5zcGxpdCgpCisgICAgZGVmIGhhbmRsZV92YXIodmFybmFtZSwgb3JpZ3ZhbHVlLCBvcCwgbmV3bGluZXMpOgorICAgICAgICBpZiB2YXJuYW1lIGluIGxvY2FsX2NvbmZfYmxhY2tsaXN0IG9yIChvcmlndmFsdWUuc3RyaXAoKS5zdGFydHN3aXRoKCcvJykgYW5kIG5vdCB2YXJuYW1lIGluIGxvY2FsX2NvbmZfd2hpdGVsaXN0KToKKyAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZCgnIyBSZW1vdmVkIG9yaWdpbmFsIHNldHRpbmcgb2YgJXNcbicgJSB2YXJuYW1lKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUsIG9wLCAwLCBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gb3JpZ3ZhbHVlLCBvcCwgMCwgVHJ1ZQorICAgIHZhcmxpc3QgPSBbJ1teIz0rIF0qJ10KKyAgICBidWlsZGRpciA9IGQuZ2V0VmFyKCdUT1BESVInLCBUcnVlKQorICAgIHdpdGggb3BlbihidWlsZGRpciArICcvY29uZi9sb2NhbC5jb25mJywgJ3InKSBhcyBmOgorICAgICAgICBvbGRsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAodXBkYXRlZCwgbmV3bGluZXMpID0gYmIudXRpbHMuZWRpdF9tZXRhZGF0YShvbGRsaW5lcywgdmFybGlzdCwgaGFuZGxlX3ZhcikKKworICAgIHdpdGggb3BlbihiYXNlb3V0cGF0aCArICcvY29uZi9sb2NhbC5jb25mJywgJ3cnKSBhcyBmOgorICAgICAgICBmLndyaXRlKCcjIFdBUk5JTkc6IHRoaXMgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBhbmQgaW5cbicpCisgICAgICAgIGYud3JpdGUoJyMgbW9zdCBjYXNlcyBzaG91bGQgbm90IGJlIGVkaXRlZC4gSWYgeW91IG5lZWQgbW9yZSBmbGV4aWJpbGl0eSB0aGFuXG4nKQorICAgICAgICBmLndyaXRlKCcjIHRoaXMgY29uZmlndXJhdGlvbiBwcm92aWRlcywgaXQgaXMgc3Ryb25nbHkgc3VnZ2VzdGVkIHRoYXQgeW91IHNldFxuJykKKyAgICAgICAgZi53cml0ZSgnIyB1cCBhIHByb3BlciBpbnN0YW5jZSBvZiB0aGUgZnVsbCBidWlsZCBzeXN0ZW0gYW5kIHVzZSB0aGF0IGluc3RlYWQuXG5cbicpCisgICAgICAgIGZvciBsaW5lIGluIG5ld2xpbmVzOgorICAgICAgICAgICAgaWYgbGluZS5zdHJpcCgpIGFuZCBub3QgbGluZS5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICAgICAgZi53cml0ZShsaW5lKQorCisgICAgICAgIGYud3JpdGUoJ0lOSEVSSVQgKz0gIiVzIlxuXG4nICUgJ3VuaW5hdGl2ZScpCisgICAgICAgIGYud3JpdGUoJ0NPTkZfVkVSU0lPTiA9ICIlcyJcblxuJyAlIGQuZ2V0VmFyKCdDT05GX1ZFUlNJT04nLCBGYWxzZSkpCisKKyAgICAgICAgIyBTb21lIGNsYXNzZXMgYXJlIG5vdCBzdWl0YWJsZSBmb3IgU0RLLCByZW1vdmUgdGhlbSBmcm9tIElOSEVSSVQKKyAgICAgICAgZi53cml0ZSgnSU5IRVJJVF9yZW1vdmUgPSAiJXMiXG4nICUgZC5nZXRWYXIoJ1NES19JTkhFUklUX0JMQUNLTElTVCcpKQorCisgICAgICAgICMgQnlwYXNzIHRoZSBkZWZhdWx0IGNvbm5lY3Rpdml0eSBjaGVjayBpZiBhbnkKKyAgICAgICAgZi53cml0ZSgnQ09OTkVDVElWSVRZX0NIRUNLX1VSSVMgPSAiIlxuXG4nKQorCisgICAgICAgICMgQW5vdGhlciBoYWNrLCBidXQgd2Ugd2FudCB0aGUgbmF0aXZlIHBhcnQgb2Ygc3N0YXRlIHRvIGJlIGtlcHQgdGhlIHNhbWUKKyAgICAgICAgIyByZWdhcmRsZXNzIG9mIHRoZSBob3N0IGRpc3RybworICAgICAgICBmaXhlZGxzYnN0cmluZyA9ICdTREstRml4ZWQnCisgICAgICAgIGYud3JpdGUoJ05BVElWRUxTQlNUUklOR19mb3JjZXZhcmlhYmxlID0gIiVzIlxuXG4nICUgZml4ZWRsc2JzdHJpbmcpCisKKyAgICAgICAgIyBFbnN1cmUgbG9ja2VkIHNzdGF0ZSBjYWNoZSBvYmplY3RzIGFyZSByZS11c2VkIHdpdGhvdXQgZXJyb3IKKyAgICAgICAgZi53cml0ZSgnU0lHR0VOX0xPQ0tFRFNJR1NfQ0hFQ0tfTEVWRUwgPSAid2FybiJcblxuJykKKworICAgICAgICBmLndyaXRlKCdyZXF1aXJlIGNvbmYvbG9ja2VkLXNpZ3MuaW5jXG4nKQorICAgICAgICBmLndyaXRlKCdyZXF1aXJlIGNvbmYvd29yay1jb25maWcuaW5jXG4nKQorCisgICAgc2lnZmlsZSA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkgKyAnL2xvY2tlZC1zaWdzLmluYycKKyAgICBvZS5jb3B5X2J1aWxkc3lzdGVtLmdlbmVyYXRlX2xvY2tlZF9zaWdzKHNpZ2ZpbGUsIGQpCisKKyAgICAjIEZpbHRlciB0aGUgbG9ja2VkIHNpZ25hdHVyZXMgZmlsZSB0byBqdXN0IHRoZSBzc3RhdGUgdGFza3Mgd2UgYXJlIGludGVyZXN0ZWQgaW4KKyAgICBhbGxvd2VkX3Rhc2tzID0gWydkb19wb3B1bGF0ZV9saWMnLCAnZG9fcG9wdWxhdGVfc3lzcm9vdCcsICdkb19wYWNrYWdlZGF0YScsICdkb19wYWNrYWdlX3dyaXRlX2lwaycsICdkb19wYWNrYWdlX3dyaXRlX3JwbScsICdkb19wYWNrYWdlX3dyaXRlX2RlYicsICdkb19wYWNrYWdlX3FhJywgJ2RvX2RlcGxveSddCisgICAgZXhjbHVkZWRfdGFyZ2V0cyA9IGQuZ2V0VmFyKCdTREtfVEFSR0VUUycsIFRydWUpCisgICAgbG9ja2Vkc2lnc19wcnVuZWQgPSBiYXNlb3V0cGF0aCArICcvY29uZi9sb2NrZWQtc2lncy5pbmMnCisgICAgb2UuY29weV9idWlsZHN5c3RlbS5wcnVuZV9sb2NrZWRzaWdzKGFsbG93ZWRfdGFza3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVkX3RhcmdldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlZHNpZ3NfcHJ1bmVkKQorCisgICAgc3N0YXRlX291dCA9IGJhc2VvdXRwYXRoICsgJy9zc3RhdGUtY2FjaGUnCisgICAgYmIudXRpbHMucmVtb3ZlKHNzdGF0ZV9vdXQsIFRydWUpCisgICAgb2UuY29weV9idWlsZHN5c3RlbS5jcmVhdGVfbG9ja2VkX3NzdGF0ZV9jYWNoZShsb2NrZWRzaWdzX3BydW5lZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdTU1RBVEVfRElSJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc3RhdGVfb3V0LCBkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWRsc2JzdHJpbmcpCisKKyAgICAjIENyZWF0ZSBhIGR1bW15IGNvbmZpZyBmaWxlIGZvciBhZGRpdGlvbmFsIHNldHRpbmdzCisgICAgd2l0aCBvcGVuKGJhc2VvdXRwYXRoICsgJy9jb25mL3dvcmstY29uZmlnLmluYycsICd3JykgYXMgZjoKKyAgICAgICAgcGFzcworfQorCitkZWYgZXh0c2RrX2dldF9idWlsZHRvb2xzX2ZpbGVuYW1lKGQpOgorICAgICMgVGhpcyBpcyBzb21ld2hhdCBvZiBhIGhhY2sKKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdQTicsICdidWlsZHRvb2xzLXRhcmJhbGwnKQorICAgIHJldHVybiBsb2NhbGRhdGEuZXhwYW5kKCcke1NES19OQU1FfS1idWlsZHRvb2xzLW5hdGl2ZXNkay1zdGFuZGFsb25lLSouc2gnKQorCitpbnN0YWxsX3Rvb2xzKCkgeworCWluc3RhbGwgLWQgJHtTREtfT1VUUFVUfS8ke1NES1BBVEhOQVRJVkV9JHtiaW5kaXJfbmF0aXZlc2RrfQorCWxuciAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vJHtzY3JpcHRyZWxwYXRofS9kZXZ0b29sICR7U0RLX09VVFBVVH0vJHtTREtQQVRITkFUSVZFfSR7YmluZGlyX25hdGl2ZXNka30vZGV2dG9vbAorCWxuciAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vJHtzY3JpcHRyZWxwYXRofS9yZWNpcGV0b29sICR7U0RLX09VVFBVVH0vJHtTREtQQVRITkFUSVZFfSR7YmluZGlyX25hdGl2ZXNka30vcmVjaXBldG9vbAorCXRvdWNoICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS8uZGV2dG9vbGJhc2UKKworCSMgZmluZCBsYXRlc3QgYnVpbGR0b29scy10YXJiYWxsIGFuZCBpbnN0YWxsIGl0CisJYnVpbGR0b29sc19wYXRoPWBscyAtdDEgJHtTREtfREVQTE9ZfS8ke0BleHRzZGtfZ2V0X2J1aWxkdG9vbHNfZmlsZW5hbWUoZCl9IHwgaGVhZCAtbjFgCisJaW5zdGFsbCAkYnVpbGR0b29sc19wYXRoICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfQorCisJaW5zdGFsbCAke1NES19ERVBMT1l9LyR7QlVJTERfQVJDSH0tbmF0aXZlc2RrLWxpYmMudGFyLmJ6MiAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0KK30KKworIyBTaW5jZSBiaXRiYWtlIHdvbid0IHJ1biBhcyByb290IGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byB0cnkgYW5kIGluc3RhbGwKKyMgdGhlIGV4dGVuc2libGUgc2RrIGFzIHJvb3QuCitzZGtfZXh0X3ByZWluc3QoKSB7CisJaWYgWyAiYGlkIC11YCIgPSAiMCIgXTsgdGhlbgorCQllY2hvICJFUlJPUjogVGhlIGV4dGVuc2libGUgc2RrIGNhbm5vdCBiZSBpbnN0YWxsZWQgYXMgcm9vdC4iCisJCWV4aXQgMQorCWZpCisJU0RLX0VYVEVOU0lCTEU9IjEiCit9CitTREtfUFJFX0lOU1RBTExfQ09NTUFORF90YXNrLXBvcHVsYXRlLXNkay1leHQgPSAiJHtzZGtfZXh0X3ByZWluc3R9IgorCisjIEZJWE1FIHRoaXMgcHJlcGFyYXRpb24gc2hvdWxkIGJlIGRvbmUgYXMgcGFydCBvZiB0aGUgU0RLIGNvbnN0cnVjdGlvbgorc2RrX2V4dF9wb3N0aW5zdCgpIHsKKwlwcmludGYgIlxuRXh0cmFjdGluZyBidWlsZHRvb2xzLi4uXG4iCisJY2QgJHRhcmdldF9zZGtfZGlyCisJcHJpbnRmICJidWlsZHRvb2xzXG55IiB8IC4vKmJ1aWxkdG9vbHMtbmF0aXZlc2RrLXN0YW5kYWxvbmUqID4gL2Rldi9udWxsCisKKwkjIE1ha2Ugc3VyZSB3aGVuIHRoZSB1c2VyIHNldHMgdXAgdGhlIGVudmlyb25tZW50LCB0aGV5IGFsc28gZ2V0CisJIyB0aGUgYnVpbGR0b29scy10YXJiYWxsIHRvb2xzIGluIHRoZWlyIHBhdGguCisJZWNobyAiLiAkdGFyZ2V0X3Nka19kaXIvYnVpbGR0b29scy9lbnZpcm9ubWVudC1zZXR1cCoiID4+ICR0YXJnZXRfc2RrX2Rpci9lbnZpcm9ubWVudC1zZXR1cCoKKworCSMgQWxsb3cgYml0YmFrZSBlbnZpcm9ubWVudCBzZXR1cCB0byBiZSByYW4gYXMgcGFydCBvZiB0aGlzIHNkay4KKwllY2hvICJleHBvcnQgT0VfU0tJUF9TREtfQ0hFQ0s9MSIgPj4gJHRhcmdldF9zZGtfZGlyL2Vudmlyb25tZW50LXNldHVwKgorCisJIyBBIGJpdCBvZiBhbm90aGVyIGhhY2ssIGJ1dCB3ZSBuZWVkIHRoaXMgaW4gdGhlIHBhdGggb25seSBmb3IgZGV2dG9vbAorCSMgc28gcHV0IGl0IGF0IHRoZSBlbmQgb2YgJFBBVEguCisJZWNobyAiZXhwb3J0IFBBVEg9XCRQQVRIOiR0YXJnZXRfc2RrX2Rpci9zeXNyb290cy8ke1NES19TWVN9LyR7YmluZGlyX25hdGl2ZXNka30iID4+ICR0YXJnZXRfc2RrX2Rpci9lbnZpcm9ubWVudC1zZXR1cCoKKworCSMgRm9yIG5vdyB0aGlzIGlzIHdoZXJlIHVuaW5hdGl2ZS5iYmNsYXNzIGV4cGVjdHMgdGhlIHRhcmJhbGwKKwltdiAqLW5hdGl2ZXNkay1saWJjLnRhci4qICR0YXJnZXRfc2RrX2Rpci9gZGlybmFtZSAke29lX2luaXRfYnVpbGRfZW52X3BhdGh9YAorCisJaWYgWyAiJHByZXBhcmVfYnVpbGRzeXN0ZW0iICE9ICJubyIgXTsgdGhlbgorCSAgICBwcmludGYgIlByZXBhcmluZyBidWlsZCBzeXN0ZW0uLi5cbiIKKwkgICAgIyBkYXNoIHdoaWNoIGlzIC9iaW4vc2ggb24gVWJ1bnR1IHdpbGwgbm90IHByZXNlcnZlIHRoZQorCSAgICAjIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiBmaXJzdCByYW4sIG5vciB3aWxsIGl0IHNldCAkMSB3aGVuCisJICAgICMgc291cmNpbmcgYSBzY3JpcHQuIFRoYXQgaXMgd2h5IHRoaXMgaGFzIHRvIGxvb2sgc28gdWdseS4KKwkgICAgc2ggLWMgIi4gYnVpbGR0b29scy9lbnZpcm9ubWVudC1zZXR1cCogPiBwcmVwYXJpbmdfYnVpbGRfc3lzdGVtLmxvZyAmJiBjZCAkdGFyZ2V0X3Nka19kaXIvYGRpcm5hbWUgJHtvZV9pbml0X2J1aWxkX2Vudl9wYXRofWAgJiYgc2V0ICR0YXJnZXRfc2RrX2RpciAmJiAuICR0YXJnZXRfc2RrX2Rpci8ke29lX2luaXRfYnVpbGRfZW52X3BhdGh9ICR0YXJnZXRfc2RrX2RpciA+PiBwcmVwYXJpbmdfYnVpbGRfc3lzdGVtLmxvZyAmJiBiaXRiYWtlICR7U0RLX1RBUkdFVFN9ID4+IHByZXBhcmluZ19idWlsZF9zeXN0ZW0ubG9nIiB8fCB7IGVjaG8gIlNESyBwcmVwYXJhdGlvbiBmYWlsZWQ6IHNlZSBgcHdkYC9wcmVwYXJpbmdfYnVpbGRfc3lzdGVtLmxvZyIgOyBleGl0IDEgOyB9CisJZmkKKwllY2hvIGRvbmUKK30KKworU0RLX1BPU1RfSU5TVEFMTF9DT01NQU5EX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICIke3Nka19leHRfcG9zdGluc3R9IgorCitTREtfUE9TVFBST0NFU1NfQ09NTUFORF9wcmVwZW5kX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICJjb3B5X2J1aWxkc3lzdGVtOyBpbnN0YWxsX3Rvb2xzOyAiCisKK2Zha2Vyb290IHB5dGhvbiBkb19wb3B1bGF0ZV9zZGtfZXh0KCkgeworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiZG9fcG9wdWxhdGVfc2RrIiwgZCkKK30KKworZGVmIGdldF9zZGtfZXh0X3JkZXBlbmRzKGQpOgorICAgIGxvY2FsZGF0YSA9IGQuY3JlYXRlQ29weSgpCisgICAgbG9jYWxkYXRhLmFwcGVuZFZhcignT1ZFUlJJREVTJywgJzp0YXNrLXBvcHVsYXRlLXNkay1leHQnKQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgIHJldHVybiBsb2NhbGRhdGEuZ2V0VmFyRmxhZygnZG9fcG9wdWxhdGVfc2RrJywgJ3JkZXBlbmRzJywgVHJ1ZSkKKworZG9fcG9wdWxhdGVfc2RrX2V4dFtkaXJzXSA9ICIke0BkLmdldFZhckZsYWcoJ2RvX3BvcHVsYXRlX3NkaycsICdkaXJzJywgRmFsc2UpfSIKK2RvX3BvcHVsYXRlX3Nka19leHRbZGVwZW5kc10gKz0gIiR7QGQuZ2V0VmFyRmxhZygnZG9fcG9wdWxhdGVfc2RrJywgJ2RlcGVuZHMnLCBGYWxzZSl9IgorZG9fcG9wdWxhdGVfc2RrX2V4dFtyZGVwZW5kc10gPSAiJHtAZ2V0X3Nka19leHRfcmRlcGVuZHMoZCl9IgorZG9fcG9wdWxhdGVfc2RrX2V4dFtyZWNyZGVwdGFza10gKz0gIiR7QGQuZ2V0VmFyRmxhZygnZG9fcG9wdWxhdGVfc2RrJywgJ3JlY3JkZXB0YXNrJywgRmFsc2UpfSIKKworCitkb19wb3B1bGF0ZV9zZGtfZXh0W2RlcGVuZHNdICs9ICJidWlsZHRvb2xzLXRhcmJhbGw6ZG9fcG9wdWxhdGVfc2RrIHVuaW5hdGl2ZS10YXJiYWxsOmRvX3BvcHVsYXRlX3NkayIKKworZG9fcG9wdWxhdGVfc2RrX2V4dFtyZGVwZW5kc10gKz0gIiR7QCcgJy5qb2luKFt4ICsgJzpkb19idWlsZCcgZm9yIHggaW4gZC5nZXRWYXIoJ1NES19UQVJHRVRTJywgVHJ1ZSkuc3BsaXQoKV0pfSIKK2RvX3BvcHVsYXRlX3Nka19leHRbcmVjcmRlcHRhc2tdICs9ICJkb19wb3B1bGF0ZV9saWMgZG9fcGFja2FnZV9xYSBkb19wb3B1bGF0ZV9zeXNyb290IGRvX2RlcGxveSIKKworIyBNYWtlIHN1cmUgY29kZXMgY2hhbmdlIGluIGNvcHlfYnVpbGRzeXN0ZW0gY2FuIHJlc3VsdCBpbiByZWJ1aWx0Citkb19wb3B1bGF0ZV9zZGtfZXh0W3ZhcmRlcHNdICs9ICJjb3B5X2J1aWxkc3lzdGVtIgorCithZGR0YXNrIHBvcHVsYXRlX3Nka19leHQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3ByZXhwb3J0LmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wcmV4cG9ydC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMWNiMzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wcmV4cG9ydC5iYmNsYXNzCkBAIC0wLDAgKzEsNTggQEAKK1BSU0VSVl9EVU1QT1BUX1ZFUlNJT04gPSAiJHtQUkFVVE9JTlh9IgorUFJTRVJWX0RVTVBPUFRfUEtHQVJDSCAgPSAiIgorUFJTRVJWX0RVTVBPUFRfQ0hFQ0tTVU0gPSAiIgorUFJTRVJWX0RVTVBPUFRfQ09MID0gIjAiCisKK1BSU0VSVl9EVU1QRElSID8/PSAiJHtMT0dfRElSfS9kYiIKK1BSU0VSVl9EVU1QRklMRSA/Pz0gIiR7UFJTRVJWX0RVTVBESVJ9L3Byc2Vydi5pbmMiCisKK3B5dGhvbiBwcmV4cG9ydF9oYW5kbGVyICgpIHsKKyAgICBpbXBvcnQgYmIuZXZlbnQKKyAgICBpZiBub3QgZS5kYXRhOgorICAgICAgICByZXR1cm4KKworICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuUmVjaXBlUGFyc2VkKToKKyAgICAgICAgaW1wb3J0IG9lLnByc2VydmljZQorICAgICAgICAjZ2V0IGFsbCBQUiB2YWx1ZXMgZm9yIHRoZSBjdXJyZW50IFBSQVVUT0lOWAorICAgICAgICB2ZXIgPSBlLmRhdGEuZ2V0VmFyKCdQUlNFUlZfRFVNUE9QVF9WRVJTSU9OJywgVHJ1ZSkKKyAgICAgICAgdmVyID0gdmVyLnJlcGxhY2UoJyUnLCctJykKKyAgICAgICAgcmV0dmFsID0gb2UucHJzZXJ2aWNlLnByc2Vydl9kdW1wX2RiKGUuZGF0YSkKKyAgICAgICAgaWYgbm90IHJldHZhbDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJwcmV4cG9ydF9oYW5kbGVyOiBleHBvcnQgZmFpbGVkISIpCisgICAgICAgIChtZXRhaW5mbywgZGF0YWluZm8pID0gcmV0dmFsCisgICAgICAgIGlmIG5vdCBkYXRhaW5mbzoKKyAgICAgICAgICAgIGJiLndhcm4oInByZXhwb3J0X2hhbmRsZXI6IE5vIEFVVE9QUiB2YWx1ZXMgZm91bmQgZm9yICVzIiAlIHZlcikKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBvZS5wcnNlcnZpY2UucHJzZXJ2X2V4cG9ydF90b2ZpbGUoZS5kYXRhLCBOb25lLCBkYXRhaW5mbywgRmFsc2UpCisgICAgICAgIGlmICdBVVRPSU5DJyBpbiB2ZXI6CisgICAgICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgICAgIHNyY3B2ID0gIGJiLmZldGNoMi5nZXRfc3JjcmV2KGUuZGF0YSkKKyAgICAgICAgICAgIGJhc2VfdmVyID0gIkFVVE9JTkMtJXMiICUgdmVyWzp2ZXIuZmluZChzcmNwdildCisgICAgICAgICAgICBlLmRhdGEuc2V0VmFyKCdQUlNFUlZfRFVNUE9QVF9WRVJTSU9OJywgYmFzZV92ZXIpCisgICAgICAgICAgICByZXR2YWwgPSBvZS5wcnNlcnZpY2UucHJzZXJ2X2R1bXBfZGIoZS5kYXRhKQorICAgICAgICAgICAgaWYgbm90IHJldHZhbDoKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgicHJleHBvcnRfaGFuZGxlcjogZXhwb3J0IGZhaWxlZCEiKQorICAgICAgICAgICAgKG1ldGFpbmZvLCBkYXRhaW5mbykgPSByZXR2YWwKKyAgICAgICAgICAgIG9lLnByc2VydmljZS5wcnNlcnZfZXhwb3J0X3RvZmlsZShlLmRhdGEsIE5vbmUsIGRhdGFpbmZvLCBGYWxzZSkKKyAgICBlbGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuUGFyc2VTdGFydGVkKToKKyAgICAgICAgaW1wb3J0IGJiLnV0aWxzCisgICAgICAgIGltcG9ydCBvZS5wcnNlcnZpY2UKKyAgICAgICAgb2UucHJzZXJ2aWNlLnByc2Vydl9jaGVja19hdmFpbChlLmRhdGEpCisgICAgICAgICNyZW1vdmUgZHVtcGZpbGUKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKGUuZGF0YS5nZXRWYXIoJ1BSU0VSVl9EVU1QRklMRScsIFRydWUpKQorICAgIGVsaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCk6CisgICAgICAgIGltcG9ydCBvZS5wcnNlcnZpY2UKKyAgICAgICAgI2R1bXAgbWV0YSBpbmZvIG9mIHRhYmxlcworICAgICAgICBkID0gZS5kYXRhLmNyZWF0ZUNvcHkoKQorICAgICAgICBkLnNldFZhcignUFJTRVJWX0RVTVBPUFRfQ09MJywgIjEiKQorICAgICAgICByZXR2YWwgPSBvZS5wcnNlcnZpY2UucHJzZXJ2X2R1bXBfZGIoZCkKKyAgICAgICAgaWYgbm90IHJldHZhbDoKKyAgICAgICAgICAgIGJiLmVycm9yKCJwcmV4cG9ydF9oYW5kbGVyOiBleHBvcnQgZmFpbGVkISIpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgKG1ldGFpbmZvLCBkYXRhaW5mbykgPSByZXR2YWwKKyAgICAgICAgb2UucHJzZXJ2aWNlLnByc2Vydl9leHBvcnRfdG9maWxlKGQsIG1ldGFpbmZvLCBOb25lLCBUcnVlKQorCit9CisKK2FkZGhhbmRsZXIgcHJleHBvcnRfaGFuZGxlcgorcHJleHBvcnRfaGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LlJlY2lwZVBhcnNlZCBiYi5ldmVudC5QYXJzZVN0YXJ0ZWQgYmIuZXZlbnQuUGFyc2VDb21wbGV0ZWQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wcmltcG9ydC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHJpbXBvcnQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWQ0NWYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHJpbXBvcnQuYmJjbGFzcwpAQCAtMCwwICsxLDIxIEBACitweXRob24gcHJpbXBvcnRfaGFuZGxlciAoKSB7CisgICAgaW1wb3J0IGJiLmV2ZW50CisgICAgaWYgbm90IGUuZGF0YToKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LlBhcnNlQ29tcGxldGVkKToKKyAgICAgICAgaW1wb3J0IG9lLnByc2VydmljZQorICAgICAgICAjaW1wb3J0IGFsbCBleHBvcnRlZCBBVVRPUFIgdmFsdWVzCisgICAgICAgIGltcG9ydGVkID0gb2UucHJzZXJ2aWNlLnByc2Vydl9pbXBvcnRfZGIoZS5kYXRhKQorICAgICAgICBpZiBpbXBvcnRlZCBpcyBOb25lOgorICAgICAgICAgICAgYmIuZmF0YWwoImltcG9ydCBmYWlsZWQhIikKKworICAgICAgICBmb3IgKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCB2YWx1ZSkgaW4gaW1wb3J0ZWQ6CisgICAgICAgICAgICBiYi5ub3RlKCJpbXBvcnRlZCAoJXMsJXMsJXMsJWQpIiAlICh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSwgdmFsdWUpKQorICAgIGVsaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5QYXJzZVN0YXJ0ZWQpOgorICAgICAgICBpbXBvcnQgb2UucHJzZXJ2aWNlCisgICAgICAgIG9lLnByc2VydmljZS5wcnNlcnZfY2hlY2tfYXZhaWwoZS5kYXRhKQorfQorCithZGRoYW5kbGVyIHByaW1wb3J0X2hhbmRsZXIKK3ByaW1wb3J0X2hhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCBiYi5ldmVudC5QYXJzZVN0YXJ0ZWQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wcnNlcnYuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Byc2Vydi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzOTU5N2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wcnNlcnYuYmJjbGFzcwpAQCAtMCwwICsxLDIgQEAKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wdGVzdC1nbm9tZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHRlc3QtZ25vbWUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjk0OWFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHRlc3QtZ25vbWUuYmJjbGFzcwpAQCAtMCwwICsxLDggQEAKK2luaGVyaXQgcHRlc3QKKworRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQVEVTVF9FTkFCTEVEJywgJzEnLCAnLS1lbmFibGUtaW5zdGFsbGVkLXRlc3RzJywgJy0tZGlzYWJsZS1pbnN0YWxsZWQtdGVzdHMnLCBkKX0iCisKK0ZJTEVTXyR7UE59LXB0ZXN0ICs9ICIke2xpYmV4ZWNkaXJ9L2luc3RhbGxlZC10ZXN0cy8gXAorICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vaW5zdGFsbGVkLXRlc3RzLyIKKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gImdub21lLWRlc2t0b3AtdGVzdGluZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3B0ZXN0LmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wdGVzdC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZjQ3MGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wdGVzdC5iYmNsYXNzCkBAIC0wLDAgKzEsNjcgQEAKK1NVTU1BUllfJHtQTn0tcHRlc3QgPz0gIiR7U1VNTUFSWX0gLSBQYWNrYWdlIHRlc3QgZmlsZXMiCitERVNDUklQVElPTl8ke1BOfS1wdGVzdCA/PSAiJHtERVNDUklQVElPTn0gIFwKK1RoaXMgcGFja2FnZSBjb250YWlucyBhIHRlc3QgZGlyZWN0b3J5ICR7UFRFU1RfUEFUSH0gZm9yIHBhY2thZ2UgdGVzdCBwdXJwb3Nlcy4iCisKK1BURVNUX1BBVEggPz0gIiR7bGliZGlyfS8ke1BOfS9wdGVzdCIKK0ZJTEVTXyR7UE59LXB0ZXN0ID0gIiR7UFRFU1RfUEFUSH0iCitTRUNUSU9OXyR7UE59LXB0ZXN0ID0gImRldmVsIgorQUxMT1dfRU1QVFlfJHtQTn0tcHRlc3QgPSAiMSIKK1BURVNUX0VOQUJMRUQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdGVzdCcsICcxJywgJzAnLCBkKX0iCitQVEVTVF9FTkFCTEVEX2NsYXNzLW5hdGl2ZSA9ICIiCitQVEVTVF9FTkFCTEVEX2NsYXNzLW5hdGl2ZXNkayA9ICIiCitQVEVTVF9FTkFCTEVEX2NsYXNzLWNyb3NzLWNhbmFkaWFuID0gIiIKK1JERVBFTkRTXyR7UE59LXB0ZXN0X2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfS1wdGVzdF9jbGFzcy1uYXRpdmVzZGsgPSAiIgorUlJFQ09NTUVORFNfJHtQTn0tcHRlc3QgKz0gInB0ZXN0LXJ1bm5lciIKKworUEFDS0FHRVMgPSsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQVEVTVF9FTkFCTEVEJywgJzEnLCAnJHtQTn0tcHRlc3QnLCAnJywgZCl9IgorCitkb19jb25maWd1cmVfcHRlc3QoKSB7CisgICAgOgorfQorCitkb19jb25maWd1cmVfcHRlc3RfYmFzZSgpIHsKKyAgICBkb19jb25maWd1cmVfcHRlc3QKK30KKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKyAgICA6Cit9CisKK2RvX2NvbXBpbGVfcHRlc3RfYmFzZSgpIHsKKyAgICBkb19jb21waWxlX3B0ZXN0Cit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisgICAgOgorfQorCitkb19pbnN0YWxsX3B0ZXN0X2Jhc2UoKSB7CisgICAgaWYgWyAtZiAke1dPUktESVJ9L3J1bi1wdGVzdCBdOyB0aGVuCisgICAgICAgIGluc3RhbGwgLUQgJHtXT1JLRElSfS9ydW4tcHRlc3QgJHtEfSR7UFRFU1RfUEFUSH0vcnVuLXB0ZXN0CisgICAgICAgIGlmIGdyZXAgLXEgaW5zdGFsbC1wdGVzdDogTWFrZWZpbGU7IHRoZW4KKyAgICAgICAgICAgIG9lX3J1bm1ha2UgREVTVERJUj0ke0R9JHtQVEVTVF9QQVRIfSBpbnN0YWxsLXB0ZXN0CisgICAgICAgIGZpCisgICAgICAgIGRvX2luc3RhbGxfcHRlc3QKKyAgICAgICAgY2hvd24gLVIgcm9vdDpyb290ICR7RH0ke1BURVNUX1BBVEh9CisgICAgZmkKK30KKworZG9fY29uZmlndXJlX3B0ZXN0X2Jhc2VbZGlyc10gPSAiJHtCfSIKK2RvX2NvbXBpbGVfcHRlc3RfYmFzZVtkaXJzXSA9ICIke0J9IgorZG9faW5zdGFsbF9wdGVzdF9iYXNlW2RpcnNdID0gIiR7Qn0iCitkb19pbnN0YWxsX3B0ZXN0X2Jhc2VbY2xlYW5kaXJzXSA9ICIke0R9JHtQVEVTVF9QQVRIfSIKKworYWRkdGFzayBjb25maWd1cmVfcHRlc3RfYmFzZSBhZnRlciBkb19jb25maWd1cmUgYmVmb3JlIGRvX2NvbXBpbGUKK2FkZHRhc2sgY29tcGlsZV9wdGVzdF9iYXNlICAgYWZ0ZXIgZG9fY29tcGlsZSAgIGJlZm9yZSBkb19pbnN0YWxsCithZGR0YXNrIGluc3RhbGxfcHRlc3RfYmFzZSAgIGFmdGVyIGRvX2luc3RhbGwgICBiZWZvcmUgZG9fcGFja2FnZSBkb19wb3B1bGF0ZV9zeXNyb290CisKK3B5dGhvbiAoKSB7CisgICAgaWYgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MnLCBkKToKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19pbnN0YWxsX3B0ZXN0X2Jhc2UnLCAnZmFrZXJvb3QnLCAxKQorCisgICAgIyBSZW1vdmUgYWxsICcqcHRlc3RfYmFzZScgdGFza3Mgd2hlbiBwdGVzdCBpcyBub3QgZW5hYmxlZAorICAgIGlmIG5vdChkLmdldFZhcignUFRFU1RfRU5BQkxFRCcsIFRydWUpID09ICIxIik6CisgICAgICAgIGZvciBpIGluIFsnZG9fY29uZmlndXJlX3B0ZXN0X2Jhc2UnLCAnZG9fY29tcGlsZV9wdGVzdF9iYXNlJywgJ2RvX2luc3RhbGxfcHRlc3RfYmFzZSddOgorICAgICAgICAgICAgYmIuYnVpbGQuZGVsdGFzayhpLCBkKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHl0aG9uLWRpci5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHl0aG9uLWRpci5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZmE0YjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9weXRob24tZGlyLmJiY2xhc3MKQEAgLTAsMCArMSw1IEBACitQWVRIT05fQkFTRVZFUlNJT04gPz0gIjIuNyIKK1BZVEhPTl9BQkkgPz0gIiIKK1BZVEhPTl9ESVIgPSAicHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059IgorUFlUSE9OX1BOID0gInB5dGhvbiR7QCcnIGlmICcke1BZVEhPTl9CQVNFVkVSU0lPTn0nLnN0YXJ0c3dpdGgoJzInKSBlbHNlICczJ30iCitQWVRIT05fU0lURVBBQ0tBR0VTX0RJUiA9ICIke2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHl0aG9uM25hdGl2ZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHl0aG9uM25hdGl2ZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmODMwMTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9weXRob24zbmF0aXZlLmJiY2xhc3MKQEAgLTAsMCArMSw3IEBACitQWVRIT05fQkFTRVZFUlNJT04gPSAiMy40IgorCitpbmhlcml0IHB5dGhvbi1kaXIKKworUFlUSE9OPSIke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0iCitFWFRSQU5BVElWRVBBVEggKz0gIiR7UFlUSE9OX1BOfS1uYXRpdmUiCitERVBFTkRTICs9ICIgJHtQWVRIT05fUE59LW5hdGl2ZSAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9weXRob25uYXRpdmUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3B5dGhvbm5hdGl2ZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MDI5ZGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9weXRob25uYXRpdmUuYmJjbGFzcwpAQCAtMCwwICsxLDggQEAKKworaW5oZXJpdCBweXRob24tZGlyCisKK1BZVEhPTj0iJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IgorIyBQWVRIT05fRVhFQ1VUQUJMRSBpcyB1c2VkIGJ5IGNtYWtlCitQWVRIT05fRVhFQ1VUQUJMRT0iJHtQWVRIT059IgorRVhUUkFOQVRJVkVQQVRIICs9ICIke1BZVEhPTl9QTn0tbmF0aXZlIgorREVQRU5EUyArPSAiICR7UFlUSE9OX1BOfS1uYXRpdmUgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcWVtdS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcWVtdS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMWY1ODcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9xZW11LmJiY2xhc3MKQEAgLTAsMCArMSw1MSBAQAorIworIyBUaGlzIGNsYXNzIGNvbnRhaW5zIGZ1bmN0aW9ucyBmb3IgcmVjaXBlcyB0aGF0IG5lZWQgUUVNVSBvciB0ZXN0IGZvciBpdHMKKyMgZXhpc3RlbmNlLgorIworCitkZWYgcWVtdV90YXJnZXRfYmluYXJ5KGRhdGEpOgorICAgIHRhcmdldF9hcmNoID0gZGF0YS5nZXRWYXIoIlRBUkdFVF9BUkNIIiwgVHJ1ZSkKKyAgICBpZiB0YXJnZXRfYXJjaCBpbiAoImk0ODYiLCAiaTU4NiIsICJpNjg2Iik6CisgICAgICAgIHRhcmdldF9hcmNoID0gImkzODYiCisgICAgZWxpZiB0YXJnZXRfYXJjaCA9PSAicG93ZXJwYyI6CisgICAgICAgIHRhcmdldF9hcmNoID0gInBwYyIKKyAgICBlbGlmIHRhcmdldF9hcmNoID09ICJwb3dlcnBjNjQiOgorICAgICAgICB0YXJnZXRfYXJjaCA9ICJwcGM2NCIKKworICAgIHJldHVybiAicWVtdS0iICsgdGFyZ2V0X2FyY2gKKyMKKyMgTmV4dCBmdW5jdGlvbiB3aWxsIHJldHVybiBhIHN0cmluZyBjb250YWluaW5nIHRoZSBjb21tYW5kIHRoYXQgaXMgbmVlZGVkIHRvCisjIHRvIHJ1biBhIGNlcnRhaW4gYmluYXJ5IHRocm91Z2ggcWVtdS4gRm9yIGV4YW1wbGUsIGluIG9yZGVyIHRvIG1ha2UgYSBjZXJ0YWluCisjIHBvc3RpbnN0YWxsIHNjcmlwdGxldCBydW4gYXQgZG9fcm9vdGZzIHRpbWUgYW5kIHJ1bm5pbmcgdGhlIHBvc3RpbnN0YWxsIGlzCisjIGFyY2hpdGVjdHVyZSBkZXBlbmRlbnQsIHdlIGNhbiBydW4gaXQgdGhyb3VnaCBxZW11LiBGb3IgZXhhbXBsZSwgaW4gdGhlCisjIHBvc3RpbnN0YWxsIHNjcmlwdGxldCwgd2UgY291bGQgdXNlIHRoZSBmb2xsb3dpbmc6CisjCisjICR7QHFlbXVfcnVuX2JpbmFyeShkLCAnJEQnLCAnL3Vzci9iaW4vdGVzdF9hcHAnKX0gW3Rlc3RfYXBwIGFyZ3VtZW50c10KKyMKK2RlZiBxZW11X3J1bl9iaW5hcnkoZGF0YSwgcm9vdGZzX3BhdGgsIGJpbmFyeSk6CisgICAgcWVtdV9iaW5hcnkgPSBxZW11X3RhcmdldF9iaW5hcnkoZGF0YSkKKyAgICBpZiBxZW11X2JpbmFyeSA9PSAicWVtdS1hbGxhcmNoIjoKKyAgICAgICAgcWVtdV9iaW5hcnkgPSAicWVtdXdyYXBwZXIiCisKKyAgICBsaWJkaXIgPSByb290ZnNfcGF0aCArIGRhdGEuZ2V0VmFyKCJsaWJkaXIiLCBGYWxzZSkKKyAgICBiYXNlX2xpYmRpciA9IHJvb3Rmc19wYXRoICsgZGF0YS5nZXRWYXIoImJhc2VfbGliZGlyIiwgRmFsc2UpCisgICAgcWVtdV9vcHRpb25zID0gZGF0YS5nZXRWYXIoIlFFTVVfT1BUSU9OUyIsIFRydWUpCisKKyAgICByZXR1cm4gIlBTRVVET19VTkxPQUQ9MSAiICsgcWVtdV9iaW5hcnkgKyAiICIgKyBxZW11X29wdGlvbnMgKyAiIC1MICIgKyByb290ZnNfcGF0aFwKKyAgICAgICAgICAgICsgIiAtRSBMRF9MSUJSQVJZX1BBVEg9IiArIGxpYmRpciArICI6IiArIGJhc2VfbGliZGlyICsgIiAiXAorICAgICAgICAgICAgKyByb290ZnNfcGF0aCArIGJpbmFyeQorCisjIFFFTVVfRVhUUkFPUFRJT05TIGlzIG5vdCBtZWFudCB0byBiZSBkaXJlY3RseSB1c2VkLCB0aGUgZXh0ZW5zaW9ucyBhcmUgCisjIFBBQ0tBR0VfQVJDSCwgbm90IG92ZXJyaWRlcyBhbmQgaGVuY2UgaGF2ZSB0byBkbyB0aGlzIGRhbmNlLiBTaW1wbHkgYmVpbmcgYXJjaCAKKyMgc3BlY2lmaWMgaXNuJ3QgZ29vZCBlbm91Z2guCitRRU1VX09QVElPTlMgPSAiLXIgJHtPTERFU1RfS0VSTkVMfSAke0BkLmdldFZhcigiUUVNVV9FWFRSQU9QVElPTlNfJXMiICUgZC5nZXRWYXIoJ1BBQ0tBR0VfQVJDSCcsIFRydWUpLCBUcnVlKSBvciAiIn0iCitRRU1VX0VYVFJBT1BUSU9OU19pd21teHQgICAgPSAiIC1jcHUgcHhhMjcwLWM1IgorUUVNVV9FWFRSQU9QVElPTlNfYXJtdjYgICAgID0gIiAtY3B1IGFybTExMzYiCitRRU1VX0VYVFJBT1BUSU9OU19hcm12N2EgICAgPSAiIC1jcHUgY29ydGV4LWE4IgorUUVNVV9FWFRSQU9QVElPTlNfZTUwMHYyICAgID0gIiAtY3B1IGU1MDB2MiIKK1FFTVVfRVhUUkFPUFRJT05TX2U1MDBtYyAgICA9ICIgLWNwdSBlNTAwbWMiCitRRU1VX0VYVFJBT1BUSU9OU19lNTUwMCAgICAgPSAiIC1jcHUgZTU1MDAiCitRRU1VX0VYVFJBT1BUSU9OU19lNTUwMC02NGIgPSAiIC1jcHUgZTU1MDAiCitRRU1VX0VYVFJBT1BUSU9OU19lNjUwMCAgICAgPSAiIC1jcHUgZTY1MDAiCitRRU1VX0VYVFJBT1BUSU9OU19lNjUwMC02NGIgPSAiIC1jcHUgZTY1MDAiCitRRU1VX0VYVFJBT1BUSU9OU19wcGM3NDAwICAgPSAiIC1jcHUgNzQwMCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3FtYWtlMi5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcW1ha2UyLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU3M2FkMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3FtYWtlMi5iYmNsYXNzCkBAIC0wLDAgKzEsMjcgQEAKKyMKKyMgUU1ha2UgdmFyaWFibGVzIGZvciBRdDQKKyMKK2luaGVyaXQgcW1ha2VfYmFzZQorCitERVBFTkRTX3ByZXBlbmQgPSAicXQ0LXRvb2xzLW5hdGl2ZSAiCisKK2V4cG9ydCBRTUFLRVNQRUMgPSAiJHtTVEFHSU5HX0RBVEFESVJ9L3F0NC9ta3NwZWNzLyR7VEFSR0VUX09TfS1vZS1nKysiCitleHBvcnQgT0VfUU1BS0VfUVRfQ09ORklHID0gIiR7U1RBR0lOR19EQVRBRElSfS9xdDQvbWtzcGVjcy9xY29uZmlnLnByaSIKK2V4cG9ydCBPRV9RTUFLRV9VSUMgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3VpYzQiCitleHBvcnQgT0VfUU1BS0VfVUlDMyA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vdWljMzQiCitleHBvcnQgT0VfUU1BS0VfTU9DID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9tb2M0IgorZXhwb3J0IE9FX1FNQUtFX1JDQyA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vcmNjNCIKK2V4cG9ydCBPRV9RTUFLRV9RREJVU0NQUDJYTUwgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3FkYnVzY3BwMnhtbDQiCitleHBvcnQgT0VfUU1BS0VfUURCVVNYTUwyQ1BQID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9xZGJ1c3htbDJjcHA0IgorZXhwb3J0IE9FX1FNQUtFX1FNQUtFID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9xbWFrZTIiCitleHBvcnQgT0VfUU1BS0VfTElOSyA9ICIke0NYWH0iCitleHBvcnQgT0VfUU1BS0VfQ1hYRkxBR1MgPSAiJHtDWFhGTEFHU30iCitleHBvcnQgT0VfUU1BS0VfSU5DRElSX1FUID0gIiR7U1RBR0lOR19JTkNESVJ9L3F0NCIKK2V4cG9ydCBPRV9RTUFLRV9MSUJESVJfUVQgPSAiJHtTVEFHSU5HX0xJQkRJUn0iCitleHBvcnQgT0VfUU1BS0VfTElCU19RVCA9ICJxdCIKK2V4cG9ydCBPRV9RTUFLRV9MSUJTX1gxMSA9ICItbFhleHQgLWxYMTEgLWxtIgorZXhwb3J0IE9FX1FNQUtFX0xJQlNfWDExU00gPSAiLWxTTSAtbElDRSIKK2V4cG9ydCBPRV9RTUFLRV9MQ09OVkVSVCA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vbGNvbnZlcnQ0IgorZXhwb3J0IE9FX1FNQUtFX0xSRUxFQVNFID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9scmVsZWFzZTQiCitleHBvcnQgT0VfUU1BS0VfTFVQREFURSA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vbHVwZGF0ZTQiCitleHBvcnQgT0VfUU1BS0VfWE1MUEFUVEVSTlMgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3htbHBhdHRlcm5zNCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3FtYWtlX2Jhc2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3FtYWtlX2Jhc2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzk4NzEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcW1ha2VfYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsMTE5IEBACitRTUFLRV9NS1NQRUNfUEFUSCA/PSAiJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9xbWFrZSIKKworT0VfUU1BS0VfUExBVEZPUk0gPSAiJHtUQVJHRVRfT1N9LW9lLWcrKyIKK1FNQUtFU1BFQyA6PSAiJHtRTUFLRV9NS1NQRUNfUEFUSH0vJHtPRV9RTUFLRV9QTEFURk9STX0iCisKKyMgV2Ugb3ZlcnJpZGUgdGhpcyBjb21wbGV0ZWx5IHRvIGVsaW1pbmF0ZSB0aGUgLWUgbm9ybWFsbHkgcGFzc2VkIGluCitFWFRSQV9PRU1BS0UgPSAiIgorCitleHBvcnQgT0VfUU1BS0VfQ0M9IiR7Q0N9IgorZXhwb3J0IE9FX1FNQUtFX0NGTEFHUz0iJHtDRkxBR1N9IgorZXhwb3J0IE9FX1FNQUtFX0NYWD0iJHtDWFh9IgorZXhwb3J0IE9FX1FNQUtFX0xERkxBR1M9IiR7TERGTEFHU30iCitleHBvcnQgT0VfUU1BS0VfQVI9IiR7QVJ9IgorZXhwb3J0IE9FX1FNQUtFX1NUUklQPSJlY2hvIgorZXhwb3J0IE9FX1FNQUtFX1JQQVRIPSItV2wsLXJwYXRoLWxpbmssIgorCisjIGRlZmF1bHQgdG8gcXRlMiB2aWEgYmIuY29uZiwgaW5oZXJpdCBxdDN4MTEgdG8gY29uZmlndXJlIGZvciBxdDN4MTEKKworb2VfcW1ha2VfbWtzcGVjcyAoKSB7CisgICAgbWtkaXIgLXAgbWtzcGVjcy8ke09FX1FNQUtFX1BMQVRGT1JNfQorICAgIGZvciBmIGluICR7UU1BS0VfTUtTUEVDX1BBVEh9LyR7T0VfUU1BS0VfUExBVEZPUk19Lyo7IGRvCisgICAgICAgIGlmIFsgLUwgJGYgXTsgdGhlbgorICAgICAgICAgICAgbG5rPWByZWFkbGluayAkZmAKKyAgICAgICAgICAgIGlmIFsgLWYgbWtzcGVjcy8ke09FX1FNQUtFX1BMQVRGT1JNfS8kbG5rIF07IHRoZW4KKyAgICAgICAgICAgICAgICBsbiAtcyAkbG5rIG1rc3BlY3MvJHtPRV9RTUFLRV9QTEFURk9STX0vYGJhc2VuYW1lICRmYAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNwICRmIG1rc3BlY3MvJHtPRV9RTUFLRV9QTEFURk9STX0vCisgICAgICAgICAgICBmaQorICAgICAgICBlbHNlCisgICAgICAgICAgICBjcCAkZiBta3NwZWNzLyR7T0VfUU1BS0VfUExBVEZPUk19LworICAgICAgICBmaQorICAgIGRvbmUKK30KKworZG9fZ2VuZXJhdGVfcXRfY29uZmlnX2ZpbGUoKSB7CisJZXhwb3J0IFFUX0NPTkZfUEFUSD0ke1dPUktESVJ9L3F0LmNvbmYKKwljYXQgPiAke1dPUktESVJ9L3F0LmNvbmYgPDxFT0YKK1tQYXRoc10KK1ByZWZpeCA9CitCaW5hcmllcyA9ICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfQorSGVhZGVycyA9ICR7U1RBR0lOR19JTkNESVJ9LyR7UVRfRElSX05BTUV9CitQbHVnaW5zID0gJHtTVEFHSU5HX0xJQkRJUn0vJHtRVF9ESVJfTkFNRX0vcGx1Z2lucy8KK01rc3BlY3MgPSAke1NUQUdJTkdfREFUQURJUn0vJHtRVF9ESVJfTkFNRX0vbWtzcGVjcy8KK0VPRgorfQorCithZGR0YXNrIGdlbmVyYXRlX3F0X2NvbmZpZ19maWxlIGFmdGVyIGRvX3BhdGNoIGJlZm9yZSBkb19jb25maWd1cmUKKworcW1ha2VfYmFzZV9kb19jb25maWd1cmUoKSB7CisJY2FzZSAke1FNQUtFU1BFQ30gaW4KKwkqbGludXgtb2UtZysrfCpsaW51eC11Y2xpYmMtb2UtZysrfCpsaW51eC1nbnVlYWJpLW9lLWcrK3wqbGludXgtdWNsaWJjZWFiaS1vZS1nKyt8KmxpbnV4LWdudXNwZS1vZS1nKyt8KmxpbnV4LXVjbGliY3NwZS1vZS1nKyt8KmxpbnV4LWdudW4zMi1vZS1nKyspCisJCTs7CisJKi1vZS1nKyspCisJCWRpZSBVbnN1cHBvcnRlZCB0YXJnZXQgJHtUQVJHRVRfT1N9IGZvciBvZS1nKysgcW1ha2Ugc3BlYworCQk7OworCSopCisJCWJibm90ZSBTZWFyY2hpbmcgZm9yIHFtYWtlIHNwZWMgZmlsZQorCQlwYXRocz0iJHtRTUFLRV9NS1NQRUNfUEFUSH0vcXdzLyR7VEFSR0VUX09TfS0ke1RBUkdFVF9BUkNIfS1nKysiCisJCXBhdGhzPSIke1FNQUtFX01LU1BFQ19QQVRIfS8ke1RBUkdFVF9PU30tZysrICRwYXRocyIKKworCQlpZiAoZWNobyAiJHtUQVJHRVRfQVJDSH0ifGdyZXAgLXEgJ2kuODYnKTsgdGhlbgorCQkJcGF0aHM9IiR7UU1BS0VfTUtTUEVDX1BBVEh9L3F3cy8ke1RBUkdFVF9PU30teDg2LWcrKyAkcGF0aHMiCisJCWZpCisJCWZvciBpIGluICRwYXRoczsgZG8KKwkJCWlmIHRlc3QgLWUgJGk7IHRoZW4KKwkJCQlleHBvcnQgUU1BS0VTUEVDPSRpCisJCQkJYnJlYWsKKwkJCWZpCisJCWRvbmUKKwkJOzsKKwllc2FjCisKKwliYm5vdGUgInVzaW5nIHFtYWtlIHNwZWMgaW4gJHtRTUFLRVNQRUN9LCB1c2luZyBwcm9maWxlcyAnJHtRTUFLRV9QUk9GSUxFU30nIgorCisJaWYgWyAteiAiJHtRTUFLRV9QUk9GSUxFU30iIF07IHRoZW4gCisJCVBST0ZJTEVTPSJgbHMgKi5wcm9gIgorCWVsc2UKKwkJUFJPRklMRVM9IiR7UU1BS0VfUFJPRklMRVN9IgorCWZpCisKKwlpZiBbIC16ICIkUFJPRklMRVMiIF07IHRoZW4KKwkJZGllICJRTUFLRV9QUk9GSUxFUyBub3Qgc2V0IGFuZCBubyBwcm9maWxlcyBmb3VuZCBpbiAkUFdEIgorICAgICAgICBmaQorCisJaWYgWyAhIC16ICIke0VYVFJBX1FNQUtFVkFSU19QT1NUfSIgXTsgdGhlbgorCQlBRlRFUj0iLWFmdGVyIgorCQlRTUFLRV9WQVJTVUJTVF9QT1NUPSIke0VYVFJBX1FNQUtFVkFSU19QT1NUfSIKKwkJYmJub3RlICJxbWFrZSBwb3N0dmFyIHN1YnN0aXR1dGlvbjogJHtFWFRSQV9RTUFLRVZBUlNfUE9TVH0iCisJZmkKKworCWlmIFsgISAteiAiJHtFWFRSQV9RTUFLRVZBUlNfUFJFfSIgXTsgdGhlbgorCQlRTUFLRV9WQVJTVUJTVF9QUkU9IiR7RVhUUkFfUU1BS0VWQVJTX1BSRX0iCisJCWJibm90ZSAicW1ha2UgcHJldmFyIHN1YnN0aXR1dGlvbjogJHtFWFRSQV9RTUFLRVZBUlNfUFJFfSIKKwlmaQorCisJIyBIYWNrIC5wcm8gZmlsZXMgdG8gdXNlIE9FIHV0aWxpdGllcworCUxDT05WRVJUX05BTUU9JChiYXNlbmFtZSAke09FX1FNQUtFX0xDT05WRVJUfSkKKwlMUkVMRUFTRV9OQU1FPSQoYmFzZW5hbWUgJHtPRV9RTUFLRV9MUkVMRUFTRX0pCisJTFVQREFURV9OQU1FPSQoYmFzZW5hbWUgJHtPRV9RTUFLRV9MVVBEQVRFfSkKKwlYTUxQQVRURVJOU19OQU1FPSQoYmFzZW5hbWUgJHtPRV9RTUFLRV9YTUxQQVRURVJOU30pCisJZmluZCAtbmFtZSAnKi5wcm8nIFwKKwkgICAgIC1leGVjIHNlZCAtaSAtZSAic3xcKD1ccyouKlwpLyRMQ09OVkVSVF9OQU1FfFwxL2xjb252ZXJ0fGciIFwKKwkgICAgICAgICAgICAgICAgICAtZSAic3xcKD1ccyouKlwpLyRMUkVMRUFTRV9OQU1FfFwxL2xyZWxlYXNlfGciIFwKKwkgICAgICAgICAgICAgICAgICAtZSAic3xcKD1ccyouKlwpLyRMVVBEQVRFX05BTUV8XDEvbHVwZGF0ZXxnIiBcCisJICAgICAgICAgICAgICAgICAgLWUgInN8XCg9XHMqLipcKS8kWE1MUEFUVEVSTlNfTkFNRXxcMS94bWxwYXR0ZXJuc3xnIiBcCisJICAgICAgICAgICAgICAgICAgLWUgInN8XCg9XHMqLipcKS9sY29udmVydHxcMS8kTENPTlZFUlRfTkFNRXxnIiBcCisJICAgICAgICAgICAgICAgICAgLWUgInN8XCg9XHMqLipcKS9scmVsZWFzZXxcMS8kTFJFTEVBU0VfTkFNRXxnIiBcCisJICAgICAgICAgICAgICAgICAgLWUgInN8XCg9XHMqLipcKS9sdXBkYXRlfFwxLyRMVVBEQVRFX05BTUV8ZyIgXAorCSAgICAgICAgICAgICAgICAgIC1lICJzfFwoPVxzKi4qXCkveG1scGF0dGVybnN8XDEvJFhNTFBBVFRFUk5TX05BTUV8ZyIgXAorCSAgICAgICAgICAgICAgICAgICd7fScgJzsnCisKKyNiYm5vdGUgIkNhbGxpbmcgJyR7T0VfUU1BS0VfUU1BS0V9IC1tYWtlZmlsZSAtc3BlYyAke1FNQUtFU1BFQ30gLW8gTWFrZWZpbGUgJFFNQUtFX1ZBUlNVQlNUX1BSRSAkQUZURVIgJFBST0ZJTEVTICRRTUFLRV9WQVJTVUJTVF9QT1NUJyIKKwl1bnNldCBRTUFLRVNQRUMgfHwgdHJ1ZQorCSR7T0VfUU1BS0VfUU1BS0V9IC1tYWtlZmlsZSAtc3BlYyAke1FNQUtFU1BFQ30gLW8gTWFrZWZpbGUgJFFNQUtFX1ZBUlNVQlNUX1BSRSAkQUZURVIgJFBST0ZJTEVTICRRTUFLRV9WQVJTVUJTVF9QT1NUIHx8IGRpZSAiRXJyb3IgY2FsbGluZyAke09FX1FNQUtFX1FNQUtFfSBvbiAkUFJPRklMRVMiCit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29uZmlndXJlCisKK2FkZHRhc2sgY29uZmlndXJlIGFmdGVyIGRvX3VucGFjayBkb19wYXRjaCBiZWZvcmUgZG9fY29tcGlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcXQ0ZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcXQ0ZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYjEwNTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9xdDRlLmJiY2xhc3MKQEAgLTAsMCArMSwyMSBAQAorUVQ0RURFUEVORFMgPz0gInF0NC1lbWJlZGRlZCAiCitERVBFTkRTX3ByZXBlbmQgPSAiJHtRVDRFREVQRU5EU30iCisKK2luaGVyaXQgcW1ha2UyCisKK1FUX0JBU0VfTkFNRSA9ICJxdDQtZW1iZWRkZWQiCitRVF9ESVJfTkFNRSA9ICJxdG9waWEiCitRVF9MSUJJTkZJWCA9ICJFIgorIyBvdmVycmlkZSB2YXJpYWJsZXMgc2V0IGJ5IHFtYWtlLWJhc2UgdG8gY29tcGlsZSBRdC9FbWJlZGRlZCBhcHBzCisjCitleHBvcnQgUU1BS0VTUEVDID0gIiR7U1RBR0lOR19EQVRBRElSfS8ke1FUX0RJUl9OQU1FfS9ta3NwZWNzLyR7VEFSR0VUX09TfS1vZS1nKysiCitleHBvcnQgT0VfUU1BS0VfUVRfQ09ORklHID0gIiR7U1RBR0lOR19EQVRBRElSfS8ke1FUX0RJUl9OQU1FfS9ta3NwZWNzL3Fjb25maWcucHJpIgorZXhwb3J0IE9FX1FNQUtFX0lOQ0RJUl9RVCA9ICIke1NUQUdJTkdfSU5DRElSfS8ke1FUX0RJUl9OQU1FfSIKK2V4cG9ydCBPRV9RTUFLRV9MSUJESVJfUVQgPSAiJHtTVEFHSU5HX0xJQkRJUn0iCitleHBvcnQgT0VfUU1BS0VfTElCU19RVCA9ICJxdCIKK2V4cG9ydCBPRV9RTUFLRV9MSUJTX1gxMSA9ICIiCitleHBvcnQgT0VfUU1BS0VfRVhUUkFfTU9EVUxFUyA9ICJuZXR3b3JrIgorRVhUUkFfUU1BS0VWQVJTX1BSRSArPSAiIFFUX0xJQklORklYPSR7UVRfTElCSU5GSVh9ICIKKworIyBRdDQgdXNlcyBhdG9taWMgaW5zdHJ1Y3Rpb25zIG5vdCBzdXBwb3J0ZWQgaW4gdGh1bWIgbW9kZQorQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9xdDR4MTEuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3F0NHgxMS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMDZkMzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9xdDR4MTEuYmJjbGFzcwpAQCAtMCwwICsxLDE0IEBACitRVDRERVBFTkRTID89ICJxdDQteDExICIKK0RFUEVORFNfcHJlcGVuZCA9ICIke1FUNERFUEVORFN9IgorCisjIGRlcGVuZHMgb24gcXQ0LXgxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTICs9ICJ4MTEiCisKK2luaGVyaXQgcW1ha2UyIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitRVF9CQVNFX05BTUUgPSAicXQ0IgorUVRfRElSX05BTUUgPSAicXQ0IgorUVRfTElCSU5GSVggPSAiIgorCisjIFF0NCB1c2VzIGF0b21pYyBpbnN0cnVjdGlvbnMgbm90IHN1cHBvcnRlZCBpbiB0aHVtYiBtb2RlCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JlY2lwZV9zYW5pdHkuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JlY2lwZV9zYW5pdHkuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTA0ZTMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcmVjaXBlX3Nhbml0eS5iYmNsYXNzCkBAIC0wLDAgKzEsMTY3IEBACitkZWYgX19ub3RlKG1zZywgZCk6CisgICAgYmIubm90ZSgiJXM6IHJlY2lwZV9zYW5pdHk6ICVzIiAlIChkLmdldFZhcigiUCIsIFRydWUpLCBtc2cpKQorCitfX3JlY2lwZV9zYW5pdHlfYmFkcnVudGltZXZhcnMgPSAiUkRFUEVORFMgUlBST1ZJREVTIFJSRUNPTU1FTkRTIFJDT05GTElDVFMiCitkZWYgYmFkX3J1bnRpbWVfdmFycyhjZmdkYXRhLCBkKToKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJuYXRpdmUiLCBkKSBvciBcCisgICAgICAgICAgICBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJjcm9zcyIsIGQpOgorICAgICAgICByZXR1cm4KKworICAgIGZvciB2YXIgaW4gZC5nZXRWYXIoIl9fcmVjaXBlX3Nhbml0eV9iYWRydW50aW1ldmFycyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIHZhbCA9IGQuZ2V0VmFyKHZhciwgMCkKKyAgICAgICAgaWYgdmFsIGFuZCB2YWwgIT0gY2ZnZGF0YS5nZXQodmFyKToKKyAgICAgICAgICAgIF9fbm90ZSgiJXMgc2hvdWxkIGJlICVzXyR7UE59IiAlICh2YXIsIHZhciksIGQpCisKK19fcmVjaXBlX3Nhbml0eV9yZXF2YXJzID0gIkRFU0NSSVBUSU9OIgorX19yZWNpcGVfc2FuaXR5X3JlcWRpZmZ2YXJzID0gIiIKK2RlZiByZXFfdmFycyhjZmdkYXRhLCBkKToKKyAgICBmb3IgdmFyIGluIGQuZ2V0VmFyKCJfX3JlY2lwZV9zYW5pdHlfcmVxdmFycyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIGlmIG5vdCBkLmdldFZhcih2YXIsIDApOgorICAgICAgICAgICAgX19ub3RlKCIlcyBzaG91bGQgYmUgc2V0IiAlIHZhciwgZCkKKworICAgIGZvciB2YXIgaW4gZC5nZXRWYXIoIl9fcmVjaXBlX3Nhbml0eV9yZXFkaWZmdmFycyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIHZhbCA9IGQuZ2V0VmFyKHZhciwgMCkKKyAgICAgICAgY2ZndmFsID0gY2ZnZGF0YS5nZXQodmFyKQorCisgICAgICAgIGlmIG5vdCB2YWw6CisgICAgICAgICAgICBfX25vdGUoIiVzIHNob3VsZCBiZSBzZXQiICUgdmFyLCBkKQorICAgICAgICBlbGlmIHZhbCA9PSBjZmd2YWw6CisgICAgICAgICAgICBfX25vdGUoIiVzIHNob3VsZCBiZSBkZWZpbmVkIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIGRlZmF1bHQgKCVzKSIgJSAodmFyLCBjZmd2YWwpLCBkKQorCitkZWYgdmFyX3JlbmFtZXNfb3ZlcndyaXRlKGNmZ2RhdGEsIGQpOgorICAgIHJlbmFtZXMgPSBkLmdldFZhcigiX19yZWNpcGVfc2FuaXR5X3JlbmFtZXMiLCAwKQorICAgIGlmIHJlbmFtZXM6CisgICAgICAgIGZvciAoa2V5LCBuZXdrZXksIG9sZHZhbHVlLCBuZXd2YWx1ZSkgaW4gcmVuYW1lczoKKyAgICAgICAgICAgIGlmIG9sZHZhbHVlICE9IG5ld3ZhbHVlIGFuZCBvbGR2YWx1ZSAhPSBjZmdkYXRhLmdldChuZXdrZXkpOgorICAgICAgICAgICAgICAgIF9fbm90ZSgicmVuYW1lIG9mIHZhcmlhYmxlICclcycgdG8gJyVzJyBvdmVyd3JvdGUgZXhpc3RpbmcgdmFsdWUgJyVzJyB3aXRoICclcycuIiAlIChrZXksIG5ld2tleSwgb2xkdmFsdWUsIG5ld3ZhbHVlKSwgZCkKKworZGVmIGluY29ycmVjdF9ub25lbXB0eV9QQUNLQUdFUyhjZmdkYXRhLCBkKToKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJuYXRpdmUiLCBkKSBvciBcCisgICAgICAgICAgICBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJjcm9zcyIsIGQpOgorICAgICAgICBpZiBkLmdldFZhcigiUEFDS0FHRVMiLCBUcnVlKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKK2RlZiBjYW5fdXNlX2F1dG90b29sc19iYXNlKGNmZ2RhdGEsIGQpOgorICAgIGNmZyA9IGQuZ2V0VmFyKCJkb19jb25maWd1cmUiLCBUcnVlKQorICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJhdXRvdG9vbHMiLCBkKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBmb3IgaSBpbiBbImF1dG9yZWNvbmYiXSArIFsiJXNfZG9fY29uZmlndXJlIiAlIGNscyBmb3IgY2xzIGluIFsiZ25vbWViYXNlIiwgImdub21lIiwgImUiLCAiYXV0b3Rvb2xzIiwgImVmbCIsICJncGVwaG9uZSIsICJvcGVubW9rbyIsICJvcGVubW9rbzIiLCAieGZjZSIsICJ4bGlicyJdXToKKyAgICAgICAgaWYgY2ZnLmZpbmQoaSkgIT0gLTE6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGZvciBjbHNmaWxlIGluIGQuZ2V0VmFyKCJfX2luaGVyaXRfY2FjaGUiLCAwKToKKyAgICAgICAgKGJhc2UsIF8pID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKGNsc2ZpbGUpKQorICAgICAgICBpZiBjZmcuZmluZCgiJXNfZG9fY29uZmlndXJlIiAlIGJhc2UpICE9IC0xOgorICAgICAgICAgICAgX19ub3RlKCJhdXRvdG9vbHNfYmFzZSB1c2FnZSBuZWVkcyB2ZXJpZmljYXRpb24sIHNwb3R0ZWQgJXNfZG9fY29uZmlndXJlIiAlIGJhc2UsIGQpCisKKyAgICByZXR1cm4gVHJ1ZQorCitkZWYgY2FuX2RlbGV0ZV9GSUxFU1BBVEgoY2ZnZGF0YSwgZCk6CisgICAgZXhwZWN0ZWQgPSBjZmdkYXRhLmdldCgiRklMRVNQQVRIIikKKyAgICBleHBlY3RlZHBhdGhzID0gZC5leHBhbmQoZXhwZWN0ZWQpCisgICAgdW5leHBhbmRlZCA9IGQuZ2V0VmFyKCJGSUxFU1BBVEgiLCAwKQorICAgIGZpbGVzcGF0aCA9IGQuZ2V0VmFyKCJGSUxFU1BBVEgiLCBUcnVlKS5zcGxpdCgiOiIpCisgICAgZmlsZXNwYXRoID0gW29zLnBhdGgubm9ybXBhdGgoZikgZm9yIGYgaW4gZmlsZXNwYXRoIGlmIG9zLnBhdGguZXhpc3RzKGYpXQorICAgIGZvciBmcCBpbiBmaWxlc3BhdGg6CisgICAgICAgIGlmIG5vdCBmcCBpbiBleHBlY3RlZHBhdGhzOgorICAgICAgICAgICAgIyBfX25vdGUoIlBhdGggJXMgaW4gRklMRVNQQVRIIG5vdCBpbiB0aGUgZXhwZWN0ZWQgcGF0aHMgJXMiICUKKyAgICAgICAgICAgICMgKGZwLCBleHBlY3RlZHBhdGhzKSwgZCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgIHJldHVybiBleHBlY3RlZCAhPSB1bmV4cGFuZGVkCisKK2RlZiBjYW5fZGVsZXRlX0ZJTEVTRElSKGNmZ2RhdGEsIGQpOgorICAgIGV4cGVjdGVkID0gY2ZnZGF0YS5nZXQoIkZJTEVTRElSIikKKyAgICAjZXhwZWN0ZWQgPSAiJHtAYmIudXRpbHMud2hpY2goZC5nZXRWYXIoJ0ZJTEVTUEFUSCcsIFRydWUpLCAnLicpfSIKKyAgICB1bmV4cGFuZGVkID0gZC5nZXRWYXIoIkZJTEVTRElSIiwgMCkKKyAgICBpZiB1bmV4cGFuZGVkIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZXhwYW5kZWQgPSBvcy5wYXRoLm5vcm1wYXRoKGQuZ2V0VmFyKCJGSUxFU0RJUiIsIFRydWUpKQorICAgIGZpbGVzcGF0aCA9IGQuZ2V0VmFyKCJGSUxFU1BBVEgiLCBUcnVlKS5zcGxpdCgiOiIpCisgICAgZmlsZXNwYXRoID0gW29zLnBhdGgubm9ybXBhdGgoZikgZm9yIGYgaW4gZmlsZXNwYXRoIGlmIG9zLnBhdGguZXhpc3RzKGYpXQorCisgICAgcmV0dXJuIHVuZXhwYW5kZWQgIT0gZXhwZWN0ZWQgYW5kIFwKKyAgICAgICAgICAgb3MucGF0aC5leGlzdHMoZXhwYW5kZWQpIGFuZCBcCisgICAgICAgICAgIChleHBhbmRlZCBpbiBmaWxlc3BhdGggb3IKKyAgICAgICAgICAgIGV4cGFuZGVkID09IGQuZXhwYW5kKGV4cGVjdGVkKSkKKworZGVmIGNhbl9kZWxldGVfb3RoZXJzKHAsIGNmZ2RhdGEsIGQpOgorICAgIGZvciBrIGluIFsiUyIsICJQViIsICJQTiIsICJERVNDUklQVElPTiIsICJERVBFTkRTIiwKKyAgICAgICAgICAgICAgIlNFQ1RJT04iLCAiUEFDS0FHRVMiLCAiRVhUUkFfT0VDT05GIiwgIkVYVFJBX09FTUFLRSJdOgorICAgICNmb3IgayBpbiBjZmdkYXRhOgorICAgICAgICB1bmV4cGFuZGVkID0gZC5nZXRWYXIoaywgMCkKKyAgICAgICAgY2ZndW5leHBhbmRlZCA9IGNmZ2RhdGEuZ2V0KGspCisgICAgICAgIGlmIG5vdCBjZmd1bmV4cGFuZGVkOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBleHBhbmRlZCA9IGQuZ2V0VmFyKGssIFRydWUpCisgICAgICAgICAgICBjZmdleHBhbmRlZCA9IGQuZXhwYW5kKGNmZ3VuZXhwYW5kZWQpCisgICAgICAgIGV4Y2VwdCBiYi5mZXRjaC5QYXJhbWV0ZXJFcnJvcjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgdW5leHBhbmRlZCAhPSBjZmd1bmV4cGFuZGVkIGFuZCBcCisgICAgICAgICAgIGNmZ2V4cGFuZGVkID09IGV4cGFuZGVkOgorICAgICAgICAgICBfX25vdGUoImNhbmRpZGF0ZSBmb3IgcmVtb3ZhbCBvZiAlcyIgJSBrLCBkKQorICAgICAgICAgICBiYi5kZWJ1ZygxLCAiJXM6IHJlY2lwZV9zYW5pdHk6ICAgY2ZnJ3MgJyVzJyBhbmQgZCdzICclcycgYm90aCBleHBhbmQgdG8gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgKHAsIGNmZ3VuZXhwYW5kZWQsIHVuZXhwYW5kZWQsIGV4cGFuZGVkKSkKKworcHl0aG9uIGRvX3JlY2lwZV9zYW5pdHkgKCkgeworICAgIHAgPSBkLmdldFZhcigiUCIsIFRydWUpCisgICAgcCA9ICIlcyAlcyAlcyIgJSAoZC5nZXRWYXIoIlBOIiwgVHJ1ZSksIGQuZ2V0VmFyKCJQViIsIFRydWUpLCBkLmdldFZhcigiUFIiLCBUcnVlKSkKKworICAgIHNhbml0eWNoZWNrcyA9IFsKKyAgICAgICAgKGNhbl9kZWxldGVfRklMRVNESVIsICJjYW5kaWRhdGUgZm9yIHJlbW92YWwgb2YgRklMRVNESVIiKSwKKyAgICAgICAgKGNhbl9kZWxldGVfRklMRVNQQVRILCAiY2FuZGlkYXRlIGZvciByZW1vdmFsIG9mIEZJTEVTUEFUSCIpLAorICAgICAgICAjKGNhbl91c2VfYXV0b3Rvb2xzX2Jhc2UsICJjYW5kaWRhdGUgZm9yIHVzZSBvZiBhdXRvdG9vbHNfYmFzZSIpLAorICAgICAgICAoaW5jb3JyZWN0X25vbmVtcHR5X1BBQ0tBR0VTLCAibmF0aXZlIG9yIGNyb3NzIHJlY2lwZSB3aXRoIG5vbi1lbXB0eSBQQUNLQUdFUyIpLAorICAgIF0KKyAgICBjZmdkYXRhID0gZC5nZXRWYXIoIl9fcmVjaXBlX3Nhbml0eV9jZmdkYXRhIiwgMCkKKworICAgIGZvciAoZnVuYywgbXNnKSBpbiBzYW5pdHljaGVja3M6CisgICAgICAgIGlmIGZ1bmMoY2ZnZGF0YSwgZCk6CisgICAgICAgICAgICBfX25vdGUobXNnLCBkKQorCisgICAgY2FuX2RlbGV0ZV9vdGhlcnMocCwgY2ZnZGF0YSwgZCkKKyAgICB2YXJfcmVuYW1lc19vdmVyd3JpdGUoY2ZnZGF0YSwgZCkKKyAgICByZXFfdmFycyhjZmdkYXRhLCBkKQorICAgIGJhZF9ydW50aW1lX3ZhcnMoY2ZnZGF0YSwgZCkKK30KK2RvX3JlY2lwZV9zYW5pdHlbbm9zdGFtcF0gPSAiMSIKK2FkZHRhc2sgcmVjaXBlX3Nhbml0eQorCitkb19yZWNpcGVfc2FuaXR5X2FsbFtub3N0YW1wXSA9ICIxIgorZG9fcmVjaXBlX3Nhbml0eV9hbGxbcmVjcmRlcHRhc2tdID0gImRvX3JlY2lwZV9zYW5pdHlfYWxsIGRvX3JlY2lwZV9zYW5pdHkiCitkb19yZWNpcGVfc2FuaXR5X2FsbCAoKSB7CisgICAgOgorfQorYWRkdGFzayByZWNpcGVfc2FuaXR5X2FsbCBhZnRlciBkb19yZWNpcGVfc2FuaXR5CisKK3B5dGhvbiByZWNpcGVfc2FuaXR5X2VoICgpIHsKKyAgICBkID0gZS5kYXRhCisKKyAgICBjZmdkYXRhID0ge30KKyAgICBmb3IgayBpbiBkLmtleXMoKToKKyAgICAjZm9yIGsgaW4gWyJTIiwgIlBSIiwgIlBWIiwgIlBOIiwgIkRFU0NSSVBUSU9OIiwgIkxJQ0VOU0UiLCAiREVQRU5EUyIsCisgICAgIyAgICAgICAgICAiU0VDVElPTiJdOgorICAgICAgICBjZmdkYXRhW2tdID0gZC5nZXRWYXIoaywgMCkKKworICAgIGQuc2V0VmFyKCJfX3JlY2lwZV9zYW5pdHlfY2ZnZGF0YSIsIGNmZ2RhdGEpCisgICAgI2Quc2V0VmFyKCJfX3JlY2lwZV9zYW5pdHlfY2ZnZGF0YSIsIGQpCisKKyAgICAjIFNpY2ssIHZlcnkgc2ljay4uCisgICAgZnJvbSBiYi5kYXRhX3NtYXJ0IGltcG9ydCBEYXRhU21hcnQKKyAgICBvbGQgPSBEYXRhU21hcnQucmVuYW1lVmFyCisgICAgZGVmIG15cmVuYW1lKHNlbGYsIGtleSwgbmV3a2V5KToKKyAgICAgICAgb2xkdmFsdWUgPSBzZWxmLmdldFZhcihuZXdrZXksIDApCisgICAgICAgIG9sZChzZWxmLCBrZXksIG5ld2tleSkKKyAgICAgICAgbmV3dmFsdWUgPSBzZWxmLmdldFZhcihuZXdrZXksIDApCisgICAgICAgIGlmIG9sZHZhbHVlOgorICAgICAgICAgICAgcmVuYW1lcyA9IHNlbGYuZ2V0VmFyKCJfX3JlY2lwZV9zYW5pdHlfcmVuYW1lcyIsIDApIG9yIHNldCgpCisgICAgICAgICAgICByZW5hbWVzLmFkZCgoa2V5LCBuZXdrZXksIG9sZHZhbHVlLCBuZXd2YWx1ZSkpCisgICAgICAgICAgICBzZWxmLnNldFZhcigiX19yZWNpcGVfc2FuaXR5X3JlbmFtZXMiLCByZW5hbWVzKQorICAgIERhdGFTbWFydC5yZW5hbWVWYXIgPSBteXJlbmFtZQorfQorYWRkaGFuZGxlciByZWNpcGVfc2FuaXR5X2VoCityZWNpcGVfc2FuaXR5X2VoW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQ29uZmlnUGFyc2VkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcmVsb2NhdGFibGUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JlbG9jYXRhYmxlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNhOTk4MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JlbG9jYXRhYmxlLmJiY2xhc3MKQEAgLTAsMCArMSw3IEBACitpbmhlcml0IGNocnBhdGgKKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJyZWxvY2F0YWJsZV9iaW5hcmllc19wcmVwcm9jZXNzIgorCitweXRob24gcmVsb2NhdGFibGVfYmluYXJpZXNfcHJlcHJvY2VzcygpIHsKKyAgICBycGF0aF9yZXBsYWNlKGQuZXhwYW5kKCcke1NZU1JPT1RfREVTVERJUn0nKSwgZCkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JlcG9ydC1lcnJvci5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcmVwb3J0LWVycm9yLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQwYzI5ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JlcG9ydC1lcnJvci5iYmNsYXNzCkBAIC0wLDAgKzEsOTIgQEAKKyMKKyMgQ29sbGVjdHMgZGVidWcgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG8gY3JlYXRlIGVycm9yIHJlcG9ydCBmaWxlcy4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjIEF1dGhvcjogQW5kcmVlYSBCcmFuZHVzYSBQcm9jYSA8YW5kcmVlYS5iLnByb2NhQGludGVsLmNvbT4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLCBzZWUgQ09QWUlORy5NSVQgZm9yIGRldGFpbHMKKworRVJSX1JFUE9SVF9ESVIgPz0gIiR7TE9HX0RJUn0vZXJyb3ItcmVwb3J0IgorCitkZWYgZXJyb3JyZXBvcnRfZ2V0ZGF0YShlKToKKyAgICBsb2dwYXRoID0gZS5kYXRhLmdldFZhcignRVJSX1JFUE9SVF9ESVInLCBUcnVlKQorICAgIGRhdGFmaWxlID0gb3MucGF0aC5qb2luKGxvZ3BhdGgsICJlcnJvci1yZXBvcnQudHh0IikKKyAgICB3aXRoIG9wZW4oZGF0YWZpbGUpIGFzIGY6CisgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgIHJldHVybiBkYXRhCisKK2RlZiBlcnJvcnJlcG9ydF9zYXZlZGF0YShlLCBuZXdkYXRhLCBmaWxlKToKKyAgICBpbXBvcnQganNvbgorICAgIGxvZ3BhdGggPSBlLmRhdGEuZ2V0VmFyKCdFUlJfUkVQT1JUX0RJUicsIFRydWUpCisgICAgZGF0YWZpbGUgPSBvcy5wYXRoLmpvaW4obG9ncGF0aCwgZmlsZSkKKyAgICB3aXRoIG9wZW4oZGF0YWZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAganNvbi5kdW1wKG5ld2RhdGEsIGYsIGluZGVudD00LCBzb3J0X2tleXM9VHJ1ZSkKKyAgICByZXR1cm4gZGF0YWZpbGUKKworcHl0aG9uIGVycm9ycmVwb3J0X2hhbmRsZXIgKCkgeworICAgICAgICBpbXBvcnQganNvbgorCisgICAgICAgIGxvZ3BhdGggPSBlLmRhdGEuZ2V0VmFyKCdFUlJfUkVQT1JUX0RJUicsIFRydWUpCisgICAgICAgIGRhdGFmaWxlID0gb3MucGF0aC5qb2luKGxvZ3BhdGgsICJlcnJvci1yZXBvcnQudHh0IikKKworICAgICAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LkJ1aWxkU3RhcnRlZCk6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIobG9ncGF0aCkKKyAgICAgICAgICAgIGRhdGEgPSB7fQorICAgICAgICAgICAgbWFjaGluZSA9IGUuZGF0YS5nZXRWYXIoIk1BQ0hJTkUiLCBUcnVlKQorICAgICAgICAgICAgZGF0YVsnbWFjaGluZSddID0gbWFjaGluZQorICAgICAgICAgICAgZGF0YVsnYnVpbGRfc3lzJ10gPSBlLmRhdGEuZ2V0VmFyKCJCVUlMRF9TWVMiLCBUcnVlKQorICAgICAgICAgICAgZGF0YVsnbmF0aXZlbHNiJ10gPSBlLmRhdGEuZ2V0VmFyKCJOQVRJVkVMU0JTVFJJTkciLCBUcnVlKQorICAgICAgICAgICAgZGF0YVsnZGlzdHJvJ10gPSBlLmRhdGEuZ2V0VmFyKCJESVNUUk8iLCBUcnVlKQorICAgICAgICAgICAgZGF0YVsndGFyZ2V0X3N5cyddID0gZS5kYXRhLmdldFZhcigiVEFSR0VUX1NZUyIsIFRydWUpCisgICAgICAgICAgICBkYXRhWydmYWlsdXJlcyddID0gW10KKyAgICAgICAgICAgIGRhdGFbJ2NvbXBvbmVudCddID0gZS5nZXRQa2dzKClbMF0KKyAgICAgICAgICAgIGRhdGFbJ2JyYW5jaF9jb21taXQnXSA9IGJhc2VfZGV0ZWN0X2JyYW5jaChlLmRhdGEpICsgIjogIiArIGJhc2VfZGV0ZWN0X3JldmlzaW9uKGUuZGF0YSkKKyAgICAgICAgICAgIGxvY2sgPSBiYi51dGlscy5sb2NrZmlsZShkYXRhZmlsZSArICcubG9jaycpCisgICAgICAgICAgICBlcnJvcnJlcG9ydF9zYXZlZGF0YShlLCBkYXRhLCAiZXJyb3ItcmVwb3J0LnR4dCIpCisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxvY2spCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGUsIGJiLmJ1aWxkLlRhc2tGYWlsZWQpOgorICAgICAgICAgICAgdGFzayA9IGUudGFzaworICAgICAgICAgICAgdGFza2RhdGE9e30KKyAgICAgICAgICAgIGxvZyA9IGUuZGF0YS5nZXRWYXIoJ0JCX0xPR0ZJTEUnLCBUcnVlKQorICAgICAgICAgICAgdGFza2RhdGFbJ3BhY2thZ2UnXSA9IGUuZGF0YS5leHBhbmQoIiR7UEZ9IikKKyAgICAgICAgICAgIHRhc2tkYXRhWyd0YXNrJ10gPSB0YXNrCisgICAgICAgICAgICBpZiBsb2c6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBsb2dGaWxlID0gb3Blbihsb2csICdyJykKKyAgICAgICAgICAgICAgICAgICAgbG9nZGF0YSA9IGxvZ0ZpbGUucmVhZCgpLmRlY29kZSgndXRmLTgnKQorICAgICAgICAgICAgICAgICAgICBsb2dGaWxlLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIGxvZ2RhdGEgPSAiVW5hYmxlIHRvIHJlYWQgbG9nIGZpbGUiCisKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9nZGF0YSA9ICJObyBMb2ciCisKKyAgICAgICAgICAgICMgc2VydmVyIHdpbGwgcmVmdXNlIGZhaWx1cmVzIGxvbmdlciB0aGFuIHBhcmFtIHNwZWNpZmllZCBpbiBwcm9qZWN0LnNldHRpbmdzLnB5CisgICAgICAgICAgICAjIE1BWF9VUExPQURfU0laRSA9ICI1MjQyODgwIgorICAgICAgICAgICAgIyB1c2UgbG93ZXIgdmFsdWUsIGJlY2F1c2UgNjUwIGNoYXJzIGNhbiBiZSBzcGVudCBpbiB0YXNrLCBwYWNrYWdlLCB2ZXJzaW9uCisgICAgICAgICAgICBtYXhfbG9nZGF0YV9zaXplID0gNTI0MjAwMAorICAgICAgICAgICAgIyB1cGxvYWQgbGFzdCBtYXhfbG9nZGF0YV9zaXplIGNoYXJhY3RlcnMKKyAgICAgICAgICAgIGlmIGxlbihsb2dkYXRhKSA+IG1heF9sb2dkYXRhX3NpemU6CisgICAgICAgICAgICAgICAgbG9nZGF0YSA9ICIuLi4iICsgbG9nZGF0YVstbWF4X2xvZ2RhdGFfc2l6ZTpdCisgICAgICAgICAgICB0YXNrZGF0YVsnbG9nJ10gPSBsb2dkYXRhCisgICAgICAgICAgICBsb2NrID0gYmIudXRpbHMubG9ja2ZpbGUoZGF0YWZpbGUgKyAnLmxvY2snKQorICAgICAgICAgICAganNvbmRhdGEgPSBqc29uLmxvYWRzKGVycm9ycmVwb3J0X2dldGRhdGEoZSkpCisgICAgICAgICAgICBqc29uZGF0YVsnZmFpbHVyZXMnXS5hcHBlbmQodGFza2RhdGEpCisgICAgICAgICAgICBlcnJvcnJlcG9ydF9zYXZlZGF0YShlLCBqc29uZGF0YSwgImVycm9yLXJlcG9ydC50eHQiKQorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsb2NrKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5CdWlsZENvbXBsZXRlZCk6CisgICAgICAgICAgICBsb2NrID0gYmIudXRpbHMubG9ja2ZpbGUoZGF0YWZpbGUgKyAnLmxvY2snKQorICAgICAgICAgICAganNvbmRhdGEgPSBqc29uLmxvYWRzKGVycm9ycmVwb3J0X2dldGRhdGEoZSkpCisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxvY2spCisgICAgICAgICAgICBmYWlsdXJlcyA9IGpzb25kYXRhWydmYWlsdXJlcyddCisgICAgICAgICAgICBpZihsZW4oZmFpbHVyZXMpID4gMCk6CisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSAiZXJyb3JfcmVwb3J0XyIgKyBlLmRhdGEuZ2V0VmFyKCJCVUlMRE5BTUUiLCBUcnVlKSsiLnR4dCIKKyAgICAgICAgICAgICAgICBkYXRhZmlsZSA9IGVycm9ycmVwb3J0X3NhdmVkYXRhKGUsIGpzb25kYXRhLCBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJUaGUgZXJyb3JzIGZvciB0aGlzIGJ1aWxkIGFyZSBzdG9yZWQgaW4gJXNcbllvdSBjYW4gc2VuZCB0aGUgZXJyb3JzIHRvIGEgcmVwb3J0cyBzZXJ2ZXIgYnkgcnVubmluZzpcbiAgc2VuZC1lcnJvci1yZXBvcnQgJXMgWy1zIHNlcnZlcl0iICUgKGRhdGFmaWxlLCBkYXRhZmlsZSkpCisgICAgICAgICAgICAgICAgYmIubm90ZSgiVGhlIGNvbnRlbnRzIG9mIHRoZXNlIGxvZ3Mgd2lsbCBiZSBwb3N0ZWQgaW4gcHVibGljIGlmIHlvdSB1c2UgdGhlIGFib3ZlIGNvbW1hbmQgd2l0aCB0aGUgZGVmYXVsdCBzZXJ2ZXIuIFBsZWFzZSBlbnN1cmUgeW91IHJlbW92ZSBhbnkgaWRlbnRpZnlpbmcgb3IgcHJvcHJpZXRhcnkgaW5mb3JtYXRpb24gd2hlbiBwcm9tcHRlZCBiZWZvcmUgc2VuZGluZy4iKQorfQorCithZGRoYW5kbGVyIGVycm9ycmVwb3J0X2hhbmRsZXIKK2Vycm9ycmVwb3J0X2hhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZFN0YXJ0ZWQgYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQgYmIuYnVpbGQuVGFza0ZhaWxlZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JtX3dvcmsuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JtX3dvcmsuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTllZmMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcm1fd29yay5iYmNsYXNzCkBAIC0wLDAgKzEsMTIwIEBACisjCisjIFJlbW92ZXMgc291cmNlIGFmdGVyIGJ1aWxkCisjCisjIFRvIHVzZSBpdCBhZGQgdGhhdCBsaW5lIHRvIGNvbmYvbG9jYWwuY29uZjoKKyMKKyMgSU5IRVJJVCArPSAicm1fd29yayIKKyMKKyMgVG8gaW5oaWJpdCBybV93b3JrIGZvciBzb21lIHJlY2lwZXMsIHNwZWNpZnkgdGhlbSBpbiBSTV9XT1JLX0VYQ0xVREUuCisjIEZvciBleGFtcGxlLCBpbiBjb25mL2xvY2FsLmNvbmY6CisjCisjIFJNX1dPUktfRVhDTFVERSArPSAiaWN1LW5hdGl2ZSBpY3UgYnVzeWJveCIKKyMKKworIyBVc2UgdGhlIGNvbXBsZXRpb24gc2NoZWR1bGVyIGJ5IGRlZmF1bHQgd2hlbiBybV93b3JrIGlzIGFjdGl2ZQorIyB0byB0cnkgYW5kIHJlZHVjZSBkaXNrIHVzYWdlCitCQl9TQ0hFRFVMRVIgPz0gImNvbXBsZXRpb24iCisKK1JNV09SS19PUklHX1RBU0sgOj0gIiR7QkJfREVGQVVMVF9UQVNLfSIKK0JCX0RFRkFVTFRfVEFTSyA9ICJybV93b3JrX2FsbCIKKworZG9fcm1fd29yayAoKSB7CisgICAgIyBJZiB0aGUgcmVjaXBlIG5hbWUgaXMgaW4gdGhlIFJNX1dPUktfRVhDTFVERSwgc2tpcCB0aGUgcmVjaXBlLgorICAgIGZvciBwIGluICR7Uk1fV09SS19FWENMVURFfTsgZG8KKyAgICAgICAgaWYgWyAiJHAiID0gIiR7UE59IiBdOyB0aGVuCisgICAgICAgICAgICBiYm5vdGUgInJtX3dvcms6IFNraXBwaW5nICR7UE59IHNpbmNlIGl0IGlzIGluIFJNX1dPUktfRVhDTFVERSIKKyAgICAgICAgICAgIGV4aXQgMAorICAgICAgICBmaQorICAgIGRvbmUKKworICAgIGNkICR7V09SS0RJUn0KKyAgICBmb3IgZGlyIGluICoKKyAgICBkbworICAgICAgICAjIFJldGFpbiBvbmx5IGxvZ3MgYW5kIG90aGVyIGZpbGVzIGluIHRlbXAsIHNhZmVseSBpZ25vcmUKKyAgICAgICAgIyBmYWlsdXJlcyBvZiByZW1vdmluZyBwc2V1ZG8gZm9sZXJzIG9uIE5GUzIvMyBzZXJ2ZXIuCisgICAgICAgIGlmIFsgJGRpciA9ICdwc2V1ZG8nIF07IHRoZW4KKyAgICAgICAgICAgIHJtIC1yZiAkZGlyIDI+IC9kZXYvbnVsbCB8fCB0cnVlCisgICAgICAgIGVsaWYgWyAkZGlyICE9ICd0ZW1wJyBdOyB0aGVuCisgICAgICAgICAgICBybSAtcmYgJGRpcgorICAgICAgICBmaQorICAgIGRvbmUKKworICAgICMgTmVlZCB0byBhZGQgcHNldWRvIGJhY2sgb3Igc3Vic3FldWVudCB3b3JrIGluIHRoaXMgd29ya2RpcgorICAgICMgbWlnaHQgZmFpbCBzaW5jZSBzZXRzY2VuZSBtYXkgbm90IHJlcnVuIHRvIHJlY3JlYXRlIGl0CisgICAgbWtkaXIgLXAgJHtXT1JLRElSfS9wc2V1ZG8vCisKKyAgICAjIENoYW5nZSBub3JtYWwgc3RhbXBzIGludG8gc2V0c2NlbmUgc3RhbXBzIGFzIHRoZXkgYmV0dGVyIHJlZmxlY3QgdGhlCisgICAgIyBmYWN0IFdPUktESVIgaXMgbm93IGVtcHR5CisgICAgIyBBbHNvIGxlYXZlIG5vZXhlYyBzdGFtcHMgc2luY2Ugc2V0c2NlbmUgc3RhbXBzIGRvbid0IGNvdmVyIHRoZW0KKyAgICBjZCBgZGlybmFtZSAke1NUQU1QfWAKKyAgICBmb3IgaSBpbiBgYmFzZW5hbWUgJHtTVEFNUH1gKgorICAgIGRvCisgICAgICAgIGZvciBqIGluICR7U1NUQVRFVEFTS1N9IGRvX3NoYXJlZF93b3JrZGlyCisgICAgICAgIGRvCisgICAgICAgICAgICBjYXNlICRpIGluCisgICAgICAgICAgICAqZG9fc2V0c2NlbmUqKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICpzaWdkYXRhKikKKyAgICAgICAgICAgICAgICBpPWR1bW15CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKmRvX3BhY2thZ2Vfd3JpdGUqKQorICAgICAgICAgICAgICAgIGk9ZHVtbXkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqZG9fYnVpbGQqKQorICAgICAgICAgICAgICAgIGk9ZHVtbXkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAjIFdlIHJlbW92ZSBkb19wYWNrYWdlIGVudGlyZWx5LCBpbmNsdWRpbmcgYW55CisgICAgICAgICAgICAjIHNzdGF0ZSB2ZXJzaW9uIHNpbmNlIG90aGVyd2lzZSB3ZSdkIG5lZWQgdG8gbGVhdmUgJ3BsYWluZGlycycgYXJvdW5kCisgICAgICAgICAgICAjIHN1Y2ggYXMgJ3BhY2thZ2VzJyBhbmQgJ3BhY2thZ2VzLXNwbGl0JyBhbmQgdGhlc2UgY2FuIGJlIGxhcmdlLiBObyBlbmQKKyAgICAgICAgICAgICMgb2YgY2hhaW4gdGFza3MgZGVwZW5kIGRpcmVjdGx5IG9uIGRvX3BhY2thZ2UgYW55bW9yZS4KKyAgICAgICAgICAgICpkb19wYWNrYWdlfCpkb19wYWNrYWdlLip8KmRvX3BhY2thZ2Vfc2V0c2NlbmUuKikKKyAgICAgICAgICAgICAgICBybSAtZiAkaTsKKyAgICAgICAgICAgICAgICBpPWR1bW15CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKl9zZXRzY2VuZSopCisgICAgICAgICAgICAgICAgaT1kdW1teQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICokanwqJGouKikKKyAgICAgICAgICAgICAgICBtdiAkaSBgZWNobyAkaSB8IHNlZCAtZSAicyMke2p9IyR7an1fc2V0c2NlbmUjImAKKyAgICAgICAgICAgICAgICBpPWR1bW15CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgIGRvbmUKKyAgICAgICAgcm0gLWYgJGkKKyAgICBkb25lCit9CithZGR0YXNrIHJtX3dvcmsgYWZ0ZXIgZG9fJHtSTVdPUktfT1JJR19UQVNLfQorCitkb19ybV93b3JrX2FsbCAoKSB7CisgICAgOgorfQorZG9fcm1fd29ya19hbGxbcmVjcmRlcHRhc2tdID0gImRvX3JtX3dvcmsiCithZGR0YXNrIHJtX3dvcmtfYWxsIGFmdGVyIGRvX3JtX3dvcmsKKworZG9fcG9wdWxhdGVfc2RrW3Bvc3RmdW5jc10gKz0gInJtX3dvcmtfcG9wdWxhdGVzZGsiCitybV93b3JrX3BvcHVsYXRlc2RrICgpIHsKKyAgICA6Cit9CitybV93b3JrX3BvcHVsYXRlc2RrW2NsZWFuZGlyc10gPSAiJHtXT1JLRElSfS9zZGsiCisKK2RvX3Jvb3Rmc1twb3N0ZnVuY3NdICs9ICJybV93b3JrX3Jvb3RmcyIKK3JtX3dvcmtfcm9vdGZzICgpIHsKKyAgICA6Cit9CitybV93b3JrX3Jvb3Rmc1tjbGVhbmRpcnNdID0gIiR7V09SS0RJUn0vcm9vdGZzIgorCitweXRob24gKCkgeworICAgICMgSWYgdGhlIHJlY2lwZSBuYW1lIGlzIGluIHRoZSBSTV9XT1JLX0VYQ0xVREUsIHNraXAgdGhlIHJlY2lwZS4KKyAgICBleGNsdWRlcyA9IChkLmdldFZhcigiUk1fV09SS19FWENMVURFIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgaWYgcG4gaW4gZXhjbHVkZXM6CisgICAgICAgIGQuZGVsVmFyRmxhZygncm1fd29ya19yb290ZnMnLCAnY2xlYW5kaXJzJykKKyAgICAgICAgZC5kZWxWYXJGbGFnKCdybV93b3JrX3BvcHVsYXRlc2RrJywgJ2NsZWFuZGlycycpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yb290ZnNfZGViLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yb290ZnNfZGViLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxYjQ1OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Jvb3Rmc19kZWIuYmJjbGFzcwpAQCAtMCwwICsxLDM5IEBACisjCisjIENvcHlyaWdodCAyMDA2LTIwMDcgT3BlbmVkaGFuZCBMdGQuCisjCisKK1JPT1RGU19QS0dNQU5BR0UgPSAiZHBrZyBhcHQiCitST09URlNfUEtHTUFOQUdFX0JPT1RTVFJBUCAgPSAicnVuLXBvc3RpbnN0cyIKKworZG9fcm9vdGZzW2RlcGVuZHNdICs9ICJkcGtnLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IGFwdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK2RvX3BvcHVsYXRlX3Nka1tkZXBlbmRzXSArPSAiZHBrZy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBhcHQtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgYnppcDItbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCitkb19yb290ZnNbcmVjcmRlcHRhc2tdICs9ICJkb19wYWNrYWdlX3dyaXRlX2RlYiIKK3Jvb3Rmc19kZWJfZG9fcm9vdGZzW3ZhcmRlcHNleGNsdWRlXSArPSAiQlVJTEROQU1FIgorZG9fcm9vdGZzW3ZhcmRlcHNdICs9ICJQQUNLQUdFX0ZFRURfVVJJUyIKKworZG9fcm9vdGZzW2xvY2tmaWxlc10gKz0gIiR7REVQTE9ZX0RJUl9ERUJ9L2RlYi5sb2NrIgorZG9fcG9wdWxhdGVfc2RrW2xvY2tmaWxlc10gKz0gIiR7REVQTE9ZX0RJUl9ERUJ9L2RlYi5sb2NrIgorCitweXRob24gcm9vdGZzX2RlYl9iYWRfcmVjb21tZW5kYXRpb25zKCkgeworICAgIGlmIGQuZ2V0VmFyKCJCQURfUkVDT01NRU5EQVRJT05TIiwgVHJ1ZSk6CisgICAgICAgIGJiLndhcm4oIkRlYmlhbiBwYWNrYWdlIGluc3RhbGwgZG9lcyBub3Qgc3VwcG9ydCBCQURfUkVDT01NRU5EQVRJT05TIikKK30KK2RvX3Jvb3Rmc1twcmVmdW5jc10gKz0gInJvb3Rmc19kZWJfYmFkX3JlY29tbWVuZGF0aW9ucyIKKworREVCX1BPU1RQUk9DRVNTX0NPTU1BTkRTID0gIiIKKworb3BrZ2xpYmRpciA9ICIke2xvY2Fsc3RhdGVkaXJ9L2xpYi9vcGtnIgorCitweXRob24gKCkgeworICAgICMgTWFwIFRBUkdFVF9BUkNIIHRvIERlYmlhbidzIGlkZWFzIGFib3V0IGFyY2hpdGVjdHVyZXMKKyAgICBkYXJjaCA9IGQuZ2V0VmFyKCdTREtfQVJDSCcsIFRydWUpCisgICAgaWYgZGFyY2ggaW4gWyJ4ODYiLCAiaTQ4NiIsICJpNTg2IiwgImk2ODYiLCAicGVudGl1bSJdOgorICAgICAgICAgZC5zZXRWYXIoJ0RFQl9TREtfQVJDSCcsICdpMzg2JykKKyAgICBlbGlmIGRhcmNoID09ICJ4ODZfNjQiOgorICAgICAgICAgZC5zZXRWYXIoJ0RFQl9TREtfQVJDSCcsICdhbWQ2NCcpCisgICAgZWxpZiBkYXJjaCA9PSAiYXJtIjoKKyAgICAgICAgIGQuc2V0VmFyKCdERUJfU0RLX0FSQ0gnLCAnYXJtZWwnKQorfQorCisjIFRoaXMgd2lsbCBvZiBjb3Vyc2Ugb25seSB3b3JrIGFmdGVyIHJvb3Rmc19kZWJfZG9fcm9vdGZzIG9yIHBvcHVsYXRlX3Nka19kZWIgaGFzIGJlZW4gY2FsbGVkCitEUEtHX1FVRVJZX0NPTU1BTkQgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2Rwa2ctcXVlcnkgLS1hZG1pbmRpcj0kSU5TVEFMTF9ST09URlNfREVCL3Zhci9saWIvZHBrZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Jvb3Rmc19pcGsuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Jvb3Rmc19pcGsuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDE0NGU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcm9vdGZzX2lway5iYmNsYXNzCkBAIC0wLDAgKzEsMzkgQEAKKyMKKyMgQ3JlYXRlcyBhIHJvb3QgZmlsZXN5c3RlbSBvdXQgb2YgSVBLcworIworIyBUaGlzIHJvb3RmcyBjYW4gYmUgbW91bnRlZCB2aWEgcm9vdC1uZnMgb3IgaXQgY2FuIGJlIHB1dCBpbnRvIGFuIGNyYW1mcy9qZmZzIGV0Yy4KKyMgU2VlIGltYWdlLmJiY2xhc3MgZm9yIGEgdXNhZ2Ugb2YgdGhpcy4KKyMKKworRVhUUkFPUEtHQ09ORklHID89ICIiCitST09URlNfUEtHTUFOQUdFID0gIm9wa2cgJHtFWFRSQU9QS0dDT05GSUd9IgorUk9PVEZTX1BLR01BTkFHRV9CT09UU1RSQVAgID0gInJ1bi1wb3N0aW5zdHMiCisKK2RvX3Jvb3Rmc1tkZXBlbmRzXSArPSAib3BrZy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBvcGtnLXV0aWxzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorZG9fcG9wdWxhdGVfc2RrW2RlcGVuZHNdICs9ICJvcGtnLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IG9wa2ctdXRpbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCitkb19yb290ZnNbcmVjcmRlcHRhc2tdICs9ICJkb19wYWNrYWdlX3dyaXRlX2lwayIKK2RvX3Jvb3Rmc1t2YXJkZXBzXSArPSAiUEFDS0FHRV9GRUVEX1VSSVMiCityb290ZnNfaXBrX2RvX3Jvb3Rmc1t2YXJkZXBzZXhjbHVkZV0gKz0gIkJVSUxETkFNRSIKKworZG9fcm9vdGZzW2xvY2tmaWxlc10gKz0gIiR7V09SS0RJUn0vaXBrLmxvY2siCitkb19wb3B1bGF0ZV9zZGtbbG9ja2ZpbGVzXSArPSAiJHtXT1JLRElSfS9pcGsubG9jayIKKworT1BLR19QUkVQUk9DRVNTX0NPTU1BTkRTID0gIiIKKworT1BLR19QT1NUUFJPQ0VTU19DT01NQU5EUyA9ICIiCisKK09QS0dMSUJESVIgPSAiJHtsb2NhbHN0YXRlZGlyfS9saWIiCisKK01VTFRJTElCUkVfQUxMT1dfUkVQID0gIiR7T1BLR0xJQkRJUn0vb3BrZ3wvdXNyL2xpYi9vcGtnIgorCitweXRob24gKCkgeworCisgICAgaWYgZC5nZXRWYXIoJ0JVSUxEX0lNQUdFU19GUk9NX0ZFRURTJywgVHJ1ZSk6CisgICAgICAgIGZsYWdzID0gZC5nZXRWYXJGbGFnKCdkb19yb290ZnMnLCAncmVjcmRlcHRhc2snKQorICAgICAgICBmbGFncyA9IGZsYWdzLnJlcGxhY2UoImRvX3BhY2thZ2Vfd3JpdGVfaXBrIiwgIiIpCisgICAgICAgIGZsYWdzID0gZmxhZ3MucmVwbGFjZSgiZG9fZGVwbG95IiwgIiIpCisgICAgICAgIGZsYWdzID0gZmxhZ3MucmVwbGFjZSgiZG9fcG9wdWxhdGVfc3lzcm9vdCIsICIiKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3Jvb3RmcycsICdyZWNyZGVwdGFzaycsIGZsYWdzKQorICAgICAgICBkLnNldFZhcignT1BLR19QUkVQUk9DRVNTX0NPTU1BTkRTJywgIiIpCisgICAgICAgIGQuc2V0VmFyKCdPUEtHX1BPU1RQUk9DRVNTX0NPTU1BTkRTJywgJycpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yb290ZnNfcnBtLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yb290ZnNfcnBtLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg1ZDAwMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Jvb3Rmc19ycG0uYmJjbGFzcwpAQCAtMCwwICsxLDQ3IEBACisjCisjIENyZWF0ZXMgYSByb290IGZpbGVzeXN0ZW0gb3V0IG9mIHJwbSBwYWNrYWdlcworIworCitST09URlNfUEtHTUFOQUdFID0gInJwbSBzbWFydHBtIgorUk9PVEZTX1BLR01BTkFHRV9CT09UU1RSQVAgPSAicnVuLXBvc3RpbnN0cyIKKworIyBBZGQgNTBNZWcgb2YgZXh0cmEgc3BhY2UgZm9yIFNtYXJ0CitJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0VfYXBwZW5kID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJQQUNLQUdFX0lOU1RBTEwiLCAic21hcnRwbSIsICIgKyA1MTIwMCIsICIiICxkKX0iCisKKyMgU21hcnQgaXMgcHl0aG9uIGJhc2VkLCBzbyBiZSBzdXJlIHB5dGhvbi1uYXRpdmUgaXMgYXZhaWxhYmxlIHRvIHVzLgorRVhUUkFOQVRJVkVQQVRIICs9ICJweXRob24tbmF0aXZlIgorCisjIG9wa2cgaXMgbmVlZGVkIGZvciB1cGRhdGUtYWx0ZXJuYXRpdmVzCitSUE1ST09URlNERVBFTkRTID0gInJwbS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgcnBtcmVzb2x2ZS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgcHl0aG9uLXNtYXJ0cG0tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAorICAgIGNyZWF0ZXJlcG8tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAorICAgIG9wa2ctbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK2RvX3Jvb3Rmc1tkZXBlbmRzXSArPSAiJHtSUE1ST09URlNERVBFTkRTfSIKK2RvX3BvcHVsYXRlX3Nka1tkZXBlbmRzXSArPSAiJHtSUE1ST09URlNERVBFTkRTfSIKKworZG9fcm9vdGZzW3JlY3JkZXB0YXNrXSArPSAiZG9fcGFja2FnZV93cml0ZV9ycG0iCityb290ZnNfcnBtX2RvX3Jvb3Rmc1t2YXJkZXBzZXhjbHVkZV0gKz0gIkJVSUxETkFNRSIKK2RvX3Jvb3Rmc1t2YXJkZXBzXSArPSAiUEFDS0FHRV9GRUVEX1VSSVMiCisKKyMgUlBNIGRvZXNuJ3Qgd29yayB3aXRoIG11bHRpcGxlIHJvb3RmcyBnZW5lcmF0aW9uIGF0IG9uY2UgZHVlIHRvIGNvbGxpc2lvbnMgaW4gdGhlIHVzZSBvZiBmaWxlcyAKKyMgaW4gJHtERVBMT1lfRElSX1JQTX0uIFRoaXMgY2FuIGJlIHJlbW92ZWQgaWYgcGFja2FnZV91cGRhdGVfaW5kZXhfcnBtIGNhbiBiZSBjYWxsZWQgY29uY3VycmVudGx5Citkb19yb290ZnNbbG9ja2ZpbGVzXSArPSAiJHtERVBMT1lfRElSX1JQTX0vcnBtLmxvY2siCitkb19wb3B1bGF0ZV9zZGtbbG9ja2ZpbGVzXSArPSAiJHtERVBMT1lfRElSX1JQTX0vcnBtLmxvY2siCisKK3B5dGhvbiAoKSB7CisgICAgaWYgZC5nZXRWYXIoJ0JVSUxEX0lNQUdFU19GUk9NX0ZFRURTJywgVHJ1ZSk6CisgICAgICAgIGZsYWdzID0gZC5nZXRWYXJGbGFnKCdkb19yb290ZnMnLCAncmVjcmRlcHRhc2snKQorICAgICAgICBmbGFncyA9IGZsYWdzLnJlcGxhY2UoImRvX3BhY2thZ2Vfd3JpdGVfcnBtIiwgIiIpCisgICAgICAgIGZsYWdzID0gZmxhZ3MucmVwbGFjZSgiZG9fZGVwbG95IiwgIiIpCisgICAgICAgIGZsYWdzID0gZmxhZ3MucmVwbGFjZSgiZG9fcG9wdWxhdGVfc3lzcm9vdCIsICIiKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3Jvb3RmcycsICdyZWNyZGVwdGFzaycsIGZsYWdzKQorICAgICAgICBkLnNldFZhcignUlBNX1BSRVBST0NFU1NfQ09NTUFORFMnLCAnJykKKyAgICAgICAgZC5zZXRWYXIoJ1JQTV9QT1NUUFJPQ0VTU19DT01NQU5EUycsICcnKQorCit9CisjIFNtYXJ0IGlzIHB5dGhvbiBiYXNlZCwgc28gYmUgc3VyZSBweXRob24tbmF0aXZlIGlzIGF2YWlsYWJsZSB0byB1cy4KK0VYVFJBTkFUSVZFUEFUSCArPSAicHl0aG9uLW5hdGl2ZSIKKworcnBtbGliZGlyID0gIi92YXIvbGliL3JwbSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Jvb3Rmc2RlYnVnZmlsZXMuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Jvb3Rmc2RlYnVnZmlsZXMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTU4ODcxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcm9vdGZzZGVidWdmaWxlcy5iYmNsYXNzCkBAIC0wLDAgKzEsMzYgQEAKKyMgVGhpcyBjbGFzcyBpbnN0YWxscyBhZGRpdGlvbmFsIGZpbGVzIGZvdW5kIG9uIHRoZSBidWlsZCBob3N0CisjIGRpcmVjdGx5IGludG8gdGhlIHJvb3Rmcy4KKyMKKyMgT25lIHVzZSBjYXNlIGlzIHRvIGluc3RhbGwgYSBjb25zdGFudCBzc2ggaG9zdCBrZXkgaW4KKyMgYW4gaW1hZ2UgdGhhdCBnZXRzIGNyZWF0ZWQgZm9yIGp1c3Qgb25lIG1hY2hpbmUuIFRoaXMKKyMgc29sdmVzIHR3byBpc3N1ZXM6CisjIC0gaG9zdCBrZXkgZ2VuZXJhdGlvbiBvbiB0aGUgZGV2aWNlIGNhbiBzdGFsbCB3aGVuIHRoZQorIyAgIGtlcm5lbCBoYXMgbm90IGdhdGhlcmVkIGVub3VnaCBlbnRyb3B5IHlldCAoc2VlbiBpbiBwcmFjdGljZQorIyAgIHVuZGVyIHFlbXUpCisjIC0gc3NoIGNvbXBsYWlucyBieSBkZWZhdWx0IHdoZW4gdGhlIGhvc3Qga2V5IGNoYW5nZXMKKyMKKyMgRm9yIGRyb3BiZWFyLCB3aXRoIHRoZSBzc2ggaG9zdCBrZXkgc3RvcmUgYWxvbmcgc2lkZSB0aGUgbG9jYWwuY29uZjoKKyMgMS4gRXh0ZW5kIGxvY2FsLmNvbmY6CisjICAgIElOSEVSSVQgKz0gInJvb3Rmc2RlYnVnZmlsZXMiCisjICAgIFJPT1RGU19ERUJVR19GSUxFUyArPSAiJHtUT1BESVJ9L2NvbmYvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5ICR7SU1BR0VfUk9PVEZTfS9ldGMvZHJvcGJlYXIvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5IDsiCisjIDIuIEJvb3QgdGhlIGltYWdlIG9uY2UsIGNvcHkgdGhlIGRyb3BiZWFyX3JzYV9ob3N0X2tleSBmcm9tCisjICAgIHRoZSBkZXZpY2UgaW50byB5b3VyIGJ1aWxkIGNvbmYgZGlyZWN0b3J5LgorIworIyBEbyBub3QgdXNlIGZvciBwcm9kdWN0aW9uIGltYWdlcyEgSXQgYnlwYXNzZXMgc2V2ZXJhbAorIyBjb3JlIGJ1aWxkIG1lY2hhbmlzbXMgKHVwZGF0aW5nIHRoZSBpbWFnZSB3aGVuIG9uZQorIyBvZiB0aGUgZmlsZXMgY2hhbmdlcywgbGljZW5zZSB0cmFja2luZyBpbiB0aGUgaW1hZ2UKKyMgbWFuaWZlc3QsIC4uLikuCisKK1JPT1RGU19ERUJVR19GSUxFUyA/PSAiIgorUk9PVEZTX0RFQlVHX0ZJTEVTW2RvY10gPSAiTGlzdHMgYWRkaXRpb25hbCBmaWxlcyBvciBkaXJlY3RvcmllcyB0byBiZSBpbnN0YWxsZWQgd2l0aCAnY3AgLWEnIGluIHRoZSBmb3JtYXQgJ3NvdXJjZTEgdGFyZ2V0MTtzb3VyY2UyIHRhcmdldDI7Li4uJyIKKworUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gInJvb3Rmc19kZWJ1Z19maWxlcyA7Igorcm9vdGZzX2RlYnVnX2ZpbGVzICgpIHsKKyAgICMhL2Jpbi9zaCAtZQorICAgZWNobyAiJHtST09URlNfREVCVUdfRklMRVN9IiB8IHNlZCAtZSAncy87L1xuL2cnIHwgd2hpbGUgcmVhZCBzb3VyY2UgdGFyZ2V0OyBkbworICAgICAgaWYgWyAtZSAiJHNvdXJjZSIgXTsgdGhlbgorICAgICAgICAgbWtkaXIgLXAgJChkaXJuYW1lICR0YXJnZXQpCisgICAgICAgICBjcCAtYSAkc291cmNlICR0YXJnZXQKKyAgICAgIGZpCisgICBkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zYW5pdHkuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Nhbml0eS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYjc0NGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zYW5pdHkuYmJjbGFzcwpAQCAtMCwwICsxLDk0NSBAQAorIworIyBTYW5pdHkgY2hlY2sgdGhlIHVzZXJzIHNldHVwIGZvciBjb21tb24gbWlzY29uZmlndXJhdGlvbnMKKyMKKworU0FOSVRZX1JFUVVJUkVEX1VUSUxJVElFUyA/PSAicGF0Y2ggZGlmZnN0YXQgbWFrZWluZm8gZ2l0IGJ6aXAyIHRhciBcCisgICAgZ3ppcCBnYXdrIGNocnBhdGggd2dldCBjcGlvIHBlcmwiCisKK2RlZiBiYmxheWVyc19jb25mX2ZpbGUoZCk6CisgICAgcmV0dXJuIG9zLnBhdGguam9pbihkLmdldFZhcignVE9QRElSJywgVHJ1ZSksICdjb25mL2JibGF5ZXJzLmNvbmYnKQorCitkZWYgc2FuaXR5X2NvbmZfcmVhZChmbik6CisgICAgd2l0aCBvcGVuKGZuLCAncicpIGFzIGY6CisgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgIHJldHVybiBsaW5lcworCitkZWYgc2FuaXR5X2NvbmZfZmluZF9saW5lKHBhdHRlcm4sIGxpbmVzKToKKyAgICBpbXBvcnQgcmUKKyAgICByZXR1cm4gbmV4dCgoKGluZGV4LCBsaW5lKQorICAgICAgICBmb3IgaW5kZXgsIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzKQorICAgICAgICBpZiByZS5zZWFyY2gocGF0dGVybiwgbGluZSkpLCAoTm9uZSwgTm9uZSkpCisKK2RlZiBzYW5pdHlfY29uZl91cGRhdGUoZm4sIGxpbmVzLCB2ZXJzaW9uX3Zhcl9uYW1lLCBuZXdfdmVyc2lvbik6CisgICAgaW5kZXgsIGxpbmUgPSBzYW5pdHlfY29uZl9maW5kX2xpbmUodmVyc2lvbl92YXJfbmFtZSwgbGluZXMpCisgICAgbGluZXNbaW5kZXhdID0gJyVzID0gIiVkIlxuJyAlICh2ZXJzaW9uX3Zhcl9uYW1lLCBuZXdfdmVyc2lvbikKKyAgICB3aXRoIG9wZW4oZm4sICJ3IikgYXMgZjoKKyAgICAgICAgZi53cml0ZSgnJy5qb2luKGxpbmVzKSkKKworIyBGdW5jdGlvbnMgYWRkZWQgdG8gdGhpcyB2YXJpYWJsZSBNVVNUIHRocm93IGFuIGV4Y2VwdGlvbiAob3Igc3lzLmV4aXQoKSkgdW5sZXNzIHRoZXkKKyMgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQgTENPTkZfVkVSU0lPTiBpbiBiYmxheWVycy5jb25mCitCQkxBWUVSU19DT05GX1VQREFURV9GVU5DUyArPSAib2Vjb3JlX3VwZGF0ZV9iYmxheWVycyIKKworcHl0aG9uIG9lY29yZV91cGRhdGVfYmJsYXllcnMoKSB7CisgICAgIyBiYmxheWVycy5jb25mIGlzIG91dCBvZiBkYXRlLCBzbyBzZWUgaWYgd2UgY2FuIHJlc29sdmUgdGhhdAorCisgICAgY3VycmVudF9sY29uZiA9IGludChkLmdldFZhcignTENPTkZfVkVSU0lPTicsIFRydWUpKQorICAgIGlmIG5vdCBjdXJyZW50X2xjb25mOgorICAgICAgICBzeXMuZXhpdCgpCisgICAgbGNvbmZfdmVyc2lvbiA9IGludChkLmdldFZhcignTEFZRVJfQ09ORl9WRVJTSU9OJywgVHJ1ZSkpCisgICAgbGluZXMgPSBbXQorCisgICAgaWYgY3VycmVudF9sY29uZiA8IDQ6CisgICAgICAgIHN5cy5leGl0KCkKKworICAgIGJibGF5ZXJzX2ZuID0gYmJsYXllcnNfY29uZl9maWxlKGQpCisgICAgbGluZXMgPSBzYW5pdHlfY29uZl9yZWFkKGJibGF5ZXJzX2ZuKQorCisgICAgaWYgY3VycmVudF9sY29uZiA9PSA0IGFuZCBsY29uZl92ZXJzaW9uID4gNDoKKyAgICAgICAgdG9wZGlyX3ZhciA9ICckJyArICd7VE9QRElSfScKKyAgICAgICAgaW5kZXgsIGJicGF0aF9saW5lID0gc2FuaXR5X2NvbmZfZmluZF9saW5lKCdCQlBBVEgnLCBsaW5lcykKKyAgICAgICAgaWYgYmJwYXRoX2xpbmU6CisgICAgICAgICAgICBzdGFydCA9IGJicGF0aF9saW5lLmZpbmQoJyInKQorICAgICAgICAgICAgaWYgc3RhcnQgIT0gLTEgYW5kIChsZW4oYmJwYXRoX2xpbmUpICE9IChzdGFydCArIDEpKToKKyAgICAgICAgICAgICAgICBpZiBiYnBhdGhfbGluZVtzdGFydCArIDFdID09ICciJzoKKyAgICAgICAgICAgICAgICAgICAgbGluZXNbaW5kZXhdID0gKGJicGF0aF9saW5lWzpzdGFydCArIDFdICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcGRpcl92YXIgKyBiYnBhdGhfbGluZVtzdGFydCArIDE6XSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgdG9wZGlyX3ZhciBpbiBiYnBhdGhfbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzW2luZGV4XSA9IChiYnBhdGhfbGluZVs6c3RhcnQgKyAxXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BkaXJfdmFyICsgJzonICsgYmJwYXRoX2xpbmVbc3RhcnQgKyAxOl0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN5cy5leGl0KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGluZGV4LCBiYmZpbGVzX2xpbmUgPSBzYW5pdHlfY29uZl9maW5kX2xpbmUoJ0JCRklMRVMnLCBsaW5lcykKKyAgICAgICAgICAgIGlmIGJiZmlsZXNfbGluZToKKyAgICAgICAgICAgICAgICBsaW5lcy5pbnNlcnQoaW5kZXgsICdCQlBBVEggPSAiJyArIHRvcGRpcl92YXIgKyAnIlxuJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3lzLmV4aXQoKQorCisgICAgICAgIGN1cnJlbnRfbGNvbmYgKz0gMQorICAgICAgICBzYW5pdHlfY29uZl91cGRhdGUoYmJsYXllcnNfZm4sIGxpbmVzLCAnTENPTkZfVkVSU0lPTicsIGN1cnJlbnRfbGNvbmYpCisgICAgICAgIHJldHVybgorCisgICAgZWxpZiBjdXJyZW50X2xjb25mID09IDUgYW5kIGxjb25mX3ZlcnNpb24gPiA1OgorICAgICAgICAjIE51bGwgdXBkYXRlLCB0byBhdm9pZCBpc3N1ZXMgd2l0aCBwZW9wbGUgc3dpdGNoaW5nIGJldHdlZW4gcG9reSBhbmQgb3RoZXIgZGlzdHJvcworICAgICAgICBjdXJyZW50X2xjb25mID0gNgorICAgICAgICBzYW5pdHlfY29uZl91cGRhdGUoYmJsYXllcnNfZm4sIGxpbmVzLCAnTENPTkZfVkVSU0lPTicsIGN1cnJlbnRfbGNvbmYpCisgICAgICAgIHJldHVybgorCisgICAgc3lzLmV4aXQoKQorfQorCitkZWYgcmFpc2Vfc2FuaXR5X2Vycm9yKG1zZywgZCwgbmV0d29ya19lcnJvcj1GYWxzZSk6CisgICAgaWYgZC5nZXRWYXIoIlNBTklUWV9VU0VfRVZFTlRTIiwgVHJ1ZSkgPT0gIjEiOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LlNhbml0eUNoZWNrRmFpbGVkKG1zZywgbmV0d29ya19lcnJvciksIGQpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LlNhbml0eUNoZWNrRmFpbGVkKG1zZyksIGQpCisgICAgICAgIHJldHVybgorCisgICAgYmIuZmF0YWwoIiIiIE9FLWNvcmUncyBjb25maWcgc2FuaXR5IGNoZWNrZXIgZGV0ZWN0ZWQgYSBwb3RlbnRpYWwgbWlzY29uZmlndXJhdGlvbi4KKyAgICBFaXRoZXIgZml4IHRoZSBjYXVzZSBvZiB0aGlzIGVycm9yIG9yIGF0IHlvdXIgb3duIHJpc2sgZGlzYWJsZSB0aGUgY2hlY2tlciAoc2VlIHNhbml0eS5jb25mKS4KKyAgICBGb2xsb3dpbmcgaXMgdGhlIGxpc3Qgb2YgcG90ZW50aWFsIHByb2JsZW1zIC8gYWR2aXNvcmllczoKKyAgICAKKyAgICAlcyIiIiAlIG1zZykKKworIyBDaGVjayBmbGFncyBhc3NvY2lhdGVkIHdpdGggYSB0dW5pbmcuCitkZWYgY2hlY2tfdG9vbGNoYWluX3R1bmVfYXJncyhkYXRhLCB0dW5lLCBtdWx0aWxpYiwgZXJycyk6CisgICAgZm91bmRfZXJyb3JzID0gRmFsc2UKKyAgICBpZiBjaGVja190b29sY2hhaW5fYXJnc19wcmVzZW50KGRhdGEsIHR1bmUsIG11bHRpbGliLCBlcnJzLCAnQ0NBUkdTJyk6CisgICAgICAgIGZvdW5kX2Vycm9ycyA9IFRydWUKKyAgICBpZiBjaGVja190b29sY2hhaW5fYXJnc19wcmVzZW50KGRhdGEsIHR1bmUsIG11bHRpbGliLCBlcnJzLCAnQVNBUkdTJyk6CisgICAgICAgIGZvdW5kX2Vycm9ycyA9IFRydWUKKyAgICBpZiBjaGVja190b29sY2hhaW5fYXJnc19wcmVzZW50KGRhdGEsIHR1bmUsIG11bHRpbGliLCBlcnJzLCAnTERBUkdTJyk6CisgICAgICAgIGZvdW5kX2Vycm9ycyA9IFRydWUKKworICAgIHJldHVybiBmb3VuZF9lcnJvcnMKKworZGVmIGNoZWNrX3Rvb2xjaGFpbl9hcmdzX3ByZXNlbnQoZGF0YSwgdHVuZSwgbXVsdGlsaWIsIHR1bmVfZXJyb3JzLCB3aGljaCk6CisgICAgYXJnc19zZXQgPSAoZGF0YS5nZXRWYXIoIlRVTkVfJXMiICUgd2hpY2gsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgYXJnc193YW50ZWQgPSAoZGF0YS5nZXRWYXIoIlRVTkVBQklfUkVRVUlSRURfJXNfdHVuZS0lcyIgJSAod2hpY2gsIHR1bmUpLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGFyZ3NfbWlzc2luZyA9IFtdCisKKyAgICAjIElmIG5vIGFyZ3MgYXJlIGxpc3RlZC9yZXF1aXJlZCwgd2UgYXJlIGRvbmUuCisgICAgaWYgbm90IGFyZ3Nfd2FudGVkOgorICAgICAgICByZXR1cm4KKyAgICBmb3IgYXJnIGluIGFyZ3Nfd2FudGVkOgorICAgICAgICBpZiBhcmcgbm90IGluIGFyZ3Nfc2V0OgorICAgICAgICAgICAgYXJnc19taXNzaW5nLmFwcGVuZChhcmcpCisKKyAgICBmb3VuZF9lcnJvcnMgPSBGYWxzZQorICAgIGlmIGFyZ3NfbWlzc2luZzoKKyAgICAgICAgZm91bmRfZXJyb3JzID0gVHJ1ZQorICAgICAgICB0dW5lX2Vycm9ycy5hcHBlbmQoIlRVTkVBQkkgZm9yICVzIHJlcXVpcmVzICclcycgaW4gVFVORV8lcyAoJXMpLiIgJQorICAgICAgICAgICAgICAgICAgICAgICAodHVuZSwgJyAnLmpvaW4oYXJnc19taXNzaW5nKSwgd2hpY2gsICcgJy5qb2luKGFyZ3Nfc2V0KSkpCisgICAgcmV0dXJuIGZvdW5kX2Vycm9ycworCisjIENoZWNrIGEgc2luZ2xlIHR1bmUgZm9yIHZhbGlkaXR5LgorZGVmIGNoZWNrX3Rvb2xjaGFpbl90dW5lKGRhdGEsIHR1bmUsIG11bHRpbGliKToKKyAgICB0dW5lX2Vycm9ycyA9IFtdCisgICAgaWYgbm90IHR1bmU6CisgICAgICAgIHJldHVybiAiTm8gdHVuaW5nIGZvdW5kIGZvciAlcyBtdWx0aWxpYi4iICUgbXVsdGlsaWIKKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZGF0YSkKKyAgICBpZiBtdWx0aWxpYiAhPSAiZGVmYXVsdCI6CisgICAgICAgICMgQXBwbHkgdGhlIG92ZXJyaWRlcyBzbyB3ZSBjYW4gbG9vayBhdCB0aGUgZGV0YWlscy4KKyAgICAgICAgb3ZlcnJpZGVzID0gbG9jYWxkYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgIjp2aXJ0Y2xhc3MtbXVsdGlsaWItIiArIG11bHRpbGliCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIG92ZXJyaWRlcykKKyAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICBiYi5kZWJ1ZygyLCAiU2FuaXR5LWNoZWNraW5nIHR1bmluZyAnJXMnICglcykgZmVhdHVyZXM6IiAlICh0dW5lLCBtdWx0aWxpYikpCisgICAgZmVhdHVyZXMgPSAobG9jYWxkYXRhLmdldFZhcigiVFVORV9GRUFUVVJFU190dW5lLSVzIiAlIHR1bmUsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgaWYgbm90IGZlYXR1cmVzOgorICAgICAgICByZXR1cm4gIlR1bmluZyAnJXMnIGhhcyBubyBkZWZpbmVkIGZlYXR1cmVzLCBhbmQgY2Fubm90IGJlIHVzZWQuIiAlIHR1bmUKKyAgICB2YWxpZF90dW5lcyA9IGxvY2FsZGF0YS5nZXRWYXJGbGFncygnVFVORVZBTElEJykgb3Ige30KKyAgICBjb25mbGljdHMgPSBsb2NhbGRhdGEuZ2V0VmFyRmxhZ3MoJ1RVTkVDT05GTElDVFMnKSBvciB7fQorICAgICMgW2RvY10gaXMgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSB2YXJpYWJsZSwgbm90IGEgcmVhbCBmZWF0dXJlCisgICAgaWYgJ2RvYycgaW4gdmFsaWRfdHVuZXM6CisgICAgICAgIGRlbCB2YWxpZF90dW5lc1snZG9jJ10KKyAgICBpZiAnZG9jJyBpbiBjb25mbGljdHM6CisgICAgICAgIGRlbCBjb25mbGljdHNbJ2RvYyddCisgICAgZm9yIGZlYXR1cmUgaW4gZmVhdHVyZXM6CisgICAgICAgIGlmIGZlYXR1cmUgaW4gY29uZmxpY3RzOgorICAgICAgICAgICAgZm9yIGNvbmZsaWN0IGluIGNvbmZsaWN0c1tmZWF0dXJlXS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGlmIGNvbmZsaWN0IGluIGZlYXR1cmVzOgorICAgICAgICAgICAgICAgICAgICB0dW5lX2Vycm9ycy5hcHBlbmQoIkZlYXR1cmUgJyVzJyBjb25mbGljdHMgd2l0aCAnJXMnLiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgKGZlYXR1cmUsIGNvbmZsaWN0KSkKKyAgICAgICAgaWYgZmVhdHVyZSBpbiB2YWxpZF90dW5lczoKKyAgICAgICAgICAgIGJiLmRlYnVnKDIsICIgICVzOiAlcyIgJSAoZmVhdHVyZSwgdmFsaWRfdHVuZXNbZmVhdHVyZV0pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHVuZV9lcnJvcnMuYXBwZW5kKCJGZWF0dXJlICclcycgaXMgbm90IGRlZmluZWQuIiAlIGZlYXR1cmUpCisgICAgd2hpdGVsaXN0ID0gbG9jYWxkYXRhLmdldFZhcigiVFVORUFCSV9XSElURUxJU1QiLCBUcnVlKQorICAgIGlmIHdoaXRlbGlzdDoKKyAgICAgICAgdHVuZWFiaSA9IGxvY2FsZGF0YS5nZXRWYXIoIlRVTkVBQklfdHVuZS0lcyIgJSB0dW5lLCBUcnVlKQorICAgICAgICBpZiBub3QgdHVuZWFiaToKKyAgICAgICAgICAgIHR1bmVhYmkgPSB0dW5lCisgICAgICAgIGlmIFRydWUgbm90IGluIFt4IGluIHdoaXRlbGlzdC5zcGxpdCgpIGZvciB4IGluIHR1bmVhYmkuc3BsaXQoKV06CisgICAgICAgICAgICB0dW5lX2Vycm9ycy5hcHBlbmQoIlR1bmluZyAnJXMnICglcykgY2Fubm90IGJlIHVzZWQgd2l0aCBhbnkgc3VwcG9ydGVkIHR1bmluZy9BQkkuIiAlCisgICAgICAgICAgICAgICAgKHR1bmUsIHR1bmVhYmkpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IGNoZWNrX3Rvb2xjaGFpbl90dW5lX2FyZ3MobG9jYWxkYXRhLCB0dW5lYWJpLCBtdWx0aWxpYiwgdHVuZV9lcnJvcnMpOgorICAgICAgICAgICAgICAgIGJiLmRlYnVnKDIsICJTYW5pdHkgY2hlY2s6IENvbXBpbGVyIGFyZ3MgT0sgZm9yICVzLiIgJSB0dW5lKQorICAgIGlmIHR1bmVfZXJyb3JzOgorICAgICAgICByZXR1cm4gIlR1bmluZyAnJXMnIGhhcyB0aGUgZm9sbG93aW5nIGVycm9yczpcbiIgJSB0dW5lICsgJ1xuJy5qb2luKHR1bmVfZXJyb3JzKQorCitkZWYgY2hlY2tfdG9vbGNoYWluKGRhdGEpOgorICAgIHR1bmVfZXJyb3Jfc2V0ID0gW10KKyAgICBkZWZ0dW5lID0gZGF0YS5nZXRWYXIoIkRFRkFVTFRUVU5FIiwgVHJ1ZSkKKyAgICB0dW5lX2Vycm9ycyA9IGNoZWNrX3Rvb2xjaGFpbl90dW5lKGRhdGEsIGRlZnR1bmUsICdkZWZhdWx0JykKKyAgICBpZiB0dW5lX2Vycm9yczoKKyAgICAgICAgdHVuZV9lcnJvcl9zZXQuYXBwZW5kKHR1bmVfZXJyb3JzKQorCisgICAgbXVsdGlsaWJzID0gKGRhdGEuZ2V0VmFyKCJNVUxUSUxJQl9WQVJJQU5UUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgZ2xvYmFsX211bHRpbGlicyA9IChkYXRhLmdldFZhcigiTVVMVElMSUJfR0xPQkFMX1ZBUklBTlRTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgIGlmIG11bHRpbGliczoKKyAgICAgICAgc2Vlbl9saWJzID0gW10KKyAgICAgICAgc2Vlbl90dW5lcyA9IFtdCisgICAgICAgIGZvciBsaWIgaW4gbXVsdGlsaWJzOgorICAgICAgICAgICAgaWYgbGliIGluIHNlZW5fbGliczoKKyAgICAgICAgICAgICAgICB0dW5lX2Vycm9yX3NldC5hcHBlbmQoIlRoZSBtdWx0aWxpYiAnJXMnIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UuIiAlIGxpYikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2Vlbl9saWJzLmFwcGVuZChsaWIpCisgICAgICAgICAgICBpZiBub3QgbGliIGluIGdsb2JhbF9tdWx0aWxpYnM6CisgICAgICAgICAgICAgICAgdHVuZV9lcnJvcl9zZXQuYXBwZW5kKCJNdWx0aWxpYiAlcyBpcyBub3QgcHJlc2VudCBpbiBNVUxUSUxJQl9HTE9CQUxfVkFSSUFOVFMiICUgbGliKQorICAgICAgICAgICAgdHVuZSA9IGRhdGEuZ2V0VmFyKCJERUZBVUxUVFVORV92aXJ0Y2xhc3MtbXVsdGlsaWItJXMiICUgbGliLCBUcnVlKQorICAgICAgICAgICAgaWYgdHVuZSBpbiBzZWVuX3R1bmVzOgorICAgICAgICAgICAgICAgIHR1bmVfZXJyb3Jfc2V0LmFwcGVuZCgiVGhlIHR1bmluZyAnJXMnIGFwcGVhcnMgaW4gbW9yZSB0aGFuIG9uZSBtdWx0aWxpYi4iICUgdHVuZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2Vlbl9saWJzLmFwcGVuZCh0dW5lKQorICAgICAgICAgICAgaWYgdHVuZSA9PSBkZWZ0dW5lOgorICAgICAgICAgICAgICAgIHR1bmVfZXJyb3Jfc2V0LmFwcGVuZCgiTXVsdGlsaWIgJyVzJyAoJXMpIGlzIGFsc28gdGhlIGRlZmF1bHQgdHVuaW5nLiIgJSAobGliLCBkZWZ0dW5lKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHVuZV9lcnJvcnMgPSBjaGVja190b29sY2hhaW5fdHVuZShkYXRhLCB0dW5lLCBsaWIpCisgICAgICAgICAgICBpZiB0dW5lX2Vycm9yczoKKyAgICAgICAgICAgICAgICB0dW5lX2Vycm9yX3NldC5hcHBlbmQodHVuZV9lcnJvcnMpCisgICAgaWYgdHVuZV9lcnJvcl9zZXQ6CisgICAgICAgIHJldHVybiAiVG9vbGNoYWluIHR1bmluZ3MgaW52YWxpZDpcbiIgKyAnXG4nLmpvaW4odHVuZV9lcnJvcl9zZXQpICsgIlxuIgorCisgICAgcmV0dXJuICIiCisKK2RlZiBjaGVja19jb25mX2V4aXN0cyhmbiwgZGF0YSk6CisgICAgYmJwYXRoID0gW10KKyAgICBmbiA9IGRhdGEuZXhwYW5kKGZuKQorICAgIHZiYnBhdGggPSBkYXRhLmdldFZhcigiQkJQQVRIIiwgRmFsc2UpCisgICAgaWYgdmJicGF0aDoKKyAgICAgICAgYmJwYXRoICs9IHZiYnBhdGguc3BsaXQoIjoiKQorICAgIGZvciBwIGluIGJicGF0aDoKKyAgICAgICAgY3Vycm5hbWUgPSBvcy5wYXRoLmpvaW4oZGF0YS5leHBhbmQocCksIGZuKQorICAgICAgICBpZiBvcy5hY2Nlc3MoY3Vycm5hbWUsIG9zLlJfT0spOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICByZXR1cm4gRmFsc2UKKworZGVmIGNoZWNrX2NyZWF0ZV9sb25nX2ZpbGVuYW1lKGZpbGVwYXRoLCBwYXRobmFtZSk6CisgICAgaW1wb3J0IHN0cmluZywgcmFuZG9tCisgICAgdGVzdGZpbGUgPSBvcy5wYXRoLmpvaW4oZmlsZXBhdGgsICcnLmpvaW4ocmFuZG9tLmNob2ljZShzdHJpbmcuYXNjaWlfbGV0dGVycykgZm9yIHggaW4gcmFuZ2UoMjAwKSkpCisgICAgdHJ5OgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZXBhdGgpOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGZpbGVwYXRoKQorICAgICAgICBmID0gb3Blbih0ZXN0ZmlsZSwgInciKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgb3MucmVtb3ZlKHRlc3RmaWxlKQorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGltcG9ydCBlcnJubworICAgICAgICBlcnIsIHN0cmVycm9yID0gZS5hcmdzCisgICAgICAgIGlmIGVyciA9PSBlcnJuby5FTkFNRVRPT0xPTkc6CisgICAgICAgICAgICByZXR1cm4gIkZhaWxlZCB0byBjcmVhdGUgYSBmaWxlIHdpdGggYSBsb25nIG5hbWUgaW4gJXMuIFBsZWFzZSB1c2UgYSBmaWxlc3lzdGVtIHRoYXQgZG9lcyBub3QgdW5yZWFzb25hYmx5IGxpbWl0IGZpbGVuYW1lIGxlbmd0aC5cbiIgJSBwYXRobmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICJGYWlsZWQgdG8gY3JlYXRlIGEgZmlsZSBpbiAlczogJXMuXG4iICUgKHBhdGhuYW1lLCBzdHJlcnJvcikKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICBlcnJubywgc3RyZXJyb3IgPSBlLmFyZ3MKKyAgICAgICAgcmV0dXJuICJGYWlsZWQgdG8gY3JlYXRlICVzIGRpcmVjdG9yeSBpbiB3aGljaCB0byBydW4gbG9uZyBuYW1lIHNhbml0eSBjaGVjazogJXMuXG4iICUgKHBhdGhuYW1lLCBzdHJlcnJvcikKKyAgICByZXR1cm4gIiIKKworZGVmIGNoZWNrX3BhdGhfbGVuZ3RoKGZpbGVwYXRoLCBwYXRobmFtZSwgbGltaXQpOgorICAgIGlmIGxlbihmaWxlcGF0aCkgPiBsaW1pdDoKKyAgICAgICAgcmV0dXJuICJUaGUgbGVuZ3RoIG9mICVzIGlzIGxvbmdlciB0aGFuIDQxMCwgdGhpcyB3b3VsZCBjYXVzZSB1bmV4cGVjdGVkIGVycm9ycywgcGxlYXNlIHVzZSBhIHNob3J0ZXIgcGF0aC5cbiIgJSBwYXRobmFtZQorICAgIHJldHVybiAiIgorCitkZWYgZ2V0X2ZpbGVzeXN0ZW1faWQocGF0aCk6CisgICAgc3RhdHVzLCByZXN1bHQgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoInN0YXQgLWYgLWMgJyVzJyAlcyIgJSAoIiV0IiwgcGF0aCkpCisgICAgaWYgc3RhdHVzID09IDA6CisgICAgICAgIHJldHVybiByZXN1bHQKKyAgICBlbHNlOgorICAgICAgICBiYi53YXJuKCJDYW4ndCBnZXQgdGhlIGZpbGVzeXN0ZW0gaWQgb2Y6ICVzIiAlIHBhdGgpCisgICAgICAgIHJldHVybiBOb25lCisKKyMgQ2hlY2sgdGhhdCB0aGUgcGF0aCBpc24ndCBsb2NhdGVkIG9uIG5mcy4KK2RlZiBjaGVja19ub3RfbmZzKHBhdGgsIG5hbWUpOgorICAgICMgVGhlIG5mcycgZmlsZXN5c3RlbSBpZCBpcyA2OTY5CisgICAgaWYgZ2V0X2ZpbGVzeXN0ZW1faWQocGF0aCkgPT0gIjY5NjkiOgorICAgICAgICByZXR1cm4gIlRoZSAlczogJXMgY2FuJ3QgYmUgbG9jYXRlZCBvbiBuZnMuXG4iICUgKG5hbWUsIHBhdGgpCisgICAgcmV0dXJuICIiCisKKyMgQ2hlY2sgdGhhdCBwYXRoIGlzbid0IGEgYnJva2VuIHN5bWxpbmsKK2RlZiBjaGVja19zeW1saW5rKGxuaywgZGF0YSk6CisgICAgaWYgb3MucGF0aC5pc2xpbmsobG5rKSBhbmQgbm90IG9zLnBhdGguZXhpc3RzKGxuayk6CisgICAgICAgIHJhaXNlX3Nhbml0eV9lcnJvcigiJXMgaXMgYSBicm9rZW4gc3ltbGluay4iICUgbG5rLCBkYXRhKQorCitkZWYgY2hlY2tfY29ubmVjdGl2aXR5KGQpOgorICAgICMgVVJJJ3MgdG8gY2hlY2sgY2FuIGJlIHNldCBpbiB0aGUgQ09OTkVDVElWSVRZX0NIRUNLX1VSSVMgdmFyaWFibGUKKyAgICAjIHVzaW5nIHRoZSBzYW1lIHN5bnRheCBhcyBmb3IgU1JDX1VSSS4gSWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBzZXQKKyAgICAjIHRoZSBjaGVjayBpcyBza2lwcGVkCisgICAgdGVzdF91cmlzID0gKGQuZ2V0VmFyKCdDT05ORUNUSVZJVFlfQ0hFQ0tfVVJJUycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgcmV0dmFsID0gIiIKKworICAgICMgT25seSBjaGVjayBjb25uZWN0aXZpdHkgaWYgbmV0d29yayBlbmFibGVkIGFuZCB0aGUKKyAgICAjIENPTk5FQ1RJVklUWV9DSEVDS19VUklTIGFyZSBzZXQKKyAgICBuZXR3b3JrX2VuYWJsZWQgPSBub3QgZC5nZXRWYXIoJ0JCX05PX05FVFdPUksnLCBUcnVlKQorICAgIGNoZWNrX2VuYWJsZWQgPSBsZW4odGVzdF91cmlzKQorICAgICMgVGFrZSBhIGNvcHkgb2YgdGhlIGRhdGEgc3RvcmUgYW5kIHVuc2V0IE1JUlJPUlMgYW5kIFBSRU1JUlJPUlMKKyAgICBkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgZGF0YS5kZWxWYXIoJ1BSRU1JUlJPUlMnKQorICAgIGRhdGEuZGVsVmFyKCdNSVJST1JTJykKKyAgICBpZiBjaGVja19lbmFibGVkIGFuZCBuZXR3b3JrX2VuYWJsZWQ6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2godGVzdF91cmlzLCBkYXRhKQorICAgICAgICAgICAgZmV0Y2hlci5jaGVja3N0YXR1cygpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgorICAgICAgICAgICAgIyBBbGxvdyB0aGUgbWVzc2FnZSB0byBiZSBjb25maWd1cmVkIHNvIHRoYXQgdXNlcnMgY2FuIGJlCisgICAgICAgICAgICAjIHBvaW50ZWQgdG8gYSBzdXBwb3J0IG1lY2hhbmlzbS4KKyAgICAgICAgICAgIG1zZyA9IGRhdGEuZ2V0VmFyKCdDT05ORUNUSVZJVFlfQ0hFQ0tfTVNHJywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgICAgIGlmIGxlbihtc2cpID09IDA6CisgICAgICAgICAgICAgICAgbXNnID0gIiVzLiBQbGVhc2UgZW5zdXJlIHlvdXIgbmV0d29yayBpcyBjb25maWd1cmVkIGNvcnJlY3RseS5cbiIgJSBlcnIKKyAgICAgICAgICAgIHJldHZhbCA9IG1zZworCisgICAgcmV0dXJuIHJldHZhbAorCitkZWYgY2hlY2tfc3VwcG9ydGVkX2Rpc3RybyhzYW5pdHlfZGF0YSk6CisgICAgZnJvbSBmbm1hdGNoIGltcG9ydCBmbm1hdGNoCisKKyAgICB0ZXN0ZWRfZGlzdHJvcyA9IHNhbml0eV9kYXRhLmdldFZhcignU0FOSVRZX1RFU1RFRF9ESVNUUk9TJywgVHJ1ZSkKKyAgICBpZiBub3QgdGVzdGVkX2Rpc3Ryb3M6CisgICAgICAgIHJldHVybgorCisgICAgdHJ5OgorICAgICAgICBkaXN0cm8gPSBvZS5sc2IuZGlzdHJvX2lkZW50aWZpZXIoKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIGRpc3RybyA9IE5vbmUKKworICAgIGlmIG5vdCBkaXN0cm86CisgICAgICAgIGJiLndhcm4oJ0hvc3QgZGlzdHJpYnV0aW9uIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkOyB5b3UgbWF5IHBvc3NpYmx5IGV4cGVyaWVuY2UgdW5leHBlY3RlZCBmYWlsdXJlcy4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlIGEgdGVzdGVkIGRpc3RyaWJ1dGlvbi4nKQorCisgICAgZm9yIHN1cHBvcnRlZCBpbiBbeC5zdHJpcCgpIGZvciB4IGluIHRlc3RlZF9kaXN0cm9zLnNwbGl0KCdcXG4nKV06CisgICAgICAgIGlmIGZubWF0Y2goZGlzdHJvLCBzdXBwb3J0ZWQpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICBiYi53YXJuKCdIb3N0IGRpc3RyaWJ1dGlvbiAiJXMiIGhhcyBub3QgYmVlbiB2YWxpZGF0ZWQgd2l0aCB0aGlzIHZlcnNpb24gb2YgdGhlIGJ1aWxkIHN5c3RlbTsgeW91IG1heSBwb3NzaWJseSBleHBlcmllbmNlIHVuZXhwZWN0ZWQgZmFpbHVyZXMuIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSBhIHRlc3RlZCBkaXN0cmlidXRpb24uJyAlIGRpc3RybykKKworIyBDaGVja3Mgd2Ugc2hvdWxkIG9ubHkgbWFrZSBpZiBNQUNISU5FIGlzIHNldCBjb3JyZWN0bHkKK2RlZiBjaGVja19zYW5pdHlfdmFsaWRtYWNoaW5lKHNhbml0eV9kYXRhKToKKyAgICBtZXNzYWdlcyA9ICIiCisKKyAgICAjIENoZWNrIFRVTkVfQVJDSCBpcyBzZXQKKyAgICBpZiBzYW5pdHlfZGF0YS5nZXRWYXIoJ1RVTkVfQVJDSCcsIFRydWUpID09ICdJTlZBTElEJzoKKyAgICAgICAgbWVzc2FnZXMgPSBtZXNzYWdlcyArICdUVU5FX0FSQ0ggaXMgdW5zZXQuIFBsZWFzZSBlbnN1cmUgeW91ciBNQUNISU5FIGNvbmZpZ3VyYXRpb24gaW5jbHVkZXMgYSB2YWxpZCB0dW5lIGNvbmZpZ3VyYXRpb24gZmlsZSB3aGljaCB3aWxsIHNldCB0aGlzIGNvcnJlY3RseS5cbicKKworICAgICMgQ2hlY2sgVEFSR0VUX09TIGlzIHNldAorICAgIGlmIHNhbml0eV9kYXRhLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSkgPT0gJ0lOVkFMSUQnOgorICAgICAgICBtZXNzYWdlcyA9IG1lc3NhZ2VzICsgJ1BsZWFzZSBzZXQgVEFSR0VUX09TIGRpcmVjdGx5LCBvciBjaG9vc2UgYSBNQUNISU5FIG9yIERJU1RSTyB0aGF0IGRvZXMgc28uXG4nCisKKyAgICAjIENoZWNrIHRoYXQgd2UgZG9uJ3QgaGF2ZSBkdXBsaWNhdGUgZW50cmllcyBpbiBQQUNLQUdFX0FSQ0hTICYgdGhhdCBUVU5FX1BLR0FSQ0ggaXMgaW4gUEFDS0FHRV9BUkNIUworICAgIHBrZ2FyY2hzID0gc2FuaXR5X2RhdGEuZ2V0VmFyKCdQQUNLQUdFX0FSQ0hTJywgVHJ1ZSkKKyAgICB0dW5lcGtnID0gc2FuaXR5X2RhdGEuZ2V0VmFyKCdUVU5FX1BLR0FSQ0gnLCBUcnVlKQorICAgIHR1bmVmb3VuZCA9IEZhbHNlCisgICAgc2VlbiA9IHt9CisgICAgZHVwcyA9IFtdCisKKyAgICBmb3IgcGEgaW4gcGtnYXJjaHMuc3BsaXQoKToKKyAgICAgICAgaWYgc2Vlbi5nZXQocGEsIDApID09IDE6CisgICAgICAgICAgICBkdXBzLmFwcGVuZChwYSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlZW5bcGFdID0gMQorICAgICAgICBpZiBwYSA9PSB0dW5lcGtnOgorICAgICAgICAgICAgdHVuZWZvdW5kID0gVHJ1ZQorCisgICAgaWYgbGVuKGR1cHMpOgorICAgICAgICBtZXNzYWdlcyA9IG1lc3NhZ2VzICsgIkVycm9yLCB0aGUgUEFDS0FHRV9BUkNIUyB2YXJpYWJsZSBjb250YWlucyBkdXBsaWNhdGVzLiBUaGUgZm9sbG93aW5nIGFyY2hzIGFyZSBsaXN0ZWQgbW9yZSB0aGFuIG9uY2U6ICVzIiAlICIgIi5qb2luKGR1cHMpCisKKyAgICBpZiB0dW5lZm91bmQgPT0gRmFsc2U6CisgICAgICAgIG1lc3NhZ2VzID0gbWVzc2FnZXMgKyAiRXJyb3IsIHRoZSBQQUNLQUdFX0FSQ0hTIHZhcmlhYmxlIGRvZXMgbm90IGNvbnRhaW4gVFVORV9QS0dBUkNIICglcykuIiAlIHR1bmVwa2cKKworICAgIHJldHVybiBtZXNzYWdlcworCisjIENoZWNrcyBpZiBuZWNlc3NhcnkgdG8gYWRkIG9wdGlvbiBtYXJjaCB0byBob3N0IGdjYworZGVmIGNoZWNrX2djY19tYXJjaChzYW5pdHlfZGF0YSk6CisgICAgcmVzdWx0ID0gVHJ1ZQorICAgIG1lc3NhZ2UgPSAiIgorCisgICAgIyBDaGVjayBpZiAtbWFyY2ggbm90IGluIEJVSUxEX0NGTEFHUworICAgIGlmIHNhbml0eV9kYXRhLmdldFZhcigiQlVJTERfQ0ZMQUdTIixUcnVlKS5maW5kKCItbWFyY2giKSA8IDA6CisgICAgICAgIHJlc3VsdCA9IEZhbHNlCisKKyAgICAgICAgIyBDb25zdHJ1Y3QgYSB0ZXN0IGZpbGUKKyAgICAgICAgZiA9IG9wZW4oImdjY190ZXN0LmMiLCAidyIpCisgICAgICAgIGYud3JpdGUoImludCBtYWluICgpeyB2b2xhdGlsZSBpbnQgYXRvbWljID0gMjsgX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcCAoJmF0b21pYywgMiwgMyk7IHJldHVybiAwOyB9XG4iKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAjIENoZWNrIGlmIEdDQyBjb3VsZCB3b3JrIHdpdGhvdXQgbWFyY2gKKyAgICAgICAgaWYgbm90IHJlc3VsdDoKKyAgICAgICAgICAgIHN0YXR1cyxyZXMgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoIiR7QlVJTERfUFJFRklYfWdjYyBnY2NfdGVzdC5jIC1vIGdjY190ZXN0IikKKyAgICAgICAgICAgIGlmIHN0YXR1cyA9PSAwOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRydWU7CisKKyAgICAgICAgaWYgbm90IHJlc3VsdDoKKyAgICAgICAgICAgIHN0YXR1cyxyZXMgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoIiR7QlVJTERfUFJFRklYfWdjYyAtbWFyY2g9bmF0aXZlIGdjY190ZXN0LmMgLW8gZ2NjX3Rlc3QiKQorICAgICAgICAgICAgaWYgc3RhdHVzID09IDA6CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICJCVUlMRF9DRkxBR1NfYXBwZW5kID0gXCIgLW1hcmNoPW5hdGl2ZVwiIgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRydWU7CisKKyAgICAgICAgaWYgbm90IHJlc3VsdDoKKyAgICAgICAgICAgIGJ1aWxkX2FyY2ggPSBzYW5pdHlfZGF0YS5nZXRWYXIoJ0JVSUxEX0FSQ0gnLCBUcnVlKQorICAgICAgICAgICAgc3RhdHVzLHJlcyA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgiJHtCVUlMRF9QUkVGSVh9Z2NjIC1tYXJjaD0lcyBnY2NfdGVzdC5jIC1vIGdjY190ZXN0IiAlIGJ1aWxkX2FyY2gpCisgICAgICAgICAgICBpZiBzdGF0dXMgPT0gMDoKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gIkJVSUxEX0NGTEFHU19hcHBlbmQgPSBcIiAtbWFyY2g9JXNcIiIgJSBidWlsZF9hcmNoCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gVHJ1ZTsKKworICAgICAgICBvcy5yZW1vdmUoImdjY190ZXN0LmMiKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygiZ2NjX3Rlc3QiKToKKyAgICAgICAgICAgIG9zLnJlbW92ZSgiZ2NjX3Rlc3QiKQorCisgICAgcmV0dXJuIChyZXN1bHQsIG1lc3NhZ2UpCisKKyMgVW5wYXRjaGVkIHZlcnNpb25zIG9mIG1ha2UgMy44MiBhcmUga25vd24gdG8gYmUgYnJva2VuLiAgU2VlIEdOVSBTYXZhbm5haCBCdWcgMzA2MTIuCisjIFVzZSBhIG1vZGlmaWVkIHJlcHJvZHVjZXIgZnJvbSBodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9idWdzLz8zMDYxMiB0byB2YWxpZGF0ZS4KK2RlZiBjaGVja19tYWtlX3ZlcnNpb24oc2FuaXR5X2RhdGEpOgorICAgIGZyb20gZGlzdHV0aWxzLnZlcnNpb24gaW1wb3J0IExvb3NlVmVyc2lvbgorICAgIHN0YXR1cywgcmVzdWx0ID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCJtYWtlIC0tdmVyc2lvbiIpCisgICAgaWYgc3RhdHVzICE9IDA6CisgICAgICAgIHJldHVybiAiVW5hYmxlIHRvIGV4ZWN1dGUgbWFrZSAtLXZlcnNpb24sIGV4aXQgY29kZSAlc1xuIiAlIHN0YXR1cworICAgIHZlcnNpb24gPSByZXN1bHQuc3BsaXQoKVsyXQorICAgIGlmIExvb3NlVmVyc2lvbih2ZXJzaW9uKSA9PSBMb29zZVZlcnNpb24oIjMuODIiKToKKyAgICAgICAgIyBDb25zdHJ1Y3QgYSB0ZXN0IGZpbGUKKyAgICAgICAgZiA9IG9wZW4oIm1ha2VmaWxlX3Rlc3QiLCAidyIpCisgICAgICAgIGYud3JpdGUoIm1ha2VmaWxlX3Rlc3QuYTogbWFrZWZpbGVfdGVzdF9hLmMgbWFrZWZpbGVfdGVzdF9iLmMgbWFrZWZpbGVfdGVzdC5hKCBtYWtlZmlsZV90ZXN0X2EuYyBtYWtlZmlsZV90ZXN0X2IuYylcbiIpCisgICAgICAgIGYud3JpdGUoIlxuIikKKyAgICAgICAgZi53cml0ZSgibWFrZWZpbGVfdGVzdF9hLmM6XG4iKQorICAgICAgICBmLndyaXRlKCIJdG91Y2ggJEBcbiIpCisgICAgICAgIGYud3JpdGUoIlxuIikKKyAgICAgICAgZi53cml0ZSgibWFrZWZpbGVfdGVzdF9iLmM6XG4iKQorICAgICAgICBmLndyaXRlKCIJdG91Y2ggJEBcbiIpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICMgQ2hlY2sgaWYgbWFrZSAzLjgyIGhhcyBiZWVuIHBhdGNoZWQKKyAgICAgICAgc3RhdHVzLHJlc3VsdCA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgibWFrZSAtZiBtYWtlZmlsZV90ZXN0IikKKworICAgICAgICBvcy5yZW1vdmUoIm1ha2VmaWxlX3Rlc3QiKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygibWFrZWZpbGVfdGVzdF9hLmMiKToKKyAgICAgICAgICAgIG9zLnJlbW92ZSgibWFrZWZpbGVfdGVzdF9hLmMiKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygibWFrZWZpbGVfdGVzdF9iLmMiKToKKyAgICAgICAgICAgIG9zLnJlbW92ZSgibWFrZWZpbGVfdGVzdF9iLmMiKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygibWFrZWZpbGVfdGVzdC5hIik6CisgICAgICAgICAgICBvcy5yZW1vdmUoIm1ha2VmaWxlX3Rlc3QuYSIpCisKKyAgICAgICAgaWYgc3RhdHVzICE9IDA6CisgICAgICAgICAgICByZXR1cm4gIllvdXIgdmVyc2lvbiBvZiBtYWtlIDMuODIgaXMgYnJva2VuLiBQbGVhc2UgcmV2ZXJ0IHRvIDMuODEgb3IgaW5zdGFsbCBhIHBhdGNoZWQgdmVyc2lvbi5cbiIKKyAgICByZXR1cm4gTm9uZQorCisKKyMgVGFyIHZlcnNpb24gMS4yNCBhbmQgb253YXJkcyBoYW5kbGUgb3ZlcndyaXRpbmcgc3ltbGlua3MgY29ycmVjdGx5CisjIGJ1dCBlYXJsaWVyIHZlcnNpb25zIGRvIG5vdDsgdGhpcyBuZWVkcyB0byB3b3JrIHByb3Blcmx5IGZvciBzc3RhdGUKK2RlZiBjaGVja190YXJfdmVyc2lvbihzYW5pdHlfZGF0YSk6CisgICAgZnJvbSBkaXN0dXRpbHMudmVyc2lvbiBpbXBvcnQgTG9vc2VWZXJzaW9uCisgICAgc3RhdHVzLCByZXN1bHQgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoInRhciAtLXZlcnNpb24iKQorICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICByZXR1cm4gIlVuYWJsZSB0byBleGVjdXRlIHRhciAtLXZlcnNpb24sIGV4aXQgY29kZSAlc1xuIiAlIHN0YXR1cworICAgIHZlcnNpb24gPSByZXN1bHQuc3BsaXQoKVszXQorICAgIGlmIExvb3NlVmVyc2lvbih2ZXJzaW9uKSA8IExvb3NlVmVyc2lvbigiMS4yNCIpOgorICAgICAgICByZXR1cm4gIllvdXIgdmVyc2lvbiBvZiB0YXIgaXMgb2xkZXIgdGhhbiAxLjI0IGFuZCBoYXMgYnVncyB3aGljaCB3aWxsIGJyZWFrIGJ1aWxkcy4gUGxlYXNlIGluc3RhbGwgYSBuZXdlciB2ZXJzaW9uIG9mIHRhci5cbiIKKyAgICByZXR1cm4gTm9uZQorCisjIFdlIHVzZSBnaXQgcGFyYW1ldGVycyBhbmQgZnVuY3Rpb25hbGl0eSBvbmx5IGZvdW5kIGluIDEuNy44IG9yIGxhdGVyCitkZWYgY2hlY2tfZ2l0X3ZlcnNpb24oc2FuaXR5X2RhdGEpOgorICAgIGZyb20gZGlzdHV0aWxzLnZlcnNpb24gaW1wb3J0IExvb3NlVmVyc2lvbgorICAgIHN0YXR1cywgcmVzdWx0ID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCJnaXQgLS12ZXJzaW9uIDI+IC9kZXYvbnVsbCIpCisgICAgaWYgc3RhdHVzICE9IDA6CisgICAgICAgIHJldHVybiAiVW5hYmxlIHRvIGV4ZWN1dGUgZ2l0IC0tdmVyc2lvbiwgZXhpdCBjb2RlICVzXG4iICUgc3RhdHVzCisgICAgdmVyc2lvbiA9IHJlc3VsdC5zcGxpdCgpWzJdCisgICAgaWYgTG9vc2VWZXJzaW9uKHZlcnNpb24pIDwgTG9vc2VWZXJzaW9uKCIxLjcuOCIpOgorICAgICAgICByZXR1cm4gIllvdXIgdmVyc2lvbiBvZiBnaXQgaXMgb2xkZXIgdGhhbiAxLjcuOCBhbmQgaGFzIGJ1Z3Mgd2hpY2ggd2lsbCBicmVhayBidWlsZHMuIFBsZWFzZSBpbnN0YWxsIGEgbmV3ZXIgdmVyc2lvbiBvZiBnaXQuXG4iCisgICAgcmV0dXJuIE5vbmUKKworIyBDaGVjayB0aGUgcmVxdWlyZWQgcGVybCBtb2R1bGVzIHdoaWNoIG1heSBub3QgYmUgaW5zdGFsbGVkIGJ5IGRlZmF1bHQKK2RlZiBjaGVja19wZXJsX21vZHVsZXMoc2FuaXR5X2RhdGEpOgorICAgIHJldCA9ICIiCisgICAgbW9kdWxlcyA9ICggIlRleHQ6OlBhcnNlV29yZHMiLCAiVGhyZWFkOjpRdWV1ZSIsICJEYXRhOjpEdW1wZXIiICkKKyAgICBmb3IgbSBpbiBtb2R1bGVzOgorICAgICAgICBzdGF0dXMsIHJlc3VsdCA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgicGVybCAtZSAndXNlICVzJyAyPiAvZGV2L251bGwiICUgbSkKKyAgICAgICAgaWYgc3RhdHVzICE9IDA6CisgICAgICAgICAgICByZXQgKz0gIiVzICIgJSBtCisgICAgaWYgcmV0OgorICAgICAgICByZXR1cm4gIlJlcXVpcmVkIHBlcmwgbW9kdWxlKHMpIG5vdCBmb3VuZDogJXNcbiIgJSByZXQKKyAgICByZXR1cm4gTm9uZQorCitkZWYgc2FuaXR5X2NoZWNrX2NvbmZmaWxlcyhzdGF0dXMsIGQpOgorICAgICMgQ2hlY2sgd2UgYXJlIHVzaW5nIGEgdmFsaWQgbG9jYWwuY29uZgorICAgIGN1cnJlbnRfY29uZiAgPSBkLmdldFZhcignQ09ORl9WRVJTSU9OJywgVHJ1ZSkKKyAgICBjb25mX3ZlcnNpb24gPSAgZC5nZXRWYXIoJ0xPQ0FMQ09ORl9WRVJTSU9OJywgVHJ1ZSkKKworICAgIGlmIGN1cnJlbnRfY29uZiAhPSBjb25mX3ZlcnNpb246CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIllvdXIgdmVyc2lvbiBvZiBsb2NhbC5jb25mIHdhcyBnZW5lcmF0ZWQgZnJvbSBhbiBvbGRlci9uZXdlciB2ZXJzaW9uIG9mIGxvY2FsLmNvbmYuc2FtcGxlIGFuZCB0aGVyZSBoYXZlIGJlZW4gdXBkYXRlcyBtYWRlIHRvIHRoaXMgZmlsZS4gUGxlYXNlIGNvbXBhcmUgdGhlIHR3byBmaWxlcyBhbmQgbWVyZ2UgYW55IGNoYW5nZXMgYmVmb3JlIGNvbnRpbnVpbmcuXG5NYXRjaGluZyB0aGUgdmVyc2lvbiBudW1iZXJzIHdpbGwgcmVtb3ZlIHRoaXMgbWVzc2FnZS5cblwibWVsZCBjb25mL2xvY2FsLmNvbmYgJHtDT1JFQkFTRX0vbWV0YSovY29uZi9sb2NhbC5jb25mLnNhbXBsZVwiIGlzIGEgZ29vZCB3YXkgdG8gdmlzdWFsaXNlIHRoZSBjaGFuZ2VzLlxuIikKKworICAgICMgQ2hlY2sgYmJsYXllcnMuY29uZiBpcyB2YWxpZAorICAgIGN1cnJlbnRfbGNvbmYgPSBkLmdldFZhcignTENPTkZfVkVSU0lPTicsIFRydWUpCisgICAgbGNvbmZfdmVyc2lvbiA9IGQuZ2V0VmFyKCdMQVlFUl9DT05GX1ZFUlNJT04nLCBUcnVlKQorICAgIGlmIGN1cnJlbnRfbGNvbmYgIT0gbGNvbmZfdmVyc2lvbjoKKyAgICAgICAgZnVuY3MgPSBkLmdldFZhcignQkJMQVlFUlNfQ09ORl9VUERBVEVfRlVOQ1MnLCBUcnVlKS5zcGxpdCgpCisgICAgICAgIGZvciBmdW5jIGluIGZ1bmNzOgorICAgICAgICAgICAgc3VjY2VzcyA9IFRydWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoZnVuYywgZCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IEZhbHNlCisgICAgICAgICAgICBpZiBzdWNjZXNzOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoIllvdXIgY29uZi9iYmxheWVycy5jb25mIGhhcyBiZWVuIGF1dG9tYXRpY2FsbHkgdXBkYXRlZC4iKQorICAgICAgICAgICAgICAgIHN0YXR1cy5yZXBhcnNlID0gVHJ1ZQorICAgICAgICBpZiBub3Qgc3RhdHVzLnJlcGFyc2U6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJZb3VyIHZlcnNpb24gb2YgYmJsYXllcnMuY29uZiBoYXMgdGhlIHdyb25nIExDT05GX1ZFUlNJT04gKGhhcyAlcywgZXhwZWN0aW5nICVzKS5cblBsZWFzZSBjb21wYXJlIHRoZSB5b3VyIGZpbGUgYWdhaW5zdCBiYmxheWVycy5jb25mLnNhbXBsZSBhbmQgbWVyZ2UgYW55IGNoYW5nZXMgYmVmb3JlIGNvbnRpbnVpbmcuXG5cIm1lbGQgY29uZi9iYmxheWVycy5jb25mICR7Q09SRUJBU0V9L21ldGEqL2NvbmYvYmJsYXllcnMuY29uZi5zYW1wbGVcIiBpcyBhIGdvb2Qgd2F5IHRvIHZpc3VhbGlzZSB0aGUgY2hhbmdlcy5cbiIgJSAoY3VycmVudF9sY29uZiwgbGNvbmZfdmVyc2lvbikpCisKKyAgICAjIElmIHdlIGhhdmUgYSBzaXRlLmNvbmYsIGNoZWNrIGl0J3MgdmFsaWQKKyAgICBpZiBjaGVja19jb25mX2V4aXN0cygiY29uZi9zaXRlLmNvbmYiLCBkKToKKyAgICAgICAgY3VycmVudF9zY29uZiA9IGQuZ2V0VmFyKCdTQ09ORl9WRVJTSU9OJywgVHJ1ZSkKKyAgICAgICAgc2NvbmZfdmVyc2lvbiA9IGQuZ2V0VmFyKCdTSVRFX0NPTkZfVkVSU0lPTicsIFRydWUpCisgICAgICAgIGlmIGN1cnJlbnRfc2NvbmYgIT0gc2NvbmZfdmVyc2lvbjoKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIllvdXIgdmVyc2lvbiBvZiBzaXRlLmNvbmYgd2FzIGdlbmVyYXRlZCBmcm9tIGFuIG9sZGVyIHZlcnNpb24gb2Ygc2l0ZS5jb25mLnNhbXBsZSBhbmQgdGhlcmUgaGF2ZSBiZWVuIHVwZGF0ZXMgbWFkZSB0byB0aGlzIGZpbGUuIFBsZWFzZSBjb21wYXJlIHRoZSB0d28gZmlsZXMgYW5kIG1lcmdlIGFueSBjaGFuZ2VzIGJlZm9yZSBjb250aW51aW5nLlxuTWF0Y2hpbmcgdGhlIHZlcnNpb24gbnVtYmVycyB3aWxsIHJlbW92ZSB0aGlzIG1lc3NhZ2UuXG5cIm1lbGQgY29uZi9zaXRlLmNvbmYgJHtDT1JFQkFTRX0vbWV0YSovY29uZi9zaXRlLmNvbmYuc2FtcGxlXCIgaXMgYSBnb29kIHdheSB0byB2aXN1YWxpc2UgdGhlIGNoYW5nZXMuXG4iKQorCisKK2RlZiBzYW5pdHlfaGFuZGxlX2FiaWNoYW5nZXMoc3RhdHVzLCBkKToKKyAgICAjCisgICAgIyBDaGVjayB0aGUgJ0FCSScgb2YgVE1QRElSCisgICAgIworICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICBjdXJyZW50X2FiaSA9IGQuZ2V0VmFyKCdPRUxBWU9VVF9BQkknLCBUcnVlKQorICAgIGFiaWZpbGUgPSBkLmdldFZhcignU0FOSVRZX0FCSUZJTEUnLCBUcnVlKQorICAgIGlmIG9zLnBhdGguZXhpc3RzKGFiaWZpbGUpOgorICAgICAgICB3aXRoIG9wZW4oYWJpZmlsZSwgInIiKSBhcyBmOgorICAgICAgICAgICAgYWJpID0gZi5yZWFkKCkuc3RyaXAoKQorICAgICAgICBpZiBub3QgYWJpLmlzZGlnaXQoKToKKyAgICAgICAgICAgIHdpdGggb3BlbihhYmlmaWxlLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShjdXJyZW50X2FiaSkKKyAgICAgICAgZWxpZiBhYmkgPT0gIjIiIGFuZCBjdXJyZW50X2FiaSA9PSAiMyI6CisgICAgICAgICAgICBiYi5ub3RlKCJDb252ZXJ0aW5nIHN0YWdpbmcgZnJvbSBsYXlvdXQgdmVyc2lvbiAyIHRvIGxheW91dCB2ZXJzaW9uIDMiKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKGQuZXhwYW5kKCJtdiAke1RNUERJUn0vc3RhZ2luZyAke1RNUERJUn0vc3lzcm9vdHMiKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChkLmV4cGFuZCgibG4gLXMgc3lzcm9vdHMgJHtUTVBESVJ9L3N0YWdpbmciKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChkLmV4cGFuZCgiY2QgJHtUTVBESVJ9L3N0YW1wczsgZm9yIGkgaW4gKi8qZG9fcG9wdWxhdGVfc3RhZ2luZzsgZG8gbmV3PWBlY2hvICRpIHwgc2VkIC1lICdzL2RvX3BvcHVsYXRlX3N0YWdpbmcvZG9fcG9wdWxhdGVfc3lzcm9vdC8nYDsgbXYgJGkgJG5ldzsgZG9uZSIpLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgd2l0aCBvcGVuKGFiaWZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGN1cnJlbnRfYWJpKQorICAgICAgICBlbGlmIGFiaSA9PSAiMyIgYW5kIGN1cnJlbnRfYWJpID09ICI0IjoKKyAgICAgICAgICAgIGJiLm5vdGUoIkNvbnZlcnRpbmcgc3RhZ2luZyBsYXlvdXQgZnJvbSB2ZXJzaW9uIDMgdG8gbGF5b3V0IHZlcnNpb24gNCIpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkLmV4cGFuZCgiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiaW5kaXJfbmF0aXZlfS8ke01VTFRJTUFDSF9IT1NUX1NZU30iKSk6CisgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKGQuZXhwYW5kKCJtdiAke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9LyR7TVVMVElNQUNIX0hPU1RfU1lTfSAke1NUQUdJTkdfQklORElSX0NST1NTfSIpLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChkLmV4cGFuZCgibG4gLXMgJHtTVEFHSU5HX0JJTkRJUl9DUk9TU30gJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiaW5kaXJfbmF0aXZlfS8ke01VTFRJTUFDSF9IT1NUX1NZU30iKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIHdpdGggb3BlbihhYmlmaWxlLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShjdXJyZW50X2FiaSkKKyAgICAgICAgZWxpZiBhYmkgPT0gIjQiOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiU3RhZ2luZyBsYXlvdXQgaGFzIGNoYW5nZWQuIFRoZSBjcm9zcyBkaXJlY3RvcnkgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgY3Jvc3MgcGFja2FnZXMgYXJlIG5vdyBidWlsdCB1bmRlciB0aGUgbmF0aXZlIHN5c3Jvb3QuXG5UaGlzIHJlcXVpcmVzIGEgcmVidWlsZC5cbiIpCisgICAgICAgIGVsaWYgYWJpID09ICI1IiBhbmQgY3VycmVudF9hYmkgPT0gIjYiOgorICAgICAgICAgICAgYmIubm90ZSgiQ29udmVydGluZyBzdGFnaW5nIGxheW91dCBmcm9tIHZlcnNpb24gNSB0byBsYXlvdXQgdmVyc2lvbiA2IikKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChkLmV4cGFuZCgibXYgJHtUTVBESVJ9L3BzdGFnZWxvZ3MgJHtTU1RBVEVfTUFOSUZFU1RTfSIpLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgd2l0aCBvcGVuKGFiaWZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGN1cnJlbnRfYWJpKQorICAgICAgICBlbGlmIGFiaSA9PSAiNyIgYW5kIGN1cnJlbnRfYWJpID09ICI4IjoKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIllvdXIgY29uZmlndXJhdGlvbiBpcyB1c2luZyBzdGFtcCBmaWxlcyBpbmNsdWRpbmcgdGhlIHNzdGF0ZSBoYXNoIGJ1dCB5b3VyIGJ1aWxkIGRpcmVjdG9yeSB3YXMgYnVpbHQgd2l0aCBzdGFtcCBmaWxlcyB0aGF0IGRvIG5vdCBpbmNsdWRlIHRoaXMuXG5UbyBjb250aW51ZSwgZWl0aGVyIHJlYnVpbGQgb3Igc3dpdGNoIGJhY2sgdG8gdGhlIE9FQmFzaWMgc2lnbmF0dXJlIGhhbmRsZXIgd2l0aCBCQl9TSUdOQVRVUkVfSEFORExFUiA9ICdPRUJhc2ljJy5cbiIpCisgICAgICAgIGVsaWYgKGFiaSAhPSBjdXJyZW50X2FiaSBhbmQgY3VycmVudF9hYmkgPT0gIjkiKToKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIlRoZSBsYXlvdXQgb2YgdGhlIFRNUERJUiBTVEFNUFMgZGlyZWN0b3J5IGhhcyBjaGFuZ2VkLiBQbGVhc2UgY2xlYW4gb3V0IFRNUERJUiBhbmQgcmVidWlsZCAoc3N0YXRlIHdpbGwgYmUgc3RpbGwgYmUgdmFsaWQgYW5kIHJldXNlZClcbiIpCisgICAgICAgIGVsaWYgKGFiaSAhPSBjdXJyZW50X2FiaSBhbmQgY3VycmVudF9hYmkgPT0gIjEwIiBhbmQgKGFiaSA9PSAiOCIgb3IgYWJpID09ICI5IikpOgorICAgICAgICAgICAgYmIubm90ZSgiQ29udmVydGluZyBzdGFnaW5nIGxheW91dCBmcm9tIHZlcnNpb24gOC85IHRvIGxheW91dCB2ZXJzaW9uIDEwIikKKyAgICAgICAgICAgIGNtZCA9IGQuZXhwYW5kKCJncmVwIC1yIC1sIHN5c3Jvb3QtcHJvdmlkZXJzL3ZpcnR1YWxfa2VybmVsICR7U1NUQVRFX01BTklGRVNUU30iKQorICAgICAgICAgICAgcmV0LCByZXN1bHQgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNwbGl0KCkKKyAgICAgICAgICAgIGZvciBmIGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJVbmluc3RhbGxpbmcgbWFuaWZlc3QgZmlsZSAlcyIgJSBmKQorICAgICAgICAgICAgICAgIHNzdGF0ZV9jbGVhbl9tYW5pZmVzdChmLCBkKQorICAgICAgICAgICAgd2l0aCBvcGVuKGFiaWZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGN1cnJlbnRfYWJpKQorICAgICAgICBlbGlmIGFiaSA9PSAiMTAiIGFuZCBjdXJyZW50X2FiaSA9PSAiMTEiOgorICAgICAgICAgICAgYmIubm90ZSgiQ29udmVydGluZyBzdGFnaW5nIGxheW91dCBmcm9tIHZlcnNpb24gMTAgdG8gbGF5b3V0IHZlcnNpb24gMTEiKQorICAgICAgICAgICAgIyBGaWxlcyBpbiB4Zjg2LXZpZGVvLW1vZGVzZXR0aW5nIG1vdmVkIHRvIHhzZXJ2ZXIteG9yZyBhbmQgYml0YmFrZSBjYW4ndCBjdXJyZW50bHkgaGFuZGxlIHRoYXQ6CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoZC5leHBhbmQoInJtICR7VE1QRElSfS9zeXNyb290cy8qL3Vzci9saWIveG9yZy9tb2R1bGVzL2RyaXZlcnMvbW9kZXNldHRpbmdfZHJ2LnNvICR7VE1QRElSfS9zeXNyb290cy8qL3BrZ2RhdGEvcnVudGltZS94Zjg2LXZpZGVvLW1vZGVzZXR0aW5nKiAke1RNUERJUn0vc3lzcm9vdHMvKi9wa2dkYXRhL3J1bnRpbWUtcmV2ZXJzZS94Zjg2LXZpZGVvLW1vZGVzZXR0aW5nKiAke1RNUERJUn0vc3lzcm9vdHMvKi9wa2dkYXRhL3NobGliczIveGY4Ni12aWRlby1tb2Rlc2V0dGluZyoiKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIHdpdGggb3BlbihhYmlmaWxlLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShjdXJyZW50X2FiaSkKKyAgICAgICAgZWxpZiAoYWJpICE9IGN1cnJlbnRfYWJpKToKKyAgICAgICAgICAgICMgQ29kZSB0byBjb252ZXJ0IGZyb20gb25lIEFCSSB0byBhbm90aGVyIGNvdWxkIGdvIGhlcmUgaWYgcG9zc2libGUuCisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJFcnJvciwgVE1QRElSIGhhcyBjaGFuZ2VkIGl0cyBsYXlvdXQgdmVyc2lvbiBudW1iZXIgKCVzIHRvICVzKSBhbmQgeW91IG5lZWQgdG8gZWl0aGVyIHJlYnVpbGQsIHJldmVydCBvciBhZGp1c3QgaXQgYXQgeW91ciBvd24gcmlzay5cbiIgJSAoYWJpLCBjdXJyZW50X2FiaSkpCisgICAgZWxzZToKKyAgICAgICAgd2l0aCBvcGVuKGFiaWZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoY3VycmVudF9hYmkpCisKK2RlZiBjaGVja19zYW5pdHlfc3N0YXRlX2Rpcl9jaGFuZ2Uoc3N0YXRlX2RpciwgZGF0YSk6CisgICAgIyBTYW5pdHkgY2hlY2tzIHRvIGJlIGRvbmUgd2hlbiB0aGUgdmFsdWUgb2YgU1NUQVRFX0RJUiBjaGFuZ2VzCisKKyAgICAjIENoZWNrIHRoYXQgU1NUQVRFX0RJUiBpc24ndCBvbiBhIGZpbGVzeXN0ZW0gd2l0aCBsaW1pdGVkIGZpbGVuYW1lIGxlbmd0aCAoZWcuIGVDcnlwdEZTKQorICAgIHRlc3Rtc2cgPSAiIgorICAgIGlmIHNzdGF0ZV9kaXIgIT0gIiI6CisgICAgICAgIHRlc3Rtc2cgPSBjaGVja19jcmVhdGVfbG9uZ19maWxlbmFtZShzc3RhdGVfZGlyLCAiU1NUQVRFX0RJUiIpCisgICAgICAgICMgSWYgd2UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9ucyB0byBTU1RBVEVfRElSLCBzdWdnZXN0IHRoZSB1c2VyIHNldCBpdCBhcyBhbiBTU1RBVEVfTUlSUk9SUworICAgICAgICB0cnk6CisgICAgICAgICAgICBlcnIgPSB0ZXN0bXNnLnNwbGl0KCc6ICcpWzFdLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIGVyciA9PSAiUGVybWlzc2lvbiBkZW5pZWQuIjoKKyAgICAgICAgICAgICAgICB0ZXN0bXNnID0gdGVzdG1zZyArICJZb3UgY291bGQgdHJ5IHVzaW5nICVzIGluIFNTVEFURV9NSVJST1JTIHJhdGhlciB0aGFuIGFzIGFuIFNTVEFURV9DQUNIRS5cbiIgJSAoc3N0YXRlX2RpcikKKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgcmV0dXJuIHRlc3Rtc2cKKyAgICAgICAKK2RlZiBjaGVja19zYW5pdHlfdmVyc2lvbl9jaGFuZ2Uoc3RhdHVzLCBkKToKKyAgICAjIFNhbml0eSBjaGVja3MgdG8gYmUgZG9uZSB3aGVuIFNBTklUWV9WRVJTSU9OIGNoYW5nZXMKKyAgICAjIEluIG90aGVyIHdvcmRzLCB0aGVzZSB0ZXN0cyBydW4gb25jZSBpbiBhIGdpdmVuIGJ1aWxkIGRpcmVjdG9yeSBhbmQgdGhlbiAKKyAgICAjIG5ldmVyIGFnYWluIHVudGlsIHRoZSBzYW5pdHkgdmVyc2lvbiBjaGFuZ2VzLgorCisgICAgIyBDaGVjayB0aGUgcHl0aG9uIGluc3RhbGwgaXMgY29tcGxldGUuIGdsaWItMi4wLW5hdGl2ZXMgcmVxdXJpZXMKKyAgICAjIHhtbC5wYXJzZXJzLmV4cGF0CisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgeG1sLnBhcnNlcnMuZXhwYXQKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoJ1lvdXIgcHl0aG9uIGlzIG5vdCBhIGZ1bGwgaW5zdGFsbC4gUGxlYXNlIGluc3RhbGwgdGhlIG1vZHVsZSB4bWwucGFyc2Vycy5leHBhdCAocHl0aG9uLXhtbCBvbiBvcGVuU1VTRSBhbmQgU1VTRSBMaW51eCkuXG4nKQorICAgIGltcG9ydCBzdGF0CisKKyAgICBzdGF0dXMuYWRkcmVzdWx0KGNoZWNrX21ha2VfdmVyc2lvbihkKSkKKyAgICBzdGF0dXMuYWRkcmVzdWx0KGNoZWNrX3Rhcl92ZXJzaW9uKGQpKQorICAgIHN0YXR1cy5hZGRyZXN1bHQoY2hlY2tfZ2l0X3ZlcnNpb24oZCkpCisgICAgc3RhdHVzLmFkZHJlc3VsdChjaGVja19wZXJsX21vZHVsZXMoZCkpCisKKyAgICBtaXNzaW5nID0gIiIKKworICAgIGlmIG5vdCBjaGVja19hcHBfZXhpc3RzKCIke01BS0V9IiwgZCk6CisgICAgICAgIG1pc3NpbmcgPSBtaXNzaW5nICsgIkdOVSBtYWtlLCIKKworICAgIGlmIG5vdCBjaGVja19hcHBfZXhpc3RzKCcke0JVSUxEX1BSRUZJWH1nY2MnLCBkKToKKyAgICAgICAgbWlzc2luZyA9IG1pc3NpbmcgKyAiQyBDb21waWxlciAoJXNnY2MpLCIgJSBkLmdldFZhcigiQlVJTERfUFJFRklYIiwgVHJ1ZSkKKworICAgIGlmIG5vdCBjaGVja19hcHBfZXhpc3RzKCcke0JVSUxEX1BSRUZJWH1nKysnLCBkKToKKyAgICAgICAgbWlzc2luZyA9IG1pc3NpbmcgKyAiQysrIENvbXBpbGVyICglc2crKyksIiAlIGQuZ2V0VmFyKCJCVUlMRF9QUkVGSVgiLCBUcnVlKQorCisgICAgcmVxdWlyZWRfdXRpbGl0aWVzID0gZC5nZXRWYXIoJ1NBTklUWV9SRVFVSVJFRF9VVElMSVRJRVMnLCBUcnVlKQorCisgICAgZm9yIHV0aWwgaW4gcmVxdWlyZWRfdXRpbGl0aWVzLnNwbGl0KCk6CisgICAgICAgIGlmIG5vdCBjaGVja19hcHBfZXhpc3RzKHV0aWwsIGQpOgorICAgICAgICAgICAgbWlzc2luZyA9IG1pc3NpbmcgKyAiJXMsIiAlIHV0aWwKKworICAgIGlmIG1pc3Npbmc6CisgICAgICAgIG1pc3NpbmcgPSBtaXNzaW5nLnJzdHJpcCgnLCcpCisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIlBsZWFzZSBpbnN0YWxsIHRoZSBmb2xsb3dpbmcgbWlzc2luZyB1dGlsaXRpZXM6ICVzXG4iICUgbWlzc2luZykKKworICAgIGFzc3VtZV9wcm92aWRlZCA9IGQuZ2V0VmFyKCdBU1NVTUVfUFJPVklERUQnLCBUcnVlKS5zcGxpdCgpCisgICAgIyBDaGVjayB1c2VyIGRvZXNuJ3QgaGF2ZSBBU1NVTUVfUFJPVklERUQgPSBpbnN0ZWFkIG9mICs9IGluIGxvY2FsLmNvbmYKKyAgICBpZiAiZGlmZnN0YXQtbmF0aXZlIiBub3QgaW4gYXNzdW1lX3Byb3ZpZGVkOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCdQbGVhc2UgdXNlIEFTU1VNRV9QUk9WSURFRCArPSwgbm90IEFTU1VNRV9QUk9WSURFRCA9IGluIHlvdXIgbG9jYWwuY29uZlxuJykKKworICAgIGlmICJxZW11LW5hdGl2ZSIgaW4gYXNzdW1lX3Byb3ZpZGVkOgorICAgICAgICBpZiBub3QgY2hlY2tfYXBwX2V4aXN0cygicWVtdS1hcm0iLCBkKToKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoInFlbXUtbmF0aXZlIHdhcyBpbiBBU1NVTUVfUFJPVklERUQgYnV0IHRoZSBRRU1VIGJpbmFyaWVzIChxZW11LWFybSkgY2FuJ3QgYmUgZm91bmQgaW4gUEFUSCIpCisKKyAgICBpZiAibGlic2RsLW5hdGl2ZSIgaW4gYXNzdW1lX3Byb3ZpZGVkOgorICAgICAgICBpZiBub3QgY2hlY2tfYXBwX2V4aXN0cygic2RsLWNvbmZpZyIsIGQpOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgibGlic2RsLW5hdGl2ZSBpcyBzZXQgdG8gYmUgQVNTVU1FX1BST1ZJREVEIGJ1dCBzZGwtY29uZmlnIGNhbid0IGJlIGZvdW5kIGluIFBBVEguIFBsZWFzZSBlaXRoZXIgaW5zdGFsbCBpdCwgb3IgY29uZmlndXJlIHFlbXUgbm90IHRvIHJlcXVpcmUgc2RsLiIpCisKKyAgICAocmVzdWx0LCBtZXNzYWdlKSA9IGNoZWNrX2djY19tYXJjaChkKQorICAgIGlmIHJlc3VsdCBhbmQgbWVzc2FnZToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiWW91ciBnY2MgdmVyc2lvbiBpcyBvbGRlciB0aGFuIDQuNSwgcGxlYXNlIGFkZCB0aGUgZm9sbG93aW5nIHBhcmFtIHRvIGxvY2FsLmNvbmZcbiBcCisgICAgICAgICVzXG4iICUgbWVzc2FnZSkKKyAgICBpZiBub3QgcmVzdWx0OgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJZb3VyIGdjYyB2ZXJzaW9uIGlzIG9sZGVyIHRoYW4gNC41IG9yIGlzIG5vdCB3b3JraW5nIHByb3Blcmx5LiAgUGxlYXNlIHZlcmlmeSB5b3UgY2FuIGJ1aWxkIikKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiIGFuZCBsaW5rIHNvbWV0aGluZyB0aGF0IHVzZXMgYXRvbWljIG9wZXJhdGlvbnMsIHN1Y2ggYXM6IFxuIikKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiICAgICAgICBfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwICgmYXRvbWljLCAyLCAzKTtcbiIpCisKKyAgICAjIENoZWNrIHRoYXQgVE1QRElSIGlzbid0IG9uIGEgZmlsZXN5c3RlbSB3aXRoIGxpbWl0ZWQgZmlsZW5hbWUgbGVuZ3RoIChlZy4gZUNyeXB0RlMpCisgICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisgICAgc3RhdHVzLmFkZHJlc3VsdChjaGVja19jcmVhdGVfbG9uZ19maWxlbmFtZSh0bXBkaXIsICJUTVBESVIiKSkKKyAgICB0bXBkaXJtb2RlID0gb3Muc3RhdCh0bXBkaXIpLnN0X21vZGUKKyAgICBpZiAodG1wZGlybW9kZSAmIHN0YXQuU19JU0dJRCk6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIlRNUERJUiBpcyBzZXRnaWQsIHBsZWFzZSBkb24ndCBidWlsZCBpbiBhIHNldGdpZCBkaXJlY3RvcnkiKQorICAgIGlmICh0bXBkaXJtb2RlICYgc3RhdC5TX0lTVUlEKToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiVE1QRElSIGlzIHNldHVpZCwgcGxlYXNlIGRvbid0IGJ1aWxkIGluIGEgc2V0dWlkIGRpcmVjdG9yeSIpCisKKyAgICAjIFNvbWUgdGhpcmQtcGFydHkgc29mdHdhcmUgYXBwYXJlbnRseSByZWxpZXMgb24gY2htb2QgZXRjLiBiZWluZyBzdWlkIHJvb3QgKCEhKQorICAgIGltcG9ydCBzdGF0CisgICAgc3VpZF9jaGVja19iaW5zID0gImNob3duIGNobW9kIG1rbm9kIi5zcGxpdCgpCisgICAgZm9yIGJpbl9jbWQgaW4gc3VpZF9jaGVja19iaW5zOgorICAgICAgICBiaW5fcGF0aCA9IGJiLnV0aWxzLndoaWNoKG9zLmVudmlyb25bIlBBVEgiXSwgYmluX2NtZCkKKyAgICAgICAgaWYgYmluX3BhdGg6CisgICAgICAgICAgICBiaW5fc3RhdCA9IG9zLnN0YXQoYmluX3BhdGgpCisgICAgICAgICAgICBpZiBiaW5fc3RhdC5zdF91aWQgPT0gMCBhbmQgYmluX3N0YXQuc3RfbW9kZSAmIHN0YXQuU19JU1VJRDoKKyAgICAgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCclcyBoYXMgdGhlIHNldHVpZCBiaXQgc2V0LiBUaGlzIGludGVyZmVyZXMgd2l0aCBwc2V1ZG8gYW5kIG1heSBjYXVzZSBvdGhlciBpc3N1ZXMgdGhhdCBicmVhayB0aGUgYnVpbGQgcHJvY2Vzcy5cbicgJSBiaW5fcGF0aCkKKworICAgICMgQ2hlY2sgdGhhdCB3ZSBjYW4gZmV0Y2ggZnJvbSB2YXJpb3VzIG5ldHdvcmsgdHJhbnNwb3J0cworICAgIG5ldGNoZWNrID0gY2hlY2tfY29ubmVjdGl2aXR5KGQpCisgICAgc3RhdHVzLmFkZHJlc3VsdChuZXRjaGVjaykKKyAgICBpZiBuZXRjaGVjazoKKyAgICAgICAgc3RhdHVzLm5ldHdvcmtfZXJyb3IgPSBUcnVlCisKKyAgICBub2xpYnMgPSBkLmdldFZhcignTk8zMkxJQlMnLCBUcnVlKQorICAgIGlmIG5vdCBub2xpYnM6CisgICAgICAgIGxpYjMycGF0aCA9ICcvbGliJworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygnL2xpYjY0JykgYW5kICggb3MucGF0aC5pc2xpbmsoJy9saWI2NCcpIG9yIG9zLnBhdGguaXNsaW5rKCcvbGliJykgKToKKyAgICAgICAgICAgbGliMzJwYXRoID0gJy9saWIzMicKKworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygnJXMvbGliYy5zby42JyAlIGxpYjMycGF0aCkgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cygnL3Vzci9pbmNsdWRlL2dudS9zdHVicy0zMi5oJyk6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJZb3UgaGF2ZSBhIDMyLWJpdCBsaWJjLCBidXQgbm8gMzItYml0IGhlYWRlcnMuICBZb3UgbXVzdCBpbnN0YWxsIHRoZSAzMi1iaXQgbGliYyBoZWFkZXJzLlxuIikKKworICAgIGJicGF0aHMgPSBkLmdldFZhcignQkJQQVRIJywgVHJ1ZSkuc3BsaXQoIjoiKQorICAgIGlmICgiLiIgaW4gYmJwYXRocyBvciAiLi8iIGluIGJicGF0aHMgb3IgIiIgaW4gYmJwYXRocykgYW5kIG5vdCBzdGF0dXMucmVwYXJzZToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiQkJQQVRIIHJlZmVyZW5jZXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBlaXRoZXIgdGhyb3VnaCAiICAgIFwKKyAgICAgICAgICAgICAgICAiYW4gZW1wdHkgZW50cnksIGEgJy4vJyBvciBhICcuJy5cblx0IFRoaXMgaXMgdW5zYWZlIGFuZCBtZWFucyB5b3VyICJcCisgICAgICAgICAgICAgICAgImxheWVyIGNvbmZpZ3VyYXRpb24gaXMgYWRkaW5nIGVtcHR5IGVsZW1lbnRzIHRvIEJCUEFUSC5cblx0ICJcCisgICAgICAgICAgICAgICAgIlBsZWFzZSBjaGVjayB5b3VyIGxheWVyLmNvbmYgZmlsZXMgYW5kIG90aGVyIEJCUEFUSCAiICAgICAgICBcCisgICAgICAgICAgICAgICAgInNldHRpbmdzIHRvIHJlbW92ZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAiICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgInJlZmVyZW5jZXMuXG4iIFwKKyAgICAgICAgICAgICAgICAiUGFyc2VkIEJCUEFUSCBpcyIgKyBzdHIoYmJwYXRocykpOworCisgICAgb2VzX2JiX2NvbmYgPSBkLmdldFZhciggJ09FU19CSVRCQUtFX0NPTkYnLCBUcnVlKQorICAgIGlmIG5vdCBvZXNfYmJfY29uZjoKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgnWW91IGFyZSBub3QgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCB2ZXJzaW9uIG9mIGNvbmYvYml0YmFrZS5jb25mLiBUaGlzIG1lYW5zIHlvdXIgZW52aXJvbm1lbnQgaXMgbWlzY29uZmlndXJlZCwgaW4gcGFydGljdWxhciBjaGVjayBCQlBBVEguXG4nKQorCisgICAgIyBUaGUgbGVuZ3RoIG9mIFRNUERJUiBjYW4ndCBiZSBsb25nZXIgdGhhbiA0MTAKKyAgICBzdGF0dXMuYWRkcmVzdWx0KGNoZWNrX3BhdGhfbGVuZ3RoKHRtcGRpciwgIlRNUERJUiIsIDQxMCkpCisKKyAgICAjIENoZWNrIHRoYXQgVE1QRElSIGlzbid0IGxvY2F0ZWQgb24gbmZzCisgICAgc3RhdHVzLmFkZHJlc3VsdChjaGVja19ub3RfbmZzKHRtcGRpciwgIlRNUERJUiIpKQorCitkZWYgY2hlY2tfc2FuaXR5X2V2ZXJ5YnVpbGQoc3RhdHVzLCBkKToKKyAgICBpbXBvcnQgb3MsIHN0YXQKKyAgICAjIFNhbml0eSB0ZXN0cyB3aGljaCB0ZXN0IHRoZSB1c2VycyBlbnZpcm9ubWVudCBzbyBuZWVkIHRvIHJ1biBhdCBlYWNoIGJ1aWxkIChvciBhcmUgc28gY2hlYXAKKyAgICAjIGl0IG1ha2VzIHNlbnNlIHRvIGFsd2F5cyBydW4gdGhlbS4KKworICAgIGlmIDAgPT0gb3MuZ2V0dWlkKCk6CisgICAgICAgIHJhaXNlX3Nhbml0eV9lcnJvcigiRG8gbm90IHVzZSBCaXRiYWtlIGFzIHJvb3QuIiwgZCkKKworICAgICMgQ2hlY2sgdGhlIFB5dGhvbiB2ZXJzaW9uLCB3ZSBub3cgaGF2ZSBhIG1pbmltdW0gb2YgUHl0aG9uIDIuNy4zCisgICAgaW1wb3J0IHN5cworICAgIGlmIHN5cy5oZXh2ZXJzaW9uIDwgMHgwMjA3MDNGMDoKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgnVGhlIHN5c3RlbSByZXF1aXJlcyBhdCBsZWFzdCBQeXRob24gMi43LjMgdG8gcnVuLiBQbGVhc2UgdXBkYXRlIHlvdXIgUHl0aG9uIGludGVycHJldGVyLlxuJykKKworICAgICMgQ2hlY2sgdGhlIGJpdGJha2UgdmVyc2lvbiBtZWV0cyBtaW5pbXVtIHJlcXVpcmVtZW50cworICAgIGZyb20gZGlzdHV0aWxzLnZlcnNpb24gaW1wb3J0IExvb3NlVmVyc2lvbgorICAgIG1pbnZlcnNpb24gPSBkLmdldFZhcignQkJfTUlOX1ZFUlNJT04nLCBUcnVlKQorICAgIGlmIChMb29zZVZlcnNpb24oYmIuX192ZXJzaW9uX18pIDwgTG9vc2VWZXJzaW9uKG1pbnZlcnNpb24pKToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgnQml0YmFrZSB2ZXJzaW9uICVzIGlzIHJlcXVpcmVkIGFuZCB2ZXJzaW9uICVzIHdhcyBmb3VuZFxuJyAlIChtaW52ZXJzaW9uLCBiYi5fX3ZlcnNpb25fXykpCisKKyAgICBzYW5pdHlfY2hlY2tfY29uZmZpbGVzKHN0YXR1cywgZCkKKworICAgIHBhdGhzID0gZC5nZXRWYXIoJ1BBVEgnLCBUcnVlKS5zcGxpdCgiOiIpCisgICAgaWYgIi4iIGluIHBhdGhzIG9yICIuLyIgaW4gcGF0aHMgb3IgIiIgaW4gcGF0aHM6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIlBBVEggY29udGFpbnMgJy4nLCAnLi8nIG9yICcnIChlbXB0eSBlbGVtZW50KSwgd2hpY2ggd2lsbCBicmVhayB0aGUgYnVpbGQsIHBsZWFzZSByZW1vdmUgdGhpcy5cblBhcnNlZCBQQVRIIGlzICIgKyBzdHIocGF0aHMpICsgIlxuIikKKworICAgICMgQ2hlY2sgdGhhdCB0aGUgRElTVFJPIGlzIHZhbGlkLCBpZiBzZXQKKyAgICAjIG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQgRElTVFJPIHJlbmFtaW5nIERJU1RSTworICAgIGRpc3RybyA9IGQuZ2V0VmFyKCdESVNUUk8nLCBUcnVlKQorICAgIGlmIGRpc3RybyBhbmQgZGlzdHJvICE9ICJub2Rpc3RybyI6CisgICAgICAgIGlmIG5vdCAoIGNoZWNrX2NvbmZfZXhpc3RzKCJjb25mL2Rpc3Ryby8ke0RJU1RST30uY29uZiIsIGQpIG9yIGNoZWNrX2NvbmZfZXhpc3RzKCJjb25mL2Rpc3Ryby9pbmNsdWRlLyR7RElTVFJPfS5pbmMiLCBkKSApOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiRElTVFJPICclcycgbm90IGZvdW5kLiBQbGVhc2Ugc2V0IGEgdmFsaWQgRElTVFJPIGluIHlvdXIgbG9jYWwuY29uZlxuIiAlIGQuZ2V0VmFyKCJESVNUUk8iLCBUcnVlKSkKKworICAgICMgQ2hlY2sgdGhhdCBETF9ESVIgaXMgc2V0LCBleGlzdHMgYW5kIGlzIHdyaXRhYmxlLiBJbiB0aGVvcnksIHdlIHNob3VsZCBuZXZlciBldmVuIGhpdCB0aGUgY2hlY2sgaWYgRExfRElSIGlzbid0IAorICAgICMgc2V0LCBzaW5jZSBzbyBtdWNoIHJlbGllcyBvbiBpdCBiZWluZyBzZXQuCisgICAgZGxkaXIgPSBkLmdldFZhcignRExfRElSJywgVHJ1ZSkKKyAgICBpZiBub3QgZGxkaXI6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkRMX0RJUiBpcyBub3Qgc2V0LiBZb3VyIGVudmlyb25tZW50IGlzIG1pc2NvbmZpZ3VyZWQsIGNoZWNrIHRoYXQgRExfRElSIGlzIHNldCwgYW5kIGlmIHRoZSBkaXJlY3RvcnkgZXhpc3RzLCB0aGF0IGl0IGlzIHdyaXRhYmxlLiBcbiIpCisgICAgaWYgb3MucGF0aC5leGlzdHMoZGxkaXIpIGFuZCBub3Qgb3MuYWNjZXNzKGRsZGlyLCBvcy5XX09LKToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiRExfRElSOiAlcyBleGlzdHMgYnV0IHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUgd3JpdGUgYWNjZXNzIHRvIGl0LiBcbiIgJSBkbGRpcikKKyAgICBjaGVja19zeW1saW5rKGRsZGlyLCBkKQorCisgICAgIyBDaGVjayB0aGF0IHRoZSBNQUNISU5FIGlzIHZhbGlkLCBpZiBpdCBpcyBzZXQKKyAgICBtYWNoaW5ldmFsaWQgPSBUcnVlCisgICAgaWYgZC5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKToKKyAgICAgICAgaWYgbm90IGNoZWNrX2NvbmZfZXhpc3RzKCJjb25mL21hY2hpbmUvJHtNQUNISU5FfS5jb25mIiwgZCk6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCdQbGVhc2Ugc2V0IGEgdmFsaWQgTUFDSElORSBpbiB5b3VyIGxvY2FsLmNvbmYgb3IgZW52aXJvbm1lbnRcbicpCisgICAgICAgICAgICBtYWNoaW5ldmFsaWQgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdChjaGVja19zYW5pdHlfdmFsaWRtYWNoaW5lKGQpKQorICAgIGVsc2U6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoJ1BsZWFzZSBzZXQgYSBNQUNISU5FIGluIHlvdXIgbG9jYWwuY29uZiBvciBlbnZpcm9ubWVudFxuJykKKyAgICAgICAgbWFjaGluZXZhbGlkID0gRmFsc2UKKyAgICBpZiBtYWNoaW5ldmFsaWQ6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoY2hlY2tfdG9vbGNoYWluKGQpKQorCisgICAgIyBDaGVjayB0aGF0IHRoZSBTREtNQUNISU5FIGlzIHZhbGlkLCBpZiBpdCBpcyBzZXQKKyAgICBpZiBkLmdldFZhcignU0RLTUFDSElORScsIFRydWUpOgorICAgICAgICBpZiBub3QgY2hlY2tfY29uZl9leGlzdHMoImNvbmYvbWFjaGluZS1zZGsvJHtTREtNQUNISU5FfS5jb25mIiwgZCk6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCdTcGVjaWZpZWQgU0RLTUFDSElORSB2YWx1ZSBpcyBub3QgdmFsaWRcbicpCisgICAgICAgIGVsaWYgZC5nZXRWYXIoJ1NES19BUkNIJywgRmFsc2UpID09ICIke0JVSUxEX0FSQ0h9IjoKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoJ1NES01BQ0hJTkUgaXMgc2V0LCBidXQgU0RLX0FSQ0ggaGFzIG5vdCBiZWVuIGNoYW5nZWQgYXMgYSByZXN1bHQgLSBTREtNQUNISU5FIG1heSBoYXZlIGJlZW4gc2V0IHRvbyBsYXRlIChlLmcuIGluIHRoZSBkaXN0cm8gY29uZmlndXJhdGlvbilcbicpCisKKyAgICBjaGVja19zdXBwb3J0ZWRfZGlzdHJvKGQpCisKKyAgICAjIENoZWNrIGlmIERJU1BMQVkgaXMgc2V0IGlmIFRFU1RfSU1BR0UgaXMgc2V0CisgICAgaWYgZC5nZXRWYXIoJ1RFU1RfSU1BR0UnLCBUcnVlKSA9PSAnMScgb3IgZC5nZXRWYXIoJ0RFRkFVTFRfVEVTVF9TVUlURVMnLCBUcnVlKToKKyAgICAgICAgdGVzdHRhcmdldCA9IGQuZ2V0VmFyKCdURVNUX1RBUkdFVCcsIFRydWUpCisgICAgICAgIGlmIHRlc3R0YXJnZXQgPT0gJ3FlbXUnIG9yIHRlc3R0YXJnZXQgPT0gJ1FlbXVUYXJnZXQnOgorICAgICAgICAgICAgZGlzcGxheSA9IGQuZ2V0VmFyKCJCQl9PUklHRU5WIiwgRmFsc2UpLmdldFZhcigiRElTUExBWSIsIFRydWUpCisgICAgICAgICAgICBpZiBub3QgZGlzcGxheToKKyAgICAgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCd0ZXN0aW1hZ2UgbmVlZHMgYW4gWCBkZXNrdG9wIHRvIHN0YXJ0IHFlbXUsIHBsZWFzZSBzZXQgRElTUExBWSBjb3JyZWN0bHkgKGUuZy4gRElTUExBWT06MS4wKVxuJykKKworICAgIG9tYXNrID0gb3MudW1hc2soMDIyKQorICAgIGlmIG9tYXNrICYgMDc1NToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiUGxlYXNlIHVzZSBhIHVtYXNrIHdoaWNoIGFsbG93cyBhK3J4IGFuZCB1K3J3eFxuIikKKyAgICBvcy51bWFzayhvbWFzaykKKworICAgIGlmIGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpID09ICJhcm0iOgorICAgICAgICAjIFRoaXMgcGF0aCBpcyBubyBsb25nZXIgdXNlci1yZWFkYWJsZSBpbiBtb2Rlcm4gKHZlcnkgcmVjZW50KSBMaW51eAorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygiL3Byb2Mvc3lzL3ZtL21tYXBfbWluX2FkZHIiKToKKyAgICAgICAgICAgICAgICBmID0gb3BlbigiL3Byb2Mvc3lzL3ZtL21tYXBfbWluX2FkZHIiLCAiciIpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpZiAoaW50KGYucmVhZCgpLnN0cmlwKCkpID4gNjU1MzYpOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiL3Byb2Mvc3lzL3ZtL21tYXBfbWluX2FkZHIgaXMgbm90IDw9IDY1NTM2LiBUaGlzIHdpbGwgY2F1c2UgcHJvYmxlbXMgd2l0aCBxZW11IHNvIHBsZWFzZSBmaXggdGhlIHZhbHVlIChhcyByb290KS5cblxuVG8gZml4IHRoaXMgaW4gbGF0ZXIgcmVib290cywgc2V0IHZtLm1tYXBfbWluX2FkZHIgPSA2NTUzNiBpbiAvZXRjL3N5c2N0bC5jb25mLlxuIikKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworCisgICAgb2Vyb290ID0gZC5nZXRWYXIoJ0NPUkVCQVNFJywgVHJ1ZSkKKyAgICBpZiBvZXJvb3QuZmluZCgnKycpICE9IC0xOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJFcnJvciwgeW91IGhhdmUgYW4gaW52YWxpZCBjaGFyYWN0ZXIgKCspIGluIHlvdXIgQ09SRUJBU0UgZGlyZWN0b3J5IHBhdGguIFBsZWFzZSBtb3ZlIHRoZSBpbnN0YWxsYXRpb24gdG8gYSBkaXJlY3Rvcnkgd2hpY2ggZG9lc24ndCBpbmNsdWRlIGFueSArIGNoYXJhY3RlcnMuIikKKyAgICBpZiBvZXJvb3QuZmluZCgnQCcpICE9IC0xOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJFcnJvciwgeW91IGhhdmUgYW4gaW52YWxpZCBjaGFyYWN0ZXIgKEApIGluIHlvdXIgQ09SRUJBU0UgZGlyZWN0b3J5IHBhdGguIFBsZWFzZSBtb3ZlIHRoZSBpbnN0YWxsYXRpb24gdG8gYSBkaXJlY3Rvcnkgd2hpY2ggZG9lc24ndCBpbmNsdWRlIGFueSBAIGNoYXJhY3RlcnMuIikKKyAgICBpZiBvZXJvb3QuZmluZCgnICcpICE9IC0xOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJFcnJvciwgeW91IGhhdmUgYSBzcGFjZSBpbiB5b3VyIENPUkVCQVNFIGRpcmVjdG9yeSBwYXRoLiBQbGVhc2UgbW92ZSB0aGUgaW5zdGFsbGF0aW9uIHRvIGEgZGlyZWN0b3J5IHdoaWNoIGRvZXNuJ3QgaW5jbHVkZSBhIHNwYWNlIHNpbmNlIGF1dG90b29scyBkb2Vzbid0IHN1cHBvcnQgdGhpcy4iKQorCisgICAgIyBDaGVjayB0aGUgZm9ybWF0IG9mIE1JUlJPUlMsIFBSRU1JUlJPUlMgYW5kIFNTVEFURV9NSVJST1JTCisgICAgaW1wb3J0IHJlCisgICAgbWlycm9yX3ZhcnMgPSBbJ01JUlJPUlMnLCAnUFJFTUlSUk9SUycsICdTU1RBVEVfTUlSUk9SUyddCisgICAgcHJvdG9jb2xzID0gWydodHRwJywgJ2Z0cCcsICdmaWxlJywgJ2h0dHBzJywgXAorICAgICAgICAgICAgICAgICAnZ2l0JywgJ2dpdHNtJywgJ2hnJywgJ29zYycsICdwNCcsICdzdm4nLCBcCisgICAgICAgICAgICAgICAgICdienInLCAnY3ZzJ10KKyAgICBmb3IgbWlycm9yX3ZhciBpbiBtaXJyb3JfdmFyczoKKyAgICAgICAgbWlycm9ycyA9IChkLmdldFZhcihtaXJyb3JfdmFyLCBUcnVlKSBvciAnJykucmVwbGFjZSgnXFxuJywgJ1xuJykuc3BsaXQoJ1xuJykKKyAgICAgICAgZm9yIG1pcnJvcl9lbnRyeSBpbiBtaXJyb3JzOgorICAgICAgICAgICAgbWlycm9yX2VudHJ5ID0gbWlycm9yX2VudHJ5LnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG5vdCBtaXJyb3JfZW50cnk6CisgICAgICAgICAgICAgICAgIyBpZ25vcmUgYmxhbmsgbGluZXMKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGF0dGVybiwgbWlycm9yID0gbWlycm9yX2VudHJ5LnNwbGl0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIGJiLndhcm4oJ0ludmFsaWQgJXM6ICVzLCBzaG91bGQgYmUgMiBtZW1iZXJzLicgJSAobWlycm9yX3ZhciwgbWlycm9yX2VudHJ5LnN0cmlwKCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGRlY29kZWQgPSBiYi5mZXRjaDIuZGVjb2RldXJsKHBhdHRlcm4pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGF0dGVybl9zY2hlbWUgPSByZS5jb21waWxlKGRlY29kZWRbMF0pCisgICAgICAgICAgICBleGNlcHQgcmUuZXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGJiLndhcm4oJ0ludmFsaWQgc2NoZW1lIHJlZ2V4ICglcykgaW4gJXM7ICVzJyAlIChwYXR0ZXJuLCBtaXJyb3JfdmFyLCBtaXJyb3JfZW50cnkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIG5vdCBhbnkocGF0dGVybl9zY2hlbWUubWF0Y2gocHJvdG9jb2wpIGZvciBwcm90b2NvbCBpbiBwcm90b2NvbHMpOgorICAgICAgICAgICAgICAgIGJiLndhcm4oJ0ludmFsaWQgcHJvdG9jb2wgKCVzKSBpbiAlczogJXMnICUgKGRlY29kZWRbMF0sIG1pcnJvcl92YXIsIG1pcnJvcl9lbnRyeSkpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgbm90IGFueShtaXJyb3Iuc3RhcnRzd2l0aChwcm90b2NvbCArICc6Ly8nKSBmb3IgcHJvdG9jb2wgaW4gcHJvdG9jb2xzKToKKyAgICAgICAgICAgICAgICBiYi53YXJuKCdJbnZhbGlkIHByb3RvY29sIGluICVzOiAlcycgJSAobWlycm9yX3ZhciwgbWlycm9yX2VudHJ5KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBtaXJyb3Iuc3RhcnRzd2l0aCgnZmlsZTovLycpOgorICAgICAgICAgICAgICAgIGltcG9ydCB1cmxwYXJzZQorICAgICAgICAgICAgICAgIGNoZWNrX3N5bWxpbmsodXJscGFyc2UudXJscGFyc2UobWlycm9yKS5wYXRoLCBkKQorICAgICAgICAgICAgICAgICMgU1NUQVRFX01JUlJPUiBlbmRzIHdpdGggYSAvUEFUSCBzdHJpbmcKKyAgICAgICAgICAgICAgICBpZiBtaXJyb3IuZW5kc3dpdGgoJy9QQVRIJyk6CisgICAgICAgICAgICAgICAgICAgICMgcmVtb3ZlIC9QQVRIJCBmcm9tIFNTVEFURV9NSVJST1IgdG8gZ2V0IGEgd29ya2luZworICAgICAgICAgICAgICAgICAgICAjIGJhc2UgZGlyZWN0b3J5IHBhdGgKKyAgICAgICAgICAgICAgICAgICAgbWlycm9yX2Jhc2UgPSB1cmxwYXJzZS51cmxwYXJzZShtaXJyb3JbOi0xKmxlbignL1BBVEgnKV0pLnBhdGgKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tfc3ltbGluayhtaXJyb3JfYmFzZSwgZCkKKworICAgICMgQ2hlY2sgdGhhdCBUTVBESVIgaGFzbid0IGNoYW5nZWQgbG9jYXRpb24gc2luY2UgdGhlIGxhc3QgdGltZSB3ZSB3ZXJlIHJ1bgorICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorICAgIGNoZWNrZmlsZSA9IG9zLnBhdGguam9pbih0bXBkaXIsICJzYXZlZF90bXBkaXIiKQorICAgIGlmIG9zLnBhdGguZXhpc3RzKGNoZWNrZmlsZSk6CisgICAgICAgIHdpdGggb3BlbihjaGVja2ZpbGUsICJyIikgYXMgZjoKKyAgICAgICAgICAgIHNhdmVkX3RtcGRpciA9IGYucmVhZCgpLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIChzYXZlZF90bXBkaXIgIT0gdG1wZGlyKToKKyAgICAgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJFcnJvciwgVE1QRElSIGhhcyBjaGFuZ2VkIGxvY2F0aW9uLiBZb3UgbmVlZCB0byBlaXRoZXIgbW92ZSBpdCBiYWNrIHRvICVzIG9yIHJlYnVpbGRcbiIgJSBzYXZlZF90bXBkaXIpCisgICAgZWxzZToKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHRtcGRpcikKKyAgICAgICAgIyBSZW1vdmUgc2V0dWlkLCBzZXRnaWQgYW5kIHN0aWNreSBiaXRzIGZyb20gVE1QRElSCisgICAgICAgIG9zLmNobW9kKHRtcGRpciwgb3Muc3RhdCh0bXBkaXIpLnN0X21vZGUgJiB+IHN0YXQuU19JU1VJRCkKKyAgICAgICAgb3MuY2htb2QodG1wZGlyLCBvcy5zdGF0KHRtcGRpcikuc3RfbW9kZSAmIH4gc3RhdC5TX0lTR0lEKQorICAgICAgICBvcy5jaG1vZCh0bXBkaXIsIG9zLnN0YXQodG1wZGlyKS5zdF9tb2RlICYgfiBzdGF0LlNfSVNWVFgpCisgICAgICAgIHdpdGggb3BlbihjaGVja2ZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUodG1wZGlyKQorCisgICAgIyBDaGVjayB2bWRrIGFuZCBsaXZlIGNhbid0IGJlIGJ1aWx0IHRvZ2V0aGVyLgorICAgIGlmICd2bWRrJyBpbiBkLmdldFZhcignSU1BR0VfRlNUWVBFUycsIFRydWUpIGFuZCAnbGl2ZScgaW4gZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiRXJyb3IsIElNQUdFX0ZTVFlQRVMgdm1kayBhbmQgbGl2ZSBjYW4ndCBiZSBidWlsdCB0b2dldGhlclxuIikKKworICAgICMgQ2hlY2sgdmRpIGFuZCBsaXZlIGNhbid0IGJlIGJ1aWx0IHRvZ2V0aGVyLgorICAgIGlmICd2ZGknIGluIGQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJywgVHJ1ZSkgYW5kICdsaXZlJyBpbiBkLmdldFZhcignSU1BR0VfRlNUWVBFUycsIFRydWUpOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJFcnJvciwgSU1BR0VfRlNUWVBFUyB2ZGkgYW5kIGxpdmUgY2FuJ3QgYmUgYnVpbHQgdG9nZXRoZXJcbiIpCisKKyAgICAjIENoZWNrIHFjb3cyIGFuZCBsaXZlIGNhbid0IGJlIGJ1aWx0IHRvZ2V0aGVyLgorICAgIGlmICdxY293MicgaW4gZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKSBhbmQgJ2xpdmUnIGluIGQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJywgVHJ1ZSk6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkVycm9yLCBJTUFHRV9GU1RZUEVTIHFjb3cyIGFuZCBsaXZlIGNhbid0IGJlIGJ1aWx0IHRvZ2V0aGVyXG4iKQorCisgICAgIyBDaGVjayAvYmluL3NoIGxpbmtzIHRvIGRhc2ggb3IgYmFzaAorICAgIHJlYWxfc2ggPSBvcy5wYXRoLnJlYWxwYXRoKCcvYmluL3NoJykKKyAgICBpZiBub3QgcmVhbF9zaC5lbmRzd2l0aCgnL2Rhc2gnKSBhbmQgbm90IHJlYWxfc2guZW5kc3dpdGgoJy9iYXNoJyk6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkVycm9yLCAvYmluL3NoIGxpbmtzIHRvICVzLCBtdXN0IGJlIGRhc2ggb3IgYmFzaFxuIiAlIHJlYWxfc2gpCisKK2RlZiBjaGVja19zYW5pdHkoc2FuaXR5X2RhdGEpOgorICAgIGNsYXNzIFNhbml0eVN0YXR1cyhvYmplY3QpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzZWxmLm1lc3NhZ2VzID0gIiIKKyAgICAgICAgICAgIHNlbGYubmV0d29ya19lcnJvciA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLnJlcGFyc2UgPSBGYWxzZQorCisgICAgICAgIGRlZiBhZGRyZXN1bHQoc2VsZiwgbWVzc2FnZSk6CisgICAgICAgICAgICBpZiBtZXNzYWdlOgorICAgICAgICAgICAgICAgIHNlbGYubWVzc2FnZXMgPSBzZWxmLm1lc3NhZ2VzICsgbWVzc2FnZQorCisgICAgc3RhdHVzID0gU2FuaXR5U3RhdHVzKCkKKworICAgIHRtcGRpciA9IHNhbml0eV9kYXRhLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICBzc3RhdGVfZGlyID0gc2FuaXR5X2RhdGEuZ2V0VmFyKCdTU1RBVEVfRElSJywgVHJ1ZSkKKworICAgIGNoZWNrX3N5bWxpbmsoc3N0YXRlX2Rpciwgc2FuaXR5X2RhdGEpCisKKyAgICAjIENoZWNrIHNhdmVkIHNhbml0eSBpbmZvCisgICAgbGFzdF9zYW5pdHlfdmVyc2lvbiA9IDAKKyAgICBsYXN0X3RtcGRpciA9ICIiCisgICAgbGFzdF9zc3RhdGVfZGlyID0gIiIKKyAgICBzYW5pdHl2ZXJmaWxlID0gc2FuaXR5X2RhdGEuZXhwYW5kKCIke1RPUERJUn0vY29uZi9zYW5pdHlfaW5mbyIpCisgICAgaWYgb3MucGF0aC5leGlzdHMoc2FuaXR5dmVyZmlsZSk6CisgICAgICAgIHdpdGggb3BlbihzYW5pdHl2ZXJmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnU0FOSVRZX1ZFUlNJT04nKToKKyAgICAgICAgICAgICAgICAgICAgbGFzdF9zYW5pdHlfdmVyc2lvbiA9IGludChsaW5lLnNwbGl0KClbMV0pCisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdUTVBESVInKToKKyAgICAgICAgICAgICAgICAgICAgbGFzdF90bXBkaXIgPSBsaW5lLnNwbGl0KClbMV0KKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1NTVEFURV9ESVInKToKKyAgICAgICAgICAgICAgICAgICAgbGFzdF9zc3RhdGVfZGlyID0gbGluZS5zcGxpdCgpWzFdCisKKyAgICBjaGVja19zYW5pdHlfZXZlcnlidWlsZChzdGF0dXMsIHNhbml0eV9kYXRhKQorICAgIAorICAgIHNhbml0eV92ZXJzaW9uID0gaW50KHNhbml0eV9kYXRhLmdldFZhcignU0FOSVRZX1ZFUlNJT04nLCBUcnVlKSBvciAxKQorICAgIG5ldHdvcmtfZXJyb3IgPSBGYWxzZQorICAgIGlmIGxhc3Rfc2FuaXR5X3ZlcnNpb24gPCBzYW5pdHlfdmVyc2lvbjogCisgICAgICAgIGNoZWNrX3Nhbml0eV92ZXJzaW9uX2NoYW5nZShzdGF0dXMsIHNhbml0eV9kYXRhKQorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KGNoZWNrX3Nhbml0eV9zc3RhdGVfZGlyX2NoYW5nZShzc3RhdGVfZGlyLCBzYW5pdHlfZGF0YSkpCisgICAgZWxzZTogCisgICAgICAgIGlmIGxhc3Rfc3N0YXRlX2RpciAhPSBzc3RhdGVfZGlyOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdChjaGVja19zYW5pdHlfc3N0YXRlX2Rpcl9jaGFuZ2Uoc3N0YXRlX2Rpciwgc2FuaXR5X2RhdGEpKQorCisgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5kaXJuYW1lKHNhbml0eXZlcmZpbGUpKSBhbmQgbm90IHN0YXR1cy5tZXNzYWdlczoKKyAgICAgICAgd2l0aCBvcGVuKHNhbml0eXZlcmZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoIlNBTklUWV9WRVJTSU9OICVzXG4iICUgc2FuaXR5X3ZlcnNpb24pIAorICAgICAgICAgICAgZi53cml0ZSgiVE1QRElSICVzXG4iICUgdG1wZGlyKSAKKyAgICAgICAgICAgIGYud3JpdGUoIlNTVEFURV9ESVIgJXNcbiIgJSBzc3RhdGVfZGlyKSAKKworICAgIHNhbml0eV9oYW5kbGVfYWJpY2hhbmdlcyhzdGF0dXMsIHNhbml0eV9kYXRhKQorCisgICAgaWYgc3RhdHVzLm1lc3NhZ2VzICE9ICIiOgorICAgICAgICByYWlzZV9zYW5pdHlfZXJyb3Ioc2FuaXR5X2RhdGEuZXhwYW5kKHN0YXR1cy5tZXNzYWdlcyksIHNhbml0eV9kYXRhLCBzdGF0dXMubmV0d29ya19lcnJvcikKKyAgICByZXR1cm4gc3RhdHVzLnJlcGFyc2UKKworIyBDcmVhdGUgYSBjb3B5IG9mIHRoZSBkYXRhc3RvcmUgYW5kIGZpbmFsaXNlIGl0IHRvIGVuc3VyZSBhcHBlbmRzIGFuZCAKKyMgb3ZlcnJpZGVzIGFyZSBzZXQgLSB0aGUgZGF0YXN0b3JlIGhhcyB5ZXQgdG8gYmUgZmluYWxpc2VkIGF0IENvbmZpZ1BhcnNlZAorZGVmIGNvcHlfZGF0YShlKToKKyAgICBzYW5pdHlfZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShlLmRhdGEpCisgICAgc2FuaXR5X2RhdGEuZmluYWxpemUoKQorICAgIHJldHVybiBzYW5pdHlfZGF0YQorCithZGRoYW5kbGVyIGNoZWNrX3Nhbml0eV9ldmVudGhhbmRsZXIKK2NoZWNrX3Nhbml0eV9ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5TYW5pdHlDaGVjayBiYi5ldmVudC5OZXR3b3JrVGVzdCIKK3B5dGhvbiBjaGVja19zYW5pdHlfZXZlbnRoYW5kbGVyKCkgeworICAgIGlmIGJiLmV2ZW50LmdldE5hbWUoZSkgPT0gIlNhbml0eUNoZWNrIjoKKyAgICAgICAgc2FuaXR5X2RhdGEgPSBjb3B5X2RhdGEoZSkKKyAgICAgICAgaWYgZS5nZW5lcmF0ZWV2ZW50czoKKyAgICAgICAgICAgIHNhbml0eV9kYXRhLnNldFZhcigiU0FOSVRZX1VTRV9FVkVOVFMiLCAiMSIpCisgICAgICAgIHJlcGFyc2UgPSBjaGVja19zYW5pdHkoc2FuaXR5X2RhdGEpCisgICAgICAgIGUuZGF0YS5zZXRWYXIoIkJCX0lOVkFMSURDT05GIiwgcmVwYXJzZSkKKyAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5TYW5pdHlDaGVja1Bhc3NlZCgpLCBlLmRhdGEpCisgICAgZWxpZiBiYi5ldmVudC5nZXROYW1lKGUpID09ICJOZXR3b3JrVGVzdCI6CisgICAgICAgIHNhbml0eV9kYXRhID0gY29weV9kYXRhKGUpCisgICAgICAgIGlmIGUuZ2VuZXJhdGVldmVudHM6CisgICAgICAgICAgICBzYW5pdHlfZGF0YS5zZXRWYXIoIlNBTklUWV9VU0VfRVZFTlRTIiwgIjEiKQorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk5ldHdvcmtUZXN0RmFpbGVkKCkgaWYgY2hlY2tfY29ubmVjdGl2aXR5KHNhbml0eV9kYXRhKSBlbHNlIGJiLmV2ZW50Lk5ldHdvcmtUZXN0UGFzc2VkKCksIGUuZGF0YSkKKworICAgIHJldHVybgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2NvbnMuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Njb25zLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhkZTgyMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Njb25zLmJiY2xhc3MKQEAgLTAsMCArMSwxNSBAQAorREVQRU5EUyArPSAicHl0aG9uLXNjb25zLW5hdGl2ZSIKKworRVhUUkFfT0VTQ09OUyA/PSAiIgorCitzY29uc19kb19jb21waWxlKCkgeworICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vc2NvbnMgJHtQQVJBTExFTF9NQUtFfSBQUkVGSVg9JHtwcmVmaXh9IHByZWZpeD0ke3ByZWZpeH0gJHtFWFRSQV9PRVNDT05TfSB8fCBcCisgICAgICAgIGRpZSAic2NvbnMgYnVpbGQgZXhlY3V0aW9uIGZhaWxlZC4iCit9CisKK3Njb25zX2RvX2luc3RhbGwoKSB7CisgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9zY29ucyBQUkVGSVg9JHtEfSR7cHJlZml4fSBwcmVmaXg9JHtEfSR7cHJlZml4fSBpbnN0YWxsICR7RVhUUkFfT0VTQ09OU318fCBcCisgICAgICAgIGRpZSAic2NvbnMgaW5zdGFsbCBleGVjdXRpb24gZmFpbGVkLiIKK30KKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb21waWxlIGRvX2luc3RhbGwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NkbC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2RsLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MzMTI4OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NkbC5iYmNsYXNzCkBAIC0wLDAgKzEsNiBAQAorIworIyAoQykgTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QFZhbmlsbGUuZGU+CisjCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlic2RsIGxpYnNkbC1taXhlciBsaWJzZGwtaW1hZ2UiCitTRUNUSU9OID0gIngxMS9nYW1lcyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NldHVwdG9vbHMuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NldHVwdG9vbHMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjM0M2IxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2V0dXB0b29scy5iYmNsYXNzCkBAIC0wLDAgKzEsOCBAQAoraW5oZXJpdCBkaXN0dXRpbHMKKworREVQRU5EUyArPSAicHl0aG9uLWRpc3RyaWJ1dGUtbmF0aXZlIgorCitESVNUVVRJTFNfSU5TVEFMTF9BUkdTID0gIi0tcm9vdD0ke0R9IFwKKyAgICAtLXByZWZpeD0ke3ByZWZpeH0gXAorICAgIC0taW5zdGFsbC1saWI9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gXAorICAgIC0taW5zdGFsbC1kYXRhPSR7ZGF0YWRpcn0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zZXR1cHRvb2xzMy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2V0dXB0b29sczMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTZkZDk0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2V0dXB0b29sczMuYmJjbGFzcwpAQCAtMCwwICsxLDggQEAKK2luaGVyaXQgZGlzdHV0aWxzMworCitERVBFTkRTICs9ICJweXRob24zLXNldHVwdG9vbHMtbmF0aXZlIgorCitESVNUVVRJTFNfSU5TVEFMTF9BUkdTID0gIi0tcm9vdD0ke0R9IFwKKyAgICAtLXByZWZpeD0ke3ByZWZpeH0gXAorICAgIC0taW5zdGFsbC1saWI9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gXAorICAgIC0taW5zdGFsbC1kYXRhPSR7ZGF0YWRpcn0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zaWduX3JwbS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2lnbl9ycG0uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWE0Y2Q4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2lnbl9ycG0uYmJjbGFzcwpAQCAtMCwwICsxLDc1IEBACisjIENsYXNzIGZvciBnZW5lcmF0aW5nIHNpZ25lZCBSUE0gcGFja2FnZXMuCisjCisjIENvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHVzZWQgYnkgdGhpcyBjbGFzczoKKyMgUlBNX0dQR19QQVNTUEhSQVNFX0ZJTEUKKyMgICAgICAgICAgIFBhdGggdG8gYSBmaWxlIGNvbnRhaW5pbmcgdGhlIHBhc3NwaHJhc2Ugb2YgdGhlIHNpZ25pbmcga2V5LgorIyBSUE1fR1BHX05BTUUKKyMgICAgICAgICAgIE5hbWUgb2YgdGhlIGtleSB0byBzaWduIHdpdGguIEFsdGVybmF0aXZlbHkgeW91IGNhbiBkZWZpbmUKKyMgICAgICAgICAgICVfZ3BnX25hbWUgbWFjcm8gaW4geW91ciB+Ly5vZXJwbW1hY3JvcyBmaWxlLgorIyBSUE1fR1BHX1BVQktFWQorIyAgICAgICAgICAgUGF0aCB0byBhIGZpbGUgY29udGFpbmluZyB0aGUgcHVibGljIGtleSAoaW4gImFybW9yIiBmb3JtYXQpCisjICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRoZSBzaWduaW5nIGtleS4KKyMgR1BHX0JJTgorIyAgICAgICAgICAgT3B0aW9uYWwgdmFyaWFibGUgZm9yIHNwZWNpZnlpbmcgdGhlIGdwZyBiaW5hcnkvd3JhcHBlciB0byB1c2UgZm9yCisjICAgICAgICAgICBzaWduaW5nLgorIworaW5oZXJpdCBzYW5pdHkKKworUlBNX1NJR05fUEFDS0FHRVM9JzEnCisKKworX2NoZWNrX2dwZ19uYW1lICgpIHsKKyAgICBtYWNyb2RlZj1gcnBtIC1FICclX2dwZ19uYW1lJ2AKKyAgICBbICIkbWFjcm9kZWYiID09ICIlX2dwZ19uYW1lIiBdICYmIHJldHVybiAxIHx8IHJldHVybiAwCit9CisKKworZGVmIHJwbXNpZ25fd3JhcHBlcihkLCBmaWxlcywgcGFzc3BocmFzZSwgZ3BnX25hbWU9Tm9uZSk6CisgICAgaW1wb3J0IHBleHBlY3QKKworICAgICMgRmluZCB0aGUgY29ycmVjdCBycG0gYmluYXJ5CisgICAgcnBtX2Jpbl9wYXRoID0gZC5nZXRWYXIoJ1NUQUdJTkdfQklORElSX05BVElWRScsIFRydWUpICsgJy9ycG0nCisgICAgY21kID0gcnBtX2Jpbl9wYXRoICsgIiAtLWFkZHNpZ24gIgorICAgIGlmIGdwZ19uYW1lOgorICAgICAgICBjbWQgKz0gIi0tZGVmaW5lICclJV9ncGdfbmFtZSAlcycgIiAlIGdwZ19uYW1lCisgICAgZWxzZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdfY2hlY2tfZ3BnX25hbWUnLCBkKQorICAgICAgICBleGNlcHQgYmIuYnVpbGQuRnVuY0ZhaWxlZDoKKyAgICAgICAgICAgIHJhaXNlX3Nhbml0eV9lcnJvcigiWW91IG5lZWQgdG8gZGVmaW5lIFJQTV9HUEdfTkFNRSBpbiBiaXRiYWtlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29uZmlnIG9yIHRoZSAlX2dwZ19uYW1lIFJQTSBtYWNybyBkZWZpbmVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGUuZy4gaW4gIH4vLm9lcnBtbWFjcm9zIiwgZCkKKyAgICBpZiBkLmdldFZhcignR1BHX0JJTicsIFRydWUpOgorICAgICAgICBjbWQgKz0gIi0tZGVmaW5lICclJV9fZ3BnICVzJyAiICUgZC5nZXRWYXIoJ0dQR19CSU4nLCBUcnVlKQorICAgIGNtZCArPSAnICcuam9pbihmaWxlcykKKworICAgICMgTmVlZCB0byB1c2UgcGV4cGVjdCBmb3IgZmVlZGluZyB0aGUgcGFzc3BocmFzZQorICAgIHByb2MgPSBwZXhwZWN0LnNwYXduKGNtZCkKKyAgICB0cnk6CisgICAgICAgIHByb2MuZXhwZWN0X2V4YWN0KCdFbnRlciBwYXNzIHBocmFzZTonLCB0aW1lb3V0PTE1KQorICAgICAgICBwcm9jLnNlbmRsaW5lKHBhc3NwaHJhc2UpCisgICAgICAgIHByb2MuZXhwZWN0KHBleHBlY3QuRU9GLCB0aW1lb3V0PTkwMCkKKyAgICAgICAgcHJvYy5jbG9zZSgpCisgICAgZXhjZXB0IHBleHBlY3QuVElNRU9VVCBhcyBlcnI6CisgICAgICAgIGJiLmRlYnVnKCdycG1zaWduIHRpbWVvdXQ6ICVzJyAlIGVycikKKyAgICAgICAgcHJvYy50ZXJtaW5hdGUoKQorICAgIHJldHVybiBwcm9jLmV4aXRzdGF0dXMKKworCitweXRob24gc2lnbl9ycG0gKCkgeworICAgIGltcG9ydCBnbG9iCisKKyAgICBycG1fZ3BnX3Bhc3NfZmlsZSA9IChkLmdldFZhcigiUlBNX0dQR19QQVNTUEhSQVNFX0ZJTEUiLCBUcnVlKSBvciAiIikKKyAgICBpZiBycG1fZ3BnX3Bhc3NfZmlsZToKKyAgICAgICAgd2l0aCBvcGVuKHJwbV9ncGdfcGFzc19maWxlKSBhcyBmb2JqOgorICAgICAgICAgICAgcnBtX2dwZ19wYXNzcGhyYXNlID0gZm9iai5yZWFkbGluZXMoKVswXS5yc3RyaXAoJ1xuJykKKyAgICBlbHNlOgorICAgICAgICByYWlzZV9zYW5pdHlfZXJyb3IoIllvdSBuZWVkIHRvIGRlZmluZSBSUE1fR1BHX1BBU1NQSFJBU0VfRklMRSBpbiB0aGUgY29uZmlnIiwgZCkKKworICAgIHJwbV9ncGdfbmFtZSA9IChkLmdldFZhcigiUlBNX0dQR19OQU1FIiwgVHJ1ZSkgb3IgIiIpCisKKyAgICBycG1zID0gZ2xvYi5nbG9iKGQuZ2V0VmFyKCdSUE1fUEtHV1JJVEVESVInLCBUcnVlKSArICcvKicpCisKKyAgICBpZiBycG1zaWduX3dyYXBwZXIoZCwgcnBtcywgcnBtX2dwZ19wYXNzcGhyYXNlLCBycG1fZ3BnX25hbWUpICE9IDA6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIlJQTSBzaWduaW5nIGZhaWxlZCIpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zaXAuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NpcC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZDJhMTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zaXAuYmJjbGFzcwpAQCAtMCwwICsxLDYxIEBACisjIEJ1aWxkIENsYXNzIGZvciBTaXAgYmFzZWQgUHl0aG9uIEJpbmRpbmdzCisjIChDKSBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtaWNrZXlAVmFuaWxsZS5kZT4KKyMKK1NUQUdJTkdfU0lQRElSID89ICIke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L3NpcCIKKworREVQRU5EUyAgPSsgInNpcC1uYXRpdmUiCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uLXNpcCIKKworIyBkZWZhdWx0IHN0dWZmLCBkbyBub3QgdW5jb21tZW50CisjIEVYVFJBX1NJUFRBR1MgPSAiLXRXU19YMTEgLXRRdF80XzNfMCIKKworIyBkb19nZW5lcmF0ZSBpcyBiZWZvcmUgZG9fY29uZmlndXJlIHNvIGVuc3VyZSB0aGF0IHNpcF9uYXRpdmUgaXMgcG9wdWxhdGVkIGluIHN5c3Jvb3QgYmVmb3JlIGV4ZWN1dGluZyBpdAorZG9fZ2VuZXJhdGVbZGVwZW5kc10gKz0gInNpcC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworc2lwX2RvX2dlbmVyYXRlKCkgeworCWlmIFsgLXogIiR7U0lQX01PRFVMRVN9IiBdOyB0aGVuIAorCQlNT0RVTEVTPSJgbHMgc2lwLyptb2Quc2lwYCIKKwllbHNlCisJCU1PRFVMRVM9IiR7U0lQX01PRFVMRVN9IgorCWZpCisKKwlpZiBbIC16ICIkTU9EVUxFUyIgXTsgdGhlbgorCQlkaWUgIlNJUF9NT0RVTEVTIG5vdCBzZXQgYW5kIG5vIG1vZHVsZXMgZm91bmQgaW4gJFBXRCIKKyAgICAgICAgZWxzZQorCQliYm5vdGUgInVzaW5nIG1vZHVsZXMgJyR7U0lQX01PRFVMRVN9JyBhbmQgdGFncyAnJHtFWFRSQV9TSVBUQUdTfSciCisJZmkKKworCWlmIFsgLXogIiR7RVhUUkFfU0lQVEFHU30iIF07IHRoZW4KKwkJZGllICJFWFRSQV9TSVBUQUdTIG5lZWRzIHRvIGJlIHNldCEiCisJZWxzZQorCQlTSVBUQUdTPSIke0VYVFJBX1NJUFRBR1N9IgorCWZpCisKKwlpZiBbICEgLXogIiR7U0lQX0ZFQVRVUkVTfSIgXTsgdGhlbgorCQlGRUFUVVJFUz0iLXogJHtTSVBfRkVBVFVSRVN9IgorCQliYm5vdGUgInNpcCBmZWF0dXJlIGZpbGU6ICR7U0lQX0ZFQVRVUkVTfSIKKwlmaQorCisJZm9yIG1vZHVsZSBpbiAkTU9EVUxFUworCWRvCisJCWluc3RhbGwgLWQgJHttb2R1bGV9LworCQllY2hvICJjYWxsaW5nICdzaXA0IC1JIHNpcCAtSSAke1NUQUdJTkdfU0lQRElSfSAke1NJUFRBR1N9ICR7RkVBVFVSRVN9IC1jICR7bW9kdWxlfSAtYiAke21vZHVsZX0vJHttb2R1bGV9LnByby5pbiBzaXAvJHttb2R1bGV9LyR7bW9kdWxlfW1vZC5zaXAnIgorCQlzaXA0IC1JICR7U1RBR0lOR19TSVBESVJ9IC1JIHNpcCAke1NJUFRBR1N9ICR7RkVBVFVSRVN9IC1jICR7bW9kdWxlfSAtYiAke21vZHVsZX0vJHttb2R1bGV9LnNiZiBcCisJCQlzaXAvJHttb2R1bGV9LyR7bW9kdWxlfW1vZC5zaXAgfHwgZGllICJFcnJvciBjYWxsaW5nIHNpcCBvbiAke21vZHVsZX0iCisJCXNlZCAtZSAncyx0YXJnZXQsVEFSR0VULCcgLWUgJ3Msc291cmNlcyxTT1VSQ0VTLCcgLWUgJ3MsaGVhZGVycyxIRUFERVJTLCcgXAorCQkJJHttb2R1bGV9LyR7bW9kdWxlfS5zYmYgfCBzZWQgcywibW9jX0hFQURFUlMgPSIsIkhFQURFUlMgKz0iLCBcCisJCQk+JHttb2R1bGV9LyR7bW9kdWxlfS5wcm8KKwkJZWNobyAiVEVNUExBVEU9bGliIiA+PiR7bW9kdWxlfS8ke21vZHVsZX0ucHJvCisJCVsgIiR7bW9kdWxlfSIgPSAicXQiIF0gCQkmJiBlY2hvICIiIAkJPj4ke21vZHVsZX0vJHttb2R1bGV9LnBybworCQlbICIke21vZHVsZX0iID0gInF0Y2FudmFzIiBdIAkmJiBlY2hvICIiCQk+PiR7bW9kdWxlfS8ke21vZHVsZX0ucHJvCisJCVsgIiR7bW9kdWxlfSIgPSAicXR0YWJsZSIgXSAJJiYgZWNobyAiIgkJPj4ke21vZHVsZX0vJHttb2R1bGV9LnBybworCQlbICIke21vZHVsZX0iID0gInF3dCIgXSAJJiYgZWNobyAiIgkJPj4ke21vZHVsZX0vJHttb2R1bGV9LnBybworCQlbICIke21vZHVsZX0iID0gInF0cGUiIF0gICAgICAgICYmIGVjaG8gIiIJCT4+JHttb2R1bGV9LyR7bW9kdWxlfS5wcm8KKwkJWyAiJHttb2R1bGV9IiA9ICJxdHBlIiBdICAgICAgICAmJiBlY2hvICJMSUJTKz0tbHFwZSIJPj4ke21vZHVsZX0vJHttb2R1bGV9LnBybworCQl0cnVlCisJZG9uZQorfQorCitFWFBPUlRfRlVOQ1RJT05TIGRvX2dlbmVyYXRlCisKK2FkZHRhc2sgZ2VuZXJhdGUgYWZ0ZXIgZG9fdW5wYWNrIGRvX3BhdGNoIGJlZm9yZSBkb19jb25maWd1cmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NpdGVjb25maWcuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NpdGVjb25maWcuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWRjZTQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2l0ZWNvbmZpZy5iYmNsYXNzCkBAIC0wLDAgKzEsMzMgQEAKK3B5dGhvbiBzaXRlY29uZmlnX2RvX3NpdGVjb25maWcgKCkgeworCXNoYXJlZF9zdGF0ZSA9IHNzdGF0ZV9zdGF0ZV9mcm9tdmFycyhkKQorCWlmIHNoYXJlZF9zdGF0ZVsndGFzayddICE9ICdwb3B1bGF0ZV9zeXNyb290JzoKKwkJcmV0dXJuCisJaWYgbm90IG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKGQuZ2V0VmFyKCdGSUxFX0RJUk5BTUUnLCBUcnVlKSwgJ3NpdGVfY29uZmlnJykpOgorCQliYi5kZWJ1ZygxLCAiTm8gc2l0ZV9jb25maWcgZGlyZWN0b3J5LCBza2lwcGluZyBkb19zaXRlY29uZmlnIikKKwkJcmV0dXJuCisJYmIuYnVpbGQuZXhlY19mdW5jKCdkb19zaXRlY29uZmlnX2dlbmNhY2hlJywgZCkKKwlzc3RhdGVfY2xlYW4oc2hhcmVkX3N0YXRlLCBkKQorCXNzdGF0ZV9pbnN0YWxsKHNoYXJlZF9zdGF0ZSwgZCkKK30KKworRVhUUkFTSVRFQ09ORklHID89ICIiCisKK3NpdGVjb25maWdfZG9fc2l0ZWNvbmZpZ19nZW5jYWNoZSAoKSB7CisJbWtkaXIgLXAgJHtXT1JLRElSfS9zaXRlX2NvbmZpZ18ke01BQ0hJTkV9CisJZ2VuLXNpdGUtY29uZmlnICR7RklMRV9ESVJOQU1FfS9zaXRlX2NvbmZpZyBcCisJCT4ke1dPUktESVJ9L3NpdGVfY29uZmlnXyR7TUFDSElORX0vY29uZmlndXJlLmFjCisJY2QgJHtXT1JLRElSfS9zaXRlX2NvbmZpZ18ke01BQ0hJTkV9CisJYXV0b2NvbmYKKwlybSAtZiAke0JQTn1fY2FjaGUKKwlDT05GSUdfU0lURT0iIiAke0VYVFJBU0lURUNPTkZJR30gLi9jb25maWd1cmUgJHtDT05GSUdVUkVPUFRTfSAtLWNhY2hlLWZpbGUgJHtCUE59X2NhY2hlCisJc2VkIC1uIC1lICIvYWNfY3ZfY19iaWdlbmRpYW4vcCIgLWUgIi9hY19jdl9zaXplb2ZfL3AiIFwKKwkJLWUgIi9hY19jdl90eXBlXy9wIiAtZSAiL2FjX2N2X2hlYWRlcl8vcCIgLWUgIi9hY19jdl9mdW5jXy9wIiBcCisJCTwgJHtCUE59X2NhY2hlID4gJHtCUE59X2NvbmZpZworCW1rZGlyIC1wICR7U1lTUk9PVF9ERVNURElSfSR7ZGF0YWRpcn0vJHtUQVJHRVRfU1lTfV9jb25maWdfc2l0ZS5kCisJY3AgJHtCUE59X2NvbmZpZyAke1NZU1JPT1RfREVTVERJUn0ke2RhdGFkaXJ9LyR7VEFSR0VUX1NZU31fY29uZmlnX3NpdGUuZAorCit9CisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3N0YXRlLWludGVyY2VwdGZ1bmNzXSArPSAiZG9fc2l0ZWNvbmZpZyAiCisKK0VYUE9SVF9GVU5DVElPTlMgZG9fc2l0ZWNvbmZpZyBkb19zaXRlY29uZmlnX2dlbmNhY2hlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zaXRlaW5mby5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2l0ZWluZm8uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjZlYWM0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2l0ZWluZm8uYmJjbGFzcwpAQCAtMCwwICsxLDE3MSBAQAorIyBUaGlzIGNsYXNzIGV4aXN0cyB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0YXJnZXRzIHRoYXQKKyMgbWF5IGJlIG5lZWRlZCBieSBvdGhlciBjbGFzc2VzIGFuZC9vciByZWNpcGVzLiBJZiB5b3UgYWRkIGEgbmV3CisjIHRhcmdldCB0aGlzIHdpbGwgcHJvYmFibHkgbmVlZCB0byBiZSB1cGRhdGVkLgorCisjCisjIFJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgJ3doYXQnIGZvciB0aGUgbmFtZWQgdGFyZ2V0ICd0YXJnZXQnCisjIHdoZXJlICd0YXJnZXQnID09ICI8YXJjaD4tPG9zPiIKKyMKKyMgJ3doYXQnIGNhbiBiZSBvbmUgb2YKKyMgKiB0YXJnZXQ6IFJldHVybnMgdGhlIHRhcmdldCBuYW1lICgiPGFyY2g+LTxvcz4iKQorIyAqIGVuZGlhbmVzczogUmV0dXJuICJiZSIgZm9yIGJpZyBlbmRpYW4gdGFyZ2V0cywgImxlIiBmb3IgbGl0dGxlIGVuZGlhbgorIyAqIGJpdHM6IFJldHVybnMgdGhlIGJpdCBzaXplIG9mIHRoZSB0YXJnZXQsIGVpdGhlciAiMzIiIG9yICI2NCIKKyMgKiBsaWJjOiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjIGxpYnJhcnkgdXNlZCBieSB0aGUgdGFyZ2V0CisjCisjIEl0IGlzIGFuIGVycm9yIGZvciB0aGUgdGFyZ2V0IG5vdCB0byBleGlzdC4KKyMgSWYgJ3doYXQnIGRvZXNuJ3QgZXhpc3QgdGhlbiBhbiBlbXB0eSB2YWx1ZSBpcyByZXR1cm5lZAorIworZGVmIHNpdGVpbmZvX2RhdGEoZCk6CisgICAgYXJjaGluZm8gPSB7CisgICAgICAgICJhbGxhcmNoIjogImVuZGlhbi1saXR0bGUgYml0LTMyIiwgIyBib2d1cywgYnV0IGJldHRlciB0aGFuIHNwZWNpYWwtY2FzaW5nIHRoZSBjaGVja3MgYmVsb3cgZm9yIGFsbGFyY2gKKyAgICAgICAgImFhcmNoNjQiOiAiZW5kaWFuLWxpdHRsZSBiaXQtNjQgYXJtLWNvbW1vbiBhcm0tNjQiLAorICAgICAgICAiYWFyY2g2NF9iZSI6ICJlbmRpYW4tYmlnIGJpdC02NCBhcm0tY29tbW9uIGFybS02NCIsCisgICAgICAgICJhcm0iOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgYXJtLWNvbW1vbiBhcm0tMzIiLAorICAgICAgICAiYXJtZWIiOiAiZW5kaWFuLWJpZyBiaXQtMzIgYXJtLWNvbW1vbiBhcm0tMzIiLAorICAgICAgICAiYXZyMzIiOiAiZW5kaWFuLWJpZyBiaXQtMzIgYXZyMzItY29tbW9uIiwKKyAgICAgICAgImJmaW4iOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgYmZpbi1jb21tb24iLAorICAgICAgICAiZXBpcGhhbnkiOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIiLAorICAgICAgICAiaTM4NiI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBpeDg2LWNvbW1vbiIsCisgICAgICAgICJpNDg2IjogImVuZGlhbi1saXR0bGUgYml0LTMyIGl4ODYtY29tbW9uIiwKKyAgICAgICAgImk1ODYiOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgaXg4Ni1jb21tb24iLAorICAgICAgICAiaTY4NiI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBpeDg2LWNvbW1vbiIsCisgICAgICAgICJpYTY0IjogImVuZGlhbi1saXR0bGUgYml0LTY0IiwKKyAgICAgICAgIm1pY3JvYmxhemUiOiAiZW5kaWFuLWJpZyBiaXQtMzIgbWljcm9ibGF6ZS1jb21tb24iLAorICAgICAgICAibWljcm9ibGF6ZWViIjogImVuZGlhbi1iaWcgYml0LTMyIG1pY3JvYmxhemUtY29tbW9uIiwKKyAgICAgICAgIm1pY3JvYmxhemVlbCI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBtaWNyb2JsYXplLWNvbW1vbiIsCisgICAgICAgICJtaXBzIjogImVuZGlhbi1iaWcgYml0LTMyIG1pcHMtY29tbW9uIiwKKyAgICAgICAgIm1pcHM2NCI6ICJlbmRpYW4tYmlnIGJpdC02NCBtaXBzLWNvbW1vbiIsCisgICAgICAgICJtaXBzNjRlbCI6ICJlbmRpYW4tbGl0dGxlIGJpdC02NCBtaXBzLWNvbW1vbiIsCisgICAgICAgICJtaXBzZWwiOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgbWlwcy1jb21tb24iLAorICAgICAgICAicG93ZXJwYyI6ICJlbmRpYW4tYmlnIGJpdC0zMiBwb3dlcnBjLWNvbW1vbiIsCisgICAgICAgICJuaW9zMiI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBuaW9zMi1jb21tb24iLAorICAgICAgICAicG93ZXJwYzY0IjogImVuZGlhbi1iaWcgYml0LTY0IHBvd2VycGMtY29tbW9uIiwKKyAgICAgICAgInBwYyI6ICJlbmRpYW4tYmlnIGJpdC0zMiBwb3dlcnBjLWNvbW1vbiIsCisgICAgICAgICJwcGM2NCI6ICJlbmRpYW4tYmlnIGJpdC02NCBwb3dlcnBjLWNvbW1vbiIsCisgICAgICAgICJzaDMiOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgc2gtY29tbW9uIiwKKyAgICAgICAgInNoNCI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBzaC1jb21tb24iLAorICAgICAgICAic3BhcmMiOiAiZW5kaWFuLWJpZyBiaXQtMzIiLAorICAgICAgICAidmlhYzMiOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgaXg4Ni1jb21tb24iLAorICAgICAgICAieDg2XzY0IjogImVuZGlhbi1saXR0bGUiLCAjIGJpdGluZm8gc3BlY2lmaWVkIGluIHRhcmdldGluZm8KKyAgICB9CisgICAgb3NpbmZvID0geworICAgICAgICAiZGFyd2luIjogImNvbW1vbi1kYXJ3aW4iLAorICAgICAgICAiZGFyd2luOSI6ICJjb21tb24tZGFyd2luIiwKKyAgICAgICAgImxpbnV4IjogImNvbW1vbi1saW51eCBjb21tb24tZ2xpYmMiLAorICAgICAgICAibGludXgtZ251IjogImNvbW1vbi1saW51eCBjb21tb24tZ2xpYmMiLAorICAgICAgICAibGludXgtZ251eDMyIjogImNvbW1vbi1saW51eCBjb21tb24tZ2xpYmMiLAorICAgICAgICAibGludXgtZ251bjMyIjogImNvbW1vbi1saW51eCBjb21tb24tZ2xpYmMiLAorICAgICAgICAibGludXgtZ251ZWFiaSI6ICJjb21tb24tbGludXggY29tbW9uLWdsaWJjIiwKKyAgICAgICAgImxpbnV4LWdudXNwZSI6ICJjb21tb24tbGludXggY29tbW9uLWdsaWJjIiwKKyAgICAgICAgImxpbnV4LXVjbGliYyI6ICJjb21tb24tbGludXggY29tbW9uLXVjbGliYyIsCisgICAgICAgICJsaW51eC11Y2xpYmNlYWJpIjogImNvbW1vbi1saW51eCBjb21tb24tdWNsaWJjIiwKKyAgICAgICAgImxpbnV4LXVjbGliY3NwZSI6ICJjb21tb24tbGludXggY29tbW9uLXVjbGliYyIsCisgICAgICAgICJsaW51eC1tdXNsIjogImNvbW1vbi1saW51eCBjb21tb24tbXVzbCIsCisgICAgICAgICJsaW51eC1tdXNsZWFiaSI6ICJjb21tb24tbGludXggY29tbW9uLW11c2wiLAorICAgICAgICAibGludXgtbXVzbHNwZSI6ICJjb21tb24tbGludXggY29tbW9uLW11c2wiLAorICAgICAgICAidWNsaW51eC11Y2xpYmMiOiAiY29tbW9uLXVjbGliYyIsCisgICAgICAgICJjeWd3aW4iOiAiY29tbW9uLWN5Z3dpbiIsCisgICAgICAgICJtaW5ndzMyIjogImNvbW1vbi1taW5ndyIsCisgICAgfQorICAgIHRhcmdldGluZm8gPSB7CisgICAgICAgICJhYXJjaDY0LWxpbnV4LWdudSI6ICJhYXJjaDY0LWxpbnV4IiwKKyAgICAgICAgImFhcmNoNjRfYmUtbGludXgtZ251IjogImFhcmNoNjRfYmUtbGludXgiLAorICAgICAgICAiYXJtLWxpbnV4LWdudWVhYmkiOiAiYXJtLWxpbnV4IiwKKyAgICAgICAgImFybS1saW51eC1tdXNsZWFiaSI6ICJhcm0tbGludXgiLAorICAgICAgICAiYXJtLWxpbnV4LXVjbGliY2VhYmkiOiAiYXJtLWxpbnV4LXVjbGliYyIsCisgICAgICAgICJhcm1lYi1saW51eC1nbnVlYWJpIjogImFybWViLWxpbnV4IiwKKyAgICAgICAgImFybWViLWxpbnV4LXVjbGliY2VhYmkiOiAiYXJtZWItbGludXgtdWNsaWJjIiwKKyAgICAgICAgImFybWViLWxpbnV4LW11c2xlYWJpIjogImFybWViLWxpbnV4IiwKKyAgICAgICAgIm1pcHMtbGludXgtbXVzbCI6ICJtaXBzLWxpbnV4IiwKKyAgICAgICAgIm1pcHNlbC1saW51eC1tdXNsIjogIm1pcHNlbC1saW51eCIsCisgICAgICAgICJtaXBzNjQtbGludXgtbXVzbCI6ICJtaXBzLWxpbnV4IiwKKyAgICAgICAgIm1pcHM2NGVsLWxpbnV4LW11c2wiOiAibWlwc2VsLWxpbnV4IiwKKyAgICAgICAgIm1pcHM2NC1saW51eC1nbnVuMzIiOiAibWlwcy1saW51eCBiaXQtMzIiLAorICAgICAgICAibWlwczY0ZWwtbGludXgtZ251bjMyIjogIm1pcHNlbC1saW51eCBiaXQtMzIiLAorICAgICAgICAicG93ZXJwYy1saW51eCI6ICJwb3dlcnBjMzItbGludXgiLAorICAgICAgICAicG93ZXJwYy1saW51eC1tdXNsIjogInBvd2VycGMtbGludXggcG93ZXJwYzMyLWxpbnV4IiwKKyAgICAgICAgInBvd2VycGMtbGludXgtdWNsaWJjIjogInBvd2VycGMtbGludXggcG93ZXJwYzMyLWxpbnV4IiwKKyAgICAgICAgInBvd2VycGMtbGludXgtZ251c3BlIjogInBvd2VycGMtbGludXggcG93ZXJwYzMyLWxpbnV4IiwKKyAgICAgICAgInBvd2VycGMtbGludXgtbXVzbHNwZSI6ICJwb3dlcnBjLWxpbnV4IHBvd2VycGMzMi1saW51eCIsCisgICAgICAgICJwb3dlcnBjLWxpbnV4LXVjbGliY3NwZSI6ICJwb3dlcnBjLWxpbnV4IHBvd2VycGMzMi1saW51eCBwb3dlcnBjLWxpbnV4LXVjbGliYyIsCisgICAgICAgICJwb3dlcnBjNjQtbGludXgtZ251c3BlIjogInBvd2VycGMtbGludXggcG93ZXJwYzY0LWxpbnV4IiwKKyAgICAgICAgInBvd2VycGM2NC1saW51eC1tdXNsc3BlIjogInBvd2VycGMtbGludXggcG93ZXJwYzY0LWxpbnV4IiwKKyAgICAgICAgInBvd2VycGM2NC1saW51eCI6ICJwb3dlcnBjLWxpbnV4IiwKKyAgICAgICAgIng4Nl82NC1jeWd3aW4iOiAiYml0LTY0IiwKKyAgICAgICAgIng4Nl82NC1kYXJ3aW4iOiAiYml0LTY0IiwKKyAgICAgICAgIng4Nl82NC1kYXJ3aW45IjogImJpdC02NCIsCisgICAgICAgICJ4ODZfNjQtbGludXgiOiAiYml0LTY0IiwKKyAgICAgICAgIng4Nl82NC1saW51eC1tdXNsIjogIng4Nl82NC1saW51eCBiaXQtNjQiLAorICAgICAgICAieDg2XzY0LWxpbnV4LXVjbGliYyI6ICJiaXQtNjQiLAorICAgICAgICAieDg2XzY0LWVsZiI6ICJiaXQtNjQiLAorICAgICAgICAieDg2XzY0LWxpbnV4LWdudSI6ICJiaXQtNjQgeDg2XzY0LWxpbnV4IiwKKyAgICAgICAgIng4Nl82NC1saW51eC1nbnV4MzIiOiAiYml0LTMyIGl4ODYtY29tbW9uIHgzMi1saW51eCIsCisgICAgICAgICJ4ODZfNjQtbWluZ3czMiI6ICJiaXQtNjQiLAorICAgIH0KKworICAgIGhvc3RhcmNoID0gZC5nZXRWYXIoIkhPU1RfQVJDSCIsIFRydWUpCisgICAgaG9zdG9zID0gZC5nZXRWYXIoIkhPU1RfT1MiLCBUcnVlKQorICAgIHRhcmdldCA9ICIlcy0lcyIgJSAoaG9zdGFyY2gsIGhvc3RvcykKKworICAgIHNpdGVkYXRhID0gW10KKyAgICBpZiBob3N0YXJjaCBpbiBhcmNoaW5mbzoKKyAgICAgICAgc2l0ZWRhdGEuZXh0ZW5kKGFyY2hpbmZvW2hvc3RhcmNoXS5zcGxpdCgpKQorICAgIGlmIGhvc3RvcyBpbiBvc2luZm86CisgICAgICAgIHNpdGVkYXRhLmV4dGVuZChvc2luZm9baG9zdG9zXS5zcGxpdCgpKQorICAgIGlmIHRhcmdldCBpbiB0YXJnZXRpbmZvOgorICAgICAgICBzaXRlZGF0YS5leHRlbmQodGFyZ2V0aW5mb1t0YXJnZXRdLnNwbGl0KCkpCisgICAgc2l0ZWRhdGEuYXBwZW5kKHRhcmdldCkKKyAgICBzaXRlZGF0YS5hcHBlbmQoImNvbW1vbiIpCisKKyAgICBiYi5kZWJ1ZygxLCAiU0lURSBmaWxlcyAlcyIgJSBzaXRlZGF0YSk7CisgICAgcmV0dXJuIHNpdGVkYXRhCisKK3B5dGhvbiAoKSB7CisgICAgc2l0ZWRhdGEgPSBzZXQoc2l0ZWluZm9fZGF0YShkKSkKKyAgICBpZiAiZW5kaWFuLWxpdHRsZSIgaW4gc2l0ZWRhdGE6CisgICAgICAgIGQuc2V0VmFyKCJTSVRFSU5GT19FTkRJQU5ORVNTIiwgImxlIikKKyAgICBlbGlmICJlbmRpYW4tYmlnIiBpbiBzaXRlZGF0YToKKyAgICAgICAgZC5zZXRWYXIoIlNJVEVJTkZPX0VORElBTk5FU1MiLCAiYmUiKQorICAgIGVsc2U6CisgICAgICAgIGJiLmVycm9yKCJVbmFibGUgdG8gZGV0ZXJtaW5lIGVuZGlhbm5lc3MgZm9yIGFyY2hpdGVjdHVyZSAnJXMnIiAlCisgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCJIT1NUX0FSQ0giLCBUcnVlKSkKKyAgICAgICAgYmIuZmF0YWwoIlBsZWFzZSBhZGQgeW91ciBhcmNoaXRlY3R1cmUgdG8gc2l0ZWluZm8uYmJjbGFzcyIpCisKKyAgICBpZiAiYml0LTMyIiBpbiBzaXRlZGF0YToKKyAgICAgICAgZC5zZXRWYXIoIlNJVEVJTkZPX0JJVFMiLCAiMzIiKQorICAgIGVsaWYgImJpdC02NCIgaW4gc2l0ZWRhdGE6CisgICAgICAgIGQuc2V0VmFyKCJTSVRFSU5GT19CSVRTIiwgIjY0IikKKyAgICBlbHNlOgorICAgICAgICBiYi5lcnJvcigiVW5hYmxlIHRvIGRldGVybWluZSBiaXQgc2l6ZSBmb3IgYXJjaGl0ZWN0dXJlICclcyciICUKKyAgICAgICAgICAgICAgICAgZC5nZXRWYXIoIkhPU1RfQVJDSCIsIFRydWUpKQorICAgICAgICBiYi5mYXRhbCgiUGxlYXNlIGFkZCB5b3VyIGFyY2hpdGVjdHVyZSB0byBzaXRlaW5mby5iYmNsYXNzIikKK30KKworZGVmIHNpdGVpbmZvX2dldF9maWxlcyhkLCBub19jYWNoZSA9IEZhbHNlKToKKyAgICBzaXRlZGF0YSA9IHNpdGVpbmZvX2RhdGEoZCkKKyAgICBzaXRlZmlsZXMgPSAiIgorICAgIGZvciBwYXRoIGluIGQuZ2V0VmFyKCJCQlBBVEgiLCBUcnVlKS5zcGxpdCgiOiIpOgorICAgICAgICBmb3IgZWxlbWVudCBpbiBzaXRlZGF0YToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHBhdGgsICJzaXRlIiwgZWxlbWVudCkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lKToKKyAgICAgICAgICAgICAgICBzaXRlZmlsZXMgKz0gZmlsZW5hbWUgKyAiICIKKworICAgIGlmIG5vX2NhY2hlOiByZXR1cm4gc2l0ZWZpbGVzCisKKyAgICAjIE5vdyBjaGVjayBmb3Igc2l0ZWNvbmZpZyBjYWNoZSBmaWxlcworICAgICMgVXNlIHRoZSBmaWxlcyBjb3BpZWQgdG8gdGhlIGFjbG9jYWwgY2FjaGUgZ2VuZXJhdGVkIGJ5IGF1dG90b29scy5iYmNsYXNzCisgICAgIyB0byBhdm9pZCByYWNlcworICAgIHBhdGhfc2l0ZWNvbmZpZyA9IGQuZ2V0VmFyKCdBQ0xPQ0FMRElSJywgVHJ1ZSkKKyAgICBpZiBwYXRoX3NpdGVjb25maWcgYW5kIG9zLnBhdGguaXNkaXIocGF0aF9zaXRlY29uZmlnKToKKyAgICAgICAgZm9yIGkgaW4gb3MubGlzdGRpcihwYXRoX3NpdGVjb25maWcpOgorICAgICAgICAgICAgaWYgbm90IGkuZW5kc3dpdGgoIl9jb25maWciKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ocGF0aF9zaXRlY29uZmlnLCBpKQorICAgICAgICAgICAgc2l0ZWZpbGVzICs9IGZpbGVuYW1lICsgIiAiCisKKyAgICByZXR1cm4gc2l0ZWZpbGVzCisKKyMKKyMgTWFrZSBzb21lIGluZm9ybWF0aW9uIGF2YWlsYWJsZSB2aWEgdmFyaWFibGVzCisjCitTSVRFQ09ORklHX1NZU1JPT1RDQUNIRSA9ICIke1NUQUdJTkdfREFUQURJUn0vJHtUQVJHRVRfU1lTfV9jb25maWdfc2l0ZS5kIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3BkeC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3BkeC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NGM1M2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zcGR4LmJiY2xhc3MKQEAgLTAsMCArMSwzNjUgQEAKKyMgVGhpcyBjbGFzcyBpbnRlZ3JhdGVzIHJlYWwtdGltZSBsaWNlbnNlIHNjYW5uaW5nLCBnZW5lcmF0aW9uIG9mIFNQRFggc3RhbmRhcmQKKyMgb3V0cHV0IGFuZCB2ZXJpZml5aW5nIGxpY2Vuc2UgaW5mbyBkdXJpbmcgdGhlIGJ1aWxkaW5nIHByb2Nlc3MuCisjIEl0IGlzIGEgY29tYmluYXRpb24gb2YgZWZmb3J0cyBmcm9tIHRoZSBPRS1Db3JlLCBTUERYIGFuZCBGb3Nzb2xvZ3kgcHJvamVjdHMuCisjCisjIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEZPU1NvbG9neToKKyMgICBodHRwOi8vd3d3LmZvc3NvbG9neS5vcmcKKyMKKyMgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gRk9TU29sb2d5U1BEWCBjb21tYW5kbGluZToKKyMgICBodHRwczovL2dpdGh1Yi5jb20vc3BkeC10b29scy9mb3Nzb2xvZ3ktc3BkeC93aWtpL0Zvc3NvbG9neS1TUERYLVdlYi1BUEkKKyMKKyMgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gU1BEWDoKKyMgICBodHRwOi8vd3d3LnNwZHgub3JnCisjCisKKyMgU1BEWCBmaWxlIHdpbGwgYmUgb3V0cHV0IHRvIHRoZSBwYXRoIHdoaWNoIGlzIGRlZmluZWQgYXNbU1BEWF9NQU5JRkVTVF9ESVJdIAorIyBpbiAuL21ldGEvY29uZi9saWNlbnNlcy5jb25mLgorCitTUERYU1NUQVRFRElSID0gIiR7V09SS0RJUn0vc3BkeF9zc3RhdGVfZGlyIgorCisjIElmICR7U30gaXNuJ3QgYWN0dWFsbHkgdGhlIHRvcC1sZXZlbCBzb3VyY2UgZGlyZWN0b3J5LCBzZXQgU1BEWF9TIHRvIHBvaW50IGF0CisjIHRoZSByZWFsIHRvcC1sZXZlbCBkaXJlY3RvcnkuCitTUERYX1MgPz0gIiR7U30iCisKK3B5dGhvbiBkb19zcGR4ICgpIHsKKyAgICBpbXBvcnQgb3MsIHN5cworICAgIGltcG9ydCBqc29uLCBzaHV0aWwKKworICAgIGluZm8gPSB7fSAKKyAgICBpbmZvWyd3b3JrZGlyJ10gPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgaW5mb1snc291cmNlZGlyJ10gPSBkLmdldFZhcignU1BEWF9TJywgVHJ1ZSkKKyAgICBpbmZvWydwbiddID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBpbmZvWydwdiddID0gZC5nZXRWYXIoJ1BWJywgVHJ1ZSkKKyAgICBpbmZvWydzcGR4X3ZlcnNpb24nXSA9IGQuZ2V0VmFyKCdTUERYX1ZFUlNJT04nLCBUcnVlKQorICAgIGluZm9bJ2RhdGFfbGljZW5zZSddID0gZC5nZXRWYXIoJ0RBVEFfTElDRU5TRScsIFRydWUpCisKKyAgICBzc3RhdGVkaXIgPSBkLmdldFZhcignU1BEWFNTVEFURURJUicsIFRydWUpCisgICAgc3N0YXRlZmlsZSA9IG9zLnBhdGguam9pbihzc3RhdGVkaXIsIGluZm9bJ3BuJ10gKyBpbmZvWydwdiddICsgIi5zcGR4IikKKworICAgIG1hbmlmZXN0X2RpciA9IGQuZ2V0VmFyKCdTUERYX01BTklGRVNUX0RJUicsIFRydWUpCisgICAgaW5mb1snb3V0ZmlsZSddID0gb3MucGF0aC5qb2luKG1hbmlmZXN0X2RpciwgaW5mb1sncG4nXSArICIuc3BkeCIgKQorCisgICAgaW5mb1snc3BkeF90ZW1wX2RpciddID0gZC5nZXRWYXIoJ1NQRFhfVEVNUF9ESVInLCBUcnVlKQorICAgIGluZm9bJ3Rhcl9maWxlJ10gPSBvcy5wYXRoLmpvaW4oaW5mb1snd29ya2RpciddLCBpbmZvWydwbiddICsgIi50YXIuZ3oiICkKKworICAgICMgTWFrZSBzdXJlIGltcG9ydGFudCBkaXJzIGV4aXN0CisgICAgdHJ5OgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIobWFuaWZlc3RfZGlyKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc3N0YXRlZGlyKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoaW5mb1snc3BkeF90ZW1wX2RpciddKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGJiLmVycm9yKCJTUERYOiBDb3VsZCBub3Qgc2V0IHVwIHJlcXVpcmVkIGRpcmVjdG9yaWVzOiAiICsgc3RyKGUpKQorICAgICAgICByZXR1cm4KKworICAgICMjIGdldCBldmVyeXRoaW5nIGZyb20gY2FjaGUuICB1c2UgaXQgdG8gZGVjaWRlIGlmIAorICAgICMjIHNvbWV0aGluZyBuZWVkcyB0byBiZSByZXJ1biAKKyAgICBjdXJfdmVyX2NvZGUgPSBnZXRfdmVyX2NvZGUoaW5mb1snc291cmNlZGlyJ10pCisgICAgY2FjaGVfY3VyID0gRmFsc2UKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhzc3RhdGVmaWxlKToKKyAgICAgICAgIyMgY2FjaGUgZm9yIHRoaXMgcGFja2FnZSBleGlzdHMuIHJlYWQgaXQgaW4KKyAgICAgICAgY2FjaGVkX3NwZHggPSBnZXRfY2FjaGVkX3NwZHgoc3N0YXRlZmlsZSkKKworICAgICAgICBpZiBjYWNoZWRfc3BkeFsnUGFja2FnZVZlcmlmaWNhdGlvbkNvZGUnXSA9PSBjdXJfdmVyX2NvZGU6CisgICAgICAgICAgICBiYi53YXJuKCJTUERYOiBWZXJpZmljYXRpb24gY29kZSBmb3IgIiArIGluZm9bJ3BuJ10KKyAgICAgICAgICAgICAgICAgICsgImlzIHNhbWUgYXMgY2FjaGUncy4gZG8gbm90aGluZyIpCisgICAgICAgICAgICBjYWNoZV9jdXIgPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2NhbF9maWxlX2luZm8gPSBzZXR1cF9mb3NzX3NjYW4oaW5mbywgVHJ1ZSwgY2FjaGVkX3NwZHhbJ0ZpbGVzJ10pCisgICAgZWxzZToKKyAgICAgICAgbG9jYWxfZmlsZV9pbmZvID0gc2V0dXBfZm9zc19zY2FuKGluZm8sIEZhbHNlLCBOb25lKQorCisgICAgaWYgY2FjaGVfY3VyOgorICAgICAgICBzcGR4X2ZpbGVfaW5mbyA9IGNhY2hlZF9zcGR4WydGaWxlcyddCisgICAgICAgIGZvc3NfcGFja2FnZV9pbmZvID0gY2FjaGVkX3NwZHhbJ1BhY2thZ2UnXQorICAgICAgICBmb3NzX2xpY2Vuc2VfaW5mbyA9IGNhY2hlZF9zcGR4WydMaWNlbnNlcyddCisgICAgZWxzZToKKyAgICAgICAgIyMgc2V0dXAgZm9zc29sb2d5IGNvbW1hbmQKKyAgICAgICAgZm9zc19zZXJ2ZXIgPSBkLmdldFZhcignRk9TU19TRVJWRVInLCBUcnVlKQorICAgICAgICBmb3NzX2ZsYWdzID0gZC5nZXRWYXIoJ0ZPU1NfV0dFVF9GTEFHUycsIFRydWUpCisgICAgICAgIGZvc3NfZnVsbF9zcGR4ID0gZC5nZXRWYXIoJ0ZPU1NfRlVMTF9TUERYJywgVHJ1ZSkgPT0gInRydWUiIG9yIEZhbHNlCisgICAgICAgIGZvc3NfY29tbWFuZCA9ICJ3Z2V0ICVzIC0tcG9zdC1maWxlPSVzICVzIlwKKyAgICAgICAgICAgICUgKGZvc3NfZmxhZ3MsIGluZm9bJ3Rhcl9maWxlJ10sIGZvc3Nfc2VydmVyKQorICAgICAgICAKKyAgICAgICAgZm9zc19yZXN1bHQgPSBydW5fZm9zc29sb2d5KGZvc3NfY29tbWFuZCwgZm9zc19mdWxsX3NwZHgpCisgICAgICAgIGlmIGZvc3NfcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgKGZvc3NfcGFja2FnZV9pbmZvLCBmb3NzX2ZpbGVfaW5mbywgZm9zc19saWNlbnNlX2luZm8pID0gZm9zc19yZXN1bHQKKyAgICAgICAgICAgIHNwZHhfZmlsZV9pbmZvID0gY3JlYXRlX3NwZHhfZG9jKGxvY2FsX2ZpbGVfaW5mbywgZm9zc19maWxlX2luZm8pCisgICAgICAgICAgICAjIyB3cml0ZSB0byBjYWNoZQorICAgICAgICAgICAgd3JpdGVfY2FjaGVkX3NwZHgoc3N0YXRlZmlsZSwgY3VyX3Zlcl9jb2RlLCBmb3NzX3BhY2thZ2VfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZHhfZmlsZV9pbmZvLCBmb3NzX2xpY2Vuc2VfaW5mbykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiLmVycm9yKCJTUERYOiBDb3VsZCBub3QgY29tbXVuaWNhdGUgd2l0aCBGT1NTb2xvZ3kgc2VydmVyLiBDb21tYW5kIHdhczogIiArIGZvc3NfY29tbWFuZCkKKyAgICAgICAgICAgIHJldHVybgorICAgIAorICAgICMjIEdldCBkb2N1bWVudCBhbmQgcGFja2FnZSBsZXZlbCBpbmZvcm1hdGlvbgorICAgIHNwZHhfaGVhZGVyX2luZm8gPSBnZXRfaGVhZGVyX2luZm8oaW5mbywgY3VyX3Zlcl9jb2RlLCBmb3NzX3BhY2thZ2VfaW5mbykKKyAgICAKKyAgICAjIyBDUkVBVEUgTUFOSUZFU1QKKyAgICBjcmVhdGVfbWFuaWZlc3QoaW5mbywgc3BkeF9oZWFkZXJfaW5mbywgc3BkeF9maWxlX2luZm8sIGZvc3NfbGljZW5zZV9pbmZvKQorCisgICAgIyMgY2xlYW4gdXAgdGhlIHRlbXAgc3R1ZmYKKyAgICBzaHV0aWwucm10cmVlKGluZm9bJ3NwZHhfdGVtcF9kaXInXSwgaWdub3JlX2Vycm9ycz1UcnVlKQorICAgIGlmIG9zLnBhdGguZXhpc3RzKGluZm9bJ3Rhcl9maWxlJ10pOgorICAgICAgICByZW1vdmVfZmlsZShpbmZvWyd0YXJfZmlsZSddKQorfQorYWRkdGFzayBzcGR4IGFmdGVyIGRvX3BhdGNoIGJlZm9yZSBkb19jb25maWd1cmUKKworZGVmIGNyZWF0ZV9tYW5pZmVzdChpbmZvLCBoZWFkZXIsIGZpbGVzLCBsaWNlbnNlcyk6CisgICAgaW1wb3J0IGNvZGVjcworICAgIHdpdGggY29kZWNzLm9wZW4oaW5mb1snb3V0ZmlsZSddLCBtb2RlPSd3JywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgZjoKKyAgICAgICAgIyBXcml0ZSBoZWFkZXIKKyAgICAgICAgZi53cml0ZShoZWFkZXIgKyAnXG4nKQorCisgICAgICAgICMgV3JpdGUgZmlsZSBkYXRhCisgICAgICAgIGZvciBjaGtzdW0sIGJsb2NrIGluIGZpbGVzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZi53cml0ZSgiRmlsZU5hbWU6ICIgKyBibG9ja1snRmlsZU5hbWUnXSArICdcbicpCisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBibG9jay5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBub3Qga2V5ID09ICdGaWxlTmFtZSc6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoa2V5ICsgIjogIiArIHZhbHVlICsgJ1xuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ1xuJykKKworICAgICAgICAjIFdyaXRlIGxpY2Vuc2UgZGF0YQorICAgICAgICBmb3IgaWQsIGJsb2NrIGluIGxpY2Vuc2VzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZi53cml0ZSgiTGljZW5zZUlEOiAiICsgaWQgKyAnXG4nKQorICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gYmxvY2suaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgZi53cml0ZShrZXkgKyAiOiAiICsgdmFsdWUgKyAnXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnXG4nKQorCitkZWYgZ2V0X2NhY2hlZF9zcGR4KHNzdGF0ZWZpbGUpOgorICAgIGltcG9ydCBqc29uCisgICAgaW1wb3J0IGNvZGVjcworICAgIGNhY2hlZF9zcGR4X2luZm8gPSB7fQorICAgIHdpdGggY29kZWNzLm9wZW4oc3N0YXRlZmlsZSwgbW9kZT0ncicsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNhY2hlZF9zcGR4X2luZm8gPSBqc29uLmxvYWQoZikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGNhY2hlZF9zcGR4X2luZm8gPSBOb25lCisgICAgcmV0dXJuIGNhY2hlZF9zcGR4X2luZm8KKworZGVmIHdyaXRlX2NhY2hlZF9zcGR4KHNzdGF0ZWZpbGUsIHZlcl9jb2RlLCBwYWNrYWdlX2luZm8sIGZpbGVzLCBsaWNlbnNlX2luZm8pOgorICAgIGltcG9ydCBqc29uCisgICAgaW1wb3J0IGNvZGVjcworICAgIHNwZHhfZG9jID0ge30KKyAgICBzcGR4X2RvY1snUGFja2FnZVZlcmlmaWNhdGlvbkNvZGUnXSA9IHZlcl9jb2RlCisgICAgc3BkeF9kb2NbJ0ZpbGVzJ10gPSB7fQorICAgIHNwZHhfZG9jWydGaWxlcyddID0gZmlsZXMKKyAgICBzcGR4X2RvY1snUGFja2FnZSddID0ge30KKyAgICBzcGR4X2RvY1snUGFja2FnZSddID0gcGFja2FnZV9pbmZvCisgICAgc3BkeF9kb2NbJ0xpY2Vuc2VzJ10gPSB7fQorICAgIHNwZHhfZG9jWydMaWNlbnNlcyddID0gbGljZW5zZV9pbmZvCisgICAgd2l0aCBjb2RlY3Mub3Blbihzc3RhdGVmaWxlLCBtb2RlPSd3JywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgZjoKKyAgICAgICAgZi53cml0ZShqc29uLmR1bXBzKHNwZHhfZG9jKSkKKworZGVmIHNldHVwX2Zvc3Nfc2NhbihpbmZvLCBjYWNoZSwgY2FjaGVkX2ZpbGVzKToKKyAgICBpbXBvcnQgZXJybm8sIHNodXRpbAorICAgIGltcG9ydCB0YXJmaWxlCisgICAgZmlsZV9pbmZvID0ge30KKyAgICBjYWNoZV9kaWN0ID0ge30KKworICAgIGZvciBmX2RpciwgZiBpbiBsaXN0X2ZpbGVzKGluZm9bJ3NvdXJjZWRpciddKToKKyAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKGZfZGlyLCBmKQorICAgICAgICBhYnNfcGF0aCA9IG9zLnBhdGguam9pbihpbmZvWydzb3VyY2VkaXInXSwgZnVsbF9wYXRoKQorICAgICAgICBkZXN0X2RpciA9IG9zLnBhdGguam9pbihpbmZvWydzcGR4X3RlbXBfZGlyJ10sIGZfZGlyKQorICAgICAgICBkZXN0X3BhdGggPSBvcy5wYXRoLmpvaW4oaW5mb1snc3BkeF90ZW1wX2RpciddLCBmdWxsX3BhdGgpCisKKyAgICAgICAgY2hlY2tzdW0gPSBoYXNoX2ZpbGUoYWJzX3BhdGgpCisgICAgICAgIGlmIG5vdCBjaGVja3N1bSBpcyBOb25lOgorICAgICAgICAgICAgZmlsZV9pbmZvW2NoZWNrc3VtXSA9IHt9CisgICAgICAgICAgICAjIyByZXRhaW4gY2FjaGUgaW5mb3JtYXRpb24gaWYgaXQgZXhpc3RzCisgICAgICAgICAgICBpZiBjYWNoZSBhbmQgY2hlY2tzdW0gaW4gY2FjaGVkX2ZpbGVzOgorICAgICAgICAgICAgICAgIGZpbGVfaW5mb1tjaGVja3N1bV0gPSBjYWNoZWRfZmlsZXNbY2hlY2tzdW1dCisgICAgICAgICAgICAjIyBoYXZlIHRoZSBmaWxlIGluY2x1ZGVkIGluIHdoYXQncyBzZW50IHRvIHRoZSBGT1NTb2xvZ3kgc2VydmVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZpbGVfaW5mb1tjaGVja3N1bV1bJ0ZpbGVOYW1lJ10gPSBmdWxsX3BhdGgKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihkZXN0X2RpcikKKyAgICAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKGFic19wYXRoLCBkZXN0X3BhdGgpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgYmIud2FybigiU1BEWDogbWtkaXJoaWVyIGZhaWxlZDogIiArIHN0cihlKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgc2h1dGlsLkVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlNQRFg6IGNvcHlmaWxlIGZhaWxlZDogIiArIHN0cihlKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJTUERYOiBjb3B5ZmlsZSBmYWlsZWQ6ICIgKyBzdHIoZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYi53YXJuKCJTUERYOiBDb3VsZCBub3QgZ2V0IGNoZWNrc3VtIGZvciBmaWxlOiAiICsgZikKKyAgICAKKyAgICB3aXRoIHRhcmZpbGUub3BlbihpbmZvWyd0YXJfZmlsZSddLCAidzpneiIpIGFzIHRhcjoKKyAgICAgICAgdGFyLmFkZChpbmZvWydzcGR4X3RlbXBfZGlyJ10sIGFyY25hbWU9b3MucGF0aC5iYXNlbmFtZShpbmZvWydzcGR4X3RlbXBfZGlyJ10pKQorICAgIAorICAgIHJldHVybiBmaWxlX2luZm8KKworZGVmIHJlbW92ZV9maWxlKGZpbGVfbmFtZSk6CisgICAgdHJ5OgorICAgICAgICBvcy5yZW1vdmUoZmlsZV9uYW1lKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIHBhc3MKKworZGVmIGxpc3RfZmlsZXMoZGlyKToKKyAgICBmb3Igcm9vdCwgc3ViRm9sZGVycywgZmlsZXMgaW4gb3Mud2FsayhkaXIpOgorICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgIHJlbF9yb290ID0gb3MucGF0aC5yZWxwYXRoKHJvb3QsIGRpcikKKyAgICAgICAgICAgIHlpZWxkIHJlbF9yb290LCBmCisgICAgcmV0dXJuCisKK2RlZiBoYXNoX2ZpbGUoZmlsZV9uYW1lKToKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihmaWxlX25hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBkYXRhX3N0cmluZyA9IGYucmVhZCgpCisgICAgICAgICAgICBzaGExID0gaGFzaF9zdHJpbmcoZGF0YV9zdHJpbmcpCisgICAgICAgICAgICByZXR1cm4gc2hhMQorICAgIGV4Y2VwdDoKKyAgICAgICAgcmV0dXJuIE5vbmUKKworZGVmIGhhc2hfc3RyaW5nKGRhdGEpOgorICAgIGltcG9ydCBoYXNobGliCisgICAgc2hhMSA9IGhhc2hsaWIuc2hhMSgpCisgICAgc2hhMS51cGRhdGUoZGF0YSkKKyAgICByZXR1cm4gc2hhMS5oZXhkaWdlc3QoKQorCitkZWYgcnVuX2Zvc3NvbG9neShmb3NzX2NvbW1hbmQsIGZ1bGxfc3BkeCk6CisgICAgaW1wb3J0IHN0cmluZywgcmUKKyAgICBpbXBvcnQgc3VicHJvY2VzcworICAgIAorICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGZvc3NfY29tbWFuZC5zcGxpdCgpLAorICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgIGZvc3Nfb3V0cHV0LCBmb3NzX2Vycm9yID0gcC5jb21tdW5pY2F0ZSgpCisgICAgaWYgcC5yZXR1cm5jb2RlICE9IDA6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBmb3NzX291dHB1dCA9IHVuaWNvZGUoZm9zc19vdXRwdXQsICJ1dGYtOCIpCisgICAgZm9zc19vdXRwdXQgPSBzdHJpbmcucmVwbGFjZShmb3NzX291dHB1dCwgJ1xyJywgJycpCisKKyAgICAjIFBhY2thZ2UgaW5mbworICAgIHBhY2thZ2VfaW5mbyA9IHt9CisgICAgaWYgZnVsbF9zcGR4OgorICAgICAgICAjIEFsbCBtYW5kYXRvcnksIG9ubHkgb25lIG9jY3VyYW5jZQorICAgICAgICBwYWNrYWdlX2luZm9bJ1BhY2thZ2VDb3B5cmlnaHRUZXh0J10gPSByZS5maW5kYWxsKCdQYWNrYWdlQ29weXJpZ2h0VGV4dDogKC4qPzwvdGV4dD4pJywgZm9zc19vdXRwdXQsIHJlLlMpWzBdCisgICAgICAgIHBhY2thZ2VfaW5mb1snUGFja2FnZUxpY2Vuc2VEZWNsYXJlZCddID0gcmUuZmluZGFsbCgnUGFja2FnZUxpY2Vuc2VEZWNsYXJlZDogKC4qKScsIGZvc3Nfb3V0cHV0KVswXQorICAgICAgICBwYWNrYWdlX2luZm9bJ1BhY2thZ2VMaWNlbnNlQ29uY2x1ZGVkJ10gPSByZS5maW5kYWxsKCdQYWNrYWdlTGljZW5zZUNvbmNsdWRlZDogKC4qKScsIGZvc3Nfb3V0cHV0KVswXQorICAgICAgICAjIFRoZXNlIG1heSBiZSBtb3JlIHRoYW4gb25lCisgICAgICAgIHBhY2thZ2VfaW5mb1snUGFja2FnZUxpY2Vuc2VJbmZvRnJvbUZpbGVzJ10gPSByZS5maW5kYWxsKCdQYWNrYWdlTGljZW5zZUluZm9Gcm9tRmlsZXM6ICguKiknLCBmb3NzX291dHB1dCkKKyAgICBlbHNlOgorICAgICAgICBERUZBVUxUID0gIk5PQVNTRVJUSU9OIgorICAgICAgICBwYWNrYWdlX2luZm9bJ1BhY2thZ2VDb3B5cmlnaHRUZXh0J10gPSAiPHRleHQ+IiArIERFRkFVTFQgKyAiPC90ZXh0PiIKKyAgICAgICAgcGFja2FnZV9pbmZvWydQYWNrYWdlTGljZW5zZURlY2xhcmVkJ10gPSBERUZBVUxUCisgICAgICAgIHBhY2thZ2VfaW5mb1snUGFja2FnZUxpY2Vuc2VDb25jbHVkZWQnXSA9IERFRkFVTFQKKyAgICAgICAgcGFja2FnZV9pbmZvWydQYWNrYWdlTGljZW5zZUluZm9Gcm9tRmlsZXMnXSA9IFtdCisKKyAgICAjIEZpbGUgaW5mbworICAgIGZpbGVfaW5mbyA9IHt9CisgICAgcmVjb3JkcyA9IFtdCisgICAgIyBGaWxlTmFtZSBpcyBhbHNvIGluIFBhY2thZ2VGaWxlTmFtZSwgc28gd2UgbWF0Y2ggb24gRmlsZVR5cGUgYXMgd2VsbC4KKyAgICByZWNvcmRzID0gcmUuZmluZGFsbCgnRmlsZU5hbWU6Lio/RmlsZVR5cGU6Lio/PC90ZXh0PicsIGZvc3Nfb3V0cHV0LCByZS5TKQorICAgIGZvciByZWMgaW4gcmVjb3JkczoKKyAgICAgICAgY2hrc3VtID0gcmUuZmluZGFsbCgnRmlsZUNoZWNrc3VtOiBTSEExOiAoLiopXG4nLCByZWMpWzBdCisgICAgICAgIGZpbGVfaW5mb1tjaGtzdW1dID0ge30KKyAgICAgICAgZmlsZV9pbmZvW2Noa3N1bV1bJ0ZpbGVDb3B5cmlnaHRUZXh0J10gPSByZS5maW5kYWxsKCdGaWxlQ29weXJpZ2h0VGV4dDogJworICAgICAgICAgICAgKyAnKC4qPzwvdGV4dD4pJywgcmVjLCByZS5TIClbMF0KKyAgICAgICAgZmllbGRzID0gWydGaWxlTmFtZScsICdGaWxlVHlwZScsICdMaWNlbnNlQ29uY2x1ZGVkJywgJ0xpY2Vuc2VJbmZvSW5GaWxlJ10KKyAgICAgICAgZm9yIGZpZWxkIGluIGZpZWxkczoKKyAgICAgICAgICAgIGZpbGVfaW5mb1tjaGtzdW1dW2ZpZWxkXSA9IHJlLmZpbmRhbGwoZmllbGQgKyAnOiAoLiopJywgcmVjKVswXQorCisgICAgIyBMaWNlbnNlcworICAgIGxpY2Vuc2VfaW5mbyA9IHt9CisgICAgbGljZW5zZXMgPSBbXQorICAgIGxpY2Vuc2VzID0gcmUuZmluZGFsbCgnTGljZW5zZUlEOi4qP0xpY2Vuc2VOYW1lOi4qP1xuJywgZm9zc19vdXRwdXQsIHJlLlMpCisgICAgZm9yIGxpYyBpbiBsaWNlbnNlczoKKyAgICAgICAgbGljZW5zZV9pZCA9IHJlLmZpbmRhbGwoJ0xpY2Vuc2VJRDogKC4qKVxuJywgbGljKVswXQorICAgICAgICBsaWNlbnNlX2luZm9bbGljZW5zZV9pZF0gPSB7fQorICAgICAgICBsaWNlbnNlX2luZm9bbGljZW5zZV9pZF1bJ0V4dHJhY3RlZFRleHQnXSA9IHJlLmZpbmRhbGwoJ0V4dHJhY3RlZFRleHQ6ICguKj88L3RleHQ+KScsIGxpYywgcmUuUylbMF0KKyAgICAgICAgbGljZW5zZV9pbmZvW2xpY2Vuc2VfaWRdWydMaWNlbnNlTmFtZSddID0gcmUuZmluZGFsbCgnTGljZW5zZU5hbWU6ICguKiknLCBsaWMpWzBdCisKKyAgICByZXR1cm4gKHBhY2thZ2VfaW5mbywgZmlsZV9pbmZvLCBsaWNlbnNlX2luZm8pCisKK2RlZiBjcmVhdGVfc3BkeF9kb2MoZmlsZV9pbmZvLCBzY2FubmVkX2ZpbGVzKToKKyAgICBpbXBvcnQganNvbgorICAgICMjIHB1c2ggZm9zcyBjaGFuZ2VzIGJhY2sgaW50byBjYWNoZQorICAgIGZvciBjaGtzdW0sIGxpY19pbmZvIGluIHNjYW5uZWRfZmlsZXMuaXRlcml0ZW1zKCk6CisgICAgICAgIGlmIGNoa3N1bSBpbiBmaWxlX2luZm86CisgICAgICAgICAgICBmaWxlX2luZm9bY2hrc3VtXVsnRmlsZVR5cGUnXSA9IGxpY19pbmZvWydGaWxlVHlwZSddCisgICAgICAgICAgICBmaWxlX2luZm9bY2hrc3VtXVsnRmlsZUNoZWNrc3VtOiBTSEExJ10gPSBjaGtzdW0KKyAgICAgICAgICAgIGZpbGVfaW5mb1tjaGtzdW1dWydMaWNlbnNlSW5mb0luRmlsZSddID0gbGljX2luZm9bJ0xpY2Vuc2VJbmZvSW5GaWxlJ10KKyAgICAgICAgICAgIGZpbGVfaW5mb1tjaGtzdW1dWydMaWNlbnNlQ29uY2x1ZGVkJ10gPSBsaWNfaW5mb1snTGljZW5zZUNvbmNsdWRlZCddCisgICAgICAgICAgICBmaWxlX2luZm9bY2hrc3VtXVsnRmlsZUNvcHlyaWdodFRleHQnXSA9IGxpY19pbmZvWydGaWxlQ29weXJpZ2h0VGV4dCddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYi53YXJuKCJTUERYOiAiICsgbGljX2luZm9bJ0ZpbGVOYW1lJ10gKyAiIDogIiArIGNoa3N1bQorICAgICAgICAgICAgICAgICsgIiA6IGlzIG5vdCBpbiB0aGUgbG9jYWwgZmlsZSBpbmZvOiAiCisgICAgICAgICAgICAgICAgKyBqc29uLmR1bXBzKGxpY19pbmZvLCBpbmRlbnQ9MSkpCisgICAgcmV0dXJuIGZpbGVfaW5mbworCitkZWYgZ2V0X3Zlcl9jb2RlKGRpcm5hbWUpOgorICAgIGNoa3N1bXMgPSBbXQorICAgIGZvciBmX2RpciwgZiBpbiBsaXN0X2ZpbGVzKGRpcm5hbWUpOgorICAgICAgICBoYXNoID0gaGFzaF9maWxlKG9zLnBhdGguam9pbihkaXJuYW1lLCBmX2RpciwgZikpCisgICAgICAgIGlmIG5vdCBoYXNoIGlzIE5vbmU6CisgICAgICAgICAgICBjaGtzdW1zLmFwcGVuZChoYXNoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIud2FybigiU1BEWDogQ291bGQgbm90IGhhc2ggZmlsZTogIiArIHBhdGgpCisgICAgdmVyX2NvZGVfc3RyaW5nID0gJycuam9pbihjaGtzdW1zKS5sb3dlcigpCisgICAgdmVyX2NvZGUgPSBoYXNoX3N0cmluZyh2ZXJfY29kZV9zdHJpbmcpCisgICAgcmV0dXJuIHZlcl9jb2RlCisKK2RlZiBnZXRfaGVhZGVyX2luZm8oaW5mbywgc3BkeF92ZXJpZmljYXRpb25fY29kZSwgcGFja2FnZV9pbmZvKToKKyAgICAiIiIKKyAgICAgICAgUHV0IHRvZ2V0aGVyIHRoZSBoZWFkZXIgU1BEWCBpbmZvcm1hdGlvbi4KKyAgICAgICAgRXZlbnR1YWxseSB0aGlzIG5lZWRzIHRvIGJlY29tZSBhIGxvdCBsZXNzCisgICAgICAgIG9mIGEgaGFyZGNvZGVkIHRoaW5nLgorICAgICIiIgorICAgIGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCisgICAgaW1wb3J0IG9zCisgICAgaGVhZCA9IFtdCisgICAgREVGQVVMVCA9ICJOT0FTU0VSVElPTiIKKworICAgIHBhY2thZ2VfY2hlY2tzdW0gPSBoYXNoX2ZpbGUoaW5mb1sndGFyX2ZpbGUnXSkKKyAgICBpZiBwYWNrYWdlX2NoZWNrc3VtIGlzIE5vbmU6CisgICAgICAgIHBhY2thZ2VfY2hlY2tzdW0gPSBERUZBVUxUCisKKyAgICAjIyBkb2N1bWVudCBsZXZlbCBpbmZvcm1hdGlvbgorICAgIGhlYWQuYXBwZW5kKCIjIyBTUERYIERvY3VtZW50IEluZm9ybWF0aW9uIikKKyAgICBoZWFkLmFwcGVuZCgiU1BEWFZlcnNpb246ICIgKyBpbmZvWydzcGR4X3ZlcnNpb24nXSkKKyAgICBoZWFkLmFwcGVuZCgiRGF0YUxpY2Vuc2U6ICIgKyBpbmZvWydkYXRhX2xpY2Vuc2UnXSkKKyAgICBoZWFkLmFwcGVuZCgiRG9jdW1lbnRDb21tZW50OiA8dGV4dD5TUERYIGZvciAiCisgICAgICAgICsgaW5mb1sncG4nXSArICIgdmVyc2lvbiAiICsgaW5mb1sncHYnXSArICI8L3RleHQ+IikKKyAgICBoZWFkLmFwcGVuZCgiIikKKworICAgICMjIENyZWF0b3IgaW5mb3JtYXRpb24KKyAgICAjIyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBnaXZlIHRpbWUgaW4gVVRDLgorICAgIG5vdyA9IGRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolU1onKQorICAgIGhlYWQuYXBwZW5kKCIjIyBDcmVhdGlvbiBJbmZvcm1hdGlvbiIpCisgICAgIyMgVG9vbHMgYXJlIHN1cHBvc2VkIHRvIGhhdmUgYSB2ZXJzaW9uLCBidXQgRk9TU29sb2d5K1NQRFggcHJvdmlkZXMgbm9uZS4KKyAgICBoZWFkLmFwcGVuZCgiQ3JlYXRvcjogVG9vbDogRk9TU29sb2d5K1NQRFgiKQorICAgIGhlYWQuYXBwZW5kKCJDcmVhdGVkOiAiICsgbm93KQorICAgIGhlYWQuYXBwZW5kKCJDcmVhdG9yQ29tbWVudDogPHRleHQ+VU5PPC90ZXh0PiIpCisgICAgaGVhZC5hcHBlbmQoIiIpCisKKyAgICAjIyBwYWNrYWdlIGxldmVsIGluZm9ybWF0aW9uCisgICAgaGVhZC5hcHBlbmQoIiMjIFBhY2thZ2UgSW5mb3JtYXRpb24iKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlTmFtZTogIiArIGluZm9bJ3BuJ10pCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VWZXJzaW9uOiAiICsgaW5mb1sncHYnXSkKKyAgICBoZWFkLmFwcGVuZCgiUGFja2FnZUZpbGVOYW1lOiAiICsgb3MucGF0aC5iYXNlbmFtZShpbmZvWyd0YXJfZmlsZSddKSkKKyAgICBoZWFkLmFwcGVuZCgiUGFja2FnZVN1cHBsaWVyOiBQZXJzb246IiArIERFRkFVTFQpCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VEb3dubG9hZExvY2F0aW9uOiAiICsgREVGQVVMVCkKKyAgICBoZWFkLmFwcGVuZCgiUGFja2FnZVN1bW1hcnk6IDx0ZXh0PjwvdGV4dD4iKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlT3JpZ2luYXRvcjogUGVyc29uOiIgKyBERUZBVUxUKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlQ2hlY2tzdW06IFNIQTE6ICIgKyBwYWNrYWdlX2NoZWNrc3VtKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlVmVyaWZpY2F0aW9uQ29kZTogIiArIHNwZHhfdmVyaWZpY2F0aW9uX2NvZGUpCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VEZXNjcmlwdGlvbjogPHRleHQ+IiArIGluZm9bJ3BuJ10KKyAgICAgICAgKyAiIHZlcnNpb24gIiArIGluZm9bJ3B2J10gKyAiPC90ZXh0PiIpCisgICAgaGVhZC5hcHBlbmQoIiIpCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VDb3B5cmlnaHRUZXh0OiAiCisgICAgICAgICsgcGFja2FnZV9pbmZvWydQYWNrYWdlQ29weXJpZ2h0VGV4dCddKQorICAgIGhlYWQuYXBwZW5kKCIiKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlTGljZW5zZURlY2xhcmVkOiAiCisgICAgICAgICsgcGFja2FnZV9pbmZvWydQYWNrYWdlTGljZW5zZURlY2xhcmVkJ10pCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VMaWNlbnNlQ29uY2x1ZGVkOiAiCisgICAgICAgICsgcGFja2FnZV9pbmZvWydQYWNrYWdlTGljZW5zZUNvbmNsdWRlZCddKQorCisgICAgZm9yIGxpY3JlZiBpbiBwYWNrYWdlX2luZm9bJ1BhY2thZ2VMaWNlbnNlSW5mb0Zyb21GaWxlcyddOgorICAgICAgICBoZWFkLmFwcGVuZCgiUGFja2FnZUxpY2Vuc2VJbmZvRnJvbUZpbGVzOiAiICsgbGljcmVmKQorICAgIGhlYWQuYXBwZW5kKCIiKQorICAgIAorICAgICMjIGhlYWRlciBmb3IgZmlsZSBsZXZlbAorICAgIGhlYWQuYXBwZW5kKCIjIyBGaWxlIEluZm9ybWF0aW9uIikKKyAgICBoZWFkLmFwcGVuZCgiIikKKworICAgIHJldHVybiAnXG4nLmpvaW4oaGVhZCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NzdGF0ZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3N0YXRlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlhZDZkYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NzdGF0ZS5iYmNsYXNzCkBAIC0wLDAgKzEsOTUxIEBACitTU1RBVEVfVkVSU0lPTiA9ICIzIgorCitTU1RBVEVfTUFOSUZFU1RTID89ICIke1RNUERJUn0vc3N0YXRlLWNvbnRyb2wiCitTU1RBVEVfTUFORklMRVBSRUZJWCA9ICIke1NTVEFURV9NQU5JRkVTVFN9L21hbmlmZXN0LSR7U1NUQVRFX01BTk1BQ0h9LSR7UE59IgorCitkZWYgZ2VuZXJhdGVfc3N0YXRlZm4oc3BlYywgaGFzaCwgZCk6CisgICAgaWYgbm90IGhhc2g6CisgICAgICAgIGhhc2ggPSAiSU5WQUxJRCIKKyAgICByZXR1cm4gaGFzaFs6Ml0gKyAiLyIgKyBzcGVjICsgaGFzaAorCitTU1RBVEVfUEtHQVJDSCAgICA9ICIke1BBQ0tBR0VfQVJDSH0iCitTU1RBVEVfUEtHU1BFQyAgICA9ICJzc3RhdGU6JHtQTn06JHtQQUNLQUdFX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU306JHtQVn06JHtQUn06JHtTU1RBVEVfUEtHQVJDSH06JHtTU1RBVEVfVkVSU0lPTn06IgorU1NUQVRFX1NXU1BFQyAgICAgPSAic3N0YXRlOiR7QlBOfTo6JHtQVn06JHtQUn06OiR7U1NUQVRFX1ZFUlNJT059OiIKK1NTVEFURV9QS0dOQU1FICAgID0gIiR7U1NUQVRFX0VYVFJBUEFUSH0ke0BnZW5lcmF0ZV9zc3RhdGVmbihkLmdldFZhcignU1NUQVRFX1BLR1NQRUMnLCBUcnVlKSwgZC5nZXRWYXIoJ0JCX1RBU0tIQVNIJywgVHJ1ZSksIGQpfSIKK1NTVEFURV9QS0cgICAgICAgID0gIiR7U1NUQVRFX0RJUn0vJHtTU1RBVEVfUEtHTkFNRX0iCitTU1RBVEVfRVhUUkFQQVRIICAgPSAiIgorU1NUQVRFX0VYVFJBUEFUSFdJTERDQVJEID0gIiIKK1NTVEFURV9QQVRIU1BFQyAgID0gIiR7U1NUQVRFX0RJUn0vJHtTU1RBVEVfRVhUUkFQQVRIV0lMRENBUkR9Ki8ke1NTVEFURV9QS0dTUEVDfSIKKworIyBXZSBkb24ndCB3YW50IHRoZSBzc3RhdGUgdG8gZGVwZW5kIG9uIHRoaW5ncyBsaWtlIHRoZSBkaXN0cm8gc3RyaW5nCisjIG9mIHRoZSBzeXN0ZW0sIHdlIGxldCB0aGUgc3N0YXRlIHBhdGhzIHRha2UgY2FyZSBvZiB0aGlzLgorU1NUQVRFX0VYVFJBUEFUSFt2YXJkZXB2YWx1ZV0gPSAiIgorCisjIEZvciBtdWx0aWxpYiBycG0gdGhlIGFsbGFyY2ggcGFja2FnZWdyb3VwIGZpbGVzIGNhbiBvdmVyd3JpdGUgKGluIHRoZW9yeSB0aGV5J3JlIGlkZW50aWNhbCkKK1NTVEFURV9EVVBXSElURUxJU1QgPSAiJHtERVBMT1lfRElSX0lNQUdFfS8gJHtERVBMT1lfRElSfS9saWNlbnNlcy8gJHtERVBMT1lfRElSX1JQTX0vYWxsLyIKKyMgQXZvaWQgZG9jYm9vay9zZ21sIGNhdGFsb2cgd2FybmluZ3MgZm9yIG5vdworU1NUQVRFX0RVUFdISVRFTElTVCArPSAiJHtTVEFHSU5HX0VUQ0RJUl9OQVRJVkV9L3NnbWwgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9zZ21sIgorIyBBcmNoaXZlIHRoZSBzb3VyY2VzIGZvciBtYW55IGFyY2hpdGVjdHVyZXMgaW4gb25lIGRlcGxveSBmb2xkZXIKK1NTVEFURV9EVVBXSElURUxJU1QgKz0gIiR7REVQTE9ZX0RJUl9TUkN9IgorCitTU1RBVEVfU0NBTl9GSUxFUyA/PSAiKi5sYSAqLWNvbmZpZyAqX2NvbmZpZyIKK1NTVEFURV9TQ0FOX0NNRCA/PSAnZmluZCAke1NTVEFURV9CVUlMRERJUn0gXCggLW5hbWUgIiR7QCJcIiAtbyAtbmFtZSBcIiIuam9pbihkLmdldFZhcigiU1NUQVRFX1NDQU5fRklMRVMiLCBUcnVlKS5zcGxpdCgpKX0iIFwpIC10eXBlIGYnCisKK0JCX0hBU0hGSUxFTkFNRSA9ICIke1NTVEFURV9FWFRSQVBBVEh9ICR7U1NUQVRFX1BLR1NQRUN9ICR7U1NUQVRFX1NXU1BFQ30iCisKK1NTVEFURV9BUkNIUyA9ICIgXAorICAgICR7QlVJTERfQVJDSH0gXAorICAgICR7QlVJTERfQVJDSH1fJHtTREtfQVJDSH1fJHtTREtfT1N9IFwKKyAgICAke0JVSUxEX0FSQ0h9XyR7VEFSR0VUX0FSQ0h9IFwKKyAgICAke1NES19BUkNIfV8ke1NES19PU30gXAorICAgICR7U0RLX0FSQ0h9XyR7UEFDS0FHRV9BUkNIfSBcCisgICAgYWxsYXJjaCBcCisgICAgJHtQQUNLQUdFX0FSQ0h9IFwKKyAgICAke01BQ0hJTkV9IgorCitTU1RBVEVfTUFOTUFDSCA/PSAiJHtTU1RBVEVfUEtHQVJDSH0iCisKK1NTVEFURUNSRUFURUZVTkNTID0gInNzdGF0ZV9oYXJkY29kZV9wYXRoIgorU1NUQVRFUE9TVENSRUFURUZVTkNTID0gIiIKK1NTVEFURVBSRUlOU1RGVU5DUyA9ICIiCitTU1RBVEVQT1NUVU5QQUNLRlVOQ1MgPSAic3N0YXRlX2hhcmRjb2RlX3BhdGhfdW5wYWNrIgorU1NUQVRFUE9TVElOU1RGVU5DUyA9ICIiCitFWFRSQV9TVEFHSU5HX0ZJWE1FUyA/PSAiIgorCitTSUdHRU5fTE9DS0VEU0lHU19DSEVDS19MRVZFTCA/PSAnZXJyb3InCisKKyMgVGhlIEdudVBHIGtleSBJRCBhbmQgcGFzc3BocmFzZSB0byB1c2UgdG8gc2lnbiBzc3RhdGUgYXJjaGl2ZXMgKG9yIHVuc2V0IHRvCisjIG5vdCBzaWduKQorU1NUQVRFX1NJR19LRVkgPz0gIiIKK1NTVEFURV9TSUdfUEFTU1BIUkFTRSA/PSAiIgorIyBXaGV0aGVyIHRvIHZlcmlmeSB0aGUgR25VUEcgc2lnbmF0dXJlcyB3aGVuIGV4dHJhY3Rpbmcgc3N0YXRlIGFyY2hpdmVzCitTU1RBVEVfVkVSSUZZX1NJRyA/PSAiMCIKKworIyBTcGVjaWZ5IGRpcnMgaW4gd2hpY2ggdGhlIHNoZWxsIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGFuZCBkb24ndCB1c2UgJHtCfQorIyBhcyBkZWZhdWx0IGRpcnMgdG8gYXZvaWQgcG9zc2libGUgcmFjZSBhYm91dCAke0J9IHdpdGggb3RoZXIgdGFzay4KK3NzdGF0ZV9jcmVhdGVfcGFja2FnZVtkaXJzXSA9ICIke1NTVEFURV9CVUlMRERJUn0iCitzc3RhdGVfdW5wYWNrX3BhY2thZ2VbZGlyc10gPSAiJHtTU1RBVEVfSU5TVERJUn0iCisKKyMgRG8gbm90IHJ1biBzc3RhdGVfaGFyZGNvZGVfcGF0aCgpIGluICR7Qn06CisjIHRoZSAke0J9IG1heWJlIHJlbW92ZWQgYnkgY21ha2VfZG9fY29uZmlndXJlKCkgd2hpbGUKKyMgc3N0YXRlX2hhcmRjb2RlX3BhdGgoKSBydW5uaW5nLgorc3N0YXRlX2hhcmRjb2RlX3BhdGhbZGlyc10gPSAiJHtTU1RBVEVfQlVJTERESVJ9IgorCitweXRob24gKCkgeworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpOgorICAgICAgICBkLnNldFZhcignU1NUQVRFX1BLR0FSQ0gnLCBkLmdldFZhcignQlVJTERfQVJDSCcsIEZhbHNlKSkKKyAgICBlbGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3Nzc2RrJywgZCk6CisgICAgICAgIGQuc2V0VmFyKCdTU1RBVEVfUEtHQVJDSCcsIGQuZXhwYW5kKCIke0JVSUxEX0FSQ0h9XyR7U0RLX0FSQ0h9XyR7U0RLX09TfSIpKQorICAgIGVsaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MnLCBkKToKKyAgICAgICAgZC5zZXRWYXIoJ1NTVEFURV9QS0dBUkNIJywgZC5leHBhbmQoIiR7QlVJTERfQVJDSH1fJHtUQVJHRVRfQVJDSH0iKSkKKyAgICBlbGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGQpOgorICAgICAgICBkLnNldFZhcignU1NUQVRFX1BLR0FSQ0gnLCBkLmV4cGFuZCgiJHtTREtfQVJDSH1fJHtTREtfT1N9IikpCisgICAgZWxpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcy1jYW5hZGlhbicsIGQpOgorICAgICAgICBkLnNldFZhcignU1NUQVRFX1BLR0FSQ0gnLCBkLmV4cGFuZCgiJHtTREtfQVJDSH1fJHtQQUNLQUdFX0FSQ0h9IikpCisgICAgZWxpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdhbGxhcmNoJywgZCkgYW5kIGQuZ2V0VmFyKCJQQUNLQUdFX0FSQ0giLCBUcnVlKSA9PSAiYWxsIjoKKyAgICAgICAgZC5zZXRWYXIoJ1NTVEFURV9QS0dBUkNIJywgImFsbGFyY2giKQorICAgIGVsc2U6CisgICAgICAgIGQuc2V0VmFyKCdTU1RBVEVfTUFOTUFDSCcsIGQuZXhwYW5kKCIke1BBQ0tBR0VfQVJDSH0iKSkKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3Nzc2RrJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MnLCBkKToKKyAgICAgICAgZC5zZXRWYXIoJ1NTVEFURV9FWFRSQVBBVEgnLCAiJHtOQVRJVkVMU0JTVFJJTkd9LyIpCisgICAgICAgIGQuc2V0VmFyKCdTU1RBVEVfRVhUUkFQQVRIV0lMRENBUkQnLCAiKi8iKQorCisgICAgIyBUaGVzZSBjbGFzc2VzIGVuY29kZSBzdGFnaW5nIHBhdGhzIGludG8gdGhlaXIgc2NyaXB0cyBkYXRhIHNvIGNhbiBvbmx5IGJlCisgICAgIyByZXVzZWQgaWYgd2UgbWFuaXB1bGF0ZSB0aGUgcGF0aHMKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3NkaycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3Nzc2RrJywgZCk6CisgICAgICAgIHNjYW5fY21kID0gImdyZXAgLUlybCAke1NUQUdJTkdfRElSfSAke1NTVEFURV9CVUlMRERJUn0iCisgICAgICAgIGQuc2V0VmFyKCdTU1RBVEVfU0NBTl9DTUQnLCBzY2FuX2NtZCkKKworICAgIHVuaXF1ZV90YXNrcyA9IHNldCgoZC5nZXRWYXIoJ1NTVEFURVRBU0tTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgZC5zZXRWYXIoJ1NTVEFURVRBU0tTJywgIiAiLmpvaW4odW5pcXVlX3Rhc2tzKSkKKyAgICBmb3IgdGFzayBpbiB1bmlxdWVfdGFza3M6CisgICAgICAgIGQucHJlcGVuZFZhckZsYWcodGFzaywgJ3ByZWZ1bmNzJywgInNzdGF0ZV90YXNrX3ByZWZ1bmMgIikKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKHRhc2ssICdwb3N0ZnVuY3MnLCAiIHNzdGF0ZV90YXNrX3Bvc3RmdW5jIikKK30KKworZGVmIHNzdGF0ZV9pbml0KHRhc2ssIGQpOgorICAgIHNzID0ge30KKyAgICBzc1sndGFzayddID0gdGFzaworICAgIHNzWydkaXJzJ10gPSBbXQorICAgIHNzWydwbGFpbmRpcnMnXSA9IFtdCisgICAgc3NbJ2xvY2tmaWxlcyddID0gW10KKyAgICBzc1snbG9ja2ZpbGVzLXNoYXJlZCddID0gW10KKyAgICByZXR1cm4gc3MKKworZGVmIHNzdGF0ZV9zdGF0ZV9mcm9tdmFycyhkLCB0YXNrID0gTm9uZSk6CisgICAgaWYgdGFzayBpcyBOb25lOgorICAgICAgICB0YXNrID0gZC5nZXRWYXIoJ0JCX0NVUlJFTlRUQVNLJywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHRhc2s6CisgICAgICAgICAgICBiYi5mYXRhbCgic3N0YXRlIGNvZGUgcnVubmluZyB3aXRob3V0IHRhc2sgY29udGV4dD8hIikKKyAgICAgICAgdGFzayA9IHRhc2sucmVwbGFjZSgiX3NldHNjZW5lIiwgIiIpCisKKyAgICBpZiB0YXNrLnN0YXJ0c3dpdGgoImRvXyIpOgorICAgICAgICB0YXNrID0gdGFza1szOl0KKyAgICBpbnB1dHMgPSAoZC5nZXRWYXJGbGFnKCJkb18iICsgdGFzaywgJ3NzdGF0ZS1pbnB1dGRpcnMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIG91dHB1dHMgPSAoZC5nZXRWYXJGbGFnKCJkb18iICsgdGFzaywgJ3NzdGF0ZS1vdXRwdXRkaXJzJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBwbGFpbmRpcnMgPSAoZC5nZXRWYXJGbGFnKCJkb18iICsgdGFzaywgJ3NzdGF0ZS1wbGFpbmRpcnMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGxvY2tmaWxlcyA9IChkLmdldFZhckZsYWcoImRvXyIgKyB0YXNrLCAnc3N0YXRlLWxvY2tmaWxlJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBsb2NrZmlsZXNzaGFyZWQgPSAoZC5nZXRWYXJGbGFnKCJkb18iICsgdGFzaywgJ3NzdGF0ZS1sb2NrZmlsZS1zaGFyZWQnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGludGVyY2VwdGZ1bmNzID0gKGQuZ2V0VmFyRmxhZygiZG9fIiArIHRhc2ssICdzc3RhdGUtaW50ZXJjZXB0ZnVuY3MnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGlmIG5vdCB0YXNrIG9yIGxlbihpbnB1dHMpICE9IGxlbihvdXRwdXRzKToKKyAgICAgICAgYmIuZmF0YWwoInNzdGF0ZSB2YXJpYWJsZXMgbm90IHNldHVwIGNvcnJlY3RseT8hIikKKworICAgIGlmIHRhc2sgPT0gInBvcHVsYXRlX2xpYyI6CisgICAgICAgIGQuc2V0VmFyKCJTU1RBVEVfUEtHU1BFQyIsICIke1NTVEFURV9TV1NQRUN9IikKKyAgICAgICAgZC5zZXRWYXIoIlNTVEFURV9FWFRSQVBBVEgiLCAiIikKKworICAgIHNzID0gc3N0YXRlX2luaXQodGFzaywgZCkKKyAgICBmb3IgaSBpbiByYW5nZShsZW4oaW5wdXRzKSk6CisgICAgICAgIHNzdGF0ZV9hZGQoc3MsIGlucHV0c1tpXSwgb3V0cHV0c1tpXSwgZCkKKyAgICBzc1snbG9ja2ZpbGVzJ10gPSBsb2NrZmlsZXMKKyAgICBzc1snbG9ja2ZpbGVzLXNoYXJlZCddID0gbG9ja2ZpbGVzc2hhcmVkCisgICAgc3NbJ3BsYWluZGlycyddID0gcGxhaW5kaXJzCisgICAgc3NbJ2ludGVyY2VwdGZ1bmNzJ10gPSBpbnRlcmNlcHRmdW5jcworICAgIHJldHVybiBzcworCitkZWYgc3N0YXRlX2FkZChzcywgc291cmNlLCBkZXN0LCBkKToKKyAgICBpZiBub3Qgc291cmNlLmVuZHN3aXRoKCIvIik6CisgICAgICAgICBzb3VyY2UgPSBzb3VyY2UgKyAiLyIKKyAgICBpZiBub3QgZGVzdC5lbmRzd2l0aCgiLyIpOgorICAgICAgICAgZGVzdCA9IGRlc3QgKyAiLyIKKyAgICBzb3VyY2UgPSBvcy5wYXRoLm5vcm1wYXRoKHNvdXJjZSkKKyAgICBkZXN0ID0gb3MucGF0aC5ub3JtcGF0aChkZXN0KQorICAgIHNyY2Jhc2UgPSBvcy5wYXRoLmJhc2VuYW1lKHNvdXJjZSkKKyAgICBzc1snZGlycyddLmFwcGVuZChbc3JjYmFzZSwgc291cmNlLCBkZXN0XSkKKyAgICByZXR1cm4gc3MKKworZGVmIHNzdGF0ZV9pbnN0YWxsKHNzLCBkKToKKyAgICBpbXBvcnQgb2UucGF0aAorICAgIGltcG9ydCBvZS5zc3RhdGVzaWcKKyAgICBpbXBvcnQgc3VicHJvY2VzcworCisgICAgc2hhcmVkZmlsZXMgPSBbXQorICAgIHNoYXJlZGRpcnMgPSBbXQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihkLmV4cGFuZCgiJHtTU1RBVEVfTUFOSUZFU1RTfSIpKQorCisgICAgbWFuaWZlc3QsIGQyID0gb2Uuc3N0YXRlc2lnLnNzdGF0ZV9nZXRfbWFuaWZlc3RfZmlsZW5hbWUoc3NbJ3Rhc2snXSwgZCkKKworICAgIGlmIG9zLmFjY2VzcyhtYW5pZmVzdCwgb3MuUl9PSyk6CisgICAgICAgIGJiLmZhdGFsKCJQYWNrYWdlIGFscmVhZHkgc3RhZ2VkICglcyk/ISIgJSBtYW5pZmVzdCkKKworICAgIGxvY2tzID0gW10KKyAgICBmb3IgbG9jayBpbiBzc1snbG9ja2ZpbGVzLXNoYXJlZCddOgorICAgICAgICBsb2Nrcy5hcHBlbmQoYmIudXRpbHMubG9ja2ZpbGUobG9jaywgVHJ1ZSkpCisgICAgZm9yIGxvY2sgaW4gc3NbJ2xvY2tmaWxlcyddOgorICAgICAgICBsb2Nrcy5hcHBlbmQoYmIudXRpbHMubG9ja2ZpbGUobG9jaykpCisKKyAgICBmb3Igc3RhdGUgaW4gc3NbJ2RpcnMnXToKKyAgICAgICAgYmIuZGVidWcoMiwgIlN0YWdpbmcgZmlsZXMgZnJvbSAlcyB0byAlcyIgJSAoc3RhdGVbMV0sIHN0YXRlWzJdKSkKKyAgICAgICAgZm9yIHdhbGtyb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHN0YXRlWzFdKToKKyAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIHNyY3BhdGggPSBvcy5wYXRoLmpvaW4od2Fsa3Jvb3QsIGZpbGUpCisgICAgICAgICAgICAgICAgZHN0cGF0aCA9IHNyY3BhdGgucmVwbGFjZShzdGF0ZVsxXSwgc3RhdGVbMl0pCisgICAgICAgICAgICAgICAgI2JiLmRlYnVnKDIsICJTdGFnaW5nICVzIHRvICVzIiAlIChzcmNwYXRoLCBkc3RwYXRoKSkKKyAgICAgICAgICAgICAgICBzaGFyZWRmaWxlcy5hcHBlbmQoZHN0cGF0aCkKKyAgICAgICAgICAgIGZvciBkaXIgaW4gZGlyczoKKyAgICAgICAgICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmpvaW4od2Fsa3Jvb3QsIGRpcikKKyAgICAgICAgICAgICAgICBkc3RkaXIgPSBzcmNkaXIucmVwbGFjZShzdGF0ZVsxXSwgc3RhdGVbMl0pCisgICAgICAgICAgICAgICAgI2JiLmRlYnVnKDIsICJTdGFnaW5nICVzIHRvICVzIiAlIChzcmNkaXIsIGRzdGRpcikpCisgICAgICAgICAgICAgICAgaWYgbm90IGRzdGRpci5lbmRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgICAgICBkc3RkaXIgPSBkc3RkaXIgKyAiLyIKKyAgICAgICAgICAgICAgICBzaGFyZWRkaXJzLmFwcGVuZChkc3RkaXIpCisKKyAgICAjIENoZWNrIHRoZSBmaWxlIGxpc3QgZm9yIGNvbmZsaWN0cyBhZ2FpbnN0IGZpbGVzIHdoaWNoIGFscmVhZHkgZXhpc3QKKyAgICB3aGl0ZWxpc3QgPSAoZC5nZXRWYXIoIlNTVEFURV9EVVBXSElURUxJU1QiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIG1hdGNoID0gW10KKyAgICBmb3IgZiBpbiBzaGFyZWRmaWxlczoKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZik6CisgICAgICAgICAgICBmID0gb3MucGF0aC5ub3JtcGF0aChmKQorICAgICAgICAgICAgcmVhbG1hdGNoID0gVHJ1ZQorICAgICAgICAgICAgZm9yIHcgaW4gd2hpdGVsaXN0OgorICAgICAgICAgICAgICAgIGlmIGYuc3RhcnRzd2l0aCh3KToKKyAgICAgICAgICAgICAgICAgICAgcmVhbG1hdGNoID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIHJlYWxtYXRjaDoKKyAgICAgICAgICAgICAgICBtYXRjaC5hcHBlbmQoZikKKyAgICAgICAgICAgICAgICBzc3RhdGVfc2VhcmNoX2NtZCA9ICJncmVwIC1ybCAnJXMnICVzIC0tZXhjbHVkZT1tYXN0ZXIubGlzdCB8IHNlZCAtZSAnczpeLiovOjonIC1lICdzOlwucG9wdWxhdGUtc3lzcm9vdDo6JyIgJSAoZiwgZC5leHBhbmQoIiR7U1NUQVRFX01BTklGRVNUU30iKSkKKyAgICAgICAgICAgICAgICBzZWFyY2hfb3V0cHV0ID0gc3VicHJvY2Vzcy5Qb3Blbihzc3RhdGVfc2VhcmNoX2NtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQorICAgICAgICAgICAgICAgIGlmIHNlYXJjaF9vdXRwdXQgIT0gIiI6CisgICAgICAgICAgICAgICAgICAgIG1hdGNoLmFwcGVuZCgiTWF0Y2hlZCBpbiAlcyIgJSBzZWFyY2hfb3V0cHV0LnJzdHJpcCgpKQorICAgIGlmIG1hdGNoOgorICAgICAgICBiYi5lcnJvcigiVGhlIHJlY2lwZSAlcyBpcyB0cnlpbmcgdG8gaW5zdGFsbCBmaWxlcyBpbnRvIGEgc2hhcmVkICIgXAorICAgICAgICAgICJhcmVhIHdoZW4gdGhvc2UgZmlsZXMgYWxyZWFkeSBleGlzdC4gVGhvc2UgZmlsZXMgYW5kIHRoZWlyIG1hbmlmZXN0ICIgXAorICAgICAgICAgICJsb2NhdGlvbiBhcmU6XG4gICAlc1xuUGxlYXNlIHZlcmlmeSB3aGljaCByZWNpcGUgc2hvdWxkIHByb3ZpZGUgdGhlICIgXAorICAgICAgICAgICJhYm92ZSBmaWxlcy5cblRoZSBidWlsZCBoYXMgc3RvcHBlZCBhcyBjb250aW51aW5nIGluIHRoaXMgc2NlbmFyaW8gV0lMTCAiIFwKKyAgICAgICAgICAiYnJlYWsgdGhpbmdzLCBpZiBub3Qgbm93LCBwb3NzaWJseSBpbiB0aGUgZnV0dXJlICh3ZSd2ZSBzZWVuIGJ1aWxkcyBmYWlsICIgXAorICAgICAgICAgICJzZXZlcmFsIG1vbnRocyBsYXRlcikuIElmIHRoZSBzeXN0ZW0ga25ldyBob3cgdG8gcmVjb3ZlciBmcm9tIHRoaXMgIiBcCisgICAgICAgICAgImF1dG9tYXRpY2FsbHkgaXQgd291bGQgaG93ZXZlciB0aGVyZSBhcmUgc2V2ZXJhbCBkaWZmZXJlbnQgc2NlbmFyaW9zICIgXAorICAgICAgICAgICJ3aGljaCBjYW4gcmVzdWx0IGluIHRoaXMgYW5kIHdlIGRvbid0IGtub3cgd2hpY2ggb25lIHRoaXMgaXMuIEl0IG1heSBiZSAiIFwKKyAgICAgICAgICAieW91IGhhdmUgc3dpdGNoZWQgcHJvdmlkZXJzIG9mIHNvbWV0aGluZyBsaWtlIHZpcnR1YWwva2VybmVsIChlLmcuIGZyb20gIiBcCisgICAgICAgICAgImxpbnV4LXlvY3RvIHRvIGxpbnV4LXlvY3RvLWRldiksIGluIHRoYXQgY2FzZSB5b3UgbmVlZCB0byBleGVjdXRlIHRoZSAiIFwKKyAgICAgICAgICAiY2xlYW4gdGFzayBmb3IgYm90aCByZWNpcGVzIGFuZCBpdCB3aWxsIHJlc29sdmUgdGhpcyBlcnJvci4gSXQgbWF5IGJlICIgXAorICAgICAgICAgICJ5b3UgY2hhbmdlZCBESVNUUk9fRkVBVFVSRVMgZnJvbSBzeXN0ZW1kIHRvIHVkZXYgb3IgdmljZSB2ZXJzYS4gQ2xlYW5pbmcgIiBcCisgICAgICAgICAgInRob3NlIHJlY2lwZXMgc2hvdWxkIGFnYWluIHJlc29sdmUgdGhpcyBlcnJvciBob3dldmVyIHN3aXRjaGluZyAiIFwKKyAgICAgICAgICAiRElTVFJPX0ZFQVRVUkVTIG9uIGFuIGV4aXN0aW5nIGJ1aWxkIGRpcmVjdG9yeSBpcyBub3Qgc3VwcG9ydGVkLCB5b3UgIiBcCisgICAgICAgICAgInNob3VsZCByZWFsbHkgY2xlYW4gb3V0IHRtcCBhbmQgcmVidWlsZCAocmV1c2luZyBzc3RhdGUgc2hvdWxkIGJlIHNhZmUpLiAiIFwKKyAgICAgICAgICAiSXQgY291bGQgYmUgdGhlIG92ZXJsYXBwaW5nIGZpbGVzIGRldGVjdGVkIGFyZSBoYXJtbGVzcyBpbiB3aGljaCBjYXNlICIgXAorICAgICAgICAgICJhZGRpbmcgdGhlbSB0byBTU1RBVEVfRFVQV0hJVEVMSVNUIG1heSBiZSB0aGUgY29ycmVjdCBzb2x1dGlvbi4gSXQgY291bGQgIiBcCisgICAgICAgICAgImFsc28gYmUgeW91ciBidWlsZCBpcyBpbmNsdWRpbmcgdHdvIGRpZmZlcmVudCBjb25mbGljdGluZyB2ZXJzaW9ucyBvZiAiIFwKKyAgICAgICAgICAidGhpbmdzIChlLmcuIGJsdWV6IDQgYW5kIGJsdWV6IDUgYW5kIHRoZSBjb3JyZWN0IHNvbHV0aW9uIGZvciB0aGF0IHdvdWxkICIgXAorICAgICAgICAgICJiZSB0byByZXNvbHZlIHRoZSBjb25mbGljdC4gSWYgaW4gZG91YnQsIHBsZWFzZSBhc2sgb24gdGhlIG1haWxpbmcgbGlzdCwgIiBcCisgICAgICAgICAgInNoYXJpbmcgdGhlIGVycm9yIGFuZCBmaWxlbGlzdCBhYm92ZS4iICUgXAorICAgICAgICAgIChkLmdldFZhcignUE4nLCBUcnVlKSwgIlxuICIuam9pbihtYXRjaCkpKQorICAgICAgICBiYi5mYXRhbCgiSWYgdGhlIGFib3ZlIG1lc3NhZ2UgaXMgdG9vIG11Y2gsIHRoZSBzaW1wbGVyIHZlcnNpb24gaXMgeW91J3JlIGFkdmlzZWQgdG8gd2lwZSBvdXQgdG1wIGFuZCByZWJ1aWxkIChyZXVzaW5nIHNzdGF0ZSBpcyBmaW5lKS4gVGhhdCB3aWxsIGxpa2VseSBmaXggdGhpbmdzIGluIG1vc3QgKGJ1dCBub3QgYWxsKSBjYXNlcy4iKQorCisgICAgIyBXcml0ZSBvdXQgdGhlIG1hbmlmZXN0CisgICAgZiA9IG9wZW4obWFuaWZlc3QsICJ3IikKKyAgICBmb3IgZmlsZSBpbiBzaGFyZWRmaWxlczoKKyAgICAgICAgZi53cml0ZShmaWxlICsgIlxuIikKKworICAgICMgV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBkaXJlY3RvcmllcyBhcHBlYXIgYXQgdGhlIGVuZCBvZiB0aGUgbWFuaWZlc3QKKyAgICAjIHNvIHRoYXQgd2hlbiB3ZSB0ZXN0IHRvIHNlZSBpZiB0aGV5IHNob3VsZCBiZSBkZWxldGVkIGFueSBjb250ZW50cworICAgICMgYWRkZWQgYnkgdGhlIHRhc2sgd2lsbCBoYXZlIGJlZW4gcmVtb3ZlZCBmaXJzdC4KKyAgICBkaXJzID0gc29ydGVkKHNoYXJlZGRpcnMsIGtleT1sZW4pCisgICAgIyBNdXN0IHJlbW92ZSBjaGlsZHJlbiBmaXJzdCwgd2hpY2ggd2lsbCBoYXZlIGEgbG9uZ2VyIHBhdGggdGhhbiB0aGUgcGFyZW50CisgICAgZm9yIGRpIGluIHJldmVyc2VkKGRpcnMpOgorICAgICAgICBmLndyaXRlKGRpICsgIlxuIikKKyAgICBmLmNsb3NlKCkKKworICAgICMgQXBwZW5kIHRvIHRoZSBsaXN0IG9mIG1hbmlmZXN0cyBmb3IgdGhpcyBQQUNLQUdFX0FSQ0gKKworICAgIGkgPSBkMi5leHBhbmQoIiR7U1NUQVRFX01BTklGRVNUU30vaW5kZXgtJHtTU1RBVEVfTUFOTUFDSH0iKQorICAgIGwgPSBiYi51dGlscy5sb2NrZmlsZShpICsgIi5sb2NrIikKKyAgICBmaWxlZGF0YSA9IGQuZ2V0VmFyKCJTVEFNUCIsIFRydWUpICsgIiAiICsgZDIuZ2V0VmFyKCJTU1RBVEVfTUFORklMRVBSRUZJWCIsIFRydWUpICsgIiAiICsgZC5nZXRWYXIoIldPUktESVIiLCBUcnVlKSArICJcbiIKKyAgICBtYW5pZmVzdHMgPSBbXQorICAgIGlmIG9zLnBhdGguZXhpc3RzKGkpOgorICAgICAgICB3aXRoIG9wZW4oaSwgInIiKSBhcyBmOgorICAgICAgICAgICAgbWFuaWZlc3RzID0gZi5yZWFkbGluZXMoKQorICAgIGlmIGZpbGVkYXRhIG5vdCBpbiBtYW5pZmVzdHM6CisgICAgICAgIHdpdGggb3BlbihpLCAiYSsiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShmaWxlZGF0YSkKKyAgICBiYi51dGlscy51bmxvY2tmaWxlKGwpCisKKyAgICAjIFJ1biB0aGUgYWN0dWFsIGZpbGUgaW5zdGFsbAorICAgIGZvciBzdGF0ZSBpbiBzc1snZGlycyddOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzdGF0ZVsxXSk6CisgICAgICAgICAgICBvZS5wYXRoLmNvcHloYXJkbGlua3RyZWUoc3RhdGVbMV0sIHN0YXRlWzJdKQorCisgICAgZm9yIHBvc3RpbnN0IGluIChkLmdldFZhcignU1NUQVRFUE9TVElOU1RGVU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMocG9zdGluc3QsIGQpCisKKyAgICBmb3IgbG9jayBpbiBsb2NrczoKKyAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsb2NrKQorCitzc3RhdGVfaW5zdGFsbFt2YXJkZXBzZXhjbHVkZV0gKz0gIlNTVEFURV9EVVBXSElURUxJU1QgU1RBVEVfTUFOTUFDSCBTU1RBVEVfTUFORklMRVBSRUZJWCIKK3NzdGF0ZV9pbnN0YWxsW3ZhcmRlcHNdICs9ICIke1NTVEFURVBPU1RJTlNURlVOQ1N9IgorCitkZWYgc3N0YXRlX2luc3RhbGxwa2coc3MsIGQpOgorICAgIGltcG9ydCBvZS5wYXRoCisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgIGRlZiBwcmVwZGlyKGRpcik6CisgICAgICAgICMgcmVtb3ZlIGRpciBpZiBpdCBleGlzdHMsIGVuc3VyZSBhbnkgcGFyZW50IGRpcmVjdG9yaWVzIGRvIGV4aXN0CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRpcik6CisgICAgICAgICAgICBvZS5wYXRoLnJlbW92ZShkaXIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihkaXIpCisgICAgICAgIG9lLnBhdGgucmVtb3ZlKGRpcikKKworICAgIHNzdGF0ZWluc3QgPSBkLmV4cGFuZCgiJHtXT1JLRElSfS9zc3RhdGUtaW5zdGFsbC0lcy8iICUgc3NbJ3Rhc2snXSkKKyAgICBzc3RhdGVmZXRjaCA9IGQuZ2V0VmFyKCdTU1RBVEVfUEtHTkFNRScsIFRydWUpICsgJ18nICsgc3NbJ3Rhc2snXSArICIudGd6IgorICAgIHNzdGF0ZXBrZyA9IGQuZ2V0VmFyKCdTU1RBVEVfUEtHJywgVHJ1ZSkgKyAnXycgKyBzc1sndGFzayddICsgIi50Z3oiCisKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3N0YXRlcGtnKToKKyAgICAgICAgcHN0YWdpbmdfZmV0Y2goc3N0YXRlZmV0Y2gsIHNzdGF0ZXBrZywgZCkKKworICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShzc3RhdGVwa2cpOgorICAgICAgICBiYi5ub3RlKCJTdGFnaW5nIHBhY2thZ2UgJXMgZG9lcyBub3QgZXhpc3QiICUgc3N0YXRlcGtnKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHNzdGF0ZV9jbGVhbihzcywgZCkKKworICAgIGQuc2V0VmFyKCdTU1RBVEVfSU5TVERJUicsIHNzdGF0ZWluc3QpCisgICAgZC5zZXRWYXIoJ1NTVEFURV9QS0cnLCBzc3RhdGVwa2cpCisKKyAgICBpZiBiYi51dGlscy50b19ib29sZWFuKGQuZ2V0VmFyKCJTU1RBVEVfVkVSSUZZX1NJRyIsIFRydWUpLCBGYWxzZSk6CisgICAgICAgIGlmIHN1YnByb2Nlc3MuY2FsbChbImdwZyIsICItLXZlcmlmeSIsIHNzdGF0ZXBrZyArICIuc2lnIiwgc3N0YXRlcGtnXSkgIT0gMDoKKyAgICAgICAgICAgIGJiLndhcm4oIkNhbm5vdCB2ZXJpZnkgc2lnbmF0dXJlIG9uIHNzdGF0ZSBwYWNrYWdlICVzIiAlIHNzdGF0ZXBrZykKKworICAgIGZvciBmIGluIChkLmdldFZhcignU1NUQVRFUFJFSU5TVEZVTkNTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkgKyBbJ3NzdGF0ZV91bnBhY2tfcGFja2FnZSddICsgKGQuZ2V0VmFyKCdTU1RBVEVQT1NUVU5QQUNLRlVOQ1MnLCBUcnVlKSBvciAnJykuc3BsaXQoKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGYsIGQpCisKKyAgICBmb3Igc3RhdGUgaW4gc3NbJ2RpcnMnXToKKyAgICAgICAgcHJlcGRpcihzdGF0ZVsxXSkKKyAgICAgICAgb3MucmVuYW1lKHNzdGF0ZWluc3QgKyBzdGF0ZVswXSwgc3RhdGVbMV0pCisgICAgc3N0YXRlX2luc3RhbGwoc3MsIGQpCisKKyAgICBmb3IgcGxhaW4gaW4gc3NbJ3BsYWluZGlycyddOgorICAgICAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgICAgICBzcmMgPSBzc3RhdGVpbnN0ICsgIi8iICsgcGxhaW4ucmVwbGFjZSh3b3JrZGlyLCAnJykKKyAgICAgICAgZGVzdCA9IHBsYWluCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzcmMpCisgICAgICAgIHByZXBkaXIoZGVzdCkKKyAgICAgICAgb3MucmVuYW1lKHNyYywgZGVzdCkKKworICAgIHJldHVybiBUcnVlCisKK3B5dGhvbiBzc3RhdGVfaGFyZGNvZGVfcGF0aF91bnBhY2sgKCkgeworICAgICMgRml4dXAgaGFyZGNvZGVkIHBhdGhzCisgICAgIworICAgICMgTm90ZTogVGhlIGxvZ2ljIGJlbG93IG11c3QgbWF0Y2ggdGhlIHJldmVyc2UgbG9naWMgaW4KKyAgICAjIHNzdGF0ZV9oYXJkY29kZV9wYXRoKGQpCisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgIHNzdGF0ZWluc3QgPSBkLmdldFZhcignU1NUQVRFX0lOU1RESVInLCBUcnVlKQorICAgIGZpeG1lZm4gPSAgc3N0YXRlaW5zdCArICJmaXhtZXBhdGgiCisgICAgaWYgb3MucGF0aC5pc2ZpbGUoZml4bWVmbik6CisgICAgICAgIHN0YWdpbmcgPSBkLmdldFZhcignU1RBR0lOR19ESVInLCBUcnVlKQorICAgICAgICBzdGFnaW5nX3RhcmdldCA9IGQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9UQVJHRVQnLCBUcnVlKQorICAgICAgICBzdGFnaW5nX2hvc3QgPSBkLmdldFZhcignU1RBR0lOR19ESVJfSE9TVCcsIFRydWUpCisKKyAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3NzZGsnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcy1jYW5hZGlhbicsIGQpOgorICAgICAgICAgICAgc3N0YXRlX3NlZF9jbWQgPSAic2VkIC1pIC1lICdzOkZJWE1FU1RBR0lOR0RJUjolczpnJyIgJSAoc3RhZ2luZykKKyAgICAgICAgZWxpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpOgorICAgICAgICAgICAgc3N0YXRlX3NlZF9jbWQgPSAic2VkIC1pIC1lICdzOkZJWE1FU1RBR0lOR0RJUlRBUkdFVDolczpnOyBzOkZJWE1FU1RBR0lOR0RJUjolczpnJyIgJSAoc3RhZ2luZ190YXJnZXQsIHN0YWdpbmcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzc3RhdGVfc2VkX2NtZCA9ICJzZWQgLWkgLWUgJ3M6RklYTUVTVEFHSU5HRElSSE9TVDolczpnJyIgJSAoc3RhZ2luZ19ob3N0KQorCisgICAgICAgIGV4dHJhX3N0YWdpbmdfZml4bWVzID0gZC5nZXRWYXIoJ0VYVFJBX1NUQUdJTkdfRklYTUVTJywgVHJ1ZSkgb3IgJycKKyAgICAgICAgZm9yIGZpeG1ldmFyIGluIGV4dHJhX3N0YWdpbmdfZml4bWVzLnNwbGl0KCk6CisgICAgICAgICAgICBmaXhtZV9wYXRoID0gZC5nZXRWYXIoZml4bWV2YXIsIFRydWUpCisgICAgICAgICAgICBzc3RhdGVfc2VkX2NtZCArPSAiIC1lICdzOkZJWE1FXyVzOiVzOmcnIiAlIChmaXhtZXZhciwgZml4bWVfcGF0aCkKKworICAgICAgICAjIEFkZCBzc3RhdGVpbnN0IHRvIGVhY2ggZmlsZW5hbWUgaW4gZml4bWVwYXRoLCB1c2UgeGFyZ3MgdG8gZWZmaWNpZW50bHkgY2FsbCBzZWQKKyAgICAgICAgc3N0YXRlX2hhcmRjb2RlX2NtZCA9ICJzZWQgLWUgJ3M6XjolczpnJyAlcyB8IHhhcmdzICVzIiAlIChzc3RhdGVpbnN0LCBmaXhtZWZuLCBzc3RhdGVfc2VkX2NtZCkKKworICAgICAgICBiYi5ub3RlKCJSZXBsYWNpbmcgZml4bWUgcGF0aHMgaW4gc3N0YXRlIHBhY2thZ2U6ICVzIiAlIChzc3RhdGVfaGFyZGNvZGVfY21kKSkKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKHNzdGF0ZV9oYXJkY29kZV9jbWQsIHNoZWxsPVRydWUpCisKKyAgICAgICAgIyBOZWVkIHRvIHJlbW92ZSB0aGlzIG9yIHdlJ2QgY29weSBpdCBpbnRvIHRoZSB0YXJnZXQgZGlyZWN0b3J5IGFuZCBtYXkgCisgICAgICAgICMgY29uZmxpY3Qgd2l0aCBhbm90aGVyIHdyaXRlcgorICAgICAgICBvcy5yZW1vdmUoZml4bWVmbikKK30KKworZGVmIHNzdGF0ZV9jbGVhbl9jYWNoZWZpbGUoc3MsIGQpOgorICAgIGltcG9ydCBvZS5wYXRoCisKKyAgICBzc3RhdGVwa2dmaWxlID0gZC5nZXRWYXIoJ1NTVEFURV9QQVRIU1BFQycsIFRydWUpICsgIipfIiArIHNzWyd0YXNrJ10gKyAiLnRneioiCisgICAgYmIubm90ZSgiUmVtb3ZpbmcgJXMiICUgc3N0YXRlcGtnZmlsZSkKKyAgICBvZS5wYXRoLnJlbW92ZShzc3RhdGVwa2dmaWxlKQorCitkZWYgc3N0YXRlX2NsZWFuX2NhY2hlZmlsZXMoZCk6CisgICAgZm9yIHRhc2sgaW4gKGQuZ2V0VmFyKCdTU1RBVEVUQVNLUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICBsZCA9IGQuY3JlYXRlQ29weSgpCisgICAgICAgIHNzID0gc3N0YXRlX3N0YXRlX2Zyb212YXJzKGxkLCB0YXNrKQorICAgICAgICBzc3RhdGVfY2xlYW5fY2FjaGVmaWxlKHNzLCBsZCkKKworZGVmIHNzdGF0ZV9jbGVhbl9tYW5pZmVzdChtYW5pZmVzdCwgZCk6CisgICAgaW1wb3J0IG9lLnBhdGgKKworICAgIG1maWxlID0gb3BlbihtYW5pZmVzdCkKKyAgICBlbnRyaWVzID0gbWZpbGUucmVhZGxpbmVzKCkKKyAgICBtZmlsZS5jbG9zZSgpCisKKyAgICBmb3IgZW50cnkgaW4gZW50cmllczoKKyAgICAgICAgZW50cnkgPSBlbnRyeS5zdHJpcCgpCisgICAgICAgIGJiLmRlYnVnKDIsICJSZW1vdmluZyBtYW5pZmVzdDogJXMiICUgZW50cnkpCisgICAgICAgICMgV2UgY2FuIHJhY2UgYWdhaW5zdCBhbm90aGVyIHBhY2thZ2UgcG9wdWxhdGluZyBkaXJlY3RvcmllcyBhcyB3ZSdyZSByZW1vdmluZyB0aGVtCisgICAgICAgICMgc28gd2UgaWdub3JlIGVycm9ycyBoZXJlLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBlbnRyeS5lbmRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGVudHJ5WzotMV0pOgorICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZW50cnlbOi0xXSkKKyAgICAgICAgICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKGVudHJ5KSBhbmQgbGVuKG9zLmxpc3RkaXIoZW50cnkpKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBvcy5ybWRpcihlbnRyeVs6LTFdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvZS5wYXRoLnJlbW92ZShlbnRyeSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBvZS5wYXRoLnJlbW92ZShtYW5pZmVzdCkKKworZGVmIHNzdGF0ZV9jbGVhbihzcywgZCk6CisgICAgaW1wb3J0IG9lLnBhdGgKKyAgICBpbXBvcnQgZ2xvYgorCisgICAgZDIgPSBkLmNyZWF0ZUNvcHkoKQorICAgIHN0YW1wX2NsZWFuID0gZC5nZXRWYXIoIlNUQU1QQ0xFQU4iLCBUcnVlKQorICAgIGV4dHJhaW5mID0gZC5nZXRWYXJGbGFnKCJkb18iICsgc3NbJ3Rhc2snXSwgJ3N0YW1wLWV4dHJhLWluZm8nLCBUcnVlKQorICAgIGlmIGV4dHJhaW5mOgorICAgICAgICBkMi5zZXRWYXIoIlNTVEFURV9NQU5NQUNIIiwgZXh0cmFpbmYpCisgICAgICAgIHdpbGRjYXJkX3N0ZmlsZSA9ICIlcy5kb18lcyouJXMiICUgKHN0YW1wX2NsZWFuLCBzc1sndGFzayddLCBleHRyYWluZikKKyAgICBlbHNlOgorICAgICAgICB3aWxkY2FyZF9zdGZpbGUgPSAiJXMuZG9fJXMqIiAlIChzdGFtcF9jbGVhbiwgc3NbJ3Rhc2snXSkKKworICAgIG1hbmlmZXN0ID0gZDIuZXhwYW5kKCIke1NTVEFURV9NQU5GSUxFUFJFRklYfS4lcyIgJSBzc1sndGFzayddKQorCisgICAgaWYgb3MucGF0aC5leGlzdHMobWFuaWZlc3QpOgorICAgICAgICBsb2NrcyA9IFtdCisgICAgICAgIGZvciBsb2NrIGluIHNzWydsb2NrZmlsZXMtc2hhcmVkJ106CisgICAgICAgICAgICBsb2Nrcy5hcHBlbmQoYmIudXRpbHMubG9ja2ZpbGUobG9jaykpCisgICAgICAgIGZvciBsb2NrIGluIHNzWydsb2NrZmlsZXMnXToKKyAgICAgICAgICAgIGxvY2tzLmFwcGVuZChiYi51dGlscy5sb2NrZmlsZShsb2NrKSkKKworICAgICAgICBzc3RhdGVfY2xlYW5fbWFuaWZlc3QobWFuaWZlc3QsIGQpCisKKyAgICAgICAgZm9yIGxvY2sgaW4gbG9ja3M6CisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxvY2spCisKKyAgICAjIFJlbW92ZSB0aGUgY3VycmVudCBhbmQgcHJldmlvdXMgc3RhbXBzLCBidXQga2VlcCB0aGUgc2lnZGF0YS4KKyAgICAjCisgICAgIyBUaGUgZ2xvYigpIG1hdGNoZXMgZG9fdGFzayogd2hpY2ggbWF5IG1hdGNoIG11bHRpcGxlIHRhc2tzLCBmb3IKKyAgICAjIGV4YW1wbGU6IGRvX3BhY2thZ2UgYW5kIGRvX3BhY2thZ2Vfd3JpdGVfaXBrLCBzbyB3ZSBuZWVkIHRvCisgICAgIyBleGFjdGx5IG1hdGNoICouZG9fdGFzay4qIGFuZCAqLmRvX3Rhc2tfc2V0c2NlbmUuKgorICAgIHJtX3N0YW1wID0gJy5kb18lcy4nICUgc3NbJ3Rhc2snXQorICAgIHJtX3NldHNjZW5lID0gJy5kb18lc19zZXRzY2VuZS4nICUgc3NbJ3Rhc2snXQorICAgICMgRm9yIEJCX1NJR05BVFVSRV9IQU5ETEVSID0gIm5vb3AiCisgICAgcm1fbm9oYXNoID0gIi5kb18lcyIgJSBzc1sndGFzayddCisgICAgZm9yIHN0ZmlsZSBpbiBnbG9iLmdsb2Iod2lsZGNhcmRfc3RmaWxlKToKKyAgICAgICAgIyBLZWVwIHRoZSBzaWdkYXRhCisgICAgICAgIGlmICIuc2lnZGF0YS4iIGluIHN0ZmlsZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMgUHJlc2VydmUgdGFpbnQgZmlsZXMgaW4gdGhlIHN0YW1wcyBkaXJlY3RvcnkKKyAgICAgICAgaWYgc3RmaWxlLmVuZHN3aXRoKCcudGFpbnQnKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIHJtX3N0YW1wIGluIHN0ZmlsZSBvciBybV9zZXRzY2VuZSBpbiBzdGZpbGUgb3IgXAorICAgICAgICAgICAgICAgIHN0ZmlsZS5lbmRzd2l0aChybV9ub2hhc2gpOgorICAgICAgICAgICAgb2UucGF0aC5yZW1vdmUoc3RmaWxlKQorCitzc3RhdGVfY2xlYW5bdmFyZGVwc2V4Y2x1ZGVdID0gIlNTVEFURV9NQU5GSUxFUFJFRklYIgorCitDTEVBTkZVTkNTICs9ICJzc3RhdGVfY2xlYW5hbGwiCisKK3B5dGhvbiBzc3RhdGVfY2xlYW5hbGwoKSB7CisgICAgYmIubm90ZSgiUmVtb3Zpbmcgc2hhcmVkIHN0YXRlIGZvciBwYWNrYWdlICVzIiAlIGQuZ2V0VmFyKCdQTicsIFRydWUpKQorCisgICAgbWFuaWZlc3RfZGlyID0gZC5nZXRWYXIoJ1NTVEFURV9NQU5JRkVTVFMnLCBUcnVlKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhtYW5pZmVzdF9kaXIpOgorICAgICAgICByZXR1cm4KKworICAgIHRhc2tzID0gZC5nZXRWYXIoJ1NTVEFURVRBU0tTJywgVHJ1ZSkuc3BsaXQoKQorICAgIGZvciBuYW1lIGluIHRhc2tzOgorICAgICAgICBsZCA9IGQuY3JlYXRlQ29weSgpCisgICAgICAgIHNoYXJlZF9zdGF0ZSA9IHNzdGF0ZV9zdGF0ZV9mcm9tdmFycyhsZCwgbmFtZSkKKyAgICAgICAgc3N0YXRlX2NsZWFuKHNoYXJlZF9zdGF0ZSwgbGQpCit9CisKK3B5dGhvbiBzc3RhdGVfaGFyZGNvZGVfcGF0aCAoKSB7CisgICAgaW1wb3J0IHN1YnByb2Nlc3MsIHBsYXRmb3JtCisKKyAgICAjIE5lZWQgdG8gcmVtb3ZlIGhhcmRjb2RlZCBwYXRocyBhbmQgZml4IHRoZXNlIHdoZW4gd2UgaW5zdGFsbCB0aGUKKyAgICAjIHN0YWdpbmcgcGFja2FnZXMuCisgICAgIworICAgICMgTm90ZTogdGhlIGxvZ2ljIGluIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gbWF0Y2ggdGhlIHJldmVyc2UgbG9naWMKKyAgICAjIGluIHNzdGF0ZV9pbnN0YWxscGtnKHNzLCBkKQorCisgICAgc3RhZ2luZyA9IGQuZ2V0VmFyKCdTVEFHSU5HX0RJUicsIFRydWUpCisgICAgc3RhZ2luZ190YXJnZXQgPSBkLmdldFZhcignU1RBR0lOR19ESVJfVEFSR0VUJywgVHJ1ZSkKKyAgICBzdGFnaW5nX2hvc3QgPSBkLmdldFZhcignU1RBR0lOR19ESVJfSE9TVCcsIFRydWUpCisgICAgc3N0YXRlX2J1aWxkZGlyID0gZC5nZXRWYXIoJ1NTVEFURV9CVUlMRERJUicsIFRydWUpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zc3NkaycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzLWNhbmFkaWFuJywgZCk6CisgICAgICAgIHNzdGF0ZV9ncmVwX2NtZCA9ICJncmVwIC1sIC1lICclcyciICUgKHN0YWdpbmcpCisgICAgICAgIHNzdGF0ZV9zZWRfY21kID0gInNlZCAtaSAtZSAnczolczpGSVhNRVNUQUdJTkdESVI6ZyciICUgKHN0YWdpbmcpCisgICAgZWxpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpOgorICAgICAgICBzc3RhdGVfZ3JlcF9jbWQgPSAiZ3JlcCAtbCAtZSAnJXMnIC1lICclcyciICUgKHN0YWdpbmdfdGFyZ2V0LCBzdGFnaW5nKQorICAgICAgICBzc3RhdGVfc2VkX2NtZCA9ICJzZWQgLWkgLWUgJ3M6JXM6RklYTUVTVEFHSU5HRElSVEFSR0VUOmc7IHM6JXM6RklYTUVTVEFHSU5HRElSOmcnIiAlIChzdGFnaW5nX3RhcmdldCwgc3RhZ2luZykKKyAgICBlbHNlOgorICAgICAgICBzc3RhdGVfZ3JlcF9jbWQgPSAiZ3JlcCAtbCAtZSAnJXMnIiAlIChzdGFnaW5nX2hvc3QpCisgICAgICAgIHNzdGF0ZV9zZWRfY21kID0gInNlZCAtaSAtZSAnczolczpGSVhNRVNUQUdJTkdESVJIT1NUOmcnIiAlIChzdGFnaW5nX2hvc3QpCisKKyAgICBleHRyYV9zdGFnaW5nX2ZpeG1lcyA9IGQuZ2V0VmFyKCdFWFRSQV9TVEFHSU5HX0ZJWE1FUycsIFRydWUpIG9yICcnCisgICAgZm9yIGZpeG1ldmFyIGluIGV4dHJhX3N0YWdpbmdfZml4bWVzLnNwbGl0KCk6CisgICAgICAgIGZpeG1lX3BhdGggPSBkLmdldFZhcihmaXhtZXZhciwgVHJ1ZSkKKyAgICAgICAgc3N0YXRlX3NlZF9jbWQgKz0gIiAtZSAnczolczpGSVhNRV8lczpnJyIgJSAoZml4bWVfcGF0aCwgZml4bWV2YXIpCisKKyAgICBmaXhtZWZuID0gIHNzdGF0ZV9idWlsZGRpciArICJmaXhtZXBhdGgiCisKKyAgICBzc3RhdGVfc2Nhbl9jbWQgPSBkLmdldFZhcignU1NUQVRFX1NDQU5fQ01EJywgVHJ1ZSkKKyAgICBzc3RhdGVfZmlsZWxpc3RfY21kID0gInRlZSAlcyIgJSAoZml4bWVmbikKKworICAgICMgZml4bWVwYXRoIGZpbGUgbmVlZHMgcmVsYXRpdmUgcGF0aHMsIGRyb3Agc3N0YXRlX2J1aWxkZGlyIHByZWZpeAorICAgIHNzdGF0ZV9maWxlbGlzdF9yZWxhdGl2ZV9jbWQgPSAic2VkIC1pIC1lICdzOl4lczo6ZycgJXMiICUgKHNzdGF0ZV9idWlsZGRpciwgZml4bWVmbikKKworICAgIHhhcmdzX25vX2VtcHR5X3J1bl9jbWQgPSAnLS1uby1ydW4taWYtZW1wdHknCisgICAgaWYgcGxhdGZvcm0uc3lzdGVtKCkgPT0gJ0Rhcndpbic6CisgICAgICAgIHhhcmdzX25vX2VtcHR5X3J1bl9jbWQgPSAnJworCisgICAgIyBMaW1pdCB0aGUgZml4cGF0aHMgYW5kIHNlZCBvcGVyYXRpb25zIGJhc2VkIG9uIHRoZSBpbml0aWFsIGdyZXAgc2VhcmNoCisgICAgIyBUaGlzIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2YgbWFraW5nIHN1cmUgdGhlIHZmcyBjYWNoZSBpcyBob3QKKyAgICBzc3RhdGVfaGFyZGNvZGVfY21kID0gIiVzIHwgeGFyZ3MgJXMgfCAlcyB8IHhhcmdzICVzICVzIiAlIChzc3RhdGVfc2Nhbl9jbWQsIHNzdGF0ZV9ncmVwX2NtZCwgc3N0YXRlX2ZpbGVsaXN0X2NtZCwgeGFyZ3Nfbm9fZW1wdHlfcnVuX2NtZCwgc3N0YXRlX3NlZF9jbWQpCisKKyAgICBiYi5ub3RlKCJSZW1vdmluZyBoYXJkY29kZWQgcGF0aHMgZnJvbSBzc3RhdGUgcGFja2FnZTogJyVzJyIgJSAoc3N0YXRlX2hhcmRjb2RlX2NtZCkpCisgICAgc3VicHJvY2Vzcy5jYWxsKHNzdGF0ZV9oYXJkY29kZV9jbWQsIHNoZWxsPVRydWUpCisKKyAgICAgICAgIyBJZiB0aGUgZml4bWVmbiBpcyBlbXB0eSwgcmVtb3ZlIGl0Li4KKyAgICBpZiBvcy5zdGF0KGZpeG1lZm4pLnN0X3NpemUgPT0gMDoKKyAgICAgICAgb3MucmVtb3ZlKGZpeG1lZm4pCisgICAgZWxzZToKKyAgICAgICAgYmIubm90ZSgiUmVwbGFjaW5nIGFic29sdXRlIHBhdGhzIGluIGZpeG1lcGF0aCBmaWxlOiAnJXMnIiAlIChzc3RhdGVfZmlsZWxpc3RfcmVsYXRpdmVfY21kKSkKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKHNzdGF0ZV9maWxlbGlzdF9yZWxhdGl2ZV9jbWQsIHNoZWxsPVRydWUpCit9CisKK2RlZiBzc3RhdGVfcGFja2FnZShzcywgZCk6CisgICAgaW1wb3J0IG9lLnBhdGgKKworICAgIGRlZiBtYWtlX3JlbGF0aXZlX3N5bWxpbmsocGF0aCwgb3V0cHV0cGF0aCwgZCk6CisgICAgICAgICMgUmVwbGFjZSBvdXQgYWJzb2x1dGUgVE1QRElSIHBhdGhzIGluIHN5bWxpbmtzIHdpdGggcmVsYXRpdmUgb25lcworICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2xpbmsocGF0aCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbGluayA9IG9zLnJlYWRsaW5rKHBhdGgpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGxpbmspOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIG5vdCBsaW5rLnN0YXJ0c3dpdGgodG1wZGlyKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGRlcHRoID0gb3V0cHV0cGF0aC5ycGFydGl0aW9uKHRtcGRpcilbMl0uY291bnQoJy8nKQorICAgICAgICBiYXNlID0gbGluay5wYXJ0aXRpb24odG1wZGlyKVsyXS5zdHJpcCgpCisgICAgICAgIHdoaWxlIGRlcHRoID4gMToKKyAgICAgICAgICAgIGJhc2UgPSAiLy4uIiArIGJhc2UKKyAgICAgICAgICAgIGRlcHRoIC09IDEKKyAgICAgICAgYmFzZSA9ICIuIiArIGJhc2UKKworICAgICAgICBiYi5kZWJ1ZygyLCAiUmVwbGFjaW5nIGFic29sdXRlIHBhdGggJXMgd2l0aCByZWxhdGl2ZSBwYXRoICVzIGZvciAlcyIgJSAobGluaywgYmFzZSwgb3V0cHV0cGF0aCkpCisgICAgICAgIG9zLnJlbW92ZShwYXRoKQorICAgICAgICBvcy5zeW1saW5rKGJhc2UsIHBhdGgpCisKKyAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKworICAgIHNzdGF0ZWJ1aWxkID0gZC5leHBhbmQoIiR7V09SS0RJUn0vc3N0YXRlLWJ1aWxkLSVzLyIgJSBzc1sndGFzayddKQorICAgIHNzdGF0ZXBrZyA9IGQuZ2V0VmFyKCdTU1RBVEVfUEtHJywgVHJ1ZSkgKyAnXycrIHNzWyd0YXNrJ10gKyAiLnRneiIKKyAgICBiYi51dGlscy5yZW1vdmUoc3N0YXRlYnVpbGQsIHJlY3Vyc2U9VHJ1ZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoc3N0YXRlYnVpbGQpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShzc3RhdGVwa2cpKQorICAgIGZvciBzdGF0ZSBpbiBzc1snZGlycyddOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3RhdGVbMV0pOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgc3JjYmFzZSA9IHN0YXRlWzBdLnJzdHJpcCgiLyIpLnJzcGxpdCgnLycsIDEpWzBdCisgICAgICAgIGZvciB3YWxrcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzdGF0ZVsxXSk6CisgICAgICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBzcmNwYXRoID0gb3MucGF0aC5qb2luKHdhbGtyb290LCBmaWxlKQorICAgICAgICAgICAgICAgIGRzdHBhdGggPSBzcmNwYXRoLnJlcGxhY2Uoc3RhdGVbMV0sIHN0YXRlWzJdKQorICAgICAgICAgICAgICAgIG1ha2VfcmVsYXRpdmVfc3ltbGluayhzcmNwYXRoLCBkc3RwYXRoLCBkKQorICAgICAgICAgICAgZm9yIGRpciBpbiBkaXJzOgorICAgICAgICAgICAgICAgIHNyY3BhdGggPSBvcy5wYXRoLmpvaW4od2Fsa3Jvb3QsIGRpcikKKyAgICAgICAgICAgICAgICBkc3RwYXRoID0gc3JjcGF0aC5yZXBsYWNlKHN0YXRlWzFdLCBzdGF0ZVsyXSkKKyAgICAgICAgICAgICAgICBtYWtlX3JlbGF0aXZlX3N5bWxpbmsoc3JjcGF0aCwgZHN0cGF0aCwgZCkKKyAgICAgICAgYmIuZGVidWcoMiwgIlByZXBhcmluZyB0cmVlICVzIGZvciBwYWNrYWdpbmcgYXQgJXMiICUgKHN0YXRlWzFdLCBzc3RhdGVidWlsZCArIHN0YXRlWzBdKSkKKyAgICAgICAgb2UucGF0aC5jb3B5aGFyZGxpbmt0cmVlKHN0YXRlWzFdLCBzc3RhdGVidWlsZCArIHN0YXRlWzBdKQorCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBmb3IgcGxhaW4gaW4gc3NbJ3BsYWluZGlycyddOgorICAgICAgICBwZGlyID0gcGxhaW4ucmVwbGFjZSh3b3JrZGlyLCBzc3RhdGVidWlsZCkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHBsYWluKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocGRpcikKKyAgICAgICAgb2UucGF0aC5jb3B5aGFyZGxpbmt0cmVlKHBsYWluLCBwZGlyKQorCisgICAgZC5zZXRWYXIoJ1NTVEFURV9CVUlMRERJUicsIHNzdGF0ZWJ1aWxkKQorICAgIGQuc2V0VmFyKCdTU1RBVEVfUEtHJywgc3N0YXRlcGtnKQorCisgICAgZm9yIGYgaW4gKGQuZ2V0VmFyKCdTU1RBVEVDUkVBVEVGVU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpICsgWydzc3RhdGVfY3JlYXRlX3BhY2thZ2UnXSArIFwKKyAgICAgICAgICAgICAoZC5nZXRWYXIoJ1NTVEFURVBPU1RDUkVBVEVGVU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoZiwgZCkKKyAgCisgICAgYmIuc2lnZ2VuLmR1bXBfdGhpc190YXNrKHNzdGF0ZXBrZyArICIuc2lnaW5mbyIsIGQpCisKKyAgICByZXR1cm4KKworZGVmIHBzdGFnaW5nX2ZldGNoKHNzdGF0ZWZldGNoLCBzc3RhdGVwa2csIGQpOgorICAgIGltcG9ydCBiYi5mZXRjaDIKKworICAgICMgT25seSB0cnkgYW5kIGZldGNoIGlmIHRoZSB1c2VyIGhhcyBjb25maWd1cmVkIGEgbWlycm9yCisgICAgbWlycm9ycyA9IGQuZ2V0VmFyKCdTU1RBVEVfTUlSUk9SUycsIFRydWUpCisgICAgaWYgbm90IG1pcnJvcnM6CisgICAgICAgIHJldHVybgorCisgICAgIyBDb3B5IHRoZSBkYXRhIG9iamVjdCBhbmQgb3ZlcnJpZGUgRExfRElSIGFuZCBTUkNfVVJJCisgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICBkbGRpciA9IGxvY2FsZGF0YS5leHBhbmQoIiR7U1NUQVRFX0RJUn0iKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihkbGRpcikKKworICAgIGxvY2FsZGF0YS5kZWxWYXIoJ01JUlJPUlMnKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0ZJTEVTUEFUSCcsIGRsZGlyKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0RMX0RJUicsIGRsZGlyKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BSRU1JUlJPUlMnLCBtaXJyb3JzKQorCisgICAgIyBpZiBCQl9OT19ORVRXT1JLIGlzIHNldCBidXQgd2UgYWxzbyBoYXZlIFNTVEFURV9NSVJST1JfQUxMT1dfTkVUV09SSywKKyAgICAjIHdlJ2xsIHdhbnQgdG8gYWxsb3cgbmV0d29yayBhY2Nlc3MgZm9yIHRoZSBjdXJyZW50IHNldCBvZiBmZXRjaGVzLgorICAgIGlmIGxvY2FsZGF0YS5nZXRWYXIoJ0JCX05PX05FVFdPUksnLCBUcnVlKSA9PSAiMSIgYW5kIGxvY2FsZGF0YS5nZXRWYXIoJ1NTVEFURV9NSVJST1JfQUxMT1dfTkVUV09SSycsIFRydWUpID09ICIxIjoKKyAgICAgICAgbG9jYWxkYXRhLmRlbFZhcignQkJfTk9fTkVUV09SSycpCisKKyAgICAjIFRyeSBhIGZldGNoIGZyb20gdGhlIHNzdGF0ZSBtaXJyb3IsIGlmIGl0IGZhaWxzIGp1c3QgcmV0dXJuIGFuZAorICAgICMgd2Ugd2lsbCBidWlsZCB0aGUgcGFja2FnZQorICAgIHVyaXMgPSBbJ2ZpbGU6Ly97MH0nLmZvcm1hdChzc3RhdGVmZXRjaCksCisgICAgICAgICAgICAnZmlsZTovL3swfS5zaWdpbmZvJy5mb3JtYXQoc3N0YXRlZmV0Y2gpXQorICAgIGlmIGJiLnV0aWxzLnRvX2Jvb2xlYW4oZC5nZXRWYXIoIlNTVEFURV9WRVJJRllfU0lHIiwgVHJ1ZSksIEZhbHNlKToKKyAgICAgICAgdXJpcyArPSBbJ2ZpbGU6Ly97MH0uc2lnJy5mb3JtYXQoc3N0YXRlZmV0Y2gpXQorCisgICAgZm9yIHNyY3VyaSBpbiB1cmlzOgorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdTUkNfVVJJJywgc3JjdXJpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2gyLkZldGNoKFtzcmN1cmldLCBsb2NhbGRhdGEsIGNhY2hlPUZhbHNlKQorICAgICAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisKKyAgICAgICAgICAgICMgTmVlZCB0byBvcHRpbWlzZSB0aGlzLCBpZiB1c2luZyBmaWxlOi8vIHVybHMsIHRoZSBmZXRjaGVyIGp1c3QgY2hhbmdlcyB0aGUgbG9jYWwgcGF0aAorICAgICAgICAgICAgIyBGb3Igbm93IHdvcmsgYXJvdW5kIGJ5IHN5bWxpbmtpbmcKKyAgICAgICAgICAgIGxvY2FscGF0aCA9IGJiLmRhdGEuZXhwYW5kKGZldGNoZXIubG9jYWxwYXRoKHNyY3VyaSksIGxvY2FsZGF0YSkKKyAgICAgICAgICAgIGlmIGxvY2FscGF0aCAhPSBzc3RhdGVwa2cgYW5kIG9zLnBhdGguZXhpc3RzKGxvY2FscGF0aCkgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyhzc3RhdGVwa2cpOgorICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsobG9jYWxwYXRoLCBzc3RhdGVwa2cpCisKKyAgICAgICAgZXhjZXB0IGJiLmZldGNoMi5CQkZldGNoRXhjZXB0aW9uOgorICAgICAgICAgICAgYnJlYWsKKworZGVmIHNzdGF0ZV9zZXRzY2VuZShkKToKKyAgICBzaGFyZWRfc3RhdGUgPSBzc3RhdGVfc3RhdGVfZnJvbXZhcnMoZCkKKyAgICBhY2NlbGVyYXRlID0gc3N0YXRlX2luc3RhbGxwa2coc2hhcmVkX3N0YXRlLCBkKQorICAgIGlmIG5vdCBhY2NlbGVyYXRlOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJObyBzdWl0YWJsZSBzdGFnaW5nIHBhY2thZ2UgZm91bmQiKQorCitweXRob24gc3N0YXRlX3Rhc2tfcHJlZnVuYyAoKSB7CisgICAgc2hhcmVkX3N0YXRlID0gc3N0YXRlX3N0YXRlX2Zyb212YXJzKGQpCisgICAgc3N0YXRlX2NsZWFuKHNoYXJlZF9zdGF0ZSwgZCkKK30KKworcHl0aG9uIHNzdGF0ZV90YXNrX3Bvc3RmdW5jICgpIHsKKyAgICBzaGFyZWRfc3RhdGUgPSBzc3RhdGVfc3RhdGVfZnJvbXZhcnMoZCkKKyAgICBzc3RhdGVfaW5zdGFsbChzaGFyZWRfc3RhdGUsIGQpCisgICAgZm9yIGludGVyY2VwdCBpbiBzaGFyZWRfc3RhdGVbJ2ludGVyY2VwdGZ1bmNzJ106CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhpbnRlcmNlcHQsIGQpCisgICAgb21hc2sgPSBvcy51bWFzaygwMDIpCisgICAgaWYgb21hc2sgIT0gMDAyOgorICAgICAgIGJiLm5vdGUoIlVzaW5nIHVtYXNrIDAwMiAobm90ICUwbykgZm9yIHNzdGF0ZSBwYWNrYWdpbmciICUgb21hc2spCisgICAgc3N0YXRlX3BhY2thZ2Uoc2hhcmVkX3N0YXRlLCBkKQorICAgIG9zLnVtYXNrKG9tYXNrKQorfQorICAKKworIworIyBTaGVsbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBhIHNzdGF0ZSBwYWNrYWdlIGZyb20gYSBkaXJlY3RvcnkKKyMgc2V0IGFzIFNTVEFURV9CVUlMRERJUi4gV2lsbCBiZSBydW4gZnJvbSB3aXRoaW4gU1NUQVRFX0JVSUxERElSLgorIworc3N0YXRlX2NyZWF0ZV9wYWNrYWdlICgpIHsKKwlURklMRT1gbWt0ZW1wICR7U1NUQVRFX1BLR30uWFhYWFhYWFhgCisJIyBOZWVkIHRvIGhhbmRsZSBlbXB0eSBkaXJlY3RvcmllcworCWlmIFsgIiQobHMgLUEpIiBdOyB0aGVuCisJCXNldCArZQorCQl0YXIgLWN6ZiAkVEZJTEUgKgorCQlyZXQ9JD8KKwkJaWYgWyAkcmV0IC1uZSAwIF0gJiYgWyAkcmV0IC1uZSAxIF07IHRoZW4KKwkJCWV4aXQgMQorCQlmaQorCQlzZXQgLWUKKwllbHNlCisJCXRhciAtY3ogLS1maWxlPSRURklMRSAtLWZpbGVzLWZyb209L2Rldi9udWxsCisJZmkKKwljaG1vZCAwNjY0ICRURklMRSAKKwltdiAtZiAkVEZJTEUgJHtTU1RBVEVfUEtHfQorCisJaWYgWyAtbiAiJHtTU1RBVEVfU0lHX0tFWX0iIF07IHRoZW4KKwkJcm0gLWYgJHtTU1RBVEVfUEtHfS5zaWcKKwkJZWNobyAke1NTVEFURV9TSUdfUEFTU1BIUkFTRX0gfCBncGcgLS1iYXRjaCAtLXBhc3NwaHJhc2UtZmQgMCAtLWRldGFjaC1zaWduIC0tbG9jYWwtdXNlciAke1NTVEFURV9TSUdfS0VZfSAtLW91dHB1dCAke1NTVEFURV9QS0d9LnNpZyAke1NTVEFURV9QS0d9CisJZmkKKworCWNkICR7V09SS0RJUn0KKwlybSAtcmYgJHtTU1RBVEVfQlVJTERESVJ9Cit9CisKKyMKKyMgU2hlbGwgZnVuY3Rpb24gdG8gZGVjb21wcmVzcyBhbmQgcHJlcGFyZSBhIHBhY2thZ2UgZm9yIGluc3RhbGxhdGlvbgorIyBXaWxsIGJlIHJ1biBmcm9tIHdpdGhpbiBTU1RBVEVfSU5TVERJUi4KKyMKK3NzdGF0ZV91bnBhY2tfcGFja2FnZSAoKSB7CisJdGFyIC14bXZ6ZiAke1NTVEFURV9QS0d9CisJIyBVc2UgIiEgLXcgfHwiIHRvIHJldHVybiB0cnVlIGZvciByZWFkIG9ubHkgZmlsZXMKKwlbICEgLXcgJHtTU1RBVEVfUEtHfSBdIHx8IHRvdWNoIC0tbm8tZGVyZWZlcmVuY2UgJHtTU1RBVEVfUEtHfQorfQorCitCQl9IQVNIQ0hFQ0tfRlVOQ1RJT04gPSAic3N0YXRlX2NoZWNraGFzaGVzIgorCitkZWYgc3N0YXRlX2NoZWNraGFzaGVzKHNxX2ZuLCBzcV90YXNrLCBzcV9oYXNoLCBzcV9oYXNoZm4sIGQsIHNpZ2luZm89RmFsc2UpOgorCisgICAgcmV0ID0gW10KKyAgICBtaXNzZWQgPSBbXQorICAgIGV4dGVuc2lvbiA9ICIudGd6IgorICAgIGlmIHNpZ2luZm86CisgICAgICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbiArICIuc2lnaW5mbyIKKworICAgIGRlZiBnZXRwYXRoY29tcG9uZW50cyh0YXNrLCBkKToKKyAgICAgICAgIyBNYWdpYyBkYXRhIGZyb20gQkJfSEFTSEZJTEVOQU1FCisgICAgICAgIHNwbGl0aGFzaGZuID0gc3FfaGFzaGZuW3Rhc2tdLnNwbGl0KCIgIikKKyAgICAgICAgc3BlYyA9IHNwbGl0aGFzaGZuWzFdCisgICAgICAgIGV4dHJhcGF0aCA9IHNwbGl0aGFzaGZuWzBdCisKKyAgICAgICAgdG5hbWUgPSBzcV90YXNrW3Rhc2tdWzM6XQorCisgICAgICAgIGlmIHRuYW1lIGluIFsiZmV0Y2giLCAidW5wYWNrIiwgInBhdGNoIiwgInBvcHVsYXRlX2xpYyIsICJwcmVjb25maWd1cmUiXSBhbmQgc3BsaXRoYXNoZm5bMl06CisgICAgICAgICAgICBzcGVjID0gc3BsaXRoYXNoZm5bMl0KKyAgICAgICAgICAgIGV4dHJhcGF0aCA9ICIiCisKKyAgICAgICAgcmV0dXJuIHNwZWMsIGV4dHJhcGF0aCwgdG5hbWUKKworCisgICAgZm9yIHRhc2sgaW4gcmFuZ2UobGVuKHNxX2ZuKSk6CisKKyAgICAgICAgc3BlYywgZXh0cmFwYXRoLCB0bmFtZSA9IGdldHBhdGhjb21wb25lbnRzKHRhc2ssIGQpCisKKyAgICAgICAgc3N0YXRlZmlsZSA9IGQuZXhwYW5kKCIke1NTVEFURV9ESVJ9LyIgKyBleHRyYXBhdGggKyBnZW5lcmF0ZV9zc3RhdGVmbihzcGVjLCBzcV9oYXNoW3Rhc2tdLCBkKSArICJfIiArIHRuYW1lICsgZXh0ZW5zaW9uKQorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNzdGF0ZWZpbGUpOgorICAgICAgICAgICAgYmIuZGVidWcoMiwgIlNTdGF0ZTogRm91bmQgdmFsaWQgc3N0YXRlIGZpbGUgJXMiICUgc3N0YXRlZmlsZSkKKyAgICAgICAgICAgIHJldC5hcHBlbmQodGFzaykKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtaXNzZWQuYXBwZW5kKHRhc2spCisgICAgICAgICAgICBiYi5kZWJ1ZygyLCAiU1N0YXRlOiBMb29rZWQgZm9yIGJ1dCBkaWRuJ3QgZmluZCBmaWxlICVzIiAlIHNzdGF0ZWZpbGUpCisKKyAgICBtaXJyb3JzID0gZC5nZXRWYXIoIlNTVEFURV9NSVJST1JTIiwgVHJ1ZSkKKyAgICBpZiBtaXJyb3JzOgorICAgICAgICAjIENvcHkgdGhlIGRhdGEgb2JqZWN0IGFuZCBvdmVycmlkZSBETF9ESVIgYW5kIFNSQ19VUkkKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGRsZGlyID0gbG9jYWxkYXRhLmV4cGFuZCgiJHtTU1RBVEVfRElSfSIpCisgICAgICAgIGxvY2FsZGF0YS5kZWxWYXIoJ01JUlJPUlMnKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdGSUxFU1BBVEgnLCBkbGRpcikKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignRExfRElSJywgZGxkaXIpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BSRU1JUlJPUlMnLCBtaXJyb3JzKQorCisgICAgICAgIGJiLmRlYnVnKDIsICJTU3RhdGUgdXNpbmcgcHJlbWlycm9yIG9mOiAlcyIgJSBtaXJyb3JzKQorCisgICAgICAgICMgaWYgQkJfTk9fTkVUV09SSyBpcyBzZXQgYnV0IHdlIGFsc28gaGF2ZSBTU1RBVEVfTUlSUk9SX0FMTE9XX05FVFdPUkssCisgICAgICAgICMgd2UnbGwgd2FudCB0byBhbGxvdyBuZXR3b3JrIGFjY2VzcyBmb3IgdGhlIGN1cnJlbnQgc2V0IG9mIGZldGNoZXMuCisgICAgICAgIGlmIGxvY2FsZGF0YS5nZXRWYXIoJ0JCX05PX05FVFdPUksnLCBUcnVlKSA9PSAiMSIgYW5kIGxvY2FsZGF0YS5nZXRWYXIoJ1NTVEFURV9NSVJST1JfQUxMT1dfTkVUV09SSycsIFRydWUpID09ICIxIjoKKyAgICAgICAgICAgIGxvY2FsZGF0YS5kZWxWYXIoJ0JCX05PX05FVFdPUksnKQorCisgICAgICAgIGZyb20gYmIuZmV0Y2gyIGltcG9ydCBGZXRjaENvbm5lY3Rpb25DYWNoZQorICAgICAgICBkZWYgY2hlY2tzdGF0dXNfaW5pdCh0aHJlYWRfd29ya2VyKToKKyAgICAgICAgICAgIHRocmVhZF93b3JrZXIuY29ubmVjdGlvbl9jYWNoZSA9IEZldGNoQ29ubmVjdGlvbkNhY2hlKCkKKworICAgICAgICBkZWYgY2hlY2tzdGF0dXNfZW5kKHRocmVhZF93b3JrZXIpOgorICAgICAgICAgICAgdGhyZWFkX3dvcmtlci5jb25uZWN0aW9uX2NhY2hlLmNsb3NlX2Nvbm5lY3Rpb25zKCkKKworICAgICAgICBkZWYgY2hlY2tzdGF0dXModGhyZWFkX3dvcmtlciwgYXJnKToKKyAgICAgICAgICAgICh0YXNrLCBzc3RhdGVmaWxlKSA9IGFyZworCisgICAgICAgICAgICBsb2NhbGRhdGEyID0gYmIuZGF0YS5jcmVhdGVDb3B5KGxvY2FsZGF0YSkKKyAgICAgICAgICAgIHNyY3VyaSA9ICJmaWxlOi8vIiArIHNzdGF0ZWZpbGUKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1NSQ19VUkknLCBzcmN1cmkpCisgICAgICAgICAgICBiYi5kZWJ1ZygyLCAiU1N0YXRlOiBBdHRlbXB0aW5nIHRvIGZldGNoICVzIiAlIHNyY3VyaSkKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goc3JjdXJpLnNwbGl0KCksIGxvY2FsZGF0YTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbl9jYWNoZT10aHJlYWRfd29ya2VyLmNvbm5lY3Rpb25fY2FjaGUpCisgICAgICAgICAgICAgICAgZmV0Y2hlci5jaGVja3N0YXR1cygpCisgICAgICAgICAgICAgICAgYmIuZGVidWcoMiwgIlNTdGF0ZTogU3VjY2Vzc2Z1bCBmZXRjaCB0ZXN0IGZvciAlcyIgJSBzcmN1cmkpCisgICAgICAgICAgICAgICAgcmV0LmFwcGVuZCh0YXNrKQorICAgICAgICAgICAgICAgIGlmIHRhc2sgaW4gbWlzc2VkOgorICAgICAgICAgICAgICAgICAgICBtaXNzZWQucmVtb3ZlKHRhc2spCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgbWlzc2VkLmFwcGVuZCh0YXNrKQorICAgICAgICAgICAgICAgIGJiLmRlYnVnKDIsICJTU3RhdGU6IFVuc3VjY2Vzc2Z1bCBmZXRjaCB0ZXN0IGZvciAlcyIgJSBzcmN1cmkpCisgICAgICAgICAgICAgICAgcGFzcyAgICAgCisKKyAgICAgICAgdGFza2xpc3QgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiByYW5nZShsZW4oc3FfZm4pKToKKyAgICAgICAgICAgIGlmIHRhc2sgaW4gcmV0OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzcGVjLCBleHRyYXBhdGgsIHRuYW1lID0gZ2V0cGF0aGNvbXBvbmVudHModGFzaywgZCkKKyAgICAgICAgICAgIHNzdGF0ZWZpbGUgPSBkLmV4cGFuZChleHRyYXBhdGggKyBnZW5lcmF0ZV9zc3RhdGVmbihzcGVjLCBzcV9oYXNoW3Rhc2tdLCBkKSArICJfIiArIHRuYW1lICsgZXh0ZW5zaW9uKQorICAgICAgICAgICAgdGFza2xpc3QuYXBwZW5kKCh0YXNrLCBzc3RhdGVmaWxlKSkKKworICAgICAgICBpZiB0YXNrbGlzdDoKKyAgICAgICAgICAgIGJiLm5vdGUoIkNoZWNraW5nIHNzdGF0ZSBtaXJyb3Igb2JqZWN0IGF2YWlsYWJpbGl0eSAoZm9yICVzIG9iamVjdHMpIiAlIGxlbih0YXNrbGlzdCkpCisgICAgICAgICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCisgICAgICAgICAgICBucHJvYyA9IG1pbihtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50KCksIGxlbih0YXNrbGlzdCkpCisKKyAgICAgICAgICAgIHBvb2wgPSBvZS51dGlscy5UaHJlYWRlZFBvb2wobnByb2MsIGxlbih0YXNrbGlzdCksCisgICAgICAgICAgICAgICAgICAgIHdvcmtlcl9pbml0PWNoZWNrc3RhdHVzX2luaXQsIHdvcmtlcl9lbmQ9Y2hlY2tzdGF0dXNfZW5kKQorICAgICAgICAgICAgZm9yIHQgaW4gdGFza2xpc3Q6CisgICAgICAgICAgICAgICAgcG9vbC5hZGRfdGFzayhjaGVja3N0YXR1cywgdCkKKyAgICAgICAgICAgIHBvb2wuc3RhcnQoKQorICAgICAgICAgICAgcG9vbC53YWl0X2NvbXBsZXRpb24oKQorCisgICAgaW5oZXJpdGxpc3QgPSBkLmdldFZhcigiSU5IRVJJVCIsIFRydWUpCisgICAgaWYgInRvYXN0ZXIiIGluIGluaGVyaXRsaXN0OgorICAgICAgICBldmRhdGEgPSB7J21pc3NlZCc6IFtdLCAnZm91bmQnOiBbXX07CisgICAgICAgIGZvciB0YXNrIGluIG1pc3NlZDoKKyAgICAgICAgICAgIHNwZWMsIGV4dHJhcGF0aCwgdG5hbWUgPSBnZXRwYXRoY29tcG9uZW50cyh0YXNrLCBkKQorICAgICAgICAgICAgc3N0YXRlZmlsZSA9IGQuZXhwYW5kKGV4dHJhcGF0aCArIGdlbmVyYXRlX3NzdGF0ZWZuKHNwZWMsIHNxX2hhc2hbdGFza10sIGQpICsgIl8iICsgdG5hbWUgKyAiLnRneiIpCisgICAgICAgICAgICBldmRhdGFbJ21pc3NlZCddLmFwcGVuZCggKHNxX2ZuW3Rhc2tdLCBzcV90YXNrW3Rhc2tdLCBzcV9oYXNoW3Rhc2tdLCBzc3RhdGVmaWxlICkgKQorICAgICAgICBmb3IgdGFzayBpbiByZXQ6CisgICAgICAgICAgICBzcGVjLCBleHRyYXBhdGgsIHRuYW1lID0gZ2V0cGF0aGNvbXBvbmVudHModGFzaywgZCkKKyAgICAgICAgICAgIHNzdGF0ZWZpbGUgPSBkLmV4cGFuZChleHRyYXBhdGggKyBnZW5lcmF0ZV9zc3RhdGVmbihzcGVjLCBzcV9oYXNoW3Rhc2tdLCBkKSArICJfIiArIHRuYW1lICsgIi50Z3oiKQorICAgICAgICAgICAgZXZkYXRhWydmb3VuZCddLmFwcGVuZCggKHNxX2ZuW3Rhc2tdLCBzcV90YXNrW3Rhc2tdLCBzcV9oYXNoW3Rhc2tdLCBzc3RhdGVmaWxlICkgKQorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk1ldGFkYXRhRXZlbnQoIk1pc3NlZFNzdGF0ZSIsIGV2ZGF0YSksIGQpCisKKyAgICBpZiBoYXNhdHRyKGJiLnBhcnNlLnNpZ2dlbiwgImNoZWNraGFzaGVzIik6CisgICAgICAgIGJiLnBhcnNlLnNpZ2dlbi5jaGVja2hhc2hlcyhtaXNzZWQsIHJldCwgc3FfZm4sIHNxX3Rhc2ssIHNxX2hhc2gsIHNxX2hhc2hmbiwgZCkKKworICAgIHJldHVybiByZXQKKworQkJfU0VUU0NFTkVfREVQVkFMSUQgPSAic2V0c2NlbmVfZGVwdmFsaWQiCisKK2RlZiBzZXRzY2VuZV9kZXB2YWxpZCh0YXNrLCB0YXNrZGVwZW5kZWVzLCBub3RuZWVkZWQsIGQpOgorICAgICMgdGFza2RlcGVuZGVlcyBpcyBhIGRpY3Qgb2YgdGFza3Mgd2hpY2ggZGVwZW5kIG9uIHRhc2ssIGVhY2ggYmVpbmcgYSAzIGl0ZW0gbGlzdCBvZiBbUE4sIFRBU0tOQU1FLCBGSUxFTkFNRV0KKyAgICAjIHRhc2sgaXMgaW5jbHVkZWQgaW4gdGFza2RlcGVuZGVlcyB0b28KKworICAgIGJiLmRlYnVnKDIsICJDb25zaWRlcmluZyBzZXRzY2VuZSB0YXNrOiAlcyIgJSAoc3RyKHRhc2tkZXBlbmRlZXNbdGFza10pKSkKKworICAgIGRlZiBpc05hdGl2ZUNyb3NzKHgpOgorICAgICAgICByZXR1cm4geC5lbmRzd2l0aCgiLW5hdGl2ZSIpIG9yICItY3Jvc3MtIiBpbiB4IG9yICItY3Jvc3NzZGsiIGluIHgKKworICAgIGRlZiBpc1Bvc3RJbnN0RGVwKHgpOgorICAgICAgICBpZiB4IGluIFsicWVtdS1uYXRpdmUiLCAiZ2RrLXBpeGJ1Zi1uYXRpdmUiLCAicWVtdXdyYXBwZXItY3Jvc3MiLCAiZGVwbW9kd3JhcHBlci1jcm9zcyIsICJzeXN0ZW1kLXN5c3RlbWN0bC1uYXRpdmUiLCAiZ3RrLWljb24tdXRpbHMtbmF0aXZlIl06CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICMgV2Ugb25seSBuZWVkIHRvIHRyaWdnZXIgcG9wdWxhdGVfbGljIHRocm91Z2ggZGlyZWN0IGRlcGVuZGVuY2llcworICAgIGlmIHRhc2tkZXBlbmRlZXNbdGFza11bMV0gPT0gImRvX3BvcHVsYXRlX2xpYyI6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBmb3IgZGVwIGluIHRhc2tkZXBlbmRlZXM6CisgICAgICAgIGJiLmRlYnVnKDIsICIgIGNvbnNpZGVyaW5nIGRlcGVuZGVuY3k6ICVzIiAlIChzdHIodGFza2RlcGVuZGVlc1tkZXBdKSkpCisgICAgICAgIGlmIHRhc2sgPT0gZGVwOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgZGVwIGluIG5vdG5lZWRlZDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMgZG9fcGFja2FnZV93cml0ZV8qIGFuZCBkb19wYWNrYWdlIGRvZXNuJ3QgbmVlZCBkb19wYWNrYWdlCisgICAgICAgIGlmIHRhc2tkZXBlbmRlZXNbdGFza11bMV0gPT0gImRvX3BhY2thZ2UiIGFuZCB0YXNrZGVwZW5kZWVzW2RlcF1bMV0gaW4gWydkb19wYWNrYWdlJywgJ2RvX3BhY2thZ2Vfd3JpdGVfZGViJywgJ2RvX3BhY2thZ2Vfd3JpdGVfaXBrJywgJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJywgJ2RvX3BhY2thZ2VkYXRhJywgJ2RvX3BhY2thZ2VfcWEnXToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMgZG9fcGFja2FnZV93cml0ZV8qIGFuZCBkb19wYWNrYWdlIGRvZXNuJ3QgbmVlZCBkb19wb3B1bGF0ZV9zeXNyb290LCB1bmxlc3MgaXMgYSBwb3N0aW5zdGFsbCBkZXBlbmRlbmN5CisgICAgICAgIGlmIHRhc2tkZXBlbmRlZXNbdGFza11bMV0gPT0gImRvX3BvcHVsYXRlX3N5c3Jvb3QiIGFuZCB0YXNrZGVwZW5kZWVzW2RlcF1bMV0gaW4gWydkb19wYWNrYWdlJywgJ2RvX3BhY2thZ2Vfd3JpdGVfZGViJywgJ2RvX3BhY2thZ2Vfd3JpdGVfaXBrJywgJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJywgJ2RvX3BhY2thZ2VkYXRhJywgJ2RvX3BhY2thZ2VfcWEnXToKKyAgICAgICAgICAgIGlmIGlzUG9zdEluc3REZXAodGFza2RlcGVuZGVlc1t0YXNrXVswXSkgYW5kIHRhc2tkZXBlbmRlZXNbZGVwXVsxXSBpbiBbJ2RvX3BhY2thZ2Vfd3JpdGVfZGViJywgJ2RvX3BhY2thZ2Vfd3JpdGVfaXBrJywgJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJ106CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAjIE5hdGl2ZS9Dcm9zcyBwYWNrYWdlcyBkb24ndCBleGlzdCBhbmQgYXJlIG5vZXhlYyBhbnl3YXkKKyAgICAgICAgaWYgaXNOYXRpdmVDcm9zcyh0YXNrZGVwZW5kZWVzW2RlcF1bMF0pIGFuZCB0YXNrZGVwZW5kZWVzW2RlcF1bMV0gaW4gWydkb19wYWNrYWdlX3dyaXRlX2RlYicsICdkb19wYWNrYWdlX3dyaXRlX2lwaycsICdkb19wYWNrYWdlX3dyaXRlX3JwbScsICdkb19wYWNrYWdlZGF0YScsICdkb19wYWNrYWdlJywgJ2RvX3BhY2thZ2VfcWEnXToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgIyBDb25zaWRlciBzeXNyb290IGRlcGVuZGluZyBvbiBzeXNyb290IHRhc2tzCisgICAgICAgIGlmIHRhc2tkZXBlbmRlZXNbdGFza11bMV0gPT0gJ2RvX3BvcHVsYXRlX3N5c3Jvb3QnIGFuZCB0YXNrZGVwZW5kZWVzW2RlcF1bMV0gPT0gJ2RvX3BvcHVsYXRlX3N5c3Jvb3QnOgorICAgICAgICAgICAgIyBiYXNlLXBhc3N3ZC9zaGFkb3ctc3lzcm9vdCBkb24ndCBuZWVkIHRoZWlyIGRlcGVuZGVuY2llcworICAgICAgICAgICAgaWYgdGFza2RlcGVuZGVlc1tkZXBdWzBdLmVuZHN3aXRoKCgiYmFzZS1wYXNzd2QiLCAic2hhZG93LXN5c3Jvb3QiKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICMgTm90aGluZyBuZWVkIGRlcGVuZCBvbiBsaWJjLWluaXRpYWwvZ2NjLWNyb3NzLWluaXRpYWwKKyAgICAgICAgICAgIGlmICItaW5pdGlhbCIgaW4gdGFza2RlcGVuZGVlc1t0YXNrXVswXToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgIyBOYXRpdmUvQ3Jvc3MgcG9wdWxhdGVfc3lzcm9vdCBuZWVkIHRoZWlyIGRlcGVuZGVuY2llcworICAgICAgICAgICAgaWYgaXNOYXRpdmVDcm9zcyh0YXNrZGVwZW5kZWVzW3Rhc2tdWzBdKSBhbmQgaXNOYXRpdmVDcm9zcyh0YXNrZGVwZW5kZWVzW2RlcF1bMF0pOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgIyBUYXJnZXQgcG9wdWxhdGVfc3lzcm9vdCBkZXBlbmRlZCBvbiBieSBjcm9zcyB0b29scyBuZWVkIHRvIGJlIGluc3RhbGxlZAorICAgICAgICAgICAgaWYgaXNOYXRpdmVDcm9zcyh0YXNrZGVwZW5kZWVzW2RlcF1bMF0pOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgIyBOYXRpdmUvY3Jvc3MgdG9vbHMgZGVwZW5kZWQgdXBvbiBieSB0YXJnZXQgc3lzcm9vdCBhcmUgbm90IG5lZWRlZAorICAgICAgICAgICAgaWYgaXNOYXRpdmVDcm9zcyh0YXNrZGVwZW5kZWVzW3Rhc2tdWzBdKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgIyBUYXJnZXQgcG9wdWxhdGVfc3lzcm9vdCBuZWVkIHRoZWlyIGRlcGVuZGVuY2llcworICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgdGFza2RlcGVuZGVlc1t0YXNrXVsxXSA9PSAnZG9fc2hhcmVkX3dvcmtkaXInOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAjIFRoaXMgaXMgZHVlIHRvIHRoZSBbZGVwZW5kc10gaW4gdXNlcmFkZC5iYmNsYXNzIGNvbXBsaWNhdGluZyBtYXR0ZXJzCisgICAgICAgICMgVGhlIGxvZ2ljICppcyogcmV2ZXJzZWQgaGVyZSBkdWUgdG8gdGhlIHdheSBoYXJkIHNldHNjZW5lIGRlcGVuZGVuY2llcyBhcmUgaW5qZWN0ZWQKKyAgICAgICAgaWYgdGFza2RlcGVuZGVlc1t0YXNrXVsxXSA9PSAnZG9fcGFja2FnZScgYW5kIHRhc2tkZXBlbmRlZXNbZGVwXVswXS5lbmRzd2l0aCgoJ3NoYWRvdy1uYXRpdmUnLCAnc2hhZG93LXN5c3Jvb3QnLCAnYmFzZS1wYXNzd2QnLCAncHNldWRvLW5hdGl2ZScpKSBhbmQgdGFza2RlcGVuZGVlc1tkZXBdWzFdID09ICdkb19wb3B1bGF0ZV9zeXNyb290JzoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgIyBTYWZlIGZhbGx0aHJvdWdoIGRlZmF1bHQKKyAgICAgICAgYmIuZGVidWcoMiwgIiBEZWZhdWx0IHNldHNjZW5lIGRlcGVuZGVuY3kgZmFsbCB0aHJvdWdoIGR1ZSB0byBkZXBlbmRlbmN5OiAlcyIgJSAoc3RyKHRhc2tkZXBlbmRlZXNbZGVwXSkpKQorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gVHJ1ZQorCithZGRoYW5kbGVyIHNzdGF0ZV9ldmVudGhhbmRsZXIKK3NzdGF0ZV9ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5idWlsZC5UYXNrU3VjY2VlZGVkIgorcHl0aG9uIHNzdGF0ZV9ldmVudGhhbmRsZXIoKSB7CisgICAgZCA9IGUuZGF0YQorICAgICMgV2hlbiB3ZSB3cml0ZSBhbiBzc3RhdGUgcGFja2FnZSB3ZSByZXdyaXRlIHRoZSBTU1RBVEVfUEtHCisgICAgc3BrZyA9IGQuZ2V0VmFyKCdTU1RBVEVfUEtHJywgVHJ1ZSkKKyAgICBpZiBub3Qgc3BrZy5lbmRzd2l0aCgiLnRneiIpOgorICAgICAgICB0YXNrbmFtZSA9IGQuZ2V0VmFyKCJCQl9SVU5UQVNLIiwgVHJ1ZSlbMzpdCisgICAgICAgIHNwZWMgPSBkLmdldFZhcignU1NUQVRFX1BLR1NQRUMnLCBUcnVlKQorICAgICAgICBzd3NwZWMgPSBkLmdldFZhcignU1NUQVRFX1NXU1BFQycsIFRydWUpCisgICAgICAgIGlmIHRhc2tuYW1lIGluIFsiZmV0Y2giLCAidW5wYWNrIiwgInBhdGNoIiwgInBvcHVsYXRlX2xpYyIsICJwcmVjb25maWd1cmUiXSBhbmQgc3dzcGVjOgorICAgICAgICAgICAgZC5zZXRWYXIoIlNTVEFURV9QS0dTUEVDIiwgIiR7U1NUQVRFX1NXU1BFQ30iKQorICAgICAgICAgICAgZC5zZXRWYXIoIlNTVEFURV9FWFRSQVBBVEgiLCAiIikKKyAgICAgICAgc3N0YXRlcGtnID0gZC5nZXRWYXIoJ1NTVEFURV9QS0cnLCBUcnVlKQorICAgICAgICBiYi5zaWdnZW4uZHVtcF90aGlzX3Rhc2soc3N0YXRlcGtnICsgJ18nICsgdGFza25hbWUgKyAiLnRneiIgIi5zaWdpbmZvIiwgZCkKK30KKworU1NUQVRFX1BSVU5FX09CU09MRVRFV09SS0RJUiA9ICIxIgorCisjIEV2ZW50IGhhbmRsZXIgd2hpY2ggcmVtb3ZlcyBtYW5pZmVzdHMgYW5kIHN0YW1wcyBmaWxlIGZvcgorIyByZWNpcGVzIHdoaWNoIGFyZSBubyBsb25nZXIgcmVhY2hhYmxlIGluIGEgYnVpbGQgd2hlcmUgdGhleQorIyBvbmNlIHdlcmUuCisjIEFsc28gb3B0aW9uYWxseSByZW1vdmVzIHRoZSB3b3JrZGlyIG9mIHRob3NlIHRhc2tzL3JlY2lwZXMKKyMKK2FkZGhhbmRsZXIgc3N0YXRlX2V2ZW50aGFuZGxlcjIKK3NzdGF0ZV9ldmVudGhhbmRsZXIyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuUmVhY2hhYmxlU3RhbXBzIgorcHl0aG9uIHNzdGF0ZV9ldmVudGhhbmRsZXIyKCkgeworICAgIGltcG9ydCBnbG9iCisgICAgZCA9IGUuZGF0YQorICAgIHN0YW1wcyA9IGUuc3RhbXBzLnZhbHVlcygpCisgICAgcmVtb3Zld29ya2RpciA9IChkLmdldFZhcigiU1NUQVRFX1BSVU5FX09CU09MRVRFV09SS0RJUiIsIEZhbHNlKSA9PSAiMSIpCisgICAgc2VlbiA9IFtdCisgICAgZm9yIGEgaW4gZC5nZXRWYXIoIlNTVEFURV9BUkNIUyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIHRvcmVtb3ZlID0gW10KKyAgICAgICAgaSA9IGQuZXhwYW5kKCIke1NTVEFURV9NQU5JRkVTVFN9L2luZGV4LSIgKyBhKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoaSk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB3aXRoIG9wZW4oaSwgInIiKSBhcyBmOgorICAgICAgICAgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgICAgICAgICBmb3IgbCBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICAoc3RhbXAsIG1hbmlmZXN0LCB3b3JrZGlyKSA9IGwuc3BsaXQoKQorICAgICAgICAgICAgICAgIGlmIHN0YW1wIG5vdCBpbiBzdGFtcHM6CisgICAgICAgICAgICAgICAgICAgIHRvcmVtb3ZlLmFwcGVuZChsKQorICAgICAgICAgICAgICAgICAgICBpZiBzdGFtcCBub3QgaW4gc2VlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIlN0YW1wICVzIGlzIG5vdCByZWFjaGFibGUsIHJlbW92aW5nIHJlbGF0ZWQgbWFuaWZlc3RzIiAlIHN0YW1wKQorICAgICAgICAgICAgICAgICAgICAgICAgc2Vlbi5hcHBlbmQoc3RhbXApCisgICAgICAgIGZvciByIGluIHRvcmVtb3ZlOgorICAgICAgICAgICAgKHN0YW1wLCBtYW5pZmVzdCwgd29ya2RpcikgPSByLnNwbGl0KCkKKyAgICAgICAgICAgIGZvciBtIGluIGdsb2IuZ2xvYihtYW5pZmVzdCArICIuKiIpOgorICAgICAgICAgICAgICAgIHNzdGF0ZV9jbGVhbl9tYW5pZmVzdChtLCBkKQorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHN0YW1wICsgIioiKQorICAgICAgICAgICAgaWYgcmVtb3Zld29ya2RpcjoKKyAgICAgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUod29ya2RpciwgcmVjdXJzZSA9IFRydWUpCisgICAgICAgICAgICBsaW5lcy5yZW1vdmUocikKKyAgICAgICAgd2l0aCBvcGVuKGksICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgICAgIGYud3JpdGUobCkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3N0YWdpbmcuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3N0YWdpbmcuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjdlZGRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3RhZ2luZy5iYmNsYXNzCkBAIC0wLDAgKzEsMjE4IEBACisKK3N5c3Jvb3Rfc3RhZ2VfZGlyKCkgeworCXNyYz0iJDEiCisJZGVzdD0iJDIiCisJIyBpZiB0aGUgc3JjIGRvZXNuJ3QgZXhpc3QgZG9uJ3QgZG8gYW55dGhpbmcKKwlpZiBbICEgLWQgIiRzcmMiIF07IHRoZW4KKwkJIHJldHVybgorCWZpCisKKwlta2RpciAtcCAiJGRlc3QiCisJKAorCQljZCAkc3JjCisJCWZpbmQgLiAtcHJpbnQwIHwgY3BpbyAtLW51bGwgLXBkbHUgJGRlc3QKKwkpCit9CisKK3N5c3Jvb3Rfc3RhZ2VfbGliZGlyKCkgeworCXNyYz0iJDEiCisJZGVzdD0iJDIiCisKKwlzeXNyb290X3N0YWdlX2RpciAkc3JjICRkZXN0Cit9CisKK3N5c3Jvb3Rfc3RhZ2VfZGlycygpIHsKKwlmcm9tPSIkMSIKKwl0bz0iJDIiCisKKwlzeXNyb290X3N0YWdlX2RpciAkZnJvbSR7aW5jbHVkZWRpcn0gJHRvJHtpbmNsdWRlZGlyfQorCWlmIFsgIiR7QlVJTERfU1lTfSIgPSAiJHtIT1NUX1NZU30iIF07IHRoZW4KKwkJc3lzcm9vdF9zdGFnZV9kaXIgJGZyb20ke2JpbmRpcn0gJHRvJHtiaW5kaXJ9CisJCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtzYmluZGlyfSAkdG8ke3NiaW5kaXJ9CisJCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtiYXNlX2JpbmRpcn0gJHRvJHtiYXNlX2JpbmRpcn0KKwkJc3lzcm9vdF9zdGFnZV9kaXIgJGZyb20ke2Jhc2Vfc2JpbmRpcn0gJHRvJHtiYXNlX3NiaW5kaXJ9CisJCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtsaWJleGVjZGlyfSAkdG8ke2xpYmV4ZWNkaXJ9CisJCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtzeXNjb25mZGlyfSAkdG8ke3N5c2NvbmZkaXJ9CisJCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtsb2NhbHN0YXRlZGlyfSAkdG8ke2xvY2Fsc3RhdGVkaXJ9CisJZmkKKwlpZiBbIC1kICRmcm9tJHtsaWJkaXJ9IF0KKwl0aGVuCisJCXN5c3Jvb3Rfc3RhZ2VfbGliZGlyICRmcm9tJHtsaWJkaXJ9ICR0byR7bGliZGlyfQorCWZpCisJaWYgWyAtZCAkZnJvbSR7YmFzZV9saWJkaXJ9IF0KKwl0aGVuCisJCXN5c3Jvb3Rfc3RhZ2VfbGliZGlyICRmcm9tJHtiYXNlX2xpYmRpcn0gJHRvJHtiYXNlX2xpYmRpcn0KKwlmaQorCWlmIFsgLWQgJGZyb20ke25vbmFyY2hfYmFzZV9saWJkaXJ9IF0KKwl0aGVuCisJCXN5c3Jvb3Rfc3RhZ2VfbGliZGlyICRmcm9tJHtub25hcmNoX2Jhc2VfbGliZGlyfSAkdG8ke25vbmFyY2hfYmFzZV9saWJkaXJ9CisJZmkKKwlzeXNyb290X3N0YWdlX2RpciAkZnJvbSR7ZGF0YWRpcn0gJHRvJHtkYXRhZGlyfQorCSMgV2UgZG9uJ3QgY2FyZSBhYm91dCBkb2NzL2luZm8vbWFucGFnZXMvbG9jYWxlcworCXJtIC1yZiAkdG8ke21hbmRpcn0vICR0byR7ZG9jZGlyfS8gJHRvJHtpbmZvZGlyfS8gJHt0b30ke2RhdGFkaXJ9L2xvY2FsZS8KKwlybSAtcmYgJHRvJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvICR0byR7ZGF0YWRpcn0vZm9udHMvICR0byR7ZGF0YWRpcn0vcGl4bWFwcy8KK30KKworc3lzcm9vdF9zdGFnZV9hbGwoKSB7CisJc3lzcm9vdF9zdGFnZV9kaXJzICR7RH0gJHtTWVNST09UX0RFU1RESVJ9Cit9CisKK3B5dGhvbiBzeXNyb290X3N0cmlwICgpIHsKKyAgICBpbXBvcnQgc3RhdCwgZXJybm8KKworICAgIGR2YXIgPSBkLmdldFZhcignU1lTUk9PVF9ERVNURElSJywgVHJ1ZSkKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisKKyAgICBvcy5jaGRpcihkdmFyKQorCisgICAgIyBSZXR1cm4gdHlwZSAoYml0cyk6CisgICAgIyAwIC0gbm90IGVsZgorICAgICMgMSAtIEVMRgorICAgICMgMiAtIHN0cmlwcGVkCisgICAgIyA0IC0gZXhlY3V0YWJsZQorICAgICMgOCAtIHNoYXJlZCBsaWJyYXJ5CisgICAgIyAxNiAtIGtlcm5lbCBtb2R1bGUKKyAgICBkZWYgaXNFTEYocGF0aCk6CisgICAgICAgIHR5cGUgPSAwCisgICAgICAgIHJldCwgcmVzdWx0ID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCJmaWxlIFwiJXNcIiIgJSBwYXRoLnJlcGxhY2UoIlwiIiwgIlxcXCIiKSkKKworICAgICAgICBpZiByZXQ6CisgICAgICAgICAgICBiYi5lcnJvcigic3BsaXRfYW5kX3N0cmlwX2ZpbGVzOiAnZmlsZSAlcycgZmFpbGVkIiAlIHBhdGgpCisgICAgICAgICAgICByZXR1cm4gdHlwZQorCisgICAgICAgICMgTm90IHN0cmlwcGVkCisgICAgICAgIGlmICJFTEYiIGluIHJlc3VsdDoKKyAgICAgICAgICAgIHR5cGUgfD0gMQorICAgICAgICAgICAgaWYgIm5vdCBzdHJpcHBlZCIgbm90IGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICB0eXBlIHw9IDIKKyAgICAgICAgICAgIGlmICJleGVjdXRhYmxlIiBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgdHlwZSB8PSA0CisgICAgICAgICAgICBpZiAic2hhcmVkIiBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgdHlwZSB8PSA4CisgICAgICAgIHJldHVybiB0eXBlCisKKworICAgIGVsZmZpbGVzID0ge30KKyAgICBpbm9kZXMgPSB7fQorICAgIGxpYmRpciA9IG9zLnBhdGguYWJzcGF0aChkdmFyICsgb3Muc2VwICsgZC5nZXRWYXIoImxpYmRpciIsIFRydWUpKQorICAgIGJhc2VsaWJkaXIgPSBvcy5wYXRoLmFic3BhdGgoZHZhciArIG9zLnNlcCArIGQuZ2V0VmFyKCJiYXNlX2xpYmRpciIsIFRydWUpKQorICAgIGlmIChkLmdldFZhcignSU5ISUJJVF9TWVNST09UX1NUUklQJywgVHJ1ZSkgIT0gJzEnKToKKyAgICAgICAgIworICAgICAgICAjIEZpcnN0IGxldHMgZmlndXJlIG91dCBhbGwgb2YgdGhlIGZpbGVzIHdlIG1heSBoYXZlIHRvIHByb2Nlc3MKKyAgICAgICAgIworICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkdmFyKToKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGZpbGUgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZikKKworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbHRhcmdldCA9IG9lLnBhdGgucmVhbHBhdGgoZmlsZSwgZHZhciwgRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHMgPSBvcy5sc3RhdChsdGFyZ2V0KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIChlcnIsIHN0cmVycm9yKSA9IGUuYXJncworICAgICAgICAgICAgICAgICAgICBpZiBlcnIgIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgIyBTa2lwIGJyb2tlbiBzeW1saW5rcworICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIG5vdCBzOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICMgQ2hlY2sgaXRzIGFuIGV4Y3V0YWJsZQorICAgICAgICAgICAgICAgIGlmIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhVU1IpIG9yIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhHUlApIG9yIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhPVEgpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yICgoZmlsZS5zdGFydHN3aXRoKGxpYmRpcikgb3IgZmlsZS5zdGFydHN3aXRoKGJhc2VsaWJkaXIpKSBhbmQgIi5zbyIgaW4gZik6CisgICAgICAgICAgICAgICAgICAgICMgSWYgaXQncyBhIHN5bWxpbmssIGFuZCBwb2ludHMgdG8gYW4gRUxGIGZpbGUsIHdlIGNhcHR1cmUgdGhlIHJlYWRsaW5rIHRhcmdldAorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAgICAgIyBJdCdzIGEgZmlsZSAob3IgaGFyZGxpbmspLCBub3QgYSBsaW5rCisgICAgICAgICAgICAgICAgICAgICMgLi4uYnV0IGlzIGl0IEVMRiwgYW5kIGlzIGl0IGFscmVhZHkgc3RyaXBwZWQ/CisgICAgICAgICAgICAgICAgICAgIGVsZl9maWxlID0gaXNFTEYoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZWxmX2ZpbGUgJiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZWxmX2ZpbGUgJiAyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIkZpbGUgJyVzJyBmcm9tICVzIHdhcyBhbHJlYWR5IHN0cmlwcGVkLCB0aGlzIHdpbGwgcHJldmVudCBmdXR1cmUgZGVidWdnaW5nISIgJSAoZmlsZVtsZW4oZHZhcik6XSwgcG4pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHMuc3RfaW5vIGluIGlub2RlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5saW5rKGlub2Rlc1tzLnN0X2lub10sIGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlub2Rlc1tzLnN0X2lub10gPSBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBicmVhayBoYXJkbGluaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLmNvcHlmaWxlKGZpbGUsIGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxmZmlsZXNbZmlsZV0gPSBlbGZfZmlsZQorCisgICAgICAgICMKKyAgICAgICAgIyBOb3cgc3RyaXAgdGhlbSAoaW4gcGFyYWxsZWwpCisgICAgICAgICMKKyAgICAgICAgc3RyaXAgPSBkLmdldFZhcigiU1RSSVAiLCBUcnVlKQorICAgICAgICBzZmlsZXMgPSBbXQorICAgICAgICBmb3IgZmlsZSBpbiBlbGZmaWxlczoKKyAgICAgICAgICAgIGVsZl9maWxlID0gaW50KGVsZmZpbGVzW2ZpbGVdKQorICAgICAgICAgICAgI2JiLm5vdGUoIlN0cmlwICVzIiAlIGZpbGUpCisgICAgICAgICAgICBzZmlsZXMuYXBwZW5kKChmaWxlLCBlbGZfZmlsZSwgc3RyaXApKQorCisgICAgICAgIG9lLnV0aWxzLm11bHRpcHJvY2Vzc19leGVjKHNmaWxlcywgb2UucGFja2FnZS5ydW5zdHJpcCkKK30KKworZG9fcG9wdWxhdGVfc3lzcm9vdFtkaXJzXSA9ICIke1NZU1JPT1RfREVTVERJUn0iCitkb19wb3B1bGF0ZV9zeXNyb290W3VtYXNrXSA9ICIwMjIiCisKK2FkZHRhc2sgcG9wdWxhdGVfc3lzcm9vdCBhZnRlciBkb19pbnN0YWxsCisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyA/PSAiIgorU1lTUk9PVF9ERVNURElSID0gIiR7V09SS0RJUn0vc3lzcm9vdC1kZXN0ZGlyLyIKK1NZU1JPT1RfTE9DSyA9ICIke1NUQUdJTkdfRElSfS9zdGFnaW5nLmxvY2siCisKKyMgV2UgY2xlYW4gb3V0IGFueSBleGlzdGluZyBzc3RhdGUgZnJvbSB0aGUgc3lzcm9vdCBpZiB3ZSByZXJ1biBjb25maWd1cmUKK3B5dGhvbiBzeXNyb290X2NsZWFuc3N0YXRlICgpIHsKKyAgICBzcyA9IHNzdGF0ZV9zdGF0ZV9mcm9tdmFycyhkLCAicG9wdWxhdGVfc3lzcm9vdCIpCisgICAgc3N0YXRlX2NsZWFuKHNzLCBkKQorfQorZG9fY29uZmlndXJlW3ByZWZ1bmNzXSArPSAic3lzcm9vdF9jbGVhbnNzdGF0ZSIKKworCitCQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT04gPSAic3lzcm9vdF9jaGVja2hhc2hlcyIKKworZGVmIHN5c3Jvb3RfY2hlY2toYXNoZXMoY292ZXJlZCwgdGFza25hbWVzLCBmbmlkcywgZm5zLCBkLCBpbnZhbGlkdGFza3MgPSBOb25lKToKKyAgICBwcm9ibGVtcyA9IHNldCgpCisgICAgY29uZmlndXJlZm5pZHMgPSBzZXQoKQorICAgIGlmIG5vdCBpbnZhbGlkdGFza3M6CisgICAgICAgIGludmFsaWR0YXNrcyA9IHhyYW5nZShsZW4odGFza25hbWVzKSkKKyAgICBmb3IgdGFzayBpbiBpbnZhbGlkdGFza3M6CisgICAgICAgIGlmIHRhc2tuYW1lc1t0YXNrXSA9PSAiZG9fY29uZmlndXJlIiBhbmQgdGFzayBub3QgaW4gY292ZXJlZDoKKyAgICAgICAgICAgIGNvbmZpZ3VyZWZuaWRzLmFkZChmbmlkc1t0YXNrXSkKKyAgICBmb3IgdGFzayBpbiBjb3ZlcmVkOgorICAgICAgICBpZiB0YXNrbmFtZXNbdGFza10gPT0gImRvX3BvcHVsYXRlX3N5c3Jvb3QiIGFuZCBmbmlkc1t0YXNrXSBpbiBjb25maWd1cmVmbmlkczoKKyAgICAgICAgICAgIHByb2JsZW1zLmFkZCh0YXNrKQorICAgIHJldHVybiBwcm9ibGVtcworCitweXRob24gZG9fcG9wdWxhdGVfc3lzcm9vdCAoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJzeXNyb290X3N0YWdlX2FsbCIsIGQpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJzeXNyb290X3N0cmlwIiwgZCkKKyAgICBmb3IgZiBpbiAoZC5nZXRWYXIoJ1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoZiwgZCkKKyAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgbXVsdGlwcm92ID0gZC5nZXRWYXIoIk1VTFRJX1BST1ZJREVSX1dISVRFTElTVCIsIFRydWUpLnNwbGl0KCkKKyAgICBwcm92ZGlyID0gZC5leHBhbmQoIiR7U1lTUk9PVF9ERVNURElSfSR7YmFzZV9wcmVmaXh9L3N5c3Jvb3QtcHJvdmlkZXJzLyIpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKHByb3ZkaXIpCisgICAgZm9yIHAgaW4gZC5nZXRWYXIoIlBST1ZJREVTIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgaWYgcCBpbiBtdWx0aXByb3Y6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBwID0gcC5yZXBsYWNlKCIvIiwgIl8iKQorICAgICAgICB3aXRoIG9wZW4ocHJvdmRpciArIHAsICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUocG4pCit9CisKK2RvX3BvcHVsYXRlX3N5c3Jvb3RbdmFyZGVwc10gKz0gIiR7U1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTfSIKK2RvX3BvcHVsYXRlX3N5c3Jvb3RbdmFyZGVwc2V4Y2x1ZGVdICs9ICJNVUxUSV9QUk9WSURFUl9XSElURUxJU1QiCisKK1NTVEFURVRBU0tTICs9ICJkb19wb3B1bGF0ZV9zeXNyb290IgorZG9fcG9wdWxhdGVfc3lzcm9vdFtjbGVhbmRpcnNdID0gIiR7U1lTUk9PVF9ERVNURElSfSIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtTWVNST09UX0RFU1RESVJ9IgorZG9fcG9wdWxhdGVfc3lzcm9vdFtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtTVEFHSU5HX0RJUl9IT1NUfS8iCitkb19wb3B1bGF0ZV9zeXNyb290W3N0YW1wLWV4dHJhLWluZm9dID0gIiR7TUFDSElORX0iCisKK3B5dGhvbiBkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lICgpIHsKKyAgICBzc3RhdGVfc2V0c2NlbmUoZCkKK30KK2FkZHRhc2sgZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZQorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3N5c2xpbnV4LmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zeXNsaW51eC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZWY5YTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zeXNsaW51eC5iYmNsYXNzCkBAIC0wLDAgKzEsMTkwIEBACisjIHN5c2xpbnV4LmJiY2xhc3MKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgcGFja2FnZXMvQ09QWUlORykKKworIyBQcm92aWRlIHN5c2xpbnV4IHNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgYnVpbGRpbmcgYm9vdGFibGUgaW1hZ2VzLgorCisjIEV4dGVybmFsIHZhcmlhYmxlcworIyAke0lOSVRSRH0gLSBpbmRpY2F0ZXMgYSBsaXN0IG9mIGZpbGVzeXN0ZW0gaW1hZ2VzIHRvIGNvbmNhdGVuYXRlIGFuZCB1c2UgYXMgYW4gaW5pdHJkIChvcHRpb25hbCkKKyMgJHtST09URlN9IC0gaW5kaWNhdGVzIGEgZmlsZXN5c3RlbSBpbWFnZSB0byBpbmNsdWRlIGFzIHRoZSByb290IGZpbGVzeXN0ZW0gKG9wdGlvbmFsKQorIyAke0FVVE9fU1lTTElOVVhNRU5VfSAtIHNldCB0aGlzIHRvIDEgdG8gZW5hYmxlIGNyZWF0aW5nIGFuIGF1dG9tYXRpYyBtZW51CisjICR7TEFCRUxTfSAtIGEgbGlzdCBvZiB0YXJnZXRzIGZvciB0aGUgYXV0b21hdGljIGNvbmZpZworIyAke0FQUEVORH0gLSBhbiBvdmVycmlkZSBsaXN0IG9mIGFwcGVuZCBzdHJpbmdzIGZvciBlYWNoIGxhYmVsCisjICR7U1lTTElOVVhfT1BUU30gLSBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gYWRkIHRvIHRoZSBzeXNsaW51eCBmaWxlICc7JyBkZWxpbWl0ZWQKKyMgJHtTWVNMSU5VWF9TUExBU0h9IC0gQSBiYWNrZ3JvdW5kIGZvciB0aGUgdmdhIGJvb3QgbWVudSBpZiB1c2luZyB0aGUgYm9vdCBtZW51CisjICR7U1lTTElOVVhfREVGQVVMVF9DT05TT0xFfSAtIHNldCB0byAiY29uc29sZT10dHlYIiB0byBjaGFuZ2Uga2VybmVsIGJvb3QgZGVmYXVsdCBjb25zb2xlCisjICR7U1lTTElOVVhfU0VSSUFMfSAtIFNldCBhbiBhbHRlcm5hdGUgc2VyaWFsIHBvcnQgb3IgdHVybiBvZmYgc2VyaWFsIHdpdGggZW1wdHkgc3RyaW5nCisjICR7U1lTTElOVVhfU0VSSUFMX1RUWX0gLSBTZXQgYWx0ZXJuYXRlIGNvbnNvbGU9dHR5Li4uIGtlcm5lbCBib290IGFyZ3VtZW50CisjICR7U1lTTElOVVhfS0VSTkVMX0FSR1N9IC0gQWRkIGFkZGl0aW9uYWwga2VybmVsIGFyZ3VtZW50cworCitkb19ib290aW1nW2RlcGVuZHNdICs9ICIke01MUFJFRklYfXN5c2xpbnV4OmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAorICAgICAgICAgICAgICAgICAgICAgICAgc3lzbGludXgtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK1NZU0xJTlVYQ0ZHICA9ICIke1N9L3N5c2xpbnV4LmNmZyIKKworSVNPTElOVVhESVIgPSAiL2lzb2xpbnV4IgorU1lTTElOVVhESVIgPSAiLyIKKyMgVGhlIGtlcm5lbCBoYXMgYW4gaW50ZXJuYWwgZGVmYXVsdCBjb25zb2xlLCB3aGljaCB5b3UgY2FuIG92ZXJyaWRlIHdpdGgKKyMgYSBjb25zb2xlPS4uLnNvbWVfdHR5Li4uCitTWVNMSU5VWF9ERUZBVUxUX0NPTlNPTEUgPz0gIiIKK1NZU0xJTlVYX1NFUklBTCA/PSAiMCAxMTUyMDAiCitTWVNMSU5VWF9TRVJJQUxfVFRZID89ICJjb25zb2xlPXR0eVMwLDExNTIwMCIKK0lTT19CT09USU1HID0gImlzb2xpbnV4L2lzb2xpbnV4LmJpbiIKK0lTT19CT09UQ0FUID0gImlzb2xpbnV4L2Jvb3QuY2F0IgorTUtJU09GU19PUFRJT05TID0gIi1uby1lbXVsLWJvb3QgLWJvb3QtbG9hZC1zaXplIDQgLWJvb3QtaW5mby10YWJsZSIKK0FQUEVORF9wcmVwZW5kID0gIiAke1NZU0xJTlVYX1JPT1R9ICIKKworIyBOZWVkIFVVSUQgdXRpbGl0eSBjb2RlLgoraW5oZXJpdCBmcy11dWlkCisKK3N5c2xpbnV4X3BvcHVsYXRlKCkgeworCURFU1Q9JDEKKwlCT09URElSPSQyCisJQ0ZHTkFNRT0kMworCisJaW5zdGFsbCAtZCAke0RFU1R9JHtCT09URElSfQorCisJIyBJbnN0YWxsIHRoZSBjb25maWcgZmlsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtTWVNMSU5VWENGR30gJHtERVNUfSR7Qk9PVERJUn0vJHtDRkdOQU1FfQorCWlmIFsgIiR7QVVUT19TWVNMSU5VWE1FTlV9IiA9IDEgXSA7IHRoZW4KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7U1RBR0lOR19EQVRBRElSfS9zeXNsaW51eC92ZXNhbWVudS5jMzIgJHtERVNUfSR7Qk9PVERJUn0vdmVzYW1lbnUuYzMyCisJCWluc3RhbGwgLW0gMDQ0NCAke1NUQUdJTkdfREFUQURJUn0vc3lzbGludXgvbGliY29tMzIuYzMyICR7REVTVH0ke0JPT1RESVJ9L2xpYmNvbTMyLmMzMgorCQlpbnN0YWxsIC1tIDA0NDQgJHtTVEFHSU5HX0RBVEFESVJ9L3N5c2xpbnV4L2xpYnV0aWwuYzMyICR7REVTVH0ke0JPT1RESVJ9L2xpYnV0aWwuYzMyCisJCWlmIFsgIiR7U1lTTElOVVhfU1BMQVNIfSIgIT0gIiIgXSA7IHRoZW4KKwkJCWluc3RhbGwgLW0gMDY0NCAke1NZU0xJTlVYX1NQTEFTSH0gJHtERVNUfSR7Qk9PVERJUn0vc3BsYXNoLmxzcworCQlmaQorCWZpCit9CisKK3N5c2xpbnV4X2lzb19wb3B1bGF0ZSgpIHsKKwlpc29fZGlyPSQxCisJc3lzbGludXhfcG9wdWxhdGUgJGlzb19kaXIgJHtJU09MSU5VWERJUn0gaXNvbGludXguY2ZnCisJaW5zdGFsbCAtbSAwNjQ0ICR7U1RBR0lOR19EQVRBRElSfS9zeXNsaW51eC9pc29saW51eC5iaW4gJGlzb19kaXIke0lTT0xJTlVYRElSfQorCWluc3RhbGwgLW0gMDY0NCAke1NUQUdJTkdfREFUQURJUn0vc3lzbGludXgvbGRsaW51eC5jMzIgJGlzb19kaXIke0lTT0xJTlVYRElSfQorfQorCitzeXNsaW51eF9oZGRpbWdfcG9wdWxhdGUoKSB7CisJaGRkX2Rpcj0kMQorCXN5c2xpbnV4X3BvcHVsYXRlICRoZGRfZGlyICR7U1lTTElOVVhESVJ9IHN5c2xpbnV4LmNmZworCWluc3RhbGwgLW0gMDQ0NCAke1NUQUdJTkdfREFUQURJUn0vc3lzbGludXgvbGRsaW51eC5zeXMgJGhkZF9kaXIke1NZU0xJTlVYRElSfS9sZGxpbnV4LnN5cworfQorCitzeXNsaW51eF9oZGRpbWdfaW5zdGFsbCgpIHsKKwlzeXNsaW51eCAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0uaGRkaW1nCit9CisKK3N5c2xpbnV4X2hkZGRpcmVjdF9pbnN0YWxsKCkgeworCURFU1Q9JDEKKwlzeXNsaW51eCAkREVTVAorfQorCitweXRob24gYnVpbGRfc3lzbGludXhfY2ZnICgpIHsKKyAgICBpbXBvcnQgY29weQorICAgIGltcG9ydCBzeXMKKworICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgaWYgbm90IHdvcmtkaXI6CisgICAgICAgIGJiLmVycm9yKCJXT1JLRElSIG5vdCBkZWZpbmVkLCB1bmFibGUgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorICAgICAgICAKKyAgICBsYWJlbHMgPSBkLmdldFZhcignTEFCRUxTJywgVHJ1ZSkKKyAgICBpZiBub3QgbGFiZWxzOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTEFCRUxTIG5vdCBkZWZpbmVkLCBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisgICAgCisgICAgaWYgbGFiZWxzID09IFtdOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTm8gbGFiZWxzLCBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBjZmlsZSA9IGQuZ2V0VmFyKCdTWVNMSU5VWENGRycsIFRydWUpCisgICAgaWYgbm90IGNmaWxlOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCdVbmFibGUgdG8gcmVhZCBTWVNMSU5VWENGRycpCisKKyAgICB0cnk6CisgICAgICAgIGNmZ2ZpbGUgPSBmaWxlKGNmaWxlLCAndycpCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLmZ1bmNGYWlsZWQoJ1VuYWJsZSB0byBvcGVuICVzJyAlIChjZmlsZSkpCisKKyAgICBjZmdmaWxlLndyaXRlKCcjIEF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSBPRVxuJykKKworICAgIG9wdHMgPSBkLmdldFZhcignU1lTTElOVVhfT1BUUycsIFRydWUpCisKKyAgICBpZiBvcHRzOgorICAgICAgICBmb3Igb3B0IGluIG9wdHMuc3BsaXQoJzsnKToKKyAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJyVzXG4nICUgb3B0KQorCisgICAgY2ZnZmlsZS53cml0ZSgnQUxMT1dPUFRJT05TIDFcbicpOworICAgIHN5c2xpbnV4X2RlZmF1bHRfY29uc29sZSA9IGQuZ2V0VmFyKCdTWVNMSU5VWF9ERUZBVUxUX0NPTlNPTEUnLCBUcnVlKQorICAgIHN5c2xpbnV4X3NlcmlhbF90dHkgPSBkLmdldFZhcignU1lTTElOVVhfU0VSSUFMX1RUWScsIFRydWUpCisgICAgc3lzbGludXhfc2VyaWFsID0gZC5nZXRWYXIoJ1NZU0xJTlVYX1NFUklBTCcsIFRydWUpCisgICAgaWYgc3lzbGludXhfc2VyaWFsOgorICAgICAgICBjZmdmaWxlLndyaXRlKCdTRVJJQUwgJXNcbicgJSBzeXNsaW51eF9zZXJpYWwpCisKKyAgICBtZW51ID0gZC5nZXRWYXIoJ0FVVE9fU1lTTElOVVhNRU5VJywgVHJ1ZSkKKworICAgIGlmIG1lbnUgYW5kIHN5c2xpbnV4X3NlcmlhbDoKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgnREVGQVVMVCBHcmFwaGljcyBjb25zb2xlICVzXG4nICUgKGxhYmVscy5zcGxpdCgpWzBdKSkKKyAgICBlbHNlOgorICAgICAgICBjZmdmaWxlLndyaXRlKCdERUZBVUxUICVzXG4nICUgKGxhYmVscy5zcGxpdCgpWzBdKSkKKworICAgIHRpbWVvdXQgPSBkLmdldFZhcignU1lTTElOVVhfVElNRU9VVCcsIFRydWUpCisKKyAgICBpZiB0aW1lb3V0OgorICAgICAgICBjZmdmaWxlLndyaXRlKCdUSU1FT1VUICVzXG4nICUgdGltZW91dCkKKyAgICBlbHNlOgorICAgICAgICBjZmdmaWxlLndyaXRlKCdUSU1FT1VUIDUwXG4nKQorCisgICAgcHJvbXB0ID0gZC5nZXRWYXIoJ1NZU0xJTlVYX1BST01QVCcsIFRydWUpCisgICAgaWYgcHJvbXB0OgorICAgICAgICBjZmdmaWxlLndyaXRlKCdQUk9NUFQgJXNcbicgJSBwcm9tcHQpCisgICAgZWxzZToKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgnUFJPTVBUIDFcbicpCisKKyAgICBpZiBtZW51OgorICAgICAgICBjZmdmaWxlLndyaXRlKCd1aSB2ZXNhbWVudS5jMzJcbicpCisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ21lbnUgdGl0bGUgU2VsZWN0IGtlcm5lbCBvcHRpb25zIGFuZCBib290IGtlcm5lbFxuJykKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgnbWVudSB0YWJtc2cgUHJlc3MgW1RhYl0gdG8gZWRpdCwgW1JldHVybl0gdG8gc2VsZWN0XG4nKQorICAgICAgICBzcGxhc2ggPSBkLmdldFZhcignU1lTTElOVVhfU1BMQVNIJywgVHJ1ZSkKKyAgICAgICAgaWYgc3BsYXNoOgorICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnbWVudSBiYWNrZ3JvdW5kIHNwbGFzaC5sc3NcbicpCisgICAgCisgICAgZm9yIGxhYmVsIGluIGxhYmVscy5zcGxpdCgpOgorICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKworICAgICAgICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKQorICAgICAgICBpZiBub3Qgb3ZlcnJpZGVzOgorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgnT1ZFUlJJREVTIG5vdCBkZWZpbmVkJykKKworICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCBsYWJlbCArICc6JyArIG92ZXJyaWRlcykKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgCisgICAgICAgIGJ0eXBlcyA9IFsgWyAiIiwgc3lzbGludXhfZGVmYXVsdF9jb25zb2xlIF0gXQorICAgICAgICBpZiBtZW51IGFuZCBzeXNsaW51eF9zZXJpYWw6CisgICAgICAgICAgICBidHlwZXMgPSBbIFsgIkdyYXBoaWNzIGNvbnNvbGUgIiwgc3lzbGludXhfZGVmYXVsdF9jb25zb2xlICBdLAorICAgICAgICAgICAgICAgIFsgIlNlcmlhbCBjb25zb2xlICIsIHN5c2xpbnV4X3NlcmlhbF90dHkgXSBdCisKKyAgICAgICAgZm9yIGJ0eXBlIGluIGJ0eXBlczoKKyAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ0xBQkVMICVzJXNcbktFUk5FTCAvdm1saW51elxuJyAlIChidHlwZVswXSwgbGFiZWwpKQorCisgICAgICAgICAgICBleGFyZ3MgPSBkLmdldFZhcignU1lTTElOVVhfS0VSTkVMX0FSR1MnLCBUcnVlKQorICAgICAgICAgICAgaWYgZXhhcmdzOgorICAgICAgICAgICAgICAgIGJ0eXBlWzFdICs9ICIgIiArIGV4YXJncworCisgICAgICAgICAgICBhcHBlbmQgPSBsb2NhbGRhdGEuZ2V0VmFyKCdBUFBFTkQnLCBUcnVlKQorICAgICAgICAgICAgaW5pdHJkID0gbG9jYWxkYXRhLmdldFZhcignSU5JVFJEJywgVHJ1ZSkKKworICAgICAgICAgICAgaWYgYXBwZW5kOgorICAgICAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ0FQUEVORCAnKQorCisgICAgICAgICAgICAgICAgaWYgaW5pdHJkOgorICAgICAgICAgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCdpbml0cmQ9L2luaXRyZCAnKQorCisgICAgICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnTEFCRUw9JXMgJyUgKGxhYmVsKSkKKyAgICAgICAgICAgICAgICBhcHBlbmQgPSByZXBsYWNlX3Jvb3Rmc191dWlkKGQsIGFwcGVuZCkKKyAgICAgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCclcyAlc1xuJyAlIChhcHBlbmQsIGJ0eXBlWzFdKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnQVBQRU5EICVzXG4nICUgYnR5cGVbMV0pCisKKyAgICBjZmdmaWxlLmNsb3NlKCkKK30KK2J1aWxkX3N5c2xpbnV4X2NmZ1t2YXJkZXBzXSArPSAiQVBQRU5EIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3lzdGVtZC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3lzdGVtZC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZTcyYzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zeXN0ZW1kLmJiY2xhc3MKQEAgLTAsMCArMSwxOTMgQEAKKyMgVGhlIGxpc3Qgb2YgcGFja2FnZXMgdGhhdCBzaG91bGQgaGF2ZSBzeXN0ZW1kIHBhY2thZ2luZyBzY3JpcHRzIGFkZGVkLiAgRm9yCisjIGVhY2ggZW50cnksIG9wdGlvbmFsbHkgaGF2ZSBhIFNZU1RFTURfU0VSVklDRV9bcGFja2FnZV0gdGhhdCBsaXN0cyB0aGUgc2VydmljZQorIyBmaWxlcyBpbiB0aGlzIHBhY2thZ2UuICBJZiB0aGlzIHZhcmlhYmxlIGlzbid0IHNldCwgW3BhY2thZ2VdLnNlcnZpY2UgaXMgdXNlZC4KK1NZU1RFTURfUEFDS0FHRVMgPz0gIiR7UE59IgorU1lTVEVNRF9QQUNLQUdFU19jbGFzcy1uYXRpdmUgPz0gIiIKK1NZU1RFTURfUEFDS0FHRVNfY2xhc3MtbmF0aXZlc2RrID89ICIiCisKKyMgV2hldGhlciB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgc2VydmljZXMgb24gaW5zdGFsbGF0aW9uLgorU1lTVEVNRF9BVVRPX0VOQUJMRSA/Pz0gImVuYWJsZSIKKworIyBUaGlzIGNsYXNzIHdpbGwgYmUgaW5jbHVkZWQgaW4gYW55IHJlY2lwZSB0aGF0IHN1cHBvcnRzIHN5c3RlbWQgaW5pdCBzY3JpcHRzLAorIyBldmVuIGlmIHN5c3RlbWQgaXMgbm90IGluIERJU1RST19GRUFUVVJFUy4gIEFzIHN1Y2ggZG9uJ3QgbWFrZSBhbnkgY2hhbmdlcworIyBkaXJlY3RseSBidXQgY2hlY2sgdGhlIERJU1RST19GRUFUVVJFUyBmaXJzdC4KK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICAjIElmIHRoZSBkaXN0cm8gZmVhdHVyZXMgaGF2ZSBzeXN0ZW1kIGJ1dCBub3Qgc3lzdmluaXQsIGluaGliaXQgdXBkYXRlLXJjZAorICAgICMgZnJvbSBkb2luZyBhbnkgd29yayBzbyB0aGF0IHB1cmUtc3lzdGVtZCBpbWFnZXMgZG9uJ3QgaGF2ZSByZWR1bmRhbnQgaW5pdAorICAgICMgZmlsZXMuCisgICAgaWYgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBkLmFwcGVuZFZhcigiREVQRU5EUyIsICIgc3lzdGVtZC1zeXN0ZW1jdGwtbmF0aXZlIikKKyAgICAgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgICAgICBkLnNldFZhcigiSU5ISUJJVF9VUERBVEVSQ0RfQkJDTEFTUyIsICIxIikKK30KKworc3lzdGVtZF9wb3N0aW5zdCgpIHsKK09QVFM9IiIKKworaWYgWyAtbiAiJEQiIF07IHRoZW4KKyAgICBPUFRTPSItLXJvb3Q9JEQiCitmaQorCitpZiB0eXBlIHN5c3RlbWN0bCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisJc3lzdGVtY3RsICRPUFRTICR7U1lTVEVNRF9BVVRPX0VOQUJMRX0gJHtTWVNURU1EX1NFUlZJQ0V9CisKKwlpZiBbIC16ICIkRCIgLWEgIiR7U1lTVEVNRF9BVVRPX0VOQUJMRX0iID0gImVuYWJsZSIgXTsgdGhlbgorCQlzeXN0ZW1jdGwgcmVzdGFydCAke1NZU1RFTURfU0VSVklDRX0KKwlmaQorZmkKK30KKworc3lzdGVtZF9wcmVybSgpIHsKK09QVFM9IiIKKworaWYgWyAtbiAiJEQiIF07IHRoZW4KKyAgICBPUFRTPSItLXJvb3Q9JEQiCitmaQorCitpZiB0eXBlIHN5c3RlbWN0bCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisJaWYgWyAteiAiJEQiIF07IHRoZW4KKwkJc3lzdGVtY3RsIHN0b3AgJHtTWVNURU1EX1NFUlZJQ0V9CisJZmkKKworCXN5c3RlbWN0bCAkT1BUUyBkaXNhYmxlICR7U1lTVEVNRF9TRVJWSUNFfQorZmkKK30KKworCitzeXN0ZW1kX3BvcHVsYXRlX3BhY2thZ2VzW3ZhcmRlcHNdICs9ICJzeXN0ZW1kX3ByZXJtIHN5c3RlbWRfcG9zdGluc3QiCitzeXN0ZW1kX3BvcHVsYXRlX3BhY2thZ2VzW3ZhcmRlcHNleGNsdWRlXSArPSAiT1ZFUlJJREVTIgorCisKK3B5dGhvbiBzeXN0ZW1kX3BvcHVsYXRlX3BhY2thZ2VzKCkgeworICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIHJldHVybgorCisgICAgZGVmIGdldF9wYWNrYWdlX3ZhcihkLCB2YXIsIHBrZyk6CisgICAgICAgIHZhbCA9IChkLmdldFZhcignJXNfJXMnICUgKHZhciwgcGtnKSwgVHJ1ZSkgb3IgIiIpLnN0cmlwKCkKKyAgICAgICAgaWYgdmFsID09ICIiOgorICAgICAgICAgICAgdmFsID0gKGQuZ2V0VmFyKHZhciwgVHJ1ZSkgb3IgIiIpLnN0cmlwKCkKKyAgICAgICAgcmV0dXJuIHZhbAorCisgICAgIyBDaGVjayBpZiBzeXN0ZW1kLXBhY2thZ2VzIGFscmVhZHkgaW5jbHVkZWQgaW4gUEFDS0FHRVMKKyAgICBkZWYgc3lzdGVtZF9jaGVja19wYWNrYWdlKHBrZ19zeXN0ZW1kKToKKyAgICAgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgICAgICBpZiBub3QgcGtnX3N5c3RlbWQgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgICAgIGJiLmVycm9yKCclcyBkb2VzIG5vdCBhcHBlYXIgaW4gcGFja2FnZSBsaXN0LCBwbGVhc2UgYWRkIGl0JyAlIHBrZ19zeXN0ZW1kKQorCisKKyAgICBkZWYgc3lzdGVtZF9nZW5lcmF0ZV9wYWNrYWdlX3NjcmlwdHMocGtnKToKKyAgICAgICAgYmIuZGVidWcoMSwgJ2FkZGluZyBzeXN0ZW1kIGNhbGxzIHRvIHBvc3RpbnN0L3Bvc3RybSBmb3IgJXMnICUgcGtnKQorCisgICAgICAgICMgQWRkIHBrZyB0byB0aGUgb3ZlcnJpZGVzIHNvIHRoYXQgaXQgZmluZHMgdGhlIFNZU1RFTURfU0VSVklDRV9wa2cKKyAgICAgICAgIyB2YXJpYWJsZS4KKyAgICAgICAgbG9jYWxkYXRhID0gZC5jcmVhdGVDb3B5KCkKKyAgICAgICAgbG9jYWxkYXRhLnByZXBlbmRWYXIoIk9WRVJSSURFUyIsIHBrZyArICI6IikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBvc3RpbnN0OgorICAgICAgICAgICAgcG9zdGluc3QgPSAnIyEvYmluL3NoXG4nCisgICAgICAgIHBvc3RpbnN0ICs9IGxvY2FsZGF0YS5nZXRWYXIoJ3N5c3RlbWRfcG9zdGluc3QnLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCisKKyAgICAgICAgcHJlcm0gPSBkLmdldFZhcigncGtnX3ByZXJtXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHByZXJtOgorICAgICAgICAgICAgcHJlcm0gPSAnIyEvYmluL3NoXG4nCisgICAgICAgIHByZXJtICs9IGxvY2FsZGF0YS5nZXRWYXIoJ3N5c3RlbWRfcHJlcm0nLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3ByZXJtXyVzJyAlIHBrZywgcHJlcm0pCisKKworICAgICMgQWRkIGZpbGVzIHRvIEZJTEVTXyotc3lzdGVtZCBpZiBleGlzdGVudCBhbmQgbm90IGFscmVhZHkgZG9uZQorICAgIGRlZiBzeXN0ZW1kX2FwcGVuZF9maWxlKHBrZ19zeXN0ZW1kLCBmaWxlX2FwcGVuZCk6CisgICAgICAgIGFwcGVuZGVkID0gRmFsc2UKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob2UucGF0aC5qb2luKGQuZ2V0VmFyKCJEIiwgVHJ1ZSksIGZpbGVfYXBwZW5kKSk6CisgICAgICAgICAgICB2YXJfbmFtZSA9ICJGSUxFU18iICsgcGtnX3N5c3RlbWQKKyAgICAgICAgICAgIGZpbGVzID0gZC5nZXRWYXIodmFyX25hbWUsIEZhbHNlKSBvciAiIgorICAgICAgICAgICAgaWYgZmlsZV9hcHBlbmQgbm90IGluIGZpbGVzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXIodmFyX25hbWUsICIgIiArIGZpbGVfYXBwZW5kKQorICAgICAgICAgICAgICAgIGFwcGVuZGVkID0gVHJ1ZQorICAgICAgICByZXR1cm4gYXBwZW5kZWQKKworICAgICMgQWRkIHN5c3RlbWQgZmlsZXMgdG8gRklMRVNfKi1zeXN0ZW1kLCBwYXJzZSBmb3IgQWxzbz0gYW5kIGZvbGxvdyByZWN1cnNpdmUKKyAgICBkZWYgc3lzdGVtZF9hZGRfZmlsZXNfYW5kX3BhcnNlKHBrZ19zeXN0ZW1kLCBwYXRoLCBzZXJ2aWNlLCBrZXlzKToKKyAgICAgICAgIyBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24KKyAgICAgICAgaWYgc3lzdGVtZF9hcHBlbmRfZmlsZShwa2dfc3lzdGVtZCwgb2UucGF0aC5qb2luKHBhdGgsIHNlcnZpY2UpKToKKyAgICAgICAgICAgIGZ1bGxwYXRoID0gb2UucGF0aC5qb2luKGQuZ2V0VmFyKCJEIiwgVHJ1ZSksIHBhdGgsIHNlcnZpY2UpCisgICAgICAgICAgICBpZiBzZXJ2aWNlLmZpbmQoJy5zZXJ2aWNlJykgIT0gLTE6CisgICAgICAgICAgICAgICAgIyBmb3IgKi5zZXJ2aWNlIGFkZCAqQC5zZXJ2aWNlCisgICAgICAgICAgICAgICAgc2VydmljZV9iYXNlID0gc2VydmljZS5yZXBsYWNlKCcuc2VydmljZScsICcnKQorICAgICAgICAgICAgICAgIHN5c3RlbWRfYWRkX2ZpbGVzX2FuZF9wYXJzZShwa2dfc3lzdGVtZCwgcGF0aCwgc2VydmljZV9iYXNlICsgJ0Auc2VydmljZScsIGtleXMpCisgICAgICAgICAgICBpZiBzZXJ2aWNlLmZpbmQoJy5zb2NrZXQnKSAhPSAtMToKKyAgICAgICAgICAgICAgICAjIGZvciAqLnNvY2tldCBhZGQgKi5zZXJ2aWNlIGFuZCAqQC5zZXJ2aWNlCisgICAgICAgICAgICAgICAgc2VydmljZV9iYXNlID0gc2VydmljZS5yZXBsYWNlKCcuc29ja2V0JywgJycpCisgICAgICAgICAgICAgICAgc3lzdGVtZF9hZGRfZmlsZXNfYW5kX3BhcnNlKHBrZ19zeXN0ZW1kLCBwYXRoLCBzZXJ2aWNlX2Jhc2UgKyAnLnNlcnZpY2UnLCBrZXlzKQorICAgICAgICAgICAgICAgIHN5c3RlbWRfYWRkX2ZpbGVzX2FuZF9wYXJzZShwa2dfc3lzdGVtZCwgcGF0aCwgc2VydmljZV9iYXNlICsgJ0Auc2VydmljZScsIGtleXMpCisgICAgICAgICAgICBmb3Iga2V5IGluIGtleXMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAjIHJlY3Vyc2UgYWxsIGRlcGVuZGVuY2llcyBmb3VuZCBpbiBrZXlzICgnQWxzbyc7J0NvbmZsaWN0cyc7Li4pIGFuZCBhZGQgdG8gZmlsZXMKKyAgICAgICAgICAgICAgICBjbWQgPSAiZ3JlcCAlcyAlcyB8IHNlZCAncywlcz0sLGcnIHwgdHIgJywnICdcXG4nIiAlIChrZXksIGZ1bGxwYXRoLCBrZXkpCisgICAgICAgICAgICAgICAgcGlwZSA9IG9zLnBvcGVuKGNtZCwgJ3InKQorICAgICAgICAgICAgICAgIGxpbmUgPSBwaXBlLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICB3aGlsZSBsaW5lOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCdcbicsICcnKQorICAgICAgICAgICAgICAgICAgICBzeXN0ZW1kX2FkZF9maWxlc19hbmRfcGFyc2UocGtnX3N5c3RlbWQsIHBhdGgsIGxpbmUsIGtleXMpCisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBwaXBlLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBwaXBlLmNsb3NlKCkKKworICAgICMgQ2hlY2sgc2VydmljZS1maWxlcyBhbmQgY2FsbCBzeXN0ZW1kX2FkZF9maWxlc19hbmRfcGFyc2UgZm9yIGVhY2ggZW50cnkKKyAgICBkZWYgc3lzdGVtZF9jaGVja19zZXJ2aWNlcygpOgorICAgICAgICBzZWFyY2hwYXRocyA9IFtvZS5wYXRoLmpvaW4oZC5nZXRWYXIoInN5c2NvbmZkaXIiLCBUcnVlKSwgInN5c3RlbWQiLCAic3lzdGVtIiksXQorICAgICAgICBzZWFyY2hwYXRocy5hcHBlbmQoZC5nZXRWYXIoInN5c3RlbWRfc3lzdGVtX3VuaXRkaXIiLCBUcnVlKSkKKyAgICAgICAgc3lzdGVtZF9wYWNrYWdlcyA9IGQuZ2V0VmFyKCdTWVNURU1EX1BBQ0tBR0VTJywgVHJ1ZSkKKworICAgICAgICBrZXlzID0gJ0Fsc28nCisgICAgICAgICMgc2NhbiBmb3IgYWxsIGluIFNZU1RFTURfU0VSVklDRVtdCisgICAgICAgIGZvciBwa2dfc3lzdGVtZCBpbiBzeXN0ZW1kX3BhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgICAgICBmb3Igc2VydmljZSBpbiBnZXRfcGFja2FnZV92YXIoZCwgJ1NZU1RFTURfU0VSVklDRScsIHBrZ19zeXN0ZW1kKS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHBhdGhfZm91bmQgPSAnJworICAgICAgICAgICAgICAgIGZvciBwYXRoIGluIHNlYXJjaHBhdGhzOgorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvZS5wYXRoLmpvaW4oZC5nZXRWYXIoIkQiLCBUcnVlKSwgcGF0aCwgc2VydmljZSkpOgorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9mb3VuZCA9IHBhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgcGF0aF9mb3VuZCAhPSAnJzoKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtZF9hZGRfZmlsZXNfYW5kX3BhcnNlKHBrZ19zeXN0ZW1kLCBwYXRoX2ZvdW5kLCBzZXJ2aWNlLCBrZXlzKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIlNZU1RFTURfU0VSVklDRV8lcyB2YWx1ZSAlcyBkb2VzIG5vdCBleGlzdCIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAocGtnX3N5c3RlbWQsIHNlcnZpY2UpKQorCisgICAgIyBSdW4gYWxsIG1vZGlmaWNhdGlvbnMgb25jZSB3aGVuIGNyZWF0aW5nIHBhY2thZ2UKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhkLmdldFZhcigiRCIsIFRydWUpKToKKyAgICAgICAgZm9yIHBrZyBpbiBkLmdldFZhcignU1lTVEVNRF9QQUNLQUdFUycsIFRydWUpLnNwbGl0KCk6CisgICAgICAgICAgICBzeXN0ZW1kX2NoZWNrX3BhY2thZ2UocGtnKQorICAgICAgICAgICAgaWYgZC5nZXRWYXIoJ1NZU1RFTURfU0VSVklDRV8nICsgcGtnLCBUcnVlKToKKyAgICAgICAgICAgICAgICBzeXN0ZW1kX2dlbmVyYXRlX3BhY2thZ2Vfc2NyaXB0cyhwa2cpCisgICAgICAgIHN5c3RlbWRfY2hlY2tfc2VydmljZXMoKQorfQorCitQQUNLQUdFU1BMSVRGVU5DU19wcmVwZW5kID0gInN5c3RlbWRfcG9wdWxhdGVfcGFja2FnZXMgIgorCitweXRob24gcm1fc3lzdGVtZF91bml0ZGlyICgpeworICAgIGltcG9ydCBzaHV0aWwKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBzeXN0ZW1kX3VuaXRkaXIgPSBvZS5wYXRoLmpvaW4oZC5nZXRWYXIoIkQiLCBUcnVlKSwgZC5nZXRWYXIoJ3N5c3RlbWRfdW5pdGRpcicsIFRydWUpKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzeXN0ZW1kX3VuaXRkaXIpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzeXN0ZW1kX3VuaXRkaXIpCisgICAgICAgIHN5c3RlbWRfbGliZGlyID0gb3MucGF0aC5kaXJuYW1lKHN5c3RlbWRfdW5pdGRpcikKKyAgICAgICAgaWYgKG9zLnBhdGguZXhpc3RzKHN5c3RlbWRfbGliZGlyKSBhbmQgbm90IG9zLmxpc3RkaXIoc3lzdGVtZF9saWJkaXIpKToKKyAgICAgICAgICAgIG9zLnJtZGlyKHN5c3RlbWRfbGliZGlyKQorfQorZG9faW5zdGFsbFtwb3N0ZnVuY3NdICs9ICJybV9zeXN0ZW1kX3VuaXRkaXIgIgorCitweXRob24gcm1fc3lzdmluaXRfaW5pdGRkaXIgKCl7CisgICAgaW1wb3J0IHNodXRpbAorICAgIHN5c3ZfaW5pdGRkaXIgPSBvZS5wYXRoLmpvaW4oZC5nZXRWYXIoIkQiLCBUcnVlKSwgKGQuZ2V0VmFyKCdJTklUX0RfRElSJywgVHJ1ZSkgb3IgIi9ldGMvaW5pdC5kIikpCisKKyAgICBpZiBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCBUcnVlLCBGYWxzZSwgZCkgYW5kIFwKKyAgICAgICAgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCkgYW5kIFwKKyAgICAgICAgb3MucGF0aC5leGlzdHMoc3lzdl9pbml0ZGRpcik6CisgICAgICAgIHN5c3RlbWRfc3lzdGVtX3VuaXRkaXIgPSBvZS5wYXRoLmpvaW4oZC5nZXRWYXIoIkQiLCBUcnVlKSwgZC5nZXRWYXIoJ3N5c3RlbWRfc3lzdGVtX3VuaXRkaXInLCBUcnVlKSkKKworICAgICAgICAjIElmIHN5c3RlbWRfc3lzdGVtX3VuaXRkaXIgY29udGFpbnMgYW55dGhpbmcsIGRlbGV0ZSBzeXN2X2luaXRkZGlyCisgICAgICAgIGlmIChvcy5wYXRoLmV4aXN0cyhzeXN0ZW1kX3N5c3RlbV91bml0ZGlyKSBhbmQgb3MubGlzdGRpcihzeXN0ZW1kX3N5c3RlbV91bml0ZGlyKSk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHN5c3ZfaW5pdGRkaXIpCit9Citkb19pbnN0YWxsW3Bvc3RmdW5jc10gKz0gInJtX3N5c3Zpbml0X2luaXRkZGlyICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rlcm1pbmFsLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90ZXJtaW5hbC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NzdjNmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90ZXJtaW5hbC5iYmNsYXNzCkBAIC0wLDAgKzEsOTQgQEAKK09FX1RFUk1JTkFMID89ICdhdXRvJworT0VfVEVSTUlOQUxbdHlwZV0gPSAnY2hvaWNlJworT0VfVEVSTUlOQUxbY2hvaWNlc10gPSAnYXV0byBub25lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7QCIgIi5qb2luKG8ubmFtZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbyBpbiBvZS50ZXJtaW5hbC5wcmlvcml0aXplZCgpKX0nCisKK09FX1RFUk1JTkFMX0VYUE9SVFMgKz0gJ0VYVFJBX09FTUFLRScKK09FX1RFUk1JTkFMX0VYUE9SVFNbdHlwZV0gPSAnbGlzdCcKKworWEFVVEhPUklUWSA/PSAiJHtIT01FfS8uWGF1dGhvcml0eSIKK1NIRUxMID89ICJiYXNoIgorCisKK2RlZiBlbWl0X3Rlcm1pbmFsX2Z1bmMoY29tbWFuZCwgZW52ZGF0YSwgZCk6CisgICAgY21kX2Z1bmMgPSAnZG9fdGVybWluYWwnCisKKyAgICBlbnZkYXRhLnNldFZhcihjbWRfZnVuYywgJ2V4ZWMgJyArIGNvbW1hbmQpCisgICAgZW52ZGF0YS5zZXRWYXJGbGFnKGNtZF9mdW5jLCAnZnVuYycsIDEpCisKKyAgICBydW5mbXQgPSBkLmdldFZhcignQkJfUlVORk1UJywgVHJ1ZSkgb3IgInJ1bi57ZnVuY30ue3BpZH0iCisgICAgcnVuZmlsZSA9IHJ1bmZtdC5mb3JtYXQoZnVuYz1jbWRfZnVuYywgdGFzaz1jbWRfZnVuYywgdGFza2Z1bmM9Y21kX2Z1bmMsIHBpZD1vcy5nZXRwaWQoKSkKKyAgICBydW5maWxlID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdUJywgVHJ1ZSksIHJ1bmZpbGUpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShydW5maWxlKSkKKworICAgIHdpdGggb3BlbihydW5maWxlLCAndycpIGFzIHNjcmlwdDoKKyAgICAgICAgc2NyaXB0LndyaXRlKCcjIS9iaW4vc2ggLWVcbicpCisgICAgICAgIGJiLmRhdGEuZW1pdF9mdW5jKGNtZF9mdW5jLCBzY3JpcHQsIGVudmRhdGEpCisgICAgICAgIHNjcmlwdC53cml0ZShjbWRfZnVuYykKKyAgICAgICAgc2NyaXB0LndyaXRlKCJcbiIpCisgICAgb3MuY2htb2QocnVuZmlsZSwgMDc1NSkKKworICAgIHJldHVybiBydW5maWxlCisKK2RlZiBvZV90ZXJtaW5hbChjb21tYW5kLCB0aXRsZSwgZCk6CisgICAgaW1wb3J0IG9lLmRhdGEKKyAgICBpbXBvcnQgb2UudGVybWluYWwKKworICAgIGVudmRhdGEgPSBiYi5kYXRhLmluaXQoKQorCisgICAgZm9yIHYgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgZW52ZGF0YS5zZXRWYXIodiwgb3MuZW52aXJvblt2XSkKKyAgICAgICAgZW52ZGF0YS5zZXRWYXJGbGFnKHYsICdleHBvcnQnLCAxKQorCisgICAgZm9yIGV4cG9ydCBpbiBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdPRV9URVJNSU5BTF9FWFBPUlRTJywgZCk6CisgICAgICAgIHZhbHVlID0gZC5nZXRWYXIoZXhwb3J0LCBUcnVlKQorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG9zLmVudmlyb25bZXhwb3J0XSA9IHN0cih2YWx1ZSkKKyAgICAgICAgICAgIGVudmRhdGEuc2V0VmFyKGV4cG9ydCwgc3RyKHZhbHVlKSkKKyAgICAgICAgICAgIGVudmRhdGEuc2V0VmFyRmxhZyhleHBvcnQsICdleHBvcnQnLCAxKQorICAgICAgICBpZiBleHBvcnQgPT0gIlBTRVVET19ESVNBQkxFRCI6CisgICAgICAgICAgICBpZiAiUFNFVURPX1VOTE9BRCIgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgICAgICAgICBkZWwgb3MuZW52aXJvblsiUFNFVURPX1VOTE9BRCJdCisgICAgICAgICAgICBlbnZkYXRhLmRlbFZhcigiUFNFVURPX1VOTE9BRCIpCisKKyAgICAjIEFkZCBpbiBhbGwgdmFyaWFibGVzIGZyb20gdGhlIHVzZXIncyBvcmlnaW5hbCBlbnZpcm9ubWVudCB3aGljaAorICAgICMgaGF2ZW4ndCBzdWJzZXF1bnRseSBiZWVuIHNldC9jaGFuZ2VkCisgICAgb3JpZ2JiZW52ID0gZC5nZXRWYXIoIkJCX09SSUdFTlYiLCBGYWxzZSkgb3Ige30KKyAgICBmb3Iga2V5IGluIG9yaWdiYmVudjoKKyAgICAgICAgaWYga2V5IGluIGVudmRhdGE6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB2YWx1ZSA9IG9yaWdiYmVudi5nZXRWYXIoa2V5LCBUcnVlKQorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG9zLmVudmlyb25ba2V5XSA9IHN0cih2YWx1ZSkKKyAgICAgICAgICAgIGVudmRhdGEuc2V0VmFyKGtleSwgc3RyKHZhbHVlKSkKKyAgICAgICAgICAgIGVudmRhdGEuc2V0VmFyRmxhZyhrZXksICdleHBvcnQnLCAxKQorCisgICAgIyBBIGNvbXBsZXggUFMxIG1pZ2h0IG5lZWQgbW9yZSBlc2NhcGluZyBvZiBjaGFycy4KKyAgICAjIExldHMgbm90IGV4cG9ydCBQUzEgaW5zdGVhZC4KKyAgICBlbnZkYXRhLmRlbFZhcigiUFMxIikKKworICAgICMgUmVwbGFjZSBjb21tYW5kIHdpdGggYW4gZXhlY3V0YWJsZSB3cmFwcGVyIHNjcmlwdAorICAgIGNvbW1hbmQgPSBlbWl0X3Rlcm1pbmFsX2Z1bmMoY29tbWFuZCwgZW52ZGF0YSwgZCkKKworICAgIHRlcm1pbmFsID0gb2UuZGF0YS50eXBlZF92YWx1ZSgnT0VfVEVSTUlOQUwnLCBkKS5sb3dlcigpCisgICAgaWYgdGVybWluYWwgPT0gJ25vbmUnOgorICAgICAgICBiYi5mYXRhbCgnRGV2c2hlbGwgdXNhZ2UgZGlzYWJsZWQgd2l0aCBPRV9URVJNSU5BTCcpCisgICAgZWxpZiB0ZXJtaW5hbCAhPSAnYXV0byc6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9lLnRlcm1pbmFsLnNwYXduKHRlcm1pbmFsLCBjb21tYW5kLCB0aXRsZSwgTm9uZSwgZCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgb2UudGVybWluYWwuVW5zdXBwb3J0ZWRUZXJtaW5hbDoKKyAgICAgICAgICAgIGJiLndhcm4oJ1Vuc3VwcG9ydGVkIHRlcm1pbmFsICIlcyIsIGRlZmF1bHRpbmcgdG8gImF1dG8iJyAlCisgICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsKQorICAgICAgICBleGNlcHQgb2UudGVybWluYWwuRXhlY3V0aW9uRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgYmIuZmF0YWwoJ1VuYWJsZSB0byBzcGF3biB0ZXJtaW5hbCAlczogJXMnICUgKHRlcm1pbmFsLCBleGMpKQorCisgICAgdHJ5OgorICAgICAgICBvZS50ZXJtaW5hbC5zcGF3bl9wcmVmZXJyZWQoY29tbWFuZCwgdGl0bGUsIE5vbmUsIGQpCisgICAgZXhjZXB0IG9lLnRlcm1pbmFsLk5vU3VwcG9ydGVkVGVybWluYWxzOgorICAgICAgICBiYi5mYXRhbCgnTm8gdmFsaWQgdGVybWluYWwgZm91bmQsIHVuYWJsZSB0byBvcGVuIGRldnNoZWxsJykKKyAgICBleGNlcHQgb2UudGVybWluYWwuRXhlY3V0aW9uRXJyb3IgYXMgZXhjOgorICAgICAgICBiYi5mYXRhbCgnVW5hYmxlIHRvIHNwYXduIHRlcm1pbmFsICVzOiAlcycgJSAodGVybWluYWwsIGV4YykpCisKK29lX3Rlcm1pbmFsW3ZhcmRlcHNleGNsdWRlXSA9ICJCQl9PUklHRU5WIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdGVzdGltYWdlLWF1dG8uYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rlc3RpbWFnZS1hdXRvLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYwNTk5ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rlc3RpbWFnZS1hdXRvLmJiY2xhc3MKQEAgLTAsMCArMSwyMyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKworIyBSdW4gdGVzdHMgYXV0b21hdGljYWxseSBvbiBhbiBpbWFnZSBhZnRlciB0aGUgaW1hZ2UgaXMgY29uc3RydWN0ZWQKKyMgKGFzIG9wcG9zZWQgdG8gdGVzdGltYWdlLmJiY2xhc3MgYWxvbmUgd2hlcmUgdGVzdHMgbXVzdCBiZSBjYWxsZWQKKyMgbWFudWFsbHkgdXNpbmcgYml0YmFrZSAtYyB0ZXN0aW1hZ2UgPGltYWdlPikuCisjCisjIE5PVEU6IHRvIHVzZSB0aGlzIGNsYXNzLCBzaW1wbHkgc2V0IFRFU1RfSU1BR0UgPSAiMSIgLSBubyBuZWVkIHRvCisjIGluaGVyaXQgaXQgc2luY2UgdGhhdCB3aWxsIGJlIGRvbmUgaW4gaW1hZ2UuYmJjbGFzcyB3aGVuIHRoaXMgdmFyaWFibGUKKyMgaGFzIGJlZW4gc2V0LgorIworIyBTZWUgdGVzdGltYWdlLmJiY2xhc3MgZm9yIHRoZSB0ZXN0IGltcGxlbWVudGF0aW9uLgorCitpbmhlcml0IHRlc3RpbWFnZQorCitweXRob24gZG9fdGVzdGltYWdlX2F1dG8oKSB7CisgICAgdGVzdGltYWdlX21haW4oZCkKK30KK2FkZHRhc2sgdGVzdGltYWdlX2F1dG8gYmVmb3JlIGRvX2J1aWxkIGFmdGVyIGRvX3Jvb3RmcworZG9fdGVzdGltYWdlX2F1dG9bZGVwZW5kc10gKz0gIiR7VEVTVElNQUdFREVQRU5EU30iCitkb190ZXN0aW1hZ2VfYXV0b1tsb2NrZmlsZXNdICs9ICIke1RFU1RJTUFHRUxPQ0t9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdGVzdGltYWdlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90ZXN0aW1hZ2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTkxOGJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdGVzdGltYWdlLmJiY2xhc3MKQEAgLTAsMCArMSw0MjIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCisKKyMgdGVzdGltYWdlLmJiY2xhc3MgZW5hYmxlcyB0ZXN0aW5nIG9mIHFlbXUgaW1hZ2VzIHVzaW5nIHB5dGhvbiB1bml0dGVzdHMuCisjIE1vc3Qgb2YgdGhlIHRlc3RzIGFyZSBjb21tYW5kcyBydW4gb24gdGFyZ2V0IGltYWdlIG92ZXIgc3NoLgorIyBUbyB1c2UgaXQgYWRkIHRlc3RpbWFnZSB0byBnbG9iYWwgaW5oZXJpdCBhbmQgY2FsbCB5b3VyIHRhcmdldCBpbWFnZSB3aXRoIC1jIHRlc3RpbWFnZQorIyBZb3UgY2FuIHRyeSBpdCBvdXQgbGlrZSB0aGlzOgorIyAtIGZpcnN0IGJ1aWxkIGEgcWVtdSBjb3JlLWltYWdlLXNhdG8KKyMgLSBhZGQgSU5IRVJJVCArPSAidGVzdGltYWdlIiBpbiBsb2NhbC5jb25mCisjIC0gdGhlbiBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0byAtYyB0ZXN0aW1hZ2UuIFRoYXQgd2lsbCBydW4gYSBzdGFuZGFyZCBzdWl0ZSBvZiB0ZXN0cy4KKworIyBZb3UgY2FuIHNldCAob3IgYXBwZW5kIHRvKSBURVNUX1NVSVRFUyBpbiBsb2NhbC5jb25mIHRvIHNlbGVjdCB0aGUgdGVzdHMKKyMgd2hpY2ggeW91IHdhbnQgdG8gcnVuIGZvciB5b3VyIHRhcmdldC4KKyMgVGhlIHRlc3QgbmFtZXMgYXJlIHRoZSBtb2R1bGUgbmFtZXMgaW4gbWV0YS9saWIvb2VxYS9ydW50aW1lLgorIyBFYWNoIG5hbWUgaW4gVEVTVF9TVUlURVMgcmVwcmVzZW50cyBhIHJlcXVpcmVkIHRlc3QgZm9yIHRoZSBpbWFnZS4gKG5vIHNraXBwaW5nIGFsbG93ZWQpCisjIEFwcGVuZGluZyAiYXV0byIgbWVhbnMgdGhhdCBpdCB3aWxsIHRyeSB0byBydW4gYWxsIHRlc3RzIHRoYXQgYXJlIHN1aXRhYmxlIGZvciB0aGUgaW1hZ2UgKGVhY2ggdGVzdCBkZWNpZGVzIHRoYXQgb24gaXQncyBvd24pLgorIyBOb3RlIHRoYXQgb3JkZXIgaW4gVEVTVF9TVUlURVMgaXMgcmVsZXZhbnQ6IHRlc3RzIGFyZSBydW4gaW4gYW4gb3JkZXIgc3VjaCB0aGF0CisjIHRlc3RzIG1lbnRpb25lZCBpbiBAc2tpcFVubGVzc1Bhc3NlZCBydW4gYmVmb3JlIHRoZSB0ZXN0cyB0aGF0IGRlcGVuZCBvbiB0aGVtLAorIyBidXQgd2l0aG91dCBzdWNoIGRlcGVuZGVuY2llcywgdGVzdHMgcnVuIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFyZSBsaXN0ZWQKKyMgaW4gVEVTVF9TVUlURVMuCisjCisjIEEgbGF5ZXIgY2FuIGFkZCBpdHMgb3duIHRlc3RzIGluIGxpYi9vZXFhL3J1bnRpbWUsIHByb3ZpZGVkIGl0IGV4dGVuZHMgQkJQQVRIIGFzIG5vcm1hbCBpbiBpdHMgbGF5ZXIuY29uZi4KKworIyBURVNUX0xPR19ESVIgY29udGFpbnMgYSBjb21tYW5kIHNzaCBsb2cgYW5kIG1heSBjb250YWluIGluZnJvbWF0aW9uIGFib3V0IHdoYXQgY29tbWFuZCBpcyBydW5uaW5nLCBvdXRwdXQgYW5kIHJldHVybiBjb2RlcyBhbmQgZm9yIHFlbXUgYSBib290IGxvZyB0aWxsIGxvZ2luLgorIyBCb290aW5nIGlzIGhhbmRsZWQgYnkgdGhpcyBjbGFzcywgYW5kIGl0J3Mgbm90IGEgdGVzdCBpbiBpdHNlbGYuCisjIFRFU1RfUUVNVUJPT1RfVElNRU9VVCBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIG1heGltdW0gdGltZSBpbiBzZWNvbmRzIHRoZSBsYXVuY2ggY29kZSB3aWxsIHdhaXQgZm9yIHRoZSBsb2dpbiBwcm9tcHQuCisKK1RFU1RfTE9HX0RJUiA/PSAiJHtXT1JLRElSfS90ZXN0aW1hZ2UiCisKK1RFU1RfRVhQT1JUX0RJUiA/PSAiJHtUTVBESVJ9L3Rlc3RpbWFnZS8ke1BOfSIKK1RFU1RfRVhQT1JUX09OTFkgPz0gIjAiCisKK1JQTVRFU1RTVUlURSA9ICIke0BiYi51dGlscy5jb250YWlucygnSU1BR0VfUEtHVFlQRScsICdycG0nLCAnc21hcnQgcnBtJywgJycsIGQpfSIKKworREVGQVVMVF9URVNUX1NVSVRFUyA9ICJwaW5nIGF1dG8iCitERUZBVUxUX1RFU1RfU1VJVEVTX3BuLWNvcmUtaW1hZ2UtbWluaW1hbCA9ICJwaW5nIgorREVGQVVMVF9URVNUX1NVSVRFU19wbi1jb3JlLWltYWdlLXNhdG8gPSAicGluZyBzc2ggZGYgY29ubm1hbiBzeXNsb2cgeG9yZyBzY3Agdm5jIGRhdGUgZG1lc2cgcGFyc2Vsb2dzICR7UlBNVEVTVFNVSVRFfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0lNQUdFX1BLR1RZUEUnLCAncnBtJywgJ3B5dGhvbicsICcnLCBkKX0iCitERUZBVUxUX1RFU1RfU1VJVEVTX3BuLWNvcmUtaW1hZ2Utc2F0by1zZGsgPSAicGluZyBzc2ggZGYgY29ubm1hbiBzeXNsb2cgeG9yZyBzY3Agdm5jIGRhdGUgcGVybCBsZGQgZ2NjIGtlcm5lbG1vZHVsZSBkbWVzZyBweXRob24gcGFyc2Vsb2dzICR7UlBNVEVTVFNVSVRFfSIKK0RFRkFVTFRfVEVTVF9TVUlURVNfcG4tY29yZS1pbWFnZS1sc2Itc2RrID0gInBpbmcgYnVpbGRjdnMgYnVpbGRpcHRhYmxlcyBidWlsZHN1ZG9rdSBjb25ubWFuIGRhdGUgZGYgZ2NjIGtlcm5lbG1vZHVsZSBsZGQgcGFtIHBhcnNlbG9ncyBwZXJsIHB5dGhvbiBzY3AgJHtSUE1URVNUU1VJVEV9IHNzaCBzeXNsb2cgbG9ncm90YXRlIgorREVGQVVMVF9URVNUX1NVSVRFU19wbi1tZXRhLXRvb2xjaGFpbiA9ICJhdXRvIgorCisjIGFhcmNoNjQgaGFzIG5vIGdyYXBoaWNzCitERUZBVUxUX1RFU1RfU1VJVEVTX3JlbW92ZV9hYXJjaDY0ID0gInhvcmcgdm5jIgorCisjcWVtdW1pcHMgaXMgdG9vIHNsb3cgZm9yIGJ1aWxkc3Vkb2t1CitERUZBVUxUX1RFU1RfU1VJVEVTX3JlbW92ZV9xZW11bWlwcyA9ICJidWlsZHN1ZG9rdSIKKworVEVTVF9TVUlURVMgPz0gIiR7REVGQVVMVF9URVNUX1NVSVRFU30iCisKK1RFU1RfUUVNVUJPT1RfVElNRU9VVCA/PSAiMTAwMCIKK1RFU1RfVEFSR0VUID89ICJxZW11IgorVEVTVF9UQVJHRVRfSVAgPz0gIiIKK1RFU1RfU0VSVkVSX0lQID89ICIiCisKK1RFU1RJTUFHRURFUEVORFMgPSAiIgorVEVTVElNQUdFREVQRU5EU19xZW11YWxsID0gInFlbXUtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgcWVtdS1oZWxwZXItbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK1RFU1RJTUFHRUxPQ0sgPSAiJHtUTVBESVJ9L3Rlc3RpbWFnZS5sb2NrIgorVEVTVElNQUdFTE9DS19xZW11YWxsID0gIiIKKworVEVTVElNQUdFX0RVTVBfRElSID89ICIvdG1wL29lLXNhdmVkLXRlc3RzLyIKKwordGVzdGltYWdlX2R1bXBfdGFyZ2V0ICgpIHsKKyAgICB0b3AgLWJuMQorICAgIHBzCisgICAgZnJlZQorICAgIGRmCisgICAgIyBUaGUgbmV4dCBjb21tYW5kIHdpbGwgZXhwb3J0IHRoZSBkZWZhdWx0IGdhdGV3YXkgSVAKKyAgICBleHBvcnQgREVGQVVMVF9HQVRFV0FZPSQoaXAgcm91dGUgfCBhd2sgJy9kZWZhdWx0LyB7IHByaW50ICQzfScpCisgICAgcGluZyAtYzMgJERFRkFVTFRfR0FURVdBWQorICAgIGRtZXNnCisgICAgbmV0c3RhdCAtYW4KKyAgICBpcCBhZGRyZXNzCisgICAgIyBOZXh0IGNvbW1hbmQgd2lsbCBkdW1wIGxvZ3MgZnJvbSAvdmFyL2xvZy8KKyAgICBmaW5kIC92YXIvbG9nLyAtdHlwZSBmIDI+L2Rldi9udWxsIC1leGVjIGVjaG8gIj09PT09PT09PT09PT09PT09PT09IiBcOyAtZXhlYyBlY2hvIHt9IFw7IC1leGVjIGVjaG8gIj09PT09PT09PT09PT09PT09PT09IiBcOyAtZXhlYyBjYXQge30gXDsgLWV4ZWMgZWNobyAiIiBcOworfQorCit0ZXN0aW1hZ2VfZHVtcF9ob3N0ICgpIHsKKyAgICB0b3AgLWJuMQorICAgIHBzIC1lZgorICAgIGZyZWUKKyAgICBkZgorICAgIG1lbXN0YXQKKyAgICBkbWVzZworICAgIG5ldHN0YXQgLWFuCit9CisKK3B5dGhvbiBkb190ZXN0aW1hZ2UoKSB7CisgICAgdGVzdGltYWdlX21haW4oZCkKK30KK2FkZHRhc2sgdGVzdGltYWdlCitkb190ZXN0aW1hZ2Vbbm9zdGFtcF0gPSAiMSIKK2RvX3Rlc3RpbWFnZVtkZXBlbmRzXSArPSAiJHtURVNUSU1BR0VERVBFTkRTfSIKK2RvX3Rlc3RpbWFnZVtsb2NrZmlsZXNdICs9ICIke1RFU1RJTUFHRUxPQ0t9IgorCitweXRob24gZG9fdGVzdHNkaygpIHsKKyAgICB0ZXN0c2RrX21haW4oZCkKK30KK2FkZHRhc2sgdGVzdHNkaworZG9fdGVzdHNka1tub3N0YW1wXSA9ICIxIgorZG9fdGVzdHNka1tkZXBlbmRzXSArPSAiJHtURVNUSU1BR0VERVBFTkRTfSIKK2RvX3Rlc3RzZGtbbG9ja2ZpbGVzXSArPSAiJHtURVNUSU1BR0VMT0NLfSIKKworIyBnZXQgdGVzdGNhc2UgbGlzdCBmcm9tIHNwZWNpZmllZCBmaWxlCisjIGlmIHBhdGggaXMgYSByZWxhdGl2ZSBwYXRoLCB0aGVuIHJlbGF0aXZlIHRvIGJ1aWxkL2NvbmYvCitkZWYgcmVhZF90ZXN0bGlzdChkLCBmcGF0aCk6CisgICAgaWYgbm90IG9zLnBhdGguaXNhYnMoZnBhdGgpOgorICAgICAgICBidWlsZGRpciA9IGQuZ2V0VmFyKCJUT1BESVIiLCBUcnVlKQorICAgICAgICBmcGF0aCA9IG9zLnBhdGguam9pbihidWlsZGRpciwgImNvbmYiLCBmcGF0aCkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZnBhdGgpOgorICAgICAgICBiYi5mYXRhbCgiTm8gc3VjaCBtYW5pZmVzdCBmaWxlOiAiLCBmcGF0aCkKKyAgICB0Y3MgPSBbXQorICAgIGZvciBsaW5lIGluIG9wZW4oZnBhdGgpLnJlYWRsaW5lcygpOgorICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgIGlmIGxpbmUgYW5kIG5vdCBsaW5lLnN0YXJ0c3dpdGgoIiMiKToKKyAgICAgICAgICAgIHRjcy5hcHBlbmQobGluZSkKKyAgICByZXR1cm4gIiAiLmpvaW4odGNzKQorCitkZWYgZ2V0X3Rlc3RzX2xpc3QoZCwgdHlwZT0icnVudGltZSIpOgorICAgIHRlc3RzdWl0ZXMgPSBbXQorICAgIHRlc3RzbGlzdCA9IFtdCisgICAgbWFuaWZlc3RzID0gZC5nZXRWYXIoIlRFU1RfU1VJVEVTX01BTklGRVNUIiwgVHJ1ZSkKKyAgICBpZiBtYW5pZmVzdHMgaXMgbm90IE5vbmU6CisgICAgICAgIG1hbmlmZXN0cyA9IG1hbmlmZXN0cy5zcGxpdCgpCisgICAgICAgIGZvciBtYW5pZmVzdCBpbiBtYW5pZmVzdHM6CisgICAgICAgICAgICB0ZXN0c3VpdGVzLmV4dGVuZChyZWFkX3Rlc3RsaXN0KGQsIG1hbmlmZXN0KS5zcGxpdCgpKQorICAgIGVsc2U6CisgICAgICAgIHRlc3RzdWl0ZXMgPSBkLmdldFZhcigiVEVTVF9TVUlURVMiLCBUcnVlKS5zcGxpdCgpCisgICAgaWYgdHlwZSA9PSAic2RrIjoKKyAgICAgICAgdGVzdHN1aXRlcyA9IChkLmdldFZhcigiVEVTVF9TVUlURVNfU0RLIiwgVHJ1ZSkgb3IgImF1dG8iKS5zcGxpdCgpCisgICAgYmJwYXRoID0gZC5nZXRWYXIoIkJCUEFUSCIsIFRydWUpLnNwbGl0KCc6JykKKworICAgICMgVGhpcyByZWxpZXMgb24gbGliLyB1bmRlciBlYWNoIGRpcmVjdG9yeSBpbiBCQlBBVEggYmVpbmcgYWRkZWQgdG8gc3lzLnBhdGgKKyAgICAjIChhcyBkb25lIGJ5IGRlZmF1bHQgaW4gYmFzZS5iYmNsYXNzKQorICAgIGZvciB0ZXN0bmFtZSBpbiB0ZXN0c3VpdGVzOgorICAgICAgICBpZiB0ZXN0bmFtZSAhPSAiYXV0byI6CisgICAgICAgICAgICBpZiB0ZXN0bmFtZS5zdGFydHN3aXRoKCJvZXFhLiIpOgorICAgICAgICAgICAgICAgIHRlc3RzbGlzdC5hcHBlbmQodGVzdG5hbWUpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgICAgIGZvciBwIGluIGJicGF0aDoKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocCwgJ2xpYicsICdvZXFhJywgdHlwZSwgdGVzdG5hbWUgKyAnLnB5JykpOgorICAgICAgICAgICAgICAgICAgICB0ZXN0c2xpc3QuYXBwZW5kKCJvZXFhLiIgKyB0eXBlICsgIi4iICsgdGVzdG5hbWUpCisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgbm90IGZvdW5kOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCdUZXN0ICVzIHNwZWNpZmllZCBpbiBURVNUX1NVSVRFUyBjb3VsZCBub3QgYmUgZm91bmQgaW4gbGliL29lcWEvcnVudGltZSB1bmRlciBCQlBBVEgnICUgdGVzdG5hbWUpCisKKyAgICBpZiAiYXV0byIgaW4gdGVzdHN1aXRlczoKKyAgICAgICAgZGVmIGFkZF9hdXRvX2xpc3QocGF0aCk6CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHBhdGgsICdfX2luaXRfXy5weScpKToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgnVGVzdHMgZGlyZWN0b3J5ICVzIGV4aXN0cyBidXQgaXMgbWlzc2luZyBfX2luaXRfXy5weScgJSBwYXRoKQorICAgICAgICAgICAgZmlsZXMgPSBzb3J0ZWQoW2YgZm9yIGYgaW4gb3MubGlzdGRpcihwYXRoKSBpZiBmLmVuZHN3aXRoKCcucHknKSBhbmQgbm90IGYuc3RhcnRzd2l0aCgnXycpXSkKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIG1vZHVsZSA9ICdvZXFhLicgKyB0eXBlICsgJy4nICsgZls6LTNdCisgICAgICAgICAgICAgICAgaWYgbW9kdWxlIG5vdCBpbiB0ZXN0c2xpc3Q6CisgICAgICAgICAgICAgICAgICAgIHRlc3RzbGlzdC5hcHBlbmQobW9kdWxlKQorCisgICAgICAgIGZvciBwIGluIGJicGF0aDoKKyAgICAgICAgICAgIHRlc3RwYXRoID0gb3MucGF0aC5qb2luKHAsICdsaWInLCAnb2VxYScsIHR5cGUpCisgICAgICAgICAgICBiYi5kZWJ1ZygyLCAnU2VhcmNoaW5nIGZvciB0ZXN0cyBpbiAlcycgJSB0ZXN0cGF0aCkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHRlc3RwYXRoKToKKyAgICAgICAgICAgICAgICBhZGRfYXV0b19saXN0KHRlc3RwYXRoKQorCisgICAgcmV0dXJuIHRlc3RzbGlzdAorCisKK2RlZiBleHBvcnRUZXN0cyhkLHRjKToKKyAgICBpbXBvcnQganNvbgorICAgIGltcG9ydCBzaHV0aWwKKyAgICBpbXBvcnQgcGtndXRpbAorCisgICAgZXhwb3J0cGF0aCA9IGQuZ2V0VmFyKCJURVNUX0VYUE9SVF9ESVIiLCBUcnVlKQorCisgICAgc2F2ZWRhdGEgPSB7fQorICAgIHNhdmVkYXRhWyJkIl0gPSB7fQorICAgIHNhdmVkYXRhWyJ0YXJnZXQiXSA9IHt9CisgICAgc2F2ZWRhdGFbImhvc3RfZHVtcGVyIl0gPSB7fQorICAgIGZvciBrZXkgaW4gdGMuX19kaWN0X186CisgICAgICAgICMgc3BlY2lhbCBjYXNlcworICAgICAgICBpZiBrZXkgIT0gImQiIGFuZCBrZXkgIT0gInRhcmdldCIgYW5kIGtleSAhPSAiaG9zdF9kdW1wZXIiOgorICAgICAgICAgICAgc2F2ZWRhdGFba2V5XSA9IGdldGF0dHIodGMsIGtleSkKKyAgICBzYXZlZGF0YVsidGFyZ2V0Il1bImlwIl0gPSB0Yy50YXJnZXQuaXAgb3IgZC5nZXRWYXIoIlRFU1RfVEFSR0VUX0lQIiwgVHJ1ZSkKKyAgICBzYXZlZGF0YVsidGFyZ2V0Il1bInNlcnZlcl9pcCJdID0gdGMudGFyZ2V0LnNlcnZlcl9pcCBvciBkLmdldFZhcigiVEVTVF9TRVJWRVJfSVAiLCBUcnVlKQorCisgICAga2V5cyA9IFsga2V5IGZvciBrZXkgaW4gZC5rZXlzKCkgaWYgbm90IGtleS5zdGFydHN3aXRoKCJfIikgYW5kIG5vdCBrZXkuc3RhcnRzd2l0aCgiQkIiKSBcCisgICAgICAgICAgICBhbmQgbm90IGtleS5zdGFydHN3aXRoKCJCX3BuIikgYW5kIG5vdCBrZXkuc3RhcnRzd2l0aCgiZG9fIikgYW5kIG5vdCBkLmdldFZhckZsYWcoa2V5LCAiZnVuYyIpXQorICAgIGZvciBrZXkgaW4ga2V5czoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2F2ZWRhdGFbImQiXVtrZXldID0gZC5nZXRWYXIoa2V5LCBUcnVlKQorICAgICAgICBleGNlcHQgYmIuZGF0YV9zbWFydC5FeHBhbnNpb25FcnJvcjoKKyAgICAgICAgICAgICMgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aG9zZSBhbnl3YXkKKyAgICAgICAgICAgIHBhc3MKKworICAgIHNhdmVkYXRhWyJob3N0X2R1bXBlciJdWyJwYXJlbnRfZGlyIl0gPSB0Yy5ob3N0X2R1bXBlci5wYXJlbnRfZGlyCisgICAgc2F2ZWRhdGFbImhvc3RfZHVtcGVyIl1bImNtZHMiXSA9IHRjLmhvc3RfZHVtcGVyLmNtZHMKKworICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgInRlc3RkYXRhLmpzb24iKSwgInciKSBhcyBmOgorICAgICAgICAgICAganNvbi5kdW1wKHNhdmVkYXRhLCBmLCBza2lwa2V5cz1UcnVlLCBpbmRlbnQ9NCwgc29ydF9rZXlzPVRydWUpCisKKyAgICAjIG5vdyBzdGFydCBjb3B5aW5nIGZpbGVzCisgICAgIyB3ZSdsbCBiYXNpY2FsbHkgY29weSBldmVyeXRoaW5nIHVuZGVyIG1ldGEvbGliL29lcWEsIHdpdGggdGhlc2UgZXhjZXB0aW9ucworICAgICMgIC0gb2VxYS90YXJnZXRjb250cm9sLnB5IC0gbm90IG5lZWRlZAorICAgICMgIC0gb2VxYS9zZWxmdGVzdCAtIHNvbWV0aGluZyBlbHNlCisgICAgIyBUaGF0IG1lYW5zOgorICAgICMgICAtIGFsbCB0ZXN0cyBmcm9tIG9lcWEvcnVudGltZSBkZWZpbmVkIGluIFRFU1RfU1VJVEVTIChpbmNsdWRpbmcgZnJvbSBvdGhlciBsYXllcnMpCisgICAgIyAgIC0gdGhlIGNvbnRlbnRzIG9mIG9lcWEvdXRpbHMgYW5kIG9lcWEvcnVudGltZS9maWxlcworICAgICMgICAtIG9lcWEvb2V0ZXN0LnB5IGFuZCBvZXFhL3J1bmV4cG9ydC5weSAodGhpcyB3aWxsIGdldCBjb3BpZWQgdG8gZXhwb3J0cGF0aCBub3QgZXhwb3J0cGF0aC9vZXFhKQorICAgICMgICAtIF9faW5pdF9fLnB5IGZpbGVzCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguam9pbihleHBvcnRwYXRoLCAib2VxYS9ydW50aW1lL2ZpbGVzIikpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguam9pbihleHBvcnRwYXRoLCAib2VxYS91dGlscyIpKQorICAgICMgY29weSB0ZXN0IG1vZHVsZXMsIHRoaXMgc2hvdWxkIGNvdmVyIHRlc3RzIGluIG90aGVyIGxheWVycyB0b28KKyAgICBmb3IgdCBpbiB0Yy50ZXN0c2xpc3Q6CisgICAgICAgIG1vZCA9IHBrZ3V0aWwuZ2V0X2xvYWRlcih0KQorICAgICAgICBzaHV0aWwuY29weTIobW9kLmZpbGVuYW1lLCBvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgIm9lcWEvcnVudGltZSIpKQorICAgICMgY29weSBfX2luaXRfXy5weSBmaWxlcworICAgIG9lcWFkaXIgPSBwa2d1dGlsLmdldF9sb2FkZXIoIm9lcWEiKS5maWxlbmFtZQorICAgIHNodXRpbC5jb3B5Mihvcy5wYXRoLmpvaW4ob2VxYWRpciwgIl9faW5pdF9fLnB5IiksIG9zLnBhdGguam9pbihleHBvcnRwYXRoLCAib2VxYSIpKQorICAgIHNodXRpbC5jb3B5Mihvcy5wYXRoLmpvaW4ob2VxYWRpciwgInJ1bnRpbWUvX19pbml0X18ucHkiKSwgb3MucGF0aC5qb2luKGV4cG9ydHBhdGgsICJvZXFhL3J1bnRpbWUiKSkKKyAgICAjIGNvcHkgb2VxYS9vZXRlc3QucHkgYW5kIG9lcWEvcnVuZXhwb3J0ZWQucHkKKyAgICBzaHV0aWwuY29weTIob3MucGF0aC5qb2luKG9lcWFkaXIsICJvZXRlc3QucHkiKSwgb3MucGF0aC5qb2luKGV4cG9ydHBhdGgsICJvZXFhIikpCisgICAgc2h1dGlsLmNvcHkyKG9zLnBhdGguam9pbihvZXFhZGlyLCAicnVuZXhwb3J0ZWQucHkiKSwgZXhwb3J0cGF0aCkKKyAgICAjIGNvcHkgb2VxYS91dGlscy8qLnB5CisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsob3MucGF0aC5qb2luKG9lcWFkaXIsICJ1dGlscyIpKToKKyAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICBpZiBmLmVuZHN3aXRoKCIucHkiKToKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weTIob3MucGF0aC5qb2luKHJvb3QsIGYpLCBvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgIm9lcWEvdXRpbHMiKSkKKyAgICAjIGNvcHkgb2VxYS9ydW50aW1lL2ZpbGVzLyoKKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhvcy5wYXRoLmpvaW4ob2VxYWRpciwgInJ1bnRpbWUvZmlsZXMiKSk6CisgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgc2h1dGlsLmNvcHkyKG9zLnBhdGguam9pbihyb290LCBmKSwgb3MucGF0aC5qb2luKGV4cG9ydHBhdGgsICJvZXFhL3J1bnRpbWUvZmlsZXMiKSkKKworICAgIGJiLnBsYWluKCJFeHBvcnRlZCB0ZXN0cyB0bzogJXMiICUgZXhwb3J0cGF0aCkKKworCitkZWYgdGVzdGltYWdlX21haW4oZCk6CisgICAgaW1wb3J0IHVuaXR0ZXN0CisgICAgaW1wb3J0IG9zCisgICAgaW1wb3J0IG9lcWEucnVudGltZQorICAgIGltcG9ydCB0aW1lCisgICAgaW1wb3J0IHNpZ25hbAorICAgIGZyb20gb2VxYS5vZXRlc3QgaW1wb3J0IGxvYWRUZXN0cywgcnVuVGVzdHMKKyAgICBmcm9tIG9lcWEudGFyZ2V0Y29udHJvbCBpbXBvcnQgZ2V0X3RhcmdldF9jb250cm9sbGVyCisgICAgZnJvbSBvZXFhLnV0aWxzLmR1bXAgaW1wb3J0IGdldF9ob3N0X2R1bXBlcgorCisgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgIGV4cG9ydCA9IG9lLnV0aWxzLmNvbmRpdGlvbmFsKCJURVNUX0VYUE9SVF9PTkxZIiwgIjEiLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZC5nZXRWYXIoIlRFU1RfTE9HX0RJUiIsIFRydWUpKQorICAgIGlmIGV4cG9ydDoKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKGQuZ2V0VmFyKCJURVNUX0VYUE9SVF9ESVIiLCBUcnVlKSwgcmVjdXJzZT1UcnVlKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZC5nZXRWYXIoIlRFU1RfRVhQT1JUX0RJUiIsIFRydWUpKQorCisgICAgIyB0ZXN0cyBpbiBURVNUX1NVSVRFUyBiZWNvbWUgcmVxdWlyZWQgdGVzdHMKKyAgICAjIHRoZXkgd29uJ3QgYmUgc2tpcHBlZCBldmVuIGlmIHRoZXkgYXJlbid0IHN1aXRhYmxlIGZvciBhIGltYWdlIChsaWtlIHhvcmcgZm9yIG1pbmltYWwpCisgICAgIyB0ZXN0c2xpc3QgaXMgd2hhdCB3ZSdsbCBhY3R1YWxseSBwYXNzIHRvIHRoZSB1bml0dGVzdCBsb2FkZXIKKyAgICB0ZXN0c2xpc3QgPSBnZXRfdGVzdHNfbGlzdChkKQorICAgIHRlc3RzcmVxdWlyZWQgPSBbdCBmb3IgdCBpbiBkLmdldFZhcigiVEVTVF9TVUlURVMiLCBUcnVlKS5zcGxpdCgpIGlmIHQgIT0gImF1dG8iXQorCisgICAgdGFnZXhwID0gZC5nZXRWYXIoIlRFU1RfU1VJVEVTX1RBR1MiLCBUcnVlKQorCisgICAgIyB3ZSBuZWVkIHRoZSBob3N0IGR1bXBlciBpbiB0ZXN0IGNvbnRleHQKKyAgICBob3N0X2R1bXBlciA9IGdldF9ob3N0X2R1bXBlcihkKQorCisgICAgIyB0aGUgcm9ib3QgZGFuY2UKKyAgICB0YXJnZXQgPSBnZXRfdGFyZ2V0X2NvbnRyb2xsZXIoZCkKKworICAgIGNsYXNzIFRlc3RDb250ZXh0KG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgICAgIHNlbGYudGVzdHNsaXN0ID0gdGVzdHNsaXN0CisgICAgICAgICAgICBzZWxmLnRhZ2V4cCA9IHRhZ2V4cAorICAgICAgICAgICAgc2VsZi50ZXN0c3JlcXVpcmVkID0gdGVzdHNyZXF1aXJlZAorICAgICAgICAgICAgc2VsZi5maWxlc2RpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKG9lcWEucnVudGltZS5fX2ZpbGVfXykpLCJmaWxlcyIpCisgICAgICAgICAgICBzZWxmLnRhcmdldCA9IHRhcmdldAorICAgICAgICAgICAgc2VsZi5ob3N0X2R1bXBlciA9IGhvc3RfZHVtcGVyCisgICAgICAgICAgICBzZWxmLmltYWdlZmVhdHVyZXMgPSBkLmdldFZhcigiSU1BR0VfRkVBVFVSRVMiLCBUcnVlKS5zcGxpdCgpCisgICAgICAgICAgICBzZWxmLmRpc3Ryb2ZlYXR1cmVzID0gZC5nZXRWYXIoIkRJU1RST19GRUFUVVJFUyIsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgICAgIG1hbmlmZXN0ID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJERVBMT1lfRElSX0lNQUdFIiwgVHJ1ZSksIGQuZ2V0VmFyKCJJTUFHRV9MSU5LX05BTUUiLCBUcnVlKSArICIubWFuaWZlc3QiKQorICAgICAgICAgICAgc2VsZi5zaWd0ZXJtID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYub3JpZ3NpZ3Rlcm1oYW5kbGVyID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHVEVSTSkKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIHNlbGYuc2lndGVybV9leGNlcHRpb24pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG1hbmlmZXN0KSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnBrZ21hbmlmZXN0ID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIk5vIHBhY2thZ2UgbWFuaWZlc3QgZmlsZSBmb3VuZC4gRGlkIHlvdSBidWlsZCB0aGUgaW1hZ2U/XG4lcyIgJSBlKQorCisgICAgICAgIGRlZiBzaWd0ZXJtX2V4Y2VwdGlvbihzZWxmLCBzaWdudW0sIHN0YWNrZnJhbWUpOgorICAgICAgICAgICAgYmIud2FybigiVGVzdEltYWdlIHJlY2VpdmVkIFNJR1RFUk0sIHNodXR0aW5nIGRvd24uLi4iKQorICAgICAgICAgICAgc2VsZi5zaWd0ZXJtID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi50YXJnZXQuc3RvcCgpCisKKyAgICAjIHRlc3QgY29udGV4dAorICAgIHRjID0gVGVzdENvbnRleHQoKQorCisgICAgIyB0aGlzIGlzIGEgZHVtbXkgbG9hZCBvZiB0ZXN0cworICAgICMgd2UgYXJlIGRvaW5nIHRoYXQgdG8gZmluZCBjb21waWxlIGVycm9ycyBpbiB0aGUgdGVzdHMgdGhlbXNlbHZlcworICAgICMgYmVmb3JlIGJvb3RpbmcgdGhlIGltYWdlCisgICAgdHJ5OgorICAgICAgICBsb2FkVGVzdHModGMpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIGJiLmZhdGFsKCJMb2FkaW5nIHRlc3RzIGZhaWxlZDpcbiVzIiAlIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisKKyAgICB0YXJnZXQuZGVwbG95KCkKKworICAgIHRyeToKKyAgICAgICAgdGFyZ2V0LnN0YXJ0KCkKKyAgICAgICAgaWYgZXhwb3J0OgorICAgICAgICAgICAgZXhwb3J0VGVzdHMoZCx0YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0YXJ0dGltZSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICByZXN1bHQgPSBydW5UZXN0cyh0YykKKyAgICAgICAgICAgIHN0b3B0aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIGlmIHJlc3VsdC53YXNTdWNjZXNzZnVsKCk6CisgICAgICAgICAgICAgICAgYmIucGxhaW4oIiVzIC0gUmFuICVkIHRlc3QlcyBpbiAlLjNmcyIgJSAocG4sIHJlc3VsdC50ZXN0c1J1biwgcmVzdWx0LnRlc3RzUnVuICE9IDEgYW5kICJzIiBvciAiIiwgc3RvcHRpbWUgLSBzdGFydHRpbWUpKQorICAgICAgICAgICAgICAgIG1zZyA9ICIlcyAtIE9LIC0gQWxsIHJlcXVpcmVkIHRlc3RzIHBhc3NlZCIgJSBwbgorICAgICAgICAgICAgICAgIHNraXBwZWQgPSBsZW4ocmVzdWx0LnNraXBwZWQpCisgICAgICAgICAgICAgICAgaWYgc2tpcHBlZDoKKyAgICAgICAgICAgICAgICAgICAgbXNnICs9ICIgKHNraXBwZWQ9JWQpIiAlIHNraXBwZWQKKyAgICAgICAgICAgICAgICBiYi5wbGFpbihtc2cpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzIC0gRkFJTEVEIC0gY2hlY2sgdGhlIHRhc2sgbG9nIGFuZCB0aGUgc3NoIGxvZyIgJSBwbiApCisgICAgZmluYWxseToKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVEVSTSwgdGMub3JpZ3NpZ3Rlcm1oYW5kbGVyKQorICAgICAgICB0YXJnZXQuc3RvcCgpCisKK3Rlc3RpbWFnZV9tYWluW3ZhcmRlcHNleGNsdWRlXSA9KyAiQkJfT1JJR0VOViIKKworCitkZWYgdGVzdHNka19tYWluKGQpOgorICAgIGltcG9ydCB1bml0dGVzdAorICAgIGltcG9ydCBvcworICAgIGltcG9ydCBnbG9iCisgICAgaW1wb3J0IG9lcWEucnVudGltZQorICAgIGltcG9ydCBvZXFhLnNkaworICAgIGltcG9ydCB0aW1lCisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICBmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBsb2FkVGVzdHMsIHJ1blRlc3RzCisKKyAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGQuZ2V0VmFyKCJURVNUX0xPR19ESVIiLCBUcnVlKSkKKworICAgICMgdGVzdHMgaW4gVEVTVF9TVUlURVMgYmVjb21lIHJlcXVpcmVkIHRlc3RzCisgICAgIyB0aGV5IHdvbid0IGJlIHNraXBwZWQgZXZlbiBpZiB0aGV5IGFyZW4ndCBzdWl0YWJsZS4KKyAgICAjIHRlc3RzbGlzdCBpcyB3aGF0IHdlJ2xsIGFjdHVhbGx5IHBhc3MgdG8gdGhlIHVuaXR0ZXN0IGxvYWRlcgorICAgIHRlc3RzbGlzdCA9IGdldF90ZXN0c19saXN0KGQsICJzZGsiKQorICAgIHRlc3RzcmVxdWlyZWQgPSBbdCBmb3IgdCBpbiAoZC5nZXRWYXIoIlRFU1RfU1VJVEVTX1NESyIsIFRydWUpIG9yICJhdXRvIikuc3BsaXQoKSBpZiB0ICE9ICJhdXRvIl0KKworICAgIHRjbmFtZSA9IGQuZXhwYW5kKCIke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnNoIikKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModGNuYW1lKToKKyAgICAgICAgYmIuZmF0YWwoIlRoZSB0b29sY2hhaW4gaXMgbm90IGJ1aWx0LiBCdWlsZCBpdCBiZWZvcmUgcnVubmluZyB0aGUgdGVzdHM6ICdiaXRiYWtlIDxpbWFnZT4gLWMgcG9wdWxhdGVfc2RrJyAuIikKKworICAgIGNsYXNzIFRlc3RDb250ZXh0KG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgICAgIHNlbGYudGVzdHNsaXN0ID0gdGVzdHNsaXN0CisgICAgICAgICAgICBzZWxmLnRlc3RzcmVxdWlyZWQgPSB0ZXN0c3JlcXVpcmVkCisgICAgICAgICAgICBzZWxmLmZpbGVzZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgob2VxYS5ydW50aW1lLl9fZmlsZV9fKSksImZpbGVzIikKKyAgICAgICAgICAgIHNlbGYuc2RrdGVzdGRpciA9IHNka3Rlc3RkaXIKKyAgICAgICAgICAgIHNlbGYuc2RrZW52ID0gc2RrZW52CisgICAgICAgICAgICBzZWxmLmltYWdlZmVhdHVyZXMgPSBkLmdldFZhcigiSU1BR0VfRkVBVFVSRVMiLCBUcnVlKS5zcGxpdCgpCisgICAgICAgICAgICBzZWxmLmRpc3Ryb2ZlYXR1cmVzID0gZC5nZXRWYXIoIkRJU1RST19GRUFUVVJFUyIsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgICAgIG1hbmlmZXN0ID0gZC5nZXRWYXIoIlNES19UQVJHRVRfTUFOSUZFU1QiLCBUcnVlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihtYW5pZmVzdCkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wa2dtYW5pZmVzdCA9IGYucmVhZCgpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJObyBwYWNrYWdlIG1hbmlmZXN0IGZpbGUgZm91bmQuIERpZCB5b3UgYnVpbGQgdGhlIHNkayBpbWFnZT9cbiVzIiAlIGUpCisgICAgICAgICAgICBob3N0bWFuaWZlc3QgPSBkLmdldFZhcigiU0RLX0hPU1RfTUFOSUZFU1QiLCBUcnVlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggb3Blbihob3N0bWFuaWZlc3QpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaG9zdHBrZ21hbmlmZXN0ID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIk5vIGhvc3QgcGFja2FnZSBtYW5pZmVzdCBmaWxlIGZvdW5kLiBEaWQgeW91IGJ1aWxkIHRoZSBzZGsgaW1hZ2U/XG4lcyIgJSBlKQorCisgICAgc2RrdGVzdGRpciA9IGQuZXhwYW5kKCIke1dPUktESVJ9L3Rlc3RpbWFnZS1zZGsvIikKKyAgICBiYi51dGlscy5yZW1vdmUoc2RrdGVzdGRpciwgVHJ1ZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoc2RrdGVzdGRpcikKKyAgICB0cnk6CisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCJjZCAlczsgJXMgPDxFT0Zcbi4vdGNcbllcbkVPRiIgJSAoc2RrdGVzdGRpciwgdGNuYW1lKSwgc2hlbGw9VHJ1ZSkKKyAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgYmIuZmF0YWwoIkNvdWxkbid0IGluc3RhbGwgdGhlIFNESzpcbiVzIiAlIGUub3V0cHV0KQorCisgICAgdHJ5OgorICAgICAgICB0YXJnZXRzID0gZ2xvYi5nbG9iKGQuZXhwYW5kKHNka3Rlc3RkaXIgKyAiL3RjL2Vudmlyb25tZW50LXNldHVwLSoiKSkKKyAgICAgICAgYmIud2FybihzdHIodGFyZ2V0cykpCisgICAgICAgIGZvciBzZGtlbnYgaW4gdGFyZ2V0czoKKyAgICAgICAgICAgIGJiLnBsYWluKCJUZXN0aW5nICVzIiAlIHNka2VudikKKyAgICAgICAgICAgICMgdGVzdCBjb250ZXh0CisgICAgICAgICAgICB0YyA9IFRlc3RDb250ZXh0KCkKKworICAgICAgICAgICAgIyB0aGlzIGlzIGEgZHVtbXkgbG9hZCBvZiB0ZXN0cworICAgICAgICAgICAgIyB3ZSBhcmUgZG9pbmcgdGhhdCB0byBmaW5kIGNvbXBpbGUgZXJyb3JzIGluIHRoZSB0ZXN0cyB0aGVtc2VsdmVzCisgICAgICAgICAgICAjIGJlZm9yZSBib290aW5nIHRoZSBpbWFnZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxvYWRUZXN0cyh0YywgInNkayIpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJMb2FkaW5nIHRlc3RzIGZhaWxlZDpcbiVzIiAlIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisKKyAgICAKKyAgICAgICAgICAgIHN0YXJ0dGltZSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICByZXN1bHQgPSBydW5UZXN0cyh0YywgInNkayIpCisgICAgICAgICAgICBzdG9wdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICBpZiByZXN1bHQud2FzU3VjY2Vzc2Z1bCgpOgorICAgICAgICAgICAgICAgIGJiLnBsYWluKCIlcyBTREsoJXMpOiVzIC0gUmFuICVkIHRlc3QlcyBpbiAlLjNmcyIgJSAocG4sIG9zLnBhdGguYmFzZW5hbWUodGNuYW1lKSwgb3MucGF0aC5iYXNlbmFtZShzZGtlbnYpLHJlc3VsdC50ZXN0c1J1biwgcmVzdWx0LnRlc3RzUnVuICE9IDEgYW5kICJzIiBvciAiIiwgc3RvcHRpbWUgLSBzdGFydHRpbWUpKQorICAgICAgICAgICAgICAgIG1zZyA9ICIlcyAtIE9LIC0gQWxsIHJlcXVpcmVkIHRlc3RzIHBhc3NlZCIgJSBwbgorICAgICAgICAgICAgICAgIHNraXBwZWQgPSBsZW4ocmVzdWx0LnNraXBwZWQpCisgICAgICAgICAgICAgICAgaWYgc2tpcHBlZDoKKyAgICAgICAgICAgICAgICAgICAgbXNnICs9ICIgKHNraXBwZWQ9JWQpIiAlIHNraXBwZWQKKyAgICAgICAgICAgICAgICBiYi5wbGFpbihtc2cpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzIC0gRkFJTEVEIC0gY2hlY2sgdGhlIHRhc2sgbG9nIGFuZCB0aGUgY29tbWFuZHMgbG9nIiAlIHBuICkKKyAgICBmaW5hbGx5OgorICAgICAgICBiYi51dGlscy5yZW1vdmUoc2RrdGVzdGRpciwgVHJ1ZSkKKwordGVzdHNka19tYWluW3ZhcmRlcHNleGNsdWRlXSA9KyAiQkJfT1JJR0VOViIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdGV4aW5mby5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdGV4aW5mby5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZWZiY2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90ZXhpbmZvLmJiY2xhc3MKQEAgLTAsMCArMSwxNSBAQAorIyBUaGlzIGNsYXNzIGlzIGluaGVyaXRlZCBieSByZWNpcGVzIHdob3NlIHVwc3RyZWFtIHBhY2thZ2VzIGludm9rZSB0aGUKKyMgdGV4aW5mbyB1dGlsaXRpZXMgYXQgYnVpbGQtdGltZS4gTmF0aXZlIGFuZCBjcm9zcyByZWNpcGVzIGFyZSBtYWRlIHRvIHVzZSB0aGUKKyMgZHVtbXkgc2NyaXB0cyBwcm92aWRlZCBieSB0ZXhpbmZvLWR1bW15LW5hdGl2ZSwgZm9yIGltcHJvdmVkIHBlcmZvcm1hbmNlLiAKKyMgVGFyZ2V0IGFyY2hpdGVjdHVyZSByZWNpcGVzIHVzZSB0aGUgZ2VudWluZSBUZXhpbmZvIHV0aWxpdGllcy4gQnkgZGVmYXVsdCwgCisjIHRoZXkgdXNlIHRoZSBUZXhpbmZvIHV0aWxpdGllcyBvbiB0aGUgaG9zdCBzeXN0ZW0uIElmIHlvdSB3YW50IHRvIHVzZSB0aGUKKyMgVGV4aW5mbyByZWNpcGUgc2hpcHBlZCB3aXRoIHlvY28sIHlvdSBjYW4gcmVtb3ZlIHRleGluZm8tbmF0aXZlIGZyb20gCisjIEFTU1VNRV9QUk9WSURFRCBhbmQgbWFrZWluZm8gZnJvbSBTQU5JVFlfUkVRVUlSRURfVVRJTElUSUVTLgorCitURVhERVAgPSAidGV4aW5mby1uYXRpdmUiCitURVhERVBfY2xhc3MtbmF0aXZlID0gInRleGluZm8tZHVtbXktbmF0aXZlIgorVEVYREVQX2NsYXNzLWNyb3NzID0gInRleGluZm8tZHVtbXktbmF0aXZlIgorREVQRU5EU19hcHBlbmQgPSAiICR7VEVYREVQfSIKK1BBVEhfcHJlcGVuZF9jbGFzcy1uYXRpdmUgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3RleGluZm8tZHVtbXktbmF0aXZlOiIKK1BBVEhfcHJlcGVuZF9jbGFzcy1jcm9zcyA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vdGV4aW5mby1kdW1teS1uYXRpdmU6IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90aW5kZXJjbGllbnQuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3RpbmRlcmNsaWVudC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ODRlZmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90aW5kZXJjbGllbnQuYmJjbGFzcwpAQCAtMCwwICsxLDM2OCBAQAorZGVmIHRpbmRlcl9odHRwX3Bvc3Qoc2VydmVyLCBzZWxlY3RvciwgY29udGVudF90eXBlLCBib2R5KToKKyAgICBpbXBvcnQgaHR0cGxpYgorICAgICMgbm93IHBvc3QgaXQKKyAgICBmb3IgaSBpbiByYW5nZSgwLDUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBoID0gaHR0cGxpYi5IVFRQKHNlcnZlcikKKyAgICAgICAgICAgIGgucHV0cmVxdWVzdCgnUE9TVCcsIHNlbGVjdG9yKQorICAgICAgICAgICAgaC5wdXRoZWFkZXIoJ2NvbnRlbnQtdHlwZScsIGNvbnRlbnRfdHlwZSkKKyAgICAgICAgICAgIGgucHV0aGVhZGVyKCdjb250ZW50LWxlbmd0aCcsIHN0cihsZW4oYm9keSkpKQorICAgICAgICAgICAgaC5lbmRoZWFkZXJzKCkKKyAgICAgICAgICAgIGguc2VuZChib2R5KQorICAgICAgICAgICAgZXJyY29kZSwgZXJybXNnLCBoZWFkZXJzID0gaC5nZXRyZXBseSgpCisgICAgICAgICAgICAjcHJpbnQgZXJyY29kZSwgZXJybXNnLCBoZWFkZXJzCisgICAgICAgICAgICByZXR1cm4gKGVycmNvZGUsZXJybXNnLCBoZWFkZXJzLCBoLmZpbGUpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHByaW50ICJFcnJvciBzZW5kaW5nIHRoZSByZXBvcnQhIgorICAgICAgICAgICAgIyB0cnkgYWdhaW4KKyAgICAgICAgICAgIHBhc3MKKworICAgICMgcmV0dXJuIHNvbWUgZ2FyYmFnZQorICAgIHJldHVybiAoLTEsICJ1bmtub3duIiwgInVua25vd24iLCBOb25lKQorCitkZWYgdGluZGVyX2Zvcm1fZGF0YShib3VuZCwgZGljdCwgbG9nKToKKyAgICBvdXRwdXQgPSBbXQorICAgICMgZm9yIGVhY2gga2V5IGluIHRoZSBkaWN0aW9uYXJ5CisgICAgZm9yIG5hbWUgaW4gZGljdDoKKyAgICAgICAgYXNzZXJ0IGRpY3RbbmFtZV0KKyAgICAgICAgb3V0cHV0LmFwcGVuZCggIi0tIiArIGJvdW5kICkKKyAgICAgICAgb3V0cHV0LmFwcGVuZCggJ0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0iJXMiJyAlIG5hbWUgKQorICAgICAgICBvdXRwdXQuYXBwZW5kKCAiIiApCisgICAgICAgIG91dHB1dC5hcHBlbmQoIGRpY3RbbmFtZV0gKQorICAgIGlmIGxvZzoKKyAgICAgICAgb3V0cHV0LmFwcGVuZCggIi0tIiArIGJvdW5kICkKKyAgICAgICAgb3V0cHV0LmFwcGVuZCggJ0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0ibG9nIjsgZmlsZW5hbWU9ImxvZy50eHQiJyApCisgICAgICAgIG91dHB1dC5hcHBlbmQoICcnICkKKyAgICAgICAgb3V0cHV0LmFwcGVuZCggbG9nICkKKyAgICBvdXRwdXQuYXBwZW5kKCAnLS0nICsgYm91bmQgKyAnLS0nICkKKyAgICBvdXRwdXQuYXBwZW5kKCAnJyApCisKKyAgICByZXR1cm4gIlxyXG4iLmpvaW4ob3V0cHV0KQorCitkZWYgdGluZGVyX3RpbWVfc3RyaW5nKCk6CisgICAgIiIiCisgICAgUmV0dXJuIHRoZSB0aW1lIGFzIEdNVAorICAgICIiIgorICAgIHJldHVybiAiIgorCitkZWYgdGluZGVyX2Zvcm1hdF9odHRwX3Bvc3QoZCxzdGF0dXMsbG9nKToKKyAgICAiIiIKKyAgICBGb3JtYXQgdGhlIFRpbmRlcmJveCBIVFRQIHBvc3Qgd2l0aCB0aGUgZGF0YSBuZWVkZWQKKyAgICBmb3IgdGhlIHRpbmRlcmJveCB0byBiZSBoYXBweS4KKyAgICAiIiIKKworICAgIGltcG9ydCByYW5kb20KKworICAgICMgdGhlIHZhcmlhYmxlcyB3ZSB3aWxsIG5lZWQgdG8gc2VuZCBvbiB0aGlzIGZvcm0gcG9zdAorICAgIHZhcmlhYmxlcyA9ICB7CisgICAgICAgICJ0cmVlIiAgICAgICAgIDogZC5nZXRWYXIoJ1RJTkRFUl9UUkVFJywgVHJ1ZSksCisgICAgICAgICJtYWNoaW5lX25hbWUiIDogZC5nZXRWYXIoJ1RJTkRFUl9NQUNISU5FJywgVHJ1ZSksCisgICAgICAgICJvcyIgICAgICAgICAgIDogb3MudW5hbWUoKVswXSwKKyAgICAgICAgIm9zX3ZlcnNpb24iICAgOiBvcy51bmFtZSgpWzJdLAorICAgICAgICAiY29tcGlsZXIiICAgICA6ICJnY2MiLAorICAgICAgICAiY2xvYmJlciIgICAgICA6IGQuZ2V0VmFyKCdUSU5ERVJfQ0xPQkJFUicsIFRydWUpIG9yICIwIiwKKyAgICAgICAgInNyY2RhdGUiICAgICAgOiBkLmdldFZhcignU1JDREFURScsIFRydWUpLAorICAgICAgICAiUE4iICAgICAgICAgICA6IGQuZ2V0VmFyKCdQTicsIFRydWUpLAorICAgICAgICAiUFYiICAgICAgICAgICA6IGQuZ2V0VmFyKCdQVicsIFRydWUpLAorICAgICAgICAiUFIiICAgICAgICAgICA6IGQuZ2V0VmFyKCdQUicsIFRydWUpLAorICAgICAgICAiRklMRSIgICAgICAgICA6IGQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkgb3IgIk4vQSIsCisgICAgICAgICJUQVJHRVRBUkNIIiAgIDogZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSksCisgICAgICAgICJUQVJHRVRGUFUiICAgIDogZC5nZXRWYXIoJ1RBUkdFVF9GUFUnLCBUcnVlKSBvciAiVW5rbm93biIsCisgICAgICAgICJUQVJHRVRPUyIgICAgIDogZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpIG9yICJVbmtub3duIiwKKyAgICAgICAgIk1BQ0hJTkUiICAgICAgOiBkLmdldFZhcignTUFDSElORScsIFRydWUpIG9yICJVbmtub3duIiwKKyAgICAgICAgIkRJU1RSTyIgICAgICAgOiBkLmdldFZhcignRElTVFJPJywgVHJ1ZSkgb3IgIlVua25vd24iLAorICAgICAgICAiemVja2Utcm9ja3MiICA6ICJzdXJlIiwKKyAgICB9CisKKyAgICAjIG9wdGlvbmFsbHkgYWRkIHRoZSBzdGF0dXMKKyAgICBpZiBzdGF0dXM6CisgICAgICAgIHZhcmlhYmxlc1sic3RhdHVzIl0gPSBzdHIoc3RhdHVzKQorCisgICAgIyB0cnkgdG8gbG9hZCB0aGUgbWFjaGluZSBpZAorICAgICMgd2Ugb25seSBuZWVkIG9uIGJ1aWxkX3N0YXR1cy5wbCBidXQgc2VuZGluZyBpdAorICAgICMgYWx3YXlzIGRvZXMgbm90IGh1cnQKKyAgICB0cnk6CisgICAgICAgIGYgPSBmaWxlKGQuZ2V0VmFyKCdUTVBESVInLFRydWUpKycvdGluZGVyLW1hY2hpbmUuaWQnLCAncicpCisgICAgICAgIGlkID0gZi5yZWFkKCkKKyAgICAgICAgdmFyaWFibGVzWydtYWNoaW5lX2lkJ10gPSBpZAorICAgIGV4Y2VwdDoKKyAgICAgICAgcGFzcworCisgICAgIyB0aGUgYm91bmRhcnkgd2Ugd2lsbCBuZWVkCisgICAgYm91bmRhcnkgPSAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSVkIiAlIGludChyYW5kb20ucmFuZG9tKCkqMTAwMDAwMDAwMDAwMCkKKworICAgICMgbm93IGZvcm1hdCB0aGUgYm9keQorICAgIGJvZHkgPSB0aW5kZXJfZm9ybV9kYXRhKCBib3VuZGFyeSwgdmFyaWFibGVzLCBsb2cgKQorCisgICAgcmV0dXJuICgibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JXMiICUgYm91bmRhcnkpLGJvZHkKKworCitkZWYgdGluZGVyX2J1aWxkX3N0YXJ0KGQpOgorICAgICIiIgorICAgIEluZm9ybSB0aGUgdGluZGVyYm94IHRoYXQgYSBidWlsZCBpcyBzdGFydGluZy4gV2UgZG8gdGhpcworICAgIGJ5IHBvc3Rpbmcgb3VyIG5hbWUgYW5kIHRyZWUgdG8gdGhlIGJ1aWxkX3N0YXJ0LnBsIHNjcmlwdAorICAgIG9uIHRoZSBzZXJ2ZXIuCisgICAgIiIiCisKKyAgICAjIGdldCB0aGUgYm9keSBhbmQgdHlwZQorICAgIGNvbnRlbnRfdHlwZSwgYm9keSA9IHRpbmRlcl9mb3JtYXRfaHR0cF9wb3N0KGQsTm9uZSxOb25lKQorICAgIHNlcnZlciA9IGQuZ2V0VmFyKCdUSU5ERVJfSE9TVCcsIFRydWUgKQorICAgIHVybCAgICA9IGQuZ2V0VmFyKCdUSU5ERVJfVVJMJywgVHJ1ZSApCisKKyAgICBzZWxlY3RvciA9IHVybCArICIveG1sL2J1aWxkX3N0YXJ0LnBsIgorCisgICAgI3ByaW50ICJzZWxlY3RvciAlcyBhbmQgdXJsICVzIiAlIChzZWxlY3RvciwgdXJsKQorCisgICAgIyBub3cgcG9zdCBpdAorICAgIGVycmNvZGUsIGVycm1zZywgaGVhZGVycywgaF9maWxlID0gdGluZGVyX2h0dHBfcG9zdChzZXJ2ZXIsc2VsZWN0b3IsY29udGVudF90eXBlLCBib2R5KQorICAgICNwcmludCBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMKKyAgICByZXBvcnQgPSBoX2ZpbGUucmVhZCgpCisKKyAgICAjIG5vdyBsZXQgdXMgZmluZCB0aGUgbWFjaGluZSBpZCB0aGF0IHdhcyBhc3NpZ25lZCB0byB1cworICAgIHNlYXJjaCA9ICI8bWFjaGluZSBpZD0nIgorICAgIHJlcG9ydCA9IHJlcG9ydFtyZXBvcnQuZmluZChzZWFyY2gpK2xlbihzZWFyY2gpOl0KKyAgICByZXBvcnQgPSByZXBvcnRbMDpyZXBvcnQuZmluZCgiJyIpXQorCisgICAgYmIubm90ZSgiTWFjaGluZSBJRCBhc3NpZ25lZCBieSB0aW5kZXJib3g6ICVzIiAlIHJlcG9ydCApCisKKyAgICAjIG5vdyB3ZSB3aWxsIG5lZWQgdG8gc2F2ZSB0aGUgbWFjaGluZSBudW1iZXIKKyAgICAjIHdlIHdpbGwgb3ZlcnJpZGUgYW55IHByZXZpb3VzIG51bWJlcnMKKyAgICBmID0gZmlsZShkLmdldFZhcignVE1QRElSJywgVHJ1ZSkrIi90aW5kZXItbWFjaGluZS5pZCIsICd3JykKKyAgICBmLndyaXRlKHJlcG9ydCkKKworCitkZWYgdGluZGVyX3NlbmRfaHR0cChkLCBzdGF0dXMsIF9sb2cpOgorICAgICIiIgorICAgIFNlbmQgdGhpcyBsb2cgYXMgYnVpbGQgc3RhdHVzCisgICAgIiIiCisKKyAgICAjIGdldCB0aGUgYm9keSBhbmQgdHlwZQorICAgIHNlcnZlciA9IGQuZ2V0VmFyKCdUSU5ERVJfSE9TVCcsIFRydWUpCisgICAgdXJsICAgID0gZC5nZXRWYXIoJ1RJTkRFUl9VUkwnLCBUcnVlKQorCisgICAgc2VsZWN0b3IgPSB1cmwgKyAiL3htbC9idWlsZF9zdGF0dXMucGwiCisKKyAgICAjIG5vdyBwb3N0IGl0IC0gaW4gY2h1bmtzIG9mIDEwLjAwMCBjaGFyYWNodGVycworICAgIG5ld19sb2cgPSBfbG9nCisgICAgd2hpbGUgbGVuKG5ld19sb2cpID4gMDoKKyAgICAgICAgY29udGVudF90eXBlLCBib2R5ID0gdGluZGVyX2Zvcm1hdF9odHRwX3Bvc3QoZCxzdGF0dXMsbmV3X2xvZ1swOjE4MDAwXSkKKyAgICAgICAgZXJyY29kZSwgZXJybXNnLCBoZWFkZXJzLCBoX2ZpbGUgPSB0aW5kZXJfaHR0cF9wb3N0KHNlcnZlcixzZWxlY3Rvcixjb250ZW50X3R5cGUsIGJvZHkpCisgICAgICAgICNwcmludCBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMKKyAgICAgICAgI3ByaW50IGguZmlsZS5yZWFkKCkKKyAgICAgICAgbmV3X2xvZyA9IG5ld19sb2dbMTgwMDA6XQorCisKK2RlZiB0aW5kZXJfcHJpbnRfaW5mbyhkKToKKyAgICAiIiIKKyAgICBQcmludCB0aGUgVGluZGVyQm94IEluZm8KKyAgICAgICAgSW5jbHVkaW5nIGluZm9ybWF0aW9ucyBvZiB0aGUgQmFzZVN5c3RlbSBhbmQgdGhlIFRyZWUKKyAgICAgICAgd2UgdXNlLgorICAgICIiIgorCisgICAgIyBnZXQgdGhlIGxvY2FsIHZhcnMKKyAgICB0aW1lICAgID0gdGluZGVyX3RpbWVfc3RyaW5nKCkKKyAgICBvcHMgICAgID0gb3MudW5hbWUoKVswXQorICAgIHZlcnNpb24gPSBvcy51bmFtZSgpWzJdCisgICAgdXJsICAgICA9IGQuZ2V0VmFyKCAnVElOREVSX1VSTCcgLCBUcnVlICkKKyAgICB0cmVlICAgID0gZC5nZXRWYXIoICdUSU5ERVJfVFJFRScsIFRydWUgKQorICAgIGJyYW5jaCAgPSBkLmdldFZhciggJ1RJTkRFUl9CUkFOQ0gnLCBUcnVlICkKKyAgICBzcmNkYXRlID0gZC5nZXRWYXIoICdTUkNEQVRFJywgVHJ1ZSApCisgICAgbWFjaGluZSA9IGQuZ2V0VmFyKCAnTUFDSElORScsIFRydWUgKQorICAgIGRpc3RybyAgPSBkLmdldFZhciggJ0RJU1RSTycsIFRydWUgKQorICAgIGJiZmlsZXMgPSBkLmdldFZhciggJ0JCRklMRVMnLCBUcnVlICkKKyAgICB0YXJjaCAgID0gZC5nZXRWYXIoICdUQVJHRVRfQVJDSCcsIFRydWUgKQorICAgIGZwdSAgICAgPSBkLmdldFZhciggJ1RBUkdFVF9GUFUnLCBUcnVlICkKKyAgICBvZXJldiAgID0gZC5nZXRWYXIoICdPRV9SRVZJU0lPTicsIFRydWUgKSBvciAidW5rbm93biIKKworICAgICMgdGhlcmUgaXMgYSBidWcgd2l0aCB0aXBwbGUgcXVvdGVkIHN0cmluZ3MKKyAgICAjIGkgd2lsbCB3b3JrIGFyb3VuZCBidXQgd2lsbCBmaXggdGhlIG9yaWdpbmFsCisgICAgIyBidWcgYXMgd2VsbAorICAgIG91dHB1dCA9IFtdCisgICAgb3V0cHV0LmFwcGVuZCgiPT0gVGluZGVyYm94IEluZm8iICkKKyAgICBvdXRwdXQuYXBwZW5kKCJUaW1lOiAlKHRpbWUpcyIgKQorICAgIG91dHB1dC5hcHBlbmQoIk9TOiAlKG9wcylzIiApCisgICAgb3V0cHV0LmFwcGVuZCgiJSh2ZXJzaW9uKXMiICkKKyAgICBvdXRwdXQuYXBwZW5kKCJDb21waWxlcjogZ2NjIiApCisgICAgb3V0cHV0LmFwcGVuZCgiVGluZGVyYm94IENsaWVudDogMC4xIiApCisgICAgb3V0cHV0LmFwcGVuZCgiVGluZGVyYm94IENsaWVudCBMYXN0IE1vZGlmaWVkOiB5ZXN0ZXJkYXkiICkKKyAgICBvdXRwdXQuYXBwZW5kKCJUaW5kZXJib3ggUHJvdG9jb2w6IDAuMSIgKQorICAgIG91dHB1dC5hcHBlbmQoIlVSTDogJSh1cmwpcyIgKQorICAgIG91dHB1dC5hcHBlbmQoIlRyZWU6ICUodHJlZSlzIiApCisgICAgb3V0cHV0LmFwcGVuZCgiQ29uZmlnOiIgKQorICAgIG91dHB1dC5hcHBlbmQoImJyYW5jaCA9ICclKGJyYW5jaClzJyIgKQorICAgIG91dHB1dC5hcHBlbmQoIlRBUkdFVF9BUkNIID0gJyUodGFyY2gpcyciICkKKyAgICBvdXRwdXQuYXBwZW5kKCJUQVJHRVRfRlBVID0gJyUoZnB1KXMnIiApCisgICAgb3V0cHV0LmFwcGVuZCgiU1JDREFURSA9ICclKHNyY2RhdGUpcyciICkKKyAgICBvdXRwdXQuYXBwZW5kKCJNQUNISU5FID0gJyUobWFjaGluZSlzJyIgKQorICAgIG91dHB1dC5hcHBlbmQoIkRJU1RSTyA9ICclKGRpc3RybylzJyIgKQorICAgIG91dHB1dC5hcHBlbmQoIkJCRklMRVMgPSAnJShiYmZpbGVzKXMnIiApCisgICAgb3V0cHV0LmFwcGVuZCgiT0VSRVYgPSAnJShvZXJldilzJyIgKQorICAgIG91dHB1dC5hcHBlbmQoIj09IEVuZCBUaW5kZXJib3ggQ2xpZW50IEluZm8iICkKKworICAgICMgbm93IGNyZWF0ZSB0aGUgcmVhbCBvdXRwdXQKKyAgICByZXR1cm4gIlxuIi5qb2luKG91dHB1dCkgJSB2YXJzKCkKKworCitkZWYgdGluZGVyX3ByaW50X2VudigpOgorICAgICIiIgorICAgIFByaW50IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb2YgdGhpcyBidWlsZAorICAgICIiIgorICAgIHRpbWVfc3RhcnQgPSB0aW5kZXJfdGltZV9zdHJpbmcoKQorICAgIHRpbWVfZW5kICAgPSB0aW5kZXJfdGltZV9zdHJpbmcoKQorCisgICAgIyBidWlsZCB0aGUgZW52aXJvbm1lbnQKKyAgICBlbnYgPSAiIgorICAgIGZvciB2YXIgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgZW52ICs9ICIlcz0lc1xuIiAlICh2YXIsIG9zLmVudmlyb25bdmFyXSkKKworICAgIG91dHB1dCA9IFtdCisgICAgb3V0cHV0LmFwcGVuZCggIi0tLT4gVElOREVSQk9YIFJVTk5JTkcgZW52ICUodGltZV9zdGFydClzIiApCisgICAgb3V0cHV0LmFwcGVuZCggZW52ICkKKyAgICBvdXRwdXQuYXBwZW5kKCAiPC0tLSBUSU5ERVJCT1ggRklOSVNIRUQgKFNVQ0NFU1MpICUodGltZV9lbmQpcyIgKQorCisgICAgcmV0dXJuICJcbiIuam9pbihvdXRwdXQpICUgdmFycygpCisKK2RlZiB0aW5kZXJfdGluZGVyX3N0YXJ0KGQsIGV2ZW50KToKKyAgICAiIiIKKyAgICBQUklOVCB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGlzIGJ1aWxkCisgICAgIiIiCisKKyAgICB0aW1lX3N0YXJ0ID0gdGluZGVyX3RpbWVfc3RyaW5nKCkKKyAgICBjb25maWcgPSB0aW5kZXJfcHJpbnRfaW5mbyhkKQorICAgICNlbnYgICAgPSB0aW5kZXJfcHJpbnRfZW52KCkKKyAgICB0aW1lX2VuZCAgID0gdGluZGVyX3RpbWVfc3RyaW5nKCkKKyAgICBwYWNrYWdlcyA9ICIgIi5qb2luKCBldmVudC5nZXRQa2dzKCkgKSAKKworICAgIG91dHB1dCA9IFtdCisgICAgb3V0cHV0LmFwcGVuZCggIi0tLT4gVElOREVSQk9YIFBSSU5USU5HIENPTkZJR1VSQVRJT04gJSh0aW1lX3N0YXJ0KXMiICkKKyAgICBvdXRwdXQuYXBwZW5kKCBjb25maWcgKQorICAgICNvdXRwdXQuYXBwZW5kKCBlbnYgICAgKQorICAgIG91dHB1dC5hcHBlbmQoICI8LS0tIFRJTkRFUkJPWCBGSU5JU0hFRCBQUklOVElORyBDT05GSUdVUkFUSU9OICUodGltZV9lbmQpcyIgKQorICAgIG91dHB1dC5hcHBlbmQoICItLS0+IFRJTkRFUkJPWCBCVUlMRElORyAnJShwYWNrYWdlcylzJyIgKQorICAgIG91dHB1dC5hcHBlbmQoICI8LS0tIFRJTkRFUkJPWCBTVEFSVElORyBCVUlMRCBOT1ciICkKKworICAgIG91dHB1dC5hcHBlbmQoICIiICkKKworICAgIHJldHVybiAiXG4iLmpvaW4ob3V0cHV0KSAlIHZhcnMoKQorCitkZWYgdGluZGVyX2RvX3RpbmRlcl9yZXBvcnQoZXZlbnQpOgorICAgICIiIgorICAgIFJlcG9ydCB0byB0aGUgdGluZGVyYm94OgorICAgICAgICBPbiB0aGUgQnVpbGRTdGFydCB3ZSB3aWxsIGluZm9ybSB0aGUgYm94IGRpcmVjdGx5CisgICAgICAgIE9uIHRoZSBvdGhlciBldmVudHMgd2Ugd2lsbCB3cml0ZSB0byB0aGUgVElOREVSX0xPRyBhbmQKKyAgICAgICAgd2hlbiB0aGUgVGFzayBpcyBmaW5pc2hlZCB3ZSB3aWxsIHNlbmQgdGhlIHJlcG9ydC4KKworICAgIFRoZSBhYm92ZSBpcyBub3QgeWV0IGZ1bGx5IGltcGxlbWVudGVkLiBDdXJyZW50bHkgd2Ugc2VuZAorICAgIGluZm9ybWF0aW9uIGltbWVkaWF0ZWx5LiBUaGUgY2FjaGluZy9xdWV1aW5nIG5lZWRzIHRvIGJlCisgICAgaW1wbGVtZW50ZWQuIEFsc28gc2VuZGluZyBtb3JlIG9yIGxlc3MgaW5mb3JtYXRpb24gaXMgbm90CisgICAgaW1wbGVtZW50ZWQgeWV0LgorCisgICAgV2UgaGF2ZSB0d28gdGVtcG9yYXJ5IGZpbGVzIHN0b3JlZCBpbiB0aGUgVE1QIGRpcmVjdG9yeS4gT25lIGZpbGUKKyAgICBjb250YWlucyB0aGUgYXNzaWduZWQgbWFjaGluZSBpZCBmb3IgdGhlIHRpbmRlcmNsaWVudC4gVGhpcyBpZCBnZXRzCisgICAgYXNzaWduZWQgd2hlbiB3ZSBjb25uZWN0IHRoZSBib3ggYW5kIHN0YXJ0IHRoZSBidWlsZCBwcm9jZXNzIHRoZSBzZWNvbmQKKyAgICBmaWxlIGlzIHVzZWQgdG8gd29ya2Fyb3VuZCBhbiBFdmVudEhhbmRsZXIgbGltaXRhdGlvbi4gSWYgQml0QmFrZSBpcyByYW4KKyAgICB3aXRoIHRoZSBjb250aW51ZSBvcHRpb24gd2Ugd2FudCB0aGUgQnVpbGQgdG8gZmFpbCBldmVuIGlmIHdlIGdldCB0aGUKKyAgICBCdWlsZENvbXBsZXRlZCBFdmVudC4gSW4gdGhpcyBjYXNlIHdlIGhhdmUgdG8gbG9vayB1cCB0aGUgc3RhdHVzIGFuZAorICAgIHNlbmQgaXQgaW5zdGVhZCBvZiAxMDAvc3VjY2Vzcy4KKyAgICAiIiIKKyAgICBpbXBvcnQgZ2xvYgorCisgICAgIyB2YXJpYWJsZXMKKyAgICBuYW1lID0gYmIuZXZlbnQuZ2V0TmFtZShldmVudCkKKyAgICBsb2cgID0gIiIKKyAgICBzdGF0dXMgPSAxCisgICAgIyBDaGVjayB3aGF0IHdlIG5lZWQgdG8gZG8gQnVpbGQqIHNob3dzIHdlIHN0YXJ0IG9yIGFyZSBkb25lCisgICAgaWYgbmFtZSA9PSAiQnVpbGRTdGFydGVkIjoKKyAgICAgICAgdGluZGVyX2J1aWxkX3N0YXJ0KGV2ZW50LmRhdGEpCisgICAgICAgIGxvZyA9IHRpbmRlcl90aW5kZXJfc3RhcnQoZXZlbnQuZGF0YSxldmVudCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHRydW5jYXRlIHRoZSB0aW5kZXIgbG9nIGZpbGUKKyAgICAgICAgICAgIGYgPSBmaWxlKGV2ZW50LmRhdGEuZ2V0VmFyKCdUSU5ERVJfTE9HJywgVHJ1ZSksICd3JykKKyAgICAgICAgICAgIGYud3JpdGUoIiIpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgd3JpdGUgYSBzdGF0dXMgdG8gdGhlIGZpbGUuIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgLWsgb3B0aW9uCisgICAgICAgICAgICAjIG9mIEJpdEJha2UKKyAgICAgICAgICAgIGcgPSBmaWxlKGV2ZW50LmRhdGEuZ2V0VmFyKCdUTVBESVInLCBUcnVlKSsiL3RpbmRlci1zdGF0dXMiLCAndycpCisgICAgICAgICAgICBnLndyaXRlKCIiKQorICAgICAgICAgICAgZy5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgIyBBcHBlbmQgdGhlIFRhc2stTG9nIChjb21waWxlLGNvbmZpZ3VyZS4uLikgdG8gdGhlIGxvZyBmaWxlCisgICAgIyB3ZSB3aWxsIHNlbmQgdG8gdGhlIHNlcnZlcgorICAgIGlmIG5hbWUgPT0gIlRhc2tTdWNjZWVkZWQiIG9yIG5hbWUgPT0gIlRhc2tGYWlsZWQiOgorICAgICAgICBsb2dfZmlsZSA9IGdsb2IuZ2xvYigiJXMvbG9nLiVzLioiICUgKGV2ZW50LmRhdGEuZ2V0VmFyKCdUJywgVHJ1ZSksIGV2ZW50LnRhc2spKQorCisgICAgICAgIGlmIGxlbihsb2dfZmlsZSkgIT0gMDoKKyAgICAgICAgICAgIHRvX2ZpbGUgID0gZXZlbnQuZGF0YS5nZXRWYXIoJ1RJTkRFUl9MT0cnLCBUcnVlKQorICAgICAgICAgICAgbG9nICAgICArPSAiIi5qb2luKG9wZW4obG9nX2ZpbGVbMF0sICdyJykucmVhZGxpbmVzKCkpCisKKyAgICAjIHNldCB0aGUgcmlnaHQgJ0hFQURFUicvU3VtbWFyeSBmb3IgdGhlIFRpbmRlckJveAorICAgIGlmIG5hbWUgPT0gIlRhc2tTdGFydGVkIjoKKyAgICAgICAgbG9nICs9ICItLS0+IFRJTkRFUkJPWCBUYXNrICVzIHN0YXJ0ZWRcbiIgJSBldmVudC50YXNrCisgICAgZWxpZiBuYW1lID09ICJUYXNrU3VjY2VlZGVkIjoKKyAgICAgICAgbG9nICs9ICI8LS0tIFRJTkRFUkJPWCBUYXNrICVzIGRvbmUgKFNVQ0NFU1MpXG4iICUgZXZlbnQudGFzaworICAgIGVsaWYgbmFtZSA9PSAiVGFza0ZhaWxlZCI6CisgICAgICAgIGxvZyArPSAiPC0tLSBUSU5ERVJCT1ggVGFzayAlcyBmYWlsZWQgKEZBSUxVUkUpXG4iICUgZXZlbnQudGFzaworICAgIGVsaWYgbmFtZSA9PSAiUGtnU3RhcnRlZCI6CisgICAgICAgIGxvZyArPSAiLS0tPiBUSU5ERVJCT1ggUGFja2FnZSAlcyBzdGFydGVkXG4iICUgZXZlbnQuZGF0YS5nZXRWYXIoJ1BGJywgVHJ1ZSkKKyAgICBlbGlmIG5hbWUgPT0gIlBrZ1N1Y2NlZWRlZCI6CisgICAgICAgIGxvZyArPSAiPC0tLSBUSU5ERVJCT1ggUGFja2FnZSAlcyBkb25lIChTVUNDRVNTKVxuIiAlIGV2ZW50LmRhdGEuZ2V0VmFyKCdQRicsIFRydWUpCisgICAgZWxpZiBuYW1lID09ICJQa2dGYWlsZWQiOgorICAgICAgICBpZiBub3QgZXZlbnQuZGF0YS5nZXRWYXIoJ1RJTkRFUl9BVVRPQlVJTEQnLCBUcnVlKSA9PSAiMCI6CisgICAgICAgICAgICBidWlsZC5leGVjX3Rhc2soJ2RvX2NsZWFuJywgZXZlbnQuZGF0YSkKKyAgICAgICAgbG9nICs9ICI8LS0tIFRJTkRFUkJPWCBQYWNrYWdlICVzIGZhaWxlZCAoRkFJTFVSRSlcbiIgJSBldmVudC5kYXRhLmdldFZhcignUEYnLCBUcnVlKQorICAgICAgICBzdGF0dXMgPSAyMDAKKyAgICAgICAgIyByZW1lbWJlciB0aGUgZmFpbHVyZSBmb3IgdGhlIC1rIGNhc2UKKyAgICAgICAgaCA9IGZpbGUoZXZlbnQuZGF0YS5nZXRWYXIoJ1RNUERJUicsIFRydWUpKyIvdGluZGVyLXN0YXR1cyIsICd3JykKKyAgICAgICAgaC53cml0ZSgiMjAwIikKKyAgICBlbGlmIG5hbWUgPT0gIkJ1aWxkQ29tcGxldGVkIjoKKyAgICAgICAgbG9nICs9ICJCdWlsZCBDb21wbGV0ZWRcbiIKKyAgICAgICAgc3RhdHVzID0gMTAwCisgICAgICAgICMgQ2hlY2sgaWYgd2UgaGF2ZSBhIG9sZCBzdGF0dXMuLi4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaCA9IGZpbGUoZXZlbnQuZGF0YS5nZXRWYXIoJ1RNUERJUicsVHJ1ZSkrJy90aW5kZXItc3RhdHVzJywgJ3InKQorICAgICAgICAgICAgc3RhdHVzID0gaW50KGgucmVhZCgpKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICBlbGlmIG5hbWUgPT0gIk11bHRpcGxlUHJvdmlkZXJzIjoKKyAgICAgICAgbG9nICs9ICItLS0+IFRJTkRFUkJPWCBNdWx0aXBsZSBQcm92aWRlcnNcbiIKKyAgICAgICAgbG9nICs9ICJtdWx0aXBsZSBwcm92aWRlcnMgYXJlIGF2YWlsYWJsZSAoJXMpO1xuIiAlICIsICIuam9pbihldmVudC5nZXRDYW5kaWRhdGVzKCkpCisgICAgICAgIGxvZyArPSAiY29uc2lkZXIgZGVmaW5pbmcgUFJFRkVSUkVEX1BST1ZJREVSXyVzXG4iICUgZXZlbnQuZ2V0SXRlbSgpCisgICAgICAgIGxvZyArPSAiaXMgcnVudGltZTogJWRcbiIgJSBldmVudC5pc1J1bnRpbWUoKQorICAgICAgICBsb2cgKz0gIjwtLS0gVElOREVSQk9YIE11bHRpcGxlIFByb3ZpZGVyc1xuIgorICAgIGVsaWYgbmFtZSA9PSAiTm9Qcm92aWRlciI6CisgICAgICAgIGxvZyArPSAiRXJyb3I6IE5vIFByb3ZpZGVyIGZvcjogJXNcbiIgJSBldmVudC5nZXRJdGVtKCkKKyAgICAgICAgbG9nICs9ICJFcnJvcjpXYXMgUnVudGltZTogJWRcbiIgJSBldmVudC5pc1J1bnRpbWUoKQorICAgICAgICBzdGF0dXMgPSAyMDAKKyAgICAgICAgIyByZW1lbWJlciB0aGUgZmFpbHVyZSBmb3IgdGhlIC1rIGNhc2UKKyAgICAgICAgaCA9IGZpbGUoZXZlbnQuZGF0YS5nZXRWYXIoJ1RNUERJUicsIFRydWUpKyIvdGluZGVyLXN0YXR1cyIsICd3JykKKyAgICAgICAgaC53cml0ZSgiMjAwIikKKworICAgICMgbm93IHBvc3QgdGhlIGxvZworICAgIGlmIGxlbihsb2cpID09IDA6CisgICAgICAgIHJldHVybgorCisgICAgIyBmb3Igbm93IHdlIHdpbGwgdXNlIHRoZSBodHRwIHBvc3QgbWV0aG9kIGFzIGl0IGlzIHRoZSBvbmx5IG9uZQorICAgIGxvZ19wb3N0X21ldGhvZCA9IHRpbmRlcl9zZW5kX2h0dHAKKyAgICBsb2dfcG9zdF9tZXRob2QoZXZlbnQuZGF0YSwgc3RhdHVzLCBsb2cpCisKKworIyB3ZSB3YW50IHRvIGJlIGFuIGV2ZW50IGhhbmRsZXIKK2FkZGhhbmRsZXIgdGluZGVyY2xpZW50X2V2ZW50aGFuZGxlcgorcHl0aG9uIHRpbmRlcmNsaWVudF9ldmVudGhhbmRsZXIoKSB7CisgICAgaWYgZS5kYXRhIGlzIE5vbmUgb3IgYmIuZXZlbnQuZ2V0TmFtZShlKSA9PSAiTXNnTm90ZSI6CisgICAgICAgIHJldHVybgorCisgICAgZG9fdGluZGVyX3JlcG9ydCA9IGUuZGF0YS5nZXRWYXIoJ1RJTkRFUl9SRVBPUlQnLCBUcnVlKQorICAgIGlmIGRvX3RpbmRlcl9yZXBvcnQgYW5kIGRvX3RpbmRlcl9yZXBvcnQgPT0gIjEiOgorICAgICAgICB0aW5kZXJfZG9fdGluZGVyX3JlcG9ydChlKQorCisgICAgcmV0dXJuCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90b2FzdGVyLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90b2FzdGVyLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYzY2ZmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3RvYXN0ZXIuYmJjbGFzcwpAQCAtMCwwICsxLDM1NSBAQAorIworIyBUb2FzdGVyIGhlbHBlciBjbGFzcworIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisjCisjIFRoaXMgYmJjbGFzcyBpcyBkZXNpZ25lZCB0byBleHRyYWN0IGRhdGEgdXNlZCBieSBPRS1Db3JlIGR1cmluZyB0aGUgYnVpbGQgcHJvY2VzcywKKyMgZm9yIHJlY29yZGluZyBpbiB0aGUgVG9hc3RlciBzeXN0ZW0uCisjIFRoZSBkYXRhIGFjY2VzcyBpcyBzeW5jaHJvbm91cywgcHJlc2VydmluZyB0aGUgYnVpbGQgZGF0YSBpbnRlZ3JpdHkgYWNyb3NzCisjIGRpZmZlcmVudCBidWlsZHMuCisjCisjIFRoZSBkYXRhIGlzIHRyYW5zZmVycmVkIHRocm91Z2ggdGhlIGV2ZW50IHN5c3RlbSwgdXNpbmcgdGhlIE1ldGFkYXRhRXZlbnQgb2JqZWN0cy4KKyMKKyMgVGhlIG1vZGVsIGlzIHRvIGVuYWJsZSB0aGUgZGF0YWR1bXAgZnVuY3Rpb25zIGFzIHBvc3RmdW5jcywgYW5kIGhhdmUgdGhlIGR1bXAKKyMgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHJlYWwgdGFza2Z1bmMgaGFzIGJlZW4gZXhlY3V0ZWQuIFRoaXMgcHJldmVudHMgdGFzayBzaWduYXR1cmUgY2hhbmdpbmcKKyMgaXMgdG9hc3RlciBpcyBlbmFibGVkIG9yIG5vdC4gQnVpbGQgcGVyZm9ybWFuY2UgaXMgbm90IGFmZmVjdGVkIGlmIFRvYXN0ZXIgaXMgbm90IGVuYWJsZWQuCisjCisjIFRvIGVuYWJsZSwgdXNlIElOSEVSSVQgaW4gbG9jYWwuY29uZjoKKyMKKyMgICAgICAgSU5IRVJJVCArPSAidG9hc3RlciIKKyMKKyMKKyMKKyMKKworIyBGaW5kIGFuZCBkdW1wIGxheWVyIGluZm8gd2hlbiB3ZSBnb3QgdGhlIGxheWVycyBwYXJzZWQKKworCisKK3B5dGhvbiB0b2FzdGVyX2xheWVyaW5mb19kdW1wZGF0YSgpIHsKKyAgICBpbXBvcnQgc3VicHJvY2VzcworCisgICAgZGVmIF9nZXRfZ2l0X2JyYW5jaChsYXllcl9wYXRoKToKKyAgICAgICAgYnJhbmNoID0gc3VicHJvY2Vzcy5Qb3BlbigiZ2l0IHN5bWJvbGljLXJlZiBIRUFEIDI+L2Rldi9udWxsICIsIGN3ZD1sYXllcl9wYXRoLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgIGJyYW5jaCA9IGJyYW5jaC5yZXBsYWNlKCdyZWZzL2hlYWRzLycsICcnKS5yc3RyaXAoKQorICAgICAgICByZXR1cm4gYnJhbmNoCisKKyAgICBkZWYgX2dldF9naXRfcmV2aXNpb24obGF5ZXJfcGF0aCk6CisgICAgICAgIHJldmlzaW9uID0gc3VicHJvY2Vzcy5Qb3BlbigiZ2l0IHJldi1wYXJzZSBIRUFEIDI+L2Rldi9udWxsICIsIGN3ZD1sYXllcl9wYXRoLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdLnJzdHJpcCgpCisgICAgICAgIHJldHVybiByZXZpc2lvbgorCisgICAgZGVmIF9nZXRfdXJsX21hcF9uYW1lKGxheWVyX25hbWUpOgorICAgICAgICAiIiIgU29tZSBsYXllcnMgaGF2ZSBhIGRpZmZlcmVudCBuYW1lIG9uIG9wZW5lbWJlZGRlZC5vcmcgc2l0ZSwKKyAgICAgICAgICAgIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNvcnJlY3QgbmFtZSB0byB1c2UgaW4gdGhlIFVSTAorICAgICAgICAiIiIKKworICAgICAgICB1cmxfbmFtZSA9IGxheWVyX25hbWUKKyAgICAgICAgdXJsX21hcHBpbmcgPSB7J21ldGEnOiAnb3BlbmVtYmVkZGVkLWNvcmUnfQorCisgICAgICAgIGZvciBrZXkgaW4gdXJsX21hcHBpbmcua2V5cygpOgorICAgICAgICAgICAgaWYga2V5ID09IGxheWVyX25hbWU6CisgICAgICAgICAgICAgICAgdXJsX25hbWUgPSB1cmxfbWFwcGluZ1trZXldCisKKyAgICAgICAgcmV0dXJuIHVybF9uYW1lCisKKyAgICBkZWYgX2dldF9sYXllcl92ZXJzaW9uX2luZm9ybWF0aW9uKGxheWVyX3BhdGgpOgorCisgICAgICAgIGxheWVyX3ZlcnNpb25faW5mbyA9IHt9CisgICAgICAgIGxheWVyX3ZlcnNpb25faW5mb1snYnJhbmNoJ10gPSBfZ2V0X2dpdF9icmFuY2gobGF5ZXJfcGF0aCkKKyAgICAgICAgbGF5ZXJfdmVyc2lvbl9pbmZvWydjb21taXQnXSA9IF9nZXRfZ2l0X3JldmlzaW9uKGxheWVyX3BhdGgpCisgICAgICAgIGxheWVyX3ZlcnNpb25faW5mb1sncHJpb3JpdHknXSA9IDAKKworICAgICAgICByZXR1cm4gbGF5ZXJfdmVyc2lvbl9pbmZvCisKKworICAgIGRlZiBfZ2V0X2xheWVyX2RpY3QobGF5ZXJfcGF0aCk6CisKKyAgICAgICAgbGF5ZXJfaW5mbyA9IHt9CisgICAgICAgIGxheWVyX25hbWUgPSBsYXllcl9wYXRoLnNwbGl0KCcvJylbLTFdCisgICAgICAgIGxheWVyX3VybCA9ICdodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcvbGF5ZXJpbmRleC9sYXllci97bGF5ZXJ9LycKKyAgICAgICAgbGF5ZXJfdXJsX25hbWUgPSBfZ2V0X3VybF9tYXBfbmFtZShsYXllcl9uYW1lKQorCisgICAgICAgIGxheWVyX2luZm9bJ25hbWUnXSA9IGxheWVyX3VybF9uYW1lCisgICAgICAgIGxheWVyX2luZm9bJ2xvY2FsX3BhdGgnXSA9IGxheWVyX3BhdGgKKyAgICAgICAgbGF5ZXJfaW5mb1snbGF5ZXJfaW5kZXhfdXJsJ10gPSBsYXllcl91cmwuZm9ybWF0KGxheWVyPWxheWVyX3VybF9uYW1lKQorICAgICAgICBsYXllcl9pbmZvWyd2ZXJzaW9uJ10gPSBfZ2V0X2xheWVyX3ZlcnNpb25faW5mb3JtYXRpb24obGF5ZXJfcGF0aCkKKworICAgICAgICByZXR1cm4gbGF5ZXJfaW5mbworCisKKyAgICBiYmxheWVycyA9IGUuZGF0YS5nZXRWYXIoIkJCTEFZRVJTIiwgVHJ1ZSkKKworICAgIGxsYXllcmluZm8gPSB7fQorCisgICAgZm9yIGxheWVyIGluIHsgbCBmb3IgbCBpbiBiYmxheWVycy5zdHJpcCgpLnNwbGl0KCIgIikgaWYgbGVuKGwpIH06CisgICAgICAgIGxsYXllcmluZm9bbGF5ZXJdID0gX2dldF9sYXllcl9kaWN0KGxheWVyKQorCisKKyAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk1ldGFkYXRhRXZlbnQoIkxheWVySW5mbyIsIGxsYXllcmluZm8pLCBlLmRhdGEpCit9CisKKyMgRHVtcCBwYWNrYWdlIGZpbGUgaW5mbyBkYXRhCisKK2RlZiBfdG9hc3Rlcl9sb2FkX3BrZ2RhdGFmaWxlKGRpcnBhdGgsIGZpbGVwYXRoKToKKyAgICBpbXBvcnQganNvbgorICAgIGltcG9ydCByZQorICAgIHBrZ2RhdGEgPSB7fQorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZGlycGF0aCwgZmlsZXBhdGgpLCAiciIpIGFzIGZpbjoKKyAgICAgICAgZm9yIGxpbmUgaW4gZmluOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGtuLCBrdiA9IGxpbmUuc3RyaXAoKS5zcGxpdCgiOiAiLCAxKQorICAgICAgICAgICAgICAgIG0gPSByZS5tYXRjaChyIl5QS0dfKFteQS1aOl0qKSIsIGtuKQorICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgIHBrZ2RhdGFbJ09QS0dOJ10gPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAga24gPSAiXyIuam9pbihbeCBmb3IgeCBpbiBrbi5zcGxpdCgiXyIpIGlmIHguaXN1cHBlcigpXSkKKyAgICAgICAgICAgICAgICBwa2dkYXRhW2tuXSA9IGt2LnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBrbiA9PSAnRklMRVNfSU5GTyc6CisgICAgICAgICAgICAgICAgICAgIHBrZ2RhdGFba25dID0ganNvbi5sb2FkcyhrdikKKworICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcyAgICAjIGlnbm9yZSBsaW5lcyB3aXRob3V0IHZhbGlkIGtleTogdmFsdWUgcGFpcnMKKyAgICByZXR1cm4gcGtnZGF0YQorCisKK3B5dGhvbiB0b2FzdGVyX3BhY2thZ2VfZHVtcGRhdGEoKSB7CisgICAgIiIiCisgICAgRHVtcHMgdGhlIGRhdGEgY3JlYXRlZCBieSBlbWl0X3BrZ2RhdGEKKyAgICAiIiIKKyAgICAjIHJlcGxpY2F0ZSB2YXJpYWJsZXMgZnJvbSB0aGUgcGFja2FnZS5iYmNsYXNzCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKworICAgIHBrZ2RhdGFkaXIgPSBkLmdldFZhcignUEtHREVTVFdPUksnLCBUcnVlKQorCisgICAgIyBzY2FuIGFuZCBzZW5kIGRhdGEgZm9yIGVhY2ggcGFja2FnZQorCisgICAgbHBrZ2RhdGEgPSB7fQorICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKworICAgICAgICBscGtnZGF0YSA9IF90b2FzdGVyX2xvYWRfcGtnZGF0YWZpbGUocGtnZGF0YWRpciArICIvcnVudGltZS8iLCBwa2cpCisKKyAgICAgICAgIyBGaXJlIGFuIGV2ZW50IGNvbnRhaW5pbmcgdGhlIHBrZyBkYXRhCisgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiU2luZ2xlUGFja2FnZUluZm8iLCBscGtnZGF0YSksIGQpCit9CisKKyMgMi4gRHVtcCBvdXRwdXQgaW1hZ2UgZmlsZXMgaW5mb3JtYXRpb24KKworcHl0aG9uIHRvYXN0ZXJfaW1hZ2VfZHVtcGRhdGEoKSB7CisgICAgIiIiCisgICAgSW1hZ2UgZmlsZW5hbWUgZm9yIG91dHB1dCBpbWFnZXMgaXMgbm90IHN0YW5kYXJkaXplZC4KKyAgICBpbWFnZV90eXBlcy5iYmNsYXNzIHdpbGwgc3BlbGwgb3V0IElNQUdFX0NNRF94eHggdmFyaWFibGVzIHRoYXQgYWN0dWFsbHkKKyAgICBoYXZlIGhhcmRjb2RlZCB3YXlzIHRvIGNyZWF0ZSBpbWFnZSBmaWxlIG5hbWVzIGluIHRoZW0uCisgICAgU28gd2UgbG9vayBmb3IgZmlsZXMgc3RhcnRpbmcgd2l0aCB0aGUgc2V0IG5hbWUuCisgICAgIiIiCisKKyAgICBkZXBsb3lfZGlyX2ltYWdlID0gZC5nZXRWYXIoJ0RFUExPWV9ESVJfSU1BR0UnLCBUcnVlKTsKKyAgICBpbWFnZV9uYW1lID0gZC5nZXRWYXIoJ0lNQUdFX05BTUUnLCBUcnVlKTsKKworICAgIGltYWdlX2luZm9fZGF0YSA9IHt9CisgICAgYXJ0aWZhY3RfaW5mb19kYXRhID0ge30KKworICAgICMgY29sbGVjdCBhbGwgYXJ0aWZhY3RzCisgICAgZm9yIGRpcnBhdGgsIGRpcm5hbWVzLCBmaWxlbmFtZXMgaW4gb3Mud2FsayhkZXBsb3lfZGlyX2ltYWdlKToKKyAgICAgICAgZm9yIGZuIGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBmbi5zdGFydHN3aXRoKGltYWdlX25hbWUpOgorICAgICAgICAgICAgICAgICAgICBpbWFnZV9vdXRwdXQgPSBvcy5wYXRoLmpvaW4oZGlycGF0aCwgZm4pCisgICAgICAgICAgICAgICAgICAgIGltYWdlX2luZm9fZGF0YVtpbWFnZV9vdXRwdXRdID0gb3Muc3RhdChpbWFnZV9vdXRwdXQpLnN0X3NpemUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpbXBvcnQgc3RhdAorICAgICAgICAgICAgICAgICAgICBhcnRpZmFjdF9wYXRoID0gb3MucGF0aC5qb2luKGRpcnBhdGgsIGZuKQorICAgICAgICAgICAgICAgICAgICBmaWxlc3RhdCA9IG9zLnN0YXQoYXJ0aWZhY3RfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNsaW5rKGFydGlmYWN0X3BhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgYXJ0aWZhY3RfaW5mb19kYXRhW2FydGlmYWN0X3BhdGhdID0gZmlsZXN0YXQuc3Rfc2l6ZQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk1ldGFkYXRhRXZlbnQoIk9TRXJyb3JFeGNlcHRpb24iLCBlKSwgZCkKKworICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiSW1hZ2VGaWxlU2l6ZSIsaW1hZ2VfaW5mb19kYXRhKSwgZCkKKyAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk1ldGFkYXRhRXZlbnQoIkFydGlmYWN0RmlsZVNpemUiLGFydGlmYWN0X2luZm9fZGF0YSksIGQpCit9CisKKworCisjIGNvbGxlY3QgbGlzdCBvZiBidWlsZHN0YXRzIGZpbGVzIGJhc2VkIG9uIGZpcmVkIGV2ZW50czsgd2hlbiB0aGUgYnVpbGQgY29tcGxldGVzLCBjb2xsZWN0IGFsbCBzdGF0cyBhbmQgZmlyZSBhbiBldmVudCB3aXRoIGNvbGxlY3RlZCBkYXRhCisKK3B5dGhvbiB0b2FzdGVyX2NvbGxlY3RfdGFza19zdGF0cygpIHsKKyAgICBpbXBvcnQgYmIuYnVpbGQKKyAgICBpbXBvcnQgYmIuZXZlbnQKKyAgICBpbXBvcnQgYmIuZGF0YQorICAgIGltcG9ydCBiYi51dGlscworICAgIGltcG9ydCBvcworCisgICAgaWYgbm90IGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpOgorICAgICAgICByZXR1cm4gICMgaWYgd2UgZG9uJ3QgaGF2ZSBidWlsZHN0YXRzLCB3ZSBjYW5ub3QgY29sbGVjdCBzdGF0cworCisgICAgZGVmIF9hcHBlbmRfcmVhZF9saXN0KHYpOgorICAgICAgICBsb2NrID0gYmIudXRpbHMubG9ja2ZpbGUoZS5kYXRhLmV4cGFuZCgiJHtUT1BESVJ9L3RvYXN0ZXIubG9jayIpLCBGYWxzZSwgVHJ1ZSkKKworICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCAidG9hc3RlcnN0YXRsaXN0IiksICJhIikgYXMgZm91dDoKKyAgICAgICAgICAgIGJuID0gZ2V0X2JuKGUpCisgICAgICAgICAgICBic2RpciA9IG9zLnBhdGguam9pbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0JBU0UnLCBUcnVlKSwgYm4pCisgICAgICAgICAgICB0YXNrZGlyID0gb3MucGF0aC5qb2luKGJzZGlyLCBlLmRhdGEuZXhwYW5kKCIke1BGfSIpKQorICAgICAgICAgICAgZm91dC53cml0ZSgiJXM6OiVzOjolczo6JXNcbiIgJSAoZS50YXNrZmlsZSwgZS50YXNrbmFtZSwgb3MucGF0aC5qb2luKHRhc2tkaXIsIGUudGFzayksIGUuZGF0YS5leHBhbmQoIiR7UE59IikpKQorCisgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobG9jaykKKworICAgIGRlZiBfcmVhZF9zdGF0cyhmaWxlbmFtZSk6CisgICAgICAgIGNwdV91c2FnZSA9IDAKKyAgICAgICAgZGlza19pbyA9IDAKKyAgICAgICAgc3RhcnRpbyA9ICcwJworICAgICAgICBlbmRpbyA9ICcwJworICAgICAgICBzdGFydGVkID0gJzAnCisgICAgICAgIGVuZGVkID0gJzAnCisgICAgICAgIHBuID0gJycKKyAgICAgICAgdGFza25hbWUgPSAnJworICAgICAgICBzdGF0aW5mbyA9IHt9CisKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncicpIGFzIHRhc2tfYnM6CisgICAgICAgICAgICBmb3IgbGluZSBpbiB0YXNrX2JzLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgIGssdiA9IGxpbmUuc3RyaXAoKS5zcGxpdCgiOiAiLCAxKQorICAgICAgICAgICAgICAgIHN0YXRpbmZvW2tdID0gdgorCisgICAgICAgIGlmICJDUFUgdXNhZ2UiIGluIHN0YXRpbmZvOgorICAgICAgICAgICAgY3B1X3VzYWdlID0gc3RyKHN0YXRpbmZvWyJDUFUgdXNhZ2UiXSkuc3RyaXAoJyUgXG5ccicpCisKKyAgICAgICAgaWYgIkVuZFRpbWVJTyIgaW4gc3RhdGluZm86CisgICAgICAgICAgICBlbmRpbyA9IHN0cihzdGF0aW5mb1siRW5kVGltZUlPIl0pLnN0cmlwKCclIFxuXHInKQorCisgICAgICAgIGlmICJTdGFydFRpbWVJTyIgaW4gc3RhdGluZm86CisgICAgICAgICAgICBzdGFydGlvID0gc3RyKHN0YXRpbmZvWyJTdGFydFRpbWVJTyJdKS5zdHJpcCgnJSBcblxyJykKKworICAgICAgICBpZiAiU3RhcnRlZCIgaW4gc3RhdGluZm86CisgICAgICAgICAgICBzdGFydGVkID0gc3RyKHN0YXRpbmZvWyJTdGFydGVkIl0pLnN0cmlwKCclIFxuXHInKQorCisgICAgICAgIGlmICJFbmRlZCIgaW4gc3RhdGluZm86CisgICAgICAgICAgICBlbmRlZCA9IHN0cihzdGF0aW5mb1siRW5kZWQiXSkuc3RyaXAoJyUgXG5ccicpCisKKyAgICAgICAgZGlza19pbyA9IGludChlbmRpbykgLSBpbnQoc3RhcnRpbykKKworICAgICAgICBlbGFwc2VkX3RpbWUgPSBmbG9hdChlbmRlZCkgLSBmbG9hdChzdGFydGVkKQorCisgICAgICAgIGNwdV91c2FnZSA9IGZsb2F0KGNwdV91c2FnZSkKKworICAgICAgICByZXR1cm4geydjcHVfdXNhZ2UnOiBjcHVfdXNhZ2UsICdkaXNrX2lvJzogZGlza19pbywgJ2VsYXBzZWRfdGltZSc6IGVsYXBzZWRfdGltZX0KKworCisgICAgaWYgaXNpbnN0YW5jZShlLCAoYmIuYnVpbGQuVGFza1N1Y2NlZWRlZCwgYmIuYnVpbGQuVGFza0ZhaWxlZCkpOgorICAgICAgICBfYXBwZW5kX3JlYWRfbGlzdChlKQorICAgICAgICBwYXNzCisKKworICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQpIGFuZCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksICJ0b2FzdGVyc3RhdGxpc3QiKSk6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksICJ0b2FzdGVyc3RhdGxpc3QiKSwgInIiKSBhcyBmaW46CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmaW46CisgICAgICAgICAgICAgICAgKHRhc2tmaWxlLCB0YXNrbmFtZSwgZmlsZW5hbWUsIHJlY2lwZW5hbWUpID0gbGluZS5zdHJpcCgpLnNwbGl0KCI6OiIpCisgICAgICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgodGFza2ZpbGUsIHRhc2tuYW1lLCBfcmVhZF9zdGF0cyhmaWxlbmFtZSksIHJlY2lwZW5hbWUpKQorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk1ldGFkYXRhRXZlbnQoIkJ1aWxkU3RhdHNMaXN0IiwgZXZlbnRzKSwgZS5kYXRhKQorICAgICAgICBvcy51bmxpbmsob3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCAidG9hc3RlcnN0YXRsaXN0IikpCit9CisKKyMgZHVtcCByZWxldmFudCBidWlsZCBoaXN0b3J5IGRhdGEgYXMgYW4gZXZlbnQgd2hlbiB0aGUgYnVpbGQgaXMgY29tcGxldGVkCisKK3B5dGhvbiB0b2FzdGVyX2J1aWxkaGlzdG9yeV9kdW1wKCkgeworICAgIGltcG9ydCByZQorICAgIEJVSUxESElTVE9SWV9ESVIgPSBlLmRhdGEuZXhwYW5kKCIke1RPUERJUn0vYnVpbGRoaXN0b3J5IikKKyAgICBCVUlMREhJU1RPUllfRElSX0lNQUdFX0JBU0UgPSBlLmRhdGEuZXhwYW5kKCIlcy9pbWFnZXMvJHtNQUNISU5FX0FSQ0h9LyR7VENMSUJDfS8iJSBCVUlMREhJU1RPUllfRElSKQorICAgIHBrZ2RhdGFfZGlyID0gZS5kYXRhLmdldFZhcigiUEtHREFUQV9ESVIiLCBUcnVlKQorCisKKyAgICAjIHNjYW4gdGhlIGJ1aWxkIHRhcmdldHMgZm9yIHRoaXMgYnVpbGQKKyAgICBpbWFnZXMgPSB7fQorICAgIGFsbHBrZ3MgPSB7fQorICAgIGZpbGVzID0ge30KKyAgICBmb3IgdGFyZ2V0IGluIGUuX3BrZ3M6CisgICAgICAgIGluc3RhbGxlZF9pbWdfcGF0aCA9IGUuZGF0YS5leHBhbmQob3MucGF0aC5qb2luKEJVSUxESElTVE9SWV9ESVJfSU1BR0VfQkFTRSwgdGFyZ2V0KSkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoaW5zdGFsbGVkX2ltZ19wYXRoKToKKyAgICAgICAgICAgIGltYWdlc1t0YXJnZXRdID0ge30KKyAgICAgICAgICAgIGZpbGVzW3RhcmdldF0gPSB7fQorICAgICAgICAgICAgZmlsZXNbdGFyZ2V0XVsnZGlycyddID0gW10KKyAgICAgICAgICAgIGZpbGVzW3RhcmdldF1bJ3N5bXMnXSA9IFtdCisgICAgICAgICAgICBmaWxlc1t0YXJnZXRdWydmaWxlcyddID0gW10KKyAgICAgICAgICAgIHdpdGggb3BlbigiJXMvaW5zdGFsbGVkLXBhY2thZ2Utc2l6ZXMudHh0IiAlIGluc3RhbGxlZF9pbWdfcGF0aCwgInIiKSBhcyBmaW46CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZmluOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoIjsiKQorICAgICAgICAgICAgICAgICAgICBwc2l6ZSwgcHggPSBsaW5lLnNwbGl0KCJcdCIpCisgICAgICAgICAgICAgICAgICAgIHB1bml0LCBwbmFtZSA9IHB4LnNwbGl0KCIgIikKKyAgICAgICAgICAgICAgICAgICAgIyB0aGlzIHNpemUgaXMgImluc3RhbGxlZC1zaXplIiBhcyBpdCBtZWFzdXJlcyBob3cgbXVjaCBzcGFjZSBpdCB0YWtlcyBvbiBkaXNrCisgICAgICAgICAgICAgICAgICAgIGltYWdlc1t0YXJnZXRdW3BuYW1lLnN0cmlwKCldID0geydzaXplJzppbnQocHNpemUpKjEwMjQsICdkZXBlbmRzJyA6IFtdfQorCisgICAgICAgICAgICB3aXRoIG9wZW4oIiVzL2RlcGVuZHMuZG90IiAlIGluc3RhbGxlZF9pbWdfcGF0aCwgInIiKSBhcyBmaW46CisgICAgICAgICAgICAgICAgcCA9IHJlLmNvbXBpbGUocicgLT4gJykKKyAgICAgICAgICAgICAgICBkb3QgPSByZS5jb21waWxlKHInLipzdHlsZT1kb3R0ZWQnKQorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGZpbjoKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCc7JykKKyAgICAgICAgICAgICAgICAgICAgbGluZXNwbGl0ID0gcC5zcGxpdChsaW5lKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4obGluZXNwbGl0KSA9PSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgcG5hbWUgPSBsaW5lc3BsaXRbMF0ucnN0cmlwKCciJykuc3RyaXAoJyInKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kc25hbWUgPSBsaW5lc3BsaXRbMV0uc3BsaXQoIiAiKVswXS5zdHJpcCgpLnN0cmlwKCI7Iikuc3RyaXAoJyInKS5yc3RyaXAoJyInKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVwdHlwZSA9ICJkZXBlbmRzIgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZG90Lm1hdGNoKGxpbmUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHR5cGUgPSAicmVjb21tZW5kcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwbmFtZSBpbiBpbWFnZXNbdGFyZ2V0XToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXNbdGFyZ2V0XVtwbmFtZV0gPSB7J3NpemUnOiAwLCAnZGVwZW5kcycgOiBbXX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkZXBlbmRzbmFtZSBpbiBpbWFnZXNbdGFyZ2V0XToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXNbdGFyZ2V0XVtkZXBlbmRzbmFtZV0gPSB7J3NpemUnOiAwLCAnZGVwZW5kcycgOiBbXX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlc1t0YXJnZXRdW3BuYW1lXVsnZGVwZW5kcyddLmFwcGVuZCgoZGVwZW5kc25hbWUsIGRlcHR5cGUpKQorCisgICAgICAgICAgICB3aXRoIG9wZW4oIiVzL2ZpbGVzLWluLWltYWdlLnR4dCIgJSBpbnN0YWxsZWRfaW1nX3BhdGgsICJyIikgYXMgZmluOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGZpbjoKKyAgICAgICAgICAgICAgICAgICAgbGMgPSBbIHggZm9yIHggaW4gbGluZS5zdHJpcCgpLnNwbGl0KCIgIikgaWYgbGVuKHgpID4gMCBdCisgICAgICAgICAgICAgICAgICAgIGlmIGxjWzBdLnN0YXJ0c3dpdGgoImwiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzW3RhcmdldF1bJ3N5bXMnXS5hcHBlbmQobGMpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgbGNbMF0uc3RhcnRzd2l0aCgiZCIpOgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNbdGFyZ2V0XVsnZGlycyddLmFwcGVuZChsYykKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzW3RhcmdldF1bJ2ZpbGVzJ10uYXBwZW5kKGxjKQorCisgICAgICAgICAgICBmb3IgcG5hbWUgaW4gaW1hZ2VzW3RhcmdldF06CisgICAgICAgICAgICAgICAgaWYgbm90IHBuYW1lIGluIGFsbHBrZ3M6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ2RhdGEgPSBfdG9hc3Rlcl9sb2FkX3BrZ2RhdGFmaWxlKCIlcy9ydW50aW1lLXJldmVyc2UvIiAlIHBrZ2RhdGFfZGlyLCBwbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXJyLmVycm5vID09IDI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBleHBlY3QgdGhpcyBlLmcuIGZvciBSUkVDT01NRU5EUyB0aGF0IGFyZSB1bnNhdGlzZmllZCBhdCBydW50aW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgYWxscGtnc1twbmFtZV0gPSBwa2dkYXRhCisKKworICAgIGRhdGEgPSB7ICdwa2dkYXRhJyA6IGFsbHBrZ3MsICdpbWdkYXRhJyA6IGltYWdlcywgJ2ZpbGVkYXRhJyA6IGZpbGVzIH0KKworICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiSW1hZ2VQa2dMaXN0IiwgZGF0YSksIGUuZGF0YSkKKworfQorCisjIGR1bXAgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBsaWNlbnNlIG1hbmlmZXN0IHBhdGgKKworcHl0aG9uIHRvYXN0ZXJfbGljZW5zZW1hbmlmZXN0X2R1bXAoKSB7CisgICAgZGVwbG95X2RpciA9IGQuZ2V0VmFyKCdERVBMT1lfRElSJywgVHJ1ZSk7CisgICAgaW1hZ2VfbmFtZSA9IGQuZ2V0VmFyKCdJTUFHRV9OQU1FJywgVHJ1ZSk7CisKKyAgICBkYXRhID0geyAnZGVwbG95X2RpcicgOiBkZXBsb3lfZGlyLCAnaW1hZ2VfbmFtZScgOiBpbWFnZV9uYW1lIH0KKworICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiTGljZW5zZU1hbmlmZXN0UGF0aCIsIGRhdGEpLCBkKQorfQorCisjIHNldCBldmVudCBoYW5kbGVycworYWRkaGFuZGxlciB0b2FzdGVyX2xheWVyaW5mb19kdW1wZGF0YQordG9hc3Rlcl9sYXllcmluZm9fZHVtcGRhdGFbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5UcmVlRGF0YVByZXBhcmF0aW9uQ29tcGxldGVkIgorCithZGRoYW5kbGVyIHRvYXN0ZXJfY29sbGVjdF90YXNrX3N0YXRzCit0b2FzdGVyX2NvbGxlY3RfdGFza19zdGF0c1tldmVudG1hc2tdID0gImJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkIGJiLmJ1aWxkLlRhc2tTdWNjZWVkZWQgYmIuYnVpbGQuVGFza0ZhaWxlZCIKKworYWRkaGFuZGxlciB0b2FzdGVyX2J1aWxkaGlzdG9yeV9kdW1wCit0b2FzdGVyX2J1aWxkaGlzdG9yeV9kdW1wW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQiCitkb19wYWNrYWdlW3Bvc3RmdW5jc10gKz0gInRvYXN0ZXJfcGFja2FnZV9kdW1wZGF0YSAiCitkb19wYWNrYWdlW3ZhcmRlcHNleGNsdWRlXSArPSAidG9hc3Rlcl9wYWNrYWdlX2R1bXBkYXRhICIKKworZG9fcm9vdGZzW3Bvc3RmdW5jc10gKz0gInRvYXN0ZXJfaW1hZ2VfZHVtcGRhdGEgIgorZG9fcm9vdGZzW3Bvc3RmdW5jc10gKz0gInRvYXN0ZXJfbGljZW5zZW1hbmlmZXN0X2R1bXAgIgorZG9fcm9vdGZzW3ZhcmRlcHNleGNsdWRlXSArPSAidG9hc3Rlcl9pbWFnZV9kdW1wZGF0YSB0b2FzdGVyX2xpY2Vuc2VtYW5pZmVzdF9kdW1wIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdG9vbGNoYWluLXNjcmlwdHMuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rvb2xjaGFpbi1zY3JpcHRzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBiMmI5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rvb2xjaGFpbi1zY3JpcHRzLmJiY2xhc3MKQEAgLTAsMCArMSwxNTQgQEAKK2luaGVyaXQgc2l0ZWluZm8ga2VybmVsLWFyY2gKKworIyBXZSB3YW50IHRvIGJlIGFibGUgdG8gY2hhbmdlIHRoZSB2YWx1ZSBvZiBNVUxUSU1BQ0hfVEFSR0VUX1NZUywgYmVjYXVzZSBpdAorIyBkb2Vzbid0IGFsd2F5cyBtYXRjaCBvdXIgZXhwZWN0YXRpb25zLi4uIGJ1dCB3ZSBkZWZhdWx0IHRvIHRoZSBzdG9jayB2YWx1ZQorUkVBTF9NVUxUSU1BQ0hfVEFSR0VUX1NZUyA/PSAiJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30iCitUQVJHRVRfQ0NfQVJDSF9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1tdWNsaWJjIgorVEFSR0VUX0NDX0FSQ0hfYXBwZW5kX2xpYmMtbXVzbCA9ICIgLW1tdXNsIgorCisjIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiBlbnZpcm9ubWVudC1zZXR1cC1zY3JpcHQgZm9yIHVzZSBpbiBhIGRlcGxveWFibGUgU0RLCit0b29sY2hhaW5fY3JlYXRlX3Nka19lbnZfc2NyaXB0ICgpIHsKKwkjIENyZWF0ZSBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQKKwlzZGtwYXRobmF0aXZlPSR7NzotJHtTREtQQVRITkFUSVZFfX0KKwlwcmVmaXg9JHs2Oi0ke3ByZWZpeF9uYXRpdmVzZGt9fQorCWJpbmRpcj0kezU6LSR7YmluZGlyX25hdGl2ZXNka319CisJbGliZGlyPSR7NDotJHtsaWJkaXJ9fQorCXN5c3Jvb3Q9JHszOi0ke1NES1RBUkdFVFNZU1JPT1R9fQorCW11bHRpbWFjaF90YXJnZXRfc3lzPSR7MjotJHtSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTfX0KKwlzY3JpcHQ9JHsxOi0ke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vZW52aXJvbm1lbnQtc2V0dXAtJG11bHRpbWFjaF90YXJnZXRfc3lzfQorCXJtIC1mICRzY3JpcHQKKwl0b3VjaCAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFNES1RBUkdFVFNZU1JPT1Q9JyIkc3lzcm9vdCIgPj4gJHNjcmlwdAorCUVYVFJBUEFUSD0iIgorCWZvciBpIGluICR7Q0FOQURJQU5FWFRSQU9TfTsgZG8KKwkJRVhUUkFQQVRIPSIkRVhUUkFQQVRIOiRzZGtwYXRobmF0aXZlJGJpbmRpci8ke1RBUkdFVF9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJGkiCisJZG9uZQorCWVjaG8gImV4cG9ydCBQQVRIPSRzZGtwYXRobmF0aXZlJGJpbmRpcjokc2RrcGF0aG5hdGl2ZSRiaW5kaXIvLi4vJHtIT1NUX1NZU30vYmluOiRzZGtwYXRobmF0aXZlJGJpbmRpci8ke1RBUkdFVF9TWVN9IiRFWFRSQVBBVEgnOiRQQVRIJyA+PiAkc2NyaXB0CisJZWNobyAiZXhwb3J0IENDQUNIRV9QQVRIPSRzZGtwYXRobmF0aXZlJGJpbmRpcjokc2RrcGF0aG5hdGl2ZSRiaW5kaXIvLi4vJHtIT1NUX1NZU30vYmluOiRzZGtwYXRobmF0aXZlJGJpbmRpci8ke1RBUkdFVF9TWVN9IiRFWFRSQVBBVEgnOiRDQ0FDSEVfUEFUSCcgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBQS0dfQ09ORklHX1NZU1JPT1RfRElSPSRTREtUQVJHRVRTWVNST09UJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFBLR19DT05GSUdfUEFUSD0kU0RLVEFSR0VUU1lTUk9PVCciJGxpYmRpciInL3BrZ2NvbmZpZycgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDT05GSUdfU0lURT0ke1NES1BBVEh9L3NpdGUtY29uZmlnLSciJHttdWx0aW1hY2hfdGFyZ2V0X3N5c30iID4+ICRzY3JpcHQKKwllY2hvICJleHBvcnQgT0VDT1JFX05BVElWRV9TWVNST09UPVwiJHNka3BhdGhuYXRpdmVcIiIgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRUNPUkVfVEFSR0VUX1NZU1JPT1Q9IiRTREtUQVJHRVRTWVNST09UIicgPj4gJHNjcmlwdAorCWVjaG8gImV4cG9ydCBPRUNPUkVfQUNMT0NBTF9PUFRTPVwiLUkgJHNka3BhdGhuYXRpdmUvdXNyL3NoYXJlL2FjbG9jYWxcIiIgPj4gJHNjcmlwdAorCWVjaG8gImV4cG9ydCBQWVRIT05IT01FPSRzZGtwYXRobmF0aXZlJHByZWZpeCIgPj4gJHNjcmlwdAorCisJdG9vbGNoYWluX3NoYXJlZF9lbnZfc2NyaXB0Cit9CisKKyMgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuIGVudmlyb25tZW50LXNldHVwLXNjcmlwdCBpbiB0aGUgVE1QRElSIHdoaWNoIGVuYWJsZXMKKyMgYSBPRS1jb3JlIElERSB0byBpbnRlZ3JhdGUgd2l0aCB0aGUgYnVpbGQgdHJlZQordG9vbGNoYWluX2NyZWF0ZV90cmVlX2Vudl9zY3JpcHQgKCkgeworCXNjcmlwdD0ke1RNUERJUn0vZW52aXJvbm1lbnQtc2V0dXAtJHtSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTfQorCXJtIC1mICRzY3JpcHQKKwl0b3VjaCAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFBBVEg9JHtTVEFHSU5HX0RJUl9OQVRJVkV9L3Vzci9iaW46JHtQQVRIfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDQ0FDSEVfUEFUSD0ke1NUQUdJTkdfRElSX05BVElWRX0vdXNyL2Jpbjoke0NDQUNIRV9QQVRIfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBQS0dfQ09ORklHX1NZU1JPT1RfRElSPSR7UEtHX0NPTkZJR19TWVNST09UX0RJUn0nID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgUEtHX0NPTkZJR19QQVRIPSR7UEtHX0NPTkZJR19QQVRIfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDT05GSUdfU0lURT0iJHtAc2l0ZWluZm9fZ2V0X2ZpbGVzKGQpfSInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgU0RLVEFSR0VUU1lTUk9PVD0ke1NUQUdJTkdfRElSX1RBUkdFVH0nID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VDT1JFX05BVElWRV9TWVNST09UPSIke1NUQUdJTkdfRElSX05BVElWRX0iJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FQ09SRV9UQVJHRVRfU1lTUk9PVD0iJHtTVEFHSU5HX0RJUl9UQVJHRVR9IicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRUNPUkVfQUNMT0NBTF9PUFRTPSItSSAke1NUQUdJTkdfRElSX05BVElWRX0vdXNyL3NoYXJlL2FjbG9jYWwiJyA+PiAkc2NyaXB0CisKKwl0b29sY2hhaW5fc2hhcmVkX2Vudl9zY3JpcHQKK30KKwordG9vbGNoYWluX3NoYXJlZF9lbnZfc2NyaXB0ICgpIHsKKwllY2hvICdleHBvcnQgQ0M9IiR7VEFSR0VUX1BSRUZJWH1nY2MgJHtUQVJHRVRfQ0NfQVJDSH0gLS1zeXNyb290PSRTREtUQVJHRVRTWVNST09UIicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDWFg9IiR7VEFSR0VUX1BSRUZJWH1nKysgJHtUQVJHRVRfQ0NfQVJDSH0gLS1zeXNyb290PSRTREtUQVJHRVRTWVNST09UIicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDUFA9IiR7VEFSR0VUX1BSRUZJWH1nY2MgLUUgJHtUQVJHRVRfQ0NfQVJDSH0gLS1zeXNyb290PSRTREtUQVJHRVRTWVNST09UIicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBBUz0iJHtUQVJHRVRfUFJFRklYfWFzICR7VEFSR0VUX0FTX0FSQ0h9IicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBMRD0iJHtUQVJHRVRfUFJFRklYfWxkICR7VEFSR0VUX0xEX0FSQ0h9IC0tc3lzcm9vdD0kU0RLVEFSR0VUU1lTUk9PVCInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgR0RCPSR7VEFSR0VUX1BSRUZJWH1nZGInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgU1RSSVA9JHtUQVJHRVRfUFJFRklYfXN0cmlwJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFJBTkxJQj0ke1RBUkdFVF9QUkVGSVh9cmFubGliJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9CSkNPUFk9JHtUQVJHRVRfUFJFRklYfW9iamNvcHknID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0JKRFVNUD0ke1RBUkdFVF9QUkVGSVh9b2JqZHVtcCcgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBBUj0ke1RBUkdFVF9QUkVGSVh9YXInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgTk09JHtUQVJHRVRfUFJFRklYfW5tJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE00PW00JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFRBUkdFVF9QUkVGSVg9JHtUQVJHRVRfUFJFRklYfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDT05GSUdVUkVfRkxBR1M9Ii0tdGFyZ2V0PSR7VEFSR0VUX1NZU30gLS1ob3N0PSR7VEFSR0VUX1NZU30gLS1idWlsZD0ke1NES19BUkNIfS1saW51eCAtLXdpdGgtbGlidG9vbC1zeXNyb290PSRTREtUQVJHRVRTWVNST09UIicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDRkxBR1M9IiR7VEFSR0VUX0NGTEFHU30iJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IENYWEZMQUdTPSIke1RBUkdFVF9DWFhGTEFHU30iJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IExERkxBR1M9IiR7VEFSR0VUX0xERkxBR1N9IicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDUFBGTEFHUz0iJHtUQVJHRVRfQ1BQRkxBR1N9IicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBLQ0ZMQUdTPSItLXN5c3Jvb3Q9JFNES1RBUkdFVFNZU1JPT1QiJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FQ09SRV9ESVNUUk9fVkVSU0lPTj0iJHtESVNUUk9fVkVSU0lPTn0iJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FQ09SRV9TREtfVkVSU0lPTj0iJHtTREtfVkVSU0lPTn0iJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IEFSQ0g9JHtBUkNIfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDUk9TU19DT01QSUxFPSR7VEFSR0VUX1BSRUZJWH0nID4+ICRzY3JpcHQKKworICAgIGNhdCA+PiAkc2NyaXB0IDw8RU9GCisKKyMgQXBwZW5kIGVudmlyb25tZW50IHN1YnNjcmlwdHMKK2lmIFsgLWQgIlwkT0VDT1JFX1RBUkdFVF9TWVNST09UL2Vudmlyb25tZW50LXNldHVwLmQiIF07IHRoZW4KKyAgICBmb3IgZW52ZmlsZSBpbiBcJE9FQ09SRV9UQVJHRVRfU1lTUk9PVC9lbnZpcm9ubWVudC1zZXR1cC5kLyouc2g7IGRvCisJICAgIHNvdXJjZSBcJGVudmZpbGUKKyAgICBkb25lCitmaQoraWYgWyAtZCAiXCRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvZW52aXJvbm1lbnQtc2V0dXAuZCIgXTsgdGhlbgorICAgIGZvciBlbnZmaWxlIGluIFwkT0VDT1JFX05BVElWRV9TWVNST09UL2Vudmlyb25tZW50LXNldHVwLmQvKi5zaDsgZG8KKwkgICAgc291cmNlIFwkZW52ZmlsZQorICAgIGRvbmUKK2ZpCitFT0YKK30KKworI3dlIGdldCB0aGUgY2FjaGVkIHNpdGUgY29uZmlnIGluIHRoZSBydW50aW1lCitUT09MQ0hBSU5fQ09ORklHU0lURV9OT0NBQ0hFID0gIiR7QHNpdGVpbmZvX2dldF9maWxlcyhkLCBUcnVlKX0iCitUT09MQ0hBSU5fQ09ORklHU0lURV9TWVNST09UQ0FDSEUgPSAiJHtTVEFHSU5HX0RJUn0vJHtNTFBSRUZJWH0ke01BQ0hJTkV9LyR7dGFyZ2V0X2RhdGFkaXJ9LyR7VEFSR0VUX1NZU31fY29uZmlnX3NpdGUuZCIKK1RPT0xDSEFJTl9ORUVEX0NPTkZJR1NJVEVfQ0FDSEUgPz89ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYyBuY3Vyc2VzIgorCisjVGhpcyBmdW5jdGlvbiBjcmVhdGUgYSBzaXRlIGNvbmZpZyBmaWxlCit0b29sY2hhaW5fY3JlYXRlX3Nka19zaXRlY29uZmlnICgpIHsKKwlsb2NhbCBzaXRlY29uZmlnPSQxCisKKwlybSAtZiAkc2l0ZWNvbmZpZworCXRvdWNoICRzaXRlY29uZmlnCisKKwlmb3Igc2l0ZWZpbGUgaW4gJHtUT09MQ0hBSU5fQ09ORklHU0lURV9OT0NBQ0hFfSA7IGRvCisJCWNhdCAkc2l0ZWZpbGUgPj4gJHNpdGVjb25maWcKKwlkb25lCisKKwkjZ2V0IGNhY2hlZCBzaXRlIGNvbmZpZworCWZvciBzaXRlZmlsZSBpbiAke1RPT0xDSEFJTl9ORUVEX0NPTkZJR1NJVEVfQ0FDSEV9OyBkbworCQkjIFJlc29sdmUgdmlydHVhbC8qIG5hbWVzIHRvIHRoZSByZWFsIHJlY2lwZSBuYW1lIHVzaW5nIHN5c3Jvb3QtcHJvdmlkZXJzIGluZm8KKwkJY2FzZSAkc2l0ZWZpbGUgaW4gdmlydHVhbC8qKQorCQkJc2l0ZWZpbGU9YGVjaG8gJHNpdGVmaWxlIHwgdHIgLyBfYAorCQkJc2l0ZWZpbGU9YGNhdCAke1NUQUdJTkdfRElSX1RBUkdFVH0vc3lzcm9vdC1wcm92aWRlcnMvJHNpdGVmaWxlYAorCQllc2FjCisKKwkJaWYgWyAtciAke1RPT0xDSEFJTl9DT05GSUdTSVRFX1NZU1JPT1RDQUNIRX0vJHtzaXRlZmlsZX1fY29uZmlnIF07IHRoZW4KKwkJCWNhdCAke1RPT0xDSEFJTl9DT05GSUdTSVRFX1NZU1JPT1RDQUNIRX0vJHtzaXRlZmlsZX1fY29uZmlnID4+ICRzaXRlY29uZmlnCisJCWZpCisJZG9uZQorfQorIyBUaGUgaW1tZWRpYXRlIGV4cGFuc2lvbiBhYm92ZSBjYW4gcmVzdWx0IGluIHVud2FudGVkIHBhdGggZGVwZW5kZW5jaWVzIGhlcmUKK3Rvb2xjaGFpbl9jcmVhdGVfc2RrX3NpdGVjb25maWdbdmFyZGVwc2V4Y2x1ZGVdID0gIlRPT0xDSEFJTl9DT05GSUdTSVRFX1NZU1JPT1RDQUNIRSIKKworI1RoaXMgZnVuY3Rpb24gY3JlYXRlIGEgdmVyc2lvbiBpbmZvcm1hdGlvbiBmaWxlCit0b29sY2hhaW5fY3JlYXRlX3Nka192ZXJzaW9uICgpIHsKKwlsb2NhbCB2ZXJzaW9uZmlsZT0kMQorCXJtIC1mICR2ZXJzaW9uZmlsZQorCXRvdWNoICR2ZXJzaW9uZmlsZQorCWVjaG8gJ0Rpc3RybzogJHtESVNUUk99JyA+PiAkdmVyc2lvbmZpbGUKKwllY2hvICdEaXN0cm8gVmVyc2lvbjogJHtESVNUUk9fVkVSU0lPTn0nID4+ICR2ZXJzaW9uZmlsZQorCWVjaG8gJ01ldGFkYXRhIFJldmlzaW9uOiAke01FVEFEQVRBX1JFVklTSU9OfScgPj4gJHZlcnNpb25maWxlCisJZWNobyAnVGltZXN0YW1wOiAke0RBVEVUSU1FfScgPj4gJHZlcnNpb25maWxlCit9Cit0b29sY2hhaW5fY3JlYXRlX3Nka192ZXJzaW9uW3ZhcmRlcHNleGNsdWRlXSA9ICJEQVRFVElNRSIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBpbXBvcnQgb2UuY2xhc3NleHRlbmQKKyAgICBkZXBzID0gIiIKKyAgICBmb3IgZGVwIGluIChkLmdldFZhcignVE9PTENIQUlOX05FRURfQ09ORklHU0lURV9DQUNIRScsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICBkZXBzICs9ICIgJXM6ZG9fcG9wdWxhdGVfc3lzcm9vdCIgJSBkZXAKKyAgICAgICAgZm9yIHZhcmlhbnQgaW4gKGQuZ2V0VmFyKCdNVUxUSUxJQl9WQVJJQU5UUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgY2xzZXh0ZW5kID0gb2UuY2xhc3NleHRlbmQuQ2xhc3NFeHRlbmRlcih2YXJpYW50LCBkKQorICAgICAgICAgICAgbmV3ZGVwID0gY2xzZXh0ZW5kLmV4dGVuZF9uYW1lKGRlcCkKKyAgICAgICAgICAgIGRlcHMgKz0gIiAlczpkb19wb3B1bGF0ZV9zeXNyb290IiAlIG5ld2RlcAorICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fY29uZmlndXJlJywgJ2RlcGVuZHMnLCBkZXBzKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdHlwZWNoZWNrLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90eXBlY2hlY2suYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmRhOTMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdHlwZWNoZWNrLmJiY2xhc3MKQEAgLTAsMCArMSwxMiBAQAorIyBDaGVjayB0eXBlcyBvZiBiaXRiYWtlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisjCisjIFNlZSBvZS50eXBlcyBmb3IgZGV0YWlscy4KKworcHl0aG9uIGNoZWNrX3R5cGVzKCkgeworICAgIGltcG9ydCBvZS50eXBlcworICAgIGZvciBrZXkgaW4gZS5kYXRhLmtleXMoKToKKyAgICAgICAgaWYgZS5kYXRhLmdldFZhckZsYWcoa2V5LCAidHlwZSIpOgorICAgICAgICAgICAgb2UuZGF0YS50eXBlZF92YWx1ZShrZXksIGUuZGF0YSkKK30KK2FkZGhhbmRsZXIgY2hlY2tfdHlwZXMKK2NoZWNrX3R5cGVzW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQ29uZmlnUGFyc2VkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdWJvb3QtY29uZmlnLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91Ym9vdC1jb25maWcuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjA2MWFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdWJvb3QtY29uZmlnLmJiY2xhc3MKQEAgLTAsMCArMSw0OSBAQAorIyBIYW5kbGUgVS1Cb290IGNvbmZpZyBmb3IgYSBtYWNoaW5lCisjCisjIFRoZSBmb3JtYXQgdG8gc3BlY2lmeSBpdCwgaW4gdGhlIG1hY2hpbmUsIGlzOgorIworIyBVQk9PVF9DT05GSUcgPz89IDxkZWZhdWx0PgorIyBVQk9PVF9DT05GSUdbZm9vXSA9ICJjb25maWcsaW1hZ2VzIgorIworIyBvcgorIworIyBVQk9PVF9NQUNISU5FID0gImNvbmZpZyIKKyMKKyMgQ29weXJpZ2h0IDIwMTMsIDIwMTQgKEMpIE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorCitweXRob24gKCkgeworICAgIHVib290bWFjaGluZSA9IGQuZ2V0VmFyKCJVQk9PVF9NQUNISU5FIiwgVHJ1ZSkKKyAgICB1Ym9vdGNvbmZpZ2ZsYWdzID0gZC5nZXRWYXJGbGFncygnVUJPT1RfQ09ORklHJykKKyAgICAjIFRoZSAiZG9jIiB2YXJmbGFnIGlzIHNwZWNpYWwsIHdlIGRvbid0IHdhbnQgdG8gc2VlIGl0IGhlcmUKKyAgICB1Ym9vdGNvbmZpZ2ZsYWdzLnBvcCgnZG9jJywgTm9uZSkKKworICAgIGlmIG5vdCB1Ym9vdG1hY2hpbmUgYW5kIG5vdCB1Ym9vdGNvbmZpZ2ZsYWdzOgorICAgICAgICBQTiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgICAgIEZJTEUgPSBvcy5wYXRoLmJhc2VuYW1lKGQuZ2V0VmFyKCJGSUxFIiwgVHJ1ZSkpCisgICAgICAgIGJiLmRlYnVnKDEsICJUbyBidWlsZCAlcywgc2VlICVzIGZvciBpbnN0cnVjdGlvbnMgb24gXAorICAgICAgICAgICAgICAgICBzZXR0aW5nIHVwIHlvdXIgbWFjaGluZSBjb25maWciICUgKFBOLCBGSUxFKSkKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIkVpdGhlciBVQk9PVF9NQUNISU5FIG9yIFVCT09UX0NPTkZJRyBtdXN0IGJlIHNldCBpbiB0aGUgJXMgbWFjaGluZSBjb25maWd1cmF0aW9uLiIgJSBkLmdldFZhcigiTUFDSElORSIsIFRydWUpKQorCisgICAgaWYgdWJvb3RtYWNoaW5lIGFuZCB1Ym9vdGNvbmZpZ2ZsYWdzOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiWW91IGNhbm5vdCB1c2UgVUJPT1RfTUFDSElORSBhbmQgVUJPT1RfQ09ORklHIGF0IHRoZSBzYW1lIHRpbWUuIikKKworICAgIGlmIG5vdCB1Ym9vdGNvbmZpZ2ZsYWdzOgorICAgICAgICByZXR1cm4KKworICAgIHVib290Y29uZmlnID0gKGQuZ2V0VmFyKCdVQk9PVF9DT05GSUcnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGlmIGxlbih1Ym9vdGNvbmZpZykgPiAwOgorICAgICAgICBmb3IgY29uZmlnIGluIHVib290Y29uZmlnOgorICAgICAgICAgICAgZm9yIGYsIHYgaW4gdWJvb3Rjb25maWdmbGFncy5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIGNvbmZpZyA9PSBmOiAKKyAgICAgICAgICAgICAgICAgICAgaXRlbXMgPSB2LnNwbGl0KCcsJykKKyAgICAgICAgICAgICAgICAgICAgaWYgaXRlbXNbMF0gYW5kIGxlbihpdGVtcykgPiAyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoJ09ubHkgY29uZmlnLGltYWdlcyBjYW4gYmUgc3BlY2lmaWVkIScpCisgICAgICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdVQk9PVF9NQUNISU5FJywgJyAnICsgaXRlbXNbMF0pCisgICAgICAgICAgICAgICAgICAgICMgSU1BR0VfRlNUWVBFUyBhcHBlbmRpbmcKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGl0ZW1zKSA+IDEgYW5kIGl0ZW1zWzFdOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZGVidWcoMSwgIkFwcGVuZGluZyAnJXMnIHRvIElNQUdFX0ZTVFlQRVMuIiAlIGl0ZW1zWzFdKQorICAgICAgICAgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCAnICcgKyBpdGVtc1sxXSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICBlbGlmIGxlbih1Ym9vdGNvbmZpZykgPT0gMDoKKyAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgnWW91IG11c3Qgc2V0IGEgZGVmYXVsdCBpbiBVQk9PVF9DT05GSUcuJykKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VuaW5hdGl2ZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdW5pbmF0aXZlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEzOTFkYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VuaW5hdGl2ZS5iYmNsYXNzCkBAIC0wLDAgKzEsNDQgQEAKK05BVElWRUxTQlNUUklORyA9ICJ1bml2ZXJzYWwiCisKK1VOSU5BVElWRV9MT0FERVIgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9L2xpYi9sZC1saW51eC14ODYtNjQuc28uMiIKKworYWRkaGFuZGxlciB1bmluYXRpdmVfZXZlbnRoYW5kbGVyCit1bmluYXRpdmVfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRTdGFydGVkIgorCitweXRob24gdW5pbmF0aXZlX2V2ZW50aGFuZGxlcigpIHsKKyAgICBsb2FkZXIgPSBlLmRhdGEuZ2V0VmFyKCJVTklOQVRJVkVfTE9BREVSIiwgVHJ1ZSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobG9hZGVyKToKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgY21kID0gZS5kYXRhLmV4cGFuZCgibWtkaXIgLXAgJHtTVEFHSU5HX0RJUn07IGNkICR7U1RBR0lOR19ESVJ9OyB0YXIgLXhqZiAke0NPUkVCQVNFfS8ke0JVSUxEX0FSQ0h9LW5hdGl2ZXNkay1saWJjLnRhci5iejI7ICR7U1RBR0lOR19ESVJ9L3JlbG9jYXRlX3Nkay5weSAke1NUQUdJTkdfRElSX05BVElWRX0gJHtVTklOQVRJVkVfTE9BREVSfSAke1VOSU5BVElWRV9MT0FERVJ9ICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wYXRjaGVsZi11bmluYXRpdmUiKQorICAgICAgICAjYmIud2FybigibmF0aXZlc2RrIGxpYiBleHRyYWN0aW9uOiAiICsgY21kKQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoY21kLCBzaGVsbD1UcnVlKQorfQorCitTU1RBVEVQT1NUVU5QQUNLRlVOQ1NfYXBwZW5kID0gIiB1bmluYXRpdmVfY2hhbmdlaW50ZXJwIgorCitweXRob24gdW5pbmF0aXZlX2NoYW5nZWludGVycCAoKSB7CisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICBpbXBvcnQgc3RhdAorICAgIGltcG9ydCBvZS5xYQorCisgICAgaWYgbm90IChiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zc3NkaycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCkpOgorICAgICAgICByZXR1cm4KKworICAgIHNzdGF0ZWluc3QgPSBkLmdldFZhcignU1NUQVRFX0lOU1RESVInLCBUcnVlKQorICAgIGZvciB3YWxrcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhzc3RhdGVpbnN0KToKKyAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICBmID0gb3MucGF0aC5qb2luKHdhbGtyb290LCBmaWxlKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoZik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHMgPSBvcy5zdGF0KGYpCisgICAgICAgICAgICBpZiBub3QgKChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhVU1IpIG9yIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhHUlApIG9yIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhPVEgpKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxmID0gb2UucWEuRUxGRmlsZShmKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGVsZi5vcGVuKCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjYmIud2FybigicGF0Y2hlbGYtdW5pbmF0aXZlIC0tc2V0LWludGVycHJldGVyICVzICVzIiAlIChkLmdldFZhcigiVU5JTkFUSVZFX0xPQURFUiIsIFRydWUpLCBmKSkKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbCgicGF0Y2hlbGYtdW5pbmF0aXZlIC0tc2V0LWludGVycHJldGVyICVzICVzIiAlIChkLmdldFZhcigiVU5JTkFUSVZFX0xPQURFUiIsIFRydWUpLCBmKSwgc2hlbGw9VHJ1ZSkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VwZGF0ZS1hbHRlcm5hdGl2ZXMuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VwZGF0ZS1hbHRlcm5hdGl2ZXMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2MxNjU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXBkYXRlLWFsdGVybmF0aXZlcy5iYmNsYXNzCkBAIC0wLDAgKzEsMjY3IEBACisjIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBoZWxwIHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIHdoaWNoIGlzIHVzZWZ1bCB3aGVuCisjIG11bHRpcGxlIHNvdXJjZXMgcHJvdmlkZSBzYW1lIGNvbW1hbmQuIFlvdSBjYW4gdXNlIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKyMgY29tbWFuZCBkaXJlY3RseSBpbiB5b3VyIHJlY2lwZSwgYnV0IGluIG1vc3QgY2FzZXMgdGhpcyBjbGFzcyBzaW1wbGlmaWVzCisjIHRoYXQgam9iLgorIworIyBUbyB1c2UgdGhpcyBjbGFzcyBhIG51bWJlciBvZiB2YXJpYWJsZXMgc2hvdWxkIGJlIGRlZmluZWQ6CisjCisjIExpc3QgYWxsIG9mIHRoZSBhbHRlcm5hdGl2ZXMgbmVlZGVkIGJ5IGEgcGFja2FnZToKKyMgQUxURVJOQVRJVkVfPHBrZz4gPSAibmFtZTEgbmFtZTIgbmFtZTMgLi4uIgorIworIyAgIGkuZS4gQUxURVJOQVRJVkVfYnVzeWJveCA9ICJzaCBzZWQgdGVzdCBicmFja2V0IgorIworIyBUaGUgcGF0aG5hbWUgb2YgdGhlIGxpbmsKKyMgQUxURVJOQVRJVkVfTElOS19OQU1FW25hbWVdID0gInRhcmdldCIKKyMKKyMgICBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBiaW5hcnkgb25jZSBpdCdzIGJlZW4gaW5zdGFsbGVkIG9udG8gdGhlIHJ1bnRpbWUuCisjICAgVGhpcyBuYW1lIGlzIGdsb2JhbCB0byBhbGwgc3BsaXQgcGFja2FnZXMgaW4gdGhpcyByZWNpcGUsIGFuZCBzaG91bGQgbWF0Y2gKKyMgICBvdGhlciByZWNpcGVzIHdpdGggdGhlIHNhbWUgZnVuY3Rpb25hbGl0eS4KKyMgICBpLmUuIEFMVEVSTkFUSVZFX0xJTktfTkFNRVticmFja2V0XSA9ICIvdXNyL2Jpbi9bIgorIworIyBOT1RFOiBJZiBBTFRFUk5BVElWRV9MSU5LX05BTUUgaXMgbm90IGRlZmluZWQsIGl0IGRlZmF1bHRzIHRvICR7YmluZGlyfS9uYW1lCisjCisjIFRoZSBkZWZhdWx0IGxpbmsgdG8gY3JlYXRlIGZvciBhbGwgdGFyZ2V0cworIyBBTFRFUk5BVElWRV9UQVJHRVQgPSAidGFyZ2V0IgorIworIyAgIFRoaXMgaXMgdXNlZnVsIGluIGEgbXVsdGljYWxsIGJpbmFyeSBjYXNlCisjICAgaS5lLiBBTFRFUk5BVElWRV9UQVJHRVQgPSAiL2Jpbi9idXN5Ym94IgorIworIyBBIG5vbi1kZWZhdWx0IGxpbmsgdG8gY3JlYXRlIGZvciBhIHRhcmdldAorIyBBTFRFUk5BVElWRV9UQVJHRVRbbmFtZV0gPSAidGFyZ2V0IgorIworIyAgIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGJpbmFyeSBhcyBpdCdzIGJlZW4gaW5zdGFsbCBieSBkb19pbnN0YWxsCisjICAgaS5lLiBBTFRFUk5BVElWRV9UQVJHRVRbc2hdID0gIi9iaW4vYmFzaCIKKyMKKyMgQSBwYWNrYWdlIHNwZWNpZmljIGxpbmsgZm9yIGEgdGFyZ2V0CisjIEFMVEVSTkFUSVZFX1RBUkdFVF88cGtnPltuYW1lXSA9ICJ0YXJnZXQiCisjCisjICAgVGhpcyBpcyB1c2VmdWwgd2hlbiBhIHJlY2lwZSBwcm92aWRlcyBtdWx0aXBsZSBhbHRlcm5hdGl2ZXMgZm9yIHRoZQorIyAgIHNhbWUgaXRlbS4KKyMKKyMgTk9URTogSWYgQUxURVJOQVRJVkVfVEFSR0VUIGlzIG5vdCBkZWZpbmVkLCBpdCB3aWxsIGluaGVyaXQgdGhlIHZhbHVlCisjIGZyb20gQUxURVJOQVRJVkVfTElOS19OQU1FLgorIworIyBOT1RFOiBJZiB0aGUgQUxURVJOQVRJVkVfTElOS19OQU1FIGFuZCBBTFRFUk5BVElWRV9UQVJHRVQgYXJlIHRoZSBzYW1lLAorIyBBTFRFUk5BVElWRV9UQVJHRVQgd2lsbCBoYXZlICcue0JQTn0nIGFwcGVuZGVkIHRvIGl0LiAgSWYgdGhlIGZpbGUKKyMgcmVmZXJlbmNlZCBoYXMgbm90IGJlZW4gcmVuYW1lZCwgaXQgd2lsbCBhbHNvIGJlIHJlbmFtZWQuICAoVGhpcyBhdm9pZHMKKyMgdGhlIG5lZWQgdG8gcmVuYW1lIGFsdGVybmF0aXZlIGZpbGVzIGluIHRoZSBkb19pbnN0YWxsIHN0ZXAsIGJ1dCBzdGlsbAorIyBzdXBwb3J0cyBpdCBpZiBuZWNlc3NhcnkgZm9yIHNvbWUgcmVhc29uLikKKyMKKyMgVGhlIGRlZmF1bHQgcHJpb3JpdHkgZm9yIGFueSBhbHRlcm5hdGl2ZXMKKyMgQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAicHJpb3JpdHkiCisjCisjICAgaS5lLiBkZWZhdWx0IGlzIEFMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwIgorIworIyBUaGUgbm9uLWRlZmF1bHQgcHJpb3JpdHkgZm9yIGEgc3BlY2lmaWMgdGFyZ2V0CisjIEFMVEVSTkFUSVZFX1BSSU9SSVRZW25hbWVdID0gInByaW9yaXR5IgorIworIyBUaGUgcGFja2FnZSBwcmlvcml0eSBmb3IgYSBzcGVjaWZpYyB0YXJnZXQKKyMgQUxURVJOQVRJVkVfUFJJT1JJVFlfPHBrZz5bbmFtZV0gPSAicHJpb3JpdHkiCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwIgorCisjIFdlIG5lZWQgc3BlY2lhbCBwcm9jZXNzaW5nIGZvciB2YXJkZXBzIGJlY2F1c2UgaXQgY2FuIG5vdCB3b3JrIG9uCisjIG1vZGlmaWVkIGZsYWcgdmFsdWVzLiAgU28gd2UgYWdyZWdhdGUgdGhlIGZsYWdzIGludG8gYSBuZXcgdmFyaWFibGUKKyMgYW5kIGluY2x1ZGUgdGhhdCB2YWlyYWJsZSBpbiB0aGUgc2V0LgorVVBEQUxUVkFSUyAgPSAiQUxURVJOQVRJVkUgQUxURVJOQVRJVkVfTElOS19OQU1FIEFMVEVSTkFUSVZFX1RBUkdFVCBBTFRFUk5BVElWRV9QUklPUklUWSIKKworZGVmIGdlbl91cGRhdGVhbHRlcm5hdGl2ZXN2YXJkZXBzKGQpOgorICAgIHBrZ3MgPSAoZC5nZXRWYXIoIlBBQ0tBR0VTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICB2YXJzID0gKGQuZ2V0VmFyKCJVUERBTFRWQVJTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgICMgRmlyc3QgY29tcHV0ZSB0aGVtIGZvciBub25fcGtnIHZlcnNpb25zCisgICAgZm9yIHYgaW4gdmFyczoKKyAgICAgICAgZm9yIGZsYWcgaW4gKGQuZ2V0VmFyRmxhZ3Modikgb3Ige30pOgorICAgICAgICAgICAgaWYgZmxhZyA9PSAiZG9jIiBvciBmbGFnID09ICJ2YXJkZXBzIiBvciBmbGFnID09ICJ2YXJkZXBzZXhwIjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZC5hcHBlbmRWYXIoJyVzX1ZBUkRFUFMnICUgKHYpLCAnICVzOiVzJyAlIChmbGFnLCBkLmdldFZhckZsYWcodiwgZmxhZywgRmFsc2UpKSkKKworICAgIGZvciBwIGluIHBrZ3M6CisgICAgICAgIGZvciB2IGluIHZhcnM6CisgICAgICAgICAgICBmb3IgZmxhZyBpbiAoZC5nZXRWYXJGbGFncygiJXNfJXMiICUgKHYscCkpIG9yIHt9KToKKyAgICAgICAgICAgICAgICBpZiBmbGFnID09ICJkb2MiIG9yIGZsYWcgPT0gInZhcmRlcHMiIG9yIGZsYWcgPT0gInZhcmRlcHNleHAiOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyKCclc19WQVJERVBTXyVzJyAlICh2LHApLCAnICVzOiVzJyAlIChmbGFnLCBkLmdldFZhckZsYWcoJyVzXyVzJyAlICh2LHApLCBmbGFnLCBGYWxzZSkpKQorCitkZWYgdWFfZXh0ZW5kX2RlcGVuZHMoZCk6CisgICAgaWYgbm90ICd2aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMnIGluIGQuZ2V0VmFyKCdQUk9WSURFUycsIFRydWUpOgorICAgICAgICBkLmFwcGVuZFZhcignREVQRU5EUycsICcgdmlydHVhbC8ke01MUFJFRklYfXVwZGF0ZS1hbHRlcm5hdGl2ZXMnKQorCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgIyBVcGRhdGUgQWx0ZXJuYXRpdmVzIG9ubHkgd29ya3Mgb24gdGFyZ2V0IHBhY2thZ2VzLi4uCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgb3IgXAorICAgICAgIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3NzZGsnLCBkKSBvciBcCisgICAgICAgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MtY2FuYWRpYW4nLCBkKToKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIGNvbXB1dGUgc3BlY2lhbCB2YXJkZXBzCisgICAgZ2VuX3VwZGF0ZWFsdGVybmF0aXZlc3ZhcmRlcHMoZCkKKworICAgICMgZXh0ZW5kIHRoZSBkZXBlbmRzIHRvIGluY2x1ZGUgdmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzCisgICAgdWFfZXh0ZW5kX2RlcGVuZHMoZCkKK30KKworZGVmIGdlbl91cGRhdGVhbHRlcm5hdGl2ZXN2YXJzKGQpOgorICAgIHJldCA9IFtdCisgICAgcGtncyA9IChkLmdldFZhcigiUEFDS0FHRVMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIHZhcnMgPSAoZC5nZXRWYXIoIlVQREFMVFZBUlMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorCisgICAgZm9yIHYgaW4gdmFyczoKKyAgICAgICAgcmV0LmFwcGVuZCh2ICsgIl9WQVJERVBTIikKKworICAgIGZvciBwIGluIHBrZ3M6CisgICAgICAgIGZvciB2IGluIHZhcnM6CisgICAgICAgICAgICByZXQuYXBwZW5kKHYgKyAiXyIgKyBwKQorICAgICAgICAgICAgcmV0LmFwcGVuZCh2ICsgIl9WQVJERVBTXyIgKyBwKQorICAgIHJldHVybiAiICIuam9pbihyZXQpCisKKyMgTm93IHRoZSBuZXcgc3R1ZmYsIHdlIHVzZSBhIGN1c3RvbSBmdW5jdGlvbiB0byBnZW5lcmF0ZSB0aGUgcmlnaHQgdmFsdWVzCitwb3B1bGF0ZV9wYWNrYWdlc1t2YXJkZXBzXSArPSAiJHtVUERBTFRWQVJTfSAke0BnZW5fdXBkYXRlYWx0ZXJuYXRpdmVzdmFycyhkKX0iCisKKyMgV2UgbmVlZCB0byBkbyB0aGUgcmVuYW1lIGFmdGVyIHRoZSBpbWFnZSBjcmVhdGlvbiBzdGVwLCBidXQgYmVmb3JlCisjIHRoZSBzcGxpdCBhbmQgc3RyaXAgc3RlcHMuLiAgcGFja2FnZWNvcHkgc2VlbXMgdG8gYmUgdGhlIGVhcmxpZXN0IHJlYXNvbmFibGUKKyMgcGxhY2UuCitweXRob24gcGVyZm9ybV9wYWNrYWdlY29weV9hcHBlbmQgKCkgeworICAgICMgQ2hlY2sgZm9yIGRlcHJlY2F0ZWQgdXNhZ2UuLi4KKyAgICBwbiA9IGQuZ2V0VmFyKCdCUE4nLCBUcnVlKQorICAgIGlmIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9MSU5LUycsIFRydWUpICE9IE5vbmU6CisgICAgICAgIGJiLmZhdGFsKCclczogVXNlIG9mIEFMVEVSTkFUSVZFX0xJTktTL0FMVEVSTkFUSVZFX1BBVEgvQUxURVJOQVRJVkVfTkFNRSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLCBwbGVhc2UgY29udmVydCB0byB0aGUgdXBkYXRlZCBzeW50YXgsIHNlZSB1cGRhdGUtYWx0ZXJuYXRpdmVzLmJiY2xhc3MgZm9yIG1vcmUgaW5mby4nICUgcG4pCisKKyAgICAjIERvIGFjdHVhbCB1cGRhdGUgYWx0ZXJuYXRpdmVzIHByb2Nlc3NpbmcKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorICAgIGZvciBwa2cgaW4gKGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAjIElmIHRoZSBzcmMgPT0gZGVzdCwgd2Uga25vdyB3ZSBuZWVkIHRvIHJlbmFtZSB0aGUgZGVzdCBieSBhcHBlbmRpbmcgJHtCUE59CisgICAgICAgIGxpbmtfcmVuYW1lID0ge30KKyAgICAgICAgZm9yIGFsdF9uYW1lIGluIChkLmdldFZhcignQUxURVJOQVRJVkVfJXMnICUgcGtnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGFsdF9saW5rICAgICA9IGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgYWx0X25hbWUsIFRydWUpCisgICAgICAgICAgICBpZiBub3QgYWx0X2xpbms6CisgICAgICAgICAgICAgICAgYWx0X2xpbmsgPSAiJXMvJXMiICUgKGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSwgYWx0X25hbWUpCisgICAgICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBhbHRfbmFtZSwgYWx0X2xpbmspCisKKyAgICAgICAgICAgIGFsdF90YXJnZXQgICA9IGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgYWx0X25hbWUsIFRydWUpIG9yIGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUJywgYWx0X25hbWUsIFRydWUpCisgICAgICAgICAgICBhbHRfdGFyZ2V0ICAgPSBhbHRfdGFyZ2V0IG9yIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBUcnVlKSBvciBkLmdldFZhcignQUxURVJOQVRJVkVfVEFSR0VUJywgVHJ1ZSkgb3IgYWx0X2xpbmsKKyAgICAgICAgICAgICMgU29tZXRpbWVzIGFsdF90YXJnZXQgaXMgc3BlY2lmaWVkIGFzIHJlbGF0aXZlIHRvIHRoZSBsaW5rIG5hbWUuCisgICAgICAgICAgICBhbHRfdGFyZ2V0ICAgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGFsdF9saW5rKSwgYWx0X3RhcmdldCkKKworICAgICAgICAgICAgIyBJZiB0aGUgbGluayBhbmQgdGFyZ2V0IGFyZSB0aGUgc2FtZSBuYW1lLCB3ZSBuZWVkIHRvIHJlbmFtZSB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgaWYgYWx0X2xpbmsgPT0gYWx0X3RhcmdldDoKKyAgICAgICAgICAgICAgICBzcmMgPSAnJXMvJXMnICUgKHBrZ2Rlc3QsIGFsdF90YXJnZXQpCisgICAgICAgICAgICAgICAgYWx0X3RhcmdldF9yZW5hbWUgPSAnJXMuJXMnICUgKGFsdF90YXJnZXQsIHBuKQorICAgICAgICAgICAgICAgIGRlc3QgPSAnJXMvJXMnICUgKHBrZ2Rlc3QsIGFsdF90YXJnZXRfcmVuYW1lKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGgubGV4aXN0cyhkZXN0KToKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgnJXM6IEFscmVhZHkgcmVuYW1lZDogJXMnICUgKHBuLCBhbHRfdGFyZ2V0X3JlbmFtZSkpCisgICAgICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmxleGlzdHMoc3JjKToKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoc3JjKToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRGVsYXkgcmVuYW1lIG9mIGxpbmtzCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rX3JlbmFtZVthbHRfdGFyZ2V0XSA9IGFsdF90YXJnZXRfcmVuYW1lCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCclczogUmVuYW1lICVzIC0+ICVzJyAlIChwbiwgYWx0X3RhcmdldCwgYWx0X3RhcmdldF9yZW5hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgb3MucmVuYW1lKHNyYywgZGVzdCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCIlczogYWx0ZXJuYXRpdmUgdGFyZ2V0ICglcyBvciAlcykgZG9lcyBub3QgZXhpc3QsIHNraXBwaW5nLi4uIiAlIChwbiwgYWx0X3RhcmdldCwgYWx0X3RhcmdldF9yZW5hbWUpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgYWx0X25hbWUsIGFsdF90YXJnZXRfcmVuYW1lKQorCisgICAgICAgICMgUHJvY2VzcyBkZWxheWVkIGxpbmsgbmFtZXMKKyAgICAgICAgIyBEbyB0aGVzZSBhZnRlciBvdGhlciByZW5hbWVzIHNvIHdlIGNhbiBjb3JyZWN0IGJyb2tlbiBsaW5rcworICAgICAgICBmb3IgYWx0X3RhcmdldCBpbiBsaW5rX3JlbmFtZToKKyAgICAgICAgICAgIHNyYyA9ICclcy8lcycgJSAocGtnZGVzdCwgYWx0X3RhcmdldCkKKyAgICAgICAgICAgIGRlc3QgPSAnJXMvJXMnICUgKHBrZ2Rlc3QsIGxpbmtfcmVuYW1lW2FsdF90YXJnZXRdKQorICAgICAgICAgICAgbGluayA9IG9zLnJlYWRsaW5rKHNyYykKKyAgICAgICAgICAgIGxpbmtfdGFyZ2V0ID0gb2UucGF0aC5yZWFscGF0aChzcmMsIHBrZ2Rlc3QsIFRydWUpCisKKyAgICAgICAgICAgIGlmIG9zLnBhdGgubGV4aXN0cyhsaW5rX3RhcmdldCk6CisgICAgICAgICAgICAgICAgIyBPaywgdGhlIGxpbmtfdGFyZ2V0IGV4aXN0cywgd2UgY2FuIHJlbmFtZQorICAgICAgICAgICAgICAgIGJiLm5vdGUoJyVzOiBSZW5hbWUgKGxpbmspICVzIC0+ICVzJyAlIChwbiwgYWx0X3RhcmdldCwgbGlua19yZW5hbWVbYWx0X3RhcmdldF0pKQorICAgICAgICAgICAgICAgIG9zLnJlbmFtZShzcmMsIGRlc3QpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgVHJ5IHRvIHJlc29sdmUgdGhlIGJyb2tlbiBsaW5rIHRvIGxpbmsuJHtCUE59CisgICAgICAgICAgICAgICAgbGlua19tYXliZSA9ICclcy4lcycgJSAob3MucmVhZGxpbmsoc3JjKSwgcG4pCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5sZXhpc3RzKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoc3JjKSwgbGlua19tYXliZSkpOgorICAgICAgICAgICAgICAgICAgICAjIE9rLCB0aGUgcmVuYW1lZCBsaW5rIHRhcmdldCBleGlzdHMuLiBjcmVhdGUgYSBuZXcgbGluaywgYW5kIHJlbW92ZSB0aGUgb3JpZ2luYWwKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgnJXM6IENyZWF0aW5nIG5ldyBsaW5rICVzIC0+ICVzJyAlIChwbiwgbGlua19yZW5hbWVbYWx0X3RhcmdldF0sIGxpbmtfbWF5YmUpKQorICAgICAgICAgICAgICAgICAgICBvcy5zeW1saW5rKGxpbmtfbWF5YmUsIGRlc3QpCisgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhzcmMpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYmIud2FybignJXM6IFVuYWJsZSB0byByZXNvbHZlIGRhbmdsaW5nIHN5bWxpbms6ICVzJyAlIChwbiwgYWx0X3RhcmdldCkpCit9CisKK1BBQ0tBR0VTUExJVEZVTkNTX3ByZXBlbmQgPSAicG9wdWxhdGVfcGFja2FnZXNfdXBkYXRlYWx0ZXJuYXRpdmVzICIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3VwZGF0ZWFsdGVybmF0aXZlcyAoKSB7CisgICAgcG4gPSBkLmdldFZhcignQlBOJywgVHJ1ZSkKKworICAgICMgRG8gYWN0dWFsIHVwZGF0ZSBhbHRlcm5hdGl2ZXMgcHJvY2Vzc2luZworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisgICAgZm9yIHBrZyBpbiAoZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICMgQ3JlYXRlIHBvc3QgaW5zdGFsbC9yZW1vdmFsIHNjcmlwdHMKKyAgICAgICAgYWx0X3NldHVwX2xpbmtzID0gIiIKKyAgICAgICAgYWx0X3JlbW92ZV9saW5rcyA9ICIiCisgICAgICAgIGZvciBhbHRfbmFtZSBpbiAoZC5nZXRWYXIoJ0FMVEVSTkFUSVZFXyVzJyAlIHBrZywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICBhbHRfbGluayAgICAgPSBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIGFsdF9uYW1lLCBUcnVlKQorICAgICAgICAgICAgYWx0X3RhcmdldCAgID0gZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBhbHRfbmFtZSwgVHJ1ZSkgb3IgZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBhbHRfbmFtZSwgVHJ1ZSkKKyAgICAgICAgICAgIGFsdF90YXJnZXQgICA9IGFsdF90YXJnZXQgb3IgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBUcnVlKSBvciBhbHRfbGluaworICAgICAgICAgICAgIyBTb21ldGltZXMgYWx0X3RhcmdldCBpcyBzcGVjaWZpZWQgYXMgcmVsYXRpdmUgdG8gdGhlIGxpbmsgbmFtZS4KKyAgICAgICAgICAgIGFsdF90YXJnZXQgICA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoYWx0X2xpbmspLCBhbHRfdGFyZ2V0KQorCisgICAgICAgICAgICBhbHRfcHJpb3JpdHkgPSBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1BSSU9SSVRZXyVzJyAlIHBrZywgIGFsdF9uYW1lLCBUcnVlKSBvciBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1BSSU9SSVRZJywgIGFsdF9uYW1lLCBUcnVlKQorICAgICAgICAgICAgYWx0X3ByaW9yaXR5ID0gYWx0X3ByaW9yaXR5IG9yIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9QUklPUklUWV8lcycgJSBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9QUklPUklUWScsIFRydWUpCisKKyAgICAgICAgICAgICMgVGhpcyBzaG91bGRuJ3QgdHJpZ2dlciwgYXMgaXQgc2hvdWxkIGhhdmUgYmVlbiByZXNvbHZlZCBlYXJsaWVyIQorICAgICAgICAgICAgaWYgYWx0X2xpbmsgPT0gYWx0X3RhcmdldDoKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCdhbHRfbGluayA9PSBhbHRfdGFyZ2V0OiAlcyA9PSAlcyAtLSBjb3JyZWN0aW5nLCB0aGlzIHNob3VsZCBub3QgaGFwcGVuIScgJSAoYWx0X2xpbmssIGFsdF90YXJnZXQpKQorICAgICAgICAgICAgICAgIGFsdF90YXJnZXQgPSAnJXMuJXMnICUgKGFsdF90YXJnZXQsIHBuKQorCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5sZXhpc3RzKCclcy8lcycgJSAocGtnZGVzdCwgYWx0X3RhcmdldCkpOgorICAgICAgICAgICAgICAgIGJiLndhcm4oJyVzOiBOT1QgYWRkaW5nIGFsdGVybmF0aXZlIHByb3ZpZGUgJXM6ICVzIGRvZXMgbm90IGV4aXN0JyAlIChwbiwgYWx0X2xpbmssIGFsdF90YXJnZXQpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgRGVmYXVsdCB0byBnZW5lcmF0ZSBzaGVsbCBzY3JpcHQuLiBldmVudHVhbGx5IHdlIG1heSB3YW50IHRvIGNoYW5nZSB0aGlzLi4uCisgICAgICAgICAgICBhbHRfdGFyZ2V0ID0gb3MucGF0aC5ub3JtcGF0aChhbHRfdGFyZ2V0KQorCisgICAgICAgICAgICBhbHRfc2V0dXBfbGlua3MgICs9ICdcdHVwZGF0ZS1hbHRlcm5hdGl2ZXMgLS1pbnN0YWxsICVzICVzICVzICVzXG4nICUgKGFsdF9saW5rLCBhbHRfbmFtZSwgYWx0X3RhcmdldCwgYWx0X3ByaW9yaXR5KQorICAgICAgICAgICAgYWx0X3JlbW92ZV9saW5rcyArPSAnXHR1cGRhdGUtYWx0ZXJuYXRpdmVzIC0tcmVtb3ZlICAlcyAlc1xuJyAlIChhbHRfbmFtZSwgYWx0X3RhcmdldCkKKworICAgICAgICBpZiBhbHRfc2V0dXBfbGlua3M6CisgICAgICAgICAgICAjIFJERVBFTkRTIHNldHVwCisgICAgICAgICAgICBwcm92aWRlciA9IGQuZ2V0VmFyKCdWSVJUVUFMLVJVTlRJTUVfdXBkYXRlLWFsdGVybmF0aXZlcycsIFRydWUpCisgICAgICAgICAgICBpZiBwcm92aWRlcjoKKyAgICAgICAgICAgICAgICAjYmIubm90ZSgnYWRkaW5nIHJ1bnRpbWUgcmVxdWlyZW1lbnQgZm9yIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgZm9yICVzJyAlIHBrZykKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhcignUkRFUEVORFNfJXMnICUgcGtnLCAnICcgKyBkLmdldFZhcignTUxQUkVGSVgnLCBGYWxzZSkgKyBwcm92aWRlcikKKworICAgICAgICAgICAgYmIubm90ZSgnYWRkaW5nIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgY2FsbHMgdG8gcG9zdGluc3QvcHJlcm0gZm9yICVzJyAlIHBrZykKKyAgICAgICAgICAgIGJiLm5vdGUoJyVzJyAlIGFsdF9zZXR1cF9saW5rcykKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpIG9yICcjIS9iaW4vc2hcbicKKyAgICAgICAgICAgIHBvc3RpbnN0ICs9IGFsdF9zZXR1cF9saW5rcworICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorCisgICAgICAgICAgICBiYi5ub3RlKCclcycgJSBhbHRfcmVtb3ZlX2xpbmtzKQorICAgICAgICAgICAgcHJlcm0gPSBkLmdldFZhcigncGtnX3ByZXJtXyVzJyAlIHBrZywgVHJ1ZSkgb3IgJyMhL2Jpbi9zaFxuJworICAgICAgICAgICAgcHJlcm0gKz0gYWx0X3JlbW92ZV9saW5rcworICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wcmVybV8lcycgJSBwa2csIHByZXJtKQorfQorCitweXRob24gcGFja2FnZV9kb19maWxlZGVwc19hcHBlbmQgKCkgeworICAgIHBuID0gZC5nZXRWYXIoJ0JQTicsIFRydWUpCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgZm9yIGFsdF9uYW1lIGluIChkLmdldFZhcignQUxURVJOQVRJVkVfJXMnICUgcGtnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGFsdF9saW5rICAgICA9IGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgYWx0X25hbWUsIFRydWUpCisgICAgICAgICAgICBhbHRfdGFyZ2V0ICAgPSBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIGFsdF9uYW1lLCBUcnVlKSBvciBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIGFsdF9uYW1lLCBUcnVlKQorICAgICAgICAgICAgYWx0X3RhcmdldCAgID0gYWx0X3RhcmdldCBvciBkLmdldFZhcignQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIFRydWUpIG9yIGFsdF9saW5rCisKKyAgICAgICAgICAgIGlmIGFsdF9saW5rID09IGFsdF90YXJnZXQ6CisgICAgICAgICAgICAgICAgYmIud2FybignYWx0X2xpbmsgPT0gYWx0X3RhcmdldDogJXMgPT0gJXMnICUgKGFsdF9saW5rLCBhbHRfdGFyZ2V0KSkKKyAgICAgICAgICAgICAgICBhbHRfdGFyZ2V0ID0gJyVzLiVzJyAlIChhbHRfdGFyZ2V0LCBwbikKKworICAgICAgICAgICAgaWYgbm90IG9zLnBhdGgubGV4aXN0cygnJXMvJXMvJXMnICUgKHBrZ2Rlc3QsIHBrZywgYWx0X3RhcmdldCkpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgQWRkIGZpbGUgcHJvdmlkZQorICAgICAgICAgICAgdHJhbnNfdGFyZ2V0ID0gb2UucGFja2FnZS5maWxlX3RyYW5zbGF0ZShhbHRfdGFyZ2V0KQorICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ0ZJTEVSUFJPVklERVNfJXNfJXMnICUgKHRyYW5zX3RhcmdldCwgcGtnKSwgIiAiICsgYWx0X2xpbmspCisgICAgICAgICAgICBpZiBub3QgdHJhbnNfdGFyZ2V0IGluIChkLmdldFZhcignRklMRVJQUk9WSURFU0ZMSVNUXyVzJyAlIHBrZywgVHJ1ZSkgb3IgIiIpOgorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdGSUxFUlBST1ZJREVTRkxJU1RfJXMnICUgcGtnLCAiICIgKyB0cmFuc190YXJnZXQpCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VwZGF0ZS1yYy5kLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91cGRhdGUtcmMuZC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMGE3NGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91cGRhdGUtcmMuZC5iYmNsYXNzCkBAIC0wLDAgKzEsMTMzIEBACitVUERBVEVSQ1BOID89ICIke1BOfSIKKworREVQRU5EU19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiB1cGRhdGUtcmMuZC1uYXRpdmUgdXBkYXRlLXJjLmQgaW5pdHNjcmlwdHMiCitVUERBVEVSQ0QgPSAidXBkYXRlLXJjLmQiCitVUERBVEVSQ0RfY2xhc3MtY3Jvc3MgPSAiIgorVVBEQVRFUkNEX2NsYXNzLW5hdGl2ZSA9ICIiCitVUERBVEVSQ0RfY2xhc3MtbmF0aXZlc2RrID0gIiIKKworSU5JVFNDUklQVF9QQVJBTVMgPz0gImRlZmF1bHRzIgorCitJTklUX0RfRElSID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kIgorCit1cGRhdGVyY2RfcHJlaW5zdCgpIHsKK2lmIFsgLXogIiREIiAtYSAtZiAiJHtJTklUX0RfRElSfS8ke0lOSVRTQ1JJUFRfTkFNRX0iIF07IHRoZW4KKwkke0lOSVRfRF9ESVJ9LyR7SU5JVFNDUklQVF9OQU1FfSBzdG9wCitmaQoraWYgdHlwZSB1cGRhdGUtcmMuZCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisJaWYgWyAtbiAiJEQiIF07IHRoZW4KKwkJT1BUPSItZiAtciAkRCIKKwllbHNlCisJCU9QVD0iLWYiCisJZmkKKwl1cGRhdGUtcmMuZCAkT1BUICR7SU5JVFNDUklQVF9OQU1FfSByZW1vdmUKK2ZpCit9CisKK3VwZGF0ZXJjZF9wb3N0aW5zdCgpIHsKK2lmIHR5cGUgdXBkYXRlLXJjLmQgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCU9QVD0iLXIgJEQiCisJZWxzZQorCQlPUFQ9Ii1zIgorCWZpCisJdXBkYXRlLXJjLmQgJE9QVCAke0lOSVRTQ1JJUFRfTkFNRX0gJHtJTklUU0NSSVBUX1BBUkFNU30KK2ZpCit9CisKK3VwZGF0ZXJjZF9wcmVybSgpIHsKK2lmIFsgLXogIiREIiBdOyB0aGVuCisJJHtJTklUX0RfRElSfS8ke0lOSVRTQ1JJUFRfTkFNRX0gc3RvcAorZmkKK30KKwordXBkYXRlcmNkX3Bvc3RybSgpIHsKK2lmIHR5cGUgdXBkYXRlLXJjLmQgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCU9QVD0iLWYgLXIgJEQiCisJZWxzZQorCQlPUFQ9Ii1mIgorCWZpCisJdXBkYXRlLXJjLmQgJE9QVCAke0lOSVRTQ1JJUFRfTkFNRX0gcmVtb3ZlCitmaQorfQorCisKK2RlZiB1cGRhdGVfcmNfYWZ0ZXJfcGFyc2UoZCk6CisgICAgaWYgZC5nZXRWYXIoJ0lOSVRTQ1JJUFRfUEFDS0FHRVMnLCBGYWxzZSkgPT0gTm9uZToKKyAgICAgICAgaWYgZC5nZXRWYXIoJ0lOSVRTQ1JJUFRfTkFNRScsIEZhbHNlKSA9PSBOb25lOgorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXMgaW5oZXJpdHMgdXBkYXRlLXJjLmQgYnV0IGRvZXNuJ3Qgc2V0IElOSVRTQ1JJUFRfTkFNRSIgJSBkLmdldFZhcignRklMRScsIEZhbHNlKSkKKyAgICAgICAgaWYgZC5nZXRWYXIoJ0lOSVRTQ1JJUFRfUEFSQU1TJywgRmFsc2UpID09IE5vbmU6CisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlcyBpbmhlcml0cyB1cGRhdGUtcmMuZCBidXQgZG9lc24ndCBzZXQgSU5JVFNDUklQVF9QQVJBTVMiICUgZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSkpCisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICB1cGRhdGVfcmNfYWZ0ZXJfcGFyc2UoZCkKK30KKworUEFDS0FHRVNQTElURlVOQ1NfcHJlcGVuZCA9ICJwb3B1bGF0ZV9wYWNrYWdlc191cGRhdGVyY2QgIgorUEFDS0FHRVNQTElURlVOQ1NfcmVtb3ZlX2NsYXNzLW5hdGl2ZXNkayA9ICJwb3B1bGF0ZV9wYWNrYWdlc191cGRhdGVyY2QgIgorCitwb3B1bGF0ZV9wYWNrYWdlc191cGRhdGVyY2RbdmFyZGVwc10gKz0gInVwZGF0ZXJjZF9wcmVybSB1cGRhdGVyY2RfcG9zdHJtIHVwZGF0ZXJjZF9wcmVpbnN0IHVwZGF0ZXJjZF9wb3N0aW5zdCIKK3BvcHVsYXRlX3BhY2thZ2VzX3VwZGF0ZXJjZFt2YXJkZXBzZXhjbHVkZV0gKz0gIk9WRVJSSURFUyIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3VwZGF0ZXJjZCAoKSB7CisgICAgZGVmIHVwZGF0ZV9yY2RfYXV0b19kZXBlbmQocGtnKToKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgaW1wb3J0IG9zCisgICAgICAgIHBhdGggPSBkLmV4cGFuZCgiJHtEfSR7SU5JVF9EX0RJUn0vJHtJTklUU0NSSVBUX05BTUV9IikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHN0YXRlbWVudCA9ICJncmVwIC1xIC13ICcvZXRjL2luaXQuZC9mdW5jdGlvbnMnICVzIiAlIHBhdGgKKyAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKHN0YXRlbWVudCwgc2hlbGw9VHJ1ZSkgPT0gMDoKKyAgICAgICAgICAgIG1scHJlZml4ID0gZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdSREVQRU5EU18nICsgcGtnLCAnICVzaW5pdHNjcmlwdHMtZnVuY3Rpb25zJyAlIChtbHByZWZpeCkpCisKKyAgICBkZWYgdXBkYXRlX3JjZF9wYWNrYWdlKHBrZyk6CisgICAgICAgIGJiLmRlYnVnKDEsICdhZGRpbmcgdXBkYXRlLXJjLmQgY2FsbHMgdG8gcHJlaW5zdC9wb3N0aW5zdC9wcmVybS9wb3N0cm0gZm9yICVzJyAlIHBrZykKKworICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgb3ZlcnJpZGVzID0gbG9jYWxkYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgVHJ1ZSkKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgIiVzOiVzIiAlIChwa2csIG92ZXJyaWRlcykpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIHVwZGF0ZV9yY2RfYXV0b19kZXBlbmQocGtnKQorCisgICAgICAgIHByZWluc3QgPSBkLmdldFZhcigncGtnX3ByZWluc3RfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcHJlaW5zdDoKKyAgICAgICAgICAgIHByZWluc3QgPSAnIyEvYmluL3NoXG4nCisgICAgICAgIHByZWluc3QgKz0gbG9jYWxkYXRhLmdldFZhcigndXBkYXRlcmNkX3ByZWluc3QnLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3ByZWluc3RfJXMnICUgcGtnLCBwcmVpbnN0KQorCisgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIG5vdCBwb3N0aW5zdDoKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gJyMhL2Jpbi9zaFxuJworICAgICAgICBwb3N0aW5zdCArPSBsb2NhbGRhdGEuZ2V0VmFyKCd1cGRhdGVyY2RfcG9zdGluc3QnLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCisKKyAgICAgICAgcHJlcm0gPSBkLmdldFZhcigncGtnX3ByZXJtXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHByZXJtOgorICAgICAgICAgICAgcHJlcm0gPSAnIyEvYmluL3NoXG4nCisgICAgICAgIHByZXJtICs9IGxvY2FsZGF0YS5nZXRWYXIoJ3VwZGF0ZXJjZF9wcmVybScsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcHJlcm1fJXMnICUgcGtnLCBwcmVybSkKKworICAgICAgICBwb3N0cm0gPSBkLmdldFZhcigncGtnX3Bvc3RybV8lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIG5vdCBwb3N0cm06CisgICAgICAgICAgICAgICAgcG9zdHJtID0gJyMhL2Jpbi9zaFxuJworICAgICAgICBwb3N0cm0gKz0gbG9jYWxkYXRhLmdldFZhcigndXBkYXRlcmNkX3Bvc3RybScsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgcG9zdHJtKQorCisgICAgICAgIGQuYXBwZW5kVmFyKCdSUkVDT01NRU5EU18nICsgcGtnLCAiICR7TUxQUkVGSVh9JHtVUERBVEVSQ0R9IikKKworICAgICMgQ2hlY2sgdGhhdCB0aGlzIGNsYXNzIGlzbid0IGJlaW5nIGluaGliaXRlZCAoZ2VuZXJhbGx5LCBieQorICAgICMgc3lzdGVtZC5iYmNsYXNzKSBiZWZvcmUgZG9pbmcgYW55IHdvcmsuCisgICAgaWYgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKSBvciBcCisgICAgICAgbm90IGQuZ2V0VmFyKCJJTkhJQklUX1VQREFURVJDRF9CQkNMQVNTIiwgVHJ1ZSk6CisgICAgICAgIHBrZ3MgPSBkLmdldFZhcignSU5JVFNDUklQVF9QQUNLQUdFUycsIFRydWUpCisgICAgICAgIGlmIHBrZ3MgPT0gTm9uZToKKyAgICAgICAgICAgIHBrZ3MgPSBkLmdldFZhcignVVBEQVRFUkNQTicsIFRydWUpCisgICAgICAgICAgICBwYWNrYWdlcyA9IChkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICAgICAgaWYgbm90IHBrZ3MgaW4gcGFja2FnZXMgYW5kIHBhY2thZ2VzICE9IFtdOgorICAgICAgICAgICAgICAgIHBrZ3MgPSBwYWNrYWdlc1swXQorICAgICAgICBmb3IgcGtnIGluIHBrZ3Muc3BsaXQoKToKKyAgICAgICAgICAgIHVwZGF0ZV9yY2RfcGFja2FnZShwa2cpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91c2VyYWRkLXN0YXRpY2lkcy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXNlcmFkZC1zdGF0aWNpZHMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjFhNzBhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXNlcmFkZC1zdGF0aWNpZHMuYmJjbGFzcwpAQCAtMCwwICsxLDI3NiBAQAorIyBJbiBvcmRlciB0byBzdXBwb3J0IGEgZGV0ZXJtaW5pc3RpYyBzZXQgb2YgJ2R5bmFtaWMnIHVzZXJzL2dyb3VwcywKKyMgd2UgbmVlZCBhIGZ1bmN0aW9uIHRvIHJlZm9ybWF0IHRoZSBwYXJhbXMgYmFzZWQgb24gYSBzdGF0aWMgZmlsZQorZGVmIHVwZGF0ZV91c2VyYWRkX3N0YXRpY19jb25maWcoZCk6CisgICAgaW1wb3J0IGFyZ3BhcnNlCisgICAgaW1wb3J0IHJlCisKKyAgICBjbGFzcyBteUFyZ3VtZW50UGFyc2VyKCBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlciApOgorICAgICAgICBkZWYgX3ByaW50X21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgZmlsZT1Ob25lKToKKyAgICAgICAgICAgIGJiLndhcm4oIiVzIC0gJXM6ICVzIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgcGtnLCBtZXNzYWdlKSkKKworICAgICAgICAjIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZC4uLgorICAgICAgICBkZWYgZXhpdChzZWxmLCBzdGF0dXM9MCwgbWVzc2FnZT1Ob25lKToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlIG9yICgiJXMgLSAlczogdXNlcmFkZC5iYmNsYXNzOiBBcmd1bWVudCBwYXJzaW5nIGV4aXRlZCIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIHBrZykpCisgICAgICAgICAgICBlcnJvcihtZXNzYWdlKQorCisgICAgICAgIGRlZiBlcnJvcihzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQobWVzc2FnZSkKKworICAgICMgV2UgcGFyc2UgYW5kIHJld3JpdGUgdGhlIHVzZXJhZGQgY29tcG9uZW50cworICAgIGRlZiByZXdyaXRlX3VzZXJhZGQocGFyYW1zKToKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGNvbWVzIGZyb20gLS1oZWxwIG9uIHVzZXJhZGQgZnJvbSBzaGFkb3cKKyAgICAgICAgcGFyc2VyID0gbXlBcmd1bWVudFBhcnNlcihwcm9nPSd1c2VyYWRkJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWIiLCAiLS1iYXNlLWRpciIsIG1ldGF2YXI9IkJBU0VfRElSIiwgaGVscD0iYmFzZSBkaXJlY3RvcnkgZm9yIHRoZSBob21lIGRpcmVjdG9yeSBvZiB0aGUgbmV3IGFjY291bnQiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItYyIsICItLWNvbW1lbnQiLCBtZXRhdmFyPSJDT01NRU5UIiwgaGVscD0iR0VDT1MgZmllbGQgb2YgdGhlIG5ldyBhY2NvdW50IikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWQiLCAiLS1ob21lLWRpciIsIG1ldGF2YXI9IkhPTUVfRElSIiwgaGVscD0iaG9tZSBkaXJlY3Rvcnkgb2YgdGhlIG5ldyBhY2NvdW50IikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLUQiLCAiLS1kZWZhdWx0cyIsIGhlbHA9InByaW50IG9yIGNoYW5nZSBkZWZhdWx0IHVzZXJhZGQgY29uZmlndXJhdGlvbiIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1lIiwgIi0tZXhwaXJlZGF0ZSIsIG1ldGF2YXI9IkVYUElSRV9EQVRFIiwgaGVscD0iZXhwaXJhdGlvbiBkYXRlIG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1mIiwgIi0taW5hY3RpdmUiLCBtZXRhdmFyPSJJTkFDVElWRSIsIGhlbHA9InBhc3N3b3JkIGluYWN0aXZpdHkgcGVyaW9kIG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1nIiwgIi0tZ2lkIiwgbWV0YXZhcj0iR1JPVVAiLCBoZWxwPSJuYW1lIG9yIElEIG9mIHRoZSBwcmltYXJ5IGdyb3VwIG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1HIiwgIi0tZ3JvdXBzIiwgbWV0YXZhcj0iR1JPVVBTIiwgaGVscD0ibGlzdCBvZiBzdXBwbGVtZW50YXJ5IGdyb3VwcyBvZiB0aGUgbmV3IGFjY291bnQiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItayIsICItLXNrZWwiLCBtZXRhdmFyPSJTS0VMX0RJUiIsIGhlbHA9InVzZSB0aGlzIGFsdGVybmF0aXZlIHNrZWxldG9uIGRpcmVjdG9yeSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1LIiwgIi0ta2V5IiwgbWV0YXZhcj0iS0VZPVZBTFVFIiwgaGVscD0ib3ZlcnJpZGUgL2V0Yy9sb2dpbi5kZWZzIGRlZmF1bHRzIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWwiLCAiLS1uby1sb2ctaW5pdCIsIGhlbHA9ImRvIG5vdCBhZGQgdGhlIHVzZXIgdG8gdGhlIGxhc3Rsb2cgYW5kIGZhaWxsb2cgZGF0YWJhc2VzIiwgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLW0iLCAiLS1jcmVhdGUtaG9tZSIsIGhlbHA9ImNyZWF0ZSB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IiwgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLU0iLCAiLS1uby1jcmVhdGUtaG9tZSIsIGhlbHA9ImRvIG5vdCBjcmVhdGUgdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1OIiwgIi0tbm8tdXNlci1ncm91cCIsIGhlbHA9ImRvIG5vdCBjcmVhdGUgYSBncm91cCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHVzZXIiLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItbyIsICItLW5vbi11bmlxdWUiLCBoZWxwPSJhbGxvdyB0byBjcmVhdGUgdXNlcnMgd2l0aCBkdXBsaWNhdGUgKG5vbi11bmlxdWUgVUlEKSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1wIiwgIi0tcGFzc3dvcmQiLCBtZXRhdmFyPSJQQVNTV09SRCIsIGhlbHA9ImVuY3J5cHRlZCBwYXNzd29yZCBvZiB0aGUgbmV3IGFjY291bnQiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItUiIsICItLXJvb3QiLCBtZXRhdmFyPSJDSFJPT1RfRElSIiwgaGVscD0iZGlyZWN0b3J5IHRvIGNocm9vdCBpbnRvIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXIiLCAiLS1zeXN0ZW0iLCBoZWxwPSJjcmVhdGUgYSBzeXN0ZW0gYWNjb3VudCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1zIiwgIi0tc2hlbGwiLCBtZXRhdmFyPSJTSEVMTCIsIGhlbHA9ImxvZ2luIHNoZWxsIG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi11IiwgIi0tdWlkIiwgbWV0YXZhcj0iVUlEIiwgaGVscD0idXNlciBJRCBvZiB0aGUgbmV3IGFjY291bnQiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItVSIsICItLXVzZXItZ3JvdXAiLCBoZWxwPSJjcmVhdGUgYSBncm91cCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHVzZXIiLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCJMT0dJTiIsIGhlbHA9IkxvZ2luIG5hbWUgb2YgdGhlIG5ldyB1c2VyIikKKworICAgICAgICAjIFJldHVybiBhIGxpc3Qgb2YgY29uZmlndXJhdGlvbiBmaWxlcyBiYXNlZCBvbiBlaXRoZXIgdGhlIGRlZmF1bHQKKyAgICAgICAgIyBmaWxlcy9wYXNzd2Qgb3IgdGhlIGNvbnRlbnRzIG9mIFVTRVJBRERfVUlEX1RBQkxFUworICAgICAgICAjIHBhdGhzIGFyZSByZXN1bHZlZCB2aWEgQkJQQVRICisgICAgICAgIGRlZiBnZXRfcGFzc3dkX2xpc3QoZCk6CisgICAgICAgICAgICBzdHIgPSAiIgorICAgICAgICAgICAgYmJwYXRoID0gZC5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpCisgICAgICAgICAgICBwYXNzd2RfdGFibGVzID0gZC5nZXRWYXIoJ1VTRVJBRERfVUlEX1RBQkxFUycsIFRydWUpCisgICAgICAgICAgICBpZiBub3QgcGFzc3dkX3RhYmxlczoKKyAgICAgICAgICAgICAgICBwYXNzd2RfdGFibGVzID0gJ2ZpbGVzL3Bhc3N3ZCcKKyAgICAgICAgICAgIGZvciBjb25mX2ZpbGUgaW4gcGFzc3dkX3RhYmxlcy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHN0ciArPSAiICVzIiAlIGJiLnV0aWxzLndoaWNoKGJicGF0aCwgY29uZl9maWxlKQorICAgICAgICAgICAgcmV0dXJuIHN0cgorCisgICAgICAgIG5ld3BhcmFtcyA9IFtdCisgICAgICAgIGZvciBwYXJhbSBpbiByZS5zcGxpdCgnJydbIFx0XSo7WyBcdF0qKD89KD86W14nIl18J1teJ10qJ3wiW14iXSoiKSokKScnJywgcGFyYW1zKToKKyAgICAgICAgICAgIHBhcmFtID0gcGFyYW0uc3RyaXAoKQorICAgICAgICAgICAgaWYgbm90IHBhcmFtOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdWFhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MocmUuc3BsaXQoJycnWyBcdF0qKD89KD86W14nIl18J1teJ10qJ3wiW14iXSoiKSokKScnJywgcGFyYW0pKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzOiBVbmFibGUgdG8gcGFyc2UgYXJndW1lbnRzIGZvciBVU0VSQUREX1BBUkFNXyVzOiAnJXMnIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgcGtnLCBwYXJhbSkpCisKKyAgICAgICAgICAgICMgZmlsZXMvcGFzc3dkIG9yIHRoZSBjb250ZW50cyBvZiBVU0VSQUREX1VJRF9UQUJMRVMKKyAgICAgICAgICAgICMgVXNlIHRoZSBzdGFuZGFyZCBwYXNzd2QgbGF5b3V0OgorICAgICAgICAgICAgIyAgdXNlcm5hbWU6cGFzc3dvcmQ6dXNlcl9pZDpncm91cF9pZDpjb21tZW50OmhvbWVfZGlyZWN0b3J5OmxvZ2luX3NoZWxsCisgICAgICAgICAgICAjICh3ZSB3YW50IHRvIHByb2Nlc3MgaW4gcmV2ZXJzZSBvcmRlciwgYXMgJ2xhc3QgZm91bmQnIGluIHRoZSBsaXN0IHdpbnMpCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIElmIGEgZmllbGQgaXMgbGVmdCBibGFuaywgdGhlIG9yaWdpbmFsIHZhbHVlIHdpbGwgYmUgdXNlZC4gIFRoZSAndXNlcm5hbWUnCisgICAgICAgICAgICAjIGZpZWxkIGlzIHJlcXVpcmVkLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBOb3RlOiB3ZSBpZ25vcmUgdGhlIHBhc3N3b3JkIGZpZWxkLCBhcyBpbmNsdWRpbmcgZXZlbiB0aGUgaGFzaGVkIHBhc3N3b3JkCisgICAgICAgICAgICAjIGluIHRoZSB1c2VyYWRkIGNvbW1hbmQgbWF5IGludHJvZHVjZSBhIHNlY3VyaXR5IGhvbGUuICBJdCdzIGFzc3VtZWQgdGhhdAorICAgICAgICAgICAgIyBhbGwgbmV3IHVzZXJzIGdldCB0aGUgZGVmYXVsdCAoJyonIHdoaWNoIHByZXZlbnRzIGxvZ2luKSB1bnRpbCB0aGUgdXNlciBpcworICAgICAgICAgICAgIyBzcGVjaWZpY2FsbHkgY29uZmlndXJlZCBieSB0aGUgc3lzdGVtIGFkbWluLgorICAgICAgICAgICAgZm9yIGNvbmYgaW4gZ2V0X3Bhc3N3ZF9saXN0KGQpLnNwbGl0KClbOjotMV06CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29uZik6CisgICAgICAgICAgICAgICAgICAgIGYgPSBvcGVuKGNvbmYsICJyIikKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCA9IGxpbmUucnN0cmlwKCkuc3BsaXQoIjoiKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZmllbGRbMF0gPT0gdWFhcmdzLkxPR0lOOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHVhYXJncy51aWQgYW5kIGZpZWxkWzJdIGFuZCAodWFhcmdzLnVpZCAhPSBmaWVsZFsyXSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIiVzOiBDaGFuZ2luZyB1c2VybmFtZSAlcydzIHVpZCBmcm9tICglcykgdG8gKCVzKSwgdmVyaWZ5IGNvbmZpZ3VyYXRpb24gZmlsZXMhIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgdWFhcmdzLkxPR0lOLCB1YWFyZ3MudWlkLCBmaWVsZFsyXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFhcmdzLnVpZCA9IFtmaWVsZFsyXSwgdWFhcmdzLnVpZF1bbm90IGZpZWxkWzJdXQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIHBvc3NpYmxlIGdyb3VwbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVW5sZXNzIHRoZSBncm91cCBuYW1lIChvciBnaWQpIGlzIHNwZWNpZmllZCwgd2UgYXNzdW1lIHRoYXQgdGhlIExPR0lOIGlzIHRoZSBncm91cG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBCeSBkZWZhdWx0IHRoZSBzeXN0ZW0gaGFzIGNyZWF0aW9uIG9mIHRoZSBtYXRjaGluZyBncm91cHMgZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgU28gaWYgdGhlIGltcGxpY2l0IHVzZXJuYW1lLWdyb3VwIGNyZWF0aW9uIGlzIG9uLCB0aGVuIHRoZSBpbXBsaWNpdCBncm91cG5hbWUgKExPR0lOKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaXMgdXNlZCwgYW5kIHdlIGRpc2FibGUgdGhlIHVzZXJfZ3JvdXAgb3B0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YWFyZ3MuZ3JvdXBuYW1lID0gW3VhYXJncy5naWQsIHVhYXJncy5MT0dJTl1bbm90IHVhYXJncy5naWQgb3IgdWFhcmdzLnVzZXJfZ3JvdXBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFhcmdzLmdyb3VwaWQgPSBbdWFhcmdzLmdpZCwgdWFhcmdzLmdyb3VwbmFtZV1bbm90IHVhYXJncy5naWRdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFhcmdzLmdyb3VwaWQgPSBbZmllbGRbM10sIHVhYXJncy5ncm91cGlkXVtub3QgZmllbGRbM11dCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgdWFhcmdzLmdpZCBvciB1YWFyZ3MuZ2lkICE9IHVhYXJncy5ncm91cGlkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodWFhcmdzLmdyb3VwaWQgYW5kIHVhYXJncy5ncm91cGlkLmlzZGlnaXQoKSkgYW5kICh1YWFyZ3MuZ3JvdXBuYW1lIGFuZCB1YWFyZ3MuZ3JvdXBuYW1lLmlzZGlnaXQoKSkgYW5kICh1YWFyZ3MuZ3JvdXBpZCAhPSB1YWFyZ3MuZ3JvdXBuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2Ugd2FudCB0byBhZGQgYSBncm91cCwgYnV0IHdlIGRvbid0IGtub3cgaXQncyBuYW1lLi4uIHNvIHdlIGNhbid0IGFkZCB0aGUgZ3JvdXAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgaGF2ZSB0byBhc3N1bWUgdGhlIGdyb3VwIGhhcyBwcmV2aW91c2x5IGJlZW4gYWRkZWQgb3Igd2UnbGwgZmFpbCBvbiB0aGUgYWRkdXNlci4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBOb3RlOiBzcGVjaWZ5aW5nIHRoZSBhY3R1YWwgZ2lkIGlzIHZlcnkgcmFyZSBpbiBPRSwgdXN1YWxseSB0aGUgZ3JvdXAgbmFtZSBpcyBzcGVjaWZpZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCIlczogQ2hhbmdpbmcgZ2lkIGZvciBsb2dpbiAlcyBmcm9tICglcykgdG8gKCVzKSwgdmVyaWZ5IGNvbmZpZ3VyYXRpb24gZmlsZXMhIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgdWFhcmdzLkxPR0lOLCB1YWFyZ3MuZ3JvdXBuYW1lLCB1YWFyZ3MuZ2lkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiAodWFhcmdzLmdyb3VwaWQgYW5kIG5vdCB1YWFyZ3MuZ3JvdXBpZC5pc2RpZ2l0KCkpIGFuZCB1YWFyZ3MuZ3JvdXBpZCA9PSB1YWFyZ3MuZ3JvdXBuYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBkb24ndCBoYXZlIGEgbnVtYmVyLCBzbyB3ZSBoYXZlIHRvIGFkZCBhIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICJBZGRpbmcgZ3JvdXAgJXMhIiAlICh1YWFyZ3MuZ3JvdXBuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVhYXJncy5naWQgPSB1YWFyZ3MuZ3JvdXBpZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFhcmdzLnVzZXJfZ3JvdXAgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBhZGQgPSBkLmdldFZhcigiR1JPVVBBRERfUEFSQU1fJXMiICUgcGtnLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Z3JvdXAgPSAiJXMgJXMiICUgKFsnJywgJyAtLXN5c3RlbSddW3VhYXJncy5zeXN0ZW1dLCB1YWFyZ3MuZ3JvdXBuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZ3JvdXBhZGQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIoIkdST1VQQUREX1BBUkFNXyVzIiAlIHBrZywgIiVzIDsgJXMiICUgKGdyb3VwYWRkLCBuZXdncm91cCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2V0VmFyKCJHUk9VUEFERF9QQVJBTV8lcyIgJSBwa2csIG5ld2dyb3VwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIHVhYXJncy5ncm91cG5hbWUgYW5kICh1YWFyZ3MuZ3JvdXBpZCBhbmQgdWFhcmdzLmdyb3VwaWQuaXNkaWdpdCgpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgaGF2ZSBhIGdyb3VwIG5hbWUgYW5kIGEgZ3JvdXAgbnVtYmVyIHRvIGFzc2lnbiBpdCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZGVidWcoMSwgIkFkZGluZyBncm91cCAlcyAgZ2lkICglcykhIiAlICh1YWFyZ3MuZ3JvdXBuYW1lLCB1YWFyZ3MuZ3JvdXBpZCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YWFyZ3MuZ2lkID0gdWFhcmdzLmdyb3VwaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVhYXJncy51c2VyX2dyb3VwID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwYWRkID0gZC5nZXRWYXIoIkdST1VQQUREX1BBUkFNXyVzIiAlIHBrZywgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2dyb3VwID0gIi1nICVzICVzIiAlICh1YWFyZ3MuZ2lkLCB1YWFyZ3MuZ3JvdXBuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZ3JvdXBhZGQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIoIkdST1VQQUREX1BBUkFNXyVzIiAlIHBrZywgIiVzIDsgJXMiICUgKGdyb3VwYWRkLCBuZXdncm91cCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2V0VmFyKCJHUk9VUEFERF9QQVJBTV8lcyIgJSBwa2csIG5ld2dyb3VwKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFhcmdzLmNvbW1lbnQgPSBbIiclcyciICUgZmllbGRbNF0sIHVhYXJncy5jb21tZW50XVtub3QgZmllbGRbNF1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFhcmdzLmhvbWVfZGlyID0gW2ZpZWxkWzVdLCB1YWFyZ3MuaG9tZV9kaXJdW25vdCBmaWVsZFs1XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YWFyZ3Muc2hlbGwgPSBbZmllbGRbNl0sIHVhYXJncy5zaGVsbF1bbm90IGZpZWxkWzZdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICMgU2hvdWxkIGJlIGFuIGVycm9yIGlmIGEgc3BlY2lmaWMgb3B0aW9uIGlzIHNldC4uLgorICAgICAgICAgICAgaWYgZC5nZXRWYXIoJ1VTRVJBRERfRVJST1JfRFlOQU1JQycsIFRydWUpID09ICcxJyBhbmQgbm90ICgodWFhcmdzLnVpZCBhbmQgdWFhcmdzLnVpZC5pc2RpZ2l0KCkpIGFuZCB1YWFyZ3MuZ2lkKToKKyAgICAgICAgICAgICAgICAjYmIuZXJyb3IoIlNraXBwaW5nIHJlY2lwZSAlcywgcGFja2FnZSAlcyB3aGljaCBhZGRzIHVzZXJuYW1lICVzIGRvZXMgbm90IGhhdmUgYSBzdGF0aWMgdWlkIGRlZmluZWQuIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgIHBrZywgdWFhcmdzLkxPR0lOKSkKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlcyAtICVzOiBVc2VybmFtZSAlcyBkb2VzIG5vdCBoYXZlIGEgc3RhdGljIHVpZCBkZWZpbmVkLiIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIHBrZywgdWFhcmdzLkxPR0lOKSkKKworICAgICAgICAgICAgIyBSZWNvbnN0cnVjdCB0aGUgYXJncy4uLgorICAgICAgICAgICAgbmV3cGFyYW0gID0gWycnLCAnIC0tZGVmYXVsdHMnXVt1YWFyZ3MuZGVmYXVsdHNdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1iYXNlLWRpciAlcycgJSB1YWFyZ3MuYmFzZV9kaXJdW3VhYXJncy5iYXNlX2RpciAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tY29tbWVudCAlcycgJSB1YWFyZ3MuY29tbWVudF1bdWFhcmdzLmNvbW1lbnQgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLWhvbWUtZGlyICVzJyAlIHVhYXJncy5ob21lX2Rpcl1bdWFhcmdzLmhvbWVfZGlyICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1leHBpcmVkYXRhICVzJyAlIHVhYXJncy5leHBpcmVkYXRlXVt1YWFyZ3MuZXhwaXJlZGF0ZSAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0taW5hY3RpdmUgJXMnICUgdWFhcmdzLmluYWN0aXZlXVt1YWFyZ3MuaW5hY3RpdmUgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLWdpZCAlcycgJSB1YWFyZ3MuZ2lkXVt1YWFyZ3MuZ2lkICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1ncm91cHMgJXMnICUgdWFhcmdzLmdyb3Vwc11bdWFhcmdzLmdyb3VwcyAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tc2tlbCAlcycgJSB1YWFyZ3Muc2tlbF1bdWFhcmdzLnNrZWwgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLWtleSAlcycgJSB1YWFyZ3Mua2V5XVt1YWFyZ3Mua2V5ICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1uby1sb2ctaW5pdCddW3VhYXJncy5ub19sb2dfaW5pdF0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLWNyZWF0ZS1ob21lJ11bdWFhcmdzLmNyZWF0ZV9ob21lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tbm8tY3JlYXRlLWhvbWUnXVt1YWFyZ3Mubm9fY3JlYXRlX2hvbWVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1uby11c2VyLWdyb3VwJ11bdWFhcmdzLm5vX3VzZXJfZ3JvdXBdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1ub24tdW5pcXVlJ11bdWFhcmdzLm5vbl91bmlxdWVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1wYXNzd29yZCAlcycgJSB1YWFyZ3MucGFzc3dvcmRdW3VhYXJncy5wYXNzd29yZCAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tcm9vdCAlcycgJSB1YWFyZ3Mucm9vdF1bdWFhcmdzLnJvb3QgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLXN5c3RlbSddW3VhYXJncy5zeXN0ZW1dCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1zaGVsbCAlcycgJSB1YWFyZ3Muc2hlbGxdW3VhYXJncy5zaGVsbCAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tdWlkICVzJyAlIHVhYXJncy51aWRdW3VhYXJncy51aWQgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLXVzZXItZ3JvdXAnXVt1YWFyZ3MudXNlcl9ncm91cF0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9ICcgJXMnICUgdWFhcmdzLkxPR0lOCisKKyAgICAgICAgICAgIG5ld3BhcmFtcy5hcHBlbmQobmV3cGFyYW0pCisKKyAgICAgICAgcmV0dXJuICIgOyIuam9pbihuZXdwYXJhbXMpLnN0cmlwKCkKKworICAgICMgV2UgcGFyc2UgYW5kIHJld3JpdGUgdGhlIGdyb3VwYWRkIGNvbXBvbmVudHMKKyAgICBkZWYgcmV3cml0ZV9ncm91cGFkZChwYXJhbXMpOgorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29tZXMgZnJvbSAtLWhlbHAgb24gZ3JvdXBhZGQgZnJvbSBzaGFkb3cKKyAgICAgICAgcGFyc2VyID0gbXlBcmd1bWVudFBhcnNlcihwcm9nPSdncm91cGFkZCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1mIiwgIi0tZm9yY2UiLCBoZWxwPSJleGl0IHN1Y2Nlc3NmdWxseSBpZiB0aGUgZ3JvdXAgYWxyZWFkeSBleGlzdHMsIGFuZCBjYW5jZWwgLWcgaWYgdGhlIEdJRCBpcyBhbHJlYWR5IHVzZWQiLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItZyIsICItLWdpZCIsIG1ldGF2YXI9IkdJRCIsIGhlbHA9InVzZSBHSUQgZm9yIHRoZSBuZXcgZ3JvdXAiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItSyIsICItLWtleSIsIG1ldGF2YXI9IktFWT1WQUxVRSIsIGhlbHA9Im92ZXJyaWRlIC9ldGMvbG9naW4uZGVmcyBkZWZhdWx0cyIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1vIiwgIi0tbm9uLXVuaXF1ZSIsIGhlbHA9ImFsbG93IHRvIGNyZWF0ZSBncm91cHMgd2l0aCBkdXBsaWNhdGUgKG5vbi11bmlxdWUpIEdJRCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1wIiwgIi0tcGFzc3dvcmQiLCBtZXRhdmFyPSJQQVNTV09SRCIsIGhlbHA9InVzZSB0aGlzIGVuY3J5cHRlZCBwYXNzd29yZCBmb3IgdGhlIG5ldyBncm91cCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1SIiwgIi0tcm9vdCIsIG1ldGF2YXI9IkNIUk9PVF9ESVIiLCBoZWxwPSJkaXJlY3RvcnkgdG8gY2hyb290IGludG8iKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItciIsICItLXN5c3RlbSIsIGhlbHA9ImNyZWF0ZSBhIHN5c3RlbSBhY2NvdW50IiwgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiR1JPVVAiLCBoZWxwPSJHcm91cCBuYW1lIG9mIHRoZSBuZXcgZ3JvdXAiKQorCisgICAgICAgICMgUmV0dXJuIGEgbGlzdCBvZiBjb25maWd1cmF0aW9uIGZpbGVzIGJhc2VkIG9uIGVpdGhlciB0aGUgZGVmYXVsdAorICAgICAgICAjIGZpbGVzL2dyb3VwIG9yIHRoZSBjb250ZW50cyBvZiBVU0VSQUREX0dJRF9UQUJMRVMKKyAgICAgICAgIyBwYXRocyBhcmUgcmVzdWx2ZWQgdmlhIEJCUEFUSAorICAgICAgICBkZWYgZ2V0X2dyb3VwX2xpc3QoZCk6CisgICAgICAgICAgICBzdHIgPSAiIgorICAgICAgICAgICAgYmJwYXRoID0gZC5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpCisgICAgICAgICAgICBncm91cF90YWJsZXMgPSBkLmdldFZhcignVVNFUkFERF9HSURfVEFCTEVTJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBncm91cF90YWJsZXM6CisgICAgICAgICAgICAgICAgZ3JvdXBfdGFibGVzID0gJ2ZpbGVzL2dyb3VwJworICAgICAgICAgICAgZm9yIGNvbmZfZmlsZSBpbiBncm91cF90YWJsZXMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBzdHIgKz0gIiAlcyIgJSBiYi51dGlscy53aGljaChiYnBhdGgsIGNvbmZfZmlsZSkKKyAgICAgICAgICAgIHJldHVybiBzdHIKKworICAgICAgICBuZXdwYXJhbXMgPSBbXQorICAgICAgICBmb3IgcGFyYW0gaW4gcmUuc3BsaXQoJycnWyBcdF0qO1sgXHRdKig/PSg/OlteJyJdfCdbXiddKid8IlteIl0qIikqJCknJycsIHBhcmFtcyk6CisgICAgICAgICAgICBwYXJhbSA9IHBhcmFtLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG5vdCBwYXJhbToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgSWYgd2UncmUgcHJvY2Vzc2luZyBtdWx0aXBsZSBsaW5lcywgd2UgY291bGQgaGF2ZSBsZWZ0IG92ZXIgdmFsdWVzIGhlcmUuLi4KKyAgICAgICAgICAgICAgICBnYWFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhyZS5zcGxpdCgnJydbIFx0XSooPz0oPzpbXiciXXwnW14nXSonfCJbXiJdKiIpKiQpJycnLCBwYXJhbSkpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXM6IFVuYWJsZSB0byBwYXJzZSBhcmd1bWVudHMgZm9yIEdST1VQQUREX1BBUkFNXyVzOiAnJXMnIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgcGtnLCBwYXJhbSkpCisKKyAgICAgICAgICAgICMgTmVlZCB0byBpdGVyYXRlIG92ZXIgbGF5ZXJzIGFuZCBvcGVuIHRoZSByaWdodCBmaWxlKHMpCisgICAgICAgICAgICAjIFVzZSB0aGUgc3RhbmRhcmQgZ3JvdXAgbGF5b3V0OgorICAgICAgICAgICAgIyAgZ3JvdXBuYW1lOnBhc3N3b3JkOmdyb3VwX2lkOmdyb3VwX21lbWJlcnMKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgSWYgYSBmaWVsZCBpcyBsZWZ0IGJsYW5rLCB0aGUgb3JpZ2luYWwgdmFsdWUgd2lsbCBiZSB1c2VkLiBUaGUgJ2dyb3VwbmFtZScgZmllbGQKKyAgICAgICAgICAgICMgaXMgcmVxdWlyZWQuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIE5vdGU6IHNpbWlsYXIgdG8gdGhlIHBhc3N3ZCBmaWxlLCB0aGUgJ3Bhc3N3b3JkJyBmaWxlZCBpcyBpZ25vcmVkCisgICAgICAgICAgICAjIE5vdGU6IGdyb3VwX21lbWJlcnMgaXMgaWdub3JlZCwgZ3JvdXAgbWVtYmVycyBtdXN0IGJlIGNvbmZpZ3VyZWQgd2l0aCB0aGUgR1JPVVBNRU1TX1BBUkFNCisgICAgICAgICAgICBmb3IgY29uZiBpbiBnZXRfZ3JvdXBfbGlzdChkKS5zcGxpdCgpWzo6LTFdOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNvbmYpOgorICAgICAgICAgICAgICAgICAgICBmID0gb3Blbihjb25mLCAiciIpCisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyMnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgPSBsaW5lLnJzdHJpcCgpLnNwbGl0KCI6IikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZpZWxkWzBdID09IGdhYXJncy5HUk9VUCBhbmQgZmllbGRbMl06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZ2FhcmdzLmdpZCBhbmQgKGdhYXJncy5naWQgIT0gZmllbGRbMl0pOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCIlczogQ2hhbmdpbmcgZ3JvdXBuYW1lICVzJ3MgZ2lkIGZyb20gKCVzKSB0byAoJXMpLCB2ZXJpZnkgY29uZmlndXJhdGlvbiBmaWxlcyEiICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBnYWFyZ3MuR1JPVVAsIGdhYXJncy5naWQsIGZpZWxkWzJdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYWFyZ3MuZ2lkID0gZmllbGRbMl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBkLmdldFZhcignVVNFUkFERF9FUlJPUl9EWU5BTUlDJywgVHJ1ZSkgPT0gJzEnIGFuZCBub3QgKGdhYXJncy5naWQgYW5kIGdhYXJncy5naWQuaXNkaWdpdCgpKToKKyAgICAgICAgICAgICAgICAjYmIuZXJyb3IoIlNraXBwaW5nIHJlY2lwZSAlcywgcGFja2FnZSAlcyB3aGljaCBhZGRzIGdyb3VwbmFtZSAlcyBkb2VzIG5vdCBoYXZlIGEgc3RhdGljIGdpZCBkZWZpbmVkLiIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksICBwa2csIGdhYXJncy5HUk9VUCkpCisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXMgLSAlczogR3JvdXBuYW1lICVzIGRvZXMgbm90IGhhdmUgYSBzdGF0aWMgZ2lkIGRlZmluZWQuIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgcGtnLCBnYWFyZ3MuR1JPVVApKQorCisgICAgICAgICAgICAjIFJlY29uc3RydWN0IHRoZSBhcmdzLi4uCisgICAgICAgICAgICBuZXdwYXJhbSAgPSBbJycsICcgLS1mb3JjZSddW2dhYXJncy5mb3JjZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLWdpZCAlcycgJSBnYWFyZ3MuZ2lkXVtnYWFyZ3MuZ2lkICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1rZXkgJXMnICUgZ2FhcmdzLmtleV1bZ2FhcmdzLmtleSAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tbm9uLXVuaXF1ZSddW2dhYXJncy5ub25fdW5pcXVlXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tcGFzc3dvcmQgJXMnICUgZ2FhcmdzLnBhc3N3b3JkXVtnYWFyZ3MucGFzc3dvcmQgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLXJvb3QgJXMnICUgZ2FhcmdzLnJvb3RdW2dhYXJncy5yb290ICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1zeXN0ZW0nXVtnYWFyZ3Muc3lzdGVtXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gJyAlcycgJSBnYWFyZ3MuR1JPVVAKKworICAgICAgICAgICAgbmV3cGFyYW1zLmFwcGVuZChuZXdwYXJhbSkKKworICAgICAgICByZXR1cm4gIiA7Ii5qb2luKG5ld3BhcmFtcykuc3RyaXAoKQorCisgICAgIyBMb2FkIGFuZCBwcm9jZXNzIHRoZSB1c2VycyBhbmQgZ3JvdXBzLCByZXdyaXRpbmcgdGhlIGFkZHVzZXIvYWRkZ3JvdXAgcGFyYW1zCisgICAgdXNlcmFkZF9wYWNrYWdlcyA9IGQuZ2V0VmFyKCdVU0VSQUREX1BBQ0tBR0VTJywgVHJ1ZSkKKworICAgIGZvciBwa2cgaW4gdXNlcmFkZF9wYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICAjIEdyb3VwbWVtcyBkb2Vzbid0IGhhdmUgYW55dGhpbmcgd2UgbWlnaHQgd2FudCB0byBjaGFuZ2UsIHNvIHNpbXBseSB2YWxpZGF0aW5nCisgICAgICAgICMgaXMgYSBiaXQgb2YgYSB3YXN0ZSAtLSBvbmx5IHByb2Nlc3MgdXNlcmFkZC9ncm91cGFkZAorICAgICAgICB1c2VyYWRkX3BhcmFtID0gZC5nZXRWYXIoJ1VTRVJBRERfUEFSQU1fJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiB1c2VyYWRkX3BhcmFtOgorICAgICAgICAgICAgI2JiLndhcm4oIkJlZm9yZTogJ1VTRVJBRERfUEFSQU1fJXMnIC0gJyVzJyIgJSAocGtnLCB1c2VyYWRkX3BhcmFtKSkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdVU0VSQUREX1BBUkFNXyVzJyAlIHBrZywgcmV3cml0ZV91c2VyYWRkKHVzZXJhZGRfcGFyYW0pKQorICAgICAgICAgICAgI2JiLndhcm4oIkFmdGVyOiAgJ1VTRVJBRERfUEFSQU1fJXMnIC0gJyVzJyIgJSAocGtnLCBkLmdldFZhcignVVNFUkFERF9QQVJBTV8lcycgJSBwa2csIFRydWUpKSkKKworICAgICAgICBncm91cGFkZF9wYXJhbSA9IGQuZ2V0VmFyKCdHUk9VUEFERF9QQVJBTV8lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIGdyb3VwYWRkX3BhcmFtOgorICAgICAgICAgICAgI2JiLndhcm4oIkJlZm9yZTogJ0dST1VQQUREX1BBUkFNXyVzJyAtICclcyciICUgKHBrZywgZ3JvdXBhZGRfcGFyYW0pKQorICAgICAgICAgICAgZC5zZXRWYXIoJ0dST1VQQUREX1BBUkFNXyVzJyAlIHBrZywgcmV3cml0ZV9ncm91cGFkZChncm91cGFkZF9wYXJhbSkpCisgICAgICAgICAgICAjYmIud2FybigiQWZ0ZXI6ICAnR1JPVVBBRERfUEFSQU1fJXMnIC0gJyVzJyIgJSAocGtnLCBkLmdldFZhcignR1JPVVBBRERfUEFSQU1fJXMnICUgcGtnLCBUcnVlKSkpCisKKworCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgaWYgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGQpIFwKKyAgICAgICAgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdXBkYXRlX3VzZXJhZGRfc3RhdGljX2NvbmZpZyhkKQorICAgICAgICBleGNlcHQgYmIuYnVpbGQuRnVuY0ZhaWxlZCBhcyBmOgorICAgICAgICAgICAgYmIuZGVidWcoMSwgIlNraXBwaW5nIHJlY2lwZSAlczogJXMiICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBmKSkKKyAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKGYpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91c2VyYWRkLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91c2VyYWRkLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU3N2U1NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VzZXJhZGQuYmJjbGFzcwpAQCAtMCwwICsxLDIyMyBAQAoraW5oZXJpdCB1c2VyYWRkX2Jhc2UKKworIyBiYXNlLXBhc3N3ZC1jcm9zcyBwcm92aWRlcyB0aGUgZGVmYXVsdCBwYXNzd2QgYW5kIGdyb3VwIGZpbGVzIGluIHRoZQorIyB0YXJnZXQgc3lzcm9vdCwgYW5kIHNoYWRvdyAtbmF0aXZlIGFuZCAtc3lzcm9vdCBwcm92aWRlIHRoZSB1dGlsaXRpZXMKKyMgYW5kIHN1cHBvcnQgZmlsZXMgbmVlZGVkIHRvIGFkZCBhbmQgbW9kaWZ5IHVzZXIgYW5kIGdyb3VwIGFjY291bnRzCitERVBFTkRTX2FwcGVuZCA9ICIke1VTRVJBRERERVBFTkRTfSIKK1VTRVJBRERERVBFTkRTID0gIiBiYXNlLWZpbGVzIHNoYWRvdy1uYXRpdmUgc2hhZG93LXN5c3Jvb3Qgc2hhZG93IgorVVNFUkFERERFUEVORFNfY2xhc3MtY3Jvc3MgPSAiIgorVVNFUkFERERFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKK1VTRVJBRERERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKKyMgVGhpcyBwcmVpbnN0YWxsIGZ1bmN0aW9uIGNhbiBiZSBydW4gaW4gZm91ciBkaWZmZXJlbnQgY29udGV4dHM6CisjCisjIGEpIEJlZm9yZSBkb19pbnN0YWxsCisjIGIpIEF0IGRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUgd2hlbiBpbnN0YWxsaW5nIGZyb20gc3N0YXRlIHBhY2thZ2VzCisjIGMpIEFzIHRoZSBwcmVpbnN0IHNjcmlwdCBpbiB0aGUgdGFyZ2V0IHBhY2thZ2UgYXQgZG9fcm9vdGZzIHRpbWUKKyMgZCkgQXMgdGhlIHByZWluc3Qgc2NyaXB0IGluIHRoZSB0YXJnZXQgcGFja2FnZSBvbiBkZXZpY2UgYXMgYSBwYWNrYWdlIHVwZ3JhZGUKKyMKK3VzZXJhZGRfcHJlaW5zdCAoKSB7CitPUFQ9IiIKK1NZU1JPT1Q9IiIKKworaWYgdGVzdCAieCREIiAhPSAieCI7IHRoZW4KKwkjIEluc3RhbGxpbmcgaW50byBhIHN5c3Jvb3QKKwlTWVNST09UPSIkRCIKKwlPUFQ9Ii0tcm9vdCAkRCIKKworCSMgTWFrZSBzdXJlIGxvZ2luLmRlZnMgaXMgdGhlcmUsIHRoaXMgaXMgdG8gbWFrZSBkZWJpYW4gcGFja2FnZSBiYWNrZW5kIHdvcmsKKwkjIGNvcnJlY3RseSB3aGlsZSBkb2luZyByb290ZnMuCisJIyBUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgaWYgL2V0Yy9sb2dpbi5kZWZzIGlzIHRyZWF0ZWQgYXMgYSBjb25maWcgZmlsZSBmb3IKKwkjIHNoYWRvdyBwYWNrYWdlLCB0aGVuIHdoaWxlIHBlcmZvcm1pbmcgcHJlaW5zdHMgZm9yIHBhY2thZ2VzIHRoYXQgZGVwZW5kIG9uCisJIyBzaGFkb3csIHRoZXJlIG1pZ2h0IG9ubHkgYmUgL2V0Yy9sb2dpbi5kZWYuZHBrZy1uZXcgdGhlcmUgaW4gcm9vdCBmaWxlc3lzdGVtLgorCWlmIFsgISAtZSAkRCR7c3lzY29uZmRpcn0vbG9naW4uZGVmcyAtYSAtZSAkRCR7c3lzY29uZmRpcn0vbG9naW4uZGVmcy5kcGtnLW5ldyBdOyB0aGVuCisJICAgIGNwICREJHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzLmRwa2ctbmV3ICREJHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzCisJZmkKKworCSMgdXNlci9ncm91cCBsb29rdXBzIHNob3VsZCBtYXRjaCB1c2VyYWRkL2dyb3VwYWRkIC0tcm9vdAorCWV4cG9ydCBQU0VVRE9fUEFTU1dEPSIkU1lTUk9PVDoke1NUQUdJTkdfRElSX05BVElWRX0iCitmaQorCisjIElmIHdlJ3JlIG5vdCBkb2luZyBhIHNwZWNpYWwgU1NUQVRFL1NZU1JPT1QgaW5zdGFsbAorIyB0aGVuIHNldCB0aGUgdmFsdWVzLCBvdGhlcndpc2UgdXNlIHRoZSBlbnZpcm9ubWVudAoraWYgdGVzdCAieCRVQV9TWVNST09UIiA9ICJ4IjsgdGhlbgorCSMgSW5zdGFsbGluZyBvbnRvIGEgdGFyZ2V0CisJIyBBZGQgZ3JvdXBzIGFuZCB1c2VycyBkZWZpbmVkIG9ubHkgZm9yIHRoaXMgcGFja2FnZQorCUdST1VQQUREX1BBUkFNPSIke0dST1VQQUREX1BBUkFNfSIKKwlVU0VSQUREX1BBUkFNPSIke1VTRVJBRERfUEFSQU19IgorCUdST1VQTUVNU19QQVJBTT0iJHtHUk9VUE1FTVNfUEFSQU19IgorZmkKKworIyBQZXJmb3JtIGdyb3VwIGFkZGl0aW9ucyBmaXJzdCwgc2luY2UgdXNlciBhZGRpdGlvbnMgbWF5IGRlcGVuZAorIyBvbiB0aGVzZSBncm91cHMgZXhpc3RpbmcKK2lmIHRlc3QgIngkR1JPVVBBRERfUEFSQU0iICE9ICJ4IjsgdGhlbgorCWVjaG8gIlJ1bm5pbmcgZ3JvdXBhZGQgY29tbWFuZHMuLi4iCisJIyBJbnZva2UgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIGdyb3VwYWRkIGZvciBwYXJhbWV0ZXIgbGlzdHMKKwkjIHNlcGFyYXRlZCBieSAnOycKKwlvcHRzPWBlY2hvICIkR1JPVVBBRERfUEFSQU0iIHwgY3V0IC1kICc7JyAtZiAxYAorCXJlbWFpbmluZz1gZWNobyAiJEdST1VQQUREX1BBUkFNIiB8IGN1dCAtZCAnOycgLWYgMi1gCisJd2hpbGUgdGVzdCAieCRvcHRzIiAhPSAieCI7IGRvCisJCXBlcmZvcm1fZ3JvdXBhZGQgIiRTWVNST09UIiAiJE9QVCAkb3B0cyIgMTAKKwkJaWYgdGVzdCAieCRvcHRzIiA9ICJ4JHJlbWFpbmluZyI7IHRoZW4KKwkJCWJyZWFrCisJCWZpCisJCW9wdHM9YGVjaG8gIiRyZW1haW5pbmciIHwgY3V0IC1kICc7JyAtZiAxYAorCQlyZW1haW5pbmc9YGVjaG8gIiRyZW1haW5pbmciIHwgY3V0IC1kICc7JyAtZiAyLWAKKwlkb25lCitmaSAKKworaWYgdGVzdCAieCRVU0VSQUREX1BBUkFNIiAhPSAieCI7IHRoZW4KKwllY2hvICJSdW5uaW5nIHVzZXJhZGQgY29tbWFuZHMuLi4iCisJIyBJbnZva2UgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHVzZXJhZGQgZm9yIHBhcmFtZXRlciBsaXN0cworCSMgc2VwYXJhdGVkIGJ5ICc7JworCW9wdHM9YGVjaG8gIiRVU0VSQUREX1BBUkFNIiB8IGN1dCAtZCAnOycgLWYgMWAKKwlyZW1haW5pbmc9YGVjaG8gIiRVU0VSQUREX1BBUkFNIiB8IGN1dCAtZCAnOycgLWYgMi1gCisJd2hpbGUgdGVzdCAieCRvcHRzIiAhPSAieCI7IGRvCisJCXBlcmZvcm1fdXNlcmFkZCAiJFNZU1JPT1QiICIkT1BUICRvcHRzIiAxMAorCQlpZiB0ZXN0ICJ4JG9wdHMiID0gIngkcmVtYWluaW5nIjsgdGhlbgorCQkJYnJlYWsKKwkJZmkKKwkJb3B0cz1gZWNobyAiJHJlbWFpbmluZyIgfCBjdXQgLWQgJzsnIC1mIDFgCisJCXJlbWFpbmluZz1gZWNobyAiJHJlbWFpbmluZyIgfCBjdXQgLWQgJzsnIC1mIDItYAorCWRvbmUKK2ZpCisKK2lmIHRlc3QgIngkR1JPVVBNRU1TX1BBUkFNIiAhPSAieCI7IHRoZW4KKwllY2hvICJSdW5uaW5nIGdyb3VwbWVtcyBjb21tYW5kcy4uLiIKKwkjIEludm9rZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgZ3JvdXBtZW1zIGZvciBwYXJhbWV0ZXIgbGlzdHMKKwkjIHNlcGFyYXRlZCBieSAnOycKKwlvcHRzPWBlY2hvICIkR1JPVVBNRU1TX1BBUkFNIiB8IGN1dCAtZCAnOycgLWYgMWAKKwlyZW1haW5pbmc9YGVjaG8gIiRHUk9VUE1FTVNfUEFSQU0iIHwgY3V0IC1kICc7JyAtZiAyLWAKKwl3aGlsZSB0ZXN0ICJ4JG9wdHMiICE9ICJ4IjsgZG8KKwkJcGVyZm9ybV9ncm91cG1lbXMgIiRTWVNST09UIiAiJE9QVCAkb3B0cyIgMTAKKwkJaWYgdGVzdCAieCRvcHRzIiA9ICJ4JHJlbWFpbmluZyI7IHRoZW4KKwkJCWJyZWFrCisJCWZpCisJCW9wdHM9YGVjaG8gIiRyZW1haW5pbmciIHwgY3V0IC1kICc7JyAtZiAxYAorCQlyZW1haW5pbmc9YGVjaG8gIiRyZW1haW5pbmciIHwgY3V0IC1kICc7JyAtZiAyLWAKKwlkb25lCitmaQorfQorCit1c2VyYWRkX3N5c3Jvb3QgKCkgeworCSMgUHNldWRvIG1heSAoZG9faW5zdGFsbCkgb3IgbWF5IG5vdCAoZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSkgYmUgcnVubmluZyAKKwkjIGF0IHRoaXMgcG9pbnQgc28gd2UncmUgZXhwbGljaXQgYWJvdXQgdGhlIGVudmlyb25tZW50IHNvIHBzZXVkbyBjYW4gbG9hZCBpZiAKKwkjIG5vdCBhbHJlYWR5IHByZXNlbnQuCisJZXhwb3J0IFBTRVVETz0iJHtGQUtFUk9PVEVOVn0gUFNFVURPX0xPQ0FMU1RBVEVESVI9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtsb2NhbHN0YXRlZGlyfS9wc2V1ZG8gJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiaW5kaXJ9L3BzZXVkbyIKKworCSMgRXhwbGljaXRseSBzZXQgJEQgc2luY2UgaXQgaXNuJ3Qgc2V0IHRvIGFueXRoaW5nCisJIyBiZWZvcmUgZG9faW5zdGFsbAorCUQ9JHtTVEFHSU5HX0RJUl9UQVJHRVR9CisKKwkjIEFkZCBncm91cHMgYW5kIHVzZXJzIGRlZmluZWQgZm9yIGFsbCByZWNpcGUgcGFja2FnZXMKKwlHUk9VUEFERF9QQVJBTT0iJHtAZ2V0X2FsbF9jbWRfcGFyYW1zKGQsICdncm91cGFkZCcpfSIKKwlVU0VSQUREX1BBUkFNPSIke0BnZXRfYWxsX2NtZF9wYXJhbXMoZCwgJ3VzZXJhZGQnKX0iCisJR1JPVVBNRU1TX1BBUkFNPSIke0BnZXRfYWxsX2NtZF9wYXJhbXMoZCwgJ2dyb3VwbWVtcycpfSIKKworCSMgVGVsbCB0aGUgc3lzdGVtIHRvIHVzZSB0aGUgZW52aXJvbm1lbnQgdmFycworCVVBX1NZU1JPT1Q9MQorCisJdXNlcmFkZF9wcmVpbnN0Cit9CisKK3VzZXJhZGRfc3lzcm9vdF9zc3RhdGUgKCkgeworCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwYWNrYWdlX3NldHNjZW5lIiAtbyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF0KKwl0aGVuCisJCXVzZXJhZGRfc3lzcm9vdAorCWZpCit9CisKK2RvX2luc3RhbGxbcHJlZnVuY3NdICs9ICIke1NZU1JPT1RGVU5DfSIKK1NZU1JPT1RGVU5DID0gInVzZXJhZGRfc3lzcm9vdCIKK1NZU1JPT1RGVU5DX2NsYXNzLWNyb3NzID0gIiIKK1NZU1JPT1RGVU5DX2NsYXNzLW5hdGl2ZSA9ICIiCitTWVNST09URlVOQ19jbGFzcy1uYXRpdmVzZGsgPSAiIgorU1NUQVRFUFJFSU5TVEZVTkNTICs9ICIke1NZU1JPT1RQT1NURlVOQ30iCitTWVNST09UUE9TVEZVTkMgPSAidXNlcmFkZF9zeXNyb290X3NzdGF0ZSIKK1NZU1JPT1RQT1NURlVOQ19jbGFzcy1jcm9zcyA9ICIiCitTWVNST09UUE9TVEZVTkNfY2xhc3MtbmF0aXZlID0gIiIKK1NZU1JPT1RQT1NURlVOQ19jbGFzcy1uYXRpdmVzZGsgPSAiIgorCitVU0VSQUREU0VUU0NFTkVERVBTID0gIiR7TUxQUkVGSVh9YmFzZS1wYXNzd2Q6ZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSBwc2V1ZG8tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUgc2hhZG93LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lICR7TUxQUkVGSVh9c2hhZG93LXN5c3Jvb3Q6ZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIKK1VTRVJBRERTRVRTQ0VORURFUFNfY2xhc3MtY3Jvc3MgPSAiIgorVVNFUkFERFNFVFNDRU5FREVQU19jbGFzcy1uYXRpdmUgPSAiIgorVVNFUkFERFNFVFNDRU5FREVQU19jbGFzcy1uYXRpdmVzZGsgPSAiIgorZG9fcGFja2FnZV9zZXRzY2VuZVtkZXBlbmRzXSArPSAiJHtVU0VSQUREU0VUU0NFTkVERVBTfSIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmVbZGVwZW5kc10gKz0gIiR7VVNFUkFERFNFVFNDRU5FREVQU30iCisKKyMgUmVjaXBlIHBhcnNlLXRpbWUgc2FuaXR5IGNoZWNrcworZGVmIHVwZGF0ZV91c2VyYWRkX2FmdGVyX3BhcnNlKGQpOgorICAgIHVzZXJhZGRfcGFja2FnZXMgPSBkLmdldFZhcignVVNFUkFERF9QQUNLQUdFUycsIFRydWUpCisKKyAgICBpZiBub3QgdXNlcmFkZF9wYWNrYWdlczoKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXMgaW5oZXJpdHMgdXNlcmFkZCBidXQgZG9lc24ndCBzZXQgVVNFUkFERF9QQUNLQUdFUyIgJSBkLmdldFZhcignRklMRScsIEZhbHNlKSkKKworICAgIGZvciBwa2cgaW4gdXNlcmFkZF9wYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBpZiBub3QgZC5nZXRWYXIoJ1VTRVJBRERfUEFSQU1fJXMnICUgcGtnLCBUcnVlKSBhbmQgbm90IGQuZ2V0VmFyKCdHUk9VUEFERF9QQVJBTV8lcycgJSBwa2csIFRydWUpIGFuZCBub3QgZC5nZXRWYXIoJ0dST1VQTUVNU19QQVJBTV8lcycgJSBwa2csIFRydWUpOgorICAgICAgICAgICAgYmIuZmF0YWwoIiVzIGluaGVyaXRzIHVzZXJhZGQgYnV0IGRvZXNuJ3Qgc2V0IFVTRVJBRERfUEFSQU0sIEdST1VQQUREX1BBUkFNIG9yIEdST1VQTUVNU19QQVJBTSBmb3IgcGFja2FnZSAlcyIgJSAoZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSksIHBrZykpCisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCkgXAorICAgICAgICBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpOgorICAgICAgICB1cGRhdGVfdXNlcmFkZF9hZnRlcl9wYXJzZShkKQorfQorCisjIFJldHVybiBhIHNpbmdsZSBbR1JPVVB8VVNFUl1BRERfUEFSQU0gZm9ybWF0dGVkIHN0cmluZyB3aGljaCBpbmNsdWRlcyB0aGUKKyMgW2dyb3VwfHVzZXJdYWRkIHBhcmFtZXRlcnMgZm9yIGFsbCBVU0VSQUREX1BBQ0tBR0VTIGluIHRoaXMgcmVjaXBlCitkZWYgZ2V0X2FsbF9jbWRfcGFyYW1zKGQsIGNtZF90eXBlKToKKyAgICBpbXBvcnQgc3RyaW5nCisgICAgCisgICAgcGFyYW1fdHlwZSA9IGNtZF90eXBlLnVwcGVyKCkgKyAiX1BBUkFNXyVzIgorICAgIHBhcmFtcyA9IFtdCisKKyAgICB1c2VyYWRkX3BhY2thZ2VzID0gZC5nZXRWYXIoJ1VTRVJBRERfUEFDS0FHRVMnLCBUcnVlKSBvciAiIgorICAgIGZvciBwa2cgaW4gdXNlcmFkZF9wYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBwYXJhbSA9IGQuZ2V0VmFyKHBhcmFtX3R5cGUgJSBwa2csIFRydWUpCisgICAgICAgIGlmIHBhcmFtOgorICAgICAgICAgICAgcGFyYW1zLmFwcGVuZChwYXJhbSkKKworICAgIHJldHVybiAiOyAiLmpvaW4ocGFyYW1zKQorCisjIEFkZHMgdGhlIHByZWluc3Qgc2NyaXB0IGludG8gZ2VuZXJhdGVkIHBhY2thZ2VzCitmYWtlcm9vdCBweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgZGVmIHVwZGF0ZV91c2VyYWRkX3BhY2thZ2UocGtnKToKKyAgICAgICAgYmIuZGVidWcoMSwgJ2FkZGluZyB1c2VyL2dyb3VwIGNhbGxzIHRvIHByZWluc3QgZm9yICVzJyAlIHBrZykKKworICAgICAgICAiIiIKKyAgICAgICAgdXNlcmFkZCBwcmVpbnN0IGlzIGFwcGVuZGVkIGhlcmUgYmVjYXVzZSBwa2dfcHJlaW5zdCBtYXkgYmUKKyAgICAgICAgcmVxdWlyZWQgdG8gZXhlY3V0ZSBvbiB0aGUgdGFyZ2V0LiBOb3QgZG9pbmcgc28gbWF5IGNhdXNlCisgICAgICAgIHVzZXJhZGQgcHJlaW5zdCB0byBiZSBpbnZva2VkIHR3aWNlLCBjYXVzaW5nIHVud2FudGVkIHdhcm5pbmdzLgorICAgICAgICAiIiIKKyAgICAgICAgcHJlaW5zdCA9IGQuZ2V0VmFyKCdwa2dfcHJlaW5zdF8lcycgJSBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdwa2dfcHJlaW5zdCcsIFRydWUpCisgICAgICAgIGlmIG5vdCBwcmVpbnN0OgorICAgICAgICAgICAgcHJlaW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcHJlaW5zdCArPSAnYmJub3RlICgpIHtcblx0ZWNobyAiTk9URTogJCoiXG59XG4nCisgICAgICAgIHByZWluc3QgKz0gJ2Jid2FybiAoKSB7XG5cdGVjaG8gIldBUk5JTkc6ICQqIlxufVxuJworICAgICAgICBwcmVpbnN0ICs9ICdiYmZhdGFsICgpIHtcblx0ZWNobyAiRVJST1I6ICQqIlxuXHRleGl0IDFcbn1cbicKKyAgICAgICAgcHJlaW5zdCArPSAncGVyZm9ybV9ncm91cGFkZCAoKSB7XG4lc31cbicgJSBkLmdldFZhcigncGVyZm9ybV9ncm91cGFkZCcsIFRydWUpCisgICAgICAgIHByZWluc3QgKz0gJ3BlcmZvcm1fdXNlcmFkZCAoKSB7XG4lc31cbicgJSBkLmdldFZhcigncGVyZm9ybV91c2VyYWRkJywgVHJ1ZSkKKyAgICAgICAgcHJlaW5zdCArPSAncGVyZm9ybV9ncm91cG1lbXMgKCkge1xuJXN9XG4nICUgZC5nZXRWYXIoJ3BlcmZvcm1fZ3JvdXBtZW1zJywgVHJ1ZSkKKyAgICAgICAgcHJlaW5zdCArPSBkLmdldFZhcigndXNlcmFkZF9wcmVpbnN0JywgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wcmVpbnN0XyVzJyAlIHBrZywgcHJlaW5zdCkKKworICAgICAgICAjIFJERVBFTkRTIHNldHVwCisgICAgICAgIHJkZXBlbmRzID0gZC5nZXRWYXIoIlJERVBFTkRTXyVzIiAlIHBrZywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgcmRlcGVuZHMgKz0gJyAnICsgZC5nZXRWYXIoJ01MUFJFRklYJywgRmFsc2UpICsgJ2Jhc2UtcGFzc3dkJworICAgICAgICByZGVwZW5kcyArPSAnICcgKyBkLmdldFZhcignTUxQUkVGSVgnLCBGYWxzZSkgKyAnc2hhZG93JworICAgICAgICAjIGJhc2UtZmlsZXMgaXMgd2hlcmUgdGhlIGRlZmF1bHQgL2V0Yy9za2VsIGlzIHBhY2thZ2VkCisgICAgICAgIHJkZXBlbmRzICs9ICcgJyArIGQuZ2V0VmFyKCdNTFBSRUZJWCcsIEZhbHNlKSArICdiYXNlLWZpbGVzJworICAgICAgICBkLnNldFZhcigiUkRFUEVORFNfJXMiICUgcGtnLCByZGVwZW5kcykKKworICAgICMgQWRkIHRoZSB1c2VyL2dyb3VwIHByZWluc3RhbGwgc2NyaXB0cyBhbmQgUkRFUEVORFMgcmVxdWlyZW1lbnRzCisgICAgIyB0byBwYWNrYWdlcyBzcGVjaWZpZWQgYnkgVVNFUkFERF9QQUNLQUdFUworICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKSBcCisgICAgICAgIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCk6CisgICAgICAgIHVzZXJhZGRfcGFja2FnZXMgPSBkLmdldFZhcignVVNFUkFERF9QQUNLQUdFUycsIFRydWUpIG9yICIiCisgICAgICAgIGZvciBwa2cgaW4gdXNlcmFkZF9wYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICAgICAgdXBkYXRlX3VzZXJhZGRfcGFja2FnZShwa2cpCit9CisKKyMgVXNlIHRoZSBmb2xsb3dpbmcgdG8gZXh0ZW5kIHRoZSB1c2VyYWRkIHdpdGggY3VzdG9tIGZ1bmN0aW9ucworVVNFUkFEREVYVEVOU0lPTiA/PSAiIgorCitpbmhlcml0ICR7VVNFUkFEREVYVEVOU0lPTn0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VzZXJhZGRfYmFzZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXNlcmFkZF9iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyZjNhMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VzZXJhZGRfYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsMjMwIEBACisjIFRoaXMgYmJjbGFzcyBwcm92aWRlcyBiYXNpYyBmdW5jdGlvbmFsaXR5IGZvciB1c2VyL2dyb3VwIHNldHRpbmdzLgorIyBUaGlzIGJiY2xhc3MgaXMgaW50ZW5kZWQgdG8gYmUgaW5oZXJpdGVkIGJ5IHVzZXJhZGQuYmJjbGFzcyBhbmQKKyMgZXh0cmF1c2Vycy5iYmNsYXNzLgorCisjIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGJhc2ljYWxseSBoYXZlIHNpbWlsYXIgbG9naWMuCisjICopIFBlcmZvcm0gbmVjZXNzYXJ5IGNoZWNrcyBiZWZvcmUgaW52b2tpbmcgdGhlIGFjdHVhbCBjb21tYW5kCisjICopIEludm9rZSB0aGUgYWN0dWFsIGNvbW1hbmQsIG1ha2UgcmV0cmllcyBpZiBuZWNlc3NhcnkKKyMgKikgRXJyb3Igb3V0IGlmIGFuIGVycm9yIG9jY3Vycy4KKworIyBOb3RlIHRoYXQgYmVmb3JlIGludm9raW5nIHRoZXNlIGZ1bmN0aW9ucywgbWFrZSBzdXJlIHRoZSBnbG9iYWwgdmFyaWFibGUKKyMgUFNFVURPIGlzIHNldCB1cCBjb3JyZWN0bHkuCisKK3BlcmZvcm1fZ3JvdXBhZGQgKCkgeworCWxvY2FsIHJvb3RkaXI9IiQxIgorCWxvY2FsIG9wdHM9IiQyIgorCWxvY2FsIHJldHJpZXM9IiQzIgorCWJibm90ZSAiJHtQTn06IFBlcmZvcm1pbmcgZ3JvdXBhZGQgd2l0aCBbJG9wdHNdIGFuZCAkcmV0cmllcyB0aW1lcyBvZiByZXRyeSIKKwlsb2NhbCBncm91cG5hbWU9YGVjaG8gIiRvcHRzIiB8IGF3ayAneyBwcmludCAkTkYgfSdgCisJbG9jYWwgZ3JvdXBfZXhpc3RzPSJgZ3JlcCAiXiRncm91cG5hbWU6IiAkcm9vdGRpci9ldGMvZ3JvdXAgfHwgdHJ1ZWAiCisJaWYgdGVzdCAieCRncm91cF9leGlzdHMiID0gIngiOyB0aGVuCisJCWxvY2FsIGNvdW50PTAKKwkJd2hpbGUgdHJ1ZTsgZG8KKwkJCWV2YWwgJFBTRVVETyBncm91cGFkZCAkb3B0cyB8fCB0cnVlCisJCQlncm91cF9leGlzdHM9ImBncmVwICJeJGdyb3VwbmFtZToiICRyb290ZGlyL2V0Yy9ncm91cCB8fCB0cnVlYCIKKwkJCWlmIHRlc3QgIngkZ3JvdXBfZXhpc3RzIiA9ICJ4IjsgdGhlbgorCQkJCWJid2FybiAiJHtQTn06IGdyb3VwYWRkIGNvbW1hbmQgZGlkIG5vdCBzdWNjZWVkLiBSZXRyeWluZy4uLiIKKwkJCWVsc2UKKwkJCQlicmVhaworCQkJZmkKKwkJCWNvdW50PWBleHByICRjb3VudCArIDFgCisJCQlpZiB0ZXN0ICRjb3VudCA9ICRyZXRyaWVzOyB0aGVuCisJCQkJYmJmYXRhbCAiJHtQTn06IFRyaWVkIHJ1bm5pbmcgZ3JvdXBhZGQgY29tbWFuZCAkcmV0cmllcyB0aW1lcyB3aXRob3V0IHN1Y2Nlc3MsIGdpdmluZyB1cCIKKwkJCWZpCisgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcCAkY291bnQKKwkJZG9uZQorCWVsc2UKKwkJYmJub3RlICIke1BOfTogZ3JvdXAgJGdyb3VwbmFtZSBhbHJlYWR5IGV4aXN0cywgbm90IHJlLWNyZWF0aW5nIGl0IgorCWZpCit9CisKK3BlcmZvcm1fdXNlcmFkZCAoKSB7CisJbG9jYWwgcm9vdGRpcj0iJDEiCisJbG9jYWwgb3B0cz0iJDIiCisJbG9jYWwgcmV0cmllcz0iJDMiCisJYmJub3RlICIke1BOfTogUGVyZm9ybWluZyB1c2VyYWRkIHdpdGggWyRvcHRzXSBhbmQgJHJldHJpZXMgdGltZXMgb2YgcmV0cnkiCisJbG9jYWwgdXNlcm5hbWU9YGVjaG8gIiRvcHRzIiB8IGF3ayAneyBwcmludCAkTkYgfSdgCisJbG9jYWwgdXNlcl9leGlzdHM9ImBncmVwICJeJHVzZXJuYW1lOiIgJHJvb3RkaXIvZXRjL3Bhc3N3ZCB8fCB0cnVlYCIKKwlpZiB0ZXN0ICJ4JHVzZXJfZXhpc3RzIiA9ICJ4IjsgdGhlbgorCSAgICAgICBsb2NhbCBjb3VudD0wCisJICAgICAgIHdoaWxlIHRydWU7IGRvCisJCSAgICAgICBldmFsICRQU0VVRE8gdXNlcmFkZCAkb3B0cyB8fCB0cnVlCisJCSAgICAgICB1c2VyX2V4aXN0cz0iYGdyZXAgIl4kdXNlcm5hbWU6IiAkcm9vdGRpci9ldGMvcGFzc3dkIHx8IHRydWVgIgorCQkgICAgICAgaWYgdGVzdCAieCR1c2VyX2V4aXN0cyIgPSAieCI7IHRoZW4KKwkJCSAgICAgICBiYndhcm4gIiR7UE59OiB1c2VyYWRkIGNvbW1hbmQgZGlkIG5vdCBzdWNjZWVkLiBSZXRyeWluZy4uLiIKKwkJICAgICAgIGVsc2UKKwkJCSAgICAgICBicmVhaworCQkgICAgICAgZmkKKwkJICAgICAgIGNvdW50PWBleHByICRjb3VudCArIDFgCisJCSAgICAgICBpZiB0ZXN0ICRjb3VudCA9ICRyZXRyaWVzOyB0aGVuCisJCQkJYmJmYXRhbCAiJHtQTn06IFRyaWVkIHJ1bm5pbmcgdXNlcmFkZCBjb21tYW5kICRyZXRyaWVzIHRpbWVzIHdpdGhvdXQgc3VjY2VzcywgZ2l2aW5nIHVwIgorCQkgICAgICAgZmkKKwkJICAgICAgIHNsZWVwICRjb3VudAorCSAgICAgICBkb25lCisJZWxzZQorCQliYm5vdGUgIiR7UE59OiB1c2VyICR1c2VybmFtZSBhbHJlYWR5IGV4aXN0cywgbm90IHJlLWNyZWF0aW5nIGl0IgorCWZpCit9CisKK3BlcmZvcm1fZ3JvdXBtZW1zICgpIHsKKwlsb2NhbCByb290ZGlyPSIkMSIKKwlsb2NhbCBvcHRzPSIkMiIKKwlsb2NhbCByZXRyaWVzPSIkMyIKKwliYm5vdGUgIiR7UE59OiBQZXJmb3JtaW5nIGdyb3VwbWVtcyB3aXRoIFskb3B0c10gYW5kICRyZXRyaWVzIHRpbWVzIG9mIHJldHJ5IgorCWxvY2FsIGdyb3VwbmFtZT1gZWNobyAiJG9wdHMiIHwgYXdrICd7IGZvciAoaSA9IDE7IGkgPCBORjsgaSsrKSBpZiAoJGkgPT0gIi1nIiB8fCAkaSA9PSAiLS1ncm91cCIpIHByaW50ICQoaSsxKSB9J2AKKwlsb2NhbCB1c2VybmFtZT1gZWNobyAiJG9wdHMiIHwgYXdrICd7IGZvciAoaSA9IDE7IGkgPCBORjsgaSsrKSBpZiAoJGkgPT0gIi1hIiB8fCAkaSA9PSAiLS1hZGQiKSBwcmludCAkKGkrMSkgfSdgCisJYmJub3RlICIke1BOfTogUnVubmluZyBncm91cG1lbXMgY29tbWFuZCB3aXRoIGdyb3VwICRncm91cG5hbWUgYW5kIHVzZXIgJHVzZXJuYW1lIgorCSMgZ3JvdXBtZW1zIGZhaWxzIGlmIC9ldGMvZ3NoYWRvdyBkb2VzIG5vdCBleGlzdAorCWxvY2FsIGdzaGFkb3c9IiIKKwlpZiBbIC1mICRyb290ZGlyJHtzeXNjb25mZGlyfS9nc2hhZG93IF07IHRoZW4KKwkJZ3NoYWRvdz0ieWVzIgorCWVsc2UKKwkJZ3NoYWRvdz0ibm8iCisJCXRvdWNoICRyb290ZGlyJHtzeXNjb25mZGlyfS9nc2hhZG93CisJZmkKKwlsb2NhbCBtZW1fZXhpc3RzPSJgZ3JlcCAiXiRncm91cG5hbWU6W146XSo6W146XSo6XChbXixdKixcKSokdXNlcm5hbWVcKCxbXixdKlwpKiIgJHJvb3RkaXIvZXRjL2dyb3VwIHx8IHRydWVgIgorCWlmIHRlc3QgIngkbWVtX2V4aXN0cyIgPSAieCI7IHRoZW4KKwkJbG9jYWwgY291bnQ9MAorCQl3aGlsZSB0cnVlOyBkbworCQkJZXZhbCAkUFNFVURPIGdyb3VwbWVtcyAkb3B0cyB8fCB0cnVlCisJCQltZW1fZXhpc3RzPSJgZ3JlcCAiXiRncm91cG5hbWU6W146XSo6W146XSo6XChbXixdKixcKSokdXNlcm5hbWVcKCxbXixdKlwpKiIgJHJvb3RkaXIvZXRjL2dyb3VwIHx8IHRydWVgIgorCQkJaWYgdGVzdCAieCRtZW1fZXhpc3RzIiA9ICJ4IjsgdGhlbgorCQkJCWJid2FybiAiJHtQTn06IGdyb3VwbWVtcyBjb21tYW5kIGRpZCBub3Qgc3VjY2VlZC4gUmV0cnlpbmcuLi4iCisJCQllbHNlCisJCQkJYnJlYWsKKwkJCWZpCisJCQljb3VudD1gZXhwciAkY291bnQgKyAxYAorCQkJaWYgdGVzdCAkY291bnQgPSAkcmV0cmllczsgdGhlbgorCQkJCWlmIHRlc3QgIngkZ3NoYWRvdyIgPSAieG5vIjsgdGhlbgorCQkJCQlybSAtZiAkcm9vdGRpciR7c3lzY29uZmRpcn0vZ3NoYWRvdworCQkJCQlybSAtZiAkcm9vdGRpciR7c3lzY29uZmRpcn0vZ3NoYWRvdy0KKwkJCQlmaQorCQkJCWJiZmF0YWwgIiR7UE59OiBUcmllZCBydW5uaW5nIGdyb3VwbWVtcyBjb21tYW5kICRyZXRyaWVzIHRpbWVzIHdpdGhvdXQgc3VjY2VzcywgZ2l2aW5nIHVwIgorCQkJZmkKKwkJCXNsZWVwICRjb3VudAorCQlkb25lCisJZWxzZQorCQliYndhcm4gIiR7UE59OiBncm91cCAkZ3JvdXBuYW1lIGFscmVhZHkgY29udGFpbnMgJHVzZXJuYW1lLCBub3QgcmUtYWRkaW5nIGl0IgorCWZpCisJaWYgdGVzdCAieCRnc2hhZG93IiA9ICJ4bm8iOyB0aGVuCisJCXJtIC1mICRyb290ZGlyJHtzeXNjb25mZGlyfS9nc2hhZG93CisJCXJtIC1mICRyb290ZGlyJHtzeXNjb25mZGlyfS9nc2hhZG93LQorCWZpCit9CisKK3BlcmZvcm1fZ3JvdXBkZWwgKCkgeworCWxvY2FsIHJvb3RkaXI9IiQxIgorCWxvY2FsIG9wdHM9IiQyIgorCWxvY2FsIHJldHJpZXM9IiQzIgorCWJibm90ZSAiJHtQTn06IFBlcmZvcm1pbmcgZ3JvdXBkZWwgd2l0aCBbJG9wdHNdIGFuZCAkcmV0cmllcyB0aW1lcyBvZiByZXRyeSIKKwlsb2NhbCBncm91cG5hbWU9YGVjaG8gIiRvcHRzIiB8IGF3ayAneyBwcmludCAkTkYgfSdgCisJbG9jYWwgZ3JvdXBfZXhpc3RzPSJgZ3JlcCAiXiRncm91cG5hbWU6IiAkcm9vdGRpci9ldGMvZ3JvdXAgfHwgdHJ1ZWAiCisJaWYgdGVzdCAieCRncm91cF9leGlzdHMiICE9ICJ4IjsgdGhlbgorCQlsb2NhbCBjb3VudD0wCisJCXdoaWxlIHRydWU7IGRvCisJCQlldmFsICRQU0VVRE8gZ3JvdXBkZWwgJG9wdHMgfHwgdHJ1ZQorCQkJZ3JvdXBfZXhpc3RzPSJgZ3JlcCAiXiRncm91cG5hbWU6IiAkcm9vdGRpci9ldGMvZ3JvdXAgfHwgdHJ1ZWAiCisJCQlpZiB0ZXN0ICJ4JGdyb3VwX2V4aXN0cyIgIT0gIngiOyB0aGVuCisJCQkJYmJ3YXJuICIke1BOfTogZ3JvdXBkZWwgY29tbWFuZCBkaWQgbm90IHN1Y2NlZWQuIFJldHJ5aW5nLi4uIgorCQkJZWxzZQorCQkJCWJyZWFrCisJCQlmaQorCQkJY291bnQ9YGV4cHIgJGNvdW50ICsgMWAKKwkJCWlmIHRlc3QgJGNvdW50ID0gJHJldHJpZXM7IHRoZW4KKwkJCQliYmZhdGFsICIke1BOfTogVHJpZWQgcnVubmluZyBncm91cGRlbCBjb21tYW5kICRyZXRyaWVzIHRpbWVzIHdpdGhvdXQgc3VjY2VzcywgZ2l2aW5nIHVwIgorCQkJZmkKKwkJCXNsZWVwICRjb3VudAorCQlkb25lCisJZWxzZQorCQliYndhcm4gIiR7UE59OiBncm91cCAkZ3JvdXBuYW1lIGRvZXNuJ3QgZXhpc3QsIG5vdCByZW1vdmluZyBpdCIKKwlmaQorfQorCitwZXJmb3JtX3VzZXJkZWwgKCkgeworCWxvY2FsIHJvb3RkaXI9IiQxIgorCWxvY2FsIG9wdHM9IiQyIgorCWxvY2FsIHJldHJpZXM9IiQzIgorCWJibm90ZSAiJHtQTn06IFBlcmZvcm1pbmcgdXNlcmRlbCB3aXRoIFskb3B0c10gYW5kICRyZXRyaWVzIHRpbWVzIG9mIHJldHJ5IgorCWxvY2FsIHVzZXJuYW1lPWBlY2hvICIkb3B0cyIgfCBhd2sgJ3sgcHJpbnQgJE5GIH0nYAorCWxvY2FsIHVzZXJfZXhpc3RzPSJgZ3JlcCAiXiR1c2VybmFtZToiICRyb290ZGlyL2V0Yy9wYXNzd2QgfHwgdHJ1ZWAiCisJaWYgdGVzdCAieCR1c2VyX2V4aXN0cyIgIT0gIngiOyB0aGVuCisJICAgICAgIGxvY2FsIGNvdW50PTAKKwkgICAgICAgd2hpbGUgdHJ1ZTsgZG8KKwkJICAgICAgIGV2YWwgJFBTRVVETyB1c2VyZGVsICRvcHRzIHx8IHRydWUKKwkJICAgICAgIHVzZXJfZXhpc3RzPSJgZ3JlcCAiXiR1c2VybmFtZToiICRyb290ZGlyL2V0Yy9wYXNzd2QgfHwgdHJ1ZWAiCisJCSAgICAgICBpZiB0ZXN0ICJ4JHVzZXJfZXhpc3RzIiAhPSAieCI7IHRoZW4KKwkJCSAgICAgICBiYndhcm4gIiR7UE59OiB1c2VyZGVsIGNvbW1hbmQgZGlkIG5vdCBzdWNjZWVkLiBSZXRyeWluZy4uLiIKKwkJICAgICAgIGVsc2UKKwkJCSAgICAgICBicmVhaworCQkgICAgICAgZmkKKwkJICAgICAgIGNvdW50PWBleHByICRjb3VudCArIDFgCisJCSAgICAgICBpZiB0ZXN0ICRjb3VudCA9ICRyZXRyaWVzOyB0aGVuCisJCQkJYmJmYXRhbCAiJHtQTn06IFRyaWVkIHJ1bm5pbmcgdXNlcmRlbCBjb21tYW5kICRyZXRyaWVzIHRpbWVzIHdpdGhvdXQgc3VjY2VzcywgZ2l2aW5nIHVwIgorCQkgICAgICAgZmkKKwkJICAgICAgIHNsZWVwICRjb3VudAorCSAgICAgICBkb25lCisJZWxzZQorCQliYndhcm4gIiR7UE59OiB1c2VyICR1c2VybmFtZSBkb2Vzbid0IGV4aXN0LCBub3QgcmVtb3ZpbmcgaXQiCisJZmkKK30KKworcGVyZm9ybV9ncm91cG1vZCAoKSB7CisJIyBPdGhlciB0aGFuIHRoZSByZXR1cm4gdmFsdWUgb2YgZ3JvdXBtb2QsIHRoZXJlJ3Mgbm8gc2ltcGxlIHdheSB0byBqdWRnZSB3aGV0aGVyIHRoZSBjb21tYW5kCisJIyBzdWNjZWVkcywgc28gd2UgZGlzYWJsZSAtZSBvcHRpb24gdGVtcG9yYXJpbHkKKwlzZXQgK2UKKwlsb2NhbCByb290ZGlyPSIkMSIKKwlsb2NhbCBvcHRzPSIkMiIKKwlsb2NhbCByZXRyaWVzPSIkMyIKKwliYm5vdGUgIiR7UE59OiBQZXJmb3JtaW5nIGdyb3VwbW9kIHdpdGggWyRvcHRzXSBhbmQgJHJldHJpZXMgdGltZXMgb2YgcmV0cnkiCisJbG9jYWwgZ3JvdXBuYW1lPWBlY2hvICIkb3B0cyIgfCBhd2sgJ3sgcHJpbnQgJE5GIH0nYAorCWxvY2FsIGdyb3VwX2V4aXN0cz0iYGdyZXAgIl4kZ3JvdXBuYW1lOiIgJHJvb3RkaXIvZXRjL2dyb3VwIHx8IHRydWVgIgorCWlmIHRlc3QgIngkZ3JvdXBfZXhpc3RzIiAhPSAieCI7IHRoZW4KKwkJbG9jYWwgY291bnQ9MAorCQl3aGlsZSB0cnVlOyBkbworCQkJZXZhbCAkUFNFVURPIGdyb3VwbW9kICRvcHRzCisJCQlpZiB0ZXN0ICQ/ICE9IDA7IHRoZW4KKwkJCQliYndhcm4gIiR7UE59OiBncm91cG1vZCBjb21tYW5kIGRpZCBub3Qgc3VjY2VlZC4gUmV0cnlpbmcuLi4iCisJCQllbHNlCisJCQkJYnJlYWsKKwkJCWZpCisJCQljb3VudD1gZXhwciAkY291bnQgKyAxYAorCQkJaWYgdGVzdCAkY291bnQgPSAkcmV0cmllczsgdGhlbgorCQkJCWJiZmF0YWwgIiR7UE59OiBUcmllZCBydW5uaW5nIGdyb3VwbW9kIGNvbW1hbmQgJHJldHJpZXMgdGltZXMgd2l0aG91dCBzdWNjZXNzLCBnaXZpbmcgdXAiCisJCQlmaQorCQkJc2xlZXAgJGNvdW50CisJCWRvbmUKKwllbHNlCisJCWJid2FybiAiJHtQTn06IGdyb3VwICRncm91cG5hbWUgZG9lc24ndCBleGlzdCwgdW5hYmxlIHRvIG1vZGlmeSBpdCIKKwlmaQorCXNldCAtZQorfQorCitwZXJmb3JtX3VzZXJtb2QgKCkgeworCSMgU2FtZSByZWFzb24gd2l0aCBncm91cG1vZCwgdGVtcG9yYXJpbHkgZGlzYWJsZSAtZSBvcHRpb24KKwlzZXQgK2UKKwlsb2NhbCByb290ZGlyPSIkMSIKKwlsb2NhbCBvcHRzPSIkMiIKKwlsb2NhbCByZXRyaWVzPSIkMyIKKwliYm5vdGUgIiR7UE59OiBQZXJmb3JtaW5nIHVzZXJtb2Qgd2l0aCBbJG9wdHNdIGFuZCAkcmV0cmllcyB0aW1lcyBvZiByZXRyeSIKKwlsb2NhbCB1c2VybmFtZT1gZWNobyAiJG9wdHMiIHwgYXdrICd7IHByaW50ICRORiB9J2AKKwlsb2NhbCB1c2VyX2V4aXN0cz0iYGdyZXAgIl4kdXNlcm5hbWU6IiAkcm9vdGRpci9ldGMvcGFzc3dkIHx8IHRydWVgIgorCWlmIHRlc3QgIngkdXNlcl9leGlzdHMiICE9ICJ4IjsgdGhlbgorCSAgICAgICBsb2NhbCBjb3VudD0wCisJICAgICAgIHdoaWxlIHRydWU7IGRvCisJCSAgICAgICBldmFsICRQU0VVRE8gdXNlcm1vZCAkb3B0cworCQkgICAgICAgaWYgdGVzdCAkPyAhPSAwOyB0aGVuCisJCQkgICAgICAgYmJ3YXJuICIke1BOfTogdXNlcm1vZCBjb21tYW5kIGRpZCBub3Qgc3VjY2VlZC4gUmV0cnlpbmcuLi4iCisJCSAgICAgICBlbHNlCisJCQkgICAgICAgYnJlYWsKKwkJICAgICAgIGZpCisJCSAgICAgICBjb3VudD1gZXhwciAkY291bnQgKyAxYAorCQkgICAgICAgaWYgdGVzdCAkY291bnQgPSAkcmV0cmllczsgdGhlbgorCQkJCWJiZmF0YWwgIiR7UE59OiBUcmllZCBydW5uaW5nIHVzZXJtb2QgY29tbWFuZCAkcmV0cmllcyB0aW1lcyB3aXRob3V0IHN1Y2Nlc3MsIGdpdmluZyB1cCIKKwkJICAgICAgIGZpCisJCSAgICAgICBzbGVlcCAkY291bnQKKwkgICAgICAgZG9uZQorCWVsc2UKKwkJYmJ3YXJuICIke1BOfTogdXNlciAkdXNlcm5hbWUgZG9lc24ndCBleGlzdCwgdW5hYmxlIHRvIG1vZGlmeSBpdCIKKwlmaQorCXNldCAtZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXRpbGl0eS10YXNrcy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXRpbGl0eS10YXNrcy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MTdiODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91dGlsaXR5LXRhc2tzLmJiY2xhc3MKQEAgLTAsMCArMSw2OSBAQAorYWRkdGFzayBsaXN0dGFza3MKK2RvX2xpc3R0YXNrc1tub3N0YW1wXSA9ICIxIgorcHl0aG9uIGRvX2xpc3R0YXNrcygpIHsKKyAgICB0YXNrZGVzY3MgPSB7fQorICAgIG1heGxlbiA9IDAKKyAgICBmb3IgZSBpbiBkLmtleXMoKToKKyAgICAgICAgaWYgZC5nZXRWYXJGbGFnKGUsICd0YXNrJyk6CisgICAgICAgICAgICBtYXhsZW4gPSBtYXgobWF4bGVuLCBsZW4oZSkpCisgICAgICAgICAgICBpZiBlLmVuZHN3aXRoKCdfc2V0c2NlbmUnKToKKyAgICAgICAgICAgICAgICBkZXNjID0gIiVzIChzZXRzY2VuZSB2ZXJzaW9uKSIgJSAoZC5nZXRWYXJGbGFnKGVbOi05XSwgJ2RvYycpIG9yICcnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkZXNjID0gZC5nZXRWYXJGbGFnKGUsICdkb2MnKSBvciAnJworICAgICAgICAgICAgdGFza2Rlc2NzW2VdID0gZGVzYworCisgICAgdGFza3MgPSBzb3J0ZWQodGFza2Rlc2NzLmtleXMoKSkKKyAgICBmb3IgdGFza25hbWUgaW4gdGFza3M6CisgICAgICAgIGJiLnBsYWluKCIlcyAgJXMiICUgKHRhc2tuYW1lLmxqdXN0KG1heGxlbiksIHRhc2tkZXNjc1t0YXNrbmFtZV0pKQorfQorCitDTEVBTkZVTkNTID89ICIiCisKK1RfdGFzay1jbGVhbiA9ICIke0xPR19ESVJ9L2NsZWFubG9ncy8ke1BOfSIKK2FkZHRhc2sgY2xlYW4KK2RvX2NsZWFuW25vc3RhbXBdID0gIjEiCitweXRob24gZG9fY2xlYW4oKSB7CisgICAgIiIiY2xlYXIgdGhlIGJ1aWxkIGFuZCB0ZW1wIGRpcmVjdG9yaWVzIiIiCisgICAgZGlyID0gZC5leHBhbmQoIiR7V09SS0RJUn0iKQorICAgIGJiLm5vdGUoIlJlbW92aW5nICIgKyBkaXIpCisgICAgb2UucGF0aC5yZW1vdmUoZGlyKQorCisgICAgZGlyID0gIiVzLioiICUgYmIuZGF0YS5leHBhbmQoZC5nZXRWYXIoJ1NUQU1QJywgRmFsc2UpLCBkKQorICAgIGJiLm5vdGUoIlJlbW92aW5nICIgKyBkaXIpCisgICAgb2UucGF0aC5yZW1vdmUoZGlyKQorCisgICAgZm9yIGYgaW4gKGQuZ2V0VmFyKCdDTEVBTkZVTkNTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhmLCBkKQorfQorCithZGR0YXNrIGNoZWNrdXJpCitkb19jaGVja3VyaVtub3N0YW1wXSA9ICIxIgorcHl0aG9uIGRvX2NoZWNrdXJpKCkgeworICAgIHNyY191cmkgPSAoZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGlmIGxlbihzcmNfdXJpKSA9PSAwOgorICAgICAgICByZXR1cm4KKworICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgdHJ5OgorICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2gyLkZldGNoKHNyY191cmksIGxvY2FsZGF0YSkKKyAgICAgICAgZmV0Y2hlci5jaGVja3N0YXR1cygpCisgICAgZXhjZXB0IGJiLmZldGNoMi5CQkZldGNoRXhjZXB0aW9uLCBlOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKGUpCit9CisKK2FkZHRhc2sgY2hlY2t1cmlhbGwgYWZ0ZXIgZG9fY2hlY2t1cmkKK2RvX2NoZWNrdXJpYWxsW3JlY3JkZXB0YXNrXSA9ICJkb19jaGVja3VyaWFsbCBkb19jaGVja3VyaSIKK2RvX2NoZWNrdXJpYWxsW3JlY2lkZXB0YXNrXSA9ICJkb18ke0JCX0RFRkFVTFRfVEFTS30iCitkb19jaGVja3VyaWFsbFtub3N0YW1wXSA9ICIxIgorZG9fY2hlY2t1cmlhbGwoKSB7CisJOgorfQorCithZGR0YXNrIGZldGNoYWxsIGFmdGVyIGRvX2ZldGNoCitkb19mZXRjaGFsbFtyZWNyZGVwdGFza10gPSAiZG9fZmV0Y2hhbGwgZG9fZmV0Y2giCitkb19mZXRjaGFsbFtyZWNpZGVwdGFza10gPSAiZG9fJHtCQl9ERUZBVUxUX1RBU0t9IgorZG9fZmV0Y2hhbGwoKSB7CisJOgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXRpbHMuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3V0aWxzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFiOTJjYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3V0aWxzLmJiY2xhc3MKQEAgLTAsMCArMSwzODAgQEAKKyMgRm9yIGNvbXBhdGliaWxpdHkKK2RlZiBiYXNlX3BhdGhfam9pbihhLCAqcCk6CisgICAgcmV0dXJuIG9lLnBhdGguam9pbihhLCAqcCkKKworZGVmIGJhc2VfcGF0aF9yZWxhdGl2ZShzcmMsIGRlc3QpOgorICAgIHJldHVybiBvZS5wYXRoLnJlbGF0aXZlKHNyYywgZGVzdCkKKworZGVmIGJhc2VfcGF0aF9vdXQocGF0aCwgZCk6CisgICAgcmV0dXJuIG9lLnBhdGguZm9ybWF0X2Rpc3BsYXkocGF0aCwgZCkKKworZGVmIGJhc2VfcmVhZF9maWxlKGZpbGVuYW1lKToKKyAgICByZXR1cm4gb2UudXRpbHMucmVhZF9maWxlKGZpbGVuYW1lKQorCitkZWYgYmFzZV9pZmVsc2UoY29uZGl0aW9uLCBpZnRydWUgPSBUcnVlLCBpZmZhbHNlID0gRmFsc2UpOgorICAgIHJldHVybiBvZS51dGlscy5pZmVsc2UoY29uZGl0aW9uLCBpZnRydWUsIGlmZmFsc2UpCisKK2RlZiBiYXNlX2NvbmRpdGlvbmFsKHZhcmlhYmxlLCBjaGVja3ZhbHVlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpOgorICAgIHJldHVybiBvZS51dGlscy5jb25kaXRpb25hbCh2YXJpYWJsZSwgY2hlY2t2YWx1ZSwgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKQorCitkZWYgYmFzZV9sZXNzX29yX2VxdWFsKHZhcmlhYmxlLCBjaGVja3ZhbHVlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpOgorICAgIHJldHVybiBvZS51dGlscy5sZXNzX29yX2VxdWFsKHZhcmlhYmxlLCBjaGVja3ZhbHVlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpCisKK2RlZiBiYXNlX3ZlcnNpb25fbGVzc19vcl9lcXVhbCh2YXJpYWJsZSwgY2hlY2t2YWx1ZSwgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKToKKyAgICByZXR1cm4gb2UudXRpbHMudmVyc2lvbl9sZXNzX29yX2VxdWFsKHZhcmlhYmxlLCBjaGVja3ZhbHVlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpCisKK2RlZiBiYXNlX2NvbnRhaW5zKHZhcmlhYmxlLCBjaGVja3ZhbHVlcywgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKToKKyAgICByZXR1cm4gYmIudXRpbHMuY29udGFpbnModmFyaWFibGUsIGNoZWNrdmFsdWVzLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpCisKK2RlZiBiYXNlX2JvdGhfY29udGFpbih2YXJpYWJsZTEsIHZhcmlhYmxlMiwgY2hlY2t2YWx1ZSwgZCk6CisgICAgcmV0dXJuIG9lLnV0aWxzLmJvdGhfY29udGFpbih2YXJpYWJsZTEsIHZhcmlhYmxlMiwgY2hlY2t2YWx1ZSwgZCkKKworZGVmIGJhc2VfcHJ1bmVfc3VmZml4KHZhciwgc3VmZml4ZXMsIGQpOgorICAgIHJldHVybiBvZS51dGlscy5wcnVuZV9zdWZmaXgodmFyLCBzdWZmaXhlcywgZCkKKworZGVmIG9lX2ZpbHRlcihmLCBzdHIsIGQpOgorICAgIHJldHVybiBvZS51dGlscy5zdHJfZmlsdGVyKGYsIHN0ciwgZCkKKworZGVmIG9lX2ZpbHRlcl9vdXQoZiwgc3RyLCBkKToKKyAgICByZXR1cm4gb2UudXRpbHMuc3RyX2ZpbHRlcl9vdXQoZiwgc3RyLCBkKQorCitkZWYgbWFjaGluZV9wYXRocyhkKToKKyAgICAiIiJMaXN0IGFueSBleGlzdGluZyBtYWNoaW5lIHNwZWNpZmljIGZpbGVzcGF0aCBkaXJlY3RvcmllcyIiIgorICAgIG1hY2hpbmUgPSBkLmdldFZhcigiTUFDSElORSIsIFRydWUpCisgICAgZmlsZXNwYXRocGtnID0gZC5nZXRWYXIoIkZJTEVTUEFUSFBLRyIsIFRydWUpLnNwbGl0KCI6IikKKyAgICBmb3IgYmFzZXBhdGggaW4gZC5nZXRWYXIoIkZJTEVTUEFUSEJBU0UiLCBUcnVlKS5zcGxpdCgiOiIpOgorICAgICAgICBmb3IgcGtncGF0aCBpbiBmaWxlc3BhdGhwa2c6CisgICAgICAgICAgICBtYWNoaW5lcGF0aCA9IG9zLnBhdGguam9pbihiYXNlcGF0aCwgcGtncGF0aCwgbWFjaGluZSkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIobWFjaGluZXBhdGgpOgorICAgICAgICAgICAgICAgIHlpZWxkIG1hY2hpbmVwYXRoCisKK2RlZiBpc19tYWNoaW5lX3NwZWNpZmljKGQpOgorICAgICIiIkRldGVybWluZSB3aGV0aGVyIHRoZSBjdXJyZW50IHJlY2lwZSBpcyBtYWNoaW5lIHNwZWNpZmljIiIiCisgICAgbWFjaGluZXBhdGhzID0gc2V0KG1hY2hpbmVfcGF0aHMoZCkpCisgICAgc3JjdXJpID0gZC5nZXRWYXIoIlNSQ19VUkkiLCBUcnVlKS5zcGxpdCgpCisgICAgZm9yIHVybCBpbiBzcmN1cmk6CisgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goW3NyY3VyaV0sIGQpCisgICAgICAgIGlmIHVybC5zdGFydHN3aXRoKCJmaWxlOi8vIik6CisgICAgICAgICAgICBpZiBhbnkoZmV0Y2hlci5sb2NhbHBhdGgodXJsKS5zdGFydHN3aXRoKG1wICsgIi8iKSBmb3IgbXAgaW4gbWFjaGluZXBhdGhzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCitvZV9zb2luc3RhbGwoKSB7CisJIyBQdXJwb3NlOiBJbnN0YWxsIHNoYXJlZCBsaWJyYXJ5IGZpbGUgYW5kCisJIyAgICAgICAgICBjcmVhdGUgdGhlIG5lY2Vzc2FyeSBsaW5rcworCSMgRXhhbXBsZToKKwkjCisJIyBvZV8KKwkjCisJI2Jibm90ZSBpbnN0YWxsaW5nIHNoYXJlZCBsaWJyYXJ5ICQxIHRvICQyCisJIworCWxpYm5hbWU9YGJhc2VuYW1lICQxYAorCWluc3RhbGwgLW0gNzU1ICQxICQyLyRsaWJuYW1lCisJc29uYW1lbGluaz1gJHtIT1NUX1BSRUZJWH1yZWFkZWxmIC1kICQxIHxncmVwICdMaWJyYXJ5IHNvbmFtZTonIHxzZWQgLWUgJ3MvLipcW1woLipcKVxdLiovXDEvJ2AKKwlzb2xpbms9YGVjaG8gJGxpYm5hbWUgfCBzZWQgLWUgJ3MvXC5zb1wuLiovLnNvLydgCisJbG4gLXNmICRsaWJuYW1lICQyLyRzb25hbWVsaW5rCisJbG4gLXNmICRsaWJuYW1lICQyLyRzb2xpbmsKK30KKworb2VfbGliaW5zdGFsbCgpIHsKKwkjIFB1cnBvc2U6IEluc3RhbGwgYSBsaWJyYXJ5LCBpbiBhbGwgaXRzIGZvcm1zCisJIyBFeGFtcGxlCisJIworCSMgb2VfbGliaW5zdGFsbCBsaWJsdGRsICR7U1RBR0lOR19MSUJESVJ9LworCSMgb2VfbGliaW5zdGFsbCAtQyBzcmMvbGliYmxhaCBsaWJibGFoICR7RH0vJHtsaWJkaXJ9LworCWRpcj0iIgorCWxpYnRvb2w9IiIKKwlzaWxlbnQ9IiIKKwlyZXF1aXJlX3N0YXRpYz0iIgorCXJlcXVpcmVfc2hhcmVkPSIiCisJc3RhZ2luZ19pbnN0YWxsPSIiCisJd2hpbGUgWyAiJCMiIC1ndCAwIF07IGRvCisJCWNhc2UgIiQxIiBpbgorCQktQykKKwkJCXNoaWZ0CisJCQlkaXI9IiQxIgorCQkJOzsKKwkJLXMpCisJCQlzaWxlbnQ9MQorCQkJOzsKKwkJLWEpCisJCQlyZXF1aXJlX3N0YXRpYz0xCisJCQk7OworCQktc28pCisJCQlyZXF1aXJlX3NoYXJlZD0xCisJCQk7OworCQktKikKKwkJCWJiZmF0YWwgIm9lX2xpYmluc3RhbGw6IHVua25vd24gb3B0aW9uOiAkMSIKKwkJCTs7CisJCSopCisJCQlicmVhazsKKwkJCTs7CisJCWVzYWMKKwkJc2hpZnQKKwlkb25lCisKKwlsaWJuYW1lPSIkMSIKKwlzaGlmdAorCWRlc3RwYXRoPSIkMSIKKwlpZiBbIC16ICIkZGVzdHBhdGgiIF07IHRoZW4KKwkJYmJmYXRhbCAib2VfbGliaW5zdGFsbDogbm8gZGVzdGluYXRpb24gcGF0aCBzcGVjaWZpZWQiCisJZmkKKwlpZiBlY2hvICIkZGVzdHBhdGgvIiB8IGVncmVwICdeJHtTVEFHSU5HX0xJQkRJUn0vJyA+L2Rldi9udWxsCisJdGhlbgorCQlzdGFnaW5nX2luc3RhbGw9MQorCWZpCisKKwlfX3J1bmNtZCAoKSB7CisJCWlmIFsgLXogIiRzaWxlbnQiIF07IHRoZW4KKwkJCWVjaG8gPiYyICJvZV9saWJpbnN0YWxsOiAkKiIKKwkJZmkKKwkJJCoKKwl9CisKKwlpZiBbIC16ICIkZGlyIiBdOyB0aGVuCisJCWRpcj1gcHdkYAorCWZpCisKKwlkb3RsYWk9JGxpYm5hbWUubGFpCisKKwkjIFNhbml0eSBjaGVjayB0aGF0IHRoZSBsaWJuYW1lLmxhaSBpcyB1bmlxdWUKKwludW1iZXJfb2ZfZmlsZXM9YChjZCAkZGlyOyBmaW5kIC4gLW5hbWUgIiRkb3RsYWkiKSB8IHdjIC1sYAorCWlmIFsgJG51bWJlcl9vZl9maWxlcyAtZ3QgMSBdOyB0aGVuCisJCWJiZmF0YWwgIm9lX2xpYmluc3RhbGw6ICRkb3RsYWkgaXMgbm90IHVuaXF1ZSBpbiAkZGlyIgorCWZpCisKKworCWRpcj0kZGlyYChjZCAkZGlyO2ZpbmQgLiAtbmFtZSAiJGRvdGxhaSIpIHwgc2VkICJzL15cLi8vO3MvXC8kZG90bGFpXCQvLztxImAKKwlvbGRkaXI9YHB3ZGAKKwlfX3J1bmNtZCBjZCAkZGlyCisKKwlsYWZpbGU9JGxpYm5hbWUubGEKKworCSMgSWYgc3VjaCBmaWxlIGRvZXNuJ3QgZXhpc3QsIHRyeSB0byBjdXQgdmVyc2lvbiBzdWZmaXgKKwlpZiBbICEgLWYgIiRsYWZpbGUiIF07IHRoZW4KKwkJbGlibmFtZTE9YGVjaG8gIiRsaWJuYW1lIiB8IHNlZCAncy8tWzAtOS5dKiQvLydgCisJCWxhZmlsZTE9JGxpYm5hbWUubGEKKwkJaWYgWyAtZiAiJGxhZmlsZTEiIF07IHRoZW4KKwkJCWxpYm5hbWU9JGxpYm5hbWUxCisJCQlsYWZpbGU9JGxhZmlsZTEKKwkJZmkKKwlmaQorCisJaWYgWyAtZiAiJGxhZmlsZSIgXTsgdGhlbgorCQkjIGxpYnRvb2wgYXJjaGl2ZQorCQlldmFsIGBjYXQgJGxhZmlsZXxncmVwICJebGlicmFyeV9uYW1lcz0iYAorCQlsaWJ0b29sPTEKKwllbHNlCisJCWxpYnJhcnlfbmFtZXM9IiRsaWJuYW1lLnNvKiAkbGlibmFtZS5kbGwuYSAkbGlibmFtZS4qLmR5bGliIgorCWZpCisKKwlfX3J1bmNtZCBpbnN0YWxsIC1kICRkZXN0cGF0aC8KKwlkb3RhPSRsaWJuYW1lLmEKKwlpZiBbIC1mICIkZG90YSIgLW8gLW4gIiRyZXF1aXJlX3N0YXRpYyIgXTsgdGhlbgorCQlybSAtZiAkZGVzdHBhdGgvJGRvdGEKKwkJX19ydW5jbWQgaW5zdGFsbCAtbSAwNjQ0ICRkb3RhICRkZXN0cGF0aC8KKwlmaQorCWlmIFsgLWYgIiRkb3RsYWkiIC1hIC1uICIkbGlidG9vbCIgXTsgdGhlbgorCQlybSAtZiAkZGVzdHBhdGgvJGxpYm5hbWUubGEKKwkJX19ydW5jbWQgaW5zdGFsbCAtbSAwNjQ0ICRkb3RsYWkgJGRlc3RwYXRoLyRsaWJuYW1lLmxhCisJZmkKKworCWZvciBuYW1lIGluICRsaWJyYXJ5X25hbWVzOyBkbworCQlmaWxlcz1gZXZhbCBlY2hvICRuYW1lYAorCQlmb3IgZiBpbiAkZmlsZXM7IGRvCisJCQlpZiBbICEgLWUgIiRmIiBdOyB0aGVuCisJCQkJaWYgWyAtbiAiJGxpYnRvb2wiIF07IHRoZW4KKwkJCQkJYmJmYXRhbCAib2VfbGliaW5zdGFsbDogJGRpci8kZiBub3QgZm91bmQuIgorCQkJCWZpCisJCQllbGlmIFsgLUwgIiRmIiBdOyB0aGVuCisJCQkJX19ydW5jbWQgY3AgLVAgIiRmIiAkZGVzdHBhdGgvCisJCQllbGlmIFsgISAtTCAiJGYiIF07IHRoZW4KKwkJCQlsaWJmaWxlPSIkZiIKKwkJCQlybSAtZiAkZGVzdHBhdGgvJGxpYmZpbGUKKwkJCQlfX3J1bmNtZCBpbnN0YWxsIC1tIDA3NTUgJGxpYmZpbGUgJGRlc3RwYXRoLworCQkJZmkKKwkJZG9uZQorCWRvbmUKKworCWlmIFsgLXogIiRsaWJmaWxlIiBdOyB0aGVuCisJCWlmICBbIC1uICIkcmVxdWlyZV9zaGFyZWQiIF07IHRoZW4KKwkJCWJiZmF0YWwgIm9lX2xpYmluc3RhbGw6IHVuYWJsZSB0byBsb2NhdGUgc2hhcmVkIGxpYnJhcnkiCisJCWZpCisJZWxpZiBbIC16ICIkbGlidG9vbCIgXTsgdGhlbgorCQkjIHNwZWNpYWwgY2FzZSBoYWNrIGZvciBub24tbGlidG9vbCAuc28uIy4jLiMgbGlua3MKKwkJYmFzZWxpYmZpbGU9YGJhc2VuYW1lICIkbGliZmlsZSJgCisJCWlmIChlY2hvICRiYXNlbGliZmlsZSB8IGdyZXAgLXFFICdebGliLipcLnNvXC5bMC05Ll0qJCcpOyB0aGVuCisJCQlzb25hbWVsaW5rPWAke0hPU1RfUFJFRklYfXJlYWRlbGYgLWQgJGxpYmZpbGUgfGdyZXAgJ0xpYnJhcnkgc29uYW1lOicgfHNlZCAtZSAncy8uKlxbXCguKlwpXF0uKi9cMS8nYAorCQkJc29saW5rPWBlY2hvICRiYXNlbGliZmlsZSB8IHNlZCAtZSAncy9cLnNvXC4uKi8uc28vJ2AKKwkJCWlmIFsgLW4gIiRzb25hbWVsaW5rIiAtYSB4IiRiYXNlbGliZmlsZSIgIT0geCIkc29uYW1lbGluayIgXTsgdGhlbgorCQkJCV9fcnVuY21kIGxuIC1zZiAkYmFzZWxpYmZpbGUgJGRlc3RwYXRoLyRzb25hbWVsaW5rCisJCQlmaQorCQkJX19ydW5jbWQgbG4gLXNmICRiYXNlbGliZmlsZSAkZGVzdHBhdGgvJHNvbGluaworCQlmaQorCWZpCisKKwlfX3J1bmNtZCBjZCAiJG9sZGRpciIKK30KKworb2VfbWFjaGluc3RhbGwoKSB7CisJIyBQdXJwb3NlOiBJbnN0YWxsIG1hY2hpbmUgZGVwZW5kZW50IGZpbGVzLCBpZiBhdmFpbGFibGUKKwkjICAgICAgICAgIElmIG5vdCBhdmFpbGFibGUsIGNoZWNrIGlmIHRoZXJlIGlzIGEgZGVmYXVsdAorCSMgICAgICAgICAgSWYgbm8gZGVmYXVsdCwganVzdCB0b3VjaCB0aGUgZGVzdGluYXRpb24KKwkjIEV4YW1wbGU6CisJIyAgICAgICAgICAgICAgICAkMSAgJDIgICAkMyAgICAgICAgICQ0CisJIyBvZV9tYWNoaW5zdGFsbCAtbSAwNjQ0IGZzdGFiICR7RH0vZXRjL2ZzdGFiCisJIworCSMgVE9ETzogQ2hlY2sgYXJndW1lbnQgbnVtYmVyPworCSMKKwlmaWxlbmFtZT1gYmFzZW5hbWUgJDNgCisJZGlybmFtZT1gZGlybmFtZSAkM2AKKworCWZvciBvIGluIGBlY2hvICR7T1ZFUlJJREVTfSB8IHRyICc6JyAnICdgOyBkbworCQlpZiBbIC1lICRkaXJuYW1lLyRvLyRmaWxlbmFtZSBdOyB0aGVuCisJCQliYm5vdGUgJGRpcm5hbWUvJG8vJGZpbGVuYW1lIHByZXNlbnQsIGluc3RhbGxpbmcgdG8gJDQKKwkJCWluc3RhbGwgJDEgJDIgJGRpcm5hbWUvJG8vJGZpbGVuYW1lICQ0CisJCQlyZXR1cm4KKwkJZmkKKwlkb25lCisjCWJibm90ZSBvdmVycmlkZXMgc3BlY2lmaWMgZmlsZSBOT1QgcHJlc2VudCwgdHJ5aW5nIGRlZmF1bHQ9JDMuLi4KKwlpZiBbIC1lICQzIF07IHRoZW4KKwkJYmJub3RlICQzIHByZXNlbnQsIGluc3RhbGxpbmcgdG8gJDQKKwkJaW5zdGFsbCAkMSAkMiAkMyAkNAorCWVsc2UKKwkJYmJub3RlICQzIE5PVCBwcmVzZW50LCB0b3VjaGluZyBlbXB0eSAkNAorCQl0b3VjaCAkNAorCWZpCit9CisKK2NyZWF0ZV9jbWRsaW5lX3dyYXBwZXIgKCkgeworCSMgQ3JlYXRlIGEgd3JhcHBlciBzY3JpcHQgd2hlcmUgY29tbWFuZGxpbmUgb3B0aW9ucyBhcmUgbmVlZGVkCisJIworCSMgVGhlc2UgYXJlIHVzZWZ1bCB0byB3b3JrIGFyb3VuZCByZWxvY2F0aW9uIGlzc3VlcywgYnkgcGFzc2luZyBleHRyYSBvcHRpb25zIAorCSMgdG8gYSBwcm9ncmFtCisJIworCSMgVXNhZ2U6IGNyZWF0ZV9jbWRsaW5lX3dyYXBwZXIgRklMRU5BTUUgPGV4dHJhLW9wdGlvbnM+CisKKwljbWQ9JDEKKwlzaGlmdAorCisJZWNobyAiR2VuZXJhdGluZyB3cmFwcGVyIHNjcmlwdCBmb3IgJGNtZCIKKworCW12ICRjbWQgJGNtZC5yZWFsCisJY21kbmFtZT1gYmFzZW5hbWUgJGNtZGAKKwljYXQgPDxFTkQgPiRjbWQKKyMhL2Jpbi9iYXNoCityZWFscGF0aD1cYHJlYWRsaW5rIC1mbiBcJDBcYAorZXhlYyAtYSBcYGRpcm5hbWUgXCRyZWFscGF0aFxgLyRjbWRuYW1lIFxgZGlybmFtZSBcJHJlYWxwYXRoXGAvJGNtZG5hbWUucmVhbCAkQCAiXCRAIgorRU5ECisJY2htb2QgK3ggJGNtZAorfQorCitjcmVhdGVfd3JhcHBlciAoKSB7CisJIyBDcmVhdGUgYSB3cmFwcGVyIHNjcmlwdCB3aGVyZSBleHRyYSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG5lZWRlZAorCSMKKwkjIFRoZXNlIGFyZSB1c2VmdWwgdG8gd29yayBhcm91bmQgcmVsb2NhdGlvbiBpc3N1ZXMsIGJ5IHNldHRpbmcgZW52aXJvbm1lbnQKKwkjIHZhcmlhYmxlcyB3aGljaCBwb2ludCB0byBwYXRocyBpbiB0aGUgZmlsZXN5c3RlbS4KKwkjCisJIyBVc2FnZTogY3JlYXRlX3dyYXBwZXIgRklMRU5BTUUgW1tWQVI9VkFMVUVdLi5dCisKKwljbWQ9JDEKKwlzaGlmdAorCisJZWNobyAiR2VuZXJhdGluZyB3cmFwcGVyIHNjcmlwdCBmb3IgJGNtZCIKKworCW12ICRjbWQgJGNtZC5yZWFsCisJY21kbmFtZT1gYmFzZW5hbWUgJGNtZGAKKwljYXQgPDxFTkQgPiRjbWQKKyMhL2Jpbi9iYXNoCityZWFscGF0aD1cYHJlYWRsaW5rIC1mbiBcJDBcYAorZXhwb3J0ICRACitleGVjIC1hIFxgZGlybmFtZSBcJHJlYWxwYXRoXGAvJGNtZG5hbWUgXGBkaXJuYW1lIFwkcmVhbHBhdGhcYC8kY21kbmFtZS5yZWFsICJcJEAiCitFTkQKKwljaG1vZCAreCAkY21kCit9CisKKyMgQ29weSBmaWxlcy9kaXJlY3RvcmllcyBmcm9tICQxIHRvICQyIGJ1dCB1c2luZyBoYXJkbGlua3MKKyMgKHByZXNlcnZlIHN5bWxpbmtzKQoraGFyZGxpbmtkaXIgKCkgeworCWZyb209JDEKKwl0bz0kMgorCShjZCAkZnJvbTsgZmluZCAuIC1wcmludDAgfCBjcGlvIC0tbnVsbCAtcGRsdSAkdG8pCit9CisKKworZGVmIGNoZWNrX2FwcF9leGlzdHMoYXBwLCBkKToKKyAgICBhcHAgPSBkLmV4cGFuZChhcHApCisgICAgcGF0aCA9IGQuZ2V0VmFyKCdQQVRIJywgZCwgVHJ1ZSkKKyAgICByZXR1cm4gYm9vbChiYi51dGlscy53aGljaChwYXRoLCBhcHApKQorCitkZWYgZXhwbG9kZV9kZXBzKHMpOgorICAgIHJldHVybiBiYi51dGlscy5leHBsb2RlX2RlcHMocykKKworZGVmIGJhc2Vfc2V0X2ZpbGVzcGF0aChwYXRoLCBkKToKKyAgICBmaWxlc3BhdGggPSBbXQorICAgIGV4dHJhcGF0aHMgPSAoZC5nZXRWYXIoIkZJTEVTRVhUUkFQQVRIUyIsIFRydWUpIG9yICIiKQorICAgICMgUmVtb3ZlIGRlZmF1bHQgZmxhZyB3aGljaCB3YXMgdXNlZCBmb3IgY2hlY2tpbmcKKyAgICBleHRyYXBhdGhzID0gZXh0cmFwYXRocy5yZXBsYWNlKCJfX2RlZmF1bHQ6IiwgIiIpCisgICAgIyBEb24ndCBwcmVwZW5kIGVtcHR5IHN0cmluZ3MgdG8gdGhlIHBhdGggbGlzdAorICAgIGlmIGV4dHJhcGF0aHMgIT0gIiI6CisgICAgICAgIHBhdGggPSBleHRyYXBhdGhzLnNwbGl0KCI6IikgKyBwYXRoCisgICAgIyBUaGUgIjoiIGVuc3VyZXMgd2UgaGF2ZSBhbiAnZW1wdHknIG92ZXJyaWRlCisgICAgb3ZlcnJpZGVzID0gKCI6IiArIChkLmdldFZhcigiRklMRVNPVkVSUklERVMiLCBUcnVlKSBvciAiIikpLnNwbGl0KCI6IikKKyAgICBvdmVycmlkZXMucmV2ZXJzZSgpCisgICAgZm9yIG8gaW4gb3ZlcnJpZGVzOgorICAgICAgICBmb3IgcCBpbiBwYXRoOgorICAgICAgICAgICAgaWYgcCAhPSAiIjogCisgICAgICAgICAgICAgICAgZmlsZXNwYXRoLmFwcGVuZChvcy5wYXRoLmpvaW4ocCwgbykpCisgICAgcmV0dXJuICI6Ii5qb2luKGZpbGVzcGF0aCkKKworZGVmIGV4dGVuZF92YXJpYW50cyhkLCB2YXIsIGV4dGVuZCwgZGVsaW09JzonKToKKyAgICAiIiJSZXR1cm4gYSBzdHJpbmcgb2YgYWxsIGJiIGNsYXNzIGV4dGVuZCB2YXJpYW50cyBmb3IgdGhlIGdpdmVuIGV4dGVuZCIiIgorICAgIHZhcmlhbnRzID0gW10KKyAgICB3aG9sZSA9IGQuZ2V0VmFyKHZhciwgVHJ1ZSkgb3IgIiIKKyAgICBmb3IgZXh0IGluIHdob2xlLnNwbGl0KCk6CisgICAgICAgIGVleHQgPSBleHQuc3BsaXQoZGVsaW0pCisgICAgICAgIGlmIGxlbihlZXh0KSA+IDEgYW5kIGVleHRbMF0gPT0gZXh0ZW5kOgorICAgICAgICAgICAgdmFyaWFudHMuYXBwZW5kKGVleHRbMV0pCisgICAgcmV0dXJuICIgIi5qb2luKHZhcmlhbnRzKQorCitkZWYgbXVsdGlsaWJfcGtnX2V4dGVuZChkLCBwa2cpOgorICAgIHZhcmlhbnRzID0gKGQuZ2V0VmFyKCJNVUxUSUxJQl9WQVJJQU5UUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgaWYgbm90IHZhcmlhbnRzOgorICAgICAgICByZXR1cm4gcGtnCisgICAgcGtncyA9IHBrZworICAgIGZvciB2IGluIHZhcmlhbnRzOgorICAgICAgICBwa2dzID0gcGtncyArICIgIiArIHYgKyAiLSIgKyBwa2cKKyAgICByZXR1cm4gcGtncworCitkZWYgYWxsX211bHRpbGliX3R1bmVfdmFsdWVzKGQsIHZhciwgdW5pcXVlID0gVHJ1ZSwgbmVlZF9zcGxpdCA9IFRydWUsIGRlbGltID0gJyAnKToKKyAgICAiIiJSZXR1cm4gYSBzdHJpbmcgb2YgYWxsICR7dmFyfSBpbiBhbGwgbXVsdGlsaWIgdHVuZSBjb25maWd1cmF0aW9uIiIiCisgICAgdmFsdWVzID0gW10KKyAgICB2YWx1ZSA9IGQuZ2V0VmFyKHZhciwgVHJ1ZSkgb3IgIiIKKyAgICBpZiB2YWx1ZSAhPSAiIjoKKyAgICAgICAgaWYgbmVlZF9zcGxpdDoKKyAgICAgICAgICAgIGZvciBpdGVtIGluIHZhbHVlLnNwbGl0KGRlbGltKToKKyAgICAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKGl0ZW0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKHZhbHVlKQorICAgIHZhcmlhbnRzID0gZC5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSkgb3IgIiIKKyAgICBmb3IgaXRlbSBpbiB2YXJpYW50cy5zcGxpdCgpOgorICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgb3ZlcnJpZGVzID0gbG9jYWxkYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgIjp2aXJ0Y2xhc3MtbXVsdGlsaWItIiArIGl0ZW0KKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgb3ZlcnJpZGVzKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJNTFBSRUZJWCIsIGl0ZW0gKyAiLSIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICB2YWx1ZSA9IGxvY2FsZGF0YS5nZXRWYXIodmFyLCBUcnVlKSBvciAiIgorICAgICAgICBpZiB2YWx1ZSAhPSAiIjoKKyAgICAgICAgICAgIGlmIG5lZWRfc3BsaXQ6CisgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gdmFsdWUuc3BsaXQoZGVsaW0pOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKGl0ZW0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQodmFsdWUpCisgICAgaWYgdW5pcXVlOgorICAgICAgICAjd2UgZG8gdGhpcyB0byBrZWVwIG9yZGVyIGFzIG11Y2ggYXMgcG9zc2libGUKKyAgICAgICAgcmV0ID0gW10KKyAgICAgICAgZm9yIHZhbHVlIGluIHZhbHVlczoKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZSBpbiByZXQ6CisgICAgICAgICAgICAgICAgcmV0LmFwcGVuZCh2YWx1ZSkKKyAgICBlbHNlOgorICAgICAgICByZXQgPSB2YWx1ZXMKKyAgICByZXR1cm4gIiAiLmpvaW4ocmV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdmFsYS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdmFsYS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZjY2NGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy92YWxhLmJiY2xhc3MKQEAgLTAsMCArMSwxOCBAQAorIyBFdmVyeW9uZSBuZWVkcyB2YWxhLW5hdGl2ZSBhbmQgdGFyZ2V0cyBuZWVkIHZhbGEsIHRvbywKKyMgYmVjYXVzZSB0aGF0IGlzIHdoZXJlIHRhcmdldCBidWlsZHMgbG9vayBmb3IgLnZhcGkgZmlsZXMuCisjCitWQUxBREVQRU5EUyA9ICIiCitWQUxBREVQRU5EU19jbGFzcy10YXJnZXQgPSAidmFsYSIKK0RFUEVORFNfYXBwZW5kID0gIiB2YWxhLW5hdGl2ZSAke1ZBTEFERVBFTkRTfSIKKworIyBPdXIgcGF0Y2hlZCB2ZXJzaW9uIG9mIFZhbGEgbG9va3MgaW4gU1RBR0lOR19EQVRBRElSIGZvciAudmFwaSBmaWxlcworZXhwb3J0IFNUQUdJTkdfREFUQURJUgorIyBVcHN0cmVhbSBWYWxhID49IDAuMTEgbG9va3MgaW4gWERHX0RBVEFfRElSUyBmb3IgLnZhcGkgZmlsZXMKK2V4cG9ydCBYREdfREFUQV9ESVJTID0gIiR7U1RBR0lOR19EQVRBRElSfSIKKworIyBQYWNrYWdlIGFkZGl0aW9uYWwgZmlsZXMKK0ZJTEVTXyR7UE59LWRldiArPSAiXAorICAgICR7ZGF0YWRpcn0vdmFsYS92YXBpLyoudmFwaSBcCisgICAgJHtkYXRhZGlyfS92YWxhL3ZhcGkvKi5kZXBzIFwKKyAgICAke2RhdGFkaXJ9L2dpci0xLjAgXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvd2FmLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy93YWYuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTIyMWU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvd2FmLmJiY2xhc3MKQEAgLTAsMCArMSwxMyBAQAord2FmX2RvX2NvbmZpZ3VyZSgpIHsKKwkke1N9L3dhZiBjb25maWd1cmUgLS1wcmVmaXg9JHtwcmVmaXh9ICR7RVhUUkFfT0VDT05GfQorfQorCit3YWZfZG9fY29tcGlsZSgpICB7CisJJHtTfS93YWYgYnVpbGQgJHtQQVJBTExFTF9NQUtFfQorfQorCit3YWZfZG9faW5zdGFsbCgpIHsKKwkke1N9L3dhZiBpbnN0YWxsIC0tZGVzdGRpcj0ke0R9Cit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29uZmlndXJlIGRvX2NvbXBpbGUgZG9faW5zdGFsbApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvYWJpX3ZlcnNpb24uY29uZiBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2FiaV92ZXJzaW9uLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgyOTY4NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2FiaV92ZXJzaW9uLmNvbmYKQEAgLTAsMCArMSw3IEBACisjCisjIE9FTEFZT1VUX0FCSSBhbGxvd3MgdXMgdG8gbm90aWZ5IHVzZXJzIHdoZW4gdGhlIGZvcm1hdCBvZiBUTVBESVIgY2hhbmdlcyBpbiAKKyMgYW4gaW5jb21wYXRpYmxlIHdheS4gU3VjaCBjaGFuZ2VzIHNob3VsZCB1c3VhbGx5IGJlIGRldGFpbGVkIGluIHRoZSBjb21taXQKKyMgdGhhdCBicmVha3MgdGhlIGZvcm1hdCBhbmQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgZGlzY3Vzc2VkIG9uIHRoZSBtYWlsaW5nIGxpc3QgCisjIHdpdGggZ2VuZXJhbCBhZ3JlZW1lbnQgZnJvbSB0aGUgY29yZSB0ZWFtLgorIworT0VMQVlPVVRfQUJJID0gIjExIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvYml0YmFrZS5jb25mIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvYml0YmFrZS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YTY2ZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9iaXRiYWtlLmNvbmYKQEAgLTAsMCArMSw4MTIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTdGFuZGFyZCB0YXJnZXQgZmlsZXN5c3RlbSBwYXRocy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBJZiBjaGFuZ2luZyB0aGVzZSB2YWx1ZXMsIGJld2FyZSB0aGF0IG5hdGl2ZS9jcm9zcy9uYXRpdmVzZGsgYmJjbGFzcworIyBmaWxlcyBtYXkgYWxzbyBuZWVkIGNoYW5nZXMgdG8ga2VlcCBpbiBzeW5jLgorIworCisjIFVzZWQgYnkgbXVsdGlsaWIgY29kZSB0byBjaGFuZ2UgdGhlIGxpYnJhcnkgcGF0aHMKK2Jhc2VsaWIgPSAiJHtCQVNFTElCfSIKK2Jhc2VsaWJbdmFyZGVwdmFsdWVdID0gIiR7YmFzZWxpYn0iCitCQVNFTElCID0gImxpYiIKK0JBU0VMSUJfcG93ZXJwYzY0ID0gImxpYjY0IgorCisjIFBhdGggcHJlZml4ZXMKK2V4cG9ydCBiYXNlX3ByZWZpeCA9ICIiCitleHBvcnQgcHJlZml4ID0gIi91c3IiCitleHBvcnQgZXhlY19wcmVmaXggPSAiL3VzciIKKworIyBCYXNlIHBhdGhzCitleHBvcnQgYmFzZV9iaW5kaXIgPSAiJHtiYXNlX3ByZWZpeH0vYmluIgorZXhwb3J0IGJhc2Vfc2JpbmRpciA9ICIke2Jhc2VfcHJlZml4fS9zYmluIgorZXhwb3J0IGJhc2VfbGliZGlyID0gIiR7YmFzZV9wcmVmaXh9LyR7YmFzZWxpYn0iCitleHBvcnQgbm9uYXJjaF9iYXNlX2xpYmRpciA9ICIke2Jhc2VfcHJlZml4fS9saWIiCisKKyMgQXJjaGl0ZWN0dXJlIGluZGVwZW5kZW50IHBhdGhzCitleHBvcnQgc3lzY29uZmRpciA9ICIke2Jhc2VfcHJlZml4fS9ldGMiCitleHBvcnQgc2VydmljZWRpciA9ICIke2Jhc2VfcHJlZml4fS9zcnYiCitleHBvcnQgc2hhcmVkc3RhdGVkaXIgPSAiJHtiYXNlX3ByZWZpeH0vY29tIgorZXhwb3J0IGxvY2Fsc3RhdGVkaXIgPSAiJHtiYXNlX3ByZWZpeH0vdmFyIgorZXhwb3J0IGRhdGFkaXIgPSAiJHtwcmVmaXh9L3NoYXJlIgorZXhwb3J0IGluZm9kaXIgPSAiJHtkYXRhZGlyfS9pbmZvIgorZXhwb3J0IG1hbmRpciA9ICIke2RhdGFkaXJ9L21hbiIKK2V4cG9ydCBkb2NkaXIgPSAiJHtkYXRhZGlyfS9kb2MiCitleHBvcnQgc3lzdGVtZF91bml0ZGlyID0gIiR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vc3lzdGVtZCIKK2V4cG9ydCBzeXN0ZW1kX3N5c3RlbV91bml0ZGlyID0gIiR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vc3lzdGVtZC9zeXN0ZW0iCitleHBvcnQgbm9uYXJjaF9saWJkaXIgPSAiJHtleGVjX3ByZWZpeH0vbGliIgorZXhwb3J0IHN5c3RlbWRfdXNlcl91bml0ZGlyID0gIiR7bm9uYXJjaF9saWJkaXJ9L3N5c3RlbWQvdXNlciIKKworIyBBcmNoaXRlY3R1cmUgZGVwZW5kZW50IHBhdGhzCitleHBvcnQgYmluZGlyID0gIiR7ZXhlY19wcmVmaXh9L2JpbiIKK2V4cG9ydCBzYmluZGlyID0gIiR7ZXhlY19wcmVmaXh9L3NiaW4iCitleHBvcnQgbGliZGlyID0gIiR7ZXhlY19wcmVmaXh9LyR7YmFzZWxpYn0iCitleHBvcnQgbGliZXhlY2RpciA9ICIke2xpYmRpcn0vJHtCUE59IgorZXhwb3J0IGluY2x1ZGVkaXIgPSAiJHtleGVjX3ByZWZpeH0vaW5jbHVkZSIKK2V4cG9ydCBvbGRpbmNsdWRlZGlyID0gIiR7ZXhlY19wcmVmaXh9L2luY2x1ZGUiCitsb2NhbGVkaXIgPSAiJHtsaWJkaXJ9L2xvY2FsZSIKKworIyBMaW5rYWdlIGJldHdlZW4gbmF0aXZlL2Nyb3NzL25hdGl2ZXNkayBsYXlvdXRzCitiYXNlX2JpbmRpcl9uYXRpdmUgPSAiL2JpbiIKK2Jhc2Vfc2JpbmRpcl9uYXRpdmUgPSAiL3NiaW4iCitzeXNjb25mZGlyX25hdGl2ZSA9ICIvZXRjIgorcHJlZml4X25hdGl2ZSA9ICIvdXNyIgorYmluZGlyX25hdGl2ZSA9ICIke3ByZWZpeF9uYXRpdmV9L2JpbiIKK3NiaW5kaXJfbmF0aXZlID0gIiR7cHJlZml4X25hdGl2ZX0vc2JpbiIKK2luY2x1ZGVkaXJfbmF0aXZlID0gIiR7cHJlZml4X25hdGl2ZX0vaW5jbHVkZSIKK2xpYmRpcl9uYXRpdmUgPSAiJHtwcmVmaXhfbmF0aXZlfS9saWIiCitsaWJleGVjZGlyX25hdGl2ZSA9ICIke2xpYmRpcl9uYXRpdmV9LyR7QlBOfSIKK2Jhc2VfbGliZGlyX25hdGl2ZSA9ICIvbGliIgorZGF0YWRpcl9uYXRpdmUgPSAiJHtwcmVmaXhfbmF0aXZlfS9zaGFyZSIKK2JpbmRpcl9jcm9zcyA9ICIvYmluIgorYmluZGlyX2Nyb3Nzc2NyaXB0cyA9ICIke2JpbmRpcn0vY3Jvc3NzY3JpcHRzIgorcHJlZml4X25hdGl2ZXNkayA9ICIvdXNyIgorYmluZGlyX25hdGl2ZXNkayA9ICIke3ByZWZpeF9uYXRpdmVzZGt9L2JpbiIKK2luY2x1ZGVkaXJfbmF0aXZlc2RrID0gIiR7cHJlZml4X25hdGl2ZXNka30vaW5jbHVkZSIKK2xpYmRpcl9uYXRpdmVzZGsgPSAiJHtwcmVmaXhfbmF0aXZlc2RrfS9saWIiCitiYXNlX2xpYmRpcl9uYXRpdmVzZGsgPSAiL2xpYiIKK2xvY2Fsc3RhdGVkaXJfbmF0aXZlc2RrID0gIi92YXIiCisKKyMKKyMgQ3Jvc3MgcmVjaXBlcyBuZWVkIHRvIGtub3cgYWJvdXQgdGhlIHRhcmdldCBsYXlvdXQKKyMgOj0gaXMgdXNlZCBjYXJlZnVsbHkgaGVyZQorIwordGFyZ2V0X2RhdGFkaXIgOj0gIiR7ZGF0YWRpcn0iCisjIFVzZWQgdG8gZmluZCBlbnYvcGVybC9weXRob24KK1VTUkJJTlBBVEggPSAiJHtiaW5kaXJ9IgorVVNSQklOUEFUSF9jbGFzcy1uYXRpdmUgPSAiL3Vzci9iaW4iCitVU1JCSU5QQVRIX2NsYXNzLW5hdGl2ZXNkayA9ICIvdXNyL2JpbiIKKworIyBSb290IGhvbWUgZGlyZWN0b3J5CitST09UX0hPTUUgPz89ICIvaG9tZS9yb290IgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBidWlsZCB2YXJpYWJsZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBJbW1lZGlhdGUgZXhwYW5zaW9uIHNpbmNlIHRoZXJlIGlzIG5vIHBvaW50IGluIHJlYXBlYXRlZGx5IGNhbGxpbmcKKyMgb3MudW5hbWUoKSB0aHJvdWdob3V0IHBhcnNpbmcKK0JVSUxEX0FSQ0ggOj0gIiR7QG9zLnVuYW1lKClbNF19IgorQlVJTERfT1MgOj0gIiR7QG9zLnVuYW1lKClbMF0ubG93ZXIoKX0iCitCVUlMRF9WRU5ET1IgPSAiIgorQlVJTERfU1lTID0gIiR7QlVJTERfQVJDSH0ke0JVSUxEX1ZFTkRPUn0tJHtCVUlMRF9PU30iCitCVUlMRF9QUkVGSVggPSAiIgorQlVJTERfQ0NfQVJDSCA9ICIiCitCVUlMRF9MRF9BUkNIID0gIiIKK0JVSUxEX0FTX0FSQ0ggPSAiIgorQlVJTERfRVhFRVhUID0gIiIKKworSE9TVF9BUkNIID0gIiR7VEFSR0VUX0FSQ0h9IgorSE9TVF9PUyA9ICIke1RBUkdFVF9PU30iCitIT1NUX1ZFTkRPUiA9ICIke1RBUkdFVF9WRU5ET1J9IgorSE9TVF9TWVMgPSAiJHtIT1NUX0FSQ0h9JHtIT1NUX1ZFTkRPUn0tJHtIT1NUX09TfSIKK0hPU1RfUFJFRklYID0gIiR7VEFSR0VUX1BSRUZJWH0iCitIT1NUX0NDX0FSQ0ggPSAiJHtUQVJHRVRfQ0NfQVJDSH0iCitIT1NUX0xEX0FSQ0ggPSAiJHtUQVJHRVRfTERfQVJDSH0iCitIT1NUX0FTX0FSQ0ggPSAiJHtUQVJHRVRfQVNfQVJDSH0iCitIT1NUX0VYRUVYVCA9ICIiCisKK1RVTkVfQVJDSCA/Pz0gIklOVkFMSUQiCitUVU5FX0NDQVJHUyA/Pz0gIiIKK1RVTkVfQ0NBUkdTW3ZhcmRlcHZhbHVlXSA9ICIke1RVTkVfQ0NBUkdTfSIKK1RVTkVfTERBUkdTID8/PSAiIgorVFVORV9BU0FSR1MgPz89ICIiCitUVU5FX0ZFQVRVUkVTID8/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtJHtERUZBVUxUVFVORX19IgorTElCQ0VYVEVOU0lPTiA/Pz0gIiIKK0FCSUVYVEVOU0lPTiA/Pz0gIiIKK1VTRV9OTFMgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtbG9jYWxlLWNvZGUnLCAneWVzJywgJ25vJywgZCl9IgorU0RLVVNFX05MUyA/Pz0gInllcyIKKworVEFSR0VUX0FSQ0ggPSAiJHtUVU5FX0FSQ0h9IgorVEFSR0VUX09TID0gImxpbnV4JHtMSUJDRVhURU5TSU9OfSR7QUJJRVhURU5TSU9OfSIKK1RBUkdFVF9WRU5ET1IgPSAiLW9lIgorVEFSR0VUX1NZUyA9ICIke1RBUkdFVF9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0ke0BbJy0nICsgZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpLCAnJ11bZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpID09ICgnJyBvciAnY3VzdG9tJyldfSIKK1RBUkdFVF9QUkVGSVggPSAiJHtUQVJHRVRfU1lTfS0iCitUQVJHRVRfQ0NfQVJDSCA9ICIke1RVTkVfQ0NBUkdTfSIKK1RBUkdFVF9MRF9BUkNIID0gIiR7VFVORV9MREFSR1N9IgorVEFSR0VUX0FTX0FSQ0ggPSAiJHtUVU5FX0FTQVJHU30iCisKK1NES19BUkNIID0gIiR7QlVJTERfQVJDSH0iCitTREtfT1MgPSAiJHtCVUlMRF9PU30iCitTREtfVkVORE9SID0gIi1vZXNkayIKK1NES19TWVMgPSAiJHtTREtfQVJDSH0ke1NES19WRU5ET1J9JHtAWyctJyArIGQuZ2V0VmFyKCdTREtfT1MnLCBUcnVlKSwgJyddW2QuZ2V0VmFyKCdTREtfT1MnLCBUcnVlKSA9PSAoJycgb3IgJ2N1c3RvbScpXX0iCitTREtfUFJFRklYID0gIiR7U0RLX1NZU30tIgorU0RLX0NDX0FSQ0ggPSAiJHtCVUlMRF9DQ19BUkNIfSIKK1NES1BLR1NVRkZJWCA9ICJuYXRpdmVzZGsiCitTREtfUEFDS0FHRV9BUkNIUyA9ICJhbGwgYW55IG5vYXJjaCAke1NES19BUkNIfS0ke1NES1BLR1NVRkZJWH0iCitTREtfTERfQVJDSCA9ICIke0JVSUxEX0xEX0FSQ0h9IgorU0RLX0FTX0FSQ0ggPSAiJHtCVUlMRF9BU19BUkNIfSIKKworVFVORV9QS0dBUkNIID8/PSAiIgorUEFDS0FHRV9BUkNIID8/PSAiJHtUVU5FX1BLR0FSQ0h9IgorTUFDSElORV9BUkNIID0gIiR7QFtkLmdldFZhcignVFVORV9QS0dBUkNIJywgVHJ1ZSksIGQuZ2V0VmFyKCdNQUNISU5FJywgVHJ1ZSldW2Jvb2woZC5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKSldLnJlcGxhY2UoJy0nLCAnXycpfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFMgPz89ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS0ke0RFRkFVTFRUVU5FfX0iCitQQUNLQUdFX0FSQ0hTID0gImFsbCBhbnkgbm9hcmNoICR7UEFDS0FHRV9FWFRSQV9BUkNIU30gJHtNQUNISU5FX0FSQ0h9IgorIyBNQUNISU5FX0FSQ0ggc2hvdWxkbid0IGJlIGluY2x1ZGVkIGhlcmUgYXMgYSB2YXJpYWJsZSBkZXBlbmRlbmN5CisjIHNpbmNlIG1hY2hpbmUgc3BlY2lmaWMgcGFja2FnZXMgYXJlIGhhbmRsZWQgdXNpbmcgbXVsdGltYWNoaW5lCitQQUNLQUdFX0FSQ0hTW3ZhcmRlcHNleGNsdWRlXSA9ICJNQUNISU5FX0FSQ0giCisKK01VTFRJTUFDSF9UQVJHRVRfU1lTID0gIiR7UEFDS0FHRV9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9IgorTVVMVElNQUNIX0hPU1RfU1lTID0gIiR7UEFDS0FHRV9BUkNIfSR7SE9TVF9WRU5ET1J9LSR7SE9TVF9PU30iCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEYXRlL3RpbWUgdmFyaWFibGVzLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RBVEUgOj0gIiR7QHRpbWUuc3RyZnRpbWUoJyVZJW0lZCcsdGltZS5nbXRpbWUoKSl9IgorVElNRSA6PSAiJHtAdGltZS5zdHJmdGltZSgnJUglTSVTJyx0aW1lLmdtdGltZSgpKX0iCitEQVRFVElNRSA9ICIke0RBVEV9JHtUSU1FfSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE9wZW5lbWJlZGRlZCBTb2Z0d2FyZSBQcmVyZXF1aXNpdGVzLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgcHl0aG9uLW5hdGl2ZSBzaG91bGQgYmUgaGVyZSBidXQgcHl0aG9uIHJlbGllcyBvbiBidWlsZGluZworIyBpdHMgb3duIGluIHN0YWdpbmcKK0FTU1VNRV9QUk9WSURFRCA9ICJcCisgICAgYnppcDItbmF0aXZlIFwKKyAgICBjaHJwYXRoLW5hdGl2ZSBcCisgICAgZ2l0LW5hdGl2ZSBcCisgICAgZ3JlcC1uYXRpdmUgXAorICAgIGRpZmZzdGF0LW5hdGl2ZSBcCisgICAgcGF0Y2gtbmF0aXZlIFwKKyAgICBwZXJsLW5hdGl2ZS1ydW50aW1lIFwKKyAgICBweXRob24tbmF0aXZlLXJ1bnRpbWUgXAorICAgIHRhci1uYXRpdmUgXAorICAgIHZpcnR1YWwvbGliaW50bC1uYXRpdmUgXAorICAgIHRleGluZm8tbmF0aXZlIFwKKyAgICBiYXNoLW5hdGl2ZSBcCisgICAgc2VkLW5hdGl2ZSBcCisgICAgIgorIyBnemlwLW5hdGl2ZSBzaG91bGQgYmUgbGlzdGVkIGFib3ZlPworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUGFja2FnZSBkZWZhdWx0IHZhcmlhYmxlcy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitQTiA9ICIke0BiYi5wYXJzZS5CQkhhbmRsZXIudmFyc19mcm9tX2ZpbGUoZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSksZClbMF0gb3IgJ2RlZmF1bHRwa2duYW1lJ30iCitQViA9ICIke0BiYi5wYXJzZS5CQkhhbmRsZXIudmFyc19mcm9tX2ZpbGUoZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSksZClbMV0gb3IgJzEuMCd9IgorUFIgPSAiJHtAYmIucGFyc2UuQkJIYW5kbGVyLnZhcnNfZnJvbV9maWxlKGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpLGQpWzJdIG9yICdyMCd9IgorUEYgPSAiJHtQTn0tJHtFWFRFTkRQRX0ke1BWfS0ke1BSfSIKK0VYVEVORFBFID0gIiR7QFsnJywnJHtQRVx4N2RfJ11baW50KGQuZ2V0VmFyKCdQRScsIFRydWUpIG9yIDApID4gMF19IgorUCA9ICIke1BOfS0ke1BWfSIKKworRVhURU5EUFJBVVRPID0gIiR7QFsnLiR7UFJBVVRPXHg3ZCcsJyddW2QuZ2V0VmFyKCdQUkFVVE8nLCBUcnVlKSBpcyBOb25lXX0iCitQUkFVVE9JTlggPSAiJHtQRn0iCisKK1BLR1YgPz0gIiR7UFZ9IgorUEtHUiA/PSAiJHtQUn0ke0VYVEVORFBSQVVUT30iCitQS0dFID89ICIke0BbJycsJyR7UEVceDdkJ11baW50KGQuZ2V0VmFyKCdQRScsIFRydWUpIG9yIDApID4gMF19IgorRVhURU5EUEtHRVZFUiA9ICIke0BbJycsJyR7UEtHRVx4N2Q6J11bZC5nZXRWYXIoJ1BLR0UnLCBUcnVlKS5zdHJpcCgpICE9ICcnXX0iCitFWFRFTkRQS0dWID89ICIke0VYVEVORFBLR0VWRVJ9JHtQS0dWfS0ke1BLR1J9IgorCisjIEJhc2UgcGFja2FnZSBuYW1lCisjIEF1dG9tYXRpY2FsbHkgZGVyaXZlcyAiZm9vIiBmcm9tICJmb28tbmF0aXZlIiwgImZvby1jcm9zcyIgb3IgImZvby1pbml0aWFsIgorIyBvdGhlcndpc2UgaXQgaXMgdGhlIHNhbWUgYXMgUE4gYW5kIFAKK1NQRUNJQUxfUEtHU1VGRklYID0gIi1uYXRpdmUgLWNyb3NzIC1pbml0aWFsIC1pbnRlcm1lZGlhdGUgLWNyb3Nzc2RrIC1jcm9zcy1jYW5hZGlhbiIKK0JQTiA9ICIke0BiYXNlX3BydW5lX3N1ZmZpeChkLmdldFZhcignUE4nLCBUcnVlKSwgZC5nZXRWYXIoJ1NQRUNJQUxfUEtHU1VGRklYJywgVHJ1ZSkuc3BsaXQoKSwgZCl9IgorQlAgPSAiJHtCUE59LSR7UFZ9IgorCisjIFBhY2thZ2UgaW5mby4KKworU0VDVElPTiA9ICJiYXNlIgorUFJJT1JJVFkgPSAib3B0aW9uYWwiCitTVU1NQVJZID89ICIke1BOfSB2ZXJzaW9uICR7UFZ9LSR7UFJ9IgorREVTQ1JJUFRJT04gPz0gIiR7U1VNTUFSWX0uIgorCisjIFRoZSBmb2xsb3dpbmcgdHdvIGFyZSBjb21tZW50ZWQgb3V0IGJlY2F1c2UgdGhleSByZXN1bHQgaW4gYSByZWN1cnNpdmUKKyMgZGVmaW5pdGlvbiBvZiB0aGUgdmFyaWFibGUgaW4gc29tZSBjb3JuZXIgY2FzZXMuICBUaGVzZSBhcmUgbGVmdCBpbgorIyB0byBpbGx1c3RyYXRlIHRoZSBpbnRlbmRlZCBiZWhhdmlvci4KKyNTVU1NQVJZXyR7UE59ID89ICIke1NVTU1BUll9IgorI0RFU0NSSVBUSU9OXyR7UE59ID89ICIke0RFU0NSSVBUSU9OfSIKKworU1VNTUFSWV8ke1BOfS1kYmcgPz0gIiR7U1VNTUFSWX0gLSBEZWJ1Z2dpbmcgZmlsZXMiCitERVNDUklQVElPTl8ke1BOfS1kYmcgPz0gIiR7REVTQ1JJUFRJT059ICBcCitUaGlzIHBhY2thZ2UgY29udGFpbnMgRUxGIHN5bWJvbHMgYW5kIHJlbGF0ZWQgc291cmNlcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiIKKworU1VNTUFSWV8ke1BOfS1kZXYgPz0gIiR7U1VNTUFSWX0gLSBEZXZlbG9wbWVudCBmaWxlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWRldiA/PSAiJHtERVNDUklQVElPTn0gIFwKK1RoaXMgcGFja2FnZSBjb250YWlucyBzeW1ib2xpYyBsaW5rcywgaGVhZGVyIGZpbGVzLCBhbmQgXAorcmVsYXRlZCBpdGVtcyBuZWNlc3NhcnkgZm9yIHNvZnR3YXJlIGRldmVsb3BtZW50LiIKKworU1VNTUFSWV8ke1BOfS1zdGF0aWNkZXYgPz0gIiR7U1VNTUFSWX0gLSBEZXZlbG9wbWVudCBmaWxlcyAoU3RhdGljIExpYnJhcmllcykiCitERVNDUklQVElPTl8ke1BOfS1zdGF0aWNkZXY/PSAiJHtERVNDUklQVElPTn0gIFwKK1RoaXMgcGFja2FnZSBjb250YWlucyBzdGF0aWMgbGlicmFyaWVzIGZvciBzb2Z0d2FyZSBkZXZlbG9wbWVudC4iCisKK1NVTU1BUllfJHtQTn0tZG9jID89ICIke1NVTU1BUll9IC0gRG9jdW1lbnRhdGlvbiBmaWxlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWRvYyA/PSAiJHtERVNDUklQVElPTn0gIFwKK1RoaXMgcGFja2FnZSBjb250YWlucyBkb2N1bWVudGF0aW9uLiIKKworTElDRU5TRSA9ICJJTlZBTElEIgorTUFJTlRBSU5FUiA9ICJPRS1Db3JlIERldmVsb3BlcnMgPG9wZW5lbWJlZGRlZC1jb3JlQGxpc3RzLm9wZW5lbWJlZGRlZC5vcmc+IgorSE9NRVBBR0UgPSAiIgorCisjIFBhY2thZ2UgZGVwZW5kZW5jaWVzIGFuZCBwcm92aWRlcy4KKworIyBFbnN1cmUgdGhhdCAtZGV2IHBhY2thZ2VzIHJlY29tbWVuZCB0aGUgY29ycmVzcG9uZGluZyAtZGV2IHBhY2thZ2VzIG9mIHRoZWlyCisjIGRlcHMsIGFuZCB0aGUgc2FtZSBmb3IgLWRiZy4KK0RFUENIQUlOX1BSRSAgPSAiIgorREVQQ0hBSU5fUE9TVCA9ICItZGV2IC1kYmciCisKK0RFUEVORFMgPSAiIgorUkRFUEVORFMgPSAiIgorUFJPVklERVMgPSAiIgorUFJPVklERVNfcHJlcGVuZCA9ICIke1BOfSAiCitSUFJPVklERVMgPSAiIgorCitNVUxUSV9QUk9WSURFUl9XSElURUxJU1QgPSAidmlydHVhbC9saWJpbnRsIHZpcnR1YWwvbGliaW50bC1uYXRpdmUgdmlydHVhbC9uYXRpdmVzZGstbGliaW50bCB2aXJ0dWFsL3hzZXJ2ZXIgdmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzLW5hdGl2ZSB2aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMiCisKK1NPTElCUyA9ICIuc28uKiIKK1NPTElCU19kYXJ3aW4gPSAiLmR5bGliIgorCitTT0xJQlNERVYgPSAiLnNvIgorIyBEdWUgdG8gdGhlIG9yZGVyaW5nIG9mIFBBQ0tBR0VTIGFuZCB0aGUgbmFtaW5nIG9mIHRoZSBkZXYgc3ltbGlua3Mgb24gZGFyd2luLAorIyB3ZSBjYW4ndCBtYWtlIHRoZSBzeW1saW5rcyBlbmQgdXAgaW4gdGhlIC1kZXYgcGFja2FnZXMgZWFzaWx5IGF0IHRoaXMgcG9pbnQuIFRoaXMgaGFjaworIyBhdCBsZWFzdCBtZWFucyBidWlsZHMgYXJlbid0IGNvbXBsZXRlbHkgYnJva2VuIGFuZCBzeW1saW5rcyBkb24ndCB0YWtlIHVwIG11Y2ggc3BhY2UuCitTT0xJQlNERVZfZGFyd2luID0gIi5keWxpYmJyb2tlbiIKKworUEFDS0FHRV9CRUZPUkVfUE4gPz0gIiIKK1BBQ0tBR0VTID0gIiR7UE59LWRiZyAke1BOfS1zdGF0aWNkZXYgJHtQTn0tZGV2ICR7UE59LWRvYyAke1BOfS1sb2NhbGUgJHtQQUNLQUdFX0JFRk9SRV9QTn0gJHtQTn0iCitQQUNLQUdFU19EWU5BTUlDID0gIl4ke1BOfS1sb2NhbGUtLioiCitGSUxFUyA9ICIiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS8qICR7c2JpbmRpcn0vKiAke2xpYmV4ZWNkaXJ9LyogJHtsaWJkaXJ9L2xpYioke1NPTElCU30gXAorICAgICAgICAgICAgJHtzeXNjb25mZGlyfSAke3NoYXJlZHN0YXRlZGlyfSAke2xvY2Fsc3RhdGVkaXJ9IFwKKyAgICAgICAgICAgICR7YmFzZV9iaW5kaXJ9LyogJHtiYXNlX3NiaW5kaXJ9LyogXAorICAgICAgICAgICAgJHtiYXNlX2xpYmRpcn0vKiR7U09MSUJTfSBcCisgICAgICAgICAgICAke2Jhc2VfcHJlZml4fS9saWIvdWRldi9ydWxlcy5kICR7cHJlZml4fS9saWIvdWRldi9ydWxlcy5kIFwKKyAgICAgICAgICAgICR7ZGF0YWRpcn0vJHtCUE59ICR7bGliZGlyfS8ke0JQTn0vKiBcCisgICAgICAgICAgICAke2RhdGFkaXJ9L3BpeG1hcHMgJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMgXAorICAgICAgICAgICAgJHtkYXRhZGlyfS9pZGwgJHtkYXRhZGlyfS9vbWYgJHtkYXRhZGlyfS9zb3VuZHMgXAorICAgICAgICAgICAgJHtsaWJkaXJ9L2Jvbm9iby9zZXJ2ZXJzIgorCitGSUxFU18ke1BOfS1iaW4gPSAiJHtiaW5kaXJ9LyogJHtzYmluZGlyfS8qIgorCitGSUxFU18ke1BOfS1kb2MgPSAiJHtkb2NkaXJ9ICR7bWFuZGlyfSAke2luZm9kaXJ9ICR7ZGF0YWRpcn0vZ3RrLWRvYyBcCisgICAgICAgICAgICAke2RhdGFkaXJ9L2dub21lL2hlbHAiCitTRUNUSU9OXyR7UE59LWRvYyA9ICJkb2MiCisKK0ZJTEVTX1NPTElCU0RFViA/PSAiJHtiYXNlX2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSAke2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSIKK0ZJTEVTXyR7UE59LWRldiA9ICIke2luY2x1ZGVkaXJ9ICR7RklMRVNfU09MSUJTREVWfSAke2xpYmRpcn0vKi5sYSBcCisgICAgICAgICAgICAgICAgJHtsaWJkaXJ9LyoubyAke2xpYmRpcn0vcGtnY29uZmlnICR7ZGF0YWRpcn0vcGtnY29uZmlnIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2FjbG9jYWwgJHtiYXNlX2xpYmRpcn0vKi5vIFwKKyAgICAgICAgICAgICAgICAke2xpYmRpcn0vJHtCUE59LyoubGEgJHtiYXNlX2xpYmRpcn0vKi5sYSIKK1NFQ1RJT05fJHtQTn0tZGV2ID0gImRldmVsIgorQUxMT1dfRU1QVFlfJHtQTn0tZGV2ID0gIjEiCitSREVQRU5EU18ke1BOfS1kZXYgPSAiJHtQTn0gKD0gJHtFWFRFTkRQS0dWfSkiCisKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiA9ICIke2xpYmRpcn0vKi5hICR7YmFzZV9saWJkaXJ9LyouYSAke2xpYmRpcn0vJHtCUE59LyouYSIKK1NFQ1RJT05fJHtQTn0tc3RhdGljZGV2ID0gImRldmVsIgorUkRFUEVORFNfJHtQTn0tc3RhdGljZGV2ID0gIiR7UE59LWRldiAoPSAke0VYVEVORFBLR1Z9KSIKKworRE9UREVCVUctZGJnID0gIiR7YmluZGlyfS8uZGVidWcgJHtzYmluZGlyfS8uZGVidWcgJHtsaWJleGVjZGlyfS8uZGVidWcgJHtsaWJkaXJ9Ly5kZWJ1ZyBcCisgICAgICAgICAgICAke2Jhc2VfYmluZGlyfS8uZGVidWcgJHtiYXNlX3NiaW5kaXJ9Ly5kZWJ1ZyAke2Jhc2VfbGliZGlyfS8uZGVidWcgJHtsaWJkaXJ9LyR7QlBOfS8uZGVidWcgXAorICAgICAgICAgICAgJHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLy5kZWJ1ZyAke2xpYmV4ZWNkaXJ9LyR7QlBOfS8uZGVidWcgL3Vzci9zcmMvZGVidWciCisKK0RFQlVHRklMRURJUkVDVE9SWS1kYmcgPSAiL3Vzci9saWIvZGVidWcgL3Vzci9zcmMvZGVidWciCisKK0ZJTEVTXyR7UE59LWRiZyA9ICIke0BkLmdldFZhcihbJ0RPVERFQlVHLWRiZycsICdERUJVR0ZJTEVESVJFQ1RPUlktZGJnJ11bZC5nZXRWYXIoJ1BBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEUnLCBUcnVlKSA9PSAnZGVidWctZmlsZS1kaXJlY3RvcnknXSwgVHJ1ZSl9IgorCitTRUNUSU9OXyR7UE59LWRiZyA9ICJkZXZlbCIKK0FMTE9XX0VNUFRZXyR7UE59LWRiZyA9ICIxIgorCitGSUxFU18ke1BOfS1sb2NhbGUgPSAiJHtkYXRhZGlyfS9sb2NhbGUiCisKKyMgRmlsZSBtYW5pZmVzdAorCitGSUxFX0RJUk5BTUUgPSAiJHtAb3MucGF0aC5kaXJuYW1lKGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpKX0iCisjIEZJTEVTUEFUSCBpcyBzZXQgaW4gYmFzZS5iYmNsYXNzCisjRklMRVNQQVRIID0gIiR7RklMRV9ESVJOQU1FfS8ke1BGfToke0ZJTEVfRElSTkFNRX0vJHtQfToke0ZJTEVfRElSTkFNRX0vJHtQTn06JHtGSUxFX0RJUk5BTUV9LyR7QlB9OiR7RklMRV9ESVJOQU1FfS8ke0JQTn06JHtGSUxFX0RJUk5BTUV9L2ZpbGVzOiR7RklMRV9ESVJOQU1FfSIKKyMgVGhpcyBkZWZhdWx0IHdhcyBvbmx5IHVzZWQgZm9yIGNoZWNraW5nCitGSUxFU0VYVFJBUEFUSFMgPz0gIl9fZGVmYXVsdDoiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBHZW5lcmFsIHdvcmsgYW5kIG91dHB1dCBkaXJlY3RvcmllcyBmb3IgdGhlIGJ1aWxkIHN5c3RlbS4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitUTVBESVIgPz0gIiR7VE9QRElSfS90bXAiCitDQUNIRSA9ICIke1RNUERJUn0vY2FjaGUke0BbJycsICcvJyArIHN0cihkLmdldFZhcignTUFDSElORScsIFRydWUpKV1bYm9vbChkLmdldFZhcignTUFDSElORScsIFRydWUpKV19JHtAWycnLCAnLycgKyBzdHIoZC5nZXRWYXIoJ1NES01BQ0hJTkUnLCBUcnVlKSldW2Jvb2woZC5nZXRWYXIoJ1NES01BQ0hJTkUnLCBUcnVlKSldfSIKKyMgVGhlIHBlcnNpc3RlbnQgY2FjaGUgc2hvdWxkIGJlIHNoYXJlZCBieSBhbGwgYnVpbGRzCitQRVJTSVNURU5UX0RJUiA9ICIke1RPUERJUn0vY2FjaGUiCitMT0dfRElSID0gIiR7VE1QRElSfS9sb2ciCitDT19ESVIgPSAiJHtETF9ESVJ9IgorQ1ZTRElSID0gIiR7Q09fRElSfS9jdnMiCitTVk5ESVIgPSAiJHtDT19ESVJ9L3N2biIKK0dJVERJUiA9ICIke0NPX0RJUn0vZ2l0MiIKK0JaUkRJUiA9ICIke0NPX0RJUn0vYnpyIgorSEdESVIgPSAiJHtDT19ESVJ9L2hnIgorCitTVEFNUFNfRElSID89ICIke1RNUERJUn0vc3RhbXBzIgorU1RBTVAgPSAiJHtTVEFNUFNfRElSfS8ke01VTFRJTUFDSF9UQVJHRVRfU1lTfS8ke1BOfS8ke0VYVEVORFBFfSR7UFZ9LSR7UFJ9IgorU1RBTVBDTEVBTiA9ICIke1NUQU1QU19ESVJ9LyR7TVVMVElNQUNIX1RBUkdFVF9TWVN9LyR7UE59LyotKiIKK0JBU0VfV09SS0RJUiA/PSAiJHtUTVBESVJ9L3dvcmsiCitXT1JLRElSID0gIiR7QkFTRV9XT1JLRElSfS8ke01VTFRJTUFDSF9UQVJHRVRfU1lTfS8ke1BOfS8ke0VYVEVORFBFfSR7UFZ9LSR7UFJ9IgorVCA9ICIke1dPUktESVJ9L3RlbXAiCitEID0gIiR7V09SS0RJUn0vaW1hZ2UiCitTID0gIiR7V09SS0RJUn0vJHtCUH0iCitCID0gIiR7U30iCisKK1NUQUdJTkdfRElSID0gIiR7VE1QRElSfS9zeXNyb290cyIKKworU1RBR0lOR19ESVJfTkFUSVZFID0gIiR7U1RBR0lOR19ESVJ9LyR7QlVJTERfU1lTfSIKK1NUQUdJTkdfQklORElSX05BVElWRSA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9IgorU1RBR0lOR19CSU5ESVJfQ1JPU1MgPSAiJHtTVEFHSU5HX0JJTkRJUn0vY3Jvc3NzY3JpcHRzIgorU1RBR0lOR19CSU5ESVJfVE9PTENIQUlOID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyX25hdGl2ZX0vJHtUQVJHRVRfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfSIKK1NUQUdJTkdfTElCRElSX05BVElWRSA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke2xpYmRpcl9uYXRpdmV9IgorU1RBR0lOR19MSUJFWEVDRElSX05BVElWRSA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke2xpYmV4ZWNkaXJfbmF0aXZlfSIKK1NUQUdJTkdfQkFTRV9MSUJESVJfTkFUSVZFID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmFzZV9saWJkaXJfbmF0aXZlfSIKK1NUQUdJTkdfU0JJTkRJUl9OQVRJVkUgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtzYmluZGlyX25hdGl2ZX0iCitTVEFHSU5HX0lOQ0RJUl9OQVRJVkUgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtpbmNsdWRlZGlyX25hdGl2ZX0iCitTVEFHSU5HX0VUQ0RJUl9OQVRJVkUgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtzeXNjb25mZGlyX25hdGl2ZX0iCitTVEFHSU5HX0RBVEFESVJfTkFUSVZFID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7ZGF0YWRpcl9uYXRpdmV9IgorCitTVEFHSU5HX0RJUl9IT1NUID0gIiR7U1RBR0lOR19ESVJ9LyR7TUFDSElORX0iCitTVEFHSU5HX0JJTkRJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9JHtiaW5kaXJ9IgorU1RBR0lOR19MSUJESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfSR7bGliZGlyfSIKK1NUQUdJTkdfTElCRVhFQ0RJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9JHtsaWJleGVjZGlyfSIKK1NUQUdJTkdfQkFTRUxJQkRJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9JHtiYXNlX2xpYmRpcn0iCitTVEFHSU5HX0lOQ0RJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9JHtpbmNsdWRlZGlyfSIKK1NUQUdJTkdfREFUQURJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9JHtkYXRhZGlyfSIKK1NUQUdJTkdfRVhFQ1BSRUZJWERJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9JHtleGVjX3ByZWZpeH0iCitTVEFHSU5HX0xPQURFUl9ESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfS9sb2FkZXIiCitTVEFHSU5HX0ZJUk1XQVJFX0RJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9L2Zpcm13YXJlIgorCitTVEFHSU5HX0RJUl9UQVJHRVQgPSAiJHtTVEFHSU5HX0RJUn0vJHtNQUNISU5FfSIKK1NUQUdJTkdfRElSX1RDQk9PVFNUUkFQID0gIiR7U1RBR0lOR19ESVJfVEFSR0VUfS10Y2Jvb3RzdHJhcCIKKworIyBTZXR0aW5nIERFUExPWV9ESVIgb3V0c2lkZSBvZiBUTVBESVIgaXMgaGVscGZ1bCwgd2hlbiB5b3UgYXJlIHVzaW5nCisjIHBhY2thZ2VkIHN0YWdpbmcgYW5kL29yIG11bHRpbWFjaGluZS4KK0RFUExPWV9ESVIgPz0gIiR7VE1QRElSfS9kZXBsb3kiCitERVBMT1lfRElSX1RBUiA9ICIke0RFUExPWV9ESVJ9L3RhciIKK0RFUExPWV9ESVJfSVBLID0gIiR7REVQTE9ZX0RJUn0vaXBrIgorREVQTE9ZX0RJUl9SUE0gPSAiJHtERVBMT1lfRElSfS9ycG0iCitERVBMT1lfRElSX0RFQiA9ICIke0RFUExPWV9ESVJ9L2RlYiIKK0RFUExPWV9ESVJfSU1BR0UgPz0gIiR7REVQTE9ZX0RJUn0vaW1hZ2VzLyR7TUFDSElORX0iCitERVBMT1lfRElSX1RPT0xTID0gIiR7REVQTE9ZX0RJUn0vdG9vbHMiCisKK1BLR0RBVEFfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0vcGtnZGF0YSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNESyB2YXJpYWJsZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworU0RLX05BTUVfUFJFRklYID89ICJvZWNvcmUiCitTREtfTkFNRSA9ICIke1NES19OQU1FX1BSRUZJWH0tJHtTREtfQVJDSH0tJHtUVU5FX1BLR0FSQ0h9IgorU0RLUEFUSCA9ICIvdXNyL2xvY2FsLyR7U0RLX05BTUVfUFJFRklYfS0ke1NES19BUkNIfSIKK1NES1BBVEhOQVRJVkUgPSAiJHtTREtQQVRIfS9zeXNyb290cy8ke1NES19TWVN9IgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgS2VybmVsIGluZm8uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworT0xERVNUX0tFUk5FTCA9ICIyLjYuMzIiCitPTERFU1RfS0VSTkVMX2FhcmNoNjQgPSAiMy4xNCIKK1NUQUdJTkdfS0VSTkVMX0RJUiA9ICIke1RNUERJUn0vd29yay1zaGFyZWQvJHtNQUNISU5FfS9rZXJuZWwtc291cmNlIgorU1RBR0lOR19LRVJORUxfQlVJTERESVIgPSAiJHtUTVBESVJ9L3dvcmstc2hhcmVkLyR7TUFDSElORX0va2VybmVsLWJ1aWxkLWFydGlmYWN0cyIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNwZWNpZmljIGltYWdlIGNyZWF0aW9uIGFuZCByb290ZnMgcG9wdWxhdGlvbiBpbmZvLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0lNQUdFX1JPT1RGUyA9ICIke1dPUktESVJ9L3Jvb3RmcyIKK0lNQUdFX0JBU0VOQU1FID0gIiR7UE59IgorSU1BR0VfTkFNRSA9ICIke0lNQUdFX0JBU0VOQU1FfS0ke01BQ0hJTkV9LSR7REFURVRJTUV9IgorSU1BR0VfTkFNRVt2YXJkZXBzZXhjbHVkZV0gKz0gIkRBVEVUSU1FIgorSU1BR0VfTElOS19OQU1FID0gIiR7SU1BR0VfQkFTRU5BTUV9LSR7TUFDSElORX0iCisKKyMgVGhpcyBvcHRpb24gYWxsb3dzIGZvciBhIHBlcmNlbnRhZ2Ugb3ZlcmFnZSBvZiB0aGUgYWN0dWFsIGltYWdlIHNpemUgcmF0aGVyIHRoYW4gYQorIyBmaXhlZCBleHRyYSBzcGFjZSwgdGhpcyBpcyBzcGFjZSBuZWVkZWQgZm9yIGluaXRpYWwgc3RhcnR1cCBhbmQgYmFzaWMgb3BlcmF0aW9ucy4KK0lNQUdFX09WRVJIRUFEX0ZBQ1RPUiA/PSAiMS4zIgorIyBUaGlzIG9wdGlvbiBhbGxvd3MgZm9yIGFkZGluZyBhZGRpdGlvbmFsIHNwYWNlIGluIEsgYWJvdmUgYW5kIGJleW9uZCB3aGF0IHRoZQorIyBJTUFHRV9PVkVSSEVBRF9GQUNUT1IgbWlnaHQgYWRkLiBUaGlzIHNwYWNlIGlzIGZvciBhZGRpdGlvbmFsIHBhY2thZ2VzLCB1c2VyIGRhdGEsIC4uLgorIyBUbyBzZXQgYSBmaXhlZCBzaXplIHRoZW4gb3ZlcnJpZGluZyBJTUFHRV9ST09URlNfU0laRSB3aXRoIHRoZSBtYXggc2l6ZSBvbmUgd2FudHMKKyMgc2hvdWxkIGRvIHRoZSB0cmljaworSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFID89ICIwIgorCitFWFRSQV9JTUFHRURFUEVORFMgPSAiIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVG9vbGNoYWluIGluZm8uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUEFUSF9wcmVwZW5kID0gIiR7Q09SRUJBU0V9L3NjcmlwdHM6JHtTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU59OiR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9OiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7c2JpbmRpcl9uYXRpdmV9OiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfToke1NUQUdJTkdfRElSX05BVElWRX0ke2Jhc2Vfc2JpbmRpcl9uYXRpdmV9OiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmFzZV9iaW5kaXJfbmF0aXZlfToiCitleHBvcnQgUEFUSAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnVpbGQgdXRpbGl0eSBpbmZvLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0NDQUNIRSA/Pz0gIiIKKyMgRGlzYWJsZSBjY2FjaGUgZXhwbGljaXRseSBpZiBDQ0FDSEUgaXMgbnVsbCBzaW5jZSBnY2MgbWF5IGJlIGEgc3ltbGluaworIyBvZiBjY2FjaGUgc29tZSBkaXN0cmlidXRpb25zIChlLmcuLCBGZWRvcmEgMTcpLgorZXhwb3J0IENDQUNIRV9ESVNBQkxFID8/PSAiJHtAWzAsMV1bZC5nZXRWYXIoJ0NDQUNIRScsIFRydWUpID09ICcnXX0iCisjIEFzc2lnbiBDQ0FDSEVfRElSIGEgZGVmYXVsdCB2YWx1ZSB0byBmaXggYSBidWcgb2YgY2NhY2hlIDMuMS43LAorIyBzaW5jZSBpdCB3b3VsZCBhbHdheXMgY3JlYXRlIENDQUNIRV9ESVIvLmNjYWNoZSBldmVuIGlmCisjIENDQUNIRV9ESVNBQkxFID0gMS4KK2V4cG9ydCBDQ0FDSEVfRElSID8/PSAiJHtAb3MuZ2V0ZW52KCdIT01FJyl9IgorCitUT09MQ0hBSU5fT1BUSU9OUyA9ICIgLS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSIKKworZXhwb3J0IENDID0gIiR7Q0NBQ0hFfSR7SE9TVF9QUkVGSVh9Z2NjICR7SE9TVF9DQ19BUkNIfSR7VE9PTENIQUlOX09QVElPTlN9IgorZXhwb3J0IENYWCA9ICIke0NDQUNIRX0ke0hPU1RfUFJFRklYfWcrKyAke0hPU1RfQ0NfQVJDSH0ke1RPT0xDSEFJTl9PUFRJT05TfSIKK2V4cG9ydCBGQyA9ICIke0NDQUNIRX0ke0hPU1RfUFJFRklYfWdmb3J0cmFuICR7SE9TVF9DQ19BUkNIfSR7VE9PTENIQUlOX09QVElPTlN9IgorZXhwb3J0IENQUCA9ICIke0hPU1RfUFJFRklYfWdjYyAtRSR7VE9PTENIQUlOX09QVElPTlN9ICR7SE9TVF9DQ19BUkNIfSIKK2V4cG9ydCBMRCA9ICIke0hPU1RfUFJFRklYfWxkJHtUT09MQ0hBSU5fT1BUSU9OU30gJHtIT1NUX0xEX0FSQ0h9IgorZXhwb3J0IENDTEQgPSAiJHtDQ30iCitleHBvcnQgQVIgPSAiJHtIT1NUX1BSRUZJWH1hciIKK2V4cG9ydCBBUyA9ICIke0hPU1RfUFJFRklYfWFzICR7SE9TVF9BU19BUkNIfSIKK2V4cG9ydCBSQU5MSUIgPSAiJHtIT1NUX1BSRUZJWH1yYW5saWIiCitleHBvcnQgU1RSSVAgPSAiJHtIT1NUX1BSRUZJWH1zdHJpcCIKK2V4cG9ydCBPQkpDT1BZID0gIiR7SE9TVF9QUkVGSVh9b2JqY29weSIKK2V4cG9ydCBPQkpEVU1QID0gIiR7SE9TVF9QUkVGSVh9b2JqZHVtcCIKK2V4cG9ydCBTVFJJTkdTID0gIiR7SE9TVF9QUkVGSVh9c3RyaW5ncyIKK2V4cG9ydCBOTSA9ICIke0hPU1RfUFJFRklYfW5tIgorUFlUSE9OID0gIiR7QHN5cy5leGVjdXRhYmxlfSIKKworZXhwb3J0IEJVSUxEX0NDID0gIiR7Q0NBQ0hFfSR7QlVJTERfUFJFRklYfWdjYyAke0JVSUxEX0NDX0FSQ0h9IgorZXhwb3J0IEJVSUxEX0NYWCA9ICIke0NDQUNIRX0ke0JVSUxEX1BSRUZJWH1nKysgJHtCVUlMRF9DQ19BUkNIfSIKK2V4cG9ydCBCVUlMRF9GQyA9ICIke0NDQUNIRX0ke0JVSUxEX1BSRUZJWH1nZm9ydHJhbiAke0JVSUxEX0NDX0FSQ0h9IgorZXhwb3J0IEJVSUxEX0NQUCA9ICIke0JVSUxEX1BSRUZJWH1nY2MgJHtCVUlMRF9DQ19BUkNIfSAtRSIKK2V4cG9ydCBCVUlMRF9MRCA9ICIke0JVSUxEX1BSRUZJWH1sZCAke0JVSUxEX0xEX0FSQ0h9IgorZXhwb3J0IEJVSUxEX0NDTEQgPSAiJHtCVUlMRF9QUkVGSVh9Z2NjICR7QlVJTERfQ0NfQVJDSH0iCitleHBvcnQgQlVJTERfQVIgPSAiJHtCVUlMRF9QUkVGSVh9YXIiCitleHBvcnQgQlVJTERfQVMgPSAiJHtCVUlMRF9QUkVGSVh9YXMgJHtCVUlMRF9BU19BUkNIfSIKK2V4cG9ydCBCVUlMRF9SQU5MSUIgPSAiJHtCVUlMRF9QUkVGSVh9cmFubGliIgorZXhwb3J0IEJVSUxEX1NUUklQID0gIiR7QlVJTERfUFJFRklYfXN0cmlwIgorZXhwb3J0IEJVSUxEX05NID0gIiR7QlVJTERfUFJFRklYfW5tIgorCitleHBvcnQgTUFLRSA9ICJtYWtlIgorRVhUUkFfT0VNQUtFID0gIi1lIE1BS0VGTEFHUz0iCitFWFRSQV9PRUNPTkYgPSAiIgorZXhwb3J0IExDX0FMTCA9ICJDIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUGF0Y2ggaGFuZGxpbmcuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK1BBVENIVE9PTCA9ICJxdWlsdCIKK1BBVENIUkVTT0xWRSA9ICJub29wIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnVpbGQgZmxhZ3MgYW5kIG9wdGlvbnMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZXhwb3J0IEJVSUxEX0NQUEZMQUdTID0gIi1pc3lzdGVtJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9IgorQlVJTERTREtfQ1BQRkxBR1MgPSAiLWlzeXN0ZW0ke1NUQUdJTkdfSU5DRElSfSIKK2V4cG9ydCBDUFBGTEFHUyA9ICIke1RBUkdFVF9DUFBGTEFHU30iCitleHBvcnQgVEFSR0VUX0NQUEZMQUdTID0gIiIKKyNleHBvcnQgVEFSR0VUX0NQUEZMQUdTID0gIi1pc3lzdGVtJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtpbmNsdWRlZGlyfSIKKworZXhwb3J0IEJVSUxEX0NGTEFHUyA9ICIke0JVSUxEX0NQUEZMQUdTfSAke0JVSUxEX09QVElNSVpBVElPTn0iCitCVUlMRFNES19DRkxBR1MgPSAiJHtCVUlMRFNES19DUFBGTEFHU30gJHtCVUlMRF9PUFRJTUlaQVRJT059IgorZXhwb3J0IENGTEFHUyA9ICIke1RBUkdFVF9DRkxBR1N9IgorZXhwb3J0IFRBUkdFVF9DRkxBR1MgPSAiJHtUQVJHRVRfQ1BQRkxBR1N9ICR7U0VMRUNURURfT1BUSU1JWkFUSU9OfSIKKworZXhwb3J0IEJVSUxEX0NYWEZMQUdTID0gIiR7QlVJTERfQ0ZMQUdTfSIKK2V4cG9ydCBDWFhGTEFHUyA9ICIke1RBUkdFVF9DWFhGTEFHU30iCitleHBvcnQgVEFSR0VUX0NYWEZMQUdTID0gIiR7VEFSR0VUX0NGTEFHU30iCisKK2V4cG9ydCBCVUlMRF9MREZMQUdTID0gIi1MJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1MJHtTVEFHSU5HX0JBU0VfTElCRElSX05BVElWRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0JBU0VfTElCRElSX05BVElWRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgLVdsLC1ycGF0aCwke1NUQUdJTkdfTElCRElSX05BVElWRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgLVdsLC1ycGF0aCwke1NUQUdJTkdfQkFTRV9MSUJESVJfTkFUSVZFfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtV2wsLU8xIgorCitCVUlMRFNES19MREZMQUdTID0gIi1MJHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgICAgICAgICAgICAtV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgICAgICAgICAgICAtV2wsLXJwYXRoLCR7bGliZGlyfSAtV2wsLU8xIFwKKyAgICAgICAgICAgICAgICAgICAgLUwke1NUQUdJTkdfRElSX0hPU1R9JHtiYXNlX2xpYmRpcn0gXAorICAgICAgICAgICAgICAgICAgICAtV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0RJUl9IT1NUfSR7YmFzZV9saWJkaXJ9IFwKKyAgICAgICAgICAgICAgICAgICAgLVdsLC1ycGF0aCwke2Jhc2VfbGliZGlyfSAtV2wsLU8xIgorCitMSU5LRVJfSEFTSF9TVFlMRSA/Pz0gImdudSIKKyMgbWlwcyBkb2VzIG5vdCBzdXBwb3J0IEdOVSBoYXNoIHN0eWxlIHRoZXJlZm9yZSB3ZSBvdmVycmlkZQorTElOS0VSX0hBU0hfU1RZTEVfbWlwcyA9ICJzeXN2IgorTElOS0VSX0hBU0hfU1RZTEVfbWlwc2VsID0gInN5c3YiCitMSU5LRVJfSEFTSF9TVFlMRV9taXBzNjQgPSAic3lzdiIKK0xJTktFUl9IQVNIX1NUWUxFX21pcHM2NGVsID0gInN5c3YiCitMSU5LRVJfSEFTSF9TVFlMRV9taXBzNjRuMzIgPSAic3lzdiIKK0xJTktFUl9IQVNIX1NUWUxFX21pcHM2NGVsbjMyID0gInN5c3YiCitUQVJHRVRfTElOS19IQVNIX1NUWUxFID89ICIke0BbJy1XbCwtLWhhc2gtc3R5bGU9Z251JywnJ11bZC5nZXRWYXIoJ0xJTktFUl9IQVNIX1NUWUxFJywgVHJ1ZSkgIT0gJ2dudSddfSIKKworZXhwb3J0IExERkxBR1MgPSAiJHtUQVJHRVRfTERGTEFHU30iCitleHBvcnQgVEFSR0VUX0xERkxBR1MgPSAiLVdsLC1PMSAke1RBUkdFVF9MSU5LX0hBU0hfU1RZTEV9IgorI2V4cG9ydCBUQVJHRVRfTERGTEFHUyA9ICItTCR7U1RBR0lOR19ESVJfVEFSR0VUfSR7bGliZGlyfSBcCisjICAgICAgICAgICAgICAgICAgICAgICAgIC1XbCwtcnBhdGgtbGluaywke1NUQUdJTkdfRElSX1RBUkdFVH0ke2xpYmRpcn0gXAorIyAgICAgICAgICAgICAgICAgICAgICAgICAtV2wsLU8xIgorCisjIFdoaWNoIGZsYWdzIHRvIGxlYXZlIGJ5IHN0cmlwLWZsYWdzKCkgaW4gYmluL2J1aWxkL29lYnVpbGQuc2ggPworQUxMT1dFRF9GTEFHUyA9ICItTyAtbWNwdSAtbWFyY2ggLXBpcGUiCisKKyMgUGFzcyBwYXJhbGxlbCBtYWtlIG9wdGlvbnMgdG8gdGhlIGNvbXBpbGUgdGFzaworRVhUUkFfT0VNQUtFX3ByZXBlbmRfdGFzay1jb21waWxlID0gIiR7UEFSQUxMRUxfTUFLRX0gIgorUEFSQUxMRUxfTUFLRUlOU1QgPz89ICIke1BBUkFMTEVMX01BS0V9IgorIyBQYXNzIHBhcmFsbGVsIG1ha2Ugb3B0aW9ucyB0byB0aGUgaW5zdGFsbCB0YXNrCitFWFRSQV9PRU1BS0VfcHJlcGVuZF90YXNrLWluc3RhbGwgPSAiJHtQQVJBTExFTF9NQUtFSU5TVH0gIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgT3B0aW1pemF0aW9uIGZsYWdzLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitERUJVR19GTEFHUyA/PSAiLWcgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzIgorIyBEaXNhYmxlZCB1bnRpbCB0aGUgb3B0aW9uIHdvcmtzIHByb3Blcmx5IC1mZWxpbWluYXRlLWR3YXJmMi1kdXBzCitGVUxMX09QVElNSVpBVElPTiA9ICItTzIgLXBpcGUgJHtERUJVR19GTEFHU30iCitERUJVR19PUFRJTUlaQVRJT04gPSAiLU8gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgJHtERUJVR19GTEFHU30gLXBpcGUiCitTRUxFQ1RFRF9PUFRJTUlaQVRJT04gPSAiJHtAZC5nZXRWYXIoWydGVUxMX09QVElNSVpBVElPTicsICdERUJVR19PUFRJTUlaQVRJT04nXVtkLmdldFZhcignREVCVUdfQlVJTEQnLCBUcnVlKSA9PSAnMSddLCBUcnVlKX0iCitTRUxFQ1RFRF9PUFRJTUlaQVRJT05bdmFyZGVwc10gKz0gIkZVTExfT1BUSU1JWkFUSU9OIERFQlVHX09QVElNSVpBVElPTiIKK0JVSUxEX09QVElNSVpBVElPTiA9ICItTzIgLXBpcGUiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTZXR0aW5ncyB1c2VkIGJ5IGJpdGJha2UtbGF5ZXJzLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitCQkxBWUVSU19MQVlFUklOREVYX1VSTCA/Pz0gImh0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZy9sYXllcmluZGV4LyIKK0JCTEFZRVJTX0ZFVENIX0RJUiA/Pz0gIiR7Q09SRUJBU0V9IgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRG93bmxvYWQgbG9jYXRpb25zIGFuZCB1dGlsaXRpZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQVBBQ0hFX01JUlJPUiA9ICJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZGlzdCIKK0RFQklBTl9NSVJST1IgPSAiZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wiCitHRU5UT09fTUlSUk9SID0gImh0dHA6Ly9kaXN0ZmlsZXMuZ2VudG9vLm9yZy9kaXN0ZmlsZXMiCitHTk9NRV9HSVQgPSAiZ2l0Oi8vZ2l0Lmdub21lLm9yZyIKK0dOT01FX01JUlJPUiA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvR05PTUUvc291cmNlcyIKK0dOVV9NSVJST1IgPSAiaHR0cDovL2Z0cC5nbnUub3JnL2dudSIKK0dQRV9NSVJST1IgPSAiaHR0cDovL2dwZS5saW51eHRvZ28ub3JnL2Rvd25sb2FkL3NvdXJjZSIKK0tFUk5FTE9SR19NSVJST1IgPSAiaHR0cDovL2tlcm5lbC5vcmcvcHViIgorU09VUkNFRk9SR0VfTUlSUk9SID0gImh0dHA6Ly9kb3dubG9hZHMuc291cmNlZm9yZ2UubmV0IgorWExJQlNfTUlSUk9SID0gImh0dHA6Ly94bGlicy5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZSIKK1hPUkdfTUlSUk9SID0gImh0dHA6Ly94b3JnLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcyIKK1NBVkFOTkFIX0dOVV9NSVJST1IgPSAiaHR0cDovL2Rvd25sb2FkLnNhdmFubmFoLmdudS5vcmcvcmVsZWFzZXMiCitTQVZBTk5BSF9OT05HTlVfTUlSUk9SID0gImh0dHA6Ly9kb3dubG9hZC5zYXZhbm5haC5ub25nbnUub3JnL3JlbGVhc2VzIgorQ1BBTl9NSVJST1IgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOIgorCitTUkNfVVJJW3ZhcmRlcHNleGNsdWRlXSArPSAiXAorICAgIEFQQUNIRV9NSVJST1IgXAorICAgIENQQU5fTUlSUk9SIFwKKyAgICBERUJJQU5fTUlSUk9SIFwKKyAgICBHRU5UT09fTUlSUk9SIFwKKyAgICBHTk9NRV9HSVQgXAorICAgIEdOT01FX01JUlJPUiBcCisgICAgR05VX01JUlJPUiBcCisgICAgR1BFX01JUlJPUiBcCisgICAgS0VSTkVMT1JHX01JUlJPUiBcCisgICAgU0FWQU5OQUhfR05VX01JUlJPUiBcCisgICAgU0FWQU5OQUhfTk9OR05VX01JUlJPUiBcCisgICAgU09VUkNFRk9SR0VfTUlSUk9SIFwKKyAgICBYTElCU19NSVJST1IgXAorICAgIFhPUkdfTUlSUk9SIFwKKyIKKworIyBZb3UgY2FuIHVzZSB0aGUgbWlycm9yIG9mIHlvdXIgY291bnRyeSB0byBnZXQgZmFzdGVyIGRvd25sb2FkcyBieSBwdXR0aW5nCisjICBleHBvcnQgREVCSUFOX01JUlJPUiA9ICJmdHA6Ly9mdHAuZGUuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCIKKyMgICAgIGludG8geW91ciBsb2NhbC5jb25mCisKK0ZFVENIQ01EX3N2biA9ICIvdXNyL2Jpbi9lbnYgc3ZuIC0tbm9uLWludGVyYWN0aXZlIC0tdHJ1c3Qtc2VydmVyLWNlcnQiCitGRVRDSENNRF9jdnMgPSAiL3Vzci9iaW4vZW52IGN2cyIKK0ZFVENIQ01EX3dnZXQgPSAiL3Vzci9iaW4vZW52IHdnZXQgLXQgMiAtVCAzMCAtbnYgLS1wYXNzaXZlLWZ0cCAtLW5vLWNoZWNrLWNlcnRpZmljYXRlIgorRkVUQ0hDTURfYnpyID0gIi91c3IvYmluL2VudiBienIiCitGRVRDSENNRF9oZyA9ICIvdXNyL2Jpbi9lbnYgaGciCisKK1NSQ0RBVEUgPSAiJHtEQVRFfSIKK1NSQ1JFViA/Pz0gIklOVkFMSUQiCitBVVRPUkVWID0gIiR7QGJiLmZldGNoMi5nZXRfYXV0b3JldihkKX0iCitTUkNQViA9ICIke0BiYi5mZXRjaDIuZ2V0X3NyY3JldihkKX0iCitTUkNQVlt2YXJkZXB2YWx1ZV0gPSAiJHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiIgorCisjIFVzZSBwc2V1ZG8gYXMgdGhlIGZha2Vyb290IGltcGxlbWVudGF0aW9uCitQU0VVRE9fTE9DQUxTVEFURURJUiA/PSAiJHtXT1JLRElSfS9wc2V1ZG8vIgorUFNFVURPX1BBU1NXRCA/PSAiJHtTVEFHSU5HX0RJUl9UQVJHRVR9OiR7U1RBR0lOR19ESVJfTkFUSVZFfSIKK2V4cG9ydCBQU0VVRE9fRElTQUJMRUQgPSAiMSIKKyNleHBvcnQgUFNFVURPX1BSRUZJWCA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9IgorI2V4cG9ydCBQU0VVRE9fQklORElSID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyX25hdGl2ZX0iCisjZXhwb3J0IFBTRVVET19MSUJESVIgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JFBTRVVET0JJTkRJUi8uLi9saWIvcHNldWRvL2xpYgorRkFLRVJPT1RCQVNFRU5WID0gIlBTRVVET19CSU5ESVI9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9IFBTRVVET19MSUJESVI9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9Ly4uL2xpYi9wc2V1ZG8vbGliIFBTRVVET19QUkVGSVg9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9Ly4uLy4uLyBQU0VVRE9fRElTQUJMRUQ9MSIKK0ZBS0VST09UQ01EID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wc2V1ZG8iCitGQUtFUk9PVEVOViA9ICJQU0VVRE9fUFJFRklYPSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0gUFNFVURPX0xPQ0FMU1RBVEVESVI9JHtQU0VVRE9fTE9DQUxTVEFURURJUn0gUFNFVURPX1BBU1NXRD0ke1BTRVVET19QQVNTV0R9IFBTRVVET19OT1NZTUxJTktFWFA9MSBQU0VVRE9fRElTQUJMRUQ9MCIKK0ZBS0VST09UTk9FTlYgPSAiUFNFVURPX1VOTE9BRD0xIgorRkFLRVJPT1RESVJTID0gIiR7UFNFVURPX0xPQ0FMU1RBVEVESVJ9IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlID89ICJwc2V1ZG8tbmF0aXZlIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTWlzY2VsbGFuZW91cyB1dGlsaXRpZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBHTlUgcGF0Y2ggdHJpZXMgdG8gYmUgaW50ZWxsZ2VudCBhYm91dCBjaGVja2luZyBvdXQgcmVhZC1vbmx5IGZpbGVzIGZyb20KKyMgYSBSQ1MsIHdoaWNoIGZyZWFrcyBvdXQgdGhvc2Ugc3BlY2lhbCBmb2xrcyB3aXRoIGFjdGl2ZSBQZXJmb3JjZSBjbGllbnRzCisjIHRoZSBmb2xsb3dpbmcgbWFrZXMgcGF0Y2ggaWdub3JlIFJDUzoKKworZXhwb3J0IFBBVENIX0dFVD0iMCIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE5vdCBzdXJlIGFib3V0IHRoZSByZXN0IG9mIHRoaXMgeWV0LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgUHJlLWJ1aWxkIGNvbmZpZ3VyYXRpb24gb3V0cHV0CitCVUlMRENGR19IRUFERVIgPSAiQnVpbGQgQ29uZmlndXJhdGlvbjoiCitCVUlMRENGR19WQVJTID0gIkJCX1ZFUlNJT04gQlVJTERfU1lTIE5BVElWRUxTQlNUUklORyBUQVJHRVRfU1lTIE1BQ0hJTkUgRElTVFJPIERJU1RST19WRVJTSU9OIFRVTkVfRkVBVFVSRVMgVEFSR0VUX0ZQVSIKK0JVSUxEQ0ZHX1ZBUlNbdHlwZV0gPSAibGlzdCIKK0JVSUxEQ0ZHX05FRURFRFZBUlMgPSAiVEFSR0VUX0FSQ0ggVEFSR0VUX09TIgorQlVJTERDRkdfTkVFREVEVkFSU1t0eXBlXSA9ICJsaXN0IgorCisjIE90aGVyCisKK2V4cG9ydCBQS0dfQ09ORklHX0RJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9JHtsaWJkaXJ9L3BrZ2NvbmZpZyIKK2V4cG9ydCBQS0dfQ09ORklHX1BBVEggPSAiJHtQS0dfQ09ORklHX0RJUn06JHtTVEFHSU5HX0RBVEFESVJ9L3BrZ2NvbmZpZyIKK2V4cG9ydCBQS0dfQ09ORklHX0xJQkRJUiA9ICIke1BLR19DT05GSUdfRElSfSIKK2V4cG9ydCBQS0dfQ09ORklHX1NZU1JPT1RfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0iCitleHBvcnQgUEtHX0NPTkZJR19ESVNBQkxFX1VOSU5TVEFMTEVEID0gInllcyIKKworIyMjCisjIyMgQ29uZmlnIGZpbGUgcHJvY2Vzc2luZworIyMjCisKKyMgQW4gZW1wdHkgZGlzdHJvIGxlYWRzIHRvIDo6IGVudHJpZXMgaW4gT1ZFUlJJREVTIGFuZCBGSUxFT1ZFUlJJREVTIHdoaWNoCisjIGlzIGEgYmFkIGlkZWEuIFNldHRpbmcgYSBkdW1teSB2YWx1ZSBpcyBiZXR0ZXIgdGhhbiBhIHRvbiBvZiBhbm9ueW1vdXMgcHl0aG9uLgorRElTVFJPID8/PSAibm9kaXN0cm8iCitESVNUUk9fTkFNRSA/Pz0gIk9wZW5FbWJlZGRlZCIKKyMgT3ZlcnJpZGVzIGFyZSBwcm9jZXNzZWQgbGVmdCB0byByaWdodCwgc28gdGhlIG9uZXMgdGhhdCBhcmUgbmFtZWQgbGF0ZXIgdGFrZSBwcmVjZWRlbmNlLgorIyBZb3UgZ2VuZXJhbGx5IHdhbnQgdGhlbSB0byBnbyBmcm9tIGxlYXN0IHRvIG1vc3Qgc3BlY2lmaWMuCisjCisjIFRoaXMgbWVhbnMgdGhhdCBhbiBlbnZpb25tZW50IHZhcmlhYmxlIG5hbWVkICc8Zm9vPl9hcm0nIG92ZXJyaWRlcyBhbgorIyBlbnZpcm9ubWVudCB2YXJpYWJsZSAnPGZvbz4nICh3aGVuICR7VEFSR0VUX0FSQ0h9IGlzIGFybSkuCisjIEFuIGVudmlyb25tZW50IHZhcmlhYmxlICc8Zm9vPl9xZW11YXJtJyBvdmVycmlkZXMgJzxmb28+JyBhbmQgb3ZlcnJpZGVzCisjICc8Zm9vPl9hcm0nIHdoZW4gJHtNQUNISU5FfSBpcyAncWVtdWFybScuCisjIElmIHlvdSB1c2UgY29tYmluYXRpb24gaWUgJzxmb28+X3FlbXVhcm1fYXJtJywgdGhlbiAnPGZvbz5fcWVtdWFybV9hcm0nIHdpbGwgb3ZlcnJpZGUKKyMgJzxmb28+X3FlbXVhcm0nIGFuZCB0aGVuICc8Zm9vPicgd2lsbCBiZSBvdmVycmlkZW4gd2l0aCB0aGF0IHZhbHVlIGZyb20gJzxmb28+X3FlbXVhcm0nLgorIyBBbmQgZmluYWxseSAnPGZvbz5fZm9yY2V2YXJpYWJsZScgb3ZlcnJpZGVzIGFueSBzdGFuZGFyZCB2YXJpYWJsZSwgd2l0aCB0aGUgaGlnaGVzdCBwcmlvcml0eS4KKyMKKyMgVGhpcyB3b3JrcyBmb3IgIGZ1bmN0aW9ucyBhcyB3ZWxsLCB0aGV5IGFyZSByZWFsbHkganVzdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisjIERlZmF1bHQgT1ZFUlJJREVTIHRvIG1ha2UgY29tcGlsYXRpb24gZmFpbCBmYXN0IGluIGNhc2Ugb2YgYnVpbGQgc3lzdGVtIG1pc2NvbmZpZ3VyYXRpb24uCitPVkVSUklERVMgPSAiJHtUQVJHRVRfT1N9OiR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH06YnVpbGQtJHtCVUlMRF9PU306cG4tJHtQTn06JHtNQUNISU5FT1ZFUlJJREVTfToke0RJU1RST09WRVJSSURFU306JHtDTEFTU09WRVJSSURFfTpmb3JjZXZhcmlhYmxlIgorT1ZFUlJJREVTW3ZhcmRlcHNleGNsdWRlXSA9ICJNQUNISU5FT1ZFUlJJREVTIgorQ0xBU1NPVkVSUklERSA/PSAiY2xhc3MtdGFyZ2V0IgorRElTVFJPT1ZFUlJJREVTID89ICIke0BkLmdldFZhcignRElTVFJPJywgVHJ1ZSkgb3IgJyd9IgorTUFDSElORU9WRVJSSURFUyA/PSAiJHtNQUNISU5FfSIKK01BQ0hJTkVPVkVSUklERVNbdmFyZGVwc2V4Y2x1ZGVdID0gIk1BQ0hJTkUiCisKK0ZJTEVTT1ZFUlJJREVTID0gIiR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH06JHtNQUNISU5FT1ZFUlJJREVTfToke0RJU1RST09WRVJSSURFU30iCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBJbmNsdWRlIHRoZSByZXN0IG9mIHRoZSBjb25maWcgZmlsZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworcmVxdWlyZSBjb25mL2FiaV92ZXJzaW9uLmNvbmYKK2luY2x1ZGUgY29uZi9zaXRlLmNvbmYKK2luY2x1ZGUgY29uZi9hdXRvLmNvbmYKK2luY2x1ZGUgY29uZi9sb2NhbC5jb25mCitpbmNsdWRlIGNvbmYvYnVpbGQvJHtCVUlMRF9TWVN9LmNvbmYKK2luY2x1ZGUgY29uZi90YXJnZXQvJHtUQVJHRVRfU1lTfS5jb25mCitpbmNsdWRlIGNvbmYvbWFjaGluZS8ke01BQ0hJTkV9LmNvbmYKK2luY2x1ZGUgY29uZi9tYWNoaW5lLXNkay8ke1NES01BQ0hJTkV9LmNvbmYKK2luY2x1ZGUgY29uZi9kaXN0cm8vJHtESVNUUk99LmNvbmYKK2luY2x1ZGUgY29uZi9kaXN0cm8vZGVmYXVsdHNldHVwLmNvbmYKK2luY2x1ZGUgY29uZi9kb2N1bWVudGF0aW9uLmNvbmYKK2luY2x1ZGUgY29uZi9saWNlbnNlcy5jb25mCityZXF1aXJlIGNvbmYvc2FuaXR5LmNvbmYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFdlYWsgdmFyaWFibGVzICh1c3VhbGx5IHRvIHJldGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSkKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitETF9ESVIgPz0gIiR7VE9QRElSfS9kb3dubG9hZHMiCitTU1RBVEVfRElSID89ICIke1RPUERJUn0vc3N0YXRlLWNhY2hlIgorSU1BR0VfRlNUWVBFUyA/PSAidGFyLmd6IgorSU5JVFJBTUZTX0ZTVFlQRVMgPz0gImNwaW8uZ3oiCitERUZBVUxUX1RBU0tfUFJPVklERVIgPz0gInBhY2thZ2Vncm91cC1iYXNlIgorTUFDSElORV9UQVNLX1BST1ZJREVSID89ICIke0RFRkFVTFRfVEFTS19QUk9WSURFUn0iCisKKyMgVGhlIHNpemUgaW4gS2J5dGVzIGZvciB0aGUgZ2VuZXJhdGVkIGltYWdlIGlmIGl0IGlzIGxhcmdlciB0aGFuCisjIHRoZSByZXF1aXJlZCBzaXplIChkdSAta3MgSU1BR0VfUk9PVEZTICogSU1BR0VfT1ZFUkhFQURfRkFDVE9SKSwKKyMgYW5kIG5vIGVmZmVjdCBpZiBsZXNzIHRoYW4gaXQuCitJTUFHRV9ST09URlNfU0laRSA/Pz0gIjY1NTM2IgorCisjIEZvcmNlZnVsbHkgc2V0IENBQ0hFIG5vdyBzbyBmdXR1cmUgY2hhbmdlcyB0byB0aGluZ3MgbGlrZQorIyBNQUNISU5FIGRvbid0IGNoYW5nZSB0aGUgcGF0aCB0byB0aGUgY2FjaGUKK0NBQ0hFIDo9ICIke0NBQ0hFfSIKKworIyBEZWZhdWx0IHRvIHNldHRpbmcgYXV0b21hdGljYWxseSBiYXNlZCBvbiBjcHUgY291bnQKK0JCX05VTUJFUl9USFJFQURTID89ICIke0BvZS51dGlscy5jcHVfY291bnQoKX0iCisKKyMgRGVmYXVsdCB0byBzZXR0aW5nIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gY3B1IGNvdW50CitQQVJBTExFTF9NQUtFID89ICItaiAke0BvZS51dGlscy5jcHVfY291bnQoKX0iCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNYWdpYyBDb29raWUgZm9yIFNBTklUWSBDSEVDSworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitPRVNfQklUQkFLRV9DT05GID0gIjEiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNYWNoaW5lIHByb3BlcnRpZXMgYW5kIHBhY2thZ2Vncm91cC1iYXNlIHN0dWZmCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworTUFDSElORV9GRUFUVVJFUyA/PSAiIgorRElTVFJPX0ZFQVRVUkVTID89ICIiCisKK0RJU1RST19FWFRSQV9SREVQRU5EUyA/PSAiIgorRElTVFJPX0VYVFJBX1JSRUNPTU1FTkRTID89ICIiCitNQUNISU5FX0VYVFJBX1JERVBFTkRTID89ICIiCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTID89ICIiCitNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUyA/PSAiIgorTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFMgPz0gIiIKKworRVhUUkFfSU1BR0VfRkVBVFVSRVMgPz89ICIiCitJTUFHRV9GRUFUVVJFUyArPSAiJHtFWFRSQV9JTUFHRV9GRUFUVVJFU30iCisKK0RJU1RST19GRUFUVVJFU19CQUNLRklMTCA9ICJwdWxzZWF1ZGlvIHN5c3Zpbml0IGJsdWV6NSIKK01BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTEwgPSAicnRjIgorCitDT01CSU5FRF9GRUFUVVJFUyA9ICIke0BvZS51dGlscy5zZXRfaW50ZXJzZWN0KCdESVNUUk9fRkVBVFVSRVMnLCAnTUFDSElORV9GRUFUVVJFUycsIGQpfSIKK0NPTUJJTkVEX0ZFQVRVUkVTW3ZhcmRlcHNdICs9ICJESVNUUk9fRkVBVFVSRVMgTUFDSElORV9GRUFUVVJFUyIKKworU0VSSUFMX0NPTlNPTEUgPz89ICIiCitTRVJJQUxfQ09OU09MRVMgPz89ICIke0BkLmdldFZhcignU0VSSUFMX0NPTlNPTEUnLCBUcnVlKS5yZXBsYWNlKCcgJywgJzsnKX0iCisKK05PX1JFQ09NTUVOREFUSU9OUyA/PSAiIgorQkFEX1JFQ09NTUVOREFUSU9OUyA/PSAiIgorCisjIE1ha2Ugc3VyZSBNQUNISU5FIGlzbid0IGV4cG9ydGVkCisjIChicmVha3MgYmludXRpbHMgYXQgbGVhc3QpCitNQUNISU5FW3VuZXhwb3J0XSA9ICIxIgorCisjIE1ha2Ugc3VyZSBUQVJHRVRfQVJDSCBpc24ndCBleHBvcnRlZAorIyAoYnJlYWtzIE1ha2VmaWxlcyB1c2luZyBpbXBsaWNpdCBydWxlcywgZS5nLiBxdWlsdCwgYXMgR05VIG1ha2UgaGFzIHRoaXMKKyMgaW4gdGhlbSwgdW5kb2N1bWVudGVkKQorVEFSR0VUX0FSQ0hbdW5leHBvcnRdID0gIjEiCisKKyMgTWFrZSBzdXJlIERJU1RSTyBpc24ndCBleHBvcnRlZAorIyAoYnJlYWtzIHN5c3Zpbml0IGF0IGxlYXN0KQorRElTVFJPW3VuZXhwb3J0XSA9ICIxIgorCisjIE1ha2Ugc3VyZSBTSEVMTCBpc24ndCBleHBvcnRlZAorIyAoY2FuIGJyZWFrIGFueSBudW1iZXIgb2YgdGhpbmdzIGlmIHRoZSB1c2VyJ3Mgc2hlbGwgaXNuJ3QgUE9TSVgtY29tcGxpYW50LAorIyBpbmNsdWRpbmcgdGhlIGZsb2NrIGNvbW1hbmQpLiBUaGUgdXNlcidzIHNoZWxsIHNob3VsZG4ndCBhZmZlY3Qgb3VyIGJ1aWxkcy4KK1NIRUxMW3VuZXhwb3J0XSA9ICIxIgorCisjIFVzZWQgYnkgY2FuYWRpYW4tY3Jvc3MgdG8gaGFuZGxlIHN0cmluZyBjb252ZXJzaW9ucyBvbiBUQVJHRVRfQVJDSCB3aGVyZSBuZWVkZWQKK1RSQU5TTEFURURfVEFSR0VUX0FSQ0ggPz89ICIke0BkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKS5yZXBsYWNlKCJfIiwgIi0iKX0iCisKKyMgQ29tcGxldGUgb3V0cHV0IGZyb20gYml0YmFrZQorQkJfQ09OU09MRUxPRyA/PSAiJHtMT0dfRElSfS9jb29rZXIvJHtNQUNISU5FfS8ke0RBVEVUSU1FfS5sb2ciCisKKyMgU2V0dXAgb3VyIGRlZmF1bHQgaGFzaCBwb2xpY3kKK0JCX1NJR05BVFVSRV9IQU5ETEVSID89ICJPRUJhc2ljSGFzaCIKK0JCX0hBU0hCQVNFX1dISVRFTElTVCA/PSAiVE1QRElSIEZJTEUgUEFUSCBQV0QgQkJfVEFTS0hBU0ggQkJQQVRIIERMX0RJUiBcCisgICAgU1NUQVRFX0RJUiBUSElTRElSIEZJTEVTRVhUUkFQQVRIUyBGSUxFX0RJUk5BTUUgSE9NRSBMT0dOQU1FIFNIRUxMIFRFUk0gXAorICAgIFVTRVIgRklMRVNQQVRIIFNUQUdJTkdfRElSX0hPU1QgU1RBR0lOR19ESVJfVEFSR0VUIENPUkVCQVNFIFBSU0VSVl9IT1NUIFwKKyAgICBQUlNFUlZfRFVNUERJUiBQUlNFUlZfRFVNUEZJTEUgUFJTRVJWX0xPQ0tET1dOIFBBUkFMTEVMX01BS0UgXAorICAgIENDQUNIRV9ESVIgRVhURVJOQUxfVE9PTENIQUlOIENDQUNIRSBDQ0FDSEVfRElTQUJMRSBMSUNFTlNFX1BBVEggU0RLUEtHU1VGRklYIFwKKyAgICBXQVJOX1FBIEVSUk9SX1FBIFdPUktESVIgU1RBTVBDTEVBTiBQS0dEQVRBX0RJUiBCVUlMRF9BUkNIIFNTVEFURV9QS0dBUkNIIgorQkJfSEFTSENPTkZJR19XSElURUxJU1QgPz0gIiR7QkJfSEFTSEJBU0VfV0hJVEVMSVNUfSBEQVRFIFRJTUUgU1NIX0FHRU5UX1BJRCBcCisgICAgU1NIX0FVVEhfU09DSyBQU0VVRE9fQlVJTEQgQkJfRU5WX0VYVFJBV0hJVEUgRElTQUJMRV9TQU5JVFlfQ0hFQ0tTIFwKKyAgICBQQVJBTExFTF9NQUtFIEJCX05VTUJFUl9USFJFQURTIEJCX09SSUdFTlYgQkJfSU5WQUxJRENPTkYgQkJJTkNMVURFRCIKK0JCX1NJR05BVFVSRV9FWENMVURFX0ZMQUdTID89ICJkb2MgZGVwcyBkZXBlbmRzIFwKKyAgICBsb2NrZmlsZXMgdHlwZSB2YXJkZXBzZXhjbHVkZSB2YXJkZXBzIHZhcmRlcHZhbHVlIHZhcmRlcHZhbHVlZXhjbHVkZSBcCisgICAgZmlsZS1jaGVja3N1bXMgcHl0aG9uIGZ1bmMgdGFzayBleHBvcnQgdW5leHBvcnQgbm9leGVjIG5vc3RhbXAgZGlycyBjbGVhbmRpcnMgXAorICAgIHNzdGF0ZS1sb2NrZmlsZS1zaGFyZWQgcHJlZnVuY3MgcG9zdGZ1bmNzIGV4cG9ydF9mdW5jIGRlcHRhc2sgcmRlcHRhc2sgXAorICAgIHJlY3JkZXB0YXNrIG5vZGVwcnJlY3Mgc3RhbXAtYmFzZSBzdGFtcC1leHRyYS1pbmZvIgorCitNTFBSRUZJWCA/Pz0gIiIKK01VTFRJTElCX1ZBUklBTlRTID8/PSAiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvY29uZi1ub3Rlcy50eHQgYi95b2N0by1wb2t5L21ldGEvY29uZi9jb25mLW5vdGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmU2MzE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvY29uZi1ub3Rlcy50eHQKQEAgLTAsMCArMSw4IEBACitDb21tb24gdGFyZ2V0cyBhcmU6CisgICAgY29yZS1pbWFnZS1taW5pbWFsCisgICAgY29yZS1pbWFnZS1zYXRvCisgICAgbWV0YS10b29sY2hhaW4KKyAgICBhZHQtaW5zdGFsbGVyCisgICAgbWV0YS1pZGUtc3VwcG9ydAorCitZb3UgY2FuIGFsc28gcnVuIGdlbmVyYXRlZCBxZW11IGltYWdlcyB3aXRoIGEgY29tbWFuZCBsaWtlICdydW5xZW11IHFlbXV4ODYnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vZGVmYXVsdHNldHVwLmNvbmYgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vZGVmYXVsdHNldHVwLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFjNjViMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9kZWZhdWx0c2V0dXAuY29uZgpAQCAtMCwwICsxLDIzIEBACitpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC1wcm92aWRlcnMuaW5jCitpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC12ZXJzaW9ucy5pbmMKK2luY2x1ZGUgY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LWRpc3Ryb3ZhcnMuaW5jCitpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvd29ybGQtYnJva2VuLmluYworCitUQ01PREUgPz0gImRlZmF1bHQiCityZXF1aXJlIGNvbmYvZGlzdHJvL2luY2x1ZGUvdGNtb2RlLSR7VENNT0RFfS5pbmMKKworVENMSUJDID89ICJnbGliYyIKK3JlcXVpcmUgY29uZi9kaXN0cm8vaW5jbHVkZS90Y2xpYmMtJHtUQ0xJQkN9LmluYworCisjIEFsbG93IHNpbmdsZSBsaWJjIGRpc3Ryb3MgdG8gZGlzYWJsZSB0aGlzIGNvZGUKK1RDTElCQ0FQUEVORCA/PSAiLSR7VENMSUJDfSIKK1RNUERJUiAuPSAiJHtUQ0xJQkNBUFBFTkR9IgorCitDQUNIRSA9ICIke1RNUERJUn0vY2FjaGUvJHtUQ01PREV9LSR7VENMSUJDfSR7QFsnJywgJy8nICsgc3RyKGQuZ2V0VmFyKCdNQUNISU5FJywgVHJ1ZSkpXVtib29sKGQuZ2V0VmFyKCdNQUNISU5FJywgVHJ1ZSkpXX0ke0BbJycsICcvJyArIHN0cihkLmdldFZhcignU0RLTUFDSElORScsIFRydWUpKV1bYm9vbChkLmdldFZhcignU0RLTUFDSElORScsIFRydWUpKV19IgorCitVU0VSX0NMQVNTRVMgPz0gIiIKK1BBQ0tBR0VfQ0xBU1NFUyA/PSAicGFja2FnZV9pcGsiCitJTkhFUklUX0JMQUNLTElTVCA9ICJibGFja2xpc3QiCitJTkhFUklUX0RJU1RSTyA/PSAiZGViaWFuIGRldnNoZWxsIHNzdGF0ZSBsaWNlbnNlIgorSU5IRVJJVCArPSAiJHtQQUNLQUdFX0NMQVNTRVN9ICR7VVNFUl9DTEFTU0VTfSAke0lOSEVSSVRfRElTVFJPfSAke0lOSEVSSVRfQkxBQ0tMSVNUfSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvYXMtbmVlZGVkLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2FzLW5lZWRlZC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYyNDlmZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2FzLW5lZWRlZC5pbmMKQEAgLTAsMCArMSwxNyBAQAorCitBU05FRURFRCA9ICItV2wsLS1hcy1uZWVkZWQiCisKK0FTTkVFREVEX3BuLWJhYmVsdHJhY2UgPSAiIgorQVNORUVERURfcG4tY29uc29sZS10b29scyA9ICIiCitBU05FRURFRF9wbi1kaXN0Y2MgPSAiIgorQVNORUVERURfcG4tb3Blbm9iZXggPSAiIgorQVNORUVERURfcG4taWN1ID0gIiIKK0FTTkVFREVEX3BuLXhzZXJ2ZXIta2RyaXZlLXhvbWFwID0gIiIKK0FTTkVFREVEX3BuLW1pbmltbyA9ICIiCitBU05FRURFRF9wbi1wY2l1dGlscyA9ICIiCitBU05FRURFRF9wbi1wdXp6bGVzID0gIiIKK0FTTkVFREVEX3BuLWRpYWxlciA9ICIiCitBU05FRURFRF9wbi1wdWxzZWF1ZGlvID0gIiIKK0FTTkVFREVEX3BuLXJwbSA9ICIiCisKK1RBUkdFVF9MREZMQUdTICs9ICIke0FTTkVFREVEfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtZGlzdHJvdmFycy5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LWRpc3Ryb3ZhcnMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5Yjc2MmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LWRpc3Ryb3ZhcnMuaW5jCkBAIC0wLDAgKzEsNDkgQEAKK1FBX0xPR0ZJTEUgPSAiJHtUTVBESVJ9L3FhLmxvZyIKKworT0VJTkNMVURFTE9HUyA/PSAieWVzIgorS0VSTkVMX0NPTlNPTEUgPz0gInR0eVMwIgorS0VFUFVJTUFHRSA/Pz0gInllcyIKKworSU1BR0VfTElOR1VBUyA/PSAiZW4tdXMgZW4tZ2IiCitFTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OID89ICIxIgorTE9DQUxFX1VURjhfT05MWSA/PSAiMCIKKworRElTVFJPX0ZFQVRVUkVTX0RFRkFVTFQgPz0gImFsc2EgYXJncCBibHVldG9vdGggZXh0MiBpcmRhIGxhcmdlZmlsZSBwY21jaWEgdXNiZ2FkZ2V0IHVzYmhvc3Qgd2lmaSB4YXR0ciBuZnMgemVyb2NvbmYgcGNpIDNnIG5mYyB4MTEiCitESVNUUk9fRkVBVFVSRVNfTElCQ19ERUZBVUxUID89ICJpcHY0IGlwdjYgbGliYy1iYWNrdHJhY2UgbGliYy1iaWctbWFjcm9zIGxpYmMtYnNkIGxpYmMtY3h4LXRlc3RzIGxpYmMtY2F0Z2V0cyBsaWJjLWNoYXJzZXRzIGxpYmMtY3J5cHQgXAorCQkJCQlsaWJjLWNyeXB0LXVmYyBsaWJjLWRiLWFsaWFzZXMgbGliYy1lbnZ6IGxpYmMtZmN2dCBsaWJjLWZtdG1zZyBsaWJjLWZzdGFiIGxpYmMtZnRyYXZlcnNlIFwKKwkJCQkJbGliYy1nZXRsb2dpbiBsaWJjLWlkbiBsaWJjLWluZXQtYW5sIGxpYmMtbGlibSBsaWJjLWxvY2FsZXMgbGliYy1sb2NhbGUtY29kZSBcCisJCQkJCWxpYmMtbWVtdXNhZ2UgbGliYy1uaXMgbGliYy1uc3N3aXRjaCBsaWJjLXJjbWQgbGliYy1ydGxkLWRlYnVnIGxpYmMtc3Bhd24gbGliYy1zdHJlYW1zIGxpYmMtc3VucnBjIFwKKwkJCQkJbGliYy11dG1wIGxpYmMtdXRtcHggbGliYy13b3JkZXhwIGxpYmMtcG9zaXgtY2xhbmctd2NoYXIgbGliYy1wb3NpeC1yZWdleHAgbGliYy1wb3NpeC1yZWdleHAtZ2xpYmMgXAorCQkJCQlsaWJjLXBvc2l4LXdjaGFyLWlvIgorRElTVFJPX0ZFQVRVUkVTX0xJQkMgPz0gIiR7RElTVFJPX0ZFQVRVUkVTX0xJQkNfREVGQVVMVH0iCitESVNUUk9fRkVBVFVSRVNfTElCQ19jbGFzcy1uYXRpdmVzZGsgPSAiJHtESVNUUk9fRkVBVFVSRVNfTElCQ19ERUZBVUxUfSIKK0RJU1RST19GRUFUVVJFUyA/PSAiJHtESVNUUk9fRkVBVFVSRVNfREVGQVVMVH0gJHtESVNUUk9fRkVBVFVSRVNfTElCQ30iCisKK0lNQUdFX0ZFQVRVUkVTID89ICIiCisKKyMgVGhpcyBpcyBhIGxpc3Qgb2YgcGFja2FnZXMgdGhhdCBhcmUgdXNlZCBieSB0aGUgYnVpbGQgc3lzdGVtIHRvIGJ1aWxkIHRoZSBkaXN0cmlidXRpb24sIHRoZXkgYXJlIG5vdAorIyBkaXJlY3RseSBwYXJ0IG9mIHRoZSBkaXN0cmlidXRpb24uIAorSE9TVFRPT0xTX1dISVRFTElTVF9HUEwtMy4wID89ICIiCitXSElURUxJU1RfR1BMLTMuMCA/PSAibGVzcyIKK0xHUEx2Ml9XSElURUxJU1RfR1BMLTMuMCA/PSAibGliYXNzdWFuIGdudXRscyBsaWJ0YXNuMSBsaWJpZG4iCisKK0NPTU1FUkNJQUxfQVVESU9fUExVR0lOUyA/PSAiIgorIyBDT01NRVJDSUFMX0FVRElPX1BMVUdJTlMgPz0gImdzdC1wbHVnaW5zLXVnbHktbWFkIGdzdC1wbHVnaW5zLXVnbHktbXBlZ2F1ZGlvcGFyc2UiCitDT01NRVJDSUFMX1ZJREVPX1BMVUdJTlMgPz0gIiIKKyMgQ09NTUVSQ0lBTF9WSURFT19QTFVHSU5TID89ICJnc3QtcGx1Z2lucy11Z2x5LW1wZWcyZGVjIGdzdC1wbHVnaW5zLXVnbHktbXBlZ3N0cmVhbSBnc3QtcGx1Z2lucy1iYWQtbXBlZ3ZpZGVvcGFyc2UiCitDT01NRVJDSUFMX1FUID89ICIiCisjIENPTU1FUkNJQUxfUVQgPz0gInFtbXAiCisjIFNldCBvZiBjb21tb24gbGljZW5zZXMgdXNlZCBmb3IgbGljZW5zZS5iYmNsYXNzCitDT01NT05fTElDRU5TRV9ESVIgPz89ICIke0NPUkVCQVNFfS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcyIKKworQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTID8/PSAiMCIKKworTk8zMkxJQlMgPz89ICIxIgorCisjIERlZmF1bHQgdG8gZW1pdHRpbmcgbG9nZmlsZXMgaWYgYSBidWlsZCBmYWlscy4KK0JCSU5DTFVERUxPR1MgPz89ICJ5ZXMiCitTREtfVkVSU0lPTiA/Pz0gIm5vZGlzdHJvLjAiCitESVNUUk9fVkVSU0lPTiA/Pz0gIm5vZGlzdHJvLjAiCisKKyMgTWlzc2luZyBjaGVja3N1bXMgc2hvdWxkIHJhaXNlIGFuIGVycm9yCitCQl9TVFJJQ1RfQ0hFQ0tTVU0gPSAiMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtcHJvdmlkZXJzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtcHJvdmlkZXJzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Zjg0ZDVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC1wcm92aWRlcnMuaW5jCkBAIC0wLDAgKzEsNTEgQEAKKyMKKyMgRGVmYXVsdCB2aXJ0dWFsIHByb3ZpZGVycworIworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZGIgPz0gImRiIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZGItbmF0aXZlID89ICJkYi1uYXRpdmUiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID89ICJ4c2VydmVyLXhvcmciCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyLXhmODYgPz0gInhzZXJ2ZXIteG9yZyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2VnbCA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2xlczEgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbGVzMiA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL21lc2EgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzID89ICJvcGtnLXV0aWxzIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcy1uYXRpdmUgPz0gIm9wa2ctdXRpbHMtbmF0aXZlIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGlieDExID89ICJsaWJ4MTEiCitQUkVGRVJSRURfUFJPVklERVJfeGY4Ni12aWRlby1pbnRlbCA/PSAieGY4Ni12aWRlby1pbnRlbCIKKworIworIyBEZWZhdWx0IHZpcnR1YWwgcnVudGltZSBwcm92aWRlcnMKKyMKK1ZJUlRVQUwtUlVOVElNRV91cGRhdGUtYWx0ZXJuYXRpdmVzID89ICJ1cGRhdGUtYWx0ZXJuYXRpdmVzLW9wa2ciCitWSVJUVUFMLVJVTlRJTUVfYXBtID89ICJhcG0iCitWSVJUVUFMLVJVTlRJTUVfYWxzYS1zdGF0ZSA/PSAiYWxzYS1zdGF0ZSIKK1ZJUlRVQUwtUlVOVElNRV9nZXRvcHQgPz0gInV0aWwtbGludXgtZ2V0b3B0IgorVklSVFVBTC1SVU5USU1FX3dpcmVsZXNzLXRvb2xzID89ICJpdyB3aXJlbGVzcy10b29scyIKKworIworIyBEZWZhdWx0IHJlY2lwZSBwcm92aWRlcnMKKyMKK1BSRUZFUlJFRF9QUk9WSURFUl9kYnVzLWdsaWIgPz0gImRidXMtZ2xpYiIKK1BSRUZFUlJFRF9QUk9WSURFUl9kYnVzLWdsaWItbmF0aXZlID89ICJkYnVzLWdsaWItbmF0aXZlIgorUFJFRkVSUkVEX1BST1ZJREVSX2dkay1waXhidWYgPz0gImdkay1waXhidWYiCitQUkVGRVJSRURfUFJPVklERVJfbGliZ2NjID89ICJsaWJnY2MiCitQUkVGRVJSRURfUFJPVklERVJfbmF0aXZlc2RrLWxpYmdjYyA/PSAibmF0aXZlc2RrLWxpYmdjYyIKK1BSRUZFUlJFRF9QUk9WSURFUl9saW51eC1saWJjLWhlYWRlcnMgPz0gImxpbnV4LWxpYmMtaGVhZGVycyIKK1BSRUZFUlJFRF9QUk9WSURFUl9uYXRpdmVzZGstbGludXgtbGliYy1oZWFkZXJzID89ICJuYXRpdmVzZGstbGludXgtbGliYy1oZWFkZXJzIgorUFJFRkVSUkVEX1BST1ZJREVSX21hdGNoYm94LXBhbmVsID89ICJtYXRjaGJveC1wYW5lbC0yIgorUFJFRkVSUkVEX1BST1ZJREVSX29wa2cgPz0gIm9wa2ciCitQUkVGRVJSRURfUFJPVklERVJfb3BrZy1uYXRpdmUgPz0gIm9wa2ctbmF0aXZlIgorUFJFRkVSUkVEX1BST1ZJREVSX25hdGl2ZXNkay1vcGtnID89ICJuYXRpdmVzZGstb3BrZyIKK1BSRUZFUlJFRF9QUk9WSURFUl9jb25zb2xlLXRvb2xzID89ICJrYmQiCitQUkVGRVJSRURfUFJPVklERVJfZ3ppcC1uYXRpdmUgPz0gInBpZ3otbmF0aXZlIgorUFJFRkVSUkVEX1BST1ZJREVSX21ha2UgPz0gIm1ha2UiCitQUkVGRVJSRURfUFJPVklERVJfdWRldiA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCdzeXN0ZW1kJywndWRldicsZCl9IgorIyBUaGVyZSBhcmUgaXNzdWVzIHdpdGggcnVudGltZSBwYWNrYWdlcyBhbmQgUFJFRkVSUkVEX1BST1ZJREVSLCBzZWUgWU9DVE8gIzUwNDQgZm9yIGRldGFpbHMKKyMgb24gdGhpcyByYXRoZXIgc3RyYW5nZSBlbnRyeS4KK1BSRUZFUlJFRF9QUk9WSURFUl9ibHVlejQgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdibHVldG9vdGggYmx1ZXo1JywnYmx1ZXo1JywnYmx1ZXo0JyxkKX0iCitQUkVGRVJSRURfUFJPVklERVJfYmx1ZXotaGNpZHVtcCA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ2JsdWV0b290aCBibHVlejUnLCdibHVlejUnLCdibHVlei1oY2lkdW1wJyxkKX0iCisjIEFsdGVybmF0aXZlIGlzIGx0cC1kZHQgaW4gbWV0YS1vZTogbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2x0cC1kZHQvbHRwLWRkdF8wLjAuNC5iYgorUFJFRkVSUkVEX1BST1ZJREVSX2x0cCA/PSAibHRwIgorUFJFRkVSUkVEX1BST1ZJREVSX2dldG9wdCA/PSAidXRpbC1saW51eC1nZXRvcHQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LXZlcnNpb25zLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtdmVyc2lvbnMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MzA2M2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LXZlcnNpb25zLmluYwpAQCAtMCwwICsxLDE1IEBACisjCisjIERlZmF1bHQgcHJlZmVycmVkIHZlcnNpb25zCisjCisKKyMgRm9yY2UgdGhlIHB5dGhvbiB2ZXJzaW9ucyBpbiBvbmUgcGxhY2UKK1BZVEhPTl9CQVNFVkVSU0lPTiA/PSAiMi43IgorUFJFRkVSUkVEX1ZFUlNJT05fcHl0aG9uID89ICIyLjcuOSIKK1BSRUZFUlJFRF9WRVJTSU9OX3B5dGhvbi1uYXRpdmUgPz0gIjIuNy45IgorCisjIEZvcmNlIHRoZSBvbGRlciB2ZXJzaW9uIG9mIGxpYmVyYXRpb24tZm9udHMgdW50aWwgd2UgZml4IHRoZSBmb250Zm9yZ2UgaXNzdWUKK1BSRUZFUlJFRF9WRVJTSU9OX2xpYmVyYXRpb24tZm9udHMgPz0gIjEuMDQiCisKKyMgRm9yY2UgZGItbmF0aXZlJ3MgdmVyc2lvbiB0byBrZWVwIHN5bmMgd2l0aCBkYiB3aGlsZQorIyAnQUdQTC0zLjAnIGluICR7SU5DT01QQVRJQkxFX0xJQ0VOU0V9IGJsYWNrbGlzdAorUFJFRkVSUkVEX1ZFUlNJT05fZGItbmF0aXZlID0gIiR7QGluY29tcGF0aWJsZV9saWNlbnNlX2NvbnRhaW5zKCdBR1BMLTMuMCcsICc1LiUnLCAnNi4lJywgZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGlzdHJvX2FsaWFzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2Rpc3Ryb19hbGlhcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQzZGE5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2Rpc3Ryb19hbGlhcy5pbmMKQEAgLTAsMCArMSw1MzYgQEAKKyMKKyMgVGhpcyBpcyBhIGxpc3QgZm9yIHRyYWNraW5nIHN0YXR1cyBvZiBwYWNrYWdlIHJlbGF0aXZlIHRvIE1ham9yCisjIGRpc3RyaWJ1dGlvbnMgc3VjaCBhcyBGZWRvcmEsIFVidW50dSwgRGViaWFuLCAuLi4gVGhlIHBhY2thZ2UKKyMgbmFtZSBpcyB0aGUgbWFqb3IgZGlzdHJpYnV0aW9uIGVxdWl2YWxlbnQgdG8gdGhlIG5hbWUgdXNlZCBpbiBvZS1jb3JlCisjCisjIFRoZSBmb3JtYXQgaXMgYXMgYSBiaXRiYWtlIHZhcmlhYmxlIG92ZXJyaWRlIGZvciBlYWNoIHJlY2lwZQorIworIyAgICAgICBESVNUUk9fUE5fQUxJQVNfcG4tPHJlY2lwZSBuYW1lPiA9ICJEaXN0cm8xPTxwa2duYW1lPiBEaXN0cm8yPTxwa2duYW1lPiIKKyMKKyMgUGxlYXNlIGtlZXAgdGhpcyBsaXN0IGluIGFscGhhYmV0aWNhbCBvcmRlci4KKyMKK0RJU1RST19QTl9BTElBU19wbi1hYWluYSA9ICJJbnRlbCIKK0RJU1RST19QTl9BTElBU19wbi1hYml3b3JkLWVtYmVkZGVkID0gIkZlZG9yYT1hYml3b3JkIFVidW50dT1hYml3b3JkIgorRElTVFJPX1BOX0FMSUFTX3BuLWFkdC1pbnN0YWxsZXIgPSAiSW50ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tYWxzYS1zdGF0ZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWFsc2EtdXRpbHMtYWxzYWNvbmYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1hdGsgPSAiRmVkb3JhPWF0ayBPcGVuU3VTRT1hdGsiCitESVNUUk9fUE5fQUxJQVNfcG4tYXVnZWFzID0gIlVidW50dT1saWJhdWdlYXMwIERlYmlhbj1saWJhdWdlYXMwIgorRElTVFJPX1BOX0FMSUFTX3BuLWF2YWhpLXVpID0gIlVidW50dT1hdmFoaS1kaXNjb3ZlciBEZWJpYW49YXZhaGktZGlzY292ZXIiCitESVNUUk9fUE5fQUxJQVNfcG4tYmFiZWx0cmFjZSA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1iZHdnYyA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1iaWdyZXFzcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tYmlncmVxc3Byb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLWJqYW0gPSAiT3BlblN1U0U9Ym9vc3QtamFtIERlYmluYT1iamFtIgorRElTVFJPX1BOX0FMSUFTX3BuLWJsa3Rvb2wgPSAiRGViaWFuPWJsa3Rvb2wgTWFuZHJpdmE9YmxrdG9vbCIKK0RJU1RST19QTl9BTElBU19wbi1ibHVlejQgPSAiVWJ1bnR1PWJsdWV6IERlYmlhbj1ibHVlei11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi1ibHVlejUgPSAiRmVkb3JhPWJsdWV6ICBPcGVuc3VzZT1ibHVleiIKK0RJU1RST19QTl9BTElBU19wbi1ibHVlei1kdGwxLXdvcmthcm91bmQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1ib290Y2hhcnQyID0gIkZlZG9yYT1ib290Y2hhcnQyIE9wZW5zdXNlPWJvb3RjaGFydCIKK0RJU1RST19QTl9BTElBU19wbi1idHJmcy10b29scyA9ICJEZWJpYW49YnRyZnMtdG9vbHMgRmVkb3JhPWJ0cmZzLXByb2dzIgorRElTVFJPX1BOX0FMSUFTX3BuLWJ1aWxkLWFwcGxpYW5jZS1pbWFnZSA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1idWlsZC1jb21wYXJlID0gIk9wZW5zdXNlPWJ1aWxkLWNvbXBhcmUgRmVkb3JhPWJ1aWxkLWNvbXBhcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tYnVpbGRlciA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWJ1aWxkdG9vbHMtdGFyYmFsbCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNhbGlicmF0ZXByb3RvID0gIk9TUERUIHVwc3RyZWFtPWh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy94b3JnL3Byb3RvL2NhbGlicmF0ZXByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLWNkcnRvb2xzID0gIk9wZW5TVVNFPWNkcnRvb2xzIE9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWNoa2NvbmZpZy1hbHRlcm5hdGl2ZXMgPSAiTWFuZHJpdmE9Y2hrY29uZmlnIERlYmlhbj1jaGtjb25maWciCitESVNUUk9fUE5fQUxJQVNfcG4tY2xhd3MtcGx1Z2luLWd0a2h0bWwyLXZpZXdlciA9ICJGZWRvcmE9Y2xhd3MtbWFpbC1wbHVnaW5zIE9wZW5TdVNFPWNsYXdzLW1haWwtZXh0cmEtcGx1Z2lucyBEZWJpYW49Y2xhd3MtbWFpbC1leHRyYS1wbHVnaW5zIgorRElTVFJPX1BOX0FMSUFTX3BuLWNsYXdzLXBsdWdpbi1tYWlsZGlyID0gIkZlZG9yYT1jbGF3cy1tYWlsLXBsdWdpbnMgT3BlblN1U0U9Y2xhd3MtbWFpbC1leHRyYS1wbHVnaW5zIERlYmlhbj1jbGF3cy1tYWlsLWV4dHJhLXBsdWdpbnMiCitESVNUUk9fUE5fQUxJQVNfcG4tY2xhd3MtcGx1Z2luLW1haWxtYm94ID0gIkZlZG9yYT1jbGF3cy1tYWlsLXBsdWdpbnMgT3BlblN1U0U9Y2xhd3MtbWFpbC1leHRyYS1wbHVnaW5zIERlYmlhbj1jbGF3cy1tYWlsLWV4dHJhLXBsdWdpbnMiCitESVNUUk9fUE5fQUxJQVNfcG4tY2xhd3MtcGx1Z2luLXJzc3lsID0gIkZlZG9yYT1jbGF3cy1tYWlsLXBsdWdpbnMgT3BlblN1U0U9Y2xhd3MtbWFpbC1leHRyYS1wbHVnaW5zIERlYmlhbj1jbGF3cy1tYWlsLWV4dHJhLXBsdWdpbnMiCitESVNUUk9fUE5fQUxJQVNfcG4tY2xpcGJvYXJkLW1hbmFnZXIgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1jbHV0dGVyID0gIkZlZG9yYT1jbHV0dGVyIE9wZW5TdXNlPWNsdXR0ZXIgVWJ1bnR1PWNsdXR0ZXItMS4wIE1hbmRyaXZhPWNsdXR0ZXIgRGViaWFuPWNsdXR0ZXIiCitESVNUUk9fUE5fQUxJQVNfcG4tY2x1dHRlci0xLjggPSAiRmVkb3JhPWNsdXR0ZXIgT3BlblN1c2U9Y2x1dHRlciBVYnVudHU9Y2x1dHRlci0xLjAgTWFuZHJpdmE9Y2x1dHRlciBEZWJpYW49Y2x1dHRlciIKK0RJU1RST19QTl9BTElBU19wbi1jbHV0dGVyLWdzdC0xLjAgPSAiRGViaWFuPWNsdXR0ZXItZ3N0IFVidW50dT1jbHV0dGVyLWdzdCBGZWRvcmE9Y2x1dHRlci1nc3QiCitESVNUUk9fUE5fQUxJQVNfcG4tY2x1dHRlci1nc3QtMS44ID0gIkZlZG9yYT1jbHV0dGVyLWdzdCBEZWJpYW49bGliY2x1dHRlci1nc3QiCitESVNUUk9fUE5fQUxJQVNfcG4tY2x1dHRlci1ndGstMS4wID0gIkRlYmlhbj1jbHV0dGVyLWd0ayBVYnVudHU9Y2x1dHRlci1ndGsgRmVkb3JhPWNsdXR0ZXItZ3RrIgorRElTVFJPX1BOX0FMSUFTX3BuLWNsdXR0ZXItZ3RrLTEuOCA9ICJGZWRvcmE9Y2x1dHRlci1ndGsgT3BlblN1U0U9Y2x1dHRlci1ndGsgVWJ1bnR1PWNsdXR0ZXItZ3RrLTAuMTAgTWFuZHJpdmE9Y2x1dHRlci1ndGsgRGViaWFuPWNsdXR0ZXItZ3RrIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvZ2wtMS4wID0gIkRlYmlhbj1jb2dsIFVidW50dT1jb2dsIEZlZG9yYT1jb2dsIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvZ2wgPSAiRmVkb3JhPWNvZ2wgT3BlblN1c2U9Y29nbCBVYnVudHU9Y29nbCBNYW5kcml2YT1jb2dsIERlYmlhbj1jb2dsIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvbXBvc2l0ZXByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWNvbXBvc2l0ZXByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvbm5tYW4gPSAiTWVlZ289Y29ubm1hbiIKK0RJU1RST19QTl9BTElBU19wbi1jb25ubWFuLWNvbmYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb25ubWFuLWdub21lID0gIkludGVsIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvbnNvbGUtdG9vbHMgPSAiRGViaWFuPWNvbnNvbGUtdG9vbHMgVWJ1bnR1PWNvbnNvbGUtdG9vbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1iYXNlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1jbHV0dGVyID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1kaXJlY3RmYiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1rZXJuZWwtZGV2ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1sc2IgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLWxzYi1kZXYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLWxzYi1xdDMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLWxzYi1zZGsgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLW1pbmltYWwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLW1pbmltYWwtZGV2ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtbWluaW1hbC1tdGR1dGlscyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtcnQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLXJ0LXNkayA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2Utc2F0byA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2Utc2F0by1kZXYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLXNhdG8tc2RrID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS10ZXN0bWFzdGVyID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS10ZXN0bWFzdGVyLWluaXRyYW1mcyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2Utd2VzdG9uID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS14MTEgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jcm9zcy1sb2NhbGVkZWYgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tY3J5cHRvZGV2LWxpbnV4ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY3J5cHRvZGV2LW1vZHVsZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNyeXB0b2Rldi10ZXN0cyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWN3YXV0b21hY3JvcyA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vY3dhdXRvbWFjcm9zLmJlcmxpb3MuZGUvIgorRElTVFJPX1BOX0FMSUFTX3BuLWRhbWFnZXByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWRhbWFnZXByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLWRiID0gIkRlYmlhbj1kYjUuMSBVYnVudHU9ZGI1LjEiCitESVNUUk9fUE5fQUxJQVNfcG4tZGJ1cy1wdGVzdCA9ICJGZWRvcmE9ZGJ1cyBVYnVudHU9ZGJ1cyIKK0RJU1RST19QTl9BTElBU19wbi1kYnVzLXRlc3QgPSAiRmVkb3JhPWRidXMgVWJ1bnR1PWRidXMiCitESVNUUk9fUE5fQUxJQVNfcG4tZGJ1cy13YWl0ID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tZGVwbW9kd3JhcHBlci1jcm9zcyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWRpcmVjdGZiLWV4YW1wbGVzID0gIkRlYmlhbj1kaXJlY3RmYiBGZWRvcmE9ZGlyZWN0ZmIiCitESVNUUk9fUE5fQUxJQVNfcG4tZGlzdGNjID0gIkRlYmlhbj1kaXN0Y2MgRmVkb3JhPWRpc3RjYyIKK0RJU1RST19QTl9BTElBU19wbi1kaXN0Y2MtY29uZmlnID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tZG14cHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tZG14cHJvdG8gVWJ1bnR1PXgxMXByb3RvLWRteCBEZWJpYW49eDExcHJvdG8tZG14IgorRElTVFJPX1BOX0FMSUFTX3BuLWRvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMgPSAiRmVkb3JhPWRvY2Jvb2stc3R5bGUtZHNzc2wgVWJ1bnR1PWRvY2Jvb2stZHNzc2wiCitESVNUUk9fUE5fQUxJQVNfcG4tZG9jYm9vay1zZ21sLWR0ZC0zLjEgPSAiRmVkb3JhPWRvY2Jvb2stZHRkcyBNYW5kcml2YT1kb2Nib29rLWR0ZDMxLXNnbWwiCitESVNUUk9fUE5fQUxJQVNfcG4tZG9jYm9vay1zZ21sLWR0ZC00LjEgPSAiRmVkb3JhPWRvY2Jvb2stZHRkcyBNYW5kcml2YT1kb2Nib29rLWR0ZDQxLXNnbWwiCitESVNUUk9fUE5fQUxJQVNfcG4tZG9jYm9vay1zZ21sLWR0ZC00LjUgPSAiRmVkb3JhPWRvY2Jvb2stZHRkcyBNYW5kcml2YT1kb2Nib29rLWR0ZDQyLXNnbWwiCitESVNUUk9fUE5fQUxJQVNfcG4tZG9jYm9vay14bWwtZHRkNCA9ICJVYnVudHU9ZG9jYm9vay14bWwgRmVkb3JhPWRvY2Jvb2stZHRkcyIKK0RJU1RST19QTl9BTElBU19wbi1kb2Nib29rLXhtbC1kdGQ0LW5hdGl2ZSA9ICJVYnVudHU9ZG9jYm9vay14bWwgRmVkb3JhPWRvY2Jvb2stZHRkcyIKK0RJU1RST19QTl9BTElBU19wbi1kb2Nib29rLXhzbC1zdHlsZXNoZWV0cyA9ICJGZWRvcmE9ZG9jYm9vay14c2wtc3R5bGVzaGVldHMgT3BlbnN1c2U9ZG9jYm9vay14c2wtc3R5bGVzaGVldHMiCitESVNUUk9fUE5fQUxJQVNfcG4tZHJpMnByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWRyaTJwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1kcmkzcHJvdG8gPSAiRmVkb3JhPWRyaTNwcm90byBPcGVuc3VzZT1kcmkzcHJvdG8tZGV2ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tZHJvcGJlYXIgPSAiRGViaWFuPWRyb3BiZWFyIFVidW50dT1kcm9wYmVhciIKK0RJU1RST19QTl9BTElBU19wbi1kdGMgPSAiRmVkb3JhPWR0YyBVYnVudHU9ZHRjIgorRElTVFJPX1BOX0FMSUFTX3BuLWVkcy10b29scyA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLWVlZS1hY3BpLXNjcmlwdHMgPSAiRGViaWFuPWVlZXBjLWFjcGktc2NyaXB0cyBVYnVudHU9ZWVlcGMtYWNwaS1zY3JpcHRzIgorRElTVFJPX1BOX0FMSUFTX3BuLWVnbGliYyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWVnbGliYy1pbml0aWFsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZWdsaWJjLWxvY2FsZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWVnbGliYy1tdHJhY2UgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1lZ2xpYmMtc2NyaXB0cyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWVnbGluZm8tZmIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1lZ2xpbmZvLXgxMSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWVtZ2QtZHJpdmVyLWJpbiA9ICJJbnRlbCIKK0RJU1RST19QTl9BTElBU19wbi1lbmNvZGluZ3MgPSAiVWJ1bnR1PXhmb250cy1lbmNvZGluZ3MgTWFuZHJpdmE9eDExLWZvbnQtZW5jb2RpbmdzIERlYmlhbj14Zm9udHMtZW5jb2RpbmdzIgorRElTVFJPX1BOX0FMSUFTX3BuLWV2aWVleHQgPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tZXZpZWV4dCBEZWJpYW49eDExcHJvdG8tZXZpZSIKK0RJU1RST19QTl9BTElBU19wbi1maXhlc3Byb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWZpeGVzcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tZm9udC1hbGlhcyA9ICJGZWRvcmE9eG9yZy14MTEtZm9udHMtYmFzZSBNYW5kcml2YT14MTEtZm9udC1hbGlhcyBNZWVnbz14b3JnLXgxMS1mb250cyIKK0RJU1RST19QTl9BTElBU19wbi1mb250Y2FjaGVwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1mb250Y2FjaGVwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1mb250c3Byb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWZvbnRzcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tZm9udC11dGlsID0gIk1lZWdvPXhvcmcteDExLWZvbnQtdXRpbHMgRmVkb3JhPXhvcmcteDExLWZvbnQtdXRpbHMgVWJ1bnR1PXhmb250cy11dGlscyBNYW5kcml2YT14MTEtZm9udC11dGlsIERlYmlhbj14Zm9udHMtdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tZm9ybWZhY3RvciA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWZvdG93YWxsID0gIkZlZG9yYT1mb3Rvd2FsbCBVYnVudHU9Zm90b3dhbGwiCitESVNUUk9fUE5fQUxJQVNfcG4tZnN0ZXN0cyA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLWdhaWwgPSAiRmVkb3JhPWdhaWwgVWJ1bnR1PWxpYmdhaWwtMy0wIgorRElTVFJPX1BOX0FMSUFTX3BuLWdha3UgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1nYWxhZ28tZGFlbW9uID0gIkRlYmlhbj1nYWxhZ28tZGFlbW9uIFVidW50dT1nYWxhZ28tZGFlbW9uIgorRElTVFJPX1BOX0FMSUFTX3BuLWdjYy1jcm9zcy1pbml0aWFsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2NjLWNyb3NzLWluaXRpYWwtaTU4NiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWdjYy1jcm9zc3Nkay1pbml0aWFsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2NjLWNyb3Nzc2RrLWluaXRpYWwteDg2XzY0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2NjbWFrZWRlcCA9ICJNYW5kcml2YT1nY2NtYWtlZGVwIFVidW50dT14dXRpbHMtZGV2IgorRElTVFJPX1BOX0FMSUFTX3BuLWdjYy1ydW50aW1lID0gIlVidW50dT1nY2MgRmVkb3JhPWdjYyIKK0RJU1RST19QTl9BTElBU19wbi1nY2Mtc2FuaXRpemVycyA9ICJVYnVudHU9Z2NjIEZlZG9yYT1nY2MiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2NjLXNvdXJjZSA9ICJVYnVudHU9Z2NjIEZlZG9yYT1nY2MiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2NvbmYtZGJ1cyA9ICJNZWVnbz1HQ29uZi1kYnVzIgorRElTVFJPX1BOX0FMSUFTX3BuLWdkay1waXhidWYgPSAiRGViaWFuPWxpYmdkay1waXhidWYyLjAgRmVkb3JhPWdkay1waXhidWYiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2RrLXBpeGJ1Zi1jc291cmNlID0gIkRlYmlhbj1saWJnZGstcGl4YnVmMi4wLTAgRmVkb3JhPWdkay1waXhidWYyIgorRElTVFJPX1BOX0FMSUFTX3BuLWdldHRleHQtbWluaW1hbCA9ICJEZWJpYW49Z2V0dGV4dCBGZWRvcmE9Z2V0dGV4dCIKK0RJU1RST19QTl9BTElBU19wbi1nbGliLTIuMCA9ICJNZWVnbz1nbGliMiBGZWRvcmE9Z2xpYjIgT3BlblN1U0U9Z2xpYjIgVWJ1bnR1PWdsaWIyLjAgTWFuZHJpdmE9Z2xpYjIuMCBEZWJpYW49Z2xpYjIuMCIKK0RJU1RST19QTl9BTElBU19wbi1nbGliYy1sb2NhbGUgPSAiT3BlblN1U0U9Z2xpYmMtbG9jYWxlIEZlZG9yYT1nbGliYy1kZXZlbCIKK0RJU1RST19QTl9BTElBU19wbi1nbGliYy1tdHJhY2UgPSAiRmVkb3JhPWdsaWJjLXV0aWxzIFVidW50dT1saWJjLWRldi1iaW4iCitESVNUUk9fUE5fQUxJQVNfcG4tZ2xpYmMtc2NyaXB0cyA9ICJGZWRvcmE9Z2xpYmMgVWJ1bnR1PWxpYmMtYmluIgorRElTVFJPX1BOX0FMSUFTX3BuLWdscHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tZ2xwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1nbm9tZS1kZXNrdG9wLXRlc3RpbmcgPSAiRGViaWFuPWdub21lLWRlc2t0b3AtdGVzdGluZyBGZWRvcmE9Z25vbWUtZGVza3RvcC10ZXN0aW5nIgorRElTVFJPX1BOX0FMSUFTX3BuLWdudS1jb25maWcgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1ncHRmZGlzayA9ICJGZWRvcmE9Z2Rpc2sgVWJ1bnR1PWdkaXNrIgorRElTVFJPX1BOX0FMSUFTX3BuLWdydWItZWZpID0gIkRlYmlhbj1ncnViLWVmaSBGZWRvcmE9Z3J1YjItZWZpIgorRElTVFJPX1BOX0FMSUFTX3BuLWdydWItZWZpLWk1ODYgPSAiRGViaWFuPWdydWItZWZpIEZlZG9yYT1ncnViMi1lZmkiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3J1Yi1lZmkteDg2LTY0ID0gIkRlYmlhbj1ncnViLWVmaSBGZWRvcmE9Z3J1YjItZWZpIgorRElTVFJPX1BOX0FMSUFTX3BuLWdzdC1wbGF5ZXIgPSAiVWJ1bnR1PWdzdC1wbGF5ZXIgRmVkb3JhPWdzdHJlYW1lci1wbGF5ZXIiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3N0LXBsdWdpbi1ibHVldG9vdGggPSAiVWJ1bnR1PWxpYmdzdHJlYW1lci1wbHVnaW5zLWJhc2UgRmVkb3JhPWdzdHJlYW1lci1wbHVnaW5zLWJhc2UiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3N0cmVhbWVyMS4wID0gIkRlYmlhbj1nc3RyZWFtZXIxLjAgVWJ1bnR1PWdzdHJlYW1lcjEuMCIKK0RJU1RST19QTl9BTElBU19wbi1nc3RyZWFtZXIxLjAtbWV0YS1iYXNlID0gIk1lZWdvPWdzdHJlYW1lciBGZWRvcmE9Z3N0cmVhbWVyIE9wZW5TdVNFPWdzdHJlYW1lciBVYnVudHU9Z3N0cmVhbWVyMC4xMCIKK0RJU1RST19QTl9BTElBU19wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQgPSAiRGViaWFuPWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCBVYnVudHU9Z3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkIgorRElTVFJPX1BOX0FMSUFTX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgPSAiRGViaWFuPWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgVWJ1bnR1PWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZCA9ICJEZWJpYW49Z3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZCBVYnVudHU9Z3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkIgorRElTVFJPX1BOX0FMSUFTX3BuLWdzdHJlYW1lcjEuMC1ydHNwLXNlcnZlciA9ICJVYnVudHU9Z3N0cmVhbWVyMC4xMC1ydHNwIEZlZG9yYT1nc3RyZWFtZXItcnRzcCIKK0RJU1RST19QTl9BTElBU19wbi1ndGsrID0gIk1lZWdvPWd0azIgRmVkb3JhPWd0azIgT3BlblN1U0U9Z3RrMiBVYnVudHU9Z3RrKzIuMCBNYW5kcml2YT1ndGsrMi4wIERlYmlhbj1ndGsrMi4wIgorRElTVFJPX1BOX0FMSUFTX3BuLWd0ayszID0gIlVidW50dT1ndGsrMy4wIERlYmlhbj1ndGsrMy4wIEZlZG9yYT1ndGszIgorRElTVFJPX1BOX0FMSUFTX3BuLWd0ay1kb2Mtc3R1YiA9ICJGZWRvcmE9Z3RrLWRvYyBVYnVudHU9Z3RrLWRvYyIKK0RJU1RST19QTl9BTElBU19wbi1ndGstZW5naW5lcyA9ICJGZWRvcmE9Z3RrMi1lbmdpbmVzIE9wZW5TdVNFPWd0azItZW5naW5lcyBVYnVudHU9Z3RrMi1lbmdpbmVzIE1hbmRyaXZhPWd0ay1lbmdpbmVzMiBEZWJpYW49Z3RrMi1lbmdpbmVzIgorRElTVFJPX1BOX0FMSUFTX3BuLWd0ay1zYXRvLWVuZ2luZSA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLWd0ay10aGVtZS10b3J0dXJlciA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vd2lraS5sYXB0b3Aub3JnL2dvL0dUS19mb3JfT0xQQyIKK0RJU1RST19QTl9BTElBU19wbi1ndGstaWNvbi11dGlscy1uYXRpdmUgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3VtbWlib290ID0gIkRlYmlhbj1ndW1taWJvb3QgRmVkb3JhPWd1bW1pYm9vdCIKK0RJU1RST19QTl9BTElBU19wbi1oZWxsby1tb2QgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1ob3N0YXAtY29uZiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWh3bGF0ZGV0ZWN0ID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWljZWNjLWNyZWF0ZS1lbnYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1pbml0LWlmdXBkb3duID0gIkRlYmlhbj1pZnVwZG93biBVYnVudHU9aWZ1cGRvd24iCitESVNUUk9fUE5fQUxJQVNfcG4taW5pdHJhbWZzLWJvb3QgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1pbml0cmFtZnMtZnJhbWV3b3JrID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4taW5pdHJhbWZzLWxpdmUtYm9vdCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWluaXRyYW1mcy1saXZlLWluc3RhbGwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLWVmaSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWluaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpLXRlc3RmcyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWluaXRyYW1mcy1saXZlLWluc3RhbGwtdGVzdGZzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4taW5pdHNjcmlwdHMgPSAiRmVkb3JhPWluaXRzY3JpcHRzIE1hbmRyYXZpYT1pbml0c2NyaXB0cyIKK0RJU1RST19QTl9BTElBU19wbi1pbnB1dHByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWlucHV0cHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4taXByb3V0ZTIgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tanBlZyA9ICJPcGVuU3VTRT1saWJqcGVnIFVidW50dT1saWJqcGVnNjIiCitESVNUUk9fUE5fQUxJQVNfcG4ta2Jwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1rYnByb3RvIFVidW50dT14MTFwcm90by1rYi1kZXYgRGViaWFuPXgxMXByb3RvLWtiLWRldiIKK0RJU1RST19QTl9BTElBU19wbi1rY29uZmlnLWZyb250ZW5kcyA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1rZXJuZWwtZGV2c3JjID0gIkRlYmlhbj1saW51eC1iYXNlIFVidW50dT1saW51eCIKK0RJU1RST19QTl9BTElBU19wbi1rZXJuZWxzaGFyayA9ICJNYW5kcml2YT1rZXJuZWxzaGFyayBVYnVudHU9a2VybmVsc2hhcmsiCitESVNUUk9fUE5fQUxJQVNfcG4ta2Vybi10b29scy1uYXRpdmUgPSAiV2luZHJpdmVyIgorRElTVFJPX1BOX0FMSUFTX3BuLWtleW1hcHMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1rZiA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1sYW1lID0gIkRlYmlhbj1sYW1lIFVidW50dT1sYW1lIgorRElTVFJPX1BOX0FMSUFTX3BuLWxhdGVuY3l0b3AgPSAiTWVlZ289bGF0ZW5jeXRvcCBGZWRvcmE9bGF0ZW5jeXRvcCBEZWJpYW49bGF0ZW5jeXRvcCBPcGVuU3VTRT1sYXRlbmN5dG9wIgorRElTVFJPX1BOX0FMSUFTX3BuLWxkY29uZmlnLW5hdGl2ZSA9ICJVYnVudHU9bGliYy1iaW4gRmVkb3JhPWdsaWJjIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmE1MiA9ICJNYW5kcml2YT1hNTJkZWMgRGViaWFuPWE1MmRlYyIKK0RJU1RST19QTl9BTElBU19wbi1saWJhY3BpID0gIlVidW50dT1saWJhY3BpIE1hbmRyaXZhPWxpYmFjcGkiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliYXRvbWljcy1vcHMgPSAiTWVlZ289bGliYXRvbWljLW9wcyBEZWJpYW49bGliYXRvbWljLW9wcyBVYnVudHU9bGliYXRvbWljLW9wcyBPcGVuU3VTRT1saWJhdG9taWMtb3BzIE1hbmRyaXZhPWxpYmF0b21pYy1vcHMiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliY2dyb3VwID0gIlVidW50dT1saWJjZ3JvdXAxIERlYmlhbj1saWJjZ3JvdXAxIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmNoZWNrID0gIlVidW50dT1jaGVjayBGZWRvcmE9Y2hlY2sgT3BlblN1U0U9Y2hlY2siCitESVNUUk9fUE5fQUxJQVNfcG4tbGliY2xhc3MtaXNhLXBlcmwgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZHJtLXBvdWxzYm8gPSAiRGViaWFuPWxpYmRybS1pbnRlbDEgVWJ1bnR1PWxpYmRybS1pbnRlbDEiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZHVtcHZhbHVlLXBlcmwgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZW52LXBlcmwgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZXJhdGlvbi1mb250cyA9ICJVYnVudHU9Zm9udHMtbGliZXJhdGlvbiBGZWRvcmE9bGliZXJhdGlvbi1mb250cy10dGYiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZmFrZWtleSA9ICJNZWVnbzEuMD1saWJmYWtla2V5IERlYmlhbj1saWJmYWtla2V5IgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmZpbGUtY2hlY2t0cmVlLXBlcmwgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZm0tZXh0cmEgPSAiT3BlbnN1c2U9bGliZm0tZXh0cmE0IFVidW50dT1saWJmbS1leHRyYTQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZnJpYmlkaSA9ICJPcGVuU3VTRT1mcmliaWRpIFVidW50dT1mcmliaWRpIE1hbmRyaXZhPWZyaWJpZGkgRGViaWFuPWZyaWJpZGkiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZ2NjID0gIkRlYmlhbj1saWJnY2M0IFVidW50dT1saWJnY2MxIE9wZW5TdVNFPWxpYmdjYzQ2IgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmdkYnVzID0gIkludGVsIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmdsYWRlID0gIk1lZWdvPWxpYmdsYWRlMiBGZWRvcmE9bGliZ2xhZGUyIE9wZW5TdVNFPWxpYmdsYWRlMiBVYnVudHU9bGliZ2xhZGUyIE1hbmRyaXZhPWxpYmdsYWRlMi4wIERlYmlhbj1saWJnbGFkZTIiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZ2x1ID0gIkRlYmlhbj1saWJnbHUgVWJ1bnR1PWxpYmdsdSBPcGVuc3VzZT1tZXNhLWxpYmdsdSIKK0RJU1RST19QTl9BTElBU19wbi1saWJnc21kID0gIkZlZG9yYT1nc20gVWJ1bnR1PWxpYmdzbSBEZWJpYW49bGliZ3NtIE9wZW5zdXNlPWxpYmdzbSIKK0RJU1RST19QTl9BTElBU19wbi1saWJndGtzdHlsdXMgPSAiRGViaWFuPWxpYmd0a3N0eWx1cyBVYnVudHU9bGliZ3Rrc3R5bHVzIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmd1ID0gIk9wZW5TdVNFPWdsdSBPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1saWJpMThuLWNvbGxhdGUtcGVybCA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1saWJpY2FsID0gIlVidW50dT1saWJpY2FsIEZlZG9yYT1saWJpY2FsIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmljb252ID0gIkZlZG9yYT1taW5ndy1saWJpY29udiBPcGVuc3VzZT1jcm9zcy1taW5ndy1saWJpY29udiIKK0RJU1RST19QTl9BTElBU19wbi1saWJpbnB1dCA9ICJVYnVudHU9bGliaW5wdXQwIEZlZG9yYT1saWJpbnB1dDAiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlianNvbiA9ICJVYnVudHU9bGlianNvbjAtZGV2IERlYmlhbj1saWJqc29uMC1kZXYiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlia3NiYSA9ICJGZWRvcmE9bGlia3NiYSBEZWJpYW49bGlia3NiYTggVWJ1bnR1PWxpYmtzYmEiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlibGJ4dXRpbCA9ICJNYW5kcml2YT1saWJsYnh1dGlsIE9wZW5TdXNlPXhvcmcteDExLWRldmVsIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYm1hdGNoYm94ID0gIlVidW50dT1saWJtYXRjaGJveCBGZWRvcmE9bGlibWF0Y2hib3giCitESVNUUk9fUE5fQUxJQVNfcG4tbGlibXBjID0gIkZlZG9yYT1saWJtcGMgT3BlblN1c2U9bGlibXBjMiIKK0RJU1RST19QTl9BTElBU19wbi1saWJuZXd0ID0gIkRlYmlhbj1saWJuZXd0MC41MiBGZWRvcmE9bmV3dCIKK0RJU1RST19QTl9BTElBU19wbi1saWJuZXd0LXB5dGhvbiA9ICJVYnVudHU9cHl0aG9uLW5ld3QgRmVkb3JhPW5ld3QtcHl0aG9uIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYm5zcy1tZG5zID0gIk1lZWdvPW5zcy1tZG5zIE9wZW5TdVNFPW5zcy1tZG5zIFVidW50dT1uc3MtbWRucyBNYW5kcml2YT1uc3NfbWRucyBEZWJpYW49bnNzLW1kbnMiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlib214aWwgPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL29teGlsLnNvdXJjZWZvcmdlLm5ldC8iCitESVNUUk9fUE5fQUxJQVNfcG4tbGlib3dsID0gIkRlYmlhbj1vd2wgT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1saWJvd2wtYXYgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1saWJwYW0gPSAiTWVlZ289cGFtIEZlZG9yYT1wYW0gT3BlblN1U0U9cGFtIFVidW50dT1wYW0gTWFuZHJpdmE9cGFtIERlYmlhbj1wYW0iCitESVNUUk9fUE5fQUxJQVNfcG4tbGlicGNyZSA9ICJNYW5kcml2YT1saWJwY3JlMCBGZWRvcmE9cGNyZSIKK0RJU1RST19QTl9BTElBU19wbi1saWJwbmcxMiA9ICJEZWJpYW49bGlicG5nMTItMCBGZWRvcmE9bGlicG5nIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnBvZC1wbGFpbmVyLXBlcmwgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlic2FtcGxlcmF0ZTAgPSAiTWVlZ289bGlic2FtcGxlcmF0ZSBGZWRvcmE9bGlic2FtcGxlcmF0ZSBPcGVuU3VTRT1saWJzYW1wbGVyYXRlIFVidW50dT1saWJzYW1wbGVyYXRlIE1hbmRyaXZhPWxpYnNhbXBsZXJhdGUgRGViaWFuPWxpYnNhbXBsZXJhdGUiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlic2RsID0gIkZlZG9yYT1TREwgT3BlbnN1c2U9U0RMIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnNkbDIgPSAiRmVkb3JhPXNkbDIgT3BlbnN1c2U9bGlic2RsMiBVYnVudHU9bGlic2RsMiBEZWJpYW49bGlic2RsMiIKK0RJU1RST19QTl9BTElBU19wbi1saWJzbmRmaWxlMSA9ICJNZWVnbz1saWJzbmRmaWxlIEZlZG9yYT1saWJzbmRmaWxlIE9wZW5TdVNFPWxpYnNuZGZpbGUgVWJ1bnR1PWxpYnNuZGZpbGUgTWFuZHJpdmE9bGlic25kZmlsZSBEZWJpYW49bGlic25kZmlsZSIKK0RJU1RST19QTl9BTElBU19wbi1saWJzb3VwLTIuNCA9ICJNZWVnbz1saWJzb3VwIEZlZG9yYT1saWJzb3VwIE9wZW5TdVNFPWxpYnNvdXAgVWJ1bnR1PWxpYnNvdXAyLjQgTWFuZHJpdmE9bGlic291cCBEZWJpYW49bGlic291cDIuNCIKK0RJU1RST19QTl9BTElBU19wbi1saWJzeW5jID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnRlbGVwYXRoeSA9ICJEZWJpYW49bGlidGVsZXBhdGh5MiBVYnVudHU9bGlidGVsZXBhdGh5MiIKK0RJU1RST19QTl9BTElBU19wbi1saWJ0aW1lZGF0ZS1wZXJsID0gIkRlYmlhbj1saWJ0aW1lZGF0ZS1wZXJsIFVidW50dT1saWJ0aW1lZGF0ZS1wZXJsIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnVyY3UgPSAiRmVkb3JhPXVzZXJzcGFjZS1yY3UgVWJ1bnR1PWxpYnVyY3UwIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnVzYjEgPSAiRGViaWFuPWxpYnVzYi0xLjAtMCBGZWRvcmE9bGlidXNiMSIKK0RJU1RST19QTl9BTElBU19wbi1saWJ1c2ItY29tcGF0ID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYngxMSA9ICJEZWJpYW49bGlieDExLTYgRmVkb3JhPWxpYlgxMSBVYnVudHU9bGlieDExLTYgT3BlblN1U0U9eG9yZy14MTEtbGliWDExIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYngxMS1kaWV0ID0gIkRlYmlhbj1saWJ4MTEtNiBGZWRvcmE9bGliWDExIFVidW50dT1saWJ4MTEtNiBPcGVuU3VTRT14b3JnLXgxMS1saWJYMTEiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieGNhbGlicmF0ZSA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcveG9yZy9saWIvbGliWENhbGlicmF0ZS8iCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieGZvbnRjYWNoZSA9ICJNYW5kcml2YT1saWJ4Zm9udGNhY2hlIERlYmlhbj1saWJ4Zm9udGNhY2hlIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnhmdCA9ICJNYW5kcml2YT1saWJ4ZnQgRGViaWFuPWxpYnhmdDIgVWJ1bnR1PWxpYnhmdDIiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieGkgPSAiVWJ1bnR1PWxpYnhpIEZlZG9yYT1saWJYaSIKK0RJU1RST19QTl9BTElBU19wbi1saWJ4a2Jjb21tb24gPSAiRmVkb3JhPWxpYnhrYmNvbW1vbiBEZWJpYW49bGlieGtiY29tbW9uIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnhwcmludGFwcHV0aWwgPSAiRGViaWFuPWxpYnhwcmludGFwcHV0aWwgVWJ1bnR1PWxpYnhwcmludGFwcHV0aWwxIE1hbmRyaXZhPWxpYnhwcmludGFwcHV0aWwiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieHNjcm5zYXZlciA9ICJGZWRvcmE9bGliWFNjcm5TYXZlciBVYnVudHU9bGlieHNzMSBNYW5kcml2YT1saWJ4c2NybnNhdmVyIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnhzZXR0aW5ncy1jbGllbnQgPSAiRGViaWFuPWxpYnhzZXR0aW5ncy1jbGllbnQwIFVidW50dT1saWJ4c2V0dGluZ3MtY2xpZW50MCBNYW5kcml2YT1saWJYc2V0dGluZ3MtY2xpZW50MCIKK0RJU1RST19QTl9BTElBU19wbi1saWJ4dHJhcCA9ICJEZWJpYW49bGlieHRyYXA2IEZlZG9yYT1saWJYVHJhcCIKK0RJU1RST19QTl9BTElBU19wbi1saWJ4eGY4Nm1pc2MgPSAiTWFuZHJpdmE9bGlieHhmODZtaXNjIEZlZG9yYT1saWJYeGY4Nm1pc2MiCitESVNUUk9fUE5fQUxJQVNfcG4tbGludXgtZHVtbXkgPSAiSW50ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tbGludXgtZmlybXdhcmUgPSAiRmVkb3JhPWxpbnV4LWZpcm13YXJlIFVidW50dT1saW51eC1maXJtd2FyZSIKK0RJU1RST19QTl9BTElBU19wbi1saW51eC1saWJjLWhlYWRlcnMgPSAiRGViaWFuPWxpbnV4LWtlcm5lbC1oZWFkZXJzIFVidW50dT1saW51eC1rZXJuZWwtaGVhZGVycyIKK0RJU1RST19QTl9BTElBU19wbi1saW51eC1saWJjLWhlYWRlcnMteW9jdG8gPSAiRGViaWFuPWxpbnV4LWtlcm5lbC1oZWFkZXJzIFVidW50dT1saW51eC1rZXJuZWwtaGVhZGVycyIKK0RJU1RST19QTl9BTElBU19wbi1saW51eC15b2N0byA9ICJEZWJpYW49bGludXgtYmFzZSBVYnVudHU9bGludXgiCitESVNUUk9fUE5fQUxJQVNfcG4tbGludXgteW9jdG8tcnQgPSAiRGViaWFuPWxpbnV4LWJhc2UgVWJ1bnR1PWxpbnV4IgorRElTVFJPX1BOX0FMSUFTX3BuLWxpbnV4LXlvY3RvLXRpbnkgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbHNiaW5pdHNjcmlwdHMgPSAiV2luZHJpdmVyIgorRElTVFJPX1BOX0FMSUFTX3BuLWxzYnNldHVwID0gIldpbmRyaXZlciIKK0RJU1RST19QTl9BTElBU19wbi1sc2J0ZXN0ID0gIldpbmRyaXZlciIKK0RJU1RST19QTl9BTElBU19wbi1sdHAgPSAiTWFuZHJpdmE9bHRwIFVidW50dT1sdHAiCitESVNUUk9fUE5fQUxJQVNfcG4tbHR0bmctbW9kdWxlcyA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vbHR0bmcub3JnLyIKK0RJU1RST19QTl9BTElBU19wbi1sdHRuZy10b29scyA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vbHR0bmcub3JnLyIKK0RJU1RST19QTl9BTElBU19wbi1sdHRuZy11c3QgPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL2x0dG5nLm9yZy8iCitESVNUUk9fUE5fQUxJQVNfcG4tbHo0ID0gIkRlYmlhbj1sejQgRmVkb3JhPWx6NCIKK0RJU1RST19QTl9BTElBU19wbi1sem8gPSAiRGViaWFuPWxpYmx6byBVYnVudHU9bGlibHpvIEZlZG9yYT1senAiCitESVNUUk9fUE5fQUxJQVNfcG4tbWFpbHggPSAiRGViaWFuPWJzZC1tYWlseCBVYnVudHU9YnNkLW1haWx4IgorRElTVFJPX1BOX0FMSUFTX3BuLW1ha2VkZXBlbmQgPSAiTWFuZHJpdmE9bWFrZWRlcGVuZCBVYnVudHU9eHV0aWxzLWRldiIKK0RJU1RST19QTl9BTElBU19wbi1tYWtlZGV2cyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LWNvbmZpZy1ndGsgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC1kZXNrdG9wID0gIk1hbmRyaXZhPW1hdGNoYm94LWRlc2t0b3AgVWJ1bnR1PW1hdGNoYm94LWRlc2t0b3AiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtZGVza3RvcC1zYXRvID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gta2V5Ym9hcmQgPSAiRGViaWFuPW1hdGNoYm94LWtleWJvYXJkIEZlZG9yYT1tYXRjaGJveC1rZXlib2FyZCIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC1wYW5lbC0yID0gIkRlYmlhbj1tYXRjaGJveC1wYW5lbCBNYW5kcml2YT1tYXRjaGJveC1wYW5lbCBVYnVudHU9bWF0Y2hib3gtcGFuZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtc2Vzc2lvbiA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LXNlc3Npb24tc2F0byA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LXRlcm1pbmFsID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtdGhlbWUtc2F0byA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LXRoZW1lLXNhdG8tMiA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LXRoZW1lcy1leHRyYSA9ICJVYnVudHU9bWF0Y2hib3gtdGhlbWVzLWV4dHJhIE1hbmRyaXZhPW1hdGNoYm94LXRoZW1lcy1leHRyYSIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC10aGVtZXMtZ3RrID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtd20gPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC13bS0yID0gIk1hbmRyaXZhPW1hdGNoYm94LXdpbmRvdy1tYW5hZ2VyIERlYmlhbj1tYXRjaGJveC13aW5kb3ctbWFuYWdlciIKK0RJU1RST19QTl9BTElBU19wbi1tZW51LWNhY2hlID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLW1lc2EgPSAiRmVkb3JhPW1lc2EgVWJ1bnR1PWxpYmdsMS1tZXNhLWRyaSIKK0RJU1RST19QTl9BTElBU19wbi1tZXNhLWdsID0gIkZlZG9yYT1tZXNhIFVidW50dT1saWJnbDEtbWVzYS1kcmkiCitESVNUUk9fUE5fQUxJQVNfcG4tbWVzYS1nbHNsID0gIkZlZG9yYT1tZXNhIFVidW50dT1saWJnbDEtbWVzYS1kcmkiCitESVNUUk9fUE5fQUxJQVNfcG4tbWV0YS1lbnZpcm9ubWVudC1leHRzZGstcWVtdXg4NiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1ldGEtZW52aXJvbm1lbnQtaTU4NiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1ldGEtZW52aXJvbm1lbnQtcWVtdXg4NiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1ldGEtZW52aXJvbm1lbnQtcWVtdXg4Ni02NCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1ldGEtaWRlLXN1cHBvcnQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1tZXRhLXRvb2xjaGFpbiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1ldGEtdG9vbGNoYWluLXF0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbWV0YS10b29sY2hhaW4tcXRlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbWluaS14LXNlc3Npb24gPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbWtlbGZpbWFnZSA9ICJVYnVudHU9bWtlbGZpbWFnZSBGZWRvcmE9bWtlbGZpbWFnZSIKK0RJU1RST19QTl9BTElBU19wbi1ta2ZvbnRkaXIgPSAiTWFuZHJpdmE9bWtmb250ZGlyIFVidW50dT14Zm9udHMtdXRpbHMgRmVkb3JhPXhvcmcteDExLWZvbnQtdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tbWtmb250c2NhbGUgPSAiTWFuZHJpdmE9bWtmb250c2NhbGUgVWJ1bnR1PXhmb250cy11dGlscyBGZWRvcmE9eG9yZy14MTEtZm9udC11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi1ta3RlbXAgPSAiTWFuZHJpdmE9bWt0ZW1wIEZlZG9yYT1ta3RlbXAiCitESVNUUk9fUE5fQUxJQVNfcG4tbW1jLXV0aWxzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbW9ibGluLXByb3RvID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbW9kdXRpbHMtY29sbGF0ZXJhbCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1vZHV0aWxzLWluaXRzY3JpcHRzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbXN5bmN0b29sID0gIk9wZW5TdXNlPW1zeW5jdG9vbCBNYW5kcml2YT1tc3luY3Rvb2wiCitESVNUUk9fUE5fQUxJQVNfcG4tbXRkLXV0aWxzID0gIkRlYmlhbj1tdGQtdXRpbHMgVWJ1bnR1PW10ZC11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi1teC0xLjAgPSAiVWJ1bnR1PW14IERlYmlhbj1teCBGZWRvcmE9bXgiCitESVNUUk9fUE5fQUxJQVNfcG4tbjQ1MC1hdWRpbyA9ICJJbnRlbCIKK0RJU1RST19QTl9BTElBU19wbi1uZWFyZCA9ICJJbnRlbCIKK0RJU1RST19QTl9BTElBU19wbi1uZW9uID0gIkZlZG9yYT1uZW9uIE9wZW5zdXNlPW5lb24iCitESVNUUk9fUE5fQUxJQVNfcG4tbmV0d29yay1zdXNwZW5kLXNjcmlwdHMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1uZnMtZXhwb3J0LXJvb3QgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1ucHRoID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLW5zcy1teWhvc3RuYW1lID0gIk1lZWdvPW5zcy1tZG5zIE9wZW5TdVNFPW5zcy1tZG5zIFVidW50dT1uc3MtbWRucyBNYW5kcml2YT1uc3NfbWRucyBEZWJpYW49bnNzLW1kbnMiCitESVNUUk9fUE5fQUxJQVNfcG4tb2NmLWxpbnV4ID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLW9mb25vID0gIkRlYmlhbj1vZm9ubyBVYnVudHU9b2Zvbm8iCitESVNUUk9fUE5fQUxJQVNfcG4tb2gtcHV6emxlcyA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLW9wa2cgPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL3N2bi5vcGVubW9rby5vcmcvdHJ1bmsvc3JjL3RhciIKK0RJU1RST19QTl9BTElBU19wbi1vcGtnLWFyY2gtY29uZmlnID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tb3BrZy1jb2xsYXRlcmFsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tb3BrZy1rZXlyaW5ncyA9ICJPU1BEVCB1cHN0cmVhbT1naXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9vcGtnLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLW9wa2ctbm9ncGcgPSAiT1NQRFQgdXBzdHJlYW09Z2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvb3BrZy11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi1vcGtnLXV0aWxzID0gIk9TUERUIHVwc3RyZWFtPWdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL29wa2ctdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tb3Byb2ZpbGUgPSAiRGViaWFuPW9wcm9maWxlIEZlZG9yYT1vcHJvZmlsZSIKK0RJU1RST19QTl9BTElBU19wbi1vcHJvZmlsZXVpID0gIkZlZG9yYT1vcHJvZmlsZXVpIFVidW50dT1vcHJvZmlsZS1ndWkgRGViaWFuPW9wcm9maWxlLWd1aSIKK0RJU1RST19QTl9BTElBU19wbi1vcHJvZmlsZXVpLXNlcnZlciA9ICJGZWRvcmE9b3Byb2ZpbGV1aSBVYnVudHU9b3Byb2ZpbGUtZ3VpIERlYmlhbj1vcHJvZmlsZS1ndWkiCitESVNUUk9fUE5fQUxJQVNfcG4tb3MtcmVsZWFzZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW93bC12aWRlbyA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1iYXNlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1ib290ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtYnVpbGRlc3NlbnRpYWwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1jbHV0dGVyID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtZGV2aWNlLWRldmVsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtZGlyZWN0ZmIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1lY2xpcHNlLWRlYnVnID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtbHNiID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtbmZzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtcXQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1xdDRlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtc2RrID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtc3NoLWRyb3BiZWFyID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtc3NoLW9wZW5zc2ggPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS10b29scyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLWRlYnVnID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtcHJvZmlsZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXRlc3RhcHBzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUteDExID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUteDExLWJhc2UgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS14MTEtbWluaSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUteDExLXhzZXJ2ZXIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4taTU4NiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi1xZW11eDg2ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLXFlbXV4ODYtNjQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtcXQ0ZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1xdGUtdG9vbGNoYWluLWhvc3QgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtcXRlLXRvb2xjaGFpbi10YXJnZXQgPSAiSW50ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi1ob3N0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi10YXJnZXQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtc2RrLWhvc3QgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlLWluZGV4ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGF0Y2hlbGYgPSAiT3BlbnN1c2U9cGF0Y2hlbGYgRmVkb3JhPXBhdGNoZWxmIgorRElTVFJPX1BOX0FMSUFTX3BuLXBlcmYgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tcGlnbGl0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGtnY29uZmlnID0gIlVidW50dT1wa2ctY29uZmlnIEZlZG9yYT1wa2djb25maWciCitESVNUUk9fUE5fQUxJQVNfcG4tcG9pbnRlcmNhbCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBvaW50ZXJjYWwteGlucHV0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcG9reS1mZWVkLWNvbmZpZy1vcGtnID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcG9uZy1jbG9jayA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXBvcnRtYXAgPSAiRGViaWFuPXJwY2JpbmQgRmVkb3JhPXJwY2JpbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tcG9zdGluc3QtaW50ZXJjZXB0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcG93ZXJ0b3AgPSAiTWVlZ289cG93ZXJ0b3AgRmVkb3JhPXBvd2VydG9wIERlYmlhbj1wb3dlcnRvcCBPcGVuU3VTRT1wb3dlcnRvcCBNYW5kcml2YT1wb3dlcnRvcCIKK0RJU1RST19QTl9BTElBU19wbi1wcHAtZGlhbGluID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcHJlc2VudHByb3RvID0gIkRlYmlhbj14MTFwcm90by1wcmVzZW50LWRldiBGZWRvcmE9eG9yZy14MTEtcHJvdG8tZGV2ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tcHJpbnRwcm90byA9ICJEZWJpYW49eDExcHJvdG8tcHJpbnQtZGV2IFVidW50dT14MTFwcm90by1wcmludC1kZXYgTWFuZHJpdmE9eDExLXByb3RvLWRldmVsIgorRElTVFJPX1BOX0FMSUFTX3BuLXBzZXVkbyA9ICJXaW5kcml2ZXIiCitESVNUUk9fUE5fQUxJQVNfcG4tcHNwbGFzaCA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXB0ZXN0LXJ1bm5lciA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXB1enpsZXMgPSAiRGViaWFuPXNndC1wdXp6bGVzIEZlZG9yYT1wdXp6bGVzIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbjMgPSAiRmVkb3JhPXB5dGhvbjMgRGViaWFuPXB5dGhvbjMuMiIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24zLWRpc3RyaWJ1dGUgPSAiRGViaWFuPXB5dGhvbjMtc2V0dXB0b29scyBGZWRvcmE9cHl0aG9uMy1zZXR1cHRvb2xzIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1aU0kgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tYXJncGFyc2UgPSAiRmVkb3JhPXB5dGhvbi1hcmdwYXJzZSBPcGVuU3VTRT1weXRob24tYXJncGFyc2UiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLWRidXMgPSAiVWJ1bnR1PXB5dGhvbi1kYnVzIERlYmlhbj1weXRob24tZGJ1cyBNYW5kcml2YT1weXRob24tZGJ1cyIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tZGlzdHJpYnV0ZSA9ICJPcGVuc3VzZT1weXRob24tc2V0dXB0b29scyBGZWRvcmE9cHl0aG9uLXNldHVwdG9vbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLWdpdCA9ICJEZWJpYW49cHl0aG9uLWdpdCBGZWRvcmE9R2l0UHl0aG9uIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1tYWtvID0gIkZlZG9yYT1weXRob24tbWFrbyBPcGVuc3VzZT1weXRob24tTWFrbyIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tcHljYWlybyA9ICJNZWVnbz1weWNhaXJvIEZlZG9yYT1weWNhaXJvIFVidW50dT1weWNhaXJvIERlYmlhbj1weWNhaXJvIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1weWN1cmwgPSAiRGViaWFuPXB5dGhvbi1weWN1cmwgVWJ1bnR1PXB5dGhvbi1weWN1cmwiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLXB5Z29iamVjdCA9ICJNZWVnbz1weWdvYmplY3QyIEZlZG9yYT1weWdvYmplY3QyIFVidW50dT1weWdvYmplY3QgRGViaWFuPXB5Z29iamVjdCIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tcHlndGsgPSAiRGViaWFuPXB5dGhvbi1ndGsyIEZlZG9yYT1weWd0azIgT3BlblN1U0U9cHl0aG9uLWd0ayIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tcHlyZXggPSAiTWFuZHJpdmE9cHl0aG9uLXB5cmV4IFVidW50dT1weXRob24tcHlyZXgiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLXNjb25zID0gIkZlZG9yYT1zY29ucyBPcGVuU3VTRT1zY29ucyBVYnVudHU9c2NvbnMgTWFuZHJpdmE9c2NvbnMgRGViaWFuPXNjb25zIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1zZXR1cHRvb2xzID0gIk1hbmRyaXZhPXB5dGhvbi1zZXR1cCBPcGVuU3VTRT1weXRob24tc2V0dXAtZ2l0IgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1zbWFydHBtID0gIkRlYmlhbj1zbWFydCBPcGVuU3VTRT1zbWFydCIKK0RJU1RST19QTl9BTElBU19wbi1xZW11LWNvbmZpZyA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXFlbXVnbCA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXFlbXUtaGVscGVyID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tcWVtdXdyYXBwZXItY3Jvc3MgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1xbW1wID0gIkZlZG9yYT1xbW1wIERlYmlhbj1xbW1wIgorRElTVFJPX1BOX0FMSUFTX3BuLXF0NCA9ICJNYW5kcml2YT1saWJxdDQtZGV2ZWwgVWJ1bnR1PWxpYnF0NC1kZXYiCitESVNUUk9fUE5fQUxJQVNfcG4tcXQ0ZS1kZW1vLWltYWdlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcXQ0LWVtYmVkZGVkID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLXF0NC1ncmFwaGljcy1zeXN0ZW0gPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1xdDQtdG9vbHMgPSAiTWFuZHJpdmE9bGlicXQ0LWRldmVsIFVidW50dT1saWJxdDQtZGV2IgorRElTVFJPX1BOX0FMSUFTX3BuLXF0NC14MTEtZnJlZSA9ICJVYnVudHU9cXQteDExLWZyZWUgRGViaWFuPXF0LXgxMS1mcmVlIgorRElTVFJPX1BOX0FMSUFTX3BuLXF0LWRlbW8taW5pdCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXF1aWNreSA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1yYW5kcnByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXJhbmRycHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tcmVhZGxpbmUgPSAiRmVkb3JhPXJlYWRsaW5lIERlYmlhbj1yZWFkbGluZS1jb21tb24iCitESVNUUk9fUE5fQUxJQVNfcG4tcmVjb3JkcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tcmVjb3JkcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tcmVtYWtlID0gIk1hbmRyaXZhPXJlbWFrZSBEZWJpYW49cmVtYWtlIgorRElTVFJPX1BOX0FMSUFTX3BuLXJlbmRlcnByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXJlbmRlcnByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXJlc291cmNlcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tcmVzb3VyY2Vwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1yZ2IgPSAiRmVkb3JhPXhvcmctWDExLXNlcnZlci11dGlscyBEZWJpYW49eDExLXhzZXJ2ZXItdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tcnBtcmVzb2x2ZSA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1ydC10ZXN0cyA9ICJEZWJpYW49cnQtdGVzdHMgVWJ1bnR1PXJ0LXRlc3RzIgorRElTVFJPX1BOX0FMSUFTX3BuLXJ1bi1wb3N0aW5zdHMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1zYXRvLWljb24tdGhlbWUgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1zYXRvLXNjcmVlbnNob3QgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1zYmMgPSAiRmVkb3JhPXNiYyBEZWJpYW49bGlic2JjMSIKK0RJU1RST19QTl9BTElBU19wbi1zY3JlZW5zaG90ID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tc2NybnNhdmVycHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tc2NybnNhdmVycHJvdG8gVWJ1bnR1PXgxMXByb3RvLXNjcm5zYXZlci1kZXYgRGViaWFuPXgxMXByb3RvLXNjcm5zYXZlci1kZXYiCitESVNUUk9fUE5fQUxJQVNfcG4tc2V0dGluZ3MtZGFlbW9uID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tc2dtbC1jb21tb24gPSAiT3BlblN1U0U9c2dtbC1jb21tb24gRmVkb3JhPXNnbWwtY29tbW9uIgorRElTVFJPX1BOX0FMSUFTX3BuLXNnbWxzcGwgPSAiRGViaWFuPXNnbWxzcGwgVWJ1bnR1PXNnbWxzcGwiCitESVNUUk9fUE5fQUxJQVNfcG4tc2hhZG93LXNlY3VyZXR0eSA9ICJVYnVudHU9c2hhZG93IEZlZG9yYT1zaGFkb3ciCitESVNUUk9fUE5fQUxJQVNfcG4tc2hhZG93LXN5c3Jvb3QgPSAiVWJ1bnR1PXNoYWRvdyBGZWRvcmE9c2hhZG93IgorRElTVFJPX1BOX0FMSUFTX3BuLXNoYXN1bSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXNodXRkb3duLWRlc2t0b3AgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1zaWduZ3AgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1zdGF0ID0gIkRlYmlhbj1jb3JldXRpbHMgRmVkb3JhPWNvcmV1dGlscyIKK0RJU1RST19QTl9BTElBU19wbi1zd2FiYmVyID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tc3lza2xvZ2QgPSAiRGViaWFuPXN5c2tsb2dkIE1hbmRyaXZhPXN5c2tsb2dkIgorRElTVFJPX1BOX0FMSUFTX3BuLXN5c3Byb2YgPSAiRmVkb3JhPXN5c3Byb2YgRGViaWFuPXN5c3Byb2YiCitESVNUUk9fUE5fQUxJQVNfcG4tc3lzdGVtZC1jb21wYXQtdW5pdHMgPSAiRmVkb3JhPXN5c3RlbWQgVWJ1bnR1PXN5c3RlbWQiCitESVNUUk9fUE5fQUxJQVNfcG4tc3lzdGVtZC1zeXN0ZW1jdGwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1zeXN0ZW1kLXN5c3RlbWRjdGwgPSAiRmVkb3JhPXN5c3RlbWQgVWJ1bnR1PXN5c3RlbWQiCitESVNUUk9fUE5fQUxJQVNfcG4tc3lzdGVtdGFwLXVwcm9iZXMgPSAiVWJ1bnR1PXN5c3RlbXRhcCBEZWJpYW49c3lzdGVtdGFwIgorRElTVFJPX1BOX0FMSUFTX3BuLXN5c3Zpbml0LWluaXR0YWIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi10YWJsZSA9ICJJbnRlbCIKK0RJU1RST19QTl9BTElBU19wbi10YXItcmVwbGFjZW1lbnQgPSAiRmVkb3JhPXRhciBVYnVudHU9dGFyIgorRElTVFJPX1BOX0FMSUFTX3BuLXRjZi1hZ2VudCA9ICJXaW5kcml2ZXIgdXBzdHJlYW09aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9kc2RwL3RtLyIKK0RJU1RST19QTl9BTElBU19wbi10ZWxlcGF0aHktcHl0aG9uID0gIkRlYmlhbj10ZWxlcGF0aHktcHl0aG9uIFVidW50dT10ZWxlcGF0aHktcHl0aG9uIgorRElTVFJPX1BOX0FMSUFTX3BuLXRleGluZm8tZHVtbXktbmF0aXZlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tdGlueS1pbml0ID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLXRpbnlsb2dpbiA9ICJEZWJpYW49YnVzeWJveCBVYnVudHU9YnVzeWJveCBNYW5kcml2YT1idXN5Ym94IgorRElTVFJPX1BOX0FMSUFTX3BuLXRyYWNlLWNtZCA9ICJNYW5kcml2YT10cmFjZS1jbWQgVWJ1bnR1PXRyYWNlLWNtZCIKK0RJU1RST19QTl9BTElBU19wbi10cmFwcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tdHJhcHByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXRyZW1vciA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vd3d3LnhpcGgub3JnL3ZvcmJpcy8iCitESVNUUk9fUE5fQUxJQVNfcG4tdHNsaWIgPSAiRGViaWFuPXRzbGliIFVidW50dT10c2xpYiIKK0RJU1RST19QTl9BTElBU19wbi10dGYtYml0c3RyZWFtLXZlcmEgPSAiRGViaWFuPXR0Zi1iaXRzdHJlYW0tdmVyYSBVYnVudHU9dHRmLWJpdHN0cmVhbS12ZXJhIgorRElTVFJPX1BOX0FMSUFTX3BuLXR6Y29kZSA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi11LWJvb3QtZnctdXRpbHMgPSAiVWJ1bnR1PXUtYm9vdC10b29scyBEZWJpYW49dS1ib290LXRvb2xzIgorRElTVFJPX1BOX0FMSUFTX3BuLXUtYm9vdC1ta2ltYWdlID0gIlVidW50dT11Ym9vdC1ta2ltYWdlIERlYmlhbj11Ym9vdC1ta2ltYWdlIgorRElTVFJPX1BOX0FMSUFTX3BuLXVkZXYtZXh0cmFjb25mID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tdW5mczMgPSAiRGViaWFuPXVuZnMzIEZlZG9yYT11bmZzMyIKK0RJU1RST19QTl9BTElBU19wbi11bmZzLXNlcnZlciA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXVuaW5hdGl2ZS10YXJiYWxsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tdXBkYXRlLWFsdGVybmF0aXZlcy1kcGtnID0gIk9wZW5zdXNlPXVwZGF0ZS1hbHRlcm5hdGl2ZXMgTWFuZHJpdmE9dXBkYXRlLWFsdGVybmF0aXZlcyIKK0RJU1RST19QTl9BTElBU19wbi11cGRhdGUtcmMuZCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXVzYmluaXQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi11dGlsLW1hY3JvcyA9ICJNZWVnbz14b3JnLXgxMS11dGlsLW1hY3JvcyBGZWRvcmE9eG9yZy14MTEtdXRpbC1tYWNyb3MgTWFuZHJpdmE9eDExLXV0aWwtbWFjcm9zIgorRElTVFJPX1BOX0FMSUFTX3BuLXY4NmQgPSAiRGViaWFuPXY4NmQgVWJ1bnR1PXY4NmQiCitESVNUUk9fUE5fQUxJQVNfcG4tdmlkZW9wcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by12aWRlb3Byb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXdhZmZsZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXdhdGNoZG9nID0gIkRlYmlhbj13YXRjaGRvZyBVYnVudHU9d2F0Y2hkb2cgTWFuZHJpdmE9d2F0Y2hkb2ciCitESVNUUk9fUE5fQUxJQVNfcG4td2Via2l0Z3RrID0gIkZlZG9yYT13ZWJraXRndGsgVWJ1bnR1PWxpYndlYmtpdCIKK0RJU1RST19QTl9BTElBU19wbi13ZWItd2Via2l0ID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4td2VzdG9uID0gIkZlZG9yYT13ZXN0b24gT3BlblN1U0U9d2VzdG9uIgorRElTVFJPX1BOX0FMSUFTX3BuLXdlc3Rvbi1pbml0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4td2hpY2ggPSAiTWFuZHJpdmE9d2hpY2ggRmVkb3JhPXdoaWNoIgorRElTVFJPX1BOX0FMSUFTX3BuLXdwYS1zdXBwbGljYW50ID0gIk1lZWdvPXdwYV9zdXBwbGljYW50IEZlZG9yYT13cGFfc3VwcGxpY2FudCBPcGVuU3VTRT13cGFfc3VwcGxpY2FudCBVYnVudHU9d3Bhc3VwcGxpY2FudCBNYW5kcml2YT13cGFfc3VwcGxpY2FudCBEZWJpYW49d3Bhc3VwcGxpY2FudCIKK0RJU1RST19QTl9BTElBU19wbi14MTEtY29tbW9uID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4teDExcGVyZiA9ICJGZWRvcmE9eG9yZy14MTEtYXBwcyBVYnVudHU9eDExLWFwcHMiCitESVNUUk9fUE5fQUxJQVNfcG4teDExdm5jID0gIkZlZG9yYT14MTF2bmMgVWJ1bnR1PXgxMXZuYyIKK0RJU1RST19QTl9BTElBU19wbi14Y2ItdXRpbC1pbWFnZSA9ICJEZWJpYW49eGNiLXV0aWwgRmVkb3JhPXhjYi11dGlsIgorRElTVFJPX1BOX0FMSUFTX3BuLXhjYi11dGlsLWtleXN5bXMgPSAiRGViaWFuPXhjYi11dGlsIEZlZG9yYT14Y2ItdXRpbCIKK0RJU1RST19QTl9BTElBU19wbi14Y2ItdXRpbC13bSA9ICJEZWJpYW49eGNiLXV0aWwgRmVkb3JhPXhjYi11dGlsIgorRElTVFJPX1BOX0FMSUFTX3BuLXhjbWlzY3Byb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXhjbWlzY3Byb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi14ZHB5aW5mbyA9ICJGZWRvcmE9eG9yZy14MTEtdXRpbHMgVWJ1bnR1PXgxMS11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi14ZXYgPSAiRmVkb3JhPXhvcmcteDExLXV0aWxzIFVidW50dT14MTEtdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4teGV4dHByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXhleHRwcm90byIKK0RJU1RST19QTl9BTElBU19wbi14ZXllcyA9ICJVYnVudHU9eDExLWFwcHMgRmVkb3JhPXhvcmcteDExLWFwcHMiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4NmJpZ2ZvbnRwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14Zjg2YmlnZm9udHByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODZkZ2Fwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14Zjg2ZGdhcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4teGY4NmRyaXByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXhmODZkcmlwcm90byIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2LWlucHV0LWV2ZGV2ID0gIlVidW50dT14c2VydmVyLXhvcmctaW5wdXQtZXZkZXYgTWFuZHJpdmE9eDExLWRyaXZlci1pbnB1dC1ldmRldiBEZWJpYW49eHNlcnZlci14b3JnLWlucHV0LWV2ZGV2IEZlZG9yYT14b3JnLXgxMS1kcnYtZXZkZXYgTWVlZ289eG9yZy14MTEtZHJ2LWV2ZGV2IgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtaW5wdXQta2V5Ym9hcmQgPSAiTWVlZ289eG9yZy14MTEtZHJ2LWtleWJvYXJkIEZlZG9yYT14b3JnLXgxMS1kcnYta2V5Ym9hcmQgTWFuZHJpdmE9eDExLWRyaXZlci1pbnB1dC1rZXlib2FyZCBEZWJpYW49eHNlcnZlci14b3JnLWlucHV0LWtleWJvYXJkIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtaW5wdXQtbW91c2UgPSAiVWJ1bnR1PXhzZXJ2ZXIteG9yZy1pbnB1dC1tb3VzZSBNYW5kcml2YT14MTEtZHJpdmVyLWlucHV0LW1vdXNlIERlYmlhbj14c2VydmVyLXhvcmctaW5wdXQtbW91c2UiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Ni1pbnB1dC1zeW5hcHRpY3MgPSAiTWVlZ289eG9yZy14MTEtZHJ2LXN5bmFwdGljcyBGZWRvcmE9eG9yZy14MTEtZHJ2LXN5bmFwdGljcyBVYnVudHU9eHNlcnZlci14b3JnLWlucHV0LXN5bmFwdGljcyBNYW5kcml2YT14MTEtZHJpdmVyLWlucHV0LXN5bmFwdGljcyBEZWJpYW49eGZyZWU4Ni1kcml2ZXItc3luYXB0aWNzIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtaW5wdXQtdm1tb3VzZSA9ICJGZWRvcmE9eG9yZy14MTEtZHJ2LXZtbW91c2UgVWJ1bnR1PXhzZXJ2ZXIteG9yZy1pbnB1dC12bW1vdXNlIE1hbmRyaXZhPXgxMS1kcml2ZXItaW5wdXQtdm1tb3VzZSBEZWJpYW49eHNlcnZlci14b3JnLWlucHV0LXZtbW91c2UiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Nm1pc2Nwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14Zjg2bWlzY3Byb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODZydXNocHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8teGY4NnJ1c2hwcm90byIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2LXZpZGVvLWNpcnJ1cyA9ICJPcGVuc3VzZT14Zjg2LXZpZGVvLWNpcnJ1cyBEZWJpYW49eHNlcnZlci14b3JnLXZpZGVvLWNpcnJ1cyIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2LXZpZGVvLWZiZGV2ID0gIlVidW50dT14c2VydmVyLXhvcmctdmlkZW8tZmJkZXYgRGViaWFuPXhzZXJ2ZXIteG9yZy12aWRlby1mYmRldiIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2LXZpZGVvLWludGVsID0gIkRlYmlhbj14c2VydmVyLXhvcmctdmlkZW8taW50ZWwgRmVkb3JhPXhvcmcteDExLWRydi1pbnRlbCBNYW5kcml2YT14MTEtZHJpdmVyLXZpZGVvLWludGVsIE1lZWdvPXhvcmcteDExLWRydi1pbnRlbCBVYnVudHU9eHNlcnZlci14b3JnLXZpZGVvLWludGVsIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtdmlkZW8tbW9kZXNldHRpbmcgPSAiRGViaWFuPXhzZXJ2ZXIteG9yZy12aWRlby1tb2Rlc2V0dGluZyBGZWRvcmE9eGY4Ni12aWRlby1tb2Rlc2V0dGluZyIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2LXZpZGVvLW9tYXAgPSAiVWJ1bnR1PXhmODYtdmlkZW8tb21hcCBEZWJpYW49eGY4Ni12aWRlby1vbWFwIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtdmlkZW8tb21hcGZiID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtdmlkZW8tdmVzYSA9ICJEZWJpYW49eHNlcnZlci14b3JnLXZpZGVvLXZlc2EgRmVkb3JhPXhvcmcteDExLWRydi12ZXNhIE1hbmRyaXZhPXgxMS1kcml2ZXItdmlkZW8tdmVzYSBVYnVudHU9eHNlcnZlci14b3JnLXZpZGVvLXZlc2EiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Ni12aWRlby12bXdhcmUgPSAiRGViaWFuPXhzZXJ2ZXIteG9yZy12aWRlby12bXdhcmUgRmVkb3JhPXhvcmcteDExLWRydi12bXdhcmUgTWFuZHJpdmE9eDExLWRyaXZlci12aWRlby12bXdhcmUgVWJ1bnR1PXhzZXJ2ZXIteG9yZy12aWRlby12bXdhcmUiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4NnZpZG1vZGVwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14Zjg2dmlkbW9kZXByb3RvIFVidW50dT14MTFwcm90by14Zjg2dmlkbW9kZSBEZWJpYW49eDExcHJvdG8teGY4NnZpZG1vZGUiCitESVNUUk9fUE5fQUxJQVNfcG4teGhvc3QgPSAiVWJ1bnR1PXgxMS14c2VydmVyLXV0aWxzIEZlZG9yYT14b3JnLXgxMS1zZXJ2ZXItdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4teGluZXJhbWFwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14aW5lcmFtYXByb3RvIFVidW50dT14MTFwcm90by14aW5lcmFtYSBEZWJpYW49eDExcHJvdG8teGluZXJhbWEiCitESVNUUk9fUE5fQUxJQVNfcG4teGlucHV0LWNhbGlicmF0b3IgPSAiRmVkb3JhPXhpbnB1dC1jYWxpYnJhdG9yIE1hbmRyYXZpYT14aW5wdXQtY2FsaWJyYXRvciBVYnVudHU9eGlucHV0LWNhbGlicmF0b3IiCitESVNUUk9fUE5fQUxJQVNfcG4teGtiY29tcCA9ICJVYnVudHU9eDExLXhrYi11dGlscyBGZWRvcmE9eG9yZy14MTEteGtiLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLXhtb2RtYXAgPSAiTWVlZ289eG9yZy14MTEtdXRpbHMteG1vZG1hcCBGZWRvcmE9eG9yZy14MTEtc2VydmVyLXV0aWxzIFVidW50dT14MTEteHNlcnZlci11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi14b3JnLW1pbmltYWwtZm9udHMgPSAiVWJ1bnR1PXhmb250cy1iYXNlIEZlZG9yYT14b3JnLXgxMS1mb250cy1iYXNlIgorRElTVFJPX1BOX0FMSUFTX3BuLXhwcm9wID0gIk1lZWdvPXhvcmcteDExLXV0aWxzLXhwcm9wIEZlZG9yYT14b3JnLXgxMS11dGlscyBVYnVudHU9eDExLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLXhwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14cHJvdG8gRmVkb3JhPXhvcmcteDExLXByb3RvLWRldmVsIFVidW50dT14MTFwcm90by1jb3JlLWRldiBEZWJpYW49eDExcHJvdG8tY29yZS1kZXYgT3BlbnN1c2U9eG9yZy14MTEtcHJvdG8tZGV2ZWwgTWFuZHJpdmE9eDExLXByb3RvLWRldmVsIgorRElTVFJPX1BOX0FMSUFTX3BuLXhwcm94eW1hbmFnZW1lbnRwcm90b2NvbCA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14cHJveHltYW5hZ2VtZW50cHJvdG9jb2wiCitESVNUUk9fUE5fQUxJQVNfcG4teHJhbmRyID0gIlVidW50dT14MTEteHNlcnZlci11dGlscyBGZWRvcmE9eG9yZy14MTEtc2VydmVyLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLXhyZGIgPSAiVWJ1bnR1PXgxMS14c2VydmVyLXV0aWxzIEZlZG9yYT14b3JnLXgxMS1zZXJ2ZXItdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4teHNlcnZlci1ub2RtLWluaXQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi14c2VydmVyLXhmODYtY29uZmlnID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4teHNlcnZlci14Zjg2LWRyaS1saXRlID0gIkZlZG9yYT14b3JnLXgxMS1zZXJ2ZXIgVWJ1bnR1PXhzZXJ2ZXIteG9yZyIKK0RJU1RST19QTl9BTElBU19wbi14c2VydmVyLXhmODYtbGl0ZSA9ICJGZWRvcmE9eG9yZy14MTEtc2VydmVyIFVidW50dT14c2VydmVyLXhvcmciCitESVNUUk9fUE5fQUxJQVNfcG4teHNlcnZlci14b3JnID0gIkZlZG9yYT14b3JnLXgxMS1zZXJ2ZXIgVWJ1bnR1PXhzZXJ2ZXIteG9yZyIKK0RJU1RST19QTl9BTElBU19wbi14c2V0ID0gIkZlZG9yYT14b3JnLXgxMS1zZXJ2ZXItdXRpbHMgVWJ1bnR1PXgxMS14c2VydmVyLXV0aWxzIERlYmlhbj14MTEteHNlcnZlci11dGlscyBPcGVuc3VzZT14b3JnLXgxMSIKK0RJU1RST19QTl9BTElBU19wbi14dHNjYWwgPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL2dwZS5saW51eHRvZ28ub3JnL2Rvd25sb2FkL3NvdXJjZS8iCitESVNUUk9fUE5fQUxJQVNfcG4teHVzZXItYWNjb3VudCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXh2aWRlby10ZXN0cyA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXh2aW5mbyA9ICJGZWRvcmE9eG9yZy14MTEtdXRpbHMgVWJ1bnR1PXgxMS11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi14d2luaW5mbyA9ICJGZWRvcmE9eG9yZy14MTEtdXRpbHMgVWJ1bnR1PXgxMS11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi15YWZmczItdXRpbHMgPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL3d3dy55YWZmcy5uZXQiCitESVNUUk9fUE5fQUxJQVNfcG4temF1cnVzZCA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXplcm9jb25mID0gIk9TUERUIHVwc3RyZWFtPWh0dHA6Ly93d3cucHJvZ3NvYy5vcmcvfndpbGRmaXJlL3plcm9jb25mLyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3BhY2thZ2VfcmVnZXguaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvcGFja2FnZV9yZWdleC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEyOTk5YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3BhY2thZ2VfcmVnZXguaW5jCkBAIC0wLDAgKzEsMjc4IEBACisjIHBhY2thZ2VfcmVnZXguaW5jIC0gVGhpcyBmaWxlIGNvbnRhaW5zIGRhdGEgdGhhdCB0cmFja3MKKyMgdXBzdHJlYW0gcHJvamVjdCBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiByZWNpcGUuIFRoaXMgbGlzdCBpcyBuZWVkZWQKKyMgZm9yIHJlY2lwZXMgdGhhdCB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhbiBub3QgYmUgYXV0b21hZ2ljYWxseSBkaXNjb3ZlcmVkLgorIyBBcyB3ZSBhdXRvbWF0ZSB0aGlzIGNoZWNraW5nLCB0aGlzIGZpbGUgd2lsbCBzbG93bHkgYmUgcmVkdWNlZC4KKyMiCisjIFRoaXMgZGF0YSBpcyB1c2VkIGJ5IHRoZSBwYWNrYWdlIHJlcG9ydGluZyBzeXN0ZW0gKHBhY2thZ2VzLnlvY3RvcHJvamVjdC5vcmcpCisjIgorIyBUaGUgZm9ybWF0IGlzIGFzIGEgYml0YmFrZSB2YXJpYWJsZSBvdmVycmlkZSBmb3IgZWFjaCByZWNpcGUKKyMiCisjICAgICAgIFJFR0VYX1VSSV9wbi08cmVjaXBlIG5hbWU+ID0gInJlY2lwZV91cmwiCisjCSAtIFRoaXMgaXMgdGhlIHVybCB1c2VkIGJ5IHRoZSBwYWNrYWdlIGNoZWNraW5nIHN5c3RlbSB0bworIwkgICBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlCisjICAgICAgIFJFR0VYX3BuLTxyZWNpcGUgbmFtZT4gPSAicGFja2FnZV9yZWdleCIKKyMJIC0gVGhpcyBpcyB0aGUgcmVnZXggdGhlIHBhY2thZ2UgY2hlY2tpbmcgc3lzdGVtIHVzZXMgdG8KKyMJICAgcGFyc2UgdGhlIHBhZ2UgZm91bmQgYXQgUkVHRVhfVVJJX3BuLTxyZWNpcGUgbmFtZT4KKyMJR0lUVEFHUkVHRVhfcG4tPHJlY2lwZSBuYW1lPiA9ICJnaXRfdGFnX3JlZ2V4IgorIwkgLSBXaGVuIHNvdXJjZSBjb2RlIGlzIGZldGNoZWQgZnJvbSBnaXQsIGdpdCB0YWdzIGFyZSB1c2VkIHRvCisjCSAgIGRldGVybWluZSB0aGUgdXBzdHJlYW0gcmVsZWFzZSB2ZXJzaW9uLiBUaGlzIHJlZ2V4IGNhbiBiZSB1c2VkCisjCSAgIHRvIGZpbHRlciBvbmx5IHJlbGV2YW50IHRhZ3MuCisjCisKK0NPTU1PTl9SRUdFWCA9ICIoP1A8cHZlcj4oXGQrW1wuXC1fXSopKykiCisKKyMgR2VuZXJpYyByZWdleCBkb24ndCBtYXRjaAorUkVHRVhfVVJJX3BuLXdpcmVsZXNzLXRvb2xzID0gImh0dHA6Ly93d3cuaHBsLmhwLmNvbS9wZXJzb25hbC9KZWFuX1RvdXJyaWxoZXMvTGludXgvVG9vbHMuaHRtbCIKK1JFR0VYX3BuLXdpcmVsZXNzLXRvb2xzID0gIndpcmVsZXNzX3Rvb2xzXC4oP1A8cHZlcj4oXGQrKShcLi4qfCkpXC50YXJcLmd6IgorCitSRUdFWF9VUklfcG4tc3FsaXRlMz0iaHR0cDovL3d3dy5zcWxpdGUub3JnLyIKK1JFR0VYX3BuLXNxbGl0ZTM9InJlbGVhc2Vsb2cvJHtDT01NT05fUkVHRVh9Lmh0bWwiCisKK1JFR0VYX1VSSV9wbi1kaGNwID0gImZ0cDovL2Z0cC5pc2Mub3JnL2lzYy9kaGNwLyIKK1JFR0VYX3BuLWRoY3A9Iig/UDxwdmVyPlxkK1wuXGQrXC4oXGQrPykpLyIKKworUkVHRVhfcG4tZm9vbWF0aWMtZmlsdGVycyA9ICJmb29tYXRpYy1maWx0ZXJzLSg/UDxwdmVyPigoXGR8XGRcZClcLiopKylcLnRhclwuZ3oiCitSRUdFWF9wbi14ZGctdXRpbHMgPSAieGRnLXV0aWxzLSg/UDxwdmVyPigoXGQrW1wuXC1fXSopKykoKHJjfGFscGhhfGJldGEpXGQrKT8pXC4odGFyXC5nenx0Z3opIgorUkVHRVhfcG4tcnBtPSJycG0tJHtDT01NT05fUkVHRVh9LS4qJCIKK1JFR0VYX3BuLWxpYnRoZW9yYSA9ICJsaWJ0aGVvcmEtKD9QPHB2ZXI+XGQrKFwuXGQpKylcLih0YXJcLmd6fHRneikiCisKK1JFR0VYX3BuLWlwdXRpbHM9ImlwdXRpbHMtKD9QPHB2ZXI+c1xkKykudGFyIgorUkVHRVhfcG4tbmV0dGxlID0gIm5ldHRsZS0oP1A8cHZlcj5cZCsoXC5cZCspKylcLnRhciIKKworUkVHRVhfcG4tY2Fpcm8gPSAiY2Fpcm8tKD9QPHB2ZXI+XGQrKFwuXGQrKSspXC50YXIiCitSRUdFWF9wbi1jbWFrZSA9ICJjbWFrZS0oP1A8cHZlcj5cZCsoXC5cZCspKylcLnRhciIKK1JFR0VYX3BuLWxpYnNkbCA9ICJTREwtKD9QPHB2ZXI+XGQrKFwuXGQrKSspXC50YXIiCitSRUdFWF9wbi1saWJ4c2x0ID0gImxpYnhzbHQtKD9QPHB2ZXI+XGQrKFwuXGQrKSspXC50YXIiCisKKyMgRXhjbHVkZSBOQyB2ZXJzaW9ucyB3aGljaCBsYWNrIEFFUyBlbmNyeXB0aW9uCitSRUdFWF9wbi1kYiA9ICJkYi0oP1A8cHZlcj5cZCtcLlxkKyhcLlxkKyk/KS50YXIiCisKK1JFR0VYX1VSSV9wbi1hdXRvZ2VuID0gImh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUvYXV0b2dlbi8iCitSRUdFWF9wbi1hdXRvZ2VuID0gInJlbCg/UDxwdmVyPlxkKyhcLlxkKykrKS8iCisKKyMgcHl0aG9uIHJlY2lwZSBpcyBhY3R1YWxseSBweXRob24gMi54CisjIGFsc28sIGV4Y2x1ZGUgcHJlLXJlbGVhc2VzIGZvciBib3RoIHB5dGhvbiAyLnggYW5kIDMueAorUkVHRVhfcG4tcHl0aG9uID0gIltQcF15dGhvbi0oP1A8cHZlcj4yKFwuXGQrKSspLnRhciIKK1JFR0VYX3BuLXB5dGhvbjMgPSAiW1BwXXl0aG9uLSg/UDxwdmVyPlxkKyhcLlxkKykrKS50YXIiCisKKyMgZXhjbHVkZSBiZXRhcworUkVHRVhfcG4tdGlmZiA9ICJ0aWZmLSg/UDxwdmVyPlxkKyhcLlxkKykrKS50YXIiCisKKyMgZXhjbHVkZSB2ZXJzaW9uIDUuNS4yIHdoaWNoIHRyaWdnZXJzIGEgZmFsc2UgcG9zaXRpdmUKK1JFR0VYX3BuLXVuemlwID0gInVuemlwKD9QPHB2ZXI+KD8hNTUyKS4rKVwudGd6IgorIyBzaW1pbGFyIGZvciB6aXAKK1JFR0VYX3BuLXppcCA9ICJeemlwKD9QPHB2ZXI+KD8hMjMyKS4rKVwudGd6IgorCisjIElzbid0IHBvc3NpYmxlIHRvIGRvd25sb2FkIHdpdGggdGhlIGRlZmF1bHQgVVJJIHdlYiBzZXJ2ZXIgcmV0dXJucworIyAoNDAzLCA0MDQsIDU1MCkKK1JFR0VYX1VSSV9wbi1kb3Nmc3Rvb2xzID0gImh0dHBzOi8vZ2l0aHViLmNvbS9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvcmVsZWFzZXMiCitSRUdFWF9wbi1qc29uLWMgPSAianNvbi1jLSg/UDxwdmVyPlxkKyhcLlxkKykrKS50YXIiCisjIGpzb24tYyByZWxlYXNlcyBwYWdlIGlzIGZldGNoaW5nIHRoZSBsaXN0IG9mIHJlbGVhc2VzIGluIHNvbWUgd2VpcmQgWE1MIGZvcm1hdAorIyBmcm9tIGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9qc29uLWNfcmVsZWFzZXMgYW5kIHByb2Nlc3NlcyBpdCB3aXRoIGphdmFzY3JpcHQgOi0vCisjUkVHRVhfVVJJX3BuLWpzb24tYyA9ICJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vanNvbi1jX3JlbGVhc2VzL3JlbGVhc2VzL2luZGV4Lmh0bWwiCitSRUdFWF9VUklfcG4tY2hycGF0aCA9ICJodHRwOi8vYWxpb3RoLmRlYmlhbi5vcmcvZnJzLz9ncm91cF9pZD0zMTA1MiIKKworUkVHRVhfVVJJX3BuLXBvd2VydG9wID0gImh0dHBzOi8vMDEub3JnL3Bvd2VydG9wL2Rvd25sb2FkcyIKK1JFR0VYX1VSSV9wbi1saWJzYW1wbGVyYXRlMCA9ICJodHRwOi8vd3d3Lm1lZ2EtbmVyZC5jb20vU1JDL2Rvd25sb2FkLmh0bWwiCitSRUdFWF9VUklfcG4tbGlieGtiY29tbW9uID0gImh0dHA6Ly94a2Jjb21tb24ub3JnLyIKK1JFR0VYX1VSSV9wbi10c2xpYiA9ICJodHRwczovL2dpdGh1Yi5jb20va2VyZ290aC90c2xpYi9yZWxlYXNlcyIKK1JFR0VYX1VSSV9wbi13YWZmbGU9Imh0dHA6Ly93d3cud2FmZmxlLWdsLm9yZy9yZWxlYXNlcy5odG1sIgorUkVHRVhfVVJJX3BuLWxyenN6ID0gImh0dHA6Ly9vaHNlLmRlL3V3ZS9zb2Z0d2FyZS9scnpzei5odG1sIgorUkVHRVhfVVJJX3BuLWxpYmFjcGkgPSAiaHR0cDovL3d3dy5uZ29sZGUuZGUvbGliYWNwaS5odG1sIgorUkVHRVhfVVJJX3BuLWxlc3MgID0gImh0dHA6Ly93d3cuZ3JlZW53b29kc29mdHdhcmUuY29tL2xlc3MvZG93bmxvYWQuaHRtbCIKK1JFR0VYX1VSSV9wbi1jdXBzID0gImh0dHA6Ly93d3cuY3Vwcy5vcmcvc29mdHdhcmUucGhwIgorUkVHRVhfcG4tY3VwcyA9ICJjdXBzLSg/UDxwdmVyPlxkK1wuXGQrKFwuXGQrKT8pLXNvdXJjZS50YXIiCitSRUdFWF9VUklfcG4tYnppcDIgPSAiaHR0cDovL3d3dy5iemlwLm9yZy9kb3dubG9hZHMuaHRtbCIKK1JFR0VYX1VSSV9wbi1taW5pY29tID0gImh0dHBzOi8vYWxpb3RoLmRlYmlhbi5vcmcvZnJzLz9ncm91cF9pZD0zMDAxOCIKK1JFR0VYX1VSSV9wbi1zeXNzdGF0ID0gImh0dHA6Ly9zZWJhc3RpZW4uZ29kYXJkLnBhZ2VzcGVyc28tb3JhbmdlLmZyL2Rvd25sb2FkLmh0bWwiCitSRUdFWF9VUklfcG4tbGliaWNhbCA9ICJodHRwczovL2dpdGh1Yi5jb20vbGliaWNhbC9saWJpY2FsL3JlbGVhc2VzLyIKK1JFR0VYX1VSSV9wbi1saWJtcGMgPSAiaHR0cDovL3d3dy5tdWx0aXByZWNpc2lvbi5vcmcvaW5kZXgucGhwP3Byb2c9bXBjJnBhZ2U9ZG93bmxvYWQiCitSRUdFWF9VUklfcG4tdGFnbGliID0gImh0dHA6Ly9naXRodWIuY29tL3RhZ2xpYi90YWdsaWIvcmVsZWFzZXMvIgorUkVHRVhfVVJJX3BuLWxpYmV2ZW50ID0gImh0dHA6Ly9saWJldmVudC5vcmcvIgorUkVHRVhfVVJJX3BuLWRiID0gImh0dHA6Ly93d3cub3JhY2xlLmNvbS90ZWNobmV0d29yay9wcm9kdWN0cy9iZXJrZWxleWRiL2Rvd25sb2Fkcy9pbmRleC0wODI5NDQuaHRtbCIKK1JFR0VYX1VSSV9wbi1weXRob24tc21hcnRwbT0iaHR0cHM6Ly9sYXVuY2hwYWQubmV0L3NtYXJ0L3RydW5rLyIKK1JFR0VYX1VSSV9wbi1sc29mID0gImZ0cDovL3N1bnNpdGUudWFsYmVydGEuY2EvcHViL01pcnJvci9sc29mLyIKK1JFR0VYX1VSSV9wbi1wYnppcDIgPSAiaHR0cDovL2NvbXByZXNzaW9uLmNhL3BiemlwMi8iCitSRUdFWF9VUklfcG4tcXVpY2t5ID0gImh0dHA6Ly9xdC1hcHBzLm9yZy9jb250ZW50L2Rvd25sb2FkLnBocD9jb250ZW50PTgwMzI1JmlkPTEmdGFuPTEwNDE3NDgyIgorUkVHRVhfVVJJX3BuLWxpYndlYnAgPSAiaHR0cDovL2Rvd25sb2Fkcy53ZWJtcHJvamVjdC5vcmcvcmVsZWFzZXMvd2VicC9pbmRleC5odG1sIgorCisjIFRoZSBlbmdpbmUgdHJpZXMgdG8gdXNlIGRpcmVjdG9yeSB2ZXJzaW9uaW5nIGJ1dCBpcyBhIGZhbHNlLXBvc2l0aXZlCitSRUdFWF9VUklfcG4taW50bHRvb2wgPSAiaHR0cHM6Ly9sYXVuY2hwYWQubmV0L2ludGx0b29sL3RydW5rLyIKK1JFR0VYX1VSSV9wbi1saWJuZnNpZG1hcCA9ICJodHRwOi8vd3d3LmNpdGkudW1pY2guZWR1L3Byb2plY3RzL25mc3Y0L2xpbnV4L2xpYm5mc2lkbWFwLyIKK1JFR0VYX1VSSV9wbi1tcGZyID0gImh0dHA6Ly93d3cubXBmci5vcmcvbXBmci1jdXJyZW50LyIKK1JFR0VYX1VSSV9wbi1uc3MgPSAiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Nb3ppbGxhL1Byb2plY3RzL05TUy9OU1NfUmVsZWFzZXMiCitSRUdFWF9wbi1uc3MgPSAiTlNTXyg/UDxwdmVyPi4rKV9yZWxlYXNlX25vdGVzIgorCitSRUdFWF9VUklfcG4tZG9jYm9vay1zZ21sLWR0ZC0zLjEgPSAiaHR0cDovL3d3dy5kb2Nib29rLm9yZy9zZ21sLyIKK1JFR0VYX3BuLWRvY2Jvb2stc2dtbC1kdGQtMy4xID0gIig/UDxwdmVyPjNcLi4rKS8iCitSRUdFWF9VUklfcG4tZG9jYm9vay1zZ21sLWR0ZC00LjEgPSAiaHR0cDovL3d3dy5kb2Nib29rLm9yZy9zZ21sLyIKK1JFR0VYX3BuLWRvY2Jvb2stc2dtbC1kdGQtNC4xID0gIig/UDxwdmVyPjRcLjEoXC5cZCspKikvIgorCisjIFF0IHJlY2lwZXMgc2hvdWxkIGJlIGtlcHQgYXQgNC54CitSRUdFWF9VUklfcG4tcXQ0LWVtYmVkZGVkID0gImh0dHA6Ly9kb3dubG9hZC5xdC5pby9vZmZpY2lhbF9yZWxlYXNlcy9xdC80LjgvIgorUkVHRVhfcG4tcXQ0LWVtYmVkZGVkID0gIig/UDxwdmVyPlxkKyhcLlxkKykrKS8iCitSRUdFWF9VUklfcG4tcXQ0LXgxMS1mcmVlID0gImh0dHA6Ly9kb3dubG9hZC5xdC5pby9vZmZpY2lhbF9yZWxlYXNlcy9xdC80LjgvIgorUkVHRVhfcG4tcXQ0LXgxMS1mcmVlID0gIig/UDxwdmVyPlxkKyhcLlxkKykrKS8iCitSRUdFWF9VUklfcG4tbmF0aXZlc2RrLXF0NC10b29scyA9ICJodHRwOi8vZG93bmxvYWQucXQuaW8vb2ZmaWNpYWxfcmVsZWFzZXMvcXQvNC44LyIKK1JFR0VYX3BuLW5hdGl2ZXNkay1xdDQtdG9vbHMgPSAiKD9QPHB2ZXI+XGQrKFwuXGQrKSspLyIKK1JFR0VYX1VSSV9wbi1xdDQtbmF0aXZlID0gImh0dHA6Ly9kb3dubG9hZC5xdC5pby9vZmZpY2lhbF9yZWxlYXNlcy9xdC80LjgvIgorUkVHRVhfcG4tcXQ0LW5hdGl2ZSA9ICIoP1A8cHZlcj5cZCsoXC5cZCspKykvIgorCisjIFB5UEkgc2l0ZXMKK1JFR0VYX1VSSV9wbi1weXRob24tbm9zZSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL25vc2UvIgorUkVHRVhfcG4tcHl0aG9uLW5vc2UgPSAiL25vc2UvJHtDT01NT05fUkVHRVh9IgorIyBweXRob24tZGlzdHJpYnV0ZSAwLjcueCBpcyBhIHNpbXBsZSBjb21wYXRpYmlsaXR5IGxheWVyIHRoYXQgaW5zdGFsbHMgU2V0dXB0b29scyAwLjcrLgorIyBzbyB3ZSBzdGljayB0byAwLjYueCBzZXJpZXMKK1JFR0VYX1VSSV9wbi1weXRob24tZGlzdHJpYnV0ZSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL2Rpc3RyaWJ1dGUvIgorUkVHRVhfcG4tcHl0aG9uLWRpc3RyaWJ1dGUgPSAiL2Rpc3RyaWJ1dGUvKD9QPHB2ZXI+XGQrLjYuXGQrKSIKK1JFR0VYX1VSSV9wbi1weXRob24tZ2l0ZGIgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9naXRkYi8iCitSRUdFWF9VUklfcG4tcHl0aG9uLWFzeW5jID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvYXN5bmMvIgorUkVHRVhfVVJJX3BuLXB5dGhvbi1zbW1hcCA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3NtbWFwLyIKK1JFR0VYX3BuLXB5dGhvbi1zbW1hcCA9ICIvc21tYXAvJHtDT01NT05fUkVHRVh9IgorUkVHRVhfVVJJX3BuLXB5dGhvbi1naXQgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9HaXRQeXRob24vIgorUkVHRVhfcG4tcHl0aG9uLWdpdCA9ICIvR2l0UHl0aG9uLyR7Q09NTU9OX1JFR0VYfSIKK1JFR0VYX1VSSV9wbi1weXRob24tbWFrbyA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL21ha28vIgorUkVHRVhfcG4tcHl0aG9uLW1ha28gPSAiL01ha28vJHtDT01NT05fUkVHRVh9IgorUkVHRVhfVVJJX3BuLXB5dGhvbi1wZXhwZWN0ID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvcGV4cGVjdCIKK1JFR0VYX1VSSV9wbi1weXRob24zLXBpcCA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3BpcCIKK1JFR0VYX1VSSV9wbi1weXRob24zLXNldHVwdG9vbHMgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9zZXR1cHRvb2xzIgorCisjIFNvdXJjZWZvcmdlIHNpdGVzCitSRUdFWF9VUklfcG4tcHl0aG9uLXNjb25zID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvc2NvbnMvZmlsZXMvc2NvbnMvIgorUkVHRVhfcG4tcHl0aG9uLXNjb25zID0gIi9zY29ucy8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLWV4cGVjdCA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2V4cGVjdC9maWxlcy9FeHBlY3QvIgorUkVHRVhfcG4tZXhwZWN0ID0gIi9FeHBlY3QvJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1kb2Nib29rLXhzbC1zdHlsZXNoZWV0cyA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2RvY2Jvb2svZmlsZXMvZG9jYm9vay14c2wvIgorUkVHRVhfcG4tZG9jYm9vay14c2wtc3R5bGVzaGVldHMgPSAiL2RvY2Jvb2steHNsLyR7Q09NTU9OX1JFR0VYfS8iCitSRUdFWF9VUklfcG4tZ2xldyA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dsZXcvZmlsZXMvZ2xldyIKK1JFR0VYX3BuLWdsZXcgPSAiL2dsZXcvJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1tZW51LWNhY2hlID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbHhkZS9maWxlcy9tZW51LWNhY2hlLzEuMC8iCitSRUdFWF9VUklfcG4teDExdm5jID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGlidm5jc2VydmVyL2ZpbGVzL3gxMXZuYy8iCitSRUdFWF9wbi14MTF2bmMgPSAiL3gxMXZuYy8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLXF1b3RhID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGludXhxdW90YS9maWxlcy9xdW90YS10b29scy8iCitSRUdFWF9wbi1xdW90YSA9ICIvcXVvdGEtdG9vbHMvJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1sc2IgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9sc2IvZmlsZXMvbHNiX3JlbGVhc2UvIgorUkVHRVhfcG4tbHNiID0gIi9sc2JfcmVsZWFzZS8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLWxpYnBjcmUgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9wY3JlL2ZpbGVzL3BjcmUvIgorUkVHRVhfcG4tbGlicGNyZSA9ICIvcGNyZS8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLWxpYnVzYi1jb21wYXQgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saWJ1c2IvZmlsZXMvbGlidXNiLWNvbXBhdC0wLjEvIgorUkVHRVhfcG4tbGlidXNiLWNvbXBhdCA9ICIvbGlidXNiLWNvbXBhdC0ke0NPTU1PTl9SRUdFWH0vJCIKK1JFR0VYX1VSSV9wbi1zeXNmc3V0aWxzID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGludXgtZGlhZy9maWxlcy9zeXNmc3V0aWxzLyIKK1JFR0VYX3BuLXN5c2ZzdXRpbHMgPSAiL3N5c2ZzdXRpbHMvJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1jb25zb2xlLXRvb2xzID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGN0L2ZpbGVzL2NvbnNvbGUtdG9vbHMtZGV2ZWwvIgorUkVHRVhfcG4tY29uc29sZS10b29scyA9ICIvY29uc29sZS10b29scy1kZXZlbC8oP1A8cHZlcj4oXGRcZD9cLikrXGRcZD8pLyIKK1JFR0VYX1VSSV9wbi13YXRjaGRvZyA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3dhdGNoZG9nL2ZpbGVzL3dhdGNoZG9nLyIKK1JFR0VYX3BuLXdhdGNoZG9nID0gIi93YXRjaGRvZy8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLWNyYWNrbGliID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvY3JhY2tsaWIvZmlsZXMvY3JhY2tsaWIvIgorUkVHRVhfcG4tY3JhY2tsaWIgPSAiL2NyYWNrbGliLyR7Q09NTU9OX1JFR0VYfS8iCitSRUdFWF9VUklfcG4tZ3B0ZmRpc2sgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9ncHRmZGlzay9maWxlcy9ncHRmZGlzay8iCitSRUdFWF9wbi1ncHRmZGlzayA9ICIvZ3B0ZmRpc2svJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1saWJwbmcxMiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYnBuZy9maWxlcy9saWJwbmcxMi8iCitSRUdFWF9wbi1saWJwbmcxMiA9ICIvbGlicG5nMTIvJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1kb2Nib29rLWRzc3NsLXN0eWxlc2hlZXRzID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZG9jYm9vay9maWxlcy9kb2Nib29rLWRzc3NsLyIKK1JFR0VYX3BuLWRvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMgPSAiL2RvY2Jvb2stZHNzc2wvJHtDT01NT05fUkVHRVh9LyIKKworUkVHRVhfVVJJX3BuLW9wZW5qYWRlID0gImh0dHA6Ly9vcGVuamFkZS5zb3VyY2Vmb3JnZS5uZXQvZG93bmxvYWQuaHRtbCIKK1JFR0VYX1VSSV9wbi1saWJwZm00ID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvcGVyZm1vbjIvZmlsZXMvbGlicGZtNC8iCitSRUdFWF9VUklfcG4tbGliYTUyID0gImh0dHA6Ly9saWJhNTIuc291cmNlZm9yZ2UubmV0L2Rvd25sb2Fkcy5odG1sIgorUkVHRVhfVVJJX3BuLW1wZWcyZGVjID0gImh0dHA6Ly9saWJtcGVnMi5zb3VyY2Vmb3JnZS5uZXQvZG93bmxvYWRzLmh0bWwiCitSRUdFWF9VUklfcG4tcGNtYW5mbSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3BjbWFuZm0vZmlsZXMvUENNYW5GTSUyMCUyQiUyMExpYmZtJTIwJTI4dGFyYmFsbCUyMHJlbGVhc2UlMjkvUENNYW5GTS8iCitSRUdFWF9VUklfcG4tbGliY2dyb3VwID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGliY2cvZmlsZXMvbGliY2dyb3VwLyIKK1JFR0VYX1VSSV9wbi1jZHJ0b29scyA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2NkcnRvb2xzL2ZpbGVzL2FscGhhLyIKKworIyBHSVQKK0dJVFRBR1JFR0VYX0NPTU1PTiA9ICIoP1A8cHZlcj5cZCtcLlxkKyhcLlxkKykqKSIKKworR0lUVEFHUkVHRVhfcG4tbGludXgteW9jdG8gPSAiJHtHSVRUQUdSRUdFWF9DT01NT059IgorR0lUVEFHUkVHRVhfcG4tbGludXgteW9jdG8tdGlueSA9ICIke0dJVFRBR1JFR0VYX0NPTU1PTn0iCitHSVRUQUdSRUdFWF9wbi1saW51eC15b2N0by1kZXYgPSAiJHtHSVRUQUdSRUdFWF9DT01NT059IgorR0lUVEFHUkVHRVhfcG4tdWNsaWJjID0gIiR7R0lUVEFHUkVHRVhfQ09NTU9OfSIKK0dJVFRBR1JFR0VYX3BuLWdsaWJjID0gIiR7R0lUVEFHUkVHRVhfQ09NTU9OfSIKK0dJVFRBR1JFR0VYX3BuLWNyb3NzLWxvY2FsZWRlZiA9ICIke0dJVFRBR1JFR0VYX0NPTU1PTn0iCitHSVRUQUdSRUdFWF9wbi1iaW51dGlscyA9ICJiaW51dGlscy0oP1A8cHZlcj5cZCtfKFxkXz8pKikiCitHSVRUQUdSRUdFWF9wbi1ib290Y2hhcnQyID0gIiR7R0lUVEFHUkVHRVhfQ09NTU9OfSIKK0dJVFRBR1JFR0VYX3BuLXJlbWFrZSA9ICIoP1A8cHZlcj4oXGQrKFwuXGQrKSspXCtkYmcuKykiCitHSVRUQUdSRUdFWF9wbi10Y2YtYWdlbnQgPSAiKD9QPHB2ZXI+KFxkKyhcLlxkKykrKSkiCitHSVRUQUdSRUdFWF9wbi1jaGtjb25maWctYWx0ZXJuYXRpdmVzID0gImNoa2NvbmZpZy0oP1A8cHZlcj4oXGQrKFwuXGQrKSspKSIKK0dJVFRBR1JFR0VYX3BuLXNnbWxzcGwgPSAiKD9QPHB2ZXI+KFxkKyhcLlxkKykrKSkiCisKKyMgRXhjbHVkZSB4Ljk5LnggdmVyc2lvbnMKK0dJVFRBR1JFR0VYX3BuLW14LTEuMCA9ICIoP1A8cHZlcj5eXGQrKFwuKD8hOTkpXGQrKSspIgorCisjIEJsYWNrbGlzdCBhIGJvZ3VzIHRhZworR0lUVEFHUkVHRVhfcG4tZmlsZSA9ICJGSUxFKD9QPHB2ZXI+KD8hNl8yMykuKykiCitHSVRUQUdSRUdFWF9wbi14aW5ldGQgPSAieGluZXRkLSg/UDxwdmVyPig/ITIwMDMwMTIyKS4rKSIKKworIyBCbGFja2xpc3QgZGViaWFuLXNwZWNpZmljIHRhZ3MKK0dJVFRBR1JFR0VYX3BuLXhmODYtdmlkZW8tb21hcGZiID0gIig/UDxwdmVyPlxkKyhcLlxkKykrKSg/IS0pIgorCisjIEdOT01FIHJlbGF0ZWQuCisjCisjIEdOT01FMl9TVEFCTEUgcGlja3Mgc3RhYmxlIHJlbGVhc2VzIGluIHRoZSAyLnggc2VyaWVzIChzbyBub3QgMi45MCBvbndhcmRzLAorIyB3aGljaCB3ZXJlIEdOT01FIDMgYmV0YXMuCisjCisjIEdOT01FX1NUQUJMRSBwaWNrcyB0aGUgbGF0ZXN0IHN0YWJsZSByZWxlYXNlLgorCitHTk9NRTJfU1RBQkxFID0gIig/UDxwdmVyPjJcLihbMC04XSpbMDI0NjhdKSsoXC5cZCspKykiCitHTk9NRV9TVEFCTEUgPSAiKD9QPHB2ZXI+XGQrXC4oXGQqWzAyNDY4XSkrKFwuXGQrKSspIgorCitSRUdFWF9wbi1nbGliLTIuMCA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1hdGsgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tYXQtc3BpMi1jb3JlID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWF0LXNwaTItYXRrID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWdkay1waXhidWYgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tcGFuZ28gPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZ3RrKyA9ICIke0dOT01FMl9TVEFCTEV9IgorUkVHRVhfcG4tZ3RrKzMgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZ3RrLWVuZ2luZXMgPSAiJHtHTk9NRTJfU1RBQkxFfSIKK1JFR0VYX3BuLWdsaWItbmV0d29ya2luZyA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1saWJyc3ZnID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWxpYnNvdXAtMi40ID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLXZhbGEgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tY2x1dHRlci0xLjAgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tY2x1dHRlci1ndGstMS4wID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWNsdXR0ZXItZ3N0LTMuMCA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1jb2dsLTEuMCA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1hZHdhaXRhLWljb24tdGhlbWUgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tdnRlID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWVwaXBoYW55ID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLXdlYmtpdGd0ayA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1wMTEta2l0ID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWdub21lLWRlc2t0b3AzID0gIiR7R05PTUVfU1RBQkxFfSIKKworIyBub3QgR05PTUUgcmVsYXRlZCBidXQgdXNlcyBzYW1lIGV2ZW4tbWlub3ItcmVsZWFzZS1pcy1zdGFibGUgbG9naWMKK1JFR0VYX3BuLWRidXMgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZGJ1cy10ZXN0ID0gIiR7R05PTUVfU1RBQkxFfSIKKworIyBzYW1lIGxvZ2ljIGFwcGxpZXMgdG8gZ3N0cmVhbWVyIHJlbGVhc2VzCitSRUdFWF9wbi1nc3RyZWFtZXIxLjAgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZ3N0cmVhbWVyMS4wLWxpYmF2ID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseSA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXIgPSAiJHtHTk9NRV9TVEFCTEV9IgorCisjIGFuZCBwZXJsCitSRUdFWF9wbi1wZXJsID0gIiR7R05PTUVfU1RBQkxFfSIKKworIyBLZWVwIG9sZCBnY2MgdmVyc2lvbnMgYXQgdGhlaXIgbWFqb3IgdmVyc2lvbnMKK1JFR0VYX3BuLWdjYy1zb3VyY2UtNC45LjMgPSAiZ2NjLSg/UDxwdmVyPjRcLjlcLlxkKykudGFyIgorUkVHRVhfcG4tZ2NjLXNvdXJjZS00LjguNCA9ICJnY2MtKD9QPHB2ZXI+NFwuOFwuXGQrKS50YXIiCisKKyMgdGhlc2UgcGFja2FnZXMgYXJlIHRha2VuIGZyb20gc25hcHNob3RzLmRlYmlhbi5vcmc7IHRoYXQgc291cmNlIGlzIHN0YXRpYyBhbmQgZ29lcyBzdGFsZQorIyBzbyB3ZSBjaGVjayB0aGUgbGF0ZXN0IHVwc3RyZWFtIGZyb20gYSBkaXJlY3RvcnkgdGhhdCBkb2VzIGdldCB1cGRhdGVkCitSRUdFWF9VUklfcG4tYXB0ID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9hL2FwdC8iCitSRUdFWF9VUklfcG4tcmVzb2x2Y29uZiA9ICIke0RFQklBTl9NSVJST1J9L21haW4vci9yZXNvbHZjb25mLyIKK1JFR0VYX1VSSV9wbi1uZXQtdG9vbHMgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL24vbmV0LXRvb2xzLyIKKworIyBzYW1lIGZvciBwYWNrYWdlcyBmcm9tIGxhdW5jaHBhZAorUkVHRVhfVVJJX3BuLWJhc2UtcGFzc3dkID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9iL2Jhc2UtcGFzc3dkLyIKKworIyBmb3IgdGhlc2UgcGFja2FnZXMgd2UncmUgbW9zdGx5IGludGVyZXN0ZWQgaW4gdHJhY2tpbmcgZGViaWFuIHBhdGNoZXMsCisjIGFuZCBub3QgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gd2hlcmUgYWxsIGRldmVsb3BtZW50IGhhcyBlZmZlY3RpdmVseSBzdG9wcGVkCitERUJJQU5fUEFUQ0hfUkVHRVggPSAiKD9QPHB2ZXI+KChcZCtcLiopKyktKChcZCtcLiopKykpXC4oZGlmZnxkZWJpYW5cLnRhcilcLihnenx4eikiCitSRUdFWF9wbi1uZXQtdG9vbHMgPSAiJHtERUJJQU5fUEFUQ0hfUkVHRVh9IgorUkVHRVhfcG4tYXBtZCA9ICIke0RFQklBTl9QQVRDSF9SRUdFWH0iCitSRUdFWF9wbi1ibGt0b29sID0gIiR7REVCSUFOX1BBVENIX1JFR0VYfSIKK1JFR0VYX3BuLW1haWx4ID0gIiR7REVCSUFOX1BBVENIX1JFR0VYfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3NlY3VyaXR5X2ZsYWdzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3NlY3VyaXR5X2ZsYWdzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGFjMGJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvc2VjdXJpdHlfZmxhZ3MuaW5jCkBAIC0wLDAgKzEsMTAzIEBACisjIFNldHVwIGV4dHJhIENGTEFHUyBhbmQgTERGTEFHUyB3aGljaCBoYXZlICdzZWN1cml0eScgYmVuZWZpdHMuIFRoZXNlIAorIyBkb24ndCB3b3JrIHVuaXZlcnNhbGx5LCB0aGVyZSBhcmUgcmVjaXBlcyB3aGljaCBjYW4ndCB1c2Ugb25lLCB0aGUgb3RoZXIKKyMgb3IgYm90aCBzbyBhIGJsYWNrbGlzdCBpcyBtYWludGFpbmVkIGhlcmUuIFRoZSBpZGVhIHdvdWxkIGJlIG92ZXIKKyMgdGltZSB0byByZWR1Y2UgdGhpcyBsaXN0IHRvIG5vdGhpbmcuCisjIEZyb20gYSBZb2N0byBQcm9qZWN0IHBlcnNwZWN0aXZlLCB0aGlzIGZpbGUgaXMgaW5jbHVkZWQgYW5kIHRlc3RlZAorIyBpbiB0aGUgRElTVFJPPSJwb2t5LWxzYiIgY29uZmlndXJhdGlvbi4KKworIyBfRk9SVElGWV9TT1VSQ0UgcmVxdWlyZXMgLU8xIG9yIGhpZ2hlciwgc28gZGlzYWJsZSBpbiBkZWJ1ZyBidWlsZHMgYXMgdGhleSB1c2UKKyMgLU8wIHdoaWNoIHRoZW4gcmVzdWx0cyBpbiBhIGNvbXBpbGVyIHdhcm5pbmcuCitsY2xfbWF5YmVfZm9ydGlmeSA9ICIke0BiYXNlX2NvbmRpdGlvbmFsKCdERUJVR19CVUlMRCcsJzEnLCcnLCctRF9GT1JUSUZZX1NPVVJDRT0yJyxkKX0iCisKK1NFQ1VSSVRZX0NGTEFHUyA/PSAiLWZzdGFjay1wcm90ZWN0b3ItYWxsIC1waWUgLWZwaWUgJHtsY2xfbWF5YmVfZm9ydGlmeX0iCitTRUNVUklUWV9OT19QSUVfQ0ZMQUdTID89ICItZnN0YWNrLXByb3RlY3Rvci1hbGwgJHtsY2xfbWF5YmVfZm9ydGlmeX0iCisKK1NFQ1VSSVRZX0xERkxBR1MgPz0gIi1XbCwteixyZWxybywteixub3ciCitTRUNVUklUWV9YX0xERkxBR1MgPz0gIi1XbCwteixyZWxybyIKKworIyBwb3dlcnBjIGRvZXMgbm90IGdldCBvbiB3aXRoIHBpZSBmb3IgcmVhc29ucyBub3QgbG9va2VkIGludG8gYXMgeWV0CitTRUNVUklUWV9DRkxBR1NfcG93ZXJwYyA9ICItZnN0YWNrLXByb3RlY3Rvci1hbGwgJHtsY2xfbWF5YmVfZm9ydGlmeX0iCisjIERlYWwgd2l0aCBwcGMgc3BlY2lmaWMgbGlua2VyIGZhaWx1cmVzIHdoZW4gdXNpbmcgdGhlIGNmbGFncworU0VDVVJJVFlfQ0ZMQUdTX3BuLWRidXNfcG93ZXJwYyA9ICIiCitTRUNVUklUWV9DRkxBR1NfcG4tZGJ1cy1wdGVzdF9wb3dlcnBjID0gIiIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJtYXRjaGJveF9wb3dlcnBjID0gIiIKKworIyBhcm0gc3BlY2lmaWMgc2VjdXJpdHkgZmxhZyBpc3N1ZXMKK1NFQ1VSSVRZX0NGTEFHU19wbi1sdHRuZy10b29sc19hcm0gPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1hc3BlbGwgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1iZWVjcnlwdCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWJsa3RyYWNlID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tY29yZXV0aWxzID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCisjIEN1cmwgc2VlbXMgdG8gY2hlY2sgZm9yIEZPUlRJRllfU09VUkNFIGluIENGTEFHUywgYnV0IGV2ZW4gYXNzaWduZWQKKyMgdG8gQ1BQRkxBR1MgaXQgZ2V0cyBwaWNrZWQgaW50byBDRkxBR1MgaW4gYml0YmFrZS4KKyNUQVJHRVRfQ1BQRkxBR1NfcG4tY3VybCArPSAiLURfRk9SVElGWV9TT1VSQ0U9MiIKK1NFQ1VSSVRZX0NGTEFHU19wbi1jdXBzID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tY3VybCA9ICItZnN0YWNrLXByb3RlY3Rvci1hbGwgLXBpZSAtZnBpZSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1kYiA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWRpcmVjdGZiID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZ2xpYmMgPSAiIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdsaWJjLWluaXRpYWwgPSAiIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWVsZnV0aWxzID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZW5jaGFudCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWV4cGVjdCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWZsYWMgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1mbGV4ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZ2NjID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZ2NjLXJ1bnRpbWUgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1nY2Mtc2FuaXRpemVycyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdkYiA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdtcCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdudXRscyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdydWIgPSAiIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdydWItZWZpID0gIiIKK1NFQ1VSSVRZX0NGTEFHU19wbi1ncnViLWVmaS1uYXRpdmUgPSAiIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdydWItZWZpLXg4Ni1uYXRpdmUgPSAiIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdydWItZWZpLWk1ODYtbmF0aXZlID0gIiIKK1NFQ1VSSVRZX0NGTEFHU19wbi1ncnViLWVmaS14ODYtNjQtbmF0aXZlID0gIiIKK1NFQ1VSSVRZX0NGTEFHU19wbi1nc3QtcGx1Z2lucy1iYWQgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1nc3QtcGx1Z2lucy1nbCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1oYXJmYnV6eiA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWtleGVjLXRvb2xzID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4taXB0YWJsZXMgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJhaW8gPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJjYXAgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJnY2MgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJpZDN0YWcgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJuZXd0ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tbGliZ2x1ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tbGlicGNhcCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWxpYnBjcmUgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJwcm94eSA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWx0dG5nLXVzdCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLW1lc2EgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1tZXNhLWdsID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tb3BlbnNzbCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLW9wZW5zcCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXBwcCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXB5dGhvbiA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXB5dGhvbi1pbWFnaW5nID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tcHl0aG9uLXB5Y3VybCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXB5dGhvbi1zbWFydHBtID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tcHl0aG9uLW51bXB5ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tcHl0aG9uMyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXRjbCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXRpZmYgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi12YWxncmluZCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXpsaWIgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKKworIyBUaGVzZSAyIGhhdmUgdGV4dCByZWxjbyBlcnJvcnMgd2l0aCB0aGUgcGllIG9wdGlvbnMgZW5hYmxlZAorU0VDVVJJVFlfQ0ZMQUdTX3BuLWx0cCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXB1bHNlYXVkaW8gPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKKworVEFSR0VUX0NGTEFHU19hcHBlbmQgPSAiICR7U0VDVVJJVFlfQ0ZMQUdTfSIKK1RBUkdFVF9MREZMQUdTX2FwcGVuZCA9ICIgJHtTRUNVUklUWV9MREZMQUdTfSIKKworU0VDVVJJVFlfTERGTEFHU19wbi14Zjg2LXZpZGVvLWZiZGV2ID0gIiR7U0VDVVJJVFlfWF9MREZMQUdTfSIKK1NFQ1VSSVRZX0xERkxBR1NfcG4teGY4Ni12aWRlby1pbnRlbCA9ICIke1NFQ1VSSVRZX1hfTERGTEFHU30iCitTRUNVUklUWV9MREZMQUdTX3BuLXhmODYtdmlkZW8tb21hcGZiID0gIiR7U0VDVVJJVFlfWF9MREZMQUdTfSIKK1NFQ1VSSVRZX0xERkxBR1NfcG4teGY4Ni12aWRlby1vbWFwID0gIiR7U0VDVVJJVFlfWF9MREZMQUdTfSIKK1NFQ1VSSVRZX0xERkxBR1NfcG4teGY4Ni12aWRlby12ZXNhID0gIiR7U0VDVVJJVFlfWF9MREZMQUdTfSIKK1NFQ1VSSVRZX0xERkxBR1NfcG4teGY4Ni12aWRlby12bXdhcmUgPSAiJHtTRUNVUklUWV9YX0xERkxBR1N9IgorU0VDVVJJVFlfTERGTEFHU19wbi14c2VydmVyLXhvcmcgPSAiJHtTRUNVUklUWV9YX0xERkxBR1N9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLWJhcmVtZXRhbC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y2xpYmMtYmFyZW1ldGFsLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGNlNmQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLWJhcmVtZXRhbC5pbmMKQEAgLTAsMCArMSwzMiBAQAorIworIyBiYXJlbWV0YWwgY29uZmlndXJhdGlvbgorIworCitMSUJDRVhURU5TSU9OID0gIiIKKworIyBBZGQgYmFyZW1ldGFsIGxpYmMgb3ZlcnJpZGVzIHRvIHRoZSBvdmVycmlkZXMuCitMSUJDT1ZFUlJJREUgPSAiOmxpYmMtYmFyZW1ldGFsIgorT1ZFUlJJREVTIC49ICIke0xJQkNPVkVSUklERX0iCisKK0FTU1VNRV9QUk9WSURFRCArPSAidmlydHVhbC9saWJjIHZpcnR1YWwvbGliaWNvbnYiCisKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmMgPz0gIm11c2wiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJpY29udiA/PSAibXVzbCIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmludGwgPz0gImdldHRleHQiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRpdmVzZGstbGliaW50bCA/PSAibmF0aXZlc2RrLWdsaWJjIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2RrLWxpYmljb252ID89ICJuYXRpdmVzZGstZ2xpYmMiCisKK1VTRV9OTFMgPz0gIm5vIgorSU1BR0VfTElOR1VBUyA9ICIiCitMSUJDX0RFUEVOREVOQ0lFUyA9ICIiCisKK0VYVFJBX09FQ09ORl9wbi1nY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH1fYXBwZW5kID0gIiAtLXdpdGhvdXQtaGVhZGVycyIKK0RFUEVORFNfcmVtb3ZlX3BuLW1ldGEtdG9vbGNoYWluID0gInZpcnR1YWwvbGliYyB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1jb21waWxlcmxpYnMiCisKK1RBUkdFVF9PUyA9ICJlbGYiCitUQVJHRVRfT1NfYXJtID0gImVhYmkiCisKK1RPT0xDSEFJTl9IT1NUX1RBU0sgPz0gInBhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi0ke01BQ0hJTkV9IgorVE9PTENIQUlOX0hPU1RfVEFTS19BVFRFTVBUT05MWSA/PSAiIgorVE9PTENIQUlOX1RBUkdFVF9UQVNLID89ICJsaWJnY2MtZGV2IgorVE9PTENIQUlOX05FRURfQ09ORklHU0lURV9DQUNIRV9yZW1vdmUgPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmMgemxpYiBuY3Vyc2VzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLWdsaWJjLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy1nbGliYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ5OTE4ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy1nbGliYy5pbmMKQEAgLTAsMCArMSw0MCBAQAorIworIyBnbGliYyBzcGVjaWZpYyBjb25maWd1cmF0aW9uCisjCisKK0xJQkNFWFRFTlNJT04gPSAiJHtAWycnLCAnLWdudSddWyhkLmdldFZhcignQUJJRVhURU5TSU9OJywgVHJ1ZSkgb3IgJycpICE9ICcnXX0iCisKKyMgQWRkIGdsaWJjIG92ZXJyaWRlcyB0byB0aGUgb3ZlcnJpZGVzIGZvciBnbGliYy4KK0xJQkNPVkVSUklERSA9ICI6bGliYy1nbGliYyIKK09WRVJSSURFUyAuPSAiJHtMSUJDT1ZFUlJJREV9IgorCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJpY29udiA/PSAiZ2xpYmMiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRpdmVzZGstbGliaWNvbnYgPz0gIm5hdGl2ZXNkay1nbGliYyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay1saWJpbnRsID89ICJuYXRpdmVzZGstZ2xpYmMiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJpbnRsID89ICJnbGliYyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmMgPz0gImdsaWJjIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2RrLWxpYmMgPz0gIm5hdGl2ZXNkay1nbGliYyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmMtbG9jYWxlID89ICJnbGliYy1sb2NhbGUiCisKK0NYWEZMQUdTICs9ICItZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4iCisKK0xJQkNfREVQRU5ERU5DSUVTID0gImxpYnNlZ2ZhdWx0IFwKKwkJICAgICBnbGliYyBcCisJCSAgICAgZ2xpYmMtZGJnIFwKKwkJICAgICBnbGliYy1kZXYgXAorCQkgICAgIGdsaWJjLXV0aWxzIFwKKwkJICAgICBnbGliYy10aHJlYWQtZGIgXAorCQkgICAgICR7QGdldF9saWJjX2xvY2FsZXNfZGVwZW5kZW5jaWVzKGQpfSIKKworTElCQ19MT0NBTEVfREVQRU5ERU5DSUVTID0gIlwKKwlnbGliYy1sb2NhbGVkYXRhLWkxOG4gXAorCWdsaWJjLWdjb252LWlibTg1MCBcCisJZ2xpYmMtZ2NvbnYtY3AxMjUyIFwKKwlnbGliYy1nY29udi1pc284ODU5LTEgXAorCWdsaWJjLWdjb252LWlzbzg4NTktMTUiCisKK2RlZiBnZXRfbGliY19sb2NhbGVzX2RlcGVuZGVuY2llcyhkKToKKyAgICBpZiAnbGliYy1sb2NhbGVzJyBpbiAoZC5nZXRWYXIoJ0RJU1RST19GRUFUVVJFUycsIFRydWUpIG9yICcnKS5zcGxpdCgpIDoKKyAgICAgICAgcmV0dXJuIGQuZ2V0VmFyKCdMSUJDX0xPQ0FMRV9ERVBFTkRFTkNJRVMnLCBUcnVlKSBvciAnJworICAgIGVsc2U6CisgICAgICAgIHJldHVybiAnJwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLW11c2wuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLW11c2wuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZGQ1OGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y2xpYmMtbXVzbC5pbmMKQEAgLTAsMCArMSwyNyBAQAorIworIyBtdXNsIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24KKyMKKworTElCQ0VYVEVOU0lPTiA9ICItbXVzbCIKKworIyBBZGQgdWNsaWJjIG92ZXJyaWRlcyB0byB0aGUgb3ZlcnJpZGVzLgorTElCQ09WRVJSSURFID0gIjpsaWJjLW11c2wiCitPVkVSUklERVMgLj0gIiR7TElCQ09WRVJSSURFfSIKKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliYyA/PSAibXVzbCIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmljb252ID89ICJtdXNsIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliaW50bCA/PSAibXVzbCIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay1saWJpbnRsID89ICJuYXRpdmVzZGstZ2xpYmMiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRpdmVzZGstbGliaWNvbnYgPz0gIm5hdGl2ZXNkay1nbGliYyIKKworI1VTRV9OTFMgPz0gIm5vIgorCitDWFhGTEFHUyArPSAiLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIgorCitJTUFHRV9MSU5HVUFTID0gIiIKKworTElCQ19ERVBFTkRFTkNJRVMgPSAiXAorICAgIG11c2wgXAorICAgIG11c2wtZGJnIFwKKyAgICBtdXNsLWRldiBcCisgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLXVjbGliYy5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y2xpYmMtdWNsaWJjLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGMzY2RiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLXVjbGliYy5pbmMKQEAgLTAsMCArMSwyOCBAQAorIworIyB1Y2xpYmMgc3BlY2lmaWMgY29uZmlndXJhdGlvbgorIworCitMSUJDRVhURU5TSU9OID0gIi11Y2xpYmMiCisKKyMgQWRkIHVjbGliYyBvdmVycmlkZXMgdG8gdGhlIG92ZXJyaWRlcy4KK0xJQkNPVkVSUklERSA9ICI6bGliYy11Y2xpYmMiCitPVkVSUklERVMgLj0gIiR7TElCQ09WRVJSSURFfSIKKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliYyA/PSAidWNsaWJjIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliaWNvbnYgPz0gImxpYmljb252IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliaW50bCA/PSAiZ2V0dGV4dCIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay1saWJpbnRsID89ICJuYXRpdmVzZGstZ2xpYmMiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRpdmVzZGstbGliaWNvbnYgPz0gIm5hdGl2ZXNkay1nbGliYyIKKworVVNFX05MUyA/PSAibm8iCisKK0NYWEZMQUdTICs9ICItZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4iCisKK0lNQUdFX0xJTkdVQVMgPSAiIgorCitMSUJDX0RFUEVOREVOQ0lFUyA9ICJcCisgICAgdWNsaWJjIFwKKyAgICB1Y2xpYmMtZGJnIFwKKyAgICB1Y2xpYmMtZGV2IFwKKyAgICB1Y2xpYmMtdGhyZWFkLWRiIFwKKyAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y21vZGUtZGVmYXVsdC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y21vZGUtZGVmYXVsdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIwNTUyNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbW9kZS1kZWZhdWx0LmluYwpAQCAtMCwwICsxLDc1IEBACisjCisjIERlZmF1bHQgdG9vbGNoYWluIGNvbmZpZ3VyYXRpb24KKyMKKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzID0gImJpbnV0aWxzLWNyb3NzLSR7VEFSR0VUX0FSQ0h9IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYy1pbml0aWFsID0gImdjYy1jcm9zcy1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYyA9ICJnY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH0iCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9ZysrID0gImdjYy1jcm9zcy0ke1RBUkdFVF9BUkNIfSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1jb21waWxlcmxpYnMgPSAiZ2NjLXJ1bnRpbWUiCitQUkVGRVJSRURfUFJPVklERVJfZ2RiID0gImdkYiIKKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtTREtfUFJFRklYfWJpbnV0aWxzLWNyb3Nzc2RrID89ICJiaW51dGlscy1jcm9zc3Nkay0ke1NES19BUkNIfSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7U0RLX1BSRUZJWH1nY2MtaW5pdGlhbCA9ICJnY2MtY3Jvc3NzZGstaW5pdGlhbC0ke1NES19BUkNIfSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7U0RLX1BSRUZJWH1nY2MgPSAiZ2NjLWNyb3Nzc2RrLSR7U0RLX0FSQ0h9IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtTREtfUFJFRklYfWcrKyA9ICJnY2MtY3Jvc3NzZGstJHtTREtfQVJDSH0iCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1NES19QUkVGSVh9Y29tcGlsZXJsaWJzID0gIm5hdGl2ZXNkay1nY2MtcnVudGltZSIKKworIyBEZWZhdWx0IGxpYmMgY29uZmlnCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9bGliYy1mb3ItZ2NjID0gIiR7VENMSUJDfSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay0ke1NES19QUkVGSVh9bGliYy1mb3ItZ2NjID89ICJuYXRpdmVzZGstJHtUQ0xJQkN9IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWxpYmMtaW5pdGlhbCA9ICIke1RDTElCQ30taW5pdGlhbCIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay0ke1NES19QUkVGSVh9bGliYy1pbml0aWFsID0gIm5hdGl2ZXNkay0ke1RDTElCQ30taW5pdGlhbCIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2dldHRleHQgPz89ICJnZXR0ZXh0IgorCitHQ0NWRVJTSU9OID89ICI1LiUiCitTREtHQ0NWRVJTSU9OID89ICIke0dDQ1ZFUlNJT059IgorQklOVVZFUlNJT04gPz0gIjIuMjUlIgorR0RCVkVSU0lPTiA/PSAiNy45JSIKK0dMSUJDVkVSU0lPTiA/PSAiMi4yMiIKK1VDTElCQ1ZFUlNJT04gPz0gIjAuOS4zMytnaXQlIgorTElOVVhMSUJDVkVSU0lPTiA/PSAiNC4xIgorCitQUkVGRVJSRURfVkVSU0lPTl9nY2MgPz0gIiR7R0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH0gPz0gIiR7R0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nY2MtY3Jvc3MtaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSA/PSAiJHtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2djYy1jcm9zc3Nkay0ke1NES19BUkNIfSA/PSAiJHtTREtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2djYy1jcm9zc3Nkay1pbml0aWFsLSR7U0RLX0FSQ0h9ID89ICIke1NES0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2NjLWNyb3NzLWNhbmFkaWFuLSR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH0gPz0gIiR7R0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nY2MtcnVudGltZSA/PSAiJHtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2djYy1zYW5pdGl6ZXJzID89ICIke0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fbmF0aXZlc2RrLWdjYy1ydW50aW1lID89ICIke1NES0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fbmF0aXZlc2RrLWdjYy1zYW5pdGl6ZXJzID89ICIke1NES0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fbGliZ2NjID89ICIke0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fbGliZ2NjLWluaXRpYWwgPz0gIiR7R0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9uYXRpdmVzZGstZ2NjID89ICIke1NES0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fbmF0aXZlc2RrLWxpYmdjYyA/PSAiJHtTREtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX25hdGl2ZXNkay1saWJnY2MtaW5pdGlhbCA/PSAiJHtTREtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2JpbnV0aWxzID89ICIke0JJTlVWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2JpbnV0aWxzLW5hdGl2ZSA/PSAiJHtCSU5VVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9iaW51dGlscy1jcm9zcy0ke1RBUkdFVF9BUkNIfSA/PSAiJHtCSU5VVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9iaW51dGlscy1jcm9zc3Nkay0ke1NES19BUkNIfSA/PSAiJHtCSU5VVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9iaW51dGlscy1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9ID89ICIke0JJTlVWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2dkYiA/PSAiJHtHREJWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2dkYi1jcm9zcy0ke1RBUkdFVF9BUkNIfSA/PSAiJHtHREJWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2dkYi1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9ID89ICIke0dEQlZFUlNJT059IgorCitQUkVGRVJSRURfVkVSU0lPTl9saW51eC1saWJjLWhlYWRlcnMgPz0gIiR7TElOVVhMSUJDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9uYXRpdmVzZGstbGludXgtbGliYy1oZWFkZXJzID89ICIke0xJTlVYTElCQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2xpYmMgICAgICAgICAgICAgICAgICAgID89ICIke0dMSUJDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nbGliYy1sb2NhbGUgICAgICAgICAgICAgPz0gIiR7R0xJQkNWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2dsaWJjLW10cmFjZSAgICAgICAgICAgICA/PSAiJHtHTElCQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2xpYmMtc2NyaXB0cyAgICAgICAgICAgID89ICIke0dMSUJDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9uYXRpdmVzZGstZ2xpYmMgICAgICAgICAgPz0gIiR7R0xJQkNWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2dsaWJjLWluaXRpYWwgICAgICAgICAgICA/PSAiJHtHTElCQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fbmF0aXZlc2RrLWdsaWJjLWluaXRpYWwgID89ICIke0dMSUJDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9jcm9zcy1sb2NhbGVkZWYtbmF0aXZlICAgPz0gIiR7R0xJQkNWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX3VjbGliYyAgICAgICAgICAgICAgICAgICA/PSAiJHtVQ0xJQkNWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX3VjbGliYy1pbml0aWFsICAgICAgICAgICA/PSAiJHtVQ0xJQkNWRVJTSU9OfSIKKyMgZG9uJ3QgdXNlIHZlcnNpb24gZWFybGllciB0aGFuIDEuNCBmb3IgZ3ppcC1uYXRpdmUsIGFzIGl0J3MgbmVjZXNzYXJ5IGZvcgorIyBzb21lIHBhY2thZ2VzIHVzaW5nIGFuIGFyY2hpdmUgZm9ybWF0IGluY29tcGF0aWJsZSB3aXRoIGVhcmxpZXIgZ3ppcAorUFJFRkVSUkVEX1ZFUlNJT05fZ3ppcC1uYXRpdmUgPz0gIjEuNiIKKworIyBTZXR1cCBzdWl0YWJsZSB0b29sY2hhaW4gZmxhZ3MKK3JlcXVpcmUgY29uZi9kaXN0cm8vaW5jbHVkZS9hcy1uZWVkZWQuaW5jCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3Vwc3RyZWFtX3RyYWNraW5nLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3Vwc3RyZWFtX3RyYWNraW5nLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmE1ZTZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdXBzdHJlYW1fdHJhY2tpbmcuaW5jCkBAIC0wLDAgKzEsMjQgQEAKKyMgTk9URTogVEhJUyBGSUxFIElTIERFUFJFQ0FURUQuIFBsZWFzZSBhZGQgbmV3IGVudHJpZXMgdG8gdGhlIHJlY2lwZXMgdGhlbXNlbHZlcy4KKyMKKyMgdXBzdHJlYW1fdHJhY2tpbmcuaW5jIC0gVGhpcyBmaWxlIGNvbnRhaW5zIGRhdGEgdGhhdCB0cmFja3MgdGhlCisjIHVwc3RyZWFtIHByb2plY3QgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gcmVjaXBlLiBUaGlzIGxpc3QgaXMgbmVlZGVkCisjIGZvciByZWNpcGVzIHRoYXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYW4gbm90IGJlIGF1dG9tYWdpY2FsbHkgZGlzY292ZXJlZC4KKyMgQXMgd2UgYXV0b21hdGUgdGhpcyBjaGVja2luZywgdGhpcyBmaWxlIHdpbGwgc2xvd2VkIGJlIHJlZHVjZWQuCisjCisjIFRoaXMgZGF0YSBpcyB1c2VkIGJ5IHRoZSBwYWNrYWdlIHJlcG9ydGluZyBzeXN0ZW0gKHBhY2thZ2VzLnlvY3RvcHJvamVjdC5vcmcpCisjCisjIFRoZSBmb3JtYXQgaXMgYXMgYSBiaXRiYWtlIHZhcmlhYmxlIG92ZXJyaWRlIGZvciBlYWNoIHJlY2lwZQorIworIyAgICAgICBSRUNJUEVfVVBTVFJFQU1fVkVSU0lPTl9wbi08cmVjaXBlIG5hbWU+ID0gIjx2ZXJzaW9uPiIKKyMgICAgICAgUkVDSVBFX1VQU1RSRUFNX0RBVEVfcG4tPHJlY2lwZSBuYW1lPiA9ICJNbW0gZGQsIFlZWVkiCisjCSAtIFRoaXMgaXMgdGhlIGxhdGVzdCB1cHN0cmVhbSB2ZXJzaW9uIGFuZCBkYXRlCisjICAgICAgIFJFQ0lQRV9OT19VUERBVEVfUkVBU09OX3BuLTxyZWNpcGUgbmFtZT4gPSAiPGZyZWUgZm9ybSB0ZXh0PiIKKyMgICAgICAgIC0gVXNlZCB0byBub3RlIHdoeSBhIHJlY2lwZSBzaG91bGQgbm90IGJlIHVwZ3JhZGVkIHRvIGEgbmV3ZXIgdmVyc29pbgorIyAgICAgICBDSEVDS19EQVRFX3BuLTxyZWNpcGUgbmFtZT4gPSAiTW1tIGRkLCBZWVlZIgorIyAgICAgICAgLSBUaGlzIGlzIHRoZSBkYXRlIHRoYXQgdXBzdHJlYW0gd2FzIGxhc3QgbWFudWFsbHkgY2hlY2tlZCBvdmVyIHRpbWUKKyMgICAgICAgICAgdGhpcyBzaG91bGQgYmUgcmVtb3ZlZCBhcyB3ZSBhdXRvbWF0ZSB0aGlzIGNoZWNraW5nCisjCisjIFRoZXNlIGVudHJpZXMgd2lsbCBzbG93bHkgYmUgcmVtb3ZlZCBhcyB3ZSBjYW4gYXV0b21hdGljYWxseSBkZXRlcm1pbmUKKyMgdGhlIGluZm9ybWF0aW9uIGluIHRoaXMgZmlsZS4gIFNvIGZvciBleGlzdGluZyByZWNpcGVzIHRoYXQgd2UgY2FuIGdldCAKKyMgZnJvbSB0aGUgUmVjaXBlIHJlcG9ydGluZyBzeXN0ZW0sIHRoZSBlbnRyaWVzIGhlcmUgY2FuIGJlIHJlbW92ZWQuCisjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS93b3JsZC1icm9rZW4uaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvd29ybGQtYnJva2VuLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjBjMmRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvd29ybGQtYnJva2VuLmluYwpAQCAtMCwwICsxLDUgQEAKKyMKKyMgRXhjbHVkZSBrbm93biBicm9rZW4gcGFja2FnZXMKKyMKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9kb2N1bWVudGF0aW9uLmNvbmYgYi95b2N0by1wb2t5L21ldGEvY29uZi9kb2N1bWVudGF0aW9uLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc1YWI2YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2RvY3VtZW50YXRpb24uY29uZgpAQCAtMCwwICsxLDQ1OSBAQAorIyB0aGlzIGZpbGUgaG9sZHMgZG9jdW1lbnRhdGlvbiBmb3Iga25vd24ga2V5cywgcG9zc2libGUgdmFsdWVzIGFuZAorIyB0aGVpciBtZWFuaW5ncy4gUGxlYXNlIHVwZGF0ZSwgY29ycmVjdCBhbmQgZXh0ZW5kIHRoaXMgZG9jdW1lbnRhdGlvbi4KKyMgTWFpbCB5b3VyIGNoYW5nZXMgdG8gb3BlbmVtYmVkZGVkLWRldmVsQG9wZW5lbWJlZGRlZC5vcmcKKworIyBERVNDUklQVElPTlMgRk9SIFRBU0tTICMKKworZG9fYm9vdGltZ1tkb2NdID0gIkNyZWF0ZXMgYSBib290YWJsZSBsaXZlIGltYWdlIgorZG9fYnVpbGRbZG9jXSA9ICJEZWZhdWx0IHRhc2sgZm9yIGEgcmVjaXBlIC0gZGVwZW5kcyBvbiBhbGwgb3RoZXIgbm9ybWFsIHRhc2tzIHJlcXVpcmVkIHRvICdidWlsZCcgYSByZWNpcGUiCitkb19idW5kbGVfaW5pdHJhbWZzW2RvY10gPSAiQ29tYmluZXMgYW4gaW5pdGlhbCByYW1kaXNrIGltYWdlIGFuZCBrZXJuZWwgdG9nZXRoZXIgdG8gZm9ybSBhIHNpbmdsZSBpbWFnZSIKK2RvX2NoZWNrdXJpW2RvY10gPSAiVmFsaWRhdGVzIHRoZSBTUkNfVVJJIHZhbHVlIgorZG9fY2hlY2t1cmlhbGxbZG9jXSA9ICJWYWxpZGF0ZXMgdGhlIFNSQ19VUkkgdmFsdWUgZm9yIGFsbCByZWNpcGVzIHJlcXVpcmVkIHRvIGJ1aWxkIGEgdGFyZ2V0IgorZG9fY2xlYW5bZG9jXSA9ICJSZW1vdmVzIGFsbCBvdXRwdXQgZmlsZXMgZm9yIGEgdGFyZ2V0IgorZG9fY2xlYW5hbGxbZG9jXSA9ICJSZW1vdmVzIGFsbCBvdXRwdXQgZmlsZXMsIHNoYXJlZCBzdGF0ZSBjYWNoZSwgYW5kIGRvd25sb2FkZWQgc291cmNlIGZpbGVzIGZvciBhIHRhcmdldCIKK2RvX2NsZWFuc3N0YXRlW2RvY10gPSAiUmVtb3ZlcyBhbGwgb3V0cHV0IGZpbGVzIGFuZCBzaGFyZWQgc3RhdGUgY2FjaGUgZm9yIGEgdGFyZ2V0IgorZG9fY29tcGlsZVtkb2NdID0gIkNvbXBpbGVzIHRoZSBzb3VyY2UgaW4gdGhlIGNvbXBpbGF0aW9uIGRpcmVjdG9yeSIKK2RvX2NvbXBpbGVfa2VybmVsbW9kdWxlc1tkb2NdID0gIkNvbXBpbGVzIGxvYWRhYmxlIG1vZHVsZXMgZm9yIHRoZSBMaW51eCBrZXJuZWwiCitkb19jb21waWxlX3B0ZXN0X2Jhc2VbZG9jXSA9ICJDb21waWxlcyB0aGUgcnVudGltZSB0ZXN0IHN1aXRlIGluY2x1ZGVkIGluIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdCIKK2RvX2NvbmZpZ3VyZVtkb2NdID0gIkNvbmZpZ3VyZXMgdGhlIHNvdXJjZSBieSBlbmFibGluZyBhbmQgZGlzYWJsaW5nIGFueSBidWlsZC10aW1lIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdCIKK2RvX2NvbmZpZ3VyZV9wdGVzdF9iYXNlW2RvY10gPSAiQ29uZmlndXJlcyB0aGUgcnVudGltZSB0ZXN0IHN1aXRlIGluY2x1ZGVkIGluIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdCIKK2RvX2RlcGxveVtkb2NdID0gIldyaXRlcyBkZXBsb3lhYmxlIG91dHB1dCBmaWxlcyB0byB0aGUgZGVwbG95IGRpcmVjdG9yeSIKK2RvX2RldnB5c2hlbGxbZG9jXSA9ICJTdGFydHMgYW4gaW50ZXJhY3RpdmUgUHl0aG9uIHNoZWxsIGZvciBkZXZlbG9wbWVudC9kZWJ1Z2dpbmciCitkb19kZXZzaGVsbFtkb2NdID0gIlN0YXJ0cyBhIHNoZWxsIHdpdGggdGhlIGVudmlyb25tZW50IHNldCB1cCBmb3IgZGV2ZWxvcG1lbnQvZGVidWdnaW5nIgorZG9fZGlmZmNvbmZpZ1tkb2NdID0gIkNvbXBhcmVzIHRoZSBvbGQgYW5kIG5ldyBjb25maWcgZmlsZXMgYWZ0ZXIgcnVubmluZyBkb19tZW51Y29uZmlnIGZvciB0aGUga2VybmVsIgorZG9fZmV0Y2hbZG9jXSA9ICJGZXRjaGVzIHRoZSBzb3VyY2UgY29kZSIKK2RvX2ZldGNoYWxsW2RvY10gPSAiRmV0Y2hlcyBhbGwgcmVtb3RlIHNvdXJjZXMgcmVxdWlyZWQgdG8gYnVpbGQgYSB0YXJnZXQiCitkb19nZW5lcmF0ZV9xdF9jb25maWdfZmlsZVtkb2NdID0gIldyaXRlcyBhIHF0LmNvbmYgZmlsZSBmb3IgYnVpbGRpbmcgYSBRdC1iYXNlZCBhcHBsaWNhdGlvbiIKK2RvX2luc3RhbGxbZG9jXSA9ICJDb3BpZXMgZmlsZXMgZnJvbSB0aGUgY29tcGlsYXRpb24gZGlyZWN0b3J5IHRvIGEgaG9sZGluZyBhcmVhIgorZG9faW5zdGFsbF9wdGVzdF9iYXNlW2RvY10gPSAiQ29waWVzIHRoZSBydW50aW1lIHRlc3Qgc3VpdGUgZmlsZXMgZnJvbSB0aGUgY29tcGlsYXRpb24gZGlyZWN0b3J5IHRvIGEgaG9sZGluZyBhcmVhIgorZG9fa2VybmVsX2NoZWNrb3V0W2RvY10gPSAiQ2hlY2tzIG91dCBzb3VyY2UvbWV0YSBicmFuY2hlcyBmb3IgYSBsaW51eC15b2N0byBzdHlsZSBrZXJuZWwiCitkb19rZXJuZWxfY29uZmlnY2hlY2tbZG9jXSA9ICJWYWxpZGF0ZXMgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZvciBhIGxpbnV4LXlvY3RvIHN0eWxlIGtlcm5lbCIKK2RvX2tlcm5lbF9jb25maWdtZVtkb2NdID0gIkFzc2VtYmxlcyB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZm9yIGEgbGludXgteW9jdG8gc3R5bGUga2VybmVsIgorZG9fa2VybmVsX2xpbmtfdm1saW51eFtkb2NdID0gIkNyZWF0ZXMgYSBzeW1ib2xpYyBsaW5rIGluIGFyY2gvJGFyY2gvYm9vdCBmb3Igdm1saW51eCBrZXJuZWwgaW1hZ2VzIgorZG9fbGlzdHRhc2tzW2RvY10gPSAiTGlzdHMgYWxsIGRlZmluZWQgdGFza3MgZm9yIGEgdGFyZ2V0IgorZG9fbWVudWNvbmZpZ1tkb2NdID0gIlJ1bnMgJ21ha2UgbWVudWNvbmZpZycgZm9yIHRoZSBrZXJuZWwiCitkb19wYWNrYWdlW2RvY10gPSAiQW5hbHl6ZXMgdGhlIGNvbnRlbnQgb2YgdGhlIGhvbGRpbmcgYXJlYSBhbmQgc3BsaXRzIGl0IGludG8gc3Vic2V0cyBiYXNlZCBvbiBhdmFpbGFibGUgcGFja2FnZXMgYW5kIGZpbGVzIgorZG9fcGFja2FnZV9pbmRleFtkb2NdID0gIkNyZWF0ZXMgb3IgdXBkYXRlcyB0aGUgaW5kZXggaW4gdGhlIFBhY2thZ2UgRmVlZCBhcmVhIgorZG9fcGFja2FnZV9xYVtkb2NdID0gIlJ1bnMgUUEgY2hlY2tzIG9uIHBhY2thZ2VkIGZpbGVzIgorZG9fcGFja2FnZV93cml0ZV9kZWJbZG9jXSA9ICJDcmVhdGVzIHRoZSBhY3R1YWwgREVCIHBhY2thZ2VzIGFuZCBwbGFjZXMgdGhlbSBpbiB0aGUgUGFja2FnZSBGZWVkIGFyZWEiCitkb19wYWNrYWdlX3dyaXRlX2lwa1tkb2NdID0gIkNyZWF0ZXMgdGhlIGFjdHVhbCBJUEsgcGFja2FnZXMgYW5kIHBsYWNlcyB0aGVtIGluIHRoZSBQYWNrYWdlIEZlZWQgYXJlYSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW2RvY10gPSAiQ3JlYXRlcyB0aGUgYWN0dWFsIFJQTSBwYWNrYWdlcyBhbmQgcGxhY2VzIHRoZW0gaW4gdGhlIFBhY2thZ2UgRmVlZCBhcmVhIgorZG9fcGFja2FnZV93cml0ZV90YXJbZG9jXSA9ICJDcmVhdGVzIHRhciBhcmNoaXZlcyBmb3IgcGFja2FnZXMgYW5kIHBsYWNlcyB0aGVtIGluIHRoZSBQYWNrYWdlIEZlZWQgYXJlYSIKK2RvX3BhY2thZ2VkYXRhW2RvY10gPSAiQ3JlYXRlcyBwYWNrYWdlIG1ldGFkYXRhIHVzZWQgYnkgdGhlIGJ1aWxkIHN5c3RlbSB0byBnZW5lcmF0ZSB0aGUgZmluYWwgcGFja2FnZXMiCitkb19wYXRjaFtkb2NdID0gIkxvY2F0ZXMgcGF0Y2ggZmlsZXMgYW5kIGFwcGxpZXMgdGhlbSB0byB0aGUgc291cmNlIGNvZGUiCitkb19wb3B1bGF0ZV9saWNbZG9jXSA9ICJXcml0ZXMgbGljZW5zZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHJlY2lwZSB0aGF0IGlzIGNvbGxlY3RlZCBsYXRlciB3aGVuIHRoZSBpbWFnZSBpcyBjb25zdHJ1Y3RlZCIKK2RvX3BvcHVsYXRlX3Nka1tkb2NdID0gIkNyZWF0ZXMgdGhlIGZpbGUgYW5kIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGFuIGluc3RhbGxhYmxlIFNESyIKK2RvX3BvcHVsYXRlX3N5c3Jvb3RbZG9jXSA9ICJDb3BpZXMgYSBzdWJzZXQgb2YgZmlsZXMgaW5zdGFsbGVkIGJ5IGRvX2luc3RhbGwgaW50byB0aGUgc3lzcm9vdCBpbiBvcmRlciB0byBtYWtlIHRoZW0gYXZhaWxhYmxlIHRvIG90aGVyIHJlY2lwZXMiCitkb19ybV93b3JrW2RvY10gPSAiUmVtb3ZlcyB3b3JrIGZpbGVzIGFmdGVyIHRoZSBidWlsZCBzeXN0ZW0gaGFzIGZpbmlzaGVkIHdpdGggdGhlbSIKK2RvX3JtX3dvcmtfYWxsW2RvY10gPSAiVG9wLWxldmVsIHRhc2sgZm9yIHJlbW92aW5nIHdvcmsgZmlsZXMgYWZ0ZXIgdGhlIGJ1aWxkIHN5c3RlbSBoYXMgZmluaXNoZWQgd2l0aCB0aGVtIgorZG9fcm9vdGZzW2RvY10gPSAiQ3JlYXRlcyB0aGUgcm9vdCBmaWxlc3lzdGVtIChmaWxlIGFuZCBkaXJlY3Rvcnkgc3RydWN0dXJlKSBmb3IgYW4gaW1hZ2UiCitkb19zYXZlZGVmY29uZmlnW2RvY10gPSAiQ3JlYXRlcyBhIG1pbmltYWwgTGludXgga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSIKK2RvX3NpemVjaGVja1tkb2NdID0gIkNoZWNrcyB0aGUgc2l6ZSBvZiB0aGUga2VybmVsIGltYWdlIGFnYWluc3QgS0VSTkVMX0lNQUdFX01BWFNJWkUgKGlmIHNldCkiCitkb19zcGR4W2RvY10gPSAiQSBidWlsZCBzdGFnZSB0aGF0IHRha2VzIHRoZSBzb3VyY2UgY29kZSBhbmQgc2NhbnMgaXQgb24gYSByZW1vdGUgRk9TU09MT0dZIHNlcnZlciBpbiBvcmRlciB0byBwcm9kdWNlIGFuIFNQRFggZG9jdW1lbnQiCitkb19zdHJpcFtkb2NdID0gIlN0cmlwcyB1bm5lZWRlZCBzZWN0aW9ucyBvdXQgb2YgdGhlIExpbnV4IGtlcm5lbCBpbWFnZSIKK2RvX3Rlc3RpbWFnZVtkb2NdID0gIkJvb3RzIGFuIGltYWdlIGFuZCBwZXJmb3JtcyBydW50aW1lIHRlc3RzIHdpdGhpbiB0aGUgaW1hZ2UiCitkb190ZXN0aW1hZ2VfYXV0b1tkb2NdID0gIkJvb3RzIGFuIGltYWdlIGFuZCBwZXJmb3JtcyBydW50aW1lIHRlc3RzIHdpdGhpbiB0aGUgaW1hZ2UgaW1tZWRpYXRlbHkgYWZ0ZXIgaXQgaGFzIGJlZW4gYnVpbHQiCitkb190ZXN0c2RrW2RvY10gPSAiSW5zdGFsbHMgYW4gU0RLIGFuZCBwZXJmb3JtcyBydW50aW1lIHRlc3RzIG9uIHRoZSB0b29scyBpbnN0YWxsZWQgYnkgaXQiCitkb191Ym9vdF9ta2ltYWdlW2RvY10gPSAiQ3JlYXRlcyBhIHVJbWFnZSBmaWxlIGZyb20gdGhlIGtlcm5lbCBmb3IgdGhlIFUtQm9vdCBib290bG9hZGVyIgorZG9fdW5wYWNrW2RvY10gPSAiVW5wYWNrcyB0aGUgc291cmNlIGNvZGUgaW50byBhIHdvcmtpbmcgZGlyZWN0b3J5IgorZG9fdmFsaWRhdGVfYnJhbmNoZXNbZG9jXSA9ICJFbnN1cmVzIHRoYXQgdGhlIHNvdXJjZS9tZXRhIGJyYW5jaGVzIGFyZSBvbiB0aGUgbG9jYXRpb25zIHNwZWNpZmllZCBieSB0aGVpciBTUkNSRVYgdmFsdWVzIGZvciBhIGxpbnV4LXlvY3RvIHN0eWxlIGtlcm5lbCIKK2RvX3ZtaW1nW2RvY10gPSAiQ3JlYXRlcyBhbiBpbWFnZSBmb3IgdXNlIHdpdGggVk13YXJlIG9yIFZpcnR1YWxCb3ggY29tcGF0aWJsZSB2aXJ0dWFsIG1hY2hpbmUgaG9zdHMgKGJhc2VkIG9uIElNQUdFX0ZTVFlQRVMgZWl0aGVyIC52bWRrIG9yIC52ZGkpIgorCisjIERFU0NSSVBUSU9OUyBGT1IgVkFSSUFCTEVTICMKKworI0EKKworQUxMT1dfRU1QVFlbZG9jXSA9ICJTcGVjaWZpZXMgaWYgYW4gb3V0cHV0IHBhY2thZ2Ugc2hvdWxkIHN0aWxsIGJlIHByb2R1Y2VkIGlmIGl0IGlzIGVtcHR5LiIKK0FMVEVSTkFUSVZFW2RvY10gPSAiTGlzdHMgY29tbWFuZHMgaW4gYSBwYWNrYWdlIHRoYXQgbmVlZCBhbiBhbHRlcm5hdGl2ZSBiaW5hcnkgbmFtaW5nIHNjaGVtZS4iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZG9jXSA9ICJVc2VkIGJ5IHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIHRvIG1hcCBkdXBsaWNhdGVkIGNvbW1hbmRzIHRvIGFjdHVhbCBsb2NhdGlvbnMuIgorQUxURVJOQVRJVkVfUFJJT1JJVFlbZG9jXSA9ICJVc2VkIGJ5IHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIHRvIGNyZWF0ZSBkZWZhdWx0IHByaW9yaXRpZXMgZm9yIGR1cGxpY2F0ZWQgY29tbWFuZHMuIgorQUxURVJOQVRJVkVfVEFSR0VUW2RvY10gPSAiVXNlZCBieSB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSB0byBjcmVhdGUgZGVmYXVsdCBsaW5rIGxvY2F0aW9ucyBmb3IgZHVwbGljYXRlZCBjb21tYW5kcy4iCitBU1NVTUVfUFJPVklERURbZG9jXSA9ICJMaXN0IG9mIHBhY2thZ2VzIChyZWNpcGVzIGFjdHVhbGx5KSB0aGF0IGFyZSBhc3N1bWVkIHRvIGJlIGltcGxpY2l0bHkgYXZhaWxhYmxlLiBCaXRCYWtlIGRvZXMgbm90IGJ1aWxkIHRoZXNlIHBhY2thZ2VzLiIKK0FTU1VNRV9TSExJQlNbZG9jXSA9ICJMaXN0IG9mIHNobGliOnBhY2thZ2VbX3ZlcnNpb25dIG1hcHBpbmdzLiBVc2VmdWwgZm9yIGxpYiBwYWNrYWdlcyBpbiBBU1NVTUVfUFJPVklERUQsIGZvciB3aGljaCBhdXRvbWF0aWMgc2hsaWIgZGVwZW5kZW5jeSB0cmFja2luZyBkb2VzIG5vdCB3b3JrLiIKK0FVVEhPUltkb2NdID0gIkVtYWlsIGFkZHJlc3MgdXNlZCB0byBjb250YWN0IHRoZSBvcmlnaW5hbCBhdXRob3IocykgaW4gb3JkZXIgdG8gc2VuZCBwYXRjaGVzIGFuZCBmb3J3YXJkIGJ1Z3MuIgorQVVUT19TWVNMSU5VWE1FTlVbZG9jXSA9ICJFbmFibGVzIGNyZWF0aW5nIGFuIGF1dG9tYXRpYyBtZW51IGZvciB0aGUgc3lzbGludXggYm9vdGxvYWRlci4iCitBVVRPUkVWW2RvY10gPSAiV2hlbiBTUkNSRVYgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlLCBpdCBzcGVjaWZpZXMgdG8gdXNlIHRoZSBsYXRlc3Qgc291cmNlIHJldmlzaW9uIGluIHRoZSByZXBvc2l0b3J5LiIKKworI0IKKworQltkb2NdID0gIlRoZSBCdWlsZCBEaXJlY3RvcnkuIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHBsYWNlcyBnZW5lcmF0ZWQgb2JqZWN0cyBpbnRvIHRoZSBCdWlsZCBEaXJlY3RvcnkgZHVyaW5nIGEgcmVjaXBlJ3MgYnVpbGQgcHJvY2Vzcy4iCitCQURfUkVDT01NRU5EQVRJT05TW2RvY10gPSAiQSBsaXN0IG9mIHBhY2thZ2VzIG5vdCB0byBpbnN0YWxsIGRlc3BpdGUgYmVpbmcgcmVjb21tZW5kZWQgYnkgYSByZWNpcGUuIFN1cHBvcnQgZm9yIHRoaXMgdmFyaWFibGUgZXhpc3RzIG9ubHkgd2hlbiB1c2luZyB0aGUgSVBLIG9yIFJQTSBwYWNrYWdpbmcgYmFja2VuZHMuIgorQkJfREFOR0xJTkdBUFBFTkRTX1dBUk5PTkxZW2RvY10gPSAiRGVmaW5lcyBob3cgQml0QmFrZSBoYW5kbGVzIHNpdHVhdGlvbnMgd2hlcmUgYW4gYXBwZW5kIGZpbGUgKC5iYmFwcGVuZCkgaGFzIG5vIGNvcnJlc3BvbmRpbmcgcmVjaXBlIGZpbGUgKC5iYikuIgorQkJfRElTS01PTl9ESVJTW2RvY10gPSAiTW9uaXRvcnMgZGlzayBzcGFjZSBhbmQgYXZhaWxhYmxlIGlub2RlcyBkdXJpbmcgdGhlIGJ1aWxkIGFuZCBhbGxvd3MgeW91IHRvIGNvbnRyb2wgdGhlIGJ1aWxkIGJhc2VkIG9uIHRoZXNlIHBhcmFtZXRlcnMuIgorQkJfRElTS01PTl9XQVJOSU5URVJWQUxbZG9jXSA9ICJEZWZpbmVzIHRoZSBkaXNrIHNwYWNlIGFuZCBmcmVlIGlub2RlIHdhcm5pbmcgaW50ZXJ2YWxzLiBUbyBzZXQgdGhlc2UgaW50ZXJ2YWxzLCBkZWZpbmUgdGhlIHZhcmlhYmxlIGluIHRoZSBjb25mL2xvY2FsLmNvbmYgZmlsZSBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKK0JCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMU1tkb2NdID0gIkNhdXNlcyB0YXJiYWxscyBvZiB0aGUgR2l0IHJlcG9zaXRvcmllcyB0byBiZSBwbGFjZWQgaW4gdGhlIERMX0RJUiBkaXJlY3RvcnkuIgorQkJfTlVNQkVSX1RIUkVBRFNbZG9jXSA9ICJUaGUgbWF4aW11bSBudW1iZXIgb2YgdGFza3MgQml0QmFrZSBzaG91bGQgcnVuIGluIHBhcmFsbGVsIGF0IGFueSBvbmUgdGltZS4gQSBnb29kIHJ1bGUgb2YgdGh1bWIgaXMgdG8gc2V0IHRoaXMgdmFyaWFibGUgdG8gdHdpY2UgdGhlIG51bWJlciBvZiBjb3Jlcy4iCitCQkNMQVNTRVhURU5EW2RvY10gPSAiQWxsb3dzIHlvdSB0byBleHRlbmQgYSByZWNpcGUgc28gdGhhdCBpdCBidWlsZHMgdmFyaWFudHMgb2YgdGhlIHNvZnR3YXJlLiBDb21tb24gdmFyaWFudHMgZm9yIHJlY2lwZXMgYXJlICduYXRpdmUnLCAnY3Jvc3MnLCAnbmF0aXZlc2RrJyBhbmQgbXVsdGlsaWJzLiIKK0JCRklMRV9DT0xMRUNUSU9OU1tkb2NdID0gIkxpc3RzIHRoZSBuYW1lcyBvZiBjb25maWd1cmVkIGxheWVycy4gVGhlc2UgbmFtZXMgYXJlIHVzZWQgdG8gZmluZCB0aGUgb3RoZXIgQkJGSUxFXyogdmFyaWFibGVzLiIKK0JCRklMRV9QQVRURVJOW2RvY10gPSAiVmFyaWFibGUgdGhhdCBleHBhbmRzIHRvIG1hdGNoIGZpbGVzIGZyb20gQkJGSUxFUyBpbiBhIHBhcnRpY3VsYXIgbGF5ZXIuIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiB0aGUgbGF5ZXIuY29uZiBmaWxlIGFuZCBtdXN0IGJlIHN1ZmZpeGVkIHdpdGggdGhlIG5hbWUgb2YgYSBsYXllci4iCitCQkZJTEVfUFJJT1JJVFlbZG9jXSA9ICJBc3NpZ25zIHRoZSBwcmlvcml0eSBmb3IgcmVjaXBlIGZpbGVzIGluIGVhY2ggbGF5ZXIuIFNldHRpbmcgdGhpcyB2YXJpYWJsZSBhbGxvd3MgeW91IHRvIHByaW9yaXRpemUgYSBsYXllciBhZ2FpbnN0IG90aGVyIGxheWVycyB0aGF0IGNvbnRhaW4gdGhlIHNhbWUgcmVjaXBlLiIKK0JCRklMRVNbZG9jXSA9ICJMaXN0IG9mIHJlY2lwZSBmaWxlcyB1c2VkIGJ5IEJpdEJha2UgdG8gYnVpbGQgc29mdHdhcmUuIgorQkJJTkNMVURFTE9HU1tkb2NdID0gIlZhcmlhYmxlIHRoYXQgY29udHJvbHMgaG93IEJpdEJha2UgZGlzcGxheXMgbG9ncyBvbiBidWlsZCBmYWlsdXJlLiIKK0JCSU5DTFVERUxPR1NfTElORVNbZG9jXSA9ICJBbW91bnQgb2YgbG9nIGxpbmVzIHByaW50ZWQgb24gZmFpbHVyZS4iCitCQkxBWUVSU1tkb2NdID0gIkxpc3RzIHRoZSBsYXllcnMgdG8gZW5hYmxlIGR1cmluZyB0aGUgYnVpbGQuIFRoaXMgdmFyaWFibGUgaXMgZGVmaW5lZCBpbiB0aGUgYmJsYXllcnMuY29uZiBjb25maWd1cmF0aW9uIGZpbGUuIgorQkJMQVlFUlNfTk9OX1JFTU9WQUJMRVtkb2NdID0gIkxpc3RzIGNvcmUgbGF5ZXJzIHRoYXQgY2Fubm90IGJlIHJlbW92ZWQgZnJvbSB0aGUgYmJsYXllcnMuY29uZiBmaWxlLiIKK0JCTUFTS1tkb2NdID0gIlByZXZlbnRzIEJpdEJha2UgZnJvbSBwcm9jZXNzaW5nIHNwZWNpZmljIHJlY2lwZXMgb3IgcmVjaXBlIGFwcGVuZCBmaWxlcy4gVXNlIHRoZSBCQk1BU0sgdmFyaWFibGUgZnJvbSB3aXRoaW4gY29uZi9sb2NhbC5jb25mLiIKK0JCUEFUSFtkb2NdID0gIlVzZWQgYnkgQml0QmFrZSB0byBsb2NhdGUgLmJiY2xhc3MgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFRoaXMgdmFyaWFibGUgaXMgYW5hbG9nb3VzIHRvIHRoZSBQQVRIIHZhcmlhYmxlLiIKK0JCU0VSVkVSW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBzZXJ2ZXIgdGhhdCBydW5zIG1lbW9yeS1yZXNpZGVudCBCaXRCYWtlLiIKK0JJTkNPTkZJR19HTE9CW2RvY10gPSAiV2hlbiBpbmhlcml0aW5nIGJpbmNvbmZpZy5iYmNsYXNzIGZyb20gYSByZWNpcGUsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGEgd2lsZGNhcmQgZm9yIGNvbmZpZ3VyYXRpb24gc2NyaXB0cyB0aGF0IG5lZWQgZWRpdGluZy4iCitCUFtkb2NdID0gIlRoZSBiYXNlIHJlY2lwZSBuYW1lIGFuZCB2ZXJzaW9uIGJ1dCB3aXRob3V0IGFueSBzcGVjaWFsIHJlY2lwZSBuYW1lIHN1ZmZpeCAoaS5lLiAtbmF0aXZlLCBsaWI2NC0sIGFuZCBzbyBmb3J0aCkuIEJQIGlzIGNvbXByaXNlZCBvZiAke0JQTn0tJHtQVn0iCitCUE5bZG9jXSA9ICJUaGUgYmFyZSBuYW1lIG9mIHRoZSByZWNpcGUuIFRoaXMgdmFyaWFibGUgaXMgYSB2ZXJzaW9uIG9mIHRoZSBQTiB2YXJpYWJsZSBidXQgcmVtb3ZlcyBjb21tb24gc3VmZml4ZXMgYW5kIHByZWZpeGVzLiIKK0JVR1RSQUNLRVJbZG9jXSA9ICJTcGVjaWZpZXMgYSBVUkwgZm9yIGFuIHVwc3RyZWFtIGJ1ZyB0cmFja2luZyB3ZWJzaXRlIGZvciBhIHJlY2lwZS4iCitCVUlMRF9BUkNIW2RvY10gPSAiVGhlIG5hbWUgb2YgdGhlIGJ1aWxkaW5nIGFyY2hpdGVjdHVyZSAoZS5nLiBpNjg2KS4iCitCVUlMRF9PU1tkb2NdID0gIlRoZSBvcGVyYXRpbmcgc3lzdGVtIChpbiBsb3dlciBjYXNlKSBvZiB0aGUgYnVpbGRpbmcgYXJjaGl0ZWN0dXJlIChlLmcuIGxpbnV4KS4iCitCVUlMRERJUltkb2NdID0gIlBvaW50cyB0byB0aGUgbG9jYXRpb24gb2YgdGhlIEJ1aWxkIERpcmVjdG9yeS4iCitCVUlMRFNUQVRTX0JBU0VbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBob2xkcyBidWlsZCBzdGF0aXN0aWNzIHdoZW4geW91IHVzZSBhbmQgZW5hYmxlIHRoZSBidWlsZHN0YXRzIGNsYXNzLiIKK0JVU1lCT1hfU1BMSVRfU1VJRFtkb2NdID0gIkZvciB0aGUgQnVzeUJveCByZWNpcGUsIHNwZWNpZmllcyB3aGV0aGVyIHRvIHNwbGl0IHRoZSBvdXRwdXQgZXhlY3V0YWJsZSBmaWxlIGludG8gdHdvIHBhcnRzOiBvbmUgZm9yIGZlYXR1cmVzIHRoYXQgcmVxdWlyZSBzZXR1aWQgcm9vdCwgYW5kIG9uZSBmb3IgdGhlIHJlbWFpbmluZyBmZWF0dXJlcy4iCisKKyNDCisKK0NBQ0hFW2RvY10gID0gIlRoZSBkaXJlY3RvcnkgaG9sZGluZyB0aGUgY2FjaGUgb2YgdGhlIG1ldGFkYXRhLiIKK0NGTEFHU1tkb2NdID0gIkZsYWdzIHBhc3NlZCB0byB0aGUgQyBjb21waWxlciBmb3IgdGhlIHRhcmdldCBzeXN0ZW0uIFRoaXMgdmFyaWFibGUgZXZhbHVhdGVzIHRvIHRoZSBzYW1lIGFzIFRBUkdFVF9DRkxBR1MuIgorQ0xBU1NPVkVSUklERVtkb2NdID0gIkFuIGludGVybmFsIHZhcmlhYmxlIHNwZWNpZnlpbmcgdGhlIHNwZWNpYWwgY2xhc3Mgb3ZlcnJpZGUgdGhhdCBzaG91bGQgY3VycmVudGx5IGFwcGx5IChlLmcuICJjbGFzcy10YXJnZXQiLCAiY2xhc3MtbmF0aXZlIiwgYW5kIHNvIGZvcnRoKS4iCitDTEVBTkJST0tFTltkb2NdID0gIlNwZWNpZmllcyBpZiAnbWFrZSBjbGVhbicgZG9lcyBub3Qgd29yayBmb3IgYSByZWNpcGUgKGFuZCB0aGVyZWZvcmUgdGhlIGJ1aWxkIHN5c3RlbSBzaG91bGQgbm90IHRyeSB0byB1c2UgaXQgZHVyaW5nIGRvX2NvbmZpZ3VyZSkiCitDT01CSU5FRF9GRUFUVVJFU1tkb2NdID0gIkEgc2V0IG9mIGZlYXR1cmVzIGNvbW1vbiBiZXR3ZWVuIE1BQ0hJTkVfRkVBVFVSRVMgYW5kIERJU1RST19GRUFUVVJFUy4iCitDT01NT05fTElDRU5TRV9ESVJbZG9jXSA9ICJQb2ludHMgdG8gbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMgaW4gdGhlIFNvdXJjZSBEaXJlY3RvcnksIHdoaWNoIGlzIHdoZXJlIGdlbmVyaWMgbGljZW5zZSBmaWxlcyByZXNpZGUuIgorQ09NUEFUSUJMRV9IT1NUW2RvY10gPSAiQSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCByZXNvbHZlcyB0byBvbmUgb3IgbW9yZSBob3N0cyAod2hlbiB0aGUgcmVjaXBlIGlzIG5hdGl2ZSkgb3Igb25lIG9yIG1vcmUgdGFyZ2V0cyAod2hlbiB0aGUgcmVjaXBlIGlzIG5vbi1uYXRpdmUpIHdpdGggd2hpY2ggYSByZWNpcGUgaXMgY29tcGF0aWJsZS4iCitDT01QQVRJQkxFX01BQ0hJTkVbZG9jXSA9ICJBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHJlc29sdmVzIHRvIG9uZSBvciBtb3JlIHRhcmdldCBtYWNoaW5lcyB3aXRoIHdoaWNoIGEgcmVjaXBlIGlzIGNvbXBhdGlibGUuIgorQ09NUExFTUVOVEFSWV9HTE9CW2RvY10gPSAiRGVmaW5lcyB3aWxkY2FyZHMgdG8gbWF0Y2ggd2hlbiBpbnN0YWxsaW5nIGEgbGlzdCBvZiBjb21wbGVtZW50YXJ5IHBhY2thZ2VzIGZvciBhbGwgdGhlIHBhY2thZ2VzIGluc3RhbGxlZCBpbiBhbiBpbWFnZS4iCitDT05GRklMRVNbZG9jXSA9ICJJZGVudGlmaWVzIGVkaXRhYmxlIG9yIGNvbmZpZ3VyYWJsZSBmaWxlcyB0aGF0IGFyZSBwYXJ0IG9mIGEgcGFja2FnZS4iCitDT05GSUdfU0lURVtkb2NdID0gIkEgbGlzdCBvZiBmaWxlcyB0aGF0IGNvbnRhaW5zIGF1dG9jb25mIHRlc3QgcmVzdWx0cyByZWxldmFudCB0byB0aGUgY3VycmVudCBidWlsZC4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGJ5IHRoZSBBdXRvdG9vbHMgdXRpbGl0aWVzIHdoZW4gcnVubmluZyBjb25maWd1cmUuIgorQ09ORkxJQ1RfRElTVFJPX0ZFQVRVUkVTW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIGNsYXNzLCB0aGlzIHZhcmlhYmxlIGlkZW50aWZpZXMgZGlzdHJpYnV0aW9uIGZlYXR1cmVzIHRoYXQgd291bGQgYmUgaW4gY29uZmxpY3Qgc2hvdWxkIHRoZSByZWNpcGUgYmUgYnVpbHQuIgorQ09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBsaXN0IG9mIHBhY2thZ2VzIHRvIGJlIGFkZGVkIHRvIHRoZSBpbWFnZS4gWW91IHNob3VsZCBvbmx5IHNldCB0aGlzIHZhcmlhYmxlIGluIHRoZSBjb25mL2xvY2FsLmNvbmYgZmlsZSBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKK0NPUkVCQVNFW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoZSBPcGVuRW1iZWRkZWQgQ29yZSBNZXRhZGF0YSBsYXllciAoaS5lLiBtZXRhKS4iCitDT05GX1ZFUlNJT05bZG9jXSA9ICJUcmFja3MgdGhlIHZlcnNpb24gb2YgbG9jYWwuY29uZi4gIEluY3JlYXNlZCBlYWNoIHRpbWUgYnVpbGQvY29uZi8gY2hhbmdlcyBpbmNvbXBhdGlibHkuIgorQ1ZTRElSW2RvY10gPSAiVGhlIGRpcmVjdG9yeSB3aGVyZSBjdnMgY2hlY2tvdXRzIHdpbGwgYmUgc3RvcmVkIGluLiIKKworI0QKKworRFtkb2NdID0gIlRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkuIgorREFURVtkb2NdID0gIlRoZSBkYXRlIHRoZSBidWlsZCB3YXMgc3RhcnRlZCB1c2luZyBZTUQgZm9ybWF0LiIKK0RBVEVUSU1FW2RvY10gPSAiVGhlIGRhdGUgYW5kIHRpbWUgdGhlIGJ1aWxkIHdhcyBzdGFydGVkLiIKK0RFQlVHX0JVSUxEW2RvY10gPSAiU3BlY2lmaWVzIHRvIGJ1aWxkIHBhY2thZ2VzIHdpdGggZGVidWdnaW5nIGluZm9ybWF0aW9uLiBUaGlzIGluZmx1ZW5jZXMgdGhlIHZhbHVlIG9mIHRoZSBTRUxFQ1RFRF9PUFRJTUlaQVRJT04gdmFyaWFibGUuIgorREVCVUdfT1BUSU1JWkFUSU9OW2RvY10gPSAiVGhlIG9wdGlvbnMgdG8gcGFzcyBpbiBUQVJHRVRfQ0ZMQUdTIGFuZCBDRkxBR1Mgd2hlbiBjb21waWxpbmcgYSBzeXN0ZW0gZm9yIGRlYnVnZ2luZy4gVGhpcyB2YXJpYWJsZSBkZWZhdWx0cyB0byAnLU8gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLWcnLiIKK0RFRkFVTFRfUFJFRkVSRU5DRVtkb2NdID0gIlNwZWNpZmllcyBhIHdlYWsgYmlhcyBmb3IgcmVjaXBlIHNlbGVjdGlvbiBwcmlvcml0eS4iCitERVBFTkRTW2RvY10gPSAiTGlzdHMgYSByZWNpcGUncyBidWlsZC10aW1lIGRlcGVuZGVuY2llcyAoaS5lLiBvdGhlciByZWNpcGUgZmlsZXMpLiIKK0RFUExPWV9ESVJbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGdlbmVyYWwgYXJlYSB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdG8gcGxhY2UgaW1hZ2VzLCBwYWNrYWdlcywgU0RLcyBhbmQgb3RoZXIgb3V0cHV0IGZpbGVzIHRoYXQgYXJlIHJlYWR5IHRvIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgYnVpbGQgc3lzdGVtLiIKK0RFUExPWV9ESVJfSU1BR0VbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGFyZWEgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRvIHBsYWNlIGltYWdlcyBhbmQgb3RoZXIgYXNzb2NpYXRlZCBvdXRwdXQgZmlsZXMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgZGVwbG95ZWQgb250byB0aGUgdGFyZ2V0IG1hY2hpbmUuIgorREVQTE9ZRElSW2RvY10gPSAiRm9yIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBkZXBsb3kgY2xhc3MsIHRoZSBERVBMT1lESVIgcG9pbnRzIHRvIGEgdGVtcG9yYXJ5IHdvcmsgYXJlYSBmb3IgZGVwbG95ZWQgZmlsZXMuIgorREVTQ1JJUFRJT05bZG9jXSA9ICJUaGUgcGFja2FnZSBkZXNjcmlwdGlvbiB1c2VkIGJ5IHBhY2thZ2UgbWFuYWdlcnMuIElmIG5vdCBzZXQsIERFU0NSSVBUSU9OIHRha2VzIHRoZSB2YWx1ZSBvZiB0aGUgU1VNTUFSWSB2YXJpYWJsZS4iCitESVNUUk9bZG9jXSA9ICJUaGUgc2hvcnQgbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiBJZiB0aGUgdmFyaWFibGUgaXMgYmxhbmssIG1ldGEvY29uZi9kaXN0cm8vZGVmYXVsdHNldHVwLmNvbmYgd2lsbCBiZSB1c2VkLiIKK0RJU1RST19FWFRSQV9SREVQRU5EU1tkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZGlzdHJvLXNwZWNpZmljIHBhY2thZ2VzIHRvIGFkZCB0byBhbGwgaW1hZ2VzLiBUaGUgdmFyaWFibGUgb25seSBhcHBsaWVzIHRvIHRoZSBpbWFnZXMgdGhhdCBpbmNsdWRlIHBhY2thZ2Vncm91cC1iYXNlLiIKK0RJU1RST19FWFRSQV9SUkVDT01NRU5EU1tkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZGlzdHJvLXNwZWNpZmljIHBhY2thZ2VzIHRvIGFkZCB0byBhbGwgaW1hZ2VzIGlmIHRoZSBwYWNrYWdlcyBleGlzdC4gVGhlIGxpc3Qgb2YgcGFja2FnZXMgYXJlIGF1dG9tYXRpY2FsbHkgaW5zdGFsbGVkIGJ1dCB5b3UgY2FuIHJlbW92ZSB0aGVtLiIKK0RJU1RST19GRUFUVVJFU1tkb2NdID0gIlRoZSBmZWF0dXJlcyBlbmFibGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uLiIKK0RJU1RST19GRUFUVVJFU19CQUNLRklMTFtkb2NdID0gIkZlYXR1cmVzIHRvIGJlIGFkZGVkIHRvIERJU1RST19GRUFUVVJFUyBpZiBub3QgYWxzbyBwcmVzZW50IGluIERJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVELiBUaGlzIHZhcmlhYmxlIGlzIHNldCBpbiB0aGUgbWV0YS9jb25mL2JpdGJha2UuY29uZiBmaWxlIGFuZCBpdCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlci1jb25maWd1cmFibGUuIgorRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRURbZG9jXSA9ICJGZWF0dXJlcyBmcm9tIERJU1RST19GRUFUVVJFU19CQUNLRklMTCB0aGF0IHNob3VsZCBub3QgYmUgYmFja2ZpbGxlZCAoaS5lLiBhZGRlZCB0byBESVNUUk9fRkVBVFVSRVMpIGR1cmluZyB0aGUgYnVpbGQuIgorRElTVFJPX05BTUVbZG9jXSA9ICJUaGUgbG9uZyBuYW1lIG9mIHRoZSBkaXN0cmlidXRpb24uIgorRElTVFJPX1BOX0FMSUFTW2RvY10gPSAiQWxpYXMgbmFtZXMgdXNlZCBmb3IgdGhlIHJlY2lwZSBpbiB2YXJpb3VzIExpbnV4IGRpc3RyaWJ1dGlvbnMuIgorRElTVFJPX1ZFUlNJT05bZG9jXSA9ICJUaGUgdmVyc2lvbiBvZiB0aGUgZGlzdHJpYnV0aW9uLiIKK0RJU1RST09WRVJSSURFU1tkb2NdID0gIkxpc3RzIG92ZXJyaWRlcyBzcGVjaWZpYyB0byB0aGUgY3VycmVudCBkaXN0cmlidXRpb24uIEJ5IGRlZmF1bHQsIHRoZSB2YXJpYWJsZSBsaXN0IGluY2x1ZGVzIHRoZSB2YWx1ZSBvZiB0aGUgRElTVFJPIHZhcmlhYmxlLiIKK0RMX0RJUltkb2NdID0gIlRoZSBjZW50cmFsIGRvd25sb2FkIGRpcmVjdG9yeSB1c2VkIGJ5IHRoZSBidWlsZCBwcm9jZXNzIHRvIHN0b3JlIGRvd25sb2Fkcy4gQnkgZGVmYXVsdCwgdGhlIGRpcmVjdG9yeSBpcyAnZG93bmxvYWRzJyBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKKworI0UKKworRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTltkb2NdID0gIkNvbnRyb2xzIHdoaWNoIGxvY2FsZXMgZm9yIGdsaWJjIGFyZSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBidWlsZC4gVGhlIHZhcmlhYmxlIGlzIHVzZWZ1bCBpZiB0aGUgdGFyZ2V0IGRldmljZSBoYXMgNjRNYnl0ZXMgb2YgUkFNIG9yIGxlc3MuIgorRVJST1JfUUFbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHF1YWxpdHkgYXNzdXJhbmNlIGNoZWNrcyB3aG9zZSBmYWlsdXJlcyBhcmUgcmVwb3J0ZWQgYXMgZXJyb3JzIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKK0VYQ0xVREVfRlJPTV9XT1JMRFtkb2NdID0gIkRpcmVjdHMgQml0QmFrZSB0byBleGNsdWRlIGEgcmVjaXBlIGZyb20gd29ybGQgYnVpbGRzIChpLmUuIGJpdGJha2Ugd29ybGQpLiIKK0VYVEVORFBFW2RvY10gPSAiVXNlZCB3aXRoIGZpbGUgYW5kIHBhdGhuYW1lcyB0byBjcmVhdGUgYSBwcmVmaXggZm9yIGEgcmVjaXBlJ3MgdmVyc2lvbiBiYXNlZCBvbiB0aGUgcmVjaXBlJ3MgUEUgdmFsdWUuIElmIFBFIGlzIHNldCBhbmQgZ3JlYXRlciB0aGFuIHplcm8gZm9yIGEgcmVjaXBlLCBFWFRFTkRQRSBiZWNvbWVzIHRoYXQgdmFsdWUuIgorRVhURU5EUEtHVltkb2NdID0gIlRoZSBmdWxsIHBhY2thZ2UgdmVyc2lvbiBzcGVjaWZpY2F0aW9uIGFzIGl0IGFwcGVhcnMgb24gdGhlIGZpbmFsIHBhY2thZ2VzIHByb2R1Y2VkIGJ5IGEgcmVjaXBlLiIKK0VYVEVSTkFMU1JDW2RvY10gPSAiSWYgZXh0ZXJuYWxzcmMuYmJjbGFzcyBpcyBpbmhlcml0ZWQsIHRoaXMgdmFyaWFibGUgcG9pbnRzIHRvIHRoZSBzb3VyY2UgdHJlZSwgd2hpY2ggaXMgb3V0c2lkZSBvZiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCitFWFRFUk5BTFNSQ19CVUlMRFtkb2NdID0gIklmIGV4dGVybmFsc3JjLmJiY2xhc3MgaXMgaW5oZXJpdGVkLCB0aGlzIHZhcmlhYmxlIHBvaW50cyB0byB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSByZWNpcGUncyBzb3VyY2UgY29kZSBpcyBidWlsdCwgd2hpY2ggaXMgb3V0c2lkZSBvZiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCitFWFRSQV9JTUFHRV9GRUFUVVJFU1tkb2NdID0gIlRoZSBsaXN0IG9mIGFkZGl0aW9uYWwgZmVhdHVyZXMgdG8gaW5jbHVkZSBpbiBhbiBpbWFnZS4gQ29uZmlndXJlIHRoaXMgdmFyaWFibGUgaW4gdGhlIGNvbmYvbG9jYWwuY29uZiBmaWxlIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorRVhUUkFfSU1BR0VERVBFTkRTW2RvY10gPSAiQSBsaXN0IG9mIHJlY2lwZXMgdG8gYnVpbGQgdGhhdCBkbyBub3QgcHJvdmlkZSBwYWNrYWdlcyBmb3IgaW5zdGFsbGluZyBpbnRvIHRoZSByb290IGZpbGVzeXN0ZW0uIFVzZSB0aGlzIHZhcmlhYmxlIHRvIGxpc3QgcmVjaXBlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBidWlsZCB0aGUgZmluYWwgaW1hZ2UsIGJ1dCBub3QgbmVlZGVkIGluIHRoZSByb290IGZpbGVzeXN0ZW0uIgorRVhUUkFfT0VDTUFLRVtkb2NdID0gIkFkZGl0aW9uYWwgY21ha2Ugb3B0aW9ucy4iCitFWFRSQV9PRUNPTkZbZG9jXSA9ICJBZGRpdGlvbmFsIGNvbmZpZ3VyZSBzY3JpcHQgb3B0aW9ucy4iCitFWFRSQV9PRU1BS0VbZG9jXSA9ICJBZGRpdGlvbmFsIEdOVSBtYWtlIG9wdGlvbnMuIgorRVhUUkFfT0VTQ09OU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIHNjb25zIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB5b3Ugd2FudCB0byBwYXNzIHRvIHRoZSBzY29ucyBjb21tYW5kIGxpbmUuIgorRVhUUkFfUU1BS0VWQVJTX1BPU1RbZG9jXSA9ICJDb25maWd1cmF0aW9uIHZhcmlhYmxlcyBvciBvcHRpb25zIHlvdSB3YW50IHRvIHBhc3MgdG8gcW1ha2Ugd2hlbiB0aGUgYXJndW1lbnRzIG5lZWQgdG8gYmUgYWZ0ZXIgdGhlIC5wcm8gZmlsZSBsaXN0IG9uIHRoZSBjb21tYW5kIGxpbmUuIgorRVhUUkFfUU1BS0VWQVJTX1BSRVtkb2NdID0gIkNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIG9yIG9wdGlvbnMgeW91IHdhbnQgdG8gcGFzcyB0byBxbWFrZSB3aGVuIHRoZSBhcmd1bWVudHMgbmVlZCB0byBiZSBiZWZvcmUgdGhlIC5wcm8gZmlsZSBsaXN0IG9uIHRoZSBjb21tYW5kIGxpbmUuIgorRVhUUkFfVVNFUlNfUEFSQU1TW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgZXh0cmF1c2VycyBjbGFzcywgdGhpcyB2YXJpYWJsZSBwcm92aWRlcyBpbWFnZSBsZXZlbCB1c2VyIGFuZCBncm91cCBvcGVyYXRpb25zLiIKKworI0YKKworRkVFRF9ERVBMT1lESVJfQkFTRV9VUklbZG9jXSA9ICJBbGxvdyB0byBzZXJ2ZSBpcGsgZGVwbG95IGRpcmVjdG9yeSBhcyBhbiBhZCBob2MgZmVlZCAoYm9nb2ZlZWQpLiBTZXQgdG8gYmFzZSBVUkwgb2YgdGhlIGRpcmVjdG9yeSBhcyBleHBvcnRlZCBieSBIVFRQLiBTZXQgb2YgYWQgaG9jIGZlZWQgY29uZmlncyB3aWxsIGJlIGdlbmVyYXRlZCBpbiB0aGUgaW1hZ2UuIgorRklMRVNbZG9jXSA9ICJUaGUgbGlzdCBvZiBkaXJlY3RvcmllcyBvciBmaWxlcyB0aGF0IGFyZSBwbGFjZWQgaW4gcGFja2FnZXMuIgorRklMRVNFWFRSQVBBVEhTW2RvY10gPSAiRXh0ZW5kcyB0aGUgc2VhcmNoIHBhdGggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB3aGVuIGxvb2tpbmcgZm9yIGZpbGVzIGFuZCBwYXRjaGVzIGFzIGl0IHByb2Nlc3NlcyByZWNpcGVzIGFuZCBhcHBlbmQgZmlsZXMuIgorRklMRVNPVkVSUklERVNbZG9jXSA9ICJBIHN1YnNldCBvZiBPVkVSUklERVMgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBmb3IgY3JlYXRpbmcgRklMRVNQQVRILiIKK0ZJTEVTUEFUSFtkb2NdID0gIlRoZSBkZWZhdWx0IHNldCBvZiBkaXJlY3RvcmllcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHdoZW4gc2VhcmNoaW5nIGZvciBwYXRjaGVzIGFuZCBmaWxlcy4gSXQgaXMgZGVmaW5lZCBpbiB0aGUgYmFzZS5iYmNsYXNzIGNsYXNzIGZvdW5kIGluIG1ldGEvY2xhc3NlcyBpbiB0aGUgU291cmNlIERpcmVjdG9yeS4gRG8gbm90IGhhbmQtZWRpdCB0aGUgRklMRVNQQVRIIHZhcmlhYmxlLiIKK0ZJTEVTWVNURU1fUEVSTVNfVEFCTEVTW2RvY10gPSAiQWxsb3dzIHlvdSB0byBkZWZpbmUgeW91ciBvd24gZmlsZSBwZXJtaXNzaW9ucyBzZXR0aW5ncyB0YWJsZSBhcyBwYXJ0IG9mIHlvdXIgY29uZmlndXJhdGlvbiBmb3IgdGhlIHBhY2thZ2luZyBwcm9jZXNzLiIKK0ZPTlRfRVhUUkFfUkRFUEVORFNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBmb250Y2FjaGUgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIGZvciBmb250IHBhY2thZ2VzLiBUaGlzIHZhcmlhYmxlIGRlZmF1bHRzIHRvICdmb250Y29uZmlnLXV0aWxzJy4iCitGT05UX1BBQ0tBR0VTW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgZm9udGNhY2hlIGNsYXNzLCB0aGlzIHZhcmlhYmxlIGlkZW50aWZpZXMgcGFja2FnZXMgY29udGFpbmluZyBmb250IGZpbGVzIHRoYXQgbmVlZCB0byBiZSBjYWNoZWQgYnkgRm9udGNvbmZpZy4iCitGVUxMX09QVElNSVpBVElPTltkb2NdPSAiVGhlIG9wdGlvbnMgdG8gcGFzcyBpbiBUQVJHRVRfQ0ZMQUdTIGFuZCBDRkxBR1Mgd2hlbiBjb21waWxpbmcgYW4gb3B0aW1pemVkIHN5c3RlbS4gVGhpcyB2YXJpYWJsZSBkZWZhdWx0cyB0byAnLWZleHBlbnNpdmUtb3B0aW1pemF0aW9ucyAtZm9taXQtZnJhbWUtcG9pbnRlciAtZnJlbmFtZS1yZWdpc3RlcnMgLU8yJy4iCisKKyNHCisKK0dJVERJUltkb2NdID0gIlRoZSBkaXJlY3Rvcnkgd2hlcmUgR2l0IGNsb25lcyB3aWxsIGJlIHN0b3JlZC4iCitHUk9VUEFERF9QQVJBTVtkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIHVzZXJhZGQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGZvciBhIHBhY2thZ2Ugd2hhdCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBwYXNzZWQgdG8gdGhlIGdyb3VwYWRkIGNvbW1hbmQgaWYgeW91IHdpc2ggdG8gYWRkIGEgZ3JvdXAgdG8gdGhlIHN5c3RlbSB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZC4iCitHUk9VUE1FTVNfUEFSQU1bZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSB1c2VyYWRkIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBmb3IgYSBwYWNrYWdlIHdoYXQgcGFyYW1ldGVycyBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSBncm91cG1lbXMgY29tbWFuZCBpZiB5b3Ugd2lzaCB0byBtb2RpZnkgdGhlIG1lbWJlcnMgb2YgYSBncm91cCB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZC4iCitHUlVCX0dGWFNFUklBTFtkb2NdID0gIkNvbmZpZ3VyZXMgdGhlIEdOVSBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIgKEdSVUIpIHRvIGhhdmUgZ3JhcGhpY3MgYW5kIHNlcmlhbCBpbiB0aGUgYm9vdCBtZW51LiIKK0dSVUJfT1BUU1tkb2NdID0gIkFkZGl0aW9uYWwgb3B0aW9ucyB0byBhZGQgdG8gdGhlIEdOVSBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIgKEdSVUIpIGNvbmZpZ3VyYXRpb24uIgorR1JVQl9USU1FT1VUW2RvY10gPSAiU3BlY2lmaWVzIHRoZSB0aW1lb3V0IGJlZm9yZSBleGVjdXRpbmcgdGhlIGRlZmF1bHQgTEFCRUwgaW4gdGhlIEdOVSBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIgKEdSVUIpLiIKK0dUS0lNTU9EVUxFU19QQUNLQUdFU1tkb2NdID0gIkZvciByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUgZ3RrLWltbW9kdWxlcy1jYWNoZSBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIHBhY2thZ2VzIHRoYXQgY29udGFpbiB0aGUgR1RLKyBpbnB1dCBtZXRob2QgbW9kdWxlcyBiZWluZyBpbnN0YWxsZWQgd2hlbiB0aGUgbW9kdWxlcyBhcmUgaW4gcGFja2FnZXMgb3RoZXIgdGhhbiB0aGUgbWFpbiBwYWNrYWdlLiIKKworI0gKKworSE9NRVBBR0VbZG9jXSA9ICJXZWJzaXRlIHdoZXJlIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNvZnR3YXJlIHRoZSByZWNpcGUgaXMgYnVpbGRpbmcgY2FuIGJlIGZvdW5kLiIKK0hPU1RfQVJDSFtkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLiBOb3JtYWxseSBzYW1lIGFzIHRoZSBUQVJHRVRfQVJDSC4iCitIT1NUX0NDX0FSQ0hbZG9jXSA9ICJUaGUgbmFtZSBvZiB0aGUgaG9zdCBhcmNoaXRlY3R1cmUuIE5vcm1hbGx5IHNhbWUgYXMgdGhlIFRBUkdFVF9DQ19BUkNILiIKK0hPU1RfT1NbZG9jXSA9ICJUaGUgbmFtZSBvZiB0aGUgdGFyZ2V0IG9wZXJhdGluZyBzeXN0ZW0uIE5vcm1hbGx5IHRoZSBzYW1lIGFzIHRoZSBUQVJHRVRfT1MuIgorSE9TVF9QUkVGSVhbZG9jXSA9ICJUaGUgcHJlZml4IGZvciB0aGUgY3Jvc3MgY29tcGlsZSB0b29sY2hhaW4uIE5vcm1hbGx5IHNhbWUgYXMgdGhlIFRBUkdFVF9QUkVGSVguIgorSE9TVF9TWVNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHN5c3RlbSwgaW5jbHVkaW5nIHRoZSBhcmNoaXRlY3R1cmUgYW5kIHRoZSBvcGVyYXRpbmcgc3lzdGVtLCBmb3Igd2l0aCB0aGUgYnVpbGQgaXMgb2NjdXJyaW5nIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHJlY2lwZS4iCitIT1NUX1ZFTkRPUltkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSB2ZW5kb3IuIE5vcm1hbGx5IHNhbWUgYXMgdGhlIFRBUkdFVF9WRU5ET1IuIgorCisjSQorCitJQ0VDQ19FTlZfRVhFQ1tkb2NdID0gIlBvaW50cyB0byB0aGUgaWNlY2MtY3JlYXRlLWVudiBzY3JpcHQgdGhhdCB5b3UgcHJvdmlkZS4iCitJQ0VDQ19QQVRIW2RvY10gPSAiVGhlIGxvY2F0aW9uIG9mIHRoZSBpY2VjYyBiaW5hcnkuIgorSUNFQ0NfVVNFUl9DTEFTU19CTFtkb2NdID0gIklkZW50aWZpZXMgdXNlciBjbGFzc2VzIHRoYXQgeW91IGRvIG5vdCB3YW50IHRoZSBJY2VjcmVhbSBkaXN0cmlidXRlZCBjb21waWxlIHN1cHBvcnQgdG8gY29uc2lkZXIuIgorSUNFQ0NfVVNFUl9QQUNLQUdFX0JMW2RvY10gPSAiSWRlbnRpZmllcyB1c2VyIHJlY2lwZXMgdGhhdCB5b3UgZG8gbm90IHdhbnQgdGhlIEljZWNyZWFtIGRpc3RyaWJ1dGVkIGNvbXBpbGUgc3VwcG9ydCB0byBjb25zaWRlci4iCitJQ0VDQ19VU0VSX1BBQ0tBR0VfV0xbZG9jXSA9ICJJZGVudGlmaWVzIHVzZXIgcmVjaXBlcyB0aGF0IHVzZSBhbiBlbXB0eSBQQVJBTExFTF9NQUtFIHZhcmlhYmxlIHRoYXQgeW91IHdhbnQgdG8gZm9yY2UgcmVtb3RlIGRpc3RyaWJ1dGVkIGNvbXBpbGF0aW9uIG9uIHVzaW5nIHRoZSBJY2VjcmVhbSBkaXN0cmlidXRlZCBjb21waWxlIHN1cHBvcnQuIgorSU1BR0VfQkFTRU5BTUVbZG9jXSA9ICJUaGUgYmFzZSBuYW1lIG9mIGltYWdlIG91dHB1dCBmaWxlcy4iCitJTUFHRV9CT09UX0ZJTEVTW2RvY10gPSAiV2hpdGVzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBmaWxlcyBmcm9tICR7REVQTE9ZX0RJUl9JTUFHRX0gdG8gcGxhY2UgaW4gYm9vdCBwYXJ0aXRpb24uIEVudHJpZXMgd2lsbCBiZSBpbnN0YWxsZWQgdW5kZXIgYSBzYW1lIG5hbWUgYXMgdGhlIHNvdXJjZSBmaWxlLiBUbyBjaGFuZ2UgdGhlIGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgcGFzcyBhIGRlc2lyZWQgbmFtZSBhZnRlciBhIHNlbWljb2xvbiAoZWcuIHUtYm9vdC5pbWc7dWJvb3QpLiIKK0lNQUdFX0NMQVNTRVNbZG9jXSA9ICJBIGxpc3Qgb2YgY2xhc3NlcyB0aGF0IGFsbCBpbWFnZXMgc2hvdWxkIGluaGVyaXQuIgorSU1BR0VfRkVBVFVSRVNbZG9jXSA9ICJUaGUgcHJpbWFyeSBsaXN0IG9mIGZlYXR1cmVzIHRvIGluY2x1ZGUgaW4gYW4gaW1hZ2UuIENvbmZpZ3VyZSB0aGlzIHZhcmlhYmxlIGluIGFuIGltYWdlIHJlY2lwZS4iCitJTUFHRV9GU1RZUEVTW2RvY10gPSAiRm9ybWF0cyBvZiByb290IGZpbGVzeXN0ZW0gaW1hZ2VzIHRoYXQgeW91IHdhbnQgdG8gaGF2ZSBjcmVhdGVkLiIKK0lNQUdFX0lOU1RBTExbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhY2thZ2VzIHRvIGluc3RhbGwgaW50byBhbiBpbWFnZS4gSW1hZ2UgcmVjaXBlcyBzZXQgSU1BR0VfSU5TVEFMTCB0byBzcGVjaWZ5IHRoZSBwYWNrYWdlcyB0byBpbnN0YWxsIGludG8gYW4gaW1hZ2UgdGhyb3VnaCBpbWFnZS5iYmNsYXNzLiIKK0lNQUdFX0xJTkdVQVNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgbG9jYWxlcyB0byBpbnN0YWxsIGludG8gdGhlIGltYWdlIGR1cmluZyB0aGUgcm9vdCBmaWxlc3lzdGVtIGNvbnN0cnVjdGlvbiBwcm9jZXNzLiIKK0lNQUdFX05BTUVbZG9jXSA9ICJUaGUgbmFtZSBvZiB0aGUgb3V0cHV0IGltYWdlIGZpbGVzIG1pbnVzIHRoZSBleHRlbnNpb24uIgorSU1BR0VfT1ZFUkhFQURfRkFDVE9SW2RvY10gPSAiRGVmaW5lcyBhIG11bHRpcGxpZXIgdGhhdCB0aGUgYnVpbGQgc3lzdGVtIGFwcGxpZXMgdG8gdGhlIGluaXRpYWwgaW1hZ2Ugc2l6ZSBmb3IgY2FzZXMgd2hlbiB0aGUgbXVsdGlwbGllciB0aW1lcyB0aGUgcmV0dXJuZWQgZGlzayB1c2FnZSB2YWx1ZSBmb3IgdGhlIGltYWdlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgc3VtIG9mIElNQUdFX1JPT1RGU19TSVpFIGFuZCBJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UuIgorSU1BR0VfUEtHVFlQRVtkb2NdID0gIkRlZmluZXMgdGhlIHBhY2thZ2UgdHlwZSAoREVCLCBSUE0sIElQSywgb3IgVEFSKSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKK0lNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkRbZG9jXSA9ICJBZGRlZCBieSBjbGFzc2VzIHRvIHJ1biBwb3N0IHByb2Nlc3NpbmcgY29tbWFuZHMgb25jZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgaW1hZ2UuIgorSU1BR0VfUk9PVEZTW2RvY10gPSAiVGhlIGxvY2F0aW9uIG9mIHRoZSByb290IGZpbGVzeXN0ZW0gd2hpbGUgaXQgaXMgdW5kZXIgY29uc3RydWN0aW9uIChpLmUuIGR1cmluZyBkb19yb290ZnMpLiIKK0lNQUdFX1JPT1RGU19FWFRSQV9TUEFDRVtkb2NdID0gIkRlZmluZXMgYWRkaXRpb25hbCBmcmVlIGRpc2sgc3BhY2UgY3JlYXRlZCBpbiB0aGUgaW1hZ2UgaW4gS2J5dGVzLiBCeSBkZWZhdWx0LCB0aGlzIHZhcmlhYmxlIGlzIHNldCB0byAnMCcuIgorSU1BR0VfUk9PVEZTX1NJWkVbZG9jXSA9ICJEZWZpbmVzIHRoZSBzaXplIGluIEtieXRlcyBmb3IgdGhlIGdlbmVyYXRlZCBpbWFnZS4iCitJTUFHRV9UWVBFU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgY29tcGxldGUgbGlzdCBvZiBzdXBwb3J0ZWQgaW1hZ2UgdHlwZXMgYnkgZGVmYXVsdC4iCitJTkNfUFJbZG9jXSA9ICJIZWxwcyBkZWZpbmUgdGhlIHJlY2lwZSByZXZpc2lvbiBmb3IgcmVjaXBlcyB0aGF0IHNoYXJlIGEgY29tbW9uIGluY2x1ZGUgZmlsZS4iCitJTkNPTVBBVElCTEVfTElDRU5TRVtkb2NdID0gIlNwZWNpZmllcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGxpY2Vuc2UgbmFtZXMgKGFzIHRoZXkgd291bGQgYXBwZWFyIGluIExJQ0VOU0UpIHRoYXQgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGJ1aWxkLiBXaWxkY2FyZCBpcyBzdXBwb3J0ZWQsIHN1Y2ggYXMgJypHUEx2MyciCitJTkhJQklUX0RFRkFVTFRfREVQU1tkb2NdID0gIlByZXZlbnRzIHRoZSBkZWZhdWx0IGRlcGVuZGVuY2llcywgbmFtZWx5IHRoZSBDIGNvbXBpbGVyIGFuZCBzdGFuZGFyZCBDIGxpYnJhcnkgKGxpYmMpLCBmcm9tIGJlaW5nIGFkZGVkIHRvIERFUEVORFMuIgorSU5ISUJJVF9QQUNLQUdFX1NUUklQW2RvY10gPSAiSWYgc2V0IHRvICIxIiwgY2F1c2VzIHRoZSBidWlsZCB0byBub3Qgc3RyaXAgYmluYXJpZXMgaW4gcmVzdWx0aW5nIHBhY2thZ2VzLiIKK0lOSEVSSVRbZG9jXSA9ICJDYXVzZXMgdGhlIG5hbWVkIGNsYXNzIHRvIGJlIGluaGVyaXRlZCBhdCB0aGlzIHBvaW50IGR1cmluZyBwYXJzaW5nLiBUaGUgdmFyaWFibGUgaXMgb25seSB2YWxpZCBpbiBjb25maWd1cmF0aW9uIGZpbGVzLiIKK0lOSEVSSVRfRElTVFJPW2RvY10gPSAiTGlzdHMgY2xhc3NlcyB0aGF0IHdpbGwgYmUgaW5oZXJpdGVkIGF0IHRoZSBkaXN0cmlidXRpb24gbGV2ZWwuIEl0IGlzIHVubGlrZWx5IHRoYXQgeW91IHdhbnQgdG8gZWRpdCB0aGlzIHZhcmlhYmxlLiIKK0lOSVRSQU1GU19GU1RZUEVTW2RvY10gPSAiRGVmaW5lcyB0aGUgZm9ybWF0IGZvciB0aGUgb3V0cHV0IGltYWdlIG9mIGFuIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyYW1mcyksIHdoaWNoIGlzIHVzZWQgZHVyaW5nIGJvb3QuIgorSU5JVFJEW2RvY10gPSAiSW5kaWNhdGVzIGEgbGlzdCBvZiBmaWxlc3lzdGVtIGltYWdlcyB0byBjb25jYXRlbmF0ZSBhbmQgdXNlIGFzIGFuIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyZCkuIgorSU5JVFNDUklQVF9OQU1FW2RvY10gPSAiVGhlIGZpbGVuYW1lIG9mIHRoZSBpbml0aWFsaXphdGlvbiBzY3JpcHQgYXMgaW5zdGFsbGVkIHRvICR7c3lzY29uZmRpcn0vaW5pdC5kLiIKK0lOSVRTQ1JJUFRfUEFDS0FHRVNbZG9jXSA9ICJBIGxpc3Qgb2YgdGhlIHBhY2thZ2VzIHRoYXQgY29udGFpbiBpbml0c2NyaXB0cy4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIHJlY2lwZXMgd2hlbiB1c2luZyB1cGRhdGUtcmMuZC5iYmNsYXNzLiBUaGUgdmFyaWFibGUgaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIHRoZSBQTiB2YXJpYWJsZS4iCitJTklUU0NSSVBUX1BBUkFNU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgb3B0aW9ucyB0byBwYXNzIHRvIHVwZGF0ZS1yYy5kLiBUaGUgdmFyaWFibGUgaXMgbWFuZGF0b3J5IGFuZCBpcyB1c2VkIGluIHJlY2lwZXMgd2hlbiB1c2luZyB1cGRhdGUtcmMuZC5iYmNsYXNzLiIKK0lOU0FORV9TS0lQW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBRQSBjaGVja3MgdG8gc2tpcCBmb3IgYSBzcGVjaWZpYyBwYWNrYWdlIHdpdGhpbiBhIHJlY2lwZS4iCitJUEtfRkVFRF9VUklTW2RvY10gPSAiTGlzdCBvZiBpcGtnIGZlZWQgcmVjb3JkcyB0byBwdXQgaW50byBnZW5lcmF0ZWQgaW1hZ2UuIgorCisjSworCitLQVJDSFtkb2NdID0gIkRlZmluZXMgdGhlIGtlcm5lbCBhcmNoaXRlY3R1cmUgdXNlZCB3aGVuIGFzc2VtYmxpbmcgdGhlIGNvbmZpZ3VyYXRpb24uIFlvdSBkZWZpbmUgdGhlIEtBUkNIIHZhcmlhYmxlIGluIHRoZSBCU1AgRGVzY3JpcHRpb25zLiIKK0tCUkFOQ0hbZG9jXSA9ICJBIHJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIGJ5IHRoZSBidWlsZCBwcm9jZXNzIHRvIGV4cGxpY2l0bHkgaWRlbnRpZnkgdGhlIGtlcm5lbCBicmFuY2ggdGhhdCBpcyB2YWxpZGF0ZWQsIHBhdGNoZWQgYW5kIGNvbmZpZ3VyZWQgZHVyaW5nIGEgYnVpbGQuIgorS0JSQU5DSF9ERUZBVUxUW2RvY10gPSAiRGVmaW5lcyB0aGUgTGludXgga2VybmVsIHNvdXJjZSByZXBvc2l0b3J5J3MgZGVmYXVsdCBicmFuY2ggdXNlZCB0byBidWlsZCB0aGUgTGludXgga2VybmVsLiBVbmxlc3MgeW91IHNwZWNpZnkgb3RoZXJ3aXNlLCB0aGUgdmFyaWFibGUgaW5pdGlhbGl6ZXMgdG8gJ21hc3RlcicuIgorS0VSTkVMX0NMQVNTRVNbZG9jXSA9ICJBIGxpc3Qgb2YgY2xhc3NlcyBkZWZpbmluZyBrZXJuZWwgaW1hZ2UgdHlwZXMgdGhhdCBrZXJuZWwgY2xhc3Mgc2hvdWxkIGluaGVyaXQuIgorS0VSTkVMX0VYVFJBX0FSR1NbZG9jXSA9ICJTcGVjaWZpZXMgYWRkaXRpb25hbCBtYWtlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcGFzc2VzIG9uIHdoZW4gY29tcGlsaW5nIHRoZSBrZXJuZWwuIgorS0VSTkVMX0ZFQVRVUkVTW2RvY10gPSAiSW5jbHVkZXMgYWRkaXRpb25hbCBtZXRhZGF0YSBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBHaXQgcmVwb3NpdG9yeS4gVGhlIG1ldGFkYXRhIHlvdSBhZGQgdGhyb3VnaCB0aGlzIHZhcmlhYmxlIGluY2x1ZGVzIGNvbmZpZyBmcmFnbWVudHMgYW5kIGZlYXR1cmVzIGRlc2NyaXB0aW9ucy4iCitLRVJORUxfSU1BR0VUWVBFW2RvY10gPSAiVGhlIHR5cGUgb2Yga2VybmVsIHRvIGJ1aWxkIGZvciBhIGRldmljZSwgdXN1YWxseSBzZXQgYnkgdGhlIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgZGVmYXVsdHMgdG8gJ3pJbWFnZScuIgorS0VSTkVMX01PRFVMRV9BVVRPTE9BRFtkb2NdID0gIkxpc3RzIGtlcm5lbCBtb2R1bGVzIHRoYXQgbmVlZCB0byBiZSBhdXRvLWxvYWRlZCBkdXJpbmcgYm9vdCIKK0tFUk5FTF9NT0RVTEVfUFJPQkVDT05GW2RvY10gPSAiTGlzdHMga2VybmVsIG1vZHVsZXMgZm9yIHdoaWNoIHRoZSBidWlsZCBzeXN0ZW0gZXhwZWN0cyB0byBmaW5kIG1vZHVsZV9jb25mXyogdmFsdWVzIHRoYXQgc3BlY2lmeSBjb25maWd1cmF0aW9uIGZvciBlYWNoIG9mIHRoZSBtb2R1bGVzIgorS0VSTkVMX1BBVEhbZG9jXSA9ICJUaGUgbG9jYXRpb24gb2YgdGhlIGtlcm5lbCBzb3VyY2VzLiBUaGlzIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlIFNUQUdJTkdfS0VSTkVMX0RJUiB3aXRoaW4gdGhlIG1vZHVsZSBjbGFzcyAobW9kdWxlLmJiY2xhc3MpLiIKK0tFUk5FTF9TUkNbZG9jXSA9ICJUaGUgbG9jYXRpb24gb2YgdGhlIGtlcm5lbCBzb3VyY2VzLiBUaGlzIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlIFNUQUdJTkdfS0VSTkVMX0RJUiB3aXRoaW4gdGhlIG1vZHVsZSBjbGFzcyAobW9kdWxlLmJiY2xhc3MpLiIKK0tGRUFUVVJFX0RFU0NSSVBUSU9OW2RvY10gPSAiUHJvdmlkZXMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiBhIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQuIFlvdSB1c2UgdGhpcyB2YXJpYWJsZSBpbiB0aGUgLnNjYyBmaWxlIHRoYXQgZGVzY3JpYmVzIGEgY29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlLiIKK0tNQUNISU5FW2RvY10gPSAiVGhlIG1hY2hpbmUgYXMga25vd24gYnkgdGhlIGtlcm5lbC4iCitLVFlQRVtkb2NdID0gIkRlZmluZXMgdGhlIGtlcm5lbCB0eXBlIHRvIGJlIHVzZWQgaW4gYXNzZW1ibGluZyB0aGUgY29uZmlndXJhdGlvbi4iCisKKyNMCisKK0xBWUVSREVQRU5EU1tkb2NdID0gIkxpc3RzIHRoZSBsYXllcnMsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHVwb24gd2hpY2ggdGhpcyByZWNpcGUgZGVwZW5kcy4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIHRoZSBjb25mL2xheWVyLmNvbmYgZmlsZSBhbmQgbXVzdCBiZSBzdWZmaXhlZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBzcGVjaWZpYyBsYXllci4iCitMQVlFUkRJUltkb2NdID0gIldoZW4gdXNlZCBpbnNpZGUgdGhlIGxheWVyLmNvbmYgY29uZmlndXJhdGlvbiBmaWxlLCB0aGlzIHZhcmlhYmxlIHByb3ZpZGVzIHRoZSBwYXRoIG9mIHRoZSBjdXJyZW50IGxheWVyLiIKK0xBWUVSVkVSU0lPTltkb2NdID0gIk9wdGlvbmFsbHkgc3BlY2lmaWVzIHRoZSB2ZXJzaW9uIG9mIGEgbGF5ZXIgYXMgYSBzaW5nbGUgbnVtYmVyLiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgaW4gdGhlIGNvbmYvbGF5ZXIuY29uZiBmaWxlIGFuZCBtdXN0IGJlIHN1ZmZpeGVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIHNwZWNpZmljIGxheWVyLiIKK0xFQURfU09OQU1FW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBsZWFkIChvciBwcmltYXJ5KSBjb21waWxlZCBsaWJyYXJ5IGZpbGUgKC5zbykgdGhhdCB0aGUgZGViaWFuIGNsYXNzIGFwcGxpZXMgaXRzIG5hbWluZyBwb2xpY3kgdG8gZ2l2ZW4gYSByZWNpcGUgdGhhdCBwYWNrYWdlcyBtdWx0aXBsZSBsaWJyYXJpZXMuIgorTElDX0ZJTEVTX0NIS1NVTVtkb2NdID0gIkNoZWNrc3VtcyBvZiB0aGUgbGljZW5zZSB0ZXh0IGluIHRoZSByZWNpcGUgc291cmNlIGNvZGUuIgorTElDRU5TRVtkb2NdID0gIlRoZSBsaXN0IG9mIHNvdXJjZSBsaWNlbnNlcyBmb3IgdGhlIHJlY2lwZS4gTG9naWNhbCBvcGVyYXRvcnMgJyYnIG9yICd8JyBhbmQgcGFyZW50aGVzZXMgY2FuIGJlIHVzZWQuIgorTElDRU5TRV9QQVRIW2RvY10gPSAiUGF0aCB0byBhZGRpdGlvbmFsIGxpY2Vuc2VzIHVzZWQgZHVyaW5nIHRoZSBidWlsZC4iCitMSU5VWF9LRVJORUxfVFlQRVtkb2NdID0gIkRlZmluZXMgdGhlIGtlcm5lbCB0eXBlIHRvIGJlIHVzZWQgaW4gYXNzZW1ibGluZyB0aGUgY29uZmlndXJhdGlvbi4iCitMSU5VWF9WRVJTSU9OW2RvY10gPSAiVGhlIExpbnV4IHZlcnNpb24gZnJvbSBrZXJuZWwub3JnIG9uIHdoaWNoIHRoZSBMaW51eCBrZXJuZWwgaW1hZ2UgYmVpbmcgYnVpbHQgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXMgYmFzZWQuIFlvdSBkZWZpbmUgdGhpcyB2YXJpYWJsZSBpbiB0aGUga2VybmVsIHJlY2lwZS4iCitMSU5VWF9WRVJTSU9OX0VYVEVOU0lPTltkb2NdID0gIkEgc3RyaW5nIGV4dGVuc2lvbiBjb21waWxlZCBpbnRvIHRoZSB2ZXJzaW9uIHN0cmluZyBvZiB0aGUgTGludXgga2VybmVsIGJ1aWx0IHdpdGggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIFlvdSBkZWZpbmUgdGhpcyB2YXJpYWJsZSBpbiB0aGUga2VybmVsIHJlY2lwZS4iCitMT0dfRElSW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgdG8gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd3JpdGVzIG92ZXJhbGwgbG9nIGZpbGVzLiBUaGUgZGVmYXVsdCBkaXJlY3RvcnkgaXMgJHtUTVBESVJ9L2xvZyIKKworI00KKworTUFDSElORVtkb2NdID0gIlNwZWNpZmllcyB0aGUgdGFyZ2V0IGRldmljZSBmb3Igd2hpY2ggdGhlIGltYWdlIGlzIGJ1aWx0LiBZb3UgZGVmaW5lIE1BQ0hJTkUgaW4gdGhlIGNvbmYvbG9jYWwuY29uZiBmaWxlIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFNbZG9jXSA9ICJBIGxpc3Qgb2YgcmVxdWlyZWQgbWFjaGluZS1zcGVjaWZpYyBwYWNrYWdlcyB0byBpbnN0YWxsIGFzIHBhcnQgb2YgdGhlIGltYWdlIGJlaW5nIGJ1aWx0LiBCZWNhdXNlIHRoaXMgaXMgYSAnbWFjaGluZSBlc3NlbnRpYWwnIHZhcmlhYmxlLCB0aGUgbGlzdCBvZiBwYWNrYWdlcyBhcmUgZXNzZW50aWFsIGZvciB0aGUgbWFjaGluZSB0byBib290LiIKK01BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JSRUNPTU1FTkRTW2RvY10gPSAiQSBsaXN0IG9mIHJlY29tbWVuZGVkIG1hY2hpbmUtc3BlY2lmaWMgcGFja2FnZXMgdG8gaW5zdGFsbCBhcyBwYXJ0IG9mIHRoZSBpbWFnZSBiZWluZyBidWlsdC4gQmVjYXVzZSB0aGlzIGlzIGEgJ21hY2hpbmUgZXNzZW50aWFsJyB2YXJpYWJsZSwgdGhlIGxpc3Qgb2YgcGFja2FnZXMgYXJlIGVzc2VudGlhbCBmb3IgdGhlIG1hY2hpbmUgdG8gYm9vdC4iCitNQUNISU5FX0VYVFJBX1JERVBFTkRTW2RvY10gPSAiQSBsaXN0IG9mIG1hY2hpbmUtc3BlY2lmaWMgcGFja2FnZXMgdG8gaW5zdGFsbCBhcyBwYXJ0IG9mIHRoZSBpbWFnZSBiZWluZyBidWlsdCB0aGF0IGFyZSBub3QgZXNzZW50aWFsIGZvciB0aGUgbWFjaGluZSB0byBib290LiBIb3dldmVyLCB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgbW9yZSBmdWxseS1mZWF0dXJlZCBpbWFnZXMgZGVwZW5kcyBvbiB0aGUgcGFja2FnZXMgYmVpbmcgcHJlc2VudC4iCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTW2RvY10gPSAiQSBsaXN0IG9mIG1hY2hpbmUtc3BlY2lmaWMgcGFja2FnZXMgdG8gaW5zdGFsbCBhcyBwYXJ0IG9mIHRoZSBpbWFnZSBiZWluZyBidWlsdCB0aGF0IGFyZSBub3QgZXNzZW50aWFsIGZvciBib290aW5nIHRoZSBtYWNoaW5lLiBUaGUgaW1hZ2UgYmVpbmcgYnVpbHQgaGFzIG5vIGJ1aWxkIGRlcGVuZGVuY2llcyBvbiB0aGUgcGFja2FnZXMgaW4gdGhpcyBsaXN0LiIKK01BQ0hJTkVfRkVBVFVSRVNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgaGFyZHdhcmUgZmVhdHVyZXMgdGhlIE1BQ0hJTkUgc3VwcG9ydHMuIgorTUFDSElORV9GRUFUVVJFU19CQUNLRklMTFtkb2NdID0gIkZlYXR1cmVzIHRvIGJlIGFkZGVkIHRvIE1BQ0hJTkVfRkVBVFVSRVMgaWYgbm90IGFsc28gcHJlc2VudCBpbiBNQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQuIFRoaXMgdmFyaWFibGUgaXMgc2V0IGluIHRoZSBtZXRhL2NvbmYvYml0YmFrZS5jb25mIGZpbGUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VyLWNvbmZpZ3VyYWJsZS4iCitNQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRURbZG9jXSA9ICJGZWF0dXJlcyBmcm9tIE1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTEwgdGhhdCBzaG91bGQgbm90IGJlIGJhY2tmaWxsZWQgKGkuZS4gYWRkZWQgdG8gTUFDSElORV9GRUFUVVJFUykgZHVyaW5nIHRoZSBidWlsZC4iCitNQUNISU5FT1ZFUlJJREVTW2RvY10gPSAiTGlzdHMgb3ZlcnJpZGVzIHNwZWNpZmljIHRvIHRoZSBjdXJyZW50IG1hY2hpbmUuIEJ5IGRlZmF1bHQsIHRoaXMgbGlzdCBpbmNsdWRlcyB0aGUgdmFsdWUgb2YgTUFDSElORS4iCitNQUlOVEFJTkVSW2RvY10gPSAiVGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIGRpc3RyaWJ1dGlvbiBtYWludGFpbmVyLiIKK01JUlJPUlNbZG9jXSA9ICJTcGVjaWZpZXMgYWRkaXRpb25hbCBwYXRocyBmcm9tIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGdldHMgc291cmNlIGNvZGUuIgorTUxQUkVGSVhbZG9jXSA9ICJTcGVjaWZpZXMgYSBwcmVmaXggaGFzIGJlZW4gYWRkZWQgdG8gUE4gdG8gY3JlYXRlIGEgc3BlY2lhbCB2ZXJzaW9uIG9mIGEgcmVjaXBlIG9yIHBhY2thZ2UsIHN1Y2ggYXMgYSBNdWx0aWxpYiB2ZXJzaW9uLiIKK01PRFVMRV9UQVJCQUxMX0RFUExPWVtkb2NdID0gIkNvbnRyb2xzIGNyZWF0aW9uIG9mIHRoZSBtb2R1bGVzLSoudGd6IGZpbGUuIFNldCB0aGlzIHZhcmlhYmxlIHRvICIwIiB0byBkaXNhYmxlIGNyZWF0aW9uIG9mIHRoaXMgZmlsZSwgd2hpY2ggY29udGFpbnMgYWxsIG9mIHRoZSBrZXJuZWwgbW9kdWxlcyByZXN1bHRpbmcgZnJvbSBhIGtlcm5lbCBidWlsZC4iCitNVUxUSU1BQ0hfVEFSR0VUX1NZU1tkb2NdID0gIlNlcGFyYXRlcyBmaWxlcyBmb3IgZGlmZmVyZW50IG1hY2hpbmVzIHN1Y2ggdGhhdCB5b3UgY2FuIGJ1aWxkIGZvciBtdWx0aXBsZSB0YXJnZXQgbWFjaGluZXMgdXNpbmcgdGhlIHNhbWUgb3V0cHV0IGRpcmVjdG9yaWVzLiIKKworI04KKworTkFUSVZFTFNCU1RSSU5HW2RvY10gPSAiQSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIGhvc3QgZGlzdHJpYnV0aW9uLiIKK05PX1JFQ09NTUVOREFUSU9OU1tkb2NdID0gIldoZW4gc2V0IHRvICcxJywgbm8gcmVjb21tZW5kZWQgcGFja2FnZXMgd2lsbCBiZSBpbnN0YWxsZWQuIFJlYWxpemUgdGhhdCBzb21lIHJlY29tbWVuZGVkIHBhY2thZ2VzIG1pZ2h0IGJlIHJlcXVpcmVkIGZvciBjZXJ0YWluIHN5c3RlbSBmdW5jdGlvbmFsaXR5LCBzdWNoIGFzIGtlcm5lbC1tb2R1bGVzLiBJdCBpcyB1cCB0byB0aGUgdXNlciB0byBhZGQgcGFja2FnZXMgdG8gSU1BR0VfSU5TVEFMTCBhcyBuZWVkZWQuIgorTk9IRERbZG9jXSA9ICJDYXVzZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gc2tpcCBidWlsZGluZyB0aGUgLmhkZGltZyBpbWFnZS4iCitOT0lTT1tkb2NdID0gIkNhdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBza2lwIGJ1aWxkaW5nIHRoZSBJU08gaW1hZ2UuIgorCisjTworCitPRV9CSU5DT05GSUdfRVhUUkFfTUFOR0xFW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgYmluY29uZmlnLmJiY2xhc3MgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGFkZGl0aW9uYWwgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgInNlZCIgY29tbWFuZC4iCitPRV9JTVBPUlRTW2RvY10gPSAiQW4gaW50ZXJuYWwgdmFyaWFibGUgdXNlZCB0byB0ZWxsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdoYXQgUHl0aG9uIG1vZHVsZXMgdG8gaW1wb3J0IGZvciBldmVyeSBQeXRob24gZnVuY3Rpb24gcnVuIGJ5IHRoZSBzeXN0ZW0uIgorT0VfVEVSTUlOQUxbZG9jXSA9ICJDb250cm9scyBob3cgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc3Bhd25zIGludGVyYWN0aXZlIHRlcm1pbmFscyBvbiB0aGUgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0uIgorT0VST09UW2RvY10gPSAiVGhlIGRpcmVjdG9yeSBmcm9tIHdoaWNoIHRoZSB0b3AtbGV2ZWwgYnVpbGQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IGlzIHNvdXJjZWQuIgorT0xERVNUX0tFUk5FTFtkb2NdID0gIkRlY2xhcmVzIHRoZSBvbGRlc3QgdmVyc2lvbiBvZiB0aGUgTGludXgga2VybmVsIHRoYXQgdGhlIHByb2R1Y2VkIGJpbmFyaWVzIG11c3Qgc3VwcG9ydC4iCitPVkVSUklERVNbZG9jXSA9ICJCaXRCYWtlIHVzZXMgT1ZFUlJJREVTIHRvIGNvbnRyb2wgd2hhdCB2YXJpYWJsZXMgYXJlIG92ZXJyaWRkZW4gYWZ0ZXIgQml0QmFrZSBwYXJzZXMgcmVjaXBlcyBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4iCisKKyNQCisKK1BbZG9jXSA9ICJUaGUgcmVjaXBlIG5hbWUgYW5kIHZlcnNpb24uIFAgaXMgY29tcHJpc2VkIG9mICR7UE59LSR7UFZ9LiIKK1BBQ0tBR0VfQVJDSFtkb2NdID0gIlRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIHJlc3VsdGluZyBwYWNrYWdlIG9yIHBhY2thZ2VzLiIKK1BBQ0tBR0VfQVJDSFNbZG9jXSA9ICJBIGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcyBjb21wYXRpYmxlIHdpdGggdGhlIGdpdmVuIHRhcmdldCBpbiBvcmRlciBvZiBwcmlvcml0eS4iCitQQUNLQUdFX0JFRk9SRV9QTltkb2NdID0gIkVuYWJsZXMgZWFzaWx5IGFkZGluZyBwYWNrYWdlcyB0byBQQUNLQUdFUyBiZWZvcmUgJHtQTn0gc28gdGhhdCB0aGUgcGFja2FnZXMgY2FuIHBpY2sgdXAgZmlsZXMgdGhhdCB3b3VsZCBub3JtYWxseSBiZSBpbmNsdWRlZCBpbiB0aGUgZGVmYXVsdCBwYWNrYWdlLiIKK1BBQ0tBR0VfQ0xBU1NFU1tkb2NdID0gIlRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBwYWNrYWdlIG1hbmFnZXIgdG8gdXNlIHdoZW4gcGFja2FnaW5nIGRhdGEuIEl0IGlzIHNldCBpbiB0aGUgY29uZi9sb2NhbC5jb25mIGZpbGUgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4iCitQQUNLQUdFX0VYQ0xVREVbZG9jXSA9ICJQYWNrYWdlcyB0byBleGNsdWRlIGZyb20gdGhlIGluc3RhbGxhdGlvbi4gSWYgYSBsaXN0ZWQgcGFja2FnZSBpcyByZXF1aXJlZCwgYW4gZXJyb3IgaXMgZ2VuZXJhdGVkLiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcyBjb21wYXRpYmxlIHdpdGggdGhlIGRldmljZSBDUFUuIFRoaXMgdmFyaWFibGUgaXMgdXNlZnVsIHdoZW4geW91IGJ1aWxkIGZvciBzZXZlcmFsIGRpZmZlcmVudCBkZXZpY2VzIHRoYXQgdXNlIG1pc2NlbGxhbmVvdXMgcHJvY2Vzc29ycy4iCitQQUNLQUdFX0dST1VQW2RvY10gPSAiRGVmaW5lcyBvbmUgb3IgbW9yZSBwYWNrYWdlcyB0byBpbmNsdWRlIGluIGFuIGltYWdlIHdoZW4gYSBzcGVjaWZpYyBpdGVtIGlzIGluY2x1ZGVkIGluIElNQUdFX0ZFQVRVUkVTLiIKK1BBQ0tBR0VfSU5TVEFMTFtkb2NdID0gIkxpc3Qgb2YgdGhlIHBhY2thZ2VzIHRvIGJlIGluc3RhbGxlZCBpbnRvIHRoZSBpbWFnZS4gVGhlIHZhcmlhYmxlIGlzIGdlbmVyYWxseSBub3QgdXNlci1kZWZpbmVkIGFuZCB1c2VzIElNQUdFX0lOU1RBTEwgYXMgcGFydCBvZiB0aGUgbGlzdC4iCitQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFlbZG9jXSA9ICJMaXN0IG9mIHBhY2thZ2VzIGF0dGVtcHRlZCB0byBiZSBpbnN0YWxsZWQuIElmIGEgbGlzdGVkIHBhY2thZ2UgZmFpbHMgdG8gaW5zdGFsbCwgdGhlIGJ1aWxkIHN5c3RlbSBkb2VzIG5vdCBnZW5lcmF0ZSBhbiBlcnJvci4gVGhpcyB2YXJpYWJsZSBpcyBnZW5lcmFsbHkgbm90IHVzZXItZGVmaW5lZC4iCitQQUNLQUdFQ09ORklHW2RvY10gPSAiVGhpcyB2YXJpYWJsZSBwcm92aWRlcyBhIG1lYW5zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBmZWF0dXJlcyBvZiBhIHJlY2lwZSBvbiBhIHBlci1yZWNpcGUgYmFzaXMuIgorUEFDS0FHRVNbZG9jXSA9ICJUaGUgbGlzdCBvZiBwYWNrYWdlcyB0byBiZSBjcmVhdGVkIGZyb20gdGhlIHJlY2lwZS4iCitQQUNLQUdFU19EWU5BTUlDW2RvY10gPSAiQSBwcm9taXNlIHRoYXQgeW91ciByZWNpcGUgc2F0aXNmaWVzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIGZvciBvcHRpb25hbCBtb2R1bGVzIHRoYXQgYXJlIGZvdW5kIGluIG90aGVyIHJlY2lwZXMuIgorUEFSQUxMRUxfTUFLRVtkb2NdID0gIlNwZWNpZmllcyBleHRyYSBvcHRpb25zIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUgbWFrZSBjb21tYW5kIGR1cmluZyB0aGUgY29tcGlsZSB0YXNrcy4gVGhpcyB2YXJpYWJsZSBpcyB1c3VhbGx5IGluIHRoZSBmb3JtIC1qIDQsIHdoZXJlIHRoZSBudW1iZXIgcmVwcmVzZW50cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFyYWxsZWwgdGhyZWFkcyBtYWtlIGNhbiBydW4uIgorUEFSQUxMRUxfTUFLRUlOU1RbZG9jXSA9ICJFeHRyYSBvcHRpb25zIHBhc3NlZCB0byB0aGUgbWFrZSBpbnN0YWxsIGNvbW1hbmQgZHVyaW5nIHRoZSBkb19pbnN0YWxsIHRhc2sgaW4gb3JkZXIgdG8gc3BlY2lmeSBwYXJhbGxlbCBpbnN0YWxsYXRpb24uIgorUEFUQ0hSRVNPTFZFW2RvY10gPSAiRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJhY3RpdmUgcGF0Y2ggcmVzb2x1dGlvbi4iCitQQVRDSFRPT0xbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHV0aWxpdHkgdXNlZCB0byBhcHBseSBwYXRjaGVzIGZvciBhIHJlY2lwZSBkdXJpbmcgZG9fcGF0Y2guIgorUEVbZG9jXSA9ICJUaGUgZXBvY2ggb2YgdGhlIHJlY2lwZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgJzAnLiBUaGUgZmllbGQgaXMgdXNlZCB0byBtYWtlIHVwZ3JhZGVzIHBvc3NpYmxlIHdoZW4gdGhlIHZlcnNpb25pbmcgc2NoZW1lIGNoYW5nZXMgaW4gc29tZSBiYWNrd2FyZHMgaW5jb21wYXRpYmxlIHdheS4iCitQRltkb2NdID0gIlNwZWNpZmllcyB0aGUgcmVjaXBlIG9yIHBhY2thZ2UgbmFtZSBhbmQgaW5jbHVkZXMgYWxsIHZlcnNpb24gYW5kIHJldmlzaW9uIG51bWJlcnMuIFRoaXMgdmFyaWFibGUgaXMgY29tcHJpc2VkIG9mICR7UE59LSR7RVhURU5EUEV9JHtQVn0tJHtQUn0uIgorUElYQlVGX1BBQ0tBR0VTW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgcGl4YnVmY2FjaGUgY2xhc3MsIHRoaXMgdmFyaWFibGUgaWRlbnRpZmllcyBwYWNrYWdlcyB0aGF0IGNvbnRhaW4gdGhlIHBpeGJ1ZiBsb2FkZXJzIHVzZWQgd2l0aCBnZGstcGl4YnVmLiIKK1BLR0RbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBmb3IgZmlsZXMgdG8gYmUgcGFja2FnZWQgYmVmb3JlIHRoZXkgYXJlIHNwbGl0IGludG8gaW5kaXZpZHVhbCBwYWNrYWdlcy4iCitQS0dEQVRBX0RJUltkb2NdID0gIlBvaW50cyB0byBhIHNoYXJlZCwgZ2xvYmFsLXN0YXRlIGRpcmVjdG9yeSB0aGF0IGhvbGRzIGRhdGEgZ2VuZXJhdGVkIGR1cmluZyB0aGUgcGFja2FnaW5nIHByb2Nlc3MuIgorUEtHREVTVFtkb2NdID0gIlBvaW50cyB0byB0aGUgcGFyZW50IGRpcmVjdG9yeSBmb3IgZmlsZXMgdG8gYmUgcGFja2FnZWQgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gc3BsaXQgaW50byBpbmRpdmlkdWFsIHBhY2thZ2VzLiIKK1BLR0RFU1RXT1JLW2RvY10gPSAiUG9pbnRzIHRvIGEgdGVtcG9yYXJ5IHdvcmsgYXJlYSB1c2VkIGJ5IHRoZSBkb19wYWNrYWdlIHRhc2sgdG8gd3JpdGUgb3V0cHV0IGZyb20gdGhlIGRvX3BhY2thZ2VkYXRhIHRhc2suIgorUE5bZG9jXSA9ICJQTiByZWZlcnMgdG8gYSByZWNpcGUgbmFtZSBpbiB0aGUgY29udGV4dCBvZiBhIGZpbGUgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhcyBpbnB1dCB0byBjcmVhdGUgYSBwYWNrYWdlLiBJdCByZWZlcnMgdG8gYSBwYWNrYWdlIG5hbWUgaW4gdGhlIGNvbnRleHQgb2YgYSBmaWxlIGNyZWF0ZWQgb3IgcHJvZHVjZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorUE5CTEFDS0xJU1RbZG9jXSA9ICJMaXN0cyByZWNpcGVzIHlvdSBkbyBub3Qgd2FudCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBidWlsZC4iCitQUltkb2NdID0gIlRoZSByZXZpc2lvbiBvZiB0aGUgcmVjaXBlLiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyB2YXJpYWJsZSBpcyAncjAnLiIKK1BSRUZFUlJFRF9QUk9WSURFUltkb2NdID0gIklmIG11bHRpcGxlIHJlY2lwZXMgcHJvdmlkZSBhbiBpdGVtLCB0aGlzIHZhcmlhYmxlIGRldGVybWluZXMgd2hpY2ggcmVjaXBlIHNob3VsZCBiZSBnaXZlbiBwcmVmZXJlbmNlLiIKK1BSRUZFUlJFRF9WRVJTSU9OW2RvY10gPSAiSWYgdGhlcmUgYXJlIG11bHRpcGxlIHZlcnNpb25zIG9mIHJlY2lwZXMgYXZhaWxhYmxlLCB0aGlzIHZhcmlhYmxlIGRldGVybWluZXMgd2hpY2ggcmVjaXBlIHNob3VsZCBiZSBnaXZlbiBwcmVmZXJlbmNlLiIKK1BSRU1JUlJPUlNbZG9jXSA9ICJTcGVjaWZpZXMgYWRkaXRpb25hbCBwYXRocyBmcm9tIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGdldHMgc291cmNlIGNvZGUuIgorUFJJTkNbZG9jXSA9ICJDYXVzZXMgdGhlIFBSIHZhcmlhYmxlIG9mIC5iYmFwcGVuZCBmaWxlcyB0byBkeW5hbWljYWxseSBpbmNyZW1lbnQuIFRoaXMgaW5jcmVtZW50IG1pbmltaXplcyB0aGUgaW1wYWN0IG9mIGxheWVyIG9yZGVyaW5nLiBUaGlzIHZhcmlhYmxlIGRlZmF1bHRzIHRvICcwJy4iCitQUklPUklUWVtkb2NdID0gIkluZGljYXRlcyB0aGUgaW1wb3J0YW5jZSBvZiBhIHBhY2thZ2UuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAnb3B0aW9uYWwnLiAgT3RoZXIgc3RhbmRhcmQgdmFsdWVzIGFyZSAncmVxdWlyZWQnLCAnc3RhbmRhcmQnIGFuZCAnZXh0cmEnLiIKK1BST1ZJREVTW2RvY10gPSAiQSBsaXN0IG9mIGFsaWFzZXMgdGhhdCBhIHJlY2lwZSBhbHNvIHByb3ZpZGVzLiBUaGVzZSBhbGlhc2VzIGFyZSB1c2VmdWwgZm9yIHNhdGlzZnlpbmcgZGVwZW5kZW5jaWVzIG9mIG90aGVyIHJlY2lwZXMgZHVyaW5nIHRoZSBidWlsZCBhcyBzcGVjaWZpZWQgYnkgREVQRU5EUy4iCitQUlNFUlZfSE9TVFtkb2NdID0gIlRoZSBuZXR3b3JrIGJhc2VkIFBSIHNlcnZpY2UgaG9zdCBhbmQgcG9ydC4iCitQVltkb2NdID0gIlRoZSB2ZXJzaW9uIG9mIHRoZSByZWNpcGUuIFRoZSB2ZXJzaW9uIGlzIG5vcm1hbGx5IGV4dHJhY3RlZCBmcm9tIHRoZSByZWNpcGUgZmlsZW5hbWUuIgorCisjUQorCitRTUFLRV9QUk9GSUxFU1tkb2NdID0gIlNwZWNpZmllcyB5b3VyIG93biBzdWJzZXQgb2YgLnBybyBmaWxlcyB0byBiZSBidWlsdCBmb3IgdXNlIHdpdGggcW1ha2UuIgorCisjUgorCitSQ09ORkxJQ1RTW2RvY10gPSAiVGhlIGxpc3Qgb2YgcGFja2FnZXMgdGhhdCBjb25mbGljdCB3aXRoIGFub3RoZXIgcGFja2FnZS4gTm90ZSB0aGF0IHRoZSBwYWNrYWdlIHdpbGwgbm90IGJlIGluc3RhbGxlZCBpZiB0aGUgY29uZmxpY3RpbmcgcGFja2FnZXMgYXJlIG5vdCBmaXJzdCByZW1vdmVkLiIKK1JERVBFTkRTW2RvY10gPSAiTGlzdHMgYSBwYWNrYWdlJ3MgcnVudGltZSBkZXBlbmRlbmNpZXMgKGkuZS4gb3RoZXIgcGFja2FnZXMpIHRoYXQgbXVzdCBiZSBpbnN0YWxsZWQgZm9yIHRoZSBwYWNrYWdlIHRvIGJlIGJ1aWx0LiBUaGV5IG11c3QgYmUgdGhlIG5hbWVzIG9mIG90aGVyIHBhY2thZ2VzIGFzIGxpc3RlZCBpbiB0aGUgUEFDS0FHRVMgdmFyaWFibGUsIG5vdCByZWNpcGUgbmFtZXMgKFBOKS4iCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgY2xhc3MsIHRoaXMgdmFyaWFibGUgaWRlbnRpZmllcyBkaXN0cmlidXRpb24gZmVhdHVyZXMgdGhhdCBtdXN0IGV4aXN0IGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaW4gb3JkZXIgZm9yIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGJ1aWxkIHRoZSByZWNpcGUuIgorUk1fT0xEX0lNQUdFW2RvY10gPSAiUmVjbGFpbXMgZGlzayBzcGFjZSBieSByZW1vdmluZyBwcmV2aW91c2x5IGJ1aWx0IHZlcnNpb25zIG9mIHRoZSBzYW1lIGltYWdlIGZyb20gdGhlIGltYWdlcyBkaXJlY3RvcnkgcG9pbnRlZCB0byBieSB0aGUgREVQTE9ZX0RJUiB2YXJpYWJsZS4iCitSTV9XT1JLX0VYQ0xVREVbZG9jXSA9ICJXaXRoIHJtX3dvcmsgZW5hYmxlZCwgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYSBsaXN0IG9mIHBhY2thZ2VzIHdob3NlIHdvcmsgZGlyZWN0b3JpZXMgc2hvdWxkIG5vdCBiZSByZW1vdmVkLiIKK1JPT1RGU1tkb2NdID0gIkluZGljYXRlcyBhIGZpbGVzeXN0ZW0gaW1hZ2UgdG8gaW5jbHVkZSBhcyB0aGUgcm9vdCBmaWxlc3lzdGVtLiIKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EW2RvY10gPSAiQWRkZWQgYnkgY2xhc3NlcyB0byBydW4gcG9zdCBwcm9jZXNzaW5nIGNvbW1hbmRzIG9uY2UgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIGNyZWF0ZWQgdGhlIHJvb3QgZmlsZXN5c3RlbS4iCitSUFJPVklERVNbZG9jXSA9ICJBIGxpc3Qgb2YgcGFja2FnZSBuYW1lIGFsaWFzZXMgdGhhdCBhIHBhY2thZ2UgYWxzbyBwcm92aWRlcy4gVGhlc2UgYWxpYXNlcyBhcmUgdXNlZnVsIGZvciBzYXRpc2Z5aW5nIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIG9mIG90aGVyIHBhY2thZ2VzIGJvdGggZHVyaW5nIHRoZSBidWlsZCBhbmQgb24gdGhlIHRhcmdldC4iCitSUkVDT01NRU5EU1tkb2NdID0gIkEgbGlzdCBvZiBwYWNrYWdlcyB0aGF0IGV4dGVuZHMgdGhlIHVzYWJpbGl0eSBvZiBhIHBhY2thZ2UgYmVpbmcgYnVpbHQuIFRoZSBwYWNrYWdlIGJlaW5nIGJ1aWx0IGRvZXMgbm90IGRlcGVuZCBvbiB0aGlzIGxpc3Qgb2YgcGFja2FnZXMgaW4gb3JkZXIgdG8gc3VjY2Vzc2Z1bGx5IGJ1aWxkLCBidXQgbmVlZHMgdGhlbSBmb3IgdGhlIGV4dGVuZGVkIHVzYWJpbGl0eS4iCitSUkVQTEFDRVNbZG9jXSA9ICJBIGxpc3Qgb2YgcGFja2FnZXMgcmVwbGFjZWQgYnkgYSBwYWNrYWdlLiBUaGUgcGFja2FnZSBtYW5hZ2VyIHVzZXMgdGhpcyB2YXJpYWJsZSB0byBkZXRlcm1pbmUgd2hpY2ggcGFja2FnZSBzaG91bGQgYmUgaW5zdGFsbGVkIHRvIHJlcGxhY2Ugb3RoZXIgcGFja2FnZShzKSBkdXJpbmcgYW4gdXBncmFkZS4iCitSU1VHR0VTVFNbZG9jXSA9ICJBIGxpc3Qgb2YgYWRkaXRpb25hbCBwYWNrYWdlcyB0aGF0IHlvdSBjYW4gc3VnZ2VzdCBmb3IgaW5zdGFsbGF0aW9uIGJ5IHRoZSBwYWNrYWdlIG1hbmFnZXIgYXQgdGhlIHRpbWUgYSBwYWNrYWdlIGlzIGluc3RhbGxlZC4gTm90IGFsbCBwYWNrYWdlIG1hbmFnZXJzIHN1cHBvcnQgdGhpcyBmdW5jdGlvbmFsaXR5LiIKKworI1MKKworU1tkb2NdID0gIlRoZSBsb2NhdGlvbiBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5IHdoZXJlIHVucGFja2VkIHBhY2thZ2Ugc291cmNlIGNvZGUgcmVzaWRlcy4iCitTQU5JVFlfVEVTVEVEX0RJU1RST1NbZG9jXSA9ICJBIGxpc3Qgb2YgdGhlIGhvc3QgZGlzdHJpYnV0aW9uIGlkZW50aWZpZXJzIHRoYXQgdGhlIGJ1aWxkIHN5c3RlbSBoYXMgYmVlbiB0ZXN0ZWQgYWdhaW5zdC4iCitTREtfQVJDSFtkb2NdID0gIlRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGZvciB0aGUgU0RLLiIKK1NES19ERVBMT1lbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IHNldCB1cCBhbmQgdXNlZCBieSB0aGUgcG9wdWxhdGVfc2RrX2Jhc2UgdG8gd2hpY2ggdGhlIFNESyBpcyBkZXBsb3llZC4iCitTREtfRElSW2RvY10gPSAiVGhlIHBhcmVudCBkaXJlY3RvcnkgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aGVuIGNyZWF0aW5nIFNESyBvdXRwdXQuIgorU0RLX05BTUVbZG9jXSA9ICJUaGUgYmFzZSBuYW1lIGZvciBTREsgb3V0cHV0IGZpbGVzLiIKK1NES19PVVRQVVRbZG9jXSA9ICJUaGUgbG9jYXRpb24gdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aGVuIGNyZWF0aW5nIFNESyBvdXRwdXQuIgorU0RLSU1BR0VfRkVBVFVSRVNbZG9jXSA9ICJFcXVpdmFsZW50IHRvIElNQUdFX0ZFQVRVUkVTLiBIb3dldmVyLCB0aGlzIHZhcmlhYmxlIGFwcGxpZXMgdG8gdGhlIFNESyBnZW5lcmF0ZWQgZnJvbSBhbiBpbWFnZSB1c2luZyB0aGUgY29tbWFuZCAnYml0YmFrZSAtYyBwb3B1bGF0ZV9zZGsgaW1hZ2VuYW1lJy4iCitTREtNQUNISU5FW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBhcmNoaXRlY3R1cmUgKGkuZS4gaTY4NiBvciB4ODZfNjQpIGZvciB3aGljaCB0byBidWlsZCBTREsgYW5kIEFEVCBpdGVtcy4iCitTRUNUSU9OW2RvY10gPSAiVGhlIHNlY3Rpb24gaW4gd2hpY2ggcGFja2FnZXMgc2hvdWxkIGJlIGNhdGVnb3JpemVkLiBQYWNrYWdlIG1hbmFnZW1lbnQgdXRpbGl0aWVzIGNhbiBtYWtlIHVzZSBvZiB0aGlzIHZhcmlhYmxlLiIKK1NFTEVDVEVEX09QVElNSVpBVElPTltkb2NdID0gIlRoZSB2YXJpYWJsZSB0YWtlcyB0aGUgdmFsdWUgb2YgRlVMTF9PUFRJTUlaQVRJT04gdW5sZXNzIERFQlVHX0JVSUxEID0gJzEnLiBJbiB0aGlzIGNhc2UsIHRoZSB2YWx1ZSBvZiBERUJVR19PUFRJTUlaQVRJT04gaXMgdXNlZC4iCitTRVJJQUxfQ09OU09MRVtkb2NdID0gIlRoZSBzcGVlZCBhbmQgZGV2aWNlIGZvciB0aGUgc2VyaWFsIHBvcnQgdXNlZCB0byBhdHRhY2ggdGhlIHNlcmlhbCBjb25zb2xlLiBUaGlzIHZhcmlhYmxlIGlzIGdpdmVuIHRvIHRoZSBrZXJuZWwgYXMgdGhlICdjb25zb2xlJyBwYXJhbWV0ZXIuIEFmdGVyIGJvb3Rpbmcgb2NjdXJzLCBnZXR0eSBpcyBzdGFydGVkIG9uIHRoYXQgcG9ydCBzbyByZW1vdGUgbG9naW4gaXMgcG9zc2libGUuIgorU0VSSUFMX0NPTlNPTEVTW2RvY10gPSAiRGVmaW5lcyB0aGUgc2VyaWFsIGNvbnNvbGVzIChUVFlzKSB0byBlbmFibGUgdXNpbmcgZ2V0dHkuIgorU0VSSUFMX0NPTlNPTEVTX0NIRUNLW2RvY10gPSAiU2ltaWxhciB0byBTRVJJQUxfQ09OU09MRVMgZXhjZXB0IHRoZSBkZXZpY2UgaXMgY2hlY2tlZCBmb3IgZXhpc3RlbmNlIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGVuYWJsZSBpdC4gU3VwcG9ydGVkIG9ubHkgYnkgU3lzVmluaXQuIgorU0lHR0VOX0VYQ0xVREVfU0FGRV9SRUNJUEVfREVQU1tkb2NdID0gIkEgbGlzdCBvZiByZWNpcGUgZGVwZW5kZW5jaWVzIHRoYXQgc2hvdWxkIG5vdCBiZSB1c2VkIHRvIGRldGVybWluZSBzaWduYXR1cmVzIG9mIHRhc2tzIGZyb20gb25lIHJlY2lwZSB3aGVuIHRoZXkgZGVwZW5kIG9uIHRhc2tzIGZyb20gYW5vdGhlciByZWNpcGUuIgorU0lHR0VOX0VYQ0xVREVSRUNJUEVTX0FCSVNBRkVbZG9jXSA9ICJBIGxpc3Qgb2YgcmVjaXBlcyB0aGF0IGFyZSBjb21wbGV0ZWx5IHN0YWJsZSBhbmQgd2lsbCBuZXZlciBjaGFuZ2UuIgorU0lURUlORk9fQklUU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGJpdHMgZm9yIHRoZSB0YXJnZXQgc3lzdGVtIENQVS4iCitTSVRFSU5GT19FTkRJQU5ORVNTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBlbmRpYW4gYnl0ZSBvcmRlciBvZiB0aGUgdGFyZ2V0IHN5c3RlbS4gVGhlIHZhbHVlIHNob3VsZCBiZSBlaXRoZXIgJ2xlJyBmb3IgJ2xpdHRsZS1lbmRpYW4nIG9yICdiZScgZm9yICdiaWctZW5kaWFuJy4iCitTT0NfRkFNSUxZW2RvY10gPSAiR3JvdXBzIHRvZ2V0aGVyIG1hY2hpbmVzIGJhc2VkIHVwb24gdGhlIHNhbWUgZmFtaWx5IG9mIFNPQyAoU3lzdGVtIE9uIENoaXApLiBZb3UgdHlwaWNhbGx5IHNldCB0aGlzIHZhcmlhYmxlIGluIGEgY29tbW9uIC5pbmMgZmlsZSB0aGF0IHlvdSBpbmNsdWRlIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIG9mIGFsbCB0aGUgbWFjaGluZXMuIgorU09MSUJTW2RvY10gPSAiRGVmaW5lcyB0aGUgc3VmZml4IGZvciBzaGFyZWQgbGlicmFyaWVzIHVzZWQgb24gdGhlIHRhcmdldCBwbGF0Zm9ybS4iCitTT0xJQlNERVZbZG9jXSA9ICJEZWZpbmVzIHRoZSBzdWZmaXggZm9yIHRoZSBkZXZlbG9wbWVudCBzeW1ib2xpYyBsaW5rIChzeW1saW5rKSBmb3Igc2hhcmVkIGxpYnJhcmllcyBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLiIKK1NPVVJDRV9NSVJST1JfRkVUQ0hbZG9jXSA9ICJTd2l0Y2ggbWFya2luZyBidWlsZCBhcyBzb3VyY2UgZmV0Y2hlci4gVXNlZCB0byBza2lwIENPTVBBVElCTEVfKiBjaGVja2luZy4iCitTT1VSQ0VfTUlSUk9SX1VSTFtkb2NdID0gIlVSTCB0byBzb3VyY2UgbWlycm9yIHRoYXQgd2lsbCBiZSB1c2VkIGJlZm9yZSBmZXRjaGluZyBmcm9tIG9yaWdpbmFsIFNSQ19VUkkuIgorU1BFQ0lBTF9QS0dTVUZGSVhbZG9jXSA9ICJBIGxpc3Qgb2YgcHJlZml4ZXMgZm9yIFBOIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gY3JlYXRlIHZhcmlhbnRzIG9mIHJlY2lwZXMgb3IgcGFja2FnZXMuIFRoZSBsaXN0IHNwZWNpZmllcyB0aGUgcHJlZml4ZXMgdG8gc3RyaXAgb2ZmIGR1cmluZyBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgc3VjaCBhcyB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgQlBOIHZhcmlhYmxlLiIKK1NSQ19VUklbZG9jXSA9ICJUaGUgbGlzdCBvZiBzb3VyY2UgZmlsZXMgLSBsb2NhbCBvciByZW1vdGUuIFRoaXMgdmFyaWFibGUgdGVsbHMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2hhdCBiaXRzIHRvIHB1bGwgaW4gZm9yIHRoZSBidWlsZCBhbmQgaG93IHRvIHB1bGwgdGhlbSBpbi4iCitTUkNfVVJJX09WRVJSSURFU19QQUNLQUdFX0FSQ0hbZG9jXSA9ICJCeSBkZWZhdWx0LCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhdXRvbWF0aWNhbGx5IGRldGVjdHMgd2hldGhlciBTUkNfVVJJIGNvbnRhaW5zIGZpbGVzIHRoYXQgYXJlIG1hY2hpbmUtc3BlY2lmaWMuIElmIHNvLCB0aGUgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkgY2hhbmdlcyBQQUNLQUdFX0FSQ0guIFNldHRpbmcgdGhpcyB2YXJpYWJsZSB0byAnMCcgZGlzYWJsZXMgdGhpcyBiZWhhdmlvci4iCitTUkNEQVRFW2RvY10gPSAiVGhlIGRhdGUgb2YgdGhlIHNvdXJjZSBjb2RlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuIFRoaXMgdmFyaWFibGUgYXBwbGllcyBvbmx5IGlmIHRoZSBzb3VyY2Ugd2FzIGZldGNoZWQgZnJvbSBhIFNvdXJjZSBDb2RlIE1hbmFnZXIgKFNDTSkuIgorU1JDUFZbZG9jXSA9ICJSZXR1cm5zIHRoZSB2ZXJzaW9uIHN0cmluZyBvZiB0aGUgY3VycmVudCBwYWNrYWdlLiBUaGlzIHN0cmluZyBpcyB1c2VkIHRvIGhlbHAgZGVmaW5lIHRoZSB2YWx1ZSBvZiBQVi4iCitTUkNSRVZbZG9jXSA9ICJUaGUgcmV2aXNpb24gb2YgdGhlIHNvdXJjZSBjb2RlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuIFRoaXMgdmFyaWFibGUgYXBwbGllcyB0byBTdWJ2ZXJzaW9uLCBHaXQsIE1lcmN1cmlhbCBhbmQgQmF6YWFyIG9ubHkuIgorU1NUQVRFX0RJUltkb2NdID0gIlRoZSBkaXJlY3RvcnkgZm9yIHRoZSBzaGFyZWQgc3RhdGUgY2FjaGUuIgorU1NUQVRFX01JUlJPUlNbZG9jXSA9ICJDb25maWd1cmVzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHNlYXJjaCBvdGhlciBtaXJyb3IgbG9jYXRpb25zIGZvciBwcmVidWlsdCBjYWNoZSBkYXRhIG9iamVjdHMgYmVmb3JlIGJ1aWxkaW5nIG91dCB0aGUgZGF0YS4gWW91IGNhbiBzcGVjaWZ5IGEgZmlsZXN5c3RlbSBkaXJlY3Rvcnkgb3IgYSByZW1vdGUgVVJMIHN1Y2ggYXMgSFRUUCBvciBGVFAuIgorU1RBR0lOR19LRVJORUxfRElSW2RvY10gPSAiVGhlIGRpcmVjdG9yeSB3aXRoIGtlcm5lbCBoZWFkZXJzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGJ1aWxkIG91dC1vZi10cmVlIG1vZHVsZXMuIgorU1RBTVBbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGJhc2UgcGF0aCB1c2VkIHRvIGNyZWF0ZSByZWNpcGUgc3RhbXAgZmlsZXMuIFRoZSBwYXRoIHRvIGFuIGFjdHVhbCBzdGFtcCBmaWxlIGlzIGNvbnN0cnVjdGVkIGJ5IGV2YWx1YXRpbmcgdGhpcyBzdHJpbmcgYW5kIHRoZW4gYXBwZW5kaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uIgorU1RBTVBTX0RJUltkb2NdID0gIlNwZWNpZmllcyB0aGUgYmFzZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcGxhY2VzIHN0YW1wcy4iCitTVU1NQVJZW2RvY10gPSAiVGhlIHNob3J0ICg4MCBjaGFyYWN0ZXJzIG9yIGxlc3MpIHN1bW1hcnkgb2YgdGhlIGJpbmFyeSBwYWNrYWdlIGZvciBwYWNrYWdpbmcgc3lzdGVtcyBzdWNoIGFzIG9wa2csIHJwbSBvciBkcGtnLiBCeSBkZWZhdWx0LCBTVU1NQVJZIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBERVNDUklQVElPTiB2YXJpYWJsZSBpZiBERVNDUklQVElPTiBpcyBub3Qgc2V0IGluIHRoZSByZWNpcGUuIgorU1ZORElSW2RvY10gPSAiVGhlIGRpcmVjdG9yeSB3aGVyZSBTdWJ2ZXJzaW9uIGNoZWNrb3V0cyB3aWxsIGJlIHN0b3JlZC4iCitTWVNMSU5VWF9ERUZBVUxUX0NPTlNPTEVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGtlcm5lbCBib290IGRlZmF1bHQgY29uc29sZS4iCitTWVNMSU5VWF9PUFRTW2RvY10gPSAiTGlzdHMgYWRkaXRpb25hbCBvcHRpb25zIHRvIGFkZCB0byB0aGUgc3lzbGludXggZmlsZS4iCitTWVNMSU5VWF9TRVJJQUxbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGFsdGVybmF0ZSBzZXJpYWwgcG9ydCBvciB0dXJucyBpdCBvZmYuIgorU1lTTElOVVhfU1BMQVNIW2RvY10gPSAiQW4gLkxTUyBmaWxlIHVzZWQgYXMgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBWR0EgYm9vdCBtZW51IHdoZW4geW91IGFyZSB1c2luZyB0aGUgYm9vdCBtZW51LiIKK1NZU0xJTlVYX1NFUklBTF9UVFlbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGFsdGVybmF0ZSBjb25zb2xlPXR0eS4uLiBrZXJuZWwgYm9vdCBhcmd1bWVudC4iCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1NbZG9jXSA9ICJBIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGV4ZWN1dGUgYWZ0ZXIgZmlsZXMgYXJlIHN0YWdlZCBpbnRvIHRoZSBzeXNyb290LiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzdWFsbHkgdXNlZCB0byBhcHBseSBhZGRpdGlvbmFsIHByb2Nlc3Npbmcgb24gdGhlIHN0YWdlZCBmaWxlcywgb3IgdG8gc3RhZ2UgYWRkaXRpb25hbCBmaWxlcy4iCitTWVNURU1EX0FVVE9fRU5BQkxFW2RvY10gPSAiRm9yIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBzeXN0ZW1kIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBzZXJ2aWNlIHlvdSBoYXZlIHNwZWNpZmllZCBpbiBTWVNURU1EX1NFUlZJQ0Ugc2hvdWxkIGJlIHN0YXJ0ZWQgYXV0b21hdGljYWxseSBvciBub3QuIgorU1lTVEVNRF9QQUNLQUdFU1tkb2NdID0gIkZvciByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUgc3lzdGVtZCBjbGFzcywgdGhpcyB2YXJpYWJsZSBsb2NhdGVzIHRoZSBzeXN0ZW1kIHVuaXQgZmlsZXMgd2hlbiB0aGV5IGFyZSBub3QgZm91bmQgaW4gdGhlIG1haW4gcmVjaXBlJ3MgcGFja2FnZS4iCitTWVNURU1EX1NFUlZJQ0VbZG9jXSA9ICJGb3IgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlIHN5c3RlbWQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBzeXN0ZW1kIHNlcnZpY2UgbmFtZSBmb3IgYSBwYWNrYWdlLiIKK1NZU1ZJTklUX0VOQUJMRURfR0VUVFlTW2RvY10gPSAiU3BlY2lmaWVzIHdoaWNoIHZpcnR1YWwgdGVybWluYWxzIHNob3VsZCBiZSBydW5uaW5nIGEgZ2V0dHksIHRoZSBkZWZhdWx0IGlzICcxJy4iCisKKyNUCisKK1RbZG9jXSA9ICJUaGlzIHZhcmlhYmxlIHBvaW50cyB0byBhIGRpcmVjdG9yeSB3ZXJlIEJpdEJha2UgcGxhY2VzIHRlbXBvcmFyeSBmaWxlcywgd2hpY2ggY29uc2lzdCBtb3N0bHkgb2YgdGFzayBsb2dzIGFuZCBzY3JpcHRzLCB3aGVuIGJ1aWxkaW5nIGEgcGFydGljdWxhciByZWNpcGUuIgorVEFSR0VUX0FSQ0hbZG9jXSA9ICJUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBkZXZpY2UgYmVpbmcgYnVpbHQuIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgYXJjaGl0ZWN0dXJlczogYXJtLCBtaXBzLCBwcGMsIHg4NiwgeDg2LTY0LiIKK1RBUkdFVF9DRkxBR1NbZG9jXSA9ICJGbGFncyBwYXNzZWQgdG8gdGhlIEMgY29tcGlsZXIgZm9yIHRoZSB0YXJnZXQgc3lzdGVtLiBUaGlzIHZhcmlhYmxlIGV2YWx1YXRlcyB0byB0aGUgc2FtZSBhcyBDRkxBR1MuIgorVEFSR0VUX0ZQVVtkb2NdID0gIlNwZWNpZmllcyB0aGUgbWV0aG9kIGZvciBoYW5kbGluZyBGUFUgY29kZS4gRm9yIEZQVS1sZXNzIHRhcmdldHMsIHdoaWNoIGluY2x1ZGUgbW9zdCBBUk0gQ1BVcywgdGhlIHZhcmlhYmxlIG11c3QgYmUgc2V0IHRvICdzb2Z0Jy4gSWYgbm90LCB0aGUga2VybmVsIGVtdWxhdGlvbiBnZXRzIHVzZWQsIHdoaWNoIHJlc3VsdHMgaW4gYSBwZXJmb3JtYW5jZSBwZW5hbHR5LiIKK1RBUkdFVF9PU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgdGFyZ2V0J3Mgb3BlcmF0aW5nIHN5c3RlbS4iCitUQVJHRVRfUFJFRklYW2RvY10gPSAiVGhlIHByZWZpeCBmb3IgdGhlIGNyb3NzLWNvbXBpbGUgdG9vbGNoYWluIChlLmcuIGFybS1saW51eC0pLiIKK1RBUkdFVF9TWVNbZG9jXSA9ICJUaGUgdGFyZ2V0IHN5c3RlbSBpcyBjb21wcmlzZWQgb2YgVEFSR0VUX0FSQ0gsVEFSR0VUX1ZFTkRPUiBhbmQgVEFSR0VUX09TLiIKK1RDTElCQ1tkb2NdID0gIlNwZWNpZmllcyBHTlUgc3RhbmRhcmQgQyBsaWJyYXJ5IChsaWJjKSB2YXJpYW50IHRvIHVzZSBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuIFlvdSBjYW4gc2VsZWN0ICdnbGliYycgb3IgJ3VjbGliYycuIgorVENNT0RFW2RvY10gPSAiRW5hYmxlcyBhbiBleHRlcm5hbCB0b29sY2hhaW4gKHdoZXJlIHByb3ZpZGVkIGJ5IGFuIGFkZGl0aW9uYWwgbGF5ZXIpIGlmIHNldCB0byBhIHZhbHVlIG90aGVyIHRoYW4gJ2RlZmF1bHQnLiIKK1RFU1RfSU1BR0VbZG9jXSA9ICJFbmFibGVzIHRlc3QgYm9vdGluZyBvZiB2aXJ0dWFsIG1hY2hpbmUgaW1hZ2VzIHVuZGVyIHRoZSBRRU1VIGVtdWxhdG9yIGFmdGVyIGFueSByb290IGZpbGVzeXN0ZW1zIGFyZSBjcmVhdGVkIGFuZCBydW5zIHRlc3RzIGFnYWluc3QgdGhvc2UgaW1hZ2VzLiIKK1RFU1RfUUVNVUJPT1RfVElNRU9VVFtkb2NdID0gIlRoZSB0aW1lIGluIHNlY29uZHMgYWxsb3dlZCBmb3IgYW4gaW1hZ2UgdG8gYm9vdCBiZWZvcmUgYXV0b21hdGVkIHJ1bnRpbWUgdGVzdHMgYmVnaW4gdG8gcnVuIGFnYWluc3QgYW4gaW1hZ2UuIgorVEVTVF9TVUlURVNbZG9jXSA9ICJBbiBvcmRlcmVkIGxpc3Qgb2YgdGVzdHMgKG1vZHVsZXMpIHRvIHJ1biBhZ2FpbnN0IGFuIGltYWdlIHdoZW4gcGVyZm9ybWluZyBhdXRvbWF0ZWQgcnVudGltZSB0ZXN0aW5nLiIKK1RFU1RfUE9XRVJDT05UUk9MX0NNRFtkb2NdID0gIkZvciBhdXRvbWF0ZWQgaGFyZHdhcmUgdGVzdGluZywgc3BlY2lmaWVzIHRoZSBjb21tYW5kIHRvIHVzZSB0byBjb250cm9sIHRoZSBwb3dlciBvZiB0aGUgdGFyZ2V0IG1hY2hpbmUgdW5kZXIgdGVzdCIKK1RFU1RfUE9XRVJDT05UUk9MX0VYVFJBX0FSR1NbZG9jXSA9ICJGb3IgYXV0b21hdGVkIGhhcmR3YXJlIHRlc3RpbmcsIHNwZWNpZmllcyBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRocm91Z2ggdG8gdGhlIGNvbW1hbmQgc3BlY2lmaWVkIGluIFRFU1RfUE9XRVJDT05UUk9MX0NNRCIKK1RFU1RfU0VSSUFMQ09OVFJPTF9DTURbZG9jXSA9ICJGb3IgYXV0b21hdGVkIGhhcmR3YXJlIHRlc3RpbmcsIHNwZWNpZmllcyB0aGUgY29tbWFuZCB0byB1c2UgdG8gY29ubmVjdCB0byB0aGUgc2VyaWFsIGNvbnNvbGUgb2YgdGhlIHRhcmdldCBtYWNoaW5lIHVuZGVyIHRlc3QiCitURVNUX1NFUklBTENPTlRST0xfRVhUUkFfQVJHU1tkb2NdID0gIkZvciBhdXRvbWF0ZWQgaGFyZHdhcmUgdGVzdGluZywgc3BlY2lmaWVzIGFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgY29tbWFuZCBzcGVjaWZpZWQgaW4gVEVTVF9TRVJJQUxDT05UUk9MX0NNRCIKK1RFU1RfVEFSR0VUW2RvY10gPSAiRm9yIGF1dG9tYXRlZCBydW50aW1lIHRlc3RpbmcsIHNwZWNpZmllcyB0aGUgbWV0aG9kIG9mIGRlcGxveWluZyB0aGUgaW1hZ2UgYW5kIHJ1bm5pbmcgdGVzdHMgb24gdGhlIHRhcmdldCBtYWNoaW5lIgorVEhJU0RJUltkb2NdID0gIlRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGZpbGUgQml0QmFrZSBpcyBjdXJyZW50bHkgcGFyc2luZyBpcyBsb2NhdGVkLiIKK1RJTUVbZG9jXSA9ICJUaGUgdGltZSB0aGUgYnVpbGQgd2FzIHN0YXJ0ZWQgdXNpbmcgSE1TIGZvcm1hdC4iCitUTVBESVJbZG9jXSA9ICJUaGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHdoZW4gaXQgZG9lcyBpdHMgd29yayBidWlsZGluZyBpbWFnZXMuIEJ5IGRlZmF1bHQsIHRoZSBUTVBESVIgdmFyaWFibGUgaXMgbmFtZWQgdG1wIHdpdGhpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKK1RPT0xDSEFJTl9IT1NUX1RBU0tbZG9jXSA9ICJUaGlzIHZhcmlhYmxlIGxpc3RzIHBhY2thZ2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgd2hlbiBidWlsZGluZyBhbiBTREssIHdoaWNoIGNvbnRhaW5zIGEgY3Jvc3MtZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuIgorVE9PTENIQUlOX1RBUkdFVF9UQVNLW2RvY10gPSAiVGhpcyB2YXJpYWJsZSBsaXN0cyBwYWNrYWdlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHdoZW4gaXQgY3JlYXRlcyB0aGUgdGFyZ2V0IHBhcnQgb2YgYW4gU0RLLCB3aGljaCBpbmNsdWRlcyBsaWJyYXJpZXMgYW5kIGhlYWRlcnMuIgorVE9QRElSW2RvY10gPSAiVGhlIEJ1aWxkIERpcmVjdG9yeS4gQml0QmFrZSBhdXRvbWF0aWNhbGx5IHNldHMgdGhpcyB2YXJpYWJsZS4gVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUgQnVpbGQgRGlyZWN0b3J5IHdoZW4gYnVpbGRpbmcgaW1hZ2VzLiIKK1RSQU5TTEFURURfVEFSR0VUX0FSQ0hbZG9jXSA9ICJBIHNhbml0aXplZCB2ZXJzaW9uIG9mIFRBUkdFVF9BUkNILiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgd2hlcmUgdGhlIGFyY2hpdGVjdHVyZSBpcyBuZWVkZWQgaW4gYSB2YWx1ZSB3aGVyZSB1bmRlcnNjb3JlcyBhcmUgbm90IGFsbG93ZWQuIgorVFVORV9QS0dBUkNIW2RvY10gPSAiVGhlIHBhY2thZ2UgYXJjaGl0ZWN0dXJlIHVuZGVyc3Rvb2QgYnkgdGhlIHBhY2thZ2luZyBzeXN0ZW0gdG8gZGVmaW5lIHRoZSBhcmNoaXRlY3R1cmUsIEFCSSwgYW5kIHR1bmluZyBvZiBvdXRwdXQgcGFja2FnZXMuIgorVFVORUFCSVtkb2NdID0gIkFuIHVuZGVybHlpbmcgQUJJIHVzZWQgYnkgYSBwYXJ0aWN1bGFyIHR1bmluZyBpbiBhIGdpdmVuIHRvb2xjaGFpbiBsYXllci4gVGhpcyBmZWF0dXJlIGFsbG93cyBwcm92aWRlcnMgdXNpbmcgcHJlYnVpbHQgbGlicmFyaWVzIHRvIGNoZWNrIGNvbXBhdGliaWxpdHkgb2YgYSB0dW5pbmcgYWdhaW5zdCB0aGVpciBzZWxlY3Rpb24gb2YgbGlicmFyaWVzLiIKK1RVTkVBQklfT1ZFUlJJREVbZG9jXSA9ICJJZiBzZXQsIGlnbm9yZXMgVFVORUFCSV9XSElURUxJU1QuIgorVFVORUFCSV9XSElURUxJU1RbZG9jXSA9ICJBIHdoaXRlbGlzdCBvZiBwZXJtaXNzaWJsZSBUVU5FQUJJIHZhbHVlcy4gIElmIHRoZSB2YXJpYWJsZSBpcyBub3Qgc2V0LCBhbGwgdmFsdWVzIGFyZSBhbGxvd2VkLiIKK1RVTkVDT05GTElDVFNbZG9jXSA9ICJMaXN0IG9mIGNvbmZsaWN0aW5nIGZlYXR1cmVzIGZvciBhIGdpdmVuIGZlYXR1cmUuIgorVFVORVZBTElEW2RvY10gPSAiRGVzY3JpcHRpb25zLCBzdG9yZWQgYXMgZmxhZ3MsIG9mIHZhbGlkIHR1bmluZyBmZWF0dXJlcy4iCisKKyNVCisKK1VCT09UX0NPTkZJR1tkb2NdID0gIkNvbmZpZ3VyZXMgdGhlIFVCT09UX01BQ0hJTkUgYW5kIGNhbiBhbHNvIGRlZmluZSBJTUFHRV9GU1RZUEVTIGZvciBpbmRpdmlkdWFsIGNhc2VzLiIKK1VCT09UX0VOVFJZUE9JTlRbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgVS1Cb290IGltYWdlLiIKK1VCT09UX0xPQURBRERSRVNTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBsb2FkIGFkZHJlc3MgZm9yIHRoZSBVLUJvb3QgaW1hZ2UuIgorVUJPT1RfTE9DQUxWRVJTSU9OW2RvY10gPSAiQXBwZW5kcyBhIHN0cmluZyB0byB0aGUgbmFtZSBvZiB0aGUgbG9jYWwgdmVyc2lvbiBvZiB0aGUgVS1Cb290IGltYWdlLiIKK1VCT09UX01BQ0hJTkVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHZhbHVlIHBhc3NlZCBvbiB0aGUgbWFrZSBjb21tYW5kIGxpbmUgd2hlbiBidWlsZGluZyBhIFUtQm9vdCBpbWFnZS4iCitVQk9PVF9NQUtFX1RBUkdFVFtkb2NdID0gIlNwZWNpZmllcyB0aGUgdGFyZ2V0IGNhbGxlZCBpbiB0aGUgTWFrZWZpbGUuIgorVUJPT1RfU1VGRklYW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBnZW5lcmF0ZWQgVS1Cb290IGV4dGVuc2lvbi4iCitVQk9PVF9UQVJHRVRbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHRhcmdldCB1c2VkIGZvciBidWlsZGluZyBVLUJvb3QuIgorVVNFX0RFVkZTW2RvY10gPSAiV2hlbiBidWlsZGluZyBpbWFnZXMsIHNwZWNpZmllcyB0byBwb3B1bGF0ZSBvciBub3QgL2Rldi4gVGhpcyB2YXJpYWJsZSBkZWZhdWx0cyB0byAnMScgKGxlYXZlIGRpcmVjdG9yeSBlbXB0eSwgc3VyZWx5IGJlY2F1c2UgZGV2dG1wZnMgZG8gdGhlIGpvYikuIFNldCBpdCB0byAnMCcgdG8gdXNlIG1ha2VkZXZzIChvciBjb25zaWRlciB1c2luZyBhIGN1c3RvbSBmaWxlIHdpdGggSU1BR0VfREVWSUNFX1RBQkxFUykuIgorVVNFUl9DTEFTU0VTW2RvY10gPSAiTGlzdCBvZiBhZGRpdGlvbmFsIGNsYXNzZXMgdG8gdXNlIHdoZW4gYnVpbGRpbmcgaW1hZ2VzIHRoYXQgZW5hYmxlIGV4dHJhIGZlYXR1cmVzLiIKK1VTRVJBRERfUEFDS0FHRVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSB1c2VyYWRkIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgaW5kaXZpZHVhbCBwYWNrYWdlcyB3aXRoaW4gdGhlIHJlY2lwZSB0aGF0IHJlcXVpcmUgdXNlcnMgYW5kL29yIGdyb3VwcyB0byBiZSBhZGRlZC4iCitVU0VSQUREX1BBUkFNW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgdXNlcmFkZCBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgZm9yIGEgcGFja2FnZSB3aGF0IHBhcmFtZXRlcnMgc2hvdWxkIGJlIHBhc3NlZCB0byB0aGUgdXNlcmFkZCBjb21tYW5kIGlmIHlvdSB3aXNoIHRvIGFkZCBhIHVzZXIgdG8gdGhlIHN5c3RlbSB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZC4iCisKKyNXCisKK1dBUk5fUUFbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHF1YWxpdHkgYXNzdXJhbmNlIGNoZWNrcyB3aG9zZSBmYWlsdXJlcyBhcmUgcmVwb3J0ZWQgYXMgd2FybmluZ3MgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorV09SS0RJUltkb2NdID0gIlRoZSBwYXRobmFtZSBvZiB0aGUgd29ya2luZyBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYnVpbGRzIGEgcmVjaXBlLiBUaGlzIGRpcmVjdG9yeSBpcyBsb2NhdGVkIHdpdGhpbiB0aGUgVE1QRElSIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgYW5kIGNoYW5nZXMgYXMgZGlmZmVyZW50IHBhY2thZ2VzIGFyZSBidWlsdC4iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9sYXllci5jb25mIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbGF5ZXIuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTgwMDE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbGF5ZXIuY29uZgpAQCAtMCwwICsxLDYwIEBACisjIFdlIGhhdmUgYSBjb25mIGFuZCBjbGFzc2VzIGRpcmVjdG9yeSwgYWRkIHRvIEJCUEFUSAorQkJQQVRIIC49ICI6JHtMQVlFUkRJUn0iCisjIFdlIGhhdmUgcmVjaXBlcy0qIGRpcmVjdG9yaWVzLCBhZGQgdG8gQkJGSUxFUworQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYiIKKworQkJGSUxFX0NPTExFQ1RJT05TICs9ICJjb3JlIgorQkJGSUxFX1BBVFRFUk5fY29yZSA9ICJeJHtMQVlFUkRJUn0vIgorQkJGSUxFX1BSSU9SSVRZX2NvcmUgPSAiNSIKKworIyBUaGlzIHNob3VsZCBvbmx5IGJlIGluY3JlbWVudGVkIG9uIHNpZ25pZmljYW50IGNoYW5nZXMgdGhhdCB3aWxsCisjIGNhdXNlIGNvbXBhdGliaWxpdHkgaXNzdWVzIHdpdGggb3RoZXIgbGF5ZXJzCitMQVlFUlZFUlNJT05fY29yZSA9ICI2IgorCitCQkxBWUVSU19MQVlFUklOREVYX05BTUVfY29yZSA9ICJvcGVuZW1iZWRkZWQtY29yZSIKKworIyBTZXQgYSB2YXJpYWJsZSB0byBnZXQgdG8gdGhlIHRvcCBvZiB0aGUgbWV0YWRhdGEgbG9jYXRpb24KK0NPUkVCQVNFID0gJyR7QG9zLnBhdGgubm9ybXBhdGgoIiR7TEFZRVJESVJ9Ly4uLyIpfScKKworIyBvcGtnLXV0aWxzIGlzIGZvciB1cGRhdGUtYWx0bmVybmF0aXZlcyA6KAorU0lHR0VOX0VYQ0xVREVSRUNJUEVTX0FCSVNBRkUgKz0gIiBcCisgIHN5c3Zpbml0LWluaXR0YWIgXAorICBzaGFkb3ctc2VjdXJldHR5IFwKKyAgb3BrZy1hcmNoLWNvbmZpZyBcCisgIG5ldGJhc2UgXAorICBpbml0LWlmdXBkb3duIFwKKyAgY29ubm1hbi1jb25mIFwKKyAgZm9ybWZhY3RvciBcCisgIHhzZXJ2ZXIteGY4Ni1jb25maWcgXAorICBwb2ludGVyY2FsIFwKKyAgcG9pbnRlcmNhbC14aW5wdXQgXAorICBiYXNlLWZpbGVzIFwKKyAga2V5bWFwcyBcCisgIHVkZXYtZXh0cmFjb25mIFwKKyAgcGFja2FnZWdyb3VwLXgxMS14c2VydmVyIFwKKyAgc3lzdGVtZC1zZXJpYWxnZXR0eSBcCisgIGluaXRzY3JpcHRzIFwKKyAgc2hhZG93IFwKKyAgc2hhZG93LXN5c3Jvb3QgXAorICBiYXNlLXBhc3N3ZCBcCisgIG9wa2ctdXRpbHMgXAorIgorCitTSUdHRU5fRVhDTFVERV9TQUZFX1JFQ0lQRV9ERVBTICs9ICIgXAorICBnY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH0tPmdsaWJjIFwKKyAgZ2NjLWNyb3NzLSR7VEFSR0VUX0FSQ0h9LT5tdXNsIFwKKyAgZ2NjLWNyb3NzLSR7VEFSR0VUX0FSQ0h9LT51Y2xpYmMgXAorICBnY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH0tPmxpbnV4LWxpYmMtaGVhZGVycyBcCisgIHBwcC1kaWFsaW4tPnBwcCBcCisgIHJlc29sdmNvbmYtPmJhc2ggXAorICBkb2Nib29rLXhzbC1zdHlsZXNoZWV0cy0+cGVybCBcCisgIGluaXRyYW1mcy1mcmFtZXdvcmstPmJ1c3lib3ggXAorICBpbml0cmFtZnMtZnJhbWV3b3JrLT5zeXN0ZW1kIFwKKyAgaW5pdHJhbWZzLWZyYW1ld29yay0+dWRldiBcCisgIGxpYmVyYXRpb24tZm9udHMtPmZvbnRjb25maWcgXAorICBnbm9tZS1pY29uLXRoZW1lLT5saWJyc3ZnIFwKKyAgZm9udC1hbGlhcy0+Zm9udC11dGlsIFwKKyAgd2VzdG9uLWluaXQtPndlc3RvbiBcCisgIHdlc3Rvbi1pbml0LT5rYmQgXAorIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9saWNlbnNlcy5jb25mIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbGljZW5zZXMuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTE3YzQwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbGljZW5zZXMuY29uZgpAQCAtMCwwICsxLDE4OSBAQAorIyBUaGVzZSBhcmVuJ3QgYWN0dWFsbHkgdXNlZCBhbnl3aGVyZSB0aGF0IEkgY2FuIHRlbGwKKyMgVGhleSBtYXkgYmUgaW4gdGhlIGZ1dHVyZSAob3IgYXJlIHVzZWQgYnkgc29tZW9uZSBlbHNlCisjIEZvciBjb21wbGV0aW9uIHNha2UsIEkndmUgdXBkYXRlZCB0aGVtCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQUFMIEFkb2JlIEFGTC0xLjIgQUZMLTIuMCBBRkwtMi4xIEFGTC0zLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQUdQTC0zLjAgQU5UTFItUEQgQXBhY2hlLTEuMCBBcGFjaGUtMS4xIEFwYWNoZS0yLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQVBMLTEuMCBBUFNMLTEuMCBBUFNMLTEuMSBBUFNMLTEuMiBBUFNMLTIuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJBcnRpc3RpYy0xLjAgQXJ0aXN0aWMtMi4wIEJpdHN0cmVhbVZlcmEgQlNEIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkJTRC0yLUNsYXVzZSBCU0QtMy1DbGF1c2UgQlNELTQtQ2xhdXNlIEJTTC0xLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQ0FUT1NMLTEuMSBDQzAtMS4wIENDLUJZLTEuMCBDQy1CWS0yLjAgQ0MtQlktMi41IgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkNDLUJZLTMuMCBDQy1CWS1OQy0xLjAgQ0MtQlktTkMtMi4wIENDLUJZLU5DLTIuNSIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJDQy1CWS1OQy0zLjAgQ0MtQlktTkMtTkQtMS4wIENDLUJZLU5DLU5ELTIuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJDQy1CWS1OQy1ORC0yLjUgQ0MtQlktTkMtTkQtMy4wIENDLUJZLU5DLVNBLTEuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJDQy1CWS1OQy1TQS0yLjAgQ0MtQlktTkMtU0EtMi41IENDLUJZLU5DLVNBLTMuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJDQy1CWS1ORC0xLjAgQ0MtQlktTkQtMi4wIENDLUJZLU5ELTIuNSBDQy1CWS1ORC0zLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQ0MtQlktU0EtMS4wIENDLUJZLVNBLTIuMCBDQy1CWS1TQS0yLjUgQ0MtQlktU0EtMy4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkNEREwtMS4wIENFQ0lMTC0xLjAgQ0VDSUxMLTIuMCBDRUNJTEwtQiBDRUNJTEwtQyIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJDbEFydGlzdGljIENQQUwtMS4wIENQTC0xLjAgQ1VBLU9QTC0xLjAgRFNTU0wiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiRUNMLTEuMCBFQ0wtMi4wIGVDb3MtMi4wIEVETC0xLjAgRUZMLTEuMCBFRkwtMi4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkVsZnV0aWxzLUV4Y2VwdGlvbiBFbnRlc3NhIEVQTC0xLjAgRXJsUEwtMS4xIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkVVRGF0YWdyaWQgRVVQTC0xLjAgRVVQTC0xLjEgRmFpciBGcmFtZXdvcngtMS4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkZyZWVUeXBlIEdGREwtMS4xIEdGREwtMS4yIEdGREwtMS4zIEdQTC0xLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiR1BMLTIuMCBHUEwtMi4wLXdpdGgtYXV0b2NvbmYtZXhjZXB0aW9uIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkdQTC0yLjAtd2l0aC1jbGFzc3BhdGgtZXhjZXB0aW9uIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkdQTC0yLjAtd2l0aC1mb250LWV4Y2VwdGlvbiIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJHUEwtMi4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJHUEwtMi13aXRoLWJpc29uLWV4Y2VwdGlvbiBHUEwtMy4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkdQTC0zLjAtd2l0aC1hdXRvY29uZi1leGNlcHRpb24iCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiZ1NPQVAtMSBnU09BUC0xLjNiIEhQTkQgSVBBIElQTC0xLjAgSVNDIExHUEwtMi4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkxHUEwtMi4xIExHUEwtMy4wIExpYnBuZyBMUEwtMS4wMiBMUFBMLTEuMCBMUFBMLTEuMSIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJMUFBMLTEuMiBMUFBMLTEuM2MgTWlyT1MgTUlUIE1vdG9zb3RvIE1QTC0xLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiTVBMLTEuMSBNUy1QTCBNUy1STCBNdWx0aWNzIE5BU0EtMS4zIE5hdW1hbiBOQ1NBIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIk5HUEwgTm9raWEgTlBPU0wtMy4wIE5UUCBPQVNJUyBPQ0xDLTIuMCBPRGJMLTEuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJPRkwtMS4xIE9HVFNMIE9MREFQLTIuOCBPcGVuU1NMIE9TTC0xLjAgT1NMLTIuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJPU0wtMy4wIFBEIFBIUC0zLjAgUG9zdGdyZVNRTCBQcm9wcmlldGFyeSIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJQeXRob24tMi4wIFFQTC0xLjAgUkhlQ29zLTEgUkhlQ29zLTEuMSBSUEwtMS41IgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIlJQU0wtMS4wIFJTQ1BMIFJ1YnkgU0FYLVBEIFNHSS0xIFNpbXBsZS0yLjAgU2xlZXB5Y2F0IgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIlNQTC0xLjAgU3VnYXJDUk0tMSBTdWdhckNSTS0xLjEuMyBVQ0IgVlNMLTEuMCBXM0MiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiV2F0Y29tLTEuMCBXWHdpbmRvd3MgWEZyZWU4Ni0xLjAgWEZyZWU4Ni0xLjEgWG5ldCBYU0wgWVBMLTEuMSIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJaaW1icmEtMS4zIFpsaWIgWlBMLTEuMSBaUEwtMi4wIFpQTC0yLjEiCisKKyMgU3RhbmRhcmRzIGFyZSBncmVhdCEgRXZlcnlvbmUgaGFzIHRoZWlyIG93bi4gSW4gYW4gZWZmb3J0IHRvIHN0YW5kYXJkaXplIGxpY2Vuc2luZworIyBuYW1lcywgY29tbW9uLWxpY2Vuc2VzIHdpbGwgdXNlIHRoZSBTUERYIHN0YW5kYXJkIGxpY2Vuc2UgbmFtZXMuIEluIG9yZGVyIHRvIG5vdAorIyBicmVhayB0aGUgbm9uLXN0YW5kYXJkaXplZCBsaWNlbnNlIG5hbWVzIHRoYXQgd2UgZmluZCBpbiBMSUNFTlNFLCB3ZSdsbCBzZXQKKyMgdXAgYSBidW5jaCBvZiBWYXJGbGFncyB0byBhY2NvbW9kYXRlIG5vbi1TUERYIGxpY2Vuc2UgbmFtZXMuCisjCisjIFdlIHNob3VsZCByZWFsbHkgZGlzY3VzcyBzdGFuZGFyZGl6aW5nIHRoaXMgZmllbGQsIGJ1dCB0aGF0J3MgYSBsb25nZXIgdGVybSBnb2FsLgorIyBGb3Igbm93LCB3ZSBjYW4gZG8gdGhpcyBhbmQgaXQgc2hvdWxkIGdyYWIgdGhlIG1vc3QgY29tbW9uIExJQ0VOU0UgbmFtaW5nIHZhcmlhdGlvbnMuCisjCisjIFdlIHNob3VsZCBORVZFUiBoYXZlIGEgR1BML0xHUEwgd2l0aG91dCBhIHZlcnNpb24hISEhCisjIEFueSBtYXBwaW5nIHRvIE1QTC9MR1BML0dQTCBzaG91bGQgYmUgZml4ZWQKKworIyBBR1BMIHZhcmlhdGlvbnMKK1NQRFhMSUNFTlNFTUFQW0FHUEwtM10gPSAiQUdQTC0zLjAiCitTUERYTElDRU5TRU1BUFtBR1BMdjNdID0gIkFHUEwtMy4wIgorU1BEWExJQ0VOU0VNQVBbQUdQTHYzLjBdID0gIkFHUEwtMy4wIgorCisjIEdQTCB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtHUEwtMV0gPSAiR1BMLTEuMCIKK1NQRFhMSUNFTlNFTUFQW0dQTHYxXSA9ICJHUEwtMS4wIgorU1BEWExJQ0VOU0VNQVBbR1BMdjEuMF0gPSAiR1BMLTEuMCIKK1NQRFhMSUNFTlNFTUFQW0dQTC0yXSA9ICJHUEwtMi4wIgorU1BEWExJQ0VOU0VNQVBbR1BMdjJdID0gIkdQTC0yLjAiCitTUERYTElDRU5TRU1BUFtHUEx2Mi4wXSA9ICJHUEwtMi4wIgorU1BEWExJQ0VOU0VNQVBbR1BMLTNdID0gIkdQTC0zLjAiCitTUERYTElDRU5TRU1BUFtHUEx2M10gPSAiR1BMLTMuMCIKK1NQRFhMSUNFTlNFTUFQW0dQTHYzLjBdID0gIkdQTC0zLjAiCisKKyNMR1BMIHZhcmlhdGlvbnMKK1NQRFhMSUNFTlNFTUFQW0xHUEx2Ml0gPSAiTEdQTC0yLjAiCitTUERYTElDRU5TRU1BUFtMR1BMdjIuMF0gPSAiTEdQTC0yLjAiCitTUERYTElDRU5TRU1BUFtMR1BMMi4xXSA9ICJMR1BMLTIuMSIKK1NQRFhMSUNFTlNFTUFQW0xHUEx2Mi4xXSA9ICJMR1BMLTIuMSIKK1NQRFhMSUNFTlNFTUFQW0xHUEx2M10gPSAiTEdQTC0zLjAiCisKKyNNUEwgdmFyaWF0aW9ucworU1BEWExJQ0VOU0VNQVBbTVBMLTFdID0gIk1QTC0xLjAiCitTUERYTElDRU5TRU1BUFtNUEx2MV0gPSAiTVBMLTEuMCIKK1NQRFhMSUNFTlNFTUFQW01QTHYxLjFdID0gIk1QTC0xLjEiCitTUERYTElDRU5TRU1BUFtNUEx2Ml0gPSAiTVBMLTIuMCIKKworI01JVCB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtNSVQtWF0gPSAiTUlUIgorU1BEWExJQ0VOU0VNQVBbTUlULXN0eWxlXSA9ICJNSVQiCisKKyNPcGVuc3NsIHZhcmlhdGlvbnMKK1NQRFhMSUNFTlNFTUFQW29wZW5zc2xdID0gIk9wZW5TU0wiCisKKyNQeXRob24gdmFyaWF0aW9ucworU1BEWExJQ0VOU0VNQVBbUFNGXSA9ICJQeXRob24tMi4wIgorU1BEWExJQ0VOU0VNQVBbUFNGdjJdID0gIlB5dGhvbi0yLjAiCitTUERYTElDRU5TRU1BUFtQeXRob24tMl0gPSAiUHl0aG9uLTIuMCIKKworI0FwYWNoZSB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtBcGFjaGV2Ml0gPSAiQXBhY2hlLTIuMCIKK1NQRFhMSUNFTlNFTUFQW0FwYWNoZS0yXSA9ICJBcGFjaGUtMi4wIgorCisjQXJ0aXN0aWMgdmFyaWF0aW9ucworU1BEWExJQ0VOU0VNQVBbQXJ0aXN0aWN2MV0gPSAiQXJ0aXN0aWMtMS4wIgorU1BEWExJQ0VOU0VNQVBbQXJ0aXN0aWMtMV0gPSAiQXJ0aXN0aWMtMS4wIgorCisjQWNhZGVtaWMgdmFyaWF0aW9ucworU1BEWExJQ0VOU0VNQVBbQUZMLTJdID0gIkFGTC0yLjAiCitTUERYTElDRU5TRU1BUFtBRkwtMV0gPSAiQUZMLTEuMiIKK1NQRFhMSUNFTlNFTUFQW0FGTHYyXSA9ICJBRkwtMi4wIgorU1BEWExJQ0VOU0VNQVBbQUZMdjFdID0gIkFGTC0xLjIiCisKKyNPdGhlciB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtFUEx2MS4wXSA9ICJFUEwtMS4wIgorCisjU2lsaWNvbiBHcmFwaGljcyB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtTR0l2MV0gPSAiU0dJLTEiCisKKyMgQWRkaXRpb25hbCBsaWNlbnNlIGRpcmVjdG9yaWVzLiBBZGQgeW91ciBjdXN0b20gbGljZW5zZXMgZGlyZWN0b3JpZXMgdGhpcyBwYXRoLgorIyBMSUNFTlNFX1BBVEggKz0gIiR7Q09SRUJBU0V9L2N1c3RvbS1saWNlbnNlcyIKKworIyBTZXQgaWYgeW91IHdhbnQgdGhlIGxpY2Vuc2UubWFuaWZlc3QgY29waWVkIHRvIHRoZSBpbWFnZQorI0NPUFlfTElDX01BTklGRVNUID0gIjEiCisKKyMgSWYgeW91IHdhbnQgdGhlIHBrZyBsaWNlbnNlcyBjb3BpZWQgb3ZlciBhcyB3ZWxsIHlvdSBtdXN0IHNldAorIyBib3RoIENPUFlfTElDX01BTklGRVNUIGFuZCBDT1BZX0xJQ19ESVJTCisjQ09QWV9MSUNfRElSUyA9ICIxIgorCisjIyBTUERYIHRlbXBvcmFyeSBkaXJlY3RvcnkKK1NQRFhfVEVNUF9ESVIgPSAiJHtXT1JLRElSfS9zcGR4X3RlbXAiCitTUERYX01BTklGRVNUX0RJUiA9ICIvaG9tZS95b2N0by9mb3Nzb2xvZ3lfc2NhbnMiCisKKyMjIFNQRFggRm9ybWF0IGluZm8KK1NQRFhfVkVSU0lPTiA9ICJTUERYLTEuMSIKK0RBVEFfTElDRU5TRSA9ICJDQzAtMS4wIgorCisjIyBGb3Nzb2xvZ3kgc2NhbiBpbmZvcm1hdGlvbgorIyBZb3UgY2FuIHNldCBvcHRpb24gdG8gY29udHJvbCBpZiB0aGUgY29weXJpZ2h0IGluZm9ybWF0aW9uIHdpbGwgYmUgc2tpcHBlZAorIyBkdXJpbmcgdGhlIGlkZW50aWZpY2F0aW9uIHByb2Nlc3MuCisjCisjIEl0IGlzIGRlZmluZWQgYXMgW0ZPU1NfQ09QWVJJR0hUXSBpbiAuL21ldGEvY29uZi9saWNlbnNlcy5jb25mLgorIyBGT1NTX0NPUFlSSUdIVCA9ICJ0cnVlIgorIyAgIE5PIGNvcHlyaWdodCB3aWxsIGJlIHByb2Nlc3NlZC4gVGhhdCBtZWFucyBvbmx5IGxpY2Vuc2UgaW5mb3JtYXRpb24gd2lsbCBiZQorIyAgIGlkZW50aWZpZWQgYW5kIG91dHB1dCB0byBTUERYIGZpbGUKKyMgRk9TU19DT1BZUklHSFQgPSAiZmFsc2UiCisjICAgQ29weXJpZ2h0IHdpbGwgYmUgaWRlbnRpZmllZCBhbmQgb3V0cHV0IHRvIFNQRFggZmlsZSBhbG9uZyB3aXRoIGxpY2Vuc2UKKyMgICBpbmZvcm1hdGlvbi4gVGhlIHByb2Nlc3Mgd2lsbCB0YWtlIG1vcmUgdGltZSB0aGFuIG5vdCBwcm9jZXNzaW5nIGNvcHlyaWdodAorIyAgIGluZm9ybWF0aW9uLgorIworCitGT1NTX05PX0NPUFlSSUdIVCA9ICJ0cnVlIgorCisjIEEgb3B0aW9uIGRlZmluZWQgYXNbRk9TU19SRUNVUlNJVkVfVU5QQUNLXSBpbiAuL21ldGEvY29uZi9saWNlbnNlcy5jb25mLiBpcworIyB1c2VkIHRvIGNvbnRyb2wgaWYgRk9TU29sb2d5IHNlcnZlciBuZWVkIHJlY3Vyc2l2ZWx5IHVucGFjayB0YXIuZ3ogZmlsZSB3aGljaAorIyBpcyBzZW50IGZyb20gZG9fc3BkeCB0YXNrLgorIworIyBGT1NTX1JFQ1VSU0lWRV9VTlBBQ0sgPSAiZmFsc2UiOgorIyAgICBGT1NTb2xvZ3kgc2VydmVyIGRvZXMgTk9UIHJlY3Vyc2l2ZWx5IHVucGFjay4gSW4gdGhlIGN1cnJlbnQgcmVsZWFzZSwgdGhpcworIyAgICBpcyB0aGUgZGVmYXVsdCBjaG9pY2UgYmVjYXVzZSByZWN1cnNpdmVseSB1bnBhY2sgd2lsbCBub3QgbmVjZXNzYXJpbHkgYnJlYWsKKyMgICAgZG93biBvcmlnaW5hbCBjb21wcmVzc2VkIGZpbGVzLgorIyBGT1NTX1JFQ1VSU0lWRV9VTlBBQ0sgPSAidHJ1ZSI6CisjICAgIEZPU1NvbG9neSBzZXJ2ZXIgcmVjdXJzaXZlbHkgdW5wYWNrIGNvbXBvbmVudHMuCisjCisKK0ZPU1NfUkVDVVJTSVZFX1VOUEFDSyA9ICJmYWxzZSIKKworIyBBbiBvcHRpb24gZGVmaW5lZCBhcyBbRk9TU19GVUxMX1NQRFhdIGluIC4vbWV0YS9jb25mL2xpY2Vuc2VzLmNvbmYgaXMgdXNlZCB0bworIyBjb250cm9sIHdoYXQga2luZCBvZiBTUERYIG91dHB1dCB0byBnZXQgZnJvbSB0aGUgRk9TU29sb2d5IHNlcnZlci4KKyMKKyMgRk9TU19GVUxMX1NQRFggPSAidHJ1ZSI6CisjICAgVGVsbCBGT1NTb2xvZ3kgc2VydmVyIHRvIHJldHVybiBmdWxsIFNQRFggb3V0cHV0LCBsaWtlIGlmIHRoZSBwcm9ncmFtIHdhcworIyAgIHJ1biBmcm9tIHRoZSBjb21tYW5kIGxpbmUuIFRoaXMgaXMgbmVlZGVkIGluIG9yZGVyIHRvIGdldCBsaWNlbnNlIHJlZnMgZm9yCisjICAgdGhlIGZ1bGwgcGFja2FnZSByYXRoZXIgdGhhbiBpbmRpdmlkdWFsIGZpbGVzIG9ubHkuCisjCisjIEZPU1NfRlVMTF9TUERYID0gImZhbHNlIjoKKyMgICBUZWxsIEZPU1NvbG9neSB0byBvbmx5IHByb2Nlc3MgbGljZW5zZSBpbmZvcm1hdGlvbiBmb3IgZmlsZXMuIEFsbCBwYWNrYWdlCisjICAgbGljZW5zZSB0YWdzIGluIHRoZSByZXBvcnQgd2lsbCBiZSAiTk9BU1NFUlRJT04iCisjCisKK0ZPU1NfRlVMTF9TUERYID0gInRydWUiCisKKyMgRk9TU29sb2d5U1BEWCBpbnN0YW5jZSBzZXJ2ZXIuIGh0dHA6Ly9sb2NhbGhvc3QvcmVwbyBpcyB0aGUgZGVmYXVsdAorIyBpbnN0YWxsYXRpb24gbG9jYXRpb24gZm9yIEZPU1NvbG9neS4KKyMKKyMgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gRk9TU29sb2d5U1BEWCBjb21tYW5kbGluZToKKyMgICBodHRwczovL2dpdGh1Yi5jb20vc3BkeC10b29scy9mb3Nzb2xvZ3ktc3BkeC93aWtpL0Zvc3NvbG9neS1TUERYLVdlYi1BUEkKKyMKKworRk9TU19CQVNFX1VSTCA9ICJodHRwOi8vbG9jYWxob3N0L3JlcG8vP21vZD1zcGR4X2xpY2Vuc2Vfb25jZSIKK0ZPU1NfU0VSVkVSID0gIiR7Rk9TU19CQVNFX1VSTH0mZnVsbFNQRFhGbGFnPSR7Rk9TU19GVUxMX1NQRFh9Jm5vQ29weXJpZ2h0PSR7Rk9TU19OT19DT1BZUklHSFR9JnJlY3Vyc2l2ZVVucGFjaz0ke0ZPU1NfUkVDVVJTSVZFX1VOUEFDS30iCisKK0ZPU1NfV0dFVF9GTEFHUyA9ICItcU8gLSAtLW5vLWNoZWNrLWNlcnRpZmljYXRlIC0tdGltZW91dD0wIgorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUtc2RrL2k1ODYuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUtc2RrL2k1ODYuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWFjY2U3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS1zZGsvaTU4Ni5jb25mCkBAIC0wLDAgKzEsMyBAQAorU0RLX0FSQ0ggPSAiaTU4NiIKK1NES19DQ19BUkNIID0gIi1tYXJjaD1pNTg2IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lLXNkay9pNjg2LmNvbmYgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lLXNkay9pNjg2LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZkYjQ2MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUtc2RrL2k2ODYuY29uZgpAQCAtMCwwICsxLDIgQEAKK1NES19BUkNIID0gImk2ODYiCitTREtfQ0NfQVJDSCA9ICItbWFyY2g9aTY4NiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUtc2RrL3g4Nl82NC5jb25mIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS1zZGsveDg2XzY0LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEyZDY3YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUtc2RrL3g4Nl82NC5jb25mCkBAIC0wLDAgKzEgQEAKK1NES19BUkNIID0gIng4Nl82NCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9SRUFETUUgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NjEzMGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvUkVBRE1FCkBAIC0wLDAgKzEsMTAwIEBACisyMDEyLzAzLzMwIC0gTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorIC0gSW5pdGlhbCBSZXZpc2lvbgorCisKK0ludHJvZHVjdGlvbgorPT09PT09PT09PT09CitUaGUgaW5kaXZpZHVhbCBDUFUsIGFuZCBBQkkgdHVuaW5ncyBhcmUgY29udGFpbmVkIGluIHRoaXMgZGlyZWN0b3J5LiAgQQorbnVtYmVyIG9mIGxvY2FsIGFuZCBnbG9iYWwgdmFyaWFibGVzIGFyZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHdheSB0aGUKK3R1bmluZ3MgYXJlIHNldHVwIGFuZCBob3cgdGhleSB3b3JrIHRvZ2V0aGVyIHRvIHNwZWNpZnkgYW4gb3B0aW1pemVkCitjb25maWd1cmF0aW9uLgorCitUaGUgZm9sbG93aW5nIGlzIGJyaWVmIHN1bW1hcnkgb2YgdGhlIGdlbmVyaWMgY29tcG9uZW50cyB0aGF0IGFyZSB1c2VkCitpbiB0aGVzZSB0dW5pbmdzLgorCitBVkFJTFRVTkVTIC0gVGhpcyBpcyBhIGxpc3Qgb2YgYWxsIG9mIHRoZSB0dW5pbmcgZGVmaW5pdGlvbnMgY3VycmVudGx5CithdmFpbGFibGUgaW4gdGhlIHN5c3RlbS4gIE5vdCBhbGwgdHVuZXMgaW4gdGhpcyBsaXN0IG1heSBiZSBjb21wYXRpYmxlCit3aXRoIHRoZSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24sIG9yIGVhY2ggb3RoZXIgaW4gYSBtdWx0aWxpYgorY29uZmlndXJhdGlvbi4gIEVhY2ggdHVuaW5nIGZpbGUgY2FuIGFkZCB0byB0aGlzIGxpc3QgdXNpbmcgIis9IiwgYnV0CitzaG91bGQgbmV2ZXIgcmVwbGFjZSB0aGUgbGlzdCB1c2luZyAiPSIuCisKK0RFRkFVTFRUVU5FIC0gVGhpcyBzcGVjaWZpZXMgdGhlIHR1bmUgdG8gdXNlIGZvciBhIHBhcnRpY3VsYXIgYnVpbGQuCitFYWNoIHR1bmUgc2hvdWxkIHNwZWNpZnkgYSByZWFzb25hYmxlIGRlZmF1bHQsIHdoaWNoIGNhbiBiZSBvdmVycmlkZW4gYnkKK2EgbWFjaGluZSBvciBtdWx0aWxpYiBjb25maWd1cmF0aW9uLiAgVGhlIHNwZWNpZmllZCB0dW5lIG11c3QgYmUgbGlzdGVkCitpbiB0aGUgQVZBSUxUVU5FUy4KKworVFVORVZBTElEW2ZlYXR1cmVdIC0gVGhlIDxmZWF0dXJlPiBpcyBkZWZpbmVkIHdpdGggYSBodW1hbiByZWFkYWJsZQorZXhwbGFuYXRpb24gZm9yIHdoYXQgaXQgZG9lcy4gIEFsbCBhcmNoaXRlY3R1cmFsLCBjcHUsIGFiaSwgZXRjIHR1bmluZworZmVhdHVyZXMgbXVzdCBiZSBkZWZpbmVkIHVzaW5nIFRVTkVWQUxJRC4KKworVFVORUNPTkZMSUNUU1tmZWF0dXJlXSAtIEEgbGlzdCBvZiBmZWF0dXJlcyB3aGljaCBjb25mbGljdCB3aXRoIDxmZWF0dXJlPi4KK05ldyBzYW5pdHkgY2hlY2tzIHdpbGwgdHJ5IHRvIHJlamVjdCBjb21iaW5hdGlvbnMgaW4gd2hpY2ggYSBzaW5nbGUKK3R1bmluZyBlbmRzIHVwIHdpdGggZmVhdHVyZXMgd2hpY2ggY29uZmxpY3Qgd2l0aCBlYWNoIG90aGVyLgorCitUVU5FX0ZFQVRVUkVTIC0gVGhpcyBpcyBhdXRvbWF0aWNhbGx5IGRlZmluZWQgYXMgVFVORV9GRUFUVVJFU190dW5lLTx0dW5lPi4KK1NlZSBUVU5FX0ZFQVRVUkVTX3R1bmUtPHR1bmU+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtPHR1bmU+IC0gU3BlY2lmeSB0aGUgZmVhdHVyZXMgdXNlZCB0byBkZXNjcmliZSBhCitzcGVjaWZpYyB0dW5lLiAgVGhpcyBpcyBhIGxpc3Qgb2YgZmVhdHVyZXMgdGhhdCBhIHR1bmUgc3VwcG9ydCwgZWFjaAorZmVhdHVyZSBtdXN0IGJlIGluIHRoZSBUVU5FVkFMSUQgbGlzdC4gIE5vdGU6IHRoZSB0dW5lIGFuZCBhIGdpdmVuCitmZWF0dXJlIG5hbWUgbWF5IGJlIHRoZSBzYW1lLCBidXQgdGhleSBoYXZlIGRpZmZlcmVudCBwdXJwb3Nlcy4gIE9ubHkKK2ZlYXR1cmVzIG1heSBiZSB1c2VkIHRvIGNoYW5nZSBiZWhhdmlvciwgd2hpbGUgdHVuZXMgYXJlIHVzZWQgdG8KK2Rlc2NyaWJlIGFuIG92ZXJhbGwgc2V0IG9mIGZlYXR1cmVzLgorCitBQklFWFRFTlNJT04gLSBBbiBBQkkgZXh0ZW5zaW9uIG1heSBiZSBzcGVjaWZpZWQgYnkgYSBzcGVjaWZpYyBmZWF0dXJlCitvciBvdGhlciB0dW5pbmcgc2V0dGluZywgc3VjaCBhcyBUQVJHRVRfRlBVLiAgQW55IEFCSSBleHRlbnNpb25zIGVpdGhlcgorbmVlZCB0byBiZSBkZWZpbmVkIGluIHRoZSBhcmNoaXRlY3R1cmVzIGJhc2UgYXJjaCBmaWxlLCBpLmUuCitBQklFWFRFTlNJT04gPSAiZWFiaSIgaW4gdGhlIGFybSBjYXNlLCBvciBhcHBlbmRlZCB0byBpbiBzcGVjaWZpYyB0dW5lCitmaWxlcyB3aXRoIGEgIi49Ii4gIFNwYWNlcyBhcmUgbm90IGFsbG93ZWQgaW4gdGhpcyB2YXJpYWJsZS4KKworVFVORV9DQ0FSR1MgLSBTZXR1cCB0aGUgY2ZsYWdzIGJhc2VkIG9uIHRoZSBUVU5FX0ZFQVRVUkVTIHNldHRpbmdzLgorVGhlc2Ugc2hvdWxkIGJlIGFkZGl0aXZlIHdoZW4gZGVmaW5lZCB1c2luZyAiKz0iLiAgQWxsIGl0ZW1zIGluIHRoaXMKK2xpc3Qgc2hvdWxkIGJlIGR5bmFtaWMhIGkuZS4KKyR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImZlYXR1cmUiLCAiY2ZsYWciLCAiIWNmbGFnIiwgZCl9CisKK1RVTkVfQVJDSCAtIFRoZSBHTlUgY2Fub25pY2FsIGFyY2ggZm9yIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlLiAgaS5lLgorYXJtLCBhcm1lYiwgbWlwcywgbWlwczY0LCBldGMuICBUaGlzIHZhbHVlIGlzIHVzZWQgYnkgYml0YmFrZSB0byBzZXR1cAorY29uZmlndXJlLiBUVU5FX0FSQ0ggZGVmaW5pdGlvbnMgYXJlIHNwZWNpZmljIHRvIGEgZ2l2ZW4gYXJjaGl0ZWN0dXJlLgorVGhleSBtYXkgYmUgYSBzaW5nbGUgc3RhdGljIGRlZmluaXRpb24sIG9yIG1heSBiZSBkeW5hbWljYWxseSBhZGp1c3RlZC4KK1NlZSBlYWNoIGFyY2hpdGVjdHVyZSdzIFJFQURNRSBmb3IgZGV0YWlscyBmb3IgdGhhdCBDUFUgZmFtaWx5LgorCitUVU5FX1BLR0FSQ0ggLSBUaGUgcGFja2FnZSBhcmNoaXRlY3R1cmUgdXNlZCBieSB0aGUgcGFja2FnaW5nIHN5c3RlbXMgdG8KK2RlZmluZSB0aGUgYXJjaGl0ZWN0dXJlLCBhYmkgYW5kIHR1bmluZyBvZiBhIHBhcnRpY3VsYXIgcGFja2FnZS4KK1NpbWlsYXJseSB0byBUVU5FX0FSQ0gsIHRoZSBkZWZpbml0aW9uIG9mIFRVTkVfUEtHQVJDSCBpcyBzcGVjaWZpYyB0bworZWFjaCBhcmNoaXRlY3R1cmUuIFNlZSBlYWNoIGFyY2hpdGVjdHVyZXMgUkVBRE1FIGZvciBkZXRhaWxzIGZvciB0aGF0CitDUFUgZmFtaWx5LgorCitQQUNLQUdFX0VYVFJBX0FSQ0hTIC0gTGlzdHMgYWxsIHJ1bnRpbWUgY29tcGF0aWJsZSBwYWNrYWdlCithcmNoaXRlY3R1cmVzLiAgQnkgZGVmYXVsdCB0aGlzIGlzIGVxdWFsIHRvCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtPHR1bmU+LiAgSWYgYW4gYXJjaGl0ZWN0dXJlIGRldmlhdGVzIGZyb20gdGhlCitkZWZhdWx0IGl0IHdpbGwgYmUgbGlzdGVkIGluIHRoZSBhcmNoaXRlY3R1cmUgUkVBRE1FLgorCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtPHR1bmU+IC0gTGlzdCBhbGwgb2YgdGhlIHBhY2thZ2UgYXJjaGl0ZWN0dXJlcwordGhhdCBhcmUgY29tcGF0aWJsZSB3aXRoIHRoaXMgc3BlY2lmaWMgdHVuZS4gIFRoZSBwYWNrYWdlIGFyY2ggb2YgdGhpcwordHVuZSBtdXN0IGJlIGluIHRoZSBsaXN0LgorCitUQVJHRVRfRlBVIC0gVGhlIEZQVSBzZXR0aW5nIGZvciBhIGdpdmVuIHR1bmUsIGhhcmQgKGdlbmVyYXRlIGZsb2F0aW5nCitwb2ludCBpbnN0cnVjdGlvbnMpLCBzb2Z0IChnZW5lcmF0ZSBpbnRlcm5hbCBnY2MgY2FsbHMpLCAib3RoZXIiCithcmNoaXRlY3R1cmUgc3BlY2lmaWMgZmxvYXRpbmcgcG9pbnQuICBUaGlzIGlzIHN5bmNocm9uaXplZCB3aXRoIHRoZQorY29tcGlsZXIgYW5kIG90aGVyIHRvb2xjaGFpbiBpdGVtcy4gIFRoaXMgc2hvdWxkIGJlIGR5bmFtaWNhbGx5Citjb25maWd1cmVkIGluIHRoZSBzYW1lIHdheSB0aGF0IFRVTkVfQ0NBUkdTIGlzLgorCitCQVNFX0xJQl90dW5lLTx0dW5lPiAtIFRoZSAiL2xpYiIgbG9jYXRpb24gZm9yIGEgc3BlY2lmaWMgQUJJLiAgVGhpcyBpcwordXNlZCBpbiBhIG11bHRpbGliIGNvbmZpZ3VyYXRpb24gdG8gcGxhY2UgdGhlIGxpYnJhcmllcyBpbiB0aGUgY29ycmVjdCwKK25vbi1jb25mbGljdGluZyBsb2NhdGlvbnMuCisKKworQmVzdCBQcmFjdGljZQorPT09PT09PT09PT09PQorVGhlIHR1bmUgaW5mcmFzdHJ1Y3R1cmUgaXMgZGVzaWduZWQgdG8gYmUgaGllcmFyY2hpY2FsLiBXaGVuIHdyaXRpbmcgYQorbmV3IHR1bmUgZmlsZSBmb3IgYSAiZmFzdC1mb3J3YXJkIiBDUFUgYXJjaGl0ZWN0dXJlIChvbmUgdGhhdCBzdXBwb3J0cworZXZlcnl0aGluZyBmcm9tIGEgcHJldmlvdXMgZ2VuZXJhdGlvbiksIGl0IGlzIHJlY29tbWVuZGVkIHRvIHJlcXVpcmUgdGhlCitwcmV2aW91cyBnZW5lcmF0aW9uIHR1bmUgZmlsZSBhbmQgc3BlY2lmeSBQQUNLQUdFX0VYVFJBX0FSQ0hTIHVzaW5nIHRoZQorcHJldmlvdXMgZ2VuZXJhdGlvbidzIG92ZXJyaWRlIGFuZCBhcHBlbmRpbmcgdGhlIG5ldyB0dW5lLiBOb3RlIHRoYXQKK29ubHkgb25lIHByZXZpb3VzIHR1bmUgZmlsZSBzaG91bGQgYmUgaW5jbHVkZWQgdG8gYXZvaWQgbXV0aXBsZSBpbmNsdWRlcworb2YgdGhlIGJhc2UgYXJjaCB3aGljaCBjb3VsZCBsZWFkIHRvIGEgYnJva2VuIGNvbmZpZ3VyYXRpb24gZHVlIHRvCittdWx0aXBsZSBwcmVwZW5kIGFuZCBhcHBlbmQgYXNzaWdubWVudHMuCisKK0ZvciBleGFtcGxlLCBmb3IgeDg2LCB0aGVyZSBpcyBhIGNvbW1vbiB4ODYvYXJjaC14ODYuaW5jIHdoaWNoIGlzCitpbmNsdWRlZCBpbiB0aGUgYmFzZSBpNTg2IHR1bmUgZmlsZS4gVGhlIGNvcmUyIHR1bmUgYnVpbGRzCitvbiB0aGF0LCBhbmQgY29yZWk3IGJ1aWxkcyBvbiBjb3JlMi4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vUkVBRE1FIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiZWI3NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vUkVBRE1FCkBAIC0wLDAgKzEsNDAgQEAKKzIwMTIvMDMvMzAgLSBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisgLSBJbml0aWFsIFJldmlzaW9uCisKK1RoZSBBUk0gYXJjaGl0ZWN0dXJlIGRlZmluaXRpb25zIGFyZSBzcGxpdCBhbW9uZyBhIG51bWJlciBvZiBmaWxlcy4KK1RoZSBwcmltYXJ5IGRlZmluaXRpb25zIGZvciB0aGUgdmFyaWFibGVzIGFyZSBoYW5kbGVkIGJ5IHRoZSBjb3JlCithcmNoLWFybS5pbmMgZmlsZS4KKworVFVORV9BUkNIIGlzIHNldCB0byBlaXRoZXIgImFybSIgb3IgImFybWViIiBkZXBlbmRpbmcgb24gdGhlIHZhbHVlCitvZiB0aGUgZXhpc3RlbmNlIG9mIHRoZSAiYmlnZW5kaWFuIiBmZWF0dXJlIGluIGEgZ2l2ZW4gdHVuZS4KKworQSBzbWFsbCBzZXQgb2YgQVJNIHNwZWNpZmljIHZhcmlhYmxlcyBoYXZlIGJlZW4gZGVmaW5lZCB0byBhbGxvdyAKK1RVTkVfUEtHQVJDSCB0byBiZSBhdXRvbWF0aWNhbGx5IGRlZmluZWQuICBPcHRpbWl6ZWQgdHVuaW5ncyBtdXN0IE5PVCAKK2NoYW5nZSB0aGUgZGVmaW5pdG9uIG9mIFRVTkVfUEtHQVJDSC4gIFRVTkVfUEtHQUNIX3R1bmUtPHR1bmU+IHdpbGwgYmUgCitpZ25vcmVkLiAgVGhlIGZvcm1hdCBvZiB0aGUgcGFja2FnZSBhcmNoIGlzIGVuZm9yY2VkIGJ5IHRoZSBUVU5FX1BLR0FSQ0gKK2RlZmF1bHQuICBUaGUgZm9ybWF0IG11c3QgYmUgb2YgdGhlIGZvcm06Cis8YXJtdmVyc2lvbj5bdF1bZV1baGZdW2JdWy12ZnBdWy1uZW9uXQorCitUVU5FX1BLR0FSQ0ggaXMgZGVmaW5lZCBhczoKKyR7QVJNUEtHQVJDSH0ke0FSTVBLR1NGWF9USFVNQn0ke0FSTVBLR1NGWF9EU1B9JHtBUk1QS0dTRlhfRUFCSX0ke0FSTVBLR1NGWF9FTkRJQU59JHtBUk1QS0dTRlhfRlBVfQorCitBUk1QS0dBUkNIIC0gVGhpcyBpcyB0aGUgY29yZSBwYWNrYWdlIGFyY2ggY29tcG9uZW50IHNwZWNpZmllZCBieSBlYWNoIAordHVuaW5nLiAgVGhpcyBpcyB0aGUgcHJpbWFyeSBpZGVudGlmaWVyIG9mIGEgdHVuaW5nLiAgVXN1YWwgdmFsdWVzIGFyZToKK2FybSwgYXJtdjQsIGFybXY1LCBhcm12NiwgYXJtdjdhLCBldGMuCisKK0FSTVBLR1NGWF9USFVNQiAtIFRoaXMgaXMgdGhlIHRodW1iIHNwZWNpZmljIHN1ZmZpeC4gIEN1cmVudGx5IGl0IGlzIAorZGVmaW5lZCBpbiBmZWF0dXJlLWFybS10aHVtYi5pbmMuCisKK0FSTVBLR1NGWF9EU1AgLSBUaGlzIGlzIHRoZSBEU1Agc3BlY2lmaWMgc3VmZml4LiAgQ3VycmVudGx5IHRoaXMgaXMgc2V0IAordG8gJ2UnIHdoZW4gb24gYXJtdjUgYW5kIHRoZSBkc3AgZmVhdHVyZSBpcyBlbmFibGVkLgorCitBUk1QS0dTRlhfRUFCSSAtIFRoaXMgaXMgdGhlIGVhYmkgc3BlY2lmaWMgc3VmZml4LiAgVGhlcmUgYXJlIGN1cnJlbnRseSAKK3R3byBkZWZpbmVkIEFCSXMgc3BlY2lmaWNlZCwgc3RhbmRhcmQgRUFCSSBhbmQgSGFyZCBGbG9hdCAoVkZQKSBFQUJJLiAgCitXaGVuIHRoZSBjYWxsY29udmVudGlvbi1oYXJkIGlzIGVuYWJsZWQsICJoZiIgaXMgc3BlY2lmaWVkLCBvdGhlcndpc2UgaXQgCitpcyBibGFuay4KKworQVJNUEtHU0ZYX0VORElBTiAtIFRoaXMgaXMgdGhlIGVuZGlhbiBzcGVjaWZpYyBzdWZmaXguICBJdCBpcyBkZWZpbmVkIGluIAordGhlIGNvcmUgYXJjaC1hcm0uaW5jIGZpbGUuCisKK0FSTVBLR1NGWF9GUFUgLSBUaGlzIGlzIHRoZSBGUFUgc3BlY2lmaWMgc3VmZml4LiAgVGhlIHN1ZmZpeCBpbmRpY2F0ZXMgCitzcGVjaWZpYyBGUFUgb3B0aW1pemF0aW9ucy4gICd2ZnAnIGFuZCAnbmVvbicgYXJlIGJvdGggZGVmaW5lZC4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm0uaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBiODBjNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm0uaW5jCkBAIC0wLDAgKzEsMTcgQEAKKworVFVORVZBTElEW2JpZ2VuZGlhbl0gPSAiRW5hYmxlIGJpZy1lbmRpYW4gbW9kZS4iCisKK0FSTVBLR0FSQ0ggPSAiJHtBUk1QS0dBUkNIX3R1bmUtJHtERUZBVUxUVFVORX19IgorQVJNUEtHU0ZYX0VORElBTiA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJiaWdlbmRpYW4iLCAiYiIsICIiLCBkKX0iCitBUk1QS0dTRlhfRlBVID8/PSAiIgorQVJNUEtHU0ZYX0RTUCA/Pz0gIiIKK0FSTVBLR1NGWF9FQUJJID8/PSAiIgorQVJNUEtHU0ZYX1RIVU1CID8/PSAiIgorCitUVU5FX0FSQ0ggPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYmlnZW5kaWFuIiwgImFybWViIiwgImFybSIsIGQpfSIKK1RVTkVfUEtHQVJDSCA9ICIke0FSTVBLR0FSQ0h9JHtBUk1QS0dTRlhfVEhVTUJ9JHtBUk1QS0dTRlhfRFNQfSR7QVJNUEtHU0ZYX0VBQkl9JHtBUk1QS0dTRlhfRU5ESUFOfSR7QVJNUEtHU0ZYX0ZQVX0iCisKK0FCSUVYVEVOU0lPTiA9ICJlYWJpIgorCitUQVJHRVRfRlBVID0gIiR7QGQuZ2V0VmFyKCdBUk1QS0dTRlhfRlBVJywgVHJ1ZSkuc3RyaXAoJy0nKSBvciAnc29mdCd9IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtNjQuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybTY0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mzc2Yjg3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybTY0LmluYwpAQCAtMCwwICsxLDM2IEBACitERUZBVUxUVFVORSA/PSAiYWFyY2g2NCIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12N2EuaW5jCisKK1RVTkVWQUxJRFthYXJjaDY0XSA9ICJFbmFibGUgaW5zdHJ1Y3Rpb25zIGZvciBhYXJjaDY0IgorCitNQUNISU5FT1ZFUlJJREVTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhYXJjaDY0IiwgIjphYXJjaDY0IiwgIiIgLGQpfSIKKworIyBMaXR0bGUgRW5kaWFuIGJhc2UgY29uZmlncworQVZBSUxUVU5FUyArPSAiYWFyY2g2NCBhYXJjaDY0X2JlIgorQVJNUEtHQVJDSF90dW5lLWFhcmNoNjQgPz0gImFhcmNoNjQiCitBUk1QS0dBUkNIX3R1bmUtYWFyY2g2NF9iZSA/PSAiYWFyY2g2NF9iZSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hYXJjaDY0ID89ICJhYXJjaDY0IgorVFVORV9GRUFUVVJFU190dW5lLWFhcmNoNjRfYmUgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFhcmNoNjR9IGJpZ2VuZGlhbiIKK0JBU0VfTElCX3R1bmUtYWFyY2g2NCA9ICJsaWI2NCIKK0JBU0VfTElCX3R1bmUtYWFyY2g2NF9iZSA9ICJsaWI2NCIKKworUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFhcmNoNjQgPSAiYWFyY2g2NCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hYXJjaDY0X2JlID0gImFhcmNoNjRfYmUiCisKK0FSTVBLR1NGWF9FTkRJQU5fNjQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYmlnZW5kaWFuIiwgIl9iZSIsICIiLCBkKX0iCitUVU5FX0FSQ0hfNjQgPSAiYWFyY2g2NCR7QVJNUEtHU0ZYX0VORElBTl82NH0iCitUVU5FX1BLR0FSQ0hfNjQgPSAiYWFyY2g2NCR7QVJNUEtHU0ZYX0VORElBTl82NH0iCitBQklFWFRFTlNJT05fNjQgPSAiIgorVEFSR0VUX0ZQVV82NCA9ICIiCisKKyMgRHVwbGljYXRlZCBmcm9tIGFyY2gtYXJtLmluYworVFVORV9BUkNIXzMyID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImJpZ2VuZGlhbiIsICJhcm1lYiIsICJhcm0iLCBkKX0iCitUVU5FX1BLR0FSQ0hfMzIgPSAiJHtBUk1QS0dBUkNIfSR7QVJNUEtHU0ZYX1RIVU1CfSR7QVJNUEtHU0ZYX0RTUH0ke0FSTVBLR1NGWF9FQUJJfSR7QVJNUEtHU0ZYX0VORElBTn0ke0FSTVBLR1NGWF9GUFV9IgorQUJJRVhURU5TSU9OXzMyID0gImVhYmkiCitUQVJHRVRfRlBVXzMyID0gIiR7QGQuZ2V0VmFyKCdBUk1QS0dTRlhfRlBVJywgVHJ1ZSkuc3RyaXAoJy0nKSBvciAnc29mdCd9IgorCitUVU5FX0FSQ0ggPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYWFyY2g2NCIsICIke1RVTkVfQVJDSF82NH0iLCAiJHtUVU5FX0FSQ0hfMzJ9IiAsZCl9IgorVFVORV9QS0dBUkNIID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFhcmNoNjQiLCAiJHtUVU5FX1BLR0FSQ0hfNjR9IiwgIiR7VFVORV9QS0dBUkNIXzMyfSIgLGQpfSIKK0FCSUVYVEVOU0lPTiA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhYXJjaDY0IiwgIiR7QUJJRVhURU5TSU9OXzY0fSIsICIke0FCSUVYVEVOU0lPTl8zMn0iICxkKX0iCitUQVJHRVRfRlBVID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFhcmNoNjQiLCAiJHtUQVJHRVRfRlBVXzY0fSIsICIke1RBUkdFVF9GUFVfMzJ9IiAsZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjMDdhOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NC5pbmMKQEAgLTAsMCArMSwzNCBAQAorREVGQVVMVFRVTkUgPz0gImFybXY0IgorCitUVU5FVkFMSURbYXJtXSA9ICJFbmFibGUgQVJNIGluc3RydWN0aW9uIHNldCIKK1RVTkVWQUxJRFthcm12NF0gPSAiRW5hYmxlIGluc3RydWN0aW9ucyBmb3IgQVJNdjQiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjQiLCAiIC1tYXJjaD1hcm12NCR7QVJNUEtHU0ZYX1RIVU1CfSIsICIiLCBkKX0iCisjIGVuYWJsZSAtLWZpeC12NGJ4IHdoZW4gd2UgaGF2ZSBhcm12NCBpbiBUVU5FX0ZFQVRVUkVTLCBidXQgdGhlbiBkaXNhYmxlIGl0IHdoZW4gd2UgaGF2ZSBhbHNvIGFybXY1IG9yIHRodW1iCisjIG1heWJlIHdlIHNob3VsZCBleHRlbmQgYmIudXRpbHMuY29udGFpbnMgdG8gc3VwcG9ydCBjaGVjayBmb3IgYW55IGNoZWNrdmFsdWVzIGluIHZhbHVlLCBub3cgaXQgZG9lcyAKKyMgY2hlY2t2YWx1ZXMuaXNzdWJzZXQodmFsKSB3aGljaCBjYW5ub3QgYmUgdXNlZCBmb3IgbmVnYXRpdmUgdGVzdCBvZiBmb28gbmVpdGhlciBiYXIgaW4gdmFsdWUKK0ZJWF9WNEJYX0FSTVY0ID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybXY0IiwgIi0tZml4LXY0YngiLCAiIiwgZCl9IgorRklYX1Y0QlhfQVJNVjUgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjUiLCAiIiwgIiR7RklYX1Y0QlhfQVJNVjR9IiwgZCl9IgorRklYX1Y0QlggPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAidGh1bWIiLCAiIiwgIiR7RklYX1Y0QlhfQVJNVjV9IiwgZCl9IgorVEFSR0VUX0xEX0tFUk5FTF9BUkNIICs9ICIke0ZJWF9WNEJYfSIKK01BQ0hJTkVPVkVSUklERVMgPS4gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybXY0IiwgImFybXY0OiIsICIiICxkKX0iCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtLmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tdGh1bWIuaW5jCisKKyMgTGl0dGxlIEVuZGlhbgorQVZBSUxUVU5FUyArPSAiYXJtdjQgYXJtdjR0IgorQVJNUEtHQVJDSF90dW5lLWFybXY0ID89ICJhcm12NCIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NHQgPz0gImFybXY0IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY0ID89ICJhcm0gYXJtdjQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjR0ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NH0gdGh1bWIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjQgPSAiYXJtIGFybXY0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0dCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NH0gYXJtdjR0IgorCisjIEJpZyBFbmRpYW4KK0FWQUlMVFVORVMgKz0gImFybXY0YiBhcm12NHRiIgorQVJNUEtHQVJDSF90dW5lLWFybXY0YiA/PSAiYXJtdjQiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjR0YiA/PSAiYXJtdjQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjRiID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NH0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY0dGIgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY0dH0gYmlnZW5kaWFuIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0YiA9ICJhcm1lYiBhcm12NGIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjR0YiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NGJ9IGFybXY0dGIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjUtZHNwLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NS1kc3AuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNGE2MmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjUtZHNwLmluYwpAQCAtMCwwICsxLDUyIEBACitBUk1QS0dTRlhfRFNQID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgWyAiYXJtdjUiLCAiZHNwIiBdLCAiZSIsICIiLCBkKX0iCitUVU5FVkFMSURbZHNwXSA9ICJBUk0gRFNQIGZ1bmN0aW9uYWxpdHkiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjUuaW5jCisKKyMgTGl0dGxlIEVuZGlhbgorQVZBSUxUVU5FUyArPSAiYXJtdjVlIGFybXY1dGUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjVlID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NXRlID89ICJhcm12NSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWUgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1fSBkc3AiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZSA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0fSBkc3AiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1fSBhcm12NWUiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXR9IGFybXY1ZSBhcm12NXRlIgorCisjIExpdHRsZSBFbmRpYW4gKyBWRlAvRFNQCitBVkFJTFRVTkVTICs9ICJhcm12NWUtdmZwIGFybXY1dGUtdmZwIGFybXY1ZWhmLXZmcCBhcm12NXRlaGYtdmZwIgorQVJNUEtHQVJDSF90dW5lLWFybXY1ZS12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dGUtdmZwID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NWVoZi12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dGVoZi12ZnAgPz0gImFybXY1IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1ZS12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1ZX0gdmZwIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1dGUtdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlfSB2ZnAiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjVlaGYtdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWUtdmZwfSBjYWxsY29udmVudGlvbi1oYXJkIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1dGVoZi12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1dGUtdmZwfSBjYWxsY29udmVudGlvbi1oYXJkIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZS12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjUtdmZwfSBhcm12NWUgYXJtdjVlLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlLXZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXQtdmZwfSBhcm12NWUgYXJtdjV0ZSBhcm12NWUtdmZwIGFybXY1dGUtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZWhmLXZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWhmLXZmcH0gYXJtdjVlaGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGVoZi12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0aGYtdmZwfSBhcm12NWVoZi12ZnAgYXJtdjV0ZWhmLXZmcCIKKworIyBCaWcgRW5kaWFuCitBVkFJTFRVTkVTICs9ICJhcm12NWViIGFybXY1dGViIgorQVJNUEtHQVJDSF90dW5lLWFybXY1ZWIgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dGViID89ICJhcm12NSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWViID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWV9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlYiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZX0gYmlnZW5kaWFuIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZWIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVifSBhcm12NWViIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGViID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGJ9IGFybXY1ZWIgYXJtdjV0ZWIiCisKKyMgQmlnIEVuZGlhbiArIFZGUC9EU1AKK0FWQUlMVFVORVMgKz0gImFybXY1ZWItdmZwIGFybXY1dGViLXZmcCBhcm12NWVoZmItdmZwIGFybXY1dGVoZmItdmZwIgorQVJNUEtHQVJDSF90dW5lLWFybXY1ZWItdmZwID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NXRlYi12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1ZWhmYi12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dGVoZmItdmZwID89ICJhcm12NSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWViLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjVlLXZmcH0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1dGViLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZS12ZnB9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWVoZmItdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWVoZi12ZnB9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlaGZiLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZWhmLXZmcH0gYmlnZW5kaWFuIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZWItdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1Yi12ZnB9IGFybXY1ZWIgYXJtdjVlYi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZWItdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGItdmZwfSBhcm12NWViIGFybXY1dGViIGFybXY1ZWItdmZwIGFybXY1dGViLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWVoZmItdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1aGZiLXZmcH0gYXJtdjVlaGZiLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlaGZiLXZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRoZmItdmZwfSBhcm12NWVoZmItdmZwIGFybXY1dGVoZmItdmZwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY1LmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNjZWFmYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NS5pbmMKQEAgLTAsMCArMSw2MCBAQAorREVGQVVMVFRVTkUgPz0gImFybXY1IgorCitUVU5FVkFMSURbYXJtdjVdID0gIkVuYWJsZSBpbnN0cnVjdGlvbnMgZm9yIEFSTXY1IgorVFVORUNPTkZMSUNUU1thcm12NV0gPSAiYXJtdjQiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjUiLCAiIC1tYXJjaD1hcm12NSR7QVJNUEtHU0ZYX1RIVU1CfSR7QVJNUEtHU0ZYX0RTUH0iLCAiIiwgZCl9IgorTUFDSElORU9WRVJSSURFUyA9LiAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjUiLCAiYXJtdjU6IiwgIiIgLGQpfSIKKworQVJNUEtHU0ZYX0RTUCA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsIFsgImFybXY1IiwgImRzcCIgXSwgImUiLCAiIiwgZCl9IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY0LmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tdmZwLmluYworCisjIExpdHRsZSBFbmRpYW4KK0FWQUlMVFVORVMgKz0gImFybXY1IGFybXY1dCIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NSA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjV0ID89ICJhcm12NSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NSA/PSAiYXJtIGFybXY1IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1dCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV9IHRodW1iIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0fSBhcm12NSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjR0fSBhcm12NSBhcm12NXQiCisKKyMgTGl0dGxlIEVuZGlhbiArIFZGUC9EU1AKK0FWQUlMVFVORVMgKz0gImFybXY1LXZmcCBhcm12NXQtdmZwIGFybXY1aGYtdmZwIGFybXY1dGhmLXZmcCIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NS12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dC12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1aGYtdmZwID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NXRoZi12ZnAgPz0gImFybXY1IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1LXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV9IHZmcCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXQtdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXR9IHZmcCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWhmLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjUtdmZwfSBjYWxsY29udmVudGlvbi1oYXJkIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1dGhmLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0LXZmcH0gY2FsbGNvbnZlbnRpb24taGFyZCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NS12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV9IGFybXY1LXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXQtdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dH0gYXJtdjUtdmZwIGFybXY1dC12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVoZi12ZnAgPSAiYXJtdjVoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0aGYtdmZwID0gImFybXY1aGYtdmZwIGFybXY1dGhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlaGYtdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGhmLXZmcH0gYXJtdjVlaGYtdmZwIGFybXY1dGVoZi12ZnAiCisKKyMgQmlnIEVuZGlhbgorQVZBSUxUVU5FUyArPSAiYXJtdjViIGFybXY1dGIiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjViID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NXRiID89ICJhcm12NSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWIgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1fSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0YiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0fSBiaWdlbmRpYW4iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjViID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0Yn0gYXJtdjViIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjR0Yn0gYXJtdjViIGFybXY1dGIiCisKKyMgQmlnIEVuZGlhbiArIFZGUC9EU1AKK0FWQUlMVFVORVMgKz0gImFybXY1Yi12ZnAgYXJtdjV0Yi12ZnAgYXJtdjVoZmItdmZwIGFybXY1dGhmYi12ZnAiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjViLXZmcCA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjV0Yi12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1aGZiLXZmcCA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjV0aGZiLXZmcCA/PSAiYXJtdjUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjViLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjUtdmZwfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0Yi12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1dC12ZnB9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWhmYi12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1aGYtdmZwfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0aGZiLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0aGYtdmZwfSBiaWdlbmRpYW4iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjViLXZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWJ9IGFybXY1Yi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0Yi12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0Yn0gYXJtdjViLXZmcCBhcm12NXRiLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWhmYi12ZnAgPSAiYXJtdjVoZmItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGhmYi12ZnAgPSAiYXJtdjVoZmItdmZwIGFybXY1dGhmYi12ZnAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjYuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY2LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjBjNWJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY2LmluYwpAQCAtMCwwICsxLDUwIEBACitERUZBVUxUVFVORSA/PSAiYXJtdjYiCisKK1RVTkVWQUxJRFthcm12Nl0gPSAiRW5hYmxlIGluc3RydWN0aW9ucyBmb3IgQVJNdjYiCitUVU5FQ09ORkxJQ1RTW2FybXY2XSA9ICJhcm12NCBhcm12NSIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm12NiIsICIgLW1hcmNoPWFybXY2IiwgIiIsIGQpfSIKK01BQ0hJTkVPVkVSUklERVMgPS4gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybXY2IiwgImFybXY2OiIsICIiICxkKX0iCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjUtZHNwLmluYworCisjIExpdHRsZSBFbmRpYW4KK0FWQUlMVFVORVMgKz0gImFybXY2LW5vdmZwIGFybXY2dC1ub3ZmcCBhcm12NiBhcm12NnQgYXJtdjZoZiBhcm12NnRoZiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12Ni1ub3ZmcCA/PSAiYXJtdjYiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjZ0LW5vdmZwID89ICJhcm12NiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NiA/PSAiYXJtdjYiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjZ0ID89ICJhcm12NiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NmhmID89ICJhcm12NiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NnRoZiA/PSAiYXJtdjYiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjYtbm92ZnAgPz0gImFybSBhcm12NiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NnQtbm92ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY2LW5vdmZwfSB0aHVtYiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjYtbm92ZnB9IHZmcCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NnQgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY2dC1ub3ZmcH0gdmZwIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY2fSBjYWxsY29udmVudGlvbi1oYXJkIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2dGhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NnR9IGNhbGxjb252ZW50aW9uLWhhcmQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjYtbm92ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlfSBhcm12NiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NnQtbm92ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZX0gYXJtdjYgYXJtdjZ0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZS12ZnB9IGFybXY2IGFybXY2LXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NnQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZS12ZnB9IGFybXY2IGFybXY2dCBhcm12Ni12ZnAgYXJtdjZ0LXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NmhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZWhmLXZmcH0gYXJtdjZoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZ0aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZWhmLXZmcH0gYXJtdjZoZi12ZnAgYXJtdjZ0aGYtdmZwIgorCisjIEJpZyBFbmRpYW4KK0FWQUlMVFVORVMgKz0gImFybXY2Yi1ub3ZmcCBhcm12NnRiLW5vdmZwIGFybXY2YiBhcm12NnRiIGFybXY2aGZiIGFybXY2dGhmYiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NmItbm92ZnAgPz0gImFybXY2IgorQVJNUEtHQVJDSF90dW5lLWFybXY2dGItbm92ZnAgPz0gImFybXY2IgorQVJNUEtHQVJDSF90dW5lLWFybXY2YiA/PSAiYXJtdjYiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjZ0YiA/PSAiYXJtdjYiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjZoZmIgPz0gImFybXY2IgorQVJNUEtHQVJDSF90dW5lLWFybXY2dGhmYiA/PSAiYXJtdjYiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZiLW5vdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12Ni1ub3ZmcH0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2dGItbm92ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY2dC1ub3ZmcH0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2YiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NnRiID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NnR9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NmhmYiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZoZn0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2dGhmYiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ0aGZ9IGJpZ2VuZGlhbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NmItbm92ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlYn0gYXJtdjZiIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2dGItbm92ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZWJ9IGFybXY2YiBhcm12NnRiIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2YiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWViLXZmcH0gYXJtdjZiIGFybXY2Yi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZ0YiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlYi12ZnB9IGFybXY2YiBhcm12NnRiIGFybXY2Yi12ZnAgYXJtdjZ0Yi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZoZmIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlaGZiLXZmcH0gYXJtdjZoZmItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2dGhmYiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlaGZiLXZmcH0gYXJtdjZoZmItdmZwIGFybXY2dGhmYi12ZnAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12N2EuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYjZmNjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYwpAQCAtMCwwICsxLDEyMyBAQAorREVGQVVMVFRVTkUgPz0gImFybXY3YSIKKworVFVORVZBTElEW2FybXY3YV0gPSAiRW5hYmxlIGluc3RydWN0aW9ucyBmb3IgQVJNdjctYSIKK1RVTkVDT05GTElDVFNbYXJtdjdhXSA9ICJhcm12NCBhcm12NSBhcm12NiBhcm12NyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm12N2EiLCAiIC1tYXJjaD1hcm12Ny1hIiwgIiIsIGQpfSIKK01BQ0hJTkVPVkVSUklERVMgPS4gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybXY3YSIsICJhcm12N2E6IiwgIiIgLGQpfSIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12Ni5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2ZlYXR1cmUtYXJtLW5lb24uaW5jCisKKyMgTGl0dGxlIEVuZGlhbiBiYXNlIGNvbmZpZ3MKK0FWQUlMVFVORVMgKz0gImFybXY3YSBhcm12N2F0IGFybXY3YS12ZnB2M2QxNiBhcm12N2F0LXZmcHYzZDE2IGFybXY3YS12ZnB2MyBhcm12N2F0LXZmcHYzIGFybXY3YS1uZW9uIGFybXY3YXQtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2EgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0ID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhLXZmcHYzZDE2ID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdC12ZnB2M2QxNiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YS12ZnB2MyA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXQtdmZwdjMgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2EtbmVvbj89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdC1uZW9uID89ICJhcm12N2EiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhID89ICJhcm0gYXJtdjdhIHZmcCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IHRodW1iIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YS12ZnB2M2QxNiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhfSB2ZnB2M2QxNiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LXZmcHYzZDE2ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0fSB2ZnB2M2QxNiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtdmZwdjMgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS12ZnB2M2QxNn0gdmZwdjMiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC12ZnB2MyA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC12ZnB2M2QxNn0gdmZwdjMiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YX0gbmVvbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXR9IG5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2fSBhcm12N2EgYXJtdjdhLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2EtdmZwdjNkMTYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhfSBhcm12N2EtdmZwLXZmcHYzZDE2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YS12ZnB2MyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2EtdmZwdjNkMTZ9IGFybXY3YS12ZnAtdmZwdjNkMTYtdmZwdjMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhfSBhcm12N2EtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NnR9IGFybXY3YSBhcm12N2EtdmZwIGFybXY3YXQyLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0LXZmcHYzZDE2ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXR9IGFybXY3YS12ZnAtdmZwdjNkMTYgYXJtdjdhdDItdmZwLXZmcHYzZDE2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXQtdmZwdjMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdC12ZnB2M2QxNn0gYXJtdjdhLXZmcC12ZnB2M2QxNi12ZnB2MyBhcm12N2F0Mi12ZnAtdmZwdjNkMTYtdmZwdjMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdC1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXR9IGFybXY3YS12ZnAtbmVvbiBhcm12N2F0Mi12ZnAtbmVvbiIKKworIyBWRlAgVHVuZXMKK0FWQUlMVFVORVMgKz0gImFybXY3YWhmIGFybXY3YXRoZiBhcm12N2FoZi12ZnB2M2QxNiBhcm12N2F0aGYtdmZwdjNkMTYgYXJtdjdhaGYtdmZwdjMgYXJtdjdhdGhmLXZmcHYzIGFybXY3YWhmLW5lb24gYXJtdjdhdGhmLW5lb24gYXJtdjdhaGYtbmVvbi12ZnB2NCBhcm12N2F0aGYtbmVvbi12ZnB2NCIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2FoZiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRoZiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YWhmLXZmcHYzZDE2ID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdGhmLXZmcHYzZDE2ID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhaGYtdmZwdjMgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0aGYtdmZwdjMgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2FoZi1uZW9uPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0aGYtbmVvbiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YWhmLW5lb24tdmZwdjQgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0aGYtbmVvbi12ZnB2NCA/PSAiYXJtdjdhIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0fSBjYWxsY29udmVudGlvbi1oYXJkIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLXZmcHYzZDE2ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtdmZwdjNkMTZ9IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLXZmcHYzZDE2ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LXZmcHYzZDE2fSBjYWxsY29udmVudGlvbi1oYXJkIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLXZmcHYzID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtdmZwdjN9IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLXZmcHYzID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LXZmcHYzfSBjYWxsY29udmVudGlvbi1oYXJkIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS1uZW9ufSBjYWxsY29udmVudGlvbi1oYXJkIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LW5lb259IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbi12ZnB2NCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbn0gdmZwdjQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb24tdmZwdjQgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi1uZW9ufSB2ZnB2NCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NmhmfSBhcm12N2FoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2dGhmfSBhcm12N2FoZi12ZnAgYXJtdjdhdDJoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtdmZwdjNkMTYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZ9IGFybXY3YWhmLXZmcC12ZnB2M2QxNiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtdmZwdjNkMTYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmfSBhcm12N2FoZi12ZnAtdmZwdjNkMTYgYXJtdjdhdDJoZi12ZnAtdmZwdjNkMTYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtdmZwdjMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtdmZwdjNkMTZ9IGFybXY3YWhmLXZmcC12ZnB2M2QxNi12ZnB2MyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtdmZwdjMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLXZmcHYzZDE2fSBhcm12N2FoZi12ZnAtdmZwdjNkMTYtdmZwdjMgYXJtdjdhdDJoZi12ZnAtdmZwdjNkMTYtdmZwdjMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZn0gYXJtdjdhaGYtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmfSBhcm12N2FoZi12ZnAtbmVvbiBhcm12N2F0MmhmLXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmLW5lb24tdmZwdjQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtbmVvbn0gYXJtdjdhaGYtdmZwLW5lb24tdmZwdjQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLW5lb24tdmZwdjQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLW5lb259IGFybXY3YWhmLXZmcC1uZW9uLXZmcHY0IGFybXY3YXQyaGYtdmZwLW5lb24tdmZwdjQiCisKKyMgQmlnIEVuZGlhbgorQVZBSUxUVU5FUyArPSAiYXJtdjdhYiBhcm12N2F0YiBhcm12N2FiLXZmcHYzZDE2IGFybXY3YXRiLXZmcHYzZDE2IGFybXY3YWItdmZwdjMgYXJtdjdhdGItdmZwdjMgYXJtdjdhYi1uZW9uIGFybXY3YXRiLW5lb24iCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhYiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRiID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhYi12ZnB2M2QxNiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRiLXZmcHYzZDE2ID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhYi12ZnB2MyA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRiLXZmcHYzID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhYi1uZW9uPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0Yi1uZW9uID89ICJhcm12N2EiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhYiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGIgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXR9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FiLXZmcHYzZDE2ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtdmZwdjNkMTZ9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0Yi12ZnB2M2QxNiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC12ZnB2M2QxNn0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWItdmZwdjMgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS12ZnB2M30gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRiLXZmcHYzID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LXZmcHYzfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhYi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtbmVvbn0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRiLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtbmVvbn0gYmlnZW5kaWFuIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZifSBhcm12N2FiLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0YiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NnRifSBhcm12N2FiLXZmcCBhcm12N2F0MmItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWItdmZwdjNkMTYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhYn0gYXJtdjdhYi12ZnAtdmZwdjNkMTYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGItdmZwdjNkMTYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhYn0gYXJtdjdhYi12ZnAtdmZwdjNkMTYgYXJtdjdhdDJiLXZmcC12ZnB2M2QxNiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FiLXZmcHYzID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWItdmZwdjNkMTZ9IGFybXY3YWItdmZwLXZmcHYzZDE2LXZmcHYzIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRiLXZmcHYzID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWItdmZwdjNkMTZ9IGFybXY3YWItdmZwLXZmcHYzZDE2LXZmcHYzIGFybXY3YXQyYi12ZnAtdmZwdjNkMTYtdmZwdjMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhYi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWJ9IGFybXY3YWItdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGItbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0Yn0gYXJtdjdhYi12ZnAtbmVvbiBhcm12N2F0MmItdmZwLW5lb24iCisKKyMgQmlnIEVuZGlhbiArIFZGUAorQVZBSUxUVU5FUyArPSAiYXJtdjdhaGZiIGFybXY3YXRoZmIgYXJtdjdhaGZiLXZmcHYzZDE2IGFybXY3YXRoZmItdmZwdjNkMTYgYXJtdjdhaGZiLXZmcHYzIGFybXY3YXRoZmItdmZwdjMgYXJtdjdhaGZiLW5lb24gYXJtdjdhdGhmYi1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YWhmYiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRoZmIgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2FoZmItdmZwdjNkMTYgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0aGZiLXZmcHYzZDE2ID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhaGZiLXZmcHYzID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdGhmYi12ZnB2MyA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YWhmYi1uZW9uPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0aGZiLW5lb24gPz0gImFybXY3YSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZmIgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmYiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGZiLXZmcHYzZDE2ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZi12ZnB2M2QxNn0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZmItdmZwdjNkMTYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi12ZnB2M2QxNn0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmYi12ZnB2MyA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtdmZwdjN9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGZiLXZmcHYzID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYtdmZwdjN9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZmItbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbn0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZmItbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb259IGJpZ2VuZGlhbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZmIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZoZmJ9IGFybXY3YWhmYi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmYiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NnRoZmJ9IGFybXY3YWhmYi12ZnAgYXJtdjdhdDJoZmItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmYi12ZnB2M2QxNiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZmJ9IGFybXY3YWhmYi12ZnAtdmZwdjNkMTYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmYi12ZnB2M2QxNiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZifSBhcm12N2FoZmItdmZwLXZmcHYzZDE2IGFybXY3YXQyaGZiLXZmcC12ZnB2M2QxNiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZmItdmZwdjMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZiLXZmcHYzZDE2fSBhcm12N2FoZmItdmZwLXZmcHYzZDE2LXZmcHYzIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZmItdmZwdjMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmYi12ZnB2M2QxNn0gYXJtdjdhaGZiLXZmcC12ZnB2M2QxNi12ZnB2MyBhcm12N2F0MmhmYi12ZnAtdmZwdjNkMTYtdmZwdjMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZiLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZifSBhcm12N2FoZmItdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmYi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZmJ9IGFybXY3YWhmYi12ZnAtbmVvbiBhcm12N2F0MmhmYi12ZnAtbmVvbiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12OC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjguaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlODMyZmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjguaW5jCkBAIC0wLDAgKzEgQEAKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtNjQuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2ZlYXR1cmUtYXJtLW5lb24uaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS1uZW9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGIyYjg1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS1uZW9uLmluYwpAQCAtMCwwICsxLDMgQEAKK1RVTkVWQUxJRFtuZW9uXSA9ICJFbmFibGUgTmVvbiBTSU1EIGFjY2VsZXJhdG9yIHVuaXQuIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm5lb24iLCBiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJ2ZnB2NCIsICIgLW1mcHU9bmVvbi12ZnB2NCIsICIgLW1mcHU9bmVvbiIsIGQpLCAiIiAsIGQpfSIKK0FSTVBLR1NGWF9GUFUgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm5lb24iLCAiLW5lb24iLCAiIiwgZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS10aHVtYi5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2ZlYXR1cmUtYXJtLXRodW1iLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjMyMTcxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS10aHVtYi5pbmMKQEAgLTAsMCArMSw0OSBAQAorIyBUaGUgaW5zdHJ1Y3Rpb24gc2V0IHRoZSBjb21waWxlciBzaG91bGQgdXNlIHdoZW4gZ2VuZXJhdGluZyBhcHBsaWNhdGlvbgorIyBjb2RlLiBUaGUga2VybmVsIGlzIGFsd2F5cyBjb21waWxlZCB3aXRoIGFybSBjb2RlIGF0IHByZXNlbnQuIGFybSBjb2RlCisjIGlzIHRoZSBvcmlnaW5hbCAzMiBiaXQgQVJNIGluc3RydWN0aW9uIHNldCwgdGh1bWIgY29kZSBpcyB0aGUgMTYgYml0CisjIGVuY29kZWQgUklTQyBzdWItc2V0LiBUaHVtYiBjb2RlIGlzIHNtYWxsZXIgKG1heWJlIDcwJSBvZiB0aGUgQVJNIHNpemUpCisjIGJ1dCByZXF1aXJlcyBtb3JlIGluc3RydWN0aW9ucyAoMTQwJSBmb3IgNzAlIHNtYWxsZXIgY29kZSkgc28gbWF5IGJlCisjIHNsb3dlci4KK1RVTkVWQUxJRFt0aHVtYl0gPSAiVXNlIHRodW1iIGluc3RydWN0aW9ucyBpbnN0ZWFkIG9mIEFSTSIKK0FSTV9USFVNQl9PUFQgPSAiJHtAWydhcm0nLCAndGh1bWInXVtkLmdldFZhcignQVJNX0lOU1RSVUNUSU9OX1NFVCcsIFRydWUpID09ICd0aHVtYiddfSIKK0FSTV9USFVNQl9TVUZGSVggLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ2FybXY0JywgICd0JywgICcnLCBkKX0iCitBUk1fVEhVTUJfU1VGRklYIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdhcm12NScsICAndCcsICAnJywgZCl9IgorQVJNX1RIVU1CX1NVRkZJWCAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnYXJtdjYnLCAgJ3QnLCAgJycsIGQpfSIKK0FSTV9USFVNQl9TVUZGSVggLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ2FybXY3YScsICd0MicsICcnLCBkKX0iCitBUk1fVEhVTUJfU1VGRklYIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdhcm12N3InLCAndDInLCAnJywgZCl9IgorQVJNX1RIVU1CX1NVRkZJWCAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnYXJtdjdtJywgJ3QyJywgJycsIGQpfSIKKworIyBJZiB0aGUgZGV2aWNlIHN1cHBvcnRzIEFSTSwgdGhlbiByZXNwZWN0IEFSTV9USFVNQl9PUFQgKHdoaWNoIGNhbiBiZSAiYXJtIiBvciAidGh1bWIiKQorIyBJZiB0aGUgZGVmaWNlIGRvZXNuJ3Qgc3VwcG9ydCBBUk0sIHRoZW4gYWx3YXlzIHNldCAidGh1bWIiIGV2ZW4gd2hlbgorIyBzb21lIHJlY2lwZSBleHBsaWNpdGx5IHNldHMgQVJNX0lOU1RSVUNUSU9OX1NFVCB0byAiYXJtIgorQVJNX01fT1BUID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ2FybScsICcke0FSTV9USFVNQl9PUFR9JywgJ3RodW1iJywgZCl9IgorcHl0aG9uICgpIHsKKyAgICBpZiBiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICd0aHVtYicsICdGYWxzZScsICdUcnVlJywgZCk6CisgICAgICAgIHJldHVybgorICAgIHNlbGVjdGVkID0gZC5nZXRWYXIoJ0FSTV9JTlNUUlVDVElPTl9TRVQnLCBUcnVlKQorICAgIGlmIHNlbGVjdGVkID09IE5vbmU6CisgICAgICAgIHJldHVybgorICAgIHVzZWQgPSBkLmdldFZhcignQVJNX01fT1BUJywgVHJ1ZSkKKyAgICBpZiBzZWxlY3RlZCAhPSB1c2VkOgorICAgICAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgIGJiLndhcm4oIlJlY2lwZSAnJXMnIHNlbGVjdHMgQVJNX0lOU1RSVUNUSU9OX1NFVCB0byBiZSAnJXMnLCBidXQgdHVuZSBjb25maWd1cmF0aW9uIG92ZXJyaWRlcyBpdCB0byAnJXMnIiAlIChwbiwgc2VsZWN0ZWQsIHVzZWQpKQorfQorCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAndGh1bWInLCAnIC1tJHtBUk1fTV9PUFR9JywgJycsIGQpfSIKK09WRVJSSURFUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAndGh1bWInLCAnOnRodW1iJywgJycsIGQpfSIKKworIyBBZGQgc3VmZml4IGZyb20gQVJNX1RIVU1CX1NVRkZJWCBvbmx5IGlmIGFmdGVyIGFsbCB0aGlzIHdlIHN0aWxsIHNldCBBUk1fTV9PUFQgdG8gdGh1bWIKK0FSTVBLR1NGWF9USFVNQiAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAndGh1bWInLCAnJHtBUk1fVEhVTUJfU1VGRklYfScsICcnLCBkKSBpZiBkLmdldFZhcignQVJNX01fT1BUJywgVHJ1ZSkgPT0gJ3RodW1iJyBlbHNlICcnfSIKKworIyBXaGV0aGVyIHRvIGNvbXBpbGUgd2l0aCBjb2RlIHRvIGFsbG93IGludGVyd29ya2luZyBiZXR3ZWVuIHRoZSB0d28KKyMgaW5zdHJ1Y3Rpb24gc2V0cy4gVGhpcyBhbGxvd3MgdGh1bWIgY29kZSB0byBiZSBleGVjdXRlZCBvbiBhIHByaW1hcmlseQorIyBhcm0gc3lzdGVtIGFuZCB2aWNlIHZlcnNhLiBJdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IERJU1RST3Mgbm90CisjIHR1cm4gdGhpcyBvZmYgLSB0aGUgYWN0dWFsIGNvc3QgaXMgdmVyeSBzbWFsbC4KK1RVTkVWQUxJRFtuby10aHVtYi1pbnRlcndvcmtdID0gIkRpc2FibGUgbWl4aW5nIG9mIHRodW1iIGFuZCBBUk0gZnVuY3Rpb25zIgorVEhVTUJfVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ25vLXRodW1iLWludGVyd29yaycsICcgLW1uby10aHVtYi1pbnRlcndvcmsnLCAnIC1tdGh1bWItaW50ZXJ3b3JrJywgZCl9IgorVEhVTUJfT1ZFUlJJREVTIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICduby10aHVtYi1pbnRlcndvcmsnLCAnOnRodW1iLWludGVyd29yaycsICcnLCBkKX0iCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAndGh1bWInLCAnICR7VEhVTUJfVFVORV9DQ0FSR1N9JywgJycsIGQpfSIKK09WRVJSSURFUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAndGh1bWInLCAnJHtUSFVNQl9PVkVSUklERVN9JywgJycsIGQpfSIKKworIyB3aGF0IGFib3V0IGFybXY3bSBkZXZpY2VzIHdoaWNoIGRvbid0IHN1cHBvcnQgLW1hcm0gKGUuZy4gQ29ydGV4LU0zKT8KK1RBUkdFVF9DQ19LRVJORUxfQVJDSCArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAndGh1bWInLCAnLW1uby10aHVtYi1pbnRlcndvcmsgLW1hcm0nLCAnJywgZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS12ZnAuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS12ZnAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZmJlYWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2ZlYXR1cmUtYXJtLXZmcC5pbmMKQEAgLTAsMCArMSwxNyBAQAorVFVORVZBTElEW3ZmcF0gPSAiRW5hYmxlIFZlY3RvciBGbG9hdGluZyBQb2ludCAodmZwKSB1bml0LiIKK0FSTVBLR1NGWF9GUFUgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInZmcCIsICItdmZwIiwgIiIgLGQpfSIKKworVFVORVZBTElEW3ZmcHYzZDE2XSA9ICJFbmFibGUgVmVjdG9yIEZsb2F0aW5nIFBvaW50IFZlcnNpb24gMyB3aXRoIDE2IHJlZ2lzdGVycyAodmZwdjMtZDE2KSB1bml0LiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJ2ZnB2M2QxNiIsICIgLW1mcHU9dmZwdjMtZDE2IiwgIiIsIGQpfSIKK0FSTVBLR1NGWF9GUFUgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInZmcHYzZDE2IiwgIi12ZnB2M2QxNiIsICIiICxkKX0iCisKK1RVTkVWQUxJRFt2ZnB2M10gPSAiRW5hYmxlIFZlY3RvciBGbG9hdGluZyBQb2ludCBWZXJzaW9uIDMgd2l0aCAzMiByZWdpc3RlcnMgKHZmcHYzKSB1bml0LiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJ2ZnB2MyIsICIgLW1mcHU9dmZwdjMiLCAiIiwgZCl9IgorQVJNUEtHU0ZYX0ZQVSAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAidmZwdjMiLCAiLXZmcHYzIiwgIiIgLGQpfSIKKworVFVORVZBTElEW3ZmcHY0XSA9ICJFbmFibGUgVmVjdG9yIEZsb2F0aW5nIFBvaW50IFZlcnNpb24gNCAodmZwdjQpIHVuaXQuIgorQVJNUEtHU0ZYX0ZQVSAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAidmZwdjQiLCAiLXZmcHY0IiwgIiIgLGQpfSIKKworVFVORVZBTElEW2NhbGxjb252ZW50aW9uLWhhcmRdID0gIkVuYWJsZSBFQUJJIGhhcmQgZmxvYXQgY2FsbCBjb252ZW50aW9uLCByZXF1aXJlcyBWRlAuIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInZmcCIsIGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImNhbGxjb252ZW50aW9uLWhhcmQiLCAiIC1tZmxvYXQtYWJpPWhhcmQiLCAiIC1tZmxvYXQtYWJpPXNvZnRmcCIsIGQpLCAiIiAsZCl9IgorQVJNUEtHU0ZYX0VBQkkgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgWyAiY2FsbGNvbnZlbnRpb24taGFyZCIsICJ2ZnAiIF0sICJoZiIsICIiLCBkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvbWlwcy9SRUFETUUgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvbWlwcy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM3NWYzMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9taXBzL1JFQURNRQpAQCAtMCwwICsxLDM2IEBACisyMDEyLzAzLzMwIC0gTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorICAtIEluaXRpYWwgVmVyc2lvbgorCitNSVBTIGN1cnJlbnRseSBkZWZpbmVzIDEyIEFCSXMuICBDb21iaW5hdGlvbnMgb2Y6CisgKikgQmlnL0xpdHRsZSBFbmRpYW4KKyAqKSBIYXJkd2FyZS9Tb2Z0d2FyZSBGbG9hdGluZyBQb2ludAorICopIG8zMiwgbjMyLCBuNjQgQUJJCisKK1RVTkVfQVJDSCwgdGhlIEdOVSBjYW5vbmljYWwgYXJjaCwgaXMgZGVmaW5lZCBhczoKKworbWlwcyR7TUlQU1BLR1NGWF9CWVRFfSR7TUlQU1BLR1NGWF9FTkRJQU59CisKK1RoZSBwYWNrYWdlIGFyY2ggaXMgZGVmaW5lZCBpbiBzdWNoIGEgd2F5IHRvIGdlbmVyYXRlZCBhIHN0YW5kYXJkIG5hbWluZworc2NoZW1lLiAgVGhlIHNjaGVtZSBpczogPG1pcHMgdmFyaWFudD5bLW5mXVstbjMyXQorCitUVU5FX1BLR0FSQ0ggaXMgZGVmaW5lZCBhczoKKworJHtNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS0ke0RFRkFVTFRUVU5FfX0ke01JUFNQS0dTRlhfRlBVfSR7TUlQU1BLR1NGWF9BQkl9CisKK1RoZSBmb2xsb3dpbmcgaXMgYSBsaXN0IG9mIE1JUFMgc3BlY2lmaWMgdmFyaWFibGVzOgorCitNSVBTUEtHU0ZYX0JZVEUgLSBUaGlzIGlzIGRlZmluZWQgYXMgZWl0aGVyIGJsYW5rIGFuZCAiNjQiIGZvciBNSVBTNjQgQ1BVcy4KKworTUlQU1BLR1NGWF9FTkRJQU4gLSBGb3IgYmlnZW5kaWFuIGhhcmR3YXJlIHRoaXMgaXMgYmxhbmssIG90aGVyd2lzZSBpdCdzCitkZWZpbmVkIGFzICJlbCIuCisKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLTx0dW5lPiAtIEluIHRoZSBkZWZhdWx0IHR1bmluZ3MgaXQgaXMgc2V0IHRvIHRoZQorc2FtZSB2YWx1ZSBhcyBUVU5FX0FSQ0guICBJbiBjdXN0b20sIG9wdGltaXplZCB0dW5pbmdzLCB0aGUgdmFsdWUgc2hvdWxkCitiZSBtb2RpZmllZCB0byBtb3JlIHByZWNpc2VseSBkZXNjcmliZSB0aGUgdHVuaW5nLgorCitNSVBTUEtHU0ZYX0ZQVSAtIFRoZSB2YWx1ZSBpcyBzZXQgdG8gIiIgb3IgIi1uZiIsIHdoZXJlICItbmYiIGluZGljYXRlcyAKK3RoYXQgdGhlIHR1bmUgaXMgdXNpbmcgYSBub24tZmxvYXRpbmcgcG9pbnQgQUJJLgorCitNSVBTUEtHU0ZYX0FCSSAtIFRoaXMgaXMgdXNlZCB0byBzcGVjaWZ5IGFuIGFsdGVybmF0aXZlIEFCSSB3aGVuIHRoZSBwcmV2aW91cwordmFsdWVzIGFyZSBub3QgZW5vdWdoIHRvIGRpc3RyaW5ndWlzaCB0aGUgcGFja2FnZS4gICItbjMyIiBpcyBhZGRlZCB3aGVuCitidWlsZGluZyBmb3IgTjMyIEFCSS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9taXBzL2FyY2gtbWlwcy5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvbWlwcy9hcmNoLW1pcHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNjI2ZDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvbWlwcy9hcmNoLW1pcHMuaW5jCkBAIC0wLDAgKzEsMTAyIEBACisjIE1JUFMgQXJjaGl0ZWN0dXJlIGRlZmluaXRpb24KKyMgMTIgZGVmaW5lZCBBQklzLCBhbGwgY29tYmluYXRpb25zIG9mOgorIyAqKSBCaWcvTGl0dGxlIEVuZGlhbgorIyAqKSBIYXJkd2FyZS9Tb2Z0d2FyZSBGbG9hdGluZyBQb2ludAorIyAqKSBvMzIsIG4zMiwgbjY0IEFCSQorCitERUZBVUxUVFVORSA/PSAibWlwcyIKKworIyBFbmRpYW5lc3MKK1RVTkVWQUxJRFtiaWdlbmRpYW5dID0gIkVuYWJsZSBiaWctZW5kaWFuIG1vZGUiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYmlnZW5kaWFuIiwgIiAtbWViIiwgIiAtbWVsIiwgZCl9IgorCisjIEFCSSBmbGFncworVFVORVZBTElEW28zMl0gPSAiTUlQUyBvMzIgQUJJIgorVFVORUNPTkZMSUNUU1tvMzJdID0gIm4zMiBuNjQiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibzMyIiwgIiAtbWFiaT0zMiIsICIiLCBkKX0iCisKK1RVTkVWQUxJRFtuMzJdID0gIk1JUFM2NCBuMzIgQUJJIgorVFVORUNPTkZMSUNUU1tuMzJdID0gIm8zMiBuNjQiCitBQklFWFRFTlNJT04gLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm4zMiIsICJuMzIiLCAiIiAsZCl9IgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm4zMiIsICIgLW1hYmk9bjMyIiwgIiIsIGQpfSIKKworVFVORVZBTElEW242NF0gPSAiTUlQUzY0IG42NCBBQkkiCitUVU5FQ09ORkxJQ1RTW242NF0gPSAibzMyIG4zMiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuNjQiLCAiIC1tYWJpPTY0IiwgIiIsIGQpfSIKKworIyBGbG9hdGluZyBwb2ludAorVFVORVZBTElEW2ZwdS1oYXJkXSA9ICJVc2UgaGFyZHdhcmUgRlBVIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImZwdS1oYXJkIiwgIiAtbWhhcmQtZmxvYXQiLCAiIC1tc29mdC1mbG9hdCIsIGQpfSIKK1RBUkdFVF9GUFUgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZnB1LWhhcmQiLCAiIiwgInNvZnQiLCBkKX0iCisKKyMgUGFja2FnZSBuYW1pbmcKK01JUFNQS0dTRlhfRU5ESUFOID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImJpZ2VuZGlhbiIsICIiLCAiZWwiLCBkKX0iCitNSVBTUEtHU0ZYX0JZVEUgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibjY0IiAsICI2NCIsICIiLCBkKX0iCitNSVBTUEtHU0ZYX0JZVEUgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm4zMiIgLCAiNjQiLCAiIiwgZCl9IgorTUlQU1BLR1NGWF9GUFUgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZnB1LWhhcmQiICwgIiIsICItbmYiLCBkKX0iCitNSVBTUEtHU0ZYX0FCSSA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuMzIiLCAiLW4zMiIsICIiLCBkKX0iCisKK1RVTkVfQVJDSCA9ICJtaXBzJHtNSVBTUEtHU0ZYX0JZVEV9JHtNSVBTUEtHU0ZYX0VORElBTn0iCitUVU5FX1BLR0FSQ0ggPSAiJHtNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS0ke0RFRkFVTFRUVU5FfX0ke01JUFNQS0dTRlhfRlBVfSR7TUlQU1BLR1NGWF9BQkl9IgorCisjIEJhc2UgdHVuZXMKK0FWQUlMVFVORVMgKz0gIm1pcHMgbWlwczY0LW4zMiBtaXBzNjQgbWlwc2VsIG1pcHM2NGVsLW4zMiBtaXBzNjRlbCBtaXBzLW5mIG1pcHM2NC1uZi1uMzIgbWlwczY0LW5mIG1pcHNlbC1uZiBtaXBzNjRlbC1uZi1uMzIgbWlwczY0ZWwtbmYiCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwcyA9ICJvMzIgYmlnZW5kaWFuIGZwdS1oYXJkIgorQkFTRV9MSUJfdHVuZS1taXBzID0gImxpYiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHMgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHMgPSAibWlwcyIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHM2NC1uMzIgPSAibjMyIGJpZ2VuZGlhbiBmcHUtaGFyZCIKK0JBU0VfTElCX3R1bmUtbWlwczY0LW4zMiA9ICJsaWIzMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NC1uMzIgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHM2NC1uMzIgPSAibWlwczY0LW4zMiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHM2NCA9ICJuNjQgYmlnZW5kaWFuIGZwdS1oYXJkIgorQkFTRV9MSUJfdHVuZS1taXBzNjQgPSAibGliNjQiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzNjQgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHM2NCA9ICJtaXBzNjQiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzZWwgPSAibzMyIGZwdS1oYXJkIgorQkFTRV9MSUJfdHVuZS1taXBzZWwgPSAibGliIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwc2VsID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzZWwgPSAibWlwc2VsIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0ZWwtbjMyID0gIm4zMiBmcHUtaGFyZCIKK0JBU0VfTElCX3R1bmUtbWlwczY0ZWwtbjMyID0gImxpYjMyIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczY0ZWwtbjMyID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjRlbC1uMzIgPSAibWlwczY0ZWwtbjMyIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0ZWwgPSAibjY0IGZwdS1oYXJkIgorQkFTRV9MSUJfdHVuZS1taXBzNjRlbCA9ICJsaWI2NCIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NGVsID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjRlbCA9ICJtaXBzNjRlbCIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHMtbmYgPSAibzMyIGJpZ2VuZGlhbiIKK0JBU0VfTElCX3R1bmUtbWlwcy1uZiA9ICJsaWIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzLW5mID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzLW5mID0gIm1pcHMtbmYiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjQtbmYtbjMyID0gIm4zMiBiaWdlbmRpYW4iCitCQVNFX0xJQl90dW5lLW1pcHM2NC1uZi1uMzIgPSAibGliMzIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzNjQtbmYtbjMyID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjQtbmYtbjMyID0gIm1pcHM2NC1uZi1uMzIiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjQtbmYgPSAibjY0IGJpZ2VuZGlhbiIKK0JBU0VfTElCX3R1bmUtbWlwczY0LW5mID0gImxpYjY0IgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczY0LW5mID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjQtbmYgPSAibWlwczY0LW5mIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwc2VsLW5mID0gIm8zMiIKK0JBU0VfTElCX3R1bmUtbWlwc2VsLW5mID0gImxpYiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHNlbC1uZiA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwc2VsLW5mID0gIm1pcHNlbC1uZiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHM2NGVsLW5mLW4zMiA9ICJuMzIiCitCQVNFX0xJQl90dW5lLW1pcHM2NGVsLW5mLW4zMiA9ICJsaWIzMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NGVsLW5mLW4zMiA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczY0ZWwtbmYtbjMyID0gIm1pcHM2NGVsLW5mLW4zMiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHM2NGVsLW5mID0gIm42NCIKK0JBU0VfTElCX3R1bmUtbWlwczY0ZWwtbmYgPSAibGliNjQiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzNjRlbC1uZiA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczY0ZWwtbmYgPSAibWlwczY0ZWwtbmYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9SRUFETUUgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg3ZmI1MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL1JFQURNRQpAQCAtMCwwICsxLDE3IEBACisyMDEyLzAzLzMwIC0gTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorICAtIEluaXRpYWwgcmV2aXNpb24KKworVGhlcmUgYXJlIDQgcHJpbWFyeSBQb3dlclBDIEFCSXMuCisjICopIEhhcmQvU29mdCBGbG9hdGluZyBQb2ludAorIyAqKSAzMi1iaXQvNjQtYml0CisKK1RVTkVfQVJDSCBpcyBkZWZpbmVkIGFzIGVpdGhlciAicG93ZXJwYyIgb3IgInBvd2VycGM2NCIgYmFzZWQgb24gdGhlIG0zMiAKK29yIG02NCBmZWF0dXJlLgorCitNYXkgb2YgdGhlIFBvd2VyUEMgcGFja2FnZSBhcmNoaWN0dXJlcyBhcmUgYmFzZWQgb24gbGVnYWN5IExpbnV4IG5hbWVzLgorSG93ZXZlciwgYSBnZW5lcmFsIG5hbWluZyBzY2hlbWUgc2hvdWxkIGJlIHNpbWlsYXIgdG86IHBwY1s2NF1bPGZhbWlseT5dWy1uZl0uCisoTm90ZTogdGhlIGRlZmF1bHQgcGFja2FnZSBhcmNoaXRlY3R1cmVzIGFyZSAicG93ZXJwYyIgYW5kICJwb3dlcnBjNjQiLikKKworVFVORV9QS0dBUkNIIGlzIGRlZmluZWQgYXMgVFVORV9QS0dBUkNIX3R1bmUtJHtERUZBVUxUVFVORX0uICBBbGwgCitQb3dlclBDIHR1bmluZ3MgYXJlIHJlcXVpcmVkIHRvIGRlZmluZSBUVU5FX1BLR0FSQ0hfdHVuZS08dHVuZT4uCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYy5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNmNhM2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGMuaW5jCkBAIC0wLDAgKzEsMzQgQEAKKyMgUG93ZXIgQXJjaGl0ZWN0dXJlIGRlZmluaXRpb24KKyMgRm91ciBkZWZpbmVkIEFCSXMsIGFsbCBjb21iaW5hdGlvbnMgb2Y6CisjICopIEhhcmQvU29mdCBGbG9hdGluZyBQb2ludAorIyAqKSAzMi1iaXQvNjQtYml0CisKK0RFRkFVTFRUVU5FID89ICJwb3dlcnBjIgorCitUVU5FX1BLR0FSQ0ggPSAiJHtUVU5FX1BLR0FSQ0hfdHVuZS0ke0RFRkFVTFRUVU5FfX0iCitBQklFWFRFTlNJT04gPz0gIiIKKworVFVORVZBTElEW20zMl0gPSAiUG93ZXIgRUxGMzIgc3RhbmRhcmQgQUJJIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm0zMiIsICIgLW0zMiIsICIiLCBkKX0iCitUVU5FX0FSQ0ggLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm0zMiIsICJwb3dlcnBjIiwgIiIsIGQpfSIKKworVFVORVZBTElEW2ZwdS1oYXJkXSA9ICJVc2UgaGFyZHdhcmUgRlBVLiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJmcHUtaGFyZCIsICIgLW1oYXJkLWZsb2F0IiwgIiIsIGQpfSIKKworVFVORVZBTElEW2ZwdS1zb2Z0XSA9ICJVc2Ugc29mdHdhcmUgRlBVLiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJmcHUtc29mdCIsICIgLW1zb2Z0LWZsb2F0IiwgIiIsIGQpfSIKK1RBUkdFVF9GUFUgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImZwdS1zb2Z0IiwgInNvZnQiLCAiIiwgZCl9IgorCitUVU5FVkFMSURbYWx0aXZlY10gPSAiQWx0aXZlYyIKKworIyBCYXNpYyB0dW5lIGRlZmluaXRpb25zCitBVkFJTFRVTkVTICs9ICJwb3dlcnBjIHBvd2VycGMtbmYiIAorVFVORV9GRUFUVVJFU190dW5lLXBvd2VycGMtbmYgPSAibTMyIGZwdS1zb2Z0IgorQkFTRV9MSUJfdHVuZS1wb3dlcnBjLW5mID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLXBvd2VycGMtbmYgPSAicG93ZXJwYy1uZiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjLW5mID0gInBvd2VycGMtbmYiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1wb3dlcnBjID0gIm0zMiBmcHUtaGFyZCIKK0JBU0VfTElCX3R1bmUtcG93ZXJwYyA9ICJsaWIiCitUVU5FX1BLR0FSQ0hfdHVuZS1wb3dlcnBjID0gInBvd2VycGMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwYyA9ICJwb3dlcnBjIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjNjQuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjNjQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NzZkZWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGM2NC5pbmMKQEAgLTAsMCArMSwxNCBAQAorREVGQVVMVFRVTkUgPz0gInBvd2VycGM2NCIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYy5pbmMKKworVFVORVZBTElEW202NF0gPSAiUG93ZXIgRUxGNjQgc3RhbmRhcmQgQUJJIgorVFVORUNPTkZMSUNUU1ttNjRdID0gIm0zMiBuZiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJtNjQiLCAiIC1tNjQiLCAiIiwgZCl9IgorVFVORV9BUkNIIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsIFsgIm02NCIgXSwgInBvd2VycGM2NCIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gInBvd2VycGM2NCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wb3dlcnBjNjQgPz0gIm02NCBmcHUtaGFyZCIKK0JBU0VfTElCX3R1bmUtcG93ZXJwYzY0ID0gImxpYjY0IgorVFVORV9QS0dBUkNIX3R1bmUtcG93ZXJwYzY0ID0gInBvd2VycGM2NCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjNjQgPSAicG93ZXJwYzY0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YzBiMzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKQEAgLTAsMCArMSwyOSBAQAorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwveHNlcnZlciA/PSAieHNlcnZlci14b3JnIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZWdsID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2wgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbGVzMSA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsZXMyID89ICJtZXNhIgorCitYU0VSVkVSID89ICJ4c2VydmVyLXhvcmcgXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnbWVzYS1kcml2ZXItc3dyYXN0JywgJycsIGQpfSBcCisgICAgICAgICAgICB4Zjg2LWlucHV0LWV2ZGV2IFwKKyAgICAgICAgICAgIHhmODYtaW5wdXQtbW91c2UgXAorICAgICAgICAgICAgeGY4Ni12aWRlby1mYmRldiBcCisgICAgICAgICAgICB4Zjg2LWlucHV0LWtleWJvYXJkIgorCitNQUNISU5FX0ZFQVRVUkVTID0gImFsc2EgYmx1ZXRvb3RoIHVzYmdhZGdldCBzY3JlZW4iCisKK01BQ0hJTkVPVkVSUklERVMgPS4gInFlbXVhbGw6IgorCitJTUFHRV9GU1RZUEVTICs9ICJ0YXIuYnoyIGV4dDQiCisKKyMgRG9uJ3QgaW5jbHVkZSBrZXJuZWxzIGluIHN0YW5kYXJkIGltYWdlcworUkRFUEVORFNfa2VybmVsLWJhc2UgPSAiIgorCisjIFVzZSBhIGNvbW1vbiBrZXJuZWwgcmVjaXBlIGZvciBhbGwgUUVNVSBtYWNoaW5lcworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJsaW51eC15b2N0byIKKworRVhUUkFfSU1BR0VERVBFTkRTICs9ICJxZW11LW5hdGl2ZSBxZW11LWhlbHBlci1uYXRpdmUiCisKKyMgUHJvdmlkZSB0aGUgbmZzIHNlcnZlciBrZXJuZWwgbW9kdWxlIGZvciBhbGwgcWVtdSBpbWFnZXMKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcG4tbGludXgteW9jdG8gPSAiIGZlYXR1cmVzL25mc2QvbmZzZC1lbmFibGUuc2NjIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3NoL1JFQURNRSBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9zaC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM1MWFjZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9zaC9SRUFETUUKQEAgLTAsMCArMSwxMSBAQAorMjAxMi8wMy8zMCAtIE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKyAtIEluaXRpYWwgUmV2aXNpb24KKworQm90aCBiaWcgZW5kaWFuIGFuZCBsaXR0bGUgZW5kaWFuIGFyZSBkZWZpbmVkIGZvciBTSC4KKworRXhwZXJpbWVudGFsIC0tIFNIIHR1bmluZ3MgaGF2ZSBub3QgYmVlbiB2YWxpZGF0ZWQuCisKK1RoZSBUVU5FX0FSQ0ggaXMgZGVmaW5lZCBhcyAke1RVTkVfQVJDSF90dW5lLSR7REVGQVVMVFRVTkV9fS4KKworVGhlIFRVTkVfUEtHQVJDSCBpcyBkZWZpbmQgYXMgJHtUVU5FX1BLR0FSQ0hfdHVuZS0ke0RFRkFVTFRUVU5FfX0uCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9zaC9hcmNoLXNoLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9zaC9hcmNoLXNoLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGQ0Y2FjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3NoL2FyY2gtc2guaW5jCkBAIC0wLDAgKzEsOSBAQAorIyBTSCBBcmNoaXRlY3R1cmUgZGVmaW5pdGlvbgorCitERUZBVUxUVFVORSA/PSAic2giCisKK1RVTkVfQVJDSCA9ICIke1RVTkVfQVJDSF90dW5lLSR7REVGQVVMVFRVTkV9fSIKK1RVTkVfUEtHQVJDSCA9ICIke1RVTkVfUEtHQVJDSF90dW5lLSR7REVGQVVMVFRVTkV9fSIKKworVFVORVZBTElEW2JpZ2VuZGlhbl0gPSAiRW5hYmxlZCBiaWctZW5kaWFuIG1vZGUuIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImJpZ2VuZGlhbiIsICIgLW1iIiwgIiAtbWwiLCBkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvc29jLWZhbWlseS5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvc29jLWZhbWlseS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZmMDg5OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9zb2MtZmFtaWx5LmluYwpAQCAtMCwwICsxLDMgQEAKKyMgQWRkIFNPQ19GQU1JTFkgdG8gbWFjaGluZSBvdmVycmlkZXMgc28gd2UgZ2V0IGFjY2VzcyB0byBlLmcuICdvbWFwMycgYW5kICd0aTMzNXgnCitTT0NfRkFNSUxZID8/PSAiIgorTUFDSElORU9WRVJSSURFUyA9LiAiJHtAWycnLCAnJHtTT0NfRkFNSUxZfTonXVsnJHtTT0NfRkFNSUxZfScgIT0gJyddfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTExMzZqZi1zLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTExMzZqZi1zLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTEzMWI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtMTEzNmpmLXMuaW5jCkBAIC0wLDAgKzEsMTEgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12NiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12Ni5pbmMKKworVFVORVZBTElEW2FybTExMzZqZnNdID0gIkVuYWJsZSBhcm0xMTM2amZzIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybTExMzZqZnMiLCAiIC1tdHVuZT1hcm0xMTM2amYtcyIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gImFybTExMzZqZnMiCitBUk1QS0dBUkNIX3R1bmUtYXJtMTEzNmpmcyA9ICJhcm0xMTM2amZzIgorVFVORV9GRUFUVVJFU190dW5lLWFybTExMzZqZnMgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ9IGFybTExMzZqZnMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtMTEzNmpmcyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12Nn0gYXJtMTEzNmpmcy12ZnAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05MjB0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTkyMHQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMmVhZTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05MjB0LmluYwpAQCAtMCwwICsxLDExIEBACitERUZBVUxUVFVORSA/PSAiYXJtdjR0IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY0LmluYworCitUVU5FVkFMSURbYXJtOTIwdF0gPSAiRW5hYmxlIGFybTkyMHQgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtOTIwdCIsICIgLW10dW5lPWFybTkyMHQiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJhcm05MjB0IgorQVJNUEtHQVJDSF90dW5lLWFybTkyMHQgPSAiYXJtOTIwdCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm05MjB0ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY0dH0gYXJtOTIwdCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm05MjB0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0dH0gYXJtOTIwdCBhcm05MjB0dCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTkyNmVqcy5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05MjZlanMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNWU0ZTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05MjZlanMuaW5jCkBAIC0wLDAgKzEsMTEgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12NXRlIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY1LWRzcC5pbmMKKworVFVORVZBTElEW2FybTkyNmVqc10gPSAiRW5hYmxlIGFybTkyNmVqcyBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm05MjZlanMiLCAiIC1tdHVuZT1hcm05MjZlai1zIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAiYXJtOTI2ZWpzIgorQVJNUEtHQVJDSF90dW5lLWFybTkyNmVqcyA9ICJhcm05MjZlanMiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtOTI2ZWpzID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1dGV9IGFybTkyNmVqcyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm05MjZlanMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZX0gYXJtOTI2ZWpzdGUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05dGRtaS5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05dGRtaS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVlNTdjOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTl0ZG1pLmluYwpAQCAtMCwwICsxLDExIEBACitERUZBVUxUVFVORSA/PSAiYXJtdjR0IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY0LmluYworCitUVU5FVkFMSURbYXJtOXRkbWldID0gIkVuYWJsZSBhcm05dGRtaSBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm05dGRtaSIsICIgLW10dW5lPWFybTl0ZG1pIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAiYXJtOXRkbWkiCitBUk1QS0dBUkNIX3R1bmUtYXJtOXRkbWkgPSAiYXJtOXRkbWkiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtOXRkbWkgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjR0fSBhcm05dGRtaSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm05dGRtaSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NHR9IGFybTl0ZG1pdCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWF0b20uaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXRvbS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUxYmI3NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWF0b20uaW5jCkBAIC0wLDAgKzEsMiBAQAorIyBBdG9tIHR1bmluZ3MgYXJlIHRoZSBzYW1lIGFzIGNvcmUyIGZvciBub3cuLi4KK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlMi5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWMzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWMzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWZjMjhhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYzMuaW5jCkBAIC0wLDAgKzEsMTIgQEAKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2L2FyY2gteDg2LmluYworCitUVU5FVkFMSURbYzNdID0gIlZJQSBDeXJpeCBJSUkgb3IgVklBIEMzIHNwZWNpZmljIG9wdGltaXphdGlvbnMiCitUVU5FQ09ORkxJQ1RTW2MzXSA9ICJtNjQgbXgzMiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjMyIsICIgLW1hcmNoPWMzIC1tdHVuZT1jMyIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gImMzIgorVFVORV9GRUFUVVJFU190dW5lLWMzID0gIiR7VFVORV9GRUFUVVJFU190dW5lLXg4Nn0gYzMiCitCQVNFX0xJQlNfdHVuZS1jMyA9ICIke0JBU0VfTElCX3R1bmUteDg2fSIKKyMgVGhlIGZvbGxvd2luZyBzaG91bGQgbGlrZWx5IGJlIHNvbWV0aGluZyBvdGhlciB0aGVuIGk1ODYuLi4KK1RVTkVfUEtHQVJDSF90dW5lLWMzID0gImk1ODYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYzMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUteDg2fSBpMzg2IGk0ODYgaTU4NiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmUyLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmUyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTRjYjcwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZTIuaW5jCkBAIC0wLDAgKzEsMzggQEAKKyMgU2V0dGluZ3MgZm9yIHRoZSBHQ0MoMSkgY3B1LXR5cGUgImNvcmUyIjoKKyMKKyMgICAgICBJbnRlbCBDb3JlMiBDUFUgd2l0aCA2NC1iaXQgZXh0ZW5zaW9ucywgTU1YLCBTU0UsIFNTRTIsIFNTRTMgYW5kIFNTU0UzCisjICAgICAgaW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuCisjCisjIFRoaXMgdHVuZSBpcyByZWNvbW1lbmRlZCBmb3IgdGhlIEludGVsIENvcmUgMiBDUFUgZmFtaWx5LCBpbmNsdWRpbmcgQ29ucm9lLAorIyBNZXJvbSBhbmQgYmV5b25kLCBhcyB3ZWxsIGFzIHRoZSBmaXJzdCBBdG9tIENQVXMsIERpYW1vbmR2aWxsZSwgYW5kIGJleW9uZC4KKyMKK0RFRkFVTFRUVU5FID89ICJjb3JlMi0zMiIKKworIyBTZXQgeDg2IHRhcmdldCBhcmNoIHRvIGk2ODYsIHNvIHRoYXQgZ2xpYmMgZW5hYmxlcyBTU0Ugb3B0aW1pc2VkIG1lbWNweSwgZXRjLgorWDg2QVJDSDMyID89ICJpNjg2IgorCisjIEluY2x1ZGUgdGhlIHByZXZpb3VzIHR1bmUgdG8gcHVsbCBpbiBQQUNLQUdFX0VYVFJBX0FSQ0hTCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaTU4Ni5pbmMKKworIyBFeHRyYSB0dW5lIGZlYXR1cmVzCitUVU5FVkFMSURbY29yZTJdID0gIkVuYWJsZSBjb3JlMiBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3JlMiIsICIgLW1hcmNoPWNvcmUyIC1tdHVuZT1jb3JlMiAtbXNzZTMgLW1mcG1hdGg9c3NlIiwgIiIsIGQpfSIKKworIyBFeHRyYSB0dW5lIHNlbGVjdGlvbnMKK0FWQUlMVFVORVMgKz0gImNvcmUyLTMyIgorVFVORV9GRUFUVVJFU190dW5lLWNvcmUyLTMyID0gIiR7VFVORV9GRUFUVVJFU190dW5lLXg4Nn0gY29yZTIiCitCQVNFX0xJQl90dW5lLWNvcmUyLTMyID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLWNvcmUyLTMyID0gImNvcmUyLTMyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmUyLTMyID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWk1ODZ9IGNvcmUyLTMyIgorCitBVkFJTFRVTkVTICs9ICJjb3JlMi02NCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3JlMi02NCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS14ODYtNjR9IGNvcmUyIgorQkFTRV9MSUJfdHVuZS1jb3JlMi02NCA9ICJsaWI2NCIKK1RVTkVfUEtHQVJDSF90dW5lLWNvcmUyLTY0ID0gImNvcmUyLTY0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmUyLTY0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXg4Ni02NH0gY29yZTItNjQiCisKK0FWQUlMVFVORVMgKz0gImNvcmUyLTY0LXgzMiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3JlMi02NC14MzIgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUteDg2LTY0LXgzMn0gY29yZTIiCitCQVNFX0xJQl90dW5lLWNvcmUyLTY0LXgzMiA9ICJsaWJ4MzIiCitUVU5FX1BLR0FSQ0hfdHVuZS1jb3JlMi02NC14MzIgPSAiY29yZTItNjQteDMyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmUyLTY0LXgzMiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS14ODYtNjQteDMyfSBjb3JlMi02NC14MzIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlaTcuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZWk3LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmNmOTMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZWk3LmluYwpAQCAtMCwwICsxLDM1IEBACisjIFNldHRpbmdzIGZvciB0aGUgR0NDKDEpIGNwdS10eXBlICJjb3JlaTciOgorIworIyAgICAgSW50ZWwgQ29yZSBpNyBDUFUgd2l0aCA2NC1iaXQgZXh0ZW5zaW9ucywgTU1YLCBTU0UsIFNTRTIsIFNTRTMsIFNTU0UzLCBTU0U0LjEKKyMgICAgIGFuZCBTU0U0LjIgaW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuCisjCisjIFRoaXMgdHVuZSBpcyByZWNvbW1lbmRlZCBmb3IgSW50ZWwgTmVoYWxlbSBhbmQgU2lsdmVybW9udCAoZS5nLiBCYXkgVHJhaWwpIENQVXMKKyMgKGFuZCBiZXlvbmQpLgorIworREVGQVVMVFRVTkUgPz0gImNvcmVpNy02NCIKKworIyBQdWxsIGluIHRoZSBwcmV2aW91cyB0dW5lIGluIHRvIHB1bGwgaW4gUEFDS0FHRV9FWFRSQV9BUkNIUworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmUyLmluYworCisjIEV4dHJhIHR1bmUgZmVhdHVyZXMKK1RVTkVWQUxJRFtjb3JlaTddID0gIkVuYWJsZSBjb3JlaTcgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29yZWk3IiwgIiAtbWFyY2g9Y29yZWk3IC1tdHVuZT1jb3JlaTcgLW1mcG1hdGg9c3NlIC1tc3NlNC4yIiwgIiIsIGQpfSIKKworIyBFeHRyYSB0dW5lIHNlbGVjdGlvbnMKK0FWQUlMVFVORVMgKz0gImNvcmVpNy0zMiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3JlaTctMzIgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUteDg2fSBjb3JlaTciCitCQVNFX0xJQl90dW5lLWNvcmVpNy0zMiA9ICJsaWIiCitUVU5FX1BLR0FSQ0hfdHVuZS1jb3JlaTctMzIgPSAiY29yZWk3LTMyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmVpNy0zMiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3JlMn0gY29yZWk3LTMyIgorCitBVkFJTFRVTkVTICs9ICJjb3JlaTctNjQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29yZWk3LTY0ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLXg4Ni02NH0gY29yZWk3IgorQkFTRV9MSUJfdHVuZS1jb3JlaTctNjQgPSAibGliNjQiCitUVU5FX1BLR0FSQ0hfdHVuZS1jb3JlaTctNjQgPSAiY29yZWk3LTY0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmVpNy02NCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3JlMi02NH0gY29yZWk3LTY0IgorCitBVkFJTFRVTkVTICs9ICJjb3JlaTctNjQteDMyIgorVFVORV9GRUFUVVJFU190dW5lLWNvcmVpNy02NC14MzIgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUteDg2LTY0LXgzMn0gY29yZWk3IgorQkFTRV9MSUJfdHVuZS1jb3JlaTctNjQteDMyID0gImxpYngzMiIKK1RVTkVfUEtHQVJDSF90dW5lLWNvcmVpNy02NC14MzIgPSAiY29yZWk3LTY0LXgzMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3JlaTctNjQteDMyID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmUyLTY0LXgzMn0gY29yZWk3LTY0LXgzMiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGExNS5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhMTUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1Mjk3NzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhMTUuaW5jCkBAIC0wLDAgKzEsMzYgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12N2EtbmVvbiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12N2EuaW5jCisKK1RVTkVWQUxJRFtjb3J0ZXhhMTVdID0gIkVuYWJsZSBDb3J0ZXgtQTE1IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImNvcnRleGExNSIsICIgLW10dW5lPWNvcnRleC1hMTUiLCAiIiwgZCl9IgorCisjIExpdHRsZSBFbmRpYW4gYmFzZSBjb25maWdzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhMTUgY29ydGV4YTE1dCBjb3J0ZXhhMTUtbmVvbiBjb3J0ZXhhMTV0LW5lb24iCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE1ID0gImNvcnRleGExNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTV0ID0gImNvcnRleGExNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTUtbmVvbiA9ICJjb3J0ZXhhMTUiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE1dC1uZW9uID0gImNvcnRleGExNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTUgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhfSBjb3J0ZXhhMTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE1dCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhMTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE1LW5lb24gPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLW5lb259IGNvcnRleGExNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTV0LW5lb24gPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC1uZW9ufSBjb3J0ZXhhMTUiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE1ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YX0gY29ydGV4YTE1LXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTV0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXR9IGNvcnRleGExNS12ZnAgY29ydGV4YTE1dDItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExNS1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YS1uZW9ufSBjb3J0ZXhhMTUtdmZwIGNvcnRleGExNS12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTV0LW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdC1uZW9ufSBjb3J0ZXhhMTUtdmZwIGNvcnRleGExNS12ZnAtbmVvbiBjb3J0ZXhhMTV0Mi12ZnAgY29ydGV4YTE1dDItdmZwLW5lb24iCisKKyMgVkZQIFR1bmVzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhMTVoZiBjb3J0ZXhhMTV0aGYgY29ydGV4YTE1aGYtbmVvbiBjb3J0ZXhhMTV0aGYtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTVoZiA9ICJjb3J0ZXhhMTUiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE1dGhmID0gImNvcnRleGExNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTVoZi1uZW9uID0gImNvcnRleGExNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTV0aGYtbmVvbiA9ICJjb3J0ZXhhMTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE1aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmfSBjb3J0ZXhhMTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE1dGhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGExNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTVoZi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZi1uZW9ufSBjb3J0ZXhhMTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE1dGhmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi1uZW9ufSBjb3J0ZXhhMTUiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE1aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGExNWhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTV0aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmfSBjb3J0ZXhhMTVoZi12ZnAgY29ydGV4YTE1dDJoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE1aGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZi1uZW9ufSBjb3J0ZXhhMTVoZi12ZnAgY29ydGV4YTE1aGYtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE1dGhmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLW5lb259IGNvcnRleGExNWhmLXZmcCBjb3J0ZXhhMTVoZi12ZnAtbmVvbiBjb3J0ZXhhMTV0MmhmLXZmcCBjb3J0ZXhhMTV0MmhmLXZmcC1uZW9uIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTE3LmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGExNy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZjNzEyNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGExNy5pbmMKQEAgLTAsMCArMSwzNiBAQAorREVGQVVMVFRVTkUgPz0gImFybXY3YS1uZW9uIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY3YS5pbmMKKworVFVORVZBTElEW2NvcnRleGExN10gPSAiRW5hYmxlIENvcnRleC1BMTcgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29ydGV4YTE3IiwgIiAtbXR1bmU9Y29ydGV4LWExNyIsICIiLCBkKX0iCisKKyMgTGl0dGxlIEVuZGlhbiBiYXNlIGNvbmZpZ3MKK0FWQUlMVFVORVMgKz0gImNvcnRleGExNyBjb3J0ZXhhMTd0IGNvcnRleGExNy1uZW9uIGNvcnRleGExN3QtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTcgPSAiY29ydGV4YTE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExN3QgPSAiY29ydGV4YTE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExNy1uZW9uID0gImNvcnRleGExNyIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTd0LW5lb24gPSAiY29ydGV4YTE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExNyA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IGNvcnRleGExNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTd0ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXR9IGNvcnRleGExNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTctbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExN3QtbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGExNyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTcgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhfSBjb3J0ZXhhMTctdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExN3QgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdH0gY29ydGV4YTE3LXZmcCBjb3J0ZXhhMTd0Mi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE3LW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhLW5lb259IGNvcnRleGExNy12ZnAgY29ydGV4YTE3LXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExN3QtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGExNy12ZnAgY29ydGV4YTE3LXZmcC1uZW9uIGNvcnRleGExN3QyLXZmcCBjb3J0ZXhhMTd0Mi12ZnAtbmVvbiIKKworIyBWRlAgVHVuZXMKK0FWQUlMVFVORVMgKz0gImNvcnRleGExN2hmIGNvcnRleGExN3RoZiBjb3J0ZXhhMTdoZi1uZW9uIGNvcnRleGExN3RoZi1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExN2hmID0gImNvcnRleGExNyIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTd0aGYgPSAiY29ydGV4YTE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExN2hmLW5lb24gPSAiY29ydGV4YTE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExN3RoZi1uZW9uID0gImNvcnRleGExNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTdoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGExNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTd0aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZn0gY29ydGV4YTE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExN2hmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGExNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTd0aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb259IGNvcnRleGExNyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTdoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZn0gY29ydGV4YTE3aGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExN3RoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGExN2hmLXZmcCBjb3J0ZXhhMTd0MmhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTdoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGExN2hmLXZmcCBjb3J0ZXhhMTdoZi12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTd0aGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtbmVvbn0gY29ydGV4YTE3aGYtdmZwIGNvcnRleGExN2hmLXZmcC1uZW9uIGNvcnRleGExN3QyaGYtdmZwIGNvcnRleGExN3QyaGYtdmZwLW5lb24iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhNS5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhNS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM5ZTY1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE1LmluYwpAQCAtMCwwICsxLDM2IEBACitERUZBVUxUVFVORSA/PSAiYXJtdjdhLW5lb24iCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYworCitUVU5FVkFMSURbY29ydGV4YTVdID0gIkVuYWJsZSBDb3J0ZXgtQTUgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29ydGV4YTUiLCAiIC1tdHVuZT1jb3J0ZXgtYTUiLCAiIiwgZCl9IgorCisjIExpdHRsZSBFbmRpYW4gYmFzZSBjb25maWdzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhNSBjb3J0ZXhhNXQgY29ydGV4YTUtbmVvbiBjb3J0ZXhhNXQtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhNSA9ICJjb3J0ZXhhNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhNXQgPSAiY29ydGV4YTUiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTUtbmVvbiA9ICJjb3J0ZXhhNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhNXQtbmVvbiA9ICJjb3J0ZXhhNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhNSA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IGNvcnRleGE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE1dCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhNS1uZW9uID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS1uZW9ufSBjb3J0ZXhhNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhNXQtbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGE1IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE1ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YX0gY29ydGV4YTUtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE1dCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhNS12ZnAgY29ydGV4YTV0Mi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTUtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTUtdmZwIGNvcnRleGE1LXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE1dC1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXQtbmVvbn0gY29ydGV4YTUtdmZwIGNvcnRleGE1LXZmcC1uZW9uIGNvcnRleGE1dDItdmZwIGNvcnRleGE1dDItdmZwLW5lb24iCisKKyMgVkZQIFR1bmVzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhNWhmIGNvcnRleGE1dGhmIGNvcnRleGE1aGYtbmVvbiBjb3J0ZXhhNXRoZi1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE1aGYgPSAiY29ydGV4YTUiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTV0aGYgPSAiY29ydGV4YTUiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTVoZi1uZW9uID0gImNvcnRleGE1IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE1dGhmLW5lb24gPSAiY29ydGV4YTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTVoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE1dGhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE1aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTV0aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb259IGNvcnRleGE1IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE1aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGE1aGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE1dGhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZn0gY29ydGV4YTVoZi12ZnAgY29ydGV4YTV0MmhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhNWhmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YTVoZi12ZnAgY29ydGV4YTVoZi12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhNXRoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZi1uZW9ufSBjb3J0ZXhhNWhmLXZmcCBjb3J0ZXhhNWhmLXZmcC1uZW9uIGNvcnRleGE1dDJoZi12ZnAgY29ydGV4YTV0MmhmLXZmcC1uZW9uIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTcuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMDY5MTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhNy5pbmMKQEAgLTAsMCArMSw0MiBAQAorREVGQVVMVFRVTkUgPz0gImFybXY3YS1uZW9uIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY3YS5pbmMKKworVFVORVZBTElEW2NvcnRleGE3XSA9ICJFbmFibGUgQ29ydGV4LUE3IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImNvcnRleGE3IiwgIiAtbXR1bmU9Y29ydGV4LWE3IiwgIiIsIGQpfSIKKworIyBMaXR0bGUgRW5kaWFuIGJhc2UgY29uZmlncworQVZBSUxUVU5FUyArPSAiY29ydGV4YTcgY29ydGV4YTd0IGNvcnRleGE3LW5lb24gY29ydGV4YTd0LW5lb24iCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTcgPSAiY29ydGV4YTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTd0ID0gImNvcnRleGE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE3LW5lb24gPSAiY29ydGV4YTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTd0LW5lb24gPSAiY29ydGV4YTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTcgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhfSBjb3J0ZXhhNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhN3QgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdH0gY29ydGV4YTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTctbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTd0LW5lb24gPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC1uZW9ufSBjb3J0ZXhhNyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhNyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F9IGNvcnRleGE3LXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhN3QgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdH0gY29ydGV4YTctdmZwIGNvcnRleGE3dDItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE3LW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhLW5lb259IGNvcnRleGE3LXZmcCBjb3J0ZXhhNy12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhN3QtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGE3LXZmcCBjb3J0ZXhhNy12ZnAtbmVvbiBjb3J0ZXhhN3QyLXZmcCBjb3J0ZXhhN3QyLXZmcC1uZW9uIgorCisjIFZGUCBUdW5lcworQVZBSUxUVU5FUyArPSAiY29ydGV4YTdoZiBjb3J0ZXhhN3RoZiBjb3J0ZXhhN2hmLW5lb24gY29ydGV4YTd0aGYtbmVvbiBjb3J0ZXhhN2hmLW5lb24tdmZwdjQgY29ydGV4YTd0aGYtbmVvbi12ZnB2NCIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhN2hmID0gImNvcnRleGE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE3dGhmID0gImNvcnRleGE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE3aGYtbmVvbiA9ICJjb3J0ZXhhNyIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhN3RoZi1uZW9uID0gImNvcnRleGE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE3aGYtbmVvbi12ZnB2NCA9ICJjb3J0ZXhhNyIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhN3RoZi1uZW9uLXZmcHY0ID0gImNvcnRleGE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE3aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmfSBjb3J0ZXhhNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhN3RoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmfSBjb3J0ZXhhNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhN2hmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE3dGhmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi1uZW9ufSBjb3J0ZXhhNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhN2hmLW5lb24tdmZwdjQgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLW5lb24tdmZwdjR9IGNvcnRleGE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE3dGhmLW5lb24tdmZwdjQgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi1uZW9uLXZmcHY0fSBjb3J0ZXhhNyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhN2hmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmfSBjb3J0ZXhhN2hmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhN3RoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGE3aGYtdmZwIGNvcnRleGE3dDJoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTdoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGE3aGYtdmZwIGNvcnRleGE3aGYtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTd0aGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtbmVvbn0gY29ydGV4YTdoZi12ZnAgY29ydGV4YTdoZi12ZnAtbmVvbiBjb3J0ZXhhN3QyaGYtdmZwIGNvcnRleGE3dDJoZi12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhN2hmLW5lb24tdmZwdjQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtbmVvbi12ZnB2NH0gY29ydGV4YTdoZi12ZnAgY29ydGV4YTdoZi12ZnAtbmVvbiBjb3J0ZXhhN2hmLXZmcC12ZnB2NC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE3dGhmLW5lb24tdmZwdjQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLW5lb24tdmZwdjR9IGNvcnRleGE3aGYtdmZwIGNvcnRleGE3aGYtdmZwLW5lb24gY29ydGV4YTd0MmhmLXZmcCBjb3J0ZXhhN3QyaGYtdmZwLW5lb24gY29ydGV4YTdoZi12ZnAtdmZwdjQtbmVvbiBjb3J0ZXhhN3QyaGYtdmZwLXZmcHY0LW5lb24iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhOC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhOC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcxNTM3ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE4LmluYwpAQCAtMCwwICsxLDM2IEBACitERUZBVUxUVFVORSA/PSAiYXJtdjdhLW5lb24iCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYworCitUVU5FVkFMSURbY29ydGV4YThdID0gIkVuYWJsZSBDb3J0ZXgtQTggc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29ydGV4YTgiLCAiIC1tdHVuZT1jb3J0ZXgtYTgiLCAiIiwgZCl9IgorCisjIExpdHRsZSBFbmRpYW4gYmFzZSBjb25maWdzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhOCBjb3J0ZXhhOHQgY29ydGV4YTgtbmVvbiBjb3J0ZXhhOHQtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOCA9ICJjb3J0ZXhhOCIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOHQgPSAiY29ydGV4YTgiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTgtbmVvbiA9ICJjb3J0ZXhhOCIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOHQtbmVvbiA9ICJjb3J0ZXhhOCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IGNvcnRleGE4IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE4dCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhOCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOC1uZW9uID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS1uZW9ufSBjb3J0ZXhhOCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOHQtbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGE4IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE4ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YX0gY29ydGV4YTgtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE4dCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhOC12ZnAgY29ydGV4YTh0Mi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTgtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTgtdmZwIGNvcnRleGE4LXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE4dC1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXQtbmVvbn0gY29ydGV4YTgtdmZwIGNvcnRleGE4LXZmcC1uZW9uIGNvcnRleGE4dDItdmZwIGNvcnRleGE4dDItdmZwLW5lb24iCisKKyMgVkZQIFR1bmVzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhOGhmIGNvcnRleGE4dGhmIGNvcnRleGE4aGYtbmVvbiBjb3J0ZXhhOHRoZi1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE4aGYgPSAiY29ydGV4YTgiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTh0aGYgPSAiY29ydGV4YTgiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YThoZi1uZW9uID0gImNvcnRleGE4IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE4dGhmLW5lb24gPSAiY29ydGV4YTgiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YThoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGE4IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE4dGhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGE4IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE4aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YTgiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTh0aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb259IGNvcnRleGE4IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE4aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGE4aGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE4dGhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZn0gY29ydGV4YThoZi12ZnAgY29ydGV4YTh0MmhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOGhmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YThoZi12ZnAgY29ydGV4YThoZi12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOHRoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZi1uZW9ufSBjb3J0ZXhhOGhmLXZmcCBjb3J0ZXhhOGhmLXZmcC1uZW9uIGNvcnRleGE4dDJoZi12ZnAgY29ydGV4YTh0MmhmLXZmcC1uZW9uIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTkuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTkuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMDM5NGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhOS5pbmMKQEAgLTAsMCArMSwzNiBAQAorREVGQVVMVFRVTkUgPz0gImFybXY3YS1uZW9uIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY3YS5pbmMKKworVFVORVZBTElEW2NvcnRleGE5XSA9ICJFbmFibGUgQ29ydGV4LUE5IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImNvcnRleGE5IiwgIiAtbXR1bmU9Y29ydGV4LWE5IiwgIiIsIGQpfSIKKworIyBMaXR0bGUgRW5kaWFuIGJhc2UgY29uZmlncworQVZBSUxUVU5FUyArPSAiY29ydGV4YTkgY29ydGV4YTl0IGNvcnRleGE5LW5lb24gY29ydGV4YTl0LW5lb24iCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTkgPSAiY29ydGV4YTkiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTl0ID0gImNvcnRleGE5IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE5LW5lb24gPSAiY29ydGV4YTkiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTl0LW5lb24gPSAiY29ydGV4YTkiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTkgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhfSBjb3J0ZXhhOSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOXQgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdH0gY29ydGV4YTkiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTktbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTkiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTl0LW5lb24gPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC1uZW9ufSBjb3J0ZXhhOSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F9IGNvcnRleGE5LXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOXQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdH0gY29ydGV4YTktdmZwIGNvcnRleGE5dDItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE5LW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhLW5lb259IGNvcnRleGE5LXZmcCBjb3J0ZXhhOS12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOXQtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGE5LXZmcCBjb3J0ZXhhOS12ZnAtbmVvbiBjb3J0ZXhhOXQyLXZmcCBjb3J0ZXhhOXQyLXZmcC1uZW9uIgorCisjIFZGUCBUdW5lcworQVZBSUxUVU5FUyArPSAiY29ydGV4YTloZiBjb3J0ZXhhOXRoZiBjb3J0ZXhhOWhmLW5lb24gY29ydGV4YTl0aGYtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOWhmID0gImNvcnRleGE5IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE5dGhmID0gImNvcnRleGE5IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE5aGYtbmVvbiA9ICJjb3J0ZXhhOSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOXRoZi1uZW9uID0gImNvcnRleGE5IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE5aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmfSBjb3J0ZXhhOSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOXRoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmfSBjb3J0ZXhhOSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOWhmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGE5IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE5dGhmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi1uZW9ufSBjb3J0ZXhhOSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOWhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmfSBjb3J0ZXhhOWhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOXRoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGE5aGYtdmZwIGNvcnRleGE5dDJoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTloZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGE5aGYtdmZwIGNvcnRleGE5aGYtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTl0aGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtbmVvbn0gY29ydGV4YTloZi12ZnAgY29ydGV4YTloZi12ZnAtbmVvbiBjb3J0ZXhhOXQyaGYtdmZwIGNvcnRleGE5dDJoZi12ZnAtbmVvbiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleG0xLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleG0xLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjY1Mjc5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4bTEuaW5jCkBAIC0wLDAgKzEsMTEgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12N2EiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYworCitUVU5FVkFMSURbY29ydGV4bTFdID0gIkVuYWJsZSBDb3J0ZXgtTTEgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29ydGV4bTEiLCAiIC1tdHVuZT1jb3J0ZXgtbTEiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhtMSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhtMSA9ICJjb3J0ZXhtMSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhtMSA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IGNvcnRleG0xIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleG0xID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXR9IGNvcnRleG0xLXZmcCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleG0zLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleG0zLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmM0YzBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4bTMuaW5jCkBAIC0wLDAgKzEsMTQgQEAKK0RFRkFVTFRUVU5FID89ICJjb3J0ZXhtMyIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12N2EuaW5jCisKK1RVTkVWQUxJRFtjb3J0ZXhtM10gPSAiRW5hYmxlIENvcnRleC1NMyBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3J0ZXhtMyIsICIgLW10dW5lPWNvcnRleC1tMyIsICIiLCBkKX0iCisKK1RVTkVWQUxJRFthcm12N21dID0gIkVuYWJsZSBDb3J0ZXgtTTMgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjdtIiwgIiAtbWFyY2g9YXJtdjctbSIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gImNvcnRleG0zIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleG0zID0gImFybXY3bSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhtMyA9ICJhcm12N20gdmZwIGNvcnRleG0zIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleG0zID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXR9IGFybXY3bS12ZnAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhyNC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhyNC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRlNjQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleHI0LmluYwpAQCAtMCwwICsxLDE0IEBACitERUZBVUxUVFVORSA/PSAiY29ydGV4cjQiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYworCitUVU5FVkFMSURbY29ydGV4cjRdID0gIkVuYWJsZSBDb3J0ZXgtUjQgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29ydGV4cjQiLCAiIC1tdHVuZT1jb3J0ZXgtcjQiLCAiIiwgZCl9IgorCitUVU5FVkFMSURbYXJtdjdyXSA9ICJFbmFibGUgQ29ydGV4LVI0IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybXY3ciIsICIgLW1hcmNoPWFybXY3LXIiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhyNCIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhyNCA9ICJhcm12N3IiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4cjQgPSAiYXJtdjdyIHZmcCBjb3J0ZXhyNCBhcm0gdGh1bWIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4cjQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdH0gYXJtdjdyLXZmcCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWVwOTMxMi5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1lcDkzMTIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxOWI0MzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1lcDkzMTIuaW5jCkBAIC0wLDAgKzEsMTIgQEAKK0RFRkFVTFRUVU5FID89ICJlcDkzMTIiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjQuaW5jCisKK1RVTkVWQUxJRFtlcDkzMTJdID0gIkVuYWJsZSBJbnRlbCBQWEEyN3ggc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZXA5MzEyIiwgIiAtbWFyY2g9ZXA5MzEyIC1tdHVuZT1lcDkzMTIiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJlcDkzMTIiCitBUk1QS0dBUkNIX3R1bmUtZXA5MzEyID0gImVwOTMxMiIKKyMgdGhpcyB0dW5lIGRvZXMgbm90IGluY2x1ZGUgVFVORV9GRUFUVVJFU190dW5lLWFybXY0dCwgc28gdGhlcmUgaXMgbm8gYXJtdjQgVFVORV9GRUFUVVJFUyA9PiBubyAndCcgaW4gQVJNUEtHU0ZYX1RIVU1CCitUVU5FX0ZFQVRVUkVTX3R1bmUtZXA5MzEyID0gInRodW1iIGVwOTMxMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1lcDkzMTIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjR0fSBlcDkzMTIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pNTg2LW5scC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pNTg2LW5scC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMwNjAyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWk1ODYtbmxwLmluYwpAQCAtMCwwICsxLDE5IEBACisjIFNldHRpbmdzIGZvciB0aGUgR0NDKDEpIGNwdS10eXBlICJxdWFyayI6CisjCisjCisjCitERUZBVUxUVFVORSA/PSAiaTU4Ni1ubHAtMzIiCisKKyMgSW5jbHVkZSB0aGUgcHJldmlvdXMgdHVuZSB0byBwdWxsIGluIFBBQ0tBR0VfRVhUUkFfQVJDSFMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2L2FyY2gteDg2LmluYworCisjIHg4NiB3aXRoIG5vIGxvY2sgcHJlZml4CitUVU5FVkFMSURbaTU4Ni1ubHBdID0gIklBMzIgd2l0aCBMb2NrIFByZWZpeCBvbWl0dGVkIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImk1ODYtbmxwIiwgIiAtbWFyY2g9aTU4NiAtV2EsLW1vbWl0LWxvY2stcHJlZml4PXllcyIsICIiLCBkKX0iCisKKyMgUXVhcmsgdHVuZSBmZWF0dXJlCitBVkFJTFRVTkVTID0gImk1ODYtbmxwLTMyIgorVFVORV9GRUFUVVJFU190dW5lLWk1ODYtbmxwLTMyID0gIiR7VFVORV9GRUFUVVJFU190dW5lLXg4Nn0gaTU4Ni1ubHAiCitCQVNFX0xJQl90dW5lLWk1ODYtbmxwLTMyID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLWk1ODYtbmxwLTMyID0gImk1ODYtbmxwLTMyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWk1ODYtbmxwLTMyID0gImk1ODYtbmxwLTMyIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaTU4Ni5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pNTg2LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmJiM2M3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaTU4Ni5pbmMKQEAgLTAsMCArMSwxNCBAQAorREVGQVVMVFRVTkUgPz0gImk1ODYiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2L2FyY2gteDg2LmluYworCisjIEV4dHJhIHR1bmUgZmVhdHVyZXMKK1RVTkVWQUxJRFtpNTg2XSA9ICJFbmFibGUgaTU4NiBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJpNTg2IiwgIiAtbWFyY2g9aTU4NiIsICIiLCBkKX0iCisKKyMgRXh0cmEgdHVuZSBzZWxlY3Rpb25zCitBVkFJTFRVTkVTICs9ICJpNTg2IgorVFVORV9GRUFUVVJFU190dW5lLWk1ODYgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUteDg2fSBpNTg2IgorQkFTRV9MSUJfdHVuZS1pNTg2ID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLWk1ODYgPSAiaTU4NiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1pNTg2ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXg4Nn0gaTU4NiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWl3bW14dC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pd21teHQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0OGNhMGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pd21teHQuaW5jCkBAIC0wLDAgKzEsMTQgQEAKKyMgQ29uZmlndXJhdGlvbnMgZm9yIHRoZSBJbnRlbCBQWEEyN3ggQXBwaWNhdGlvbnMgUHJvY2Vzc29yIEZhbWlseS4gCisjIFBsZWFzZSB1c2UgdHVuZS14c2NhbGUgZm9yIFBYQTI1NS9QWEEyNnggYmFzZWQgcHJvY2Vzc29ycy4KKworREVGQVVMVFRVTkUgPz0gIml3bW14dCIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NS1kc3AuaW5jCisKK1RVTkVWQUxJRFtpd21teHRdID0gIkVuYWJsZSBJbnRlbCBQWEEyN3ggc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiaXdtbXh0IiwgIiAtbWFyY2g9aXdtbXh0IC1tdHVuZT1pd21teHQiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJpd21teHQiCitBUk1QS0dBUkNIX3R1bmUtaXdtbXh0ID0gIml3bW14dCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1pd21teHQgPSAidGh1bWIgaXdtbXh0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWl3bW14dCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlfSBpd21teHQgaXdtbXh0dCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMi5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMzI2Y2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzIuaW5jCkBAIC0wLDAgKzEsMjUgQEAKK0RFRkFVTFRUVU5FID89ICJtaXBzMzIiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvbWlwcy9hcmNoLW1pcHMuaW5jCisKK1RVTkVWQUxJRFttaXBzMzJdID0gIkVuYWJsZSBtaXBzMzIgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FQ09ORkxJQ1RTW21pcHMzMl0gPSAibjY0IG4zMiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJtaXBzMzIiLCAiIC1tYXJjaD1taXBzMzIiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJtaXBzMzIgbWlwczMyZWwgbWlwczMyLW5mIG1pcHMzMmVsLW5mIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczMyID0gIiR7VFVORV9GRUFUVVJFU190dW5lLW1pcHN9IG1pcHMzMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHMzMiA9ICJtaXBzMzIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczMyID0gIm1pcHMgbWlwczMyIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczMyZWwgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwc2VsfSBtaXBzMzIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzMzJlbCA9ICJtaXBzMzJlbCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzMzJlbCA9ICJtaXBzZWwgbWlwczMyZWwiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzMzItbmYgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwcy1uZn0gbWlwczMyIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczMyLW5mID0gIm1pcHMzMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzMzItbmYgPSAibWlwcy1uZiBtaXBzMzItbmYiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzMzJlbC1uZiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzZWwtbmZ9IG1pcHMzMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHMzMmVsLW5mID0gIm1pcHMzMmVsIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHMzMmVsLW5mID0gIm1pcHNlbC1uZiBtaXBzMzJlbC1uZiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMnIyLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMnIyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWRlZmY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMycjIuaW5jCkBAIC0wLDAgKzEsMTcgQEAKK0RFRkFVTFRUVU5FID89ICJtaXBzMzJyMiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMi5pbmMKKworVFVORVZBTElEW21pcHMzMnIyXSA9ICJFbmFibGUgbWlwczMycjIgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FQ09ORkxJQ1RTW21pcHMzMnIyXSA9ICJuNjQgbjMyIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm1pcHMzMnIyIiwgIiAtbWFyY2g9bWlwczMycjIiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJtaXBzMzJyMiBtaXBzMzJyMmVsIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczMycjIgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwc30gbWlwczMycjIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzMzJyMiA9ICJtaXBzMzJyMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzMzJyMiA9ICJtaXBzIG1pcHMzMiBtaXBzMzJyMiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHMzMnIyZWwgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwc2VsfSBtaXBzMzJyMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHMzMnIyZWwgPSAibWlwczMycjJlbCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzMzJyMmVsID0gIm1pcHNlbCBtaXBzMzJlbCBtaXBzMzJyMmVsIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczY0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHM2NC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlMGUwZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHM2NC5pbmMKQEAgLTAsMCArMSwzIEBACitERUZBVUxUVFVORSA/PSAibWlwczY0IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMycjIuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1vY3Rlb24uaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtb2N0ZW9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjRkOWRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtb2N0ZW9uLmluYwpAQCAtMCwwICsxLDMyIEBACitERUZBVUxUVFVORSA/PSJvY3Rlb24yIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczY0LmluYworCitBVkFJTFRVTkVTICs9ICJvY3Rlb24yIG9jdGVvbjJfNjQgb2N0ZW9uMyBvY3Rlb24zXzY0IgorCitUVU5FVkFMSURbb2N0ZW9uMl0gPSAiRW5hYmxlIG9wdGltaXphdGlvbiByZWxhdGVkIHRvIG9jdGVvbjIgc3VwcG9ydCIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJvY3Rlb24yIiwgIiAtbWFyY2g9b2N0ZW9uMiAiLCAiIixkKX0iCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1vY3Rlb24yID0gIiR7VFVORV9GRUFUVVJFU190dW5lLW1pcHM2NC1uMzJ9IG9jdGVvbjIiCitCQVNFX0xJQl90dW5lLW9jdGVvbjIgPSAibGliMzIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1vY3Rlb24yID0gIm9jdGVvbjIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtb2N0ZW9uMiA9ICJtaXBzNjQtbjMyIG9jdGVvbjItbjMyIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtb2N0ZW9uMl82NCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjR9IG9jdGVvbjIiCitCQVNFX0xJQl90dW5lLW9jdGVvbjJfNjQgPSAibGliNjQiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1vY3Rlb24yXzY0ID0gIm9jdGVvbjJfNjQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtb2N0ZW9uMl82NCA9ICJtaXBzNjQgb2N0ZW9uMl82NCIKKworCitUVU5FVkFMSURbb2N0ZW9uM10gPSAiRW5hYmxlIG9wdGltaXphdGlvbiByZWxhdGVkIHRvIG9jdGVvbjMgc3VwcG9ydCIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJvY3Rlb24zIiwgIiAtbWFyY2g9b2N0ZW9uMyAiLCAiIixkKX0iCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1vY3Rlb24zID0gIiR7VFVORV9GRUFUVVJFU190dW5lLW1pcHM2NC1uMzJ9IG9jdGVvbjMiCitCQVNFX0xJQl90dW5lLW9jdGVvbjMgPSAibGliMzIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1vY3Rlb24zID0gIm9jdGVvbjMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtb2N0ZW9uMyA9ICJtaXBzNjQtbjMyIG9jdGVvbjMtbjMyIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtb2N0ZW9uM182NCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjR9IG9jdGVvbjMiCitCQVNFX0xJQl90dW5lLW9jdGVvbjNfNjQgPSAibGliNjQiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1vY3Rlb24zXzY0ID0gIm9jdGVvbjNfNjQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtb2N0ZW9uM182NCA9ICJtaXBzNjQgb2N0ZW9uM182NCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBvd2VyNS5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wb3dlcjUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYmU4NjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wb3dlcjUuaW5jCkBAIC0wLDAgKzEsMjEgQEAKK0RFRkFVTFRUVU5FID89ICJwcGM2NHA1IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjNjQuaW5jCisKK1RVTkVWQUxJRFtwb3dlcjVdID0gIkVuYWJsZSBJQk0gUG93ZXI1IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBvd2VyNSIsICIgLW1jcHU9cG93ZXI1IiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjcDUgcHBjNjRwNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGNwNSA9ICJtMzIgZnB1LWhhcmQgcG93ZXI1IGFsdGl2ZWMiCitCQVNFX0xJQl90dW5lLXBwY3A1ID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY3A1ID0gInBwY3A1IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwY3A1ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGN9IHBwY3A1IgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjNjRwNSA9ICJtNjQgZnB1LWhhcmQgcG93ZXI1IGFsdGl2ZWMiCitCQVNFX0xJQl90dW5lLXBwYzY0cDUgPSAibGliNjQiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGM2NHA1ID0gInBwYzY0cDUiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjNjRwNSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjNjR9IHBwYzY0cDUiCisKKyMgZ2xpYmMgY29uZmlndXJlIG9wdGlvbnMgdG8gZ2V0IHBvd2VyNSBzcGVjaWZpYyBsaWJyYXJ5CitHTElCQ19FWFRSQV9PRUNPTkZfcG93ZXJwYzY0ICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwb3dlcjUiLCAiLS13aXRoLWNwdT1wb3dlcjUiLCAiIiwgZCl9IgorR0xJQkNfRVhUUkFfT0VDT05GX3Bvd2VycGMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBvd2VyNSIsICItLXdpdGgtY3B1PXBvd2VyNSIsICIiLCBkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wb3dlcjYuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcG93ZXI2LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTYzNzk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcG93ZXI2LmluYwpAQCAtMCwwICsxLDIxIEBACitERUZBVUxUVFVORSA/PSAicHBjcHI2IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjNjQuaW5jCisKK1RVTkVWQUxJRFtwb3dlcjZdID0gIkVuYWJsZSBJQk0gUG93ZXI2IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBvd2VyNiIsICIgLW1jcHU9cG93ZXI2IiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjcDYgcHBjNjRwNiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGNwNiA9ICJtMzIgZnB1LWhhcmQgcG93ZXI2IGFsdGl2ZWMiCitCQVNFX0xJQl90dW5lLXBwY3A2ID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY3A2ID0gInBwY3A2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwY3A2ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGN9IHBwY3A2IgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjNjRwNiA9ICJtNjQgZnB1LWhhcmQgcG93ZXI2IGFsdGl2ZWMiCitCQVNFX0xJQl90dW5lLXBwYzY0cDYgPSAibGliNjQiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGM2NHA2ID0gInBwYzY0cDYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjNjRwNiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjNjR9IHBwYzY0cDYiCisKKyMgZ2xpYmMgY29uZmlndXJlIG9wdGlvbnMgdG8gZ2V0IHBvd2VyNiBzcGVjaWZpYyBsaWJyYXJ5CitHTElCQ19FWFRSQV9PRUNPTkZfcG93ZXJwYzY0ICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwb3dlcjYiLCAiLS13aXRoLWNwdT1wb3dlcjYiLCAiIiwgZCl9IgorR0xJQkNfRVhUUkFfT0VDT05GX3Bvd2VycGMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBvd2VyNiIsICItLXdpdGgtY3B1PXBvd2VyNiIsICIiLCBkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wb3dlcjcuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcG93ZXI3LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDY5ZTc1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcG93ZXI3LmluYwpAQCAtMCwwICsxLDIxIEBACitERUZBVUxUVFVORSA/PSAicHBjcHI3IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjNjQuaW5jCisKK1RVTkVWQUxJRFtwb3dlcjddID0gIkVuYWJsZSBJQk0gUG93ZXI3IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBvd2VyNyIsICIgLW1jcHU9cG93ZXI3IiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjcDcgcHBjNjRwNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGNwNyA9ICJtMzIgZnB1LWhhcmQgcG93ZXI3IGFsdGl2ZWMiCitCQVNFX0xJQl90dW5lLXBwY3A3ID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY3A3ID0gInBwY3A3IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwY3A3ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGN9IHBwY3A3IgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjNjRwNyA9ICJtNjQgZnB1LWhhcmQgcG93ZXI3IGFsdGl2ZWMiCitCQVNFX0xJQl90dW5lLXBwYzY0cDcgPSAibGliNjQiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGM2NHA3ID0gInBwYzY0cDciCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjNjRwNyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjNjR9IHBwYzY0cDciCisKKyMgZ2xpYmMgY29uZmlndXJlIG9wdGlvbnMgdG8gZ2V0IHBvd2VyNyBzcGVjaWZpYyBsaWJyYXJ5CitHTElCQ19FWFRSQV9PRUNPTkZfcG93ZXJwYzY0ICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwb3dlcjciLCAiLS13aXRoLWNwdT1wb3dlcjciLCAiIiwgZCl9IgorR0xJQkNfRVhUUkFfT0VDT05GX3Bvd2VycGMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBvd2VyNyIsICItLXdpdGgtY3B1PXBvd2VyNyIsICIiLCBkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGM0NzYuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNDc2LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWQxODVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNDc2LmluYwpAQCAtMCwwICsxLDE0IEBACitERUZBVUxUVFVORSA/PSAicHBjNDc2IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjLmluYworCitUVU5FVkFMSURbcHBjNDc2XSA9ICJFbmFibGUgcHBjNDc2IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwYzQ3NiIsICIgLW1jcHU9NDc2IiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjNDc2IgorVFVORV9GRUFUVVJFU190dW5lLXBwYzQ3NiA9ICJtMzIgZnB1LWhhcmQgcHBjNDc2IgorVFVORV9QS0dBUkNIX3R1bmUtcHBjNDc2ID0gInBwYzQ3NiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGM0NzYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwY30gcHBjNDc2IgorCisjIGdsaWJjIGNvbmZpZ3VyZSBvcHRpb25zIHRvIGdldCA0NzYgc3BlY2lmaWMgbGlicmFyeSAoZm9yIHNxcnQpCitHTElCQ19FWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwYzQ3NiIsICItd2l0aC1jcHU9NDc2IiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwYzYwM2UuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNjAzZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc0NGEwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwYzYwM2UuaW5jCkBAIC0wLDAgKzEsMTQgQEAKK0RFRkFVTFRUVU5FID89ICJwcGM2MDNlIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjLmluYworCitUVU5FVkFMSURbcHBjNjAzZV0gPSAiRW5hYmxlIHBwYzYwM2Ugc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjNjAzZSIsICIgLW1jcHU9NjAzZSIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gInBwYzYwM2UiCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjNjAzZSA9ICJtMzIgZnB1LWhhcmQgcHBjNjAzZSIKK1RVTkVfUEtHQVJDSF90dW5lLXBwYzYwM2UgPSAicHBjNjAzZSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGM2MDNlID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGN9IHBwYzYwM2UiCisKKyMgZ2xpYmMgY29uZmlndXJlIG9wdGlvbnMgdG8gZ2V0IDYwM2Ugc3BlY2lmaWMgbGlicmFyeSAoZm9yIHNxcnQpCitHTElCQ19FWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwYzYwM2UiLCAiLXdpdGgtY3B1PTYwM2UiLCAiIiwgZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNzQwMC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGM3NDAwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWMwNDAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNzQwMC5pbmMKQEAgLTAsMCArMSwxNCBAQAorREVGQVVMVFRVTkUgPz0gInBwYzc0MDAiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGMuaW5jCisKK1RVTkVWQUxJRFtwcGM3NDAwXSA9ICJFbmFibGUgcHBjNzQwMCBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwcGM3NDAwIiwgIiAtbWNwdT03NDAwIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjNzQwMCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGM3NDAwID0gIm0zMiBmcHUtaGFyZCBwcGM3NDAwIGFsdGl2ZWMiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGM3NDAwID0gInBwYzc0MDAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjNzQwMCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjfSBwcGM3NDAwIgorCisjIGdsaWJjIGNvbmZpZ3VyZSBvcHRpb25zIHRvIGdldCA3NDAwIHNwZWNpZmljIGxpYnJhcnkgKGZvciBzcXJ0KQorI0dMSUJDX0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjNzQwMCIsICItLXdpdGgtY3B1PXBvd2VyNCIsICIiLCBkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlMzAwYzIuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTMwMGMyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWE5NTA1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTMwMGMyLmluYwpAQCAtMCwwICsxLDExIEBACitERUZBVUxUVFVORSA/PSAicHBjZTMwMGMyIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjLmluYworCitUVU5FVkFMSURbcHBjZTMwMGMyXSA9ICJFbmFibGUgcHBjZTMwMGMyIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwY2UzMDBjMiIsICIgLW1jcHU9ZTMwMGMyIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjZTMwMGMyIgorVFVORV9GRUFUVVJFU190dW5lLXBwY2UzMDBjMiA9ICJtMzIgZnB1LXNvZnQgcHBjZTMwMGMyIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjZTMwMGMyID0gInBwY2UzMDBjMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGNlMzAwYzIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwYy1uZn0gcHBjZTMwMGMyIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTMwMGMzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2UzMDBjMy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE5Y2YyMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2UzMDBjMy5pbmMKQEAgLTAsMCArMSwyMyBAQAorREVGQVVMVFRVTkUgPz0gInBwY2UzMDBjMyIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYy5pbmMKKworQVZBSUxUVU5FUyArPSAicHBjZTMwMGMzIHBwY2UzMDBjMy1uZiIKKworIyBoYXJkLWZsb2F0CitUVU5FVkFMSURbcHBjZTMwMGMzXSA9ICJFbmFibGUgcHBjZTMwMGMzIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9GRUFUVVJFU190dW5lLXBwY2UzMDBjMyA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1wb3dlcnBjfSBwcGNlMzAwYzMiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGNlMzAwYzMgPSAicHBjZTMwMGMzIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwY2UzMDBjMyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjfSBwcGNlMzAwYzMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjZTMwMGMzIiwgIiAtbWNwdT1lMzAwYzMiLCAiIiwgZCl9IgorCisjIGdsaWJjIGNvbmZpZyBvcHRpb25zIHRvIG1ha2UgdXNlIG9mIGUzMDBjMyAoNjAzZSkgc3BlY2lmaWMgc3FydC9zcXJ0ZiByb3V0aW5lcworR0xJQkNfRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwcGNlMzAwYzMiLCAiLS13aXRoLWNwdT1lMzAwYzMiLCAiIiwgZCl9IgorCisjIHNvZnQtZmxvYXQKK1RVTkVWQUxJRFtwcGNlMzAwYzMtbmZdID0gIkVuYWJsZSBwcGNlMzAwYzMgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMgKG5vIGZwdSkiCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjZTMwMGMzLW5mID0gIiR7VFVORV9GRUFUVVJFU190dW5lLXBvd2VycGMtbmZ9IHBwY2UzMDBjMy1uZiIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY2UzMDBjMy1uZiA9ICJwcGNlMzAwYzMtbmYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjZTMwMGMzLW5mID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGMtbmZ9IHBwY2UzMDBjMy1uZiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwcGNlMzAwYzMtbmYiLCAiIC1tY3B1PWUzMDBjMyIsICIiLCBkKX0iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1MDAuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTUwMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBjMWY4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1MDAuaW5jCkBAIC0wLDAgKzEsMjAgQEAKK0RFRkFVTFRUVU5FID89ICJwcGNlNTAwIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjLmluYworCitUVU5FVkFMSURbcHBjZTUwMF0gPSAiRW5hYmxlIHBwY2U1MDAgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjZTUwMCIsICIgLW1jcHU9ODU0MCIsICIiLCBkKX0iCisKK1RVTkVWQUxJRFtzcGVdID0gIkVuYWJsZSBTUEUgQUJJIGV4dGVuc2lvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCBbICJwcGNlNTAwIiwgInNwZSIgXSwgIiAtbWFiaT1zcGUgLW1zcGUgLW1mbG9hdC1ncHJzPXNpbmdsZSIsICIiLCBkKX0iCitUQVJHRVRfRlBVIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsIFsgInBwY2U1MDAiICwgInNwZSIgXSwgInBwYy1lZnMiLCAiIiwgZCl9IgorCisjIHNwZSBpcyBkZWZpbmVkIHBvdGVudGlhbGx5IGluIHR3byBwbGFjZXMsIHNvIHdlIHdhbnQgdG8gYmUgc3VyZSBpdCB3aWxsCisjIG9ubHkgd3JpdGUgc3BlIG9uY2UgdG8gdGhlIEFCSUVYVEVOU0lPTlMgZmllbGQuCitTUEVBQklFWFRFTlNJT04gPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAic3BlIiwgInNwZSIsICIiLCBkKX0iCitBQklFWFRFTlNJT04gLj0gIiR7U1BFQUJJRVhURU5TSU9OfSIKKworQVZBSUxUVU5FUyArPSAicHBjZTUwMCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGNlNTAwID0gIm0zMiBzcGUgcHBjZTUwMCIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY2U1MDAgPSAicHBjZTUwMCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGNlNTAwID0gInBwY2U1MDAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTAwbWMuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTUwMG1jLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDRkOGU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTUwMG1jLmluYwpAQCAtMCwwICsxLDE0IEBACitERUZBVUxUVFVORSA/PSAicHBjZTUwMG1jIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjLmluYworCitUVU5FVkFMSURbcHBjZTUwMG1jXSA9ICJFbmFibGUgcHBjZTUwMG1jIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwY2U1MDBtYyIsICIgLW1jcHU9ZTUwMG1jIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjZTUwMG1jIgorVFVORV9GRUFUVVJFU190dW5lLXBwY2U1MDBtYyA9ICJtMzIgZnB1LWhhcmQgcHBjZTUwMG1jIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjZTUwMG1jID0gInBwY2U1MDBtYyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGNlNTAwbWMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwY30gcHBjZTUwMG1jIgorCisjIGdsaWJjIGNvbmZpZ3VyZSBvcHRpb25zIHRvIGdldCBlNTAwbWMgc3BlY2lmaWMgbGlicmFyeSAoZm9yIHNxcnQpCitHTElCQ19FWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwY2U1MDBtYyIsICItd2l0aC1jcHU9ZTUwMG1jIiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1MDB2Mi5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTAwdjIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMTRkNzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTAwdjIuaW5jCkBAIC0wLDAgKzEsMjAgQEAKK0RFRkFVTFRUVU5FID89ICJwcGNlNTAwdjIiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGMuaW5jCisKK1RVTkVWQUxJRFtwcGNlNTAwdjJdID0gIkVuYWJsZSBwcGNlNTAwdjIgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjZTUwMHYyIiwgIiAtbWNwdT04NTQ4IiwgIiIsIGQpfSIKKworVFVORVZBTElEW3NwZV0gPSAiRW5hYmxlIFNQRSBBQkkgZXh0ZW5zaW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsIFsgInBwY2U1MDB2MiIsICJzcGUiIF0sICIgLW1hYmk9c3BlIC1tc3BlIC1tZmxvYXQtZ3Bycz1kb3VibGUiLCAiIiwgZCl9IgorVEFSR0VUX0ZQVSAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCBbICJwcGNlNTAwdjIiICwgInNwZSIgXSwgInBwYy1lZmQiLCAiIiwgZCl9IgorCisjIHNwZSBpcyBkZWZpbmVkIHBvdGVudGlhbGx5IGluIHR3byBwbGFjZXMsIHNvIHdlIHdhbnQgdG8gYmUgc3VyZSBpdCB3aWxsCisjIG9ubHkgd3JpdGUgc3BlIG9uY2UgdG8gdGhlIEFCSUVYVEVOU0lPTlMgZmllbGQuCitTUEVBQklFWFRFTlNJT04gPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAic3BlIiwgInNwZSIsICIiLCBkKX0iCitBQklFWFRFTlNJT04gLj0gIiR7U1BFQUJJRVhURU5TSU9OfSIKKworQVZBSUxUVU5FUyArPSAicHBjZTUwMHYyIgorVFVORV9GRUFUVVJFU190dW5lLXBwY2U1MDB2MiA9ICJtMzIgc3BlIHBwY2U1MDB2MiIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY2U1MDB2MiA9ICJwcGNlNTAwdjIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjZTUwMHYyID0gInBwY2U1MDB2MiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1NTAwLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1NTAwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTIzMWVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTU1MDAuaW5jCkBAIC0wLDAgKzEsMjAgQEAKK0RFRkFVTFRUVU5FID89ICJwcGNlNTUwMCIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYzY0LmluYworCitUVU5FVkFMSURbZTU1MDBdID0gIkVuYWJsZSBGcmVlc2NhbGUgZTU1MDAgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZTU1MDAiLCAiIC1tY3B1PWU1NTAwIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjZTU1MDAgcHBjNjRlNTUwMCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGNlNTUwMCA9ICJtMzIgZnB1LWhhcmQgZTU1MDAiCitCQVNFX0xJQl90dW5lLXBwY2U1NTAwID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY2U1NTAwID0gInBwY2U1NTAwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwY2U1NTAwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGN9IHBwY2U1NTAwIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjNjRlNTUwMCA9ICJtNjQgZnB1LWhhcmQgZTU1MDAiCitCQVNFX0xJQl90dW5lLXBwYzY0ZTU1MDAgPSAibGliNjQiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGM2NGU1NTAwID0gInBwYzY0ZTU1MDAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjNjRlNTUwMCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjNjR9IHBwYzY0ZTU1MDAiCisKKyMgZ2xpYmMgY29uZmlndXJlIG9wdGlvbnMgdG8gZ2V0IGU1NTAwIHNwZWNpZmljIGxpYnJhcnkgKGZvciBzcXJ0KQorR0xJQkNfRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJlNTUwMCIsICItLXdpdGgtY3B1PWU1NTAwIiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U2NTAwLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U2NTAwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTc0M2EzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTY1MDAuaW5jCkBAIC0wLDAgKzEsMjEgQEAKK0RFRkFVTFRUVU5FID89ICJwcGNlNjUwMCIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYzY0LmluYworCitUVU5FVkFMSURbZTY1MDBdID0gIkVuYWJsZSBGcmVlc2NhbGUgZTY1MDAgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZTY1MDAiLCAiIC1tY3B1PWU2NTAwIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjZTY1MDAgcHBjNjRlNjUwMCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGNlNjUwMCA9ICJtMzIgZnB1LWhhcmQgZTY1MDAgYWx0aXZlYyIKK0JBU0VfTElCX3R1bmUtcHBjZTY1MDAgPSAibGliIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjZTY1MDAgPSAicHBjZTY1MDAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjZTY1MDAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwY30gcHBjZTY1MDAiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGM2NGU2NTAwID0gIm02NCBmcHUtaGFyZCBlNjUwMCBhbHRpdmVjIgorQkFTRV9MSUJfdHVuZS1wcGM2NGU2NTAwID0gImxpYjY0IgorVFVORV9QS0dBUkNIX3R1bmUtcHBjNjRlNjUwMCA9ICJwcGM2NGU2NTAwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwYzY0ZTY1MDAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwYzY0fSBwcGM2NGU2NTAwIgorCisjIGdsaWJjIGNvbmZpZ3VyZSBvcHRpb25zIHRvIGdldCBlNjUwMCBzcGVjaWZpYyBsaWJyYXJ5CitHTElCQ19FWFRSQV9PRUNPTkZfcG93ZXJwYzY0ICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJlNjUwMCIsICItLXdpdGgtY3B1PWU2NTAwIiwgIiIsIGQpfSIKK0dMSUJDX0VYVFJBX09FQ09ORl9wb3dlcnBjICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJlNjUwMCIsICItLXdpdGgtY3B1PWU2NTAwIiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXNoMy5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1zaDMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZWQ3YmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1zaDMuaW5jCkBAIC0wLDAgKzEsMTcgQEAKK0RFRkFVTFRUVU5FID89ICJzaDMiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvc2gvYXJjaC1zaC5pbmMKKworVFVORVZBTElEW3NoM10gPSAiRW5hYmxlIFNIMyBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInNoMyIsICIgLW0zIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAic2gzIHNoM2ViIgorVFVORV9GRUFUVVJFU190dW5lLXNoMyA9ICJzaDMiCitUVU5FX0FSQ0hfdHVuZS1zaDMgPSAic2gzIgorVFVORV9QS0dBUkNIX3R1bmUtc2gzID0gInNoMyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1zaDMgPSAic2ggc2gzIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtc2gzZWIgPSAic2gzIGJpZ2VuZGlhbiIKK1RVTkVfQVJDSF90dW5lLXNoM2ViID0gInNoM2ViIgorVFVORV9QS0dBUkNIX3R1bmUtc2gzZWIgPSAic2gzZWIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtc2gzZWIgPSAic2hlYiBzaDNlYiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXNoNC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1zaDQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZTIzYjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1zaDQuaW5jCkBAIC0wLDAgKzEsMzQgQEAKK0RFRkFVTFRUVU5FID89ICJzaDQiCisKKyMgUHVsbCBpbiBzaDQgZm9yIGNvbXBhdGliaWxpdHkuLi4KK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvc2gvYXJjaC1zaC5pbmMKKworVFVORVZBTElEW3NoNF0gPSAiRW5hYmxlIFNINCBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInNoNCIsICIgLW00IiwgIiIsIGQpfSIKKworIyBOT1RFOiBJZiB5b3Ugd2FudCB0byBvcHRpbWl6ZSB0byBzaDRhLCBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXNoNGEuaW5jLgorIyBCdXQgaXQgaXMgbm90IGNvbXBhdGlibGUgZm9yIHNoNC4KKyMgVGhlIGJpbmFyeSBvcHRpbWl6ZWQgYnkgbTRhIGRvZXNuJ3Qgb3BlcmF0ZSBvbiBzaDQuIEl0IHdvcmtzIG9uIHNoNGEgb25seS4KK1RVTkVWQUxJRFtzaDRhXSA9ICJFbmFibGUgU0g0YSBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInNoNGEiLCAiIC1tNGEiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJzaDQgc2g0ZWIgc2g0YSBzaDRhZWIiCitUVU5FX0ZFQVRVUkVTX3R1bmUtc2g0ID0gInNoNCIKK1RVTkVfQVJDSF90dW5lLXNoNCA9ICJzaDQiCitUVU5FX1BLR0FSQ0hfdHVuZS1zaDQgPSAic2g0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXNoNCA9ICJzaCBzaDQiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1zaDRlYiA9ICJzaDQgYmlnZW5kaWFuIgorVFVORV9BUkNIX3R1bmUtc2g0ZWIgPSAic2g0ZWIiCitUVU5FX1BLR0FSQ0hfdHVuZS1zaDRlYiA9ICJzaDRlYiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1zaDRlYiA9ICJzaGViIHNoNGViIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtc2g0YSA9ICJzaDRhIgorVFVORV9BUkNIX3R1bmUtc2g0YSA9ICJzaDQiCitUVU5FX1BLR0FSQ0hfdHVuZS1zaDRhID0gInNoNGEiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtc2g0YSA9ICJzaCBzaDQgc2g0YSIKKworVFVORV9GRUFUVVJFU190dW5lLXNoNGFlYiA9ICJzaDRhIGJpZ2VuZGlhbiIKK1RVTkVfQVJDSF90dW5lLXNoNGFlYiA9ICJzaDRlYiIKK1RVTkVfUEtHQVJDSF90dW5lLXNoNGFlYiA9ICJzaDRhZWIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtc2g0YWViID0gInNoZWIgc2g0ZWIgc2g0YWViIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtc3Ryb25nYXJtMTEwMC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1zdHJvbmdhcm0xMTAwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTJmYmE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtc3Ryb25nYXJtMTEwMC5pbmMKQEAgLTAsMCArMSwxMSBAQAorREVGQVVMVFRVTkUgPz0gImFybXY0IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY0LmluYworCitUVU5FVkFMSURbc3Ryb25nYXJtXSA9ICJFbmFibGUgU3Ryb25nYXJtIDExMDAgc2VyaWVzIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInN0cm9uZ2FybSIsICIgLW10dW5lPXN0cm9uZ2FybTExMDAiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJzdHJvbmdhcm0iCitBUk1QS0dBUkNIX3R1bmUtc3Ryb25nYXJtID0gInN0cm9uZ2FybSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1zdHJvbmdhcm0gPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjR9IHN0cm9uZ2FybSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1zdHJvbmdhcm0gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjR9IHN0cm9uZ2FybSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXN1cGVyc3BhcmMuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtc3VwZXJzcGFyYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZhYTM2MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXN1cGVyc3BhcmMuaW5jCkBAIC0wLDAgKzEsNCBAQAorVFVORV9BUkNIID0gInNwYXJjIgorCitUVU5FX0NDQVJHUyA9ICItbWNwdT1zdXBlcnNwYXJjIgorVFVORV9QS0dBUkNIID0gInN1cGVyc3BhcmMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS14c2NhbGUuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUteHNjYWxlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzVjYThkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUteHNjYWxlLmluYwpAQCAtMCwwICsxLDE2IEBACitERUZBVUxUVFVORSA/PSAiYXJtdjV0ZSIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NS1kc3AuaW5jCisKK1RVTkVWQUxJRFt4c2NhbGVdID0gIkVuYWJsZSBQWEEyNTUvUFhBMjZ4IFhzY2FsZSBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJ4c2NhbGUiLCAiIC1tdHVuZT14c2NhbGUiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJ4c2NhbGUiCitBUk1QS0dBUkNIX3R1bmUteHNjYWxlID0gInhzY2FsZSIKK1RVTkVfRkVBVFVSRVNfdHVuZS14c2NhbGUgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZX0geHNjYWxlIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXhzY2FsZSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlfSB4c2NhbGUgeHNjYWxldCB4c2NhbGVlIHhzY2FsZXRlIgorCitBVkFJTFRVTkVTICs9ICJ4c2NhbGUtYmUiCitBUk1QS0dBUkNIX3R1bmUteHNjYWxlLWJlID0gInhzY2FsZSIKK1RVTkVfRkVBVFVSRVNfdHVuZS14c2NhbGUtYmUgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZWJ9IHhzY2FsZSBiaWdlbmRpYW4iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUteHNjYWxlLWJlID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGVifSB4c2NhbGViIHhzY2FsZXRiIHhzY2FsZWViIHhzY2FsZXRlYiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYtYmFzZS5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2LWJhc2UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YzhhNDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2LWJhc2UuaW5jCkBAIC0wLDAgKzEsNTIgQEAKKyMKKyMgQmFzZSBtYWNoaW5lIHNldHRpbmdzIGZvciBYODYgYXJjaGl0ZWN0dXJlIEJTUHMKKyMKKworIworIyBjb21tb24gc2V0dGluZ3MgZm9yIFg4NiBtYWNoaW5lcworIworTUFDSElORV9GRUFUVVJFUyArPSAic2NyZWVuIGtleWJvYXJkIHBjaSB1c2Job3N0IGV4dDIgZXh0MyB4ODYgXAorICAgICAgICAgICAgICAgICAgICAgYWNwaSBzZXJpYWwgdXNiZ2FkZ2V0IGFsc2EiCisKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgKz0gImtlcm5lbC1tb2R1bGVzIgorCitJTUFHRV9GU1RZUEVTICs9ICJsaXZlIgorCitLRVJORUxfSU1BR0VUWVBFID89ICJiekltYWdlIgorCitTRVJJQUxfQ09OU09MRSA/PSAiMTE1MjAwIHR0eVMwIgorCisjCisjIGtlcm5lbC1yZWxhdGVkIHZhcmlhYmxlcworIworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID8/PSAibGludXgteW9jdG8iCitQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0byA/Pz0gIjMuMCUiCisKKyMKKyMgWFNFUlZFUiBzdWJjb21wb25lbnRzLCB1c2VkIHRvIGJ1aWxkIHRoZSBYU0VSVkVSIHZhcmlhYmxlCisjCitYU0VSVkVSX1g4Nl9CQVNFID0gInhzZXJ2ZXIteG9yZyBcCisgICAgICAgICAgIHhmODYtaW5wdXQtbW91c2UgXAorICAgICAgICAgICB4Zjg2LWlucHV0LWtleWJvYXJkIFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1ldmRldiBcCisgICAgICAgICAgIHhmODYtaW5wdXQtc3luYXB0aWNzIFwKKyAgICAgICAgICAgIgorCitYU0VSVkVSX1g4Nl9FWFQgPSAiIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAneHNlcnZlci14b3JnLWV4dGVuc2lvbi1nbHgnLCAnJywgZCl9IFwKKyAgICAgICAgICAgeHNlcnZlci14b3JnLW1vZHVsZS1saWJpbnQxMCBcCisgICAgICAgICAgICIKKworWFNFUlZFUl9YODZfSTkxNSA9ICJ4Zjg2LXZpZGVvLWludGVsIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnbWVzYS1kcml2ZXItaTkxNScsICcnLCBkKX0gXAorICAgICAgICAgICAiCisKK1hTRVJWRVJfWDg2X0k5NjUgPSAieGY4Ni12aWRlby1pbnRlbCBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ21lc2EtZHJpdmVyLWk5NjUnLCAnJywgZCl9IFwKKyAgICAgICAgICAgIgorCitYU0VSVkVSX1g4Nl9WRVNBID0gInhmODYtdmlkZW8tdmVzYSIKKworWFNFUlZFUl9YODZfRkJERVYgPSAieGY4Ni12aWRlby1mYmRldiIKKworWFNFUlZFUl9YODZfTU9ERVNFVFRJTkcgPSAieGY4Ni12aWRlby1tb2Rlc2V0dGluZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYvUkVBRE1FIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI2YzQ2YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYvUkVBRE1FCkBAIC0wLDAgKzEsMjQgQEAKKzIwMTIvMDMvMzAgLSBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisgLSBJbml0aWFsIHZlcnNpb24KKworTW9zdCBvZiB0aGUgaXRlbXMgZm9yIHRoZSBYODYgYXJjaGl0ZWN0dXJlcyBhcmUgZGVmaW5lZCBpbiB0aGUgc2luZ2xlCithcmNoLXg4NiBmaWxlLgorCitUaHJlZSBBQklzIGFyZSBkZWZpbmUsIG0zMiwgbXgzMiBhbmQgbTY0LgorCitUaGUgZm9sbG93aW5nIGlzIHRoZSBsaXN0IG9mIFg4NiBzcGVjaWZpYyB2YXJpYWJsZXM6CisKK1g4NkFSQ0gzMiAtIFRoaXMgaXMgdGhlIDMyLWJpdCBhcmNoaXRlY3R1cmUgR05VIGNhbm9uaWNhbCBhcmNoLCBUVU5FX0FSQ0guCisKK1g4NkFSQ0g2NCAtIFRoaXMgaXMgdGhlIDY0LWJpdCBhcmNoaXRlY3R1cmUgR05VIGNhbm9uaWNhbCBhcmNoLCBUVU5FX0FSQ0guCisKK1RoZSBUVU5FX1BLR0FSQ0ggaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgorCitUVU5FX1BLR0FSQ0ggPSAke1RVTkVfUEtHQVJDSF90dW5lLSR7REVGQVVMVFRVTkV9fQorCitUaGUgcGFja2FnZSBhcmNoaXRlY3R1cmUgZm9yIDMyLWJpdCB0YXJnZXRzIGlzIGhpc3RvcmljYWwgYW5kIGdlbmVyYWxseQorc2V0IHRvIHRvIG1hdGNoIHRoZSBjb3JlIGNvbXBhdGlibGUgcHJvY2Vzc29yIHR5cGUsIGkuZS4gaTM4Ni4KKworRm9yIDY0LWJpdCBhcmNoaXRlY3R1cmVzLCB0aGUgYXJjaGl0ZWN0dXJlIGlzIGV4cGVjdGVkIHRvIGVuZCBpbiAnXzY0Jy4KKworSWYgdGhlIHgzMiBBQkkgaXMgdXNlZCwgdGhlbiB0aGUgXzY0IGlzIGZ1cnRoZXIgZXh0ZW5kZWQgd2l0aCBhICdfeDMyJy4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYvYXJjaC14ODYuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni9hcmNoLXg4Ni5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk4YmRkYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYvYXJjaC14ODYuaW5jCkBAIC0wLDAgKzEsNTEgQEAKKyMKKyMgWDg2IEFyY2hpdGVjdHVyZSBkZWZpbml0aW9uIChJQTMyLCBYODZfNjQsIGFuZCBYMzIpCisjCisKK0RFRkFVTFRUVU5FID89ICJ4ODYiCitUQVJHRVRfRlBVID89ICIiCitYODZBUkNIMzIgPz0gImk1ODYiCitYODZBUkNINjQgPz0gIng4Nl82NCIKKworVFVORV9QS0dBUkNIID0gIiR7VFVORV9QS0dBUkNIX3R1bmUtJHtERUZBVUxUVFVORX19IgorCisjIEVMRjMyIEFCSQorVFVORVZBTElEW20zMl0gPSAiSUEzMiBFTEYzMiBzdGFuZGFyZCBBQkkiCitUVU5FQ09ORkxJQ1RTW20zMl0gPSAibTY0IG14MzIiCitUVU5FX0FSQ0ggLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm0zMiIsICIke1g4NkFSQ0gzMn0iLCAiIiAsZCl9IgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm0zMiIsICIgLW0zMiIsICIiLCBkKX0iCitNQUNISU5FT1ZFUlJJREVTID0uICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJtMzIiLCAieDg2OiIsICIiICxkKX0iCisKKyMgeDMyIEFCSQorVFVORVZBTElEW214MzJdID0gIklBMzJlICh4ODZfNjQpIEVMRjMyIHN0YW5kYXJkIEFCSSIKK1RVTkVDT05GTElDVFNbbXgzMl0gPSAibTY0IG0zMiIKK1RVTkVfQVJDSCAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibXgzMiIsICIke1g4NkFSQ0g2NH0iLCAiIiAsZCl9IgorQUJJRVhURU5TSU9OIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIngzMiIsICIiICxkKX0iCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibXgzMiIsICIgLW14MzIiLCAiIiwgZCl9IgorVFVORV9MREFSR1MgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm14MzIiLCAiLW0gZWxmMzJfeDg2XzY0IiwgIiIsIGQpfSIKK1RVTkVfQVNBUkdTICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIi14MzIiLCAiIiwgZCl9IgorCisjIEVMRjY0IEFCSQorVFVORVZBTElEW202NF0gPSAiSUEzMmUgKHg4Nl82NCkgRUxGNjQgc3RhbmRhcmQgQUJJIgorVFVORUNPTkZMSUNUU1ttNjRdID0gIm0zMiBteDMyIgorVFVORV9BUkNIIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJtNjQiLCAiJHtYODZBUkNINjR9IiwgIiIgLGQpfSIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJtNjQiLCAiIC1tNjQiLCAiIiwgZCl9IgorCisjIERlZmF1bHQgVHVuZSBjb25maWd1cmF0aW9ucworQVZBSUxUVU5FUyArPSAieDg2IgorVFVORV9GRUFUVVJFU190dW5lLXg4NiA9ICJtMzIiCitCQVNFX0xJQl90dW5lLXg4NiA9ICJsaWIiCitUVU5FX1BLR0FSQ0hfdHVuZS14ODYgPSAieDg2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXg4NiA9ICIke1RVTkVfUEtHQVJDSF90dW5lLXg4Nn0iCisKK0FWQUlMVFVORVMgKz0gIng4Ni02NCIKK1RVTkVfRkVBVFVSRVNfdHVuZS14ODYtNjQgPSAibTY0IgorQkFTRV9MSUJfdHVuZS14ODYtNjQgPSAibGliNjQiCitUVU5FX1BLR0FSQ0hfdHVuZS14ODYtNjQgPSAieDg2XzY0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXg4Ni02NCA9ICIke1RVTkVfUEtHQVJDSF90dW5lLXg4Ni02NH0iCisKK0FWQUlMVFVORVMgKz0gIng4Ni02NC14MzIiCitUVU5FX0ZFQVRVUkVTX3R1bmUteDg2LTY0LXgzMiA9ICJteDMyIgorQkFTRV9MSUJfdHVuZS14ODYtNjQteDMyID0gImxpYngzMiIKK1RVTkVfUEtHQVJDSF90dW5lLXg4Ni02NC14MzIgPSAieDg2XzY0X3gzMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS14ODYtNjQteDMyID0gIiR7VFVORV9QS0dBUkNIX3R1bmUteDg2LTY0LXgzMn0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXVhcm0uY29uZiBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdWFybS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYWQwM2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXVhcm0uY29uZgpAQCAtMCwwICsxLDEyIEBACisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRTogYXJtX3ZlcnNhdGlsZV85MjZlanMKKyNAREVTQ1JJUFRJT046IGFybV92ZXJzYXRpbGVfOTI2ZWpzCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05MjZlanMuaW5jCisjcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTExMzZqZi1zLmluYworCitLRVJORUxfSU1BR0VUWVBFID0gInpJbWFnZSIKKworU0VSSUFMX0NPTlNPTEVTID0gIjExNTIwMDt0dHlBTUEwIDExNTIwMDt0dHlBTUExIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXVhcm02NC5jb25mIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11YXJtNjQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDU5ZDBmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11YXJtNjQuY29uZgpAQCAtMCwwICsxLDEyIEBACisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRTogZ2VuZXJpYyBhcm12OCBtYWNoaW5lCisjQERFU0NSSVBUSU9OOiBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZm9yIHJ1bm5pbmcgYSBnZW5lcmljIGFybXY4CisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjguaW5jCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCisKK01BQ0hJTkVfRkVBVFVSRVMgPSAiIgorCitLRVJORUxfSU1BR0VUWVBFID0gIkltYWdlIgorCitTRVJJQUxfQ09OU09MRVMgPSAiMzg0MDA7dHR5QU1BMCAzODQwMDtodmMwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11bWlwcy5jb25mIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11bWlwcy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZjgxMzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXVtaXBzLmNvbmYKQEAgLTAsMCArMSwxMyBAQAorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IG10aV9tYWx0YTMyX2JlIE1JUFMKKyNAREVTQ1JJUFRJT046IG10aV9tYWx0YTMyX2JlCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzJyMi5pbmMKKworS0VSTkVMX0lNQUdFVFlQRSA9ICJ2bWxpbnV4IgorS0VSTkVMX0FMVF9JTUFHRVRZUEUgPSAidm1saW51eC5iaW4iCisKK1NFUklBTF9DT05TT0xFUyA9ICIxMTUyMDA7dHR5UzAgMTE1MjAwO3R0eVMxIgorCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTID0gIiBrZXJuZWwtbW9kdWxlcyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdW1pcHM2NC5jb25mIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11bWlwczY0LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMzZjFmZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdW1pcHM2NC5jb25mCkBAIC0wLDAgKzEsMTMgQEAKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiBtdGktbWFsdGE2NC1iZSBNSVBTNjQKKyNAREVTQ1JJUFRJT046IG10aS1tYWx0YTY0LWJlCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzNjQuaW5jCisKK0tFUk5FTF9JTUFHRVRZUEUgPSAidm1saW51eCIKK0tFUk5FTF9BTFRfSU1BR0VUWVBFID0gInZtbGludXguYmluIgorCitTRVJJQUxfQ09OU09MRVMgPSAiMTE1MjAwO3R0eVMwIDExNTIwMDt0dHlTMSIKKworTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyA9ICIga2VybmVsLW1vZHVsZXMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXVwcGMuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdXBwYy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1Y2JiZjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXVwcGMuY29uZgpAQCAtMCwwICsxLDExIEBACisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRTogcWVtdSBQUEMgRW11bGF0b3Igc2V0dXAKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3IgcnVubmluZyBhbiBQUEMgc3lzdGVtIHVuZGVyIHFlbXUgZW11bGF0aW9uCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGM3NDAwLmluYworCitLRVJORUxfSU1BR0VUWVBFID0gInZtbGludXgiCisKK1NFUklBTF9DT05TT0xFUyA9ICIxMTUyMDA7dHR5UzAgMTE1MjAwO3R0eVMxIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXV4ODYtNjQuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdXg4Ni02NC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZmQ0M2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXV4ODYtNjQuY29uZgpAQCAtMCwwICsxLDI5IEBACisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRTogY29tbW9uX3BjCisjQERFU0NSSVBUSU9OOiBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZm9yIHJ1bm5pbmcgYSBjb21tb24geDg2CisKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIgPz0gInhzZXJ2ZXIteG9yZyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2xlczEgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbGVzMiA/PSAibWVzYSIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYworREVGQVVMVFRVTkUgPz0gImNvcmUyLTY0IgorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmUyLmluYworCitLRVJORUxfSU1BR0VUWVBFID0gImJ6SW1hZ2UiCisKK1NFUklBTF9DT05TT0xFUyA9ICIxMTUyMDA7dHR5UzAgMTE1MjAwO3R0eVMxIgorCitYU0VSVkVSID0gInhzZXJ2ZXIteG9yZyBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ21lc2EtZHJpdmVyLXN3cmFzdCcsICcnLCBkKX0gXAorICAgICAgICAgICB4Zjg2LWlucHV0LXZtbW91c2UgXAorICAgICAgICAgICB4Zjg2LWlucHV0LWtleWJvYXJkIFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1ldmRldiBcCisgICAgICAgICAgIHhmODYtdmlkZW8tY2lycnVzIFwKKyAgICAgICAgICAgeGY4Ni12aWRlby1mYmRldiBcCisgICAgICAgICAgIHhmODYtdmlkZW8tdm13YXJlIgorCitNQUNISU5FX0ZFQVRVUkVTICs9ICJ4ODYiCisKK01BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTICs9ICJ2ODZkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11eDg2LmNvbmYgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXV4ODYuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmNlYTY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11eDg2LmNvbmYKQEAgLTAsMCArMSwyOCBAQAorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IGNvbW1vbl9wYworI0BERVNDUklQVElPTjogTWFjaGluZSBjb25maWd1cmF0aW9uIGZvciBydW5uaW5nIGEgY29tbW9uIHg4NgorCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID89ICJ4c2VydmVyLXhvcmciCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbCA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsZXMxID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2xlczIgPz0gIm1lc2EiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pNTg2LmluYworCitLRVJORUxfSU1BR0VUWVBFID0gImJ6SW1hZ2UiCisKK1NFUklBTF9DT05TT0xFUyA9ICIxMTUyMDA7dHR5UzAgMTE1MjAwO3R0eVMxIgorCitYU0VSVkVSID0gInhzZXJ2ZXIteG9yZyBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ21lc2EtZHJpdmVyLXN3cmFzdCcsICcnLCBkKX0gXAorICAgICAgICAgICB4Zjg2LWlucHV0LXZtbW91c2UgXAorICAgICAgICAgICB4Zjg2LWlucHV0LWtleWJvYXJkIFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1ldmRldiBcCisgICAgICAgICAgIHhmODYtdmlkZW8tY2lycnVzIFwKKyAgICAgICAgICAgeGY4Ni12aWRlby1mYmRldiBcCisgICAgICAgICAgIHhmODYtdmlkZW8tdm13YXJlIgorCitNQUNISU5FX0ZFQVRVUkVTICs9ICJ4ODYiCisKK01BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTICs9ICJ2ODZkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWlncmF0ZV9sb2NhbGNvdW50LmNvbmYgYi95b2N0by1wb2t5L21ldGEvY29uZi9taWdyYXRlX2xvY2FsY291bnQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDg2ZTAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWlncmF0ZV9sb2NhbGNvdW50LmNvbmYKQEAgLTAsMCArMSBAQAorSU5IRVJJVCArPSAibWlncmF0ZV9sb2NhbGNvdW50IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbXVsdGlsaWIuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9jb25mL211bHRpbGliLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlhOGU5MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL211bHRpbGliLmNvbmYKQEAgLTAsMCArMSwyNiBAQAorCitiYXNlbGliID0gIiR7QGQuZ2V0VmFyKCdCQVNFX0xJQl90dW5lLScgKyAoZC5nZXRWYXIoJ0RFRkFVTFRUVU5FJywgVHJ1ZSkgb3IgJ0lOVkFMSUQnKSwgVHJ1ZSkgb3IgZC5nZXRWYXIoJ0JBU0VMSUInLCBUcnVlKX0iCisKK01VTFRJTElCX1ZBUklBTlRTID0gIiR7QGV4dGVuZF92YXJpYW50cyhkLCdNVUxUSUxJQlMnLCdtdWx0aWxpYicpfSIKK01VTFRJTElCX1NBVkVfVkFSTkFNRSA9ICJERUZBVUxUVFVORSBUQVJHRVRfQVJDSCBUQVJHRVRfU1lTIgorCitNVUxUSUxJQlMgPz89ICJtdWx0aWxpYjpsaWIzMiIKKworU1RBR0lOR19ESVJfSE9TVCA9ICIke1NUQUdJTkdfRElSfS8ke01MUFJFRklYfSR7TUFDSElORX0iCitTVEFHSU5HX0RJUl9UQVJHRVQgPSAiJHtTVEFHSU5HX0RJUn0vJHtNTFBSRUZJWH0ke01BQ0hJTkV9IgorUEtHREFUQV9ESVIgPSAiJHtTVEFHSU5HX0RJUn0vJHtNQUNISU5FfS9wa2dkYXRhIgorCitJTkhFUklUICs9ICJtdWx0aWxpYl9nbG9iYWwiCisKK0JCQ0xBU1NFWFRFTkRfYXBwZW5kID0gIiAke01VTFRJTElCU30iCisKK01VTFRJTElCX0dMT0JBTF9WQVJJQU5UUyA/PSAibGliMzIgbGliNjQgbGlieDMyIgorCitPUEtHX0FSR1NfYXBwZW5kID0gIiAtLWZvcmNlLW1haW50YWluZXIgLS1mb3JjZS1vdmVyd3JpdGUiCisKKyMgV2hlbiBtdWx0aWxpYiBpcyBlbmFibGVkLCBhbGxhcmNoIHJlY2lwZXMgd2lsbCBiZSBpbnN0YWxsZWQgaW50byB0aGUgTUFDSElORQorIyBzeXNyb290LCBub3QgTUxQUkVGSVhNQUNISU5FLiAgVGhpcyBtZWFucyB0aGF0IGFueXRoaW5nIHVzaW5nIHBrZy1jb25maWcgdG8KKyMgZmluZCBhbiBhbGxhcmNoIHBrZ2NvbmZpZyBmaWxlIHdpbGwgZmFpbCBhcyB0aGUgUEtHX0NPTkZJR19QQVRIIG9ubHkgbG9va3MKKyMgaW5zaWRlIHRoZSBtdWx0aWxpYiBzeXNyb290LiAgRml4IHRoaXMgYnkgZXhwbGljaXRseSBhZGRpbmcgdGhlIE1BQ0hJTkUncworIyBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgcGtnY29uZmlnIGxvY2F0aW9uIHRvIFBLR19DT05GSUdfUEFUSC4KK1BLR19DT05GSUdfUEFUSCAuPSAiOiR7U1RBR0lOR19ESVJ9LyR7TUFDSElORX0ke2RhdGFkaXJ9L3BrZ2NvbmZpZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL3ByZXhwb3J0LmNvbmYgYi95b2N0by1wb2t5L21ldGEvY29uZi9wcmV4cG9ydC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZjNhY2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9wcmV4cG9ydC5jb25mCkBAIC0wLDAgKzEgQEAKK0lOSEVSSVQgKz0gInByZXhwb3J0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvcHJpbXBvcnQuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9jb25mL3ByaW1wb3J0LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk0ZWExYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL3ByaW1wb3J0LmNvbmYKQEAgLTAsMCArMSBAQAorSU5IRVJJVCArPSAicHJpbXBvcnQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9zYW5pdHkuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9jb25mL3Nhbml0eS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMTU2ZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9zYW5pdHkuY29uZgpAQCAtMCwwICsxLDE2IEBACisjIFNhbml0eSBjaGVja3MgZm9yIGNvbW1vbiB1c2VyIG1pc2NvbmZpZ3VyYXRpb25zCisjCisjIFNlZSBzYW5pdHkuYmJjbGFzcworIworIyBFeHBlcnQgdXNlcnMgY2FuIGNvbmZpcm0gdGhlaXIgc2FuaXR5IHdpdGggInRvdWNoIGNvbmYvc2FuaXR5LmNvbmYiCitCQl9NSU5fVkVSU0lPTiA9ICIxLjI3LjEiCisKK1NBTklUWV9BQklGSUxFID0gIiR7VE1QRElSfS9hYmlfdmVyc2lvbiIKKworU0FOSVRZX1ZFUlNJT04gPz0gIjEiCitMT0NBTENPTkZfVkVSU0lPTiAgPz0gIjEiCitMQVlFUl9DT05GX1ZFUlNJT04gPz0gIjYiCitTSVRFX0NPTkZfVkVSU0lPTiAgPz0gIjEiCisKK0lOSEVSSVQgKz0gInNhbml0eSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9VYnVudHUtMTAuMDQuMS02NC9ibGFja2xpc3QgYi95b2N0by1wb2t5L21ldGEvY29uZi9zd2FiYmVyL1VidW50dS0xMC4wNC4xLTY0L2JsYWNrbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmRiOGYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9VYnVudHUtMTAuMDQuMS02NC9ibGFja2xpc3QKQEAgLTAsMCArMSw2IEBACitsaWJuZW9uMjctZ251dGxzCitvcGVuamRrLTYtanJlLWhlYWRsZXNzCitvcGVuamRrLTYtanJlLWxpYgorb3Blbmpkay02LWpyZQorbGliZGJ1cy0xLTMKK2xpYm5lb24yNy1nbnV0bHMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvVWJ1bnR1LTEwLjA0LjEtNjQvZmlsdGVycyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvVWJ1bnR1LTEwLjA0LjEtNjQvZmlsdGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDQ3ZjcwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9VYnVudHUtMTAuMDQuMS02NC9maWx0ZXJzCkBAIC0wLDAgKzEsNyBAQAorL3Vzci9sb2NhbC9saWIvcHl0aG9uMi42CisvdXNyL2xpYi9weXRob24yLjYKKy91c3IvbGliL3B5bW9kdWxlcy9weXRob24yLjYKKy91c3IvbGliL3BlcmwvNS4xMAorIyB3aGljaCBpcyBwYXJ0IG9mIHRoZSBkZWJpYW51dGlscyBwYWNrYWdlcywgYnV0IHdlIGRvbid0IHdhbnQgdG8gcHV0IHRoZSBlbnRpcmUKKyMgZGViaWFudXRpbHMgcGFja2FnZSBpbiB0aGUgd2hpdGVsaXN0LgorL3Vzci9iaW4vd2hpY2gKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvVWJ1bnR1LTEwLjA0LjEtNjQvd2hpdGVsaXN0IGIveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9VYnVudHUtMTAuMDQuMS02NC93aGl0ZWxpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBmZTk2MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvVWJ1bnR1LTEwLjA0LjEtNjQvd2hpdGVsaXN0CkBAIC0wLDAgKzEsMjMgQEAKK2Jhc2UtZmlsZXMKK2Rhc2gKK2xpYmFjbDEKK2xpYmF0dHIxCitsaWJiejItMS4wCitsaWJjNgorbGliYy1iaW4KK2xpYmdsaWIyLjAtMAorbGlibmN1cnNlczUKK2xpYnNlbGludXgxCitsaWJzcWxpdGUzLTAKK2xpYnNzbDAuOS44CittaW1lLXN1cHBvcnQKK3BlcmwtYmFzZQorcHl0aG9uMi42CitweXRob24yLjYtbWluaW1hbAorcHl0aG9uLWFwcG9ydAorcHl0aG9uLWdzdDAuMTAKK3B5dGhvbi1pbWFnaW5nCitweXRob24tbWluaW1hbAorcHl0aG9uLXN1cHBvcnQKK3B5dGhvbi16b3BlLmludGVyZmFjZQoremxpYjFnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9zd2FiYmVyL2dlbmVyaWMvYmxhY2tsaXN0IGIveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9nZW5lcmljL2JsYWNrbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTZiY2I0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9nZW5lcmljL2JsYWNrbGlzdApAQCAtMCwwICsxLDIgQEAKK3VkZXYKK2RrcGcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvZ2VuZXJpYy9maWx0ZXJzIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9nZW5lcmljL2ZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IxMGZjYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvZ2VuZXJpYy9maWx0ZXJzCkBAIC0wLDAgKzEsMTAgQEAKKy90bXAKKy9ldGMvbG9jYWx0aW1lCisvZXRjL2xkLnNvLmNhY2hlCisvZXRjL2xkLnNvLmNvbmYKKy9ldGMvcGFzc3dkCisvZXRjL2dyb3VwCisvZXRjL25zc3dpdGNoLmNvbmYKKy9wcm9jCisvZGV2L251bGwKKy9kZXYvdHR5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9zd2FiYmVyL2dlbmVyaWMvd2hpdGVsaXN0IGIveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9nZW5lcmljL3doaXRlbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGVjMmFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9nZW5lcmljL3doaXRlbGlzdApAQCAtMCwwICsxLDE1IEBACitiYXNoCitiemlwMgorY2NhY2hlCitjb3JldXRpbHMKK2NwcAorZmlsZQorZmluZHV0aWxzCitnYXdrCitncmVwCitob3N0bmFtZQorbWFrZQorc2VkCit0YXIKK3V0aWwtbGludXgKK3psaWIxZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvdG9hc3RlcmNvbmYuanNvbiBiL3lvY3RvLXBva3kvbWV0YS9jb25mL3RvYXN0ZXJjb25mLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhlNDJlZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL3RvYXN0ZXJjb25mLmpzb24KQEAgLTAsMCArMSwxMDYgQEAKK3sKKyAgICAiY29uZmlnIjogeworICAgICAgICAiTUFDSElORSIgICAgICA6ICJxZW11eDg2IiwKKyAgICAgICAgIkRJU1RSTyIgICAgICAgOiAicG9reSIsCisgICAgICAgICJJTUFHRV9GU1RZUEVTIjogImV4dDMgamZmczIgdGFyLmJ6MiIsCisgICAgICAgICJJTUFHRV9JTlNUQUxMX2FwcGVuZCI6ICIiLAorICAgICAgICAiUEFDS0FHRV9DTEFTU0VTIjogInBhY2thZ2VfcnBtIiwKKyAgICAgICAgIlNES01BQ0hJTkUiICAgOiAieDg2XzY0IgorICAgIH0sCisgICAgImxheWVyc291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiTG9jYWwgT3BlbkVtYmVkZGVkIiwKKyAgICAgICAgICAgICJzb3VyY2V0eXBlIjogImxvY2FsIiwKKyAgICAgICAgICAgICJhcGl1cmwiOiAiLi4vLi4vIiwKKyAgICAgICAgICAgICJicmFuY2hlcyI6IFsiSEVBRCIsICJtYXN0ZXIiLCAiZmlkbyIsICJkaXp6eSJdLAorICAgICAgICAgICAgImxheWVycyI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJuYW1lIjogIm9wZW5lbWJlZGRlZC1jb3JlIiwKKyAgICAgICAgICAgICAgICAgICAgImxvY2FsX3BhdGgiOiAibWV0YSIsCisgICAgICAgICAgICAgICAgICAgICJ2Y3NfdXJsIjogInJlbW90ZTpvcmlnaW4iLAorICAgICAgICAgICAgICAgICAgICAiZGlycGF0aCI6ICJtZXRhIgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiT3BlbkVtYmVkZGVkIiwKKyAgICAgICAgICAgICJzb3VyY2V0eXBlIjogImxheWVyaW5kZXgiLAorICAgICAgICAgICAgImFwaXVybCI6ICJodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcvbGF5ZXJpbmRleC9hcGkvIiwKKyAgICAgICAgICAgICJicmFuY2hlcyI6IFsibWFzdGVyIiwgImZpZG8iLCAiZGl6enkiXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJJbXBvcnRlZCBsYXllcnMiLAorICAgICAgICAgICAgInNvdXJjZXR5cGUiOiAiaW1wb3J0ZWQiLAorICAgICAgICAgICAgImFwaXVybCI6ICIiLAorICAgICAgICAgICAgImJyYW5jaGVzIjogWyJtYXN0ZXIiLCAiZmlkbyIsICJkaXp6eSIsICJIRUFEIl0KKworICAgICAgICB9CisgICAgXSwKKyAgICAiYml0YmFrZSIgOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIm1hc3RlciIsCisgICAgICAgICAgICAiZ2l0dXJsIjogImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UiLAorICAgICAgICAgICAgImJyYW5jaCI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgImRpcnBhdGgiOiAiIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJmaWRvIiwKKyAgICAgICAgICAgICJnaXR1cmwiOiAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSIsCisgICAgICAgICAgICAiYnJhbmNoIjogIjEuMjYiLAorICAgICAgICAgICAgImRpcnBhdGgiOiAiIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJkaXp6eSIsCisgICAgICAgICAgICAiZ2l0dXJsIjogImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UiLAorICAgICAgICAgICAgImJyYW5jaCI6ICIxLjI0IiwKKyAgICAgICAgICAgICJkaXJwYXRoIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiSEVBRCIsCisgICAgICAgICAgICAiZ2l0dXJsIjogImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UiLAorICAgICAgICAgICAgImJyYW5jaCI6ICJIRUFEIiwKKyAgICAgICAgICAgICJkaXJwYXRoIjogIiIKKyAgICAgICAgfQorICAgIF0sCisKKyAgICAiZGVmYXVsdHJlbGVhc2UiOiAibWFzdGVyIiwKKworICAgICJyZWxlYXNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibWFzdGVyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPcGVuRW1iZWRkZWQgbWFzdGVyIiwKKyAgICAgICAgICAgICJiaXRiYWtlIjogIm1hc3RlciIsCisgICAgICAgICAgICAiYnJhbmNoIjogIm1hc3RlciIsCisgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiBdLAorICAgICAgICAgICAgImxheWVyc291cmNlcHJpb3JpdHkiOiB7ICJJbXBvcnRlZCBsYXllcnMiOiA5OSwgIkxvY2FsIE9wZW5FbWJlZGRlZCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAorICAgICAgICAgICAgImhlbHB0ZXh0IjogIlRvYXN0ZXIgd2lsbCBydW4geW91ciBidWlsZHMgdXNpbmcgdGhlIHRpcCBvZiB0aGUgPGEgaHJlZj1cImh0dHA6Ly9jZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLWNvcmUvbG9nL1wiPk9wZW5FbWJlZGRlZCBtYXN0ZXI8L2E+IGJyYW5jaCwgd2hlcmUgYWN0aXZlIGRldmVsb3BtZW50IHRha2VzIHBsYWNlLiBUaGlzIGlzIG5vdCBhIHN0YWJsZSBicmFuY2gsIHNvIHlvdXIgYnVpbGRzIG1pZ2h0IG5vdCB3b3JrIGFzIGV4cGVjdGVkLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZmlkbyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT3BlbkVtYmVkZGVkIEZpZG8iLAorICAgICAgICAgICAgImJpdGJha2UiOiAiZmlkbyIsCisgICAgICAgICAgICAiYnJhbmNoIjogImZpZG8iLAorICAgICAgICAgICAgImRlZmF1bHRsYXllcnMiOiBbICJvcGVuZW1iZWRkZWQtY29yZSIgXSwKKyAgICAgICAgICAgICJsYXllcnNvdXJjZXByaW9yaXR5IjogeyAiSW1wb3J0ZWQgbGF5ZXJzIjogOTksICJMb2NhbCBPcGVuRW1iZWRkZWQiIDogMTAsICJPcGVuRW1iZWRkZWQiIDogIDAgfSwKKyAgICAgICAgICAgICJoZWxwdGV4dCI6ICJUb2FzdGVyIHdpbGwgcnVuIHlvdXIgYnVpbGRzIHdpdGggdGhlIHRpcCBvZiB0aGUgPGEgaHJlZj1cImh0dHA6Ly9jZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLWNvcmUvbG9nLz9oPWZpZG9cIj5PcGVuRW1iZWRkZWQgXCJGaWRvXCI8L2E+IGJyYW5jaCIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZGl6enkiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9wZW5FbWJlZGRlZCBEaXp6eSIsCisgICAgICAgICAgICAiYml0YmFrZSI6ICJkaXp6eSIsCisgICAgICAgICAgICAiYnJhbmNoIjogImRpenp5IiwKKyAgICAgICAgICAgICJkZWZhdWx0bGF5ZXJzIjogWyAib3BlbmVtYmVkZGVkLWNvcmUiIF0sCisgICAgICAgICAgICAibGF5ZXJzb3VyY2Vwcmlvcml0eSI6IHsgIkltcG9ydGVkIGxheWVycyI6IDk5LCAiTG9jYWwgT3BlbkVtYmVkZGVkIiA6IDEwLCAiT3BlbkVtYmVkZGVkIiA6ICAwIH0sCisgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB3aXRoIHRoZSB0aXAgb2YgdGhlIDxhIGhyZWY9XCJodHRwOi8vY2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlL2xvZy8/aD1kaXp6eVwiPk9wZW5FbWJlZGRlZCBcIkRpenp5XCI8L2E+IGJyYW5jaCIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9jYWwiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvY2FsIE9wZW5FbWJlZGRlZCIsCisgICAgICAgICAgICAiYml0YmFrZSI6ICJIRUFEIiwKKyAgICAgICAgICAgICJicmFuY2giOiAiSEVBRCIsCisgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiBdLAorICAgICAgICAgICAgImxheWVyc291cmNlcHJpb3JpdHkiOiB7ICJJbXBvcnRlZCBsYXllcnMiOiA5OSwgIkxvY2FsIE9wZW5FbWJlZGRlZCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAorICAgICAgICAgICAgImhlbHB0ZXh0IjogIlRvYXN0ZXIgd2lsbCBydW4geW91ciBidWlsZHMgd2l0aCB0aGUgdmVyc2lvbiBvZiBPcGVuRW1iZWRkZWQgdGhhdCB5b3UgaGF2ZSBjbG9uZWQgb3IgZG93bmxvYWRlZCB0byB5b3VyIGNvbXB1dGVyLiIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUFMIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BQUwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ4NDIyNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUFMCkBAIC0wLDAgKzEsNTEgQEAKKworQXR0cmlidXRpb24gQXNzdXJhbmNlIExpY2Vuc2UKK0NvcHlyaWdodCAoYykgMjAwMiBieSBBVVRIT1IKK1BST0ZFU1NJT05BTCBJREVOVElGSUNBVElPTiAqIFVSTAorIlBST01PVElPTkFMIFNMT0dBTiBGT1IgQVVUSE9SYFMgUFJPRkVTU0lPTkFMIFBSQUNUSUNFIgorCitBbGwgUmlnaHRzIFJlc2VydmVkCitBVFRSSUJVVElPTiBBU1NVUkFOQ0UgTElDRU5TRSAoYWRhcHRlZCBmcm9tIHRoZSBvcmlnaW5hbCBCU0QgbGljZW5zZSkKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGNvbmRpdGlvbnMgYmVsb3cgYXJlIG1ldC4KK1RoZXNlIGNvbmRpdGlvbnMgcmVxdWlyZSBhIG1vZGVzdCBhdHRyaWJ1dGlvbiB0byA8QVVUSE9SPiAodGhlCisiQXV0aG9yIiksIHdobyBob3BlcyB0aGF0IGl0cyBwcm9tb3Rpb25hbCB2YWx1ZSBtYXkgaGVscCBqdXN0aWZ5IHRoZQordGhvdXNhbmRzIG9mIGRvbGxhcnMgaW4gb3RoZXJ3aXNlIGJpbGxhYmxlIHRpbWUgaW52ZXN0ZWQgaW4gd3JpdGluZwordGhpcyBhbmQgb3RoZXIgZnJlZWx5IGF2YWlsYWJsZSwgb3Blbi1zb3VyY2Ugc29mdHdhcmUuCisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSwgaW4gd2hvbGUgb3IgcGFydCBhbmQgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24gKHRoZSAiQ29kZSIpLCBtdXN0IHByb21pbmVudGx5IGRpc3BsYXkgdGhpcyBHUEctc2lnbmVkCit0ZXh0IGluIHZlcmlmaWFibGUgZm9ybS4KKzIuIFJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgQ29kZSBpbiBiaW5hcnkgZm9ybSBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5Cit0aGlzIEdQRy1zaWduZWQgdGV4dCBpbiBhbnkgZG9jdW1lbnRhdGlvbiBhbmQsIGVhY2ggdGltZSB0aGUgcmVzdWx0aW5nCitleGVjdXRhYmxlIHByb2dyYW0gb3IgYSBwcm9ncmFtIGRlcGVuZGVudCB0aGVyZW9uIGlzIGxhdW5jaGVkLCBhCitwcm9taW5lbnQgZGlzcGxheSAoZS5nLiwgc3BsYXNoIHNjcmVlbiBvciBiYW5uZXIgdGV4dCkgb2YgdGhlIEF1dGhvcmBzCithdHRyaWJ1dGlvbiBpbmZvcm1hdGlvbiwgd2hpY2ggaW5jbHVkZXM6CisoYSkgTmFtZSAoIkFVVEhPUiIpLAorKGIpIFByb2Zlc3Npb25hbCBpZGVudGlmaWNhdGlvbiAoIlBST0ZFU1NJT05BTCBJREVOVElGSUNBVElPTiIpLCBhbmQKKyhjKSBVUkwgKCJVUkwiKS4KKzMuIE5laXRoZXIgdGhlIG5hbWUgbm9yIGFueSB0cmFkZW1hcmsgb2YgdGhlIEF1dGhvciBtYXkgYmUgdXNlZCB0bworZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMKK3ByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKzQuIFVzZXJzIGFyZSBlbnRpcmVseSByZXNwb25zaWJsZSwgdG8gdGhlIGV4Y2x1c2lvbiBvZiB0aGUgQXV0aG9yIGFuZAorYW55IG90aGVyIHBlcnNvbnMsIGZvciBjb21wbGlhbmNlIHdpdGggKDEpIHJlZ3VsYXRpb25zIHNldCBieSBvd25lcnMgb3IKK2FkbWluaXN0cmF0b3JzIG9mIGVtcGxveWVkIGVxdWlwbWVudCwgKDIpIGxpY2Vuc2luZyB0ZXJtcyBvZiBhbnkgb3RoZXIKK3NvZnR3YXJlLCBhbmQgKDMpIGxvY2FsIHJlZ3VsYXRpb25zIHJlZ2FyZGluZyB1c2UsIGluY2x1ZGluZyB0aG9zZQorcmVnYXJkaW5nIGltcG9ydCwgZXhwb3J0LCBhbmQgdXNlIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuCisKK1RISVMgRlJFRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8KK0VWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQU5ZIENPTlRSSUJVVE9SIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorRUZGRUNUUyBPRiBVTkFVVEhPUklaRUQgT1IgTUFMSUNJT1VTIE5FVFdPUksgQUNDRVNTOworUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECitBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgorSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLUVuZCBvZiBMaWNlbnNlCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUZMLTEuMiBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUZMLTEuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODEzMWU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BRkwtMS4yCkBAIC0wLDAgKzEsMTIzIEBACisKKyAgQWNhZGVtaWMgRnJlZSBMaWNlbnNlCisgIFZlcnNpb24gMS4yCisKK1RoaXMgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcCAKKyh0aGUgIk9yaWdpbmFsIFdvcmsiKSB3aG9zZSBvd25lciAodGhlICJMaWNlbnNvciIpIGhhcyBwbGFjZWQgdGhlIAorZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSAKK09yaWdpbmFsIFdvcms6CisKK0xpY2Vuc2VkIHVuZGVyIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgdmVyc2lvbiAxLjIKKworR3JhbnQgb2YgTGljZW5zZS4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIAorY29weSBvZiB0aGUgT3JpZ2luYWwgV29yayAoIllvdSIpIGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCAKK25vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgbm9uLXN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UgKDEpIHRvIHVzZSwgY29weSwgCittb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgCitPcmlnaW5hbCBXb3JrIGFuZCBkZXJpdmF0aXZlIHdvcmtzIHRoZXJlb2YsIGFuZCAoMikgdW5kZXIgcGF0ZW50IGNsYWltcyAKK293bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIExpY2Vuc29yIHRoYXQgYXJlIGVtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCAKK1dvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciwgdG8gbWFrZSwgdXNlLCBzZWxsIGFuZCBvZmZlciBmb3IgCitzYWxlIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBkZXJpdmF0aXZlIHdvcmtzIHRoZXJlb2YsIHN1YmplY3QgdG8gdGhlIAorZm9sbG93aW5nIGNvbmRpdGlvbnMuCisKK0F0dHJpYnV0aW9uIFJpZ2h0cy4gWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIENvZGUgb2YgYW55IAorRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCBvciB0cmFkZW1hcmsgCitub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrLCBhcyB3ZWxsIGFzIGFueSAKK25vdGljZXMgb2YgbGljZW5zaW5nIGFuZCBhbnkgZGVzY3JpcHRpdmUgdGV4dCBpZGVudGlmaWVkIHRoZXJlaW4gYXMgYW4gCisiQXR0cmlidXRpb24gTm90aWNlLiIgWW91IG11c3QgY2F1c2UgdGhlIFNvdXJjZSBDb2RlIGZvciBhbnkgRGVyaXZhdGl2ZSAKK1dvcmtzIHRoYXQgWW91IGNyZWF0ZSB0byBjYXJyeSBhIHByb21pbmVudCBBdHRyaWJ1dGlvbiBOb3RpY2UgcmVhc29uYWJseSAKK2NhbGN1bGF0ZWQgdG8gaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBZb3UgaGF2ZSBtb2RpZmllZCB0aGUgT3JpZ2luYWwgV29yay4KKworRXhjbHVzaW9ucyBmcm9tIExpY2Vuc2UgR3JhbnQuIE5laXRoZXIgdGhlIG5hbWVzIG9mIExpY2Vuc29yLCBub3IgdGhlIAorbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyB0byB0aGUgT3JpZ2luYWwgV29yaywgbm9yIGFueSBvZiB0aGVpciAKK3RyYWRlbWFya3Mgb3Igc2VydmljZSBtYXJrcywgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIAorZGVyaXZlZCBmcm9tIHRoaXMgT3JpZ2luYWwgV29yayB3aXRob3V0IGV4cHJlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIAorb2YgdGhlIExpY2Vuc29yLgorCitXYXJyYW50eSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IAoraW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBXb3JrIGlzIG93bmVkIGJ5IHRoZSBMaWNlbnNvciBvciB0aGF0IHRoZSBPcmlnaW5hbCAKK1dvcmsgaXMgZGlzdHJpYnV0ZWQgYnkgTGljZW5zb3IgdW5kZXIgYSB2YWxpZCBjdXJyZW50IGxpY2Vuc2UgZnJvbSB0aGUgCitjb3B5cmlnaHQgb3duZXIuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoZSBpbW1lZGlhdGVseSBwcm9jZWVkaW5nIAorc2VudGVuY2UsIHRoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBvbiBhbiAiQVMgSVMiIAorQkFTSVMgYW5kIFdJVEhPVVQgV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCAKK2xpbWl0YXRpb24sIHRoZSB3YXJyYW50aWVzIG9mIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIAorRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgT0YgVEhFIE9SSUdJTkFMIAorV09SSyBJUyBXSVRIIFlPVS4gVGhpcyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIGNvbnN0aXR1dGVzIGFuIGVzc2VudGlhbCBwYXJ0IAorb2YgdGhpcyBMaWNlbnNlLiBObyBsaWNlbnNlIHRvIE9yaWdpbmFsIFdvcmsgaXMgZ3JhbnRlZCBoZXJldW5kZXIgZXhjZXB0IAordW5kZXIgdGhpcyBkaXNjbGFpbWVyLgorCitMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCAKK3doZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCBzaGFsbCB0aGUgCitMaWNlbnNvciBiZSBsaWFibGUgdG8gYW55IHBlcnNvbiBmb3IgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIAoraW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCAKK29mIHRoaXMgTGljZW5zZSBvciB0aGUgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGluY2x1ZGluZywgd2l0aG91dCAKK2xpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgCitvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3Nlcy4gVGhpcyAKK2xpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNoYWxsIG5vdCBhcHBseSB0byBsaWFiaWxpdHkgZm9yIGRlYXRoIG9yIHBlcnNvbmFsIAoraW5qdXJ5IHJlc3VsdGluZyBmcm9tIExpY2Vuc29yYHMgbmVnbGlnZW5jZSB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3IAorcHJvaGliaXRzIHN1Y2ggbGltaXRhdGlvbi4gU29tZSBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIAorbGltaXRhdGlvbiBvZiBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc28gdGhpcyBleGNsdXNpb24gYW5kIAorbGltaXRhdGlvbiBtYXkgbm90IGFwcGx5IHRvIFlvdS4KKworTGljZW5zZSB0byBTb3VyY2UgQ29kZS4gVGhlIHRlcm0gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgCit0aGUgT3JpZ2luYWwgV29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQgYW5kIGFsbCBhdmFpbGFibGUgCitkb2N1bWVudGF0aW9uIGRlc2NyaWJpbmcgaG93IHRvIG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yay4gTGljZW5zb3IgaGVyZWJ5IAorYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCAKK1dvcmsgYWxvbmcgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBkaXN0cmlidXRlcy4gCitMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gc2F0aXNmeSB0aGlzIG9ibGlnYXRpb24gYnkgcGxhY2luZyBhIAorbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBpbiBhbiBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IAorcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIHBlcm1pdCBpbmV4cGVuc2l2ZSBhbmQgY29udmVuaWVudCBhY2Nlc3MgYnkgWW91IGZvciAKK2FzIGxvbmcgYXMgTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBieSAKK3B1Ymxpc2hpbmcgdGhlIGFkZHJlc3Mgb2YgdGhhdCBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IGluIGEgbm90aWNlIGltbWVkaWF0ZWx5IAorZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIHRoYXQgYXBwbGllcyB0byB0aGUgT3JpZ2luYWwgV29yay4KKworTXV0dWFsIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIAorYXV0b21hdGljYWxseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgCitieSB0aGlzIExpY2Vuc2UgaWYgWW91IGZpbGUgYSBsYXdzdWl0IGluIGFueSBjb3VydCBhbGxlZ2luZyB0aGF0IGFueSBPU0kgCitDZXJ0aWZpZWQgb3BlbiBzb3VyY2Ugc29mdHdhcmUgdGhhdCBpcyBsaWNlbnNlZCB1bmRlciBhbnkgbGljZW5zZSBjb250YWluaW5nIAordGhpcyAiTXV0dWFsIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uIiBjbGF1c2UgaW5mcmluZ2VzIGFueSBwYXRlbnQgCitjbGFpbXMgdGhhdCBhcmUgZXNzZW50aWFsIHRvIHVzZSB0aGF0IHNvZnR3YXJlLgorCitSaWdodCB0byBVc2UuIFlvdSBtYXkgdXNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGFsbCB3YXlzIG5vdCBvdGhlcndpc2UgCityZXN0cmljdGVkIG9yIGNvbmRpdGlvbmVkIGJ5IHRoaXMgTGljZW5zZSBvciBieSBsYXcsIGFuZCBMaWNlbnNvciBwcm9taXNlcyAKK25vdCB0byBpbnRlcmZlcmUgd2l0aCBvciBiZSByZXNwb25zaWJsZSBmb3Igc3VjaCB1c2VzIGJ5IFlvdS4KKworVGhpcyBsaWNlbnNlIGlzIENvcHlyaWdodCAoQykgMjAwMiBMYXdyZW5jZSBFLiBSb3Nlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBsaWNlbnNlIHdpdGhvdXQgCittb2RpZmljYXRpb24uIFRoaXMgbGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIGV4cHJlc3Mgd3JpdHRlbiAKK3Blcm1pc3Npb24gb2YgaXRzIGNvcHlyaWdodCBvd25lci4KKworLS0gCitFTkQgT0YgTElDRU5TRS4gVGhlIGZvbGxvd2luZyBpcyBpbnRlbmRlZCB0byBkZXNjcmliZSB0aGUgZXNzZW50aWFsIAorZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIChBRkwpIHZlcnNpb24gMS4wIGFuZCBvdGhlciAKK29wZW4gc291cmNlIGxpY2Vuc2VzOgorCitUaGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIGlzIHNpbWlsYXIgdG8gdGhlIEJTRCwgTUlULCBVb0kvTkNTQSBhbmQgQXBhY2hlIAorbGljZW5zZXMgaW4gbWFueSByZXNwZWN0cyBidXQgaXQgaXMgaW50ZW5kZWQgdG8gc29sdmUgYSBmZXcgcHJvYmxlbXMgd2l0aCAKK3Rob3NlIGxpY2Vuc2VzLgorICAgIAorKiBUaGUgQUZMIGlzIHdyaXR0ZW4gc28gYXMgdG8gbWFrZSBpdCBjbGVhciB3aGF0IHNvZnR3YXJlIGlzIGJlaW5nIAorbGljZW5zZWQgKGJ5IHRoZSBpbmNsdXNpb24gb2YgYSBzdGF0ZW1lbnQgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIAoraW4gdGhlIHNvZnR3YXJlKS4gVGhpcyB3YXksIHRoZSBsaWNlbnNlIGZ1bmN0aW9ucyBiZXR0ZXIgdGhhbiBhIHRlbXBsYXRlIAorbGljZW5zZS4gVGhlIEJTRCwgTUlUIGFuZCBVb0kvTkNTQSBsaWNlbnNlcyBhcHBseSB0byB1bmlkZW50aWZpZWQgc29mdHdhcmUuCisgICAgCisqIFRoZSBBRkwgY29udGFpbnMgYSBjb21wbGV0ZSBjb3B5cmlnaHQgZ3JhbnQgdG8gdGhlIHNvZnR3YXJlLiBUaGUgQlNEIAorYW5kIEFwYWNoZSBsaWNlbnNlcyBhcmUgdmFndWUgYW5kIGluY29tcGxldGUgaW4gdGhhdCByZXNwZWN0LgorICAgIAorKiBUaGUgQUZMIGNvbnRhaW5zIGEgY29tcGxldGUgcGF0ZW50IGdyYW50IHRvIHRoZSBzb2Z0d2FyZS4gVGhlIEJTRCwgTUlULCAKK1VvSS9OQ1NBIGFuZCBBcGFjaGUgbGljZW5zZXMgcmVseSBvbiBhbiBpbXBsaWVkIHBhdGVudCBsaWNlbnNlIGFuZCBjb250YWluIAorbm8gZXhwbGljaXQgcGF0ZW50IGdyYW50LgorICAgIAorKiBUaGUgQUZMIG1ha2VzIGl0IGNsZWFyIHRoYXQgbm8gdHJhZGVtYXJrIHJpZ2h0cyBhcmUgZ3JhbnRlZCB0byB0aGUgCitsaWNlbnNvcmBzIHRyYWRlbWFya3MuIFRoZSBBcGFjaGUgbGljZW5zZSBjb250YWlucyBzdWNoIGEgcHJvdmlzaW9uLCBidXQgdGhlIAorQlNELCBNSVQgYW5kIFVvSS9OQ1NBIGxpY2Vuc2VzIGRvIG5vdC4KKyAgICAKKyogVGhlIEFGTCBpbmNsdWRlcyB0aGUgd2FycmFudHkgYnkgdGhlIGxpY2Vuc29yIHRoYXQgaXQgZWl0aGVyIG93bnMgdGhlIAorY29weXJpZ2h0IG9yIHRoYXQgaXQgaXMgZGlzdHJpYnV0aW5nIHRoZSBzb2Z0d2FyZSB1bmRlciBhIGxpY2Vuc2UuIE5vbmUgb2YgCit0aGUgb3RoZXIgbGljZW5zZXMgY29udGFpbiB0aGF0IHdhcnJhbnR5LiBBbGwgb3RoZXIgd2FycmFudGllcyBhcmUgZGlzY2xhaW1lZCwgCithcyBpcyB0aGUgY2FzZSBmb3IgdGhlIG90aGVyIGxpY2Vuc2VzLgorCisqIFRoZSBBRkwgaXMgaXRzZWxmIGNvcHlyaWdodGVkICh3aXRoIHRoZSByaWdodCBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgCit3aXRob3V0IG1vZGlmaWNhdGlvbikuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBvd25lciBvZiB0aGUgY29weXJpZ2h0IHRvIHRoZSAKK2xpY2Vuc2Ugd2lsbCBjb250cm9sIGNoYW5nZXMuIFRoZSBBcGFjaGUgbGljZW5zZSBjb250YWlucyBhIGNvcHlyaWdodCBub3RpY2UsIAorYnV0IHRoZSBCU0QsIE1JVCBhbmQgVW9JL05DU0EgbGljZW5zZXMgZG8gbm90LiAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BRkwtMi4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BRkwtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMjdhMjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FGTC0yLjAKQEAgLTAsMCArMSw0OCBAQAorCitUaGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlCisgdi4gMi4wCisKK1RoaXMgQWNhZGVtaWMgRnJlZSBMaWNlbnNlICh0aGUgIkxpY2Vuc2UiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSAiT3JpZ2luYWwgV29yayIpIHdob3NlIG93bmVyICh0aGUgIkxpY2Vuc29yIikgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOiAgIAorTGljZW5zZWQgdW5kZXIgdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSB2ZXJzaW9uIDIuMAorCisxKSBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgc3VibGljZW5zZWFibGUgbGljZW5zZSB0byBkbyB0aGUgZm9sbG93aW5nOiAKK2EpIHRvIHJlcHJvZHVjZSB0aGUgT3JpZ2luYWwgV29yayBpbiBjb3BpZXM7IAorCitiKSB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MgKCJEZXJpdmF0aXZlIFdvcmtzIikgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yazsgCisKK2MpIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRvIHRoZSBwdWJsaWM7IAorCitkKSB0byBwZXJmb3JtIHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5OyBhbmQgCisKK2UpIHRvIGRpc3BsYXkgdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHkuICAgCisKKzIpIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBzdWJsaWNlbnNlYWJsZSBsaWNlbnNlLCB1bmRlciBwYXRlbnQgY2xhaW1zIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIExpY2Vuc29yIHRoYXQgYXJlIGVtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCBXb3JrIGFzIGZ1cm5pc2hlZCBieSB0aGUgTGljZW5zb3IsIHRvIG1ha2UsIHVzZSwgc2VsbCBhbmQgb2ZmZXIgZm9yIHNhbGUgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MuICAKKworMykgR3JhbnQgb2YgU291cmNlIENvZGUgTGljZW5zZS4gVGhlIHRlcm0gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIE9yaWdpbmFsIFdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0IGFuZCBhbGwgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gZGVzY3JpYmluZyBob3cgdG8gbW9kaWZ5IHRoZSBPcmlnaW5hbCBXb3JrLiAgTGljZW5zb3IgaGVyZWJ5IGFncmVlcyB0byBwcm92aWRlIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZiB0aGUgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIGRpc3RyaWJ1dGVzLiAgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHNhdGlzZnkgdGhpcyBvYmxpZ2F0aW9uIGJ5IHBsYWNpbmcgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGluIGFuIGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIHBlcm1pdCBpbmV4cGVuc2l2ZSBhbmQgY29udmVuaWVudCBhY2Nlc3MgYnkgWW91IGZvciBhcyBsb25nIGFzIExpY2Vuc29yIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBXb3JrLCBhbmQgYnkgcHVibGlzaGluZyB0aGUgYWRkcmVzcyBvZiB0aGF0IGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgaW4gYSBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIHRoYXQgYXBwbGllcyB0byB0aGUgT3JpZ2luYWwgV29yay4gICAgCisKKzQpIEV4Y2x1c2lvbnMgRnJvbSBMaWNlbnNlIEdyYW50LiBOZWl0aGVyIHRoZSBuYW1lcyBvZiBMaWNlbnNvciwgbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLCBub3IgYW55IG9mIHRoZWlyIHRyYWRlbWFya3Mgb3Igc2VydmljZSBtYXJrcywgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIE9yaWdpbmFsIFdvcmsgd2l0aG91dCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgTGljZW5zb3IuICBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgTGljZW5zb3IgZXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLiAgTm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZCB0byBtYWtlLCB1c2UsIHNlbGwgb3Igb2ZmZXIgdG8gc2VsbCBlbWJvZGltZW50cyBvZiBhbnkgcGF0ZW50IGNsYWltcyBvdGhlciB0aGFuIHRoZSBsaWNlbnNlZCBjbGFpbXMgZGVmaW5lZCBpbiBTZWN0aW9uIDIuICBObyByaWdodCBpcyBncmFudGVkIHRvIHRoZSB0cmFkZW1hcmtzIG9mIExpY2Vuc29yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsuICBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tIGxpY2Vuc2luZyB1bmRlciBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aGlzIExpY2Vuc2UgYW55IE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuICAKKworNSkgVGhpcyBzZWN0aW9uIGludGVudGlvbmFsbHkgb21pdHRlZC4gIAorCis2KSBBdHRyaWJ1dGlvbiBSaWdodHMuIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50IG9yIHRyYWRlbWFyayBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrLCBhcyB3ZWxsIGFzIGFueSBub3RpY2VzIG9mIGxpY2Vuc2luZyBhbmQgYW55IGRlc2NyaXB0aXZlIHRleHQgaWRlbnRpZmllZCB0aGVyZWluIGFzIGFuICJBdHRyaWJ1dGlvbiBOb3RpY2UuIiAgWW91IG11c3QgY2F1c2UgdGhlIFNvdXJjZSBDb2RlIGZvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUgdG8gY2FycnkgYSBwcm9taW5lbnQgQXR0cmlidXRpb24gTm90aWNlIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gcmVjaXBpZW50cyB0aGF0IFlvdSBoYXZlIG1vZGlmaWVkIHRoZSBPcmlnaW5hbCBXb3JrLiAgCisKKzcpIFdhcnJhbnR5IG9mIFByb3ZlbmFuY2UgYW5kIERpc2NsYWltZXIgb2YgV2FycmFudHkuIExpY2Vuc29yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIFdvcmsgYW5kIHRoZSBwYXRlbnQgcmlnaHRzIGdyYW50ZWQgaGVyZWluIGJ5IExpY2Vuc29yIGFyZSBvd25lZCBieSB0aGUgTGljZW5zb3Igb3IgYXJlIHN1YmxpY2Vuc2VkIHRvIFlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggdGhlIHBlcm1pc3Npb24gb2YgdGhlIGNvbnRyaWJ1dG9yKHMpIG9mIHRob3NlIGNvcHlyaWdodHMgYW5kIHBhdGVudCByaWdodHMuICBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGUgaW1tZWRpYXRlbHkgcHJvY2VlZGluZyBzZW50ZW5jZSwgdGhlIE9yaWdpbmFsIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuICJBUyBJUyIgQkFTSVMgYW5kIFdJVEhPVVQgV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgT0YgVEhFIE9SSUdJTkFMIFdPUksgSVMgV0lUSCBZT1UuICBUaGlzIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgY29uc3RpdHV0ZXMgYW4gZXNzZW50aWFsIHBhcnQgb2YgdGhpcyBMaWNlbnNlLiAgTm8gbGljZW5zZSB0byBPcmlnaW5hbCBXb3JrIGlzIGdyYW50ZWQgaGVyZXVuZGVyIGV4Y2VwdCB1bmRlciB0aGlzIGRpc2NsYWltZXIuICAKKworOCkgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsIHNoYWxsIHRoZSBMaWNlbnNvciBiZSBsaWFibGUgdG8gYW55IHBlcnNvbiBmb3IgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYSByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMuICBUaGlzIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNoYWxsIG5vdCBhcHBseSB0byBsaWFiaWxpdHkgZm9yIGRlYXRoIG9yIHBlcnNvbmFsIGluanVyeSByZXN1bHRpbmcgZnJvbSBMaWNlbnNvcmBzIG5lZ2xpZ2VuY2UgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLiAgU29tZSBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIGxpbWl0YXRpb24gb2YgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHNvIHRoaXMgZXhjbHVzaW9uIGFuZCBsaW1pdGF0aW9uIG1heSBub3QgYXBwbHkgdG8gWW91LiAgCisKKzkpIEFjY2VwdGFuY2UgYW5kIFRlcm1pbmF0aW9uLiBJZiBZb3UgZGlzdHJpYnV0ZSAgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrLCBZb3UgbXVzdCBtYWtlIGEgcmVhc29uYWJsZSBlZmZvcnQgdW5kZXIgdGhlIGNpcmN1bXN0YW5jZXMgdG8gb2J0YWluIHRoZSBleHByZXNzIGFzc2VudCBvZiByZWNpcGllbnRzIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICBOb3RoaW5nIGVsc2UgYnV0IHRoaXMgTGljZW5zZSAob3IgYW5vdGhlciB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIExpY2Vuc29yIGFuZCBZb3UpIGdyYW50cyBZb3UgcGVybWlzc2lvbiB0byBjcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrIG9yIHRvIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaW4gU2VjdGlvbiAxIGhlcmVpbiwgYW5kIGFueSBhdHRlbXB0IHRvIGRvIHNvIGV4Y2VwdCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIChvciBhbm90aGVyIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4gTGljZW5zb3IgYW5kIFlvdSkgaXMgZXhwcmVzc2x5IHByb2hpYml0ZWQgYnkgVS5TLiBjb3B5cmlnaHQgbGF3LCB0aGUgZXF1aXZhbGVudCBsYXdzIG9mIG90aGVyIGNvdW50cmllcywgYW5kIGJ5IGludGVybmF0aW9uYWwgdHJlYXR5LiAgVGhlcmVmb3JlLCBieSBleGVyY2lzaW5nIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMSBoZXJlaW4sIFlvdSBpbmRpY2F0ZSBZb3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgICAKKworMTApIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSBhcyBvZiB0aGUgZGF0ZSBZb3UgY29tbWVuY2UgYW4gYWN0aW9uLCBpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0sIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50IChpKSBhZ2FpbnN0IExpY2Vuc29yIHdpdGggcmVzcGVjdCB0byBhIHBhdGVudCBhcHBsaWNhYmxlIHRvIHNvZnR3YXJlIG9yIChpaSkgYWdhaW5zdCBhbnkgZW50aXR5IHdpdGggcmVzcGVjdCB0byBhIHBhdGVudCBhcHBsaWNhYmxlIHRvIHRoZSBPcmlnaW5hbCBXb3JrIChidXQgZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgT3JpZ2luYWwgV29yayB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKS4gICAgCisKKzExKSBKdXJpc2RpY3Rpb24sIFZlbnVlIGFuZCBHb3Zlcm5pbmcgTGF3LiBBbnkgYWN0aW9uIG9yIHN1aXQgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIG1heSBiZSBicm91Z2h0IG9ubHkgaW4gdGhlIGNvdXJ0cyBvZiBhIGp1cmlzZGljdGlvbiB3aGVyZWluIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGluIHdoaWNoIExpY2Vuc29yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5IGJ1c2luZXNzLCBhbmQgdW5kZXIgdGhlIGxhd3Mgb2YgdGhhdCBqdXJpc2RpY3Rpb24gZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiAgQW55IHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2Ugb3IgYWZ0ZXIgaXRzIHRlcm1pbmF0aW9uIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIHJlcXVpcmVtZW50cyBhbmQgcGVuYWx0aWVzIG9mIHRoZSBVLlMuIENvcHlyaWdodCBBY3QsIDE3IFUuUy5DLiDCpCAxMDEgZXQgc2VxLiwgdGhlIGVxdWl2YWxlbnQgbGF3cyBvZiBvdGhlciBjb3VudHJpZXMsIGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuICAKKworMTIpIEF0dG9ybmV5cyBGZWVzLiBJbiBhbnkgYWN0aW9uIHRvIGVuZm9yY2UgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBzZWVraW5nIGRhbWFnZXMgcmVsYXRpbmcgdGhlcmV0bywgdGhlIHByZXZhaWxpbmcgcGFydHkgc2hhbGwgYmUgZW50aXRsZWQgdG8gcmVjb3ZlciBpdHMgY29zdHMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgcmVhc29uYWJsZSBhdHRvcm5leXNgIGZlZXMgYW5kIGNvc3RzIGluY3VycmVkIGluIGNvbm5lY3Rpb24gd2l0aCBzdWNoIGFjdGlvbiwgaW5jbHVkaW5nIGFueSBhcHBlYWwgb2Ygc3VjaCBhY3Rpb24uICBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiAgCisKKzEzKSBNaXNjZWxsYW5lb3VzLiBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiAgICAKKworMTQpIERlZmluaXRpb24gb2YgIllvdSIgaW4gVGhpcyBMaWNlbnNlLiAiWW91IiB0aHJvdWdob3V0IHRoaXMgTGljZW5zZSwgd2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiAgRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHRoYXQgY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggeW91LiAgRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LiAgIAorCisxNSkgUmlnaHQgdG8gVXNlLiBZb3UgbWF5IHVzZSB0aGUgT3JpZ2luYWwgV29yayBpbiBhbGwgd2F5cyBub3Qgb3RoZXJ3aXNlIHJlc3RyaWN0ZWQgb3IgY29uZGl0aW9uZWQgYnkgdGhpcyBMaWNlbnNlIG9yIGJ5IGxhdywgYW5kIExpY2Vuc29yIHByb21pc2VzIG5vdCB0byBpbnRlcmZlcmUgd2l0aCBvciBiZSByZXNwb25zaWJsZSBmb3Igc3VjaCB1c2VzIGJ5IFlvdS4gICAgCisKK1RoaXMgbGljZW5zZSBpcyBDb3B5cmlnaHQgKEMpIDIwMDMgTGF3cmVuY2UgRS4gUm9zZW4uICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoaXMgbGljZW5zZSB3aXRob3V0IG1vZGlmaWNhdGlvbi4gIFRoaXMgbGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIGV4cHJlc3Mgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIGl0cyBjb3B5cmlnaHQgb3duZXIuIAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FGTC0yLjEgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FGTC0yLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI4NGU0ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUZMLTIuMQpAQCAtMCwwICsxLDUwIEBACisKK1RoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UKK3YuIDIuMQorCitUaGlzIEFjYWRlbWljIEZyZWUgTGljZW5zZSAodGhlICJMaWNlbnNlIikgYXBwbGllcyB0byBhbnkgb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwICh0aGUgIk9yaWdpbmFsIFdvcmsiKSB3aG9zZSBvd25lciAodGhlICJMaWNlbnNvciIpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazoKKworTGljZW5zZWQgdW5kZXIgdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSB2ZXJzaW9uIDIuMQorCisxKSBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgc3VibGljZW5zZWFibGUgbGljZW5zZSB0byBkbyB0aGUgZm9sbG93aW5nOgorCithKSB0byByZXByb2R1Y2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gY29waWVzOworCitiKSB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MgKCJEZXJpdmF0aXZlIFdvcmtzIikgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yazsKKworYykgdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdG8gdGhlIHB1YmxpYzsKKworZCkgdG8gcGVyZm9ybSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseTsgYW5kCisKK2UpIHRvIGRpc3BsYXkgdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHkuCisKKzIpIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBzdWJsaWNlbnNlYWJsZSBsaWNlbnNlLCB1bmRlciBwYXRlbnQgY2xhaW1zIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIExpY2Vuc29yIHRoYXQgYXJlIGVtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCBXb3JrIGFzIGZ1cm5pc2hlZCBieSB0aGUgTGljZW5zb3IsIHRvIG1ha2UsIHVzZSwgc2VsbCBhbmQgb2ZmZXIgZm9yIHNhbGUgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MuCisKKzMpIEdyYW50IG9mIFNvdXJjZSBDb2RlIExpY2Vuc2UuIFRoZSB0ZXJtICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCBhbmQgYWxsIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJpbmcgaG93IHRvIG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yay4gTGljZW5zb3IgaGVyZWJ5IGFncmVlcyB0byBwcm92aWRlIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZiB0aGUgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIGRpc3RyaWJ1dGVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gc2F0aXNmeSB0aGlzIG9ibGlnYXRpb24gYnkgcGxhY2luZyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgaW4gYW4gaW5mb3JtYXRpb24gcmVwb3NpdG9yeSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gcGVybWl0IGluZXhwZW5zaXZlIGFuZCBjb252ZW5pZW50IGFjY2VzcyBieSBZb3UgZm9yIGFzIGxvbmcgYXMgTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBieSBwdWJsaXNoaW5nIHRoZSBhZGRyZXNzIG9mIHRoYXQgaW5mb3JtYXRpb24gcmVwb3NpdG9yeSBpbiBhIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgdGhhdCBhcHBsaWVzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLgorCis0KSBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTmVpdGhlciB0aGUgbmFtZXMgb2YgTGljZW5zb3IsIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyB0byB0aGUgT3JpZ2luYWwgV29yaywgbm9yIGFueSBvZiB0aGVpciB0cmFkZW1hcmtzIG9yIHNlcnZpY2UgbWFya3MsIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBPcmlnaW5hbCBXb3JrIHdpdGhvdXQgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIExpY2Vuc29yLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgTGljZW5zb3IgZXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLiBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHRvIG1ha2UsIHVzZSwgc2VsbCBvciBvZmZlciB0byBzZWxsIGVtYm9kaW1lbnRzIG9mIGFueSBwYXRlbnQgY2xhaW1zIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2VkIGNsYWltcyBkZWZpbmVkIGluIFNlY3Rpb24gMi4gTm8gcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUgdHJhZGVtYXJrcyBvZiBMaWNlbnNvciBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBPcmlnaW5hbCBXb3JrLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tIGxpY2Vuc2luZyB1bmRlciBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aGlzIExpY2Vuc2UgYW55IE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuCisKKzUpIFRoaXMgc2VjdGlvbiBpbnRlbnRpb25hbGx5IG9taXR0ZWQuCisKKzYpIEF0dHJpYnV0aW9uIFJpZ2h0cy4gWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIENvZGUgb2YgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQgb3IgdHJhZGVtYXJrIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmssIGFzIHdlbGwgYXMgYW55IG5vdGljZXMgb2YgbGljZW5zaW5nIGFuZCBhbnkgZGVzY3JpcHRpdmUgdGV4dCBpZGVudGlmaWVkIHRoZXJlaW4gYXMgYW4gIkF0dHJpYnV0aW9uIE5vdGljZS4iIFlvdSBtdXN0IGNhdXNlIHRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlIHRvIGNhcnJ5IGEgcHJvbWluZW50IEF0dHJpYnV0aW9uIE5vdGljZSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBZb3UgaGF2ZSBtb2RpZmllZCB0aGUgT3JpZ2luYWwgV29yay4KKworNykgV2FycmFudHkgb2YgUHJvdmVuYW5jZSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgV29yayBhbmQgdGhlIHBhdGVudCByaWdodHMgZ3JhbnRlZCBoZXJlaW4gYnkgTGljZW5zb3IgYXJlIG93bmVkIGJ5IHRoZSBMaWNlbnNvciBvciBhcmUgc3VibGljZW5zZWQgdG8gWW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB0aGUgY29udHJpYnV0b3Iocykgb2YgdGhvc2UgY29weXJpZ2h0cyBhbmQgcGF0ZW50IHJpZ2h0cy4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhlIGltbWVkaWF0ZWx5IHByb2NlZWRpbmcgc2VudGVuY2UsIHRoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBvbiBhbiAiQVMgSVMiIEJBU0lTIGFuZCBXSVRIT1VUIFdBUlJBTlRZLCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlIHdhcnJhbnRpZXMgb2YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgT0YgVEhFIE9SSUdJTkFMIFdPUksgSVMgV0lUSCBZT1UuIFRoaXMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBjb25zdGl0dXRlcyBhbiBlc3NlbnRpYWwgcGFydCBvZiB0aGlzIExpY2Vuc2UuIE5vIGxpY2Vuc2UgdG8gT3JpZ2luYWwgV29yayBpcyBncmFudGVkIGhlcmV1bmRlciBleGNlcHQgdW5kZXIgdGhpcyBkaXNjbGFpbWVyLgorCis4KSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgc2hhbGwgdGhlIExpY2Vuc29yIGJlIGxpYWJsZSB0byBhbnkgcGVyc29uIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3Nlcy4gVGhpcyBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzaGFsbCBub3QgYXBwbHkgdG8gbGlhYmlsaXR5IGZvciBkZWF0aCBvciBwZXJzb25hbCBpbmp1cnkgcmVzdWx0aW5nIGZyb20gTGljZW5zb3JgcyBuZWdsaWdlbmNlIHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIHN1Y2ggbGltaXRhdGlvbi4gU29tZSBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIGxpbWl0YXRpb24gb2YgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHNvIHRoaXMgZXhjbHVzaW9uIGFuZCBsaW1pdGF0aW9uIG1heSBub3QgYXBwbHkgdG8gWW91LgorCis5KSBBY2NlcHRhbmNlIGFuZCBUZXJtaW5hdGlvbi4gSWYgWW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrLCBZb3UgbXVzdCBtYWtlIGEgcmVhc29uYWJsZSBlZmZvcnQgdW5kZXIgdGhlIGNpcmN1bXN0YW5jZXMgdG8gb2J0YWluIHRoZSBleHByZXNzIGFzc2VudCBvZiByZWNpcGllbnRzIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIE5vdGhpbmcgZWxzZSBidXQgdGhpcyBMaWNlbnNlIChvciBhbm90aGVyIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4gTGljZW5zb3IgYW5kIFlvdSkgZ3JhbnRzIFlvdSBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmsgb3IgdG8gZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCBpbiBTZWN0aW9uIDEgaGVyZWluLCBhbmQgYW55IGF0dGVtcHQgdG8gZG8gc28gZXhjZXB0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgKG9yIGFub3RoZXIgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiBMaWNlbnNvciBhbmQgWW91KSBpcyBleHByZXNzbHkgcHJvaGliaXRlZCBieSBVLlMuIGNvcHlyaWdodCBsYXcsIHRoZSBlcXVpdmFsZW50IGxhd3Mgb2Ygb3RoZXIgY291bnRyaWVzLCBhbmQgYnkgaW50ZXJuYXRpb25hbCB0cmVhdHkuIFRoZXJlZm9yZSwgYnkgZXhlcmNpc2luZyBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDEgaGVyZWluLCBZb3UgaW5kaWNhdGUgWW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KKworMTApIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSBhcyBvZiB0aGUgZGF0ZSBZb3UgY29tbWVuY2UgYW4gYWN0aW9uLCBpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0sIGFnYWluc3QgTGljZW5zb3Igb3IgYW55IGxpY2Vuc2VlIGFsbGVnaW5nIHRoYXQgdGhlIE9yaWdpbmFsIFdvcmsgaW5mcmluZ2VzIGEgcGF0ZW50LiBUaGlzIHRlcm1pbmF0aW9uIHByb3Zpc2lvbiBzaGFsbCBub3QgYXBwbHkgZm9yIGFuIGFjdGlvbiBhbGxlZ2luZyBwYXRlbnQgaW5mcmluZ2VtZW50IGJ5IGNvbWJpbmF0aW9ucyBvZiB0aGUgT3JpZ2luYWwgV29yayB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlLgorCisxMSkgSnVyaXNkaWN0aW9uLCBWZW51ZSBhbmQgR292ZXJuaW5nIExhdy4gQW55IGFjdGlvbiBvciBzdWl0IHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBtYXkgYmUgYnJvdWdodCBvbmx5IGluIHRoZSBjb3VydHMgb2YgYSBqdXJpc2RpY3Rpb24gd2hlcmVpbiB0aGUgTGljZW5zb3IgcmVzaWRlcyBvciBpbiB3aGljaCBMaWNlbnNvciBjb25kdWN0cyBpdHMgcHJpbWFyeSBidXNpbmVzcywgYW5kIHVuZGVyIHRoZSBsYXdzIG9mIHRoYXQganVyaXNkaWN0aW9uIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZSBvciBhZnRlciBpdHMgdGVybWluYXRpb24gc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgcmVxdWlyZW1lbnRzIGFuZCBwZW5hbHRpZXMgb2YgdGhlIFUuUy4gQ29weXJpZ2h0IEFjdCwgMTcgVS5TLkMuICYjMTk0OyYjMTY3OyAxMDEgZXQgc2VxLiwgdGhlIGVxdWl2YWxlbnQgbGF3cyBvZiBvdGhlciBjb3VudHJpZXMsIGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworMTIpIEF0dG9ybmV5cyBGZWVzLiBJbiBhbnkgYWN0aW9uIHRvIGVuZm9yY2UgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBzZWVraW5nIGRhbWFnZXMgcmVsYXRpbmcgdGhlcmV0bywgdGhlIHByZXZhaWxpbmcgcGFydHkgc2hhbGwgYmUgZW50aXRsZWQgdG8gcmVjb3ZlciBpdHMgY29zdHMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgcmVhc29uYWJsZSBhdHRvcm5leXNgIGZlZXMgYW5kIGNvc3RzIGluY3VycmVkIGluIGNvbm5lY3Rpb24gd2l0aCBzdWNoIGFjdGlvbiwgaW5jbHVkaW5nIGFueSBhcHBlYWwgb2Ygc3VjaCBhY3Rpb24uIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKKzEzKSBNaXNjZWxsYW5lb3VzLiBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuCisKKzE0KSBEZWZpbml0aW9uIG9mICJZb3UiIGluIFRoaXMgTGljZW5zZS4gIllvdSIgdGhyb3VnaG91dCB0aGlzIExpY2Vuc2UsIHdoZXRoZXIgaW4gdXBwZXIgb3IgbG93ZXIgY2FzZSwgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHRoYXQgY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggeW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzE1KSBSaWdodCB0byBVc2UuIFlvdSBtYXkgdXNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGFsbCB3YXlzIG5vdCBvdGhlcndpc2UgcmVzdHJpY3RlZCBvciBjb25kaXRpb25lZCBieSB0aGlzIExpY2Vuc2Ugb3IgYnkgbGF3LCBhbmQgTGljZW5zb3IgcHJvbWlzZXMgbm90IHRvIGludGVyZmVyZSB3aXRoIG9yIGJlIHJlc3BvbnNpYmxlIGZvciBzdWNoIHVzZXMgYnkgWW91LgorCitUaGlzIGxpY2Vuc2UgaXMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgTGF3cmVuY2UgRS4gUm9zZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0aGlzIGxpY2Vuc2Ugd2l0aG91dCBtb2RpZmljYXRpb24uIFRoaXMgbGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIGV4cHJlc3Mgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIGl0cyBjb3B5cmlnaHQgb3duZXIuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUZMLTMuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUZMLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjZjMjU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BRkwtMy4wCkBAIC0wLDAgKzEsMjcgQEAKKworQWNhZGVtaWMgRnJlZSBMaWNlbnNlICgmIzgyMjA7QUZMJiM4MjIxOykgdi4gMy4wCitUaGlzIEFjYWRlbWljIEZyZWUgTGljZW5zZSAodGhlICJMaWNlbnNlIikgYXBwbGllcyB0byBhbnkgb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwICh0aGUgIk9yaWdpbmFsIFdvcmsiKSB3aG9zZSBvd25lciAodGhlICJMaWNlbnNvciIpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBsaWNlbnNpbmcgbm90aWNlIGFkamFjZW50IHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazoKK0xpY2Vuc2VkIHVuZGVyIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgdmVyc2lvbiAzLjAKKworMSkgR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIExpY2Vuc29yIGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgc3VibGljZW5zYWJsZSBsaWNlbnNlLCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjb3B5cmlnaHQsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CithKSB0byByZXByb2R1Y2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gY29waWVzLCBlaXRoZXIgYWxvbmUgb3IgYXMgcGFydCBvZiBhIGNvbGxlY3RpdmUgd29yazsKK2IpIHRvIHRyYW5zbGF0ZSwgYWRhcHQsIGFsdGVyLCB0cmFuc2Zvcm0sIG1vZGlmeSwgb3IgYXJyYW5nZSB0aGUgT3JpZ2luYWwgV29yaywgdGhlcmVieSBjcmVhdGluZyBkZXJpdmF0aXZlIHdvcmtzICgiRGVyaXZhdGl2ZSBXb3JrcyIpIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcms7CitjKSB0byBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0byB0aGUgcHVibGljLCB1bmRlciBhbnkgbGljZW5zZSBvZiB5b3VyIGNob2ljZSB0aGF0IGRvZXMgbm90IGNvbnRyYWRpY3QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBpbmNsdWRpbmcgTGljZW5zb3ImIzgyMTc7cyByZXNlcnZlZCByaWdodHMgYW5kIHJlbWVkaWVzLCBpbiB0aGlzIEFjYWRlbWljIEZyZWUgTGljZW5zZTsKK2QpIHRvIHBlcmZvcm0gdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHk7IGFuZAorZSkgdG8gZGlzcGxheSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseS4KKzIpIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBMaWNlbnNvciBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHN1YmxpY2Vuc2FibGUgbGljZW5zZSwgdW5kZXIgcGF0ZW50IGNsYWltcyBvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBMaWNlbnNvciB0aGF0IGFyZSBlbWJvZGllZCBpbiB0aGUgT3JpZ2luYWwgV29yayBhcyBmdXJuaXNoZWQgYnkgdGhlIExpY2Vuc29yLCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBwYXRlbnRzLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZCBpbXBvcnQgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MuCiszKSBHcmFudCBvZiBTb3VyY2UgQ29kZSBMaWNlbnNlLiBUaGUgdGVybSAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgT3JpZ2luYWwgV29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQgYW5kIGFsbCBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbiBkZXNjcmliaW5nIGhvdyB0byBtb2RpZnkgdGhlIE9yaWdpbmFsIFdvcmsuIExpY2Vuc29yIGFncmVlcyB0byBwcm92aWRlIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZiB0aGUgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIGRpc3RyaWJ1dGVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gc2F0aXNmeSB0aGlzIG9ibGlnYXRpb24gYnkgcGxhY2luZyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgaW4gYW4gaW5mb3JtYXRpb24gcmVwb3NpdG9yeSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gcGVybWl0IGluZXhwZW5zaXZlIGFuZCBjb252ZW5pZW50IGFjY2VzcyBieSBZb3UgZm9yIGFzIGxvbmcgYXMgTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFdvcmsuCis0KSBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTmVpdGhlciB0aGUgbmFtZXMgb2YgTGljZW5zb3IsIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyB0byB0aGUgT3JpZ2luYWwgV29yaywgbm9yIGFueSBvZiB0aGVpciB0cmFkZW1hcmtzIG9yIHNlcnZpY2UgbWFya3MsIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBPcmlnaW5hbCBXb3JrIHdpdGhvdXQgZXhwcmVzcyBwcmlvciBwZXJtaXNzaW9uIG9mIHRoZSBMaWNlbnNvci4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLCBub3RoaW5nIGluIHRoaXMgTGljZW5zZSBncmFudHMgYW55IGxpY2Vuc2UgdG8gTGljZW5zb3ImIzgyMTc7cyB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkuIE5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBvciBpbXBvcnQgZW1ib2RpbWVudHMgb2YgYW55IHBhdGVudCBjbGFpbXMgb3RoZXIgdGhhbiB0aGUgbGljZW5zZWQgY2xhaW1zIGRlZmluZWQgaW4gU2VjdGlvbiAyLiBObyBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gdGhlIHRyYWRlbWFya3Mgb2YgTGljZW5zb3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgV29yay4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgTGljZW5zb3IgZnJvbSBsaWNlbnNpbmcgdW5kZXIgdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlIGFueSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3Igb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYSByaWdodCB0byBsaWNlbnNlLgorNSkgRXh0ZXJuYWwgRGVwbG95bWVudC4gVGhlIHRlcm0gIkV4dGVybmFsIERlcGxveW1lbnQiIG1lYW5zIHRoZSB1c2UsIGRpc3RyaWJ1dGlvbiwgb3IgY29tbXVuaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIGluIGFueSB3YXkgc3VjaCB0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgbWF5IGJlIHVzZWQgYnkgYW55b25lIG90aGVyIHRoYW4gWW91LCB3aGV0aGVyIHRob3NlIHdvcmtzIGFyZSBkaXN0cmlidXRlZCBvciBjb21tdW5pY2F0ZWQgdG8gdGhvc2UgcGVyc29ucyBvciBtYWRlIGF2YWlsYWJsZSBhcyBhbiBhcHBsaWNhdGlvbiBpbnRlbmRlZCBmb3IgdXNlIG92ZXIgYSBuZXR3b3JrLiBBcyBhbiBleHByZXNzIGNvbmRpdGlvbiBmb3IgdGhlIGdyYW50cyBvZiBsaWNlbnNlIGhlcmV1bmRlciwgWW91IG11c3QgdHJlYXQgYW55IEV4dGVybmFsIERlcGxveW1lbnQgYnkgWW91IG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrIGFzIGEgZGlzdHJpYnV0aW9uIHVuZGVyIHNlY3Rpb24gMShjKS4KKzYpIEF0dHJpYnV0aW9uIFJpZ2h0cy4gWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIENvZGUgb2YgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIG9yIHRyYWRlbWFyayBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrLCBhcyB3ZWxsIGFzIGFueSBub3RpY2VzIG9mIGxpY2Vuc2luZyBhbmQgYW55IGRlc2NyaXB0aXZlIHRleHQgaWRlbnRpZmllZCB0aGVyZWluIGFzIGFuICJBdHRyaWJ1dGlvbiBOb3RpY2UuIiBZb3UgbXVzdCBjYXVzZSB0aGUgU291cmNlIENvZGUgZm9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSB0byBjYXJyeSBhIHByb21pbmVudCBBdHRyaWJ1dGlvbiBOb3RpY2UgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSByZWNpcGllbnRzIHRoYXQgWW91IGhhdmUgbW9kaWZpZWQgdGhlIE9yaWdpbmFsIFdvcmsuCis3KSBXYXJyYW50eSBvZiBQcm92ZW5hbmNlIGFuZCBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBMaWNlbnNvciB3YXJyYW50cyB0aGF0IHRoZSBjb3B5cmlnaHQgaW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCB0aGUgcGF0ZW50IHJpZ2h0cyBncmFudGVkIGhlcmVpbiBieSBMaWNlbnNvciBhcmUgb3duZWQgYnkgdGhlIExpY2Vuc29yIG9yIGFyZSBzdWJsaWNlbnNlZCB0byBZb3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHRoZSBjb250cmlidXRvcihzKSBvZiB0aG9zZSBjb3B5cmlnaHRzIGFuZCBwYXRlbnQgcmlnaHRzLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGUgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHNlbnRlbmNlLCB0aGUgT3JpZ2luYWwgV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2Ugb24gYW4gIkFTIElTIiBCQVNJUyBhbmQgV0lUSE9VVCBXQVJSQU5UWSwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSB3YXJyYW50aWVzIG9mIG5vbi1pbmZyaW5nZW1lbnQsIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIE9GIFRIRSBPUklHSU5BTCBXT1JLIElTIFdJVEggWU9VLiBUaGlzIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgY29uc3RpdHV0ZXMgYW4gZXNzZW50aWFsIHBhcnQgb2YgdGhpcyBMaWNlbnNlLiBObyBsaWNlbnNlIHRvIHRoZSBPcmlnaW5hbCBXb3JrIGlzIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlIGV4Y2VwdCB1bmRlciB0aGlzIGRpc2NsYWltZXIuCis4KSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgc2hhbGwgdGhlIExpY2Vuc29yIGJlIGxpYWJsZSB0byBhbnlvbmUgZm9yIGFueSBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3Nlcy4gVGhpcyBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzaGFsbCBub3QgYXBwbHkgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLgorOSkgQWNjZXB0YW5jZSBhbmQgVGVybWluYXRpb24uIElmLCBhdCBhbnkgdGltZSwgWW91IGV4cHJlc3NseSBhc3NlbnRlZCB0byB0aGlzIExpY2Vuc2UsIHRoYXQgYXNzZW50IGluZGljYXRlcyB5b3VyIGNsZWFyIGFuZCBpcnJldm9jYWJsZSBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gSWYgWW91IGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrLCBZb3UgbXVzdCBtYWtlIGEgcmVhc29uYWJsZSBlZmZvcnQgdW5kZXIgdGhlIGNpcmN1bXN0YW5jZXMgdG8gb2J0YWluIHRoZSBleHByZXNzIGFzc2VudCBvZiByZWNpcGllbnRzIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFRoaXMgTGljZW5zZSBjb25kaXRpb25zIHlvdXIgcmlnaHRzIHRvIHVuZGVydGFrZSB0aGUgYWN0aXZpdGllcyBsaXN0ZWQgaW4gU2VjdGlvbiAxLCBpbmNsdWRpbmcgeW91ciByaWdodCB0byBjcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrLCBhbmQgZG9pbmcgc28gd2l0aG91dCBob25vcmluZyB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBpcyBwcm9oaWJpdGVkIGJ5IGNvcHlyaWdodCBsYXcgYW5kIGludGVybmF0aW9uYWwgdHJlYXR5LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBhZmZlY3QgY29weXJpZ2h0IGV4Y2VwdGlvbnMgYW5kIGxpbWl0YXRpb25zIChpbmNsdWRpbmcgJiM4MjIwO2ZhaXIgdXNlJiM4MjIxOyBvciAmIzgyMjA7ZmFpciBkZWFsaW5nJiM4MjIxOykuIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSB1cG9uIHlvdXIgZmFpbHVyZSB0byBob25vciB0aGUgY29uZGl0aW9ucyBpbiBTZWN0aW9uIDEoYykuCisxMCkgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24uIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIGFzIG9mIHRoZSBkYXRlIFlvdSBjb21tZW5jZSBhbiBhY3Rpb24sIGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSwgYWdhaW5zdCBMaWNlbnNvciBvciBhbnkgbGljZW5zZWUgYWxsZWdpbmcgdGhhdCB0aGUgT3JpZ2luYWwgV29yayBpbmZyaW5nZXMgYSBwYXRlbnQuIFRoaXMgdGVybWluYXRpb24gcHJvdmlzaW9uIHNoYWxsIG5vdCBhcHBseSBmb3IgYW4gYWN0aW9uIGFsbGVnaW5nIHBhdGVudCBpbmZyaW5nZW1lbnQgYnkgY29tYmluYXRpb25zIG9mIHRoZSBPcmlnaW5hbCBXb3JrIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUuCisxMSkgSnVyaXNkaWN0aW9uLCBWZW51ZSBhbmQgR292ZXJuaW5nIExhdy4gQW55IGFjdGlvbiBvciBzdWl0IHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBtYXkgYmUgYnJvdWdodCBvbmx5IGluIHRoZSBjb3VydHMgb2YgYSBqdXJpc2RpY3Rpb24gd2hlcmVpbiB0aGUgTGljZW5zb3IgcmVzaWRlcyBvciBpbiB3aGljaCBMaWNlbnNvciBjb25kdWN0cyBpdHMgcHJpbWFyeSBidXNpbmVzcywgYW5kIHVuZGVyIHRoZSBsYXdzIG9mIHRoYXQganVyaXNkaWN0aW9uIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZSBvciBhZnRlciBpdHMgdGVybWluYXRpb24gc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgcmVxdWlyZW1lbnRzIGFuZCBwZW5hbHRpZXMgb2YgY29weXJpZ2h0IG9yIHBhdGVudCBsYXcgaW4gdGhlIGFwcHJvcHJpYXRlIGp1cmlzZGljdGlvbi4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKzEyKSBBdHRvcm5leXMmIzgyMTc7IEZlZXMuIEluIGFueSBhY3Rpb24gdG8gZW5mb3JjZSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHNlZWtpbmcgZGFtYWdlcyByZWxhdGluZyB0aGVyZXRvLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZSBlbnRpdGxlZCB0byByZWNvdmVyIGl0cyBjb3N0cyBhbmQgZXhwZW5zZXMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCByZWFzb25hYmxlIGF0dG9ybmV5c2AgZmVlcyBhbmQgY29zdHMgaW5jdXJyZWQgaW4gY29ubmVjdGlvbiB3aXRoIHN1Y2ggYWN0aW9uLCBpbmNsdWRpbmcgYW55IGFwcGVhbCBvZiBzdWNoIGFjdGlvbi4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKzEzKSBNaXNjZWxsYW5lb3VzLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4KKzE0KSBEZWZpbml0aW9uIG9mICJZb3UiIGluIFRoaXMgTGljZW5zZS4gIllvdSIgdGhyb3VnaG91dCB0aGlzIExpY2Vuc2UsIHdoZXRoZXIgaW4gdXBwZXIgb3IgbG93ZXIgY2FzZSwgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHRoYXQgY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggeW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisxNSkgUmlnaHQgdG8gVXNlLiBZb3UgbWF5IHVzZSB0aGUgT3JpZ2luYWwgV29yayBpbiBhbGwgd2F5cyBub3Qgb3RoZXJ3aXNlIHJlc3RyaWN0ZWQgb3IgY29uZGl0aW9uZWQgYnkgdGhpcyBMaWNlbnNlIG9yIGJ5IGxhdywgYW5kIExpY2Vuc29yIHByb21pc2VzIG5vdCB0byBpbnRlcmZlcmUgd2l0aCBvciBiZSByZXNwb25zaWJsZSBmb3Igc3VjaCB1c2VzIGJ5IFlvdS4KKzE2KSBNb2RpZmljYXRpb24gb2YgVGhpcyBMaWNlbnNlLiBUaGlzIExpY2Vuc2UgaXMgQ29weXJpZ2h0ICYjMTY5OyAyMDA1IExhd3JlbmNlIFJvc2VuLiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSwgb3IgY29tbXVuaWNhdGUgdGhpcyBMaWNlbnNlIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBwZXJtaXRzIFlvdSB0byBtb2RpZnkgdGhpcyBMaWNlbnNlIGFzIGFwcGxpZWQgdG8gdGhlIE9yaWdpbmFsIFdvcmsgb3IgdG8gRGVyaXZhdGl2ZSBXb3Jrcy4gSG93ZXZlciwgWW91IG1heSBtb2RpZnkgdGhlIHRleHQgb2YgdGhpcyBMaWNlbnNlIGFuZCBjb3B5LCBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHlvdXIgbW9kaWZpZWQgdmVyc2lvbiAodGhlICJNb2RpZmllZCBMaWNlbnNlIikgYW5kIGFwcGx5IGl0IHRvIG90aGVyIG9yaWdpbmFsIHdvcmtzIG9mIGF1dGhvcnNoaXAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IChpKSBZb3UgbWF5IG5vdCBpbmRpY2F0ZSBpbiBhbnkgd2F5IHRoYXQgeW91ciBNb2RpZmllZCBMaWNlbnNlIGlzIHRoZSAiQWNhZGVtaWMgRnJlZSBMaWNlbnNlIiBvciAiQUZMIiBhbmQgeW91IG1heSBub3QgdXNlIHRob3NlIG5hbWVzIGluIHRoZSBuYW1lIG9mIHlvdXIgTW9kaWZpZWQgTGljZW5zZTsgKGlpKSBZb3UgbXVzdCByZXBsYWNlIHRoZSBub3RpY2Ugc3BlY2lmaWVkIGluIHRoZSBmaXJzdCBwYXJhZ3JhcGggYWJvdmUgd2l0aCB0aGUgbm90aWNlICJMaWNlbnNlZCB1bmRlciA8aW5zZXJ0IHlvdXIgbGljZW5zZSBuYW1lIGhlcmU+IiBvciB3aXRoIGEgbm90aWNlIG9mIHlvdXIgb3duIHRoYXQgaXMgbm90IGNvbmZ1c2luZ2x5IHNpbWlsYXIgdG8gdGhlIG5vdGljZSBpbiB0aGlzIExpY2Vuc2U7IGFuZCAoaWlpKSBZb3UgbWF5IG5vdCBjbGFpbSB0aGF0IHlvdXIgb3JpZ2luYWwgd29ya3MgYXJlIG9wZW4gc291cmNlIHNvZnR3YXJlIHVubGVzcyB5b3VyIE1vZGlmaWVkIExpY2Vuc2UgaGFzIGJlZW4gYXBwcm92ZWQgYnkgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSAoT1NJKSBhbmQgWW91IGNvbXBseSB3aXRoIGl0cyBsaWNlbnNlIHJldmlldyBhbmQgY2VydGlmaWNhdGlvbiBwcm9jZXNzLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FHUEwtMy4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BR1BMLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmExM2VkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BR1BMLTMuMApAQCAtMCwwICsxLDY2MSBAQAorICAgICAgICAgICAgICAgICAgICBHTlUgQUZGRVJPIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLCAxOSBOb3ZlbWJlciAyMDA3CisKKyBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+CisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQorCisgIFRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5bGVmdCBsaWNlbnNlIGZvcgorc29mdHdhcmUgYW5kIG90aGVyIGtpbmRzIG9mIHdvcmtzLCBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZW5zdXJlCitjb29wZXJhdGlvbiB3aXRoIHRoZSBjb21tdW5pdHkgaW4gdGhlIGNhc2Ugb2YgbmV0d29yayBzZXJ2ZXIgc29mdHdhcmUuCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFuZCBvdGhlciBwcmFjdGljYWwgd29ya3MgYXJlIGRlc2lnbmVkCit0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29udHJhc3QsCitvdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8KK3NoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZQorc29mdHdhcmUgZm9yIGFsbCBpdHMgdXNlcnMuCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhlbSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3UKK3dhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CitmcmVlIHByb2dyYW1zLCBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBEZXZlbG9wZXJzIHRoYXQgdXNlIG91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBwcm90ZWN0IHlvdXIgcmlnaHRzCit3aXRoIHR3byBzdGVwczogKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyCit5b3UgdGhpcyBMaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUKK2FuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEEgc2Vjb25kYXJ5IGJlbmVmaXQgb2YgZGVmZW5kaW5nIGFsbCB1c2VycycgZnJlZWRvbSBpcyB0aGF0CitpbXByb3ZlbWVudHMgbWFkZSBpbiBhbHRlcm5hdGUgdmVyc2lvbnMgb2YgdGhlIHByb2dyYW0sIGlmIHRoZXkKK3JlY2VpdmUgd2lkZXNwcmVhZCB1c2UsIGJlY29tZSBhdmFpbGFibGUgZm9yIG90aGVyIGRldmVsb3BlcnMgdG8KK2luY29ycG9yYXRlLiAgTWFueSBkZXZlbG9wZXJzIG9mIGZyZWUgc29mdHdhcmUgYXJlIGhlYXJ0ZW5lZCBhbmQKK2VuY291cmFnZWQgYnkgdGhlIHJlc3VsdGluZyBjb29wZXJhdGlvbi4gIEhvd2V2ZXIsIGluIHRoZSBjYXNlIG9mCitzb2Z0d2FyZSB1c2VkIG9uIG5ldHdvcmsgc2VydmVycywgdGhpcyByZXN1bHQgbWF5IGZhaWwgdG8gY29tZSBhYm91dC4KK1RoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBwZXJtaXRzIG1ha2luZyBhIG1vZGlmaWVkIHZlcnNpb24gYW5kCitsZXR0aW5nIHRoZSBwdWJsaWMgYWNjZXNzIGl0IG9uIGEgc2VydmVyIHdpdGhvdXQgZXZlciByZWxlYXNpbmcgaXRzCitzb3VyY2UgY29kZSB0byB0aGUgcHVibGljLgorCisgIFRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgZGVzaWduZWQgc3BlY2lmaWNhbGx5IHRvCitlbnN1cmUgdGhhdCwgaW4gc3VjaCBjYXNlcywgdGhlIG1vZGlmaWVkIHNvdXJjZSBjb2RlIGJlY29tZXMgYXZhaWxhYmxlCit0byB0aGUgY29tbXVuaXR5LiAgSXQgcmVxdWlyZXMgdGhlIG9wZXJhdG9yIG9mIGEgbmV0d29yayBzZXJ2ZXIgdG8KK3Byb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZSBtb2RpZmllZCB2ZXJzaW9uIHJ1bm5pbmcgdGhlcmUgdG8gdGhlCit1c2VycyBvZiB0aGF0IHNlcnZlci4gIFRoZXJlZm9yZSwgcHVibGljIHVzZSBvZiBhIG1vZGlmaWVkIHZlcnNpb24sIG9uCithIHB1YmxpY2x5IGFjY2Vzc2libGUgc2VydmVyLCBnaXZlcyB0aGUgcHVibGljIGFjY2VzcyB0byB0aGUgc291cmNlCitjb2RlIG9mIHRoZSBtb2RpZmllZCB2ZXJzaW9uLgorCisgIEFuIG9sZGVyIGxpY2Vuc2UsIGNhbGxlZCB0aGUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCitwdWJsaXNoZWQgYnkgQWZmZXJvLCB3YXMgZGVzaWduZWQgdG8gYWNjb21wbGlzaCBzaW1pbGFyIGdvYWxzLiAgVGhpcyBpcworYSBkaWZmZXJlbnQgbGljZW5zZSwgbm90IGEgdmVyc2lvbiBvZiB0aGUgQWZmZXJvIEdQTCwgYnV0IEFmZmVybyBoYXMKK3JlbGVhc2VkIGEgbmV3IHZlcnNpb24gb2YgdGhlIEFmZmVybyBHUEwgd2hpY2ggcGVybWl0cyByZWxpY2Vuc2luZyB1bmRlcgordGhpcyBsaWNlbnNlLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisgICAgICAgICAgICAgICAgICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgMC4gRGVmaW5pdGlvbnMuCisKKyAgIlRoaXMgTGljZW5zZSIgcmVmZXJzIHRvIHZlcnNpb24gMyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCisgICJDb3B5cmlnaHQiIGFsc28gbWVhbnMgY29weXJpZ2h0LWxpa2UgbGF3cyB0aGF0IGFwcGx5IHRvIG90aGVyIGtpbmRzIG9mCit3b3Jrcywgc3VjaCBhcyBzZW1pY29uZHVjdG9yIG1hc2tzLgorCisgICJUaGUgUHJvZ3JhbSIgcmVmZXJzIHRvIGFueSBjb3B5cmlnaHRhYmxlIHdvcmsgbGljZW5zZWQgdW5kZXIgdGhpcworTGljZW5zZS4gIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLiAgIkxpY2Vuc2VlcyIgYW5kCisicmVjaXBpZW50cyIgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCisKKyAgVG8gIm1vZGlmeSIgYSB3b3JrIG1lYW5zIHRvIGNvcHkgZnJvbSBvciBhZGFwdCBhbGwgb3IgcGFydCBvZiB0aGUgd29yaworaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mIGFuCitleGFjdCBjb3B5LiAgVGhlIHJlc3VsdGluZyB3b3JrIGlzIGNhbGxlZCBhICJtb2RpZmllZCB2ZXJzaW9uIiBvZiB0aGUKK2VhcmxpZXIgd29yayBvciBhIHdvcmsgImJhc2VkIG9uIiB0aGUgZWFybGllciB3b3JrLgorCisgIEEgImNvdmVyZWQgd29yayIgbWVhbnMgZWl0aGVyIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0gb3IgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbS4KKworICBUbyAicHJvcGFnYXRlIiBhIHdvcmsgbWVhbnMgdG8gZG8gYW55dGhpbmcgd2l0aCBpdCB0aGF0LCB3aXRob3V0CitwZXJtaXNzaW9uLCB3b3VsZCBtYWtlIHlvdSBkaXJlY3RseSBvciBzZWNvbmRhcmlseSBsaWFibGUgZm9yCitpbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGEKK2NvbXB1dGVyIG9yIG1vZGlmeWluZyBhIHByaXZhdGUgY29weS4gIFByb3BhZ2F0aW9uIGluY2x1ZGVzIGNvcHlpbmcsCitkaXN0cmlidXRpb24gKHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24pLCBtYWtpbmcgYXZhaWxhYmxlIHRvIHRoZQorcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBhcyB3ZWxsLgorCisgIFRvICJjb252ZXkiIGEgd29yayBtZWFucyBhbnkga2luZCBvZiBwcm9wYWdhdGlvbiB0aGF0IGVuYWJsZXMgb3RoZXIKK3BhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaAorYSBjb21wdXRlciBuZXR3b3JrLCB3aXRoIG5vIHRyYW5zZmVyIG9mIGEgY29weSwgaXMgbm90IGNvbnZleWluZy4KKworICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyAiQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyIKK3RvIHRoZSBleHRlbnQgdGhhdCBpdCBpbmNsdWRlcyBhIGNvbnZlbmllbnQgYW5kIHByb21pbmVudGx5IHZpc2libGUKK2ZlYXR1cmUgdGhhdCAoMSkgZGlzcGxheXMgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSwgYW5kICgyKQordGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUKK2V4dGVudCB0aGF0IHdhcnJhbnRpZXMgYXJlIHByb3ZpZGVkKSwgdGhhdCBsaWNlbnNlZXMgbWF5IGNvbnZleSB0aGUKK3dvcmsgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIElmCit0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYQorbWVudSwgYSBwcm9taW5lbnQgaXRlbSBpbiB0aGUgbGlzdCBtZWV0cyB0aGlzIGNyaXRlcmlvbi4KKworICAxLiBTb3VyY2UgQ29kZS4KKworICBUaGUgInNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yaworZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgIk9iamVjdCBjb2RlIiBtZWFucyBhbnkgbm9uLXNvdXJjZQorZm9ybSBvZiBhIHdvcmsuCisKKyAgQSAiU3RhbmRhcmQgSW50ZXJmYWNlIiBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwKK3N0YW5kYXJkIGRlZmluZWQgYnkgYSByZWNvZ25pemVkIHN0YW5kYXJkcyBib2R5LCBvciwgaW4gdGhlIGNhc2Ugb2YKK2ludGVyZmFjZXMgc3BlY2lmaWVkIGZvciBhIHBhcnRpY3VsYXIgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UsIG9uZSB0aGF0CitpcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4KKworICBUaGUgIlN5c3RlbSBMaWJyYXJpZXMiIG9mIGFuIGV4ZWN1dGFibGUgd29yayBpbmNsdWRlIGFueXRoaW5nLCBvdGhlcgordGhhbiB0aGUgd29yayBhcyBhIHdob2xlLCB0aGF0IChhKSBpcyBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGZvcm0gb2YKK3BhY2thZ2luZyBhIE1ham9yIENvbXBvbmVudCwgYnV0IHdoaWNoIGlzIG5vdCBwYXJ0IG9mIHRoYXQgTWFqb3IKK0NvbXBvbmVudCwgYW5kIChiKSBzZXJ2ZXMgb25seSB0byBlbmFibGUgdXNlIG9mIHRoZSB3b3JrIHdpdGggdGhhdAorTWFqb3IgQ29tcG9uZW50LCBvciB0byBpbXBsZW1lbnQgYSBTdGFuZGFyZCBJbnRlcmZhY2UgZm9yIHdoaWNoIGFuCitpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbiBzb3VyY2UgY29kZSBmb3JtLiAgQQorIk1ham9yIENvbXBvbmVudCIsIGluIHRoaXMgY29udGV4dCwgbWVhbnMgYSBtYWpvciBlc3NlbnRpYWwgY29tcG9uZW50Cisoa2VybmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtCisoaWYgYW55KSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSB3b3JrIHJ1bnMsIG9yIGEgY29tcGlsZXIgdXNlZCB0bworcHJvZHVjZSB0aGUgd29yaywgb3IgYW4gb2JqZWN0IGNvZGUgaW50ZXJwcmV0ZXIgdXNlZCB0byBydW4gaXQuCisKKyAgVGhlICJDb3JyZXNwb25kaW5nIFNvdXJjZSIgZm9yIGEgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIG1lYW5zIGFsbAordGhlIHNvdXJjZSBjb2RlIG5lZWRlZCB0byBnZW5lcmF0ZSwgaW5zdGFsbCwgYW5kIChmb3IgYW4gZXhlY3V0YWJsZQord29yaykgcnVuIHRoZSBvYmplY3QgY29kZSBhbmQgdG8gbW9kaWZ5IHRoZSB3b3JrLCBpbmNsdWRpbmcgc2NyaXB0cyB0bworY29udHJvbCB0aG9zZSBhY3Rpdml0aWVzLiAgSG93ZXZlciwgaXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgd29yaydzCitTeXN0ZW0gTGlicmFyaWVzLCBvciBnZW5lcmFsLXB1cnBvc2UgdG9vbHMgb3IgZ2VuZXJhbGx5IGF2YWlsYWJsZSBmcmVlCitwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQKK3doaWNoIGFyZSBub3QgcGFydCBvZiB0aGUgd29yay4gIEZvciBleGFtcGxlLCBDb3JyZXNwb25kaW5nIFNvdXJjZQoraW5jbHVkZXMgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHNvdXJjZSBmaWxlcyBmb3IKK3RoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseQorbGlua2VkIHN1YnByb2dyYW1zIHRoYXQgdGhlIHdvcmsgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIHJlcXVpcmUsCitzdWNoIGFzIGJ5IGludGltYXRlIGRhdGEgY29tbXVuaWNhdGlvbiBvciBjb250cm9sIGZsb3cgYmV0d2VlbiB0aG9zZQorc3VicHJvZ3JhbXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JrLgorCisgIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgdXNlcnMKK2NhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZworU291cmNlLgorCisgIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdAorc2FtZSB3b3JrLgorCisgIDIuIEJhc2ljIFBlcm1pc3Npb25zLgorCisgIEFsbCByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgYXJlIGdyYW50ZWQgZm9yIHRoZSB0ZXJtIG9mCitjb3B5cmlnaHQgb24gdGhlIFByb2dyYW0sIGFuZCBhcmUgaXJyZXZvY2FibGUgcHJvdmlkZWQgdGhlIHN0YXRlZAorY29uZGl0aW9ucyBhcmUgbWV0LiAgVGhpcyBMaWNlbnNlIGV4cGxpY2l0bHkgYWZmaXJtcyB5b3VyIHVubGltaXRlZAorcGVybWlzc2lvbiB0byBydW4gdGhlIHVubW9kaWZpZWQgUHJvZ3JhbS4gIFRoZSBvdXRwdXQgZnJvbSBydW5uaW5nIGEKK2NvdmVyZWQgd29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBvbmx5IGlmIHRoZSBvdXRwdXQsIGdpdmVuIGl0cworY29udGVudCwgY29uc3RpdHV0ZXMgYSBjb3ZlcmVkIHdvcmsuICBUaGlzIExpY2Vuc2UgYWNrbm93bGVkZ2VzIHlvdXIKK3JpZ2h0cyBvZiBmYWlyIHVzZSBvciBvdGhlciBlcXVpdmFsZW50LCBhcyBwcm92aWRlZCBieSBjb3B5cmlnaHQgbGF3LgorCisgIFlvdSBtYXkgbWFrZSwgcnVuIGFuZCBwcm9wYWdhdGUgY292ZXJlZCB3b3JrcyB0aGF0IHlvdSBkbyBub3QKK2NvbnZleSwgd2l0aG91dCBjb25kaXRpb25zIHNvIGxvbmcgYXMgeW91ciBsaWNlbnNlIG90aGVyd2lzZSByZW1haW5zCitpbiBmb3JjZS4gIFlvdSBtYXkgY29udmV5IGNvdmVyZWQgd29ya3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlCitvZiBoYXZpbmcgdGhlbSBtYWtlIG1vZGlmaWNhdGlvbnMgZXhjbHVzaXZlbHkgZm9yIHlvdSwgb3IgcHJvdmlkZSB5b3UKK3dpdGggZmFjaWxpdGllcyBmb3IgcnVubmluZyB0aG9zZSB3b3JrcywgcHJvdmlkZWQgdGhhdCB5b3UgY29tcGx5IHdpdGgKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvCitub3QgY29udHJvbCBjb3B5cmlnaHQuICBUaG9zZSB0aHVzIG1ha2luZyBvciBydW5uaW5nIHRoZSBjb3ZlcmVkIHdvcmtzCitmb3IgeW91IG11c3QgZG8gc28gZXhjbHVzaXZlbHkgb24geW91ciBiZWhhbGYsIHVuZGVyIHlvdXIgZGlyZWN0aW9uCithbmQgY29udHJvbCwgb24gdGVybXMgdGhhdCBwcm9oaWJpdCB0aGVtIGZyb20gbWFraW5nIGFueSBjb3BpZXMgb2YKK3lvdXIgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgb3V0c2lkZSB0aGVpciByZWxhdGlvbnNoaXAgd2l0aCB5b3UuCisKKyAgQ29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIKK3RoZSBjb25kaXRpb25zIHN0YXRlZCBiZWxvdy4gIFN1YmxpY2Vuc2luZyBpcyBub3QgYWxsb3dlZDsgc2VjdGlvbiAxMAorbWFrZXMgaXQgdW5uZWNlc3NhcnkuCisKKyAgMy4gUHJvdGVjdGluZyBVc2VycycgTGVnYWwgUmlnaHRzIEZyb20gQW50aS1DaXJjdW12ZW50aW9uIExhdy4KKworICBObyBjb3ZlcmVkIHdvcmsgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgYW4gZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwKK21lYXN1cmUgdW5kZXIgYW55IGFwcGxpY2FibGUgbGF3IGZ1bGZpbGxpbmcgb2JsaWdhdGlvbnMgdW5kZXIgYXJ0aWNsZQorMTEgb2YgdGhlIFdJUE8gY29weXJpZ2h0IHRyZWF0eSBhZG9wdGVkIG9uIDIwIERlY2VtYmVyIDE5OTYsIG9yCitzaW1pbGFyIGxhd3MgcHJvaGliaXRpbmcgb3IgcmVzdHJpY3RpbmcgY2lyY3VtdmVudGlvbiBvZiBzdWNoCittZWFzdXJlcy4KKworICBXaGVuIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHlvdSB3YWl2ZSBhbnkgbGVnYWwgcG93ZXIgdG8gZm9yYmlkCitjaXJjdW12ZW50aW9uIG9mIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdG8gdGhlIGV4dGVudCBzdWNoIGNpcmN1bXZlbnRpb24KK2lzIGVmZmVjdGVkIGJ5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8KK3RoZSBjb3ZlcmVkIHdvcmssIGFuZCB5b3UgZGlzY2xhaW0gYW55IGludGVudGlvbiB0byBsaW1pdCBvcGVyYXRpb24gb3IKK21vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBhcyBhIG1lYW5zIG9mIGVuZm9yY2luZywgYWdhaW5zdCB0aGUgd29yaydzCit1c2VycywgeW91ciBvciB0aGlyZCBwYXJ0aWVzJyBsZWdhbCByaWdodHMgdG8gZm9yYmlkIGNpcmN1bXZlbnRpb24gb2YKK3RlY2hub2xvZ2ljYWwgbWVhc3VyZXMuCisKKyAgNC4gQ29udmV5aW5nIFZlcmJhdGltIENvcGllcy4KKworICBZb3UgbWF5IGNvbnZleSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncyBzb3VyY2UgY29kZSBhcyB5b3UKK3JlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kCithcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2U7CitrZWVwIGludGFjdCBhbGwgbm90aWNlcyBzdGF0aW5nIHRoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbnkKK25vbi1wZXJtaXNzaXZlIHRlcm1zIGFkZGVkIGluIGFjY29yZCB3aXRoIHNlY3Rpb24gNyBhcHBseSB0byB0aGUgY29kZTsKK2tlZXAgaW50YWN0IGFsbCBub3RpY2VzIG9mIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYWxsCityZWNpcGllbnRzIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworICBZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2UgZm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXksCithbmQgeW91IG1heSBvZmZlciBzdXBwb3J0IG9yIHdhcnJhbnR5IHByb3RlY3Rpb24gZm9yIGEgZmVlLgorCisgIDUuIENvbnZleWluZyBNb2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuCisKKyAgWW91IG1heSBjb252ZXkgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBvciB0aGUgbW9kaWZpY2F0aW9ucyB0bworcHJvZHVjZSBpdCBmcm9tIHRoZSBQcm9ncmFtLCBpbiB0aGUgZm9ybSBvZiBzb3VyY2UgY29kZSB1bmRlciB0aGUKK3Rlcm1zIG9mIHNlY3Rpb24gNCwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IG1vZGlmaWVkCisgICAgaXQsIGFuZCBnaXZpbmcgYSByZWxldmFudCBkYXRlLgorCisgICAgYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMKKyAgICByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBjb25kaXRpb25zIGFkZGVkIHVuZGVyIHNlY3Rpb24KKyAgICA3LiAgVGhpcyByZXF1aXJlbWVudCBtb2RpZmllcyB0aGUgcmVxdWlyZW1lbnQgaW4gc2VjdGlvbiA0IHRvCisgICAgImtlZXAgaW50YWN0IGFsbCBub3RpY2VzIi4KKworICAgIGMpIFlvdSBtdXN0IGxpY2Vuc2UgdGhlIGVudGlyZSB3b3JrLCBhcyBhIHdob2xlLCB1bmRlciB0aGlzCisgICAgTGljZW5zZSB0byBhbnlvbmUgd2hvIGNvbWVzIGludG8gcG9zc2Vzc2lvbiBvZiBhIGNvcHkuICBUaGlzCisgICAgTGljZW5zZSB3aWxsIHRoZXJlZm9yZSBhcHBseSwgYWxvbmcgd2l0aCBhbnkgYXBwbGljYWJsZSBzZWN0aW9uIDcKKyAgICBhZGRpdGlvbmFsIHRlcm1zLCB0byB0aGUgd2hvbGUgb2YgdGhlIHdvcmssIGFuZCBhbGwgaXRzIHBhcnRzLAorICAgIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIHBhY2thZ2VkLiAgVGhpcyBMaWNlbnNlIGdpdmVzIG5vCisgICAgcGVybWlzc2lvbiB0byBsaWNlbnNlIHRoZSB3b3JrIGluIGFueSBvdGhlciB3YXksIGJ1dCBpdCBkb2VzIG5vdAorICAgIGludmFsaWRhdGUgc3VjaCBwZXJtaXNzaW9uIGlmIHlvdSBoYXZlIHNlcGFyYXRlbHkgcmVjZWl2ZWQgaXQuCisKKyAgICBkKSBJZiB0aGUgd29yayBoYXMgaW50ZXJhY3RpdmUgdXNlciBpbnRlcmZhY2VzLCBlYWNoIG11c3QgZGlzcGxheQorICAgIEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXM7IGhvd2V2ZXIsIGlmIHRoZSBQcm9ncmFtIGhhcyBpbnRlcmFjdGl2ZQorICAgIGludGVyZmFjZXMgdGhhdCBkbyBub3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzLCB5b3VyCisgICAgd29yayBuZWVkIG5vdCBtYWtlIHRoZW0gZG8gc28uCisKKyAgQSBjb21waWxhdGlvbiBvZiBhIGNvdmVyZWQgd29yayB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudAord29ya3MsIHdoaWNoIGFyZSBub3QgYnkgdGhlaXIgbmF0dXJlIGV4dGVuc2lvbnMgb2YgdGhlIGNvdmVyZWQgd29yaywKK2FuZCB3aGljaCBhcmUgbm90IGNvbWJpbmVkIHdpdGggaXQgc3VjaCBhcyB0byBmb3JtIGEgbGFyZ2VyIHByb2dyYW0sCitpbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuCisiYWdncmVnYXRlIiBpZiB0aGUgY29tcGlsYXRpb24gYW5kIGl0cyByZXN1bHRpbmcgY29weXJpZ2h0IGFyZSBub3QKK3VzZWQgdG8gbGltaXQgdGhlIGFjY2VzcyBvciBsZWdhbCByaWdodHMgb2YgdGhlIGNvbXBpbGF0aW9uJ3MgdXNlcnMKK2JleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gIEluY2x1c2lvbiBvZiBhIGNvdmVyZWQgd29yaworaW4gYW4gYWdncmVnYXRlIGRvZXMgbm90IGNhdXNlIHRoaXMgTGljZW5zZSB0byBhcHBseSB0byB0aGUgb3RoZXIKK3BhcnRzIG9mIHRoZSBhZ2dyZWdhdGUuCisKKyAgNi4gQ29udmV5aW5nIE5vbi1Tb3VyY2UgRm9ybXMuCisKKyAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMKK29mIHNlY3Rpb25zIDQgYW5kIDUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gY29udmV5IHRoZQorbWFjaGluZS1yZWFkYWJsZSBDb3JyZXNwb25kaW5nIFNvdXJjZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLAoraW4gb25lIG9mIHRoZXNlIHdheXM6CisKKyAgICBhKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGluLCBvciBlbWJvZGllZCBpbiwgYSBwaHlzaWNhbCBwcm9kdWN0CisgICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmaXhlZCBvbiBhIGR1cmFibGUgcGh5c2ljYWwgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuCisKKyAgICBiKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGluLCBvciBlbWJvZGllZCBpbiwgYSBwaHlzaWNhbCBwcm9kdWN0CisgICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSBhCisgICAgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMKKyAgICBsb25nIGFzIHlvdSBvZmZlciBzcGFyZSBwYXJ0cyBvciBjdXN0b21lciBzdXBwb3J0IGZvciB0aGF0IHByb2R1Y3QKKyAgICBtb2RlbCwgdG8gZ2l2ZSBhbnlvbmUgd2hvIHBvc3Nlc3NlcyB0aGUgb2JqZWN0IGNvZGUgZWl0aGVyICgxKSBhCisgICAgY29weSBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhlCisgICAgcHJvZHVjdCB0aGF0IGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBvbiBhIGR1cmFibGUgcGh5c2ljYWwKKyAgICBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UsIGZvciBhIHByaWNlIG5vCisgICAgbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzCisgICAgY29udmV5aW5nIG9mIHNvdXJjZSwgb3IgKDIpIGFjY2VzcyB0byBjb3B5IHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZyb20gYSBuZXR3b3JrIHNlcnZlciBhdCBubyBjaGFyZ2UuCisKKyAgICBjKSBDb252ZXkgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhlIG9iamVjdCBjb2RlIHdpdGggYSBjb3B5IG9mIHRoZQorICAgIHdyaXR0ZW4gb2ZmZXIgdG8gcHJvdmlkZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBUaGlzCisgICAgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IG9jY2FzaW9uYWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQKKyAgICBvbmx5IGlmIHlvdSByZWNlaXZlZCB0aGUgb2JqZWN0IGNvZGUgd2l0aCBzdWNoIGFuIG9mZmVyLCBpbiBhY2NvcmQKKyAgICB3aXRoIHN1YnNlY3Rpb24gNmIuCisKKyAgICBkKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGJ5IG9mZmVyaW5nIGFjY2VzcyBmcm9tIGEgZGVzaWduYXRlZAorICAgIHBsYWNlIChncmF0aXMgb3IgZm9yIGEgY2hhcmdlKSwgYW5kIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vCisgICAgZnVydGhlciBjaGFyZ2UuICBZb3UgbmVlZCBub3QgcmVxdWlyZSByZWNpcGllbnRzIHRvIGNvcHkgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuICBJZiB0aGUgcGxhY2UgdG8KKyAgICBjb3B5IHRoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UKKyAgICBtYXkgYmUgb24gYSBkaWZmZXJlbnQgc2VydmVyIChvcGVyYXRlZCBieSB5b3Ugb3IgYSB0aGlyZCBwYXJ0eSkKKyAgICB0aGF0IHN1cHBvcnRzIGVxdWl2YWxlbnQgY29weWluZyBmYWNpbGl0aWVzLCBwcm92aWRlZCB5b3UgbWFpbnRhaW4KKyAgICBjbGVhciBkaXJlY3Rpb25zIG5leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlLiAgUmVnYXJkbGVzcyBvZiB3aGF0IHNlcnZlciBob3N0cyB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSwgeW91IHJlbWFpbiBvYmxpZ2F0ZWQgdG8gZW5zdXJlIHRoYXQgaXQgaXMKKyAgICBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgbmVlZGVkIHRvIHNhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLgorCisgICAgZSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uLCBwcm92aWRlZAorICAgIHlvdSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5nCisgICAgU291cmNlIG9mIHRoZSB3b3JrIGFyZSBiZWluZyBvZmZlcmVkIHRvIHRoZSBnZW5lcmFsIHB1YmxpYyBhdCBubworICAgIGNoYXJnZSB1bmRlciBzdWJzZWN0aW9uIDZkLgorCisgIEEgc2VwYXJhYmxlIHBvcnRpb24gb2YgdGhlIG9iamVjdCBjb2RlLCB3aG9zZSBzb3VyY2UgY29kZSBpcyBleGNsdWRlZAorZnJvbSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgYXMgYSBTeXN0ZW0gTGlicmFyeSwgbmVlZCBub3QgYmUKK2luY2x1ZGVkIGluIGNvbnZleWluZyB0aGUgb2JqZWN0IGNvZGUgd29yay4KKworICBBICJVc2VyIFByb2R1Y3QiIGlzIGVpdGhlciAoMSkgYSAiY29uc3VtZXIgcHJvZHVjdCIsIHdoaWNoIG1lYW5zIGFueQordGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsIGZhbWlseSwKK29yIGhvdXNlaG9sZCBwdXJwb3Nlcywgb3IgKDIpIGFueXRoaW5nIGRlc2lnbmVkIG9yIHNvbGQgZm9yIGluY29ycG9yYXRpb24KK2ludG8gYSBkd2VsbGluZy4gIEluIGRldGVybWluaW5nIHdoZXRoZXIgYSBwcm9kdWN0IGlzIGEgY29uc3VtZXIgcHJvZHVjdCwKK2RvdWJ0ZnVsIGNhc2VzIHNoYWxsIGJlIHJlc29sdmVkIGluIGZhdm9yIG9mIGNvdmVyYWdlLiAgRm9yIGEgcGFydGljdWxhcgorcHJvZHVjdCByZWNlaXZlZCBieSBhIHBhcnRpY3VsYXIgdXNlciwgIm5vcm1hbGx5IHVzZWQiIHJlZmVycyB0byBhCit0eXBpY2FsIG9yIGNvbW1vbiB1c2Ugb2YgdGhhdCBjbGFzcyBvZiBwcm9kdWN0LCByZWdhcmRsZXNzIG9mIHRoZSBzdGF0dXMKK29mIHRoZSBwYXJ0aWN1bGFyIHVzZXIgb3Igb2YgdGhlIHdheSBpbiB3aGljaCB0aGUgcGFydGljdWxhciB1c2VyCithY3R1YWxseSB1c2VzLCBvciBleHBlY3RzIG9yIGlzIGV4cGVjdGVkIHRvIHVzZSwgdGhlIHByb2R1Y3QuICBBIHByb2R1Y3QKK2lzIGEgY29uc3VtZXIgcHJvZHVjdCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHByb2R1Y3QgaGFzIHN1YnN0YW50aWFsCitjb21tZXJjaWFsLCBpbmR1c3RyaWFsIG9yIG5vbi1jb25zdW1lciB1c2VzLCB1bmxlc3Mgc3VjaCB1c2VzIHJlcHJlc2VudAordGhlIG9ubHkgc2lnbmlmaWNhbnQgbW9kZSBvZiB1c2Ugb2YgdGhlIHByb2R1Y3QuCisKKyAgIkluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiIgZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRob2RzLAorcHJvY2VkdXJlcywgYXV0aG9yaXphdGlvbiBrZXlzLCBvciBvdGhlciBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBpbnN0YWxsCithbmQgZXhlY3V0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBhIGNvdmVyZWQgd29yayBpbiB0aGF0IFVzZXIgUHJvZHVjdCBmcm9tCithIG1vZGlmaWVkIHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhlIGluZm9ybWF0aW9uIG11c3QKK3N1ZmZpY2UgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbnRpbnVlZCBmdW5jdGlvbmluZyBvZiB0aGUgbW9kaWZpZWQgb2JqZWN0Citjb2RlIGlzIGluIG5vIGNhc2UgcHJldmVudGVkIG9yIGludGVyZmVyZWQgd2l0aCBzb2xlbHkgYmVjYXVzZQorbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuCisKKyAgSWYgeW91IGNvbnZleSBhbiBvYmplY3QgY29kZSB3b3JrIHVuZGVyIHRoaXMgc2VjdGlvbiBpbiwgb3Igd2l0aCwgb3IKK3NwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzCitwYXJ0IG9mIGEgdHJhbnNhY3Rpb24gaW4gd2hpY2ggdGhlIHJpZ2h0IG9mIHBvc3Nlc3Npb24gYW5kIHVzZSBvZiB0aGUKK1VzZXIgUHJvZHVjdCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgcmVjaXBpZW50IGluIHBlcnBldHVpdHkgb3IgZm9yIGEKK2ZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlCitDb3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXllZCB1bmRlciB0aGlzIHNlY3Rpb24gbXVzdCBiZSBhY2NvbXBhbmllZAorYnkgdGhlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbi4gIEJ1dCB0aGlzIHJlcXVpcmVtZW50IGRvZXMgbm90IGFwcGx5CitpZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhlIGFiaWxpdHkgdG8gaW5zdGFsbAorbW9kaWZpZWQgb2JqZWN0IGNvZGUgb24gdGhlIFVzZXIgUHJvZHVjdCAoZm9yIGV4YW1wbGUsIHRoZSB3b3JrIGhhcworYmVlbiBpbnN0YWxsZWQgaW4gUk9NKS4KKworICBUaGUgcmVxdWlyZW1lbnQgdG8gcHJvdmlkZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gZG9lcyBub3QgaW5jbHVkZSBhCityZXF1aXJlbWVudCB0byBjb250aW51ZSB0byBwcm92aWRlIHN1cHBvcnQgc2VydmljZSwgd2FycmFudHksIG9yIHVwZGF0ZXMKK2ZvciBhIHdvcmsgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQgYnkgdGhlIHJlY2lwaWVudCwgb3IgZm9yCit0aGUgVXNlciBQcm9kdWN0IGluIHdoaWNoIGl0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZC4gIEFjY2VzcyB0byBhCituZXR3b3JrIG1heSBiZSBkZW5pZWQgd2hlbiB0aGUgbW9kaWZpY2F0aW9uIGl0c2VsZiBtYXRlcmlhbGx5IGFuZAorYWR2ZXJzZWx5IGFmZmVjdHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV0d29yayBvciB2aW9sYXRlcyB0aGUgcnVsZXMgYW5kCitwcm90b2NvbHMgZm9yIGNvbW11bmljYXRpb24gYWNyb3NzIHRoZSBuZXR3b3JrLgorCisgIENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIHByb3ZpZGVkLAoraW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uIG11c3QgYmUgaW4gYSBmb3JtYXQgdGhhdCBpcyBwdWJsaWNseQorZG9jdW1lbnRlZCAoYW5kIHdpdGggYW4gaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgaW4KK3NvdXJjZSBjb2RlIGZvcm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvcgordW5wYWNraW5nLCByZWFkaW5nIG9yIGNvcHlpbmcuCisKKyAgNy4gQWRkaXRpb25hbCBUZXJtcy4KKworICAiQWRkaXRpb25hbCBwZXJtaXNzaW9ucyIgYXJlIHRlcm1zIHRoYXQgc3VwcGxlbWVudCB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLgorQWRkaXRpb25hbCBwZXJtaXNzaW9ucyB0aGF0IGFyZSBhcHBsaWNhYmxlIHRvIHRoZSBlbnRpcmUgUHJvZ3JhbSBzaGFsbAorYmUgdHJlYXRlZCBhcyB0aG91Z2ggdGhleSB3ZXJlIGluY2x1ZGVkIGluIHRoaXMgTGljZW5zZSwgdG8gdGhlIGV4dGVudAordGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMKK2FwcGx5IG9ubHkgdG8gcGFydCBvZiB0aGUgUHJvZ3JhbSwgdGhhdCBwYXJ0IG1heSBiZSB1c2VkIHNlcGFyYXRlbHkKK3VuZGVyIHRob3NlIHBlcm1pc3Npb25zLCBidXQgdGhlIGVudGlyZSBQcm9ncmFtIHJlbWFpbnMgZ292ZXJuZWQgYnkKK3RoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KKworICBXaGVuIHlvdSBjb252ZXkgYSBjb3B5IG9mIGEgY292ZXJlZCB3b3JrLCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uCityZW1vdmUgYW55IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJvbSB0aGF0IGNvcHksIG9yIGZyb20gYW55IHBhcnQgb2YKK2l0LiAgKEFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbWF5IGJlIHdyaXR0ZW4gdG8gcmVxdWlyZSB0aGVpciBvd24KK3JlbW92YWwgaW4gY2VydGFpbiBjYXNlcyB3aGVuIHlvdSBtb2RpZnkgdGhlIHdvcmsuKSAgWW91IG1heSBwbGFjZQorYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrLAorZm9yIHdoaWNoIHlvdSBoYXZlIG9yIGNhbiBnaXZlIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBwZXJtaXNzaW9uLgorCisgIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdQorYWRkIHRvIGEgY292ZXJlZCB3b3JrLCB5b3UgbWF5IChpZiBhdXRob3JpemVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyBvZgordGhhdCBtYXRlcmlhbCkgc3VwcGxlbWVudCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggdGVybXM6CisKKyAgICBhKSBEaXNjbGFpbWluZyB3YXJyYW50eSBvciBsaW1pdGluZyBsaWFiaWxpdHkgZGlmZmVyZW50bHkgZnJvbSB0aGUKKyAgICB0ZXJtcyBvZiBzZWN0aW9ucyAxNSBhbmQgMTYgb2YgdGhpcyBMaWNlbnNlOyBvcgorCisgICAgYikgUmVxdWlyaW5nIHByZXNlcnZhdGlvbiBvZiBzcGVjaWZpZWQgcmVhc29uYWJsZSBsZWdhbCBub3RpY2VzIG9yCisgICAgYXV0aG9yIGF0dHJpYnV0aW9ucyBpbiB0aGF0IG1hdGVyaWFsIG9yIGluIHRoZSBBcHByb3ByaWF0ZSBMZWdhbAorICAgIE5vdGljZXMgZGlzcGxheWVkIGJ5IHdvcmtzIGNvbnRhaW5pbmcgaXQ7IG9yCisKKyAgICBjKSBQcm9oaWJpdGluZyBtaXNyZXByZXNlbnRhdGlvbiBvZiB0aGUgb3JpZ2luIG9mIHRoYXQgbWF0ZXJpYWwsIG9yCisgICAgcmVxdWlyaW5nIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgb2Ygc3VjaCBtYXRlcmlhbCBiZSBtYXJrZWQgaW4KKyAgICByZWFzb25hYmxlIHdheXMgYXMgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIHZlcnNpb247IG9yCisKKyAgICBkKSBMaW1pdGluZyB0aGUgdXNlIGZvciBwdWJsaWNpdHkgcHVycG9zZXMgb2YgbmFtZXMgb2YgbGljZW5zb3JzIG9yCisgICAgYXV0aG9ycyBvZiB0aGUgbWF0ZXJpYWw7IG9yCisKKyAgICBlKSBEZWNsaW5pbmcgdG8gZ3JhbnQgcmlnaHRzIHVuZGVyIHRyYWRlbWFyayBsYXcgZm9yIHVzZSBvZiBzb21lCisgICAgdHJhZGUgbmFtZXMsIHRyYWRlbWFya3MsIG9yIHNlcnZpY2UgbWFya3M7IG9yCisKKyAgICBmKSBSZXF1aXJpbmcgaW5kZW1uaWZpY2F0aW9uIG9mIGxpY2Vuc29ycyBhbmQgYXV0aG9ycyBvZiB0aGF0CisgICAgbWF0ZXJpYWwgYnkgYW55b25lIHdobyBjb252ZXlzIHRoZSBtYXRlcmlhbCAob3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YKKyAgICBpdCkgd2l0aCBjb250cmFjdHVhbCBhc3N1bXB0aW9ucyBvZiBsaWFiaWxpdHkgdG8gdGhlIHJlY2lwaWVudCwgZm9yCisgICAgYW55IGxpYWJpbGl0eSB0aGF0IHRoZXNlIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIGRpcmVjdGx5IGltcG9zZSBvbgorICAgIHRob3NlIGxpY2Vuc29ycyBhbmQgYXV0aG9ycy4KKworICBBbGwgb3RoZXIgbm9uLXBlcm1pc3NpdmUgYWRkaXRpb25hbCB0ZXJtcyBhcmUgY29uc2lkZXJlZCAiZnVydGhlcgorcmVzdHJpY3Rpb25zIiB3aXRoaW4gdGhlIG1lYW5pbmcgb2Ygc2VjdGlvbiAxMC4gIElmIHRoZSBQcm9ncmFtIGFzIHlvdQorcmVjZWl2ZWQgaXQsIG9yIGFueSBwYXJ0IG9mIGl0LCBjb250YWlucyBhIG5vdGljZSBzdGF0aW5nIHRoYXQgaXQgaXMKK2dvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhlcgorcmVzdHJpY3Rpb24sIHlvdSBtYXkgcmVtb3ZlIHRoYXQgdGVybS4gIElmIGEgbGljZW5zZSBkb2N1bWVudCBjb250YWlucworYSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGJ1dCBwZXJtaXRzIHJlbGljZW5zaW5nIG9yIGNvbnZleWluZyB1bmRlciB0aGlzCitMaWNlbnNlLCB5b3UgbWF5IGFkZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMKK29mIHRoYXQgbGljZW5zZSBkb2N1bWVudCwgcHJvdmlkZWQgdGhhdCB0aGUgZnVydGhlciByZXN0cmljdGlvbiBkb2VzCitub3Qgc3Vydml2ZSBzdWNoIHJlbGljZW5zaW5nIG9yIGNvbnZleWluZy4KKworICBJZiB5b3UgYWRkIHRlcm1zIHRvIGEgY292ZXJlZCB3b3JrIGluIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlvbiwgeW91CittdXN0IHBsYWNlLCBpbiB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzLCBhIHN0YXRlbWVudCBvZiB0aGUKK2FkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZword2hlcmUgdG8gZmluZCB0aGUgYXBwbGljYWJsZSB0ZXJtcy4KKworICBBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZQorZm9ybSBvZiBhIHNlcGFyYXRlbHkgd3JpdHRlbiBsaWNlbnNlLCBvciBzdGF0ZWQgYXMgZXhjZXB0aW9uczsKK3RoZSBhYm92ZSByZXF1aXJlbWVudHMgYXBwbHkgZWl0aGVyIHdheS4KKworICA4LiBUZXJtaW5hdGlvbi4KKworICBZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkKK3Byb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0IG90aGVyd2lzZSB0byBwcm9wYWdhdGUgb3IKK21vZGlmeSBpdCBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlcgordGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZAorcGFyYWdyYXBoIG9mIHNlY3Rpb24gMTEpLgorCisgIEhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyCitsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMgcmVpbnN0YXRlZCAoYSkKK3Byb3Zpc2lvbmFsbHksIHVubGVzcyBhbmQgdW50aWwgdGhlIGNvcHlyaWdodCBob2xkZXIgZXhwbGljaXRseSBhbmQKK2ZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQKK2hvbGRlciBmYWlscyB0byBub3RpZnkgeW91IG9mIHRoZSB2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zCitwcmlvciB0byA2MCBkYXlzIGFmdGVyIHRoZSBjZXNzYXRpb24uCisKKyAgTW9yZW92ZXIsIHlvdXIgbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzCityZWluc3RhdGVkIHBlcm1hbmVudGx5IGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vdGlmaWVzIHlvdSBvZiB0aGUKK3Zpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKK3JlY2VpdmVkIG5vdGljZSBvZiB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlIChmb3IgYW55IHdvcmspIGZyb20gdGhhdAorY29weXJpZ2h0IGhvbGRlciwgYW5kIHlvdSBjdXJlIHRoZSB2aW9sYXRpb24gcHJpb3IgdG8gMzAgZGF5cyBhZnRlcgoreW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCisKKyAgVGVybWluYXRpb24gb2YgeW91ciByaWdodHMgdW5kZXIgdGhpcyBzZWN0aW9uIGRvZXMgbm90IHRlcm1pbmF0ZSB0aGUKK2xpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlLiAgSWYgeW91ciByaWdodHMgaGF2ZSBiZWVuIHRlcm1pbmF0ZWQgYW5kIG5vdCBwZXJtYW5lbnRseQorcmVpbnN0YXRlZCwgeW91IGRvIG5vdCBxdWFsaWZ5IHRvIHJlY2VpdmUgbmV3IGxpY2Vuc2VzIGZvciB0aGUgc2FtZQorbWF0ZXJpYWwgdW5kZXIgc2VjdGlvbiAxMC4KKworICA5LiBBY2NlcHRhbmNlIE5vdCBSZXF1aXJlZCBmb3IgSGF2aW5nIENvcGllcy4KKworICBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIHJlY2VpdmUgb3IKK3J1biBhIGNvcHkgb2YgdGhlIFByb2dyYW0uICBBbmNpbGxhcnkgcHJvcGFnYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsKK29jY3VycmluZyBzb2xlbHkgYXMgYSBjb25zZXF1ZW5jZSBvZiB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uCit0byByZWNlaXZlIGEgY29weSBsaWtld2lzZSBkb2VzIG5vdCByZXF1aXJlIGFjY2VwdGFuY2UuICBIb3dldmVyLAorbm90aGluZyBvdGhlciB0aGFuIHRoaXMgTGljZW5zZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gcHJvcGFnYXRlIG9yCittb2RpZnkgYW55IGNvdmVyZWQgd29yay4gIFRoZXNlIGFjdGlvbnMgaW5mcmluZ2UgY29weXJpZ2h0IGlmIHlvdSBkbworbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5IG1vZGlmeWluZyBvciBwcm9wYWdhdGluZyBhCitjb3ZlcmVkIHdvcmssIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLgorCisgIDEwLiBBdXRvbWF0aWMgTGljZW5zaW5nIG9mIERvd25zdHJlYW0gUmVjaXBpZW50cy4KKworICBFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5CityZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3JzLCB0byBydW4sIG1vZGlmeSBhbmQKK3Byb3BhZ2F0ZSB0aGF0IHdvcmssIHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiAgWW91IGFyZSBub3QgcmVzcG9uc2libGUKK2ZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgorCisgIEFuICJlbnRpdHkgdHJhbnNhY3Rpb24iIGlzIGEgdHJhbnNhY3Rpb24gdHJhbnNmZXJyaW5nIGNvbnRyb2wgb2YgYW4KK29yZ2FuaXphdGlvbiwgb3Igc3Vic3RhbnRpYWxseSBhbGwgYXNzZXRzIG9mIG9uZSwgb3Igc3ViZGl2aWRpbmcgYW4KK29yZ2FuaXphdGlvbiwgb3IgbWVyZ2luZyBvcmdhbml6YXRpb25zLiAgSWYgcHJvcGFnYXRpb24gb2YgYSBjb3ZlcmVkCit3b3JrIHJlc3VsdHMgZnJvbSBhbiBlbnRpdHkgdHJhbnNhY3Rpb24sIGVhY2ggcGFydHkgdG8gdGhhdAordHJhbnNhY3Rpb24gd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgd29yayBhbHNvIHJlY2VpdmVzIHdoYXRldmVyCitsaWNlbnNlcyB0byB0aGUgd29yayB0aGUgcGFydHkncyBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCBoYWQgb3IgY291bGQKK2dpdmUgdW5kZXIgdGhlIHByZXZpb3VzIHBhcmFncmFwaCwgcGx1cyBhIHJpZ2h0IHRvIHBvc3Nlc3Npb24gb2YgdGhlCitDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCwgaWYKK3RoZSBwcmVkZWNlc3NvciBoYXMgaXQgb3IgY2FuIGdldCBpdCB3aXRoIHJlYXNvbmFibGUgZWZmb3J0cy4KKworICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUKK3JpZ2h0cyBncmFudGVkIG9yIGFmZmlybWVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEZvciBleGFtcGxlLCB5b3UgbWF5Citub3QgaW1wb3NlIGEgbGljZW5zZSBmZWUsIHJveWFsdHksIG9yIG90aGVyIGNoYXJnZSBmb3IgZXhlcmNpc2Ugb2YKK3JpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlIGxpdGlnYXRpb24KKyhpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0CithbnkgcGF0ZW50IGNsYWltIGlzIGluZnJpbmdlZCBieSBtYWtpbmcsIHVzaW5nLCBzZWxsaW5nLCBvZmZlcmluZyBmb3IKK3NhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC4KKworICAxMS4gUGF0ZW50cy4KKworICBBICJjb250cmlidXRvciIgaXMgYSBjb3B5cmlnaHQgaG9sZGVyIHdobyBhdXRob3JpemVzIHVzZSB1bmRlciB0aGlzCitMaWNlbnNlIG9mIHRoZSBQcm9ncmFtIG9yIGEgd29yayBvbiB3aGljaCB0aGUgUHJvZ3JhbSBpcyBiYXNlZC4gIFRoZQord29yayB0aHVzIGxpY2Vuc2VkIGlzIGNhbGxlZCB0aGUgY29udHJpYnV0b3IncyAiY29udHJpYnV0b3IgdmVyc2lvbiIuCisKKyAgQSBjb250cmlidXRvcidzICJlc3NlbnRpYWwgcGF0ZW50IGNsYWltcyIgYXJlIGFsbCBwYXRlbnQgY2xhaW1zCitvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBjb250cmlidXRvciwgd2hldGhlciBhbHJlYWR5IGFjcXVpcmVkIG9yCitoZXJlYWZ0ZXIgYWNxdWlyZWQsIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIGJ5IHNvbWUgbWFubmVyLCBwZXJtaXR0ZWQKK2J5IHRoaXMgTGljZW5zZSwgb2YgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBpdHMgY29udHJpYnV0b3IgdmVyc2lvbiwKK2J1dCBkbyBub3QgaW5jbHVkZSBjbGFpbXMgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgb25seSBhcyBhCitjb25zZXF1ZW5jZSBvZiBmdXJ0aGVyIG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udHJpYnV0b3IgdmVyc2lvbi4gIEZvcgorcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgaW5jbHVkZXMgdGhlIHJpZ2h0IHRvIGdyYW50CitwYXRlbnQgc3VibGljZW5zZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YKK3RoaXMgTGljZW5zZS4KKworICBFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZQorcGF0ZW50IGxpY2Vuc2UgdW5kZXIgdGhlIGNvbnRyaWJ1dG9yJ3MgZXNzZW50aWFsIHBhdGVudCBjbGFpbXMsIHRvCittYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQgYW5kIG90aGVyd2lzZSBydW4sIG1vZGlmeSBhbmQKK3Byb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24uCisKKyAgSW4gdGhlIGZvbGxvd2luZyB0aHJlZSBwYXJhZ3JhcGhzLCBhICJwYXRlbnQgbGljZW5zZSIgaXMgYW55IGV4cHJlc3MKK2FncmVlbWVudCBvciBjb21taXRtZW50LCBob3dldmVyIGRlbm9taW5hdGVkLCBub3QgdG8gZW5mb3JjZSBhIHBhdGVudAorKHN1Y2ggYXMgYW4gZXhwcmVzcyBwZXJtaXNzaW9uIHRvIHByYWN0aWNlIGEgcGF0ZW50IG9yIGNvdmVuYW50IG5vdCB0bworc3VlIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50KS4gIFRvICJncmFudCIgc3VjaCBhIHBhdGVudCBsaWNlbnNlIHRvIGEKK3BhcnR5IG1lYW5zIHRvIG1ha2Ugc3VjaCBhbiBhZ3JlZW1lbnQgb3IgY29tbWl0bWVudCBub3QgdG8gZW5mb3JjZSBhCitwYXRlbnQgYWdhaW5zdCB0aGUgcGFydHkuCisKKyAgSWYgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywga25vd2luZ2x5IHJlbHlpbmcgb24gYSBwYXRlbnQgbGljZW5zZSwKK2FuZCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgaXMgbm90IGF2YWlsYWJsZSBmb3IgYW55b25lCit0byBjb3B5LCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgdGhyb3VnaCBhCitwdWJsaWNseSBhdmFpbGFibGUgbmV0d29yayBzZXJ2ZXIgb3Igb3RoZXIgcmVhZGlseSBhY2Nlc3NpYmxlIG1lYW5zLAordGhlbiB5b3UgbXVzdCBlaXRoZXIgKDEpIGNhdXNlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSB0byBiZSBzbworYXZhaWxhYmxlLCBvciAoMikgYXJyYW5nZSB0byBkZXByaXZlIHlvdXJzZWxmIG9mIHRoZSBiZW5lZml0IG9mIHRoZQorcGF0ZW50IGxpY2Vuc2UgZm9yIHRoaXMgcGFydGljdWxhciB3b3JrLCBvciAoMykgYXJyYW5nZSwgaW4gYSBtYW5uZXIKK2NvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSwgdG8gZXh0ZW5kIHRoZSBwYXRlbnQKK2xpY2Vuc2UgdG8gZG93bnN0cmVhbSByZWNpcGllbnRzLiAgIktub3dpbmdseSByZWx5aW5nIiBtZWFucyB5b3UgaGF2ZQorYWN0dWFsIGtub3dsZWRnZSB0aGF0LCBidXQgZm9yIHRoZSBwYXRlbnQgbGljZW5zZSwgeW91ciBjb252ZXlpbmcgdGhlCitjb3ZlcmVkIHdvcmsgaW4gYSBjb3VudHJ5LCBvciB5b3VyIHJlY2lwaWVudCdzIHVzZSBvZiB0aGUgY292ZXJlZCB3b3JrCitpbiBhIGNvdW50cnksIHdvdWxkIGluZnJpbmdlIG9uZSBvciBtb3JlIGlkZW50aWZpYWJsZSBwYXRlbnRzIGluIHRoYXQKK2NvdW50cnkgdGhhdCB5b3UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZSBhcmUgdmFsaWQuCisKKyAgSWYsIHB1cnN1YW50IHRvIG9yIGluIGNvbm5lY3Rpb24gd2l0aCBhIHNpbmdsZSB0cmFuc2FjdGlvbiBvcgorYXJyYW5nZW1lbnQsIHlvdSBjb252ZXksIG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYQorY292ZXJlZCB3b3JrLCBhbmQgZ3JhbnQgYSBwYXRlbnQgbGljZW5zZSB0byBzb21lIG9mIHRoZSBwYXJ0aWVzCityZWNlaXZpbmcgdGhlIGNvdmVyZWQgd29yayBhdXRob3JpemluZyB0aGVtIHRvIHVzZSwgcHJvcGFnYXRlLCBtb2RpZnkKK29yIGNvbnZleSBhIHNwZWNpZmljIGNvcHkgb2YgdGhlIGNvdmVyZWQgd29yaywgdGhlbiB0aGUgcGF0ZW50IGxpY2Vuc2UKK3lvdSBncmFudCBpcyBhdXRvbWF0aWNhbGx5IGV4dGVuZGVkIHRvIGFsbCByZWNpcGllbnRzIG9mIHRoZSBjb3ZlcmVkCit3b3JrIGFuZCB3b3JrcyBiYXNlZCBvbiBpdC4KKworICBBIHBhdGVudCBsaWNlbnNlIGlzICJkaXNjcmltaW5hdG9yeSIgaWYgaXQgZG9lcyBub3QgaW5jbHVkZSB3aXRoaW4KK3RoZSBzY29wZSBvZiBpdHMgY292ZXJhZ2UsIHByb2hpYml0cyB0aGUgZXhlcmNpc2Ugb2YsIG9yIGlzCitjb25kaXRpb25lZCBvbiB0aGUgbm9uLWV4ZXJjaXNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSByaWdodHMgdGhhdCBhcmUKK3NwZWNpZmljYWxseSBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIFlvdSBtYXkgbm90IGNvbnZleSBhIGNvdmVyZWQKK3dvcmsgaWYgeW91IGFyZSBhIHBhcnR5IHRvIGFuIGFycmFuZ2VtZW50IHdpdGggYSB0aGlyZCBwYXJ0eSB0aGF0IGlzCitpbiB0aGUgYnVzaW5lc3Mgb2YgZGlzdHJpYnV0aW5nIHNvZnR3YXJlLCB1bmRlciB3aGljaCB5b3UgbWFrZSBwYXltZW50Cit0byB0aGUgdGhpcmQgcGFydHkgYmFzZWQgb24gdGhlIGV4dGVudCBvZiB5b3VyIGFjdGl2aXR5IG9mIGNvbnZleWluZwordGhlIHdvcmssIGFuZCB1bmRlciB3aGljaCB0aGUgdGhpcmQgcGFydHkgZ3JhbnRzLCB0byBhbnkgb2YgdGhlCitwYXJ0aWVzIHdobyB3b3VsZCByZWNlaXZlIHRoZSBjb3ZlcmVkIHdvcmsgZnJvbSB5b3UsIGEgZGlzY3JpbWluYXRvcnkKK3BhdGVudCBsaWNlbnNlIChhKSBpbiBjb25uZWN0aW9uIHdpdGggY29waWVzIG9mIHRoZSBjb3ZlcmVkIHdvcmsKK2NvbnZleWVkIGJ5IHlvdSAob3IgY29waWVzIG1hZGUgZnJvbSB0aG9zZSBjb3BpZXMpLCBvciAoYikgcHJpbWFyaWx5Citmb3IgYW5kIGluIGNvbm5lY3Rpb24gd2l0aCBzcGVjaWZpYyBwcm9kdWN0cyBvciBjb21waWxhdGlvbnMgdGhhdAorY29udGFpbiB0aGUgY292ZXJlZCB3b3JrLCB1bmxlc3MgeW91IGVudGVyZWQgaW50byB0aGF0IGFycmFuZ2VtZW50LAorb3IgdGhhdCBwYXRlbnQgbGljZW5zZSB3YXMgZ3JhbnRlZCwgcHJpb3IgdG8gMjggTWFyY2ggMjAwNy4KKworICBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBjb25zdHJ1ZWQgYXMgZXhjbHVkaW5nIG9yIGxpbWl0aW5nCithbnkgaW1wbGllZCBsaWNlbnNlIG9yIG90aGVyIGRlZmVuc2VzIHRvIGluZnJpbmdlbWVudCB0aGF0IG1heQorb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYXBwbGljYWJsZSBwYXRlbnQgbGF3LgorCisgIDEyLiBObyBTdXJyZW5kZXIgb2YgT3RoZXJzJyBGcmVlZG9tLgorCisgIElmIGNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90IGNvbnZleSBhCitjb3ZlcmVkIHdvcmsgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5Citub3QgY29udmV5IGl0IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiB5b3UgYWdyZWUgdG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UKK3RvIGNvbGxlY3QgYSByb3lhbHR5IGZvciBmdXJ0aGVyIGNvbnZleWluZyBmcm9tIHRob3NlIHRvIHdob20geW91IGNvbnZleQordGhlIFByb2dyYW0sIHRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIHRob3NlIHRlcm1zIGFuZCB0aGlzCitMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uCisKKyAgMTMuIFJlbW90ZSBOZXR3b3JrIEludGVyYWN0aW9uOyBVc2Ugd2l0aCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKKyAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBpZiB5b3UgbW9kaWZ5IHRoZQorUHJvZ3JhbSwgeW91ciBtb2RpZmllZCB2ZXJzaW9uIG11c3QgcHJvbWluZW50bHkgb2ZmZXIgYWxsIHVzZXJzCitpbnRlcmFjdGluZyB3aXRoIGl0IHJlbW90ZWx5IHRocm91Z2ggYSBjb21wdXRlciBuZXR3b3JrIChpZiB5b3VyIHZlcnNpb24KK3N1cHBvcnRzIHN1Y2ggaW50ZXJhY3Rpb24pIGFuIG9wcG9ydHVuaXR5IHRvIHJlY2VpdmUgdGhlIENvcnJlc3BvbmRpbmcKK1NvdXJjZSBvZiB5b3VyIHZlcnNpb24gYnkgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UKK2Zyb20gYSBuZXR3b3JrIHNlcnZlciBhdCBubyBjaGFyZ2UsIHRocm91Z2ggc29tZSBzdGFuZGFyZCBvciBjdXN0b21hcnkKK21lYW5zIG9mIGZhY2lsaXRhdGluZyBjb3B5aW5nIG9mIHNvZnR3YXJlLiAgVGhpcyBDb3JyZXNwb25kaW5nIFNvdXJjZQorc2hhbGwgaW5jbHVkZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFueSB3b3JrIGNvdmVyZWQgYnkgdmVyc2lvbiAzCitvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhhdCBpcyBpbmNvcnBvcmF0ZWQgcHVyc3VhbnQgdG8gdGhlCitmb2xsb3dpbmcgcGFyYWdyYXBoLgorCisgIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgeW91IGhhdmUKK3Blcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKK3VuZGVyIHZlcnNpb24gMyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQorY29tYmluZWQgd29yaywgYW5kIHRvIGNvbnZleSB0aGUgcmVzdWx0aW5nIHdvcmsuICBUaGUgdGVybXMgb2YgdGhpcworTGljZW5zZSB3aWxsIGNvbnRpbnVlIHRvIGFwcGx5IHRvIHRoZSBwYXJ0IHdoaWNoIGlzIHRoZSBjb3ZlcmVkIHdvcmssCitidXQgdGhlIHdvcmsgd2l0aCB3aGljaCBpdCBpcyBjb21iaW5lZCB3aWxsIHJlbWFpbiBnb3Zlcm5lZCBieSB2ZXJzaW9uCiszIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICAxNC4gUmV2aXNlZCBWZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YKK3RoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucword2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCisgIEVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlCitQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgY2VydGFpbiBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlICJvciBhbnkgbGF0ZXIgdmVyc2lvbiIgYXBwbGllcyB0byBpdCwgeW91IGhhdmUgdGhlCitvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCBudW1iZXJlZAordmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YgdGhlCitHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCitieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKK3ZlcnNpb25zIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgY2FuIGJlIHVzZWQsIHRoYXQgcHJveHkncworcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdQordG8gY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlIFByb2dyYW0uCisKKyAgTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQKK3Blcm1pc3Npb25zLiAgSG93ZXZlciwgbm8gYWRkaXRpb25hbCBvYmxpZ2F0aW9ucyBhcmUgaW1wb3NlZCBvbiBhbnkKK2F1dGhvciBvciBjb3B5cmlnaHQgaG9sZGVyIGFzIGEgcmVzdWx0IG9mIHlvdXIgY2hvb3NpbmcgdG8gZm9sbG93IGEKK2xhdGVyIHZlcnNpb24uCisKKyAgMTUuIERpc2NsYWltZXIgb2YgV2FycmFudHkuCisKKyAgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWQorQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVAorSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWQorT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQorSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GCitBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTYuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LgorCisgIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNT0RJRklFUyBBTkQvT1IgQ09OVkVZUworVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZCitHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUKK1VTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YKK0RBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJECitQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwKK0VWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFUy4KKworICAxNy4gSW50ZXJwcmV0YXRpb24gb2YgU2VjdGlvbnMgMTUgYW5kIDE2LgorCisgIElmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZAorYWJvdmUgY2Fubm90IGJlIGdpdmVuIGxvY2FsIGxlZ2FsIGVmZmVjdCBhY2NvcmRpbmcgdG8gdGhlaXIgdGVybXMsCityZXZpZXdpbmcgY291cnRzIHNoYWxsIGFwcGx5IGxvY2FsIGxhdyB0aGF0IG1vc3QgY2xvc2VseSBhcHByb3hpbWF0ZXMKK2FuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUKK1Byb2dyYW0sIHVubGVzcyBhIHdhcnJhbnR5IG9yIGFzc3VtcHRpb24gb2YgbGlhYmlsaXR5IGFjY29tcGFuaWVzIGEKK2NvcHkgb2YgdGhlIFByb2dyYW0gaW4gcmV0dXJuIGZvciBhIGZlZS4KKworICAgICAgICAgICAgICAgICAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5CitzdGF0ZSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKKyAgSWYgeW91ciBzb2Z0d2FyZSBjYW4gaW50ZXJhY3Qgd2l0aCB1c2VycyByZW1vdGVseSB0aHJvdWdoIGEgY29tcHV0ZXIKK25ldHdvcmssIHlvdSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgdGhhdCBpdCBwcm92aWRlcyBhIHdheSBmb3IgdXNlcnMgdG8KK2dldCBpdHMgc291cmNlLiAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgcHJvZ3JhbSBpcyBhIHdlYiBhcHBsaWNhdGlvbiwgaXRzCitpbnRlcmZhY2UgY291bGQgZGlzcGxheSBhICJTb3VyY2UiIGxpbmsgdGhhdCBsZWFkcyB1c2VycyB0byBhbiBhcmNoaXZlCitvZiB0aGUgY29kZS4gIFRoZXJlIGFyZSBtYW55IHdheXMgeW91IGNvdWxkIG9mZmVyIHNvdXJjZSwgYW5kIGRpZmZlcmVudAorc29sdXRpb25zIHdpbGwgYmUgYmV0dGVyIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXM7IHNlZSBzZWN0aW9uIDEzIGZvciB0aGUKK3NwZWNpZmljIHJlcXVpcmVtZW50cy4KKworICBZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3Igc2Nob29sLAoraWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4KK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMsIGFuZCBob3cgdG8gYXBwbHkgYW5kIGZvbGxvdyB0aGUgR05VIEFHUEwsIHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BTlRMUi1QRCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQU5UTFItUEQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIwMmE4YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQU5UTFItUEQKQEAgLTAsMCArMSwzMiBAQAorCitBTlRMUiBTT0ZUV0FSRSBSSUdIVFMKKworQU5UTFIgMTk4OS0yMDA2IERldmVsb3BlZCBieSBUZXJlbmNlIFBhcnIKK1BhcnRpYWxseSBzdXBwb3J0ZWQgYnkgVW5pdmVyc2l0eSBvZiBTYW4gRnJhbmNpc2NvICZhbXA7IGpHdXJ1LmNvbQorCitXZSByZXNlcnZlIG5vIGxlZ2FsIHJpZ2h0cyB0byB0aGUgQU5UTFItLWl0IGlzIGZ1bGx5IGluIHRoZQorcHVibGljIGRvbWFpbi4gQW4gaW5kaXZpZHVhbCBvciBjb21wYW55IG1heSBkbyB3aGF0ZXZlcgordGhleSB3aXNoIHdpdGggc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgd2l0aCBBTlRMUiBvciB0aGUKK2NvZGUgZ2VuZXJhdGVkIGJ5IEFOVExSLCBpbmNsdWRpbmcgdGhlIGluY29ycG9yYXRpb24gb2YKK0FOVExSLCBvciBpdHMgb3V0cHV0LCBpbnRvIGNvbW1lcmljYWwgc29mdHdhcmUuCisKK1dlIGVuY291cmFnZSB1c2VycyB0byBkZXZlbG9wIHNvZnR3YXJlIHdpdGggQU5UTFIuIEhvd2V2ZXIsCit3ZSBkbyBhc2sgdGhhdCBjcmVkaXQgaXMgZ2l2ZW4gdG8gdXMgZm9yIGRldmVsb3BpbmcKK0FOVExSLiBCeSAiY3JlZGl0Iiwgd2UgbWVhbiB0aGF0IGlmIHlvdSB1c2UgQU5UTFIgb3IKK2luY29ycG9yYXRlIGFueSBzb3VyY2UgY29kZSBpbnRvIG9uZSBvZiB5b3VyIHByb2dyYW1zCisoY29tbWVyY2lhbCBwcm9kdWN0LCByZXNlYXJjaCBwcm9qZWN0LCBvciBvdGhlcndpc2UpIHRoYXQKK3lvdSBhY2tub3dsZWRnZSB0aGlzIGZhY3Qgc29tZXdoZXJlIGluIHRoZSBkb2N1bWVudGF0aW9uLAorcmVzZWFyY2ggcmVwb3J0LCBldGMuLi4gSWYgeW91IGxpa2UgQU5UTFIgYW5kIGhhdmUKK2RldmVsb3BlZCBhIG5pY2UgdG9vbCB3aXRoIHRoZSBvdXRwdXQsIHBsZWFzZSBtZW50aW9uIHRoYXQKK3lvdSBkZXZlbG9wZWQgaXQgdXNpbmcgQU5UTFIuIEluIGFkZGl0aW9uLCB3ZSBhc2sgdGhhdCB0aGUKK2hlYWRlcnMgcmVtYWluIGludGFjdCBpbiBvdXIgc291cmNlIGNvZGUuIEFzIGxvbmcgYXMgdGhlc2UKK2d1aWRlbGluZXMgYXJlIGtlcHQsIHdlIGV4cGVjdCB0byBjb250aW51ZSBlbmhhbmNpbmcgdGhpcworc3lzdGVtIGFuZCBleHBlY3QgdG8gbWFrZSBvdGhlciB0b29scyBhdmFpbGFibGUgYXMgdGhleSBhcmUKK2NvbXBsZXRlZC4KKworVGhlIHByaW1hcnkgQU5UTFIgZ3V5OgorCitUZXJlbmNlIFBhcnIKK3BhcnJ0QGNzLnVzZmNhLmVkdQorcGFycnRAYW50bHIub3JnCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBMLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODA1YjFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUEwtMS4wCkBAIC0wLDAgKzEsMjE4IEBACisKK0FEQVBUSVZFIFBVQkxJQyBMSUNFTlNFCitWZXJzaW9uIDEuMAorVEhFIExJQ0VOU0VEIFdPUksgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQURBUFRJVkUgUFVCTElDIExJQ0VOU0UgKCJMSUNFTlNFIikuIEFOWSBVU0UsIFJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIExJQ0VOU0VEIFdPUksgQ09OU1RJVFVURVMgUkVDSVBJRU5UYFMgQUNDRVBUQU5DRSBPRiBUSElTIExJQ0VOU0UgQU5EIElUUyBURVJNUywgV0hFVEhFUiBPUiBOT1QgU1VDSCBSRUNJUElFTlQgUkVBRFMgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gIkxJQ0VOU0VEIFdPUksiIEFORCAiUkVDSVBJRU5UIiBBUkUgREVGSU5FRCBCRUxPVy4KKworSU1QT1JUQU5UIE5PVEU6IFRoaXMgTGljZW5zZSBpcyAiYWRhcHRpdmUiLCBhbmQgdGhlIGdlbmVyaWMgdmVyc2lvbiBvciBhbm90aGVyIHZlcnNpb24gb2YgYW4gQWRhcHRpdmUgUHVibGljIExpY2Vuc2Ugc2hvdWxkIG5vdCBiZSByZWxpZWQgdXBvbiB0byBkZXRlcm1pbmUgeW91ciByaWdodHMgYW5kIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZS4gWW91IG11c3QgcmVhZCB0aGUgc3BlY2lmaWMgQWRhcHRpdmUgUHVibGljIExpY2Vuc2UgdGhhdCB5b3UgcmVjZWl2ZSB3aXRoIHRoZSBMaWNlbnNlZCBXb3JrLCBhcyBjZXJ0YWluIHRlcm1zIGFyZSBkZWZpbmVkIGF0IHRoZSBvdXRzZXQgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IuCisKK1NlZSBTZWN0aW9uIDIuMiBiZWxvdywgRXhoaWJpdCBBIGF0dGFjaGVkLCBhbmQgYW55IFN1cHBmaWxlLnR4dCBhY2NvbXBhbnlpbmcgdGhpcyBMaWNlbnNlIHRvIGRldGVybWluZSB0aGUgc3BlY2lmaWMgYWRhcHRpdmUgZmVhdHVyZXMgYXBwbGljYWJsZSB0byB0aGlzIExpY2Vuc2UuIEZvciBleGFtcGxlLCB3aXRob3V0IGxpbWl0aW5nIHRoZSBmb3JlZ29pbmcsIChhKSBmb3Igc2VsZWN0ZWQgY2hvaWNlIG9mIGxhdyBhbmQganVyaXNkaWN0aW9uIHNlZSBQYXJ0IDMgb2YgRXhoaWJpdCBBOyAoYikgZm9yIHRoZSBzZWxlY3RlZCBkZWZpbml0aW9uIG9mIFRoaXJkIFBhcnR5IHNlZSBQYXJ0IDQgb2YgRXhoaWJpdCBBOyBhbmQgKGMpIGZvciBzZWxlY3RlZCBwYXRlbnQgbGljZW5zaW5nIHRlcm1zIChpZiBhbnkpIHNlZSBTZWN0aW9uIDIuMiBiZWxvdyBhbmQgUGFydCA2IG9mIEV4aGliaXQgQS4KKworMS4gREVGSU5JVElPTlMuCisKKzEuMS4gIkNPTlRSSUJVVElPTiIgbWVhbnM6CisKKyhhKSBJbiB0aGUgY2FzZSBvZiB0aGUgSW5pdGlhbCBDb250cmlidXRvciwgdGhlIEluaXRpYWwgV29yayBkaXN0cmlidXRlZCB1bmRlciB0aGlzIExpY2Vuc2UgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3I7IGFuZAorCisoYikgSW4gdGhlIGNhc2Ugb2YgZWFjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCB0aGUgU3Vic2VxdWVudCBXb3JrIG9yaWdpbmF0aW5nIGZyb20gYW5kIGRpc3RyaWJ1dGVkIGJ5IHN1Y2ggU3Vic2VxdWVudCBDb250cmlidXRvci4KKworMS4yLiAiREVTSUdOQVRFRCBXRUIgU0lURSIgbWVhbnMgdGhlIHdlYiBzaXRlIGhhdmluZyB0aGUgVVJMIGlkZW50aWZpZWQgaW4gUGFydCAxIG9mIEV4aGliaXQgQSwgd2hpY2ggVVJMIG1heSBiZSBjaGFuZ2VkIGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIGJ5IHBvc3Rpbmcgb24gdGhlIGN1cnJlbnQgRGVzaWduYXRlZCBXZWIgU2l0ZSB0aGUgbmV3IFVSTCBmb3IgYXQgbGVhc3Qgc2l4dHkgKDYwKSBkYXlzLgorCisxLjMuICJESVNUUklCVVRPUiIgbWVhbnMgYW55IFBlcnNvbiB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBMaWNlbnNlZCBXb3JrIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YgdG8gYXQgbGVhc3Qgb25lIFRoaXJkIFBhcnR5LgorCisxLjQuICJFTEVDVFJPTklDIERJU1RSSUJVVElPTiBNRUNIQU5JU00iIG1lYW5zIGFueSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuCisKKzEuNS4gIkVYRUNVVEFCTEUiIG1lYW5zIHRoZSBMaWNlbnNlZCBXb3JrIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuCisKKzEuNi4gIkdPVkVSTklORyBKVVJJU0RJQ1RJT04iIG1lYW5zIHRoZSBzdGF0ZSwgcHJvdmluY2Ugb3Igb3RoZXIgbGVnYWwganVyaXNkaWN0aW9uIGlkZW50aWZpZWQgaW4gUGFydCAzIG9mIEV4aGliaXQgQS4KKworMS43LiAiSU5ERVBFTkRFTlQgTU9EVUxFIiBtZWFucyBhIHNlcGFyYXRlIG1vZHVsZSBvZiBzb2Z0d2FyZSBhbmQvb3IgZGF0YSB0aGF0IGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiBvciBjb3BpZWQgZnJvbSB0aGUgTGljZW5zZWQgV29yayBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLiBJbiBhZGRpdGlvbiwgYSBtb2R1bGUgZG9lcyBub3QgcXVhbGlmeSBhcyBhbiBJbmRlcGVuZGVudCBNb2R1bGUgYnV0IGluc3RlYWQgZm9ybXMgcGFydCBvZiB0aGUgTGljZW5zZWQgV29yayBpZiB0aGUgbW9kdWxlOiAoYSkgaXMgZW1iZWRkZWQgaW4gdGhlIExpY2Vuc2VkIFdvcms7IChiKSBpcyBpbmNsdWRlZCBieSByZWZlcmVuY2UgaW4gdGhlIExpY2Vuc2VkIFdvcmsgb3RoZXIgdGhhbiBieSBhIGZ1bmN0aW9uIGNhbGwgb3IgYSBjbGFzcyByZWZlcmVuY2U7IG9yIChjKSBtdXN0IGJlIGluY2x1ZGVkIG9yIGNvbnRhaW5lZCwgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2l0aGluIGEgZmlsZSBkaXJlY3Rvcnkgb3Igc3ViZGlyZWN0b3J5IGFjdHVhbGx5IGNvbnRhaW5pbmcgZmlsZXMgbWFraW5nIHVwIHRoZSBMaWNlbnNlZCBXb3JrLgorCisxLjguICJJTklUSUFMIENPTlRSSUJVVE9SIiBtZWFucyB0aGUgUGVyc29uIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgcmVxdWlyZWQgYnkgUGFydCAxIG9mIEV4aGliaXQgQS4KKworMS45LiAiSU5JVElBTCBXT1JLIiBtZWFucyB0aGUgaW5pdGlhbCBTb3VyY2UgQ29kZSwgb2JqZWN0IGNvZGUgKGlmIGFueSkgYW5kIGRvY3VtZW50YXRpb24gZm9yIHRoZSBjb21wdXRlciBwcm9ncmFtIGlkZW50aWZpZWQgaW4gUGFydCAyIG9mIEV4aGliaXQgQSwgYXMgc3VjaCBTb3VyY2UgQ29kZSwgb2JqZWN0IGNvZGUgYW5kIGRvY3VtZW50YXRpb24gaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yLgorCisxLjEwLiAiTEFSR0VSIFdPUksiIG1lYW5zIGEgd29yayB0aGF0IGNvbWJpbmVzIHRoZSBMaWNlbnNlZCBXb3JrIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuCisKKzEuMTEuICJMSUNFTlNFRCBXT1JLIiBtZWFucyB0aGUgSW5pdGlhbCBXb3JrIGFuZC9vciBhbnkgU3Vic2VxdWVudCBXb3JrLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuMTIuICJMSUNFTlNFIE5PVElDRSIgaGFzIHRoZSBtZWFuaW5nIGFzc2lnbmVkIGluIFBhcnQgNSBvZiBFeGhpYml0IEEuCisKKzEuMTMuICJNT0RJRklDQVRJT04iIG9yICJNT0RJRklDQVRJT05TIiBtZWFucyBhbnkgY2hhbmdlIHRvIGFuZC9vciBhZGRpdGlvbiB0byB0aGUgTGljZW5zZWQgV29yay4KKworMS4xNC4gIlBFUlNPTiIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBvdGhlciBsZWdhbCBlbnRpdHksIGluY2x1ZGluZyBhIGNvcnBvcmF0aW9uLCBwYXJ0bmVyc2hpcCBvciBvdGhlciBib2R5LgorCisxLjE1LiAiUkVDSVBJRU5UIiBtZWFucyBhbnkgUGVyc29uIHdobyByZWNlaXZlcyBvciBvYnRhaW5zIHRoZSBMaWNlbnNlZCBXb3JrIHVuZGVyIHRoaXMgTGljZW5zZSAoYnkgd2F5IG9mIGV4YW1wbGUsIHdpdGhvdXQgbGltaXRpbmcgdGhlIGZvcmVnb2luZywgYW55IFN1YnNlcXVlbnQgQ29udHJpYnV0b3Igb3IgRGlzdHJpYnV0b3IpLgorCisxLjE2LiAiU09VUkNFIENPREUiIG1lYW5zIHRoZSBzb3VyY2UgY29kZSBmb3IgYSBjb21wdXRlciBwcm9ncmFtLCBpbmNsdWRpbmcgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBhbmQgY29tcG9uZW50cyBvZiB0aGUgY29tcHV0ZXIgcHJvZ3JhbSwgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgYW5kIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gZXhlY3V0YWJsZS4KKworMS4xNy4gIlNVQlNFUVVFTlQgQ09OVFJJQlVUT1IiIG1lYW5zIGFueSBQZXJzb24gdGhhdCBtYWtlcyBvciBjb250cmlidXRlcyB0byB0aGUgbWFraW5nIG9mIGFueSBTdWJzZXF1ZW50IFdvcmsgYW5kIHRoYXQgZGlzdHJpYnV0ZXMgdGhhdCBTdWJzZXF1ZW50IFdvcmsgdG8gYXQgbGVhc3Qgb25lIFRoaXJkIFBhcnR5LgorCisxLjE4LiAiU1VCU0VRVUVOVCBXT1JLIiBtZWFucyBhIHdvcmsgdGhhdCBoYXMgcmVzdWx0ZWQgb3IgYXJpc2VzIGZyb20gY2hhbmdlcyB0byBhbmQvb3IgYWRkaXRpb25zIHRvOgorCisoYSkgdGhlIEluaXRpYWwgV29yazsKKworKGIpIGFueSBvdGhlciBTdWJzZXF1ZW50IFdvcms7IG9yCisKKyhjKSB0byBhbnkgY29tYmluYXRpb24gb2YgdGhlIEluaXRpYWwgV29yayBhbmQgYW55IHN1Y2ggb3RoZXIgU3Vic2VxdWVudCBXb3JrOworCit3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyBvcmlnaW5hdGUgZnJvbSBhIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IuIEEgU3Vic2VxdWVudCBXb3JrIHdpbGwgIm9yaWdpbmF0ZSIgZnJvbSBhIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgaWYgdGhlIFN1YnNlcXVlbnQgV29yayB3YXMgYSByZXN1bHQgb2YgZWZmb3J0cyBieSBzdWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgKG9yIGFueW9uZSBhY3Rpbmcgb24gc3VjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yYHMgYmVoYWxmLCBzdWNoIGFzLCBhIGNvbnRyYWN0b3Igb3Igb3RoZXIgZW50aXR5IHRoYXQgaXMgZW5nYWdlZCBieSBvciB1bmRlciB0aGUgZGlyZWN0aW9uIG9mIHRoZSBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yKS4gRm9yIGdyZWF0ZXIgY2VydGFpbnR5LCBhIFN1YnNlcXVlbnQgV29yayBleHByZXNzbHkgZXhjbHVkZXMgYW5kIHNoYWxsIG5vdCBjYXB0dXJlIHdpdGhpbiBpdHMgbWVhbmluZyBhbnkgSW5kZXBlbmRlbnQgTW9kdWxlLgorCisxLjE5LiAiU1VQUExFTUVOVCBGSUxFIiBtZWFucyBhIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTGljZW5zZWQgV29yayBoYXZpbmcgYSBmaWxlIG5hbWUgInN1cHBmaWxlLnR4dCIuCisKKzEuMjAuICJUSElSRCBQQVJUWSIgaGFzIHRoZSBtZWFuaW5nIGFzc2lnbmVkIGluIFBhcnQgNCBvZiBFeGhpYml0IEEuCisKKzIuIExJQ0VOU0UuCisKKzIuMS4gQ09QWVJJR0hUIExJQ0VOU0UgRlJPTSBJTklUSUFMIEFORCBTVUJTRVFVRU5UIENPTlRSSUJVVE9SUy4KKworKGEpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBlYWNoIFJlY2lwaWVudCBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBjb3B5cmlnaHQgbGljZW5zZSB0bzoKKworKGkpIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBJbml0aWFsIFdvcms7IGFuZAorCisoaWkpIHJlcHJvZHVjZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSwgYW5kIHN1YmxpY2Vuc2UgYW55IGRlcml2YXRpdmUgd29ya3MgKGlmIGFueSkgcHJlcGFyZWQgYnkgUmVjaXBpZW50OworCitpbiBTb3VyY2UgQ29kZSBhbmQgRXhlY3V0YWJsZSBmb3JtLCBlaXRoZXIgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcmsuCisKKyhiKSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGVhY2ggU3Vic2VxdWVudCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIGVhY2ggUmVjaXBpZW50IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGNvcHlyaWdodCBsaWNlbnNlIHRvOgorCisoaSkgcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIFN1YnNlcXVlbnQgV29yayBvZiBzdWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3I7IGFuZAorCisoaWkpIHJlcHJvZHVjZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSwgYW5kIHN1YmxpY2Vuc2UgYW55IGRlcml2YXRpdmUgd29ya3MgKGlmIGFueSkgcHJlcGFyZWQgYnkgUmVjaXBpZW50OworCitpbiBTb3VyY2UgQ29kZSBhbmQgRXhlY3V0YWJsZSBmb3JtLCBlaXRoZXIgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcmsuCisyLjIuIFBBVEVOVCBMSUNFTlNFIEZST00gSU5JVElBTCBBTkQgU1VCU0VRVUVOVCBDT05UUklCVVRPUlMuCisKKyhhKSBUaGlzIExpY2Vuc2UgZG9lcyBub3QgaW5jbHVkZSBvciBncmFudCBhbnkgcGF0ZW50IGxpY2Vuc2Ugd2hhdHNvZXZlciBmcm9tIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yLCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCBvciBhbnkgRGlzdHJpYnV0b3IgdW5sZXNzLCBhdCB0aGUgdGltZSB0aGUgSW5pdGlhbCBXb3JrIGlzIGZpcnN0IGRpc3RyaWJ1dGVkIG9yIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5zZSAoYXMgdGhlIGNhc2UgbWF5IGJlKSwgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgaGFzIHNlbGVjdGVkIHB1cnN1YW50IHRvIFBhcnQgNiBvZiBFeGhpYml0IEEgdGhlIHBhdGVudCB0ZXJtcyBpbiBwYXJhZ3JhcGhzIEEsIEIsIEMsIEQgYW5kIEUgZnJvbSBQYXJ0IDYgb2YgRXhoaWJpdCBBLiBJZiB0aGlzIGlzIG5vdCBkb25lIHRoZW4gdGhlIEluaXRpYWwgV29yayBhbmQgYW55IG90aGVyIFN1YnNlcXVlbnQgV29yayBpcyBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSB3aXRob3V0IGFueSBwYXRlbnQgbGljZW5zZSAodGhlICJQQVRFTlRTLUVYQ0xVREVEIExJQ0VOU0UiKS4KKworKGIpIEhvd2V2ZXIsIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIG1heSBzdWJzZXF1ZW50bHkgZGlzdHJpYnV0ZSBvciBtYWtlIGF2YWlsYWJsZSAoYXMgdGhlIGNhc2UgbWF5IGJlKSBmdXR1cmUgY29waWVzIG9mOiAoMSkgdGhlIEluaXRpYWwgV29yazsgb3IgKDIpIGFueSBMaWNlbnNlZCBXb3JrIGRpc3RyaWJ1dGVkIGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIHdoaWNoIGluY2x1ZGVzIHRoZSBJbml0aWFsIFdvcmsgKG9yIGFueSBwb3J0aW9uIHRoZXJlb2YpIGFuZC9vciBhbnkgTW9kaWZpY2F0aW9uIG1hZGUgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3I7IGF2YWlsYWJsZSB1bmRlciBhIExpY2Vuc2Ugd2hpY2ggaW5jbHVkZXMgYSBwYXRlbnQgbGljZW5zZSAodGhlICJQQVRFTlRTLUlOQ0xVREVEIExJQ0VOU0UiKSBieSBzZWxlY3RpbmcgcHVyc3VhbnQgdG8gUGFydCA2IG9mIEV4aGliaXQgQSB0aGUgcGF0ZW50IHRlcm1zIGluIHBhcmFncmFwaHMgQSwgQiwgQywgRCBhbmQgRSBmcm9tIFBhcnQgNiBvZiBFeGhpYml0IEEsIHdoZW4gdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgZGlzdHJpYnV0ZXMgb3IgbWFrZXMgYXZhaWxhYmxlIChhcyB0aGUgY2FzZSBtYXkgYmUpIHN1Y2ggZnV0dXJlIGNvcGllcyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyhjKSBJZiBhbnkgUmVjaXBpZW50IHJlY2VpdmVzIG9yIG9idGFpbnMgb25lIG9yIG1vcmUgY29waWVzIG9mIHRoZSBJbml0aWFsIFdvcmsgb3IgYW55IG90aGVyIHBvcnRpb24gb2YgdGhlIExpY2Vuc2VkIFdvcmsgdW5kZXIgdGhlIFBhdGVudHMtSW5jbHVkZWQgTGljZW5zZSwgdGhlbiBhbGwgbGljZW5zaW5nIG9mIHN1Y2ggY29waWVzIHVuZGVyIHRoaXMgTGljZW5zZSBzaGFsbCBpbmNsdWRlIHRoZSB0ZXJtcyBpbiBwYXJhZ3JhcGhzIEEsIEIsIEMsIEQgYW5kIEUgZnJvbSBQYXJ0IDYgb2YgRXhoaWJpdCBBIGFuZCB0aGF0IFJlY2lwaWVudCBzaGFsbCBub3QgYmUgYWJsZSB0byByZWx5IHVwb24gdGhlIFBhdGVudHMtRXhjbHVkZWQgTGljZW5zZSBmb3IgYW55IHN1Y2ggY29waWVzLiBIb3dldmVyLCBhbGwgUmVjaXBpZW50cyB0aGF0IHJlY2VpdmUgb25lIG9yIG1vcmUgY29waWVzIG9mIHRoZSBJbml0aWFsIFdvcmsgb3IgYW55IG90aGVyIHBvcnRpb24gb2YgdGhlIExpY2Vuc2VkIFdvcmsgdW5kZXIgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIHdoaWNoIGluY2x1ZGVzIHRoZSBQYXRlbnRzLUV4Y2x1ZGVkIExpY2Vuc2Ugc2hhbGwgaGF2ZSBubyBwYXRlbnQgbGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc3VjaCBjb3BpZXMgcmVjZWl2ZWQgdW5kZXIgdGhlIFBhdGVudHMtRXhjbHVkZWQgTGljZW5zZSBhbmQgYXZhaWxhYmlsaXR5IGFuZCBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3BpZXMsIGluY2x1ZGluZyBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBSZWNpcGllbnQgdG8gc3VjaCBjb3BpZXMsIHNoYWxsIGJlIHVuZGVyIGEgY29weSBvZiB0aGUgTGljZW5zZSB3aXRob3V0IGFueSBwYXRlbnQgbGljZW5zZS4KKworKGQpIFdoZXJlIGEgUmVjaXBpZW50IHVzZXMgaW4gY29tYmluYXRpb24gb3IgY29tYmluZXMgYW55IGNvcHkgb2YgdGhlIExpY2Vuc2VkIFdvcmsgKG9yIHBvcnRpb24gdGhlcmVvZikgbGljZW5zZWQgdW5kZXIgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGhhdmluZyBhIFBhdGVudHMtRXhjbHVkZWQgTGljZW5zZSB3aXRoIGFueSBjb3B5IG9mIHRoZSBMaWNlbnNlZCBXb3JrIChvciBwb3J0aW9uIHRoZXJlb2YpIGxpY2Vuc2VkIHVuZGVyIGEgY29weSBvZiB0aGUgTGljZW5zZSBoYXZpbmcgYSBQYXRlbnRzLUluY2x1ZGVkIExpY2Vuc2UsIHRoZSBjb21iaW5hdGlvbiAoYW5kIGFueSBwb3J0aW9uIHRoZXJlb2YpIHNoYWxsLCBmcm9tIHRoZSBmaXJzdCB0aW1lIHN1Y2ggUmVjaXBpZW50IHVzZXMsIG1ha2VzIGF2YWlsYWJsZSBvciBkaXN0cmlidXRlcyB0aGUgY29tYmluYXRpb24gKGFzIHRoZSBjYXNlIG1heSBiZSksIGJlIHN1YmplY3QgdG8gb25seSB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UgaGF2aW5nIHRoZSBQYXRlbnRzLUluY2x1ZGVkIExpY2Vuc2Ugd2hpY2ggc2hhbGwgaW5jbHVkZSB0aGUgdGVybXMgaW4gcGFyYWdyYXBocyBBLCBCLCBDLCBEIGFuZCBFIGZyb20gUGFydCA2IG9mIEV4aGliaXQgQS4KKworMi4zLiBBQ0tOT1dMRURHRU1FTlQgQU5EIERJU0NMQUlNRVIuCisKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyBhbmQgYWdyZWVzIHRoYXQgYWx0aG91Z2ggSW5pdGlhbCBDb250cmlidXRvciBhbmQgZWFjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gcmVwcmVzZW50YXRpb24sIHdhcnJhbnR5LCBndWFyYW50ZWUgb3IgYXNzdXJhbmNlIGlzIHByb3ZpZGVkIGJ5IGFueSBJbml0aWFsIENvbnRyaWJ1dG9yLCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCBvciBEaXN0cmlidXRvciB0aGF0IHRoZSBMaWNlbnNlZCBXb3JrIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBJbml0aWFsIENvbnRyaWJ1dG9yLCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCBhbmQgZWFjaCBEaXN0cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLCBpbiByZWxhdGlvbiB0byB0aGUgTGljZW5zZWQgV29ya3MuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwgd2l0aG91dCBsaW1pdGluZyB0aGUgZm9yZWdvaW5nIGRpc2NsYWltZXJzLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlIHRoZSBMaWNlbnNlZCBXb3JrLCBpdCBpcyBSZWNpcGllbnRgcyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBMaWNlbnNlZCBXb3JrLgorCisyLjQuIFJFU0VSVkFUSU9OLgorCitOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgSW5pdGlhbCBDb250cmlidXRvciwgU3Vic2VxdWVudCBDb250cmlidXRvciwgb3IgRGlzdHJpYnV0b3IgZXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLgorCiszLiBESVNUUklCVVRJT04gT0JMSUdBVElPTlMuCisKKzMuMS4gRElTVFJJQlVUSU9OIEdFTkVSQUxMWS4KKworKGEpIEEgU3Vic2VxdWVudCBDb250cmlidXRvciBzaGFsbCBtYWtlIHRoYXQgU3Vic2VxdWVudCBDb250cmlidXRvcmBzIFN1YnNlcXVlbnQgV29yayhzKSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyB2aWEgYW4gRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGZvciBhIHBlcmlvZCBvZiBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMuIFRoZSBhZm9yZXNhaWQgdHdlbHZlICgxMikgbW9udGggcGVyaW9kIHNoYWxsIGJlZ2luIHdpdGhpbiBhIHJlYXNvbmFibGUgdGltZSBhZnRlciB0aGUgY3JlYXRpb24gb2YgdGhlIFN1YnNlcXVlbnQgV29yayBhbmQgbm8gbGF0ZXIgdGhhbiBzaXh0eSAoNjApIGRheXMgYWZ0ZXIgZmlyc3QgZGlzdHJpYnV0aW9uIG9mIHRoYXQgU3Vic2VxdWVudCBDb250cmlidXRvcmBzIFN1YnNlcXVlbnQgV29yay4KKworKGIpIEFsbCBEaXN0cmlidXRvcnMgbXVzdCBkaXN0cmlidXRlIHRoZSBMaWNlbnNlZCBXb3JrIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UsIGFuZCBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSAoaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBFeGhpYml0IEEgYW5kIHRoZSBhY2NvbXBhbnlpbmcgU3VwcGxlbWVudCBGaWxlKSB3aXRoIGVhY2ggY29weSBvZiB0aGUgTGljZW5zZWQgV29yayBkaXN0cmlidXRlZC4gSW4gcGFydGljdWxhciwgdGhpcyBMaWNlbnNlIG11c3QgYmUgcHJvbWluZW50bHkgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTGljZW5zZWQgV29yayBpbiBhIGZpbGUgY2FsbGVkICJsaWNlbnNlLnR4dC4iIEluIGFkZGl0aW9uLCB0aGUgTGljZW5zZSBOb3RpY2UgaW4gUGFydCA1IG9mIEV4aGliaXQgQSBtdXN0IGJlIGluY2x1ZGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYWxsIFNvdXJjZSBDb2RlIGZpbGVzLCBhbmQgdmlld2FibGUgdG8gYSB1c2VyIGluIGFueSBleGVjdXRhYmxlIHN1Y2ggdGhhdCB0aGUgTGljZW5zZSBOb3RpY2UgaXMgcmVhc29uYWJseSBicm91Z2h0IHRvIHRoZSBhdHRlbnRpb24gb2YgYW55IHBhcnR5IHVzaW5nIHRoZSBMaWNlbnNlZCBXb3JrLgorCiszLjIuIEVYRUNVVEFCTEUgRElTVFJJQlVUSU9OUyBPRiBUSEUgTElDRU5TRUQgV09SSy4KKworQSBEaXN0cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlIExpY2Vuc2VkIFdvcmssIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YsIGluIEV4ZWN1dGFibGUgZm9ybSAoYW4gIkVYRUNVVEFCTEUgRElTVFJJQlVUSU9OIikgdG8gYW55IHRoaXJkIHBhcnR5LCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAyIG9mIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhlIEV4ZWN1dGFibGUgRGlzdHJpYnV0aW9uIGlzIG1hZGUgYXZhaWxhYmxlIHVuZGVyIGFuZCBhY2NvbXBhbmllZCBieSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLCBBTkQgcHJvdmlkZWQgYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyBmdWxmaWxsZWQ6CisKKyhhKSBUaGUgRXhlY3V0YWJsZSBEaXN0cmlidXRpb24gbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgU291cmNlIENvZGUgZm9yIHRoZSBMaWNlbnNlZCBXb3JrIG1ha2luZyB1cCB0aGUgRXhlY3V0YWJsZSBEaXN0cmlidXRpb24sIGFuZCB0aGUgU291cmNlIENvZGUgbXVzdCBiZSBkaXN0cmlidXRlZCBvbiB0aGUgc2FtZSBtZWRpYSBhcyB0aGUgRXhlY3V0YWJsZSBEaXN0cmlidXRpb24gb3IgdXNpbmcgYW4gRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtOyBvcgorCisoYikgVGhlIEV4ZWN1dGFibGUgRGlzdHJpYnV0aW9uIG11c3QgYmUgYWNjb21wYW5pZWQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aGlydHkgc2l4ICgzNikgbW9udGhzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHRoZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgZm9yIHRoZSBMaWNlbnNlZCBXb3JrIG1ha2luZyB1cCB0aGUgRXhlY3V0YWJsZSBEaXN0cmlidXRpb24sIHRvIGJlIGF2YWlsYWJsZSBhbmQgZGlzdHJpYnV0ZWQgdXNpbmcgYW4gRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBhbmQgc3VjaCBFeGVjdXRhYmxlIERpc3RyaWJ1dGlvbiBtdXN0IHJlbWFpbiBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB0byBhbnkgdGhpcmQgcGFydHkgdmlhIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gKG9yIGFueSByZXBsYWNlbWVudCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdGhlIHBhcnRpY3VsYXIgRGlzdHJpYnV0b3IgbWF5IHJlYXNvbmFibHkgbmVlZCB0byB0dXJuIHRvIGFzIGEgc3Vic3RpdHV0ZSkgZm9yIHNhaWQgYXQgbGVhc3QgdGhpcnR5IHNpeCAoMzYpIG1vbnRocy4KKworRm9yIGdyZWF0ZXIgY2VydGFpbnR5LCB0aGUgYWJvdmUtbm90ZWQgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIGFueSBMaWNlbnNlZCBXb3JrIG9yIHBvcnRpb24gdGhlcmVvZiBkaXN0cmlidXRlZCB0byBhbnkgdGhpcmQgcGFydHkgaW4gRXhlY3V0YWJsZSBmb3JtLCB3aGV0aGVyIHN1Y2ggZGlzdHJpYnV0aW9uIGlzIG1hZGUgYWxvbmUsIGluIGNvbWJpbmF0aW9uIHdpdGggYSBMYXJnZXIgV29yayBvciBJbmRlcGVuZGVudCBNb2R1bGVzLCBvciBpbiBzb21lIG90aGVyIGNvbWJpbmF0aW9uLgorCiszLjMuIFNPVVJDRSBDT0RFIERJU1RSSUJVVElPTlMuCisKK1doZW4gYSBEaXN0cmlidXRvciBtYWtlcyB0aGUgTGljZW5zZWQgV29yaywgb3IgYW55IHBvcnRpb24gdGhlcmVvZiwgYXZhaWxhYmxlIHRvIGFueSBQZXJzb24gaW4gU291cmNlIENvZGUgZm9ybSwgaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgU291cmNlIENvZGUsIHNpdHVhdGVkIHNvIHRoYXQgdGhlIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgY29uc3BpY3VvdXNseSBicm91Z2h0IHRvIHRoZSBhdHRlbnRpb24gb2YgdGhhdCBQZXJzb24uIEZvciBncmVhdGVyIGNsYXJpZmljYXRpb24sIHRoaXMgU2VjdGlvbiAzLjMgYXBwbGllcyB0byBhbGwgZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWNlbnNlZCBXb3JrIGluIGFueSBTb3VyY2UgQ29kZSBmb3JtLiBBIERpc3RyaWJ1dG9yIG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgd2hpY2ggY2hhcmdlIHNoYWxsIGJlIG5vIG1vcmUgdGhhbiB0aGUgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbi4KKworMy40LiBSRVFVSVJFRCBOT1RJQ0VTIElOIFNPVVJDRSBDT0RFLgorCitFYWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgbXVzdCBlbnN1cmUgdGhhdCB0aGUgbm90aWNlIHNldCBvdXQgaW4gUGFydCA1IG9mIEV4aGliaXQgQSBpcyBpbmNsdWRlZCBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIGZvciBlYWNoIFN1YnNlcXVlbnQgV29yayBvcmlnaW5hdGluZyBmcm9tIHRoYXQgcGFydGljdWxhciBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCBpZiBzdWNoIG5vdGljZSBpcyBub3QgYWxyZWFkeSBpbmNsdWRlZCBpbiBlYWNoIHN1Y2ggZmlsZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiB0aGUgU3Vic2VxdWVudCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgZmlsZSBpcyBzdG9yZWQpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4KKworMy41LiBOTyBESVNUUklCVVRJT04gUkVRVUlSRU1FTlRTIEZPUiBJTlRFUk5BTExZIFVTRUQgTU9ESUZJQ0FUSU9OUy4KKworTm90d2l0aHN0YW5kaW5nIFNlY3Rpb25zIDMuMiwgMy4zIGFuZCAzLjQsIFJlY2lwaWVudCBtYXksIGludGVybmFsbHkgd2l0aGluIGl0cyBvd24gY29ycG9yYXRpb24gb3Igb3JnYW5pemF0aW9uIHVzZSB0aGUgTGljZW5zZWQgV29yaywgaW5jbHVkaW5nIHRoZSBJbml0aWFsIFdvcmsgYW5kIFN1YnNlcXVlbnQgV29ya3MsIGFuZCBtYWtlIE1vZGlmaWNhdGlvbnMgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gUmVjaXBpZW50YHMgb3duIGNvcnBvcmF0aW9uIG9yIG9yZ2FuaXphdGlvbiAoY29sbGVjdGl2ZWx5LCAiSU5URVJOQUwgVVNFIE1PRElGSUNBVElPTlMiKS4gVGhlIFJlY2lwaWVudCBzaGFsbCBoYXZlIG5vIG9ibGlnYXRpb24gdG8gZGlzdHJpYnV0ZSwgaW4gZWl0aGVyIFNvdXJjZSBDb2RlIG9yIEV4ZWN1dGFibGUgZm9ybSwgYW55IHN1Y2ggSW50ZXJuYWwgVXNlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBSZWNpcGllbnQgaW4gdGhlIGNvdXJzZSBvZiBzdWNoIGludGVybmFsIHVzZSwgZXhjZXB0IHdoZXJlIHJlcXVpcmVkIGJlbG93IGluIHRoaXMgU2VjdGlvbiAzLjUuIEFsbCBJbnRlcm5hbCBVc2UgTW9kaWZpY2F0aW9ucyBkaXN0cmlidXRlZCB0byBhbnkgUGVyc29uLCB3aGV0aGVyIG9yIG5vdCBhIFRoaXJkIFBhcnR5LCBzaGFsbCBiZSBkaXN0cmlidXRlZCBwdXJzdWFudCB0byBhbmQgYmUgYWNjb21wYW5pZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgdGhlIFJlY2lwaWVudCBjaG9vc2VzIHRvIGRpc3RyaWJ1dGUgYW55IHN1Y2ggSW50ZXJuYWwgVXNlIE1vZGlmaWNhdGlvbnMgdG8gYW55IFRoaXJkIFBhcnR5LCB0aGVuIHRoZSBSZWNpcGllbnQgc2hhbGwgYmUgZGVlbWVkIGEgU3Vic2VxdWVudCBDb250cmlidXRvciwgYW5kIGFueSBzdWNoIEludGVybmFsIFVzZSBNb2RpZmljYXRpb25zIGRpc3RyaWJ1dGVkIHRvIGFueSBUaGlyZCBQYXJ0eSBzaGFsbCBiZSBkZWVtZWQgYSBTdWJzZXF1ZW50IFdvcmsgb3JpZ2luYXRpbmcgZnJvbSB0aGF0IFN1YnNlcXVlbnQgQ29udHJpYnV0b3IsIGFuZCBzaGFsbCBmcm9tIHRoZSBmaXJzdCBzdWNoIGluc3RhbmNlIGJlY29tZSBwYXJ0IG9mIHRoZSBMaWNlbnNlZCBXb3JrIHRoYXQgbXVzdCB0aGVyZWFmdGVyIGJlIGRpc3RyaWJ1dGVkIGFuZCBtYWRlIGF2YWlsYWJsZSB0byB0aGlyZCBwYXJ0aWVzIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMy4xIHRvIDMuNCBpbmNsdXNpdmUuCisKKzMuNi4gSU5ERVBFTkRFTlQgTU9EVUxFUy4KKworVGhpcyBMaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0byBJbmRlcGVuZGVudCBNb2R1bGVzIG9mIGFueSBJbml0aWFsIENvbnRyaWJ1dG9yLCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCBEaXN0cmlidXRvciBvciBhbnkgUmVjaXBpZW50LCBhbmQgc3VjaCBJbmRlcGVuZGVudCBNb2R1bGVzIG1heSBiZSBsaWNlbnNlZCBvciBtYWRlIGF2YWlsYWJsZSB1bmRlciBvbmUgb3IgbW9yZSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudHMuCisKKzMuNy4gTEFSR0VSIFdPUktTLgorCitBbnkgRGlzdHJpYnV0b3Igb3IgUmVjaXBpZW50IG1heSBjcmVhdGUgb3IgY29udHJpYnV0ZSB0byBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBhbnkgb2YgdGhlIExpY2Vuc2VkIFdvcmsgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgbWF5IGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIG9uZSBvciBtb3JlIHByb2R1Y3RzLiBIb3dldmVyLCBpbiBhbnkgc3VjaCBjYXNlLCBEaXN0cmlidXRvciBvciBSZWNpcGllbnQgKGFzIHRoZSBjYXNlIG1heSBiZSkgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgTGljZW5zZWQgV29yayBwb3J0aW9uIG9mIHRoZSBMYXJnZXIgV29yay4KKworMy44LiBERVNDUklQVElPTiBPRiBESVNUUklCVVRFRCBNT0RJRklDQVRJT05TLgorCisoYSkgRWFjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIChpbmNsdWRpbmcgdGhlIEluaXRpYWwgQ29udHJpYnV0b3Igd2hlcmUgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgYWxzbyBxdWFsaWZpZXMgYXMgYSBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yKSBtdXN0IGNhdXNlIGVhY2ggU3Vic2VxdWVudCBXb3JrIGNyZWF0ZWQgb3IgY29udHJpYnV0ZWQgdG8gYnkgdGhhdCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzLCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiBQYXJ0IDEgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSwgdGhhdCBzdWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgbWFkZSBpbiB0aGUgY3JlYXRpb24gb3IgY29udHJpYnV0aW9uIHRvIHRoYXQgU3Vic2VxdWVudCBXb3JrLiBJZiBubyBTdXBwbGVtZW50IEZpbGUgZXhpc3RzIG9yIG5vIHJlcXVpcmVtZW50cyBhcmUgc2V0IG91dCBpbiBQYXJ0IDEgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSwgdGhlbiB0aGVyZSBhcmUgbm8gcmVxdWlyZW1lbnRzIGZvciBTdWJzZXF1ZW50IENvbnRyaWJ1dG9ycyB0byBkb2N1bWVudCBjaGFuZ2VzIHRoYXQgdGhleSBtYWtlIHJlc3VsdGluZyBpbiBTdWJzZXF1ZW50IFdvcmtzLgorCisoYikgVGhlIEluaXRpYWwgQ29udHJpYnV0b3IgbWF5IGF0IGFueSB0aW1lIGludHJvZHVjZSByZXF1aXJlbWVudHMgb3IgYWRkIHRvIG9yIGNoYW5nZSBlYXJsaWVyIHJlcXVpcmVtZW50cyAoaW4gZWFjaCBjYXNlLCB0aGUgIkVBUkxJRVIgREVTQ1JJUFRJT04gUkVRVUlSRU1FTlRTIikgZm9yIGRvY3VtZW50aW5nIGNoYW5nZXMgcmVzdWx0aW5nIGluIFN1YnNlcXVlbnQgV29ya3MgYnkgcmV2aXNpbmcgUGFydCAxIG9mIGVhY2ggY29weSBvZiB0aGUgU3VwcGxlbWVudCBGaWxlIGRpc3RyaWJ1dGVkIGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIHdpdGggZnV0dXJlIGNvcGllcyBvZiB0aGUgTGljZW5zZWQgV29yayBzbyB0aGF0IFBhcnQgMSB0aGVuIGNvbnRhaW5zIG5ldyByZXF1aXJlbWVudHMgKHRoZSAiTkVXIERFU0NSSVBUSU9OIFJFUVVJUkVNRU5UUyIpIGZvciBkb2N1bWVudGluZyBzdWNoIGNoYW5nZXMuCisKKyhjKSBBbnkgUmVjaXBpZW50IHJlY2VpdmluZyBhdCBhbnkgdGltZSBhbnkgY29weSBvZiBhbiBJbml0aWFsIFdvcmsgb3IgYW55IFN1YnNlcXVlbnQgV29yayB1bmRlciBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIChpbiBlYWNoIGNhc2UsIGFuICJFYXJsaWVyIExJQ0VOU0VEIENPUFkiKSBoYXZpbmcgdGhlIEVhcmxpZXIgRGVzY3JpcHRpb24gUmVxdWlyZW1lbnRzIG1heSBjaG9vc2UsIHdpdGggcmVzcGVjdCB0byBlYWNoIHN1Y2ggRWFybGllciBMaWNlbnNlZCBDb3B5LCB0byBjb21wbHkgd2l0aCB0aGUgRWFybGllciBEZXNjcmlwdGlvbiBSZXF1aXJlbWVudHMgb3IgdGhlIE5ldyBEZXNjcmlwdGlvbiBSZXF1aXJlbWVudHMuIFdoZXJlIGEgUmVjaXBpZW50IGNob29zZXMgdG8gY29tcGx5IHdpdGggdGhlIE5ldyBEZXNjcmlwdGlvbiBSZXF1aXJlbWVudHMsIHRoYXQgUmVjaXBpZW50IHdpbGwsIHdoZW4gdGhlcmVhZnRlciBkaXN0cmlidXRpbmcgYW55IGNvcGllcyBvZiBhbnkgc3VjaCBFYXJsaWVyIExpY2Vuc2VkIENvcHksIGluY2x1ZGUgYSBTdXBwbGVtZW50IEZpbGUgaGF2aW5nIGEgc2VjdGlvbiBlbnRpdGxlZCBQYXJ0IDEgdGhhdCBjb250YWlucyBhIGNvcHkgb2YgdGhlIE5ldyBEZXNjcmlwdGlvbiBSZXF1aXJlbWVudHMuCisKKyhkKSBGb3IgZ3JlYXRlciBjZXJ0YWludHksIHRoZSBpbnRlbnQgb2YgUGFydCAxIG9mIHRoZSBTdXBwbGVtZW50IEZpbGUgaXMgdG8gcHJvdmlkZSBhIG1lY2hhbmlzbSAoaWYgYW55KSBieSB3aGljaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9ycyBtdXN0IGRvY3VtZW50IGNoYW5nZXMgdGhhdCB0aGV5IG1ha2UgdG8gdGhlIExpY2Vuc2VkIFdvcmsgcmVzdWx0aW5nIGluIFN1YnNlcXVlbnQgV29ya3MuIFBhcnQgMSBvZiBhbnkgU3VwcGxlbWVudCBGaWxlIHNoYWxsIG5vdCBiZSB1c2VkIHRvIGluY3JlYXNlIG9yIHJlZHVjZSB0aGUgc2NvcGUgb2YgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBBcnRpY2xlIDIgb2YgdGhpcyBMaWNlbnNlIG9yIGluIGFueSBvdGhlciB3YXkgaW5jcmVhc2Ugb3IgZGVjcmVhc2UgdGhlIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgYW55IFJlY2lwaWVudCwgYW5kIHNoYWxsIGF0IG5vIHRpbWUgc2VydmUgYXMgdGhlIGJhc2lzIGZvciB0ZXJtaW5hdGluZyB0aGUgTGljZW5zZS4gRnVydGhlciwgYSBSZWNpcGllbnQgY2FuIGJlIHJlcXVpcmVkIHRvIGNvcnJlY3QgYW5kIGNoYW5nZSBpdHMgZG9jdW1lbnRhdGlvbiBwcm9jZWR1cmVzIHRvIGNvbXBseSB3aXRoIFBhcnQgMSBvZiB0aGUgU3VwcGxlbWVudCBGaWxlLCBidXQgY2Fubm90IGJlIHBlbmFsaXNlZCB3aXRoIGRhbWFnZXMuIFBhcnQgMSBvZiBhbnkgU3VwcGxlbWVudCBGaWxlIGlzIG9ubHkgYmluZGluZyBvbiBlYWNoIFJlY2lwaWVudCBvZiBhbnkgTGljZW5zZWQgV29yayB0byB0aGUgZXh0ZW50IFBhcnQgMSBzZXRzIG91dCB0aGUgcmVxdWlyZW1lbnRzIGZvciBkb2N1bWVudGluZyBjaGFuZ2VzIHRvIHRoZSBJbml0aWFsIFdvcmsgb3IgYW55IFN1YnNlcXVlbnQgV29yay4KKworKGUpIEFuIGV4YW1wbGUgb2YgYSBzZXQgb2YgcmVxdWlyZW1lbnRzIGZvciBkb2N1bWVudGluZyBjaGFuZ2VzIGFuZCBjb250cmlidXRpb25zIG1hZGUgYnkgU3Vic2VxdWVudCBDb250cmlidXRvciBpcyBzZXQgb3V0IGluIFBhcnQgNyBvZiBFeGhpYml0IEEgb2YgdGhpcyBMaWNlbnNlLiBQYXJ0IDcgaXMgYSBzYW1wbGUgb25seSBhbmQgaXMgbm90IGJpbmRpbmcgb24gUmVjaXBpZW50cywgdW5sZXNzIChzdWJqZWN0IHRvIHRoZSBlYXJsaWVyIHBhcmFncmFwaHMgb2YgdGhpcyBTZWN0aW9uIDMuOCkgdGhvc2UgYXJlIHRoZSByZXF1aXJlbWVudHMgdGhhdCB0aGUgSW5pdGlhbCBDb250cmlidXRvciBpbmNsdWRlcyBpbiBQYXJ0IDEgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSB3aXRoIHRoZSBjb3BpZXMgb2YgdGhlIEluaXRpYWwgV29yayBkaXN0cmlidXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzMuOS4gVVNFIE9GIERJU1RSSUJVVE9SIE5BTUUuCisKK1RoZSBuYW1lIG9mIGEgRGlzdHJpYnV0b3IgbWF5IG5vdCBiZSB1c2VkIGJ5IGFueSBvdGhlciBEaXN0cmlidXRvciB0byBlbmRvcnNlIG9yIHByb21vdGUgdGhlIExpY2Vuc2VkIFdvcmsgb3IgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBMaWNlbnNlZCBXb3JrLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworMy4xMC4gTElNSVRFRCBSRUNPR05JVElPTiBPRiBJTklUSUFMIENPTlRSSUJVVE9SLgorCisoYSkgQXMgYSBtb2Rlc3QgYXR0cmlidXRpb24gdG8gdGhlIEluaXRpYWwgQ29udHJpYnV0b3IsIGluIHRoZSBob3BlIHRoYXQgaXRzIHByb21vdGlvbmFsIHZhbHVlIG1heSBoZWxwIGp1c3RpZnkgdGhlIHRpbWUsIG1vbmV5IGFuZCBlZmZvcnQgaW52ZXN0ZWQgaW4gd3JpdGluZyB0aGUgSW5pdGlhbCBXb3JrLCB0aGUgSW5pdGlhbCBDb250cmlidXRvciBtYXkgaW5jbHVkZSBpbiBQYXJ0IDIgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSBhIHJlcXVpcmVtZW50IHRoYXQgZWFjaCB0aW1lIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSByZXN1bHRpbmcgZnJvbSB0aGUgSW5pdGlhbCBXb3JrIG9yIGFueSBTdWJzZXF1ZW50IFdvcmssIG9yIGEgcHJvZ3JhbSBkZXBlbmRlbnQgdGhlcmVvbiwgaXMgbGF1bmNoZWQgb3IgcnVuLCBhIHByb21pbmVudCBkaXNwbGF5IG9mIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yYHMgYXR0cmlidXRpb24gaW5mb3JtYXRpb24gbXVzdCBvY2N1ciAodGhlICJBVFRSSUJVVElPTiBJTkZPUk1BVElPTiIpLiBUaGUgQXR0cmlidXRpb24gSW5mb3JtYXRpb24gbXVzdCBiZSBpbmNsdWRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggU291cmNlIENvZGUgZmlsZS4gRm9yIGdyZWF0ZXIgY2VydGFpbnR5LCB0aGUgSW5pdGlhbCBDb250cmlidXRvciBtYXkgc3BlY2lmeSBpbiB0aGUgU3VwcGxlbWVudCBGaWxlIHRoYXQgdGhlIGFib3ZlIGF0dHJpYnV0aW9uIHJlcXVpcmVtZW50IG9ubHkgYXBwbGllcyB0byBhbiBleGVjdXRhYmxlIHByb2dyYW0gcmVzdWx0aW5nIGZyb20gdGhlIEluaXRpYWwgV29yayBvciBhbnkgU3Vic2VxdWVudCBXb3JrLCBidXQgbm90IGEgcHJvZ3JhbSBkZXBlbmRlbnQgdGhlcmVvbi4gVGhlIGludGVudCBpcyB0byBwcm92aWRlIGZvciByZWFzb25hYmx5IG1vZGVzdCBhdHRyaWJ1dGlvbiwgdGhlcmVmb3JlIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIG1heSBub3QgcmVxdWlyZSBSZWNpcGllbnRzIHRvIGRpc3BsYXksIGF0IGFueSB0aW1lLCBtb3JlIHRoYW4gdGhlIGZvbGxvd2luZyBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbjogKGEpIGEgY29weXJpZ2h0IG5vdGljZSBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgQ29udHJpYnV0b3I7IChiKSBhIHdvcmQgb3Igb25lIHBocmFzZSAobm90IGV4Y2VlZGluZyAxMCB3b3Jkcyk7IChjKSBvbmUgZGlnaXRhbCBpbWFnZSBvciBncmFwaGljIHByb3ZpZGVkIHdpdGggdGhlIEluaXRpYWwgV29yazsgYW5kIChkKSBhIFVSTCAoY29sbGVjdGl2ZWx5LCB0aGUgIkFUVFJJQlVUSU9OIExJTUlUUyIpLgorCisoYikgSWYgbm8gU3VwcGxlbWVudCBGaWxlIGV4aXN0cywgb3Igbm8gQXR0cmlidXRpb24gSW5mb3JtYXRpb24gaXMgc2V0IG91dCBpbiBQYXJ0IDIgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSwgdGhlbiB0aGVyZSBhcmUgbm8gcmVxdWlyZW1lbnRzIGZvciBSZWNpcGllbnRzIHRvIGRpc3BsYXkgYW55IEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIG9mIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yLgorCisoYykgRWFjaCBSZWNpcGllbnQgYWNrbm93bGVkZ2VzIHRoYXQgYWxsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MgYW5kL29yIHRyYWRlIG5hbWVzIGNvbnRhaW5lZCB3aXRoaW4gUGFydCAyIG9mIHRoZSBTdXBwbGVtZW50IEZpbGUgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTGljZW5zZWQgV29yayBhcmUgdGhlIGV4Y2x1c2l2ZSBwcm9wZXJ0eSBvZiB0aGUgSW5pdGlhbCBDb250cmlidXRvciBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yLCBvciB1bmRlciBjaXJjdW1zdGFuY2VzIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgbGF3LCBvciBhcyBleHByZXNzbHkgc2V0IG91dCBpbiB0aGlzIExpY2Vuc2UuCisKKzMuMTEuIEZvciBncmVhdGVyIGNlcnRhaW50eSwgYW55IGRlc2NyaXB0aW9uIG9yIGF0dHJpYnV0aW9uIHByb3Zpc2lvbnMgY29udGFpbmVkIHdpdGhpbiBhIFN1cHBsZW1lbnQgRmlsZSBtYXkgb25seSBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIG5hdHVyZSBvZiB0aGUgZGVzY3JpcHRpb24gb3IgYXR0cmlidXRpb24gcmVxdWlyZW1lbnRzLCBhcyB0aGUgY2FzZSBtYXkgYmUuIEFueSBwcm92aXNpb24gaW4gYSBTdXBwbGVtZW50IEZpbGUgdGhhdCBvdGhlcndpc2UgcHVycG9ydHMgdG8gbW9kaWZ5LCB2YXJ5LCBudWxsaWZ5IG9yIGFtZW5kIGFueSByaWdodCwgb2JsaWdhdGlvbiBvciByZXByZXNlbnRhdGlvbiBjb250YWluZWQgaGVyZWluIHNoYWxsIGJlIGRlZW1lZCB2b2lkIHRvIHRoYXQgZXh0ZW50LCBhbmQgc2hhbGwgYmUgb2Ygbm8gZm9yY2Ugb3IgZWZmZWN0LgorCis0LiBDT01NRVJDSUFMIFVTRSBBTkQgSU5ERU1OSVRZLgorCis0LjEuIENPTU1FUkNJQUwgU0VSVklDRVMuCisKK0EgUmVjaXBpZW50ICgiQ09NTUVSQ0lBTCBSRUNJUElFTlQiKSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgKGNvbGxlY3RpdmVseSwgIlNFUlZJQ0VTIikgdG8gb25lIG9yIG1vcmUgb3RoZXIgUmVjaXBpZW50cyBvciBEaXN0cmlidXRvcnMuIEhvd2V2ZXIsIHN1Y2ggQ29tbWVyY2lhbCBSZWNpcGllbnQgbWF5IGRvIHNvIG9ubHkgb24gdGhhdCBDb21tZXJjaWFsIFJlY2lwaWVudGBzIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIGFueSBvdGhlciBEaXN0cmlidXRvciBvciBSZWNpcGllbnQsIGFuZCBDb21tZXJjaWFsIFJlY2lwaWVudCBtdXN0IG1ha2UgaXQgY2xlYXIgdGhhbiBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uKHMpIGlzL2FyZSBvZmZlcmVkIGJ5IENvbW1lcmNpYWwgUmVjaXBpZW50IGFsb25lLiBBdCBubyB0aW1lIG1heSBDb21tZXJjaWFsIFJlY2lwaWVudCB1c2UgYW55IFNlcnZpY2VzIHRvIGRlbnkgYW55IHBhcnR5IHRoZSBMaWNlbnNlZCBXb3JrIGluIFNvdXJjZSBDb2RlIG9yIEV4ZWN1dGFibGUgZm9ybSB3aGVuIHNvIHJlcXVpcmVkIHVuZGVyIGFueSBvZiB0aGUgb3RoZXIgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBGb3IgZ3JlYXRlciBjZXJ0YWludHksIHRoaXMgU2VjdGlvbiA0LjEgZG9lcyBub3QgZGltaW5pc2ggYW55IG9mIHRoZSBvdGhlciB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIG9ibGlnYXRpb24gb2YgdGhlIENvbW1lcmNpYWwgUmVjaXBpZW50IGFzIGEgRGlzdHJpYnV0b3IsIHdoZW4gZGlzdHJpYnV0aW5nIGFueSBvZiB0aGUgTGljZW5zZWQgV29yayBpbiBTb3VyY2UgQ29kZSBvciBFeGVjdXRhYmxlIGZvcm0sIHRvIG1ha2Ugc3VjaCBkaXN0cmlidXRpb24gcm95YWx0eS1mcmVlIChzdWJqZWN0IHRvIHRoZSByaWdodCB0byBjaGFyZ2UgYSBmZWUgb2Ygbm8gbW9yZSB0aGFuIHRoZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBTb3VyY2UgQ29kZSBvciBFeGVjdXRhYmxlIGRpc3RyaWJ1dGlvbiAoYXMgdGhlIGNhc2UgbWF5IGJlKSkuCisKKzQuMi4gSU5ERU1OSVRZLgorCitDb21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkgYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycyBhbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZSBvZiB0aGUgTGljZW5zZWQgV29yaywgdGhlIERpc3RyaWJ1dG9yIHdobyBpbmNsdWRlcyBhbnkgb2YgdGhlIExpY2Vuc2VkIFdvcmsgaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwgbGlhYmlsaXR5IGZvciBvdGhlciBEaXN0cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBEaXN0cmlidXRvciBpbmNsdWRlcyB0aGUgTGljZW5zZWQgV29yayBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZyBvciBvZmZlcnMgYW55IFNlcnZpY2VzLCBzdWNoIERpc3RyaWJ1dG9yICgiQ09NTUVSQ0lBTCBESVNUUklCVVRPUiIpIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIgRGlzdHJpYnV0b3Igb3IgU3Vic2VxdWVudCBDb250cmlidXRvciAoaW4gZWFjaCBjYXNlIGFuICJJTkRFTU5JRklFRCBQQVJUWSIpIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQgY29zdHMgKGNvbGxlY3RpdmVseSAiTE9TU0VTIikgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyIGxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIFBhcnR5IHRvIHRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgaW4gY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgYW55IG9mIHRoZSBMaWNlbnNlZCBXb3JrIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nIG9yIGluIGNvbm5lY3Rpb24gd2l0aCBhbnkgU2VydmljZXMuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzIHJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlciB0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBQYXJ0eSBtdXN0OiAoYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsIERpc3RyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbTsgYW5kIChiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBEaXN0cmlidXRvciB0byBjb250cm9sLCBhbmQgY28tb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIERpc3RyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQgYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBQYXJ0eSBtYXkgcGFydGljaXBhdGUgaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLgorCis1LiBWRVJTSU9OUyBPRiBUSEUgTElDRU5TRS4KKworNS4xLiBORVcgVkVSU0lPTlMuCisKK1RoZSBJbml0aWFsIENvbnRyaWJ1dG9yIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKworNS4yLiBFRkZFQ1QgT0YgTkVXIFZFUlNJT05TLgorCitPbmNlIHRoZSBMaWNlbnNlZCBXb3JrIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YgaGFzIGJlZW4gcHVibGlzaGVkIGJ5IEluaXRpYWwgQ29udHJpYnV0b3IgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFJlY2lwaWVudCBtYXkgY2hvb3NlIHRvIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBIb3dldmVyLCBpZiBhIFJlY2lwaWVudCBjaG9vc2VzIHRvIHVzZSB0aGUgTGljZW5zZWQgV29yayB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IsIHRoZW4gZnJvbSB0aGUgZGF0ZSBvZiBtYWtpbmcgdGhpcyBjaG9pY2UsIHRoZSBSZWNpcGllbnQgbXVzdCBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhhdCBzdWJzZXF1ZW50IHZlcnNpb24gd2l0aCByZXNwZWN0IHRvIGFsbCBmdXJ0aGVyIHJlcHJvZHVjdGlvbiwgcHJlcGFyYXRpb24gb2YgZGVyaXZhdGl2ZSB3b3JrcywgcHVibGljIGRpc3BsYXkgb2YsIHB1YmxpYyBwZXJmb3JtYW5jZSBvZiwgZGlzdHJpYnV0aW9uIGFuZCBzdWJsaWNlbnNpbmcgYnkgdGhlIFJlY2lwaWVudCBpbiBjb25uZWN0aW9uIHdpdGggdGhlIExpY2Vuc2VkIFdvcmsuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIHRoZSBMaWNlbnNlZCBXb3JrCisKKzYuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCisKKzYuMS4gR0VORVJBTCBESVNDTEFJTUVSLgorCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIExJQ0VOU0UsIFRIRSBMSUNFTlNFRCBXT1JLIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIEFOWSBSRVBSRVNFTlRBVElPTiwgV0FSUkFOVFksIEdVQVJBTlRFRSwgQVNTVVJBTkNFIE9SIENPTkRJVElPTiBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIExJQ0VOU0VEIFdPUksgSVMgV0lUSCBSRUNJUElFTlQuIFNIT1VMRCBBTlkgTElDRU5TRUQgV09SSyBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFJFQ0lQSUVOVCAoTk9UIFRIRSBJTklUSUFMIENPTlRSSUJVVE9SIE9SIEFOWSBTVUJTRVFVRU5UIENPTlRSSUJVVE9SKSBBU1NVTUVTIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBDTEFVU0UgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIExJQ0VOU0VEIFdPUksgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgTElDRU5TRSBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIFRISVMgRElTQ0xBSU1FUi4KKworNi4yLiBSRVNQT05TSUJJTElUWSBPRiBSRUNJUElFTlRTLgorCitFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUgTGljZW5zZWQgV29yayBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsIGNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCis3LiBURVJNSU5BVElPTi4KKworNy4xLiBUaGlzIExpY2Vuc2Ugc2hhbGwgY29udGludWUgdW50aWwgdGVybWluYXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGV4cHJlc3MgdGVybXMgaGVyZWluLgorCis3LjIuIFJlY2lwaWVudCBtYXkgY2hvb3NlIHRvIHRlcm1pbmF0ZSB0aGlzIExpY2Vuc2UgYXV0b21hdGljYWxseSBhdCBhbnkgdGltZS4KKworNy4zLiBUaGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB0byBhIHBhcnRpY3VsYXIgUmVjaXBpZW50LCB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIHN1Y2ggUmVjaXBpZW50IGlzIGluIG1hdGVyaWFsIGJyZWFjaCBvZiBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbHMgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gc2l4dHkgKDYwKSBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIFdpdGhvdXQgbGltaXRpbmcgdGhlIGZvcmVnb2luZywgYW55IG1hdGVyaWFsIGJyZWFjaCBieSBzdWNoIFJlY2lwaWVudCBvZiBhbnkgdGVybSBvZiBhbnkgb3RoZXIgTGljZW5zZSB1bmRlciB3aGljaCBzdWNoIFJlY2lwaWVudCBpcyBncmFudGVkIGFueSByaWdodHMgdG8gdGhlIExpY2Vuc2VkIFdvcmsgc2hhbGwgY29uc3RpdHV0ZSBhIG1hdGVyaWFsIGJyZWFjaCBvZiB0aGlzIExpY2Vuc2UuCisKKzcuNC4gVXBvbiB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UgYnkgb3Igd2l0aCByZXNwZWN0IHRvIGEgcGFydGljdWxhciBSZWNpcGllbnQgZm9yIGFueSByZWFzb24sIGFsbCByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgYW5kIHVuZGVyIGFueSBvdGhlciBMaWNlbnNlIHRvIHRoYXQgUmVjaXBpZW50IHNoYWxsIHRlcm1pbmF0ZS4gSG93ZXZlciwgYWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBMaWNlbnNlZCBXb3JrIHdoaWNoIHdlcmUgcHJldmlvdXNseSBwcm9wZXJseSBncmFudGVkIGJ5IHN1Y2ggUmVjaXBpZW50IHVuZGVyIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgKGluIGVhY2ggY2FzZSwgYW4gIk90aGVyIExpY2Vuc2UiIGFuZCBpbiBwbHVyYWwsICJPdGhlciBMaWNlbnNlcyIpIHNoYWxsIHN1cnZpdmUgYW55IHN1Y2ggdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgYW5kIG9ibGlnYXRpb25zIHVuZGVyIHN1Y2ggT3RoZXIgTGljZW5zZXMgYXMgc2V0IG91dCBpbiB0aGVpciByZXNwZWN0aXZlIFNlY3Rpb25zIDIsIDMsIDQsIDUsIDYsIDcgYW5kIDgsIG11dGF0aXMgbXV0YW5kaXMsIGZvciBzbyBsb25nIGFzIHRoZSByZXNwZWN0aXZlIHN1YmxpY2Vuc2VlcyAoaS5lLiBvdGhlciBSZWNpcGllbnRzKSByZW1haW4gaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UgdW5kZXIgd2hpY2ggc3VjaCBzdWJsaWNlbnNlZXMgcmVjZWl2ZWQgcmlnaHRzIHRvIHRoZSBMaWNlbnNlZCBXb3JrLiBBbnkgdGVybWluYXRpb24gb2Ygc3VjaCBPdGhlciBMaWNlbnNlcyBzaGFsbCBiZSBwdXJzdWFudCB0byB0aGVpciByZXNwZWN0aXZlIFNlY3Rpb24gNywgbXV0YXRpcyBtdXRhbmRpcy4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKworNy41LiBVcG9uIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UgYnkgb3Igd2l0aCByZXNwZWN0IHRvIGEgcGFydGljdWxhciBSZWNpcGllbnQsIFNlY3Rpb25zIDQuMSwgNC4yLCA2LjEsIDYuMiwgNy40LCA3LjUsIDguMSwgYW5kIDguMiwgdG9nZXRoZXIgd2l0aCBhbGwgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2Vuc2UgbmVjZXNzYXJ5IGZvciB0aGUgaW50ZXJwcmV0YXRpb24gYW5kIGVuZm9yY2VtZW50IG9mIHNhbWUsIHNoYWxsIGV4cHJlc3NseSBzdXJ2aXZlIHN1Y2ggdGVybWluYXRpb24uCisKKzguIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCis4LjEuIElOIE5PIEVWRU5UIFNIQUxMIEFOWSBPRiBJTklUSUFMIENPTlRSSUJVVE9SLCBJVFMgU1VCU0lESUFSSUVTLCBPUiBBRkZJTElBVEVTLCBPUiBBTlkgT0YgSVRTIE9SIFRIRUlSIFJFU1BFQ1RJVkUgT0ZGSUNFUlMsIERJUkVDVE9SUywgRU1QTE9ZRUVTLCBBTkQvT1IgQUdFTlRTIChBUyBUSEUgQ0FTRSBNQVkgQkUpLCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QgREFNQUdFUywgSU5ESVJFQ1QgREFNQUdFUywgUFVOSVRJVkUgREFNQUdFUywgSU5DSURFTlRBTCBEQU1BR0VTLCBTUEVDSUFMIERBTUFHRVMsIEVYRU1QTEFSWSBEQU1BR0VTLCBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIE9USEVSIERBTUFHRVMgV0hBVFNPRVZFUiAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBPUiBBTlkgT1RIRVIgTE9TUyBBUklTSU5HIE9VVCBPRiBPUiBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhFIFVTRSwgSU5BQklMSVRZIFRPIFVTRSwgVU5BVVRIT1JJWkVEIFVTRSwgUEVSRk9STUFOQ0UsIE9SIE5PTi1QRVJGT1JNQU5DRSBPRiBUSEUgTElDRU5TRUQgV09SSyBPUiBBTlkgUEFSVCBUSEVSRU9GIE9SIFRIRSBQUk9WSVNJT04gT0YgT1IgRkFJTFVSRSBUTyBQUk9WSURFIFNVUFBPUlQgU0VSVklDRVMsIE9SIFRIQVQgUkVTVUxUIEZST00gRVJST1JTLCBERUZFQ1RTLCBPTUlTU0lPTlMsIERFTEFZUyBJTiBPUEVSQVRJT04gT1IgVFJBTlNNSVNTSU9OLCBPUiBBTlkgT1RIRVIgRkFJTFVSRSBPRiBQRVJGT1JNQU5DRSksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBJTiBSRUxBVElPTiBUTyBPUiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgTElDRU5TRUQgV09SSyBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gVEhJUyBDTEFVU0UgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIExJQ0VOU0VEIFdPUksgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgTElDRU5TRSBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIFRIRSBMSU1JVEFUSU9OUyBTRVQgRk9SVEggSU4gVEhJUyBTRUNUSU9OIDguMS4KKworOC4yLiBFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIExJQ0VOU0UsIEVBQ0ggUkVDSVBJRU5UIFNIQUxMIE5PVCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgTElDRU5TRUQgV09SSyBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4KKworOS4gR09WRVJOSU5HIExBVyBBTkQgTEVHQUwgQUNUSU9OLgorCis5LjEuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBhbmQgY29uc3RydWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgbGF3cyBvZiB0aGUgR292ZXJuaW5nIEp1cmlzZGljdGlvbiBhc3NpZ25lZCBpbiBQYXJ0IDMgb2YgRXhoaWJpdCBBLCB3aXRob3V0IHJlZ2FyZCB0byBpdHMgY29uZmxpY3Qgb2YgbGF3IHByb3Zpc2lvbnMuIE5vIHBhcnR5IG1heSBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzIExpY2Vuc2UgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiB0aGUgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcyBpdHMgcmlnaHRzIChpZiBhbnkpIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgbGl0aWdhdGlvbiBhcmlzaW5nIHVuZGVyIHRoaXMgTGljZW5zZS4gTm90ZSB0aGF0IGlmIHRoZSBHb3Zlcm5pbmcgSnVyaXNkaWN0aW9uIGlzIG5vdCBhc3NpZ25lZCBpbiBQYXJ0IDMgb2YgRXhoaWJpdCBBLCB0aGVuIHRoZSBHb3Zlcm5pbmcgSnVyaXNkaWN0aW9uIHNoYWxsIGJlIHRoZSBTdGF0ZSBvZiBOZXcgWW9yay4KKworOS4yLiBUaGUgY291cnRzIG9mIHRoZSBHb3Zlcm5pbmcgSnVyaXNkaWN0aW9uIHNoYWxsIGhhdmUganVyaXNkaWN0aW9uLCBidXQgbm90IGV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24sIHRvIGVudGVydGFpbiBhbmQgZGV0ZXJtaW5lIGFsbCBkaXNwdXRlcyBhbmQgY2xhaW1zLCB3aGV0aGVyIGZvciBzcGVjaWZpYyBwZXJmb3JtYW5jZSwgaW5qdW5jdGlvbiwgZGFtYWdlcyBvciBvdGhlcndpc2UsIAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQU0wtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjRmODIyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTEuMApAQCAtMCwwICsxLDM3MiBAQAorCitBUFBMRSBQVUJMSUMgU09VUkNFIExJQ0VOU0UKK1ZlcnNpb24gMS4wIC0gTWFyY2ggMTYsIDE5OTkKKworUGxlYXNlIHJlYWQgdGhpcyBMaWNlbnNlIGNhcmVmdWxseSBiZWZvcmUgZG93bmxvYWRpbmcgdGhpcyBzb2Z0d2FyZS4KK0J5IGRvd25sb2FkaW5nIGFuZCB1c2luZyB0aGlzIHNvZnR3YXJlLCB5b3UgYXJlIGFncmVlaW5nIHRvIGJlIGJvdW5kIGJ5Cit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiB5b3UgZG8gbm90IG9yIGNhbm5vdCBhZ3JlZSB0byB0aGUgdGVybXMKK29mIHRoaXMgTGljZW5zZSwgcGxlYXNlIGRvIG5vdCBkb3dubG9hZCBvciB1c2UgdGhlIHNvZnR3YXJlLgorCisxLiBHZW5lcmFsOyBEZWZpbml0aW9ucy4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIKK3dvcmsgd2hpY2ggQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIHB1YmxpY2x5IGFubm91bmNlcyBhcworc3ViamVjdCB0byB0aGlzIEFwcGxlIFB1YmxpYyBTb3VyY2UgTGljZW5zZSBhbmQgd2hpY2ggY29udGFpbnMgYQorbm90aWNlIHBsYWNlZCBieSBBcHBsZSBpZGVudGlmeWluZyBzdWNoIHByb2dyYW0gb3Igd29yayBhcyAiT3JpZ2luYWwKK0NvZGUiIGFuZCBzdGF0aW5nIHRoYXQgaXQgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBcHBsZSBQdWJsaWMKK1NvdXJjZSBMaWNlbnNlIHZlcnNpb24gMS4wIChvciBzdWJzZXF1ZW50IHZlcnNpb24gdGhlcmVvZiksIGFzIGl0IG1heQorYmUgcmV2aXNlZCBmcm9tIHRpbWUgdG8gdGltZSBieSBBcHBsZSAoIkxpY2Vuc2UiKS4gQXMgdXNlZCBpbiB0aGlzCitMaWNlbnNlOgorCisxLjEgIkFwcGxpY2FibGUgUGF0ZW50cyIgbWVhbjogKGEpIGluIHRoZSBjYXNlIHdoZXJlIEFwcGxlIGlzIHRoZQorZ3JhbnRvciBvZiByaWdodHMsIChpKSBwYXRlbnRzIG9yIHBhdGVudCBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgbm93CitvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIEFwcGxlIGFuZCAoaWkpIHdob3NlCitjbGFpbXMgY292ZXIgc3ViamVjdCBtYXR0ZXIgY29udGFpbmVkIGluIHRoZSBPcmlnaW5hbCBDb2RlLCBidXQgb25seQordG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gdXNlLCByZXByb2R1Y2UgYW5kL29yIGRpc3RyaWJ1dGUgdGhlCitPcmlnaW5hbCBDb2RlIHdpdGhvdXQgaW5mcmluZ2VtZW50OyBhbmQgKGIpIGluIHRoZSBjYXNlIHdoZXJlIFlvdQorYXJlIHRoZSBncmFudG9yIG9mIHJpZ2h0cywgKGkpIHBhdGVudHMgYW5kIHBhdGVudCBhcHBsaWNhdGlvbnMgdGhhdAorYXJlIG5vdyBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIFlvdSBhbmQgKGlpKQord2hvc2UgY2xhaW1zIGNvdmVyIHN1YmplY3QgbWF0dGVyIGluIFlvdXIgTW9kaWZpY2F0aW9ucywgdGFrZW4gYWxvbmUKK29yIGluIGNvbWJpbmF0aW9uIHdpdGggT3JpZ2luYWwgQ29kZS4KKworMS4yICJDb3ZlcmVkIENvZGUiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlLCBNb2RpZmljYXRpb25zLCB0aGUKK2NvbWJpbmF0aW9uIG9mIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zLCBhbmQvb3IgYW55CityZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuMyAiRGVwbG95IiBtZWFucyB0byB1c2UsIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgb3RoZXIKK3RoYW4gZm9yIFlvdXIgaW50ZXJuYWwgcmVzZWFyY2ggYW5kIGRldmVsb3BtZW50IChSJmFtcDtEKSwgYW5kIGluY2x1ZGVzCit3aXRob3V0IGxpbWl0YXRpb24sIGFueSBhbmQgYWxsIGludGVybmFsIHVzZSBvciBkaXN0cmlidXRpb24gb2YKK0NvdmVyZWQgQ29kZSB3aXRoaW4gWW91ciBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gZXhjZXB0IGZvciBSJmFtcDtEIHVzZSwKK2FzIHdlbGwgYXMgZGlyZWN0IG9yIGluZGlyZWN0IHN1YmxpY2Vuc2luZyBvciBkaXN0cmlidXRpb24gb2YgQ292ZXJlZAorQ29kZSBieSBZb3UgdG8gYW55IHRoaXJkIHBhcnR5IGluIGFueSBmb3JtIG9yIG1hbm5lci4KKworMS40ICJMYXJnZXIgV29yayIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucwordGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuNSAiTW9kaWZpY2F0aW9ucyIgbWVhbiBhbnkgYWRkaXRpb24gdG8sIGRlbGV0aW9uIGZyb20sIGFuZC9vciBjaGFuZ2UKK3RvLCB0aGUgc3Vic3RhbmNlIGFuZC9vciBzdHJ1Y3R1cmUgb2YgQ292ZXJlZCBDb2RlLiBXaGVuIGNvZGUgaXMKK3JlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczogKGEpIGFueSBhZGRpdGlvbiB0bworb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlOworYW5kL29yIChiKSBhbnkgbmV3IGZpbGUgb3Igb3RoZXIgcmVwcmVzZW50YXRpb24gb2YgY29tcHV0ZXIgcHJvZ3JhbQorc3RhdGVtZW50cyB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIENvdmVyZWQgQ29kZS4KKworMS42ICJPcmlnaW5hbCBDb2RlIiBtZWFucyB0aGUgU291cmNlIENvZGUgb2YgYSBwcm9ncmFtIG9yIG90aGVyIHdvcmsKK2FzIG9yaWdpbmFsbHkgbWFkZSBhdmFpbGFibGUgYnkgQXBwbGUgdW5kZXIgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcKK3RoZSBTb3VyY2UgQ29kZSBvZiBhbnkgdXBkYXRlcyBvciB1cGdyYWRlcyB0byBzdWNoIHByb2dyYW1zIG9yIHdvcmtzCittYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB0aGF0IGhhcyBiZWVuCitleHByZXNzbHkgaWRlbnRpZmllZCBieSBBcHBsZSBhcyBzdWNoIGluIHRoZSBoZWFkZXIgZmlsZShzKSBvZiBzdWNoCit3b3JrLgorCisxLjcgIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgaHVtYW4gcmVhZGFibGUgZm9ybSBvZiBhIHByb2dyYW0gb3Igb3RoZXIKK3dvcmsgdGhhdCBpcyBzdWl0YWJsZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwKK21vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsCitzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIGV4ZWN1dGFibGUKKyhvYmplY3QgY29kZSkuCisKKzEuOCAiWW91IiBvciAiWW91ciIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nCityaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIG9yICJZb3VyIgoraW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIKK2NvbW1vbiBjb250cm9sIHdpdGgsIFlvdSwgd2hlcmUgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdAorb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwKK3doZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQKKyg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZgorc3VjaCBlbnRpdHkuCisKKzIuIFBlcm1pdHRlZCBVc2VzOyBDb25kaXRpb25zICZhbXA7IFJlc3RyaWN0aW9ucy4gU3ViamVjdCB0byB0aGUgdGVybXMKK2FuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgQXBwbGUgaGVyZWJ5IGdyYW50cyBZb3UsIGVmZmVjdGl2ZSBvbgordGhlIGRhdGUgWW91IGFjY2VwdCB0aGlzIExpY2Vuc2UgYW5kIGRvd25sb2FkIHRoZSBPcmlnaW5hbCBDb2RlLCBhCit3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgdG8gdGhlIGV4dGVudCBvZgorQXBwbGVgcyBBcHBsaWNhYmxlIFBhdGVudHMgYW5kIGNvcHlyaWdodHMgY292ZXJpbmcgdGhlIE9yaWdpbmFsCitDb2RlLCB0byBkbyB0aGUgZm9sbG93aW5nOgorCisyLjEgWW91IG1heSB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSBPcmlnaW5hbCBDb2RlLCB3aXRoIG9yCit3aXRob3V0IE1vZGlmaWNhdGlvbnMsIHNvbGVseSBmb3IgWW91ciBpbnRlcm5hbCByZXNlYXJjaCBhbmQKK2RldmVsb3BtZW50LCBwcm92aWRlZCB0aGF0IFlvdSBtdXN0IGluIGVhY2ggaW5zdGFuY2U6CisKKyhhKSByZXRhaW4gYW5kIHJlcHJvZHVjZSBpbiBhbGwgY29waWVzIG9mIE9yaWdpbmFsIENvZGUgdGhlIGNvcHlyaWdodAorYW5kIG90aGVyIHByb3ByaWV0YXJ5IG5vdGljZXMgYW5kIGRpc2NsYWltZXJzIG9mIEFwcGxlIGFzIHRoZXkgYXBwZWFyCitpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYW5kIGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIGluIHRoZSBPcmlnaW5hbCBDb2RlCit0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZTsKKworKGIpIGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgU291cmNlIENvZGUgb2YKK0NvdmVyZWQgQ29kZSBhbmQgZG9jdW1lbnRhdGlvbiBZb3UgZGlzdHJpYnV0ZSwgYW5kIFlvdSBtYXkgbm90IG9mZmVyCitvciBpbXBvc2UgYW55IHRlcm1zIG9uIHN1Y2ggU291cmNlIENvZGUgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGlzCitMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLCBleGNlcHQgYXMgcGVybWl0dGVkIHVuZGVyCitTZWN0aW9uIDY7IGFuZAorCisoYykgY29tcGxldGVseSBhbmQgYWNjdXJhdGVseSBkb2N1bWVudCBhbGwgTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSBoYXZlCittYWRlIGFuZCB0aGUgZGF0ZSBvZiBlYWNoIHN1Y2ggTW9kaWZpY2F0aW9uLCBkZXNpZ25hdGUgdGhlIHZlcnNpb24gb2YKK3RoZSBPcmlnaW5hbCBDb2RlIHlvdSB1c2VkLCBwcm9taW5lbnRseSBpbmNsdWRlIGEgZmlsZSBjYXJyeWluZyBzdWNoCitpbmZvcm1hdGlvbiB3aXRoIHRoZSBNb2RpZmljYXRpb25zLCBhbmQgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4KK0V4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIGFsbCBzdWNoIE1vZGlmaWNhdGlvbnMuCisKKzIuMiBZb3UgbWF5IERlcGxveSBDb3ZlcmVkIENvZGUsIHByb3ZpZGVkIHRoYXQgWW91IG11c3QgaW4gZWFjaAoraW5zdGFuY2U6CisKKyhhKSBzYXRpc2Z5IGFsbCB0aGUgY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIuMSB3aXRoIHJlc3BlY3QgdG8gdGhlCitTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlOworCisoYikgbWFrZSBhbGwgWW91ciBEZXBsb3llZCBNb2RpZmljYXRpb25zIHB1YmxpY2x5IGF2YWlsYWJsZSBpbiBTb3VyY2UKK0NvZGUgZm9ybSB2aWEgZWxlY3Ryb25pYyBkaXN0cmlidXRpb24gKGUuZy4gZG93bmxvYWQgZnJvbSBhIHdlYiBzaXRlKQordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgc3ViamVjdCB0byB0aGUgbGljZW5zZSBncmFudHMgc2V0Citmb3J0aCBpbiBTZWN0aW9uIDMgYmVsb3csIGFuZCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBZb3UgbWF5IGNob29zZSB0bworb2ZmZXIgdW5kZXIgU2VjdGlvbiA2LiBZb3UgbXVzdCBjb250aW51ZSB0byBtYWtlIHRoZSBTb3VyY2UgQ29kZSBvZgorWW91ciBEZXBsb3llZCBNb2RpZmljYXRpb25zIGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyB5b3UgRGVwbG95IHRoZQorQ292ZXJlZCBDb2RlIG9yIHR3ZWx2ZSAoMTIpIG1vbnRocyBmcm9tIHRoZSBkYXRlIG9mIGluaXRpYWwKK0RlcGxveW1lbnQsIHdoaWNoZXZlciBpcyBsb25nZXI7CisKKyhjKSBtdXN0IG5vdGlmeSBBcHBsZSBhbmQgb3RoZXIgdGhpcmQgcGFydGllcyBvZiBob3cgdG8gb2J0YWluIFlvdXIKK0RlcGxveWVkIE1vZGlmaWNhdGlvbnMgYnkgZmlsbGluZyBvdXQgYW5kIHN1Ym1pdHRpbmcgdGhlIHJlcXVpcmVkCitpbmZvcm1hdGlvbiBmb3VuZCBhdAoraHR0cDovL3d3dy5hcHBsZS5jb20vcHVibGljc291cmNlL21vZGlmaWNhdGlvbnMuaHRtbDsgYW5kCisKKyhkKSBpZiB5b3UgRGVwbG95IENvdmVyZWQgQ29kZSBpbiBvYmplY3QgY29kZSwgZXhlY3V0YWJsZSBmb3JtIG9ubHksCitpbmNsdWRlIGEgcHJvbWluZW50IG5vdGljZSwgaW4gdGhlIGNvZGUgaXRzZWxmIGFzIHdlbGwgYXMgaW4gcmVsYXRlZAorZG9jdW1lbnRhdGlvbiwgc3RhdGluZyB0aGF0IFNvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMKK2F2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggaW5mb3JtYXRpb24gb24gaG93IGFuZAord2hlcmUgdG8gb2J0YWluIHN1Y2ggU291cmNlIENvZGUuCisKKzMuIFlvdXIgR3JhbnRzLiBJbiBjb25zaWRlcmF0aW9uIG9mLCBhbmQgYXMgYSBjb25kaXRpb24gdG8sIHRoZQorbGljZW5zZXMgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlOgorCisoYSkgWW91IGhlcmVieSBncmFudCB0byBBcHBsZSBhbmQgYWxsIHRoaXJkIHBhcnRpZXMgYSBub24tZXhjbHVzaXZlLAorcm95YWx0eS1mcmVlIGxpY2Vuc2UsIHVuZGVyIFlvdXIgQXBwbGljYWJsZSBQYXRlbnRzIGFuZCBvdGhlcgoraW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gdXNlLAorcmVwcm9kdWNlLCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIERlcGxveSBZb3VyIE1vZGlmaWNhdGlvbnMgb2YgdGhlCitzYW1lIHNjb3BlIGFuZCBleHRlbnQgYXMgQXBwbGVgcyBsaWNlbnNlcyB1bmRlciBTZWN0aW9ucyAyLjEgYW5kIDIuMjsKK2FuZAorCisoYikgWW91IGhlcmVieSBncmFudCB0byBBcHBsZSBhbmQgaXRzIHN1YnNpZGlhcmllcyBhIG5vbi1leGNsdXNpdmUsCit3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgcGVycGV0dWFsIGFuZCBpcnJldm9jYWJsZSBsaWNlbnNlLCB1bmRlciBZb3VyCitBcHBsaWNhYmxlIFBhdGVudHMgYW5kIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3duZWQgb3IKK2NvbnRyb2xsZWQgYnkgWW91LCB0byB1c2UsIHJlcHJvZHVjZSwgZXhlY3V0ZSwgY29tcGlsZSwgZGlzcGxheSwKK3BlcmZvcm0sIG1vZGlmeSBvciBoYXZlIG1vZGlmaWVkIChmb3IgQXBwbGUgYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMpLAorc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSBZb3VyIE1vZGlmaWNhdGlvbnMsIGluIGFueSBmb3JtLCB0aHJvdWdoCittdWx0aXBsZSB0aWVycyBvZiBkaXN0cmlidXRpb24uCisKKzQuIExhcmdlciBXb3Jrcy4gWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZAorQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kCitkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBlYWNoIHN1Y2gKK2luc3RhbmNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlCitmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IHBvcnRpb24gdGhlcmVvZi4KKworNS4gTGltaXRhdGlvbnMgb24gUGF0ZW50IExpY2Vuc2UuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluCitTZWN0aW9uIDIsIG5vIG90aGVyIHBhdGVudCByaWdodHMsIGV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQKK2J5IEFwcGxlIGhlcmVpbi4gTW9kaWZpY2F0aW9ucyBhbmQvb3IgTGFyZ2VyIFdvcmtzIG1heSByZXF1aXJlCithZGRpdGlvbmFsIHBhdGVudCBsaWNlbnNlcyBmcm9tIEFwcGxlIHdoaWNoIEFwcGxlIG1heSBncmFudCBpbiBpdHMKK3NvbGUgZGlzY3JldGlvbi4KKworNi4gQWRkaXRpb25hbCBUZXJtcy4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUKK2Zvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yCitvdGhlciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoZSBzY29wZSBvZiB0aGUgbGljZW5zZSBncmFudGVkIGhlcmVpbgorKCJBZGRpdGlvbmFsIFRlcm1zIikgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkCitDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmIGFuZCBhcyBZb3VyCitzb2xlIHJlc3BvbnNpYmlsaXR5LCBhbmQgbm90IG9uIGJlaGFsZiBvZiBBcHBsZS4gWW91IG11c3Qgb2J0YWluIHRoZQorcmVjaXBpZW50YHMgYWdyZWVtZW50IHRoYXQgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcyBhcmUgb2ZmZXJlZCBieQorWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCBhbmQgaG9sZCBBcHBsZQoraGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QKK0FwcGxlIGJ5IHJlYXNvbiBvZiBhbnkgc3VjaCBBZGRpdGlvbmFsIFRlcm1zLgorCis3LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4gQXBwbGUgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3Cit2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlCitnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBPbmNlIE9yaWdpbmFsIENvZGUgaGFzIGJlZW4KK3B1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UsIFlvdSBtYXkKK2NvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28KK2Nob29zZSB0byB1c2Ugc3VjaCBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudAordmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcHVibGlzaGVkIGJ5IEFwcGxlLiBObyBvbmUgb3RoZXIgdGhhbiBBcHBsZQoraGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQKK3VuZGVyIHRoaXMgTGljZW5zZS4KKworOC4gTk8gV0FSUkFOVFkgT1IgU1VQUE9SVC4gVGhlIE9yaWdpbmFsIENvZGUgbWF5IGNvbnRhaW4gaW4gd2hvbGUgb3IKK2luIHBhcnQgcHJlLXJlbGVhc2UsIHVudGVzdGVkLCBvciBub3QgZnVsbHkgdGVzdGVkIHdvcmtzLiBUaGUKK09yaWdpbmFsIENvZGUgbWF5IGNvbnRhaW4gZXJyb3JzIHRoYXQgY291bGQgY2F1c2UgZmFpbHVyZXMgb3IgbG9zcworb2YgZGF0YSwgYW5kIG1heSBiZSBpbmNvbXBsZXRlIG9yIGNvbnRhaW4gaW5hY2N1cmFjaWVzLiBZb3UKK2V4cHJlc3NseSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCB1c2Ugb2YgdGhlIE9yaWdpbmFsIENvZGUsIG9yCithbnkgcG9ydGlvbiB0aGVyZW9mLCBpcyBhdCBZb3VyIHNvbGUgYW5kIGVudGlyZSByaXNrLiBUSEUgT1JJR0lOQUwKK0NPREUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSwgVVBHUkFERVMgT1IgU1VQUE9SVAorT0YgQU5ZIEtJTkQgQU5EIEFQUExFIEFORCBBUFBMRWBTIExJQ0VOU09SKFMpIChGT1IgVEhFIFBVUlBPU0VTIE9GCitTRUNUSU9OUyA4IEFORCA5LCBBUFBMRSBBTkQgQVBQTEVgUyBMSUNFTlNPUihTKSBBUkUgQ09MTEVDVElWRUxZCitSRUZFUlJFRCBUTyBBUyAiQVBQTEUiKSBFWFBSRVNTTFkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgQU5EL09SCitDT05ESVRJT05TLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBBTkQvT1IgQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IKK1NBVElTRkFDVE9SWSBRVUFMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKK05PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuIEFQUExFIERPRVMgTk9UIFdBUlJBTlQgVEhBVAorVEhFIEZVTkNUSU9OUyBDT05UQUlORUQgSU4gVEhFIE9SSUdJTkFMIENPREUgV0lMTCBNRUVUIFlPVVIKK1JFUVVJUkVNRU5UUywgT1IgVEhBVCBUSEUgT1BFUkFUSU9OIE9GIFRIRSBPUklHSU5BTCBDT0RFIFdJTEwgQkUKK1VOSU5URVJSVVBURUQgT1IgRVJST1ItRlJFRSwgT1IgVEhBVCBERUZFQ1RTIElOIFRIRSBPUklHSU5BTCBDT0RFCitXSUxMIEJFIENPUlJFQ1RFRC4gTk8gT1JBTCBPUiBXUklUVEVOIElORk9STUFUSU9OIE9SIEFEVklDRSBHSVZFTgorQlkgQVBQTEUgT1IgQU4gQVBQTEUgQVVUSE9SSVpFRCBSRVBSRVNFTlRBVElWRSBTSEFMTCBDUkVBVEUgQQorV0FSUkFOVFkgT1IgSU4gQU5ZIFdBWSBJTkNSRUFTRSBUSEUgU0NPUEUgT0YgVEhJUyBXQVJSQU5UWS4gWW91CithY2tub3dsZWRnZSB0aGF0IHRoZSBPcmlnaW5hbCBDb2RlIGlzIG5vdCBpbnRlbmRlZCBmb3IgdXNlIGluIHRoZQorb3BlcmF0aW9uIG9mIG51Y2xlYXIgZmFjaWxpdGllcywgYWlyY3JhZnQgbmF2aWdhdGlvbiwgY29tbXVuaWNhdGlvbgorc3lzdGVtcywgb3IgYWlyIHRyYWZmaWMgY29udHJvbCBtYWNoaW5lcyBpbiB3aGljaCBjYXNlIHRoZSBmYWlsdXJlCitvZiB0aGUgT3JpZ2luYWwgQ29kZSBjb3VsZCBsZWFkIHRvIGRlYXRoLCBwZXJzb25hbCBpbmp1cnksIG9yIHNldmVyZQorcGh5c2ljYWwgb3IgZW52aXJvbm1lbnRhbCBkYW1hZ2UuCisKKzkuIExpYWJpbGl0eS4KKworOS4xIEluZnJpbmdlbWVudC4gSWYgYW55IG9mIHRoZSBPcmlnaW5hbCBDb2RlIGJlY29tZXMgdGhlIHN1YmplY3Qgb2YKK2EgY2xhaW0gb2YgaW5mcmluZ2VtZW50ICgiQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZSIpLCBBcHBsZSBtYXksIGF0CitpdHMgc29sZSBkaXNjcmV0aW9uIGFuZCBvcHRpb246IChhKSBhdHRlbXB0IHRvIHByb2N1cmUgdGhlIHJpZ2h0cworbmVjZXNzYXJ5IGZvciBZb3UgdG8gY29udGludWUgdXNpbmcgdGhlIEFmZmVjdGVkIE9yaWdpbmFsIENvZGU7IChiKQorbW9kaWZ5IHRoZSBBZmZlY3RlZCBPcmlnaW5hbCBDb2RlIHNvIHRoYXQgaXQgaXMgbm8gbG9uZ2VyCitpbmZyaW5naW5nOyBvciAoYykgdGVybWluYXRlIFlvdXIgcmlnaHRzIHRvIHVzZSB0aGUgQWZmZWN0ZWQKK09yaWdpbmFsIENvZGUsIGVmZmVjdGl2ZSBpbW1lZGlhdGVseSB1cG9uIEFwcGxlYHMgcG9zdGluZyBvZiBhCitub3RpY2UgdG8gc3VjaCBlZmZlY3Qgb24gdGhlIEFwcGxlIHdlYiBzaXRlIHRoYXQgaXMgdXNlZCBmb3IKK2ltcGxlbWVudGF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworOS4yIExJTUlUQVRJT04gT0YgTElBQklMSVRZLiBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIFNIQUxMIEFQUExFIEJFCitMSUFCTEUgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIE9SIFJFTEFUSU5HIFRPIFRISVMgTElDRU5TRSBPUiBZT1VSIFVTRSBPUgorSU5BQklMSVRZIFRPIFVTRSBUSEUgT1JJR0lOQUwgQ09ERSwgT1IgQU5ZIFBPUlRJT04gVEhFUkVPRiwgV0hFVEhFUgorVU5ERVIgQSBUSEVPUlkgT0YgQ09OVFJBQ1QsIFdBUlJBTlRZLCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksCitQUk9EVUNUUyBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGIEFQUExFIEhBUyBCRUVOIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMgQU5EIE5PVFdJVEhTVEFORElORyBUSEUgRkFJTFVSRSBPRgorRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIFJFTUVEWS4gSW4gbm8gZXZlbnQgc2hhbGwgQXBwbGVgcyB0b3RhbAorbGlhYmlsaXR5IHRvIFlvdSBmb3IgYWxsIGRhbWFnZXMgdW5kZXIgdGhpcyBMaWNlbnNlIGV4Y2VlZCB0aGUKK2Ftb3VudCBvZiBmaWZ0eSBkb2xsYXJzICgkNTAuMDApLgorCisxMC4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZQordHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyAiQXBwbGUiLCAiQXBwbGUgQ29tcHV0ZXIiLCAiTWFjIE9TIFgiLAorIk1hYyBPUyBYIFNlcnZlciIgb3IgYW55IG90aGVyIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgYmVsb25naW5nCit0byBBcHBsZSAoY29sbGVjdGl2ZWx5ICJBcHBsZSBNYXJrcyIpIGFuZCBubyBBcHBsZSBNYXJrcyBtYXkgYmUKK3VzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZQorb3RoZXIgdGhhbiBhcyBwZXJtaXR0ZWQgYnkgYW5kIGluIHN0cmljdCBjb21wbGlhbmNlIGF0IGFsbCB0aW1lcword2l0aCBBcHBsZWBzIHRoaXJkIHBhcnR5IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzIHdoaWNoIGFyZQorcG9zdGVkIGF0IGh0dHA6Ly93d3cuYXBwbGUuY29tL2xlZ2FsL2d1aWRlbGluZXNmb3IzcmRwYXJ0aWVzLmh0bWwuCisKKzExLiBPd25lcnNoaXAuIEFwcGxlIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0bwordGhlIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgb3Igb24gYmVoYWxmIG9mCitBcHBsZSAoIkFwcGxlIE1vZGlmaWNhdGlvbnMiKSwgYW5kIHN1Y2ggQXBwbGUgTW9kaWZpY2F0aW9ucyB3aWxsCitub3QgYmUgYXV0b21hdGljYWxseSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gQXBwbGUgbWF5LCBhdCBpdHMKK3NvbGUgZGlzY3JldGlvbiwgY2hvb3NlIHRvIGxpY2Vuc2Ugc3VjaCBBcHBsZSBNb2RpZmljYXRpb25zIHVuZGVyCit0aGlzIExpY2Vuc2UsIG9yIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzCitMaWNlbnNlIG9yIG1heSBjaG9vc2Ugbm90IHRvIGxpY2Vuc2UgdGhlbSBhdCBhbGwuIEFwcGxlYHMKK2RldmVsb3BtZW50LCB1c2UsIHJlcHJvZHVjdGlvbiwgbW9kaWZpY2F0aW9uLCBzdWJsaWNlbnNpbmcgYW5kCitkaXN0cmlidXRpb24gb2YgQ292ZXJlZCBDb2RlIHdpbGwgbm90IGJlIHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLgorCisxMi4gVGVybWluYXRpb24uCisKKzEyLjEgVGVybWluYXRpb24uIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsCit0ZXJtaW5hdGU6CisKKyhhKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gQXBwbGUgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGgKK2FueSB0ZXJtKHMpIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMAorZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIGJyZWFjaDsgKGIpIGltbWVkaWF0ZWx5IGluIHRoZSBldmVudCBvZgordGhlIGNpcmN1bXN0YW5jZXMgZGVzY3JpYmVkIGluIFNlY3Rpb25zIDkuMSBhbmQvb3IgMTMuNihiKTsgb3IgKGMpCithdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gQXBwbGUgaWYgWW91LCBhdCBhbnkgdGltZSBkdXJpbmcgdGhlCit0ZXJtIG9mIHRoaXMgTGljZW5zZSwgY29tbWVuY2UgYW4gYWN0aW9uIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50CithZ2FpbnN0IEFwcGxlLgorCisxMi4yIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi4gVXBvbiB0ZXJtaW5hdGlvbiwgWW91IGFncmVlIHRvCitpbW1lZGlhdGVseSBzdG9wIGFueSBmdXJ0aGVyIHVzZSwgcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24gYW5kCitkaXN0cmlidXRpb24gb2YgdGhlIENvdmVyZWQgQ29kZSwgb3IgQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZSBpbiB0aGUKK2Nhc2Ugb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbiA5LjEsIGFuZCB0byBkZXN0cm95IGFsbCBjb3BpZXMgb2YKK3RoZSBDb3ZlcmVkIENvZGUgb3IgQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZSAoaW4gdGhlIGNhc2Ugb2YKK3Rlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb24gOS4xKSB0aGF0IGFyZSBpbiB5b3VyIHBvc3Nlc3Npb24gb3IKK2NvbnRyb2wuIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGhhdmUgYmVlbgorcHJvcGVybHkgZ3JhbnRlZCBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbgorb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIHNob3VsZCByZW1haW4KK2luIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLAoraW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBTZWN0aW9ucyAzLCA1LCA4LCA5LCAxMCwgMTEsIDEyLjIgYW5kCisxMy4gTmVpdGhlciBwYXJ0eSB3aWxsIGJlIGxpYWJsZSB0byB0aGUgb3RoZXIgZm9yIGNvbXBlbnNhdGlvbiwKK2luZGVtbml0eSBvciBkYW1hZ2VzIG9mIGFueSBzb3J0IHNvbGVseSBhcyBhIHJlc3VsdCBvZiB0ZXJtaW5hdGluZwordGhpcyBMaWNlbnNlIGluIGFjY29yZGFuY2Ugd2l0aCBpdHMgdGVybXMsIGFuZCB0ZXJtaW5hdGlvbiBvZiB0aGlzCitMaWNlbnNlIHdpbGwgYmUgd2l0aG91dCBwcmVqdWRpY2UgdG8gYW55IG90aGVyIHJpZ2h0IG9yIHJlbWVkeSBvZgorZWl0aGVyIHBhcnR5LgorCisxMy4gTWlzY2VsbGFuZW91cy4KKworMTMuMSBFeHBvcnQgTGF3IEFzc3VyYW5jZXMuIFlvdSBtYXkgbm90IHVzZSBvciBvdGhlcndpc2UgZXhwb3J0IG9yCityZS1leHBvcnQgdGhlIE9yaWdpbmFsIENvZGUgZXhjZXB0IGFzIGF1dGhvcml6ZWQgYnkgVW5pdGVkIFN0YXRlcworbGF3IGFuZCB0aGUgbGF3cyBvZiB0aGUganVyaXNkaWN0aW9uIGluIHdoaWNoIHRoZSBPcmlnaW5hbCBDb2RlIHdhcworb2J0YWluZWQuIEluIHBhcnRpY3VsYXIsIGJ1dCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSBPcmlnaW5hbCBDb2RlCittYXkgbm90IGJlIGV4cG9ydGVkIG9yIHJlLWV4cG9ydGVkIChhKSBpbnRvIChvciB0byBhIG5hdGlvbmFsIG9yCityZXNpZGVudCBvZikgYW55IFUuUy4gZW1iYXJnb2VkIGNvdW50cnkgb3IgKGIpIHRvIGFueW9uZSBvbiB0aGUKK1UuUy4gVHJlYXN1cnkgRGVwYXJ0bWVudGBzIGxpc3Qgb2YgU3BlY2lhbGx5IERlc2lnbmF0ZWQgTmF0aW9uYWxzCitvciB0aGUgVS5TLiBEZXBhcnRtZW50IG9mIENvbW1lcmNlYHMgVGFibGUgb2YgRGVuaWFsIE9yZGVycy4gQnkKK3VzaW5nIHRoZSBPcmlnaW5hbCBDb2RlLCBZb3UgcmVwcmVzZW50IGFuZCB3YXJyYW50IHRoYXQgWW91IGFyZSBub3QKK2xvY2F0ZWQgaW4sIHVuZGVyIGNvbnRyb2wgb2YsIG9yIGEgbmF0aW9uYWwgb3IgcmVzaWRlbnQgb2YgYW55IHN1Y2gKK2NvdW50cnkgb3Igb24gYW55IHN1Y2ggbGlzdC4KKworMTMuMiBHb3Zlcm5tZW50IEVuZCBVc2Vycy4gVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0iIGFzCitkZWZpbmVkIGluIEZBUiAyLjEwMS4gR292ZXJubWVudCBzb2Z0d2FyZSBhbmQgdGVjaG5pY2FsIGRhdGEKK3JpZ2h0cyBpbiB0aGUgQ292ZXJlZCBDb2RlIGluY2x1ZGUgb25seSB0aG9zZSByaWdodHMgY3VzdG9tYXJpbHkKK3Byb3ZpZGVkIHRvIHRoZSBwdWJsaWMgYXMgZGVmaW5lZCBpbiB0aGlzIExpY2Vuc2UuIFRoaXMgY3VzdG9tYXJ5Citjb21tZXJjaWFsIGxpY2Vuc2UgaW4gdGVjaG5pY2FsIGRhdGEgYW5kIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGluCithY2NvcmRhbmNlIHdpdGggRkFSIDEyLjIxMSAoVGVjaG5pY2FsIERhdGEpIGFuZCAxMi4yMTIgKENvbXB1dGVyCitTb2Z0d2FyZSkgYW5kLCBmb3IgRGVwYXJ0bWVudCBvZiBEZWZlbnNlIHB1cmNoYXNlcywgREZBUgorMjUyLjIyNy03MDE1IChUZWNobmljYWwgRGF0YSAtLSBDb21tZXJjaWFsIEl0ZW1zKSBhbmQgMjI3LjcyMDItMworKFJpZ2h0cyBpbiBDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlIG9yIENvbXB1dGVyIFNvZnR3YXJlCitEb2N1bWVudGF0aW9uKS4gQWNjb3JkaW5nbHksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUKK0NvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKzEzLjMgUmVsYXRpb25zaGlwIG9mIFBhcnRpZXMuIFRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMKK2NyZWF0aW5nIGFuIGFnZW5jeSwgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUgb3IgYW55IG90aGVyIGZvcm0gb2YKK2xlZ2FsIGFzc29jaWF0aW9uIGJldHdlZW4gWW91IGFuZCBBcHBsZSwgYW5kIFlvdSB3aWxsIG5vdCByZXByZXNlbnQKK3RvIHRoZSBjb250cmFyeSwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBhcHBlYXJhbmNlIG9yCitvdGhlcndpc2UuCisKKzEzLjQgSW5kZXBlbmRlbnQgRGV2ZWxvcG1lbnQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHdpbGwgaW1wYWlyCitBcHBsZWBzIHJpZ2h0IHRvIGFjcXVpcmUsIGxpY2Vuc2UsIGRldmVsb3AsIGhhdmUgb3RoZXJzIGRldmVsb3AgZm9yCitpdCwgbWFya2V0IGFuZC9vciBkaXN0cmlidXRlIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBwZXJmb3JtCit0aGUgc2FtZSBvciBzaW1pbGFyIGZ1bmN0aW9ucyBhcywgb3Igb3RoZXJ3aXNlIGNvbXBldGUgd2l0aCwKK01vZGlmaWNhdGlvbnMsIExhcmdlciBXb3JrcywgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IFlvdSBtYXkKK2RldmVsb3AsIHByb2R1Y2UsIG1hcmtldCBvciBkaXN0cmlidXRlLgorCisxMy41IFdhaXZlcjsgQ29uc3RydWN0aW9uLiBGYWlsdXJlIGJ5IEFwcGxlIHRvIGVuZm9yY2UgYW55IHByb3Zpc2lvbgorb2YgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGRlZW1lZCBhIHdhaXZlciBvZiBmdXR1cmUgZW5mb3JjZW1lbnQKK29mIHRoYXQgb3IgYW55IG90aGVyIHByb3Zpc2lvbi4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoCitwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0Cit0aGUgZHJhZnRlciB3aWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKzEzLjYgU2V2ZXJhYmlsaXR5LiAoYSkgSWYgZm9yIGFueSByZWFzb24gYSBjb3VydCBvZiBjb21wZXRlbnQKK2p1cmlzZGljdGlvbiBmaW5kcyBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgb3IgcG9ydGlvbgordGhlcmVvZiwgdG8gYmUgdW5lbmZvcmNlYWJsZSwgdGhhdCBwcm92aXNpb24gb2YgdGhlIExpY2Vuc2Ugd2lsbCBiZQorZW5mb3JjZWQgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pc3NpYmxlIHNvIGFzIHRvIGVmZmVjdCB0aGUKK2Vjb25vbWljIGJlbmVmaXRzIGFuZCBpbnRlbnQgb2YgdGhlIHBhcnRpZXMsIGFuZCB0aGUgcmVtYWluZGVyIG9mCit0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuIChiKQorTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIGlmIGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBvcgorcmVzdHJpY3RzIFlvdSBmcm9tIGZ1bGx5IGFuZC9vciBzcGVjaWZpY2FsbHkgY29tcGx5aW5nIHdpdGgKK1NlY3Rpb25zIDIgYW5kL29yIDMgb3IgcHJldmVudHMgdGhlIGVuZm9yY2VhYmlsaXR5IG9mIGVpdGhlciBvZgordGhvc2UgU2VjdGlvbnMsIHRoaXMgTGljZW5zZSB3aWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSBhbmQgWW91CittdXN0IGltbWVkaWF0ZWx5IGRpc2NvbnRpbnVlIGFueSB1c2Ugb2YgdGhlIENvdmVyZWQgQ29kZSBhbmQKK2Rlc3Ryb3kgYWxsIGNvcGllcyBvZiBpdCB0aGF0IGFyZSBpbiB5b3VyIHBvc3Nlc3Npb24gb3IgY29udHJvbC4KKworMTMuNyBEaXNwdXRlIFJlc29sdXRpb24uIEFueSBsaXRpZ2F0aW9uIG9yIG90aGVyIGRpc3B1dGUgcmVzb2x1dGlvbgorYmV0d2VlbiBZb3UgYW5kIEFwcGxlIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCB0YWtlIHBsYWNlIGluCit0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgYW5kIFlvdSBhbmQgQXBwbGUgaGVyZWJ5Citjb25zZW50IHRvIHRoZSBwZXJzb25hbCBqdXJpc2RpY3Rpb24gb2YsIGFuZCB2ZW51ZSBpbiwgdGhlIHN0YXRlCithbmQgZmVkZXJhbCBjb3VydHMgd2l0aGluIHRoYXQgRGlzdHJpY3Qgd2l0aCByZXNwZWN0IHRvIHRoaXMKK0xpY2Vuc2UuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbgorQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseQorZXhjbHVkZWQuCisKKzEzLjggRW50aXJlIEFncmVlbWVudDsgR292ZXJuaW5nIExhdy4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZQorZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdAorbWF0dGVyIGhlcmVvZi4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorVW5pdGVkIFN0YXRlcyBhbmQgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGV4Y2VwdCB0aGF0IGJvZHkgb2YKK0NhbGlmb3JuaWEgbGF3IGNvbmNlcm5pbmcgY29uZmxpY3RzIG9mIGxhdy4KKworV2hlcmUgWW91IGFyZSBsb2NhdGVkIGluIHRoZSBwcm92aW5jZSBvZiBRdWViZWMsIENhbmFkYSwgdGhlIGZvbGxvd2luZworY2xhdXNlIGFwcGxpZXM6IFRoZSBwYXJ0aWVzIGhlcmVieSBjb25maXJtIHRoYXQgdGhleSBoYXZlIHJlcXVlc3RlZAordGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFsbCByZWxhdGVkIGRvY3VtZW50cyBiZSBkcmFmdGVkIGluIEVuZ2xpc2guIExlcworcGFydGllcyBvbnQgZXhpZ2UgcXVlIGxlIHByZXNlbnQgY29udHJhdCBldCB0b3VzIGxlcyBkb2N1bWVudHMKK2Nvbm5leGVzIHNvaWVudCByZWRpZ2VzIGVuIGFuZ2xhaXMuCisKK0VYSElCSVQgQS4KKworIlBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5OSBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwgUmlnaHRzCitSZXNlcnZlZC4gVGhpcyBmaWxlIGNvbnRhaW5zIE9yaWdpbmFsIENvZGUgYW5kL29yIE1vZGlmaWNhdGlvbnMgb2YKK09yaWdpbmFsIENvZGUgYXMgZGVmaW5lZCBpbiBhbmQgdGhhdCBhcmUgc3ViamVjdCB0byB0aGUgQXBwbGUgUHVibGljCitTb3VyY2UgTGljZW5zZSBWZXJzaW9uIDEuMCAodGhlIGBMaWNlbnNlYCkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKK2V4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFBsZWFzZSBvYnRhaW4gYSBjb3B5IG9mIHRoZQorTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwcGxlLmNvbS9wdWJsaWNzb3VyY2UgYW5kIHJlYWQgaXQgYmVmb3JlIHVzaW5nCit0aGlzIGZpbGUuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbGwgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgYXJlCitkaXN0cmlidXRlZCBvbiBhbiBgQVMgSVNgIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIKK0VYUFJFU1MgT1IgSU1QTElFRCwgQU5EIEFQUExFIEhFUkVCWSBESVNDTEFJTVMgQUxMIFNVQ0ggV0FSUkFOVElFUywKK0lOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HRU1FTlQuIFBsZWFzZSBzZWUgdGhlCitMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTEuMSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBTTC0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI1ZTQ2ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBTTC0xLjEKQEAgLTAsMCArMSwzNzQgQEAKKworQVBQTEUgUFVCTElDIFNPVVJDRSBMSUNFTlNFCitWZXJzaW9uIDEuMSAtIEFwcmlsIDE5LDE5OTkKKworUGxlYXNlIHJlYWQgdGhpcyBMaWNlbnNlIGNhcmVmdWxseSBiZWZvcmUgZG93bmxvYWRpbmcgdGhpcyBzb2Z0d2FyZS4KK0J5IGRvd25sb2FkaW5nIGFuZCB1c2luZyB0aGlzIHNvZnR3YXJlLCB5b3UgYXJlIGFncmVlaW5nIHRvIGJlIGJvdW5kCitieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGRvIG5vdCBvciBjYW5ub3QgYWdyZWUgdG8gdGhlCit0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHBsZWFzZSBkbyBub3QgZG93bmxvYWQgb3IgdXNlIHRoZSBzb2Z0d2FyZS4KKworMS4gR2VuZXJhbDsgRGVmaW5pdGlvbnMuICBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlcgord29yayB3aGljaCBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgcHVibGljbHkgYW5ub3VuY2VzIGFzCitzdWJqZWN0IHRvIHRoaXMgQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlIGFuZCB3aGljaCBjb250YWlucyBhCitub3RpY2UgcGxhY2VkIGJ5IEFwcGxlIGlkZW50aWZ5aW5nIHN1Y2ggcHJvZ3JhbSBvciB3b3JrIGFzICJPcmlnaW5hbAorQ29kZSIgYW5kIHN0YXRpbmcgdGhhdCBpdCBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFwcGxlIFB1YmxpYworU291cmNlIExpY2Vuc2UgdmVyc2lvbiAxLjEgKG9yIHN1YnNlcXVlbnQgdmVyc2lvbiB0aGVyZW9mKSwgYXMgaXQgbWF5CitiZSByZXZpc2VkIGZyb20gdGltZSB0byB0aW1lIGJ5IEFwcGxlICgiTGljZW5zZSIpLiAgQXMgdXNlZCBpbiB0aGlzCitMaWNlbnNlOgorCisxLjEgIkFmZmVjdGVkIE9yaWdpbmFsIENvZGUiIG1lYW5zIG9ubHkgdGhvc2Ugc3BlY2lmaWMgcG9ydGlvbnMgb2YKK09yaWdpbmFsIENvZGUgdGhhdCBhbGxlZ2VkbHkgaW5mcmluZ2UgdXBvbiBhbnkgcGFydHlgcyBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBhcmUgb3RoZXJ3aXNlIHRoZSBzdWJqZWN0IG9mIGEgY2xhaW0gb2YKK2luZnJpbmdlbWVudC4KKworMS4yICJBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMiIG1lYW46IChhKSBpbiB0aGUgY2FzZSB3aGVyZSBBcHBsZSBpcwordGhlIGdyYW50b3Igb2YgcmlnaHRzLCAoaSkgY2xhaW1zIG9mIHBhdGVudHMgdGhhdCBhcmUgbm93IG9yIGhlcmVhZnRlcgorYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIEFwcGxlIGFuZCAoaWkpIHRoYXQgY292ZXIgc3ViamVjdAorbWF0dGVyIGNvbnRhaW5lZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYnV0IG9ubHkgdG8gdGhlIGV4dGVudAorbmVjZXNzYXJ5IHRvIHVzZSwgcmVwcm9kdWNlIGFuZC9vciBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlCit3aXRob3V0IGluZnJpbmdlbWVudDsgYW5kIChiKSBpbiB0aGUgY2FzZSB3aGVyZSBZb3UgYXJlIHRoZSBncmFudG9yIG9mCityaWdodHMsIChpKSBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLAorb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gWW91IGFuZCAoaWkpIHRoYXQgY292ZXIgc3ViamVjdCBtYXR0ZXIgaW4gWW91cgorTW9kaWZpY2F0aW9ucywgdGFrZW4gYWxvbmUgb3IgaW4gY29tYmluYXRpb24gd2l0aCBPcmlnaW5hbCBDb2RlLgorCisxLjMgIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIHRoZQorY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkKK3Jlc3BlY3RpdmUgcG9ydGlvbnMgdGhlcmVvZi4KKworMS40ICJEZXBsb3kiIG1lYW5zIHRvIHVzZSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBvdGhlcgordGhhbiBmb3IgWW91ciBpbnRlcm5hbCByZXNlYXJjaCBhbmQgZGV2ZWxvcG1lbnQgKFImYW1wO0QpLCBhbmQgaW5jbHVkZXMKK3dpdGhvdXQgbGltaXRhdGlvbiwgYW55IGFuZCBhbGwgaW50ZXJuYWwgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZgorQ292ZXJlZCBDb2RlIHdpdGhpbiBZb3VyIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbiBleGNlcHQgZm9yIFImYW1wO0QgdXNlLAorYXMgd2VsbCBhcyBkaXJlY3Qgb3IgaW5kaXJlY3Qgc3VibGljZW5zaW5nIG9yIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkCitDb2RlIGJ5IFlvdSB0byBhbnkgdGhpcmQgcGFydHkgaW4gYW55IGZvcm0gb3IgbWFubmVyLgorCisxLjUgIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zCit0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS42ICJNb2RpZmljYXRpb25zIiBtZWFuIGFueSBhZGRpdGlvbiB0bywgZGVsZXRpb24gZnJvbSwgYW5kL29yIGNoYW5nZQordG8sIHRoZSBzdWJzdGFuY2UgYW5kL29yIHN0cnVjdHVyZSBvZiBDb3ZlcmVkIENvZGUuICBXaGVuIGNvZGUgaXMKK3JlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczogKGEpIGFueSBhZGRpdGlvbiB0bworb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlOworYW5kL29yIChiKSBhbnkgbmV3IGZpbGUgb3Igb3RoZXIgcmVwcmVzZW50YXRpb24gb2YgY29tcHV0ZXIgcHJvZ3JhbQorc3RhdGVtZW50cyB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIENvdmVyZWQgQ29kZS4KKworMS43ICJPcmlnaW5hbCBDb2RlIiBtZWFucyAoYSkgdGhlIFNvdXJjZSBDb2RlIG9mIGEgcHJvZ3JhbSBvciBvdGhlcgord29yayBhcyBvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZSwKK2luY2x1ZGluZyB0aGUgU291cmNlIENvZGUgb2YgYW55IHVwZGF0ZXMgb3IgdXBncmFkZXMgdG8gc3VjaCBwcm9ncmFtcworb3Igd29ya3MgbWFkZSBhdmFpbGFibGUgYnkgQXBwbGUgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgdGhhdCBoYXMgYmVlbgorZXhwcmVzc2x5IGlkZW50aWZpZWQgYnkgQXBwbGUgYXMgc3VjaCBpbiB0aGUgaGVhZGVyIGZpbGUocykgb2Ygc3VjaAord29yazsgYW5kIChiKSB0aGUgb2JqZWN0IGNvZGUgY29tcGlsZWQgZnJvbSBzdWNoIFNvdXJjZSBDb2RlIGFuZAorb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzEuOCAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBodW1hbiByZWFkYWJsZSBmb3JtIG9mIGEgcHJvZ3JhbSBvciBvdGhlcgord29yayB0aGF0IGlzIHN1aXRhYmxlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbAorbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywKK3NjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gZXhlY3V0YWJsZQorKG9iamVjdCBjb2RlKS4KKworMS45ICJZb3UiIG9yICJZb3VyIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcKK3JpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuICBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIG9yICJZb3VyIgoraW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIKK2NvbW1vbiBjb250cm9sIHdpdGgsIFlvdSwgd2hlcmUgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdAorb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwKK3doZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQKKyg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZgorc3VjaCBlbnRpdHkuCisKKzIuIFBlcm1pdHRlZCBVc2VzOyBDb25kaXRpb25zICZhbXA7IFJlc3RyaWN0aW9ucy4gIFN1YmplY3QgdG8gdGhlIHRlcm1zCithbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIEFwcGxlIGhlcmVieSBncmFudHMgWW91LCBlZmZlY3RpdmUgb24KK3RoZSBkYXRlIFlvdSBhY2NlcHQgdGhpcyBMaWNlbnNlIGFuZCBkb3dubG9hZCB0aGUgT3JpZ2luYWwgQ29kZSwgYQord29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tIGV4Y2x1c2l2ZSBsaWNlbnNlLCB0byB0aGUgZXh0ZW50IG9mCitBcHBsZWBzIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgY29weXJpZ2h0cyBjb3ZlcmluZyB0aGUgT3JpZ2luYWwKK0NvZGUsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKKzIuMSBZb3UgbWF5IHVzZSwgY29weSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIE9yaWdpbmFsIENvZGUsIHdpdGggb3IKK3dpdGhvdXQgTW9kaWZpY2F0aW9ucywgc29sZWx5IGZvciBZb3VyIGludGVybmFsIHJlc2VhcmNoIGFuZAorZGV2ZWxvcG1lbnQsIHByb3ZpZGVkIHRoYXQgWW91IG11c3QgaW4gZWFjaCBpbnN0YW5jZToKKworKGEpIHJldGFpbiBhbmQgcmVwcm9kdWNlIGluIGFsbCBjb3BpZXMgb2YgT3JpZ2luYWwgQ29kZSB0aGUgY29weXJpZ2h0CithbmQgb3RoZXIgcHJvcHJpZXRhcnkgbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMgb2YgQXBwbGUgYXMgdGhleSBhcHBlYXIKK2luIHRoZSBPcmlnaW5hbCBDb2RlLCBhbmQga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgaW4gdGhlIE9yaWdpbmFsIENvZGUKK3RoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlOworCisoYikgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiBTb3VyY2UgQ29kZSBvZgorQ292ZXJlZCBDb2RlIGFuZCBkb2N1bWVudGF0aW9uIFlvdSBkaXN0cmlidXRlLCBhbmQgWW91IG1heSBub3Qgb2ZmZXIKK29yIGltcG9zZSBhbnkgdGVybXMgb24gc3VjaCBTb3VyY2UgQ29kZSB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoaXMKK0xpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIsIGV4Y2VwdCBhcyBwZXJtaXR0ZWQgdW5kZXIKK1NlY3Rpb24gNjsgYW5kCisKKyhjKSBjb21wbGV0ZWx5IGFuZCBhY2N1cmF0ZWx5IGRvY3VtZW50IGFsbCBNb2RpZmljYXRpb25zIHRoYXQgeW91IGhhdmUKK21hZGUgYW5kIHRoZSBkYXRlIG9mIGVhY2ggc3VjaCBNb2RpZmljYXRpb24sIGRlc2lnbmF0ZSB0aGUgdmVyc2lvbiBvZgordGhlIE9yaWdpbmFsIENvZGUgeW91IHVzZWQsIHByb21pbmVudGx5IGluY2x1ZGUgYSBmaWxlIGNhcnJ5aW5nIHN1Y2gKK2luZm9ybWF0aW9uIHdpdGggdGhlIE1vZGlmaWNhdGlvbnMsIGFuZCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbgorRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUgb2YgYWxsIHN1Y2ggTW9kaWZpY2F0aW9ucy4KKworMi4yIFlvdSBtYXkgRGVwbG95IENvdmVyZWQgQ29kZSwgcHJvdmlkZWQgdGhhdCBZb3UgbXVzdCBpbiBlYWNoCisgIGluc3RhbmNlOgorCisoYSkgc2F0aXNmeSBhbGwgdGhlIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyLjEgd2l0aCByZXNwZWN0IHRvIHRoZQorU291cmNlIENvZGUgb2YgdGhlIENvdmVyZWQgQ29kZTsKKworKGIpIG1ha2UgYWxsIFlvdXIgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBwdWJsaWNseSBhdmFpbGFibGUgaW4gU291cmNlCitDb2RlIGZvcm0gdmlhIGVsZWN0cm9uaWMgZGlzdHJpYnV0aW9uIChlLmcuIGRvd25sb2FkIGZyb20gYSB3ZWIgc2l0ZSkKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHN1YmplY3QgdG8gdGhlIGxpY2Vuc2UgZ3JhbnRzIHNldAorZm9ydGggaW4gU2VjdGlvbiAzIGJlbG93LCBhbmQgYW55IGFkZGl0aW9uYWwgdGVybXMgWW91IG1heSBjaG9vc2UgdG8KK29mZmVyIHVuZGVyIFNlY3Rpb24gNi4gIFlvdSBtdXN0IGNvbnRpbnVlIHRvIG1ha2UgdGhlIFNvdXJjZSBDb2RlIG9mCitZb3VyIERlcGxveWVkIE1vZGlmaWNhdGlvbnMgYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIHlvdSBEZXBsb3kgdGhlCitDb3ZlcmVkIENvZGUgb3IgdHdlbHZlICgxMikgbW9udGhzIGZyb20gdGhlIGRhdGUgb2YgaW5pdGlhbAorRGVwbG95bWVudCwgd2hpY2hldmVyIGlzIGxvbmdlcjsKKworKGMpIGlmIFlvdSBEZXBsb3kgQ292ZXJlZCBDb2RlIGNvbnRhaW5pbmcgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IFlvdSwKK2luZm9ybSBvdGhlcnMgb2YgaG93IHRvIG9idGFpbiB0aG9zZSBNb2RpZmljYXRpb25zIGJ5IGZpbGxpbmcgb3V0IGFuZAorc3VibWl0dGluZyB0aGUgaW5mb3JtYXRpb24gZm91bmQgYXQKK2h0dHA6Ly93d3cuYXBwbGUuY29tL3B1YmxpY3NvdXJjZS9tb2RpZmljYXRpb25zLmh0bWwsIGlmIGF2YWlsYWJsZTsKK2FuZAorCisoZCkgaWYgWW91IERlcGxveSBDb3ZlcmVkIENvZGUgaW4gb2JqZWN0IGNvZGUsIGV4ZWN1dGFibGUgZm9ybSBvbmx5LAoraW5jbHVkZSBhIHByb21pbmVudCBub3RpY2UsIGluIHRoZSBjb2RlIGl0c2VsZiBhcyB3ZWxsIGFzIGluIHJlbGF0ZWQKK2RvY3VtZW50YXRpb24sIHN0YXRpbmcgdGhhdCBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzCithdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIGluZm9ybWF0aW9uIG9uIGhvdyBhbmQKK3doZXJlIHRvIG9idGFpbiBzdWNoIFNvdXJjZSBDb2RlLgorCiszLiBZb3VyIEdyYW50cy4gIEluIGNvbnNpZGVyYXRpb24gb2YsIGFuZCBhcyBhIGNvbmRpdGlvbiB0bywgdGhlCitsaWNlbnNlcyBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2U6CisKKyhhKSBZb3UgaGVyZWJ5IGdyYW50IHRvIEFwcGxlIGFuZCBhbGwgdGhpcmQgcGFydGllcyBhIG5vbi1leGNsdXNpdmUsCityb3lhbHR5LWZyZWUgbGljZW5zZSwgdW5kZXIgWW91ciBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIG90aGVyCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgWW91LCB0byB1c2UsCityZXByb2R1Y2UsIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgRGVwbG95IFlvdXIgTW9kaWZpY2F0aW9ucyBvZiB0aGUKK3NhbWUgc2NvcGUgYW5kIGV4dGVudCBhcyBBcHBsZWBzIGxpY2Vuc2VzIHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQgMi4yOworYW5kCisKKyhiKSBZb3UgaGVyZWJ5IGdyYW50IHRvIEFwcGxlIGFuZCBpdHMgc3Vic2lkaWFyaWVzIGEgbm9uLWV4Y2x1c2l2ZSwKK3dvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBwZXJwZXR1YWwgYW5kIGlycmV2b2NhYmxlIGxpY2Vuc2UsIHVuZGVyIFlvdXIKK0FwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvd25lZAorb3IgY29udHJvbGxlZCBieSBZb3UsIHRvIHVzZSwgcmVwcm9kdWNlLCBleGVjdXRlLCBjb21waWxlLCBkaXNwbGF5LAorcGVyZm9ybSwgbW9kaWZ5IG9yIGhhdmUgbW9kaWZpZWQgKGZvciBBcHBsZSBhbmQvb3IgaXRzIHN1YnNpZGlhcmllcyksCitzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIFlvdXIgTW9kaWZpY2F0aW9ucywgaW4gYW55IGZvcm0sIHRocm91Z2gKK211bHRpcGxlIHRpZXJzIG9mIGRpc3RyaWJ1dGlvbi4KKworNC4gTGFyZ2VyIFdvcmtzLiAgWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZAorQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kCitkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiAgSW4gZWFjaCBzdWNoCitpbnN0YW5jZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZQorZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YuCisKKzUuIExpbWl0YXRpb25zIG9uIFBhdGVudCBMaWNlbnNlLiAgRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4KK1NlY3Rpb24gMiwgbm8gb3RoZXIgcGF0ZW50IHJpZ2h0cywgZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieQorQXBwbGUgaGVyZWluLiAgTW9kaWZpY2F0aW9ucyBhbmQvb3IgTGFyZ2VyIFdvcmtzIG1heSByZXF1aXJlCithZGRpdGlvbmFsIHBhdGVudCBsaWNlbnNlcyBmcm9tIEFwcGxlIHdoaWNoIEFwcGxlIG1heSBncmFudCBpbiBpdHMKK3NvbGUgZGlzY3JldGlvbi4KKworNi4gQWRkaXRpb25hbCBUZXJtcy4gIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlCitmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vcgorb3RoZXIgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGUgc2NvcGUgb2YgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlaW4KKygiQWRkaXRpb25hbCBUZXJtcyIpIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZAorQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgYXMgWW91ciBzb2xlCityZXNwb25zaWJpbGl0eSwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgQXBwbGUuIFlvdSBtdXN0IG9idGFpbiB0aGUKK3JlY2lwaWVudGBzIGFncmVlbWVudCB0aGF0IGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMgYXJlIG9mZmVyZWQgYnkKK1lvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQgYW5kIGhvbGQgQXBwbGUKK2hhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0CitBcHBsZSBieSByZWFzb24gb2YgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcy4KKworNy4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuICBBcHBsZSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIEVhY2ggdmVyc2lvbiB3aWxsIGJlCitnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgT25jZSBPcmlnaW5hbCBDb2RlIGhhcyBiZWVuCitwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IGNvbnRpbnVlCit0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2UKK3N1Y2ggT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGlzCitMaWNlbnNlIHB1Ymxpc2hlZCBieSBBcHBsZS4gIE5vIG9uZSBvdGhlciB0aGFuIEFwcGxlIGhhcyB0aGUgcmlnaHQgdG8KK21vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzCitMaWNlbnNlLgorCis4LiBOTyBXQVJSQU5UWSBPUiBTVVBQT1JULiAgVGhlIE9yaWdpbmFsIENvZGUgbWF5IGNvbnRhaW4gaW4gd2hvbGUgb3IKK2luIHBhcnQgcHJlLXJlbGVhc2UsIHVudGVzdGVkLCBvciBub3QgZnVsbHkgdGVzdGVkIHdvcmtzLiAgVGhlCitPcmlnaW5hbCBDb2RlIG1heSBjb250YWluIGVycm9ycyB0aGF0IGNvdWxkIGNhdXNlIGZhaWx1cmVzIG9yIGxvc3Mgb2YKK2RhdGEsIGFuZCBtYXkgYmUgaW5jb21wbGV0ZSBvciBjb250YWluIGluYWNjdXJhY2llcy4gIFlvdSBleHByZXNzbHkKK2Fja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IHVzZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgb3IgYW55IHBvcnRpb24KK3RoZXJlb2YsIGlzIGF0IFlvdXIgc29sZSBhbmQgZW50aXJlIHJpc2suICBUSEUgT1JJR0lOQUwgQ09ERSBJUworUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSwgVVBHUkFERVMgT1IgU1VQUE9SVCBPRiBBTlkgS0lORAorQU5EIEFQUExFIEFORCBBUFBMRWBTIExJQ0VOU09SKFMpIChGT1IgVEhFIFBVUlBPU0VTIE9GIFNFQ1RJT05TIDggQU5ECis5LCBBUFBMRSBBTkQgQVBQTEVgUyBMSUNFTlNPUihTKSBBUkUgQ09MTEVDVElWRUxZIFJFRkVSUkVEIFRPIEFTCisiQVBQTEUiKSBFWFBSRVNTTFkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgQU5EL09SIENPTkRJVElPTlMsIEVYUFJFU1MKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCitBTkQvT1IgQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgU0FUSVNGQUNUT1JZIFFVQUxJVFkgQU5ECitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZCitSSUdIVFMuICBBUFBMRSBET0VTIE5PVCBXQVJSQU5UIFRIQVQgVEhFIEZVTkNUSU9OUyBDT05UQUlORUQgSU4gVEhFCitPUklHSU5BTCBDT0RFIFdJTEwgTUVFVCBZT1VSIFJFUVVJUkVNRU5UUywgT1IgVEhBVCBUSEUgT1BFUkFUSU9OIE9GCitUSEUgT1JJR0lOQUwgQ09ERSBXSUxMIEJFIFVOSU5URVJSVVBURUQgT1IgRVJST1ItIEZSRUUsIE9SIFRIQVQKK0RFRkVDVFMgSU4gVEhFIE9SSUdJTkFMIENPREUgV0lMTCBCRSBDT1JSRUNURUQuICBOTyBPUkFMIE9SIFdSSVRURU4KK0lORk9STUFUSU9OIE9SIEFEVklDRSBHSVZFTiBCWSBBUFBMRSBPUiBBTiBBUFBMRSBBVVRIT1JJWkVECitSRVBSRVNFTlRBVElWRSBTSEFMTCBDUkVBVEUgQSBXQVJSQU5UWSBPUiBJTiBBTlkgV0FZIElOQ1JFQVNFIFRIRQorU0NPUEUgT0YgVEhJUyBXQVJSQU5UWS4gIFlvdSBhY2tub3dsZWRnZSB0aGF0IHRoZSBPcmlnaW5hbCBDb2RlIGlzIG5vdAoraW50ZW5kZWQgZm9yIHVzZSBpbiB0aGUgb3BlcmF0aW9uIG9mIG51Y2xlYXIgZmFjaWxpdGllcywgYWlyY3JhZnQKK25hdmlnYXRpb24sIGNvbW11bmljYXRpb24gc3lzdGVtcywgb3IgYWlyIHRyYWZmaWMgY29udHJvbCBtYWNoaW5lcyBpbgord2hpY2ggY2FzZSB0aGUgZmFpbHVyZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSBjb3VsZCBsZWFkIHRvIGRlYXRoLAorcGVyc29uYWwgaW5qdXJ5LCBvciBzZXZlcmUgcGh5c2ljYWwgb3IgZW52aXJvbm1lbnRhbCBkYW1hZ2UuCisKKzkuIExpYWJpbGl0eS4KKworOS4xIEluZnJpbmdlbWVudC4gIElmIGFueSBwb3J0aW9uIG9mLCBvciBmdW5jdGlvbmFsaXR5IGltcGxlbWVudGVkIGJ5LAordGhlIE9yaWdpbmFsIENvZGUgYmVjb21lcyB0aGUgc3ViamVjdCBvZiBhIGNsYWltIG9mIGluZnJpbmdlbWVudCwKK0FwcGxlIG1heSwgYXQgaXRzIG9wdGlvbjogKGEpIGF0dGVtcHQgdG8gcHJvY3VyZSB0aGUgcmlnaHRzIG5lY2Vzc2FyeQorZm9yIEFwcGxlIGFuZCBZb3UgdG8gY29udGludWUgdXNpbmcgdGhlIEFmZmVjdGVkIE9yaWdpbmFsIENvZGU7IChiKQorbW9kaWZ5IHRoZSBBZmZlY3RlZCBPcmlnaW5hbCBDb2RlIHNvIHRoYXQgaXQgaXMgbm8gbG9uZ2VyIGluZnJpbmdpbmc7CitvciAoYykgc3VzcGVuZCBZb3VyIHJpZ2h0cyB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBzdWJsaWNlbnNlIGFuZAorZGlzdHJpYnV0ZSB0aGUgQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZSB1bnRpbCBhIGZpbmFsIGRldGVybWluYXRpb24gb2YKK3RoZSBjbGFpbSBpcyBtYWRlIGJ5IGEgY291cnQgb3IgZ292ZXJubWVudGFsIGFkbWluaXN0cmF0aXZlIGFnZW5jeSBvZgorY29tcGV0ZW50IGp1cmlzZGljdGlvbiBhbmQgQXBwbGUgbGlmdHMgdGhlIHN1c3BlbnNpb24gYXMgc2V0IGZvcnRoCitiZWxvdy4gIFN1Y2ggc3VzcGVuc2lvbiBvZiByaWdodHMgd2lsbCBiZSBlZmZlY3RpdmUgaW1tZWRpYXRlbHkgdXBvbgorQXBwbGVgcyBwb3N0aW5nIG9mIGEgbm90aWNlIHRvIHN1Y2ggZWZmZWN0IG9uIHRoZSBBcHBsZSB3ZWIgc2l0ZSB0aGF0CitpcyB1c2VkIGZvciBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIExpY2Vuc2UuICBVcG9uIHN1Y2ggZmluYWwKK2RldGVybWluYXRpb24gYmVpbmcgbWFkZSwgaWYgQXBwbGUgaXMgbGVnYWxseSBhYmxlLCB3aXRob3V0IHRoZQorcGF5bWVudCBvZiBhIGZlZSBvciByb3lhbHR5LCB0byByZXN1bWUgdXNlLCByZXByb2R1Y3Rpb24sCittb2RpZmljYXRpb24sIHN1YmxpY2Vuc2luZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBBZmZlY3RlZCBPcmlnaW5hbAorQ29kZSwgQXBwbGUgd2lsbCBsaWZ0IHRoZSBzdXNwZW5zaW9uIG9mIHJpZ2h0cyB0byB0aGUgQWZmZWN0ZWQKK09yaWdpbmFsIENvZGUgYnkgcG9zdGluZyBhIG5vdGljZSB0byBzdWNoIGVmZmVjdCBvbiB0aGUgQXBwbGUgd2ViIHNpdGUKK3RoYXQgaXMgdXNlZCBmb3IgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBMaWNlbnNlLiAgSWYgQXBwbGUgc3VzcGVuZHMKK1lvdXIgcmlnaHRzIHRvIEFmZmVjdGVkIE9yaWdpbmFsIENvZGUsIG5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsCitiZSBjb25zdHJ1ZWQgdG8gcmVzdHJpY3QgWW91LCBhdCBZb3VyIG9wdGlvbiBhbmQgc3ViamVjdCB0byBhcHBsaWNhYmxlCitsYXcsIGZyb20gcmVwbGFjaW5nIHRoZSBBZmZlY3RlZCBPcmlnaW5hbCBDb2RlIHdpdGggbm9uLWluZnJpbmdpbmcKK2NvZGUgb3IgaW5kZXBlbmRlbnRseSBuZWdvdGlhdGluZyBmb3IgbmVjZXNzYXJ5IHJpZ2h0cyBmcm9tIHN1Y2ggdGhpcmQKK3BhcnR5LgorCis5LjIgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuICBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIFNIQUxMIEFQUExFIEJFCitMSUFCTEUgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKK0FSSVNJTkcgT1VUIE9GIE9SIFJFTEFUSU5HIFRPIFRISVMgTElDRU5TRSBPUiBZT1VSIFVTRSBPUiBJTkFCSUxJVFkgVE8KK1VTRSBUSEUgT1JJR0lOQUwgQ09ERSwgT1IgQU5ZIFBPUlRJT04gVEhFUkVPRiwgV0hFVEhFUiBVTkRFUiBBIFRIRU9SWQorT0YgQ09OVFJBQ1QsIFdBUlJBTlRZLCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFBST0RVQ1RTIExJQUJJTElUWQorT1IgT1RIRVJXSVNFLCBFVkVOIElGIEFQUExFIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRVMgQU5EIE5PVFdJVEhTVEFORElORyBUSEUgRkFJTFVSRSBPRiBFU1NFTlRJQUwgUFVSUE9TRSBPRgorQU5ZIFJFTUVEWS4gIEluIG5vIGV2ZW50IHNoYWxsIEFwcGxlYHMgdG90YWwgbGlhYmlsaXR5IHRvIFlvdSBmb3IgYWxsCitkYW1hZ2VzIHVuZGVyIHRoaXMgTGljZW5zZSBleGNlZWQgdGhlIGFtb3VudCBvZiBmaWZ0eSBkb2xsYXJzCisoJDUwLjAwKS4KKworMTAuIFRyYWRlbWFya3MuICBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlCit0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzICJBcHBsZSIsICJBcHBsZSBDb21wdXRlciIsICJNYWMgT1MgWCIsICJNYWMKK09TIFggU2VydmVyIiBvciBhbnkgb3RoZXIgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBiZWxvbmdpbmcgdG8gQXBwbGUKKyhjb2xsZWN0aXZlbHkgIkFwcGxlIE1hcmtzIikgYW5kIG5vIEFwcGxlIE1hcmtzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2UKK29yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlIG90aGVyIHRoYW4gYXMKK3Blcm1pdHRlZCBieSBhbmQgaW4gc3RyaWN0IGNvbXBsaWFuY2UgYXQgYWxsIHRpbWVzIHdpdGggQXBwbGVgcyB0aGlyZAorcGFydHkgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMgd2hpY2ggYXJlIHBvc3RlZCBhdAoraHR0cDovL3d3dy5hcHBsZS5jb20vbGVnYWwvZ3VpZGVsaW5lc2ZvcjNyZHBhcnRpZXMuaHRtbC4KKworMTEuIE93bmVyc2hpcC4gIEFwcGxlIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0bwordGhlIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgb3Igb24gYmVoYWxmIG9mIEFwcGxlCisoIkFwcGxlIE1vZGlmaWNhdGlvbnMiKSwgYW5kIHN1Y2ggQXBwbGUgTW9kaWZpY2F0aW9ucyB3aWxsIG5vdCBiZQorYXV0b21hdGljYWxseSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIEFwcGxlIG1heSwgYXQgaXRzIHNvbGUKK2Rpc2NyZXRpb24sIGNob29zZSB0byBsaWNlbnNlIHN1Y2ggQXBwbGUgTW9kaWZpY2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlLCBvciBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlIG9yCittYXkgY2hvb3NlIG5vdCB0byBsaWNlbnNlIHRoZW0gYXQgYWxsLiAgQXBwbGVgcyBkZXZlbG9wbWVudCwgdXNlLAorcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24sIHN1YmxpY2Vuc2luZyBhbmQgZGlzdHJpYnV0aW9uIG9mIENvdmVyZWQKK0NvZGUgd2lsbCBub3QgYmUgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuCisKKzEyLiBUZXJtaW5hdGlvbi4KKworMTIuMSBUZXJtaW5hdGlvbi4gIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsCisgICB0ZXJtaW5hdGU6CisKKyhhKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gQXBwbGUgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGgKK2FueSB0ZXJtKHMpIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMAorZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIGJyZWFjaDsgKGIpIGltbWVkaWF0ZWx5IGluIHRoZSBldmVudCBvZgordGhlIGNpcmN1bXN0YW5jZXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMTMuNShiKTsgb3IgKGMpIGF1dG9tYXRpY2FsbHkKK3dpdGhvdXQgbm90aWNlIGZyb20gQXBwbGUgaWYgWW91LCBhdCBhbnkgdGltZSBkdXJpbmcgdGhlIHRlcm0gb2YgdGhpcworTGljZW5zZSwgY29tbWVuY2UgYW4gYWN0aW9uIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50IGFnYWluc3QgQXBwbGUuCisKKzEyLjIgRWZmZWN0IG9mIFRlcm1pbmF0aW9uLiAgVXBvbiB0ZXJtaW5hdGlvbiwgWW91IGFncmVlIHRvCitpbW1lZGlhdGVseSBzdG9wIGFueSBmdXJ0aGVyIHVzZSwgcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24sCitzdWJsaWNlbnNpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGFuZCB0byBkZXN0cm95IGFsbAorY29waWVzIG9mIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuCitBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBoYXZlIGJlZW4gcHJvcGVybHkgZ3JhbnRlZAorcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBzaG91bGQgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlCit0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZAordG8gU2VjdGlvbnMgMywgNSwgOCwgOSwgMTAsIDExLCAxMi4yIGFuZCAxMy4gIE5laXRoZXIgcGFydHkgd2lsbCBiZQorbGlhYmxlIHRvIHRoZSBvdGhlciBmb3IgY29tcGVuc2F0aW9uLCBpbmRlbW5pdHkgb3IgZGFtYWdlcyBvZiBhbnkgc29ydAorc29sZWx5IGFzIGEgcmVzdWx0IG9mIHRlcm1pbmF0aW5nIHRoaXMgTGljZW5zZSBpbiBhY2NvcmRhbmNlIHdpdGggaXRzCit0ZXJtcywgYW5kIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIGJlIHdpdGhvdXQgcHJlanVkaWNlIHRvCithbnkgb3RoZXIgcmlnaHQgb3IgcmVtZWR5IG9mIGVpdGhlciBwYXJ0eS4KKworMTMuICBNaXNjZWxsYW5lb3VzLgorCisxMy4xIEdvdmVybm1lbnQgRW5kIFVzZXJzLiAgVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0iIGFzCitkZWZpbmVkIGluIEZBUiAyLjEwMS4gIEdvdmVybm1lbnQgc29mdHdhcmUgYW5kIHRlY2huaWNhbCBkYXRhIHJpZ2h0cworaW4gdGhlIENvdmVyZWQgQ29kZSBpbmNsdWRlIG9ubHkgdGhvc2UgcmlnaHRzIGN1c3RvbWFyaWx5IHByb3ZpZGVkIHRvCit0aGUgcHVibGljIGFzIGRlZmluZWQgaW4gdGhpcyBMaWNlbnNlLiBUaGlzIGN1c3RvbWFyeSBjb21tZXJjaWFsCitsaWNlbnNlIGluIHRlY2huaWNhbCBkYXRhIGFuZCBzb2Z0d2FyZSBpcyBwcm92aWRlZCBpbiBhY2NvcmRhbmNlIHdpdGgKK0ZBUiAxMi4yMTEgKFRlY2huaWNhbCBEYXRhKSBhbmQgMTIuMjEyIChDb21wdXRlciBTb2Z0d2FyZSkgYW5kLCBmb3IKK0RlcGFydG1lbnQgb2YgRGVmZW5zZSBwdXJjaGFzZXMsIERGQVIgMjUyLjIyNy03MDE1IChUZWNobmljYWwgRGF0YSAtLQorQ29tbWVyY2lhbCBJdGVtcykgYW5kIDIyNy43MjAyLTMgKFJpZ2h0cyBpbiBDb21tZXJjaWFsIENvbXB1dGVyCitTb2Z0d2FyZSBvciBDb21wdXRlciBTb2Z0d2FyZSBEb2N1bWVudGF0aW9uKS4gIEFjY29yZGluZ2x5LCBhbGwgVS5TLgorR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQKK2ZvcnRoIGhlcmVpbi4KKworMTMuMiBSZWxhdGlvbnNoaXAgb2YgUGFydGllcy4gIFRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMKK2NyZWF0aW5nIGFuIGFnZW5jeSwgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUgb3IgYW55IG90aGVyIGZvcm0gb2YKK2xlZ2FsIGFzc29jaWF0aW9uIGJldHdlZW4gWW91IGFuZCBBcHBsZSwgYW5kIFlvdSB3aWxsIG5vdCByZXByZXNlbnQgdG8KK3RoZSBjb250cmFyeSwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBhcHBlYXJhbmNlIG9yCitvdGhlcndpc2UuCisKKzEzLjMgSW5kZXBlbmRlbnQgRGV2ZWxvcG1lbnQuICBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSB3aWxsIGltcGFpcgorQXBwbGVgcyByaWdodCB0byBhY3F1aXJlLCBsaWNlbnNlLCBkZXZlbG9wLCBoYXZlIG90aGVycyBkZXZlbG9wIGZvcgoraXQsIG1hcmtldCBhbmQvb3IgZGlzdHJpYnV0ZSB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgcGVyZm9ybSB0aGUKK3NhbWUgb3Igc2ltaWxhciBmdW5jdGlvbnMgYXMsIG9yIG90aGVyd2lzZSBjb21wZXRlIHdpdGgsCitNb2RpZmljYXRpb25zLCBMYXJnZXIgV29ya3MsIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBZb3UgbWF5CitkZXZlbG9wLCBwcm9kdWNlLCBtYXJrZXQgb3IgZGlzdHJpYnV0ZS4KKworMTMuNCBXYWl2ZXI7IENvbnN0cnVjdGlvbi4gIEZhaWx1cmUgYnkgQXBwbGUgdG8gZW5mb3JjZSBhbnkgcHJvdmlzaW9uCitvZiB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgZGVlbWVkIGEgd2FpdmVyIG9mIGZ1dHVyZSBlbmZvcmNlbWVudCBvZgordGhhdCBvciBhbnkgb3RoZXIgcHJvdmlzaW9uLiAgQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzCit0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyCit3aWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKzEzLjUgU2V2ZXJhYmlsaXR5LiAgKGEpIElmIGZvciBhbnkgcmVhc29uIGEgY291cnQgb2YgY29tcGV0ZW50CitqdXJpc2RpY3Rpb24gZmluZHMgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIG9yIHBvcnRpb24gdGhlcmVvZiwKK3RvIGJlIHVuZW5mb3JjZWFibGUsIHRoYXQgcHJvdmlzaW9uIG9mIHRoZSBMaWNlbnNlIHdpbGwgYmUgZW5mb3JjZWQgdG8KK3RoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXNzaWJsZSBzbyBhcyB0byBlZmZlY3QgdGhlIGVjb25vbWljIGJlbmVmaXRzCithbmQgaW50ZW50IG9mIHRoZSBwYXJ0aWVzLCBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGlzIExpY2Vuc2Ugd2lsbAorY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0LiAgKGIpIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLAoraWYgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIG9yIHJlc3RyaWN0cyBZb3UgZnJvbSBmdWxseSBhbmQvb3IKK3NwZWNpZmljYWxseSBjb21wbHlpbmcgd2l0aCBTZWN0aW9ucyAyIGFuZC9vciAzIG9yIHByZXZlbnRzIHRoZQorZW5mb3JjZWFiaWxpdHkgb2YgZWl0aGVyIG9mIHRob3NlIFNlY3Rpb25zLCB0aGlzIExpY2Vuc2Ugd2lsbAoraW1tZWRpYXRlbHkgdGVybWluYXRlIGFuZCBZb3UgbXVzdCBpbW1lZGlhdGVseSBkaXNjb250aW51ZSBhbnkgdXNlIG9mCit0aGUgQ292ZXJlZCBDb2RlIGFuZCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgaXQgdGhhdCBhcmUgaW4geW91cgorcG9zc2Vzc2lvbiBvciBjb250cm9sLgorCisxMy42IERpc3B1dGUgUmVzb2x1dGlvbi4gIEFueSBsaXRpZ2F0aW9uIG9yIG90aGVyIGRpc3B1dGUgcmVzb2x1dGlvbgorYmV0d2VlbiBZb3UgYW5kIEFwcGxlIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCB0YWtlIHBsYWNlIGluIHRoZQorTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgYW5kIFlvdSBhbmQgQXBwbGUgaGVyZWJ5IGNvbnNlbnQgdG8KK3RoZSBwZXJzb25hbCBqdXJpc2RpY3Rpb24gb2YsIGFuZCB2ZW51ZSBpbiwgdGhlIHN0YXRlIGFuZCBmZWRlcmFsCitjb3VydHMgd2l0aGluIHRoYXQgRGlzdHJpY3Qgd2l0aCByZXNwZWN0IHRvIHRoaXMgTGljZW5zZS4gVGhlCithcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZQorSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4KKworMTMuNyBFbnRpcmUgQWdyZWVtZW50OyBHb3Zlcm5pbmcgTGF3LiAgVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZQorZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdAorbWF0dGVyIGhlcmVvZi4gIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1VuaXRlZCBTdGF0ZXMgYW5kIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhLCBleGNlcHQgdGhhdCBib2R5IG9mCitDYWxpZm9ybmlhIGxhdyBjb25jZXJuaW5nIGNvbmZsaWN0cyBvZiBsYXcuCisKK1doZXJlIFlvdSBhcmUgbG9jYXRlZCBpbiB0aGUgcHJvdmluY2Ugb2YgUXVlYmVjLCBDYW5hZGEsIHRoZSBmb2xsb3dpbmcKK2NsYXVzZSBhcHBsaWVzOiBUaGUgcGFydGllcyBoZXJlYnkgY29uZmlybSB0aGF0IHRoZXkgaGF2ZSByZXF1ZXN0ZWQKK3RoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbGwgcmVsYXRlZCBkb2N1bWVudHMgYmUgZHJhZnRlZCBpbiBFbmdsaXNoLiBMZXMKK3BhcnRpZXMgb250IGV4aWdlIHF1ZSBsZSBwcmVzZW50IGNvbnRyYXQgZXQgdG91cyBsZXMgZG9jdW1lbnRzCitjb25uZXhlcyBzb2llbnQgcmVkaWdlcyBlbiBhbmdsYWlzLgorCitFWEhJQklUIEEuCisKKyJQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMCBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIFJpZ2h0cworUmVzZXJ2ZWQuICBUaGlzIGZpbGUgY29udGFpbnMgT3JpZ2luYWwgQ29kZSBhbmQvb3IgTW9kaWZpY2F0aW9ucyBvZgorT3JpZ2luYWwgQ29kZSBhcyBkZWZpbmVkIGluIGFuZCB0aGF0IGFyZSBzdWJqZWN0IHRvIHRoZSBBcHBsZSBQdWJsaWMKK1NvdXJjZSBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKK2V4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuICBQbGVhc2Ugb2J0YWluIGEgY29weSBvZiB0aGUKK0xpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcHBsZS5jb20vcHVibGljc291cmNlIGFuZCByZWFkIGl0IGJlZm9yZSB1c2luZwordGhpcyBmaWxlLgorCitUaGUgT3JpZ2luYWwgQ29kZSBhbmQgYWxsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGFyZQorZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSCitFWFBSRVNTIE9SIElNUExJRUQsIEFORCBBUFBMRSBIRVJFQlkgRElTQ0xBSU1TIEFMTCBTVUNIIFdBUlJBTlRJRVMsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tIElORlJJTkdFTUVOVC4gIFBsZWFzZSBzZWUgdGhlCitMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTEuMiBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBTTC0xLjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThlMzUzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBTTC0xLjIKQEAgLTAsMCArMSwxMDUgQEAKKworQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlIFZlci4gMS4yCisKKzEuIEdlbmVyYWw7IERlZmluaXRpb25zLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBtYWtlcyBwdWJsaWNseSBhdmFpbGFibGUgYW5kIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSBBcHBsZSBpZGVudGlmeWluZyBzdWNoIHByb2dyYW0gb3Igd29yayBhcyAiT3JpZ2luYWwgQ29kZSIgYW5kIHN0YXRpbmcgdGhhdCBpdCBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFwcGxlIFB1YmxpYyBTb3VyY2UgTGljZW5zZSB2ZXJzaW9uIDEuMiAob3Igc3Vic2VxdWVudCB2ZXJzaW9uIHRoZXJlb2YpICgiTGljZW5zZSIpLiBBcyB1c2VkIGluIHRoaXMgTGljZW5zZToKKworMS4xICJBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMiIG1lYW46IChhKSBpbiB0aGUgY2FzZSB3aGVyZSBBcHBsZSBpcyB0aGUgZ3JhbnRvciBvZiByaWdodHMsIChpKSBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBBcHBsZSBhbmQgKGlpKSB0aGF0IGNvdmVyIHN1YmplY3QgbWF0dGVyIGNvbnRhaW5lZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYnV0IG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gdXNlLCByZXByb2R1Y2UgYW5kL29yIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgd2l0aG91dCBpbmZyaW5nZW1lbnQ7IGFuZCAoYikgaW4gdGhlIGNhc2Ugd2hlcmUgWW91IGFyZSB0aGUgZ3JhbnRvciBvZiByaWdodHMsIChpKSBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBZb3UgYW5kIChpaSkgdGhhdCBjb3ZlciBzdWJqZWN0IG1hdHRlciBpbiBZb3VyIE1vZGlmaWNhdGlvbnMsIHRha2VuIGFsb25lIG9yIGluIGNvbWJpbmF0aW9uIHdpdGggT3JpZ2luYWwgQ29kZS4KKworMS4yICJDb250cmlidXRvciIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisxLjMgIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIHRoZSBjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueSByZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuNCAiRGVwbG95IiBtZWFucyB0byB1c2UsIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgb3RoZXIgdGhhbiBmb3IgWW91ciBpbnRlcm5hbCByZXNlYXJjaCBhbmQgZGV2ZWxvcG1lbnQgKFImYW1wO0QpIGFuZC9vciBQZXJzb25hbCBVc2UsIGFuZCBpbmNsdWRlcyB3aXRob3V0IGxpbWl0YXRpb24sIGFueSBhbmQgYWxsIGludGVybmFsIHVzZSBvciBkaXN0cmlidXRpb24gb2YgQ292ZXJlZCBDb2RlIHdpdGhpbiBZb3VyIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbiBleGNlcHQgZm9yIFImYW1wO0QgdXNlIGFuZC9vciBQZXJzb25hbCBVc2UsIGFzIHdlbGwgYXMgZGlyZWN0IG9yIGluZGlyZWN0IHN1YmxpY2Vuc2luZyBvciBkaXN0cmlidXRpb24gb2YgQ292ZXJlZCBDb2RlIGJ5IFlvdSB0byBhbnkgdGhpcmQgcGFydHkgaW4gYW55IGZvcm0gb3IgbWFubmVyLgorCisxLjUgIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjYgIk1vZGlmaWNhdGlvbnMiIG1lYW4gYW55IGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tLCBhbmQvb3IgY2hhbmdlIHRvLCB0aGUgc3Vic3RhbmNlIGFuZC9vciBzdHJ1Y3R1cmUgb2YgdGhlIE9yaWdpbmFsIENvZGUsIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLCB0aGUgY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkgcmVzcGVjdGl2ZSBwb3J0aW9ucyB0aGVyZW9mLiBXaGVuIGNvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOiAoYSkgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIENvdmVyZWQgQ29kZTsgYW5kL29yIChiKSBhbnkgbmV3IGZpbGUgb3Igb3RoZXIgcmVwcmVzZW50YXRpb24gb2YgY29tcHV0ZXIgcHJvZ3JhbSBzdGF0ZW1lbnRzIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgQ292ZXJlZCBDb2RlLgorCisxLjcgIk9yaWdpbmFsIENvZGUiIG1lYW5zIChhKSB0aGUgU291cmNlIENvZGUgb2YgYSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgYXMgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB0aGUgU291cmNlIENvZGUgb2YgYW55IHVwZGF0ZXMgb3IgdXBncmFkZXMgdG8gc3VjaCBwcm9ncmFtcyBvciB3b3JrcyBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB0aGF0IGhhcyBiZWVuIGV4cHJlc3NseSBpZGVudGlmaWVkIGJ5IEFwcGxlIGFzIHN1Y2ggaW4gdGhlIGhlYWRlciBmaWxlKHMpIG9mIHN1Y2ggd29yazsgYW5kIChiKSB0aGUgb2JqZWN0IGNvZGUgY29tcGlsZWQgZnJvbSBzdWNoIFNvdXJjZSBDb2RlIGFuZCBvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZS4KKworMS44ICJQZXJzb25hbCBVc2UiIG1lYW5zIHVzZSBvZiBDb3ZlcmVkIENvZGUgYnkgYW4gaW5kaXZpZHVhbCBzb2xlbHkgZm9yIGhpcyBvciBoZXIgcGVyc29uYWwsIHByaXZhdGUgYW5kIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzLiBBbiBpbmRpdmlkdWFsYHMgdXNlIG9mIENvdmVyZWQgQ29kZSBpbiBoaXMgb3IgaGVyIGNhcGFjaXR5IGFzIGFuIG9mZmljZXIsIGVtcGxveWVlLCBtZW1iZXIsIGluZGVwZW5kZW50IGNvbnRyYWN0b3Igb3IgYWdlbnQgb2YgYSBjb3Jwb3JhdGlvbiwgYnVzaW5lc3Mgb3Igb3JnYW5pemF0aW9uIChjb21tZXJjaWFsIG9yIG5vbi1jb21tZXJjaWFsKSBkb2VzIG5vdCBxdWFsaWZ5IGFzIFBlcnNvbmFsIFVzZS4KKworMS45ICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIGh1bWFuIHJlYWRhYmxlIGZvcm0gb2YgYSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgdGhhdCBpcyBzdWl0YWJsZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBleGVjdXRhYmxlIChvYmplY3QgY29kZSkuCisKKzEuMTAgIllvdSIgb3IgIllvdXIiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIG9yICJZb3VyIiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoLCBZb3UsIHdoZXJlICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIFBlcm1pdHRlZCBVc2VzOyBDb25kaXRpb25zICZhbXA7IFJlc3RyaWN0aW9ucy5TdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIEFwcGxlIGhlcmVieSBncmFudHMgWW91LCBlZmZlY3RpdmUgb24gdGhlIGRhdGUgWW91IGFjY2VwdCB0aGlzIExpY2Vuc2UgYW5kIGRvd25sb2FkIHRoZSBPcmlnaW5hbCBDb2RlLCBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCB0byB0aGUgZXh0ZW50IG9mIEFwcGxlYHMgQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIGFuZCBjb3B5cmlnaHRzIGNvdmVyaW5nIHRoZSBPcmlnaW5hbCBDb2RlLCB0byBkbyB0aGUgZm9sbG93aW5nOgorCisyLjEgWW91IG1heSB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIE9yaWdpbmFsIENvZGUsIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBzb2xlbHkgZm9yIFlvdXIgaW50ZXJuYWwgcmVzZWFyY2ggYW5kIGRldmVsb3BtZW50IGFuZC9vciBQZXJzb25hbCBVc2UsIHByb3ZpZGVkIHRoYXQgaW4gZWFjaCBpbnN0YW5jZToKKworKGEpIFlvdSBtdXN0IHJldGFpbiBhbmQgcmVwcm9kdWNlIGluIGFsbCBjb3BpZXMgb2YgT3JpZ2luYWwgQ29kZSB0aGUgY29weXJpZ2h0IGFuZCBvdGhlciBwcm9wcmlldGFyeSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycyBvZiBBcHBsZSBhcyB0aGV5IGFwcGVhciBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYW5kIGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIGluIHRoZSBPcmlnaW5hbCBDb2RlIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlOyBhbmQKKworKGIpIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgU291cmNlIENvZGUgb2YgQ292ZXJlZCBDb2RlIGFuZCBkb2N1bWVudGF0aW9uIFlvdSBkaXN0cmlidXRlLCBhbmQgWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBzdWNoIFNvdXJjZSBDb2RlIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLCBleGNlcHQgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNi4KKworMi4yIFlvdSBtYXkgdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSBhbmQgRGVwbG95IENvdmVyZWQgQ29kZSwgcHJvdmlkZWQgdGhhdCBpbiBlYWNoIGluc3RhbmNlOgorCisoYSkgWW91IG11c3Qgc2F0aXNmeSBhbGwgdGhlIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyLjEgd2l0aCByZXNwZWN0IHRvIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlOworCisoYikgWW91IG11c3QgZHVwbGljYXRlLCB0byB0aGUgZXh0ZW50IGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QsIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUgb2YgYWxsIFlvdXIgTW9kaWZpY2F0aW9ucywgYW5kIGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlOworCisoYykgWW91IG11c3QgbWFrZSBTb3VyY2UgQ29kZSBvZiBhbGwgWW91ciBEZXBsb3llZCBNb2RpZmljYXRpb25zIHB1YmxpY2x5IGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGxpY2Vuc2UgZ3JhbnRzIHNldCBmb3J0aCBpbiBTZWN0aW9uIDMgYmVsb3csIGZvciBhcyBsb25nIGFzIHlvdSBEZXBsb3kgdGhlIENvdmVyZWQgQ29kZSBvciB0d2VsdmUgKDEyKSBtb250aHMgZnJvbSB0aGUgZGF0ZSBvZiBpbml0aWFsIERlcGxveW1lbnQsIHdoaWNoZXZlciBpcyBsb25nZXIuIFlvdSBzaG91bGQgcHJlZmVyYWJseSBkaXN0cmlidXRlIHRoZSBTb3VyY2UgQ29kZSBvZiBZb3VyIERlcGxveWVkIE1vZGlmaWNhdGlvbnMgZWxlY3Ryb25pY2FsbHkgKGUuZy4gZG93bmxvYWQgZnJvbSBhIHdlYiBzaXRlKTsgYW5kCisKKyhkKSBpZiBZb3UgRGVwbG95IENvdmVyZWQgQ29kZSBpbiBvYmplY3QgY29kZSwgZXhlY3V0YWJsZSBmb3JtIG9ubHksIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgbm90aWNlLCBpbiB0aGUgY29kZSBpdHNlbGYgYXMgd2VsbCBhcyBpbiByZWxhdGVkIGRvY3VtZW50YXRpb24sIHN0YXRpbmcgdGhhdCBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggaW5mb3JtYXRpb24gb24gaG93IGFuZCB3aGVyZSB0byBvYnRhaW4gc3VjaCBTb3VyY2UgQ29kZS4KKworMi4zIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgYWx0aG91Z2ggQXBwbGUgYW5kIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byB0aGVpciByZXNwZWN0aXZlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgQXBwbGUgb3IgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIENvdmVyZWQgQ29kZSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gQXBwbGUgYW5kIGVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW0gYW55IGxpYWJpbGl0eSB0byBZb3UgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBZb3UgaGVyZWJ5IGFzc3VtZSBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgWW91IHRvIGRpc3RyaWJ1dGUgdGhlIENvdmVyZWQgQ29kZSwgaXQgaXMgWW91ciByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuIFlvdXIgR3JhbnRzLiBJbiBjb25zaWRlcmF0aW9uIG9mLCBhbmQgYXMgYSBjb25kaXRpb24gdG8sIHRoZSBsaWNlbnNlcyBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2U6CisKKyhhKSBZb3UgaGVyZWJ5IGdyYW50IHRvIEFwcGxlIGFuZCBhbGwgdGhpcmQgcGFydGllcyBhIG5vbi1leGNsdXNpdmUsIHJveWFsdHktZnJlZSBsaWNlbnNlLCB1bmRlciBZb3VyIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQpIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgWW91LCB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zIG9mIHRoZSBzYW1lIHNjb3BlIGFuZCBleHRlbnQgYXMgQXBwbGVgcyBsaWNlbnNlcyB1bmRlciBTZWN0aW9ucyAyLjEgYW5kIDIuMjsgYW5kCisKKyhiKSBZb3UgaGVyZWJ5IGdyYW50IHRvIEFwcGxlIGFuZCBpdHMgc3Vic2lkaWFyaWVzIGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIHBlcnBldHVhbCBhbmQgaXJyZXZvY2FibGUgbGljZW5zZSwgdW5kZXIgWW91ciBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50KSBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSBvciBoYXZlIG1vZGlmaWVkIChmb3IgQXBwbGUgYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMpLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIFlvdXIgTW9kaWZpY2F0aW9ucywgaW4gYW55IGZvcm0sIHRocm91Z2ggbXVsdGlwbGUgdGllcnMgb2YgZGlzdHJpYnV0aW9uLgorCis0LiBMYXJnZXIgV29ya3MuIFlvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIGVhY2ggc3VjaCBpbnN0YW5jZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IHBvcnRpb24gdGhlcmVvZi4KKworNS4gTGltaXRhdGlvbnMgb24gUGF0ZW50IExpY2Vuc2UuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb24gMiwgbm8gb3RoZXIgcGF0ZW50IHJpZ2h0cywgZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBBcHBsZSBoZXJlaW4uIE1vZGlmaWNhdGlvbnMgYW5kL29yIExhcmdlciBXb3JrcyBtYXkgcmVxdWlyZSBhZGRpdGlvbmFsIHBhdGVudCBsaWNlbnNlcyBmcm9tIEFwcGxlIHdoaWNoIEFwcGxlIG1heSBncmFudCBpbiBpdHMgc29sZSBkaXNjcmV0aW9uLgorCis2LiBBZGRpdGlvbmFsIFRlcm1zLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciBvdGhlciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoZSBzY29wZSBvZiB0aGUgbGljZW5zZSBncmFudGVkIGhlcmVpbiAoIkFkZGl0aW9uYWwgVGVybXMiKSB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgYXMgWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBhbmQgbm90IG9uIGJlaGFsZiBvZiBBcHBsZSBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG9idGFpbiB0aGUgcmVjaXBpZW50YHMgYWdyZWVtZW50IHRoYXQgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcyBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kIGFuZCBob2xkIEFwcGxlIGFuZCBldmVyeSBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCBBcHBsZSBvciBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbiBvZiBhbnkgc3VjaCBBZGRpdGlvbmFsIFRlcm1zLgorCis3LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4gQXBwbGUgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gT25jZSBPcmlnaW5hbCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcHVibGlzaGVkIGJ5IEFwcGxlLiBObyBvbmUgb3RoZXIgdGhhbiBBcHBsZSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzguIE5PIFdBUlJBTlRZIE9SIFNVUFBPUlQuIFRoZSBDb3ZlcmVkIENvZGUgbWF5IGNvbnRhaW4gaW4gd2hvbGUgb3IgaW4gcGFydCBwcmUtcmVsZWFzZSwgdW50ZXN0ZWQsIG9yIG5vdCBmdWxseSB0ZXN0ZWQgd29ya3MuIFRoZSBDb3ZlcmVkIENvZGUgbWF5IGNvbnRhaW4gZXJyb3JzIHRoYXQgY291bGQgY2F1c2UgZmFpbHVyZXMgb3IgbG9zcyBvZiBkYXRhLCBhbmQgbWF5IGJlIGluY29tcGxldGUgb3IgY29udGFpbiBpbmFjY3VyYWNpZXMuIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgdXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUsIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YsIGlzIGF0IFlvdXIgc29sZSBhbmQgZW50aXJlIHJpc2suIFRIRSBDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSwgVVBHUkFERVMgT1IgU1VQUE9SVCBPRiBBTlkgS0lORCBBTkQgQVBQTEUgQU5EIEFQUExFYFMgTElDRU5TT1IoUykgKENPTExFQ1RJVkVMWSBSRUZFUlJFRCBUTyBBUyAiQVBQTEUiIEZPUiBUSEUgUFVSUE9TRVMgT0YgU0VDVElPTlMgOCBBTkQgOSkgQU5EIEFMTCBDT05UUklCVVRPUlMgRVhQUkVTU0xZIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgT0YgU0FUSVNGQUNUT1JZIFFVQUxJVFksIE9GIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPRiBBQ0NVUkFDWSwgT0YgUVVJRVQgRU5KT1lNRU5ULCBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4gQVBQTEUgQU5EIEVBQ0ggQ09OVFJJQlVUT1IgRE9FUyBOT1QgV0FSUkFOVCBBR0FJTlNUIElOVEVSRkVSRU5DRSBXSVRIIFlPVVIgRU5KT1lNRU5UIE9GIFRIRSBDT1ZFUkVEIENPREUsIFRIQVQgVEhFIEZVTkNUSU9OUyBDT05UQUlORUQgSU4gVEhFIENPVkVSRUQgQ09ERSBXSUxMIE1FRVQgWU9VUiBSRVFVSVJFTUVOVFMsIFRIQVQgVEhFIE9QRVJBVElPTiBPRiBUSEUgQ09WRVJFRCBDT0RFIFdJTEwgQkUgVU5JTlRFUlJVUFRFRCBPUiBFUlJPUi1GUkVFLCBPUiBUSEFUIERFRkVDVFMgSU4gVEhFIENPVkVSRUQgQ09ERSBXSUxMIEJFIENPUlJFQ1RFRC4gTk8gT1JBTCBPUiBXUklUVEVOIElORk9STUFUSU9OIE9SIEFEVklDRSBHSVZFTiBCWSBBUFBMRSwgQU4gQVBQTEUgQVVUSE9SSVpFRCBSRVBSRVNFTlRBVElWRSBPUiBBTlkgQ09OVFJJQlVUT1IgU0hBTEwgQ1JFQVRFIEEgV0FSUkFOVFkuIFlvdSBhY2tub3dsZWRnZSB0aGF0IHRoZSBDb3ZlcmVkIENvZGUgaXMgbm90IGludGVuZGVkIGZvciB1c2UgaW4gdGhlIG9wZXJhdGlvbiBvZiBudWNsZWFyIGZhY2lsaXRpZXMsIGFpcmNyYWZ0IG5hdmlnYXRpb24sIGNvbW11bmljYXRpb24gc3lzdGVtcywgb3IgYWlyIHRyYWZmaWMgY29udHJvbCBtYWNoaW5lcyBpbiB3aGljaCBjYXNlIHRoZSBmYWlsdXJlIG9mIHRoZSBDb3ZlcmVkIENvZGUgY291bGQgbGVhZCB0byBkZWF0aCwgcGVyc29uYWwgaW5qdXJ5LCBvciBzZXZlcmUgcGh5c2ljYWwgb3IgZW52aXJvbm1lbnRhbCBkYW1hZ2UuCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLiBUTyBUSEUgRVhURU5UIE5PVCBQUk9ISUJJVEVEIEJZIExBVywgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgQU5ZIENPTlRSSUJVVE9SIEJFIExJQUJMRSBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVElORyBUTyBUSElTIExJQ0VOU0UgT1IgWU9VUiBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgQ09WRVJFRCBDT0RFLCBPUiBBTlkgUE9SVElPTiBUSEVSRU9GLCBXSEVUSEVSIFVOREVSIEEgVEhFT1JZIE9GIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBQUk9EVUNUUyBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGIEFQUExFIE9SIFNVQ0ggQ09OVFJJQlVUT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTIEFORCBOT1RXSVRIU1RBTkRJTkcgVEhFIEZBSUxVUkUgT0YgRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIFJFTUVEWS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4gSW4gbm8gZXZlbnQgc2hhbGwgQXBwbGVgcyB0b3RhbCBsaWFiaWxpdHkgdG8gWW91IGZvciBhbGwgZGFtYWdlcyAob3RoZXIgdGhhbiBhcyBtYXkgYmUgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcpIHVuZGVyIHRoaXMgTGljZW5zZSBleGNlZWQgdGhlIGFtb3VudCBvZiBmaWZ0eSBkb2xsYXJzICgkNTAuMDApLgorCisxMC4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZSB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzICJBcHBsZSIsICJBcHBsZSBDb21wdXRlciIsICJNYWMgT1MgWCIsICJNYWMgT1MgWCBTZXJ2ZXIiLCAiUXVpY2tUaW1lIiwgIlF1aWNrVGltZSBTdHJlYW1pbmcgU2VydmVyIiBvciBhbnkgb3RoZXIgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBiZWxvbmdpbmcgdG8gQXBwbGUgKGNvbGxlY3RpdmVseSAiQXBwbGUgTWFya3MiKSBvciB0byBhbnkgdHJhZGVtYXJrIG9yIHRyYWRlIG5hbWUgYmVsb25naW5nIHRvIGFueSBDb250cmlidXRvci4gTm8gQXBwbGUgTWFya3MgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZSBvdGhlciB0aGFuIGFzIHBlcm1pdHRlZCBieSBhbmQgaW4gc3RyaWN0IGNvbXBsaWFuY2UgYXQgYWxsIHRpbWVzIHdpdGggQXBwbGVgcyB0aGlyZCBwYXJ0eSB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcyB3aGljaCBhcmUgcG9zdGVkIGF0IGh0dHA6Ly93d3cuYXBwbGUuY29tL2xlZ2FsL2d1aWRlbGluZXNmb3IzcmRwYXJ0aWVzLmh0bWwuCisKKzExLiBPd25lcnNoaXAuIFN1YmplY3QgdG8gdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byBhbnkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2ggQ29udHJpYnV0b3IuIEFwcGxlIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMgbWFkZSBieSBvciBvbiBiZWhhbGYgb2YgQXBwbGUgKCJBcHBsZSBNb2RpZmljYXRpb25zIiksIGFuZCBzdWNoIEFwcGxlIE1vZGlmaWNhdGlvbnMgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gQXBwbGUgbWF5LCBhdCBpdHMgc29sZSBkaXNjcmV0aW9uLCBjaG9vc2UgdG8gbGljZW5zZSBzdWNoIEFwcGxlIE1vZGlmaWNhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLCBvciBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlIG9yIG1heSBjaG9vc2Ugbm90IHRvIGxpY2Vuc2UgdGhlbSBhdCBhbGwuCisKKzEyLiBUZXJtaW5hdGlvbi4KKworMTIuMSBUZXJtaW5hdGlvbi4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlOgorCisoYSkgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBmcm9tIEFwcGxlIGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSB0ZXJtKHMpIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggYnJlYWNoOworCisoYikgaW1tZWRpYXRlbHkgaW4gdGhlIGV2ZW50IG9mIHRoZSBjaXJjdW1zdGFuY2VzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEzLjUoYik7IG9yCisKKyhjKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gQXBwbGUgaWYgWW91LCBhdCBhbnkgdGltZSBkdXJpbmcgdGhlIHRlcm0gb2YgdGhpcyBMaWNlbnNlLCBjb21tZW5jZSBhbiBhY3Rpb24gZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQgYWdhaW5zdCBBcHBsZS4KKworMTIuMiBFZmZlY3Qgb2YgVGVybWluYXRpb24uIFVwb24gdGVybWluYXRpb24sIFlvdSBhZ3JlZSB0byBpbW1lZGlhdGVseSBzdG9wIGFueSBmdXJ0aGVyIHVzZSwgcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24sIHN1YmxpY2Vuc2luZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgYW5kIHRvIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgYXJlIGluIHlvdXIgcG9zc2Vzc2lvbiBvciBjb250cm9sLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBoYXZlIGJlZW4gcHJvcGVybHkgZ3JhbnRlZCBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgc2hvdWxkIHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBTZWN0aW9ucyAzLCA1LCA4LCA5LCAxMCwgMTEsIDEyLjIgYW5kIDEzLiBObyBwYXJ0eSB3aWxsIGJlIGxpYWJsZSB0byBhbnkgb3RoZXIgZm9yIGNvbXBlbnNhdGlvbiwgaW5kZW1uaXR5IG9yIGRhbWFnZXMgb2YgYW55IHNvcnQgc29sZWx5IGFzIGEgcmVzdWx0IG9mIHRlcm1pbmF0aW5nIHRoaXMgTGljZW5zZSBpbiBhY2NvcmRhbmNlIHdpdGggaXRzIHRlcm1zLCBhbmQgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgYmUgd2l0aG91dCBwcmVqdWRpY2UgdG8gYW55IG90aGVyIHJpZ2h0IG9yIHJlbWVkeSBvZiBhbnkgcGFydHkuCisKKzEzLiBNaXNjZWxsYW5lb3VzLgorCisxMy4xIEdvdmVybm1lbnQgRW5kIFVzZXJzLiBUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSIgYXMgZGVmaW5lZCBpbiBGQVIgMi4xMDEuIEdvdmVybm1lbnQgc29mdHdhcmUgYW5kIHRlY2huaWNhbCBkYXRhIHJpZ2h0cyBpbiB0aGUgQ292ZXJlZCBDb2RlIGluY2x1ZGUgb25seSB0aG9zZSByaWdodHMgY3VzdG9tYXJpbHkgcHJvdmlkZWQgdG8gdGhlIHB1YmxpYyBhcyBkZWZpbmVkIGluIHRoaXMgTGljZW5zZS4gVGhpcyBjdXN0b21hcnkgY29tbWVyY2lhbCBsaWNlbnNlIGluIHRlY2huaWNhbCBkYXRhIGFuZCBzb2Z0d2FyZSBpcyBwcm92aWRlZCBpbiBhY2NvcmRhbmNlIHdpdGggRkFSIDEyLjIxMSAoVGVjaG5pY2FsIERhdGEpIGFuZCAxMi4yMTIgKENvbXB1dGVyIFNvZnR3YXJlKSBhbmQsIGZvciBEZXBhcnRtZW50IG9mIERlZmVuc2UgcHVyY2hhc2VzLCBERkFSIDI1Mi4yMjctNzAxNSAoVGVjaG5pY2FsIERhdGEgLS0gQ29tbWVyY2lhbCBJdGVtcykgYW5kIDIyNy43MjAyLTMgKFJpZ2h0cyBpbiBDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlIG9yIENvbXB1dGVyIFNvZnR3YXJlIERvY3VtZW50YXRpb24pLiBBY2NvcmRpbmdseSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisxMy4yIFJlbGF0aW9uc2hpcCBvZiBQYXJ0aWVzLiBUaGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgY29uc3RydWVkIGFzIGNyZWF0aW5nIGFuIGFnZW5jeSwgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUgb3IgYW55IG90aGVyIGZvcm0gb2YgbGVnYWwgYXNzb2NpYXRpb24gYmV0d2VlbiBvciBhbW9uZ1lvdSwgQXBwbGUgb3IgYW55IENvbnRyaWJ1dG9yLCBhbmQgWW91IHdpbGwgbm90IHJlcHJlc2VudCB0byB0aGUgY29udHJhcnksIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgYXBwZWFyYW5jZSBvciBvdGhlcndpc2UuCisKKzEzLjMgSW5kZXBlbmRlbnQgRGV2ZWxvcG1lbnQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHdpbGwgaW1wYWlyIEFwcGxlYHMgcmlnaHQgdG8gYWNxdWlyZSwgbGljZW5zZSwgZGV2ZWxvcCwgaGF2ZSBvdGhlcnMgZGV2ZWxvcCBmb3IgaXQsIG1hcmtldCBhbmQvb3IgZGlzdHJpYnV0ZSB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgcGVyZm9ybSB0aGUgc2FtZSBvciBzaW1pbGFyIGZ1bmN0aW9ucyBhcywgb3Igb3RoZXJ3aXNlIGNvbXBldGUgd2l0aCwgTW9kaWZpY2F0aW9ucywgTGFyZ2VyIFdvcmtzLCB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgWW91IG1heSBkZXZlbG9wLCBwcm9kdWNlLCBtYXJrZXQgb3IgZGlzdHJpYnV0ZS4KKworMTMuNCBXYWl2ZXI7IENvbnN0cnVjdGlvbi4gRmFpbHVyZSBieSBBcHBsZSBvciBhbnkgQ29udHJpYnV0b3IgdG8gZW5mb3JjZSBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBkZWVtZWQgYSB3YWl2ZXIgb2YgZnV0dXJlIGVuZm9yY2VtZW50IG9mIHRoYXQgb3IgYW55IG90aGVyIHByb3Zpc2lvbi4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgd2lsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisxMy41IFNldmVyYWJpbGl0eS4gKGEpIElmIGZvciBhbnkgcmVhc29uIGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiBmaW5kcyBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgb3IgcG9ydGlvbiB0aGVyZW9mLCB0byBiZSB1bmVuZm9yY2VhYmxlLCB0aGF0IHByb3Zpc2lvbiBvZiB0aGUgTGljZW5zZSB3aWxsIGJlIGVuZm9yY2VkIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXNzaWJsZSBzbyBhcyB0byBlZmZlY3QgdGhlIGVjb25vbWljIGJlbmVmaXRzIGFuZCBpbnRlbnQgb2YgdGhlIHBhcnRpZXMsIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdC4gKGIpIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCBpZiBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgb3IgcmVzdHJpY3RzIFlvdSBmcm9tIGZ1bGx5IGFuZC9vciBzcGVjaWZpY2FsbHkgY29tcGx5aW5nIHdpdGggU2VjdGlvbnMgMiBhbmQvb3IgMyBvciBwcmV2ZW50cyB0aGUgZW5mb3JjZWFiaWxpdHkgb2YgZWl0aGVyIG9mIHRob3NlIFNlY3Rpb25zLCB0aGlzIExpY2Vuc2Ugd2lsbCBpbW1lZGlhdGVseSB0ZXJtaW5hdGUgYW5kIFlvdSBtdXN0IGltbWVkaWF0ZWx5IGRpc2NvbnRpbnVlIGFueSB1c2Ugb2YgdGhlIENvdmVyZWQgQ29kZSBhbmQgZGVzdHJveSBhbGwgY29waWVzIG9mIGl0IHRoYXQgYXJlIGluIHlvdXIgcG9zc2Vzc2lvbiBvciBjb250cm9sLgorCisxMy42IERpc3B1dGUgUmVzb2x1dGlvbi4gQW55IGxpdGlnYXRpb24gb3Igb3RoZXIgZGlzcHV0ZSByZXNvbHV0aW9uIGJldHdlZW4gWW91IGFuZCBBcHBsZSByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgdGFrZSBwbGFjZSBpbiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgYW5kIFlvdSBhbmQgQXBwbGUgaGVyZWJ5IGNvbnNlbnQgdG8gdGhlIHBlcnNvbmFsIGp1cmlzZGljdGlvbiBvZiwgYW5kIHZlbnVlIGluLCB0aGUgc3RhdGUgYW5kIGZlZGVyYWwgY291cnRzIHdpdGhpbiB0aGF0IERpc3RyaWN0IHdpdGggcmVzcGVjdCB0byB0aGlzIExpY2Vuc2UuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLgorCisxMy43IEVudGlyZSBBZ3JlZW1lbnQ7IEdvdmVybmluZyBMYXcuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgYW5kIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhLCBleGNlcHQgdGhhdCBib2R5IG9mIENhbGlmb3JuaWEgbGF3IGNvbmNlcm5pbmcgY29uZmxpY3RzIG9mIGxhdy4KKworV2hlcmUgWW91IGFyZSBsb2NhdGVkIGluIHRoZSBwcm92aW5jZSBvZiBRdWViZWMsIENhbmFkYSwgdGhlIGZvbGxvd2luZyBjbGF1c2UgYXBwbGllczogVGhlIHBhcnRpZXMgaGVyZWJ5IGNvbmZpcm0gdGhhdCB0aGV5IGhhdmUgcmVxdWVzdGVkIHRoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbGwgcmVsYXRlZCBkb2N1bWVudHMgYmUgZHJhZnRlZCBpbiBFbmdsaXNoLiBMZXMgcGFydGllcyBvbnQgZXhpZyYjMjMzOyBxdWUgbGUgcHImIzIzMztzZW50IGNvbnRyYXQgZXQgdG91cyBsZXMgZG9jdW1lbnRzIGNvbm5leGVzIHNvaWVudCByJiMyMzM7ZGlnJiMyMzM7cyBlbiBhbmdsYWlzLgorCitFWEhJQklUIEEuCisKKyJQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitUaGlzIGZpbGUgY29udGFpbnMgT3JpZ2luYWwgQ29kZSBhbmQvb3IgTW9kaWZpY2F0aW9ucyBvZiBPcmlnaW5hbCBDb2RlIGFzIGRlZmluZWQgaW4gYW5kIHRoYXQgYXJlIHN1YmplY3QgdG8gdGhlIEFwcGxlIFB1YmxpYyBTb3VyY2UgTGljZW5zZSBWZXJzaW9uIDEuMiAodGhlIGBMaWNlbnNlYCkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gUGxlYXNlIG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcHBsZS5jb20vcHVibGljc291cmNlIGFuZCByZWFkIGl0IGJlZm9yZSB1c2luZyB0aGlzIGZpbGUuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbGwgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgYXJlIGRpc3RyaWJ1dGVkIG9uIGFuIGBBUyBJU2AgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIEFORCBBUFBMRSBIRVJFQlkgRElTQ0xBSU1TIEFMTCBTVUNIIFdBUlJBTlRJRVMsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFFVSUVUIEVOSk9ZTUVOVCBPUiBOT04tSU5GUklOR0VNRU5ULiBQbGVhc2Ugc2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQU0wtMi4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTJlOGI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTIuMApAQCAtMCwwICsxLDEwMiBAQAorCitBUFBMRSBQVUJMSUMgU09VUkNFIExJQ0VOU0UKK1ZlcnNpb24gMi4wIC0gIEF1Z3VzdCA2LCAyMDAzCisKK1BsZWFzZSByZWFkIHRoaXMgTGljZW5zZSBjYXJlZnVsbHkgYmVmb3JlIGRvd25sb2FkaW5nIHRoaXMgc29mdHdhcmUuICBCeSBkb3dubG9hZGluZyBvciB1c2luZyB0aGlzIHNvZnR3YXJlLCB5b3UgYXJlIGFncmVlaW5nIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgZG8gbm90IG9yIGNhbm5vdCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBwbGVhc2UgZG8gbm90IGRvd25sb2FkIG9yIHVzZSB0aGUgc29mdHdhcmUuCisKK0FwcGxlIE5vdGU6ICBJbiBKYW51YXJ5IDIwMDcsIEFwcGxlIGNoYW5nZWQgaXRzIGNvcnBvcmF0ZSBuYW1lIGZyb20gIkFwcGxlIENvbXB1dGVyLCBJbmMuIiB0byAiQXBwbGUgSW5jLiIgIFRoaXMgY2hhbmdlIGhhcyBiZWVuIHJlZmxlY3RlZCBiZWxvdyBhbmQgY29weXJpZ2h0IHllYXJzIHVwZGF0ZWQsIGJ1dCBubyBvdGhlciBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBBUFNMIDIuMC4KKworMS4gR2VuZXJhbDsgRGVmaW5pdGlvbnMuICBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIEFwcGxlIEluYy4gKCJBcHBsZSIpIG1ha2VzIHB1YmxpY2x5IGF2YWlsYWJsZSBhbmQgd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IEFwcGxlIGlkZW50aWZ5aW5nIHN1Y2ggcHJvZ3JhbSBvciB3b3JrIGFzICJPcmlnaW5hbCBDb2RlIiBhbmQgc3RhdGluZyB0aGF0IGl0IGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlIHZlcnNpb24gMi4wICgiTGljZW5zZSIpLiAgQXMgdXNlZCBpbiB0aGlzIExpY2Vuc2U6CisKKzEuMSAgIkFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyIgbWVhbjogIChhKSBpbiB0aGUgY2FzZSB3aGVyZSBBcHBsZSBpcyB0aGUgZ3JhbnRvciBvZiByaWdodHMsIChpKSBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBBcHBsZSBhbmQgKGlpKSB0aGF0IGNvdmVyIHN1YmplY3QgbWF0dGVyIGNvbnRhaW5lZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYnV0IG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gdXNlLCByZXByb2R1Y2UgYW5kL29yIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgd2l0aG91dCBpbmZyaW5nZW1lbnQ7IGFuZCAoYikgaW4gdGhlIGNhc2Ugd2hlcmUgWW91IGFyZSB0aGUgZ3JhbnRvciBvZiByaWdodHMsIChpKSBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBZb3UgYW5kIChpaSkgdGhhdCBjb3ZlciBzdWJqZWN0IG1hdHRlciBpbiBZb3VyIE1vZGlmaWNhdGlvbnMsIHRha2VuIGFsb25lIG9yIGluIGNvbWJpbmF0aW9uIHdpdGggT3JpZ2luYWwgQ29kZS4KKworMS4yICJDb250cmlidXRvciIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisxLjMgICJDb3ZlcmVkIENvZGUiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlLCBNb2RpZmljYXRpb25zLCB0aGUgY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkgcmVzcGVjdGl2ZSBwb3J0aW9ucyB0aGVyZW9mLgorCisxLjQgIkV4dGVybmFsbHkgRGVwbG95IiBtZWFuczogKGEpIHRvIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIG1ha2UgQ292ZXJlZCBDb2RlIGF2YWlsYWJsZSwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgdG8gYW55b25lIG90aGVyIHRoYW4gWW91OyBhbmQvb3IgKGIpIHRvIHVzZSBDb3ZlcmVkIENvZGUsIGFsb25lIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yaywgaW4gYW55IHdheSB0byBwcm92aWRlIGEgc2VydmljZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkZWxpdmVyeSBvZiBjb250ZW50LCB0aHJvdWdoIGVsZWN0cm9uaWMgY29tbXVuaWNhdGlvbiB3aXRoIGEgY2xpZW50IG90aGVyIHRoYW4gWW91LgorCisxLjUgIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjYgIk1vZGlmaWNhdGlvbnMiIG1lYW4gYW55IGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tLCBhbmQvb3IgY2hhbmdlIHRvLCB0aGUgc3Vic3RhbmNlIGFuZC9vciBzdHJ1Y3R1cmUgb2YgdGhlIE9yaWdpbmFsIENvZGUsIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLCB0aGUgY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkgcmVzcGVjdGl2ZSBwb3J0aW9ucyB0aGVyZW9mLiAgV2hlbiBjb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczogIChhKSBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlOyBhbmQvb3IgKGIpIGFueSBuZXcgZmlsZSBvciBvdGhlciByZXByZXNlbnRhdGlvbiBvZiBjb21wdXRlciBwcm9ncmFtIHN0YXRlbWVudHMgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiBDb3ZlcmVkIENvZGUuIAorCisxLjcgIk9yaWdpbmFsIENvZGUiIG1lYW5zIChhKSB0aGUgU291cmNlIENvZGUgb2YgYSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgYXMgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB0aGUgU291cmNlIENvZGUgb2YgYW55IHVwZGF0ZXMgb3IgdXBncmFkZXMgdG8gc3VjaCBwcm9ncmFtcyBvciB3b3JrcyBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB0aGF0IGhhcyBiZWVuIGV4cHJlc3NseSBpZGVudGlmaWVkIGJ5IEFwcGxlIGFzIHN1Y2ggaW4gdGhlIGhlYWRlciBmaWxlKHMpIG9mIHN1Y2ggd29yazsgYW5kIChiKSB0aGUgb2JqZWN0IGNvZGUgY29tcGlsZWQgZnJvbSBzdWNoIFNvdXJjZSBDb2RlIGFuZCBvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZQorCisxLjggIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgaHVtYW4gcmVhZGFibGUgZm9ybSBvZiBhIHByb2dyYW0gb3Igb3RoZXIgd29yayB0aGF0IGlzIHN1aXRhYmxlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIGV4ZWN1dGFibGUgKG9iamVjdCBjb2RlKS4KKworMS45ICJZb3UiIG9yICJZb3VyIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgb3IgIllvdXIiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGgsIFlvdSwgd2hlcmUgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4gUGVybWl0dGVkIFVzZXM7IENvbmRpdGlvbnMgJmFtcDsgUmVzdHJpY3Rpb25zLiAgIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgQXBwbGUgaGVyZWJ5IGdyYW50cyBZb3UsIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBZb3UgYWNjZXB0IHRoaXMgTGljZW5zZSBhbmQgZG93bmxvYWQgdGhlIE9yaWdpbmFsIENvZGUsIGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHRvIHRoZSBleHRlbnQgb2YgQXBwbGVgcyBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIGNvcHlyaWdodHMgY292ZXJpbmcgdGhlIE9yaWdpbmFsIENvZGUsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKKzIuMSBVbm1vZGlmaWVkIENvZGUuICBZb3UgbWF5IHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBpbnRlcm5hbGx5IGRpc3RyaWJ1dGUgd2l0aGluIFlvdXIgb3JnYW5pemF0aW9uLCBhbmQgRXh0ZXJuYWxseSBEZXBsb3kgdmVyYmF0aW0sIHVubW9kaWZpZWQgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBmb3IgY29tbWVyY2lhbCBvciBub24tY29tbWVyY2lhbCBwdXJwb3NlcywgcHJvdmlkZWQgdGhhdCBpbiBlYWNoIGluc3RhbmNlOgorCisoYSkgWW91IG11c3QgcmV0YWluIGFuZCByZXByb2R1Y2UgaW4gYWxsIGNvcGllcyBvZiBPcmlnaW5hbCBDb2RlIHRoZSBjb3B5cmlnaHQgYW5kIG90aGVyIHByb3ByaWV0YXJ5IG5vdGljZXMgYW5kIGRpc2NsYWltZXJzIG9mIEFwcGxlIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBPcmlnaW5hbCBDb2RlLCBhbmQga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgaW4gdGhlIE9yaWdpbmFsIENvZGUgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2U7IGFuZAorCisoYikgIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgU291cmNlIENvZGUgb2YgQ292ZXJlZCBDb2RlIGFuZCBkb2N1bWVudGF0aW9uIFlvdSBkaXN0cmlidXRlIG9yIEV4dGVybmFsbHkgRGVwbG95LCBhbmQgWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBzdWNoIFNvdXJjZSBDb2RlIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLCBleGNlcHQgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNi4KKworMi4yIE1vZGlmaWVkIENvZGUuICBZb3UgbWF5IG1vZGlmeSBDb3ZlcmVkIENvZGUgYW5kIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBpbnRlcm5hbGx5IGRpc3RyaWJ1dGUgd2l0aGluIFlvdXIgb3JnYW5pemF0aW9uLCBhbmQgRXh0ZXJuYWxseSBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zIGFuZCBDb3ZlcmVkIENvZGUsIGZvciBjb21tZXJjaWFsIG9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzLCBwcm92aWRlZCB0aGF0IGluIGVhY2ggaW5zdGFuY2UgWW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworKGEpIFlvdSBtdXN0IHNhdGlzZnkgYWxsIHRoZSBjb25kaXRpb25zIG9mIFNlY3Rpb24gMi4xIHdpdGggcmVzcGVjdCB0byB0aGUgU291cmNlIENvZGUgb2YgdGhlIENvdmVyZWQgQ29kZTsgCisKKyhiKSBZb3UgbXVzdCBkdXBsaWNhdGUsIHRvIHRoZSBleHRlbnQgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdCwgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiBhbGwgWW91ciBNb2RpZmljYXRpb25zLCBhbmQgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2U7IGFuZAorCisoYykgSWYgWW91IEV4dGVybmFsbHkgRGVwbG95IFlvdXIgTW9kaWZpY2F0aW9ucywgWW91IG11c3QgbWFrZSBTb3VyY2UgQ29kZSBvZiBhbGwgWW91ciBFeHRlcm5hbGx5IERlcGxveWVkIE1vZGlmaWNhdGlvbnMgZWl0aGVyIGF2YWlsYWJsZSB0byB0aG9zZSB0byB3aG9tIFlvdSBoYXZlIEV4dGVybmFsbHkgRGVwbG95ZWQgWW91ciBNb2RpZmljYXRpb25zLCBvciBwdWJsaWNseSBhdmFpbGFibGUuICBTb3VyY2UgQ29kZSBvZiBZb3VyIEV4dGVybmFsbHkgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBtdXN0IGJlIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGxpY2Vuc2UgZ3JhbnRzIHNldCBmb3J0aCBpbiBTZWN0aW9uIDMgYmVsb3csIGZvciBhcyBsb25nIGFzIHlvdSBFeHRlcm5hbGx5IERlcGxveSB0aGUgQ292ZXJlZCBDb2RlIG9yIHR3ZWx2ZSAoMTIpIG1vbnRocyBmcm9tIHRoZSBkYXRlIG9mIGluaXRpYWwgRXh0ZXJuYWwgRGVwbG95bWVudCwgd2hpY2hldmVyIGlzIGxvbmdlci4gWW91IHNob3VsZCBwcmVmZXJhYmx5IGRpc3RyaWJ1dGUgdGhlIFNvdXJjZSBDb2RlIG9mIFlvdXIgRXh0ZXJuYWxseSBEZXBsb3llZCBNb2RpZmljYXRpb25zIGVsZWN0cm9uaWNhbGx5IChlLmcuIGRvd25sb2FkIGZyb20gYSB3ZWIgc2l0ZSkuCisKKzIuMyBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4gIEluIGFkZGl0aW9uLCBpZiBZb3UgRXh0ZXJuYWxseSBEZXBsb3kgQ292ZXJlZCBDb2RlIChPcmlnaW5hbCBDb2RlIGFuZC9vciBNb2RpZmljYXRpb25zKSBpbiBvYmplY3QgY29kZSwgZXhlY3V0YWJsZSBmb3JtIG9ubHksIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgbm90aWNlLCBpbiB0aGUgY29kZSBpdHNlbGYgYXMgd2VsbCBhcyBpbiByZWxhdGVkIGRvY3VtZW50YXRpb24sIHN0YXRpbmcgdGhhdCBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggaW5mb3JtYXRpb24gb24gaG93IGFuZCB3aGVyZSB0byBvYnRhaW4gc3VjaCBTb3VyY2UgQ29kZS4gIAorCisyLjQgVGhpcmQgUGFydHkgUmlnaHRzLiAgWW91IGV4cHJlc3NseSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCBhbHRob3VnaCBBcHBsZSBhbmQgZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIHRoZWlyIHJlc3BlY3RpdmUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBBcHBsZSBvciBhbnkgQ29udHJpYnV0b3IgdGhhdCB0aGUgQ292ZXJlZCBDb2RlIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBBcHBsZSBhbmQgZWFjaCBDb250cmlidXRvciBkaXNjbGFpbSBhbnkgbGlhYmlsaXR5IHRvIFlvdSBmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIFlvdSBoZXJlYnkgYXNzdW1lIHNvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwgaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBZb3UgdG8gZGlzdHJpYnV0ZSB0aGUgQ292ZXJlZCBDb2RlLCBpdCBpcyBZb3VyIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlIENvdmVyZWQgQ29kZS4KKworMy4gWW91ciBHcmFudHMuICBJbiBjb25zaWRlcmF0aW9uIG9mLCBhbmQgYXMgYSBjb25kaXRpb24gdG8sIHRoZSBsaWNlbnNlcyBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBoZXJlYnkgZ3JhbnQgdG8gYW55IHBlcnNvbiBvciBlbnRpdHkgcmVjZWl2aW5nIG9yIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUgdW5kZXIgdGhpcyBMaWNlbnNlIGEgbm9uLWV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCBwZXJwZXR1YWwsIGlycmV2b2NhYmxlIGxpY2Vuc2UsIHVuZGVyIFlvdXIgQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIGFuZCBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCkgb3duZWQgb3IgY29udHJvbGxlZCBieSBZb3UsIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBtb2RpZnksIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUgYW5kIEV4dGVybmFsbHkgRGVwbG95IFlvdXIgTW9kaWZpY2F0aW9ucyBvZiB0aGUgc2FtZSBzY29wZSBhbmQgZXh0ZW50IGFzIEFwcGxlYHMgbGljZW5zZXMgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZCAyLjIgYWJvdmUuICAKKworNC4gTGFyZ2VyIFdvcmtzLiAgWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gIEluIGVhY2ggc3VjaCBpbnN0YW5jZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IHBvcnRpb24gdGhlcmVvZi4gCisKKzUuIExpbWl0YXRpb25zIG9uIFBhdGVudCBMaWNlbnNlLiAgIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb24gMiwgbm8gb3RoZXIgcGF0ZW50IHJpZ2h0cywgZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBBcHBsZSBoZXJlaW4uICBNb2RpZmljYXRpb25zIGFuZC9vciBMYXJnZXIgV29ya3MgbWF5IHJlcXVpcmUgYWRkaXRpb25hbCBwYXRlbnQgbGljZW5zZXMgZnJvbSBBcHBsZSB3aGljaCBBcHBsZSBtYXkgZ3JhbnQgaW4gaXRzIHNvbGUgZGlzY3JldGlvbi4gIAorCis2LiBBZGRpdGlvbmFsIFRlcm1zLiAgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3Igb3RoZXIgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGUgc2NvcGUgb2YgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlaW4gKCJBZGRpdGlvbmFsIFRlcm1zIikgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYgYW5kIGFzIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgQXBwbGUgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBvYnRhaW4gdGhlIHJlY2lwaWVudGBzIGFncmVlbWVudCB0aGF0IGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCBhbmQgaG9sZCBBcHBsZSBhbmQgZXZlcnkgQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QgQXBwbGUgb3Igc3VjaCBDb250cmlidXRvciBieSByZWFzb24gb2YgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcy4gCisKKzcuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLiAgQXBwbGUgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBPbmNlIE9yaWdpbmFsIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSwgWW91IG1heSBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBwdWJsaXNoZWQgYnkgQXBwbGUuICBObyBvbmUgb3RoZXIgdGhhbiBBcHBsZSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICAKKworOC4gTk8gV0FSUkFOVFkgT1IgU1VQUE9SVC4gIFRoZSBDb3ZlcmVkIENvZGUgbWF5IGNvbnRhaW4gaW4gd2hvbGUgb3IgaW4gcGFydCBwcmUtcmVsZWFzZSwgdW50ZXN0ZWQsIG9yIG5vdCBmdWxseSB0ZXN0ZWQgd29ya3MuICBUaGUgQ292ZXJlZCBDb2RlIG1heSBjb250YWluIGVycm9ycyB0aGF0IGNvdWxkIGNhdXNlIGZhaWx1cmVzIG9yIGxvc3Mgb2YgZGF0YSwgYW5kIG1heSBiZSBpbmNvbXBsZXRlIG9yIGNvbnRhaW4gaW5hY2N1cmFjaWVzLiAgWW91IGV4cHJlc3NseSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCB1c2Ugb2YgdGhlIENvdmVyZWQgQ29kZSwgb3IgYW55IHBvcnRpb24gdGhlcmVvZiwgaXMgYXQgWW91ciBzb2xlIGFuZCBlbnRpcmUgcmlzay4gIFRIRSBDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSwgVVBHUkFERVMgT1IgU1VQUE9SVCBPRiBBTlkgS0lORCBBTkQgQVBQTEUgQU5EIEFQUExFYFMgTElDRU5TT1IoUykgKENPTExFQ1RJVkVMWSBSRUZFUlJFRCBUTyBBUyAiQVBQTEUiIEZPUiBUSEUgUFVSUE9TRVMgT0YgU0VDVElPTlMgOCBBTkQgOSkgQU5EIEFMTCBDT05UUklCVVRPUlMgRVhQUkVTU0xZIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgT0YgU0FUSVNGQUNUT1JZIFFVQUxJVFksIE9GIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPRiBBQ0NVUkFDWSwgT0YgUVVJRVQgRU5KT1lNRU5ULCBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4gIEFQUExFIEFORCBFQUNIIENPTlRSSUJVVE9SIERPRVMgTk9UIFdBUlJBTlQgQUdBSU5TVCBJTlRFUkZFUkVOQ0UgV0lUSCBZT1VSIEVOSk9ZTUVOVCBPRiBUSEUgQ09WRVJFRCBDT0RFLCBUSEFUIFRIRSBGVU5DVElPTlMgQ09OVEFJTkVEIElOIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBNRUVUIFlPVVIgUkVRVUlSRU1FTlRTLCBUSEFUIFRIRSBPUEVSQVRJT04gT0YgVEhFIENPVkVSRUQgQ09ERSBXSUxMIEJFIFVOSU5URVJSVVBURUQgT1IgRVJST1ItRlJFRSwgT1IgVEhBVCBERUZFQ1RTIElOIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBCRSBDT1JSRUNURUQuICBOTyBPUkFMIE9SIFdSSVRURU4gSU5GT1JNQVRJT04gT1IgQURWSUNFIEdJVkVOIEJZIEFQUExFLCBBTiBBUFBMRSBBVVRIT1JJWkVEIFJFUFJFU0VOVEFUSVZFIE9SIEFOWSBDT05UUklCVVRPUiBTSEFMTCBDUkVBVEUgQSBXQVJSQU5UWS4gIFlvdSBhY2tub3dsZWRnZSB0aGF0IHRoZSBDb3ZlcmVkIENvZGUgaXMgbm90IGludGVuZGVkIGZvciB1c2UgaW4gdGhlIG9wZXJhdGlvbiBvZiBudWNsZWFyIGZhY2lsaXRpZXMsIGFpcmNyYWZ0IG5hdmlnYXRpb24sIGNvbW11bmljYXRpb24gc3lzdGVtcywgb3IgYWlyIHRyYWZmaWMgY29udHJvbCBtYWNoaW5lcyBpbiB3aGljaCBjYXNlIHRoZSBmYWlsdXJlIG9mIHRoZSBDb3ZlcmVkIENvZGUgY291bGQgbGVhZCB0byBkZWF0aCwgcGVyc29uYWwgaW5qdXJ5LCBvciBzZXZlcmUgcGh5c2ljYWwgb3IgZW52aXJvbm1lbnRhbCBkYW1hZ2UuCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLiBUTyBUSEUgRVhURU5UIE5PVCBQUk9ISUJJVEVEIEJZIExBVywgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgQU5ZIENPTlRSSUJVVE9SIEJFIExJQUJMRSBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVElORyBUTyBUSElTIExJQ0VOU0UgT1IgWU9VUiBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgQ09WRVJFRCBDT0RFLCBPUiBBTlkgUE9SVElPTiBUSEVSRU9GLCBXSEVUSEVSIFVOREVSIEEgVEhFT1JZIE9GIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBQUk9EVUNUUyBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGIEFQUExFIE9SIFNVQ0ggQ09OVFJJQlVUT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTIEFORCBOT1RXSVRIU1RBTkRJTkcgVEhFIEZBSUxVUkUgT0YgRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIFJFTUVEWS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4gSW4gbm8gZXZlbnQgc2hhbGwgQXBwbGVgcyB0b3RhbCBsaWFiaWxpdHkgdG8gWW91IGZvciBhbGwgZGFtYWdlcyAob3RoZXIgdGhhbiBhcyBtYXkgYmUgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcpIHVuZGVyIHRoaXMgTGljZW5zZSBleGNlZWQgdGhlIGFtb3VudCBvZiBmaWZ0eSBkb2xsYXJzICgkNTAuMDApLgorCisxMC4gVHJhZGVtYXJrcy4gIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyAgIkFwcGxlIiwgIk1hYyIsICJNYWMgT1MiLCAiUXVpY2tUaW1lIiwgIlF1aWNrVGltZSBTdHJlYW1pbmcgU2VydmVyIiBvciBhbnkgb3RoZXIgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgbG9nb3Mgb3IgdHJhZGUgbmFtZXMgYmVsb25naW5nIHRvIEFwcGxlIChjb2xsZWN0aXZlbHkgIkFwcGxlIE1hcmtzIikgb3IgdG8gYW55IHRyYWRlbWFyaywgc2VydmljZSBtYXJrLCBsb2dvIG9yIHRyYWRlIG5hbWUgYmVsb25naW5nIHRvIGFueSBDb250cmlidXRvci4gIFlvdSBhZ3JlZSBub3QgdG8gdXNlIGFueSBBcHBsZSBNYXJrcyBpbiBvciBhcyBwYXJ0IG9mIHRoZSBuYW1lIG9mIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZSBvciB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlIG90aGVyIHRoYW4gYXMgZXhwcmVzc2x5IHBlcm1pdHRlZCBieSBhbmQgaW4gc3RyaWN0IGNvbXBsaWFuY2UgYXQgYWxsIHRpbWVzIHdpdGggQXBwbGVgcyB0aGlyZCBwYXJ0eSB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcyB3aGljaCBhcmUgcG9zdGVkIGF0IGh0dHA6Ly93d3cuYXBwbGUuY29tL2xlZ2FsL2d1aWRlbGluZXNmb3IzcmRwYXJ0aWVzLmh0bWwuICAKKworMTEuIE93bmVyc2hpcC4gU3ViamVjdCB0byB0aGUgbGljZW5zZXMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBDb250cmlidXRvci4gIEFwcGxlIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMgbWFkZSBieSBvciBvbiBiZWhhbGYgb2YgQXBwbGUgKCJBcHBsZSBNb2RpZmljYXRpb25zIiksIGFuZCBzdWNoIEFwcGxlIE1vZGlmaWNhdGlvbnMgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIEFwcGxlIG1heSwgYXQgaXRzIHNvbGUgZGlzY3JldGlvbiwgY2hvb3NlIHRvIGxpY2Vuc2Ugc3VjaCBBcHBsZSBNb2RpZmljYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSwgb3Igb24gZGlmZmVyZW50IHRlcm1zIGZyb20gdGhvc2UgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZSBvciBtYXkgY2hvb3NlIG5vdCB0byBsaWNlbnNlIHRoZW0gYXQgYWxsLiAgCisKKzEyLiBUZXJtaW5hdGlvbi4gIAorCisxMi4xIFRlcm1pbmF0aW9uLiAgVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlOgorCisoYSkgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBmcm9tIEFwcGxlIGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSB0ZXJtKHMpIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggYnJlYWNoOworKGIpIGltbWVkaWF0ZWx5IGluIHRoZSBldmVudCBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAxMy41KGIpOyBvcgorKGMpIGF1dG9tYXRpY2FsbHkgd2l0aG91dCBub3RpY2UgZnJvbSBBcHBsZSBpZiBZb3UsIGF0IGFueSB0aW1lIGR1cmluZyB0aGUgdGVybSBvZiB0aGlzIExpY2Vuc2UsIGNvbW1lbmNlIGFuIGFjdGlvbiBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCBhZ2FpbnN0IEFwcGxlOyBwcm92aWRlZCB0aGF0IEFwcGxlIGRpZCBub3QgZmlyc3QgY29tbWVuY2UgYW4gYWN0aW9uIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50IGFnYWluc3QgWW91IGluIHRoYXQgaW5zdGFuY2UuCisKKzEyLjIgRWZmZWN0IG9mIFRlcm1pbmF0aW9uLiAgVXBvbiB0ZXJtaW5hdGlvbiwgWW91IGFncmVlIHRvIGltbWVkaWF0ZWx5IHN0b3AgYW55IGZ1cnRoZXIgdXNlLCByZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiwgc3VibGljZW5zaW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIENvdmVyZWQgQ29kZS4gIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGhhdmUgYmVlbiBwcm9wZXJseSBncmFudGVkIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgc2hvdWxkIHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBTZWN0aW9ucyAzLCA1LCA4LCA5LCAxMCwgMTEsIDEyLjIgYW5kIDEzLiAgTm8gcGFydHkgd2lsbCBiZSBsaWFibGUgdG8gYW55IG90aGVyIGZvciBjb21wZW5zYXRpb24sIGluZGVtbml0eSBvciBkYW1hZ2VzIG9mIGFueSBzb3J0IHNvbGVseSBhcyBhIHJlc3VsdCBvZiB0ZXJtaW5hdGluZyB0aGlzIExpY2Vuc2UgaW4gYWNjb3JkYW5jZSB3aXRoIGl0cyB0ZXJtcywgYW5kIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIGJlIHdpdGhvdXQgcHJlanVkaWNlIHRvIGFueSBvdGhlciByaWdodCBvciByZW1lZHkgb2YgYW55IHBhcnR5LgorCisxMy4gIE1pc2NlbGxhbmVvdXMuCisKKzEzLjEgR292ZXJubWVudCBFbmQgVXNlcnMuICAgVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0iIGFzIGRlZmluZWQgaW4gRkFSIDIuMTAxLiAgR292ZXJubWVudCBzb2Z0d2FyZSBhbmQgdGVjaG5pY2FsIGRhdGEgcmlnaHRzIGluIHRoZSBDb3ZlcmVkIENvZGUgaW5jbHVkZSBvbmx5IHRob3NlIHJpZ2h0cyBjdXN0b21hcmlseSBwcm92aWRlZCB0byB0aGUgcHVibGljIGFzIGRlZmluZWQgaW4gdGhpcyBMaWNlbnNlLiBUaGlzIGN1c3RvbWFyeSBjb21tZXJjaWFsIGxpY2Vuc2UgaW4gdGVjaG5pY2FsIGRhdGEgYW5kIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGluIGFjY29yZGFuY2Ugd2l0aCBGQVIgMTIuMjExIChUZWNobmljYWwgRGF0YSkgYW5kIDEyLjIxMiAoQ29tcHV0ZXIgU29mdHdhcmUpIGFuZCwgZm9yIERlcGFydG1lbnQgb2YgRGVmZW5zZSBwdXJjaGFzZXMsIERGQVIgMjUyLjIyNy03MDE1IChUZWNobmljYWwgRGF0YSAtLSBDb21tZXJjaWFsIEl0ZW1zKSBhbmQgMjI3LjcyMDItMyAoUmlnaHRzIGluIENvbW1lcmNpYWwgQ29tcHV0ZXIgU29mdHdhcmUgb3IgQ29tcHV0ZXIgU29mdHdhcmUgRG9jdW1lbnRhdGlvbikuICBBY2NvcmRpbmdseSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisxMy4yIFJlbGF0aW9uc2hpcCBvZiBQYXJ0aWVzLiAgVGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcyBjcmVhdGluZyBhbiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBqb2ludCB2ZW50dXJlIG9yIGFueSBvdGhlciBmb3JtIG9mIGxlZ2FsIGFzc29jaWF0aW9uIGJldHdlZW4gb3IgYW1vbmcgWW91LCBBcHBsZSBvciBhbnkgQ29udHJpYnV0b3IsIGFuZCBZb3Ugd2lsbCBub3QgcmVwcmVzZW50IHRvIHRoZSBjb250cmFyeSwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBhcHBlYXJhbmNlIG9yIG90aGVyd2lzZS4KKworMTMuMyBJbmRlcGVuZGVudCBEZXZlbG9wbWVudC4gICBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSB3aWxsIGltcGFpciBBcHBsZWBzIHJpZ2h0IHRvIGFjcXVpcmUsIGxpY2Vuc2UsIGRldmVsb3AsIGhhdmUgb3RoZXJzIGRldmVsb3AgZm9yIGl0LCBtYXJrZXQgYW5kL29yIGRpc3RyaWJ1dGUgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IHBlcmZvcm0gdGhlIHNhbWUgb3Igc2ltaWxhciBmdW5jdGlvbnMgYXMsIG9yIG90aGVyd2lzZSBjb21wZXRlIHdpdGgsIE1vZGlmaWNhdGlvbnMsIExhcmdlciBXb3JrcywgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IFlvdSBtYXkgZGV2ZWxvcCwgcHJvZHVjZSwgbWFya2V0IG9yIGRpc3RyaWJ1dGUuCisKKzEzLjQgV2FpdmVyOyBDb25zdHJ1Y3Rpb24uICBGYWlsdXJlIGJ5IEFwcGxlIG9yIGFueSBDb250cmlidXRvciB0byBlbmZvcmNlIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGRlZW1lZCBhIHdhaXZlciBvZiBmdXR1cmUgZW5mb3JjZW1lbnQgb2YgdGhhdCBvciBhbnkgb3RoZXIgcHJvdmlzaW9uLiAgQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgd2lsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisxMy41IFNldmVyYWJpbGl0eS4gIChhKSBJZiBmb3IgYW55IHJlYXNvbiBhIGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24gZmluZHMgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIG9yIHBvcnRpb24gdGhlcmVvZiwgdG8gYmUgdW5lbmZvcmNlYWJsZSwgdGhhdCBwcm92aXNpb24gb2YgdGhlIExpY2Vuc2Ugd2lsbCBiZSBlbmZvcmNlZCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWlzc2libGUgc28gYXMgdG8gZWZmZWN0IHRoZSBlY29ub21pYyBiZW5lZml0cyBhbmQgaW50ZW50IG9mIHRoZSBwYXJ0aWVzLCBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuICAoYikgTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIGlmIGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBvciByZXN0cmljdHMgWW91IGZyb20gZnVsbHkgYW5kL29yIHNwZWNpZmljYWxseSBjb21wbHlpbmcgd2l0aCBTZWN0aW9ucyAyIGFuZC9vciAzIG9yIHByZXZlbnRzIHRoZSBlbmZvcmNlYWJpbGl0eSBvZiBlaXRoZXIgb2YgdGhvc2UgU2VjdGlvbnMsIHRoaXMgTGljZW5zZSB3aWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSBhbmQgWW91IG11c3QgaW1tZWRpYXRlbHkgZGlzY29udGludWUgYW55IHVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGFuZCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgaXQgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuCisKKzEzLjYgRGlzcHV0ZSBSZXNvbHV0aW9uLiAgQW55IGxpdGlnYXRpb24gb3Igb3RoZXIgZGlzcHV0ZSByZXNvbHV0aW9uIGJldHdlZW4gWW91IGFuZCBBcHBsZSByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgdGFrZSBwbGFjZSBpbiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgYW5kIFlvdSBhbmQgQXBwbGUgaGVyZWJ5IGNvbnNlbnQgdG8gdGhlIHBlcnNvbmFsIGp1cmlzZGljdGlvbiBvZiwgYW5kIHZlbnVlIGluLCB0aGUgc3RhdGUgYW5kIGZlZGVyYWwgY291cnRzIHdpdGhpbiB0aGF0IERpc3RyaWN0IHdpdGggcmVzcGVjdCB0byB0aGlzIExpY2Vuc2UuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLgorCisxMy43IEVudGlyZSBBZ3JlZW1lbnQ7IEdvdmVybmluZyBMYXcuICBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGV4Y2VwdCB0aGF0IGJvZHkgb2YgQ2FsaWZvcm5pYSBsYXcgY29uY2VybmluZyBjb25mbGljdHMgb2YgbGF3LiAKKworV2hlcmUgWW91IGFyZSBsb2NhdGVkIGluIHRoZSBwcm92aW5jZSBvZiBRdWViZWMsIENhbmFkYSwgdGhlIGZvbGxvd2luZyBjbGF1c2UgYXBwbGllczogIFRoZSBwYXJ0aWVzIGhlcmVieSBjb25maXJtIHRoYXQgdGhleSBoYXZlIHJlcXVlc3RlZCB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYWxsIHJlbGF0ZWQgZG9jdW1lbnRzIGJlIGRyYWZ0ZWQgaW4gRW5nbGlzaC4gIExlcyBwYXJ0aWVzIG9udCBleGlnJiMyMzM7IHF1ZSBsZSBwciYjMjMzO3NlbnQgY29udHJhdCBldCB0b3VzIGxlcyBkb2N1bWVudHMgY29ubmV4ZXMgc29pZW50IHImIzIzMztkaWcmIzIzMztzIGVuIGFuZ2xhaXMuCisKK0VYSElCSVQgQS4gCisKKyJQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNyBBcHBsZSBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitUaGlzIGZpbGUgY29udGFpbnMgT3JpZ2luYWwgQ29kZSBhbmQvb3IgTW9kaWZpY2F0aW9ucyBvZiBPcmlnaW5hbCBDb2RlIGFzIGRlZmluZWQgaW4gYW5kIHRoYXQgYXJlIHN1YmplY3QgdG8gdGhlIEFwcGxlIFB1YmxpYyBTb3VyY2UgTGljZW5zZSBWZXJzaW9uIDIuMCAodGhlIGBMaWNlbnNlYCkuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuICBQbGVhc2Ugb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm9wZW5zb3VyY2UuYXBwbGUuY29tL2Fwc2wvIGFuZCByZWFkIGl0IGJlZm9yZSB1c2luZyB0aGlzIGZpbGUuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbGwgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgYXJlIGRpc3RyaWJ1dGVkIG9uIGFuIGBBUyBJU2AgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIEFORCBBUFBMRSBIRVJFQlkgRElTQ0xBSU1TIEFMTCBTVUNIIFdBUlJBTlRJRVMsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFFVSUVUIEVOSk9ZTUVOVCBPUiBOT04tSU5GUklOR0VNRU5ULiAgUGxlYXNlIHNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiIgCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQWRvYmUgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0Fkb2JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0Nzc5ZGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0Fkb2JlCkBAIC0wLDAgKzEsMTQgQEAKK0NvcHlyaWdodCAxOTkwLTE5OTggQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuCitBbGwgUmlnaHRzIFJlc2VydmVkLgorICAKK1BhdGVudHMgUGVuZGluZworCitOT1RJQ0U6IEFsbCBpbmZvcm1hdGlvbiBjb250YWluZWQgaGVyZWluIGlzIHRoZSBwcm9wZXJ0eSBvZiBBZG9iZQorU3lzdGVtcyBJbmNvcnBvcmF0ZWQuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCBmb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlIHByb3ZpZGVkCit0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMgbWFpbnRhaW5lZCBpbnRhY3QgYW5kIHRoYXQgdGhlIGNvbnRlbnRzCitvZiB0aGlzIGZpbGUgYXJlIG5vdCBhbHRlcmVkIGluIGFueSB3YXkgZnJvbSBpdHMgb3JpZ2luYWwgZm9ybS4KKworUG9zdFNjcmlwdCBhbmQgRGlzcGxheSBQb3N0U2NyaXB0IGFyZSB0cmFkZW1hcmtzIG9mIEFkb2JlIFN5c3RlbXMKK0luY29ycG9yYXRlZCB3aGljaCBtYXkgYmUgcmVnaXN0ZXJlZCBpbiBjZXJ0YWluIGp1cmlzZGljdGlvbnMuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FwYWNoZS0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FwYWNoZS0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZlOTA4OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXBhY2hlLTEuMApAQCAtMCwwICsxLDYxIEBACisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDE5OTUtMTk5OSBUaGUgQXBhY2hlIEdyb3VwLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBBcGFjaGUgR3JvdXAKKyAqICAgIGZvciB1c2UgaW4gdGhlIEFwYWNoZSBIVFRQIHNlcnZlciBwcm9qZWN0IChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCisgKgorICogNC4gVGhlIG5hbWVzICJBcGFjaGUgU2VydmVyIiBhbmQgIkFwYWNoZSBHcm91cCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIGFwYWNoZUBhcGFjaGUub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUiCisgKiAgICBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBHcm91cC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBBcGFjaGUgR3JvdXAKKyAqICAgIGZvciB1c2UgaW4gdGhlIEFwYWNoZSBIVFRQIHNlcnZlciBwcm9qZWN0IChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVBBQ0hFIEdST1VQIGBgQVMgSVNgYCBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIEdST1VQIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKKyAqIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIEdyb3VwIGFuZCB3YXMgb3JpZ2luYWxseSBiYXNlZAorICogb24gcHVibGljIGRvbWFpbiBzb2Z0d2FyZSB3cml0dGVuIGF0IHRoZSBOYXRpb25hbCBDZW50ZXIgZm9yCisgKiBTdXBlcmNvbXB1dGluZyBBcHBsaWNhdGlvbnMsIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMsIFVyYmFuYS1DaGFtcGFpZ24uCisgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIEdyb3VwIGFuZCB0aGUgQXBhY2hlIEhUVFAgc2VydmVyCisgKiBwcm9qZWN0LCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KKyAqCisgKi8KKworCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcGFjaGUtMS4xIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcGFjaGUtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNWVjMDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FwYWNoZS0xLjEKQEAgLTAsMCArMSw2MCBAQAorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMCBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCisgKiByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKKyAqICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKKyAqICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgorICogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAorICogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KKyAqCisgKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAorICogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUiLAorICogICAgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVNgYCBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQorICogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEZvciBtb3JlCisgKiBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUKKyAqIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KKyAqCisgKiBQb3J0aW9ucyBvZiB0aGlzIHNvZnR3YXJlIGFyZSBiYXNlZCB1cG9uIHB1YmxpYyBkb21haW4gc29mdHdhcmUKKyAqIG9yaWdpbmFsbHkgd3JpdHRlbiBhdCB0aGUgTmF0aW9uYWwgQ2VudGVyIGZvciBTdXBlcmNvbXB1dGluZyBBcHBsaWNhdGlvbnMsCisgKiBVbml2ZXJzaXR5IG9mIElsbGlub2lzLCBVcmJhbmEtQ2hhbXBhaWduLgorICovCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcGFjaGUtMi4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcGFjaGUtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMjAxYWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FwYWNoZS0yLjAKQEAgLTAsMCArMSwyMDQgQEAKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLworCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KKworICAgMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCisgICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KKworICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KKworICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAorICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgorICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKKyAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCisgICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCisgICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisgICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAorICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAorICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAorICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorCisgICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgorICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQorICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCisgICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisgICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0CisgICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCisgICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCisgICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcworICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCisgICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCisgICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisgICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZworICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucworICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CisgICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCisgICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgorICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAorICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCisgICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQorICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0CisgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQorICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisKKyAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKKyAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgorCisgICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKKyAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQorICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KKworICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCisgICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKKyAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCisgICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgorICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQorICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKKyAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCisgICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCisgICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAorICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCisgICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKyAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCisgICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKKyAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91CisgICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKKyAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAorCisgICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCisKKyAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcworICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKKyAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAorICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKKyAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCisKKyAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cworICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKKyAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKKyAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKKyAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAorICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKKyAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKKyAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCisgICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCisgICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAorICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCisgICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKKyAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKKyAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKKyAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAorICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgorICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCisgICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKKyAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKyAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKKyAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaworICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgorICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQorICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKKyAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQorICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAorICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCisgICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCisgICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCisgICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKKyAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKKyAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQorICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55CisgICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAorICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCisgICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQorICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKKyAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKKyAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQorICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQorICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAorICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKKyAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKKyAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZworICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKKyAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCisgICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcworICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKKyAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCisgICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCisgICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKKyAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KKyAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCisgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLgorCisgICAgICBUbyBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZworICAgICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgIltdIgorICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbmB0IGluY2x1ZGUKKyAgICAgIHRoZSBicmFja2V0cyEpICBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlCisgICAgICBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZCB0aGF0IGEKKyAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKKyAgICAgIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgorICAgICAgaWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLgorCisgICBDb3B5cmlnaHQgW3l5eXldIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0KKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcnRpc3RpYy0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FydGlzdGljLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDdlNGQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcnRpc3RpYy0xLjAKQEAgLTAsMCArMSw1MCBAQAorCitUaGUgQXJ0aXN0aWMgTGljZW5zZQorUHJlYW1ibGUKKworVGhlIGludGVudCBvZiB0aGlzIGRvY3VtZW50IGlzIHRvIHN0YXRlIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGEgUGFja2FnZSBtYXkgYmUgY29waWVkLCBzdWNoIHRoYXQgdGhlIENvcHlyaWdodCBIb2xkZXIgbWFpbnRhaW5zIHNvbWUgc2VtYmxhbmNlIG9mIGFydGlzdGljIGNvbnRyb2wgb3ZlciB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlIHBhY2thZ2UsIHdoaWxlIGdpdmluZyB0aGUgdXNlcnMgb2YgdGhlIHBhY2thZ2UgdGhlIHJpZ2h0IHRvIHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGUgUGFja2FnZSBpbiBhIG1vcmUtb3ItbGVzcyBjdXN0b21hcnkgZmFzaGlvbiwgcGx1cyB0aGUgcmlnaHQgdG8gbWFrZSByZWFzb25hYmxlIG1vZGlmaWNhdGlvbnMuCisKK0RlZmluaXRpb25zOgorCisiUGFja2FnZSIgcmVmZXJzIHRvIHRoZSBjb2xsZWN0aW9uIG9mIGZpbGVzIGRpc3RyaWJ1dGVkIGJ5IHRoZSBDb3B5cmlnaHQgSG9sZGVyLCBhbmQgZGVyaXZhdGl2ZXMgb2YgdGhhdCBjb2xsZWN0aW9uIG9mIGZpbGVzIGNyZWF0ZWQgdGhyb3VnaCB0ZXh0dWFsIG1vZGlmaWNhdGlvbi4KKyJTdGFuZGFyZCBWZXJzaW9uIiByZWZlcnMgdG8gc3VjaCBhIFBhY2thZ2UgaWYgaXQgaGFzIG5vdCBiZWVuIG1vZGlmaWVkLCBvciBoYXMgYmVlbiBtb2RpZmllZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHdpc2hlcyBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlci4KKyJDb3B5cmlnaHQgSG9sZGVyIiBpcyB3aG9ldmVyIGlzIG5hbWVkIGluIHRoZSBjb3B5cmlnaHQgb3IgY29weXJpZ2h0cyBmb3IgdGhlIHBhY2thZ2UuCisiWW91IiBpcyB5b3UsIGlmIHlvdWByZSB0aGlua2luZyBhYm91dCBjb3B5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGlzIFBhY2thZ2UuCisiUmVhc29uYWJsZSBjb3B5aW5nIGZlZSIgaXMgd2hhdGV2ZXIgeW91IGNhbiBqdXN0aWZ5IG9uIHRoZSBiYXNpcyBvZiBtZWRpYSBjb3N0LCBkdXBsaWNhdGlvbiBjaGFyZ2VzLCB0aW1lIG9mIHBlb3BsZSBpbnZvbHZlZCwgYW5kIHNvIG9uLiAoWW91IHdpbGwgbm90IGJlIHJlcXVpcmVkIHRvIGp1c3RpZnkgaXQgdG8gdGhlIENvcHlyaWdodCBIb2xkZXIsIGJ1dCBvbmx5IHRvIHRoZSBjb21wdXRpbmcgY29tbXVuaXR5IGF0IGxhcmdlIGFzIGEgbWFya2V0IHRoYXQgbXVzdCBiZWFyIHRoZSBmZWUuKQorIkZyZWVseSBBdmFpbGFibGUiIG1lYW5zIHRoYXQgbm8gZmVlIGlzIGNoYXJnZWQgZm9yIHRoZSBpdGVtIGl0c2VsZiwgdGhvdWdoIHRoZXJlIG1heSBiZSBmZWVzIGludm9sdmVkIGluIGhhbmRsaW5nIHRoZSBpdGVtLiBJdCBhbHNvIG1lYW5zIHRoYXQgcmVjaXBpZW50cyBvZiB0aGUgaXRlbSBtYXkgcmVkaXN0cmlidXRlIGl0IHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgdGhleSByZWNlaXZlZCBpdC4KKzEuIFlvdSBtYXkgbWFrZSBhbmQgZ2l2ZSBhd2F5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgc291cmNlIGZvcm0gb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhpcyBQYWNrYWdlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIHByb3ZpZGVkIHRoYXQgeW91IGR1cGxpY2F0ZSBhbGwgb2YgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2VzIGFuZCBhc3NvY2lhdGVkIGRpc2NsYWltZXJzLgorCisyLiBZb3UgbWF5IGFwcGx5IGJ1ZyBmaXhlcywgcG9ydGFiaWxpdHkgZml4ZXMgYW5kIG90aGVyIG1vZGlmaWNhdGlvbnMgZGVyaXZlZCBmcm9tIHRoZSBQdWJsaWMgRG9tYWluIG9yIGZyb20gdGhlIENvcHlyaWdodCBIb2xkZXIuIEEgUGFja2FnZSBtb2RpZmllZCBpbiBzdWNoIGEgd2F5IHNoYWxsIHN0aWxsIGJlIGNvbnNpZGVyZWQgdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKKzMuIFlvdSBtYXkgb3RoZXJ3aXNlIG1vZGlmeSB5b3VyIGNvcHkgb2YgdGhpcyBQYWNrYWdlIGluIGFueSB3YXksIHByb3ZpZGVkIHRoYXQgeW91IGluc2VydCBhIHByb21pbmVudCBub3RpY2UgaW4gZWFjaCBjaGFuZ2VkIGZpbGUgc3RhdGluZyBob3cgYW5kIHdoZW4geW91IGNoYW5nZWQgdGhhdCBmaWxlLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6CisKK2EpIHBsYWNlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgUHVibGljIERvbWFpbiBvciBvdGhlcndpc2UgbWFrZSB0aGVtIEZyZWVseSBBdmFpbGFibGUsIHN1Y2ggYXMgYnkgcG9zdGluZyBzYWlkIG1vZGlmaWNhdGlvbnMgdG8gVXNlbmV0IG9yIGFuIGVxdWl2YWxlbnQgbWVkaXVtLCBvciBwbGFjaW5nIHRoZSBtb2RpZmljYXRpb25zIG9uIGEgbWFqb3IgYXJjaGl2ZSBzaXRlIHN1Y2ggYXMgZnRwLnV1Lm5ldCwgb3IgYnkgYWxsb3dpbmcgdGhlIENvcHlyaWdodCBIb2xkZXIgdG8gaW5jbHVkZSB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhlIFBhY2thZ2UuCisKK2IpIHVzZSB0aGUgbW9kaWZpZWQgUGFja2FnZSBvbmx5IHdpdGhpbiB5b3VyIGNvcnBvcmF0aW9uIG9yIG9yZ2FuaXphdGlvbi4KKworYykgcmVuYW1lIGFueSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgc28gdGhlIG5hbWVzIGRvIG5vdCBjb25mbGljdCB3aXRoIHN0YW5kYXJkIGV4ZWN1dGFibGVzLCB3aGljaCBtdXN0IGFsc28gYmUgcHJvdmlkZWQsIGFuZCBwcm92aWRlIGEgc2VwYXJhdGUgbWFudWFsIHBhZ2UgZm9yIGVhY2ggbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGUgdGhhdCBjbGVhcmx5IGRvY3VtZW50cyBob3cgaXQgZGlmZmVycyBmcm9tIHRoZSBTdGFuZGFyZCBWZXJzaW9uLgorCitkKSBtYWtlIG90aGVyIGRpc3RyaWJ1dGlvbiBhcnJhbmdlbWVudHMgd2l0aCB0aGUgQ29weXJpZ2h0IEhvbGRlci4KKworNC4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBwcm9ncmFtcyBvZiB0aGlzIFBhY2thZ2UgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtLCBwcm92aWRlZCB0aGF0IHlvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzoKKworYSkgZGlzdHJpYnV0ZSBhIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhlIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJ5IGZpbGVzLCB0b2dldGhlciB3aXRoIGluc3RydWN0aW9ucyAoaW4gdGhlIG1hbnVhbCBwYWdlIG9yIGVxdWl2YWxlbnQpIG9uIHdoZXJlIHRvIGdldCB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworYikgYWNjb21wYW55IHRoZSBkaXN0cmlidXRpb24gd2l0aCB0aGUgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2Ugb2YgdGhlIFBhY2thZ2Ugd2l0aCB5b3VyIG1vZGlmaWNhdGlvbnMuCisKK2MpIGFjY29tcGFueSBhbnkgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBTdGFuZGFyZCBWZXJzaW9uIGV4ZWN1dGFibGVzLCBnaXZpbmcgdGhlIG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBub24tc3RhbmRhcmQgbmFtZXMsIGFuZCBjbGVhcmx5IGRvY3VtZW50aW5nIHRoZSBkaWZmZXJlbmNlcyBpbiBtYW51YWwgcGFnZXMgKG9yIGVxdWl2YWxlbnQpLCB0b2dldGhlciB3aXRoIGluc3RydWN0aW9ucyBvbiB3aGVyZSB0byBnZXQgdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKK2QpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBDb3B5cmlnaHQgSG9sZGVyLgorCis1LiBZb3UgbWF5IGNoYXJnZSBhIHJlYXNvbmFibGUgY29weWluZyBmZWUgZm9yIGFueSBkaXN0cmlidXRpb24gb2YgdGhpcyBQYWNrYWdlLiBZb3UgbWF5IGNoYXJnZSBhbnkgZmVlIHlvdSBjaG9vc2UgZm9yIHN1cHBvcnQgb2YgdGhpcyBQYWNrYWdlLiBZb3UgbWF5IG5vdCBjaGFyZ2UgYSBmZWUgZm9yIHRoaXMgUGFja2FnZSBpdHNlbGYuIEhvd2V2ZXIsIHlvdSBtYXkgZGlzdHJpYnV0ZSB0aGlzIFBhY2thZ2UgaW4gYWdncmVnYXRlIHdpdGggb3RoZXIgKHBvc3NpYmx5IGNvbW1lcmNpYWwpIHByb2dyYW1zIGFzIHBhcnQgb2YgYSBsYXJnZXIgKHBvc3NpYmx5IGNvbW1lcmNpYWwpIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBwcm92aWRlZCB0aGF0IHlvdSBkbyBub3QgYWR2ZXJ0aXNlIHRoaXMgUGFja2FnZSBhcyBhIHByb2R1Y3Qgb2YgeW91ciBvd24uCisKKzYuIFRoZSBzY3JpcHRzIGFuZCBsaWJyYXJ5IGZpbGVzIHN1cHBsaWVkIGFzIGlucHV0IHRvIG9yIHByb2R1Y2VkIGFzIG91dHB1dCBmcm9tIHRoZSBwcm9ncmFtcyBvZiB0aGlzIFBhY2thZ2UgZG8gbm90IGF1dG9tYXRpY2FsbHkgZmFsbCB1bmRlciB0aGUgY29weXJpZ2h0IG9mIHRoaXMgUGFja2FnZSwgYnV0IGJlbG9uZyB0byB3aG9tZXZlciBnZW5lcmF0ZWQgdGhlbSwgYW5kIG1heSBiZSBzb2xkIGNvbW1lcmNpYWxseSwgYW5kIG1heSBiZSBhZ2dyZWdhdGVkIHdpdGggdGhpcyBQYWNrYWdlLgorCis3LiBDIG9yIHBlcmwgc3Vicm91dGluZXMgc3VwcGxpZWQgYnkgeW91IGFuZCBsaW5rZWQgaW50byB0aGlzIFBhY2thZ2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGlzIFBhY2thZ2UuCisKKzguIFRoZSBuYW1lIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKzkuIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworVGhlIEVuZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FydGlzdGljLTIuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXJ0aXN0aWMtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZjhkMTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FydGlzdGljLTIuMApAQCAtMCwwICsxLDIwMyBAQAorCisgICAgICAgICBUaGUgQXJ0aXN0aWMgTGljZW5zZSAyLjAKKworICAgICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNiwgVGhlIFBlcmwgRm91bmRhdGlvbi4KKworICAgICBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyAgICAgIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCitQcmVhbWJsZQorCitUaGlzIGxpY2Vuc2UgZXN0YWJsaXNoZXMgdGhlIHRlcm1zIHVuZGVyIHdoaWNoIGEgZ2l2ZW4gZnJlZSBzb2Z0d2FyZQorUGFja2FnZSBtYXkgYmUgY29waWVkLCBtb2RpZmllZCwgZGlzdHJpYnV0ZWQsIGFuZC9vciByZWRpc3RyaWJ1dGVkLgorVGhlIGludGVudCBpcyB0aGF0IHRoZSBDb3B5cmlnaHQgSG9sZGVyIG1haW50YWlucyBzb21lIGFydGlzdGljCitjb250cm9sIG92ZXIgdGhlIGRldmVsb3BtZW50IG9mIHRoYXQgUGFja2FnZSB3aGlsZSBzdGlsbCBrZWVwaW5nIHRoZQorUGFja2FnZSBhdmFpbGFibGUgYXMgb3BlbiBzb3VyY2UgYW5kIGZyZWUgc29mdHdhcmUuCisKK1lvdSBhcmUgYWx3YXlzIHBlcm1pdHRlZCB0byBtYWtlIGFycmFuZ2VtZW50cyB3aG9sbHkgb3V0c2lkZSBvZiB0aGlzCitsaWNlbnNlIGRpcmVjdGx5IHdpdGggdGhlIENvcHlyaWdodCBIb2xkZXIgb2YgYSBnaXZlbiBQYWNrYWdlLiAgSWYgdGhlCit0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UgZG8gbm90IHBlcm1pdCB0aGUgZnVsbCB1c2UgdGhhdCB5b3UgcHJvcG9zZSB0bworbWFrZSBvZiB0aGUgUGFja2FnZSwgeW91IHNob3VsZCBjb250YWN0IHRoZSBDb3B5cmlnaHQgSG9sZGVyIGFuZCBzZWVrCithIGRpZmZlcmVudCBsaWNlbnNpbmcgYXJyYW5nZW1lbnQuIAorCitEZWZpbml0aW9ucworCisgICAgIkNvcHlyaWdodCBIb2xkZXIiIG1lYW5zIHRoZSBpbmRpdmlkdWFsKHMpIG9yIG9yZ2FuaXphdGlvbihzKQorICAgIG5hbWVkIGluIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgZW50aXJlIFBhY2thZ2UuCisKKyAgICAiQ29udHJpYnV0b3IiIG1lYW5zIGFueSBwYXJ0eSB0aGF0IGhhcyBjb250cmlidXRlZCBjb2RlIG9yIG90aGVyCisgICAgbWF0ZXJpYWwgdG8gdGhlIFBhY2thZ2UsIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ29weXJpZ2h0IEhvbGRlcmBzCisgICAgcHJvY2VkdXJlcy4KKworICAgICJZb3UiIGFuZCAieW91ciIgbWVhbnMgYW55IHBlcnNvbiB3aG8gd291bGQgbGlrZSB0byBjb3B5LAorICAgIGRpc3RyaWJ1dGUsIG9yIG1vZGlmeSB0aGUgUGFja2FnZS4KKworICAgICJQYWNrYWdlIiBtZWFucyB0aGUgY29sbGVjdGlvbiBvZiBmaWxlcyBkaXN0cmlidXRlZCBieSB0aGUKKyAgICBDb3B5cmlnaHQgSG9sZGVyLCBhbmQgZGVyaXZhdGl2ZXMgb2YgdGhhdCBjb2xsZWN0aW9uIGFuZC9vciBvZgorICAgIHRob3NlIGZpbGVzLiBBIGdpdmVuIFBhY2thZ2UgbWF5IGNvbnNpc3Qgb2YgZWl0aGVyIHRoZSBTdGFuZGFyZAorICAgIFZlcnNpb24sIG9yIGEgTW9kaWZpZWQgVmVyc2lvbi4KKworICAgICJEaXN0cmlidXRlIiBtZWFucyBwcm92aWRpbmcgYSBjb3B5IG9mIHRoZSBQYWNrYWdlIG9yIG1ha2luZyBpdAorICAgIGFjY2Vzc2libGUgdG8gYW55b25lIGVsc2UsIG9yIGluIHRoZSBjYXNlIG9mIGEgY29tcGFueSBvcgorICAgIG9yZ2FuaXphdGlvbiwgdG8gb3RoZXJzIG91dHNpZGUgb2YgeW91ciBjb21wYW55IG9yIG9yZ2FuaXphdGlvbi4KKworICAgICJEaXN0cmlidXRvciBGZWUiIG1lYW5zIGFueSBmZWUgdGhhdCB5b3UgY2hhcmdlIGZvciBEaXN0cmlidXRpbmcKKyAgICB0aGlzIFBhY2thZ2Ugb3IgcHJvdmlkaW5nIHN1cHBvcnQgZm9yIHRoaXMgUGFja2FnZSB0byBhbm90aGVyCisgICAgcGFydHkuICBJdCBkb2VzIG5vdCBtZWFuIGxpY2Vuc2luZyBmZWVzLgorCisgICAgIlN0YW5kYXJkIFZlcnNpb24iIHJlZmVycyB0byB0aGUgUGFja2FnZSBpZiBpdCBoYXMgbm90IGJlZW4KKyAgICBtb2RpZmllZCwgb3IgaGFzIGJlZW4gbW9kaWZpZWQgb25seSBpbiB3YXlzIGV4cGxpY2l0bHkgcmVxdWVzdGVkCisgICAgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIuCisKKyAgICAiTW9kaWZpZWQgVmVyc2lvbiIgbWVhbnMgdGhlIFBhY2thZ2UsIGlmIGl0IGhhcyBiZWVuIGNoYW5nZWQsIGFuZAorICAgIHN1Y2ggY2hhbmdlcyB3ZXJlIG5vdCBleHBsaWNpdGx5IHJlcXVlc3RlZCBieSB0aGUgQ29weXJpZ2h0CisgICAgSG9sZGVyLiAKKworICAgICJPcmlnaW5hbCBMaWNlbnNlIiBtZWFucyB0aGlzIEFydGlzdGljIExpY2Vuc2UgYXMgRGlzdHJpYnV0ZWQgd2l0aAorICAgIHRoZSBTdGFuZGFyZCBWZXJzaW9uIG9mIHRoZSBQYWNrYWdlLCBpbiBpdHMgY3VycmVudCB2ZXJzaW9uIG9yIGFzCisgICAgaXQgbWF5IGJlIG1vZGlmaWVkIGJ5IFRoZSBQZXJsIEZvdW5kYXRpb24gaW4gdGhlIGZ1dHVyZS4KKworICAgICJTb3VyY2UiIGZvcm0gbWVhbnMgdGhlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uIHNvdXJjZSwgYW5kCisgICAgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgdGhlIFBhY2thZ2UuCisKKyAgICAiQ29tcGlsZWQiIGZvcm0gbWVhbnMgdGhlIGNvbXBpbGVkIGJ5dGVjb2RlLCBvYmplY3QgY29kZSwgYmluYXJ5LAorICAgIG9yIGFueSBvdGhlciBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwgdHJhbnNmb3JtYXRpb24gb3IKKyAgICB0cmFuc2xhdGlvbiBvZiB0aGUgU291cmNlIGZvcm0uCisKKworUGVybWlzc2lvbiBmb3IgVXNlIGFuZCBNb2RpZmljYXRpb24gV2l0aG91dCBEaXN0cmlidXRpb24KKworKDEpICBZb3UgYXJlIHBlcm1pdHRlZCB0byB1c2UgdGhlIFN0YW5kYXJkIFZlcnNpb24gYW5kIGNyZWF0ZSBhbmQgdXNlCitNb2RpZmllZCBWZXJzaW9ucyBmb3IgYW55IHB1cnBvc2Ugd2l0aG91dCByZXN0cmljdGlvbiwgcHJvdmlkZWQgdGhhdAoreW91IGRvIG5vdCBEaXN0cmlidXRlIHRoZSBNb2RpZmllZCBWZXJzaW9uLgorCisKK1Blcm1pc3Npb25zIGZvciBSZWRpc3RyaWJ1dGlvbiBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbgorCisoMikgIFlvdSBtYXkgRGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFNvdXJjZSBmb3JtIG9mIHRoZQorU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGlzIFBhY2thZ2UgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJlc3RyaWN0aW9uLAorZWl0aGVyIGdyYXRpcyBvciBmb3IgYSBEaXN0cmlidXRvciBGZWUsIHByb3ZpZGVkIHRoYXQgeW91IGR1cGxpY2F0ZQorYWxsIG9mIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlcyBhbmQgYXNzb2NpYXRlZCBkaXNjbGFpbWVycy4gIEF0Cit5b3VyIGRpc2NyZXRpb24sIHN1Y2ggdmVyYmF0aW0gY29waWVzIG1heSBvciBtYXkgbm90IGluY2x1ZGUgYQorQ29tcGlsZWQgZm9ybSBvZiB0aGUgUGFja2FnZS4KKworKDMpICBZb3UgbWF5IGFwcGx5IGFueSBidWcgZml4ZXMsIHBvcnRhYmlsaXR5IGNoYW5nZXMsIGFuZCBvdGhlcgorbW9kaWZpY2F0aW9ucyBtYWRlIGF2YWlsYWJsZSBmcm9tIHRoZSBDb3B5cmlnaHQgSG9sZGVyLiAgVGhlIHJlc3VsdGluZworUGFja2FnZSB3aWxsIHN0aWxsIGJlIGNvbnNpZGVyZWQgdGhlIFN0YW5kYXJkIFZlcnNpb24sIGFuZCBhcyBzdWNoCit3aWxsIGJlIHN1YmplY3QgdG8gdGhlIE9yaWdpbmFsIExpY2Vuc2UuCisKKworRGlzdHJpYnV0aW9uIG9mIE1vZGlmaWVkIFZlcnNpb25zIG9mIHRoZSBQYWNrYWdlIGFzIFNvdXJjZSAKKworKDQpICBZb3UgbWF5IERpc3RyaWJ1dGUgeW91ciBNb2RpZmllZCBWZXJzaW9uIGFzIFNvdXJjZSAoZWl0aGVyIGdyYXRpcworb3IgZm9yIGEgRGlzdHJpYnV0b3IgRmVlLCBhbmQgd2l0aCBvciB3aXRob3V0IGEgQ29tcGlsZWQgZm9ybSBvZiB0aGUKK01vZGlmaWVkIFZlcnNpb24pIHByb3ZpZGVkIHRoYXQgeW91IGNsZWFybHkgZG9jdW1lbnQgaG93IGl0IGRpZmZlcnMKK2Zyb20gdGhlIFN0YW5kYXJkIFZlcnNpb24sIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBkb2N1bWVudGluZworYW55IG5vbi1zdGFuZGFyZCBmZWF0dXJlcywgZXhlY3V0YWJsZXMsIG9yIG1vZHVsZXMsIGFuZCBwcm92aWRlZCB0aGF0Cit5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAoYSkgIG1ha2UgdGhlIE1vZGlmaWVkIFZlcnNpb24gYXZhaWxhYmxlIHRvIHRoZSBDb3B5cmlnaHQgSG9sZGVyCisgICAgb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24sIHVuZGVyIHRoZSBPcmlnaW5hbCBMaWNlbnNlLCBzbyB0aGF0IHRoZQorICAgIENvcHlyaWdodCBIb2xkZXIgbWF5IGluY2x1ZGUgeW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBTdGFuZGFyZAorICAgIFZlcnNpb24uCisKKyAgICAoYikgIGVuc3VyZSB0aGF0IGluc3RhbGxhdGlvbiBvZiB5b3VyIE1vZGlmaWVkIFZlcnNpb24gZG9lcyBub3QKKyAgICBwcmV2ZW50IHRoZSB1c2VyIGluc3RhbGxpbmcgb3IgcnVubmluZyB0aGUgU3RhbmRhcmQgVmVyc2lvbi4gSW4KKyAgICBhZGRpdGlvbiwgdGhlIE1vZGlmaWVkIFZlcnNpb24gbXVzdCBiZWFyIGEgbmFtZSB0aGF0IGlzIGRpZmZlcmVudAorICAgIGZyb20gdGhlIG5hbWUgb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKKyAgICAoYykgIGFsbG93IGFueW9uZSB3aG8gcmVjZWl2ZXMgYSBjb3B5IG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIHRvCisgICAgbWFrZSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gYXZhaWxhYmxlIHRvIG90aGVycworICAgIHVuZGVyCisgIAorIChpKSAgdGhlIE9yaWdpbmFsIExpY2Vuc2Ugb3IKKworIChpaSkgIGEgbGljZW5zZSB0aGF0IHBlcm1pdHMgdGhlIGxpY2Vuc2VlIHRvIGZyZWVseSBjb3B5LAorIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZSBNb2RpZmllZCBWZXJzaW9uIHVzaW5nIHRoZSBzYW1lCisgbGljZW5zaW5nIHRlcm1zIHRoYXQgYXBwbHkgdG8gdGhlIGNvcHkgdGhhdCB0aGUgbGljZW5zZWUKKyByZWNlaXZlZCwgYW5kIHJlcXVpcmVzIHRoYXQgdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBNb2RpZmllZAorIFZlcnNpb24sIGFuZCBvZiBhbnkgd29ya3MgZGVyaXZlZCBmcm9tIGl0LCBiZSBtYWRlIGZyZWVseQorIGF2YWlsYWJsZSBpbiB0aGF0IGxpY2Vuc2UgZmVlcyBhcmUgcHJvaGliaXRlZCBidXQgRGlzdHJpYnV0b3IKKyBGZWVzIGFyZSBhbGxvd2VkLgorCisKK0Rpc3RyaWJ1dGlvbiBvZiBDb21waWxlZCBGb3JtcyBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbiAKK29yIE1vZGlmaWVkIFZlcnNpb25zIHdpdGhvdXQgdGhlIFNvdXJjZQorCisoNSkgIFlvdSBtYXkgRGlzdHJpYnV0ZSBDb21waWxlZCBmb3JtcyBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbiB3aXRob3V0Cit0aGUgU291cmNlLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIGNvbXBsZXRlIGluc3RydWN0aW9ucyBvbiBob3cgdG8KK2dldCB0aGUgU291cmNlIG9mIHRoZSBTdGFuZGFyZCBWZXJzaW9uLiAgU3VjaCBpbnN0cnVjdGlvbnMgbXVzdCBiZQordmFsaWQgYXQgdGhlIHRpbWUgb2YgeW91ciBkaXN0cmlidXRpb24uICBJZiB0aGVzZSBpbnN0cnVjdGlvbnMsIGF0IGFueQordGltZSB3aGlsZSB5b3UgYXJlIGNhcnJ5aW5nIG91dCBzdWNoIGRpc3RyaWJ1dGlvbiwgYmVjb21lIGludmFsaWQsIHlvdQorbXVzdCBwcm92aWRlIG5ldyBpbnN0cnVjdGlvbnMgb24gZGVtYW5kIG9yIGNlYXNlIGZ1cnRoZXIgZGlzdHJpYnV0aW9uLgorSWYgeW91IHByb3ZpZGUgdmFsaWQgaW5zdHJ1Y3Rpb25zIG9yIGNlYXNlIGRpc3RyaWJ1dGlvbiB3aXRoaW4gdGhpcnR5CitkYXlzIGFmdGVyIHlvdSBiZWNvbWUgYXdhcmUgdGhhdCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBpbnZhbGlkLCB0aGVuCit5b3UgZG8gbm90IGZvcmZlaXQgYW55IG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgbGljZW5zZS4KKworKDYpICBZb3UgbWF5IERpc3RyaWJ1dGUgYSBNb2RpZmllZCBWZXJzaW9uIGluIENvbXBpbGVkIGZvcm0gd2l0aG91dAordGhlIFNvdXJjZSwgcHJvdmlkZWQgdGhhdCB5b3UgY29tcGx5IHdpdGggU2VjdGlvbiA0IHdpdGggcmVzcGVjdCB0bwordGhlIFNvdXJjZSBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbi4KKworCitBZ2dyZWdhdGluZyBvciBMaW5raW5nIHRoZSBQYWNrYWdlIAorCisoNykgIFlvdSBtYXkgYWdncmVnYXRlIHRoZSBQYWNrYWdlIChlaXRoZXIgdGhlIFN0YW5kYXJkIFZlcnNpb24gb3IKK01vZGlmaWVkIFZlcnNpb24pIHdpdGggb3RoZXIgcGFja2FnZXMgYW5kIERpc3RyaWJ1dGUgdGhlIHJlc3VsdGluZworYWdncmVnYXRpb24gcHJvdmlkZWQgdGhhdCB5b3UgZG8gbm90IGNoYXJnZSBhIGxpY2Vuc2luZyBmZWUgZm9yIHRoZQorUGFja2FnZS4gIERpc3RyaWJ1dG9yIEZlZXMgYXJlIHBlcm1pdHRlZCwgYW5kIGxpY2Vuc2luZyBmZWVzIGZvciBvdGhlcgorY29tcG9uZW50cyBpbiB0aGUgYWdncmVnYXRpb24gYXJlIHBlcm1pdHRlZC4gVGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZQorYXBwbHkgdG8gdGhlIHVzZSBhbmQgRGlzdHJpYnV0aW9uIG9mIHRoZSBTdGFuZGFyZCBvciBNb2RpZmllZCBWZXJzaW9ucworYXMgaW5jbHVkZWQgaW4gdGhlIGFnZ3JlZ2F0aW9uLgorCisoOCkgWW91IGFyZSBwZXJtaXR0ZWQgdG8gbGluayBNb2RpZmllZCBhbmQgU3RhbmRhcmQgVmVyc2lvbnMgd2l0aAorb3RoZXIgd29ya3MsIHRvIGVtYmVkIHRoZSBQYWNrYWdlIGluIGEgbGFyZ2VyIHdvcmsgb2YgeW91ciBvd24sIG9yIHRvCitidWlsZCBzdGFuZC1hbG9uZSBiaW5hcnkgb3IgYnl0ZWNvZGUgdmVyc2lvbnMgb2YgYXBwbGljYXRpb25zIHRoYXQKK2luY2x1ZGUgdGhlIFBhY2thZ2UsIGFuZCBEaXN0cmlidXRlIHRoZSByZXN1bHQgd2l0aG91dCByZXN0cmljdGlvbiwKK3Byb3ZpZGVkIHRoZSByZXN1bHQgZG9lcyBub3QgZXhwb3NlIGEgZGlyZWN0IGludGVyZmFjZSB0byB0aGUgUGFja2FnZS4KKworCitJdGVtcyBUaGF0IGFyZSBOb3QgQ29uc2lkZXJlZCBQYXJ0IG9mIGEgTW9kaWZpZWQgVmVyc2lvbiAKKworKDkpIFdvcmtzIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgbW9kdWxlcyBhbmQgc2NyaXB0cykgdGhhdAorbWVyZWx5IGV4dGVuZCBvciBtYWtlIHVzZSBvZiB0aGUgUGFja2FnZSwgZG8gbm90LCBieSB0aGVtc2VsdmVzLCBjYXVzZQordGhlIFBhY2thZ2UgdG8gYmUgYSBNb2RpZmllZCBWZXJzaW9uLiAgSW4gYWRkaXRpb24sIHN1Y2ggd29ya3MgYXJlIG5vdAorY29uc2lkZXJlZCBwYXJ0cyBvZiB0aGUgUGFja2FnZSBpdHNlbGYsIGFuZCBhcmUgbm90IHN1YmplY3QgdG8gdGhlCit0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UuCisKKworR2VuZXJhbCBQcm92aXNpb25zCisKKygxMCkgIEFueSB1c2UsIG1vZGlmaWNhdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU3RhbmRhcmQgb3IKK01vZGlmaWVkIFZlcnNpb25zIGlzIGdvdmVybmVkIGJ5IHRoaXMgQXJ0aXN0aWMgTGljZW5zZS4gQnkgdXNpbmcsCittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQYWNrYWdlLCB5b3UgYWNjZXB0IHRoaXMgbGljZW5zZS4gRG8gbm90Cit1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGUgUGFja2FnZSwgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcworbGljZW5zZS4KKworKDExKSAgSWYgeW91ciBNb2RpZmllZCBWZXJzaW9uIGhhcyBiZWVuIGRlcml2ZWQgZnJvbSBhIE1vZGlmaWVkCitWZXJzaW9uIG1hZGUgYnkgc29tZW9uZSBvdGhlciB0aGFuIHlvdSwgeW91IGFyZSBuZXZlcnRoZWxlc3MgcmVxdWlyZWQKK3RvIGVuc3VyZSB0aGF0IHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBjb21wbGllcyB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YKK3RoaXMgbGljZW5zZS4KKworKDEyKSAgVGhpcyBsaWNlbnNlIGRvZXMgbm90IGdyYW50IHlvdSB0aGUgcmlnaHQgdG8gdXNlIGFueSB0cmFkZW1hcmssCitzZXJ2aWNlIG1hcmssIHRyYWRlbmFtZSwgb3IgbG9nbyBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlci4KKworKDEzKSAgVGhpcyBsaWNlbnNlIGluY2x1ZGVzIHRoZSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsCitmcmVlLW9mLWNoYXJnZSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwKK3NlbGwsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBQYWNrYWdlIHdpdGggcmVzcGVjdCB0byBhbnkKK3BhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSB0aGUgQ29weXJpZ2h0IEhvbGRlciB0aGF0IGFyZSBuZWNlc3NhcmlseQoraW5mcmluZ2VkIGJ5IHRoZSBQYWNrYWdlLiBJZiB5b3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uCisoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltKSBhZ2FpbnN0IGFueSBwYXJ0eSBhbGxlZ2luZwordGhhdCB0aGUgUGFja2FnZSBjb25zdGl0dXRlcyBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudAoraW5mcmluZ2VtZW50LCB0aGVuIHRoaXMgQXJ0aXN0aWMgTGljZW5zZSB0byB5b3Ugc2hhbGwgdGVybWluYXRlIG9uIHRoZQorZGF0ZSB0aGF0IHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworKDE0KSAgRGlzY2xhaW1lciBvZiBXYXJyYW50eToKK1RIRSBQQUNLQUdFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIEFORCBDT05UUklCVVRPUlMgIkFTCitJU2AgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLiBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorTk9OLUlORlJJTkdFTUVOVCBBUkUgRElTQ0xBSU1FRCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBZT1VSIExPQ0FMCitMQVcuIFVOTEVTUyBSRVFVSVJFRCBCWSBMQVcsIE5PIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1IgV0lMTAorQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhFIFBBQ0tBR0UsIEVWRU4gSUYKK0FEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YTBhYTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRApAQCAtMCwwICsxLDI2IEBACitDb3B5cmlnaHQgKGMpIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QtMC1DbGF1c2UgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC0wLUNsYXVzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjhiZGQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QtMC1DbGF1c2UKQEAgLTAsMCArMSwxMiBAQAorQ29weXJpZ2h0IChDKSA8WUVBUj4gYnkgPE9XTkVSPgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKK3B1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCitXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCitBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNELTItQ2xhdXNlIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QtMi1DbGF1c2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRlMGYzNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNELTItQ2xhdXNlCkBAIC0wLDAgKzEsMTMgQEAKKworVGhlIEZyZWVCU0QgQ29weXJpZ2h0CisKK0NvcHlyaWdodCAxOTkyLTIwMTAgVGhlIEZyZWVCU0QgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCitSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBGUkVFQlNEIFBST0pFQ1QgYGBBUyBJU2BgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGUkVFQlNEIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZyBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiB0aGUgRnJlZUJTRCBQcm9qZWN0LgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC0zLUNsYXVzZSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNELTMtQ2xhdXNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMzg2NWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC0zLUNsYXVzZQpAQCAtMCwwICsxLDExIEBACisKK0NvcHlyaWdodCAoYykgPFlFQVI+LCA8T1dORVI+CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKK1JlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK1JlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK05laXRoZXIgdGhlIG5hbWUgb2YgdGhlIDxPUkdBTklaQVRJT04+IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC00LUNsYXVzZSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNELTQtQ2xhdXNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMTYyZGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC00LUNsYXVzZQpAQCAtMCwwICsxLDI5IEBACisKK0NvcHlyaWdodCAoYykgPHllYXI+LCA8Y29weXJpZ2h0IGhvbGRlcj4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIDxvcmdhbml6YXRpb24+LgorNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgPG9yZ2FuaXphdGlvbj4gbm9yIHRoZQorICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIDxDT1BZUklHSFQgSE9MREVSPiBgYEFTIElTYGAgQU5EIEFOWQorRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZCitESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECitPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVhOGVhZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNMLTEuMApAQCAtMCwwICsxLDI1IEBACisKK0Jvb3N0IFNvZnR3YXJlIExpY2Vuc2UgLSBWZXJzaW9uIDEuMCAtIEF1Z3VzdCAxN3RoLCAyMDAzCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlvbgorb2J0YWluaW5nIGEgY29weSBvZiB0aGUgc29mdHdhcmUgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQgYnkKK3RoaXMgbGljZW5zZSAodGhlICJTb2Z0d2FyZSIpIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBkaXN0cmlidXRlLAorZXhlY3V0ZSwgYW5kIHRyYW5zbWl0IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUKK1NvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHRoaXJkLXBhcnRpZXMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCitkbyBzbywgYWxsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZzoKKworVGhlIGNvcHlyaWdodCBub3RpY2VzIGluIHRoZSBTb2Z0d2FyZSBhbmQgdGhpcyBlbnRpcmUgc3RhdGVtZW50LCBpbmNsdWRpbmcKK3RoZSBhYm92ZSBsaWNlbnNlIGdyYW50LCB0aGlzIHJlc3RyaWN0aW9uIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCittdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBhbmQKK2FsbCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTb2Z0d2FyZSwgdW5sZXNzIHN1Y2ggY29waWVzIG9yIGRlcml2YXRpdmUKK3dvcmtzIGFyZSBzb2xlbHkgaW4gdGhlIGZvcm0gb2YgbWFjaGluZS1leGVjdXRhYmxlIG9iamVjdCBjb2RlIGdlbmVyYXRlZCBieQorYSBzb3VyY2UgbGFuZ3VhZ2UgcHJvY2Vzc29yLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgVElUTEUgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UCitTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQU5ZT05FIERJU1RSSUJVVElORyBUSEUgU09GVFdBUkUgQkUgTElBQkxFCitGT1IgQU5ZIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKK0FSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JpdHN0cmVhbVZlcmEgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JpdHN0cmVhbVZlcmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZmMDNhYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQml0c3RyZWFtVmVyYQpAQCAtMCwwICsxLDE2MCBAQAorQml0c3RyZWFtIFZlcmEgRm9udHMgQ29weXJpZ2h0CisKK1RoZSBmb250cyBoYXZlIGEgZ2VuZXJvdXMgY29weXJpZ2h0LCBhbGxvd2luZyBkZXJpdmF0aXZlIHdvcmtzIChhcworbG9uZyBhcyAiQml0c3RyZWFtIiBvciAiVmVyYSIgYXJlIG5vdCBpbiB0aGUgbmFtZXMpLCBhbmQgZnVsbAorcmVkaXN0cmlidXRpb24gKHNvIGxvbmcgYXMgdGhleSBhcmUgbm90ICpzb2xkKiBieSB0aGVtc2VsdmVzKS4gVGhleQorY2FuIGJlIGJlIGJ1bmRsZWQsIHJlZGlzdHJpYnV0ZWQgYW5kIHNvbGQgd2l0aCBhbnkgc29mdHdhcmUuCisKK1RoZSBmb250cyBhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQ6CisKK0NvcHlyaWdodAorPT09PT09PT09CisKK0NvcHlyaWdodCAoYykgMjAwMyBieSBCaXRzdHJlYW0sIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gQml0c3RyZWFtCitWZXJhIGlzIGEgdHJhZGVtYXJrIG9mIEJpdHN0cmVhbSwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKK2EgY29weSBvZiB0aGUgZm9udHMgYWNjb21wYW55aW5nIHRoaXMgbGljZW5zZSAoIkZvbnRzIikgYW5kIGFzc29jaWF0ZWQKK2RvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiRm9udCBTb2Z0d2FyZSIpLCB0byByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUKK3RoZSBGb250IFNvZnR3YXJlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorY29weSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgRm9udAorU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBGb250IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZAordG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IGFuZCB0cmFkZW1hcmsgbm90aWNlcyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQorc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgRm9udCBTb2Z0d2FyZQordHlwZWZhY2VzLgorCitUaGUgRm9udCBTb2Z0d2FyZSBtYXkgYmUgbW9kaWZpZWQsIGFsdGVyZWQsIG9yIGFkZGVkIHRvLCBhbmQgaW4KK3BhcnRpY3VsYXIgdGhlIGRlc2lnbnMgb2YgZ2x5cGhzIG9yIGNoYXJhY3RlcnMgaW4gdGhlIEZvbnRzIG1heSBiZQorbW9kaWZpZWQgYW5kIGFkZGl0aW9uYWwgZ2x5cGhzIG9yIGNoYXJhY3RlcnMgbWF5IGJlIGFkZGVkIHRvIHRoZQorRm9udHMsIG9ubHkgaWYgdGhlIGZvbnRzIGFyZSByZW5hbWVkIHRvIG5hbWVzIG5vdCBjb250YWluaW5nIGVpdGhlcgordGhlIHdvcmRzICJCaXRzdHJlYW0iIG9yIHRoZSB3b3JkICJWZXJhIi4KKworVGhpcyBMaWNlbnNlIGJlY29tZXMgbnVsbCBhbmQgdm9pZCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgdG8gRm9udHMKK29yIEZvbnQgU29mdHdhcmUgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBhbmQgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlCisiQml0c3RyZWFtIFZlcmEiIG5hbWVzLgorCitUaGUgRm9udCBTb2Z0d2FyZSBtYXkgYmUgc29sZCBhcyBwYXJ0IG9mIGEgbGFyZ2VyIHNvZnR3YXJlIHBhY2thZ2UgYnV0CitubyBjb3B5IG9mIG9uZSBvciBtb3JlIG9mIHRoZSBGb250IFNvZnR3YXJlIHR5cGVmYWNlcyBtYXkgYmUgc29sZCBieQoraXRzZWxmLgorCitUSEUgRk9OVCBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIEFOWSBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQKK09GIENPUFlSSUdIVCwgUEFURU5ULCBUUkFERU1BUkssIE9SIE9USEVSIFJJR0hULiBJTiBOTyBFVkVOVCBTSEFMTAorQklUU1RSRUFNIE9SIFRIRSBHTk9NRSBGT1VOREFUSU9OIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCitPVEhFUiBMSUFCSUxJVFksIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCitPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgRk9OVAorU09GVFdBUkUgT1IgRlJPTSBPVEhFUiBERUFMSU5HUyBJTiBUSEUgRk9OVCBTT0ZUV0FSRS4KKworRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWVzIG9mIEdub21lLCB0aGUgR25vbWUKK0ZvdW5kYXRpb24sIGFuZCBCaXRzdHJlYW0gSW5jLiwgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKK290aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBGb250CitTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBmcm9tIHRoZSBHbm9tZSBGb3VuZGF0aW9uCitvciBCaXRzdHJlYW0gSW5jLiwgcmVzcGVjdGl2ZWx5LiBGb3IgZnVydGhlciBpbmZvcm1hdGlvbiwgY29udGFjdDoKK2ZvbnRzIGF0IGdub21lIGRvdCBvcmcuCisKK0NvcHlyaWdodCBGQVEKKz09PT09PT09PT09PT0KKworMS4gSSBkb24ndCB1bmRlcnN0YW5kIHRoZSByZXNhbGUgcmVzdHJpY3Rpb24uLi4gV2hhdCBnaXZlcz8KKworQml0c3RyZWFtIGlzIGdpdmluZyBhd2F5IHRoZXNlIGZvbnRzLCBidXQgd2lzaGVzIHRvIGVuc3VyZSBpdHMKK2NvbXBldGl0b3JzIGNhbid0IGp1c3QgZHJvcCB0aGUgZm9udHMgYXMgaXMgaW50byBhIGZvbnQgc2FsZSBzeXN0ZW0KK2FuZCBzZWxsIHRoZW0gYXMgaXMuIEl0IHNlZW1zIGZhaXIgdGhhdCBpZiBCaXRzdHJlYW0gY2FuJ3QgbWFrZSBtb25leQorZnJvbSB0aGUgQml0c3RyZWFtIFZlcmEgZm9udHMsIHRoZWlyIGNvbXBldGl0b3JzIHNob3VsZCBub3QgYmUgYWJsZSB0bworZG8gc28gZWl0aGVyLiBZb3UgY2FuIHNlbGwgdGhlIGZvbnRzIGFzIHBhcnQgb2YgYW55IHNvZnR3YXJlIHBhY2thZ2UsCitob3dldmVyLgorCisyLiBJIHdhbnQgdG8gcGFja2FnZSB0aGVzZSBmb250cyBzZXBhcmF0ZWx5IGZvciBkaXN0cmlidXRpb24gYW5kCitzYWxlIGFzIHBhcnQgb2YgYSBsYXJnZXIgc29mdHdhcmUgcGFja2FnZSBvciBzeXN0ZW0uIENhbiBJIGRvIHNvPworCitZZXMuIEEgUlBNIG9yIERlYmlhbiBwYWNrYWdlIGlzIGEgImxhcmdlciBzb2Z0d2FyZSBwYWNrYWdlIiB0byBiZWdpbgord2l0aCwgYW5kIHlvdSBhcmVuJ3Qgc2VsbGluZyB0aGVtIGluZGVwZW5kZW50bHkgYnkgdGhlbXNlbHZlcy4KK1NlZSAxLiBhYm92ZS4KKworMy4gQXJlIGRlcml2YXRpdmUgd29ya3MgYWxsb3dlZD8KK1llcyEKKworNC4gQ2FuIEkgY2hhbmdlIG9yIGFkZCB0byB0aGUgZm9udChzKT8KK1llcywgYnV0IHlvdSBtdXN0IGNoYW5nZSB0aGUgbmFtZShzKSBvZiB0aGUgZm9udChzKS4KKworNS4gVW5kZXIgd2hhdCB0ZXJtcyBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBhbGxvd2VkPworCitZb3UgbXVzdCBjaGFuZ2UgdGhlIG5hbWUocykgb2YgdGhlIGZvbnRzLiBUaGlzIGlzIHRvIGVuc3VyZSB0aGUKK3F1YWxpdHkgb2YgdGhlIGZvbnRzLCBib3RoIHRvIHByb3RlY3QgQml0c3RyZWFtIGFuZCBHbm9tZS4gV2Ugd2FudCB0bworZW5zdXJlIHRoYXQgaWYgYW4gYXBwbGljYXRpb24gaGFzIG9wZW5lZCBhIGZvbnQgc3BlY2lmaWNhbGx5IG9mIHRoZXNlCituYW1lcywgaXQgZ2V0cyB3aGF0IGl0IGV4cGVjdHMgKHRob3VnaCBvZiBjb3Vyc2UsIHVzaW5nIGZvbnRjb25maWcsCitzdWJzdGl0dXRpb25zIGNvdWxkIHN0aWxsIGNvdWxkIGhhdmUgb2NjdXJyZWQgZHVyaW5nIGZvbnQKK29wZW5pbmcpLiBZb3UgbXVzdCBpbmNsdWRlIHRoZSBCaXRzdHJlYW0gY29weXJpZ2h0LiBBZGRpdGlvbmFsCitjb3B5cmlnaHRzIGNhbiBiZSBhZGRlZCwgYXMgcGVyIGNvcHlyaWdodCBsYXcuIEhhcHB5IEZvbnQgSGFja2luZyEKKworNi4gSWYgSSBoYXZlIGltcHJvdmVtZW50cyBmb3IgQml0c3RyZWFtIFZlcmEsIGlzIGl0IHBvc3NpYmxlIHRoZXkgbWlnaHQgZ2V0CithZG9wdGVkIGluIGZ1dHVyZSB2ZXJzaW9ucz8KKworWWVzLiBUaGUgY29udHJhY3QgYmV0d2VlbiB0aGUgR25vbWUgRm91bmRhdGlvbiBhbmQgQml0c3RyZWFtIGhhcworcHJvdmlzaW9ucyBmb3Igd29ya2luZyB3aXRoIEJpdHN0cmVhbSB0byBlbnN1cmUgcXVhbGl0eSBhZGRpdGlvbnMgdG8KK3RoZSBCaXRzdHJlYW0gVmVyYSBmb250IGZhbWlseS4gUGxlYXNlIGNvbnRhY3QgdXMgaWYgeW91IGhhdmUgc3VjaAorYWRkaXRpb25zLiBOb3RlLCB0aGF0IGluIGdlbmVyYWwsIHdlIHdpbGwgd2FudCBzdWNoIGFkZGl0aW9ucyBmb3IgdGhlCitlbnRpcmUgZmFtaWx5LCBub3QganVzdCBhIHNpbmdsZSBmb250LCBhbmQgdGhhdCB5b3UnbGwgaGF2ZSB0byBrZWVwCitib3RoIEdub21lIGFuZCBKaW0gTHlsZXMsIFZlcmEncyBkZXNpZ25lciwgaGFwcHkhIFRvIG1ha2Ugc2Vuc2UgdG8gYWRkCitnbHlwaHMgdG8gdGhlIGZvbnQsIHRoZXkgbXVzdCBiZSBzdHlsaXN0aWNhbGx5IGluIGtlZXBpbmcgd2l0aCBWZXJhJ3MKK2Rlc2lnbi4gVmVyYSBjYW5ub3QgYmVjb21lIGEgInJhbnNvbSBub3RlIiBmb250LiBKaW0gTHlsZXMgd2lsbCBiZQorcHJvdmlkaW5nIGEgZG9jdW1lbnQgZGVzY3JpYmluZyB0aGUgZGVzaWduIGVsZW1lbnRzIHVzZWQgaW4gVmVyYSwgYXMgYQorZ3VpZGUgYW5kIGFpZCBmb3IgcGVvcGxlIGludGVyZXN0ZWQgaW4gY29udHJpYnV0aW5nIHRvIFZlcmEuCisKKzcuIEkgd2FudCB0byBzZWxsIGEgc29mdHdhcmUgcGFja2FnZSB0aGF0IHVzZXMgdGhlc2UgZm9udHM6IENhbiBJIGRvIHNvPworCitTdXJlLiBCdW5kbGUgdGhlIGZvbnRzIHdpdGggeW91ciBzb2Z0d2FyZSBhbmQgc2VsbCB5b3VyIHNvZnR3YXJlCit3aXRoIHRoZSBmb250cy4gVGhhdCBpcyB0aGUgaW50ZW50IG9mIHRoZSBjb3B5cmlnaHQuCisKKzguIElmIGFwcGxpY2F0aW9ucyBoYXZlIGJ1aWx0IHRoZSBuYW1lcyAiQml0c3RyZWFtIFZlcmEiIGludG8gdGhlbSwKK2NhbiBJIG92ZXJyaWRlIHRoaXMgc29tZWhvdyB0byB1c2UgZm9udHMgb2YgbXkgY2hvb3Npbmc/CisKK1RoaXMgZGVwZW5kcyBvbiBleGFjdCBkZXRhaWxzIG9mIHRoZSBzb2Z0d2FyZS4gTW9zdCBvcGVuIHNvdXJjZQorc3lzdGVtcyBhbmQgc29mdHdhcmUgKGUuZy4sIEdub21lLCBLREUsIGV0Yy4pIGFyZSBub3cgY29udmVydGluZyB0bwordXNlIGZvbnRjb25maWcgKHNlZSB3d3cuZm9udGNvbmZpZy5vcmcpIHRvIGhhbmRsZSBmb250IGNvbmZpZ3VyYXRpb24sCitzZWxlY3Rpb24gYW5kIHN1YnN0aXR1dGlvbjsgaXQgaGFzIHByb3Zpc2lvbnMgZm9yIG92ZXJyaWRpbmcgZm9udAorbmFtZXMgYW5kIHN1YnNpdHV0aW5nIGFsdGVybmF0aXZlcy4gQW4gZXhhbXBsZSBpcyBwcm92aWRlZCBieSB0aGUKK3N1cHBsaWVkIGxvY2FsLmNvbmYgZmlsZSwgd2hpY2ggY2hvb3NlcyB0aGUgZmFtaWx5IEJpdHN0cmVhbSBWZXJhIGZvcgorInNhbnMiLCAic2VyaWYiIGFuZCAibW9ub3NwYWNlIi4gT3RoZXIgc29mdHdhcmUgKGUuZy4sIHRoZSBYRnJlZTg2Citjb3JlIHNlcnZlcikgaGFzIG90aGVyIG1lY2hhbmlzbXMgZm9yIGZvbnQgc3Vic3RpdHV0aW9uLgorCitTaG93IGRldGFpbHMgSGlkZSBkZXRhaWxzCisKK0NoYW5nZSBsb2cKK3IyMDExIGJ5IG1hcmsubmlja2VsIG9uIE1hciAzLCAyMDExICAgRGlmZgorCitNYWpvcml0eSBvZiBNdWx0aS1MaW5lIHRleHQgZWRpdGluZyBpcyBpbgordGhlIGNvbW1pdC4gIEFsc28gYWRkZWQgc29tZSBzcGVjaWZpYyBmcmVlCitmb250cyB0byByZXBsYWNlIHRoZSBleGlzdGluZyBzZXQgYXMgd2UKK25lZWQgc29tZSBhZGRpdGlvbmFsIGZvbnQgbWV0cmljcyB0aGF0IHdlCit1c2UgaW4gdGhlIFRleHQgRWRpdGluZyByZW5kZXJpbmcKK3BpcGVsaW5lLgorCitZb3UgY2FuIHNlZSB0aGUgZm9udCBsaWNlbnNlcyBpbiB0aGUKK2VkaXRvci9mb250cyBmb2xkZXIgdW5kZXIgZWFjaCBmb250LgorCitTdGlsbCBoYXZlIHNvbWUgY2xlYW51cCB0byBkbyB0byBhZGQgdGhlCit0ZXh0IGZvcm1hdHRpbmcgKGxlZnQscmlnaHQsY2VudGVyKSBhcworLi4uCisKK0dvIHRvOiAJCitIaWRlIGNvbW1lbnRzCitTaG93IGNvbW1lbnRzCisKK09sZGVyIHJldmlzaW9ucworQWxsIHJldmlzaW9ucyBvZiB0aGlzIGZpbGUKKworRmlsZSBpbmZvCitTaXplOiA1OTUzIGJ5dGVzLCAxMjMgbGluZXMKK1ZpZXcgcmF3IGZpbGUKKworRmlsZSBwcm9wZXJ0aWVzCisKK3N2bjpleGVjdXRhYmxlCisgICAgKgorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0FUT1NMLTEuMSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0FUT1NMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2U4YTU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQVRPU0wtMS4xCkBAIC0wLDAgKzEsMTE2IEBACisKK0NvbXB1dGVyIEFzc29jaWF0ZXMgVHJ1c3RlZCBPcGVuIFNvdXJjZSBMaWNlbnNlCitWZXJzaW9uIDEuMQorCisKKyh0ZXh0KQorCitQTEVBU0UgUkVBRCBUSElTIERPQ1VNRU5UIENBUkVGVUxMWSBBTkQgSU4gSVRTIEVOVElSRVRZLiBUSEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ09NUFVURVIgQVNTT0NJQVRFUyBUUlVTVEVEIE9QRU4gU09VUkNFIExJQ0VOU0UgKCJMSUNFTlNFIikuIEFOWSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBUSEUgUkVDSVBJRU5UYFMgQUNDRVBUQU5DRSBPRiBUSElTIExJQ0VOU0UuCisKK0xpY2Vuc2UgQmFja2dyb3VuZAorQ29tcHV0ZXIgQXNzb2NpYXRlcyBJbnRlcm5hdGlvbmFsLCBJbmMuIChDQSkgYmVsaWV2ZXMgaW4gb3BlbiBzb3VyY2UuIFdlIGJlbGlldmUgdGhhdCB0aGUgb3BlbiBzb3VyY2UgZGV2ZWxvcG1lbnQgYXBwcm9hY2ggY2FuIHRha2UgYXBwcm9wcmlhdGUgc29mdHdhcmUgcHJvZ3JhbXMgdG8gdW5wcmVjZWRlbnRlZCBsZXZlbHMgb2YgcXVhbGl0eSwgZ3Jvd3RoLCBhbmQgaW5ub3ZhdGlvbi4gVG8gZGVtb25zdHJhdGUgb3VyIGNvbnRpbnVpbmcgY29tbWl0bWVudCB0byBvcGVuIHNvdXJjZSwgd2UgYXJlIHJlbGVhc2luZyB0aGUgUHJvZ3JhbSAoYXMgZGVmaW5lZCBiZWxvdykgdW5kZXIgdGhpcyBMaWNlbnNlLgorCitUaGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcGVybWl0IGNvbnRyaWJ1dG9ycyBhbmQgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSB0byB1c2UgdGhlIFByb2dyYW0sIGluY2x1ZGluZyBpdHMgc291cmNlIGNvZGUsIGZyZWVseSBhbmQgd2l0aG91dCBtYW55IG9mIHRoZSBjb25jZXJucyBvZiBzb21lIG90aGVyIG9wZW4gc291cmNlIGxpY2Vuc2VzLiBBbHRob3VnaCB3ZSBleHBlY3QgdGhlIHVuZGVybHlpbmcgUHJvZ3JhbSwgYW5kIENvbnRyaWJ1dGlvbnMgKGFzIGRlZmluZWQgYmVsb3cpIG1hZGUgdG8gc3VjaCBQcm9ncmFtLCB0byByZW1haW4gb3BlbiwgdGhpcyBMaWNlbnNlIGlzIGRlc2lnbmVkIHRvIHBlcm1pdCB5b3UgdG8gbWFpbnRhaW4geW91ciBvd24gc29mdHdhcmUgcHJvZ3JhbXMgZnJlZSBvZiB0aGlzIExpY2Vuc2UgdW5sZXNzIHlvdSBjaG9vc2UgdG8gZG8gc28uIFRodXMsIG9ubHkgeW91ciBDb250cmlidXRpb25zIHRvIHRoZSBQcm9ncmFtIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworVGhlIHByb3Zpc2lvbnMgdGhhdCBmb2xsb3cgc2V0IGZvcnRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB1bmRlciB3aGljaCB5b3UgbWF5IHVzZSB0aGUgUHJvZ3JhbS4KKworMS4gREVGSU5JVElPTlMKKworMS4xIENvbnRyaWJ1dGlvbiBtZWFucyAoYSkgaW4gdGhlIGNhc2Ugb2YgQ0EsIHRoZSBPcmlnaW5hbCBQcm9ncmFtOyBhbmQgKGIpIGluIHRoZSBjYXNlIG9mIGVhY2ggQ29udHJpYnV0b3IgKGluY2x1ZGluZyBDQSksIGNoYW5nZXMgYW5kIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSwgd2hlcmUgc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZCBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IgdG8gdW5hZmZpbGlhdGVkIHRoaXJkIHBhcnRpZXMuIEEgQ29udHJpYnV0aW9uIG9yaWdpbmF0ZXMgZnJvbSBhIENvbnRyaWJ1dG9yIGlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uIHN1Y2ggQ29udHJpYnV0b3JzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gd2hpY2g6ICh4KSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kICh5KSBhcmUgbm90IGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFByb2dyYW0uCisKKzEuMiBDb250cmlidXRvciBtZWFucyBDQSBhbmQgYW55IG90aGVyIHBlcnNvbiBvciBlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS4KKworMS4zIENvbnRyaWJ1dG9yIFZlcnNpb24gbWVhbnMgYXMgdG8gYSBDb250cmlidXRvciwgdGhhdCB2ZXJzaW9uIG9mIHRoZSBQcm9ncmFtIHRoYXQgaW5jbHVkZXMgdGhlIENvbnRyaWJ1dG9ycyBDb250cmlidXRpb24gYnV0IG5vdCBhbnkgQ29udHJpYnV0aW9ucyBtYWRlIHRvIHRoZSBQcm9ncmFtIHRoZXJlYWZ0ZXIuCisKKzEuNCBMYXJnZXIgV29yayBtZWFucyBhIHdvcmsgdGhhdCBjb21iaW5lcyB0aGUgUHJvZ3JhbSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS41IExpY2Vuc2VkIFBhdGVudHMgbWVhbiBwYXRlbnRzIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB0aGF0IGFyZSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLgorCisxLjYgT3JpZ2luYWwgUHJvZ3JhbSBtZWFucyB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgc29mdHdhcmUgdG8gd2hpY2ggdGhpcyBMaWNlbnNlIGlzIGF0dGFjaGVkIGFuZCBhcyByZWxlYXNlZCBieSBDQSwgaW5jbHVkaW5nIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiwgaWYgYW55LgorCisxLjcgUHJvZ3JhbSBtZWFucyB0aGUgT3JpZ2luYWwgUHJvZ3JhbSBhbmQgQ29udHJpYnV0aW9ucy4KKworMS44IFJlY2lwaWVudCBtZWFucyBhbnlvbmUgd2hvIG1vZGlmaWVzLCBjb3BpZXMsIHVzZXMgb3IgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uCisKKzIuIEdSQU5UIE9GIFJJR0hUUworCisyLjEgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50IGFuIGlycmV2b2NhYmxlLCBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoZSBsaWNlbnNlIHByb3ZpZGVkIGluIHRoaXMgU2VjdGlvbiAyLjEgc2hhbGwgbm90IGluY2x1ZGUgYSBsaWNlbnNlIHRvIGFueSBMaWNlbnNlZCBQYXRlbnRzIG9mIGEgQ29udHJpYnV0b3IuCisKKzIuMiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQgYW4gaXJyZXZvY2FibGUsIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UgdG8gdGhlIExpY2Vuc2VkIFBhdGVudHMgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsIGFuZCBpbXBvcnQgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGUgbGljZW5zZSBncmFudGVkIGluIHRoaXMgU2VjdGlvbiAyLjIgc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkIGJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyB0aGUgTGljZW5zZWQgUGF0ZW50cyB0byBiZSBpbmZyaW5nZWQgYnkgc3VjaCBjb21iaW5hdGlvbi4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIG5vIGxpY2Vuc2UgaXMgZ3JhbnRlZCB1bmRlciB0aGlzIFNlY3Rpb24gMi4yOiAoYSkgZm9yIGFueSBjb2RlIG9yIHdvcmtzIHRoYXQgZG8gbm90IGluY2x1ZGUgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24sIGFzIGl0IGV4aXN0cyBhbmQgaXMgdXNlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGhlcmVvZjsgKGIpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogKGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IG9yIChpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIENvbnRyaWJ1dGlvbnMgbWFkZSBieSBlYWNoIHN1Y2ggQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yIChjKSB3aXRoIHJlc3BlY3QgdG8gTGljZW5zZWQgUGF0ZW50cyBpbmZyaW5nZWQgYnkgdGhlIFByb2dyYW0gaW4gdGhlIGFic2VuY2Ugb2YgQ29udHJpYnV0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IuCisKKzIuMyBSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgZXhjZXB0IGFzIHByb3ZpZGVkIGluIFNlY3Rpb24gMi40LCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IgdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIHBlcnNvbiBvciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgcGVyc29uIG9yIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LgorCisyLjQgRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIGFuZCB3YXJyYW50cyB0aGF0IGl0IGhhcyBhbGwgcmlnaHQsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiB0aGUgY29weXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9ucywgYW5kIGhhcyB0aGUgcmlnaHQgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlcyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLgorCiszLiBESVNUUklCVVRJT04gUkVRVUlSRU1FTlRTCisKKzMuMSBJZiB0aGUgUHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiBvYmplY3QgY29kZSBmb3JtLCB0aGVuIGEgcHJvbWluZW50IG5vdGljZSBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBjb2RlIGl0c2VsZiBhcyB3ZWxsIGFzIGluIGFueSByZWxhdGVkIGRvY3VtZW50YXRpb24sIHN0YXRpbmcgdGhhdCB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBDb250cmlidXRvciB3aXRoIGluZm9ybWF0aW9uIG9uIGhvdyBhbmQgd2hlcmUgdG8gb2J0YWluIHRoZSBzb3VyY2UgY29kZS4gQSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0OgorCitpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2U7IGFuZAoraXRzIGxpY2Vuc2UgYWdyZWVtZW50OgorZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZCBjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlIGFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdzsKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2ggYXMgbG9zdCBwcm9maXRzLCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3Oworc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggYXJlIGluY29uc2lzdGVudCB3aXRoIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSB0aGF0IENvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yIGF0IHRoZSBjb3N0IG9mIGRpc3RyaWJ1dGlvbiwgYW5kIGluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lci4KKzMuMiBXaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZSBjb2RlIGZvcm06CisKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBMaWNlbnNlOyBhbmQKK2EgY29weSBvZiB0aGlzIExpY2Vuc2UgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4KKzMuMyBUaGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkgYW55IENvbnRyaWJ1dG9yLiBIb3dldmVyLCBDb250cmlidXRvcnMgbWF5IG9ubHkgY2hhcmdlIFJlY2lwaWVudHMgYSBvbmUtdGltZSwgdXBmcm9udCBmZWUgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uIENvbnRyaWJ1dG9ycyBtYXkgbm90IGNoYXJnZSBSZWNpcGllbnRzIGFueSByZWN1cnJpbmcgY2hhcmdlLCBsaWNlbnNlIGZlZSwgb3IgYW55IG9uZ29pbmcgcm95YWx0eSBmb3IgdGhlIFJlY2lwaWVudHMgZXhlcmNpc2Ugb2YgaXRzIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgdG8gdGhlIFByb2dyYW0uIENvbnRyaWJ1dG9ycyBzaGFsbCBtYWtlIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gdGhleSBkaXN0cmlidXRlIGF2YWlsYWJsZSBhdCBhIGNvc3QsIGlmIGFueSwgZXF1YWwgdG8gdGhlIGNvc3QgdG8gdGhlIENvbnRyaWJ1dG9yIHRvIHBoeXNpY2FsbHkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgd29yay4gSXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBMaWNlbnNlIHRvIHByb2hpYml0IGEgQ29udHJpYnV0b3IgZnJvbSBjaGFyZ2luZyBmZWVzIGZvciBhbnkgc2VydmljZSBvciBtYWludGVuYW5jZSB0aGF0IGEgQ29udHJpYnV0b3IgbWF5IGNoYXJnZSB0byBhIFJlY2lwaWVudCwgc28gbG9uZyBhcyBzdWNoIGZlZXMgYXJlIG5vdCBhbiBhdHRlbXB0IHRvIGNpcmN1bXZlbnQgdGhlIGZvcmVnb2luZyByZXN0cmljdGlvbnMgb24gY2hhcmdpbmcgcm95YWx0aWVzIG9yIG90aGVyIHJlY3VycmluZyBmZWVzIGZvciB0aGUgUHJvZ3JhbSBpdHNlbGYuCisKKzMuNCBBIENvbnRyaWJ1dG9yIG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgdGhlIFByb2dyYW0gd2l0aCBvdGhlciBzb2Z0d2FyZSBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIHRoZSBDb250cmlidXRvciBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBQcm9ncmFtLiBBbnkgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBpbmNsdWRpbmcgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrLCBtYXkgc3ViamVjdCBpdHNlbGYsIGJ1dCBub3QgYW55IG90aGVyIENvbnRyaWJ1dG9yLCB0byBhZGRpdGlvbmFsIGNvbnRyYWN0dWFsIGNvbW1pdG1lbnRzLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgcGVyZm9ybWFuY2Ugd2FycmFudGllcyBhbmQgbm9uLWluZnJpbmdlbWVudCByZXByZXNlbnRhdGlvbnMgb24gc3VjaENvbnRyaWJ1dG9ycyBiZWhhbGYuIE5vIENvbnRyaWJ1dG9yIG1heSBjcmVhdGUgYW55IGFkZGl0aW9uYWwgbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoQ29tbWVyY2lhbCBDb250cmlidXRvcikgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlciBDb250cmlidXRvciAoSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IpIHdobyBtYWRlIENvbnRyaWJ1dGlvbnMgdG8gdGhlIFByb2dyYW0gZGlzdHJpYnV0ZWQgYnkgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZCBjb3N0cyAoY29sbGVjdGl2ZWx5IExvc3NlcykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyIGxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvIHRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucywgaW5jbHVkaW5nIGFueSBhZGRpdGlvbmFsIGNvbnRyYWN0dWFsIGNvbW1pdG1lbnRzLCBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4gY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzIHJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LgorCiszLjUgSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5cyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsIENvbnRyaWJ1dG9yIG11c3QgKGEpIGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgUHJvZ3JhbSBzb3VyY2UgY29kZSBkaXN0cmlidXRpb24gdGl0bGVkIC4uL0lQX0lTU1VFUywgYW5kIChiKSBub3RpZnkgQ0EgaW4gd3JpdGluZyBhdCBDb21wdXRlciBBc3NvY2lhdGVzIEludGVybmF0aW9uYWwsIEluYy4sIE9uZSBDb21wdXRlciBBc3NvY2lhdGVzIFBsYXphLCBJc2xhbmRpYSwgTmV3IFlvcmsgMTE3NDksIEF0dG46IE9wZW4gU291cmNlIEdyb3VwIG9yIGJ5IGVtYWlsIGF0IG9wZW5zb3VyY2VAY2EuY29tLCBib3RoIGRlc2NyaWJpbmcgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgUmVjaXBpZW50IGFuZCBDQSB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0IHdpdGggcmVnYXJkIHRvIHN1Y2ggbWF0dGVyLiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBDb250cmlidXRpb24gaXMgbWFkZSBhdmFpbGFibGUsIENvbnRyaWJ1dG9yIHNoYWxsIGFsc28gcHJvbXB0bHkgbW9kaWZ5IHRoZSBJUF9JU1NVRVMgZmlsZSBpbiBhbGwgY29waWVzIENvbnRyaWJ1dG9yIG1ha2VzIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBQcm9ncmFtIHRoYXQgc3VjaCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorCiszLjYgUmVjaXBpZW50IHNoYWxsIG5vdCByZW1vdmUsIG9ic2N1cmUsIG9yIG1vZGlmeSBhbnkgQ0Egb3Igb3RoZXIgQ29udHJpYnV0b3IgY29weXJpZ2h0IG9yIHBhdGVudCBwcm9wcmlldGFyeSBub3RpY2VzIGFwcGVhcmluZyBpbiB0aGUgUHJvZ3JhbSwgd2hldGhlciBpbiB0aGUgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlIG9yIGluIGFueSBkb2N1bWVudGF0aW9uLiBJbiBhZGRpdGlvbiB0byB0aGUgb2JsaWdhdGlvbnMgc2V0IGZvcnRoIGluIFNlY3Rpb24gNCwgZWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUgb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3Mgc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uCisKKzQuIENPTlRSSUJVVElPTiBSRVNUUklDVElPTlMKKworNC4xIEVhY2ggQ29udHJpYnV0b3IgbXVzdCBjYXVzZSB0aGUgUHJvZ3JhbSB0byB3aGljaCB0aGUgQ29udHJpYnV0b3IgcHJvdmlkZXMgYSBDb250cmlidXRpb24gdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgdGhlIENvbnRyaWJ1dG9yIG1hZGUgdG8gY3JlYXRlIGl0cyB2ZXJzaW9uIG9mIHRoZSBQcm9ncmFtIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBFYWNoIENvbnRyaWJ1dG9yIG11c3QgYWxzbyBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBDb250cmlidXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSB0aGUgUHJvZ3JhbSBkaXN0cmlidXRlZCBieSBhIHByaW9yIENvbnRyaWJ1dG9yLCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIHByaW9yIENvbnRyaWJ1dG9yIGZyb20gd2hpY2ggc3VjaCBDb250cmlidXRpb24gd2FzIGRlcml2ZWQsIGluIChhKSB0aGUgUHJvZ3JhbSBzb3VyY2UgY29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIGV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggdGhlIENvbnRyaWJ1dG9yIGRlc2NyaWJlcyB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgUHJvZ3JhbS4KKworNS4gTk8gV0FSUkFOVFkKKworNS4xIEVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgTElDRU5TRSwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgQVMgSVMgQU5EIElOIElUUyBQUkVTRU5UIFNUQVRFIEFORCBDT05ESVRJT04uIE5PIFdBUlJBTlRZLCBSRVBSRVNFTlRBVElPTiwgQ09ORElUSU9OLCBVTkRFUlRBS0lORyBPUiBURVJNLCBFWFBSRVNTIE9SIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIEFTIFRPIFRIRSBDT05ESVRJT04sIFFVQUxJVFksIERVUkFCSUxJVFksIFBFUkZPUk1BTkNFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFVTRSBPRiBUSEUgUFJPR1JBTSBJUyBHSVZFTiBPUiBBU1NVTUVEIEJZIEFOWSBDT05UUklCVVRPUiBBTkQgQUxMIFNVQ0ggV0FSUkFOVElFUywgUkVQUkVTRU5UQVRJT05TLCBDT05ESVRJT05TLCBVTkRFUlRBS0lOR1MgQU5EIFRFUk1TIEFSRSBIRVJFQlkgRVhDTFVERUQgVE8gVEhFIEZVTExFU1QgRVhURU5UIFBFUk1JVFRFRCBCWSBMQVcuCisKKzUuMiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsIGNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCis1LjMgRWFjaCBSZWNpcGllbnQgYWNrbm93bGVkZ2VzIHRoYXQgdGhlIFByb2dyYW0gaXMgbm90IGludGVuZGVkIGZvciB1c2UgaW4gdGhlIG9wZXJhdGlvbiBvZiBudWNsZWFyIGZhY2lsaXRpZXMsIGFpcmNyYWZ0IG5hdmlnYXRpb24sIGNvbW11bmljYXRpb24gc3lzdGVtcywgb3IgYWlyIHRyYWZmaWMgY29udHJvbCBtYWNoaW5lcyBpbiB3aGljaCBjYXNlIHRoZSBmYWlsdXJlIG9mIHRoZSBQcm9ncmFtIGNvdWxkIGxlYWQgdG8gZGVhdGgsIHBlcnNvbmFsIGluanVyeSwgb3Igc2V2ZXJlIHBoeXNpY2FsIG9yIGVudmlyb25tZW50YWwgZGFtYWdlLgorCis2LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorCis2LjEgRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBMSUNFTlNFLCBBTkQgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgTEFXLCBOTyBDT05UUklCVVRPUiBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRSQURFTUFSS1MgQU5EIEJSQU5ESU5HCisKKzcuMSBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IFJlY2lwaWVudCBvciBhbnkgdGhpcmQgcGFydHkgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgbm93IG9yIHN1YnNlcXVlbnRseSBwb3N0ZWQgYXQgaHR0cDovL3d3dy5jYS5jb20vY2F0cmRtcmsuaHRtLCBvciBhbnkgb3RoZXIgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgbG9nb3Mgb3IgdHJhZGUgbmFtZXMgYmVsb25naW5nIHRvIENBIChjb2xsZWN0aXZlbHkgQ0EgTWFya3MpIG9yIHRvIGFueSB0cmFkZW1hcmssIHNlcnZpY2UgbWFyaywgbG9nbyBvciB0cmFkZSBuYW1lIGJlbG9uZ2luZyB0byBhbnkgQ29udHJpYnV0b3IuIFJlY2lwaWVudCBhZ3JlZXMgbm90IHRvIHVzZSBhbnkgQ0EgTWFya3MgaW4gb3IgYXMgcGFydCBvZiB0aGUgbmFtZSBvZiBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIE9yaWdpbmFsIFByb2dyYW0gb3IgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgT3JpZ2luYWwgUHJvZ3JhbS4KKworNy4yIFN1YmplY3QgdG8gU2VjdGlvbiA3LjEsIFJlY2lwaWVudHMgbWF5IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gdW5kZXIgdHJhZGVtYXJrcywgbG9nb3MsIGFuZCBwcm9kdWN0IG5hbWVzIGJlbG9uZ2luZyB0byB0aGUgUmVjaXBpZW50IHByb3ZpZGVkIHRoYXQgYWxsIGNvcHlyaWdodCBhbmQgb3RoZXIgYXR0cmlidXRpb24gbm90aWNlcyByZW1haW4gaW4gdGhlIFByb2dyYW0uCisKKzguIFBBVEVOVCBMSVRJR0FUSU9OCisKKzguMSBJZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBwZXJzb24gb3IgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnRzIHBhdGVudChzKSwgdGhlbiBzdWNoIFJlY2lwaWVudHMgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyLjIgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworOS4gT1dORVJTSElQCisKKzkuMSBTdWJqZWN0IHRvIHRoZSBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBpbiBTZWN0aW9ucyAyLjEgYW5kIDIuMiBhYm92ZSwgZWFjaCBDb250cmlidXRvciByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gYW55IENvbnRyaWJ1dGlvbnMgbWFkZSBieSBzdWNoIENvbnRyaWJ1dG9yLiBDQSByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIFByb2dyYW0gYW5kIGFueSBDb250cmlidXRpb25zIG1hZGUgYnkgb3Igb24gYmVoYWxmIG9mIENBIChDQSBDb250cmlidXRpb25zKSwgYW5kIHN1Y2ggQ0EgQ29udHJpYnV0aW9ucyB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiBDQSBtYXksIGF0IGl0cyBzb2xlIGRpc2NyZXRpb24sIGNob29zZSB0byBsaWNlbnNlIHN1Y2ggQ0EgQ29udHJpYnV0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UsIG9yIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2Ugb3IgbWF5IGNob29zZSBub3QgdG8gbGljZW5zZSB0aGVtIGF0IGFsbC4KKworMTAuIFRFUk1JTkFUSU9OCisKKzEwLjEgQWxsIG9mIFJlY2lwaWVudHMgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvciBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlIHBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgUmVjaXBpZW50cyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsIFJlY2lwaWVudHMgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieSBSZWNpcGllbnQgYXMgYSBDb250cmlidXRvciByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworMTEuIEdFTkVSQUwKKworMTEuMSBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorCisxMS4yIENBIG1heSBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YgdGhpcyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIG5ldyB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0gKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gTm8gb25lIG90aGVyIHRoYW4gQ0EgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBMaWNlbnNlLgorCisxMS4zIElmIGl0IGlzIGltcG9zc2libGUgZm9yIFJlY2lwaWVudCB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIFByb2dyYW0gZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uLCB0aGVuIFJlY2lwaWVudCBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBJUF9JU1NVRVMgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgUHJvZ3JhbSBzb3VyY2UgY29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgUmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKworMTEuNCBUaGlzIExpY2Vuc2UgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIE5ldyBZb3JrLiBObyBSZWNpcGllbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzIExpY2Vuc2UgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggUmVjaXBpZW50IHdhaXZlcyBpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uIEFueSBsaXRpZ2F0aW9uIG9yIG90aGVyIGRpc3B1dGUgcmVzb2x1dGlvbiBiZXR3ZWVuIGEgUmVjaXBpZW50IGFuZCBDQSByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgdGFrZSBwbGFjZSBpbiB0aGUgU3RhdGUgb2YgTmV3IFlvcmssIGFuZCBSZWNpcGllbnQgYW5kIENBIGhlcmVieSBjb25zZW50IHRvIHRoZSBwZXJzb25hbCBqdXJpc2RpY3Rpb24gb2YsIGFuZCB2ZW51ZSBpbiwgdGhlIHN0YXRlIGFuZCBmZWRlcmFsIGNvdXJ0cyB3aXRoaW4gdGhhdCBkaXN0cmljdCB3aXRoIHJlc3BlY3QgdG8gdGhpcyBMaWNlbnNlLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4KKworMTEuNSBXaGVyZSBSZWNpcGllbnQgaXMgbG9jYXRlZCBpbiB0aGUgcHJvdmluY2Ugb2YgUXVlYmVjLCBDYW5hZGEsIHRoZSBmb2xsb3dpbmcgY2xhdXNlIGFwcGxpZXM6IFRoZSBwYXJ0aWVzIGhlcmVieSBjb25maXJtIHRoYXQgdGhleSBoYXZlIHJlcXVlc3RlZCB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYWxsIHJlbGF0ZWQgZG9jdW1lbnRzIGJlIGRyYWZ0ZWQgaW4gRW5nbGlzaC4gTGVzIHBhcnRpZXMgY29udHJhY3RhbnRlcyBjb25maXJtZW50IHF1YGVsbGVzIG9udCBleGlnZSBxdWUgbGUgcHJlc2VudCBjb250cmF0IGV0IHRvdXMgbGVzIGRvY3VtZW50cyBhc3NvY2llcyBzb2llbnQgcmVkaWdlcyBlbiBhbmdsYWlzLgorCisxMS42IFRoZSBQcm9ncmFtIGlzIHN1YmplY3QgdG8gYWxsIGV4cG9ydCBhbmQgaW1wb3J0IGxhd3MsIHJlc3RyaWN0aW9ucyBhbmQgcmVndWxhdGlvbnMgb2YgdGhlIGNvdW50cnkgaW4gd2hpY2ggUmVjaXBpZW50IHJlY2VpdmVzIHRoZSBQcm9ncmFtLiBSZWNpcGllbnQgaXMgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBjb21wbHlpbmcgd2l0aCBhbmQgZW5zdXJpbmcgdGhhdCBSZWNpcGllbnQgZG9lcyBub3QgZXhwb3J0LCByZS1leHBvcnQsIG9yIGltcG9ydCB0aGUgUHJvZ3JhbSBpbiB2aW9sYXRpb24gb2Ygc3VjaCBsYXdzLCByZXN0cmljdGlvbnMgb3IgcmVndWxhdGlvbnMsIG9yIHdpdGhvdXQgYW55IG5lY2Vzc2FyeSBsaWNlbnNlcyBhbmQgYXV0aG9yaXphdGlvbnMuCisKKzExLjcgVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EwYjc1MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMS4wCkBAIC0wLDAgKzEsNjAgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworQXR0cmlidXRpb24gMS4wCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIERSQUZUIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3JrczsKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitCeSBvZmZlcmluZyB0aGUgV29yayBmb3IgcHVibGljIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciByZXByZXNlbnRzIGFuZCB3YXJyYW50cyB0aGF0LCB0byB0aGUgYmVzdCBvZiBMaWNlbnNvcmBzIGtub3dsZWRnZSBhZnRlciByZWFzb25hYmxlIGlucXVpcnk6CitMaWNlbnNvciBoYXMgc2VjdXJlZCBhbGwgcmlnaHRzIGluIHRoZSBXb3JrIG5lY2Vzc2FyeSB0byBncmFudCB0aGUgbGljZW5zZSByaWdodHMgaGVyZXVuZGVyIGFuZCB0byBwZXJtaXQgdGhlIGxhd2Z1bCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpdGhvdXQgWW91IGhhdmluZyBhbnkgb2JsaWdhdGlvbiB0byBwYXkgYW55IHJveWFsdGllcywgY29tcHVsc29yeSBsaWNlbnNlIGZlZXMsIHJlc2lkdWFscyBvciBhbnkgb3RoZXIgcGF5bWVudHM7CitUaGUgV29yayBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgY29weXJpZ2h0LCB0cmFkZW1hcmssIHB1YmxpY2l0eSByaWdodHMsIGNvbW1vbiBsYXcgcmlnaHRzIG9yIGFueSBvdGhlciByaWdodCBvZiBhbnkgdGhpcmQgcGFydHkgb3IgY29uc3RpdHV0ZSBkZWZhbWF0aW9uLCBpbnZhc2lvbiBvZiBwcml2YWN5IG9yIG90aGVyIHRvcnRpb3VzIGluanVyeSB0byBhbnkgdGhpcmQgcGFydHkuCitFWENFUFQgQVMgRVhQUkVTU0xZIFNUQVRFRCBJTiBUSElTIExJQ0VOU0UgT1IgT1RIRVJXSVNFIEFHUkVFRCBJTiBXUklUSU5HIE9SIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBUSEUgV09SSyBJUyBMSUNFTlNFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgQ09OVEVOVFMgT1IgQUNDVVJBQ1kgT0YgVEhFIFdPUksuCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIEFORCBFWENFUFQgRk9SIERBTUFHRVMgQVJJU0lORyBGUk9NIExJQUJJTElUWSBUTyBBIFRISVJEIFBBUlRZIFJFU1VMVElORyBGUk9NIEJSRUFDSCBPRiBUSEUgV0FSUkFOVElFUyBJTiBTRUNUSU9OIDUsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTIuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMTdhNDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTIuMApAQCAtMCwwICsxLDYzIEBACisKK0NyZWF0aXZlIENvbW1vbnMKK0F0dHJpYnV0aW9uIDIuMAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3MuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIHdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCitQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsuCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIGFnZW5jeSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKCJjb3ZlciB2ZXJzaW9uIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCitXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMi41IGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS0yLjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUzZDE5MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMi41CkBAIC0wLDAgKzEsNjMgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworQXR0cmlidXRpb24gMi41CisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3Jrcy4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgd29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yay4KK01lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgYWdlbmN5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KK1dlYmNhc3RpbmcgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE0IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IGNsYXVzZSA0KGIpLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYiksIGFzIHJlcXVlc3RlZC4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgKGlpKSBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTMuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMy4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5M2Q1NjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTMuMApAQCAtMCwwICsxLDcwIEBACisKK0NyZWF0aXZlIENvbW1vbnMKK0F0dHJpYnV0aW9uIDMuMCBVbnBvcnRlZAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUTyBUSEUgRVhURU5UIFRISVMgTElDRU5TRSBNQVkgQkUgQ09OU0lERVJFRCBUTyBCRSBBIENPTlRSQUNULCBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJBZGFwdGF0aW9uIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yaywgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIGFkYXB0YXRpb24sIGRlcml2YXRpdmUgd29yaywgYXJyYW5nZW1lbnQgb2YgbXVzaWMgb3Igb3RoZXIgYWx0ZXJhdGlvbnMgb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCBvciBwaG9ub2dyYW0gb3IgcGVyZm9ybWFuY2UgYW5kIGluY2x1ZGVzIGNpbmVtYXRvZ3JhcGhpYyBhZGFwdGF0aW9ucyBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCBpbmNsdWRpbmcgaW4gYW55IGZvcm0gcmVjb2duaXphYmx5IGRlcml2ZWQgZnJvbSB0aGUgb3JpZ2luYWwsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCB3b3JrLCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0sIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJDb2xsZWN0aW9uIiBtZWFucyBhIGNvbGxlY3Rpb24gb2YgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3MsIHN1Y2ggYXMgZW5jeWNsb3BlZGlhcyBhbmQgYW50aG9sb2dpZXMsIG9yIHBlcmZvcm1hbmNlcywgcGhvbm9ncmFtcyBvciBicm9hZGNhc3RzLCBvciBvdGhlciB3b3JrcyBvciBzdWJqZWN0IG1hdHRlciBvdGhlciB0aGFuIHdvcmtzIGxpc3RlZCBpbiBTZWN0aW9uIDEoZikgYmVsb3csIHdoaWNoLCBieSByZWFzb24gb2YgdGhlIHNlbGVjdGlvbiBhbmQgYXJyYW5nZW1lbnQgb2YgdGhlaXIgY29udGVudHMsIGNvbnN0aXR1dGUgaW50ZWxsZWN0dWFsIGNyZWF0aW9ucywgaW4gd2hpY2ggdGhlIFdvcmsgaXMgaW5jbHVkZWQgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSBhbG9uZyB3aXRoIG9uZSBvciBtb3JlIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGVhY2ggY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCB3aGljaCB0b2dldGhlciBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIChhcyBkZWZpbmVkIGFib3ZlKSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEaXN0cmlidXRlIiBtZWFucyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIHRoZSBvcmlnaW5hbCBhbmQgY29waWVzIG9mIHRoZSBXb3JrIG9yIEFkYXB0YXRpb24sIGFzIGFwcHJvcHJpYXRlLCB0aHJvdWdoIHNhbGUgb3Igb3RoZXIgdHJhbnNmZXIgb2Ygb3duZXJzaGlwLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB0aGF0IG9mZmVyKHMpIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucywgaW4gdGhlIGNhc2Ugb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB3aG8gY3JlYXRlZCB0aGUgV29yayBvciBpZiBubyBpbmRpdmlkdWFsIG9yIGVudGl0eSBjYW4gYmUgaWRlbnRpZmllZCwgdGhlIHB1Ymxpc2hlcjsgYW5kIGluIGFkZGl0aW9uIChpKSBpbiB0aGUgY2FzZSBvZiBhIHBlcmZvcm1hbmNlIHRoZSBhY3RvcnMsIHNpbmdlcnMsIG11c2ljaWFucywgZGFuY2VycywgYW5kIG90aGVyIHBlcnNvbnMgd2hvIGFjdCwgc2luZywgZGVsaXZlciwgZGVjbGFpbSwgcGxheSBpbiwgaW50ZXJwcmV0IG9yIG90aGVyd2lzZSBwZXJmb3JtIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzIG9yIGV4cHJlc3Npb25zIG9mIGZvbGtsb3JlOyAoaWkpIGluIHRoZSBjYXNlIG9mIGEgcGhvbm9ncmFtIHRoZSBwcm9kdWNlciBiZWluZyB0aGUgcGVyc29uIG9yIGxlZ2FsIGVudGl0eSB3aG8gZmlyc3QgZml4ZXMgdGhlIHNvdW5kcyBvZiBhIHBlcmZvcm1hbmNlIG9yIG90aGVyIHNvdW5kczsgYW5kLCAoaWlpKSBpbiB0aGUgY2FzZSBvZiBicm9hZGNhc3RzLCB0aGUgb3JnYW5pemF0aW9uIHRoYXQgdHJhbnNtaXRzIHRoZSBicm9hZGNhc3QuCisiV29yayIgbWVhbnMgdGhlIGxpdGVyYXJ5IGFuZC9vciBhcnRpc3RpYyB3b3JrIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBwcm9kdWN0aW9uIGluIHRoZSBsaXRlcmFyeSwgc2NpZW50aWZpYyBhbmQgYXJ0aXN0aWMgZG9tYWluLCB3aGF0ZXZlciBtYXkgYmUgdGhlIG1vZGUgb3IgZm9ybSBvZiBpdHMgZXhwcmVzc2lvbiBpbmNsdWRpbmcgZGlnaXRhbCBmb3JtLCBzdWNoIGFzIGEgYm9vaywgcGFtcGhsZXQgYW5kIG90aGVyIHdyaXRpbmc7IGEgbGVjdHVyZSwgYWRkcmVzcywgc2VybW9uIG9yIG90aGVyIHdvcmsgb2YgdGhlIHNhbWUgbmF0dXJlOyBhIGRyYW1hdGljIG9yIGRyYW1hdGljby1tdXNpY2FsIHdvcms7IGEgY2hvcmVvZ3JhcGhpYyB3b3JrIG9yIGVudGVydGFpbm1lbnQgaW4gZHVtYiBzaG93OyBhIG11c2ljYWwgY29tcG9zaXRpb24gd2l0aCBvciB3aXRob3V0IHdvcmRzOyBhIGNpbmVtYXRvZ3JhcGhpYyB3b3JrIHRvIHdoaWNoIGFyZSBhc3NpbWlsYXRlZCB3b3JrcyBleHByZXNzZWQgYnkgYSBwcm9jZXNzIGFuYWxvZ291cyB0byBjaW5lbWF0b2dyYXBoeTsgYSB3b3JrIG9mIGRyYXdpbmcsIHBhaW50aW5nLCBhcmNoaXRlY3R1cmUsIHNjdWxwdHVyZSwgZW5ncmF2aW5nIG9yIGxpdGhvZ3JhcGh5OyBhIHBob3RvZ3JhcGhpYyB3b3JrIHRvIHdoaWNoIGFyZSBhc3NpbWlsYXRlZCB3b3JrcyBleHByZXNzZWQgYnkgYSBwcm9jZXNzIGFuYWxvZ291cyB0byBwaG90b2dyYXBoeTsgYSB3b3JrIG9mIGFwcGxpZWQgYXJ0OyBhbiBpbGx1c3RyYXRpb24sIG1hcCwgcGxhbiwgc2tldGNoIG9yIHRocmVlLWRpbWVuc2lvbmFsIHdvcmsgcmVsYXRpdmUgdG8gZ2VvZ3JhcGh5LCB0b3BvZ3JhcGh5LCBhcmNoaXRlY3R1cmUgb3Igc2NpZW5jZTsgYSBwZXJmb3JtYW5jZTsgYSBicm9hZGNhc3Q7IGEgcGhvbm9ncmFtOyBhIGNvbXBpbGF0aW9uIG9mIGRhdGEgdG8gdGhlIGV4dGVudCBpdCBpcyBwcm90ZWN0ZWQgYXMgYSBjb3B5cmlnaHRhYmxlIHdvcms7IG9yIGEgd29yayBwZXJmb3JtZWQgYnkgYSB2YXJpZXR5IG9yIGNpcmN1cyBwZXJmb3JtZXIgdG8gdGhlIGV4dGVudCBpdCBpcyBub3Qgb3RoZXJ3aXNlIGNvbnNpZGVyZWQgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKyJQdWJsaWNseSBQZXJmb3JtIiBtZWFucyB0byBwZXJmb3JtIHB1YmxpYyByZWNpdGF0aW9ucyBvZiB0aGUgV29yayBhbmQgdG8gY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYyB0aG9zZSBwdWJsaWMgcmVjaXRhdGlvbnMsIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzLCBpbmNsdWRpbmcgYnkgd2lyZSBvciB3aXJlbGVzcyBtZWFucyBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZXM7IHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgV29ya3MgaW4gc3VjaCBhIHdheSB0aGF0IG1lbWJlcnMgb2YgdGhlIHB1YmxpYyBtYXkgYWNjZXNzIHRoZXNlIFdvcmtzIGZyb20gYSBwbGFjZSBhbmQgYXQgYSBwbGFjZSBpbmRpdmlkdWFsbHkgY2hvc2VuIGJ5IHRoZW07IHRvIHBlcmZvcm0gdGhlIFdvcmsgdG8gdGhlIHB1YmxpYyBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcyBhbmQgdGhlIGNvbW11bmljYXRpb24gdG8gdGhlIHB1YmxpYyBvZiB0aGUgcGVyZm9ybWFuY2VzIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgYnkgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2U7IHRvIGJyb2FkY2FzdCBhbmQgcmVicm9hZGNhc3QgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyBzaWducywgc291bmRzIG9yIGltYWdlcy4KKyJSZXByb2R1Y2UiIG1lYW5zIHRvIG1ha2UgY29waWVzIG9mIHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGJ5IHNvdW5kIG9yIHZpc3VhbCByZWNvcmRpbmdzIGFuZCB0aGUgcmlnaHQgb2YgZml4YXRpb24gYW5kIHJlcHJvZHVjaW5nIGZpeGF0aW9ucyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIHN0b3JhZ2Ugb2YgYSBwcm90ZWN0ZWQgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtIGluIGRpZ2l0YWwgZm9ybSBvciBvdGhlciBlbGVjdHJvbmljIG1lZGl1bS4KKzIuIEZhaXIgRGVhbGluZyBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSB1c2VzIGZyZWUgZnJvbSBjb3B5cmlnaHQgb3IgcmlnaHRzIGFyaXNpbmcgZnJvbSBsaW1pdGF0aW9ucyBvciBleGNlcHRpb25zIHRoYXQgYXJlIHByb3ZpZGVkIGZvciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGNvcHlyaWdodCBwcm90ZWN0aW9uIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIFJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aW9ucywgYW5kIHRvIFJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3Rpb25zOwordG8gY3JlYXRlIGFuZCBSZXByb2R1Y2UgQWRhcHRhdGlvbnMgcHJvdmlkZWQgdGhhdCBhbnkgc3VjaCBBZGFwdGF0aW9uLCBpbmNsdWRpbmcgYW55IHRyYW5zbGF0aW9uIGluIGFueSBtZWRpdW0sIHRha2VzIHJlYXNvbmFibGUgc3RlcHMgdG8gY2xlYXJseSBsYWJlbCwgZGVtYXJjYXRlIG9yIG90aGVyd2lzZSBpZGVudGlmeSB0aGF0IGNoYW5nZXMgd2VyZSBtYWRlIHRvIHRoZSBvcmlnaW5hbCBXb3JrLiBGb3IgZXhhbXBsZSwgYSB0cmFuc2xhdGlvbiBjb3VsZCBiZSBtYXJrZWQgIlRoZSBvcmlnaW5hbCB3b3JrIHdhcyB0cmFuc2xhdGVkIGZyb20gRW5nbGlzaCB0byBTcGFuaXNoLCIgb3IgYSBtb2RpZmljYXRpb24gY291bGQgaW5kaWNhdGUgIlRoZSBvcmlnaW5hbCB3b3JrIGhhcyBiZWVuIG1vZGlmaWVkLiI7Cit0byBEaXN0cmlidXRlIGFuZCBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGlvbnM7IGFuZCwKK3RvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gQWRhcHRhdGlvbnMuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidDoKKworTm9uLXdhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbm5vdCBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTsKK1dhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbiBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7IGFuZCwKK1ZvbHVudGFyeSBMaWNlbnNlIFNjaGVtZXMuIFRoZSBMaWNlbnNvciB3YWl2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzLCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciwgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIExpY2Vuc29yIGlzIGEgbWVtYmVyIG9mIGEgY29sbGVjdGluZyBzb2NpZXR5IHRoYXQgYWRtaW5pc3RlcnMgdm9sdW50YXJ5IGxpY2Vuc2luZyBzY2hlbWVzLCB2aWEgdGhhdCBzb2NpZXR5LCBmcm9tIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBTdWJqZWN0IHRvIFNlY3Rpb24gOChmKSwgYWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgYWJpbGl0eSBvZiB0aGUgcmVjaXBpZW50IG9mIHRoZSBXb3JrIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBXaGVuIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmssIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgYWJpbGl0eSBvZiBhIHJlY2lwaWVudCBvZiB0aGUgV29yayBmcm9tIFlvdSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChhKSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3Rpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoYiksIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhbiBBZGFwdGF0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIEFkYXB0YXRpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoYiksIGFzIHJlcXVlc3RlZC4KK0lmIFlvdSBEaXN0cmlidXRlLCBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucywgWW91IG11c3QsIHVubGVzcyBhIHJlcXVlc3QgaGFzIGJlZW4gbWFkZSBwdXJzdWFudCB0byBTZWN0aW9uIDQoYSksIGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuLCBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uICgiQXR0cmlidXRpb24gUGFydGllcyIpIGluIExpY2Vuc29yYHMgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IChpaSkgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyAoaWlpKSB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVUkksIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIChpdikgLCBjb25zaXN0ZW50IHdpdGggU2VjdGlvbiAzKGIpLCBpbiB0aGUgY2FzZSBvZiBhbiBBZGFwdGF0aW9uLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBBZGFwdGF0aW9uIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIDQgKGIpIG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQWRhcHRhdGlvbiBvciBDb2xsZWN0aW9uLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIsIGlmIGEgY3JlZGl0IGZvciBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMgb2YgdGhlIEFkYXB0YXRpb24gb3IgQ29sbGVjdGlvbiBhcHBlYXJzLCB0aGVuIGFzIHBhcnQgb2YgdGhlc2UgY3JlZGl0cyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHRoZSBjcmVkaXRzIGZvciB0aGUgb3RoZXIgY29udHJpYnV0aW5nIGF1dGhvcnMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBZb3UgbWF5IG9ubHkgdXNlIHRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIGZvciB0aGUgcHVycG9zZSBvZiBhdHRyaWJ1dGlvbiBpbiB0aGUgbWFubmVyIHNldCBvdXQgYWJvdmUgYW5kLCBieSBleGVyY2lzaW5nIFlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgWW91IG1heSBub3QgaW1wbGljaXRseSBvciBleHBsaWNpdGx5IGFzc2VydCBvciBpbXBseSBhbnkgY29ubmVjdGlvbiB3aXRoLCBzcG9uc29yc2hpcCBvciBlbmRvcnNlbWVudCBieSB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcywgYXMgYXBwcm9wcmlhdGUsIG9mIFlvdSBvciBZb3VyIHVzZSBvZiB0aGUgV29yaywgd2l0aG91dCB0aGUgc2VwYXJhdGUsIGV4cHJlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLgorRXhjZXB0IGFzIG90aGVyd2lzZSBhZ3JlZWQgaW4gd3JpdGluZyBieSB0aGUgTGljZW5zb3Igb3IgYXMgbWF5IGJlIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIGlmIFlvdSBSZXByb2R1Y2UsIERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBlaXRoZXIgYnkgaXRzZWxmIG9yIGFzIHBhcnQgb2YgYW55IEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCBub3QgZGlzdG9ydCwgbXV0aWxhdGUsIG1vZGlmeSBvciB0YWtlIG90aGVyIGRlcm9nYXRvcnkgYWN0aW9uIGluIHJlbGF0aW9uIHRvIHRoZSBXb3JrIHdoaWNoIHdvdWxkIGJlIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3JgcyBob25vciBvciByZXB1dGF0aW9uLiBMaWNlbnNvciBhZ3JlZXMgdGhhdCBpbiB0aG9zZSBqdXJpc2RpY3Rpb25zIChlLmcuIEphcGFuKSwgaW4gd2hpY2ggYW55IGV4ZXJjaXNlIG9mIHRoZSByaWdodCBncmFudGVkIGluIFNlY3Rpb24gMyhiKSBvZiB0aGlzIExpY2Vuc2UgKHRoZSByaWdodCB0byBtYWtlIEFkYXB0YXRpb25zKSB3b3VsZCBiZSBkZWVtZWQgdG8gYmUgYSBkaXN0b3J0aW9uLCBtdXRpbGF0aW9uLCBtb2RpZmljYXRpb24gb3Igb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcmBzIGhvbm9yIGFuZCByZXB1dGF0aW9uLCB0aGUgTGljZW5zb3Igd2lsbCB3YWl2ZSBvciBub3QgYXNzZXJ0LCBhcyBhcHByb3ByaWF0ZSwgdGhpcyBTZWN0aW9uLCB0byB0aGUgZnVsbGVzdCBleHRlbnQgcGVybWl0dGVkIGJ5IHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdywgdG8gZW5hYmxlIFlvdSB0byByZWFzb25hYmx5IGV4ZXJjaXNlIFlvdXIgcmlnaHQgdW5kZXIgU2VjdGlvbiAzKGIpIG9mIHRoaXMgTGljZW5zZSAocmlnaHQgdG8gbWFrZSBBZGFwdGF0aW9ucykgYnV0IG5vdCBvdGhlcndpc2UuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aW9uLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIGFuIEFkYXB0YXRpb24sIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitUaGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIsIGFuZCB0aGUgc3ViamVjdCBtYXR0ZXIgcmVmZXJlbmNlZCwgaW4gdGhpcyBMaWNlbnNlIHdlcmUgZHJhZnRlZCB1dGlsaXppbmcgdGhlIHRlcm1pbm9sb2d5IG9mIHRoZSBCZXJuZSBDb252ZW50aW9uIGZvciB0aGUgUHJvdGVjdGlvbiBvZiBMaXRlcmFyeSBhbmQgQXJ0aXN0aWMgV29ya3MgKGFzIGFtZW5kZWQgb24gU2VwdGVtYmVyIDI4LCAxOTc5KSwgdGhlIFJvbWUgQ29udmVudGlvbiBvZiAxOTYxLCB0aGUgV0lQTyBDb3B5cmlnaHQgVHJlYXR5IG9mIDE5OTYsIHRoZSBXSVBPIFBlcmZvcm1hbmNlcyBhbmQgUGhvbm9ncmFtcyBUcmVhdHkgb2YgMTk5NiBhbmQgdGhlIFVuaXZlcnNhbCBDb3B5cmlnaHQgQ29udmVudGlvbiAoYXMgcmV2aXNlZCBvbiBKdWx5IDI0LCAxOTcxKS4gVGhlc2UgcmlnaHRzIGFuZCBzdWJqZWN0IG1hdHRlciB0YWtlIGVmZmVjdCBpbiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIGluIHdoaWNoIHRoZSBMaWNlbnNlIHRlcm1zIGFyZSBzb3VnaHQgdG8gYmUgZW5mb3JjZWQgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHByb3Zpc2lvbnMgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIHRyZWF0eSBwcm92aXNpb25zIGluIHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdy4gSWYgdGhlIHN0YW5kYXJkIHN1aXRlIG9mIHJpZ2h0cyBncmFudGVkIHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdyBpbmNsdWRlcyBhZGRpdGlvbmFsIHJpZ2h0cyBub3QgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIHN1Y2ggYWRkaXRpb25hbCByaWdodHMgYXJlIGRlZW1lZCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgTGljZW5zZTsgdGhpcyBMaWNlbnNlIGlzIG5vdCBpbnRlbmRlZCB0byByZXN0cmljdCB0aGUgbGljZW5zZSBvZiBhbnkgcmlnaHRzIHVuZGVyIGFwcGxpY2FibGUgbGF3LgorQ3JlYXRpdmUgQ29tbW9ucyBOb3RpY2UKKworQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgQ3JlYXRpdmUgQ29tbW9ucyBkb2VzIG5vdCBhdXRob3JpemUgdGhlIHVzZSBieSBlaXRoZXIgcGFydHkgb2YgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIHRyYWRlbWFyayByZXN0cmljdGlvbiBkb2VzIG5vdCBmb3JtIHBhcnQgb2YgdGhpcyBMaWNlbnNlLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzVkMjI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0xLjAKQEAgLTAsMCArMSw2MyBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbCAxLjAKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgRFJBRlQgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzOworVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGEgRGVyaXZhdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIERlcml2YXRpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgZ2l2ZSB0aGUgT3JpZ2luYWwgQXV0aG9yIGNyZWRpdCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYgYXBwbGljYWJsZSkgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciBpZiBzdXBwbGllZDsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworQnkgb2ZmZXJpbmcgdGhlIFdvcmsgZm9yIHB1YmxpYyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgcmVwcmVzZW50cyBhbmQgd2FycmFudHMgdGhhdCwgdG8gdGhlIGJlc3Qgb2YgTGljZW5zb3JgcyBrbm93bGVkZ2UgYWZ0ZXIgcmVhc29uYWJsZSBpbnF1aXJ5OgorTGljZW5zb3IgaGFzIHNlY3VyZWQgYWxsIHJpZ2h0cyBpbiB0aGUgV29yayBuZWNlc3NhcnkgdG8gZ3JhbnQgdGhlIGxpY2Vuc2UgcmlnaHRzIGhlcmV1bmRlciBhbmQgdG8gcGVybWl0IHRoZSBsYXdmdWwgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aXRob3V0IFlvdSBoYXZpbmcgYW55IG9ibGlnYXRpb24gdG8gcGF5IGFueSByb3lhbHRpZXMsIGNvbXB1bHNvcnkgbGljZW5zZSBmZWVzLCByZXNpZHVhbHMgb3IgYW55IG90aGVyIHBheW1lbnRzOworVGhlIFdvcmsgZG9lcyBub3QgaW5mcmluZ2UgdGhlIGNvcHlyaWdodCwgdHJhZGVtYXJrLCBwdWJsaWNpdHkgcmlnaHRzLCBjb21tb24gbGF3IHJpZ2h0cyBvciBhbnkgb3RoZXIgcmlnaHQgb2YgYW55IHRoaXJkIHBhcnR5IG9yIGNvbnN0aXR1dGUgZGVmYW1hdGlvbiwgaW52YXNpb24gb2YgcHJpdmFjeSBvciBvdGhlciB0b3J0aW91cyBpbmp1cnkgdG8gYW55IHRoaXJkIHBhcnR5LgorRVhDRVBUIEFTIEVYUFJFU1NMWSBTVEFURUQgSU4gVEhJUyBMSUNFTlNFIE9SIE9USEVSV0lTRSBBR1JFRUQgSU4gV1JJVElORyBPUiBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgVEhFIFdPUksgSVMgTElDRU5TRUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIENPTlRFTlRTIE9SIEFDQ1VSQUNZIE9GIFRIRSBXT1JLLgorNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBBTkQgRVhDRVBUIEZPUiBEQU1BR0VTIEFSSVNJTkcgRlJPTSBMSUFCSUxJVFkgVE8gQSBUSElSRCBQQVJUWSBSRVNVTFRJTkcgRlJPTSBCUkVBQ0ggT0YgVEhFIFdBUlJBTlRJRVMgSU4gU0VDVElPTiA1LCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0yLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGM1MTc2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0yLjAKQEAgLTAsMCArMSw2NiBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbCAyLjAKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzOworVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gU2VjdGlvbnMgNChkKSBhbmQgNChlKS4KKworNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgbm90IGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMyBhYm92ZSBpbiBhbnkgbWFubmVyIHRoYXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uIFRoZSBleGNoYW5nZSBvZiB0aGUgV29yayBmb3Igb3RoZXIgY29weXJpZ2h0ZWQgd29ya3MgYnkgbWVhbnMgb2YgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igb3RoZXJ3aXNlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHRvIGJlIGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24sIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgYW55IG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mIGNvcHlyaWdodGVkIHdvcmtzLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCitQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yayBpZiB0aGF0IHBlcmZvcm1hbmNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIGFnZW5jeSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKCJjb3ZlciB2ZXJzaW9uIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggY292ZXIgdmVyc2lvbiBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KK1dlYmNhc3RpbmcgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLCBpZiBZb3VyIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtMi41IGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0yLjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThlNjFlMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtMi41CkBAIC0wLDAgKzEsNjYgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwgMi41CisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3JrczsKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIFNlY3Rpb25zIDQoZCkgYW5kIDQoZSkuCisKKzQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYyksIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UgNChjKSwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgKGlpKSBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrIGlmIHRoYXQgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgYWdlbmN5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3ZlciB2ZXJzaW9uIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0zLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjM0MjVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0zLjAKQEAgLTAsMCArMSw3MiBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKK0F0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwgMy4wIFVucG9ydGVkCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRPIFRIRSBFWFRFTlQgVEhJUyBMSUNFTlNFIE1BWSBCRSBDT05TSURFUkVEIFRPIEJFIEEgQ09OVFJBQ1QsIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkFkYXB0YXRpb24iIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrLCBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgYWRhcHRhdGlvbiwgZGVyaXZhdGl2ZSB3b3JrLCBhcnJhbmdlbWVudCBvZiBtdXNpYyBvciBvdGhlciBhbHRlcmF0aW9ucyBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIG9yIHBob25vZ3JhbSBvciBwZXJmb3JtYW5jZSBhbmQgaW5jbHVkZXMgY2luZW1hdG9ncmFwaGljIGFkYXB0YXRpb25zIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkIGluY2x1ZGluZyBpbiBhbnkgZm9ybSByZWNvZ25pemFibHkgZGVyaXZlZCBmcm9tIHRoZSBvcmlnaW5hbCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIHdvcmssIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSwgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkNvbGxlY3Rpb24iIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3Jrcywgc3VjaCBhcyBlbmN5Y2xvcGVkaWFzIGFuZCBhbnRob2xvZ2llcywgb3IgcGVyZm9ybWFuY2VzLCBwaG9ub2dyYW1zIG9yIGJyb2FkY2FzdHMsIG9yIG90aGVyIHdvcmtzIG9yIHN1YmplY3QgbWF0dGVyIG90aGVyIHRoYW4gd29ya3MgbGlzdGVkIGluIFNlY3Rpb24gMShmKSBiZWxvdywgd2hpY2gsIGJ5IHJlYXNvbiBvZiB0aGUgc2VsZWN0aW9uIGFuZCBhcnJhbmdlbWVudCBvZiB0aGVpciBjb250ZW50cywgY29uc3RpdHV0ZSBpbnRlbGxlY3R1YWwgY3JlYXRpb25zLCBpbiB3aGljaCB0aGUgV29yayBpcyBpbmNsdWRlZCBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtIGFsb25nIHdpdGggb25lIG9yIG1vcmUgb3RoZXIgY29udHJpYnV0aW9ucywgZWFjaCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIHdoaWNoIHRvZ2V0aGVyIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gKGFzIGRlZmluZWQgYWJvdmUpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRpc3RyaWJ1dGUiIG1lYW5zIHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgdGhlIG9yaWdpbmFsIGFuZCBjb3BpZXMgb2YgdGhlIFdvcmsgb3IgQWRhcHRhdGlvbiwgYXMgYXBwcm9wcmlhdGUsIHRocm91Z2ggc2FsZSBvciBvdGhlciB0cmFuc2ZlciBvZiBvd25lcnNoaXAuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHRoYXQgb2ZmZXIocykgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zLCBpbiB0aGUgY2FzZSBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHdobyBjcmVhdGVkIHRoZSBXb3JrIG9yIGlmIG5vIGluZGl2aWR1YWwgb3IgZW50aXR5IGNhbiBiZSBpZGVudGlmaWVkLCB0aGUgcHVibGlzaGVyOyBhbmQgaW4gYWRkaXRpb24gKGkpIGluIHRoZSBjYXNlIG9mIGEgcGVyZm9ybWFuY2UgdGhlIGFjdG9ycywgc2luZ2VycywgbXVzaWNpYW5zLCBkYW5jZXJzLCBhbmQgb3RoZXIgcGVyc29ucyB3aG8gYWN0LCBzaW5nLCBkZWxpdmVyLCBkZWNsYWltLCBwbGF5IGluLCBpbnRlcnByZXQgb3Igb3RoZXJ3aXNlIHBlcmZvcm0gbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3Mgb3IgZXhwcmVzc2lvbnMgb2YgZm9sa2xvcmU7IChpaSkgaW4gdGhlIGNhc2Ugb2YgYSBwaG9ub2dyYW0gdGhlIHByb2R1Y2VyIGJlaW5nIHRoZSBwZXJzb24gb3IgbGVnYWwgZW50aXR5IHdobyBmaXJzdCBmaXhlcyB0aGUgc291bmRzIG9mIGEgcGVyZm9ybWFuY2Ugb3Igb3RoZXIgc291bmRzOyBhbmQsIChpaWkpIGluIHRoZSBjYXNlIG9mIGJyb2FkY2FzdHMsIHRoZSBvcmdhbml6YXRpb24gdGhhdCB0cmFuc21pdHMgdGhlIGJyb2FkY2FzdC4KKyJXb3JrIiBtZWFucyB0aGUgbGl0ZXJhcnkgYW5kL29yIGFydGlzdGljIHdvcmsgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IHByb2R1Y3Rpb24gaW4gdGhlIGxpdGVyYXJ5LCBzY2llbnRpZmljIGFuZCBhcnRpc3RpYyBkb21haW4sIHdoYXRldmVyIG1heSBiZSB0aGUgbW9kZSBvciBmb3JtIG9mIGl0cyBleHByZXNzaW9uIGluY2x1ZGluZyBkaWdpdGFsIGZvcm0sIHN1Y2ggYXMgYSBib29rLCBwYW1waGxldCBhbmQgb3RoZXIgd3JpdGluZzsgYSBsZWN0dXJlLCBhZGRyZXNzLCBzZXJtb24gb3Igb3RoZXIgd29yayBvZiB0aGUgc2FtZSBuYXR1cmU7IGEgZHJhbWF0aWMgb3IgZHJhbWF0aWNvLW11c2ljYWwgd29yazsgYSBjaG9yZW9ncmFwaGljIHdvcmsgb3IgZW50ZXJ0YWlubWVudCBpbiBkdW1iIHNob3c7IGEgbXVzaWNhbCBjb21wb3NpdGlvbiB3aXRoIG9yIHdpdGhvdXQgd29yZHM7IGEgY2luZW1hdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIGNpbmVtYXRvZ3JhcGh5OyBhIHdvcmsgb2YgZHJhd2luZywgcGFpbnRpbmcsIGFyY2hpdGVjdHVyZSwgc2N1bHB0dXJlLCBlbmdyYXZpbmcgb3IgbGl0aG9ncmFwaHk7IGEgcGhvdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIHBob3RvZ3JhcGh5OyBhIHdvcmsgb2YgYXBwbGllZCBhcnQ7IGFuIGlsbHVzdHJhdGlvbiwgbWFwLCBwbGFuLCBza2V0Y2ggb3IgdGhyZWUtZGltZW5zaW9uYWwgd29yayByZWxhdGl2ZSB0byBnZW9ncmFwaHksIHRvcG9ncmFwaHksIGFyY2hpdGVjdHVyZSBvciBzY2llbmNlOyBhIHBlcmZvcm1hbmNlOyBhIGJyb2FkY2FzdDsgYSBwaG9ub2dyYW07IGEgY29tcGlsYXRpb24gb2YgZGF0YSB0byB0aGUgZXh0ZW50IGl0IGlzIHByb3RlY3RlZCBhcyBhIGNvcHlyaWdodGFibGUgd29yazsgb3IgYSB3b3JrIHBlcmZvcm1lZCBieSBhIHZhcmlldHkgb3IgY2lyY3VzIHBlcmZvcm1lciB0byB0aGUgZXh0ZW50IGl0IGlzIG5vdCBvdGhlcndpc2UgY29uc2lkZXJlZCBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmsuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorIlB1YmxpY2x5IFBlcmZvcm0iIG1lYW5zIHRvIHBlcmZvcm0gcHVibGljIHJlY2l0YXRpb25zIG9mIHRoZSBXb3JrIGFuZCB0byBjb21tdW5pY2F0ZSB0byB0aGUgcHVibGljIHRob3NlIHB1YmxpYyByZWNpdGF0aW9ucywgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MsIGluY2x1ZGluZyBieSB3aXJlIG9yIHdpcmVsZXNzIG1lYW5zIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlczsgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBXb3JrcyBpbiBzdWNoIGEgd2F5IHRoYXQgbWVtYmVycyBvZiB0aGUgcHVibGljIG1heSBhY2Nlc3MgdGhlc2UgV29ya3MgZnJvbSBhIHBsYWNlIGFuZCBhdCBhIHBsYWNlIGluZGl2aWR1YWxseSBjaG9zZW4gYnkgdGhlbTsgdG8gcGVyZm9ybSB0aGUgV29yayB0byB0aGUgcHVibGljIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzIGFuZCB0aGUgY29tbXVuaWNhdGlvbiB0byB0aGUgcHVibGljIG9mIHRoZSBwZXJmb3JtYW5jZXMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBieSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZTsgdG8gYnJvYWRjYXN0IGFuZCByZWJyb2FkY2FzdCB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHNpZ25zLCBzb3VuZHMgb3IgaW1hZ2VzLgorIlJlcHJvZHVjZSIgbWVhbnMgdG8gbWFrZSBjb3BpZXMgb2YgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYnkgc291bmQgb3IgdmlzdWFsIHJlY29yZGluZ3MgYW5kIHRoZSByaWdodCBvZiBmaXhhdGlvbiBhbmQgcmVwcm9kdWNpbmcgZml4YXRpb25zIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgc3RvcmFnZSBvZiBhIHByb3RlY3RlZCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0gaW4gZGlnaXRhbCBmb3JtIG9yIG90aGVyIGVsZWN0cm9uaWMgbWVkaXVtLgorMi4gRmFpciBEZWFsaW5nIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHVzZXMgZnJlZSBmcm9tIGNvcHlyaWdodCBvciByaWdodHMgYXJpc2luZyBmcm9tIGxpbWl0YXRpb25zIG9yIGV4Y2VwdGlvbnMgdGhhdCBhcmUgcHJvdmlkZWQgZm9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgY29weXJpZ2h0IHByb3RlY3Rpb24gdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gUmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3Rpb25zLCBhbmQgdG8gUmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGlvbnM7Cit0byBjcmVhdGUgYW5kIFJlcHJvZHVjZSBBZGFwdGF0aW9ucyBwcm92aWRlZCB0aGF0IGFueSBzdWNoIEFkYXB0YXRpb24sIGluY2x1ZGluZyBhbnkgdHJhbnNsYXRpb24gaW4gYW55IG1lZGl1bSwgdGFrZXMgcmVhc29uYWJsZSBzdGVwcyB0byBjbGVhcmx5IGxhYmVsLCBkZW1hcmNhdGUgb3Igb3RoZXJ3aXNlIGlkZW50aWZ5IHRoYXQgY2hhbmdlcyB3ZXJlIG1hZGUgdG8gdGhlIG9yaWdpbmFsIFdvcmsuIEZvciBleGFtcGxlLCBhIHRyYW5zbGF0aW9uIGNvdWxkIGJlIG1hcmtlZCAiVGhlIG9yaWdpbmFsIHdvcmsgd2FzIHRyYW5zbGF0ZWQgZnJvbSBFbmdsaXNoIHRvIFNwYW5pc2gsIiBvciBhIG1vZGlmaWNhdGlvbiBjb3VsZCBpbmRpY2F0ZSAiVGhlIG9yaWdpbmFsIHdvcmsgaGFzIGJlZW4gbW9kaWZpZWQuIjsKK3RvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aW9uczsgYW5kLAordG8gRGlzdHJpYnV0ZSBhbmQgUHVibGljbHkgUGVyZm9ybSBBZGFwdGF0aW9ucy4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBTdWJqZWN0IHRvIFNlY3Rpb24gOChmKSwgYWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiBTZWN0aW9uIDQoZCkuCisKKzQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKSBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIGFiaWxpdHkgb2YgdGhlIHJlY2lwaWVudCBvZiB0aGUgV29yayB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gV2hlbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYSByZWNpcGllbnQgb2YgdGhlIFdvcmsgZnJvbSBZb3UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gVGhpcyBTZWN0aW9uIDQoYSkgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aW9uLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aW9uIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGMpLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYW4gQWRhcHRhdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBBZGFwdGF0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGMpLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4KK0lmIFlvdSBEaXN0cmlidXRlLCBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucywgWW91IG11c3QsIHVubGVzcyBhIHJlcXVlc3QgaGFzIGJlZW4gbWFkZSBwdXJzdWFudCB0byBTZWN0aW9uIDQoYSksIGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuLCBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uICgiQXR0cmlidXRpb24gUGFydGllcyIpIGluIExpY2Vuc29yYHMgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IChpaSkgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyAoaWlpKSB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVUkksIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kLCAoaXYpIGNvbnNpc3RlbnQgd2l0aCBTZWN0aW9uIDMoYiksIGluIHRoZSBjYXNlIG9mIGFuIEFkYXB0YXRpb24sIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIEFkYXB0YXRpb24gKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gVGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gNChjKSBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIEFkYXB0YXRpb24gb3IgQ29sbGVjdGlvbiwgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyLCBpZiBhIGNyZWRpdCBmb3IgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzIG9mIHRoZSBBZGFwdGF0aW9uIG9yIENvbGxlY3Rpb24gYXBwZWFycywgdGhlbiBhcyBwYXJ0IG9mIHRoZXNlIGNyZWRpdHMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyB0aGUgY3JlZGl0cyBmb3IgdGhlIG90aGVyIGNvbnRyaWJ1dGluZyBhdXRob3JzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgWW91IG1heSBvbmx5IHVzZSB0aGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgYXR0cmlidXRpb24gaW4gdGhlIG1hbm5lciBzZXQgb3V0IGFib3ZlIGFuZCwgYnkgZXhlcmNpc2luZyBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgbm90IGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBhc3NlcnQgb3IgaW1wbHkgYW55IGNvbm5lY3Rpb24gd2l0aCwgc3BvbnNvcnNoaXAgb3IgZW5kb3JzZW1lbnQgYnkgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMsIGFzIGFwcHJvcHJpYXRlLCBvZiBZb3Ugb3IgWW91ciB1c2Ugb2YgdGhlIFdvcmssIHdpdGhvdXQgdGhlIHNlcGFyYXRlLCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcy4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0OgorCitOb24td2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2Fubm90IGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlOworV2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2FuIGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGlmIFlvdXIgZXhlcmNpc2Ugb2Ygc3VjaCByaWdodHMgaXMgZm9yIGEgcHVycG9zZSBvciB1c2Ugd2hpY2ggaXMgb3RoZXJ3aXNlIHRoYW4gbm9uY29tbWVyY2lhbCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA0KGIpIGFuZCBvdGhlcndpc2Ugd2FpdmVzIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lOyBhbmQsCitWb2x1bnRhcnkgTGljZW5zZSBTY2hlbWVzLiBUaGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzLCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciwgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIExpY2Vuc29yIGlzIGEgbWVtYmVyIG9mIGEgY29sbGVjdGluZyBzb2NpZXR5IHRoYXQgYWRtaW5pc3RlcnMgdm9sdW50YXJ5IGxpY2Vuc2luZyBzY2hlbWVzLCB2aWEgdGhhdCBzb2NpZXR5LCBmcm9tIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSB0aGF0IGlzIGZvciBhIHB1cnBvc2Ugb3IgdXNlIHdoaWNoIGlzIG90aGVyd2lzZSB0aGFuIG5vbmNvbW1lcmNpYWwgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNChjKS4KK0V4Y2VwdCBhcyBvdGhlcndpc2UgYWdyZWVkIGluIHdyaXRpbmcgYnkgdGhlIExpY2Vuc29yIG9yIGFzIG1heSBiZSBvdGhlcndpc2UgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBpZiBZb3UgUmVwcm9kdWNlLCBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgZWl0aGVyIGJ5IGl0c2VsZiBvciBhcyBwYXJ0IG9mIGFueSBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucywgWW91IG11c3Qgbm90IGRpc3RvcnQsIG11dGlsYXRlLCBtb2RpZnkgb3IgdGFrZSBvdGhlciBkZXJvZ2F0b3J5IGFjdGlvbiBpbiByZWxhdGlvbiB0byB0aGUgV29yayB3aGljaCB3b3VsZCBiZSBwcmVqdWRpY2lhbCB0byB0aGUgT3JpZ2luYWwgQXV0aG9yYHMgaG9ub3Igb3IgcmVwdXRhdGlvbi4gTGljZW5zb3IgYWdyZWVzIHRoYXQgaW4gdGhvc2UganVyaXNkaWN0aW9ucyAoZS5nLiBKYXBhbiksIGluIHdoaWNoIGFueSBleGVyY2lzZSBvZiB0aGUgcmlnaHQgZ3JhbnRlZCBpbiBTZWN0aW9uIDMoYikgb2YgdGhpcyBMaWNlbnNlICh0aGUgcmlnaHQgdG8gbWFrZSBBZGFwdGF0aW9ucykgd291bGQgYmUgZGVlbWVkIHRvIGJlIGEgZGlzdG9ydGlvbiwgbXV0aWxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIG90aGVyIGRlcm9nYXRvcnkgYWN0aW9uIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3JgcyBob25vciBhbmQgcmVwdXRhdGlvbiwgdGhlIExpY2Vuc29yIHdpbGwgd2FpdmUgb3Igbm90IGFzc2VydCwgYXMgYXBwcm9wcmlhdGUsIHRoaXMgU2VjdGlvbiwgdG8gdGhlIGZ1bGxlc3QgZXh0ZW50IHBlcm1pdHRlZCBieSB0aGUgYXBwbGljYWJsZSBuYXRpb25hbCBsYXcsIHRvIGVuYWJsZSBZb3UgdG8gcmVhc29uYWJseSBleGVyY2lzZSBZb3VyIHJpZ2h0IHVuZGVyIFNlY3Rpb24gMyhiKSBvZiB0aGlzIExpY2Vuc2UgKHJpZ2h0IHRvIG1ha2UgQWRhcHRhdGlvbnMpIGJ1dCBub3Qgb3RoZXJ3aXNlLgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGlvbiwgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSBhbiBBZGFwdGF0aW9uLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorVGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyLCBhbmQgdGhlIHN1YmplY3QgbWF0dGVyIHJlZmVyZW5jZWQsIGluIHRoaXMgTGljZW5zZSB3ZXJlIGRyYWZ0ZWQgdXRpbGl6aW5nIHRoZSB0ZXJtaW5vbG9neSBvZiB0aGUgQmVybmUgQ29udmVudGlvbiBmb3IgdGhlIFByb3RlY3Rpb24gb2YgTGl0ZXJhcnkgYW5kIEFydGlzdGljIFdvcmtzIChhcyBhbWVuZGVkIG9uIFNlcHRlbWJlciAyOCwgMTk3OSksIHRoZSBSb21lIENvbnZlbnRpb24gb2YgMTk2MSwgdGhlIFdJUE8gQ29weXJpZ2h0IFRyZWF0eSBvZiAxOTk2LCB0aGUgV0lQTyBQZXJmb3JtYW5jZXMgYW5kIFBob25vZ3JhbXMgVHJlYXR5IG9mIDE5OTYgYW5kIHRoZSBVbml2ZXJzYWwgQ29weXJpZ2h0IENvbnZlbnRpb24gKGFzIHJldmlzZWQgb24gSnVseSAyNCwgMTk3MSkuIFRoZXNlIHJpZ2h0cyBhbmQgc3ViamVjdCBtYXR0ZXIgdGFrZSBlZmZlY3QgaW4gdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiBpbiB3aGljaCB0aGUgTGljZW5zZSB0ZXJtcyBhcmUgc291Z2h0IHRvIGJlIGVuZm9yY2VkIGFjY29yZGluZyB0byB0aGUgY29ycmVzcG9uZGluZyBwcm92aXNpb25zIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSB0cmVhdHkgcHJvdmlzaW9ucyBpbiB0aGUgYXBwbGljYWJsZSBuYXRpb25hbCBsYXcuIElmIHRoZSBzdGFuZGFyZCBzdWl0ZSBvZiByaWdodHMgZ3JhbnRlZCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcgaW5jbHVkZXMgYWRkaXRpb25hbCByaWdodHMgbm90IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBzdWNoIGFkZGl0aW9uYWwgcmlnaHRzIGFyZSBkZWVtZWQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIExpY2Vuc2U7IHRoaXMgTGljZW5zZSBpcyBub3QgaW50ZW5kZWQgdG8gcmVzdHJpY3QgdGhlIGxpY2Vuc2Ugb2YgYW55IHJpZ2h0cyB1bmRlciBhcHBsaWNhYmxlIGxhdy4KK0NyZWF0aXZlIENvbW1vbnMgTm90aWNlCisKK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIENyZWF0aXZlIENvbW1vbnMgZG9lcyBub3QgYXV0aG9yaXplIHRoZSB1c2UgYnkgZWl0aGVyIHBhcnR5IG9mIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhpcyB0cmFkZW1hcmsgcmVzdHJpY3Rpb24gZG9lcyBub3QgZm9ybSBwYXJ0IG9mIHRoZSBMaWNlbnNlLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLU5ELTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTdkODRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0xLjAKQEAgLTAsMCArMSw1IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworQXR0cmlidXRpb24tTm9EZXJpdnMtTm9uQ29tbWVyY2lhbCAxLjAgIENSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIERSQUZUIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4gTGljZW5zZSAgVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIElTIFBST0hJQklURUQuICBCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLiAgMS4gRGVmaW5pdGlvbnMgICJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4gIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiAiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiAiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuICJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiAiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLiAyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuICAzLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6ICB0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7IHRvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7IFRoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLiAgNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOiAgWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLiBZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4gSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4gNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyICBCeSBvZmZlcmluZyB0aGUgV29yayBmb3IgcHVibGljIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciByZXByZXNlbnRzIGFuZCB3YXJyYW50cyB0aGF0LCB0byB0aGUgYmVzdCBvZiBMaWNlbnNvcmBzIGtub3dsZWRnZSBhZnRlciByZWFzb25hYmxlIGlucXVpcnk6IExpY2Vuc29yIGhhcyBzZWN1cmVkIGFsbCByaWdodHMgaW4gdGhlIFdvcmsgbmVjZXNzYXJ5IHRvIGdyYW50IHRoZSBsaWNlbnNlIHJpZ2h0cyBoZXJldW5kZXIgYW5kIHRvIHBlcm1pdCB0aGUgbGF3ZnVsIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2l0aG91dCBZb3UgaGF2aW5nIGFueSBvYmxpZ2F0aW9uIHRvIHBheSBhbnkgcm95YWx0aWVzLCBjb21wdWxzb3J5IGxpY2Vuc2UgZmVlcywgcmVzaWR1YWxzIG9yIGFueSBvdGhlciBwYXltZW50czsgVGhlIFdvcmsgZG9lcyBub3QgaW5mcmluZ2UgdGhlIGNvcHlyaWdodCwgdHJhZGVtYXJrLCBwdWJsaWNpdHkgcmlnaHRzLCBjb21tb24gbGF3IHJpZ2h0cyBvciBhbnkgb3RoZXIgcmlnaHQgb2YgYW55IHRoaXJkIHBhcnR5IG9yIGNvbnN0aXR1dGUgZGVmYW1hdGlvbiwgaW52YXNpb24gb2YgcHJpdmFjeSBvciBvdGhlciB0b3J0aW91cyBpbmp1cnkgdG8gYW55IHRoaXJkIHBhcnR5LiBFWENFUFQgQVMgRVhQUkVTU0xZIFNUQVRFRCBJTiBUSElTIExJQ0VOU0UgT1IgT1RIRVJXSVNFIEFHUkVFRCBJTiBXUklUSU5HIE9SIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBUSEUgV09SSyBJUyBMSUNFTlNFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgQ09OVEVOVFMgT1IgQUNDVVJBQ1kgT0YgVEhFIFdPUksuIDYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgQU5EIEVYQ0VQVCBGT1IgREFNQUdFUyBBUklTSU5HIEZST00gTElBQklMSVRZIFRPIEEgVEhJUkQgUEFSVFkgUkVTVUxUSU5HIEZST00gQlJFQUNIIE9GIFRIRSBXQVJSQU5USUVTIElOIFNFQ1RJT04gNSwgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuICA3LiBUZXJtaW5hdGlvbiAgVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuIDguIE1pc2NlbGxhbmVvdXMgIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4gTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuIENyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLiAgRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLiAgQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0yLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLU5ELTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDZjMTcwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0yLjAKQEAgLTAsMCArMSw2MyBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbC1Ob0Rlcml2cyAyLjAKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOworVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMsIGJ1dCBvdGhlcndpc2UgeW91IGhhdmUgbm8gcmlnaHRzIHRvIG1ha2UgRGVyaXZhdGl2ZSBXb3Jrcy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiBTZWN0aW9ucyA0KGQpIGFuZCA0KGUpLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmssIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgYW5kIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCitQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yayBpZiB0aGF0IHBlcmZvcm1hbmNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIGFnZW5jeSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKCJjb3ZlciB2ZXJzaW9uIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggY292ZXIgdmVyc2lvbiBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KK1dlYmNhc3RpbmcgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLCBpZiBZb3VyIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLU5ELTIuNSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtTkQtMi41Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiN2FhNTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLU5ELTIuNQpAQCAtMCwwICsxLDYzIEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLU5vRGVyaXZzIDIuNQorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7CitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cywgYnV0IG90aGVyd2lzZSB5b3UgaGF2ZSBubyByaWdodHMgdG8gbWFrZSBEZXJpdmF0aXZlIFdvcmtzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIFNlY3Rpb25zIDQoZCkgYW5kIDQoZSkuCisKKzQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYyksIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgbm90IGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMyBhYm92ZSBpbiBhbnkgbWFubmVyIHRoYXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uIFRoZSBleGNoYW5nZSBvZiB0aGUgV29yayBmb3Igb3RoZXIgY29weXJpZ2h0ZWQgd29ya3MgYnkgbWVhbnMgb2YgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igb3RoZXJ3aXNlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHRvIGJlIGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24sIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgYW55IG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mIGNvcHlyaWdodGVkIHdvcmtzLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgKGlpKSBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyBhbmQgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcmsuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrIGlmIHRoYXQgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgYWdlbmN5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3ZlciB2ZXJzaW9uIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtTkQtMy4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M5NTRkYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtTkQtMy4wCkBAIC0wLDAgKzEsNjkgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCitBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLU5vRGVyaXZzIDMuMCBVbnBvcnRlZAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUTyBUSEUgRVhURU5UIFRISVMgTElDRU5TRSBNQVkgQkUgQ09OU0lERVJFRCBUTyBCRSBBIENPTlRSQUNULCBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJBZGFwdGF0aW9uIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yaywgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIGFkYXB0YXRpb24sIGRlcml2YXRpdmUgd29yaywgYXJyYW5nZW1lbnQgb2YgbXVzaWMgb3Igb3RoZXIgYWx0ZXJhdGlvbnMgb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCBvciBwaG9ub2dyYW0gb3IgcGVyZm9ybWFuY2UgYW5kIGluY2x1ZGVzIGNpbmVtYXRvZ3JhcGhpYyBhZGFwdGF0aW9ucyBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCBpbmNsdWRpbmcgaW4gYW55IGZvcm0gcmVjb2duaXphYmx5IGRlcml2ZWQgZnJvbSB0aGUgb3JpZ2luYWwsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCB3b3JrLCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0sIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJDb2xsZWN0aW9uIiBtZWFucyBhIGNvbGxlY3Rpb24gb2YgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3MsIHN1Y2ggYXMgZW5jeWNsb3BlZGlhcyBhbmQgYW50aG9sb2dpZXMsIG9yIHBlcmZvcm1hbmNlcywgcGhvbm9ncmFtcyBvciBicm9hZGNhc3RzLCBvciBvdGhlciB3b3JrcyBvciBzdWJqZWN0IG1hdHRlciBvdGhlciB0aGFuIHdvcmtzIGxpc3RlZCBpbiBTZWN0aW9uIDEoZikgYmVsb3csIHdoaWNoLCBieSByZWFzb24gb2YgdGhlIHNlbGVjdGlvbiBhbmQgYXJyYW5nZW1lbnQgb2YgdGhlaXIgY29udGVudHMsIGNvbnN0aXR1dGUgaW50ZWxsZWN0dWFsIGNyZWF0aW9ucywgaW4gd2hpY2ggdGhlIFdvcmsgaXMgaW5jbHVkZWQgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSBhbG9uZyB3aXRoIG9uZSBvciBtb3JlIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGVhY2ggY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCB3aGljaCB0b2dldGhlciBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIChhcyBkZWZpbmVkIGFib3ZlKSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEaXN0cmlidXRlIiBtZWFucyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIHRoZSBvcmlnaW5hbCBhbmQgY29waWVzIG9mIHRoZSBXb3JrIHRocm91Z2ggc2FsZSBvciBvdGhlciB0cmFuc2ZlciBvZiBvd25lcnNoaXAuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHRoYXQgb2ZmZXIocykgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zLCBpbiB0aGUgY2FzZSBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHdobyBjcmVhdGVkIHRoZSBXb3JrIG9yIGlmIG5vIGluZGl2aWR1YWwgb3IgZW50aXR5IGNhbiBiZSBpZGVudGlmaWVkLCB0aGUgcHVibGlzaGVyOyBhbmQgaW4gYWRkaXRpb24gKGkpIGluIHRoZSBjYXNlIG9mIGEgcGVyZm9ybWFuY2UgdGhlIGFjdG9ycywgc2luZ2VycywgbXVzaWNpYW5zLCBkYW5jZXJzLCBhbmQgb3RoZXIgcGVyc29ucyB3aG8gYWN0LCBzaW5nLCBkZWxpdmVyLCBkZWNsYWltLCBwbGF5IGluLCBpbnRlcnByZXQgb3Igb3RoZXJ3aXNlIHBlcmZvcm0gbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3Mgb3IgZXhwcmVzc2lvbnMgb2YgZm9sa2xvcmU7IChpaSkgaW4gdGhlIGNhc2Ugb2YgYSBwaG9ub2dyYW0gdGhlIHByb2R1Y2VyIGJlaW5nIHRoZSBwZXJzb24gb3IgbGVnYWwgZW50aXR5IHdobyBmaXJzdCBmaXhlcyB0aGUgc291bmRzIG9mIGEgcGVyZm9ybWFuY2Ugb3Igb3RoZXIgc291bmRzOyBhbmQsIChpaWkpIGluIHRoZSBjYXNlIG9mIGJyb2FkY2FzdHMsIHRoZSBvcmdhbml6YXRpb24gdGhhdCB0cmFuc21pdHMgdGhlIGJyb2FkY2FzdC4KKyJXb3JrIiBtZWFucyB0aGUgbGl0ZXJhcnkgYW5kL29yIGFydGlzdGljIHdvcmsgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IHByb2R1Y3Rpb24gaW4gdGhlIGxpdGVyYXJ5LCBzY2llbnRpZmljIGFuZCBhcnRpc3RpYyBkb21haW4sIHdoYXRldmVyIG1heSBiZSB0aGUgbW9kZSBvciBmb3JtIG9mIGl0cyBleHByZXNzaW9uIGluY2x1ZGluZyBkaWdpdGFsIGZvcm0sIHN1Y2ggYXMgYSBib29rLCBwYW1waGxldCBhbmQgb3RoZXIgd3JpdGluZzsgYSBsZWN0dXJlLCBhZGRyZXNzLCBzZXJtb24gb3Igb3RoZXIgd29yayBvZiB0aGUgc2FtZSBuYXR1cmU7IGEgZHJhbWF0aWMgb3IgZHJhbWF0aWNvLW11c2ljYWwgd29yazsgYSBjaG9yZW9ncmFwaGljIHdvcmsgb3IgZW50ZXJ0YWlubWVudCBpbiBkdW1iIHNob3c7IGEgbXVzaWNhbCBjb21wb3NpdGlvbiB3aXRoIG9yIHdpdGhvdXQgd29yZHM7IGEgY2luZW1hdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIGNpbmVtYXRvZ3JhcGh5OyBhIHdvcmsgb2YgZHJhd2luZywgcGFpbnRpbmcsIGFyY2hpdGVjdHVyZSwgc2N1bHB0dXJlLCBlbmdyYXZpbmcgb3IgbGl0aG9ncmFwaHk7IGEgcGhvdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIHBob3RvZ3JhcGh5OyBhIHdvcmsgb2YgYXBwbGllZCBhcnQ7IGFuIGlsbHVzdHJhdGlvbiwgbWFwLCBwbGFuLCBza2V0Y2ggb3IgdGhyZWUtZGltZW5zaW9uYWwgd29yayByZWxhdGl2ZSB0byBnZW9ncmFwaHksIHRvcG9ncmFwaHksIGFyY2hpdGVjdHVyZSBvciBzY2llbmNlOyBhIHBlcmZvcm1hbmNlOyBhIGJyb2FkY2FzdDsgYSBwaG9ub2dyYW07IGEgY29tcGlsYXRpb24gb2YgZGF0YSB0byB0aGUgZXh0ZW50IGl0IGlzIHByb3RlY3RlZCBhcyBhIGNvcHlyaWdodGFibGUgd29yazsgb3IgYSB3b3JrIHBlcmZvcm1lZCBieSBhIHZhcmlldHkgb3IgY2lyY3VzIHBlcmZvcm1lciB0byB0aGUgZXh0ZW50IGl0IGlzIG5vdCBvdGhlcndpc2UgY29uc2lkZXJlZCBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmsuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorIlB1YmxpY2x5IFBlcmZvcm0iIG1lYW5zIHRvIHBlcmZvcm0gcHVibGljIHJlY2l0YXRpb25zIG9mIHRoZSBXb3JrIGFuZCB0byBjb21tdW5pY2F0ZSB0byB0aGUgcHVibGljIHRob3NlIHB1YmxpYyByZWNpdGF0aW9ucywgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MsIGluY2x1ZGluZyBieSB3aXJlIG9yIHdpcmVsZXNzIG1lYW5zIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlczsgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBXb3JrcyBpbiBzdWNoIGEgd2F5IHRoYXQgbWVtYmVycyBvZiB0aGUgcHVibGljIG1heSBhY2Nlc3MgdGhlc2UgV29ya3MgZnJvbSBhIHBsYWNlIGFuZCBhdCBhIHBsYWNlIGluZGl2aWR1YWxseSBjaG9zZW4gYnkgdGhlbTsgdG8gcGVyZm9ybSB0aGUgV29yayB0byB0aGUgcHVibGljIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzIGFuZCB0aGUgY29tbXVuaWNhdGlvbiB0byB0aGUgcHVibGljIG9mIHRoZSBwZXJmb3JtYW5jZXMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBieSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZTsgdG8gYnJvYWRjYXN0IGFuZCByZWJyb2FkY2FzdCB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHNpZ25zLCBzb3VuZHMgb3IgaW1hZ2VzLgorIlJlcHJvZHVjZSIgbWVhbnMgdG8gbWFrZSBjb3BpZXMgb2YgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYnkgc291bmQgb3IgdmlzdWFsIHJlY29yZGluZ3MgYW5kIHRoZSByaWdodCBvZiBmaXhhdGlvbiBhbmQgcmVwcm9kdWNpbmcgZml4YXRpb25zIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgc3RvcmFnZSBvZiBhIHByb3RlY3RlZCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0gaW4gZGlnaXRhbCBmb3JtIG9yIG90aGVyIGVsZWN0cm9uaWMgbWVkaXVtLgorMi4gRmFpciBEZWFsaW5nIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHVzZXMgZnJlZSBmcm9tIGNvcHlyaWdodCBvciByaWdodHMgYXJpc2luZyBmcm9tIGxpbWl0YXRpb25zIG9yIGV4Y2VwdGlvbnMgdGhhdCBhcmUgcHJvdmlkZWQgZm9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgY29weXJpZ2h0IHByb3RlY3Rpb24gdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gUmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3Rpb25zLCBhbmQgdG8gUmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGlvbnM7IGFuZCwKK3RvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aW9ucy4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLCBidXQgb3RoZXJ3aXNlIHlvdSBoYXZlIG5vIHJpZ2h0cyB0byBtYWtlIEFkYXB0YXRpb25zLiBTdWJqZWN0IHRvIDgoZiksIGFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gU2VjdGlvbiA0KGQpLgorCis0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgKFVSSSkgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSBhYmlsaXR5IG9mIHRoZSByZWNpcGllbnQgb2YgdGhlIFdvcmsgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMgd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFdoZW4gWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yaywgWW91IG1heSBub3QgaW1wb3NlIGFueSBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSBhYmlsaXR5IG9mIGEgcmVjaXBpZW50IG9mIHRoZSBXb3JrIGZyb20gWW91IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFRoaXMgU2VjdGlvbiA0KGEpIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGlvbiwgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGlvbiBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3Rpb24sIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGlvbiBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IFNlY3Rpb24gNChjKSwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuCitJZiBZb3UgRGlzdHJpYnV0ZSwgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBDb2xsZWN0aW9ucywgWW91IG11c3QsIHVubGVzcyBhIHJlcXVlc3QgaGFzIGJlZW4gbWFkZSBwdXJzdWFudCB0byBTZWN0aW9uIDQoYSksIGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuLCBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uICgiQXR0cmlidXRpb24gUGFydGllcyIpIGluIExpY2Vuc29yYHMgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IChpaSkgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyAoaWlpKSB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVUkksIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yay4gVGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gNChjKSBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIENvbGxlY3Rpb24sIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciwgaWYgYSBjcmVkaXQgZm9yIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycyBvZiBDb2xsZWN0aW9uIGFwcGVhcnMsIHRoZW4gYXMgcGFydCBvZiB0aGVzZSBjcmVkaXRzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgdGhlIGNyZWRpdHMgZm9yIHRoZSBvdGhlciBjb250cmlidXRpbmcgYXV0aG9ycy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBtYXkgb25seSB1c2UgdGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gZm9yIHRoZSBwdXJwb3NlIG9mIGF0dHJpYnV0aW9uIGluIHRoZSBtYW5uZXIgc2V0IG91dCBhYm92ZSBhbmQsIGJ5IGV4ZXJjaXNpbmcgWW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IG5vdCBpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkgYXNzZXJ0IG9yIGltcGx5IGFueSBjb25uZWN0aW9uIHdpdGgsIHNwb25zb3JzaGlwIG9yIGVuZG9yc2VtZW50IGJ5IHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLCBhcyBhcHByb3ByaWF0ZSwgb2YgWW91IG9yIFlvdXIgdXNlIG9mIHRoZSBXb3JrLCB3aXRob3V0IHRoZSBzZXBhcmF0ZSwgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidDoKKworTm9uLXdhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbm5vdCBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTsKK1dhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbiBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBpZiBZb3VyIGV4ZXJjaXNlIG9mIHN1Y2ggcmlnaHRzIGlzIGZvciBhIHB1cnBvc2Ugb3IgdXNlIHdoaWNoIGlzIG90aGVyd2lzZSB0aGFuIG5vbmNvbW1lcmNpYWwgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNChiKSBhbmQgb3RoZXJ3aXNlIHdhaXZlcyB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZTsgYW5kLAorVm9sdW50YXJ5IExpY2Vuc2UgU2NoZW1lcy4gVGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcywgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IsIGluIHRoZSBldmVudCB0aGF0IHRoZSBMaWNlbnNvciBpcyBhIG1lbWJlciBvZiBhIGNvbGxlY3Rpbmcgc29jaWV0eSB0aGF0IGFkbWluaXN0ZXJzIHZvbHVudGFyeSBsaWNlbnNpbmcgc2NoZW1lcywgdmlhIHRoYXQgc29jaWV0eSwgZnJvbSBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgdGhhdCBpcyBmb3IgYSBwdXJwb3NlIG9yIHVzZSB3aGljaCBpcyBvdGhlcndpc2UgdGhhbiBub25jb21tZXJjaWFsIGFzIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDQoYikuCitFeGNlcHQgYXMgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nIGJ5IHRoZSBMaWNlbnNvciBvciBhcyBtYXkgYmUgb3RoZXJ3aXNlIHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgaWYgWW91IFJlcHJvZHVjZSwgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGVpdGhlciBieSBpdHNlbGYgb3IgYXMgcGFydCBvZiBhbnkgQ29sbGVjdGlvbnMsIFlvdSBtdXN0IG5vdCBkaXN0b3J0LCBtdXRpbGF0ZSwgbW9kaWZ5IG9yIHRha2Ugb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gaW4gcmVsYXRpb24gdG8gdGhlIFdvcmsgd2hpY2ggd291bGQgYmUgcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcmBzIGhvbm9yIG9yIHJlcHV0YXRpb24uCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aW9ucyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aW9uLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK1RoZSByaWdodHMgZ3JhbnRlZCB1bmRlciwgYW5kIHRoZSBzdWJqZWN0IG1hdHRlciByZWZlcmVuY2VkLCBpbiB0aGlzIExpY2Vuc2Ugd2VyZSBkcmFmdGVkIHV0aWxpemluZyB0aGUgdGVybWlub2xvZ3kgb2YgdGhlIEJlcm5lIENvbnZlbnRpb24gZm9yIHRoZSBQcm90ZWN0aW9uIG9mIExpdGVyYXJ5IGFuZCBBcnRpc3RpYyBXb3JrcyAoYXMgYW1lbmRlZCBvbiBTZXB0ZW1iZXIgMjgsIDE5NzkpLCB0aGUgUm9tZSBDb252ZW50aW9uIG9mIDE5NjEsIHRoZSBXSVBPIENvcHlyaWdodCBUcmVhdHkgb2YgMTk5NiwgdGhlIFdJUE8gUGVyZm9ybWFuY2VzIGFuZCBQaG9ub2dyYW1zIFRyZWF0eSBvZiAxOTk2IGFuZCB0aGUgVW5pdmVyc2FsIENvcHlyaWdodCBDb252ZW50aW9uIChhcyByZXZpc2VkIG9uIEp1bHkgMjQsIDE5NzEpLiBUaGVzZSByaWdodHMgYW5kIHN1YmplY3QgbWF0dGVyIHRha2UgZWZmZWN0IGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIExpY2Vuc2UgdGVybXMgYXJlIHNvdWdodCB0byBiZSBlbmZvcmNlZCBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcHJvdmlzaW9ucyBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgdHJlYXR5IHByb3Zpc2lvbnMgaW4gdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LiBJZiB0aGUgc3RhbmRhcmQgc3VpdGUgb2YgcmlnaHRzIGdyYW50ZWQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3IGluY2x1ZGVzIGFkZGl0aW9uYWwgcmlnaHRzIG5vdCBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgc3VjaCBhZGRpdGlvbmFsIHJpZ2h0cyBhcmUgZGVlbWVkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBMaWNlbnNlOyB0aGlzIExpY2Vuc2UgaXMgbm90IGludGVuZGVkIHRvIHJlc3RyaWN0IHRoZSBsaWNlbnNlIG9mIGFueSByaWdodHMgdW5kZXIgYXBwbGljYWJsZSBsYXcuCitDcmVhdGl2ZSBDb21tb25zIE5vdGljZQorCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBDcmVhdGl2ZSBDb21tb25zIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgdXNlIGJ5IGVpdGhlciBwYXJ0eSBvZiB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoaXMgdHJhZGVtYXJrIHJlc3RyaWN0aW9uIGRvZXMgbm90IGZvcm0gcGFydCBvZiB0aGlzIExpY2Vuc2UuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtU0EtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzOWZkNmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTEuMApAQCAtMCwwICsxLDY0IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLVNoYXJlQWxpa2UgMS4wCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIERSQUZUIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3JrczsKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIGVhY2ggRGVyaXZhdGl2ZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIsIGFuZCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIERlcml2YXRpdmUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIERlcml2YXRpdmUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCitZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitCeSBvZmZlcmluZyB0aGUgV29yayBmb3IgcHVibGljIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciByZXByZXNlbnRzIGFuZCB3YXJyYW50cyB0aGF0LCB0byB0aGUgYmVzdCBvZiBMaWNlbnNvcmBzIGtub3dsZWRnZSBhZnRlciByZWFzb25hYmxlIGlucXVpcnk6CitMaWNlbnNvciBoYXMgc2VjdXJlZCBhbGwgcmlnaHRzIGluIHRoZSBXb3JrIG5lY2Vzc2FyeSB0byBncmFudCB0aGUgbGljZW5zZSByaWdodHMgaGVyZXVuZGVyIGFuZCB0byBwZXJtaXQgdGhlIGxhd2Z1bCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpdGhvdXQgWW91IGhhdmluZyBhbnkgb2JsaWdhdGlvbiB0byBwYXkgYW55IHJveWFsdGllcywgY29tcHVsc29yeSBsaWNlbnNlIGZlZXMsIHJlc2lkdWFscyBvciBhbnkgb3RoZXIgcGF5bWVudHM7CitUaGUgV29yayBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgY29weXJpZ2h0LCB0cmFkZW1hcmssIHB1YmxpY2l0eSByaWdodHMsIGNvbW1vbiBsYXcgcmlnaHRzIG9yIGFueSBvdGhlciByaWdodCBvZiBhbnkgdGhpcmQgcGFydHkgb3IgY29uc3RpdHV0ZSBkZWZhbWF0aW9uLCBpbnZhc2lvbiBvZiBwcml2YWN5IG9yIG90aGVyIHRvcnRpb3VzIGluanVyeSB0byBhbnkgdGhpcmQgcGFydHkuCitFWENFUFQgQVMgRVhQUkVTU0xZIFNUQVRFRCBJTiBUSElTIExJQ0VOU0UgT1IgT1RIRVJXSVNFIEFHUkVFRCBJTiBXUklUSU5HIE9SIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBUSEUgV09SSyBJUyBMSUNFTlNFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgQ09OVEVOVFMgT1IgQUNDVVJBQ1kgT0YgVEhFIFdPUksuCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIEFORCBFWENFUFQgRk9SIERBTUFHRVMgQVJJU0lORyBGUk9NIExJQUJJTElUWSBUTyBBIFRISVJEIFBBUlRZIFJFU1VMVElORyBGUk9NIEJSRUFDSCBPRiBUSEUgV0FSUkFOVElFUyBJTiBTRUNUSU9OIDUsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTIuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtU0EtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMDdmODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTIuMApAQCAtMCwwICsxLDY4IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLVNoYXJlQWxpa2UgMi4wCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisiTGljZW5zZSBFbGVtZW50cyIgbWVhbnMgdGhlIGZvbGxvd2luZyBoaWdoLWxldmVsIGxpY2Vuc2UgYXR0cmlidXRlcyBhcyBzZWxlY3RlZCBieSBMaWNlbnNvciBhbmQgaW5kaWNhdGVkIGluIHRoZSB0aXRsZSBvZiB0aGlzIExpY2Vuc2U6IEF0dHJpYnV0aW9uLCBOb25jb21tZXJjaWFsLCBTaGFyZUFsaWtlLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3M7CitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiBTZWN0aW9ucyA0KGUpIGFuZCA0KGYpLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGEgRGVyaXZhdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIERlcml2YXRpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGEgbGF0ZXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSwgb3IgYSBDcmVhdGl2ZSBDb21tb25zIGlDb21tb25zIGxpY2Vuc2UgdGhhdCBjb250YWlucyB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSAoZS5nLiBBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLVNoYXJlQWxpa2UgMi4wIEphcGFuKS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugb3Igb3RoZXIgbGljZW5zZSBzcGVjaWZpZWQgaW4gdGhlIHByZXZpb3VzIHNlbnRlbmNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiBlYWNoIERlcml2YXRpdmUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIERlcml2YXRpdmUgV29ya3MgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLCBhbmQgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBEZXJpdmF0aXZlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIERlcml2YXRpdmUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgZ2l2ZSB0aGUgT3JpZ2luYWwgQXV0aG9yIGNyZWRpdCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYgYXBwbGljYWJsZSkgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciBpZiBzdXBwbGllZDsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrIGlmIHRoYXQgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgYWdlbmN5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3ZlciB2ZXJzaW9uIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0yLjUgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTIuNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjVjY2NhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0yLjUKQEAgLTAsMCArMSw2OCBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbC1TaGFyZUFsaWtlIDIuNQorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorIkxpY2Vuc2UgRWxlbWVudHMiIG1lYW5zIHRoZSBmb2xsb3dpbmcgaGlnaC1sZXZlbCBsaWNlbnNlIGF0dHJpYnV0ZXMgYXMgc2VsZWN0ZWQgYnkgTGljZW5zb3IgYW5kIGluZGljYXRlZCBpbiB0aGUgdGl0bGUgb2YgdGhpcyBMaWNlbnNlOiBBdHRyaWJ1dGlvbiwgTm9uY29tbWVyY2lhbCwgU2hhcmVBbGlrZS4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzOworVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gU2VjdGlvbnMgNChlKSBhbmQgNChmKS4KKworNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UgNChkKSwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGEgRGVyaXZhdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIERlcml2YXRpdmUgV29yayBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IGNsYXVzZSA0KGQpLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYSBsYXRlciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlLCBvciBhIENyZWF0aXZlIENvbW1vbnMgaUNvbW1vbnMgbGljZW5zZSB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlIChlLmcuIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtU2hhcmVBbGlrZSAyLjUgSmFwYW4pLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSBvciBvdGhlciBsaWNlbnNlIHNwZWNpZmllZCBpbiB0aGUgcHJldmlvdXMgc2VudGVuY2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIGVhY2ggRGVyaXZhdGl2ZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIsIGFuZCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIERlcml2YXRpdmUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIERlcml2YXRpdmUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCitZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgKGlpKSBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrIGlmIHRoYXQgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgYWdlbmN5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3ZlciB2ZXJzaW9uIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0zLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGNiMWM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0zLjAKQEAgLTAsMCArMSw3NCBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKK0F0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtU2hhcmVBbGlrZSAzLjAgVW5wb3J0ZWQKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVE8gVEhFIEVYVEVOVCBUSElTIExJQ0VOU0UgTUFZIEJFIENPTlNJREVSRUQgVE8gQkUgQSBDT05UUkFDVCwgVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQWRhcHRhdGlvbiIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmssIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBhZGFwdGF0aW9uLCBkZXJpdmF0aXZlIHdvcmssIGFycmFuZ2VtZW50IG9mIG11c2ljIG9yIG90aGVyIGFsdGVyYXRpb25zIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgb3IgcGhvbm9ncmFtIG9yIHBlcmZvcm1hbmNlIGFuZCBpbmNsdWRlcyBjaW5lbWF0b2dyYXBoaWMgYWRhcHRhdGlvbnMgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQgaW5jbHVkaW5nIGluIGFueSBmb3JtIHJlY29nbml6YWJseSBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgd29yaywgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiQ29sbGVjdGlvbiIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzLCBzdWNoIGFzIGVuY3ljbG9wZWRpYXMgYW5kIGFudGhvbG9naWVzLCBvciBwZXJmb3JtYW5jZXMsIHBob25vZ3JhbXMgb3IgYnJvYWRjYXN0cywgb3Igb3RoZXIgd29ya3Mgb3Igc3ViamVjdCBtYXR0ZXIgb3RoZXIgdGhhbiB3b3JrcyBsaXN0ZWQgaW4gU2VjdGlvbiAxKGcpIGJlbG93LCB3aGljaCwgYnkgcmVhc29uIG9mIHRoZSBzZWxlY3Rpb24gYW5kIGFycmFuZ2VtZW50IG9mIHRoZWlyIGNvbnRlbnRzLCBjb25zdGl0dXRlIGludGVsbGVjdHVhbCBjcmVhdGlvbnMsIGluIHdoaWNoIHRoZSBXb3JrIGlzIGluY2x1ZGVkIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0gYWxvbmcgd2l0aCBvbmUgb3IgbW9yZSBvdGhlciBjb250cmlidXRpb25zLCBlYWNoIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgd2hpY2ggdG9nZXRoZXIgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiAoYXMgZGVmaW5lZCBhYm92ZSkgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGlzdHJpYnV0ZSIgbWVhbnMgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyB0aGUgb3JpZ2luYWwgYW5kIGNvcGllcyBvZiB0aGUgV29yayBvciBBZGFwdGF0aW9uLCBhcyBhcHByb3ByaWF0ZSwgdGhyb3VnaCBzYWxlIG9yIG90aGVyIHRyYW5zZmVyIG9mIG93bmVyc2hpcC4KKyJMaWNlbnNlIEVsZW1lbnRzIiBtZWFucyB0aGUgZm9sbG93aW5nIGhpZ2gtbGV2ZWwgbGljZW5zZSBhdHRyaWJ1dGVzIGFzIHNlbGVjdGVkIGJ5IExpY2Vuc29yIGFuZCBpbmRpY2F0ZWQgaW4gdGhlIHRpdGxlIG9mIHRoaXMgTGljZW5zZTogQXR0cmlidXRpb24sIE5vbmNvbW1lcmNpYWwsIFNoYXJlQWxpa2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHRoYXQgb2ZmZXIocykgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zLCBpbiB0aGUgY2FzZSBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHdobyBjcmVhdGVkIHRoZSBXb3JrIG9yIGlmIG5vIGluZGl2aWR1YWwgb3IgZW50aXR5IGNhbiBiZSBpZGVudGlmaWVkLCB0aGUgcHVibGlzaGVyOyBhbmQgaW4gYWRkaXRpb24gKGkpIGluIHRoZSBjYXNlIG9mIGEgcGVyZm9ybWFuY2UgdGhlIGFjdG9ycywgc2luZ2VycywgbXVzaWNpYW5zLCBkYW5jZXJzLCBhbmQgb3RoZXIgcGVyc29ucyB3aG8gYWN0LCBzaW5nLCBkZWxpdmVyLCBkZWNsYWltLCBwbGF5IGluLCBpbnRlcnByZXQgb3Igb3RoZXJ3aXNlIHBlcmZvcm0gbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3Mgb3IgZXhwcmVzc2lvbnMgb2YgZm9sa2xvcmU7IChpaSkgaW4gdGhlIGNhc2Ugb2YgYSBwaG9ub2dyYW0gdGhlIHByb2R1Y2VyIGJlaW5nIHRoZSBwZXJzb24gb3IgbGVnYWwgZW50aXR5IHdobyBmaXJzdCBmaXhlcyB0aGUgc291bmRzIG9mIGEgcGVyZm9ybWFuY2Ugb3Igb3RoZXIgc291bmRzOyBhbmQsIChpaWkpIGluIHRoZSBjYXNlIG9mIGJyb2FkY2FzdHMsIHRoZSBvcmdhbml6YXRpb24gdGhhdCB0cmFuc21pdHMgdGhlIGJyb2FkY2FzdC4KKyJXb3JrIiBtZWFucyB0aGUgbGl0ZXJhcnkgYW5kL29yIGFydGlzdGljIHdvcmsgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IHByb2R1Y3Rpb24gaW4gdGhlIGxpdGVyYXJ5LCBzY2llbnRpZmljIGFuZCBhcnRpc3RpYyBkb21haW4sIHdoYXRldmVyIG1heSBiZSB0aGUgbW9kZSBvciBmb3JtIG9mIGl0cyBleHByZXNzaW9uIGluY2x1ZGluZyBkaWdpdGFsIGZvcm0sIHN1Y2ggYXMgYSBib29rLCBwYW1waGxldCBhbmQgb3RoZXIgd3JpdGluZzsgYSBsZWN0dXJlLCBhZGRyZXNzLCBzZXJtb24gb3Igb3RoZXIgd29yayBvZiB0aGUgc2FtZSBuYXR1cmU7IGEgZHJhbWF0aWMgb3IgZHJhbWF0aWNvLW11c2ljYWwgd29yazsgYSBjaG9yZW9ncmFwaGljIHdvcmsgb3IgZW50ZXJ0YWlubWVudCBpbiBkdW1iIHNob3c7IGEgbXVzaWNhbCBjb21wb3NpdGlvbiB3aXRoIG9yIHdpdGhvdXQgd29yZHM7IGEgY2luZW1hdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIGNpbmVtYXRvZ3JhcGh5OyBhIHdvcmsgb2YgZHJhd2luZywgcGFpbnRpbmcsIGFyY2hpdGVjdHVyZSwgc2N1bHB0dXJlLCBlbmdyYXZpbmcgb3IgbGl0aG9ncmFwaHk7IGEgcGhvdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIHBob3RvZ3JhcGh5OyBhIHdvcmsgb2YgYXBwbGllZCBhcnQ7IGFuIGlsbHVzdHJhdGlvbiwgbWFwLCBwbGFuLCBza2V0Y2ggb3IgdGhyZWUtZGltZW5zaW9uYWwgd29yayByZWxhdGl2ZSB0byBnZW9ncmFwaHksIHRvcG9ncmFwaHksIGFyY2hpdGVjdHVyZSBvciBzY2llbmNlOyBhIHBlcmZvcm1hbmNlOyBhIGJyb2FkY2FzdDsgYSBwaG9ub2dyYW07IGEgY29tcGlsYXRpb24gb2YgZGF0YSB0byB0aGUgZXh0ZW50IGl0IGlzIHByb3RlY3RlZCBhcyBhIGNvcHlyaWdodGFibGUgd29yazsgb3IgYSB3b3JrIHBlcmZvcm1lZCBieSBhIHZhcmlldHkgb3IgY2lyY3VzIHBlcmZvcm1lciB0byB0aGUgZXh0ZW50IGl0IGlzIG5vdCBvdGhlcndpc2UgY29uc2lkZXJlZCBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmsuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorIlB1YmxpY2x5IFBlcmZvcm0iIG1lYW5zIHRvIHBlcmZvcm0gcHVibGljIHJlY2l0YXRpb25zIG9mIHRoZSBXb3JrIGFuZCB0byBjb21tdW5pY2F0ZSB0byB0aGUgcHVibGljIHRob3NlIHB1YmxpYyByZWNpdGF0aW9ucywgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MsIGluY2x1ZGluZyBieSB3aXJlIG9yIHdpcmVsZXNzIG1lYW5zIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlczsgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBXb3JrcyBpbiBzdWNoIGEgd2F5IHRoYXQgbWVtYmVycyBvZiB0aGUgcHVibGljIG1heSBhY2Nlc3MgdGhlc2UgV29ya3MgZnJvbSBhIHBsYWNlIGFuZCBhdCBhIHBsYWNlIGluZGl2aWR1YWxseSBjaG9zZW4gYnkgdGhlbTsgdG8gcGVyZm9ybSB0aGUgV29yayB0byB0aGUgcHVibGljIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzIGFuZCB0aGUgY29tbXVuaWNhdGlvbiB0byB0aGUgcHVibGljIG9mIHRoZSBwZXJmb3JtYW5jZXMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBieSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZTsgdG8gYnJvYWRjYXN0IGFuZCByZWJyb2FkY2FzdCB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHNpZ25zLCBzb3VuZHMgb3IgaW1hZ2VzLgorIlJlcHJvZHVjZSIgbWVhbnMgdG8gbWFrZSBjb3BpZXMgb2YgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYnkgc291bmQgb3IgdmlzdWFsIHJlY29yZGluZ3MgYW5kIHRoZSByaWdodCBvZiBmaXhhdGlvbiBhbmQgcmVwcm9kdWNpbmcgZml4YXRpb25zIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgc3RvcmFnZSBvZiBhIHByb3RlY3RlZCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0gaW4gZGlnaXRhbCBmb3JtIG9yIG90aGVyIGVsZWN0cm9uaWMgbWVkaXVtLgorMi4gRmFpciBEZWFsaW5nIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHVzZXMgZnJlZSBmcm9tIGNvcHlyaWdodCBvciByaWdodHMgYXJpc2luZyBmcm9tIGxpbWl0YXRpb25zIG9yIGV4Y2VwdGlvbnMgdGhhdCBhcmUgcHJvdmlkZWQgZm9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgY29weXJpZ2h0IHByb3RlY3Rpb24gdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gUmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3Rpb25zLCBhbmQgdG8gUmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGlvbnM7Cit0byBjcmVhdGUgYW5kIFJlcHJvZHVjZSBBZGFwdGF0aW9ucyBwcm92aWRlZCB0aGF0IGFueSBzdWNoIEFkYXB0YXRpb24sIGluY2x1ZGluZyBhbnkgdHJhbnNsYXRpb24gaW4gYW55IG1lZGl1bSwgdGFrZXMgcmVhc29uYWJsZSBzdGVwcyB0byBjbGVhcmx5IGxhYmVsLCBkZW1hcmNhdGUgb3Igb3RoZXJ3aXNlIGlkZW50aWZ5IHRoYXQgY2hhbmdlcyB3ZXJlIG1hZGUgdG8gdGhlIG9yaWdpbmFsIFdvcmsuIEZvciBleGFtcGxlLCBhIHRyYW5zbGF0aW9uIGNvdWxkIGJlIG1hcmtlZCAiVGhlIG9yaWdpbmFsIHdvcmsgd2FzIHRyYW5zbGF0ZWQgZnJvbSBFbmdsaXNoIHRvIFNwYW5pc2gsIiBvciBhIG1vZGlmaWNhdGlvbiBjb3VsZCBpbmRpY2F0ZSAiVGhlIG9yaWdpbmFsIHdvcmsgaGFzIGJlZW4gbW9kaWZpZWQuIjsKK3RvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aW9uczsgYW5kLAordG8gRGlzdHJpYnV0ZSBhbmQgUHVibGljbHkgUGVyZm9ybSBBZGFwdGF0aW9ucy4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBTdWJqZWN0IHRvIFNlY3Rpb24gOChmKSwgYWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQoZSkuCisKKzQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKSBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIGFiaWxpdHkgb2YgdGhlIHJlY2lwaWVudCBvZiB0aGUgV29yayB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gV2hlbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYSByZWNpcGllbnQgb2YgdGhlIFdvcmsgZnJvbSBZb3UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gVGhpcyBTZWN0aW9uIDQoYSkgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aW9uLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aW9uIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGQpLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYW4gQWRhcHRhdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBBZGFwdGF0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGQpLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSBhbiBBZGFwdGF0aW9uIG9ubHkgdW5kZXI6IChpKSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlOyAoaWkpIGEgbGF0ZXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZTsgKGlpaSkgYSBDcmVhdGl2ZSBDb21tb25zIGp1cmlzZGljdGlvbiBsaWNlbnNlIChlaXRoZXIgdGhpcyBvciBhIGxhdGVyIGxpY2Vuc2UgdmVyc2lvbikgdGhhdCBjb250YWlucyB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSAoZS5nLiwgQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbC1TaGFyZUFsaWtlIDMuMCBVUykgKCJBcHBsaWNhYmxlIExpY2Vuc2UiKS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVUkksIGZvciBBcHBsaWNhYmxlIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIGVhY2ggQWRhcHRhdGlvbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBBZGFwdGF0aW9uIHRoYXQgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2Ugb3IgdGhlIGFiaWxpdHkgb2YgdGhlIHJlY2lwaWVudCBvZiB0aGUgQWRhcHRhdGlvbiB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2UuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhlIEFwcGxpY2FibGUgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgYXMgaW5jbHVkZWQgaW4gdGhlIEFkYXB0YXRpb24gWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gV2hlbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBBZGFwdGF0aW9uLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBBZGFwdGF0aW9uIHRoYXQgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYSByZWNpcGllbnQgb2YgdGhlIEFkYXB0YXRpb24gZnJvbSBZb3UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChiKSBhcHBsaWVzIHRvIHRoZSBBZGFwdGF0aW9uIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgQWRhcHRhdGlvbiBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlLgorWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbi1uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mIGNvcHlyaWdodGVkIHdvcmtzLgorSWYgWW91IERpc3RyaWJ1dGUsIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCwgdW5sZXNzIGEgcmVxdWVzdCBoYXMgYmVlbiBtYWRlIHB1cnN1YW50IHRvIFNlY3Rpb24gNChhKSwga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4sIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gKCJBdHRyaWJ1dGlvbiBQYXJ0aWVzIikgaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgKGlpKSB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IChpaWkpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVSSSwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQsIChpdikgY29uc2lzdGVudCB3aXRoIFNlY3Rpb24gMyhiKSwgaW4gdGhlIGNhc2Ugb2YgYW4gQWRhcHRhdGlvbiwgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgQWRhcHRhdGlvbiAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBUaGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiA0KGQpIG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQWRhcHRhdGlvbiBvciBDb2xsZWN0aW9uLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIsIGlmIGEgY3JlZGl0IGZvciBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMgb2YgdGhlIEFkYXB0YXRpb24gb3IgQ29sbGVjdGlvbiBhcHBlYXJzLCB0aGVuIGFzIHBhcnQgb2YgdGhlc2UgY3JlZGl0cyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHRoZSBjcmVkaXRzIGZvciB0aGUgb3RoZXIgY29udHJpYnV0aW5nIGF1dGhvcnMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBZb3UgbWF5IG9ubHkgdXNlIHRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIGZvciB0aGUgcHVycG9zZSBvZiBhdHRyaWJ1dGlvbiBpbiB0aGUgbWFubmVyIHNldCBvdXQgYWJvdmUgYW5kLCBieSBleGVyY2lzaW5nIFlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgWW91IG1heSBub3QgaW1wbGljaXRseSBvciBleHBsaWNpdGx5IGFzc2VydCBvciBpbXBseSBhbnkgY29ubmVjdGlvbiB3aXRoLCBzcG9uc29yc2hpcCBvciBlbmRvcnNlbWVudCBieSB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcywgYXMgYXBwcm9wcmlhdGUsIG9mIFlvdSBvciBZb3VyIHVzZSBvZiB0aGUgV29yaywgd2l0aG91dCB0aGUgc2VwYXJhdGUsIGV4cHJlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQ6CisKK05vbi13YWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW5ub3QgYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7CitXYWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW4gYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgaWYgWW91ciBleGVyY2lzZSBvZiBzdWNoIHJpZ2h0cyBpcyBmb3IgYSBwdXJwb3NlIG9yIHVzZSB3aGljaCBpcyBvdGhlcndpc2UgdGhhbiBub25jb21tZXJjaWFsIGFzIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDQoYykgYW5kIG90aGVyd2lzZSB3YWl2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWU7IGFuZCwKK1ZvbHVudGFyeSBMaWNlbnNlIFNjaGVtZXMuIFRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yLCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgTGljZW5zb3IgaXMgYSBtZW1iZXIgb2YgYSBjb2xsZWN0aW5nIHNvY2lldHkgdGhhdCBhZG1pbmlzdGVycyB2b2x1bnRhcnkgbGljZW5zaW5nIHNjaGVtZXMsIHZpYSB0aGF0IHNvY2lldHksIGZyb20gYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIHRoYXQgaXMgZm9yIGEgcHVycG9zZSBvciB1c2Ugd2hpY2ggaXMgb3RoZXJ3aXNlIHRoYW4gbm9uY29tbWVyY2lhbCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA0KGMpLgorRXhjZXB0IGFzIG90aGVyd2lzZSBhZ3JlZWQgaW4gd3JpdGluZyBieSB0aGUgTGljZW5zb3Igb3IgYXMgbWF5IGJlIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIGlmIFlvdSBSZXByb2R1Y2UsIERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBlaXRoZXIgYnkgaXRzZWxmIG9yIGFzIHBhcnQgb2YgYW55IEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCBub3QgZGlzdG9ydCwgbXV0aWxhdGUsIG1vZGlmeSBvciB0YWtlIG90aGVyIGRlcm9nYXRvcnkgYWN0aW9uIGluIHJlbGF0aW9uIHRvIHRoZSBXb3JrIHdoaWNoIHdvdWxkIGJlIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3JgcyBob25vciBvciByZXB1dGF0aW9uLiBMaWNlbnNvciBhZ3JlZXMgdGhhdCBpbiB0aG9zZSBqdXJpc2RpY3Rpb25zIChlLmcuIEphcGFuKSwgaW4gd2hpY2ggYW55IGV4ZXJjaXNlIG9mIHRoZSByaWdodCBncmFudGVkIGluIFNlY3Rpb24gMyhiKSBvZiB0aGlzIExpY2Vuc2UgKHRoZSByaWdodCB0byBtYWtlIEFkYXB0YXRpb25zKSB3b3VsZCBiZSBkZWVtZWQgdG8gYmUgYSBkaXN0b3J0aW9uLCBtdXRpbGF0aW9uLCBtb2RpZmljYXRpb24gb3Igb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcmBzIGhvbm9yIGFuZCByZXB1dGF0aW9uLCB0aGUgTGljZW5zb3Igd2lsbCB3YWl2ZSBvciBub3QgYXNzZXJ0LCBhcyBhcHByb3ByaWF0ZSwgdGhpcyBTZWN0aW9uLCB0byB0aGUgZnVsbGVzdCBleHRlbnQgcGVybWl0dGVkIGJ5IHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdywgdG8gZW5hYmxlIFlvdSB0byByZWFzb25hYmx5IGV4ZXJjaXNlIFlvdXIgcmlnaHQgdW5kZXIgU2VjdGlvbiAzKGIpIG9mIHRoaXMgTGljZW5zZSAocmlnaHQgdG8gbWFrZSBBZGFwdGF0aW9ucykgYnV0IG5vdCBvdGhlcndpc2UuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORyBBTkQgVE8gVEhFIEZVTExFU1QgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBUSElTIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aW9uLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIGFuIEFkYXB0YXRpb24sIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitUaGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIsIGFuZCB0aGUgc3ViamVjdCBtYXR0ZXIgcmVmZXJlbmNlZCwgaW4gdGhpcyBMaWNlbnNlIHdlcmUgZHJhZnRlZCB1dGlsaXppbmcgdGhlIHRlcm1pbm9sb2d5IG9mIHRoZSBCZXJuZSBDb252ZW50aW9uIGZvciB0aGUgUHJvdGVjdGlvbiBvZiBMaXRlcmFyeSBhbmQgQXJ0aXN0aWMgV29ya3MgKGFzIGFtZW5kZWQgb24gU2VwdGVtYmVyIDI4LCAxOTc5KSwgdGhlIFJvbWUgQ29udmVudGlvbiBvZiAxOTYxLCB0aGUgV0lQTyBDb3B5cmlnaHQgVHJlYXR5IG9mIDE5OTYsIHRoZSBXSVBPIFBlcmZvcm1hbmNlcyBhbmQgUGhvbm9ncmFtcyBUcmVhdHkgb2YgMTk5NiBhbmQgdGhlIFVuaXZlcnNhbCBDb3B5cmlnaHQgQ29udmVudGlvbiAoYXMgcmV2aXNlZCBvbiBKdWx5IDI0LCAxOTcxKS4gVGhlc2UgcmlnaHRzIGFuZCBzdWJqZWN0IG1hdHRlciB0YWtlIGVmZmVjdCBpbiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIGluIHdoaWNoIHRoZSBMaWNlbnNlIHRlcm1zIGFyZSBzb3VnaHQgdG8gYmUgZW5mb3JjZWQgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHByb3Zpc2lvbnMgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIHRyZWF0eSBwcm92aXNpb25zIGluIHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdy4gSWYgdGhlIHN0YW5kYXJkIHN1aXRlIG9mIHJpZ2h0cyBncmFudGVkIHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdyBpbmNsdWRlcyBhZGRpdGlvbmFsIHJpZ2h0cyBub3QgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIHN1Y2ggYWRkaXRpb25hbCByaWdodHMgYXJlIGRlZW1lZCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgTGljZW5zZTsgdGhpcyBMaWNlbnNlIGlzIG5vdCBpbnRlbmRlZCB0byByZXN0cmljdCB0aGUgbGljZW5zZSBvZiBhbnkgcmlnaHRzIHVuZGVyIGFwcGxpY2FibGUgbGF3LgorQ3JlYXRpdmUgQ29tbW9ucyBOb3RpY2UKKworQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgQ3JlYXRpdmUgQ29tbW9ucyBkb2VzIG5vdCBhdXRob3JpemUgdGhlIHVzZSBieSBlaXRoZXIgcGFydHkgb2YgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIHRyYWRlbWFyayByZXN0cmljdGlvbiBkb2VzIG5vdCBmb3JtIHBhcnQgb2YgdGhpcyBMaWNlbnNlLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1ORC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5ELTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzU4MTg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1ORC0xLjAKQEAgLTAsMCArMSw1OSBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tTm9EZXJpdnMgMS4wCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIERSQUZUIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgZ2l2ZSB0aGUgT3JpZ2luYWwgQXV0aG9yIGNyZWRpdCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYgYXBwbGljYWJsZSkgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciBpZiBzdXBwbGllZDsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworQnkgb2ZmZXJpbmcgdGhlIFdvcmsgZm9yIHB1YmxpYyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgcmVwcmVzZW50cyBhbmQgd2FycmFudHMgdGhhdCwgdG8gdGhlIGJlc3Qgb2YgTGljZW5zb3JgcyBrbm93bGVkZ2UgYWZ0ZXIgcmVhc29uYWJsZSBpbnF1aXJ5OgorTGljZW5zb3IgaGFzIHNlY3VyZWQgYWxsIHJpZ2h0cyBpbiB0aGUgV29yayBuZWNlc3NhcnkgdG8gZ3JhbnQgdGhlIGxpY2Vuc2UgcmlnaHRzIGhlcmV1bmRlciBhbmQgdG8gcGVybWl0IHRoZSBsYXdmdWwgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aXRob3V0IFlvdSBoYXZpbmcgYW55IG9ibGlnYXRpb24gdG8gcGF5IGFueSByb3lhbHRpZXMsIGNvbXB1bHNvcnkgbGljZW5zZSBmZWVzLCByZXNpZHVhbHMgb3IgYW55IG90aGVyIHBheW1lbnRzOworVGhlIFdvcmsgZG9lcyBub3QgaW5mcmluZ2UgdGhlIGNvcHlyaWdodCwgdHJhZGVtYXJrLCBwdWJsaWNpdHkgcmlnaHRzLCBjb21tb24gbGF3IHJpZ2h0cyBvciBhbnkgb3RoZXIgcmlnaHQgb2YgYW55IHRoaXJkIHBhcnR5IG9yIGNvbnN0aXR1dGUgZGVmYW1hdGlvbiwgaW52YXNpb24gb2YgcHJpdmFjeSBvciBvdGhlciB0b3J0aW91cyBpbmp1cnkgdG8gYW55IHRoaXJkIHBhcnR5LgorRVhDRVBUIEFTIEVYUFJFU1NMWSBTVEFURUQgSU4gVEhJUyBMSUNFTlNFIE9SIE9USEVSV0lTRSBBR1JFRUQgSU4gV1JJVElORyBPUiBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgVEhFIFdPUksgSVMgTElDRU5TRUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIENPTlRFTlRTIE9SIEFDQ1VSQUNZIE9GIFRIRSBXT1JLLgorNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBBTkQgRVhDRVBUIEZPUiBEQU1BR0VTIEFSSVNJTkcgRlJPTSBMSUFCSUxJVFkgVE8gQSBUSElSRCBQQVJUWSBSRVNVTFRJTkcgRlJPTSBCUkVBQ0ggT0YgVEhFIFdBUlJBTlRJRVMgSU4gU0VDVElPTiA1LCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMi4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1ORC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJjOTc0YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMi4wCkBAIC0wLDAgKzEsNjIgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLU5vRGVyaXZzIDIuMAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3MuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIHdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCitQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsuCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIHNvY2lldHkgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrICgiY292ZXIgdmVyc2lvbiIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMsIGJ1dCBvdGhlcndpc2UgeW91IGhhdmUgbm8gcmlnaHRzIHRvIG1ha2UgRGVyaXZhdGl2ZSBXb3Jrcy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IGFuZCB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yay4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgTUFURVJJQUxTLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMi41IGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1ORC0yLjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVlNDU0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMi41CkBAIC0wLDAgKzEsNjIgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLU5vRGVyaXZzIDIuNQorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3MuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIHdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCitQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsuCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIHNvY2lldHkgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrICgiY292ZXIgdmVyc2lvbiIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMsIGJ1dCBvdGhlcndpc2UgeW91IGhhdmUgbm8gcmlnaHRzIHRvIG1ha2UgRGVyaXZhdGl2ZSBXb3Jrcy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UgNChiKSwgYXMgcmVxdWVzdGVkLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciAoaWkpIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4gYSBzcG9uc29yIGluc3RpdHV0ZSwgcHVibGlzaGluZyBlbnRpdHksIGpvdXJuYWwpIGZvciBhdHRyaWJ1dGlvbiBpbiBMaWNlbnNvcmBzIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywgdGhlIG5hbWUgb2Ygc3VjaCBwYXJ0eSBvciBwYXJ0aWVzOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IGFuZCB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yay4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgTUFURVJJQUxTLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMy4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1ORC0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY2NGUzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMy4wCkBAIC0wLDAgKzEsNjggQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCitBdHRyaWJ1dGlvbi1Ob0Rlcml2cyAzLjAgVW5wb3J0ZWQKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVE8gVEhFIEVYVEVOVCBUSElTIExJQ0VOU0UgTUFZIEJFIENPTlNJREVSRUQgVE8gQkUgQSBDT05UUkFDVCwgVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQWRhcHRhdGlvbiIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmssIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBhZGFwdGF0aW9uLCBkZXJpdmF0aXZlIHdvcmssIGFycmFuZ2VtZW50IG9mIG11c2ljIG9yIG90aGVyIGFsdGVyYXRpb25zIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgb3IgcGhvbm9ncmFtIG9yIHBlcmZvcm1hbmNlIGFuZCBpbmNsdWRlcyBjaW5lbWF0b2dyYXBoaWMgYWRhcHRhdGlvbnMgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQgaW5jbHVkaW5nIGluIGFueSBmb3JtIHJlY29nbml6YWJseSBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgd29yaywgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiQ29sbGVjdGlvbiIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzLCBzdWNoIGFzIGVuY3ljbG9wZWRpYXMgYW5kIGFudGhvbG9naWVzLCBvciBwZXJmb3JtYW5jZXMsIHBob25vZ3JhbXMgb3IgYnJvYWRjYXN0cywgb3Igb3RoZXIgd29ya3Mgb3Igc3ViamVjdCBtYXR0ZXIgb3RoZXIgdGhhbiB3b3JrcyBsaXN0ZWQgaW4gU2VjdGlvbiAxKGYpIGJlbG93LCB3aGljaCwgYnkgcmVhc29uIG9mIHRoZSBzZWxlY3Rpb24gYW5kIGFycmFuZ2VtZW50IG9mIHRoZWlyIGNvbnRlbnRzLCBjb25zdGl0dXRlIGludGVsbGVjdHVhbCBjcmVhdGlvbnMsIGluIHdoaWNoIHRoZSBXb3JrIGlzIGluY2x1ZGVkIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0gYWxvbmcgd2l0aCBvbmUgb3IgbW9yZSBvdGhlciBjb250cmlidXRpb25zLCBlYWNoIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgd2hpY2ggdG9nZXRoZXIgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiAoYXMgZGVmaW5lZCBhYm92ZSkgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGlzdHJpYnV0ZSIgbWVhbnMgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyB0aGUgb3JpZ2luYWwgYW5kIGNvcGllcyBvZiB0aGUgV29yayB0aHJvdWdoIHNhbGUgb3Igb3RoZXIgdHJhbnNmZXIgb2Ygb3duZXJzaGlwLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB0aGF0IG9mZmVyKHMpIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucywgaW4gdGhlIGNhc2Ugb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB3aG8gY3JlYXRlZCB0aGUgV29yayBvciBpZiBubyBpbmRpdmlkdWFsIG9yIGVudGl0eSBjYW4gYmUgaWRlbnRpZmllZCwgdGhlIHB1Ymxpc2hlcjsgYW5kIGluIGFkZGl0aW9uIChpKSBpbiB0aGUgY2FzZSBvZiBhIHBlcmZvcm1hbmNlIHRoZSBhY3RvcnMsIHNpbmdlcnMsIG11c2ljaWFucywgZGFuY2VycywgYW5kIG90aGVyIHBlcnNvbnMgd2hvIGFjdCwgc2luZywgZGVsaXZlciwgZGVjbGFpbSwgcGxheSBpbiwgaW50ZXJwcmV0IG9yIG90aGVyd2lzZSBwZXJmb3JtIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzIG9yIGV4cHJlc3Npb25zIG9mIGZvbGtsb3JlOyAoaWkpIGluIHRoZSBjYXNlIG9mIGEgcGhvbm9ncmFtIHRoZSBwcm9kdWNlciBiZWluZyB0aGUgcGVyc29uIG9yIGxlZ2FsIGVudGl0eSB3aG8gZmlyc3QgZml4ZXMgdGhlIHNvdW5kcyBvZiBhIHBlcmZvcm1hbmNlIG9yIG90aGVyIHNvdW5kczsgYW5kLCAoaWlpKSBpbiB0aGUgY2FzZSBvZiBicm9hZGNhc3RzLCB0aGUgb3JnYW5pemF0aW9uIHRoYXQgdHJhbnNtaXRzIHRoZSBicm9hZGNhc3QuCisiV29yayIgbWVhbnMgdGhlIGxpdGVyYXJ5IGFuZC9vciBhcnRpc3RpYyB3b3JrIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBwcm9kdWN0aW9uIGluIHRoZSBsaXRlcmFyeSwgc2NpZW50aWZpYyBhbmQgYXJ0aXN0aWMgZG9tYWluLCB3aGF0ZXZlciBtYXkgYmUgdGhlIG1vZGUgb3IgZm9ybSBvZiBpdHMgZXhwcmVzc2lvbiBpbmNsdWRpbmcgZGlnaXRhbCBmb3JtLCBzdWNoIGFzIGEgYm9vaywgcGFtcGhsZXQgYW5kIG90aGVyIHdyaXRpbmc7IGEgbGVjdHVyZSwgYWRkcmVzcywgc2VybW9uIG9yIG90aGVyIHdvcmsgb2YgdGhlIHNhbWUgbmF0dXJlOyBhIGRyYW1hdGljIG9yIGRyYW1hdGljby1tdXNpY2FsIHdvcms7IGEgY2hvcmVvZ3JhcGhpYyB3b3JrIG9yIGVudGVydGFpbm1lbnQgaW4gZHVtYiBzaG93OyBhIG11c2ljYWwgY29tcG9zaXRpb24gd2l0aCBvciB3aXRob3V0IHdvcmRzOyBhIGNpbmVtYXRvZ3JhcGhpYyB3b3JrIHRvIHdoaWNoIGFyZSBhc3NpbWlsYXRlZCB3b3JrcyBleHByZXNzZWQgYnkgYSBwcm9jZXNzIGFuYWxvZ291cyB0byBjaW5lbWF0b2dyYXBoeTsgYSB3b3JrIG9mIGRyYXdpbmcsIHBhaW50aW5nLCBhcmNoaXRlY3R1cmUsIHNjdWxwdHVyZSwgZW5ncmF2aW5nIG9yIGxpdGhvZ3JhcGh5OyBhIHBob3RvZ3JhcGhpYyB3b3JrIHRvIHdoaWNoIGFyZSBhc3NpbWlsYXRlZCB3b3JrcyBleHByZXNzZWQgYnkgYSBwcm9jZXNzIGFuYWxvZ291cyB0byBwaG90b2dyYXBoeTsgYSB3b3JrIG9mIGFwcGxpZWQgYXJ0OyBhbiBpbGx1c3RyYXRpb24sIG1hcCwgcGxhbiwgc2tldGNoIG9yIHRocmVlLWRpbWVuc2lvbmFsIHdvcmsgcmVsYXRpdmUgdG8gZ2VvZ3JhcGh5LCB0b3BvZ3JhcGh5LCBhcmNoaXRlY3R1cmUgb3Igc2NpZW5jZTsgYSBwZXJmb3JtYW5jZTsgYSBicm9hZGNhc3Q7IGEgcGhvbm9ncmFtOyBhIGNvbXBpbGF0aW9uIG9mIGRhdGEgdG8gdGhlIGV4dGVudCBpdCBpcyBwcm90ZWN0ZWQgYXMgYSBjb3B5cmlnaHRhYmxlIHdvcms7IG9yIGEgd29yayBwZXJmb3JtZWQgYnkgYSB2YXJpZXR5IG9yIGNpcmN1cyBwZXJmb3JtZXIgdG8gdGhlIGV4dGVudCBpdCBpcyBub3Qgb3RoZXJ3aXNlIGNvbnNpZGVyZWQgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKyJQdWJsaWNseSBQZXJmb3JtIiBtZWFucyB0byBwZXJmb3JtIHB1YmxpYyByZWNpdGF0aW9ucyBvZiB0aGUgV29yayBhbmQgdG8gY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYyB0aG9zZSBwdWJsaWMgcmVjaXRhdGlvbnMsIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzLCBpbmNsdWRpbmcgYnkgd2lyZSBvciB3aXJlbGVzcyBtZWFucyBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZXM7IHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgV29ya3MgaW4gc3VjaCBhIHdheSB0aGF0IG1lbWJlcnMgb2YgdGhlIHB1YmxpYyBtYXkgYWNjZXNzIHRoZXNlIFdvcmtzIGZyb20gYSBwbGFjZSBhbmQgYXQgYSBwbGFjZSBpbmRpdmlkdWFsbHkgY2hvc2VuIGJ5IHRoZW07IHRvIHBlcmZvcm0gdGhlIFdvcmsgdG8gdGhlIHB1YmxpYyBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcyBhbmQgdGhlIGNvbW11bmljYXRpb24gdG8gdGhlIHB1YmxpYyBvZiB0aGUgcGVyZm9ybWFuY2VzIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgYnkgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2U7IHRvIGJyb2FkY2FzdCBhbmQgcmVicm9hZGNhc3QgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyBzaWducywgc291bmRzIG9yIGltYWdlcy4KKyJSZXByb2R1Y2UiIG1lYW5zIHRvIG1ha2UgY29waWVzIG9mIHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGJ5IHNvdW5kIG9yIHZpc3VhbCByZWNvcmRpbmdzIGFuZCB0aGUgcmlnaHQgb2YgZml4YXRpb24gYW5kIHJlcHJvZHVjaW5nIGZpeGF0aW9ucyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIHN0b3JhZ2Ugb2YgYSBwcm90ZWN0ZWQgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtIGluIGRpZ2l0YWwgZm9ybSBvciBvdGhlciBlbGVjdHJvbmljIG1lZGl1bS4KKzIuIEZhaXIgRGVhbGluZyBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSB1c2VzIGZyZWUgZnJvbSBjb3B5cmlnaHQgb3IgcmlnaHRzIGFyaXNpbmcgZnJvbSBsaW1pdGF0aW9ucyBvciBleGNlcHRpb25zIHRoYXQgYXJlIHByb3ZpZGVkIGZvciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGNvcHlyaWdodCBwcm90ZWN0aW9uIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIFJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aW9ucywgYW5kIHRvIFJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3Rpb25zOyBhbmQsCit0byBEaXN0cmlidXRlIGFuZCBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGlvbnMuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidDoKKworTm9uLXdhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbm5vdCBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTsKK1dhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbiBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7IGFuZCwKK1ZvbHVudGFyeSBMaWNlbnNlIFNjaGVtZXMuIFRoZSBMaWNlbnNvciB3YWl2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzLCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciwgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIExpY2Vuc29yIGlzIGEgbWVtYmVyIG9mIGEgY29sbGVjdGluZyBzb2NpZXR5IHRoYXQgYWRtaW5pc3RlcnMgdm9sdW50YXJ5IGxpY2Vuc2luZyBzY2hlbWVzLCB2aWEgdGhhdCBzb2NpZXR5LCBmcm9tIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLCBidXQgb3RoZXJ3aXNlIHlvdSBoYXZlIG5vIHJpZ2h0cyB0byBtYWtlIEFkYXB0YXRpb25zLiBTdWJqZWN0IHRvIFNlY3Rpb24gOChmKSwgYWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgYWJpbGl0eSBvZiB0aGUgcmVjaXBpZW50IG9mIHRoZSBXb3JrIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBXaGVuIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmssIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgYWJpbGl0eSBvZiBhIHJlY2lwaWVudCBvZiB0aGUgV29yayBmcm9tIFlvdSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChhKSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3Rpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoYiksIGFzIHJlcXVlc3RlZC4KK0lmIFlvdSBEaXN0cmlidXRlLCBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCwgdW5sZXNzIGEgcmVxdWVzdCBoYXMgYmVlbiBtYWRlIHB1cnN1YW50IHRvIFNlY3Rpb24gNChhKSwga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4sIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gKCJBdHRyaWJ1dGlvbiBQYXJ0aWVzIikgaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgKGlpKSB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IChpaWkpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVSSSwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrLiBUaGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiA0KGIpIG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQ29sbGVjdGlvbiwgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyLCBpZiBhIGNyZWRpdCBmb3IgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzIG9mIHRoZSBDb2xsZWN0aW9uIGFwcGVhcnMsIHRoZW4gYXMgcGFydCBvZiB0aGVzZSBjcmVkaXRzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgdGhlIGNyZWRpdHMgZm9yIHRoZSBvdGhlciBjb250cmlidXRpbmcgYXV0aG9ycy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBtYXkgb25seSB1c2UgdGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gZm9yIHRoZSBwdXJwb3NlIG9mIGF0dHJpYnV0aW9uIGluIHRoZSBtYW5uZXIgc2V0IG91dCBhYm92ZSBhbmQsIGJ5IGV4ZXJjaXNpbmcgWW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IG5vdCBpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkgYXNzZXJ0IG9yIGltcGx5IGFueSBjb25uZWN0aW9uIHdpdGgsIHNwb25zb3JzaGlwIG9yIGVuZG9yc2VtZW50IGJ5IHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLCBhcyBhcHByb3ByaWF0ZSwgb2YgWW91IG9yIFlvdXIgdXNlIG9mIHRoZSBXb3JrLCB3aXRob3V0IHRoZSBzZXBhcmF0ZSwgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMuCitFeGNlcHQgYXMgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nIGJ5IHRoZSBMaWNlbnNvciBvciBhcyBtYXkgYmUgb3RoZXJ3aXNlIHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgaWYgWW91IFJlcHJvZHVjZSwgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGVpdGhlciBieSBpdHNlbGYgb3IgYXMgcGFydCBvZiBhbnkgQ29sbGVjdGlvbnMsIFlvdSBtdXN0IG5vdCBkaXN0b3J0LCBtdXRpbGF0ZSwgbW9kaWZ5IG9yIHRha2Ugb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gaW4gcmVsYXRpb24gdG8gdGhlIFdvcmsgd2hpY2ggd291bGQgYmUgcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcmBzIGhvbm9yIG9yIHJlcHV0YXRpb24uCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aW9ucyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aW9uLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK1RoZSByaWdodHMgZ3JhbnRlZCB1bmRlciwgYW5kIHRoZSBzdWJqZWN0IG1hdHRlciByZWZlcmVuY2VkLCBpbiB0aGlzIExpY2Vuc2Ugd2VyZSBkcmFmdGVkIHV0aWxpemluZyB0aGUgdGVybWlub2xvZ3kgb2YgdGhlIEJlcm5lIENvbnZlbnRpb24gZm9yIHRoZSBQcm90ZWN0aW9uIG9mIExpdGVyYXJ5IGFuZCBBcnRpc3RpYyBXb3JrcyAoYXMgYW1lbmRlZCBvbiBTZXB0ZW1iZXIgMjgsIDE5NzkpLCB0aGUgUm9tZSBDb252ZW50aW9uIG9mIDE5NjEsIHRoZSBXSVBPIENvcHlyaWdodCBUcmVhdHkgb2YgMTk5NiwgdGhlIFdJUE8gUGVyZm9ybWFuY2VzIGFuZCBQaG9ub2dyYW1zIFRyZWF0eSBvZiAxOTk2IGFuZCB0aGUgVW5pdmVyc2FsIENvcHlyaWdodCBDb252ZW50aW9uIChhcyByZXZpc2VkIG9uIEp1bHkgMjQsIDE5NzEpLiBUaGVzZSByaWdodHMgYW5kIHN1YmplY3QgbWF0dGVyIHRha2UgZWZmZWN0IGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIExpY2Vuc2UgdGVybXMgYXJlIHNvdWdodCB0byBiZSBlbmZvcmNlZCBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcHJvdmlzaW9ucyBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgdHJlYXR5IHByb3Zpc2lvbnMgaW4gdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LiBJZiB0aGUgc3RhbmRhcmQgc3VpdGUgb2YgcmlnaHRzIGdyYW50ZWQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3IGluY2x1ZGVzIGFkZGl0aW9uYWwgcmlnaHRzIG5vdCBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgc3VjaCBhZGRpdGlvbmFsIHJpZ2h0cyBhcmUgZGVlbWVkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBMaWNlbnNlOyB0aGlzIExpY2Vuc2UgaXMgbm90IGludGVuZGVkIHRvIHJlc3RyaWN0IHRoZSBsaWNlbnNlIG9mIGFueSByaWdodHMgdW5kZXIgYXBwbGljYWJsZSBsYXcuCitDcmVhdGl2ZSBDb21tb25zIE5vdGljZQorCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBDcmVhdGl2ZSBDb21tb25zIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgdXNlIGJ5IGVpdGhlciBwYXJ0eSBvZiB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoaXMgdHJhZGVtYXJrIHJlc3RyaWN0aW9uIGRvZXMgbm90IGZvcm0gcGFydCBvZiB0aGlzIExpY2Vuc2UuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktU0EtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMTM5NGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTEuMApAQCAtMCwwICsxLDYzIEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDEuMAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBEUkFGVCBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3M7CitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiBlYWNoIERlcml2YXRpdmUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIERlcml2YXRpdmUgV29ya3MgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLCBhbmQgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBEZXJpdmF0aXZlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIERlcml2YXRpdmUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK0J5IG9mZmVyaW5nIHRoZSBXb3JrIGZvciBwdWJsaWMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIHJlcHJlc2VudHMgYW5kIHdhcnJhbnRzIHRoYXQsIHRvIHRoZSBiZXN0IG9mIExpY2Vuc29yYHMga25vd2xlZGdlIGFmdGVyIHJlYXNvbmFibGUgaW5xdWlyeToKK0xpY2Vuc29yIGhhcyBzZWN1cmVkIGFsbCByaWdodHMgaW4gdGhlIFdvcmsgbmVjZXNzYXJ5IHRvIGdyYW50IHRoZSBsaWNlbnNlIHJpZ2h0cyBoZXJldW5kZXIgYW5kIHRvIHBlcm1pdCB0aGUgbGF3ZnVsIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2l0aG91dCBZb3UgaGF2aW5nIGFueSBvYmxpZ2F0aW9uIHRvIHBheSBhbnkgcm95YWx0aWVzLCBjb21wdWxzb3J5IGxpY2Vuc2UgZmVlcywgcmVzaWR1YWxzIG9yIGFueSBvdGhlciBwYXltZW50czsKK1RoZSBXb3JrIGRvZXMgbm90IGluZnJpbmdlIHRoZSBjb3B5cmlnaHQsIHRyYWRlbWFyaywgcHVibGljaXR5IHJpZ2h0cywgY29tbW9uIGxhdyByaWdodHMgb3IgYW55IG90aGVyIHJpZ2h0IG9mIGFueSB0aGlyZCBwYXJ0eSBvciBjb25zdGl0dXRlIGRlZmFtYXRpb24sIGludmFzaW9uIG9mIHByaXZhY3kgb3Igb3RoZXIgdG9ydGlvdXMgaW5qdXJ5IHRvIGFueSB0aGlyZCBwYXJ0eS4KK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU1RBVEVEIElOIFRISVMgTElDRU5TRSBPUiBPVEhFUldJU0UgQUdSRUVEIElOIFdSSVRJTkcgT1IgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIFRIRSBXT1JLIElTIExJQ0VOU0VEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBDT05URU5UUyBPUiBBQ0NVUkFDWSBPRiBUSEUgV09SSy4KKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgQU5EIEVYQ0VQVCBGT1IgREFNQUdFUyBBUklTSU5HIEZST00gTElBQklMSVRZIFRPIEEgVEhJUkQgUEFSVFkgUkVTVUxUSU5HIEZST00gQlJFQUNIIE9GIFRIRSBXQVJSQU5USUVTIElOIFNFQ1RJT04gNSwgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktU0EtMi4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1TQS0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgyNDM0YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktU0EtMi4wCkBAIC0wLDAgKzEsNjcgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLVNoYXJlQWxpa2UgMi4wCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisiTGljZW5zZSBFbGVtZW50cyIgbWVhbnMgdGhlIGZvbGxvd2luZyBoaWdoLWxldmVsIGxpY2Vuc2UgYXR0cmlidXRlcyBhcyBzZWxlY3RlZCBieSBMaWNlbnNvciBhbmQgaW5kaWNhdGVkIGluIHRoZSB0aXRsZSBvZiB0aGlzIExpY2Vuc2U6IEF0dHJpYnV0aW9uLCBTaGFyZUFsaWtlLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3MuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIHdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCitQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsuCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIHNvY2lldHkgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrICgiY292ZXIgdmVyc2lvbiIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYSBsYXRlciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlLCBvciBhIENyZWF0aXZlIENvbW1vbnMgaUNvbW1vbnMgbGljZW5zZSB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlIChlLmcuIEF0dHJpYnV0aW9uLVNoYXJlQWxpa2UgMi4wIEphcGFuKS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugb3Igb3RoZXIgbGljZW5zZSBzcGVjaWZpZWQgaW4gdGhlIHByZXZpb3VzIHNlbnRlbmNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiBlYWNoIERlcml2YXRpdmUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIERlcml2YXRpdmUgV29ya3MgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLCBhbmQgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBEZXJpdmF0aXZlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIERlcml2YXRpdmUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBNQVRFUklBTFMsIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTIuNSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktU0EtMi41Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmOGRkNWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTIuNQpAQCAtMCwwICsxLDY3IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDIuNQorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorIkxpY2Vuc2UgRWxlbWVudHMiIG1lYW5zIHRoZSBmb2xsb3dpbmcgaGlnaC1sZXZlbCBsaWNlbnNlIGF0dHJpYnV0ZXMgYXMgc2VsZWN0ZWQgYnkgTGljZW5zb3IgYW5kIGluZGljYXRlZCBpbiB0aGUgdGl0bGUgb2YgdGhpcyBMaWNlbnNlOiBBdHRyaWJ1dGlvbiwgU2hhcmVBbGlrZS4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzLgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSB3b3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjoKKworUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLgorTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBzb2NpZXR5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KK1dlYmNhc3RpbmcgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE0IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IGNsYXVzZSA0KGMpLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYyksIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhIGxhdGVyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHdpdGggdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UsIG9yIGEgQ3JlYXRpdmUgQ29tbW9ucyBpQ29tbW9ucyBsaWNlbnNlIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UgKGUuZy4gQXR0cmlidXRpb24tU2hhcmVBbGlrZSAyLjUgSmFwYW4pLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSBvciBvdGhlciBsaWNlbnNlIHNwZWNpZmllZCBpbiB0aGUgcHJldmlvdXMgc2VudGVuY2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIGVhY2ggRGVyaXZhdGl2ZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIsIGFuZCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIERlcml2YXRpdmUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIERlcml2YXRpdmUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIChpaSkgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uIGluIExpY2Vuc29yYHMgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBNQVRFUklBTFMsIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTMuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktU0EtMy4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYmJkNmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTMuMApAQCAtMCwwICsxLDc0IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworQXR0cmlidXRpb24tU2hhcmVBbGlrZSAzLjAgVW5wb3J0ZWQKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVE8gVEhFIEVYVEVOVCBUSElTIExJQ0VOU0UgTUFZIEJFIENPTlNJREVSRUQgVE8gQkUgQSBDT05UUkFDVCwgVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQWRhcHRhdGlvbiIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmssIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBhZGFwdGF0aW9uLCBkZXJpdmF0aXZlIHdvcmssIGFycmFuZ2VtZW50IG9mIG11c2ljIG9yIG90aGVyIGFsdGVyYXRpb25zIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgb3IgcGhvbm9ncmFtIG9yIHBlcmZvcm1hbmNlIGFuZCBpbmNsdWRlcyBjaW5lbWF0b2dyYXBoaWMgYWRhcHRhdGlvbnMgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQgaW5jbHVkaW5nIGluIGFueSBmb3JtIHJlY29nbml6YWJseSBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgd29yaywgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiQ29sbGVjdGlvbiIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzLCBzdWNoIGFzIGVuY3ljbG9wZWRpYXMgYW5kIGFudGhvbG9naWVzLCBvciBwZXJmb3JtYW5jZXMsIHBob25vZ3JhbXMgb3IgYnJvYWRjYXN0cywgb3Igb3RoZXIgd29ya3Mgb3Igc3ViamVjdCBtYXR0ZXIgb3RoZXIgdGhhbiB3b3JrcyBsaXN0ZWQgaW4gU2VjdGlvbiAxKGYpIGJlbG93LCB3aGljaCwgYnkgcmVhc29uIG9mIHRoZSBzZWxlY3Rpb24gYW5kIGFycmFuZ2VtZW50IG9mIHRoZWlyIGNvbnRlbnRzLCBjb25zdGl0dXRlIGludGVsbGVjdHVhbCBjcmVhdGlvbnMsIGluIHdoaWNoIHRoZSBXb3JrIGlzIGluY2x1ZGVkIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0gYWxvbmcgd2l0aCBvbmUgb3IgbW9yZSBvdGhlciBjb250cmlidXRpb25zLCBlYWNoIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgd2hpY2ggdG9nZXRoZXIgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiQ3JlYXRpdmUgQ29tbW9ucyBDb21wYXRpYmxlIExpY2Vuc2UiIG1lYW5zIGEgbGljZW5zZSB0aGF0IGlzIGxpc3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9jb21wYXRpYmxlbGljZW5zZXMgdGhhdCBoYXMgYmVlbiBhcHByb3ZlZCBieSBDcmVhdGl2ZSBDb21tb25zIGFzIGJlaW5nIGVzc2VudGlhbGx5IGVxdWl2YWxlbnQgdG8gdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcsIGF0IGEgbWluaW11bSwgYmVjYXVzZSB0aGF0IGxpY2Vuc2U6IChpKSBjb250YWlucyB0ZXJtcyB0aGF0IGhhdmUgdGhlIHNhbWUgcHVycG9zZSwgbWVhbmluZyBhbmQgZWZmZWN0IGFzIHRoZSBMaWNlbnNlIEVsZW1lbnRzIG9mIHRoaXMgTGljZW5zZTsgYW5kLCAoaWkpIGV4cGxpY2l0bHkgcGVybWl0cyB0aGUgcmVsaWNlbnNpbmcgb2YgYWRhcHRhdGlvbnMgb2Ygd29ya3MgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhhdCBsaWNlbnNlIHVuZGVyIHRoaXMgTGljZW5zZSBvciBhIENyZWF0aXZlIENvbW1vbnMganVyaXNkaWN0aW9uIGxpY2Vuc2Ugd2l0aCB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZS4KKyJEaXN0cmlidXRlIiBtZWFucyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIHRoZSBvcmlnaW5hbCBhbmQgY29waWVzIG9mIHRoZSBXb3JrIG9yIEFkYXB0YXRpb24sIGFzIGFwcHJvcHJpYXRlLCB0aHJvdWdoIHNhbGUgb3Igb3RoZXIgdHJhbnNmZXIgb2Ygb3duZXJzaGlwLgorIkxpY2Vuc2UgRWxlbWVudHMiIG1lYW5zIHRoZSBmb2xsb3dpbmcgaGlnaC1sZXZlbCBsaWNlbnNlIGF0dHJpYnV0ZXMgYXMgc2VsZWN0ZWQgYnkgTGljZW5zb3IgYW5kIGluZGljYXRlZCBpbiB0aGUgdGl0bGUgb2YgdGhpcyBMaWNlbnNlOiBBdHRyaWJ1dGlvbiwgU2hhcmVBbGlrZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgdGhhdCBvZmZlcihzKSB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMsIGluIHRoZSBjYXNlIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgd2hvIGNyZWF0ZWQgdGhlIFdvcmsgb3IgaWYgbm8gaW5kaXZpZHVhbCBvciBlbnRpdHkgY2FuIGJlIGlkZW50aWZpZWQsIHRoZSBwdWJsaXNoZXI7IGFuZCBpbiBhZGRpdGlvbiAoaSkgaW4gdGhlIGNhc2Ugb2YgYSBwZXJmb3JtYW5jZSB0aGUgYWN0b3JzLCBzaW5nZXJzLCBtdXNpY2lhbnMsIGRhbmNlcnMsIGFuZCBvdGhlciBwZXJzb25zIHdobyBhY3QsIHNpbmcsIGRlbGl2ZXIsIGRlY2xhaW0sIHBsYXkgaW4sIGludGVycHJldCBvciBvdGhlcndpc2UgcGVyZm9ybSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrcyBvciBleHByZXNzaW9ucyBvZiBmb2xrbG9yZTsgKGlpKSBpbiB0aGUgY2FzZSBvZiBhIHBob25vZ3JhbSB0aGUgcHJvZHVjZXIgYmVpbmcgdGhlIHBlcnNvbiBvciBsZWdhbCBlbnRpdHkgd2hvIGZpcnN0IGZpeGVzIHRoZSBzb3VuZHMgb2YgYSBwZXJmb3JtYW5jZSBvciBvdGhlciBzb3VuZHM7IGFuZCwgKGlpaSkgaW4gdGhlIGNhc2Ugb2YgYnJvYWRjYXN0cywgdGhlIG9yZ2FuaXphdGlvbiB0aGF0IHRyYW5zbWl0cyB0aGUgYnJvYWRjYXN0LgorIldvcmsiIG1lYW5zIHRoZSBsaXRlcmFyeSBhbmQvb3IgYXJ0aXN0aWMgd29yayBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgcHJvZHVjdGlvbiBpbiB0aGUgbGl0ZXJhcnksIHNjaWVudGlmaWMgYW5kIGFydGlzdGljIGRvbWFpbiwgd2hhdGV2ZXIgbWF5IGJlIHRoZSBtb2RlIG9yIGZvcm0gb2YgaXRzIGV4cHJlc3Npb24gaW5jbHVkaW5nIGRpZ2l0YWwgZm9ybSwgc3VjaCBhcyBhIGJvb2ssIHBhbXBobGV0IGFuZCBvdGhlciB3cml0aW5nOyBhIGxlY3R1cmUsIGFkZHJlc3MsIHNlcm1vbiBvciBvdGhlciB3b3JrIG9mIHRoZSBzYW1lIG5hdHVyZTsgYSBkcmFtYXRpYyBvciBkcmFtYXRpY28tbXVzaWNhbCB3b3JrOyBhIGNob3Jlb2dyYXBoaWMgd29yayBvciBlbnRlcnRhaW5tZW50IGluIGR1bWIgc2hvdzsgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIHdpdGggb3Igd2l0aG91dCB3b3JkczsgYSBjaW5lbWF0b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gY2luZW1hdG9ncmFwaHk7IGEgd29yayBvZiBkcmF3aW5nLCBwYWludGluZywgYXJjaGl0ZWN0dXJlLCBzY3VscHR1cmUsIGVuZ3JhdmluZyBvciBsaXRob2dyYXBoeTsgYSBwaG90b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gcGhvdG9ncmFwaHk7IGEgd29yayBvZiBhcHBsaWVkIGFydDsgYW4gaWxsdXN0cmF0aW9uLCBtYXAsIHBsYW4sIHNrZXRjaCBvciB0aHJlZS1kaW1lbnNpb25hbCB3b3JrIHJlbGF0aXZlIHRvIGdlb2dyYXBoeSwgdG9wb2dyYXBoeSwgYXJjaGl0ZWN0dXJlIG9yIHNjaWVuY2U7IGEgcGVyZm9ybWFuY2U7IGEgYnJvYWRjYXN0OyBhIHBob25vZ3JhbTsgYSBjb21waWxhdGlvbiBvZiBkYXRhIHRvIHRoZSBleHRlbnQgaXQgaXMgcHJvdGVjdGVkIGFzIGEgY29weXJpZ2h0YWJsZSB3b3JrOyBvciBhIHdvcmsgcGVyZm9ybWVkIGJ5IGEgdmFyaWV0eSBvciBjaXJjdXMgcGVyZm9ybWVyIHRvIHRoZSBleHRlbnQgaXQgaXMgbm90IG90aGVyd2lzZSBjb25zaWRlcmVkIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yay4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisiUHVibGljbHkgUGVyZm9ybSIgbWVhbnMgdG8gcGVyZm9ybSBwdWJsaWMgcmVjaXRhdGlvbnMgb2YgdGhlIFdvcmsgYW5kIHRvIGNvbW11bmljYXRlIHRvIHRoZSBwdWJsaWMgdGhvc2UgcHVibGljIHJlY2l0YXRpb25zLCBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcywgaW5jbHVkaW5nIGJ5IHdpcmUgb3Igd2lyZWxlc3MgbWVhbnMgb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2VzOyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIFdvcmtzIGluIHN1Y2ggYSB3YXkgdGhhdCBtZW1iZXJzIG9mIHRoZSBwdWJsaWMgbWF5IGFjY2VzcyB0aGVzZSBXb3JrcyBmcm9tIGEgcGxhY2UgYW5kIGF0IGEgcGxhY2UgaW5kaXZpZHVhbGx5IGNob3NlbiBieSB0aGVtOyB0byBwZXJmb3JtIHRoZSBXb3JrIHRvIHRoZSBwdWJsaWMgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MgYW5kIHRoZSBjb21tdW5pY2F0aW9uIHRvIHRoZSBwdWJsaWMgb2YgdGhlIHBlcmZvcm1hbmNlcyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIGJ5IHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlOyB0byBicm9hZGNhc3QgYW5kIHJlYnJvYWRjYXN0IHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgc2lnbnMsIHNvdW5kcyBvciBpbWFnZXMuCisiUmVwcm9kdWNlIiBtZWFucyB0byBtYWtlIGNvcGllcyBvZiB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBieSBzb3VuZCBvciB2aXN1YWwgcmVjb3JkaW5ncyBhbmQgdGhlIHJpZ2h0IG9mIGZpeGF0aW9uIGFuZCByZXByb2R1Y2luZyBmaXhhdGlvbnMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBzdG9yYWdlIG9mIGEgcHJvdGVjdGVkIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSBpbiBkaWdpdGFsIGZvcm0gb3Igb3RoZXIgZWxlY3Ryb25pYyBtZWRpdW0uCisyLiBGYWlyIERlYWxpbmcgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgdXNlcyBmcmVlIGZyb20gY29weXJpZ2h0IG9yIHJpZ2h0cyBhcmlzaW5nIGZyb20gbGltaXRhdGlvbnMgb3IgZXhjZXB0aW9ucyB0aGF0IGFyZSBwcm92aWRlZCBmb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBjb3B5cmlnaHQgcHJvdGVjdGlvbiB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byBSZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGlvbnMsIGFuZCB0byBSZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aW9uczsKK3RvIGNyZWF0ZSBhbmQgUmVwcm9kdWNlIEFkYXB0YXRpb25zIHByb3ZpZGVkIHRoYXQgYW55IHN1Y2ggQWRhcHRhdGlvbiwgaW5jbHVkaW5nIGFueSB0cmFuc2xhdGlvbiBpbiBhbnkgbWVkaXVtLCB0YWtlcyByZWFzb25hYmxlIHN0ZXBzIHRvIGNsZWFybHkgbGFiZWwsIGRlbWFyY2F0ZSBvciBvdGhlcndpc2UgaWRlbnRpZnkgdGhhdCBjaGFuZ2VzIHdlcmUgbWFkZSB0byB0aGUgb3JpZ2luYWwgV29yay4gRm9yIGV4YW1wbGUsIGEgdHJhbnNsYXRpb24gY291bGQgYmUgbWFya2VkICJUaGUgb3JpZ2luYWwgd29yayB3YXMgdHJhbnNsYXRlZCBmcm9tIEVuZ2xpc2ggdG8gU3BhbmlzaCwiIG9yIGEgbW9kaWZpY2F0aW9uIGNvdWxkIGluZGljYXRlICJUaGUgb3JpZ2luYWwgd29yayBoYXMgYmVlbiBtb2RpZmllZC4iOwordG8gRGlzdHJpYnV0ZSBhbmQgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3Rpb25zOyBhbmQsCit0byBEaXN0cmlidXRlIGFuZCBQdWJsaWNseSBQZXJmb3JtIEFkYXB0YXRpb25zLgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQ6CisKK05vbi13YWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW5ub3QgYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7CitXYWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW4gYmUgd2FpdmVkLCB0aGUgTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlOyBhbmQsCitWb2x1bnRhcnkgTGljZW5zZSBTY2hlbWVzLiBUaGUgTGljZW5zb3Igd2FpdmVzIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcywgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IsIGluIHRoZSBldmVudCB0aGF0IHRoZSBMaWNlbnNvciBpcyBhIG1lbWJlciBvZiBhIGNvbGxlY3Rpbmcgc29jaWV0eSB0aGF0IGFkbWluaXN0ZXJzIHZvbHVudGFyeSBsaWNlbnNpbmcgc2NoZW1lcywgdmlhIHRoYXQgc29jaWV0eSwgZnJvbSBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gU3ViamVjdCB0byBTZWN0aW9uIDgoZiksIGFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKSBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIGFiaWxpdHkgb2YgdGhlIHJlY2lwaWVudCBvZiB0aGUgV29yayB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gV2hlbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYSByZWNpcGllbnQgb2YgdGhlIFdvcmsgZnJvbSBZb3UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gVGhpcyBTZWN0aW9uIDQoYSkgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aW9uLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aW9uIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGMpLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYW4gQWRhcHRhdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBBZGFwdGF0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGMpLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSBhbiBBZGFwdGF0aW9uIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mOiAoaSkgdGhpcyBMaWNlbnNlOyAoaWkpIGEgbGF0ZXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZTsgKGlpaSkgYSBDcmVhdGl2ZSBDb21tb25zIGp1cmlzZGljdGlvbiBsaWNlbnNlIChlaXRoZXIgdGhpcyBvciBhIGxhdGVyIGxpY2Vuc2UgdmVyc2lvbikgdGhhdCBjb250YWlucyB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSAoZS5nLiwgQXR0cmlidXRpb24tU2hhcmVBbGlrZSAzLjAgVVMpKTsgKGl2KSBhIENyZWF0aXZlIENvbW1vbnMgQ29tcGF0aWJsZSBMaWNlbnNlLiBJZiB5b3UgbGljZW5zZSB0aGUgQWRhcHRhdGlvbiB1bmRlciBvbmUgb2YgdGhlIGxpY2Vuc2VzIG1lbnRpb25lZCBpbiAoaXYpLCB5b3UgbXVzdCBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhhdCBsaWNlbnNlLiBJZiB5b3UgbGljZW5zZSB0aGUgQWRhcHRhdGlvbiB1bmRlciB0aGUgdGVybXMgb2YgYW55IG9mIHRoZSBsaWNlbnNlcyBtZW50aW9uZWQgaW4gKGkpLCAoaWkpIG9yIChpaWkpICh0aGUgIkFwcGxpY2FibGUgTGljZW5zZSIpLCB5b3UgbXVzdCBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhlIEFwcGxpY2FibGUgTGljZW5zZSBnZW5lcmFsbHkgYW5kIHRoZSBmb2xsb3dpbmcgcHJvdmlzaW9uczogKEkpIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVVJJIGZvciwgdGhlIEFwcGxpY2FibGUgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgZWFjaCBBZGFwdGF0aW9uIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm07IChJSSkgWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgQWRhcHRhdGlvbiB0aGF0IHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlIG9yIHRoZSBhYmlsaXR5IG9mIHRoZSByZWNpcGllbnQgb2YgdGhlIEFkYXB0YXRpb24gdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlOyAoSUlJKSBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMgd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIGFzIGluY2x1ZGVkIGluIHRoZSBBZGFwdGF0aW9uIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm07IChJVikgd2hlbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBBZGFwdGF0aW9uLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBBZGFwdGF0aW9uIHRoYXQgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYSByZWNpcGllbnQgb2YgdGhlIEFkYXB0YXRpb24gZnJvbSBZb3UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChiKSBhcHBsaWVzIHRvIHRoZSBBZGFwdGF0aW9uIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgQWRhcHRhdGlvbiBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlLgorSWYgWW91IERpc3RyaWJ1dGUsIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCwgdW5sZXNzIGEgcmVxdWVzdCBoYXMgYmVlbiBtYWRlIHB1cnN1YW50IHRvIFNlY3Rpb24gNChhKSwga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4sIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gKCJBdHRyaWJ1dGlvbiBQYXJ0aWVzIikgaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgKGlpKSB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IChpaWkpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVSSSwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQgKGl2KSAsIGNvbnNpc3RlbnQgd2l0aCBTc2VjdGlvbiAzKGIpLCBpbiB0aGUgY2FzZSBvZiBhbiBBZGFwdGF0aW9uLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBBZGFwdGF0aW9uIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIDQoYykgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBBZGFwdGF0aW9uIG9yIENvbGxlY3Rpb24sIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciwgaWYgYSBjcmVkaXQgZm9yIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycyBvZiB0aGUgQWRhcHRhdGlvbiBvciBDb2xsZWN0aW9uIGFwcGVhcnMsIHRoZW4gYXMgcGFydCBvZiB0aGVzZSBjcmVkaXRzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgdGhlIGNyZWRpdHMgZm9yIHRoZSBvdGhlciBjb250cmlidXRpbmcgYXV0aG9ycy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBtYXkgb25seSB1c2UgdGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gZm9yIHRoZSBwdXJwb3NlIG9mIGF0dHJpYnV0aW9uIGluIHRoZSBtYW5uZXIgc2V0IG91dCBhYm92ZSBhbmQsIGJ5IGV4ZXJjaXNpbmcgWW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IG5vdCBpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkgYXNzZXJ0IG9yIGltcGx5IGFueSBjb25uZWN0aW9uIHdpdGgsIHNwb25zb3JzaGlwIG9yIGVuZG9yc2VtZW50IGJ5IHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLCBhcyBhcHByb3ByaWF0ZSwgb2YgWW91IG9yIFlvdXIgdXNlIG9mIHRoZSBXb3JrLCB3aXRob3V0IHRoZSBzZXBhcmF0ZSwgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMuCitFeGNlcHQgYXMgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nIGJ5IHRoZSBMaWNlbnNvciBvciBhcyBtYXkgYmUgb3RoZXJ3aXNlIHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgaWYgWW91IFJlcHJvZHVjZSwgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGVpdGhlciBieSBpdHNlbGYgb3IgYXMgcGFydCBvZiBhbnkgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMsIFlvdSBtdXN0IG5vdCBkaXN0b3J0LCBtdXRpbGF0ZSwgbW9kaWZ5IG9yIHRha2Ugb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gaW4gcmVsYXRpb24gdG8gdGhlIFdvcmsgd2hpY2ggd291bGQgYmUgcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcmBzIGhvbm9yIG9yIHJlcHV0YXRpb24uIExpY2Vuc29yIGFncmVlcyB0aGF0IGluIHRob3NlIGp1cmlzZGljdGlvbnMgKGUuZy4gSmFwYW4pLCBpbiB3aGljaCBhbnkgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0IGdyYW50ZWQgaW4gU2VjdGlvbiAzKGIpIG9mIHRoaXMgTGljZW5zZSAodGhlIHJpZ2h0IHRvIG1ha2UgQWRhcHRhdGlvbnMpIHdvdWxkIGJlIGRlZW1lZCB0byBiZSBhIGRpc3RvcnRpb24sIG11dGlsYXRpb24sIG1vZGlmaWNhdGlvbiBvciBvdGhlciBkZXJvZ2F0b3J5IGFjdGlvbiBwcmVqdWRpY2lhbCB0byB0aGUgT3JpZ2luYWwgQXV0aG9yYHMgaG9ub3IgYW5kIHJlcHV0YXRpb24sIHRoZSBMaWNlbnNvciB3aWxsIHdhaXZlIG9yIG5vdCBhc3NlcnQsIGFzIGFwcHJvcHJpYXRlLCB0aGlzIFNlY3Rpb24sIHRvIHRoZSBmdWxsZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnkgdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LCB0byBlbmFibGUgWW91IHRvIHJlYXNvbmFibHkgZXhlcmNpc2UgWW91ciByaWdodCB1bmRlciBTZWN0aW9uIDMoYikgb2YgdGhpcyBMaWNlbnNlIChyaWdodCB0byBtYWtlIEFkYXB0YXRpb25zKSBidXQgbm90IG90aGVyd2lzZS4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3Rpb24sIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gYW4gQWRhcHRhdGlvbiwgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK1RoZSByaWdodHMgZ3JhbnRlZCB1bmRlciwgYW5kIHRoZSBzdWJqZWN0IG1hdHRlciByZWZlcmVuY2VkLCBpbiB0aGlzIExpY2Vuc2Ugd2VyZSBkcmFmdGVkIHV0aWxpemluZyB0aGUgdGVybWlub2xvZ3kgb2YgdGhlIEJlcm5lIENvbnZlbnRpb24gZm9yIHRoZSBQcm90ZWN0aW9uIG9mIExpdGVyYXJ5IGFuZCBBcnRpc3RpYyBXb3JrcyAoYXMgYW1lbmRlZCBvbiBTZXB0ZW1iZXIgMjgsIDE5NzkpLCB0aGUgUm9tZSBDb252ZW50aW9uIG9mIDE5NjEsIHRoZSBXSVBPIENvcHlyaWdodCBUcmVhdHkgb2YgMTk5NiwgdGhlIFdJUE8gUGVyZm9ybWFuY2VzIGFuZCBQaG9ub2dyYW1zIFRyZWF0eSBvZiAxOTk2IGFuZCB0aGUgVW5pdmVyc2FsIENvcHlyaWdodCBDb252ZW50aW9uIChhcyByZXZpc2VkIG9uIEp1bHkgMjQsIDE5NzEpLiBUaGVzZSByaWdodHMgYW5kIHN1YmplY3QgbWF0dGVyIHRha2UgZWZmZWN0IGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIExpY2Vuc2UgdGVybXMgYXJlIHNvdWdodCB0byBiZSBlbmZvcmNlZCBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcHJvdmlzaW9ucyBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgdHJlYXR5IHByb3Zpc2lvbnMgaW4gdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LiBJZiB0aGUgc3RhbmRhcmQgc3VpdGUgb2YgcmlnaHRzIGdyYW50ZWQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3IGluY2x1ZGVzIGFkZGl0aW9uYWwgcmlnaHRzIG5vdCBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgc3VjaCBhZGRpdGlvbmFsIHJpZ2h0cyBhcmUgZGVlbWVkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBMaWNlbnNlOyB0aGlzIExpY2Vuc2UgaXMgbm90IGludGVuZGVkIHRvIHJlc3RyaWN0IHRoZSBsaWNlbnNlIG9mIGFueSByaWdodHMgdW5kZXIgYXBwbGljYWJsZSBsYXcuCitDcmVhdGl2ZSBDb21tb25zIE5vdGljZQorCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBDcmVhdGl2ZSBDb21tb25zIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgdXNlIGJ5IGVpdGhlciBwYXJ0eSBvZiB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoaXMgdHJhZGVtYXJrIHJlc3RyaWN0aW9uIGRvZXMgbm90IGZvcm0gcGFydCBvZiB0aGUgTGljZW5zZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MwLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MwLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmNmODhiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQzAtMS4wCkBAIC0wLDAgKzEsMzIgQEAKKworQ3JlYXRpdmUgQ29tbW9ucyBaZXJvIDEuMCBVbml2ZXJzYWwgKENDMCkKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgRE9DVU1FTlQgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBVU0UgT0YgVEhJUyBET0NVTUVOVCBPUiBUSEUgSU5GT1JNQVRJT04gT1IgV09SS1MgUFJPVklERUQgSEVSRVVOREVSLCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBUSEUgVVNFIE9GIFRISVMgRE9DVU1FTlQgT1IgVEhFIElORk9STUFUSU9OIE9SIFdPUktTIFBST1ZJREVEIEhFUkVVTkRFUi4KK1N0YXRlbWVudCBvZiBQdXJwb3NlCisKK1RoZSBsYXdzIG9mIG1vc3QganVyaXNkaWN0aW9ucyB0aHJvdWdob3V0IHRoZSB3b3JsZCBhdXRvbWF0aWNhbGx5IGNvbmZlciBleGNsdXNpdmUgQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cyAoZGVmaW5lZCBiZWxvdykgdXBvbiB0aGUgY3JlYXRvciBhbmQgc3Vic2VxdWVudCBvd25lcihzKSAoZWFjaCBhbmQgYWxsLCBhbiAib3duZXIiKSBvZiBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgYW5kL29yIGEgZGF0YWJhc2UgKGVhY2gsIGEgIldvcmsiKS4KKworQ2VydGFpbiBvd25lcnMgd2lzaCB0byBwZXJtYW5lbnRseSByZWxpbnF1aXNoIHRob3NlIHJpZ2h0cyB0byBhIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIGNvbnRyaWJ1dGluZyB0byBhIGNvbW1vbnMgb2YgY3JlYXRpdmUsIGN1bHR1cmFsIGFuZCBzY2llbnRpZmljIHdvcmtzICgiQ29tbW9ucyIpIHRoYXQgdGhlIHB1YmxpYyBjYW4gcmVsaWFibHkgYW5kIHdpdGhvdXQgZmVhciBvZiBsYXRlciBjbGFpbXMgb2YgaW5mcmluZ2VtZW50IGJ1aWxkIHVwb24sIG1vZGlmeSwgaW5jb3Jwb3JhdGUgaW4gb3RoZXIgd29ya3MsIHJldXNlIGFuZCByZWRpc3RyaWJ1dGUgYXMgZnJlZWx5IGFzIHBvc3NpYmxlIGluIGFueSBmb3JtIHdoYXRzb2V2ZXIgYW5kIGZvciBhbnkgcHVycG9zZXMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gY29tbWVyY2lhbCBwdXJwb3Nlcy4gVGhlc2Ugb3duZXJzIG1heSBjb250cmlidXRlIHRvIHRoZSBDb21tb25zIHRvIHByb21vdGUgdGhlIGlkZWFsIG9mIGEgZnJlZSBjdWx0dXJlIGFuZCB0aGUgZnVydGhlciBwcm9kdWN0aW9uIG9mIGNyZWF0aXZlLCBjdWx0dXJhbCBhbmQgc2NpZW50aWZpYyB3b3Jrcywgb3IgdG8gZ2FpbiByZXB1dGF0aW9uIG9yIGdyZWF0ZXIgZGlzdHJpYnV0aW9uIGZvciB0aGVpciBXb3JrIGluIHBhcnQgdGhyb3VnaCB0aGUgdXNlIGFuZCBlZmZvcnRzIG9mIG90aGVycy4KKworRm9yIHRoZXNlIGFuZC9vciBvdGhlciBwdXJwb3NlcyBhbmQgbW90aXZhdGlvbnMsIGFuZCB3aXRob3V0IGFueSBleHBlY3RhdGlvbiBvZiBhZGRpdGlvbmFsIGNvbnNpZGVyYXRpb24gb3IgY29tcGVuc2F0aW9uLCB0aGUgcGVyc29uIGFzc29jaWF0aW5nIENDMCB3aXRoIGEgV29yayAodGhlICJBZmZpcm1lciIpLCB0byB0aGUgZXh0ZW50IHRoYXQgaGUgb3Igc2hlIGlzIGFuIG93bmVyIG9mIENvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMgaW4gdGhlIFdvcmssIHZvbHVudGFyaWx5IGVsZWN0cyB0byBhcHBseSBDQzAgdG8gdGhlIFdvcmsgYW5kIHB1YmxpY2x5IGRpc3RyaWJ1dGUgdGhlIFdvcmsgdW5kZXIgaXRzIHRlcm1zLCB3aXRoIGtub3dsZWRnZSBvZiBoaXMgb3IgaGVyIENvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMgaW4gdGhlIFdvcmsgYW5kIHRoZSBtZWFuaW5nIGFuZCBpbnRlbmRlZCBsZWdhbCBlZmZlY3Qgb2YgQ0MwIG9uIHRob3NlIHJpZ2h0cy4KKworMS4gQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cy4gQSBXb3JrIG1hZGUgYXZhaWxhYmxlIHVuZGVyIENDMCBtYXkgYmUgcHJvdGVjdGVkIGJ5IGNvcHlyaWdodCBhbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgKCJDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIikuIENvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMgaW5jbHVkZSwgYnV0IGFyZSBub3QgbGltaXRlZCB0bywgdGhlIGZvbGxvd2luZzoKKwordGhlIHJpZ2h0IHRvIHJlcHJvZHVjZSwgYWRhcHQsIGRpc3RyaWJ1dGUsIHBlcmZvcm0sIGRpc3BsYXksIGNvbW11bmljYXRlLCBhbmQgdHJhbnNsYXRlIGEgV29yazsKK21vcmFsIHJpZ2h0cyByZXRhaW5lZCBieSB0aGUgb3JpZ2luYWwgYXV0aG9yKHMpIGFuZC9vciBwZXJmb3JtZXIocyk7CitwdWJsaWNpdHkgYW5kIHByaXZhY3kgcmlnaHRzIHBlcnRhaW5pbmcgdG8gYSBwZXJzb25gcyBpbWFnZSBvciBsaWtlbmVzcyBkZXBpY3RlZCBpbiBhIFdvcms7CityaWdodHMgcHJvdGVjdGluZyBhZ2FpbnN0IHVuZmFpciBjb21wZXRpdGlvbiBpbiByZWdhcmRzIHRvIGEgV29yaywgc3ViamVjdCB0byB0aGUgbGltaXRhdGlvbnMgaW4gcGFyYWdyYXBoIDQoYSksIGJlbG93OworcmlnaHRzIHByb3RlY3RpbmcgdGhlIGV4dHJhY3Rpb24sIGRpc3NlbWluYXRpb24sIHVzZSBhbmQgcmV1c2Ugb2YgZGF0YSBpbiBhIFdvcms7CitkYXRhYmFzZSByaWdodHMgKHN1Y2ggYXMgdGhvc2UgYXJpc2luZyB1bmRlciBEaXJlY3RpdmUgOTYvOS9FQyBvZiB0aGUgRXVyb3BlYW4gUGFybGlhbWVudCBhbmQgb2YgdGhlIENvdW5jaWwgb2YgMTEgTWFyY2ggMTk5NiBvbiB0aGUgbGVnYWwgcHJvdGVjdGlvbiBvZiBkYXRhYmFzZXMsIGFuZCB1bmRlciBhbnkgbmF0aW9uYWwgaW1wbGVtZW50YXRpb24gdGhlcmVvZiwgaW5jbHVkaW5nIGFueSBhbWVuZGVkIG9yIHN1Y2Nlc3NvciB2ZXJzaW9uIG9mIHN1Y2ggZGlyZWN0aXZlKTsgYW5kCitvdGhlciBzaW1pbGFyLCBlcXVpdmFsZW50IG9yIGNvcnJlc3BvbmRpbmcgcmlnaHRzIHRocm91Z2hvdXQgdGhlIHdvcmxkIGJhc2VkIG9uIGFwcGxpY2FibGUgbGF3IG9yIHRyZWF0eSwgYW5kIGFueSBuYXRpb25hbCBpbXBsZW1lbnRhdGlvbnMgdGhlcmVvZi4KKzIuIFdhaXZlci4gVG8gdGhlIGdyZWF0ZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnksIGJ1dCBub3QgaW4gY29udHJhdmVudGlvbiBvZiwgYXBwbGljYWJsZSBsYXcsIEFmZmlybWVyIGhlcmVieSBvdmVydGx5LCBmdWxseSwgcGVybWFuZW50bHksIGlycmV2b2NhYmx5IGFuZCB1bmNvbmRpdGlvbmFsbHkgd2FpdmVzLCBhYmFuZG9ucywgYW5kIHN1cnJlbmRlcnMgYWxsIG9mIEFmZmlybWVyYHMgQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cyBhbmQgYXNzb2NpYXRlZCBjbGFpbXMgYW5kIGNhdXNlcyBvZiBhY3Rpb24sIHdoZXRoZXIgbm93IGtub3duIG9yIHVua25vd24gKGluY2x1ZGluZyBleGlzdGluZyBhcyB3ZWxsIGFzIGZ1dHVyZSBjbGFpbXMgYW5kIGNhdXNlcyBvZiBhY3Rpb24pLCBpbiB0aGUgV29yayAoaSkgaW4gYWxsIHRlcnJpdG9yaWVzIHdvcmxkd2lkZSwgKGlpKSBmb3IgdGhlIG1heGltdW0gZHVyYXRpb24gcHJvdmlkZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgdHJlYXR5IChpbmNsdWRpbmcgZnV0dXJlIHRpbWUgZXh0ZW5zaW9ucyksIChpaWkpIGluIGFueSBjdXJyZW50IG9yIGZ1dHVyZSBtZWRpdW0gYW5kIGZvciBhbnkgbnVtYmVyIG9mIGNvcGllcywgYW5kIChpdikgZm9yIGFueSBwdXJwb3NlIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gY29tbWVyY2lhbCwgYWR2ZXJ0aXNpbmcgb3IgcHJvbW90aW9uYWwgcHVycG9zZXMgKHRoZSAiV2FpdmVyIikuIEFmZmlybWVyIG1ha2VzIHRoZSBXYWl2ZXIgZm9yIHRoZSBiZW5lZml0IG9mIGVhY2ggbWVtYmVyIG9mIHRoZSBwdWJsaWMgYXQgbGFyZ2UgYW5kIHRvIHRoZSBkZXRyaW1lbnQgb2YgQWZmaXJtZXJgcyBoZWlycyBhbmQgc3VjY2Vzc29ycywgZnVsbHkgaW50ZW5kaW5nIHRoYXQgc3VjaCBXYWl2ZXIgc2hhbGwgbm90IGJlIHN1YmplY3QgdG8gcmV2b2NhdGlvbiwgcmVzY2lzc2lvbiwgY2FuY2VsbGF0aW9uLCB0ZXJtaW5hdGlvbiwgb3IgYW55IG90aGVyIGxlZ2FsIG9yIGVxdWl0YWJsZSBhY3Rpb24gdG8gZGlzcnVwdCB0aGUgcXVpZXQgZW5qb3ltZW50IG9mIHRoZSBXb3JrIGJ5IHRoZSBwdWJsaWMgYXMgY29udGVtcGxhdGVkIGJ5IEFmZmlybWVyYHMgZXhwcmVzcyBTdGF0ZW1lbnQgb2YgUHVycG9zZS4KKworMy4gUHVibGljIExpY2Vuc2UgRmFsbGJhY2suIFNob3VsZCBhbnkgcGFydCBvZiB0aGUgV2FpdmVyIGZvciBhbnkgcmVhc29uIGJlIGp1ZGdlZCBsZWdhbGx5IGludmFsaWQgb3IgaW5lZmZlY3RpdmUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIHRoZW4gdGhlIFdhaXZlciBzaGFsbCBiZSBwcmVzZXJ2ZWQgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCB0YWtpbmcgaW50byBhY2NvdW50IEFmZmlybWVyYHMgZXhwcmVzcyBTdGF0ZW1lbnQgb2YgUHVycG9zZS4gSW4gYWRkaXRpb24sIHRvIHRoZSBleHRlbnQgdGhlIFdhaXZlciBpcyBzbyBqdWRnZWQgQWZmaXJtZXIgaGVyZWJ5IGdyYW50cyB0byBlYWNoIGFmZmVjdGVkIHBlcnNvbiBhIHJveWFsdHktZnJlZSwgbm9uIHRyYW5zZmVyYWJsZSwgbm9uIHN1YmxpY2Vuc2FibGUsIG5vbiBleGNsdXNpdmUsIGlycmV2b2NhYmxlIGFuZCB1bmNvbmRpdGlvbmFsIGxpY2Vuc2UgdG8gZXhlcmNpc2UgQWZmaXJtZXJgcyBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIGluIHRoZSBXb3JrIChpKSBpbiBhbGwgdGVycml0b3JpZXMgd29ybGR3aWRlLCAoaWkpIGZvciB0aGUgbWF4aW11bSBkdXJhdGlvbiBwcm92aWRlZCBieSBhcHBsaWNhYmxlIGxhdyBvciB0cmVhdHkgKGluY2x1ZGluZyBmdXR1cmUgdGltZSBleHRlbnNpb25zKSwgKGlpaSkgaW4gYW55IGN1cnJlbnQgb3IgZnV0dXJlIG1lZGl1bSBhbmQgZm9yIGFueSBudW1iZXIgb2YgY29waWVzLCBhbmQgKGl2KSBmb3IgYW55IHB1cnBvc2Ugd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBjb21tZXJjaWFsLCBhZHZlcnRpc2luZyBvciBwcm9tb3Rpb25hbCBwdXJwb3NlcyAodGhlICJMaWNlbnNlIikuIFRoZSBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgQ0MwIHdhcyBhcHBsaWVkIGJ5IEFmZmlybWVyIHRvIHRoZSBXb3JrLiBTaG91bGQgYW55IHBhcnQgb2YgdGhlIExpY2Vuc2UgZm9yIGFueSByZWFzb24gYmUganVkZ2VkIGxlZ2FsbHkgaW52YWxpZCBvciBpbmVmZmVjdGl2ZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgc3VjaCBwYXJ0aWFsIGludmFsaWRpdHkgb3IgaW5lZmZlY3RpdmVuZXNzIHNoYWxsIG5vdCBpbnZhbGlkYXRlIHRoZSByZW1haW5kZXIgb2YgdGhlIExpY2Vuc2UsIGFuZCBpbiBzdWNoIGNhc2UgQWZmaXJtZXIgaGVyZWJ5IGFmZmlybXMgdGhhdCBoZSBvciBzaGUgd2lsbCBub3QgKGkpIGV4ZXJjaXNlIGFueSBvZiBoaXMgb3IgaGVyIHJlbWFpbmluZyBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIGluIHRoZSBXb3JrIG9yIChpaSkgYXNzZXJ0IGFueSBhc3NvY2lhdGVkIGNsYWltcyBhbmQgY2F1c2VzIG9mIGFjdGlvbiB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIGluIGVpdGhlciBjYXNlIGNvbnRyYXJ5IHRvIEFmZmlybWVyYHMgZXhwcmVzcyBTdGF0ZW1lbnQgb2YgUHVycG9zZS4KKworNC4gTGltaXRhdGlvbnMgYW5kIERpc2NsYWltZXJzLgorCitObyB0cmFkZW1hcmsgb3IgcGF0ZW50IHJpZ2h0cyBoZWxkIGJ5IEFmZmlybWVyIGFyZSB3YWl2ZWQsIGFiYW5kb25lZCwgc3VycmVuZGVyZWQsIGxpY2Vuc2VkIG9yIG90aGVyd2lzZSBhZmZlY3RlZCBieSB0aGlzIGRvY3VtZW50LgorQWZmaXJtZXIgb2ZmZXJzIHRoZSBXb3JrIGFzLWlzIGFuZCBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgb3Igd2FycmFudGllcyBvZiBhbnkga2luZCBjb25jZXJuaW5nIHRoZSBXb3JrLCBleHByZXNzLCBpbXBsaWVkLCBzdGF0dXRvcnkgb3Igb3RoZXJ3aXNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHdhcnJhbnRpZXMgb2YgdGl0bGUsIG1lcmNoYW50YWJpbGl0eSwgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UsIG5vbiBpbmZyaW5nZW1lbnQsIG9yIHRoZSBhYnNlbmNlIG9mIGxhdGVudCBvciBvdGhlciBkZWZlY3RzLCBhY2N1cmFjeSwgb3IgdGhlIHByZXNlbnQgb3IgYWJzZW5jZSBvZiBlcnJvcnMsIHdoZXRoZXIgb3Igbm90IGRpc2NvdmVyYWJsZSwgYWxsIHRvIHRoZSBncmVhdGVzdCBleHRlbnQgcGVybWlzc2libGUgdW5kZXIgYXBwbGljYWJsZSBsYXcuCitBZmZpcm1lciBkaXNjbGFpbXMgcmVzcG9uc2liaWxpdHkgZm9yIGNsZWFyaW5nIHJpZ2h0cyBvZiBvdGhlciBwZXJzb25zIHRoYXQgbWF5IGFwcGx5IHRvIHRoZSBXb3JrIG9yIGFueSB1c2UgdGhlcmVvZiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgcGVyc29uYHMgQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cyBpbiB0aGUgV29yay4gRnVydGhlciwgQWZmaXJtZXIgZGlzY2xhaW1zIHJlc3BvbnNpYmlsaXR5IGZvciBvYnRhaW5pbmcgYW55IG5lY2Vzc2FyeSBjb25zZW50cywgcGVybWlzc2lvbnMgb3Igb3RoZXIgcmlnaHRzIHJlcXVpcmVkIGZvciBhbnkgdXNlIG9mIHRoZSBXb3JrLgorQWZmaXJtZXIgdW5kZXJzdGFuZHMgYW5kIGFja25vd2xlZGdlcyB0aGF0IENyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBkb2N1bWVudCBhbmQgaGFzIG5vIGR1dHkgb3Igb2JsaWdhdGlvbiB3aXRoIHJlc3BlY3QgdG8gdGhpcyBDQzAgb3IgdXNlIG9mIHRoZSBXb3JrLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NEREwtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRERMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDE5OGU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRERMLTEuMApAQCAtMCwwICsxLDEzMSBAQAorCitDT01NT04gREVWRUxPUE1FTlQgQU5EIERJU1RSSUJVVElPTiBMSUNFTlNFIChDRERMKQorVmVyc2lvbiAxLjAKKzEuIERlZmluaXRpb25zLgorCisxLjEuICYjODIyMDtDb250cmlidXRvciYjODIyMTsgbWVhbnMgZWFjaCBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMi4gJiM4MjIwO0NvbnRyaWJ1dG9yIFZlcnNpb24mIzgyMjE7IG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yIChpZiBhbnkpLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKzEuMy4gJiM4MjIwO0NvdmVyZWQgU29mdHdhcmUmIzgyMjE7IG1lYW5zIChhKSB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIG9yIChiKSBNb2RpZmljYXRpb25zLCBvciAoYykgdGhlIGNvbWJpbmF0aW9uIG9mIGZpbGVzIGNvbnRhaW5pbmcgT3JpZ2luYWwgU29mdHdhcmUgd2l0aCBmaWxlcyBjb250YWluaW5nIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKworMS40LiAmIzgyMjA7RXhlY3V0YWJsZSYjODIyMTsgbWVhbnMgdGhlIENvdmVyZWQgU29mdHdhcmUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKworMS41LiAmIzgyMjA7SW5pdGlhbCBEZXZlbG9wZXImIzgyMjE7IG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IGZpcnN0IG1ha2VzIE9yaWdpbmFsIFNvZnR3YXJlIGF2YWlsYWJsZSB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzEuNi4gJiM4MjIwO0xhcmdlciBXb3JrJiM4MjIxOyBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBTb2Z0d2FyZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS43LiAmIzgyMjA7TGljZW5zZSYjODIyMTsgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworMS44LiAmIzgyMjA7TGljZW5zYWJsZSYjODIyMTsgbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBoZXJlaW4uCisKKzEuOS4gJiM4MjIwO01vZGlmaWNhdGlvbnMmIzgyMjE7IG1lYW5zIHRoZSBTb3VyY2UgQ29kZSBhbmQgRXhlY3V0YWJsZSBmb3JtIG9mIGFueSBvZiB0aGUgZm9sbG93aW5nOgorCitBLiBBbnkgZmlsZSB0aGF0IHJlc3VsdHMgZnJvbSBhbiBhZGRpdGlvbiB0bywgZGVsZXRpb24gZnJvbSBvciBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIFNvZnR3YXJlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnM7CisKK0IuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb247IG9yCisKK0MuIEFueSBuZXcgZmlsZSB0aGF0IGlzIGNvbnRyaWJ1dGVkIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjEwLiAmIzgyMjA7T3JpZ2luYWwgU29mdHdhcmUmIzgyMjE7IG1lYW5zIHRoZSBTb3VyY2UgQ29kZSBhbmQgRXhlY3V0YWJsZSBmb3JtIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgdGhhdCBpcyBvcmlnaW5hbGx5IHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworMS4xMS4gJiM4MjIwO1BhdGVudCBDbGFpbXMmIzgyMjE7IG1lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZCBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLgorCisxLjEyLiAmIzgyMjA7U291cmNlIENvZGUmIzgyMjE7IG1lYW5zIChhKSB0aGUgY29tbW9uIGZvcm0gb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSBpbiB3aGljaCBtb2RpZmljYXRpb25zIGFyZSBtYWRlIGFuZCAoYikgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIGluIG9yIHdpdGggc3VjaCBjb2RlLgorCisxLjEzLiAmIzgyMjA7WW91JiM4MjIxOyAob3IgJiM4MjIwO1lvdXImIzgyMjE7KSBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICYjODIyMDtZb3UmIzgyMjE7IGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAmIzgyMjA7Y29udHJvbCYjODIyMTsgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIExpY2Vuc2UgR3JhbnRzLgorCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KKworQ29uZGl0aW9uZWQgdXBvbiBZb3VyIGNvbXBsaWFuY2Ugd2l0aCBTZWN0aW9uIDMuMSBiZWxvdyBhbmQgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZToKKworKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgU29mdHdhcmUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLCB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZyBvciBzZWxsaW5nIG9mIE9yaWdpbmFsIFNvZnR3YXJlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsIHNlbGwsIGFuZCBvZmZlciBmb3Igc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSAob3IgcG9ydGlvbnMgdGhlcmVvZikuCisKKyhjKSBUaGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjEoYSkgYW5kIChiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIEluaXRpYWwgRGV2ZWxvcGVyIGZpcnN0IGRpc3RyaWJ1dGVzIG9yIG90aGVyd2lzZSBtYWtlcyB0aGUgT3JpZ2luYWwgU29mdHdhcmUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogKDEpIGZvciBjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSwgb3IgKDIpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogKGkpIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCBvciAoaWkpIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBkZXZpY2VzLgorCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorCitDb25kaXRpb25lZCB1cG9uIFlvdXIgY29tcGxpYW5jZSB3aXRoIFNlY3Rpb24gMy4xIGJlbG93IGFuZCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZToKKworKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBDb250cmlidXRvciB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgU29mdHdhcmUgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUgYW5kL29yIGluIGNvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZjogKDEpIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKTsgYW5kICgyKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbikuCisKKyhjKSBUaGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IGRpc3RyaWJ1dGVzIG9yIG90aGVyd2lzZSBtYWtlcyB0aGUgTW9kaWZpY2F0aW9ucyBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eS4KKworKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMihiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogKDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247ICgyKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IChpKSB0aGlyZCBwYXJ0eSBtb2RpZmljYXRpb25zIG9mIENvbnRyaWJ1dG9yIFZlcnNpb24sIG9yIChpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciAoMykgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgQ292ZXJlZCBTb2Z0d2FyZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvci4KKworMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorCiszLjEuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KKworQW55IENvdmVyZWQgU29mdHdhcmUgdGhhdCBZb3UgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZSBhdmFpbGFibGUgaW4gRXhlY3V0YWJsZSBmb3JtIG11c3QgYWxzbyBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIGFuZCB0aGF0IFNvdXJjZSBDb2RlIGZvcm0gbXVzdCBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGZvcm0gb2YgdGhlIENvdmVyZWQgU29mdHdhcmUgWW91IGRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIG1ha2UgYXZhaWxhYmxlLiBZb3UgbXVzdCBpbmZvcm0gcmVjaXBpZW50cyBvZiBhbnkgc3VjaCBDb3ZlcmVkIFNvZnR3YXJlIGluIEV4ZWN1dGFibGUgZm9ybSBhcyB0byBob3cgdGhleSBjYW4gb2J0YWluIHN1Y2ggQ292ZXJlZCBTb2Z0d2FyZSBpbiBTb3VyY2UgQ29kZSBmb3JtIGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS4KKworMy4yLiBNb2RpZmljYXRpb25zLgorCitUaGUgTW9kaWZpY2F0aW9ucyB0aGF0IFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSByZXByZXNlbnQgdGhhdCBZb3UgYmVsaWV2ZSBZb3VyIE1vZGlmaWNhdGlvbnMgYXJlIFlvdXIgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIFlvdSBoYXZlIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCiszLjMuIFJlcXVpcmVkIE5vdGljZXMuCisKK1lvdSBtdXN0IGluY2x1ZGUgYSBub3RpY2UgaW4gZWFjaCBvZiBZb3VyIE1vZGlmaWNhdGlvbnMgdGhhdCBpZGVudGlmaWVzIFlvdSBhcyB0aGUgQ29udHJpYnV0b3Igb2YgdGhlIE1vZGlmaWNhdGlvbi4gWW91IG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueSBjb3B5cmlnaHQsIHBhdGVudCBvciB0cmFkZW1hcmsgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLCBvciBhbnkgbm90aWNlcyBvZiBsaWNlbnNpbmcgb3IgYW55IGRlc2NyaXB0aXZlIHRleHQgZ2l2aW5nIGF0dHJpYnV0aW9uIHRvIGFueSBDb250cmlidXRvciBvciB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuCisKKzMuNC4gQXBwbGljYXRpb24gb2YgQWRkaXRpb25hbCBUZXJtcy4KKworWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgQ292ZXJlZCBTb2Z0d2FyZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cyYjODIxNzsgcmlnaHRzIGhlcmV1bmRlci4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgU29mdHdhcmUuIEhvd2V2ZXIsIHlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworMy41LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KKworWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIGZvcm0gb2YgdGhlIENvdmVyZWQgU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB1bmRlciB0aGUgdGVybXMgb2YgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgZm9ybSBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQmIzgyMTc7cyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIGZvcm0gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGluIEV4ZWN1dGFibGUgZm9ybSB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlLCBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNi4gTGFyZ2VyIFdvcmtzLgorCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIFNvZnR3YXJlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBTb2Z0d2FyZS4KKworNC4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCisKKzQuMS4gTmV3IFZlcnNpb25zLgorCitTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGlzIHRoZSBpbml0aWFsIGxpY2Vuc2Ugc3Rld2FyZCBhbmQgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gRXhjZXB0IGFzIHByb3ZpZGVkIGluIFNlY3Rpb24gNC4zLCBubyBvbmUgb3RoZXIgdGhhbiB0aGUgbGljZW5zZSBzdGV3YXJkIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgTGljZW5zZS4KKworNC4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLgorCitZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UsIGRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIG1ha2UgdGhlIENvdmVyZWQgU29mdHdhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSB1bmRlciB3aGljaCBZb3Ugb3JpZ2luYWxseSByZWNlaXZlZCB0aGUgQ292ZXJlZCBTb2Z0d2FyZS4gSWYgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluY2x1ZGVzIGEgbm90aWNlIGluIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBwcm9oaWJpdGluZyBpdCBmcm9tIGJlaW5nIGRpc3RyaWJ1dGVkIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1bmRlciBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbXVzdCBkaXN0cmlidXRlIGFuZCBtYWtlIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgdW5kZXIgd2hpY2ggWW91IG9yaWdpbmFsbHkgcmVjZWl2ZWQgdGhlIENvdmVyZWQgU29mdHdhcmUuIE90aGVyd2lzZSwgWW91IG1heSBhbHNvIGNob29zZSB0byB1c2UsIGRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIG1ha2UgdGhlIENvdmVyZWQgU29mdHdhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSB0aGUgbGljZW5zZSBzdGV3YXJkLgorCis0LjMuIE1vZGlmaWVkIFZlcnNpb25zLgorCitXaGVuIFlvdSBhcmUgYW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIFlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBsaWNlbnNlIGZvciBZb3VyIE9yaWdpbmFsIFNvZnR3YXJlLCBZb3UgbWF5IGNyZWF0ZSBhbmQgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaWYgWW91OiAoYSkgcmVuYW1lIHRoZSBsaWNlbnNlIGFuZCByZW1vdmUgYW55IHJlZmVyZW5jZXMgdG8gdGhlIG5hbWUgb2YgdGhlIGxpY2Vuc2Ugc3Rld2FyZCAoZXhjZXB0IHRvIG5vdGUgdGhhdCB0aGUgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKTsgYW5kIChiKSBvdGhlcndpc2UgbWFrZSBpdCBjbGVhciB0aGF0IHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZS4KKworNS4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KKworQ09WRVJFRCBTT0ZUV0FSRSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gJiM4MjIwO0FTIElTJiM4MjIxOyBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIFNPRlRXQVJFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIFNPRlRXQVJFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgU09GVFdBUkUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgU09GVFdBUkUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKworNi4gVEVSTUlOQVRJT04uCisKKzYuMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKworNi4yLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSAoZXhjbHVkaW5nIGRlY2xhcmF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYSBDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSBZb3UgYXNzZXJ0IHN1Y2ggY2xhaW0gaXMgcmVmZXJyZWQgdG8gYXMgJiM4MjIwO1BhcnRpY2lwYW50JiM4MjIxOykgYWxsZWdpbmcgdGhhdCB0aGUgUGFydGljaXBhbnQgU29mdHdhcmUgKG1lYW5pbmcgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gd2hlcmUgdGhlIFBhcnRpY2lwYW50IGlzIGEgQ29udHJpYnV0b3Igb3IgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIHdoZXJlIHRoZSBQYXJ0aWNpcGFudCBpcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIpIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCwgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIChpZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaXMgbm90IHRoZSBQYXJ0aWNpcGFudCkgYW5kIGFsbCBDb250cmlidXRvcnMgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHkgYW5kIGF1dG9tYXRpY2FsbHkgYXQgdGhlIGV4cGlyYXRpb24gb2Ygc3VjaCA2MCBkYXkgbm90aWNlIHBlcmlvZCwgdW5sZXNzIGlmIHdpdGhpbiBzdWNoIDYwIGRheSBwZXJpb2QgWW91IHdpdGhkcmF3IFlvdXIgY2xhaW0gd2l0aCByZXNwZWN0IHRvIHRoZSBQYXJ0aWNpcGFudCBTb2Z0d2FyZSBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQgZWl0aGVyIHVuaWxhdGVyYWxseSBvciBwdXJzdWFudCB0byBhIHdyaXR0ZW4gYWdyZWVtZW50IHdpdGggUGFydGljaXBhbnQuCisKKzYuMy4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDYuMSBvciA2LjIgYWJvdmUsIGFsbCBlbmQgdXNlciBsaWNlbnNlcyB0aGF0IGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gKGV4Y2x1ZGluZyBsaWNlbnNlcyBncmFudGVkIHRvIFlvdSBieSBhbnkgZGlzdHJpYnV0b3IpIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzcuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgQU5ZIE9USEVSIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBTT0ZUV0FSRSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NUIFBST0ZJVFMsIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWSYjODIxNztTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzguIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuCisKK1RoZSBDb3ZlcmVkIFNvZnR3YXJlIGlzIGEgJiM4MjIwO2NvbW1lcmNpYWwgaXRlbSwmIzgyMjE7IGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiAmIzgyMjA7Y29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSYjODIyMTsgKGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGF0IDQ4IEMuRi5SLiAmIzE2NzsgMjUyLjIyNy03MDE0KGEpKDEpKSBhbmQgJiM4MjIwO2NvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiYjODIyMTsgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIFNvZnR3YXJlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4gVGhpcyBVLlMuIEdvdmVybm1lbnQgUmlnaHRzIGNsYXVzZSBpcyBpbiBsaWV1IG9mLCBhbmQgc3VwZXJzZWRlcywgYW55IG90aGVyIEZBUiwgREZBUiwgb3Igb3RoZXIgY2xhdXNlIG9yIHByb3Zpc2lvbiB0aGF0IGFkZHJlc3NlcyBHb3Zlcm5tZW50IHJpZ2h0cyBpbiBjb21wdXRlciBzb2Z0d2FyZSB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzkuIE1JU0NFTExBTkVPVVMuCisKK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhdyBvZiB0aGUganVyaXNkaWN0aW9uIHNwZWNpZmllZCBpbiBhIG5vdGljZSBjb250YWluZWQgd2l0aGluIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIHN1Y2gganVyaXNkaWN0aW9uJiM4MjE3O3MgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIEFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGNvdXJ0cyBsb2NhdGVkIGluIHRoZSBqdXJpc2RpY3Rpb24gYW5kIHZlbnVlIHNwZWNpZmllZCBpbiBhIG5vdGljZSBjb250YWluZWQgd2l0aGluIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5cyYjODIxNzsgZmVlcyBhbmQgZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLiBZb3UgYWdyZWUgdGhhdCBZb3UgYWxvbmUgYXJlIHJlc3BvbnNpYmxlIGZvciBjb21wbGlhbmNlIHdpdGggdGhlIFVuaXRlZCBTdGF0ZXMgZXhwb3J0IGFkbWluaXN0cmF0aW9uIHJlZ3VsYXRpb25zIChhbmQgdGhlIGV4cG9ydCBjb250cm9sIGxhd3MgYW5kIHJlZ3VsYXRpb24gb2YgYW55IG90aGVyIGNvdW50cmllcykgd2hlbiBZb3UgdXNlLCBkaXN0cmlidXRlIG9yIG90aGVyd2lzZSBtYWtlIGF2YWlsYWJsZSBhbnkgQ292ZXJlZCBTb2Z0d2FyZS4KKworMTAuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuCisKK0FzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMgcmVzcG9uc2libGUgZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nIGhlcmVpbiBpcyBpbnRlbmRlZCBvciBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRUNJTEwtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRUNJTEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMzE3NDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NFQ0lMTC0xLjAKQEAgLTAsMCArMSwyNDIgQEAKKworQ09OVFJBVCBERSBMSUNFTkNFIERFIExPR0lDSUVMIExJQlJFIENlQ0lMTAorCitBdmVydGlzc2VtZW50CisKK0NlIGNvbnRyYXQgZXN0IHVuZSBsaWNlbmNlIGRlIGxvZ2ljaWVsIGxpYnJlIGlzc3VlIGQmIzgyMTc7dW5lIGNvbmNlcnRhdGlvbiBlbnRyZSBzZXMgYXV0ZXVycyBhZmluIHF1ZSBsZSByZXNwZWN0IGRlIGRldXggZ3JhbmRzIHByaW5jaXBlcyBwciYjMjMzO3NpZGUgJiMyMjQ7IHNhIHImIzIzMztkYWN0aW9uOgorCitkJiM4MjE3O3VuZSBwYXJ0LCBzYSBjb25mb3JtaXQmIzIzMzsgYXUgZHJvaXQgZnJhbiYjMjMxO2FpcywgdGFudCBhdSByZWdhcmQgZHUgZHJvaXQgZGUgbGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBjaXZpbGUgcXVlIGR1IGRyb2l0IGRlIGxhIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZXQgZGUgbGEgcHJvdGVjdGlvbiBxdSYjODIxNztpbCBvZmZyZSBhdXggYXV0ZXVycyBldCB0aXR1bGFpcmVzIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHN1ciB1biBsb2dpY2llbC4KK2QmIzgyMTc7YXV0cmUgcGFydCwgbGUgcmVzcGVjdCBkZXMgcHJpbmNpcGVzIGRlIGRpZmZ1c2lvbiBkZXMgbG9naWNpZWxzIGxpYnJlczogYWNjJiMyMzI7cyBhdSBjb2RlIHNvdXJjZSwgZHJvaXRzICYjMjMzO3RlbmR1cyBjb25mJiMyMzM7ciYjMjMzO3MgYXV4IHV0aWxpc2F0ZXVycy4KK0xlcyBhdXRldXJzIGRlIGxhIGxpY2VuY2UgQ2VDSUxMMSBzb250OgorCitDb21taXNzYXJpYXQgJiMyMjQ7IGwmIzgyMTc7RW5lcmdpZSBBdG9taXF1ZSAmIzgyMTE7IENFQSwgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyBkZSBjYXJhY3QmIzIzMjtyZSBzY2llbnRpZmlxdWUgdGVjaG5pcXVlIGV0IGluZHVzdHJpZWwsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyAzMS0zMyBydWUgZGUgbGEgRiYjMjMzO2QmIzIzMztyYXRpb24sIDc1NzUyIFBBUklTIGNlZGV4IDE1LgorCitDZW50cmUgTmF0aW9uYWwgZGUgbGEgUmVjaGVyY2hlIFNjaWVudGlmaXF1ZSAmIzgyMTE7IENOUlMsICYjMjMzO3RhYmxpc3NlbWVudCBwdWJsaWMgJiMyMjQ7IGNhcmFjdCYjMjMyO3JlIHNjaWVudGlmaXF1ZSBldCB0ZWNobm9sb2dpcXVlLCBkb250IGxlIHNpJiMyMzI7Z2UgZXN0IHNpdHUmIzIzMzsgMyBydWUgTWljaGVsLUFuZ2UgNzU3OTQgUGFyaXMgY2VkZXggMTYuCisKK0luc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4gQXV0b21hdGlxdWUgJiM4MjExOyBJTlJJQSwgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlIGV0IHRlY2hub2xvZ2lxdWUsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyBEb21haW5lIGRlIFZvbHVjZWF1LCBSb2NxdWVuY291cnQsIEJQIDEwNSwgNzgxNTMgTGUgQ2hlc25heSBjZWRleC4KKworUFJFQU1CVUxFCisKK0NlIGNvbnRyYXQgZXN0IHVuZSBsaWNlbmNlIGRlIGxvZ2ljaWVsIGxpYnJlIGRvbnQgbGBvYmplY3RpZiBlc3QgZGUgY29uZiYjMjMzO3JlciBhdXggdXRpbGlzYXRldXJzIGxhIGxpYmVydCYjMjMzOyBkZSBtb2RpZmljYXRpb24gZXQgZGUgcmVkaXN0cmlidXRpb24gZHUgbG9naWNpZWwgciYjMjMzO2dpIHBhciBjZXR0ZSBsaWNlbmNlIGRhbnMgbGUgY2FkcmUgZGB1biBtb2QmIzIzMjtsZSBkZSBkaWZmdXNpb24gJiMxNzE7b3BlbiBzb3VyY2UmIzE4NzsuCisKK0xgZXhlcmNpY2UgZGUgY2VzIGxpYmVydCYjMjMzO3MgZXN0IGFzc29ydGkgZGUgY2VydGFpbnMgZGV2b2lycyAmIzIyNDsgbGEgY2hhcmdlIGRlcyB1dGlsaXNhdGV1cnMgYWZpbiBkZSBwciYjMjMzO3NlcnZlciBjZSBzdGF0dXQgYXUgY291cnMgZGVzIHJlZGlzdHJpYnV0aW9ucyB1bHQmIzIzMztyaWV1cmVzLgorCitMJiM4MjE3O2FjY2Vzc2liaWxpdCYjMjMzOyBhdSBjb2RlIHNvdXJjZSBldCBsZXMgZHJvaXRzIGRlIGNvcGllLCBkZSBtb2RpZmljYXRpb24gZXQgZGUgcmVkaXN0cmlidXRpb24gcXVpIGVuIGQmIzIzMztjb3VsZW50IG9udCBwb3VyIGNvbnRyZXBhcnRpZSBkZSBuJiM4MjE3O29mZnJpciBhdXggdXRpbGlzYXRldXJzIHF1JiM4MjE3O3VuZSBnYXJhbnRpZSBsaW1pdCYjMjMzO2UgZXQgZGUgbmUgZmFpcmUgcGVzZXIgc3VyIGwmIzgyMTc7YXV0ZXVyIGR1IGxvZ2ljaWVsLCBsZSB0aXR1bGFpcmUgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggZXQgbGVzIGNvbmMmIzIzMztkYW50cyBzdWNjZXNzaWZzIHF1JiM4MjE3O3VuZSByZXNwb25zYWJpbGl0JiMyMzM7IHJlc3RyZWludGUuCisKK0EgY2V0ICYjMjMzO2dhcmQgbCYjODIxNzthdHRlbnRpb24gZGUgbCYjODIxNzt1dGlsaXNhdGV1ciBlc3QgYXR0aXImIzIzMztlIHN1ciBsZXMgcmlzcXVlcyBhc3NvY2kmIzIzMztzIGF1IGNoYXJnZW1lbnQsICYjMjI0OyBsJiM4MjE3O3V0aWxpc2F0aW9uLCAmIzIyNDsgbGEgbW9kaWZpY2F0aW9uIGV0L291IGF1IGQmIzIzMzt2ZWxvcHBlbWVudCBldCAmIzIyNDsgbGEgcmVwcm9kdWN0aW9uIGR1IGxvZ2ljaWVsIHBhciBsJiM4MjE3O3V0aWxpc2F0ZXVyICYjMjMzO3RhbnQgZG9ubiYjMjMzOyBzYSBzcCYjMjMzO2NpZmljaXQmIzIzMzsgZGUgbG9naWNpZWwgbGlicmUsIHF1aSBwZXV0IGxlIHJlbmRyZSBjb21wbGV4ZSAmIzIyNDsgbWFuaXB1bGVyIGV0IHF1aSBsZSByJiMyMzM7c2VydmUgZG9uYyAmIzIyNDsgZGVzIGQmIzIzMzt2ZWxvcHBldXJzIGV0IGRlcyBwcm9mZXNzaW9ubmVscyBhdmVydGlzIHBvc3MmIzIzMztkYW50IGRlcyBjb25uYWlzc2FuY2VzIGluZm9ybWF0aXF1ZXMgYXBwcm9mb25kaWVzLiBMZXMgdXRpbGlzYXRldXJzIHNvbnQgZG9uYyBpbnZpdCYjMjMzO3MgJiMyMjQ7IGNoYXJnZXIgZXQgdGVzdGVyIGwmIzgyMTc7YWQmIzIzMztxdWF0aW9uIGR1IExvZ2ljaWVsICYjMjI0OyBsZXVycyBiZXNvaW5zIGRhbnMgZGVzIGNvbmRpdGlvbnMgcGVybWV0dGFudCBkYGFzc3VyZXIgbGEgcyYjMjMzO2N1cml0JiMyMzM7IGRlIGxldXJzIHN5c3QmIzIzMjttZXMgZXQgb3UgZGUgbGV1cnMgZG9ubiYjMjMzO2VzIGV0LCBwbHVzIGcmIzIzMztuJiMyMzM7cmFsZW1lbnQsICYjMjI0OyBsYHV0aWxpc2VyIGV0IGxgZXhwbG9pdGVyIGRhbnMgbGVzIG0mIzIzNDttZSBjb25kaXRpb25zIGRlIHMmIzIzMztjdXJpdCYjMjMzOy4gQ2UgY29udHJhdCBwZXV0ICYjMjM0O3RyZSByZXByb2R1aXQgZXQgZGlmZnVzJiMyMzM7IGxpYnJlbWVudCwgc291cyByJiMyMzM7c2VydmUgZGUgbGUgY29uc2VydmVyIGVuIGwmIzgyMTc7JiMyMzM7dGF0LCBzYW5zIGFqb3V0IG5pIHN1cHByZXNzaW9uIGRlIGNsYXVzZXMuCisKK0NlIGNvbnRyYXQgZXN0IHN1c2NlcHRpYmxlIGRlIHMmIzgyMTc7YXBwbGlxdWVyICYjMjI0OyB0b3V0IGxvZ2ljaWVsIGRvbnQgbGUgdGl0dWxhaXJlIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IGQmIzIzMztjaWRlIGRlIHNvdW1ldHRyZSBsJiM4MjE3O2V4cGxvaXRhdGlvbiBhdXggZGlzcG9zaXRpb25zIHF1JiM4MjE3O2lsIGNvbnRpZW50LgorCitBcnRpY2xlIDFlciAtIERFRklOSVRJT05TCisKK0RhbnMgY2UgY29udHJhdCwgbGVzIHRlcm1lcyBzdWl2YW50cywgbG9yc3F1JiM4MjE3O2lscyBzZXJvbnQgJiMyMzM7Y3JpdHMgYXZlYyB1bmUgbGV0dHJlIGNhcGl0YWxlLCBhdXJvbnQgbGEgc2lnbmlmaWNhdGlvbiBzdWl2YW50ZToKKworQ29udHJhdDogZCYjMjMzO3NpZ25lIGxlIHByJiMyMzM7c2VudCBjb250cmF0IGRlIGxpY2VuY2UsIHNlcyAmIzIzMzt2ZW50dWVsbGVzIHZlcnNpb25zIHBvc3QmIzIzMztyaWV1cmVzIGV0IGFubmV4ZXMuCisKK0xvZ2ljaWVsOiBkJiMyMzM7c2lnbmUgbGUgbG9naWNpZWwgc291cyBzYSBmb3JtZSBkZSBDb2RlIE9iamV0IGV0L291IGRlIENvZGUgU291cmNlIGV0IGxlIGNhcyAmIzIzMztjaCYjMjMzO2FudCBzYSBkb2N1bWVudGF0aW9uLCBkYW5zIGxldXIgJiMyMzM7dGF0IGF1IG1vbWVudCBkZSBsJiM4MjE3O2FjY2VwdGF0aW9uIGR1IENvbnRyYXQgcGFyIGxlIExpY2VuY2kmIzIzMzsuCisKK0xvZ2ljaWVsIEluaXRpYWw6IGQmIzIzMztzaWduZSBsZSBMb2dpY2llbCBzb3VzIHNhIGZvcm1lIGRlIENvZGUgU291cmNlIGV0IGRlIENvZGUgT2JqZXQgZXQgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50IHNhIGRvY3VtZW50YXRpb24sIGRhbnMgbGV1ciAmIzIzMzt0YXQgYXUgbW9tZW50IGRlIGxldXIgcHJlbWkmIzIzMjtyZSBkaWZmdXNpb24gc291cyBsZXMgdGVybWVzIGR1IENvbnRyYXQuCisKK0xvZ2ljaWVsIE1vZGlmaSYjMjMzOzogZCYjMjMzO3NpZ25lIGxlIExvZ2ljaWVsIG1vZGlmaSYjMjMzOyBwYXIgYXUgbW9pbnMgdW5lIENvbnRyaWJ1dGlvbi4KKworQ29kZSBTb3VyY2U6IGQmIzIzMztzaWduZSBsJiM4MjE3O2Vuc2VtYmxlIGRlcyBpbnN0cnVjdGlvbnMgZXQgZGVzIGxpZ25lcyBkZSBwcm9ncmFtbWUgZHUgTG9naWNpZWwgZXQgYXVxdWVsIGwmIzgyMTc7YWNjJiMyMzI7cyBlc3QgbiYjMjMzO2Nlc3NhaXJlIGVuIHZ1ZSBkZSBtb2RpZmllciBsZSBMb2dpY2llbC4KKworQ29kZSBPYmpldDogZCYjMjMzO3NpZ25lIGxlcyBmaWNoaWVycyBiaW5haXJlcyBpc3N1cyBkZSBsYSBjb21waWxhdGlvbiBkdSBDb2RlIFNvdXJjZS4KKworVGl0dWxhaXJlIDogZCYjMjMzO3NpZ25lIGxlIGQmIzIzMzt0ZW50ZXVyIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IGQmIzgyMTc7YXV0ZXVyIHN1ciBsZSBMb2dpY2llbCBJbml0aWFsLgorCitMaWNlbmNpJiMyMzM7KHMpOiBkJiMyMzM7c2lnbmUgbGUgb3UgbGVzIHV0aWxpc2F0ZXVyKHMpIGR1IExvZ2ljaWVsIGF5YW50IGFjY2VwdCYjMjMzOyBsZSBDb250cmF0LgorCitDb250cmlidXRldXI6IGQmIzIzMztzaWduZSBsZSBMaWNlbmNpJiMyMzM7IGF1dGV1ciBkJiM4MjE3O2F1IG1vaW5zIHVuZSBDb250cmlidXRpb24uCisKK0NvbmMmIzIzMztkYW50OiBkJiMyMzM7c2lnbmUgbGUgVGl0dWxhaXJlIG91IHRvdXRlIHBlcnNvbm5lIHBoeXNpcXVlIG91IG1vcmFsZSBkaXN0cmlidWFudCBsZSBMb2dpY2llbCBzb3VzIGxlIENvbnRyYXQuCisKK0NvbnRyaWJ1dGlvbnM6IGQmIzIzMztzaWduZSBsJiM4MjE3O2Vuc2VtYmxlIGRlcyBtb2RpZmljYXRpb25zLCBjb3JyZWN0aW9ucywgdHJhZHVjdGlvbnMsIGFkYXB0YXRpb25zIGV0L291IG5vdXZlbGxlcyBmb25jdGlvbm5hbGl0JiMyMzM7cyBpbnQmIzIzMztnciYjMjMzO2VzIGRhbnMgbGUgTG9naWNpZWwgcGFyIHRvdXQgQ29udHJpYnV0ZXVyLCBhaW5zaSBxdWUgbGVzIE1vZHVsZXMgU3RhdGlxdWVzLgorCitNb2R1bGU6IGQmIzIzMztzaWduZSB1biBlbnNlbWJsZSBkZSBmaWNoaWVycyBzb3VyY2VzIHkgY29tcHJpcyBsZXVyIGRvY3VtZW50YXRpb24gcXVpLCB1bmUgZm9pcyBjb21waWwmIzIzMzsgc291cyBmb3JtZSBleCYjMjMzO2N1dGFibGUsIHBlcm1ldCBkZSByJiMyMzM7YWxpc2VyIGRlcyBmb25jdGlvbm5hbGl0JiMyMzM7cyBvdSBzZXJ2aWNlcyBzdXBwbCYjMjMzO21lbnRhaXJlcyAmIzIyNDsgY2V1eCBmb3VybmlzIHBhciBsZSBMb2dpY2llbC4KKworTW9kdWxlIER5bmFtaXF1ZTogZCYjMjMzO3NpZ25lIHRvdXQgTW9kdWxlLCBjciYjMjMzOyYjMjMzOyBwYXIgbGUgQ29udHJpYnV0ZXVyLCBpbmQmIzIzMztwZW5kYW50IGR1IExvZ2ljaWVsLCB0ZWwgcXVlIGNlIE1vZHVsZSBldCBsZSBMb2dpY2llbCBzb250IHNvdXMgZm9ybWUgZGUgZGV1eCBleCYjMjMzO2N1dGFibGVzIGluZCYjMjMzO3BlbmRhbnRzIHF1aSBzJiM4MjE3O2V4JiMyMzM7Y3V0ZW50IGRhbnMgdW4gZXNwYWNlIGQmIzgyMTc7YWRyZXNzYWdlIGluZCYjMjMzO3BlbmRhbnQsIGwmIzgyMTc7dW4gYXBwZWxhbnQgbCYjODIxNzthdXRyZSBhdSBtb21lbnQgZGUgbGV1ciBleCYjMjMzO2N1dGlvbi4KKworTW9kdWxlIFN0YXRpcXVlOiBkJiMyMzM7c2lnbmUgdG91dCBNb2R1bGUgY3ImIzIzMzsmIzIzMzsgcGFyIGxlIENvbnRyaWJ1dGV1ciBldCBsaSYjMjMzOyBhdSBMb2dpY2llbCBwYXIgdW4gbGllbiBzdGF0aXF1ZSByZW5kYW50IGxldXIgY29kZSBvYmpldCBkJiMyMzM7cGVuZGFudCBsYHVuIGRlIGxgYXV0cmUuIENlIE1vZHVsZSBldCBsZSBMb2dpY2llbCBhdXF1ZWwgaWwgZXN0IGxpJiMyMzM7LCBzb250IHJlZ3JvdXAmIzIzMztzIGVuIHVuIHNldWwgZXgmIzIzMztjdXRhYmxlLgorCitQYXJ0aWVzOiBkJiMyMzM7c2lnbmUgY29sbGVjdGl2ZW1lbnQgbGUgTGljZW5jaSYjMjMzOyBldCBsZSBDb25jJiMyMzM7ZGFudC4KKworQ2VzIHRlcm1lcyBzJiM4MjE3O2VudGVuZGVudCBhdSBzaW5ndWxpZXIgY29tbWUgYXUgcGx1cmllbC4KKworQXJ0aWNsZSAyIC0gT0JKRVQKKworTGUgQ29udHJhdCBhIHBvdXIgb2JqZXQgbGEgY29uY2Vzc2lvbiBwYXIgbGUgQ29uYyYjMjMzO2RhbnQgYXUgTGljZW5jaSYjMjMzOyBkJiM4MjE3O3VuZSBMaWNlbmNlIG5vbiBleGNsdXNpdmUsIHRyYW5zZiYjMjMzO3JhYmxlIGV0IG1vbmRpYWxlIGR1IExvZ2ljaWVsIHRlbGxlIHF1ZSBkJiMyMzM7ZmluaWUgY2ktYXByJiMyMzI7cyAmIzIyNDsgbGBhcnRpY2xlIDUgcG91ciB0b3V0ZSBsYSBkdXImIzIzMztlIGRlIHByb3RlY3Rpb24gZGVzIGRyb2l0cyBwb3J0YW50IHN1ciBjZSBMb2dpY2llbC4KKworQXJ0aWNsZSAzIC0gQUNDRVBUQVRJT04KKworMy4xLiBMJiM4MjE3O2FjY2VwdGF0aW9uIHBhciBsZSBMaWNlbmNpJiMyMzM7IGRlcyB0ZXJtZXMgZHUgQ29udHJhdCBlc3QgciYjMjMzO3B1dCYjMjMzO2UgYWNxdWlzZSBkdSBmYWl0IGR1IHByZW1pZXIgZGVzIGZhaXRzIHN1aXZhbnRzOgorCisoaSkgbGUgY2hhcmdlbWVudCBkdSBMb2dpY2llbCBwYXIgdG91dCBtb3llbiBub3RhbW1lbnQgcGFyIHQmIzIzMztsJiMyMzM7Y2hhcmdlbWVudCAmIzIyNDsgcGFydGlyIGQmIzgyMTc7dW4gc2VydmV1ciBkaXN0YW50IG91IHBhciBjaGFyZ2VtZW50ICYjMjI0OyBwYXJ0aXIgZCYjODIxNzt1biBzdXBwb3J0IHBoeXNpcXVlOworKGlpKSBsZSBwcmVtaWVyIGV4ZXJjaWNlIHBhciBsZSBMaWNlbmNpJiMyMzM7IGRlIGwmIzgyMTc7dW4gcXVlbGNvbnF1ZSBkZXMgZHJvaXRzIGNvbmMmIzIzMztkJiMyMzM7cyBwYXIgbGUgQ29udHJhdC4KKzMuMi4gVW4gZXhlbXBsYWlyZSBkdSBDb250cmF0LCBjb250ZW5hbnQgbm90YW1tZW50IHVuIGF2ZXJ0aXNzZW1lbnQgcmVsYXRpZiBhdXggc3AmIzIzMztjaWZpY2l0JiMyMzM7cyBkdSBMb2dpY2llbCwgJiMyMjQ7IGxhIHJlc3RyaWN0aW9uIGRlIGdhcmFudGllIGV0ICYjMjI0OyBsYSBsaW1pdGF0aW9uICYjMjI0OyB1biB1c2FnZSBwYXIgZGVzIHV0aWxpc2F0ZXVycyBleHAmIzIzMztyaW1lbnQmIzIzMztzIGEgJiMyMzM7dCYjMjMzOyBtaXMgJiMyMjQ7IGRpc3Bvc2l0aW9uIGR1IExpY2VuY2kmIzIzMzsgcHImIzIzMzthbGFibGVtZW50ICYjMjI0OyBzb24gYWNjZXB0YXRpb24gdGVsbGUgcXVlIGQmIzIzMztmaW5pZSAmIzIyNDsgbGBhcnRpY2xlIDMuMSBjaSBkZXNzdXMgZXQgbGUgTGljZW5jaSYjMjMzOyByZWNvbm5hJiMyMzg7dCBlbiBhdm9pciBwcmlzIGNvbm5haXNzYW5jZXMuCisKK0FydGljbGUgNCAtIEVOVFJFRSBFTiBWSUdVRVVSIEVUIERVUkVFCisKKzQuMS5FTlRSRUUgRU4gVklHVUVVUgorCitMZSBDb250cmF0IGVudHJlIGVuIHZpZ3VldXIgJiMyMjQ7IGxhIGRhdGUgZGUgc29uIGFjY2VwdGF0aW9uIHBhciBsZSBMaWNlbmNpJiMyMzM7IHRlbGxlIHF1ZSBkJiMyMzM7ZmluaWUgZW4gMy4xLgorCis0LjIuIERVUkVFCisKK0xlIENvbnRyYXQgcHJvZHVpcmEgc2VzIGVmZmV0cyBwZW5kYW50IHRvdXRlIGxhIGR1ciYjMjMzO2UgbCYjMjMzO2dhbGUgZGUgcHJvdGVjdGlvbiBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBwb3J0YW50IHN1ciBsZSBMb2dpY2llbC4KKworQXJ0aWNsZSA1IC0gRVRFTkRVRSBERVMgRFJPSVRTIENPTkNFREVTCisKK0xlIENvbmMmIzIzMztkYW50IGNvbmMmIzIzMjtkZSBhdSBMaWNlbmNpJiMyMzM7LCBxdWkgYWNjZXB0ZSwgbGVzIGRyb2l0cyBzdWl2YW50cyBzdXIgbGUgTG9naWNpZWwgcG91ciB0b3V0ZXMgZGVzdGluYXRpb25zIGV0IHBvdXIgbGEgZHVyJiMyMzM7ZSBkdSBDb250cmF0IGRhbnMgbGVzIGNvbmRpdGlvbnMgY2ktYXByJiMyMzI7cyBkJiMyMzM7dGFpbGwmIzIzMztlcy4KKworUGFyIGFpbGxldXJzLCBsZSBDb25jJiMyMzM7ZGFudCBjb25jJiMyMzI7ZGUgYXUgTGljZW5jaSYjMjMzOyAmIzIyNDsgdGl0cmUgZ3JhY2lldXggbGVzIGRyb2l0cyBkJiM4MjE3O2V4cGxvaXRhdGlvbiBkdSBvdSBkZXMgYnJldmV0cyBxdSYjODIxNztpbCBkJiMyMzM7dGllbnQgc3VyIHRvdXQgb3UgcGFydGllIGRlcyBpbnZlbnRpb25zIGltcGwmIzIzMzttZW50JiMyMzM7ZXMgZGFucyBsZSBMb2dpY2llbC4KKworNS4xLiBEUk9JVFMgRCYjODIxNztVVElMSVNBVElPTgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyB1dGlsaXNlciBsZSBMb2dpY2llbCwgc2FucyByZXN0cmljdGlvbiBxdWFudCBhdXggZG9tYWluZXMgZCYjODIxNzthcHBsaWNhdGlvbiwgJiMyMzM7dGFudCBjaS1hcHImIzIzMjtzIHByJiMyMzM7Y2lzJiMyMzM7IHF1ZSBjZWxhIGNvbXBvcnRlOgorCitsYSByZXByb2R1Y3Rpb24gcGVybWFuZW50ZSBvdSBwcm92aXNvaXJlIGR1IExvZ2ljaWVsIGVuIHRvdXQgb3UgcGFydGllIHBhciB0b3V0IG1veWVuIGV0IHNvdXMgdG91dGUgZm9ybWUuCisKK2xlIGNoYXJnZW1lbnQsIGwmIzgyMTc7YWZmaWNoYWdlLCBsJiM4MjE3O2V4JiMyMzM7Y3V0aW9uLCBvdSBsZSBzdG9ja2FnZSBkdSBMb2dpY2llbCBzdXIgdG91dCBzdXBwb3J0LgorCitsYSBwb3NzaWJpbGl0JiMyMzM7IGQmIzgyMTc7ZW4gb2JzZXJ2ZXIsIGQmIzgyMTc7ZW4gJiMyMzM7dHVkaWVyLCBvdSBkJiM4MjE3O2VuIHRlc3RlciBsZSBmb25jdGlvbm5lbWVudCBhZmluIGRlIGQmIzIzMzt0ZXJtaW5lciBsZXMgaWQmIzIzMztlcyBldCBwcmluY2lwZXMgcXVpIHNvbnQgJiMyMjQ7IGxhIGJhc2UgZGUgbiYjODIxNztpbXBvcnRlIHF1ZWwgJiMyMzM7bCYjMjMzO21lbnQgZGUgY2UgTG9naWNpZWw7IGV0IGNlY2ksIGxvcnNxdWUgbGUgTGljZW5jaSYjMjMzOyBlZmZlY3R1ZSB0b3V0ZSBvcCYjMjMzO3JhdGlvbiBkZSBjaGFyZ2VtZW50LCBkJiM4MjE3O2FmZmljaGFnZSwgZCYjODIxNztleCYjMjMzO2N1dGlvbiwgZGUgdHJhbnNtaXNzaW9uIG91IGRlIHN0b2NrYWdlIGR1IExvZ2ljaWVsIHF1JiM4MjE3O2lsIGVzdCBlbiBkcm9pdCBkJiM4MjE3O2VmZmVjdHVlciBlbiB2ZXJ0dSBkdSBDb250cmF0LgorCis1LjIuIERST0lUIEQmIzgyMTc7QVBQT1JURVIgREVTIENPTlRSSUJVVElPTlMKKworTGUgZHJvaXQgZCYjODIxNzthcHBvcnRlciBkZXMgQ29udHJpYnV0aW9ucyBjb21wb3J0ZSBsZSBkcm9pdCBkZSB0cmFkdWlyZSwgZCYjODIxNzthZGFwdGVyLCBkJiM4MjE3O2FycmFuZ2VyIG91IGQmIzgyMTc7YXBwb3J0ZXIgdG91dGUgYXV0cmUgbW9kaWZpY2F0aW9uIGR1IExvZ2ljaWVsIGV0IGxlIGRyb2l0IGRlIHJlcHJvZHVpcmUgbGUgTG9naWNpZWwgZW4gciYjMjMzO3N1bHRhbnQuCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IGFwcG9ydGVyIHRvdXRlIENvbnRyaWJ1dGlvbiBhdSBMb2dpY2llbCBzb3VzIHImIzIzMztzZXJ2ZSBkZSBtZW50aW9ubmVyLCBkZSBmYSYjMjMxO29uIGV4cGxpY2l0ZSwgc29uIG5vbSBlbiB0YW50IHF1JiM4MjE3O2F1dGV1ciBkZSBjZXR0ZSBDb250cmlidXRpb24gZXQgbGEgZGF0ZSBkZSBjciYjMjMzO2F0aW9uIGRlIGNlbGxlLWNpLgorCis1LjMuIERST0lUUyBERSBESVNUUklCVVRJT04gRVQgREUgRElGRlVTSU9OCisKK0xlIGRyb2l0IGRlIGRpc3RyaWJ1dGlvbiBldCBkZSBkaWZmdXNpb24gY29tcG9ydGUgbm90YW1tZW50IGxlIGRyb2l0IGRlIHRyYW5zbWV0dHJlIGV0IGRlIGNvbW11bmlxdWVyIGxlIExvZ2ljaWVsIGF1IHB1YmxpYyBzdXIgdG91dCBzdXBwb3J0IGV0IHBhciB0b3V0IG1veWVuIGFpbnNpIHF1ZSBsZSBkcm9pdCBkZSBtZXR0cmUgc3VyIGxlIG1hcmNoJiMyMzM7ICYjMjI0OyB0aXRyZSBvbiYjMjMzO3JldXggb3UgZ3JhdHVpdCwgdW4gb3UgZGVzIGV4ZW1wbGFpcmVzIGR1IExvZ2ljaWVsIHBhciB0b3V0IHByb2MmIzIzMztkJiMyMzM7LgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyByZWRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBkdSBMb2dpY2llbCwgbW9kaWZpJiMyMzM7IG91IG5vbiwgJiMyMjQ7IGRlcyB0aWVycyBkYW5zIGxlcyBjb25kaXRpb25zIGNpLWFwciYjMjMyO3MgZCYjMjMzO3RhaWxsJiMyMzM7ZXMuCisKKzUuMy4xLiBSRURJU1RSSUJVVElPTiBEVSBMT0dJQ0lFTCBTQU5TIE1PRElGSUNBVElPTgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyByZWRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBjb25mb3JtZXMgZHUgTG9naWNpZWwsIHNvdXMgZm9ybWUgZGUgQ29kZSBTb3VyY2Ugb3UgZGUgQ29kZSBPYmpldCwgJiMyMjQ7IGNvbmRpdGlvbiBxdWUgY2V0dGUgcmVkaXN0cmlidXRpb24gcmVzcGVjdGUgbGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IGRhbnMgbGV1ciB0b3RhbGl0JiMyMzM7IGV0IHNvaXQgYWNjb21wYWduJiMyMzM7ZToKKworZCYjODIxNzt1biBleGVtcGxhaXJlIGR1IENvbnRyYXQsCisKK2QmIzgyMTc7dW4gYXZlcnRpc3NlbWVudCByZWxhdGlmICYjMjI0OyBsYSByZXN0cmljdGlvbiBkZSBnYXJhbnRpZSBldCBkZSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IHRlbGxlIHF1ZSBwciYjMjMzO3Z1ZSBhdXggYXJ0aWNsZXMgOCBldCA5LAorCitldCBxdWUsIGRhbnMgbGUgY2FzIG8mIzI0OTsgc2V1bCBsZSBDb2RlIE9iamV0IGR1IExvZ2ljaWVsIGVzdCByZWRpc3RyaWJ1JiMyMzM7LCBsZSBMaWNlbmNpJiMyMzM7IHBlcm1ldHRlIGF1eCBmdXR1cnMgTGljZW5jaSYjMjMzO3MgZCYjODIxNzthY2MmIzIzMztkZXIgZmFjaWxlbWVudCBhdSBDb2RlIFNvdXJjZSBjb21wbGV0IGR1IExvZ2ljaWVsIGVuIGluZGlxdWFudCBsZXMgbW9kYWxpdCYjMjMzO3MgZCYjODIxNzthY2MmIzIzMjtzLCAmIzIzMzt0YW50IGVudGVuZHUgcXVlIGxlIGNvJiMyNTE7dCBhZGRpdGlvbm5lbCBkJiM4MjE3O2FjcXVpc2l0aW9uIGR1IENvZGUgU291cmNlIG5lIGRldnJhIHBhcyBleGMmIzIzMztkZXIgbGUgc2ltcGxlIGNvJiMyNTE7dCBkZSB0cmFuc2ZlcnQgZGVzIGRvbm4mIzIzMztlcy4KKworNS4zLjIuIFJFRElTVFJJQlVUSU9OIERVIExPR0lDSUVMIE1PRElGSUUKKworTG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGFwcG9ydGUgdW5lIENvbnRyaWJ1dGlvbiBhdSBMb2dpY2llbCwgbGVzIGNvbmRpdGlvbnMgZGUgcmVkaXN0cmlidXRpb24gZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IHNvbnQgYWxvcnMgc291bWlzZXMgJiMyMjQ7IGwmIzgyMTc7aW50JiMyMzM7Z3JhbGl0JiMyMzM7IGRlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdC4KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgcmVkaXN0cmlidWVyIGxlIExvZ2ljaWVsIE1vZGlmaSYjMjMzOywgc291cyBmb3JtZSBkZSBDb2RlIFNvdXJjZSBvdSBkZSBDb2RlIE9iamV0LCAmIzIyNDsgY29uZGl0aW9uIHF1ZSBjZXR0ZSByZWRpc3RyaWJ1dGlvbiByZXNwZWN0ZSBsZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgZGFucyBsZXVyIHRvdGFsaXQmIzIzMzsgZXQgc29pdCBhY2NvbXBhZ24mIzIzMztlOgorCitkJiM4MjE3O3VuIGV4ZW1wbGFpcmUgZHUgQ29udHJhdCwKKworZCYjODIxNzt1biBhdmVydGlzc2VtZW50IHJlbGF0aWYgJiMyMjQ7IGxhIHJlc3RyaWN0aW9uIGRlIGdhcmFudGllIGV0IGRlIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgY29uYyYjMjMzO2RhbnQgdGVsbGUgcXVlIHByJiMyMzM7dnVlIGF1eCBhcnRpY2xlcyA4IGV0IDksCisKK2V0IHF1ZSwgZGFucyBsZSBjYXMgbyYjMjQ5OyBzZXVsIGxlIENvZGUgT2JqZXQgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGVzdCByZWRpc3RyaWJ1JiMyMzM7LCBsZSBMaWNlbmNpJiMyMzM7IHBlcm1ldHRlIGF1eCBmdXR1cnMgTGljZW5jaSYjMjMzO3MgZCYjODIxNzthY2MmIzIzMztkZXIgZmFjaWxlbWVudCBhdSBDb2RlIFNvdXJjZSBjb21wbGV0IGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBlbiBpbmRpcXVhbnQgbGVzIG1vZGFsaXQmIzIzMztzIGQmIzgyMTc7YWNjJiMyMzI7cywgJiMyMzM7dGFudCBlbnRlbmR1IHF1ZSBsZSBjbyYjMjUxO3QgYWRkaXRpb25uZWwgZCYjODIxNzthY3F1aXNpdGlvbiBkdSBDb2RlIFNvdXJjZSBuZSBkZXZyYSBwYXMgZXhjJiMyMzM7ZGVyIGxlIHNpbXBsZSBjbyYjMjUxO3QgZGUgdHJhbnNmZXJ0IGRlcyBkb25uJiMyMzM7ZXMuCisKKzUuMy4zLiBSRURJU1RSSUJVVElPTiBERVMgTU9EVUxFUyBEWU5BTUlRVUVTCisKK0xvcnNxdWUgbGUgTGljZW5jaSYjMjMzOyBhIGQmIzIzMzt2ZWxvcHAmIzIzMzsgdW4gTW9kdWxlIER5bmFtaXF1ZSBsZXMgY29uZGl0aW9ucyBkdSBDb250cmF0IG5lIHMmIzgyMTc7YXBwbGlxdWVudCBwYXMgJiMyMjQ7IGNlIE1vZHVsZSBEeW5hbWlxdWUsIHF1aSBwZXV0ICYjMjM0O3RyZSBkaXN0cmlidSYjMjMzOyBzb3VzIHVuIGNvbnRyYXQgZGUgbGljZW5jZSBkaWZmJiMyMzM7cmVudC4KKworNS4zLjQuIENPTVBBVElCSUxJVEUgQVZFQyBMQSBMSUNFTkNFIEdQTAorCitEYW5zIGxlIGNhcyBvJiMyNDk7IGxlIExvZ2ljaWVsLCBNb2RpZmkmIzIzMzsgb3Ugbm9uLCBlc3QgaW50JiMyMzM7Z3ImIzIzMzsgJiMyMjQ7IHVuIGNvZGUgc291bWlzIGF1eCBkaXNwb3NpdGlvbnMgZGUgbGEgbGljZW5jZSBHUEwsIGxlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IHJlZGlzdHJpYnVlciBsJiM4MjE3O2Vuc2VtYmxlIHNvdXMgbGEgbGljZW5jZSBHUEwuCisKK0RhbnMgbGUgY2FzIG8mIzI0OTsgbGUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGludCYjMjMyO2dyZSB1biBjb2RlIHNvdW1pcyBhdXggZGlzcG9zaXRpb25zIGRlIGxhIGxpY2VuY2UgR1BMLCBsZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyByZWRpc3RyaWJ1ZXIgbGUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IHNvdXMgbGEgbGljZW5jZSBHUEwuCisKK0FydGljbGUgNiAtIFBST1BSSUVURSBJTlRFTExFQ1RVRUxMRQorCis2LjEuIFNVUiBMRSBMT0dJQ0lFTCBJTklUSUFMCisKK0xlIFRpdHVsYWlyZSBlc3QgZCYjMjMzO3RlbnRldXIgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggc3VyIGxlIExvZ2ljaWVsIEluaXRpYWwuIFRvdXRlIHV0aWxpc2F0aW9uIGR1IExvZ2ljaWVsIEluaXRpYWwgZXN0IHNvdW1pc2UgYXUgcmVzcGVjdCBkZXMgY29uZGl0aW9ucyBkYW5zIGxlc3F1ZWxsZXMgbGUgVGl0dWxhaXJlIGEgY2hvaXNpIGRlIGRpZmZ1c2VyIHNvbiAmIzMzOTt1dnJlIGV0IG51bCBhdXRyZSBuJiM4MjE3O2EgbGEgZmFjdWx0JiMyMzM7IGRlIG1vZGlmaWVyIGxlcyBjb25kaXRpb25zIGRlIGRpZmZ1c2lvbiBkZSBjZSBMb2dpY2llbCBJbml0aWFsLgorCitMZSBUaXR1bGFpcmUgc2BlbmdhZ2UgJiMyMjQ7IG1haW50ZW5pciBsYSBkaWZmdXNpb24gZHUgTG9naWNpZWwgaW5pdGlhbCBzb3VzIGxlcyBjb25kaXRpb25zIGR1IENvbnRyYXQgZXQgY2UsIHBvdXIgbGEgZHVyJiMyMzM7ZSB2aXMmIzIzMztlICYjMjI0OyBsYGFydGljbGUgNC4yLgorCis2LjIuIFNVUiBMRVMgQ09OVFJJQlVUSU9OUworCitMZXMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgc3VyIGxlcyBDb250cmlidXRpb25zIHNvbnQgYXR0YWNoJiMyMzM7cyBhdSB0aXR1bGFpcmUgZGUgZHJvaXRzIHBhdHJpbW9uaWF1eCBkJiMyMzM7c2lnbiYjMjMzOyBwYXIgbGEgbCYjMjMzO2dpc2xhdGlvbiBhcHBsaWNhYmxlLgorCis2LjMuIFNVUiBMRVMgTU9EVUxFUyBEWU5BTUlRVUVTCisKK0xlIExpY2VuY2kmIzIzMzsgYXlhbnQgZCYjMjMzO3ZlbG9wcCYjMjMzOyB1biBNb2R1bGUgRHluYW1pcXVlIGVzdCB0aXR1bGFpcmUgZGVzIGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIHN1ciBjZSBNb2R1bGUgRHluYW1pcXVlIGV0IHJlc3RlIGxpYnJlIGR1IGNob2l4IGR1IGNvbnRyYXQgciYjMjMzO2dpc3NhbnQgc2EgZGlmZnVzaW9uLgorCis2LjQuIERJU1BPU0lUSU9OUyBDT01NVU5FUworCis2LjQuMS4gTGUgTGljZW5jaSYjMjMzOyBzJiM4MjE3O2VuZ2FnZSBleHByZXNzJiMyMzM7bWVudDoKKworJiMyMjQ7IG5lIHBhcyBzdXBwcmltZXIgb3UgbW9kaWZpZXIgZGUgcXVlbHF1ZSBtYW5pJiMyMzI7cmUgcXVlIGNlIHNvaXQgbGVzIG1lbnRpb25zIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgYXBwb3MmIzIzMztlcyBzdXIgbGUgTG9naWNpZWw7CisKKyYjMjI0OyByZXByb2R1aXJlICYjMjI0OyBsJiM4MjE3O2lkZW50aXF1ZSBsZXNkaXRlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIHN1ciBsZXMgY29waWVzIGR1IExvZ2ljaWVsLgorCis2LjQuMi4gTGUgTGljZW5jaSYjMjMzOyBzJiM4MjE3O2VuZ2FnZSAmIzIyNDsgbmUgcGFzIHBvcnRlciBhdHRlaW50ZSwgZGlyZWN0ZW1lbnQgb3UgaW5kaXJlY3RlbWVudCwgYXV4IGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGR1IFRpdHVsYWlyZSBldC9vdSBkZXMgQ29udHJpYnV0ZXVycyBldCAmIzIyNDsgcHJlbmRyZSwgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50LCAmIzIyNDsgbCYjODIxNzsmIzIzMztnYXJkIGRlIHNvbiBwZXJzb25uZWwgdG91dGVzIGxlcyBtZXN1cmVzIG4mIzIzMztjZXNzYWlyZXMgcG91ciBhc3N1cmVyIGxlIHJlc3BlY3QgZGVzIGRpdHMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZHUgVGl0dWxhaXJlIGV0L291IGRlcyBDb250cmlidXRldXJzLgorCitBcnRpY2xlIDcgLSBTRVJWSUNFUyBBU1NPQ0lFUworCis3LjEuIExlIENvbnRyYXQgbiYjODIxNztvYmxpZ2UgZW4gYXVjdW4gY2FzIGxlIENvbmMmIzIzMztkYW50ICYjMjI0OyBsYSByJiMyMzM7YWxpc2F0aW9uIGRlIHByZXN0YXRpb25zIGQmIzgyMTc7YXNzaXN0YW5jZSB0ZWNobmlxdWUgb3UgZGUgbWFpbnRlbmFuY2UgZHUgTG9naWNpZWwuCisKK0NlcGVuZGFudCBsZSBDb25jJiMyMzM7ZGFudCByZXN0ZSBsaWJyZSBkZSBwcm9wb3NlciBjZSB0eXBlIGRlIHNlcnZpY2VzLiBMZXMgdGVybWVzIGV0IGNvbmRpdGlvbnMgZCYjODIxNzt1bmUgdGVsbGUgYXNzaXN0YW5jZSB0ZWNobmlxdWUgZXQvb3UgZCYjODIxNzt1bmUgdGVsbGUgbWFpbnRlbmFuY2Ugc2Vyb250IGFsb3JzIGQmIzIzMzt0ZXJtaW4mIzIzMztzIGRhbnMgdW4gYWN0ZSBzJiMyMzM7cGFyJiMyMzM7LiBDZXMgYWN0ZXMgZGUgbWFpbnRlbmFuY2UgZXQvb3UgYXNzaXN0YW5jZSB0ZWNobmlxdWUgbiYjODIxNztlbmdhZ2Vyb250IHF1ZSBsYSBzZXVsZSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IHF1aSBsZXMgcHJvcG9zZS4KKworNy4yLiBEZSBtJiMyMzQ7bWUsIHRvdXQgQ29uYyYjMjMzO2RhbnQgZXN0IGxpYnJlIGRlIHByb3Bvc2VyLCBzb3VzIHNhIHNldWxlIHJlc3BvbnNhYmlsaXQmIzIzMzssICYjMjI0OyBzZXMgbGljZW5jaSYjMjMzO3MgdW5lIGdhcmFudGllLCBxdWkgbiYjODIxNztlbmdhZ2VyYSBxdWUgbHVpLCBsb3JzIGRlIGxhIHJlZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsIGV0L291IGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBldCBjZSwgZGFucyBsZXMgY29uZGl0aW9ucyBxdSYjODIxNztpbCBzb3VoYWl0ZS4gQ2V0dGUgZ2FyYW50aWUgZXQgbGVzIG1vZGFsaXQmIzIzMztzIGZpbmFuY2kmIzIzMjtyZXMgZGUgc29uIGFwcGxpY2F0aW9uIGZlcm9udCBsJiM4MjE3O29iamV0IGQmIzgyMTc7dW4gYWN0ZSBzJiMyMzM7cGFyJiMyMzM7IGVudHJlIGxlIENvbmMmIzIzMztkYW50IGV0IGxlIExpY2VuY2kmIzIzMzsuCisKK0FydGljbGUgOCAtIFJFU1BPTlNBQklMSVRFCisKKzguMS4gU291cyByJiMyMzM7c2VydmUgZGVzIGRpc3Bvc2l0aW9ucyBkZSBsJiM4MjE3O2FydGljbGUgOC4yLCBzaSBsZSBDb25jJiMyMzM7ZGFudCBuJiM4MjE3O2V4JiMyMzM7Y3V0ZSBwYXMgdG91dCBvdSBwYXJ0aWUgZGVzIG9ibGlnYXRpb25zIG1pc2VzICYjMjI0OyBzYSBjaGFyZ2UgcGFyIGxlIENvbnRyYXQsIGxlIExpY2VuY2kmIzIzMzsgYSBsYSBmYWN1bHQmIzIzMzssIHNvdXMgciYjMjMzO3NlcnZlIGRlIHByb3V2ZXIgbGEgZmF1dGUgZHUgQ29uYyYjMjMzO2RhbnQgY29uY2VybiYjMjMzOywgZGUgc29sbGljaXRlciBsYSByJiMyMzM7cGFyYXRpb24gZHUgcHImIzIzMztqdWRpY2UgZGlyZWN0IHF1JiM4MjE3O2lsIHN1Yml0IGV0IGRvbnQgaWwgYXBwb3J0ZXJhIGxhIHByZXV2ZS4KKworOC4yLiBMYSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IGVzdCBsaW1pdCYjMjMzO2UgYXV4IGVuZ2FnZW1lbnRzIHByaXMgZW4gYXBwbGljYXRpb24gZHUgQ29udHJhdCBldCBuZSBzYXVyYWl0ICYjMjM0O3RyZSBlbmdhZyYjMjMzO2UgZW4gcmFpc29uIG5vdGFtbWVudDooaSkgZGVzIGRvbW1hZ2VzIGR1cyAmIzIyNDsgbCYjODIxNztpbmV4JiMyMzM7Y3V0aW9uLCB0b3RhbGUgb3UgcGFydGllbGxlLCBkZSBzZXMgb2JsaWdhdGlvbnMgcGFyIGxlIExpY2VuY2kmIzIzMzssIChpaSkgZGVzIGRvbW1hZ2VzIGRpcmVjdHMgb3UgaW5kaXJlY3RzIGQmIzIzMztjb3VsYW50IGRlIGwmIzgyMTc7dXRpbGlzYXRpb24gb3UgZGVzIHBlcmZvcm1hbmNlcyBkdSBMb2dpY2llbCBzdWJpcyBwYXIgbGUgTGljZW5jaSYjMjMzOyBsb3JzcXUmIzgyMTc7aWwgcyYjODIxNzthZ2l0IGQmIzgyMTc7dW4gcHJvZmVzc2lvbm5lbCB1dGlsaXNhbnQgbGUgTG9naWNpZWwgJiMyMjQ7IGRlcyBmaW5zIHByb2Zlc3Npb25uZWxsZXMgZXQgKGlpaSkgZGVzIGRvbW1hZ2VzIGluZGlyZWN0cyBkJiMyMzM7Y291bGFudCBkZSBsJiM4MjE3O3V0aWxpc2F0aW9uIG91IGRlcyBwZXJmb3JtYW5jZXMgZHUgTG9naWNpZWwuIExlcyBQYXJ0aWVzIGNvbnZpZW5uZW50IGV4cHJlc3MmIzIzMzttZW50IHF1ZSB0b3V0IHByJiMyMzM7anVkaWNlIGZpbmFuY2llciBvdSBjb21tZXJjaWFsIChwYXIgZXhlbXBsZSBwZXJ0ZSBkZSBkb25uJiMyMzM7ZXMsIHBlcnRlIGRlIGImIzIzMztuJiMyMzM7ZmljZXMsIHBlcnRlIGQmIzgyMTc7ZXhwbG9pdGF0aW9uLCBwZXJ0ZSBkZSBjbGllbnQmIzIzMjtsZSBvdSBkZSBjb21tYW5kZXMsIG1hbnF1ZSAmIzIyNDsgZ2FnbmVyLCB0cm91YmxlIGNvbW1lcmNpYWwgcXVlbGNvbnF1ZSkgb3UgdG91dGUgYWN0aW9uIGRpcmlnJiMyMzM7ZSBjb250cmUgbGUgTGljZW5jaSYjMjMzOyBwYXIgdW4gdGllcnMsIGNvbnN0aXR1ZSB1biBkb21tYWdlIGluZGlyZWN0IGV0IG4mIzgyMTc7b3V2cmUgcGFzIGRyb2l0ICYjMjI0OyByJiMyMzM7cGFyYXRpb24gcGFyIGxlIENvbmMmIzIzMztkYW50LgorCitBcnRpY2xlIDkgLSBHQVJBTlRJRQorCis5LjEuIExlIExpY2VuY2kmIzIzMzsgcmVjb25uYSYjMjM4O3QgcXVlIGwmIzgyMTc7JiMyMzM7dGF0IGFjdHVlbCBkZXMgY29ubmFpc3NhbmNlcyBzY2llbnRpZmlxdWVzIGV0IHRlY2huaXF1ZXMgYXUgbW9tZW50IGRlIGxhIG1pc2UgZW4gY2lyY3VsYXRpb24gZHUgTG9naWNpZWwgbmUgcGVybWV0IHBhcyBkJiM4MjE3O2VuIHRlc3RlciBldCBkJiM4MjE3O2VuIHYmIzIzMztyaWZpZXIgdG91dGVzIGxlcyB1dGlsaXNhdGlvbnMgbmkgZGUgZCYjMjMzO3RlY3RlciBsJiM4MjE3O2V4aXN0ZW5jZSBkJiM4MjE3OyYjMjMzO3ZlbnR1ZWxzIGQmIzIzMztmYXV0cy4gTCYjODIxNzthdHRlbnRpb24gZHUgTGljZW5jaSYjMjMzOyBhICYjMjMzO3QmIzIzMzsgYXR0aXImIzIzMztlIHN1ciBjZSBwb2ludCBzdXIgbGVzIHJpc3F1ZXMgYXNzb2NpJiMyMzM7cyBhdSBjaGFyZ2VtZW50LCAmIzIyNDsgbCYjODIxNzt1dGlsaXNhdGlvbiwgbGEgbW9kaWZpY2F0aW9uIGV0L291IGF1IGQmIzIzMzt2ZWxvcHBlbWVudCBldCAmIzIyNDsgbGEgcmVwcm9kdWN0aW9uIGR1IExvZ2ljaWVsIHF1aSBzb250IHImIzIzMztzZXJ2JiMyMzM7cyAmIzIyNDsgZGVzIHV0aWxpc2F0ZXVycyBhdmVydGlzLgorCitJbCByZWwmIzIzMjt2ZSBkZSBsYSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IExpY2VuY2kmIzIzMzsgZGUgY29udHImIzI0NDtsZXIsIHBhciB0b3VzIG1veWVucywgbCYjODIxNzthZCYjMjMzO3F1YXRpb24gZHUgcHJvZHVpdCAmIzIyNDsgc2VzIGJlc29pbnMsIHNvbiBib24gZm9uY3Rpb25uZW1lbnQgZXQgZGUgc2Bhc3N1cmVyIHF1JiM4MjE3O2lsIG5lIGNhdXNlcmEgcGFzIGRlIGRvbW1hZ2VzIGF1eCBwZXJzb25uZXMgZXQgYXV4IGJpZW5zLgorCis5LjIuIExlIENvbmMmIzIzMztkYW50IGQmIzIzMztjbGFyZSBkZSBib25uZSBmb2kgJiMyMzQ7dHJlIGVuIGRyb2l0IGRlIGNvbmMmIzIzMztkZXIgbGBlbnNlbWJsZSBkZXMgZHJvaXRzIGF0dGFjaCYjMjMzO3MgYXUgTG9naWNpZWwgKGNvbXByZW5hbnQgbm90YW1tZW50IGxlcyBkcm9pdHMgdmlzJiMyMzM7cyAmIzIyNDsgbGBhcnRpY2xlIDUpLgorCis5LjMuIExlIExpY2VuY2kmIzIzMzsgcmVjb25uYSYjMjM4O3QgcXVlIGxlIExvZ2ljaWVsIGVzdCBmb3VybmkgJiMxNzE7ZW4gbGAmIzIzMzt0YXQmIzE4NzsgcGFyIGxlIENvbmMmIzIzMztkYW50IHNhbnMgYXV0cmUgZ2FyYW50aWUsIGV4cHJlc3NlIG91IHRhY2l0ZSwgcXVlIGNlbGxlIHByJiMyMzM7dnVlICYjMjI0OyBsJiM4MjE3O2FydGljbGUgOS4yIGV0IG5vdGFtbWVudCBzYW5zIGF1Y3VuZSBnYXJhbnRpZSBzdXIgc2EgdmFsZXVyIGNvbW1lcmNpYWxlLCBzb24gY2FyYWN0JiMyMzI7cmUgcyYjMjMzO2N1cmlzJiMyMzM7LCBpbm5vdmFudCBvdSBwZXJ0aW5lbnQuCisKK0VuIHBhcnRpY3VsaWVyLCBsZSBDb25jJiMyMzM7ZGFudCBuZSBnYXJhbnRpdCBwYXMgcXVlIGxlIExvZ2ljaWVsIGVzdCBleGVtcHQgZGBlcnJldXIsIHF1JiM4MjE3O2lsIGZvbmN0aW9ubmVyYSBzYW5zIGludGVycnVwdGlvbiwgcXUmIzgyMTc7aWwgc2VyYSBjb21wYXRpYmxlIGF2ZWMgbCYjODIxNzsmIzIzMztxdWlwZW1lbnQgZHUgTGljZW5jaSYjMjMzOyBldCBzYSBjb25maWd1cmF0aW9uIGxvZ2ljaWVsbGUgbmkgcXUmIzgyMTc7aWwgcmVtcGxpcmEgbGVzIGJlc29pbnMgZHUgTGljZW5jaSYjMjMzOy4KKworOS40LiBMZSBDb25jJiMyMzM7ZGFudCBuZSBnYXJhbnRpdCBwYXMsIGRlIG1hbmkmIzIzMjtyZSBleHByZXNzZSBvdSB0YWNpdGUsIHF1ZSBsZSBMb2dpY2llbCBuZSBwb3J0ZSBwYXMgYXR0ZWludGUgJiMyMjQ7IHVuIHF1ZWxjb25xdWUgZHJvaXQgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkJiM4MjE3O3VuIHRpZXJzIHBvcnRhbnQgc3VyIHVuIGJyZXZldCwgdW4gbG9naWNpZWwgb3Ugc3VyIHRvdXQgYXV0cmUgZHJvaXQgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOy4gQWluc2ksIGxlIENvbmMmIzIzMztkYW50IGV4Y2x1dCB0b3V0ZSBnYXJhbnRpZSBhdSBwcm9maXQgZHUgTGljZW5jaSYjMjMzOyBjb250cmUgbGVzIGFjdGlvbnMgZW4gY29udHJlZmEmIzIzMTtvbiBxdWkgcG91cnJhaWVudCAmIzIzNDt0cmUgZGlsaWdlbnQmIzIzMztlcyBhdSB0aXRyZSBkZSBsJiM4MjE3O3V0aWxpc2F0aW9uLCBkZSBsYSBtb2RpZmljYXRpb24sIGV0IGRlIGxhIHJlZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsLiBOJiMyMzM7YW5tb2lucywgc2kgZGUgdGVsbGVzIGFjdGlvbnMgc29udCBleGVyYyYjMjMzO2VzIGNvbnRyZSBsZSBMaWNlbmNpJiMyMzM7LCBsZSBDb25jJiMyMzM7ZGFudCBsdWkgYXBwb3J0ZXJhIHNvbiBhaWRlIHRlY2huaXF1ZSBldCBqdXJpZGlxdWUgcG91ciBzYSBkJiMyMzM7ZmVuc2UuIENldHRlIGFpZGUgdGVjaG5pcXVlIGV0IGp1cmlkaXF1ZSBlc3QgZCYjMjMzO3Rlcm1pbiYjMjMzO2UgYXUgY2FzIHBhciBjYXMgZW50cmUgbGUgQ29uYyYjMjMzO2RhbnQgY29uY2VybiYjMjMzOyBldCBsZSBMaWNlbmNpJiMyMzM7IGRhbnMgbGUgY2FkcmUgZCYjODIxNzt1biBwcm90b2NvbGUgZCYjODIxNzthY2NvcmQuIExlIENvbmMmIzIzMztkYW50IGQmIzIzMztnYWdlIHRvdXRlIHJlc3BvbnNhYmlsaXQmIzIzMzsgcXVhbnQgJiMyMjQ7IGwmIzgyMTc7dXRpbGlzYXRpb24gZGUgbGEgZCYjMjMzO25vbWluYXRpb24gZHUgTG9naWNpZWwgcGFyIGxlIExpY2VuY2kmIzIzMzsuIEF1Y3VuZSBnYXJhbnRpZSBuJiM4MjE3O2VzdCBhcHBvcnQmIzIzMztlIHF1YW50ICYjMjI0OyBsJiM4MjE3O2V4aXN0ZW5jZSBkZSBkcm9pdHMgYW50JiMyMzM7cmlldXJzIHN1ciBsZSBub20gZHUgTG9naWNpZWwgZXQgc3VyIGwmIzgyMTc7ZXhpc3RlbmNlIGQmIzgyMTc7dW5lIG1hcnF1ZS4KKworQXJ0aWNsZSAxMCAtIFJFU0lMSUFUSU9OCisKKzEwLjEuIEVuIGNhcyBkZSBtYW5xdWVtZW50IHBhciBsZSBMaWNlbmNpJiMyMzM7IGF1eCBvYmxpZ2F0aW9ucyBtaXNlcyAmIzIyNDsgc2EgY2hhcmdlIHBhciBsZSBDb250cmF0LCBsZSBDb25jJiMyMzM7ZGFudCBwb3VycmEgciYjMjMzO3NpbGllciBkZSBwbGVpbiBkcm9pdCBsZSBDb250cmF0IHRyZW50ZSAoMzApIGpvdXJzIGFwciYjMjMyO3Mgbm90aWZpY2F0aW9uIGFkcmVzcyYjMjMzO2UgYXUgTGljZW5jaSYjMjMzOyBldCByZXN0JiMyMzM7ZSBzYW5zIGVmZmV0LgorCisxMC4yLiBMZSBMaWNlbmNpJiMyMzM7IGRvbnQgbGUgQ29udHJhdCBlc3QgciYjMjMzO3NpbGkmIzIzMzsgbiYjODIxNztlc3QgcGx1cyBhdXRvcmlzJiMyMzM7ICYjMjI0OyB1dGlsaXNlciwgbW9kaWZpZXIgb3UgZGlzdHJpYnVlciBsZSBMb2dpY2llbC4gQ2VwZW5kYW50LCB0b3V0ZXMgbGVzIGxpY2VuY2VzIHF1JiM4MjE3O2lsIGF1cmEgY29uYyYjMjMzO2QmIzIzMztlcyBhbnQmIzIzMztyaWV1cmVtZW50ICYjMjI0OyBsYSByJiMyMzM7c2lsaWF0aW9uIGR1IENvbnRyYXQgcmVzdGVyb250IHZhbGlkZXMgc291cyByJiMyMzM7c2VydmUgcXUmIzgyMTc7ZWxsZXMgYWllbnQgJiMyMzM7dCYjMjMzOyBlZmZlY3R1JiMyMzM7ZXMgZW4gY29uZm9ybWl0JiMyMzM7IGF2ZWMgbGUgQ29udHJhdC4KKworQXJ0aWNsZSAxMSAtIERJU1BPU0lUSU9OUyBESVZFUlNFUworCisxMS4xLiBDQVVTRSBFWFRFUklFVVJFCisKK0F1Y3VuZSBkZXMgUGFydGllcyBuZSBzZXJhIHJlc3BvbnNhYmxlIGQmIzgyMTc7dW4gcmV0YXJkIG91IGQmIzgyMTc7dW5lIGQmIzIzMztmYWlsbGFuY2UgZCYjODIxNztleCYjMjMzO2N1dGlvbiBkdSBDb250cmF0IHF1aSBzZXJhaXQgZCYjMjUxOyAmIzIyNDsgdW4gY2FzIGRlIGZvcmNlIG1hamV1cmUsIHVuIGNhcyBmb3J0dWl0IG91IHVuZSBjYXVzZSBleHQmIzIzMztyaWV1cmUsIHRlbGxlIHF1ZSwgbm90YW1tZW50LCBsZSBtYXV2YWlzIGZvbmN0aW9ubmVtZW50IG91IGxlcyBpbnRlcnJ1cHRpb25zIGR1IHImIzIzMztzZWF1ICYjMjMzO2xlY3RyaXF1ZSBvdSBkZSB0JiMyMzM7bCYjMjMzO2NvbW11bmljYXRpb24sIGxhIHBhcmFseXNpZSBkdSByJiMyMzM7c2VhdSBsaSYjMjMzO2UgJiMyMjQ7IHVuZSBhdHRhcXVlIGluZm9ybWF0aXF1ZSwgbCYjODIxNztpbnRlcnZlbnRpb24gZGVzIGF1dG9yaXQmIzIzMztzIGdvdXZlcm5lbWVudGFsZXMsIGxlcyBjYXRhc3Ryb3BoZXMgbmF0dXJlbGxlcywgbGVzIGQmIzIzMztnJiMyMjY7dHMgZGVzIGVhdXgsIGxlcyB0cmVtYmxlbWVudHMgZGUgdGVycmUsIGxlIGZldSwgbGVzIGV4cGxvc2lvbnMsIGxlcyBnciYjMjMyO3ZlcyBldCBsZXMgY29uZmxpdHMgc29jaWF1eCwgbCYjODIxNzsmIzIzMzt0YXQgZGUgZ3VlcnJlJiM4MjMwOworCisxMS4yLiBMZSBmYWl0LCBwYXIgbCYjODIxNzt1bmUgb3UgbCYjODIxNzthdXRyZSBkZXMgUGFydGllcywgZCYjODIxNztvbWV0dHJlIGVuIHVuZSBvdSBwbHVzaWV1cnMgb2NjYXNpb25zIGRlIHNlIHByJiMyMzM7dmFsb2lyIGQmIzgyMTc7dW5lIG91IHBsdXNpZXVycyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCwgbmUgcG91cnJhIGVuIGF1Y3VuIGNhcyBpbXBsaXF1ZXIgcmVub25jaWF0aW9uIHBhciBsYSBQYXJ0aWUgaW50JiMyMzM7cmVzcyYjMjMzO2UgJiMyMjQ7IHMmIzgyMTc7ZW4gcHImIzIzMzt2YWxvaXIgdWx0JiMyMzM7cmlldXJlbWVudC4KKworMTEuMy4gTGUgQ29udHJhdCBhbm51bGUgZXQgcmVtcGxhY2UgdG91dGUgY29udmVudGlvbiBhbnQmIzIzMztyaWV1cmUsICYjMjMzO2NyaXRlIG91IG9yYWxlLCBlbnRyZSBsZXMgUGFydGllcyBzdXIgbGUgbSYjMjM0O21lIG9iamV0IGV0IGNvbnN0aXR1ZSBsJiM4MjE3O2FjY29yZCBlbnRpZXIgZW50cmUgbGVzIFBhcnRpZXMgc3VyIGNldCBvYmpldC4gQXVjdW5lIGFkZGl0aW9uIG91IG1vZGlmaWNhdGlvbiBhdXggdGVybWVzIGR1IENvbnRyYXQgbiYjODIxNzthdXJhIGQmIzgyMTc7ZWZmZXQgJiMyMjQ7IGwmIzgyMTc7JiMyMzM7Z2FyZCBkZXMgUGFydGllcyAmIzIyNDsgbW9pbnMgZCYjODIxNzsmIzIzNDt0cmUgZmFpdGUgcGFyICYjMjMzO2NyaXQgZXQgc2lnbiYjMjMzO2UgcGFyIGxldXJzIHJlcHImIzIzMztzZW50YW50cyBkJiMyNTE7bWVudCBoYWJpbGl0JiMyMzM7cy4KKworMTEuNC4gRGFucyBsJiM4MjE3O2h5cG90aCYjMjMyO3NlIG8mIzI0OTsgdW5lIG91IHBsdXNpZXVycyBkZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgcyYjODIxNzthdiYjMjMyO3JlcmFpdCBjb250cmFpcmUgJiMyMjQ7IHVuZSBsb2kgb3UgJiMyMjQ7IHVuIHRleHRlIGFwcGxpY2FibGUsIGV4aXN0YW50cyBvdSBmdXR1cnMsIGNldHRlIGxvaSBvdSBjZSB0ZXh0ZSBwciYjMjMzO3ZhdWRyYWl0LCBldCBsZXMgUGFydGllcyBmZXJhaWVudCBsZXMgYW1lbmRlbWVudHMgbiYjMjMzO2Nlc3NhaXJlcyBwb3VyIHNlIGNvbmZvcm1lciAmIzIyNDsgY2V0dGUgbG9pIG91ICYjMjI0OyBjZSB0ZXh0ZS4gVG91dGVzIGxlcyBhdXRyZXMgZGlzcG9zaXRpb25zIHJlc3Rlcm9udCBlbiB2aWd1ZXVyLiBEZSBtJiMyMzQ7bWUsIGxhIG51bGxpdCYjMjMzOywgcG91ciBxdWVscXVlIHJhaXNvbiBxdWUgY2Ugc29pdCwgZCYjODIxNzt1bmUgZGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IG5lIHNhdXJhaXQgZW50cmEmIzIzODtuZXIgbGEgbnVsbGl0JiMyMzM7IGRlIGwmIzgyMTc7ZW5zZW1ibGUgZHUgQ29udHJhdC4KKworMTEuNS4gTEFOR1VFCisKK0xlIENvbnRyYXQgZXN0IHImIzIzMztkaWcmIzIzMzsgZW4gbGFuZ3VlIGZyYW4mIzIzMTthaXNlIGV0IGVuIGxhbmd1ZSBhbmdsYWlzZS4gRW4gY2FzIGRlIGRpdmVyZ2VuY2UgZCYjODIxNztpbnRlcnByJiMyMzM7dGF0aW9uLCBzZXVsZSBsYSB2ZXJzaW9uIGZyYW4mIzIzMTthaXNlIGZhaXQgZm9pLgorCitBcnRpY2xlIDEyIC0gTk9VVkVMTEVTIFZFUlNJT05TIERVIENPTlRSQVQKKworMTIuMS4gVG91dGUgcGVyc29ubmUgZXN0IGF1dG9yaXMmIzIzMztlICYjMjI0OyBjb3BpZXIgZXQgZGlzdHJpYnVlciBkZXMgY29waWVzIGRlIGNlIENvbnRyYXQuCisKKzEyLjIuIEFmaW4gZCYjODIxNztlbiBwciYjMjMzO3NlcnZlciBsYSBjb2gmIzIzMztyZW5jZSwgbGUgdGV4dGUgZHUgQ29udHJhdCBlc3QgcHJvdCYjMjMzO2cmIzIzMzsgZXQgbmUgcGV1dCAmIzIzNDt0cmUgbW9kaWZpJiMyMzM7IHF1ZSBwYXIgbGVzIGF1dGV1cnMgZGUgbGEgbGljZW5jZSwgbGVzcXVlbHMgc2UgciYjMjMzO3NlcnZlbnQgbGUgZHJvaXQgZGUgcHVibGllciBwJiMyMzM7cmlvZGlxdWVtZW50IGRlcyBtaXNlcyAmIzIyNDsgam91ciBvdSBkZSBub3V2ZWxsZXMgdmVyc2lvbnMgZHUgQ29udHJhdCwgcXVpIHBvc3MmIzIzMjtkZXJvbnQgY2hhY3VuZSB1biBudW0mIzIzMztybyBkaXN0aW5jdC4gQ2VzIHZlcnNpb25zIHVsdCYjMjMzO3JpZXVyZXMgc2Vyb250IHN1c2NlcHRpYmxlcyBkZSBwcmVuZHJlIGVuIGNvbXB0ZSBkZSBub3V2ZWxsZXMgcHJvYmwmIzIzMzttYXRpcXVlcyByZW5jb250ciYjMjMzO2VzIHBhciBsZXMgbG9naWNpZWxzIGxpYnJlcy4KKworMTIuMy4gVG91dCBMb2dpY2llbCBkaWZmdXMmIzIzMzsgc291cyB1bmUgdmVyc2lvbiBkb25uJiMyMzM7ZSBkdSBDb250cmF0IG5lIHBvdXJyYSBmYWlyZSBsYG9iamV0IGRgdW5lIGRpZmZ1c2lvbiB1bHQmIzIzMztyaWV1cmUgcXVlIHNvdXMgbGEgbSYjMjM0O21lIHZlcnNpb24gZHUgQ29udHJhdCBvdSB1bmUgdmVyc2lvbiBwb3N0JiMyMzM7cmlldXJlLCBzb3VzIHImIzIzMztzZXJ2ZSBkZXMgZGlzcG9zaXRpb25zIGRlIGxgYXJ0aWNsZSA1LjMuNC4KKworQXJ0aWNsZSAxMyAtIExPSSBBUFBMSUNBQkxFIEVUIENPTVBFVEVOQ0UgVEVSUklUT1JJQUxFCisKKzEzLjEuIExlIENvbnRyYXQgZXN0IHImIzIzMztnaSBwYXIgbGEgbG9pIGZyYW4mIzIzMTthaXNlLiBMZXMgUGFydGllcyBjb252aWVubmVudCBkZSB0ZW50ZXIgZGUgciYjMjMzO2dsZXIgJiMyMjQ7IGwmIzgyMTc7YW1pYWJsZSBsZXMgZGlmZiYjMjMzO3JlbmRzIG91IGxpdGlnZXMgcXVpIHZpZW5kcmFpZW50ICYjMjI0OyBzZSBwcm9kdWlyZSBwYXIgc3VpdGUgb3UgJiMyMjQ7IGwmIzgyMTc7b2NjYXNpb24gZHUgQ29udHJhdC4KKworMTMuMi4gQSBkJiMyMzM7ZmF1dCBkJiM4MjE3O2FjY29yZCBhbWlhYmxlIGRhbnMgdW4gZCYjMjMzO2xhaSBkZSBkZXV4ICgyKSBtb2lzICYjMjI0OyBjb21wdGVyIGRlIGxldXIgc3VydmVuYW5jZSBldCBzYXVmIHNpdHVhdGlvbiByZWxldmFudCBkJiM4MjE3O3VuZSBwcm9jJiMyMzM7ZHVyZSBkJiM4MjE3O3VyZ2VuY2UsIGxlcyBkaWZmJiMyMzM7cmVuZHMgb3UgbGl0aWdlcyBzZXJvbnQgcG9ydCYjMjMzO3MgcGFyIGxhIFBhcnRpZSBsYSBwbHVzIGRpbGlnZW50ZSBkZXZhbnQgbGVzIFRyaWJ1bmF1eCBjb21wJiMyMzM7dGVudHMgZGUgUGFyaXMuCisKKzEgQ2U6IENFQSwgQzogQ05SUywgSTogSU5SSUEsIExMOiBMb2dpY2llbCBMaWJyZQorCisKK1ZlcnNpb24gMSBkdSAyMS8wNi8yMDA0CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0VDSUxMLTIuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0VDSUxMLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmMxNGE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRUNJTEwtMi4wCkBAIC0wLDAgKzEsMjQzIEBACisKK0NPTlRSQVQgREUgTElDRU5DRSBERSBMT0dJQ0lFTCBMSUJSRSBDZUNJTEwKKworQXZlcnRpc3NlbWVudAorCitDZSBjb250cmF0IGVzdCB1bmUgbGljZW5jZSBkZSBsb2dpY2llbCBsaWJyZSBpc3N1ZSBkYHVuZSBjb25jZXJ0YXRpb24gZW50cmUgc2VzIGF1dGV1cnMgYWZpbiBxdWUgbGUgcmVzcGVjdCBkZSBkZXV4IGdyYW5kcyBwcmluY2lwZXMgcHImIzIzMztzaWRlICYjMjI0OyBzYSByJiMyMzM7ZGFjdGlvbjoKKworZGB1bmUgcGFydCwgbGUgcmVzcGVjdCBkZXMgcHJpbmNpcGVzIGRlIGRpZmZ1c2lvbiBkZXMgbG9naWNpZWxzIGxpYnJlczogYWNjJiMyMzI7cyBhdSBjb2RlIHNvdXJjZSwgZHJvaXRzICYjMjMzO3RlbmR1cyBjb25mJiMyMzM7ciYjMjMzO3MgYXV4IHV0aWxpc2F0ZXVycywKK2RgYXV0cmUgcGFydCwgbGEgZCYjMjMzO3NpZ25hdGlvbiBkYHVuIGRyb2l0IGFwcGxpY2FibGUsIGxlIGRyb2l0IGZyYW4mIzIzMTthaXMsIGF1cXVlbCBlbGxlIGVzdCBjb25mb3JtZSwgdGFudCBhdSByZWdhcmQgZHUgZHJvaXQgZGUgbGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBjaXZpbGUgcXVlIGR1IGRyb2l0IGRlIGxhIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZXQgZGUgbGEgcHJvdGVjdGlvbiBxdWBpbCBvZmZyZSBhdXggYXV0ZXVycyBldCB0aXR1bGFpcmVzIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHN1ciB1biBsb2dpY2llbC4KK0xlcyBhdXRldXJzIGRlIGxhIGxpY2VuY2UgQ2VDSUxMMSBzb250OgorCitDb21taXNzYXJpYXQgJiMyMjQ7IGxgRW5lcmdpZSBBdG9taXF1ZSAtIENFQSwgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyBkZSByZWNoZXJjaGUgJiMyMjQ7IGNhcmFjdCYjMjMyO3JlIHNjaWVudGlmaXF1ZSwgdGVjaG5pcXVlIGV0IGluZHVzdHJpZWwsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyAyNSBydWUgTGVibGFuYywgaW1tZXVibGUgTGUgUG9uYW50IEQsIDc1MDE1IFBhcmlzLgorCitDZW50cmUgTmF0aW9uYWwgZGUgbGEgUmVjaGVyY2hlIFNjaWVudGlmaXF1ZSAtIENOUlMsICYjMjMzO3RhYmxpc3NlbWVudCBwdWJsaWMgJiMyMjQ7IGNhcmFjdCYjMjMyO3JlIHNjaWVudGlmaXF1ZSBldCB0ZWNobm9sb2dpcXVlLCBkb250IGxlIHNpJiMyMzI7Z2UgZXN0IHNpdHUmIzIzMzsgMyBydWUgTWljaGVsLUFuZ2UsIDc1Nzk0IFBhcmlzIGNlZGV4IDE2LgorCitJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0IGVuIEF1dG9tYXRpcXVlIC0gSU5SSUEsICYjMjMzO3RhYmxpc3NlbWVudCBwdWJsaWMgJiMyMjQ7IGNhcmFjdCYjMjMyO3JlIHNjaWVudGlmaXF1ZSBldCB0ZWNobm9sb2dpcXVlLCBkb250IGxlIHNpJiMyMzI7Z2UgZXN0IHNpdHUmIzIzMzsgRG9tYWluZSBkZSBWb2x1Y2VhdSwgUm9jcXVlbmNvdXJ0LCBCUCAxMDUsIDc4MTUzIExlIENoZXNuYXkgY2VkZXguCisKK1ByJiMyMzM7YW1idWxlCisKK0NlIGNvbnRyYXQgZXN0IHVuZSBsaWNlbmNlIGRlIGxvZ2ljaWVsIGxpYnJlIGRvbnQgbGBvYmplY3RpZiBlc3QgZGUgY29uZiYjMjMzO3JlciBhdXggdXRpbGlzYXRldXJzIGxhIGxpYmVydCYjMjMzOyBkZSBtb2RpZmljYXRpb24gZXQgZGUgcmVkaXN0cmlidXRpb24gZHUgbG9naWNpZWwgciYjMjMzO2dpIHBhciBjZXR0ZSBsaWNlbmNlIGRhbnMgbGUgY2FkcmUgZGB1biBtb2QmIzIzMjtsZSBkZSBkaWZmdXNpb24gZW4gbG9naWNpZWwgbGlicmUuCisKK0xgZXhlcmNpY2UgZGUgY2VzIGxpYmVydCYjMjMzO3MgZXN0IGFzc29ydGkgZGUgY2VydGFpbnMgZGV2b2lycyAmIzIyNDsgbGEgY2hhcmdlIGRlcyB1dGlsaXNhdGV1cnMgYWZpbiBkZSBwciYjMjMzO3NlcnZlciBjZSBzdGF0dXQgYXUgY291cnMgZGVzIHJlZGlzdHJpYnV0aW9ucyB1bHQmIzIzMztyaWV1cmVzLgorCitMYGFjY2Vzc2liaWxpdCYjMjMzOyBhdSBjb2RlIHNvdXJjZSBldCBsZXMgZHJvaXRzIGRlIGNvcGllLCBkZSBtb2RpZmljYXRpb24gZXQgZGUgcmVkaXN0cmlidXRpb24gcXVpIGVuIGQmIzIzMztjb3VsZW50IG9udCBwb3VyIGNvbnRyZXBhcnRpZSBkZSBuYG9mZnJpciBhdXggdXRpbGlzYXRldXJzIHF1YHVuZSBnYXJhbnRpZSBsaW1pdCYjMjMzO2UgZXQgZGUgbmUgZmFpcmUgcGVzZXIgc3VyIGxgYXV0ZXVyIGR1IGxvZ2ljaWVsLCBsZSB0aXR1bGFpcmUgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggZXQgbGVzIGNvbmMmIzIzMztkYW50cyBzdWNjZXNzaWZzIHF1YHVuZSByZXNwb25zYWJpbGl0JiMyMzM7IHJlc3RyZWludGUuCisKK0EgY2V0ICYjMjMzO2dhcmQgbGBhdHRlbnRpb24gZGUgbGB1dGlsaXNhdGV1ciBlc3QgYXR0aXImIzIzMztlIHN1ciBsZXMgcmlzcXVlcyBhc3NvY2kmIzIzMztzIGF1IGNoYXJnZW1lbnQsICYjMjI0OyBsYHV0aWxpc2F0aW9uLCAmIzIyNDsgbGEgbW9kaWZpY2F0aW9uIGV0L291IGF1IGQmIzIzMzt2ZWxvcHBlbWVudCBldCAmIzIyNDsgbGEgcmVwcm9kdWN0aW9uIGR1IGxvZ2ljaWVsIHBhciBsYHV0aWxpc2F0ZXVyICYjMjMzO3RhbnQgZG9ubiYjMjMzOyBzYSBzcCYjMjMzO2NpZmljaXQmIzIzMzsgZGUgbG9naWNpZWwgbGlicmUsIHF1aSBwZXV0IGxlIHJlbmRyZSBjb21wbGV4ZSAmIzIyNDsgbWFuaXB1bGVyIGV0IHF1aSBsZSByJiMyMzM7c2VydmUgZG9uYyAmIzIyNDsgZGVzIGQmIzIzMzt2ZWxvcHBldXJzIG91IGRlcyBwcm9mZXNzaW9ubmVscyBhdmVydGlzIHBvc3MmIzIzMztkYW50IGRlcyBjb25uYWlzc2FuY2VzIGluZm9ybWF0aXF1ZXMgYXBwcm9mb25kaWVzLiBMZXMgdXRpbGlzYXRldXJzIHNvbnQgZG9uYyBpbnZpdCYjMjMzO3MgJiMyMjQ7IGNoYXJnZXIgZXQgdGVzdGVyIGxgYWQmIzIzMztxdWF0aW9uIGR1IGxvZ2ljaWVsICYjMjI0OyBsZXVycyBiZXNvaW5zIGRhbnMgZGVzIGNvbmRpdGlvbnMgcGVybWV0dGFudCBkYGFzc3VyZXIgbGEgcyYjMjMzO2N1cml0JiMyMzM7IGRlIGxldXJzIHN5c3QmIzIzMjttZXMgZXQvb3UgZGUgbGV1cnMgZG9ubiYjMjMzO2VzIGV0LCBwbHVzIGcmIzIzMztuJiMyMzM7cmFsZW1lbnQsICYjMjI0OyBsYHV0aWxpc2VyIGV0IGxgZXhwbG9pdGVyIGRhbnMgbGVzIG0mIzIzNDttZXMgY29uZGl0aW9ucyBkZSBzJiMyMzM7Y3VyaXQmIzIzMzsuIENlIGNvbnRyYXQgcGV1dCAmIzIzNDt0cmUgcmVwcm9kdWl0IGV0IGRpZmZ1cyYjMjMzOyBsaWJyZW1lbnQsIHNvdXMgciYjMjMzO3NlcnZlIGRlIGxlIGNvbnNlcnZlciBlbiBsYCYjMjMzO3RhdCwgc2FucyBham91dCBuaSBzdXBwcmVzc2lvbiBkZSBjbGF1c2VzLgorCitDZSBjb250cmF0IGVzdCBzdXNjZXB0aWJsZSBkZSBzYGFwcGxpcXVlciAmIzIyNDsgdG91dCBsb2dpY2llbCBkb250IGxlIHRpdHVsYWlyZSBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBkJiMyMzM7Y2lkZSBkZSBzb3VtZXR0cmUgbGBleHBsb2l0YXRpb24gYXV4IGRpc3Bvc2l0aW9ucyBxdWBpbCBjb250aWVudC4KKworQXJ0aWNsZSAxIC0gREVGSU5JVElPTlMKKworRGFucyBjZSBjb250cmF0LCBsZXMgdGVybWVzIHN1aXZhbnRzLCBsb3JzcXVgaWxzIHNlcm9udCAmIzIzMztjcml0cyBhdmVjIHVuZSBsZXR0cmUgY2FwaXRhbGUsIGF1cm9udCBsYSBzaWduaWZpY2F0aW9uIHN1aXZhbnRlOgorCitDb250cmF0OiBkJiMyMzM7c2lnbmUgbGUgcHImIzIzMztzZW50IGNvbnRyYXQgZGUgbGljZW5jZSwgc2VzICYjMjMzO3ZlbnR1ZWxsZXMgdmVyc2lvbnMgcG9zdCYjMjMzO3JpZXVyZXMgZXQgYW5uZXhlcy4KKworTG9naWNpZWw6IGQmIzIzMztzaWduZSBsZSBsb2dpY2llbCBzb3VzIHNhIGZvcm1lIGRlIENvZGUgT2JqZXQgZXQvb3UgZGUgQ29kZSBTb3VyY2UgZXQgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50IHNhIGRvY3VtZW50YXRpb24sIGRhbnMgbGV1ciAmIzIzMzt0YXQgYXUgbW9tZW50IGRlIGxgYWNjZXB0YXRpb24gZHUgQ29udHJhdCBwYXIgbGUgTGljZW5jaSYjMjMzOy4KKworTG9naWNpZWwgSW5pdGlhbDogZCYjMjMzO3NpZ25lIGxlIExvZ2ljaWVsIHNvdXMgc2EgZm9ybWUgZGUgQ29kZSBTb3VyY2UgZXQgJiMyMzM7dmVudHVlbGxlbWVudCBkZSBDb2RlIE9iamV0IGV0IGxlIGNhcyAmIzIzMztjaCYjMjMzO2FudCBzYSBkb2N1bWVudGF0aW9uLCBkYW5zIGxldXIgJiMyMzM7dGF0IGF1IG1vbWVudCBkZSBsZXVyIHByZW1pJiMyMzI7cmUgZGlmZnVzaW9uIHNvdXMgbGVzIHRlcm1lcyBkdSBDb250cmF0LgorCitMb2dpY2llbCBNb2RpZmkmIzIzMzs6IGQmIzIzMztzaWduZSBsZSBMb2dpY2llbCBtb2RpZmkmIzIzMzsgcGFyIGF1IG1vaW5zIHVuZSBDb250cmlidXRpb24uCisKK0NvZGUgU291cmNlOiBkJiMyMzM7c2lnbmUgbGBlbnNlbWJsZSBkZXMgaW5zdHJ1Y3Rpb25zIGV0IGRlcyBsaWduZXMgZGUgcHJvZ3JhbW1lIGR1IExvZ2ljaWVsIGV0IGF1cXVlbCBsYGFjYyYjMjMyO3MgZXN0IG4mIzIzMztjZXNzYWlyZSBlbiB2dWUgZGUgbW9kaWZpZXIgbGUgTG9naWNpZWwuCisKK0NvZGUgT2JqZXQ6IGQmIzIzMztzaWduZSBsZXMgZmljaGllcnMgYmluYWlyZXMgaXNzdXMgZGUgbGEgY29tcGlsYXRpb24gZHUgQ29kZSBTb3VyY2UuCisKK1RpdHVsYWlyZTogZCYjMjMzO3NpZ25lIGxlIG91IGxlcyBkJiMyMzM7dGVudGV1cnMgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggZGBhdXRldXIgc3VyIGxlIExvZ2ljaWVsIEluaXRpYWwuCisKK0xpY2VuY2kmIzIzMzs6IGQmIzIzMztzaWduZSBsZSBvdSBsZXMgdXRpbGlzYXRldXJzIGR1IExvZ2ljaWVsIGF5YW50IGFjY2VwdCYjMjMzOyBsZSBDb250cmF0LgorCitDb250cmlidXRldXI6IGQmIzIzMztzaWduZSBsZSBMaWNlbmNpJiMyMzM7IGF1dGV1ciBkYGF1IG1vaW5zIHVuZSBDb250cmlidXRpb24uCisKK0NvbmMmIzIzMztkYW50OiBkJiMyMzM7c2lnbmUgbGUgVGl0dWxhaXJlIG91IHRvdXRlIHBlcnNvbm5lIHBoeXNpcXVlIG91IG1vcmFsZSBkaXN0cmlidWFudCBsZSBMb2dpY2llbCBzb3VzIGxlIENvbnRyYXQuCisKK0NvbnRyaWJ1dGlvbjogZCYjMjMzO3NpZ25lIGxgZW5zZW1ibGUgZGVzIG1vZGlmaWNhdGlvbnMsIGNvcnJlY3Rpb25zLCB0cmFkdWN0aW9ucywgYWRhcHRhdGlvbnMgZXQvb3Ugbm91dmVsbGVzIGZvbmN0aW9ubmFsaXQmIzIzMztzIGludCYjMjMzO2dyJiMyMzM7ZXMgZGFucyBsZSBMb2dpY2llbCBwYXIgdG91dCBDb250cmlidXRldXIsIGFpbnNpIHF1ZSB0b3V0IE1vZHVsZSBJbnRlcm5lLgorCitNb2R1bGU6IGQmIzIzMztzaWduZSB1biBlbnNlbWJsZSBkZSBmaWNoaWVycyBzb3VyY2VzIHkgY29tcHJpcyBsZXVyIGRvY3VtZW50YXRpb24gcXVpIHBlcm1ldCBkZSByJiMyMzM7YWxpc2VyIGRlcyBmb25jdGlvbm5hbGl0JiMyMzM7cyBvdSBzZXJ2aWNlcyBzdXBwbCYjMjMzO21lbnRhaXJlcyAmIzIyNDsgY2V1eCBmb3VybmlzIHBhciBsZSBMb2dpY2llbC4KKworTW9kdWxlIEV4dGVybmU6IGQmIzIzMztzaWduZSB0b3V0IE1vZHVsZSwgbm9uIGQmIzIzMztyaXYmIzIzMzsgZHUgTG9naWNpZWwsIHRlbCBxdWUgY2UgTW9kdWxlIGV0IGxlIExvZ2ljaWVsIHNgZXgmIzIzMztjdXRlbnQgZGFucyBkZXMgZXNwYWNlcyBkYGFkcmVzc2FnZSBkaWZmJiMyMzM7cmVudHMsIGxgdW4gYXBwZWxhbnQgbGBhdXRyZSBhdSBtb21lbnQgZGUgbGV1ciBleCYjMjMzO2N1dGlvbi4KKworTW9kdWxlIEludGVybmU6IGQmIzIzMztzaWduZSB0b3V0IE1vZHVsZSBsaSYjMjMzOyBhdSBMb2dpY2llbCBkZSB0ZWxsZSBzb3J0ZSBxdWBpbHMgc2BleCYjMjMzO2N1dGVudCBkYW5zIGxlIG0mIzIzNDttZSBlc3BhY2UgZGBhZHJlc3NhZ2UuCisKK0dOVSBHUEw6IGQmIzIzMztzaWduZSBsYSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkYW5zIHNhIHZlcnNpb24gMiBvdSB0b3V0ZSB2ZXJzaW9uIHVsdCYjMjMzO3JpZXVyZSwgdGVsbGUgcXVlIHB1YmxpJiMyMzM7ZSBwYXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEluYy4KKworUGFydGllczogZCYjMjMzO3NpZ25lIGNvbGxlY3RpdmVtZW50IGxlIExpY2VuY2kmIzIzMzsgZXQgbGUgQ29uYyYjMjMzO2RhbnQuCisKK0NlcyB0ZXJtZXMgc2BlbnRlbmRlbnQgYXUgc2luZ3VsaWVyIGNvbW1lIGF1IHBsdXJpZWwuCisKK0FydGljbGUgMiAtIE9CSkVUCisKK0xlIENvbnRyYXQgYSBwb3VyIG9iamV0IGxhIGNvbmNlc3Npb24gcGFyIGxlIENvbmMmIzIzMztkYW50IGF1IExpY2VuY2kmIzIzMzsgZGB1bmUgbGljZW5jZSBub24gZXhjbHVzaXZlLCBjZXNzaWJsZSBldCBtb25kaWFsZSBkdSBMb2dpY2llbCB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllIGNpLWFwciYjMjMyO3MgJiMyMjQ7IGxgYXJ0aWNsZSA1IHBvdXIgdG91dGUgbGEgZHVyJiMyMzM7ZSBkZSBwcm90ZWN0aW9uIGRlcyBkcm9pdHMgcG9ydGFudCBzdXIgY2UgTG9naWNpZWwuCisKK0FydGljbGUgMyAtIEFDQ0VQVEFUSU9OCisKKzMuMSBMYGFjY2VwdGF0aW9uIHBhciBsZSBMaWNlbmNpJiMyMzM7IGRlcyB0ZXJtZXMgZHUgQ29udHJhdCBlc3QgciYjMjMzO3B1dCYjMjMzO2UgYWNxdWlzZSBkdSBmYWl0IGR1IHByZW1pZXIgZGVzIGZhaXRzIHN1aXZhbnRzOgorCisoaSkgbGUgY2hhcmdlbWVudCBkdSBMb2dpY2llbCBwYXIgdG91dCBtb3llbiBub3RhbW1lbnQgcGFyIHQmIzIzMztsJiMyMzM7Y2hhcmdlbWVudCAmIzIyNDsgcGFydGlyIGRgdW4gc2VydmV1ciBkaXN0YW50IG91IHBhciBjaGFyZ2VtZW50ICYjMjI0OyBwYXJ0aXIgZGB1biBzdXBwb3J0IHBoeXNpcXVlOworKGlpKSBsZSBwcmVtaWVyIGV4ZXJjaWNlIHBhciBsZSBMaWNlbmNpJiMyMzM7IGRlIGxgdW4gcXVlbGNvbnF1ZSBkZXMgZHJvaXRzIGNvbmMmIzIzMztkJiMyMzM7cyBwYXIgbGUgQ29udHJhdC4KKzMuMiBVbiBleGVtcGxhaXJlIGR1IENvbnRyYXQsIGNvbnRlbmFudCBub3RhbW1lbnQgdW4gYXZlcnRpc3NlbWVudCByZWxhdGlmIGF1eCBzcCYjMjMzO2NpZmljaXQmIzIzMztzIGR1IExvZ2ljaWVsLCAmIzIyNDsgbGEgcmVzdHJpY3Rpb24gZGUgZ2FyYW50aWUgZXQgJiMyMjQ7IGxhIGxpbWl0YXRpb24gJiMyMjQ7IHVuIHVzYWdlIHBhciBkZXMgdXRpbGlzYXRldXJzIGV4cCYjMjMzO3JpbWVudCYjMjMzO3MgYSAmIzIzMzt0JiMyMzM7IG1pcyAmIzIyNDsgZGlzcG9zaXRpb24gZHUgTGljZW5jaSYjMjMzOyBwciYjMjMzO2FsYWJsZW1lbnQgJiMyMjQ7IHNvbiBhY2NlcHRhdGlvbiB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllICYjMjI0OyBsYGFydGljbGUgMy4xIGNpIGRlc3N1cyBldCBsZSBMaWNlbmNpJiMyMzM7IHJlY29ubmEmIzIzODt0IGVuIGF2b2lyIHByaXMgY29ubmFpc3NhbmNlLgorCitBcnRpY2xlIDQgLSBFTlRSRUUgRU4gVklHVUVVUiBFVCBEVVJFRQorCis0LjEgRU5UUkVFIEVOIFZJR1VFVVIKKworTGUgQ29udHJhdCBlbnRyZSBlbiB2aWd1ZXVyICYjMjI0OyBsYSBkYXRlIGRlIHNvbiBhY2NlcHRhdGlvbiBwYXIgbGUgTGljZW5jaSYjMjMzOyB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllIGVuIDMuMS4KKworNC4yIERVUkVFCisKK0xlIENvbnRyYXQgcHJvZHVpcmEgc2VzIGVmZmV0cyBwZW5kYW50IHRvdXRlIGxhIGR1ciYjMjMzO2UgbCYjMjMzO2dhbGUgZGUgcHJvdGVjdGlvbiBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBwb3J0YW50IHN1ciBsZSBMb2dpY2llbC4KKworQXJ0aWNsZSA1IC0gRVRFTkRVRSBERVMgRFJPSVRTIENPTkNFREVTCisKK0xlIENvbmMmIzIzMztkYW50IGNvbmMmIzIzMjtkZSBhdSBMaWNlbmNpJiMyMzM7LCBxdWkgYWNjZXB0ZSwgbGVzIGRyb2l0cyBzdWl2YW50cyBzdXIgbGUgTG9naWNpZWwgcG91ciB0b3V0ZXMgZGVzdGluYXRpb25zIGV0IHBvdXIgbGEgZHVyJiMyMzM7ZSBkdSBDb250cmF0IGRhbnMgbGVzIGNvbmRpdGlvbnMgY2ktYXByJiMyMzI7cyBkJiMyMzM7dGFpbGwmIzIzMztlcy4KKworUGFyIGFpbGxldXJzLCBzaSBsZSBDb25jJiMyMzM7ZGFudCBkJiMyMzM7dGllbnQgb3UgdmVuYWl0ICYjMjI0OyBkJiMyMzM7dGVuaXIgdW4gb3UgcGx1c2lldXJzIGJyZXZldHMgZGBpbnZlbnRpb24gcHJvdCYjMjMzO2dlYW50IHRvdXQgb3UgcGFydGllIGRlcyBmb25jdGlvbm5hbGl0JiMyMzM7cyBkdSBMb2dpY2llbCBvdSBkZSBzZXMgY29tcG9zYW50cywgaWwgc2BlbmdhZ2UgJiMyMjQ7IG5lIHBhcyBvcHBvc2VyIGxlcyAmIzIzMzt2ZW50dWVscyBkcm9pdHMgY29uZiYjMjMzO3ImIzIzMztzIHBhciBjZXMgYnJldmV0cyBhdXggTGljZW5jaSYjMjMzO3Mgc3VjY2Vzc2lmcyBxdWkgdXRpbGlzZXJhaWVudCwgZXhwbG9pdGVyYWllbnQgb3UgbW9kaWZpZXJhaWVudCBsZSBMb2dpY2llbC4gRW4gY2FzIGRlIGNlc3Npb24gZGUgY2VzIGJyZXZldHMsIGxlIENvbmMmIzIzMztkYW50IHNgZW5nYWdlICYjMjI0OyBmYWlyZSByZXByZW5kcmUgbGVzIG9ibGlnYXRpb25zIGR1IHByJiMyMzM7c2VudCBhbGluJiMyMzM7YSBhdXggY2Vzc2lvbm5haXJlcy4KKworNS4xIERST0lUIERgVVRJTElTQVRJT04KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgdXRpbGlzZXIgbGUgTG9naWNpZWwsIHNhbnMgcmVzdHJpY3Rpb24gcXVhbnQgYXV4IGRvbWFpbmVzIGRgYXBwbGljYXRpb24sICYjMjMzO3RhbnQgY2ktYXByJiMyMzI7cyBwciYjMjMzO2NpcyYjMjMzOyBxdWUgY2VsYSBjb21wb3J0ZToKKworbGEgcmVwcm9kdWN0aW9uIHBlcm1hbmVudGUgb3UgcHJvdmlzb2lyZSBkdSBMb2dpY2llbCBlbiB0b3V0IG91IHBhcnRpZSBwYXIgdG91dCBtb3llbiBldCBzb3VzIHRvdXRlIGZvcm1lLgorCitsZSBjaGFyZ2VtZW50LCBsYGFmZmljaGFnZSwgbGBleCYjMjMzO2N1dGlvbiwgb3UgbGUgc3RvY2thZ2UgZHUgTG9naWNpZWwgc3VyIHRvdXQgc3VwcG9ydC4KKworbGEgcG9zc2liaWxpdCYjMjMzOyBkYGVuIG9ic2VydmVyLCBkYGVuICYjMjMzO3R1ZGllciwgb3UgZGBlbiB0ZXN0ZXIgbGUgZm9uY3Rpb25uZW1lbnQgYWZpbiBkZSBkJiMyMzM7dGVybWluZXIgbGVzIGlkJiMyMzM7ZXMgZXQgcHJpbmNpcGVzIHF1aSBzb250ICYjMjI0OyBsYSBiYXNlIGRlIG5gaW1wb3J0ZSBxdWVsICYjMjMzO2wmIzIzMzttZW50IGRlIGNlIExvZ2ljaWVsOyBldCBjZWNpLCBsb3JzcXVlIGxlIExpY2VuY2kmIzIzMzsgZWZmZWN0dWUgdG91dGUgb3AmIzIzMztyYXRpb24gZGUgY2hhcmdlbWVudCwgZGBhZmZpY2hhZ2UsIGRgZXgmIzIzMztjdXRpb24sIGRlIHRyYW5zbWlzc2lvbiBvdSBkZSBzdG9ja2FnZSBkdSBMb2dpY2llbCBxdWBpbCBlc3QgZW4gZHJvaXQgZGBlZmZlY3R1ZXIgZW4gdmVydHUgZHUgQ29udHJhdC4KKworNS4yIERST0lUIERgQVBQT1JURVIgREVTIENPTlRSSUJVVElPTlMKKworTGUgZHJvaXQgZGBhcHBvcnRlciBkZXMgQ29udHJpYnV0aW9ucyBjb21wb3J0ZSBsZSBkcm9pdCBkZSB0cmFkdWlyZSwgZGBhZGFwdGVyLCBkYGFycmFuZ2VyIG91IGRgYXBwb3J0ZXIgdG91dGUgYXV0cmUgbW9kaWZpY2F0aW9uIGF1IExvZ2ljaWVsIGV0IGxlIGRyb2l0IGRlIHJlcHJvZHVpcmUgbGUgbG9naWNpZWwgZW4gciYjMjMzO3N1bHRhbnQuCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IGFwcG9ydGVyIHRvdXRlIENvbnRyaWJ1dGlvbiBhdSBMb2dpY2llbCBzb3VzIHImIzIzMztzZXJ2ZSBkZSBtZW50aW9ubmVyLCBkZSBmYSYjMjMxO29uIGV4cGxpY2l0ZSwgc29uIG5vbSBlbiB0YW50IHF1YGF1dGV1ciBkZSBjZXR0ZSBDb250cmlidXRpb24gZXQgbGEgZGF0ZSBkZSBjciYjMjMzO2F0aW9uIGRlIGNlbGxlLWNpLgorCis1LjMgRFJPSVQgREUgRElTVFJJQlVUSU9OCisKK0xlIGRyb2l0IGRlIGRpc3RyaWJ1dGlvbiBjb21wb3J0ZSBub3RhbW1lbnQgbGUgZHJvaXQgZGUgZGlmZnVzZXIsIGRlIHRyYW5zbWV0dHJlIGV0IGRlIGNvbW11bmlxdWVyIGxlIExvZ2ljaWVsIGF1IHB1YmxpYyBzdXIgdG91dCBzdXBwb3J0IGV0IHBhciB0b3V0IG1veWVuIGFpbnNpIHF1ZSBsZSBkcm9pdCBkZSBtZXR0cmUgc3VyIGxlIG1hcmNoJiMyMzM7ICYjMjI0OyB0aXRyZSBvbiYjMjMzO3JldXggb3UgZ3JhdHVpdCwgdW4gb3UgZGVzIGV4ZW1wbGFpcmVzIGR1IExvZ2ljaWVsIHBhciB0b3V0IHByb2MmIzIzMztkJiMyMzM7LgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyBkaXN0cmlidWVyIGRlcyBjb3BpZXMgZHUgTG9naWNpZWwsIG1vZGlmaSYjMjMzOyBvdSBub24sICYjMjI0OyBkZXMgdGllcnMgZGFucyBsZXMgY29uZGl0aW9ucyBjaS1hcHImIzIzMjtzIGQmIzIzMzt0YWlsbCYjMjMzO2VzLgorCis1LjMuMSBESVNUUklCVVRJT04gRFUgTE9HSUNJRUwgU0FOUyBNT0RJRklDQVRJT04KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgZGlzdHJpYnVlciBkZXMgY29waWVzIGNvbmZvcm1lcyBkdSBMb2dpY2llbCwgc291cyBmb3JtZSBkZSBDb2RlIFNvdXJjZSBvdSBkZSBDb2RlIE9iamV0LCAmIzIyNDsgY29uZGl0aW9uIHF1ZSBjZXR0ZSBkaXN0cmlidXRpb24gcmVzcGVjdGUgbGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IGRhbnMgbGV1ciB0b3RhbGl0JiMyMzM7IGV0IHNvaXQgYWNjb21wYWduJiMyMzM7ZToKKworZGB1biBleGVtcGxhaXJlIGR1IENvbnRyYXQsCisKK2RgdW4gYXZlcnRpc3NlbWVudCByZWxhdGlmICYjMjI0OyBsYSByZXN0cmljdGlvbiBkZSBnYXJhbnRpZSBldCBkZSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IHRlbGxlIHF1ZSBwciYjMjMzO3Z1ZSBhdXggYXJ0aWNsZXMgOCBldCA5LAorCitldCBxdWUsIGRhbnMgbGUgY2FzIG8mIzI0OTsgc2V1bCBsZSBDb2RlIE9iamV0IGR1IExvZ2ljaWVsIGVzdCByZWRpc3RyaWJ1JiMyMzM7LCBsZSBMaWNlbmNpJiMyMzM7IHBlcm1ldHRlIGF1eCBmdXR1cnMgTGljZW5jaSYjMjMzO3MgZGBhY2MmIzIzMztkZXIgZmFjaWxlbWVudCBhdSBDb2RlIFNvdXJjZSBjb21wbGV0IGR1IExvZ2ljaWVsIGVuIGluZGlxdWFudCBsZXMgbW9kYWxpdCYjMjMzO3MgZGBhY2MmIzIzMjtzLCAmIzIzMzt0YW50IGVudGVuZHUgcXVlIGxlIGNvJiMyNTE7dCBhZGRpdGlvbm5lbCBkYGFjcXVpc2l0aW9uIGR1IENvZGUgU291cmNlIG5lIGRldnJhIHBhcyBleGMmIzIzMztkZXIgbGUgc2ltcGxlIGNvJiMyNTE7dCBkZSB0cmFuc2ZlcnQgZGVzIGRvbm4mIzIzMztlcy4KKworNS4zLjIgRElTVFJJQlVUSU9OIERVIExPR0lDSUVMIE1PRElGSUUKKworTG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGFwcG9ydGUgdW5lIENvbnRyaWJ1dGlvbiBhdSBMb2dpY2llbCwgbGVzIGNvbmRpdGlvbnMgZGUgZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBlbiByJiMyMzM7c3VsdGFudCBzb250IGFsb3JzIHNvdW1pc2VzICYjMjI0OyBsYGludCYjMjMzO2dyYWxpdCYjMjMzOyBkZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQuCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IGRpc3RyaWJ1ZXIgbGUgTG9naWNpZWwgTW9kaWZpJiMyMzM7LCBzb3VzIGZvcm1lIGRlIGNvZGUgc291cmNlIG91IGRlIGNvZGUgb2JqZXQsICYjMjI0OyBjb25kaXRpb24gcXVlIGNldHRlIGRpc3RyaWJ1dGlvbiByZXNwZWN0ZSBsZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgZGFucyBsZXVyIHRvdGFsaXQmIzIzMzsgZXQgc29pdCBhY2NvbXBhZ24mIzIzMztlOgorCitkYHVuIGV4ZW1wbGFpcmUgZHUgQ29udHJhdCwKKworZGB1biBhdmVydGlzc2VtZW50IHJlbGF0aWYgJiMyMjQ7IGxhIHJlc3RyaWN0aW9uIGRlIGdhcmFudGllIGV0IGRlIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgdGVsbGUgcXVlIHByJiMyMzM7dnVlIGF1eCBhcnRpY2xlcyA4IGV0IDksCisKK2V0IHF1ZSwgZGFucyBsZSBjYXMgbyYjMjQ5OyBzZXVsIGxlIGNvZGUgb2JqZXQgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGVzdCByZWRpc3RyaWJ1JiMyMzM7LCBsZSBMaWNlbmNpJiMyMzM7IHBlcm1ldHRlIGF1eCBmdXR1cnMgTGljZW5jaSYjMjMzO3MgZGBhY2MmIzIzMztkZXIgZmFjaWxlbWVudCBhdSBjb2RlIHNvdXJjZSBjb21wbGV0IGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBlbiBpbmRpcXVhbnQgbGVzIG1vZGFsaXQmIzIzMztzIGRgYWNjJiMyMzI7cywgJiMyMzM7dGFudCBlbnRlbmR1IHF1ZSBsZSBjbyYjMjUxO3QgYWRkaXRpb25uZWwgZGBhY3F1aXNpdGlvbiBkdSBjb2RlIHNvdXJjZSBuZSBkZXZyYSBwYXMgZXhjJiMyMzM7ZGVyIGxlIHNpbXBsZSBjbyYjMjUxO3QgZGUgdHJhbnNmZXJ0IGRlcyBkb25uJiMyMzM7ZXMuCisKKzUuMy4zIERJU1RSSUJVVElPTiBERVMgTU9EVUxFUyBFWFRFUk5FUworCitMb3JzcXVlIGxlIExpY2VuY2kmIzIzMzsgYSBkJiMyMzM7dmVsb3BwJiMyMzM7IHVuIE1vZHVsZSBFeHRlcm5lIGxlcyBjb25kaXRpb25zIGR1IENvbnRyYXQgbmUgc2BhcHBsaXF1ZW50IHBhcyAmIzIyNDsgY2UgTW9kdWxlIEV4dGVybmUsIHF1aSBwZXV0ICYjMjM0O3RyZSBkaXN0cmlidSYjMjMzOyBzb3VzIHVuIGNvbnRyYXQgZGUgbGljZW5jZSBkaWZmJiMyMzM7cmVudC4KKworNS4zLjQgQ09NUEFUSUJJTElURSBBVkVDIExBIExJQ0VOQ0UgR05VIEdQTAorCitMZSBMaWNlbmNpJiMyMzM7IHBldXQgaW5jbHVyZSB1biBjb2RlIHNvdW1pcyBhdXggZGlzcG9zaXRpb25zIGRgdW5lIGRlcyB2ZXJzaW9ucyBkZSBsYSBsaWNlbmNlIEdOVSBHUEwgZGFucyBsZSBMb2dpY2llbCBtb2RpZmkmIzIzMzsgb3Ugbm9uIGV0IGRpc3RyaWJ1ZXIgbGBlbnNlbWJsZSBzb3VzIGxlcyBjb25kaXRpb25zIGRlIGxhIG0mIzIzNDttZSB2ZXJzaW9uIGRlIGxhIGxpY2VuY2UgR05VIEdQTC4KKworTGUgTGljZW5jaSYjMjMzOyBwZXV0IGluY2x1cmUgbGUgTG9naWNpZWwgbW9kaWZpJiMyMzM7IG91IG5vbiBkYW5zIHVuIGNvZGUgc291bWlzIGF1eCBkaXNwb3NpdGlvbnMgZGB1bmUgZGVzIHZlcnNpb25zIGRlIGxhIGxpY2VuY2UgR05VIEdQTCBldCBkaXN0cmlidWVyIGxgZW5zZW1ibGUgc291cyBsZXMgY29uZGl0aW9ucyBkZSBsYSBtJiMyMzQ7bWUgdmVyc2lvbiBkZSBsYSBsaWNlbmNlIEdOVSBHUEwuCisKK0FydGljbGUgNiAtIFBST1BSSUVURSBJTlRFTExFQ1RVRUxMRQorCis2LjEgU1VSIExFIExPR0lDSUVMIElOSVRJQUwKKworTGUgVGl0dWxhaXJlIGVzdCBkJiMyMzM7dGVudGV1ciBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBzdXIgbGUgTG9naWNpZWwgSW5pdGlhbC4gVG91dGUgdXRpbGlzYXRpb24gZHUgTG9naWNpZWwgSW5pdGlhbCBlc3Qgc291bWlzZSBhdSByZXNwZWN0IGRlcyBjb25kaXRpb25zIGRhbnMgbGVzcXVlbGxlcyBsZSBUaXR1bGFpcmUgYSBjaG9pc2kgZGUgZGlmZnVzZXIgc29uIG9ldXZyZSBldCBudWwgYXV0cmUgbmBhIGxhIGZhY3VsdCYjMjMzOyBkZSBtb2RpZmllciBsZXMgY29uZGl0aW9ucyBkZSBkaWZmdXNpb24gZGUgY2UgTG9naWNpZWwgSW5pdGlhbC4KKworTGUgVGl0dWxhaXJlIHNgZW5nYWdlICYjMjI0OyBjZSBxdWUgbGUgTG9naWNpZWwgSW5pdGlhbCByZXN0ZSBhdSBtb2lucyByJiMyMzM7Z2kgcGFyIGxlIENvbnRyYXQgZXQgY2UsIHBvdXIgbGEgZHVyJiMyMzM7ZSB2aXMmIzIzMztlICYjMjI0OyBsYGFydGljbGUgNC4yLgorCis2LjIgU1VSIExFUyBDT05UUklCVVRJT05TCisKK0xlIExpY2VuY2kmIzIzMzsgcXVpIGEgZCYjMjMzO3ZlbG9wcCYjMjMzOyB1bmUgQ29udHJpYnV0aW9uIGVzdCB0aXR1bGFpcmUgc3VyIGNlbGxlLWNpIGRlcyBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkYW5zIGxlcyBjb25kaXRpb25zIGQmIzIzMztmaW5pZXMgcGFyIGxhIGwmIzIzMztnaXNsYXRpb24gYXBwbGljYWJsZS4KKworNi4zIFNVUiBMRVMgTU9EVUxFUyBFWFRFUk5FUworCitMZSBMaWNlbmNpJiMyMzM7IHF1aSBhIGQmIzIzMzt2ZWxvcHAmIzIzMzsgdW4gTW9kdWxlIEV4dGVybmUgZXN0IHRpdHVsYWlyZSBzdXIgY2VsdWktY2kgZGVzIGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGRhbnMgbGVzIGNvbmRpdGlvbnMgZCYjMjMzO2ZpbmllcyBwYXIgbGEgbCYjMjMzO2dpc2xhdGlvbiBhcHBsaWNhYmxlIGV0IHJlc3RlIGxpYnJlIGR1IGNob2l4IGR1IGNvbnRyYXQgciYjMjMzO2dpc3NhbnQgc2EgZGlmZnVzaW9uLgorCis2LjQgRElTUE9TSVRJT05TIENPTU1VTkVTCisKK0xlIExpY2VuY2kmIzIzMzsgc2BlbmdhZ2UgZXhwcmVzcyYjMjMzO21lbnQ6CisKKyYjMjI0OyBuZSBwYXMgc3VwcHJpbWVyIG91IG1vZGlmaWVyIGRlIHF1ZWxxdWUgbWFuaSYjMjMyO3JlIHF1ZSBjZSBzb2l0IGxlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGFwcG9zJiMyMzM7ZXMgc3VyIGxlIExvZ2ljaWVsOworCismIzIyNDsgcmVwcm9kdWlyZSAmIzIyNDsgbGBpZGVudGlxdWUgbGVzZGl0ZXMgbWVudGlvbnMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBzdXIgbGVzIGNvcGllcyBkdSBMb2dpY2llbCBtb2RpZmkmIzIzMzsgb3Ugbm9uLgorCitMZSBMaWNlbmNpJiMyMzM7IHNgZW5nYWdlICYjMjI0OyBuZSBwYXMgcG9ydGVyIGF0dGVpbnRlLCBkaXJlY3RlbWVudCBvdSBpbmRpcmVjdGVtZW50LCBhdXggZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZHUgVGl0dWxhaXJlIGV0L291IGRlcyBDb250cmlidXRldXJzIHN1ciBsZSBMb2dpY2llbCBldCAmIzIyNDsgcHJlbmRyZSwgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50LCAmIzIyNDsgbGAmIzIzMztnYXJkIGRlIHNvbiBwZXJzb25uZWwgdG91dGVzIGxlcyBtZXN1cmVzIG4mIzIzMztjZXNzYWlyZXMgcG91ciBhc3N1cmVyIGxlIHJlc3BlY3QgZGVzIGRpdHMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZHUgVGl0dWxhaXJlIGV0L291IGRlcyBDb250cmlidXRldXJzLgorCitBcnRpY2xlIDcgLSBTRVJWSUNFUyBBU1NPQ0lFUworCis3LjEgTGUgQ29udHJhdCBuYG9ibGlnZSBlbiBhdWN1biBjYXMgbGUgQ29uYyYjMjMzO2RhbnQgJiMyMjQ7IGxhIHImIzIzMzthbGlzYXRpb24gZGUgcHJlc3RhdGlvbnMgZGBhc3Npc3RhbmNlIHRlY2huaXF1ZSBvdSBkZSBtYWludGVuYW5jZSBkdSBMb2dpY2llbC4KKworQ2VwZW5kYW50IGxlIENvbmMmIzIzMztkYW50IHJlc3RlIGxpYnJlIGRlIHByb3Bvc2VyIGNlIHR5cGUgZGUgc2VydmljZXMuIExlcyB0ZXJtZXMgZXQgY29uZGl0aW9ucyBkYHVuZSB0ZWxsZSBhc3Npc3RhbmNlIHRlY2huaXF1ZSBldC9vdSBkYHVuZSB0ZWxsZSBtYWludGVuYW5jZSBzZXJvbnQgYWxvcnMgZCYjMjMzO3Rlcm1pbiYjMjMzO3MgZGFucyB1biBhY3RlIHMmIzIzMztwYXImIzIzMzsuIENlcyBhY3RlcyBkZSBtYWludGVuYW5jZSBldC9vdSBhc3Npc3RhbmNlIHRlY2huaXF1ZSBuYGVuZ2FnZXJvbnQgcXVlIGxhIHNldWxlIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgcXVpIGxlcyBwcm9wb3NlLgorCis3LjIgRGUgbSYjMjM0O21lLCB0b3V0IENvbmMmIzIzMztkYW50IGVzdCBsaWJyZSBkZSBwcm9wb3Nlciwgc291cyBzYSBzZXVsZSByZXNwb25zYWJpbGl0JiMyMzM7LCAmIzIyNDsgc2VzIGxpY2VuY2kmIzIzMztzIHVuZSBnYXJhbnRpZSwgcXVpIG5gZW5nYWdlcmEgcXVlIGx1aSwgbG9ycyBkZSBsYSByZWRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbCBldC9vdSBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgZXQgY2UsIGRhbnMgbGVzIGNvbmRpdGlvbnMgcXVgaWwgc291aGFpdGUuIENldHRlIGdhcmFudGllIGV0IGxlcyBtb2RhbGl0JiMyMzM7cyBmaW5hbmNpJiMyMzI7cmVzIGRlIHNvbiBhcHBsaWNhdGlvbiBmZXJvbnQgbGBvYmpldCBkYHVuIGFjdGUgcyYjMjMzO3BhciYjMjMzOyBlbnRyZSBsZSBDb25jJiMyMzM7ZGFudCBldCBsZSBMaWNlbmNpJiMyMzM7LgorCitBcnRpY2xlIDggLSBSRVNQT05TQUJJTElURQorCis4LjEgU291cyByJiMyMzM7c2VydmUgZGVzIGRpc3Bvc2l0aW9ucyBkZSBsYGFydGljbGUgOC4yLCBsZSBMaWNlbmNpJiMyMzM7IGEgbGEgZmFjdWx0JiMyMzM7LCBzb3VzIHImIzIzMztzZXJ2ZSBkZSBwcm91dmVyIGxhIGZhdXRlIGR1IENvbmMmIzIzMztkYW50IGNvbmNlcm4mIzIzMzssIGRlIHNvbGxpY2l0ZXIgbGEgciYjMjMzO3BhcmF0aW9uIGR1IHByJiMyMzM7anVkaWNlIGRpcmVjdCBxdWBpbCBzdWJpcmFpdCBkdSBmYWl0IGR1IExvZ2ljaWVsIGV0IGRvbnQgaWwgYXBwb3J0ZXJhIGxhIHByZXV2ZS4KKworOC4yIExhIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgZXN0IGxpbWl0JiMyMzM7ZSBhdXggZW5nYWdlbWVudHMgcHJpcyBlbiBhcHBsaWNhdGlvbiBkdSBDb250cmF0IGV0IG5lIHNhdXJhaXQgJiMyMzQ7dHJlIGVuZ2FnJiMyMzM7ZSBlbiByYWlzb24gbm90YW1tZW50OiAoaSkgZGVzIGRvbW1hZ2VzIGR1cyAmIzIyNDsgbGBpbmV4JiMyMzM7Y3V0aW9uLCB0b3RhbGUgb3UgcGFydGllbGxlLCBkZSBzZXMgb2JsaWdhdGlvbnMgcGFyIGxlIExpY2VuY2kmIzIzMzssIChpaSkgZGVzIGRvbW1hZ2VzIGRpcmVjdHMgb3UgaW5kaXJlY3RzIGQmIzIzMztjb3VsYW50IGRlIGxgdXRpbGlzYXRpb24gb3UgZGVzIHBlcmZvcm1hbmNlcyBkdSBMb2dpY2llbCBzdWJpcyBwYXIgbGUgTGljZW5jaSYjMjMzOyBldCAoaWlpKSBwbHVzIGcmIzIzMztuJiMyMzM7cmFsZW1lbnQgZGB1biBxdWVsY29ucXVlIGRvbW1hZ2UgaW5kaXJlY3QuIEVuIHBhcnRpY3VsaWVyLCBsZXMgUGFydGllcyBjb252aWVubmVudCBleHByZXNzJiMyMzM7bWVudCBxdWUgdG91dCBwciYjMjMzO2p1ZGljZSBmaW5hbmNpZXIgb3UgY29tbWVyY2lhbCAocGFyIGV4ZW1wbGUgcGVydGUgZGUgZG9ubiYjMjMzO2VzLCBwZXJ0ZSBkZSBiJiMyMzM7biYjMjMzO2ZpY2VzLCBwZXJ0ZSBkYGV4cGxvaXRhdGlvbiwgcGVydGUgZGUgY2xpZW50JiMyMzI7bGUgb3UgZGUgY29tbWFuZGVzLCBtYW5xdWUgJiMyMjQ7IGdhZ25lciwgdHJvdWJsZSBjb21tZXJjaWFsIHF1ZWxjb25xdWUpIG91IHRvdXRlIGFjdGlvbiBkaXJpZyYjMjMzO2UgY29udHJlIGxlIExpY2VuY2kmIzIzMzsgcGFyIHVuIHRpZXJzLCBjb25zdGl0dWUgdW4gZG9tbWFnZSBpbmRpcmVjdCBldCBuYG91dnJlIHBhcyBkcm9pdCAmIzIyNDsgciYjMjMzO3BhcmF0aW9uIHBhciBsZSBDb25jJiMyMzM7ZGFudC4KKworQXJ0aWNsZSA5IC0gR0FSQU5USUUKKworOS4xIExlIExpY2VuY2kmIzIzMzsgcmVjb25uYSYjMjM4O3QgcXVlIGxgJiMyMzM7dGF0IGFjdHVlbCBkZXMgY29ubmFpc3NhbmNlcyBzY2llbnRpZmlxdWVzIGV0IHRlY2huaXF1ZXMgYXUgbW9tZW50IGRlIGxhIG1pc2UgZW4gY2lyY3VsYXRpb24gZHUgTG9naWNpZWwgbmUgcGVybWV0IHBhcyBkYGVuIHRlc3RlciBldCBkYGVuIHYmIzIzMztyaWZpZXIgdG91dGVzIGxlcyB1dGlsaXNhdGlvbnMgbmkgZGUgZCYjMjMzO3RlY3RlciBsYGV4aXN0ZW5jZSBkYCYjMjMzO3ZlbnR1ZWxzIGQmIzIzMztmYXV0cy4gTGBhdHRlbnRpb24gZHUgTGljZW5jaSYjMjMzOyBhICYjMjMzO3QmIzIzMzsgYXR0aXImIzIzMztlIHN1ciBjZSBwb2ludCBzdXIgbGVzIHJpc3F1ZXMgYXNzb2NpJiMyMzM7cyBhdSBjaGFyZ2VtZW50LCAmIzIyNDsgbGB1dGlsaXNhdGlvbiwgbGEgbW9kaWZpY2F0aW9uIGV0L291IGF1IGQmIzIzMzt2ZWxvcHBlbWVudCBldCAmIzIyNDsgbGEgcmVwcm9kdWN0aW9uIGR1IExvZ2ljaWVsIHF1aSBzb250IHImIzIzMztzZXJ2JiMyMzM7cyAmIzIyNDsgZGVzIHV0aWxpc2F0ZXVycyBhdmVydGlzLgorCitJbCByZWwmIzIzMjt2ZSBkZSBsYSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IExpY2VuY2kmIzIzMzsgZGUgY29udHImIzI0NDtsZXIsIHBhciB0b3VzIG1veWVucywgbGBhZCYjMjMzO3F1YXRpb24gZHUgcHJvZHVpdCAmIzIyNDsgc2VzIGJlc29pbnMsIHNvbiBib24gZm9uY3Rpb25uZW1lbnQgZXQgZGUgc2Bhc3N1cmVyIHF1YGlsIG5lIGNhdXNlcmEgcGFzIGRlIGRvbW1hZ2VzIGF1eCBwZXJzb25uZXMgZXQgYXV4IGJpZW5zLgorCis5LjIgTGUgQ29uYyYjMjMzO2RhbnQgZCYjMjMzO2NsYXJlIGRlIGJvbm5lIGZvaSAmIzIzNDt0cmUgZW4gZHJvaXQgZGUgY29uYyYjMjMzO2RlciBsYGVuc2VtYmxlIGRlcyBkcm9pdHMgYXR0YWNoJiMyMzM7cyBhdSBMb2dpY2llbCAoY29tcHJlbmFudCBub3RhbW1lbnQgbGVzIGRyb2l0cyB2aXMmIzIzMztzICYjMjI0OyBsYGFydGljbGUgNSkuCisKKzkuMyBMZSBMaWNlbmNpJiMyMzM7IHJlY29ubmEmIzIzODt0IHF1ZSBsZSBMb2dpY2llbCBlc3QgZm91cm5pICJlbiBsYCYjMjMzO3RhdCIgcGFyIGxlIENvbmMmIzIzMztkYW50IHNhbnMgYXV0cmUgZ2FyYW50aWUsIGV4cHJlc3NlIG91IHRhY2l0ZSwgcXVlIGNlbGxlIHByJiMyMzM7dnVlICYjMjI0OyBsYGFydGljbGUgOS4yIGV0IG5vdGFtbWVudCBzYW5zIGF1Y3VuZSBnYXJhbnRpZSBzdXIgc2EgdmFsZXVyIGNvbW1lcmNpYWxlLCBzb24gY2FyYWN0JiMyMzI7cmUgcyYjMjMzO2N1cmlzJiMyMzM7LCBpbm5vdmFudCBvdSBwZXJ0aW5lbnQuCisKK0VuIHBhcnRpY3VsaWVyLCBsZSBDb25jJiMyMzM7ZGFudCBuZSBnYXJhbnRpdCBwYXMgcXVlIGxlIExvZ2ljaWVsIGVzdCBleGVtcHQgZGBlcnJldXIsIHF1YGlsIGZvbmN0aW9ubmVyYSBzYW5zIGludGVycnVwdGlvbiwgcXVgaWwgc2VyYSBjb21wYXRpYmxlIGF2ZWMgbGAmIzIzMztxdWlwZW1lbnQgZHUgTGljZW5jaSYjMjMzOyBldCBzYSBjb25maWd1cmF0aW9uIGxvZ2ljaWVsbGUgbmkgcXVgaWwgcmVtcGxpcmEgbGVzIGJlc29pbnMgZHUgTGljZW5jaSYjMjMzOy4KKworOS40IExlIENvbmMmIzIzMztkYW50IG5lIGdhcmFudGl0IHBhcywgZGUgbWFuaSYjMjMyO3JlIGV4cHJlc3NlIG91IHRhY2l0ZSwgcXVlIGxlIExvZ2ljaWVsIG5lIHBvcnRlIHBhcyBhdHRlaW50ZSAmIzIyNDsgdW4gcXVlbGNvbnF1ZSBkcm9pdCBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGRgdW4gdGllcnMgcG9ydGFudCBzdXIgdW4gYnJldmV0LCB1biBsb2dpY2llbCBvdSBzdXIgdG91dCBhdXRyZSBkcm9pdCBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7LiBBaW5zaSwgbGUgQ29uYyYjMjMzO2RhbnQgZXhjbHV0IHRvdXRlIGdhcmFudGllIGF1IHByb2ZpdCBkdSBMaWNlbmNpJiMyMzM7IGNvbnRyZSBsZXMgYWN0aW9ucyBlbiBjb250cmVmYSYjMjMxO29uIHF1aSBwb3VycmFpZW50ICYjMjM0O3RyZSBkaWxpZ2VudCYjMjMzO2VzIGF1IHRpdHJlIGRlIGxgdXRpbGlzYXRpb24sIGRlIGxhIG1vZGlmaWNhdGlvbiwgZXQgZGUgbGEgcmVkaXN0cmlidXRpb24gZHUgTG9naWNpZWwuIE4mIzIzMzthbm1vaW5zLCBzaSBkZSB0ZWxsZXMgYWN0aW9ucyBzb250IGV4ZXJjJiMyMzM7ZXMgY29udHJlIGxlIExpY2VuY2kmIzIzMzssIGxlIENvbmMmIzIzMztkYW50IGx1aSBhcHBvcnRlcmEgc29uIGFpZGUgdGVjaG5pcXVlIGV0IGp1cmlkaXF1ZSBwb3VyIHNhIGQmIzIzMztmZW5zZS4gQ2V0dGUgYWlkZSB0ZWNobmlxdWUgZXQganVyaWRpcXVlIGVzdCBkJiMyMzM7dGVybWluJiMyMzM7ZSBhdSBjYXMgcGFyIGNhcyBlbnRyZSBsZSBDb25jJiMyMzM7ZGFudCBjb25jZXJuJiMyMzM7IGV0IGxlIExpY2VuY2kmIzIzMzsgZGFucyBsZSBjYWRyZSBkYHVuIHByb3RvY29sZSBkYGFjY29yZC4gTGUgQ29uYyYjMjMzO2RhbnQgZCYjMjMzO2dhZ2UgdG91dGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBxdWFudCAmIzIyNDsgbGB1dGlsaXNhdGlvbiBkZSBsYSBkJiMyMzM7bm9taW5hdGlvbiBkdSBMb2dpY2llbCBwYXIgbGUgTGljZW5jaSYjMjMzOy4gQXVjdW5lIGdhcmFudGllIG5gZXN0IGFwcG9ydCYjMjMzO2UgcXVhbnQgJiMyMjQ7IGxgZXhpc3RlbmNlIGRlIGRyb2l0cyBhbnQmIzIzMztyaWV1cnMgc3VyIGxlIG5vbSBkdSBMb2dpY2llbCBldCBzdXIgbGBleGlzdGVuY2UgZGB1bmUgbWFycXVlLgorCitBcnRpY2xlIDEwIC0gUkVTSUxJQVRJT04KKworMTAuMSBFbiBjYXMgZGUgbWFucXVlbWVudCBwYXIgbGUgTGljZW5jaSYjMjMzOyBhdXggb2JsaWdhdGlvbnMgbWlzZXMgJiMyMjQ7IHNhIGNoYXJnZSBwYXIgbGUgQ29udHJhdCwgbGUgQ29uYyYjMjMzO2RhbnQgcG91cnJhIHImIzIzMztzaWxpZXIgZGUgcGxlaW4gZHJvaXQgbGUgQ29udHJhdCB0cmVudGUgKDMwKSBqb3VycyBhcHImIzIzMjtzIG5vdGlmaWNhdGlvbiBhZHJlc3MmIzIzMztlIGF1IExpY2VuY2kmIzIzMzsgZXQgcmVzdCYjMjMzO2Ugc2FucyBlZmZldC4KKworMTAuMiBMZSBMaWNlbmNpJiMyMzM7IGRvbnQgbGUgQ29udHJhdCBlc3QgciYjMjMzO3NpbGkmIzIzMzsgbmBlc3QgcGx1cyBhdXRvcmlzJiMyMzM7ICYjMjI0OyB1dGlsaXNlciwgbW9kaWZpZXIgb3UgZGlzdHJpYnVlciBsZSBMb2dpY2llbC4gQ2VwZW5kYW50LCB0b3V0ZXMgbGVzIGxpY2VuY2VzIHF1YGlsIGF1cmEgY29uYyYjMjMzO2QmIzIzMztlcyBhbnQmIzIzMztyaWV1cmVtZW50ICYjMjI0OyBsYSByJiMyMzM7c2lsaWF0aW9uIGR1IENvbnRyYXQgcmVzdGVyb250IHZhbGlkZXMgc291cyByJiMyMzM7c2VydmUgcXVgZWxsZXMgYWllbnQgJiMyMzM7dCYjMjMzOyBlZmZlY3R1JiMyMzM7ZXMgZW4gY29uZm9ybWl0JiMyMzM7IGF2ZWMgbGUgQ29udHJhdC4KKworQXJ0aWNsZSAxMSAtIERJU1BPU0lUSU9OUyBESVZFUlNFUworCisxMS4xIENBVVNFIEVYVEVSSUVVUkUKKworQXVjdW5lIGRlcyBQYXJ0aWVzIG5lIHNlcmEgcmVzcG9uc2FibGUgZGB1biByZXRhcmQgb3UgZGB1bmUgZCYjMjMzO2ZhaWxsYW5jZSBkYGV4JiMyMzM7Y3V0aW9uIGR1IENvbnRyYXQgcXVpIHNlcmFpdCBkJiMyNTE7ICYjMjI0OyB1biBjYXMgZGUgZm9yY2UgbWFqZXVyZSwgdW4gY2FzIGZvcnR1aXQgb3UgdW5lIGNhdXNlIGV4dCYjMjMzO3JpZXVyZSwgdGVsbGUgcXVlLCBub3RhbW1lbnQsIGxlIG1hdXZhaXMgZm9uY3Rpb25uZW1lbnQgb3UgbGVzIGludGVycnVwdGlvbnMgZHUgciYjMjMzO3NlYXUgJiMyMzM7bGVjdHJpcXVlIG91IGRlIHQmIzIzMztsJiMyMzM7Y29tbXVuaWNhdGlvbiwgbGEgcGFyYWx5c2llIGR1IHImIzIzMztzZWF1IGxpJiMyMzM7ZSAmIzIyNDsgdW5lIGF0dGFxdWUgaW5mb3JtYXRpcXVlLCBsYGludGVydmVudGlvbiBkZXMgYXV0b3JpdCYjMjMzO3MgZ291dmVybmVtZW50YWxlcywgbGVzIGNhdGFzdHJvcGhlcyBuYXR1cmVsbGVzLCBsZXMgZCYjMjMzO2cmIzIyNjt0cyBkZXMgZWF1eCwgbGVzIHRyZW1ibGVtZW50cyBkZSB0ZXJyZSwgbGUgZmV1LCBsZXMgZXhwbG9zaW9ucywgbGVzIGdyJiMyMzI7dmVzIGV0IGxlcyBjb25mbGl0cyBzb2NpYXV4LCBsYCYjMjMzO3RhdCBkZSBndWVycmUuLi4KKworMTEuMiBMZSBmYWl0LCBwYXIgbGB1bmUgb3UgbGBhdXRyZSBkZXMgUGFydGllcywgZGBvbWV0dHJlIGVuIHVuZSBvdSBwbHVzaWV1cnMgb2NjYXNpb25zIGRlIHNlIHByJiMyMzM7dmFsb2lyIGRgdW5lIG91IHBsdXNpZXVycyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCwgbmUgcG91cnJhIGVuIGF1Y3VuIGNhcyBpbXBsaXF1ZXIgcmVub25jaWF0aW9uIHBhciBsYSBQYXJ0aWUgaW50JiMyMzM7cmVzcyYjMjMzO2UgJiMyMjQ7IHNgZW4gcHImIzIzMzt2YWxvaXIgdWx0JiMyMzM7cmlldXJlbWVudC4KKworMTEuMyBMZSBDb250cmF0IGFubnVsZSBldCByZW1wbGFjZSB0b3V0ZSBjb252ZW50aW9uIGFudCYjMjMzO3JpZXVyZSwgJiMyMzM7Y3JpdGUgb3Ugb3JhbGUsIGVudHJlIGxlcyBQYXJ0aWVzIHN1ciBsZSBtJiMyMzQ7bWUgb2JqZXQgZXQgY29uc3RpdHVlIGxgYWNjb3JkIGVudGllciBlbnRyZSBsZXMgUGFydGllcyBzdXIgY2V0IG9iamV0LiBBdWN1bmUgYWRkaXRpb24gb3UgbW9kaWZpY2F0aW9uIGF1eCB0ZXJtZXMgZHUgQ29udHJhdCBuYGF1cmEgZGBlZmZldCAmIzIyNDsgbGAmIzIzMztnYXJkIGRlcyBQYXJ0aWVzICYjMjI0OyBtb2lucyBkYCYjMjM0O3RyZSBmYWl0ZSBwYXIgJiMyMzM7Y3JpdCBldCBzaWduJiMyMzM7ZSBwYXIgbGV1cnMgcmVwciYjMjMzO3NlbnRhbnRzIGQmIzI1MTttZW50IGhhYmlsaXQmIzIzMztzLgorCisxMS40IERhbnMgbGBoeXBvdGgmIzIzMjtzZSBvJiMyNDk7IHVuZSBvdSBwbHVzaWV1cnMgZGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IHNgYXYmIzIzMjtyZXJhaXQgY29udHJhaXJlICYjMjI0OyB1bmUgbG9pIG91ICYjMjI0OyB1biB0ZXh0ZSBhcHBsaWNhYmxlLCBleGlzdGFudHMgb3UgZnV0dXJzLCBjZXR0ZSBsb2kgb3UgY2UgdGV4dGUgcHImIzIzMzt2YXVkcmFpdCwgZXQgbGVzIFBhcnRpZXMgZmVyYWllbnQgbGVzIGFtZW5kZW1lbnRzIG4mIzIzMztjZXNzYWlyZXMgcG91ciBzZSBjb25mb3JtZXIgJiMyMjQ7IGNldHRlIGxvaSBvdSAmIzIyNDsgY2UgdGV4dGUuIFRvdXRlcyBsZXMgYXV0cmVzIGRpc3Bvc2l0aW9ucyByZXN0ZXJvbnQgZW4gdmlndWV1ci4gRGUgbSYjMjM0O21lLCBsYSBudWxsaXQmIzIzMzssIHBvdXIgcXVlbHF1ZSByYWlzb24gcXVlIGNlIHNvaXQsIGRgdW5lIGRlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBuZSBzYXVyYWl0IGVudHJhJiMyMzg7bmVyIGxhIG51bGxpdCYjMjMzOyBkZSBsYGVuc2VtYmxlIGR1IENvbnRyYXQuCisKKzExLjUgTEFOR1VFCisKK0xlIENvbnRyYXQgZXN0IHImIzIzMztkaWcmIzIzMzsgZW4gbGFuZ3VlIGZyYW4mIzIzMTthaXNlIGV0IGVuIGxhbmd1ZSBhbmdsYWlzZSwgY2VzIGRldXggdmVyc2lvbnMgZmFpc2FudCAmIzIzMztnYWxlbWVudCBmb2kuCisKK0FydGljbGUgMTIgLSBOT1VWRUxMRVMgVkVSU0lPTlMgRFUgQ09OVFJBVAorCisxMi4xIFRvdXRlIHBlcnNvbm5lIGVzdCBhdXRvcmlzJiMyMzM7ZSAmIzIyNDsgY29waWVyIGV0IGRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBkZSBjZSBDb250cmF0LgorCisxMi4yIEFmaW4gZGBlbiBwciYjMjMzO3NlcnZlciBsYSBjb2gmIzIzMztyZW5jZSwgbGUgdGV4dGUgZHUgQ29udHJhdCBlc3QgcHJvdCYjMjMzO2cmIzIzMzsgZXQgbmUgcGV1dCAmIzIzNDt0cmUgbW9kaWZpJiMyMzM7IHF1ZSBwYXIgbGVzIGF1dGV1cnMgZGUgbGEgbGljZW5jZSwgbGVzcXVlbHMgc2UgciYjMjMzO3NlcnZlbnQgbGUgZHJvaXQgZGUgcHVibGllciBwJiMyMzM7cmlvZGlxdWVtZW50IGRlcyBtaXNlcyAmIzIyNDsgam91ciBvdSBkZSBub3V2ZWxsZXMgdmVyc2lvbnMgZHUgQ29udHJhdCwgcXVpIHBvc3MmIzIzMztkZXJvbnQgY2hhY3VuZSB1biBudW0mIzIzMztybyBkaXN0aW5jdC4gQ2VzIHZlcnNpb25zIHVsdCYjMjMzO3JpZXVyZXMgc2Vyb250IHN1c2NlcHRpYmxlcyBkZSBwcmVuZHJlIGVuIGNvbXB0ZSBkZSBub3V2ZWxsZXMgcHJvYmwmIzIzMzttYXRpcXVlcyByZW5jb250ciYjMjMzO2VzIHBhciBsZXMgbG9naWNpZWxzIGxpYnJlcy4KKworMTIuMyBUb3V0IExvZ2ljaWVsIGRpZmZ1cyYjMjMzOyBzb3VzIHVuZSB2ZXJzaW9uIGRvbm4mIzIzMztlIGR1IENvbnRyYXQgbmUgcG91cnJhIGZhaXJlIGxgb2JqZXQgZGB1bmUgZGlmZnVzaW9uIHVsdCYjMjMzO3JpZXVyZSBxdWUgc291cyBsYSBtJiMyMzQ7bWUgdmVyc2lvbiBkdSBDb250cmF0IG91IHVuZSB2ZXJzaW9uIHBvc3QmIzIzMztyaWV1cmUsIHNvdXMgciYjMjMzO3NlcnZlIGRlcyBkaXNwb3NpdGlvbnMgZGUgbGBhcnRpY2xlIDUuMy40LgorCitBcnRpY2xlIDEzIC0gTE9JIEFQUExJQ0FCTEUgRVQgQ09NUEVURU5DRSBURVJSSVRPUklBTEUKKworMTMuMSBMZSBDb250cmF0IGVzdCByJiMyMzM7Z2kgcGFyIGxhIGxvaSBmcmFuJiMyMzE7YWlzZS4gTGVzIFBhcnRpZXMgY29udmllbm5lbnQgZGUgdGVudGVyIGRlIHImIzIzMztnbGVyICYjMjI0OyBsYGFtaWFibGUgbGVzIGRpZmYmIzIzMztyZW5kcyBvdSBsaXRpZ2VzIHF1aSB2aWVuZHJhaWVudCAmIzIyNDsgc2UgcHJvZHVpcmUgcGFyIHN1aXRlIG91ICYjMjI0OyBsYG9jY2FzaW9uIGR1IENvbnRyYXQuCisKKzEzLjIgQSBkJiMyMzM7ZmF1dCBkYGFjY29yZCBhbWlhYmxlIGRhbnMgdW4gZCYjMjMzO2xhaSBkZSBkZXV4ICgyKSBtb2lzICYjMjI0OyBjb21wdGVyIGRlIGxldXIgc3VydmVuYW5jZSBldCBzYXVmIHNpdHVhdGlvbiByZWxldmFudCBkYHVuZSBwcm9jJiMyMzM7ZHVyZSBkYHVyZ2VuY2UsIGxlcyBkaWZmJiMyMzM7cmVuZHMgb3UgbGl0aWdlcyBzZXJvbnQgcG9ydCYjMjMzO3MgcGFyIGxhIFBhcnRpZSBsYSBwbHVzIGRpbGlnZW50ZSBkZXZhbnQgbGVzIFRyaWJ1bmF1eCBjb21wJiMyMzM7dGVudHMgZGUgUGFyaXMuCisKKzEgQ2VDSUxMIGVzdCBwb3VyIENlKGEpIEMobnJzKSBJKG5yaWEpIEwob2dpY2llbCkgTChpYnJlKQorCitWZXJzaW9uIDIuMCBkdSAyMDA2LTA5LTA1LgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NFQ0lMTC1CIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRUNJTEwtQgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2MyNDRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRUNJTEwtQgpAQCAtMCwwICsxLDI0NyBAQAorCitDT05UUkFUIERFIExJQ0VOQ0UgREUgTE9HSUNJRUwgTElCUkUgQ2VDSUxMLUIKKworQXZlcnRpc3NlbWVudAorCitDZSBjb250cmF0IGVzdCB1bmUgbGljZW5jZSBkZSBsb2dpY2llbCBsaWJyZSBpc3N1ZSBkYHVuZSBjb25jZXJ0YXRpb24gZW50cmUgc2VzIGF1dGV1cnMgYWZpbiBxdWUgbGUgcmVzcGVjdCBkZSBkZXV4IGdyYW5kcyBwcmluY2lwZXMgcHImIzIzMztzaWRlICYjMjI0OyBzYSByJiMyMzM7ZGFjdGlvbjoKKworZGB1bmUgcGFydCwgbGUgcmVzcGVjdCBkZXMgcHJpbmNpcGVzIGRlIGRpZmZ1c2lvbiBkZXMgbG9naWNpZWxzIGxpYnJlczogYWNjJiMyMzI7cyBhdSBjb2RlIHNvdXJjZSwgZHJvaXRzICYjMjMzO3RlbmR1cyBjb25mJiMyMzM7ciYjMjMzO3MgYXV4IHV0aWxpc2F0ZXVycywKK2RgYXV0cmUgcGFydCwgbGEgZCYjMjMzO3NpZ25hdGlvbiBkYHVuIGRyb2l0IGFwcGxpY2FibGUsIGxlIGRyb2l0IGZyYW4mIzIzMTthaXMsIGF1cXVlbCBlbGxlIGVzdCBjb25mb3JtZSwgdGFudCBhdSByZWdhcmQgZHUgZHJvaXQgZGUgbGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBjaXZpbGUgcXVlIGR1IGRyb2l0IGRlIGxhIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZXQgZGUgbGEgcHJvdGVjdGlvbiBxdWBpbCBvZmZyZSBhdXggYXV0ZXVycyBldCB0aXR1bGFpcmVzIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHN1ciB1biBsb2dpY2llbC4KK0xlcyBhdXRldXJzIGRlIGxhIGxpY2VuY2UgQ2VDSUxMLUIxIHNvbnQ6CisKK0NvbW1pc3NhcmlhdCAmIzIyNDsgbGBFbmVyZ2llIEF0b21pcXVlIC0gQ0VBLCAmIzIzMzt0YWJsaXNzZW1lbnQgcHVibGljIGRlIHJlY2hlcmNoZSAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlLCB0ZWNobmlxdWUgZXQgaW5kdXN0cmllbCwgZG9udCBsZSBzaSYjMjMyO2dlIGVzdCBzaXR1JiMyMzM7IDI1IHJ1ZSBMZWJsYW5jLCBpbW1ldWJsZSBMZSBQb25hbnQgRCwgNzUwMTUgUGFyaXMuCisKK0NlbnRyZSBOYXRpb25hbCBkZSBsYSBSZWNoZXJjaGUgU2NpZW50aWZpcXVlIC0gQ05SUywgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlIGV0IHRlY2hub2xvZ2lxdWUsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyAzIHJ1ZSBNaWNoZWwtQW5nZSwgNzU3OTQgUGFyaXMgY2VkZXggMTYuCisKK0luc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4gQXV0b21hdGlxdWUgLSBJTlJJQSwgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlIGV0IHRlY2hub2xvZ2lxdWUsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyBEb21haW5lIGRlIFZvbHVjZWF1LCBSb2NxdWVuY291cnQsIEJQIDEwNSwgNzgxNTMgTGUgQ2hlc25heSBjZWRleC4KKworUHImIzIzMzthbWJ1bGUKKworQ2UgY29udHJhdCBlc3QgdW5lIGxpY2VuY2UgZGUgbG9naWNpZWwgbGlicmUgZG9udCBsYG9iamVjdGlmIGVzdCBkZSBjb25mJiMyMzM7cmVyIGF1eCB1dGlsaXNhdGV1cnMgdW5lIHRyJiMyMzI7cyBsYXJnZSBsaWJlcnQmIzIzMzsgZGUgbW9kaWZpY2F0aW9uIGV0IGRlIHJlZGlzdHJpYnV0aW9uIGR1IGxvZ2ljaWVsIHImIzIzMztnaSBwYXIgY2V0dGUgbGljZW5jZS4KKworTGBleGVyY2ljZSBkZSBjZXR0ZSBsaWJlcnQmIzIzMzsgZXN0IGFzc29ydGkgZGB1bmUgb2JsaWdhdGlvbiBmb3J0ZSBkZSBjaXRhdGlvbiAmIzIyNDsgbGEgY2hhcmdlIGRlIGNldXggcXVpIGRpc3RyaWJ1ZXJhaWVudCB1biBsb2dpY2llbCBpbmNvcnBvcmFudCB1biBsb2dpY2llbCByJiMyMzM7Z2kgcGFyIGxhIHByJiMyMzM7c2VudGUgbGljZW5jZSBhZmluIGRgYXNzdXJlciBxdWUgbGVzIGNvbnRyaWJ1dGlvbnMgZGUgdG91cyBzb2llbnQgY29ycmVjdGVtZW50IGlkZW50aWZpJiMyMzM7ZXMgZXQgcmVjb25udWVzLgorCitMYGFjY2Vzc2liaWxpdCYjMjMzOyBhdSBjb2RlIHNvdXJjZSBldCBsZXMgZHJvaXRzIGRlIGNvcGllLCBkZSBtb2RpZmljYXRpb24gZXQgZGUgcmVkaXN0cmlidXRpb24gcXVpIGQmIzIzMztjb3VsZW50IGRlIGNlIGNvbnRyYXQgb250IHBvdXIgY29udHJlcGFydGllIGRlIG5gb2ZmcmlyIGF1eCB1dGlsaXNhdGV1cnMgcXVgdW5lIGdhcmFudGllIGxpbWl0JiMyMzM7ZSBldCBkZSBuZSBmYWlyZSBwZXNlciBzdXIgbGBhdXRldXIgZHUgbG9naWNpZWwsIGxlIHRpdHVsYWlyZSBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBldCBsZXMgY29uYyYjMjMzO2RhbnRzIHN1Y2Nlc3NpZnMgcXVgdW5lIHJlc3BvbnNhYmlsaXQmIzIzMzsgcmVzdHJlaW50ZS4KKworQSBjZXQgJiMyMzM7Z2FyZCBsYGF0dGVudGlvbiBkZSBsYHV0aWxpc2F0ZXVyIGVzdCBhdHRpciYjMjMzO2Ugc3VyIGxlcyByaXNxdWVzIGFzc29jaSYjMjMzO3MgYXUgY2hhcmdlbWVudCwgJiMyMjQ7IGxgdXRpbGlzYXRpb24sICYjMjI0OyBsYSBtb2RpZmljYXRpb24gZXQvb3UgYXUgZCYjMjMzO3ZlbG9wcGVtZW50IGV0ICYjMjI0OyBsYSByZXByb2R1Y3Rpb24gZHUgbG9naWNpZWwgcGFyIGxgdXRpbGlzYXRldXIgJiMyMzM7dGFudCBkb25uJiMyMzM7IHNhIHNwJiMyMzM7Y2lmaWNpdCYjMjMzOyBkZSBsb2dpY2llbCBsaWJyZSwgcXVpIHBldXQgbGUgcmVuZHJlIGNvbXBsZXhlICYjMjI0OyBtYW5pcHVsZXIgZXQgcXVpIGxlIHImIzIzMztzZXJ2ZSBkb25jICYjMjI0OyBkZXMgZCYjMjMzO3ZlbG9wcGV1cnMgb3UgZGVzIHByb2Zlc3Npb25uZWxzIGF2ZXJ0aXMgcG9zcyYjMjMzO2RhbnQgZGVzIGNvbm5haXNzYW5jZXMgaW5mb3JtYXRpcXVlcyBhcHByb2ZvbmRpZXMuIExlcyB1dGlsaXNhdGV1cnMgc29udCBkb25jIGludml0JiMyMzM7cyAmIzIyNDsgY2hhcmdlciBldCB0ZXN0ZXIgbGBhZCYjMjMzO3F1YXRpb24gZHUgbG9naWNpZWwgJiMyMjQ7IGxldXJzIGJlc29pbnMgZGFucyBkZXMgY29uZGl0aW9ucyBwZXJtZXR0YW50IGRgYXNzdXJlciBsYSBzJiMyMzM7Y3VyaXQmIzIzMzsgZGUgbGV1cnMgc3lzdCYjMjMyO21lcyBldC9vdSBkZSBsZXVycyBkb25uJiMyMzM7ZXMgZXQsIHBsdXMgZyYjMjMzO24mIzIzMztyYWxlbWVudCwgJiMyMjQ7IGxgdXRpbGlzZXIgZXQgbGBleHBsb2l0ZXIgZGFucyBsZXMgbSYjMjM0O21lcyBjb25kaXRpb25zIGRlIHMmIzIzMztjdXJpdCYjMjMzOy4gQ2UgY29udHJhdCBwZXV0ICYjMjM0O3RyZSByZXByb2R1aXQgZXQgZGlmZnVzJiMyMzM7IGxpYnJlbWVudCwgc291cyByJiMyMzM7c2VydmUgZGUgbGUgY29uc2VydmVyIGVuIGxgJiMyMzM7dGF0LCBzYW5zIGFqb3V0IG5pIHN1cHByZXNzaW9uIGRlIGNsYXVzZXMuCisKK0NlIGNvbnRyYXQgZXN0IHN1c2NlcHRpYmxlIGRlIHNgYXBwbGlxdWVyICYjMjI0OyB0b3V0IGxvZ2ljaWVsIGRvbnQgbGUgdGl0dWxhaXJlIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IGQmIzIzMztjaWRlIGRlIHNvdW1ldHRyZSBsYGV4cGxvaXRhdGlvbiBhdXggZGlzcG9zaXRpb25zIHF1YGlsIGNvbnRpZW50LgorCitBcnRpY2xlIDEgLSBERUZJTklUSU9OUworCitEYW5zIGNlIGNvbnRyYXQsIGxlcyB0ZXJtZXMgc3VpdmFudHMsIGxvcnNxdWBpbHMgc2Vyb250ICYjMjMzO2NyaXRzIGF2ZWMgdW5lIGxldHRyZSBjYXBpdGFsZSwgYXVyb250IGxhIHNpZ25pZmljYXRpb24gc3VpdmFudGU6CisKK0NvbnRyYXQ6IGQmIzIzMztzaWduZSBsZSBwciYjMjMzO3NlbnQgY29udHJhdCBkZSBsaWNlbmNlLCBzZXMgJiMyMzM7dmVudHVlbGxlcyB2ZXJzaW9ucyBwb3N0JiMyMzM7cmlldXJlcyBldCBhbm5leGVzLgorCitMb2dpY2llbDogZCYjMjMzO3NpZ25lIGxlIGxvZ2ljaWVsIHNvdXMgc2EgZm9ybWUgZGUgQ29kZSBPYmpldCBldC9vdSBkZSBDb2RlIFNvdXJjZSBldCBsZSBjYXMgJiMyMzM7Y2gmIzIzMzthbnQgc2EgZG9jdW1lbnRhdGlvbiwgZGFucyBsZXVyICYjMjMzO3RhdCBhdSBtb21lbnQgZGUgbGBhY2NlcHRhdGlvbiBkdSBDb250cmF0IHBhciBsZSBMaWNlbmNpJiMyMzM7LgorCitMb2dpY2llbCBJbml0aWFsOiBkJiMyMzM7c2lnbmUgbGUgTG9naWNpZWwgc291cyBzYSBmb3JtZSBkZSBDb2RlIFNvdXJjZSBldCAmIzIzMzt2ZW50dWVsbGVtZW50IGRlIENvZGUgT2JqZXQgZXQgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50IHNhIGRvY3VtZW50YXRpb24sIGRhbnMgbGV1ciAmIzIzMzt0YXQgYXUgbW9tZW50IGRlIGxldXIgcHJlbWkmIzIzMjtyZSBkaWZmdXNpb24gc291cyBsZXMgdGVybWVzIGR1IENvbnRyYXQuCisKK0xvZ2ljaWVsIE1vZGlmaSYjMjMzOzogZCYjMjMzO3NpZ25lIGxlIExvZ2ljaWVsIG1vZGlmaSYjMjMzOyBwYXIgYXUgbW9pbnMgdW5lIENvbnRyaWJ1dGlvbi4KKworQ29kZSBTb3VyY2U6IGQmIzIzMztzaWduZSBsYGVuc2VtYmxlIGRlcyBpbnN0cnVjdGlvbnMgZXQgZGVzIGxpZ25lcyBkZSBwcm9ncmFtbWUgZHUgTG9naWNpZWwgZXQgYXVxdWVsIGxgYWNjJiMyMzI7cyBlc3QgbiYjMjMzO2Nlc3NhaXJlIGVuIHZ1ZSBkZSBtb2RpZmllciBsZSBMb2dpY2llbC4KKworQ29kZSBPYmpldDogZCYjMjMzO3NpZ25lIGxlcyBmaWNoaWVycyBiaW5haXJlcyBpc3N1cyBkZSBsYSBjb21waWxhdGlvbiBkdSBDb2RlIFNvdXJjZS4KKworVGl0dWxhaXJlOiBkJiMyMzM7c2lnbmUgbGUgb3UgbGVzIGQmIzIzMzt0ZW50ZXVycyBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBkYGF1dGV1ciBzdXIgbGUgTG9naWNpZWwgSW5pdGlhbC4KKworTGljZW5jaSYjMjMzOzogZCYjMjMzO3NpZ25lIGxlIG91IGxlcyB1dGlsaXNhdGV1cnMgZHUgTG9naWNpZWwgYXlhbnQgYWNjZXB0JiMyMzM7IGxlIENvbnRyYXQuCisKK0NvbnRyaWJ1dGV1cjogZCYjMjMzO3NpZ25lIGxlIExpY2VuY2kmIzIzMzsgYXV0ZXVyIGRgYXUgbW9pbnMgdW5lIENvbnRyaWJ1dGlvbi4KKworQ29uYyYjMjMzO2RhbnQ6IGQmIzIzMztzaWduZSBsZSBUaXR1bGFpcmUgb3UgdG91dGUgcGVyc29ubmUgcGh5c2lxdWUgb3UgbW9yYWxlIGRpc3RyaWJ1YW50IGxlIExvZ2ljaWVsIHNvdXMgbGUgQ29udHJhdC4KKworQ29udHJpYnV0aW9uOiBkJiMyMzM7c2lnbmUgbGBlbnNlbWJsZSBkZXMgbW9kaWZpY2F0aW9ucywgY29ycmVjdGlvbnMsIHRyYWR1Y3Rpb25zLCBhZGFwdGF0aW9ucyBldC9vdSBub3V2ZWxsZXMgZm9uY3Rpb25uYWxpdCYjMjMzO3MgaW50JiMyMzM7Z3ImIzIzMztlcyBkYW5zIGxlIExvZ2ljaWVsIHBhciB0b3V0IENvbnRyaWJ1dGV1ciwgYWluc2kgcXVlIHRvdXQgTW9kdWxlIEludGVybmUuCisKK01vZHVsZTogZCYjMjMzO3NpZ25lIHVuIGVuc2VtYmxlIGRlIGZpY2hpZXJzIHNvdXJjZXMgeSBjb21wcmlzIGxldXIgZG9jdW1lbnRhdGlvbiBxdWkgcGVybWV0IGRlIHImIzIzMzthbGlzZXIgZGVzIGZvbmN0aW9ubmFsaXQmIzIzMztzIG91IHNlcnZpY2VzIHN1cHBsJiMyMzM7bWVudGFpcmVzICYjMjI0OyBjZXV4IGZvdXJuaXMgcGFyIGxlIExvZ2ljaWVsLgorCitNb2R1bGUgRXh0ZXJuZTogZCYjMjMzO3NpZ25lIHRvdXQgTW9kdWxlLCBub24gZCYjMjMzO3JpdiYjMjMzOyBkdSBMb2dpY2llbCwgdGVsIHF1ZSBjZSBNb2R1bGUgZXQgbGUgTG9naWNpZWwgc2BleCYjMjMzO2N1dGVudCBkYW5zIGRlcyBlc3BhY2VzIGRgYWRyZXNzYWdlIGRpZmYmIzIzMztyZW50cywgbGB1biBhcHBlbGFudCBsYGF1dHJlIGF1IG1vbWVudCBkZSBsZXVyIGV4JiMyMzM7Y3V0aW9uLgorCitNb2R1bGUgSW50ZXJuZTogZCYjMjMzO3NpZ25lIHRvdXQgTW9kdWxlIGxpJiMyMzM7IGF1IExvZ2ljaWVsIGRlIHRlbGxlIHNvcnRlIHF1YGlscyBzYGV4JiMyMzM7Y3V0ZW50IGRhbnMgbGUgbSYjMjM0O21lIGVzcGFjZSBkYGFkcmVzc2FnZS4KKworUGFydGllczogZCYjMjMzO3NpZ25lIGNvbGxlY3RpdmVtZW50IGxlIExpY2VuY2kmIzIzMzsgZXQgbGUgQ29uYyYjMjMzO2RhbnQuCisKK0NlcyB0ZXJtZXMgc2BlbnRlbmRlbnQgYXUgc2luZ3VsaWVyIGNvbW1lIGF1IHBsdXJpZWwuCisKK0FydGljbGUgMiAtIE9CSkVUCisKK0xlIENvbnRyYXQgYSBwb3VyIG9iamV0IGxhIGNvbmNlc3Npb24gcGFyIGxlIENvbmMmIzIzMztkYW50IGF1IExpY2VuY2kmIzIzMzsgZGB1bmUgbGljZW5jZSBub24gZXhjbHVzaXZlLCBjZXNzaWJsZSBldCBtb25kaWFsZSBkdSBMb2dpY2llbCB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllIGNpLWFwciYjMjMyO3MgJiMyMjQ7IGxgYXJ0aWNsZSA1IHBvdXIgdG91dGUgbGEgZHVyJiMyMzM7ZSBkZSBwcm90ZWN0aW9uIGRlcyBkcm9pdHMgcG9ydGFudCBzdXIgY2UgTG9naWNpZWwuCisKK0FydGljbGUgMyAtIEFDQ0VQVEFUSU9OCisKKzMuMSBMYGFjY2VwdGF0aW9uIHBhciBsZSBMaWNlbmNpJiMyMzM7IGRlcyB0ZXJtZXMgZHUgQ29udHJhdCBlc3QgciYjMjMzO3B1dCYjMjMzO2UgYWNxdWlzZSBkdSBmYWl0IGR1IHByZW1pZXIgZGVzIGZhaXRzIHN1aXZhbnRzOgorCisoaSkgbGUgY2hhcmdlbWVudCBkdSBMb2dpY2llbCBwYXIgdG91dCBtb3llbiBub3RhbW1lbnQgcGFyIHQmIzIzMztsJiMyMzM7Y2hhcmdlbWVudCAmIzIyNDsgcGFydGlyIGRgdW4gc2VydmV1ciBkaXN0YW50IG91IHBhciBjaGFyZ2VtZW50ICYjMjI0OyBwYXJ0aXIgZGB1biBzdXBwb3J0IHBoeXNpcXVlOworKGlpKSBsZSBwcmVtaWVyIGV4ZXJjaWNlIHBhciBsZSBMaWNlbmNpJiMyMzM7IGRlIGxgdW4gcXVlbGNvbnF1ZSBkZXMgZHJvaXRzIGNvbmMmIzIzMztkJiMyMzM7cyBwYXIgbGUgQ29udHJhdC4KKzMuMiBVbiBleGVtcGxhaXJlIGR1IENvbnRyYXQsIGNvbnRlbmFudCBub3RhbW1lbnQgdW4gYXZlcnRpc3NlbWVudCByZWxhdGlmIGF1eCBzcCYjMjMzO2NpZmljaXQmIzIzMztzIGR1IExvZ2ljaWVsLCAmIzIyNDsgbGEgcmVzdHJpY3Rpb24gZGUgZ2FyYW50aWUgZXQgJiMyMjQ7IGxhIGxpbWl0YXRpb24gJiMyMjQ7IHVuIHVzYWdlIHBhciBkZXMgdXRpbGlzYXRldXJzIGV4cCYjMjMzO3JpbWVudCYjMjMzO3MgYSAmIzIzMzt0JiMyMzM7IG1pcyAmIzIyNDsgZGlzcG9zaXRpb24gZHUgTGljZW5jaSYjMjMzOyBwciYjMjMzO2FsYWJsZW1lbnQgJiMyMjQ7IHNvbiBhY2NlcHRhdGlvbiB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllICYjMjI0OyBsYGFydGljbGUgMy4xIGNpIGRlc3N1cyBldCBsZSBMaWNlbmNpJiMyMzM7IHJlY29ubmEmIzIzODt0IGVuIGF2b2lyIHByaXMgY29ubmFpc3NhbmNlLgorCitBcnRpY2xlIDQgLSBFTlRSRUUgRU4gVklHVUVVUiBFVCBEVVJFRQorCis0LjEgRU5UUkVFIEVOIFZJR1VFVVIKKworTGUgQ29udHJhdCBlbnRyZSBlbiB2aWd1ZXVyICYjMjI0OyBsYSBkYXRlIGRlIHNvbiBhY2NlcHRhdGlvbiBwYXIgbGUgTGljZW5jaSYjMjMzOyB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllIGVuIDMuMS4KKworNC4yIERVUkVFCisKK0xlIENvbnRyYXQgcHJvZHVpcmEgc2VzIGVmZmV0cyBwZW5kYW50IHRvdXRlIGxhIGR1ciYjMjMzO2UgbCYjMjMzO2dhbGUgZGUgcHJvdGVjdGlvbiBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBwb3J0YW50IHN1ciBsZSBMb2dpY2llbC4KKworQXJ0aWNsZSA1IC0gRVRFTkRVRSBERVMgRFJPSVRTIENPTkNFREVTCisKK0xlIENvbmMmIzIzMztkYW50IGNvbmMmIzIzMjtkZSBhdSBMaWNlbmNpJiMyMzM7LCBxdWkgYWNjZXB0ZSwgbGVzIGRyb2l0cyBzdWl2YW50cyBzdXIgbGUgTG9naWNpZWwgcG91ciB0b3V0ZXMgZGVzdGluYXRpb25zIGV0IHBvdXIgbGEgZHVyJiMyMzM7ZSBkdSBDb250cmF0IGRhbnMgbGVzIGNvbmRpdGlvbnMgY2ktYXByJiMyMzI7cyBkJiMyMzM7dGFpbGwmIzIzMztlcy4KKworUGFyIGFpbGxldXJzLCBzaSBsZSBDb25jJiMyMzM7ZGFudCBkJiMyMzM7dGllbnQgb3UgdmVuYWl0ICYjMjI0OyBkJiMyMzM7dGVuaXIgdW4gb3UgcGx1c2lldXJzIGJyZXZldHMgZGBpbnZlbnRpb24gcHJvdCYjMjMzO2dlYW50IHRvdXQgb3UgcGFydGllIGRlcyBmb25jdGlvbm5hbGl0JiMyMzM7cyBkdSBMb2dpY2llbCBvdSBkZSBzZXMgY29tcG9zYW50cywgaWwgc2BlbmdhZ2UgJiMyMjQ7IG5lIHBhcyBvcHBvc2VyIGxlcyAmIzIzMzt2ZW50dWVscyBkcm9pdHMgY29uZiYjMjMzO3ImIzIzMztzIHBhciBjZXMgYnJldmV0cyBhdXggTGljZW5jaSYjMjMzO3Mgc3VjY2Vzc2lmcyBxdWkgdXRpbGlzZXJhaWVudCwgZXhwbG9pdGVyYWllbnQgb3UgbW9kaWZpZXJhaWVudCBsZSBMb2dpY2llbC4gRW4gY2FzIGRlIGNlc3Npb24gZGUgY2VzIGJyZXZldHMsIGxlIENvbmMmIzIzMztkYW50IHNgZW5nYWdlICYjMjI0OyBmYWlyZSByZXByZW5kcmUgbGVzIG9ibGlnYXRpb25zIGR1IHByJiMyMzM7c2VudCBhbGluJiMyMzM7YSBhdXggY2Vzc2lvbm5haXJlcy4KKworNS4xIERST0lUIERgVVRJTElTQVRJT04KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgdXRpbGlzZXIgbGUgTG9naWNpZWwsIHNhbnMgcmVzdHJpY3Rpb24gcXVhbnQgYXV4IGRvbWFpbmVzIGRgYXBwbGljYXRpb24sICYjMjMzO3RhbnQgY2ktYXByJiMyMzI7cyBwciYjMjMzO2NpcyYjMjMzOyBxdWUgY2VsYSBjb21wb3J0ZToKKworbGEgcmVwcm9kdWN0aW9uIHBlcm1hbmVudGUgb3UgcHJvdmlzb2lyZSBkdSBMb2dpY2llbCBlbiB0b3V0IG91IHBhcnRpZSBwYXIgdG91dCBtb3llbiBldCBzb3VzIHRvdXRlIGZvcm1lLgorCitsZSBjaGFyZ2VtZW50LCBsYGFmZmljaGFnZSwgbGBleCYjMjMzO2N1dGlvbiwgb3UgbGUgc3RvY2thZ2UgZHUgTG9naWNpZWwgc3VyIHRvdXQgc3VwcG9ydC4KKworbGEgcG9zc2liaWxpdCYjMjMzOyBkYGVuIG9ic2VydmVyLCBkYGVuICYjMjMzO3R1ZGllciwgb3UgZGBlbiB0ZXN0ZXIgbGUgZm9uY3Rpb25uZW1lbnQgYWZpbiBkZSBkJiMyMzM7dGVybWluZXIgbGVzIGlkJiMyMzM7ZXMgZXQgcHJpbmNpcGVzIHF1aSBzb250ICYjMjI0OyBsYSBiYXNlIGRlIG5gaW1wb3J0ZSBxdWVsICYjMjMzO2wmIzIzMzttZW50IGRlIGNlIExvZ2ljaWVsOyBldCBjZWNpLCBsb3JzcXVlIGxlIExpY2VuY2kmIzIzMzsgZWZmZWN0dWUgdG91dGUgb3AmIzIzMztyYXRpb24gZGUgY2hhcmdlbWVudCwgZGBhZmZpY2hhZ2UsIGRgZXgmIzIzMztjdXRpb24sIGRlIHRyYW5zbWlzc2lvbiBvdSBkZSBzdG9ja2FnZSBkdSBMb2dpY2llbCBxdWBpbCBlc3QgZW4gZHJvaXQgZGBlZmZlY3R1ZXIgZW4gdmVydHUgZHUgQ29udHJhdC4KKworNS4yIERST0lUIERgQVBQT1JURVIgREVTIENPTlRSSUJVVElPTlMKKworTGUgZHJvaXQgZGBhcHBvcnRlciBkZXMgQ29udHJpYnV0aW9ucyBjb21wb3J0ZSBsZSBkcm9pdCBkZSB0cmFkdWlyZSwgZGBhZGFwdGVyLCBkYGFycmFuZ2VyIG91IGRgYXBwb3J0ZXIgdG91dGUgYXV0cmUgbW9kaWZpY2F0aW9uIGF1IExvZ2ljaWVsIGV0IGxlIGRyb2l0IGRlIHJlcHJvZHVpcmUgbGUgbG9naWNpZWwgZW4gciYjMjMzO3N1bHRhbnQuCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IGFwcG9ydGVyIHRvdXRlIENvbnRyaWJ1dGlvbiBhdSBMb2dpY2llbCBzb3VzIHImIzIzMztzZXJ2ZSBkZSBtZW50aW9ubmVyLCBkZSBmYSYjMjMxO29uIGV4cGxpY2l0ZSwgc29uIG5vbSBlbiB0YW50IHF1YGF1dGV1ciBkZSBjZXR0ZSBDb250cmlidXRpb24gZXQgbGEgZGF0ZSBkZSBjciYjMjMzO2F0aW9uIGRlIGNlbGxlLWNpLgorCis1LjMgRFJPSVQgREUgRElTVFJJQlVUSU9OCisKK0xlIGRyb2l0IGRlIGRpc3RyaWJ1dGlvbiBjb21wb3J0ZSBub3RhbW1lbnQgbGUgZHJvaXQgZGUgZGlmZnVzZXIsIGRlIHRyYW5zbWV0dHJlIGV0IGRlIGNvbW11bmlxdWVyIGxlIExvZ2ljaWVsIGF1IHB1YmxpYyBzdXIgdG91dCBzdXBwb3J0IGV0IHBhciB0b3V0IG1veWVuIGFpbnNpIHF1ZSBsZSBkcm9pdCBkZSBtZXR0cmUgc3VyIGxlIG1hcmNoJiMyMzM7ICYjMjI0OyB0aXRyZSBvbiYjMjMzO3JldXggb3UgZ3JhdHVpdCwgdW4gb3UgZGVzIGV4ZW1wbGFpcmVzIGR1IExvZ2ljaWVsIHBhciB0b3V0IHByb2MmIzIzMztkJiMyMzM7LgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyBkaXN0cmlidWVyIGRlcyBjb3BpZXMgZHUgTG9naWNpZWwsIG1vZGlmaSYjMjMzOyBvdSBub24sICYjMjI0OyBkZXMgdGllcnMgZGFucyBsZXMgY29uZGl0aW9ucyBjaS1hcHImIzIzMjtzIGQmIzIzMzt0YWlsbCYjMjMzO2VzLgorCis1LjMuMSBESVNUUklCVVRJT04gRFUgTE9HSUNJRUwgU0FOUyBNT0RJRklDQVRJT04KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgZGlzdHJpYnVlciBkZXMgY29waWVzIGNvbmZvcm1lcyBkdSBMb2dpY2llbCwgc291cyBmb3JtZSBkZSBDb2RlIFNvdXJjZSBvdSBkZSBDb2RlIE9iamV0LCAmIzIyNDsgY29uZGl0aW9uIHF1ZSBjZXR0ZSBkaXN0cmlidXRpb24gcmVzcGVjdGUgbGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IGRhbnMgbGV1ciB0b3RhbGl0JiMyMzM7IGV0IHNvaXQgYWNjb21wYWduJiMyMzM7ZToKKworZGB1biBleGVtcGxhaXJlIGR1IENvbnRyYXQsCisKK2RgdW4gYXZlcnRpc3NlbWVudCByZWxhdGlmICYjMjI0OyBsYSByZXN0cmljdGlvbiBkZSBnYXJhbnRpZSBldCBkZSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IHRlbGxlIHF1ZSBwciYjMjMzO3Z1ZSBhdXggYXJ0aWNsZXMgOCBldCA5LAorCitldCBxdWUsIGRhbnMgbGUgY2FzIG8mIzI0OTsgc2V1bCBsZSBDb2RlIE9iamV0IGR1IExvZ2ljaWVsIGVzdCByZWRpc3RyaWJ1JiMyMzM7LCBsZSBMaWNlbmNpJiMyMzM7IHBlcm1ldHRlIHVuIGFjYyYjMjMyO3MgZWZmZWN0aWYgYXUgQ29kZSBTb3VyY2UgY29tcGxldCBkdSBMb2dpY2llbCBwZW5kYW50IGF1IG1vaW5zIHRvdXRlIGxhIGR1ciYjMjMzO2UgZGUgc2EgZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsLCAmIzIzMzt0YW50IGVudGVuZHUgcXVlIGxlIGNvJiMyNTE7dCBhZGRpdGlvbm5lbCBkYGFjcXVpc2l0aW9uIGR1IENvZGUgU291cmNlIG5lIGRldnJhIHBhcyBleGMmIzIzMztkZXIgbGUgc2ltcGxlIGNvJiMyNTE7dCBkZSB0cmFuc2ZlcnQgZGVzIGRvbm4mIzIzMztlcy4KKworNS4zLjIgRElTVFJJQlVUSU9OIERVIExPR0lDSUVMIE1PRElGSUUKKworTG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGFwcG9ydGUgdW5lIENvbnRyaWJ1dGlvbiBhdSBMb2dpY2llbCwgbGUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IHBldXQgJiMyMzQ7dHJlIGRpc3RyaWJ1JiMyMzM7IHNvdXMgdW4gY29udHJhdCBkZSBsaWNlbmNlIGF1dHJlIHF1ZSBsZSBwciYjMjMzO3NlbnQgQ29udHJhdCBzb3VzIHImIzIzMztzZXJ2ZSBkdSByZXNwZWN0IGRlcyBkaXNwb3NpdGlvbnMgZGUgbGBhcnRpY2xlIDUuMy40LgorCis1LjMuMyBESVNUUklCVVRJT04gREVTIE1PRFVMRVMgRVhURVJORVMKKworTG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGEgZCYjMjMzO3ZlbG9wcCYjMjMzOyB1biBNb2R1bGUgRXh0ZXJuZSBsZXMgY29uZGl0aW9ucyBkdSBDb250cmF0IG5lIHNgYXBwbGlxdWVudCBwYXMgJiMyMjQ7IGNlIE1vZHVsZSBFeHRlcm5lLCBxdWkgcGV1dCAmIzIzNDt0cmUgZGlzdHJpYnUmIzIzMzsgc291cyB1biBjb250cmF0IGRlIGxpY2VuY2UgZGlmZiYjMjMzO3JlbnQuCisKKzUuMy40IENJVEFUSU9OUworCitMZSBMaWNlbmNpJiMyMzM7IHF1aSBkaXN0cmlidWUgdW4gTG9naWNpZWwgTW9kaWZpJiMyMzM7IHNgZW5nYWdlIGV4cHJlc3MmIzIzMzttZW50OgorCismIzIyNDsgaW5kaXF1ZXIgZGFucyBzYSBkb2N1bWVudGF0aW9uIHF1YGlsIGEgJiMyMzM7dCYjMjMzOyByJiMyMzM7YWxpcyYjMjMzOyAmIzIyNDsgcGFydGlyIGR1IExvZ2ljaWVsIHImIzIzMztnaSBwYXIgbGUgQ29udHJhdCwgZW4gcmVwcm9kdWlzYW50IGxlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGR1IExvZ2ljaWVsLAorCismIzIyNDsgZmFpcmUgZW4gc29ydGUgcXVlIGxgdXRpbGlzYXRpb24gZHUgTG9naWNpZWwsIHNlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGV0IGxlIGZhaXQgcXVgaWwgZXN0IHImIzIzMztnaSBwYXIgbGUgQ29udHJhdCBzb2llbnQgaW5kaXF1JiMyMzM7cyBkYW5zIHVuIHRleHRlIGZhY2lsZW1lbnQgYWNjZXNzaWJsZSBkZXB1aXMgbGBpbnRlcmZhY2UgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7LAorCismIzIyNDsgbWVudGlvbm5lciwgc3VyIHVuIHNpdGUgV2ViIGxpYnJlbWVudCBhY2Nlc3NpYmxlIGQmIzIzMztjcml2YW50IGxlIExvZ2ljaWVsIE1vZGlmaSYjMjMzOywgZXQgcGVuZGFudCBhdSBtb2lucyB0b3V0ZSBsYSBkdXImIzIzMztlIGRlIHNhIGRpc3RyaWJ1dGlvbiwgcXVgaWwgYSAmIzIzMzt0JiMyMzM7IHImIzIzMzthbGlzJiMyMzM7ICYjMjI0OyBwYXJ0aXIgZHUgTG9naWNpZWwgciYjMjMzO2dpIHBhciBsZSBDb250cmF0LCBlbiByZXByb2R1aXNhbnQgbGVzIG1lbnRpb25zIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZHUgTG9naWNpZWwsCisKK2xvcnNxdWBpbCBsZSBkaXN0cmlidWUgJiMyMjQ7IHVuIHRpZXJzIHN1c2NlcHRpYmxlIGRlIGRpc3RyaWJ1ZXIgbHVpLW0mIzIzNDttZSB1biBMb2dpY2llbCBNb2RpZmkmIzIzMzssIHNhbnMgYXZvaXIgJiMyMjQ7IGVuIGRpc3RyaWJ1ZXIgbGUgY29kZSBzb3VyY2UsICYjMjI0OyBmYWlyZSBzZXMgbWVpbGxldXJzIGVmZm9ydHMgcG91ciBxdWUgbGVzIG9ibGlnYXRpb25zIGR1IHByJiMyMzM7c2VudCBhcnRpY2xlIDUuMy40IHNvaWVudCByZXByaXNlcyBwYXIgbGUgZGl0IHRpZXJzLgorCitMb3JzcXVlIGxlIExvZ2ljaWVsIG1vZGlmaSYjMjMzOyBvdSBub24gZXN0IGRpc3RyaWJ1JiMyMzM7IGF2ZWMgdW4gTW9kdWxlIEV4dGVybmUgcXVpIGEgJiMyMzM7dCYjMjMzOyBjb24mIzIzMTt1IHBvdXIgbGB1dGlsaXNlciwgbGUgTGljZW5jaSYjMjMzOyBkb2l0IHNvdW1ldHRyZSBsZSBkaXQgTW9kdWxlIEV4dGVybmUgYXV4IG9ibGlnYXRpb25zIHByJiMyMzM7YyYjMjMzO2RlbnRlcy4KKworNS4zLjUgQ09NUEFUSUJJTElURSBBVkVDIExFUyBMSUNFTkNFUyBDZUNJTEwgZXQgQ2VDSUxMLUMKKworTG9yc3F1YHVuIExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBjb250aWVudCB1bmUgQ29udHJpYnV0aW9uIHNvdW1pc2UgYXUgY29udHJhdCBkZSBsaWNlbmNlIENlQ0lMTCwgbGVzIHN0aXB1bGF0aW9ucyBwciYjMjMzO3Z1ZXMgJiMyMjQ7IGxgYXJ0aWNsZSA1LjMuNCBzb250IGZhY3VsdGF0aXZlcy4KKworVW4gTG9naWNpZWwgTW9kaWZpJiMyMzM7IHBldXQgJiMyMzQ7dHJlIGRpc3RyaWJ1JiMyMzM7IHNvdXMgbGUgY29udHJhdCBkZSBsaWNlbmNlIENlQ0lMTC1DLiBMZXMgc3RpcHVsYXRpb25zIHByJiMyMzM7dnVlcyAmIzIyNDsgbGBhcnRpY2xlIDUuMy40IHNvbnQgYWxvcnMgZmFjdWx0YXRpdmVzLgorCitBcnRpY2xlIDYgLSBQUk9QUklFVEUgSU5URUxMRUNUVUVMTEUKKworNi4xIFNVUiBMRSBMT0dJQ0lFTCBJTklUSUFMCisKK0xlIFRpdHVsYWlyZSBlc3QgZCYjMjMzO3RlbnRldXIgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggc3VyIGxlIExvZ2ljaWVsIEluaXRpYWwuIFRvdXRlIHV0aWxpc2F0aW9uIGR1IExvZ2ljaWVsIEluaXRpYWwgZXN0IHNvdW1pc2UgYXUgcmVzcGVjdCBkZXMgY29uZGl0aW9ucyBkYW5zIGxlc3F1ZWxsZXMgbGUgVGl0dWxhaXJlIGEgY2hvaXNpIGRlIGRpZmZ1c2VyIHNvbiBvZXV2cmUgZXQgbnVsIGF1dHJlIG5gYSBsYSBmYWN1bHQmIzIzMzsgZGUgbW9kaWZpZXIgbGVzIGNvbmRpdGlvbnMgZGUgZGlmZnVzaW9uIGRlIGNlIExvZ2ljaWVsIEluaXRpYWwuCisKK0xlIFRpdHVsYWlyZSBzYGVuZ2FnZSAmIzIyNDsgY2UgcXVlIGxlIExvZ2ljaWVsIEluaXRpYWwgcmVzdGUgYXUgbW9pbnMgciYjMjMzO2dpIHBhciBsZSBDb250cmF0IGV0IGNlLCBwb3VyIGxhIGR1ciYjMjMzO2UgdmlzJiMyMzM7ZSAmIzIyNDsgbGBhcnRpY2xlIDQuMi4KKworNi4yIFNVUiBMRVMgQ09OVFJJQlVUSU9OUworCitMZSBMaWNlbmNpJiMyMzM7IHF1aSBhIGQmIzIzMzt2ZWxvcHAmIzIzMzsgdW5lIENvbnRyaWJ1dGlvbiBlc3QgdGl0dWxhaXJlIHN1ciBjZWxsZS1jaSBkZXMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZGFucyBsZXMgY29uZGl0aW9ucyBkJiMyMzM7ZmluaWVzIHBhciBsYSBsJiMyMzM7Z2lzbGF0aW9uIGFwcGxpY2FibGUuCisKKzYuMyBTVVIgTEVTIE1PRFVMRVMgRVhURVJORVMKKworTGUgTGljZW5jaSYjMjMzOyBxdWkgYSBkJiMyMzM7dmVsb3BwJiMyMzM7IHVuIE1vZHVsZSBFeHRlcm5lIGVzdCB0aXR1bGFpcmUgc3VyIGNlbHVpLWNpIGRlcyBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkYW5zIGxlcyBjb25kaXRpb25zIGQmIzIzMztmaW5pZXMgcGFyIGxhIGwmIzIzMztnaXNsYXRpb24gYXBwbGljYWJsZSBldCByZXN0ZSBsaWJyZSBkdSBjaG9peCBkdSBjb250cmF0IHImIzIzMztnaXNzYW50IHNhIGRpZmZ1c2lvbi4KKworNi40IERJU1BPU0lUSU9OUyBDT01NVU5FUworCitMZSBMaWNlbmNpJiMyMzM7IHNgZW5nYWdlIGV4cHJlc3MmIzIzMzttZW50OgorCismIzIyNDsgbmUgcGFzIHN1cHByaW1lciBvdSBtb2RpZmllciBkZSBxdWVscXVlIG1hbmkmIzIzMjtyZSBxdWUgY2Ugc29pdCBsZXMgbWVudGlvbnMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBhcHBvcyYjMjMzO2VzIHN1ciBsZSBMb2dpY2llbDsKKworJiMyMjQ7IHJlcHJvZHVpcmUgJiMyMjQ7IGxgaWRlbnRpcXVlIGxlc2RpdGVzIG1lbnRpb25zIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgc3VyIGxlcyBjb3BpZXMgZHUgTG9naWNpZWwgbW9kaWZpJiMyMzM7IG91IG5vbi4KKworTGUgTGljZW5jaSYjMjMzOyBzYGVuZ2FnZSAmIzIyNDsgbmUgcGFzIHBvcnRlciBhdHRlaW50ZSwgZGlyZWN0ZW1lbnQgb3UgaW5kaXJlY3RlbWVudCwgYXV4IGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGR1IFRpdHVsYWlyZSBldC9vdSBkZXMgQ29udHJpYnV0ZXVycyBzdXIgbGUgTG9naWNpZWwgZXQgJiMyMjQ7IHByZW5kcmUsIGxlIGNhcyAmIzIzMztjaCYjMjMzO2FudCwgJiMyMjQ7IGxgJiMyMzM7Z2FyZCBkZSBzb24gcGVyc29ubmVsIHRvdXRlcyBsZXMgbWVzdXJlcyBuJiMyMzM7Y2Vzc2FpcmVzIHBvdXIgYXNzdXJlciBsZSByZXNwZWN0IGRlcyBkaXRzIGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGR1IFRpdHVsYWlyZSBldC9vdSBkZXMgQ29udHJpYnV0ZXVycy4KKworQXJ0aWNsZSA3IC0gU0VSVklDRVMgQVNTT0NJRVMKKworNy4xIExlIENvbnRyYXQgbmBvYmxpZ2UgZW4gYXVjdW4gY2FzIGxlIENvbmMmIzIzMztkYW50ICYjMjI0OyBsYSByJiMyMzM7YWxpc2F0aW9uIGRlIHByZXN0YXRpb25zIGRgYXNzaXN0YW5jZSB0ZWNobmlxdWUgb3UgZGUgbWFpbnRlbmFuY2UgZHUgTG9naWNpZWwuCisKK0NlcGVuZGFudCBsZSBDb25jJiMyMzM7ZGFudCByZXN0ZSBsaWJyZSBkZSBwcm9wb3NlciBjZSB0eXBlIGRlIHNlcnZpY2VzLiBMZXMgdGVybWVzIGV0IGNvbmRpdGlvbnMgZGB1bmUgdGVsbGUgYXNzaXN0YW5jZSB0ZWNobmlxdWUgZXQvb3UgZGB1bmUgdGVsbGUgbWFpbnRlbmFuY2Ugc2Vyb250IGFsb3JzIGQmIzIzMzt0ZXJtaW4mIzIzMztzIGRhbnMgdW4gYWN0ZSBzJiMyMzM7cGFyJiMyMzM7LiBDZXMgYWN0ZXMgZGUgbWFpbnRlbmFuY2UgZXQvb3UgYXNzaXN0YW5jZSB0ZWNobmlxdWUgbmBlbmdhZ2Vyb250IHF1ZSBsYSBzZXVsZSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IHF1aSBsZXMgcHJvcG9zZS4KKworNy4yIERlIG0mIzIzNDttZSwgdG91dCBDb25jJiMyMzM7ZGFudCBlc3QgbGlicmUgZGUgcHJvcG9zZXIsIHNvdXMgc2Egc2V1bGUgcmVzcG9uc2FiaWxpdCYjMjMzOywgJiMyMjQ7IHNlcyBsaWNlbmNpJiMyMzM7cyB1bmUgZ2FyYW50aWUsIHF1aSBuYGVuZ2FnZXJhIHF1ZSBsdWksIGxvcnMgZGUgbGEgcmVkaXN0cmlidXRpb24gZHUgTG9naWNpZWwgZXQvb3UgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGV0IGNlLCBkYW5zIGxlcyBjb25kaXRpb25zIHF1YGlsIHNvdWhhaXRlLiBDZXR0ZSBnYXJhbnRpZSBldCBsZXMgbW9kYWxpdCYjMjMzO3MgZmluYW5jaSYjMjMyO3JlcyBkZSBzb24gYXBwbGljYXRpb24gZmVyb250IGxgb2JqZXQgZGB1biBhY3RlIHMmIzIzMztwYXImIzIzMzsgZW50cmUgbGUgQ29uYyYjMjMzO2RhbnQgZXQgbGUgTGljZW5jaSYjMjMzOy4KKworQXJ0aWNsZSA4IC0gUkVTUE9OU0FCSUxJVEUKKworOC4xIFNvdXMgciYjMjMzO3NlcnZlIGRlcyBkaXNwb3NpdGlvbnMgZGUgbGBhcnRpY2xlIDguMiwgbGUgTGljZW5jaSYjMjMzOyBhIGxhIGZhY3VsdCYjMjMzOywgc291cyByJiMyMzM7c2VydmUgZGUgcHJvdXZlciBsYSBmYXV0ZSBkdSBDb25jJiMyMzM7ZGFudCBjb25jZXJuJiMyMzM7LCBkZSBzb2xsaWNpdGVyIGxhIHImIzIzMztwYXJhdGlvbiBkdSBwciYjMjMzO2p1ZGljZSBkaXJlY3QgcXVgaWwgc3ViaXJhaXQgZHUgZmFpdCBkdSBMb2dpY2llbCBldCBkb250IGlsIGFwcG9ydGVyYSBsYSBwcmV1dmUuCisKKzguMiBMYSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IGVzdCBsaW1pdCYjMjMzO2UgYXV4IGVuZ2FnZW1lbnRzIHByaXMgZW4gYXBwbGljYXRpb24gZHUgQ29udHJhdCBldCBuZSBzYXVyYWl0ICYjMjM0O3RyZSBlbmdhZyYjMjMzO2UgZW4gcmFpc29uIG5vdGFtbWVudDogKGkpIGRlcyBkb21tYWdlcyBkdXMgJiMyMjQ7IGxgaW5leCYjMjMzO2N1dGlvbiwgdG90YWxlIG91IHBhcnRpZWxsZSwgZGUgc2VzIG9ibGlnYXRpb25zIHBhciBsZSBMaWNlbmNpJiMyMzM7LCAoaWkpIGRlcyBkb21tYWdlcyBkaXJlY3RzIG91IGluZGlyZWN0cyBkJiMyMzM7Y291bGFudCBkZSBsYHV0aWxpc2F0aW9uIG91IGRlcyBwZXJmb3JtYW5jZXMgZHUgTG9naWNpZWwgc3ViaXMgcGFyIGxlIExpY2VuY2kmIzIzMzsgZXQgKGlpaSkgcGx1cyBnJiMyMzM7biYjMjMzO3JhbGVtZW50IGRgdW4gcXVlbGNvbnF1ZSBkb21tYWdlIGluZGlyZWN0LiBFbiBwYXJ0aWN1bGllciwgbGVzIFBhcnRpZXMgY29udmllbm5lbnQgZXhwcmVzcyYjMjMzO21lbnQgcXVlIHRvdXQgcHImIzIzMztqdWRpY2UgZmluYW5jaWVyIG91IGNvbW1lcmNpYWwgKHBhciBleGVtcGxlIHBlcnRlIGRlIGRvbm4mIzIzMztlcywgcGVydGUgZGUgYiYjMjMzO24mIzIzMztmaWNlcywgcGVydGUgZGBleHBsb2l0YXRpb24sIHBlcnRlIGRlIGNsaWVudCYjMjMyO2xlIG91IGRlIGNvbW1hbmRlcywgbWFucXVlICYjMjI0OyBnYWduZXIsIHRyb3VibGUgY29tbWVyY2lhbCBxdWVsY29ucXVlKSBvdSB0b3V0ZSBhY3Rpb24gZGlyaWcmIzIzMztlIGNvbnRyZSBsZSBMaWNlbmNpJiMyMzM7IHBhciB1biB0aWVycywgY29uc3RpdHVlIHVuIGRvbW1hZ2UgaW5kaXJlY3QgZXQgbmBvdXZyZSBwYXMgZHJvaXQgJiMyMjQ7IHImIzIzMztwYXJhdGlvbiBwYXIgbGUgQ29uYyYjMjMzO2RhbnQuCisKK0FydGljbGUgOSAtIEdBUkFOVElFCisKKzkuMSBMZSBMaWNlbmNpJiMyMzM7IHJlY29ubmEmIzIzODt0IHF1ZSBsYCYjMjMzO3RhdCBhY3R1ZWwgZGVzIGNvbm5haXNzYW5jZXMgc2NpZW50aWZpcXVlcyBldCB0ZWNobmlxdWVzIGF1IG1vbWVudCBkZSBsYSBtaXNlIGVuIGNpcmN1bGF0aW9uIGR1IExvZ2ljaWVsIG5lIHBlcm1ldCBwYXMgZGBlbiB0ZXN0ZXIgZXQgZGBlbiB2JiMyMzM7cmlmaWVyIHRvdXRlcyBsZXMgdXRpbGlzYXRpb25zIG5pIGRlIGQmIzIzMzt0ZWN0ZXIgbGBleGlzdGVuY2UgZGAmIzIzMzt2ZW50dWVscyBkJiMyMzM7ZmF1dHMuIExgYXR0ZW50aW9uIGR1IExpY2VuY2kmIzIzMzsgYSAmIzIzMzt0JiMyMzM7IGF0dGlyJiMyMzM7ZSBzdXIgY2UgcG9pbnQgc3VyIGxlcyByaXNxdWVzIGFzc29jaSYjMjMzO3MgYXUgY2hhcmdlbWVudCwgJiMyMjQ7IGxgdXRpbGlzYXRpb24sIGxhIG1vZGlmaWNhdGlvbiBldC9vdSBhdSBkJiMyMzM7dmVsb3BwZW1lbnQgZXQgJiMyMjQ7IGxhIHJlcHJvZHVjdGlvbiBkdSBMb2dpY2llbCBxdWkgc29udCByJiMyMzM7c2VydiYjMjMzO3MgJiMyMjQ7IGRlcyB1dGlsaXNhdGV1cnMgYXZlcnRpcy4KKworSWwgcmVsJiMyMzI7dmUgZGUgbGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBMaWNlbmNpJiMyMzM7IGRlIGNvbnRyJiMyNDQ7bGVyLCBwYXIgdG91cyBtb3llbnMsIGxgYWQmIzIzMztxdWF0aW9uIGR1IHByb2R1aXQgJiMyMjQ7IHNlcyBiZXNvaW5zLCBzb24gYm9uIGZvbmN0aW9ubmVtZW50IGV0IGRlIHNgYXNzdXJlciBxdWBpbCBuZSBjYXVzZXJhIHBhcyBkZSBkb21tYWdlcyBhdXggcGVyc29ubmVzIGV0IGF1eCBiaWVucy4KKworOS4yIExlIENvbmMmIzIzMztkYW50IGQmIzIzMztjbGFyZSBkZSBib25uZSBmb2kgJiMyMzQ7dHJlIGVuIGRyb2l0IGRlIGNvbmMmIzIzMztkZXIgbGBlbnNlbWJsZSBkZXMgZHJvaXRzIGF0dGFjaCYjMjMzO3MgYXUgTG9naWNpZWwgKGNvbXByZW5hbnQgbm90YW1tZW50IGxlcyBkcm9pdHMgdmlzJiMyMzM7cyAmIzIyNDsgbGBhcnRpY2xlIDUpLgorCis5LjMgTGUgTGljZW5jaSYjMjMzOyByZWNvbm5hJiMyMzg7dCBxdWUgbGUgTG9naWNpZWwgZXN0IGZvdXJuaSAiZW4gbGAmIzIzMzt0YXQiIHBhciBsZSBDb25jJiMyMzM7ZGFudCBzYW5zIGF1dHJlIGdhcmFudGllLCBleHByZXNzZSBvdSB0YWNpdGUsIHF1ZSBjZWxsZSBwciYjMjMzO3Z1ZSAmIzIyNDsgbGBhcnRpY2xlIDkuMiBldCBub3RhbW1lbnQgc2FucyBhdWN1bmUgZ2FyYW50aWUgc3VyIHNhIHZhbGV1ciBjb21tZXJjaWFsZSwgc29uIGNhcmFjdCYjMjMyO3JlIHMmIzIzMztjdXJpcyYjMjMzOywgaW5ub3ZhbnQgb3UgcGVydGluZW50LgorCitFbiBwYXJ0aWN1bGllciwgbGUgQ29uYyYjMjMzO2RhbnQgbmUgZ2FyYW50aXQgcGFzIHF1ZSBsZSBMb2dpY2llbCBlc3QgZXhlbXB0IGRgZXJyZXVyLCBxdWBpbCBmb25jdGlvbm5lcmEgc2FucyBpbnRlcnJ1cHRpb24sIHF1YGlsIHNlcmEgY29tcGF0aWJsZSBhdmVjIGxgJiMyMzM7cXVpcGVtZW50IGR1IExpY2VuY2kmIzIzMzsgZXQgc2EgY29uZmlndXJhdGlvbiBsb2dpY2llbGxlIG5pIHF1YGlsIHJlbXBsaXJhIGxlcyBiZXNvaW5zIGR1IExpY2VuY2kmIzIzMzsuCisKKzkuNCBMZSBDb25jJiMyMzM7ZGFudCBuZSBnYXJhbnRpdCBwYXMsIGRlIG1hbmkmIzIzMjtyZSBleHByZXNzZSBvdSB0YWNpdGUsIHF1ZSBsZSBMb2dpY2llbCBuZSBwb3J0ZSBwYXMgYXR0ZWludGUgJiMyMjQ7IHVuIHF1ZWxjb25xdWUgZHJvaXQgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkYHVuIHRpZXJzIHBvcnRhbnQgc3VyIHVuIGJyZXZldCwgdW4gbG9naWNpZWwgb3Ugc3VyIHRvdXQgYXV0cmUgZHJvaXQgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOy4gQWluc2ksIGxlIENvbmMmIzIzMztkYW50IGV4Y2x1dCB0b3V0ZSBnYXJhbnRpZSBhdSBwcm9maXQgZHUgTGljZW5jaSYjMjMzOyBjb250cmUgbGVzIGFjdGlvbnMgZW4gY29udHJlZmEmIzIzMTtvbiBxdWkgcG91cnJhaWVudCAmIzIzNDt0cmUgZGlsaWdlbnQmIzIzMztlcyBhdSB0aXRyZSBkZSBsYHV0aWxpc2F0aW9uLCBkZSBsYSBtb2RpZmljYXRpb24sIGV0IGRlIGxhIHJlZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsLiBOJiMyMzM7YW5tb2lucywgc2kgZGUgdGVsbGVzIGFjdGlvbnMgc29udCBleGVyYyYjMjMzO2VzIGNvbnRyZSBsZSBMaWNlbmNpJiMyMzM7LCBsZSBDb25jJiMyMzM7ZGFudCBsdWkgYXBwb3J0ZXJhIHNvbiBhaWRlIHRlY2huaXF1ZSBldCBqdXJpZGlxdWUgcG91ciBzYSBkJiMyMzM7ZmVuc2UuIENldHRlIGFpZGUgdGVjaG5pcXVlIGV0IGp1cmlkaXF1ZSBlc3QgZCYjMjMzO3Rlcm1pbiYjMjMzO2UgYXUgY2FzIHBhciBjYXMgZW50cmUgbGUgQ29uYyYjMjMzO2RhbnQgY29uY2VybiYjMjMzOyBldCBsZSBMaWNlbmNpJiMyMzM7IGRhbnMgbGUgY2FkcmUgZGB1biBwcm90b2NvbGUgZGBhY2NvcmQuIExlIENvbmMmIzIzMztkYW50IGQmIzIzMztnYWdlIHRvdXRlIHJlc3BvbnNhYmlsaXQmIzIzMzsgcXVhbnQgJiMyMjQ7IGxgdXRpbGlzYXRpb24gZGUgbGEgZCYjMjMzO25vbWluYXRpb24gZHUgTG9naWNpZWwgcGFyIGxlIExpY2VuY2kmIzIzMzsuIEF1Y3VuZSBnYXJhbnRpZSBuYGVzdCBhcHBvcnQmIzIzMztlIHF1YW50ICYjMjI0OyBsYGV4aXN0ZW5jZSBkZSBkcm9pdHMgYW50JiMyMzM7cmlldXJzIHN1ciBsZSBub20gZHUgTG9naWNpZWwgZXQgc3VyIGxgZXhpc3RlbmNlIGRgdW5lIG1hcnF1ZS4KKworQXJ0aWNsZSAxMCAtIFJFU0lMSUFUSU9OCisKKzEwLjEgRW4gY2FzIGRlIG1hbnF1ZW1lbnQgcGFyIGxlIExpY2VuY2kmIzIzMzsgYXV4IG9ibGlnYXRpb25zIG1pc2VzICYjMjI0OyBzYSBjaGFyZ2UgcGFyIGxlIENvbnRyYXQsIGxlIENvbmMmIzIzMztkYW50IHBvdXJyYSByJiMyMzM7c2lsaWVyIGRlIHBsZWluIGRyb2l0IGxlIENvbnRyYXQgdHJlbnRlICgzMCkgam91cnMgYXByJiMyMzI7cyBub3RpZmljYXRpb24gYWRyZXNzJiMyMzM7ZSBhdSBMaWNlbmNpJiMyMzM7IGV0IHJlc3QmIzIzMztlIHNhbnMgZWZmZXQuCisKKzEwLjIgTGUgTGljZW5jaSYjMjMzOyBkb250IGxlIENvbnRyYXQgZXN0IHImIzIzMztzaWxpJiMyMzM7IG5gZXN0IHBsdXMgYXV0b3JpcyYjMjMzOyAmIzIyNDsgdXRpbGlzZXIsIG1vZGlmaWVyIG91IGRpc3RyaWJ1ZXIgbGUgTG9naWNpZWwuIENlcGVuZGFudCwgdG91dGVzIGxlcyBsaWNlbmNlcyBxdWBpbCBhdXJhIGNvbmMmIzIzMztkJiMyMzM7ZXMgYW50JiMyMzM7cmlldXJlbWVudCAmIzIyNDsgbGEgciYjMjMzO3NpbGlhdGlvbiBkdSBDb250cmF0IHJlc3Rlcm9udCB2YWxpZGVzIHNvdXMgciYjMjMzO3NlcnZlIHF1YGVsbGVzIGFpZW50ICYjMjMzO3QmIzIzMzsgZWZmZWN0dSYjMjMzO2VzIGVuIGNvbmZvcm1pdCYjMjMzOyBhdmVjIGxlIENvbnRyYXQuCisKK0FydGljbGUgMTEgLSBESVNQT1NJVElPTlMgRElWRVJTRVMKKworMTEuMSBDQVVTRSBFWFRFUklFVVJFCisKK0F1Y3VuZSBkZXMgUGFydGllcyBuZSBzZXJhIHJlc3BvbnNhYmxlIGRgdW4gcmV0YXJkIG91IGRgdW5lIGQmIzIzMztmYWlsbGFuY2UgZGBleCYjMjMzO2N1dGlvbiBkdSBDb250cmF0IHF1aSBzZXJhaXQgZCYjMjUxOyAmIzIyNDsgdW4gY2FzIGRlIGZvcmNlIG1hamV1cmUsIHVuIGNhcyBmb3J0dWl0IG91IHVuZSBjYXVzZSBleHQmIzIzMztyaWV1cmUsIHRlbGxlIHF1ZSwgbm90YW1tZW50LCBsZSBtYXV2YWlzIGZvbmN0aW9ubmVtZW50IG91IGxlcyBpbnRlcnJ1cHRpb25zIGR1IHImIzIzMztzZWF1ICYjMjMzO2xlY3RyaXF1ZSBvdSBkZSB0JiMyMzM7bCYjMjMzO2NvbW11bmljYXRpb24sIGxhIHBhcmFseXNpZSBkdSByJiMyMzM7c2VhdSBsaSYjMjMzO2UgJiMyMjQ7IHVuZSBhdHRhcXVlIGluZm9ybWF0aXF1ZSwgbGBpbnRlcnZlbnRpb24gZGVzIGF1dG9yaXQmIzIzMztzIGdvdXZlcm5lbWVudGFsZXMsIGxlcyBjYXRhc3Ryb3BoZXMgbmF0dXJlbGxlcywgbGVzIGQmIzIzMztnJiMyMjY7dHMgZGVzIGVhdXgsIGxlcyB0cmVtYmxlbWVudHMgZGUgdGVycmUsIGxlIGZldSwgbGVzIGV4cGxvc2lvbnMsIGxlcyBnciYjMjMyO3ZlcyBldCBsZXMgY29uZmxpdHMgc29jaWF1eCwgbGAmIzIzMzt0YXQgZGUgZ3VlcnJlLi4uCisKKzExLjIgTGUgZmFpdCwgcGFyIGxgdW5lIG91IGxgYXV0cmUgZGVzIFBhcnRpZXMsIGRgb21ldHRyZSBlbiB1bmUgb3UgcGx1c2lldXJzIG9jY2FzaW9ucyBkZSBzZSBwciYjMjMzO3ZhbG9pciBkYHVuZSBvdSBwbHVzaWV1cnMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQsIG5lIHBvdXJyYSBlbiBhdWN1biBjYXMgaW1wbGlxdWVyIHJlbm9uY2lhdGlvbiBwYXIgbGEgUGFydGllIGludCYjMjMzO3Jlc3MmIzIzMztlICYjMjI0OyBzYGVuIHByJiMyMzM7dmFsb2lyIHVsdCYjMjMzO3JpZXVyZW1lbnQuCisKKzExLjMgTGUgQ29udHJhdCBhbm51bGUgZXQgcmVtcGxhY2UgdG91dGUgY29udmVudGlvbiBhbnQmIzIzMztyaWV1cmUsICYjMjMzO2NyaXRlIG91IG9yYWxlLCBlbnRyZSBsZXMgUGFydGllcyBzdXIgbGUgbSYjMjM0O21lIG9iamV0IGV0IGNvbnN0aXR1ZSBsYGFjY29yZCBlbnRpZXIgZW50cmUgbGVzIFBhcnRpZXMgc3VyIGNldCBvYmpldC4gQXVjdW5lIGFkZGl0aW9uIG91IG1vZGlmaWNhdGlvbiBhdXggdGVybWVzIGR1IENvbnRyYXQgbmBhdXJhIGRgZWZmZXQgJiMyMjQ7IGxgJiMyMzM7Z2FyZCBkZXMgUGFydGllcyAmIzIyNDsgbW9pbnMgZGAmIzIzNDt0cmUgZmFpdGUgcGFyICYjMjMzO2NyaXQgZXQgc2lnbiYjMjMzO2UgcGFyIGxldXJzIHJlcHImIzIzMztzZW50YW50cyBkJiMyNTE7bWVudCBoYWJpbGl0JiMyMzM7cy4KKworMTEuNCBEYW5zIGxgaHlwb3RoJiMyMzI7c2UgbyYjMjQ5OyB1bmUgb3UgcGx1c2lldXJzIGRlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBzYGF2JiMyMzI7cmVyYWl0IGNvbnRyYWlyZSAmIzIyNDsgdW5lIGxvaSBvdSAmIzIyNDsgdW4gdGV4dGUgYXBwbGljYWJsZSwgZXhpc3RhbnRzIG91IGZ1dHVycywgY2V0dGUgbG9pIG91IGNlIHRleHRlIHByJiMyMzM7dmF1ZHJhaXQsIGV0IGxlcyBQYXJ0aWVzIGZlcmFpZW50IGxlcyBhbWVuZGVtZW50cyBuJiMyMzM7Y2Vzc2FpcmVzIHBvdXIgc2UgY29uZm9ybWVyICYjMjI0OyBjZXR0ZSBsb2kgb3UgJiMyMjQ7IGNlIHRleHRlLiBUb3V0ZXMgbGVzIGF1dHJlcyBkaXNwb3NpdGlvbnMgcmVzdGVyb250IGVuIHZpZ3VldXIuIERlIG0mIzIzNDttZSwgbGEgbnVsbGl0JiMyMzM7LCBwb3VyIHF1ZWxxdWUgcmFpc29uIHF1ZSBjZSBzb2l0LCBkYHVuZSBkZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgbmUgc2F1cmFpdCBlbnRyYSYjMjM4O25lciBsYSBudWxsaXQmIzIzMzsgZGUgbGBlbnNlbWJsZSBkdSBDb250cmF0LgorCisxMS41IExBTkdVRQorCitMZSBDb250cmF0IGVzdCByJiMyMzM7ZGlnJiMyMzM7IGVuIGxhbmd1ZSBmcmFuJiMyMzE7YWlzZSBldCBlbiBsYW5ndWUgYW5nbGFpc2UsIGNlcyBkZXV4IHZlcnNpb25zIGZhaXNhbnQgJiMyMzM7Z2FsZW1lbnQgZm9pLgorCitBcnRpY2xlIDEyIC0gTk9VVkVMTEVTIFZFUlNJT05TIERVIENPTlRSQVQKKworMTIuMSBUb3V0ZSBwZXJzb25uZSBlc3QgYXV0b3JpcyYjMjMzO2UgJiMyMjQ7IGNvcGllciBldCBkaXN0cmlidWVyIGRlcyBjb3BpZXMgZGUgY2UgQ29udHJhdC4KKworMTIuMiBBZmluIGRgZW4gcHImIzIzMztzZXJ2ZXIgbGEgY29oJiMyMzM7cmVuY2UsIGxlIHRleHRlIGR1IENvbnRyYXQgZXN0IHByb3QmIzIzMztnJiMyMzM7IGV0IG5lIHBldXQgJiMyMzQ7dHJlIG1vZGlmaSYjMjMzOyBxdWUgcGFyIGxlcyBhdXRldXJzIGRlIGxhIGxpY2VuY2UsIGxlc3F1ZWxzIHNlIHImIzIzMztzZXJ2ZW50IGxlIGRyb2l0IGRlIHB1YmxpZXIgcCYjMjMzO3Jpb2RpcXVlbWVudCBkZXMgbWlzZXMgJiMyMjQ7IGpvdXIgb3UgZGUgbm91dmVsbGVzIHZlcnNpb25zIGR1IENvbnRyYXQsIHF1aSBwb3NzJiMyMzM7ZGVyb250IGNoYWN1bmUgdW4gbnVtJiMyMzM7cm8gZGlzdGluY3QuIENlcyB2ZXJzaW9ucyB1bHQmIzIzMztyaWV1cmVzIHNlcm9udCBzdXNjZXB0aWJsZXMgZGUgcHJlbmRyZSBlbiBjb21wdGUgZGUgbm91dmVsbGVzIHByb2JsJiMyMzM7bWF0aXF1ZXMgcmVuY29udHImIzIzMztlcyBwYXIgbGVzIGxvZ2ljaWVscyBsaWJyZXMuCisKKzEyLjMgVG91dCBMb2dpY2llbCBkaWZmdXMmIzIzMzsgc291cyB1bmUgdmVyc2lvbiBkb25uJiMyMzM7ZSBkdSBDb250cmF0IG5lIHBvdXJyYSBmYWlyZSBsYG9iamV0IGRgdW5lIGRpZmZ1c2lvbiB1bHQmIzIzMztyaWV1cmUgcXVlIHNvdXMgbGEgbSYjMjM0O21lIHZlcnNpb24gZHUgQ29udHJhdCBvdSB1bmUgdmVyc2lvbiBwb3N0JiMyMzM7cmlldXJlLgorCitBcnRpY2xlIDEzIC0gTE9JIEFQUExJQ0FCTEUgRVQgQ09NUEVURU5DRSBURVJSSVRPUklBTEUKKworMTMuMSBMZSBDb250cmF0IGVzdCByJiMyMzM7Z2kgcGFyIGxhIGxvaSBmcmFuJiMyMzE7YWlzZS4gTGVzIFBhcnRpZXMgY29udmllbm5lbnQgZGUgdGVudGVyIGRlIHImIzIzMztnbGVyICYjMjI0OyBsYGFtaWFibGUgbGVzIGRpZmYmIzIzMztyZW5kcyBvdSBsaXRpZ2VzIHF1aSB2aWVuZHJhaWVudCAmIzIyNDsgc2UgcHJvZHVpcmUgcGFyIHN1aXRlIG91ICYjMjI0OyBsYG9jY2FzaW9uIGR1IENvbnRyYXQuCisKKzEzLjIgQSBkJiMyMzM7ZmF1dCBkYGFjY29yZCBhbWlhYmxlIGRhbnMgdW4gZCYjMjMzO2xhaSBkZSBkZXV4ICgyKSBtb2lzICYjMjI0OyBjb21wdGVyIGRlIGxldXIgc3VydmVuYW5jZSBldCBzYXVmIHNpdHVhdGlvbiByZWxldmFudCBkYHVuZSBwcm9jJiMyMzM7ZHVyZSBkYHVyZ2VuY2UsIGxlcyBkaWZmJiMyMzM7cmVuZHMgb3UgbGl0aWdlcyBzZXJvbnQgcG9ydCYjMjMzO3MgcGFyIGxhIFBhcnRpZSBsYSBwbHVzIGRpbGlnZW50ZSBkZXZhbnQgbGVzIFRyaWJ1bmF1eCBjb21wJiMyMzM7dGVudHMgZGUgUGFyaXMuCisKKzEgQ2VDSUxMIGVzdCBwb3VyIENlKGEpIEMobnJzKSBJKG5yaWEpIEwob2dpY2llbCkgTChpYnJlKQorCitWZXJzaW9uIDEuMCBkdSAyMDA2LTA5LTA1LgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NFQ0lMTC1DIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRUNJTEwtQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZThlZjg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRUNJTEwtQwpAQCAtMCwwICsxLDI0MSBAQAorCitDT05UUkFUIERFIExJQ0VOQ0UgREUgTE9HSUNJRUwgTElCUkUgQ2VDSUxMLUMKKworQXZlcnRpc3NlbWVudAorCitDZSBjb250cmF0IGVzdCB1bmUgbGljZW5jZSBkZSBsb2dpY2llbCBsaWJyZSBpc3N1ZSBkYHVuZSBjb25jZXJ0YXRpb24gZW50cmUgc2VzIGF1dGV1cnMgYWZpbiBxdWUgbGUgcmVzcGVjdCBkZSBkZXV4IGdyYW5kcyBwcmluY2lwZXMgcHImIzIzMztzaWRlICYjMjI0OyBzYSByJiMyMzM7ZGFjdGlvbjoKKworZGB1bmUgcGFydCwgbGUgcmVzcGVjdCBkZXMgcHJpbmNpcGVzIGRlIGRpZmZ1c2lvbiBkZXMgbG9naWNpZWxzIGxpYnJlczogYWNjJiMyMzI7cyBhdSBjb2RlIHNvdXJjZSwgZHJvaXRzICYjMjMzO3RlbmR1cyBjb25mJiMyMzM7ciYjMjMzO3MgYXV4IHV0aWxpc2F0ZXVycywKK2RgYXV0cmUgcGFydCwgbGEgZCYjMjMzO3NpZ25hdGlvbiBkYHVuIGRyb2l0IGFwcGxpY2FibGUsIGxlIGRyb2l0IGZyYW4mIzIzMTthaXMsIGF1cXVlbCBlbGxlIGVzdCBjb25mb3JtZSwgdGFudCBhdSByZWdhcmQgZHUgZHJvaXQgZGUgbGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBjaXZpbGUgcXVlIGR1IGRyb2l0IGRlIGxhIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZXQgZGUgbGEgcHJvdGVjdGlvbiBxdWBpbCBvZmZyZSBhdXggYXV0ZXVycyBldCB0aXR1bGFpcmVzIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHN1ciB1biBsb2dpY2llbC4KK0xlcyBhdXRldXJzIGRlIGxhIGxpY2VuY2UgQ2VDSUxMLUMxIHNvbnQ6CisKK0NvbW1pc3NhcmlhdCAmIzIyNDsgbGBFbmVyZ2llIEF0b21pcXVlIC0gQ0VBLCAmIzIzMzt0YWJsaXNzZW1lbnQgcHVibGljIGRlIHJlY2hlcmNoZSAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlLCB0ZWNobmlxdWUgZXQgaW5kdXN0cmllbCwgZG9udCBsZSBzaSYjMjMyO2dlIGVzdCBzaXR1JiMyMzM7IDI1IHJ1ZSBMZWJsYW5jLCBpbW1ldWJsZSBMZSBQb25hbnQgRCwgNzUwMTUgUGFyaXMuCisKK0NlbnRyZSBOYXRpb25hbCBkZSBsYSBSZWNoZXJjaGUgU2NpZW50aWZpcXVlIC0gQ05SUywgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlIGV0IHRlY2hub2xvZ2lxdWUsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyAzIHJ1ZSBNaWNoZWwtQW5nZSwgNzU3OTQgUGFyaXMgY2VkZXggMTYuCisKK0luc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4gQXV0b21hdGlxdWUgLSBJTlJJQSwgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlIGV0IHRlY2hub2xvZ2lxdWUsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyBEb21haW5lIGRlIFZvbHVjZWF1LCBSb2NxdWVuY291cnQsIEJQIDEwNSwgNzgxNTMgTGUgQ2hlc25heSBjZWRleC4KKworUHImIzIzMzthbWJ1bGUKKworQ2UgY29udHJhdCBlc3QgdW5lIGxpY2VuY2UgZGUgbG9naWNpZWwgbGlicmUgZG9udCBsYG9iamVjdGlmIGVzdCBkZSBjb25mJiMyMzM7cmVyIGF1eCB1dGlsaXNhdGV1cnMgbGEgbGliZXJ0JiMyMzM7IGRlIG1vZGlmaWVyIGV0IGRlIHImIzIzMzt1dGlsaXNlciBsZSBsb2dpY2llbCByJiMyMzM7Z2kgcGFyIGNldHRlIGxpY2VuY2UuCisKK0xgZXhlcmNpY2UgZGUgY2V0dGUgbGliZXJ0JiMyMzM7IGVzdCBhc3NvcnRpIGRgdW5lIG9ibGlnYXRpb24gZGUgcmVtZXR0cmUgJiMyMjQ7IGxhIGRpc3Bvc2l0aW9uIGRlIGxhIGNvbW11bmF1dCYjMjMzOyBsZXMgbW9kaWZpY2F0aW9ucyBhcHBvcnQmIzIzMztlcyBhdSBjb2RlIHNvdXJjZSBkdSBsb2dpY2llbCBhZmluIGRlIGNvbnRyaWJ1ZXIgJiMyMjQ7IHNvbiAmIzIzMzt2b2x1dGlvbi4KKworTGBhY2Nlc3NpYmlsaXQmIzIzMzsgYXUgY29kZSBzb3VyY2UgZXQgbGVzIGRyb2l0cyBkZSBjb3BpZSwgZGUgbW9kaWZpY2F0aW9uIGV0IGRlIHJlZGlzdHJpYnV0aW9uIHF1aSBkJiMyMzM7Y291bGVudCBkZSBjZSBjb250cmF0IG9udCBwb3VyIGNvbnRyZXBhcnRpZSBkZSBuYG9mZnJpciBhdXggdXRpbGlzYXRldXJzIHF1YHVuZSBnYXJhbnRpZSBsaW1pdCYjMjMzO2UgZXQgZGUgbmUgZmFpcmUgcGVzZXIgc3VyIGxgYXV0ZXVyIGR1IGxvZ2ljaWVsLCBsZSB0aXR1bGFpcmUgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggZXQgbGVzIGNvbmMmIzIzMztkYW50cyBzdWNjZXNzaWZzIHF1YHVuZSByZXNwb25zYWJpbGl0JiMyMzM7IHJlc3RyZWludGUuCisKK0EgY2V0ICYjMjMzO2dhcmQgbGBhdHRlbnRpb24gZGUgbGB1dGlsaXNhdGV1ciBlc3QgYXR0aXImIzIzMztlIHN1ciBsZXMgcmlzcXVlcyBhc3NvY2kmIzIzMztzIGF1IGNoYXJnZW1lbnQsICYjMjI0OyBsYHV0aWxpc2F0aW9uLCAmIzIyNDsgbGEgbW9kaWZpY2F0aW9uIGV0L291IGF1IGQmIzIzMzt2ZWxvcHBlbWVudCBldCAmIzIyNDsgbGEgcmVwcm9kdWN0aW9uIGR1IGxvZ2ljaWVsIHBhciBsYHV0aWxpc2F0ZXVyICYjMjMzO3RhbnQgZG9ubiYjMjMzOyBzYSBzcCYjMjMzO2NpZmljaXQmIzIzMzsgZGUgbG9naWNpZWwgbGlicmUsIHF1aSBwZXV0IGxlIHJlbmRyZSBjb21wbGV4ZSAmIzIyNDsgbWFuaXB1bGVyIGV0IHF1aSBsZSByJiMyMzM7c2VydmUgZG9uYyAmIzIyNDsgZGVzIGQmIzIzMzt2ZWxvcHBldXJzIG91IGRlcyBwcm9mZXNzaW9ubmVscyBhdmVydGlzIHBvc3MmIzIzMztkYW50IGRlcyBjb25uYWlzc2FuY2VzIGluZm9ybWF0aXF1ZXMgYXBwcm9mb25kaWVzLiBMZXMgdXRpbGlzYXRldXJzIHNvbnQgZG9uYyBpbnZpdCYjMjMzO3MgJiMyMjQ7IGNoYXJnZXIgZXQgdGVzdGVyIGxgYWQmIzIzMztxdWF0aW9uIGR1IGxvZ2ljaWVsICYjMjI0OyBsZXVycyBiZXNvaW5zIGRhbnMgZGVzIGNvbmRpdGlvbnMgcGVybWV0dGFudCBkYGFzc3VyZXIgbGEgcyYjMjMzO2N1cml0JiMyMzM7IGRlIGxldXJzIHN5c3QmIzIzMjttZXMgZXQvb3UgZGUgbGV1cnMgZG9ubiYjMjMzO2VzIGV0LCBwbHVzIGcmIzIzMztuJiMyMzM7cmFsZW1lbnQsICYjMjI0OyBsYHV0aWxpc2VyIGV0IGxgZXhwbG9pdGVyIGRhbnMgbGVzIG0mIzIzNDttZXMgY29uZGl0aW9ucyBkZSBzJiMyMzM7Y3VyaXQmIzIzMzsuIENlIGNvbnRyYXQgcGV1dCAmIzIzNDt0cmUgcmVwcm9kdWl0IGV0IGRpZmZ1cyYjMjMzOyBsaWJyZW1lbnQsIHNvdXMgciYjMjMzO3NlcnZlIGRlIGxlIGNvbnNlcnZlciBlbiBsYCYjMjMzO3RhdCwgc2FucyBham91dCBuaSBzdXBwcmVzc2lvbiBkZSBjbGF1c2VzLgorCitDZSBjb250cmF0IGVzdCBzdXNjZXB0aWJsZSBkZSBzYGFwcGxpcXVlciAmIzIyNDsgdG91dCBsb2dpY2llbCBkb250IGxlIHRpdHVsYWlyZSBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBkJiMyMzM7Y2lkZSBkZSBzb3VtZXR0cmUgbGBleHBsb2l0YXRpb24gYXV4IGRpc3Bvc2l0aW9ucyBxdWBpbCBjb250aWVudC4KKworQXJ0aWNsZSAxIC0gREVGSU5JVElPTlMKKworRGFucyBjZSBjb250cmF0LCBsZXMgdGVybWVzIHN1aXZhbnRzLCBsb3JzcXVgaWxzIHNlcm9udCAmIzIzMztjcml0cyBhdmVjIHVuZSBsZXR0cmUgY2FwaXRhbGUsIGF1cm9udCBsYSBzaWduaWZpY2F0aW9uIHN1aXZhbnRlOgorCitDb250cmF0OiBkJiMyMzM7c2lnbmUgbGUgcHImIzIzMztzZW50IGNvbnRyYXQgZGUgbGljZW5jZSwgc2VzICYjMjMzO3ZlbnR1ZWxsZXMgdmVyc2lvbnMgcG9zdCYjMjMzO3JpZXVyZXMgZXQgYW5uZXhlcy4KKworTG9naWNpZWw6IGQmIzIzMztzaWduZSBsZSBsb2dpY2llbCBzb3VzIHNhIGZvcm1lIGRlIENvZGUgT2JqZXQgZXQvb3UgZGUgQ29kZSBTb3VyY2UgZXQgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50IHNhIGRvY3VtZW50YXRpb24sIGRhbnMgbGV1ciAmIzIzMzt0YXQgYXUgbW9tZW50IGRlIGxgYWNjZXB0YXRpb24gZHUgQ29udHJhdCBwYXIgbGUgTGljZW5jaSYjMjMzOy4KKworTG9naWNpZWwgSW5pdGlhbDogZCYjMjMzO3NpZ25lIGxlIExvZ2ljaWVsIHNvdXMgc2EgZm9ybWUgZGUgQ29kZSBTb3VyY2UgZXQgJiMyMzM7dmVudHVlbGxlbWVudCBkZSBDb2RlIE9iamV0IGV0IGxlIGNhcyAmIzIzMztjaCYjMjMzO2FudCBzYSBkb2N1bWVudGF0aW9uLCBkYW5zIGxldXIgJiMyMzM7dGF0IGF1IG1vbWVudCBkZSBsZXVyIHByZW1pJiMyMzI7cmUgZGlmZnVzaW9uIHNvdXMgbGVzIHRlcm1lcyBkdSBDb250cmF0LgorCitMb2dpY2llbCBNb2RpZmkmIzIzMzs6IGQmIzIzMztzaWduZSBsZSBMb2dpY2llbCBtb2RpZmkmIzIzMzsgcGFyIGF1IG1vaW5zIHVuZSBDb250cmlidXRpb24gSW50JiMyMzM7Z3ImIzIzMztlLgorCitDb2RlIFNvdXJjZTogZCYjMjMzO3NpZ25lIGxgZW5zZW1ibGUgZGVzIGluc3RydWN0aW9ucyBldCBkZXMgbGlnbmVzIGRlIHByb2dyYW1tZSBkdSBMb2dpY2llbCBldCBhdXF1ZWwgbGBhY2MmIzIzMjtzIGVzdCBuJiMyMzM7Y2Vzc2FpcmUgZW4gdnVlIGRlIG1vZGlmaWVyIGxlIExvZ2ljaWVsLgorCitDb2RlIE9iamV0OiBkJiMyMzM7c2lnbmUgbGVzIGZpY2hpZXJzIGJpbmFpcmVzIGlzc3VzIGRlIGxhIGNvbXBpbGF0aW9uIGR1IENvZGUgU291cmNlLgorCitUaXR1bGFpcmU6IGQmIzIzMztzaWduZSBsZSBvdSBsZXMgZCYjMjMzO3RlbnRldXJzIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IGRgYXV0ZXVyIHN1ciBsZSBMb2dpY2llbCBJbml0aWFsLgorCitMaWNlbmNpJiMyMzM7OiBkJiMyMzM7c2lnbmUgbGUgb3UgbGVzIHV0aWxpc2F0ZXVycyBkdSBMb2dpY2llbCBheWFudCBhY2NlcHQmIzIzMzsgbGUgQ29udHJhdC4KKworQ29udHJpYnV0ZXVyOiBkJiMyMzM7c2lnbmUgbGUgTGljZW5jaSYjMjMzOyBhdXRldXIgZGBhdSBtb2lucyB1bmUgQ29udHJpYnV0aW9uIEludCYjMjMzO2dyJiMyMzM7ZS4KKworQ29uYyYjMjMzO2RhbnQ6IGQmIzIzMztzaWduZSBsZSBUaXR1bGFpcmUgb3UgdG91dGUgcGVyc29ubmUgcGh5c2lxdWUgb3UgbW9yYWxlIGRpc3RyaWJ1YW50IGxlIExvZ2ljaWVsIHNvdXMgbGUgQ29udHJhdC4KKworQ29udHJpYnV0aW9uIEludCYjMjMzO2dyJiMyMzM7ZTogZCYjMjMzO3NpZ25lIGxgZW5zZW1ibGUgZGVzIG1vZGlmaWNhdGlvbnMsIGNvcnJlY3Rpb25zLCB0cmFkdWN0aW9ucywgYWRhcHRhdGlvbnMgZXQvb3Ugbm91dmVsbGVzIGZvbmN0aW9ubmFsaXQmIzIzMztzIGludCYjMjMzO2dyJiMyMzM7ZXMgZGFucyBsZSBDb2RlIFNvdXJjZSBwYXIgdG91dCBDb250cmlidXRldXIuCisKK01vZHVsZSBMaSYjMjMzOzogZCYjMjMzO3NpZ25lIHVuIGVuc2VtYmxlIGRlIGZpY2hpZXJzIHNvdXJjZXMgeSBjb21wcmlzIGxldXIgZG9jdW1lbnRhdGlvbiBxdWksIHNhbnMgbW9kaWZpY2F0aW9uIGR1IENvZGUgU291cmNlLCBwZXJtZXQgZGUgciYjMjMzO2FsaXNlciBkZXMgZm9uY3Rpb25uYWxpdCYjMjMzO3Mgb3Ugc2VydmljZXMgc3VwcGwmIzIzMzttZW50YWlyZXMgJiMyMjQ7IGNldXggZm91cm5pcyBwYXIgbGUgTG9naWNpZWwuCisKK0xvZ2ljaWVsIEQmIzIzMztyaXYmIzIzMzs6IGQmIzIzMztzaWduZSB0b3V0ZSBjb21iaW5haXNvbiBkdSBMb2dpY2llbCwgbW9kaWZpJiMyMzM7IG91IG5vbiwgZXQgZGB1biBNb2R1bGUgTGkmIzIzMzsuCisKK1BhcnRpZXM6IGQmIzIzMztzaWduZSBjb2xsZWN0aXZlbWVudCBsZSBMaWNlbmNpJiMyMzM7IGV0IGxlIENvbmMmIzIzMztkYW50LgorCitDZXMgdGVybWVzIHNgZW50ZW5kZW50IGF1IHNpbmd1bGllciBjb21tZSBhdSBwbHVyaWVsLgorCitBcnRpY2xlIDIgLSBPQkpFVAorCitMZSBDb250cmF0IGEgcG91ciBvYmpldCBsYSBjb25jZXNzaW9uIHBhciBsZSBDb25jJiMyMzM7ZGFudCBhdSBMaWNlbmNpJiMyMzM7IGRgdW5lIGxpY2VuY2Ugbm9uIGV4Y2x1c2l2ZSwgY2Vzc2libGUgZXQgbW9uZGlhbGUgZHUgTG9naWNpZWwgdGVsbGUgcXVlIGQmIzIzMztmaW5pZSBjaS1hcHImIzIzMjtzICYjMjI0OyBsYGFydGljbGUgNSBwb3VyIHRvdXRlIGxhIGR1ciYjMjMzO2UgZGUgcHJvdGVjdGlvbiBkZXMgZHJvaXRzIHBvcnRhbnQgc3VyIGNlIExvZ2ljaWVsLgorCitBcnRpY2xlIDMgLSBBQ0NFUFRBVElPTgorCiszLjEgTGBhY2NlcHRhdGlvbiBwYXIgbGUgTGljZW5jaSYjMjMzOyBkZXMgdGVybWVzIGR1IENvbnRyYXQgZXN0IHImIzIzMztwdXQmIzIzMztlIGFjcXVpc2UgZHUgZmFpdCBkdSBwcmVtaWVyIGRlcyBmYWl0cyBzdWl2YW50czoKKworKGkpIGxlIGNoYXJnZW1lbnQgZHUgTG9naWNpZWwgcGFyIHRvdXQgbW95ZW4gbm90YW1tZW50IHBhciB0JiMyMzM7bCYjMjMzO2NoYXJnZW1lbnQgJiMyMjQ7IHBhcnRpciBkYHVuIHNlcnZldXIgZGlzdGFudCBvdSBwYXIgY2hhcmdlbWVudCAmIzIyNDsgcGFydGlyIGRgdW4gc3VwcG9ydCBwaHlzaXF1ZTsKKyhpaSkgbGUgcHJlbWllciBleGVyY2ljZSBwYXIgbGUgTGljZW5jaSYjMjMzOyBkZSBsYHVuIHF1ZWxjb25xdWUgZGVzIGRyb2l0cyBjb25jJiMyMzM7ZCYjMjMzO3MgcGFyIGxlIENvbnRyYXQuCiszLjIgVW4gZXhlbXBsYWlyZSBkdSBDb250cmF0LCBjb250ZW5hbnQgbm90YW1tZW50IHVuIGF2ZXJ0aXNzZW1lbnQgcmVsYXRpZiBhdXggc3AmIzIzMztjaWZpY2l0JiMyMzM7cyBkdSBMb2dpY2llbCwgJiMyMjQ7IGxhIHJlc3RyaWN0aW9uIGRlIGdhcmFudGllIGV0ICYjMjI0OyBsYSBsaW1pdGF0aW9uICYjMjI0OyB1biB1c2FnZSBwYXIgZGVzIHV0aWxpc2F0ZXVycyBleHAmIzIzMztyaW1lbnQmIzIzMztzIGEgJiMyMzM7dCYjMjMzOyBtaXMgJiMyMjQ7IGRpc3Bvc2l0aW9uIGR1IExpY2VuY2kmIzIzMzsgcHImIzIzMzthbGFibGVtZW50ICYjMjI0OyBzb24gYWNjZXB0YXRpb24gdGVsbGUgcXVlIGQmIzIzMztmaW5pZSAmIzIyNDsgbGBhcnRpY2xlIDMuMSBjaSBkZXNzdXMgZXQgbGUgTGljZW5jaSYjMjMzOyByZWNvbm5hJiMyMzg7dCBlbiBhdm9pciBwcmlzIGNvbm5haXNzYW5jZS4KKworQXJ0aWNsZSA0IC0gRU5UUkVFIEVOIFZJR1VFVVIgRVQgRFVSRUUKKworNC4xIEVOVFJFRSBFTiBWSUdVRVVSCisKK0xlIENvbnRyYXQgZW50cmUgZW4gdmlndWV1ciAmIzIyNDsgbGEgZGF0ZSBkZSBzb24gYWNjZXB0YXRpb24gcGFyIGxlIExpY2VuY2kmIzIzMzsgdGVsbGUgcXVlIGQmIzIzMztmaW5pZSBlbiAzLjEuCisKKzQuMiBEVVJFRQorCitMZSBDb250cmF0IHByb2R1aXJhIHNlcyBlZmZldHMgcGVuZGFudCB0b3V0ZSBsYSBkdXImIzIzMztlIGwmIzIzMztnYWxlIGRlIHByb3RlY3Rpb24gZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggcG9ydGFudCBzdXIgbGUgTG9naWNpZWwuCisKK0FydGljbGUgNSAtIEVURU5EVUUgREVTIERST0lUUyBDT05DRURFUworCitMZSBDb25jJiMyMzM7ZGFudCBjb25jJiMyMzI7ZGUgYXUgTGljZW5jaSYjMjMzOywgcXVpIGFjY2VwdGUsIGxlcyBkcm9pdHMgc3VpdmFudHMgc3VyIGxlIExvZ2ljaWVsIHBvdXIgdG91dGVzIGRlc3RpbmF0aW9ucyBldCBwb3VyIGxhIGR1ciYjMjMzO2UgZHUgQ29udHJhdCBkYW5zIGxlcyBjb25kaXRpb25zIGNpLWFwciYjMjMyO3MgZCYjMjMzO3RhaWxsJiMyMzM7ZXMuCisKK1BhciBhaWxsZXVycywgc2kgbGUgQ29uYyYjMjMzO2RhbnQgZCYjMjMzO3RpZW50IG91IHZlbmFpdCAmIzIyNDsgZCYjMjMzO3RlbmlyIHVuIG91IHBsdXNpZXVycyBicmV2ZXRzIGRgaW52ZW50aW9uIHByb3QmIzIzMztnZWFudCB0b3V0IG91IHBhcnRpZSBkZXMgZm9uY3Rpb25uYWxpdCYjMjMzO3MgZHUgTG9naWNpZWwgb3UgZGUgc2VzIGNvbXBvc2FudHMsIGlsIHNgZW5nYWdlICYjMjI0OyBuZSBwYXMgb3Bwb3NlciBsZXMgJiMyMzM7dmVudHVlbHMgZHJvaXRzIGNvbmYmIzIzMztyJiMyMzM7cyBwYXIgY2VzIGJyZXZldHMgYXV4IExpY2VuY2kmIzIzMztzIHN1Y2Nlc3NpZnMgcXVpIHV0aWxpc2VyYWllbnQsIGV4cGxvaXRlcmFpZW50IG91IG1vZGlmaWVyYWllbnQgbGUgTG9naWNpZWwuIEVuIGNhcyBkZSBjZXNzaW9uIGRlIGNlcyBicmV2ZXRzLCBsZSBDb25jJiMyMzM7ZGFudCBzYGVuZ2FnZSAmIzIyNDsgZmFpcmUgcmVwcmVuZHJlIGxlcyBvYmxpZ2F0aW9ucyBkdSBwciYjMjMzO3NlbnQgYWxpbiYjMjMzO2EgYXV4IGNlc3Npb25uYWlyZXMuCisKKzUuMSBEUk9JVCBEYFVUSUxJU0FUSU9OCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IHV0aWxpc2VyIGxlIExvZ2ljaWVsLCBzYW5zIHJlc3RyaWN0aW9uIHF1YW50IGF1eCBkb21haW5lcyBkYGFwcGxpY2F0aW9uLCAmIzIzMzt0YW50IGNpLWFwciYjMjMyO3MgcHImIzIzMztjaXMmIzIzMzsgcXVlIGNlbGEgY29tcG9ydGU6CisKK2xhIHJlcHJvZHVjdGlvbiBwZXJtYW5lbnRlIG91IHByb3Zpc29pcmUgZHUgTG9naWNpZWwgZW4gdG91dCBvdSBwYXJ0aWUgcGFyIHRvdXQgbW95ZW4gZXQgc291cyB0b3V0ZSBmb3JtZS4KKworbGUgY2hhcmdlbWVudCwgbGBhZmZpY2hhZ2UsIGxgZXgmIzIzMztjdXRpb24sIG91IGxlIHN0b2NrYWdlIGR1IExvZ2ljaWVsIHN1ciB0b3V0IHN1cHBvcnQuCisKK2xhIHBvc3NpYmlsaXQmIzIzMzsgZGBlbiBvYnNlcnZlciwgZGBlbiAmIzIzMzt0dWRpZXIsIG91IGRgZW4gdGVzdGVyIGxlIGZvbmN0aW9ubmVtZW50IGFmaW4gZGUgZCYjMjMzO3Rlcm1pbmVyIGxlcyBpZCYjMjMzO2VzIGV0IHByaW5jaXBlcyBxdWkgc29udCAmIzIyNDsgbGEgYmFzZSBkZSBuYGltcG9ydGUgcXVlbCAmIzIzMztsJiMyMzM7bWVudCBkZSBjZSBMb2dpY2llbDsgZXQgY2VjaSwgbG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGVmZmVjdHVlIHRvdXRlIG9wJiMyMzM7cmF0aW9uIGRlIGNoYXJnZW1lbnQsIGRgYWZmaWNoYWdlLCBkYGV4JiMyMzM7Y3V0aW9uLCBkZSB0cmFuc21pc3Npb24gb3UgZGUgc3RvY2thZ2UgZHUgTG9naWNpZWwgcXVgaWwgZXN0IGVuIGRyb2l0IGRgZWZmZWN0dWVyIGVuIHZlcnR1IGR1IENvbnRyYXQuCisKKzUuMiBEUk9JVCBERSBNT0RJRklDQVRJT04KKworTGUgZHJvaXQgZGUgbW9kaWZpY2F0aW9uIGNvbXBvcnRlIGxlIGRyb2l0IGRlIHRyYWR1aXJlLCBkYGFkYXB0ZXIsIGRgYXJyYW5nZXIgb3UgZGBhcHBvcnRlciB0b3V0ZSBhdXRyZSBtb2RpZmljYXRpb24gYXUgTG9naWNpZWwgZXQgbGUgZHJvaXQgZGUgcmVwcm9kdWlyZSBsZSBsb2dpY2llbCBlbiByJiMyMzM7c3VsdGFudC4gSWwgY29tcHJlbmQgZW4gcGFydGljdWxpZXIgbGUgZHJvaXQgZGUgY3ImIzIzMztlciB1biBMb2dpY2llbCBEJiMyMzM7cml2JiMyMzM7LgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyBhcHBvcnRlciB0b3V0ZSBtb2RpZmljYXRpb24gYXUgTG9naWNpZWwgc291cyByJiMyMzM7c2VydmUgZGUgbWVudGlvbm5lciwgZGUgZmEmIzIzMTtvbiBleHBsaWNpdGUsIHNvbiBub20gZW4gdGFudCBxdWBhdXRldXIgZGUgY2V0dGUgbW9kaWZpY2F0aW9uIGV0IGxhIGRhdGUgZGUgY3ImIzIzMzthdGlvbiBkZSBjZWxsZS1jaS4KKworNS4zIERST0lUIERFIERJU1RSSUJVVElPTgorCitMZSBkcm9pdCBkZSBkaXN0cmlidXRpb24gY29tcG9ydGUgbm90YW1tZW50IGxlIGRyb2l0IGRlIGRpZmZ1c2VyLCBkZSB0cmFuc21ldHRyZSBldCBkZSBjb21tdW5pcXVlciBsZSBMb2dpY2llbCBhdSBwdWJsaWMgc3VyIHRvdXQgc3VwcG9ydCBldCBwYXIgdG91dCBtb3llbiBhaW5zaSBxdWUgbGUgZHJvaXQgZGUgbWV0dHJlIHN1ciBsZSBtYXJjaCYjMjMzOyAmIzIyNDsgdGl0cmUgb24mIzIzMztyZXV4IG91IGdyYXR1aXQsIHVuIG91IGRlcyBleGVtcGxhaXJlcyBkdSBMb2dpY2llbCBwYXIgdG91dCBwcm9jJiMyMzM7ZCYjMjMzOy4KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgZGlzdHJpYnVlciBkZXMgY29waWVzIGR1IExvZ2ljaWVsLCBtb2RpZmkmIzIzMzsgb3Ugbm9uLCAmIzIyNDsgZGVzIHRpZXJzIGRhbnMgbGVzIGNvbmRpdGlvbnMgY2ktYXByJiMyMzI7cyBkJiMyMzM7dGFpbGwmIzIzMztlcy4KKworNS4zLjEgRElTVFJJQlVUSU9OIERVIExPR0lDSUVMIFNBTlMgTU9ESUZJQ0FUSU9OCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IGRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBjb25mb3JtZXMgZHUgTG9naWNpZWwsIHNvdXMgZm9ybWUgZGUgQ29kZSBTb3VyY2Ugb3UgZGUgQ29kZSBPYmpldCwgJiMyMjQ7IGNvbmRpdGlvbiBxdWUgY2V0dGUgZGlzdHJpYnV0aW9uIHJlc3BlY3RlIGxlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBkYW5zIGxldXIgdG90YWxpdCYjMjMzOyBldCBzb2l0IGFjY29tcGFnbiYjMjMzO2U6CisKK2RgdW4gZXhlbXBsYWlyZSBkdSBDb250cmF0LAorCitkYHVuIGF2ZXJ0aXNzZW1lbnQgcmVsYXRpZiAmIzIyNDsgbGEgcmVzdHJpY3Rpb24gZGUgZ2FyYW50aWUgZXQgZGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBDb25jJiMyMzM7ZGFudCB0ZWxsZSBxdWUgcHImIzIzMzt2dWUgYXV4IGFydGljbGVzIDggZXQgOSwKKworZXQgcXVlLCBkYW5zIGxlIGNhcyBvJiMyNDk7IHNldWwgbGUgQ29kZSBPYmpldCBkdSBMb2dpY2llbCBlc3QgcmVkaXN0cmlidSYjMjMzOywgbGUgTGljZW5jaSYjMjMzOyBwZXJtZXR0ZSB1biBhY2MmIzIzMjtzIGVmZmVjdGlmIGF1IENvZGUgU291cmNlIGNvbXBsZXQgZHUgTG9naWNpZWwgcGVuZGFudCBhdSBtb2lucyB0b3V0ZSBsYSBkdXImIzIzMztlIGRlIHNhIGRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbCwgJiMyMzM7dGFudCBlbnRlbmR1IHF1ZSBsZSBjbyYjMjUxO3QgYWRkaXRpb25uZWwgZGBhY3F1aXNpdGlvbiBkdSBDb2RlIFNvdXJjZSBuZSBkZXZyYSBwYXMgZXhjJiMyMzM7ZGVyIGxlIHNpbXBsZSBjbyYjMjUxO3QgZGUgdHJhbnNmZXJ0IGRlcyBkb25uJiMyMzM7ZXMuCisKKzUuMy4yIERJU1RSSUJVVElPTiBEVSBMT0dJQ0lFTCBNT0RJRklFCisKK0xvcnNxdWUgbGUgTGljZW5jaSYjMjMzOyBhcHBvcnRlIHVuZSBDb250cmlidXRpb24gSW50JiMyMzM7Z3ImIzIzMztlIGF1IExvZ2ljaWVsLCBsZXMgY29uZGl0aW9ucyBkZSBkaXN0cmlidXRpb24gZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGVuIHImIzIzMztzdWx0YW50IHNvbnQgYWxvcnMgc291bWlzZXMgJiMyMjQ7IGxgaW50JiMyMzM7Z3JhbGl0JiMyMzM7IGRlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdC4KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgZGlzdHJpYnVlciBsZSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgc291cyBmb3JtZSBkZSBjb2RlIHNvdXJjZSBvdSBkZSBjb2RlIG9iamV0LCAmIzIyNDsgY29uZGl0aW9uIHF1ZSBjZXR0ZSBkaXN0cmlidXRpb24gcmVzcGVjdGUgbGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IGRhbnMgbGV1ciB0b3RhbGl0JiMyMzM7IGV0IHNvaXQgYWNjb21wYWduJiMyMzM7ZToKKworZGB1biBleGVtcGxhaXJlIGR1IENvbnRyYXQsCisKK2RgdW4gYXZlcnRpc3NlbWVudCByZWxhdGlmICYjMjI0OyBsYSByZXN0cmljdGlvbiBkZSBnYXJhbnRpZSBldCBkZSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IHRlbGxlIHF1ZSBwciYjMjMzO3Z1ZSBhdXggYXJ0aWNsZXMgOCBldCA5LAorCitldCBxdWUsIGRhbnMgbGUgY2FzIG8mIzI0OTsgc2V1bCBsZSBjb2RlIG9iamV0IGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBlc3QgcmVkaXN0cmlidSYjMjMzOywgbGUgTGljZW5jaSYjMjMzOyBwZXJtZXR0ZSB1biBhY2MmIzIzMjtzIGVmZmVjdGlmICYjMjI0OyBzb24gY29kZSBzb3VyY2UgY29tcGxldCBwZW5kYW50IGF1IG1vaW5zIHRvdXRlIGxhIGR1ciYjMjMzO2UgZGUgc2EgZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOywgJiMyMzM7dGFudCBlbnRlbmR1IHF1ZSBsZSBjbyYjMjUxO3QgYWRkaXRpb25uZWwgZGBhY3F1aXNpdGlvbiBkdSBjb2RlIHNvdXJjZSBuZSBkZXZyYSBwYXMgZXhjJiMyMzM7ZGVyIGxlIHNpbXBsZSBjbyYjMjUxO3QgZGUgdHJhbnNmZXJ0IGRlcyBkb25uJiMyMzM7ZXMuCisKKzUuMy4zIERJU1RSSUJVVElPTiBEVSBMT0dJQ0lFTCBERVJJVkUKKworTG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGNyJiMyMzM7ZSB1biBMb2dpY2llbCBEJiMyMzM7cml2JiMyMzM7LCBjZSBMb2dpY2llbCBEJiMyMzM7cml2JiMyMzM7IHBldXQgJiMyMzQ7dHJlIGRpc3RyaWJ1JiMyMzM7IHNvdXMgdW4gY29udHJhdCBkZSBsaWNlbmNlIGF1dHJlIHF1ZSBsZSBwciYjMjMzO3NlbnQgQ29udHJhdCAmIzIyNDsgY29uZGl0aW9uIGRlIHJlc3BlY3RlciBsZXMgb2JsaWdhdGlvbnMgZGUgbWVudGlvbiBkZXMgZHJvaXRzIHN1ciBsZSBMb2dpY2llbCB0ZWxsZXMgcXVlIGQmIzIzMztmaW5pZXMgJiMyMjQ7IGxgYXJ0aWNsZSA2LjQuIERhbnMgbGUgY2FzIG8mIzI0OTsgbGEgY3ImIzIzMzthdGlvbiBkdSBMb2dpY2llbCBEJiMyMzM7cml2JiMyMzM7IGEgbiYjMjMzO2Nlc3NpdCYjMjMzOyB1bmUgbW9kaWZpY2F0aW9uIGR1IENvZGUgU291cmNlIGxlIGxpY2VuY2kmIzIzMzsgc2BlbmdhZ2UgJiMyMjQ7IGNlIHF1ZToKKworbGUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGNvcnJlc3BvbmRhbnQgJiMyMjQ7IGNldHRlIG1vZGlmaWNhdGlvbiBzb2l0IHImIzIzMztnaSBwYXIgbGUgcHImIzIzMztzZW50IENvbnRyYXQsCitsZXMgQ29udHJpYnV0aW9ucyBJbnQmIzIzMztnciYjMjMzO2VzIGRvbnQgbGUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IHImIzIzMztzdWx0ZSBzb2llbnQgY2xhaXJlbWVudCBpZGVudGlmaSYjMjMzO2VzIGV0IGRvY3VtZW50JiMyMzM7ZXMsCitsZSBMaWNlbmNpJiMyMzM7IHBlcm1ldHRlIHVuIGFjYyYjMjMyO3MgZWZmZWN0aWYgYXUgY29kZSBzb3VyY2UgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7LCBwZW5kYW50IGF1IG1vaW5zIHRvdXRlIGxhIGR1ciYjMjMzO2UgZGUgbGEgZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsIEQmIzIzMztyaXYmIzIzMzssIGRlIHRlbGxlIHNvcnRlIHF1ZSBjZXMgbW9kaWZpY2F0aW9ucyBwdWlzc2VudCAmIzIzNDt0cmUgcmVwcmlzZXMgZGFucyB1bmUgdmVyc2lvbiB1bHQmIzIzMztyaWV1cmUgZHUgTG9naWNpZWwsICYjMjMzO3RhbnQgZW50ZW5kdSBxdWUgbGUgY28mIzI1MTt0IGFkZGl0aW9ubmVsIGRgYWNxdWlzaXRpb24gZHUgY29kZSBzb3VyY2UgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IG5lIGRldnJhIHBhcyBleGMmIzIzMztkZXIgbGUgc2ltcGxlIGNvJiMyNTE7dCBkdSB0cmFuc2ZlcnQgZGVzIGRvbm4mIzIzMztlcy4KKzUuMy40IENPTVBBVElCSUxJVEUgQVZFQyBMQSBMSUNFTkNFIENlQ0lMTAorCitMb3JzcXVgdW4gTG9naWNpZWwgTW9kaWZpJiMyMzM7IGNvbnRpZW50IHVuZSBDb250cmlidXRpb24gSW50JiMyMzM7Z3ImIzIzMztlIHNvdW1pc2UgYXUgY29udHJhdCBkZSBsaWNlbmNlIENlQ0lMTCwgb3UgbG9yc3F1YHVuIExvZ2ljaWVsIEQmIzIzMztyaXYmIzIzMzsgY29udGllbnQgdW4gTW9kdWxlIExpJiMyMzM7IHNvdW1pcyBhdSBjb250cmF0IGRlIGxpY2VuY2UgQ2VDSUxMLCBsZXMgc3RpcHVsYXRpb25zIHByJiMyMzM7dnVlcyBhdSB0cm9pc2kmIzIzMjttZSBpdGVtIGRlIGxgYXJ0aWNsZSA2LjQgc29udCBmYWN1bHRhdGl2ZXMuCisKK0FydGljbGUgNiAtIFBST1BSSUVURSBJTlRFTExFQ1RVRUxMRQorCis2LjEgU1VSIExFIExPR0lDSUVMIElOSVRJQUwKKworTGUgVGl0dWxhaXJlIGVzdCBkJiMyMzM7dGVudGV1ciBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBzdXIgbGUgTG9naWNpZWwgSW5pdGlhbC4gVG91dGUgdXRpbGlzYXRpb24gZHUgTG9naWNpZWwgSW5pdGlhbCBlc3Qgc291bWlzZSBhdSByZXNwZWN0IGRlcyBjb25kaXRpb25zIGRhbnMgbGVzcXVlbGxlcyBsZSBUaXR1bGFpcmUgYSBjaG9pc2kgZGUgZGlmZnVzZXIgc29uIG9ldXZyZSBldCBudWwgYXV0cmUgbmBhIGxhIGZhY3VsdCYjMjMzOyBkZSBtb2RpZmllciBsZXMgY29uZGl0aW9ucyBkZSBkaWZmdXNpb24gZGUgY2UgTG9naWNpZWwgSW5pdGlhbC4KKworTGUgVGl0dWxhaXJlIHNgZW5nYWdlICYjMjI0OyBjZSBxdWUgbGUgTG9naWNpZWwgSW5pdGlhbCByZXN0ZSBhdSBtb2lucyByJiMyMzM7Z2kgcGFyIGxlIENvbnRyYXQgZXQgY2UsIHBvdXIgbGEgZHVyJiMyMzM7ZSB2aXMmIzIzMztlICYjMjI0OyBsYGFydGljbGUgNC4yLgorCis2LjIgU1VSIExFUyBDT05UUklCVVRJT05TIElOVEVHUkVFUworCitMZSBMaWNlbmNpJiMyMzM7IHF1aSBhIGQmIzIzMzt2ZWxvcHAmIzIzMzsgdW5lIENvbnRyaWJ1dGlvbiBJbnQmIzIzMztnciYjMjMzO2UgZXN0IHRpdHVsYWlyZSBzdXIgY2VsbGUtY2kgZGVzIGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGRhbnMgbGVzIGNvbmRpdGlvbnMgZCYjMjMzO2ZpbmllcyBwYXIgbGEgbCYjMjMzO2dpc2xhdGlvbiBhcHBsaWNhYmxlLgorCis2LjMgU1VSIExFUyBNT0RVTEVTIExJRVMKKworTGUgTGljZW5jaSYjMjMzOyBxdWkgYSBkJiMyMzM7dmVsb3BwJiMyMzM7IHVuIE1vZHVsZSBMaSYjMjMzOyBlc3QgdGl0dWxhaXJlIHN1ciBjZWx1aS1jaSBkZXMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZGFucyBsZXMgY29uZGl0aW9ucyBkJiMyMzM7ZmluaWVzIHBhciBsYSBsJiMyMzM7Z2lzbGF0aW9uIGFwcGxpY2FibGUgZXQgcmVzdGUgbGlicmUgZHUgY2hvaXggZHUgY29udHJhdCByJiMyMzM7Z2lzc2FudCBzYSBkaWZmdXNpb24gZGFucyBsZXMgY29uZGl0aW9ucyBkJiMyMzM7ZmluaWVzICYjMjI0OyBsYGFydGljbGUgNS4zLjMuCisKKzYuNCBNRU5USU9OUyBERVMgRFJPSVRTCisKK0xlIExpY2VuY2kmIzIzMzsgc2BlbmdhZ2UgZXhwcmVzcyYjMjMzO21lbnQ6CisKKyYjMjI0OyBuZSBwYXMgc3VwcHJpbWVyIG91IG1vZGlmaWVyIGRlIHF1ZWxxdWUgbWFuaSYjMjMyO3JlIHF1ZSBjZSBzb2l0IGxlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGFwcG9zJiMyMzM7ZXMgc3VyIGxlIExvZ2ljaWVsOworCismIzIyNDsgcmVwcm9kdWlyZSAmIzIyNDsgbGBpZGVudGlxdWUgbGVzZGl0ZXMgbWVudGlvbnMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBzdXIgbGVzIGNvcGllcyBkdSBMb2dpY2llbCBtb2RpZmkmIzIzMzsgb3Ugbm9uOworCismIzIyNDsgZmFpcmUgZW4gc29ydGUgcXVlIGxgdXRpbGlzYXRpb24gZHUgTG9naWNpZWwsIHNlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGV0IGxlIGZhaXQgcXVgaWwgZXN0IHImIzIzMztnaSBwYXIgbGUgQ29udHJhdCBzb2llbnQgaW5kaXF1JiMyMzM7cyBkYW5zIHVuIHRleHRlIGZhY2lsZW1lbnQgYWNjZXNzaWJsZSBub3RhbW1lbnQgZGVwdWlzIGxgaW50ZXJmYWNlIGRlIHRvdXQgTG9naWNpZWwgRCYjMjMzO3JpdiYjMjMzOy4KK0xlIExpY2VuY2kmIzIzMzsgc2BlbmdhZ2UgJiMyMjQ7IG5lIHBhcyBwb3J0ZXIgYXR0ZWludGUsIGRpcmVjdGVtZW50IG91IGluZGlyZWN0ZW1lbnQsIGF1eCBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkdSBUaXR1bGFpcmUgZXQvb3UgZGVzIENvbnRyaWJ1dGV1cnMgc3VyIGxlIExvZ2ljaWVsIGV0ICYjMjI0OyBwcmVuZHJlLCBsZSBjYXMgJiMyMzM7Y2gmIzIzMzthbnQsICYjMjI0OyBsYCYjMjMzO2dhcmQgZGUgc29uIHBlcnNvbm5lbCB0b3V0ZXMgbGVzIG1lc3VyZXMgbiYjMjMzO2Nlc3NhaXJlcyBwb3VyIGFzc3VyZXIgbGUgcmVzcGVjdCBkZXMgZGl0cyBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkdSBUaXR1bGFpcmUgZXQvb3UgZGVzIENvbnRyaWJ1dGV1cnMuCisKK0FydGljbGUgNyAtIFNFUlZJQ0VTIEFTU09DSUVTCisKKzcuMSBMZSBDb250cmF0IG5gb2JsaWdlIGVuIGF1Y3VuIGNhcyBsZSBDb25jJiMyMzM7ZGFudCAmIzIyNDsgbGEgciYjMjMzO2FsaXNhdGlvbiBkZSBwcmVzdGF0aW9ucyBkYGFzc2lzdGFuY2UgdGVjaG5pcXVlIG91IGRlIG1haW50ZW5hbmNlIGR1IExvZ2ljaWVsLgorCitDZXBlbmRhbnQgbGUgQ29uYyYjMjMzO2RhbnQgcmVzdGUgbGlicmUgZGUgcHJvcG9zZXIgY2UgdHlwZSBkZSBzZXJ2aWNlcy4gTGVzIHRlcm1lcyBldCBjb25kaXRpb25zIGRgdW5lIHRlbGxlIGFzc2lzdGFuY2UgdGVjaG5pcXVlIGV0L291IGRgdW5lIHRlbGxlIG1haW50ZW5hbmNlIHNlcm9udCBhbG9ycyBkJiMyMzM7dGVybWluJiMyMzM7cyBkYW5zIHVuIGFjdGUgcyYjMjMzO3BhciYjMjMzOy4gQ2VzIGFjdGVzIGRlIG1haW50ZW5hbmNlIGV0L291IGFzc2lzdGFuY2UgdGVjaG5pcXVlIG5gZW5nYWdlcm9udCBxdWUgbGEgc2V1bGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBDb25jJiMyMzM7ZGFudCBxdWkgbGVzIHByb3Bvc2UuCisKKzcuMiBEZSBtJiMyMzQ7bWUsIHRvdXQgQ29uYyYjMjMzO2RhbnQgZXN0IGxpYnJlIGRlIHByb3Bvc2VyLCBzb3VzIHNhIHNldWxlIHJlc3BvbnNhYmlsaXQmIzIzMzssICYjMjI0OyBzZXMgbGljZW5jaSYjMjMzO3MgdW5lIGdhcmFudGllLCBxdWkgbmBlbmdhZ2VyYSBxdWUgbHVpLCBsb3JzIGRlIGxhIHJlZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsIGV0L291IGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBldCBjZSwgZGFucyBsZXMgY29uZGl0aW9ucyBxdWBpbCBzb3VoYWl0ZS4gQ2V0dGUgZ2FyYW50aWUgZXQgbGVzIG1vZGFsaXQmIzIzMztzIGZpbmFuY2kmIzIzMjtyZXMgZGUgc29uIGFwcGxpY2F0aW9uIGZlcm9udCBsYG9iamV0IGRgdW4gYWN0ZSBzJiMyMzM7cGFyJiMyMzM7IGVudHJlIGxlIENvbmMmIzIzMztkYW50IGV0IGxlIExpY2VuY2kmIzIzMzsuCisKK0FydGljbGUgOCAtIFJFU1BPTlNBQklMSVRFCisKKzguMSBTb3VzIHImIzIzMztzZXJ2ZSBkZXMgZGlzcG9zaXRpb25zIGRlIGxgYXJ0aWNsZSA4LjIsIGxlIExpY2VuY2kmIzIzMzsgYSBsYSBmYWN1bHQmIzIzMzssIHNvdXMgciYjMjMzO3NlcnZlIGRlIHByb3V2ZXIgbGEgZmF1dGUgZHUgQ29uYyYjMjMzO2RhbnQgY29uY2VybiYjMjMzOywgZGUgc29sbGljaXRlciBsYSByJiMyMzM7cGFyYXRpb24gZHUgcHImIzIzMztqdWRpY2UgZGlyZWN0IHF1YGlsIHN1YmlyYWl0IGR1IGZhaXQgZHUgTG9naWNpZWwgZXQgZG9udCBpbCBhcHBvcnRlcmEgbGEgcHJldXZlLgorCis4LjIgTGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBDb25jJiMyMzM7ZGFudCBlc3QgbGltaXQmIzIzMztlIGF1eCBlbmdhZ2VtZW50cyBwcmlzIGVuIGFwcGxpY2F0aW9uIGR1IENvbnRyYXQgZXQgbmUgc2F1cmFpdCAmIzIzNDt0cmUgZW5nYWcmIzIzMztlIGVuIHJhaXNvbiBub3RhbW1lbnQ6IChpKSBkZXMgZG9tbWFnZXMgZHVzICYjMjI0OyBsYGluZXgmIzIzMztjdXRpb24sIHRvdGFsZSBvdSBwYXJ0aWVsbGUsIGRlIHNlcyBvYmxpZ2F0aW9ucyBwYXIgbGUgTGljZW5jaSYjMjMzOywgKGlpKSBkZXMgZG9tbWFnZXMgZGlyZWN0cyBvdSBpbmRpcmVjdHMgZCYjMjMzO2NvdWxhbnQgZGUgbGB1dGlsaXNhdGlvbiBvdSBkZXMgcGVyZm9ybWFuY2VzIGR1IExvZ2ljaWVsIHN1YmlzIHBhciBsZSBMaWNlbmNpJiMyMzM7IGV0IChpaWkpIHBsdXMgZyYjMjMzO24mIzIzMztyYWxlbWVudCBkYHVuIHF1ZWxjb25xdWUgZG9tbWFnZSBpbmRpcmVjdC4gRW4gcGFydGljdWxpZXIsIGxlcyBQYXJ0aWVzIGNvbnZpZW5uZW50IGV4cHJlc3MmIzIzMzttZW50IHF1ZSB0b3V0IHByJiMyMzM7anVkaWNlIGZpbmFuY2llciBvdSBjb21tZXJjaWFsIChwYXIgZXhlbXBsZSBwZXJ0ZSBkZSBkb25uJiMyMzM7ZXMsIHBlcnRlIGRlIGImIzIzMztuJiMyMzM7ZmljZXMsIHBlcnRlIGRgZXhwbG9pdGF0aW9uLCBwZXJ0ZSBkZSBjbGllbnQmIzIzMjtsZSBvdSBkZSBjb21tYW5kZXMsIG1hbnF1ZSAmIzIyNDsgZ2FnbmVyLCB0cm91YmxlIGNvbW1lcmNpYWwgcXVlbGNvbnF1ZSkgb3UgdG91dGUgYWN0aW9uIGRpcmlnJiMyMzM7ZSBjb250cmUgbGUgTGljZW5jaSYjMjMzOyBwYXIgdW4gdGllcnMsIGNvbnN0aXR1ZSB1biBkb21tYWdlIGluZGlyZWN0IGV0IG5gb3V2cmUgcGFzIGRyb2l0ICYjMjI0OyByJiMyMzM7cGFyYXRpb24gcGFyIGxlIENvbmMmIzIzMztkYW50LgorCitBcnRpY2xlIDkgLSBHQVJBTlRJRQorCis5LjEgTGUgTGljZW5jaSYjMjMzOyByZWNvbm5hJiMyMzg7dCBxdWUgbGAmIzIzMzt0YXQgYWN0dWVsIGRlcyBjb25uYWlzc2FuY2VzIHNjaWVudGlmaXF1ZXMgZXQgdGVjaG5pcXVlcyBhdSBtb21lbnQgZGUgbGEgbWlzZSBlbiBjaXJjdWxhdGlvbiBkdSBMb2dpY2llbCBuZSBwZXJtZXQgcGFzIGRgZW4gdGVzdGVyIGV0IGRgZW4gdiYjMjMzO3JpZmllciB0b3V0ZXMgbGVzIHV0aWxpc2F0aW9ucyBuaSBkZSBkJiMyMzM7dGVjdGVyIGxgZXhpc3RlbmNlIGRgJiMyMzM7dmVudHVlbHMgZCYjMjMzO2ZhdXRzLiBMYGF0dGVudGlvbiBkdSBMaWNlbmNpJiMyMzM7IGEgJiMyMzM7dCYjMjMzOyBhdHRpciYjMjMzO2Ugc3VyIGNlIHBvaW50IHN1ciBsZXMgcmlzcXVlcyBhc3NvY2kmIzIzMztzIGF1IGNoYXJnZW1lbnQsICYjMjI0OyBsYHV0aWxpc2F0aW9uLCBsYSBtb2RpZmljYXRpb24gZXQvb3UgYXUgZCYjMjMzO3ZlbG9wcGVtZW50IGV0ICYjMjI0OyBsYSByZXByb2R1Y3Rpb24gZHUgTG9naWNpZWwgcXVpIHNvbnQgciYjMjMzO3NlcnYmIzIzMztzICYjMjI0OyBkZXMgdXRpbGlzYXRldXJzIGF2ZXJ0aXMuCisKK0lsIHJlbCYjMjMyO3ZlIGRlIGxhIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgTGljZW5jaSYjMjMzOyBkZSBjb250ciYjMjQ0O2xlciwgcGFyIHRvdXMgbW95ZW5zLCBsYGFkJiMyMzM7cXVhdGlvbiBkdSBwcm9kdWl0ICYjMjI0OyBzZXMgYmVzb2lucywgc29uIGJvbiBmb25jdGlvbm5lbWVudCBldCBkZSBzYGFzc3VyZXIgcXVgaWwgbmUgY2F1c2VyYSBwYXMgZGUgZG9tbWFnZXMgYXV4IHBlcnNvbm5lcyBldCBhdXggYmllbnMuCisKKzkuMiBMZSBDb25jJiMyMzM7ZGFudCBkJiMyMzM7Y2xhcmUgZGUgYm9ubmUgZm9pICYjMjM0O3RyZSBlbiBkcm9pdCBkZSBjb25jJiMyMzM7ZGVyIGxgZW5zZW1ibGUgZGVzIGRyb2l0cyBhdHRhY2gmIzIzMztzIGF1IExvZ2ljaWVsIChjb21wcmVuYW50IG5vdGFtbWVudCBsZXMgZHJvaXRzIHZpcyYjMjMzO3MgJiMyMjQ7IGxgYXJ0aWNsZSA1KS4KKworOS4zIExlIExpY2VuY2kmIzIzMzsgcmVjb25uYSYjMjM4O3QgcXVlIGxlIExvZ2ljaWVsIGVzdCBmb3VybmkgImVuIGxgJiMyMzM7dGF0IiBwYXIgbGUgQ29uYyYjMjMzO2RhbnQgc2FucyBhdXRyZSBnYXJhbnRpZSwgZXhwcmVzc2Ugb3UgdGFjaXRlLCBxdWUgY2VsbGUgcHImIzIzMzt2dWUgJiMyMjQ7IGxgYXJ0aWNsZSA5LjIgZXQgbm90YW1tZW50IHNhbnMgYXVjdW5lIGdhcmFudGllIHN1ciBzYSB2YWxldXIgY29tbWVyY2lhbGUsIHNvbiBjYXJhY3QmIzIzMjtyZSBzJiMyMzM7Y3VyaXMmIzIzMzssIGlubm92YW50IG91IHBlcnRpbmVudC4KKworRW4gcGFydGljdWxpZXIsIGxlIENvbmMmIzIzMztkYW50IG5lIGdhcmFudGl0IHBhcyBxdWUgbGUgTG9naWNpZWwgZXN0IGV4ZW1wdCBkYGVycmV1ciwgcXVgaWwgZm9uY3Rpb25uZXJhIHNhbnMgaW50ZXJydXB0aW9uLCBxdWBpbCBzZXJhIGNvbXBhdGlibGUgYXZlYyBsYCYjMjMzO3F1aXBlbWVudCBkdSBMaWNlbmNpJiMyMzM7IGV0IHNhIGNvbmZpZ3VyYXRpb24gbG9naWNpZWxsZSBuaSBxdWBpbCByZW1wbGlyYSBsZXMgYmVzb2lucyBkdSBMaWNlbmNpJiMyMzM7LgorCis5LjQgTGUgQ29uYyYjMjMzO2RhbnQgbmUgZ2FyYW50aXQgcGFzLCBkZSBtYW5pJiMyMzI7cmUgZXhwcmVzc2Ugb3UgdGFjaXRlLCBxdWUgbGUgTG9naWNpZWwgbmUgcG9ydGUgcGFzIGF0dGVpbnRlICYjMjI0OyB1biBxdWVsY29ucXVlIGRyb2l0IGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZGB1biB0aWVycyBwb3J0YW50IHN1ciB1biBicmV2ZXQsIHVuIGxvZ2ljaWVsIG91IHN1ciB0b3V0IGF1dHJlIGRyb2l0IGRlIHByb3ByaSYjMjMzO3QmIzIzMzsuIEFpbnNpLCBsZSBDb25jJiMyMzM7ZGFudCBleGNsdXQgdG91dGUgZ2FyYW50aWUgYXUgcHJvZml0IGR1IExpY2VuY2kmIzIzMzsgY29udHJlIGxlcyBhY3Rpb25zIGVuIGNvbnRyZWZhJiMyMzE7b24gcXVpIHBvdXJyYWllbnQgJiMyMzQ7dHJlIGRpbGlnZW50JiMyMzM7ZXMgYXUgdGl0cmUgZGUgbGB1dGlsaXNhdGlvbiwgZGUgbGEgbW9kaWZpY2F0aW9uLCBldCBkZSBsYSByZWRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbC4gTiYjMjMzO2FubW9pbnMsIHNpIGRlIHRlbGxlcyBhY3Rpb25zIHNvbnQgZXhlcmMmIzIzMztlcyBjb250cmUgbGUgTGljZW5jaSYjMjMzOywgbGUgQ29uYyYjMjMzO2RhbnQgbHVpIGFwcG9ydGVyYSBzb24gYWlkZSB0ZWNobmlxdWUgZXQganVyaWRpcXVlIHBvdXIgc2EgZCYjMjMzO2ZlbnNlLiBDZXR0ZSBhaWRlIHRlY2huaXF1ZSBldCBqdXJpZGlxdWUgZXN0IGQmIzIzMzt0ZXJtaW4mIzIzMztlIGF1IGNhcyBwYXIgY2FzIGVudHJlIGxlIENvbmMmIzIzMztkYW50IGNvbmNlcm4mIzIzMzsgZXQgbGUgTGljZW5jaSYjMjMzOyBkYW5zIGxlIGNhZHJlIGRgdW4gcHJvdG9jb2xlIGRgYWNjb3JkLiBMZSBDb25jJiMyMzM7ZGFudCBkJiMyMzM7Z2FnZSB0b3V0ZSByZXNwb25zYWJpbGl0JiMyMzM7IHF1YW50ICYjMjI0OyBsYHV0aWxpc2F0aW9uIGRlIGxhIGQmIzIzMztub21pbmF0aW9uIGR1IExvZ2ljaWVsIHBhciBsZSBMaWNlbmNpJiMyMzM7LiBBdWN1bmUgZ2FyYW50aWUgbmBlc3QgYXBwb3J0JiMyMzM7ZSBxdWFudCAmIzIyNDsgbGBleGlzdGVuY2UgZGUgZHJvaXRzIGFudCYjMjMzO3JpZXVycyBzdXIgbGUgbm9tIGR1IExvZ2ljaWVsIGV0IHN1ciBsYGV4aXN0ZW5jZSBkYHVuZSBtYXJxdWUuCisKK0FydGljbGUgMTAgLSBSRVNJTElBVElPTgorCisxMC4xIEVuIGNhcyBkZSBtYW5xdWVtZW50IHBhciBsZSBMaWNlbmNpJiMyMzM7IGF1eCBvYmxpZ2F0aW9ucyBtaXNlcyAmIzIyNDsgc2EgY2hhcmdlIHBhciBsZSBDb250cmF0LCBsZSBDb25jJiMyMzM7ZGFudCBwb3VycmEgciYjMjMzO3NpbGllciBkZSBwbGVpbiBkcm9pdCBsZSBDb250cmF0IHRyZW50ZSAoMzApIGpvdXJzIGFwciYjMjMyO3Mgbm90aWZpY2F0aW9uIGFkcmVzcyYjMjMzO2UgYXUgTGljZW5jaSYjMjMzOyBldCByZXN0JiMyMzM7ZSBzYW5zIGVmZmV0LgorCisxMC4yIExlIExpY2VuY2kmIzIzMzsgZG9udCBsZSBDb250cmF0IGVzdCByJiMyMzM7c2lsaSYjMjMzOyBuYGVzdCBwbHVzIGF1dG9yaXMmIzIzMzsgJiMyMjQ7IHV0aWxpc2VyLCBtb2RpZmllciBvdSBkaXN0cmlidWVyIGxlIExvZ2ljaWVsLiBDZXBlbmRhbnQsIHRvdXRlcyBsZXMgbGljZW5jZXMgcXVgaWwgYXVyYSBjb25jJiMyMzM7ZCYjMjMzO2VzIGFudCYjMjMzO3JpZXVyZW1lbnQgJiMyMjQ7IGxhIHImIzIzMztzaWxpYXRpb24gZHUgQ29udHJhdCByZXN0ZXJvbnQgdmFsaWRlcyBzb3VzIHImIzIzMztzZXJ2ZSBxdWBlbGxlcyBhaWVudCAmIzIzMzt0JiMyMzM7IGVmZmVjdHUmIzIzMztlcyBlbiBjb25mb3JtaXQmIzIzMzsgYXZlYyBsZSBDb250cmF0LgorCitBcnRpY2xlIDExIC0gRElTUE9TSVRJT05TIERJVkVSU0VTCisKKzExLjEgQ0FVU0UgRVhURVJJRVVSRQorCitBdWN1bmUgZGVzIFBhcnRpZXMgbmUgc2VyYSByZXNwb25zYWJsZSBkYHVuIHJldGFyZCBvdSBkYHVuZSBkJiMyMzM7ZmFpbGxhbmNlIGRgZXgmIzIzMztjdXRpb24gZHUgQ29udHJhdCBxdWkgc2VyYWl0IGQmIzI1MTsgJiMyMjQ7IHVuIGNhcyBkZSBmb3JjZSBtYWpldXJlLCB1biBjYXMgZm9ydHVpdCBvdSB1bmUgY2F1c2UgZXh0JiMyMzM7cmlldXJlLCB0ZWxsZSBxdWUsIG5vdGFtbWVudCwgbGUgbWF1dmFpcyBmb25jdGlvbm5lbWVudCBvdSBsZXMgaW50ZXJydXB0aW9ucyBkdSByJiMyMzM7c2VhdSAmIzIzMztsZWN0cmlxdWUgb3UgZGUgdCYjMjMzO2wmIzIzMztjb21tdW5pY2F0aW9uLCBsYSBwYXJhbHlzaWUgZHUgciYjMjMzO3NlYXUgbGkmIzIzMztlICYjMjI0OyB1bmUgYXR0YXF1ZSBpbmZvcm1hdGlxdWUsIGxgaW50ZXJ2ZW50aW9uIGRlcyBhdXRvcml0JiMyMzM7cyBnb3V2ZXJuZW1lbnRhbGVzLCBsZXMgY2F0YXN0cm9waGVzIG5hdHVyZWxsZXMsIGxlcyBkJiMyMzM7ZyYjMjI2O3RzIGRlcyBlYXV4LCBsZXMgdHJlbWJsZW1lbnRzIGRlIHRlcnJlLCBsZSBmZXUsIGxlcyBleHBsb3Npb25zLCBsZXMgZ3ImIzIzMjt2ZXMgZXQgbGVzIGNvbmZsaXRzIHNvY2lhdXgsIGxgJiMyMzM7dGF0IGRlIGd1ZXJyZS4uLgorCisxMS4yIExlIGZhaXQsIHBhciBsYHVuZSBvdSBsYGF1dHJlIGRlcyBQYXJ0aWVzLCBkYG9tZXR0cmUgZW4gdW5lIG91IHBsdXNpZXVycyBvY2Nhc2lvbnMgZGUgc2UgcHImIzIzMzt2YWxvaXIgZGB1bmUgb3UgcGx1c2lldXJzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0LCBuZSBwb3VycmEgZW4gYXVjdW4gY2FzIGltcGxpcXVlciByZW5vbmNpYXRpb24gcGFyIGxhIFBhcnRpZSBpbnQmIzIzMztyZXNzJiMyMzM7ZSAmIzIyNDsgc2BlbiBwciYjMjMzO3ZhbG9pciB1bHQmIzIzMztyaWV1cmVtZW50LgorCisxMS4zIExlIENvbnRyYXQgYW5udWxlIGV0IHJlbXBsYWNlIHRvdXRlIGNvbnZlbnRpb24gYW50JiMyMzM7cmlldXJlLCAmIzIzMztjcml0ZSBvdSBvcmFsZSwgZW50cmUgbGVzIFBhcnRpZXMgc3VyIGxlIG0mIzIzNDttZSBvYmpldCBldCBjb25zdGl0dWUgbGBhY2NvcmQgZW50aWVyIGVudHJlIGxlcyBQYXJ0aWVzIHN1ciBjZXQgb2JqZXQuIEF1Y3VuZSBhZGRpdGlvbiBvdSBtb2RpZmljYXRpb24gYXV4IHRlcm1lcyBkdSBDb250cmF0IG5gYXVyYSBkYGVmZmV0ICYjMjI0OyBsYCYjMjMzO2dhcmQgZGVzIFBhcnRpZXMgJiMyMjQ7IG1vaW5zIGRgJiMyMzQ7dHJlIGZhaXRlIHBhciAmIzIzMztjcml0IGV0IHNpZ24mIzIzMztlIHBhciBsZXVycyByZXByJiMyMzM7c2VudGFudHMgZCYjMjUxO21lbnQgaGFiaWxpdCYjMjMzO3MuCisKKzExLjQgRGFucyBsYGh5cG90aCYjMjMyO3NlIG8mIzI0OTsgdW5lIG91IHBsdXNpZXVycyBkZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgc2BhdiYjMjMyO3JlcmFpdCBjb250cmFpcmUgJiMyMjQ7IHVuZSBsb2kgb3UgJiMyMjQ7IHVuIHRleHRlIGFwcGxpY2FibGUsIGV4aXN0YW50cyBvdSBmdXR1cnMsIGNldHRlIGxvaSBvdSBjZSB0ZXh0ZSBwciYjMjMzO3ZhdWRyYWl0LCBldCBsZXMgUGFydGllcyBmZXJhaWVudCBsZXMgYW1lbmRlbWVudHMgbiYjMjMzO2Nlc3NhaXJlcyBwb3VyIHNlIGNvbmZvcm1lciAmIzIyNDsgY2V0dGUgbG9pIG91ICYjMjI0OyBjZSB0ZXh0ZS4gVG91dGVzIGxlcyBhdXRyZXMgZGlzcG9zaXRpb25zIHJlc3Rlcm9udCBlbiB2aWd1ZXVyLiBEZSBtJiMyMzQ7bWUsIGxhIG51bGxpdCYjMjMzOywgcG91ciBxdWVscXVlIHJhaXNvbiBxdWUgY2Ugc29pdCwgZGB1bmUgZGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IG5lIHNhdXJhaXQgZW50cmEmIzIzODtuZXIgbGEgbnVsbGl0JiMyMzM7IGRlIGxgZW5zZW1ibGUgZHUgQ29udHJhdC4KKworMTEuNSBMQU5HVUUKKworTGUgQ29udHJhdCBlc3QgciYjMjMzO2RpZyYjMjMzOyBlbiBsYW5ndWUgZnJhbiYjMjMxO2Fpc2UgZXQgZW4gbGFuZ3VlIGFuZ2xhaXNlLCBjZXMgZGV1eCB2ZXJzaW9ucyBmYWlzYW50ICYjMjMzO2dhbGVtZW50IGZvaS4KKworQXJ0aWNsZSAxMiAtIE5PVVZFTExFUyBWRVJTSU9OUyBEVSBDT05UUkFUCisKKzEyLjEgVG91dGUgcGVyc29ubmUgZXN0IGF1dG9yaXMmIzIzMztlICYjMjI0OyBjb3BpZXIgZXQgZGlzdHJpYnVlciBkZXMgY29waWVzIGRlIGNlIENvbnRyYXQuCisKKzEyLjIgQWZpbiBkYGVuIHByJiMyMzM7c2VydmVyIGxhIGNvaCYjMjMzO3JlbmNlLCBsZSB0ZXh0ZSBkdSBDb250cmF0IGVzdCBwcm90JiMyMzM7ZyYjMjMzOyBldCBuZSBwZXV0ICYjMjM0O3RyZSBtb2RpZmkmIzIzMzsgcXVlIHBhciBsZXMgYXV0ZXVycyBkZSBsYSBsaWNlbmNlLCBsZXNxdWVscyBzZSByJiMyMzM7c2VydmVudCBsZSBkcm9pdCBkZSBwdWJsaWVyIHAmIzIzMztyaW9kaXF1ZW1lbnQgZGVzIG1pc2VzICYjMjI0OyBqb3VyIG91IGRlIG5vdXZlbGxlcyB2ZXJzaW9ucyBkdSBDb250cmF0LCBxdWkgcG9zcyYjMjMzO2Rlcm9udCBjaGFjdW5lIHVuIG51bSYjMjMzO3JvIGRpc3RpbmN0LiBDZXMgdmVyc2lvbnMgdWx0JiMyMzM7cmlldXJlcyBzZXJvbnQgc3VzY2VwdGlibGVzIGRlIHByZW5kcmUgZW4gY29tcHRlIGRlIG5vdXZlbGxlcyBwcm9ibCYjMjMzO21hdGlxdWVzIHJlbmNvbnRyJiMyMzM7ZXMgcGFyIGxlcyBsb2dpY2llbHMgbGlicmVzLgorCisxMi4zIFRvdXQgTG9naWNpZWwgZGlmZnVzJiMyMzM7IHNvdXMgdW5lIHZlcnNpb24gZG9ubiYjMjMzO2UgZHUgQ29udHJhdCBuZSBwb3VycmEgZmFpcmUgbGBvYmpldCBkYHVuZSBkaWZmdXNpb24gdWx0JiMyMzM7cmlldXJlIHF1ZSBzb3VzIGxhIG0mIzIzNDttZSB2ZXJzaW9uIGR1IENvbnRyYXQgb3UgdW5lIHZlcnNpb24gcG9zdCYjMjMzO3JpZXVyZS4KKworQXJ0aWNsZSAxMyAtIExPSSBBUFBMSUNBQkxFIEVUIENPTVBFVEVOQ0UgVEVSUklUT1JJQUxFCisKKzEzLjEgTGUgQ29udHJhdCBlc3QgciYjMjMzO2dpIHBhciBsYSBsb2kgZnJhbiYjMjMxO2Fpc2UuIExlcyBQYXJ0aWVzIGNvbnZpZW5uZW50IGRlIHRlbnRlciBkZSByJiMyMzM7Z2xlciAmIzIyNDsgbGBhbWlhYmxlIGxlcyBkaWZmJiMyMzM7cmVuZHMgb3UgbGl0aWdlcyBxdWkgdmllbmRyYWllbnQgJiMyMjQ7IHNlIHByb2R1aXJlIHBhciBzdWl0ZSBvdSAmIzIyNDsgbGBvY2Nhc2lvbiBkdSBDb250cmF0LgorCisxMy4yIEEgZCYjMjMzO2ZhdXQgZGBhY2NvcmQgYW1pYWJsZSBkYW5zIHVuIGQmIzIzMztsYWkgZGUgZGV1eCAoMikgbW9pcyAmIzIyNDsgY29tcHRlciBkZSBsZXVyIHN1cnZlbmFuY2UgZXQgc2F1ZiBzaXR1YXRpb24gcmVsZXZhbnQgZGB1bmUgcHJvYyYjMjMzO2R1cmUgZGB1cmdlbmNlLCBsZXMgZGlmZiYjMjMzO3JlbmRzIG91IGxpdGlnZXMgc2Vyb250IHBvcnQmIzIzMztzIHBhciBsYSBQYXJ0aWUgbGEgcGx1cyBkaWxpZ2VudGUgZGV2YW50IGxlcyBUcmlidW5hdXggY29tcCYjMjMzO3RlbnRzIGRlIFBhcmlzLgorCisxIENlQ0lMTCBlc3QgcG91ciBDZShhKSBDKG5ycykgSShucmlhKSBMKG9naWNpZWwpIEwoaWJyZSkKKworVmVyc2lvbiAxLjAgZHUgMjAwNi0wOS0wNS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DUEFMLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ1BBTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFmYjBlMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ1BBTC0xLjAKQEAgLTAsMCArMSwxMDkgQEAKKworQ29tbW9uIFB1YmxpYyBBdHRyaWJ1dGlvbiBMaWNlbnNlIFZlcnNpb24gMS4wIChDUEFMKQorMS4gJiM4MjIwO0RlZmluaXRpb25zJiM4MjIxOworMS4wLjEgJiM4MjIwO0NvbW1lcmNpYWwgVXNlJiM4MjIxOyBtZWFucyBkaXN0cmlidXRpb24gb3Igb3RoZXJ3aXNlIG1ha2luZyB0aGUgQ292ZXJlZCBDb2RlIGF2YWlsYWJsZSB0byBhIHRoaXJkIHBhcnR5LgorMS4xICYjODIyMDtDb250cmlidXRvciYjODIyMTsgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorMS4yICYjODIyMDtDb250cmlidXRvciBWZXJzaW9uJiM4MjIxOyBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisxLjMgJiM4MjIwO0NvdmVyZWQgQ29kZSYjODIyMTsgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKzEuNCAmIzgyMjA7RWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtJiM4MjIxOyBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YS4KKzEuNSAmIzgyMjA7RXhlY3V0YWJsZSYjODIyMTsgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuCisxLjYgJiM4MjIwO0luaXRpYWwgRGV2ZWxvcGVyJiM4MjIxOyBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuCisxLjcgJiM4MjIwO0xhcmdlciBXb3JrJiM4MjIxOyBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorMS44ICYjODIyMDtMaWNlbnNlJiM4MjIxOyBtZWFucyB0aGlzIGRvY3VtZW50LgorMS44LjEgJiM4MjIwO0xpY2Vuc2FibGUmIzgyMjE7IG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgorMS45ICYjODIyMDtNb2RpZmljYXRpb25zJiM4MjIxOyBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczoKK0EuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCitCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorMS4xMCAmIzgyMjA7T3JpZ2luYWwgQ29kZSYjODIyMTsgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMgT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKzEuMTAuMSAmIzgyMjA7UGF0ZW50IENsYWltcyYjODIyMTsgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuCisxLjExICYjODIyMDtTb3VyY2UgQ29kZSYjODIyMTsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3Igc291cmNlIGNvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3ImIzgyMTc7cyBjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisxLjEyICYjODIyMDtZb3UmIzgyMjE7IChvciAmIzgyMjA7WW91ciYjODIyMTspIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsICYjODIyMDtZb3UmIzgyMjE7IGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAmIzgyMjA7Y29udHJvbCYjODIyMTsgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLgorMi4xIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKyhiKSB1bmRlciBQYXRlbnRzIENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcgb3Igc2VsbGluZyBvZiBPcmlnaW5hbCBDb2RlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsIHNlbGwsIGFuZCBvZmZlciBmb3Igc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKS4KKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xKGEpIGFuZCAoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBJbml0aWFsIERldmVsb3BlciBmaXJzdCBkaXN0cmlidXRlcyBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgY29kZSB0aGF0IFlvdSBkZWxldGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgMikgc2VwYXJhdGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgb3IgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBkZXZpY2VzLgorMi4yIENvbnRyaWJ1dG9yIEdyYW50LgorU3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UKKyhhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisoYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgZWl0aGVyIGFsb25lIGFuZC9vciBpbiBjb21iaW5hdGlvbiB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2Y6IDEpIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKTsgYW5kIDIpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKS4KKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgYW55IGNvZGUgdGhhdCBDb250cmlidXRvciBoYXMgZGVsZXRlZCBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IgVmVyc2lvbiBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSBDb3ZlcmVkIENvZGUgaW4gdGhlIGFic2VuY2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IuCiszLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuCiszLjEgQXBwbGljYXRpb24gb2YgTGljZW5zZS4KK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJiM4MjE3OyByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LgorMy4yIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KK0FueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBlaXRoZXIgb24gdGhlIHNhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIGF2YWlsYWJsZTsgYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LgorMy4zIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCiszLjQgSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMKKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuCitJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHkmIzgyMTc7cyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsIENvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBTb3VyY2UgQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkICYjODIyMDtMRUdBTCYjODIyMTsgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZSBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKyhiKSBDb250cmlidXRvciBBUElzLgorSWYgQ29udHJpYnV0b3ImIzgyMTc7cyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLgorKGMpIFJlcHJlc2VudGF0aW9ucy4KK0NvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byBTZWN0aW9uIDMuNChhKSBhYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvciYjODIxNztzIE1vZGlmaWNhdGlvbnMgYXJlIENvbnRyaWJ1dG9yJiM4MjE3O3Mgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS4KKzMuNSBSZXF1aXJlZCBOb3RpY2VzLgorWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJiM4MjE3OyByaWdodHMgb3Igb3duZXJzaGlwIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuIGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKzMuNiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsIGFuZCBpZiBZb3UgaW5jbHVkZSBhIG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSBpbmNsdWRlZCBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHMmIzgyMTc7IHJpZ2h0cyByZWxhdGluZyB0byB0aGUgQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgb3Igb3duZXJzaGlwIHJpZ2h0cyB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudCYjODIxNztzIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuCiszLjcgTGFyZ2VyIFdvcmtzLgorWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLgorNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLgorSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKzUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyBhdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCis2LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4KKzYuMSBOZXcgVmVyc2lvbnMuCitTb2NpYWx0ZXh0LCBJbmMuICgmIzgyMjA7U29jaWFsdGV4dCYjODIyMTspIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKzYuMiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLgorT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IFNvY2lhbHRleHQuIE5vIG9uZSBvdGhlciB0aGFuIFNvY2lhbHRleHQgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorNi4zIERlcml2YXRpdmUgV29ya3MuCitJZiBZb3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgWW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlcyAmIzgyMjA7U29jaWFsdGV4dCYjODIyMTssICYjODIyMDtDUEFMJiM4MjIxOyBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIENQQUwuIChGaWxsaW5nIGluIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKQorNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KK0NPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gJiM4MjIwO0FTIElTJiM4MjIxOyBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIE9SSUdJTkFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCis4LiBURVJNSU5BVElPTi4KKzguMSBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCis4LjIgSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSAoZXhjbHVkaW5nIGRlY2xhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIgb3IgYSBDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tIFlvdSBmaWxlIHN1Y2ggYWN0aW9uIGlzIHJlZmVycmVkIHRvIGFzICYjODIyMDtQYXJ0aWNpcGFudCYjODIyMTspIGFsbGVnaW5nIHRoYXQ6CisoYSkgc3VjaCBQYXJ0aWNpcGFudCYjODIxNztzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UgZnJvbSBQYXJ0aWNpcGFudCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSwgdW5sZXNzIGlmIHdpdGhpbiA2MCBkYXlzIGFmdGVyIHJlY2VpcHQgb2Ygbm90aWNlIFlvdSBlaXRoZXI6IChpKSBhZ3JlZSBpbiB3cml0aW5nIHRvIHBheSBQYXJ0aWNpcGFudCBhIG11dHVhbGx5IGFncmVlYWJsZSByZWFzb25hYmxlIHJveWFsdHkgZm9yIFlvdXIgcGFzdCBhbmQgZnV0dXJlIHVzZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvIHRoZSBDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMgb2Ygbm90aWNlLCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLgorKGIpIGFueSBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGRldmljZSwgb3RoZXIgdGhhbiBzdWNoIFBhcnRpY2lwYW50JiM4MjE3O3MgQ29udHJpYnV0b3IgVmVyc2lvbiwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xKGIpIGFuZCAyLjIoYikgYXJlIHJldm9rZWQgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIFlvdSBmaXJzdCBtYWRlLCB1c2VkLCBzb2xkLCBkaXN0cmlidXRlZCwgb3IgaGFkIG1hZGUsIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IFBhcnRpY2lwYW50LgorOC4zIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQgYWxsZWdpbmcgdGhhdCBzdWNoIFBhcnRpY2lwYW50JiM4MjE3O3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMgYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yIHNoYWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yIGxpY2Vuc2UuCis4LjQgSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDguMSBvciA4LjIgYWJvdmUsIGFsbCBlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2ggaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLgorOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgT1JJR0lOQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZJiM4MjE3O1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKzEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorVGhlIENvdmVyZWQgQ29kZSBpcyBhICYjODIyMDtjb21tZXJjaWFsIGl0ZW0sJiM4MjIxOyBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgJiM4MjIwO2NvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUmIzgyMjE7IGFuZCAmIzgyMjA7Y29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCYjODIyMTsgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorMTEuIE1JU0NFTExBTkVPVVMuCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IENhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFdpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUgcGFydHkgaXMgYSBjaXRpemVuIG9mLCBvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSwgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXMmIzgyMTc7IGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKzEyLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLgorQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8gd29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nIGhlcmVpbiBpcyBpbnRlbmRlZCBvciBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KKzEzLiBNVUxUSVBMRS1MSUNFTlNFRCBDT0RFLgorSW5pdGlhbCBEZXZlbG9wZXIgbWF5IGRlc2lnbmF0ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIGFzIE11bHRpcGxlLUxpY2Vuc2VkLiBNdWx0aXBsZS1MaWNlbnNlZCBtZWFucyB0aGF0IHRoZSBJbml0aWFsIERldmVsb3BlciBwZXJtaXRzIHlvdSB0byB1dGlsaXplIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXIgWW91ciBjaG9pY2Ugb2YgdGhlIENQQUwgb3IgdGhlIGFsdGVybmF0aXZlIGxpY2Vuc2VzLCBpZiBhbnksIHNwZWNpZmllZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIGZpbGUgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4KKzE0LiBBRERJVElPTkFMIFRFUk06IEFUVFJJQlVUSU9OCisoYSkgQXMgYSBtb2Rlc3QgYXR0cmlidXRpb24gdG8gdGhlIG9yZ2FuaXplciBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgKCYjODIyMDtPcmlnaW5hbCBEZXZlbG9wZXImIzgyMjE7KSwgaW4gdGhlIGhvcGUgdGhhdCBpdHMgcHJvbW90aW9uYWwgdmFsdWUgbWF5IGhlbHAganVzdGlmeSB0aGUgdGltZSwgbW9uZXkgYW5kIGVmZm9ydCBpbnZlc3RlZCBpbiB3cml0aW5nIHRoZSBPcmlnaW5hbCBDb2RlLCB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyIG1heSBpbmNsdWRlIGluIEV4aGliaXQgQiAoJiM4MjIwO0F0dHJpYnV0aW9uIEluZm9ybWF0aW9uJiM4MjIxOykgYSByZXF1aXJlbWVudCB0aGF0IGVhY2ggdGltZSBhbiBFeGVjdXRhYmxlIGFuZCBTb3VyY2UgQ29kZSBvciBhIExhcmdlciBXb3JrIGlzIGxhdW5jaGVkIG9yIGluaXRpYWxseSBydW4gKHdoaWNoIGluY2x1ZGVzIGluaXRpYXRpbmcgYSBzZXNzaW9uKSwgYSBwcm9taW5lbnQgZGlzcGxheSBvZiB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyJiM4MjE3O3MgQXR0cmlidXRpb24gSW5mb3JtYXRpb24gKGFzIGRlZmluZWQgYmVsb3cpIG11c3Qgb2NjdXIgb24gdGhlIGdyYXBoaWMgdXNlciBpbnRlcmZhY2UgZW1wbG95ZWQgYnkgdGhlIGVuZCB1c2VyIHRvIGFjY2VzcyBzdWNoIENvdmVyZWQgQ29kZSAod2hpY2ggbWF5IGluY2x1ZGUgZGlzcGxheSBvbiBhIHNwbGFzaCBzY3JlZW4pLCBpZiBhbnkuIFRoZSBzaXplIG9mIHRoZSBncmFwaGljIGltYWdlIHNob3VsZCBiZSBjb25zaXN0ZW50IHdpdGggdGhlIHNpemUgb2YgdGhlIG90aGVyIGVsZW1lbnRzIG9mIHRoZSBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbi4gSWYgdGhlIGFjY2VzcyBieSB0aGUgZW5kIHVzZXIgdG8gdGhlIEV4ZWN1dGFibGUgYW5kIFNvdXJjZSBDb2RlIGRvZXMgbm90IGNyZWF0ZSBhIGdyYXBoaWMgdXNlciBpbnRlcmZhY2UgZm9yIGFjY2VzcyB0byB0aGUgQ292ZXJlZCBDb2RlLCB0aGlzIG9ibGlnYXRpb24gc2hhbGwgbm90IGFwcGx5LiBJZiB0aGUgT3JpZ2luYWwgQ29kZSBkaXNwbGF5cyBzdWNoIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIGluIGEgcGFydGljdWxhciBmb3JtIChzdWNoIGFzIGluIHRoZSBmb3JtIG9mIGEgc3BsYXNoIHNjcmVlbiwgbm90aWNlIGF0IGxvZ2luLCBhbiAmIzgyMjA7YWJvdXQmIzgyMjE7IGRpc3BsYXksIG9yIGRlZGljYXRlZCBhdHRyaWJ1dGlvbiBhcmVhIG9uIHVzZXIgaW50ZXJmYWNlIHNjcmVlbnMpLCBjb250aW51ZWQgdXNlIG9mIHN1Y2ggZm9ybSBmb3IgdGhhdCBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiBpcyBvbmUgd2F5IG9mIG1lZXRpbmcgdGhpcyByZXF1aXJlbWVudCBmb3Igbm90aWNlLgorKGIpIEF0dHJpYnV0aW9uIGluZm9ybWF0aW9uIG1heSBvbmx5IGluY2x1ZGUgYSBjb3B5cmlnaHQgbm90aWNlLCBhIGJyaWVmIHBocmFzZSwgZ3JhcGhpYyBpbWFnZSBhbmQgYSBVUkwgKCYjODIyMDtBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiYjODIyMTspIGFuZCBpcyBzdWJqZWN0IHRvIHRoZSBBdHRyaWJ1dGlvbiBMaW1pdHMgYXMgZGVmaW5lZCBiZWxvdy4gRm9yIHRoZXNlIHB1cnBvc2VzLCBwcm9taW5lbnQgc2hhbGwgbWVhbiBkaXNwbGF5IGZvciBzdWZmaWNpZW50IGR1cmF0aW9uIHRvIGdpdmUgcmVhc29uYWJsZSBub3RpY2UgdG8gdGhlIHVzZXIgb2YgdGhlIGlkZW50aXR5IG9mIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIgYW5kIHRoYXQgaWYgWW91IGluY2x1ZGUgQXR0cmlidXRpb24gSW5mb3JtYXRpb24gb3Igc2ltaWxhciBpbmZvcm1hdGlvbiBmb3Igb3RoZXIgcGFydGllcywgWW91IG11c3QgZW5zdXJlIHRoYXQgdGhlIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIGZvciB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyIHNoYWxsIGJlIG5vIGxlc3MgcHJvbWluZW50IHRoYW4gc3VjaCBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiBvciBzaW1pbGFyIGluZm9ybWF0aW9uIGZvciB0aGUgb3RoZXIgcGFydHkuIEZvciBncmVhdGVyIGNlcnRhaW50eSwgdGhlIE9yaWdpbmFsIERldmVsb3BlciBtYXkgY2hvb3NlIHRvIHNwZWNpZnkgaW4gRXhoaWJpdCBCIGJlbG93IHRoYXQgdGhlIGFib3ZlIGF0dHJpYnV0aW9uIHJlcXVpcmVtZW50IG9ubHkgYXBwbGllcyB0byBhbiBFeGVjdXRhYmxlIGFuZCBTb3VyY2UgQ29kZSByZXN1bHRpbmcgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgTW9kaWZpY2F0aW9uLCBidXQgbm90IGEgTGFyZ2VyIFdvcmsuIFRoZSBpbnRlbnQgaXMgdG8gcHJvdmlkZSBmb3IgcmVhc29uYWJseSBtb2Rlc3QgYXR0cmlidXRpb24sIHRoZXJlZm9yZSB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyIGNhbm5vdCByZXF1aXJlIHRoYXQgWW91IGRpc3BsYXksIGF0IGFueSB0aW1lLCBtb3JlIHRoYW4gdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhcyBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbjogKGEpIGEgY29weXJpZ2h0IG5vdGljZSBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIERldmVsb3BlcjsgKGIpIGEgd29yZCBvciBvbmUgcGhyYXNlIChub3QgZXhjZWVkaW5nIDEwIHdvcmRzKTsgKGMpIG9uZSBncmFwaGljIGltYWdlIHByb3ZpZGVkIGJ5IHRoZSBPcmlnaW5hbCBEZXZlbG9wZXI7IGFuZCAoZCkgYSBVUkwgKGNvbGxlY3RpdmVseSwgdGhlICYjODIyMDtBdHRyaWJ1dGlvbiBMaW1pdHMmIzgyMjE7KS4KKyhjKSBJZiBFeGhpYml0IEIgZG9lcyBub3QgaW5jbHVkZSBhbnkgQXR0cmlidXRpb24gSW5mb3JtYXRpb24sIHRoZW4gdGhlcmUgYXJlIG5vIHJlcXVpcmVtZW50cyBmb3IgWW91IHRvIGRpc3BsYXkgYW55IEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIG9mIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIuCisoZCkgWW91IGFja25vd2xlZGdlIHRoYXQgYWxsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MgYW5kL29yIHRyYWRlIG5hbWVzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIGRpc3RyaWJ1dGVkIHdpdGggdGhlIENvdmVyZWQgQ29kZSBhcmUgdGhlIGV4Y2x1c2l2ZSBwcm9wZXJ0eSBvZiB0aGVpciBvd25lcnMgYW5kIG1heSBvbmx5IGJlIHVzZWQgd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB0aGVpciBvd25lcnMsIG9yIHVuZGVyIGNpcmN1bXN0YW5jZXMgb3RoZXJ3aXNlIHBlcm1pdHRlZCBieSBsYXcgb3IgYXMgZXhwcmVzc2x5IHNldCBvdXQgaW4gdGhpcyBMaWNlbnNlLgorMTUuIEFERElUSU9OQUwgVEVSTTogTkVUV09SSyBVU0UuCitUaGUgdGVybSAmIzgyMjA7RXh0ZXJuYWwgRGVwbG95bWVudCYjODIyMTsgbWVhbnMgdGhlIHVzZSwgZGlzdHJpYnV0aW9uLCBvciBjb21tdW5pY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgaW4gYW55IHdheSBzdWNoIHRoYXQgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBtYXkgYmUgdXNlZCBieSBhbnlvbmUgb3RoZXIgdGhhbiBZb3UsIHdoZXRoZXIgdGhvc2Ugd29ya3MgYXJlIGRpc3RyaWJ1dGVkIG9yIGNvbW11bmljYXRlZCB0byB0aG9zZSBwZXJzb25zIG9yIG1hZGUgYXZhaWxhYmxlIGFzIGFuIGFwcGxpY2F0aW9uIGludGVuZGVkIGZvciB1c2Ugb3ZlciBhIG5ldHdvcmsuIEFzIGFuIGV4cHJlc3MgY29uZGl0aW9uIGZvciB0aGUgZ3JhbnRzIG9mIGxpY2Vuc2UgaGVyZXVuZGVyLCBZb3UgbXVzdCB0cmVhdCBhbnkgRXh0ZXJuYWwgRGVwbG95bWVudCBieSBZb3Ugb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBhcyBhIGRpc3RyaWJ1dGlvbiB1bmRlciBzZWN0aW9uIDMuMSBhbmQgbWFrZSBTb3VyY2UgQ29kZSBhdmFpbGFibGUgdW5kZXIgU2VjdGlvbiAzLjIuCisKKyBFWEhJQklUIEEuIENvbW1vbiBQdWJsaWMgQXR0cmlidXRpb24gTGljZW5zZSBWZXJzaW9uIDEuMC4KKyYjODIyMDtUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBDb21tb24gUHVibGljIEF0dHJpYnV0aW9uIExpY2Vuc2UgVmVyc2lvbiAxLjAgKHRoZSAmIzgyMjA7TGljZW5zZSYjODIyMTspOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBfX19fX19fX19fX19fLiBUaGUgTGljZW5zZSBpcyBiYXNlZCBvbiB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSBidXQgU2VjdGlvbnMgMTQgYW5kIDE1IGhhdmUgYmVlbiBhZGRlZCB0byBjb3ZlciB1c2Ugb2Ygc29mdHdhcmUgb3ZlciBhIGNvbXB1dGVyIG5ldHdvcmsgYW5kIHByb3ZpZGUgZm9yIGxpbWl0ZWQgYXR0cmlidXRpb24gZm9yIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIuIEluIGFkZGl0aW9uLCBFeGhpYml0IEEgaGFzIGJlZW4gbW9kaWZpZWQgdG8gYmUgY29uc2lzdGVudCB3aXRoIEV4aGliaXQgQi4KK1NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICYjODIyMDtBUyBJUyYjODIyMTsgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorVGhlIE9yaWdpbmFsIENvZGUgaXNfX19fX19fX19fX19fX19fX19fX19fLgorVGhlIE9yaWdpbmFsIERldmVsb3BlciBpcyBub3QgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpcyBfX19fX19fX19fLiBJZiBsZWZ0IGJsYW5rLCB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyIGlzIHRoZSBJbml0aWFsIERldmVsb3Blci4KK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX18uIEFsbCBwb3J0aW9ucyBvZiB0aGUgY29kZSB3cml0dGVuIGJ5IF9fX19fX19fX19fIGFyZSBDb3B5cmlnaHQgKGMpIF9fX19fLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorQ29udHJpYnV0b3IgX19fX19fX19fX19fX19fX19fX19fXy4KK0FsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBfX19fXyBsaWNlbnNlICh0aGUgW19fX10gTGljZW5zZSksIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgW19fX19fX10gTGljZW5zZSBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLgorSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIFtfX19fXSBMaWNlbnNlIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBDUEFMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBbX19fXSBMaWNlbnNlLiBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIGVpdGhlciB0aGUgQ1BBTCBvciB0aGUgW19fX10gTGljZW5zZS4mIzgyMjE7CitbTk9URTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmcm9tIHRoZSB0ZXh0IG9mIHRoZSBub3RpY2VzIGluIHRoZSBTb3VyY2UgQ29kZSBmaWxlcyBvZiB0aGUgT3JpZ2luYWwgQ29kZS4gWW91IHNob3VsZCB1c2UgdGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgcmF0aGVyIHRoYW4gdGhlIHRleHQgZm91bmQgaW4gdGhlIE9yaWdpbmFsIENvZGUgU291cmNlIENvZGUgZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy5dCisKKyBFWEhJQklUIEIuIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uCitBdHRyaWJ1dGlvbiBDb3B5cmlnaHQgTm90aWNlOiBfX19fX19fX19fX19fX19fX19fX19fXworQXR0cmlidXRpb24gUGhyYXNlIChub3QgZXhjZWVkaW5nIDEwIHdvcmRzKTogX19fX19fX19fX19fX19fX19fX19fX18KK0F0dHJpYnV0aW9uIFVSTDogX19fX19fX19fX19fX19fX19fX19fX18KK0dyYXBoaWMgSW1hZ2UgYXMgcHJvdmlkZWQgaW4gdGhlIENvdmVyZWQgQ29kZSwgaWYgYW55LgorRGlzcGxheSBvZiBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiBpcyBbcmVxdWlyZWQvbm90IHJlcXVpcmVkXSBpbiBMYXJnZXIgV29ya3Mgd2hpY2ggYXJlIGRlZmluZWQgaW4gdGhlIENQQUwgYXMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoZSBDUEFMLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NQTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NQTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE3YzIwZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ1BMLTEuMApAQCAtMCwwICsxLDIxNSBAQAorCitDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKworVEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENPTU1PTiBQVUJMSUMKK0xJQ0VOU0UgKCJBR1JFRU1FTlQiKS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTQorQ09OU1RJVFVURVMgUkVDSVBJRU5UYFMgQUNDRVBUQU5DRSBPRiBUSElTIEFHUkVFTUVOVC4KKworMS4gREVGSU5JVElPTlMKKworIkNvbnRyaWJ1dGlvbiIgbWVhbnM6CisKK2EpIGluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZAorZG9jdW1lbnRhdGlvbiBkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kCisKK2IpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjoKKworaSkgY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kCisKK2lpKSBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07CisKK3doZXJlIHN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUKK2Rpc3RyaWJ1dGVkIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gYG9yaWdpbmF0ZXNgIGZyb20gYQorQ29udHJpYnV0b3IgaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZQorYWN0aW5nIG9uIHN1Y2ggQ29udHJpYnV0b3JgcyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvCit0aGUgUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluCitjb25qdW5jdGlvbiB3aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdAorZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgUHJvZ3JhbS4KKworIkNvbnRyaWJ1dG9yIiBtZWFucyBhbnkgcGVyc29uIG9yIGVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLgorCisiTGljZW5zZWQgUGF0ZW50cyAiIG1lYW4gcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlCituZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbgorY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4KKworIlByb2dyYW0iIG1lYW5zIHRoZSBDb250cmlidXRpb25zIGRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC4KKworIlJlY2lwaWVudCIgbWVhbnMgYW55b25lIHdobyByZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwKK2luY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLgorCisyLiBHUkFOVCBPRiBSSUdIVFMKKworYSkgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG8KK3JlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLAorZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2gKK2Rlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLgorCitiKSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCitSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZAorUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZQorQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uCitUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUKK1Byb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQgYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoCithZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uIHRvIGJlIGNvdmVyZWQgYnkgdGhlCitMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIGFueSBvdGhlciBjb21iaW5hdGlvbnMKK3doaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4KKworYykgUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzCit0byBpdHMgQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkKK0NvbnRyaWJ1dG9yIHRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvCitSZWNpcGllbnQgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUKK3JpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUKK3Jlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4KK0ZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0bworZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50YHMgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UKK2JlZm9yZSBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uCisKK2QpIEVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQKK2NvcHlyaWdodCByaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0Citmb3J0aCBpbiB0aGlzIEFncmVlbWVudC4KKworMy4gUkVRVUlSRU1FTlRTCisKK0EgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzCitvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6CisKK2EpIGl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQKKworYikgaXRzIGxpY2Vuc2UgYWdyZWVtZW50OgorCitpKSBlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlIGFuZAorbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQKK2ZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOworCitpaSkgZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IKK2RhbWFnZXMsIGluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsCitkYW1hZ2VzLCBzdWNoIGFzIGxvc3QgcHJvZml0czsKKworaWlpKSBzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZAorYnkgdGhhdCBDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kCisKK2l2KSBzdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaAorQ29udHJpYnV0b3IsIGFuZCBpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IKK3Rocm91Z2ggYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuCisKK1doZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlIGNvZGUgZm9ybToKKworYSkgaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kCisKK2IpIGEgY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLgorCitDb250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55IGNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlCitQcm9ncmFtLgorCitFYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZSBvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmCithbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3Mgc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZQorb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLgorCis0LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTgorCitDb21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkgYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoCityZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMKK2ludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlIG9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvCitpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIKK3doaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwgbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYKK2EgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2gKK0NvbnRyaWJ1dG9yICgiQ29tbWVyY2lhbCBDb250cmlidXRvciIpIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkKK2V2ZXJ5IG90aGVyIENvbnRyaWJ1dG9yICgiSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IiKSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMKK2FuZCBjb3N0cyAoY29sbGVjdGl2ZWx5ICJMb3NzZXMiKSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIgbGVnYWwKK2FjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvIHRoZQorZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCitjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAorb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCityZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKK3RvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdG8KK2NvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kIGFueQorcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZSBpbgorYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLgorCitGb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0CitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UgY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcworcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcyBhcmUgc3VjaAorQ29tbWVyY2lhbCBDb250cmlidXRvcmBzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzIHNlY3Rpb24sIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUgb3RoZXIKK0NvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEgY291cnQKK3JlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLgorCis1LiBOTyBXQVJSQU5UWQorCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4KKyJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUgorSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaAorUmVjaXBpZW50IGlzIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZgorcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YKK3Byb2dyYW0gZXJyb3JzLCBjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLAorcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuCisKKzYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZCisKK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZCitDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QKK1BST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCitTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTCitHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIEdFTkVSQUwKKworSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZQorbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZQordGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaAorcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoCitwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorCitJZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGEgQ29udHJpYnV0b3Igd2l0aCByZXNwZWN0IHRvCithIHBhdGVudCBhcHBsaWNhYmxlIHRvIHNvZnR3YXJlIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYQorbGF3c3VpdCksIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIGJ5IHRoYXQgQ29udHJpYnV0b3IgdG8gc3VjaCBSZWNpcGllbnQKK3VuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIEluCithZGRpdGlvbiwgaWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5CisoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbQoraXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpCitpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnRgcyBwYXRlbnQocyksIHRoZW4gc3VjaCBSZWNpcGllbnRgcyByaWdodHMgZ3JhbnRlZCB1bmRlcgorU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKK0FsbCBSZWNpcGllbnRgcyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvCitjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMKK25vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2YKK3N1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudGBzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsCitSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMKK3JlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsIFJlY2lwaWVudGBzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50CithbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkgUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZAorc3Vydml2ZS4KKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4KK29yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcyBjb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUKK21vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50IFN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvCitwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YgdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuCitObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuCitJQk0gaXMgdGhlIGluaXRpYWwgQWdyZWVtZW50IFN0ZXdhcmQuIElCTSBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0byBzZXJ2ZQorYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uIG9mIHRoZQorQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0gKGluY2x1ZGluZworQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQKK3VuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YgdGhlIEFncmVlbWVudAoraXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAoaW5jbHVkaW5nIGl0cworQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiBTZWN0aW9ucworMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0byB0aGUKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKK2V4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKK2V4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC4KKworVGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMKK0FncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMgQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhcgorYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMgaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4KK2FueSByZXN1bHRpbmcgbGl0aWdhdGlvbi4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DVUEtT1BMLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ1VBLU9QTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZmNTllYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ1VBLU9QTC0xLjAKQEAgLTAsMCArMSw0NzEgQEAKKworQ1VBIE9mZmljZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorKHBsYWluIHRleHQpCisxLiBEZWZpbml0aW9ucy4KKworMS4wLjEuICJDb21tZXJjaWFsIFVzZSIgbWVhbnMgZGlzdHJpYnV0aW9uIG9yIG90aGVyd2lzZSBtYWtpbmcgdGhlCitDb3ZlcmVkIENvZGUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuCisKKzEuMS4gIkNvbnRyaWJ1dG9yIiBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8KK3RoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisxLjIuICJDb250cmlidXRvciBWZXJzaW9uIiBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsCitDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zCittYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKworMS4zLiAiQ292ZXJlZCBDb2RlIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZQorY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZQoraW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuNC4gIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSIgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5CithY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYwordHJhbnNmZXIgb2YgZGF0YS4KKworMS41LiAiRXhlY3V0YWJsZSIgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlCitDb2RlLgorCisxLjYuICJJbml0aWFsIERldmVsb3BlciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQKK2FzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQKK0EuCisKKzEuNy4gIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yCitwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS44LiAiTGljZW5zZSIgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworMS44LjEuICJMaWNlbnNhYmxlIiBtZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bQorZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yCitzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgorCisxLjkuICJNb2RpZmljYXRpb25zIiBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUKK3N1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cworTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEKK01vZGlmaWNhdGlvbiBpczoKKworQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZQorY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKK0IuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yCitwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCisxLjEwLiAiT3JpZ2luYWwgQ29kZSIgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZQord2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzCitPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMKK0xpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKworMS4xMC4xLiAiUGF0ZW50IENsYWltcyIgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yCitoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywKK2FuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci4KKworMS4xMS4gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMKK2FueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbAorY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZQorZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIKK3dlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yYHMgY2hvaWNlLiBUaGUKK1NvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlCithcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlCitmb3Igbm8gY2hhcmdlLgorCisxLjEyLiAiWW91IiAob3IgIllvdXIiKSBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5CitleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMKK0xpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLgorRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcworY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZgordGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LAordG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5Citjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQKKyg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaAorZW50aXR5LgorCisyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLgorCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwKK25vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK2NsYWltczoKKworKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yCit0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgSW5pdGlhbCBEZXZlbG9wZXIgdG8gdXNlLCByZXByb2R1Y2UsCittb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsCitDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yCithcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgUGF0ZW50cyBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yCitzZWxsaW5nIG9mIE9yaWdpbmFsIENvZGUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwKK3NlbGwsIGFuZCBvZmZlciBmb3Igc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZQorT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikuCisKKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xKGEpIGFuZCAoYikgYXJlCitlZmZlY3RpdmUgb24gdGhlIGRhdGUgSW5pdGlhbCBEZXZlbG9wZXIgZmlyc3QgZGlzdHJpYnV0ZXMKK09yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMKK2dyYW50ZWQ6IDEpIGZvciBjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyAyKQorc2VwYXJhdGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgb3IgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkCitieTogaSkgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBpaSkgdGhlCitjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGRldmljZXMuCisKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuCitTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IKK2hlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UKKworKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yCit0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksCitkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zCitjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbgordW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUKK2FuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsIG9yCitzZWxsaW5nIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZQorYW5kL29yIGluIGNvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zCitvZiBzdWNoIGNvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZQorbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdAorQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQgMikgdGhlIGNvbWJpbmF0aW9uIG9mCitNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvcgorVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbikuCisKKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUKK2VmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBDb250cmlidXRvciBmaXJzdCBtYWtlcyBDb21tZXJjaWFsIFVzZSBvZgordGhlIENvdmVyZWQgQ29kZS4KKworKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMihiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMKK2dyYW50ZWQ6IDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlCitDb250cmlidXRvciBWZXJzaW9uOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOworMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGlyZCBwYXJ0eSBtb2RpZmljYXRpb25zIG9mCitDb250cmlidXRvciBWZXJzaW9uIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlCitieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZQorQ29udHJpYnV0b3IgVmVyc2lvbikgb3Igb3RoZXIgZGV2aWNlczsgb3IgNCkgdW5kZXIgUGF0ZW50IENsYWltcworaW5mcmluZ2VkIGJ5IENvdmVyZWQgQ29kZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkKK3RoYXQgQ29udHJpYnV0b3IuCisKKzMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy4KKworMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLgorVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUKK2dvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KK1NlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlCitkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbgorb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhCitjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdQorZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUKK3ZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcworTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlCithbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4KK1NlY3Rpb24gMy41LgorCiszLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KK0FueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlCittYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UKK2VpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkCitFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4KK0V4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGU7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYworRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKQorbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXgKKyg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbgoraGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvcgorZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZQorRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4KKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEKK2ZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZAordGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdAordGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsCitDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuCitFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUKK29yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycworCisoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLgorSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5YHMKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cworZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsCitDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlIENvZGUKK2Rpc3RyaWJ1dGlvbiB0aXRsZWQgIkxFR0FMIiB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUKK3BhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsCitrbm93IHdob20gdG8gY29udGFjdC4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlcgordGhlIE1vZGlmaWNhdGlvbiBpcyBtYWRlIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsCitDb250cmlidXRvciBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcworQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMKKyhzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpCityZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZAorQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuCisKKyhiKSBDb250cmlidXRvciBBUElzLgorCitJZiBDb250cmlidXRvcmBzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZworaW50ZXJmYWNlIGFuZCBDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaAorYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgQ29udHJpYnV0b3IgbXVzdAorYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuCisKKyhjKSBSZXByZXNlbnRhdGlvbnMuCisKK0NvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0bworU2VjdGlvbiAzLjQoYSkgYWJvdmUsIENvbnRyaWJ1dG9yIGJlbGlldmVzIHRoYXQgQ29udHJpYnV0b3JgcworTW9kaWZpY2F0aW9ucyBhcmUgQ29udHJpYnV0b3JgcyBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IKK0NvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5Cit0aGlzIExpY2Vuc2UuCisKKzMuNS4gUmVxdWlyZWQgTm90aWNlcy4KK1lvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZQorQ29kZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlCitDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhCitsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseQordG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpCitZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbgorRXhoaWJpdCBBLiBZb3UgbXVzdCBhbHNvIGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24KK2ZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyBvciBvd25lcnNoaXAKK3JpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8KK2NoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5CitvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91CittYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsCitEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbgorYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcworb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUKK0luaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksCitzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlCityZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLAorYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZgordGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKK2luY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZQorb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkCitpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yCitjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgcmVsYXRpbmcgdG8gdGhlCitDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQKK0NvZGUgb3Igb3duZXJzaGlwIHJpZ2h0cyB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heQorY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbgorY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZQorRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudGBzCityaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzCitMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50CitsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIKK2Zyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsCitEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUKK0luaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieQordGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2gKK3Rlcm1zIFlvdSBvZmZlci4KKworMy43LiBMYXJnZXIgV29ya3MuCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlCitub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyCitXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlCityZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCisKKzQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8KK3N0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aAordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikKK2Rlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24KK211c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0CitiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZQorZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUKK3N1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0bwordW5kZXJzdGFuZCBpdC4KKworNS4gQXBwbGljYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMKK2F0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKworNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCisKKzYuMS4gTmV3IFZlcnNpb25zLgorQ1VBIE9mZmljZSBQcm9qZWN0IG1heSBwdWJsaXNoIHJldmlzZWQKK2FuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbgord2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCitPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlCitMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQKK3ZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcworb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgQ1VBIE9mZmljZSBQcm9qZWN0LiBObyBvbmUKK290aGVyIHRoYW4gQ1VBIE9mZmljZSBQcm9qZWN0IGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvCitDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy4KK0lmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkKK29ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUKK2dvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIFlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQKK3RoZSBwaHJhc2VzICJDVUEgT2ZmaWNlIiwgIkNVQSIsICJDVUFQTCIsIG9yIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGluIHlvdXIKK2xpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpCithbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgWW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlCitjb250YWlucyB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGUgQ1VBIE9mZmljZSBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwKK0RldmVsb3BlciwgT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBpbiB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbgorRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mCit0aGlzIExpY2Vuc2UuKQorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRgorREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLgorVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFCitJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULAorWU9VIChOT1QgVEhFIElOSVRJQUwgREVWRUxPUEVSIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRQorQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUgorT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YKK0FOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKworOC4gVEVSTUlOQVRJT04uCisKKzguMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlCithdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlCitzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwKK3N1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwKK3N1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIKK25hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlCitzaGFsbCBzdXJ2aXZlLgorCis4LjIuIElmIFlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGJ5IGFzc2VydGluZyBhIHBhdGVudCBpbmZyaW5nZW1lbnQKK2NsYWltIChleGNsdWRpbmcgZGVjbGF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgSW5pdGlhbCBEZXZlbG9wZXIKK29yIGEgQ29udHJpYnV0b3IgKHRoZSBJbml0aWFsIERldmVsb3BlciBvciBDb250cmlidXRvciBhZ2FpbnN0IHdob20KK1lvdSBmaWxlIHN1Y2ggYWN0aW9uIGlzIHJlZmVycmVkIHRvIGFzICJQYXJ0aWNpcGFudCIpIGFsbGVnaW5nIHRoYXQ6CisKKyhhKSBzdWNoIFBhcnRpY2lwYW50YHMgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5CitpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoCitQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlCitzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZSBmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LAordW5sZXNzIGlmIHdpdGhpbiA2MCBkYXlzIGFmdGVyIHJlY2VpcHQgb2Ygbm90aWNlIFlvdSBlaXRoZXI6IChpKQorYWdyZWUgaW4gd3JpdGluZyB0byBwYXkgUGFydGljaXBhbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUgcmVhc29uYWJsZQorcm95YWx0eSBmb3IgWW91ciBwYXN0IGFuZCBmdXR1cmUgdXNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoCitQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvCit0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQuIElmIHdpdGhpbiA2MCBkYXlzCitvZiBub3RpY2UsIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QKK211dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0KK2lzIG5vdCB3aXRoZHJhd24sIHRoZSByaWdodHMgZ3JhbnRlZCBieSBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIKK1NlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mCit0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLgorCisoYikgYW55IHNvZnR3YXJlLCBoYXJkd2FyZSwgb3IgZGV2aWNlLCBvdGhlciB0aGFuIHN1Y2ggUGFydGljaXBhbnRgcworQ29udHJpYnV0b3IgVmVyc2lvbiwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbgorYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMShiKQorYW5kIDIuMihiKSBhcmUgcmV2b2tlZCBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgWW91IGZpcnN0IG1hZGUsIHVzZWQsCitzb2xkLCBkaXN0cmlidXRlZCwgb3IgaGFkIG1hZGUsIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0CitQYXJ0aWNpcGFudC4KKworOC4zLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50CithbGxlZ2luZyB0aGF0IHN1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yCitpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMKK2J5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMKK2dyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yIHNoYWxsIGJlIHRha2VuCitpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvcgorbGljZW5zZS4KKworOC40LiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwKK2FsbCBlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykKK3doaWNoIGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIKK3ByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTAorREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsCitPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SCitBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkKK0NIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwKK1dPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSCitDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOCitJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YKK0xJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkKK1JFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcKK1BST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFCitFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08KK1RISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCisxMC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy4KKworVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0sIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbgorNDggQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mICJjb21tZXJjaWFsIGNvbXB1dGVyCitzb2Z0d2FyZSIgYW5kICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sIiBhcyBzdWNoCit0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4CitDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksCithbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UKK3JpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisxMS4gTUlTQ0VMTEFORU9VUy4KKworVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QKK21hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUKK3VuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudAorbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieQorQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmCithbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuCitXaXRoIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lIHBhcnR5IGlzIGEgY2l0aXplbiBvZiwKK29yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiB0aGUgVW5pdGVkCitTdGF0ZXMgb2YgQW1lcmljYSwgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlCitzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybgorRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksCitDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcKK3dpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzYCBmZWVzIGFuZAorZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbgorQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4KK0FueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0CitzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcworTGljZW5zZS4KKworMTIuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuCisKK0FzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMKK3Jlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwKK291dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgWW91IGFncmVlIHRvCit3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2gKK3Jlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZyBoZXJlaW4gaXMgaW50ZW5kZWQgb3IKK3NoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorCisxMy4gTVVMVElQTEUtTElDRU5TRUQgQ09ERS4KKworSW5pdGlhbCBEZXZlbG9wZXIgbWF5IGRlc2lnbmF0ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIGFzCisiTXVsdGlwbGUtTGljZW5zZWQiLiAiTXVsdGlwbGUtTGljZW5zZWQiIG1lYW5zIHRoYXQgdGhlIEluaXRpYWwKK0RldmVsb3BlciBwZXJtaXRzIHlvdSB0byB1dGlsaXplIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXIKK1lvdXIgY2hvaWNlIG9mIHRoZSBOUEwgb3IgdGhlIGFsdGVybmF0aXZlIGxpY2Vuc2VzLCBpZiBhbnksIHNwZWNpZmllZAorYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBmaWxlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuCisKK0VYSElCSVQgQSAtIENVQSBPZmZpY2UgUHVibGljIExpY2Vuc2UuCisKK2BgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgQ1VBIE9mZmljZSBQdWJsaWMgTGljZW5zZQorVmVyc2lvbiAxLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgorY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKK2h0dHA6Ly9jdWFvZmZpY2Uuc291cmNlZm9yZ2UubmV0LworCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCitiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS4KKworVGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fX19fX19fX18uCitQb3J0aW9ucyBjcmVhdGVkIGJ5IF9fX19fX19fX19fX19fX19fX19fX18gYXJlIENvcHlyaWdodCAoQykgX19fX19fCitfX19fX19fX19fX19fX19fX19fX19fXy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLgorCitBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcworb2YgdGhlIF9fX19fIGxpY2Vuc2UgKHRoZSAiW19fX10gTGljZW5zZSIpLCBpbiB3aGljaCBjYXNlIHRoZQorcHJvdmlzaW9ucyBvZiBbX19fX19fXSBMaWNlbnNlIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhvc2UKK2Fib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIFtfX19fXSBMaWNlbnNlIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQoreW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgQ1VBUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkKK2RlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZAorb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgW19fX10gTGljZW5zZS4gSWYgeW91IGRvIG5vdCBkZWxldGUKK3RoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKK3VuZGVyIGVpdGhlciB0aGUgQ1VBUEwgb3IgdGhlIFtfX19dIExpY2Vuc2UuIgorCitbTk9URTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmcm9tIHRoZSB0ZXh0IG9mCit0aGUgbm90aWNlcyBpbiB0aGUgU291cmNlIENvZGUgZmlsZXMgb2YgdGhlIE9yaWdpbmFsIENvZGUuIFlvdSBzaG91bGQKK3VzZSB0aGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSByYXRoZXIgdGhhbiB0aGUgdGV4dCBmb3VuZCBpbiB0aGUKK09yaWdpbmFsIENvZGUgU291cmNlIENvZGUgZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy5dCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ2xBcnRpc3RpYyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ2xBcnRpc3RpYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDVhNGFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DbEFydGlzdGljCkBAIC0wLDAgKzEsMTM4IEBACisKKyAgICAgICBUaGUgQ2xhcmlmaWVkIEFydGlzdGljIExpY2Vuc2UKKworICAgIFByZWFtYmxlCisKK1RoZSBpbnRlbnQgb2YgdGhpcyBkb2N1bWVudCBpcyB0byBzdGF0ZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBhCitQYWNrYWdlIG1heSBiZSBjb3BpZWQsIHN1Y2ggdGhhdCB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYWludGFpbnMgc29tZQorc2VtYmxhbmNlIG9mIGFydGlzdGljIGNvbnRyb2wgb3ZlciB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlIHBhY2thZ2UsCit3aGlsZSBnaXZpbmcgdGhlIHVzZXJzIG9mIHRoZSBwYWNrYWdlIHRoZSByaWdodCB0byB1c2UgYW5kIGRpc3RyaWJ1dGUKK3RoZSBQYWNrYWdlIGluIGEgbW9yZS1vci1sZXNzIGN1c3RvbWFyeSBmYXNoaW9uLCBwbHVzIHRoZSByaWdodCB0byBtYWtlCityZWFzb25hYmxlIG1vZGlmaWNhdGlvbnMuCisKK0RlZmluaXRpb25zOgorCisgIlBhY2thZ2UiIHJlZmVycyB0byB0aGUgY29sbGVjdGlvbiBvZiBmaWxlcyBkaXN0cmlidXRlZCBieSB0aGUKKyBDb3B5cmlnaHQgSG9sZGVyLCBhbmQgZGVyaXZhdGl2ZXMgb2YgdGhhdCBjb2xsZWN0aW9uIG9mIGZpbGVzCisgY3JlYXRlZCB0aHJvdWdoIHRleHR1YWwgbW9kaWZpY2F0aW9uLgorCisgIlN0YW5kYXJkIFZlcnNpb24iIHJlZmVycyB0byBzdWNoIGEgUGFja2FnZSBpZiBpdCBoYXMgbm90IGJlZW4KKyBtb2RpZmllZCwgb3IgaGFzIGJlZW4gbW9kaWZpZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB3aXNoZXMKKyBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlciBhcyBzcGVjaWZpZWQgYmVsb3cuCisKKyAiQ29weXJpZ2h0IEhvbGRlciIgaXMgd2hvZXZlciBpcyBuYW1lZCBpbiB0aGUgY29weXJpZ2h0IG9yCisgY29weXJpZ2h0cyBmb3IgdGhlIHBhY2thZ2UuCisKKyAiWW91IiBpcyB5b3UsIGlmIHlvdWByZSB0aGlua2luZyBhYm91dCBjb3B5aW5nIG9yIGRpc3RyaWJ1dGluZworIHRoaXMgUGFja2FnZS4KKworICJEaXN0cmlidXRpb24gZmVlIiBpcyBhIGZlZSB5b3UgY2hhcmdlIGZvciBwcm92aWRpbmcgYSBjb3B5CisgICAgICAgIG9mIHRoaXMgUGFja2FnZSB0byBhbm90aGVyIHBhcnR5LgorCisgIkZyZWVseSBBdmFpbGFibGUiIG1lYW5zIHRoYXQgbm8gZmVlIGlzIGNoYXJnZWQgZm9yIHRoZSByaWdodCB0bworICAgICAgICB1c2UgdGhlIGl0ZW0sIHRob3VnaCB0aGVyZSBtYXkgYmUgZmVlcyBpbnZvbHZlZCBpbiBoYW5kbGluZyB0aGUKKyAgICAgICAgaXRlbS4gIEl0IGFsc28gbWVhbnMgdGhhdCByZWNpcGllbnRzIG9mIHRoZSBpdGVtIG1heSByZWRpc3RyaWJ1dGUKKyAgICAgICAgaXQgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyB0aGV5IHJlY2VpdmVkIGl0LgorCisxLiBZb3UgbWF5IG1ha2UgYW5kIGdpdmUgYXdheSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIHNvdXJjZSBmb3JtIG9mIHRoZQorU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGlzIFBhY2thZ2Ugd2l0aG91dCByZXN0cmljdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UKK2R1cGxpY2F0ZSBhbGwgb2YgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2VzIGFuZCBhc3NvY2lhdGVkIGRpc2NsYWltZXJzLgorCisyLiBZb3UgbWF5IGFwcGx5IGJ1ZyBmaXhlcywgcG9ydGFiaWxpdHkgZml4ZXMgYW5kIG90aGVyIG1vZGlmaWNhdGlvbnMKK2Rlcml2ZWQgZnJvbSB0aGUgUHVibGljIERvbWFpbiwgb3IgdGhvc2UgbWFkZSBGcmVlbHkgQXZhaWxhYmxlLCBvciBmcm9tCit0aGUgQ29weXJpZ2h0IEhvbGRlci4gIEEgUGFja2FnZSBtb2RpZmllZCBpbiBzdWNoIGEgd2F5IHNoYWxsIHN0aWxsIGJlCitjb25zaWRlcmVkIHRoZSBTdGFuZGFyZCBWZXJzaW9uLgorCiszLiBZb3UgbWF5IG90aGVyd2lzZSBtb2RpZnkgeW91ciBjb3B5IG9mIHRoaXMgUGFja2FnZSBpbiBhbnkgd2F5LCBwcm92aWRlZAordGhhdCB5b3UgaW5zZXJ0IGEgcHJvbWluZW50IG5vdGljZSBpbiBlYWNoIGNoYW5nZWQgZmlsZSBzdGF0aW5nIGhvdyBhbmQKK3doZW4geW91IGNoYW5nZWQgdGhhdCBmaWxlLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZQorZm9sbG93aW5nOgorCisgICAgYSkgcGxhY2UgeW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBQdWJsaWMgRG9tYWluIG9yIG90aGVyd2lzZSBtYWtlIHRoZW0KKyAgICBGcmVlbHkgQXZhaWxhYmxlLCBzdWNoIGFzIGJ5IHBvc3Rpbmcgc2FpZCBtb2RpZmljYXRpb25zIHRvIFVzZW5ldCBvciBhbgorICAgIGVxdWl2YWxlbnQgbWVkaXVtLCBvciBwbGFjaW5nIHRoZSBtb2RpZmljYXRpb25zIG9uIGEgbWFqb3IgbmV0d29yaworICAgIGFyY2hpdmUgc2l0ZSBhbGxvd2luZyB1bnJlc3RyaWN0ZWQgYWNjZXNzIHRvIHRoZW0sIG9yIGJ5IGFsbG93aW5nIHRoZQorICAgIENvcHlyaWdodCBIb2xkZXIgdG8gaW5jbHVkZSB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIFN0YW5kYXJkIFZlcnNpb24KKyAgICBvZiB0aGUgUGFja2FnZS4KKworICAgIGIpIHVzZSB0aGUgbW9kaWZpZWQgUGFja2FnZSBvbmx5IHdpdGhpbiB5b3VyIGNvcnBvcmF0aW9uIG9yIG9yZ2FuaXphdGlvbi4KKworICAgIGMpIHJlbmFtZSBhbnkgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIHNvIHRoZSBuYW1lcyBkbyBub3QgY29uZmxpY3QKKyAgICB3aXRoIHN0YW5kYXJkIGV4ZWN1dGFibGVzLCB3aGljaCBtdXN0IGFsc28gYmUgcHJvdmlkZWQsIGFuZCBwcm92aWRlCisgICAgYSBzZXBhcmF0ZSBtYW51YWwgcGFnZSBmb3IgZWFjaCBub24tc3RhbmRhcmQgZXhlY3V0YWJsZSB0aGF0IGNsZWFybHkKKyAgICBkb2N1bWVudHMgaG93IGl0IGRpZmZlcnMgZnJvbSB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworICAgIGQpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBDb3B5cmlnaHQgSG9sZGVyLgorCisgICAgZSkgcGVybWl0IGFuZCBlbmNvdXJnZSBhbnlvbmUgd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgbW9kaWZpZWQgUGFja2FnZQorICAgICAgIHBlcm1pc3Npb24gdG8gbWFrZSB5b3VyIG1vZGlmaWNhdGlvbnMgRnJlZWx5IEF2YWlsYWJsZQorICAgICAgIGluIHNvbWUgc3BlY2lmaWMgd2F5LgorCisKKzQuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbXMgb2YgdGhpcyBQYWNrYWdlIGluIG9iamVjdCBjb2RlIG9yCitleGVjdXRhYmxlIGZvcm0sIHByb3ZpZGVkIHRoYXQgeW91IGRvIGF0IGxlYXN0IE9ORSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgZGlzdHJpYnV0ZSBhIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhlIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJ5IGZpbGVzLAorICAgIHRvZ2V0aGVyIHdpdGggaW5zdHJ1Y3Rpb25zIChpbiB0aGUgbWFudWFsIHBhZ2Ugb3IgZXF1aXZhbGVudCkgb24gd2hlcmUKKyAgICB0byBnZXQgdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKKyAgICBiKSBhY2NvbXBhbnkgdGhlIGRpc3RyaWJ1dGlvbiB3aXRoIHRoZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBvZgorICAgIHRoZSBQYWNrYWdlIHdpdGggeW91ciBtb2RpZmljYXRpb25zLgorCisgICAgYykgZ2l2ZSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgbm9uLXN0YW5kYXJkIG5hbWVzLCBhbmQgY2xlYXJseQorICAgIGRvY3VtZW50IHRoZSBkaWZmZXJlbmNlcyBpbiBtYW51YWwgcGFnZXMgKG9yIGVxdWl2YWxlbnQpLCB0b2dldGhlcgorICAgIHdpdGggaW5zdHJ1Y3Rpb25zIG9uIHdoZXJlIHRvIGdldCB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworICAgIGQpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBDb3B5cmlnaHQgSG9sZGVyLgorCisgICAgZSkgb2ZmZXIgdGhlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIG9mIHRoZSBQYWNrYWdlLCB3aXRoIHlvdXIKKyAgICAgICBtb2RpZmljYXRpb25zLCBieSBtYWlsIG9yZGVyLgorCis1LiBZb3UgbWF5IGNoYXJnZSBhIGRpc3RyaWJ1dGlvbiBmZWUgZm9yIGFueSBkaXN0cmlidXRpb24gb2YgdGhpcyBQYWNrYWdlLgorSWYgeW91IG9mZmVyIHN1cHBvcnQgZm9yIHRoaXMgUGFja2FnZSwgeW91IG1heSBjaGFyZ2UgYW55IGZlZSB5b3UgY2hvb3NlCitmb3IgdGhhdCBzdXBwb3J0LiAgWW91IG1heSBub3QgY2hhcmdlIGEgbGljZW5zZSBmZWUgZm9yIHRoZSByaWdodCB0byB1c2UKK3RoaXMgUGFja2FnZSBpdHNlbGYuICBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhpcyBQYWNrYWdlIGluIGFnZ3JlZ2F0ZSB3aXRoCitvdGhlciAocG9zc2libHkgY29tbWVyY2lhbCBhbmQgcG9zc2libHkgbm9uZnJlZSkgcHJvZ3JhbXMgYXMgcGFydCBvZiBhCitsYXJnZXIgKHBvc3NpYmx5IGNvbW1lcmNpYWwgYW5kIHBvc3NpYmx5IG5vbmZyZWUpIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiwKK2FuZCBjaGFyZ2UgbGljZW5zZSBmZWVzIGZvciBvdGhlciBwYXJ0cyBvZiB0aGF0IHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiwKK3Byb3ZpZGVkIHRoYXQgeW91IGRvIG5vdCBhZHZlcnRpc2UgdGhpcyBQYWNrYWdlIGFzIGEgcHJvZHVjdCBvZiB5b3VyIG93bi4KK0lmIHRoZSBQYWNrYWdlIGluY2x1ZGVzIGFuIGludGVycHJldGVyLCBZb3UgbWF5IGVtYmVkIHRoaXMgUGFja2FnZWBzCitpbnRlcnByZXRlciB3aXRoaW4gYW4gZXhlY3V0YWJsZSBvZiB5b3VycyAoYnkgbGlua2luZyk7IHRoaXMgc2hhbGwgYmUKK2NvbnN0cnVlZCBhcyBhIG1lcmUgZm9ybSBvZiBhZ2dyZWdhdGlvbiwgcHJvdmlkZWQgdGhhdCB0aGUgY29tcGxldGUKK1N0YW5kYXJkIFZlcnNpb24gb2YgdGhlIGludGVycHJldGVyIGlzIHNvIGVtYmVkZGVkLgorCis2LiBUaGUgc2NyaXB0cyBhbmQgbGlicmFyeSBmaWxlcyBzdXBwbGllZCBhcyBpbnB1dCB0byBvciBwcm9kdWNlZCBhcworb3V0cHV0IGZyb20gdGhlIHByb2dyYW1zIG9mIHRoaXMgUGFja2FnZSBkbyBub3QgYXV0b21hdGljYWxseSBmYWxsCit1bmRlciB0aGUgY29weXJpZ2h0IG9mIHRoaXMgUGFja2FnZSwgYnV0IGJlbG9uZyB0byB3aG9ldmVyIGdlbmVyYXRlZAordGhlbSwgYW5kIG1heSBiZSBzb2xkIGNvbW1lcmNpYWxseSwgYW5kIG1heSBiZSBhZ2dyZWdhdGVkIHdpdGggdGhpcworUGFja2FnZS4gIElmIHN1Y2ggc2NyaXB0cyBvciBsaWJyYXJ5IGZpbGVzIGFyZSBhZ2dyZWdhdGVkIHdpdGggdGhpcworUGFja2FnZSB2aWEgdGhlIHNvLWNhbGxlZCAidW5kdW1wIiBvciAidW5leGVjIiBtZXRob2RzIG9mIHByb2R1Y2luZyBhCitiaW5hcnkgZXhlY3V0YWJsZSBpbWFnZSwgdGhlbiBkaXN0cmlidXRpb24gb2Ygc3VjaCBhbiBpbWFnZSBzaGFsbAorbmVpdGhlciBiZSBjb25zdHJ1ZWQgYXMgYSBkaXN0cmlidXRpb24gb2YgdGhpcyBQYWNrYWdlIG5vciBzaGFsbCBpdAorZmFsbCB1bmRlciB0aGUgcmVzdHJpY3Rpb25zIG9mIFBhcmFncmFwaHMgMyBhbmQgNCwgcHJvdmlkZWQgdGhhdCB5b3UgZG8KK25vdCByZXByZXNlbnQgc3VjaCBhbiBleGVjdXRhYmxlIGltYWdlIGFzIGEgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGlzCitQYWNrYWdlLgorCis3LiBDIHN1YnJvdXRpbmVzIChvciBjb21wYXJhYmx5IGNvbXBpbGVkIHN1YnJvdXRpbmVzIGluIG90aGVyCitsYW5ndWFnZXMpIHN1cHBsaWVkIGJ5IHlvdSBhbmQgbGlua2VkIGludG8gdGhpcyBQYWNrYWdlIGluIG9yZGVyIHRvCitlbXVsYXRlIHN1YnJvdXRpbmVzIGFuZCB2YXJpYWJsZXMgb2YgdGhlIGxhbmd1YWdlIGRlZmluZWQgYnkgdGhpcworUGFja2FnZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoaXMgUGFja2FnZSwgYnV0IGFyZSB0aGUKK2VxdWl2YWxlbnQgb2YgaW5wdXQgYXMgaW4gUGFyYWdyYXBoIDYsIHByb3ZpZGVkIHRoZXNlIHN1YnJvdXRpbmVzIGRvCitub3QgY2hhbmdlIHRoZSBsYW5ndWFnZSBpbiBhbnkgd2F5IHRoYXQgd291bGQgY2F1c2UgaXQgdG8gZmFpbCB0aGUKK3JlZ3Jlc3Npb24gdGVzdHMgZm9yIHRoZSBsYW5ndWFnZS4KKworOC4gQWdncmVnYXRpb24gb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhlIFBhY2thZ2Ugd2l0aCBhIGNvbW1lcmNpYWwKK2Rpc3RyaWJ1dGlvbiBpcyBhbHdheXMgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIHVzZSBvZiB0aGlzIFBhY2thZ2UKK2lzIGVtYmVkZGVkOyB0aGF0IGlzLCB3aGVuIG5vIG92ZXJ0IGF0dGVtcHQgaXMgbWFkZSB0byBtYWtlIHRoaXMgUGFja2FnZWBzCitpbnRlcmZhY2VzIHZpc2libGUgdG8gdGhlIGVuZCB1c2VyIG9mIHRoZSBjb21tZXJjaWFsIGRpc3RyaWJ1dGlvbi4KK1N1Y2ggdXNlIHNoYWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMgYSBkaXN0cmlidXRpb24gb2YgdGhpcyBQYWNrYWdlLgorCis5LiBUaGUgbmFtZSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCitwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworMTAuIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCisgICAgVGhlIEVuZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0RTU1NMIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9EU1NTTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTU5ZGZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9EU1NTTApAQCAtMCwwICsxLDQ5IEBACitDb3B5cmlnaHQKKy0tLS0tLS0tLQorCitDb3B5cmlnaHQgKEMpIDE5OTctMjAwMSBOb3JtYW4gV2Fsc2gKKworVGhlIG9yaWdpbmFsIGluc3BpcmF0aW9uIGZvciB0aGVzZSBzdHlsZXNoZWV0cyBjYW1lIGZyb20gdGhlCit3b3JrIG9mIEpvbiBCb3NhaywgQW5kZXJzIEJlcmdsdW5kLCBUb255IEdyYWhhbSwgVGVycnkgQWxsZW4sCitKYW1lcyBDbGFyaywgYW5kIG1hbnkgb3RoZXJzLiAgSSBhbSBpbmRlYnRlZCB0byB0aGVtIGFuZCB0byB0aGUKK2NvbW11bml0eSBvZiB1c2VycyBvbiBkc3NzbGlzdEBtdWxiZXJyeXRlY2guY29tIGZvciBtYWtpbmcKK3N1YnN0YW50aWFsIGNvbnRyaWJ1dGlvbnMgdG8gdGhpcyB3b3JrIGFuZCBmb3IgYW5zd2VyaW5nIG15IG1hbnkKK3F1ZXN0aW9ucy4KKworVGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSmFkZToKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KK29idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCitmaWxlcyAodGhlIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKK3Jlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCitzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKK2NvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCitpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWVzIG9mIGluZGl2aWR1YWxzCitjcmVkaXRlZCB3aXRoIGNvbnRyaWJ1dGlvbiB0byB0aGlzIHNvZnR3YXJlIHNoYWxsIG5vdCBiZSB1c2VkIGluCithZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyCitkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uCitmcm9tIHRoZSBpbmRpdmlkdWFscyBpbiBxdWVzdGlvbi4KKworQW55IHN0eWxlc2hlZXQgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgdGhhdCBpcyBwdWJsaWNhbGx5CitkaXN0cmlidXRlZCB3aWxsIGJlIGlkZW50aWZpZWQgd2l0aCBhIGRpZmZlcmVudCBuYW1lIGFuZCB0aGUKK3ZlcnNpb24gc3RyaW5ncyBpbiBhbnkgZGVyaXZlZCBTb2Z0d2FyZSB3aWxsIGJlIGNoYW5nZWQgc28gdGhhdAorbm8gcG9zc2liaWxpdHkgb2YgY29uZnVzaW9uIGJldHdlZW4gdGhlIGRlcml2ZWQgcGFja2FnZSBhbmQgdGhpcworU29mdHdhcmUgd2lsbCBleGlzdC4KKworV2FycmFudHkKKy0tLS0tLS0tCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCitPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgTk9STUFOIFdBTFNIIE9SIEFOWSBPVEhFUgorQ09OVFJJQlVUT1IgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCitGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCitPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VDTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VDTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJjOGJlMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRUNMLTEuMApAQCAtMCwwICsxLDU1IEBACisKK1RoaXMgRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UgKHRoZSAiTGljZW5zZSIpIGFwcGxpZXMKK3RvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSAiT3JpZ2luYWwgV29yayIpIHdob3NlIG93bmVyCisodGhlICJMaWNlbnNvciIpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nCit0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIE9yaWdpbmFsIFdvcms6CisKK0NvcHlyaWdodCAoYykgPHllYXI+IDxjb3B5cmlnaHQgaG9sZGVycz4KKworTGljZW5zZWQgdW5kZXIgdGhlIEVkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNlIHZlcnNpb24gMS4wCisKK1RoaXMgT3JpZ2luYWwgV29yaywgaW5jbHVkaW5nIHNvZnR3YXJlLCBzb3VyY2UgY29kZSwgZG9jdW1lbnRzLAorb3Igb3RoZXIgcmVsYXRlZCBpdGVtcywgaXMgYmVpbmcgcHJvdmlkZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIocykKK3N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZS4gQnkKK29idGFpbmluZywgdXNpbmcgYW5kL29yIGNvcHlpbmcgdGhpcyBPcmlnaW5hbCBXb3JrLCB5b3UgYWdyZWUgdGhhdCB5b3UKK2hhdmUgcmVhZCwgdW5kZXJzdGFuZCwgYW5kIHdpbGwgY29tcGx5IHdpdGggdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQKK2NvbmRpdGlvbnMgb2YgdGhlIEVkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNlOgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgYW5kCitzdWJsaWNlbnNlIHRoaXMgT3JpZ2luYWwgV29yayBhbmQgaXRzIGRvY3VtZW50YXRpb24sIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBmb3IgYW55IHB1cnBvc2UsIGFuZCB3aXRob3V0IGZlZSBvciByb3lhbHR5IHRvIHRoZQorY29weXJpZ2h0IGhvbGRlcihzKSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSB0aGUKK2ZvbGxvd2luZyBvbiBBTEwgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIHBvcnRpb25zIHRoZXJlb2YsCitpbmNsdWRpbmcgbW9kaWZpY2F0aW9ucyBvciBkZXJpdmF0aXZlcywgdGhhdCB5b3UgbWFrZToKKworCitUaGUgZnVsbCB0ZXh0IG9mIHRoZSBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZSBpbiBhIGxvY2F0aW9uIHZpZXdhYmxlIHRvCit1c2VycyBvZiB0aGUgcmVkaXN0cmlidXRlZCBvciBkZXJpdmF0aXZlIHdvcmsuCisKKworQW55IHByZS1leGlzdGluZyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgZGlzY2xhaW1lcnMsIG5vdGljZXMsIG9yIHRlcm1zIGFuZAorY29uZGl0aW9ucy4KKworCisKK05vdGljZSBvZiBhbnkgY2hhbmdlcyBvciBtb2RpZmljYXRpb25zIHRvIHRoZSBPcmlnaW5hbCBXb3JrLCBpbmNsdWRpbmcgdGhlCitkYXRlIHRoZSBjaGFuZ2VzIHdlcmUgbWFkZS4KKworCitBbnkgbW9kaWZpY2F0aW9ucyBvZiB0aGUgT3JpZ2luYWwgV29yayBtdXN0IGJlIGRpc3RyaWJ1dGVkIGluIHN1Y2ggYSBtYW5uZXIgYXMKK3RvIGF2b2lkIGFueSBjb25mdXNpb24gd2l0aCB0aGUgT3JpZ2luYWwgV29yayBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKK1RPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCitTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKworVGhlIG5hbWUgYW5kIHRyYWRlbWFya3Mgb2YgY29weXJpZ2h0IGhvbGRlcihzKSBtYXkgTk9UIGJlIHVzZWQKK2luIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIHRoZSBPcmlnaW5hbCBvciBEZXJpdmF0aXZlCitXb3JrcyB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIFRpdGxlIHRvIGNvcHlyaWdodCBpbgordGhlIE9yaWdpbmFsIFdvcmsgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gd2lsbCBhdCBhbGwgdGltZXMKK3JlbWFpbiB3aXRoIHRoZSBjb3B5cmlnaHQgaG9sZGVycy4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FQ0wtMi4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FQ0wtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0Yzk5ZTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VDTC0yLjAKQEAgLTAsMCArMSw5OSBAQAorCitFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyhwbGFpbiB0ZXh0KQorRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UKKworVmVyc2lvbiAyLjAsIEFwcmlsIDIwMDcKKworaHR0cDovL3d3dy5vc2VkdS5vcmcvbGljZW5zZXMvCisKK1RoZSBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZSB2ZXJzaW9uIDIuMCAoIkVDTCIpIGNvbnNpc3RzIG9mIHRoZSBBcGFjaGUgMi4wIGxpY2Vuc2UsIG1vZGlmaWVkIHRvIGNoYW5nZSB0aGUgc2NvcGUgb2YgdGhlIHBhdGVudCBncmFudCBpbiBzZWN0aW9uIDMgdG8gYmUgc3BlY2lmaWMgdG8gdGhlIG5lZWRzIG9mIHRoZSBlZHVjYXRpb24gY29tbXVuaXRpZXMgdXNpbmcgdGhpcyBsaWNlbnNlLiBUaGUgb3JpZ2luYWwgQXBhY2hlIDIuMCBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1RFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgorCisxLiBEZWZpbml0aW9ucy4KKworIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCisKKyJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KKworIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbCBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgorCisiU291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbiBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbCB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorCisiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yayAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucyByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4gc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLCB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZyB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZiB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudCB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLCBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZSBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisKKyJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZCBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KKworMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuCisKK1N1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZSBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgorCiszLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4KKworU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yayBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIEFueSBwYXRlbnQgbGljZW5zZSBncmFudGVkIGhlcmVieSB3aXRoIHJlc3BlY3QgdG8gY29udHJpYnV0aW9ucyBieSBhbiBpbmRpdmlkdWFsIGVtcGxveWVkIGJ5IGFuIGluc3RpdHV0aW9uIG9yIG9yZ2FuaXphdGlvbiBpcyBsaW1pdGVkIHRvIHBhdGVudCBjbGFpbXMgd2hlcmUgdGhlIGluZGl2aWR1YWwgdGhhdCBpcyB0aGUgYXV0aG9yIG9mIHRoZSBXb3JrIGlzIGFsc28gdGhlIGludmVudG9yIG9mIHRoZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2VkLCBhbmQgd2hlcmUgdGhlIG9yZ2FuaXphdGlvbiBvciBpbnN0aXR1dGlvbiBoYXMgdGhlIHJpZ2h0IHRvIGdyYW50IHN1Y2ggbGljZW5zZSB1bmRlciBhcHBsaWNhYmxlIGdyYW50IGFuZCByZXNlYXJjaCBmdW5kaW5nIGFncmVlbWVudHMuIE5vIG90aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCBsaWNlbnNlcyBhcmUgZ3JhbnRlZC4KKworNC4gUmVkaXN0cmlidXRpb24uCisKK1lvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91IG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCitZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCitZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdCBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLCB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cyBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZCB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgorWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvciBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKzUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4KKworVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5IHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworNi4gVHJhZGVtYXJrcy4KKworVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZSBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4KKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2ggQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCis4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4KKworSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5IG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LgorCitXaGlsZSByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LCBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcyBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seSBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZiBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCitFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UgdG8geW91ciB3b3JrCisKK1RvIGFwcGx5IHRoZSBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaAordGhlIGZvbGxvd2luZyBib2lsZXJwbGF0ZSBub3RpY2UsIHdpdGggdGhlIGZpZWxkcyBlbmNsb3NlZCBieQorYnJhY2tldHMgIltdIiByZXBsYWNlZCB3aXRoIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uLgorKERvbmB0IGluY2x1ZGUgdGhlIGJyYWNrZXRzISkgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZQorYXBwcm9wcmlhdGUgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQKK3RoYXQgYSBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24KK3RoZSBzYW1lICJwcmludGVkIHBhZ2UiIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciBlYXNpZXIKK2lkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KKworIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXSBMaWNlbnNlZCB1bmRlciB0aGUKKyBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5Cisgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heQorIG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAKKyBodHRwOi8vd3d3Lm9zZWR1Lm9yZy9saWNlbnNlcy9FQ0wtMi4wCisKKyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3MKKyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRURMLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRURMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2IxZWIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FREwtMS4wCkBAIC0wLDAgKzEsMTMgQEAKK0VjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgLSB2IDEuMAorCitDb3B5cmlnaHQgKGMpIDIwMDcsIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRzIGxpY2Vuc29ycy4KKworQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRUZMLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRUZMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzk5NjA1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FRkwtMS4wCkBAIC0wLDAgKzEsMjUgQEAKKworRWlmZmVsIEZvcnVtIExpY2Vuc2UsIHZlcnNpb24gMQorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIHVzZSwgY29weSwgbW9kaWZ5IGFuZC9vciBkaXN0cmlidXRlCit0aGlzIHBhY2thZ2UsIHByb3ZpZGVkIHRoYXQ6CisKKyAgLSBjb3B5cmlnaHQgbm90aWNlcyBhcmUgcmV0YWluZWQgdW5jaGFuZ2VkCisKKyAgLSBhbnkgZGlzdHJpYnV0aW9uIG9mIHRoaXMgcGFja2FnZSwgd2hldGhlciBtb2RpZmllZCBvciBub3QsCisgICAgaW5jbHVkZXMgdGhpcyBmaWxlCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGFsc28gZ3JhbnRlZCB0byBkaXN0cmlidXRlIGJpbmFyeSBwcm9ncmFtcyB3aGljaAorZGVwZW5kIG9uIHRoaXMgcGFja2FnZSwgcHJvdmlkZWQgdGhhdDoKKworICAtIGlmIHRoZSBiaW5hcnkgcHJvZ3JhbSBkZXBlbmRzIG9uIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzCisgICAgcGFja2FnZSwgeW91IG11c3QgcHVibGljbHkgcmVsZWFzZSB0aGUgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzCisgICAgcGFja2FnZQorCitUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWS4gQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBQQUNLQUdFLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VGTC0yLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VGTC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUzN2Y5MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRUZMLTIuMApAQCAtMCwwICsxLDEyIEBACisKK0VpZmZlbCBGb3J1bSBMaWNlbnNlLCB2ZXJzaW9uIDIKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHBhY2thZ2UsIHByb3ZpZGVkIHRoYXQ6Citjb3B5cmlnaHQgbm90aWNlcyBhcmUgcmV0YWluZWQgdW5jaGFuZ2VkLAorYW55IGRpc3RyaWJ1dGlvbiBvZiB0aGlzIHBhY2thZ2UsIHdoZXRoZXIgbW9kaWZpZWQgb3Igbm90LCBpbmNsdWRlcyB0aGlzIGxpY2Vuc2UgdGV4dC4KK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGFsc28gZ3JhbnRlZCB0byBkaXN0cmlidXRlIGJpbmFyeSBwcm9ncmFtcyB3aGljaCBkZXBlbmQgb24gdGhpcyBwYWNrYWdlLiBJZiB0aGUgYmluYXJ5IHByb2dyYW0gZGVwZW5kcyBvbiBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLCB5b3UgYXJlIGVuY291cmFnZWQgdG8gcHVibGljbHkgcmVsZWFzZSB0aGUgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuCisqKioqKioqKioqKioqKioqKioqKioqKgorCitUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWS4gQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgUEFDS0FHRS4gCisqKioqKioqKioqKioqKioqKioqKioqKgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VQTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VQTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ3NmU1NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRVBMLTEuMApAQCAtMCwwICsxLDcyIEBACisKK0VjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMAorCitUSEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoIkFHUkVFTUVOVCIpLiBBTlkgVVNFLCBSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVGBTIEFDQ0VQVEFOQ0UgT0YgVEhJUyBBR1JFRU1FTlQuCisKKzEuIERFRklOSVRJT05TCisKKyJDb250cmlidXRpb24iIG1lYW5zOgorCithKSBpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiBkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kCitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6CitpKSBjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQKK2lpKSBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07Cit3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gYG9yaWdpbmF0ZXNgIGZyb20gYSBDb250cmlidXRvciBpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbiBzdWNoIENvbnRyaWJ1dG9yYHMgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFByb2dyYW0uCisiQ29udHJpYnV0b3IiIG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uCisKKyJMaWNlbnNlZCBQYXRlbnRzIiBtZWFuIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLgorCisiUHJvZ3JhbSIgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMgZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50LgorCisiUmVjaXBpZW50IiBtZWFucyBhbnlvbmUgd2hvIHJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy4KKworMi4gR1JBTlQgT0YgUklHSFRTCisKK2EpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLgorYikgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0IGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZCBieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbiB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIGFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMgbGljZW5zZWQgaGVyZXVuZGVyLgorYykgUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cyBDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvciB0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudCBmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwgaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50YHMgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS4KK2QpIEVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0IHJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQuCiszLiBSRVFVSVJFTUVOVFMKKworQSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0OgorCithKSBpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kCitiKSBpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6CitpKSBlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kIGNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUgYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOworaWkpIGVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2ggYXMgbG9zdCBwcm9maXRzOworaWlpKSBzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0IENvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQKK2l2KSBzdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kIGluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLgorV2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UgY29kZSBmb3JtOgorCithKSBpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQKK2IpIGEgY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLgorQ29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueSBjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLgorCitFYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZSBvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cyBzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4KKworNC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT04KKworQ29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5IGFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2Ugb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwgbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoIkNvbW1lcmNpYWwgQ29udHJpYnV0b3IiKSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyIENvbnRyaWJ1dG9yICgiSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IiKSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kIGNvc3RzIChjb2xsZWN0aXZlbHkgIkxvc3NlcyIpIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlciBsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0byB0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluIGNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcyByZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIgdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kIGFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlIGluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS4KKworRm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZSBjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcmBzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzIHNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZSBvdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhIGNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuCisKKzUuIE5PIFdBUlJBTlRZCisKK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsIGNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCis2LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBHRU5FUkFMCisKK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorCitJZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudGBzIHBhdGVudChzKSwgdGhlbiBzdWNoIFJlY2lwaWVudGBzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCitBbGwgUmVjaXBpZW50YHMgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZSBwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnRgcyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwgUmVjaXBpZW50YHMgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5IFJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4KKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzIGNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudCBTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YgdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbCBBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0byBzZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QgZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLgorCitUaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMgQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcyBpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRVVEYXRhZ3JpZCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRVVEYXRhZ3JpZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTZlNTA0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FVURhdGFncmlkCkBAIC0wLDAgKzEsMjkgQEAKKworRVUgRGF0YUdyaWQgU29mdHdhcmUgTGljZW5zZQorCitDb3B5cmlnaHQgKGMpIDIwMDEgRVUgRGF0YUdyaWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RoaXMgc29mdHdhcmUgaW5jbHVkZXMgdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSB0byB0aGUgRVUgRGF0YUdyaWQuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBFVSBEYXRhR3JpZCwgcGxlYXNlIHNlZSBodHRwOi8vd3d3LmV1LWRhdGFncmlkLm9yZy8uCisKK0luc3RhbGxhdGlvbiwgdXNlLCByZXByb2R1Y3Rpb24sIGRpc3BsYXksIG1vZGlmaWNhdGlvbiBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBzb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIGFyZSBwZXJtaXR0ZWQuIEFueSBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBsaWNlbnNlIGJ5IHlvdSBvciB5b3VyIHN1Yi1saWNlbnNlZXMgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiB0aGlzIHNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFib3ZlIGxpY2Vuc2Ugc3RhdGVtZW50IGFzIHdlbGwgYXMgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGluIHRoZSBzb2Z0d2FyZSwgdGhlIHVzZXIgZG9jdW1lbnRhdGlvbiBhbmQgYW55IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBzb2Z0d2FyZS4KKworMi4gVGhlIHVzZXIgZG9jdW1lbnRhdGlvbiwgaWYgYW55LCBpbmNsdWRlZCB3aXRoIGEgcmVkaXN0cmlidXRpb24sIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIG5vdGljZToKKyJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBFVSBEYXRhR3JpZCAoaHR0cDovL3d3dy5ldS1kYXRhZ3JpZC5vcmcvKS4iCisKK0FsdGVybmF0aXZlbHksIGlmIHRoYXQgaXMgd2hlcmUgdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhciwgdGhpcyBhY2tub3dsZWRnbWVudCBtdXN0IGJlIHJlcHJvZHVjZWQgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZi4KKworMy4gVGhlIG5hbWVzICJFREciLCAiRURHIFRvb2xraXQiLCAmIzgyMjA7RVUgRGF0YUdyaWQmIzgyMjE7IGFuZCAiRVUgRGF0YUdyaWQgUHJvamVjdCIgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBzb2Z0d2FyZSwgb3IgcHJvZHVjdHMgZGVyaXZlZAordGhlcmVmcm9tLCBleGNlcHQgd2l0aCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gYnkgaGVwLXByb2plY3QtZ3JpZC1lZGctbGljZW5zZUBjZXJuLmNoLgorCis0LiBZb3UgYXJlIHVuZGVyIG5vIG9ibGlnYXRpb24gdG8gcHJvdmlkZSBhbnlvbmUgd2l0aCBhbnkgYnVnIGZpeGVzLCBwYXRjaGVzLCB1cGdyYWRlcyBvciBvdGhlciBtb2RpZmljYXRpb25zLCBlbmhhbmNlbWVudHMgb3IgZGVyaXZhdGl2ZXMgb2YgdGhlIGZlYXR1cmVzLGZ1bmN0aW9uYWxpdHkgb3IgcGVyZm9ybWFuY2Ugb2YgdGhpcyBzb2Z0d2FyZSB0aGF0IHlvdSBtYXkgZGV2ZWxvcC4gSG93ZXZlciwgaWYgeW91IHB1Ymxpc2ggb3IgZGlzdHJpYnV0ZSB5b3VyIG1vZGlmaWNhdGlvbnMsIGVuaGFuY2VtZW50cyBvciBkZXJpdmF0aXZlIHdvcmtzIHdpdGhvdXQgY29udGVtcG9yYW5lb3VzbHkgcmVxdWlyaW5nIHVzZXJzIHRvIGVudGVyIGludG8gYSBzZXBhcmF0ZSB3cml0dGVuIGxpY2Vuc2UgYWdyZWVtZW50LCB0aGVuIHlvdSBhcmUgZGVlbWVkIHRvIGhhdmUgZ3JhbnRlZCBwYXJ0aWNpcGFudHMgaW4gdGhlIEVVIERhdGFHcmlkIGEgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHBlcnBldHVhbCBsaWNlbnNlIHRvIGluc3RhbGwsIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBtb2RpZnksIHJlZGlzdHJpYnV0ZSBhbmQgc3ViLWxpY2Vuc2UgeW91ciBtb2RpZmljYXRpb25zLCBlbmhhbmNlbWVudHMgb3IgZGVyaXZhdGl2ZSB3b3Jrcywgd2hldGhlciBpbiBiaW5hcnkgb3Igc291cmNlIGNvZGUgZm9ybSwgdW5kZXIgdGhlIGxpY2Vuc2UgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMuCisKKzUuIERJU0NMQUlNRVIgCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEVVIERBVEFHUklEIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIE9GIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVVNFIEFSRSBESVNDTEFJTUVELiBUSEUgRVUgREFUQUdSSUQgQU5EIENPTlRSSUJVVE9SUyBNQUtFIE5PIFJFUFJFU0VOVEFUSU9OIFRIQVQgVEhFIFNPRlRXQVJFLCBNT0RJRklDQVRJT05TLCBFTkhBTkNFTUVOVFMgT1IgREVSSVZBVElWRSBXT1JLUyBUSEVSRU9GLCBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgUEFURU5ULCBDT1BZUklHSFQsIFRSQURFIFNFQ1JFVCBPUiBPVEhFUiBQUk9QUklFVEFSWSBSSUdIVC4gCisKKzYuIExJTUlUQVRJT04gT0YgTElBQklMSVRZCisKK1RIRSBFVSBEQVRBR1JJRCBBTkQgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgTk8gTElBQklMSVRZIFRPIExJQ0VOU0VFIE9SIE9USEVSIFBFUlNPTlMgRk9SIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIEVYRU1QTEFSWSwgT1IgUFVOSVRJVkUgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLCBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBQUk9EVUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRVVQTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VVUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZWNiZmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VVUEwtMS4wCkBAIC0wLDAgKzEsMTg0IEBACisKK0V1cm9wZWFuIFVuaW9uIFB1YmxpYyBMaWNlbmNlIAorVi4xLjAgCitFVVBMICYjMTY5OyB0aGUgRXVyb3BlYW4gQ29tbXVuaXR5IDIwMDcgCitUaGlzIEV1cm9wZWFuIFVuaW9uIFB1YmxpYyBMaWNlbmNlICh0aGUgJiM4MjIwO0VVUEwmIzgyMjE7KSBhcHBsaWVzIHRvIHRoZSBXb3JrIG9yIFNvZnR3YXJlIChhcyAKK2RlZmluZWQgYmVsb3cpIHdoaWNoIGlzIHByb3ZpZGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2VuY2UuIEFueSB1c2Ugb2YgdGhlIFdvcmssIG90aGVyIAordGhhbiBhcyBhdXRob3Jpc2VkIHVuZGVyIHRoaXMgTGljZW5jZSBpcyBwcm9oaWJpdGVkICh0byB0aGUgZXh0ZW50IHN1Y2ggdXNlIGlzIGNvdmVyZWQgYnkgYSByaWdodCAKK29mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBXb3JrKS4gCitUaGUgT3JpZ2luYWwgV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbmNlIHdoZW4gdGhlIExpY2Vuc29yIChhcyBkZWZpbmVkIAorYmVsb3cpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgCitPcmlnaW5hbCBXb3JrOiAKK0xpY2Vuc2VkIHVuZGVyIHRoZSBFVVBMIFYuMS4wIAorb3IgaGFzIGV4cHJlc3NlZCBieSBhbnkgb3RoZXIgbWVhbiBoaXMgd2lsbGluZ25lc3MgdG8gbGljZW5zZSB1bmRlciB0aGUgRVVQTC4gCisxLiBEZWZpbml0aW9ucworSW4gdGhpcyBMaWNlbmNlLCB0aGUgZm9sbG93aW5nIHRlcm1zIGhhdmUgdGhlIGZvbGxvd2luZyBtZWFuaW5nOiAKKyYjODcyMjsgVGhlIExpY2VuY2U6IHRoaXMgTGljZW5jZS4gCismIzg3MjI7IFRoZSBPcmlnaW5hbCBXb3JrIG9yIHRoZSBTb2Z0d2FyZTogdGhlIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGFuZC9vciBjb21tdW5pY2F0ZWQgYnkgCit0aGUgTGljZW5zb3IgdW5kZXIgdGhpcyBMaWNlbmNlLCBhdmFpbGFibGUgYXMgU291cmNlIENvZGUgYW5kIGFsc28gYXMgRXhlY3V0YWJsZSAKK0NvZGUgYXMgdGhlIGNhc2UgbWF5IGJlLiAKKyYjODcyMjsgRGVyaXZhdGl2ZSBXb3JrczogdGhlIHdvcmtzIG9yIHNvZnR3YXJlIHRoYXQgY291bGQgYmUgY3JlYXRlZCBieSB0aGUgTGljZW5zZWUsIGJhc2VkIAordXBvbiB0aGUgT3JpZ2luYWwgV29yayBvciBtb2RpZmljYXRpb25zIHRoZXJlb2YuIFRoaXMgTGljZW5jZSBkb2VzIG5vdCBkZWZpbmUgdGhlIAorZXh0ZW50IG9mIG1vZGlmaWNhdGlvbiBvciBkZXBlbmRlbmNlIG9uIHRoZSBPcmlnaW5hbCBXb3JrIHJlcXVpcmVkIGluIG9yZGVyIHRvIAorY2xhc3NpZnkgYSB3b3JrIGFzIGEgRGVyaXZhdGl2ZSBXb3JrOyB0aGlzIGV4dGVudCBpcyBkZXRlcm1pbmVkIGJ5IGNvcHlyaWdodCBsYXcgCithcHBsaWNhYmxlIGluIHRoZSBjb3VudHJ5IG1lbnRpb25lZCBpbiBBcnRpY2xlIDE1LiAgCismIzg3MjI7IFRoZSBXb3JrOiB0aGUgT3JpZ2luYWwgV29yayBhbmQvb3IgaXRzIERlcml2YXRpdmUgV29ya3MuIAorJiM4NzIyOyBUaGUgU291cmNlIENvZGU6IHRoZSBodW1hbi1yZWFkYWJsZSBmb3JtIG9mIHRoZSBXb3JrIHdoaWNoIGlzIHRoZSBtb3N0IAorY29udmVuaWVudCBmb3IgcGVvcGxlIHRvIHN0dWR5IGFuZCBtb2RpZnkuIAorJiM4NzIyOyBUaGUgRXhlY3V0YWJsZSBDb2RlOiBhbnkgY29kZSB3aGljaCBoYXMgZ2VuZXJhbGx5IGJlZW4gY29tcGlsZWQgYW5kIHdoaWNoIGlzIAorbWVhbnQgdG8gYmUgaW50ZXJwcmV0ZWQgYnkgYSBjb21wdXRlciBhcyBhIHByb2dyYW0uIAorJiM4NzIyOyBUaGUgTGljZW5zb3I6IHRoZSBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbiB0aGF0ICBkaXN0cmlidXRlcyBhbmQvb3IgY29tbXVuaWNhdGVzIHRoZSAKK1dvcmsgdW5kZXIgdGhlIExpY2VuY2UuIAorJiM4NzIyOyBDb250cmlidXRvcihzKTogYW55IG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uIHdobyBtb2RpZmllcyB0aGUgV29yayB1bmRlciB0aGUgCitMaWNlbmNlLCBvciBvdGhlcndpc2UgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLiAKKyYjODcyMjsgVGhlIExpY2Vuc2VlIG9yICYjODIyMDtZb3UmIzgyMjE7OiAgYW55IG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uIHdobyBtYWtlcyBhbnkgdXNhZ2Ugb2YgdGhlIAorU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbmNlLiAmIzg3MjI7IERpc3RyaWJ1dGlvbiBhbmQvb3IgQ29tbXVuaWNhdGlvbjogYW55IGFjdCBvZiBzZWxsaW5nLCAgZ2l2aW5nLCBsZW5kaW5nLCByZW50aW5nLCAKK2Rpc3RyaWJ1dGluZywgY29tbXVuaWNhdGluZywgdHJhbnNtaXR0aW5nLCBvciBvdGhlcndpc2UgbWFraW5nIGF2YWlsYWJsZSwgb24tbGluZSBvciAKK29mZi1saW5lLCBjb3BpZXMgb2YgdGhlIFdvcmsgYXQgdGhlIGRpc3Bvc2FsIG9mIGFueSBvdGhlciBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbi4gCisyLiBTY29wZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgdGhlIExpY2VuY2UKK1RoZSBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsICByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHN1Yi1saWNlbnNhYmxlIAorbGljZW5jZSB0byBkbyB0aGUgZm9sbG93aW5nLCBmb3IgdGhlIGR1cmF0aW9uIG9mIGNvcHlyaWdodCB2ZXN0ZWQgaW4gdGhlIE9yaWdpbmFsIFdvcms6IAorJiM4NzIyOyB1c2UgdGhlIFdvcmsgaW4gYW55IGNpcmN1bXN0YW5jZSBhbmQgZm9yIGFsbCB1c2FnZSwgCismIzg3MjI7IHJlcHJvZHVjZSB0aGUgV29yaywgCismIzg3MjI7IG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yaywgYW5kIG1ha2UgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBXb3JrLCAKKyYjODcyMjsgY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYywgaW5jbHVkaW5nIHRoZSByaWdodCB0byBtYWtlIGF2YWlsYWJsZSBvciBkaXNwbGF5IHRoZSBXb3JrIAorb3IgY29waWVzIHRoZXJlb2YgdG8gdGhlIHB1YmxpYyBhbmQgcGVyZm9ybSBwdWJsaWNseSwgYXMgdGhlIGNhc2UgbWF5IGJlLCB0aGUgV29yaywgCismIzg3MjI7IGRpc3RyaWJ1dGUgdGhlIFdvcmsgb3IgY29waWVzIHRoZXJlb2YsIAorJiM4NzIyOyBsZW5kIGFuZCByZW50IHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mLCAKKyYjODcyMjsgc3ViLWxpY2Vuc2UgcmlnaHRzIGluIHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mLiAKK1Rob3NlIHJpZ2h0cyBjYW4gYmUgZXhlcmNpc2VkIG9uIGFueSBtZWRpYSwgIHN1cHBvcnRzIGFuZCBmb3JtYXRzLCB3aGV0aGVyIG5vdyBrbm93biBvciAKK2xhdGVyIGludmVudGVkLCBhcyBmYXIgYXMgdGhlIGFwcGxpY2FibGUgbGF3IHBlcm1pdHMgc28uIAorSW4gdGhlIGNvdW50cmllcyB3aGVyZSBtb3JhbCByaWdodHMgYXBwbHksIHRoZSBMaWNlbnNvciB3YWl2ZXMgaGlzIHJpZ2h0IHRvIGV4ZXJjaXNlIGhpcyBtb3JhbCAKK3JpZ2h0IHRvIHRoZSBleHRlbnQgYWxsb3dlZCBieSBsYXcgaW4gb3JkZXIgdG8gbWFrZSBlZmZlY3RpdmUgdGhlIGxpY2VuY2Ugb2YgdGhlIGVjb25vbWljIHJpZ2h0cyAKK2hlcmUgYWJvdmUgbGlzdGVkLiAKK1RoZSBMaWNlbnNvciBncmFudHMgdG8gdGhlIExpY2Vuc2VlIHJveWFsdHktZnJlZSwgbm9uIGV4Y2x1c2l2ZSB1c2FnZSByaWdodHMgdG8gYW55IHBhdGVudHMgCitoZWxkIGJ5IHRoZSBMaWNlbnNvciwgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSB1c2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIG9uIHRoZSBXb3JrIAordW5kZXIgdGhpcyBMaWNlbmNlLiAKKzMuIENvbW11bmljYXRpb24gb2YgdGhlIFNvdXJjZSBDb2RlCitUaGUgTGljZW5zb3IgbWF5IHByb3ZpZGUgdGhlIFdvcmsgZWl0aGVyIGluIGl0cyBTb3VyY2UgQ29kZSBmb3JtLCBvciBhcyBFeGVjdXRhYmxlIENvZGUuIElmIAordGhlIFdvcmsgaXMgcHJvdmlkZWQgYXMgRXhlY3V0YWJsZSBDb2RlLCAgdGhlIExpY2Vuc29yIHByb3ZpZGVzIGluIGFkZGl0aW9uIGEgbWFjaGluZXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBXb3JrIHRoYXQgdGhlIAorTGljZW5zb3IgZGlzdHJpYnV0ZXMgb3IgaW5kaWNhdGVzLCBpbiBhIG5vdGljZSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgYXR0YWNoZWQgdG8gdGhlIAorV29yaywgYSByZXBvc2l0b3J5IHdoZXJlIHRoZSBTb3VyY2UgQ29kZSBpcyBlYXNpbHkgYW5kIGZyZWVseSBhY2Nlc3NpYmxlIGZvciBhcyBsb25nIGFzIHRoZSAKK0xpY2Vuc29yIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIGFuZC9vciBjb21tdW5pY2F0ZSB0aGUgV29yay4gCis0LiBMaW1pdGF0aW9ucyBvbiBjb3B5cmlnaHQKK05vdGhpbmcgaW4gdGhpcyBMaWNlbmNlIGlzIGludGVuZGVkIHRvIGRlcHJpdmUgdGhlIExpY2Vuc2VlIG9mIHRoZSBiZW5lZml0cyBmcm9tIGFueSBleGNlcHRpb24gCitvciBsaW1pdGF0aW9uIHRvIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSByaWdodHMgb3duZXJzIGluIHRoZSBPcmlnaW5hbCBXb3JrIG9yIFNvZnR3YXJlLCBvZiAKK3RoZSBleGhhdXN0aW9uIG9mIHRob3NlIHJpZ2h0cyBvciBvZiBvdGhlciBhcHBsaWNhYmxlIGxpbWl0YXRpb25zIHRoZXJldG8uIAorNS4gT2JsaWdhdGlvbnMgb2YgdGhlIExpY2Vuc2VlCitUaGUgZ3JhbnQgb2YgdGhlIHJpZ2h0cyBtZW50aW9uZWQgYWJvdmUgaXMgc3ViamVjdCB0byBzb21lIHJlc3RyaWN0aW9ucyBhbmQgb2JsaWdhdGlvbnMgCitpbXBvc2VkIG9uIHRoZSBMaWNlbnNlZS4gVGhvc2Ugb2JsaWdhdGlvbnMgYXJlIHRoZSBmb2xsb3dpbmc6IEF0dHJpYnV0aW9uIHJpZ2h0OiB0aGUgTGljZW5zZWUgc2hhbGwga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCwgcGF0ZW50IG9yIHRyYWRlbWFya3Mgbm90aWNlcyAKK2FuZCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoZSBMaWNlbmNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBUaGUgTGljZW5zZWUgbXVzdCAKK2luY2x1ZGUgYSBjb3B5IG9mIHN1Y2ggbm90aWNlcyBhbmQgYSBjb3B5IG9mIHRoZSBMaWNlbmNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBoZS9zaGUgCitkaXN0cmlidXRlcyBhbmQvb3IgY29tbXVuaWNhdGVzLiBUaGUgTGljZW5zZWUgbXVzdCBjYXVzZSBhbnkgRGVyaXZhdGl2ZSBXb3JrIHRvIGNhcnJ5IAorcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHRoZSBXb3JrIGhhcyBiZWVuIG1vZGlmaWVkIGFuZCB0aGUgZGF0ZSBvZiBtb2RpZmljYXRpb24uIAorQ29weWxlZnQgY2xhdXNlOiBJZiB0aGUgTGljZW5zZWUgZGlzdHJpYnV0ZXMgYW5kL29yICBjb21tdW5pY2F0ZXMgY29waWVzIG9mIHRoZSBPcmlnaW5hbCAKK1dvcmtzIG9yIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yaywgdGhpcyBEaXN0cmlidXRpb24gYW5kL29yIAorQ29tbXVuaWNhdGlvbiB3aWxsIGJlIGRvbmUgdW5kZXIgdGhlIHRlcm1zICBvZiB0aGlzIExpY2VuY2UuIFRoZSBMaWNlbnNlZSAoYmVjb21pbmcgCitMaWNlbnNvcikgY2Fubm90IG9mZmVyIG9yIGltcG9zZSBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciAgY29uZGl0aW9ucyBvbiB0aGUgV29yayBvciAKK0Rlcml2YXRpdmUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5jZS4gCitDb21wYXRpYmlsaXR5IGNsYXVzZTogSWYgdGhlIExpY2Vuc2VlIERpc3RyaWJ1dGVzIGFuZC9vciBDb21tdW5pY2F0ZXMgRGVyaXZhdGl2ZSBXb3JrcyBvciAKK2NvcGllcyB0aGVyZW9mIGJhc2VkIHVwb24gYm90aCB0aGUgT3JpZ2luYWwgV29yayBhbmQgYW5vdGhlciB3b3JrIGxpY2Vuc2VkIHVuZGVyIGEgCitDb21wYXRpYmxlIExpY2VuY2UsIHRoaXMgRGlzdHJpYnV0aW9uIGFuZC9vciBDb21tdW5pY2F0aW9uIGNhbiBiZSBkb25lIHVuZGVyIHRoZSB0ZXJtcyBvZiAKK3RoaXMgQ29tcGF0aWJsZSBMaWNlbmNlLiBGb3IgdGhlIHNha2Ugb2YgdGhpcyBjbGF1c2UsICYjODIyMDtDb21wYXRpYmxlIExpY2VuY2UmIzgyMjE7IHJlZmVycyB0byB0aGUgCitsaWNlbmNlcyBsaXN0ZWQgaW4gdGhlIGFwcGVuZGl4IGF0dGFjaGVkIHRvICB0aGlzIExpY2VuY2UuIFNob3VsZCB0aGUgIExpY2Vuc2VlJiM4MjE3O3Mgb2JsaWdhdGlvbnMgCit1bmRlciB0aGUgQ29tcGF0aWJsZSBMaWNlbmNlIGNvbmZsaWN0IHdpdGggaGlzL2hlciAgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbmNlLCB0aGUgCitvYmxpZ2F0aW9ucyBvZiB0aGUgQ29tcGF0aWJsZSBMaWNlbmNlIHNoYWxsIHByZXZhaWwuICAKK1Byb3Zpc2lvbiBvZiBTb3VyY2UgQ29kZTogV2hlbiBkaXN0cmlidXRpbmcgYW5kL29yIGNvbW11bmljYXRpbmcgY29waWVzIG9mIHRoZSBXb3JrLCB0aGUgCitMaWNlbnNlZSB3aWxsIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9yICBpbmRpY2F0ZSBhIHJlcG9zaXRvcnkgCit3aGVyZSB0aGlzIFNvdXJjZSB3aWxsIGJlIGVhc2lseSBhbmQgZnJlZWx5IGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyB0aGUgTGljZW5zZWUgY29udGludWVzIHRvIAorZGlzdHJpYnV0ZSBhbmQvb3IgY29tbXVuaWNhdGUgdGhlIFdvcmsuIAorTGVnYWwgUHJvdGVjdGlvbjogVGhpcyBMaWNlbmNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgCitzZXJ2aWNlIG1hcmtzLCBvciBuYW1lcyBvZiB0aGUgTGljZW5zb3IsIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSAKK2luIGRlc2NyaWJpbmcgdGhlIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGNvcHlyaWdodCBub3RpY2UuIAorNi4gQ2hhaW4gb2YgQXV0aG9yc2hpcAorVGhlIG9yaWdpbmFsIExpY2Vuc29yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiB0aGUgT3JpZ2luYWwgV29yayBncmFudGVkIGhlcmV1bmRlciBpcyAKK293bmVkIGJ5IGhpbS9oZXIgb3IgbGljZW5zZWQgdG8gaGltL2hlciBhbmQgdGhhdCBoZS9zaGUgaGFzIHRoZSBwb3dlciBhbmQgYXV0aG9yaXR5IHRvIGdyYW50IAordGhlIExpY2VuY2UuIAorRWFjaCBDb250cmlidXRvciB3YXJyYW50cyB0aGF0IHRoZSBjb3B5cmlnaHQgaW4gdGhlIG1vZGlmaWNhdGlvbnMgaGUvc2hlIGJyaW5ncyB0byB0aGUgV29yayAKK2FyZSBvd25lZCBieSBoaW0vaGVyIG9yIGxpY2Vuc2VkIHRvIGhpbS9oZXIgYW5kIHRoYXQgaGUvc2hlIGhhcyB0aGUgcG93ZXIgYW5kIGF1dGhvcml0eSB0byAKK2dyYW50IHRoZSBMaWNlbmNlLiAKK0VhY2ggdGltZSBZb3UsIGFzIGEgTGljZW5zZWUsICByZWNlaXZlIHRoZSBXb3JrLCB0aGUgb3JpZ2luYWwgTGljZW5zb3IgYW5kIHN1YnNlcXVlbnQgCitDb250cmlidXRvcnMgZ3JhbnQgWW91IGEgbGljZW5jZSB0byB0aGVpciBjb250cmlidXRpb25zIHRvIHRoZSBXb3JrLCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyAKK0xpY2VuY2UuIAorNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eQorVGhlIFdvcmsgaXMgYSB3b3JrIGluIHByb2dyZXNzLCB3aGljaCBpcyBjb250aW51b3VzbHkgaW1wcm92ZWQgYnkgbnVtZXJvdXMgY29udHJpYnV0b3JzLiBJdCAKK2lzIG5vdCBhIGZpbmlzaGVkIHdvcmsgYW5kIG1heSB0aGVyZWZvcmUgY29udGFpbiBkZWZlY3RzIG9yICYjODIyMDtidWdzJiM4MjIxOyBpbmhlcmVudCB0byB0aGlzIHR5cGUgb2YgCitzb2Z0d2FyZSBkZXZlbG9wbWVudC4gCitGb3IgdGhlIGFib3ZlIHJlYXNvbiwgdGhlIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhlIExpY2VuY2Ugb24gYW4gJiM4MjIwO2FzIGlzJiM4MjIxOyBiYXNpcyBhbmQgd2l0aG91dCAKK3dhcnJhbnRpZXMgb2YgYW55IGtpbmQgY29uY2VybmluZyB0aGUgV29yaywgIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gbWVyY2hhbnRhYmlsaXR5LCAKK2ZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLCBhYnNlbmNlIG9mIGRlZmVjdHMgb3IgZXJyb3JzLCBhY2N1cmFjeSwgbm9uLWluZnJpbmdlbWVudCBvZiAKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3RoZXIgdGhhbiBjb3B5cmlnaHQgYXMgc3RhdGVkIGluIEFydGljbGUgNiBvZiB0aGlzIExpY2VuY2UuIFRoaXMgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBpcyBhbiBlc3NlbnRpYWwgcGFydCBvZiB0aGUgTGljZW5jZSBhbmQgYSBjb25kaXRpb24gZm9yIHRoZSBncmFudCBvZiAKK2FueSByaWdodHMgdG8gdGhlIFdvcmsuIAorOC4gRGlzY2xhaW1lciBvZiBMaWFiaWxpdHkKK0V4Y2VwdCBpbiB0aGUgY2FzZXMgb2Ygd2lsZnVsIG1pc2NvbmR1Y3Qgb3IgZGFtYWdlcyBkaXJlY3RseSBjYXVzZWQgdG8gbmF0dXJhbCBwZXJzb25zLCB0aGUgCitMaWNlbnNvciB3aWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55IGRpcmVjdCBvciBpbmRpcmVjdCwgbWF0ZXJpYWwgb3IgbW9yYWwsIGRhbWFnZXMgb2YgCithbnkga2luZCwgYXJpc2luZyBvdXQgb2YgIHRoZSBMaWNlbmNlIG9yIG9mIHRoZSB1c2Ugb2YgdGhlIFdvcmssIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIAorZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgbG9zcyBvZiBkYXRhIG9yIAorYW55IGNvbW1lcmNpYWwgZGFtYWdlLCBldmVuIGlmIHRoZSBMaWNlbnNvciBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSAgcG9zc2liaWxpdHkgb2Ygc3VjaCAKK2RhbWFnZS4gSG93ZXZlciwgdGhlIExpY2Vuc29yIHdpbGwgYmUgbGlhYmxlIHVuZGVyIHN0YXR1dG9yeSBwcm9kdWN0IGxpYWJpbGl0eSBsYXdzIGFzIGZhciBzdWNoIAorbGF3cyBhcHBseSB0byB0aGUgV29yay4gCis5LiBBZGRpdGlvbmFsIGFncmVlbWVudHMKK1doaWxlIGRpc3RyaWJ1dGluZyB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzLCBZb3UgbWF5IGNob29zZSB0byBjb25jbHVkZSBhbiAKK2FkZGl0aW9uYWwgYWdyZWVtZW50IHRvIG9mZmVyLCBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSAgb2Ygc3VwcG9ydCwgd2FycmFudHksIAoraW5kZW1uaXR5LCBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHNlcnZpY2VzIGNvbnNpc3RlbnQgd2l0aCB0aGlzIExpY2VuY2UuIAorSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkgb24geW91ciBvd24gYmVoYWxmIGFuZCBvbiB5b3VyIAorc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZiBvZiB0aGUgb3JpZ2luYWwgTGljZW5zb3Igb3IgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiAKK1lvdSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCAKK2J5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHRoZSBmYWN0IFlvdSBoYXZlIGFjY2VwdGVkIGFueSBzdWNoIAord2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuIAorMTAuIEFjY2VwdGFuY2Ugb2YgdGhlIExpY2VuY2UKK1RoZSBwcm92aXNpb25zIG9mIHRoaXMgTGljZW5jZSBjYW4gYmUgYWNjZXB0ZWQgYnkgY2xpY2tpbmcgb24gYW4gaWNvbiAmIzgyMjA7SSBhZ3JlZSYjODIyMTsgcGxhY2VkIHVuZGVyIAordGhlIGJvdHRvbSBvZiBhIHdpbmRvdyBkaXNwbGF5aW5nIHRoZSB0ZXh0IG9mIHRoaXMgTGljZW5jZSBvciBieSBhZmZpcm1pbmcgY29uc2VudCBpbiBhbnkgCitvdGhlciBzaW1pbGFyIHdheSwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBydWxlcyBvZiBhcHBsaWNhYmxlIGxhdy4gQ2xpY2tpbmcgb24gdGhhdCBpY29uIAoraW5kaWNhdGVzIHlvdXIgY2xlYXIgYW5kIGlycmV2b2NhYmxlIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbmNlIGFuZCAgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgCitjb25kaXRpb25zLiAgCitTaW1pbGFybHksIHlvdSBpcnJldm9jYWJseSBhY2NlcHQgdGhpcyBMaWNlbmNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGJ5IAorZXhlcmNpc2luZyBhbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IEFydGljbGUgMiBvZiB0aGlzIExpY2VuY2UsIHN1Y2ggYXMgdGhlIHVzZSBvZiB0aGUgV29yaywgCit0aGUgY3JlYXRpb24gYnkgWW91IG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIHRoZSBEaXN0cmlidXRpb24gYW5kL29yIENvbW11bmljYXRpb24gYnkgWW91IAorb2YgdGhlIFdvcmsgb3IgY29waWVzIHRoZXJlb2YuICAKKzExLiBJbmZvcm1hdGlvbiB0byB0aGUgcHVibGljCitJbiBjYXNlIG9mIGFueSBEaXN0cmlidXRpb24gYW5kL29yIENvbW11bmljYXRpb24gb2YgdGhlIFdvcmsgYnkgbWVhbnMgb2YgZWxlY3Ryb25pYyAKK2NvbW11bmljYXRpb24gYnkgWW91IChmb3IgZXhhbXBsZSwgYnkgb2ZmZXJpbmcgdG8gZG93bmxvYWQgdGhlIFdvcmsgZnJvbSBhIHJlbW90ZSAKK2xvY2F0aW9uKSB0aGUgZGlzdHJpYnV0aW9uIGNoYW5uZWwgb3IgbWVkaWEgKGZvciBleGFtcGxlLCBhIHdlYnNpdGUpIG11c3QgYXQgbGVhc3QgcHJvdmlkZSB0byAKK3RoZSBwdWJsaWMgdGhlIGluZm9ybWF0aW9uIHJlcXVlc3RlZCBieSB0aGUgYXBwbGljYWJsZSBsYXcgcmVnYXJkaW5nIHRoZSBpZGVudGlmaWNhdGlvbiBhbmQgCithZGRyZXNzIG9mIHRoZSBMaWNlbnNvciwgdGhlIExpY2VuY2UgYW5kIHRoZSB3YXkgaXQgbWF5IGJlIGFjY2Vzc2libGUsIGNvbmNsdWRlZCwgc3RvcmVkIGFuZCAKK3JlcHJvZHVjZWQgYnkgdGhlIExpY2Vuc2VlLiAKKzEyLiBUZXJtaW5hdGlvbiBvZiB0aGUgTGljZW5jZQorVGhlIExpY2VuY2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgCit0aGUgTGljZW5zZWUgb2YgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbmNlLiAKK1N1Y2ggYSB0ZXJtaW5hdGlvbiB3aWxsIG5vdCB0ZXJtaW5hdGUgdGhlIGxpY2VuY2VzIG9mIGFueSBwZXJzb24gd2hvIGhhcyByZWNlaXZlZCB0aGUgV29yayAKK2Zyb20gdGhlIExpY2Vuc2VlIHVuZGVyIHRoZSBMaWNlbmNlLCBwcm92aWRlZCBzdWNoIHBlcnNvbnMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIAordGhlIExpY2VuY2UuICAxMy4gTWlzY2VsbGFuZW91cworV2l0aG91dCBwcmVqdWRpY2Ugb2YgQXJ0aWNsZSA5IGFib3ZlLCB0aGUgTGljZW5jZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgYmV0d2VlbiAKK3RoZSBQYXJ0aWVzIGFzIHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmV1bmRlci4gCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoZSBMaWNlbmNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgdGhpcyB3aWxsIG5vdCAKK2FmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIExpY2VuY2UgYXMgYSB3aG9sZS4gU3VjaCBwcm92aXNpb24gd2lsbCBiZSAKK2NvbnN0cnVlZCBhbmQvb3IgcmVmb3JtZWQgc28gYXMgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgdmFsaWQgYW5kIGVuZm9yY2VhYmxlLiAKK1RoZSBFdXJvcGVhbiBDb21taXNzaW9uIG1heSBwdXQgaW50byBmb3JjZSB0cmFuc2xhdGlvbnMgYW5kL29yIGJpbmRpbmcgbmV3IHZlcnNpb25zIG9mIAordGhpcyBMaWNlbmNlLCBzbyBmYXIgdGhpcyBpcyByZXF1aXJlZCBhbmQgcmVhc29uYWJsZS4gTmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbmNlIHdpbGwgYmUgCitwdWJsaXNoZWQgd2l0aCBhIHVuaXF1ZSB2ZXJzaW9uIG51bWJlci4gVGhlIG5ldyB2ZXJzaW9uIG9mIHRoZSBMaWNlbmNlIGJlY29tZXMgYmluZGluZyBmb3IgCitZb3UgYXMgc29vbiBhcyBZb3UgYmVjb21lIGF3YXJlIG9mIGl0cyBwdWJsaWNhdGlvbi4gCisxNC4gSnVyaXNkaWN0aW9uCitBbnkgbGl0aWdhdGlvbiByZXN1bHRpbmcgZnJvbSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBMaWNlbnNlLCBhcmlzaW5nIGJldHdlZW4gdGhlIEV1cm9wZWFuIAorQ29tbWlzc2lvbiwgYXMgYSBMaWNlbnNvciwgYW5kIGFueSBMaWNlbnNlZSwgd2lsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIENvdXJ0IAorb2YgSnVzdGljZSBvZiB0aGUgRXVyb3BlYW4gQ29tbXVuaXRpZXMsIGFzIGxhaWQgZG93biBpbiBhcnRpY2xlIDIzOCBvZiB0aGUgVHJlYXR5IGVzdGFibGlzaGluZyAKK3RoZSBFdXJvcGVhbiBDb21tdW5pdHkuIAorQW55IGxpdGlnYXRpb24gYXJpc2luZyBiZXR3ZWVuIFBhcnRpZXMsIG90aGVyICB0aGFuIHRoZSBFdXJvcGVhbiBDb21taXNzaW9uLCBhbmQgcmVzdWx0aW5nIAorZnJvbSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBMaWNlbnNlLCB3aWxsIGJlIHN1YmplY3QgdG8gdGhlIGV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24gb2YgdGhlIAorY29tcGV0ZW50IGNvdXJ0IHdoZXJlIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5IGJ1c2luZXNzLiAKKzE1LiBBcHBsaWNhYmxlIExhdworVGhpcyBMaWNlbmNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXcgb2YgdGhlIEV1cm9wZWFuIFVuaW9uIGNvdW50cnkgd2hlcmUgdGhlIExpY2Vuc29yIAorcmVzaWRlcyBvciBoYXMgaGlzIHJlZ2lzdGVyZWQgb2ZmaWNlLiAKK1RoaXMgbGljZW5jZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgQmVsZ2lhbiBsYXcgaWY6IAorJiM4NzIyOyBhIGxpdGlnYXRpb24gYXJpc2VzIGJldHdlZW4gdGhlIEV1cm9wZWFuIENvbW1pc3Npb24sIGFzIGEgTGljZW5zb3IsIGFuZCBhbnkgCitMaWNlbnNlZTsgCismIzg3MjI7IHRoZSBMaWNlbnNvciwgb3RoZXIgdGhhbiB0aGUgRXVyb3BlYW4gQ29tbWlzc2lvbiwgaGFzIG5vIHJlc2lkZW5jZSBvciByZWdpc3RlcmVkIAorb2ZmaWNlIGluc2lkZSBhIEV1cm9wZWFuIFVuaW9uIGNvdW50cnkuICAKKyA9PT1BcHBlbmRpeAorJiM4MjIwO0NvbXBhdGlibGUgTGljZW5jZXMmIzgyMjE7IGFjY29yZGluZyB0byBhcnRpY2xlIDUgRVVQTCBhcmU6IAorJiM4NzIyOyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHYuIDIgCismIzg3MjI7IE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMKSB2LiAyLjEsIHYuIDMuMCAKKyYjODcyMjsgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYuIDEuMCAKKyYjODcyMjsgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAxLjAgCismIzg3MjI7IENlY2lsbCB2LiAyLjAgCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRVVQTC0xLjEgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VVUEwtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMWQ4NGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VVUEwtMS4xCkBAIC0wLDAgKzEsMjA0IEBACisKK0V1cm9wZWFuIFVuaW9uIFB1YmxpYyBMaWNlbmNlCitWLiAxLjEKK0VVUEwgJiMxNjk7IHRoZSBFdXJvcGVhbiBDb21tdW5pdHkgMjAwNworVGhpcyBFdXJvcGVhbiBVbmlvbiBQdWJsaWMgTGljZW5jZSAodGhlICYjODIyMDtFVVBMJiM4MjIxOykgYXBwbGllcyB0byB0aGUgV29yayBvciBTb2Z0d2FyZQorKGFzIGRlZmluZWQgYmVsb3cpIHdoaWNoIGlzIHByb3ZpZGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2VuY2UuIEFueSB1c2Ugb2YgdGhlCitXb3JrLCBvdGhlciB0aGFuIGFzIGF1dGhvcmlzZWQgdW5kZXIgdGhpcyBMaWNlbmNlIGlzIHByb2hpYml0ZWQgKHRvIHRoZSBleHRlbnQgc3VjaCB1c2UKK2lzIGNvdmVyZWQgYnkgYSByaWdodCBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgV29yaykuCitUaGUgT3JpZ2luYWwgV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbmNlIHdoZW4gdGhlIExpY2Vuc29yIChhcworZGVmaW5lZCBiZWxvdykgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodAorbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazoKK0xpY2Vuc2VkIHVuZGVyIHRoZSBFVVBMIFYuMS4xCitvciBoYXMgZXhwcmVzc2VkIGJ5IGFueSBvdGhlciBtZWFuIGhpcyB3aWxsaW5nbmVzcyB0byBsaWNlbnNlIHVuZGVyIHRoZSBFVVBMLgorMS4gRGVmaW5pdGlvbnMKK0luIHRoaXMgTGljZW5jZSwgdGhlIGZvbGxvd2luZyB0ZXJtcyBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZzoKKy0gVGhlIExpY2VuY2U6IHRoaXMgTGljZW5jZS4KKy0gVGhlIE9yaWdpbmFsIFdvcmsgb3IgdGhlIFNvZnR3YXJlOiB0aGUgc29mdHdhcmUgZGlzdHJpYnV0ZWQgYW5kL29yIGNvbW11bmljYXRlZAorYnkgdGhlIExpY2Vuc29yIHVuZGVyIHRoaXMgTGljZW5jZSwgYXZhaWxhYmxlIGFzIFNvdXJjZSBDb2RlIGFuZCBhbHNvIGFzIEV4ZWN1dGFibGUKK0NvZGUgYXMgdGhlIGNhc2UgbWF5IGJlLgorLSBEZXJpdmF0aXZlIFdvcmtzOiB0aGUgd29ya3Mgb3Igc29mdHdhcmUgdGhhdCBjb3VsZCBiZSBjcmVhdGVkIGJ5IHRoZSBMaWNlbnNlZSwKK2Jhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmsgb3IgbW9kaWZpY2F0aW9ucyB0aGVyZW9mLiBUaGlzIExpY2VuY2UgZG9lcyBub3QgZGVmaW5lCit0aGUgZXh0ZW50IG9mIG1vZGlmaWNhdGlvbiBvciBkZXBlbmRlbmNlIG9uIHRoZSBPcmlnaW5hbCBXb3JrIHJlcXVpcmVkIGluIG9yZGVyIHRvCitjbGFzc2lmeSBhIHdvcmsgYXMgYSBEZXJpdmF0aXZlIFdvcms7IHRoaXMgZXh0ZW50IGlzIGRldGVybWluZWQgYnkgY29weXJpZ2h0IGxhdworYXBwbGljYWJsZSBpbiB0aGUgY291bnRyeSBtZW50aW9uZWQgaW4gQXJ0aWNsZSAxNS4KKy0gVGhlIFdvcms6IHRoZSBPcmlnaW5hbCBXb3JrIGFuZC9vciBpdHMgRGVyaXZhdGl2ZSBXb3Jrcy4KKy0gVGhlIFNvdXJjZSBDb2RlOiB0aGUgaHVtYW4tcmVhZGFibGUgZm9ybSBvZiB0aGUgV29yayB3aGljaCBpcyB0aGUgbW9zdAorY29udmVuaWVudCBmb3IgcGVvcGxlIHRvIHN0dWR5IGFuZCBtb2RpZnkuCistIFRoZSBFeGVjdXRhYmxlIENvZGU6IGFueSBjb2RlIHdoaWNoIGhhcyBnZW5lcmFsbHkgYmVlbiBjb21waWxlZCBhbmQgd2hpY2ggaXMKK21lYW50IHRvIGJlIGludGVycHJldGVkIGJ5IGEgY29tcHV0ZXIgYXMgYSBwcm9ncmFtLgorLSBUaGUgTGljZW5zb3I6IHRoZSBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbiB0aGF0IGRpc3RyaWJ1dGVzIGFuZC9vciBjb21tdW5pY2F0ZXMgdGhlCitXb3JrIHVuZGVyIHRoZSBMaWNlbmNlLgorLSBDb250cmlidXRvcihzKTogYW55IG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uIHdobyBtb2RpZmllcyB0aGUgV29yayB1bmRlciB0aGUKK0xpY2VuY2UsIG9yIG90aGVyd2lzZSBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgYSBEZXJpdmF0aXZlIFdvcmsuCistIFRoZSBMaWNlbnNlZSBvciAmIzgyMjA7WW91JiM4MjIxOzogYW55IG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uIHdobyBtYWtlcyBhbnkgdXNhZ2Ugb2YgdGhlCitTb2Z0d2FyZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2VuY2UuCistIERpc3RyaWJ1dGlvbiBhbmQvb3IgQ29tbXVuaWNhdGlvbjogYW55IGFjdCBvZiBzZWxsaW5nLCBnaXZpbmcsIGxlbmRpbmcsIHJlbnRpbmcsCitkaXN0cmlidXRpbmcsIGNvbW11bmljYXRpbmcsIHRyYW5zbWl0dGluZywgb3Igb3RoZXJ3aXNlIG1ha2luZyBhdmFpbGFibGUsIG9uLWxpbmUgb3IKK29mZi1saW5lLCBjb3BpZXMgb2YgdGhlIFdvcmsgb3IgcHJvdmlkaW5nIGFjY2VzcyB0byBpdHMgZXNzZW50aWFsIGZ1bmN0aW9uYWxpdGllcyBhdCB0aGUKK2Rpc3Bvc2FsIG9mIGFueSBvdGhlciBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbi4KKzIuIFNjb3BlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBieSB0aGUgTGljZW5jZQorVGhlIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBzdWJsaWNlbnNhYmxlCitsaWNlbmNlIHRvIGRvIHRoZSBmb2xsb3dpbmcsIGZvciB0aGUgZHVyYXRpb24gb2YgY29weXJpZ2h0IHZlc3RlZCBpbiB0aGUKK09yaWdpbmFsIFdvcms6CistIHVzZSB0aGUgV29yayBpbiBhbnkgY2lyY3Vtc3RhbmNlIGFuZCBmb3IgYWxsIHVzYWdlLAorLSByZXByb2R1Y2UgdGhlIFdvcmssCistIG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yaywgYW5kIG1ha2UgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBXb3JrLAorLSBjb21tdW5pY2F0ZSB0byB0aGUgcHVibGljLCBpbmNsdWRpbmcgdGhlIHJpZ2h0IHRvIG1ha2UgYXZhaWxhYmxlIG9yIGRpc3BsYXkgdGhlCitXb3JrIG9yIGNvcGllcyB0aGVyZW9mIHRvIHRoZSBwdWJsaWMgYW5kIHBlcmZvcm0gcHVibGljbHksIGFzIHRoZSBjYXNlIG1heSBiZSwKK3RoZSBXb3JrLAorLSBkaXN0cmlidXRlIHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mLAorLSBsZW5kIGFuZCByZW50IHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mLAorLSBzdWItbGljZW5zZSByaWdodHMgaW4gdGhlIFdvcmsgb3IgY29waWVzIHRoZXJlb2YuCitUaG9zZSByaWdodHMgY2FuIGJlIGV4ZXJjaXNlZCBvbiBhbnkgbWVkaWEsIHN1cHBvcnRzIGFuZCBmb3JtYXRzLCB3aGV0aGVyIG5vdwora25vd24gb3IgbGF0ZXIgaW52ZW50ZWQsIGFzIGZhciBhcyB0aGUgYXBwbGljYWJsZSBsYXcgcGVybWl0cyBzby4KK0luIHRoZSBjb3VudHJpZXMgd2hlcmUgbW9yYWwgcmlnaHRzIGFwcGx5LCB0aGUgTGljZW5zb3Igd2FpdmVzIGhpcyByaWdodCB0byBleGVyY2lzZSBoaXMKK21vcmFsIHJpZ2h0IHRvIHRoZSBleHRlbnQgYWxsb3dlZCBieSBsYXcgaW4gb3JkZXIgdG8gbWFrZSBlZmZlY3RpdmUgdGhlIGxpY2VuY2Ugb2YgdGhlCitlY29ub21pYyByaWdodHMgaGVyZSBhYm92ZSBsaXN0ZWQuCitUaGUgTGljZW5zb3IgZ3JhbnRzIHRvIHRoZSBMaWNlbnNlZSByb3lhbHR5LWZyZWUsIG5vbiBleGNsdXNpdmUgdXNhZ2UgcmlnaHRzIHRvIGFueQorcGF0ZW50cyBoZWxkIGJ5IHRoZSBMaWNlbnNvciwgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSB1c2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkCitvbiB0aGUgV29yayB1bmRlciB0aGlzIExpY2VuY2UuCiszLiBDb21tdW5pY2F0aW9uIG9mIHRoZSBTb3VyY2UgQ29kZQorVGhlIExpY2Vuc29yIG1heSBwcm92aWRlIHRoZSBXb3JrIGVpdGhlciBpbiBpdHMgU291cmNlIENvZGUgZm9ybSwgb3IgYXMgRXhlY3V0YWJsZQorQ29kZS4gSWYgdGhlIFdvcmsgaXMgcHJvdmlkZWQgYXMgRXhlY3V0YWJsZSBDb2RlLCB0aGUgTGljZW5zb3IgcHJvdmlkZXMgaW4gYWRkaXRpb24gYQorbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZiB0aGUKK1dvcmsgdGhhdCB0aGUgTGljZW5zb3IgZGlzdHJpYnV0ZXMgb3IgaW5kaWNhdGVzLCBpbiBhIG5vdGljZSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodAorbm90aWNlIGF0dGFjaGVkIHRvIHRoZSBXb3JrLCBhIHJlcG9zaXRvcnkgd2hlcmUgdGhlIFNvdXJjZSBDb2RlIGlzIGVhc2lseSBhbmQgZnJlZWx5CithY2Nlc3NpYmxlIGZvciBhcyBsb25nIGFzIHRoZSBMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSBhbmQvb3IgY29tbXVuaWNhdGUgdGhlCitXb3JrLgorNC4gTGltaXRhdGlvbnMgb24gY29weXJpZ2h0CitOb3RoaW5nIGluIHRoaXMgTGljZW5jZSBpcyBpbnRlbmRlZCB0byBkZXByaXZlIHRoZSBMaWNlbnNlZSBvZiB0aGUgYmVuZWZpdHMgZnJvbSBhbnkKK2V4Y2VwdGlvbiBvciBsaW1pdGF0aW9uIHRvIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSByaWdodHMgb3duZXJzIGluIHRoZSBPcmlnaW5hbAorV29yayBvciBTb2Z0d2FyZSwgb2YgdGhlIGV4aGF1c3Rpb24gb2YgdGhvc2UgcmlnaHRzIG9yIG9mIG90aGVyIGFwcGxpY2FibGUgbGltaXRhdGlvbnMKK3RoZXJldG8uCis1LiBPYmxpZ2F0aW9ucyBvZiB0aGUgTGljZW5zZWUKK1RoZSBncmFudCBvZiB0aGUgcmlnaHRzIG1lbnRpb25lZCBhYm92ZSBpcyBzdWJqZWN0IHRvIHNvbWUgcmVzdHJpY3Rpb25zIGFuZCBvYmxpZ2F0aW9ucworaW1wb3NlZCBvbiB0aGUgTGljZW5zZWUuIFRob3NlIG9ibGlnYXRpb25zIGFyZSB0aGUgZm9sbG93aW5nOgorQXR0cmlidXRpb24gcmlnaHQ6IHRoZSBMaWNlbnNlZSBzaGFsbCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0LCBwYXRlbnQgb3IgdHJhZGVtYXJrcworbm90aWNlcyBhbmQgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGUgTGljZW5jZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KK1RoZSBMaWNlbnNlZSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHN1Y2ggbm90aWNlcyBhbmQgYSBjb3B5IG9mIHRoZSBMaWNlbmNlIHdpdGgKK2V2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgaGUvc2hlIGRpc3RyaWJ1dGVzIGFuZC9vciBjb21tdW5pY2F0ZXMuIFRoZSBMaWNlbnNlZSBtdXN0CitjYXVzZSBhbnkgRGVyaXZhdGl2ZSBXb3JrIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGUgV29yayBoYXMgYmVlbgorbW9kaWZpZWQgYW5kIHRoZSBkYXRlIG9mIG1vZGlmaWNhdGlvbi4KK0NvcHlsZWZ0IGNsYXVzZTogSWYgdGhlIExpY2Vuc2VlIGRpc3RyaWJ1dGVzIGFuZC9vciBjb21tdW5pY2F0ZXMgY29waWVzIG9mIHRoZQorT3JpZ2luYWwgV29ya3Mgb3IgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrLCB0aGlzIERpc3RyaWJ1dGlvbgorYW5kL29yIENvbW11bmljYXRpb24gd2lsbCBiZSBkb25lIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2VuY2Ugb3Igb2YgYSBsYXRlcgordmVyc2lvbiBvZiB0aGlzIExpY2VuY2UgdW5sZXNzIHRoZSBPcmlnaW5hbCBXb3JrIGlzIGV4cHJlc3NseSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyCit0aGlzIHZlcnNpb24gb2YgdGhlIExpY2VuY2UuIFRoZSBMaWNlbnNlZSAoYmVjb21pbmcgTGljZW5zb3IpIGNhbm5vdCBvZmZlciBvciBpbXBvc2UKK2FueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb24gdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrIHRoYXQgYWx0ZXIgb3IKK3Jlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5jZS4KK0NvbXBhdGliaWxpdHkgY2xhdXNlOiBJZiB0aGUgTGljZW5zZWUgRGlzdHJpYnV0ZXMgYW5kL29yIENvbW11bmljYXRlcyBEZXJpdmF0aXZlCitXb3JrcyBvciBjb3BpZXMgdGhlcmVvZiBiYXNlZCB1cG9uIGJvdGggdGhlIE9yaWdpbmFsIFdvcmsgYW5kIGFub3RoZXIgd29yaworbGljZW5zZWQgdW5kZXIgYSBDb21wYXRpYmxlIExpY2VuY2UsIHRoaXMgRGlzdHJpYnV0aW9uIGFuZC9vciBDb21tdW5pY2F0aW9uIGNhbiBiZQorZG9uZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBDb21wYXRpYmxlIExpY2VuY2UuIEZvciB0aGUgc2FrZSBvZiB0aGlzIGNsYXVzZSwKKyYjODIyMDtDb21wYXRpYmxlIExpY2VuY2UmIzgyMjE7IHJlZmVycyB0byB0aGUgbGljZW5jZXMgbGlzdGVkIGluIHRoZSBhcHBlbmRpeCBhdHRhY2hlZCB0byB0aGlzCitMaWNlbmNlLiBTaG91bGQgdGhlIExpY2Vuc2VlJiM4MjE3O3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhlIENvbXBhdGlibGUgTGljZW5jZSBjb25mbGljdAord2l0aCBoaXMvaGVyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5jZSwgdGhlIG9ibGlnYXRpb25zIG9mIHRoZSBDb21wYXRpYmxlIExpY2VuY2UKK3NoYWxsIHByZXZhaWwuCitQcm92aXNpb24gb2YgU291cmNlIENvZGU6IFdoZW4gZGlzdHJpYnV0aW5nIGFuZC9vciBjb21tdW5pY2F0aW5nIGNvcGllcyBvZiB0aGUKK1dvcmssIHRoZSBMaWNlbnNlZSB3aWxsIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9yCitpbmRpY2F0ZSBhIHJlcG9zaXRvcnkgd2hlcmUgdGhpcyBTb3VyY2Ugd2lsbCBiZSBlYXNpbHkgYW5kIGZyZWVseSBhdmFpbGFibGUgZm9yIGFzIGxvbmcKK2FzIHRoZSBMaWNlbnNlZSBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSBhbmQvb3IgY29tbXVuaWNhdGUgdGhlIFdvcmsuCitMZWdhbCBQcm90ZWN0aW9uOiBUaGlzIExpY2VuY2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlIG5hbWVzLAordHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgbmFtZXMgb2YgdGhlIExpY2Vuc29yLCBleGNlcHQgYXMgcmVxdWlyZWQgZm9yCityZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcKK3RoZSBjb250ZW50IG9mIHRoZSBjb3B5cmlnaHQgbm90aWNlLgorNi4gQ2hhaW4gb2YgQXV0aG9yc2hpcAorVGhlIG9yaWdpbmFsIExpY2Vuc29yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiB0aGUgT3JpZ2luYWwgV29yayBncmFudGVkCitoZXJldW5kZXIgaXMgb3duZWQgYnkgaGltL2hlciBvciBsaWNlbnNlZCB0byBoaW0vaGVyIGFuZCB0aGF0IGhlL3NoZSBoYXMgdGhlIHBvd2VyCithbmQgYXV0aG9yaXR5IHRvIGdyYW50IHRoZSBMaWNlbmNlLgorRWFjaCBDb250cmlidXRvciB3YXJyYW50cyB0aGF0IHRoZSBjb3B5cmlnaHQgaW4gdGhlIG1vZGlmaWNhdGlvbnMgaGUvc2hlIGJyaW5ncyB0byB0aGUKK1dvcmsgYXJlIG93bmVkIGJ5IGhpbS9oZXIgb3IgbGljZW5zZWQgdG8gaGltL2hlciBhbmQgdGhhdCBoZS9zaGUgaGFzIHRoZSBwb3dlciBhbmQKK2F1dGhvcml0eSB0byBncmFudCB0aGUgTGljZW5jZS4KK0VhY2ggdGltZSBZb3UgYWNjZXB0IHRoZSBMaWNlbmNlLCB0aGUgb3JpZ2luYWwgTGljZW5zb3IgYW5kIHN1YnNlcXVlbnQgQ29udHJpYnV0b3JzCitncmFudCBZb3UgYSBsaWNlbmNlIHRvIHRoZWlyIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIFdvcmssIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbmNlLgorNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eQorVGhlIFdvcmsgaXMgYSB3b3JrIGluIHByb2dyZXNzLCB3aGljaCBpcyBjb250aW51b3VzbHkgaW1wcm92ZWQgYnkgbnVtZXJvdXMKK2NvbnRyaWJ1dG9ycy4gSXQgaXMgbm90IGEgZmluaXNoZWQgd29yayBhbmQgbWF5IHRoZXJlZm9yZSBjb250YWluIGRlZmVjdHMgb3IgJiM4MjIwO2J1Z3MmIzgyMjE7CitpbmhlcmVudCB0byB0aGlzIHR5cGUgb2Ygc29mdHdhcmUgZGV2ZWxvcG1lbnQuCitGb3IgdGhlIGFib3ZlIHJlYXNvbiwgdGhlIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhlIExpY2VuY2Ugb24gYW4gJiM4MjIwO2FzIGlzJiM4MjIxOyBiYXNpcyBhbmQKK3dpdGhvdXQgd2FycmFudGllcyBvZiBhbnkga2luZCBjb25jZXJuaW5nIHRoZSBXb3JrLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCittZXJjaGFudGFiaWxpdHksIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLCBhYnNlbmNlIG9mIGRlZmVjdHMgb3IgZXJyb3JzLAorYWNjdXJhY3ksIG5vbi1pbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvdGhlciB0aGFuIGNvcHlyaWdodCBhcworc3RhdGVkIGluIEFydGljbGUgNiBvZiB0aGlzIExpY2VuY2UuCitUaGlzIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgaXMgYW4gZXNzZW50aWFsIHBhcnQgb2YgdGhlIExpY2VuY2UgYW5kIGEgY29uZGl0aW9uIGZvciB0aGUKK2dyYW50IG9mIGFueSByaWdodHMgdG8gdGhlIFdvcmsuCis4LiBEaXNjbGFpbWVyIG9mIExpYWJpbGl0eQorRXhjZXB0IGluIHRoZSBjYXNlcyBvZiB3aWxmdWwgbWlzY29uZHVjdCBvciBkYW1hZ2VzIGRpcmVjdGx5IGNhdXNlZCB0byBuYXR1cmFsCitwZXJzb25zLCB0aGUgTGljZW5zb3Igd2lsbCBpbiBubyBldmVudCBiZSBsaWFibGUgZm9yIGFueSBkaXJlY3Qgb3IgaW5kaXJlY3QsIG1hdGVyaWFsIG9yCittb3JhbCwgZGFtYWdlcyBvZiBhbnkga2luZCwgYXJpc2luZyBvdXQgb2YgdGhlIExpY2VuY2Ugb3Igb2YgdGhlIHVzZSBvZiB0aGUgV29yaywKK2luY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyCitmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBsb3NzIG9mIGRhdGEgb3IgYW55IGNvbW1lcmNpYWwgZGFtYWdlLCBldmVuIGlmIHRoZSBMaWNlbnNvcgoraGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2UuIEhvd2V2ZXIsIHRoZSBMaWNlbnNvciB3aWxsIGJlCitsaWFibGUgdW5kZXIgc3RhdHV0b3J5IHByb2R1Y3QgbGlhYmlsaXR5IGxhd3MgYXMgZmFyIHN1Y2ggbGF3cyBhcHBseSB0byB0aGUgV29yay4KKzkuIEFkZGl0aW9uYWwgYWdyZWVtZW50cworV2hpbGUgZGlzdHJpYnV0aW5nIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MsIFlvdSBtYXkgY2hvb3NlIHRvCitjb25jbHVkZSBhbiBhZGRpdGlvbmFsIGFncmVlbWVudCB0byBvZmZlciwgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwKK3dhcnJhbnR5LCBpbmRlbW5pdHksIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3Igc2VydmljZXMgY29uc2lzdGVudCB3aXRoIHRoaXMKK0xpY2VuY2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5IG9uIHlvdXIgb3duCitiZWhhbGYgYW5kIG9uIHlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZiBvZiB0aGUgb3JpZ2luYWwgTGljZW5zb3Igb3IgYW55CitvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kLCBhbmQgaG9sZCBlYWNoCitDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3Qgc3VjaAorQ29udHJpYnV0b3IgYnkgdGhlIGZhY3QgWW91IGhhdmUgYWNjZXB0ZWQgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCisxMC4gQWNjZXB0YW5jZSBvZiB0aGUgTGljZW5jZQorVGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBMaWNlbmNlIGNhbiBiZSBhY2NlcHRlZCBieSBjbGlja2luZyBvbiBhbiBpY29uICYjODIyMDtJIGFncmVlJiM4MjIxOworcGxhY2VkIHVuZGVyIHRoZSBib3R0b20gb2YgYSB3aW5kb3cgZGlzcGxheWluZyB0aGUgdGV4dCBvZiB0aGlzIExpY2VuY2Ugb3IgYnkKK2FmZmlybWluZyBjb25zZW50IGluIGFueSBvdGhlciBzaW1pbGFyIHdheSwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBydWxlcyBvZiBhcHBsaWNhYmxlCitsYXcuIENsaWNraW5nIG9uIHRoYXQgaWNvbiBpbmRpY2F0ZXMgeW91ciBjbGVhciBhbmQgaXJyZXZvY2FibGUgYWNjZXB0YW5jZSBvZiB0aGlzCitMaWNlbmNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorU2ltaWxhcmx5LCB5b3UgaXJyZXZvY2FibHkgYWNjZXB0IHRoaXMgTGljZW5jZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBieQorZXhlcmNpc2luZyBhbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IEFydGljbGUgMiBvZiB0aGlzIExpY2VuY2UsIHN1Y2ggYXMgdGhlIHVzZSBvZgordGhlIFdvcmssIHRoZSBjcmVhdGlvbiBieSBZb3Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgdGhlIERpc3RyaWJ1dGlvbiBhbmQvb3IKK0NvbW11bmljYXRpb24gYnkgWW91IG9mIHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mLgorMTEuIEluZm9ybWF0aW9uIHRvIHRoZSBwdWJsaWMKK0luIGNhc2Ugb2YgYW55IERpc3RyaWJ1dGlvbiBhbmQvb3IgQ29tbXVuaWNhdGlvbiBvZiB0aGUgV29yayBieSBtZWFucyBvZiBlbGVjdHJvbmljCitjb21tdW5pY2F0aW9uIGJ5IFlvdSAoZm9yIGV4YW1wbGUsIGJ5IG9mZmVyaW5nIHRvIGRvd25sb2FkIHRoZSBXb3JrIGZyb20gYQorcmVtb3RlIGxvY2F0aW9uKSB0aGUgZGlzdHJpYnV0aW9uIGNoYW5uZWwgb3IgbWVkaWEgKGZvciBleGFtcGxlLCBhIHdlYnNpdGUpIG11c3QgYXQKK2xlYXN0IHByb3ZpZGUgdG8gdGhlIHB1YmxpYyB0aGUgaW5mb3JtYXRpb24gcmVxdWVzdGVkIGJ5IHRoZSBhcHBsaWNhYmxlIGxhdyByZWdhcmRpbmcKK3RoZSBMaWNlbnNvciwgdGhlIExpY2VuY2UgYW5kIHRoZSB3YXkgaXQgbWF5IGJlIGFjY2Vzc2libGUsIGNvbmNsdWRlZCwgc3RvcmVkIGFuZAorcmVwcm9kdWNlZCBieSB0aGUgTGljZW5zZWUuCisxMi4gVGVybWluYXRpb24gb2YgdGhlIExpY2VuY2UKK1RoZSBMaWNlbmNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkKK2JyZWFjaCBieSB0aGUgTGljZW5zZWUgb2YgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbmNlLgorU3VjaCBhIHRlcm1pbmF0aW9uIHdpbGwgbm90IHRlcm1pbmF0ZSB0aGUgbGljZW5jZXMgb2YgYW55IHBlcnNvbiB3aG8gaGFzIHJlY2VpdmVkIHRoZQorV29yayBmcm9tIHRoZSBMaWNlbnNlZSB1bmRlciB0aGUgTGljZW5jZSwgcHJvdmlkZWQgc3VjaCBwZXJzb25zIHJlbWFpbiBpbiBmdWxsCitjb21wbGlhbmNlIHdpdGggdGhlIExpY2VuY2UuCisxMy4gTWlzY2VsbGFuZW91cworV2l0aG91dCBwcmVqdWRpY2Ugb2YgQXJ0aWNsZSA5IGFib3ZlLCB0aGUgTGljZW5jZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQKK2JldHdlZW4gdGhlIFBhcnRpZXMgYXMgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZXVuZGVyLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGUgTGljZW5jZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIHRoaXMKK3dpbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIExpY2VuY2UgYXMgYSB3aG9sZS4gU3VjaCBwcm92aXNpb24KK3dpbGwgYmUgY29uc3RydWVkIGFuZC9vciByZWZvcm1lZCBzbyBhcyBuZWNlc3NhcnkgdG8gbWFrZSBpdCB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitUaGUgRXVyb3BlYW4gQ29tbWlzc2lvbiBtYXkgcHVibGlzaCBvdGhlciBsaW5ndWlzdGljIHZlcnNpb25zIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoaXMgTGljZW5jZSwgc28gZmFyIHRoaXMgaXMgcmVxdWlyZWQgYW5kIHJlYXNvbmFibGUsIHdpdGhvdXQgcmVkdWNpbmcgdGhlIHNjb3BlIG9mCit0aGUgcmlnaHRzIGdyYW50ZWQgYnkgdGhlIExpY2VuY2UuIE5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5jZSB3aWxsIGJlIHB1Ymxpc2hlZCB3aXRoCithIHVuaXF1ZSB2ZXJzaW9uIG51bWJlci4KK0FsbCBsaW5ndWlzdGljIHZlcnNpb25zIG9mIHRoaXMgTGljZW5jZSwgYXBwcm92ZWQgYnkgdGhlIEV1cm9wZWFuIENvbW1pc3Npb24sIGhhdmUKK2lkZW50aWNhbCB2YWx1ZS4gUGFydGllcyBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGxpbmd1aXN0aWMgdmVyc2lvbiBvZiB0aGVpciBjaG9pY2UuCisxNC4gSnVyaXNkaWN0aW9uCitBbnkgbGl0aWdhdGlvbiByZXN1bHRpbmcgZnJvbSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBMaWNlbnNlLCBhcmlzaW5nIGJldHdlZW4gdGhlCitFdXJvcGVhbiBDb21taXNzaW9uLCBhcyBhIExpY2Vuc29yLCBhbmQgYW55IExpY2Vuc2VlLCB3aWxsIGJlIHN1YmplY3QgdG8gdGhlCitqdXJpc2RpY3Rpb24gb2YgdGhlIENvdXJ0IG9mIEp1c3RpY2Ugb2YgdGhlIEV1cm9wZWFuIENvbW11bml0aWVzLCBhcyBsYWlkIGRvd24gaW4KK2FydGljbGUgMjM4IG9mIHRoZSBUcmVhdHkgZXN0YWJsaXNoaW5nIHRoZSBFdXJvcGVhbiBDb21tdW5pdHkuCitBbnkgbGl0aWdhdGlvbiBhcmlzaW5nIGJldHdlZW4gUGFydGllcywgb3RoZXIgdGhhbiB0aGUgRXVyb3BlYW4gQ29tbWlzc2lvbiwgYW5kCityZXN1bHRpbmcgZnJvbSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBMaWNlbnNlLCB3aWxsIGJlIHN1YmplY3QgdG8gdGhlIGV4Y2x1c2l2ZQoranVyaXNkaWN0aW9uIG9mIHRoZSBjb21wZXRlbnQgY291cnQgd2hlcmUgdGhlIExpY2Vuc29yIHJlc2lkZXMgb3IgY29uZHVjdHMgaXRzIHByaW1hcnkKK2J1c2luZXNzLgorMTUuIEFwcGxpY2FibGUgTGF3CitUaGlzIExpY2VuY2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhdyBvZiB0aGUgRXVyb3BlYW4gVW5pb24gY291bnRyeSB3aGVyZSB0aGUKK0xpY2Vuc29yIHJlc2lkZXMgb3IgaGFzIGhpcyByZWdpc3RlcmVkIG9mZmljZS4KK1RoaXMgbGljZW5jZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgQmVsZ2lhbiBsYXcgaWY6CistIGEgbGl0aWdhdGlvbiBhcmlzZXMgYmV0d2VlbiB0aGUgRXVyb3BlYW4gQ29tbWlzc2lvbiwgYXMgYSBMaWNlbnNvciwgYW5kIGFueQorTGljZW5zZWU7CistIHRoZSBMaWNlbnNvciwgb3RoZXIgdGhhbiB0aGUgRXVyb3BlYW4gQ29tbWlzc2lvbiwgaGFzIG5vIHJlc2lkZW5jZSBvcgorcmVnaXN0ZXJlZCBvZmZpY2UgaW5zaWRlIGEgRXVyb3BlYW4gVW5pb24gY291bnRyeS4KKz09PQorQXBwZW5kaXgKKyYjODIyMDtDb21wYXRpYmxlIExpY2VuY2VzJiM4MjIxOyBhY2NvcmRpbmcgdG8gYXJ0aWNsZSA1IEVVUEwgYXJlOgorLSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR05VIEdQTCkgdi4gMgorLSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCkgdi4gMi4xLCB2LiAzLjAKKy0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYuIDEuMAorLSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYuIDEuMAorLSBDZWNpbGwgdi4gMi4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRWxmdXRpbHMtRXhjZXB0aW9uIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FbGZ1dGlscy1FeGNlcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI3ZDc2OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRWxmdXRpbHMtRXhjZXB0aW9uCkBAIC0wLDAgKzEsMTIgQEAKKyAgIFRoaXMgZmlsZSBkZXNjcmliZXMgdGhlIGxpbWl0cyBvZiB0aGUgRXhjZXB0aW9uIHVuZGVyIHdoaWNoIHlvdSBhcmUgYWxsb3dlZAorICAgdG8gZGlzdHJpYnV0ZSBOb24tR1BMIENvZGUgaW4gbGlua2VkIGNvbWJpbmF0aW9uIHdpdGggUmVkIEhhdCBlbGZ1dGlscy4KKyAgIEZvciB0aGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlLCBwbGVhc2Ugc2VlIG9uZSBvZiB0aGUgaGVhZGVyIGZpbGVzCisgICBpbmNsdWRlZCB3aXRoIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uIG9yIHRoZSBmaWxlIENPUFlJTkcgZm91bmQgaW4gdGhlCisgICB0b3AgbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UuCisKKyAgIFRoZSBBcHByb3ZlZCBJbnRlcmZhY2VzIGFyZSB0aGUgZnVuY3Rpb25zIGRlY2xhcmVkIGluIHRoZSBmaWxlczoKKworICAgbGliZWxmLmgKKyAgIGxpYmR3LmgKKyAgIGxpYmR3ZmwuaAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VudGVzc2EgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VudGVzc2EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRkYWRkMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRW50ZXNzYQpAQCAtMCwwICsxLDIwIEBACisKK0VudGVzc2EgUHVibGljIExpY2Vuc2UgVmVyc2lvbi4gMS4wCitDb3B5cmlnaHQgKGMpIDIwMDMgRW50ZXNzYSwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKK1JlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK1JlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK1RoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLCBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAKKyJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgb3BlbiBzb3VyY2Ugc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IG9wZW5TRUFMIChodHRwOi8vd3d3Lm9wZW5zZWFsLm9yZy8pLiIKKworQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLCBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgorCitUaGUgbmFtZXMgIm9wZW5TRUFMIiBhbmQgIkVudGVzc2EiIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBlcGxAZW50ZXNzYS5jb20uCitQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAib3BlblNFQUwiLCBub3IgbWF5ICJvcGVuU0VBTCIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIEVudGVzc2EuCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVNgYCBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVOVEVTU0EsIExMQywgT1BFTlNFQUwgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueSBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2Ygb3BlblNFQUwgYW5kIHdhcyBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIGJ5IEVudGVzc2EsIExMQywgaHR0cDovL3d3dy5lbnRlc3NhLmNvbS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIG9wZW5TRUFMLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3Lm9wZW5zZWFsLm9yZy8+LgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VybFBMLTEuMSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRXJsUEwtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NjFjY2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VybFBMLTEuMQpAQCAtMCwwICsxLDI4OCBAQAorCitFUkxBTkcgUFVCTElDIExJQ0VOU0UKK1ZlcnNpb24gMS4xCisKKzEuIERlZmluaXRpb25zLgorCisxLjEuIGBgQ29udHJpYnV0b3JgYCBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8KK3RoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisxLjIuIGBgQ29udHJpYnV0b3IgVmVyc2lvbmBgIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwKK0NvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMKK21hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorCisxLjMuIGBgQ292ZXJlZCBDb2RlYGAgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUKK2NvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UKK2luY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorCisxLjQuIGBgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtYGAgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5CithY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYwordHJhbnNmZXIgb2YgZGF0YS4KKworMS41LiBgYEV4ZWN1dGFibGVgYCBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UKK0NvZGUuCisKKzEuNi4gYGBJbml0aWFsIERldmVsb3BlcmBgIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkCithcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0CitBLgorCisxLjcuIGBgTGFyZ2VyIFdvcmtgYCBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yCitwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS44LiBgYExpY2Vuc2VgYCBtZWFucyB0aGlzIGRvY3VtZW50LgorCisxLjkuIGBgTW9kaWZpY2F0aW9uc2BgIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZQorc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzCitNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYQorTW9kaWZpY2F0aW9uIGlzOgorCitBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcKKyAgIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gCisKK0IuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yCisgICBwcmV2aW91cyBNb2RpZmljYXRpb25zLiAKKworMS4xMC4gYGBPcmlnaW5hbCBDb2RlYGAgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZQord2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzCitPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMKK0xpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKworMS4xMS4gYGBTb3VyY2UgQ29kZWBgIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cworYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sCitjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIGEgbGlzdCBvZiBzb3VyY2UKK2NvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yCithbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yYHMKK2Nob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwKK3Byb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcword2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorCisxLjEyLiBgYFlvdWBgIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMKK3VuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwKK2VudGl0aWVzLGBgWW91YGAgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwKK29yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAorYGBjb250cm9sYGAgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKK2RpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCitvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLgorCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwKK25vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK2NsYWltczoKKworKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kCisgICAgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvciB3aXRob3V0CisgICAgTW9kaWZpY2F0aW9ucywgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQgCisKKyhiKSB1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBJbml0aWFsCisgICAgRGV2ZWxvcGVyLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSBhbmQgc2VsbCAoYGBVdGlsaXplYGApIHRoZQorICAgIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdAorICAgIGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIFV0aWxpemUKKyAgICB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgYW5kIG5vdCB0byBhbnkgZ3JlYXRlcgorICAgIGV4dGVudCB0aGF0IG1heSBiZSBuZWNlc3NhcnkgdG8gVXRpbGl6ZSBmdXJ0aGVyIE1vZGlmaWNhdGlvbnMgb3IKKyAgICBjb21iaW5hdGlvbnMuIAorCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorRWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwKK25vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK2NsYWltczoKKworKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kCisgICAgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yCisgICAgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIKKyAgICBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQgCisKKyhiKSB1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBDb250cmlidXRvciwKKyAgICB0byBVdGlsaXplIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYnV0CisgICAgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkKKyAgICB0byBlbmFibGUgWW91IHRvIFV0aWxpemUgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zCisgICAgdGhlcmVvZiksIGFuZCBub3QgdG8gYW55IGdyZWF0ZXIgZXh0ZW50IHRoYXQgbWF5IGJlIG5lY2Vzc2FyeSB0bworICAgIFV0aWxpemUgZnVydGhlciBNb2RpZmljYXRpb25zIG9yIGNvbWJpbmF0aW9ucy4gCisKKzMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy4KKworMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLgorVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlCitDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcworb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGgKK2V2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvcgoraW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMKK3RoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMKK2hlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcKK3RoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuIAorCiszLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KK0FueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UKK0NvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcworYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbgorTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGU7CithbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdAorcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0Citpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYQorc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZQorYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdAordGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYworRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuCisKKzMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4KK1lvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggeW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhCitmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQKK3RoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQKK3RoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbAorQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUKK0luaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbgorRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlCitvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMKKworKGEpIFRoaXJkIFBhcnR5IENsYWltcy4KKyAgICBJZiBZb3UgaGF2ZSBrbm93bGVkZ2UgdGhhdCBhIHBhcnR5IGNsYWltcyBhbiBpbnRlbGxlY3R1YWwgcHJvcGVydHkKKyAgICByaWdodCBpbiBwYXJ0aWN1bGFyIGZ1bmN0aW9uYWxpdHkgb3IgY29kZSAob3IgaXRzIHV0aWxpemF0aW9uCisgICAgdW5kZXIgdGhpcyBMaWNlbnNlKSwgeW91IG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBzb3VyY2UKKyAgICBjb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgYGBMRUdBTGBgIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kCisgICAgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudAorICAgIHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIHlvdSBvYnRhaW4gc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgWW91CisgICAgbWFrZSBZb3VyIE1vZGlmaWNhdGlvbiBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBZb3UKKyAgICBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBZb3UgbWFrZQorICAgIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZworICAgIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvCisgICAgaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMKKyAgICBiZWVuIG9idGFpbmVkLiAKKworKGIpIENvbnRyaWJ1dG9yIEFQSXMuCisgICAgSWYgWW91ciBNb2RpZmljYXRpb24gaXMgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZAorICAgIFlvdSBvd24gb3IgY29udHJvbCBwYXRlbnRzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0bworICAgIGltcGxlbWVudCB0aGF0IEFQSSwgeW91IG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlCisgICAgTEVHQUwgZmlsZS4gCisKKzMuNS4gUmVxdWlyZWQgTm90aWNlcy4KK1lvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZQorQ29kZSwgYW5kIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlLCB3aGVyZQorWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIElmIFlvdQorY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocyksIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhCitDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIElmIGl0IGlzIG5vdAorcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0bworaXRzIHN0cnVjdHVyZSwgdGhlbiB5b3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2gKK2FzIGEgcmVsZXZhbnQgZGlyZWN0b3J5IGZpbGUpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3IKK3N1Y2ggYSBub3RpY2UuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwKK3dhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlCityZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duCitiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkKK0NvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbiBhbnkgc3VjaCB3YXJyYW50eSwKK3N1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwKK2FuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5CitDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IKK3N1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvcgorbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlCityZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLAorYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZgordGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKK2luY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZQorb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkCitpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yCitjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgcmVsYXRpbmcgdG8gdGhlCitDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQKK0NvZGUgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQKK2Zyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcworb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMKK25vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcyByaWdodHMgaW4gdGhlIFNvdXJjZQorQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UKK2Rpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0CittYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlCithcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55CitDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZAorZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyCitvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci4KKworMy43LiBMYXJnZXIgV29ya3MuCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlCitub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyCitXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlCityZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCisKKzQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4KK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUKK29yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UKK3RvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kCit0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTAorZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwKK2Rpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5CitzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQKK2ZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuCisKKzUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzCithdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSwgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBDb2RlLgorCis2LiBDT05ORUNUSU9OIFRPIE1PWklMTEEgUFVCTElDIExJQ0VOU0UKKworVGhpcyBFcmxhbmcgTGljZW5zZSBpcyBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTW96aWxsYSBQdWJsaWMKK0xpY2Vuc2UsIFZlcnNpb24gMS4wLiBJdCBjb250YWlucyB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGUgTW96aWxsYQorUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMS4wLgorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOIGBgQVMgSVNgYCBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GCitERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IKK05PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GCitUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUKK0lOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSCitDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IKK0NPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVAorT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUgorRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKworOC4gVEVSTUlOQVRJT04uCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUKK2F1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUKK3N1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbAorc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbAorc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpcgorbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UKK3NoYWxsIHN1cnZpdmUuCisKKzkuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZCitBbnkgdXRpbGl6YXRpb24gb2YgQ292ZXJlZCBDb2RlIHNoYWxsIG5vdCBjYXVzZSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIKK29yIGFueSBDb250cmlidXRvciB0byBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIChuZWl0aGVyIGRpcmVjdCBub3IKK2luZGlyZWN0KS4KKworMTAuIE1JU0NFTExBTkVPVVMKK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyB0aGUgc3ViamVjdAorbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2gKK3Byb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQKK2VuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgY29uc3RydWVkIGJ5IGFuZCBpbiBhY2NvcmRhbmNlIHdpdGgKK3RoZSBzdWJzdGFudGl2ZSBsYXdzIG9mIFN3ZWRlbi4gQW55IGRpc3B1dGUsIGNvbnRyb3ZlcnN5IG9yIGNsYWltCithcmlzaW5nIG91dCBvZiBvciByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UsIG9yIHRoZSBicmVhY2gsIHRlcm1pbmF0aW9uCitvciBpbnZhbGlkaXR5IHRoZXJlb2YsIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24KK29mIFN3ZWRpc2ggY291cnRzLCB3aXRoIHRoZSBTdG9ja2hvbG0gQ2l0eSBDb3VydCBhcyB0aGUgZmlyc3QKK2luc3RhbmNlLgorIAorRVhISUJJVCBBLgorCitgYFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIEVybGFuZyBQdWJsaWMgTGljZW5zZSwKK1ZlcnNpb24gMS4xLCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCitjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlCitFcmxhbmcgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvZnR3YXJlLiBJZiBub3QsIGl0IGNhbiBiZQorcmV0cmlldmVkIHZpYSB0aGUgd29ybGQgd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5lcmxhbmcub3JnLy4KKworU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZQordGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBFcmljc3NvbiBVdHZlY2tsaW5ncyBBQi4KK1BvcnRpb25zIGNyZWF0ZWQgYnkgRXJpY3Nzb24gYXJlIENvcHlyaWdodCAxOTk5LCBFcmljc3NvbiBVdHZlY2tsaW5ncworQUIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuYGAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9GU0YtVW5saW1pdGVkIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9GU0YtVW5saW1pdGVkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMGE5ODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0ZTRi1VbmxpbWl0ZWQKQEAgLTAsMCArMSw0IEBACitDb3B5cmlnaHQgKEMpIDE5OTctMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAord2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9GYWlyIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9GYWlyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NWIwMWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0ZhaXIKQEAgLTAsMCArMSwxMSBAQAorCitGYWlyIExpY2Vuc2UKKyhwbGFpbiB0ZXh0KQorPENvcHlyaWdodCBJbmZvcm1hdGlvbj4KKworVXNhZ2Ugb2YgdGhlIHdvcmtzIGlzIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoaXMgaW5zdHJ1bWVudCBpcyByZXRhaW5lZCB3aXRoIHRoZSB3b3Jrcywgc28gdGhhdCBhbnkgZW50aXR5IHRoYXQgdXNlcyB0aGUgd29ya3MgaXMgbm90aWZpZWQgb2YgdGhpcyBpbnN0cnVtZW50LgorCitESVNDTEFJTUVSOiBUSEUgV09SS1MgQVJFIFdJVEhPVVQgV0FSUkFOVFkuCisKK1syMDA0LCBGYWlyIExpY2Vuc2U6IHJoaWQuY29tL2ZhaXIgKHRoaXMgVVJMIG5vIGxvbmdlciB3b3JrcyldCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRnJhbWV3b3J4LTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRnJhbWV3b3J4LTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWJiMTg0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9GcmFtZXdvcngtMS4wCkBAIC0wLDAgKzEsNjkgQEAKKworVEhFIEZSQU1FV09SWCBPUEVOIExJQ0VOU0UgMS4wCitUaGlzIExpY2Vuc2UgQWdyZWVtZW50LCBUaGUgRnJhbWV3b3J4IE9wZW4gTGljZW5zZSAxLjAsIGhhcyBiZWVuIGVudGVyZWQgaW50byBiZXR3ZWVuIFRoZSBGcmFtZXdvcnggQ29tcGFueSBhbmQgeW91LCB0aGUgbGljZW5zZWUgaGVyZXVuZGVyLCBlZmZlY3RpdmUgYXMgb2YgWW91ciBhY2NlcHRhbmNlIG9mIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlIG9yIGFuIERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIChlYWNoIGFzIGRlZmluZWQgYmVsb3cpLgorCitBR1JFRU1FTlQgQkFDS0dST1VORAorVGhlIEZyYW1ld29yeCBDb21wYW55IGlzIGNvbW1pdHRlZCB0byB0aGUgYmVsaWVmIHRoYXQgb3BlbiBzb3VyY2Ugc29mdHdhcmUgcmVzdWx0cyBpbiBiZXR0ZXIgcXVhbGl0eSwgZ3JlYXRlciB0ZWNobmljYWwgYW5kIHByb2R1Y3QgaW5ub3ZhdGlvbiBpbiB0aGUgbWFya2V0IHBsYWNlIGFuZCBhIG1vcmUgZW1wb3dlcmVkIGFuZCBwcm9kdWN0aXZlIGRldmVsb3BlciBhbmQgZW5kLXVzZXIgY29tbXVuaXR5LiBPdXIgb2JqZWN0aXZlIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBpbXByb3ZlbWVudHMgYW5kIGlubm92YXRpb25zIHRvIGl0LCByZW1haW4gZnJlZSBhbmQgb3BlbiB0byB0aGUgY29tbXVuaXR5LlRvIGZ1cnRoZXIgdGhlc2UgYmVsaWVmcyBhbmQgb2JqZWN0aXZlcywgd2UgYXJlIGRpc3RyaWJ1dGluZyB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSwgd2l0aG91dCByb3lhbHRpZXMgYW5kIGluIHNvdXJjZSBjb2RlIGZvcm0sIHRvIHRoZSBjb21tdW5pdHkgcHVyc3VhbnQgdG8gdGhpcyBMaWNlbnNlIEFncmVlbWVudC4KKworQUdSRUVNRU5UIFRFUk1TCitUaGUgRnJhbWV3b3J4IENvbXBhbnkgYW5kIFlvdSBoYXZlIGFncmVlZCBhcyBmb2xsb3dzOgorMS5EZWZpbml0aW9ucy5UaGUgZm9sbG93aW5nIHRlcm1zIGhhdmUgdGhlIGZvbGxvd2luZyByZXNwZWN0aXZlIG1lYW5pbmdzOgorCisoYSkgICAgIEZyYW1ld29yeCBDb2RlIEJhc2UgbWVhbnMgdGhlIHNvZnR3YXJlIGRldmVsb3BlZCBieSBUaGUgRnJhbWV3b3J4IENvbXBhbnkgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQKKworKGIpICAgICBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbiBtZWFucyBhbnkgZGlyZWN0IG9yIGluZGlyZWN0IHJlbGVhc2UsIGRpc3RyaWJ1dGlvbiBvciByZW1vdGUgYXZhaWxhYmlsaXR5IG9mIHNvZnR3YXJlIChpKSB0aGF0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgY29udGFpbnMsIG9yIGRlcGVuZHMgZm9yIGl0cyBpbnRlbmRlZCBmdW5jdGlvbmluZyBvbiwgdGhlIEZyYW1ld29yeCBDb2RlIEJhc2Ugb3IgYW55IHBvcnRpb24gb3IgZWxlbWVudCB0aGVyZW9mIGFuZCAoaWkpIGluIHdoaWNoIHJpZ2h0cyB0byB1c2UgYW5kIGRpc3RyaWJ1dGUgc3VjaCBGcmFtZXdvcnggQ29kZSBCYXNlIHNvZnR3YXJlIGRlcGVuZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb24gdGhlIExpY2Vuc2UgcHJvdmlkZWQgaW4gU2VjdGlvbiAyIGJlbG93LgorCisoYykgICAgICJTb3VyY2UgQ29kZSIgdG8gYW55IHNvZnR3YXJlIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhhdCBzb2Z0d2FyZSwgaW5jbHVkaW5nIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFuZCBjb21waWxhdGlvbiBvciBpbnN0YWxsYXRpb24gc2NyaXB0cywgb3IgYW55IHZlcnNpb24gdGhlcmVvZiB0aGF0IGhhcyBiZWVuIGNvbXByZXNzZWQgb3IgYXJjaGl2ZWQsIGFuZCBjYW4gYmUgcmVjb25zdGl0dXRlZCwgdXNpbmcgYW4gYXBwcm9wcmlhdGUgYW5kIGdlbmVyYWxseSBhdmFpbGFibGUgYXJjaGl2YWwgb3IgY29tcHJlc3Npb24gdGVjaG5vbG9neS4KKworKGQpICAgICBWYWx1ZS1BZGRlZCBTZXJ2aWNlcyBtZWFucyBhbnkgY29tbWVyY2lhbCBvciBmZWUtYmFzZWQgc29mdHdhcmUtcmVsYXRlZCBzZXJ2aWNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uOiBzeXN0ZW0gb3IgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgb3IgY29uc3VsdGluZzsgdGVjaG5pY2FsIG9yIGVuZC11c2VyIHN1cHBvcnQgb3IgdHJhaW5pbmc7IGRpc3RyaWJ1dGlvbiBtYWludGVuYW5jZSwgY29uZmlndXJhdGlvbiBvciB2ZXJzaW9uaW5nOyBvciBvdXRzb3VyY2VkLCBob3N0ZWQgb3IgbmV0d29yay1iYXNlZCBhcHBsaWNhdGlvbiBzZXJ2aWNlcy4KKworMi4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgaGVyZW9mLCBUaGUgRnJhbWV3b3J4IENvbXBhbnkgaGVyZWJ5IGdyYW50cyBZb3UgYSBub24tZXhjbHVzaXZlIGxpY2Vuc2UgKHRoZSBMaWNlbnNlKSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBhbmQgZm9yIG5vIGZlZSBvdGhlciB0aGFuIGEgbm9taW5hbCBjaGFyZ2UgcmVmbGVjdGluZyB0aGUgY29zdHMgb2YgcGh5c2ljYWwgZGlzdHJpYnV0aW9uLCB0bzoKKworKGEpICAgICB1c2UgdGhlIEZyYW1ld29yeCBDb2RlIEJhc2UsIGluIGVpdGhlciBTb3VyY2UgQ29kZSBvciBtYWNoaW5lLXJlYWRhYmxlIGZvcm07CisKKyhiKSAgICAgbWFrZSBtb2RpZmljYXRpb25zLCBhZGRpdGlvbnMgYW5kIGRlbGV0aW9ucyB0byB0aGUgY29udGVudCBvciBzdHJ1Y3R1cmUgb2YgdGhlIEZyYW1ld29yeCBDb2RlIEJhc2U7IG9yCisKKyhjKSAgICAgY3JlYXRlIGxhcmdlciB3b3JrcyBvciBkZXJpdmF0aXZlIHdvcmtzIGluY2x1ZGluZyB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSBvciBhbnkgcG9ydGlvbiBvciBlbGVtZW50IHRoZXJlb2Y7IGFuZAorCisoZCkgICAgIHJlbGVhc2UsIGRpc3RyaWJ1dGUgb3IgbWFrZSBhdmFpbGFibGUsIGVpdGhlciBnZW5lcmFsbHkgb3IgdG8gYW55IHNwZWNpZmljIHRoaXJkLXBhcnR5LCBhbnkgb2YgdGhlIGZvcmVnb2luZyBpbiBTb3VyY2UgQ29kZSBvciBiaW5hcnkgZm9ybS4KKworMy4gTGljZW5zZSBDb25kaXRpb25zLiBUaGUgZ3JhbnQgb2YgdGhlIExpY2Vuc2UgdW5kZXIgU2VjdGlvbiAxIGhlcmVvZiwgYW5kIHlvdXIgZXhlcmNpc2Ugb2YgYWxsIHJpZ2h0cyBpbiBjb25uZWN0aW9uIHdpdGggdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgd2lsbCByZW1haW4gc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLCBhcyB3ZWxsIGFzIHRvIHRoZSBvdGhlciBwcm92aXNpb25zIGhlcmVvZjoKKworKGEpICAgICBDb21wbGV0ZSBTb3VyY2UgQ29kZSBmb3IgYW55IERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgbWFkZSBieSBZb3UgdGhhdCBjb250YWlucywgb3IgZGVwZW5kcyBmb3IgaXRzIGludGVuZGVkIGZ1bmN0aW9uYWxpdHkgb24sIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlLCBvciBhbnkgcG9ydGlvbiBvciBlbGVtZW50IHRoZXJlb2YsIHNoYWxsIGJlIG1hZGUgZnJlZWx5IGF2YWlsYWJsZSB0byBhbGwgdXNlcnMgdGhlcmVvZiBvbiB0ZXJtcyBhbmQgY29uZGl0aW9ucyBubyBtb3JlIHJlc3RyaWN0aXZlLCBhbmQgbm8gbGVzcyBmYXZvcmFibGUgZm9yIGFueSB1c2VyIChpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgd2l0aCByZWdhcmQgdG8gU291cmNlIENvZGUgYXZhaWxhYmlsaXR5IGFuZCByb3lhbHR5LWZyZWUgdXNlKSB0aGFuIHRob3NlIHRlcm1zIGFuZCBjb25kaXRpb25zIHByb3ZpZGVkIGluIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuCisKKyhiKSAgICAgQW55IFZhbHVlLUFkZGVkIFNlcnZpY2VzIHRoYXQgeW91IG9mZmVyIG9yIHByb3ZpZGUsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGluIHJlbGF0aW9uIHRvIGFueSBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbiBzaGFsbCBiZSBvZmZlcmVkIGFuZCBwcm92aWRlZCBvbiBjb21tZXJjaWFsIHRlcm1zIHRoYXQgYXJlIHJlYXNvbmFibHkgY29tbWVuc3VyYXRlIHRvIHRoZSBmYWlyIG1hcmtldCB2YWx1ZSBvZiBzdWNoIFZhbHVlLUFkZGVkIFNlcnZpY2VzLiBJbiBhZGRpdGlvbiwgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9uIHdoaWNoIGFueSBzdWNoIFZhbHVlIEFkZGVkIFNlcnZpY2VzIGFyZSBzbyBvZmZlcmVkIG9yIHByb3ZpZGVkIHNoYWxsIGJlIGNvbnNpc3RlbnQgd2l0aCwgYW5kIHNoYWxsIGZ1bGx5IHN1cHBvcnQsIHRoZSBpbnRlbnQgYW5kIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4KKworKGMpICAgICBBbGwgRG93bnN0cmVhbSBEaXN0cmlidXRpb25zIHNoYWxsOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkpICAgICAgICAgICAgaW5jbHVkZSBhbGwgcG9ydGlvbnMgYW5kIGVsZW1lbnRzIG9mIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZSBTb3VyY2UgQ29kZSBvZiBzdWNoIERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIGludG8gYSBmdWxseSBmdW5jdGlvbmFsIG1hY2hpbmUtZXhlY3V0YWJsZSBzeXN0ZW0sIG9yIGFkZGl0aW9uYWwgYnVpbGQgc2NyaXB0cyBvciBjb21wYXJhYmxlIHNvZnR3YXJlIG5lY2Vzc2FyeSBhbmQgc3VmZmljaWVudCBmb3Igc3VjaCBwdXJwb3NlczsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWkpICAgICAgICAgICAgaW5jbHVkZSwgaW4gZWFjaCBmaWxlIGNvbnRhaW5pbmcgYW55IHBvcnRpb24gb3IgZWxlbWVudCBvZiB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSwgdGhlIGZvbGxvd2luZyBpZGVudGlmeWluZyBsZWdlbmQ6IFRoaXMgZmlsZSBjb250YWlucyBzb2Z0d2FyZSB0aGF0IGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHVuZGVyIFRoZSBGcmFtZXdvcnggT3BlbiBMaWNlbnNlIDEuMC4gVXNlIGFuZCBkaXN0cmlidXRpb24gaGVyZW9mIGFyZSBzdWJqZWN0IHRvIHRoZSByZXN0cmljdGlvbnMgc2V0IGZvcnRoIHRoZXJlaW4uCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWlpKSAgICAgICAgICAgIGluY2x1ZGUgYWxsIG90aGVyIGNvcHlyaWdodCBub3RpY2VzLCBhdXRob3JzaGlwIGNyZWRpdHMsIHdhcnJhbnR5IGRpc2NsYWltZXJzIChpbmNsdWRpbmcgdGhhdCBwcm92aWRlZCBpbiBTZWN0aW9uIDYgYmVsb3cpLCBsZWdlbmRzLCBkb2N1bWVudGF0aW9uLCBhbm5vdGF0aW9ucyBhbmQgY29tbWVudHMgY29udGFpbmVkIGluIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlIGFzIHByb3ZpZGVkIHRvIFlvdSBoZXJldW5kZXI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXYpICAgICAgICAgICAgY29udGFpbiBhbiB1bmFsdGVyZWQgY29weSBvZiB0aGUgaHRtbCBmaWxlIG5hbWVkIGZyYW1ld29yeF9jb21tdW5pdHlfaW52aXRhdGlvbi5odG1sIGluY2x1ZGVkIHdpdGhpbiB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSB0aGF0IGFja25vd2xlZGdlcyBuZXcgdXNlcnMgYW5kIHByb3ZpZGVzIHRoZW0gd2l0aCBpbmZvcm1hdGlvbiBvbiB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSBjb21tdW5pdHk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2KSAgICAgICAgICAgIGNvbnRhaW4gYW4gdW5hbHRlcmVkIGNvcHkgb2YgdGhlIHRleHQgZmlsZSBuYW1lZCB0aGVfZnJhbWV3b3J4X2xpY2Vuc2UudHh0IGluY2x1ZGVkIHdpdGhpbiB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSB0aGF0IGluY2x1ZGVzIGEgdGV4dCBjb3B5IG9mIHRoZSBmb3JtIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQ7IGFuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZpKSAgICAgICAgICAgIHByb21pbmVudGx5IGRpc3BsYXkgdG8gYW55IHZpZXdlciBvciB1c2VyIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiBzdWNoIE9wZW4gRG93bnN0cmVhbSBEaXN0cmlidXRpb24sIGluIHRoZSBwbGFjZSBhbmQgbWFubmVyIG5vcm1hbGx5IHVzZWQgZm9yIHN1Y2ggZGlzcGxheXMsIHRoZSBmb2xsb3dpbmcgbGVnZW5kOgorCitTb3VyY2UgY29kZSBsaWNlbnNlZCB1bmRlciBmcm9tIFRoZSBGcmFtZXdvcnggQ29tcGFueSBpcyBjb250YWluZWQgaGVyZWluLCBhbmQgc3VjaCBzb3VyY2UgY29kZSBoYXMgYmVlbiBvYnRhaW5lZCBlaXRoZXIgdW5kZXIgVGhlIEZyYW1ld29yeCBPcGVuIExpY2Vuc2UsIG9yIGFub3RoZXIgbGljZW5zZSBncmFudGVkIGJ5IFRoZSBGcmFtZXdvcnggQ29tcGFueS4gVXNlIGFuZCBkaXN0cmlidXRpb24gaGVyZW9mIGlzIHN1YmplY3QgdG8gdGhlIHJlc3RyaWN0aW9ucyBwcm92aWRlZCBpbiB0aGUgcmVsZXZhbnQgc3VjaCBsaWNlbnNlIGFuZCB0byB0aGUgY29weXJpZ2h0cyBvZiB0aGUgbGljZW5zb3IgdGhlcmV1bmRlci4gQSBjb3B5IG9mIFRoZSBGcmFtZXdvcnggT3BlbiBMaWNlbnNlIGlzIHByb3ZpZGVkIGluIGEgZmlsZSBuYW1lZCB0aGVfZnJhbWV3b3J4X2xpY2Vuc2UudHh0IGFuZCBpbmNsdWRlZCBoZXJlaW4sIGFuZCBtYXkgYWxzbyBiZSBhdmFpbGFibGUgZm9yIGluc3BlY3Rpb24gYXQgaHR0cDovL3d3dy5mcmFtZXdvcnguY29tLgorCis0LiBSZXN0cmljdGlvbnMgb24gT3BlbiBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbnMuIEVhY2ggRG93bnN0cmVhbSBEaXN0cmlidXRpb24gbWFkZSBieSBZb3UsIGFuZCBieSBhbnkgcGFydHkgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBvYnRhaW5pbmcgcmlnaHRzIHRvIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlIHRocm91Z2ggWW91LCBzaGFsbCBiZSBtYWRlIHN1YmplY3QgdG8gYSBsaWNlbnNlIGdyYW50IG9yIGFncmVlbWVudCB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSBzbyB0aGF0IGVhY2ggZGlzdHJpYnV0ZWUgdW5kZXIgdGhhdCBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbiB3aWxsIGJlIHN1YmplY3QgdG8gdGhlIHNhbWUgcmVzdHJpY3Rpb25zIG9uIHJlLWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGFzIGFyZSBiaW5kaW5nIG9uIFlvdSBoZXJldW5kZXIuIFlvdSBtYXkgc2F0aXNmeSB0aGlzIGxpY2Vuc2luZyByZXF1aXJlbWVudCBlaXRoZXIgYnk6CisKKyhhKSAgICAgcmVxdWlyaW5nIGFzIGEgY29uZGl0aW9uIHRvIGFueSBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbiBtYWRlIGJ5IHlvdSwgb3IgYnkgYW55IGRpcmVjdCBvciBpbmRpcmVjdCBkaXN0cmlidXRlZSBvZiBZb3VyIERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIChvciBhbnkgcG9ydGlvbiBvciBlbGVtZW50IHRoZXJlb2YpLCB0aGF0IGVhY2ggZGlzdHJpYnV0ZWUgdW5kZXIgdGhlIHJlbGV2YW50IERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIG9idGFpbiBhIGRpcmVjdCBsaWNlbnNlIChvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aG9zZSBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50KSBmcm9tIFRoZSBGcmFtZXdvcnggQ29tcGFueTsgb3IKKworKGIpICAgICBzdWItbGljZW5zaW5nIGFsbCAoYW5kIG5vdCBsZXNzIHRoYW4gYWxsKSBvZiBZb3VyIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgaGVyZXVuZGVyIHRvIHRoYXQgZGlzdHJpYnV0ZWUsIGluY2x1ZGluZyAod2l0aG91dCBsaW1pdGF0aW9uKSBZb3VyIG9ibGlnYXRpb24gdG8gcmVxdWlyZSBkaXN0cmlidXRlZXMgdG8gYmUgYm91bmQgYnkgbGljZW5zZSByZXN0cmljdGlvbnMgYXMgY29udGVtcGxhdGVkIGJ5IHRoaXMgU2VjdGlvbiA0IGFib3ZlLgorCitUaGUgRnJhbWV3b3J4IENvbXBhbnkgaGVyZWJ5IGdyYW50cyB0byB5b3UgYWxsIHJpZ2h0cyB0byBzdWItbGljZW5zZSB5b3VyIHJpZ2h0cyBoZXJldW5kZXIgYXMgbmVjZXNzYXJ5IHRvIGZ1bGx5IGVmZmVjdCB0aGUgaW50ZW50IGFuZCBwdXJwb3NlIG9mIHRoaXMgU2VjdGlvbiA0IGFib3ZlLCBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCB5b3VyIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgaGVyZXVuZGVyIHNoYWxsIGJlIHVuYWZmZWN0ZWQgYnkgYW55IHN1Y2ggc3VibGljZW5zaW5nLiBJbiBhZGRpdGlvbiwgVGhlIEZyYW1ld29yeCBDb21wYW55IGV4cHJlc3NseSByZXRhaW5zIGFsbCByaWdodHMgdG8gdGFrZSBhbGwgYXBwcm9wcmlhdGUgYWN0aW9uIChpbmNsdWRpbmcgbGVnYWwgYWN0aW9uKSBhZ2FpbnN0IGFueSBzdWNoIGRpcmVjdCBvciBpbmRpcmVjdCBzdWItbGljZW5zZWUgdG8gZW5zdXJlIGl0cyBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aGUgaW50ZW50IGFuZCBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LgorCis1LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkuIEV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgaGVyZWluLCB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHByZXNlcnZlcyBhbmQgcmVzcGVjdHMgWW91ciBhbmQgVGhlIEZyYW1ld29yeCBDb21wYW55cyByZXNwZWN0aXZlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMsIGluY2x1ZGluZywgaW4gdGhlIGNhc2Ugb2YgVGhlIEZyYW1ld29yeCBDb21wYW55LCBpdHMgY29weXJpZ2h0cyBhbmQgcGF0ZW50IHJpZ2h0cyByZWxhdGluZyB0byB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZS4KKworNi4gV2FycmFudHkgRGlzY2xhaW1lci4gVEhFIFNPRlRXQVJFIExJQ0VOU0VEIEhFUkVVTkRFUiBJUyBQUk9WSURFRCBgYEFTIElTLmBgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQsIEFSRSBIRVJFQlkgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIExJQ0VOU09SIE9GIFRISVMgU09GVFdBUkUsIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIElOQ0xVRElORyAoQlVUIE5PVCBMSU1JVEVEIFRPKSBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFkgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworNy4gTGljZW5zZSBWaW9sYXRpb24uIFRoZSBMaWNlbnNlLCBhbmQgYWxsIG9mIHlvdXIgcmlnaHRzIHRoZXJldW5kZXIsIHNoYWxsIGJlIGRlZW1lZCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZWQgYW5kIHZvaWQgYXMgb2YgYW55IERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgbWFkZSBvciBmYWNpbGl0YXRlZCBieSBZb3UgdGhhdCB2aW9sYXRlcyB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIHN1cnZpdmUgYW55IHN1Y2ggdGVybWluYXRpb24gaW4gb3JkZXIgdG8gcmVtZWR5IHRoZSBlZmZlY3RzIG9mIHN1Y2ggdmlvbGF0aW9uLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGJpbmRpbmcgb24gdGhlIGxlZ2FsIHN1Y2Nlc3NvcnMgYW5kIGFzc2lnbnMgb2YgdGhlIHBhcnRpZXMgaGVyZXRvLgorCitZb3VyIGFncmVlbWVudCB0byB0aGUgZm9yZWdvaW5nIGFzIG9mIHRoZSBkYXRlIGhlcmVvZiBoYXMgYmVlbiBldmlkZW5jZWQgYnkgeW91ciBhY2NlcHRhbmNlIG9mIHRoZSByZWxldmFudCBzb2Z0d2FyZSBkaXN0cmlidXRpb24gaGVyZXVuZGVyLgorCisoQykgVEhFIEZSQU1FV09SWCBDT01QQU5ZIDIwMDMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9GcmVlVHlwZSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRnJlZVR5cGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdkNGQxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRnJlZVR5cGUKQEAgLTAsMCArMSwxNzAgQEAKKyAgICAgICAgICAgICAgICAgICAgVGhlIEZyZWVUeXBlIFByb2plY3QgTElDRU5TRQorICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDA2LUphbi0yNworCisgICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAxOTk2LTIwMDIsIDIwMDYgYnkKKyAgICAgICAgICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcKKworCisKK0ludHJvZHVjdGlvbgorPT09PT09PT09PT09CisKKyAgVGhlIEZyZWVUeXBlICBQcm9qZWN0IGlzIGRpc3RyaWJ1dGVkIGluICBzZXZlcmFsIGFyY2hpdmUgcGFja2FnZXM7CisgIHNvbWUgb2YgdGhlbSBtYXkgY29udGFpbiwgaW4gYWRkaXRpb24gdG8gdGhlIEZyZWVUeXBlIGZvbnQgZW5naW5lLAorICB2YXJpb3VzIHRvb2xzIGFuZCAgY29udHJpYnV0aW9ucyB3aGljaCByZWx5IG9uLCBvciAgcmVsYXRlIHRvLCB0aGUKKyAgRnJlZVR5cGUgUHJvamVjdC4KKworICBUaGlzICBsaWNlbnNlIGFwcGxpZXMgIHRvIGFsbCAgZmlsZXMgZm91bmQgIGluIHN1Y2ggIHBhY2thZ2VzLCBhbmQKKyAgd2hpY2ggZG8gbm90ICBmYWxsIHVuZGVyIHRoZWlyIG93biBleHBsaWNpdCAgbGljZW5zZS4gIFRoZSBsaWNlbnNlCisgIGFmZmVjdHMgIHRodXMgIHRoZSAgRnJlZVR5cGUgICBmb250ICBlbmdpbmUsICB0aGUgIHRlc3QgIHByb2dyYW1zLAorICBkb2N1bWVudGF0aW9uIGFuZCBtYWtlZmlsZXMsIGF0IHRoZSB2ZXJ5IGxlYXN0LgorCisgIFRoaXMgIGxpY2Vuc2UgICB3YXMgIGluc3BpcmVkICBieSAgdGhlICBCU0QsICAgQXJ0aXN0aWMsICBhbmQgIElKRworICAoSW5kZXBlbmRlbnQgSlBFRyAgR3JvdXApIGxpY2Vuc2VzLCB3aGljaCAgYWxsIGVuY291cmFnZSBpbmNsdXNpb24KKyAgYW5kICB1c2Ugb2YgIGZyZWUgIHNvZnR3YXJlIGluICBjb21tZXJjaWFsICBhbmQgZnJlZXdhcmUgIHByb2R1Y3RzCisgIGFsaWtlLiAgQXMgYSBjb25zZXF1ZW5jZSwgaXRzIG1haW4gcG9pbnRzIGFyZSB0aGF0OgorCisgICAgbyBXZSBkb24ndCBwcm9taXNlIHRoYXQgdGhpcyBzb2Z0d2FyZSB3b3Jrcy4gSG93ZXZlciwgd2Ugd2lsbCBiZQorICAgICAgaW50ZXJlc3RlZCBpbiBhbnkga2luZCBvZiBidWcgcmVwb3J0cy4gKGBhcyBpcycgZGlzdHJpYnV0aW9uKQorCisgICAgbyBZb3UgY2FuICB1c2UgdGhpcyBzb2Z0d2FyZSBmb3Igd2hhdGV2ZXIgeW91ICB3YW50LCBpbiBwYXJ0cyBvcgorICAgICAgZnVsbCBmb3JtLCB3aXRob3V0IGhhdmluZyB0byBwYXkgdXMuIChgcm95YWx0eS1mcmVlJyB1c2FnZSkKKworICAgIG8gWW91IG1heSBub3QgcHJldGVuZCB0aGF0ICB5b3Ugd3JvdGUgdGhpcyBzb2Z0d2FyZS4gIElmIHlvdSB1c2UKKyAgICAgIGl0LCBvciAgb25seSBwYXJ0cyBvZiBpdCwgIGluIGEgcHJvZ3JhbSwgIHlvdSBtdXN0IGFja25vd2xlZGdlCisgICAgICBzb21ld2hlcmUgIGluICB5b3VyICBkb2N1bWVudGF0aW9uICB0aGF0ICB5b3UgIGhhdmUgIHVzZWQgIHRoZQorICAgICAgRnJlZVR5cGUgY29kZS4gKGBjcmVkaXRzJykKKworICBXZSAgc3BlY2lmaWNhbGx5ICBwZXJtaXQgIGFuZCAgZW5jb3VyYWdlICB0aGUgIGluY2x1c2lvbiAgb2YgIHRoaXMKKyAgc29mdHdhcmUsIHdpdGggIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgIGluIGNvbW1lcmNpYWwgcHJvZHVjdHMuCisgIFdlICBkaXNjbGFpbSAgYWxsIHdhcnJhbnRpZXMgIGNvdmVyaW5nICBUaGUgIEZyZWVUeXBlIFByb2plY3QgIGFuZAorICBhc3N1bWUgbm8gbGlhYmlsaXR5IHJlbGF0ZWQgdG8gVGhlIEZyZWVUeXBlIFByb2plY3QuCisKKworICBGaW5hbGx5LCAgbWFueSAgcGVvcGxlICBhc2tlZCAgdXMgIGZvciAgYSAgcHJlZmVycmVkICBmb3JtICBmb3IgIGEKKyAgY3JlZGl0L2Rpc2NsYWltZXIgdG8gdXNlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGlzIGxpY2Vuc2UuICBXZSB0aHVzCisgIGVuY291cmFnZSB5b3UgdG8gdXNlIHRoZSBmb2xsb3dpbmcgdGV4dDoKKworICAgIiIiICAKKyAgICBQb3J0aW9ucyBvZiB0aGlzIHNvZnR3YXJlIGFyZSBjb3B5cmlnaHQg77+9IDx5ZWFyPiBUaGUgRnJlZVR5cGUKKyAgICBQcm9qZWN0ICh3d3cuZnJlZXR5cGUub3JnKS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAiIiIKKworICBQbGVhc2UgcmVwbGFjZSA8eWVhcj4gd2l0aCB0aGUgdmFsdWUgZnJvbSB0aGUgRnJlZVR5cGUgdmVyc2lvbiB5b3UKKyAgYWN0dWFsbHkgdXNlLgorCisKK0xlZ2FsIFRlcm1zCis9PT09PT09PT09PQorCiswLiBEZWZpbml0aW9ucworLS0tLS0tLS0tLS0tLS0KKworICBUaHJvdWdob3V0IHRoaXMgbGljZW5zZSwgIHRoZSB0ZXJtcyBgcGFja2FnZScsIGBGcmVlVHlwZSBQcm9qZWN0JywKKyAgYW5kICBgRnJlZVR5cGUgIGFyY2hpdmUnIHJlZmVyICB0byAgdGhlICBzZXQgIG9mIGZpbGVzICBvcmlnaW5hbGx5CisgIGRpc3RyaWJ1dGVkICBieSB0aGUgIGF1dGhvcnMgIChEYXZpZCBUdXJuZXIsICBSb2JlcnQgV2lsaGVsbSwgIGFuZAorICBXZXJuZXIgTGVtYmVyZykgYXMgdGhlIGBGcmVlVHlwZSBQcm9qZWN0JywgYmUgdGhleSBuYW1lZCBhcyBhbHBoYSwKKyAgYmV0YSBvciBmaW5hbCByZWxlYXNlLgorCisgIGBZb3UnIHJlZmVycyB0byAgdGhlIGxpY2Vuc2VlLCBvciBwZXJzb24gdXNpbmcgIHRoZSBwcm9qZWN0LCB3aGVyZQorICBgdXNpbmcnIGlzIGEgZ2VuZXJpYyB0ZXJtIGluY2x1ZGluZyBjb21waWxpbmcgdGhlIHByb2plY3QncyBzb3VyY2UKKyAgY29kZSBhcyAgd2VsbCBhcyBsaW5raW5nIGl0ICB0byBmb3JtIGEgIGBwcm9ncmFtJyBvciBgZXhlY3V0YWJsZScuCisgIFRoaXMgIHByb2dyYW0gaXMgIHJlZmVycmVkIHRvICBhcyAgYGEgcHJvZ3JhbSAgdXNpbmcgdGhlICBGcmVlVHlwZQorICBlbmdpbmUnLgorCisgIFRoaXMgIGxpY2Vuc2UgYXBwbGllcyAgdG8gYWxsICBmaWxlcyBkaXN0cmlidXRlZCAgaW4gIHRoZSBvcmlnaW5hbAorICBGcmVlVHlwZSAgUHJvamVjdCwgICBpbmNsdWRpbmcgIGFsbCAgc291cmNlICAgY29kZSwgIGJpbmFyaWVzICBhbmQKKyAgZG9jdW1lbnRhdGlvbiwgIHVubGVzcyAgb3RoZXJ3aXNlICBzdGF0ZWQgICBpbiAgdGhlICBmaWxlICBpbiAgaXRzCisgIG9yaWdpbmFsLCB1bm1vZGlmaWVkIGZvcm0gYXMgIGRpc3RyaWJ1dGVkIGluIHRoZSBvcmlnaW5hbCBhcmNoaXZlLgorICBJZiB5b3UgYXJlICB1bnN1cmUgd2hldGhlciBvciBub3QgYSBwYXJ0aWN1bGFyICBmaWxlIGlzIGNvdmVyZWQgYnkKKyAgdGhpcyBsaWNlbnNlLCB5b3UgbXVzdCBjb250YWN0IHVzIHRvIHZlcmlmeSB0aGlzLgorCisgIFRoZSBGcmVlVHlwZSAgUHJvamVjdCBpcyBjb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCAgYnkgRGF2aWQgVHVybmVyLAorICBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgQWxsIHJpZ2h0cyByZXNlcnZlZCBleGNlcHQgYXMKKyAgc3BlY2lmaWVkIGJlbG93LgorCisxLiBObyBXYXJyYW50eQorLS0tLS0tLS0tLS0tLS0KKworICBUSEUgRlJFRVRZUEUgUFJPSkVDVCAgSVMgUFJPVklERUQgYEFTIElTJyBXSVRIT1VUICBXQVJSQU5UWSBPRiBBTlkKKyAgS0lORCwgRUlUSEVSICBFWFBSRVNTIE9SIElNUExJRUQsICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgVE8sCisgIFdBUlJBTlRJRVMgIE9GICBNRVJDSEFOVEFCSUxJVFkgICBBTkQgIEZJVE5FU1MgIEZPUiAgQSAgUEFSVElDVUxBUgorICBQVVJQT1NFLiAgSU4gTk8gRVZFTlQgV0lMTCBBTlkgT0YgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAgQkUgTElBQkxFICBGT1IgQU5ZIERBTUFHRVMgQ0FVU0VEICBCWSBUSEUgVVNFIE9SICBUSEUgSU5BQklMSVRZIFRPCisgIFVTRSwgT0YgVEhFIEZSRUVUWVBFIFBST0pFQ1QuCisKKzIuIFJlZGlzdHJpYnV0aW9uCistLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoaXMgIGxpY2Vuc2UgIGdyYW50cyAgYSAgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsICBwZXJwZXR1YWwgIGFuZAorICBpcnJldm9jYWJsZSByaWdodCAgYW5kIGxpY2Vuc2UgdG8gdXNlLCAgZXhlY3V0ZSwgcGVyZm9ybSwgY29tcGlsZSwKKyAgZGlzcGxheSwgIGNvcHksICAgY3JlYXRlICBkZXJpdmF0aXZlICB3b3JrcyAgIG9mLCAgZGlzdHJpYnV0ZSAgYW5kCisgIHN1YmxpY2Vuc2UgdGhlICBGcmVlVHlwZSBQcm9qZWN0IChpbiAgYm90aCBzb3VyY2UgYW5kICBvYmplY3QgY29kZQorICBmb3JtcykgIGFuZCAgZGVyaXZhdGl2ZSB3b3JrcyAgdGhlcmVvZiAgZm9yICBhbnkgIHB1cnBvc2U7IGFuZCAgdG8KKyAgYXV0aG9yaXplIG90aGVycyAgdG8gZXhlcmNpc2UgIHNvbWUgb3IgYWxsICBvZiB0aGUgIHJpZ2h0cyBncmFudGVkCisgIGhlcmVpbiwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICBvIFJlZGlzdHJpYnV0aW9uIG9mICBzb3VyY2UgY29kZSAgbXVzdCByZXRhaW4gdGhpcyAgbGljZW5zZSBmaWxlCisgICAgICAoYEZUTC5UWFQnKSB1bmFsdGVyZWQ7IGFueSAgYWRkaXRpb25zLCBkZWxldGlvbnMgb3IgY2hhbmdlcyB0bworICAgICAgdGhlIG9yaWdpbmFsICBmaWxlcyBtdXN0IGJlIGNsZWFybHkgIGluZGljYXRlZCBpbiBhY2NvbXBhbnlpbmcKKyAgICAgIGRvY3VtZW50YXRpb24uICAgVGhlICBjb3B5cmlnaHQgICBub3RpY2VzICBvZiAgdGhlICB1bmFsdGVyZWQsCisgICAgICBvcmlnaW5hbCAgZmlsZXMgbXVzdCAgYmUgIHByZXNlcnZlZCBpbiAgYWxsICBjb3BpZXMgb2YgIHNvdXJjZQorICAgICAgZmlsZXMuCisKKyAgICBvIFJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSBmb3JtIG11c3QgcHJvdmlkZSBhICBkaXNjbGFpbWVyICB0aGF0CisgICAgICBzdGF0ZXMgIHRoYXQgIHRoZSBzb2Z0d2FyZSBpcyBiYXNlZCBpbiBwYXJ0IG9mIHRoZSB3b3JrIG9mIHRoZQorICAgICAgRnJlZVR5cGUgVGVhbSwgIGluICB0aGUgIGRpc3RyaWJ1dGlvbiAgZG9jdW1lbnRhdGlvbi4gIFdlIGFsc28KKyAgICAgIGVuY291cmFnZSB5b3UgdG8gcHV0IGFuIFVSTCB0byB0aGUgRnJlZVR5cGUgd2ViIHBhZ2UgIGluICB5b3VyCisgICAgICBkb2N1bWVudGF0aW9uLCB0aG91Z2ggdGhpcyBpc24ndCBtYW5kYXRvcnkuCisKKyAgVGhlc2UgY29uZGl0aW9ucyAgYXBwbHkgdG8gYW55ICBzb2Z0d2FyZSBkZXJpdmVkIGZyb20gb3IgIGJhc2VkIG9uCisgIHRoZSBGcmVlVHlwZSBQcm9qZWN0LCAgbm90IGp1c3QgdGhlIHVubW9kaWZpZWQgZmlsZXMuICAgSWYgeW91IHVzZQorICBvdXIgd29yaywgeW91ICBtdXN0IGFja25vd2xlZGdlIHVzLiAgSG93ZXZlciwgbm8gIGZlZSBuZWVkIGJlIHBhaWQKKyAgdG8gdXMuCisKKzMuIEFkdmVydGlzaW5nCistLS0tLS0tLS0tLS0tLQorCisgIE5laXRoZXIgdGhlICBGcmVlVHlwZSBhdXRob3JzIGFuZCAgY29udHJpYnV0b3JzIG5vciB5b3UgIHNoYWxsIHVzZQorICB0aGUgbmFtZSBvZiB0aGUgIG90aGVyIGZvciBjb21tZXJjaWFsLCBhZHZlcnRpc2luZywgb3IgcHJvbW90aW9uYWwKKyAgcHVycG9zZXMgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgV2Ugc3VnZ2VzdCwgIGJ1dCBkbyBub3QgcmVxdWlyZSwgdGhhdCAgeW91IHVzZSBvbmUgb3IgIG1vcmUgb2YgdGhlCisgIGZvbGxvd2luZyBwaHJhc2VzIHRvIHJlZmVyICB0byB0aGlzIHNvZnR3YXJlIGluIHlvdXIgZG9jdW1lbnRhdGlvbgorICBvciBhZHZlcnRpc2luZyAgbWF0ZXJpYWxzOiBgRnJlZVR5cGUgUHJvamVjdCcsICBgRnJlZVR5cGUgRW5naW5lJywKKyAgYEZyZWVUeXBlIGxpYnJhcnknLCBvciBgRnJlZVR5cGUgRGlzdHJpYnV0aW9uJy4KKworICBBcyAgeW91IGhhdmUgIG5vdCBzaWduZWQgIHRoaXMgbGljZW5zZSwgIHlvdSBhcmUgIG5vdCAgcmVxdWlyZWQgdG8KKyAgYWNjZXB0ICBpdC4gICBIb3dldmVyLCAgYXMgIHRoZSBGcmVlVHlwZSAgUHJvamVjdCAgaXMgIGNvcHlyaWdodGVkCisgIG1hdGVyaWFsLCBvbmx5ICB0aGlzIGxpY2Vuc2UsIG9yICBhbm90aGVyIG9uZSBjb250cmFjdGVkICB3aXRoIHRoZQorICBhdXRob3JzLCBncmFudHMgeW91ICB0aGUgcmlnaHQgdG8gdXNlLCBkaXN0cmlidXRlLCAgYW5kIG1vZGlmeSBpdC4KKyAgVGhlcmVmb3JlLCAgYnkgIHVzaW5nLCAgZGlzdHJpYnV0aW5nLCAgb3IgbW9kaWZ5aW5nICB0aGUgIEZyZWVUeXBlCisgIFByb2plY3QsIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgYWxsIHRoZSB0ZXJtcworICBvZiB0aGlzIGxpY2Vuc2UuCisKKzQuIENvbnRhY3RzCistLS0tLS0tLS0tLQorCisgIFRoZXJlIGFyZSB0d28gbWFpbGluZyBsaXN0cyByZWxhdGVkIHRvIEZyZWVUeXBlOgorCisgICAgbyBmcmVldHlwZUBub25nbnUub3JnCisKKyAgICAgIERpc2N1c3NlcyBnZW5lcmFsIHVzZSBhbmQgYXBwbGljYXRpb25zIG9mIEZyZWVUeXBlLCBhcyB3ZWxsIGFzCisgICAgICBmdXR1cmUgYW5kICB3YW50ZWQgYWRkaXRpb25zIHRvIHRoZSAgbGlicmFyeSBhbmQgZGlzdHJpYnV0aW9uLgorICAgICAgSWYgIHlvdSBhcmUgbG9va2luZyAgZm9yIHN1cHBvcnQsICBzdGFydCBpbiAgdGhpcyBsaXN0ICBpZiB5b3UKKyAgICAgIGhhdmVuJ3QgZm91bmQgYW55dGhpbmcgdG8gaGVscCB5b3UgaW4gdGhlIGRvY3VtZW50YXRpb24uCisKKyAgICBvIGZyZWV0eXBlLWRldmVsQG5vbmdudS5vcmcKKworICAgICAgRGlzY3Vzc2VzIGJ1Z3MsICBhcyB3ZWxsICBhcyBlbmdpbmUgaW50ZXJuYWxzLCAgZGVzaWduIGlzc3VlcywKKyAgICAgIHNwZWNpZmljIGxpY2Vuc2VzLCBwb3J0aW5nLCBldGMuCisKKyAgT3VyIGhvbWUgcGFnZSBjYW4gYmUgZm91bmQgYXQKKworICAgIGh0dHA6Ly93d3cuZnJlZXR5cGUub3JnCisKKworLS0tIGVuZCBvZiBGVEwuVFhUIC0tLQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dGREwtMS4xIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HRkRMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTBmZTFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HRkRMLTEuMQpAQCAtMCwwICsxLDM5NyBAQAorCQlHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UKKwkJICBWZXJzaW9uIDEuMiwgTm92ZW1iZXIgMjAwMgorCisKKyBDb3B5cmlnaHQgKEMpIDIwMDAsMjAwMSwyMDAyICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCiswLiBQUkVBTUJMRQorCitUaGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UgaXMgdG8gbWFrZSBhIG1hbnVhbCwgdGV4dGJvb2ssIG9yIG90aGVyCitmdW5jdGlvbmFsIGFuZCB1c2VmdWwgZG9jdW1lbnQgImZyZWUiIGluIHRoZSBzZW5zZSBvZiBmcmVlZG9tOiB0bworYXNzdXJlIGV2ZXJ5b25lIHRoZSBlZmZlY3RpdmUgZnJlZWRvbSB0byBjb3B5IGFuZCByZWRpc3RyaWJ1dGUgaXQsCit3aXRoIG9yIHdpdGhvdXQgbW9kaWZ5aW5nIGl0LCBlaXRoZXIgY29tbWVyY2lhbGx5IG9yIG5vbmNvbW1lcmNpYWxseS4KK1NlY29uZGFyaWx5LCB0aGlzIExpY2Vuc2UgcHJlc2VydmVzIGZvciB0aGUgYXV0aG9yIGFuZCBwdWJsaXNoZXIgYSB3YXkKK3RvIGdldCBjcmVkaXQgZm9yIHRoZWlyIHdvcmssIHdoaWxlIG5vdCBiZWluZyBjb25zaWRlcmVkIHJlc3BvbnNpYmxlCitmb3IgbW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG90aGVycy4KKworVGhpcyBMaWNlbnNlIGlzIGEga2luZCBvZiAiY29weWxlZnQiLCB3aGljaCBtZWFucyB0aGF0IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBkb2N1bWVudCBtdXN0IHRoZW1zZWx2ZXMgYmUgZnJlZSBpbiB0aGUgc2FtZSBzZW5zZS4gIEl0Citjb21wbGVtZW50cyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIGlzIGEgY29weWxlZnQKK2xpY2Vuc2UgZGVzaWduZWQgZm9yIGZyZWUgc29mdHdhcmUuCisKK1dlIGhhdmUgZGVzaWduZWQgdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIHVzZSBpdCBmb3IgbWFudWFscyBmb3IgZnJlZQorc29mdHdhcmUsIGJlY2F1c2UgZnJlZSBzb2Z0d2FyZSBuZWVkcyBmcmVlIGRvY3VtZW50YXRpb246IGEgZnJlZQorcHJvZ3JhbSBzaG91bGQgY29tZSB3aXRoIG1hbnVhbHMgcHJvdmlkaW5nIHRoZSBzYW1lIGZyZWVkb21zIHRoYXQgdGhlCitzb2Z0d2FyZSBkb2VzLiAgQnV0IHRoaXMgTGljZW5zZSBpcyBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBtYW51YWxzOworaXQgY2FuIGJlIHVzZWQgZm9yIGFueSB0ZXh0dWFsIHdvcmssIHJlZ2FyZGxlc3Mgb2Ygc3ViamVjdCBtYXR0ZXIgb3IKK3doZXRoZXIgaXQgaXMgcHVibGlzaGVkIGFzIGEgcHJpbnRlZCBib29rLiAgV2UgcmVjb21tZW5kIHRoaXMgTGljZW5zZQorcHJpbmNpcGFsbHkgZm9yIHdvcmtzIHdob3NlIHB1cnBvc2UgaXMgaW5zdHJ1Y3Rpb24gb3IgcmVmZXJlbmNlLgorCisKKzEuIEFQUExJQ0FCSUxJVFkgQU5EIERFRklOSVRJT05TCisKK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBtYW51YWwgb3Igb3RoZXIgd29yaywgaW4gYW55IG1lZGl1bSwgdGhhdAorY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBjYW4gYmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICBTdWNoIGEgbm90aWNlIGdyYW50cyBhCit3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSwgdW5saW1pdGVkIGluIGR1cmF0aW9uLCB0byB1c2UgdGhhdAord29yayB1bmRlciB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaGVyZWluLiAgVGhlICJEb2N1bWVudCIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIG1hbnVhbCBvciB3b3JrLiAgQW55IG1lbWJlciBvZiB0aGUgcHVibGljIGlzIGEKK2xpY2Vuc2VlLCBhbmQgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLiAgWW91IGFjY2VwdCB0aGUgbGljZW5zZSBpZiB5b3UKK2NvcHksIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSB3b3JrIGluIGEgd2F5IHJlcXVpcmluZyBwZXJtaXNzaW9uCit1bmRlciBjb3B5cmlnaHQgbGF3LgorCitBICJNb2RpZmllZCBWZXJzaW9uIiBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYW55IHdvcmsgY29udGFpbmluZyB0aGUKK0RvY3VtZW50IG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIGNvcGllZCB2ZXJiYXRpbSwgb3Igd2l0aAorbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuCisKK0EgIlNlY29uZGFyeSBTZWN0aW9uIiBpcyBhIG5hbWVkIGFwcGVuZGl4IG9yIGEgZnJvbnQtbWF0dGVyIHNlY3Rpb24gb2YKK3RoZSBEb2N1bWVudCB0aGF0IGRlYWxzIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGUKK3B1Ymxpc2hlcnMgb3IgYXV0aG9ycyBvZiB0aGUgRG9jdW1lbnQgdG8gdGhlIERvY3VtZW50J3Mgb3ZlcmFsbCBzdWJqZWN0Cisob3IgdG8gcmVsYXRlZCBtYXR0ZXJzKSBhbmQgY29udGFpbnMgbm90aGluZyB0aGF0IGNvdWxkIGZhbGwgZGlyZWN0bHkKK3dpdGhpbiB0aGF0IG92ZXJhbGwgc3ViamVjdC4gIChUaHVzLCBpZiB0aGUgRG9jdW1lbnQgaXMgaW4gcGFydCBhCit0ZXh0Ym9vayBvZiBtYXRoZW1hdGljcywgYSBTZWNvbmRhcnkgU2VjdGlvbiBtYXkgbm90IGV4cGxhaW4gYW55CittYXRoZW1hdGljcy4pICBUaGUgcmVsYXRpb25zaGlwIGNvdWxkIGJlIGEgbWF0dGVyIG9mIGhpc3RvcmljYWwKK2Nvbm5lY3Rpb24gd2l0aCB0aGUgc3ViamVjdCBvciB3aXRoIHJlbGF0ZWQgbWF0dGVycywgb3Igb2YgbGVnYWwsCitjb21tZXJjaWFsLCBwaGlsb3NvcGhpY2FsLCBldGhpY2FsIG9yIHBvbGl0aWNhbCBwb3NpdGlvbiByZWdhcmRpbmcKK3RoZW0uCisKK1RoZSAiSW52YXJpYW50IFNlY3Rpb25zIiBhcmUgY2VydGFpbiBTZWNvbmRhcnkgU2VjdGlvbnMgd2hvc2UgdGl0bGVzCithcmUgZGVzaWduYXRlZCwgYXMgYmVpbmcgdGhvc2Ugb2YgSW52YXJpYW50IFNlY3Rpb25zLCBpbiB0aGUgbm90aWNlCit0aGF0IHNheXMgdGhhdCB0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSWYgYQorc2VjdGlvbiBkb2VzIG5vdCBmaXQgdGhlIGFib3ZlIGRlZmluaXRpb24gb2YgU2Vjb25kYXJ5IHRoZW4gaXQgaXMgbm90CithbGxvd2VkIHRvIGJlIGRlc2lnbmF0ZWQgYXMgSW52YXJpYW50LiAgVGhlIERvY3VtZW50IG1heSBjb250YWluIHplcm8KK0ludmFyaWFudCBTZWN0aW9ucy4gIElmIHRoZSBEb2N1bWVudCBkb2VzIG5vdCBpZGVudGlmeSBhbnkgSW52YXJpYW50CitTZWN0aW9ucyB0aGVuIHRoZXJlIGFyZSBub25lLgorCitUaGUgIkNvdmVyIFRleHRzIiBhcmUgY2VydGFpbiBzaG9ydCBwYXNzYWdlcyBvZiB0ZXh0IHRoYXQgYXJlIGxpc3RlZCwKK2FzIEZyb250LUNvdmVyIFRleHRzIG9yIEJhY2stQ292ZXIgVGV4dHMsIGluIHRoZSBub3RpY2UgdGhhdCBzYXlzIHRoYXQKK3RoZSBEb2N1bWVudCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBIEZyb250LUNvdmVyIFRleHQgbWF5CitiZSBhdCBtb3N0IDUgd29yZHMsIGFuZCBhIEJhY2stQ292ZXIgVGV4dCBtYXkgYmUgYXQgbW9zdCAyNSB3b3Jkcy4KKworQSAiVHJhbnNwYXJlbnQiIGNvcHkgb2YgdGhlIERvY3VtZW50IG1lYW5zIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5LAorcmVwcmVzZW50ZWQgaW4gYSBmb3JtYXQgd2hvc2Ugc3BlY2lmaWNhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlCitnZW5lcmFsIHB1YmxpYywgdGhhdCBpcyBzdWl0YWJsZSBmb3IgcmV2aXNpbmcgdGhlIGRvY3VtZW50CitzdHJhaWdodGZvcndhcmRseSB3aXRoIGdlbmVyaWMgdGV4dCBlZGl0b3JzIG9yIChmb3IgaW1hZ2VzIGNvbXBvc2VkIG9mCitwaXhlbHMpIGdlbmVyaWMgcGFpbnQgcHJvZ3JhbXMgb3IgKGZvciBkcmF3aW5ncykgc29tZSB3aWRlbHkgYXZhaWxhYmxlCitkcmF3aW5nIGVkaXRvciwgYW5kIHRoYXQgaXMgc3VpdGFibGUgZm9yIGlucHV0IHRvIHRleHQgZm9ybWF0dGVycyBvcgorZm9yIGF1dG9tYXRpYyB0cmFuc2xhdGlvbiB0byBhIHZhcmlldHkgb2YgZm9ybWF0cyBzdWl0YWJsZSBmb3IgaW5wdXQKK3RvIHRleHQgZm9ybWF0dGVycy4gIEEgY29weSBtYWRlIGluIGFuIG90aGVyd2lzZSBUcmFuc3BhcmVudCBmaWxlCitmb3JtYXQgd2hvc2UgbWFya3VwLCBvciBhYnNlbmNlIG9mIG1hcmt1cCwgaGFzIGJlZW4gYXJyYW5nZWQgdG8gdGh3YXJ0CitvciBkaXNjb3VyYWdlIHN1YnNlcXVlbnQgbW9kaWZpY2F0aW9uIGJ5IHJlYWRlcnMgaXMgbm90IFRyYW5zcGFyZW50LgorQW4gaW1hZ2UgZm9ybWF0IGlzIG5vdCBUcmFuc3BhcmVudCBpZiB1c2VkIGZvciBhbnkgc3Vic3RhbnRpYWwgYW1vdW50CitvZiB0ZXh0LiAgQSBjb3B5IHRoYXQgaXMgbm90ICJUcmFuc3BhcmVudCIgaXMgY2FsbGVkICJPcGFxdWUiLgorCitFeGFtcGxlcyBvZiBzdWl0YWJsZSBmb3JtYXRzIGZvciBUcmFuc3BhcmVudCBjb3BpZXMgaW5jbHVkZSBwbGFpbgorQVNDSUkgd2l0aG91dCBtYXJrdXAsIFRleGluZm8gaW5wdXQgZm9ybWF0LCBMYVRlWCBpbnB1dCBmb3JtYXQsIFNHTUwKK29yIFhNTCB1c2luZyBhIHB1YmxpY2x5IGF2YWlsYWJsZSBEVEQsIGFuZCBzdGFuZGFyZC1jb25mb3JtaW5nIHNpbXBsZQorSFRNTCwgUG9zdFNjcmlwdCBvciBQREYgZGVzaWduZWQgZm9yIGh1bWFuIG1vZGlmaWNhdGlvbi4gIEV4YW1wbGVzIG9mCit0cmFuc3BhcmVudCBpbWFnZSBmb3JtYXRzIGluY2x1ZGUgUE5HLCBYQ0YgYW5kIEpQRy4gIE9wYXF1ZSBmb3JtYXRzCitpbmNsdWRlIHByb3ByaWV0YXJ5IGZvcm1hdHMgdGhhdCBjYW4gYmUgcmVhZCBhbmQgZWRpdGVkIG9ubHkgYnkKK3Byb3ByaWV0YXJ5IHdvcmQgcHJvY2Vzc29ycywgU0dNTCBvciBYTUwgZm9yIHdoaWNoIHRoZSBEVEQgYW5kL29yCitwcm9jZXNzaW5nIHRvb2xzIGFyZSBub3QgZ2VuZXJhbGx5IGF2YWlsYWJsZSwgYW5kIHRoZQorbWFjaGluZS1nZW5lcmF0ZWQgSFRNTCwgUG9zdFNjcmlwdCBvciBQREYgcHJvZHVjZWQgYnkgc29tZSB3b3JkCitwcm9jZXNzb3JzIGZvciBvdXRwdXQgcHVycG9zZXMgb25seS4KKworVGhlICJUaXRsZSBQYWdlIiBtZWFucywgZm9yIGEgcHJpbnRlZCBib29rLCB0aGUgdGl0bGUgcGFnZSBpdHNlbGYsCitwbHVzIHN1Y2ggZm9sbG93aW5nIHBhZ2VzIGFzIGFyZSBuZWVkZWQgdG8gaG9sZCwgbGVnaWJseSwgdGhlIG1hdGVyaWFsCit0aGlzIExpY2Vuc2UgcmVxdWlyZXMgdG8gYXBwZWFyIGluIHRoZSB0aXRsZSBwYWdlLiAgRm9yIHdvcmtzIGluCitmb3JtYXRzIHdoaWNoIGRvIG5vdCBoYXZlIGFueSB0aXRsZSBwYWdlIGFzIHN1Y2gsICJUaXRsZSBQYWdlIiBtZWFucwordGhlIHRleHQgbmVhciB0aGUgbW9zdCBwcm9taW5lbnQgYXBwZWFyYW5jZSBvZiB0aGUgd29yaydzIHRpdGxlLAorcHJlY2VkaW5nIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJvZHkgb2YgdGhlIHRleHQuCisKK0Egc2VjdGlvbiAiRW50aXRsZWQgWFlaIiBtZWFucyBhIG5hbWVkIHN1YnVuaXQgb2YgdGhlIERvY3VtZW50IHdob3NlCit0aXRsZSBlaXRoZXIgaXMgcHJlY2lzZWx5IFhZWiBvciBjb250YWlucyBYWVogaW4gcGFyZW50aGVzZXMgZm9sbG93aW5nCit0ZXh0IHRoYXQgdHJhbnNsYXRlcyBYWVogaW4gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlIFhZWiBzdGFuZHMgZm9yIGEKK3NwZWNpZmljIHNlY3Rpb24gbmFtZSBtZW50aW9uZWQgYmVsb3csIHN1Y2ggYXMgIkFja25vd2xlZGdlbWVudHMiLAorIkRlZGljYXRpb25zIiwgIkVuZG9yc2VtZW50cyIsIG9yICJIaXN0b3J5Ii4pICBUbyAiUHJlc2VydmUgdGhlIFRpdGxlIgorb2Ygc3VjaCBhIHNlY3Rpb24gd2hlbiB5b3UgbW9kaWZ5IHRoZSBEb2N1bWVudCBtZWFucyB0aGF0IGl0IHJlbWFpbnMgYQorc2VjdGlvbiAiRW50aXRsZWQgWFlaIiBhY2NvcmRpbmcgdG8gdGhpcyBkZWZpbml0aW9uLgorCitUaGUgRG9jdW1lbnQgbWF5IGluY2x1ZGUgV2FycmFudHkgRGlzY2xhaW1lcnMgbmV4dCB0byB0aGUgbm90aWNlIHdoaWNoCitzdGF0ZXMgdGhhdCB0aGlzIExpY2Vuc2UgYXBwbGllcyB0byB0aGUgRG9jdW1lbnQuICBUaGVzZSBXYXJyYW50eQorRGlzY2xhaW1lcnMgYXJlIGNvbnNpZGVyZWQgdG8gYmUgaW5jbHVkZWQgYnkgcmVmZXJlbmNlIGluIHRoaXMKK0xpY2Vuc2UsIGJ1dCBvbmx5IGFzIHJlZ2FyZHMgZGlzY2xhaW1pbmcgd2FycmFudGllczogYW55IG90aGVyCitpbXBsaWNhdGlvbiB0aGF0IHRoZXNlIFdhcnJhbnR5IERpc2NsYWltZXJzIG1heSBoYXZlIGlzIHZvaWQgYW5kIGhhcworbm8gZWZmZWN0IG9uIHRoZSBtZWFuaW5nIG9mIHRoaXMgTGljZW5zZS4KKworCisyLiBWRVJCQVRJTSBDT1BZSU5HCisKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQgaW4gYW55IG1lZGl1bSwgZWl0aGVyCitjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LCBwcm92aWRlZCB0aGF0IHRoaXMgTGljZW5zZSwgdGhlCitjb3B5cmlnaHQgbm90aWNlcywgYW5kIHRoZSBsaWNlbnNlIG5vdGljZSBzYXlpbmcgdGhpcyBMaWNlbnNlIGFwcGxpZXMKK3RvIHRoZSBEb2N1bWVudCBhcmUgcmVwcm9kdWNlZCBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCB5b3UgYWRkIG5vIG90aGVyCitjb25kaXRpb25zIHdoYXRzb2V2ZXIgdG8gdGhvc2Ugb2YgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgdXNlCit0ZWNobmljYWwgbWVhc3VyZXMgdG8gb2JzdHJ1Y3Qgb3IgY29udHJvbCB0aGUgcmVhZGluZyBvciBmdXJ0aGVyCitjb3B5aW5nIG9mIHRoZSBjb3BpZXMgeW91IG1ha2Ugb3IgZGlzdHJpYnV0ZS4gIEhvd2V2ZXIsIHlvdSBtYXkgYWNjZXB0Citjb21wZW5zYXRpb24gaW4gZXhjaGFuZ2UgZm9yIGNvcGllcy4gIElmIHlvdSBkaXN0cmlidXRlIGEgbGFyZ2UgZW5vdWdoCitudW1iZXIgb2YgY29waWVzIHlvdSBtdXN0IGFsc28gZm9sbG93IHRoZSBjb25kaXRpb25zIGluIHNlY3Rpb24gMy4KKworWW91IG1heSBhbHNvIGxlbmQgY29waWVzLCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIHN0YXRlZCBhYm92ZSwgYW5kCit5b3UgbWF5IHB1YmxpY2x5IGRpc3BsYXkgY29waWVzLgorCisKKzMuIENPUFlJTkcgSU4gUVVBTlRJVFkKKworSWYgeW91IHB1Ymxpc2ggcHJpbnRlZCBjb3BpZXMgKG9yIGNvcGllcyBpbiBtZWRpYSB0aGF0IGNvbW1vbmx5IGhhdmUKK3ByaW50ZWQgY292ZXJzKSBvZiB0aGUgRG9jdW1lbnQsIG51bWJlcmluZyBtb3JlIHRoYW4gMTAwLCBhbmQgdGhlCitEb2N1bWVudCdzIGxpY2Vuc2Ugbm90aWNlIHJlcXVpcmVzIENvdmVyIFRleHRzLCB5b3UgbXVzdCBlbmNsb3NlIHRoZQorY29waWVzIGluIGNvdmVycyB0aGF0IGNhcnJ5LCBjbGVhcmx5IGFuZCBsZWdpYmx5LCBhbGwgdGhlc2UgQ292ZXIKK1RleHRzOiBGcm9udC1Db3ZlciBUZXh0cyBvbiB0aGUgZnJvbnQgY292ZXIsIGFuZCBCYWNrLUNvdmVyIFRleHRzIG9uCit0aGUgYmFjayBjb3Zlci4gIEJvdGggY292ZXJzIG11c3QgYWxzbyBjbGVhcmx5IGFuZCBsZWdpYmx5IGlkZW50aWZ5Cit5b3UgYXMgdGhlIHB1Ymxpc2hlciBvZiB0aGVzZSBjb3BpZXMuICBUaGUgZnJvbnQgY292ZXIgbXVzdCBwcmVzZW50Cit0aGUgZnVsbCB0aXRsZSB3aXRoIGFsbCB3b3JkcyBvZiB0aGUgdGl0bGUgZXF1YWxseSBwcm9taW5lbnQgYW5kCit2aXNpYmxlLiAgWW91IG1heSBhZGQgb3RoZXIgbWF0ZXJpYWwgb24gdGhlIGNvdmVycyBpbiBhZGRpdGlvbi4KK0NvcHlpbmcgd2l0aCBjaGFuZ2VzIGxpbWl0ZWQgdG8gdGhlIGNvdmVycywgYXMgbG9uZyBhcyB0aGV5IHByZXNlcnZlCit0aGUgdGl0bGUgb2YgdGhlIERvY3VtZW50IGFuZCBzYXRpc2Z5IHRoZXNlIGNvbmRpdGlvbnMsIGNhbiBiZSB0cmVhdGVkCithcyB2ZXJiYXRpbSBjb3B5aW5nIGluIG90aGVyIHJlc3BlY3RzLgorCitJZiB0aGUgcmVxdWlyZWQgdGV4dHMgZm9yIGVpdGhlciBjb3ZlciBhcmUgdG9vIHZvbHVtaW5vdXMgdG8gZml0CitsZWdpYmx5LCB5b3Ugc2hvdWxkIHB1dCB0aGUgZmlyc3Qgb25lcyBsaXN0ZWQgKGFzIG1hbnkgYXMgZml0CityZWFzb25hYmx5KSBvbiB0aGUgYWN0dWFsIGNvdmVyLCBhbmQgY29udGludWUgdGhlIHJlc3Qgb250byBhZGphY2VudAorcGFnZXMuCisKK0lmIHlvdSBwdWJsaXNoIG9yIGRpc3RyaWJ1dGUgT3BhcXVlIGNvcGllcyBvZiB0aGUgRG9jdW1lbnQgbnVtYmVyaW5nCittb3JlIHRoYW4gMTAwLCB5b3UgbXVzdCBlaXRoZXIgaW5jbHVkZSBhIG1hY2hpbmUtcmVhZGFibGUgVHJhbnNwYXJlbnQKK2NvcHkgYWxvbmcgd2l0aCBlYWNoIE9wYXF1ZSBjb3B5LCBvciBzdGF0ZSBpbiBvciB3aXRoIGVhY2ggT3BhcXVlIGNvcHkKK2EgY29tcHV0ZXItbmV0d29yayBsb2NhdGlvbiBmcm9tIHdoaWNoIHRoZSBnZW5lcmFsIG5ldHdvcmstdXNpbmcKK3B1YmxpYyBoYXMgYWNjZXNzIHRvIGRvd25sb2FkIHVzaW5nIHB1YmxpYy1zdGFuZGFyZCBuZXR3b3JrIHByb3RvY29scworYSBjb21wbGV0ZSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgZnJlZSBvZiBhZGRlZCBtYXRlcmlhbC4KK0lmIHlvdSB1c2UgdGhlIGxhdHRlciBvcHRpb24sIHlvdSBtdXN0IHRha2UgcmVhc29uYWJseSBwcnVkZW50IHN0ZXBzLAord2hlbiB5b3UgYmVnaW4gZGlzdHJpYnV0aW9uIG9mIE9wYXF1ZSBjb3BpZXMgaW4gcXVhbnRpdHksIHRvIGVuc3VyZQordGhhdCB0aGlzIFRyYW5zcGFyZW50IGNvcHkgd2lsbCByZW1haW4gdGh1cyBhY2Nlc3NpYmxlIGF0IHRoZSBzdGF0ZWQKK2xvY2F0aW9uIHVudGlsIGF0IGxlYXN0IG9uZSB5ZWFyIGFmdGVyIHRoZSBsYXN0IHRpbWUgeW91IGRpc3RyaWJ1dGUgYW4KK09wYXF1ZSBjb3B5IChkaXJlY3RseSBvciB0aHJvdWdoIHlvdXIgYWdlbnRzIG9yIHJldGFpbGVycykgb2YgdGhhdAorZWRpdGlvbiB0byB0aGUgcHVibGljLgorCitJdCBpcyByZXF1ZXN0ZWQsIGJ1dCBub3QgcmVxdWlyZWQsIHRoYXQgeW91IGNvbnRhY3QgdGhlIGF1dGhvcnMgb2YgdGhlCitEb2N1bWVudCB3ZWxsIGJlZm9yZSByZWRpc3RyaWJ1dGluZyBhbnkgbGFyZ2UgbnVtYmVyIG9mIGNvcGllcywgdG8gZ2l2ZQordGhlbSBhIGNoYW5jZSB0byBwcm92aWRlIHlvdSB3aXRoIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQuCisKKworNC4gTU9ESUZJQ0FUSU9OUworCitZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgYSBNb2RpZmllZCBWZXJzaW9uIG9mIHRoZSBEb2N1bWVudCB1bmRlcgordGhlIGNvbmRpdGlvbnMgb2Ygc2VjdGlvbnMgMiBhbmQgMyBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgcmVsZWFzZQordGhlIE1vZGlmaWVkIFZlcnNpb24gdW5kZXIgcHJlY2lzZWx5IHRoaXMgTGljZW5zZSwgd2l0aCB0aGUgTW9kaWZpZWQKK1ZlcnNpb24gZmlsbGluZyB0aGUgcm9sZSBvZiB0aGUgRG9jdW1lbnQsIHRodXMgbGljZW5zaW5nIGRpc3RyaWJ1dGlvbgorYW5kIG1vZGlmaWNhdGlvbiBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiB0byB3aG9ldmVyIHBvc3Nlc3NlcyBhIGNvcHkKK29mIGl0LiAgSW4gYWRkaXRpb24sIHlvdSBtdXN0IGRvIHRoZXNlIHRoaW5ncyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbjoKKworQS4gVXNlIGluIHRoZSBUaXRsZSBQYWdlIChhbmQgb24gdGhlIGNvdmVycywgaWYgYW55KSBhIHRpdGxlIGRpc3RpbmN0CisgICBmcm9tIHRoYXQgb2YgdGhlIERvY3VtZW50LCBhbmQgZnJvbSB0aG9zZSBvZiBwcmV2aW91cyB2ZXJzaW9ucworICAgKHdoaWNoIHNob3VsZCwgaWYgdGhlcmUgd2VyZSBhbnksIGJlIGxpc3RlZCBpbiB0aGUgSGlzdG9yeSBzZWN0aW9uCisgICBvZiB0aGUgRG9jdW1lbnQpLiAgWW91IG1heSB1c2UgdGhlIHNhbWUgdGl0bGUgYXMgYSBwcmV2aW91cyB2ZXJzaW9uCisgICBpZiB0aGUgb3JpZ2luYWwgcHVibGlzaGVyIG9mIHRoYXQgdmVyc2lvbiBnaXZlcyBwZXJtaXNzaW9uLgorQi4gTGlzdCBvbiB0aGUgVGl0bGUgUGFnZSwgYXMgYXV0aG9ycywgb25lIG9yIG1vcmUgcGVyc29ucyBvciBlbnRpdGllcworICAgcmVzcG9uc2libGUgZm9yIGF1dGhvcnNoaXAgb2YgdGhlIG1vZGlmaWNhdGlvbnMgaW4gdGhlIE1vZGlmaWVkCisgICBWZXJzaW9uLCB0b2dldGhlciB3aXRoIGF0IGxlYXN0IGZpdmUgb2YgdGhlIHByaW5jaXBhbCBhdXRob3JzIG9mIHRoZQorICAgRG9jdW1lbnQgKGFsbCBvZiBpdHMgcHJpbmNpcGFsIGF1dGhvcnMsIGlmIGl0IGhhcyBmZXdlciB0aGFuIGZpdmUpLAorICAgdW5sZXNzIHRoZXkgcmVsZWFzZSB5b3UgZnJvbSB0aGlzIHJlcXVpcmVtZW50LgorQy4gU3RhdGUgb24gdGhlIFRpdGxlIHBhZ2UgdGhlIG5hbWUgb2YgdGhlIHB1Ymxpc2hlciBvZiB0aGUKKyAgIE1vZGlmaWVkIFZlcnNpb24sIGFzIHRoZSBwdWJsaXNoZXIuCitELiBQcmVzZXJ2ZSBhbGwgdGhlIGNvcHlyaWdodCBub3RpY2VzIG9mIHRoZSBEb2N1bWVudC4KK0UuIEFkZCBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGZvciB5b3VyIG1vZGlmaWNhdGlvbnMKKyAgIGFkamFjZW50IHRvIHRoZSBvdGhlciBjb3B5cmlnaHQgbm90aWNlcy4KK0YuIEluY2x1ZGUsIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjb3B5cmlnaHQgbm90aWNlcywgYSBsaWNlbnNlIG5vdGljZQorICAgZ2l2aW5nIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgdGhlIE1vZGlmaWVkIFZlcnNpb24gdW5kZXIgdGhlCisgICB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluIHRoZSBmb3JtIHNob3duIGluIHRoZSBBZGRlbmR1bSBiZWxvdy4KK0cuIFByZXNlcnZlIGluIHRoYXQgbGljZW5zZSBub3RpY2UgdGhlIGZ1bGwgbGlzdHMgb2YgSW52YXJpYW50IFNlY3Rpb25zCisgICBhbmQgcmVxdWlyZWQgQ292ZXIgVGV4dHMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50J3MgbGljZW5zZSBub3RpY2UuCitILiBJbmNsdWRlIGFuIHVuYWx0ZXJlZCBjb3B5IG9mIHRoaXMgTGljZW5zZS4KK0kuIFByZXNlcnZlIHRoZSBzZWN0aW9uIEVudGl0bGVkICJIaXN0b3J5IiwgUHJlc2VydmUgaXRzIFRpdGxlLCBhbmQgYWRkCisgICB0byBpdCBhbiBpdGVtIHN0YXRpbmcgYXQgbGVhc3QgdGhlIHRpdGxlLCB5ZWFyLCBuZXcgYXV0aG9ycywgYW5kCisgICBwdWJsaXNoZXIgb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gYXMgZ2l2ZW4gb24gdGhlIFRpdGxlIFBhZ2UuICBJZgorICAgdGhlcmUgaXMgbm8gc2VjdGlvbiBFbnRpdGxlZCAiSGlzdG9yeSIgaW4gdGhlIERvY3VtZW50LCBjcmVhdGUgb25lCisgICBzdGF0aW5nIHRoZSB0aXRsZSwgeWVhciwgYXV0aG9ycywgYW5kIHB1Ymxpc2hlciBvZiB0aGUgRG9jdW1lbnQgYXMKKyAgIGdpdmVuIG9uIGl0cyBUaXRsZSBQYWdlLCB0aGVuIGFkZCBhbiBpdGVtIGRlc2NyaWJpbmcgdGhlIE1vZGlmaWVkCisgICBWZXJzaW9uIGFzIHN0YXRlZCBpbiB0aGUgcHJldmlvdXMgc2VudGVuY2UuCitKLiBQcmVzZXJ2ZSB0aGUgbmV0d29yayBsb2NhdGlvbiwgaWYgYW55LCBnaXZlbiBpbiB0aGUgRG9jdW1lbnQgZm9yCisgICBwdWJsaWMgYWNjZXNzIHRvIGEgVHJhbnNwYXJlbnQgY29weSBvZiB0aGUgRG9jdW1lbnQsIGFuZCBsaWtld2lzZQorICAgdGhlIG5ldHdvcmsgbG9jYXRpb25zIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IgcHJldmlvdXMgdmVyc2lvbnMKKyAgIGl0IHdhcyBiYXNlZCBvbi4gIFRoZXNlIG1heSBiZSBwbGFjZWQgaW4gdGhlICJIaXN0b3J5IiBzZWN0aW9uLgorICAgWW91IG1heSBvbWl0IGEgbmV0d29yayBsb2NhdGlvbiBmb3IgYSB3b3JrIHRoYXQgd2FzIHB1Ymxpc2hlZCBhdAorICAgbGVhc3QgZm91ciB5ZWFycyBiZWZvcmUgdGhlIERvY3VtZW50IGl0c2VsZiwgb3IgaWYgdGhlIG9yaWdpbmFsCisgICBwdWJsaXNoZXIgb2YgdGhlIHZlcnNpb24gaXQgcmVmZXJzIHRvIGdpdmVzIHBlcm1pc3Npb24uCitLLiBGb3IgYW55IHNlY3Rpb24gRW50aXRsZWQgIkFja25vd2xlZGdlbWVudHMiIG9yICJEZWRpY2F0aW9ucyIsCisgICBQcmVzZXJ2ZSB0aGUgVGl0bGUgb2YgdGhlIHNlY3Rpb24sIGFuZCBwcmVzZXJ2ZSBpbiB0aGUgc2VjdGlvbiBhbGwKKyAgIHRoZSBzdWJzdGFuY2UgYW5kIHRvbmUgb2YgZWFjaCBvZiB0aGUgY29udHJpYnV0b3IgYWNrbm93bGVkZ2VtZW50cworICAgYW5kL29yIGRlZGljYXRpb25zIGdpdmVuIHRoZXJlaW4uCitMLiBQcmVzZXJ2ZSBhbGwgdGhlIEludmFyaWFudCBTZWN0aW9ucyBvZiB0aGUgRG9jdW1lbnQsCisgICB1bmFsdGVyZWQgaW4gdGhlaXIgdGV4dCBhbmQgaW4gdGhlaXIgdGl0bGVzLiAgU2VjdGlvbiBudW1iZXJzCisgICBvciB0aGUgZXF1aXZhbGVudCBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgc2VjdGlvbiB0aXRsZXMuCitNLiBEZWxldGUgYW55IHNlY3Rpb24gRW50aXRsZWQgIkVuZG9yc2VtZW50cyIuICBTdWNoIGEgc2VjdGlvbgorICAgbWF5IG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbi4KK04uIERvIG5vdCByZXRpdGxlIGFueSBleGlzdGluZyBzZWN0aW9uIHRvIGJlIEVudGl0bGVkICJFbmRvcnNlbWVudHMiCisgICBvciB0byBjb25mbGljdCBpbiB0aXRsZSB3aXRoIGFueSBJbnZhcmlhbnQgU2VjdGlvbi4KK08uIFByZXNlcnZlIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycy4KKworSWYgdGhlIE1vZGlmaWVkIFZlcnNpb24gaW5jbHVkZXMgbmV3IGZyb250LW1hdHRlciBzZWN0aW9ucyBvcgorYXBwZW5kaWNlcyB0aGF0IHF1YWxpZnkgYXMgU2Vjb25kYXJ5IFNlY3Rpb25zIGFuZCBjb250YWluIG5vIG1hdGVyaWFsCitjb3BpZWQgZnJvbSB0aGUgRG9jdW1lbnQsIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gZGVzaWduYXRlIHNvbWUgb3IgYWxsCitvZiB0aGVzZSBzZWN0aW9ucyBhcyBpbnZhcmlhbnQuICBUbyBkbyB0aGlzLCBhZGQgdGhlaXIgdGl0bGVzIHRvIHRoZQorbGlzdCBvZiBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24ncyBsaWNlbnNlIG5vdGljZS4KK1RoZXNlIHRpdGxlcyBtdXN0IGJlIGRpc3RpbmN0IGZyb20gYW55IG90aGVyIHNlY3Rpb24gdGl0bGVzLgorCitZb3UgbWF5IGFkZCBhIHNlY3Rpb24gRW50aXRsZWQgIkVuZG9yc2VtZW50cyIsIHByb3ZpZGVkIGl0IGNvbnRhaW5zCitub3RoaW5nIGJ1dCBlbmRvcnNlbWVudHMgb2YgeW91ciBNb2RpZmllZCBWZXJzaW9uIGJ5IHZhcmlvdXMKK3BhcnRpZXMtLWZvciBleGFtcGxlLCBzdGF0ZW1lbnRzIG9mIHBlZXIgcmV2aWV3IG9yIHRoYXQgdGhlIHRleHQgaGFzCitiZWVuIGFwcHJvdmVkIGJ5IGFuIG9yZ2FuaXphdGlvbiBhcyB0aGUgYXV0aG9yaXRhdGl2ZSBkZWZpbml0aW9uIG9mIGEKK3N0YW5kYXJkLgorCitZb3UgbWF5IGFkZCBhIHBhc3NhZ2Ugb2YgdXAgdG8gZml2ZSB3b3JkcyBhcyBhIEZyb250LUNvdmVyIFRleHQsIGFuZCBhCitwYXNzYWdlIG9mIHVwIHRvIDI1IHdvcmRzIGFzIGEgQmFjay1Db3ZlciBUZXh0LCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CitvZiBDb3ZlciBUZXh0cyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbi4gIE9ubHkgb25lIHBhc3NhZ2Ugb2YKK0Zyb250LUNvdmVyIFRleHQgYW5kIG9uZSBvZiBCYWNrLUNvdmVyIFRleHQgbWF5IGJlIGFkZGVkIGJ5IChvcgordGhyb3VnaCBhcnJhbmdlbWVudHMgbWFkZSBieSkgYW55IG9uZSBlbnRpdHkuICBJZiB0aGUgRG9jdW1lbnQgYWxyZWFkeQoraW5jbHVkZXMgYSBjb3ZlciB0ZXh0IGZvciB0aGUgc2FtZSBjb3ZlciwgcHJldmlvdXNseSBhZGRlZCBieSB5b3Ugb3IKK2J5IGFycmFuZ2VtZW50IG1hZGUgYnkgdGhlIHNhbWUgZW50aXR5IHlvdSBhcmUgYWN0aW5nIG9uIGJlaGFsZiBvZiwKK3lvdSBtYXkgbm90IGFkZCBhbm90aGVyOyBidXQgeW91IG1heSByZXBsYWNlIHRoZSBvbGQgb25lLCBvbiBleHBsaWNpdAorcGVybWlzc2lvbiBmcm9tIHRoZSBwcmV2aW91cyBwdWJsaXNoZXIgdGhhdCBhZGRlZCB0aGUgb2xkIG9uZS4KKworVGhlIGF1dGhvcihzKSBhbmQgcHVibGlzaGVyKHMpIG9mIHRoZSBEb2N1bWVudCBkbyBub3QgYnkgdGhpcyBMaWNlbnNlCitnaXZlIHBlcm1pc3Npb24gdG8gdXNlIHRoZWlyIG5hbWVzIGZvciBwdWJsaWNpdHkgZm9yIG9yIHRvIGFzc2VydCBvcgoraW1wbHkgZW5kb3JzZW1lbnQgb2YgYW55IE1vZGlmaWVkIFZlcnNpb24uCisKKworNS4gQ09NQklOSU5HIERPQ1VNRU5UUworCitZb3UgbWF5IGNvbWJpbmUgdGhlIERvY3VtZW50IHdpdGggb3RoZXIgZG9jdW1lbnRzIHJlbGVhc2VkIHVuZGVyIHRoaXMKK0xpY2Vuc2UsIHVuZGVyIHRoZSB0ZXJtcyBkZWZpbmVkIGluIHNlY3Rpb24gNCBhYm92ZSBmb3IgbW9kaWZpZWQKK3ZlcnNpb25zLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIGluIHRoZSBjb21iaW5hdGlvbiBhbGwgb2YgdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgb2YgYWxsIG9mIHRoZSBvcmlnaW5hbCBkb2N1bWVudHMsIHVubW9kaWZpZWQsIGFuZAorbGlzdCB0aGVtIGFsbCBhcyBJbnZhcmlhbnQgU2VjdGlvbnMgb2YgeW91ciBjb21iaW5lZCB3b3JrIGluIGl0cworbGljZW5zZSBub3RpY2UsIGFuZCB0aGF0IHlvdSBwcmVzZXJ2ZSBhbGwgdGhlaXIgV2FycmFudHkgRGlzY2xhaW1lcnMuCisKK1RoZSBjb21iaW5lZCB3b3JrIG5lZWQgb25seSBjb250YWluIG9uZSBjb3B5IG9mIHRoaXMgTGljZW5zZSwgYW5kCittdWx0aXBsZSBpZGVudGljYWwgSW52YXJpYW50IFNlY3Rpb25zIG1heSBiZSByZXBsYWNlZCB3aXRoIGEgc2luZ2xlCitjb3B5LiAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUgYnV0CitkaWZmZXJlbnQgY29udGVudHMsIG1ha2UgdGhlIHRpdGxlIG9mIGVhY2ggc3VjaCBzZWN0aW9uIHVuaXF1ZSBieQorYWRkaW5nIGF0IHRoZSBlbmQgb2YgaXQsIGluIHBhcmVudGhlc2VzLCB0aGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwKK2F1dGhvciBvciBwdWJsaXNoZXIgb2YgdGhhdCBzZWN0aW9uIGlmIGtub3duLCBvciBlbHNlIGEgdW5pcXVlIG51bWJlci4KK01ha2UgdGhlIHNhbWUgYWRqdXN0bWVudCB0byB0aGUgc2VjdGlvbiB0aXRsZXMgaW4gdGhlIGxpc3Qgb2YKK0ludmFyaWFudCBTZWN0aW9ucyBpbiB0aGUgbGljZW5zZSBub3RpY2Ugb2YgdGhlIGNvbWJpbmVkIHdvcmsuCisKK0luIHRoZSBjb21iaW5hdGlvbiwgeW91IG11c3QgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQgIkhpc3RvcnkiCitpbiB0aGUgdmFyaW91cyBvcmlnaW5hbCBkb2N1bWVudHMsIGZvcm1pbmcgb25lIHNlY3Rpb24gRW50aXRsZWQKKyJIaXN0b3J5IjsgbGlrZXdpc2UgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQgIkFja25vd2xlZGdlbWVudHMiLAorYW5kIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAiRGVkaWNhdGlvbnMiLiAgWW91IG11c3QgZGVsZXRlIGFsbCBzZWN0aW9ucworRW50aXRsZWQgIkVuZG9yc2VtZW50cyIuCisKKworNi4gQ09MTEVDVElPTlMgT0YgRE9DVU1FTlRTCisKK1lvdSBtYXkgbWFrZSBhIGNvbGxlY3Rpb24gY29uc2lzdGluZyBvZiB0aGUgRG9jdW1lbnQgYW5kIG90aGVyIGRvY3VtZW50cworcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgcmVwbGFjZSB0aGUgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhpcworTGljZW5zZSBpbiB0aGUgdmFyaW91cyBkb2N1bWVudHMgd2l0aCBhIHNpbmdsZSBjb3B5IHRoYXQgaXMgaW5jbHVkZWQgaW4KK3RoZSBjb2xsZWN0aW9uLCBwcm92aWRlZCB0aGF0IHlvdSBmb2xsb3cgdGhlIHJ1bGVzIG9mIHRoaXMgTGljZW5zZSBmb3IKK3ZlcmJhdGltIGNvcHlpbmcgb2YgZWFjaCBvZiB0aGUgZG9jdW1lbnRzIGluIGFsbCBvdGhlciByZXNwZWN0cy4KKworWW91IG1heSBleHRyYWN0IGEgc2luZ2xlIGRvY3VtZW50IGZyb20gc3VjaCBhIGNvbGxlY3Rpb24sIGFuZCBkaXN0cmlidXRlCitpdCBpbmRpdmlkdWFsbHkgdW5kZXIgdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB5b3UgaW5zZXJ0IGEgY29weSBvZiB0aGlzCitMaWNlbnNlIGludG8gdGhlIGV4dHJhY3RlZCBkb2N1bWVudCwgYW5kIGZvbGxvdyB0aGlzIExpY2Vuc2UgaW4gYWxsCitvdGhlciByZXNwZWN0cyByZWdhcmRpbmcgdmVyYmF0aW0gY29weWluZyBvZiB0aGF0IGRvY3VtZW50LgorCisKKzcuIEFHR1JFR0FUSU9OIFdJVEggSU5ERVBFTkRFTlQgV09SS1MKKworQSBjb21waWxhdGlvbiBvZiB0aGUgRG9jdW1lbnQgb3IgaXRzIGRlcml2YXRpdmVzIHdpdGggb3RoZXIgc2VwYXJhdGUKK2FuZCBpbmRlcGVuZGVudCBkb2N1bWVudHMgb3Igd29ya3MsIGluIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvcgorZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuICJhZ2dyZWdhdGUiIGlmIHRoZSBjb3B5cmlnaHQKK3Jlc3VsdGluZyBmcm9tIHRoZSBjb21waWxhdGlvbiBpcyBub3QgdXNlZCB0byBsaW1pdCB0aGUgbGVnYWwgcmlnaHRzCitvZiB0aGUgY29tcGlsYXRpb24ncyB1c2VycyBiZXlvbmQgd2hhdCB0aGUgaW5kaXZpZHVhbCB3b3JrcyBwZXJtaXQuCitXaGVuIHRoZSBEb2N1bWVudCBpcyBpbmNsdWRlZCBpbiBhbiBhZ2dyZWdhdGUsIHRoaXMgTGljZW5zZSBkb2VzIG5vdAorYXBwbHkgdG8gdGhlIG90aGVyIHdvcmtzIGluIHRoZSBhZ2dyZWdhdGUgd2hpY2ggYXJlIG5vdCB0aGVtc2VsdmVzCitkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBEb2N1bWVudC4KKworSWYgdGhlIENvdmVyIFRleHQgcmVxdWlyZW1lbnQgb2Ygc2VjdGlvbiAzIGlzIGFwcGxpY2FibGUgdG8gdGhlc2UKK2NvcGllcyBvZiB0aGUgRG9jdW1lbnQsIHRoZW4gaWYgdGhlIERvY3VtZW50IGlzIGxlc3MgdGhhbiBvbmUgaGFsZiBvZgordGhlIGVudGlyZSBhZ2dyZWdhdGUsIHRoZSBEb2N1bWVudCdzIENvdmVyIFRleHRzIG1heSBiZSBwbGFjZWQgb24KK2NvdmVycyB0aGF0IGJyYWNrZXQgdGhlIERvY3VtZW50IHdpdGhpbiB0aGUgYWdncmVnYXRlLCBvciB0aGUKK2VsZWN0cm9uaWMgZXF1aXZhbGVudCBvZiBjb3ZlcnMgaWYgdGhlIERvY3VtZW50IGlzIGluIGVsZWN0cm9uaWMgZm9ybS4KK090aGVyd2lzZSB0aGV5IG11c3QgYXBwZWFyIG9uIHByaW50ZWQgY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgd2hvbGUKK2FnZ3JlZ2F0ZS4KKworCis4LiBUUkFOU0xBVElPTgorCitUcmFuc2xhdGlvbiBpcyBjb25zaWRlcmVkIGEga2luZCBvZiBtb2RpZmljYXRpb24sIHNvIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgdHJhbnNsYXRpb25zIG9mIHRoZSBEb2N1bWVudCB1bmRlciB0aGUgdGVybXMgb2Ygc2VjdGlvbiA0LgorUmVwbGFjaW5nIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRyYW5zbGF0aW9ucyByZXF1aXJlcyBzcGVjaWFsCitwZXJtaXNzaW9uIGZyb20gdGhlaXIgY29weXJpZ2h0IGhvbGRlcnMsIGJ1dCB5b3UgbWF5IGluY2x1ZGUKK3RyYW5zbGF0aW9ucyBvZiBzb21lIG9yIGFsbCBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gYWRkaXRpb24gdG8gdGhlCitvcmlnaW5hbCB2ZXJzaW9ucyBvZiB0aGVzZSBJbnZhcmlhbnQgU2VjdGlvbnMuICBZb3UgbWF5IGluY2x1ZGUgYQordHJhbnNsYXRpb24gb2YgdGhpcyBMaWNlbnNlLCBhbmQgYWxsIHRoZSBsaWNlbnNlIG5vdGljZXMgaW4gdGhlCitEb2N1bWVudCwgYW5kIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycywgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBpbmNsdWRlCit0aGUgb3JpZ2luYWwgRW5nbGlzaCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhlIG9yaWdpbmFsIHZlcnNpb25zCitvZiB0aG9zZSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycy4gIEluIGNhc2Ugb2YgYSBkaXNhZ3JlZW1lbnQgYmV0d2VlbgordGhlIHRyYW5zbGF0aW9uIGFuZCB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBub3RpY2UKK29yIGRpc2NsYWltZXIsIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIHdpbGwgcHJldmFpbC4KKworSWYgYSBzZWN0aW9uIGluIHRoZSBEb2N1bWVudCBpcyBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIsCisiRGVkaWNhdGlvbnMiLCBvciAiSGlzdG9yeSIsIHRoZSByZXF1aXJlbWVudCAoc2VjdGlvbiA0KSB0byBQcmVzZXJ2ZQoraXRzIFRpdGxlIChzZWN0aW9uIDEpIHdpbGwgdHlwaWNhbGx5IHJlcXVpcmUgY2hhbmdpbmcgdGhlIGFjdHVhbAordGl0bGUuCisKKworOS4gVEVSTUlOQVRJT04KKworWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBleGNlcHQKK2FzIGV4cHJlc3NseSBwcm92aWRlZCBmb3IgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IG90aGVyIGF0dGVtcHQgdG8KK2NvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpcyB2b2lkLCBhbmQgd2lsbAorYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSG93ZXZlciwKK3BhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMKK0xpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisKKzEwLiBGVVRVUkUgUkVWSVNJT05TIE9GIFRISVMgTElDRU5TRQorCitUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIG5ldywgcmV2aXNlZCB2ZXJzaW9ucworb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3Cit2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkKK2RpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuICBTZWUKK2h0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC8uCisKK0VhY2ggdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorSWYgdGhlIERvY3VtZW50IHNwZWNpZmllcyB0aGF0IGEgcGFydGljdWxhciBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoaXMKK0xpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mCitmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHNwZWNpZmllZCB2ZXJzaW9uIG9yCitvZiBhbnkgbGF0ZXIgdmVyc2lvbiB0aGF0IGhhcyBiZWVuIHB1Ymxpc2hlZCAobm90IGFzIGEgZHJhZnQpIGJ5IHRoZQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uCitudW1iZXIgb2YgdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCAobm90CithcyBhIGRyYWZ0KSBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisKK0FEREVORFVNOiBIb3cgdG8gdXNlIHRoaXMgTGljZW5zZSBmb3IgeW91ciBkb2N1bWVudHMKKworVG8gdXNlIHRoaXMgTGljZW5zZSBpbiBhIGRvY3VtZW50IHlvdSBoYXZlIHdyaXR0ZW4sIGluY2x1ZGUgYSBjb3B5IG9mCit0aGUgTGljZW5zZSBpbiB0aGUgZG9jdW1lbnQgYW5kIHB1dCB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQKK2xpY2Vuc2Ugbm90aWNlcyBqdXN0IGFmdGVyIHRoZSB0aXRsZSBwYWdlOgorCisgICAgQ29weXJpZ2h0IChjKSAgWUVBUiAgWU9VUiBOQU1FLgorICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAorICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMgorICAgIG9yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICAgIHdpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIG5vIEJhY2stQ292ZXIgVGV4dHMuCisgICAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkICJHTlUKKyAgICBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSIuCisKK0lmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucywgRnJvbnQtQ292ZXIgVGV4dHMgYW5kIEJhY2stQ292ZXIgVGV4dHMsCityZXBsYWNlIHRoZSAid2l0aC4uLlRleHRzLiIgbGluZSB3aXRoIHRoaXM6CisKKyAgICB3aXRoIHRoZSBJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgTElTVCBUSEVJUiBUSVRMRVMsIHdpdGggdGhlCisgICAgRnJvbnQtQ292ZXIgVGV4dHMgYmVpbmcgTElTVCwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgTElTVC4KKworSWYgeW91IGhhdmUgSW52YXJpYW50IFNlY3Rpb25zIHdpdGhvdXQgQ292ZXIgVGV4dHMsIG9yIHNvbWUgb3RoZXIKK2NvbWJpbmF0aW9uIG9mIHRoZSB0aHJlZSwgbWVyZ2UgdGhvc2UgdHdvIGFsdGVybmF0aXZlcyB0byBzdWl0IHRoZQorc2l0dWF0aW9uLgorCitJZiB5b3VyIGRvY3VtZW50IGNvbnRhaW5zIG5vbnRyaXZpYWwgZXhhbXBsZXMgb2YgcHJvZ3JhbSBjb2RlLCB3ZQorcmVjb21tZW5kIHJlbGVhc2luZyB0aGVzZSBleGFtcGxlcyBpbiBwYXJhbGxlbCB1bmRlciB5b3VyIGNob2ljZSBvZgorZnJlZSBzb2Z0d2FyZSBsaWNlbnNlLCBzdWNoIGFzIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK3RvIHBlcm1pdCB0aGVpciB1c2UgaW4gZnJlZSBzb2Z0d2FyZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR0ZETC0xLjIgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dGREwtMS4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjODcyYzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dGREwtMS4yCkBAIC0wLDAgKzEsMzk5IEBACisKKyAgICAgICAgICAgICAgICBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UKKyAgICAgICAgICAgICAgICAgIFZlcnNpb24gMS4yLCBOb3ZlbWJlciAyMDAyCisKKworIENvcHlyaWdodCAoQykgMjAwMCwyMDAxLDIwMDIgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisKKzAuIFBSRUFNQkxFCisKK1RoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZSBpcyB0byBtYWtlIGEgbWFudWFsLCB0ZXh0Ym9vaywgb3Igb3RoZXIKK2Z1bmN0aW9uYWwgYW5kIHVzZWZ1bCBkb2N1bWVudCAiZnJlZSIgaW4gdGhlIHNlbnNlIG9mIGZyZWVkb206IHRvCithc3N1cmUgZXZlcnlvbmUgdGhlIGVmZmVjdGl2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIHJlZGlzdHJpYnV0ZSBpdCwKK3dpdGggb3Igd2l0aG91dCBtb2RpZnlpbmcgaXQsIGVpdGhlciBjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LgorU2Vjb25kYXJpbHksIHRoaXMgTGljZW5zZSBwcmVzZXJ2ZXMgZm9yIHRoZSBhdXRob3IgYW5kIHB1Ymxpc2hlciBhIHdheQordG8gZ2V0IGNyZWRpdCBmb3IgdGhlaXIgd29yaywgd2hpbGUgbm90IGJlaW5nIGNvbnNpZGVyZWQgcmVzcG9uc2libGUKK2ZvciBtb2RpZmljYXRpb25zIG1hZGUgYnkgb3RoZXJzLgorCitUaGlzIExpY2Vuc2UgaXMgYSBraW5kIG9mICJjb3B5bGVmdCIsIHdoaWNoIG1lYW5zIHRoYXQgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIGRvY3VtZW50IG11c3QgdGhlbXNlbHZlcyBiZSBmcmVlIGluIHRoZSBzYW1lIHNlbnNlLiAgSXQKK2NvbXBsZW1lbnRzIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2hpY2ggaXMgYSBjb3B5bGVmdAorbGljZW5zZSBkZXNpZ25lZCBmb3IgZnJlZSBzb2Z0d2FyZS4KKworV2UgaGF2ZSBkZXNpZ25lZCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gdXNlIGl0IGZvciBtYW51YWxzIGZvciBmcmVlCitzb2Z0d2FyZSwgYmVjYXVzZSBmcmVlIHNvZnR3YXJlIG5lZWRzIGZyZWUgZG9jdW1lbnRhdGlvbjogYSBmcmVlCitwcm9ncmFtIHNob3VsZCBjb21lIHdpdGggbWFudWFscyBwcm92aWRpbmcgdGhlIHNhbWUgZnJlZWRvbXMgdGhhdCB0aGUKK3NvZnR3YXJlIGRvZXMuICBCdXQgdGhpcyBMaWNlbnNlIGlzIG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIG1hbnVhbHM7CitpdCBjYW4gYmUgdXNlZCBmb3IgYW55IHRleHR1YWwgd29yaywgcmVnYXJkbGVzcyBvZiBzdWJqZWN0IG1hdHRlciBvcgord2hldGhlciBpdCBpcyBwdWJsaXNoZWQgYXMgYSBwcmludGVkIGJvb2suICBXZSByZWNvbW1lbmQgdGhpcyBMaWNlbnNlCitwcmluY2lwYWxseSBmb3Igd29ya3Mgd2hvc2UgcHVycG9zZSBpcyBpbnN0cnVjdGlvbiBvciByZWZlcmVuY2UuCisKKworMS4gQVBQTElDQUJJTElUWSBBTkQgREVGSU5JVElPTlMKKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IG1hbnVhbCBvciBvdGhlciB3b3JrLCBpbiBhbnkgbWVkaXVtLCB0aGF0Citjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IGNhbiBiZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gIFN1Y2ggYSBub3RpY2UgZ3JhbnRzIGEKK3dvcmxkLXdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlLCB1bmxpbWl0ZWQgaW4gZHVyYXRpb24sIHRvIHVzZSB0aGF0Cit3b3JrIHVuZGVyIHRoZSBjb25kaXRpb25zIHN0YXRlZCBoZXJlaW4uICBUaGUgIkRvY3VtZW50IiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggbWFudWFsIG9yIHdvcmsuICBBbnkgbWVtYmVyIG9mIHRoZSBwdWJsaWMgaXMgYQorbGljZW5zZWUsIGFuZCBpcyBhZGRyZXNzZWQgYXMgInlvdSIuICBZb3UgYWNjZXB0IHRoZSBsaWNlbnNlIGlmIHlvdQorY29weSwgbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIHdvcmsgaW4gYSB3YXkgcmVxdWlyaW5nIHBlcm1pc3Npb24KK3VuZGVyIGNvcHlyaWdodCBsYXcuCisKK0EgIk1vZGlmaWVkIFZlcnNpb24iIG9mIHRoZSBEb2N1bWVudCBtZWFucyBhbnkgd29yayBjb250YWluaW5nIHRoZQorRG9jdW1lbnQgb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgY29waWVkIHZlcmJhdGltLCBvciB3aXRoCittb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4KKworQSAiU2Vjb25kYXJ5IFNlY3Rpb24iIGlzIGEgbmFtZWQgYXBwZW5kaXggb3IgYSBmcm9udC1tYXR0ZXIgc2VjdGlvbiBvZgordGhlIERvY3VtZW50IHRoYXQgZGVhbHMgZXhjbHVzaXZlbHkgd2l0aCB0aGUgcmVsYXRpb25zaGlwIG9mIHRoZQorcHVibGlzaGVycyBvciBhdXRob3JzIG9mIHRoZSBEb2N1bWVudCB0byB0aGUgRG9jdW1lbnRgcyBvdmVyYWxsIHN1YmplY3QKKyhvciB0byByZWxhdGVkIG1hdHRlcnMpIGFuZCBjb250YWlucyBub3RoaW5nIHRoYXQgY291bGQgZmFsbCBkaXJlY3RseQord2l0aGluIHRoYXQgb3ZlcmFsbCBzdWJqZWN0LiAgKFRodXMsIGlmIHRoZSBEb2N1bWVudCBpcyBpbiBwYXJ0IGEKK3RleHRib29rIG9mIG1hdGhlbWF0aWNzLCBhIFNlY29uZGFyeSBTZWN0aW9uIG1heSBub3QgZXhwbGFpbiBhbnkKK21hdGhlbWF0aWNzLikgIFRoZSByZWxhdGlvbnNoaXAgY291bGQgYmUgYSBtYXR0ZXIgb2YgaGlzdG9yaWNhbAorY29ubmVjdGlvbiB3aXRoIHRoZSBzdWJqZWN0IG9yIHdpdGggcmVsYXRlZCBtYXR0ZXJzLCBvciBvZiBsZWdhbCwKK2NvbW1lcmNpYWwsIHBoaWxvc29waGljYWwsIGV0aGljYWwgb3IgcG9saXRpY2FsIHBvc2l0aW9uIHJlZ2FyZGluZwordGhlbS4KKworVGhlICJJbnZhcmlhbnQgU2VjdGlvbnMiIGFyZSBjZXJ0YWluIFNlY29uZGFyeSBTZWN0aW9ucyB3aG9zZSB0aXRsZXMKK2FyZSBkZXNpZ25hdGVkLCBhcyBiZWluZyB0aG9zZSBvZiBJbnZhcmlhbnQgU2VjdGlvbnMsIGluIHRoZSBub3RpY2UKK3RoYXQgc2F5cyB0aGF0IHRoZSBEb2N1bWVudCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBJZiBhCitzZWN0aW9uIGRvZXMgbm90IGZpdCB0aGUgYWJvdmUgZGVmaW5pdGlvbiBvZiBTZWNvbmRhcnkgdGhlbiBpdCBpcyBub3QKK2FsbG93ZWQgdG8gYmUgZGVzaWduYXRlZCBhcyBJbnZhcmlhbnQuICBUaGUgRG9jdW1lbnQgbWF5IGNvbnRhaW4gemVybworSW52YXJpYW50IFNlY3Rpb25zLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IGlkZW50aWZ5IGFueSBJbnZhcmlhbnQKK1NlY3Rpb25zIHRoZW4gdGhlcmUgYXJlIG5vbmUuCisKK1RoZSAiQ292ZXIgVGV4dHMiIGFyZSBjZXJ0YWluIHNob3J0IHBhc3NhZ2VzIG9mIHRleHQgdGhhdCBhcmUgbGlzdGVkLAorYXMgRnJvbnQtQ292ZXIgVGV4dHMgb3IgQmFjay1Db3ZlciBUZXh0cywgaW4gdGhlIG5vdGljZSB0aGF0IHNheXMgdGhhdAordGhlIERvY3VtZW50IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEEgRnJvbnQtQ292ZXIgVGV4dCBtYXkKK2JlIGF0IG1vc3QgNSB3b3JkcywgYW5kIGEgQmFjay1Db3ZlciBUZXh0IG1heSBiZSBhdCBtb3N0IDI1IHdvcmRzLgorCitBICJUcmFuc3BhcmVudCIgY29weSBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHksCityZXByZXNlbnRlZCBpbiBhIGZvcm1hdCB3aG9zZSBzcGVjaWZpY2F0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUKK2dlbmVyYWwgcHVibGljLCB0aGF0IGlzIHN1aXRhYmxlIGZvciByZXZpc2luZyB0aGUgZG9jdW1lbnQKK3N0cmFpZ2h0Zm9yd2FyZGx5IHdpdGggZ2VuZXJpYyB0ZXh0IGVkaXRvcnMgb3IgKGZvciBpbWFnZXMgY29tcG9zZWQgb2YKK3BpeGVscykgZ2VuZXJpYyBwYWludCBwcm9ncmFtcyBvciAoZm9yIGRyYXdpbmdzKSBzb21lIHdpZGVseSBhdmFpbGFibGUKK2RyYXdpbmcgZWRpdG9yLCBhbmQgdGhhdCBpcyBzdWl0YWJsZSBmb3IgaW5wdXQgdG8gdGV4dCBmb3JtYXR0ZXJzIG9yCitmb3IgYXV0b21hdGljIHRyYW5zbGF0aW9uIHRvIGEgdmFyaWV0eSBvZiBmb3JtYXRzIHN1aXRhYmxlIGZvciBpbnB1dAordG8gdGV4dCBmb3JtYXR0ZXJzLiAgQSBjb3B5IG1hZGUgaW4gYW4gb3RoZXJ3aXNlIFRyYW5zcGFyZW50IGZpbGUKK2Zvcm1hdCB3aG9zZSBtYXJrdXAsIG9yIGFic2VuY2Ugb2YgbWFya3VwLCBoYXMgYmVlbiBhcnJhbmdlZCB0byB0aHdhcnQKK29yIGRpc2NvdXJhZ2Ugc3Vic2VxdWVudCBtb2RpZmljYXRpb24gYnkgcmVhZGVycyBpcyBub3QgVHJhbnNwYXJlbnQuCitBbiBpbWFnZSBmb3JtYXQgaXMgbm90IFRyYW5zcGFyZW50IGlmIHVzZWQgZm9yIGFueSBzdWJzdGFudGlhbCBhbW91bnQKK29mIHRleHQuICBBIGNvcHkgdGhhdCBpcyBub3QgIlRyYW5zcGFyZW50IiBpcyBjYWxsZWQgIk9wYXF1ZSIuCisKK0V4YW1wbGVzIG9mIHN1aXRhYmxlIGZvcm1hdHMgZm9yIFRyYW5zcGFyZW50IGNvcGllcyBpbmNsdWRlIHBsYWluCitBU0NJSSB3aXRob3V0IG1hcmt1cCwgVGV4aW5mbyBpbnB1dCBmb3JtYXQsIExhVGVYIGlucHV0IGZvcm1hdCwgU0dNTAorb3IgWE1MIHVzaW5nIGEgcHVibGljbHkgYXZhaWxhYmxlIERURCwgYW5kIHN0YW5kYXJkLWNvbmZvcm1pbmcgc2ltcGxlCitIVE1MLCBQb3N0U2NyaXB0IG9yIFBERiBkZXNpZ25lZCBmb3IgaHVtYW4gbW9kaWZpY2F0aW9uLiAgRXhhbXBsZXMgb2YKK3RyYW5zcGFyZW50IGltYWdlIGZvcm1hdHMgaW5jbHVkZSBQTkcsIFhDRiBhbmQgSlBHLiAgT3BhcXVlIGZvcm1hdHMKK2luY2x1ZGUgcHJvcHJpZXRhcnkgZm9ybWF0cyB0aGF0IGNhbiBiZSByZWFkIGFuZCBlZGl0ZWQgb25seSBieQorcHJvcHJpZXRhcnkgd29yZCBwcm9jZXNzb3JzLCBTR01MIG9yIFhNTCBmb3Igd2hpY2ggdGhlIERURCBhbmQvb3IKK3Byb2Nlc3NpbmcgdG9vbHMgYXJlIG5vdCBnZW5lcmFsbHkgYXZhaWxhYmxlLCBhbmQgdGhlCittYWNoaW5lLWdlbmVyYXRlZCBIVE1MLCBQb3N0U2NyaXB0IG9yIFBERiBwcm9kdWNlZCBieSBzb21lIHdvcmQKK3Byb2Nlc3NvcnMgZm9yIG91dHB1dCBwdXJwb3NlcyBvbmx5LgorCitUaGUgIlRpdGxlIFBhZ2UiIG1lYW5zLCBmb3IgYSBwcmludGVkIGJvb2ssIHRoZSB0aXRsZSBwYWdlIGl0c2VsZiwKK3BsdXMgc3VjaCBmb2xsb3dpbmcgcGFnZXMgYXMgYXJlIG5lZWRlZCB0byBob2xkLCBsZWdpYmx5LCB0aGUgbWF0ZXJpYWwKK3RoaXMgTGljZW5zZSByZXF1aXJlcyB0byBhcHBlYXIgaW4gdGhlIHRpdGxlIHBhZ2UuICBGb3Igd29ya3MgaW4KK2Zvcm1hdHMgd2hpY2ggZG8gbm90IGhhdmUgYW55IHRpdGxlIHBhZ2UgYXMgc3VjaCwgIlRpdGxlIFBhZ2UiIG1lYW5zCit0aGUgdGV4dCBuZWFyIHRoZSBtb3N0IHByb21pbmVudCBhcHBlYXJhbmNlIG9mIHRoZSB3b3JrYHMgdGl0bGUsCitwcmVjZWRpbmcgdGhlIGJlZ2lubmluZyBvZiB0aGUgYm9keSBvZiB0aGUgdGV4dC4KKworQSBzZWN0aW9uICJFbnRpdGxlZCBYWVoiIG1lYW5zIGEgbmFtZWQgc3VidW5pdCBvZiB0aGUgRG9jdW1lbnQgd2hvc2UKK3RpdGxlIGVpdGhlciBpcyBwcmVjaXNlbHkgWFlaIG9yIGNvbnRhaW5zIFhZWiBpbiBwYXJlbnRoZXNlcyBmb2xsb3dpbmcKK3RleHQgdGhhdCB0cmFuc2xhdGVzIFhZWiBpbiBhbm90aGVyIGxhbmd1YWdlLiAgKEhlcmUgWFlaIHN0YW5kcyBmb3IgYQorc3BlY2lmaWMgc2VjdGlvbiBuYW1lIG1lbnRpb25lZCBiZWxvdywgc3VjaCBhcyAiQWNrbm93bGVkZ2VtZW50cyIsCisiRGVkaWNhdGlvbnMiLCAiRW5kb3JzZW1lbnRzIiwgb3IgIkhpc3RvcnkiLikgIFRvICJQcmVzZXJ2ZSB0aGUgVGl0bGUiCitvZiBzdWNoIGEgc2VjdGlvbiB3aGVuIHlvdSBtb2RpZnkgdGhlIERvY3VtZW50IG1lYW5zIHRoYXQgaXQgcmVtYWlucyBhCitzZWN0aW9uICJFbnRpdGxlZCBYWVoiIGFjY29yZGluZyB0byB0aGlzIGRlZmluaXRpb24uCisKK1RoZSBEb2N1bWVudCBtYXkgaW5jbHVkZSBXYXJyYW50eSBEaXNjbGFpbWVycyBuZXh0IHRvIHRoZSBub3RpY2Ugd2hpY2gKK3N0YXRlcyB0aGF0IHRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIHRoZSBEb2N1bWVudC4gIFRoZXNlIFdhcnJhbnR5CitEaXNjbGFpbWVycyBhcmUgY29uc2lkZXJlZCB0byBiZSBpbmNsdWRlZCBieSByZWZlcmVuY2UgaW4gdGhpcworTGljZW5zZSwgYnV0IG9ubHkgYXMgcmVnYXJkcyBkaXNjbGFpbWluZyB3YXJyYW50aWVzOiBhbnkgb3RoZXIKK2ltcGxpY2F0aW9uIHRoYXQgdGhlc2UgV2FycmFudHkgRGlzY2xhaW1lcnMgbWF5IGhhdmUgaXMgdm9pZCBhbmQgaGFzCitubyBlZmZlY3Qgb24gdGhlIG1lYW5pbmcgb2YgdGhpcyBMaWNlbnNlLgorCisKKzIuIFZFUkJBVElNIENPUFlJTkcKKworWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpbiBhbnkgbWVkaXVtLCBlaXRoZXIKK2NvbW1lcmNpYWxseSBvciBub25jb21tZXJjaWFsbHksIHByb3ZpZGVkIHRoYXQgdGhpcyBMaWNlbnNlLCB0aGUKK2NvcHlyaWdodCBub3RpY2VzLCBhbmQgdGhlIGxpY2Vuc2Ugbm90aWNlIHNheWluZyB0aGlzIExpY2Vuc2UgYXBwbGllcwordG8gdGhlIERvY3VtZW50IGFyZSByZXByb2R1Y2VkIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IHlvdSBhZGQgbm8gb3RoZXIKK2NvbmRpdGlvbnMgd2hhdHNvZXZlciB0byB0aG9zZSBvZiB0aGlzIExpY2Vuc2UuICBZb3UgbWF5IG5vdCB1c2UKK3RlY2huaWNhbCBtZWFzdXJlcyB0byBvYnN0cnVjdCBvciBjb250cm9sIHRoZSByZWFkaW5nIG9yIGZ1cnRoZXIKK2NvcHlpbmcgb2YgdGhlIGNvcGllcyB5b3UgbWFrZSBvciBkaXN0cmlidXRlLiAgSG93ZXZlciwgeW91IG1heSBhY2NlcHQKK2NvbXBlbnNhdGlvbiBpbiBleGNoYW5nZSBmb3IgY29waWVzLiAgSWYgeW91IGRpc3RyaWJ1dGUgYSBsYXJnZSBlbm91Z2gKK251bWJlciBvZiBjb3BpZXMgeW91IG11c3QgYWxzbyBmb2xsb3cgdGhlIGNvbmRpdGlvbnMgaW4gc2VjdGlvbiAzLgorCitZb3UgbWF5IGFsc28gbGVuZCBjb3BpZXMsIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgc3RhdGVkIGFib3ZlLCBhbmQKK3lvdSBtYXkgcHVibGljbHkgZGlzcGxheSBjb3BpZXMuCisKKworMy4gQ09QWUlORyBJTiBRVUFOVElUWQorCitJZiB5b3UgcHVibGlzaCBwcmludGVkIGNvcGllcyAob3IgY29waWVzIGluIG1lZGlhIHRoYXQgY29tbW9ubHkgaGF2ZQorcHJpbnRlZCBjb3ZlcnMpIG9mIHRoZSBEb2N1bWVudCwgbnVtYmVyaW5nIG1vcmUgdGhhbiAxMDAsIGFuZCB0aGUKK0RvY3VtZW50YHMgbGljZW5zZSBub3RpY2UgcmVxdWlyZXMgQ292ZXIgVGV4dHMsIHlvdSBtdXN0IGVuY2xvc2UgdGhlCitjb3BpZXMgaW4gY292ZXJzIHRoYXQgY2FycnksIGNsZWFybHkgYW5kIGxlZ2libHksIGFsbCB0aGVzZSBDb3ZlcgorVGV4dHM6IEZyb250LUNvdmVyIFRleHRzIG9uIHRoZSBmcm9udCBjb3ZlciwgYW5kIEJhY2stQ292ZXIgVGV4dHMgb24KK3RoZSBiYWNrIGNvdmVyLiAgQm90aCBjb3ZlcnMgbXVzdCBhbHNvIGNsZWFybHkgYW5kIGxlZ2libHkgaWRlbnRpZnkKK3lvdSBhcyB0aGUgcHVibGlzaGVyIG9mIHRoZXNlIGNvcGllcy4gIFRoZSBmcm9udCBjb3ZlciBtdXN0IHByZXNlbnQKK3RoZSBmdWxsIHRpdGxlIHdpdGggYWxsIHdvcmRzIG9mIHRoZSB0aXRsZSBlcXVhbGx5IHByb21pbmVudCBhbmQKK3Zpc2libGUuICBZb3UgbWF5IGFkZCBvdGhlciBtYXRlcmlhbCBvbiB0aGUgY292ZXJzIGluIGFkZGl0aW9uLgorQ29weWluZyB3aXRoIGNoYW5nZXMgbGltaXRlZCB0byB0aGUgY292ZXJzLCBhcyBsb25nIGFzIHRoZXkgcHJlc2VydmUKK3RoZSB0aXRsZSBvZiB0aGUgRG9jdW1lbnQgYW5kIHNhdGlzZnkgdGhlc2UgY29uZGl0aW9ucywgY2FuIGJlIHRyZWF0ZWQKK2FzIHZlcmJhdGltIGNvcHlpbmcgaW4gb3RoZXIgcmVzcGVjdHMuCisKK0lmIHRoZSByZXF1aXJlZCB0ZXh0cyBmb3IgZWl0aGVyIGNvdmVyIGFyZSB0b28gdm9sdW1pbm91cyB0byBmaXQKK2xlZ2libHksIHlvdSBzaG91bGQgcHV0IHRoZSBmaXJzdCBvbmVzIGxpc3RlZCAoYXMgbWFueSBhcyBmaXQKK3JlYXNvbmFibHkpIG9uIHRoZSBhY3R1YWwgY292ZXIsIGFuZCBjb250aW51ZSB0aGUgcmVzdCBvbnRvIGFkamFjZW50CitwYWdlcy4KKworSWYgeW91IHB1Ymxpc2ggb3IgZGlzdHJpYnV0ZSBPcGFxdWUgY29waWVzIG9mIHRoZSBEb2N1bWVudCBudW1iZXJpbmcKK21vcmUgdGhhbiAxMDAsIHlvdSBtdXN0IGVpdGhlciBpbmNsdWRlIGEgbWFjaGluZS1yZWFkYWJsZSBUcmFuc3BhcmVudAorY29weSBhbG9uZyB3aXRoIGVhY2ggT3BhcXVlIGNvcHksIG9yIHN0YXRlIGluIG9yIHdpdGggZWFjaCBPcGFxdWUgY29weQorYSBjb21wdXRlci1uZXR3b3JrIGxvY2F0aW9uIGZyb20gd2hpY2ggdGhlIGdlbmVyYWwgbmV0d29yay11c2luZworcHVibGljIGhhcyBhY2Nlc3MgdG8gZG93bmxvYWQgdXNpbmcgcHVibGljLXN0YW5kYXJkIG5ldHdvcmsgcHJvdG9jb2xzCithIGNvbXBsZXRlIFRyYW5zcGFyZW50IGNvcHkgb2YgdGhlIERvY3VtZW50LCBmcmVlIG9mIGFkZGVkIG1hdGVyaWFsLgorSWYgeW91IHVzZSB0aGUgbGF0dGVyIG9wdGlvbiwgeW91IG11c3QgdGFrZSByZWFzb25hYmx5IHBydWRlbnQgc3RlcHMsCit3aGVuIHlvdSBiZWdpbiBkaXN0cmlidXRpb24gb2YgT3BhcXVlIGNvcGllcyBpbiBxdWFudGl0eSwgdG8gZW5zdXJlCit0aGF0IHRoaXMgVHJhbnNwYXJlbnQgY29weSB3aWxsIHJlbWFpbiB0aHVzIGFjY2Vzc2libGUgYXQgdGhlIHN0YXRlZAorbG9jYXRpb24gdW50aWwgYXQgbGVhc3Qgb25lIHllYXIgYWZ0ZXIgdGhlIGxhc3QgdGltZSB5b3UgZGlzdHJpYnV0ZSBhbgorT3BhcXVlIGNvcHkgKGRpcmVjdGx5IG9yIHRocm91Z2ggeW91ciBhZ2VudHMgb3IgcmV0YWlsZXJzKSBvZiB0aGF0CitlZGl0aW9uIHRvIHRoZSBwdWJsaWMuCisKK0l0IGlzIHJlcXVlc3RlZCwgYnV0IG5vdCByZXF1aXJlZCwgdGhhdCB5b3UgY29udGFjdCB0aGUgYXV0aG9ycyBvZiB0aGUKK0RvY3VtZW50IHdlbGwgYmVmb3JlIHJlZGlzdHJpYnV0aW5nIGFueSBsYXJnZSBudW1iZXIgb2YgY29waWVzLCB0byBnaXZlCit0aGVtIGEgY2hhbmNlIHRvIHByb3ZpZGUgeW91IHdpdGggYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoZSBEb2N1bWVudC4KKworCis0LiBNT0RJRklDQVRJT05TCisKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSBhIE1vZGlmaWVkIFZlcnNpb24gb2YgdGhlIERvY3VtZW50IHVuZGVyCit0aGUgY29uZGl0aW9ucyBvZiBzZWN0aW9ucyAyIGFuZCAzIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSByZWxlYXNlCit0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciBwcmVjaXNlbHkgdGhpcyBMaWNlbnNlLCB3aXRoIHRoZSBNb2RpZmllZAorVmVyc2lvbiBmaWxsaW5nIHRoZSByb2xlIG9mIHRoZSBEb2N1bWVudCwgdGh1cyBsaWNlbnNpbmcgZGlzdHJpYnV0aW9uCithbmQgbW9kaWZpY2F0aW9uIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIHRvIHdob2V2ZXIgcG9zc2Vzc2VzIGEgY29weQorb2YgaXQuICBJbiBhZGRpdGlvbiwgeW91IG11c3QgZG8gdGhlc2UgdGhpbmdzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uOgorCitBLiBVc2UgaW4gdGhlIFRpdGxlIFBhZ2UgKGFuZCBvbiB0aGUgY292ZXJzLCBpZiBhbnkpIGEgdGl0bGUgZGlzdGluY3QKKyAgIGZyb20gdGhhdCBvZiB0aGUgRG9jdW1lbnQsIGFuZCBmcm9tIHRob3NlIG9mIHByZXZpb3VzIHZlcnNpb25zCisgICAod2hpY2ggc2hvdWxkLCBpZiB0aGVyZSB3ZXJlIGFueSwgYmUgbGlzdGVkIGluIHRoZSBIaXN0b3J5IHNlY3Rpb24KKyAgIG9mIHRoZSBEb2N1bWVudCkuICBZb3UgbWF5IHVzZSB0aGUgc2FtZSB0aXRsZSBhcyBhIHByZXZpb3VzIHZlcnNpb24KKyAgIGlmIHRoZSBvcmlnaW5hbCBwdWJsaXNoZXIgb2YgdGhhdCB2ZXJzaW9uIGdpdmVzIHBlcm1pc3Npb24uCitCLiBMaXN0IG9uIHRoZSBUaXRsZSBQYWdlLCBhcyBhdXRob3JzLCBvbmUgb3IgbW9yZSBwZXJzb25zIG9yIGVudGl0aWVzCisgICByZXNwb25zaWJsZSBmb3IgYXV0aG9yc2hpcCBvZiB0aGUgbW9kaWZpY2F0aW9ucyBpbiB0aGUgTW9kaWZpZWQKKyAgIFZlcnNpb24sIHRvZ2V0aGVyIHdpdGggYXQgbGVhc3QgZml2ZSBvZiB0aGUgcHJpbmNpcGFsIGF1dGhvcnMgb2YgdGhlCisgICBEb2N1bWVudCAoYWxsIG9mIGl0cyBwcmluY2lwYWwgYXV0aG9ycywgaWYgaXQgaGFzIGZld2VyIHRoYW4gZml2ZSksCisgICB1bmxlc3MgdGhleSByZWxlYXNlIHlvdSBmcm9tIHRoaXMgcmVxdWlyZW1lbnQuCitDLiBTdGF0ZSBvbiB0aGUgVGl0bGUgcGFnZSB0aGUgbmFtZSBvZiB0aGUgcHVibGlzaGVyIG9mIHRoZQorICAgTW9kaWZpZWQgVmVyc2lvbiwgYXMgdGhlIHB1Ymxpc2hlci4KK0QuIFByZXNlcnZlIGFsbCB0aGUgY29weXJpZ2h0IG5vdGljZXMgb2YgdGhlIERvY3VtZW50LgorRS4gQWRkIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgZm9yIHlvdXIgbW9kaWZpY2F0aW9ucworICAgYWRqYWNlbnQgdG8gdGhlIG90aGVyIGNvcHlyaWdodCBub3RpY2VzLgorRi4gSW5jbHVkZSwgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGNvcHlyaWdodCBub3RpY2VzLCBhIGxpY2Vuc2Ugbm90aWNlCisgICBnaXZpbmcgdGhlIHB1YmxpYyBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciB0aGUKKyAgIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW4gdGhlIGZvcm0gc2hvd24gaW4gdGhlIEFkZGVuZHVtIGJlbG93LgorRy4gUHJlc2VydmUgaW4gdGhhdCBsaWNlbnNlIG5vdGljZSB0aGUgZnVsbCBsaXN0cyBvZiBJbnZhcmlhbnQgU2VjdGlvbnMKKyAgIGFuZCByZXF1aXJlZCBDb3ZlciBUZXh0cyBnaXZlbiBpbiB0aGUgRG9jdW1lbnRgcyBsaWNlbnNlIG5vdGljZS4KK0guIEluY2x1ZGUgYW4gdW5hbHRlcmVkIGNvcHkgb2YgdGhpcyBMaWNlbnNlLgorSS4gUHJlc2VydmUgdGhlIHNlY3Rpb24gRW50aXRsZWQgIkhpc3RvcnkiLCBQcmVzZXJ2ZSBpdHMgVGl0bGUsIGFuZCBhZGQKKyAgIHRvIGl0IGFuIGl0ZW0gc3RhdGluZyBhdCBsZWFzdCB0aGUgdGl0bGUsIHllYXIsIG5ldyBhdXRob3JzLCBhbmQKKyAgIHB1Ymxpc2hlciBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBhcyBnaXZlbiBvbiB0aGUgVGl0bGUgUGFnZS4gIElmCisgICB0aGVyZSBpcyBubyBzZWN0aW9uIEVudGl0bGVkICJIaXN0b3J5IiBpbiB0aGUgRG9jdW1lbnQsIGNyZWF0ZSBvbmUKKyAgIHN0YXRpbmcgdGhlIHRpdGxlLCB5ZWFyLCBhdXRob3JzLCBhbmQgcHVibGlzaGVyIG9mIHRoZSBEb2N1bWVudCBhcworICAgZ2l2ZW4gb24gaXRzIFRpdGxlIFBhZ2UsIHRoZW4gYWRkIGFuIGl0ZW0gZGVzY3JpYmluZyB0aGUgTW9kaWZpZWQKKyAgIFZlcnNpb24gYXMgc3RhdGVkIGluIHRoZSBwcmV2aW91cyBzZW50ZW5jZS4KK0ouIFByZXNlcnZlIHRoZSBuZXR3b3JrIGxvY2F0aW9uLCBpZiBhbnksIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IKKyAgIHB1YmxpYyBhY2Nlc3MgdG8gYSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgYW5kIGxpa2V3aXNlCisgICB0aGUgbmV0d29yayBsb2NhdGlvbnMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvciBwcmV2aW91cyB2ZXJzaW9ucworICAgaXQgd2FzIGJhc2VkIG9uLiAgVGhlc2UgbWF5IGJlIHBsYWNlZCBpbiB0aGUgIkhpc3RvcnkiIHNlY3Rpb24uCisgICBZb3UgbWF5IG9taXQgYSBuZXR3b3JrIGxvY2F0aW9uIGZvciBhIHdvcmsgdGhhdCB3YXMgcHVibGlzaGVkIGF0CisgICBsZWFzdCBmb3VyIHllYXJzIGJlZm9yZSB0aGUgRG9jdW1lbnQgaXRzZWxmLCBvciBpZiB0aGUgb3JpZ2luYWwKKyAgIHB1Ymxpc2hlciBvZiB0aGUgdmVyc2lvbiBpdCByZWZlcnMgdG8gZ2l2ZXMgcGVybWlzc2lvbi4KK0suIEZvciBhbnkgc2VjdGlvbiBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIgb3IgIkRlZGljYXRpb25zIiwKKyAgIFByZXNlcnZlIHRoZSBUaXRsZSBvZiB0aGUgc2VjdGlvbiwgYW5kIHByZXNlcnZlIGluIHRoZSBzZWN0aW9uIGFsbAorICAgdGhlIHN1YnN0YW5jZSBhbmQgdG9uZSBvZiBlYWNoIG9mIHRoZSBjb250cmlidXRvciBhY2tub3dsZWRnZW1lbnRzCisgICBhbmQvb3IgZGVkaWNhdGlvbnMgZ2l2ZW4gdGhlcmVpbi4KK0wuIFByZXNlcnZlIGFsbCB0aGUgSW52YXJpYW50IFNlY3Rpb25zIG9mIHRoZSBEb2N1bWVudCwKKyAgIHVuYWx0ZXJlZCBpbiB0aGVpciB0ZXh0IGFuZCBpbiB0aGVpciB0aXRsZXMuICBTZWN0aW9uIG51bWJlcnMKKyAgIG9yIHRoZSBlcXVpdmFsZW50IGFyZSBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBzZWN0aW9uIHRpdGxlcy4KK00uIERlbGV0ZSBhbnkgc2VjdGlvbiBFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIi4gIFN1Y2ggYSBzZWN0aW9uCisgICBtYXkgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLgorTi4gRG8gbm90IHJldGl0bGUgYW55IGV4aXN0aW5nIHNlY3Rpb24gdG8gYmUgRW50aXRsZWQgIkVuZG9yc2VtZW50cyIKKyAgIG9yIHRvIGNvbmZsaWN0IGluIHRpdGxlIHdpdGggYW55IEludmFyaWFudCBTZWN0aW9uLgorTy4gUHJlc2VydmUgYW55IFdhcnJhbnR5IERpc2NsYWltZXJzLgorCitJZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBpbmNsdWRlcyBuZXcgZnJvbnQtbWF0dGVyIHNlY3Rpb25zIG9yCithcHBlbmRpY2VzIHRoYXQgcXVhbGlmeSBhcyBTZWNvbmRhcnkgU2VjdGlvbnMgYW5kIGNvbnRhaW4gbm8gbWF0ZXJpYWwKK2NvcGllZCBmcm9tIHRoZSBEb2N1bWVudCwgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBkZXNpZ25hdGUgc29tZSBvciBhbGwKK29mIHRoZXNlIHNlY3Rpb25zIGFzIGludmFyaWFudC4gIFRvIGRvIHRoaXMsIGFkZCB0aGVpciB0aXRsZXMgdG8gdGhlCitsaXN0IG9mIEludmFyaWFudCBTZWN0aW9ucyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbmBzIGxpY2Vuc2Ugbm90aWNlLgorVGhlc2UgdGl0bGVzIG11c3QgYmUgZGlzdGluY3QgZnJvbSBhbnkgb3RoZXIgc2VjdGlvbiB0aXRsZXMuCisKK1lvdSBtYXkgYWRkIGEgc2VjdGlvbiBFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIiwgcHJvdmlkZWQgaXQgY29udGFpbnMKK25vdGhpbmcgYnV0IGVuZG9yc2VtZW50cyBvZiB5b3VyIE1vZGlmaWVkIFZlcnNpb24gYnkgdmFyaW91cworcGFydGllcy0tZm9yIGV4YW1wbGUsIHN0YXRlbWVudHMgb2YgcGVlciByZXZpZXcgb3IgdGhhdCB0aGUgdGV4dCBoYXMKK2JlZW4gYXBwcm92ZWQgYnkgYW4gb3JnYW5pemF0aW9uIGFzIHRoZSBhdXRob3JpdGF0aXZlIGRlZmluaXRpb24gb2YgYQorc3RhbmRhcmQuCisKK1lvdSBtYXkgYWRkIGEgcGFzc2FnZSBvZiB1cCB0byBmaXZlIHdvcmRzIGFzIGEgRnJvbnQtQ292ZXIgVGV4dCwgYW5kIGEKK3Bhc3NhZ2Ugb2YgdXAgdG8gMjUgd29yZHMgYXMgYSBCYWNrLUNvdmVyIFRleHQsIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKK29mIENvdmVyIFRleHRzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLiAgT25seSBvbmUgcGFzc2FnZSBvZgorRnJvbnQtQ292ZXIgVGV4dCBhbmQgb25lIG9mIEJhY2stQ292ZXIgVGV4dCBtYXkgYmUgYWRkZWQgYnkgKG9yCit0aHJvdWdoIGFycmFuZ2VtZW50cyBtYWRlIGJ5KSBhbnkgb25lIGVudGl0eS4gIElmIHRoZSBEb2N1bWVudCBhbHJlYWR5CitpbmNsdWRlcyBhIGNvdmVyIHRleHQgZm9yIHRoZSBzYW1lIGNvdmVyLCBwcmV2aW91c2x5IGFkZGVkIGJ5IHlvdSBvcgorYnkgYXJyYW5nZW1lbnQgbWFkZSBieSB0aGUgc2FtZSBlbnRpdHkgeW91IGFyZSBhY3Rpbmcgb24gYmVoYWxmIG9mLAoreW91IG1heSBub3QgYWRkIGFub3RoZXI7IGJ1dCB5b3UgbWF5IHJlcGxhY2UgdGhlIG9sZCBvbmUsIG9uIGV4cGxpY2l0CitwZXJtaXNzaW9uIGZyb20gdGhlIHByZXZpb3VzIHB1Ymxpc2hlciB0aGF0IGFkZGVkIHRoZSBvbGQgb25lLgorCitUaGUgYXV0aG9yKHMpIGFuZCBwdWJsaXNoZXIocykgb2YgdGhlIERvY3VtZW50IGRvIG5vdCBieSB0aGlzIExpY2Vuc2UKK2dpdmUgcGVybWlzc2lvbiB0byB1c2UgdGhlaXIgbmFtZXMgZm9yIHB1YmxpY2l0eSBmb3Igb3IgdG8gYXNzZXJ0IG9yCitpbXBseSBlbmRvcnNlbWVudCBvZiBhbnkgTW9kaWZpZWQgVmVyc2lvbi4KKworCis1LiBDT01CSU5JTkcgRE9DVU1FTlRTCisKK1lvdSBtYXkgY29tYmluZSB0aGUgRG9jdW1lbnQgd2l0aCBvdGhlciBkb2N1bWVudHMgcmVsZWFzZWQgdW5kZXIgdGhpcworTGljZW5zZSwgdW5kZXIgdGhlIHRlcm1zIGRlZmluZWQgaW4gc2VjdGlvbiA0IGFib3ZlIGZvciBtb2RpZmllZAordmVyc2lvbnMsIHByb3ZpZGVkIHRoYXQgeW91IGluY2x1ZGUgaW4gdGhlIGNvbWJpbmF0aW9uIGFsbCBvZiB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBvZiBhbGwgb2YgdGhlIG9yaWdpbmFsIGRvY3VtZW50cywgdW5tb2RpZmllZCwgYW5kCitsaXN0IHRoZW0gYWxsIGFzIEludmFyaWFudCBTZWN0aW9ucyBvZiB5b3VyIGNvbWJpbmVkIHdvcmsgaW4gaXRzCitsaWNlbnNlIG5vdGljZSwgYW5kIHRoYXQgeW91IHByZXNlcnZlIGFsbCB0aGVpciBXYXJyYW50eSBEaXNjbGFpbWVycy4KKworVGhlIGNvbWJpbmVkIHdvcmsgbmVlZCBvbmx5IGNvbnRhaW4gb25lIGNvcHkgb2YgdGhpcyBMaWNlbnNlLCBhbmQKK211bHRpcGxlIGlkZW50aWNhbCBJbnZhcmlhbnQgU2VjdGlvbnMgbWF5IGJlIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUKK2NvcHkuICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgSW52YXJpYW50IFNlY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZSBidXQKK2RpZmZlcmVudCBjb250ZW50cywgbWFrZSB0aGUgdGl0bGUgb2YgZWFjaCBzdWNoIHNlY3Rpb24gdW5pcXVlIGJ5CithZGRpbmcgYXQgdGhlIGVuZCBvZiBpdCwgaW4gcGFyZW50aGVzZXMsIHRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbAorYXV0aG9yIG9yIHB1Ymxpc2hlciBvZiB0aGF0IHNlY3Rpb24gaWYga25vd24sIG9yIGVsc2UgYSB1bmlxdWUgbnVtYmVyLgorTWFrZSB0aGUgc2FtZSBhZGp1c3RtZW50IHRvIHRoZSBzZWN0aW9uIHRpdGxlcyBpbiB0aGUgbGlzdCBvZgorSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBsaWNlbnNlIG5vdGljZSBvZiB0aGUgY29tYmluZWQgd29yay4KKworSW4gdGhlIGNvbWJpbmF0aW9uLCB5b3UgbXVzdCBjb21iaW5lIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAiSGlzdG9yeSIKK2luIHRoZSB2YXJpb3VzIG9yaWdpbmFsIGRvY3VtZW50cywgZm9ybWluZyBvbmUgc2VjdGlvbiBFbnRpdGxlZAorIkhpc3RvcnkiOyBsaWtld2lzZSBjb21iaW5lIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIsCithbmQgYW55IHNlY3Rpb25zIEVudGl0bGVkICJEZWRpY2F0aW9ucyIuICBZb3UgbXVzdCBkZWxldGUgYWxsIHNlY3Rpb25zCitFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIi4KKworCis2LiBDT0xMRUNUSU9OUyBPRiBET0NVTUVOVFMKKworWW91IG1heSBtYWtlIGEgY29sbGVjdGlvbiBjb25zaXN0aW5nIG9mIHRoZSBEb2N1bWVudCBhbmQgb3RoZXIgZG9jdW1lbnRzCityZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCByZXBsYWNlIHRoZSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGlzCitMaWNlbnNlIGluIHRoZSB2YXJpb3VzIGRvY3VtZW50cyB3aXRoIGEgc2luZ2xlIGNvcHkgdGhhdCBpcyBpbmNsdWRlZCBpbgordGhlIGNvbGxlY3Rpb24sIHByb3ZpZGVkIHRoYXQgeW91IGZvbGxvdyB0aGUgcnVsZXMgb2YgdGhpcyBMaWNlbnNlIGZvcgordmVyYmF0aW0gY29weWluZyBvZiBlYWNoIG9mIHRoZSBkb2N1bWVudHMgaW4gYWxsIG90aGVyIHJlc3BlY3RzLgorCitZb3UgbWF5IGV4dHJhY3QgYSBzaW5nbGUgZG9jdW1lbnQgZnJvbSBzdWNoIGEgY29sbGVjdGlvbiwgYW5kIGRpc3RyaWJ1dGUKK2l0IGluZGl2aWR1YWxseSB1bmRlciB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHlvdSBpbnNlcnQgYSBjb3B5IG9mIHRoaXMKK0xpY2Vuc2UgaW50byB0aGUgZXh0cmFjdGVkIGRvY3VtZW50LCBhbmQgZm9sbG93IHRoaXMgTGljZW5zZSBpbiBhbGwKK290aGVyIHJlc3BlY3RzIHJlZ2FyZGluZyB2ZXJiYXRpbSBjb3B5aW5nIG9mIHRoYXQgZG9jdW1lbnQuCisKKworNy4gQUdHUkVHQVRJT04gV0lUSCBJTkRFUEVOREVOVCBXT1JLUworCitBIGNvbXBpbGF0aW9uIG9mIHRoZSBEb2N1bWVudCBvciBpdHMgZGVyaXZhdGl2ZXMgd2l0aCBvdGhlciBzZXBhcmF0ZQorYW5kIGluZGVwZW5kZW50IGRvY3VtZW50cyBvciB3b3JrcywgaW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yCitkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4gImFnZ3JlZ2F0ZSIgaWYgdGhlIGNvcHlyaWdodAorcmVzdWx0aW5nIGZyb20gdGhlIGNvbXBpbGF0aW9uIGlzIG5vdCB1c2VkIHRvIGxpbWl0IHRoZSBsZWdhbCByaWdodHMKK29mIHRoZSBjb21waWxhdGlvbmBzIHVzZXJzIGJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4KK1doZW4gdGhlIERvY3VtZW50IGlzIGluY2x1ZGVkIGluIGFuIGFnZ3JlZ2F0ZSwgdGhpcyBMaWNlbnNlIGRvZXMgbm90CithcHBseSB0byB0aGUgb3RoZXIgd29ya3MgaW4gdGhlIGFnZ3JlZ2F0ZSB3aGljaCBhcmUgbm90IHRoZW1zZWx2ZXMKK2Rlcml2YXRpdmUgd29ya3Mgb2YgdGhlIERvY3VtZW50LgorCitJZiB0aGUgQ292ZXIgVGV4dCByZXF1aXJlbWVudCBvZiBzZWN0aW9uIDMgaXMgYXBwbGljYWJsZSB0byB0aGVzZQorY29waWVzIG9mIHRoZSBEb2N1bWVudCwgdGhlbiBpZiB0aGUgRG9jdW1lbnQgaXMgbGVzcyB0aGFuIG9uZSBoYWxmIG9mCit0aGUgZW50aXJlIGFnZ3JlZ2F0ZSwgdGhlIERvY3VtZW50YHMgQ292ZXIgVGV4dHMgbWF5IGJlIHBsYWNlZCBvbgorY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgRG9jdW1lbnQgd2l0aGluIHRoZSBhZ2dyZWdhdGUsIG9yIHRoZQorZWxlY3Ryb25pYyBlcXVpdmFsZW50IG9mIGNvdmVycyBpZiB0aGUgRG9jdW1lbnQgaXMgaW4gZWxlY3Ryb25pYyBmb3JtLgorT3RoZXJ3aXNlIHRoZXkgbXVzdCBhcHBlYXIgb24gcHJpbnRlZCBjb3ZlcnMgdGhhdCBicmFja2V0IHRoZSB3aG9sZQorYWdncmVnYXRlLgorCisKKzguIFRSQU5TTEFUSU9OCisKK1RyYW5zbGF0aW9uIGlzIGNvbnNpZGVyZWQgYSBraW5kIG9mIG1vZGlmaWNhdGlvbiwgc28geW91IG1heQorZGlzdHJpYnV0ZSB0cmFuc2xhdGlvbnMgb2YgdGhlIERvY3VtZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiBzZWN0aW9uIDQuCitSZXBsYWNpbmcgSW52YXJpYW50IFNlY3Rpb25zIHdpdGggdHJhbnNsYXRpb25zIHJlcXVpcmVzIHNwZWNpYWwKK3Blcm1pc3Npb24gZnJvbSB0aGVpciBjb3B5cmlnaHQgaG9sZGVycywgYnV0IHlvdSBtYXkgaW5jbHVkZQordHJhbnNsYXRpb25zIG9mIHNvbWUgb3IgYWxsIEludmFyaWFudCBTZWN0aW9ucyBpbiBhZGRpdGlvbiB0byB0aGUKK29yaWdpbmFsIHZlcnNpb25zIG9mIHRoZXNlIEludmFyaWFudCBTZWN0aW9ucy4gIFlvdSBtYXkgaW5jbHVkZSBhCit0cmFuc2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIGFuZCBhbGwgdGhlIGxpY2Vuc2Ugbm90aWNlcyBpbiB0aGUKK0RvY3VtZW50LCBhbmQgYW55IFdhcnJhbnR5IERpc2NsYWltZXJzLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGluY2x1ZGUKK3RoZSBvcmlnaW5hbCBFbmdsaXNoIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGUgb3JpZ2luYWwgdmVyc2lvbnMKK29mIHRob3NlIG5vdGljZXMgYW5kIGRpc2NsYWltZXJzLiAgSW4gY2FzZSBvZiBhIGRpc2FncmVlbWVudCBiZXR3ZWVuCit0aGUgdHJhbnNsYXRpb24gYW5kIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciBhIG5vdGljZQorb3IgZGlzY2xhaW1lciwgdGhlIG9yaWdpbmFsIHZlcnNpb24gd2lsbCBwcmV2YWlsLgorCitJZiBhIHNlY3Rpb24gaW4gdGhlIERvY3VtZW50IGlzIEVudGl0bGVkICJBY2tub3dsZWRnZW1lbnRzIiwKKyJEZWRpY2F0aW9ucyIsIG9yICJIaXN0b3J5IiwgdGhlIHJlcXVpcmVtZW50IChzZWN0aW9uIDQpIHRvIFByZXNlcnZlCitpdHMgVGl0bGUgKHNlY3Rpb24gMSkgd2lsbCB0eXBpY2FsbHkgcmVxdWlyZSBjaGFuZ2luZyB0aGUgYWN0dWFsCit0aXRsZS4KKworCis5LiBURVJNSU5BVElPTgorCitZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50IGV4Y2VwdAorYXMgZXhwcmVzc2x5IHByb3ZpZGVkIGZvciB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgb3RoZXIgYXR0ZW1wdCB0bworY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50IGlzIHZvaWQsIGFuZCB3aWxsCithdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuICBIb3dldmVyLAorcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcworTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKworMTAuIEZVVFVSRSBSRVZJU0lPTlMgT0YgVEhJUyBMSUNFTlNFCisKK1RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggbmV3LCByZXZpc2VkIHZlcnNpb25zCitvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcKK3ZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heQorZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4gIFNlZQoraHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0Ly4KKworRWFjaCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCitJZiB0aGUgRG9jdW1lbnQgc3BlY2lmaWVzIHRoYXQgYSBwYXJ0aWN1bGFyIG51bWJlcmVkIHZlcnNpb24gb2YgdGhpcworTGljZW5zZSAib3IgYW55IGxhdGVyIHZlcnNpb24iIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YKK2ZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgc3BlY2lmaWVkIHZlcnNpb24gb3IKK29mIGFueSBsYXRlciB2ZXJzaW9uIHRoYXQgaGFzIGJlZW4gcHVibGlzaGVkIChub3QgYXMgYSBkcmFmdCkgYnkgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgRG9jdW1lbnQgZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24KK251bWJlciBvZiB0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIChub3QKK2FzIGEgZHJhZnQpIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKworQURERU5EVU06IEhvdyB0byB1c2UgdGhpcyBMaWNlbnNlIGZvciB5b3VyIGRvY3VtZW50cworCitUbyB1c2UgdGhpcyBMaWNlbnNlIGluIGEgZG9jdW1lbnQgeW91IGhhdmUgd3JpdHRlbiwgaW5jbHVkZSBhIGNvcHkgb2YKK3RoZSBMaWNlbnNlIGluIHRoZSBkb2N1bWVudCBhbmQgcHV0IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorbGljZW5zZSBub3RpY2VzIGp1c3QgYWZ0ZXIgdGhlIHRpdGxlIHBhZ2U6CisKKyAgICBDb3B5cmlnaHQgKGMpICBZRUFSICBZT1VSIE5BTUUuCisgICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50CisgICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4yCisgICAgb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgICAgd2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgbm8gQmFjay1Db3ZlciBUZXh0cy4KKyAgICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgIkdOVQorICAgIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIi4KKworSWYgeW91IGhhdmUgSW52YXJpYW50IFNlY3Rpb25zLCBGcm9udC1Db3ZlciBUZXh0cyBhbmQgQmFjay1Db3ZlciBUZXh0cywKK3JlcGxhY2UgdGhlICJ3aXRoLi4uVGV4dHMuIiBsaW5lIHdpdGggdGhpczoKKworICAgIHdpdGggdGhlIEludmFyaWFudCBTZWN0aW9ucyBiZWluZyBMSVNUIFRIRUlSIFRJVExFUywgd2l0aCB0aGUKKyAgICBGcm9udC1Db3ZlciBUZXh0cyBiZWluZyBMSVNULCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyBMSVNULgorCitJZiB5b3UgaGF2ZSBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aG91dCBDb3ZlciBUZXh0cywgb3Igc29tZSBvdGhlcgorY29tYmluYXRpb24gb2YgdGhlIHRocmVlLCBtZXJnZSB0aG9zZSB0d28gYWx0ZXJuYXRpdmVzIHRvIHN1aXQgdGhlCitzaXR1YXRpb24uCisKK0lmIHlvdXIgZG9jdW1lbnQgY29udGFpbnMgbm9udHJpdmlhbCBleGFtcGxlcyBvZiBwcm9ncmFtIGNvZGUsIHdlCityZWNvbW1lbmQgcmVsZWFzaW5nIHRoZXNlIGV4YW1wbGVzIGluIHBhcmFsbGVsIHVuZGVyIHlvdXIgY2hvaWNlIG9mCitmcmVlIHNvZnR3YXJlIGxpY2Vuc2UsIHN1Y2ggYXMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAordG8gcGVybWl0IHRoZWlyIHVzZSBpbiBmcmVlIHNvZnR3YXJlLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dGREwtMS4zIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HRkRMLTEuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjExYTQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HRkRMLTEuMwpAQCAtMCwwICsxLDQ1MyBAQAorCisKKyAgICAgICAgICAgICAgICBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UKKyAgICAgICAgICAgICAgICAgVmVyc2lvbiAxLjMsIDMgTm92ZW1iZXIgMjAwOAorCisKKyBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgIDxodHRwOi8vZnNmLm9yZy8+CisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKzAuIFBSRUFNQkxFCisKK1RoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZSBpcyB0byBtYWtlIGEgbWFudWFsLCB0ZXh0Ym9vaywgb3Igb3RoZXIKK2Z1bmN0aW9uYWwgYW5kIHVzZWZ1bCBkb2N1bWVudCAiZnJlZSIgaW4gdGhlIHNlbnNlIG9mIGZyZWVkb206IHRvCithc3N1cmUgZXZlcnlvbmUgdGhlIGVmZmVjdGl2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIHJlZGlzdHJpYnV0ZSBpdCwKK3dpdGggb3Igd2l0aG91dCBtb2RpZnlpbmcgaXQsIGVpdGhlciBjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LgorU2Vjb25kYXJpbHksIHRoaXMgTGljZW5zZSBwcmVzZXJ2ZXMgZm9yIHRoZSBhdXRob3IgYW5kIHB1Ymxpc2hlciBhIHdheQordG8gZ2V0IGNyZWRpdCBmb3IgdGhlaXIgd29yaywgd2hpbGUgbm90IGJlaW5nIGNvbnNpZGVyZWQgcmVzcG9uc2libGUKK2ZvciBtb2RpZmljYXRpb25zIG1hZGUgYnkgb3RoZXJzLgorCitUaGlzIExpY2Vuc2UgaXMgYSBraW5kIG9mICJjb3B5bGVmdCIsIHdoaWNoIG1lYW5zIHRoYXQgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIGRvY3VtZW50IG11c3QgdGhlbXNlbHZlcyBiZSBmcmVlIGluIHRoZSBzYW1lIHNlbnNlLiAgSXQKK2NvbXBsZW1lbnRzIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2hpY2ggaXMgYSBjb3B5bGVmdAorbGljZW5zZSBkZXNpZ25lZCBmb3IgZnJlZSBzb2Z0d2FyZS4KKworV2UgaGF2ZSBkZXNpZ25lZCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gdXNlIGl0IGZvciBtYW51YWxzIGZvciBmcmVlCitzb2Z0d2FyZSwgYmVjYXVzZSBmcmVlIHNvZnR3YXJlIG5lZWRzIGZyZWUgZG9jdW1lbnRhdGlvbjogYSBmcmVlCitwcm9ncmFtIHNob3VsZCBjb21lIHdpdGggbWFudWFscyBwcm92aWRpbmcgdGhlIHNhbWUgZnJlZWRvbXMgdGhhdCB0aGUKK3NvZnR3YXJlIGRvZXMuICBCdXQgdGhpcyBMaWNlbnNlIGlzIG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIG1hbnVhbHM7CitpdCBjYW4gYmUgdXNlZCBmb3IgYW55IHRleHR1YWwgd29yaywgcmVnYXJkbGVzcyBvZiBzdWJqZWN0IG1hdHRlciBvcgord2hldGhlciBpdCBpcyBwdWJsaXNoZWQgYXMgYSBwcmludGVkIGJvb2suICBXZSByZWNvbW1lbmQgdGhpcyBMaWNlbnNlCitwcmluY2lwYWxseSBmb3Igd29ya3Mgd2hvc2UgcHVycG9zZSBpcyBpbnN0cnVjdGlvbiBvciByZWZlcmVuY2UuCisKKworMS4gQVBQTElDQUJJTElUWSBBTkQgREVGSU5JVElPTlMKKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IG1hbnVhbCBvciBvdGhlciB3b3JrLCBpbiBhbnkgbWVkaXVtLCB0aGF0Citjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IGNhbiBiZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gIFN1Y2ggYSBub3RpY2UgZ3JhbnRzIGEKK3dvcmxkLXdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlLCB1bmxpbWl0ZWQgaW4gZHVyYXRpb24sIHRvIHVzZSB0aGF0Cit3b3JrIHVuZGVyIHRoZSBjb25kaXRpb25zIHN0YXRlZCBoZXJlaW4uICBUaGUgIkRvY3VtZW50IiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggbWFudWFsIG9yIHdvcmsuICBBbnkgbWVtYmVyIG9mIHRoZSBwdWJsaWMgaXMgYQorbGljZW5zZWUsIGFuZCBpcyBhZGRyZXNzZWQgYXMgInlvdSIuICBZb3UgYWNjZXB0IHRoZSBsaWNlbnNlIGlmIHlvdQorY29weSwgbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIHdvcmsgaW4gYSB3YXkgcmVxdWlyaW5nIHBlcm1pc3Npb24KK3VuZGVyIGNvcHlyaWdodCBsYXcuCisKK0EgIk1vZGlmaWVkIFZlcnNpb24iIG9mIHRoZSBEb2N1bWVudCBtZWFucyBhbnkgd29yayBjb250YWluaW5nIHRoZQorRG9jdW1lbnQgb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgY29waWVkIHZlcmJhdGltLCBvciB3aXRoCittb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4KKworQSAiU2Vjb25kYXJ5IFNlY3Rpb24iIGlzIGEgbmFtZWQgYXBwZW5kaXggb3IgYSBmcm9udC1tYXR0ZXIgc2VjdGlvbiBvZgordGhlIERvY3VtZW50IHRoYXQgZGVhbHMgZXhjbHVzaXZlbHkgd2l0aCB0aGUgcmVsYXRpb25zaGlwIG9mIHRoZQorcHVibGlzaGVycyBvciBhdXRob3JzIG9mIHRoZSBEb2N1bWVudCB0byB0aGUgRG9jdW1lbnRgcyBvdmVyYWxsCitzdWJqZWN0IChvciB0byByZWxhdGVkIG1hdHRlcnMpIGFuZCBjb250YWlucyBub3RoaW5nIHRoYXQgY291bGQgZmFsbAorZGlyZWN0bHkgd2l0aGluIHRoYXQgb3ZlcmFsbCBzdWJqZWN0LiAgKFRodXMsIGlmIHRoZSBEb2N1bWVudCBpcyBpbgorcGFydCBhIHRleHRib29rIG9mIG1hdGhlbWF0aWNzLCBhIFNlY29uZGFyeSBTZWN0aW9uIG1heSBub3QgZXhwbGFpbgorYW55IG1hdGhlbWF0aWNzLikgIFRoZSByZWxhdGlvbnNoaXAgY291bGQgYmUgYSBtYXR0ZXIgb2YgaGlzdG9yaWNhbAorY29ubmVjdGlvbiB3aXRoIHRoZSBzdWJqZWN0IG9yIHdpdGggcmVsYXRlZCBtYXR0ZXJzLCBvciBvZiBsZWdhbCwKK2NvbW1lcmNpYWwsIHBoaWxvc29waGljYWwsIGV0aGljYWwgb3IgcG9saXRpY2FsIHBvc2l0aW9uIHJlZ2FyZGluZwordGhlbS4KKworVGhlICJJbnZhcmlhbnQgU2VjdGlvbnMiIGFyZSBjZXJ0YWluIFNlY29uZGFyeSBTZWN0aW9ucyB3aG9zZSB0aXRsZXMKK2FyZSBkZXNpZ25hdGVkLCBhcyBiZWluZyB0aG9zZSBvZiBJbnZhcmlhbnQgU2VjdGlvbnMsIGluIHRoZSBub3RpY2UKK3RoYXQgc2F5cyB0aGF0IHRoZSBEb2N1bWVudCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBJZiBhCitzZWN0aW9uIGRvZXMgbm90IGZpdCB0aGUgYWJvdmUgZGVmaW5pdGlvbiBvZiBTZWNvbmRhcnkgdGhlbiBpdCBpcyBub3QKK2FsbG93ZWQgdG8gYmUgZGVzaWduYXRlZCBhcyBJbnZhcmlhbnQuICBUaGUgRG9jdW1lbnQgbWF5IGNvbnRhaW4gemVybworSW52YXJpYW50IFNlY3Rpb25zLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IGlkZW50aWZ5IGFueSBJbnZhcmlhbnQKK1NlY3Rpb25zIHRoZW4gdGhlcmUgYXJlIG5vbmUuCisKK1RoZSAiQ292ZXIgVGV4dHMiIGFyZSBjZXJ0YWluIHNob3J0IHBhc3NhZ2VzIG9mIHRleHQgdGhhdCBhcmUgbGlzdGVkLAorYXMgRnJvbnQtQ292ZXIgVGV4dHMgb3IgQmFjay1Db3ZlciBUZXh0cywgaW4gdGhlIG5vdGljZSB0aGF0IHNheXMgdGhhdAordGhlIERvY3VtZW50IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEEgRnJvbnQtQ292ZXIgVGV4dCBtYXkKK2JlIGF0IG1vc3QgNSB3b3JkcywgYW5kIGEgQmFjay1Db3ZlciBUZXh0IG1heSBiZSBhdCBtb3N0IDI1IHdvcmRzLgorCitBICJUcmFuc3BhcmVudCIgY29weSBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHksCityZXByZXNlbnRlZCBpbiBhIGZvcm1hdCB3aG9zZSBzcGVjaWZpY2F0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUKK2dlbmVyYWwgcHVibGljLCB0aGF0IGlzIHN1aXRhYmxlIGZvciByZXZpc2luZyB0aGUgZG9jdW1lbnQKK3N0cmFpZ2h0Zm9yd2FyZGx5IHdpdGggZ2VuZXJpYyB0ZXh0IGVkaXRvcnMgb3IgKGZvciBpbWFnZXMgY29tcG9zZWQgb2YKK3BpeGVscykgZ2VuZXJpYyBwYWludCBwcm9ncmFtcyBvciAoZm9yIGRyYXdpbmdzKSBzb21lIHdpZGVseSBhdmFpbGFibGUKK2RyYXdpbmcgZWRpdG9yLCBhbmQgdGhhdCBpcyBzdWl0YWJsZSBmb3IgaW5wdXQgdG8gdGV4dCBmb3JtYXR0ZXJzIG9yCitmb3IgYXV0b21hdGljIHRyYW5zbGF0aW9uIHRvIGEgdmFyaWV0eSBvZiBmb3JtYXRzIHN1aXRhYmxlIGZvciBpbnB1dAordG8gdGV4dCBmb3JtYXR0ZXJzLiAgQSBjb3B5IG1hZGUgaW4gYW4gb3RoZXJ3aXNlIFRyYW5zcGFyZW50IGZpbGUKK2Zvcm1hdCB3aG9zZSBtYXJrdXAsIG9yIGFic2VuY2Ugb2YgbWFya3VwLCBoYXMgYmVlbiBhcnJhbmdlZCB0byB0aHdhcnQKK29yIGRpc2NvdXJhZ2Ugc3Vic2VxdWVudCBtb2RpZmljYXRpb24gYnkgcmVhZGVycyBpcyBub3QgVHJhbnNwYXJlbnQuCitBbiBpbWFnZSBmb3JtYXQgaXMgbm90IFRyYW5zcGFyZW50IGlmIHVzZWQgZm9yIGFueSBzdWJzdGFudGlhbCBhbW91bnQKK29mIHRleHQuICBBIGNvcHkgdGhhdCBpcyBub3QgIlRyYW5zcGFyZW50IiBpcyBjYWxsZWQgIk9wYXF1ZSIuCisKK0V4YW1wbGVzIG9mIHN1aXRhYmxlIGZvcm1hdHMgZm9yIFRyYW5zcGFyZW50IGNvcGllcyBpbmNsdWRlIHBsYWluCitBU0NJSSB3aXRob3V0IG1hcmt1cCwgVGV4aW5mbyBpbnB1dCBmb3JtYXQsIExhVGVYIGlucHV0IGZvcm1hdCwgU0dNTAorb3IgWE1MIHVzaW5nIGEgcHVibGljbHkgYXZhaWxhYmxlIERURCwgYW5kIHN0YW5kYXJkLWNvbmZvcm1pbmcgc2ltcGxlCitIVE1MLCBQb3N0U2NyaXB0IG9yIFBERiBkZXNpZ25lZCBmb3IgaHVtYW4gbW9kaWZpY2F0aW9uLiAgRXhhbXBsZXMgb2YKK3RyYW5zcGFyZW50IGltYWdlIGZvcm1hdHMgaW5jbHVkZSBQTkcsIFhDRiBhbmQgSlBHLiAgT3BhcXVlIGZvcm1hdHMKK2luY2x1ZGUgcHJvcHJpZXRhcnkgZm9ybWF0cyB0aGF0IGNhbiBiZSByZWFkIGFuZCBlZGl0ZWQgb25seSBieQorcHJvcHJpZXRhcnkgd29yZCBwcm9jZXNzb3JzLCBTR01MIG9yIFhNTCBmb3Igd2hpY2ggdGhlIERURCBhbmQvb3IKK3Byb2Nlc3NpbmcgdG9vbHMgYXJlIG5vdCBnZW5lcmFsbHkgYXZhaWxhYmxlLCBhbmQgdGhlCittYWNoaW5lLWdlbmVyYXRlZCBIVE1MLCBQb3N0U2NyaXB0IG9yIFBERiBwcm9kdWNlZCBieSBzb21lIHdvcmQKK3Byb2Nlc3NvcnMgZm9yIG91dHB1dCBwdXJwb3NlcyBvbmx5LgorCitUaGUgIlRpdGxlIFBhZ2UiIG1lYW5zLCBmb3IgYSBwcmludGVkIGJvb2ssIHRoZSB0aXRsZSBwYWdlIGl0c2VsZiwKK3BsdXMgc3VjaCBmb2xsb3dpbmcgcGFnZXMgYXMgYXJlIG5lZWRlZCB0byBob2xkLCBsZWdpYmx5LCB0aGUgbWF0ZXJpYWwKK3RoaXMgTGljZW5zZSByZXF1aXJlcyB0byBhcHBlYXIgaW4gdGhlIHRpdGxlIHBhZ2UuICBGb3Igd29ya3MgaW4KK2Zvcm1hdHMgd2hpY2ggZG8gbm90IGhhdmUgYW55IHRpdGxlIHBhZ2UgYXMgc3VjaCwgIlRpdGxlIFBhZ2UiIG1lYW5zCit0aGUgdGV4dCBuZWFyIHRoZSBtb3N0IHByb21pbmVudCBhcHBlYXJhbmNlIG9mIHRoZSB3b3JrYHMgdGl0bGUsCitwcmVjZWRpbmcgdGhlIGJlZ2lubmluZyBvZiB0aGUgYm9keSBvZiB0aGUgdGV4dC4KKworVGhlICJwdWJsaXNoZXIiIG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgY29waWVzIG9mCit0aGUgRG9jdW1lbnQgdG8gdGhlIHB1YmxpYy4KKworQSBzZWN0aW9uICJFbnRpdGxlZCBYWVoiIG1lYW5zIGEgbmFtZWQgc3VidW5pdCBvZiB0aGUgRG9jdW1lbnQgd2hvc2UKK3RpdGxlIGVpdGhlciBpcyBwcmVjaXNlbHkgWFlaIG9yIGNvbnRhaW5zIFhZWiBpbiBwYXJlbnRoZXNlcyBmb2xsb3dpbmcKK3RleHQgdGhhdCB0cmFuc2xhdGVzIFhZWiBpbiBhbm90aGVyIGxhbmd1YWdlLiAgKEhlcmUgWFlaIHN0YW5kcyBmb3IgYQorc3BlY2lmaWMgc2VjdGlvbiBuYW1lIG1lbnRpb25lZCBiZWxvdywgc3VjaCBhcyAiQWNrbm93bGVkZ2VtZW50cyIsCisiRGVkaWNhdGlvbnMiLCAiRW5kb3JzZW1lbnRzIiwgb3IgIkhpc3RvcnkiLikgIFRvICJQcmVzZXJ2ZSB0aGUgVGl0bGUiCitvZiBzdWNoIGEgc2VjdGlvbiB3aGVuIHlvdSBtb2RpZnkgdGhlIERvY3VtZW50IG1lYW5zIHRoYXQgaXQgcmVtYWlucyBhCitzZWN0aW9uICJFbnRpdGxlZCBYWVoiIGFjY29yZGluZyB0byB0aGlzIGRlZmluaXRpb24uCisKK1RoZSBEb2N1bWVudCBtYXkgaW5jbHVkZSBXYXJyYW50eSBEaXNjbGFpbWVycyBuZXh0IHRvIHRoZSBub3RpY2Ugd2hpY2gKK3N0YXRlcyB0aGF0IHRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIHRoZSBEb2N1bWVudC4gIFRoZXNlIFdhcnJhbnR5CitEaXNjbGFpbWVycyBhcmUgY29uc2lkZXJlZCB0byBiZSBpbmNsdWRlZCBieSByZWZlcmVuY2UgaW4gdGhpcworTGljZW5zZSwgYnV0IG9ubHkgYXMgcmVnYXJkcyBkaXNjbGFpbWluZyB3YXJyYW50aWVzOiBhbnkgb3RoZXIKK2ltcGxpY2F0aW9uIHRoYXQgdGhlc2UgV2FycmFudHkgRGlzY2xhaW1lcnMgbWF5IGhhdmUgaXMgdm9pZCBhbmQgaGFzCitubyBlZmZlY3Qgb24gdGhlIG1lYW5pbmcgb2YgdGhpcyBMaWNlbnNlLgorCisyLiBWRVJCQVRJTSBDT1BZSU5HCisKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQgaW4gYW55IG1lZGl1bSwgZWl0aGVyCitjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LCBwcm92aWRlZCB0aGF0IHRoaXMgTGljZW5zZSwgdGhlCitjb3B5cmlnaHQgbm90aWNlcywgYW5kIHRoZSBsaWNlbnNlIG5vdGljZSBzYXlpbmcgdGhpcyBMaWNlbnNlIGFwcGxpZXMKK3RvIHRoZSBEb2N1bWVudCBhcmUgcmVwcm9kdWNlZCBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCB5b3UgYWRkIG5vCitvdGhlciBjb25kaXRpb25zIHdoYXRzb2V2ZXIgdG8gdGhvc2Ugb2YgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgdXNlCit0ZWNobmljYWwgbWVhc3VyZXMgdG8gb2JzdHJ1Y3Qgb3IgY29udHJvbCB0aGUgcmVhZGluZyBvciBmdXJ0aGVyCitjb3B5aW5nIG9mIHRoZSBjb3BpZXMgeW91IG1ha2Ugb3IgZGlzdHJpYnV0ZS4gIEhvd2V2ZXIsIHlvdSBtYXkgYWNjZXB0Citjb21wZW5zYXRpb24gaW4gZXhjaGFuZ2UgZm9yIGNvcGllcy4gIElmIHlvdSBkaXN0cmlidXRlIGEgbGFyZ2UgZW5vdWdoCitudW1iZXIgb2YgY29waWVzIHlvdSBtdXN0IGFsc28gZm9sbG93IHRoZSBjb25kaXRpb25zIGluIHNlY3Rpb24gMy4KKworWW91IG1heSBhbHNvIGxlbmQgY29waWVzLCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIHN0YXRlZCBhYm92ZSwgYW5kCit5b3UgbWF5IHB1YmxpY2x5IGRpc3BsYXkgY29waWVzLgorCisKKzMuIENPUFlJTkcgSU4gUVVBTlRJVFkKKworSWYgeW91IHB1Ymxpc2ggcHJpbnRlZCBjb3BpZXMgKG9yIGNvcGllcyBpbiBtZWRpYSB0aGF0IGNvbW1vbmx5IGhhdmUKK3ByaW50ZWQgY292ZXJzKSBvZiB0aGUgRG9jdW1lbnQsIG51bWJlcmluZyBtb3JlIHRoYW4gMTAwLCBhbmQgdGhlCitEb2N1bWVudGBzIGxpY2Vuc2Ugbm90aWNlIHJlcXVpcmVzIENvdmVyIFRleHRzLCB5b3UgbXVzdCBlbmNsb3NlIHRoZQorY29waWVzIGluIGNvdmVycyB0aGF0IGNhcnJ5LCBjbGVhcmx5IGFuZCBsZWdpYmx5LCBhbGwgdGhlc2UgQ292ZXIKK1RleHRzOiBGcm9udC1Db3ZlciBUZXh0cyBvbiB0aGUgZnJvbnQgY292ZXIsIGFuZCBCYWNrLUNvdmVyIFRleHRzIG9uCit0aGUgYmFjayBjb3Zlci4gIEJvdGggY292ZXJzIG11c3QgYWxzbyBjbGVhcmx5IGFuZCBsZWdpYmx5IGlkZW50aWZ5Cit5b3UgYXMgdGhlIHB1Ymxpc2hlciBvZiB0aGVzZSBjb3BpZXMuICBUaGUgZnJvbnQgY292ZXIgbXVzdCBwcmVzZW50Cit0aGUgZnVsbCB0aXRsZSB3aXRoIGFsbCB3b3JkcyBvZiB0aGUgdGl0bGUgZXF1YWxseSBwcm9taW5lbnQgYW5kCit2aXNpYmxlLiAgWW91IG1heSBhZGQgb3RoZXIgbWF0ZXJpYWwgb24gdGhlIGNvdmVycyBpbiBhZGRpdGlvbi4KK0NvcHlpbmcgd2l0aCBjaGFuZ2VzIGxpbWl0ZWQgdG8gdGhlIGNvdmVycywgYXMgbG9uZyBhcyB0aGV5IHByZXNlcnZlCit0aGUgdGl0bGUgb2YgdGhlIERvY3VtZW50IGFuZCBzYXRpc2Z5IHRoZXNlIGNvbmRpdGlvbnMsIGNhbiBiZSB0cmVhdGVkCithcyB2ZXJiYXRpbSBjb3B5aW5nIGluIG90aGVyIHJlc3BlY3RzLgorCitJZiB0aGUgcmVxdWlyZWQgdGV4dHMgZm9yIGVpdGhlciBjb3ZlciBhcmUgdG9vIHZvbHVtaW5vdXMgdG8gZml0CitsZWdpYmx5LCB5b3Ugc2hvdWxkIHB1dCB0aGUgZmlyc3Qgb25lcyBsaXN0ZWQgKGFzIG1hbnkgYXMgZml0CityZWFzb25hYmx5KSBvbiB0aGUgYWN0dWFsIGNvdmVyLCBhbmQgY29udGludWUgdGhlIHJlc3Qgb250byBhZGphY2VudAorcGFnZXMuCisKK0lmIHlvdSBwdWJsaXNoIG9yIGRpc3RyaWJ1dGUgT3BhcXVlIGNvcGllcyBvZiB0aGUgRG9jdW1lbnQgbnVtYmVyaW5nCittb3JlIHRoYW4gMTAwLCB5b3UgbXVzdCBlaXRoZXIgaW5jbHVkZSBhIG1hY2hpbmUtcmVhZGFibGUgVHJhbnNwYXJlbnQKK2NvcHkgYWxvbmcgd2l0aCBlYWNoIE9wYXF1ZSBjb3B5LCBvciBzdGF0ZSBpbiBvciB3aXRoIGVhY2ggT3BhcXVlIGNvcHkKK2EgY29tcHV0ZXItbmV0d29yayBsb2NhdGlvbiBmcm9tIHdoaWNoIHRoZSBnZW5lcmFsIG5ldHdvcmstdXNpbmcKK3B1YmxpYyBoYXMgYWNjZXNzIHRvIGRvd25sb2FkIHVzaW5nIHB1YmxpYy1zdGFuZGFyZCBuZXR3b3JrIHByb3RvY29scworYSBjb21wbGV0ZSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgZnJlZSBvZiBhZGRlZCBtYXRlcmlhbC4KK0lmIHlvdSB1c2UgdGhlIGxhdHRlciBvcHRpb24sIHlvdSBtdXN0IHRha2UgcmVhc29uYWJseSBwcnVkZW50IHN0ZXBzLAord2hlbiB5b3UgYmVnaW4gZGlzdHJpYnV0aW9uIG9mIE9wYXF1ZSBjb3BpZXMgaW4gcXVhbnRpdHksIHRvIGVuc3VyZQordGhhdCB0aGlzIFRyYW5zcGFyZW50IGNvcHkgd2lsbCByZW1haW4gdGh1cyBhY2Nlc3NpYmxlIGF0IHRoZSBzdGF0ZWQKK2xvY2F0aW9uIHVudGlsIGF0IGxlYXN0IG9uZSB5ZWFyIGFmdGVyIHRoZSBsYXN0IHRpbWUgeW91IGRpc3RyaWJ1dGUgYW4KK09wYXF1ZSBjb3B5IChkaXJlY3RseSBvciB0aHJvdWdoIHlvdXIgYWdlbnRzIG9yIHJldGFpbGVycykgb2YgdGhhdAorZWRpdGlvbiB0byB0aGUgcHVibGljLgorCitJdCBpcyByZXF1ZXN0ZWQsIGJ1dCBub3QgcmVxdWlyZWQsIHRoYXQgeW91IGNvbnRhY3QgdGhlIGF1dGhvcnMgb2YgdGhlCitEb2N1bWVudCB3ZWxsIGJlZm9yZSByZWRpc3RyaWJ1dGluZyBhbnkgbGFyZ2UgbnVtYmVyIG9mIGNvcGllcywgdG8KK2dpdmUgdGhlbSBhIGNoYW5jZSB0byBwcm92aWRlIHlvdSB3aXRoIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGUKK0RvY3VtZW50LgorCisKKzQuIE1PRElGSUNBVElPTlMKKworWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIGEgTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQgdW5kZXIKK3RoZSBjb25kaXRpb25zIG9mIHNlY3Rpb25zIDIgYW5kIDMgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IHJlbGVhc2UKK3RoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHByZWNpc2VseSB0aGlzIExpY2Vuc2UsIHdpdGggdGhlIE1vZGlmaWVkCitWZXJzaW9uIGZpbGxpbmcgdGhlIHJvbGUgb2YgdGhlIERvY3VtZW50LCB0aHVzIGxpY2Vuc2luZyBkaXN0cmlidXRpb24KK2FuZCBtb2RpZmljYXRpb24gb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gdG8gd2hvZXZlciBwb3NzZXNzZXMgYSBjb3B5CitvZiBpdC4gIEluIGFkZGl0aW9uLCB5b3UgbXVzdCBkbyB0aGVzZSB0aGluZ3MgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb246CisKK0EuIFVzZSBpbiB0aGUgVGl0bGUgUGFnZSAoYW5kIG9uIHRoZSBjb3ZlcnMsIGlmIGFueSkgYSB0aXRsZSBkaXN0aW5jdAorICAgZnJvbSB0aGF0IG9mIHRoZSBEb2N1bWVudCwgYW5kIGZyb20gdGhvc2Ugb2YgcHJldmlvdXMgdmVyc2lvbnMKKyAgICh3aGljaCBzaG91bGQsIGlmIHRoZXJlIHdlcmUgYW55LCBiZSBsaXN0ZWQgaW4gdGhlIEhpc3Rvcnkgc2VjdGlvbgorICAgb2YgdGhlIERvY3VtZW50KS4gIFlvdSBtYXkgdXNlIHRoZSBzYW1lIHRpdGxlIGFzIGEgcHJldmlvdXMgdmVyc2lvbgorICAgaWYgdGhlIG9yaWdpbmFsIHB1Ymxpc2hlciBvZiB0aGF0IHZlcnNpb24gZ2l2ZXMgcGVybWlzc2lvbi4KK0IuIExpc3Qgb24gdGhlIFRpdGxlIFBhZ2UsIGFzIGF1dGhvcnMsIG9uZSBvciBtb3JlIHBlcnNvbnMgb3IgZW50aXRpZXMKKyAgIHJlc3BvbnNpYmxlIGZvciBhdXRob3JzaGlwIG9mIHRoZSBtb2RpZmljYXRpb25zIGluIHRoZSBNb2RpZmllZAorICAgVmVyc2lvbiwgdG9nZXRoZXIgd2l0aCBhdCBsZWFzdCBmaXZlIG9mIHRoZSBwcmluY2lwYWwgYXV0aG9ycyBvZiB0aGUKKyAgIERvY3VtZW50IChhbGwgb2YgaXRzIHByaW5jaXBhbCBhdXRob3JzLCBpZiBpdCBoYXMgZmV3ZXIgdGhhbiBmaXZlKSwKKyAgIHVubGVzcyB0aGV5IHJlbGVhc2UgeW91IGZyb20gdGhpcyByZXF1aXJlbWVudC4KK0MuIFN0YXRlIG9uIHRoZSBUaXRsZSBwYWdlIHRoZSBuYW1lIG9mIHRoZSBwdWJsaXNoZXIgb2YgdGhlCisgICBNb2RpZmllZCBWZXJzaW9uLCBhcyB0aGUgcHVibGlzaGVyLgorRC4gUHJlc2VydmUgYWxsIHRoZSBjb3B5cmlnaHQgbm90aWNlcyBvZiB0aGUgRG9jdW1lbnQuCitFLiBBZGQgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBmb3IgeW91ciBtb2RpZmljYXRpb25zCisgICBhZGphY2VudCB0byB0aGUgb3RoZXIgY29weXJpZ2h0IG5vdGljZXMuCitGLiBJbmNsdWRlLCBpbW1lZGlhdGVseSBhZnRlciB0aGUgY29weXJpZ2h0IG5vdGljZXMsIGEgbGljZW5zZSBub3RpY2UKKyAgIGdpdmluZyB0aGUgcHVibGljIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHRoZQorICAgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbiB0aGUgZm9ybSBzaG93biBpbiB0aGUgQWRkZW5kdW0gYmVsb3cuCitHLiBQcmVzZXJ2ZSBpbiB0aGF0IGxpY2Vuc2Ugbm90aWNlIHRoZSBmdWxsIGxpc3RzIG9mIEludmFyaWFudCBTZWN0aW9ucworICAgYW5kIHJlcXVpcmVkIENvdmVyIFRleHRzIGdpdmVuIGluIHRoZSBEb2N1bWVudGBzIGxpY2Vuc2Ugbm90aWNlLgorSC4gSW5jbHVkZSBhbiB1bmFsdGVyZWQgY29weSBvZiB0aGlzIExpY2Vuc2UuCitJLiBQcmVzZXJ2ZSB0aGUgc2VjdGlvbiBFbnRpdGxlZCAiSGlzdG9yeSIsIFByZXNlcnZlIGl0cyBUaXRsZSwgYW5kIGFkZAorICAgdG8gaXQgYW4gaXRlbSBzdGF0aW5nIGF0IGxlYXN0IHRoZSB0aXRsZSwgeWVhciwgbmV3IGF1dGhvcnMsIGFuZAorICAgcHVibGlzaGVyIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIGFzIGdpdmVuIG9uIHRoZSBUaXRsZSBQYWdlLiAgSWYKKyAgIHRoZXJlIGlzIG5vIHNlY3Rpb24gRW50aXRsZWQgIkhpc3RvcnkiIGluIHRoZSBEb2N1bWVudCwgY3JlYXRlIG9uZQorICAgc3RhdGluZyB0aGUgdGl0bGUsIHllYXIsIGF1dGhvcnMsIGFuZCBwdWJsaXNoZXIgb2YgdGhlIERvY3VtZW50IGFzCisgICBnaXZlbiBvbiBpdHMgVGl0bGUgUGFnZSwgdGhlbiBhZGQgYW4gaXRlbSBkZXNjcmliaW5nIHRoZSBNb2RpZmllZAorICAgVmVyc2lvbiBhcyBzdGF0ZWQgaW4gdGhlIHByZXZpb3VzIHNlbnRlbmNlLgorSi4gUHJlc2VydmUgdGhlIG5ldHdvcmsgbG9jYXRpb24sIGlmIGFueSwgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvcgorICAgcHVibGljIGFjY2VzcyB0byBhIFRyYW5zcGFyZW50IGNvcHkgb2YgdGhlIERvY3VtZW50LCBhbmQgbGlrZXdpc2UKKyAgIHRoZSBuZXR3b3JrIGxvY2F0aW9ucyBnaXZlbiBpbiB0aGUgRG9jdW1lbnQgZm9yIHByZXZpb3VzIHZlcnNpb25zCisgICBpdCB3YXMgYmFzZWQgb24uICBUaGVzZSBtYXkgYmUgcGxhY2VkIGluIHRoZSAiSGlzdG9yeSIgc2VjdGlvbi4KKyAgIFlvdSBtYXkgb21pdCBhIG5ldHdvcmsgbG9jYXRpb24gZm9yIGEgd29yayB0aGF0IHdhcyBwdWJsaXNoZWQgYXQKKyAgIGxlYXN0IGZvdXIgeWVhcnMgYmVmb3JlIHRoZSBEb2N1bWVudCBpdHNlbGYsIG9yIGlmIHRoZSBvcmlnaW5hbAorICAgcHVibGlzaGVyIG9mIHRoZSB2ZXJzaW9uIGl0IHJlZmVycyB0byBnaXZlcyBwZXJtaXNzaW9uLgorSy4gRm9yIGFueSBzZWN0aW9uIEVudGl0bGVkICJBY2tub3dsZWRnZW1lbnRzIiBvciAiRGVkaWNhdGlvbnMiLAorICAgUHJlc2VydmUgdGhlIFRpdGxlIG9mIHRoZSBzZWN0aW9uLCBhbmQgcHJlc2VydmUgaW4gdGhlIHNlY3Rpb24gYWxsCisgICB0aGUgc3Vic3RhbmNlIGFuZCB0b25lIG9mIGVhY2ggb2YgdGhlIGNvbnRyaWJ1dG9yIGFja25vd2xlZGdlbWVudHMKKyAgIGFuZC9vciBkZWRpY2F0aW9ucyBnaXZlbiB0aGVyZWluLgorTC4gUHJlc2VydmUgYWxsIHRoZSBJbnZhcmlhbnQgU2VjdGlvbnMgb2YgdGhlIERvY3VtZW50LAorICAgdW5hbHRlcmVkIGluIHRoZWlyIHRleHQgYW5kIGluIHRoZWlyIHRpdGxlcy4gIFNlY3Rpb24gbnVtYmVycworICAgb3IgdGhlIGVxdWl2YWxlbnQgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHNlY3Rpb24gdGl0bGVzLgorTS4gRGVsZXRlIGFueSBzZWN0aW9uIEVudGl0bGVkICJFbmRvcnNlbWVudHMiLiAgU3VjaCBhIHNlY3Rpb24KKyAgIG1heSBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uCitOLiBEbyBub3QgcmV0aXRsZSBhbnkgZXhpc3Rpbmcgc2VjdGlvbiB0byBiZSBFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIgorICAgb3IgdG8gY29uZmxpY3QgaW4gdGl0bGUgd2l0aCBhbnkgSW52YXJpYW50IFNlY3Rpb24uCitPLiBQcmVzZXJ2ZSBhbnkgV2FycmFudHkgRGlzY2xhaW1lcnMuCisKK0lmIHRoZSBNb2RpZmllZCBWZXJzaW9uIGluY2x1ZGVzIG5ldyBmcm9udC1tYXR0ZXIgc2VjdGlvbnMgb3IKK2FwcGVuZGljZXMgdGhhdCBxdWFsaWZ5IGFzIFNlY29uZGFyeSBTZWN0aW9ucyBhbmQgY29udGFpbiBubyBtYXRlcmlhbAorY29waWVkIGZyb20gdGhlIERvY3VtZW50LCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIGRlc2lnbmF0ZSBzb21lIG9yIGFsbAorb2YgdGhlc2Ugc2VjdGlvbnMgYXMgaW52YXJpYW50LiAgVG8gZG8gdGhpcywgYWRkIHRoZWlyIHRpdGxlcyB0byB0aGUKK2xpc3Qgb2YgSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uYHMgbGljZW5zZSBub3RpY2UuCitUaGVzZSB0aXRsZXMgbXVzdCBiZSBkaXN0aW5jdCBmcm9tIGFueSBvdGhlciBzZWN0aW9uIHRpdGxlcy4KKworWW91IG1heSBhZGQgYSBzZWN0aW9uIEVudGl0bGVkICJFbmRvcnNlbWVudHMiLCBwcm92aWRlZCBpdCBjb250YWlucworbm90aGluZyBidXQgZW5kb3JzZW1lbnRzIG9mIHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBieSB2YXJpb3VzCitwYXJ0aWVzLS1mb3IgZXhhbXBsZSwgc3RhdGVtZW50cyBvZiBwZWVyIHJldmlldyBvciB0aGF0IHRoZSB0ZXh0IGhhcworYmVlbiBhcHByb3ZlZCBieSBhbiBvcmdhbml6YXRpb24gYXMgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbiBvZiBhCitzdGFuZGFyZC4KKworWW91IG1heSBhZGQgYSBwYXNzYWdlIG9mIHVwIHRvIGZpdmUgd29yZHMgYXMgYSBGcm9udC1Db3ZlciBUZXh0LCBhbmQgYQorcGFzc2FnZSBvZiB1cCB0byAyNSB3b3JkcyBhcyBhIEJhY2stQ292ZXIgVGV4dCwgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdAorb2YgQ292ZXIgVGV4dHMgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uICBPbmx5IG9uZSBwYXNzYWdlIG9mCitGcm9udC1Db3ZlciBUZXh0IGFuZCBvbmUgb2YgQmFjay1Db3ZlciBUZXh0IG1heSBiZSBhZGRlZCBieSAob3IKK3Rocm91Z2ggYXJyYW5nZW1lbnRzIG1hZGUgYnkpIGFueSBvbmUgZW50aXR5LiAgSWYgdGhlIERvY3VtZW50IGFscmVhZHkKK2luY2x1ZGVzIGEgY292ZXIgdGV4dCBmb3IgdGhlIHNhbWUgY292ZXIsIHByZXZpb3VzbHkgYWRkZWQgYnkgeW91IG9yCitieSBhcnJhbmdlbWVudCBtYWRlIGJ5IHRoZSBzYW1lIGVudGl0eSB5b3UgYXJlIGFjdGluZyBvbiBiZWhhbGYgb2YsCit5b3UgbWF5IG5vdCBhZGQgYW5vdGhlcjsgYnV0IHlvdSBtYXkgcmVwbGFjZSB0aGUgb2xkIG9uZSwgb24gZXhwbGljaXQKK3Blcm1pc3Npb24gZnJvbSB0aGUgcHJldmlvdXMgcHVibGlzaGVyIHRoYXQgYWRkZWQgdGhlIG9sZCBvbmUuCisKK1RoZSBhdXRob3IocykgYW5kIHB1Ymxpc2hlcihzKSBvZiB0aGUgRG9jdW1lbnQgZG8gbm90IGJ5IHRoaXMgTGljZW5zZQorZ2l2ZSBwZXJtaXNzaW9uIHRvIHVzZSB0aGVpciBuYW1lcyBmb3IgcHVibGljaXR5IGZvciBvciB0byBhc3NlcnQgb3IKK2ltcGx5IGVuZG9yc2VtZW50IG9mIGFueSBNb2RpZmllZCBWZXJzaW9uLgorCisKKzUuIENPTUJJTklORyBET0NVTUVOVFMKKworWW91IG1heSBjb21iaW5lIHRoZSBEb2N1bWVudCB3aXRoIG90aGVyIGRvY3VtZW50cyByZWxlYXNlZCB1bmRlciB0aGlzCitMaWNlbnNlLCB1bmRlciB0aGUgdGVybXMgZGVmaW5lZCBpbiBzZWN0aW9uIDQgYWJvdmUgZm9yIG1vZGlmaWVkCit2ZXJzaW9ucywgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSBpbiB0aGUgY29tYmluYXRpb24gYWxsIG9mIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIG9mIGFsbCBvZiB0aGUgb3JpZ2luYWwgZG9jdW1lbnRzLCB1bm1vZGlmaWVkLCBhbmQKK2xpc3QgdGhlbSBhbGwgYXMgSW52YXJpYW50IFNlY3Rpb25zIG9mIHlvdXIgY29tYmluZWQgd29yayBpbiBpdHMKK2xpY2Vuc2Ugbm90aWNlLCBhbmQgdGhhdCB5b3UgcHJlc2VydmUgYWxsIHRoZWlyIFdhcnJhbnR5IERpc2NsYWltZXJzLgorCitUaGUgY29tYmluZWQgd29yayBuZWVkIG9ubHkgY29udGFpbiBvbmUgY29weSBvZiB0aGlzIExpY2Vuc2UsIGFuZAorbXVsdGlwbGUgaWRlbnRpY2FsIEludmFyaWFudCBTZWN0aW9ucyBtYXkgYmUgcmVwbGFjZWQgd2l0aCBhIHNpbmdsZQorY29weS4gIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lIGJ1dAorZGlmZmVyZW50IGNvbnRlbnRzLCBtYWtlIHRoZSB0aXRsZSBvZiBlYWNoIHN1Y2ggc2VjdGlvbiB1bmlxdWUgYnkKK2FkZGluZyBhdCB0aGUgZW5kIG9mIGl0LCBpbiBwYXJlbnRoZXNlcywgdGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsCithdXRob3Igb3IgcHVibGlzaGVyIG9mIHRoYXQgc2VjdGlvbiBpZiBrbm93biwgb3IgZWxzZSBhIHVuaXF1ZSBudW1iZXIuCitNYWtlIHRoZSBzYW1lIGFkanVzdG1lbnQgdG8gdGhlIHNlY3Rpb24gdGl0bGVzIGluIHRoZSBsaXN0IG9mCitJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIGxpY2Vuc2Ugbm90aWNlIG9mIHRoZSBjb21iaW5lZCB3b3JrLgorCitJbiB0aGUgY29tYmluYXRpb24sIHlvdSBtdXN0IGNvbWJpbmUgYW55IHNlY3Rpb25zIEVudGl0bGVkICJIaXN0b3J5IgoraW4gdGhlIHZhcmlvdXMgb3JpZ2luYWwgZG9jdW1lbnRzLCBmb3JtaW5nIG9uZSBzZWN0aW9uIEVudGl0bGVkCisiSGlzdG9yeSI7IGxpa2V3aXNlIGNvbWJpbmUgYW55IHNlY3Rpb25zIEVudGl0bGVkICJBY2tub3dsZWRnZW1lbnRzIiwKK2FuZCBhbnkgc2VjdGlvbnMgRW50aXRsZWQgIkRlZGljYXRpb25zIi4gIFlvdSBtdXN0IGRlbGV0ZSBhbGwgc2VjdGlvbnMKK0VudGl0bGVkICJFbmRvcnNlbWVudHMiLgorCisKKzYuIENPTExFQ1RJT05TIE9GIERPQ1VNRU5UUworCitZb3UgbWF5IG1ha2UgYSBjb2xsZWN0aW9uIGNvbnNpc3Rpbmcgb2YgdGhlIERvY3VtZW50IGFuZCBvdGhlcgorZG9jdW1lbnRzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHJlcGxhY2UgdGhlIGluZGl2aWR1YWwKK2NvcGllcyBvZiB0aGlzIExpY2Vuc2UgaW4gdGhlIHZhcmlvdXMgZG9jdW1lbnRzIHdpdGggYSBzaW5nbGUgY29weQordGhhdCBpcyBpbmNsdWRlZCBpbiB0aGUgY29sbGVjdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UgZm9sbG93IHRoZSBydWxlcworb2YgdGhpcyBMaWNlbnNlIGZvciB2ZXJiYXRpbSBjb3B5aW5nIG9mIGVhY2ggb2YgdGhlIGRvY3VtZW50cyBpbiBhbGwKK290aGVyIHJlc3BlY3RzLgorCitZb3UgbWF5IGV4dHJhY3QgYSBzaW5nbGUgZG9jdW1lbnQgZnJvbSBzdWNoIGEgY29sbGVjdGlvbiwgYW5kCitkaXN0cmlidXRlIGl0IGluZGl2aWR1YWxseSB1bmRlciB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHlvdSBpbnNlcnQgYQorY29weSBvZiB0aGlzIExpY2Vuc2UgaW50byB0aGUgZXh0cmFjdGVkIGRvY3VtZW50LCBhbmQgZm9sbG93IHRoaXMKK0xpY2Vuc2UgaW4gYWxsIG90aGVyIHJlc3BlY3RzIHJlZ2FyZGluZyB2ZXJiYXRpbSBjb3B5aW5nIG9mIHRoYXQKK2RvY3VtZW50LgorCisKKzcuIEFHR1JFR0FUSU9OIFdJVEggSU5ERVBFTkRFTlQgV09SS1MKKworQSBjb21waWxhdGlvbiBvZiB0aGUgRG9jdW1lbnQgb3IgaXRzIGRlcml2YXRpdmVzIHdpdGggb3RoZXIgc2VwYXJhdGUKK2FuZCBpbmRlcGVuZGVudCBkb2N1bWVudHMgb3Igd29ya3MsIGluIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvcgorZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuICJhZ2dyZWdhdGUiIGlmIHRoZSBjb3B5cmlnaHQKK3Jlc3VsdGluZyBmcm9tIHRoZSBjb21waWxhdGlvbiBpcyBub3QgdXNlZCB0byBsaW1pdCB0aGUgbGVnYWwgcmlnaHRzCitvZiB0aGUgY29tcGlsYXRpb25gcyB1c2VycyBiZXlvbmQgd2hhdCB0aGUgaW5kaXZpZHVhbCB3b3JrcyBwZXJtaXQuCitXaGVuIHRoZSBEb2N1bWVudCBpcyBpbmNsdWRlZCBpbiBhbiBhZ2dyZWdhdGUsIHRoaXMgTGljZW5zZSBkb2VzIG5vdAorYXBwbHkgdG8gdGhlIG90aGVyIHdvcmtzIGluIHRoZSBhZ2dyZWdhdGUgd2hpY2ggYXJlIG5vdCB0aGVtc2VsdmVzCitkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBEb2N1bWVudC4KKworSWYgdGhlIENvdmVyIFRleHQgcmVxdWlyZW1lbnQgb2Ygc2VjdGlvbiAzIGlzIGFwcGxpY2FibGUgdG8gdGhlc2UKK2NvcGllcyBvZiB0aGUgRG9jdW1lbnQsIHRoZW4gaWYgdGhlIERvY3VtZW50IGlzIGxlc3MgdGhhbiBvbmUgaGFsZiBvZgordGhlIGVudGlyZSBhZ2dyZWdhdGUsIHRoZSBEb2N1bWVudGBzIENvdmVyIFRleHRzIG1heSBiZSBwbGFjZWQgb24KK2NvdmVycyB0aGF0IGJyYWNrZXQgdGhlIERvY3VtZW50IHdpdGhpbiB0aGUgYWdncmVnYXRlLCBvciB0aGUKK2VsZWN0cm9uaWMgZXF1aXZhbGVudCBvZiBjb3ZlcnMgaWYgdGhlIERvY3VtZW50IGlzIGluIGVsZWN0cm9uaWMgZm9ybS4KK090aGVyd2lzZSB0aGV5IG11c3QgYXBwZWFyIG9uIHByaW50ZWQgY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgd2hvbGUKK2FnZ3JlZ2F0ZS4KKworCis4LiBUUkFOU0xBVElPTgorCitUcmFuc2xhdGlvbiBpcyBjb25zaWRlcmVkIGEga2luZCBvZiBtb2RpZmljYXRpb24sIHNvIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgdHJhbnNsYXRpb25zIG9mIHRoZSBEb2N1bWVudCB1bmRlciB0aGUgdGVybXMgb2Ygc2VjdGlvbiA0LgorUmVwbGFjaW5nIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRyYW5zbGF0aW9ucyByZXF1aXJlcyBzcGVjaWFsCitwZXJtaXNzaW9uIGZyb20gdGhlaXIgY29weXJpZ2h0IGhvbGRlcnMsIGJ1dCB5b3UgbWF5IGluY2x1ZGUKK3RyYW5zbGF0aW9ucyBvZiBzb21lIG9yIGFsbCBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gYWRkaXRpb24gdG8gdGhlCitvcmlnaW5hbCB2ZXJzaW9ucyBvZiB0aGVzZSBJbnZhcmlhbnQgU2VjdGlvbnMuICBZb3UgbWF5IGluY2x1ZGUgYQordHJhbnNsYXRpb24gb2YgdGhpcyBMaWNlbnNlLCBhbmQgYWxsIHRoZSBsaWNlbnNlIG5vdGljZXMgaW4gdGhlCitEb2N1bWVudCwgYW5kIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycywgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBpbmNsdWRlCit0aGUgb3JpZ2luYWwgRW5nbGlzaCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhlIG9yaWdpbmFsIHZlcnNpb25zCitvZiB0aG9zZSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycy4gIEluIGNhc2Ugb2YgYSBkaXNhZ3JlZW1lbnQgYmV0d2VlbgordGhlIHRyYW5zbGF0aW9uIGFuZCB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBub3RpY2UKK29yIGRpc2NsYWltZXIsIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIHdpbGwgcHJldmFpbC4KKworSWYgYSBzZWN0aW9uIGluIHRoZSBEb2N1bWVudCBpcyBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIsCisiRGVkaWNhdGlvbnMiLCBvciAiSGlzdG9yeSIsIHRoZSByZXF1aXJlbWVudCAoc2VjdGlvbiA0KSB0byBQcmVzZXJ2ZQoraXRzIFRpdGxlIChzZWN0aW9uIDEpIHdpbGwgdHlwaWNhbGx5IHJlcXVpcmUgY2hhbmdpbmcgdGhlIGFjdHVhbAordGl0bGUuCisKKworOS4gVEVSTUlOQVRJT04KKworWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudAorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSBpdCBpcyB2b2lkLCBhbmQKK3dpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCitIb3dldmVyLCBpZiB5b3UgY2Vhc2UgYWxsIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHRoZW4geW91ciBsaWNlbnNlCitmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzIHJlaW5zdGF0ZWQgKGEpIHByb3Zpc2lvbmFsbHksCit1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kIGZpbmFsbHkKK3Rlcm1pbmF0ZXMgeW91ciBsaWNlbnNlLCBhbmQgKGIpIHBlcm1hbmVudGx5LCBpZiB0aGUgY29weXJpZ2h0IGhvbGRlcgorZmFpbHMgdG8gbm90aWZ5IHlvdSBvZiB0aGUgdmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucyBwcmlvciB0bworNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgorCitNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKK3JlaW5zdGF0ZWQgcGVybWFuZW50bHkgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIgbm90aWZpZXMgeW91IG9mIHRoZQordmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucywgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaGF2ZQorcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0Citjb3B5cmlnaHQgaG9sZGVyLCBhbmQgeW91IGN1cmUgdGhlIHZpb2xhdGlvbiBwcmlvciB0byAzMCBkYXlzIGFmdGVyCit5b3VyIHJlY2VpcHQgb2YgdGhlIG5vdGljZS4KKworVGVybWluYXRpb24gb2YgeW91ciByaWdodHMgdW5kZXIgdGhpcyBzZWN0aW9uIGRvZXMgbm90IHRlcm1pbmF0ZSB0aGUKK2xpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlLiAgSWYgeW91ciByaWdodHMgaGF2ZSBiZWVuIHRlcm1pbmF0ZWQgYW5kIG5vdCBwZXJtYW5lbnRseQorcmVpbnN0YXRlZCwgcmVjZWlwdCBvZiBhIGNvcHkgb2Ygc29tZSBvciBhbGwgb2YgdGhlIHNhbWUgbWF0ZXJpYWwgZG9lcworbm90IGdpdmUgeW91IGFueSByaWdodHMgdG8gdXNlIGl0LgorCisKKzEwLiBGVVRVUkUgUkVWSVNJT05TIE9GIFRISVMgTElDRU5TRQorCitUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIG5ldywgcmV2aXNlZCB2ZXJzaW9ucyBvZiB0aGUKK0dOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zCit3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluCitkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuICBTZWUKK2h0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC8uCisKK0VhY2ggdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorSWYgdGhlIERvY3VtZW50IHNwZWNpZmllcyB0aGF0IGEgcGFydGljdWxhciBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoaXMKK0xpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mCitmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHNwZWNpZmllZCB2ZXJzaW9uIG9yCitvZiBhbnkgbGF0ZXIgdmVyc2lvbiB0aGF0IGhhcyBiZWVuIHB1Ymxpc2hlZCAobm90IGFzIGEgZHJhZnQpIGJ5IHRoZQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uCitudW1iZXIgb2YgdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCAobm90CithcyBhIGRyYWZ0KSBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIERvY3VtZW50CitzcGVjaWZpZXMgdGhhdCBhIHByb3h5IGNhbiBkZWNpZGUgd2hpY2ggZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMKK0xpY2Vuc2UgY2FuIGJlIHVzZWQsIHRoYXQgcHJveHlgcyBwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYQordmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdSB0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUKK0RvY3VtZW50LgorCisxMS4gUkVMSUNFTlNJTkcKKworIk1hc3NpdmUgTXVsdGlhdXRob3IgQ29sbGFib3JhdGlvbiBTaXRlIiAob3IgIk1NQyBTaXRlIikgbWVhbnMgYW55CitXb3JsZCBXaWRlIFdlYiBzZXJ2ZXIgdGhhdCBwdWJsaXNoZXMgY29weXJpZ2h0YWJsZSB3b3JrcyBhbmQgYWxzbworcHJvdmlkZXMgcHJvbWluZW50IGZhY2lsaXRpZXMgZm9yIGFueWJvZHkgdG8gZWRpdCB0aG9zZSB3b3Jrcy4gIEEKK3B1YmxpYyB3aWtpIHRoYXQgYW55Ym9keSBjYW4gZWRpdCBpcyBhbiBleGFtcGxlIG9mIHN1Y2ggYSBzZXJ2ZXIuICBBCisiTWFzc2l2ZSBNdWx0aWF1dGhvciBDb2xsYWJvcmF0aW9uIiAob3IgIk1NQyIpIGNvbnRhaW5lZCBpbiB0aGUgc2l0ZQorbWVhbnMgYW55IHNldCBvZiBjb3B5cmlnaHRhYmxlIHdvcmtzIHRodXMgcHVibGlzaGVkIG9uIHRoZSBNTUMgc2l0ZS4KKworIkNDLUJZLVNBIiBtZWFucyB0aGUgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZSBBbGlrZSAzLjAgCitsaWNlbnNlIHB1Ymxpc2hlZCBieSBDcmVhdGl2ZSBDb21tb25zIENvcnBvcmF0aW9uLCBhIG5vdC1mb3ItcHJvZml0IAorY29ycG9yYXRpb24gd2l0aCBhIHByaW5jaXBhbCBwbGFjZSBvZiBidXNpbmVzcyBpbiBTYW4gRnJhbmNpc2NvLCAKK0NhbGlmb3JuaWEsIGFzIHdlbGwgYXMgZnV0dXJlIGNvcHlsZWZ0IHZlcnNpb25zIG9mIHRoYXQgbGljZW5zZSAKK3B1Ymxpc2hlZCBieSB0aGF0IHNhbWUgb3JnYW5pemF0aW9uLgorCisiSW5jb3Jwb3JhdGUiIG1lYW5zIHRvIHB1Ymxpc2ggb3IgcmVwdWJsaXNoIGEgRG9jdW1lbnQsIGluIHdob2xlIG9yIGluIAorcGFydCwgYXMgcGFydCBvZiBhbm90aGVyIERvY3VtZW50LgorCitBbiBNTUMgaXMgImVsaWdpYmxlIGZvciByZWxpY2Vuc2luZyIgaWYgaXQgaXMgbGljZW5zZWQgdW5kZXIgdGhpcyAKK0xpY2Vuc2UsIGFuZCBpZiBhbGwgd29ya3MgdGhhdCB3ZXJlIGZpcnN0IHB1Ymxpc2hlZCB1bmRlciB0aGlzIExpY2Vuc2UgCitzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGlzIE1NQywgYW5kIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgaW4gd2hvbGUgb3IgCitpbiBwYXJ0IGludG8gdGhlIE1NQywgKDEpIGhhZCBubyBjb3ZlciB0ZXh0cyBvciBpbnZhcmlhbnQgc2VjdGlvbnMsIGFuZCAKKygyKSB3ZXJlIHRodXMgaW5jb3Jwb3JhdGVkIHByaW9yIHRvIE5vdmVtYmVyIDEsIDIwMDguCisKK1RoZSBvcGVyYXRvciBvZiBhbiBNTUMgU2l0ZSBtYXkgcmVwdWJsaXNoIGFuIE1NQyBjb250YWluZWQgaW4gdGhlIHNpdGUKK3VuZGVyIENDLUJZLVNBIG9uIHRoZSBzYW1lIHNpdGUgYXQgYW55IHRpbWUgYmVmb3JlIEF1Z3VzdCAxLCAyMDA5LAorcHJvdmlkZWQgdGhlIE1NQyBpcyBlbGlnaWJsZSBmb3IgcmVsaWNlbnNpbmcuCisKKworQURERU5EVU06IEhvdyB0byB1c2UgdGhpcyBMaWNlbnNlIGZvciB5b3VyIGRvY3VtZW50cworCitUbyB1c2UgdGhpcyBMaWNlbnNlIGluIGEgZG9jdW1lbnQgeW91IGhhdmUgd3JpdHRlbiwgaW5jbHVkZSBhIGNvcHkgb2YKK3RoZSBMaWNlbnNlIGluIHRoZSBkb2N1bWVudCBhbmQgcHV0IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorbGljZW5zZSBub3RpY2VzIGp1c3QgYWZ0ZXIgdGhlIHRpdGxlIHBhZ2U6CisKKyAgICBDb3B5cmlnaHQgKGMpICBZRUFSICBZT1VSIE5BTUUuCisgICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50CisgICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCisgICAgb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgICAgd2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgbm8gQmFjay1Db3ZlciBUZXh0cy4KKyAgICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgIkdOVQorICAgIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIi4KKworSWYgeW91IGhhdmUgSW52YXJpYW50IFNlY3Rpb25zLCBGcm9udC1Db3ZlciBUZXh0cyBhbmQgQmFjay1Db3ZlciBUZXh0cywKK3JlcGxhY2UgdGhlICJ3aXRoLi4uVGV4dHMuIiBsaW5lIHdpdGggdGhpczoKKworICAgIHdpdGggdGhlIEludmFyaWFudCBTZWN0aW9ucyBiZWluZyBMSVNUIFRIRUlSIFRJVExFUywgd2l0aCB0aGUKKyAgICBGcm9udC1Db3ZlciBUZXh0cyBiZWluZyBMSVNULCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyBMSVNULgorCitJZiB5b3UgaGF2ZSBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aG91dCBDb3ZlciBUZXh0cywgb3Igc29tZSBvdGhlcgorY29tYmluYXRpb24gb2YgdGhlIHRocmVlLCBtZXJnZSB0aG9zZSB0d28gYWx0ZXJuYXRpdmVzIHRvIHN1aXQgdGhlCitzaXR1YXRpb24uCisKK0lmIHlvdXIgZG9jdW1lbnQgY29udGFpbnMgbm9udHJpdmlhbCBleGFtcGxlcyBvZiBwcm9ncmFtIGNvZGUsIHdlCityZWNvbW1lbmQgcmVsZWFzaW5nIHRoZXNlIGV4YW1wbGVzIGluIHBhcmFsbGVsIHVuZGVyIHlvdXIgY2hvaWNlIG9mCitmcmVlIHNvZnR3YXJlIGxpY2Vuc2UsIHN1Y2ggYXMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAordG8gcGVybWl0IHRoZWlyIHVzZSBpbiBmcmVlIHNvZnR3YXJlLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ0ZWY5MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTEuMApAQCAtMCwwICsxLDI1MiBAQAorCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAxCisKKyAgICAgICAgICAgICAgICAgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMSwgRmVicnVhcnkgMTk4OQorCisgQ29weXJpZ2h0IChDKSAxOTg5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICAgICAgICAgICAgICAgICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZSBhZ3JlZW1lbnRzIG9mIG1vc3Qgc29mdHdhcmUgY29tcGFuaWVzIHRyeSB0byBrZWVwIHVzZXJzCithdCB0aGUgbWVyY3kgb2YgdGhvc2UgY29tcGFuaWVzLiAgQnkgY29udHJhc3QsIG91ciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoZQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb25gcworc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvIHVzaW5nIGl0LgorWW91IGNhbiB1c2UgaXQgZm9yIHlvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIFNwZWNpZmljYWxseSwgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgZGVzaWduZWQgdG8gbWFrZQorc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGdpdmUgYXdheSBvciBzZWxsIGNvcGllcyBvZiBmcmVlCitzb2Z0d2FyZSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdSB3YW50IGl0LAordGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcgZnJlZQorcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBhIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCB0ZWxsIHRoZW0gdGhlaXIgcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcmBzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnNgIHJlcHV0YXRpb25zLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisgICAgICAgICAgICAgICAgICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaAorY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUKKyJQcm9ncmFtIiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSIgbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSB3b3JrIGNvbnRhaW5pbmcgdGhlCitQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucy4gIEVhY2gKK2xpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtYHMgc291cmNlCitjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAorYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZAorZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbnkKK290aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4gIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mCit0cmFuc2ZlcnJpbmcgYSBjb3B5LgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24gb2YKK2l0LCBhbmQgY29weSBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgdW5kZXIgdGhlIHRlcm1zIG9mIFBhcmFncmFwaAorMSBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdAorICAgIHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZTsgYW5kCisKKyAgICBiKSBjYXVzZSB0aGUgd2hvbGUgb2YgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0CisgICAgaW4gd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyB0aGUgUHJvZ3JhbSBvciBhbnkgcGFydCB0aGVyZW9mLCBlaXRoZXIKKyAgICB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgdG8gYmUgbGljZW5zZWQgYXQgbm8gY2hhcmdlIHRvIGFsbAorICAgIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoZXhjZXB0CisgICAgdGhhdCB5b3UgbWF5IGNob29zZSB0byBncmFudCB3YXJyYW50eSBwcm90ZWN0aW9uIHRvIHNvbWUgb3IgYWxsCisgICAgdGhpcmQgcGFydGllcywgYXQgeW91ciBvcHRpb24pLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseSB3aGVuCisgICAgcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2ggaW50ZXJhY3RpdmUgdXNlCisgICAgaW4gdGhlIHNpbXBsZXN0IGFuZCBtb3N0IHVzdWFsIHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYSBub3RpY2UKKyAgICB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZSBhCisgICAgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIgdGhlc2UKKyAgICBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcyBHZW5lcmFsCisgICAgUHVibGljIExpY2Vuc2UuCisKKyAgICBkKSBZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYQorICAgIGNvcHksIGFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4KKyAgICBleGNoYW5nZSBmb3IgYSBmZWUuCisKK01lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciBpbmRlcGVuZGVudCB3b3JrIHdpdGggdGhlIFByb2dyYW0gKG9yIGl0cworZGVyaXZhdGl2ZSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcKK3RoZSBvdGhlciB3b3JrIHVuZGVyIHRoZSBzY29wZSBvZiB0aGVzZSB0ZXJtcy4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgcG9ydGlvbiBvciBkZXJpdmF0aXZlIG9mCitpdCwgdW5kZXIgUGFyYWdyYXBoIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1BhcmFncmFwaHMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgYWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICAgIFBhcmFncmFwaHMgMSBhbmQgMiBhYm92ZTsgb3IsCisKKyAgICBiKSBhY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSBmcmVlIChleGNlcHQgZm9yIGEgbm9taW5hbCBjaGFyZ2UKKyAgICBmb3IgdGhlIGNvc3Qgb2YgZGlzdHJpYnV0aW9uKSBhIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUKKyAgICBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAgICBQYXJhZ3JhcGhzIDEgYW5kIDIgYWJvdmU7IG9yLAorCisgICAgYykgYWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB3aGVyZSB0aGUKKyAgICBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZC4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gYWxvbmUuKQorCitTb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nCittb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgZmlsZSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKK2FsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zOyBidXQsIGFzIGEgc3BlY2lhbAorZXhjZXB0aW9uLCBpdCBuZWVkIG5vdCBpbmNsdWRlIHNvdXJjZSBjb2RlIGZvciBtb2R1bGVzIHdoaWNoIGFyZSBzdGFuZGFyZAorbGlicmFyaWVzIHRoYXQgYWNjb21wYW55IHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlCitmaWxlIHJ1bnMsIG9yIGZvciBzdGFuZGFyZCBoZWFkZXIgZmlsZXMgb3IgZGVmaW5pdGlvbnMgZmlsZXMgdGhhdAorYWNjb21wYW55IHRoYXQgb3BlcmF0aW5nIHN5c3RlbS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUgb3IgdHJhbnNmZXIgdGhlCitQcm9ncmFtIGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBvciB0cmFuc2ZlcgordGhlIFByb2dyYW0gaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdG8gdXNlCit0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UuICBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkCitjb3BpZXMsIG9yIHJpZ2h0cyB0byB1c2UgY29waWVzLCBmcm9tIHlvdSB1bmRlciB0aGlzIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcworcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBCeSBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0pIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBsaWNlbnNlIHRvIGRvIHNvLAorYW5kIGFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwKK2xpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8gdGhlc2UKK3Rlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUKK3JlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCisKKyAgNy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGxpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoZSBsaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICA4LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTyBXQVJSQU5UWQorCisgIDkuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMC4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworICAgICAgICAgICAgICAgICAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgICAgICAgQXBwZW5kaXg6IEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byBodW1hbml0eSwgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZQordGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QgdG8KK2F0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkgY29udmV5Cit0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHRoZQorImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtYHMgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSAxOXl5ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIDE5eHggbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgd2AuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjYCBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3YCBhbmQgYHNob3cgY2Agc2hvdWxkIHNob3cgdGhlCithcHByb3ByaWF0ZSBwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlCitjb21tYW5kcyB5b3UgdXNlIG1heSBiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgd2AgYW5kIGBzaG93CitjYDsgdGhleSBjb3VsZCBldmVuIGJlIG1vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyCitwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZQorICBwcm9ncmFtIGBHbm9tb3Zpc2lvbmAgKGEgcHJvZ3JhbSB0byBkaXJlY3QgY29tcGlsZXJzIHRvIG1ha2UgcGFzc2VzCisgIGF0IGFzc2VtYmxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGF0YHMgYWxsIHRoZXJlIGlzIHRvIGl0IQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLXdpdGgtYmlzb24tZXhjZXB0aW9uIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi13aXRoLWJpc29uLWV4Y2VwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDM0MjczCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi13aXRoLWJpc29uLWV4Y2VwdGlvbgpAQCAtMCwwICsxLDcgQEAKKworaW5zZXJ0IEdQTCB2MiB0ZXh0IGhlcmUKKworQmlzb24gRXhjZXB0aW9uCitBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMgcGFydCBvciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbmB0IGl0c2VsZiBhIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mIGFzIGEgcGFyc2VyIHNrZWxldG9uLiBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGluZyBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KK1RoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4gdmVyc2lvbiAyLjIgb2YgQmlzb24uCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjVhYmJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wCkBAIC0wLDAgKzEsMTMyIEBACisKK0dOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisKK1ZlcnNpb24gMiwgSnVuZSAxOTkxCisKK0NvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gIAorNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBCisKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCitQcmVhbWJsZQorCitUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiBUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb25gcyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8gdXNpbmcgaXQuIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pIFlvdSBjYW4gYXBwbHkgaXQgdG8geW91ciBwcm9ncmFtcywgdG9vLgorCitXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90IHByaWNlLiBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKK1RvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQgYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKK0ZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIgZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHlvdSBoYXZlLiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyIHJpZ2h0cy4KKworV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZCAoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCitBbHNvLCBmb3IgZWFjaCBhdXRob3JgcyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbiB0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZSB3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbyB0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbCBhdXRob3JzYCByZXB1dGF0aW9ucy4KKworRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUgcGF0ZW50cy4gV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlIHByb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUgcHJvZ3JhbSBwcm9wcmlldGFyeS4gVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkgcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lYHMgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKzAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gVGhlICJQcm9ncmFtIiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIiBtZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OiB0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4gKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiBUaGUgYWN0IG9mIHJ1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0gaXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4gV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKzEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW1gcyBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kIGRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMSBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCithKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KK2IpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbiB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseSB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4gYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZSBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiBJZiBpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLCBhbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4gdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZSBzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuIEJ1dCB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlIGVudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0IHlvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0byBleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IgY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbSB3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKK2EpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKK2MpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gKFRoaXMgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaCBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMgZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKzQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCis1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3Qgc2lnbmVkIGl0LiBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiBUaGVzZSBhY3Rpb25zIGFyZSBwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kIGFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcgdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKzYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4gWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8gdGhpcyBMaWNlbnNlLgorCis3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksIGNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3Igb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdCBleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiBJZiB5b3UgY2Fubm90IGRpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQgbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieSBhbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4gdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlciBjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55IHBhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55IHN1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzIGltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gTWFueSBwZW9wbGUgaGF2ZSBtYWRlIGdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQgc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZyB0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QgaW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8gYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKzguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluIGNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nIGNvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCis5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBJZiB0aGUgUHJvZ3JhbSBzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKzEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUgcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCitOTyBXQVJSQU5UWQorCisxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SIFJFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCitFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKK0lmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QgcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdCBmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uIEl0IGlzIHNhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5IGNvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHRoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCitvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtYHMgbmFtZSBhbmQgYW4gaWRlYSBvZiB3aGF0IGl0IGRvZXMuCitDb3B5cmlnaHQgKEMpIHl5eXkgIG5hbWUgb2YgYXV0aG9yCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMgd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCitHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzCit0eXBlIGBzaG93IHdgLiAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lCit0byByZWRpc3RyaWJ1dGUgaXQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGNgIAorZm9yIGRldGFpbHMuCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHdgIGFuZCBgc2hvdyBjYCBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUgcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5IGJlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3YCBhbmQgYHNob3cgY2A7IHRoZXkgY291bGQgZXZlbiBiZSBtb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91ciBzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZiBuZWNlc3NhcnkuIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodAoraW50ZXJlc3QgaW4gdGhlIHByb2dyYW0gYEdub21vdmlzaW9uYAorKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gCitieSBKYW1lcyBIYWNrZXIuCisKK3NpZ25hdHVyZSBvZiBUeSBDb29uLCAxIEFwcmlsIDE5ODkKK1R5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heSBjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUgbGlicmFyeS4gSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtR0NDLWV4Y2VwdGlvbiBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLUdDQy1leGNlcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY4ZGUwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLUdDQy1leGNlcHRpb24KQEAgLTAsMCArMSwxNyBAQAorCitpbnNlcnQgR1BMIHYyIHRleHQgaGVyZQorCitHQ0MgTGlua2luZyBFeGNlcHRpb24KK0luIGFkZGl0aW9uIHRvIHRoZSBwZXJtaXNzaW9ucyBpbiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzIHlvdSB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBsaW5rIHRoZSBjb21waWxlZCB2ZXJzaW9uCitvZiB0aGlzIGZpbGUgaW50byBjb21iaW5hdGlvbnMgd2l0aCBvdGhlciBwcm9ncmFtcywgYW5kIHRvIGRpc3RyaWJ1dGUgdGhvc2UKK2NvbWJpbmF0aW9ucyB3aXRob3V0IGFueSByZXN0cmljdGlvbiBjb21pbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgZmlsZS4gKFRoZQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSByZXN0cmljdGlvbnMgZG8gYXBwbHkgaW4gb3RoZXIgcmVzcGVjdHM7IGZvciBleGFtcGxlLAordGhleSBjb3ZlciBtb2RpZmljYXRpb24gb2YgdGhlIGZpbGUsIGFuZCBkaXN0cmlidXRpb24gd2hlbiBub3QgbGlua2VkIGludG8gYQorY29tYmluZSBleGVjdXRhYmxlLikKKworCisKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLU9wZW5TU0wtZXhjZXB0aW9uIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtT3BlblNTTC1leGNlcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU4NmM2MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLU9wZW5TU0wtZXhjZXB0aW9uCkBAIC0wLDAgKzEsMjg1IEBACisKK0dOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisKK1ZlcnNpb24gMiwgSnVuZSAxOTkxCisKK0NvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gIAorNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBCisKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCitQcmVhbWJsZQorCitUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiBUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb25gcyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8gdXNpbmcgaXQuIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pIFlvdSBjYW4gYXBwbHkgaXQgdG8geW91ciBwcm9ncmFtcywgdG9vLgorCitXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90IHByaWNlLiBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKK1RvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQgYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKK0ZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIgZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHlvdSBoYXZlLiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyIHJpZ2h0cy4KKworV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZCAoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCitBbHNvLCBmb3IgZWFjaCBhdXRob3JgcyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbiB0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZSB3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbyB0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbCBhdXRob3JzYCByZXB1dGF0aW9ucy4KKworRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUgcGF0ZW50cy4gV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlIHByb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUgcHJvZ3JhbSBwcm9wcmlldGFyeS4gVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkgcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lYHMgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKzAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gVGhlICJQcm9ncmFtIiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIiBtZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OiB0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4gKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiBUaGUgYWN0IG9mIHJ1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0gaXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4gV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKzEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW1gcyBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kIGRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMSBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCithKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KK2IpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbiB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseSB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4gYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZSBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiBJZiBpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLCBhbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4gdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZSBzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuIEJ1dCB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlIGVudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0IHlvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0byBleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IgY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbSB3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKK2EpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKK2MpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gKFRoaXMgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaCBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMgZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKzQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCis1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3Qgc2lnbmVkIGl0LiBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiBUaGVzZSBhY3Rpb25zIGFyZSBwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kIGFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcgdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKzYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4gWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8gdGhpcyBMaWNlbnNlLgorCis3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksIGNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3Igb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdCBleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiBJZiB5b3UgY2Fubm90IGRpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQgbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieSBhbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4gdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlciBjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55IHBhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55IHN1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzIGltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gTWFueSBwZW9wbGUgaGF2ZSBtYWRlIGdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQgc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZyB0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QgaW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8gYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKzguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluIGNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nIGNvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCis5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBJZiB0aGUgUHJvZ3JhbSBzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKzEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUgcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCitOTyBXQVJSQU5UWQorCisxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SIFJFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCitFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKK0lmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QgcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdCBmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uIEl0IGlzIHNhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5IGNvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHRoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCitvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtYHMgbmFtZSBhbmQgYW4gaWRlYSBvZiB3aGF0IGl0IGRvZXMuCitDb3B5cmlnaHQgKEMpIHl5eXkgIG5hbWUgb2YgYXV0aG9yCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMgd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCitHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzCit0eXBlIGBzaG93IHdgLiAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lCit0byByZWRpc3RyaWJ1dGUgaXQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGNgIAorZm9yIGRldGFpbHMuCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHdgIGFuZCBgc2hvdyBjYCBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUgcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5IGJlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3YCBhbmQgYHNob3cgY2A7IHRoZXkgY291bGQgZXZlbiBiZSBtb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91ciBzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZiBuZWNlc3NhcnkuIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodAoraW50ZXJlc3QgaW4gdGhlIHByb2dyYW0gYEdub21vdmlzaW9uYAorKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gCitieSBKYW1lcyBIYWNrZXIuCisKK3NpZ25hdHVyZSBvZiBUeSBDb29uLCAxIEFwcmlsIDE5ODkKK1R5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heSBjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUgbGlicmFyeS4gSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KKworCitJbiBhZGRpdGlvbiwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIGNvcHlyaWdodCBob2xkZXIKK2dpdmVzIHBlcm1pc3Npb24gdG8gbGluayB0aGUgY29kZSBvZiB0aGlzIHByb2dyYW0gd2l0aAorYW55IHZlcnNpb24gb2YgdGhlIE9wZW5TU0wgbGlicmFyeSB3aGljaCBpcyBkaXN0cmlidXRlZAordW5kZXIgYSBsaWNlbnNlIGlkZW50aWNhbCB0byB0aGF0IGxpc3RlZCBpbiB0aGUgaW5jbHVkZWQKK0NPUFlJTkcuT3BlblNTTCBmaWxlLCBhbmQgZGlzdHJpYnV0ZSBsaW5rZWQgY29tYmluYXRpb25zCitpbmNsdWRpbmcgdGhlIHR3by4gWW91IG11c3Qgb2JleSB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGluIGFsbCByZXNwZWN0cyBmb3IgYWxsIG9mIHRoZSBjb2RlIHVzZWQgb3RoZXIKK3RoYW4gT3BlblNTTC4gSWYgeW91IG1vZGlmeSB0aGlzIGZpbGUsIHlvdSBtYXkgZXh0ZW5kIHRoaXMKK2V4Y2VwdGlvbiB0byB5b3VyIHZlcnNpb24gb2YgdGhlIGZpbGUsIGJ1dCB5b3UgYXJlIG5vdAorb2JsaWdhdGVkIHRvIGRvIHNvLiBJZiB5b3UgZG8gbm90IHdpc2ggdG8gZG8gc28sIGRlbGV0ZQordGhpcyBleGNlcHRpb24gc3RhdGVtZW50IGZyb20geW91ciB2ZXJzaW9uLgorCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisKKyAgTElDRU5TRSBJU1NVRVMKKyAgPT09PT09PT09PT09PT0KKworICBUaGUgT3BlblNTTCB0b29sa2l0IHN0YXlzIHVuZGVyIGEgZHVhbCBsaWNlbnNlLCBpLmUuIGJvdGggdGhlIGNvbmRpdGlvbnMgb2YKKyAgdGhlIE9wZW5TU0wgTGljZW5zZSBhbmQgdGhlIG9yaWdpbmFsIFNTTGVheSBsaWNlbnNlIGFwcGx5IHRvIHRoZSB0b29sa2l0LgorICBTZWUgYmVsb3cgZm9yIHRoZSBhY3R1YWwgbGljZW5zZSB0ZXh0cy4gQWN0dWFsbHkgYm90aCBsaWNlbnNlcyBhcmUgQlNELXN0eWxlCisgIE9wZW4gU291cmNlIGxpY2Vuc2VzLiBJbiBjYXNlIG9mIGFueSBsaWNlbnNlIGlzc3VlcyByZWxhdGVkIHRvIE9wZW5TU0wKKyAgcGxlYXNlIGNvbnRhY3Qgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorCisgIE9wZW5TU0wgTGljZW5zZQorICAtLS0tLS0tLS0tLS0tLS0KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAyIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKgorICovCisKKyBPcmlnaW5hbCBTU0xlYXkgTGljZW5zZQorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKyAqIAorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICogCisgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAKKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisgKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLWF1dG9jb25mLWV4Y2VwdGlvbiBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLWF1dG9jb25mLWV4Y2VwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjJhYWQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtYXV0b2NvbmYtZXhjZXB0aW9uCkBAIC0wLDAgKzEsNiBAQAorCitpbnNlcnQgR1BMIHYyIGxpY2Vuc2UgdGV4dCBoZXJlCisKK0FzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSByZXNwZWN0aXZlIEF1dG9jb25mIE1hY3JvYHMgY29weXJpZ2h0IG93bmVyIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSB0aGUgY29uZmlndXJlIHNjcmlwdHMgdGhhdCBhcmUgdGhlIG91dHB1dCBvZiBBdXRvY29uZiB3aGVuIHByb2Nlc3NpbmcgdGhlIE1hY3JvLiBZb3UgbmVlZCBub3QgZm9sbG93IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugd2hlbiB1c2luZyAgb3IgCitUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwgYXBwbGllcyB0byB2ZXJzaW9ucyBvZiB0aGUgQXV0b2NvbmYgTWFjcm8gcmVsZWFzZWQgYnkgdGhlIEF1dG9jb25mIEFyY2hpdmUuIFdoZW4geW91IG1ha2UgYW5kIGRpc3RyaWJ1dGUgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBBdXRvY29uZiBNYWNybywgeW91IG1heSBleHRlbmQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMIHRvIGFwcGx5IHRvIHlvdXIgbW9kaWZpZWQgdmVyc2lvbiBhcyB3ZWxsLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1jbGFzc3BhdGgtZXhjZXB0aW9uIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtY2xhc3NwYXRoLWV4Y2VwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDNlOWNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtY2xhc3NwYXRoLWV4Y2VwdGlvbgpAQCAtMCwwICsxLDcgQEAKKworaW5zZXJ0IEdQTCB2MiBsaWNlbnNlIHRleHQgaGVyZQorCitMaW5raW5nIHRoaXMgbGlicmFyeSBzdGF0aWNhbGx5IG9yIGR5bmFtaWNhbGx5IHdpdGggb3RoZXIgbW9kdWxlcyBpcyBtYWtpbmcgYSBjb21iaW5lZCB3b3JrIGJhc2VkIG9uIHRoaXMgbGlicmFyeS4gVGh1cywgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBjb3ZlciB0aGUgd2hvbGUgY29tYmluYXRpb24uCisKK0FzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBvZiB0aGlzIGxpYnJhcnkgZ2l2ZSB5b3UgcGVybWlzc2lvbiB0byBsaW5rIHRoaXMgbGlicmFyeSB3aXRoIGluZGVwZW5kZW50IG1vZHVsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCByZWdhcmRsZXNzIG9mIHRoZSBsaWNlbnNlIHRlcm1zIG9mIHRoZXNlIGluZGVwZW5kZW50IG1vZHVsZXMsIGFuZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0LCBmb3IgZWFjaCBsaW5rZWQgaW5kZXBlbmRlbnQgbW9kdWxlLCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIGxpY2Vuc2Ugb2YgdGhhdCBtb2R1bGUuIEFuIGluZGVwZW5kZW50IG1vZHVsZSBpcyBhIG1vZHVsZSB3aGljaCBpcyBub3QgZGVyaXZlZCBmcm9tIG9yIGJhc2VkIG9uIHRoaXMgbGlicmFyeS4gSWYgeW91IG1vZGlmeSB0aGlzIGxpYnJhcnksIHlvdSBtYXkgZXh0ZW5kIHRoaXMgZXhjZXB0aW9uIHRvIHlvdXIgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgYnV0IHlvdSBhcmUgbm90IG9ibGlnYXRlZCB0byBkbyBzby4gSWYgeW91IGRvIG5vdCB3aXNoIHRvIGRvIHNvLCBkZWxldGUgdGhpcyBleGNlcHRpb24gc3RhdGVtZW50IGZyb20geW91ciB2ZXJzaW9uLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1mb250LWV4Y2VwdGlvbiBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLWZvbnQtZXhjZXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYjQyZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1mb250LWV4Y2VwdGlvbgpAQCAtMCwwICsxLDE4IEBACisKK2luc2VydCBHUEwgdjIgdGV4dCBoZXJlCisKK0ZvbnQgRXhjZXB0aW9uCitBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpZiB5b3UgY3JlYXRlIGEgZG9jdW1lbnQgd2hpY2ggdXNlcyB0aGlzIGZvbnQsIGFuZAorZW1iZWQgdGhpcyBmb250IG9yIHVuYWx0ZXJlZCBwb3J0aW9ucyBvZiB0aGlzIGZvbnQgaW50byB0aGUgZG9jdW1lbnQsIHRoaXMgZm9udAorZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZG9jdW1lbnQgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyIGludmFsaWRhdGUgYW55IG90aGVyCityZWFzb25zIHdoeSB0aGUgZG9jdW1lbnQgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIElmCit5b3UgbW9kaWZ5IHRoaXMgZm9udCwgeW91IG1heSBleHRlbmQgdGhpcyBleGNlcHRpb24gdG8geW91ciB2ZXJzaW9uIG9mIHRoZQorZm9udCwgYnV0IHlvdSBhcmUgbm90IG9ibGlnYXRlZCB0byBkbyBzby4gSWYgeW91IGRvIG5vdCB3aXNoIHRvIGRvIHNvLCBkZWxldGUKK3RoaXMgZXhjZXB0aW9uIHN0YXRlbWVudCBmcm9tIHlvdXIgdmVyc2lvbi4KKworCisKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTMuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDY2NWE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMy4wCkBAIC0wLDAgKzEsMjI1IEBACitHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCitWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNworCitDb3B5cmlnaHQgwqkgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gPGh0dHA6Ly9mc2Yub3JnLz4KKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorUHJlYW1ibGUKKworVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGEgZnJlZSwgY29weWxlZnQgbGljZW5zZSBmb3Igc29mdHdhcmUgYW5kIG90aGVyIGtpbmRzIG9mIHdvcmtzLgorCitUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYW5kIG90aGVyIHByYWN0aWNhbCB3b3JrcyBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIHRoZSB3b3Jrcy4gQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZSBzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gV2UsIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHVzZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vc3Qgb2Ygb3VyIHNvZnR3YXJlOyBpdCBhcHBsaWVzIGFsc28gdG8gYW55IG90aGVyIHdvcmsgcmVsZWFzZWQgdGhpcyB3YXkgYnkgaXRzIGF1dGhvcnMuIFlvdSBjYW4gYXBwbHkgaXQgdG8geW91ciBwcm9ncmFtcywgdG9vLgorCitXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90IHByaWNlLiBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yIHRoZW0gaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCitUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gZGVueWluZyB5b3UgdGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuIFRoZXJlZm9yZSwgeW91IGhhdmUgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQ6IHJlc3BvbnNpYmlsaXRpZXMgdG8gcmVzcGVjdCB0aGUgZnJlZWRvbSBvZiBvdGhlcnMuCisKK0ZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIgZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgcGFzcyBvbiB0byB0aGUgcmVjaXBpZW50cyB0aGUgc2FtZSBmcmVlZG9tcyB0aGF0IHlvdSByZWNlaXZlZC4gWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlIHNvdXJjZSBjb2RlLiBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMuCisKK0RldmVsb3BlcnMgdGhhdCB1c2UgdGhlIEdOVSBHUEwgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIExpY2Vuc2UgZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4KKworRm9yIHRoZSBkZXZlbG9wZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4cGxhaW5zIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gRm9yIGJvdGggdXNlcnMnIGFuZCBhdXRob3JzJyBzYWtlLCB0aGUgR1BMIHJlcXVpcmVzIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgYmUgbWFya2VkIGFzIGNoYW5nZWQsIHNvIHRoYXQgdGhlaXIgcHJvYmxlbXMgd2lsbCBub3QgYmUgYXR0cmlidXRlZCBlcnJvbmVvdXNseSB0byBhdXRob3JzIG9mIHByZXZpb3VzIHZlcnNpb25zLgorCitTb21lIGRldmljZXMgYXJlIGRlc2lnbmVkIHRvIGRlbnkgdXNlcnMgYWNjZXNzIHRvIGluc3RhbGwgb3IgcnVuIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBzb2Z0d2FyZSBpbnNpZGUgdGhlbSwgYWx0aG91Z2ggdGhlIG1hbnVmYWN0dXJlciBjYW4gZG8gc28uIFRoaXMgaXMgZnVuZGFtZW50YWxseSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgYWltIG9mIHByb3RlY3RpbmcgdXNlcnMnIGZyZWVkb20gdG8gY2hhbmdlIHRoZSBzb2Z0d2FyZS4gVGhlIHN5c3RlbWF0aWMgcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBpbiB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8gdXNlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuIFRoZXJlZm9yZSwgd2UgaGF2ZSBkZXNpZ25lZCB0aGlzIHZlcnNpb24gb2YgdGhlIEdQTCB0byBwcm9oaWJpdCB0aGUgcHJhY3RpY2UgZm9yIHRob3NlIHByb2R1Y3RzLiBJZiBzdWNoIHByb2JsZW1zIGFyaXNlIHN1YnN0YW50aWFsbHkgaW4gb3RoZXIgZG9tYWlucywgd2Ugc3RhbmQgcmVhZHkgdG8gZXh0ZW5kIHRoaXMgcHJvdmlzaW9uIHRvIHRob3NlIGRvbWFpbnMgaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBHUEwsIGFzIG5lZWRlZCB0byBwcm90ZWN0IHRoZSBmcmVlZG9tIG9mIHVzZXJzLgorCitGaW5hbGx5LCBldmVyeSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZSBwYXRlbnRzLiBTdGF0ZXMgc2hvdWxkIG5vdCBhbGxvdyBwYXRlbnRzIHRvIHJlc3RyaWN0IGRldmVsb3BtZW50IGFuZCB1c2Ugb2Ygc29mdHdhcmUgb24gZ2VuZXJhbC1wdXJwb3NlIGNvbXB1dGVycywgYnV0IGluIHRob3NlIHRoYXQgZG8sIHdlIHdpc2ggdG8gYXZvaWQgdGhlIHNwZWNpYWwgZGFuZ2VyIHRoYXQgcGF0ZW50cyBhcHBsaWVkIHRvIGEgZnJlZSBwcm9ncmFtIGNvdWxkIG1ha2UgaXQgZWZmZWN0aXZlbHkgcHJvcHJpZXRhcnkuIFRvIHByZXZlbnQgdGhpcywgdGhlIEdQTCBhc3N1cmVzIHRoYXQgcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCisKK1RoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBmb2xsb3cuCitURVJNUyBBTkQgQ09ORElUSU9OUworMC4gRGVmaW5pdGlvbnMuCisKK+KAnFRoaXMgTGljZW5zZeKAnSByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKwor4oCcQ29weXJpZ2h04oCdIGFsc28gbWVhbnMgY29weXJpZ2h0LWxpa2UgbGF3cyB0aGF0IGFwcGx5IHRvIG90aGVyIGtpbmRzIG9mIHdvcmtzLCBzdWNoIGFzIHNlbWljb25kdWN0b3IgbWFza3MuCisKK+KAnFRoZSBQcm9ncmFt4oCdIHJlZmVycyB0byBhbnkgY29weXJpZ2h0YWJsZSB3b3JrIGxpY2Vuc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4gRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMg4oCceW914oCdLiDigJxMaWNlbnNlZXPigJ0gYW5kIOKAnHJlY2lwaWVudHPigJ0gbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCisKK1RvIOKAnG1vZGlmeeKAnSBhIHdvcmsgbWVhbnMgdG8gY29weSBmcm9tIG9yIGFkYXB0IGFsbCBvciBwYXJ0IG9mIHRoZSB3b3JrIGluIGEgZmFzaGlvbiByZXF1aXJpbmcgY29weXJpZ2h0IHBlcm1pc3Npb24sIG90aGVyIHRoYW4gdGhlIG1ha2luZyBvZiBhbiBleGFjdCBjb3B5LiBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEg4oCcbW9kaWZpZWQgdmVyc2lvbuKAnSBvZiB0aGUgZWFybGllciB3b3JrIG9yIGEgd29yayDigJxiYXNlZCBvbuKAnSB0aGUgZWFybGllciB3b3JrLgorCitBIOKAnGNvdmVyZWQgd29ya+KAnSBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK1RvIOKAnHByb3BhZ2F0ZeKAnSBhIHdvcmsgbWVhbnMgdG8gZG8gYW55dGhpbmcgd2l0aCBpdCB0aGF0LCB3aXRob3V0IHBlcm1pc3Npb24sIHdvdWxkIG1ha2UgeW91IGRpcmVjdGx5IG9yIHNlY29uZGFyaWx5IGxpYWJsZSBmb3IgaW5mcmluZ2VtZW50IHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdywgZXhjZXB0IGV4ZWN1dGluZyBpdCBvbiBhIGNvbXB1dGVyIG9yIG1vZGlmeWluZyBhIHByaXZhdGUgY29weS4gUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywgZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUgcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBhcyB3ZWxsLgorCitUbyDigJxjb252ZXnigJ0gYSB3b3JrIG1lYW5zIGFueSBraW5kIG9mIHByb3BhZ2F0aW9uIHRoYXQgZW5hYmxlcyBvdGhlciBwYXJ0aWVzIHRvIG1ha2Ugb3IgcmVjZWl2ZSBjb3BpZXMuIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaCBhIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgorCitBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyDigJxBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2Vz4oCdIHRvIHRoZSBleHRlbnQgdGhhdCBpdCBpbmNsdWRlcyBhIGNvbnZlbmllbnQgYW5kIHByb21pbmVudGx5IHZpc2libGUgZmVhdHVyZSB0aGF0ICgxKSBkaXNwbGF5cyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlLCBhbmQgKDIpIHRlbGxzIHRoZSB1c2VyIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSB3b3JrIChleGNlcHQgdG8gdGhlIGV4dGVudCB0aGF0IHdhcnJhbnRpZXMgYXJlIHByb3ZpZGVkKSwgdGhhdCBsaWNlbnNlZXMgbWF5IGNvbnZleSB0aGUgd29yayB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiBJZiB0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYSBtZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgorMS4gU291cmNlIENvZGUuCisKK1RoZSDigJxzb3VyY2UgY29kZeKAnSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuIOKAnE9iamVjdCBjb2Rl4oCdIG1lYW5zIGFueSBub24tc291cmNlIGZvcm0gb2YgYSB3b3JrLgorCitBIOKAnFN0YW5kYXJkIEludGVyZmFjZeKAnSBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwgc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZiBpbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdCBpcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4KKworVGhlIOKAnFN5c3RlbSBMaWJyYXJpZXPigJ0gb2YgYW4gZXhlY3V0YWJsZSB3b3JrIGluY2x1ZGUgYW55dGhpbmcsIG90aGVyIHRoYW4gdGhlIHdvcmsgYXMgYSB3aG9sZSwgdGhhdCAoYSkgaXMgaW5jbHVkZWQgaW4gdGhlIG5vcm1hbCBmb3JtIG9mIHBhY2thZ2luZyBhIE1ham9yIENvbXBvbmVudCwgYnV0IHdoaWNoIGlzIG5vdCBwYXJ0IG9mIHRoYXQgTWFqb3IgQ29tcG9uZW50LCBhbmQgKGIpIHNlcnZlcyBvbmx5IHRvIGVuYWJsZSB1c2Ugb2YgdGhlIHdvcmsgd2l0aCB0aGF0IE1ham9yIENvbXBvbmVudCwgb3IgdG8gaW1wbGVtZW50IGEgU3RhbmRhcmQgSW50ZXJmYWNlIGZvciB3aGljaCBhbiBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbiBzb3VyY2UgY29kZSBmb3JtLiBBIOKAnE1ham9yIENvbXBvbmVudOKAnSwgaW4gdGhpcyBjb250ZXh0LCBtZWFucyBhIG1ham9yIGVzc2VudGlhbCBjb21wb25lbnQgKGtlcm5lbCwgd2luZG93IHN5c3RlbSwgYW5kIHNvIG9uKSBvZiB0aGUgc3BlY2lmaWMgb3BlcmF0aW5nIHN5c3RlbSAoaWYgYW55KSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSB3b3JrIHJ1bnMsIG9yIGEgY29tcGlsZXIgdXNlZCB0byBwcm9kdWNlIHRoZSB3b3JrLCBvciBhbiBvYmplY3QgY29kZSBpbnRlcnByZXRlciB1c2VkIHRvIHJ1biBpdC4KKworVGhlIOKAnENvcnJlc3BvbmRpbmcgU291cmNl4oCdIGZvciBhIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIG5lZWRlZCB0byBnZW5lcmF0ZSwgaW5zdGFsbCwgYW5kIChmb3IgYW4gZXhlY3V0YWJsZSB3b3JrKSBydW4gdGhlIG9iamVjdCBjb2RlIGFuZCB0byBtb2RpZnkgdGhlIHdvcmssIGluY2x1ZGluZyBzY3JpcHRzIHRvIGNvbnRyb2wgdGhvc2UgYWN0aXZpdGllcy4gSG93ZXZlciwgaXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgd29yaydzIFN5c3RlbSBMaWJyYXJpZXMsIG9yIGdlbmVyYWwtcHVycG9zZSB0b29scyBvciBnZW5lcmFsbHkgYXZhaWxhYmxlIGZyZWUgcHJvZ3JhbXMgd2hpY2ggYXJlIHVzZWQgdW5tb2RpZmllZCBpbiBwZXJmb3JtaW5nIHRob3NlIGFjdGl2aXRpZXMgYnV0IHdoaWNoIGFyZSBub3QgcGFydCBvZiB0aGUgd29yay4gRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlIGluY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yIHRoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseSBsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwgc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2Ugc3VicHJvZ3JhbXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JrLgorCitUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzIGNhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UuCisKK1RoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdCBzYW1lIHdvcmsuCisyLiBCYXNpYyBQZXJtaXNzaW9ucy4KKworQWxsIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBhcmUgZ3JhbnRlZCBmb3IgdGhlIHRlcm0gb2YgY29weXJpZ2h0IG9uIHRoZSBQcm9ncmFtLCBhbmQgYXJlIGlycmV2b2NhYmxlIHByb3ZpZGVkIHRoZSBzdGF0ZWQgY29uZGl0aW9ucyBhcmUgbWV0LiBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gcnVuIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uIFRoZSBvdXRwdXQgZnJvbSBydW5uaW5nIGEgY292ZXJlZCB3b3JrIGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlIG9ubHkgaWYgdGhlIG91dHB1dCwgZ2l2ZW4gaXRzIGNvbnRlbnQsIGNvbnN0aXR1dGVzIGEgY292ZXJlZCB3b3JrLiBUaGlzIExpY2Vuc2UgYWNrbm93bGVkZ2VzIHlvdXIgcmlnaHRzIG9mIGZhaXIgdXNlIG9yIG90aGVyIGVxdWl2YWxlbnQsIGFzIHByb3ZpZGVkIGJ5IGNvcHlyaWdodCBsYXcuCisKK1lvdSBtYXkgbWFrZSwgcnVuIGFuZCBwcm9wYWdhdGUgY292ZXJlZCB3b3JrcyB0aGF0IHlvdSBkbyBub3QgY29udmV5LCB3aXRob3V0IGNvbmRpdGlvbnMgc28gbG9uZyBhcyB5b3VyIGxpY2Vuc2Ugb3RoZXJ3aXNlIHJlbWFpbnMgaW4gZm9yY2UuIFlvdSBtYXkgY29udmV5IGNvdmVyZWQgd29ya3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlIG9mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdSB3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvIG5vdCBjb250cm9sIGNvcHlyaWdodC4gVGhvc2UgdGh1cyBtYWtpbmcgb3IgcnVubmluZyB0aGUgY292ZXJlZCB3b3JrcyBmb3IgeW91IG11c3QgZG8gc28gZXhjbHVzaXZlbHkgb24geW91ciBiZWhhbGYsIHVuZGVyIHlvdXIgZGlyZWN0aW9uIGFuZCBjb250cm9sLCBvbiB0ZXJtcyB0aGF0IHByb2hpYml0IHRoZW0gZnJvbSBtYWtpbmcgYW55IGNvcGllcyBvZiB5b3VyIGNvcHlyaWdodGVkIG1hdGVyaWFsIG91dHNpZGUgdGhlaXIgcmVsYXRpb25zaGlwIHdpdGggeW91LgorCitDb252ZXlpbmcgdW5kZXIgYW55IG90aGVyIGNpcmN1bXN0YW5jZXMgaXMgcGVybWl0dGVkIHNvbGVseSB1bmRlciB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgYmVsb3cuIFN1YmxpY2Vuc2luZyBpcyBub3QgYWxsb3dlZDsgc2VjdGlvbiAxMCBtYWtlcyBpdCB1bm5lY2Vzc2FyeS4KKzMuIFByb3RlY3RpbmcgVXNlcnMnIExlZ2FsIFJpZ2h0cyBGcm9tIEFudGktQ2lyY3VtdmVudGlvbiBMYXcuCisKK05vIGNvdmVyZWQgd29yayBzaGFsbCBiZSBkZWVtZWQgcGFydCBvZiBhbiBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbCBtZWFzdXJlIHVuZGVyIGFueSBhcHBsaWNhYmxlIGxhdyBmdWxmaWxsaW5nIG9ibGlnYXRpb25zIHVuZGVyIGFydGljbGUgMTEgb2YgdGhlIFdJUE8gY29weXJpZ2h0IHRyZWF0eSBhZG9wdGVkIG9uIDIwIERlY2VtYmVyIDE5OTYsIG9yIHNpbWlsYXIgbGF3cyBwcm9oaWJpdGluZyBvciByZXN0cmljdGluZyBjaXJjdW12ZW50aW9uIG9mIHN1Y2ggbWVhc3VyZXMuCisKK1doZW4geW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgeW91IHdhaXZlIGFueSBsZWdhbCBwb3dlciB0byBmb3JiaWQgY2lyY3VtdmVudGlvbiBvZiB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRvIHRoZSBleHRlbnQgc3VjaCBjaXJjdW12ZW50aW9uIGlzIGVmZmVjdGVkIGJ5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIGNvdmVyZWQgd29yaywgYW5kIHlvdSBkaXNjbGFpbSBhbnkgaW50ZW50aW9uIHRvIGxpbWl0IG9wZXJhdGlvbiBvciBtb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgYXMgYSBtZWFucyBvZiBlbmZvcmNpbmcsIGFnYWluc3QgdGhlIHdvcmsncyB1c2VycywgeW91ciBvciB0aGlyZCBwYXJ0aWVzJyBsZWdhbCByaWdodHMgdG8gZm9yYmlkIGNpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcy4KKzQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCisKK1lvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2U7IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueSBub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIG9mIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYWxsIHJlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2UgZm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXksIGFuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCis1LiBDb252ZXlpbmcgTW9kaWZpZWQgU291cmNlIFZlcnNpb25zLgorCitZb3UgbWF5IGNvbnZleSBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIG9yIHRoZSBtb2RpZmljYXRpb25zIHRvIHByb2R1Y2UgaXQgZnJvbSB0aGUgUHJvZ3JhbSwgaW4gdGhlIGZvcm0gb2Ygc291cmNlIGNvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIHNlY3Rpb24gNCwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgKiBhKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgbW9kaWZpZWQgaXQsIGFuZCBnaXZpbmcgYSByZWxldmFudCBkYXRlLgorICAgICogYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgY29uZGl0aW9ucyBhZGRlZCB1bmRlciBzZWN0aW9uIDcuIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0byDigJxrZWVwIGludGFjdCBhbGwgbm90aWNlc+KAnS4KKyAgICAqIGMpIFlvdSBtdXN0IGxpY2Vuc2UgdGhlIGVudGlyZSB3b3JrLCBhcyBhIHdob2xlLCB1bmRlciB0aGlzIExpY2Vuc2UgdG8gYW55b25lIHdobyBjb21lcyBpbnRvIHBvc3Nlc3Npb24gb2YgYSBjb3B5LiBUaGlzIExpY2Vuc2Ugd2lsbCB0aGVyZWZvcmUgYXBwbHksIGFsb25nIHdpdGggYW55IGFwcGxpY2FibGUgc2VjdGlvbiA3IGFkZGl0aW9uYWwgdGVybXMsIHRvIHRoZSB3aG9sZSBvZiB0aGUgd29yaywgYW5kIGFsbCBpdHMgcGFydHMsIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIHBhY2thZ2VkLiBUaGlzIExpY2Vuc2UgZ2l2ZXMgbm8gcGVybWlzc2lvbiB0byBsaWNlbnNlIHRoZSB3b3JrIGluIGFueSBvdGhlciB3YXksIGJ1dCBpdCBkb2VzIG5vdCBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0LgorICAgICogZCkgSWYgdGhlIHdvcmsgaGFzIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlcywgZWFjaCBtdXN0IGRpc3BsYXkgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlczsgaG93ZXZlciwgaWYgdGhlIFByb2dyYW0gaGFzIGludGVyYWN0aXZlIGludGVyZmFjZXMgdGhhdCBkbyBub3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzLCB5b3VyIHdvcmsgbmVlZCBub3QgbWFrZSB0aGVtIGRvIHNvLgorCitBIGNvbXBpbGF0aW9uIG9mIGEgY292ZXJlZCB3b3JrIHdpdGggb3RoZXIgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzLCB3aGljaCBhcmUgbm90IGJ5IHRoZWlyIG5hdHVyZSBleHRlbnNpb25zIG9mIHRoZSBjb3ZlcmVkIHdvcmssIGFuZCB3aGljaCBhcmUgbm90IGNvbWJpbmVkIHdpdGggaXQgc3VjaCBhcyB0byBmb3JtIGEgbGFyZ2VyIHByb2dyYW0sIGluIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4g4oCcYWdncmVnYXRl4oCdIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdCB1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzIGJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gSW5jbHVzaW9uIG9mIGEgY292ZXJlZCB3b3JrIGluIGFuIGFnZ3JlZ2F0ZSBkb2VzIG5vdCBjYXVzZSB0aGlzIExpY2Vuc2UgdG8gYXBwbHkgdG8gdGhlIG90aGVyIHBhcnRzIG9mIHRoZSBhZ2dyZWdhdGUuCis2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KKworWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlIG1hY2hpbmUtcmVhZGFibGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW4gb25lIG9mIHRoZXNlIHdheXM6CisKKyAgICAqIGEpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZml4ZWQgb24gYSBkdXJhYmxlIHBoeXNpY2FsIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKyAgICAqIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycyBhbmQgdmFsaWQgZm9yIGFzIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdCBtb2RlbCwgdG8gZ2l2ZSBhbnlvbmUgd2hvIHBvc3Nlc3NlcyB0aGUgb2JqZWN0IGNvZGUgZWl0aGVyICgxKSBhIGNvcHkgb2YgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhbGwgdGhlIHNvZnR3YXJlIGluIHRoZSBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UsIGZvciBhIHByaWNlIG5vIG1vcmUgdGhhbiB5b3VyIHJlYXNvbmFibGUgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgdGhpcyBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZyb20gYSBuZXR3b3JrIHNlcnZlciBhdCBubyBjaGFyZ2UuCisgICAgKiBjKSBDb252ZXkgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhlIG9iamVjdCBjb2RlIHdpdGggYSBjb3B5IG9mIHRoZSB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiBUaGlzIGFsdGVybmF0aXZlIGlzIGFsbG93ZWQgb25seSBvY2Nhc2lvbmFsbHkgYW5kIG5vbmNvbW1lcmNpYWxseSwgYW5kIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIHN1YnNlY3Rpb24gNmIuCisgICAgKiBkKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGJ5IG9mZmVyaW5nIGFjY2VzcyBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSAoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgaW4gdGhlIHNhbWUgd2F5IHRocm91Z2ggdGhlIHNhbWUgcGxhY2UgYXQgbm8gZnVydGhlciBjaGFyZ2UuIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuIElmIHRoZSBwbGFjZSB0byBjb3B5IHRoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbWF5IGJlIG9uIGEgZGlmZmVyZW50IHNlcnZlciAob3BlcmF0ZWQgYnkgeW91IG9yIGEgdGhpcmQgcGFydHkpIHRoYXQgc3VwcG9ydHMgZXF1aXZhbGVudCBjb3B5aW5nIGZhY2lsaXRpZXMsIHByb3ZpZGVkIHlvdSBtYWludGFpbiBjbGVhciBkaXJlY3Rpb25zIG5leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4gUmVnYXJkbGVzcyBvZiB3aGF0IHNlcnZlciBob3N0cyB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4gb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzIGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyBuZWVkZWQgdG8gc2F0aXNmeSB0aGVzZSByZXF1aXJlbWVudHMuCisgICAgKiBlKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24sIHByb3ZpZGVkIHlvdSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBhcmUgYmVpbmcgb2ZmZXJlZCB0byB0aGUgZ2VuZXJhbCBwdWJsaWMgYXQgbm8gY2hhcmdlIHVuZGVyIHN1YnNlY3Rpb24gNmQuCisKK0Egc2VwYXJhYmxlIHBvcnRpb24gb2YgdGhlIG9iamVjdCBjb2RlLCB3aG9zZSBzb3VyY2UgY29kZSBpcyBleGNsdWRlZCBmcm9tIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBhcyBhIFN5c3RlbSBMaWJyYXJ5LCBuZWVkIG5vdCBiZSBpbmNsdWRlZCBpbiBjb252ZXlpbmcgdGhlIG9iamVjdCBjb2RlIHdvcmsuCisKK0Eg4oCcVXNlciBQcm9kdWN04oCdIGlzIGVpdGhlciAoMSkgYSDigJxjb25zdW1lciBwcm9kdWN04oCdLCB3aGljaCBtZWFucyBhbnkgdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsIGZhbWlseSwgb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbiBpbnRvIGEgZHdlbGxpbmcuIEluIGRldGVybWluaW5nIHdoZXRoZXIgYSBwcm9kdWN0IGlzIGEgY29uc3VtZXIgcHJvZHVjdCwgZG91YnRmdWwgY2FzZXMgc2hhbGwgYmUgcmVzb2x2ZWQgaW4gZmF2b3Igb2YgY292ZXJhZ2UuIEZvciBhIHBhcnRpY3VsYXIgcHJvZHVjdCByZWNlaXZlZCBieSBhIHBhcnRpY3VsYXIgdXNlciwg4oCcbm9ybWFsbHkgdXNlZOKAnSByZWZlcnMgdG8gYSB0eXBpY2FsIG9yIGNvbW1vbiB1c2Ugb2YgdGhhdCBjbGFzcyBvZiBwcm9kdWN0LCByZWdhcmRsZXNzIG9mIHRoZSBzdGF0dXMgb2YgdGhlIHBhcnRpY3VsYXIgdXNlciBvciBvZiB0aGUgd2F5IGluIHdoaWNoIHRoZSBwYXJ0aWN1bGFyIHVzZXIgYWN0dWFsbHkgdXNlcywgb3IgZXhwZWN0cyBvciBpcyBleHBlY3RlZCB0byB1c2UsIHRoZSBwcm9kdWN0LiBBIHByb2R1Y3QgaXMgYSBjb25zdW1lciBwcm9kdWN0IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcHJvZHVjdCBoYXMgc3Vic3RhbnRpYWwgY29tbWVyY2lhbCwgaW5kdXN0cmlhbCBvciBub24tY29uc3VtZXIgdXNlcywgdW5sZXNzIHN1Y2ggdXNlcyByZXByZXNlbnQgdGhlIG9ubHkgc2lnbmlmaWNhbnQgbW9kZSBvZiB1c2Ugb2YgdGhlIHByb2R1Y3QuCisKK+KAnEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbuKAnSBmb3IgYSBVc2VyIFByb2R1Y3QgbWVhbnMgYW55IG1ldGhvZHMsIHByb2NlZHVyZXMsIGF1dGhvcml6YXRpb24ga2V5cywgb3Igb3RoZXIgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gaW5zdGFsbCBhbmQgZXhlY3V0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBhIGNvdmVyZWQgd29yayBpbiB0aGF0IFVzZXIgUHJvZHVjdCBmcm9tIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiBpdHMgQ29ycmVzcG9uZGluZyBTb3VyY2UuIFRoZSBpbmZvcm1hdGlvbiBtdXN0IHN1ZmZpY2UgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbnRpbnVlZCBmdW5jdGlvbmluZyBvZiB0aGUgbW9kaWZpZWQgb2JqZWN0IGNvZGUgaXMgaW4gbm8gY2FzZSBwcmV2ZW50ZWQgb3IgaW50ZXJmZXJlZCB3aXRoIHNvbGVseSBiZWNhdXNlIG1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlLgorCitJZiB5b3UgY29udmV5IGFuIG9iamVjdCBjb2RlIHdvcmsgdW5kZXIgdGhpcyBzZWN0aW9uIGluLCBvciB3aXRoLCBvciBzcGVjaWZpY2FsbHkgZm9yIHVzZSBpbiwgYSBVc2VyIFByb2R1Y3QsIGFuZCB0aGUgY29udmV5aW5nIG9jY3VycyBhcyBwYXJ0IG9mIGEgdHJhbnNhY3Rpb24gaW4gd2hpY2ggdGhlIHJpZ2h0IG9mIHBvc3Nlc3Npb24gYW5kIHVzZSBvZiB0aGUgVXNlciBQcm9kdWN0IGlzIHRyYW5zZmVycmVkIHRvIHRoZSByZWNpcGllbnQgaW4gcGVycGV0dWl0eSBvciBmb3IgYSBmaXhlZCB0ZXJtIChyZWdhcmRsZXNzIG9mIGhvdyB0aGUgdHJhbnNhY3Rpb24gaXMgY2hhcmFjdGVyaXplZCksIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXllZCB1bmRlciB0aGlzIHNlY3Rpb24gbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uLiBCdXQgdGhpcyByZXF1aXJlbWVudCBkb2VzIG5vdCBhcHBseSBpZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhlIGFiaWxpdHkgdG8gaW5zdGFsbCBtb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzIGJlZW4gaW5zdGFsbGVkIGluIFJPTSkuCisKK1RoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEgcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvciB1cGRhdGVzIGZvciBhIHdvcmsgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQgYnkgdGhlIHJlY2lwaWVudCwgb3IgZm9yIHRoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiBBY2Nlc3MgdG8gYSBuZXR3b3JrIG1heSBiZSBkZW5pZWQgd2hlbiB0aGUgbW9kaWZpY2F0aW9uIGl0c2VsZiBtYXRlcmlhbGx5IGFuZCBhZHZlcnNlbHkgYWZmZWN0cyB0aGUgb3BlcmF0aW9uIG9mIHRoZSBuZXR3b3JrIG9yIHZpb2xhdGVzIHRoZSBydWxlcyBhbmQgcHJvdG9jb2xzIGZvciBjb21tdW5pY2F0aW9uIGFjcm9zcyB0aGUgbmV0d29yay4KKworQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQsIGFuZCBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gcHJvdmlkZWQsIGluIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGluIGEgZm9ybWF0IHRoYXQgaXMgcHVibGljbHkgZG9jdW1lbnRlZCAoYW5kIHdpdGggYW4gaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgaW4gc291cmNlIGNvZGUgZm9ybSksIGFuZCBtdXN0IHJlcXVpcmUgbm8gc3BlY2lhbCBwYXNzd29yZCBvciBrZXkgZm9yIHVucGFja2luZywgcmVhZGluZyBvciBjb3B5aW5nLgorNy4gQWRkaXRpb25hbCBUZXJtcy4KKwor4oCcQWRkaXRpb25hbCBwZXJtaXNzaW9uc+KAnSBhcmUgdGVybXMgdGhhdCBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYnkgbWFraW5nIGV4Y2VwdGlvbnMgZnJvbSBvbmUgb3IgbW9yZSBvZiBpdHMgY29uZGl0aW9ucy4gQWRkaXRpb25hbCBwZXJtaXNzaW9ucyB0aGF0IGFyZSBhcHBsaWNhYmxlIHRvIHRoZSBlbnRpcmUgUHJvZ3JhbSBzaGFsbCBiZSB0cmVhdGVkIGFzIHRob3VnaCB0aGV5IHdlcmUgaW5jbHVkZWQgaW4gdGhpcyBMaWNlbnNlLCB0byB0aGUgZXh0ZW50IHRoYXQgdGhleSBhcmUgdmFsaWQgdW5kZXIgYXBwbGljYWJsZSBsYXcuIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseSB1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KKworV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbiByZW1vdmUgYW55IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJvbSB0aGF0IGNvcHksIG9yIGZyb20gYW55IHBhcnQgb2YgaXQuIChBZGRpdGlvbmFsIHBlcm1pc3Npb25zIG1heSBiZSB3cml0dGVuIHRvIHJlcXVpcmUgdGhlaXIgb3duIHJlbW92YWwgaW4gY2VydGFpbiBjYXNlcyB3aGVuIHlvdSBtb2RpZnkgdGhlIHdvcmsuKSBZb3UgbWF5IHBsYWNlIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgb24gbWF0ZXJpYWwsIGFkZGVkIGJ5IHlvdSB0byBhIGNvdmVyZWQgd29yaywgZm9yIHdoaWNoIHlvdSBoYXZlIG9yIGNhbiBnaXZlIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBwZXJtaXNzaW9uLgorCitOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIGZvciBtYXRlcmlhbCB5b3UgYWRkIHRvIGEgY292ZXJlZCB3b3JrLCB5b3UgbWF5IChpZiBhdXRob3JpemVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyBvZiB0aGF0IG1hdGVyaWFsKSBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0ZXJtczoKKworICAgICogYSkgRGlzY2xhaW1pbmcgd2FycmFudHkgb3IgbGltaXRpbmcgbGlhYmlsaXR5IGRpZmZlcmVudGx5IGZyb20gdGhlIHRlcm1zIG9mIHNlY3Rpb25zIDE1IGFuZCAxNiBvZiB0aGlzIExpY2Vuc2U7IG9yCisgICAgKiBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IgYXV0aG9yIGF0dHJpYnV0aW9ucyBpbiB0aGF0IG1hdGVyaWFsIG9yIGluIHRoZSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzIGRpc3BsYXllZCBieSB3b3JrcyBjb250YWluaW5nIGl0OyBvcgorICAgICogYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvciByZXF1aXJpbmcgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBvZiBzdWNoIG1hdGVyaWFsIGJlIG1hcmtlZCBpbiByZWFzb25hYmxlIHdheXMgYXMgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIHZlcnNpb247IG9yCisgICAgKiBkKSBMaW1pdGluZyB0aGUgdXNlIGZvciBwdWJsaWNpdHkgcHVycG9zZXMgb2YgbmFtZXMgb2YgbGljZW5zb3JzIG9yIGF1dGhvcnMgb2YgdGhlIG1hdGVyaWFsOyBvcgorICAgICogZSkgRGVjbGluaW5nIHRvIGdyYW50IHJpZ2h0cyB1bmRlciB0cmFkZW1hcmsgbGF3IGZvciB1c2Ugb2Ygc29tZSB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKKyAgICAqIGYpIFJlcXVpcmluZyBpbmRlbW5pZmljYXRpb24gb2YgbGljZW5zb3JzIGFuZCBhdXRob3JzIG9mIHRoYXQgbWF0ZXJpYWwgYnkgYW55b25lIHdobyBjb252ZXlzIHRoZSBtYXRlcmlhbCAob3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvciBhbnkgbGlhYmlsaXR5IHRoYXQgdGhlc2UgY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgZGlyZWN0bHkgaW1wb3NlIG9uIHRob3NlIGxpY2Vuc29ycyBhbmQgYXV0aG9ycy4KKworQWxsIG90aGVyIG5vbi1wZXJtaXNzaXZlIGFkZGl0aW9uYWwgdGVybXMgYXJlIGNvbnNpZGVyZWQg4oCcZnVydGhlciByZXN0cmljdGlvbnPigJ0gd2l0aGluIHRoZSBtZWFuaW5nIG9mIHNlY3Rpb24gMTAuIElmIHRoZSBQcm9ncmFtIGFzIHlvdSByZWNlaXZlZCBpdCwgb3IgYW55IHBhcnQgb2YgaXQsIGNvbnRhaW5zIGEgbm90aWNlIHN0YXRpbmcgdGhhdCBpdCBpcyBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCBhIHRlcm0gdGhhdCBpcyBhIGZ1cnRoZXIgcmVzdHJpY3Rpb24sIHlvdSBtYXkgcmVtb3ZlIHRoYXQgdGVybS4gSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zIGEgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGFkZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMgbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuCisKK0lmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UgbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlIGFkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZyB3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgorCitBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZSBmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOyB0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuCis4LiBUZXJtaW5hdGlvbi4KKworWW91IG1heSBub3QgcHJvcGFnYXRlIG9yIG1vZGlmeSBhIGNvdmVyZWQgd29yayBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvciBtb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZCBwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCisKK0hvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyIGxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKSBwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kIGZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMgcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgorCitNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMgcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUgcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0IGNvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIgeW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCisKK1Rlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlIGxpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2UuIElmIHlvdXIgcmlnaHRzIGhhdmUgYmVlbiB0ZXJtaW5hdGVkIGFuZCBub3QgcGVybWFuZW50bHkgcmVpbnN0YXRlZCwgeW91IGRvIG5vdCBxdWFsaWZ5IHRvIHJlY2VpdmUgbmV3IGxpY2Vuc2VzIGZvciB0aGUgc2FtZSBtYXRlcmlhbCB1bmRlciBzZWN0aW9uIDEwLgorOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuCisKK1lvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvciBydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiBBbmNpbGxhcnkgcHJvcGFnYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsgb2NjdXJyaW5nIHNvbGVseSBhcyBhIGNvbnNlcXVlbmNlIG9mIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24gdG8gcmVjZWl2ZSBhIGNvcHkgbGlrZXdpc2UgZG9lcyBub3QgcmVxdWlyZSBhY2NlcHRhbmNlLiBIb3dldmVyLCBub3RoaW5nIG90aGVyIHRoYW4gdGhpcyBMaWNlbnNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBwcm9wYWdhdGUgb3IgbW9kaWZ5IGFueSBjb3ZlcmVkIHdvcmsuIFRoZXNlIGFjdGlvbnMgaW5mcmluZ2UgY29weXJpZ2h0IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgcHJvcGFnYXRpbmcgYSBjb3ZlcmVkIHdvcmssIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLgorMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgorCitFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZCBwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aCB0aGlzIExpY2Vuc2UuCisKK0FuIOKAnGVudGl0eSB0cmFuc2FjdGlvbuKAnSBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuIG9yZ2FuaXphdGlvbiwgb3Igc3Vic3RhbnRpYWxseSBhbGwgYXNzZXRzIG9mIG9uZSwgb3Igc3ViZGl2aWRpbmcgYW4gb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuIElmIHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrIHJlc3VsdHMgZnJvbSBhbiBlbnRpdHkgdHJhbnNhY3Rpb24sIGVhY2ggcGFydHkgdG8gdGhhdCB0cmFuc2FjdGlvbiB3aG8gcmVjZWl2ZXMgYSBjb3B5IG9mIHRoZSB3b3JrIGFsc28gcmVjZWl2ZXMgd2hhdGV2ZXIgbGljZW5zZXMgdG8gdGhlIHdvcmsgdGhlIHBhcnR5J3MgcHJlZGVjZXNzb3IgaW4gaW50ZXJlc3QgaGFkIG9yIGNvdWxkIGdpdmUgdW5kZXIgdGhlIHByZXZpb3VzIHBhcmFncmFwaCwgcGx1cyBhIHJpZ2h0IHRvIHBvc3Nlc3Npb24gb2YgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGZyb20gdGhlIHByZWRlY2Vzc29yIGluIGludGVyZXN0LCBpZiB0aGUgcHJlZGVjZXNzb3IgaGFzIGl0IG9yIGNhbiBnZXQgaXQgd2l0aCByZWFzb25hYmxlIGVmZm9ydHMuCisKK1lvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBvciBhZmZpcm1lZCB1bmRlciB0aGlzIExpY2Vuc2UuIEZvciBleGFtcGxlLCB5b3UgbWF5IG5vdCBpbXBvc2UgYSBsaWNlbnNlIGZlZSwgcm95YWx0eSwgb3Igb3RoZXIgY2hhcmdlIGZvciBleGVyY2lzZSBvZiByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB5b3UgbWF5IG5vdCBpbml0aWF0ZSBsaXRpZ2F0aW9uIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IGFueSBwYXRlbnQgY2xhaW0gaXMgaW5mcmluZ2VkIGJ5IG1ha2luZywgdXNpbmcsIHNlbGxpbmcsIG9mZmVyaW5nIGZvciBzYWxlLCBvciBpbXBvcnRpbmcgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24gb2YgaXQuCisxMS4gUGF0ZW50cy4KKworQSDigJxjb250cmlidXRvcuKAnSBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMgTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuIFRoZSB3b3JrIHRodXMgbGljZW5zZWQgaXMgY2FsbGVkIHRoZSBjb250cmlidXRvcidzIOKAnGNvbnRyaWJ1dG9yIHZlcnNpb27igJ0uCisKK0EgY29udHJpYnV0b3IncyDigJxlc3NlbnRpYWwgcGF0ZW50IGNsYWltc+KAnSBhcmUgYWxsIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgY29udHJpYnV0b3IsIHdoZXRoZXIgYWxyZWFkeSBhY3F1aXJlZCBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIGJ5IHNvbWUgbWFubmVyLCBwZXJtaXR0ZWQgYnkgdGhpcyBMaWNlbnNlLCBvZiBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLCBidXQgZG8gbm90IGluY2x1ZGUgY2xhaW1zIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIG9ubHkgYXMgYSBjb25zZXF1ZW5jZSBvZiBmdXJ0aGVyIG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udHJpYnV0b3IgdmVyc2lvbi4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwg4oCcY29udHJvbOKAnSBpbmNsdWRlcyB0aGUgcmlnaHQgdG8gZ3JhbnQgcGF0ZW50IHN1YmxpY2Vuc2VzIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZS4KKworRWFjaCBjb250cmlidXRvciBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgcGF0ZW50IGxpY2Vuc2UgdW5kZXIgdGhlIGNvbnRyaWJ1dG9yJ3MgZXNzZW50aWFsIHBhdGVudCBjbGFpbXMsIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHJ1biwgbW9kaWZ5IGFuZCBwcm9wYWdhdGUgdGhlIGNvbnRlbnRzIG9mIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLgorCitJbiB0aGUgZm9sbG93aW5nIHRocmVlIHBhcmFncmFwaHMsIGEg4oCccGF0ZW50IGxpY2Vuc2XigJ0gaXMgYW55IGV4cHJlc3MgYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQsIGhvd2V2ZXIgZGVub21pbmF0ZWQsIG5vdCB0byBlbmZvcmNlIGEgcGF0ZW50IChzdWNoIGFzIGFuIGV4cHJlc3MgcGVybWlzc2lvbiB0byBwcmFjdGljZSBhIHBhdGVudCBvciBjb3ZlbmFudCBub3QgdG8gc3VlIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50KS4gVG8g4oCcZ3JhbnTigJ0gc3VjaCBhIHBhdGVudCBsaWNlbnNlIHRvIGEgcGFydHkgbWVhbnMgdG8gbWFrZSBzdWNoIGFuIGFncmVlbWVudCBvciBjb21taXRtZW50IG5vdCB0byBlbmZvcmNlIGEgcGF0ZW50IGFnYWluc3QgdGhlIHBhcnR5LgorCitJZiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCBrbm93aW5nbHkgcmVseWluZyBvbiBhIHBhdGVudCBsaWNlbnNlLCBhbmQgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGlzIG5vdCBhdmFpbGFibGUgZm9yIGFueW9uZSB0byBjb3B5LCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgdGhyb3VnaCBhIHB1YmxpY2x5IGF2YWlsYWJsZSBuZXR3b3JrIHNlcnZlciBvciBvdGhlciByZWFkaWx5IGFjY2Vzc2libGUgbWVhbnMsIHRoZW4geW91IG11c3QgZWl0aGVyICgxKSBjYXVzZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdG8gYmUgc28gYXZhaWxhYmxlLCBvciAoMikgYXJyYW5nZSB0byBkZXByaXZlIHlvdXJzZWxmIG9mIHRoZSBiZW5lZml0IG9mIHRoZSBwYXRlbnQgbGljZW5zZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHdvcmssIG9yICgzKSBhcnJhbmdlLCBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UsIHRvIGV4dGVuZCB0aGUgcGF0ZW50IGxpY2Vuc2UgdG8gZG93bnN0cmVhbSByZWNpcGllbnRzLiDigJxLbm93aW5nbHkgcmVseWluZ+KAnSBtZWFucyB5b3UgaGF2ZSBhY3R1YWwga25vd2xlZGdlIHRoYXQsIGJ1dCBmb3IgdGhlIHBhdGVudCBsaWNlbnNlLCB5b3VyIGNvbnZleWluZyB0aGUgY292ZXJlZCB3b3JrIGluIGEgY291bnRyeSwgb3IgeW91ciByZWNpcGllbnQncyB1c2Ugb2YgdGhlIGNvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIHdvdWxkIGluZnJpbmdlIG9uZSBvciBtb3JlIGlkZW50aWZpYWJsZSBwYXRlbnRzIGluIHRoYXQgY291bnRyeSB0aGF0IHlvdSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlIGFyZSB2YWxpZC4KKworSWYsIHB1cnN1YW50IHRvIG9yIGluIGNvbm5lY3Rpb24gd2l0aCBhIHNpbmdsZSB0cmFuc2FjdGlvbiBvciBhcnJhbmdlbWVudCwgeW91IGNvbnZleSwgb3IgcHJvcGFnYXRlIGJ5IHByb2N1cmluZyBjb252ZXlhbmNlIG9mLCBhIGNvdmVyZWQgd29yaywgYW5kIGdyYW50IGEgcGF0ZW50IGxpY2Vuc2UgdG8gc29tZSBvZiB0aGUgcGFydGllcyByZWNlaXZpbmcgdGhlIGNvdmVyZWQgd29yayBhdXRob3JpemluZyB0aGVtIHRvIHVzZSwgcHJvcGFnYXRlLCBtb2RpZnkgb3IgY29udmV5IGEgc3BlY2lmaWMgY29weSBvZiB0aGUgY292ZXJlZCB3b3JrLCB0aGVuIHRoZSBwYXRlbnQgbGljZW5zZSB5b3UgZ3JhbnQgaXMgYXV0b21hdGljYWxseSBleHRlbmRlZCB0byBhbGwgcmVjaXBpZW50cyBvZiB0aGUgY292ZXJlZCB3b3JrIGFuZCB3b3JrcyBiYXNlZCBvbiBpdC4KKworQSBwYXRlbnQgbGljZW5zZSBpcyDigJxkaXNjcmltaW5hdG9yeeKAnSBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbiB0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcyBjb25kaXRpb25lZCBvbiB0aGUgbm9uLWV4ZXJjaXNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSByaWdodHMgdGhhdCBhcmUgc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBZb3UgbWF5IG5vdCBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaWYgeW91IGFyZSBhIHBhcnR5IHRvIGFuIGFycmFuZ2VtZW50IHdpdGggYSB0aGlyZCBwYXJ0eSB0aGF0IGlzIGluIHRoZSBidXNpbmVzcyBvZiBkaXN0cmlidXRpbmcgc29mdHdhcmUsIHVuZGVyIHdoaWNoIHlvdSBtYWtlIHBheW1lbnQgdG8gdGhlIHRoaXJkIHBhcnR5IGJhc2VkIG9uIHRoZSBleHRlbnQgb2YgeW91ciBhY3Rpdml0eSBvZiBjb252ZXlpbmcgdGhlIHdvcmssIGFuZCB1bmRlciB3aGljaCB0aGUgdGhpcmQgcGFydHkgZ3JhbnRzLCB0byBhbnkgb2YgdGhlIHBhcnRpZXMgd2hvIHdvdWxkIHJlY2VpdmUgdGhlIGNvdmVyZWQgd29yayBmcm9tIHlvdSwgYSBkaXNjcmltaW5hdG9yeSBwYXRlbnQgbGljZW5zZSAoYSkgaW4gY29ubmVjdGlvbiB3aXRoIGNvcGllcyBvZiB0aGUgY292ZXJlZCB3b3JrIGNvbnZleWVkIGJ5IHlvdSAob3IgY29waWVzIG1hZGUgZnJvbSB0aG9zZSBjb3BpZXMpLCBvciAoYikgcHJpbWFyaWx5IGZvciBhbmQgaW4gY29ubmVjdGlvbiB3aXRoIHNwZWNpZmljIHByb2R1Y3RzIG9yIGNvbXBpbGF0aW9ucyB0aGF0IGNvbnRhaW4gdGhlIGNvdmVyZWQgd29yaywgdW5sZXNzIHlvdSBlbnRlcmVkIGludG8gdGhhdCBhcnJhbmdlbWVudCwgb3IgdGhhdCBwYXRlbnQgbGljZW5zZSB3YXMgZ3JhbnRlZCwgcHJpb3IgdG8gMjggTWFyY2ggMjAwNy4KKworTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgY29uc3RydWVkIGFzIGV4Y2x1ZGluZyBvciBsaW1pdGluZyBhbnkgaW1wbGllZCBsaWNlbnNlIG9yIG90aGVyIGRlZmVuc2VzIHRvIGluZnJpbmdlbWVudCB0aGF0IG1heSBvdGhlcndpc2UgYmUgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhcHBsaWNhYmxlIHBhdGVudCBsYXcuCisxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KKworSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvciBvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90IGV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuIElmIHlvdSBjYW5ub3QgY29udmV5IGEgY292ZXJlZCB3b3JrIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5IG5vdCBjb252ZXkgaXQgYXQgYWxsLiBGb3IgZXhhbXBsZSwgaWYgeW91IGFncmVlIHRvIHRlcm1zIHRoYXQgb2JsaWdhdGUgeW91IHRvIGNvbGxlY3QgYSByb3lhbHR5IGZvciBmdXJ0aGVyIGNvbnZleWluZyBmcm9tIHRob3NlIHRvIHdob20geW91IGNvbnZleSB0aGUgUHJvZ3JhbSwgdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggdGhvc2UgdGVybXMgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gY29udmV5aW5nIHRoZSBQcm9ncmFtLgorMTMuIFVzZSB3aXRoIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKK05vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgeW91IGhhdmUgcGVybWlzc2lvbiB0byBsaW5rIG9yIGNvbWJpbmUgYW55IGNvdmVyZWQgd29yayB3aXRoIGEgd29yayBsaWNlbnNlZCB1bmRlciB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnRvIGEgc2luZ2xlIGNvbWJpbmVkIHdvcmssIGFuZCB0byBjb252ZXkgdGhlIHJlc3VsdGluZyB3b3JrLiBUaGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgdG8gYXBwbHkgdG8gdGhlIHBhcnQgd2hpY2ggaXMgdGhlIGNvdmVyZWQgd29yaywgYnV0IHRoZSBzcGVjaWFsIHJlcXVpcmVtZW50cyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBzZWN0aW9uIDEzLCBjb25jZXJuaW5nIGludGVyYWN0aW9uIHRocm91Z2ggYSBuZXR3b3JrIHdpbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uIGFzIHN1Y2guCisxNC4gUmV2aXNlZCBWZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UuCisKK1RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBJZiB0aGUgUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug4oCcb3IgYW55IGxhdGVyIHZlcnNpb27igJ0gYXBwbGllcyB0byBpdCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IG51bWJlcmVkIHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKK0lmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MgcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdSB0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KKworTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgcGVybWlzc2lvbnMuIEhvd2V2ZXIsIG5vIGFkZGl0aW9uYWwgb2JsaWdhdGlvbnMgYXJlIGltcG9zZWQgb24gYW55IGF1dGhvciBvciBjb3B5cmlnaHQgaG9sZGVyIGFzIGEgcmVzdWx0IG9mIHlvdXIgY2hvb3NpbmcgdG8gZm9sbG93IGEgbGF0ZXIgdmVyc2lvbi4KKzE1LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgorCitUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0g4oCcQVMgSVPigJ0gV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKzE2LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4KKworSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTU9ESUZJRVMgQU5EL09SIENPTlZFWVMgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKzE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCisKK0lmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZCBhYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywgcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzIGFuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYSBjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuCisKK0VORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKK0lmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QgcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdCBmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uIEl0IGlzIHNhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5IHN0YXRlIHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlIOKAnGNvcHlyaWdodOKAnSBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gZG9lcyB0ZXJtaW5hbCBpbnRlcmFjdGlvbiwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzIHdoZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICA8cHJvZ3JhbT4gIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisgICAgVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUgcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIE9mIGNvdXJzZSwgeW91ciBwcm9ncmFtJ3MgY29tbWFuZHMgbWlnaHQgYmUgZGlmZmVyZW50OyBmb3IgYSBHVUkgaW50ZXJmYWNlLCB5b3Ugd291bGQgdXNlIGFuIOKAnGFib3V0IGJveOKAnS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwgaWYgYW55LCB0byBzaWduIGEg4oCcY29weXJpZ2h0IGRpc2NsYWltZXLigJ0gZm9yIHRoZSBwcm9ncmFtLCBpZiBuZWNlc3NhcnkuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMsIGFuZCBob3cgdG8gYXBwbHkgYW5kIGZvbGxvdyB0aGUgR05VIEdQTCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvIHByb3ByaWV0YXJ5IHByb2dyYW1zLiBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlIGxpYnJhcnkuIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuIEJ1dCBmaXJzdCwgcGxlYXNlIHJlYWQgPGh0dHA6Ly93d3cuZ251Lm9yZy9waGlsb3NvcGh5L3doeS1ub3QtbGdwbC5odG1sPi4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24gYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjOTY4YjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uCkBAIC0wLDAgKzEsMjcgQEAKKworaW5zZXJ0IEdQTCB2MyB0ZXh0IGhlcmUKKworR0NDIFJVTlRJTUUgTElCUkFSWSBFWENFUFRJT04KK1ZlcnNpb24gMy4xLCAzMSBNYXJjaCAyMDA5CisKK0dlbmVyYWwgaW5mb3JtYXRpb246CitodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ2NjLWV4Y2VwdGlvbi5odG1sCitDb3B5cmlnaHQgKEMpIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+CitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCitUaGlzIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uICgiRXhjZXB0aW9uIikgaXMgYW4gYWRkaXRpb25hbCBwZXJtaXNzaW9uIHVuZGVyIHNlY3Rpb24gNyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMyAoIkdQTHYzIikuIEl0IGFwcGxpZXMgdG8gYSBnaXZlbiBmaWxlICh0aGUgIlJ1bnRpbWUgTGlicmFyeSIpIHRoYXQgYmVhcnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBmaWxlIHN0YXRpbmcgdGhhdCB0aGUgZmlsZSBpcyBnb3Zlcm5lZCBieSBHUEx2MyBhbG9uZyB3aXRoIHRoaXMgRXhjZXB0aW9uLgorV2hlbiB5b3UgdXNlIEdDQyB0byBjb21waWxlIGEgcHJvZ3JhbSwgR0NDIG1heSBjb21iaW5lIHBvcnRpb25zIG9mIGNlcnRhaW4gR0NDIGhlYWRlciBmaWxlcyBhbmQgcnVudGltZSBsaWJyYXJpZXMgd2l0aCB0aGUgY29tcGlsZWQgcHJvZ3JhbS4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBFeGNlcHRpb24gaXMgdG8gYWxsb3cgY29tcGlsYXRpb24gb2Ygbm9uLUdQTCAoaW5jbHVkaW5nIHByb3ByaWV0YXJ5KSBwcm9ncmFtcyB0byB1c2UsIGluIHRoaXMgd2F5LCB0aGUgaGVhZGVyIGZpbGVzIGFuZCBydW50aW1lIGxpYnJhcmllcyBjb3ZlcmVkIGJ5IHRoaXMgRXhjZXB0aW9uLgorCiswLiBEZWZpbml0aW9ucy4KK0EgZmlsZSBpcyBhbiAiSW5kZXBlbmRlbnQgTW9kdWxlIiBpZiBpdCBlaXRoZXIgcmVxdWlyZXMgdGhlIFJ1bnRpbWUgTGlicmFyeSBmb3IgZXhlY3V0aW9uIGFmdGVyIGEgQ29tcGlsYXRpb24gUHJvY2Vzcywgb3IgbWFrZXMgdXNlIG9mIGFuIGludGVyZmFjZSBwcm92aWRlZCBieSB0aGUgUnVudGltZSBMaWJyYXJ5LCBidXQgaXMgbm90IG90aGVyd2lzZSBiYXNlZCBvbiB0aGUgUnVudGltZSBMaWJyYXJ5LgorIkdDQyIgbWVhbnMgYSB2ZXJzaW9uIG9mIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGdvdmVybmVkIGJ5IHZlcnNpb24gMyAob3IgYSBzcGVjaWZpZWQgbGF0ZXIgdmVyc2lvbikgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHdpdGggdGhlIG9wdGlvbiBvZiB1c2luZyBhbnkgc3Vic2VxdWVudCB2ZXJzaW9ucyBwdWJsaXNoZWQgYnkgdGhlIEZTRi4KKyJHUEwtY29tcGF0aWJsZSBTb2Z0d2FyZSIgaXMgc29mdHdhcmUgd2hvc2UgY29uZGl0aW9ucyBvZiBwcm9wYWdhdGlvbiwgbW9kaWZpY2F0aW9uIGFuZCB1c2Ugd291bGQgcGVybWl0IGNvbWJpbmF0aW9uIHdpdGggR0NDIGluIGFjY29yZCB3aXRoIHRoZSBsaWNlbnNlIG9mIEdDQy4KKyJUYXJnZXQgQ29kZSIgcmVmZXJzIHRvIG91dHB1dCBmcm9tIGFueSBjb21waWxlciBmb3IgYSByZWFsIG9yIHZpcnR1YWwgdGFyZ2V0IHByb2Nlc3NvciBhcmNoaXRlY3R1cmUsIGluIGV4ZWN1dGFibGUgZm9ybSBvciBzdWl0YWJsZSBmb3IgaW5wdXQgdG8gYW4gYXNzZW1ibGVyLCBsb2FkZXIsIGxpbmtlciBhbmQvb3IgZXhlY3V0aW9uIHBoYXNlLiBOb3R3aXRoc3RhbmRpbmcgdGhhdCwgVGFyZ2V0IENvZGUgZG9lcyBub3QgaW5jbHVkZSBkYXRhIGluIGFueSBmb3JtYXQgdGhhdCBpcyB1c2VkIGFzIGEgY29tcGlsZXIgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uLCBvciB1c2VkIGZvciBwcm9kdWNpbmcgYSBjb21waWxlciBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24uCitUaGUgIkNvbXBpbGF0aW9uIFByb2Nlc3MiIHRyYW5zZm9ybXMgY29kZSBlbnRpcmVseSByZXByZXNlbnRlZCBpbiBub24taW50ZXJtZWRpYXRlIGxhbmd1YWdlcyBkZXNpZ25lZCBmb3IgaHVtYW4td3JpdHRlbiBjb2RlLCBhbmQvb3IgaW4gSmF2YSBWaXJ0dWFsIE1hY2hpbmUgYnl0ZSBjb2RlLCBpbnRvIFRhcmdldCBDb2RlLiBUaHVzLCBmb3IgZXhhbXBsZSwgdXNlIG9mIHNvdXJjZSBjb2RlIGdlbmVyYXRvcnMgYW5kIHByZXByb2Nlc3NvcnMgbmVlZCBub3QgYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBDb21waWxhdGlvbiBQcm9jZXNzLCBzaW5jZSB0aGUgQ29tcGlsYXRpb24gUHJvY2VzcyBjYW4gYmUgdW5kZXJzdG9vZCBhcyBzdGFydGluZyB3aXRoIHRoZSBvdXRwdXQgb2YgdGhlIGdlbmVyYXRvcnMgb3IgcHJlcHJvY2Vzc29ycy4KK0EgQ29tcGlsYXRpb24gUHJvY2VzcyBpcyAiRWxpZ2libGUiIGlmIGl0IGlzIGRvbmUgdXNpbmcgR0NDLCBhbG9uZSBvciB3aXRoIG90aGVyIEdQTC1jb21wYXRpYmxlIHNvZnR3YXJlLCBvciBpZiBpdCBpcyBkb25lIHdpdGhvdXQgdXNpbmcgYW55IHdvcmsgYmFzZWQgb24gR0NDLiBGb3IgZXhhbXBsZSwgdXNpbmcgbm9uLUdQTC1jb21wYXRpYmxlIFNvZnR3YXJlIHRvIG9wdGltaXplIGFueSBHQ0MgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9ucyB3b3VsZCBub3QgcXVhbGlmeSBhcyBhbiBFbGlnaWJsZSBDb21waWxhdGlvbiBQcm9jZXNzLgorCisxLiBHcmFudCBvZiBBZGRpdGlvbmFsIFBlcm1pc3Npb24uCitZb3UgaGF2ZSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBhIHdvcmsgb2YgVGFyZ2V0IENvZGUgZm9ybWVkIGJ5IGNvbWJpbmluZyB0aGUgUnVudGltZSBMaWJyYXJ5IHdpdGggSW5kZXBlbmRlbnQgTW9kdWxlcywgZXZlbiBpZiBzdWNoIHByb3BhZ2F0aW9uIHdvdWxkIG90aGVyd2lzZSB2aW9sYXRlIHRoZSB0ZXJtcyBvZiBHUEx2MywgcHJvdmlkZWQgdGhhdCBhbGwgVGFyZ2V0IENvZGUgd2FzIGdlbmVyYXRlZCBieSBFbGlnaWJsZSBDb21waWxhdGlvbiBQcm9jZXNzZXMuIFlvdSBtYXkgdGhlbiBjb252ZXkgc3VjaCBhIGNvbWJpbmF0aW9uIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBjb25zaXN0ZW50IHdpdGggdGhlIGxpY2Vuc2luZyBvZiB0aGUgSW5kZXBlbmRlbnQgTW9kdWxlcy4KKworMi4gTm8gV2Vha2VuaW5nIG9mIEdDQyBDb3B5bGVmdC4KK1RoZSBhdmFpbGFiaWxpdHkgb2YgdGhpcyBFeGNlcHRpb24gZG9lcyBub3QgaW1wbHkgYW55IGdlbmVyYWwgcHJlc3VtcHRpb24gdGhhdCB0aGlyZC1wYXJ0eSBzb2Z0d2FyZSBpcyB1bmFmZmVjdGVkIGJ5IHRoZSBjb3B5bGVmdCByZXF1aXJlbWVudHMgb2YgdGhlIGxpY2Vuc2Ugb2YgR0NDLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0zLjAtd2l0aC1hdXRvY29uZi1leGNlcHRpb24gYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0zLjAtd2l0aC1hdXRvY29uZi1leGNlcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg2ZjBkNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTMuMC13aXRoLWF1dG9jb25mLWV4Y2VwdGlvbgpAQCAtMCwwICsxLDI4IEBACisKK2luc2VydCBHUEwgdjMgdGV4dCBoZXJlCisKK0FVVE9DT05GIENPTkZJR1VSRSBTQ1JJUFQgRVhDRVBUSU9OCisKK1ZlcnNpb24gMy4wLCAxOCBBdWd1c3QgMjAwOQorCitDb3B5cmlnaHQgJiMxNjk7IDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+CisKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworVGhpcyBFeGNlcHRpb24gaXMgYW4gYWRkaXRpb25hbCBwZXJtaXNzaW9uIHVuZGVyIHNlY3Rpb24gNyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMyAoIkdQTHYzIikuIEl0IGFwcGxpZXMgdG8gYSBnaXZlbiBmaWxlIHRoYXQgYmVhcnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBmaWxlIHN0YXRpbmcgdGhhdCB0aGUgZmlsZSBpcyBnb3Zlcm5lZCBieSBHUEx2MyBhbG9uZyB3aXRoIHRoaXMgRXhjZXB0aW9uLgorCitUaGUgcHVycG9zZSBvZiB0aGlzIEV4Y2VwdGlvbiBpcyB0byBhbGxvdyBkaXN0cmlidXRpb24gb2YgQXV0b2NvbmZgcyB0eXBpY2FsIG91dHB1dCB1bmRlciB0ZXJtcyBvZiB0aGUgcmVjaXBpZW50YHMgY2hvaWNlIChpbmNsdWRpbmcgcHJvcHJpZXRhcnkpLgorCiswLiBEZWZpbml0aW9ucy4KKyJDb3ZlcmVkIENvZGUiIGlzIHRoZSBzb3VyY2Ugb3Igb2JqZWN0IGNvZGUgb2YgYSB2ZXJzaW9uIG9mIEF1dG9jb25mIHRoYXQgaXMgYSBjb3ZlcmVkIHdvcmsgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisiTm9ybWFsbHkgQ29waWVkIENvZGUiIGZvciBhIHZlcnNpb24gb2YgQXV0b2NvbmYgbWVhbnMgYWxsIHBhcnRzIG9mIGl0cyBDb3ZlcmVkIENvZGUgd2hpY2ggdGhhdCB2ZXJzaW9uIGNhbiBjb3B5IGZyb20gaXRzIGNvZGUgKGkuZS4sIG5vdCBmcm9tIGl0cyBpbnB1dCBmaWxlKSBpbnRvIGl0cyBtaW5pbWFsbHkgdmVyYm9zZSwgbm9uLWRlYnVnZ2luZyBhbmQgbm9uLXRyYWNpbmcgb3V0cHV0LgorCisiSW5lbGlnaWJsZSBDb2RlIiBpcyBDb3ZlcmVkIENvZGUgdGhhdCBpcyBub3QgTm9ybWFsbHkgQ29waWVkIENvZGUuCisKKzEuIEdyYW50IG9mIEFkZGl0aW9uYWwgUGVybWlzc2lvbi4KK1lvdSBoYXZlIHBlcm1pc3Npb24gdG8gcHJvcGFnYXRlIG91dHB1dCBvZiBBdXRvY29uZiwgZXZlbiBpZiBzdWNoIHByb3BhZ2F0aW9uIHdvdWxkIG90aGVyd2lzZSB2aW9sYXRlIHRoZSB0ZXJtcyBvZiBHUEx2My4gSG93ZXZlciwgaWYgYnkgbW9kaWZ5aW5nIEF1dG9jb25mIHlvdSBjYXVzZSBhbnkgSW5lbGlnaWJsZSBDb2RlIG9mIHRoZSB2ZXJzaW9uIHlvdSByZWNlaXZlZCB0byBiZWNvbWUgTm9ybWFsbHkgQ29waWVkIENvZGUgb2YgeW91ciBtb2RpZmllZCB2ZXJzaW9uLCB0aGVuIHlvdSB2b2lkIHRoaXMgRXhjZXB0aW9uIGZvciB0aGUgcmVzdWx0aW5nIGNvdmVyZWQgd29yay4gSWYgeW91IGNvbnZleSB0aGF0IHJlc3VsdGluZyBjb3ZlcmVkIHdvcmssIHlvdSBtdXN0IHJlbW92ZSB0aGlzIEV4Y2VwdGlvbiBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHNlY29uZCBwYXJhZ3JhcGggb2YgU2VjdGlvbiA3IG9mIEdQTHYzLgorCisyLiBObyBXZWFrZW5pbmcgb2YgQXV0b2NvbmYgQ29weWxlZnQuCitUaGUgYXZhaWxhYmlsaXR5IG9mIHRoaXMgRXhjZXB0aW9uIGRvZXMgbm90IGltcGx5IGFueSBnZW5lcmFsIHByZXN1bXB0aW9uIHRoYXQgdGhpcmQtcGFydHkgc29mdHdhcmUgaXMgdW5hZmZlY3RlZCBieSB0aGUgY29weWxlZnQgcmVxdWlyZW1lbnRzIG9mIHRoZSBsaWNlbnNlIG9mIEF1dG9jb25mLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0hQTkQgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0hQTkQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc0YmJkYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSFBORApAQCAtMCwwICsxLDExIEBACisKK0hpc3RvcmljYWwgUGVybWlzc2lvbiBOb3RpY2UgYW5kIERpc2NsYWltZXIKKworPGNvcHlyaWdodCBub3RpY2U+CisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllc1ssXSBbYW5kXSB0aGF0IGJvdGggW3RoYXRdIFt0aGVdIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvblssIGFuZCB0aGF0IHRoZSBuYW1lIFtvZl0gPGNvcHlyaWdodCBob2xkZXI+IFtvciA8cmVsYXRlZCBlbnRpdGllcz5dIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uXS4gWzxjb3B5cmlnaHQgaG9sZGVyPiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5Ll0KKworWzxjb3B5cmlnaHQgaG9sZGVyPiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTWyxdWy5dIElOIE5PIEVWRU5UIFNIQUxMIDxjb3B5cmlnaHQgaG9sZGVyPiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXQorCistLS0KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9JQ1UgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0lDVQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjliNmZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9JQ1UKQEAgLTAsMCArMSwxMyBAQAorQ09QWVJJR0hUIEFORCBQRVJNSVNTSU9OIE5PVElDRQorCitDb3B5cmlnaHQgKGMpIDE5OTUtMjAxMiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMKKworQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZShzKSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgYW5kIHRoYXQgYm90aCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZShzKSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIEhPTERFUlMgSU5DTFVERUQgSU4gVEhJUyBOT1RJQ0UgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIE9SIEFOWSBTUEVDSUFMIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKK0V4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIGEgY29weXJpZ2h0IGhvbGRlciBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gb2YgdGhlIGNvcHlyaWdodCBob2xkZXIuCisKK0FsbCB0cmFkZW1hcmtzIGFuZCByZWdpc3RlcmVkIHRyYWRlbWFya3MgbWVudGlvbmVkIGhlcmVpbiBhcmUgdGhlIHByb3BlcnR5IG9mIHRoZWlyIHJlc3BlY3RpdmUgb3duZXJzLiAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSVBBIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9JUEEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ2NWIxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSVBBCkBAIC0wLDAgKzEsOTUgQEAKKworSVBBIEZvbnQgTGljZW5zZSBBZ3JlZW1lbnQgdjEuMCAKKyAKKworVGhlIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBMaWNlbnNlZCBQcm9ncmFtIChhcyBkZWZpbmVkIGluIEFydGljbGUgMSBiZWxvdykgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSBhZ3JlZW1lbnQgKCJBZ3JlZW1lbnQiKS4gIEFueSB1c2UsIHJlcHJvZHVjdGlvbiBvciBkaXN0cmlidXRpb24gb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0sIG9yIGFueSBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYnkgYSBSZWNpcGllbnQgKGFzIGRlZmluZWQgaW4gQXJ0aWNsZSAxIGJlbG93KSBjb25zdGl0dXRlcyB0aGUgUmVjaXBpZW50YHMgYWNjZXB0YW5jZSBvZiB0aGlzIEFncmVlbWVudC4KKworCitBcnRpY2xlIDEgKERlZmluaXRpb25zKQorCisxLiAgICAgICAgICJEaWdpdGFsIEZvbnQgUHJvZ3JhbSIgc2hhbGwgbWVhbiBhIGNvbXB1dGVyIHByb2dyYW0gY29udGFpbmluZywgb3IgdXNlZCB0byByZW5kZXIgb3IgZGlzcGxheSBmb250cy4KKworMi4gICAgICAgICAiTGljZW5zZWQgUHJvZ3JhbSIgc2hhbGwgbWVhbiBhIERpZ2l0YWwgRm9udCBQcm9ncmFtIGxpY2Vuc2VkIGJ5IHRoZSBMaWNlbnNvciB1bmRlciB0aGlzIEFncmVlbWVudC4KKworMy4gICAgICAgICAiRGVyaXZlZCBQcm9ncmFtIiBzaGFsbCBtZWFuIGEgRGlnaXRhbCBGb250IFByb2dyYW0gY3JlYXRlZCBhcyBhIHJlc3VsdCBvZiBhIG1vZGlmaWNhdGlvbiwgYWRkaXRpb24sIGRlbGV0aW9uLCByZXBsYWNlbWVudCBvciBhbnkgb3RoZXIgYWRhcHRhdGlvbiB0byBvciBvZiBhIHBhcnQgb3IgYWxsIG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtLCBhbmQgaW5jbHVkZXMgYSBjYXNlIHdoZXJlIGEgRGlnaXRhbCBGb250IFByb2dyYW0gbmV3bHkgY3JlYXRlZCBieSByZXRyaWV2aW5nIGZvbnQgaW5mb3JtYXRpb24gZnJvbSBhIHBhcnQgb3IgYWxsIG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtIG9yIEVtYmVkZGVkIEZvbnRzIGZyb20gYSBEaWdpdGFsIERvY3VtZW50IEZpbGUgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiBvZiB0aGUgcmV0cmlldmVkIGZvbnQgaW5mb3JtYXRpb24uIAorCis0LiAgICAgICAgICJEaWdpdGFsIENvbnRlbnQiIHNoYWxsIG1lYW4gcHJvZHVjdHMgcHJvdmlkZWQgdG8gZW5kIHVzZXJzIGluIHRoZSBmb3JtIG9mIGRpZ2l0YWwgZGF0YSwgaW5jbHVkaW5nIHZpZGVvIGNvbnRlbnQsIG1vdGlvbiBhbmQvb3Igc3RpbGwgcGljdHVyZXMsIFRWIHByb2dyYW1zIG9yIG90aGVyIGJyb2FkY2FzdGluZyBjb250ZW50IGFuZCBwcm9kdWN0cyBjb25zaXN0aW5nIG9mIGNoYXJhY3RlciB0ZXh0LCBwaWN0dXJlcywgcGhvdG9ncmFwaGljIGltYWdlcywgZ3JhcGhpYyBzeW1ib2xzIGFuZC9vciB0aGUgbGlrZS4KKworNS4gICAgICAgICAiRGlnaXRhbCBEb2N1bWVudCBGaWxlIiBzaGFsbCBtZWFuIGEgUERGIGZpbGUgb3Igb3RoZXIgRGlnaXRhbCBDb250ZW50IGNyZWF0ZWQgYnkgdmFyaW91cyBzb2Z0d2FyZSBwcm9ncmFtcyBpbiB3aGljaCBhIHBhcnQgb3IgYWxsIG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtIGJlY29tZXMgZW1iZWRkZWQgb3IgY29udGFpbmVkIGluIHRoZSBmaWxlIGZvciB0aGUgZGlzcGxheSBvZiB0aGUgZm9udCAoIkVtYmVkZGVkIEZvbnRzIikuICBFbWJlZGRlZCBGb250cyBhcmUgdXNlZCBvbmx5IGluIHRoZSBkaXNwbGF5IG9mIGNoYXJhY3RlcnMgaW4gdGhlIHBhcnRpY3VsYXIgRGlnaXRhbCBEb2N1bWVudCBGaWxlIHdpdGhpbiB3aGljaCB0aGV5IGFyZSBlbWJlZGRlZCwgYW5kIHNoYWxsIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSB0aG9zZSBpbiBhbnkgRGlnaXRhbCBGb250IFByb2dyYW0sIHdoaWNoIG1heSBiZSB1c2VkIGZvciBkaXNwbGF5IG9mIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGF0IHBhcnRpY3VsYXIgRGlnaXRhbCBEb2N1bWVudCBGaWxlLgorCis2LiAgICAgICAgICJDb21wdXRlciIgc2hhbGwgaW5jbHVkZSBhIHNlcnZlciBpbiB0aGlzIEFncmVlbWVudC4KKworNy4gICAgICAgICAiUmVwcm9kdWN0aW9uIGFuZCBPdGhlciBFeHBsb2l0YXRpb24iIHNoYWxsIG1lYW4gcmVwcm9kdWN0aW9uLCB0cmFuc2ZlciwgZGlzdHJpYnV0aW9uLCBsZWFzZSwgcHVibGljIHRyYW5zbWlzc2lvbiwgcHJlc2VudGF0aW9uLCBleGhpYml0aW9uLCBhZGFwdGF0aW9uIGFuZCBhbnkgb3RoZXIgZXhwbG9pdGF0aW9uLgorCis4LiAgICAgICAgICJSZWNpcGllbnQiIHNoYWxsIG1lYW4gYW55b25lIHdobyByZWNlaXZlcyB0aGUgTGljZW5zZWQgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIG9uZSB0aGF0IHJlY2VpdmVzIHRoZSBMaWNlbnNlZCBQcm9ncmFtIGZyb20gYSBSZWNpcGllbnQuCisKKyAKKworQXJ0aWNsZSAyIChHcmFudCBvZiBMaWNlbnNlKQorCitUaGUgTGljZW5zb3IgZ3JhbnRzIHRvIHRoZSBSZWNpcGllbnQgYSBsaWNlbnNlIHRvIHVzZSB0aGUgTGljZW5zZWQgUHJvZ3JhbSBpbiBhbnkgYW5kIGFsbCBjb3VudHJpZXMgaW4gYWNjb3JkYW5jZSB3aXRoIGVhY2ggb2YgdGhlIHByb3Zpc2lvbnMgc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LiBIb3dldmVyLCBhbnkgYW5kIGFsbCByaWdodHMgdW5kZXJseWluZyBpbiB0aGUgTGljZW5zZWQgUHJvZ3JhbSBzaGFsbCBiZSBoZWxkIGJ5IHRoZSBMaWNlbnNvci4gSW4gbm8gc2Vuc2UgaXMgdGhpcyBBZ3JlZW1lbnQgaW50ZW5kZWQgdG8gdHJhbnNmZXIgYW55IHJpZ2h0IHJlbGF0aW5nIHRvIHRoZSBMaWNlbnNlZCBQcm9ncmFtIGhlbGQgYnkgdGhlIExpY2Vuc29yIGV4Y2VwdCBhcyBzcGVjaWZpY2FsbHkgc2V0IGZvcnRoIGhlcmVpbiBvciBhbnkgcmlnaHQgcmVsYXRpbmcgdG8gYW55IHRyYWRlbWFyaywgdHJhZGUgbmFtZSwgb3Igc2VydmljZSBtYXJrIHRvIHRoZSBSZWNpcGllbnQuCisKKyAKKworMS4gICAgICAgICBUaGUgUmVjaXBpZW50IG1heSBpbnN0YWxsIHRoZSBMaWNlbnNlZCBQcm9ncmFtIG9uIGFueSBudW1iZXIgb2YgQ29tcHV0ZXJzIGFuZCB1c2UgdGhlIHNhbWUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBwcm92aXNpb25zIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudC4KKworMi4gICAgICAgICBUaGUgUmVjaXBpZW50IG1heSB1c2UgdGhlIExpY2Vuc2VkIFByb2dyYW0sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24gaW4gcHJpbnRlZCBtYXRlcmlhbHMgb3IgaW4gRGlnaXRhbCBDb250ZW50IGFzIGFuIGV4cHJlc3Npb24gb2YgY2hhcmFjdGVyIHRleHRzIG9yIHRoZSBsaWtlLgorCiszLiAgICAgICAgIFRoZSBSZWNpcGllbnQgbWF5IGNvbmR1Y3QgUmVwcm9kdWN0aW9uIGFuZCBPdGhlciBFeHBsb2l0YXRpb24gb2YgdGhlIHByaW50ZWQgbWF0ZXJpYWxzIGFuZCBEaWdpdGFsIENvbnRlbnQgY3JlYXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHByZWNlZGluZyBQYXJhZ3JhcGgsIGZvciBjb21tZXJjaWFsIG9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzIGFuZCBpbiBhbnkgZm9ybSBvZiBtZWRpYSBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGJyb2FkY2FzdGluZywgY29tbXVuaWNhdGlvbiBhbmQgdmFyaW91cyByZWNvcmRpbmcgbWVkaWEuCisKKzQuICAgICAgICAgSWYgYW55IFJlY2lwaWVudCBleHRyYWN0cyBFbWJlZGRlZCBGb250cyBmcm9tIGEgRGlnaXRhbCBEb2N1bWVudCBGaWxlIHRvIGNyZWF0ZSBhIERlcml2ZWQgUHJvZ3JhbSwgc3VjaCBEZXJpdmVkIFByb2dyYW0gc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBhZ3JlZW1lbnQuICAKKworNS4gICAgICAgICBJZiBhbnkgUmVjaXBpZW50IHBlcmZvcm1zIFJlcHJvZHVjdGlvbiBvciBPdGhlciBFeHBsb2l0YXRpb24gb2YgYSBEaWdpdGFsIERvY3VtZW50IEZpbGUgaW4gd2hpY2ggRW1iZWRkZWQgRm9udHMgb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0gYXJlIHVzZWQgb25seSBmb3IgcmVuZGVyaW5nIHRoZSBEaWdpdGFsIENvbnRlbnQgd2l0aGluIHN1Y2ggRGlnaXRhbCBEb2N1bWVudCBGaWxlIHRoZW4gc3VjaCBSZWNpcGllbnQgc2hhbGwgaGF2ZSBubyBmdXJ0aGVyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGluIHJlbGF0aW9uIHRvIHN1Y2ggYWN0aW9ucy4KKworNi4gICAgICAgICBUaGUgUmVjaXBpZW50IG1heSByZXByb2R1Y2UgdGhlIExpY2Vuc2VkIFByb2dyYW0gYXMgaXMgd2l0aG91dCBtb2RpZmljYXRpb24gYW5kIHRyYW5zZmVyIHN1Y2ggY29waWVzLCBwdWJsaWNseSB0cmFuc21pdCBvciBvdGhlcndpc2UgcmVkaXN0cmlidXRlIHRoZSBMaWNlbnNlZCBQcm9ncmFtIHRvIGEgdGhpcmQgcGFydHkgZm9yIGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgKCJSZWRpc3RyaWJ1dGUiKSwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBwcm92aXNpb25zIHNldCBmb3J0aCBpbiBBcnRpY2xlIDMgUGFyYWdyYXBoIDIuCisKKzcuICAgICAgICAgVGhlIFJlY2lwaWVudCBtYXkgY3JlYXRlLCB1c2UsIHJlcHJvZHVjZSBhbmQvb3IgUmVkaXN0cmlidXRlIGEgRGVyaXZlZCBQcm9ncmFtIHVuZGVyIHRoZSB0ZXJtcyBzdGF0ZWQgYWJvdmUgZm9yIHRoZSBMaWNlbnNlZCBQcm9ncmFtOiBwcm92aWRlZCwgdGhhdCB0aGUgUmVjaXBpZW50IHNoYWxsIGZvbGxvdyB0aGUgcHJvdmlzaW9ucyBzZXQgZm9ydGggaW4gQXJ0aWNsZSAzIFBhcmFncmFwaCAxIHdoZW4gUmVkaXN0cmlidXRpbmcgdGhlIERlcml2ZWQgUHJvZ3JhbS4gCisKKworQXJ0aWNsZSAzIChSZXN0cmljdGlvbikKKworVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiB0aGUgcHJlY2VkaW5nIEFydGljbGUgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworCisxLiAgICAgICAgIElmIGEgRGVyaXZlZCBQcm9ncmFtIGlzIFJlZGlzdHJpYnV0ZWQgcHVyc3VhbnQgdG8gUGFyYWdyYXBoIDQgYW5kIDcgb2YgdGhlIHByZWNlZGluZyBBcnRpY2xlLCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgbXVzdCBiZSBtZXQgOgorCisoMSkgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBtdXN0IGJlIGFsc28gUmVkaXN0cmlidXRlZCB0b2dldGhlciB3aXRoIHRoZSBEZXJpdmVkIFByb2dyYW0sIG9yIGJlIG1hZGUgYXZhaWxhYmxlIG9ubGluZSBvciBieSBtZWFucyBvZiBtYWlsaW5nIG1lY2hhbmlzbXMgaW4gZXhjaGFuZ2UgZm9yIGEgY29zdCB3aGljaCBkb2VzIG5vdCBleGNlZWQgdGhlIHRvdGFsIGNvc3RzIG9mIHBvc3RhZ2UsIHN0b3JhZ2UgbWVkaXVtIGFuZCBoYW5kbGluZyBmZWVzOgorCisoYSkgICAgYSBjb3B5IG9mIHRoZSBEZXJpdmVkIFByb2dyYW07IGFuZAorCisoYikgICAgYW55IGFkZGl0aW9uYWwgZmlsZSBjcmVhdGVkIGJ5IHRoZSBmb250IGRldmVsb3BpbmcgcHJvZ3JhbSBpbiB0aGUgY291cnNlIG9mIGNyZWF0aW5nIHRoZSBEZXJpdmVkIFByb2dyYW0gdGhhdCBjYW4gYmUgdXNlZCBmb3IgZnVydGhlciBtb2RpZmljYXRpb24gb2YgdGhlIERlcml2ZWQgUHJvZ3JhbSwgaWYgYW55LgorCisoMikgICAgICAgICAgICAgICAgSXQgaXMgcmVxdWlyZWQgdG8gYWxzbyBSZWRpc3RyaWJ1dGUgbWVhbnMgdG8gZW5hYmxlIHJlY2lwaWVudHMgb2YgdGhlIERlcml2ZWQgUHJvZ3JhbSB0byByZXBsYWNlIHRoZSBEZXJpdmVkIFByb2dyYW0gd2l0aCB0aGUgTGljZW5zZWQgUHJvZ3JhbSBmaXJzdCByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UgKHRoZSAiT3JpZ2luYWwgUHJvZ3JhbSIpLiAgU3VjaCBtZWFucyBtYXkgYmUgdG8gcHJvdmlkZSBhIGRpZmZlcmVuY2UgZmlsZSBmcm9tIHRoZSBPcmlnaW5hbCBQcm9ncmFtLCBvciBpbnN0cnVjdGlvbnMgc2V0dGluZyBvdXQgYSBtZXRob2QgdG8gcmVwbGFjZSB0aGUgRGVyaXZlZCBQcm9ncmFtIHdpdGggdGhlIE9yaWdpbmFsIFByb2dyYW0uCisKKygzKSAgICAgICAgICAgICAgICBUaGUgUmVjaXBpZW50IG11c3QgbGljZW5zZSB0aGUgRGVyaXZlZCBQcm9ncmFtIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudC4KKworKDQpICAgICAgICAgICAgICAgIE5vIG9uZSBtYXkgdXNlIG9yIGluY2x1ZGUgdGhlIG5hbWUgb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0gYXMgYSBwcm9ncmFtIG5hbWUsIGZvbnQgbmFtZSBvciBmaWxlIG5hbWUgb2YgdGhlIERlcml2ZWQgUHJvZ3JhbS4KKworKDUpICAgICAgICAgICAgICAgIEFueSBtYXRlcmlhbCB0byBiZSBtYWRlIGF2YWlsYWJsZSBvbmxpbmUgb3IgYnkgbWVhbnMgb2YgbWFpbGluZyBhIG1lZGl1bSB0byBzYXRpc2Z5IHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBwYXJhZ3JhcGggbWF5IGJlIHByb3ZpZGVkLCB2ZXJiYXRpbSwgYnkgYW55IHBhcnR5IHdpc2hpbmcgdG8gZG8gc28uCisKKzIuICAgICAgICAgSWYgdGhlIFJlY2lwaWVudCBSZWRpc3RyaWJ1dGVzIHRoZSBMaWNlbnNlZCBQcm9ncmFtIHB1cnN1YW50IHRvIFBhcmFncmFwaCA2IG9mIHRoZSBwcmVjZWRpbmcgQXJ0aWNsZSwgdGhlIFJlY2lwaWVudCBzaGFsbCBtZWV0IGFsbCBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKygxKSAgICAgICAgICAgICAgICBUaGUgUmVjaXBpZW50IG1heSBub3QgY2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtLgorCisoMikgICAgICAgICAgICAgICAgVGhlIFJlY2lwaWVudCBtYXkgbm90IGFsdGVyIG9yIG90aGVyd2lzZSBtb2RpZnkgdGhlIExpY2Vuc2VkIFByb2dyYW0uCisKKygzKSAgICAgICAgICAgICAgICBUaGUgUmVjaXBpZW50IG11c3QgYXR0YWNoIGEgY29weSBvZiB0aGlzIEFncmVlbWVudCB0byB0aGUgTGljZW5zZWQgUHJvZ3JhbS4KKworMy4gICAgICAgICBUSElTIExJQ0VOU0VEIFBST0dSQU0gSVMgUFJPVklERUQgQlkgVEhFIExJQ0VOU09SICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5UWSBBUyBUTyBUSEUgTElDRU5TRUQgUFJPR1JBTSBPUiBBTlkgREVSSVZFRCBQUk9HUkFNLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgV0FSUkFOVElFUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgTElDRU5TT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhURU5ERUQsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURUQgR09PRFMgT1IgU0VSVklDRTsgREFNQUdFUyBBUklTSU5HIEZST00gU1lTVEVNIEZBSUxVUkU7IExPU1MgT1IgQ09SUlVQVElPTiBPRiBFWElTVElORyBEQVRBIE9SIFBST0dSQU07IExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIElOU1RBTExBVElPTiwgVVNFLCBUSEUgUkVQUk9EVUNUSU9OIE9SIE9USEVSIEVYUExPSVRBVElPTiBPRiBUSEUgTElDRU5TRUQgUFJPR1JBTSBPUiBBTlkgREVSSVZFRCBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNC4gICAgICAgICBUaGUgTGljZW5zb3IgaXMgdW5kZXIgbm8gb2JsaWdhdGlvbiB0byByZXNwb25kIHRvIGFueSB0ZWNobmljYWwgcXVlc3Rpb25zIG9yIGlucXVpcmllcywgb3IgcHJvdmlkZSBhbnkgb3RoZXIgdXNlciBzdXBwb3J0IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgaW5zdGFsbGF0aW9uLCB1c2Ugb3IgdGhlIFJlcHJvZHVjdGlvbiBhbmQgT3RoZXIgRXhwbG9pdGF0aW9uIG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtIG9yIERlcml2ZWQgUHJvZ3JhbXMgdGhlcmVvZi4KKworCitBcnRpY2xlIDQgKFRlcm1pbmF0aW9uIG9mIEFncmVlbWVudCkKKworMS4gICAgICAgICBUaGUgdGVybSBvZiB0aGlzIEFncmVlbWVudCBzaGFsbCBiZWdpbiBmcm9tIHRoZSB0aW1lIG9mIHJlY2VpcHQgb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0gYnkgdGhlIFJlY2lwaWVudCBhbmQgc2hhbGwgY29udGludWUgYXMgbG9uZyBhcyB0aGUgUmVjaXBpZW50IHJldGFpbnMgYW55IHN1Y2ggTGljZW5zZWQgUHJvZ3JhbSBpbiBhbnkgd2F5LgorCisyLiAgICAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgcHJvdmlzaW9uIHNldCBmb3J0aCBpbiB0aGUgcHJlY2VkaW5nIFBhcmFncmFwaCwgaW4gdGhlIGV2ZW50IG9mIHRoZSBicmVhY2ggb2YgYW55IG9mIHRoZSBwcm92aXNpb25zIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudCBieSB0aGUgUmVjaXBpZW50LCB0aGlzIEFncmVlbWVudCBzaGFsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB3aXRob3V0IGFueSBub3RpY2UuIEluIHRoZSBjYXNlIG9mIHN1Y2ggdGVybWluYXRpb24sIHRoZSBSZWNpcGllbnQgbWF5IG5vdCB1c2Ugb3IgY29uZHVjdCBSZXByb2R1Y3Rpb24gYW5kIE90aGVyIEV4cGxvaXRhdGlvbiBvZiB0aGUgTGljZW5zZWQgUHJvZ3JhbSBvciBhIERlcml2ZWQgUHJvZ3JhbTogcHJvdmlkZWQgdGhhdCBzdWNoIHRlcm1pbmF0aW9uIHNoYWxsIG5vdCBhZmZlY3QgYW55IHJpZ2h0cyBvZiBhbnkgb3RoZXIgUmVjaXBpZW50IHJlY2VpdmluZyB0aGUgTGljZW5zZWQgUHJvZ3JhbSBvciB0aGUgRGVyaXZlZCBQcm9ncmFtIGZyb20gc3VjaCBSZWNpcGllbnQgd2hvIGJyZWFjaGVkIHRoaXMgQWdyZWVtZW50LgorCisKK0FydGljbGUgNSAoR292ZXJuaW5nIExhdykKKworMS4gICAgICAgICBJUEEgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZS4gIEluIHN1Y2ggYW4gZXZlbnQsIHRoZSBSZWNpcGllbnQgbWF5IHNlbGVjdCBlaXRoZXIgdGhpcyBBZ3JlZW1lbnQgb3IgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IGluIHVzaW5nLCBjb25kdWN0aW5nIHRoZSBSZXByb2R1Y3Rpb24gYW5kIE90aGVyIEV4cGxvaXRhdGlvbiBvZiwgb3IgUmVkaXN0cmlidXRpbmcgdGhlIExpY2Vuc2VkIFByb2dyYW0gb3IgYSBEZXJpdmVkIFByb2dyYW0uIE90aGVyIG1hdHRlcnMgbm90IHNwZWNpZmllZCBhYm92ZSBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBDb3B5cmlnaHQgTGF3IG9mIEphcGFuIGFuZCBvdGhlciByZWxhdGVkIGxhd3MgYW5kIHJlZ3VsYXRpb25zIG9mIEphcGFuLgorCisyLiAgICAgICAgIFRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGNvbnN0cnVlZCB1bmRlciB0aGUgbGF3cyBvZiBKYXBhbi4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9JUEwtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9JUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMTM2YzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0lQTC0xLjAKQEAgLTAsMCArMSwyMTMgQEAKKworSUJNIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisKK1RIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBJQk0KK1BVQkxJQyBMSUNFTlNFICgiQUdSRUVNRU5UIikuIEFOWSBVU0UsIFJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04KK09GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVGBTIEFDQ0VQVEFOQ0UgT0YgVEhJUyBBR1JFRU1FTlQuCisKKzEuIERFRklOSVRJT05TCisiQ29udHJpYnV0aW9uIiBtZWFuczoKKworaW4gdGhlIGNhc2Ugb2YgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiAoIklCTSIpLCB0aGUgT3JpZ2luYWwgUHJvZ3JhbSwgYW5kCitpbiB0aGUgY2FzZSBvZiBlYWNoIENvbnRyaWJ1dG9yLAorY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kCithZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07Cit3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQKK2FyZSBkaXN0cmlidXRlZCBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uCitgb3JpZ2luYXRlc2AgZnJvbSBhIENvbnRyaWJ1dG9yIGlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieQorc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbiBzdWNoIENvbnRyaWJ1dG9yYHMKK2JlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gd2hpY2g6CisoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24gd2l0aAordGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90CitkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBQcm9ncmFtLgorCisiQ29udHJpYnV0b3IiIG1lYW5zIElCTSBhbmQgYW55IG90aGVyIGVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLgorCisiTGljZW5zZWQgUGF0ZW50cyAiIG1lYW4gcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IGEKK0NvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cworQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4KKworIk9yaWdpbmFsIFByb2dyYW0iIG1lYW5zIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBzb2Z0d2FyZQorYWNjb21wYW55aW5nIHRoaXMgQWdyZWVtZW50IGFzIHJlbGVhc2VkIGJ5IElCTSwgaW5jbHVkaW5nIHNvdXJjZQorY29kZSwgb2JqZWN0IGNvZGUgYW5kIGRvY3VtZW50YXRpb24sIGlmIGFueS4KKworIlByb2dyYW0iIG1lYW5zIHRoZSBPcmlnaW5hbCBQcm9ncmFtIGFuZCBDb250cmlidXRpb25zLgorCisiUmVjaXBpZW50IiBtZWFucyBhbnlvbmUgd2hvIHJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMKK0FncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuCisKKzIuIEdSQU5UIE9GIFJJR0hUUworU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5CitncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0CitsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LAorcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKK0NvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZAorb2JqZWN0IGNvZGUgZm9ybS4KK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieQorZ3JhbnRzIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIHBhdGVudAorbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwKK2ltcG9ydCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwKK2lmIGFueSwgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2UKK3NoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbQoraWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQgYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoCithZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uIHRvIGJlIGNvdmVyZWQgYnkKK3RoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIGFueQorb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyCitzZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuCisKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZQorbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUKK3Byb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvciB0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZQorcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4KK0VhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50IGZvciBjbGFpbXMKK2Jyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZQorcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMKK3NvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzCituZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMKK3JlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtLCBpdCBpcworUmVjaXBpZW50YHMgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcworc3VmZmljaWVudCBjb3B5cmlnaHQgcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlCitjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQuCiszLiBSRVFVSVJFTUVOVFMKK0EgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlCit0aGUgUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsCitwcm92aWRlZCB0aGF0OgorCitpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6CitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMKK2FuZCBjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvcgorY29uZGl0aW9ucyBvZiB0aXRsZSBhbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvcgorY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOworZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eQorZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZAorY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoIGFzIGxvc3QgcHJvZml0czsKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZQorb2ZmZXJlZCBieSB0aGF0IENvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQKKworc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2gKK0NvbnRyaWJ1dG9yLCBhbmQgaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUKK21hbm5lciBvbiBvciB0aHJvdWdoIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLgorV2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UgY29kZSBmb3JtOgorCitpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQKK2EgY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZQorUHJvZ3JhbS4KK0VhY2ggQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgaW4gYSBjb25zcGljdW91cyBsb2NhdGlvbiBpbiB0aGUgUHJvZ3JhbToKKworQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk5IEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworSW4gYWRkaXRpb24sIGVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlIG9yaWdpbmF0b3IKK29mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cworc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uCisKKzQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OCitDb21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkgYWNjZXB0IGNlcnRhaW4KK3Jlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZQorbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwKK3VzZSBvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhCitjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90CitjcmVhdGUgcG90ZW50aWFsIGxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEKK0NvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLAorc3VjaCBDb250cmlidXRvciAoIkNvbW1lcmNpYWwgQ29udHJpYnV0b3IiKSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZAorYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlciBDb250cmlidXRvciAoIkluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIikKK2FnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQgY29zdHMgKGNvbGxlY3RpdmVseSAiTG9zc2VzIikgYXJpc2luZworZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlciBsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZAorcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8gdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlCithY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4gY29ubmVjdGlvbiB3aXRoCitpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLgorVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LgorSW4gb3JkZXIgdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkKK25vdGlmeSB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKQorYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kIGFueSByZWxhdGVkIHNldHRsZW1lbnQKK25lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZSBpbiBhbnkKK3N1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLgorCitGb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAorcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYSBDb21tZXJjaWFsCitDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlCitjbGFpbXMgYW5kIHdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcmBzCityZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcyBzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgord291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlIG90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvCit0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhIGNvdXJ0IHJlcXVpcmVzIGFueQorb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy4KKworNS4gTk8gV0FSUkFOVFkKK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUworUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZCitPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5CityZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cworZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCit0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLCBjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZQorbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQKK3VuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCis2LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UCitOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QsCitJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKK1RIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTCitHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIEdFTkVSQUwKK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YKK3RoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dCBmdXJ0aGVyCithY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KKworSWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhIENvbnRyaWJ1dG9yIHdpdGgKK3Jlc3BlY3QgdG8gYSBwYXRlbnQgYXBwbGljYWJsZSB0byBzb2Z0d2FyZSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0KK29yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpLCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCBieQordGhhdCBDb250cmlidXRvciB0byBzdWNoIFJlY2lwaWVudCB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbAordGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gSW4gYWRkaXRpb24sIGlmCitSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZworYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtCitpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aCBvdGhlciBzb2Z0d2FyZSBvcgoraGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudGBzIHBhdGVudChzKSwgdGhlbiBzdWNoIFJlY2lwaWVudGBzCityaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2gKK2xpdGlnYXRpb24gaXMgZmlsZWQuCisKK0FsbCBSZWNpcGllbnRgcyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGlmIGl0CitmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb2YgdGhpcworQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUgcGVyaW9kIG9mCit0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudGBzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZQorYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuCitIb3dldmVyLCBSZWNpcGllbnRgcyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55CitsaWNlbnNlcyBncmFudGVkIGJ5IFJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZQorYW5kIHN1cnZpdmUuCisKK0lCTSBtYXkgcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mIHRoaXMgQWdyZWVtZW50Citmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYQorZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykKK21heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50Cit1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mIHRoZQorQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlCitQcm9ncmFtIChpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gTm8gb25lCitvdGhlciB0aGFuIElCTSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gRXhjZXB0IGFzCitleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcworbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yCit1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvcgorb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB1bmRlcgordGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLgorCitUaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgTmV3IFlvcmsgYW5kCit0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYS4gTm8KK3BhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoCitwYXJ0eSB3YWl2ZXMgaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0lTQyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSVNDCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YWYxMDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0lTQwpAQCAtMCwwICsxLDEwIEBACisKK0lTQyBMaWNlbnNlOgorCitDb3B5cmlnaHQgJiMxNjk7IDIwMDQtMjAxMCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorQ29weXJpZ2h0ICYjMTY5OyAxOTk1LTIwMDMgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bQorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MR1BMLTIuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTEdQTC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzMWQ0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTEdQTC0yLjAKQEAgLTAsMCArMSwzNDIgQEAKK0dOVSBMSUJSQVJZIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKworCisKK1ZlcnNpb24gMiwgSnVuZSAxOTkxCisKKworCitDb3B5cmlnaHQgKEMpIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKzUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBCisKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworCitvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCisKK1tUaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IEdQTC4gIEl0IGlzCisKKyBudW1iZXJlZCAyIGJlY2F1c2UgaXQgZ29lcyB3aXRoIHZlcnNpb24gMiBvZiB0aGUgb3JkaW5hcnkgR1BMLl0KKworUHJlYW1ibGUKKworCisKK1RoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KKworCisKK1RoaXMgbGljZW5zZSwgdGhlIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBzb21lIHNwZWNpYWxseSBkZXNpZ25hdGVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSwgYW5kIHRvIGFueSBvdGhlciBsaWJyYXJpZXMgd2hvc2UgYXV0aG9ycyBkZWNpZGUgdG8gdXNlIGl0LiBZb3UgY2FuIHVzZSBpdCBmb3IgeW91ciBsaWJyYXJpZXMsIHRvby4KKworCisKK1doZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QgcHJpY2UuIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworCisKK1RvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQgYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworCisKK0ZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIHdoZXRoZXIgZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHdlIGdhdmUgeW91LiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuIElmIHlvdSBsaW5rIGEgcHJvZ3JhbSB3aXRoIHRoZSBsaWJyYXJ5LCB5b3UgbXVzdCBwcm92aWRlIGNvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cyBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtIHdpdGggdGhlIGxpYnJhcnksIGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFuZCByZWNvbXBpbGluZyBpdC4gQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCisKKworT3VyIG1ldGhvZCBvZiBwcm90ZWN0aW5nIHlvdXIgcmlnaHRzIGhhcyB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIGxpYnJhcnksIGFuZCAoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIGxpYnJhcnkuCisKKworCitBbHNvLCBmb3IgZWFjaCBkaXN0cmlidXRvcidzIHByb3RlY3Rpb24sIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluIHRoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlIGxpYnJhcnkuIElmIHRoZSBsaWJyYXJ5IGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZSB3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsIHZlcnNpb24sIHNvIHRoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsIGF1dGhvcnMnIHJlcHV0YXRpb25zLgorCisKKworRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUgcGF0ZW50cy4gV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgY29tcGFuaWVzIGRpc3RyaWJ1dGluZyBmcmVlIHNvZnR3YXJlIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIHRodXMgaW4gZWZmZWN0IHRyYW5zZm9ybWluZyB0aGUgcHJvZ3JhbSBpbnRvIHByb3ByaWV0YXJ5IHNvZnR3YXJlLiBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueSBwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisKKworTW9zdCBHTlUgc29mdHdhcmUsIGluY2x1ZGluZyBzb21lIGxpYnJhcmllcywgaXMgY292ZXJlZCBieSB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIHdhcyBkZXNpZ25lZCBmb3IgdXRpbGl0eSBwcm9ncmFtcy4gVGhpcyBsaWNlbnNlLCB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBjZXJ0YWluIGRlc2lnbmF0ZWQgbGlicmFyaWVzLiBUaGlzIGxpY2Vuc2UgaXMgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIG9yZGluYXJ5IG9uZTsgYmUgc3VyZSB0byByZWFkIGl0IGluIGZ1bGwsIGFuZCBkb24ndCBhc3N1bWUgdGhhdCBhbnl0aGluZyBpbiBpdCBpcyB0aGUgc2FtZSBhcyBpbiB0aGUgb3JkaW5hcnkgbGljZW5zZS4KKworCisKK1RoZSByZWFzb24gd2UgaGF2ZSBhIHNlcGFyYXRlIHB1YmxpYyBsaWNlbnNlIGZvciBzb21lIGxpYnJhcmllcyBpcyB0aGF0IHRoZXkgYmx1ciB0aGUgZGlzdGluY3Rpb24gd2UgdXN1YWxseSBtYWtlIGJldHdlZW4gbW9kaWZ5aW5nIG9yIGFkZGluZyB0byBhIHByb2dyYW0gYW5kIHNpbXBseSB1c2luZyBpdC4gTGlua2luZyBhIHByb2dyYW0gd2l0aCBhIGxpYnJhcnksIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGxpYnJhcnksIGlzIGluIHNvbWUgc2Vuc2Ugc2ltcGx5IHVzaW5nIHRoZSBsaWJyYXJ5LCBhbmQgaXMgYW5hbG9nb3VzIHRvIHJ1bm5pbmcgYSB1dGlsaXR5IHByb2dyYW0gb3IgYXBwbGljYXRpb24gcHJvZ3JhbS4gSG93ZXZlciwgaW4gYSB0ZXh0dWFsIGFuZCBsZWdhbCBzZW5zZSwgdGhlIGxpbmtlZCBleGVjdXRhYmxlIGlzIGEgY29tYmluZWQgd29yaywgYSBkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LCBhbmQgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdHJlYXRzIGl0IGFzIHN1Y2guCisKKworCitCZWNhdXNlIG9mIHRoaXMgYmx1cnJlZCBkaXN0aW5jdGlvbiwgdXNpbmcgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIGxpYnJhcmllcyBkaWQgbm90IGVmZmVjdGl2ZWx5IHByb21vdGUgc29mdHdhcmUgc2hhcmluZywgYmVjYXVzZSBtb3N0IGRldmVsb3BlcnMgZGlkIG5vdCB1c2UgdGhlIGxpYnJhcmllcy4gV2UgY29uY2x1ZGVkIHRoYXQgd2Vha2VyIGNvbmRpdGlvbnMgbWlnaHQgcHJvbW90ZSBzaGFyaW5nIGJldHRlci4KKworCisKK0hvd2V2ZXIsIHVucmVzdHJpY3RlZCBsaW5raW5nIG9mIG5vbi1mcmVlIHByb2dyYW1zIHdvdWxkIGRlcHJpdmUgdGhlIHVzZXJzIG9mIHRob3NlIHByb2dyYW1zIG9mIGFsbCBiZW5lZml0IGZyb20gdGhlIGZyZWUgc3RhdHVzIG9mIHRoZSBsaWJyYXJpZXMgdGhlbXNlbHZlcy4gVGhpcyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcGVybWl0IGRldmVsb3BlcnMgb2Ygbm9uLWZyZWUgcHJvZ3JhbXMgdG8gdXNlIGZyZWUgbGlicmFyaWVzLCB3aGlsZSBwcmVzZXJ2aW5nIHlvdXIgZnJlZWRvbSBhcyBhIHVzZXIgb2Ygc3VjaCBwcm9ncmFtcyB0byBjaGFuZ2UgdGhlIGZyZWUgbGlicmFyaWVzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGVtLiAoV2UgaGF2ZSBub3Qgc2VlbiBob3cgdG8gYWNoaWV2ZSB0aGlzIGFzIHJlZ2FyZHMgY2hhbmdlcyBpbiBoZWFkZXIgZmlsZXMsIGJ1dCB3ZSBoYXZlIGFjaGlldmVkIGl0IGFzIHJlZ2FyZHMgY2hhbmdlcyBpbiB0aGUgYWN0dWFsIGZ1bmN0aW9ucyBvZiB0aGUgTGlicmFyeS4pIFRoZSBob3BlIGlzIHRoYXQgdGhpcyB3aWxsIGxlYWQgdG8gZmFzdGVyIGRldmVsb3BtZW50IG9mIGZyZWUgbGlicmFyaWVzLgorCisKKworVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGZvbGxvdy4gUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuIFRoZSBmb3JtZXIgY29udGFpbnMgY29kZSBkZXJpdmVkIGZyb20gdGhlIGxpYnJhcnksIHdoaWxlIHRoZSBsYXR0ZXIgb25seSB3b3JrcyB0b2dldGhlciB3aXRoIHRoZSBsaWJyYXJ5LgorCisKKworTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlIGZvciBhIGxpYnJhcnkgdG8gYmUgY292ZXJlZCBieSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSByYXRoZXIgdGhhbiBieSB0aGlzIHNwZWNpYWwgb25lLgorCisKKworVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKworCiswLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGFwcGxpZXMgdG8gYW55IHNvZnR3YXJlIGxpYnJhcnkgd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9yIG90aGVyIGF1dGhvcml6ZWQgcGFydHkgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4gRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKKworCitBICJsaWJyYXJ5IiBtZWFucyBhIGNvbGxlY3Rpb24gb2Ygc29mdHdhcmUgZnVuY3Rpb25zIGFuZC9vciBkYXRhIHByZXBhcmVkIHNvIGFzIHRvIGJlIGNvbnZlbmllbnRseSBsaW5rZWQgd2l0aCBhcHBsaWNhdGlvbiBwcm9ncmFtcyAod2hpY2ggdXNlIHNvbWUgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBkYXRhKSB0byBmb3JtIGV4ZWN1dGFibGVzLgorCisKKworVGhlICJMaWJyYXJ5IiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBzb2Z0d2FyZSBsaWJyYXJ5IG9yIHdvcmsgd2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuIEEgIndvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkiIG1lYW5zIGVpdGhlciB0aGUgTGlicmFyeSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgTGlicmFyeSBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgc3RyYWlnaHRmb3J3YXJkbHkgaW50byBhbm90aGVyIGxhbmd1YWdlLiAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCisKKworCisiU291cmNlIGNvZGUiIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCisKKworCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuIFRoZSBhY3Qgb2YgcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbSBzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3Igd3JpdGluZyBpdCkuIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzIGFuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgorCisKKworMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzIGNvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIExpYnJhcnkuCisKKworCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworCisKKzIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24gb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBjb3B5IGFuZCBkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworCisKK2EpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KKworYikgWW91IG11c3QgY2F1c2UgdGhlIGZpbGVzIG1vZGlmaWVkIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKK2MpIFlvdSBtdXN0IGNhdXNlIHRoZSB3aG9sZSBvZiB0aGUgd29yayB0byBiZSBsaWNlbnNlZCBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworZCkgSWYgYSBmYWNpbGl0eSBpbiB0aGUgbW9kaWZpZWQgTGlicmFyeSByZWZlcnMgdG8gYSBmdW5jdGlvbiBvciBhIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIGZhY2lsaXR5LCBvdGhlciB0aGFuIGFzIGFuIGFyZ3VtZW50IHBhc3NlZCB3aGVuIHRoZSBmYWNpbGl0eSBpcyBpbnZva2VkLCB0aGVuIHlvdSBtdXN0IG1ha2UgYSBnb29kIGZhaXRoIGVmZm9ydCB0byBlbnN1cmUgdGhhdCwgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yIHRhYmxlLCB0aGUgZmFjaWxpdHkgc3RpbGwgb3BlcmF0ZXMsIGFuZCBwZXJmb3JtcyB3aGF0ZXZlciBwYXJ0IG9mIGl0cyBwdXJwb3NlIHJlbWFpbnMgbWVhbmluZ2Z1bC4KKworKEZvciBleGFtcGxlLCBhIGZ1bmN0aW9uIGluIGEgbGlicmFyeSB0byBjb21wdXRlIHNxdWFyZSByb290cyBoYXMgYSBwdXJwb3NlIHRoYXQgaXMgZW50aXJlbHkgd2VsbC1kZWZpbmVkIGluZGVwZW5kZW50IG9mIHRoZSBhcHBsaWNhdGlvbi4gVGhlcmVmb3JlLCBTdWJzZWN0aW9uIDJkIHJlcXVpcmVzIHRoYXQgYW55IGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlIHJvb3QgZnVuY3Rpb24gbXVzdCBzdGlsbCBjb21wdXRlIHNxdWFyZSByb290cy4pCisKKworCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gSWYgaWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgTGlicmFyeSwgYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluIHRoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2Ugc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiBCdXQgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZSBlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKKworCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QgeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvIGV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvciBjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgorCisKKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeSB3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworCisKKzMuIFlvdSBtYXkgb3B0IHRvIGFwcGx5IHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UgdG8gYSBnaXZlbiBjb3B5IG9mIHRoZSBMaWJyYXJ5LiBUbyBkbyB0aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvIHRoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgaW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuIChJZiBhIG5ld2VyIHZlcnNpb24gdGhhbiB2ZXJzaW9uIDIgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGhhcyBhcHBlYXJlZCwgdGhlbiB5b3UgY2FuIHNwZWNpZnkgdGhhdCB2ZXJzaW9uIGluc3RlYWQgaWYgeW91IHdpc2guKSBEbyBub3QgbWFrZSBhbnkgb3RoZXIgY2hhbmdlIGluIHRoZXNlIG5vdGljZXMuCisKKworCitPbmNlIHRoaXMgY2hhbmdlIGlzIG1hZGUgaW4gYSBnaXZlbiBjb3B5LCBpdCBpcyBpcnJldmVyc2libGUgZm9yIHRoYXQgY29weSwgc28gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gYWxsIHN1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCisKKworCitUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3Ugd2lzaCB0byBjb3B5IHBhcnQgb2YgdGhlIGNvZGUgb2YgdGhlIExpYnJhcnkgaW50byBhIHByb2dyYW0gdGhhdCBpcyBub3QgYSBsaWJyYXJ5LgorCisKKworNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IgZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2Ugc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCB0byBkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKworCis1LiBBIHByb2dyYW0gdGhhdCBjb250YWlucyBubyBkZXJpdmF0aXZlIG9mIGFueSBwb3J0aW9uIG9mIHRoZSBMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yIGxpbmtlZCB3aXRoIGl0LCBpcyBjYWxsZWQgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiLiBTdWNoIGEgd29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZCB0aGVyZWZvcmUgZmFsbHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisKKworSG93ZXZlciwgbGlua2luZyBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSBjcmVhdGVzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnkgKGJlY2F1c2UgaXQgY29udGFpbnMgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkpLCByYXRoZXIgdGhhbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4gU2VjdGlvbiA2IHN0YXRlcyB0ZXJtcyBmb3IgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggZXhlY3V0YWJsZXMuCisKKworCitXaGVuIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB1c2VzIG1hdGVyaWFsIGZyb20gYSBoZWFkZXIgZmlsZSB0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnksIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgbWF5IGJlIGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5IGV2ZW4gdGhvdWdoIHRoZSBzb3VyY2UgY29kZSBpcyBub3QuIFdoZXRoZXIgdGhpcyBpcyB0cnVlIGlzIGVzcGVjaWFsbHkgc2lnbmlmaWNhbnQgaWYgdGhlIHdvcmsgY2FuIGJlIGxpbmtlZCB3aXRob3V0IHRoZSBMaWJyYXJ5LCBvciBpZiB0aGUgd29yayBpcyBpdHNlbGYgYSBsaWJyYXJ5LiBUaGUgdGhyZXNob2xkIGZvciB0aGlzIHRvIGJlIHRydWUgaXMgbm90IHByZWNpc2VseSBkZWZpbmVkIGJ5IGxhdy4KKworCisKK0lmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhIHN0cnVjdHVyZSBsYXlvdXRzIGFuZCBhY2Nlc3NvcnMsIGFuZCBzbWFsbCBtYWNyb3MgYW5kIHNtYWxsIGlubGluZSBmdW5jdGlvbnMgKHRlbiBsaW5lcyBvciBsZXNzIGluIGxlbmd0aCksIHRoZW4gdGhlIHVzZSBvZiB0aGUgb2JqZWN0IGZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUgd29yay4gKEV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhpcyBvYmplY3QgY29kZSBwbHVzIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQorCisKKworT3RoZXJ3aXNlLCBpZiB0aGUgd29yayBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnksIHlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDYuIEFueSBleGVjdXRhYmxlcyBjb250YWluaW5nIHRoYXQgd29yayBhbHNvIGZhbGwgdW5kZXIgU2VjdGlvbiA2LCB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBsaW5rZWQgZGlyZWN0bHkgd2l0aCB0aGUgTGlicmFyeSBpdHNlbGYuCisKKworCis2LiBBcyBhbiBleGNlcHRpb24gdG8gdGhlIFNlY3Rpb25zIGFib3ZlLCB5b3UgbWF5IGFsc28gY29tcGlsZSBvciBsaW5rIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5IHRvIHByb2R1Y2UgYSB3b3JrIGNvbnRhaW5pbmcgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnksIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yayB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB0aGUgdGVybXMgcGVybWl0IG1vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBmb3IgdGhlIGN1c3RvbWVyJ3Mgb3duIHVzZSBhbmQgcmV2ZXJzZSBlbmdpbmVlcmluZyBmb3IgZGVidWdnaW5nIHN1Y2ggbW9kaWZpY2F0aW9ucy4KKworCisKK1lvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZSBMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBzdXBwbHkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gSWYgdGhlIHdvcmsgZHVyaW5nIGV4ZWN1dGlvbiBkaXNwbGF5cyBjb3B5cmlnaHQgbm90aWNlcywgeW91IG11c3QgaW5jbHVkZSB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZSBkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiBBbHNvLCB5b3UgbXVzdCBkbyBvbmUgb2YgdGhlc2UgdGhpbmdzOgorCisKKworYSkgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSBmb3IgdGhlIExpYnJhcnkgaW5jbHVkaW5nIHdoYXRldmVyIGNoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUpOyBhbmQsIGlmIHRoZSB3b3JrIGlzIGFuIGV4ZWN1dGFibGUgbGlua2VkIHdpdGggdGhlIExpYnJhcnksIHdpdGggdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiwgYXMgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBtb2RpZnkgdGhlIExpYnJhcnkgYW5kIHRoZW4gcmVsaW5rIHRvIHByb2R1Y2UgYSBtb2RpZmllZCBleGVjdXRhYmxlIGNvbnRhaW5pbmcgdGhlIG1vZGlmaWVkIExpYnJhcnkuIChJdCBpcyB1bmRlcnN0b29kIHRoYXQgdGhlIHVzZXIgd2hvIGNoYW5nZXMgdGhlIGNvbnRlbnRzIG9mIGRlZmluaXRpb25zIGZpbGVzIGluIHRoZSBMaWJyYXJ5IHdpbGwgbm90IG5lY2Vzc2FyaWx5IGJlIGFibGUgdG8gcmVjb21waWxlIHRoZSBhcHBsaWNhdGlvbiB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKKworYikgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzIHNwZWNpZmllZCBpbiBTdWJzZWN0aW9uIDZhLCBhYm92ZSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB0aGUgY29zdCBvZiBwZXJmb3JtaW5nIHRoaXMgZGlzdHJpYnV0aW9uLgorCitjKSBJZiBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgYWJvdmUgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgorCitkKSBWZXJpZnkgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlc2UgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCisKK0ZvciBhbiBleGVjdXRhYmxlLCB0aGUgcmVxdWlyZWQgZm9ybSBvZiB0aGUgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvciByZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKKworCitJdCBtYXkgaGFwcGVuIHRoYXQgdGhpcyByZXF1aXJlbWVudCBjb250cmFkaWN0cyB0aGUgbGljZW5zZSByZXN0cmljdGlvbnMgb2Ygb3RoZXIgcHJvcHJpZXRhcnkgbGlicmFyaWVzIHRoYXQgZG8gbm90IG5vcm1hbGx5IGFjY29tcGFueSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gU3VjaCBhIGNvbnRyYWRpY3Rpb24gbWVhbnMgeW91IGNhbm5vdCB1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGlicmFyeSB0b2dldGhlciBpbiBhbiBleGVjdXRhYmxlIHRoYXQgeW91IGRpc3RyaWJ1dGUuCisKKworCis3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkgc2lkZS1ieS1zaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBzdWNoIGEgY29tYmluZWQgbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5IGFuZCBvZiB0aGUgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIGlzIG90aGVyd2lzZSBwZXJtaXR0ZWQsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyB0aGVzZSB0d28gdGhpbmdzOgorCisKKworYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIHVuY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzLiBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBTZWN0aW9ucyBhYm92ZS4KKworYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QgdGhhdCBwYXJ0IG9mIGl0IGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgorCis4LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisKKworOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90IHNpZ25lZCBpdC4gSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gVGhlc2UgYWN0aW9ucyBhcmUgcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiBUaGVyZWZvcmUsIGJ5IG1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZCBhbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nIHRoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisKKworMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSwgbGluayB3aXRoIG9yIG1vZGlmeSB0aGUgTGlicmFyeSBzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLiBZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0byB0aGlzIExpY2Vuc2UuCisKKworCisxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLCBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yIG90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QgZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gSWYgeW91IGNhbm5vdCBkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50IGxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkgYnkgYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuIHRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeS4KKworCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvIGFwcGx5LCBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlciBjaXJjdW1zdGFuY2VzLgorCisKKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueSBwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueSBzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlIGludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtIHdoaWNoIGlzIGltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gTWFueSBwZW9wbGUgaGF2ZSBtYWRlIGdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQgc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZyB0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QgaW1wb3NlIHRoYXQgY2hvaWNlLgorCisKKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvIGJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisKKworMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluIGNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIExpYnJhcnkgdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nIGNvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisKKworMTMuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCisKKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIElmIHRoZSBMaWJyYXJ5IHNwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55IGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhIGxpY2Vuc2UgdmVyc2lvbiBudW1iZXIsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKworCisxNC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIExpYnJhcnkgaW50byBvdGhlciBmcmVlIHByb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwgd3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisKKworTk8gV0FSUkFOVFkKKworCisKKzE1LiBCRUNBVVNFIFRIRSBMSUJSQVJZIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIExJQlJBUlksIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIExJQlJBUlkgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIExJQlJBUlkgSVMgV0lUSCBZT1UuIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisKKworMTYuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SIFJFRElTVFJJQlVURSBUSEUgTElCUkFSWSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBMSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisKKworRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKworCitIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgTGlicmFyaWVzCisKKworCitJZiB5b3UgZGV2ZWxvcCBhIG5ldyBsaWJyYXJ5LCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0IHBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB3ZSByZWNvbW1lbmQgbWFraW5nIGl0IGZyZWUgc29mdHdhcmUgdGhhdCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UuIFlvdSBjYW4gZG8gc28gYnkgcGVybWl0dGluZyByZWRpc3RyaWJ1dGlvbiB1bmRlciB0aGVzZSB0ZXJtcyAob3IsIGFsdGVybmF0aXZlbHksIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkuCisKKworCitUbyBhcHBseSB0aGVzZSB0ZXJtcywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgbGlicmFyeS4gSXQgaXMgc2FmZXN0IHRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkgY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKworCitvbmUgbGluZSB0byBnaXZlIHRoZSBsaWJyYXJ5J3MgbmFtZSBhbmQgYW4gaWRlYSBvZiB3aGF0IGl0IGRvZXMuCisKK0NvcHlyaWdodCAoQykgeWVhciAgbmFtZSBvZiBhdXRob3IKKworCisKK1RoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKworbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisKK3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworCisKK1RoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorCitMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisKK0xpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAorCitCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCisKKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIgc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgbGlicmFyeSwgaWYgbmVjZXNzYXJ5LiBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKworCitZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluCisKK3RoZSBsaWJyYXJ5IGBGcm9iJyAoYSBsaWJyYXJ5IGZvciB0d2Vha2luZyBrbm9icykgd3JpdHRlbgorCitieSBKYW1lcyBSYW5kb20gSGFja2VyLgorCisKKworc2lnbmF0dXJlIG9mIFR5IENvb24sIDEgQXByaWwgMTk5MAorCitUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGF0J3MgYWxsIHRoZXJlIGlzIHRvIGl0IQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xHUEwtMi4xIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MR1BMLTIuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGU3MzVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MR1BMLTIuMQpAQCAtMCwwICsxLDE3NiBAQAorCitHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKworVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTkKKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKK29mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCitbVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgTGVzc2VyIEdQTC4gIEl0IGFsc28gY291bnRzCisgYXMgdGhlIHN1Y2Nlc3NvciBvZiB0aGUgR05VIExpYnJhcnkgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgaGVuY2UKKyB0aGUgdmVyc2lvbiBudW1iZXIgMi4xLl0KK1ByZWFtYmxlCisKK1RoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KKworVGhpcyBsaWNlbnNlLCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZSBzcGVjaWFsbHkgZGVzaWduYXRlZCBzb2Z0d2FyZSBwYWNrYWdlcy0tdHlwaWNhbGx5IGxpYnJhcmllcy0tb2YgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgb3RoZXIgYXV0aG9ycyB3aG8gZGVjaWRlIHRvIHVzZSBpdC4gWW91IGNhbiB1c2UgaXQgdG9vLCBidXQgd2Ugc3VnZ2VzdCB5b3UgZmlyc3QgdGhpbmsgY2FyZWZ1bGx5IGFib3V0IHdoZXRoZXIgdGhpcyBsaWNlbnNlIG9yIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIHRoZSBiZXR0ZXIgc3RyYXRlZ3kgdG8gdXNlIGluIGFueSBwYXJ0aWN1bGFyIGNhc2UsIGJhc2VkIG9uIHRoZSBleHBsYW5hdGlvbnMgYmVsb3cuCisKK1doZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tIG9mIHVzZSwgbm90IHByaWNlLiBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCk7IHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3Ugd2FudCBpdDsgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgYW5kIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBhcmUgaW5mb3JtZWQgdGhhdCB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZCBkaXN0cmlidXRvcnMgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZXNlIHJpZ2h0cy4gVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnkgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZSB5b3UuIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4gSWYgeW91IGxpbmsgb3RoZXIgY29kZSB3aXRoIHRoZSBsaWJyYXJ5LCB5b3UgbXVzdCBwcm92aWRlIGNvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cywgc28gdGhhdCB0aGV5IGNhbiByZWxpbmsgdGhlbSB3aXRoIHRoZSBsaWJyYXJ5IGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFuZCByZWNvbXBpbGluZyBpdC4gQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCitXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggYSB0d28tc3RlcCBtZXRob2Q6ICgxKSB3ZSBjb3B5cmlnaHQgdGhlIGxpYnJhcnksIGFuZCAoMikgd2Ugb2ZmZXIgeW91IHRoaXMgbGljZW5zZSwgd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBsaWJyYXJ5LgorCitUbyBwcm90ZWN0IGVhY2ggZGlzdHJpYnV0b3IsIHdlIHdhbnQgdG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBmcmVlIGxpYnJhcnkuIEFsc28sIGlmIHRoZSBsaWJyYXJ5IGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB0aGUgcmVjaXBpZW50cyBzaG91bGQga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwgdmVyc2lvbiwgc28gdGhhdCB0aGUgb3JpZ2luYWwgYXV0aG9yYHMgcmVwdXRhdGlvbiB3aWxsIG5vdCBiZSBhZmZlY3RlZCBieSBwcm9ibGVtcyB0aGF0IG1pZ2h0IGJlIGludHJvZHVjZWQgYnkgb3RoZXJzLgorCitGaW5hbGx5LCBzb2Z0d2FyZSBwYXRlbnRzIHBvc2UgYSBjb25zdGFudCB0aHJlYXQgdG8gdGhlIGV4aXN0ZW5jZSBvZiBhbnkgZnJlZSBwcm9ncmFtLiBXZSB3aXNoIHRvIG1ha2Ugc3VyZSB0aGF0IGEgY29tcGFueSBjYW5ub3QgZWZmZWN0aXZlbHkgcmVzdHJpY3QgdGhlIHVzZXJzIG9mIGEgZnJlZSBwcm9ncmFtIGJ5IG9idGFpbmluZyBhIHJlc3RyaWN0aXZlIGxpY2Vuc2UgZnJvbSBhIHBhdGVudCBob2xkZXIuIFRoZXJlZm9yZSwgd2UgaW5zaXN0IHRoYXQgYW55IHBhdGVudCBsaWNlbnNlIG9idGFpbmVkIGZvciBhIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgbXVzdCBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGZ1bGwgZnJlZWRvbSBvZiB1c2Ugc3BlY2lmaWVkIGluIHRoaXMgbGljZW5zZS4KKworTW9zdCBHTlUgc29mdHdhcmUsIGluY2x1ZGluZyBzb21lIGxpYnJhcmllcywgaXMgY292ZXJlZCBieSB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIFRoaXMgbGljZW5zZSwgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBjZXJ0YWluIGRlc2lnbmF0ZWQgbGlicmFyaWVzLCBhbmQgaXMgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIFdlIHVzZSB0aGlzIGxpY2Vuc2UgZm9yIGNlcnRhaW4gbGlicmFyaWVzIGluIG9yZGVyIHRvIHBlcm1pdCBsaW5raW5nIHRob3NlIGxpYnJhcmllcyBpbnRvIG5vbi1mcmVlIHByb2dyYW1zLgorCitXaGVuIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCBhIGxpYnJhcnksIHdoZXRoZXIgc3RhdGljYWxseSBvciB1c2luZyBhIHNoYXJlZCBsaWJyYXJ5LCB0aGUgY29tYmluYXRpb24gb2YgdGhlIHR3byBpcyBsZWdhbGx5IHNwZWFraW5nIGEgY29tYmluZWQgd29yaywgYSBkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LiBUaGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB0aGVyZWZvcmUgcGVybWl0cyBzdWNoIGxpbmtpbmcgb25seSBpZiB0aGUgZW50aXJlIGNvbWJpbmF0aW9uIGZpdHMgaXRzIGNyaXRlcmlhIG9mIGZyZWVkb20uIFRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBwZXJtaXRzIG1vcmUgbGF4IGNyaXRlcmlhIGZvciBsaW5raW5nIG90aGVyIGNvZGUgd2l0aCB0aGUgbGlicmFyeS4KKworV2UgY2FsbCB0aGlzIGxpY2Vuc2UgdGhlICJMZXNzZXIiIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYmVjYXVzZSBpdCBkb2VzIExlc3MgdG8gcHJvdGVjdCB0aGUgdXNlcmBzIGZyZWVkb20gdGhhbiB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gSXQgYWxzbyBwcm92aWRlcyBvdGhlciBmcmVlIHNvZnR3YXJlIGRldmVsb3BlcnMgTGVzcyBvZiBhbiBhZHZhbnRhZ2Ugb3ZlciBjb21wZXRpbmcgbm9uLWZyZWUgcHJvZ3JhbXMuIFRoZXNlIGRpc2FkdmFudGFnZXMgYXJlIHRoZSByZWFzb24gd2UgdXNlIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtYW55IGxpYnJhcmllcy4gSG93ZXZlciwgdGhlIExlc3NlciBsaWNlbnNlIHByb3ZpZGVzIGFkdmFudGFnZXMgaW4gY2VydGFpbiBzcGVjaWFsIGNpcmN1bXN0YW5jZXMuCisKK0ZvciBleGFtcGxlLCBvbiByYXJlIG9jY2FzaW9ucywgdGhlcmUgbWF5IGJlIGEgc3BlY2lhbCBuZWVkIHRvIGVuY291cmFnZSB0aGUgd2lkZXN0IHBvc3NpYmxlIHVzZSBvZiBhIGNlcnRhaW4gbGlicmFyeSwgc28gdGhhdCBpdCBiZWNvbWVzIGEgZGUtZmFjdG8gc3RhbmRhcmQuIFRvIGFjaGlldmUgdGhpcywgbm9uLWZyZWUgcHJvZ3JhbXMgbXVzdCBiZSBhbGxvd2VkIHRvIHVzZSB0aGUgbGlicmFyeS4gQSBtb3JlIGZyZXF1ZW50IGNhc2UgaXMgdGhhdCBhIGZyZWUgbGlicmFyeSBkb2VzIHRoZSBzYW1lIGpvYiBhcyB3aWRlbHkgdXNlZCBub24tZnJlZSBsaWJyYXJpZXMuIEluIHRoaXMgY2FzZSwgdGhlcmUgaXMgbGl0dGxlIHRvIGdhaW4gYnkgbGltaXRpbmcgdGhlIGZyZWUgbGlicmFyeSB0byBmcmVlIHNvZnR3YXJlIG9ubHksIHNvIHdlIHVzZSB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKK0luIG90aGVyIGNhc2VzLCBwZXJtaXNzaW9uIHRvIHVzZSBhIHBhcnRpY3VsYXIgbGlicmFyeSBpbiBub24tZnJlZSBwcm9ncmFtcyBlbmFibGVzIGEgZ3JlYXRlciBudW1iZXIgb2YgcGVvcGxlIHRvIHVzZSBhIGxhcmdlIGJvZHkgb2YgZnJlZSBzb2Z0d2FyZS4gRm9yIGV4YW1wbGUsIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBHTlUgQyBMaWJyYXJ5IGluIG5vbi1mcmVlIHByb2dyYW1zIGVuYWJsZXMgbWFueSBtb3JlIHBlb3BsZSB0byB1c2UgdGhlIHdob2xlIEdOVSBvcGVyYXRpbmcgc3lzdGVtLCBhcyB3ZWxsIGFzIGl0cyB2YXJpYW50LCB0aGUgR05VL0xpbnV4IG9wZXJhdGluZyBzeXN0ZW0uCisKK0FsdGhvdWdoIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBMZXNzIHByb3RlY3RpdmUgb2YgdGhlIHVzZXJzYCBmcmVlZG9tLCBpdCBkb2VzIGVuc3VyZSB0aGF0IHRoZSB1c2VyIG9mIGEgcHJvZ3JhbSB0aGF0IGlzIGxpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5IGhhcyB0aGUgZnJlZWRvbSBhbmQgdGhlIHdoZXJld2l0aGFsIHRvIHJ1biB0aGF0IHByb2dyYW0gdXNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5LgorCitUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gZm9sbG93LiBQYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSAid29yayBiYXNlZCBvbiB0aGUgbGlicmFyeSIgYW5kIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBsaWJyYXJ5Ii4gVGhlIGZvcm1lciBjb250YWlucyBjb2RlIGRlcml2ZWQgZnJvbSB0aGUgbGlicmFyeSwgd2hlcmVhcyB0aGUgbGF0dGVyIG11c3QgYmUgY29tYmluZWQgd2l0aCB0aGUgbGlicmFyeSBpbiBvcmRlciB0byBydW4uCisKK1RFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCiswLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGFwcGxpZXMgdG8gYW55IHNvZnR3YXJlIGxpYnJhcnkgb3Igb3RoZXIgcHJvZ3JhbSB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgb3Igb3RoZXIgYXV0aG9yaXplZCBwYXJ0eSBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChhbHNvIGNhbGxlZCAidGhpcyBMaWNlbnNlIikuIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBICJsaWJyYXJ5IiBtZWFucyBhIGNvbGxlY3Rpb24gb2Ygc29mdHdhcmUgZnVuY3Rpb25zIGFuZC9vciBkYXRhIHByZXBhcmVkIHNvIGFzIHRvIGJlIGNvbnZlbmllbnRseSBsaW5rZWQgd2l0aCBhcHBsaWNhdGlvbiBwcm9ncmFtcyAod2hpY2ggdXNlIHNvbWUgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBkYXRhKSB0byBmb3JtIGV4ZWN1dGFibGVzLgorCitUaGUgIkxpYnJhcnkiLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHNvZnR3YXJlIGxpYnJhcnkgb3Igd29yayB3aGljaCBoYXMgYmVlbiBkaXN0cmlidXRlZCB1bmRlciB0aGVzZSB0ZXJtcy4gQSAid29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluIHRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikKKworIlNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuIEZvciBhIGxpYnJhcnksIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuIFRoZSBhY3Qgb2YgcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbSBzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3Igd3JpdGluZyBpdCkuIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzIGFuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgorCisxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBMaWJyYXJ5YHMgY29tcGxldGUgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBkaXN0cmlidXRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgTGlicmFyeS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKzIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24gb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBjb3B5IGFuZCBkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworYSkgVGhlIG1vZGlmaWVkIHdvcmsgbXVzdCBpdHNlbGYgYmUgYSBzb2Z0d2FyZSBsaWJyYXJ5LgorYikgWW91IG11c3QgY2F1c2UgdGhlIGZpbGVzIG1vZGlmaWVkIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCitjKSBZb3UgbXVzdCBjYXVzZSB0aGUgd2hvbGUgb2YgdGhlIHdvcmsgdG8gYmUgbGljZW5zZWQgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCitkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEgdGFibGUgb2YgZGF0YSB0byBiZSBzdXBwbGllZCBieSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5IGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LCBpbiB0aGUgZXZlbnQgYW4gYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IHN1Y2ggZnVuY3Rpb24gb3IgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgorKEZvciBleGFtcGxlLCBhIGZ1bmN0aW9uIGluIGEgbGlicmFyeSB0byBjb21wdXRlIHNxdWFyZSByb290cyBoYXMgYSBwdXJwb3NlIHRoYXQgaXMgZW50aXJlbHkgd2VsbC1kZWZpbmVkIGluZGVwZW5kZW50IG9mIHRoZSBhcHBsaWNhdGlvbi4gVGhlcmVmb3JlLCBTdWJzZWN0aW9uIDJkIHJlcXVpcmVzIHRoYXQgYW55IGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlIHJvb3QgZnVuY3Rpb24gbXVzdCBzdGlsbCBjb21wdXRlIHNxdWFyZSByb290cy4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiBJZiBpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LCBhbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4gdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZSBzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuIEJ1dCB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlIGVudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0IHlvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0byBleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IgY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeSB3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuIFRvIGRvIHRoaXMsIHlvdSBtdXN0IGFsdGVyIGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSwgc28gdGhhdCB0aGV5IHJlZmVyIHRvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBpbnN0ZWFkIG9mIHRvIHRoaXMgTGljZW5zZS4gKElmIGEgbmV3ZXIgdmVyc2lvbiB0aGFuIHZlcnNpb24gMiBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeSB0aGF0IHZlcnNpb24gaW5zdGVhZCBpZiB5b3Ugd2lzaC4pIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4gdGhlc2Ugbm90aWNlcy4KKworT25jZSB0aGlzIGNoYW5nZSBpcyBtYWRlIGluIGEgZ2l2ZW4gY29weSwgaXQgaXMgaXJyZXZlcnNpYmxlIGZvciB0aGF0IGNvcHksIHNvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIGFsbCBzdWJzZXF1ZW50IGNvcGllcyBhbmQgZGVyaXZhdGl2ZSB3b3JrcyBtYWRlIGZyb20gdGhhdCBjb3B5LgorCitUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3Ugd2lzaCB0byBjb3B5IHBhcnQgb2YgdGhlIGNvZGUgb2YgdGhlIExpYnJhcnkgaW50byBhIHByb2dyYW0gdGhhdCBpcyBub3QgYSBsaWJyYXJ5LgorCis0LiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGEgcG9ydGlvbiBvciBkZXJpdmF0aXZlIG9mIGl0LCB1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCitJZiBkaXN0cmlidXRpb24gb2Ygb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnQgdG8gZGlzdHJpYnV0ZSB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdCBjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCis1LiBBIHByb2dyYW0gdGhhdCBjb250YWlucyBubyBkZXJpdmF0aXZlIG9mIGFueSBwb3J0aW9uIG9mIHRoZSBMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yIGxpbmtlZCB3aXRoIGl0LCBpcyBjYWxsZWQgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiLiBTdWNoIGEgd29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZCB0aGVyZWZvcmUgZmFsbHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCitIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5IGNyZWF0ZXMgYW4gZXhlY3V0YWJsZSB0aGF0IGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSAoYmVjYXVzZSBpdCBjb250YWlucyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSksIHJhdGhlciB0aGFuIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBsaWJyYXJ5Ii4gVGhlIGV4ZWN1dGFibGUgaXMgdGhlcmVmb3JlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLiBTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KKworV2hlbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgdXNlcyBtYXRlcmlhbCBmcm9tIGEgaGVhZGVyIGZpbGUgdGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LiBXaGV0aGVyIHRoaXMgaXMgdHJ1ZSBpcyBlc3BlY2lhbGx5IHNpZ25pZmljYW50IGlmIHRoZSB3b3JrIGNhbiBiZSBsaW5rZWQgd2l0aG91dCB0aGUgTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gVGhlIHRocmVzaG9sZCBmb3IgdGhpcyB0byBiZSB0cnVlIGlzIG5vdCBwcmVjaXNlbHkgZGVmaW5lZCBieSBsYXcuCisKK0lmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhIHN0cnVjdHVyZSBsYXlvdXRzIGFuZCBhY2Nlc3NvcnMsIGFuZCBzbWFsbCBtYWNyb3MgYW5kIHNtYWxsIGlubGluZSBmdW5jdGlvbnMgKHRlbiBsaW5lcyBvciBsZXNzIGluIGxlbmd0aCksIHRoZW4gdGhlIHVzZSBvZiB0aGUgb2JqZWN0IGZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUgd29yay4gKEV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhpcyBvYmplY3QgY29kZSBwbHVzIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQorCitPdGhlcndpc2UsIGlmIHRoZSB3b3JrIGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSwgeW91IG1heSBkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4gQW55IGV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhhdCB3b3JrIGFsc28gZmFsbCB1bmRlciBTZWN0aW9uIDYsIHdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIGxpbmtlZCBkaXJlY3RseSB3aXRoIHRoZSBMaWJyYXJ5IGl0c2VsZi4KKworNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbWJpbmUgb3IgbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEgd29yayBjb250YWluaW5nIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5LCBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdCBtb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcmBzIG93biB1c2UgYW5kIHJldmVyc2UgZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMuCisKK1lvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZSBMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBzdXBwbHkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gSWYgdGhlIHdvcmsgZHVyaW5nIGV4ZWN1dGlvbiBkaXNwbGF5cyBjb3B5cmlnaHQgbm90aWNlcywgeW91IG11c3QgaW5jbHVkZSB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZSBkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiBBbHNvLCB5b3UgbXVzdCBkbyBvbmUgb2YgdGhlc2UgdGhpbmdzOgorCithKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIgY2hhbmdlcyB3ZXJlIHVzZWQgaW4gdGhlIHdvcmsgKHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSk7IGFuZCwgaWYgdGhlIHdvcmsgaXMgYW4gZXhlY3V0YWJsZSBsaW5rZWQgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiLCBhcyBvYmplY3QgY29kZSBhbmQvb3Igc291cmNlIGNvZGUsIHNvIHRoYXQgdGhlIHVzZXIgY2FuIG1vZGlmeSB0aGUgTGlicmFyeSBhbmQgdGhlbiByZWxpbmsgdG8gcHJvZHVjZSBhIG1vZGlmaWVkIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gKEl0IGlzIHVuZGVyc3Rvb2QgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uIHRvIHVzZSB0aGUgbW9kaWZpZWQgZGVmaW5pdGlvbnMuKQorYikgVXNlIGEgc3VpdGFibGUgc2hhcmVkIGxpYnJhcnkgbWVjaGFuaXNtIGZvciBsaW5raW5nIHdpdGggdGhlIExpYnJhcnkuIEEgc3VpdGFibGUgbWVjaGFuaXNtIGlzIG9uZSB0aGF0ICgxKSB1c2VzIGF0IHJ1biB0aW1lIGEgY29weSBvZiB0aGUgbGlicmFyeSBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHVzZXJgcyBjb21wdXRlciBzeXN0ZW0sIHJhdGhlciB0aGFuIGNvcHlpbmcgbGlicmFyeSBmdW5jdGlvbnMgaW50byB0aGUgZXhlY3V0YWJsZSwgYW5kICgyKSB3aWxsIG9wZXJhdGUgcHJvcGVybHkgd2l0aCBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIGlmIHRoZSB1c2VyIGluc3RhbGxzIG9uZSwgYXMgbG9uZyBhcyB0aGUgbW9kaWZpZWQgdmVyc2lvbiBpcyBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHdvcmsgd2FzIG1hZGUgd2l0aC4KK2MpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzLCB0byBnaXZlIHRoZSBzYW1lIHVzZXIgdGhlIG1hdGVyaWFscyBzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4gdGhlIGNvc3Qgb2YgcGVyZm9ybWluZyB0aGlzIGRpc3RyaWJ1dGlvbi4KK2QpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZSBzcGVjaWZpZWQgbWF0ZXJpYWxzIGZyb20gdGhlIHNhbWUgcGxhY2UuCitlKSBWZXJpZnkgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlc2UgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCitGb3IgYW4gZXhlY3V0YWJsZSwgdGhlIHJlcXVpcmVkIGZvcm0gb2YgdGhlICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgbXVzdCBpbmNsdWRlIGFueSBkYXRhIGFuZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IgcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIG1hdGVyaWFscyB0byBiZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UgcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseSBhY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uIFN1Y2ggYSBjb250cmFkaWN0aW9uIG1lYW5zIHlvdSBjYW5ub3QgdXNlIGJvdGggdGhlbSBhbmQgdGhlIExpYnJhcnkgdG9nZXRoZXIgaW4gYW4gZXhlY3V0YWJsZSB0aGF0IHlvdSBkaXN0cmlidXRlLgorCis3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkgc2lkZS1ieS1zaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBzdWNoIGEgY29tYmluZWQgbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5IGFuZCBvZiB0aGUgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIGlzIG90aGVyd2lzZSBwZXJtaXR0ZWQsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyB0aGVzZSB0d28gdGhpbmdzOgorCithKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMuIFRoaXMgbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIFNlY3Rpb25zIGFib3ZlLgorYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QgdGhhdCBwYXJ0IG9mIGl0IGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgorOC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIEFueSBhdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90IHNpZ25lZCBpdC4gSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gVGhlc2UgYWN0aW9ucyBhcmUgcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiBUaGVyZWZvcmUsIGJ5IG1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZCBhbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nIHRoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5IHN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgorCisxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLCBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yIG90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QgZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gSWYgeW91IGNhbm5vdCBkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50IGxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkgYnkgYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuIHRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHksIGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkgcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkgc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcyBpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuIE1hbnkgcGVvcGxlIGhhdmUgbWFkZSBnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHRocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0IHN5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcgdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90IGltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvIGJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisxMi4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBMaWJyYXJ5IGlzIHJlc3RyaWN0ZWQgaW4gY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKzEzLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gSWYgdGhlIExpYnJhcnkgc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkgbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGEgbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworMTQuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBMaWJyYXJ5IGludG8gb3RoZXIgZnJlZSBwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlc2UsIHdyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworTk8gV0FSUkFOVFkKKworMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZIEZPUiBUSEUgTElCUkFSWSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgTElCUkFSWSBJUyBXSVRIIFlPVS4gU0hPVUxEIFRIRSBMSUJSQVJZIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKzE2LiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcgV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUiBSRURJU1RSSUJVVEUgVEhFIExJQlJBUlkgQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgTElCUkFSWSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBMSUJSQVJZIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgU09GVFdBUkUpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKK0hvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKKworSWYgeW91IGRldmVsb3AgYSBuZXcgbGlicmFyeSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdCBwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQgZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiBZb3UgY2FuIGRvIHNvIGJ5IHBlcm1pdHRpbmcgcmVkaXN0cmlidXRpb24gdW5kZXIgdGhlc2UgdGVybXMgKG9yLCBhbHRlcm5hdGl2ZWx5LCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UpLgorCitUbyBhcHBseSB0aGVzZSB0ZXJtcywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgbGlicmFyeS4gSXQgaXMgc2FmZXN0IHRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkgY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKK29uZSBsaW5lIHRvIGdpdmUgdGhlIGxpYnJhcnlgcyBuYW1lIGFuZCBhbiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4KK0NvcHlyaWdodCAoQykgeWVhciAgbmFtZSBvZiBhdXRob3IKKworVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCit2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKK0xlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyIHNjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIGxpYnJhcnksIGlmIG5lY2Vzc2FyeS4gSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCitZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluCit0aGUgbGlicmFyeSBgRnJvYmAgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW4KK2J5IEphbWVzIFJhbmRvbSBIYWNrZXIuCisKK3NpZ25hdHVyZSBvZiBUeSBDb29uLCAxIEFwcmlsIDE5OTAKK1R5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCitUaGF0YHMgYWxsIHRoZXJlIGlzIHRvIGl0IQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xHUEwtMy4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MR1BMLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmUyOWJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MR1BMLTMuMApAQCAtMCwwICsxLDY1IEBACitHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKworVmVyc2lvbiAzLCAyOSBKdW5lIDIwMDcKKworQ29weXJpZ2h0IMKpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+CisKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworVGhpcyB2ZXJzaW9uIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBzdXBwbGVtZW50ZWQgYnkgdGhlIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbGlzdGVkIGJlbG93LgorMC4gQWRkaXRpb25hbCBEZWZpbml0aW9ucy4KKworQXMgdXNlZCBoZXJlaW4sIOKAnHRoaXMgTGljZW5zZeKAnSByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUg4oCcR05VIEdQTOKAnSByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKwor4oCcVGhlIExpYnJhcnnigJ0gcmVmZXJzIHRvIGEgY292ZXJlZCB3b3JrIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSwgb3RoZXIgdGhhbiBhbiBBcHBsaWNhdGlvbiBvciBhIENvbWJpbmVkIFdvcmsgYXMgZGVmaW5lZCBiZWxvdy4KKworQW4g4oCcQXBwbGljYXRpb27igJ0gaXMgYW55IHdvcmsgdGhhdCBtYWtlcyB1c2Ugb2YgYW4gaW50ZXJmYWNlIHByb3ZpZGVkIGJ5IHRoZSBMaWJyYXJ5LCBidXQgd2hpY2ggaXMgbm90IG90aGVyd2lzZSBiYXNlZCBvbiB0aGUgTGlicmFyeS4gRGVmaW5pbmcgYSBzdWJjbGFzcyBvZiBhIGNsYXNzIGRlZmluZWQgYnkgdGhlIExpYnJhcnkgaXMgZGVlbWVkIGEgbW9kZSBvZiB1c2luZyBhbiBpbnRlcmZhY2UgcHJvdmlkZWQgYnkgdGhlIExpYnJhcnkuCisKK0Eg4oCcQ29tYmluZWQgV29ya+KAnSBpcyBhIHdvcmsgcHJvZHVjZWQgYnkgY29tYmluaW5nIG9yIGxpbmtpbmcgYW4gQXBwbGljYXRpb24gd2l0aCB0aGUgTGlicmFyeS4gVGhlIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGlicmFyeSB3aXRoIHdoaWNoIHRoZSBDb21iaW5lZCBXb3JrIHdhcyBtYWRlIGlzIGFsc28gY2FsbGVkIHRoZSDigJxMaW5rZWQgVmVyc2lvbuKAnS4KKworVGhlIOKAnE1pbmltYWwgQ29ycmVzcG9uZGluZyBTb3VyY2XigJ0gZm9yIGEgQ29tYmluZWQgV29yayBtZWFucyB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIHRoZSBDb21iaW5lZCBXb3JrLCBleGNsdWRpbmcgYW55IHNvdXJjZSBjb2RlIGZvciBwb3J0aW9ucyBvZiB0aGUgQ29tYmluZWQgV29yayB0aGF0LCBjb25zaWRlcmVkIGluIGlzb2xhdGlvbiwgYXJlIGJhc2VkIG9uIHRoZSBBcHBsaWNhdGlvbiwgYW5kIG5vdCBvbiB0aGUgTGlua2VkIFZlcnNpb24uCisKK1RoZSDigJxDb3JyZXNwb25kaW5nIEFwcGxpY2F0aW9uIENvZGXigJ0gZm9yIGEgQ29tYmluZWQgV29yayBtZWFucyB0aGUgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlIGZvciB0aGUgQXBwbGljYXRpb24sIGluY2x1ZGluZyBhbnkgZGF0YSBhbmQgdXRpbGl0eSBwcm9ncmFtcyBuZWVkZWQgZm9yIHJlcHJvZHVjaW5nIHRoZSBDb21iaW5lZCBXb3JrIGZyb20gdGhlIEFwcGxpY2F0aW9uLCBidXQgZXhjbHVkaW5nIHRoZSBTeXN0ZW0gTGlicmFyaWVzIG9mIHRoZSBDb21iaW5lZCBXb3JrLgorMS4gRXhjZXB0aW9uIHRvIFNlY3Rpb24gMyBvZiB0aGUgR05VIEdQTC4KKworWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgdW5kZXIgc2VjdGlvbnMgMyBhbmQgNCBvZiB0aGlzIExpY2Vuc2Ugd2l0aG91dCBiZWluZyBib3VuZCBieSBzZWN0aW9uIDMgb2YgdGhlIEdOVSBHUEwuCisyLiBDb252ZXlpbmcgTW9kaWZpZWQgVmVyc2lvbnMuCisKK0lmIHlvdSBtb2RpZnkgYSBjb3B5IG9mIHRoZSBMaWJyYXJ5LCBhbmQsIGluIHlvdXIgbW9kaWZpY2F0aW9ucywgYSBmYWNpbGl0eSByZWZlcnMgdG8gYSBmdW5jdGlvbiBvciBkYXRhIHRvIGJlIHN1cHBsaWVkIGJ5IGFuIEFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0aGUgZmFjaWxpdHkgKG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5IGlzIGludm9rZWQpLCB0aGVuIHlvdSBtYXkgY29udmV5IGEgY29weSBvZiB0aGUgbW9kaWZpZWQgdmVyc2lvbjoKKworICAgICogYSkgdW5kZXIgdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IHlvdSBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQsIGluIHRoZSBldmVudCBhbiBBcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgdGhlIGZ1bmN0aW9uIG9yIGRhdGEsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLCBvcgorICAgICogYikgdW5kZXIgdGhlIEdOVSBHUEwsIHdpdGggbm9uZSBvZiB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvZiB0aGlzIExpY2Vuc2UgYXBwbGljYWJsZSB0byB0aGF0IGNvcHkuCisKKzMuIE9iamVjdCBDb2RlIEluY29ycG9yYXRpbmcgTWF0ZXJpYWwgZnJvbSBMaWJyYXJ5IEhlYWRlciBGaWxlcy4KKworVGhlIG9iamVjdCBjb2RlIGZvcm0gb2YgYW4gQXBwbGljYXRpb24gbWF5IGluY29ycG9yYXRlIG1hdGVyaWFsIGZyb20gYSBoZWFkZXIgZmlsZSB0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnkuIFlvdSBtYXkgY29udmV5IHN1Y2ggb2JqZWN0IGNvZGUgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQsIGlmIHRoZSBpbmNvcnBvcmF0ZWQgbWF0ZXJpYWwgaXMgbm90IGxpbWl0ZWQgdG8gbnVtZXJpY2FsIHBhcmFtZXRlcnMsIGRhdGEgc3RydWN0dXJlIGxheW91dHMgYW5kIGFjY2Vzc29ycywgb3Igc21hbGwgbWFjcm9zLCBpbmxpbmUgZnVuY3Rpb25zIGFuZCB0ZW1wbGF0ZXMgKHRlbiBvciBmZXdlciBsaW5lcyBpbiBsZW5ndGgpLCB5b3UgZG8gYm90aCBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgKiBhKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIG9iamVjdCBjb2RlIHRoYXQgdGhlIExpYnJhcnkgaXMgdXNlZCBpbiBpdCBhbmQgdGhhdCB0aGUgTGlicmFyeSBhbmQgaXRzIHVzZSBhcmUgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuCisgICAgKiBiKSBBY2NvbXBhbnkgdGhlIG9iamVjdCBjb2RlIHdpdGggYSBjb3B5IG9mIHRoZSBHTlUgR1BMIGFuZCB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQuCisKKzQuIENvbWJpbmVkIFdvcmtzLgorCitZb3UgbWF5IGNvbnZleSBhIENvbWJpbmVkIFdvcmsgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UgdGhhdCwgdGFrZW4gdG9nZXRoZXIsIGVmZmVjdGl2ZWx5IGRvIG5vdCByZXN0cmljdCBtb2RpZmljYXRpb24gb2YgdGhlIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5IGNvbnRhaW5lZCBpbiB0aGUgQ29tYmluZWQgV29yayBhbmQgcmV2ZXJzZSBlbmdpbmVlcmluZyBmb3IgZGVidWdnaW5nIHN1Y2ggbW9kaWZpY2F0aW9ucywgaWYgeW91IGFsc28gZG8gZWFjaCBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgKiBhKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIENvbWJpbmVkIFdvcmsgdGhhdCB0aGUgTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KKyAgICAqIGIpIEFjY29tcGFueSB0aGUgQ29tYmluZWQgV29yayB3aXRoIGEgY29weSBvZiB0aGUgR05VIEdQTCBhbmQgdGhpcyBsaWNlbnNlIGRvY3VtZW50LgorICAgICogYykgRm9yIGEgQ29tYmluZWQgV29yayB0aGF0IGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzIGR1cmluZyBleGVjdXRpb24sIGluY2x1ZGUgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBMaWJyYXJ5IGFtb25nIHRoZXNlIG5vdGljZXMsIGFzIHdlbGwgYXMgYSByZWZlcmVuY2UgZGlyZWN0aW5nIHRoZSB1c2VyIHRvIHRoZSBjb3BpZXMgb2YgdGhlIEdOVSBHUEwgYW5kIHRoaXMgbGljZW5zZSBkb2N1bWVudC4KKyAgICAqIGQpIERvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICAgIG8gMCkgQ29udmV5IHRoZSBNaW5pbWFsIENvcnJlc3BvbmRpbmcgU291cmNlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB0aGUgQ29ycmVzcG9uZGluZyBBcHBsaWNhdGlvbiBDb2RlIGluIGEgZm9ybSBzdWl0YWJsZSBmb3IsIGFuZCB1bmRlciB0ZXJtcyB0aGF0IHBlcm1pdCwgdGhlIHVzZXIgdG8gcmVjb21iaW5lIG9yIHJlbGluayB0aGUgQXBwbGljYXRpb24gd2l0aCBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIExpbmtlZCBWZXJzaW9uIHRvIHByb2R1Y2UgYSBtb2RpZmllZCBDb21iaW5lZCBXb3JrLCBpbiB0aGUgbWFubmVyIHNwZWNpZmllZCBieSBzZWN0aW9uIDYgb2YgdGhlIEdOVSBHUEwgZm9yIGNvbnZleWluZyBDb3JyZXNwb25kaW5nIFNvdXJjZS4KKyAgICAgICAgICBvIDEpIFVzZSBhIHN1aXRhYmxlIHNoYXJlZCBsaWJyYXJ5IG1lY2hhbmlzbSBmb3IgbGlua2luZyB3aXRoIHRoZSBMaWJyYXJ5LiBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoYSkgdXNlcyBhdCBydW4gdGltZSBhIGNvcHkgb2YgdGhlIExpYnJhcnkgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSB1c2VyJ3MgY29tcHV0ZXIgc3lzdGVtLCBhbmQgKGIpIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlicmFyeSB0aGF0IGlzIGludGVyZmFjZS1jb21wYXRpYmxlIHdpdGggdGhlIExpbmtlZCBWZXJzaW9uLgorICAgICogZSkgUHJvdmlkZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24sIGJ1dCBvbmx5IGlmIHlvdSB3b3VsZCBvdGhlcndpc2UgYmUgcmVxdWlyZWQgdG8gcHJvdmlkZSBzdWNoIGluZm9ybWF0aW9uIHVuZGVyIHNlY3Rpb24gNiBvZiB0aGUgR05VIEdQTCwgYW5kIG9ubHkgdG8gdGhlIGV4dGVudCB0aGF0IHN1Y2ggaW5mb3JtYXRpb24gaXMgbmVjZXNzYXJ5IHRvIGluc3RhbGwgYW5kIGV4ZWN1dGUgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBDb21iaW5lZCBXb3JrIHByb2R1Y2VkIGJ5IHJlY29tYmluaW5nIG9yIHJlbGlua2luZyB0aGUgQXBwbGljYXRpb24gd2l0aCBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIExpbmtlZCBWZXJzaW9uLiAoSWYgeW91IHVzZSBvcHRpb24gNGQwLCB0aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIG11c3QgYWNjb21wYW55IHRoZSBNaW5pbWFsIENvcnJlc3BvbmRpbmcgU291cmNlIGFuZCBDb3JyZXNwb25kaW5nIEFwcGxpY2F0aW9uIENvZGUuIElmIHlvdSB1c2Ugb3B0aW9uIDRkMSwgeW91IG11c3QgcHJvdmlkZSB0aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIGluIHRoZSBtYW5uZXIgc3BlY2lmaWVkIGJ5IHNlY3Rpb24gNiBvZiB0aGUgR05VIEdQTCBmb3IgY29udmV5aW5nIENvcnJlc3BvbmRpbmcgU291cmNlLikKKworNS4gQ29tYmluZWQgTGlicmFyaWVzLgorCitZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkgc2lkZSBieSBzaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgdGhhdCBhcmUgbm90IEFwcGxpY2F0aW9ucyBhbmQgYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgYW5kIGNvbnZleSBzdWNoIGEgY29tYmluZWQgbGlicmFyeSB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgaWYgeW91IGRvIGJvdGggb2YgdGhlIGZvbGxvd2luZzoKKworICAgICogYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIHVuY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzLCBjb252ZXllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorICAgICogYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgdGhhdCBwYXJ0IG9mIGl0IGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgorCis2LiBSZXZpc2VkIFZlcnNpb25zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKK1RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gSWYgdGhlIExpYnJhcnkgYXMgeW91IHJlY2VpdmVkIGl0IHNwZWNpZmllcyB0aGF0IGEgY2VydGFpbiBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug4oCcb3IgYW55IGxhdGVyIHZlcnNpb27igJ0gYXBwbGllcyB0byBpdCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHB1Ymxpc2hlZCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZiB0aGUgTGlicmFyeSBhcyB5b3UgcmVjZWl2ZWQgaXQgZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworSWYgdGhlIExpYnJhcnkgYXMgeW91IHJlY2VpdmVkIGl0IHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGV0aGVyIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHNoYWxsIGFwcGx5LCB0aGF0IHByb3h5J3MgcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGFueSB2ZXJzaW9uIGlzIHBlcm1hbmVudCBhdXRob3JpemF0aW9uIGZvciB5b3UgdG8gY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlIExpYnJhcnkuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQTC0xLjAyIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUEwtMS4wMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTMzNzQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUEwtMS4wMgpAQCAtMCwwICsxLDc2IEBACisKK0x1Y2VudCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMDIgCisKK1RIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBQVUJMSUMgTElDRU5TRSAoIkFHUkVFTUVOVCIpLiBBTlkgVVNFLCBSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVGBTIEFDQ0VQVEFOQ0UgT0YgVEhJUyBBR1JFRU1FTlQuCisxLiBERUZJTklUSU9OUworCisiQ29udHJpYnV0aW9uIiBtZWFuczoKKworaW4gdGhlIGNhc2Ugb2YgTHVjZW50IFRlY2hub2xvZ2llcyBJbmMuICgiTFVDRU5UIiksIHRoZSBPcmlnaW5hbCBQcm9ncmFtLCBhbmQKK2luIHRoZSBjYXNlIG9mIGVhY2ggQ29udHJpYnV0b3IsCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTsKK3doZXJlIHN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIHdlcmUgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbiBzdWNoIENvbnRyaWJ1dG9yYHMgYmVoYWxmLCBhbmQgdGhlIENvbnRyaWJ1dG9yIGV4cGxpY2l0bHkgY29uc2VudHMsIGluIGFjY29yZGFuY2Ugd2l0aCBTZWN0aW9uIDNDLCB0byBjaGFyYWN0ZXJpemF0aW9uIG9mIHRoZSBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgYXMgQ29udHJpYnV0aW9ucy4KKyJDb250cmlidXRvciIgbWVhbnMgTFVDRU5UIGFuZCBhbnkgb3RoZXIgZW50aXR5IHRoYXQgaGFzIENvbnRyaWJ1dGVkIGEgQ29udHJpYnV0aW9uIHRvIHRoZSBQcm9ncmFtLgorCisiRGlzdHJpYnV0b3IiIG1lYW5zIGEgUmVjaXBpZW50IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0sIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFByb2dyYW0sIG9yIGFueSBwYXJ0IHRoZXJlb2YuCisKKyJMaWNlbnNlZCBQYXRlbnRzIiBtZWFuIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLgorCisiT3JpZ2luYWwgUHJvZ3JhbSIgbWVhbnMgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIHNvZnR3YXJlIGFjY29tcGFueWluZyB0aGlzIEFncmVlbWVudCBhcyByZWxlYXNlZCBieSBMVUNFTlQsIGluY2x1ZGluZyBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUgYW5kIGRvY3VtZW50YXRpb24sIGlmIGFueS4KKworIlByb2dyYW0iIG1lYW5zIHRoZSBPcmlnaW5hbCBQcm9ncmFtIGFuZCBDb250cmlidXRpb25zIG9yIGFueSBwYXJ0IHRoZXJlb2YKKworIlJlY2lwaWVudCIgbWVhbnMgYW55b25lIHdobyByZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuCisKKzIuIEdSQU5UIE9GIFJJR0hUUworCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4KK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhlIHBhdGVudCBsaWNlbnNlIGdyYW50ZWQgYnkgYSBDb250cmlidXRvciBzaGFsbCBhbHNvIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIG9mIHRoYXQgQ29udHJpYnV0b3IgYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkIGJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uIHRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBncmFudGVkIGJ5IGEgQ29udHJpYnV0b3Igc2hhbGwgbm90IGFwcGx5IHRvIChpKSBhbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbiwgbm9yIHRvIChpaSkgQ29udHJpYnV0aW9ucyBvZiBvdGhlciBDb250cmlidXRvcnMuIE5vIGhhcmR3YXJlIHBlciBzZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuCitSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnRgcyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLgorRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQgcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudC4KKzMuIFJFUVVJUkVNRU5UUworCitBLiBEaXN0cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaW4gYW55IGZvcm0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQgb3IgdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDoKKworaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7CitpZiB0aGUgUHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiBzb3VyY2UgY29kZSBvciBvdGhlciB0YW5naWJsZSBmb3JtLCBhIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgb3IgRGlzdHJpYnV0b3JgcyBvd24gbGljZW5zZSBhZ3JlZW1lbnQgaXMgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW07IGFuZAoraWYgZGlzdHJpYnV0ZWQgdW5kZXIgRGlzdHJpYnV0b3JgcyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHN1Y2ggbGljZW5zZSBhZ3JlZW1lbnQ6CitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kIGNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUgYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOworZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaCBhcyBsb3N0IHByb2ZpdHM7IGFuZAorc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdCBDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eS4KK0IuIEVhY2ggRGlzdHJpYnV0b3IgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgaW4gYSBjb25zcGljdW91cyBsb2NhdGlvbiBpbiB0aGUgUHJvZ3JhbToKKworQ29weXJpZ2h0IChDKSAyMDAzLCBMdWNlbnQgVGVjaG5vbG9naWVzIEluYy4gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK0MuIEluIGFkZGl0aW9uLCBlYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZSBvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24gaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cyBzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gQWxzbywgZWFjaCBDb250cmlidXRvciBtdXN0IGFncmVlIHRoYXQgdGhlIGFkZGl0aW9ucyBhbmQvb3IgY2hhbmdlcyBhcmUgaW50ZW5kZWQgdG8gYmUgYSBDb250cmlidXRpb24uIE9uY2UgYSBDb250cmlidXRpb24gaXMgY29udHJpYnV0ZWQsIGl0IG1heSBub3QgdGhlcmVhZnRlciBiZSByZXZva2VkLgorCis0LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTgorCitDb21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkgYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycyBhbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZSBvZiB0aGUgUHJvZ3JhbSwgdGhlIERpc3RyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbCBsaWFiaWxpdHkgZm9yIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIERpc3RyaWJ1dG9yIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIERpc3RyaWJ1dG9yICgiQ29tbWVyY2lhbCBEaXN0cmlidXRvciIpIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgQ29udHJpYnV0b3IgKCJJbmRlbW5pZmllZCBDb250cmlidXRvciIpIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQgY29zdHMgKGNvbGxlY3RpdmVseSAiTG9zc2VzIikgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyIGxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvIHRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgaW4gY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzIHJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlciB0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIERpc3RyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQgYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUgaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLgorCitGb3IgZXhhbXBsZSwgYSBEaXN0cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgRGlzdHJpYnV0b3IgaXMgdGhlbiBhIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBEaXN0cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlIGNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIERpc3RyaWJ1dG9yYHMgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMgc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEgY291cnQgcmVxdWlyZXMgYW55IENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy4KKworNS4gTk8gV0FSUkFOVFkKKworRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLCBjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvciBlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4KKworNi4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFkKKworRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gRVhQT1JUIENPTlRST0wKKworUmVjaXBpZW50IGFncmVlcyB0aGF0IFJlY2lwaWVudCBhbG9uZSBpcyByZXNwb25zaWJsZSBmb3IgY29tcGxpYW5jZSB3aXRoIHRoZSBVbml0ZWQgU3RhdGVzIGV4cG9ydCBhZG1pbmlzdHJhdGlvbiByZWd1bGF0aW9ucyAoYW5kIHRoZSBleHBvcnQgY29udHJvbCBsYXdzIGFuZCByZWd1bGF0aW9uIG9mIGFueSBvdGhlciBjb3VudHJpZXMpLgorCis4LiBHRU5FUkFMCisKK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorCitJZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGEgQ29udHJpYnV0b3Igd2l0aCByZXNwZWN0IHRvIGEgcGF0ZW50IGFwcGxpY2FibGUgdG8gc29mdHdhcmUgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpLCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCBieSB0aGF0IENvbnRyaWJ1dG9yIHRvIHN1Y2ggUmVjaXBpZW50IHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIEluIGFkZGl0aW9uLCBpZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudGBzIHBhdGVudChzKSwgdGhlbiBzdWNoIFJlY2lwaWVudGBzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCitBbGwgUmVjaXBpZW50YHMgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZSBwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnRgcyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwgUmVjaXBpZW50YHMgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5IFJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4KKworTFVDRU5UIG1heSBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YgdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggbmV3IHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBObyBvbmUgb3RoZXIgdGhhbiBMVUNFTlQgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8gdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuCisKK1RoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcyBBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzIGl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUFBMLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllZjM1ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjAKQEAgLTAsMCArMSwyMTMgQEAKKworTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIAorTFBQTCBWZXJzaW9uIDEuMCAgMTk5OS0wMy0wMQorCitDb3B5cmlnaHQgMTk5OSBMYVRlWDMgUHJvamVjdAorICAgIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworICAgIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IG1vZGlmaWNhdGlvbiBpcyBub3QgYWxsb3dlZC4KKworCitQcmVhbWJsZQorPT09PT09PT0KKworVGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UgKExQUEwpIGlzIHRoZSBsaWNlbnNlIHVuZGVyIHdoaWNoIHRoZQorYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gaXMgZGlzdHJpYnV0ZWQuIEFzIGRlc2NyaWJlZCBiZWxvdyB5b3UgbWF5IHVzZQordGhpcyBsaWNlbmNlIGZvciBhbnkgc29mdHdhcmUgdGhhdCB5b3Ugd2lzaCB0byBkaXN0cmlidXRlLiAKKworSXQgbWF5IGJlIHBhcnRpY3VsYXJseSBzdWl0YWJsZSBpZiB5b3VyIHNvZnR3YXJlIGlzIFRlWCByZWxhdGVkIChzdWNoCithcyBhIExhVGVYIHBhY2thZ2UgZmlsZSkgYnV0IGl0IG1heSBiZSB1c2VkIGZvciBhbnkgc29mdHdhcmUsIGV2ZW4gaWYKK2l0IGlzIHVucmVsYXRlZCB0byBUZVguCisKK1RvIHVzZSB0aGlzIGxpY2Vuc2UsIHRoZSBmaWxlcyBvZiB5b3VyIGRpc3RyaWJ1dGlvbiBzaG91bGQgaGF2ZSBhbgorZXhwbGljaXQgY29weXJpZ2h0IG5vdGljZSBnaXZpbmcgeW91ciBuYW1lIGFuZCB0aGUgeWVhciwgdG9nZXRoZXIKK3dpdGggYSByZWZlcmVuY2UgdG8gdGhpcyBsaWNlbnNlLgorCitBIHR5cGljYWwgZXhhbXBsZSB3b3VsZCBiZQorCisgICAlJSBwaWcuc3R5CisgICAlJSBDb3B5cmlnaHQgMjAwMSBNLiBZLiBOYW1lCisKKyAgICUgVGhpcyBwcm9ncmFtIGNhbiByZWRpc3RyaWJ1dGVkIGFuZC9vciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMKKyAgICUgb2YgdGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UgRGlzdHJpYnV0ZWQgZnJvbSBDVEFOCisgICAlIGFyY2hpdmVzIGluIGRpcmVjdG9yeSBtYWNyb3MvbGF0ZXgvYmFzZS9scHBsLnR4dDsgZWl0aGVyCisgICAlIHZlcnNpb24gMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworR2l2ZW4gc3VjaCBhIG5vdGljZSBpbiB0aGUgZmlsZSwgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBkb2N1bWVudCB3b3VsZAorYXBwbHksIHdpdGg6CisKK2BUaGUgUHJvZ3JhbWAgcmVmZXJyaW5nIHRvIHRoZSBzb2Z0d2FyZSBgcGlnLnN0eWAgIGFuZCAKK2BUaGUgQ29weXJpZ2h0IEhvbGRlcmAgcmVmZXJyaW5nIHRvIHRoZSBwZXJzb24gYE0uIFkuIE5hbWVgLgorCitUbyBzZWUgYSByZWFsIGV4YW1wbGUsIHNlZSB0aGUgZmlsZSBsZWdhbC50eHQgd2hpY2ggY2FycmllcyB0aGUKK2NvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBiYXNlIGxhdGV4IGRpc3RyaWJ1dGlvbi4KKworVGhpcyBsaWNlbnNlIGdpdmVzIHRlcm1zIHVuZGVyIHdoaWNoIGZpbGVzIG9mIFRoZSBQcm9ncmFtIG1heSBiZQorZGlzdHJpYnV0ZWQgYW5kIG1vZGlmaWVkLiBJbmRpdmlkdWFsIGZpbGVzIG1heSBoYXZlIHNwZWNpZmljIGZ1cnRoZXIKK2NvbnN0cmFpbnRzIG9uIG1vZGlmaWNhdGlvbiwgYnV0IG5vIGZpbGUgc2hvdWxkIGhhdmUgcmVzdHJpY3Rpb25zIG9uCitkaXN0cmlidXRpb24gb3RoZXIgdGhhbiB0aG9zZSBzcGVjaWZpZWQgYmVsb3cuIAorVGhpcyBpcyB0byBlbnN1cmUgdGhhdCBhIGRpc3RyaWJ1dG9yIHdpc2hpbmcgdG8gZGlzdHJpYnV0ZSBhIGNvbXBsZXRlCit1bm1vZGlmaWVkIGNvcHkgb2YgVGhlIFByb2dyYW0gbmVlZCBvbmx5IGNoZWNrIHRoZSBjb25kaXRpb25zIGluIHRoaXMKK2ZpbGUsIGFuZCBkb2VzIG5vdCBuZWVkIHRvIGNoZWNrIGV2ZXJ5IGZpbGUgaW4gVGhlIFByb2dyYW0gZm9yIGV4dHJhCityZXN0cmljdGlvbnMuIElmIHlvdSBkbyBuZWVkIHRvIG1vZGlmeSB0aGUgZGlzdHJpYnV0aW9uIHRlcm1zIG9mIHNvbWUKK2ZpbGVzLCBkbyBub3QgcmVmZXIgdG8gdGhpcyBsaWNlbnNlLCBpbnN0ZWFkIGRpc3RyaWJ1dGUgVGhlIFByb2dyYW0KK3VuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UuIFlvdSBtYXkgdXNlIHRoZSBwYXJ0cyBvZiB0aGUgdGV4dCBvZiBMUFBMIGFzCithIG1vZGVsIGZvciB5b3VyIG93biBsaWNlbnNlLCBidXQgeW91ciBsaWNlbnNlIHNob3VsZCBub3QgZGlyZWN0bHkgcmVmZXIKK3RvIHRoZSBMUFBMIG9yIG90aGVyd2lzZSBnaXZlIHRoZSBpbXByZXNzaW9uIHRoYXQgVGhlIFByb2dyYW0gaXMKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMUFBMLiAKKworCisKK1RoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGVybXMgQW5kIENvbmRpdGlvbnMgRm9yIENvcHlpbmcsIERpc3RyaWJ1dGlvbiBBbmQgTW9kaWZpY2F0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitXQVJSQU5UWQorPT09PT09PT0KKworVGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIFRoZSBQcm9ncmFtLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieQorYXBwbGljYWJsZSBsYXcuICBFeGNlcHQgd2hlbiBvdGhlcndpc2Ugc3RhdGVkIGluIHdyaXRpbmcsIFRoZQorQ29weXJpZ2h0IEhvbGRlciBwcm92aWRlcyBUaGUgUHJvZ3JhbSBgYXMgaXNgIHdpdGhvdXQgd2FycmFudHkgb2YgYW55CitraW5kLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCB0aGUKK2ltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhcgorcHVycG9zZS4gIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlCitwcm9ncmFtIGlzIHdpdGggeW91LiAgU2hvdWxkIFRoZSBQcm9ncmFtIHByb3ZlIGRlZmVjdGl2ZSwgeW91IGFzc3VtZQordGhlIGNvc3Qgb2YgYWxsIG5lY2Vzc2FyeSBzZXJ2aWNpbmcsIHJlcGFpciBvciBjb3JyZWN0aW9uLgorCitJbiBubyBldmVudCB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcKK3dpbGwgVGhlIENvcHlyaWdodCBIb2xkZXIsIG9yIGFueSBvZiB0aGUgaW5kaXZpZHVhbCBhdXRob3JzIG5hbWVkIGluCit0aGUgc291cmNlIGZvciBUaGUgUHJvZ3JhbSwgYmUgbGlhYmxlIHRvIHlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nCithbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBvdXQKK29mIGFueSB1c2Ugb2YgVGhlIFByb2dyYW0gb3Igb3V0IG9mIGluYWJpbGl0eSB0byB1c2UgVGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGxvc3Mgb2YgZGF0YSBvciBkYXRhIGJlaW5nIHJlbmRlcmVkCitpbmFjY3VyYXRlIG9yIGxvc3NlcyBzdXN0YWluZWQgYnkgeW91IG9yIGJ5IHRoaXJkIHBhcnRpZXMgYXMgYSByZXN1bHQKK29mIGEgZmFpbHVyZSBvZiBUaGUgUHJvZ3JhbSB0byBvcGVyYXRlIHdpdGggYW55IG90aGVyIHByb2dyYW1zKSwgZXZlbgoraWYgc3VjaCBob2xkZXIgb3Igb3RoZXIgcGFydHkgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YKK3N1Y2ggZGFtYWdlcy4KKworCitESVNUUklCVVRJT04KKz09PT09PT09PT09PQorCitSZWRpc3RyaWJ1dGlvbiBvZiB1bmNoYW5nZWQgZmlsZXMgaXMgYWxsb3dlZCBwcm92aWRlZCB0aGF0IGFsbCBmaWxlcwordGhhdCBtYWtlIHVwIHRoZSBkaXN0cmlidXRpb24gb2YgVGhlIFByb2dyYW0gYXJlIGRpc3RyaWJ1dGVkLgorSW4gcGFydGljdWxhciB0aGlzIG1lYW5zIHRoYXQgVGhlIFByb2dyYW0gaGFzIHRvIGJlIGRpc3RyaWJ1dGVkCitpbmNsdWRpbmcgaXRzIGRvY3VtZW50YXRpb24gaWYgZG9jdW1lbnRhdGlvbiB3YXMgcGFydCBvZiB0aGUgb3JpZ2luYWwKK2Rpc3RyaWJ1dGlvbi4KKworVGhlIGRpc3RyaWJ1dGlvbiBvZiBUaGUgUHJvZ3JhbSB3aWxsIGNvbnRhaW4gYSBwcm9taW5lbnQgZmlsZQorbGlzdGluZyBhbGwgdGhlIGZpbGVzIGNvdmVyZWQgYnkgdGhpcyBsaWNlbnNlLgorCitJZiB5b3UgcmVjZWl2ZSBvbmx5IHNvbWUgb2YgdGhlc2UgZmlsZXMgZnJvbSBzb21lb25lLCBjb21wbGFpbiEKKworVGhlIGRpc3RyaWJ1dGlvbiBvZiBjaGFuZ2VkIHZlcnNpb25zIG9mIGNlcnRhaW4gZmlsZXMgaW5jbHVkZWQgaW4gdGhlCitUaGUgUHJvZ3JhbSwgYW5kIHRoZSByZXVzZSBvZiBjb2RlIGZyb20gVGhlIFByb2dyYW0sIGFyZSBhbGxvd2VkCit1bmRlciB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworICogSXQgaXMgYWxsb3dlZCBvbmx5IGlmIHRoZSBsZWdhbCBub3RpY2UgaW4gdGhlIGZpbGUgZG9lcyBub3QKKyAgIGV4cHJlc3NseSBmb3JiaWQgaXQuCisgICBTZWUgbm90ZSBiZWxvdywgdW5kZXIgIkNvbmRpdGlvbnMgb24gaW5kaXZpZHVhbCBmaWxlcyIuCisgCisgKiBZb3UgcmVuYW1lIHRoZSBmaWxlIGJlZm9yZSB5b3UgbWFrZSBhbnkgY2hhbmdlcyB0byBpdCwgdW5sZXNzIHRoZQorICAgZmlsZSBleHBsaWNpdGx5IHNheXMgdGhhdCByZW5hbWluZyBpcyBub3QgcmVxdWlyZWQuICBBbnkgc3VjaCBjaGFuZ2VkCisgICBmaWxlcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIGEgbGljZW5zZSB0aGF0IGZvcmJpZHMgZGlzdHJpYnV0aW9uCisgICBvZiB0aG9zZSBmaWxlcywgYW5kIGFueSBmaWxlcyBkZXJpdmVkIGZyb20gdGhlbSwgdW5kZXIgdGhlIG5hbWVzIHVzZWQKKyAgIGJ5IHRoZSBvcmlnaW5hbCBmaWxlcyBpbiB0aGUgZGlzdHJpYnV0aW9uIG9mIFRoZSBQcm9ncmFtLgorCisgKiBZb3UgY2hhbmdlIGFueSBgaWRlbnRpZmljYXRpb24gc3RyaW5nYCBpbiBUaGUgUHJvZ3JhbSB0byBjbGVhcmx5IAorICAgaW5kaWNhdGUgdGhhdCB0aGUgZmlsZSBpcyBub3QgcGFydCBvZiB0aGUgc3RhbmRhcmQgc3lzdGVtLgorCisgKiBJZiBUaGUgUHJvZ3JhbSBpbmNsdWRlcyBhbiBgZXJyb3IgcmVwb3J0IGFkZHJlc3NgIHNvIHRoYXQgZXJyb3JzCisgICBtYXkgYmUgcmVwb3J0ZWQgdG8gVGhlIENvcHlyaWdodCBIb2xkZXIsIG9yIG90aGVyIHNwZWNpZmllZAorICAgYWRkcmVzc2VzLCB0aGlzIGFkZHJlc3MgbXVzdCBiZSBjaGFuZ2VkIGluIGFueSBtb2RpZmllZCB2ZXJzaW9ucyBvZgorICAgVGhlIFByb2dyYW0sIHNvIHRoYXQgcmVwb3J0cyBmb3IgZmlsZXMgbm90IG1haW50YWluZWQgYnkgdGhlCisgICBvcmlnaW5hbCBwcm9ncmFtIG1haW50YWluZXJzIGFyZSBkaXJlY3RlZCB0byB0aGUgbWFpbnRhaW5lcnMgb2YgdGhlCisgICBjaGFuZ2VkIGZpbGVzLiAKKworICogWW91IGFja25vd2xlZGdlIHRoZSBzb3VyY2UgYW5kIGF1dGhvcnNoaXAgb2YgdGhlIG9yaWdpbmFsIHZlcnNpb24KKyAgIGluIHRoZSBtb2RpZmllZCBmaWxlLgorCisgKiBZb3UgYWxzbyBkaXN0cmlidXRlIHRoZSB1bm1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGZpbGUgb3IKKyAgIGFsdGVybmF0aXZlbHkgcHJvdmlkZSBzdWZmaWNpZW50IGluZm9ybWF0aW9uIHNvIHRoYXQgdGhlCisgICB1c2VyIG9mIHlvdXIgbW9kaWZpZWQgZmlsZSBjYW4gYmUgcmVhc29uYWJseSBleHBlY3RlZCB0byBiZQorICAgYWJsZSB0byBvYnRhaW4gYW4gb3JpZ2luYWwsIHVubW9kaWZpZWQgY29weSBvZiBUaGUgUHJvZ3JhbS4KKyAgIEZvciBleGFtcGxlLCB5b3UgbWF5IHNwZWNpZnkgYSBVUkwgdG8gYSBzaXRlIHRoYXQgeW91IGV4cGVjdAorICAgd2lsbCBmcmVlbHkgcHJvdmlkZSB0aGUgdXNlciB3aXRoIGEgY29weSBvZiBUaGUgUHJvZ3JhbSAoZWl0aGVyCisgICB0aGUgdmVyc2lvbiBvbiB3aGljaCB5b3VyIG1vZGlmaWNhdGlvbiBpcyBiYXNlZCwgb3IgcGVyaGFwcyBhCisgICBsYXRlciB2ZXJzaW9uKS4KKworICogSWYgVGhlIFByb2dyYW0gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoLCBvciBpcyBiYXNlZCBvbiwgTGFUZVgsCisgICB0aGVuIGZpbGVzIHdpdGggdGhlIGZvbGxvd2luZyBmaWxlIGV4dGVuc2lvbnMgd2hpY2ggaGF2ZSBzcGVjaWFsCisgICBtZWFuaW5nIGluIExhVGVYIFNvZnR3YXJlLCBoYXZlIHNwZWNpYWwgbW9kaWZpY2F0aW9uIHJ1bGVzIHVuZGVyIHRoZQorICAgbGljZW5zZToKKyAKKyAgICAtIEZpbGVzIHdpdGggZXh0ZW5zaW9uIGAuaW5zYCAoaW5zdGFsbGF0aW9uIGZpbGVzKTogdGhlc2UgZmlsZXMgbWF5CisgICAgICBub3QgYmUgbW9kaWZpZWQgYXQgYWxsIGJlY2F1c2UgdGhleSBjb250YWluIHRoZSBsZWdhbCBub3RpY2VzCisgICAgICB0aGF0IGFyZSBwbGFjZWQgaW4gdGhlIGdlbmVyYXRlZCBmaWxlcy4KKyAKKyAgICAtIEZpbGVzIHdpdGggZXh0ZW5zaW9uIGAuZmRgIChMYVRlWCBmb250IGRlZmluaXRpb25zIGZpbGVzKTogdGhlc2UKKyAgICAgIGZpbGVzIGFyZSBhbGxvd2VkIHRvIGJlIG1vZGlmaWVkIHdpdGhvdXQgY2hhbmdpbmcgdGhlIG5hbWUsIGJ1dAorICAgICAgb25seSB0byBlbmFibGUgdXNlIG9mIGFsbCBhdmFpbGFibGUgZm9udHMgYW5kIHRvIHByZXZlbnQgYXR0ZW1wdHMKKyAgICAgIHRvIGFjY2VzcyB1bmF2YWlsYWJsZSBmb250cy4gSG93ZXZlciwgbW9kaWZpZWQgZmlsZXMgYXJlIG5vdAorICAgICAgYWxsb3dlZCB0byBiZSBkaXN0cmlidXRlZCBpbiBwbGFjZSBvZiBvcmlnaW5hbCBmaWxlcy4KKyAKKyAgICAtIEZpbGVzIHdpdGggZXh0ZW5zaW9uIGAuY2ZnYCAoY29uZmlndXJhdGlvbiBmaWxlcyk6IHRoZXNlIGZpbGVzCisgICAgICBjYW4gYmUgY3JlYXRlZCBvciBtb2RpZmllZCB0byBlbmFibGUgZWFzeSBjb25maWd1cmF0aW9uIG9mIHRoZQorICAgICAgc3lzdGVtLiAgVGhlIGRvY3VtZW50YXRpb24gaW4gY2ZnZ3VpZGUudGV4IGluIHRoZSBiYXNlIExhVGVYCisgICAgICBkaXN0cmlidXRpb24gZGVzY3JpYmVzIHdoZW4gaXQgbWFrZXMgc2Vuc2UgdG8gbW9kaWZ5IG9yIGdlbmVyYXRlCisgICAgICBzdWNoIGZpbGVzLgorIAorCitUaGUgYWJvdmUgcmVzdHJpY3Rpb25zIGFyZSBub3QgaW50ZW5kZWQgdG8gcHJvaGliaXQsIGFuZCBoZW5jZSBkbworbm90IGFwcGx5IHRvLCB0aGUgdXBkYXRpbmcsIGJ5IGFueSBtZXRob2QsIG9mIGEgZmlsZSBzbyB0aGF0IGl0CitiZWNvbWVzIGlkZW50aWNhbCB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhhdCBmaWxlIGluIFRoZSBQcm9ncmFtLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTk9URVMKKz09PT09CisKK1dlIGJlbGlldmUgdGhhdCB0aGVzZSByZXF1aXJlbWVudHMgZ2l2ZSB5b3UgdGhlIGZyZWVkb20geW91IHRvIG1ha2UKK21vZGlmaWNhdGlvbnMgdGhhdCBjb25mb3JtIHdpdGggd2hhdGV2ZXIgdGVjaG5pY2FsIHNwZWNpZmljYXRpb25zIHlvdQord2lzaCwgd2hpbHN0IG1haW50YWluaW5nIHRoZSBhdmFpbGFiaWxpdHksIGludGVncml0eSBhbmQgcmVsaWFiaWxpdHkgb2YKK1RoZSBQcm9ncmFtLiAgSWYgeW91IGRvIG5vdCBzZWUgaG93IHRvIGFjaGlldmUgeW91ciBnb2FsIHdoaWxzdAorYWRoZXJpbmcgdG8gdGhlc2UgcmVxdWlyZW1lbnRzIHRoZW4gcmVhZCB0aGUgZG9jdW1lbnQgY2ZnZ3VpZGUudGV4CitpbiB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gZm9yIHN1Z2dlc3Rpb25zLiAKKworQmVjYXVzZSBvZiB0aGUgcG9ydGFiaWxpdHkgYW5kIGV4Y2hhbmdlYWJpbGl0eSBhc3BlY3RzIG9mIHN5c3RlbXMKK2xpa2UgTGFUZVgsIFRoZSBMYVRlWDMgUHJvamVjdCBkZXByZWNhdGVzIHRoZSBkaXN0cmlidXRpb24gb2YKK25vbi1zdGFuZGFyZCB2ZXJzaW9ucyBvZiBjb21wb25lbnRzIG9mIExhVGVYIG9yIG9mIGdlbmVyYWxseSBhdmFpbGFibGUKK2NvbnRyaWJ1dGVkIGNvZGUgZm9yIHRoZW0gYnV0IHN1Y2ggZGlzdHJpYnV0aW9ucyBhcmUgcGVybWl0dGVkIHVuZGVyIHRoZQorYWJvdmUgcmVzdHJpY3Rpb25zLgorCitUaGUgZG9jdW1lbnQgbW9kZ3VpZGUudGV4IGluIHRoZSBiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBkZXRhaWxzCit0aGUgcmVhc29ucyBmb3IgdGhlIGxlZ2FsIHJlcXVpcmVtZW50cyBkZXRhaWxlZCBhYm92ZS4KK0V2ZW4gaWYgVGhlIFByb2dyYW0gaXMgdW5yZWxhdGVkIHRvIExhVGVYLCB0aGUgYXJndW1lbnQgaW4KK21vZGd1aWRlLnRleCBtYXkgc3RpbGwgYXBwbHksIGFuZCBzaG91bGQgYmUgcmVhZCBiZWZvcmUKK2EgbW9kaWZpZWQgdmVyc2lvbiBvZiBUaGUgUHJvZ3JhbSBpcyBkaXN0cmlidXRlZC4KKworCitDb25kaXRpb25zIG9uIGluZGl2aWR1YWwgZmlsZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgaW5kaXZpZHVhbCBmaWxlcyBtYXkgYmVhciBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgd2hpY2ggc3VwZXJzZWRlCit0aGUgZ2VuZXJhbCBjb25kaXRpb25zIG9uIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGNvbnRhaW5lZCBpbgordGhpcyBmaWxlLiBJZiB0aGVyZSBhcmUgYW55IHN1Y2ggZmlsZXMsIHRoZSBkaXN0cmlidXRpb24gb2YgVGhlCitQcm9ncmFtIHdpbGwgY29udGFpbiBhIHByb21pbmVudCBmaWxlIHRoYXQgbGlzdHMgYWxsIHRoZSBleGNlcHRpb25hbAorZmlsZXMuCisKK1R5cGljYWwgZXhhbXBsZXMgb2YgZmlsZXMgd2l0aCBtb3JlIHJlc3RyaWN0aXZlIG1vZGlmaWNhdGlvbgorY29uZGl0aW9ucyB3b3VsZCBiZSBmaWxlcyB0aGF0IGNvbnRhaW4gdGhlIHRleHQgb2YgY29weXJpZ2h0IG5vdGljZXMuCisKKyAqIFRoZSBjb25kaXRpb25zIG9uIGluZGl2aWR1YWwgZmlsZXMgZGlmZmVyIG9ubHkgaW4gdGhlCisgICBleHRlbnQgb2YgKm1vZGlmaWNhdGlvbiogdGhhdCBpcyBhbGxvd2VkLgorCisgKiBUaGUgY29uZGl0aW9ucyBvbiAqZGlzdHJpYnV0aW9uKiBhcmUgdGhlIHNhbWUgZm9yIGFsbCB0aGUgZmlsZXMuCisgICBUaHVzIGEgKHJlKWRpc3RyaWJ1dG9yIG9mIGEgY29tcGxldGUsIHVuY2hhbmdlZCBjb3B5IG9mIFRoZSBQcm9ncmFtCisgICBuZWVkIG1lZXQgb25seSB0aGUgY29uZGl0aW9ucyBpbiB0aGlzIGZpbGU7IGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8KKyAgIGNoZWNrIHRoZSBoZWFkZXIgb2YgZXZlcnkgZmlsZSBpbiB0aGUgZGlzdHJpYnV0aW9uIHRvIGNoZWNrIHRoYXQgYQorICAgZGlzdHJpYnV0aW9uIG1lZXRzIHRoZXNlIHJlcXVpcmVtZW50cy4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUFBMLTEuMSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA4MzMxOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjEKQEAgLTAsMCArMSwzMTYgQEAKKworCitUaGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZQorPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0KKworTFBQTCBWZXJzaW9uIDEuMSAgMTk5OS0wNy0xMAorCitDb3B5cmlnaHQgMTk5OSBMYVRlWDMgUHJvamVjdAorICAgIEV2ZXJ5b25lIGlzIGFsbG93ZWQgdG8gZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcworICAgIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBtb2RpZmljYXRpb24gb2YgaXQgaXMgbm90IGFsbG93ZWQuCisKKworUFJFQU1CTEUKKz09PT09PT09CisKK1RoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlIChMUFBMKSBpcyB0aGUgbGljZW5zZSB1bmRlciB3aGljaCB0aGUKK2Jhc2UgTGFUZVggZGlzdHJpYnV0aW9uIGlzIGRpc3RyaWJ1dGVkLgorCitZb3UgbWF5IHVzZSB0aGlzIGxpY2Vuc2UgZm9yIGFueSBwcm9ncmFtIHRoYXQgeW91IGhhdmUgd3JpdHRlbiBhbmQgd2lzaAordG8gZGlzdHJpYnV0ZS4gIFRoaXMgbGljZW5zZSBtYXkgYmUgcGFydGljdWxhcmx5IHN1aXRhYmxlIGlmIHlvdXIKK3Byb2dyYW0gaXMgVGVYLXJlbGF0ZWQgKHN1Y2ggYXMgYSBMYVRlWCBwYWNrYWdlKSwgYnV0IHlvdSBtYXkgdXNlIGl0CitldmVuIGlmIHlvdXIgcHJvZ3JhbSBpcyB1bnJlbGF0ZWQgdG8gVGVYLiAgVGhlIHNlY3Rpb24gYFdIRVRIRVIgQU5EIEhPVworVE8gRElTVFJJQlVURSBQUk9HUkFNUyBVTkRFUiBUSElTIExJQ0VOU0VgLCBiZWxvdywgZ2l2ZXMgaW5zdHJ1Y3Rpb25zLAorZXhhbXBsZXMsIGFuZCByZWNvbW1lbmRhdGlvbnMgZm9yIGF1dGhvcnMgd2hvIGFyZSBjb25zaWRlcmluZworZGlzdHJpYnV0aW5nIHRoZWlyIHByb2dyYW1zIHVuZGVyIHRoaXMgbGljZW5zZS4KKworSW4gdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBgVGhlIFByb2dyYW1gIHJlZmVycyB0byBhbnkgcHJvZ3JhbQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBsaWNlbnNlLgorCitUaGlzIGxpY2Vuc2UgZ2l2ZXMgY29uZGl0aW9ucyB1bmRlciB3aGljaCBUaGUgUHJvZ3JhbSBtYXkgYmUgZGlzdHJpYnV0ZWQKK2FuZCBjb25kaXRpb25zIHVuZGVyIHdoaWNoIG1vZGlmaWVkIHZlcnNpb25zIG9mIFRoZSBQcm9ncmFtIG1heSBiZQorZGlzdHJpYnV0ZWQuICBJbmRpdmlkdWFsIGZpbGVzIG9mIFRoZSBQcm9ncmFtIG1heSBiZWFyIHN1cHBsZW1lbnRhcnkKK2FuZC9vciBzdXBlcnNlZGluZyBjb25kaXRpb25zIG9uIG1vZGlmaWNhdGlvbiBvZiB0aGVtc2VsdmVzIGFuZCBvbiB0aGUKK2Rpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGVtc2VsdmVzLCBidXQgKm5vKiBmaWxlIG9mIFRoZQorUHJvZ3JhbSBtYXkgYmVhciBzdXBwbGVtZW50YXJ5IG9yIHN1cGVyc2VkaW5nIGNvbmRpdGlvbnMgb24gdGhlCitkaXN0cmlidXRpb24gb2YgYW4gdW5tb2RpZmllZCBjb3B5IG9mIHRoZSBmaWxlLiAgQSBkaXN0cmlidXRvciB3aXNoaW5nCit0byBkaXN0cmlidXRlIGEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiBUaGUgUHJvZ3JhbSB0aGVyZWZvcmUKK25lZWRzIHRvIGNoZWNrIHRoZSBjb25kaXRpb25zIG9ubHkgaW4gdGhpcyBsaWNlbnNlIGFuZCBub3doZXJlIGVsc2UuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBkaXN0cmlidXRpb24gYW5kL29yIG1vZGlmaWNhdGlvbiBvZiBUaGUgUHJvZ3JhbQorYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgbGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBJbgorcGFydGljdWxhciwgdGhlIGFjdCBvZiBydW5uaW5nIFRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLgorCitXZSwgdGhlIExhVGVYMyBQcm9qZWN0LCBiZWxpZXZlIHRoYXQgdGhlIGNvbmRpdGlvbnMgYmVsb3cgZ2l2ZSB5b3UKK3RoZSBmcmVlZG9tIHRvIG1ha2UgYW5kIGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgVGhlIFByb2dyYW0KK3RoYXQgY29uZm9ybSB3aXRoIHdoYXRldmVyIHRlY2huaWNhbCBzcGVjaWZpY2F0aW9ucyB5b3Ugd2lzaCB3aGlsZQorbWFpbnRhaW5pbmcgdGhlIGF2YWlsYWJpbGl0eSwgaW50ZWdyaXR5LCBhbmQgcmVsaWFiaWxpdHkgb2YKK1RoZSBQcm9ncmFtLiAgSWYgeW91IGRvIG5vdCBzZWUgaG93IHRvIGFjaGlldmUgeW91ciBnb2FsIHdoaWxlIAorbWVldGluZyB0aGVzZSBjb25kaXRpb25zLCB0aGVuIHJlYWQgdGhlIGRvY3VtZW50IGBjZmdndWlkZS50ZXhgCitpbiB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gZm9yIHN1Z2dlc3Rpb25zLgorCisKK0NPTkRJVElPTlMgT04gRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworWW91IG1heSBkaXN0cmlidXRlIGEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiBUaGUgUHJvZ3JhbS4KK0Rpc3RyaWJ1dGlvbiBvZiBvbmx5IHBhcnQgb2YgVGhlIFByb2dyYW0gaXMgbm90IGFsbG93ZWQuCisKK1lvdSBtYXkgbm90IG1vZGlmeSBpbiBhbnkgd2F5IGEgZmlsZSBvZiBUaGUgUHJvZ3JhbSB0aGF0IGJlYXJzIGEgbGVnYWwKK25vdGljZSBmb3JiaWRkaW5nIG1vZGlmaWNhdGlvbiBvZiB0aGF0IGZpbGUuCisKK1lvdSBtYXkgZGlzdHJpYnV0ZSBhIG1vZGlmaWVkIGZpbGUgb2YgVGhlIFByb2dyYW0gaWYsIGFuZCBvbmx5IGlmLCB0aGUKK2ZvbGxvd2luZyBlaWdodCBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgMS4gWW91IG11c3QgbWVldCBhbnkgYWRkaXRpb25hbCBjb25kaXRpb25zIGJvcm5lIGJ5IHRoZSBmaWxlIG9uIHRoZQorICAgICBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBmaWxlIGFzIGRlc2NyaWJlZCBiZWxvdworICAgICBpbiB0aGUgc3Vic2VjdGlvbiBgQWRkaXRpb25hbCBDb25kaXRpb25zIG9uIEluZGl2aWR1YWwgRmlsZXMgb2YKKyAgICAgVGhlIFByb2dyYW1gLgorIAorICAyLiBJZiB0aGUgZmlsZSBpcyBhIExhVGVYIHNvZnR3YXJlIGZpbGUsIHRoZW4geW91IG11c3QgbWVldCBhbnkKKyAgICAgYXBwbGljYWJsZSBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgb24gdGhlIGRpc3RyaWJ1dGlvbiBvZiBhIG1vZGlmaWVkCisgICAgIHZlcnNpb24gb2YgdGhlIGZpbGUgdGhhdCBhcmUgZGVzY3JpYmVkIGJlbG93IGluIHRoZSBzdWJzZWN0aW9uCisgICAgIGBBZGRpdGlvbmFsIENvbmRpdGlvbnMgb24gTGFUZVggU29mdHdhcmUgRmlsZXNgLgorIAorICAzLiBZb3UgbXVzdCBub3QgZGlzdHJpYnV0ZSB0aGUgbW9kaWZpZWQgZmlsZSB3aXRoIHRoZSBmaWxlbmFtZSBvZiB0aGUKKyAgICAgb3JpZ2luYWwgZmlsZS4KKyAKKyAgNC4gSW4gdGhlIG1vZGlmaWVkIGZpbGUsIHlvdSBtdXN0IGFja25vd2xlZGdlIHRoZSBhdXRob3JzaGlwIGFuZAorICAgICBuYW1lIG9mIHRoZSBvcmlnaW5hbCBmaWxlLCBhbmQgdGhlIG5hbWUgKGlmIGFueSkgb2YgdGhlIHByb2dyYW0KKyAgICAgd2hpY2ggY29udGFpbnMgaXQuCisgCisgIDUuIFlvdSBtdXN0IGNoYW5nZSBhbnkgaWRlbnRpZmljYXRpb24gc3RyaW5nIGluIHRoZSBmaWxlIHRvIGluZGljYXRlCisgICAgIGNsZWFybHkgdGhhdCB0aGUgbW9kaWZpZWQgZmlsZSBpcyBub3QgcGFydCBvZiBUaGUgUHJvZ3JhbS4KKyAKKyAgNi4gWW91IG11c3QgY2hhbmdlIGFueSBhZGRyZXNzZXMgaW4gdGhlIG1vZGlmaWVkIGZpbGUgZm9yIHRoZQorICAgICByZXBvcnRpbmcgb2YgZXJyb3JzIGluIHRoZSBmaWxlIG9yIGluIFRoZSBQcm9ncmFtIGdlbmVyYWxseSB0bworICAgICBlbnN1cmUgdGhhdCByZXBvcnRzIGZvciBmaWxlcyBubyBsb25nZXIgbWFpbnRhaW5lZCBieSB0aGUgb3JpZ2luYWwKKyAgICAgbWFpbnRhaW5lcnMgd2lsbCBiZSBkaXJlY3RlZCB0byB0aGUgbWFpbnRhaW5lcnMgb2YgdGhlIG1vZGlmaWVkCisgICAgIGZpbGVzLgorIAorICA3LiBZb3UgbXVzdCBkaXN0cmlidXRlIHRoZSBtb2RpZmllZCBmaWxlIHVuZGVyIGEgbGljZW5zZSB0aGF0IGZvcmJpZHMKKyAgICAgZGlzdHJpYnV0aW9uIGJvdGggb2YgdGhlIG1vZGlmaWVkIGZpbGUgYW5kIG9mIGFueSBmaWxlcyBkZXJpdmVkCisgICAgIGZyb20gdGhlIG1vZGlmaWVkIGZpbGUgd2l0aCB0aGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIGZpbGUuCisgCisgIDguIFlvdSBtdXN0IGRvIGVpdGhlciAoQSkgb3IgKEIpOgorCisgICAgICAgKEEpIGRpc3RyaWJ1dGUgYSBjb3B5IG9mIFRoZSBQcm9ncmFtICh0aGF0IGlzLCBhIGNvbXBsZXRlLAorICAgICAgICAgICB1bm1vZGlmaWVkIGNvcHkgb2YgVGhlIFByb2dyYW0pIHRvZ2V0aGVyIHdpdGggdGhlIG1vZGlmaWVkCisgICAgICAgICAgIGZpbGU7IGlmIHlvdXIgZGlzdHJpYnV0aW9uIG9mIHRoZSBtb2RpZmllZCBmaWxlIGlzIG1hZGUgYnkKKyAgICAgICAgICAgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgdGhlIG1vZGlmaWVkIGZpbGUgZnJvbSBhIGRlc2lnbmF0ZWQKKyAgICAgICAgICAgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSBUaGUgUHJvZ3JhbQorICAgICAgICAgICBmcm9tIHRoZSBzYW1lIHBsYWNlIG1lZXRzIHRoaXMgY29uZGl0aW9uLCBldmVuIHRob3VnaCB0aGlyZAorICAgICAgICAgICBwYXJ0aWVzIGFyZSBub3QgY29tcGVsbGVkIHRvIGNvcHkgVGhlIFByb2dyYW0gYWxvbmcgd2l0aCB0aGUKKyAgICAgICAgICAgbW9kaWZpZWQgZmlsZTsKKworICAgICAgIChCKSBwcm92aWRlIHRvIHRob3NlIHdobyByZWNlaXZlIHRoZSBtb2RpZmllZCBmaWxlIGluZm9ybWF0aW9uCisgICAgICAgICAgIHRoYXQgaXMgc3VmZmljaWVudCBmb3IgdGhlbSB0byBvYnRhaW4gYSBjb3B5IG9mIFRoZSBQcm9ncmFtOworICAgICAgICAgICBmb3IgZXhhbXBsZSwgeW91IG1heSBwcm92aWRlIGEgVW5pZm9ybSBSZXNvdXJjZSBMb2NhdG9yIChVUkwpCisgICAgICAgICAgIGZvciBhIHNpdGUgdGhhdCB5b3UgZXhwZWN0IHdpbGwgcHJvdmlkZSB0aGVtIHdpdGggYSBjb3B5IG9mIAorICAgICAgICAgICBUaGUgUHJvZ3JhbSBmcmVlIG9mIGNoYXJnZSAoZWl0aGVyIHRoZSB2ZXJzaW9uIGZyb20gd2hpY2gKKyAgICAgICAgICAgeW91ciBtb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgb3IgcGVyaGFwcyBhIGxhdGVyIHZlcnNpb24pLgorCitOb3RlIHRoYXQgaW4gdGhlIGFib3ZlLCBgZGlzdHJpYnV0aW9uYCBvZiBhIGZpbGUgbWVhbnMgbWFraW5nIHRoZQorZmlsZSBhdmFpbGFibGUgdG8gb3RoZXJzIGJ5IGFueSBtZWFucy4gIFRoaXMgaW5jbHVkZXMsIGZvciBpbnN0YW5jZSwKK2luc3RhbGxpbmcgdGhlIGZpbGUgb24gYW55IG1hY2hpbmUgaW4gc3VjaCBhIHdheSB0aGF0IHRoZSBmaWxlIGlzCithY2Nlc3NpYmxlIGJ5IHVzZXJzIG90aGVyIHRoYW4geW91cnNlbGYuICBgTW9kaWZpY2F0aW9uYCBvZiBhIGZpbGUKK21lYW5zIGFueSBwcm9jZWR1cmUgdGhhdCBwcm9kdWNlcyBhIGRlcml2YXRpdmUgZmlsZSB1bmRlciBhbnkKK2FwcGxpY2FibGUgbGF3IC0tIHRoYXQgaXMsIGEgZmlsZSBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBmaWxlIG9yCithIHNpZ25pZmljYW50IHBvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMKK2FuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4KKworQ2hhbmdpbmcgdGhlIG5hbWUgb2YgYSBmaWxlIGlzIGNvbnNpZGVyZWQgdG8gYmUgYSBtb2RpZmljYXRpb24gb2YKK3RoZSBmaWxlLgorCitUaGUgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgaW4gdGhpcyBsaWNlbnNlIGRvIG5vdCBoYXZlIHRvIGJlCithcHBsaWVkIHRvIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKK2Fib3ZlIGNvbmRpdGlvbnMuICBOb3RlLCBob3dldmVyLCB0aGF0IENvbmRpdGlvbiA3LiBkb2VzIGFwcGx5IHRvCithbnkgc3VjaCBtb2RpZmllZCBmaWxlLgorCitUaGUgY29uZGl0aW9ucyBhYm92ZSBhcmUgbm90IGludGVuZGVkIHRvIHByb2hpYml0LCBhbmQgaGVuY2UgZG8gbm90CithcHBseSB0bywgdGhlIHVwZGF0aW5nLCBieSBhbnkgbWV0aG9kLCBvZiBhIGZpbGUgc28gdGhhdCBpdCBiZWNvbWVzCitpZGVudGljYWwgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoYXQgZmlsZSBvZiBUaGUgUHJvZ3JhbS4KKworIAorCitBIFJlY29tbWVuZGF0aW9uIG9uIE1vZGlmaWNhdGlvbiBXaXRob3V0IERpc3RyaWJ1dGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQgaXMgd2lzZSBuZXZlciB0byBtb2RpZnkgYSBmaWxlIG9mIFRoZSBQcm9ncmFtLCBldmVuIGZvciB5b3VyIG93bgorcGVyc29uYWwgdXNlLCB3aXRob3V0IGFsc28gbWVldGluZyB0aGUgYWJvdmUgZWlnaHQgY29uZGl0aW9ucyBmb3IKK2Rpc3RyaWJ1dGluZyB0aGUgbW9kaWZpZWQgZmlsZS4gIFdoaWxlIHlvdSBtaWdodCBpbnRlbmQgdGhhdCBzdWNoCittb2RpZmllZCBmaWxlcyB3aWxsIG5ldmVyIGJlIGRpc3RyaWJ1dGVkLCBvZnRlbiB0aGlzIHdpbGwgaGFwcGVuIGJ5CithY2NpZGVudCAtLSB5b3UgbWF5IGZvcmdldCB0aGF0IHlvdSBoYXZlIG1vZGlmaWVkIHRoZSBmaWxlOyBvciBpdCBtYXkKK25vdCBvY2N1ciB0byB5b3Ugd2hlbiBhbGxvd2luZyBvdGhlcnMgdG8gYWNjZXNzIHRoZSBtb2RpZmllZCBmaWxlCit0aGF0IHlvdSBhcmUgdGh1cyBkaXN0cmlidXRpbmcgaXQgYW5kIHZpb2xhdGluZyB0aGUgY29uZGl0aW9ucyBvZgordGhpcyBsaWNlbnNlLiAgSXQgaXMgdXN1YWxseSBpbiB5b3VyIGJlc3QgaW50ZXJlc3QgdG8ga2VlcCB5b3VyIGNvcHkKK29mIFRoZSBQcm9ncmFtIGlkZW50aWNhbCB3aXRoIHRoZSBwdWJsaWMgb25lLiAgTWFueSBwcm9ncmFtcyBwcm92aWRlCit3YXlzIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIHRoYXQgcHJvZ3JhbSB3aXRob3V0IGFsdGVyaW5nIGl0cworbGljZW5zZWQgZmlsZXMuCisKKworQWRkaXRpb25hbCBDb25kaXRpb25zIG9uIEluZGl2aWR1YWwgRmlsZXMgb2YgVGhlIFByb2dyYW0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FuIGluZGl2aWR1YWwgZmlsZSBvZiBUaGUgUHJvZ3JhbSBtYXkgYmVhciBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgdGhhdAorc3VwcGxlbWVudCBhbmQvb3Igc3VwZXJzZWRlIHRoZSBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZSBpZiwgYW5kIG9ubHkKK2lmLCBzdWNoIGFkZGl0aW9uYWwgY29uZGl0aW9ucyBleGNsdXNpdmVseSBjb25jZXJuIG1vZGlmaWNhdGlvbiBvZiB0aGUKK2ZpbGUgb3IgZGlzdHJpYnV0aW9uIG9mIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgZmlsZS4gIFRoZSBjb25kaXRpb25zCitvbiBpbmRpdmlkdWFsIGZpbGVzIG9mIFRoZSBQcm9ncmFtIHRoZXJlZm9yZSBtYXkgZGlmZmVyIG9ubHkgd2l0aAorcmVzcGVjdCB0byB0aGUga2luZCBhbmQgZXh0ZW50IG9mIG1vZGlmaWNhdGlvbiBvZiB0aG9zZSBmaWxlcyB0aGF0CitpcyBhbGxvd2VkLCBhbmQgd2l0aCByZXNwZWN0IHRvIHRoZSBkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgdmVyc2lvbnMKK29mIHRob3NlIGZpbGVzLgorCisKK0FkZGl0aW9uYWwgQ29uZGl0aW9ucyBvbiBMYVRlWCBTb2Z0d2FyZSBGaWxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGEgZmlsZSBvZiBUaGUgUHJvZ3JhbSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGggTGFUZVggKHRoYXQgaXMsCitpZiBpdCBpcyBhIExhVGVYIHNvZnR3YXJlIGZpbGUpLCB0aGVuIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbAorY29uZGl0aW9ucywgd2hpY2ggc3VwcGxlbWVudCBhbmQvb3Igc3VwZXJzZWRlIHRoZSBjb25kaXRpb25zCithYm92ZSwgYXBwbHkgdG8gdGhlIGZpbGUgYWNjb3JkaW5nIHRvIGl0cyBmaWxlbmFtZSBleHRlbnNpb246CisKKyAgLSBZb3UgbWF5IG5vdCBtb2RpZnkgYW55IGZpbGUgd2l0aCBmaWxlbmFtZSBleHRlbnNpb24gYC5pbnNgIHNpbmNlCisgICAgdGhlc2UgYXJlIGluc3RhbGxhdGlvbiBmaWxlcyBjb250YWluaW5nIHRoZSBsZWdhbCBub3RpY2VzIHRoYXQgYXJlCisgICAgcGxhY2VkIGluIHRoZSBmaWxlcyB0aGV5IGdlbmVyYXRlLgorIAorICAtIFlvdSBtYXkgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBmaWxlcyB3aXRoIGZpbGVuYW1lCisgICAgZXh0ZW5zaW9uIGAuZmRgIChMYVRlWCBmb250IGRlZmluaXRpb24gZmlsZXMpIHVuZGVyIHRoZSBzdGFuZGFyZAorICAgIGNvbmRpdGlvbnMgb2YgdGhlIExQUEwgYXMgZGVzY3JpYmVkIGFib3ZlLiAgWW91IG1heSBhbHNvIGRpc3RyaWJ1dGUKKyAgICBzdWNoIG1vZGlmaWVkIExhVGVYIGZvbnQgZGVmaW5pdGlvbiBmaWxlcyB3aXRoIHRoZWlyIG9yaWdpbmFsIG5hbWVzCisgICAgcHJvdmlkZWQgdGhhdDoKKyAgICAoMSkgdGhlIG9ubHkgY2hhbmdlcyB0byB0aGUgb3JpZ2luYWwgZmlsZXMgZWl0aGVyIGVuYWJsZSB1c2Ugb2YKKyAgICAgICAgYXZhaWxhYmxlIGZvbnRzIG9yIHByZXZlbnQgYXR0ZW1wdHMgdG8gYWNjZXNzIHVuYXZhaWxhYmxlIGZvbnRzOworICAgICgyKSB5b3UgYWxzbyBkaXN0cmlidXRlIHRoZSBvcmlnaW5hbCwgdW5tb2RpZmllZCBmaWxlcyAoVGVYIGlucHV0CisgICAgICAgIHBhdGhzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgd2hpY2ggc2V0IG9mIExhVGVYIGZvbnQgZGVmaW5pdGlvbgorICAgICAgICBmaWxlcyBpcyBhY3R1YWxseSB1c2VkIGJ5IFRlWCkuCisKKyAgLSBZb3UgbWF5IGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgZmlsZXMgd2l0aCBmaWxlbmFtZQorICAgIGV4dGVuc2lvbiBgLmNmZ2AgKGNvbmZpZ3VyYXRpb24gZmlsZXMpIHdpdGggdGhlaXIgb3JpZ2luYWwgbmFtZXMuCisgICAgVGhlIFByb2dyYW0gbWF5IChhbmQgdXN1YWxseSB3aWxsKSBzcGVjaWZ5IHRoZSByYW5nZSBvZiBjb21tYW5kcworICAgIHRoYXQgYXJlIGFsbG93ZWQgaW4gYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAKK0JlY2F1c2Ugb2YgcG9ydGFiaWxpdHkgYW5kIGV4Y2hhbmdlYWJpbGl0eSBpc3N1ZXMgaW4gTGFUZVggc29mdHdhcmUsCitUaGUgTGFUZVgzIFByb2plY3QgZGVwcmVjYXRlcyB0aGUgZGlzdHJpYnV0aW9uIG9mIG1vZGlmaWVkIHZlcnNpb25zIG9mCitjb21wb25lbnRzIG9mIExhVGVYIG9yIG9mIGdlbmVyYWxseSBhdmFpbGFibGUgY29udHJpYnV0ZWQgY29kZSBmb3IgdGhlbSwKK2J1dCBzdWNoIGRpc3RyaWJ1dGlvbiBjYW4gbWVldCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIGxpY2Vuc2UuCisKKworTk8gV0FSUkFOVFkKKz09PT09PT09PT09CisKK1RoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciBUaGUgUHJvZ3JhbS4gIEV4Y2VwdCB3aGVuIG90aGVyd2lzZSBzdGF0ZWQgaW4KK3dyaXRpbmcsIFRoZSBDb3B5cmlnaHQgSG9sZGVyIHByb3ZpZGVzIFRoZSBQcm9ncmFtIGBhcyBpc2AsIHdpdGhvdXQKK3dhcnJhbnR5IG9mIGFueSBraW5kLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZywgYnV0IG5vdAorbGltaXRlZCB0bywgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yCithIHBhcnRpY3VsYXIgcHVycG9zZS4gIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2UKK29mIFRoZSBQcm9ncmFtIGlzIHdpdGggeW91LiAgU2hvdWxkIFRoZSBQcm9ncmFtIHByb3ZlIGRlZmVjdGl2ZSwgeW91Cithc3N1bWUgdGhlIGNvc3Qgb2YgYWxsIG5lY2Vzc2FyeSBzZXJ2aWNpbmcsIHJlcGFpciwgb3IgY29ycmVjdGlvbi4KKworSW4gbm8gZXZlbnQgdW5sZXNzIGFncmVlZCB0byBpbiB3cml0aW5nIHdpbGwgVGhlIENvcHlyaWdodCBIb2xkZXIsIG9yCithbnkgYXV0aG9yIG5hbWVkIGluIHRoZSBmaWxlcyBvZiBUaGUgUHJvZ3JhbSwgb3IgYW55IG90aGVyIHBhcnR5IHdobyBtYXkKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBUaGUgUHJvZ3JhbSBhcyBwZXJtaXR0ZWQgYmVsb3csIGJlIGxpYWJsZSB0bworeW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IKK2NvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIG91dCBvZiBhbnkgdXNlIG9mIFRoZSBQcm9ncmFtIG9yIG91dCBvZgoraW5hYmlsaXR5IHRvIHVzZSBUaGUgUHJvZ3JhbSAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIGxvc3Mgb2YKK2RhdGEsIGRhdGEgYmVpbmcgcmVuZGVyZWQgaW5hY2N1cmF0ZSwgb3IgbG9zc2VzIHN1c3RhaW5lZCBieSBhbnlvbmUgYXMKK2EgcmVzdWx0IG9mIGFueSBmYWlsdXJlIG9mIFRoZSBQcm9ncmFtIHRvIG9wZXJhdGUgd2l0aCBhbnkgb3RoZXIKK3Byb2dyYW1zKSwgZXZlbiBpZiBUaGUgQ29weXJpZ2h0IEhvbGRlciBvciBzYWlkIGF1dGhvciBvciBzYWlkIG90aGVyCitwYXJ0eSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKworV0hFVEhFUiBBTkQgSE9XIFRPIERJU1RSSUJVVEUgUFJPR1JBTVMgVU5ERVIgVEhJUyBMSUNFTlNFCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGltcG9ydGFudCBpbnN0cnVjdGlvbnMsIGV4YW1wbGVzLCBhbmQKK3JlY29tbWVuZGF0aW9ucyBmb3IgYXV0aG9ycyB3aG8gYXJlIGNvbnNpZGVyaW5nIGRpc3RyaWJ1dGluZyB0aGVpcgorcHJvZ3JhbXMgdW5kZXIgdGhpcyBsaWNlbnNlLiAgVGhlc2UgYXV0aG9ycyBhcmUgYWRkcmVzc2VkIGFzIGB5b3VgIGluCit0aGlzIHNlY3Rpb24uCisKKworQ2hvb3NpbmcgVGhpcyBMaWNlbnNlIG9yIEFub3RoZXIgTGljZW5zZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiBmb3IgYW55IHBhcnQgb2YgeW91ciBwcm9ncmFtIHlvdSB3YW50IG9yIG5lZWQgdG8gdXNlICpkaXN0cmlidXRpb24qCitjb25kaXRpb25zIHRoYXQgZGlmZmVyIGZyb20gdGhvc2UgaW4gdGhpcyBsaWNlbnNlLCB0aGVuIGRvIG5vdCByZWZlciB0bwordGhpcyBsaWNlbnNlIGFueXdoZXJlIGluIHlvdXIgcHJvZ3JhbSBidXQgaW5zdGVhZCBkaXN0cmlidXRlIHlvdXIKK3Byb2dyYW0gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZS4gIFlvdSBtYXkgdXNlIHRoZSB0ZXh0IG9mIHRoaXMgbGljZW5zZQorYXMgYSBtb2RlbCBmb3IgeW91ciBvd24gbGljZW5zZSwgYnV0IHlvdXIgbGljZW5zZSBzaG91bGQgbm90IHJlZmVyIHRvCit0aGUgTFBQTCBvciBvdGhlcndpc2UgZ2l2ZSB0aGUgaW1wcmVzc2lvbiB0aGF0IHlvdXIgcHJvZ3JhbSBpcworZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExQUEwuCisKK1RoZSBkb2N1bWVudCBgbW9kZ3VpZGUudGV4YCBpbiB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gZXhwbGFpbnMKK3RoZSBtb3RpdmF0aW9uIGJlaGluZCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIGxpY2Vuc2UuICBJdCBleHBsYWlucywKK2ZvciBleGFtcGxlLCB3aHkgZGlzdHJpYnV0aW5nIExhVGVYIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgKEdQTCkgd2FzIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZS4gIEV2ZW4gaWYgeW91ciBwcm9ncmFtIGlzCit1bnJlbGF0ZWQgdG8gTGFUZVgsIHRoZSBkaXNjdXNzaW9uIGluIGBtb2RndWlkZS50ZXhgIG1heSBzdGlsbCBiZQorcmVsZXZhbnQsIGFuZCBhdXRob3JzIGludGVuZGluZyB0byBkaXN0cmlidXRlIHRoZWlyIHByb2dyYW1zIHVuZGVyIGFueQorbGljZW5zZSBhcmUgZW5jb3VyYWdlZCB0byByZWFkIGl0LgorCisKK0hvdyB0byBVc2UgVGhpcyBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyB1c2UgdGhpcyBsaWNlbnNlLCBwbGFjZSBpbiBlYWNoIG9mIHRoZSBmaWxlcyBvZiB5b3VyIHByb2dyYW0gYm90aAorYW4gZXhwbGljaXQgY29weXJpZ2h0IG5vdGljZSBpbmNsdWRpbmcgeW91ciBuYW1lIGFuZCB0aGUgeWVhciBhbmQgYWxzbworYSBzdGF0ZW1lbnQgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciBtb2RpZmljYXRpb24gb2YgdGhlIGZpbGUgaXMKK2NvbnN0cmFpbmVkIGJ5IHRoZSBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZS4KKworSGVyZSBpcyBhbiBleGFtcGxlIG9mIHN1Y2ggYSBub3RpY2UgYW5kIHN0YXRlbWVudDoKKworICAlJSBwaWcuZHR4CisgICUlIENvcHlyaWdodCAyMDAxIE0uIFkuIE5hbWUKKyAgJQorICAlIFRoaXMgcHJvZ3JhbSBtYXkgYmUgZGlzdHJpYnV0ZWQgYW5kL29yIG1vZGlmaWVkIHVuZGVyIHRoZQorICAlIGNvbmRpdGlvbnMgb2YgdGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UsIGVpdGhlciB2ZXJzaW9uIDEuMQorICAlIG9mIHRoaXMgbGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAlIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGxpY2Vuc2UgaXMgaW4KKyAgJSAgIGh0dHA6Ly93d3cubGF0ZXgtcHJvamVjdC5vcmcvbHBwbC50eHQKKyAgJSBhbmQgdmVyc2lvbiAxLjEgb3IgbGF0ZXIgaXMgcGFydCBvZiBhbGwgZGlzdHJpYnV0aW9ucyBvZiBMYVRlWCAKKyAgJSB2ZXJzaW9uIDE5OTkvMDYvMDEgb3IgbGF0ZXIuCisgICUKKyAgJSBUaGlzIHByb2dyYW0gY29uc2lzdHMgb2YgdGhlIGZpbGVzIHBpZy5kdHggYW5kIHBpZy5pbnMKKworR2l2ZW4gc3VjaCBhIG5vdGljZSBhbmQgc3RhdGVtZW50IGluIGEgZmlsZSwgdGhlIGNvbmRpdGlvbnMgZ2l2ZW4gaW4KK3RoaXMgbGljZW5zZSBkb2N1bWVudCB3b3VsZCBhcHBseSwgd2l0aCBgVGhlIFByb2dyYW1gIHJlZmVycmluZyB0byB0aGUKK3R3byBmaWxlcyBgcGlnLmR0eGAgYW5kIGBwaWcuaW5zYCwgYW5kIGBUaGUgQ29weXJpZ2h0IEhvbGRlcmAgcmVmZXJyaW5nCit0byB0aGUgcGVyc29uIGBNLiBZLiBOYW1lYC4KKworCitJbXBvcnRhbnQgUmVjb21tZW5kYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyBEZWZpbmluZyBXaGF0IENvbnN0aXR1dGVzIFRoZSBQcm9ncmFtCisKKyAgIFRoZSBMUFBMIHJlcXVpcmVzIHRoYXQgZGlzdHJpYnV0aW9ucyBvZiBUaGUgUHJvZ3JhbSBjb250YWluIGFsbCB0aGUKKyAgIGZpbGVzIG9mIFRoZSBQcm9ncmFtLiAgSXQgaXMgdGhlcmVmb3JlIGltcG9ydGFudCB0aGF0IHlvdSBwcm92aWRlIGEKKyAgIHdheSBmb3IgdGhlIGxpY2Vuc2VlIHRvIGRldGVybWluZSB3aGljaCBmaWxlcyBjb25zdGl0dXRlIFRoZSBQcm9ncmFtLgorICAgVGhpcyBjb3VsZCwgZm9yIGV4YW1wbGUsIGJlIGFjaGlldmVkIGJ5IGV4cGxpY2l0bHkgbGlzdGluZyBhbGwgdGhlCisgICBmaWxlcyBvZiBUaGUgUHJvZ3JhbSBuZWFyIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIGVhY2ggZmlsZSBvciBieQorICAgdXNpbmcgYSBsaW5lIGxpa2UKKworICAgICUgVGhpcyBwcm9ncmFtIGNvbnNpc3RzIG9mIGFsbCBmaWxlcyBsaXN0ZWQgaW4gbWFuaWZlc3QudHh0LgorCisgICBpbiB0aGF0IHBsYWNlLiAgSW4gdGhlIGFic2VuY2Ugb2YgYW4gdW5lcXVpdm9jYWwgbGlzdCBpdCBtaWdodCBiZQorICAgaW1wb3NzaWJsZSBmb3IgdGhlIGxpY2Vuc2VlIHRvIGRldGVybWluZSB3aGF0IGlzIGNvbnNpZGVyZWQgYnkgeW91CisgICB0byBjb21wcmlzZSBUaGUgUHJvZ3JhbS4KKworIE5vdGluZyBFeGNlcHRpb25hbCBGaWxlcworICAKKyAgIElmIFRoZSBQcm9ncmFtIGNvbnRhaW5zIGFueSBmaWxlcyBiZWFyaW5nIGFkZGl0aW9uYWwgY29uZGl0aW9ucyBvbgorICAgbW9kaWZpY2F0aW9uLCBvciBvbiBkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgdmVyc2lvbnMsIG9mIHRob3NlCisgICBmaWxlcyAob3RoZXIgdGhhbiB0aG9zZSBsaXN0ZWQgaW4gYEFkZGl0aW9uYWwgQ29uZGl0aW9ucyBvbiBMYVRlWAorICAgU29mdHdhcmUgRmlsZXNgKSwgdGhlbiBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IFRoZSBQcm9ncmFtIGNvbnRhaW4gYQorICAgcHJvbWluZW50IGZpbGUgdGhhdCBkZWZpbmVzIHRoZSBleGNlcHRpb25hbCBjb25kaXRpb25zLCBhbmQgZWl0aGVyCisgICBsaXN0cyB0aGUgZXhjZXB0aW9uYWwgZmlsZXMgb3IgZGVmaW5lcyBvbmUgb3IgbW9yZSBjYXRlZ29yaWVzIG9mCisgICBleGNlcHRpb25hbCBmaWxlcy4KKworICAgRmlsZXMgY29udGFpbmluZyB0aGUgdGV4dCBvZiBhIGxpY2Vuc2UgKHN1Y2ggYXMgdGhpcyBmaWxlKSBhcmUKKyAgIG9mdGVuIGV4YW1wbGVzIG9mIGZpbGVzIGJlYXJpbmcgbW9yZSByZXN0cmljdGl2ZSBjb25kaXRpb25zIG9uCisgICBtb2RpZmljYXRpb24uICBMYVRlWCBjb25maWd1cmF0aW9uIGZpbGVzICh3aXRoIGZpbGVuYW1lIGV4dGVuc2lvbgorICAgYC5jZmdgKSBhcmUgZXhhbXBsZXMgb2YgZmlsZXMgYmVhcmluZyBsZXNzIHJlc3RyaWN0aXZlIGNvbmRpdGlvbnMKKyAgIG9uIHRoZSBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBmaWxlLiAgVGhlCisgICBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgb24gTGFUZVggc29mdHdhcmUgZ2l2ZW4gYWJvdmUgYXJlIGV4YW1wbGVzIAorICAgb2YgZGVjbGFyaW5nIGEgY2F0ZWdvcnkgb2YgZmlsZXMgYmVhcmluZyBleGNlcHRpb25hbCBhZGRpdGlvbmFsCisgICBjb25kaXRpb25zLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQUEwtMS4yIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUFBMLTEuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzkxYTQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUFBMLTEuMgpAQCAtMCwwICsxLDMyMCBAQAorCisKK1RoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlCis9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQorCitMUFBMIFZlcnNpb24gMS4yICAxOTk5LTA5LTAzCisKK0NvcHlyaWdodCAxOTk5IExhVGVYMyBQcm9qZWN0CisgICAgRXZlcnlvbmUgaXMgYWxsb3dlZCB0byBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzCisgICAgbGljZW5zZSBkb2N1bWVudCwgYnV0IG1vZGlmaWNhdGlvbiBvZiBpdCBpcyBub3QgYWxsb3dlZC4KKworCitQUkVBTUJMRQorPT09PT09PT0KKworVGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UgKExQUEwpIGlzIHRoZSBsaWNlbnNlIHVuZGVyIHdoaWNoIHRoZQorYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gaXMgZGlzdHJpYnV0ZWQuCisKK1lvdSBtYXkgdXNlIHRoaXMgbGljZW5zZSBmb3IgYW55IHByb2dyYW0gdGhhdCB5b3UgaGF2ZSB3cml0dGVuIGFuZCB3aXNoCit0byBkaXN0cmlidXRlLiAgVGhpcyBsaWNlbnNlIG1heSBiZSBwYXJ0aWN1bGFybHkgc3VpdGFibGUgaWYgeW91cgorcHJvZ3JhbSBpcyBUZVgtcmVsYXRlZCAoc3VjaCBhcyBhIExhVGVYIHBhY2thZ2UpLCBidXQgeW91IG1heSB1c2UgaXQKK2V2ZW4gaWYgeW91ciBwcm9ncmFtIGlzIHVucmVsYXRlZCB0byBUZVguICBUaGUgc2VjdGlvbiBgV0hFVEhFUiBBTkQgSE9XCitUTyBESVNUUklCVVRFIFBST0dSQU1TIFVOREVSIFRISVMgTElDRU5TRWAsIGJlbG93LCBnaXZlcyBpbnN0cnVjdGlvbnMsCitleGFtcGxlcywgYW5kIHJlY29tbWVuZGF0aW9ucyBmb3IgYXV0aG9ycyB3aG8gYXJlIGNvbnNpZGVyaW5nCitkaXN0cmlidXRpbmcgdGhlaXIgcHJvZ3JhbXMgdW5kZXIgdGhpcyBsaWNlbnNlLgorCitJbiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGBUaGUgUHJvZ3JhbWAgcmVmZXJzIHRvIGFueSBwcm9ncmFtCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIGxpY2Vuc2UuCisKK1RoaXMgbGljZW5zZSBnaXZlcyBjb25kaXRpb25zIHVuZGVyIHdoaWNoIFRoZSBQcm9ncmFtIG1heSBiZSBkaXN0cmlidXRlZAorYW5kIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggbW9kaWZpZWQgdmVyc2lvbnMgb2YgVGhlIFByb2dyYW0gbWF5IGJlCitkaXN0cmlidXRlZC4gIEluZGl2aWR1YWwgZmlsZXMgb2YgVGhlIFByb2dyYW0gbWF5IGJlYXIgc3VwcGxlbWVudGFyeQorYW5kL29yIHN1cGVyc2VkaW5nIGNvbmRpdGlvbnMgb24gbW9kaWZpY2F0aW9uIG9mIHRoZW1zZWx2ZXMgYW5kIG9uIHRoZQorZGlzdHJpYnV0aW9uIG9mIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZW1zZWx2ZXMsIGJ1dCAqbm8qIGZpbGUgb2YgVGhlCitQcm9ncmFtIG1heSBiZWFyIHN1cHBsZW1lbnRhcnkgb3Igc3VwZXJzZWRpbmcgY29uZGl0aW9ucyBvbiB0aGUKK2Rpc3RyaWJ1dGlvbiBvZiBhbiB1bm1vZGlmaWVkIGNvcHkgb2YgdGhlIGZpbGUuICBBIGRpc3RyaWJ1dG9yIHdpc2hpbmcKK3RvIGRpc3RyaWJ1dGUgYSBjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIFRoZSBQcm9ncmFtIHRoZXJlZm9yZQorbmVlZHMgdG8gY2hlY2sgdGhlIGNvbmRpdGlvbnMgb25seSBpbiB0aGlzIGxpY2Vuc2UgYW5kIG5vd2hlcmUgZWxzZS4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGRpc3RyaWJ1dGlvbiBhbmQvb3IgbW9kaWZpY2F0aW9uIG9mIFRoZSBQcm9ncmFtCithcmUgbm90IGNvdmVyZWQgYnkgdGhpcyBsaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIEluCitwYXJ0aWN1bGFyLCB0aGUgYWN0IG9mIHJ1bm5pbmcgVGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQuCisKK1dlLCB0aGUgTGFUZVgzIFByb2plY3QsIGJlbGlldmUgdGhhdCB0aGUgY29uZGl0aW9ucyBiZWxvdyBnaXZlIHlvdQordGhlIGZyZWVkb20gdG8gbWFrZSBhbmQgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBUaGUgUHJvZ3JhbQordGhhdCBjb25mb3JtIHdpdGggd2hhdGV2ZXIgdGVjaG5pY2FsIHNwZWNpZmljYXRpb25zIHlvdSB3aXNoIHdoaWxlCittYWludGFpbmluZyB0aGUgYXZhaWxhYmlsaXR5LCBpbnRlZ3JpdHksIGFuZCByZWxpYWJpbGl0eSBvZgorVGhlIFByb2dyYW0uICBJZiB5b3UgZG8gbm90IHNlZSBob3cgdG8gYWNoaWV2ZSB5b3VyIGdvYWwgd2hpbGUgCittZWV0aW5nIHRoZXNlIGNvbmRpdGlvbnMsIHRoZW4gcmVhZCB0aGUgZG9jdW1lbnQgYGNmZ2d1aWRlLnRleGAKK2luIHRoZSBiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBmb3Igc3VnZ2VzdGlvbnMuCisKKworQ09ORElUSU9OUyBPTiBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitZb3UgbWF5IGRpc3RyaWJ1dGUgYSBjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIFRoZSBQcm9ncmFtLgorRGlzdHJpYnV0aW9uIG9mIG9ubHkgcGFydCBvZiBUaGUgUHJvZ3JhbSBpcyBub3QgYWxsb3dlZC4KKworWW91IG1heSBub3QgbW9kaWZ5IGluIGFueSB3YXkgYSBmaWxlIG9mIFRoZSBQcm9ncmFtIHRoYXQgYmVhcnMgYSBsZWdhbAorbm90aWNlIGZvcmJpZGRpbmcgbW9kaWZpY2F0aW9uIG9mIHRoYXQgZmlsZS4KKworWW91IG1heSBkaXN0cmlidXRlIGEgbW9kaWZpZWQgZmlsZSBvZiBUaGUgUHJvZ3JhbSBpZiwgYW5kIG9ubHkgaWYsIHRoZQorZm9sbG93aW5nIGVpZ2h0IGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAxLiBZb3UgbXVzdCBtZWV0IGFueSBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgYm9ybmUgYnkgdGhlIGZpbGUgb24gdGhlCisgICAgIGRpc3RyaWJ1dGlvbiBvZiBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGZpbGUgYXMgZGVzY3JpYmVkIGJlbG93CisgICAgIGluIHRoZSBzdWJzZWN0aW9uIGBBZGRpdGlvbmFsIENvbmRpdGlvbnMgb24gSW5kaXZpZHVhbCBGaWxlcyBvZgorICAgICBUaGUgUHJvZ3JhbWAuCisgCisgIDIuIElmIHRoZSBmaWxlIGlzIGEgTGFUZVggc29mdHdhcmUgZmlsZSwgdGhlbiB5b3UgbXVzdCBtZWV0IGFueQorICAgICBhcHBsaWNhYmxlIGFkZGl0aW9uYWwgY29uZGl0aW9ucyBvbiB0aGUgZGlzdHJpYnV0aW9uIG9mIGEgbW9kaWZpZWQKKyAgICAgdmVyc2lvbiBvZiB0aGUgZmlsZSB0aGF0IGFyZSBkZXNjcmliZWQgYmVsb3cgaW4gdGhlIHN1YnNlY3Rpb24KKyAgICAgYEFkZGl0aW9uYWwgQ29uZGl0aW9ucyBvbiBMYVRlWCBTb2Z0d2FyZSBGaWxlc2AuCisgCisgIDMuIFlvdSBtdXN0IG5vdCBkaXN0cmlidXRlIHRoZSBtb2RpZmllZCBmaWxlIHdpdGggdGhlIGZpbGVuYW1lIG9mIHRoZQorICAgICBvcmlnaW5hbCBmaWxlLgorIAorICA0LiBJbiB0aGUgbW9kaWZpZWQgZmlsZSwgeW91IG11c3QgYWNrbm93bGVkZ2UgdGhlIGF1dGhvcnNoaXAgYW5kCisgICAgIG5hbWUgb2YgdGhlIG9yaWdpbmFsIGZpbGUsIGFuZCB0aGUgbmFtZSAoaWYgYW55KSBvZiB0aGUgcHJvZ3JhbQorICAgICB3aGljaCBjb250YWlucyBpdC4KKyAKKyAgNS4gWW91IG11c3QgY2hhbmdlIGFueSBpZGVudGlmaWNhdGlvbiBzdHJpbmcgaW4gdGhlIGZpbGUgdG8gaW5kaWNhdGUKKyAgICAgY2xlYXJseSB0aGF0IHRoZSBtb2RpZmllZCBmaWxlIGlzIG5vdCBwYXJ0IG9mIFRoZSBQcm9ncmFtLgorIAorICA2LiBZb3UgbXVzdCBjaGFuZ2UgYW55IGFkZHJlc3NlcyBpbiB0aGUgbW9kaWZpZWQgZmlsZSBmb3IgdGhlCisgICAgIHJlcG9ydGluZyBvZiBlcnJvcnMgaW4gdGhlIGZpbGUgb3IgaW4gVGhlIFByb2dyYW0gZ2VuZXJhbGx5IHRvCisgICAgIGVuc3VyZSB0aGF0IHJlcG9ydHMgZm9yIGZpbGVzIG5vIGxvbmdlciBtYWludGFpbmVkIGJ5IHRoZSBvcmlnaW5hbAorICAgICBtYWludGFpbmVycyB3aWxsIGJlIGRpcmVjdGVkIHRvIHRoZSBtYWludGFpbmVycyBvZiB0aGUgbW9kaWZpZWQKKyAgICAgZmlsZXMuCisgCisgIDcuIFlvdSBtdXN0IGRpc3RyaWJ1dGUgdGhlIG1vZGlmaWVkIGZpbGUgdW5kZXIgYSBsaWNlbnNlIHRoYXQgZm9yYmlkcworICAgICBkaXN0cmlidXRpb24gYm90aCBvZiB0aGUgbW9kaWZpZWQgZmlsZSBhbmQgb2YgYW55IGZpbGVzIGRlcml2ZWQKKyAgICAgZnJvbSB0aGUgbW9kaWZpZWQgZmlsZSB3aXRoIHRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgZmlsZS4KKyAKKyAgOC4gWW91IG11c3QgZG8gZWl0aGVyIChBKSBvciAoQik6CisKKyAgICAgICAoQSkgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgVGhlIFByb2dyYW0gKHRoYXQgaXMsIGEgY29tcGxldGUsCisgICAgICAgICAgIHVubW9kaWZpZWQgY29weSBvZiBUaGUgUHJvZ3JhbSkgdG9nZXRoZXIgd2l0aCB0aGUgbW9kaWZpZWQKKyAgICAgICAgICAgZmlsZTsgaWYgeW91ciBkaXN0cmlidXRpb24gb2YgdGhlIG1vZGlmaWVkIGZpbGUgaXMgbWFkZSBieQorICAgICAgICAgICBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSB0aGUgbW9kaWZpZWQgZmlsZSBmcm9tIGEgZGVzaWduYXRlZAorICAgICAgICAgICBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IFRoZSBQcm9ncmFtCisgICAgICAgICAgIGZyb20gdGhlIHNhbWUgcGxhY2UgbWVldHMgdGhpcyBjb25kaXRpb24sIGV2ZW4gdGhvdWdoIHRoaXJkCisgICAgICAgICAgIHBhcnRpZXMgYXJlIG5vdCBjb21wZWxsZWQgdG8gY29weSBUaGUgUHJvZ3JhbSBhbG9uZyB3aXRoIHRoZQorICAgICAgICAgICBtb2RpZmllZCBmaWxlOworCisgICAgICAgKEIpIHByb3ZpZGUgdG8gdGhvc2Ugd2hvIHJlY2VpdmUgdGhlIG1vZGlmaWVkIGZpbGUgaW5mb3JtYXRpb24KKyAgICAgICAgICAgdGhhdCBpcyBzdWZmaWNpZW50IGZvciB0aGVtIHRvIG9idGFpbiBhIGNvcHkgb2YgVGhlIFByb2dyYW07CisgICAgICAgICAgIGZvciBleGFtcGxlLCB5b3UgbWF5IHByb3ZpZGUgYSBVbmlmb3JtIFJlc291cmNlIExvY2F0b3IgKFVSTCkKKyAgICAgICAgICAgZm9yIGEgc2l0ZSB0aGF0IHlvdSBleHBlY3Qgd2lsbCBwcm92aWRlIHRoZW0gd2l0aCBhIGNvcHkgb2YgCisgICAgICAgICAgIFRoZSBQcm9ncmFtIGZyZWUgb2YgY2hhcmdlIChlaXRoZXIgdGhlIHZlcnNpb24gZnJvbSB3aGljaAorICAgICAgICAgICB5b3VyIG1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBvciBwZXJoYXBzIGEgbGF0ZXIgdmVyc2lvbikuCisKK05vdGUgdGhhdCBpbiB0aGUgYWJvdmUsIGBkaXN0cmlidXRpb25gIG9mIGEgZmlsZSBtZWFucyBtYWtpbmcgdGhlCitmaWxlIGF2YWlsYWJsZSB0byBvdGhlcnMgYnkgYW55IG1lYW5zLiAgVGhpcyBpbmNsdWRlcywgZm9yIGluc3RhbmNlLAoraW5zdGFsbGluZyB0aGUgZmlsZSBvbiBhbnkgbWFjaGluZSBpbiBzdWNoIGEgd2F5IHRoYXQgdGhlIGZpbGUgaXMKK2FjY2Vzc2libGUgYnkgdXNlcnMgb3RoZXIgdGhhbiB5b3Vyc2VsZi4gIGBNb2RpZmljYXRpb25gIG9mIGEgZmlsZQorbWVhbnMgYW55IHByb2NlZHVyZSB0aGF0IHByb2R1Y2VzIGEgZGVyaXZhdGl2ZSBmaWxlIHVuZGVyIGFueQorYXBwbGljYWJsZSBsYXcgLS0gdGhhdCBpcywgYSBmaWxlIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGZpbGUgb3IKK2Egc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucworYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLgorCitDaGFuZ2luZyB0aGUgbmFtZSBvZiBhIGZpbGUgKG90aGVyIHRoYW4gYXMgbmVjZXNzaXRhdGVkIGJ5IHRoZSBmaWxlCitjb252ZW50aW9ucyBvZiB0aGUgdGFyZ2V0IGZpbGUgc3lzdGVtcykgaXMgY29uc2lkZXJlZCB0byBiZSBhCittb2RpZmljYXRpb24gb2YgdGhlIGZpbGUuCisKK1RoZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UgZG8gbm90IGhhdmUgdG8gYmUKK2FwcGxpZWQgdG8gZmlsZXMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZQorYWJvdmUgY29uZGl0aW9ucy4gIE5vdGUsIGhvd2V2ZXIsIHRoYXQgQ29uZGl0aW9uIDcuIGRvZXMgYXBwbHkgdG8KK2FueSBzdWNoIG1vZGlmaWVkIGZpbGUuCisKK1RoZSBjb25kaXRpb25zIGFib3ZlIGFyZSBub3QgaW50ZW5kZWQgdG8gcHJvaGliaXQsIGFuZCBoZW5jZSBkbyBub3QKK2FwcGx5IHRvLCB0aGUgdXBkYXRpbmcsIGJ5IGFueSBtZXRob2QsIG9mIGEgZmlsZSBzbyB0aGF0IGl0IGJlY29tZXMKK2lkZW50aWNhbCB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhhdCBmaWxlIG9mIFRoZSBQcm9ncmFtLgorCisgCisKK0EgUmVjb21tZW5kYXRpb24gb24gTW9kaWZpY2F0aW9uIFdpdGhvdXQgRGlzdHJpYnV0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJdCBpcyB3aXNlIG5ldmVyIHRvIG1vZGlmeSBhIGZpbGUgb2YgVGhlIFByb2dyYW0sIGV2ZW4gZm9yIHlvdXIgb3duCitwZXJzb25hbCB1c2UsIHdpdGhvdXQgYWxzbyBtZWV0aW5nIHRoZSBhYm92ZSBlaWdodCBjb25kaXRpb25zIGZvcgorZGlzdHJpYnV0aW5nIHRoZSBtb2RpZmllZCBmaWxlLiAgV2hpbGUgeW91IG1pZ2h0IGludGVuZCB0aGF0IHN1Y2gKK21vZGlmaWVkIGZpbGVzIHdpbGwgbmV2ZXIgYmUgZGlzdHJpYnV0ZWQsIG9mdGVuIHRoaXMgd2lsbCBoYXBwZW4gYnkKK2FjY2lkZW50IC0tIHlvdSBtYXkgZm9yZ2V0IHRoYXQgeW91IGhhdmUgbW9kaWZpZWQgdGhlIGZpbGU7IG9yIGl0IG1heQorbm90IG9jY3VyIHRvIHlvdSB3aGVuIGFsbG93aW5nIG90aGVycyB0byBhY2Nlc3MgdGhlIG1vZGlmaWVkIGZpbGUKK3RoYXQgeW91IGFyZSB0aHVzIGRpc3RyaWJ1dGluZyBpdCBhbmQgdmlvbGF0aW5nIHRoZSBjb25kaXRpb25zIG9mCit0aGlzIGxpY2Vuc2UuICBJdCBpcyB1c3VhbGx5IGluIHlvdXIgYmVzdCBpbnRlcmVzdCB0byBrZWVwIHlvdXIgY29weQorb2YgVGhlIFByb2dyYW0gaWRlbnRpY2FsIHdpdGggdGhlIHB1YmxpYyBvbmUuICBNYW55IHByb2dyYW1zIHByb3ZpZGUKK3dheXMgdG8gY29udHJvbCB0aGUgYmVoYXZpb3Igb2YgdGhhdCBwcm9ncmFtIHdpdGhvdXQgYWx0ZXJpbmcgaXRzCitsaWNlbnNlZCBmaWxlcy4KKworCitBZGRpdGlvbmFsIENvbmRpdGlvbnMgb24gSW5kaXZpZHVhbCBGaWxlcyBvZiBUaGUgUHJvZ3JhbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW4gaW5kaXZpZHVhbCBmaWxlIG9mIFRoZSBQcm9ncmFtIG1heSBiZWFyIGFkZGl0aW9uYWwgY29uZGl0aW9ucyB0aGF0CitzdXBwbGVtZW50IGFuZC9vciBzdXBlcnNlZGUgdGhlIGNvbmRpdGlvbnMgaW4gdGhpcyBsaWNlbnNlIGlmLCBhbmQgb25seQoraWYsIHN1Y2ggYWRkaXRpb25hbCBjb25kaXRpb25zIGV4Y2x1c2l2ZWx5IGNvbmNlcm4gbW9kaWZpY2F0aW9uIG9mIHRoZQorZmlsZSBvciBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBmaWxlLiAgVGhlIGNvbmRpdGlvbnMKK29uIGluZGl2aWR1YWwgZmlsZXMgb2YgVGhlIFByb2dyYW0gdGhlcmVmb3JlIG1heSBkaWZmZXIgb25seSB3aXRoCityZXNwZWN0IHRvIHRoZSBraW5kIGFuZCBleHRlbnQgb2YgbW9kaWZpY2F0aW9uIG9mIHRob3NlIGZpbGVzIHRoYXQKK2lzIGFsbG93ZWQsIGFuZCB3aXRoIHJlc3BlY3QgdG8gdGhlIGRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucworb2YgdGhvc2UgZmlsZXMuCisKKworQWRkaXRpb25hbCBDb25kaXRpb25zIG9uIExhVGVYIFNvZnR3YXJlIEZpbGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgYSBmaWxlIG9mIFRoZSBQcm9ncmFtIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCBMYVRlWCAodGhhdCBpcywKK2lmIGl0IGlzIGEgTGFUZVggc29mdHdhcmUgZmlsZSksIHRoZW4gdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsCitjb25kaXRpb25zLCB3aGljaCBzdXBwbGVtZW50IGFuZC9vciBzdXBlcnNlZGUgdGhlIGNvbmRpdGlvbnMKK2Fib3ZlLCBhcHBseSB0byB0aGUgZmlsZSBhY2NvcmRpbmcgdG8gaXRzIGZpbGVuYW1lIGV4dGVuc2lvbjoKKworICAtIFlvdSBtYXkgbm90IG1vZGlmeSBhbnkgZmlsZSB3aXRoIGZpbGVuYW1lIGV4dGVuc2lvbiBgLmluc2Agc2luY2UKKyAgICB0aGVzZSBhcmUgaW5zdGFsbGF0aW9uIGZpbGVzIGNvbnRhaW5pbmcgdGhlIGxlZ2FsIG5vdGljZXMgdGhhdCBhcmUKKyAgICBwbGFjZWQgaW4gdGhlIGZpbGVzIHRoZXkgZ2VuZXJhdGUuCisgCisgIC0gWW91IG1heSBkaXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGZpbGVzIHdpdGggZmlsZW5hbWUKKyAgICBleHRlbnNpb24gYC5mZGAgKExhVGVYIGZvbnQgZGVmaW5pdGlvbiBmaWxlcykgdW5kZXIgdGhlIHN0YW5kYXJkCisgICAgY29uZGl0aW9ucyBvZiB0aGUgTFBQTCBhcyBkZXNjcmliZWQgYWJvdmUuICBZb3UgbWF5IGFsc28gZGlzdHJpYnV0ZQorICAgIHN1Y2ggbW9kaWZpZWQgTGFUZVggZm9udCBkZWZpbml0aW9uIGZpbGVzIHdpdGggdGhlaXIgb3JpZ2luYWwgbmFtZXMKKyAgICBwcm92aWRlZCB0aGF0OgorICAgICgxKSB0aGUgb25seSBjaGFuZ2VzIHRvIHRoZSBvcmlnaW5hbCBmaWxlcyBlaXRoZXIgZW5hYmxlIHVzZSBvZgorICAgICAgICBhdmFpbGFibGUgZm9udHMgb3IgcHJldmVudCBhdHRlbXB0cyB0byBhY2Nlc3MgdW5hdmFpbGFibGUgZm9udHM7CisgICAgKDIpIHlvdSBhbHNvIGRpc3RyaWJ1dGUgdGhlIG9yaWdpbmFsLCB1bm1vZGlmaWVkIGZpbGVzIChUZVggaW5wdXQKKyAgICAgICAgcGF0aHMgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB3aGljaCBzZXQgb2YgTGFUZVggZm9udCBkZWZpbml0aW9uCisgICAgICAgIGZpbGVzIGlzIGFjdHVhbGx5IHVzZWQgYnkgVGVYKS4KKworICAtIFlvdSBtYXkgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBmaWxlcyB3aXRoIGZpbGVuYW1lCisgICAgZXh0ZW5zaW9uIGAuY2ZnYCAoY29uZmlndXJhdGlvbiBmaWxlcykgd2l0aCB0aGVpciBvcmlnaW5hbCBuYW1lcy4KKyAgICBUaGUgUHJvZ3JhbSBtYXkgKGFuZCB1c3VhbGx5IHdpbGwpIHNwZWNpZnkgdGhlIHJhbmdlIG9mIGNvbW1hbmRzCisgICAgdGhhdCBhcmUgYWxsb3dlZCBpbiBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBmaWxlLgorIAorQmVjYXVzZSBvZiBwb3J0YWJpbGl0eSBhbmQgZXhjaGFuZ2VhYmlsaXR5IGlzc3VlcyBpbiBMYVRlWCBzb2Z0d2FyZSwKK1RoZSBMYVRlWDMgUHJvamVjdCBkZXByZWNhdGVzIHRoZSBkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgdmVyc2lvbnMgb2YKK2NvbXBvbmVudHMgb2YgTGFUZVggb3Igb2YgZ2VuZXJhbGx5IGF2YWlsYWJsZSBjb250cmlidXRlZCBjb2RlIGZvciB0aGVtLAorYnV0IHN1Y2ggZGlzdHJpYnV0aW9uIGNhbiBtZWV0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5zZS4KKworCitOTyBXQVJSQU5UWQorPT09PT09PT09PT0KKworVGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIFRoZSBQcm9ncmFtLiAgRXhjZXB0IHdoZW4gb3RoZXJ3aXNlIHN0YXRlZCBpbgord3JpdGluZywgVGhlIENvcHlyaWdodCBIb2xkZXIgcHJvdmlkZXMgVGhlIFByb2dyYW0gYGFzIGlzYCwgd2l0aG91dAord2FycmFudHkgb2YgYW55IGtpbmQsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCBidXQgbm90CitsaW1pdGVkIHRvLCB0aGUgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IKK2EgcGFydGljdWxhciBwdXJwb3NlLiAgVGhlIGVudGlyZSByaXNrIGFzIHRvIHRoZSBxdWFsaXR5IGFuZCBwZXJmb3JtYW5jZQorb2YgVGhlIFByb2dyYW0gaXMgd2l0aCB5b3UuICBTaG91bGQgVGhlIFByb2dyYW0gcHJvdmUgZGVmZWN0aXZlLCB5b3UKK2Fzc3VtZSB0aGUgY29zdCBvZiBhbGwgbmVjZXNzYXJ5IHNlcnZpY2luZywgcmVwYWlyLCBvciBjb3JyZWN0aW9uLgorCitJbiBubyBldmVudCB1bmxlc3MgYWdyZWVkIHRvIGluIHdyaXRpbmcgd2lsbCBUaGUgQ29weXJpZ2h0IEhvbGRlciwgb3IKK2FueSBhdXRob3IgbmFtZWQgaW4gdGhlIGZpbGVzIG9mIFRoZSBQcm9ncmFtLCBvciBhbnkgb3RoZXIgcGFydHkgd2hvIG1heQorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IFRoZSBQcm9ncmFtIGFzIHBlcm1pdHRlZCBhYm92ZSwgYmUgbGlhYmxlIHRvCit5b3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvcgorY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgb3V0IG9mIGFueSB1c2Ugb2YgVGhlIFByb2dyYW0gb3Igb3V0IG9mCitpbmFiaWxpdHkgdG8gdXNlIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgbG9zcyBvZgorZGF0YSwgZGF0YSBiZWluZyByZW5kZXJlZCBpbmFjY3VyYXRlLCBvciBsb3NzZXMgc3VzdGFpbmVkIGJ5IGFueW9uZSBhcworYSByZXN1bHQgb2YgYW55IGZhaWx1cmUgb2YgVGhlIFByb2dyYW0gdG8gb3BlcmF0ZSB3aXRoIGFueSBvdGhlcgorcHJvZ3JhbXMpLCBldmVuIGlmIFRoZSBDb3B5cmlnaHQgSG9sZGVyIG9yIHNhaWQgYXV0aG9yIG9yIHNhaWQgb3RoZXIKK3BhcnR5IGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworCitXSEVUSEVSIEFORCBIT1cgVE8gRElTVFJJQlVURSBQUk9HUkFNUyBVTkRFUiBUSElTIExJQ0VOU0UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHNlY3Rpb24gY29udGFpbnMgaW1wb3J0YW50IGluc3RydWN0aW9ucywgZXhhbXBsZXMsIGFuZAorcmVjb21tZW5kYXRpb25zIGZvciBhdXRob3JzIHdobyBhcmUgY29uc2lkZXJpbmcgZGlzdHJpYnV0aW5nIHRoZWlyCitwcm9ncmFtcyB1bmRlciB0aGlzIGxpY2Vuc2UuICBUaGVzZSBhdXRob3JzIGFyZSBhZGRyZXNzZWQgYXMgYHlvdWAgaW4KK3RoaXMgc2VjdGlvbi4KKworCitDaG9vc2luZyBUaGlzIExpY2Vuc2Ugb3IgQW5vdGhlciBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGZvciBhbnkgcGFydCBvZiB5b3VyIHByb2dyYW0geW91IHdhbnQgb3IgbmVlZCB0byB1c2UgKmRpc3RyaWJ1dGlvbioKK2NvbmRpdGlvbnMgdGhhdCBkaWZmZXIgZnJvbSB0aG9zZSBpbiB0aGlzIGxpY2Vuc2UsIHRoZW4gZG8gbm90IHJlZmVyIHRvCit0aGlzIGxpY2Vuc2UgYW55d2hlcmUgaW4geW91ciBwcm9ncmFtIGJ1dCBpbnN0ZWFkIGRpc3RyaWJ1dGUgeW91cgorcHJvZ3JhbSB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlLiAgWW91IG1heSB1c2UgdGhlIHRleHQgb2YgdGhpcyBsaWNlbnNlCithcyBhIG1vZGVsIGZvciB5b3VyIG93biBsaWNlbnNlLCBidXQgeW91ciBsaWNlbnNlIHNob3VsZCBub3QgcmVmZXIgdG8KK3RoZSBMUFBMIG9yIG90aGVyd2lzZSBnaXZlIHRoZSBpbXByZXNzaW9uIHRoYXQgeW91ciBwcm9ncmFtIGlzCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTFBQTC4KKworVGhlIGRvY3VtZW50IGBtb2RndWlkZS50ZXhgIGluIHRoZSBiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBleHBsYWlucwordGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5zZS4gIEl0IGV4cGxhaW5zLAorZm9yIGV4YW1wbGUsIHdoeSBkaXN0cmlidXRpbmcgTGFUZVggdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSAoR1BMKSB3YXMgY29uc2lkZXJlZCBpbmFwcHJvcHJpYXRlLiAgRXZlbiBpZiB5b3VyIHByb2dyYW0gaXMKK3VucmVsYXRlZCB0byBMYVRlWCwgdGhlIGRpc2N1c3Npb24gaW4gYG1vZGd1aWRlLnRleGAgbWF5IHN0aWxsIGJlCityZWxldmFudCwgYW5kIGF1dGhvcnMgaW50ZW5kaW5nIHRvIGRpc3RyaWJ1dGUgdGhlaXIgcHJvZ3JhbXMgdW5kZXIgYW55CitsaWNlbnNlIGFyZSBlbmNvdXJhZ2VkIHRvIHJlYWQgaXQuCisKKworSG93IHRvIFVzZSBUaGlzIExpY2Vuc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHVzZSB0aGlzIGxpY2Vuc2UsIHBsYWNlIGluIGVhY2ggb2YgdGhlIGZpbGVzIG9mIHlvdXIgcHJvZ3JhbSBib3RoCithbiBleHBsaWNpdCBjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyB5b3VyIG5hbWUgYW5kIHRoZSB5ZWFyIGFuZCBhbHNvCithIHN0YXRlbWVudCB0aGF0IHRoZSBkaXN0cmlidXRpb24gYW5kL29yIG1vZGlmaWNhdGlvbiBvZiB0aGUgZmlsZSBpcworY29uc3RyYWluZWQgYnkgdGhlIGNvbmRpdGlvbnMgaW4gdGhpcyBsaWNlbnNlLgorCitIZXJlIGlzIGFuIGV4YW1wbGUgb2Ygc3VjaCBhIG5vdGljZSBhbmQgc3RhdGVtZW50OgorCisgICUlIHBpZy5kdHgKKyAgJSUgQ29weXJpZ2h0IDIwMDEgTS4gWS4gTmFtZQorICAlCisgICUgVGhpcyBwcm9ncmFtIG1heSBiZSBkaXN0cmlidXRlZCBhbmQvb3IgbW9kaWZpZWQgdW5kZXIgdGhlCisgICUgY29uZGl0aW9ucyBvZiB0aGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZSwgZWl0aGVyIHZlcnNpb24gMS4yCisgICUgb2YgdGhpcyBsaWNlbnNlIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICUgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbGljZW5zZSBpcyBpbgorICAlICAgaHR0cDovL3d3dy5sYXRleC1wcm9qZWN0Lm9yZy9scHBsLnR4dAorICAlIGFuZCB2ZXJzaW9uIDEuMiBvciBsYXRlciBpcyBwYXJ0IG9mIGFsbCBkaXN0cmlidXRpb25zIG9mIExhVGVYIAorICAlIHZlcnNpb24gMTk5OS8xMi8wMSBvciBsYXRlci4KKyAgJQorICAlIFRoaXMgcHJvZ3JhbSBjb25zaXN0cyBvZiB0aGUgZmlsZXMgcGlnLmR0eCBhbmQgcGlnLmlucworCitHaXZlbiBzdWNoIGEgbm90aWNlIGFuZCBzdGF0ZW1lbnQgaW4gYSBmaWxlLCB0aGUgY29uZGl0aW9ucyBnaXZlbiBpbgordGhpcyBsaWNlbnNlIGRvY3VtZW50IHdvdWxkIGFwcGx5LCB3aXRoIGBUaGUgUHJvZ3JhbWAgcmVmZXJyaW5nIHRvIHRoZQordHdvIGZpbGVzIGBwaWcuZHR4YCBhbmQgYHBpZy5pbnNgLCBhbmQgYFRoZSBDb3B5cmlnaHQgSG9sZGVyYCByZWZlcnJpbmcKK3RvIHRoZSBwZXJzb24gYE0uIFkuIE5hbWVgLgorCisKK0ltcG9ydGFudCBSZWNvbW1lbmRhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIERlZmluaW5nIFdoYXQgQ29uc3RpdHV0ZXMgVGhlIFByb2dyYW0KKworICAgVGhlIExQUEwgcmVxdWlyZXMgdGhhdCBkaXN0cmlidXRpb25zIG9mIFRoZSBQcm9ncmFtIGNvbnRhaW4gYWxsIHRoZQorICAgZmlsZXMgb2YgVGhlIFByb2dyYW0uICBJdCBpcyB0aGVyZWZvcmUgaW1wb3J0YW50IHRoYXQgeW91IHByb3ZpZGUgYQorICAgd2F5IGZvciB0aGUgbGljZW5zZWUgdG8gZGV0ZXJtaW5lIHdoaWNoIGZpbGVzIGNvbnN0aXR1dGUgVGhlIFByb2dyYW0uCisgICBUaGlzIGNvdWxkLCBmb3IgZXhhbXBsZSwgYmUgYWNoaWV2ZWQgYnkgZXhwbGljaXRseSBsaXN0aW5nIGFsbCB0aGUKKyAgIGZpbGVzIG9mIFRoZSBQcm9ncmFtIG5lYXIgdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgZWFjaCBmaWxlIG9yIGJ5CisgICB1c2luZyBhIGxpbmUgbGlrZQorCisgICAgJSBUaGlzIHByb2dyYW0gY29uc2lzdHMgb2YgYWxsIGZpbGVzIGxpc3RlZCBpbiBtYW5pZmVzdC50eHQuCisKKyAgIGluIHRoYXQgcGxhY2UuICBJbiB0aGUgYWJzZW5jZSBvZiBhbiB1bmVxdWl2b2NhbCBsaXN0IGl0IG1pZ2h0IGJlCisgICBpbXBvc3NpYmxlIGZvciB0aGUgbGljZW5zZWUgdG8gZGV0ZXJtaW5lIHdoYXQgaXMgY29uc2lkZXJlZCBieSB5b3UKKyAgIHRvIGNvbXByaXNlIFRoZSBQcm9ncmFtLgorCisgTm90aW5nIEV4Y2VwdGlvbmFsIEZpbGVzCisgIAorICAgSWYgVGhlIFByb2dyYW0gY29udGFpbnMgYW55IGZpbGVzIGJlYXJpbmcgYWRkaXRpb25hbCBjb25kaXRpb25zIG9uCisgICBtb2RpZmljYXRpb24sIG9yIG9uIGRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucywgb2YgdGhvc2UKKyAgIGZpbGVzIChvdGhlciB0aGFuIHRob3NlIGxpc3RlZCBpbiBgQWRkaXRpb25hbCBDb25kaXRpb25zIG9uIExhVGVYCisgICBTb2Z0d2FyZSBGaWxlc2ApLCB0aGVuIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgVGhlIFByb2dyYW0gY29udGFpbiBhCisgICBwcm9taW5lbnQgZmlsZSB0aGF0IGRlZmluZXMgdGhlIGV4Y2VwdGlvbmFsIGNvbmRpdGlvbnMsIGFuZCBlaXRoZXIKKyAgIGxpc3RzIHRoZSBleGNlcHRpb25hbCBmaWxlcyBvciBkZWZpbmVzIG9uZSBvciBtb3JlIGNhdGVnb3JpZXMgb2YKKyAgIGV4Y2VwdGlvbmFsIGZpbGVzLgorCisgICBGaWxlcyBjb250YWluaW5nIHRoZSB0ZXh0IG9mIGEgbGljZW5zZSAoc3VjaCBhcyB0aGlzIGZpbGUpIGFyZQorICAgb2Z0ZW4gZXhhbXBsZXMgb2YgZmlsZXMgYmVhcmluZyBtb3JlIHJlc3RyaWN0aXZlIGNvbmRpdGlvbnMgb24KKyAgIG1vZGlmaWNhdGlvbi4gIExhVGVYIGNvbmZpZ3VyYXRpb24gZmlsZXMgKHdpdGggZmlsZW5hbWUgZXh0ZW5zaW9uCisgICBgLmNmZ2ApIGFyZSBleGFtcGxlcyBvZiBmaWxlcyBiZWFyaW5nIGxlc3MgcmVzdHJpY3RpdmUgY29uZGl0aW9ucworICAgb24gdGhlIGRpc3RyaWJ1dGlvbiBvZiBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGZpbGUuICBUaGUKKyAgIGFkZGl0aW9uYWwgY29uZGl0aW9ucyBvbiBMYVRlWCBzb2Z0d2FyZSBnaXZlbiBhYm92ZSBhcmUgZXhhbXBsZXMgCisgICBvZiBkZWNsYXJpbmcgYSBjYXRlZ29yeSBvZiBmaWxlcyBiZWFyaW5nIGV4Y2VwdGlvbmFsIGFkZGl0aW9uYWwKKyAgIGNvbmRpdGlvbnMuCisKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjNjIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUFBMLTEuM2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU1ZTNiYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjNjCkBAIC0wLDAgKzEsNDE4IEBACisKK1RoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlCis9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQorCitMUFBMIFZlcnNpb24gMS4zYyAgMjAwOC0wNS0wNAorCitDb3B5cmlnaHQgMTk5OSAyMDAyLTIwMDggTGFUZVgzIFByb2plY3QKKyAgICBFdmVyeW9uZSBpcyBhbGxvd2VkIHRvIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMKKyAgICBsaWNlbnNlIGRvY3VtZW50LCBidXQgbW9kaWZpY2F0aW9uIG9mIGl0IGlzIG5vdCBhbGxvd2VkLgorCisKK1BSRUFNQkxFCis9PT09PT09PQorCitUaGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZSAoTFBQTCkgaXMgdGhlIHByaW1hcnkgbGljZW5zZSB1bmRlcgord2hpY2ggdGhlIExhVGVYIGtlcm5lbCBhbmQgdGhlIGJhc2UgTGFUZVggcGFja2FnZXMgYXJlIGRpc3RyaWJ1dGVkLgorCitZb3UgbWF5IHVzZSB0aGlzIGxpY2Vuc2UgZm9yIGFueSB3b3JrIG9mIHdoaWNoIHlvdSBob2xkIHRoZSBjb3B5cmlnaHQKK2FuZCB3aGljaCB5b3Ugd2lzaCB0byBkaXN0cmlidXRlLiAgVGhpcyBsaWNlbnNlIG1heSBiZSBwYXJ0aWN1bGFybHkKK3N1aXRhYmxlIGlmIHlvdXIgd29yayBpcyBUZVgtcmVsYXRlZCAoc3VjaCBhcyBhIExhVGVYIHBhY2thZ2UpLCBidXQgCitpdCBpcyB3cml0dGVuIGluIHN1Y2ggYSB3YXkgdGhhdCB5b3UgY2FuIHVzZSBpdCBldmVuIGlmIHlvdXIgd29yayBpcyAKK3VucmVsYXRlZCB0byBUZVguCisKK1RoZSBzZWN0aW9uIGBXSEVUSEVSIEFORCBIT1cgVE8gRElTVFJJQlVURSBXT1JLUyBVTkRFUiBUSElTIExJQ0VOU0VgLAorYmVsb3csIGdpdmVzIGluc3RydWN0aW9ucywgZXhhbXBsZXMsIGFuZCByZWNvbW1lbmRhdGlvbnMgZm9yIGF1dGhvcnMKK3dobyBhcmUgY29uc2lkZXJpbmcgZGlzdHJpYnV0aW5nIHRoZWlyIHdvcmtzIHVuZGVyIHRoaXMgbGljZW5zZS4KKworVGhpcyBsaWNlbnNlIGdpdmVzIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYSB3b3JrIG1heSBiZSBkaXN0cmlidXRlZAorYW5kIG1vZGlmaWVkLCBhcyB3ZWxsIGFzIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggbW9kaWZpZWQgdmVyc2lvbnMgb2YKK3RoYXQgd29yayBtYXkgYmUgZGlzdHJpYnV0ZWQuCisKK1dlLCB0aGUgTGFUZVgzIFByb2plY3QsIGJlbGlldmUgdGhhdCB0aGUgY29uZGl0aW9ucyBiZWxvdyBnaXZlIHlvdQordGhlIGZyZWVkb20gdG8gbWFrZSBhbmQgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiB5b3VyIHdvcmsKK3RoYXQgY29uZm9ybSB3aXRoIHdoYXRldmVyIHRlY2huaWNhbCBzcGVjaWZpY2F0aW9ucyB5b3Ugd2lzaCB3aGlsZQorbWFpbnRhaW5pbmcgdGhlIGF2YWlsYWJpbGl0eSwgaW50ZWdyaXR5LCBhbmQgcmVsaWFiaWxpdHkgb2YKK3RoYXQgd29yay4gIElmIHlvdSBkbyBub3Qgc2VlIGhvdyB0byBhY2hpZXZlIHlvdXIgZ29hbCB3aGlsZQorbWVldGluZyB0aGVzZSBjb25kaXRpb25zLCB0aGVuIHJlYWQgdGhlIGRvY3VtZW50IGBjZmdndWlkZS50ZXhgCithbmQgYG1vZGd1aWRlLnRleGAgaW4gdGhlIGJhc2UgTGFUZVggZGlzdHJpYnV0aW9uIGZvciBzdWdnZXN0aW9ucy4KKworCitERUZJTklUSU9OUworPT09PT09PT09PT0KKworSW4gdGhpcyBsaWNlbnNlIGRvY3VtZW50IHRoZSBmb2xsb3dpbmcgdGVybXMgYXJlIHVzZWQ6CisKKyAgIGBXb3JrYAorICAgIEFueSB3b3JrIGJlaW5nIGRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKyAgICAKKyAgIGBEZXJpdmVkIFdvcmtgCisgICAgQW55IHdvcmsgdGhhdCB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgaXMgZGVyaXZlZCBmcm9tIHRoZSBXb3JrLgorCisgICBgTW9kaWZpY2F0aW9uYCAKKyAgICBBbnkgcHJvY2VkdXJlIHRoYXQgcHJvZHVjZXMgYSBEZXJpdmVkIFdvcmsgdW5kZXIgYW55IGFwcGxpY2FibGUKKyAgICBsYXcgLS0gZm9yIGV4YW1wbGUsIHRoZSBwcm9kdWN0aW9uIG9mIGEgZmlsZSBjb250YWluaW5nIGFuCisgICAgb3JpZ2luYWwgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmsgb3IgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mCisgICAgc3VjaCBhIGZpbGUsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yCisgICAgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuCisKKyAgIGBNb2RpZnlgCisgICAgVG8gYXBwbHkgYW55IHByb2NlZHVyZSB0aGF0IHByb2R1Y2VzIGEgRGVyaXZlZCBXb3JrIHVuZGVyIGFueQorICAgIGFwcGxpY2FibGUgbGF3LgorICAgIAorICAgYERpc3RyaWJ1dGlvbmAKKyAgICBNYWtpbmcgY29waWVzIG9mIHRoZSBXb3JrIGF2YWlsYWJsZSBmcm9tIG9uZSBwZXJzb24gdG8gYW5vdGhlciwgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0LiAgRGlzdHJpYnV0aW9uIGluY2x1ZGVzIChidXQgaXMgbm90IGxpbWl0ZWQgdG8pCisgICAgbWFraW5nIGFueSBlbGVjdHJvbmljIGNvbXBvbmVudHMgb2YgdGhlIFdvcmsgYWNjZXNzaWJsZSBieQorICAgIGZpbGUgdHJhbnNmZXIgcHJvdG9jb2xzIHN1Y2ggYXMgRlRQIG9yIEhUVFAgb3IgYnkgc2hhcmVkIGZpbGUKKyAgICBzeXN0ZW1zIHN1Y2ggYXMgU3VuYHMgTmV0d29yayBGaWxlIFN5c3RlbSAoTkZTKS4KKworICAgYENvbXBpbGVkIFdvcmtgCisgICAgQSB2ZXJzaW9uIG9mIHRoZSBXb3JrIHRoYXQgaGFzIGJlZW4gcHJvY2Vzc2VkIGludG8gYSBmb3JtIHdoZXJlIGl0CisgICAgaXMgZGlyZWN0bHkgdXNhYmxlIG9uIGEgY29tcHV0ZXIgc3lzdGVtLiAgVGhpcyBwcm9jZXNzaW5nIG1heQorICAgIGluY2x1ZGUgdXNpbmcgaW5zdGFsbGF0aW9uIGZhY2lsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIFdvcmssCisgICAgdHJhbnNmb3JtYXRpb25zIG9mIHRoZSBXb3JrLCBjb3B5aW5nIG9mIGNvbXBvbmVudHMgb2YgdGhlIFdvcmssIG9yCisgICAgb3RoZXIgYWN0aXZpdGllcy4gIE5vdGUgdGhhdCBtb2RpZmljYXRpb24gb2YgYW55IGluc3RhbGxhdGlvbgorICAgIGZhY2lsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIFdvcmsgY29uc3RpdHV0ZXMgbW9kaWZpY2F0aW9uIG9mIHRoZSBXb3JrLgorCisgICBgQ3VycmVudCBNYWludGFpbmVyYAorICAgIEEgcGVyc29uIG9yIHBlcnNvbnMgbm9taW5hdGVkIGFzIHN1Y2ggd2l0aGluIHRoZSBXb3JrLiAgSWYgdGhlcmUgaXMKKyAgICBubyBzdWNoIGV4cGxpY2l0IG5vbWluYXRpb24gdGhlbiBpdCBpcyB0aGUgYENvcHlyaWdodCBIb2xkZXJgIHVuZGVyCisgICAgYW55IGFwcGxpY2FibGUgbGF3LgorCisgICBgQmFzZSBJbnRlcnByZXRlcmAgCisgICAgQSBwcm9ncmFtIG9yIHByb2Nlc3MgdGhhdCBpcyBub3JtYWxseSBuZWVkZWQgZm9yIHJ1bm5pbmcgb3IKKyAgICBpbnRlcnByZXRpbmcgYSBwYXJ0IG9yIHRoZSB3aG9sZSBvZiB0aGUgV29yay4gICAgCisKKyAgICBBIEJhc2UgSW50ZXJwcmV0ZXIgbWF5IGRlcGVuZCBvbiBleHRlcm5hbCBjb21wb25lbnRzIGJ1dCB0aGVzZQorICAgIGFyZSBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBCYXNlIEludGVycHJldGVyIHByb3ZpZGVkIHRoYXQgZWFjaAorICAgIGV4dGVybmFsIGNvbXBvbmVudCBjbGVhcmx5IGlkZW50aWZpZXMgaXRzZWxmIHdoZW5ldmVyIGl0IGlzIHVzZWQKKyAgICBpbnRlcmFjdGl2ZWx5LiAgVW5sZXNzIGV4cGxpY2l0bHkgc3BlY2lmaWVkIHdoZW4gYXBwbHlpbmcgdGhlCisgICAgbGljZW5zZSB0byB0aGUgV29yaywgdGhlIG9ubHkgYXBwbGljYWJsZSBCYXNlIEludGVycHJldGVyIGlzIGEKKyAgICBgTGFUZVgtRm9ybWF0YCBvciBpbiB0aGUgY2FzZSBvZiBmaWxlcyBiZWxvbmdpbmcgdG8gdGhlIAorICAgIGBMYVRlWC1mb3JtYXRgIGEgcHJvZ3JhbSBpbXBsZW1lbnRpbmcgdGhlIGBUZVggbGFuZ3VhZ2VgLgorCisKKworQ09ORElUSU9OUyBPTiBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGRpc3RyaWJ1dGlvbiBhbmQvb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSBXb3JrCithcmUgbm90IGNvdmVyZWQgYnkgdGhpcyBsaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIEluCitwYXJ0aWN1bGFyLCB0aGUgYWN0IG9mIHJ1bm5pbmcgdGhlIFdvcmsgaXMgbm90IHJlc3RyaWN0ZWQgYW5kIG5vCityZXF1aXJlbWVudHMgYXJlIG1hZGUgY29uY2VybmluZyBhbnkgb2ZmZXJzIG9mIHN1cHBvcnQgZm9yIHRoZSBXb3JrLgorCisyLiAgWW91IG1heSBkaXN0cmlidXRlIGEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiB0aGUgV29yayBhcyB5b3UKK3JlY2VpdmVkIGl0LiAgRGlzdHJpYnV0aW9uIG9mIG9ubHkgcGFydCBvZiB0aGUgV29yayBpcyBjb25zaWRlcmVkCittb2RpZmljYXRpb24gb2YgdGhlIFdvcmssIGFuZCBubyByaWdodCB0byBkaXN0cmlidXRlIHN1Y2ggYSBEZXJpdmVkCitXb3JrIG1heSBiZSBhc3N1bWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIGNsYXVzZS4KKworMy4gIFlvdSBtYXkgZGlzdHJpYnV0ZSBhIENvbXBpbGVkIFdvcmsgdGhhdCBoYXMgYmVlbiBnZW5lcmF0ZWQgZnJvbSBhCitjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIHRoZSBXb3JrIGFzIGRpc3RyaWJ1dGVkIHVuZGVyIENsYXVzZSAyCithYm92ZSwgYXMgbG9uZyBhcyB0aGF0IENvbXBpbGVkIFdvcmsgaXMgZGlzdHJpYnV0ZWQgaW4gc3VjaCBhIHdheSB0aGF0Cit0aGUgcmVjaXBpZW50cyBtYXkgaW5zdGFsbCB0aGUgQ29tcGlsZWQgV29yayBvbiB0aGVpciBzeXN0ZW0gZXhhY3RseQorYXMgaXQgd291bGQgaGF2ZSBiZWVuIGluc3RhbGxlZCBpZiB0aGV5IGdlbmVyYXRlZCBhIENvbXBpbGVkIFdvcmsKK2RpcmVjdGx5IGZyb20gdGhlIFdvcmsuCisKKzQuICBJZiB5b3UgYXJlIHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBtYXksIHdpdGhvdXQKK3Jlc3RyaWN0aW9uLCBtb2RpZnkgdGhlIFdvcmssIHRodXMgY3JlYXRpbmcgYSBEZXJpdmVkIFdvcmsuICBZb3UgbWF5CithbHNvIGRpc3RyaWJ1dGUgdGhlIERlcml2ZWQgV29yayB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKK0NvbXBpbGVkIFdvcmtzIGdlbmVyYXRlZCBmcm9tIHRoZSBEZXJpdmVkIFdvcmsuICBEZXJpdmVkIFdvcmtzCitkaXN0cmlidXRlZCBpbiB0aGlzIG1hbm5lciBieSB0aGUgQ3VycmVudCBNYWludGFpbmVyIGFyZSBjb25zaWRlcmVkIHRvCitiZSB1cGRhdGVkIHZlcnNpb25zIG9mIHRoZSBXb3JrLgorCis1LiAgSWYgeW91IGFyZSBub3QgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGUgV29yaywgeW91IG1heSBtb2RpZnkKK3lvdXIgY29weSBvZiB0aGUgV29yaywgdGh1cyBjcmVhdGluZyBhIERlcml2ZWQgV29yayBiYXNlZCBvbiB0aGUgV29yaywKK2FuZCBjb21waWxlIHRoaXMgRGVyaXZlZCBXb3JrLCB0aHVzIGNyZWF0aW5nIGEgQ29tcGlsZWQgV29yayBiYXNlZCBvbgordGhlIERlcml2ZWQgV29yay4KKworNi4gIElmIHlvdSBhcmUgbm90IHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgYSBEZXJpdmVkIFdvcmsgcHJvdmlkZWQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQKK2ZvciBldmVyeSBjb21wb25lbnQgb2YgdGhlIFdvcmsgdW5sZXNzIHRoYXQgY29tcG9uZW50IGNsZWFybHkgc3RhdGVzCitpbiB0aGUgY29weXJpZ2h0IG5vdGljZSB0aGF0IGl0IGlzIGV4ZW1wdCBmcm9tIHRoYXQgY29uZGl0aW9uLiAgT25seQordGhlIEN1cnJlbnQgTWFpbnRhaW5lciBpcyBhbGxvd2VkIHRvIGFkZCBzdWNoIHN0YXRlbWVudHMgb2YgZXhlbXB0aW9uIAordG8gYSBjb21wb25lbnQgb2YgdGhlIFdvcmsuIAorCisgIGEuIElmIGEgY29tcG9uZW50IG9mIHRoaXMgRGVyaXZlZCBXb3JrIGNhbiBiZSBhIGRpcmVjdCByZXBsYWNlbWVudAorICAgICBmb3IgYSBjb21wb25lbnQgb2YgdGhlIFdvcmsgd2hlbiB0aGF0IGNvbXBvbmVudCBpcyB1c2VkIHdpdGggdGhlCisgICAgIEJhc2UgSW50ZXJwcmV0ZXIsIHRoZW4sIHdoZXJldmVyIHRoaXMgY29tcG9uZW50IG9mIHRoZSBXb3JrCisgICAgIGlkZW50aWZpZXMgaXRzZWxmIHRvIHRoZSB1c2VyIHdoZW4gdXNlZCBpbnRlcmFjdGl2ZWx5IHdpdGggdGhhdAorICAgICBCYXNlIEludGVycHJldGVyLCB0aGUgcmVwbGFjZW1lbnQgY29tcG9uZW50IG9mIHRoaXMgRGVyaXZlZCBXb3JrCisgICAgIGNsZWFybHkgYW5kIHVuYW1iaWd1b3VzbHkgaWRlbnRpZmllcyBpdHNlbGYgYXMgYSBtb2RpZmllZCB2ZXJzaW9uCisgICAgIG9mIHRoaXMgY29tcG9uZW50IHRvIHRoZSB1c2VyIHdoZW4gdXNlZCBpbnRlcmFjdGl2ZWx5IHdpdGggdGhhdAorICAgICBCYXNlIEludGVycHJldGVyLgorICAgICAKKyAgYi4gRXZlcnkgY29tcG9uZW50IG9mIHRoZSBEZXJpdmVkIFdvcmsgY29udGFpbnMgcHJvbWluZW50IG5vdGljZXMKKyAgICAgZGV0YWlsaW5nIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMgdG8gdGhhdCBjb21wb25lbnQsIG9yIGEKKyAgICAgcHJvbWluZW50IHJlZmVyZW5jZSB0byBhbm90aGVyIGZpbGUgdGhhdCBpcyBkaXN0cmlidXRlZCBhcyBwYXJ0CisgICAgIG9mIHRoZSBEZXJpdmVkIFdvcmsgYW5kIHRoYXQgY29udGFpbnMgYSBjb21wbGV0ZSBhbmQgYWNjdXJhdGUgbG9nCisgICAgIG9mIHRoZSBjaGFuZ2VzLgorICAKKyAgYy4gTm8gaW5mb3JtYXRpb24gaW4gdGhlIERlcml2ZWQgV29yayBpbXBsaWVzIHRoYXQgYW55IHBlcnNvbnMsCisgICAgIGluY2x1ZGluZyAoYnV0IG5vdCBsaW1pdGVkIHRvKSB0aGUgYXV0aG9ycyBvZiB0aGUgb3JpZ2luYWwgdmVyc2lvbgorICAgICBvZiB0aGUgV29yaywgcHJvdmlkZSBhbnkgc3VwcG9ydCwgaW5jbHVkaW5nIChidXQgbm90IGxpbWl0ZWQgdG8pCisgICAgIHRoZSByZXBvcnRpbmcgYW5kIGhhbmRsaW5nIG9mIGVycm9ycywgdG8gcmVjaXBpZW50cyBvZiB0aGUKKyAgICAgRGVyaXZlZCBXb3JrIHVubGVzcyB0aG9zZSBwZXJzb25zIGhhdmUgc3RhdGVkIGV4cGxpY2l0bHkgdGhhdAorICAgICB0aGV5IGRvIHByb3ZpZGUgc3VjaCBzdXBwb3J0IGZvciB0aGUgRGVyaXZlZCBXb3JrLgorCisgIGQuIFlvdSBkaXN0cmlidXRlIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIHdpdGggdGhlIERlcml2ZWQgV29yazoKKworICAgICAgIDEuIEEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiB0aGUgV29yazsgCisgICAgICAgICAgaWYgeW91ciBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZCBjb21wb25lbnQgaXMgbWFkZSBieQorICAgICAgICAgIG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IHRoZSBtb2RpZmllZCBjb21wb25lbnQgZnJvbSBhCisgICAgICAgICAgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5CisgICAgICAgICAgdGhlIFdvcmsgZnJvbSB0aGUgc2FtZSBvciBzb21lIHNpbWlsYXIgcGxhY2UgbWVldHMgdGhpcworICAgICAgICAgIGNvbmRpdGlvbiwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0bworICAgICAgICAgIGNvcHkgdGhlIFdvcmsgYWxvbmcgd2l0aCB0aGUgbW9kaWZpZWQgY29tcG9uZW50OworCisgICAgICAgMi4gSW5mb3JtYXRpb24gdGhhdCBpcyBzdWZmaWNpZW50IHRvIG9idGFpbiBhIGNvbXBsZXRlLAorICAgICAgICAgIHVubW9kaWZpZWQgY29weSBvZiB0aGUgV29yay4KKworNy4gIElmIHlvdSBhcmUgbm90IHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgYSBDb21waWxlZCBXb3JrIGdlbmVyYXRlZCBmcm9tIGEgRGVyaXZlZCBXb3JrLCBhcyBsb25nIGFzCit0aGUgRGVyaXZlZCBXb3JrIGlzIGRpc3RyaWJ1dGVkIHRvIGFsbCByZWNpcGllbnRzIG9mIHRoZSBDb21waWxlZAorV29yaywgYW5kIGFzIGxvbmcgYXMgdGhlIGNvbmRpdGlvbnMgb2YgQ2xhdXNlIDYsIGFib3ZlLCBhcmUgbWV0IHdpdGgKK3JlZ2FyZCB0byB0aGUgRGVyaXZlZCBXb3JrLgorCis4LiAgVGhlIGNvbmRpdGlvbnMgYWJvdmUgYXJlIG5vdCBpbnRlbmRlZCB0byBwcm9oaWJpdCwgYW5kIGhlbmNlIGRvIG5vdAorYXBwbHkgdG8sIHRoZSBtb2RpZmljYXRpb24sIGJ5IGFueSBtZXRob2QsIG9mIGFueSBjb21wb25lbnQgc28gdGhhdCBpdAorYmVjb21lcyBpZGVudGljYWwgdG8gYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoYXQgY29tcG9uZW50IG9mIHRoZSBXb3JrIGFzCitpdCBpcyBkaXN0cmlidXRlZCBieSB0aGUgQ3VycmVudCBNYWludGFpbmVyIHVuZGVyIENsYXVzZSA0LCBhYm92ZS4KKworOS4gIERpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvciBhbnkgRGVyaXZlZCBXb3JrIGluIGFuIGFsdGVybmF0aXZlCitmb3JtYXQsIHdoZXJlIHRoZSBXb3JrIG9yIHRoYXQgRGVyaXZlZCBXb3JrIChpbiB3aG9sZSBvciBpbiBwYXJ0KSBpcwordGhlbiBwcm9kdWNlZCBieSBhcHBseWluZyBzb21lIHByb2Nlc3MgdG8gdGhhdCBmb3JtYXQsIGRvZXMgbm90IHJlbGF4IG9yCitudWxsaWZ5IGFueSBzZWN0aW9ucyBvZiB0aGlzIGxpY2Vuc2UgYXMgdGhleSBwZXJ0YWluIHRvIHRoZSByZXN1bHRzIG9mCithcHBseWluZyB0aGF0IHByb2Nlc3MuCisgICAgIAorMTAuIGEuIEEgRGVyaXZlZCBXb3JrIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlCisgICAgICAgcHJvdmlkZWQgdGhhdCBsaWNlbnNlIGl0c2VsZiBob25vcnMgdGhlIGNvbmRpdGlvbnMgbGlzdGVkIGluCisgICAgICAgQ2xhdXNlIDYgYWJvdmUsIGluIHJlZ2FyZCB0byB0aGUgV29yaywgdGhvdWdoIGl0IGRvZXMgbm90IGhhdmUKKyAgICAgICB0byBob25vciB0aGUgcmVzdCBvZiB0aGUgY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UuCisgICAgICAKKyAgICBiLiBJZiBhIERlcml2ZWQgV29yayBpcyBkaXN0cmlidXRlZCB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlLCB0aGF0CisgICAgICAgRGVyaXZlZCBXb3JrIG11c3QgcHJvdmlkZSBzdWZmaWNpZW50IGRvY3VtZW50YXRpb24gYXMgcGFydCBvZgorICAgICAgIGl0c2VsZiB0byBhbGxvdyBlYWNoIHJlY2lwaWVudCBvZiB0aGF0IERlcml2ZWQgV29yayB0byBob25vciB0aGUgCisgICAgICAgcmVzdHJpY3Rpb25zIGluIENsYXVzZSA2IGFib3ZlLCBjb25jZXJuaW5nIGNoYW5nZXMgZnJvbSB0aGUgV29yay4KKworMTEuIFRoaXMgbGljZW5zZSBwbGFjZXMgbm8gcmVzdHJpY3Rpb25zIG9uIHdvcmtzIHRoYXQgYXJlIHVucmVsYXRlZCB0bwordGhlIFdvcmssIG5vciBkb2VzIHRoaXMgbGljZW5zZSBwbGFjZSBhbnkgcmVzdHJpY3Rpb25zIG9uIGFnZ3JlZ2F0aW5nCitzdWNoIHdvcmtzIHdpdGggdGhlIFdvcmsgYnkgYW55IG1lYW5zLgorCisxMi4gIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvLCBvciBtYXkgYmUgdXNlZCB0bywgcHJldmVudAorY29tcGxldGUgY29tcGxpYW5jZSBieSBhbGwgcGFydGllcyB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3MuCisKKworTk8gV0FSUkFOVFkKKz09PT09PT09PT09CisKK1RoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgV29yay4gIEV4Y2VwdCB3aGVuIG90aGVyd2lzZSBzdGF0ZWQgaW4KK3dyaXRpbmcsIHRoZSBDb3B5cmlnaHQgSG9sZGVyIHByb3ZpZGVzIHRoZSBXb3JrIGBhcyBpc2AsIHdpdGhvdXQKK3dhcnJhbnR5IG9mIGFueSBraW5kLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZywgYnV0IG5vdAorbGltaXRlZCB0bywgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEKK3BhcnRpY3VsYXIgcHVycG9zZS4gIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2UKK29mIHRoZSBXb3JrIGlzIHdpdGggeW91LiAgU2hvdWxkIHRoZSBXb3JrIHByb3ZlIGRlZmVjdGl2ZSwgeW91IGFzc3VtZQordGhlIGNvc3Qgb2YgYWxsIG5lY2Vzc2FyeSBzZXJ2aWNpbmcsIHJlcGFpciwgb3IgY29ycmVjdGlvbi4KKworSW4gbm8gZXZlbnQgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nCit3aWxsIFRoZSBDb3B5cmlnaHQgSG9sZGVyLCBvciBhbnkgYXV0aG9yIG5hbWVkIGluIHRoZSBjb21wb25lbnRzIG9mIHRoZQorV29yaywgb3IgYW55IG90aGVyIHBhcnR5IHdobyBtYXkgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBXb3JrIGFzCitwZXJtaXR0ZWQgYWJvdmUsIGJlIGxpYWJsZSB0byB5b3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZ2VuZXJhbCwKK3NwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgb3V0IG9mIGFueSB1c2Ugb2YKK3RoZSBXb3JrIG9yIG91dCBvZiBpbmFiaWxpdHkgdG8gdXNlIHRoZSBXb3JrIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZAordG8sIGxvc3Mgb2YgZGF0YSwgZGF0YSBiZWluZyByZW5kZXJlZCBpbmFjY3VyYXRlLCBvciBsb3NzZXMgc3VzdGFpbmVkIGJ5CithbnlvbmUgYXMgYSByZXN1bHQgb2YgYW55IGZhaWx1cmUgb2YgdGhlIFdvcmsgdG8gb3BlcmF0ZSB3aXRoIGFueSBvdGhlcgorcHJvZ3JhbXMpLCBldmVuIGlmIHRoZSBDb3B5cmlnaHQgSG9sZGVyIG9yIHNhaWQgYXV0aG9yIG9yIHNhaWQgb3RoZXIKK3BhcnR5IGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworCitNQUlOVEVOQU5DRSBPRiBUSEUgV09SSworPT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIFdvcmsgaGFzIHRoZSBzdGF0dXMgYGF1dGhvci1tYWludGFpbmVkYCBpZiB0aGUgQ29weXJpZ2h0IEhvbGRlcgorZXhwbGljaXRseSBhbmQgcHJvbWluZW50bHkgc3RhdGVzIG5lYXIgdGhlIHByaW1hcnkgY29weXJpZ2h0IG5vdGljZSBpbgordGhlIFdvcmsgdGhhdCB0aGUgV29yayBjYW4gb25seSBiZSBtYWludGFpbmVkIGJ5IHRoZSBDb3B5cmlnaHQgSG9sZGVyCitvciBzaW1wbHkgdGhhdCBpdCBpcyBgYXV0aG9yLW1haW50YWluZWRgLgorCitUaGUgV29yayBoYXMgdGhlIHN0YXR1cyBgbWFpbnRhaW5lZGAgaWYgdGhlcmUgaXMgYSBDdXJyZW50IE1haW50YWluZXIKK3dobyBoYXMgaW5kaWNhdGVkIGluIHRoZSBXb3JrIHRoYXQgdGhleSBhcmUgd2lsbGluZyB0byByZWNlaXZlIGVycm9yCityZXBvcnRzIGZvciB0aGUgV29yayAoZm9yIGV4YW1wbGUsIGJ5IHN1cHBseWluZyBhIHZhbGlkIGUtbWFpbAorYWRkcmVzcykuIEl0IGlzIG5vdCByZXF1aXJlZCBmb3IgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciB0byBhY2tub3dsZWRnZQorb3IgYWN0IHVwb24gdGhlc2UgZXJyb3IgcmVwb3J0cy4KKworVGhlIFdvcmsgY2hhbmdlcyBmcm9tIHN0YXR1cyBgbWFpbnRhaW5lZGAgdG8gYHVubWFpbnRhaW5lZGAgaWYgdGhlcmUKK2lzIG5vIEN1cnJlbnQgTWFpbnRhaW5lciwgb3IgdGhlIHBlcnNvbiBzdGF0ZWQgdG8gYmUgQ3VycmVudAorTWFpbnRhaW5lciBvZiB0aGUgd29yayBjYW5ub3QgYmUgcmVhY2hlZCB0aHJvdWdoIHRoZSBpbmRpY2F0ZWQgbWVhbnMKK29mIGNvbW11bmljYXRpb24gZm9yIGEgcGVyaW9kIG9mIHNpeCBtb250aHMsIGFuZCB0aGVyZSBhcmUgbm8gb3RoZXIKK3NpZ25pZmljYW50IHNpZ25zIG9mIGFjdGl2ZSBtYWludGVuYW5jZS4KKworWW91IGNhbiBiZWNvbWUgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGUgV29yayBieSBhZ3JlZW1lbnQgd2l0aAorYW55IGV4aXN0aW5nIEN1cnJlbnQgTWFpbnRhaW5lciB0byB0YWtlIG92ZXIgdGhpcyByb2xlLgorCitJZiB0aGUgV29yayBpcyB1bm1haW50YWluZWQsIHlvdSBjYW4gYmVjb21lIHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YKK3RoZSBXb3JrIHRocm91Z2ggdGhlIGZvbGxvd2luZyBzdGVwczoKKworIDEuICBNYWtlIGEgcmVhc29uYWJsZSBhdHRlbXB0IHRvIHRyYWNlIHRoZSBDdXJyZW50IE1haW50YWluZXIgKGFuZAorICAgICB0aGUgQ29weXJpZ2h0IEhvbGRlciwgaWYgdGhlIHR3byBkaWZmZXIpIHRocm91Z2ggdGhlIG1lYW5zIG9mCisgICAgIGFuIEludGVybmV0IG9yIHNpbWlsYXIgc2VhcmNoLgorCisgMi4gIElmIHRoaXMgc2VhcmNoIGlzIHN1Y2Nlc3NmdWwsIHRoZW4gZW5xdWlyZSB3aGV0aGVyIHRoZSBXb3JrCisgICAgIGlzIHN0aWxsIG1haW50YWluZWQuCisKKyAgYS4gSWYgaXQgaXMgYmVpbmcgbWFpbnRhaW5lZCwgdGhlbiBhc2sgdGhlIEN1cnJlbnQgTWFpbnRhaW5lcgorICAgICB0byB1cGRhdGUgdGhlaXIgY29tbXVuaWNhdGlvbiBkYXRhIHdpdGhpbiBvbmUgbW9udGguCisgICAgIAorICBiLiBJZiB0aGUgc2VhcmNoIGlzIHVuc3VjY2Vzc2Z1bCBvciBubyBhY3Rpb24gdG8gcmVzdW1lIGFjdGl2ZQorICAgICBtYWludGVuYW5jZSBpcyB0YWtlbiBieSB0aGUgQ3VycmVudCBNYWludGFpbmVyLCB0aGVuIGFubm91bmNlCisgICAgIHdpdGhpbiB0aGUgcGVydGluZW50IGNvbW11bml0eSB5b3VyIGludGVudGlvbiB0byB0YWtlIG92ZXIKKyAgICAgbWFpbnRlbmFuY2UuICAoSWYgdGhlIFdvcmsgaXMgYSBMYVRlWCB3b3JrLCB0aGlzIGNvdWxkIGJlCisgICAgIGRvbmUsIGZvciBleGFtcGxlLCBieSBwb3N0aW5nIHRvIGNvbXAudGV4dC50ZXguKQorCisgM2EuIElmIHRoZSBDdXJyZW50IE1haW50YWluZXIgaXMgcmVhY2hhYmxlIGFuZCBhZ3JlZXMgdG8gcGFzcworICAgICBtYWludGVuYW5jZSBvZiB0aGUgV29yayB0byB5b3UsIHRoZW4gdGhpcyB0YWtlcyBlZmZlY3QKKyAgICAgaW1tZWRpYXRlbHkgdXBvbiBhbm5vdW5jZW1lbnQuCisgICAgIAorICBiLiBJZiB0aGUgQ3VycmVudCBNYWludGFpbmVyIGlzIG5vdCByZWFjaGFibGUgYW5kIHRoZSBDb3B5cmlnaHQKKyAgICAgSG9sZGVyIGFncmVlcyB0aGF0IG1haW50ZW5hbmNlIG9mIHRoZSBXb3JrIGJlIHBhc3NlZCB0byB5b3UsCisgICAgIHRoZW4gdGhpcyB0YWtlcyBlZmZlY3QgaW1tZWRpYXRlbHkgdXBvbiBhbm5vdW5jZW1lbnQuICAKKyAgICAKKyA0LiAgSWYgeW91IG1ha2UgYW4gYGludGVudGlvbiBhbm5vdW5jZW1lbnRgIGFzIGRlc2NyaWJlZCBpbiAyYi4gYWJvdmUKKyAgICAgYW5kIGFmdGVyIHRocmVlIG1vbnRocyB5b3VyIGludGVudGlvbiBpcyBjaGFsbGVuZ2VkIG5laXRoZXIgYnkKKyAgICAgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBub3IgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIgbm9yIGJ5IG90aGVyCisgICAgIHBlb3BsZSwgdGhlbiB5b3UgbWF5IGFycmFuZ2UgZm9yIHRoZSBXb3JrIHRvIGJlIGNoYW5nZWQgc28gYXMKKyAgICAgdG8gbmFtZSB5b3UgYXMgdGhlIChuZXcpIEN1cnJlbnQgTWFpbnRhaW5lci4KKyAgICAgCisgNS4gIElmIHRoZSBwcmV2aW91c2x5IHVucmVhY2hhYmxlIEN1cnJlbnQgTWFpbnRhaW5lciBiZWNvbWVzCisgICAgIHJlYWNoYWJsZSBvbmNlIG1vcmUgd2l0aGluIHRocmVlIG1vbnRocyBvZiBhIGNoYW5nZSBjb21wbGV0ZWQKKyAgICAgdW5kZXIgdGhlIHRlcm1zIG9mIDNiKSBvciA0KSwgdGhlbiB0aGF0IEN1cnJlbnQgTWFpbnRhaW5lciBtdXN0CisgICAgIGJlY29tZSBvciByZW1haW4gdGhlIEN1cnJlbnQgTWFpbnRhaW5lciB1cG9uIHJlcXVlc3QgcHJvdmlkZWQKKyAgICAgdGhleSB0aGVuIHVwZGF0ZSB0aGVpciBjb21tdW5pY2F0aW9uIGRhdGEgd2l0aGluIG9uZSBtb250aC4KKworQSBjaGFuZ2UgaW4gdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBkb2VzIG5vdCwgb2YgaXRzZWxmLCBhbHRlciB0aGUgZmFjdAordGhhdCB0aGUgV29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTFBQTCBsaWNlbnNlLgorCitJZiB5b3UgYmVjb21lIHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBzaG91bGQKK2ltbWVkaWF0ZWx5IHByb3ZpZGUsIHdpdGhpbiB0aGUgV29yaywgYSBwcm9taW5lbnQgYW5kIHVuYW1iaWd1b3VzCitzdGF0ZW1lbnQgb2YgeW91ciBzdGF0dXMgYXMgQ3VycmVudCBNYWludGFpbmVyLiAgWW91IHNob3VsZCBhbHNvCithbm5vdW5jZSB5b3VyIG5ldyBzdGF0dXMgdG8gdGhlIHNhbWUgcGVydGluZW50IGNvbW11bml0eSBhcworaW4gMmIpIGFib3ZlLgorCisKK1dIRVRIRVIgQU5EIEhPVyBUTyBESVNUUklCVVRFIFdPUktTIFVOREVSIFRISVMgTElDRU5TRQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgc2VjdGlvbiBjb250YWlucyBpbXBvcnRhbnQgaW5zdHJ1Y3Rpb25zLCBleGFtcGxlcywgYW5kCityZWNvbW1lbmRhdGlvbnMgZm9yIGF1dGhvcnMgd2hvIGFyZSBjb25zaWRlcmluZyBkaXN0cmlidXRpbmcgdGhlaXIKK3dvcmtzIHVuZGVyIHRoaXMgbGljZW5zZS4gIFRoZXNlIGF1dGhvcnMgYXJlIGFkZHJlc3NlZCBhcyBgeW91YCBpbgordGhpcyBzZWN0aW9uLgorCitDaG9vc2luZyBUaGlzIExpY2Vuc2Ugb3IgQW5vdGhlciBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGZvciBhbnkgcGFydCBvZiB5b3VyIHdvcmsgeW91IHdhbnQgb3IgbmVlZCB0byB1c2UgKmRpc3RyaWJ1dGlvbioKK2NvbmRpdGlvbnMgdGhhdCBkaWZmZXIgc2lnbmlmaWNhbnRseSBmcm9tIHRob3NlIGluIHRoaXMgbGljZW5zZSwgdGhlbgorZG8gbm90IHJlZmVyIHRvIHRoaXMgbGljZW5zZSBhbnl3aGVyZSBpbiB5b3VyIHdvcmsgYnV0LCBpbnN0ZWFkLAorZGlzdHJpYnV0ZSB5b3VyIHdvcmsgdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZS4gIFlvdSBtYXkgdXNlIHRoZSB0ZXh0CitvZiB0aGlzIGxpY2Vuc2UgYXMgYSBtb2RlbCBmb3IgeW91ciBvd24gbGljZW5zZSwgYnV0IHlvdXIgbGljZW5zZQorc2hvdWxkIG5vdCByZWZlciB0byB0aGUgTFBQTCBvciBvdGhlcndpc2UgZ2l2ZSB0aGUgaW1wcmVzc2lvbiB0aGF0Cit5b3VyIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExQUEwuCisKK1RoZSBkb2N1bWVudCBgbW9kZ3VpZGUudGV4YCBpbiB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gZXhwbGFpbnMKK3RoZSBtb3RpdmF0aW9uIGJlaGluZCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIGxpY2Vuc2UuICBJdCBleHBsYWlucywKK2ZvciBleGFtcGxlLCB3aHkgZGlzdHJpYnV0aW5nIExhVGVYIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgKEdQTCkgd2FzIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZS4gIEV2ZW4gaWYgeW91ciB3b3JrIGlzCit1bnJlbGF0ZWQgdG8gTGFUZVgsIHRoZSBkaXNjdXNzaW9uIGluIGBtb2RndWlkZS50ZXhgIG1heSBzdGlsbCBiZQorcmVsZXZhbnQsIGFuZCBhdXRob3JzIGludGVuZGluZyB0byBkaXN0cmlidXRlIHRoZWlyIHdvcmtzIHVuZGVyIGFueQorbGljZW5zZSBhcmUgZW5jb3VyYWdlZCB0byByZWFkIGl0LgorCitBIFJlY29tbWVuZGF0aW9uIG9uIE1vZGlmaWNhdGlvbiBXaXRob3V0IERpc3RyaWJ1dGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQgaXMgd2lzZSBuZXZlciB0byBtb2RpZnkgYSBjb21wb25lbnQgb2YgdGhlIFdvcmssIGV2ZW4gZm9yIHlvdXIgb3duCitwZXJzb25hbCB1c2UsIHdpdGhvdXQgYWxzbyBtZWV0aW5nIHRoZSBhYm92ZSBjb25kaXRpb25zIGZvcgorZGlzdHJpYnV0aW5nIHRoZSBtb2RpZmllZCBjb21wb25lbnQuICBXaGlsZSB5b3UgbWlnaHQgaW50ZW5kIHRoYXQgc3VjaAorbW9kaWZpY2F0aW9ucyB3aWxsIG5ldmVyIGJlIGRpc3RyaWJ1dGVkLCBvZnRlbiB0aGlzIHdpbGwgaGFwcGVuIGJ5CithY2NpZGVudCAtLSB5b3UgbWF5IGZvcmdldCB0aGF0IHlvdSBoYXZlIG1vZGlmaWVkIHRoYXQgY29tcG9uZW50OyBvcgoraXQgbWF5IG5vdCBvY2N1ciB0byB5b3Ugd2hlbiBhbGxvd2luZyBvdGhlcnMgdG8gYWNjZXNzIHRoZSBtb2RpZmllZAordmVyc2lvbiB0aGF0IHlvdSBhcmUgdGh1cyBkaXN0cmlidXRpbmcgaXQgYW5kIHZpb2xhdGluZyB0aGUgY29uZGl0aW9ucworb2YgdGhpcyBsaWNlbnNlIGluIHdheXMgdGhhdCBjb3VsZCBoYXZlIGxlZ2FsIGltcGxpY2F0aW9ucyBhbmQsIHdvcnNlLAorY2F1c2UgcHJvYmxlbXMgZm9yIHRoZSBjb21tdW5pdHkuICBJdCBpcyB0aGVyZWZvcmUgdXN1YWxseSBpbiB5b3VyCitiZXN0IGludGVyZXN0IHRvIGtlZXAgeW91ciBjb3B5IG9mIHRoZSBXb3JrIGlkZW50aWNhbCB3aXRoIHRoZSBwdWJsaWMKK29uZS4gIE1hbnkgd29ya3MgcHJvdmlkZSB3YXlzIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIHRoYXQgd29yaword2l0aG91dCBhbHRlcmluZyBhbnkgb2YgaXRzIGxpY2Vuc2VkIGNvbXBvbmVudHMuCisKK0hvdyB0byBVc2UgVGhpcyBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyB1c2UgdGhpcyBsaWNlbnNlLCBwbGFjZSBpbiBlYWNoIG9mIHRoZSBjb21wb25lbnRzIG9mIHlvdXIgd29yayBib3RoCithbiBleHBsaWNpdCBjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyB5b3VyIG5hbWUgYW5kIHRoZSB5ZWFyIHRoZSB3b3JrCit3YXMgYXV0aG9yZWQgYW5kL29yIGxhc3Qgc3Vic3RhbnRpYWxseSBtb2RpZmllZC4gIEluY2x1ZGUgYWxzbyBhCitzdGF0ZW1lbnQgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciBtb2RpZmljYXRpb24gb2YgdGhhdAorY29tcG9uZW50IGlzIGNvbnN0cmFpbmVkIGJ5IHRoZSBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZS4KKworSGVyZSBpcyBhbiBleGFtcGxlIG9mIHN1Y2ggYSBub3RpY2UgYW5kIHN0YXRlbWVudDoKKworICAlJSBwaWcuZHR4CisgICUlIENvcHlyaWdodCAyMDA1IE0uIFkuIE5hbWUKKyAgJQorICAlIFRoaXMgd29yayBtYXkgYmUgZGlzdHJpYnV0ZWQgYW5kL29yIG1vZGlmaWVkIHVuZGVyIHRoZQorICAlIGNvbmRpdGlvbnMgb2YgdGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UsIGVpdGhlciB2ZXJzaW9uIDEuMworICAlIG9mIHRoaXMgbGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAlIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGxpY2Vuc2UgaXMgaW4KKyAgJSAgIGh0dHA6Ly93d3cubGF0ZXgtcHJvamVjdC5vcmcvbHBwbC50eHQKKyAgJSBhbmQgdmVyc2lvbiAxLjMgb3IgbGF0ZXIgaXMgcGFydCBvZiBhbGwgZGlzdHJpYnV0aW9ucyBvZiBMYVRlWAorICAlIHZlcnNpb24gMjAwNS8xMi8wMSBvciBsYXRlci4KKyAgJQorICAlIFRoaXMgd29yayBoYXMgdGhlIExQUEwgbWFpbnRlbmFuY2Ugc3RhdHVzIGBtYWludGFpbmVkYC4KKyAgJSAKKyAgJSBUaGUgQ3VycmVudCBNYWludGFpbmVyIG9mIHRoaXMgd29yayBpcyBNLiBZLiBOYW1lLgorICAlCisgICUgVGhpcyB3b3JrIGNvbnNpc3RzIG9mIHRoZSBmaWxlcyBwaWcuZHR4IGFuZCBwaWcuaW5zCisgICUgYW5kIHRoZSBkZXJpdmVkIGZpbGUgcGlnLnN0eS4KKworR2l2ZW4gc3VjaCBhIG5vdGljZSBhbmQgc3RhdGVtZW50IGluIGEgZmlsZSwgdGhlIGNvbmRpdGlvbnMKK2dpdmVuIGluIHRoaXMgbGljZW5zZSBkb2N1bWVudCB3b3VsZCBhcHBseSwgd2l0aCB0aGUgYFdvcmtgIHJlZmVycmluZwordG8gdGhlIHRocmVlIGZpbGVzIGBwaWcuZHR4YCwgYHBpZy5pbnNgLCBhbmQgYHBpZy5zdHlgICh0aGUgbGFzdCBiZWluZworZ2VuZXJhdGVkIGZyb20gYHBpZy5kdHhgIHVzaW5nIGBwaWcuaW5zYCksIHRoZSBgQmFzZSBJbnRlcnByZXRlcmAKK3JlZmVycmluZyB0byBhbnkgYExhVGVYLUZvcm1hdGAsIGFuZCBib3RoIGBDb3B5cmlnaHQgSG9sZGVyYCBhbmQKK2BDdXJyZW50IE1haW50YWluZXJgIHJlZmVycmluZyB0byB0aGUgcGVyc29uIGBNLiBZLiBOYW1lYC4KKworSWYgeW91IGRvIG5vdCB3YW50IHRoZSBNYWludGVuYW5jZSBzZWN0aW9uIG9mIExQUEwgdG8gYXBwbHkgdG8geW91cgorV29yaywgY2hhbmdlIGBtYWludGFpbmVkYCBhYm92ZSBpbnRvIGBhdXRob3ItbWFpbnRhaW5lZGAuICAKK0hvd2V2ZXIsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgYG1haW50YWluZWRgLCBhcyB0aGUgTWFpbnRlbmFuY2UKK3NlY3Rpb24gd2FzIGFkZGVkIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHlvdXIgV29yayByZW1haW5zIHVzZWZ1bCB0bwordGhlIGNvbW11bml0eSBldmVuIHdoZW4geW91IGNhbiBubyBsb25nZXIgbWFpbnRhaW4gYW5kIHN1cHBvcnQgaXQKK3lvdXJzZWxmLgorCitEZXJpdmVkIFdvcmtzIFRoYXQgQXJlIE5vdCBSZXBsYWNlbWVudHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZXZlcmFsIGNsYXVzZXMgb2YgdGhlIExQUEwgc3BlY2lmeSBtZWFucyB0byBwcm92aWRlIHJlbGlhYmlsaXR5IGFuZAorc3RhYmlsaXR5IGZvciB0aGUgdXNlciBjb21tdW5pdHkuIFRoZXkgdGhlcmVmb3JlIGNvbmNlcm4gdGhlbXNlbHZlcword2l0aCB0aGUgY2FzZSB0aGF0IGEgRGVyaXZlZCBXb3JrIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYQorKGNvbXBhdGlibGUgb3IgaW5jb21wYXRpYmxlKSByZXBsYWNlbWVudCBvZiB0aGUgb3JpZ2luYWwgV29yay4gSWYKK3RoaXMgaXMgbm90IHRoZSBjYXNlIChlLmcuLCBpZiBhIGZldyBsaW5lcyBvZiBjb2RlIGFyZSByZXVzZWQgZm9yIGEKK2NvbXBsZXRlbHkgZGlmZmVyZW50IHRhc2spLCB0aGVuIGNsYXVzZXMgNmIgYW5kIDZkIHNoYWxsIG5vdCBhcHBseS4KKworCitJbXBvcnRhbnQgUmVjb21tZW5kYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyBEZWZpbmluZyBXaGF0IENvbnN0aXR1dGVzIHRoZSBXb3JrCisKKyAgIFRoZSBMUFBMIHJlcXVpcmVzIHRoYXQgZGlzdHJpYnV0aW9ucyBvZiB0aGUgV29yayBjb250YWluIGFsbCB0aGUKKyAgIGZpbGVzIG9mIHRoZSBXb3JrLiAgSXQgaXMgdGhlcmVmb3JlIGltcG9ydGFudCB0aGF0IHlvdSBwcm92aWRlIGEKKyAgIHdheSBmb3IgdGhlIGxpY2Vuc2VlIHRvIGRldGVybWluZSB3aGljaCBmaWxlcyBjb25zdGl0dXRlIHRoZSBXb3JrLgorICAgVGhpcyBjb3VsZCwgZm9yIGV4YW1wbGUsIGJlIGFjaGlldmVkIGJ5IGV4cGxpY2l0bHkgbGlzdGluZyBhbGwgdGhlCisgICBmaWxlcyBvZiB0aGUgV29yayBuZWFyIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIGVhY2ggZmlsZSBvciBieQorICAgdXNpbmcgYSBsaW5lIHN1Y2ggYXM6CisKKyAgICAlIFRoaXMgd29yayBjb25zaXN0cyBvZiBhbGwgZmlsZXMgbGlzdGVkIGluIG1hbmlmZXN0LnR4dC4KKyAgIAorICAgaW4gdGhhdCBwbGFjZS4gIEluIHRoZSBhYnNlbmNlIG9mIGFuIHVuZXF1aXZvY2FsIGxpc3QgaXQgbWlnaHQgYmUKKyAgIGltcG9zc2libGUgZm9yIHRoZSBsaWNlbnNlZSB0byBkZXRlcm1pbmUgd2hhdCBpcyBjb25zaWRlcmVkIGJ5IHlvdQorICAgdG8gY29tcHJpc2UgdGhlIFdvcmsgYW5kLCBpbiBzdWNoIGEgY2FzZSwgdGhlIGxpY2Vuc2VlIHdvdWxkIGJlCisgICBlbnRpdGxlZCB0byBtYWtlIHJlYXNvbmFibGUgY29uamVjdHVyZXMgYXMgdG8gd2hpY2ggZmlsZXMgY29tcHJpc2UKKyAgIHRoZSBXb3JrLgorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTGlicG5nIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MaWJwbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlkNWIwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTGlicG5nCkBAIC0wLDAgKzEsMTEyIEBACisKK1RoaXMgY29weSBvZiB0aGUgbGlicG5nIG5vdGljZXMgaXMgcHJvdmlkZWQgZm9yIHlvdXIgY29udmVuaWVuY2UuICBJbiBjYXNlIG9mCithbnkgZGlzY3JlcGFuY3kgYmV0d2VlbiB0aGlzIGNvcHkgYW5kIHRoZSBub3RpY2VzIGluIHRoZSBmaWxlIHBuZy5oIHRoYXQgaXMKK2luY2x1ZGVkIGluIHRoZSBsaWJwbmcgZGlzdHJpYnV0aW9uLCB0aGUgbGF0dGVyIHNoYWxsIHByZXZhaWwuCisKK0NPUFlSSUdIVCBOT1RJQ0UsIERJU0NMQUlNRVIsIGFuZCBMSUNFTlNFOgorCitJZiB5b3UgbW9kaWZ5IGxpYnBuZyB5b3UgbWF5IGluc2VydCBhZGRpdGlvbmFsIG5vdGljZXMgaW1tZWRpYXRlbHkgZm9sbG93aW5nCit0aGlzIHNlbnRlbmNlLgorCitUaGlzIGNvZGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIGxpYnBuZyBsaWNlbnNlLgorCitsaWJwbmcgdmVyc2lvbnMgMS4yLjYsIEF1Z3VzdCAxNSwgMjAwNCwgdGhyb3VnaCAxLjQuNSwgRGVjZW1iZXIgOSwgMjAxMCwgYXJlCitDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYtMjAxMCBHbGVubiBSYW5kZXJzLVBlaHJzb24sIGFuZCBhcmUKK2Rpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgc2FtZSBkaXNjbGFpbWVyIGFuZCBsaWNlbnNlIGFzIGxpYnBuZy0xLjIuNQord2l0aCB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWwgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnMKKworICAgQ29zbWluIFRydXRhCisKK2xpYnBuZyB2ZXJzaW9ucyAxLjAuNywgSnVseSAxLCAyMDAwLCB0aHJvdWdoIDEuMi41IC0gT2N0b2JlciAzLCAyMDAyLCBhcmUKK0NvcHlyaWdodCAoYykgMjAwMC0yMDAyIEdsZW5uIFJhbmRlcnMtUGVocnNvbiwgYW5kIGFyZQorZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIGRpc2NsYWltZXIgYW5kIGxpY2Vuc2UgYXMgbGlicG5nLTEuMC42Cit3aXRoIHRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbHMgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnMKKworICAgU2ltb24tUGllcnJlIENhZGlldXgKKyAgIEVyaWMgUy4gUmF5bW9uZAorICAgR2lsbGVzIFZvbGxhbnQKKworYW5kIHdpdGggdGhlIGZvbGxvd2luZyBhZGRpdGlvbnMgdG8gdGhlIGRpc2NsYWltZXI6CisKKyAgIFRoZXJlIGlzIG5vIHdhcnJhbnR5IGFnYWluc3QgaW50ZXJmZXJlbmNlIHdpdGggeW91ciBlbmpveW1lbnQgb2YgdGhlCisgICBsaWJyYXJ5IG9yIGFnYWluc3QgaW5mcmluZ2VtZW50LiAgVGhlcmUgaXMgbm8gd2FycmFudHkgdGhhdCBvdXIKKyAgIGVmZm9ydHMgb3IgdGhlIGxpYnJhcnkgd2lsbCBmdWxmaWxsIGFueSBvZiB5b3VyIHBhcnRpY3VsYXIgcHVycG9zZXMKKyAgIG9yIG5lZWRzLiAgVGhpcyBsaWJyYXJ5IGlzIHByb3ZpZGVkIHdpdGggYWxsIGZhdWx0cywgYW5kIHRoZSBlbnRpcmUKKyAgIHJpc2sgb2Ygc2F0aXNmYWN0b3J5IHF1YWxpdHksIHBlcmZvcm1hbmNlLCBhY2N1cmFjeSwgYW5kIGVmZm9ydCBpcyB3aXRoCisgICB0aGUgdXNlci4KKworbGlicG5nIHZlcnNpb25zIDAuOTcsIEphbnVhcnkgMTk5OCwgdGhyb3VnaCAxLjAuNiwgTWFyY2ggMjAsIDIwMDAsIGFyZQorQ29weXJpZ2h0IChjKSAxOTk4LCAxOTk5IEdsZW5uIFJhbmRlcnMtUGVocnNvbiwgYW5kIGFyZQorZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIGRpc2NsYWltZXIgYW5kIGxpY2Vuc2UgYXMgbGlicG5nLTAuOTYsCit3aXRoIHRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbHMgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnM6CisKKyAgIFRvbSBMYW5lCisgICBHbGVubiBSYW5kZXJzLVBlaHJzb24KKyAgIFdpbGxlbSB2YW4gU2NoYWlrCisKK2xpYnBuZyB2ZXJzaW9ucyAwLjg5LCBKdW5lIDE5OTYsIHRocm91Z2ggMC45NiwgTWF5IDE5OTcsIGFyZQorQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyCitEaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgZGlzY2xhaW1lciBhbmQgbGljZW5zZSBhcyBsaWJwbmctMC44OCwKK3dpdGggdGhlIGZvbGxvd2luZyBpbmRpdmlkdWFscyBhZGRlZCB0byB0aGUgbGlzdCBvZiBDb250cmlidXRpbmcgQXV0aG9yczoKKworICAgSm9obiBCb3dsZXIKKyAgIEtldmluIEJyYWNleQorICAgU2FtIEJ1c2hlbGwKKyAgIE1hZ251cyBIb2xtZ3JlbgorICAgR3JlZyBSb2Vsb2ZzCisgICBUb20gVGFubmVyCisKK2xpYnBuZyB2ZXJzaW9ucyAwLjUsIE1heSAxOTk1LCB0aHJvdWdoIDAuODgsIEphbnVhcnkgMTk5NiwgYXJlCitDb3B5cmlnaHQgKGMpIDE5OTUsIDE5OTYgR3V5IEVyaWMgU2NoYWxuYXQsIEdyb3VwIDQyLCBJbmMuCisKK0ZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UsICJDb250cmlidXRpbmcgQXV0aG9ycyIKK2lzIGRlZmluZWQgYXMgdGhlIGZvbGxvd2luZyBzZXQgb2YgaW5kaXZpZHVhbHM6CisKKyAgIEFuZHJlYXMgRGlsZ2VyCisgICBEYXZlIE1hcnRpbmRhbGUKKyAgIEd1eSBFcmljIFNjaGFsbmF0CisgICBQYXVsIFNjaG1pZHQKKyAgIFRpbSBXZWduZXIKKworVGhlIFBORyBSZWZlcmVuY2UgTGlicmFyeSBpcyBzdXBwbGllZCAiQVMgSVMiLiAgVGhlIENvbnRyaWJ1dGluZyBBdXRob3JzCithbmQgR3JvdXAgNDIsIEluYy4gZGlzY2xhaW0gYWxsIHdhcnJhbnRpZXMsIGV4cHJlc3NlZCBvciBpbXBsaWVkLAoraW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgb2YKK2ZpdG5lc3MgZm9yIGFueSBwdXJwb3NlLiAgVGhlIENvbnRyaWJ1dGluZyBBdXRob3JzIGFuZCBHcm91cCA0MiwgSW5jLgorYXNzdW1lIG5vIGxpYWJpbGl0eSBmb3IgZGlyZWN0LCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgc3BlY2lhbCwgZXhlbXBsYXJ5LAorb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCB3aGljaCBtYXkgcmVzdWx0IGZyb20gdGhlIHVzZSBvZiB0aGUgUE5HCitSZWZlcmVuY2UgTGlicmFyeSwgZXZlbiBpZiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZS4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworc291cmNlIGNvZGUsIG9yIHBvcnRpb25zIGhlcmVvZiwgZm9yIGFueSBwdXJwb3NlLCB3aXRob3V0IGZlZSwgc3ViamVjdAordG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKKzEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb3VyY2UgY29kZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZC4KKworMi4gQWx0ZXJlZCB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2ggYW5kIG11c3Qgbm90CisgICBiZSBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc291cmNlLgorCiszLiBUaGlzIENvcHlyaWdodCBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkKKyAgIHNvdXJjZSBvciBhbHRlcmVkIHNvdXJjZSBkaXN0cmlidXRpb24uCisKK1RoZSBDb250cmlidXRpbmcgQXV0aG9ycyBhbmQgR3JvdXAgNDIsIEluYy4gc3BlY2lmaWNhbGx5IHBlcm1pdCwgd2l0aG91dAorZmVlLCBhbmQgZW5jb3VyYWdlIHRoZSB1c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBhcyBhIGNvbXBvbmVudCB0bworc3VwcG9ydGluZyB0aGUgUE5HIGZpbGUgZm9ybWF0IGluIGNvbW1lcmNpYWwgcHJvZHVjdHMuICBJZiB5b3UgdXNlIHRoaXMKK3NvdXJjZSBjb2RlIGluIGEgcHJvZHVjdCwgYWNrbm93bGVkZ21lbnQgaXMgbm90IHJlcXVpcmVkIGJ1dCB3b3VsZCBiZQorYXBwcmVjaWF0ZWQuCisKKworQSAicG5nX2dldF9jb3B5cmlnaHQiIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSwgZm9yIGNvbnZlbmllbnQgdXNlIGluICJhYm91dCIKK2JveGVzIGFuZCB0aGUgbGlrZToKKworICAgcHJpbnRmKCIlcyIscG5nX2dldF9jb3B5cmlnaHQoTlVMTCkpOworCitBbHNvLCB0aGUgUE5HIGxvZ28gKGluIFBORyBmb3JtYXQsIG9mIGNvdXJzZSkgaXMgc3VwcGxpZWQgaW4gdGhlCitmaWxlcyAicG5nYmFyLnBuZyIgYW5kICJwbmdiYXIuanBnICg4OHgzMSkgYW5kICJwbmdub3cucG5nIiAoOTh4MzEpLgorCitMaWJwbmcgaXMgT1NJIENlcnRpZmllZCBPcGVuIFNvdXJjZSBTb2Z0d2FyZS4gIE9TSSBDZXJ0aWZpZWQgT3BlbiBTb3VyY2UgaXMgYQorY2VydGlmaWNhdGlvbiBtYXJrIG9mIHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlLgorCitHbGVubiBSYW5kZXJzLVBlaHJzb24KK2dsZW5ucnAgYXQgdXNlcnMuc291cmNlZm9yZ2UubmV0CitEZWNlbWJlciA5LCAyMDEwCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTUlUIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NSVQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNmOGJlZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTUlUCkBAIC0wLDAgKzEsMjMgQEAKKworTUlUIExpY2Vuc2UKKworQ29weXJpZ2h0IChjKSA8eWVhcj4gPGNvcHlyaWdodCBob2xkZXJzPgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUEwtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZGMzZjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01QTC0xLjAKQEAgLTAsMCArMSwxMDkgQEAKKworTU9aSUxMQSBQVUJMSUMgTElDRU5TRQorVmVyc2lvbiAxLjAKKworMS4gRGVmaW5pdGlvbnMuCisKKzEuMS4gYGBDb250cmlidXRvcmBgIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKzEuMi4gYGBDb250cmlidXRvciBWZXJzaW9uYGAgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorCisxLjMuIGBgQ292ZXJlZCBDb2RlYGAgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKworMS40LiBgYEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbWBgIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLgorCisxLjUuIGBgRXhlY3V0YWJsZWBgIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLgorCisxLjYuIGBgSW5pdGlhbCBEZXZlbG9wZXJgYCBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuCisKKzEuNy4gYGBMYXJnZXIgV29ya2BgIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuOC4gYGBMaWNlbnNlYGAgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworMS45LiBgYE1vZGlmaWNhdGlvbnNgYCBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczoKKworQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworMS4xMC4gYGBPcmlnaW5hbCBDb2RlYGAgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMgT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKworMS4xMS4gYGBTb3VyY2UgQ29kZWBgIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIGEgbGlzdCBvZiBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcmBzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKworMS4xMi4gYGBZb3VgYCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCBgYFlvdWBgIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCBgYGNvbnRyb2xgYCBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4gCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgSW5pdGlhbCBEZXZlbG9wZXIsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsIChgYFV0aWxpemVgYCkgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byBVdGlsaXplIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSBhbmQgbm90IHRvIGFueSBncmVhdGVyIGV4dGVudCB0aGF0IG1heSBiZSBuZWNlc3NhcnkgdG8gVXRpbGl6ZSBmdXJ0aGVyIE1vZGlmaWNhdGlvbnMgb3IgY29tYmluYXRpb25zLgorCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LiAKK0VhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorCisoYSkgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgQ29udHJpYnV0b3IsIHRvIFV0aWxpemUgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byBVdGlsaXplIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYW5kIG5vdCB0byBhbnkgZ3JlYXRlciBleHRlbnQgdGhhdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIFV0aWxpemUgZnVydGhlciBNb2RpZmljYXRpb25zIG9yIGNvbWJpbmF0aW9ucy4KKworMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLiAKK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LgorMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuIAorQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuCisKKzMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4gCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIHlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMKKworKGEpIFRoaXJkIFBhcnR5IENsYWltcy4gCitJZiBZb3UgaGF2ZSBrbm93bGVkZ2UgdGhhdCBhIHBhcnR5IGNsYWltcyBhbiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgaW4gcGFydGljdWxhciBmdW5jdGlvbmFsaXR5IG9yIGNvZGUgKG9yIGl0cyB1dGlsaXphdGlvbiB1bmRlciB0aGlzIExpY2Vuc2UpLCB5b3UgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgYGBMRUdBTGBgIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgeW91IG9idGFpbiBzdWNoIGtub3dsZWRnZSBhZnRlciBZb3UgbWFrZSBZb3VyIE1vZGlmaWNhdGlvbiBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBZb3Ugc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgWW91IG1ha2UgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuCisKKyhiKSBDb250cmlidXRvciBBUElzLiAKK0lmIFlvdXIgTW9kaWZpY2F0aW9uIGlzIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBhbmQgWW91IG93biBvciBjb250cm9sIHBhdGVudHMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgeW91IG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuCisKKzMuNS4gUmVxdWlyZWQgTm90aWNlcy4gCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSwgYW5kIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlLCB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpLCBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4geW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5IGZpbGUpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYW4gYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLiAKK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsIGFuZCBpZiBZb3UgaW5jbHVkZSBhIG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSBpbmNsdWRlZCBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byB0aGUgQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLgorCiszLjcuIExhcmdlciBXb3Jrcy4gCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCisKKzQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4KK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LgorCis1LiBBcHBsaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEsIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKzYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLgorNi4xLiBOZXcgVmVyc2lvbnMuIAorTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24gKGBgTmV0c2NhcGVgYCkgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorNi4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLiAKK09uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBOZXRzY2FwZS4gTm8gb25lIG90aGVyIHRoYW4gTmV0c2NhcGUgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCis2LjMuIERlcml2YXRpdmUgV29ya3MuIAorSWYgeW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvIGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIHlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZXMgYGBNb3ppbGxhYGAsIGBgTU9aSUxMQVBMYGAsIGBgTU9aUExgYCwgYGBOZXRzY2FwZWBgLCBgYE5QTGBgIG9yIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGFueXdoZXJlIGluIHlvdXIgbGljZW5zZSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgeW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIGFuZCBOZXRzY2FwZSBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKQorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiBgYEFTIElTYGAgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBDT0RFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIENPREUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRCBDT0RFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VIChOT1QgVEhFIElOSVRJQUwgREVWRUxPUEVSIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKzguIFRFUk1JTkFUSU9OLgorVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBZT1UgT1IgQU5ZIE9USEVSIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZYFMgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSEFUIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKzEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorVGhlIENvdmVyZWQgQ29kZSBpcyBhIGBgY29tbWVyY2lhbCBpdGVtLGBgIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiBgYGNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmVgYCBhbmQgYGBjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sYGAgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorMTEuIE1JU0NFTExBTkVPVVMuCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IENhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFdpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUgcGFydHkgaXMgYSBjaXRpemVuIG9mLCBvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4sIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2E6IChhKSB1bmxlc3Mgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nLCBhbGwgZGlzcHV0ZXMgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIChleGNlcHRpbmcgYW55IGRpc3B1dGUgcmVsYXRpbmcgdG8gaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cykgc2hhbGwgYmUgc3ViamVjdCB0byBmaW5hbCBhbmQgYmluZGluZyBhcmJpdHJhdGlvbiwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHBheWluZyBhbGwgY29zdHMgb2YgYXJiaXRyYXRpb247IChiKSBhbnkgYXJiaXRyYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgaGVsZCBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHVuZGVyIHRoZSBhdXNwaWNlcyBvZiBKQU1TL0VuZERpc3B1dGU7IGFuZCAoYykgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5cyBmZWVzIGFuZCBleHBlbnNlcy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisxMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4KK0V4Y2VwdCBpbiBjYXNlcyB3aGVyZSBhbm90aGVyIENvbnRyaWJ1dG9yIGhhcyBmYWlsZWQgdG8gY29tcGx5IHdpdGggU2VjdGlvbiAzLjQsIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIFlvdXIgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgYmFzZWQgb24gdGhlIG51bWJlciBvZiBjb3BpZXMgb2YgQ292ZXJlZCBDb2RlIHlvdSBtYWRlIGF2YWlsYWJsZSwgdGhlIHJldmVudWVzIHlvdSByZWNlaXZlZCBmcm9tIHV0aWxpemluZyBzdWNoIHJpZ2h0cywgYW5kIG90aGVyIHJlbGV2YW50IGZhY3RvcnMuIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggYWZmZWN0ZWQgcGFydGllcyB0byBkaXN0cmlidXRlIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4KK0VYSElCSVQgQS4KK2BgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLgorCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX19fX19fX19fLiBQb3J0aW9ucyBjcmVhdGVkIGJ5IF9fX19fX19fX19fX19fX19fX19fX18gYXJlIENvcHlyaWdodCAoQykgX19fX19fIF9fX19fX19fX19fX19fX19fX19fX19fLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitDb250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uYGAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUEwtMS4xIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUEwtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYThjNGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01QTC0xLjEKQEAgLTAsMCArMSwxODUgQEAKKworTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMQorCisxLiBEZWZpbml0aW9ucy4KKworMS4wLjEuICJDb21tZXJjaWFsIFVzZSIKK21lYW5zIGRpc3RyaWJ1dGlvbiBvciBvdGhlcndpc2UgbWFraW5nIHRoZSBDb3ZlcmVkIENvZGUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuCisxLjEuICJDb250cmlidXRvciIKK21lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKzEuMi4gIkNvbnRyaWJ1dG9yIFZlcnNpb24iCittZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisxLjMuICJDb3ZlcmVkIENvZGUiCittZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorMS40LiAiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIgorbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuCisxLjUuICJFeGVjdXRhYmxlIgorbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuCisxLjYuICJJbml0aWFsIERldmVsb3BlciIKK21lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS4KKzEuNy4gIkxhcmdlciBXb3JrIgorbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKzEuOC4gIkxpY2Vuc2UiCittZWFucyB0aGlzIGRvY3VtZW50LgorMS44LjEuICJMaWNlbnNhYmxlIgorbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBoZXJlaW4uCisxLjkuICJNb2RpZmljYXRpb25zIgorbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6CitBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKzEuMTAuICJPcmlnaW5hbCBDb2RlIgorbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMgT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKzEuMTAuMS4gIlBhdGVudCBDbGFpbXMiCittZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci4KKzEuMTEuICJTb3VyY2UgQ29kZSIKK21lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yYHMgY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLCBwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorMS4xMi4gIllvdSIgKG9yICJZb3VyIikKK21lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLgorCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KKworVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKwordW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKK3VuZGVyIFBhdGVudHMgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZyBvciBzZWxsaW5nIG9mIE9yaWdpbmFsIENvZGUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLgordGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gdGhpcyBTZWN0aW9uIDIuMSAoYSkgYW5kIChiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIEluaXRpYWwgRGV2ZWxvcGVyIGZpcnN0IGRpc3RyaWJ1dGVzIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KK05vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMSAoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6IDEpIGZvciBjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyBvciAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgaWkpIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGRldmljZXMuCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorCitTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZQorCit1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCit1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUgYW5kL29yIGluIGNvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZjogMSkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQgMikgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLgordGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4yIChhKSBhbmQgMi4yIChiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUuCitOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjIgKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgYW55IGNvZGUgdGhhdCBDb250cmlidXRvciBoYXMgZGVsZXRlZCBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IgVmVyc2lvbiBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSBDb3ZlcmVkIENvZGUgaW4gdGhlIGFic2VuY2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IuCiszLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuCisKKzMuMS4gQXBwbGljYXRpb24gb2YgTGljZW5zZS4KKworVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuCisKKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciB2aWEgYW4gYWNjZXB0ZWQgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGU7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4KKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMKKworKGEpIFRoaXJkIFBhcnR5IENsYWltcworCitJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHlgcyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsIENvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBTb3VyY2UgQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkICJMRUdBTCIgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZSBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKworKGIpIENvbnRyaWJ1dG9yIEFQSXMKKworSWYgQ29udHJpYnV0b3JgcyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLgorCisoYykgUmVwcmVzZW50YXRpb25zLgorCitDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gU2VjdGlvbiAzLjQgKGEpIGFib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yYHMgTW9kaWZpY2F0aW9ucyBhcmUgQ29udHJpYnV0b3JgcyBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IgQ29udHJpYnV0b3IgaGFzIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCiszLjUuIFJlcXVpcmVkIE5vdGljZXMuCisKK1lvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBZb3UgbXVzdCBhbHNvIGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIG9yIG93bmVyc2hpcCByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbiBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCisKK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9ucyAzLjEsIDMuMiwgMy4zLCAzLjQgYW5kIDMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZSwgYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdSBoYXZlIGZ1bGZpbGxlZCB0aGUgb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBvciBvd25lcnNoaXAgcmlnaHRzIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50YHMgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci4KKworMy43LiBMYXJnZXIgV29ya3MuCisKK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4KKworNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLgorCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LgorCis1LiBBcHBsaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyBhdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCisKKzYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLgorCis2LjEuIE5ldyBWZXJzaW9ucworCitOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbiAoIk5ldHNjYXBlIikgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMKKworT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IE5ldHNjYXBlLiBObyBvbmUgb3RoZXIgdGhhbiBOZXRzY2FwZSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzYuMy4gRGVyaXZhdGl2ZSBXb3JrcworCitJZiBZb3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgWW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlcyAiTW96aWxsYSIsICJNT1pJTExBUEwiLCAiTU9aUEwiLCAiTmV0c2NhcGUiLCAiTVBMIiwgIk5QTCIgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgaW4geW91ciBsaWNlbnNlIChleGNlcHQgdG8gbm90ZSB0aGF0IHlvdXIgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgWW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIGFuZCBOZXRzY2FwZSBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKQorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZCisKK0NPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCis4LiBUZXJtaW5hdGlvbgorCis4LjEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKworOC4yLiBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIChleGNsdWRpbmcgZGVjbGF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYSBDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSBZb3UgZmlsZSBzdWNoIGFjdGlvbiBpcyByZWZlcnJlZCB0byBhcyAiUGFydGljaXBhbnQiKSBhbGxlZ2luZyB0aGF0OgorCitzdWNoIFBhcnRpY2lwYW50YHMgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZSBzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZSBmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LCB1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZiBub3RpY2UgWW91IGVpdGhlcjogKGkpIGFncmVlIGluIHdyaXRpbmcgdG8gcGF5IFBhcnRpY2lwYW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibGUgcm95YWx0eSBmb3IgWW91ciBwYXN0IGFuZCBmdXR1cmUgdXNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoIFBhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gYWdhaW5zdCBzdWNoIFBhcnRpY2lwYW50LiBJZiB3aXRoaW4gNjAgZGF5cyBvZiBub3RpY2UsIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QgbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mIHRoZSA2MCBkYXkgbm90aWNlIHBlcmlvZCBzcGVjaWZpZWQgYWJvdmUuCithbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMShiKSBhbmQgMi4yKGIpIGFyZSByZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwgc29sZCwgZGlzdHJpYnV0ZWQsIG9yIGhhZCBtYWRlLCBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBQYXJ0aWNpcGFudC4KKzguMy4gSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudCBhbGxlZ2luZyB0aGF0IHN1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IgbGljZW5zZS4KKworOC40LiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZCisKK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZYFMgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworMTAuIFUuUy4gZ292ZXJubWVudCBlbmQgdXNlcnMKKworVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0sIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUiIGFuZCAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCIgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisxMS4gTWlzY2VsbGFuZW91cworCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IENhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFdpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUgcGFydHkgaXMgYSBjaXRpemVuIG9mLCBvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSwgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXNgIGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKworMTIuIFJlc3BvbnNpYmlsaXR5IGZvciBjbGFpbXMKKworQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcyByZXNwb25zaWJsZSBmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgWW91IGFncmVlIHRvIHdvcmsgd2l0aCBJbml0aWFsIERldmVsb3BlciBhbmQgQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorCisxMy4gTXVsdGlwbGUtbGljZW5zZWQgY29kZQorCitJbml0aWFsIERldmVsb3BlciBtYXkgZGVzaWduYXRlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgYXMgIk11bHRpcGxlLUxpY2Vuc2VkIi4gIk11bHRpcGxlLUxpY2Vuc2VkIiBtZWFucyB0aGF0IHRoZSBJbml0aWFsIERldmVsb3BlciBwZXJtaXRzIHlvdSB0byB1dGlsaXplIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXIgWW91ciBjaG9pY2Ugb2YgdGhlIE1QTCBvciB0aGUgYWx0ZXJuYXRpdmUgbGljZW5zZXMsIGlmIGFueSwgc3BlY2lmaWVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgZmlsZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLgorCitFeGhpYml0IEEgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlLgorCisiVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZQorVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgorY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKK2h0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCitiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS4KKworVGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fX19fX19fX18uCitQb3J0aW9ucyBjcmVhdGVkIGJ5IF9fX19fX19fX19fX19fX19fX19fX18gYXJlIENvcHlyaWdodCAoQykgX19fX19fCitfX19fX19fX19fX19fX19fX19fX19fXy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLgorCitBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcworb2YgdGhlIF9fX19fIGxpY2Vuc2UgKHRoZSAgIltfX19dIExpY2Vuc2UiKSwgaW4gd2hpY2ggY2FzZSB0aGUKK3Byb3Zpc2lvbnMgb2YgW19fX19fX10gTGljZW5zZSBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlCithYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBbX19fX10gTGljZW5zZSBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKK3lvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQorZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kCitvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBbX19fXSBMaWNlbnNlLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQordGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQordW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIFtfX19dIExpY2Vuc2UuIgorTk9URTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmcm9tIHRoZSB0ZXh0IG9mIHRoZSBub3RpY2VzIGluIHRoZSBTb3VyY2UgQ29kZSBmaWxlcyBvZiB0aGUgT3JpZ2luYWwgQ29kZS4gWW91IHNob3VsZCB1c2UgdGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgcmF0aGVyIHRoYW4gdGhlIHRleHQgZm91bmQgaW4gdGhlIE9yaWdpbmFsIENvZGUgU291cmNlIENvZGUgZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUEwtMi4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUEwtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZTJmNzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01QTC0yLjAKQEAgLTAsMCArMSwzNzMgQEAKK01vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4gRGVmaW5pdGlvbnMKKy0tLS0tLS0tLS0tLS0tCisKKzEuMS4gIkNvbnRyaWJ1dG9yIgorICAgIG1lYW5zIGVhY2ggaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgdGhhdCBjcmVhdGVzLCBjb250cmlidXRlcyB0bworICAgIHRoZSBjcmVhdGlvbiBvZiwgb3Igb3ducyBDb3ZlcmVkIFNvZnR3YXJlLgorCisxLjIuICJDb250cmlidXRvciBWZXJzaW9uIgorICAgIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9ucyBvZiBvdGhlcnMgKGlmIGFueSkgdXNlZAorICAgIGJ5IGEgQ29udHJpYnV0b3IgYW5kIHRoYXQgcGFydGljdWxhciBDb250cmlidXRvcidzIENvbnRyaWJ1dGlvbi4KKworMS4zLiAiQ29udHJpYnV0aW9uIgorICAgIG1lYW5zIENvdmVyZWQgU29mdHdhcmUgb2YgYSBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorCisxLjQuICJDb3ZlcmVkIFNvZnR3YXJlIgorICAgIG1lYW5zIFNvdXJjZSBDb2RlIEZvcm0gdG8gd2hpY2ggdGhlIGluaXRpYWwgQ29udHJpYnV0b3IgaGFzIGF0dGFjaGVkCisgICAgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEsIHRoZSBFeGVjdXRhYmxlIEZvcm0gb2Ygc3VjaCBTb3VyY2UgQ29kZQorICAgIEZvcm0sIGFuZCBNb2RpZmljYXRpb25zIG9mIHN1Y2ggU291cmNlIENvZGUgRm9ybSwgaW4gZWFjaCBjYXNlCisgICAgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuNS4gIkluY29tcGF0aWJsZSBXaXRoIFNlY29uZGFyeSBMaWNlbnNlcyIKKyAgICBtZWFucworCisgICAgKGEpIHRoYXQgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UgZGVzY3JpYmVkCisgICAgICAgIGluIEV4aGliaXQgQiB0byB0aGUgQ292ZXJlZCBTb2Z0d2FyZTsgb3IKKworICAgIChiKSB0aGF0IHRoZSBDb3ZlcmVkIFNvZnR3YXJlIHdhcyBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YKKyAgICAgICAgdmVyc2lvbiAxLjEgb3IgZWFybGllciBvZiB0aGUgTGljZW5zZSwgYnV0IG5vdCBhbHNvIHVuZGVyIHRoZQorICAgICAgICB0ZXJtcyBvZiBhIFNlY29uZGFyeSBMaWNlbnNlLgorCisxLjYuICJFeGVjdXRhYmxlIEZvcm0iCisgICAgbWVhbnMgYW55IGZvcm0gb2YgdGhlIHdvcmsgb3RoZXIgdGhhbiBTb3VyY2UgQ29kZSBGb3JtLgorCisxLjcuICJMYXJnZXIgV29yayIKKyAgICBtZWFucyBhIHdvcmsgdGhhdCBjb21iaW5lcyBDb3ZlcmVkIFNvZnR3YXJlIHdpdGggb3RoZXIgbWF0ZXJpYWwsIGluIAorICAgIGEgc2VwYXJhdGUgZmlsZSBvciBmaWxlcywgdGhhdCBpcyBub3QgQ292ZXJlZCBTb2Z0d2FyZS4KKworMS44LiAiTGljZW5zZSIKKyAgICBtZWFucyB0aGlzIGRvY3VtZW50LgorCisxLjkuICJMaWNlbnNhYmxlIgorICAgIG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwKKyAgICB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseSwgYW55IGFuZAorICAgIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS4KKworMS4xMC4gIk1vZGlmaWNhdGlvbnMiCisgICAgbWVhbnMgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAoYSkgYW55IGZpbGUgaW4gU291cmNlIENvZGUgRm9ybSB0aGF0IHJlc3VsdHMgZnJvbSBhbiBhZGRpdGlvbiB0bywKKyAgICAgICAgZGVsZXRpb24gZnJvbSwgb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250ZW50cyBvZiBDb3ZlcmVkCisgICAgICAgIFNvZnR3YXJlOyBvcgorCisgICAgKGIpIGFueSBuZXcgZmlsZSBpbiBTb3VyY2UgQ29kZSBGb3JtIHRoYXQgY29udGFpbnMgYW55IENvdmVyZWQKKyAgICAgICAgU29mdHdhcmUuCisKKzEuMTEuICJQYXRlbnQgQ2xhaW1zIiBvZiBhIENvbnRyaWJ1dG9yCisgICAgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLAorICAgIHByb2Nlc3MsIGFuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgc3VjaAorICAgIENvbnRyaWJ1dG9yIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkLCBidXQgZm9yIHRoZSBncmFudCBvZiB0aGUKKyAgICBMaWNlbnNlLCBieSB0aGUgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yIHNhbGUsIGhhdmluZworICAgIG1hZGUsIGltcG9ydCwgb3IgdHJhbnNmZXIgb2YgZWl0aGVyIGl0cyBDb250cmlidXRpb25zIG9yIGl0cworICAgIENvbnRyaWJ1dG9yIFZlcnNpb24uCisKKzEuMTIuICJTZWNvbmRhcnkgTGljZW5zZSIKKyAgICBtZWFucyBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDIuMCwgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDIuMSwgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbAorICAgIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDMuMCwgb3IgYW55IGxhdGVyIHZlcnNpb25zIG9mIHRob3NlCisgICAgbGljZW5zZXMuCisKKzEuMTMuICJTb3VyY2UgQ29kZSBGb3JtIgorICAgIG1lYW5zIHRoZSBmb3JtIG9mIHRoZSB3b3JrIHByZWZlcnJlZCBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMuCisKKzEuMTQuICJZb3UiIChvciAiWW91ciIpCisgICAgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzCisgICAgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHRoYXQKKyAgICBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvcgorICAgIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdAorICAgIG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksCisgICAgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuCisgICAgZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwKKyAgICBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIExpY2Vuc2UgR3JhbnRzIGFuZCBDb25kaXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisyLjEuIEdyYW50cworCitFYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLAorbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlOgorCisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKQorICAgIExpY2Vuc2FibGUgYnkgc3VjaCBDb250cmlidXRvciB0byB1c2UsIHJlcHJvZHVjZSwgbWFrZSBhdmFpbGFibGUsCisgICAgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBkaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIGV4cGxvaXQgaXRzCisgICAgQ29udHJpYnV0aW9ucywgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggTW9kaWZpY2F0aW9ucywgb3IKKyAgICBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgUGF0ZW50IENsYWltcyBvZiBzdWNoIENvbnRyaWJ1dG9yIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIKKyAgICBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgZWl0aGVyIGl0cworICAgIENvbnRyaWJ1dGlvbnMgb3IgaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24uCisKKzIuMi4gRWZmZWN0aXZlIERhdGUKKworVGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbiAyLjEgd2l0aCByZXNwZWN0IHRvIGFueSBDb250cmlidXRpb24KK2JlY29tZSBlZmZlY3RpdmUgZm9yIGVhY2ggQ29udHJpYnV0aW9uIG9uIHRoZSBkYXRlIHRoZSBDb250cmlidXRvciBmaXJzdAorZGlzdHJpYnV0ZXMgc3VjaCBDb250cmlidXRpb24uCisKKzIuMy4gTGltaXRhdGlvbnMgb24gR3JhbnQgU2NvcGUKKworVGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gdGhpcyBTZWN0aW9uIDIgYXJlIHRoZSBvbmx5IHJpZ2h0cyBncmFudGVkIHVuZGVyCit0aGlzIExpY2Vuc2UuIE5vIGFkZGl0aW9uYWwgcmlnaHRzIG9yIGxpY2Vuc2VzIHdpbGwgYmUgaW1wbGllZCBmcm9tIHRoZQorZGlzdHJpYnV0aW9uIG9yIGxpY2Vuc2luZyBvZiBDb3ZlcmVkIFNvZnR3YXJlIHVuZGVyIHRoaXMgTGljZW5zZS4KK05vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZCBieSBhCitDb250cmlidXRvcjoKKworKGEpIGZvciBhbnkgY29kZSB0aGF0IGEgQ29udHJpYnV0b3IgaGFzIHJlbW92ZWQgZnJvbSBDb3ZlcmVkIFNvZnR3YXJlOworICAgIG9yCisKKyhiKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IChpKSBZb3VyIGFuZCBhbnkgb3RoZXIgdGhpcmQgcGFydHkncworICAgIG1vZGlmaWNhdGlvbnMgb2YgQ292ZXJlZCBTb2Z0d2FyZSwgb3IgKGlpKSB0aGUgY29tYmluYXRpb24gb2YgaXRzCisgICAgQ29udHJpYnV0aW9ucyB3aXRoIG90aGVyIHNvZnR3YXJlIChleGNlcHQgYXMgcGFydCBvZiBpdHMgQ29udHJpYnV0b3IKKyAgICBWZXJzaW9uKTsgb3IKKworKGMpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IENvdmVyZWQgU29mdHdhcmUgaW4gdGhlIGFic2VuY2Ugb2YKKyAgICBpdHMgQ29udHJpYnV0aW9ucy4KKworVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgaW4gdGhlIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsCitvciBsb2dvcyBvZiBhbnkgQ29udHJpYnV0b3IgKGV4Y2VwdCBhcyBtYXkgYmUgbmVjZXNzYXJ5IHRvIGNvbXBseSB3aXRoCit0aGUgbm90aWNlIHJlcXVpcmVtZW50cyBpbiBTZWN0aW9uIDMuNCkuCisKKzIuNC4gU3Vic2VxdWVudCBMaWNlbnNlcworCitObyBDb250cmlidXRvciBtYWtlcyBhZGRpdGlvbmFsIGdyYW50cyBhcyBhIHJlc3VsdCBvZiBZb3VyIGNob2ljZSB0bworZGlzdHJpYnV0ZSB0aGUgQ292ZXJlZCBTb2Z0d2FyZSB1bmRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGlzCitMaWNlbnNlIChzZWUgU2VjdGlvbiAxMC4yKSBvciB1bmRlciB0aGUgdGVybXMgb2YgYSBTZWNvbmRhcnkgTGljZW5zZSAoaWYKK3Blcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAzLjMpLgorCisyLjUuIFJlcHJlc2VudGF0aW9uCisKK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRoZSBDb250cmlidXRvciBiZWxpZXZlcyBpdHMKK0NvbnRyaWJ1dGlvbnMgYXJlIGl0cyBvcmlnaW5hbCBjcmVhdGlvbihzKSBvciBpdCBoYXMgc3VmZmljaWVudCByaWdodHMKK3RvIGdyYW50IHRoZSByaWdodHMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCisyLjYuIEZhaXIgVXNlCisKK1RoaXMgTGljZW5zZSBpcyBub3QgaW50ZW5kZWQgdG8gbGltaXQgYW55IHJpZ2h0cyBZb3UgaGF2ZSB1bmRlcgorYXBwbGljYWJsZSBjb3B5cmlnaHQgZG9jdHJpbmVzIG9mIGZhaXIgdXNlLCBmYWlyIGRlYWxpbmcsIG9yIG90aGVyCitlcXVpdmFsZW50cy4KKworMi43LiBDb25kaXRpb25zCisKK1NlY3Rpb25zIDMuMSwgMy4yLCAzLjMsIGFuZCAzLjQgYXJlIGNvbmRpdGlvbnMgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQKK2luIFNlY3Rpb24gMi4xLgorCiszLiBSZXNwb25zaWJpbGl0aWVzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKzMuMS4gRGlzdHJpYnV0aW9uIG9mIFNvdXJjZSBGb3JtCisKK0FsbCBkaXN0cmlidXRpb24gb2YgQ292ZXJlZCBTb2Z0d2FyZSBpbiBTb3VyY2UgQ29kZSBGb3JtLCBpbmNsdWRpbmcgYW55CitNb2RpZmljYXRpb25zIHRoYXQgWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSwgbXVzdCBiZSB1bmRlcgordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gWW91IG11c3QgaW5mb3JtIHJlY2lwaWVudHMgdGhhdCB0aGUgU291cmNlCitDb2RlIEZvcm0gb2YgdGhlIENvdmVyZWQgU29mdHdhcmUgaXMgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2UsIGFuZCBob3cgdGhleSBjYW4gb2J0YWluIGEgY29weSBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtYXkgbm90CithdHRlbXB0IHRvIGFsdGVyIG9yIHJlc3RyaWN0IHRoZSByZWNpcGllbnRzJyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlCitGb3JtLgorCiszLjIuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIEZvcm0KKworSWYgWW91IGRpc3RyaWJ1dGUgQ292ZXJlZCBTb2Z0d2FyZSBpbiBFeGVjdXRhYmxlIEZvcm0gdGhlbjoKKworKGEpIHN1Y2ggQ292ZXJlZCBTb2Z0d2FyZSBtdXN0IGFsc28gYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUKKyAgICBGb3JtLCBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjEsIGFuZCBZb3UgbXVzdCBpbmZvcm0gcmVjaXBpZW50cyBvZgorICAgIHRoZSBFeGVjdXRhYmxlIEZvcm0gaG93IHRoZXkgY2FuIG9idGFpbiBhIGNvcHkgb2Ygc3VjaCBTb3VyY2UgQ29kZQorICAgIEZvcm0gYnkgcmVhc29uYWJsZSBtZWFucyBpbiBhIHRpbWVseSBtYW5uZXIsIGF0IGEgY2hhcmdlIG5vIG1vcmUKKyAgICB0aGFuIHRoZSBjb3N0IG9mIGRpc3RyaWJ1dGlvbiB0byB0aGUgcmVjaXBpZW50OyBhbmQKKworKGIpIFlvdSBtYXkgZGlzdHJpYnV0ZSBzdWNoIEV4ZWN1dGFibGUgRm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcworICAgIExpY2Vuc2UsIG9yIHN1YmxpY2Vuc2UgaXQgdW5kZXIgZGlmZmVyZW50IHRlcm1zLCBwcm92aWRlZCB0aGF0IHRoZQorICAgIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIEZvcm0gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlcgorICAgIHRoZSByZWNpcGllbnRzJyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIEZvcm0gdW5kZXIgdGhpcyBMaWNlbnNlLgorCiszLjMuIERpc3RyaWJ1dGlvbiBvZiBhIExhcmdlciBXb3JrCisKK1lvdSBtYXkgY3JlYXRlIGFuZCBkaXN0cmlidXRlIGEgTGFyZ2VyIFdvcmsgdW5kZXIgdGVybXMgb2YgWW91ciBjaG9pY2UsCitwcm92aWRlZCB0aGF0IFlvdSBhbHNvIGNvbXBseSB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGZvcgordGhlIENvdmVyZWQgU29mdHdhcmUuIElmIHRoZSBMYXJnZXIgV29yayBpcyBhIGNvbWJpbmF0aW9uIG9mIENvdmVyZWQKK1NvZnR3YXJlIHdpdGggYSB3b3JrIGdvdmVybmVkIGJ5IG9uZSBvciBtb3JlIFNlY29uZGFyeSBMaWNlbnNlcywgYW5kIHRoZQorQ292ZXJlZCBTb2Z0d2FyZSBpcyBub3QgSW5jb21wYXRpYmxlIFdpdGggU2Vjb25kYXJ5IExpY2Vuc2VzLCB0aGlzCitMaWNlbnNlIHBlcm1pdHMgWW91IHRvIGFkZGl0aW9uYWxseSBkaXN0cmlidXRlIHN1Y2ggQ292ZXJlZCBTb2Z0d2FyZQordW5kZXIgdGhlIHRlcm1zIG9mIHN1Y2ggU2Vjb25kYXJ5IExpY2Vuc2UocyksIHNvIHRoYXQgdGhlIHJlY2lwaWVudCBvZgordGhlIExhcmdlciBXb3JrIG1heSwgYXQgdGhlaXIgb3B0aW9uLCBmdXJ0aGVyIGRpc3RyaWJ1dGUgdGhlIENvdmVyZWQKK1NvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhpcyBMaWNlbnNlIG9yIHN1Y2ggU2Vjb25kYXJ5CitMaWNlbnNlKHMpLgorCiszLjQuIE5vdGljZXMKKworWW91IG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIHRoZSBzdWJzdGFuY2Ugb2YgYW55IGxpY2Vuc2Ugbm90aWNlcworKGluY2x1ZGluZyBjb3B5cmlnaHQgbm90aWNlcywgcGF0ZW50IG5vdGljZXMsIGRpc2NsYWltZXJzIG9mIHdhcnJhbnR5LAorb3IgbGltaXRhdGlvbnMgb2YgbGlhYmlsaXR5KSBjb250YWluZWQgd2l0aGluIHRoZSBTb3VyY2UgQ29kZSBGb3JtIG9mCit0aGUgQ292ZXJlZCBTb2Z0d2FyZSwgZXhjZXB0IHRoYXQgWW91IG1heSBhbHRlciBhbnkgbGljZW5zZSBub3RpY2VzIHRvCit0aGUgZXh0ZW50IHJlcXVpcmVkIHRvIHJlbWVkeSBrbm93biBmYWN0dWFsIGluYWNjdXJhY2llcy4KKworMy41LiBBcHBsaWNhdGlvbiBvZiBBZGRpdGlvbmFsIFRlcm1zCisKK1lvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsCitpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZAorU29mdHdhcmUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24KK2JlaGFsZiBvZiBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueQorc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5LCBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5CitZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSBldmVyeSBDb250cmlidXRvciBmb3IgYW55CitsaWFiaWxpdHkgaW5jdXJyZWQgYnkgc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwKK2luZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLiBZb3UgbWF5IGluY2x1ZGUgYWRkaXRpb25hbAorZGlzY2xhaW1lcnMgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb25zIG9mIGxpYWJpbGl0eSBzcGVjaWZpYyB0byBhbnkKK2p1cmlzZGljdGlvbi4KKworNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgU29mdHdhcmUgZHVlIHRvCitzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGgKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpCitkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QKK2JlIHBsYWNlZCBpbiBhIHRleHQgZmlsZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBDb3ZlcmVkCitTb2Z0d2FyZSB1bmRlciB0aGlzIExpY2Vuc2UuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZQorb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYQorcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKworNS4gVGVybWluYXRpb24KKy0tLS0tLS0tLS0tLS0tCisKKzUuMS4gVGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5CitpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCBhbnkgb2YgaXRzIHRlcm1zLiBIb3dldmVyLCBpZiBZb3UgYmVjb21lCitjb21wbGlhbnQsIHRoZW4gdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBmcm9tIGEgcGFydGljdWxhcgorQ29udHJpYnV0b3IgYXJlIHJlaW5zdGF0ZWQgKGEpIHByb3Zpc2lvbmFsbHksIHVubGVzcyBhbmQgdW50aWwgc3VjaAorQ29udHJpYnV0b3IgZXhwbGljaXRseSBhbmQgZmluYWxseSB0ZXJtaW5hdGVzIFlvdXIgZ3JhbnRzLCBhbmQgKGIpIG9uIGFuCitvbmdvaW5nIGJhc2lzLCBpZiBzdWNoIENvbnRyaWJ1dG9yIGZhaWxzIHRvIG5vdGlmeSBZb3Ugb2YgdGhlCitub24tY29tcGxpYW5jZSBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMgcHJpb3IgdG8gNjAgZGF5cyBhZnRlciBZb3UgaGF2ZQorY29tZSBiYWNrIGludG8gY29tcGxpYW5jZS4gTW9yZW92ZXIsIFlvdXIgZ3JhbnRzIGZyb20gYSBwYXJ0aWN1bGFyCitDb250cmlidXRvciBhcmUgcmVpbnN0YXRlZCBvbiBhbiBvbmdvaW5nIGJhc2lzIGlmIHN1Y2ggQ29udHJpYnV0b3IKK25vdGlmaWVzIFlvdSBvZiB0aGUgbm9uLWNvbXBsaWFuY2UgYnkgc29tZSByZWFzb25hYmxlIG1lYW5zLCB0aGlzIGlzIHRoZQorZmlyc3QgdGltZSBZb3UgaGF2ZSByZWNlaXZlZCBub3RpY2Ugb2Ygbm9uLWNvbXBsaWFuY2Ugd2l0aCB0aGlzIExpY2Vuc2UKK2Zyb20gc3VjaCBDb250cmlidXRvciwgYW5kIFlvdSBiZWNvbWUgY29tcGxpYW50IHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKK1lvdXIgcmVjZWlwdCBvZiB0aGUgbm90aWNlLgorCis1LjIuIElmIFlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSBieSBhc3NlcnRpbmcgYSBwYXRlbnQKK2luZnJpbmdlbWVudCBjbGFpbSAoZXhjbHVkaW5nIGRlY2xhcmF0b3J5IGp1ZGdtZW50IGFjdGlvbnMsCitjb3VudGVyLWNsYWltcywgYW5kIGNyb3NzLWNsYWltcykgYWxsZWdpbmcgdGhhdCBhIENvbnRyaWJ1dG9yIFZlcnNpb24KK2RpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gdGhlIHJpZ2h0cyBncmFudGVkIHRvCitZb3UgYnkgYW55IGFuZCBhbGwgQ29udHJpYnV0b3JzIGZvciB0aGUgQ292ZXJlZCBTb2Z0d2FyZSB1bmRlciBTZWN0aW9uCisyLjEgb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZS4KKworNS4zLiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgNS4xIG9yIDUuMiBhYm92ZSwgYWxsCitlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2gKK2hhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIFlvdXIgZGlzdHJpYnV0b3JzIHVuZGVyIHRoaXMgTGljZW5zZQorcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIDYuIERpc2NsYWltZXIgb2YgV2FycmFudHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIENvdmVyZWQgU29mdHdhcmUgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuICJhcyBpcyIgICAgICAgKgorKiAgYmFzaXMsIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQsIGVpdGhlciBleHByZXNzZWQsIGltcGxpZWQsIG9yICAqCisqICBzdGF0dXRvcnksIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB3YXJyYW50aWVzIHRoYXQgdGhlICAgICAgICoKKyogIENvdmVyZWQgU29mdHdhcmUgaXMgZnJlZSBvZiBkZWZlY3RzLCBtZXJjaGFudGFibGUsIGZpdCBmb3IgYSAgICAgICAgKgorKiAgcGFydGljdWxhciBwdXJwb3NlIG9yIG5vbi1pbmZyaW5naW5nLiBUaGUgZW50aXJlIHJpc2sgYXMgdG8gdGhlICAgICAqCisqICBxdWFsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBpcyB3aXRoIFlvdS4gICAgICAgICoKKyogIFNob3VsZCBhbnkgQ292ZXJlZCBTb2Z0d2FyZSBwcm92ZSBkZWZlY3RpdmUgaW4gYW55IHJlc3BlY3QsIFlvdSAgICAgKgorKiAgKG5vdCBhbnkgQ29udHJpYnV0b3IpIGFzc3VtZSB0aGUgY29zdCBvZiBhbnkgbmVjZXNzYXJ5IHNlcnZpY2luZywgICAqCisqICByZXBhaXIsIG9yIGNvcnJlY3Rpb24uIFRoaXMgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBjb25zdGl0dXRlcyBhbiAgICoKKyogIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5zZS4gTm8gdXNlIG9mIGFueSBDb3ZlcmVkIFNvZnR3YXJlIGlzICAgKgorKiAgYXV0aG9yaXplZCB1bmRlciB0aGlzIExpY2Vuc2UgZXhjZXB0IHVuZGVyIHRoaXMgZGlzY2xhaW1lci4gICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgNy4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIHRvcnQgICAgICAqCisqICAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCBzaGFsbCBhbnkgICAgICAgICAgICoKKyogIENvbnRyaWJ1dG9yLCBvciBhbnlvbmUgd2hvIGRpc3RyaWJ1dGVzIENvdmVyZWQgU29mdHdhcmUgYXMgICAgICAgICAgKgorKiAgcGVybWl0dGVkIGFib3ZlLCBiZSBsaWFibGUgdG8gWW91IGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgICAgICAgICAqCisqICBzcGVjaWFsLCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciAgICAgICoKKyogIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3N0IHByb2ZpdHMsIGxvc3Mgb2YgICAgKgorKiAgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSAgICAqCisqICBhbmQgYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMsIGV2ZW4gaWYgc3VjaCBwYXJ0eSAgICAgICoKKyogIHNoYWxsIGhhdmUgYmVlbiBpbmZvcm1lZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLiBUaGlzICAgKgorKiAgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgc2hhbGwgbm90IGFwcGx5IHRvIGxpYWJpbGl0eSBmb3IgZGVhdGggb3IgICAqCisqICBwZXJzb25hbCBpbmp1cnkgcmVzdWx0aW5nIGZyb20gc3VjaCBwYXJ0eSdzIG5lZ2xpZ2VuY2UgdG8gdGhlICAgICAgICoKKyogIGV4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLiBTb21lICAgICAgICAgICAgICAgKgorKiAganVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgdGhlIGV4Y2x1c2lvbiBvciBsaW1pdGF0aW9uIG9mICAgICAgICAgICAqCisqICBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc28gdGhpcyBleGNsdXNpb24gYW5kICAgICAgICAgICoKKyogIGxpbWl0YXRpb24gbWF5IG5vdCBhcHBseSB0byBZb3UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworOC4gTGl0aWdhdGlvbgorLS0tLS0tLS0tLS0tLQorCitBbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgbWF5IGJlIGJyb3VnaHQgb25seSBpbiB0aGUKK2NvdXJ0cyBvZiBhIGp1cmlzZGljdGlvbiB3aGVyZSB0aGUgZGVmZW5kYW50IG1haW50YWlucyBpdHMgcHJpbmNpcGFsCitwbGFjZSBvZiBidXNpbmVzcyBhbmQgc3VjaCBsaXRpZ2F0aW9uIHNoYWxsIGJlIGdvdmVybmVkIGJ5IGxhd3Mgb2YgdGhhdAoranVyaXNkaWN0aW9uLCB3aXRob3V0IHJlZmVyZW5jZSB0byBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuCitOb3RoaW5nIGluIHRoaXMgU2VjdGlvbiBzaGFsbCBwcmV2ZW50IGEgcGFydHkncyBhYmlsaXR5IHRvIGJyaW5nCitjcm9zcy1jbGFpbXMgb3IgY291bnRlci1jbGFpbXMuCisKKzkuIE1pc2NlbGxhbmVvdXMKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHRoZSBzdWJqZWN0CittYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlCit1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQKK25lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMKK3RoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIKK3NoYWxsIG5vdCBiZSB1c2VkIHRvIGNvbnN0cnVlIHRoaXMgTGljZW5zZSBhZ2FpbnN0IGEgQ29udHJpYnV0b3IuCisKKzEwLiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzEwLjEuIE5ldyBWZXJzaW9ucworCitNb3ppbGxhIEZvdW5kYXRpb24gaXMgdGhlIGxpY2Vuc2Ugc3Rld2FyZC4gRXhjZXB0IGFzIHByb3ZpZGVkIGluIFNlY3Rpb24KKzEwLjMsIG5vIG9uZSBvdGhlciB0aGFuIHRoZSBsaWNlbnNlIHN0ZXdhcmQgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgb3IKK3B1Ymxpc2ggbmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYQorZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCisKKzEwLjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMKKworWW91IG1heSBkaXN0cmlidXRlIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgdmVyc2lvbgorb2YgdGhlIExpY2Vuc2UgdW5kZXIgd2hpY2ggWW91IG9yaWdpbmFsbHkgcmVjZWl2ZWQgdGhlIENvdmVyZWQgU29mdHdhcmUsCitvciB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIGxpY2Vuc2UKK3N0ZXdhcmQuCisKKzEwLjMuIE1vZGlmaWVkIFZlcnNpb25zCisKK0lmIHlvdSBjcmVhdGUgc29mdHdhcmUgbm90IGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSwgYW5kIHlvdSB3YW50IHRvCitjcmVhdGUgYSBuZXcgbGljZW5zZSBmb3Igc3VjaCBzb2Z0d2FyZSwgeW91IG1heSBjcmVhdGUgYW5kIHVzZSBhCittb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpZiB5b3UgcmVuYW1lIHRoZSBsaWNlbnNlIGFuZCByZW1vdmUKK2FueSByZWZlcmVuY2VzIHRvIHRoZSBuYW1lIG9mIHRoZSBsaWNlbnNlIHN0ZXdhcmQgKGV4Y2VwdCB0byBub3RlIHRoYXQKK3N1Y2ggbW9kaWZpZWQgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKS4KKworMTAuNC4gRGlzdHJpYnV0aW5nIFNvdXJjZSBDb2RlIEZvcm0gdGhhdCBpcyBJbmNvbXBhdGlibGUgV2l0aCBTZWNvbmRhcnkKK0xpY2Vuc2VzCisKK0lmIFlvdSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSBTb3VyY2UgQ29kZSBGb3JtIHRoYXQgaXMgSW5jb21wYXRpYmxlIFdpdGgKK1NlY29uZGFyeSBMaWNlbnNlcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCB0aGUKK25vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBCIG9mIHRoaXMgTGljZW5zZSBtdXN0IGJlIGF0dGFjaGVkLgorCitFeGhpYml0IEEgLSBTb3VyY2UgQ29kZSBGb3JtIExpY2Vuc2UgTm90aWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworICBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCisgIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uCisKK0lmIGl0IGlzIG5vdCBwb3NzaWJsZSBvciBkZXNpcmFibGUgdG8gcHV0IHRoZSBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyCitmaWxlLCB0aGVuIFlvdSBtYXkgaW5jbHVkZSB0aGUgbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSBMSUNFTlNFCitmaWxlIGluIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHJlY2lwaWVudCB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vaworZm9yIHN1Y2ggYSBub3RpY2UuCisKK1lvdSBtYXkgYWRkIGFkZGl0aW9uYWwgYWNjdXJhdGUgbm90aWNlcyBvZiBjb3B5cmlnaHQgb3duZXJzaGlwLgorCitFeGhpYml0IEIgLSAiSW5jb21wYXRpYmxlIFdpdGggU2Vjb25kYXJ5IExpY2Vuc2VzIiBOb3RpY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyAiSW5jb21wYXRpYmxlIFdpdGggU2Vjb25kYXJ5IExpY2Vuc2VzIiwgYXMKKyAgZGVmaW5lZCBieSB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSwgdi4gMi4wLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUy1QTCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVMtUEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkwZDZiNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVMtUEwKQEAgLTAsMCArMSwxOSBAQAorCitNaWNyb3NvZnQgUHVibGljIExpY2Vuc2UgKE1zLVBMKQorIAorCitUaGlzIGxpY2Vuc2UgZ292ZXJucyB1c2Ugb2YgdGhlIGFjY29tcGFueWluZyBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGUgc29mdHdhcmUsIHlvdSBhY2NlcHQgdGhpcyBsaWNlbnNlLiBJZiB5b3UgZG8gbm90IGFjY2VwdCB0aGUgbGljZW5zZSwgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgCisKK0RlZmluaXRpb25zCitUaGUgdGVybXMgInJlcHJvZHVjZSwiICJyZXByb2R1Y3Rpb24sIiAiZGVyaXZhdGl2ZSB3b3JrcywiIGFuZCAiZGlzdHJpYnV0aW9uIiBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgaGVyZSBhcyB1bmRlciBVLlMuIGNvcHlyaWdodCBsYXcuIEEgImNvbnRyaWJ1dGlvbiIgaXMgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLCBvciBhbnkgYWRkaXRpb25zIG9yIGNoYW5nZXMgdG8gdGhlIHNvZnR3YXJlLiBBICJjb250cmlidXRvciIgaXMgYW55IHBlcnNvbiB0aGF0IGRpc3RyaWJ1dGVzIGl0cyBjb250cmlidXRpb24gdW5kZXIgdGhpcyBsaWNlbnNlLiAiTGljZW5zZWQgcGF0ZW50cyIgYXJlIGEgY29udHJpYnV0b3JgcyBwYXRlbnQgY2xhaW1zIHRoYXQgcmVhZCBkaXJlY3RseSBvbiBpdHMgY29udHJpYnV0aW9uLgorR3JhbnQgb2YgUmlnaHRzCisoQSkgQ29weXJpZ2h0IEdyYW50LSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UsIGluY2x1ZGluZyB0aGUgbGljZW5zZSBjb25kaXRpb25zIGFuZCBsaW1pdGF0aW9ucyBpbiBzZWN0aW9uIDMsIGVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSBpdHMgY29udHJpYnV0aW9uLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YgaXRzIGNvbnRyaWJ1dGlvbiwgYW5kIGRpc3RyaWJ1dGUgaXRzIGNvbnRyaWJ1dGlvbiBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrcyB0aGF0IHlvdSBjcmVhdGUuCisoQikgUGF0ZW50IEdyYW50LSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UsIGluY2x1ZGluZyB0aGUgbGljZW5zZSBjb25kaXRpb25zIGFuZCBsaW1pdGF0aW9ucyBpbiBzZWN0aW9uIDMsIGVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UgdW5kZXIgaXRzIGxpY2Vuc2VkIHBhdGVudHMgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBpdHMgY29udHJpYnV0aW9uIGluIHRoZSBzb2Z0d2FyZSBvciBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBjb250cmlidXRpb24gaW4gdGhlIHNvZnR3YXJlLgorQ29uZGl0aW9ucyBhbmQgTGltaXRhdGlvbnMKKyhBKSBObyBUcmFkZW1hcmsgTGljZW5zZS0gVGhpcyBsaWNlbnNlIGRvZXMgbm90IGdyYW50IHlvdSByaWdodHMgdG8gdXNlIGFueSBjb250cmlidXRvcnNgIG5hbWUsIGxvZ28sIG9yIHRyYWRlbWFya3MuIAorKEIpIElmIHlvdSBicmluZyBhIHBhdGVudCBjbGFpbSBhZ2FpbnN0IGFueSBjb250cmlidXRvciBvdmVyIHBhdGVudHMgdGhhdCB5b3UgY2xhaW0gYXJlIGluZnJpbmdlZCBieSB0aGUgc29mdHdhcmUsIHlvdXIgcGF0ZW50IGxpY2Vuc2UgZnJvbSBzdWNoIGNvbnRyaWJ1dG9yIHRvIHRoZSBzb2Z0d2FyZSBlbmRzIGF1dG9tYXRpY2FsbHkuIAorKEMpIElmIHlvdSBkaXN0cmlidXRlIGFueSBwb3J0aW9uIG9mIHRoZSBzb2Z0d2FyZSwgeW91IG11c3QgcmV0YWluIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQgYXR0cmlidXRpb24gbm90aWNlcyB0aGF0IGFyZSBwcmVzZW50IGluIHRoZSBzb2Z0d2FyZS4gCisoRCkgSWYgeW91IGRpc3RyaWJ1dGUgYW55IHBvcnRpb24gb2YgdGhlIHNvZnR3YXJlIGluIHNvdXJjZSBjb2RlIGZvcm0sIHlvdSBtYXkgZG8gc28gb25seSB1bmRlciB0aGlzIGxpY2Vuc2UgYnkgaW5jbHVkaW5nIGEgY29tcGxldGUgY29weSBvZiB0aGlzIGxpY2Vuc2Ugd2l0aCB5b3VyIGRpc3RyaWJ1dGlvbi4gSWYgeW91IGRpc3RyaWJ1dGUgYW55IHBvcnRpb24gb2YgdGhlIHNvZnR3YXJlIGluIGNvbXBpbGVkIG9yIG9iamVjdCBjb2RlIGZvcm0sIHlvdSBtYXkgb25seSBkbyBzbyB1bmRlciBhIGxpY2Vuc2UgdGhhdCBjb21wbGllcyB3aXRoIHRoaXMgbGljZW5zZS4gCisoRSkgVGhlIHNvZnR3YXJlIGlzIGxpY2Vuc2VkICJhcy1pcy4iIFlvdSBiZWFyIHRoZSByaXNrIG9mIHVzaW5nIGl0LiBUaGUgY29udHJpYnV0b3JzIGdpdmUgbm8gZXhwcmVzcyB3YXJyYW50aWVzLCBndWFyYW50ZWVzLCBvciBjb25kaXRpb25zLiBZb3UgbWF5IGhhdmUgYWRkaXRpb25hbCBjb25zdW1lciByaWdodHMgdW5kZXIgeW91ciBsb2NhbCBsYXdzIHdoaWNoIHRoaXMgbGljZW5zZSBjYW5ub3QgY2hhbmdlLiBUbyB0aGUgZXh0ZW50IHBlcm1pdHRlZCB1bmRlciB5b3VyIGxvY2FsIGxhd3MsIHRoZSBjb250cmlidXRvcnMgZXhjbHVkZSB0aGUgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSwgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UgYW5kIG5vbi1pbmZyaW5nZW1lbnQuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVMtUkwgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01TLVJMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MDNjMGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01TLVJMCkBAIC0wLDAgKzEsMjMgQEAKKworTWljcm9zb2Z0IFJlY2lwcm9jYWwgTGljZW5zZSAoTXMtUkwpCisgCisKK1RoaXMgbGljZW5zZSBnb3Zlcm5zIHVzZSBvZiB0aGUgYWNjb21wYW55aW5nIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoZSBzb2Z0d2FyZSwgeW91IGFjY2VwdCB0aGlzIGxpY2Vuc2UuIElmIHlvdSBkbyBub3QgYWNjZXB0IHRoZSBsaWNlbnNlLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAKKworRGVmaW5pdGlvbnMKK1RoZSB0ZXJtcyAicmVwcm9kdWNlLCIgInJlcHJvZHVjdGlvbiwiICJkZXJpdmF0aXZlIHdvcmtzLCIgYW5kICJkaXN0cmlidXRpb24iIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBoZXJlIGFzIHVuZGVyIFUuUy4gY29weXJpZ2h0IGxhdy4KK0EgImNvbnRyaWJ1dGlvbiIgaXMgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLCBvciBhbnkgYWRkaXRpb25zIG9yIGNoYW5nZXMgdG8gdGhlIHNvZnR3YXJlLiAKK0EgImNvbnRyaWJ1dG9yIiBpcyBhbnkgcGVyc29uIHRoYXQgZGlzdHJpYnV0ZXMgaXRzIGNvbnRyaWJ1dGlvbiB1bmRlciB0aGlzIGxpY2Vuc2UuIAorIkxpY2Vuc2VkIHBhdGVudHMiIGFyZSBhIGNvbnRyaWJ1dG9yYHMgcGF0ZW50IGNsYWltcyB0aGF0IHJlYWQgZGlyZWN0bHkgb24gaXRzIGNvbnRyaWJ1dGlvbi4KK0dyYW50IG9mIFJpZ2h0cworKEEpIENvcHlyaWdodCBHcmFudC0gU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGxpY2Vuc2UgY29uZGl0aW9ucyBhbmQgbGltaXRhdGlvbnMgaW4gc2VjdGlvbiAzLCBlYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UgaXRzIGNvbnRyaWJ1dGlvbiwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIGl0cyBjb250cmlidXRpb24sIGFuZCBkaXN0cmlidXRlIGl0cyBjb250cmlidXRpb24gb3IgYW55IGRlcml2YXRpdmUgd29ya3MgdGhhdCB5b3UgY3JlYXRlLgorKEIpIFBhdGVudCBHcmFudC0gU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGxpY2Vuc2UgY29uZGl0aW9ucyBhbmQgbGltaXRhdGlvbnMgaW4gc2VjdGlvbiAzLCBlYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlIHVuZGVyIGl0cyBsaWNlbnNlZCBwYXRlbnRzIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgaXRzIGNvbnRyaWJ1dGlvbiBpbiB0aGUgc29mdHdhcmUgb3IgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgY29udHJpYnV0aW9uIGluIHRoZSBzb2Z0d2FyZS4KK0NvbmRpdGlvbnMgYW5kIExpbWl0YXRpb25zCisoQSkgUmVjaXByb2NhbCBHcmFudHMtIEZvciBhbnkgZmlsZSB5b3UgZGlzdHJpYnV0ZSB0aGF0IGNvbnRhaW5zIGNvZGUgZnJvbSB0aGUgc29mdHdhcmUgKGluIHNvdXJjZSBjb2RlIG9yIGJpbmFyeSBmb3JtYXQpLCB5b3UgbXVzdCBwcm92aWRlIHJlY2lwaWVudHMgdGhlIHNvdXJjZSBjb2RlIHRvIHRoYXQgZmlsZSBhbG9uZyB3aXRoIGEgY29weSBvZiB0aGlzIGxpY2Vuc2UsIHdoaWNoIGxpY2Vuc2Ugd2lsbCBnb3Zlcm4gdGhhdCBmaWxlLiBZb3UgbWF5IGxpY2Vuc2Ugb3RoZXIgZmlsZXMgdGhhdCBhcmUgZW50aXJlbHkgeW91ciBvd24gd29yayBhbmQgZG8gbm90IGNvbnRhaW4gY29kZSBmcm9tIHRoZSBzb2Z0d2FyZSB1bmRlciBhbnkgdGVybXMgeW91IGNob29zZS4gCisoQikgTm8gVHJhZGVtYXJrIExpY2Vuc2UtIFRoaXMgbGljZW5zZSBkb2VzIG5vdCBncmFudCB5b3UgcmlnaHRzIHRvIHVzZSBhbnkgY29udHJpYnV0b3JzYCBuYW1lLCBsb2dvLCBvciB0cmFkZW1hcmtzLiAKKyhDKSBJZiB5b3UgYnJpbmcgYSBwYXRlbnQgY2xhaW0gYWdhaW5zdCBhbnkgY29udHJpYnV0b3Igb3ZlciBwYXRlbnRzIHRoYXQgeW91IGNsYWltIGFyZSBpbmZyaW5nZWQgYnkgdGhlIHNvZnR3YXJlLCB5b3VyIHBhdGVudCBsaWNlbnNlIGZyb20gc3VjaCBjb250cmlidXRvciB0byB0aGUgc29mdHdhcmUgZW5kcyBhdXRvbWF0aWNhbGx5LiAKKyhEKSBJZiB5b3UgZGlzdHJpYnV0ZSBhbnkgcG9ydGlvbiBvZiB0aGUgc29mdHdhcmUsIHlvdSBtdXN0IHJldGFpbiBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kIGF0dHJpYnV0aW9uIG5vdGljZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgc29mdHdhcmUuIAorKEUpIElmIHlvdSBkaXN0cmlidXRlIGFueSBwb3J0aW9uIG9mIHRoZSBzb2Z0d2FyZSBpbiBzb3VyY2UgY29kZSBmb3JtLCB5b3UgbWF5IGRvIHNvIG9ubHkgdW5kZXIgdGhpcyBsaWNlbnNlIGJ5IGluY2x1ZGluZyBhIGNvbXBsZXRlIGNvcHkgb2YgdGhpcyBsaWNlbnNlIHdpdGggeW91ciBkaXN0cmlidXRpb24uIElmIHlvdSBkaXN0cmlidXRlIGFueSBwb3J0aW9uIG9mIHRoZSBzb2Z0d2FyZSBpbiBjb21waWxlZCBvciBvYmplY3QgY29kZSBmb3JtLCB5b3UgbWF5IG9ubHkgZG8gc28gdW5kZXIgYSBsaWNlbnNlIHRoYXQgY29tcGxpZXMgd2l0aCB0aGlzIGxpY2Vuc2UuIAorKEYpIFRoZSBzb2Z0d2FyZSBpcyBsaWNlbnNlZCAiYXMtaXMuIiBZb3UgYmVhciB0aGUgcmlzayBvZiB1c2luZyBpdC4gVGhlIGNvbnRyaWJ1dG9ycyBnaXZlIG5vIGV4cHJlc3Mgd2FycmFudGllcywgZ3VhcmFudGVlcywgb3IgY29uZGl0aW9ucy4gWW91IG1heSBoYXZlIGFkZGl0aW9uYWwgY29uc3VtZXIgcmlnaHRzIHVuZGVyIHlvdXIgbG9jYWwgbGF3cyB3aGljaCB0aGlzIGxpY2Vuc2UgY2Fubm90IGNoYW5nZS4gVG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgdW5kZXIgeW91ciBsb2NhbCBsYXdzLCB0aGUgY29udHJpYnV0b3JzIGV4Y2x1ZGUgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHksIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlIGFuZCBub24taW5mcmluZ2VtZW50LgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01pck9TIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NaXJPUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDY3NjhlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NaXJPUwpAQCAtMCwwICsxLDU4IEBACisKK01pck9TIExpY2Vuc2UKKworLyotCisqIENvcHlyaWdodCAmIzE2OTsgeWVhciwgeWVhciwgeWVhciwgJiM4MjMwOworKiBGaXJzdCBNLiBMYXN0IDx1c2VyQGhvc3QuZG9tYWluPgorKgorKiBQcm92aWRlZCB0aGF0IHRoZXNlIHRlcm1zIGFuZCBkaXNjbGFpbWVyIGFuZCBhbGwgY29weXJpZ2h0IG5vdGljZXMKKyogYXJlIHJldGFpbmVkIG9yIHJlcHJvZHVjZWQgaW4gYW4gYWNjb21wYW55aW5nIGRvY3VtZW50LCBwZXJtaXNzaW9uCisqIGlzIGdyYW50ZWQgdG8gZGVhbCBpbiB0aGlzIHdvcmsgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHVuJiM4MjA4OworKiBsaW1pdGVkIHJpZ2h0cyB0byB1c2UsIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUsIHNlbGwsIG1vZGlmeSwKKyogbWVyZ2UsIGdpdmUgYXdheSwgb3Igc3VibGljZW5jZS4KKyoKKyogVGhpcyB3b3JrIGlzIHByb3ZpZGVkICJBUyBJUyIgYW5kIFdJVEhPVVQgV0FSUkFOVFkgb2YgYW55IGtpbmQsIHRvCisqIHRoZSB1dG1vc3QgZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgbmVpdGhlciBleHByZXNzIG5vcgorKiBpbXBsaWVkOyB3aXRob3V0IG1hbGljaW91cyBpbnRlbnQgb3IgZ3Jvc3MgbmVnbGlnZW5jZS4gSW4gbm8gZXZlbnQKKyogbWF5IGEgbGljZW5zb3IsIGF1dGhvciBvciBjb250cmlidXRvciBiZSBoZWxkIGxpYWJsZSBmb3IgaW5kaXJlY3QsCisqIGRpcmVjdCwgb3RoZXIgZGFtYWdlLCBsb3NzLCBvciBvdGhlciBpc3N1ZXMgYXJpc2luZyBpbiBhbnkgd2F5IG91dAorKiBvZiBkZWFsaW5nIGluIHRoZSB3b3JrLCBldmVuIGlmIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2gKKyogZGFtYWdlIG9yIGV4aXN0ZW5jZSBvZiBhIGRlZmVjdCwgZXhjZXB0IHByb3ZlbiB0aGF0IGl0IHJlc3VsdHMgb3V0CisqIG9mIHNhaWQgcGVyc29uYHMgaW1tZWRpYXRlIGZhdWx0IHdoZW4gdXNpbmcgdGhlIHdvcmsgYXMgaW50ZW5kZWQuCisqLworCitJX05fU19UX1JfVV9DX1RfSV9PX05fU186XworVG8gYXBwbHkgdGhlIHRlbXBsYXRlKCYjMTg1Oykgc3BlY2lmeSB0aGUgeWVhcnMgb2YgY29weXJpZ2h0IChzZXBhcmF0ZWQgYnkKK2NvbW1hLCBub3QgYXMgYSByYW5nZSksIHRoZSBsZWdhbCBuYW1lcyBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMsIGFuZAordGhlIHJlYWwgbmFtZXMgb2YgdGhlIGF1dGhvcnMgaWYgZGlmZmVyZW50LiBBdm9pZCBhZGRpbmcgdGV4dC4KKworUl9BX1RfSV9PX05fQV9MX0VfOl8KK1RoaXMgbGljZW5jZSBpcyBhcHQgZm9yIGFueSBraW5kIG9mIHdvcmsgKHN1Y2ggYXMgc291cmNlIGNvZGUsIGZvbnRzLAorZG9jdW1lbnRhdGlvbiwgZ3JhcGhpY3MsIHNvdW5kIGV0Yy4pIGFuZCB0aGUgcHJlZmVycmVkIHRlcm1zIGZvciB3b3JrCithZGRlZCB0byBNaXJCU0QuIEl0IGhhcyBiZWVuIGRyYWZ0ZWQgYXMgdW5pdmVyc2FsbHkgdXNhYmxlIGVxdWl2YWxlbnQKK29mIHRoZSAiaGlzdG9yaWMgcGVybWlzc2lvbiBub3RpY2UiJiM4MzE3OyYjMTc4OyYjODMxODsgYWRhcHRlZCB0byBFdXJvcGVuIGxhdyBiZWNhdXNlCitpbiBzb21lIChkcm9pdCBkYGF1dGV1cikgY291bnRyaWVzIGF1dGhvcnMgY2Fubm90IGRpc2NsYWltIGFsbCBsaWFiaSYjODIwODsKK2xpdGllcy4gQ29tcGxpYW5jZSB0byBERlNHJiM4MzE3OyYjMTc5OyYjODMxODsgMS4xIGlzIGVuc3VyZWQsIGFuZCBHUEx2MiBjb21wYXRpYmlsaXR5CitpcyBhc3NlcnRlZCB1bmxlc3MgYWR2ZXJ0aXNpbmcgY2xhdXNlcyBhcmUgdXNlZC4gVGhlIE1pck9TIExpY2VuY2UgaXMKK2NlcnRpZmllZCB0byBjb25mb3JtIHRvIE9LRCYjODMxNzsmIzgzMDg7JiM4MzE4OyAxLjAgYW5kIE9TRCYjODMxNzsmIzgzMDk7JiM4MzE4OyAxLjksIGFuZCBxdWFsaWZpZXMgYXMgYQorRnJlZSBTb2Z0d2FyZSYjODMxNzsmIzgzMTA7JiM4MzE4OyBhbmQgYWxzbyBGcmVlIERvY3VtZW50YXRpb24mIzgzMTc7JiM4MzExOyYjODMxODsgbGljZW5jZSBhbmQgaXMgaW5jbHUmIzgyMDg7CitkZWQgaW4gc29tZSByZWxldmFudCBsaXN0cyYjODMxNzsmIzgzMTI7JiM4MzE4OyYjODMxNzsmIzgzMTM7JiM4MzE4OyYjODMxNzsmIzE4NTsmIzgzMDQ7JiM4MzE4Oy4KKworV2UgYmVsaWV2ZSB5b3UgYXJlIG5vdCBsaWFibGUgZm9yIHdvcmsgaW5zZXJ0ZWQgd2hpY2ggaXMgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSBvZiB0aGlyZCBwYXJ0aWVzLCBpZiB5b3Ugd2VyZSBub3QgYXdhcmUgb2YgdGhlIGZhY3QsIGFjdCBhcCYjODIwODsKK3Byb3ByaWF0ZWx5IGFzIHNvb24gYXMgeW91IGJlY29tZSBhd2FyZSBvZiB0aGF0IHByb2JsZW0sIHNlZWsgYW4gYW1pJiM4MjA4OworY2FibGUgc29sdXRpb24gZm9yIGFsbCBwYXJ0aWVzLCBhbmQgbmV2ZXIga25vd2luZ2x5IGRpc3RyaWJ1dGUgYSB3b3JrCit3aXRob3V0IGJlaW5nIGF1dGhvcmlzZWQgdG8gZG8gc28gYnkgaXRzIGxpY2Vuc29ycy4KKworUl9FX0ZfRV9SX0VfTl9DX0VfU186XworJiM5MzEyOyBhbHNvIGF0IGh0dHA6Ly9taXJic2QuZGUvTWlyT1MtTGljZW5jZQorJiM5MzEzOyBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2hpc3RvcmljYWwucGhwCismIzkzMTQ7IGh0dHA6Ly93d3cuZGViaWFuLm9yZy9zb2NpYWxfY29udHJhY3QjZ3VpZGVsaW5lcworJiM5MzE1OyBodHRwOi8vd3d3Lm9wZW5kZWZpbml0aW9uLm9yZy8xLjAKKyYjOTMxNjsgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9kb2NzL29zZAorJiM5MzE3OyBodHRwOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS9mcmVlLXN3Lmh0bWwKKyYjOTMxODsgaHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvZnJlZS1kb2MuaHRtbAorJiM5MzE5OyBodHRwOi8vd3d3Lmlmcm9zcy5kZS9pZnJvc3NfaHRtbC9saXplbnpjZW50ZXIuaHRtbAorJiM5MzIwOyBodHRwOi8vd3d3Lm9wZW5kZWZpbml0aW9uLm9yZy9saWNlbnNlcworJiM5MzIxOyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWlyb3MuaHRtbAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01vdG9zb3RvIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9Nb3Rvc290bwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTUyNGY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9Nb3Rvc290bwpAQCAtMCwwICsxLDQyMiBAQAorCitNT1RPU09UTyBPUEVOIFNPVVJDRSBMSUNFTlNFIC0gVmVyc2lvbiAwLjkuMQorVGhpcyBNb3Rvc290byBPcGVuIFNvdXJjZSBMaWNlbnNlICh0aGUgIkxpY2Vuc2UiKSBhcHBsaWVzIHRvICJDb21tdW5pdHkKK1BvcnRhbCBTZXJ2ZXIiIGFuZCByZWxhdGVkIHNvZnR3YXJlIHByb2R1Y3RzIGFzIHdlbGwgYXMgYW55IHVwZGF0ZXNvcgorbWFpbnRlbmFuY2UgcmVsZWFzZXMgb2YgdGhhdCBzb2Z0d2FyZSAoIk1vdG9zb3RvIFByb2R1Y3RzIikgdGhhdCBhcmUKK2Rpc3RyaWJ1dGVkIGJ5IE1vdG9zb3RvLkNvbSBCLlYuICgiTGljZW5zb3IiKS4gQW55IE1vdG9zb3RvCitQcm9kdWN0IGxpY2Vuc2VkIHB1cnN1YW50IHRvIHRoaXMgTGljZW5zZSBpcyBhICJMaWNlbnNlZCBQcm9kdWN0LiIgTGljZW5zZWQKK1Byb2R1Y3QsIGluIGl0cyBlbnRpcmV0eSwgaXMgcHJvdGVjdGVkIGJ5IER1dGNoIGNvcHlyaWdodCBsYXcuCitUaGlzCitMaWNlbnNlIGlkZW50aWZpZXMgdGhlIHRlcm1zIHVuZGVyIHdoaWNoIHlvdSBtYXkgdXNlLCBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeQorTGljZW5zZWQgUHJvZHVjdCBhbmQgaGFzIGJlZW4gc3VibWl0dGVkIHRvIHRoZSBPcGVuIFNvZnR3YXJlIEluaXRpYXRpdmUgKE9TSSkKK2ZvciBhcHByb3ZhbC4KKworUHJlYW1ibGUKKworVGhpcyBQcmVhbWJsZSBpcyBpbnRlbmRlZCB0byBkZXNjcmliZSwgaW4gcGxhaW4gRW5nbGlzaCwgdGhlIG5hdHVyZSBhbmQgc2NvcGUgb2YKK3RoaXMgTGljZW5zZS4gSG93ZXZlciwgdGhpcyBQcmVhbWJsZSBpcyBub3QgYSBwYXJ0IG9mIHRoaXMgbGljZW5zZS4gVGhlIGxlZ2FsCitlZmZlY3Qgb2YgdGhpcyBMaWNlbnNlIGlzIGRlcGVuZGVudCBvbmx5IHVwb24gdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlIGFuZCBub3QKK3RoaXMgUHJlYW1ibGUuCitUaGlzIExpY2Vuc2UgY29tcGxpZXMgd2l0aCB0aGUgT3BlbiBTb3VyY2UgRGVmaW5pdGlvbiBhbmQgaGFzIGJlZW4gYXBwcm92ZWQgYnkKK09wZW4gU291cmNlIEluaXRpYXRpdmUuIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYmUgbWFya2VkCithcyAiT1NJIENlcnRpZmllZCBPcGVuIFNvdXJjZSBTb2Z0d2FyZS4iCisKK1RoaXMgTGljZW5zZSBwcm92aWRlcyB0aGF0OgorCisxLiBZb3UgbWF5IHVzZSwgc2VsbCBvciBnaXZlIGF3YXkgdGhlIExpY2Vuc2VkIFByb2R1Y3QsIGFsb25lIG9yIGFzIGEKK2NvbXBvbmVudCBvZiBhbiBhZ2dyZWdhdGUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIGNvbnRhaW5pbmcKK3Byb2dyYW1zIGZyb20gc2V2ZXJhbCBkaWZmZXJlbnQgc291cmNlcy4gTm8gcm95YWx0eSBvciBvdGhlciBmZWUgaXMKK3JlcXVpcmVkLgorCisyLiBCb3RoIFNvdXJjZSBDb2RlIGFuZCBleGVjdXRhYmxlIHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0LAoraW5jbHVkaW5nIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBwcmV2aW91cyBDb250cmlidXRvcnMsIGFyZQorYXZhaWxhYmxlIGZvciB5b3VyIHVzZS4gKFRoZSB0ZXJtcyAiTGljZW5zZWQgUHJvZHVjdCwiICJNb2RpZmljYXRpb25zLCIKKyJDb250cmlidXRvcnMiIGFuZCAiU291cmNlIENvZGUiIGFyZSBkZWZpbmVkIGluIHRoZSBMaWNlbnNlLikKKworMy4gWW91IGFyZSBhbGxvd2VkIHRvIG1ha2UgTW9kaWZpY2F0aW9ucyB0byB0aGUgTGljZW5zZWQgUHJvZHVjdCwgYW5kIHlvdQorY2FuIGNyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIGZyb20gaXQuIChUaGUgdGVybSAiRGVyaXZhdGl2ZQorV29ya3MiIGlzIGRlZmluZWQgaW4gdGhlIExpY2Vuc2UuKQorCis0LiBCeSBhY2NlcHRpbmcgdGhlIExpY2Vuc2VkIFByb2R1Y3QgdW5kZXIgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBMaWNlbnNlLAoreW91IGFncmVlIHRoYXQgYW55IE1vZGlmaWNhdGlvbnMgeW91IG1ha2UgdG8gdGhlIExpY2Vuc2VkCitQcm9kdWN0IGFuZCB0aGVuIGRpc3RyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSBwcm92aXNpb25zIG9mIHRoaXMKK0xpY2Vuc2UuIEluIHBhcnRpY3VsYXIsIHlvdSBtdXN0IG1ha2UgdGhlIFNvdXJjZSBDb2RlIG9mIHlvdXIKK01vZGlmaWNhdGlvbnMgYXZhaWxhYmxlIHRvIG90aGVycy4KKworNS4gWW91IG1heSB1c2UgdGhlIExpY2Vuc2VkIFByb2R1Y3QgZm9yIGFueSBwdXJwb3NlLCBidXQgdGhlIExpY2Vuc29yIGlzCitub3QgcHJvdmlkaW5nIHlvdSBhbnkgd2FycmFudHkgd2hhdHNvZXZlciwgbm9yIGlzIHRoZSBMaWNlbnNvcgorYWNjZXB0aW5nIGFueSBsaWFiaWxpdHkgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIExpY2Vuc2VkIFByb2R1Y3QgZG9lc25gdAord29yayBwcm9wZXJseSBvciBjYXVzZXMgeW91IGFueSBpbmp1cnkgb3IgZGFtYWdlcy4KKworNi4gSWYgeW91IHN1YmxpY2Vuc2UgdGhlIExpY2Vuc2VkIFByb2R1Y3Qgb3IgRGVyaXZhdGl2ZSBXb3JrcywgeW91IG1heQorY2hhcmdlIGZlZXMgZm9yIHdhcnJhbnR5IG9yIHN1cHBvcnQsIG9yIGZvciBhY2NlcHRpbmcgaW5kZW1uaXR5CitvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8geW91ciBjdXN0b21lcnMuIFlvdSBjYW5ub3QgY2hhcmdlIGZvciB0aGUKK1NvdXJjZSBDb2RlLgorCis3LiBJZiB5b3UgYXNzZXJ0IGFueSBwYXRlbnQgY2xhaW1zIGFnYWluc3QgdGhlIExpY2Vuc29yIHJlbGF0aW5nIHRvIHRoZQorTGljZW5zZWQgUHJvZHVjdCwgb3IgaWYgeW91IGJyZWFjaCBhbnkgdGVybXMgb2YgdGhlIExpY2Vuc2UsIHlvdXIKK3JpZ2h0cyB0byB0aGUgTGljZW5zZWQgUHJvZHVjdCB1bmRlciB0aGlzIExpY2Vuc2UgYXV0b21hdGljYWxseQordGVybWluYXRlLgorCitZb3UgbWF5IHVzZSB0aGlzIExpY2Vuc2UgdG8gZGlzdHJpYnV0ZSB5b3VyIG93biBEZXJpdmF0aXZlIFdvcmtzLCBpbiB3aGljaAorY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBhcHBseSB0byB5b3VyIERlcml2YXRpdmUKK1dvcmtzIGp1c3QgYXMgdGhleSBkbyB0byB0aGUgb3JpZ2luYWwgTGljZW5zZWQgUHJvZHVjdC4KKworQWx0ZXJuYXRpdmVseSwgeW91IG1heSBkaXN0cmlidXRlIHlvdXIgRGVyaXZhdGl2ZSBXb3JrcyB1bmRlciBhbnkgb3RoZXIKK09TSS1hcHByb3ZlZCBPcGVuIFNvdXJjZSBsaWNlbnNlLCBvciB1bmRlciBhIHByb3ByaWV0YXJ5IGxpY2Vuc2Ugb2YKK3lvdXIgY2hvaWNlLiBJZiB5b3UgdXNlIGFueSBsaWNlbnNlIG90aGVyIHRoYW4gdGhpcyBMaWNlbnNlLCBob3dldmVyLCB5b3UgbXVzdAorY29udGludWUgdG8gZnVsZmlsbCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSAoaW5jbHVkaW5nIHRoZQorcHJvdmlzaW9ucyByZWxhdGluZyB0byBwdWJsaXNoaW5nIHRoZSBTb3VyY2UgQ29kZSkgZm9yIHRob3NlIHBvcnRpb25zIG9mIHlvdXIKK0Rlcml2YXRpdmUgV29ya3MgdGhhdCBjb25zaXN0IG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBpbmNsdWRpbmcKK3RoZSBmaWxlcyBjb250YWluaW5nIE1vZGlmaWNhdGlvbnMuCisKK05ldyB2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgbWF5IGJlIHB1Ymxpc2hlZCBmcm9tIHRpbWUgdG8gdGltZS4gWW91IG1heQorY2hvb3NlIHRvIGNvbnRpbnVlIHRvIHVzZSB0aGUgbGljZW5zZSB0ZXJtcyBpbiB0aGlzIHZlcnNpb24gb2YgdGhlCitMaWNlbnNlIG9yIHRob3NlIGZyb20gdGhlIG5ldyB2ZXJzaW9uLiBIb3dldmVyLCBvbmx5IHRoZSBMaWNlbnNvciBoYXMgdGhlIHJpZ2h0Cit0byBjaGFuZ2UgdGhlIExpY2Vuc2UgdGVybXMgYXMgdGhleSBhcHBseSB0byB0aGUgTGljZW5zZWQKK1Byb2R1Y3QuCitUaGlzIExpY2Vuc2UgcmVsaWVzIG9uIHByZWNpc2UgZGVmaW5pdGlvbnMgZm9yIGNlcnRhaW4gdGVybXMuIFRob3NlIHRlcm1zIGFyZQorZGVmaW5lZCB3aGVuIHRoZXkgYXJlIGZpcnN0IHVzZWQsIGFuZCB0aGUgZGVmaW5pdGlvbnMgYXJlIHJlcGVhdGVkIGZvcgoreW91ciBjb252ZW5pZW5jZSBpbiBhIEdsb3NzYXJ5IGF0IHRoZSBlbmQgb2YgdGhlIExpY2Vuc2UuCisKK0xpY2Vuc2UgVGVybXMKKworMS4gR3JhbnQgb2YgTGljZW5zZSBGcm9tIExpY2Vuc29yLgorCitMaWNlbnNvcgoraGVyZWJ5IGdyYW50cyB5b3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0bwordGhpcmQKK3BhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKK2EuIFVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kCitkaXN0cmlidXRlIExpY2Vuc2VkIFByb2R1Y3Qgb3IgcG9ydGlvbnMgdGhlcmVvZiAoaW5jbHVkaW5nCitNb2RpZmljYXRpb25zIGFzIGhlcmVpbmFmdGVyIGRlZmluZWQpLCBpbiBib3RoIFNvdXJjZSBDb2RlIG9yIGFzCithbiBleGVjdXRhYmxlIHByb2dyYW0uICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZAorZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhlIExpY2Vuc2VkIFByb2R1Y3QsIGluY2x1ZGluZworYWxsIG1vZHVsZXMgY29udGFpbmVkIHRoZXJlaW4sIHBsdXMgYW55IGFzc29jaWF0ZWQKK2ludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbgorYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBleGVjdXRhYmxlIHByb2dyYW0sIG9yIGEgbGlzdCBvZgorZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBMaWNlbnNlZAorUHJvZHVjdC4KKworYi4gQ3JlYXRlIERlcml2YXRpdmUgV29ya3MgKGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIHVuZGVyIER1dGNoCitjb3B5cmlnaHQgbGF3KSBvZiBMaWNlbnNlZCBQcm9kdWN0IGJ5IGFkZGluZyB0byBvciBkZWxldGluZworZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBzYWlkIExpY2Vuc2VkIFByb2R1Y3QuCisKK2MuIFVuZGVyIGNsYWltcyBvZiBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZAorYnkgTGljZW5zb3IsIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwKK2FuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBMaWNlbnNlZCBQcm9kdWN0IG9yIHBvcnRpb25zIHRoZXJlb2YsCitidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBjbGFpbSBpcyBuZWNlc3NhcnkgdG8KK2VuYWJsZSB5b3UgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3IKK290aGVyd2lzZSBkaXNwb3NlIG9mIExpY2Vuc2VkIFByb2R1Y3Qgb3IgcG9ydGlvbnMgdGhlcmVvZiBvcgorRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisyLiBHcmFudCBvZiBMaWNlbnNlIHRvIE1vZGlmaWNhdGlvbnMgRnJvbQorQ29udHJpYnV0b3IuCisKKyJNb2RpZmljYXRpb25zIiBtZWFucyBhbnkgYWRkaXRpb25zIHRvIG9yCitkZWxldGlvbnMgZnJvbSB0aGUgc3Vic3RhbmNlIG9yCitzdHJ1Y3R1cmUgb2YgKGkpIGEgZmlsZSBjb250YWluaW5nIExpY2Vuc2VkIFByb2R1Y3QsIG9yIChpaSkgYW55IG5ldyBmaWxlCit0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIExpY2Vuc2VkIFByb2R1Y3QuIEhlcmVpbmFmdGVyIGluIHRoaXMKK0xpY2Vuc2UsIHRoZSB0ZXJtICJMaWNlbnNlZCBQcm9kdWN0IiBzaGFsbCBpbmNsdWRlIGFsbCBwcmV2aW91cworTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSByZWNlaXZlIGZyb20gYW55IENvbnRyaWJ1dG9yLiBCeQorYXBwbGljYXRpb24gb2YgdGhlIHByb3Zpc2lvbnMgaW4gU2VjdGlvbiA0KGEpIGJlbG93LCBlYWNoIHBlcnNvbiBvcgorZW50aXR5IHdobyBjcmVhdGVkIG9yIGNvbnRyaWJ1dGVkIHRvIHRoZSBjcmVhdGlvbiBvZiwgYW5kIGRpc3RyaWJ1dGVkLAorYSBNb2RpZmljYXRpb24gKGEgIkNvbnRyaWJ1dG9yIikgaGVyZWJ5IGdyYW50cyB5b3UgYSB3b3JsZC13aWRlLAorcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKK2EuIFVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kCitkaXN0cmlidXRlIGFueSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciBvcgorcG9ydGlvbnMgdGhlcmVvZiwgaW4gYm90aCBTb3VyY2UgQ29kZSBvciBhcyBhbiBleGVjdXRhYmxlIHByb2dyYW0sCitlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcyBvciBhcyBwYXJ0IG9mIERlcml2YXRpdmUKK1dvcmtzLgorCitiLiBVbmRlciBjbGFpbXMgb2YgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkKK0NvbnRyaWJ1dG9yLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsCithbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgTW9kaWZpY2F0aW9ucyBvciBwb3J0aW9ucyB0aGVyZW9mLCBidXQKK3NvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggY2xhaW0gaXMgbmVjZXNzYXJ5IHRvCitlbmFibGUgeW91IHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yCitvdGhlcndpc2UgZGlzcG9zZSBvZiBNb2RpZmljYXRpb25zIG9yIHBvcnRpb25zIHRoZXJlb2Ygb3IKK0Rlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KKworMy4gRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuCisKK05vdGhpbmcgaW4KK3RoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLAorcGF0ZW50cywKK3RyYWRlIHNlY3JldHMgb3IgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBMaWNlbnNvciBvciBhbnkKK0NvbnRyaWJ1dG9yIGV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbi4gTm8gcGF0ZW50IGxpY2Vuc2UgaXMKK2dyYW50ZWQgc2VwYXJhdGUgZnJvbSB0aGUgTGljZW5zZWQgUHJvZHVjdCwgZm9yIGNvZGUgdGhhdCB5b3UgZGVsZXRlIGZyb20KK3RoZSBMaWNlbnNlZCBQcm9kdWN0LCBvciBmb3IgY29tYmluYXRpb25zIG9mIHRoZSBMaWNlbnNlZAorUHJvZHVjdCB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlLiBObyByaWdodCBpcyBncmFudGVkIHRvIHRoZQordHJhZGVtYXJrcyBvZiBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZQoraW5jbHVkZWQgaW4gdGhlIExpY2Vuc2VkIFByb2R1Y3QuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlCitpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tIGxpY2Vuc2luZyB1bmRlciBkaWZmZXJlbnQKK3Rlcm1zIGZyb20gdGhpcyBMaWNlbnNlIGFueSBjb2RlIHRoYXQgTGljZW5zb3Igb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYQorcmlnaHQgdG8gbGljZW5zZS4KKworNC4gWW91ciBPYmxpZ2F0aW9ucyBSZWdhcmRpbmcgRGlzdHJpYnV0aW9uLgorCithLiBBcHBsaWNhdGlvbiBvZiBUaGlzIExpY2Vuc2UgdG8gWW91cgorTW9kaWZpY2F0aW9ucy4gQXMgYW4gZXhwcmVzcyBjb25kaXRpb24gZm9yIHlvdXIgdXNlIG9mIHRoZSBMaWNlbnNlZAorUHJvZHVjdCwgeW91CitoZXJlYnkgYWdyZWUgdGhhdCBhbnkgTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSBjcmVhdGUgb3IgdG8gd2hpY2gKK3lvdSBjb250cmlidXRlLCBhbmQgd2hpY2ggeW91IGRpc3RyaWJ1dGUsIGFyZSBnb3Zlcm5lZCBieSB0aGUKK3Rlcm1zIG9mIHRoaXMgTGljZW5zZSBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgU2VjdGlvbiAyLgorQW55IE1vZGlmaWNhdGlvbnMgdGhhdCB5b3UgY3JlYXRlIG9yIHRvIHdoaWNoIHlvdSBjb250cmlidXRlCittYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEKK2Z1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDcuIFlvdSBtdXN0CitpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZQorTW9kaWZpY2F0aW9ucyB5b3UgZGlzdHJpYnV0ZS4gWW91IGFncmVlIG5vdCB0byBvZmZlciBvciBpbXBvc2UgYW55Cit0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgb3IgZXhlY3V0YWJsZSB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlZAorUHJvZHVjdCBvciBNb2RpZmljYXRpb25zIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIGFwcGxpY2FibGUKK3ZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLgorSG93ZXZlciwgeW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlCithZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiA0KGUpLgorCitiLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuIFlvdSBtdXN0IG1ha2UKK2F2YWlsYWJsZSwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBMaWNlbnNlZAorUHJvZHVjdCBhbmQgYW55IE1vZGlmaWNhdGlvbnMgdGhhdCB5b3UgZGlzdHJpYnV0ZSwgZWl0aGVyIG9uIHRoZQorc2FtZSBtZWRpYSBhcyB5b3UgZGlzdHJpYnV0ZSBhbnkgZXhlY3V0YWJsZSBvciBvdGhlciBmb3JtCitvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCwgb3IgdmlhIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbgordGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMKK3RyYW5zZmVyIG9mIGRhdGEgKGFuICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iKS4gVGhlCitTb3VyY2UgQ29kZSBmb3IgYW55IHZlcnNpb24gb2YgTGljZW5zZWQgUHJvZHVjdCBvcgorTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSBkaXN0cmlidXRlIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQKK2xlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lCithdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uCitvZiBzYWlkIExpY2Vuc2VkIFByb2R1Y3Qgb3IgTW9kaWZpY2F0aW9ucyBoYXMgYmVlbiBtYWRlCithdmFpbGFibGUuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlCit2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uCitNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LgorCitjLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLiBZb3UgbXVzdCBjYXVzZSBhbnkKK01vZGlmaWNhdGlvbnMgdGhhdCB5b3UgY3JlYXRlIG9yIHRvIHdoaWNoIHlvdSBjb250cmlidXRlLCBhbmQgd2hpY2gKK3lvdSBkaXN0cmlidXRlLCB0byBjb250YWluIGEgZmlsZSBkb2N1bWVudGluZyB0aGUgYWRkaXRpb25zLAorY2hhbmdlcyBvciBkZWxldGlvbnMgeW91IG1hZGUgdG8gY3JlYXRlIG9yIGNvbnRyaWJ1dGUgdG8gdGhvc2UKK01vZGlmaWNhdGlvbnMsIGFuZCB0aGUgZGF0ZXMgb2YgYW55IHN1Y2ggYWRkaXRpb25zLCBjaGFuZ2VzIG9yCitkZWxldGlvbnMuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlCitNb2RpZmljYXRpb25zIGFyZSBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIHRoZQorTGljZW5zZWQgUHJvZHVjdCBhbmQgaW5jbHVkZSB0aGUgbmFtZXMgb2YgdGhlIExpY2Vuc29yIGFuZCBhbnkKK0NvbnRyaWJ1dG9yIHRvIHRoZSBMaWNlbnNlZCBQcm9kdWN0IGluIChpKSB0aGUgU291cmNlIENvZGUgYW5kCisoaWkpIGluIGFueSBub3RpY2UgZGlzcGxheWVkIGJ5IGEgdmVyc2lvbiBvZiB0aGUgTGljZW5zZWQKK1Byb2R1Y3QgeW91IGRpc3RyaWJ1dGUgb3IgaW4gcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIHlvdQorZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3QuCitZb3UgbWF5IG5vdCBtb2RpZnkgb3IgZGVsZXRlIGFueSBwcmVleGlzdGluZyBjb3B5cmlnaHQgbm90aWNlcyBpbgordGhlIExpY2Vuc2VkIFByb2R1Y3QuCisKK2QuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzLgorCitpLiBUaGlyZCBQYXJ0eSBDbGFpbXMuIElmIHlvdSBoYXZlCitrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdG8gYSB0aGlyZCBwYXJ0eWBzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodCBpcworcmVxdWlyZWQKK3RvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UsIHlvdSBtdXN0CitpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZSBDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQKKyJMRUdBTCIgdGhhdCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZQorY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cKK3dob20gdG8gY29udGFjdC4gSWYgeW91IG9idGFpbiBzdWNoIGtub3dsZWRnZSBhZnRlciB5b3UgbWFrZQorYW55IE1vZGlmaWNhdGlvbnMgYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uCis0KGIpLCB5b3Ugc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMKK3lvdSBtYWtlIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyCitzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvcgorbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8KK3JlY2VpdmVkIHRoZSBMaWNlbnNlZCBQcm9kdWN0IGZyb20geW91IHRoYXQgbmV3IGtub3dsZWRnZQoraGFzIGJlZW4gb2J0YWluZWQuCisKK2lpLiBDb250cmlidXRvciBBUElzLiBJZiB5b3VyCitNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlICgiQVBJIikgYW5kIHlvdSBoYXZlCitrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHRoYXQgYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5Cit0byBpbXBsZW1lbnQgdGhhdCBBUEksIHlvdSBtdXN0IGFsc28gaW5jbHVkZSB0aGlzCitpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS4KKworaWlpLiBSZXByZXNlbnRhdGlvbnMuIFlvdSByZXByZXNlbnQgdGhhdCwKK2V4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gNChkKShpKSBhYm92ZSwgeW91IGJlbGlldmUgdGhhdCBhbnkKK01vZGlmaWNhdGlvbnMgeW91IGRpc3RyaWJ1dGUgYXJlIHlvdXIgb3JpZ2luYWwgY3JlYXRpb25zIGFuZAordGhhdCB5b3UgaGF2ZSBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzCitjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuCisKK2UuIFJlcXVpcmVkIE5vdGljZXMuIFlvdSBtdXN0IGR1cGxpY2F0ZSB0aGlzCitMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIHlvdSBwcm92aWRlIGFsb25nIHdpdGggdGhlIFNvdXJjZSBDb2RlIG9mIGFueQorTW9kaWZpY2F0aW9ucyB5b3UgY3JlYXRlIG9yIHRvIHdoaWNoIHlvdSBjb250cmlidXRlLCBhbmQgd2hpY2ggeW91CitkaXN0cmlidXRlLCB3aGVyZXZlciB5b3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzCityZWxhdGluZyB0byBMaWNlbnNlZCBQcm9kdWN0LiBZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZQorY29udGFpbmVkIGluIEV4aGliaXQgQSAodGhlICJOb3RpY2UiKSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZQorQ29kZSBvZiBhbnkgY29weSB5b3UgZGlzdHJpYnV0ZSBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdC4gSWYgeW91CitjcmVhdGVkIGEgTW9kaWZpY2F0aW9uLCB5b3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYQorQ29udHJpYnV0b3IgdG8gdGhlIE5vdGljZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCB0aGUgTm90aWNlCitpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbgoreW91IG11c3QgaW5jbHVkZSBzdWNoIE5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQKK2RpcmVjdG9yeSBmaWxlKSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYQorbm90aWNlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LAorc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZQorcmVjaXBpZW50cyBvZiBMaWNlbnNlZCBQcm9kdWN0LiBIb3dldmVyLCB5b3UgbWF5IGRvIHNvIG9ubHkgb24KK3lvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIExpY2Vuc29yIG9yIGFueQorQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgY2xlYXIgdGhhdCBhbnkgc3VjaCB3YXJyYW50eSwKK3N1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IHlvdQorYWxvbmUsIGFuZCB5b3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgTGljZW5zb3IgYW5kIGV2ZXJ5CitDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgTGljZW5zb3Igb3Igc3VjaAorQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvcgorbGlhYmlsaXR5IHRlcm1zIHlvdSBvZmZlci4KKworZi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuIFlvdSBtYXkKK2Rpc3RyaWJ1dGUgTGljZW5zZWQgUHJvZHVjdCBhcyBhbiBleGVjdXRhYmxlIHByb2dyYW0gdW5kZXIgYSBsaWNlbnNlIG9mCit5b3VyIGNob2ljZSB0aGF0IG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZQorcHJvdmlkZWQgKGkpIHlvdSBoYXZlIHNhdGlzZmllZCB0aGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb25zCis0KGEpIHRocm91Z2ggNChlKSBmb3IgdGhhdCBkaXN0cmlidXRpb24sIChpaSkgeW91IGluY2x1ZGUgYQorY29uc3BpY3VvdXMgbm90aWNlIGluIHRoZSBleGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbgorYW5kIGNvbGxhdGVyYWwgbWF0ZXJpYWxzIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZgordGhlIExpY2Vuc2VkIFByb2R1Y3QgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIHlvdSBoYXZlCitmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gNChiKSwgKGlpaSkgeW91IHJldGFpbiBhbGwKK2V4aXN0aW5nIGNvcHlyaWdodCBub3RpY2VzIGluIHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBhbmQgKGl2KSB5b3UKK21ha2UgaXQgY2xlYXIgdGhhdCBhbnkgdGVybXMgdGhhdCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlCitvZmZlcmVkIGJ5IHlvdSBhbG9uZSwgbm90IGJ5IExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvci4gWW91CitoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBMaWNlbnNvciBhbmQgZXZlcnkgQ29udHJpYnV0b3IKK2ZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IExpY2Vuc29yIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYQorcmVzdWx0IG9mIGFueSB0ZXJtcyB5b3Ugb2ZmZXIuCisKK2cuIERpc3RyaWJ1dGlvbiBvZiBEZXJpdmF0aXZlIFdvcmtzLiBZb3UgbWF5CitjcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyAoZS5nLiwgY29tYmluYXRpb25zIG9mIHNvbWUgb3IgYWxsIG9mIHRoZSBMaWNlbnNlZAorUHJvZHVjdCB3aXRoIG90aGVyIGNvZGUpIGFuZCBkaXN0cmlidXRlIHRoZSBEZXJpdmF0aXZlIFdvcmtzIGFzCitwcm9kdWN0cyB1bmRlciBhbnkgb3RoZXIgbGljZW5zZSB5b3Ugc2VsZWN0LCB3aXRoIHRoZQorcHJvdmlzbyB0aGF0IHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yCit0aG9zZSBwb3J0aW9ucyBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGNvbnNpc3Qgb2YgdGhlCitMaWNlbnNlZCBQcm9kdWN0IG9yIGFueSBNb2RpZmljYXRpb25zIHRoZXJldG8uCisKKzUuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IKK1JlZ3VsYXRpb24uCisKK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIHlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aAorcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwKK29yZGVyLCBvciByZWd1bGF0aW9uLCB0aGVuIHlvdSBtdXN0IChpKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUsIChpaSkgY2l0ZSB0aGUgc3RhdHV0ZSBvcgorcmVndWxhdGlvbiB0aGF0IHByb2hpYml0cyB5b3UgZnJvbSBhZGhlcmluZyB0byB0aGUgTGljZW5zZSwgYW5kCisoaWlpKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uCittdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQoZCksCithbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvCit0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoCitkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkKK3NraWxsIGF0IGNvbXB1dGVyIHByb2dyYW1taW5nIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKworNi4gQXBwbGljYXRpb24gb2YgVGhpcyBMaWNlbnNlLgorCitUaGlzIExpY2Vuc2UKK2FwcGxpZXMgdG8gY29kZSB0byB3aGljaCBMaWNlbnNvciBvciBDb250cmlidXRvciBoYXMgYXR0YWNoZWQgdGhlIE5vdGljZSBpbgorRXhoaWJpdCBBLAord2hpY2ggaXMgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSB0aGlzIHJlZmVyZW5jZS4KKworNy4gVmVyc2lvbnMgb2YgVGhpcyBMaWNlbnNlLgorCithLiBWZXJzaW9uLiBUaGUgTW90b3NvdG8gT3BlbiBTb3VyY2UgTGljZW5zZSBpcworZGVyaXZlZCBmcm9tIHRoZSBKYWJiZXIgT3BlbiBTb3VyY2UgTGljZW5zZS4gQWxsIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8KK2FwcGxpY2FibGUgbGF3IGFuZCB0aGUgbG9jYXRpb24gb2YgY291cnQuCisKK2IuIE5ldyBWZXJzaW9ucy4gTGljZW5zb3IgbWF5IHB1Ymxpc2ggZnJvbSB0aW1lIHRvCit0aW1lIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4KKworYy4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4gT25jZSBMaWNlbnNlZCBQcm9kdWN0CitoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIHlvdSBtYXkgYWx3YXlzCitjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvCitjaG9vc2UgdG8gdXNlIHN1Y2ggTGljZW5zZWQgUHJvZHVjdCB1bmRlciB0aGUgdGVybXMgb2YgYW55CitzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IExpY2Vuc29yLiBObyBvbmUKK290aGVyIHRoYW4gTGljIGVuc29yIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcworYXBwbGljYWJsZSB0byBMaWNlbnNlZCBQcm9kdWN0IGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCitkLiBEZXJpdmF0aXZlIFdvcmtzIG9mIHRoaXMgTGljZW5zZS4gSWYgeW91CitjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHdoaWNoIHlvdSBtYXkgZG8gb25seSBpbgorb3JkZXIgdG8KK2FwcGx5IGl0IHRvIHNvZnR3YXJlIHRoYXQgaXMgbm90IGFscmVhZHkgYSBMaWNlbnNlZCBQcm9kdWN0IHVuZGVyCit0aGlzIExpY2Vuc2UsIHlvdSBtdXN0IHJlbmFtZSB5b3VyIGxpY2Vuc2Ugc28gdGhhdCBpdCBpcyBub3QKK2NvbmZ1c2luZ2x5IHNpbWlsYXIgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbXVzdCBtYWtlIGl0IGNsZWFyIHRoYXQKK3lvdXIgbGljZW5zZSBjb250YWlucyB0ZXJtcyB0aGF0IGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZS4gSW4KK3NvIG5hbWluZyB5b3VyIGxpY2Vuc2UsIHlvdSBtYXkgbm90IHVzZSBhbnkgdHJhZGVtYXJrIG9mIExpY2Vuc29yCitvciBhbnkgQ29udHJpYnV0b3IuCisKKzguIERpc2NsYWltZXIgb2YgV2FycmFudHkuCisKK0xJQ0VOU0VEIFBST0RVQ1QgSVMKK1BST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUCitMSU1JVEFUSU9OLCBXQVJSQU5USUVTCitUSEFUIFRIRSBMSUNFTlNFRCBQUk9EVUNUIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRSBPUgorTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFCitMSUNFTlNFRCBQUk9EVUNUIElTCitXSVRIIFlPVS4gU0hPVUxEIExJQ0VOU0VEIFBST0RVQ1QgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UKKyhBTkQgTk9UIFRIRSBMSUNFTlNPUiBPUgorQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUgorT1IgQ09SUkVDVElPTi4gVEhJUworRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PCitVU0UgT0YgTElDRU5TRUQKK1BST0RVQ1QgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKworOS4gVGVybWluYXRpb24uCisKK2EuIEF1dG9tYXRpYyBUZXJtaW5hdGlvbiBVcG9uIEJyZWFjaC4gVGhpcworbGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIHlvdQorZmFpbCB0byBjb21wbHkgd2l0aCB0aGUgdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2gKK3dpdGhpbiB0aGlydHkgKDMwKSBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guCitBbGwgc3VibGljZW5zZXMgdG8gdGhlIExpY2Vuc2VkIFByb2R1Y3QgdGhhdCBhcmUgcHJvcGVybHkgZ3JhbnRlZAorc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBsaWNlbnNlLiBQcm92aXNpb25zCit0aGF0LCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlCit0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHNoYWxsIHN1cnZpdmUuCisKK2IuIFRlcm1pbmF0aW9uIFVwb24gQXNzZXJ0aW9uIG9mIFBhdGVudAorSW5mcmluZ2VtZW50LiBJZiB5b3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQKK2luZnJpbmdlbWVudCBjbGFpbQorKGV4Y2x1ZGluZyBkZWNsYXJhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IExpY2Vuc29yIG9yIGEKK0NvbnRyaWJ1dG9yIChMaWNlbnNvciBvciBDb250cmlidXRvciBhZ2FpbnN0IHdob20geW91IGZpbGUKK3N1Y2ggYW4gYWN0aW9uIGlzIHJlZmVycmVkIHRvIGhlcmVpbiBhcyAiUmVzcG9uZGVudCIpIGFsbGVnaW5nCit0aGF0IExpY2Vuc2VkIFByb2R1Y3QgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55CitwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBSZXNwb25kZW50IHRvIHlvdQordW5kZXIgU2VjdGlvbnMgMSBvciAyIG9mIHRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUKK3Byb3NwZWN0aXZlbHkgdXBvbiBzaXh0eSAoNjApIGRheXMgbm90aWNlIGZyb20gUmVzcG9uZGVudCAodGhlCisiTm90aWNlIFBlcmlvZCIpIHVubGVzcyB3aXRoaW4gdGhhdCBOb3RpY2UgUGVyaW9kIHlvdQorZWl0aGVyIGFncmVlIGluIHdyaXRpbmcgKGkpIHRvIHBheSBSZXNwb25kZW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlCityZWFzb25hYmx5IHJveWFsdHkgZm9yIHlvdXIgcGFzdCBvciBmdXR1cmUgdXNlIG9mIExpY2Vuc2VkCitQcm9kdWN0IG1hZGUgYnkgc3VjaCBSZXNwb25kZW50LCBvciAoaWkpIHdpdGhkcmF3IHlvdXIgbGl0aWdhdGlvbgorY2xhaW0gd2l0aCByZXNwZWN0IHRvIExpY2Vuc2VkIFByb2R1Y3QgYWdhaW5zdCBzdWNoCitSZXNwb25kZW50LiBJZiB3aXRoaW4gc2FpZCBOb3RpY2UgUGVyaW9kIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZAorcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5IGFncmVlZCB1cG9uIGluCit3cml0aW5nIGJ5IHRoZSBwYXJ0aWVzIG9yIHRoZSBsaXRpZ2F0aW9uIGNsYWltIGlzIG5vdCB3aXRoZHJhd24sCit0aGUgcmlnaHRzIGdyYW50ZWQgYnkgTGljZW5zb3IgdG8geW91IHVuZGVyIFNlY3Rpb25zIDEgYW5kIDIKK2F1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mIHNhaWQgTm90aWNlCitQZXJpb2QuCisKK2MuIFJlYXNvbmFibGUgVmFsdWUgb2YgVGhpcyBMaWNlbnNlLiBJZiB5b3UgYXNzZXJ0IGEKK3BhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBSZXNwb25kZW50IGFsbGVnaW5nIHRoYXQgTGljZW5zZWQKK1Byb2R1Y3QgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoCitjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvCit0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlCityZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHNhaWQgUmVzcG9uZGVudCB1bmRlcgorU2VjdGlvbnMgMSBhbmQgMiBzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlCithbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IgbGljZW5zZS4KKworZC4gTm8gUmV0cm9hY3RpdmUgRWZmZWN0IG9mIFRlcm1pbmF0aW9uLiBJbiB0aGUKK2V2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDkoYSkgb3IgOShiKSBhYm92ZSwgYWxsIGVuZCB1c2VyIGxpY2Vuc2UKK2FncmVlbWVudHMgKGV4Y2x1ZGluZyBsaWNlbnNlcyB0byBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGUgcnMpCit0aGF0IGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgeW91IG9yIGFueSBkaXN0cmlidXRvcgoraGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUKK3Rlcm1pbmF0aW9uLgorCisxMC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCisKK1VOREVSIE5PCitDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgVEhFIExJQ0VOU09SLCBBTlkKK0NPTlRSSUJVVE9SLCBPUiBBTlkKK0RJU1RSSUJVVE9SIE9GIExJQ0VOU0VEIFBST0RVQ1QsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLAorQkUgTElBQkxFIFRPIEFOWSBQRVJTT04KK0ZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkKK0NIQVJBQ1RFUiBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSCitGQUlMVVJFIE9SCitNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRgorU1VDSCBQQVJUWSBTSEFMTAorSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRgorTElBQklMSVRZIFNIQUxMIE5PVAorQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSAorUEFSVFkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NdWx0aWNzIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NdWx0aWNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ODc2NDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL011bHRpY3MKQEAgLTAsMCArMSw0MCBAQAorCitNdWx0aWNzIExpY2Vuc2UKKworSGlzdG9yaWNhbCBCYWNrZ3JvdW5kCisKK1RoaXMgZWRpdGlvbiBvZiB0aGUgTXVsdGljcyBzb2Z0d2FyZSBtYXRlcmlhbHMgYW5kIGRvY3VtZW50YXRpb24gaXMKK3Byb3ZpZGVkIGFuZCBkb25hdGVkIHRvIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kgYnkgR3JvdXAKK0JVTEwgaW5jbHVkaW5nIEJVTEwgSE4gSW5mb3JtYXRpb24gU3lzdGVtcyBJbmMuIGFzIGEgY29udHJpYnV0aW9uIHRvCitjb21wdXRlciBzY2llbmNlIGtub3dsZWRnZS4gVGhpcyBkb25hdGlvbiBpcyBtYWRlIGFsc28gdG8gZ2l2ZSBldmlkZW5jZQorb2YgdGhlIGNvbW1vbiBjb250cmlidXRpb25zIG9mIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksCitCZWxsIExhYm9yYXRvcmllcywgR2VuZXJhbCBFbGVjdHJpYywgSG9uZXl3ZWxsIEluZm9ybWF0aW9uIFN5c3RlbXMKK0luYy4sIEhvbmV5d2VsbCBCVUxMIEluYy4sIEdyb3VwZSBCVUxMIGFuZCBCVUxMIEhOIEluZm9ybWF0aW9uIFN5c3RlbXMKK0luYy4gdG8gdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgb3BlcmF0aW5nIHN5c3RlbS4gTXVsdGljcyBkZXZlbG9wbWVudAord2FzIGluaXRpYXRlZCBieSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5IFByb2plY3QgTUFDCisoMTk2My0xOTcwKSwgcmVuYW1lZCB0aGUgTUlUIExhYm9yYXRvcnkgZm9yIENvbXB1dGVyIFNjaWVuY2UgYW5kCitBcnRpZmljaWFsIEludGVsbGlnZW5jZSBpbiB0aGUgbWlkIDE5NzBzLCB1bmRlciB0aGUgbGVhZGVyc2hpcCBvZgorUHJvZmVzc29yIEZlcm5hbmRvIEpvc2UgQ29yYmF0by4gVXNlcnMgY29uc2lkZXIgdGhhdCBNdWx0aWNzIHByb3ZpZGVkIHRoZQorYmVzdCBzb2Z0d2FyZSBhcmNoaXRlY3R1cmUgZm9yIG1hbmFnaW5nIGNvbXB1dGVyIGhhcmR3YXJlIHByb3Blcmx5IGFuZAorZm9yIGV4ZWN1dGluZyBwcm9ncmFtcy4gTWFueSBzdWJzZXF1ZW50IG9wZXJhdGluZyBzeXN0ZW1zIGluY29ycG9yYXRlZAorTXVsdGljcyBwcmluY2lwbGVzLiBNdWx0aWNzIHdhcyBkaXN0cmlidXRlZCBpbiAxOTc1IHRvIDIwMDAgYnkgR3JvdXAKK0J1bGwgaW4gRXVyb3BlICwgYW5kIGluIHRoZSBVLlMuIGJ5IEJ1bGwgSE4gSW5mb3JtYXRpb24gU3lzdGVtcyBJbmMuLCBhcworc3VjY2Vzc29yIGluIGludGVyZXN0IGJ5IGNoYW5nZSBpbiBuYW1lIG9ubHkgdG8gSG9uZXl3ZWxsIEJ1bGwgSW5jLiBhbmQKK0hvbmV5d2VsbCBJbmZvcm1hdGlvbiBTeXN0ZW1zIEluYy4gLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGVzZSBwcm9ncmFtcyBhbmQgdGhlaXIKK2RvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCxwcm92aWRlZAordGhhdCB0aGUgYmVsb3cgY29weXJpZ2h0IG5vdGljZSBhbmQgaGlzdG9yaWNhbCBiYWNrZ3JvdW5kIGFwcGVhciBpbiBhbGwKK2NvcGllcyBhbmQgdGhhdCBib3RoIHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBoaXN0b3JpY2FsIGJhY2tncm91bmQgYW5kCit0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0Cit0aGUgbmFtZXMgb2YgTUlULCBISVMsIEJVTEwgb3IgQlVMTCBITiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBwcm9ncmFtcyB3aXRob3V0IHNwZWNpZmljCitwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCitDb3B5cmlnaHQgMTk3MiBieSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5IGFuZCBIb25leXdlbGwgSW5mb3JtYXRpb24KK1N5c3RlbXMgSW5jLgorQ29weXJpZ2h0IDIwMDYgYnkgQlVMTCBITiBJbmZvcm1hdGlvbiBTeXN0ZW1zIEluYy4KK0NvcHlyaWdodCAyMDA2IGJ5IEJ1bGwgU0FTCitBbGwgUmlnaHRzIFJlc2VydmVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTkFTQS0xLjMgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05BU0EtMS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMzE4MmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05BU0EtMS4zCkBAIC0wLDAgKzEsNzkgQEAKKworQVNBIE9QRU4gU09VUkNFIEFHUkVFTUVOVCBWRVJTSU9OIDEuMworCitUSElTIE9QRU4gU09VUkNFIEFHUkVFTUVOVCAoIkFHUkVFTUVOVCIpIERFRklORVMgVEhFIFJJR0hUUyBPRiBVU0UsIFJFUFJPRFVDVElPTiwgRElTVFJJQlVUSU9OLCBNT0RJRklDQVRJT04gQU5EIFJFRElTVFJJQlVUSU9OIE9GIENFUlRBSU4gQ09NUFVURVIgU09GVFdBUkUgT1JJR0lOQUxMWSBSRUxFQVNFRCBCWSBUSEUgVU5JVEVEIFNUQVRFUyBHT1ZFUk5NRU5UIEFTIFJFUFJFU0VOVEVEIEJZIFRIRSBHT1ZFUk5NRU5UIEFHRU5DWSBMSVNURUQgQkVMT1cgKCJHT1ZFUk5NRU5UIEFHRU5DWSIpLiBUSEUgVU5JVEVEIFNUQVRFUyBHT1ZFUk5NRU5ULCBBUyBSRVBSRVNFTlRFRCBCWSBHT1ZFUk5NRU5UIEFHRU5DWSwgSVMgQU4gSU5URU5ERUQgVEhJUkQtUEFSVFkgQkVORUZJQ0lBUlkgT0YgQUxMIFNVQlNFUVVFTlQgRElTVFJJQlVUSU9OUyBPUiBSRURJU1RSSUJVVElPTlMgT0YgVEhFIFNVQkpFQ1QgU09GVFdBUkUuIEFOWU9ORSBXSE8gVVNFUywgUkVQUk9EVUNFUywgRElTVFJJQlVURVMsIE1PRElGSUVTIE9SIFJFRElTVFJJQlVURVMgVEhFIFNVQkpFQ1QgU09GVFdBUkUsIEFTIERFRklORUQgSEVSRUlOLCBPUiBBTlkgUEFSVCBUSEVSRU9GLCBJUywgQlkgVEhBVCBBQ1RJT04sIEFDQ0VQVElORyBJTiBGVUxMIFRIRSBSRVNQT05TSUJJTElUSUVTIEFORCBPQkxJR0FUSU9OUyBDT05UQUlORUQgSU4gVEhJUyBBR1JFRU1FTlQuCisKK0dvdmVybm1lbnQgQWdlbmN5OiBfX19fXyBHb3Zlcm5tZW50IEFnZW5jeSBPcmlnaW5hbCBTb2Z0d2FyZSBEZXNpZ25hdGlvbjogX18gR292ZXJubWVudCBBZ2VuY3kgT3JpZ2luYWwgU29mdHdhcmUgVGl0bGU6IF9fX19fIFVzZXIgUmVnaXN0cmF0aW9uIFJlcXVlc3RlZC4gUGxlYXNlIFZpc2l0IGh0dHA6Ly9fX18gR292ZXJubWVudCBBZ2VuY3kgUG9pbnQgb2YgQ29udGFjdCBmb3IgT3JpZ2luYWwgU29mdHdhcmU6IF9fX19fCisKK0RFRklOSVRJT05TCitBLiAiQ29udHJpYnV0b3IiIG1lYW5zIEdvdmVybm1lbnQgQWdlbmN5LCBhcyB0aGUgZGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSwgYW5kIGFueSBlbnRpdHkgdGhhdCBtYWtlcyBhIE1vZGlmaWNhdGlvbi4gQi4gIkNvdmVyZWQgUGF0ZW50cyIgbWVhbiBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBNb2RpZmljYXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBTdWJqZWN0IFNvZnR3YXJlLiBDLiAiRGlzcGxheSIgbWVhbnMgdGhlIHNob3dpbmcgb2YgYSBjb3B5IG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlLCBlaXRoZXIgZGlyZWN0bHkgb3IgYnkgbWVhbnMgb2YgYW4gaW1hZ2UsIG9yIGFueSBvdGhlciBkZXZpY2UuIEQuICJEaXN0cmlidXRpb24iIG1lYW5zIGNvbnZleWFuY2Ugb3IgdHJhbnNmZXIgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUsIHJlZ2FyZGxlc3Mgb2YgbWVhbnMsIHRvIGFub3RoZXIuIEUuICJMYXJnZXIgV29yayIgbWVhbnMgY29tcHV0ZXIgc29mdHdhcmUgdGhhdCBjb21iaW5lcyBTdWJqZWN0IFNvZnR3YXJlLCBvciBwb3J0aW9ucyB0aGVyZW9mLCB3aXRoIHNvZnR3YXJlIHNlcGFyYXRlIGZyb20gdGhlIFN1YmplY3QgU29mdHdhcmUgdGhhdCBpcyBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LiBGLiAiTW9kaWZpY2F0aW9uIiBtZWFucyBhbnkgYWx0ZXJhdGlvbiBvZiwgaW5jbHVkaW5nIGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20sIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgU29mdHdhcmUgb3IgU3ViamVjdCBTb2Z0d2FyZSwgYW5kIGluY2x1ZGVzIGRlcml2YXRpdmUgd29ya3MsIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIHRoZSBDb3B5cmlnaHQgU3RhdHV0ZSwgMTcgVVNDIDEwMS4gSG93ZXZlciwgdGhlIGFjdCBvZiBpbmNsdWRpbmcgU3ViamVjdCBTb2Z0d2FyZSBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcmsgZG9lcyBub3QgaW4gYW5kIG9mIGl0c2VsZiBjb25zdGl0dXRlIGEgTW9kaWZpY2F0aW9uLiBHLiAiT3JpZ2luYWwgU29mdHdhcmUiIG1lYW5zIHRoZSBjb21wdXRlciBzb2Z0d2FyZSBmaXJzdCByZWxlYXNlZCB1bmRlciB0aGlzIEFncmVlbWVudCBieSBHb3Zlcm5tZW50IEFnZW5jeSB3aXRoIEdvdmVybm1lbnQgQWdlbmN5IGRlc2lnbmF0aW9uIF9fIGFuZCBlbnRpdGxlZCBfX19fX19fX18sIGluY2x1ZGluZyBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uLCBpZiBhbnkuIEguICJSZWNpcGllbnQiIG1lYW5zIGFueW9uZSB3aG8gYWNxdWlyZXMgdGhlIFN1YmplY3QgU29mdHdhcmUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLiBJLiAiUmVkaXN0cmlidXRpb24iIG1lYW5zIERpc3RyaWJ1dGlvbiBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSBhZnRlciBhIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlLiBKLiAiUmVwcm9kdWN0aW9uIiBtZWFucyB0aGUgbWFraW5nIG9mIGEgY291bnRlcnBhcnQsIGltYWdlIG9yIGNvcHkgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUuIEsuICJTYWxlIiBtZWFucyB0aGUgZXhjaGFuZ2Ugb2YgdGhlIFN1YmplY3QgU29mdHdhcmUgZm9yIG1vbmV5IG9yIGVxdWl2YWxlbnQgdmFsdWUuIEwuICJTdWJqZWN0IFNvZnR3YXJlIiBtZWFucyB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIE1vZGlmaWNhdGlvbnMsIG9yIGFueSByZXNwZWN0aXZlIHBhcnRzIHRoZXJlb2YuIE0uICJVc2UiIG1lYW5zIHRoZSBhcHBsaWNhdGlvbiBvciBlbXBsb3ltZW50IG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4KKworR1JBTlQgT0YgUklHSFRTCitBLiBVbmRlciBOb24tUGF0ZW50IFJpZ2h0czogU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IsIHdpdGggcmVzcGVjdCB0byBpdHMgb3duIGNvbnRyaWJ1dGlvbiB0byB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgaGVyZWJ5IGdyYW50cyB0byBlYWNoIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlIHRvIGVuZ2FnZSBpbiB0aGUgZm9sbG93aW5nIGFjdGl2aXRpZXMgcGVydGFpbmluZyB0byB0aGUgU3ViamVjdCBTb2Z0d2FyZToKKworVXNlCitEaXN0cmlidXRpb24KK1JlcHJvZHVjdGlvbgorTW9kaWZpY2F0aW9uCitSZWRpc3RyaWJ1dGlvbgorRGlzcGxheQorQi4gVW5kZXIgUGF0ZW50IFJpZ2h0czogU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IsIHdpdGggcmVzcGVjdCB0byBpdHMgb3duIGNvbnRyaWJ1dGlvbiB0byB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgaGVyZWJ5IGdyYW50cyB0byBlYWNoIFJlY2lwaWVudCB1bmRlciBDb3ZlcmVkIFBhdGVudHMgYSBub24tZXhjbHVzaXZlLCB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSB0byBlbmdhZ2UgaW4gdGhlIGZvbGxvd2luZyBhY3Rpdml0aWVzIHBlcnRhaW5pbmcgdG8gdGhlIFN1YmplY3QgU29mdHdhcmU6CisKK1VzZQorRGlzdHJpYnV0aW9uCitSZXByb2R1Y3Rpb24KK1NhbGUKK09mZmVyIGZvciBTYWxlCitDLiBUaGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgUGFyYWdyYXBoIEIuIGFsc28gYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uIG9mIGEgQ29udHJpYnV0b3JgcyBNb2RpZmljYXRpb24gYW5kIHRoZSBTdWJqZWN0IFNvZnR3YXJlIGlmLCBhdCB0aGUgdGltZSB0aGUgTW9kaWZpY2F0aW9uIGlzIGFkZGVkIGJ5IHRoZSBDb250cmlidXRvciwgdGhlIGFkZGl0aW9uIG9mIHN1Y2ggTW9kaWZpY2F0aW9uIGNhdXNlcyB0aGUgY29tYmluYXRpb24gdG8gYmUgY292ZXJlZCBieSB0aGUgQ292ZXJlZCBQYXRlbnRzLiBJdCBkb2VzIG5vdCBhcHBseSB0byBhbnkgb3RoZXIgY29tYmluYXRpb25zIHRoYXQgaW5jbHVkZSBhIE1vZGlmaWNhdGlvbi4KKworRC4gVGhlIHJpZ2h0cyBncmFudGVkIGluIFBhcmFncmFwaHMgQS4gYW5kIEIuIGFsbG93IHRoZSBSZWNpcGllbnQgdG8gc3VibGljZW5zZSB0aG9zZSBzYW1lIHJpZ2h0cy4gU3VjaCBzdWJsaWNlbnNlIG11c3QgYmUgdW5kZXIgdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQuCisKK09CTElHQVRJT05TIE9GIFJFQ0lQSUVOVAorQS4gRGlzdHJpYnV0aW9uIG9yIFJlZGlzdHJpYnV0aW9uIG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlIG11c3QgYmUgbWFkZSB1bmRlciB0aGlzIEFncmVlbWVudCBleGNlcHQgZm9yIGFkZGl0aW9ucyBjb3ZlcmVkIHVuZGVyIHBhcmFncmFwaCAzSC4KKworV2hlbmV2ZXIgYSBSZWNpcGllbnQgZGlzdHJpYnV0ZXMgb3IgcmVkaXN0cmlidXRlcyB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFN1YmplY3QgU29mdHdhcmU7IGFuZAorSWYgUmVjaXBpZW50IGRpc3RyaWJ1dGVzIG9yIHJlZGlzdHJpYnV0ZXMgdGhlIFN1YmplY3QgU29mdHdhcmUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBzb3VyY2UgY29kZSwgUmVjaXBpZW50IG11c3QgYWxzbyBtYWtlIHRoZSBzb3VyY2UgY29kZSBmcmVlbHkgYXZhaWxhYmxlLCBhbmQgbXVzdCBwcm92aWRlIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBvYnRhaW4gdGhlIHNvdXJjZSBjb2RlIGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS4KK0IuIEVhY2ggUmVjaXBpZW50IG11c3QgZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgbm90aWNlIGFwcGVhcnMgcHJvbWluZW50bHkgaW4gdGhlIFN1YmplY3QgU29mdHdhcmU6CisKK1tHb3Zlcm5tZW50IEFnZW5jeSB3aWxsIGluc2VydCB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgbm90aWNlIGluIGVhY2ggYWdyZWVtZW50IGFjY29tcGFueWluZyB0aGUgaW5pdGlhbCBkaXN0cmlidXRpb24gb2Ygb3JpZ2luYWwgc29mdHdhcmUgYW5kIHJlbW92ZSB0aGlzIGJyYWNrZXRlZCBsYW5ndWFnZS5dCisKK1tUaGUgZm9sbG93aW5nIGNvcHlyaWdodCBub3RpY2Ugd2lsbCBiZSB1c2VkIGlmIGNyZWF0ZWQgYnkgYSBjb250cmFjdG9yIHB1cnN1YW50IHRvIEdvdmVybm1lbnQgQWdlbmN5IGNvbnRyYWN0IGFuZCByaWdodHMgb2J0YWluZWQgZnJvbSBjcmVhdG9yIGJ5IGFzc2lnbm1lbnQuIEdvdmVybm1lbnQgQWdlbmN5IHdpbGwgaW5zZXJ0IHRoZSB5ZWFyIGFuZCBpdHMgQWdlbmN5IGRlc2lnbmF0aW9uIGFuZCByZW1vdmUgdGhlIGJyYWNrZXRlZCBsYW5ndWFnZS5dIENvcHlyaWdodCAmIzY1NTMzOyB7WUVBUn0gVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IGFzIHJlcHJlc2VudGVkIGJ5IF9fXyBfX19fLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitbVGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgbm90aWNlIHdpbGwgYmUgdXNlZCBpZiBjcmVhdGVkIGJ5IGNpdmlsIHNlcnZhbnRzIG9ubHkuIEdvdmVybm1lbnQgQWdlbmN5IHdpbGwgaW5zZXJ0IHRoZSB5ZWFyIGFuZCBpdHMgQWdlbmN5IGRlc2lnbmF0aW9uIGFuZCByZW1vdmUgdGhlIGJyYWNrZXRlZCBsYW5ndWFnZS5dIENvcHlyaWdodCAmIzY1NTMzOyB7WUVBUn0gVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IGFzIHJlcHJlc2VudGVkIGJ5IF9fX18gX19fXy4gTm8gY29weXJpZ2h0IGlzIGNsYWltZWQgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgdW5kZXIgVGl0bGUgMTcsIFUuUy5Db2RlLiBBbGwgT3RoZXIgUmlnaHRzIFJlc2VydmVkLgorCitDLiBFYWNoIENvbnRyaWJ1dG9yIG11c3QgY2hhcmFjdGVyaXplIGl0cyBhbHRlcmF0aW9uIG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlIGFzIGEgTW9kaWZpY2F0aW9uIGFuZCBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUgb3JpZ2luYXRvciBvZiBpdHMgTW9kaWZpY2F0aW9uIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3Mgc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBNb2RpZmljYXRpb24uIEluIGZ1bGZpbGxtZW50IG9mIHRoZXNlIHJlcXVpcmVtZW50cywgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgZmlsZSAoZS5nLiwgYSBjaGFuZ2UgbG9nIGZpbGUpIHRoYXQgZGVzY3JpYmVzIHRoZSBhbHRlcmF0aW9ucyBtYWRlIGFuZCB0aGUgZGF0ZSBvZiB0aGUgYWx0ZXJhdGlvbnMsIGlkZW50aWZpZXMgQ29udHJpYnV0b3IgYXMgb3JpZ2luYXRvciBvZiB0aGUgYWx0ZXJhdGlvbnMsIGFuZCBjb25zZW50cyB0byBjaGFyYWN0ZXJpemF0aW9uIG9mIHRoZSBhbHRlcmF0aW9ucyBhcyBhIE1vZGlmaWNhdGlvbiwgZm9yIGV4YW1wbGUsIGJ5IGluY2x1ZGluZyBhIHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBTb2Z0d2FyZSBwcm92aWRlZCBieSBHb3Zlcm5tZW50IEFnZW5jeS4gT25jZSBjb25zZW50IGlzIGdyYW50ZWQsIGl0IG1heSBub3QgdGhlcmVhZnRlciBiZSByZXZva2VkLgorCitELiBBIENvbnRyaWJ1dG9yIG1heSBhZGQgaXRzIG93biBjb3B5cmlnaHQgbm90aWNlIHRvIHRoZSBTdWJqZWN0IFNvZnR3YXJlLiBPbmNlIGEgY29weXJpZ2h0IG5vdGljZSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgYSBSZWNpcGllbnQgbWF5IG5vdCByZW1vdmUgaXQgd2l0aG91dCB0aGUgZXhwcmVzcyBwZXJtaXNzaW9uIG9mIHRoZSBDb250cmlidXRvciB3aG8gYWRkZWQgdGhlIG5vdGljZS4KKworRS4gQSBSZWNpcGllbnQgbWF5IG5vdCBtYWtlIGFueSByZXByZXNlbnRhdGlvbiBpbiB0aGUgU3ViamVjdCBTb2Z0d2FyZSBvciBpbiBhbnkgcHJvbW90aW9uYWwsIGFkdmVydGlzaW5nIG9yIG90aGVyIG1hdGVyaWFsIHRoYXQgbWF5IGJlIGNvbnN0cnVlZCBhcyBhbiBlbmRvcnNlbWVudCBieSBHb3Zlcm5tZW50IEFnZW5jeSBvciBieSBhbnkgcHJpb3IgUmVjaXBpZW50IG9mIGFueSBwcm9kdWN0IG9yIHNlcnZpY2UgcHJvdmlkZWQgYnkgUmVjaXBpZW50LCBvciB0aGF0IG1heSBzZWVrIHRvIG9idGFpbiBjb21tZXJjaWFsIGFkdmFudGFnZSBieSB0aGUgZmFjdCBvZiBHb3Zlcm5tZW50IEFnZW5jeWBzIG9yIGEgcHJpb3IgUmVjaXBpZW50YHMgcGFydGljaXBhdGlvbiBpbiB0aGlzIEFncmVlbWVudC4KKworRi4gSW4gYW4gZWZmb3J0IHRvIHRyYWNrIHVzYWdlIGFuZCBtYWludGFpbiBhY2N1cmF0ZSByZWNvcmRzIG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlLCBlYWNoIFJlY2lwaWVudCwgdXBvbiByZWNlaXB0IG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlLCBpcyByZXF1ZXN0ZWQgdG8gcmVnaXN0ZXIgd2l0aCBHb3Zlcm5tZW50IEFnZW5jeSBieSB2aXNpdGluZyB0aGUgZm9sbG93aW5nIHdlYnNpdGU6IF9fX19fXy4gUmVjaXBpZW50YHMgbmFtZSBhbmQgcGVyc29uYWwgaW5mb3JtYXRpb24gc2hhbGwgYmUgdXNlZCBmb3Igc3RhdGlzdGljYWwgcHVycG9zZXMgb25seS4gT25jZSBhIFJlY2lwaWVudCBtYWtlcyBhIE1vZGlmaWNhdGlvbiBhdmFpbGFibGUsIGl0IGlzIHJlcXVlc3RlZCB0aGF0IHRoZSBSZWNpcGllbnQgaW5mb3JtIEdvdmVybm1lbnQgQWdlbmN5IGF0IHRoZSB3ZWIgc2l0ZSBwcm92aWRlZCBhYm92ZSBob3cgdG8gYWNjZXNzIHRoZSBNb2RpZmljYXRpb24uCisKK1tBbHRlcm5hdGl2ZSBwYXJhZ3JhcGggZm9yIHVzZSB3aGVuIGEgd2ViIHNpdGUgZm9yIHJlbGVhc2UgYW5kIG1vbml0b3Jpbmcgb2Ygc3ViamVjdCBzb2Z0d2FyZSB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgYnkgcmVsZWFzaW5nIEdvdmVybm1lbnQgQWdlbmN5XSBJbiBhbiBlZmZvcnQgdG8gdHJhY2sgdXNhZ2UgYW5kIG1haW50YWluIGFjY3VyYXRlIHJlY29yZHMgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUsIGVhY2ggUmVjaXBpZW50LCB1cG9uIHJlY2VpcHQgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUsIGlzIHJlcXVlc3RlZCB0byBwcm92aWRlIEdvdmVybm1lbnQgQWdlbmN5LCBieSBlLW1haWwgdG8gdGhlIEdvdmVybm1lbnQgQWdlbmN5IFBvaW50IG9mIENvbnRhY3QgbGlzdGVkIGluIGNsYXVzZSA1LkYuLCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOiBfX19fX18uIFJlY2lwaWVudGBzIG5hbWUgYW5kIHBlcnNvbmFsIGluZm9ybWF0aW9uIHNoYWxsIGJlIHVzZWQgZm9yIHN0YXRpc3RpY2FsIHB1cnBvc2VzIG9ubHkuIE9uY2UgYSBSZWNpcGllbnQgbWFrZXMgYSBNb2RpZmljYXRpb24gYXZhaWxhYmxlLCBpdCBpcyByZXF1ZXN0ZWQgdGhhdCB0aGUgUmVjaXBpZW50IGluZm9ybSBHb3Zlcm5tZW50IEFnZW5jeSwgYnkgZS1tYWlsIHRvIHRoZSBHb3Zlcm5tZW50IEFnZW5jeSBQb2ludCBvZiBDb250YWN0IGxpc3RlZCBpbiBjbGF1c2UgNS5GLiwgaG93IHRvIGFjY2VzcyB0aGUgTW9kaWZpY2F0aW9uLgorCitHLiBFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0aGF0IGl0cyBNb2RpZmljYXRpb24gaXMgYmVsaWV2ZWQgdG8gYmUgQ29udHJpYnV0b3JgcyBvcmlnaW5hbCBjcmVhdGlvbiBhbmQgZG9lcyBub3QgdmlvbGF0ZSBhbnkgZXhpc3RpbmcgYWdyZWVtZW50cywgcmVndWxhdGlvbnMsIHN0YXR1dGVzIG9yIHJ1bGVzLCBhbmQgZnVydGhlciB0aGF0IENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgQWdyZWVtZW50LgorCitILiBBIFJlY2lwaWVudCBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBhbmQvb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIG90aGVyIFJlY2lwaWVudHMgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUuIEEgUmVjaXBpZW50IG1heSBkbyBzbywgaG93ZXZlciwgb25seSBvbiBpdHMgb3duIGJlaGFsZiBhbmQgbm90IG9uIGJlaGFsZiBvZiBHb3Zlcm5tZW50IEFnZW5jeSBvciBhbnkgb3RoZXIgUmVjaXBpZW50LiBTdWNoIGEgUmVjaXBpZW50IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBhbmQvb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSB0aGF0IFJlY2lwaWVudCBhbG9uZS4gRnVydGhlciwgc3VjaCBSZWNpcGllbnQgYWdyZWVzIHRvIGluZGVtbmlmeSBHb3Zlcm5tZW50IEFnZW5jeSBhbmQgZXZlcnkgb3RoZXIgUmVjaXBpZW50IGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZW0gYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBhbmQvb3IgbGlhYmlsaXR5IG9mZmVyZWQgYnkgc3VjaCBSZWNpcGllbnQuCisKK0kuIEEgUmVjaXBpZW50IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgU3ViamVjdCBTb2Z0d2FyZSB3aXRoIHNlcGFyYXRlIHNvZnR3YXJlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBhZ3JlZW1lbnQgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggY2FzZSwgdGhlIFJlY2lwaWVudCBtdXN0IG1ha2Ugc3VyZSBTdWJqZWN0IFNvZnR3YXJlLCBvciBwb3J0aW9ucyB0aGVyZW9mLCBpbmNsdWRlZCBpbiB0aGUgTGFyZ2VyIFdvcmsgaXMgc3ViamVjdCB0byB0aGlzIEFncmVlbWVudC4KKworSi4gTm90d2l0aHN0YW5kaW5nIGFueSBwcm92aXNpb25zIGNvbnRhaW5lZCBoZXJlaW4sIFJlY2lwaWVudCBpcyBoZXJlYnkgcHV0IG9uIG5vdGljZSB0aGF0IGV4cG9ydCBvZiBhbnkgZ29vZHMgb3IgdGVjaG5pY2FsIGRhdGEgZnJvbSB0aGUgVW5pdGVkIFN0YXRlcyBtYXkgcmVxdWlyZSBzb21lIGZvcm0gb2YgZXhwb3J0IGxpY2Vuc2UgZnJvbSB0aGUgVS5TLiBHb3Zlcm5tZW50LiBGYWlsdXJlIHRvIG9idGFpbiBuZWNlc3NhcnkgZXhwb3J0IGxpY2Vuc2VzIG1heSByZXN1bHQgaW4gY3JpbWluYWwgbGlhYmlsaXR5IHVuZGVyIFUuUy4gbGF3cy4gR292ZXJubWVudCBBZ2VuY3kgbmVpdGhlciByZXByZXNlbnRzIHRoYXQgYSBsaWNlbnNlIHNoYWxsIG5vdCBiZSByZXF1aXJlZCBub3IgdGhhdCwgaWYgcmVxdWlyZWQsIGl0IHNoYWxsIGJlIGlzc3VlZC4gTm90aGluZyBncmFudGVkIGhlcmVpbiBwcm92aWRlcyBhbnkgc3VjaCBleHBvcnQgbGljZW5zZS4KKworRElTQ0xBSU1FUiBPRiBXQVJSQU5USUVTIEFORCBMSUFCSUxJVElFUzsgV0FJVkVSIEFORCBJTkRFTU5JRklDQVRJT04KK0EuIE5vIFdhcnJhbnR5OiBUSEUgU1VCSkVDVCBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VELCBJTVBMSUVELCBPUiBTVEFUVVRPUlksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBBTlkgV0FSUkFOVFkgVEhBVCBUSEUgU1VCSkVDVCBTT0ZUV0FSRSBXSUxMIENPTkZPUk0gVE8gU1BFQ0lGSUNBVElPTlMsIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgRlJFRURPTSBGUk9NIElORlJJTkdFTUVOVCwgQU5ZIFdBUlJBTlRZIFRIQVQgVEhFIFNVQkpFQ1QgU09GVFdBUkUgV0lMTCBCRSBFUlJPUiBGUkVFLCBPUiBBTlkgV0FSUkFOVFkgVEhBVCBET0NVTUVOVEFUSU9OLCBJRiBQUk9WSURFRCwgV0lMTCBDT05GT1JNIFRPIFRIRSBTVUJKRUNUIFNPRlRXQVJFLiBUSElTIEFHUkVFTUVOVCBET0VTIE5PVCwgSU4gQU5ZIE1BTk5FUiwgQ09OU1RJVFVURSBBTiBFTkRPUlNFTUVOVCBCWSBHT1ZFUk5NRU5UIEFHRU5DWSBPUiBBTlkgUFJJT1IgUkVDSVBJRU5UIE9GIEFOWSBSRVNVTFRTLCBSRVNVTFRJTkcgREVTSUdOUywgSEFSRFdBUkUsIFNPRlRXQVJFIFBST0RVQ1RTIE9SIEFOWSBPVEhFUiBBUFBMSUNBVElPTlMgUkVTVUxUSU5HIEZST00gVVNFIE9GIFRIRSBTVUJKRUNUIFNPRlRXQVJFLiBGVVJUSEVSLCBHT1ZFUk5NRU5UIEFHRU5DWSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgQU5EIExJQUJJTElUSUVTIFJFR0FSRElORyBUSElSRC1QQVJUWSBTT0ZUV0FSRSwgSUYgUFJFU0VOVCBJTiBUSEUgT1JJR0lOQUwgU09GVFdBUkUsIEFORCBESVNUUklCVVRFUyBJVCAiQVMgSVMuIgorCitCLiBXYWl2ZXIgYW5kIEluZGVtbml0eTogUkVDSVBJRU5UIEFHUkVFUyBUTyBXQUlWRSBBTlkgQU5EIEFMTCBDTEFJTVMgQUdBSU5TVCBUSEUgVU5JVEVEIFNUQVRFUyBHT1ZFUk5NRU5ULCBJVFMgQ09OVFJBQ1RPUlMgQU5EIFNVQkNPTlRSQUNUT1JTLCBBUyBXRUxMIEFTIEFOWSBQUklPUiBSRUNJUElFTlQuIElGIFJFQ0lQSUVOVGBTIFVTRSBPRiBUSEUgU1VCSkVDVCBTT0ZUV0FSRSBSRVNVTFRTIElOIEFOWSBMSUFCSUxJVElFUywgREVNQU5EUywgREFNQUdFUywgRVhQRU5TRVMgT1IgTE9TU0VTIEFSSVNJTkcgRlJPTSBTVUNIIFVTRSwgSU5DTFVESU5HIEFOWSBEQU1BR0VTIEZST00gUFJPRFVDVFMgQkFTRUQgT04sIE9SIFJFU1VMVElORyBGUk9NLCBSRUNJUElFTlRgUyBVU0UgT0YgVEhFIFNVQkpFQ1QgU09GVFdBUkUsIFJFQ0lQSUVOVCBTSEFMTCBJTkRFTU5JRlkgQU5EIEhPTEQgSEFSTUxFU1MgVEhFIFVOSVRFRCBTVEFURVMgR09WRVJOTUVOVCwgSVRTIENPTlRSQUNUT1JTIEFORCBTVUJDT05UUkFDVE9SUywgQVMgV0VMTCBBUyBBTlkgUFJJT1IgUkVDSVBJRU5ULCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBMQVcuIFJFQ0lQSUVOVGBTIFNPTEUgUkVNRURZIEZPUiBBTlkgU1VDSCBNQVRURVIgU0hBTEwgQkUgVEhFIElNTUVESUFURSwgVU5JTEFURVJBTCBURVJNSU5BVElPTiBPRiBUSElTIEFHUkVFTUVOVC4KKworR0VORVJBTCBURVJNUworQS4gVGVybWluYXRpb246IFRoaXMgQWdyZWVtZW50IGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgYSBSZWNpcGllbnQgZmFpbHMgdG8gY29tcGx5IHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGFuZCBmYWlscyB0byBjdXJlIHN1Y2ggbm9uY29tcGxpYW5jZSB3aXRoaW4gdGhpcnR5ICgzMCkgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIFVwb24gdGVybWluYXRpb24sIGEgUmVjaXBpZW50IGFncmVlcyB0byBpbW1lZGlhdGVseSBjZWFzZSB1c2UgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZS4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBTdWJqZWN0IFNvZnR3YXJlIHByb3Blcmx5IGdyYW50ZWQgYnkgdGhlIGJyZWFjaGluZyBSZWNpcGllbnQgc2hhbGwgc3Vydml2ZSBhbnkgc3VjaCB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudC4KKworQi4gU2V2ZXJhYmlsaXR5OiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuCisKK0MuIEFwcGxpY2FibGUgTGF3OiBUaGlzIEFncmVlbWVudCBzaGFsbCBiZSBzdWJqZWN0IHRvIFVuaXRlZCBTdGF0ZXMgZmVkZXJhbCBsYXcgb25seSBmb3IgYWxsIHB1cnBvc2VzLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgZGV0ZXJtaW5pbmcgdGhlIHZhbGlkaXR5IG9mIHRoaXMgQWdyZWVtZW50LCB0aGUgbWVhbmluZyBvZiBpdHMgcHJvdmlzaW9ucyBhbmQgdGhlIHJpZ2h0cywgb2JsaWdhdGlvbnMgYW5kIHJlbWVkaWVzIG9mIHRoZSBwYXJ0aWVzLgorCitELiBFbnRpcmUgVW5kZXJzdGFuZGluZzogVGhpcyBBZ3JlZW1lbnQgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSB1bmRlcnN0YW5kaW5nIGFuZCBhZ3JlZW1lbnQgb2YgdGhlIHBhcnRpZXMgcmVsYXRpbmcgdG8gcmVsZWFzZSBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSBhbmQgbWF5IG5vdCBiZSBzdXBlcnNlZGVkLCBtb2RpZmllZCBvciBhbWVuZGVkIGV4Y2VwdCBieSBmdXJ0aGVyIHdyaXR0ZW4gYWdyZWVtZW50IGR1bHkgZXhlY3V0ZWQgYnkgdGhlIHBhcnRpZXMuCisKK0UuIEJpbmRpbmcgQXV0aG9yaXR5OiBCeSBhY2NlcHRpbmcgYW5kIHVzaW5nIHRoZSBTdWJqZWN0IFNvZnR3YXJlIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhIFJlY2lwaWVudCBhZmZpcm1zIGl0cyBhdXRob3JpdHkgdG8gYmluZCB0aGUgUmVjaXBpZW50IHRvIGFsbCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgdGhhdCB0aGF0IFJlY2lwaWVudCBoZXJlYnkgYWdyZWVzIHRvIGFsbCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBoZXJlaW4uCisKK0YuIFBvaW50IG9mIENvbnRhY3Q6IEFueSBSZWNpcGllbnQgY29udGFjdCB3aXRoIEdvdmVybm1lbnQgQWdlbmN5IGlzIHRvIGJlIGRpcmVjdGVkIHRvIHRoZSBkZXNpZ25hdGVkIHJlcHJlc2VudGF0aXZlIGFzIGZvbGxvd3M6IF9fX19fX19fX19fLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05DU0EgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05DU0EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBkZGM5YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTkNTQQpAQCAtMCwwICsxLDM0IEBACisKK1VuaXZlcnNpdHkgb2YgSWxsaW5vaXMvTkNTQSBPcGVuIFNvdXJjZSBMaWNlbnNlCitDb3B5cmlnaHQgKGMpIDxZZWFyPiA8T3duZXIgT3JnYW5pemF0aW9uIE5hbWU+IAorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworRGV2ZWxvcGVkIGJ5OiAgIDxOYW1lIG9mIERldmVsb3BtZW50IEdyb3VwPgorICAgICAgICAgICAgICAgICAgICAgICA8TmFtZSBvZiBJbnN0aXR1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxVUkwgZm9yIERldmVsb3BtZW50IEdyb3VwL0luc3RpdHV0aW9uPgorUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKK2NvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyJTb2Z0d2FyZSIpLCB0byBkZWFsIHdpdGggdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZword2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCitwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMuCitSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycworaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorZGlzdHJpYnV0aW9uLgorTmVpdGhlciB0aGUgbmFtZXMgb2YgPE5hbWUgb2YgRGV2ZWxvcG1lbnQgR3JvdXAsIE5hbWUgb2YKK0luc3RpdHV0aW9uPiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2UKK29yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgord3JpdHRlbiBwZXJtaXNzaW9uLgorVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKK09SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT05UUklCVVRPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUgorQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCitUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBXSVRIIFRIRSBTT0ZUV0FSRS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OR1BMIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OR1BMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOTZlYWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05HUEwKQEAgLTAsMCArMSw0NSBAQAorCisKK05FVEhBQ0sgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCisoQ29weXJpZ2h0IDE5ODkgTS4gU3RlcGhlbnNvbikgCisoQmFzZWQgb24gdGhlIEJJU09OIGdlbmVyYWwgcHVibGljIGxpY2Vuc2UsIGNvcHlyaWdodCAxOTg4IFJpY2hhcmQgTS4gU3RhbGxtYW4pCisKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGxpY2Vuc2UsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4gWW91IGNhbiBhbHNvIHVzZSB0aGlzIHdvcmRpbmcgdG8gbWFrZSB0aGUgdGVybXMgZm9yIG90aGVyIHByb2dyYW1zLgorVGhlIGxpY2Vuc2UgYWdyZWVtZW50cyBvZiBtb3N0IHNvZnR3YXJlIGNvbXBhbmllcyBrZWVwIHlvdSBhdCB0aGUgbWVyY3kgb2YgdGhvc2UgY29tcGFuaWVzLiBCeSBjb250cmFzdCwgb3VyIGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ2l2ZSBldmVyeW9uZSB0aGUgcmlnaHQgdG8gc2hhcmUgTmV0SGFjay4gVG8gbWFrZSBzdXJlIHRoYXQgeW91IGdldCB0aGUgcmlnaHRzIHdlIHdhbnQgeW91IHRvIGhhdmUsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQgYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiBIZW5jZSB0aGlzIGxpY2Vuc2UgYWdyZWVtZW50LgorCitTcGVjaWZpY2FsbHksIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIHJpZ2h0IHRvIGdpdmUgYXdheSBjb3BpZXMgb2YgTmV0SGFjaywgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBlbHNlIGNhbiBnZXQgaXQgaWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgTmV0SGFjayBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldyBmcmVlIHByb2dyYW1zLCBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworVG8gbWFrZSBzdXJlIHRoYXQgZXZlcnlvbmUgaGFzIHN1Y2ggcmlnaHRzLCB3ZSBoYXZlIHRvIGZvcmJpZCB5b3UgdG8gZGVwcml2ZSBhbnlvbmUgZWxzZSBvZiB0aGVzZSByaWdodHMuIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgTmV0SGFjaywgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHlvdSBoYXZlLiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuIEFuZCB5b3UgbXVzdCB0ZWxsIHRoZW0gdGhlaXIgcmlnaHRzLgorCitBbHNvLCBmb3Igb3VyIG93biBwcm90ZWN0aW9uLCB3ZSBtdXN0IG1ha2UgY2VydGFpbiB0aGF0IGV2ZXJ5b25lIGZpbmRzIG91dCB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciBOZXRIYWNrLiBJZiBOZXRIYWNrIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZSB3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3Qgd2hhdCB3ZSBkaXN0cmlidXRlZC4KKworVGhlcmVmb3JlIHdlIChNaWtlIFN0ZXBoZW5zb24gYW5kIG90aGVyIGhvbGRlcnMgb2YgTmV0SGFjayBjb3B5cmlnaHRzKSBtYWtlIHRoZSBmb2xsb3dpbmcgdGVybXMgd2hpY2ggc2F5IHdoYXQgeW91IG11c3QgZG8gdG8gYmUgYWxsb3dlZCB0byBkaXN0cmlidXRlIG9yIGNoYW5nZSBOZXRIYWNrLgorCitDT1BZSU5HIFBPTElDSUVTCisKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgTmV0SGFjayBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3Uga2VlcCBpbnRhY3QgdGhlIG5vdGljZXMgb24gYWxsIGZpbGVzIHRoYXQgcmVmZXIgdG8gY29weXJpZ2h0cywgdG8gdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIE5ldEhhY2sgcHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCBhbG9uZyB3aXRoIHRoZSBwcm9ncmFtLgorWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiBOZXRIYWNrIG9yIGFueSBwb3J0aW9uIG9mIGl0LCBhbmQgY29weSBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgdW5kZXIgdGhlIHRlcm1zIG9mIFBhcmFncmFwaCAxIGFib3ZlIChpbmNsdWRpbmcgZGlzdHJpYnV0aW5nIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQpLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIHRoZSBmb2xsb3dpbmc6CithKSBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZTsgYW5kCisKK2IpIGNhdXNlIHRoZSB3aG9sZSBvZiBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4gd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBhIGRlcml2YXRpdmUgb2YgTmV0SGFjayBvciBhbnkgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgb24gdGVybXMgaWRlbnRpY2FsIHRvIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IChleGNlcHQgdGhhdCB5b3UgbWF5IGNob29zZSB0byBncmFudCBtb3JlIGV4dGVuc2l2ZSB3YXJyYW50eSBwcm90ZWN0aW9uIHRvIHNvbWUgb3IgYWxsIHRoaXJkIHBhcnRpZXMsIGF0IHlvdXIgb3B0aW9uKQorCitjKSBZb3UgbWF5IGNoYXJnZSBhIGRpc3RyaWJ1dGlvbiBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSBOZXRIYWNrIChvciBhIHBvcnRpb24gb3IgZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgUGFyYWdyYXBoIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgUGFyYWdyYXBocyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CithKSBhY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgUGFyYWdyYXBocyAxIGFuZCAyIGFib3ZlOyBvciwKKworYikgYWNjb21wYW55IGl0IHdpdGggZnVsbCBpbmZvcm1hdGlvbiBhcyB0byBob3cgdG8gb2J0YWluIHRoZSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZyb20gYW4gYXBwcm9wcmlhdGUgYXJjaGl2ZSBzaXRlLiAoVGhpcyBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uLikKKworRm9yIHRoZXNlIHB1cnBvc2VzLCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucyBlaXRoZXIgdGhlIGZ1bGwgc291cmNlIGRpc3RyaWJ1dGlvbiBhcyBvcmlnaW5hbGx5IHJlbGVhc2VkIG92ZXIgVXNlbmV0IG9yIHVwZGF0ZWQgY29waWVzIG9mIHRoZSBmaWxlcyBpbiB0aGlzIGRpc3RyaWJ1dGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZS4KKworWW91IG1heSBub3QgY29weSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBvciB0cmFuc2ZlciBOZXRIYWNrIGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUgb3IgdHJhbnNmZXIgTmV0SGFjayBpcyB2b2lkIGFuZCB5b3VyIHJpZ2h0cyB0byB1c2UgdGhlIHByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlIGFncmVlbWVudCBzaGFsbCBiZSBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZWQuIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29tcHV0ZXIgc29mdHdhcmUgcHJvZ3JhbXMgZnJvbSB5b3Ugd2l0aCB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorU3RhdGVkIHBsYWlubHk6IFlvdSBhcmUgcGVybWl0dGVkIHRvIG1vZGlmeSBOZXRIYWNrLCBvciBvdGhlcndpc2UgdXNlIHBhcnRzIG9mIE5ldEhhY2ssIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoIHRoZSBjb25kaXRpb25zIHNwZWNpZmllZCBhYm92ZTsgaW4gcGFydGljdWxhciwgeW91ciBtb2RpZmllZCBOZXRIYWNrIG9yIHByb2dyYW0gY29udGFpbmluZyBwYXJ0cyBvZiBOZXRIYWNrIG11c3QgcmVtYWluIGZyZWVseSBhdmFpbGFibGUgYXMgcHJvdmlkZWQgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gSW4gb3RoZXIgd29yZHMsIGdvIGFoZWFkIGFuZCBzaGFyZSBOZXRIYWNrLCBidXQgZG9uYHQgdHJ5IHRvIHN0b3AgYW55b25lIGVsc2UgZnJvbSBzaGFyaW5nIGl0IGZhcnRoZXIuIAorWyAgSG9tZSAgfCAgVmVyc2lvbiAzLjQuMyAgfCAgQ29udGFjdCBVcyAgXQorCisKKworSG9zdGVkIGJ5OiAgICAgICAKK05ldEhhY2sgaXMgQ29weXJpZ2h0IDE5ODUtMjAwMyBieSBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0gYW5kIE0uIFN0ZXBoZW5zb24uIFNlZSBvdXIgbGljZW5zZSBmb3IgZGV0YWlscy4KK1RoaXMgc2l0ZSBpcyBDb3B5cmlnaHQgMTk5OS0yMDA5IGJ5IEtlbm5ldGggTG9yYmVyLCBLZW5zaW5ndG9uLCBNYXJ5bGFuZC4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OUE9TTC0zLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05QT1NMLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTJhNjYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OUE9TTC0zLjAKQEAgLTAsMCArMSw2MSBAQAorCitOb24tUHJvZml0IE9wZW4gU29mdHdhcmUgTGljZW5zZSAoIk5vbi1Qcm9maXQgT1NMIikgMy4wCisKK1RoaXMgTm9uLVByb2ZpdCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKCJOb24tUHJvZml0IE9TTCIpIHZlcnNpb24gMy4wICh0aGUgIkxpY2Vuc2UiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSAiT3JpZ2luYWwgV29yayIpIHdob3NlIG93bmVyICh0aGUgIkxpY2Vuc29yIikgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIGxpY2Vuc2luZyBub3RpY2UgYWRqYWNlbnQgdG8gdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOgorCitMaWNlbnNlZCB1bmRlciB0aGUgTm9uLVByb2ZpdCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgdmVyc2lvbiAzLjAKKworMSkgR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIExpY2Vuc29yIGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgc3VibGljZW5zYWJsZSBsaWNlbnNlLCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjb3B5cmlnaHQsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKK2EpIHRvIHJlcHJvZHVjZSB0aGUgT3JpZ2luYWwgV29yayBpbiBjb3BpZXMsIGVpdGhlciBhbG9uZSBvciBhcyBwYXJ0IG9mIGEgY29sbGVjdGl2ZSB3b3JrOworCitiKSB0byB0cmFuc2xhdGUsIGFkYXB0LCBhbHRlciwgdHJhbnNmb3JtLCBtb2RpZnksIG9yIGFycmFuZ2UgdGhlIE9yaWdpbmFsIFdvcmssIHRoZXJlYnkgY3JlYXRpbmcgZGVyaXZhdGl2ZSB3b3JrcyAoIkRlcml2YXRpdmUgV29ya3MiKSBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrOworCitjKSB0byBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0byB0aGUgcHVibGljLCB3aXRoIHRoZSBwcm92aXNvIHRoYXQgY29waWVzIG9mIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHNoYWxsIGJlIGxpY2Vuc2VkIHVuZGVyIHRoaXMgTm9uLVByb2ZpdCBPcGVuIFNvZnR3YXJlIExpY2Vuc2Ugb3IgYXMgcHJvdmlkZWQgaW4gc2VjdGlvbiAxNyhkKTsKKworZCkgdG8gcGVyZm9ybSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseTsgYW5kCisKK2UpIHRvIGRpc3BsYXkgdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHkuCisKKzIpIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBMaWNlbnNvciBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHN1YmxpY2Vuc2FibGUgbGljZW5zZSwgdW5kZXIgcGF0ZW50IGNsYWltcyBvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBMaWNlbnNvciB0aGF0IGFyZSBlbWJvZGllZCBpbiB0aGUgT3JpZ2luYWwgV29yayBhcyBmdXJuaXNoZWQgYnkgdGhlIExpY2Vuc29yLCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBwYXRlbnRzLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZCBpbXBvcnQgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MuCisKKzMpIEdyYW50IG9mIFNvdXJjZSBDb2RlIExpY2Vuc2UuIFRoZSB0ZXJtICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCBhbmQgYWxsIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJpbmcgaG93IHRvIG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yay4gTGljZW5zb3IgYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3IgZGlzdHJpYnV0ZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBzYXRpc2Z5IHRoaXMgb2JsaWdhdGlvbiBieSBwbGFjaW5nIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBpbiBhbiBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBwZXJtaXQgaW5leHBlbnNpdmUgYW5kIGNvbnZlbmllbnQgYWNjZXNzIGJ5IFlvdSBmb3IgYXMgbG9uZyBhcyBMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgV29yay4KKworNCkgRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5laXRoZXIgdGhlIG5hbWVzIG9mIExpY2Vuc29yLCBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgdG8gdGhlIE9yaWdpbmFsIFdvcmssIG5vciBhbnkgb2YgdGhlaXIgdHJhZGVtYXJrcyBvciBzZXJ2aWNlIG1hcmtzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgT3JpZ2luYWwgV29yayB3aXRob3V0IGV4cHJlc3MgcHJpb3IgcGVybWlzc2lvbiBvZiB0aGUgTGljZW5zb3IuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbiwgbm90aGluZyBpbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIGFueSBsaWNlbnNlIHRvIExpY2Vuc29yYHMgdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5LiBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgb3IgaW1wb3J0IGVtYm9kaW1lbnRzIG9mIGFueSBwYXRlbnQgY2xhaW1zIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2VkIGNsYWltcyBkZWZpbmVkIGluIFNlY3Rpb24gMi4gTm8gbGljZW5zZSBpcyBncmFudGVkIHRvIHRoZSB0cmFkZW1hcmtzIG9mIExpY2Vuc29yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSBhbnkgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4KKworNSkgRXh0ZXJuYWwgRGVwbG95bWVudC4gVGhlIHRlcm0gIkV4dGVybmFsIERlcGxveW1lbnQiIG1lYW5zIHRoZSB1c2UsIGRpc3RyaWJ1dGlvbiwgb3IgY29tbXVuaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIGluIGFueSB3YXkgc3VjaCB0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgbWF5IGJlIHVzZWQgYnkgYW55b25lIG90aGVyIHRoYW4gWW91LCB3aGV0aGVyIHRob3NlIHdvcmtzIGFyZSBkaXN0cmlidXRlZCBvciBjb21tdW5pY2F0ZWQgdG8gdGhvc2UgcGVyc29ucyBvciBtYWRlIGF2YWlsYWJsZSBhcyBhbiBhcHBsaWNhdGlvbiBpbnRlbmRlZCBmb3IgdXNlIG92ZXIgYSBuZXR3b3JrLiBBcyBhbiBleHByZXNzIGNvbmRpdGlvbiBmb3IgdGhlIGdyYW50cyBvZiBsaWNlbnNlIGhlcmV1bmRlciwgWW91IG11c3QgdHJlYXQgYW55IEV4dGVybmFsIERlcGxveW1lbnQgYnkgWW91IG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrIGFzIGEgZGlzdHJpYnV0aW9uIHVuZGVyIHNlY3Rpb24gMShjKS4KKworNikgQXR0cmlidXRpb24gUmlnaHRzLiBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgb3IgdHJhZGVtYXJrIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmssIGFzIHdlbGwgYXMgYW55IG5vdGljZXMgb2YgbGljZW5zaW5nIGFuZCBhbnkgZGVzY3JpcHRpdmUgdGV4dCBpZGVudGlmaWVkIHRoZXJlaW4gYXMgYW4gIkF0dHJpYnV0aW9uIE5vdGljZS4iIFlvdSBtdXN0IGNhdXNlIHRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlIHRvIGNhcnJ5IGEgcHJvbWluZW50IEF0dHJpYnV0aW9uIE5vdGljZSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBZb3UgaGF2ZSBtb2RpZmllZCB0aGUgT3JpZ2luYWwgV29yay4KKworNykgV2FycmFudHkgb2YgUHJvdmVuYW5jZSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVGhlIE9yaWdpbmFsIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuICJBUyBJUyIgQkFTSVMgYW5kIFdJVEhPVVQgV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBub24taW5mcmluZ2VtZW50LCBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRiBUSEUgT1JJR0lOQUwgV09SSyBJUyBXSVRIIFlPVS4gVGhpcyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIGNvbnN0aXR1dGVzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5zZS4gTm8gbGljZW5zZSB0byB0aGUgT3JpZ2luYWwgV29yayBpcyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZSBleGNlcHQgdW5kZXIgdGhpcyBkaXNjbGFpbWVyLgorCis4KSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgc2hhbGwgdGhlIExpY2Vuc29yIGJlIGxpYWJsZSB0byBhbnlvbmUgZm9yIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciB0aGUgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzLiBUaGlzIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNoYWxsIG5vdCBhcHBseSB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBzdWNoIGxpbWl0YXRpb24uCisKKzkpIEFjY2VwdGFuY2UgYW5kIFRlcm1pbmF0aW9uLiBJZiwgYXQgYW55IHRpbWUsIFlvdSBleHByZXNzbHkgYXNzZW50ZWQgdG8gdGhpcyBMaWNlbnNlLCB0aGF0IGFzc2VudCBpbmRpY2F0ZXMgeW91ciBjbGVhciBhbmQgaXJyZXZvY2FibGUgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgYW5kIGFsbCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuIElmIFlvdSBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBhIERlcml2YXRpdmUgV29yaywgWW91IG11c3QgbWFrZSBhIHJlYXNvbmFibGUgZWZmb3J0IHVuZGVyIHRoZSBjaXJjdW1zdGFuY2VzIHRvIG9idGFpbiB0aGUgZXhwcmVzcyBhc3NlbnQgb2YgcmVjaXBpZW50cyB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBUaGlzIExpY2Vuc2UgY29uZGl0aW9ucyB5b3VyIHJpZ2h0cyB0byB1bmRlcnRha2UgdGhlIGFjdGl2aXRpZXMgbGlzdGVkIGluIFNlY3Rpb24gMSwgaW5jbHVkaW5nIHlvdXIgcmlnaHQgdG8gY3JlYXRlIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yaywgYW5kIGRvaW5nIHNvIHdpdGhvdXQgaG9ub3JpbmcgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgaXMgcHJvaGliaXRlZCBieSBjb3B5cmlnaHQgbGF3IGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gYWZmZWN0IGNvcHlyaWdodCBleGNlcHRpb25zIGFuZCBsaW1pdGF0aW9ucyAoaW5jbHVkaW5nICJmYWlyIHVzZSIgb3IgImZhaXIgZGVhbGluZyIpLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGltbWVkaWF0ZWx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgdXBvbiB5b3VyIGZhaWx1cmUgdG8gaG9ub3IgdGhlIGNvbmRpdGlvbnMgaW4gU2VjdGlvbiAxKGMpLgorCisxMCkgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24uIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIGFzIG9mIHRoZSBkYXRlIFlvdSBjb21tZW5jZSBhbiBhY3Rpb24sIGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSwgYWdhaW5zdCBMaWNlbnNvciBvciBhbnkgbGljZW5zZWUgYWxsZWdpbmcgdGhhdCB0aGUgT3JpZ2luYWwgV29yayBpbmZyaW5nZXMgYSBwYXRlbnQuIFRoaXMgdGVybWluYXRpb24gcHJvdmlzaW9uIHNoYWxsIG5vdCBhcHBseSBmb3IgYW4gYWN0aW9uIGFsbGVnaW5nIHBhdGVudCBpbmZyaW5nZW1lbnQgYnkgY29tYmluYXRpb25zIG9mIHRoZSBPcmlnaW5hbCBXb3JrIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUuCisKKzExKSBKdXJpc2RpY3Rpb24sIFZlbnVlIGFuZCBHb3Zlcm5pbmcgTGF3LiBBbnkgYWN0aW9uIG9yIHN1aXQgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIG1heSBiZSBicm91Z2h0IG9ubHkgaW4gdGhlIGNvdXJ0cyBvZiBhIGp1cmlzZGljdGlvbiB3aGVyZWluIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGluIHdoaWNoIExpY2Vuc29yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5IGJ1c2luZXNzLCBhbmQgdW5kZXIgdGhlIGxhd3Mgb2YgdGhhdCBqdXJpc2RpY3Rpb24gZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlIG9yIGFmdGVyIGl0cyB0ZXJtaW5hdGlvbiBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSByZXF1aXJlbWVudHMgYW5kIHBlbmFsdGllcyBvZiBjb3B5cmlnaHQgb3IgcGF0ZW50IGxhdyBpbiB0aGUgYXBwcm9wcmlhdGUganVyaXNkaWN0aW9uLiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCisxMikgQXR0b3JuZXlzYCBGZWVzLiBJbiBhbnkgYWN0aW9uIHRvIGVuZm9yY2UgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBzZWVraW5nIGRhbWFnZXMgcmVsYXRpbmcgdGhlcmV0bywgdGhlIHByZXZhaWxpbmcgcGFydHkgc2hhbGwgYmUgZW50aXRsZWQgdG8gcmVjb3ZlciBpdHMgY29zdHMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgcmVhc29uYWJsZSBhdHRvcm5leXNgIGZlZXMgYW5kIGNvc3RzIGluY3VycmVkIGluIGNvbm5lY3Rpb24gd2l0aCBzdWNoIGFjdGlvbiwgaW5jbHVkaW5nIGFueSBhcHBlYWwgb2Ygc3VjaCBhY3Rpb24uIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKKzEzKSBNaXNjZWxsYW5lb3VzLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4KKworMTQpIERlZmluaXRpb24gb2YgIllvdSIgaW4gVGhpcyBMaWNlbnNlLiAiWW91IiB0aHJvdWdob3V0IHRoaXMgTGljZW5zZSwgd2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgdGhhdCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB5b3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMTUpIFJpZ2h0IHRvIFVzZS4gWW91IG1heSB1c2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gYWxsIHdheXMgbm90IG90aGVyd2lzZSByZXN0cmljdGVkIG9yIGNvbmRpdGlvbmVkIGJ5IHRoaXMgTGljZW5zZSBvciBieSBsYXcsIGFuZCBMaWNlbnNvciBwcm9taXNlcyBub3QgdG8gaW50ZXJmZXJlIHdpdGggb3IgYmUgcmVzcG9uc2libGUgZm9yIHN1Y2ggdXNlcyBieSBZb3UuCisKKzE2KSBNb2RpZmljYXRpb24gb2YgVGhpcyBMaWNlbnNlLiBUaGlzIExpY2Vuc2UgaXMgQ29weXJpZ2h0ICYjMTY5OyAyMDA1IExhd3JlbmNlIFJvc2VuLiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSwgb3IgY29tbXVuaWNhdGUgdGhpcyBMaWNlbnNlIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBwZXJtaXRzIFlvdSB0byBtb2RpZnkgdGhpcyBMaWNlbnNlIGFzIGFwcGxpZWQgdG8gdGhlIE9yaWdpbmFsIFdvcmsgb3IgdG8gRGVyaXZhdGl2ZSBXb3Jrcy4gSG93ZXZlciwgWW91IG1heSBtb2RpZnkgdGhlIHRleHQgb2YgdGhpcyBMaWNlbnNlIGFuZCBjb3B5LCBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHlvdXIgbW9kaWZpZWQgdmVyc2lvbiAodGhlICJNb2RpZmllZCBMaWNlbnNlIikgYW5kIGFwcGx5IGl0IHRvIG90aGVyIG9yaWdpbmFsIHdvcmtzIG9mIGF1dGhvcnNoaXAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IChpKSBZb3UgbWF5IG5vdCBpbmRpY2F0ZSBpbiBhbnkgd2F5IHRoYXQgeW91ciBNb2RpZmllZCBMaWNlbnNlIGlzIHRoZSAiT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIiBvciAiT1NMIiBhbmQgeW91IG1heSBub3QgdXNlIHRob3NlIG5hbWVzIGluIHRoZSBuYW1lIG9mIHlvdXIgTW9kaWZpZWQgTGljZW5zZTsgKGlpKSBZb3UgbXVzdCByZXBsYWNlIHRoZSBub3RpY2Ugc3BlY2lmaWVkIGluIHRoZSBmaXJzdCBwYXJhZ3JhcGggYWJvdmUgd2l0aCB0aGUgbm90aWNlICJMaWNlbnNlZCB1bmRlciA8aW5zZXJ0IHlvdXIgbGljZW5zZSBuYW1lIGhlcmU+IiBvciB3aXRoIGEgbm90aWNlIG9mIHlvdXIgb3duIHRoYXQgaXMgbm90IGNvbmZ1c2luZ2x5IHNpbWlsYXIgdG8gdGhlIG5vdGljZSBpbiB0aGlzIExpY2Vuc2U7IGFuZCAoaWlpKSBZb3UgbWF5IG5vdCBjbGFpbSB0aGF0IHlvdXIgb3JpZ2luYWwgd29ya3MgYXJlIG9wZW4gc291cmNlIHNvZnR3YXJlIHVubGVzcyB5b3VyIE1vZGlmaWVkIExpY2Vuc2UgaGFzIGJlZW4gYXBwcm92ZWQgYnkgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSAoT1NJKSBhbmQgWW91IGNvbXBseSB3aXRoIGl0cyBsaWNlbnNlIHJldmlldyBhbmQgY2VydGlmaWNhdGlvbiBwcm9jZXNzLgorCisxNykgTm9uLVByb2ZpdCBBbWVuZG1lbnQuIFRoZSBuYW1lIG9mIHRoaXMgYW1lbmRlZCB2ZXJzaW9uIG9mIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKCJPU0wgMy4wIikgaXMgIk5vbi1Qcm9maXQgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIDMuMCIuIFRoZSBvcmlnaW5hbCBPU0wgMy4wIGxpY2Vuc2UgaGFzIGJlZW4gYW1lbmRlZCBhcyBmb2xsb3dzOgorCisoYSkgTGljZW5zb3IgcmVwcmVzZW50cyBhbmQgZGVjbGFyZXMgdGhhdCBpdCBpcyBhIG5vdC1mb3ItcHJvZml0IG9yZ2FuaXphdGlvbiB0aGF0IGRlcml2ZXMgbm8gcmV2ZW51ZSB3aGF0c29ldmVyIGZyb20gdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIG9yIGZyb20gc3VwcG9ydCBvciBzZXJ2aWNlcyByZWxhdGluZyB0aGVyZXRvLgorCisoYikgVGhlIGZpcnN0IHNlbnRlbmNlIG9mIFNlY3Rpb24gNyBbIldhcnJhbnR5IG9mIFByb3ZlbmFuY2UiXSBvZiBPU0wgMy4wIGhhcyBiZWVuIHN0cmlja2VuLiBGb3IgT3JpZ2luYWwgV29ya3MgbGljZW5zZWQgdW5kZXIgdGhpcyBOb24tUHJvZml0IE9TTCAzLjAsIExJQ0VOU09SIE9GRkVSUyBOTyBXQVJSQU5USUVTIFdIQVRTT0VWRVIuCisKKyhjKSBJbiB0aGUgZmlyc3Qgc2VudGVuY2Ugb2YgU2VjdGlvbiA4IFsiTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkiXSBvZiB0aGlzIE5vbi1Qcm9maXQgT1NMIDMuMCwgdGhlIGxpc3Qgb2YgZGFtYWdlcyBmb3Igd2hpY2ggTElBQklMSVRZIElTIExJTUlURUQgbm93IGluY2x1ZGVzICJkaXJlY3QiIGRhbWFnZXMuCisKKyhkKSBUaGUgcHJvdmlzbyBpbiBTZWN0aW9uIDEoYykgb2YgdGhpcyBMaWNlbnNlIG5vdyByZWZlcnMgdG8gdGhpcyAiTm9uLVByb2ZpdCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UiIHJhdGhlciB0aGFuIHRoZSAiT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIi4gWW91IG1heSBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiB1bmRlciB0aGlzIE5vbi1Qcm9maXQgT1NMIDMuMCBsaWNlbnNlIG9ubHkgaWYgWW91IG1ha2UgdGhlIHJlcHJlc2VudGF0aW9uIGFuZCBkZWNsYXJhdGlvbiBpbiBwYXJhZ3JhcGggKGEpIG9mIHRoaXMgU2VjdGlvbiAxNy4gT3RoZXJ3aXNlLCBZb3Ugc2hhbGwgZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2Ygb25seSB1bmRlciB0aGUgT1NMIDMuMCBsaWNlbnNlIGFuZCBZb3Ugc2hhbGwgcHVibGlzaCBjbGVhciBsaWNlbnNpbmcgbm90aWNlcyBzbyBzdGF0aW5nLiBBbHNvIGJ5IHdheSBvZiBjbGFyaWZpY2F0aW9uLCB0aGlzIExpY2Vuc2UgZG9lcyBub3QgYXV0aG9yaXplIFlvdSB0byBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHdvcmtzIHVuZGVyIHRoaXMgTm9uLVByb2ZpdCBPU0wgMy4wIGlmIFlvdSByZWNlaXZlZCB0aGVtIHVuZGVyIHRoZSBvcmlnaW5hbCBPU0wgMy4wIGxpY2Vuc2UuCisKKyhlKSBPcmlnaW5hbCBXb3JrcyBsaWNlbnNlZCB1bmRlciB0aGlzIGxpY2Vuc2Ugc2hhbGwgcmVmZXJlbmNlICJOb24tUHJvZml0IE9TTCAzLjAiIGluIGxpY2Vuc2luZyBub3RpY2VzIHRvIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSB3b3JrcyBsaWNlbnNlZCB1bmRlciB0aGUgb3JpZ2luYWwgT1NMIDMuMCBsaWNlbnNlLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05UUCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTlRQCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNTcyYjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05UUApAQCAtMCwwICsxLDcgQEAKKworTlRQIExpY2Vuc2UgKE5UUCkKKworQ29weXJpZ2h0IChjKSAoQ29weXJpZ2h0SG9sZGVyc05hbWUpIChGcm9tIDQtZGlnaXQteWVhciktKFRvIDQtZGlnaXQteWVhcikKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgKFRyYWRlbWFya2VkTmFtZSkgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIChUcmFkZW1hcmtlZE5hbWUpIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTmF1bWFuIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OYXVtYW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjljZTc4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTmF1bWFuCkBAIC0wLDAgKzEsNTAgQEAKKworTkFVTUVOIFB1YmxpYyBMaWNlbnNlCitUaGlzIHNvZnR3YXJlIGlzIENvcHlyaWdodCAoYykgTkFVTUVOICh0bSkgYW5kIENvbnRyaWJ1dG9ycy4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKK3dpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworY29uZGl0aW9ucyBhcmUgbWV0OgorCisxLiBSZWRpc3RyaWJ1dGlvbnMgaW4gc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKK2Rpc2NsYWltZXIuCisKKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCitwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKzMuIFRoZSBuYW1lIE5BVU1FTiAodG0pIG11c3Qgbm90IGJlIHVzZWQgdG8KK2VuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yCit3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOQVVNRU4uCisKKzQuIFRoZSByaWdodCB0byBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgb3IgdG8gdXNlIGl0IGZvciBhbnkKK3B1cnBvc2UgZG9lcyBub3QgZ2l2ZSB5b3UgdGhlIHJpZ2h0IHRvIHVzZSBTZXJ2aWNlbWFya3MgKHNtKQorb3IgVHJhZGVtYXJrcyAodG0pIG9mIE5BVU1FTi4KKworNS4gSWYgYW55IGZpbGVzIG9yaWdpbmF0aW5nIGZyb20gTkFVTUVOIG9yIENvbnRyaWJ1dG9ycyBhcmUgbW9kaWZpZWQsIHlvdSBtdXN0CitjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZwordGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKK0Rpc2NsYWltZXI6CisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTkFVTUVOICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTRUQKK09SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBOQVVNRU4KK09SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUKK0dPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCitUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRS4KKworVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiBjb250cmlidXRpb25zIG1hZGUgYnkgTkFVTUVOCithbmQgQ29udHJpYnV0b3JzLiBTcGVjaWZpYyBhdHRyaWJ1dGlvbnMgYXJlIGxpc3RlZCBpbiB0aGUKK2FjY29tcGFueWluZyBjcmVkaXRzIGZpbGUuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTm9raWEgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05va2lhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMzc3MTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05va2lhCkBAIC0wLDAgKzEsNDIzIEBACisKK05va2lhIE9wZW4gU291cmNlIExpY2Vuc2UgKE5PS09TCitMaWNlbnNlKSBWZXJzaW9uIDEuMGEKKyAxLiBERUZJTklUSU9OUy4KKworIkFmZmlsaWF0ZXMiIG9mIGEgcGFydHkgc2hhbGwgbWVhbiBhbiBlbnRpdHkKKworYSkgd2hpY2ggaXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBjb250cm9sbGluZyBzdWNoIHBhcnR5OworCitiKSB3aGljaCBpcyB1bmRlciB0aGUgc2FtZSBkaXJlY3Qgb3IgaW5kaXJlY3Qgb3duZXJzaGlwIG9yIGNvbnRyb2wKK2FzIHN1Y2ggcGFydHk7IG9yCisKK2MpIHdoaWNoIGlzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgb3duZWQgb3IgY29udHJvbGxlZCBieSBzdWNoIHBhcnR5LgorCitGb3IgdGhlc2UgcHVycG9zZXMsIGFuIGVudGl0eSBzaGFsbCBiZSB0cmVhdGVkIGFzIGJlaW5nIGNvbnRyb2xsZWQKK2J5IGFub3RoZXIgaWYgdGhhdCBvdGhlciBlbnRpdHkgaGFzIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKK3ZvdGVzIGluIHN1Y2ggZW50aXR5LCBpcyBhYmxlIHRvIGRpcmVjdCBpdHMgYWZmYWlycyBhbmQvb3IgdG8gY29udHJvbCB0aGUKK2NvbXBvc2l0aW9uIG9mIGl0cyBib2FyZCBvZiBkaXJlY3RvcnMgb3IgZXF1aXZhbGVudCBib2R5LgorCisiQ29tbWVyY2lhbCBVc2UiIHNoYWxsIG1lYW4gZGlzdHJpYnV0aW9uIG9yIG90aGVyd2lzZSBtYWtpbmcKK3RoZSBDb3ZlcmVkIFNvZnR3YXJlIGF2YWlsYWJsZSB0byBhIHRoaXJkIHBhcnR5LgorCitgYENvbnRyaWJ1dG9yYGAgc2hhbGwgbWVhbiBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMKK3RvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCitgYENvbnRyaWJ1dG9yIFZlcnNpb25gYCBzaGFsbCBtZWFuIGluIGNhc2Ugb2YgYW55IENvbnRyaWJ1dG9yCit0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYQorQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvciAKK2FuZCBpbiBjYXNlIG9mIE5va2lhIGluIGFkZGl0aW9uIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBpbiBhbnkgZm9ybSwgaW5jbHVkaW5nCit0aGUgZm9ybSBhcyBFeGNldXRhYmxlLgorCitgYENvdmVyZWQgU29mdHdhcmVgYCBzaGFsbCBtZWFuIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBvciBNb2RpZmljYXRpb25zCitvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoCitjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorCitgYEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbWBgIHNoYWxsIG1lYW4gYSBtZWNoYW5pc20KK2dlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYwordHJhbnNmZXIgb2YgZGF0YS4KKworYGBFeGVjdXRhYmxlYGAgc2hhbGwgbWVhbiBDb3ZlcmVkIFNvZnR3YXJlIGluIGFueSBmb3JtIG90aGVyCit0aGFuIFNvdXJjZSBDb2RlLgorCitgYE5va2lhYGAgc2hhbGwgbWVhbiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQgaXRzIEFmZmlsaWF0ZXMuCisKK2BgTGFyZ2VyIFdvcmtgYCBzaGFsbCBtZWFuIGEgd29yaywgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBTb2Z0d2FyZQorb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKK2BgTGljZW5zZWBgIHNoYWxsIG1lYW4gdGhpcyBkb2N1bWVudC4KKworIkxpY2Vuc2FibGUiIHNoYWxsIG1lYW4gaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0KK2V4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkKK2FjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi4KKworYGBNb2RpZmljYXRpb25zYGAgc2hhbGwgbWVhbiBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbQordGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBvciBhbnkgcHJldmlvdXMKK01vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBTb2Z0d2FyZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywKK2EgTW9kaWZpY2F0aW9uIGlzOgorCithKSBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcKK09yaWdpbmFsIFNvZnR3YXJlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKK2IpIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBvcgorcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworYGBPcmlnaW5hbCBTb2Z0d2FyZWBgIHNoYWxsIG1lYW4gdGhlIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyCitzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5CitFeGhpYml0IEEgYXMgT3JpZ2luYWwgU29mdHdhcmUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIKK3RoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIFNvZnR3YXJlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKworIlBhdGVudCBDbGFpbXMiIHNoYWxsIG1lYW4gYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkCitvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kCithcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci4KKworYGBTb3VyY2UgQ29kZWBgIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkCitTb2Z0d2FyZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywKK3BsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sCitjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbAorY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIG9yIGFub3RoZXIgd2VsbCBrbm93biwKK2F2YWlsYWJsZSBDb3ZlcmVkIFNvZnR3YXJlIG9mIHRoZSBDb250cmlidXRvcmBzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlCitjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uCitvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorCisiWW91YGAgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwKK2VudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsCit0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLgorRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91YGAgaW5jbHVkZXMgQWZmaWxpYXRlcyBvZiBzdWNoIGVudGl0eS4KKworMi4gU09VUkNFIENPREUgTElDRU5TRS4KKworMi4xIE5va2lhIEdyYW50LgorCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIE5va2lhIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwKK3JveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbAorcHJvcGVydHkgY2xhaW1zOgorCithKSB1bmRlciBjb3B5cmlnaHRzIExpY2Vuc2FibGUgYnkgTm9raWEgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwKK2Rpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIChvciBwb3J0aW9ucwordGhlcmVvZikgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7CisKK2IpIGFuZCB1bmRlciBQYXRlbnRzIENsYWltcyBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcKK29yIHNlbGxpbmcgb2YgT3JpZ2luYWwgU29mdHdhcmUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwKK2FuZCBvZmZlciBmb3Igc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSAob3IKK3BvcnRpb25zIHRoZXJlb2YpLgorCitjKSBUaGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xKGEpIGFuZCAoYikgYXJlIGVmZmVjdGl2ZQorb24gdGhlIGRhdGUgTm9raWEgZmlyc3QgZGlzdHJpYnV0ZXMgT3JpZ2luYWwgU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UuCisKK2QpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDoKKzEpIGZvciBjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZTsgMikgc2VwYXJhdGUgZnJvbQordGhlIE9yaWdpbmFsIFNvZnR3YXJlOyBvciAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoZSBtb2RpZmljYXRpb24KK29mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZQord2l0aCBvdGhlciBzb2Z0d2FyZSBvciBkZXZpY2VzLgorCisyLjIgQ29udHJpYnV0b3IgR3JhbnQuCisKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IGNsYWltcywgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwKK25vbi1leGNsdXNpdmUgbGljZW5zZQorCithKSB1bmRlciBjb3B5cmlnaHRzIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksCitkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkKK3N1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoCitvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIFNvZnR3YXJlIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7CithbmQKKworYikgdW5kZXIgUGF0ZW50IENsYWltcyBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsCitvciBzZWxsaW5nIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IKK2luIGNvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLAordG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2UKK29mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZAorMikgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yCitWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKS4KKworYykgVGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4yKGEpIGFuZCAyLjIoYikgYXJlIGVmZmVjdGl2ZQorb24gdGhlIGRhdGUgQ29udHJpYnV0b3IgZmlyc3QgbWFrZXMgQ29tbWVyY2lhbCBVc2Ugb2YgdGhlIENvdmVyZWQgU29mdHdhcmUuCisKK2QpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMihiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDoKKzEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247CisyKSBzZXBhcmF0ZSBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6CitpKSB0aGlyZCBwYXJ0eSBtb2RpZmljYXRpb25zIG9mIENvbnRyaWJ1dG9yIFZlcnNpb24gb3IgaWkpIHRoZSBjb21iaW5hdGlvbgorb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzCitwYXJ0IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zCitpbmZyaW5nZWQgYnkgQ292ZXJlZCBTb2Z0d2FyZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdAorQ29udHJpYnV0b3IuCisKKzMuIERJU1RSSUJVVElPTiBPQkxJR0FUSU9OUy4KKworMy4xIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCisKKworVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQKK2J5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuCitUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIFNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyCit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkCit1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5Citjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueQordGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlCit2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91CittYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQKK2luIFNlY3Rpb24gMy41LgorCiszLjIgQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZQorbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlcgorb24gdGhlIHNhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljCitEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUgdmVyc2lvbgorYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwKK211c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0Citpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50Cit2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaAorcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbgorcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQKK2J5IGEgdGhpcmQgcGFydHkuCisKKzMuMyBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBTb2Z0d2FyZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluCithIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBTb2Z0d2FyZQorYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQKK3RoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBTb2Z0d2FyZQorcHJvdmlkZWQgYnkgTm9raWEgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiBOb2tpYSBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLAorYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24KK2luIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZS4KKworMy40ICBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycworCisoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLgorCitJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHlgcyBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBDb250cmlidXRvcgordW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlCitTb3VyY2UgQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkICJMRUdBTGBgIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kCit0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdword2hvbSB0byBjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24KK2lzIG1hZGUgYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgQ29udHJpYnV0b3Igc2hhbGwgcHJvbXB0bHkKK21vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIENvbnRyaWJ1dG9yIG1ha2VzIGF2YWlsYWJsZSB0aGVyZWFmdGVyCithbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cworb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQKK1NvZnR3YXJlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKworKGIpIENvbnRyaWJ1dG9yIEFQSXMuCisKK0lmIENvbnRyaWJ1dG9yYHMgTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZQorYW5kIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeQordG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluCit0aGUgTEVHQUwgZmlsZS4KKworKGMpIFJlcHJlc2VudGF0aW9ucy4KKworQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIFNlY3Rpb24KKzMuNChhKSBhYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcmBzIE1vZGlmaWNhdGlvbnMgYXJlCitDb250cmlidXRvcmBzIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vciBDb250cmlidXRvciBoYXMgc3VmZmljaWVudCByaWdodHMKK3RvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCiszLjUgUmVxdWlyZWQgTm90aWNlcy4KKworWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlCitDb2RlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZQorZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24KKyhzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yCitzdWNoIGEgbm90aWNlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykgWW91IG1heSBhZGQgeW91cgorbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gWW91IG11c3QgYWxzbworZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlIHdoZXJlIFlvdQorZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIG9yIG93bmVyc2hpcCByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBTb2Z0d2FyZS4KK1lvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eQorb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBTb2Z0d2FyZS4KK0hvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIE5va2lhCitvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSBzdWNoIHdhcnJhbnR5LAorc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQKK1lvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IE5va2lhIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eQoraW5jdXJyZWQgYnkgTm9raWEgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwKK2luZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCiszLjYgRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCisKK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIFNvZnR3YXJlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZQorcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgU29mdHdhcmUsCithbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZQorQ292ZXJlZCBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nCithIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uCiszLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZQordmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgCityaWdodHMgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQgU29mdHdhcmUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZQordmVyc2lvbiBvZiBDb3ZlcmVkIFNvZnR3YXJlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIKK2Nob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0CitZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlCitmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcworcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLgorSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdQorbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlCithcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSBOb2tpYSBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUKK3RvIGluZGVtbmlmeSBOb2tpYSBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkKK05va2lhIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLgorCiszLjcgTGFyZ2VyIFdvcmtzLgorCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIFNvZnR3YXJlIHdpdGggb3RoZXIKK3NvZnR3YXJlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIKK1dvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzCitvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgU29mdHdhcmUuCisKKzQuIElOQUJJTElUWSBUTyBDT01QTFkgRFVFIFRPIFNUQVRVVEUgT1IgUkVHVUxBVElPTi4KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgU29mdHdhcmUgZHVlIHRvIHN0YXR1dGUsCitqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zCitvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucworYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMCitmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zCitvZiB0aGUgU291cmNlIENvZGUuCisKK0V4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uCittdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZQordG8gdW5kZXJzdGFuZCBpdC4KKworNS4gQVBQTElDQVRJT04gT0YgVEhJUyBMSUNFTlNFLgorCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIE5va2lhIGhhcyBhdHRhY2hlZCB0aGUgbm90aWNlCitpbiBFeGhpYml0IEEgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBTb2Z0d2FyZS4KKworNi4gVkVSU0lPTlMgT0YgVEhFIExJQ0VOU0UuCisKKworNi4xIE5ldyBWZXJzaW9ucy4KKworTm9raWEgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZQordG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKworNi4yIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCisKK09uY2UgQ292ZXJlZCBTb2Z0d2FyZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24KK29mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQKK3ZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBTb2Z0d2FyZSB1bmRlciB0aGUgdGVybXMKK29mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IE5va2lhLiBObyBvbmUgb3RoZXIKK3RoYW4gTm9raWEgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBTb2Z0d2FyZQorY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCisKK0NPVkVSRUQgU09GVFdBUkUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJU2BgIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQKK0xJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBTT0ZUV0FSRSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwKK0ZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUKK1FVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIFNPRlRXQVJFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZCitDT1ZFUkVEIFNPRlRXQVJFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VIChOT1QgTk9LSUEsIElUUyBMSUNFTlNPUlMKK09SIEFGRklMSUFURVMgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWQorU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GICBXQVJSQU5UWSBDT05TVElUVVRFUworQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgU09GVFdBUkUgSVMgQVVUSE9SSVpFRAorSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCisKKzguIFRFUk1JTkFUSU9OLgorCis4LjEgVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkKK2lmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbgorMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQKK1NvZnR3YXJlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMKK0xpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZAordGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorCis4LjIgSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbQorKGV4Y2x1ZGluZyBkZWNsYXRvcnkganVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBOb2tpYSBvciBhIENvbnRyaWJ1dG9yIChOb2tpYQorb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tIFlvdSBmaWxlIHN1Y2ggYWN0aW9uIGlzIHJlZmVycmVkIHRvIGFzICJQYXJ0aWNpcGFudCIpCithbGxlZ2luZyB0aGF0OgorCithKSBzdWNoIFBhcnRpY2lwYW50YHMgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcworYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHRvIFlvdQordW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlCitmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LCB1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIKK3JlY2VpcHQgb2Ygbm90aWNlIFlvdSBlaXRoZXI6IChpKSBhZ3JlZSBpbiB3cml0aW5nIHRvIHBheSBQYXJ0aWNpcGFudCBhCittdXR1YWxseSBhZ3JlZWFibGUgcmVhc29uYWJsZSByb3lhbHR5IGZvciBZb3VyIHBhc3QgYW5kIGZ1dHVyZSB1c2Ugb2YgTW9kaWZpY2F0aW9ucworbWFkZSBieSBzdWNoIFBhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QKK3RvIHRoZSBDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMKK29mIG5vdGljZSwgYSByZWFzb25hYmxlIHJveWFsdHkgYW5kIHBheW1lbnQgYXJyYW5nZW1lbnQgYXJlIG5vdCBtdXR1YWxseQorYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLAordGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMgorYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgYXQgdGhlIGV4cGlyYXRpb24gb2YgdGhlIDYwIGRheSBub3RpY2UgcGVyaW9kIHNwZWNpZmllZAorYWJvdmUuCisKK2IpIGFueSBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGRldmljZSwgb3RoZXIgdGhhbiBzdWNoIFBhcnRpY2lwYW50YHMKK0NvbnRyaWJ1dG9yIFZlcnNpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4KK2FueSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEoYikgYW5kCisyLjIoYikgYXJlIHJldm9rZWQgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIFlvdSBmaXJzdCBtYWRlLCB1c2VkLCBzb2xkLAorZGlzdHJpYnV0ZWQsIG9yIGhhZCBtYWRlLCBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBQYXJ0aWNpcGFudC4KKworOC4zIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQgYWxsZWdpbmcKK3RoYXQgc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMKK2FueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpCitwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUKK3ZhbHVlIG9mIHRoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yCisyLjIgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55CitwYXltZW50IG9yIGxpY2Vuc2UuCisKKzguNCBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsCitlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2gKK2hhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8KK3Rlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBOT0tJQSwgQU5ZIE9USEVSIENPTlRSSUJVVE9SLAorT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgU09GVFdBUkUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSAorUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwKK09SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLAorREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwKK09SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTAorSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTgorT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWQorUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMKK1NVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04KK09GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBCVVQgTUFZIEFMTE9XIExJQUJJTElUWSBUTyBCRSBMSU1JVEVEOworSU4gU1VDSCBDQVNFUywgQSBQQVJUWWBzLCBJVFMgRU1QTE9ZRUVTLCBMSUNFTlNPUlMgT1IgQUZGSUxJQVRFU2AgTElBQklMSVRZCitTSEFMTCBCRSBMSU1JVEVEIFRPIFUuUy4gJDUwLiBOb3RoaW5nIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgcHJlanVkaWNlCit0aGUgc3RhdHV0b3J5IHJpZ2h0cyBvZiBhbnkgcGFydHkgZGVhbGluZyBhcyBhIGNvbnN1bWVyLgorCisxMC4gTUlTQ0VMTEFORU9VUy4KKworVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyCitoZXJlb2YuIEFsbCByaWdodHMgaW4gdGhlIENvdmVyZWQgU29mdHdhcmUgbm90IGV4cHJlc3NseSBncmFudGVkIHVuZGVyCit0aGlzIExpY2Vuc2UgYXJlIHJlc2VydmVkLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBncmFudCBZb3UgYW55CityaWdodHMgdG8gdXNlIGFueSBvZiB0aGUgdHJhZGVtYXJrcyBvZiBOb2tpYSBvciBhbnkgb2YgaXRzIEFmZmlsaWF0ZXMsCitldmVuIGlmIGFueSBvZiBzdWNoIHRyYWRlbWFya3MgYXJlIGluY2x1ZGVkIGluIGFueSBwYXJ0IG9mIENvdmVyZWQgU29mdHdhcmUKK2FuZC9vciBkb2N1bWVudGF0aW9uIHRvIGl0LgorCitUaGlzIExpY2Vuc2UgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgRmlubGFuZCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdworcHJvdmlzaW9ucy4gQWxsIGRpc3B1dGVzIGFyaXNpbmcgZnJvbSBvciByZWxhdGluZyB0byB0aGlzIEFncmVlbWVudCBzaGFsbAorYmUgc2V0dGxlZCBieSBhIHNpbmdsZSBhcmJpdHJhdG9yIGFwcG9pbnRlZCBieSB0aGUgQ2VudHJhbCBDaGFtYmVyIG9mIENvbW1lcmNlCitvZiBGaW5sYW5kLiBUaGUgYXJiaXRyYXRpb24gcHJvY2VkdXJlIHNoYWxsIHRha2UgcGxhY2UgaW4gSGVsc2lua2ksIEZpbmxhbmQKK2luIHRoZSBFbmdsaXNoIGxhbmd1YWdlLiBJZiBhbnkgcGFydCBvZiB0aGlzIEFncmVlbWVudCBpcyBmb3VuZCB2b2lkIGFuZAordW5lbmZvcmNlYWJsZSwgaXQgd2lsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvZiB0aGUgYmFsYW5jZSBvZiB0aGUgQWdyZWVtZW50LAord2hpY2ggc2hhbGwgcmVtYWluIHZhbGlkIGFuZCBlbmZvcmNlYWJsZSBhY2NvcmRpbmcgdG8gaXRzIHRlcm1zLgorCisxMS4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4KKworQXMgYmV0d2VlbiBOb2tpYSBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcyByZXNwb25zaWJsZSBmb3IKK2NsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uCitvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8gd29yayB3aXRoIE5va2lhIGFuZCBDb250cmlidXRvcnMKK3RvIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluCitpcyBpbnRlbmRlZCBvciBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KKworIAorCitFWEhJQklUIEEKKworVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTk9LT1MgTGljZW5zZSBWZXJzaW9uIDEuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlCitMaWNlbnNlLgorCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCitiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiAgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZQordGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuCisKK1RoZSBPcmlnaW5hbCBTb2Z0d2FyZSBpcworCitfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4KKworQ29weXJpZ2h0ICYjMTY5OyA8eWVhcj4gTm9raWEgYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09BU0lTIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PQVNJUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTNkZjdhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PQVNJUwpAQCAtMCwwICsxLDEzIEBACisgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY0Jvb2sgRFREIGFuZAorICBpdHMgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcworICBoZXJlYnkgZ3JhbnRlZCBpbiBwZXJwZXR1aXR5LCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBhcHBlYXIgaW4gYWxsIGNvcGllcy4gIFRoZSBjb3B5cmlnaHQKKyAgaG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGUgRFREIGZvcgorICBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzZWQgb3IgaW1wbGllZAorICB3YXJyYW50eS4KKworICBJZiB5b3UgbW9kaWZ5IHRoZSBEb2NCb29rIERURCBpbiBhbnkgd2F5LCBleGNlcHQgZm9yIGRlY2xhcmluZyBhbmQKKyAgcmVmZXJlbmNpbmcgYWRkaXRpb25hbCBzZXRzIG9mIGdlbmVyYWwgZW50aXRpZXMgYW5kIGRlY2xhcmluZworICBhZGRpdGlvbmFsIG5vdGF0aW9ucywgbGFiZWwgeW91ciBEVEQgYXMgYSB2YXJpYW50IG9mIERvY0Jvb2suICBTZWUKKyAgdGhlIG1haW50ZW5hbmNlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0NMQy0yLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09DTEMtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzOWUzZjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09DTEMtMi4wCkBAIC0wLDAgKzEsNzggQEAKKworT0NMQyBSZXNlYXJjaCBQdWJsaWMgTGljZW5zZSAyLjAKK1Rlcm1zICZhbXA7IENvbmRpdGlvbnMgT2YgVXNlCitNYXksIDIwMDIKK0NvcHlyaWdodCAmIzE2OTsgMjAwMi4gT0NMQyBPbmxpbmUgQ29tcHV0ZXIgTGlicmFyeSBDZW50ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQTEVBU0UgUkVBRCBUSElTIERPQ1VNRU5UIENBUkVGVUxMWS4gQlkgRE9XTkxPQURJTkcgT1IgVVNJTkcgVEhFIENPREUgQkFTRSBBTkQvT1IgRE9DVU1FTlRBVElPTiBBQ0NPTVBBTllJTkcgVEhJUyBMSUNFTlNFIChUSEUgIkxpY2Vuc2UiKSwgWU9VIEFHUkVFIFRPIFRIRSBGT0xMT1dJTkcgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBMSUNFTlNFLgorCitTZWN0aW9uIDEuIFlvdXIgUmlnaHRzCisKK1N1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGUgT0NMQyBPZmZpY2Ugb2YgUmVzZWFyY2ggKHRoZSAiT3JpZ2luYWwgQ29udHJpYnV0b3IiKSBhbmQgZWFjaCBzdWJzZXF1ZW50IGNvbnRyaWJ1dG9yIChjb2xsZWN0aXZlbHkgd2l0aCB0aGUgT3JpZ2luYWwgQ29udHJpYnV0b3IsIHRoZSAiQ29udHJpYnV0b3JzIikgaGVyZWJ5IGdyYW50IHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgbm8tY2hhcmdlLCB0cmFuc2ZlcmFibGUgbGljZW5zZSB0byBleGVjdXRlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIGFuZCBkaXN0cmlidXRlIChpbnRlcm5hbGx5IGFuZCBleHRlcm5hbGx5KSwgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbmNvbW1lcmNpYWwgcHVycG9zZXMsIHRoZSBvcmlnaW5hbCBjb2RlIGNvbnRyaWJ1dGVkIGJ5IE9yaWdpbmFsIENvbnRyaWJ1dG9yIGFuZCBhbGwgTW9kaWZpY2F0aW9ucyAoY29sbGVjdGl2ZWx5IGNhbGxlZCB0aGUgIlByb2dyYW0iKS4KKworU2VjdGlvbiAyLiBEZWZpbml0aW9ucworCitBICJNb2RpZmljYXRpb24iIHRvIHRoZSBQcm9ncmFtIGlzIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhbnkgZmlsZSBvZiB0aGUgUHJvZ3JhbSBhbmQgYW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIFByb2dyYW0uIElmIHlvdSBtYWtlIGEgTW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGV4dGVybmFsbHkgeW91IGFyZSBhICJDb250cmlidXRvci4iIFRoZSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gbXVzdCBiZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlIGluY2x1ZGluZyB0aG9zZSBpbiBTZWN0aW9uIDMgYmVsb3cuCisKK0EgIkNvbWJpbmVkIFdvcmsiIHJlc3VsdHMgZnJvbSBjb21iaW5pbmcgYW5kIGludGVncmF0aW5nIGFsbCBvciBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSB3aXRoIG90aGVyIGNvZGUuIEEgQ29tYmluZWQgV29yayBtYXkgYmUgdGhvdWdodCBvZiBhcyBoYXZpbmcgbXVsdGlwbGUgcGFyZW50cyBvciBiZWluZyByZXN1bHQgb2YgbXVsdGlwbGUgbGluZXMgb2YgY29kZSBkZXZlbG9wbWVudC4KKworU2VjdGlvbiAzLiBEaXN0cmlidXRpb24gTGljZW5zaW5nIFRlcm1zCisKK0EuIEdlbmVyYWwgUmVxdWlyZW1lbnRzCitFeGNlcHQgYXMgbmVjZXNzYXJ5IHRvIHJlY29nbml6ZSB0aGlyZC1wYXJ0eSByaWdodHMgb3IgdGhpcmQtcGFydHkgcmVzdHJpY3Rpb24gKHNlZSBiZWxvdyksIGEgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGFueSBvZiB0aGUgZm9ybXMgbGlzdGVkIGJlbG93IG11c3Qgbm90IHB1dCBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudCYjODIxNztzIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCisKK0FzIGEgQ29udHJpYnV0b3IsIHlvdSByZXByZXNlbnQgdGhhdCB5b3VyIE1vZGlmaWNhdGlvbihzKSBhcmUgeW91ciBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQsIHRvIHRoZSBiZXN0IG9mIHlvdXIga25vd2xlZGdlLCBubyB0aGlyZCBwYXJ0eSBoYXMgYW55IGNsYWltIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMpIHJlbGF0aW5nIHRvIHlvdXIgTW9kaWZpY2F0aW9uKHMpLiBZb3UgcmVwcmVzZW50IHRoYXQgZWFjaCBvZiB5b3VyIE1vZGlmaWNhdGlvbnMgaW5jbHVkZXMgY29tcGxldGUgZGV0YWlscyBvZiBhbnkgdGhpcmQtcGFydHkgcmlnaHQgb3Igb3RoZXIgdGhpcmQtcGFydHkgcmVzdHJpY3Rpb24gYXNzb2NpYXRlZCB3aXRoIGFueSBwYXJ0IG9mIHlvdXIgTW9kaWZpY2F0aW9uIChpbmNsdWRpbmcgYSBjb3B5IG9mIGFueSBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50KS4KKworVGhlIFByb2dyYW0gbXVzdCBiZSBkaXN0cmlidXRlZCB3aXRob3V0IGNoYXJnZSBiZXlvbmQgdGhlIGNvc3RzIG9mIHBoeXNpY2FsbHkgdHJhbnNmZXJyaW5nIHRoZSBmaWxlcyB0byB0aGUgcmVjaXBpZW50LgorCitUaGlzIFdhcnJhbnR5IERpc2NsYWltZXIvTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgbXVzdCBiZSBwcm9taW5lbnRseSBkaXNwbGF5ZWQgd2l0aCBldmVyeSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYW55IGZvcm06CisKK1lPVSBBR1JFRSBUSEFUIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5EIChFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEKS4gQUNDT1JESU5HTFksIE9DTEMgTUFLRVMgTk8gV0FSUkFOVElFUywgUkVQUkVTRU5UQVRJT05TIE9SIEdVQVJBTlRFRVMsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIEFORCBESVNDTEFJTVMgQUxMIFNVQ0ggV0FSUkFOVElFUywgUkVQUkVTRU5UQVRJT05TIE9SIEdVQVJBTlRFRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQVMgVE86IChBKSBUSEUgRlVOQ1RJT05BTElUWSBPUiBOT05JTkZSSU5HRU1FTlQgT0YgUFJPR1JBTSwgQU5ZIE1PRElGSUNBVElPTiwgQSBDT01CSU5FRCBXT1JLIE9SIEFOIEFHR1JFR0FURSBXT1JLOyBPUiAoQikgVEhFIFJFU1VMVFMgT0YgQU5ZIFBST0pFQ1QgVU5ERVJUQUtFTiBVU0lORyBUSEUgUFJPR1JBTSwgQU5ZIE1PRElGSUNBVElPTiwgQSBDT01CSU5FRCBXT1JLIE9SIEFOIEFHR1JFR0FURSBXT1JLLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBPUiBBTlkgT1RIRVIgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhFIFBST0dSQU0sIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBZT1UgSEVSRUJZIFdBSVZFIEFOWSBDTEFJTVMgRk9SIERBTUFHRVMgT0YgQU5ZIEtJTkQgQUdBSU5TVCBDT05UUklCVVRPUlMgV0hJQ0ggTUFZIFJFU1VMVCBGUk9NIFlPVVIgVVNFIE9GIFRIRSBQUk9HUkFNLgorCitCLiBSZXF1aXJlbWVudHMgZm9yIGEgRGlzdHJpYnV0aW9uIG9mIE1vZGlmaWFibGUgQ29kZQorSWYgeW91IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaW4gYSBmb3JtIHRvIHdoaWNoIHRoZSByZWNpcGllbnQgY2FuIG1ha2UgTW9kaWZpY2F0aW9ucyAoZS5nLiBzb3VyY2UgY29kZSksIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UgYXBwbHkgdG8gdXNlIGJ5IHJlY2lwaWVudC4gSW4gYWRkaXRpb24sIGVhY2ggc291cmNlIGFuZCBkYXRhIGZpbGUgb2YgdGhlIFByb2dyYW0gYW5kIGFueSBNb2RpZmljYXRpb24geW91IGRpc3RyaWJ1dGUgbXVzdCBjb250YWluIHRoZSBmb2xsb3dpbmcgbm90aWNlOgorCisiQ29weXJpZ2h0IChjKSAyMDAwLSAoaW5zZXJ0IHRoZW4gY3VycmVudCB5ZWFyKSBPQ0xDIE9ubGluZSBDb21wdXRlciBMaWJyYXJ5IENlbnRlciwgSW5jLiBhbmQgb3RoZXIgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlLCBhcyB1cGRhdGVkIGZyb20gdGltZSB0byB0aW1lIGJ5IHRoZSBPQ0xDIE9mZmljZSBvZiBSZXNlYXJjaCwgYXJlIHN1YmplY3QgdG8gT0NMQyBSZXNlYXJjaCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjdXJyZW50IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3B1cmwub2NsYy5vcmcvb2NsYy9yZXNlYXJjaC9PUlBMLy4gU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55IGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiBPQ0xDIFJlc2VhcmNoLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBPQ0xDIFJlc2VhcmNoLCBwbGVhc2Ugc2VlIGh0dHA6Ly93d3cub2NsYy5vcmcvcmVzZWFyY2gvLiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fX19fX19fX18uIFBvcnRpb25zIGNyZWF0ZWQgYnkgX19fX19fX19fX19fX19fX19fX19fXyBhcmUgQ29weXJpZ2h0IChDKSBfX19fXyBfX19fX19fX19fX19fX19fX19fX19fXy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLiIKKworQy4gUmVxdWlyZW1lbnRzIGZvciBhIERpc3RyaWJ1dGlvbiBvZiBOb24tbW9kaWZpYWJsZSBDb2RlCitJZiB5b3UgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpbiBhIGZvcm0gdG8gd2hpY2ggdGhlIHJlY2lwaWVudCBjYW5ub3QgbWFrZSBNb2RpZmljYXRpb25zIChlLmcuIG9iamVjdCBjb2RlKSwgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSBhcHBseSB0byB1c2UgYnkgcmVjaXBpZW50IGFuZCB5b3UgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50IGluIGFwcHJvcHJpYXRlIGFuZCBjb25zcGljdW91cyBsb2NhdGlvbnM6CisKKyJDb3B5cmlnaHQgKGMpIDIwMDAtIChpbnNlcnQgdGhlbiBjdXJyZW50IHllYXIpIE9DTEMgT25saW5lIENvbXB1dGVyIExpYnJhcnkgQ2VudGVyLCBJbmMuIGFuZCBvdGhlciBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIgorCitJbiBhZGRpdGlvbiwgdGhlIHNvdXJjZSBjb2RlIG11c3QgYmUgaW5jbHVkZWQgd2l0aCB0aGUgb2JqZWN0IGNvZGUgZGlzdHJpYnV0aW9uIG9yIHRoZSBkaXN0cmlidXRvciBtdXN0IHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIHRvIHRoZSByZWNpcGllbnQgdXBvbiByZXF1ZXN0LgorCitELiBSZXF1aXJlbWVudHMgZm9yIGEgQ29tYmluZWQgV29yayBEaXN0cmlidXRpb24KK0Rpc3RyaWJ1dGlvbnMgb2YgQ29tYmluZWQgV29ya3MgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSBhbmQgbXVzdCBiZSBtYWRlIGF0IG5vIGNoYXJnZSB0byB0aGUgcmVjaXBpZW50IGJleW9uZCB0aGUgY29zdHMgb2YgcGh5c2ljYWxseSB0cmFuc2ZlcnJpbmcgdGhlIGZpbGVzIHRvIHJlY2lwaWVudC4KKworQSBDb21iaW5lZCBXb3JrIG1heSBiZSBkaXN0cmlidXRlZCBhcyBlaXRoZXIgbW9kaWZpYWJsZSBvciBub24tbW9kaWZpYWJsZSBjb2RlLiBUaGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy5CIG9yIDMuQyBhYm92ZSAoYXMgYXBwcm9wcmlhdGUpIGFwcGx5IHRvIHN1Y2ggZGlzdHJpYnV0aW9ucy4KKworQW4gIkFnZ3JlZ2F0ZSBXb3JrIiBpcyB3aGVuIHRoZSBQcm9ncmFtIGV4aXN0cywgd2l0aG91dCBpbnRlZ3JhdGlvbiwgd2l0aCBvdGhlciBwcm9ncmFtcyBvbiBhIHN0b3JhZ2UgbWVkaXVtLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgYXBwbHkgdG8gcG9ydGlvbnMgb2YgYW4gQWdncmVnYXRlIFdvcmsgd2hpY2ggYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoZSBkZWZpbml0aW9uIG9mICJQcm9ncmFtIiBwcm92aWRlZCBpbiB0aGlzIExpY2Vuc2UuIFlvdSBhcmUgbm90IGZvcmJpZGRlbiBmcm9tIHNlbGxpbmcgYW4gQWdncmVnYXRlIFdvcmsuIEhvd2V2ZXIsIHRoZSBQcm9ncmFtIGNvbnRhaW5lZCBpbiBhbiBBZ2dyZWdhdGUgV29yayBpcyBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gQWxzbywgc2hvdWxkIHRoZSBQcm9ncmFtIGJlIGV4dHJhY3RlZCBmcm9tIGFuIEFnZ3JlZ2F0ZSBXb3JrLCB0aGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgdXNlIG9mIHRoZSBQcm9ncmFtIGFwYXJ0IGZyb20gdGhlIEFnZ3JlZ2F0ZSBXb3JrLgorCitTZWN0aW9uIDQuIExpY2Vuc2UgR3JhbnQKKworRm9yIHB1cnBvc2VzIG9mIHBlcm1pdHRpbmcgdXNlIG9mIHlvdXIgTW9kaWZpY2F0aW9ucyBieSBPQ0xDIGFuZCBvdGhlciBsaWNlbnNlZXMgaGVyZXVuZGVyLCB5b3UgaGVyZWJ5IGdyYW50IHRvIE9DTEMgYW5kIHN1Y2ggb3RoZXIgbGljZW5zZWVzIHRoZSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgdHJhbnNmZXJhYmxlLCBzdWJsaWNlbnNlYWJsZSBsaWNlbnNlIHRvIGV4ZWN1dGUsIGNvcHksIGFsdGVyLCBkZWxldGUsIG1vZGlmeSwgYWRhcHQsIGNoYW5nZSwgcmV2aXNlLCBlbmhhbmNlLCBkZXZlbG9wLCBwdWJsaWNseSBkaXNwbGF5LCBkaXN0cmlidXRlIChpbnRlcm5hbGx5IGFuZCBleHRlcm5hbGx5KSBhbmQvb3IgY3JlYXRlIGRlcml2YXRpdmUgd29ya3MgYmFzZWQgb24geW91ciBNb2RpZmljYXRpb25zIChhbmQgZGVyaXZhdGl2ZSB3b3JrcyB0aGVyZW9mKSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlc2UgVGVybXMuIFRoaXMgU2VjdGlvbiA0IHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIGZvciBhbnkgcmVhc29uLgorCitTZWN0aW9uIDUuIFRlcm1pbmF0aW9uIG9mIFJpZ2h0cworCitUaGlzIG5vbi1leGNsdXNpdmUgbGljZW5zZSAod2l0aCByZXNwZWN0IHRvIHRoZSBncmFudCBmcm9tIGEgcGFydGljdWxhciBDb250cmlidXRvcikgYXV0b21hdGljYWxseSB0ZXJtaW5hdGVzIGZvciBhbnkgZW50aXR5IHRoYXQgaW5pdGlhdGVzIGxlZ2FsIGFjdGlvbiBmb3IgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudCAod2l0aCByZXNwZWN0IHRvIHRoZSBQcm9ncmFtKSBhZ2FpbnN0IHN1Y2ggQ29udHJpYnV0b3IgYXMgb2YgdGhlIGluaXRpYXRpb24gb2Ygc3VjaCBhY3Rpb24uCisKK0lmIHlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRoaXMgTGljZW5zZSwgeW91ciByaWdodHMgKGJ1dCBub3QgeW91ciBvYmxpZ2F0aW9ucykgdW5kZXIgdGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVubGVzcyB5b3UgY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gdGhpcnR5ICgzMCkgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgbm9uY29tcGxpYW5jZS4gQWxsIHN1YmxpY2Vuc2VzIGdyYW50ZWQgYnkgeW91IHdoaWNoIHByZWV4aXN0IHN1Y2ggdGVybWluYXRpb24gYW5kIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgc3VjaCB0ZXJtaW5hdGlvbi4KKworU2VjdGlvbiA2LiBPdGhlciBUZXJtcworCitFeGNlcHQgZm9yIHRoZSBjb3B5cmlnaHQgbm90aWNlcyByZXF1aXJlZCBhYm92ZSwgeW91IG1heSBub3QgdXNlIGFueSB0cmFkZW1hcmsgb2YgYW55IG9mIHRoZSBDb250cmlidXRvcnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIHRoZSByZWxldmFudCBDb250cmlidXRvci4gWW91IGFncmVlIG5vdCB0byByZW1vdmUsIGFsdGVyIG9yIG9ic2N1cmUgYW55IGNvcHlyaWdodCBvciBvdGhlciBwcm9wcmlldGFyeSByaWdodHMgbm90aWNlIGNvbnRhaW5lZCBpbiB0aGUgUHJvZ3JhbS4KKworQWxsIHRyYW5zZmVycyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcGFydCB0aGVyZW9mIHNoYWxsIGJlIG1hZGUgaW4gY29tcGxpYW5jZSB3aXRoIFUuUy4gaW1wb3J0L2V4cG9ydCByZWd1bGF0aW9ucyBvciBvdGhlciByZXN0cmljdGlvbnMgb2YgdGhlIFUuUy4gRGVwYXJ0bWVudCBvZiBDb21tZXJjZSwgYXMgd2VsbCBhcyBvdGhlciBzaW1pbGFyIHRyYWRlIG9yIGNvbW1lcmNlIHJlc3RyaWN0aW9ucyB3aGljaCBtaWdodCBhcHBseS4KKworQW55IHBhdGVudCBvYnRhaW5lZCBieSBhbnkgcGFydHkgY292ZXJpbmcgdGhlIFByb2dyYW0gb3IgYW55IHBhcnQgdGhlcmVvZiBtdXN0IGluY2x1ZGUgYSBwcm92aXNpb24gcHJvdmlkaW5nIGZvciB0aGUgZnJlZSwgcGVycGV0dWFsIGFuZCB1bnJlc3RyaWN0ZWQgY29tbWVyY2lhbCBhbmQgbm9uY29tbWVyY2lhbCB1c2UgYnkgYW55IHRoaXJkIHBhcnR5LgorCitJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIHNldHRsZW1lbnQgcmVsYXRpbmcgdG8gaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudCBvciBhbnkgb3RoZXIgY2F1c2Ugb2YgYWN0aW9uLCBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBzdWNoIGNvbmRpdGlvbnMgZG8gbm90IGV4Y3VzZSB5b3UgZnJvbSBjb21wbGlhbmNlIHdpdGggdGhpcyBMaWNlbnNlLiBJZiB5b3UgY2Fubm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gc28gYXMgdG8gc2ltdWx0YW5lb3VzbHkgc2F0aXNmeSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgc3VjaCBvdGhlciBjb25kaXRpb25zLCB5b3UgbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50IGxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkgYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB5b3UgY291bGQgbm90IHNhdGlzZnkgYm90aCB0aGUgcGF0ZW50IGxpY2Vuc2UgYW5kIHRoaXMgTGljZW5zZSwgYW5kIHlvdSB3b3VsZCBiZSByZXF1aXJlZCB0byByZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiB5b3UgbGVhcm4gb2YgYSB0aGlyZCBwYXJ0eSBjbGFpbSBvciBvdGhlciByZXN0cmljdGlvbiByZWxhdGluZyB0byBhIFByb2dyYW0geW91IGhhdmUgYWxyZWFkeSBkaXN0cmlidXRlZCB5b3Ugc2hhbGwgcHJvbXB0bHkgcmVkbyB5b3VyIFByb2dyYW0gdG8gYWRkcmVzcyB0aGUgaXNzdWUgYW5kIHRha2UgYWxsIHJlYXNvbmFibGUgc3RlcHMgdG8gaW5mb3JtIHRob3NlIHdobyBtYXkgaGF2ZSByZWNlaXZlZCB0aGUgUHJvZ3JhbSBhdCBpc3N1ZS4gQW4gZXhhbXBsZSBvZiBhbiBhcHByb3ByaWF0ZSByZWFzb25hYmxlIHN0ZXAgdG8gaW5mb3JtIHdvdWxkIGJlIHBvc3RpbmcgYW4gYW5ub3VuY2VtZW50IG9uIGFuIGFwcHJvcHJpYXRlIHdlYiBidWxsZXRpbiBib2FyZC4KKworVGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBMaWNlbnNlIGFyZSBkZWVtZWQgdG8gYmUgc2V2ZXJhYmxlLCBhbmQgdGhlIGludmFsaWRpdHkgb3IgdW5lbmZvcmNlYWJpbGl0eSBvZiBhbnkgcHJvdmlzaW9uIHNoYWxsIG5vdCBhZmZlY3Qgb3IgaW1wYWlyIHRoZSByZW1haW5pbmcgcHJvdmlzaW9ucyB3aGljaCBzaGFsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuIEluIHN1YnN0aXR1dGlvbiBmb3IgYW55IHByb3Zpc2lvbiBoZWxkIHVubGF3ZnVsLCB0aGVyZSBzaGFsbCBiZSBzdWJzdGl0dXRlZCBhIHByb3Zpc2lvbiBvZiBzaW1pbGFyIGltcG9ydCByZWZsZWN0aW5nIHRoZSBvcmlnaW5hbCBpbnRlbnQgb2YgdGhlIHBhcnRpZXMgaGVyZXRvIHRvIHRoZSBleHRlbnQgcGVybWlzc2libGUgdW5kZXIgbGF3LgorCitUaGUgT3JpZ2luYWwgQ29udHJpYnV0b3IgZnJvbSB0aW1lIHRvIHRpbWUgbWF5IGNoYW5nZSB0aGlzIExpY2Vuc2UsIGFuZCB0aGUgYW1lbmRlZCBsaWNlbnNlIHdpbGwgYXBwbHkgdG8gYWxsIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBkb3dubG9hZGVkIGFmdGVyIHRoZSBuZXcgbGljZW5zZSBpcyBwb3N0ZWQuIFRoaXMgTGljZW5zZSBncmFudHMgb25seSB0aGUgcmlnaHRzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluIGFuZCBwcm92aWRlcyB5b3Ugd2l0aCBubyBpbXBsaWVkIHJpZ2h0cyBvciBsaWNlbnNlcyB0byB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvci4KKworVGhpcyBMaWNlbnNlIGlzIHRoZSBjb21wbGV0ZSBhbmQgZXhjbHVzaXZlIHN0YXRlbWVudCBvZiB0aGUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgY29uY2VybmluZyB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mIGFuZCBtYXkgbm90IGJlIGFtZW5kZWQgZXhjZXB0IGJ5IHRoZSB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgcGFydGllcy4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IGFuZCBjb25zdHJ1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBPaGlvIGFuZCB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCB3aXRob3V0IHJlZ2FyZCB0byBwcmluY2lwbGVzIG9mIGNvbmZsaWN0cyBvZiBsYXcuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0RiTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09EYkwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZjE0NGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09EYkwtMS4wCkBAIC0wLDAgKzEsNTQzIEBACisKKyMjIE9EQyBPcGVuIERhdGFiYXNlIExpY2Vuc2UgKE9EYkwpCisKKyMjIyBQcmVhbWJsZQorCitUaGUgT3BlbiBEYXRhYmFzZSBMaWNlbnNlIChPRGJMKSBpcyBhIGxpY2Vuc2UgYWdyZWVtZW50IGludGVuZGVkIHRvCithbGxvdyB1c2VycyB0byBmcmVlbHkgc2hhcmUsIG1vZGlmeSwgYW5kIHVzZSB0aGlzIERhdGFiYXNlIHdoaWxlCittYWludGFpbmluZyB0aGlzIHNhbWUgZnJlZWRvbSBmb3Igb3RoZXJzLiBNYW55IGRhdGFiYXNlcyBhcmUgY292ZXJlZCBieQorY29weXJpZ2h0LCBhbmQgdGhlcmVmb3JlIHRoaXMgZG9jdW1lbnQgbGljZW5zZXMgdGhlc2UgcmlnaHRzLiBTb21lCitqdXJpc2RpY3Rpb25zLCBtYWlubHkgaW4gdGhlIEV1cm9wZWFuIFVuaW9uLCBoYXZlIHNwZWNpZmljIHJpZ2h0cyB0aGF0Citjb3ZlciBkYXRhYmFzZXMsIGFuZCBzbyB0aGUgT0RiTCBhZGRyZXNzZXMgdGhlc2UgcmlnaHRzLCB0b28uIEZpbmFsbHksCit0aGUgT0RiTCBpcyBhbHNvIGFuIGFncmVlbWVudCBpbiBjb250cmFjdCBmb3IgdXNlcnMgb2YgdGhpcyBEYXRhYmFzZSB0bworYWN0IGluIGNlcnRhaW4gd2F5cyBpbiByZXR1cm4gZm9yIGFjY2Vzc2luZyB0aGlzIERhdGFiYXNlLgorCitEYXRhYmFzZXMgY2FuIGNvbnRhaW4gYSB3aWRlIHZhcmlldHkgb2YgdHlwZXMgb2YgY29udGVudCAoaW1hZ2VzLAorYXVkaW92aXN1YWwgbWF0ZXJpYWwsIGFuZCBzb3VuZHMgYWxsIGluIHRoZSBzYW1lIGRhdGFiYXNlLCBmb3IgZXhhbXBsZSksCithbmQgc28gdGhlIE9EYkwgb25seSBnb3Zlcm5zIHRoZSByaWdodHMgb3ZlciB0aGUgRGF0YWJhc2UsIGFuZCBub3QgdGhlCitjb250ZW50cyBvZiB0aGUgRGF0YWJhc2UgaW5kaXZpZHVhbGx5LiBMaWNlbnNvcnMgc2hvdWxkIHVzZSB0aGUgT0RiTAordG9nZXRoZXIgd2l0aCBhbm90aGVyIGxpY2Vuc2UgZm9yIHRoZSBjb250ZW50cywgaWYgdGhlIGNvbnRlbnRzIGhhdmUgYQorc2luZ2xlIHNldCBvZiByaWdodHMgdGhhdCB1bmlmb3JtbHkgY292ZXJzIGFsbCBvZiB0aGUgY29udGVudHMuIElmIHRoZQorY29udGVudHMgaGF2ZSBtdWx0aXBsZSBzZXRzIG9mIGRpZmZlcmVudCByaWdodHMsIExpY2Vuc29ycyBzaG91bGQKK2Rlc2NyaWJlIHdoYXQgcmlnaHRzIGdvdmVybiB3aGF0IGNvbnRlbnRzIHRvZ2V0aGVyIGluIHRoZSBpbmRpdmlkdWFsCityZWNvcmQgb3IgaW4gc29tZSBvdGhlciB3YXkgdGhhdCBjbGFyaWZpZXMgd2hhdCByaWdodHMgYXBwbHkuIAorCitTb21ldGltZXMgdGhlIGNvbnRlbnRzIG9mIGEgZGF0YWJhc2UsIG9yIHRoZSBkYXRhYmFzZSBpdHNlbGYsIGNhbiBiZQorY292ZXJlZCBieSBvdGhlciByaWdodHMgbm90IGFkZHJlc3NlZCBoZXJlIChzdWNoIGFzIHByaXZhdGUgY29udHJhY3RzLAordHJhZGUgbWFyayBvdmVyIHRoZSBuYW1lLCBvciBwcml2YWN5IHJpZ2h0cyAvIGRhdGEgcHJvdGVjdGlvbiByaWdodHMKK292ZXIgaW5mb3JtYXRpb24gaW4gdGhlIGNvbnRlbnRzKSwgYW5kIHNvIHlvdSBhcmUgYWR2aXNlZCB0aGF0IHlvdSBtYXkKK2hhdmUgdG8gY29uc3VsdCBvdGhlciBkb2N1bWVudHMgb3IgY2xlYXIgb3RoZXIgcmlnaHRzIGJlZm9yZSBkb2luZworYWN0aXZpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuCisKKy0tLS0tLQorCitUaGUgTGljZW5zb3IgKGFzIGRlZmluZWQgYmVsb3cpIAorCithbmQgCisKK1lvdSAoYXMgZGVmaW5lZCBiZWxvdykgCisKK2FncmVlIGFzIGZvbGxvd3M6IAorCisjIyMgMS4wIERlZmluaXRpb25zIG9mIENhcGl0YWxpc2VkIFdvcmRzCisKKyJDb2xsZWN0aXZlIERhdGFiYXNlIiAmIzgyMTE7IE1lYW5zIHRoaXMgRGF0YWJhc2UgaW4gdW5tb2RpZmllZCBmb3JtIGFzIHBhcnQKK29mIGEgY29sbGVjdGlvbiBvZiBpbmRlcGVuZGVudCBkYXRhYmFzZXMgaW4gdGhlbXNlbHZlcyB0aGF0IHRvZ2V0aGVyIGFyZQorYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUKK0RhdGFiYXNlIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIERhdGFiYXNlLgorCisiQ29udmV5IiAmIzgyMTE7IEFzIGEgdmVyYiwgbWVhbnMgVXNpbmcgdGhlIERhdGFiYXNlLCBhIERlcml2YXRpdmUgRGF0YWJhc2UsCitvciB0aGUgRGF0YWJhc2UgYXMgcGFydCBvZiBhIENvbGxlY3RpdmUgRGF0YWJhc2UgaW4gYW55IHdheSB0aGF0IGVuYWJsZXMKK2EgUGVyc29uIHRvIG1ha2Ugb3IgcmVjZWl2ZSBjb3BpZXMgb2YgdGhlIERhdGFiYXNlIG9yIGEgRGVyaXZhdGl2ZQorRGF0YWJhc2UuICBDb252ZXlpbmcgZG9lcyBub3QgaW5jbHVkZSBpbnRlcmFjdGlvbiB3aXRoIGEgdXNlciB0aHJvdWdoIGEKK2NvbXB1dGVyIG5ldHdvcmssIG9yIGNyZWF0aW5nIGFuZCBVc2luZyBhIFByb2R1Y2VkIFdvcmssIHdoZXJlIG5vCit0cmFuc2ZlciBvZiBhIGNvcHkgb2YgdGhlIERhdGFiYXNlIG9yIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSBvY2N1cnMuCisiQ29udGVudHMiICYjODIxMTsgVGhlIGNvbnRlbnRzIG9mIHRoaXMgRGF0YWJhc2UsIHdoaWNoIGluY2x1ZGVzIHRoZQoraW5mb3JtYXRpb24sIGluZGVwZW5kZW50IHdvcmtzLCBvciBvdGhlciBtYXRlcmlhbCBjb2xsZWN0ZWQgaW50byB0aGUKK0RhdGFiYXNlLiBGb3IgZXhhbXBsZSwgdGhlIGNvbnRlbnRzIG9mIHRoZSBEYXRhYmFzZSBjb3VsZCBiZSBmYWN0dWFsCitkYXRhIG9yIHdvcmtzIHN1Y2ggYXMgaW1hZ2VzLCBhdWRpb3Zpc3VhbCBtYXRlcmlhbCwgdGV4dCwgb3Igc291bmRzLgorCisiRGF0YWJhc2UiICYjODIxMTsgQSBjb2xsZWN0aW9uIG9mIG1hdGVyaWFsICh0aGUgQ29udGVudHMpIGFycmFuZ2VkIGluIGEKK3N5c3RlbWF0aWMgb3IgbWV0aG9kaWNhbCB3YXkgYW5kIGluZGl2aWR1YWxseSBhY2Nlc3NpYmxlIGJ5IGVsZWN0cm9uaWMKK29yIG90aGVyIG1lYW5zIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworIkRhdGFiYXNlIERpcmVjdGl2ZSIgJiM4MjExOyBNZWFucyBEaXJlY3RpdmUgOTYvOS9FQyBvZiB0aGUgRXVyb3BlYW4KK1BhcmxpYW1lbnQgYW5kIG9mIHRoZSBDb3VuY2lsIG9mIDExIE1hcmNoIDE5OTYgb24gdGhlIGxlZ2FsIHByb3RlY3Rpb24KK29mIGRhdGFiYXNlcywgYXMgYW1lbmRlZCBvciBzdWNjZWVkZWQuCisKKyJEYXRhYmFzZSBSaWdodCIgJiM4MjExOyBNZWFucyByaWdodHMgcmVzdWx0aW5nIGZyb20gdGhlIENoYXB0ZXIgSUlJICgic3VpCitnZW5lcmlzIikgcmlnaHRzIGluIHRoZSBEYXRhYmFzZSBEaXJlY3RpdmUgKGFzIGFtZW5kZWQgYW5kIGFzIHRyYW5zcG9zZWQKK2J5IG1lbWJlciBzdGF0ZXMpLCB3aGljaCBpbmNsdWRlcyB0aGUgRXh0cmFjdGlvbiBhbmQgUmUtdXRpbGlzYXRpb24gb2YKK3RoZSB3aG9sZSBvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzLCBhcyB3ZWxsIGFzIGFueSBzaW1pbGFyCityaWdodHMgYXZhaWxhYmxlIGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gdW5kZXIgU2VjdGlvbiAxMC40LiAKKworIkRlcml2YXRpdmUgRGF0YWJhc2UiICYjODIxMTsgTWVhbnMgYSBkYXRhYmFzZSBiYXNlZCB1cG9uIHRoZSBEYXRhYmFzZSwgYW5kCitpbmNsdWRlcyBhbnkgdHJhbnNsYXRpb24sIGFkYXB0YXRpb24sIGFycmFuZ2VtZW50LCBtb2RpZmljYXRpb24sIG9yIGFueQorb3RoZXIgYWx0ZXJhdGlvbiBvZiB0aGUgRGF0YWJhc2Ugb3Igb2YgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZQorQ29udGVudHMuIFRoaXMgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgRXh0cmFjdGluZyBvcgorUmUtdXRpbGlzaW5nIHRoZSB3aG9sZSBvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzIGluIGEgbmV3CitEYXRhYmFzZS4KKworIkV4dHJhY3Rpb24iICYjODIxMTsgTWVhbnMgdGhlIHBlcm1hbmVudCBvciB0ZW1wb3JhcnkgdHJhbnNmZXIgb2YgYWxsIG9yIGEKK1N1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzIHRvIGFub3RoZXIgbWVkaXVtIGJ5IGFueSBtZWFucyBvciBpbgorYW55IGZvcm0uCisKKyJMaWNlbnNlIiAmIzgyMTE7IE1lYW5zIHRoaXMgbGljZW5zZSBhZ3JlZW1lbnQgYW5kIGlzIGJvdGggYSBsaWNlbnNlIG9mIHJpZ2h0cworc3VjaCBhcyBjb3B5cmlnaHQgYW5kIERhdGFiYXNlIFJpZ2h0cyBhbmQgYW4gYWdyZWVtZW50IGluIGNvbnRyYWN0LgorCisiTGljZW5zb3IiICYjODIxMTsgTWVhbnMgdGhlIFBlcnNvbiB0aGF0IG9mZmVycyB0aGUgRGF0YWJhc2UgdW5kZXIgdGhlIHRlcm1zCitvZiB0aGlzIExpY2Vuc2UuIAorCisiUGVyc29uIiAmIzgyMTE7IE1lYW5zIGEgbmF0dXJhbCBvciBsZWdhbCBwZXJzb24gb3IgYSBib2R5IG9mIHBlcnNvbnMKK2NvcnBvcmF0ZSBvciBpbmNvcnBvcmF0ZS4KKworIlByb2R1Y2VkIFdvcmsiICYjODIxMTsgIGEgd29yayAoc3VjaCBhcyBhbiBpbWFnZSwgYXVkaW92aXN1YWwgbWF0ZXJpYWwsIHRleHQsCitvciBzb3VuZHMpIHJlc3VsdGluZyBmcm9tIHVzaW5nIHRoZSB3aG9sZSBvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlCitDb250ZW50cyAodmlhIGEgc2VhcmNoIG9yIG90aGVyIHF1ZXJ5KSBmcm9tIHRoaXMgRGF0YWJhc2UsIGEgRGVyaXZhdGl2ZQorRGF0YWJhc2UsIG9yIHRoaXMgRGF0YWJhc2UgYXMgcGFydCBvZiBhIENvbGxlY3RpdmUgRGF0YWJhc2UuICAKKworIlB1YmxpY2x5IiAmIzgyMTE7IG1lYW5zIHRvIFBlcnNvbnMgb3RoZXIgdGhhbiBZb3Ugb3IgdW5kZXIgWW91ciBjb250cm9sIGJ5CitlaXRoZXIgbW9yZSB0aGFuIDUwJSBvd25lcnNoaXAgb3IgYnkgdGhlIHBvd2VyIHRvIGRpcmVjdCB0aGVpcgorYWN0aXZpdGllcyAoc3VjaCBhcyBjb250cmFjdGluZyB3aXRoIGFuIGluZGVwZW5kZW50IGNvbnN1bHRhbnQpLiAKKworIlJlLXV0aWxpc2F0aW9uIiAmIzgyMTE7IG1lYW5zIGFueSBmb3JtIG9mIG1ha2luZyBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBhbGwKK29yIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHMgYnkgdGhlIGRpc3RyaWJ1dGlvbiBvZiBjb3BpZXMsIGJ5CityZW50aW5nLCBieSBvbmxpbmUgb3Igb3RoZXIgZm9ybXMgb2YgdHJhbnNtaXNzaW9uLgorCisiU3Vic3RhbnRpYWwiICYjODIxMTsgTWVhbnMgc3Vic3RhbnRpYWwgaW4gdGVybXMgb2YgcXVhbnRpdHkgb3IgcXVhbGl0eSBvciBhCitjb21iaW5hdGlvbiBvZiBib3RoLiBUaGUgcmVwZWF0ZWQgYW5kIHN5c3RlbWF0aWMgRXh0cmFjdGlvbiBvcgorUmUtdXRpbGlzYXRpb24gb2YgaW5zdWJzdGFudGlhbCBwYXJ0cyBvZiB0aGUgQ29udGVudHMgbWF5IGFtb3VudCB0byB0aGUKK0V4dHJhY3Rpb24gb3IgUmUtdXRpbGlzYXRpb24gb2YgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cy4KKworIlVzZSIgJiM4MjExOyBBcyBhIHZlcmIsIG1lYW5zIGRvaW5nIGFueSBhY3QgdGhhdCBpcyByZXN0cmljdGVkIGJ5IGNvcHlyaWdodAorb3IgRGF0YWJhc2UgUmlnaHRzIHdoZXRoZXIgaW4gdGhlIG9yaWdpbmFsIG1lZGl1bSBvciBhbnkgb3RoZXI7IGFuZAoraW5jbHVkZXMgd2l0aG91dCBsaW1pdGF0aW9uIGRpc3RyaWJ1dGluZywgY29weWluZywgcHVibGljbHkgcGVyZm9ybWluZywKK3B1YmxpY2x5IGRpc3BsYXlpbmcsIGFuZCBwcmVwYXJpbmcgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgRGF0YWJhc2UsIGFzCit3ZWxsIGFzIG1vZGlmeWluZyB0aGUgRGF0YWJhc2UgYXMgbWF5IGJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byB1c2UgaXQKK2luIGEgZGlmZmVyZW50IG1vZGUgb3IgZm9ybWF0LiAKKworIllvdSIgJiM4MjExOyBNZWFucyBhIFBlcnNvbiBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QKK3ByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlCitEYXRhYmFzZSwgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8KK2V4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKworV29yZHMgaW4gdGhlIHNpbmd1bGFyIGluY2x1ZGUgdGhlIHBsdXJhbCBhbmQgdmljZSB2ZXJzYS4KKworIyMjIDIuMCBXaGF0IHRoaXMgTGljZW5zZSBjb3ZlcnMKKworMi4xLiBMZWdhbCBlZmZlY3Qgb2YgdGhpcyBkb2N1bWVudC4gVGhpcyBMaWNlbnNlIGlzOgorCisgIGEuIEEgbGljZW5zZSBvZiBhcHBsaWNhYmxlIGNvcHlyaWdodCBhbmQgbmVpZ2hib3VyaW5nIHJpZ2h0czsKKworICBiLiBBIGxpY2Vuc2Ugb2YgdGhlIERhdGFiYXNlIFJpZ2h0OyBhbmQKKworICBjLiBBbiBhZ3JlZW1lbnQgaW4gY29udHJhY3QgYmV0d2VlbiBZb3UgYW5kIHRoZSBMaWNlbnNvci4KKworMi4yIExlZ2FsIHJpZ2h0cyBjb3ZlcmVkLiBUaGlzIExpY2Vuc2UgY292ZXJzIHRoZSBsZWdhbCByaWdodHMgaW4gdGhlCitEYXRhYmFzZSwgaW5jbHVkaW5nOgorCisgIGEuIENvcHlyaWdodC4gQW55IGNvcHlyaWdodCBvciBuZWlnaGJvdXJpbmcgcmlnaHRzIGluIHRoZSBEYXRhYmFzZS4KKyAgVGhlIGNvcHlyaWdodCBsaWNlbnNlZCBpbmNsdWRlcyBhbnkgaW5kaXZpZHVhbCBlbGVtZW50cyBvZiB0aGUKKyAgRGF0YWJhc2UsIGJ1dCBkb2VzIG5vdCBjb3ZlciB0aGUgY29weXJpZ2h0IG92ZXIgdGhlIENvbnRlbnRzCisgIGluZGVwZW5kZW50IG9mIHRoaXMgRGF0YWJhc2UuIFNlZSBTZWN0aW9uIDIuNCBmb3IgZGV0YWlscy4gQ29weXJpZ2h0CisgIGxhdyB2YXJpZXMgYmV0d2VlbiBqdXJpc2RpY3Rpb25zLCBidXQgaXMgbGlrZWx5IHRvIGNvdmVyOiB0aGUgRGF0YWJhc2UKKyAgbW9kZWwgb3Igc2NoZW1hLCB3aGljaCBpcyB0aGUgc3RydWN0dXJlLCBhcnJhbmdlbWVudCwgYW5kIG9yZ2FuaXNhdGlvbgorICBvZiB0aGUgRGF0YWJhc2UsIGFuZCBjYW4gYWxzbyBpbmNsdWRlIHRoZSBEYXRhYmFzZSB0YWJsZXMgYW5kIHRhYmxlCisgIGluZGV4ZXM7IHRoZSBkYXRhIGVudHJ5IGFuZCBvdXRwdXQgc2hlZXRzOyBhbmQgdGhlIEZpZWxkIG5hbWVzIG9mCisgIENvbnRlbnRzIHN0b3JlZCBpbiB0aGUgRGF0YWJhc2U7CisKKyAgYi4gRGF0YWJhc2UgUmlnaHRzLiBEYXRhYmFzZSBSaWdodHMgb25seSBleHRlbmQgdG8gdGhlIEV4dHJhY3Rpb24gYW5kCisgIFJlLXV0aWxpc2F0aW9uIG9mIHRoZSB3aG9sZSBvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzLgorICBEYXRhYmFzZSBSaWdodHMgY2FuIGFwcGx5IGV2ZW4gd2hlbiB0aGVyZSBpcyBubyBjb3B5cmlnaHQgb3ZlciB0aGUKKyAgRGF0YWJhc2UuIERhdGFiYXNlIFJpZ2h0cyBjYW4gYWxzbyBhcHBseSB3aGVuIHRoZSBDb250ZW50cyBhcmUgcmVtb3ZlZAorICBmcm9tIHRoZSBEYXRhYmFzZSBhbmQgYXJlIHNlbGVjdGVkIGFuZCBhcnJhbmdlZCBpbiBhIHdheSB0aGF0IHdvdWxkCisgIG5vdCBpbmZyaW5nZSBhbnkgYXBwbGljYWJsZSBjb3B5cmlnaHQ7IGFuZAorCisgIGMuIENvbnRyYWN0LiBUaGlzIGlzIGFuIGFncmVlbWVudCBiZXR3ZWVuIFlvdSBhbmQgdGhlIExpY2Vuc29yIGZvcgorICBhY2Nlc3MgdG8gdGhlIERhdGFiYXNlLiBJbiByZXR1cm4geW91IGFncmVlIHRvIGNlcnRhaW4gY29uZGl0aW9ucyBvZgorICB1c2Ugb24gdGhpcyBhY2Nlc3MgYXMgb3V0bGluZWQgaW4gdGhpcyBMaWNlbnNlLiAKKworMi4zIFJpZ2h0cyBub3QgY292ZXJlZC4gCisKKyAgYS4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGFwcGx5IHRvIGNvbXB1dGVyIHByb2dyYW1zIHVzZWQgaW4gdGhlIG1ha2luZworICBvciBvcGVyYXRpb24gb2YgdGhlIERhdGFiYXNlOyAKKworICBiLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgY292ZXIgYW55IHBhdGVudHMgb3ZlciB0aGUgQ29udGVudHMgb3IgdGhlCisgIERhdGFiYXNlOyBhbmQKKworICBjLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgY292ZXIgYW55IHRyYWRlbWFya3MgYXNzb2NpYXRlZCB3aXRoIHRoZQorICBEYXRhYmFzZS4gCisKKzIuNCBSZWxhdGlvbnNoaXAgdG8gQ29udGVudHMgaW4gdGhlIERhdGFiYXNlLiBUaGUgaW5kaXZpZHVhbCBpdGVtcyBvZgordGhlIENvbnRlbnRzIGNvbnRhaW5lZCBpbiB0aGlzIERhdGFiYXNlIG1heSBiZSBjb3ZlcmVkIGJ5IG90aGVyIHJpZ2h0cywKK2luY2x1ZGluZyBjb3B5cmlnaHQsIHBhdGVudCwgZGF0YSBwcm90ZWN0aW9uLCBwcml2YWN5LCBvciBwZXJzb25hbGl0eQorcmlnaHRzLCBhbmQgdGhpcyBMaWNlbnNlIGRvZXMgbm90IGNvdmVyIGFueSByaWdodHMgKG90aGVyIHRoYW4gRGF0YWJhc2UKK1JpZ2h0cyBvciBpbiBjb250cmFjdCkgaW4gaW5kaXZpZHVhbCBDb250ZW50cyBjb250YWluZWQgaW4gdGhlIERhdGFiYXNlLgorRm9yIGV4YW1wbGUsIGlmIHVzZWQgb24gYSBEYXRhYmFzZSBvZiBpbWFnZXMgKHRoZSBDb250ZW50cyksIHRoaXMKK0xpY2Vuc2Ugd291bGQgbm90IGFwcGx5IHRvIGNvcHlyaWdodCBvdmVyIGluZGl2aWR1YWwgaW1hZ2VzLCB3aGljaCBjb3VsZAoraGF2ZSB0aGVpciBvd24gc2VwYXJhdGUgbGljZW5zZXMsIG9yIG9uZSBzaW5nbGUgbGljZW5zZSBjb3ZlcmluZyBhbGwgb2YKK3RoZSByaWdodHMgb3ZlciB0aGUgaW1hZ2VzLiAgCisKKyMjIyAzLjAgUmlnaHRzIGdyYW50ZWQKKworMy4xIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhlIExpY2Vuc29yCitncmFudHMgdG8gWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHRlcm1pbmFibGUgKGJ1dAorb25seSB1bmRlciBTZWN0aW9uIDkpIGxpY2Vuc2UgdG8gVXNlIHRoZSBEYXRhYmFzZSBmb3IgdGhlIGR1cmF0aW9uIG9mCithbnkgYXBwbGljYWJsZSBjb3B5cmlnaHQgYW5kIERhdGFiYXNlIFJpZ2h0cy4gVGhlc2UgcmlnaHRzIGV4cGxpY2l0bHkKK2luY2x1ZGUgY29tbWVyY2lhbCB1c2UsIGFuZCBkbyBub3QgZXhjbHVkZSBhbnkgZmllbGQgb2YgZW5kZWF2b3VyLiBUbwordGhlIGV4dGVudCBwb3NzaWJsZSBpbiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uLCB0aGVzZSByaWdodHMgbWF5IGJlCitleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGNyZWF0ZWQgaW4gdGhlCitmdXR1cmUuIAorCitUaGUgcmlnaHRzIGdyYW50ZWQgY292ZXIsIGZvciBleGFtcGxlOgorCisgIGEuIEV4dHJhY3Rpb24gYW5kIFJlLXV0aWxpc2F0aW9uIG9mIHRoZSB3aG9sZSBvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YKKyAgdGhlIENvbnRlbnRzOworCisgIGIuIENyZWF0aW9uIG9mIERlcml2YXRpdmUgRGF0YWJhc2VzOworCisgIGMuIENyZWF0aW9uIG9mIENvbGxlY3RpdmUgRGF0YWJhc2VzOworCisgIGQuIENyZWF0aW9uIG9mIHRlbXBvcmFyeSBvciBwZXJtYW5lbnQgcmVwcm9kdWN0aW9ucyBieSBhbnkgbWVhbnMgYW5kCisgIGluIGFueSBmb3JtLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBpbmNsdWRpbmcgb2YgYW55IERlcml2YXRpdmUKKyAgRGF0YWJhc2VzIG9yIGFzIGEgcGFydCBvZiBDb2xsZWN0aXZlIERhdGFiYXNlczsgYW5kCisKKyAgZS4gRGlzdHJpYnV0aW9uLCBjb21tdW5pY2F0aW9uLCBkaXNwbGF5LCBsZW5kaW5nLCBtYWtpbmcgYXZhaWxhYmxlLCBvcgorICBwZXJmb3JtYW5jZSB0byB0aGUgcHVibGljIGJ5IGFueSBtZWFucyBhbmQgaW4gYW55IGZvcm0sIGluIHdob2xlIG9yIGluCisgIHBhcnQsIGluY2x1ZGluZyBvZiBhbnkgRGVyaXZhdGl2ZSBEYXRhYmFzZSBvciBhcyBhIHBhcnQgb2YgQ29sbGVjdGl2ZQorICBEYXRhYmFzZXMuCisKKzMuMiBDb21wdWxzb3J5IGxpY2Vuc2Ugc2NoZW1lcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQ6CisKKyAgYS4gTm9uLXdhaXZhYmxlIGNvbXB1bHNvcnkgbGljZW5zZSBzY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluCisgIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IKKyAgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbm5vdCBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcworICB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3UKKyAgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTsKKworICBiLiBXYWl2YWJsZSBjb21wdWxzb3J5IGxpY2Vuc2Ugc2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbgorICB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yCisgIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW4gYmUgd2FpdmVkLCB0aGUgTGljZW5zb3Igd2FpdmVzIHRoZQorICBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZgorICB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlOyBhbmQsCisKKyAgYy4gVm9sdW50YXJ5IGxpY2Vuc2Ugc2NoZW1lcy4gVGhlIExpY2Vuc29yIHdhaXZlcyB0aGUgcmlnaHQgdG8gY29sbGVjdAorICByb3lhbHRpZXMsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yLCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgTGljZW5zb3IgaXMKKyAgYSBtZW1iZXIgb2YgYSBjb2xsZWN0aW5nIHNvY2lldHkgdGhhdCBhZG1pbmlzdGVycyB2b2x1bnRhcnkgbGljZW5zaW5nCisgIHNjaGVtZXMsIHZpYSB0aGF0IHNvY2lldHksIGZyb20gYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzCisgIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCiszLjMgVGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIERhdGFiYXNlIHVuZGVyIGRpZmZlcmVudCB0ZXJtcywgb3IgdG8gc3RvcAorZGlzdHJpYnV0aW5nIG9yIG1ha2luZyBhdmFpbGFibGUgdGhlIERhdGFiYXNlLCBpcyByZXNlcnZlZC4gTm90ZSB0aGF0Cit0aGlzIERhdGFiYXNlIG1heSBiZSBtdWx0aXBsZS1saWNlbnNlZCwgYW5kIHNvIFlvdSBtYXkgaGF2ZSB0aGUgY2hvaWNlCitvZiB1c2luZyBhbHRlcm5hdGl2ZSBsaWNlbnNlcyBmb3IgdGhpcyBEYXRhYmFzZS4gU3ViamVjdCB0byBTZWN0aW9uCisxMC40LCBhbGwgb3RoZXIgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgcmVzZXJ2ZWQuCisKKyMjIyA0LjAgQ29uZGl0aW9ucyBvZiBVc2UKKworNC4xIFRoZSByaWdodHMgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgYXJlIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8KK1lvdXIgY29tcGx5aW5nIHdpdGggdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIG9mIHVzZS4gVGhlc2UgYXJlIGltcG9ydGFudAorY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBpZiBZb3UgZmFpbCB0byBmb2xsb3cgdGhlbSwgWW91IHdpbGwgYmUKK2luIG1hdGVyaWFsIGJyZWFjaCBvZiBpdHMgdGVybXMuCisKKzQuMiBOb3RpY2VzLiBJZiBZb3UgUHVibGljbHkgQ29udmV5IHRoaXMgRGF0YWJhc2UsIGFueSBEZXJpdmF0aXZlCitEYXRhYmFzZSwgb3IgdGhlIERhdGFiYXNlIGFzIHBhcnQgb2YgYSBDb2xsZWN0aXZlIERhdGFiYXNlLCB0aGVuIFlvdQorbXVzdDogCisKKyAgYS4gRG8gc28gb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGFub3RoZXIgbGljZW5zZQorICBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA0LjQ7CisKKyAgYi4gSW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIChvciwgYXMgYXBwbGljYWJsZSwgYSBsaWNlbnNlCisgIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDQuNCkgb3IgaXRzIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKQorICB3aXRoIHRoZSBEYXRhYmFzZSBvciBEZXJpdmF0aXZlIERhdGFiYXNlLCBpbmNsdWRpbmcgYm90aCBpbiB0aGUKKyAgRGF0YWJhc2Ugb3IgRGVyaXZhdGl2ZSBEYXRhYmFzZSBhbmQgaW4gYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb247IGFuZAorCisgIGMuIEtlZXAgaW50YWN0IGFueSBjb3B5cmlnaHQgb3IgRGF0YWJhc2UgUmlnaHQgbm90aWNlcyBhbmQgbm90aWNlcworICB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZS4KKworICBkLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHRoZSByZXF1aXJlZCBub3RpY2VzIGluIGEgcGFydGljdWxhcgorICBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgdGhlIG5vdGljZXMgaW4gYQorICBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgdXNlcnMgd291bGQgYmUgbGlrZWx5IHRvCisgIGxvb2sgZm9yIGl0LgorCis0LjMgTm90aWNlIGZvciB1c2luZyBvdXRwdXQgKENvbnRlbnRzKS4gQ3JlYXRpbmcgYW5kIFVzaW5nIGEgUHJvZHVjZWQKK1dvcmsgZG9lcyBub3QgcmVxdWlyZSB0aGUgbm90aWNlIGluIFNlY3Rpb24gNC4yLiBIb3dldmVyLCBpZiB5b3UKK1B1YmxpY2x5IFVzZSBhIFByb2R1Y2VkIFdvcmssIFlvdSBtdXN0IGluY2x1ZGUgYSBub3RpY2UgYXNzb2NpYXRlZCB3aXRoCit0aGUgUHJvZHVjZWQgV29yayByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gbWFrZSBhbnkgUGVyc29uIHRoYXQgdXNlcywKK3ZpZXdzLCBhY2Nlc3NlcywgaW50ZXJhY3RzIHdpdGgsIG9yIGlzIG90aGVyd2lzZSBleHBvc2VkIHRvIHRoZSBQcm9kdWNlZAorV29yayBhd2FyZSB0aGF0IENvbnRlbnQgd2FzIG9idGFpbmVkIGZyb20gdGhlIERhdGFiYXNlLCBEZXJpdmF0aXZlCitEYXRhYmFzZSwgb3IgdGhlIERhdGFiYXNlIGFzIHBhcnQgb2YgYSBDb2xsZWN0aXZlIERhdGFiYXNlLCBhbmQgdGhhdCBpdAoraXMgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICBhLiBFeGFtcGxlIG5vdGljZS4gVGhlIGZvbGxvd2luZyB0ZXh0IHdpbGwgc2F0aXNmeSBub3RpY2UgdW5kZXIKKyAgU2VjdGlvbiA0LjM6CisKKyAgICAgICAgQ29udGFpbnMgaW5mb3JtYXRpb24gZnJvbSBEQVRBQkFTRSBOQU1FLCB3aGljaCBpcyBtYWRlIGF2YWlsYWJsZQorICAgICAgICBoZXJlIHVuZGVyIHRoZSBPcGVuIERhdGFiYXNlIExpY2Vuc2UgKE9EYkwpLgorCitEQVRBQkFTRSBOQU1FIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBEYXRhYmFzZSBhbmQgYQoraHlwZXJsaW5rIHRvIHRoZSBVUkkgb2YgdGhlIERhdGFiYXNlLiAiT3BlbiBEYXRhYmFzZSBMaWNlbnNlIiBzaG91bGQKK2NvbnRhaW4gYSBoeXBlcmxpbmsgdG8gdGhlIFVSSSBvZiB0aGUgdGV4dCBvZiB0aGlzIExpY2Vuc2UuIElmCitoeXBlcmxpbmtzIGFyZSBub3QgcG9zc2libGUsIFlvdSBzaG91bGQgaW5jbHVkZSB0aGUgcGxhaW4gdGV4dCBvZiB0aGUKK3JlcXVpcmVkIFVSSWBzIHdpdGggdGhlIGFib3ZlIG5vdGljZS4KKyAKKzQuNCBTaGFyZSBhbGlrZS4gCisKKyAgYS4gQW55IERlcml2YXRpdmUgRGF0YWJhc2UgdGhhdCBZb3UgUHVibGljbHkgVXNlIG11c3QgYmUgb25seSB1bmRlcgorICB0aGUgdGVybXMgb2Y6IAorCisgICAgaS4gVGhpcyBMaWNlbnNlOworCisgICAgaWkuIEEgbGF0ZXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhpcworICAgICAgTGljZW5zZTsgb3IKKworICAgIGlpaS4gQSBjb21wYXRpYmxlIGxpY2Vuc2UuIAorCisgIElmIFlvdSBsaWNlbnNlIHRoZSBEZXJpdmF0aXZlIERhdGFiYXNlIHVuZGVyIG9uZSBvZiB0aGUgbGljZW5zZXMKKyAgbWVudGlvbmVkIGluIChpaWkpLCBZb3UgbXVzdCBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhhdCBsaWNlbnNlLiAKKworICBiLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgRXh0cmFjdGlvbiBvciBSZS11dGlsaXNhdGlvbiBvZiB0aGUKKyAgd2hvbGUgb3IgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cyBpbnRvIGEgbmV3IGRhdGFiYXNlIGlzIGEKKyAgRGVyaXZhdGl2ZSBEYXRhYmFzZSBhbmQgbXVzdCBjb21wbHkgd2l0aCBTZWN0aW9uIDQuNC4gCisKKyAgYy4gRGVyaXZhdGl2ZSBEYXRhYmFzZXMgYW5kIFByb2R1Y2VkIFdvcmtzLiAgQSBEZXJpdmF0aXZlIERhdGFiYXNlIGlzCisgIFB1YmxpY2x5IFVzZWQgYW5kIHNvIG11c3QgY29tcGx5IHdpdGggU2VjdGlvbiA0LjQuIGlmIGEgUHJvZHVjZWQgV29yaworICBjcmVhdGVkIGZyb20gdGhlIERlcml2YXRpdmUgRGF0YWJhc2UgaXMgUHVibGljbHkgVXNlZC4KKworICBkLiBTaGFyZSBBbGlrZSBhbmQgYWRkaXRpb25hbCBDb250ZW50cy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsCisgIFlvdSBtdXN0IG5vdCBhZGQgQ29udGVudHMgdG8gRGVyaXZhdGl2ZSBEYXRhYmFzZXMgdW5kZXIgU2VjdGlvbiA0LjQgYQorICB0aGF0IGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAKKworICBlLiBDb21wYXRpYmxlIGxpY2Vuc2VzLiBMaWNlbnNvcnMgbWF5IGF1dGhvcmlzZSBhIHByb3h5IHRvIGRldGVybWluZQorICBjb21wYXRpYmxlIGxpY2Vuc2VzIHVuZGVyIFNlY3Rpb24gNC40IGEgaWlpLiBJZiB0aGV5IGRvIHNvLCB0aGUKKyAgYXV0aG9yaXNlZCBwcm94eWBzIHB1YmxpYyBzdGF0ZW1lbnQgb2YgYWNjZXB0YW5jZSBvZiBhIGNvbXBhdGlibGUKKyAgbGljZW5zZSBncmFudHMgWW91IHBlcm1pc3Npb24gdG8gdXNlIHRoZSBjb21wYXRpYmxlIGxpY2Vuc2UuCisKKworNC41IExpbWl0cyBvZiBTaGFyZSBBbGlrZS4gIFRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiA0LjQgZG8gbm90IGFwcGx5CitpbiB0aGUgZm9sbG93aW5nOgorCisgIGEuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBsaWNlbnNlCisgIENvbGxlY3RpdmUgRGF0YWJhc2VzIHVuZGVyIHRoaXMgTGljZW5zZSBpZiBZb3UgaW5jb3Jwb3JhdGUgdGhpcworICBEYXRhYmFzZSBvciBhIERlcml2YXRpdmUgRGF0YWJhc2UgaW4gdGhlIGNvbGxlY3Rpb24sIGJ1dCB0aGlzIExpY2Vuc2UKKyAgc3RpbGwgYXBwbGllcyB0byB0aGlzIERhdGFiYXNlIG9yIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSBhcyBhIHBhcnQgb2YKKyAgdGhlIENvbGxlY3RpdmUgRGF0YWJhc2U7IAorCisgIGIuIFVzaW5nIHRoaXMgRGF0YWJhc2UsIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSwgb3IgdGhpcyBEYXRhYmFzZSBhcworICBwYXJ0IG9mIGEgQ29sbGVjdGl2ZSBEYXRhYmFzZSB0byBjcmVhdGUgYSBQcm9kdWNlZCBXb3JrIGRvZXMgbm90CisgIGNyZWF0ZSBhIERlcml2YXRpdmUgRGF0YWJhc2UgZm9yIHB1cnBvc2VzIG9mICBTZWN0aW9uIDQuNDsgYW5kCisKKyAgYy4gVXNlIG9mIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSBpbnRlcm5hbGx5IHdpdGhpbiBhbiBvcmdhbmlzYXRpb24gaXMKKyAgbm90IHRvIHRoZSBwdWJsaWMgYW5kIHRoZXJlZm9yZSBkb2VzIG5vdCBmYWxsIHVuZGVyIHRoZSByZXF1aXJlbWVudHMKKyAgb2YgU2VjdGlvbiA0LjQuCisKKzQuNiBBY2Nlc3MgdG8gRGVyaXZhdGl2ZSBEYXRhYmFzZXMuIElmIFlvdSBQdWJsaWNseSBVc2UgYSBEZXJpdmF0aXZlCitEYXRhYmFzZSBvciBhIFByb2R1Y2VkIFdvcmsgZnJvbSBhIERlcml2YXRpdmUgRGF0YWJhc2UsIFlvdSBtdXN0IGFsc28KK29mZmVyIHRvIHJlY2lwaWVudHMgb2YgdGhlIERlcml2YXRpdmUgRGF0YWJhc2Ugb3IgUHJvZHVjZWQgV29yayBhIGNvcHkKK2luIGEgbWFjaGluZSByZWFkYWJsZSBmb3JtIG9mOgorCisgIGEuIFRoZSBlbnRpcmUgRGVyaXZhdGl2ZSBEYXRhYmFzZTsgb3IKKworICBiLiBBIGZpbGUgY29udGFpbmluZyBhbGwgb2YgdGhlIGFsdGVyYXRpb25zIG1hZGUgdG8gdGhlIERhdGFiYXNlIG9yCisgIHRoZSBtZXRob2Qgb2YgbWFraW5nIHRoZSBhbHRlcmF0aW9ucyB0byB0aGUgRGF0YWJhc2UgKHN1Y2ggYXMgYW4KKyAgYWxnb3JpdGhtKSwgaW5jbHVkaW5nIGFueSBhZGRpdGlvbmFsIENvbnRlbnRzLCB0aGF0IG1ha2UgdXAgYWxsIHRoZQorICBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBEYXRhYmFzZSBhbmQgdGhlIERlcml2YXRpdmUgRGF0YWJhc2UuCisKK1RoZSBEZXJpdmF0aXZlIERhdGFiYXNlICh1bmRlciBhLikgb3IgYWx0ZXJhdGlvbiBmaWxlICh1bmRlciBiLikgbXVzdCBiZQorYXZhaWxhYmxlIGF0IG5vIG1vcmUgdGhhbiBhIHJlYXNvbmFibGUgcHJvZHVjdGlvbiBjb3N0IGZvciBwaHlzaWNhbAorZGlzdHJpYnV0aW9ucyBhbmQgZnJlZSBvZiBjaGFyZ2UgaWYgZGlzdHJpYnV0ZWQgb3ZlciB0aGUgaW50ZXJuZXQuCisKKzQuNyBUZWNobm9sb2dpY2FsIG1lYXN1cmVzIGFuZCBhZGRpdGlvbmFsIHRlcm1zCisKKyAgYS4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGFsbG93IFlvdSB0byBpbXBvc2UgKGV4Y2VwdCBzdWJqZWN0IHRvCisgIFNlY3Rpb24gNC43IGIuKSAgYW55IHRlcm1zIG9yIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZQorICBEYXRhYmFzZSwgYSBEZXJpdmF0aXZlIERhdGFiYXNlLCBvciB0aGUgd2hvbGUgb3IgYSBTdWJzdGFudGlhbCBwYXJ0IG9mCisgIHRoZSBDb250ZW50cyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIG9yIGFueQorICByaWdodHMgZ3JhbnRlZCB1bmRlciBpdCwgb3IgaGF2ZSB0aGUgZWZmZWN0IG9yIGludGVudCBvZiByZXN0cmljdGluZworICB0aGUgYWJpbGl0eSBvZiBhbnkgcGVyc29uIHRvIGV4ZXJjaXNlIHRob3NlIHJpZ2h0cy4KKworICBiLiBQYXJhbGxlbCBkaXN0cmlidXRpb24uIFlvdSBtYXkgaW1wb3NlIHRlcm1zIG9yIHRlY2hub2xvZ2ljYWwKKyAgbWVhc3VyZXMgb24gdGhlIERhdGFiYXNlLCBhIERlcml2YXRpdmUgRGF0YWJhc2UsIG9yIHRoZSB3aG9sZSBvciBhCisgIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzIChhICJSZXN0cmljdGVkIERhdGFiYXNlIikgaW4KKyAgY29udHJhdmVudGlvbiBvZiBTZWN0aW9uIDQuNzQgYS4gb25seSBpZiBZb3UgYWxzbyBtYWtlIGEgY29weSBvZiB0aGUKKyAgRGF0YWJhc2Ugb3IgYSBEZXJpdmF0aXZlIERhdGFiYXNlIGF2YWlsYWJsZSB0byB0aGUgcmVjaXBpZW50IG9mIHRoZQorICBSZXN0cmljdGVkIERhdGFiYXNlOgorCisgICAgaS4gVGhhdCBpcyBhdmFpbGFibGUgd2l0aG91dCBhZGRpdGlvbmFsIGZlZTsKKworICAgIGlpLiBUaGF0IGlzIGF2YWlsYWJsZSBpbiBhIG1lZGl1bSB0aGF0IGRvZXMgbm90IGFsdGVyIG9yIHJlc3RyaWN0CisgICAgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgb3IgYW55IHJpZ2h0cyBncmFudGVkIHVuZGVyIGl0LCBvciBoYXZlCisgICAgdGhlIGVmZmVjdCBvciBpbnRlbnQgb2YgcmVzdHJpY3RpbmcgdGhlIGFiaWxpdHkgb2YgYW55IHBlcnNvbiB0bworICAgIGV4ZXJjaXNlIHRob3NlIHJpZ2h0cyAoYW4gIlVucmVzdHJpY3RlZCBEYXRhYmFzZSIpOyBhbmQKKworICAgIGlpaS4gVGhlIFVucmVzdHJpY3RlZCBEYXRhYmFzZSBpcyBhdCBsZWFzdCBhcyBhY2Nlc3NpYmxlIHRvIHRoZQorICAgIHJlY2lwaWVudCBhcyBhIHByYWN0aWNhbCBtYXR0ZXIgYXMgdGhlIFJlc3RyaWN0ZWQgRGF0YWJhc2UuCisKKyAgYy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBtYXkgcGxhY2UgdGhpcyBEYXRhYmFzZSBvciBhCisgIERlcml2YXRpdmUgRGF0YWJhc2UgaW4gYW4gYXV0aGVudGljYXRlZCBlbnZpcm9ubWVudCwgYmVoaW5kIGEKKyAgcGFzc3dvcmQsIG9yIHdpdGhpbiBhIHNpbWlsYXIgYWNjZXNzIGNvbnRyb2wgc2NoZW1lIHByb3ZpZGVkIHRoYXQgWW91CisgIGRvIG5vdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGFueSByaWdodHMKKyAgZ3JhbnRlZCB1bmRlciBpdCBvciBoYXZlIHRoZSBlZmZlY3Qgb3IgaW50ZW50IG9mIHJlc3RyaWN0aW5nIHRoZQorICBhYmlsaXR5IG9mIGFueSBwZXJzb24gdG8gZXhlcmNpc2UgdGhvc2UgcmlnaHRzLiAKKworNC44IExpY2Vuc2luZyBvZiBvdGhlcnMuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIERhdGFiYXNlLiBFYWNoIHRpbWUKK1lvdSBjb21tdW5pY2F0ZSB0aGUgRGF0YWJhc2UsIHRoZSB3aG9sZSBvciBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZQorQ29udGVudHMsIG9yIGFueSBEZXJpdmF0aXZlIERhdGFiYXNlIHRvIGFueW9uZSBlbHNlIGluIGFueSB3YXksIHRoZQorTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBEYXRhYmFzZSBvbiB0aGUgc2FtZQordGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhpcyBMaWNlbnNlLiBZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IKK2VuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aCB0aGlzIExpY2Vuc2UsIGJ1dCBZb3UgbWF5CitlbmZvcmNlIGFueSByaWdodHMgdGhhdCBZb3UgaGF2ZSBvdmVyIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZS4gWW91IGFyZQorc29sZWx5IHJlc3BvbnNpYmxlIGZvciBhbnkgbW9kaWZpY2F0aW9ucyBvZiBhIERlcml2YXRpdmUgRGF0YWJhc2UgbWFkZQorYnkgWW91IG9yIGFub3RoZXIgUGVyc29uIGF0IFlvdXIgZGlyZWN0aW9uLiBZb3UgbWF5IG5vdCBpbXBvc2UgYW55CitmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIG9yIGFmZmlybWVkCit1bmRlciB0aGlzIExpY2Vuc2UuCisKKyMjIyA1LjAgTW9yYWwgcmlnaHRzCisKKzUuMSBNb3JhbCByaWdodHMuIFRoaXMgc2VjdGlvbiBjb3ZlcnMgbW9yYWwgcmlnaHRzLCBpbmNsdWRpbmcgYW55IHJpZ2h0cwordG8gYmUgaWRlbnRpZmllZCBhcyB0aGUgYXV0aG9yIG9mIHRoZSBEYXRhYmFzZSBvciB0byBvYmplY3QgdG8gdHJlYXRtZW50Cit0aGF0IHdvdWxkIG90aGVyd2lzZSBwcmVqdWRpY2UgdGhlIGF1dGhvcmBzIGhvbm91ciBhbmQgcmVwdXRhdGlvbiwgb3IKK2FueSBvdGhlciBkZXJvZ2F0b3J5IHRyZWF0bWVudDoKKworICBhLiBGb3IganVyaXNkaWN0aW9ucyBhbGxvd2luZyB3YWl2ZXIgb2YgbW9yYWwgcmlnaHRzLCBMaWNlbnNvciB3YWl2ZXMKKyAgYWxsIG1vcmFsIHJpZ2h0cyB0aGF0IExpY2Vuc29yIG1heSBoYXZlIGluIHRoZSBEYXRhYmFzZSB0byB0aGUgZnVsbGVzdAorICBleHRlbnQgcG9zc2libGUgYnkgdGhlIGxhdyBvZiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIHVuZGVyIFNlY3Rpb24KKyAgMTAuNDsgCisKKyAgYi4gSWYgd2FpdmVyIG9mIG1vcmFsIHJpZ2h0cyB1bmRlciBTZWN0aW9uIDUuMSBhIGluIHRoZSByZWxldmFudAorICBqdXJpc2RpY3Rpb24gaXMgbm90IHBvc3NpYmxlLCBMaWNlbnNvciBhZ3JlZXMgbm90IHRvIGFzc2VydCBhbnkgbW9yYWwKKyAgcmlnaHRzIG92ZXIgdGhlIERhdGFiYXNlIGFuZCB3YWl2ZXMgYWxsIGNsYWltcyBpbiBtb3JhbCByaWdodHMgdG8gdGhlCisgIGZ1bGxlc3QgZXh0ZW50IHBvc3NpYmxlIGJ5IHRoZSBsYXcgb2YgdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiB1bmRlcgorICBTZWN0aW9uIDEwLjQ7IGFuZAorCisgIGMuIEZvciBqdXJpc2RpY3Rpb25zIG5vdCBhbGxvd2luZyB3YWl2ZXIgb3IgYW4gYWdyZWVtZW50IG5vdCB0byBhc3NlcnQKKyAgbW9yYWwgcmlnaHRzIHVuZGVyIFNlY3Rpb24gNS4xIGEgYW5kIGIsIHRoZSBhdXRob3IgbWF5IHJldGFpbiB0aGVpcgorICBtb3JhbCByaWdodHMgb3ZlciBjZXJ0YWluIGFzcGVjdHMgb2YgdGhlIERhdGFiYXNlLgorCitQbGVhc2Ugbm90ZSB0aGF0IHNvbWUganVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgZm9yIHRoZSB3YWl2ZXIgb2YgbW9yYWwKK3JpZ2h0cywgYW5kIHNvIG1vcmFsIHJpZ2h0cyBtYXkgc3RpbGwgc3Vic2lzdCBvdmVyIHRoZSBEYXRhYmFzZSBpbiBzb21lCitqdXJpc2RpY3Rpb25zLgorCisjIyMgNi4wIEZhaXIgZGVhbGluZywgRGF0YWJhc2UgZXhjZXB0aW9ucywgYW5kIG90aGVyIHJpZ2h0cyBub3QgYWZmZWN0ZWQgCisKKzYuMSBUaGlzIExpY2Vuc2UgZG9lcyBub3QgYWZmZWN0IGFueSByaWdodHMgdGhhdCBZb3Ugb3IgYW55b25lIGVsc2UgbWF5CitpbmRlcGVuZGVudGx5IGhhdmUgdW5kZXIgYW55IGFwcGxpY2FibGUgbGF3IHRvIG1ha2UgYW55IHVzZSBvZiB0aGlzCitEYXRhYmFzZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbjoKKworICBhLiBFeGNlcHRpb25zIHRvIHRoZSBEYXRhYmFzZSBSaWdodCBpbmNsdWRpbmc6IEV4dHJhY3Rpb24gb2YgQ29udGVudHMKKyAgZnJvbSBub24tZWxlY3Ryb25pYyBEYXRhYmFzZXMgZm9yIHByaXZhdGUgcHVycG9zZXMsIEV4dHJhY3Rpb24gZm9yCisgIHB1cnBvc2VzIG9mIGlsbHVzdHJhdGlvbiBmb3IgdGVhY2hpbmcgb3Igc2NpZW50aWZpYyByZXNlYXJjaCwgYW5kCisgIEV4dHJhY3Rpb24gb3IgUmUtdXRpbGlzYXRpb24gZm9yIHB1YmxpYyBzZWN1cml0eSBvciBhbiBhZG1pbmlzdHJhdGl2ZQorICBvciBqdWRpY2lhbCBwcm9jZWR1cmUuIAorCisgIGIuIEZhaXIgZGVhbGluZywgZmFpciB1c2UsIG9yIGFueSBvdGhlciBsZWdhbGx5IHJlY29nbmlzZWQgbGltaXRhdGlvbgorICBvciBleGNlcHRpb24gdG8gaW5mcmluZ2VtZW50IG9mIGNvcHlyaWdodCBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuIAorCis2LjIgVGhpcyBMaWNlbnNlIGRvZXMgbm90IGFmZmVjdCBhbnkgcmlnaHRzIG9mIGxhd2Z1bCB1c2VycyB0byBFeHRyYWN0CithbmQgUmUtdXRpbGlzZSBpbnN1YnN0YW50aWFsIHBhcnRzIG9mIHRoZSBDb250ZW50cywgZXZhbHVhdGVkCitxdWFudGl0YXRpdmVseSBvciBxdWFsaXRhdGl2ZWx5LCBmb3IgYW55IHB1cnBvc2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZworY3JlYXRpbmcgYSBEZXJpdmF0aXZlIERhdGFiYXNlIChzdWJqZWN0IHRvIG90aGVyIHJpZ2h0cyBvdmVyIHRoZQorQ29udGVudHMsIHNlZSBTZWN0aW9uIDIuNCkuIFRoZSByZXBlYXRlZCBhbmQgc3lzdGVtYXRpYyBFeHRyYWN0aW9uIG9yCitSZS11dGlsaXNhdGlvbiBvZiBpbnN1YnN0YW50aWFsIHBhcnRzIG9mIHRoZSBDb250ZW50cyBtYXkgaG93ZXZlciBhbW91bnQKK3RvIHRoZSBFeHRyYWN0aW9uIG9yIFJlLXV0aWxpc2F0aW9uIG9mIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUKK0NvbnRlbnRzLgorCisjIyMgNy4wIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworNy4xIFRoZSBEYXRhYmFzZSBpcyBsaWNlbnNlZCBieSB0aGUgTGljZW5zb3IgImFzIGlzIiBhbmQgd2l0aG91dCBhbnkKK3dhcnJhbnR5IG9mIGFueSBraW5kLCBlaXRoZXIgZXhwcmVzcywgaW1wbGllZCwgb3IgYXJpc2luZyBieSBzdGF0dXRlLAorY3VzdG9tLCBjb3Vyc2Ugb2YgZGVhbGluZywgb3IgdHJhZGUgdXNhZ2UuIExpY2Vuc29yIHNwZWNpZmljYWxseQorZGlzY2xhaW1zIGFueSBhbmQgYWxsIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlLAorbm9uLWluZnJpbmdlbWVudCwgYWNjdXJhY3kgb3IgY29tcGxldGVuZXNzLCB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZgorZXJyb3JzLCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSwgbWVyY2hhbnRhYmlsaXR5LCBvciBvdGhlcndpc2UuCitTb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb2YgaW1wbGllZCB3YXJyYW50aWVzLCBzbwordGhpcyBleGNsdXNpb24gbWF5IG5vdCBhcHBseSB0byBZb3UuCisKKyMjIyA4LjAgTGltaXRhdGlvbiBvZiBsaWFiaWxpdHkKKworOC4xIFN1YmplY3QgdG8gYW55IGxpYWJpbGl0eSB0aGF0IG1heSBub3QgYmUgZXhjbHVkZWQgb3IgbGltaXRlZCBieSBsYXcsCit0aGUgTGljZW5zb3IgaXMgbm90IGxpYWJsZSBmb3IsIGFuZCBleHByZXNzbHkgZXhjbHVkZXMsIGFsbCBsaWFiaWxpdHkKK2ZvciBsb3NzIG9yIGRhbWFnZSBob3dldmVyIGFuZCB3aGVuZXZlciBjYXVzZWQgdG8gYW55b25lIGJ5IGFueSB1c2UKK3VuZGVyIHRoaXMgTGljZW5zZSwgd2hldGhlciBieSBZb3Ugb3IgYnkgYW55b25lIGVsc2UsIGFuZCB3aGV0aGVyIGNhdXNlZAorYnkgYW55IGZhdWx0IG9uIHRoZSBwYXJ0IG9mIHRoZSBMaWNlbnNvciBvciBub3QuIFRoaXMgZXhjbHVzaW9uIG9mCitsaWFiaWxpdHkgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgYW55IHNwZWNpYWwsIGluY2lkZW50YWwsCitjb25zZXF1ZW50aWFsLCBwdW5pdGl2ZSwgb3IgZXhlbXBsYXJ5IGRhbWFnZXMgc3VjaCBhcyBsb3NzIG9mIHJldmVudWUsCitkYXRhLCBhbnRpY2lwYXRlZCBwcm9maXRzLCBhbmQgbG9zdCBidXNpbmVzcy4gVGhpcyBleGNsdXNpb24gYXBwbGllcworZXZlbiBpZiB0aGUgTGljZW5zb3IgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaAorZGFtYWdlcy4KKworOC4yIElmIGxpYWJpbGl0eSBtYXkgbm90IGJlIGV4Y2x1ZGVkIGJ5IGxhdywgaXQgaXMgbGltaXRlZCB0byBhY3R1YWwgYW5kCitkaXJlY3QgZmluYW5jaWFsIGxvc3MgdG8gdGhlIGV4dGVudCBpdCBpcyBjYXVzZWQgYnkgcHJvdmVkIG5lZ2xpZ2VuY2Ugb24KK3RoZSBwYXJ0IG9mIHRoZSBMaWNlbnNvci4KKworIyMjIDkuMCBUZXJtaW5hdGlvbiBvZiBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UKKworOS4xIEFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UKK2F1dG9tYXRpY2FsbHkgdGVybWluYXRlcyB0aGlzIExpY2Vuc2Ugd2l0aCBpbW1lZGlhdGUgZWZmZWN0IGFuZCB3aXRob3V0Citub3RpY2UgdG8gWW91LiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgUGVyc29ucyB3aG8gaGF2ZSByZWNlaXZlZCB0aGUKK0RhdGFiYXNlLCB0aGUgd2hvbGUgb3IgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cywgRGVyaXZhdGl2ZQorRGF0YWJhc2VzLCBvciB0aGUgRGF0YWJhc2UgYXMgcGFydCBvZiBhIENvbGxlY3RpdmUgRGF0YWJhc2UgZnJvbSBZb3UKK3VuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQKK3RoZWlyIHVzZSBpcyBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aGlzIExpY2Vuc2Ugb3IgYSBsaWNlbnNlIGdyYW50ZWQKK3VuZGVyIFNlY3Rpb24gNC44IG9mIHRoaXMgTGljZW5zZS4gIFNlY3Rpb25zIDEsIDIsIDcsIDgsIDkgYW5kIDEwIHdpbGwKK3N1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworOS4yIElmIFlvdSBhcmUgbm90IGluIGJyZWFjaCBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aGUgTGljZW5zb3IKK3dpbGwgbm90IHRlcm1pbmF0ZSBZb3VyIHJpZ2h0cyB1bmRlciBpdC4gCisKKzkuMyBVbmxlc3MgdGVybWluYXRlZCB1bmRlciBTZWN0aW9uIDkuMSwgdGhpcyBMaWNlbnNlIGlzIGdyYW50ZWQgdG8gWW91Citmb3IgdGhlIGR1cmF0aW9uIG9mIGFwcGxpY2FibGUgcmlnaHRzIGluIHRoZSBEYXRhYmFzZS4gCisKKzkuNCBSZWluc3RhdGVtZW50IG9mIHJpZ2h0cy4gSWYgeW91IGNlYXNlIGFueSBicmVhY2ggb2YgdGhlIHRlcm1zIGFuZAorY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZW4geW91ciBmdWxsIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UKK3dpbGwgYmUgcmVpbnN0YXRlZDoKKworICBhLiBQcm92aXNpb25hbGx5IGFuZCBzdWJqZWN0IHRvIHBlcm1hbmVudCB0ZXJtaW5hdGlvbiB1bnRpbCB0aGUgNjB0aAorICBkYXkgYWZ0ZXIgY2Vzc2F0aW9uIG9mIGJyZWFjaDsgCisKKyAgYi4gUGVybWFuZW50bHkgb24gdGhlIDYwdGggZGF5IGFmdGVyIGNlc3NhdGlvbiBvZiBicmVhY2ggdW5sZXNzCisgIG90aGVyd2lzZSByZWFzb25hYmx5IG5vdGlmaWVkIGJ5IHRoZSBMaWNlbnNvcjsgb3IKKworICBjLiAgUGVybWFuZW50bHkgaWYgcmVhc29uYWJseSBub3RpZmllZCBieSB0aGUgTGljZW5zb3Igb2YgdGhlCisgIHZpb2xhdGlvbiwgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSBZb3UgaGF2ZSByZWNlaXZlZCBub3RpY2Ugb2YKKyAgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSBmcm9tICB0aGUgTGljZW5zb3IsIGFuZCBZb3UgY3VyZSB0aGUKKyAgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIgeW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCisKK1BlcnNvbnMgc3ViamVjdCB0byBwZXJtYW5lbnQgdGVybWluYXRpb24gb2YgcmlnaHRzIGFyZSBub3QgZWxpZ2libGUgdG8KK2JlIGEgcmVjaXBpZW50IGFuZCByZWNlaXZlIGEgbGljZW5zZSB1bmRlciBTZWN0aW9uIDQuOC4KKworOS41IE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlCit0aGUgRGF0YWJhc2UgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgb3IKK21ha2luZyBhdmFpbGFibGUgdGhlIERhdGFiYXNlLiBSZWxlYXNpbmcgdGhlIERhdGFiYXNlIHVuZGVyIGRpZmZlcmVudAorbGljZW5zZSB0ZXJtcyBvciBzdG9wcGluZyB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBEYXRhYmFzZSB3aWxsIG5vdAord2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcworcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzCitMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzCitzdGF0ZWQgYWJvdmUuCisKKyMjIyAxMC4wIEdlbmVyYWwKKworMTAuMSBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIGludmFsaWQgb3IKK3VuZW5mb3JjZWFibGUsIHRoYXQgbXVzdCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZgordGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIGFuZCBlYWNoCityZW1haW5pbmcgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSB2YWxpZCBhbmQgZW5mb3JjZWQgdG8gdGhlCitmdWxsZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LiAKKworMTAuMiBUaGlzIExpY2Vuc2UgaXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoCityZXNwZWN0IHRvIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlIG92ZXIgdGhlIERhdGFiYXNlLiBJdCByZXBsYWNlcyBhbnkKK2VhcmxpZXIgdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0bwordGhlIERhdGFiYXNlLiAKKworMTAuMyBJZiBZb3UgYXJlIGluIGJyZWFjaCBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBZb3Ugd2lsbCBub3QgYmUKK2VudGl0bGVkIHRvIHJlbHkgb24gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0byBjb21wbGFpbiBvZiBhbnkKK2JyZWFjaCBieSB0aGUgTGljZW5zb3IuIAorCisxMC40IENob2ljZSBvZiBsYXcuIFRoaXMgTGljZW5zZSB0YWtlcyBlZmZlY3QgaW4gYW5kIHdpbGwgYmUgZ292ZXJuZWQgYnkKK3RoZSBsYXdzIG9mIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIExpY2Vuc2UgdGVybXMgYXJlCitzb3VnaHQgdG8gYmUgZW5mb3JjZWQuIElmIHRoZSBzdGFuZGFyZCBzdWl0ZSBvZiByaWdodHMgZ3JhbnRlZCB1bmRlcgorYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3IGFuZCBEYXRhYmFzZSBSaWdodHMgaW4gdGhlIHJlbGV2YW50CitqdXJpc2RpY3Rpb24gaW5jbHVkZXMgYWRkaXRpb25hbCByaWdodHMgbm90IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLAordGhlc2UgYWRkaXRpb25hbCByaWdodHMgYXJlIGdyYW50ZWQgaW4gdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIG1lZXQgdGhlCit0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PRkwtMS4xIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PRkwtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NDRiY2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09GTC0xLjEKQEAgLTAsMCArMSw4OCBAQAorCitTSUwgT1BFTiBGT05UIExJQ0VOU0UKKworVmVyc2lvbiAxLjEgLSAyNiBGZWJydWFyeSAyMDA3CisKK1BSRUFNQkxFCitUaGUgZ29hbHMgb2YgdGhlIE9wZW4gRm9udCBMaWNlbnNlIChPRkwpIGFyZSB0byBzdGltdWxhdGUgd29ybGR3aWRlCitkZXZlbG9wbWVudCBvZiBjb2xsYWJvcmF0aXZlIGZvbnQgcHJvamVjdHMsIHRvIHN1cHBvcnQgdGhlIGZvbnQgY3JlYXRpb24KK2VmZm9ydHMgb2YgYWNhZGVtaWMgYW5kIGxpbmd1aXN0aWMgY29tbXVuaXRpZXMsIGFuZCB0byBwcm92aWRlIGEgZnJlZSBhbmQKK29wZW4gZnJhbWV3b3JrIGluIHdoaWNoIGZvbnRzIG1heSBiZSBzaGFyZWQgYW5kIGltcHJvdmVkIGluIHBhcnRuZXJzaGlwCit3aXRoIG90aGVycy4KKworVGhlIE9GTCBhbGxvd3MgdGhlIGxpY2Vuc2VkIGZvbnRzIHRvIGJlIHVzZWQsIHN0dWRpZWQsIG1vZGlmaWVkIGFuZAorcmVkaXN0cmlidXRlZCBmcmVlbHkgYXMgbG9uZyBhcyB0aGV5IGFyZSBub3Qgc29sZCBieSB0aGVtc2VsdmVzLiBUaGUKK2ZvbnRzLCBpbmNsdWRpbmcgYW55IGRlcml2YXRpdmUgd29ya3MsIGNhbiBiZSBidW5kbGVkLCBlbWJlZGRlZCwgCityZWRpc3RyaWJ1dGVkIGFuZC9vciBzb2xkIHdpdGggYW55IHNvZnR3YXJlIHByb3ZpZGVkIHRoYXQgYW55IHJlc2VydmVkCituYW1lcyBhcmUgbm90IHVzZWQgYnkgZGVyaXZhdGl2ZSB3b3Jrcy4gVGhlIGZvbnRzIGFuZCBkZXJpdmF0aXZlcywKK2hvd2V2ZXIsIGNhbm5vdCBiZSByZWxlYXNlZCB1bmRlciBhbnkgb3RoZXIgdHlwZSBvZiBsaWNlbnNlLiBUaGUKK3JlcXVpcmVtZW50IGZvciBmb250cyB0byByZW1haW4gdW5kZXIgdGhpcyBsaWNlbnNlIGRvZXMgbm90IGFwcGx5Cit0byBhbnkgZG9jdW1lbnQgY3JlYXRlZCB1c2luZyB0aGUgZm9udHMgb3IgdGhlaXIgZGVyaXZhdGl2ZXMuCisKK0RFRklOSVRJT05TCisiRm9udCBTb2Z0d2FyZSIgcmVmZXJzIHRvIHRoZSBzZXQgb2YgZmlsZXMgcmVsZWFzZWQgYnkgdGhlIENvcHlyaWdodAorSG9sZGVyKHMpIHVuZGVyIHRoaXMgbGljZW5zZSBhbmQgY2xlYXJseSBtYXJrZWQgYXMgc3VjaC4gVGhpcyBtYXkKK2luY2x1ZGUgc291cmNlIGZpbGVzLCBidWlsZCBzY3JpcHRzIGFuZCBkb2N1bWVudGF0aW9uLgorCisiUmVzZXJ2ZWQgRm9udCBOYW1lIiByZWZlcnMgdG8gYW55IG5hbWVzIHNwZWNpZmllZCBhcyBzdWNoIGFmdGVyIHRoZQorY29weXJpZ2h0IHN0YXRlbWVudChzKS4KKworIk9yaWdpbmFsIFZlcnNpb24iIHJlZmVycyB0byB0aGUgY29sbGVjdGlvbiBvZiBGb250IFNvZnR3YXJlIGNvbXBvbmVudHMgYXMKK2Rpc3RyaWJ1dGVkIGJ5IHRoZSBDb3B5cmlnaHQgSG9sZGVyKHMpLgorCisiTW9kaWZpZWQgVmVyc2lvbiIgcmVmZXJzIHRvIGFueSBkZXJpdmF0aXZlIG1hZGUgYnkgYWRkaW5nIHRvLCBkZWxldGluZywKK29yIHN1YnN0aXR1dGluZyAtLSBpbiBwYXJ0IG9yIGluIHdob2xlIC0tIGFueSBvZiB0aGUgY29tcG9uZW50cyBvZiB0aGUKK09yaWdpbmFsIFZlcnNpb24sIGJ5IGNoYW5naW5nIGZvcm1hdHMgb3IgYnkgcG9ydGluZyB0aGUgRm9udCBTb2Z0d2FyZSB0byBhCituZXcgZW52aXJvbm1lbnQuCisKKyJBdXRob3IiIHJlZmVycyB0byBhbnkgZGVzaWduZXIsIGVuZ2luZWVyLCBwcm9ncmFtbWVyLCB0ZWNobmljYWwKK3dyaXRlciBvciBvdGhlciBwZXJzb24gd2hvIGNvbnRyaWJ1dGVkIHRvIHRoZSBGb250IFNvZnR3YXJlLgorCitQRVJNSVNTSU9OICYgQ09ORElUSU9OUworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCithIGNvcHkgb2YgdGhlIEZvbnQgU29mdHdhcmUsIHRvIHVzZSwgc3R1ZHksIGNvcHksIG1lcmdlLCBlbWJlZCwgbW9kaWZ5LAorcmVkaXN0cmlidXRlLCBhbmQgc2VsbCBtb2RpZmllZCBhbmQgdW5tb2RpZmllZCBjb3BpZXMgb2YgdGhlIEZvbnQKK1NvZnR3YXJlLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworMSkgTmVpdGhlciB0aGUgRm9udCBTb2Z0d2FyZSBub3IgYW55IG9mIGl0cyBpbmRpdmlkdWFsIGNvbXBvbmVudHMsCitpbiBPcmlnaW5hbCBvciBNb2RpZmllZCBWZXJzaW9ucywgbWF5IGJlIHNvbGQgYnkgaXRzZWxmLgorCisyKSBPcmlnaW5hbCBvciBNb2RpZmllZCBWZXJzaW9ucyBvZiB0aGUgRm9udCBTb2Z0d2FyZSBtYXkgYmUgYnVuZGxlZCwKK3JlZGlzdHJpYnV0ZWQgYW5kL29yIHNvbGQgd2l0aCBhbnkgc29mdHdhcmUsIHByb3ZpZGVkIHRoYXQgZWFjaCBjb3B5Citjb250YWlucyB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBsaWNlbnNlLiBUaGVzZSBjYW4gYmUKK2luY2x1ZGVkIGVpdGhlciBhcyBzdGFuZC1hbG9uZSB0ZXh0IGZpbGVzLCBodW1hbi1yZWFkYWJsZSBoZWFkZXJzIG9yCitpbiB0aGUgYXBwcm9wcmlhdGUgbWFjaGluZS1yZWFkYWJsZSBtZXRhZGF0YSBmaWVsZHMgd2l0aGluIHRleHQgb3IKK2JpbmFyeSBmaWxlcyBhcyBsb25nIGFzIHRob3NlIGZpZWxkcyBjYW4gYmUgZWFzaWx5IHZpZXdlZCBieSB0aGUgdXNlci4KKworMykgTm8gTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRm9udCBTb2Z0d2FyZSBtYXkgdXNlIHRoZSBSZXNlcnZlZCBGb250CitOYW1lKHMpIHVubGVzcyBleHBsaWNpdCB3cml0dGVuIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCBieSB0aGUgY29ycmVzcG9uZGluZworQ29weXJpZ2h0IEhvbGRlci4gVGhpcyByZXN0cmljdGlvbiBvbmx5IGFwcGxpZXMgdG8gdGhlIHByaW1hcnkgZm9udCBuYW1lIGFzCitwcmVzZW50ZWQgdG8gdGhlIHVzZXJzLgorCis0KSBUaGUgbmFtZShzKSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlcihzKSBvciB0aGUgQXV0aG9yKHMpIG9mIHRoZSBGb250CitTb2Z0d2FyZSBzaGFsbCBub3QgYmUgdXNlZCB0byBwcm9tb3RlLCBlbmRvcnNlIG9yIGFkdmVydGlzZSBhbnkKK01vZGlmaWVkIFZlcnNpb24sIGV4Y2VwdCB0byBhY2tub3dsZWRnZSB0aGUgY29udHJpYnV0aW9uKHMpIG9mIHRoZQorQ29weXJpZ2h0IEhvbGRlcihzKSBhbmQgdGhlIEF1dGhvcihzKSBvciB3aXRoIHRoZWlyIGV4cGxpY2l0IHdyaXR0ZW4KK3Blcm1pc3Npb24uCisKKzUpIFRoZSBGb250IFNvZnR3YXJlLCBtb2RpZmllZCBvciB1bm1vZGlmaWVkLCBpbiBwYXJ0IG9yIGluIHdob2xlLAorbXVzdCBiZSBkaXN0cmlidXRlZCBlbnRpcmVseSB1bmRlciB0aGlzIGxpY2Vuc2UsIGFuZCBtdXN0IG5vdCBiZQorZGlzdHJpYnV0ZWQgdW5kZXIgYW55IG90aGVyIGxpY2Vuc2UuIFRoZSByZXF1aXJlbWVudCBmb3IgZm9udHMgdG8KK3JlbWFpbiB1bmRlciB0aGlzIGxpY2Vuc2UgZG9lcyBub3QgYXBwbHkgdG8gYW55IGRvY3VtZW50IGNyZWF0ZWQKK3VzaW5nIHRoZSBGb250IFNvZnR3YXJlLgorCitURVJNSU5BVElPTgorVGhpcyBsaWNlbnNlIGJlY29tZXMgbnVsbCBhbmQgdm9pZCBpZiBhbnkgb2YgdGhlIGFib3ZlIGNvbmRpdGlvbnMgYXJlCitub3QgbWV0LgorCitESVNDTEFJTUVSCitUSEUgRk9OVCBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIEFOWSBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQKK09GIENPUFlSSUdIVCwgUEFURU5ULCBUUkFERU1BUkssIE9SIE9USEVSIFJJR0hULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0NPUFlSSUdIVCBIT0xERVIgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCitGUk9NLCBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBGT05UIFNPRlRXQVJFIE9SIEZST00KK09USEVSIERFQUxJTkdTIElOIFRIRSBGT05UIFNPRlRXQVJFLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09HVFNMIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PR1RTTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTBjYWQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PR1RTTApAQCAtMCwwICsxLDEyMCBAQAorCitUaGUgT3BlbiBHcm91cCBUZXN0IFN1aXRlIExpY2Vuc2UKKworUHJlYW1ibGUKKworVGhlIGludGVudCBvZiB0aGlzIGRvY3VtZW50IGlzIHRvIHN0YXRlIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoCithIFBhY2thZ2UgbWF5IGJlIGNvcGllZCwgc3VjaCB0aGF0IHRoZSBDb3B5cmlnaHQgSG9sZGVyIG1haW50YWlucworc29tZSBzZW1ibGFuY2Ugb2YgYXJ0aXN0aWMgY29udHJvbCBvdmVyIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUKK3BhY2thZ2UsIHdoaWxlIGdpdmluZyB0aGUgdXNlcnMgb2YgdGhlIHBhY2thZ2UgdGhlIHJpZ2h0IHRvIHVzZSBhbmQKK2Rpc3RyaWJ1dGUgdGhlIFBhY2thZ2UgaW4gYSBtb3JlLW9yLWxlc3MgY3VzdG9tYXJ5IGZhc2hpb24sIHBsdXMKK3RoZSByaWdodCB0byBtYWtlIHJlYXNvbmFibGUgbW9kaWZpY2F0aW9ucy4KKworVGVzdGluZyBpcyBlc3NlbnRpYWwgZm9yIHByb3BlciBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2Ugb2YKK3N0YW5kYXJkcy1iYXNlZCBwcm9kdWN0cy4KKworRm9yIGJ1eWVyczogYWRlcXVhdGUgY29uZm9ybWFuY2UgdGVzdGluZyBsZWFkcyB0byByZWR1Y2VkCitpbnRlZ3JhdGlvbiBjb3N0cyBhbmQgcHJvdGVjdGlvbiBvZiBpbnZlc3RtZW50cyBpbiBhcHBsaWNhdGlvbnMsCitzb2Z0d2FyZSBhbmQgcGVvcGxlLgorCitGb3Igc29mdHdhcmUgZGV2ZWxvcGVyczogY29uZm9ybWFuY2UgdGVzdGluZyBvZiBwbGF0Zm9ybXMgYW5kCittaWRkbGV3YXJlIGdyZWF0bHkgcmVkdWNlcyB0aGUgY29zdCBvZiBkZXZlbG9waW5nIGFuZCBtYWludGFpbmluZworbXVsdGktcGxhdGZvcm0gYXBwbGljYXRpb24gc29mdHdhcmUuCisKK0ZvciBzdXBwbGllcnM6IEluLWRlcHRoIHRlc3RpbmcgaW5jcmVhc2VzIGN1c3RvbWVyIHNhdGlzZmFjdGlvbiBhbmQKK2tlZXBzIGRldmVsb3BtZW50IGFuZCBzdXBwb3J0IGNvc3RzIGluIGNoZWNrLiBBUEkgY29uZm9ybWFuY2UgaXMKK2hpZ2hseSBtZWFzdXJhYmxlIGFuZCBzdXBwbGllcnMgd2hvIGNsYWltIGl0IG11c3QgYmUgYWJsZSB0bworc3Vic3RhbnRpYXRlIHRoYXQgY2xhaW0uCisKK0FzIHN1Y2gsIHNpbmNlIHRoZXNlIGFyZSBiZW5jaG1hcmsgbWVhc3VyZXMgb2YgY29uZm9ybWFuY2UsIHdlIGZlZWwKK3RoZSBpbnRlZ3JpdHkgb2YgdGVzdCB0b29scyBpcyBvZiBpbXBvcnRhbmNlLiBJbiBvcmRlciB0byBwcmVzZXJ2ZQordGhlIGludGVncml0eSBvZiB0aGUgZXhpc3RpbmcgY29uZm9ybWFuY2UgbW9kZXMgb2YgdGhpcyB0ZXN0CitwYWNrYWdlIGFuZCB0byBwZXJtaXQgcmVjaXBpZW50cyBvZiBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzCitwYWNrYWdlIHRvIHJ1biB0aGUgb3JpZ2luYWwgdGVzdCBtb2RlcywgdGhpcyBsaWNlbnNlIHJlcXVpcmVzIHRoYXQKK3RoZSBvcmlnaW5hbCB0ZXN0IG1vZGVzIGJlIHByZXNlcnZlZC4KKworSWYgeW91IGZpbmQgYSBidWcgaW4gb25lIG9mIHRoZSBzdGFuZGFyZHMgbW9kZSB0ZXN0IGNhc2VzLCBwbGVhc2UKK2xldCB1cyBrbm93IHNvIHdlIGNhbiBmZWVkIHRoaXMgYmFjayBpbnRvIHRoZSBvcmlnaW5hbCwgYW5kIGFsc28KK3JhaXNlIGFueSBzcGVjaWZpY2F0aW9uIGlzc3VlcyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBib2RpZXMgKGZvcgorZXhhbXBsZSB0aGUgUE9TSVggY29tbWl0dGVlcykuCisKK0RlZmluaXRpb25zOiAKKworICAgICAiUGFja2FnZSIgcmVmZXJzIHRvIHRoZSBjb2xsZWN0aW9uIG9mIGZpbGVzIGRpc3RyaWJ1dGVkIGJ5IHRoZQorICAgICBDb3B5cmlnaHQgSG9sZGVyLCBhbmQgZGVyaXZhdGl2ZXMgb2YgdGhhdCBjb2xsZWN0aW9uIG9mIGZpbGVzCisgICAgIGNyZWF0ZWQgdGhyb3VnaCB0ZXh0dWFsIG1vZGlmaWNhdGlvbi4gCisgICAgICJTdGFuZGFyZCBWZXJzaW9uIiByZWZlcnMgdG8gc3VjaCBhIFBhY2thZ2UgaWYgaXQgaGFzIG5vdCBiZWVuCisgICAgIG1vZGlmaWVkLCBvciBoYXMgYmVlbiBtb2RpZmllZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHdpc2hlcworICAgICBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlci4gCisgICAgICJDb3B5cmlnaHQgSG9sZGVyIiBpcyB3aG9ldmVyIGlzIG5hbWVkIGluIHRoZSBjb3B5cmlnaHQgb3IKKyAgICAgY29weXJpZ2h0cyBmb3IgdGhlIHBhY2thZ2UuICJZb3UiIGlzIHlvdSwgaWYgeW91YHJlIHRoaW5raW5nCisgICAgIGFib3V0IGNvcHlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoaXMgUGFja2FnZS4gCisgICAgICJSZWFzb25hYmxlIGNvcHlpbmcgZmVlIiBpcyB3aGF0ZXZlciB5b3UgY2FuIGp1c3RpZnkgb24gdGhlCisgICAgIGJhc2lzIG9mIG1lZGlhIGNvc3QsIGR1cGxpY2F0aW9uIGNoYXJnZXMsIHRpbWUgb2YgcGVvcGxlCisgICAgIGludm9sdmVkLCBhbmQgc28gb24uIChZb3Ugd2lsbCBub3QgYmUgcmVxdWlyZWQgdG8ganVzdGlmeSBpdAorICAgICB0byB0aGUgQ29weXJpZ2h0IEhvbGRlciwgYnV0IG9ubHkgdG8gdGhlIGNvbXB1dGluZyBjb21tdW5pdHkKKyAgICAgYXQgbGFyZ2UgYXMgYSBtYXJrZXQgdGhhdCBtdXN0IGJlYXIgdGhlIGZlZS4pIAorICAgICAiRnJlZWx5IEF2YWlsYWJsZSIgbWVhbnMgdGhhdCBubyBmZWUgaXMgY2hhcmdlZCBmb3IgdGhlIGl0ZW0KKyAgICAgaXRzZWxmLCB0aG91Z2ggdGhlcmUgbWF5IGJlIGZlZXMgaW52b2x2ZWQgaW4gaGFuZGxpbmcgdGhlCisgICAgIGl0ZW0uIEl0IGFsc28gbWVhbnMgdGhhdCByZWNpcGllbnRzIG9mIHRoZSBpdGVtIG1heQorICAgICByZWRpc3RyaWJ1dGUgaXQgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyB0aGV5IHJlY2VpdmVkIGl0LiAKKworMS4gWW91IG1heSBtYWtlIGFuZCBnaXZlIGF3YXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBzb3VyY2UgZm9ybSBvZgordGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhpcyBQYWNrYWdlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIHByb3ZpZGVkCit0aGF0IHlvdSBkdXBsaWNhdGUgYWxsIG9mIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlcyBhbmQKK2Fzc29jaWF0ZWQgZGlzY2xhaW1lcnMuCisKKzIuIFlvdSBtYXkgYXBwbHkgYnVnIGZpeGVzLCBwb3J0YWJpbGl0eSBmaXhlcyBhbmQgb3RoZXIKK21vZGlmaWNhdGlvbnMgZGVyaXZlZCBmcm9tIHRoZSBQdWJsaWMgRG9tYWluIG9yIGZyb20gdGhlIENvcHlyaWdodAorSG9sZGVyLiBBIFBhY2thZ2UgbW9kaWZpZWQgaW4gc3VjaCBhIHdheSBzaGFsbCBzdGlsbCBiZSBjb25zaWRlcmVkCit0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworMy4gWW91IG1heSBvdGhlcndpc2UgbW9kaWZ5IHlvdXIgY29weSBvZiB0aGlzIFBhY2thZ2UgaW4gYW55IHdheSwKK3Byb3ZpZGVkIHRoYXQgeW91IGluc2VydCBhIHByb21pbmVudCBub3RpY2UgaW4gZWFjaCBjaGFuZ2VkIGZpbGUKK3N0YXRpbmcgaG93IGFuZCB3aGVuIHlvdSBjaGFuZ2VkIHRoYXQgZmlsZSwgYW5kIHByb3ZpZGVkIHRoYXQgeW91CitkbyBhdCBsZWFzdCB0aGUgZm9sbG93aW5nOgorCisgICAgIHJlbmFtZSBhbnkgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIGFuZCB0ZXN0Y2FzZXMgc28gdGhlCisgICAgIG5hbWVzIGRvIG5vdCBjb25mbGljdCB3aXRoIHN0YW5kYXJkIGV4ZWN1dGFibGVzIGFuZAorICAgICB0ZXN0Y2FzZXMsIHdoaWNoIG11c3QgYWxzbyBiZSBwcm92aWRlZCwgYW5kIHByb3ZpZGUgYQorICAgICBzZXBhcmF0ZSBtYW51YWwgcGFnZSBmb3IgZWFjaCBub24tc3RhbmRhcmQgZXhlY3V0YWJsZSBhbmQKKyAgICAgdGVzdGNhc2UgdGhhdCBjbGVhcmx5IGRvY3VtZW50cyBob3cgaXQgZGlmZmVycyBmcm9tIHRoZQorICAgICBTdGFuZGFyZCBWZXJzaW9uLgorCis0LiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIHByb2dyYW1zIG9mIHRoaXMgUGFja2FnZSBpbiBvYmplY3QgY29kZQorb3IgZXhlY3V0YWJsZSBmb3JtLCBwcm92aWRlZCB0aGF0IHlvdSBkbyBhdCBsZWFzdCB0aGUgZm9sbG93aW5nOiAKKworICAgICBhY2NvbXBhbnkgYW55IG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBhbmQgdGVzdGNhc2VzIHdpdGgKKyAgICAgdGhlaXIgY29ycmVzcG9uZGluZyBTdGFuZGFyZCBWZXJzaW9uIGV4ZWN1dGFibGVzIGFuZAorICAgICB0ZXN0Y2FzZXMsIGdpdmluZyB0aGUgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIGFuZAorICAgICB0ZXN0Y2FzZXMgbm9uLXN0YW5kYXJkIG5hbWVzLCBhbmQgY2xlYXJseSBkb2N1bWVudGluZyB0aGUKKyAgICAgZGlmZmVyZW5jZXMgaW4gbWFudWFsIHBhZ2VzIChvciBlcXVpdmFsZW50KSwgdG9nZXRoZXIgd2l0aAorICAgICBpbnN0cnVjdGlvbnMgb24gd2hlcmUgdG8gZ2V0IHRoZSBTdGFuZGFyZCBWZXJzaW9uLgorCis1LiBZb3UgbWF5IGNoYXJnZSBhIHJlYXNvbmFibGUgY29weWluZyBmZWUgZm9yIGFueSBkaXN0cmlidXRpb24gb2YKK3RoaXMgUGFja2FnZS4gWW91IG1heSBjaGFyZ2UgYW55IGZlZSB5b3UgY2hvb3NlIGZvciBzdXBwb3J0IG9mIHRoaXMKK1BhY2thZ2UuIFlvdSBtYXkgbm90IGNoYXJnZSBhIGZlZSBmb3IgdGhpcyBQYWNrYWdlIGl0c2VsZi4gSG93ZXZlciwKK3lvdSBtYXkgZGlzdHJpYnV0ZSB0aGlzIFBhY2thZ2UgaW4gYWdncmVnYXRlIHdpdGggb3RoZXIgKHBvc3NpYmx5Citjb21tZXJjaWFsKSBwcm9ncmFtcyBhcyBwYXJ0IG9mIGEgbGFyZ2VyIChwb3NzaWJseSBjb21tZXJjaWFsKQorc29mdHdhcmUgZGlzdHJpYnV0aW9uIHByb3ZpZGVkIHRoYXQgeW91IGRvIG5vdCBhZHZlcnRpc2UgdGhpcworUGFja2FnZSBhcyBhIHByb2R1Y3Qgb2YgeW91ciBvd24uCisKKzYuIFRoZSBzY3JpcHRzIGFuZCBsaWJyYXJ5IGZpbGVzIHN1cHBsaWVkIGFzIGlucHV0IHRvIG9yIHByb2R1Y2VkCithcyBvdXRwdXQgZnJvbSB0aGUgcHJvZ3JhbXMgb2YgdGhpcyBQYWNrYWdlIGRvIG5vdCBhdXRvbWF0aWNhbGx5CitmYWxsIHVuZGVyIHRoZSBjb3B5cmlnaHQgb2YgdGhpcyBQYWNrYWdlLCBidXQgYmVsb25nIHRvIHdob21ldmVyCitnZW5lcmF0ZWQgdGhlbSwgYW5kIG1heSBiZSBzb2xkIGNvbW1lcmNpYWxseSwgYW5kIG1heSBiZSBhZ2dyZWdhdGVkCit3aXRoIHRoaXMgUGFja2FnZS4KKworNy5TdWJyb3V0aW5lcyBzdXBwbGllZCBieSB5b3UgYW5kIGxpbmtlZCBpbnRvIHRoaXMgUGFja2FnZSBzaGFsbAorbm90IGJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGlzIFBhY2thZ2UuIAorCis4LiBUaGUgbmFtZSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvcgorcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCit3cml0dGVuIHBlcm1pc3Npb24uCisKKzkuIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCitUaGUgRW5kCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0xEQVAtMi44IGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PTERBUC0yLjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUyNTNkYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0xEQVAtMi44CkBAIC0wLDAgKzEsNDkgQEAKKworVGhlIE9wZW5MREFQIFB1YmxpYyBMaWNlbnNlCisgIFZlcnNpb24gMi44LCAxNyBBdWd1c3QgMjAwMworCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorKCJTb2Z0d2FyZSIpLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkCit0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisxLiBSZWRpc3RyaWJ1dGlvbnMgaW4gc291cmNlIGZvcm0gbXVzdCByZXRhaW4gY29weXJpZ2h0IHN0YXRlbWVudHMKKyAgIGFuZCBub3RpY2VzLAorCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXBwbGljYWJsZSBjb3B5cmlnaHQKKyAgIHN0YXRlbWVudHMgYW5kIG5vdGljZXMsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgICB3aXRoIHRoZSBkaXN0cmlidXRpb24sIGFuZAorCiszLiBSZWRpc3RyaWJ1dGlvbnMgbXVzdCBjb250YWluIGEgdmVyYmF0aW0gY29weSBvZiB0aGlzIGRvY3VtZW50LgorCitUaGUgT3BlbkxEQVAgRm91bmRhdGlvbiBtYXkgcmV2aXNlIHRoaXMgbGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4KK0VhY2ggcmV2aXNpb24gaXMgZGlzdGluZ3Vpc2hlZCBieSBhIHZlcnNpb24gbnVtYmVyLiAgWW91IG1heSB1c2UKK3RoaXMgU29mdHdhcmUgdW5kZXIgdGVybXMgb2YgdGhpcyBsaWNlbnNlIHJldmlzaW9uIG9yIHVuZGVyIHRoZQordGVybXMgb2YgYW55IHN1YnNlcXVlbnQgcmV2aXNpb24gb2YgdGhlIGxpY2Vuc2UuCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9QRU5MREFQIEZPVU5EQVRJT04gQU5EIElUUworQ09OVFJJQlVUT1JTIGBgQVMgSVNgYCBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCitJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKK0FORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UCitTSEFMTCBUSEUgT1BFTkxEQVAgRk9VTkRBVElPTiwgSVRTIENPTlRSSUJVVE9SUywgT1IgVEhFIEFVVEhPUihTKQorT1IgT1dORVIoUykgT0YgVEhFIFNPRlRXQVJFIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgorQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworVGhlIG5hbWVzIG9mIHRoZSBhdXRob3JzIGFuZCBjb3B5cmlnaHQgaG9sZGVycyBtdXN0IG5vdCBiZSB1c2VkIGluCithZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmcKK2luIHRoaXMgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgVGl0bGUKK3RvIGNvcHlyaWdodCBpbiB0aGlzIFNvZnR3YXJlIHNoYWxsIGF0IGFsbCB0aW1lcyByZW1haW4gd2l0aCBjb3B5cmlnaHQKK2hvbGRlcnMuCisKK09wZW5MREFQIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgdGhlIE9wZW5MREFQIEZvdW5kYXRpb24uCisKK0NvcHlyaWdodCAxOTk5LTIwMDMgVGhlIE9wZW5MREFQIEZvdW5kYXRpb24sIFJlZHdvb2QgQ2l0eSwKK0NhbGlmb3JuaWEsIFVTQS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICBQZXJtaXNzaW9uIHRvIGNvcHkgYW5kCitkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGRvY3VtZW50IGlzIGdyYW50ZWQuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT1NMLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT1NMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWFkMGRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PU0wtMS4wCkBAIC0wLDAgKzEsMTY0IEBACisKK1RoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UKK3YuIDEuMAorCitUaGlzIE9wZW4gU29mdHdhcmUgTGljZW5zZSAodGhlICJMaWNlbnNlIikgYXBwbGllcyB0byBhbnkgb3JpZ2luYWwKK3dvcmsgb2YgYXV0aG9yc2hpcCAodGhlICJPcmlnaW5hbCBXb3JrIikgd2hvc2Ugb3duZXIgKHRoZSAiTGljZW5zb3IiKQoraGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodAorbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazogIkxpY2Vuc2VkIHVuZGVyIHRoZSBPcGVuIFNvZnR3YXJlCitMaWNlbnNlIHZlcnNpb24gMS4wIgorCitMaWNlbnNlIFRlcm1zCisKKzEpIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhCit3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgbm9uLXN1YmxpY2Vuc2VhYmxlCitsaWNlbnNlIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKK2EpIHRvIHJlcHJvZHVjZSB0aGUgT3JpZ2luYWwgV29yayBpbiBjb3BpZXM7CisKK2IpIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyAoIkRlcml2YXRpdmUgV29ya3MiKSBiYXNlZCB1cG9uIHRoZQorT3JpZ2luYWwgV29yazsKKworYykgdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MKK3RvIHRoZSBwdWJsaWMsIHdpdGggdGhlIHByb3Zpc28gdGhhdCBjb3BpZXMgb2YgT3JpZ2luYWwgV29yayBvcgorRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIHNoYWxsIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZQorT3BlbiBTb2Z0d2FyZSBMaWNlbnNlOworCitkKSB0byBwZXJmb3JtIHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5OyBhbmQKKworZSkgdG8gZGlzcGxheSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseS4KKworMikgR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwKK3JveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBub24tc3VibGljZW5zZWFibGUgbGljZW5zZSwKK3VuZGVyIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUKK2VtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCBXb3JrIGFzIGZ1cm5pc2hlZCBieSB0aGUgTGljZW5zb3IgKCJMaWNlbnNlZAorQ2xhaW1zIikgdG8gbWFrZSwgdXNlLCBzZWxsIGFuZCBvZmZlciBmb3Igc2FsZSB0aGUgT3JpZ2luYWwgV29yay4KK0xpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLAorcGVycGV0dWFsLCBub24tc3VibGljZW5zZWFibGUgbGljZW5zZSB1bmRlciB0aGUgTGljZW5zZWQgQ2xhaW1zIHRvCittYWtlLCB1c2UsIHNlbGwgYW5kIG9mZmVyIGZvciBzYWxlIERlcml2YXRpdmUgV29ya3MuCisKKzMpIEdyYW50IG9mIFNvdXJjZSBDb2RlIExpY2Vuc2UuIFRoZSB0ZXJtICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlCitwcmVmZXJyZWQgZm9ybSBvZiB0aGUgT3JpZ2luYWwgV29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQgYW5kCithbGwgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gZGVzY3JpYmluZyBob3cgdG8gYWNjZXNzIGFuZCBtb2RpZnkgdGhlCitPcmlnaW5hbCBXb3JrLiBMaWNlbnNvciBoZXJlYnkgYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlCitjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZgordGhlIE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBkaXN0cmlidXRlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlCityaWdodCB0byBzYXRpc2Z5IHRoaXMgb2JsaWdhdGlvbiBieSBwbGFjaW5nIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mCit0aGUgU291cmNlIENvZGUgaW4gYW4gaW5mb3JtYXRpb24gcmVwb3NpdG9yeSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8KK3Blcm1pdCBpbmV4cGVuc2l2ZSBhbmQgY29udmVuaWVudCBhY2Nlc3MgYnkgWW91IGZvciBhcyBsb25nIGFzCitMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgV29yaywgYW5kIGJ5IHB1Ymxpc2hpbmcKK3RoZSBhZGRyZXNzIG9mIHRoYXQgaW5mb3JtYXRpb24gcmVwb3NpdG9yeSBpbiBhIG5vdGljZSBpbW1lZGlhdGVseQorZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIHRoYXQgYXBwbGllcyB0byB0aGUgT3JpZ2luYWwgV29yay4KKworNCkgRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlCitkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZQorc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIExpY2Vuc29yIGV4Y2VwdCBhcworZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4uIE5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gbWFrZSwgdXNlLAorc2VsbCBvciBvZmZlciB0byBzZWxsIGVtYm9kaW1lbnRzIG9mIGFueSBwYXRlbnQgY2xhaW1zIG90aGVyIHRoYW4gdGhlCitMaWNlbnNlZCBDbGFpbXMgZGVmaW5lZCBpbiBTZWN0aW9uIDIuIE5vIHJpZ2h0IGlzIGdyYW50ZWQgdG8gdGhlCit0cmFkZW1hcmtzIG9mIExpY2Vuc29yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsCitXb3JrLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdAorTGljZW5zb3IgZnJvbSBsaWNlbnNpbmcgdW5kZXIgZGlmZmVyZW50IHRlcm1zIGZyb20gdGhpcyBMaWNlbnNlIGFueQorT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4KKworNSkgRXh0ZXJuYWwgRGVwbG95bWVudC4gVGhlIHRlcm0gIkV4dGVybmFsIERlcGxveW1lbnQiIG1lYW5zIHRoZSB1c2UKK29yIGRpc3RyaWJ1dGlvbiBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIGluIGFueSB3YXkKK3N1Y2ggdGhhdCB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIG1heSBiZSBhY2Nlc3NlZCBvcgordXNlZCBieSBhbnlvbmUgb3RoZXIgdGhhbiBZb3UsIHdoZXRoZXIgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZQorV29ya3MgYXJlIGRpc3RyaWJ1dGVkIHRvIHRob3NlIHBlcnNvbnMsIG1hZGUgYXZhaWxhYmxlIGFzIGFuCithcHBsaWNhdGlvbiBpbnRlbmRlZCBmb3IgdXNlIG92ZXIgYSBjb21wdXRlciBuZXR3b3JrLCBvciB1c2VkIHRvCitwcm92aWRlIHNlcnZpY2VzIG9yIG90aGVyd2lzZSBkZWxpdmVyIGNvbnRlbnQgdG8gYW55b25lIG90aGVyIHRoYW4KK1lvdS4gQXMgYW4gZXhwcmVzcyBjb25kaXRpb24gZm9yIHRoZSBncmFudHMgb2YgbGljZW5zZSBoZXJldW5kZXIsIFlvdQorYWdyZWUgdGhhdCBhbnkgRXh0ZXJuYWwgRGVwbG95bWVudCBieSBZb3Ugc2hhbGwgYmUgZGVlbWVkIGEKK2Rpc3RyaWJ1dGlvbiBhbmQgc2hhbGwgYmUgbGljZW5zZWQgdG8gYWxsIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlLCBhcyBwcmVzY3JpYmVkIGluIHNlY3Rpb24gMShjKSBoZXJlaW4uCisKKzYpIFdhcnJhbnR5IGFuZCBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBMSUNFTlNPUiBXQVJSQU5UUyBUSEFUIFRIRQorQ09QWVJJR0hUIElOIEFORCBUTyBUSEUgT1JJR0lOQUwgV09SSyBJUyBPV05FRCBCWSBUSEUgTElDRU5TT1IgT1IgVEhBVAorVEhFIE9SSUdJTkFMIFdPUksgSVMgRElTVFJJQlVURUQgQlkgTElDRU5TT1IgVU5ERVIgQSBWQUxJRCBDVVJSRU5UCitMSUNFTlNFIEZST00gVEhFIENPUFlSSUdIVCBPV05FUi4gRVhDRVBUIEFTIEVYUFJFU1NMWSBTVEFURUQgSU4gVEhFCitJTU1FRElBVEVMWSBQUkVDRUVESU5HIFNFTlRFTkNFLCBUSEUgT1JJR0lOQUwgV09SSyBJUyBQUk9WSURFRCBVTkRFUgorVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFksIEVJVEhFUiBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIFdBUlJBTlRZIE9GCitOT04tSU5GUklOR0VNRU5UIEFORCBXQVJSQU5USUVTIFRIQVQgVEhFIE9SSUdJTkFMIFdPUksgSVMgTUVSQ0hBTlRBQkxFCitPUiBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgT0YKK1RIRSBPUklHSU5BTCBXT1JLIElTIFdJVEggWU9VLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMKK0FOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gTElDRU5TRSBUTyBPUklHSU5BTCBXT1JLIElTCitHUkFOVEVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCis3KSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwKK1RIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsCitTSEFMTCBUSEUgTElDRU5TT1IgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgQVJJU0lORworQVMgQSBSRVNVTFQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIE9SSUdJTkFMIFdPUksgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLAorQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTAorREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQRVJTT04gU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVAorQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSAorUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0gKK0xJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUgorTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04KK0FORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis4KSBBY2NlcHRhbmNlIGFuZCBUZXJtaW5hdGlvbi4gTm90aGluZyBlbHNlIGJ1dCB0aGlzIExpY2Vuc2UgKG9yCithbm90aGVyIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4gTGljZW5zb3IgYW5kIFlvdSkgZ3JhbnRzIFlvdQorcGVybWlzc2lvbiB0byBjcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrLAorYW5kIGFueSBhdHRlbXB0IHRvIGRvIHNvIGV4Y2VwdCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIChvcgorYW5vdGhlciB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIExpY2Vuc29yIGFuZCBZb3UpIGlzIGV4cHJlc3NseQorcHJvaGliaXRlZCBieSBVLlMuIGNvcHlyaWdodCBsYXcsIHRoZSBlcXVpdmFsZW50IGxhd3Mgb2Ygb3RoZXIKK2NvdW50cmllcywgYW5kIGJ5IGludGVybmF0aW9uYWwgdHJlYXR5LiBUaGVyZWZvcmUsIGJ5IGV4ZXJjaXNpbmcgYW55CitvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb25zIDEgYW5kIDIgaGVyZWluLCBZb3UgaW5kaWNhdGUKK1lvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgYW5kIGFsbCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCitUaGlzIGxpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGltbWVkaWF0ZWx5IGFuZCB5b3UgbWF5IG5vIGxvbmdlcgorZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIHVwb24gWW91cgorZmFpbHVyZSB0byBob25vciB0aGUgcHJvdmlzbyBpbiBTZWN0aW9uIDEoYykgaGVyZWluLgorCis5KSBNdXR1YWwgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24uIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUKK2F1dG9tYXRpY2FsbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQKK3RvIFlvdSBieSB0aGlzIExpY2Vuc2UgaWYgWW91IGZpbGUgYSBsYXdzdWl0IGluIGFueSBjb3VydCBhbGxlZ2luZwordGhhdCBhbnkgT1NJIENlcnRpZmllZCBvcGVuIHNvdXJjZSBzb2Z0d2FyZSB0aGF0IGlzIGxpY2Vuc2VkIHVuZGVyIGFueQorbGljZW5zZSBjb250YWluaW5nIHRoaXMgIk11dHVhbCBUZXJtaW5hdGlvbiBmb3IgUGF0ZW50IEFjdGlvbiIgY2xhdXNlCitpbmZyaW5nZXMgYW55IHBhdGVudCBjbGFpbXMgdGhhdCBhcmUgZXNzZW50aWFsIHRvIHVzZSB0aGF0IHNvZnR3YXJlLgorCisxMCkgSnVyaXNkaWN0aW9uLCBWZW51ZSBhbmQgR292ZXJuaW5nIExhdy4gWW91IGFncmVlIHRoYXQgYW55IGxhd3N1aXQKK2FyaXNpbmcgdW5kZXIgb3IgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIG1haW50YWluZWQgaW4gdGhlCitjb3VydHMgb2YgdGhlIGp1cmlzZGljdGlvbiB3aGVyZWluIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGluIHdoaWNoCitMaWNlbnNvciBjb25kdWN0cyBpdHMgcHJpbWFyeSBidXNpbmVzcywgYW5kIHVuZGVyIHRoZSBsYXdzIG9mIHRoYXQKK2p1cmlzZGljdGlvbiBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBUaGUgYXBwbGljYXRpb24KK29mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwKK1NhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrCitvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2Ugb3IgYWZ0ZXIgaXRzIHRlcm1pbmF0aW9uIHNoYWxsIGJlCitzdWJqZWN0IHRvIHRoZSByZXF1aXJlbWVudHMgYW5kIHBlbmFsdGllcyBvZiB0aGUgVS5TLiBDb3B5cmlnaHQgQWN0LAorMTcgVS5TLkMuICYjMTY3OyAxMDEgZXQgc2VxLiwgdGhlIGVxdWl2YWxlbnQgbGF3cyBvZiBvdGhlciBjb3VudHJpZXMsIGFuZAoraW50ZXJuYXRpb25hbCB0cmVhdHkuIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZgordGhpcyBMaWNlbnNlLgorCisxMSkgQXR0b3JuZXlzIEZlZXMuIEluIGFueSBhY3Rpb24gdG8gZW5mb3JjZSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlCitvciBzZWVraW5nIGRhbWFnZXMgcmVsYXRpbmcgdGhlcmV0bywgdGhlIHByZXZhaWxpbmcgcGFydHkgc2hhbGwgYmUKK2VudGl0bGVkIHRvIHJlY292ZXIgaXRzIGNvc3RzIGFuZCBleHBlbnNlcywgaW5jbHVkaW5nLCB3aXRob3V0CitsaW1pdGF0aW9uLCByZWFzb25hYmxlIGF0dG9ybmV5c2AgZmVlcyBhbmQgY29zdHMgaW5jdXJyZWQgaW4KK2Nvbm5lY3Rpb24gd2l0aCBzdWNoIGFjdGlvbiwgaW5jbHVkaW5nIGFueSBhcHBlYWwgb2Ygc3VjaCBhY3Rpb24uIFRoaXMKK3NlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCisxMikgTWlzY2VsbGFuZW91cy4gVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudAorY29uY2VybmluZyB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZQoraXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvCit0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLgorCisxMykgRGVmaW5pdGlvbiBvZiAiWW91IiBpbiBUaGlzIExpY2Vuc2UuICJZb3UiIHRocm91Z2hvdXQgdGhpcworTGljZW5zZSwgd2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEKK2xlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUKK3Rlcm1zIG9mLCB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eQordGhhdCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB5b3UuCitGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0CitvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LAord2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQKKyg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAKK29mIHN1Y2ggZW50aXR5LgorCitUaGlzIGxpY2Vuc2UgaXMgQ29weXJpZ2h0IChDKSAyMDAyIExhd3JlbmNlIEUuIFJvc2VuLiBBbGwgcmlnaHRzCityZXNlcnZlZC4gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoaXMKK2xpY2Vuc2Ugd2l0aG91dCBtb2RpZmljYXRpb24uIFRoaXMgbGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQKK3RoZSBleHByZXNzIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiBpdHMgY29weXJpZ2h0IG93bmVyLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09TTC0yLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09TTC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZlNWM5ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT1NMLTIuMApAQCAtMCwwICsxLDQ4IEBACisKK09wZW4gU29mdHdhcmUgTGljZW5zZQordi4gMi4wCisKK1RoaXMgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlICh0aGUgIkxpY2Vuc2UiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSAiT3JpZ2luYWwgV29yayIpIHdob3NlIG93bmVyICh0aGUgIkxpY2Vuc29yIikgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOgorCitMaWNlbnNlZCB1bmRlciB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIHZlcnNpb24gMi4wCisxKSBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgc3VibGljZW5zZWFibGUgbGljZW5zZSB0byBkbyB0aGUgZm9sbG93aW5nOgorCithKSB0byByZXByb2R1Y2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gY29waWVzOworYikgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzICgiRGVyaXZhdGl2ZSBXb3JrcyIpIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcms7CisKK2MpIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRvIHRoZSBwdWJsaWMsIHdpdGggdGhlIHByb3Zpc28gdGhhdCBjb3BpZXMgb2YgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgc2hhbGwgYmUgbGljZW5zZWQgdW5kZXIgdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZTsKKworZCkgdG8gcGVyZm9ybSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseTsgYW5kCisKK2UpIHRvIGRpc3BsYXkgdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHkuCisKKzIpIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBzdWJsaWNlbnNlYWJsZSBsaWNlbnNlLCB1bmRlciBwYXRlbnQgY2xhaW1zIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIExpY2Vuc29yIHRoYXQgYXJlIGVtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCBXb3JrIGFzIGZ1cm5pc2hlZCBieSB0aGUgTGljZW5zb3IsIHRvIG1ha2UsIHVzZSwgc2VsbCBhbmQgb2ZmZXIgZm9yIHNhbGUgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MuCisKKzMpIEdyYW50IG9mIFNvdXJjZSBDb2RlIExpY2Vuc2UuIFRoZSB0ZXJtICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCBhbmQgYWxsIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJpbmcgaG93IHRvIG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yay4gTGljZW5zb3IgaGVyZWJ5IGFncmVlcyB0byBwcm92aWRlIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZiB0aGUgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIGRpc3RyaWJ1dGVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gc2F0aXNmeSB0aGlzIG9ibGlnYXRpb24gYnkgcGxhY2luZyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgaW4gYW4gaW5mb3JtYXRpb24gcmVwb3NpdG9yeSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gcGVybWl0IGluZXhwZW5zaXZlIGFuZCBjb252ZW5pZW50IGFjY2VzcyBieSBZb3UgZm9yIGFzIGxvbmcgYXMgTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBieSBwdWJsaXNoaW5nIHRoZSBhZGRyZXNzIG9mIHRoYXQgaW5mb3JtYXRpb24gcmVwb3NpdG9yeSBpbiBhIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgdGhhdCBhcHBsaWVzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLgorCis0KSBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTmVpdGhlciB0aGUgbmFtZXMgb2YgTGljZW5zb3IsIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyB0byB0aGUgT3JpZ2luYWwgV29yaywgbm9yIGFueSBvZiB0aGVpciB0cmFkZW1hcmtzIG9yIHNlcnZpY2UgbWFya3MsIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBPcmlnaW5hbCBXb3JrIHdpdGhvdXQgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIExpY2Vuc29yLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgTGljZW5zb3IgZXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLiBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHRvIG1ha2UsIHVzZSwgc2VsbCBvciBvZmZlciB0byBzZWxsIGVtYm9kaW1lbnRzIG9mIGFueSBwYXRlbnQgY2xhaW1zIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2VkIGNsYWltcyBkZWZpbmVkIGluIFNlY3Rpb24gMi4gTm8gcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUgdHJhZGVtYXJrcyBvZiBMaWNlbnNvciBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBPcmlnaW5hbCBXb3JrLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tIGxpY2Vuc2luZyB1bmRlciBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aGlzIExpY2Vuc2UgYW55IE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuCisKKzUpIEV4dGVybmFsIERlcGxveW1lbnQuIFRoZSB0ZXJtICJFeHRlcm5hbCBEZXBsb3ltZW50IiBtZWFucyB0aGUgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIGluIGFueSB3YXkgc3VjaCB0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgbWF5IGJlIHVzZWQgYnkgYW55b25lIG90aGVyIHRoYW4gWW91LCB3aGV0aGVyIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgYXJlIGRpc3RyaWJ1dGVkIHRvIHRob3NlIHBlcnNvbnMgb3IgbWFkZSBhdmFpbGFibGUgYXMgYW4gYXBwbGljYXRpb24gaW50ZW5kZWQgZm9yIHVzZSBvdmVyIGEgY29tcHV0ZXIgbmV0d29yay4gQXMgYW4gZXhwcmVzcyBjb25kaXRpb24gZm9yIHRoZSBncmFudHMgb2YgbGljZW5zZSBoZXJldW5kZXIsIFlvdSBhZ3JlZSB0aGF0IGFueSBFeHRlcm5hbCBEZXBsb3ltZW50IGJ5IFlvdSBvZiBhIERlcml2YXRpdmUgV29yayBzaGFsbCBiZSBkZWVtZWQgYSBkaXN0cmlidXRpb24gYW5kIHNoYWxsIGJlIGxpY2Vuc2VkIHRvIGFsbCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhcyBwcmVzY3JpYmVkIGluIHNlY3Rpb24gMShjKSBoZXJlaW4uCisKKzYpIEF0dHJpYnV0aW9uIFJpZ2h0cy4gWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIENvZGUgb2YgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQgb3IgdHJhZGVtYXJrIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmssIGFzIHdlbGwgYXMgYW55IG5vdGljZXMgb2YgbGljZW5zaW5nIGFuZCBhbnkgZGVzY3JpcHRpdmUgdGV4dCBpZGVudGlmaWVkIHRoZXJlaW4gYXMgYW4gIkF0dHJpYnV0aW9uIE5vdGljZS4iIFlvdSBtdXN0IGNhdXNlIHRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlIHRvIGNhcnJ5IGEgcHJvbWluZW50IEF0dHJpYnV0aW9uIE5vdGljZSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBZb3UgaGF2ZSBtb2RpZmllZCB0aGUgT3JpZ2luYWwgV29yay4KKworNykgV2FycmFudHkgb2YgUHJvdmVuYW5jZSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgV29yayBhbmQgdGhlIHBhdGVudCByaWdodHMgZ3JhbnRlZCBoZXJlaW4gYnkgTGljZW5zb3IgYXJlIG93bmVkIGJ5IHRoZSBMaWNlbnNvciBvciBhcmUgc3VibGljZW5zZWQgdG8gWW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB0aGUgY29udHJpYnV0b3Iocykgb2YgdGhvc2UgY29weXJpZ2h0cyBhbmQgcGF0ZW50IHJpZ2h0cy4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhlIGltbWVkaWF0ZWx5IHByb2NlZWRpbmcgc2VudGVuY2UsIHRoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBvbiBhbiAiQVMgSVMiIEJBU0lTIGFuZCBXSVRIT1VUIFdBUlJBTlRZLCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlIHdhcnJhbnRpZXMgb2YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgT0YgVEhFIE9SSUdJTkFMIFdPUksgSVMgV0lUSCBZT1UuIFRoaXMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBjb25zdGl0dXRlcyBhbiBlc3NlbnRpYWwgcGFydCBvZiB0aGlzIExpY2Vuc2UuIE5vIGxpY2Vuc2UgdG8gT3JpZ2luYWwgV29yayBpcyBncmFudGVkIGhlcmV1bmRlciBleGNlcHQgdW5kZXIgdGhpcyBkaXNjbGFpbWVyLgorCis4KSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgc2hhbGwgdGhlIExpY2Vuc29yIGJlIGxpYWJsZSB0byBhbnkgcGVyc29uIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3Nlcy4gVGhpcyBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzaGFsbCBub3QgYXBwbHkgdG8gbGlhYmlsaXR5IGZvciBkZWF0aCBvciBwZXJzb25hbCBpbmp1cnkgcmVzdWx0aW5nIGZyb20gTGljZW5zb3JgcyBuZWdsaWdlbmNlIHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIHN1Y2ggbGltaXRhdGlvbi4gU29tZSBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIGxpbWl0YXRpb24gb2YgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHNvIHRoaXMgZXhjbHVzaW9uIGFuZCBsaW1pdGF0aW9uIG1heSBub3QgYXBwbHkgdG8gWW91LgorCis5KSBBY2NlcHRhbmNlIGFuZCBUZXJtaW5hdGlvbi4gSWYgWW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrLCBZb3UgbXVzdCBtYWtlIGEgcmVhc29uYWJsZSBlZmZvcnQgdW5kZXIgdGhlIGNpcmN1bXN0YW5jZXMgdG8gb2J0YWluIHRoZSBleHByZXNzIGFzc2VudCBvZiByZWNpcGllbnRzIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIE5vdGhpbmcgZWxzZSBidXQgdGhpcyBMaWNlbnNlIChvciBhbm90aGVyIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4gTGljZW5zb3IgYW5kIFlvdSkgZ3JhbnRzIFlvdSBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmsgb3IgdG8gZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCBpbiBTZWN0aW9uIDEgaGVyZWluLCBhbmQgYW55IGF0dGVtcHQgdG8gZG8gc28gZXhjZXB0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgKG9yIGFub3RoZXIgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiBMaWNlbnNvciBhbmQgWW91KSBpcyBleHByZXNzbHkgcHJvaGliaXRlZCBieSBVLlMuIGNvcHlyaWdodCBsYXcsIHRoZSBlcXVpdmFsZW50IGxhd3Mgb2Ygb3RoZXIgY291bnRyaWVzLCBhbmQgYnkgaW50ZXJuYXRpb25hbCB0cmVhdHkuIFRoZXJlZm9yZSwgYnkgZXhlcmNpc2luZyBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDEgaGVyZWluLCBZb3UgaW5kaWNhdGUgWW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBpbW1lZGlhdGVseSBhbmQgeW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIHVwb24gWW91ciBmYWlsdXJlIHRvIGhvbm9yIHRoZSBwcm92aXNvIGluIFNlY3Rpb24gMShjKSBoZXJlaW4uCisKKzEwKSBUZXJtaW5hdGlvbiBmb3IgUGF0ZW50IEFjdGlvbi4gVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgYXMgb2YgdGhlIGRhdGUgWW91IGNvbW1lbmNlIGFuIGFjdGlvbiwgaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltLCBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCAoaSkgYWdhaW5zdCBMaWNlbnNvciB3aXRoIHJlc3BlY3QgdG8gYSBwYXRlbnQgYXBwbGljYWJsZSB0byBzb2Z0d2FyZSBvciAoaWkpIGFnYWluc3QgYW55IGVudGl0eSB3aXRoIHJlc3BlY3QgdG8gYSBwYXRlbnQgYXBwbGljYWJsZSB0byB0aGUgT3JpZ2luYWwgV29yayAoYnV0IGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkuCisKKzExKSBKdXJpc2RpY3Rpb24sIFZlbnVlIGFuZCBHb3Zlcm5pbmcgTGF3LiBBbnkgYWN0aW9uIG9yIHN1aXQgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIG1heSBiZSBicm91Z2h0IG9ubHkgaW4gdGhlIGNvdXJ0cyBvZiBhIGp1cmlzZGljdGlvbiB3aGVyZWluIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGluIHdoaWNoIExpY2Vuc29yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5IGJ1c2luZXNzLCBhbmQgdW5kZXIgdGhlIGxhd3Mgb2YgdGhhdCBqdXJpc2RpY3Rpb24gZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlIG9yIGFmdGVyIGl0cyB0ZXJtaW5hdGlvbiBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSByZXF1aXJlbWVudHMgYW5kIHBlbmFsdGllcyBvZiB0aGUgVS5TLiBDb3B5cmlnaHQgQWN0LCAxNyBVLlMuQy4gMTAxIGV0IHNlcS4sIHRoZSBlcXVpdmFsZW50IGxhd3Mgb2Ygb3RoZXIgY291bnRyaWVzLCBhbmQgaW50ZXJuYXRpb25hbCB0cmVhdHkuIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKKzEyKSBBdHRvcm5leXMgRmVlcy4gSW4gYW55IGFjdGlvbiB0byBlbmZvcmNlIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3Igc2Vla2luZyBkYW1hZ2VzIHJlbGF0aW5nIHRoZXJldG8sIHRoZSBwcmV2YWlsaW5nIHBhcnR5IHNoYWxsIGJlIGVudGl0bGVkIHRvIHJlY292ZXIgaXRzIGNvc3RzIGFuZCBleHBlbnNlcywgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHJlYXNvbmFibGUgYXR0b3JuZXlzYCBmZWVzIGFuZCBjb3N0cyBpbmN1cnJlZCBpbiBjb25uZWN0aW9uIHdpdGggc3VjaCBhY3Rpb24sIGluY2x1ZGluZyBhbnkgYXBwZWFsIG9mIHN1Y2ggYWN0aW9uLiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCisxMykgTWlzY2VsbGFuZW91cy4gVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLgorCisxNCkgRGVmaW5pdGlvbiBvZiAiWW91IiBpbiBUaGlzIExpY2Vuc2UuICJZb3UiIHRocm91Z2hvdXQgdGhpcyBMaWNlbnNlLCB3aGV0aGVyIGluIHVwcGVyIG9yIGxvd2VyIGNhc2UsIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB0aGF0IGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisxNSkgUmlnaHQgdG8gVXNlLiBZb3UgbWF5IHVzZSB0aGUgT3JpZ2luYWwgV29yayBpbiBhbGwgd2F5cyBub3Qgb3RoZXJ3aXNlIHJlc3RyaWN0ZWQgb3IgY29uZGl0aW9uZWQgYnkgdGhpcyBMaWNlbnNlIG9yIGJ5IGxhdywgYW5kIExpY2Vuc29yIHByb21pc2VzIG5vdCB0byBpbnRlcmZlcmUgd2l0aCBvciBiZSByZXNwb25zaWJsZSBmb3Igc3VjaCB1c2VzIGJ5IFlvdS4KKworVGhpcyBsaWNlbnNlIGlzIENvcHlyaWdodCAoQykgMjAwMyBMYXdyZW5jZSBFLiBSb3Nlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoaXMgbGljZW5zZSB3aXRob3V0IG1vZGlmaWNhdGlvbi4gVGhpcyBsaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24gb2YgaXRzIGNvcHlyaWdodCBvd25lci4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PU0wtMy4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PU0wtMy4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NTc3NDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09TTC0zLjAKQEAgLTAsMCArMSwyNyBAQAorCitPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKCYjODIyMDtPU0wmIzgyMjE7KSB2LiAzLjAKK1RoaXMgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlICh0aGUgIkxpY2Vuc2UiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSAiT3JpZ2luYWwgV29yayIpIHdob3NlIG93bmVyICh0aGUgIkxpY2Vuc29yIikgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIGxpY2Vuc2luZyBub3RpY2UgYWRqYWNlbnQgdG8gdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOgorTGljZW5zZWQgdW5kZXIgdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSB2ZXJzaW9uIDMuMAorCisxKSBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gTGljZW5zb3IgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBzdWJsaWNlbnNhYmxlIGxpY2Vuc2UsIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGNvcHlyaWdodCwgdG8gZG8gdGhlIGZvbGxvd2luZzoKK2EpIHRvIHJlcHJvZHVjZSB0aGUgT3JpZ2luYWwgV29yayBpbiBjb3BpZXMsIGVpdGhlciBhbG9uZSBvciBhcyBwYXJ0IG9mIGEgY29sbGVjdGl2ZSB3b3JrOworYikgdG8gdHJhbnNsYXRlLCBhZGFwdCwgYWx0ZXIsIHRyYW5zZm9ybSwgbW9kaWZ5LCBvciBhcnJhbmdlIHRoZSBPcmlnaW5hbCBXb3JrLCB0aGVyZWJ5IGNyZWF0aW5nIGRlcml2YXRpdmUgd29ya3MgKCJEZXJpdmF0aXZlIFdvcmtzIikgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yazsKK2MpIHRvIGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRvIHRoZSBwdWJsaWMsIHdpdGggdGhlIHByb3Zpc28gdGhhdCBjb3BpZXMgb2YgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgc2hhbGwgYmUgbGljZW5zZWQgdW5kZXIgdGhpcyBPcGVuIFNvZnR3YXJlIExpY2Vuc2U7CitkKSB0byBwZXJmb3JtIHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5OyBhbmQKK2UpIHRvIGRpc3BsYXkgdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHkuCisyKSBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gTGljZW5zb3IgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBzdWJsaWNlbnNhYmxlIGxpY2Vuc2UsIHVuZGVyIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUgZW1ib2RpZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciwgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcGF0ZW50cywgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQgaW1wb3J0IHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzLgorMykgR3JhbnQgb2YgU291cmNlIENvZGUgTGljZW5zZS4gVGhlIHRlcm0gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIE9yaWdpbmFsIFdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0IGFuZCBhbGwgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gZGVzY3JpYmluZyBob3cgdG8gbW9kaWZ5IHRoZSBPcmlnaW5hbCBXb3JrLiBMaWNlbnNvciBhZ3JlZXMgdG8gcHJvdmlkZSBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYWxvbmcgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBkaXN0cmlidXRlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHNhdGlzZnkgdGhpcyBvYmxpZ2F0aW9uIGJ5IHBsYWNpbmcgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGluIGFuIGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIHBlcm1pdCBpbmV4cGVuc2l2ZSBhbmQgY29udmVuaWVudCBhY2Nlc3MgYnkgWW91IGZvciBhcyBsb25nIGFzIExpY2Vuc29yIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBXb3JrLgorNCkgRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5laXRoZXIgdGhlIG5hbWVzIG9mIExpY2Vuc29yLCBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgdG8gdGhlIE9yaWdpbmFsIFdvcmssIG5vciBhbnkgb2YgdGhlaXIgdHJhZGVtYXJrcyBvciBzZXJ2aWNlIG1hcmtzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgT3JpZ2luYWwgV29yayB3aXRob3V0IGV4cHJlc3MgcHJpb3IgcGVybWlzc2lvbiBvZiB0aGUgTGljZW5zb3IuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbiwgbm90aGluZyBpbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIGFueSBsaWNlbnNlIHRvIExpY2Vuc29yJiM4MjE3O3MgdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5LiBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgb3IgaW1wb3J0IGVtYm9kaW1lbnRzIG9mIGFueSBwYXRlbnQgY2xhaW1zIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2VkIGNsYWltcyBkZWZpbmVkIGluIFNlY3Rpb24gMi4gTm8gbGljZW5zZSBpcyBncmFudGVkIHRvIHRoZSB0cmFkZW1hcmtzIG9mIExpY2Vuc29yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSBhbnkgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4KKzUpIEV4dGVybmFsIERlcGxveW1lbnQuIFRoZSB0ZXJtICJFeHRlcm5hbCBEZXBsb3ltZW50IiBtZWFucyB0aGUgdXNlLCBkaXN0cmlidXRpb24sIG9yIGNvbW11bmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBpbiBhbnkgd2F5IHN1Y2ggdGhhdCB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIG1heSBiZSB1c2VkIGJ5IGFueW9uZSBvdGhlciB0aGFuIFlvdSwgd2hldGhlciB0aG9zZSB3b3JrcyBhcmUgZGlzdHJpYnV0ZWQgb3IgY29tbXVuaWNhdGVkIHRvIHRob3NlIHBlcnNvbnMgb3IgbWFkZSBhdmFpbGFibGUgYXMgYW4gYXBwbGljYXRpb24gaW50ZW5kZWQgZm9yIHVzZSBvdmVyIGEgbmV0d29yay4gQXMgYW4gZXhwcmVzcyBjb25kaXRpb24gZm9yIHRoZSBncmFudHMgb2YgbGljZW5zZSBoZXJldW5kZXIsIFlvdSBtdXN0IHRyZWF0IGFueSBFeHRlcm5hbCBEZXBsb3ltZW50IGJ5IFlvdSBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBhIERlcml2YXRpdmUgV29yayBhcyBhIGRpc3RyaWJ1dGlvbiB1bmRlciBzZWN0aW9uIDEoYykuCis2KSBBdHRyaWJ1dGlvbiBSaWdodHMuIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCBvciB0cmFkZW1hcmsgbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yaywgYXMgd2VsbCBhcyBhbnkgbm90aWNlcyBvZiBsaWNlbnNpbmcgYW5kIGFueSBkZXNjcmlwdGl2ZSB0ZXh0IGlkZW50aWZpZWQgdGhlcmVpbiBhcyBhbiAiQXR0cmlidXRpb24gTm90aWNlLiIgWW91IG11c3QgY2F1c2UgdGhlIFNvdXJjZSBDb2RlIGZvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUgdG8gY2FycnkgYSBwcm9taW5lbnQgQXR0cmlidXRpb24gTm90aWNlIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gcmVjaXBpZW50cyB0aGF0IFlvdSBoYXZlIG1vZGlmaWVkIHRoZSBPcmlnaW5hbCBXb3JrLgorNykgV2FycmFudHkgb2YgUHJvdmVuYW5jZSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgV29yayBhbmQgdGhlIHBhdGVudCByaWdodHMgZ3JhbnRlZCBoZXJlaW4gYnkgTGljZW5zb3IgYXJlIG93bmVkIGJ5IHRoZSBMaWNlbnNvciBvciBhcmUgc3VibGljZW5zZWQgdG8gWW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB0aGUgY29udHJpYnV0b3Iocykgb2YgdGhvc2UgY29weXJpZ2h0cyBhbmQgcGF0ZW50IHJpZ2h0cy4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhlIGltbWVkaWF0ZWx5IHByZWNlZGluZyBzZW50ZW5jZSwgdGhlIE9yaWdpbmFsIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuICJBUyBJUyIgQkFTSVMgYW5kIFdJVEhPVVQgV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBub24taW5mcmluZ2VtZW50LCBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRiBUSEUgT1JJR0lOQUwgV09SSyBJUyBXSVRIIFlPVS4gVGhpcyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIGNvbnN0aXR1dGVzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5zZS4gTm8gbGljZW5zZSB0byB0aGUgT3JpZ2luYWwgV29yayBpcyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZSBleGNlcHQgdW5kZXIgdGhpcyBkaXNjbGFpbWVyLgorOCkgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsIHNoYWxsIHRoZSBMaWNlbnNvciBiZSBsaWFibGUgdG8gYW55b25lIGZvciBhbnkgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYSByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMuIFRoaXMgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgc2hhbGwgbm90IGFwcGx5IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIHN1Y2ggbGltaXRhdGlvbi4KKzkpIEFjY2VwdGFuY2UgYW5kIFRlcm1pbmF0aW9uLiBJZiwgYXQgYW55IHRpbWUsIFlvdSBleHByZXNzbHkgYXNzZW50ZWQgdG8gdGhpcyBMaWNlbnNlLCB0aGF0IGFzc2VudCBpbmRpY2F0ZXMgeW91ciBjbGVhciBhbmQgaXJyZXZvY2FibGUgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgYW5kIGFsbCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuIElmIFlvdSBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBhIERlcml2YXRpdmUgV29yaywgWW91IG11c3QgbWFrZSBhIHJlYXNvbmFibGUgZWZmb3J0IHVuZGVyIHRoZSBjaXJjdW1zdGFuY2VzIHRvIG9idGFpbiB0aGUgZXhwcmVzcyBhc3NlbnQgb2YgcmVjaXBpZW50cyB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBUaGlzIExpY2Vuc2UgY29uZGl0aW9ucyB5b3VyIHJpZ2h0cyB0byB1bmRlcnRha2UgdGhlIGFjdGl2aXRpZXMgbGlzdGVkIGluIFNlY3Rpb24gMSwgaW5jbHVkaW5nIHlvdXIgcmlnaHQgdG8gY3JlYXRlIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yaywgYW5kIGRvaW5nIHNvIHdpdGhvdXQgaG9ub3JpbmcgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgaXMgcHJvaGliaXRlZCBieSBjb3B5cmlnaHQgbGF3IGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gYWZmZWN0IGNvcHlyaWdodCBleGNlcHRpb25zIGFuZCBsaW1pdGF0aW9ucyAoaW5jbHVkaW5nICYjODIyMDtmYWlyIHVzZSYjODIyMTsgb3IgJiM4MjIwO2ZhaXIgZGVhbGluZyYjODIyMTspLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGltbWVkaWF0ZWx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgdXBvbiB5b3VyIGZhaWx1cmUgdG8gaG9ub3IgdGhlIGNvbmRpdGlvbnMgaW4gU2VjdGlvbiAxKGMpLgorMTApIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSBhcyBvZiB0aGUgZGF0ZSBZb3UgY29tbWVuY2UgYW4gYWN0aW9uLCBpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0sIGFnYWluc3QgTGljZW5zb3Igb3IgYW55IGxpY2Vuc2VlIGFsbGVnaW5nIHRoYXQgdGhlIE9yaWdpbmFsIFdvcmsgaW5mcmluZ2VzIGEgcGF0ZW50LiBUaGlzIHRlcm1pbmF0aW9uIHByb3Zpc2lvbiBzaGFsbCBub3QgYXBwbHkgZm9yIGFuIGFjdGlvbiBhbGxlZ2luZyBwYXRlbnQgaW5mcmluZ2VtZW50IGJ5IGNvbWJpbmF0aW9ucyBvZiB0aGUgT3JpZ2luYWwgV29yayB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlLgorMTEpIEp1cmlzZGljdGlvbiwgVmVudWUgYW5kIEdvdmVybmluZyBMYXcuIEFueSBhY3Rpb24gb3Igc3VpdCByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgbWF5IGJlIGJyb3VnaHQgb25seSBpbiB0aGUgY291cnRzIG9mIGEganVyaXNkaWN0aW9uIHdoZXJlaW4gdGhlIExpY2Vuc29yIHJlc2lkZXMgb3IgaW4gd2hpY2ggTGljZW5zb3IgY29uZHVjdHMgaXRzIHByaW1hcnkgYnVzaW5lc3MsIGFuZCB1bmRlciB0aGUgbGF3cyBvZiB0aGF0IGp1cmlzZGljdGlvbiBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2Ugb3IgYWZ0ZXIgaXRzIHRlcm1pbmF0aW9uIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIHJlcXVpcmVtZW50cyBhbmQgcGVuYWx0aWVzIG9mIGNvcHlyaWdodCBvciBwYXRlbnQgbGF3IGluIHRoZSBhcHByb3ByaWF0ZSBqdXJpc2RpY3Rpb24uIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisxMikgQXR0b3JuZXlzJiM4MjE3OyBGZWVzLiBJbiBhbnkgYWN0aW9uIHRvIGVuZm9yY2UgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBzZWVraW5nIGRhbWFnZXMgcmVsYXRpbmcgdGhlcmV0bywgdGhlIHByZXZhaWxpbmcgcGFydHkgc2hhbGwgYmUgZW50aXRsZWQgdG8gcmVjb3ZlciBpdHMgY29zdHMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgcmVhc29uYWJsZSBhdHRvcm5leXNgIGZlZXMgYW5kIGNvc3RzIGluY3VycmVkIGluIGNvbm5lY3Rpb24gd2l0aCBzdWNoIGFjdGlvbiwgaW5jbHVkaW5nIGFueSBhcHBlYWwgb2Ygc3VjaCBhY3Rpb24uIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisxMykgTWlzY2VsbGFuZW91cy4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuCisxNCkgRGVmaW5pdGlvbiBvZiAiWW91IiBpbiBUaGlzIExpY2Vuc2UuICJZb3UiIHRocm91Z2hvdXQgdGhpcyBMaWNlbnNlLCB3aGV0aGVyIGluIHVwcGVyIG9yIGxvd2VyIGNhc2UsIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB0aGF0IGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorMTUpIFJpZ2h0IHRvIFVzZS4gWW91IG1heSB1c2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gYWxsIHdheXMgbm90IG90aGVyd2lzZSByZXN0cmljdGVkIG9yIGNvbmRpdGlvbmVkIGJ5IHRoaXMgTGljZW5zZSBvciBieSBsYXcsIGFuZCBMaWNlbnNvciBwcm9taXNlcyBub3QgdG8gaW50ZXJmZXJlIHdpdGggb3IgYmUgcmVzcG9uc2libGUgZm9yIHN1Y2ggdXNlcyBieSBZb3UuCisxNikgTW9kaWZpY2F0aW9uIG9mIFRoaXMgTGljZW5zZS4gVGhpcyBMaWNlbnNlIGlzIENvcHlyaWdodCAmIzE2OTsgMjAwNSBMYXdyZW5jZSBSb3Nlbi4gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUsIG9yIGNvbW11bmljYXRlIHRoaXMgTGljZW5zZSB3aXRob3V0IG1vZGlmaWNhdGlvbi4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgcGVybWl0cyBZb3UgdG8gbW9kaWZ5IHRoaXMgTGljZW5zZSBhcyBhcHBsaWVkIHRvIHRoZSBPcmlnaW5hbCBXb3JrIG9yIHRvIERlcml2YXRpdmUgV29ya3MuIEhvd2V2ZXIsIFlvdSBtYXkgbW9kaWZ5IHRoZSB0ZXh0IG9mIHRoaXMgTGljZW5zZSBhbmQgY29weSwgZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSB5b3VyIG1vZGlmaWVkIHZlcnNpb24gKHRoZSAiTW9kaWZpZWQgTGljZW5zZSIpIGFuZCBhcHBseSBpdCB0byBvdGhlciBvcmlnaW5hbCB3b3JrcyBvZiBhdXRob3JzaGlwIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAoaSkgWW91IG1heSBub3QgaW5kaWNhdGUgaW4gYW55IHdheSB0aGF0IHlvdXIgTW9kaWZpZWQgTGljZW5zZSBpcyB0aGUgIk9wZW4gU29mdHdhcmUgTGljZW5zZSIgb3IgIk9TTCIgYW5kIHlvdSBtYXkgbm90IHVzZSB0aG9zZSBuYW1lcyBpbiB0aGUgbmFtZSBvZiB5b3VyIE1vZGlmaWVkIExpY2Vuc2U7IChpaSkgWW91IG11c3QgcmVwbGFjZSB0aGUgbm90aWNlIHNwZWNpZmllZCBpbiB0aGUgZmlyc3QgcGFyYWdyYXBoIGFib3ZlIHdpdGggdGhlIG5vdGljZSAiTGljZW5zZWQgdW5kZXIgPGluc2VydCB5b3VyIGxpY2Vuc2UgbmFtZSBoZXJlPiIgb3Igd2l0aCBhIG5vdGljZSBvZiB5b3VyIG93biB0aGF0IGlzIG5vdCBjb25mdXNpbmdseSBzaW1pbGFyIHRvIHRoZSBub3RpY2UgaW4gdGhpcyBMaWNlbnNlOyBhbmQgKGlpaSkgWW91IG1heSBub3QgY2xhaW0gdGhhdCB5b3VyIG9yaWdpbmFsIHdvcmtzIGFyZSBvcGVuIHNvdXJjZSBzb2Z0d2FyZSB1bmxlc3MgeW91ciBNb2RpZmllZCBMaWNlbnNlIGhhcyBiZWVuIGFwcHJvdmVkIGJ5IE9wZW4gU291cmNlIEluaXRpYXRpdmUgKE9TSSkgYW5kIFlvdSBjb21wbHkgd2l0aCBpdHMgbGljZW5zZSByZXZpZXcgYW5kIGNlcnRpZmljYXRpb24gcHJvY2Vzcy4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PcGVuU1NMIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PcGVuU1NMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MjcwYTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09wZW5TU0wKQEAgLTAsMCArMSwxMDcgQEAKKworT3BlblNTTCBMaWNlbnNlCisKKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwOCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICBhcmUgbWV0OgorIAorICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgCisgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgICAgIGRpc3RyaWJ1dGlvbi4KKyAKKyAgMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAKKyAgNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAgICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorIAorICA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAgICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgCisgIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAgICAgYWNrbm93bGVkZ21lbnQ6CisgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAgICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTYGAgQU5EIEFOWQorICBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIAorICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAgKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorICBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAKKworIE9yaWdpbmFsIFNTTGVheSBMaWNlbnNlCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCitBbGwgcmlnaHRzIHJlc2VydmVkLgorIAorICBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKyAgYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorICBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisgCisgIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAgbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisgIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKyAgZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgCisgIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmdgcywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKyAgSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorICBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKyAgaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisgCisgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgYXJlIG1ldDoKKyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisgICAgIFRoZSB3b3JkIGBjcnlwdG9ncmFwaGljYCBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorICAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKyAgNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20KKyAgICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKyAKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVNgYCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIAorICBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvciBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUgY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorIAorCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9QRCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUEQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFmYjg3OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUEQKQEAgLTAsMCArMSBAQAorVGhpcyBpcyBhIHBsYWNlaG9sZGVyIGZvciB0aGUgUHVibGljIERvbWFpbiBMaWNlbnNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1BIUC0zLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1BIUC0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYwYjIwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUEhQLTMuMApAQCAtMCwwICsxLDcwIEBACisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorICAgICAgICAgICAgICAgICAgVGhlIFBIUCBMaWNlbnNlLCB2ZXJzaW9uIDMuMDEKK0NvcHlyaWdodCAoYykgMTk5OSAtIDIwMTAgVGhlIFBIUCBHcm91cC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgaXMgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorCisgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAKKyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgICAgZGlzdHJpYnV0aW9uLgorIAorICAzLiBUaGUgbmFtZSAiUEhQIiBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yCisgICAgIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgZ3JvdXBAcGhwLm5ldC4KKyAgCisgIDQuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJQSFAiLCBub3IKKyAgICAgbWF5ICJQSFAiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbgorICAgICBmcm9tIGdyb3VwQHBocC5uZXQuICBZb3UgbWF5IGluZGljYXRlIHRoYXQgeW91ciBzb2Z0d2FyZSB3b3JrcyBpbgorICAgICBjb25qdW5jdGlvbiB3aXRoIFBIUCBieSBzYXlpbmcgIkZvbyBmb3IgUEhQIiBpbnN0ZWFkIG9mIGNhbGxpbmcKKyAgICAgaXQgIlBIUCBGb28iIG9yICJwaHBmb28iCisgCisgIDUuIFRoZSBQSFAgR3JvdXAgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZQorICAgICBsaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhCisgICAgIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorICAgICBPbmNlIGNvdmVyZWQgY29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24KKyAgICAgb2YgdGhlIGxpY2Vuc2UsIHlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMKKyAgICAgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIGNvdmVyZWQgY29kZQorICAgICB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgbGljZW5zZQorICAgICBwdWJsaXNoZWQgYnkgdGhlIFBIUCBHcm91cC4gTm8gb25lIG90aGVyIHRoYW4gdGhlIFBIUCBHcm91cCBoYXMKKyAgICAgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBjb3ZlcmVkIGNvZGUgY3JlYXRlZAorICAgICB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICAgICBhY2tub3dsZWRnbWVudDoKKyAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBQSFAgc29mdHdhcmUsIGZyZWVseSBhdmFpbGFibGUgZnJvbQorICAgICA8aHR0cDovL3d3dy5waHAubmV0L3NvZnR3YXJlLz4iLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQSFAgREVWRUxPUE1FTlQgVEVBTSBgYEFTIElTYGAgQU5EIAorQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgCitQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUEhQCitERVZFTE9QTUVOVCBURUFNIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKK0lORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiAKK1NFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKworVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKK2luZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgUEhQIEdyb3VwLgorCitUaGUgUEhQIEdyb3VwIGNhbiBiZSBjb250YWN0ZWQgdmlhIEVtYWlsIGF0IGdyb3VwQHBocC5uZXQuCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBQSFAgR3JvdXAgYW5kIHRoZSBQSFAgcHJvamVjdCwgCitwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LnBocC5uZXQ+LgorCitQSFAgaW5jbHVkZXMgdGhlIFplbmQgRW5naW5lLCBmcmVlbHkgYXZhaWxhYmxlIGF0Cis8aHR0cDovL3d3dy56ZW5kLmNvbT4uCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUG9zdGdyZVNRTCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUG9zdGdyZVNRTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTY1OGRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9Qb3N0Z3JlU1FMCkBAIC0wLDAgKzEsMTQgQEAKKworUG9zdGdyZVNRTCBEYXRhYmFzZSBNYW5hZ2VtZW50IFN5c3RlbQorKGZvcm1lcmx5IGtub3duIGFzIFBvc3RncmVzLCB0aGVuIGFzIFBvc3RncmVzOTUpCisKK1BvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDEwLCBUaGUgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSwgd2l0aG91dCBmZWUsIGFuZCB3aXRob3V0IGEgd3JpdHRlbiBhZ3JlZW1lbnQgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGFuZCB0aGUgZm9sbG93aW5nIHR3byBwYXJhZ3JhcGhzIGFwcGVhciBpbiBhbGwgY29waWVzLgorCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgVU5JVkVSU0lUWSBPRiBDQUxJRk9STklBIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgSU5DTFVESU5HIExPU1QgUFJPRklUUywgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTiwgRVZFTiBJRiBUSEUgVU5JVkVSU0lUWSBPRiBDQUxJRk9STklBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitUSEUgVU5JVkVSU0lUWSBPRiBDQUxJRk9STklBIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBTT0ZUV0FSRSBQUk9WSURFRCBIRVJFVU5ERVIgSVMgT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFRIRSBVTklWRVJTSVRZIE9GIENBTElGT1JOSUEgSEFTIE5PIE9CTElHQVRJT05TIFRPIFBST1ZJREUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9Qcm9wcmlldGFyeSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUHJvcHJpZXRhcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYxODc1OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUHJvcHJpZXRhcnkKQEAgLTAsMCArMSBAQAorUHJvcHJpZXRhcnkgbGljZW5zZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUHl0aG9uLTIuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUHl0aG9uLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDNlODYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9QeXRob24tMi4wCkBAIC0wLDAgKzEsMTkyIEBACisKK1BZVEhPTiBTT0ZUV0FSRSBGT1VOREFUSU9OIExJQ0VOU0UgVkVSU0lPTiAyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxLiBUaGlzIExJQ0VOU0UgQUdSRUVNRU5UIGlzIGJldHdlZW4gdGhlIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCisoIlBTRiIpLCBhbmQgdGhlIEluZGl2aWR1YWwgb3IgT3JnYW5pemF0aW9uICgiTGljZW5zZWUiKSBhY2Nlc3NpbmcgYW5kCitvdGhlcndpc2UgdXNpbmcgdGhpcyBzb2Z0d2FyZSAoIlB5dGhvbiIpIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSBhbmQKK2l0cyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24uCisKKzIuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIFBTRgoraGVyZWJ5IGdyYW50cyBMaWNlbnNlZSBhIG5vbmV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCB3b3JsZC13aWRlCitsaWNlbnNlIHRvIHJlcHJvZHVjZSwgYW5hbHl6ZSwgdGVzdCwgcGVyZm9ybSBhbmQvb3IgZGlzcGxheSBwdWJsaWNseSwKK3ByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywgZGlzdHJpYnV0ZSwgYW5kIG90aGVyd2lzZSB1c2UgUHl0aG9uCithbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uLCBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBQU0ZgcworTGljZW5zZSBBZ3JlZW1lbnQgYW5kIFBTRmBzIG5vdGljZSBvZiBjb3B5cmlnaHQsIGkuZS4sICJDb3B5cmlnaHQgKGMpCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBBbGwgUmlnaHRzCitSZXNlcnZlZCIgYXJlIHJldGFpbmVkIGluIFB5dGhvbiBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uCitwcmVwYXJlZCBieSBMaWNlbnNlZS4KKworMy4gSW4gdGhlIGV2ZW50IExpY2Vuc2VlIHByZXBhcmVzIGEgZGVyaXZhdGl2ZSB3b3JrIHRoYXQgaXMgYmFzZWQgb24KK29yIGluY29ycG9yYXRlcyBQeXRob24gb3IgYW55IHBhcnQgdGhlcmVvZiwgYW5kIHdhbnRzIHRvIG1ha2UKK3RoZSBkZXJpdmF0aXZlIHdvcmsgYXZhaWxhYmxlIHRvIG90aGVycyBhcyBwcm92aWRlZCBoZXJlaW4sIHRoZW4KK0xpY2Vuc2VlIGhlcmVieSBhZ3JlZXMgdG8gaW5jbHVkZSBpbiBhbnkgc3VjaCB3b3JrIGEgYnJpZWYgc3VtbWFyeSBvZgordGhlIGNoYW5nZXMgbWFkZSB0byBQeXRob24uCisKKzQuIFBTRiBpcyBtYWtpbmcgUHl0aG9uIGF2YWlsYWJsZSB0byBMaWNlbnNlZSBvbiBhbiAiQVMgSVMiCitiYXNpcy4gUFNGIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SCitJTVBMSUVELiBCWSBXQVkgT0YgRVhBTVBMRSwgQlVUIE5PVCBMSU1JVEFUSU9OLCBQU0YgTUFLRVMgTk8gQU5ECitESVNDTEFJTVMgQU5ZIFJFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTCitGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgUFlUSE9OIFdJTEwgTk9UCitJTkZSSU5HRSBBTlkgVEhJUkQgUEFSVFkgUklHSFRTLgorCis1LiBQU0YgU0hBTEwgTk9UIEJFIExJQUJMRSBUTyBMSUNFTlNFRSBPUiBBTlkgT1RIRVIgVVNFUlMgT0YgUFlUSE9OCitGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBMT1NTIEFTCitBIFJFU1VMVCBPRiBNT0RJRllJTkcsIERJU1RSSUJVVElORywgT1IgT1RIRVJXSVNFIFVTSU5HIFBZVEhPTiwKK09SIEFOWSBERVJJVkFUSVZFIFRIRVJFT0YsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgVEhFUkVPRi4KKworNi4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHVwb24gYSBtYXRlcmlhbAorYnJlYWNoIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KKworNy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGRlZW1lZCB0byBjcmVhdGUgYW55CityZWxhdGlvbnNoaXAgb2YgYWdlbmN5LCBwYXJ0bmVyc2hpcCwgb3Igam9pbnQgdmVudHVyZSBiZXR3ZWVuIFBTRiBhbmQKK0xpY2Vuc2VlLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIFBTRgordHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lIGluIGEgdHJhZGVtYXJrIHNlbnNlIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorcHJvZHVjdHMgb3Igc2VydmljZXMgb2YgTGljZW5zZWUsIG9yIGFueSB0aGlyZCBwYXJ0eS4KKworOC4gQnkgY29weWluZywgaW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgUHl0aG9uLCBMaWNlbnNlZQorYWdyZWVzIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UKK0FncmVlbWVudC4KKworQkVPUEVOLkNPTSBMSUNFTlNFIEFHUkVFTUVOVCBGT1IgUFlUSE9OIDIuMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCRU9QRU4gUFlUSE9OIE9QRU4gU09VUkNFIExJQ0VOU0UgQUdSRUVNRU5UIFZFUlNJT04gMQorCisxLiBUaGlzIExJQ0VOU0UgQUdSRUVNRU5UIGlzIGJldHdlZW4gQmVPcGVuLmNvbSAoIkJlT3BlbiIpLCBoYXZpbmcgYW4KK29mZmljZSBhdCAxNjAgU2FyYXRvZ2EgQXZlbnVlLCBTYW50YSBDbGFyYSwgQ0EgOTUwNTEsIGFuZCB0aGUKK0luZGl2aWR1YWwgb3IgT3JnYW5pemF0aW9uICgiTGljZW5zZWUiKSBhY2Nlc3NpbmcgYW5kIG90aGVyd2lzZSB1c2luZwordGhpcyBzb2Z0d2FyZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0gYW5kIGl0cyBhc3NvY2lhdGVkCitkb2N1bWVudGF0aW9uICgidGhlIFNvZnR3YXJlIikuCisKKzIuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQmVPcGVuIFB5dGhvbiBMaWNlbnNlCitBZ3JlZW1lbnQsIEJlT3BlbiBoZXJlYnkgZ3JhbnRzIExpY2Vuc2VlIGEgbm9uLWV4Y2x1c2l2ZSwKK3JveWFsdHktZnJlZSwgd29ybGQtd2lkZSBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgYW5hbHl6ZSwgdGVzdCwgcGVyZm9ybQorYW5kL29yIGRpc3BsYXkgcHVibGljbHksIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywgZGlzdHJpYnV0ZSwgYW5kCitvdGhlcndpc2UgdXNlIHRoZSBTb2Z0d2FyZSBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uLAorcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgdGhlIEJlT3BlbiBQeXRob24gTGljZW5zZSBpcyByZXRhaW5lZCBpbiB0aGUKK1NvZnR3YXJlLCBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uIHByZXBhcmVkIGJ5IExpY2Vuc2VlLgorCiszLiBCZU9wZW4gaXMgbWFraW5nIHRoZSBTb2Z0d2FyZSBhdmFpbGFibGUgdG8gTGljZW5zZWUgb24gYW4gIkFTIElTIgorYmFzaXMuIEJFT1BFTiBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUgorSU1QTElFRC4gQlkgV0FZIE9GIEVYQU1QTEUsIEJVVCBOT1QgTElNSVRBVElPTiwgQkVPUEVOIE1BS0VTIE5PIEFORAorRElTQ0xBSU1TIEFOWSBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUworRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSBXSUxMIE5PVAorSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFJJR0hUUy4KKworNC4gQkVPUEVOIFNIQUxMIE5PVCBCRSBMSUFCTEUgVE8gTElDRU5TRUUgT1IgQU5ZIE9USEVSIFVTRVJTIE9GIFRIRQorU09GVFdBUkUgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgTE9TUworQVMgQSBSRVNVTFQgT0YgVVNJTkcsIE1PRElGWUlORyBPUiBESVNUUklCVVRJTkcgVEhFIFNPRlRXQVJFLCBPUiBBTlkKK0RFUklWQVRJVkUgVEhFUkVPRiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBUSEVSRU9GLgorCis1LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdXBvbiBhIG1hdGVyaWFsCiticmVhY2ggb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorCis2LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGJ5IGFuZCBpbnRlcnByZXRlZCBpbiBhbGwKK3Jlc3BlY3RzIGJ5IHRoZSBsYXcgb2YgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGV4Y2x1ZGluZyBjb25mbGljdCBvZgorbGF3IHByb3Zpc2lvbnMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBkZWVtZWQgdG8KK2NyZWF0ZSBhbnkgcmVsYXRpb25zaGlwIG9mIGFnZW5jeSwgcGFydG5lcnNoaXAsIG9yIGpvaW50IHZlbnR1cmUKK2JldHdlZW4gQmVPcGVuIGFuZCBMaWNlbnNlZS4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBkb2VzIG5vdCBncmFudAorcGVybWlzc2lvbiB0byB1c2UgQmVPcGVuIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgaW4gYSB0cmFkZW1hcmsKK3NlbnNlIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBvciBzZXJ2aWNlcyBvZiBMaWNlbnNlZSwgb3IgYW55Cit0aGlyZCBwYXJ0eS4gQXMgYW4gZXhjZXB0aW9uLCB0aGUgIkJlT3BlbiBQeXRob24iIGxvZ29zIGF2YWlsYWJsZSBhdAoraHR0cDovL3d3dy5weXRob25sYWJzLmNvbS9sb2dvcy5odG1sIG1heSBiZSB1c2VkIGFjY29yZGluZyB0byB0aGUKK3Blcm1pc3Npb25zIGdyYW50ZWQgb24gdGhhdCB3ZWIgcGFnZS4KKworNy4gQnkgY29weWluZywgaW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgdGhlIHNvZnR3YXJlLCBMaWNlbnNlZQorYWdyZWVzIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UKK0FncmVlbWVudC4KKworQ05SSSBMSUNFTlNFIEFHUkVFTUVOVCBGT1IgUFlUSE9OIDEuNi4xCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4gVGhpcyBMSUNFTlNFIEFHUkVFTUVOVCBpcyBiZXR3ZWVuIHRoZSBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwKK1Jlc2VhcmNoIEluaXRpYXRpdmVzLCBoYXZpbmcgYW4gb2ZmaWNlIGF0IDE4OTUgUHJlc3RvbiBXaGl0ZSBEcml2ZSwKK1Jlc3RvbiwgVkEgMjAxOTEgKCJDTlJJIiksIGFuZCB0aGUgSW5kaXZpZHVhbCBvciBPcmdhbml6YXRpb24KKygiTGljZW5zZWUiKSBhY2Nlc3NpbmcgYW5kIG90aGVyd2lzZSB1c2luZyBQeXRob24gMS42LjEgc29mdHdhcmUgaW4KK3NvdXJjZSBvciBiaW5hcnkgZm9ybSBhbmQgaXRzIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbi4KKworMi4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgQ05SSQoraGVyZWJ5IGdyYW50cyBMaWNlbnNlZSBhIG5vbmV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCB3b3JsZC13aWRlCitsaWNlbnNlIHRvIHJlcHJvZHVjZSwgYW5hbHl6ZSwgdGVzdCwgcGVyZm9ybSBhbmQvb3IgZGlzcGxheSBwdWJsaWNseSwKK3ByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywgZGlzdHJpYnV0ZSwgYW5kIG90aGVyd2lzZSB1c2UgUHl0aG9uIDEuNi4xCithbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uLCBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBDTlJJYHMKK0xpY2Vuc2UgQWdyZWVtZW50IGFuZCBDTlJJYHMgbm90aWNlIG9mIGNvcHlyaWdodCwgaS5lLiwgIkNvcHlyaWdodCAoYykKKzE5OTUtMjAwMSBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXM7IEFsbCBSaWdodHMKK1Jlc2VydmVkIiBhcmUgcmV0YWluZWQgaW4gUHl0aG9uIDEuNi4xIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlCit2ZXJzaW9uIHByZXBhcmVkIGJ5IExpY2Vuc2VlLiBBbHRlcm5hdGVseSwgaW4gbGlldSBvZiBDTlJJYHMgTGljZW5zZQorQWdyZWVtZW50LCBMaWNlbnNlZSBtYXkgc3Vic3RpdHV0ZSB0aGUgZm9sbG93aW5nIHRleHQgKG9taXR0aW5nIHRoZQorcXVvdGVzKTogIlB5dGhvbiAxLjYuMSBpcyBtYWRlIGF2YWlsYWJsZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQKK2NvbmRpdGlvbnMgaW4gQ05SSWBzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGlzIEFncmVlbWVudCB0b2dldGhlciB3aXRoCitQeXRob24gMS42LjEgbWF5IGJlIGxvY2F0ZWQgb24gdGhlIEludGVybmV0IHVzaW5nIHRoZSBmb2xsb3dpbmcKK3VuaXF1ZSwgcGVyc2lzdGVudCBpZGVudGlmaWVyIChrbm93biBhcyBhIGhhbmRsZSk6IDE4OTUuMjIvMTAxMy4gVGhpcworQWdyZWVtZW50IG1heSBhbHNvIGJlIG9idGFpbmVkIGZyb20gYSBwcm94eSBzZXJ2ZXIgb24gdGhlIEludGVybmV0Cit1c2luZyB0aGUgZm9sbG93aW5nIFVSTDogaHR0cDovL2hkbC5oYW5kbGUubmV0LzE4OTUuMjIvMTAxMyIuCisKKzMuIEluIHRoZSBldmVudCBMaWNlbnNlZSBwcmVwYXJlcyBhIGRlcml2YXRpdmUgd29yayB0aGF0IGlzIGJhc2VkIG9uCitvciBpbmNvcnBvcmF0ZXMgUHl0aG9uIDEuNi4xIG9yIGFueSBwYXJ0IHRoZXJlb2YsIGFuZCB3YW50cyB0byBtYWtlCit0aGUgZGVyaXZhdGl2ZSB3b3JrIGF2YWlsYWJsZSB0byBvdGhlcnMgYXMgcHJvdmlkZWQgaGVyZWluLCB0aGVuCitMaWNlbnNlZSBoZXJlYnkgYWdyZWVzIHRvIGluY2x1ZGUgaW4gYW55IHN1Y2ggd29yayBhIGJyaWVmIHN1bW1hcnkgb2YKK3RoZSBjaGFuZ2VzIG1hZGUgdG8gUHl0aG9uIDEuNi4xLgorCis0LiBDTlJJIGlzIG1ha2luZyBQeXRob24gMS42LjEgYXZhaWxhYmxlIHRvIExpY2Vuc2VlIG9uIGFuICJBUyBJUyIKK2Jhc2lzLiBDTlJJIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SCitJTVBMSUVELiBCWSBXQVkgT0YgRVhBTVBMRSwgQlVUIE5PVCBMSU1JVEFUSU9OLCBDTlJJIE1BS0VTIE5PIEFORAorRElTQ0xBSU1TIEFOWSBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUworRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFBZVEhPTiAxLjYuMSBXSUxMIE5PVAorSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFJJR0hUUy4KKworNS4gQ05SSSBTSEFMTCBOT1QgQkUgTElBQkxFIFRPIExJQ0VOU0VFIE9SIEFOWSBPVEhFUiBVU0VSUyBPRiBQWVRIT04KKzEuNi4xIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIExPU1MgQVMKK0EgUkVTVUxUIE9GIE1PRElGWUlORywgRElTVFJJQlVUSU5HLCBPUiBPVEhFUldJU0UgVVNJTkcgUFlUSE9OIDEuNi4xLAorT1IgQU5ZIERFUklWQVRJVkUgVEhFUkVPRiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBUSEVSRU9GLgorCis2LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdXBvbiBhIG1hdGVyaWFsCiticmVhY2ggb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorCis3LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBmZWRlcmFsCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3IG9mIHRoZSBVbml0ZWQgU3RhdGVzLCBpbmNsdWRpbmcgd2l0aG91dAorbGltaXRhdGlvbiB0aGUgZmVkZXJhbCBjb3B5cmlnaHQgbGF3LCBhbmQsIHRvIHRoZSBleHRlbnQgc3VjaAorVS5TLiBmZWRlcmFsIGxhdyBkb2VzIG5vdCBhcHBseSwgYnkgdGhlIGxhdyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mCitWaXJnaW5pYSwgZXhjbHVkaW5nIFZpcmdpbmlhYHMgY29uZmxpY3Qgb2YgbGF3IHByb3Zpc2lvbnMuCitOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgd2l0aCByZWdhcmQgdG8gZGVyaXZhdGl2ZSB3b3JrcyBiYXNlZAorb24gUHl0aG9uIDEuNi4xIHRoYXQgaW5jb3Jwb3JhdGUgbm9uLXNlcGFyYWJsZSBtYXRlcmlhbCB0aGF0IHdhcworcHJldmlvdXNseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIHRoZQorbGF3IG9mIHRoZSBDb21tb253ZWFsdGggb2YgVmlyZ2luaWEgc2hhbGwgZ292ZXJuIHRoaXMgTGljZW5zZQorQWdyZWVtZW50IG9ubHkgYXMgdG8gaXNzdWVzIGFyaXNpbmcgdW5kZXIgb3Igd2l0aCByZXNwZWN0IHRvCitQYXJhZ3JhcGhzIDQsIDUsIGFuZCA3IG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIE5vdGhpbmcgaW4gdGhpcworTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZGVlbWVkIHRvIGNyZWF0ZSBhbnkgcmVsYXRpb25zaGlwIG9mCithZ2VuY3ksIHBhcnRuZXJzaGlwLCBvciBqb2ludCB2ZW50dXJlIGJldHdlZW4gQ05SSSBhbmQgTGljZW5zZWUuIFRoaXMKK0xpY2Vuc2UgQWdyZWVtZW50IGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIENOUkkgdHJhZGVtYXJrcyBvcgordHJhZGUgbmFtZSBpbiBhIHRyYWRlbWFyayBzZW5zZSB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgb3IKK3NlcnZpY2VzIG9mIExpY2Vuc2VlLCBvciBhbnkgdGhpcmQgcGFydHkuCisKKzguIEJ5IGNsaWNraW5nIG9uIHRoZSAiQUNDRVBUIiBidXR0b24gd2hlcmUgaW5kaWNhdGVkLCBvciBieSBjb3B5aW5nLAoraW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgUHl0aG9uIDEuNi4xLCBMaWNlbnNlZSBhZ3JlZXMgdG8gYmUKK2JvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LgorCitBQ0NFUFQKKworQ1dJIExJQ0VOU0UgQUdSRUVNRU5UIEZPUiBQWVRIT04gMC45LjAgVEhST1VHSCAxLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5MSAtIDE5OTUsIFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bSBBbXN0ZXJkYW0sCitUaGUgTmV0aGVybGFuZHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAorcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdAorYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluCitzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIFN0aWNodGluZyBNYXRoZW1hdGlzY2gKK0NlbnRydW0gb3IgQ1dJIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24uCisKK1NUSUNIVElORyBNQVRIRU1BVElTQ0ggQ0VOVFJVTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8KK1RISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKK0ZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMIFNUSUNIVElORyBNQVRIRU1BVElTQ0ggQ0VOVFJVTSBCRSBMSUFCTEUKK0ZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KK0FDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCitPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1FQTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1FQTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q0MzNhYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUVBMLTEuMApAQCAtMCwwICsxLDQ4IEBACisKK1RIRSBRIFBVQkxJQyBMSUNFTlNFIHZlcnNpb24gMS4wCisKK0NvcHlyaWdodCAoQykgMTk5OS0yMDA1IFRyb2xsdGVjaCBBUywgTm9yd2F5LgorRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBsaWNlbnNlIGRvY3VtZW50LgorVGhlIGludGVudCBvZiB0aGlzIGxpY2Vuc2UgaXMgdG8gZXN0YWJsaXNoIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSB0aGUgc29mdHdhcmUgcmVndWxhdGVkIGJ5IHRoaXMgbGljZW5zZSB1bmRlciB0aGUgb3BlbiBzb3VyY2UgbW9kZWwuCisKK1RoaXMgbGljZW5zZSBhcHBsaWVzIHRvIGFueSBzb2Z0d2FyZSBjb250YWluaW5nIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgdGhhdCBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBRIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMS4wLiBTdWNoIHNvZnR3YXJlIGlzIGhlcmVpbiByZWZlcnJlZCB0byBhcyB0aGUgU29mdHdhcmUuIFRoaXMgbGljZW5zZSBjb3ZlcnMgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlLCB1c2Ugb2YgdGhpcmQtcGFydHkgYXBwbGljYXRpb24gcHJvZ3JhbXMgYmFzZWQgb24gdGhlIFNvZnR3YXJlLCBhbmQgZGV2ZWxvcG1lbnQgb2YgZnJlZSBzb2Z0d2FyZSB3aGljaCB1c2VzIHRoZSBTb2Z0d2FyZS4KKworR3JhbnRlZCBSaWdodHMKKworMS4gWW91IGFyZSBncmFudGVkIHRoZSBub24tZXhjbHVzaXZlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBsaWNlbnNlIHByb3ZpZGVkIHlvdSBhZ3JlZSB0byBhbmQgY29tcGx5IHdpdGggYW55IGFuZCBhbGwgY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UuIFdob2xlIG9yIHBhcnRpYWwgZGlzdHJpYnV0aW9uIG9mIHRoZSBTb2Z0d2FyZSwgb3Igc29mdHdhcmUgaXRlbXMgdGhhdCBsaW5rIHdpdGggdGhlIFNvZnR3YXJlLCBpbiBhbnkgZm9ybSBzaWduaWZpZXMgYWNjZXB0YW5jZSBvZiB0aGlzIGxpY2Vuc2UuCisKKzIuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgaW4gdW5tb2RpZmllZCBmb3JtIHByb3ZpZGVkIHRoYXQgdGhlIGVudGlyZSBwYWNrYWdlLCBpbmNsdWRpbmcgLSBidXQgbm90IHJlc3RyaWN0ZWQgdG8gLSBjb3B5cmlnaHQsIHRyYWRlbWFyayBub3RpY2VzIGFuZCBkaXNjbGFpbWVycywgYXMgcmVsZWFzZWQgYnkgdGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIHRoZSBTb2Z0d2FyZSwgaXMgZGlzdHJpYnV0ZWQuCisKKzMuIFlvdSBtYXkgbWFrZSBtb2RpZmljYXRpb25zIHRvIHRoZSBTb2Z0d2FyZSBhbmQgZGlzdHJpYnV0ZSB5b3VyIG1vZGlmaWNhdGlvbnMsIGluIGEgZm9ybSB0aGF0IGlzIHNlcGFyYXRlIGZyb20gdGhlIFNvZnR3YXJlLCBzdWNoIGFzIHBhdGNoZXMuIFRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zIGFwcGx5IHRvIG1vZGlmaWNhdGlvbnM6CisKK2EuIE1vZGlmaWNhdGlvbnMgbXVzdCBub3QgYWx0ZXIgb3IgcmVtb3ZlIGFueSBjb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUgU29mdHdhcmUuCitiLiBXaGVuIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFNvZnR3YXJlIGFyZSByZWxlYXNlZCB1bmRlciB0aGlzIGxpY2Vuc2UsIGEgbm9uLWV4Y2x1c2l2ZSByb3lhbHR5LWZyZWUgcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIFNvZnR3YXJlIHRvIGRpc3RyaWJ1dGUgeW91ciBtb2RpZmljYXRpb24gaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBTb2Z0d2FyZSBwcm92aWRlZCBzdWNoIHZlcnNpb25zIHJlbWFpbiBhdmFpbGFibGUgdW5kZXIgdGhlc2UgdGVybXMgaW4gYWRkaXRpb24gdG8gYW55IG90aGVyIGxpY2Vuc2Uocykgb2YgdGhlIGluaXRpYWwgZGV2ZWxvcGVyLgorCis0LiBZb3UgbWF5IGRpc3RyaWJ1dGUgbWFjaGluZS1leGVjdXRhYmxlIGZvcm1zIG9mIHRoZSBTb2Z0d2FyZSBvciBtYWNoaW5lLWV4ZWN1dGFibGUgZm9ybXMgb2YgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIFNvZnR3YXJlLCBwcm92aWRlZCB0aGF0IHlvdSBtZWV0IHRoZXNlIHJlc3RyaWN0aW9uczoKKworYS4gWW91IG11c3QgaW5jbHVkZSB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQgaW4gdGhlIGRpc3RyaWJ1dGlvbi4KK2IuIFlvdSBtdXN0IGVuc3VyZSB0aGF0IGFsbCByZWNpcGllbnRzIG9mIHRoZSBtYWNoaW5lLWV4ZWN1dGFibGUgZm9ybXMgYXJlIGFsc28gYWJsZSB0byByZWNlaXZlIHRoZSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIHRvIHRoZSBkaXN0cmlidXRlZCBTb2Z0d2FyZSwgaW5jbHVkaW5nIGFsbCBtb2RpZmljYXRpb25zLCB3aXRob3V0IGFueSBjaGFyZ2UgYmV5b25kIHRoZSBjb3N0cyBvZiBkYXRhIHRyYW5zZmVyLCBhbmQgcGxhY2UgcHJvbWluZW50IG5vdGljZXMgaW4gdGhlIGRpc3RyaWJ1dGlvbiBleHBsYWluaW5nIHRoaXMuCisKK2MuIFlvdSBtdXN0IGVuc3VyZSB0aGF0IGFsbCBtb2RpZmljYXRpb25zIGluY2x1ZGVkIGluIHRoZSBtYWNoaW5lLWV4ZWN1dGFibGUgZm9ybXMgYXJlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlLgorCis1LiBZb3UgbWF5IHVzZSB0aGUgb3JpZ2luYWwgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIFNvZnR3YXJlIHRvIGNvbXBpbGUsIGxpbmsgYW5kIHJ1biBhcHBsaWNhdGlvbiBwcm9ncmFtcyBsZWdhbGx5IGRldmVsb3BlZCBieSB5b3Ugb3IgYnkgb3RoZXJzLgorCis2LiBZb3UgbWF5IGRldmVsb3AgYXBwbGljYXRpb24gcHJvZ3JhbXMsIHJldXNhYmxlIGNvbXBvbmVudHMgYW5kIG90aGVyIHNvZnR3YXJlIGl0ZW1zIHRoYXQgbGluayB3aXRoIHRoZSBvcmlnaW5hbCBvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgU29mdHdhcmUuIFRoZXNlIGl0ZW1zLCB3aGVuIGRpc3RyaWJ1dGVkLCBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlcXVpcmVtZW50czoKKworYS4gWW91IG11c3QgZW5zdXJlIHRoYXQgYWxsIHJlY2lwaWVudHMgb2YgbWFjaGluZS1leGVjdXRhYmxlIGZvcm1zIG9mIHRoZXNlIGl0ZW1zIGFyZSBhbHNvIGFibGUgdG8gcmVjZWl2ZSBhbmQgdXNlIHRoZSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIHRvIHRoZSBpdGVtcyB3aXRob3V0IGFueSBjaGFyZ2UgYmV5b25kIHRoZSBjb3N0cyBvZiBkYXRhIHRyYW5zZmVyLgorYi4gWW91IG11c3QgZXhwbGljaXRseSBsaWNlbnNlIGFsbCByZWNpcGllbnRzIG9mIHlvdXIgaXRlbXMgdG8gdXNlIGFuZCByZS1kaXN0cmlidXRlIG9yaWdpbmFsIGFuZCBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgaXRlbXMgaW4gYm90aCBtYWNoaW5lLWV4ZWN1dGFibGUgYW5kIHNvdXJjZSBjb2RlIGZvcm1zLiBUaGUgcmVjaXBpZW50cyBtdXN0IGJlIGFibGUgdG8gZG8gc28gd2l0aG91dCBhbnkgY2hhcmdlcyB3aGF0c29ldmVyLCBhbmQgdGhleSBtdXN0IGJlIGFibGUgdG8gcmUtZGlzdHJpYnV0ZSB0byBhbnlvbmUgdGhleSBjaG9vc2UuCisKK2MuIElmIHRoZSBpdGVtcyBhcmUgbm90IGF2YWlsYWJsZSB0byB0aGUgZ2VuZXJhbCBwdWJsaWMsIGFuZCB0aGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIFNvZnR3YXJlIHJlcXVlc3RzIGEgY29weSBvZiB0aGUgaXRlbXMsIHRoZW4geW91IG11c3Qgc3VwcGx5IG9uZS4KKworTGltaXRhdGlvbnMgb2YgTGlhYmlsaXR5CisKK0luIG5vIGV2ZW50IHNoYWxsIHRoZSBpbml0aWFsIGRldmVsb3BlcnMgb3IgY29weXJpZ2h0IGhvbGRlcnMgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgLSBidXQgbm90IHJlc3RyaWN0ZWQgdG8gLSBsb3N0IHJldmVudWUgb3IgcHJvZml0cyBvciBvdGhlciBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgZXZlbiBpZiB0aGV5IGhhdmUgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMsIGV4Y2VwdCB0byB0aGUgZXh0ZW50IGludmFyaWFibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZS4KKworTm8gV2FycmFudHkKKworVGhlIFNvZnR3YXJlIGFuZCB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQgYXJlIHByb3ZpZGVkIEFTIElTIHdpdGggTk8gV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIElOQ0xVRElORyBUSEUgV0FSUkFOVFkgT0YgREVTSUdOLCBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCitDaG9pY2Ugb2YgTGF3CisKK1RoaXMgbGljZW5zZSBpcyBnb3Zlcm5lZCBieSB0aGUgTGF3cyBvZiBOb3J3YXkuIERpc3B1dGVzIHNoYWxsIGJlIHNldHRsZWQgYnkgT3NsbyBDaXR5IENvdXJ0LgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JIZUNvcy0xIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SSGVDb3MtMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWI0MGI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SSGVDb3MtMQpAQCAtMCwwICsxLDQwMSBAQAorCitSZWQgSGF0IGVDb3MgUHVibGljIExpY2Vuc2UgdjEuMQorCisxLiBERUZJTklUSU9OUworCisxLjEuICJDb250cmlidXRvciIgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvCit0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworMS4yLiAiQ29udHJpYnV0b3IgVmVyc2lvbiIgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbAorQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5Cit0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKzEuMy4gIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUKK2NvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nCitwb3J0aW9ucyB0aGVyZW9mLgorCisxLjQuICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseQorYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YKK2RhdGEuCisKKzEuNS4gIkV4ZWN1dGFibGUiIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZQorQ29kZS4KKworMS42LiAiSW5pdGlhbCBEZXZlbG9wZXIiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzCit0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuCisKKzEuNy4gIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yCitwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS44LiAiTGljZW5zZSIgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworMS45LiAiTW9kaWZpY2F0aW9ucyIgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlCitzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMKK01vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhCitNb2RpZmljYXRpb24gaXM6CisKK0EuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbAorQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCitCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cworTW9kaWZpY2F0aW9ucy4KKworMS4xMC4gIk9yaWdpbmFsIENvZGUiIG1lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUKK3doaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcyBPcmlnaW5hbAorQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkKK0NvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuCisKKzEuMTEuICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kCitpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3IgYSBsaXN0IG9mIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbAorY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUKK0NvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3IncyBjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYQorY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLCBwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS0KK2FyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisKKzEuMTIuICJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMKK3VuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24KK29mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIKK2luY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbgorY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zCisoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoCitlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQKKyg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMS4xMy4gIlJlZCBIYXQgQnJhbmRlZCBDb2RlIiBpcyBjb2RlIHRoYXQgUmVkIEhhdCBkaXN0cmlidXRlcyBhbmQvb3IKK3Blcm1pdHMgb3RoZXJzIHRvIGRpc3RyaWJ1dGUgdW5kZXIgZGlmZmVyZW50IHRlcm1zIHRoYW4gdGhlIFJlZCBIYXQgZUNvcyBQdWJsaWMKK0xpY2Vuc2UuIFJlZCBIYXQncyBCcmFuZGVkIENvZGUgbWF5IGNvbnRhaW4gcGFydCBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMi4gU09VUkNFIENPREUgTElDRU5TRQorCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLQorZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKworKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlCitPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgb3IgYXMgcGFydAorb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBJbml0aWFsIERldmVsb3BlciwgdG8KK21ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsICgiVXRpbGl6ZSIpIHRoZSBPcmlnaW5hbCBDb2RlIChvcgorcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5CituZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byBVdGlsaXplIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSBhbmQKK25vdCB0byBhbnkgZ3JlYXRlciBleHRlbnQgdGhhdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIFV0aWxpemUgZnVydGhlcgorTW9kaWZpY2F0aW9ucyBvciBjb21iaW5hdGlvbnMuCisKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuCitFYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisKKyhhKSB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZQorTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbgordW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgb3IgYXMgcGFydCBvZiBhCitMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBDb250cmlidXRvciwgdG8KK1V0aWxpemUgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQKK3RoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gVXRpbGl6ZSB0aGUKK0NvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBhbmQgbm90IHRvIGFueSBncmVhdGVyIGV4dGVudCB0aGF0CittYXkgYmUgbmVjZXNzYXJ5IHRvIFV0aWxpemUgZnVydGhlciBNb2RpZmljYXRpb25zIG9yIGNvbWJpbmF0aW9ucy4KKworMy4gRElTVFJJQlVUSU9OIE9CTElHQVRJT05TCisKKzMuMS4gQXBwbGljYXRpb24gb2YgTGljZW5zZS4KK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5Cit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlCitDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91CittdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdQorZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbgordGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZQorcmVjaXBpZW50cycgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQKK29mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuCisKKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgbWFkZQorYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB2aWEgYW4gYWNjZXB0ZWQKK0VsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlCit2ZXJzaW9uIGF2YWlsYWJsZSBhbmQgdG8gdGhlIEluaXRpYWwgRGV2ZWxvcGVyOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhCitFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlCisoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KQorbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZQorYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlCitDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzCittYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIG5vdGlmeWluZyB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIG9mIHRoZSBNb2RpZmljYXRpb24gYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgU291cmNlIGlmIGEgY29udGFjdCBtZWFucworaXMgcHJvdmlkZWQuIFJlZCBIYXQgd2lsbCBiZSBhY3RpbmcgYXMgbWFpbnRhaW5lciBvZiB0aGUgU291cmNlIGFuZCBtYXkgcHJvdmlkZQorYW4gRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gbWVjaGFuaXNtIGZvciB0aGUgTW9kaWZpY2F0aW9uIHRvIGJlIG1hZGUgYXZhaWxhYmxlLgorWW91IGNhbiBjb250YWN0IFJlZCBIYXQgdG8gbWFrZSB0aGUgTW9kaWZpY2F0aW9uIGF2YWlsYWJsZSBhbmQgdG8gbm90aWZ5IHRoZQorSW5pdGlhbCBEZXZlbG9wZXIuIChodHRwOi8vc291cmNld2FyZS5jeWdudXMuY29tL2Vjb3MvKQorCiszLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIHlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlCitkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kIHRoZSBkYXRlIG9mCithbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMKK2Rlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlCitDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbgoraW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMKKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuCitJZiBZb3UgaGF2ZSBrbm93bGVkZ2UgdGhhdCBhIHBhcnR5IGNsYWltcyBhbiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgaW4KK3BhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSBvciBjb2RlIChvciBpdHMgdXRpbGl6YXRpb24gdW5kZXIgdGhpcyBMaWNlbnNlKSwgeW91CittdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZAorIkxFR0FMIiB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbgorc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiB5b3Ugb2J0YWluCitzdWNoIGtub3dsZWRnZSBhZnRlciBZb3UgbWFrZSBZb3VyIE1vZGlmaWNhdGlvbiBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluCitTZWN0aW9uIDMuMiwgWW91IHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIFlvdSBtYWtlCithdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUKK21haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQKK3RoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorCisoYikgQ29udHJpYnV0b3IgQVBJcy4KK0lmIFlvdXIgTW9kaWZpY2F0aW9uIGlzIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBhbmQgWW91IG93biBvcgorY29udHJvbCBwYXRlbnRzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIHlvdSBtdXN0CithbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS4KKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLgorWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUsIGFuZAordGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUsIHdoZXJlIFlvdSBkZXNjcmliZQorcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUKK01vZGlmaWNhdGlvbihzKSwgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIFNvdXJjZSBDb2RlLiBJZgoraXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8KK2l0cyBzdHJ1Y3R1cmUsIHRoZW4geW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEKK3JlbGV2YW50IGRpcmVjdG9yeSBmaWxlKSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYQorbm90aWNlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LAoraW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4KKworSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlCitJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0Cithbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91CithbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkKK0NvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoCitDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3UKK29mZmVyLgorCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mCitTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsIGFuZCBpZiBZb3UgaW5jbHVkZSBhCitub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdQoraGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseQoraW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvcgorY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkCitDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgdW5kZXIgYSBsaWNlbnNlCitvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZAordGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlCitmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQncworcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZgorWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UKK2l0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkCitieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlCit0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eQoraW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2gKK3Rlcm1zIFlvdSBvZmZlci4KKworSWYgeW91IGRpc3RyaWJ1dGUgZXhlY3V0YWJsZSB2ZXJzaW9ucyBjb250YWluaW5nIENvdmVyZWQgQ29kZSwgeW91IG11c3QKK3JlcHJvZHVjZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCitwcm92aWRlZCB3aXRoIHRoZSBwcm9kdWN0LgorCiszLjcuIExhcmdlciBXb3Jrcy4KK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90Citnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhCitzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMKK0xpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4KKworNC4gSU5BQklMSVRZIFRPIENPTVBMWSBEVUUgVE8gU1RBVFVURSBPUiBSRUdVTEFUSU9OCisKK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZQord2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUgb3IgcmVndWxhdGlvbgordGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50Citwb3NzaWJsZTsgKGIpIGNpdGUgdGhlIHN0YXR1dGUgb3IgcmVndWxhdGlvbiB0aGF0IHByb2hpYml0cyB5b3UgZnJvbSBhZGhlcmluZwordG8gdGhlIGxpY2Vuc2U7IGFuZCAoYykgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaAorZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kCittdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlCitleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZQorc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvCit1bmRlcnN0YW5kIGl0LiBZb3UgbXVzdCBzdWJtaXQgdGhpcyBMRUdBTCBmaWxlIHRvIFJlZCBIYXQgZm9yIHJldmlldywgYW5kIFlvdQord2lsbCBub3QgYmUgYWJsZSB1c2UgdGhlIGNvdmVyZWQgY29kZSBpbiBhbnkgbWVhbnMgdW50aWwgcGVybWlzc2lvbiBpcyBncmFudGVkCitmcm9tIFJlZCBIYXQgdG8gYWxsb3cgZm9yIHRoZSBpbmFiaWxpdHkgdG8gY29tcGx5IGR1ZSB0byBzdGF0dXRlIG9yIHJlZ3VsYXRpb24uCisKKzUuIEFQUExJQ0FUSU9OIE9GIFRISVMgTElDRU5TRQorCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlCitub3RpY2UgaW4gRXhoaWJpdCBBLCBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCisKK1JlZCBIYXQgbWF5IGluY2x1ZGUgQ292ZXJlZCBDb2RlIGluIHByb2R1Y3RzIHdpdGhvdXQgc3VjaCBhZGRpdGlvbmFsIHByb2R1Y3RzCitiZWNvbWluZyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBtYXkgbGljZW5zZSBzdWNoIGFkZGl0aW9uYWwKK3Byb2R1Y3RzIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2UuCisKK1JlZCBIYXQgbWF5IGxpY2Vuc2UgdGhlIFNvdXJjZSBDb2RlIG9mIFJlZCBIYXQgQnJhbmRlZCBDb2RlIHdpdGhvdXQgUmVkIEhhdAorQnJhbmRlZCBDb2RlIGJlY29taW5nIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIG1heSBsaWNlbnNlIFJlZAorSGF0IEJyYW5kZWQgQ29kZSBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlLgorQ29udGFjdCBSZWQgSGF0IGZvciBkZXRhaWxzIG9mIGFsdGVybmF0ZSBsaWNlbnNpbmcgdGVybXMgYXZhaWxhYmxlLgorCis2LiBWRVJTSU9OUyBPRiBUSEUgTElDRU5TRQorCis2LjEuIE5ldyBWZXJzaW9ucy4KK1JlZCBIYXQgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0bwordGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKworNi4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLgorT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLAorWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbworY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZgordGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IFJlZCBIYXQuIE5vIG9uZSBvdGhlciB0aGFuIFJlZCBIYXQgaGFzIHRoZSByaWdodCB0bworbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBiZXlvbmQgd2hhdCBpcyBncmFudGVkIHVuZGVyIHRoaXMKK2FuZCBzdWJzZXF1ZW50IExpY2Vuc2VzLgorCis2LjMuIERlcml2YXRpdmUgV29ya3MuCitJZiB5b3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8KK2luIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMKK0xpY2Vuc2UpLCB5b3UgbXVzdCAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0IHRoZSBwaHJhc2VzCisiRUNPUyIsICJlQ29zIiwgIlJlZCBIYXQiLCAiUkhFUEwiIG9yCithbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBhbnl3aGVyZSBpbiB5b3VyIGxpY2Vuc2UgYW5kIChiKQorb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCB5b3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2gKK2RpZmZlciBmcm9tIHRoZSBSZWQgSGF0IGVDb3MgUHVibGljIExpY2Vuc2UuIChGaWxsaW5nIGluIHRoZSBuYW1lIG9mIHRoZQorSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4KK0V4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzCitMaWNlbnNlLikKKworNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWQorCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVAorTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsCitGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFCitRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQKK0NPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZCitPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IKK0NPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTCitMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUworRElTQ0xBSU1FUi4KKworOC4gVEVSTUlOQVRJT04KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYKK1lvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMAorZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaAorYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zCit3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzCitMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZCisKK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWSBPVEhFUgorQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSAorUEFSVElFUywgQkUgTElBQkxFIFRPIFlPVSBPUiBBTlkgT1RIRVIgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsCitJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQKK0xJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IKK01BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0gKK1BBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTCitMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTAorSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFknUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcKK1BST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUgorTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhBVCBFWENMVVNJT04gQU5ECitMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCisxMC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUworCitUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSwiIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluCis0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgImNvbW1lcmNpYWwgY29tcHV0ZXIKK3NvZnR3YXJlIiBhbmQgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiwiIGFzCitzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuCisxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4KK0dvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoCitoZXJlaW4uCisKKzExLiBNSVNDRUxMQU5FT1VTCisKK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlcgoraGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2gKK3Byb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQKK2VuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucworKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZworaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBXaXRoIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lCitwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiwKK3RoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2E6IChhKSB1bmxlc3Mgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nLCBhbGwKK2Rpc3B1dGVzIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSAoZXhjZXB0aW5nIGFueSBkaXNwdXRlIHJlbGF0aW5nIHRvCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzKSBzaGFsbCBiZSBzdWJqZWN0IHRvIGZpbmFsIGFuZCBiaW5kaW5nCithcmJpdHJhdGlvbiwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHBheWluZyBhbGwgY29zdHMgb2YgYXJiaXRyYXRpb247IChiKSBhbnkKK2FyYml0cmF0aW9uIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGhlbGQgaW4gU2FudGEgQ2xhcmEgQ291bnR5LAorQ2FsaWZvcm5pYSwgdW5kZXIgdGhlIGF1c3BpY2VzIG9mIEpBTVMvRW5kRGlzcHV0ZTsgYW5kIChjKSBhbnkgbGl0aWdhdGlvbgorcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsCitDb3VydHMgb2YgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEKK0NvdW50eSwgQ2FsaWZvcm5pYSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nCit3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5cyBmZWVzIGFuZCBleHBlbnNlcy4gVGhlCithcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsCitTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQKK3RoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdAorYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisxMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUworCitFeGNlcHQgaW4gY2FzZXMgd2hlcmUgYW5vdGhlciBDb250cmlidXRvciBoYXMgZmFpbGVkIHRvIGNvbXBseSB3aXRoIFNlY3Rpb24KKzMuNCwgWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YKK1lvdXIgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgYmFzZWQgb24gdGhlIG51bWJlciBvZiBjb3BpZXMgb2YKK0NvdmVyZWQgQ29kZSB5b3UgbWFkZSBhdmFpbGFibGUsIHRoZSByZXZlbnVlcyB5b3UgcmVjZWl2ZWQgZnJvbSB1dGlsaXppbmcgc3VjaAorcmlnaHRzLCBhbmQgb3RoZXIgcmVsZXZhbnQgZmFjdG9ycy4gWW91IGFncmVlIHRvIHdvcmsgd2l0aCBhZmZlY3RlZCBwYXJ0aWVzIHRvCitkaXN0cmlidXRlIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4KKworMTMuIEFERElUSU9OQUwgVEVSTVMgQVBQTElDQUJMRSBUTyBUSEUgUkVEIEhBVCBFQ09TIFBVQkxJQyBMSUNFTlNFCisKK05vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IFJlZCBIYXQgZnJvbSBsaWNlbnNpbmcKK3VuZGVyIGRpZmZlcmVudCB0ZXJtcyB0aGFuIHRoaXMgTGljZW5zZSBhbnkgY29kZSB3aGljaCBSZWQgSGF0IG90aGVyd2lzZSB3b3VsZAoraGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuCisKK1JlZCBIYXQgYW5kIGxvZ28gLSBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFyaworUmVkIEhhdCwgdGhlIFJlZCBIYXQgbG9nbywgZUNvcyBsb2dvLCBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZQorT3JpZ2luYWwgQ29kZS4gWW91IG1heSBjb250YWN0IFJlZCBIYXQgZm9yIHBlcm1pc3Npb24gdG8gZGlzcGxheSB0aGUgUmVkIEhhdAorYW5kIGVDb3MgbWFya3MgaW4gZWl0aGVyIHRoZSBkb2N1bWVudGF0aW9uIG9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gYmV5b25kCit0aGF0IHJlcXVpcmVkIGluIEV4aGliaXQgQi4KKworSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gQ29udHJhY3R1YWwgT2JsaWdhdGlvbiAtIFRvIHRoZSBleHRlbnQgdGhhdCBSZWQgSGF0CitpcyBsaW1pdGVkIGNvbnRyYWN0dWFsbHkgZnJvbSBtYWtpbmcgdGhpcmQgcGFydHkgY29kZSBhdmFpbGFibGUgdW5kZXIgdGhpcworTGljZW5zZSwgUmVkIEhhdCBtYXkgY2hvb3NlIHRvIGludGVncmF0ZSBzdWNoIHRoaXJkIHBhcnR5IGNvZGUgaW50byBDb3ZlcmVkCitDb2RlIHdpdGhvdXQgYmVpbmcgcmVxdWlyZWQgdG8gZGlzdHJpYnV0ZSBzdWNoIHRoaXJkIHBhcnR5IGNvZGUgaW4gU291cmNlIENvZGUKK2Zvcm0sIGV2ZW4gaWYgc3VjaCB0aGlyZCBwYXJ0eSBjb2RlIHdvdWxkIG90aGVyd2lzZSBiZSBjb25zaWRlcmVkCisiTW9kaWZpY2F0aW9ucyIgdW5kZXIgdGhpcyBMaWNlbnNlLgorCitFWEhJQklUIEEKKworIlRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIFJlZCBIYXQgZUNvcyBQdWJsaWMgTGljZW5zZQorVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgorY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovLword3d3LnJlZGhhdC5jb20vCisKK1NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIKK2Jhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKK2ZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGlzIGVDb3MgLSBFbWJlZGRlZCBDb25maWd1cmFibGUgT3BlcmF0aW5nIFN5c3RlbSwgcmVsZWFzZWQKK1NlcHRlbWJlciAzMCwgMTk5OC4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIFJlZCBIYXQuCitQb3J0aW9ucyBjcmVhdGVkIGJ5IFJlZCBIYXQgYXJlIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCBSZWQgSGF0LCBJbmMuCitBbGwgUmlnaHRzIFJlc2VydmVkLiIKKworRVhISUJJVCBCCisKK1BhcnQgb2YgdGhlIHNvZnR3YXJlIGVtYmVkZGVkIGluIHRoaXMgcHJvZHVjdCBpcyBlQ29zIC0gRW1iZWRkZWQgQ29uZmlndXJhYmxlCitPcGVyYXRpbmcgU3lzdGVtLCBhIHRyYWRlbWFyayBvZiBSZWQgSGF0LiBQb3J0aW9ucyBjcmVhdGVkIGJ5IFJlZCBIYXQgYXJlCitDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAgUmVkIEhhdCwgSW5jLiAoaHR0cDovL3d3dy5yZWRoYXQuY29tLykuIEFsbAorUmlnaHRzIFJlc2VydmVkLgorCitUSEUgU09GVFdBUkUgSU4gVEhJUyBQUk9EVUNUIFdBUyBJTiBQQVJUIFBST1ZJREVEIEJZIFJFRCBIQVQgQU5EIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTworRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZCitPRiBTVUNIIERBTUFHRS4KKworCisKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUkhlQ29zLTEuMSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUkhlQ29zLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTg5MDBhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SSGVDb3MtMS4xCkBAIC0wLDAgKzEsMTUxIEBACisKK1JlZCBIYXQgZUNvcyBQdWJsaWMgTGljZW5zZSB2MS4xCisKKzEuIERFRklOSVRJT05TCisKKzEuMS4gIkNvbnRyaWJ1dG9yIiBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMi4gIkNvbnRyaWJ1dG9yIFZlcnNpb24iIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKworMS4zLiAiQ292ZXJlZCBDb2RlIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorCisxLjQuICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLgorCisxLjUuICJFeGVjdXRhYmxlIiBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKworMS42LiAiSW5pdGlhbCBEZXZlbG9wZXIiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS4KKworMS43LiAiTGFyZ2VyIFdvcmsiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuOC4gIkxpY2Vuc2UiIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKzEuOS4gIk1vZGlmaWNhdGlvbnMiIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOgorCitBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCitCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCisxLjEwLiAiT3JpZ2luYWwgQ29kZSIgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMgT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKworMS4xMS4gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBhIGxpc3Qgb2Ygc291cmNlIGNvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3JgcyBjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisKKzEuMTIuICJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisxLjEzLiAiUmVkIEhhdCBCcmFuZGVkIENvZGUiIGlzIGNvZGUgdGhhdCBSZWQgSGF0IGRpc3RyaWJ1dGVzIGFuZC9vciBwZXJtaXRzIG90aGVycyB0byBkaXN0cmlidXRlIHVuZGVyIGRpZmZlcmVudCB0ZXJtcyB0aGFuIHRoZSBSZWQgSGF0IGVDb3MgUHVibGljIExpY2Vuc2UuIFJlZCBIYXRgcyBCcmFuZGVkIENvZGUgbWF5IGNvbnRhaW4gcGFydCBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMi4gU09VUkNFIENPREUgTElDRU5TRQorCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisKKyhhKSB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKworKGIpIHVuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IEluaXRpYWwgRGV2ZWxvcGVyLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSBhbmQgc2VsbCAoIlV0aWxpemUiKSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIFV0aWxpemUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGFuZCBub3QgdG8gYW55IGdyZWF0ZXIgZXh0ZW50IHRoYXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBVdGlsaXplIGZ1cnRoZXIgTW9kaWZpY2F0aW9ucyBvciBjb21iaW5hdGlvbnMuCisKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuCitFYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKworKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKworKGIpIHVuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IENvbnRyaWJ1dG9yLCB0byBVdGlsaXplIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gVXRpbGl6ZSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGFuZCBub3QgdG8gYW55IGdyZWF0ZXIgZXh0ZW50IHRoYXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBVdGlsaXplIGZ1cnRoZXIgTW9kaWZpY2F0aW9ucyBvciBjb21iaW5hdGlvbnMuCisKKzMuIERJU1RSSUJVVElPTiBPQkxJR0FUSU9OUworCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS4KKworMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdmlhIGFuIGFjY2VwdGVkIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlIGFuZCB0byB0aGUgSW5pdGlhbCBEZXZlbG9wZXI7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4gWW91IGFyZSByZXNwb25zaWJsZSBmb3Igbm90aWZ5aW5nIHRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgTW9kaWZpY2F0aW9uIGFuZCB0aGUgbG9jYXRpb24gb2YgdGhlIFNvdXJjZSBpZiBhIGNvbnRhY3QgbWVhbnMgaXMgcHJvdmlkZWQuIFJlZCBIYXQgd2lsbCBiZSBhY3RpbmcgYXMgbWFpbnRhaW5lciBvZiB0aGUgU291cmNlIGFuZCBtYXkgcHJvdmlkZSBhbiBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBtZWNoYW5pc20gZm9yIHRoZSBNb2RpZmljYXRpb24gdG8gYmUgbWFkZSBhdmFpbGFibGUuIFlvdSBjYW4gY29udGFjdCBSZWQgSGF0IHRvIG1ha2UgdGhlIE1vZGlmaWNhdGlvbiBhdmFpbGFibGUgYW5kIHRvIG5vdGlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIChodHRwOi8vc291cmNld2FyZS5jeWdudXMuY29tL2Vjb3MvKQorCiszLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIHlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMKKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuIAorSWYgWW91IGhhdmUga25vd2xlZGdlIHRoYXQgYSBwYXJ0eSBjbGFpbXMgYW4gaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0IGluIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSBvciBjb2RlIChvciBpdHMgdXRpbGl6YXRpb24gdW5kZXIgdGhpcyBMaWNlbnNlKSwgeW91IG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRpb24gdGl0bGVkICJMRUdBTCIgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiB5b3Ugb2J0YWluIHN1Y2gga25vd2xlZGdlIGFmdGVyIFlvdSBtYWtlIFlvdXIgTW9kaWZpY2F0aW9uIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIFlvdSBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBZb3UgbWFrZSBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKworKGIpIENvbnRyaWJ1dG9yIEFQSXMuIAorSWYgWW91ciBNb2RpZmljYXRpb24gaXMgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBZb3Ugb3duIG9yIGNvbnRyb2wgcGF0ZW50cyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCB5b3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS4KKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLgorWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUsIGFuZCB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSwgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSwgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIFNvdXJjZSBDb2RlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIHlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSBmaWxlKSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuCisKK0hvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsIGFuZCBpZiBZb3UgaW5jbHVkZSBhIG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSBpbmNsdWRlZCBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byB0aGUgQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLgorCitJZiB5b3UgZGlzdHJpYnV0ZSBleGVjdXRhYmxlIHZlcnNpb25zIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlLCB5b3UgbXVzdCByZXByb2R1Y2UgdGhlIG5vdGljZSBpbiBFeGhpYml0IEIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBwcm9kdWN0LgorCiszLjcuIExhcmdlciBXb3Jrcy4KK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4KKworNC4gSU5BQklMSVRZIFRPIENPTVBMWSBEVUUgVE8gU1RBVFVURSBPUiBSRUdVTEFUSU9OCisKK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgKGIpIGNpdGUgdGhlIHN0YXR1dGUgb3IgcmVndWxhdGlvbiB0aGF0IHByb2hpYml0cyB5b3UgZnJvbSBhZGhlcmluZyB0byB0aGUgbGljZW5zZTsgYW5kIChjKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LiBZb3UgbXVzdCBzdWJtaXQgdGhpcyBMRUdBTCBmaWxlIHRvIFJlZCBIYXQgZm9yIHJldmlldywgYW5kIFlvdSB3aWxsIG5vdCBiZSBhYmxlIHVzZSB0aGUgY292ZXJlZCBjb2RlIGluIGFueSBtZWFucyB1bnRpbCBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgZnJvbSBSZWQgSGF0IHRvIGFsbG93IGZvciB0aGUgaW5hYmlsaXR5IHRvIGNvbXBseSBkdWUgdG8gc3RhdHV0ZSBvciByZWd1bGF0aW9uLgorCis1LiBBUFBMSUNBVElPTiBPRiBUSElTIExJQ0VOU0UKKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBLCBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCisKK1JlZCBIYXQgbWF5IGluY2x1ZGUgQ292ZXJlZCBDb2RlIGluIHByb2R1Y3RzIHdpdGhvdXQgc3VjaCBhZGRpdGlvbmFsIHByb2R1Y3RzIGJlY29taW5nIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIG1heSBsaWNlbnNlIHN1Y2ggYWRkaXRpb25hbCBwcm9kdWN0cyBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlLgorCitSZWQgSGF0IG1heSBsaWNlbnNlIHRoZSBTb3VyY2UgQ29kZSBvZiBSZWQgSGF0IEJyYW5kZWQgQ29kZSB3aXRob3V0IFJlZCBIYXQgQnJhbmRlZCBDb2RlIGJlY29taW5nIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIG1heSBsaWNlbnNlIFJlZCBIYXQgQnJhbmRlZCBDb2RlIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2UuIENvbnRhY3QgUmVkIEhhdCBmb3IgZGV0YWlscyBvZiBhbHRlcm5hdGUgbGljZW5zaW5nIHRlcm1zIGF2YWlsYWJsZS4KKworNi4gVkVSU0lPTlMgT0YgVEhFIExJQ0VOU0UKKworNi4xLiBOZXcgVmVyc2lvbnMuCitSZWQgSGF0IG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKworNi4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLgorT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IFJlZCBIYXQuIE5vIG9uZSBvdGhlciB0aGFuIFJlZCBIYXQgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGJleW9uZCB3aGF0IGlzIGdyYW50ZWQgdW5kZXIgdGhpcyBhbmQgc3Vic2VxdWVudCBMaWNlbnNlcy4KKworNi4zLiBEZXJpdmF0aXZlIFdvcmtzLgorSWYgeW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvIGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIHlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZXMgIkVDT1MiLCAiZUNvcyIsICJSZWQgSGF0IiwgIlJIRVBMIiBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBhbnl3aGVyZSBpbiB5b3VyIGxpY2Vuc2UgYW5kIChiKSBvdGhlcndpc2UgbWFrZSBpdCBjbGVhciB0aGF0IHlvdXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSBjb250YWlucyB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGUgUmVkIEhhdCBlQ29zIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMgTGljZW5zZS4pCisKKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkKKworQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCisKKzguIFRFUk1JTkFUSU9OCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkKKworVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gWU9VIE9SIEFOWSBPVEhFUiBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhBVCBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTCisKK1RoZSBDb3ZlcmVkIENvZGUgaXMgYSAiY29tbWVyY2lhbCBpdGVtLCIgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4gNDggQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIiBhbmQgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiwiIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKworMTEuIE1JU0NFTExBTkVPVVMKKworVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBwcm92aXNpb25zIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBXaXRoIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lIHBhcnR5IGlzIGEgY2l0aXplbiBvZiwgb3IgYW4gZW50aXR5IGNoYXJ0ZXJlZCBvciByZWdpc3RlcmVkIHRvIGRvIGJ1c2luZXNzIGluLCB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhOiAoYSkgdW5sZXNzIG90aGVyd2lzZSBhZ3JlZWQgaW4gd3JpdGluZywgYWxsIGRpc3B1dGVzIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSAoZXhjZXB0aW5nIGFueSBkaXNwdXRlIHJlbGF0aW5nIHRvIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMpIHNoYWxsIGJlIHN1YmplY3QgdG8gZmluYWwgYW5kIGJpbmRpbmcgYXJiaXRyYXRpb24sIHdpdGggdGhlIGxvc2luZyBwYXJ0eSBwYXlpbmcgYWxsIGNvc3RzIG9mIGFyYml0cmF0aW9uOyAoYikgYW55IGFyYml0cmF0aW9uIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGhlbGQgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLCB1bmRlciB0aGUgYXVzcGljZXMgb2YgSkFNUy9FbmREaXNwdXRlOyBhbmQgKGMpIGFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXMgZmVlcyBhbmQgZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisxMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUworCitFeGNlcHQgaW4gY2FzZXMgd2hlcmUgYW5vdGhlciBDb250cmlidXRvciBoYXMgZmFpbGVkIHRvIGNvbXBseSB3aXRoIFNlY3Rpb24gMy40LCBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBZb3VyIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgY29waWVzIG9mIENvdmVyZWQgQ29kZSB5b3UgbWFkZSBhdmFpbGFibGUsIHRoZSByZXZlbnVlcyB5b3UgcmVjZWl2ZWQgZnJvbSB1dGlsaXppbmcgc3VjaCByaWdodHMsIGFuZCBvdGhlciByZWxldmFudCBmYWN0b3JzLiBZb3UgYWdyZWUgdG8gd29yayB3aXRoIGFmZmVjdGVkIHBhcnRpZXMgdG8gZGlzdHJpYnV0ZSByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuCisKKzEzLiBBRERJVElPTkFMIFRFUk1TIEFQUExJQ0FCTEUgVE8gVEhFIFJFRCBIQVQgRUNPUyBQVUJMSUMgTElDRU5TRQorCitOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBSZWQgSGF0IGZyb20gbGljZW5zaW5nIHVuZGVyIGRpZmZlcmVudCB0ZXJtcyB0aGFuIHRoaXMgTGljZW5zZSBhbnkgY29kZSB3aGljaCBSZWQgSGF0IG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4KKworUmVkIEhhdCBhbmQgbG9nbyAtIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUgdHJhZGVtYXJrIFJlZCBIYXQsIHRoZSBSZWQgSGF0IGxvZ28sIGVDb3MgbG9nbywgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgQ29kZS4gWW91IG1heSBjb250YWN0IFJlZCBIYXQgZm9yIHBlcm1pc3Npb24gdG8gZGlzcGxheSB0aGUgUmVkIEhhdCBhbmQgZUNvcyBtYXJrcyBpbiBlaXRoZXIgdGhlIGRvY3VtZW50YXRpb24gb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBiZXlvbmQgdGhhdCByZXF1aXJlZCBpbiBFeGhpYml0IEIuCisKK0luYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIENvbnRyYWN0dWFsIE9ibGlnYXRpb24gLSBUbyB0aGUgZXh0ZW50IHRoYXQgUmVkIEhhdCBpcyBsaW1pdGVkIGNvbnRyYWN0dWFsbHkgZnJvbSBtYWtpbmcgdGhpcmQgcGFydHkgY29kZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBMaWNlbnNlLCBSZWQgSGF0IG1heSBjaG9vc2UgdG8gaW50ZWdyYXRlIHN1Y2ggdGhpcmQgcGFydHkgY29kZSBpbnRvIENvdmVyZWQgQ29kZSB3aXRob3V0IGJlaW5nIHJlcXVpcmVkIHRvIGRpc3RyaWJ1dGUgc3VjaCB0aGlyZCBwYXJ0eSBjb2RlIGluIFNvdXJjZSBDb2RlIGZvcm0sIGV2ZW4gaWYgc3VjaCB0aGlyZCBwYXJ0eSBjb2RlIHdvdWxkIG90aGVyd2lzZSBiZSBjb25zaWRlcmVkICJNb2RpZmljYXRpb25zIiB1bmRlciB0aGlzIExpY2Vuc2UuCisKK0VYSElCSVQgQQorCisiVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgUmVkIEhhdCBlQ29zIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5yZWRoYXQuY29tLworCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworVGhlIE9yaWdpbmFsIENvZGUgaXMgZUNvcyAtIEVtYmVkZGVkIENvbmZpZ3VyYWJsZSBPcGVyYXRpbmcgU3lzdGVtLCByZWxlYXNlZCBTZXB0ZW1iZXIgMzAsIDE5OTguIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBSZWQgSGF0LiBQb3J0aW9ucyBjcmVhdGVkIGJ5IFJlZCBIYXQgYXJlIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIgorCitFWEhJQklUIEIKKworUGFydCBvZiB0aGUgc29mdHdhcmUgZW1iZWRkZWQgaW4gdGhpcyBwcm9kdWN0IGlzIGVDb3MgLSBFbWJlZGRlZCBDb25maWd1cmFibGUgT3BlcmF0aW5nIFN5c3RlbSwgYSB0cmFkZW1hcmsgb2YgUmVkIEhhdC4gUG9ydGlvbnMgY3JlYXRlZCBieSBSZWQgSGF0IGFyZSBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAgUmVkIEhhdCwgSW5jLiAoaHR0cDovL3d3dy5yZWRoYXQuY29tLykuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1RIRSBTT0ZUV0FSRSBJTiBUSElTIFBST0RVQ1QgV0FTIElOIFBBUlQgUFJPVklERUQgQlkgUkVEIEhBVCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JQTC0xLjUgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JQTC0xLjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE5MDg3NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUlBMLTEuNQpAQCAtMCwwICsxLDU0NiBAQAorCitSZWNpcHJvY2FsIFB1YmxpYyBMaWNlbnNlIDEuNSAoUlBMMS41KQorCitSZWNpcHJvY2FsIFB1YmxpYyBMaWNlbnNlIChSUEwpCisKK1ZlcnNpb24gMS41LCBKdWx5IDE1LCAyMDA3CisKK0NvcHlyaWdodCAoQykgMjAwMS0yMDA3CitUZWNobmljYWwgUHVyc3VpdCBJbmMuLAorQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworUFJFQU1CTEUKKworVGhlIFJlY2lwcm9jYWwgUHVibGljIExpY2Vuc2UgKFJQTCkgaXMgYmFzZWQgb24gdGhlIGNvbmNlcHQgb2YgcmVjaXByb2NpdHkgb3IsCitpZiB5b3UgcHJlZmVyLCBmYWlybmVzcy4KKworSW4gc2hvcnQsIHRoaXMgbGljZW5zZSBncmV3IG91dCBvZiBhIGRlc2lyZSB0byBjbG9zZSBsb29waG9sZXMgaW4gcHJldmlvdXMgb3Blbgorc291cmNlIGxpY2Vuc2VzLCBsb29waG9sZXMgdGhhdCBhbGxvd2VkIHBhcnRpZXMgdG8gYWNxdWlyZSBvcGVuIHNvdXJjZSBzb2Z0d2FyZQorYW5kIGRlcml2ZSBmaW5hbmNpYWwgYmVuZWZpdCBmcm9tIGl0IHdpdGhvdXQgaGF2aW5nIHRvIHJlbGVhc2UgdGhlaXIKK2ltcHJvdmVtZW50cyBvciBkZXJpdmF0aXZlcyB0byB0aGUgY29tbXVuaXR5IHdoaWNoIGVuYWJsZWQgdGhlbS4gVGhpcyBvY2N1cnJlZAorYW55IHRpbWUgYW4gZW50aXR5IGRpZCBub3QgcmVsZWFzZSB0aGVpciBhcHBsaWNhdGlvbiB0byBhICJ0aGlyZCBwYXJ0eSIuCisKK1doaWxlIHRoZXJlIGlzIGEgY2VydGFpbiBmcmVlZG9tIGluIHRoaXMgbW9kZWwgb2YgbGljZW5zaW5nLCBpdCBzdHJ1Y2sgdGhlCithdXRob3JzIG9mIHRoZSBSUEwgYXMgYmVpbmcgdW5mYWlyIHRvIHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYXQgbGFyZ2UgYW5kIHRvCit0aGUgb3JpZ2luYWwgYXV0aG9ycyBvZiB0aGUgd29ya3MgaW4gcGFydGljdWxhci4gQWZ0ZXIgYWxsLCBidWcgZml4ZXMsCitleHRlbnNpb25zLCBhbmQgbWVhbmluZ2Z1bCBhbmQgdmFsdWFibGUgZGVyaXZhdGl2ZXMgd2VyZSBub3QgY29uc2lzdGVudGx5CitmaW5kaW5nIHRoZWlyIHdheSBiYWNrIGludG8gdGhlIGNvbW11bml0eSB3aGVyZSB0aGV5IGNvdWxkIGZ1ZWwgZnVydGhlciwgYW5kCitmYXN0ZXIsIGdyb3d0aCBhbmQgZXhwYW5zaW9uIG9mIHRoZSBvdmVyYWxsIG9wZW4gc291cmNlIHNvZnR3YXJlIGJhc2UuCisKK1doaWxlIHlvdSBzaG91bGQgY2xlYXJseSByZWFkIGFuZCB1bmRlcnN0YW5kIHRoZSBlbnRpcmUgbGljZW5zZSwgdGhlIGVzc2VuY2Ugb2YKK3RoZSBSUEwgaXMgZm91bmQgaW4gdHdvIGRlZmluaXRpb25zOiAiRGVwbG95IiBhbmQgIlJlcXVpcmVkIENvbXBvbmVudHMiLgorCitSZWdhcmRpbmcgZGVwbG95bWVudCwgdW5kZXIgdGhlIFJQTCB5b3VyIGNoYW5nZXMsIGJ1ZyBmaXhlcywgZXh0ZW5zaW9ucywgZXRjLgorbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB0byB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGF0IGxhcmdlIHdoZW4geW91IERlcGxveSBpbgorYW55IGZvcm0gLS0gZWl0aGVyIGludGVybmFsbHkgb3IgdG8gYW4gb3V0c2lkZSBwYXJ0eS4gT25jZSB5b3Ugc3RhcnQgcnVubmluZwordGhlIHNvZnR3YXJlIHlvdSBoYXZlIHRvIHN0YXJ0IHNoYXJpbmcgdGhlIHNvZnR3YXJlLgorCitGdXJ0aGVyLCB1bmRlciB0aGUgUlBMIGFsbCBjb21wb25lbnRzIHlvdSBhdXRob3IgaW5jbHVkaW5nIHNjaGVtYXMsIHNjcmlwdHMsCitzb3VyY2UgY29kZSwgZXRjLiAtLSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleWByZSBjb21waWxlZCBpbnRvIGEgc2luZ2xlCitiaW5hcnkgb3IgdXNlZCBhcyB0d28gaGFsdmVzIG9mIGNsaWVudC9zZXJ2ZXIgYXBwbGljYXRpb24gLS0gbXVzdCBiZSBzaGFyZWQuCitZb3UgaGF2ZSB0byBzaGFyZSB0aGUgd2hvbGUgcGllLCBub3QgYW4gaXNvbGF0ZWQgc2xpY2Ugb2YgaXQuCisKK0luIGFkZGl0aW9uIHRvIHRoZXNlIGdvYWxzLCB0aGUgUlBMIHdhcyBhdXRob3JlZCB0byBtZWV0IHRoZSByZXF1aXJlbWVudHMgb2YKK3RoZSBPcGVuIFNvdXJjZSBEZWZpbml0aW9uIGFzIG1haW50YWluZWQgYnkgdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUgKE9TSSkuCisKK1RoZSBzcGVjaWZpYyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgbGljZW5zZSBhcmUgZGVmaW5lZCBpbiB0aGUgcmVtYWluZGVyCitvZiB0aGlzIGRvY3VtZW50LgorCitMSUNFTlNFIFRFUk1TCisKKzEuMCBHZW5lcmFsOyBBcHBsaWNhYmlsaXR5ICZhbXA7IERlZmluaXRpb25zLiBUaGlzIFJlY2lwcm9jYWwgUHVibGljIExpY2Vuc2UKK1ZlcnNpb24gMS41ICgiTGljZW5zZSIpIGFwcGxpZXMgdG8gYW55IHByb2dyYW1zIG9yIG90aGVyIHdvcmtzIGFzIHdlbGwgYXMgYW55CithbmQgYWxsIHVwZGF0ZXMgb3IgbWFpbnRlbmFuY2UgcmVsZWFzZXMgb2Ygc2FpZCBwcm9ncmFtcyBvciB3b3JrcyAoIlNvZnR3YXJlIikKK25vdCBhbHJlYWR5IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlIHdoaWNoIHRoZSBTb2Z0d2FyZSBjb3B5cmlnaHQgaG9sZGVyCisoIkxpY2Vuc29yIikgbWFrZXMgYXZhaWxhYmxlIGNvbnRhaW5pbmcgYSBMaWNlbnNlIE5vdGljZSAoaGVyZWluYWZ0ZXIgZGVmaW5lZCkKK2Zyb20gdGhlIExpY2Vuc29yIHNwZWNpZnlpbmcgb3IgYWxsb3dpbmcgdXNlIG9yIGRpc3RyaWJ1dGlvbiB1bmRlciB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZS4gQXMgdXNlZCBpbiB0aGlzIExpY2Vuc2U6CisKKzEuMSAiQ29udHJpYnV0b3IiIG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHdobyBjcmVhdGVkIG9yIGNvbnRyaWJ1dGVkIHRvIHRoZQorY3JlYXRpb24gb2YgYW4gRXh0ZW5zaW9uLgorCisxLjIgIkRlcGxveSIgbWVhbnMgdG8gdXNlLCBTZXJ2ZSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIExpY2Vuc2VkIFNvZnR3YXJlCitvdGhlciB0aGFuIGZvciBZb3VyIGludGVybmFsIFJlc2VhcmNoIGFuZC9vciBQZXJzb25hbCBVc2UsIGFuZCBpbmNsdWRlcword2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgYW5kIGFsbCBpbnRlcm5hbCB1c2Ugb3IgZGlzdHJpYnV0aW9uIG9mIExpY2Vuc2VkCitTb2Z0d2FyZSB3aXRoaW4gWW91ciBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gb3RoZXIgdGhhbiBmb3IgUmVzZWFyY2ggYW5kL29yCitQZXJzb25hbCBVc2UsIGFzIHdlbGwgYXMgZGlyZWN0IG9yIGluZGlyZWN0IHN1YmxpY2Vuc2luZyBvciBkaXN0cmlidXRpb24gb2YKK0xpY2Vuc2VkIFNvZnR3YXJlIGJ5IFlvdSB0byBhbnkgdGhpcmQgcGFydHkgaW4gYW55IGZvcm0gb3IgbWFubmVyLgorCisxLjMgIkRlcml2YXRpdmUgV29ya3MiIGFzIHVzZWQgaW4gdGhpcyBMaWNlbnNlIGlzIGRlZmluZWQgdW5kZXIgVS5TLiBjb3B5cmlnaHQKK2xhdy4KKworMS40ICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZAoraW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YSBzdWNoCithcyBkb3dubG9hZCBmcm9tIGFuIEZUUCBzZXJ2ZXIgb3Igd2ViIHNpdGUsIHdoZXJlIHN1Y2ggbWVjaGFuaXNtIGlzIHB1YmxpY2x5CithY2Nlc3NpYmxlLgorCisxLjUgIkV4dGVuc2lvbnMiIG1lYW5zIGFueSBNb2RpZmljYXRpb25zLCBEZXJpdmF0aXZlIFdvcmtzLCBvciBSZXF1aXJlZAorQ29tcG9uZW50cyBhcyB0aG9zZSB0ZXJtcyBhcmUgZGVmaW5lZCBpbiB0aGlzIExpY2Vuc2UuCisKKzEuNiAiTGljZW5zZSIgbWVhbnMgdGhpcyBSZWNpcHJvY2FsIFB1YmxpYyBMaWNlbnNlLgorCisxLjcgIkxpY2Vuc2UgTm90aWNlIiBtZWFucyBhbnkgbm90aWNlIGNvbnRhaW5lZCBpbiBFWEhJQklUIEEuCisKKzEuOCAiTGljZW5zZWQgU29mdHdhcmUiIG1lYW5zIGFueSBTb2Z0d2FyZSBsaWNlbnNlZCBwdXJzdWFudCB0byB0aGlzIExpY2Vuc2UuCitMaWNlbnNlZCBTb2Z0d2FyZSBhbHNvIGluY2x1ZGVzIGFsbCBwcmV2aW91cyBFeHRlbnNpb25zIGZyb20gYW55IENvbnRyaWJ1dG9yCit0aGF0IFlvdSByZWNlaXZlLgorCisxLjkgIkxpY2Vuc29yIiBtZWFucyB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiBhbnkgU29mdHdhcmUgcHJldmlvdXNseSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlIHdobyByZWxlYXNlcyB0aGUgU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2UuCisKKzEuMTAgIk1vZGlmaWNhdGlvbnMiIG1lYW5zIGFueSBhZGRpdGlvbnMgdG8gb3IgZGVsZXRpb25zIGZyb20gdGhlIHN1YnN0YW5jZSBvcgorc3RydWN0dXJlIG9mIChpKSBhIGZpbGUgb3Igb3RoZXIgc3RvcmFnZSBjb250YWluaW5nIExpY2Vuc2VkIFNvZnR3YXJlLCBvciAoaWkpCithbnkgbmV3IGZpbGUgb3Igc3RvcmFnZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIExpY2Vuc2VkIFNvZnR3YXJlLCBvciAoaWlpKQorYW55IGZpbGUgb3Igc3RvcmFnZSB3aGljaCByZXBsYWNlcyBvciBvdGhlcndpc2UgYWx0ZXJzIHRoZSBvcmlnaW5hbAorZnVuY3Rpb25hbGl0eSBvZiBMaWNlbnNlZCBTb2Z0d2FyZSBhdCBydW50aW1lLgorCisxLjExICJQZXJzb25hbCBVc2UiIG1lYW5zIHVzZSBvZiBMaWNlbnNlZCBTb2Z0d2FyZSBieSBhbiBpbmRpdmlkdWFsIHNvbGVseSBmb3IKK2hpcyBvciBoZXIgcGVyc29uYWwsIHByaXZhdGUgYW5kIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzLiBBbiBpbmRpdmlkdWFsYHMgdXNlCitvZiBMaWNlbnNlZCBTb2Z0d2FyZSBpbiBoaXMgb3IgaGVyIGNhcGFjaXR5IGFzIGFuIG9mZmljZXIsIGVtcGxveWVlLCBtZW1iZXIsCitpbmRlcGVuZGVudCBjb250cmFjdG9yIG9yIGFnZW50IG9mIGEgY29ycG9yYXRpb24sIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbgorKGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwpIGRvZXMgbm90IHF1YWxpZnkgYXMgUGVyc29uYWwgVXNlLgorCisxLjEyICJSZXF1aXJlZCBDb21wb25lbnRzIiBtZWFucyBhbnkgdGV4dCwgcHJvZ3JhbXMsIHNjcmlwdHMsIHNjaGVtYSwKK2ludGVyZmFjZSBkZWZpbml0aW9ucywgY29udHJvbCBmaWxlcywgb3Igb3RoZXIgd29ya3MgY3JlYXRlZCBieSBZb3Ugd2hpY2ggYXJlCityZXF1aXJlZCBieSBhIHRoaXJkIHBhcnR5IG9mIGF2ZXJhZ2Ugc2tpbGwgdG8gc3VjY2Vzc2Z1bGx5IGluc3RhbGwgYW5kIHJ1bgorTGljZW5zZWQgU29mdHdhcmUgY29udGFpbmluZyBZb3VyIE1vZGlmaWNhdGlvbnMsIG9yIHRvIGluc3RhbGwgYW5kIHJ1biBZb3VyCitEZXJpdmF0aXZlIFdvcmtzLgorCisxLjEzICJSZXNlYXJjaCIgbWVhbnMgaW52ZXN0aWdhdGlvbiBvciBleHBlcmltZW50YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mCit1bmRlcnN0YW5kaW5nIHRoZSBuYXR1cmUgYW5kIGxpbWl0cyBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgYW5kIGl0cyBwb3RlbnRpYWwKK3VzZXMuCisKKzEuMTQgIlNlcnZlIiBtZWFucyB0byBkZWxpdmVyIExpY2Vuc2VkIFNvZnR3YXJlIGFuZC9vciBZb3VyIEV4dGVuc2lvbnMgYnkKK21lYW5zIG9mIGEgY29tcHV0ZXIgbmV0d29yayB0byBvbmUgb3IgbW9yZSBjb21wdXRlcnMgZm9yIHB1cnBvc2VzIG9mIGV4ZWN1dGlvbgorb2YgTGljZW5zZWQgU29mdHdhcmUgYW5kL29yIFlvdXIgRXh0ZW5zaW9ucy4KKworMS4xNSAiU29mdHdhcmUiIG1lYW5zIGFueSBjb21wdXRlciBwcm9ncmFtcyBvciBvdGhlciB3b3JrcyBhcyB3ZWxsIGFzIGFueQordXBkYXRlcyBvciBtYWludGVuYW5jZSByZWxlYXNlcyBvZiB0aG9zZSBwcm9ncmFtcyBvciB3b3JrcyB3aGljaCBhcmUKK2Rpc3RyaWJ1dGVkIHB1YmxpY2x5IGJ5IExpY2Vuc29yLgorCisxLjE2ICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byB0aGUKK0xpY2Vuc2VkIFNvZnR3YXJlIGFuZC9vciBZb3VyIEV4dGVuc2lvbnMsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBjb250YWluZWQKK3RoZXJlaW4sIHBsdXMgYW55IGFzc29jaWF0ZWQgdGV4dCwgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSBvciBvdGhlcgorY29tcG9uZW50cyByZXF1aXJlZCBieSBhIHRoaXJkIHBhcnR5IG9mIGF2ZXJhZ2Ugc2tpbGwgdG8gYnVpbGQgYSBydW5uaW5nCit2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBvciBZb3VyIEV4dGVuc2lvbnMuCisKKzEuMTcgIlVzZXItVmlzaWJsZSBBdHRyaWJ1dGlvbiBOb3RpY2UiIG1lYW5zIGFueSBub3RpY2UgY29udGFpbmVkIGluIEVYSElCSVQgQi4KKworMS4xOCAiWW91IiBvciAiWW91ciIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cwordW5kZXIgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIG9yICJZb3VyIiBpbmNsdWRlcyBhbnkgZW50aXR5Cit3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCwgWW91LCB3aGVyZQorImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvcgorbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAKK29mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwKK293bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4wIEFjY2VwdGFuY2UgT2YgTGljZW5zZS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSBzaW5jZQoreW91IGhhdmUgbm90IHNpZ25lZCBpdCwgaG93ZXZlciBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHVzZSwKK2NvcHksIGRpc3RyaWJ1dGUsIG1vZGlmeSwgb3IgY3JlYXRlIGRlcml2YXRpdmVzIG9mIGVpdGhlciB0aGUgU29mdHdhcmUgb3IgYW55CitFeHRlbnNpb25zIGNyZWF0ZWQgYnkgYSBDb250cmlidXRvci4gVGhlc2UgYWN0aW9ucyBhcmUgcHJvaGliaXRlZCBieSBsYXcgaWYKK3lvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gVGhlcmVmb3JlLCBieSBwZXJmb3JtaW5nIGFueSBvZiB0aGVzZSBhY3Rpb25zCitZb3UgaW5kaWNhdGUgWW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSBhbmQgWW91ciBhZ3JlZW1lbnQgdG8gYmUgYm91bmQgYnkKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuIElGIFlPVSBETyBOT1QgQUdSRUUgV0lUSCBBTEwgVEhFIFRFUk1TIEFORAorQ09ORElUSU9OUyBPRiBUSElTIExJQ0VOU0UgRE8gTk9UIFVTRSwgTU9ESUZZLCBDUkVBVEUgREVSSVZBVElWRVMsIE9SCitESVNUUklCVVRFIFRIRSBTT0ZUV0FSRS4gSUYgSVQgSVMgSU1QT1NTSUJMRSBGT1IgWU9VIFRPIENPTVBMWSBXSVRIIEFMTCBUSEUKK1RFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgTElDRU5TRSBUSEVOIFlPVSBDQU4gTk9UIFVTRSwgTU9ESUZZLCBDUkVBVEUKK0RFUklWQVRJVkVTLCBPUiBESVNUUklCVVRFIFRIRSBTT0ZUV0FSRS4KKworMy4wIEdyYW50IG9mIExpY2Vuc2UgRnJvbSBMaWNlbnNvci4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKK3RoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi0KK2V4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIExpY2Vuc29yYHMgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cywgYW5kIGFueQordGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcyBkZXJpdmVkIGZyb20gdGhlIExpY2Vuc2VkIFNvZnR3YXJlCit1bmRlciB0aGlzIExpY2Vuc2UsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKKzMuMSBVc2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlCitMaWNlbnNlZCBTb2Z0d2FyZSBhbmQgWW91ciBFeHRlbnNpb25zIGluIGJvdGggU291cmNlIENvZGUgZm9ybSBvciBhcyBhbgorZXhlY3V0YWJsZSBwcm9ncmFtLgorCiszLjIgQ3JlYXRlIERlcml2YXRpdmUgV29ya3MgKGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIHVuZGVyIFUuUy4gY29weXJpZ2h0IGxhdykKK29mIExpY2Vuc2VkIFNvZnR3YXJlIGJ5IGFkZGluZyB0byBvciBkZWxldGluZyBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlCitvZiBzYWlkIExpY2Vuc2VkIFNvZnR3YXJlLgorCiszLjMgVW5kZXIgY2xhaW1zIG9mIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IExpY2Vuc29yLAordG8gbWFrZSwgdXNlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBMaWNlbnNlZCBTb2Z0d2FyZSBvcgorcG9ydGlvbnMgdGhlcmVvZiwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggY2xhaW0gaXMgbmVjZXNzYXJ5IHRvCitlbmFibGUgWW91IHRvIG1ha2UsIHVzZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgTGljZW5zZWQKK1NvZnR3YXJlIG9yIHBvcnRpb25zIHRoZXJlb2YuCisKKzMuNCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSBuZXcgdmVyc2lvbnMgb2YgdGhlIFNvZnR3YXJlIHdpdGgKK2RpZmZlcmVudCBmZWF0dXJlcywgc3BlY2lmaWNhdGlvbnMsIGNhcGFiaWxpdGllcywgZnVuY3Rpb25zLCBsaWNlbnNpbmcgdGVybXMsCitnZW5lcmFsIGF2YWlsYWJpbGl0eSBvciBvdGhlciBjaGFyYWN0ZXJpc3RpY3MuIFRpdGxlLCBvd25lcnNoaXAgcmlnaHRzLCBhbmQKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaW4gYW5kIHRvIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBzaGFsbCByZW1haW4gaW4KK0xpY2Vuc29yIGFuZC9vciBpdHMgQ29udHJpYnV0b3JzLgorCis0LjAgR3JhbnQgb2YgTGljZW5zZSBGcm9tIENvbnRyaWJ1dG9yLiBCeSBhcHBsaWNhdGlvbiBvZiB0aGUgcHJvdmlzaW9ucyBpbgorU2VjdGlvbiA2IGJlbG93LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS0KK2ZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byBzYWlkIENvbnRyaWJ1dG9yYHMgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMsIGFuZCBhbnkgdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcyBkZXJpdmVkIGZyb20KK3RoZSBMaWNlbnNlZCBTb2Z0d2FyZSB1bmRlciB0aGlzIExpY2Vuc2UsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKKzQuMSBVc2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIGFueQorRXh0ZW5zaW9ucyBEZXBsb3llZCBieSBzdWNoIENvbnRyaWJ1dG9yIG9yIHBvcnRpb25zIHRoZXJlb2YsIGluIGJvdGggU291cmNlCitDb2RlIGZvcm0gb3IgYXMgYW4gZXhlY3V0YWJsZSBwcm9ncmFtLCBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcyBvciBhcworcGFydCBvZiBEZXJpdmF0aXZlIFdvcmtzLgorCis0LjIgVW5kZXIgY2xhaW1zIG9mIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5CitDb250cmlidXRvciwgdG8gbWFrZSwgdXNlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBFeHRlbnNpb25zCitvciBwb3J0aW9ucyB0aGVyZW9mLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBjbGFpbSBpcyBuZWNlc3NhcnkKK3RvIGVuYWJsZSBZb3UgdG8gbWFrZSwgdXNlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZgorTGljZW5zZWQgU29mdHdhcmUgb3IgcG9ydGlvbnMgdGhlcmVvZi4KKworNS4wIEV4Y2x1c2lvbnMgRnJvbSBMaWNlbnNlIEdyYW50LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8KK2dyYW50IGFueSByaWdodHMgdG8gdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkKK290aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgZXhjZXB0IGFzIGV4cHJlc3NseQorc3RhdGVkIGhlcmVpbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gU2VjdGlvbnMgMyBhbmQgNCwgbm8gb3RoZXIgcGF0ZW50CityaWdodHMsIGV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgaGVyZWluLiBZb3VyIEV4dGVuc2lvbnMgbWF5IHJlcXVpcmUKK2FkZGl0aW9uYWwgcGF0ZW50IGxpY2Vuc2VzIGZyb20gTGljZW5zb3Igb3IgQ29udHJpYnV0b3JzIHdoaWNoIGVhY2ggbWF5IGdyYW50CitpbiBpdHMgc29sZSBkaXNjcmV0aW9uLiBObyByaWdodCBpcyBncmFudGVkIHRvIHRoZSB0cmFkZW1hcmtzIG9mIExpY2Vuc29yIG9yCithbnkgQ29udHJpYnV0b3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgTGljZW5zZWQgU29mdHdhcmUuCitOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tCitsaWNlbnNpbmcgdW5kZXIgZGlmZmVyZW50IHRlcm1zIGZyb20gdGhpcyBMaWNlbnNlIGFueSBjb2RlIHRoYXQgTGljZW5zb3IKK290aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4KKworNS4xIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgYWx0aG91Z2ggTGljZW5zb3IgYW5kIGVhY2gKK0NvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBwb3J0aW9ucyBvZiB0aGUgTGljZW5zZWQKK1NvZnR3YXJlIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IExpY2Vuc29yIG9yIGFueQorQ29udHJpYnV0b3IgdGhhdCB0aGUgTGljZW5zZWQgU29mdHdhcmUgZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlcgoraW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBMaWNlbnNvciBhbmQgZWFjaAorQ29udHJpYnV0b3IgZGlzY2xhaW0gYW55IGxpYWJpbGl0eSB0byBZb3UgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlcgorZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMKK2EgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIFlvdQoraGVyZWJ5IGFzc3VtZSBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzCityZXF1aXJlZCB0byBhbGxvdyBZb3UgdG8gZGlzdHJpYnV0ZSB0aGUgTGljZW5zZWQgU29mdHdhcmUsIGl0IGlzIFlvdXIKK3Jlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlIExpY2Vuc2VkCitTb2Z0d2FyZS4KKworNi4wIFlvdXIgT2JsaWdhdGlvbnMgQW5kIEdyYW50cy4gSW4gY29uc2lkZXJhdGlvbiBvZiwgYW5kIGFzIGFuIGV4cHJlc3MKK2NvbmRpdGlvbiB0bywgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBZb3UgaGVyZWJ5IGFncmVlCit0aGF0IGFueSBNb2RpZmljYXRpb25zLCBEZXJpdmF0aXZlIFdvcmtzLCBvciBSZXF1aXJlZCBDb21wb25lbnRzIChjb2xsZWN0aXZlbHkKK0V4dGVuc2lvbnMpIHRoYXQgWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlCit0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIFNlY3Rpb24gNC4gQW55IEV4dGVuc2lvbnMKK3RoYXQgWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIERlcGxveWVkIHVuZGVyIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNy4gWW91CitoZXJlYnkgZ3JhbnQgdG8gTGljZW5zb3IgYW5kIGFsbCB0aGlyZCBwYXJ0aWVzIGEgd29ybGQtd2lkZSwgbm9uLWV4Y2x1c2l2ZSwKK3JveWFsdHktZnJlZSBsaWNlbnNlIHVuZGVyIHRob3NlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgWW91IG93biBvcgorY29udHJvbCB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5LCBjcmVhdGUgZGVyaXZhdGl2ZXMsCitzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBMaWNlbnNlZCBTb2Z0d2FyZSwgaW4gYW55IGZvcm0uIEFueSBFeHRlbnNpb25zIFlvdQorbWFrZSBhbmQgRGVwbG95IG11c3QgaGF2ZSBhIGRpc3RpbmN0IHRpdGxlIHNvIGFzIHRvIHJlYWRpbHkgdGVsbCBhbnkKK3N1YnNlcXVlbnQgdXNlciBvciBDb250cmlidXRvciB0aGF0IHRoZSBFeHRlbnNpb25zIGFyZSBieSBZb3UuIFlvdSBtdXN0CitpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugb3IgZGlyZWN0aW9ucyBvbiBob3cgdG8gb2J0YWluIGEgY29weSB3aXRoCitldmVyeSBjb3B5IG9mIHRoZSBFeHRlbnNpb25zIFlvdSBkaXN0cmlidXRlLiBZb3UgYWdyZWUgbm90IHRvIG9mZmVyIG9yIGltcG9zZQorYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSBvciBleGVjdXRhYmxlIHZlcnNpb24gb2YgdGhlIExpY2Vuc2VkIFNvZnR3YXJlLAorb3IgaXRzIEV4dGVuc2lvbnMgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMKK0xpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIuCisKKzYuMSBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuIFlvdSBtdXN0IG1ha2UgYXZhaWxhYmxlLCB1bmRlciB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBFeHRlbnNpb25zIHRoYXQgWW91IERlcGxveSwgdmlhIGFuCitFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20uIFRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IHZlcnNpb24gdGhhdCBZb3UKK0RlcGxveSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHdpdGhpbiBvbmUgKDEpIG1vbnRoIG9mIHdoZW4geW91IERlcGxveSBhbmQgbXVzdAorcmVtYWluIGF2YWlsYWJsZSBmb3Igbm8gbGVzcyB0aGFuIHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBZb3UgY2Vhc2UKK3RvIERlcGxveS4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdG8gZWFjaAordmVyc2lvbiBZb3UgRGVwbG95IHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uCitNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LiBZb3UgbWF5IG5vdCBjaGFyZ2UgYSBmZWUgZm9yIGFueQorY29weSBvZiB0aGUgU291cmNlIENvZGUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBTZWN0aW9uIGluIGV4Y2VzcyBvZiBZb3VyCithY3R1YWwgY29zdCBvZiBkdXBsaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIG9mIHNhaWQgY29weS4KKworNi4yIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuIFlvdSBtdXN0IGNhdXNlIGFueSBNb2RpZmljYXRpb25zIHRoYXQgWW91CitjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgdG8gYmUgZG9jdW1lbnRlZCBpbiB0aGUgU291cmNlIENvZGUsIGNsZWFybHkKK2Rlc2NyaWJpbmcgdGhlIGFkZGl0aW9ucywgY2hhbmdlcyBvciBkZWxldGlvbnMgWW91IG1hZGUuIFlvdSBtdXN0IGluY2x1ZGUgYQorcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb25zIGFyZSBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LAorZnJvbSB0aGUgTGljZW5zZWQgU29mdHdhcmUgYW5kIGluY2x1ZGUgdGhlIG5hbWVzIG9mIHRoZSBMaWNlbnNvciBhbmQgYW55CitDb250cmlidXRvciB0byB0aGUgTGljZW5zZWQgU29mdHdhcmUgaW4gKGkpIHRoZSBTb3VyY2UgQ29kZSBhbmQgKGlpKSBpbiBhbnkKK25vdGljZSBkaXNwbGF5ZWQgYnkgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIFlvdSBkaXN0cmlidXRlIG9yIGluIHJlbGF0ZWQKK2RvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBMaWNlbnNlZAorU29mdHdhcmUuIFlvdSBtYXkgbm90IG1vZGlmeSBvciBkZWxldGUgYW55IHByZS1leGlzdGluZyBjb3B5cmlnaHQgbm90aWNlcywKK2NoYW5nZSBub3RpY2VzIG9yIExpY2Vuc2UgdGV4dCBpbiB0aGUgTGljZW5zZWQgU29mdHdhcmUgd2l0aG91dCB3cml0dGVuCitwZXJtaXNzaW9uIG9mIHRoZSByZXNwZWN0aXZlIExpY2Vuc29yIG9yIENvbnRyaWJ1dG9yLgorCis2LjMgSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMuCisKK2EuIFRoaXJkIFBhcnR5IENsYWltcy4gSWYgWW91IGhhdmUga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHRvIGEgdGhpcmQgcGFydHlgcworaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0IGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSB0aGlzCitMaWNlbnNlLCBZb3UgbXVzdCBpbmNsdWRlIGEgaHVtYW4tcmVhZGFibGUgZmlsZSB3aXRoIFlvdXIgZGlzdHJpYnV0aW9uIHRoYXQKK2Rlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYQorcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuCisKK2IuIENvbnRyaWJ1dG9yIEFQSXMuIElmIFlvdXIgRXh0ZW5zaW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nCitpbnRlcmZhY2UgKCJBUEkiKSBhbmQgWW91IGhhdmUga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB0aGF0IGFyZQorcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBZb3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcworaW5mb3JtYXRpb24gaW4gYSBodW1hbi1yZWFkYWJsZSBmaWxlIHN1cHBsaWVkIHdpdGggWW91ciBkaXN0cmlidXRpb24uCisKK2MuIFJlcHJlc2VudGF0aW9ucy4gWW91IHJlcHJlc2VudCB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIDYuMyhhKQorYWJvdmUsIFlvdSBiZWxpZXZlIHRoYXQgYW55IEV4dGVuc2lvbnMgWW91IGRpc3RyaWJ1dGUgYXJlIFlvdXIgb3JpZ2luYWwKK2NyZWF0aW9ucyBhbmQgdGhhdCBZb3UgaGF2ZSBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5Cit0aGlzIExpY2Vuc2UuCisKKzYuNCBSZXF1aXJlZCBOb3RpY2VzLgorCithLiBMaWNlbnNlIFRleHQuIFlvdSBtdXN0IGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2Ugb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0bworYWNxdWlyZSBhIGNvcHkgaW4gYW55IGRvY3VtZW50YXRpb24gWW91IHByb3ZpZGUgYWxvbmcgd2l0aCB0aGUgU291cmNlIENvZGUgb2YKK2FueSBFeHRlbnNpb25zIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUsIHdoZXJldmVyIFlvdSBkZXNjcmliZQorcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIExpY2Vuc2VkIFNvZnR3YXJlLgorCitiLiBMaWNlbnNlIE5vdGljZS4gWW91IG11c3QgZHVwbGljYXRlIGFueSBub3RpY2UgY29udGFpbmVkIGluIEVYSElCSVQgQSAodGhlCisiTGljZW5zZSBOb3RpY2UiKSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBjb3B5IFlvdSBkaXN0cmlidXRlCitvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgYW5kIFlvdXIgRXh0ZW5zaW9ucy4gSWYgWW91IGNyZWF0ZSBhbiBFeHRlbnNpb24sIFlvdQorbWF5IGFkZCBZb3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgU291cmNlIENvZGUgYW5kIGFjY29tcGFueWluZworZG9jdW1lbnRhdGlvbiBhbG9uZyB3aXRoIGEgZGVzY3JpcHRpb24gb2YgdGhlIGNvbnRyaWJ1dGlvbi4gSWYgaXQgaXMgbm90Citwb3NzaWJsZSB0byBwdXQgdGhlIExpY2Vuc2UgTm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMKK3N0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggTGljZW5zZSBOb3RpY2UgaW4gYSBsb2NhdGlvbiB3aGVyZSBhCit1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLgorCitjLiBTb3VyY2UgQ29kZSBBdmFpbGFiaWxpdHkuIFlvdSBtdXN0IG5vdGlmeSB0aGUgc29mdHdhcmUgY29tbXVuaXR5IG9mIHRoZQorYXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlIHRvIFlvdXIgRXh0ZW5zaW9ucyB3aXRoaW4gb25lICgxKSBtb250aCBvZiB0aGUgZGF0ZQorWW91IGluaXRpYWxseSBEZXBsb3kgYW5kIGluY2x1ZGUgaW4gc3VjaCBub3RpZmljYXRpb24gYSBkZXNjcmlwdGlvbiBvZiB0aGUKK0V4dGVuc2lvbnMsIGFuZCBpbnN0cnVjdGlvbnMgb24gaG93IHRvIGFjcXVpcmUgdGhlIFNvdXJjZSBDb2RlLiBTaG91bGQgc3VjaAoraW5zdHJ1Y3Rpb25zIGNoYW5nZSB5b3UgbXVzdCBub3RpZnkgdGhlIHNvZnR3YXJlIGNvbW11bml0eSBvZiByZXZpc2VkCitpbnN0cnVjdGlvbnMgd2l0aGluIG9uZSAoMSkgbW9udGggb2YgdGhlIGRhdGUgb2YgY2hhbmdlLiBZb3UgbXVzdCBwcm92aWRlCitub3RpZmljYXRpb24gYnkgcG9zdGluZyB0byBhcHByb3ByaWF0ZSBuZXdzIGdyb3VwcywgbWFpbGluZyBsaXN0cywgd2VibG9ncywgb3IKK290aGVyIHNpdGVzIHdoZXJlIGEgcHVibGljbHkgYWNjZXNzaWJsZSBzZWFyY2ggZW5naW5lIHdvdWxkIHJlYXNvbmFibHkgYmUKK2V4cGVjdGVkIHRvIGluZGV4IHlvdXIgcG9zdCBpbiByZWxhdGlvbnNoaXAgdG8gcXVlcmllcyByZWdhcmRpbmcgdGhlIExpY2Vuc2VkCitTb2Z0d2FyZSBhbmQvb3IgWW91ciBFeHRlbnNpb25zLgorCitkLiBVc2VyLVZpc2libGUgQXR0cmlidXRpb24uIFlvdSBtdXN0IGR1cGxpY2F0ZSBhbnkgbm90aWNlIGNvbnRhaW5lZCBpbgorRVhISUJJVCBCICh0aGUgIlVzZXItVmlzaWJsZSBBdHRyaWJ1dGlvbiBOb3RpY2UiKSBpbiBlYWNoIHVzZXItdmlzaWJsZSBkaXNwbGF5CitvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgYW5kIFlvdXIgRXh0ZW5zaW9ucyB3aGljaCBkZWxpbmVhdGVzIGNvcHlyaWdodCwKK293bmVyc2hpcCwgb3Igc2ltaWxhciBhdHRyaWJ1dGlvbiBpbmZvcm1hdGlvbi4gSWYgWW91IGNyZWF0ZSBhbiBFeHRlbnNpb24sCitZb3UgbWF5IGFkZCBZb3VyIG5hbWUgYXMgYSBDb250cmlidXRvciwgYW5kIGFkZCBZb3VyIGF0dHJpYnV0aW9uIG5vdGljZSwgYXMgYW4KK2VxdWFsbHkgdmlzaWJsZSBhbmQgZnVuY3Rpb25hbCBlbGVtZW50IG9mIGFueSBVc2VyLVZpc2libGUgQXR0cmlidXRpb24gTm90aWNlCitjb250ZW50LiBUbyBlbnN1cmUgcHJvcGVyIGF0dHJpYnV0aW9uLCBZb3UgbXVzdCBhbHNvIGluY2x1ZGUgc3VjaCBVc2VyLVZpc2libGUKK0F0dHJpYnV0aW9uIE5vdGljZSBpbiBhdCBsZWFzdCBvbmUgbG9jYXRpb24gaW4gdGhlIFNvZnR3YXJlIGRvY3VtZW50YXRpb24KK3doZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBub3RpY2UuCisKKzYuNSBBZGRpdGlvbmFsIFRlcm1zLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LAorc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mCitMaWNlbnNlZCBTb2Z0d2FyZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbgorYmVoYWxmIG9mIHRoZSBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgZXhjZXB0IGFzIHBlcm1pdHRlZCB1bmRlciBvdGhlcgorYWdyZWVtZW50cyBiZXR3ZWVuIHlvdSBhbmQgTGljZW5zb3Igb3IgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgY2xlYXIgdGhhdAorYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdQorYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgTGljZW5zb3IgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvcgorYW55IGxpYWJpbGl0eSBwbHVzIGF0dG9ybmV5IGZlZXMsIGNvc3RzLCBhbmQgcmVsYXRlZCBleHBlbnNlcyBkdWUgdG8gYW55IHN1Y2gKK2FjdGlvbiBvciBjbGFpbSBpbmN1cnJlZCBieSB0aGUgTGljZW5zb3Igb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZgord2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCis2LjYgQ29uZmxpY3RzIFdpdGggT3RoZXIgTGljZW5zZXMuIFdoZXJlIGFueSBwb3J0aW9uIG9mIFlvdXIgRXh0ZW5zaW9ucywgYnkKK3ZpcnR1ZSBvZiBiZWluZyBEZXJpdmF0aXZlIFdvcmtzIG9mIGFub3RoZXIgcHJvZHVjdCBvciBzaW1pbGFyIGNpcmN1bXN0YW5jZSwKK2ZhbGwgdW5kZXIgdGhlIHRlcm1zIG9mIGFub3RoZXIgbGljZW5zZSwgdGhlIHRlcm1zIG9mIHRoYXQgbGljZW5zZSBzaG91bGQgYmUKK2hvbm9yZWQgaG93ZXZlciBZb3UgbXVzdCBhbHNvIG1ha2UgWW91ciBFeHRlbnNpb25zIGF2YWlsYWJsZSB1bmRlciB0aGlzCitMaWNlbnNlLiBJZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGNvbnRpbnVlIHRvIGNvbmZsaWN0IHdpdGggdGhlIHRlcm1zIG9mCit0aGUgb3RoZXIgbGljZW5zZSB5b3UgbWF5IHdyaXRlIHRoZSBMaWNlbnNvciBmb3IgcGVybWlzc2lvbiB0byByZXNvbHZlIHRoZQorY29uZmxpY3QgaW4gYSBmYXNoaW9uIHRoYXQgcmVtYWlucyBjb25zaXN0ZW50IHdpdGggdGhlIGludGVudCBvZiB0aGlzIExpY2Vuc2UuCitTdWNoIHBlcm1pc3Npb24gd2lsbCBiZSBncmFudGVkIGF0IHRoZSBzb2xlIGRpc2NyZXRpb24gb2YgdGhlIExpY2Vuc29yLgorCis3LjAgVmVyc2lvbnMgb2YgVGhpcyBMaWNlbnNlLiBMaWNlbnNvciBtYXkgcHVibGlzaCBmcm9tIHRpbWUgdG8gdGltZSByZXZpc2VkCit2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4gT25jZSBMaWNlbnNlZCBTb2Z0d2FyZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYQorcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlCit0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggTGljZW5zZWQgU29mdHdhcmUgdW5kZXIKK3RoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBMaWNlbnNvci4gTm8KK29uZSBvdGhlciB0aGFuIExpY2Vuc29yIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvCitMaWNlbnNlZCBTb2Z0d2FyZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworNy4xIElmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHdoaWNoIFlvdSBtYXkgZG8KK29ubHkgaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gc29mdHdhcmUgdGhhdCBpcyBub3QgYWxyZWFkeSBMaWNlbnNlZCBTb2Z0d2FyZQordW5kZXIgdGhpcyBMaWNlbnNlLCBZb3UgbXVzdCByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgaXQgaXMgbm90IGNvbmZ1c2luZ2x5CitzaW1pbGFyIHRvIHRoaXMgTGljZW5zZSwgYW5kIG11c3QgbWFrZSBpdCBjbGVhciB0aGF0IFlvdXIgbGljZW5zZSBjb250YWlucwordGVybXMgdGhhdCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UuIEluIHNvIG5hbWluZyBZb3VyIGxpY2Vuc2UsIFlvdSBtYXkgbm90Cit1c2UgYW55IHRyYWRlbWFyayBvZiBMaWNlbnNvciBvciBvZiBhbnkgQ29udHJpYnV0b3IuIFNob3VsZCBZb3VyIG1vZGlmaWNhdGlvbnMKK3RvIHRoaXMgTGljZW5zZSBiZSBsaW1pdGVkIHRvIGFsdGVyYXRpb24gb2YgYSkgU2VjdGlvbiAxMy44IHNvbGVseSB0byBtb2RpZnkKK3RoZSBsZWdhbCBKdXJpc2RpY3Rpb24gb3IgVmVudWUgZm9yIGRpc3B1dGVzLCBiKSBFWEhJQklUIEEgc29sZWx5IHRvIGRlZmluZQorTGljZW5zZSBOb3RpY2UgdGV4dCwgb3IgYykgdG8gRVhISUJJVCBCIHNvbGVseSB0byBkZWZpbmUgYSBVc2VyLVZpc2libGUKK0F0dHJpYnV0aW9uIE5vdGljZSwgWW91IG1heSBjb250aW51ZSB0byByZWZlciB0byBZb3VyIExpY2Vuc2UgYXMgdGhlCitSZWNpcHJvY2FsIFB1YmxpYyBMaWNlbnNlIG9yIHNpbXBseSB0aGUgUlBMLgorCis4LjAgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTElDRU5TRUQgU09GVFdBUkUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFCitPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgTElDRU5TRUQgU09GVFdBUkUgSVMgRlJFRQorT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLgorRlVSVEhFUiBUSEVSRSBJUyBOTyBXQVJSQU5UWSBNQURFIEFORCBBTEwgSU1QTElFRCBXQVJSQU5USUVTIEFSRSBESVNDTEFJTUVECitUSEFUIFRIRSBMSUNFTlNFRCBTT0ZUV0FSRSBNRUVUUyBPUiBDT01QTElFUyBXSVRIIEFOWSBERVNDUklQVElPTiBPRgorUEVSRk9STUFOQ0UgT1IgT1BFUkFUSU9OLCBTQUlEIENPTVBBVElCSUxJVFkgQU5EIFNVSVRBQklMSVRZIEJFSU5HIFlPVVIKK1JFU1BPTlNJQklMSVRZLiBMSUNFTlNPUiBESVNDTEFJTVMgQU5ZIFdBUlJBTlRZLCBJTVBMSUVEIE9SIEVYUFJFU1NFRCwgVEhBVAorQU5ZIENPTlRSSUJVVE9SYFMgRVhURU5TSU9OUyBNRUVUIEFOWSBTVEFOREFSRCBPRiBDT01QQVRJQklMSVRZIE9SIERFU0NSSVBUSU9OCitPRiBQRVJGT1JNQU5DRS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUKK0xJQ0VOU0VEIFNPRlRXQVJFIElTIFdJVEggWU9VLiBTSE9VTEQgTElDRU5TRUQgU09GVFdBUkUgUFJPVkUgREVGRUNUSVZFIElOIEFOWQorUkVTUEVDVCwgWU9VIChBTkQgTk9UIFRIRSBMSUNFTlNPUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVAorT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUworTElDRU5TT1IgV0lMTCBOT1QgU1VQUE9SVCBUSElTIFNPRlRXQVJFIEFORCBJUyBVTkRFUiBOTyBPQkxJR0FUSU9OIFRPIElTU1VFCitVUERBVEVTIFRPIFRISVMgU09GVFdBUkUuIExJQ0VOU09SIEhBUyBOTyBLTk9XTEVER0UgT0YgRVJSQU5UIENPREUgT1IgVklSVVMgSU4KK1RISVMgU09GVFdBUkUsIEJVVCBET0VTIE5PVCBXQVJSQU5UIFRIQVQgVEhFIFNPRlRXQVJFIElTIEZSRUUgRlJPTSBTVUNIIEVSUk9SUworT1IgVklSVVNFUy4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMKK0xJQ0VOU0UuIE5PIFVTRSBPRiBMSUNFTlNFRCBTT0ZUV0FSRSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUworRElTQ0xBSU1FUi4KKworOS4wIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksCitXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgVEhFCitMSUNFTlNPUiwgQU5ZIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgTElDRU5TRUQgU09GVFdBUkUsIE9SIEFOWQorU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwKK1NQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIKK0ZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsCitFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICitEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRICitPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVAorQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUKK0VYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTCitFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzEwLjAgSGlnaCBSaXNrIEFjdGl2aXRpZXMuIFRIRSBMSUNFTlNFRCBTT0ZUV0FSRSBJUyBOT1QgRkFVTFQtVE9MRVJBTlQgQU5EIElTCitOT1QgREVTSUdORUQsIE1BTlVGQUNUVVJFRCwgT1IgSU5URU5ERUQgRk9SIFVTRSBPUiBESVNUUklCVVRJT04gQVMgT04tTElORQorQ09OVFJPTCBFUVVJUE1FTlQgSU4gSEFaQVJET1VTIEVOVklST05NRU5UUyBSRVFVSVJJTkcgRkFJTC1TQUZFIFBFUkZPUk1BTkNFLAorU1VDSCBBUyBJTiBUSEUgT1BFUkFUSU9OIE9GIE5VQ0xFQVIgRkFDSUxJVElFUywgQUlSQ1JBRlQgTkFWSUdBVElPTiBPUgorQ09NTVVOSUNBVElPTlMgU1lTVEVNUywgQUlSIFRSQUZGSUMgQ09OVFJPTCwgRElSRUNUIExJRkUgU1VQUE9SVCBNQUNISU5FUywgT1IKK1dFQVBPTlMgU1lTVEVNUywgSU4gV0hJQ0ggVEhFIEZBSUxVUkUgT0YgVEhFIExJQ0VOU0VEIFNPRlRXQVJFIENPVUxEIExFQUQKK0RJUkVDVExZIFRPIERFQVRILCBQRVJTT05BTCBJTkpVUlksIE9SIFNFVkVSRSBQSFlTSUNBTCBPUiBFTlZJUk9OTUVOVEFMIERBTUFHRQorKCJISUdIIFJJU0sgQUNUSVZJVElFUyIpLiBMSUNFTlNPUiBBTkQgQ09OVFJJQlVUT1JTIFNQRUNJRklDQUxMWSBESVNDTEFJTSBBTlkKK0VYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5UWSBPRiBGSVRORVNTIEZPUiBISUdIIFJJU0sgQUNUSVZJVElFUy4KKworMTEuMCBSZXNwb25zaWJpbGl0eSBmb3IgQ2xhaW1zLiBBcyBiZXR3ZWVuIExpY2Vuc29yIGFuZCBDb250cmlidXRvcnMsIGVhY2gKK3BhcnR5IGlzIHJlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwKK291dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aGljaCBzcGVjaWZpY2FsbHkKK2Rpc2NsYWltcyB3YXJyYW50aWVzIGFuZCBsaW1pdHMgYW55IGxpYWJpbGl0eSBvZiB0aGUgTGljZW5zb3IuIFRoaXMgcGFyYWdyYXBoCitpcyB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYW5kIGNvbnRyb2xsZWQgYnkgdGhlIERpc2NsYWltZXIgT2YKK1dhcnJhbnRpZXMgb2YgU2VjdGlvbiA4LCB0aGUgTGltaXRhdGlvbiBPZiBEYW1hZ2VzIGluIFNlY3Rpb24gOSwgYW5kIHRoZQorZGlzY2xhaW1lciBhZ2FpbnN0IHVzZSBmb3IgSGlnaCBSaXNrIEFjdGl2aXRpZXMgaW4gU2VjdGlvbiAxMC4gVGhlIExpY2Vuc29yCitoYXMgdGhlcmVieSBkaXNjbGFpbWVkIGFsbCB3YXJyYW50aWVzIGFuZCBsaW1pdGVkIGFueSBkYW1hZ2VzIHRoYXQgaXQgaXMgb3IKK21heSBiZSBsaWFibGUgZm9yLiBZb3UgYWdyZWUgdG8gd29yayB3aXRoIExpY2Vuc29yIGFuZCBDb250cmlidXRvcnMgdG8KK2Rpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMgY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcworb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZyBTZWN0aW9ucyA4LCA5LCBhbmQgMTAuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yCitzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KKworMTIuMCBUZXJtaW5hdGlvbi4gVGhpcyBMaWNlbnNlIGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlCitpbW1lZGlhdGVseSBpbiB0aGUgZXZlbnQgb2YgdGhlIGNpcmN1bXN0YW5jZXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMTMuNiBvciBpZgorYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIG9yIHJlc3RyaWN0cyBZb3UgZnJvbSBmdWxseSBhbmQgb3Igc3BlY2lmaWNhbGx5Citjb21wbHlpbmcgd2l0aCBTZWN0aW9ucyAzLCA0IGFuZC9vciA2LCBvciBwcmV2ZW50cyB0aGUgZW5mb3JjZWFiaWxpdHkgb2YgYW55CitvZiB0aG9zZSBTZWN0aW9ucywgYW5kIFlvdSBtdXN0IGltbWVkaWF0ZWx5IGRpc2NvbnRpbnVlIGFueSB1c2Ugb2YgTGljZW5zZWQKK1NvZnR3YXJlLgorCisxMi4xIEF1dG9tYXRpYyBUZXJtaW5hdGlvbiBVcG9uIEJyZWFjaC4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQKK2hlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRoZSB0ZXJtcworaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIHRoaXJ0eSAoMzApIGRheXMgb2YgYmVjb21pbmcgYXdhcmUKK29mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgTGljZW5zZWQgU29mdHdhcmUgdGhhdCBhcmUgcHJvcGVybHkKK2dyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHRoYXQsIGJ5Cit0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSwKK3NoYWxsIHN1cnZpdmUuCisKKzEyLjIgVGVybWluYXRpb24gVXBvbiBBc3NlcnRpb24gb2YgUGF0ZW50IEluZnJpbmdlbWVudC4gSWYgWW91IGluaXRpYXRlCitsaXRpZ2F0aW9uIGJ5IGFzc2VydGluZyBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXJhdG9yeQoranVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBMaWNlbnNvciBvciBhIENvbnRyaWJ1dG9yIChMaWNlbnNvciBvciBDb250cmlidXRvcgorYWdhaW5zdCB3aG9tIFlvdSBmaWxlIHN1Y2ggYW4gYWN0aW9uIGlzIHJlZmVycmVkIHRvIGhlcmVpbiBhcyAiUmVzcG9uZGVudCIpCithbGxlZ2luZyB0aGF0IExpY2Vuc2VkIFNvZnR3YXJlIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsCit0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggUmVzcG9uZGVudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMyBvcgorNCBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIHByb3NwZWN0aXZlbHkgdXBvbiBzaXh0eSAoNjApIGRheXMgbm90aWNlCitmcm9tIFJlc3BvbmRlbnQgKHRoZSAiTm90aWNlIFBlcmlvZCIpIHVubGVzcyB3aXRoaW4gdGhhdCBOb3RpY2UgUGVyaW9kIFlvdQorZWl0aGVyIGFncmVlIGluIHdyaXRpbmcgKGkpIHRvIHBheSBSZXNwb25kZW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibHkKK3JveWFsdHkgZm9yIFlvdXIgcGFzdCBvciBmdXR1cmUgdXNlIG9mIExpY2Vuc2VkIFNvZnR3YXJlIG1hZGUgYnkgc3VjaAorUmVzcG9uZGVudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvIExpY2Vuc2VkCitTb2Z0d2FyZSBhZ2FpbnN0IHN1Y2ggUmVzcG9uZGVudC4gSWYgd2l0aGluIHNhaWQgTm90aWNlIFBlcmlvZCBhIHJlYXNvbmFibGUKK3JveWFsdHkgYW5kIHBheW1lbnQgYXJyYW5nZW1lbnQgYXJlIG5vdCBtdXR1YWxseSBhZ3JlZWQgdXBvbiBpbiB3cml0aW5nIGJ5IHRoZQorcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzIGdyYW50ZWQgYnkKK0xpY2Vuc29yIHRvIFlvdSB1bmRlciBTZWN0aW9ucyAzIGFuZCA0IGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZQorZXhwaXJhdGlvbiBvZiBzYWlkIE5vdGljZSBQZXJpb2QuCisKKzEyLjMgUmVhc29uYWJsZSBWYWx1ZSBvZiBUaGlzIExpY2Vuc2UuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50CitjbGFpbSBhZ2FpbnN0IFJlc3BvbmRlbnQgYWxsZWdpbmcgdGhhdCBMaWNlbnNlZCBTb2Z0d2FyZSBkaXJlY3RseSBvcgoraW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5CitsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQKK2xpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc2FpZAorUmVzcG9uZGVudCB1bmRlciBTZWN0aW9ucyAzIGFuZCA0IHNoYWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZwordGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvciBsaWNlbnNlLgorCisxMi40IE5vIFJldHJvYWN0aXZlIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyCit0aGlzIFNlY3Rpb24gYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGxpY2Vuc2VzIHRvCitkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgdGhhdCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkKK2Rpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLgorCisxMy4wIE1pc2NlbGxhbmVvdXMuCisKKzEzLjEgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2Vycy4gVGhlIExpY2Vuc2VkIFNvZnR3YXJlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSwiCithcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YKKyJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIiBhbmQgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUKK2RvY3VtZW50YXRpb24sIiBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLgorQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNAorKEp1bmUgMTk5NSksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgTGljZW5zZWQgU29mdHdhcmUgd2l0aCBvbmx5Cit0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKworMTMuMiBSZWxhdGlvbnNoaXAgb2YgUGFydGllcy4gVGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcyBjcmVhdGluZworYW4gYWdlbmN5LCBwYXJ0bmVyc2hpcCwgam9pbnQgdmVudHVyZSwgb3IgYW55IG90aGVyIGZvcm0gb2YgbGVnYWwgYXNzb2NpYXRpb24KK2JldHdlZW4gb3IgYW1vbmcgWW91LCBMaWNlbnNvciwgb3IgYW55IENvbnRyaWJ1dG9yLCBhbmQgWW91IHdpbGwgbm90IHJlcHJlc2VudAordG8gdGhlIGNvbnRyYXJ5LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGFwcGVhcmFuY2UsIG9yIG90aGVyd2lzZS4KKworMTMuMyBJbmRlcGVuZGVudCBEZXZlbG9wbWVudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugd2lsbCBpbXBhaXIgTGljZW5zb3JgcworcmlnaHQgdG8gYWNxdWlyZSwgbGljZW5zZSwgZGV2ZWxvcCwgc3ViY29udHJhY3QsIG1hcmtldCwgb3IgZGlzdHJpYnV0ZQordGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IHBlcmZvcm0gdGhlIHNhbWUgb3Igc2ltaWxhciBmdW5jdGlvbnMgYXMsIG9yCitvdGhlcndpc2UgY29tcGV0ZSB3aXRoLCBFeHRlbnNpb25zIHRoYXQgWW91IG1heSBkZXZlbG9wLCBwcm9kdWNlLCBtYXJrZXQsIG9yCitkaXN0cmlidXRlLgorCisxMy40IENvbnNlbnQgVG8gQnJlYWNoIE5vdCBXYWl2ZXIuIEZhaWx1cmUgYnkgTGljZW5zb3Igb3IgQ29udHJpYnV0b3IgdG8KK2VuZm9yY2UgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgZGVlbWVkIGEgd2FpdmVyIG9mIGZ1dHVyZSBlbmZvcmNlbWVudAorb2YgdGhhdCBvciBhbnkgb3RoZXIgcHJvdmlzaW9uLgorCisxMy41IFNldmVyYWJpbGl0eS4gVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nCit0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlCit1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5Cit0byBtYWtlIGl0IGVuZm9yY2VhYmxlLgorCisxMy42IEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4gSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IKK1lvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvcgorYWxsIG9mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24sCit0aGVuIFlvdSBjYW5ub3QgdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhlIHNvZnR3YXJlLgorCisxMy43IEV4cG9ydCBSZXN0cmljdGlvbnMuIFlvdSBtYXkgYmUgcmVzdHJpY3RlZCB3aXRoIHJlc3BlY3QgdG8gZG93bmxvYWRpbmcgb3IKK290aGVyd2lzZSBhY3F1aXJpbmcsIGV4cG9ydGluZywgb3IgcmVleHBvcnRpbmcgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIG9yIGFueQordW5kZXJseWluZyBpbmZvcm1hdGlvbiBvciB0ZWNobm9sb2d5IGJ5IFVuaXRlZCBTdGF0ZXMgYW5kIG90aGVyIGFwcGxpY2FibGUKK2xhd3MgYW5kIHJlZ3VsYXRpb25zLiBCeSBkb3dubG9hZGluZyBvciBieSBvdGhlcndpc2Ugb2J0YWluaW5nIHRoZSBMaWNlbnNlZAorU29mdHdhcmUsIFlvdSBhcmUgYWdyZWVpbmcgdG8gYmUgcmVzcG9uc2libGUgZm9yIGNvbXBsaWFuY2Ugd2l0aCBhbGwKK2FwcGxpY2FibGUgbGF3cyBhbmQgcmVndWxhdGlvbnMuCisKKzEzLjggQXJiaXRyYXRpb24sIEp1cmlzZGljdGlvbiAmYW1wOyBWZW51ZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5CitDb2xvcmFkbyBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMKK290aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFlvdSBleHByZXNzbHkgYWdyZWUgdGhhdAorYW55IGRpc3B1dGUgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIHN1Ym1pdHRlZCB0byBiaW5kaW5nIGFyYml0cmF0aW9uCit1bmRlciB0aGUgcnVsZXMgdGhlbiBwcmV2YWlsaW5nIG9mIHRoZSBBbWVyaWNhbiBBcmJpdHJhdGlvbiBBc3NvY2lhdGlvbi4gWW91CitmdXJ0aGVyIGFncmVlIHRoYXQgQWRhbXMgQ291bnR5LCBDb2xvcmFkbyBVU0EgaXMgcHJvcGVyIHZlbnVlIGFuZCBncmFudCBzdWNoCithcmJpdHJhdGlvbiBwcm9jZWVkaW5nIGp1cmlzZGljdGlvbiBhcyBtYXkgYmUgYXBwcm9wcmlhdGUgZm9yIHB1cnBvc2VzIG9mCityZXNvbHZpbmcgYW55IGRpc3B1dGUgdW5kZXIgdGhpcyBMaWNlbnNlLiBKdWRnZW1lbnQgdXBvbiBhbnkgYXdhcmQgbWFkZSBpbgorYXJiaXRyYXRpb24gbWF5IGJlIGVudGVyZWQgYW5kIGVuZm9yY2VkIGluIGFueSBjb3VydCBvZiBjb21wZXRlbnQKK2p1cmlzZGljdGlvbi4gVGhlIGFyYml0cmF0b3Igc2hhbGwgYXdhcmQgYXR0b3JuZXlgcyBmZWVzIGFuZCBjb3N0cyBvZgorYXJiaXRyYXRpb24gdG8gdGhlIHByZXZhaWxpbmcgcGFydHkuIFNob3VsZCBlaXRoZXIgcGFydHkgZmluZCBpdCBuZWNlc3NhcnkgdG8KK2VuZm9yY2UgaXRzIGFyYml0cmF0aW9uIGF3YXJkIG9yIHNlZWsgc3BlY2lmaWMgcGVyZm9ybWFuY2Ugb2Ygc3VjaCBhd2FyZCBpbiBhCitjaXZpbCBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZSBlbnRpdGxlZAordG8gcmVhc29uYWJsZSBhdHRvcm5leWBzIGZlZXMgYW5kIGNvc3RzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zCitDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkKK2V4Y2x1ZGVkLiBZb3UgYW5kIExpY2Vuc29yIGV4cHJlc3NseSB3YWl2ZSBhbnkgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkKK2xpdGlnYXRpb24gY29uY2VybmluZyBMaWNlbnNlZCBTb2Z0d2FyZSBvciB0aGlzIExpY2Vuc2UuIEFueSBsYXcgb3IgcmVndWxhdGlvbgordGhhdCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZQorZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisxMy45IEVudGlyZSBBZ3JlZW1lbnQuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuCit0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4KKworRVhISUJJVCBBCisKK1RoZSBMaWNlbnNlIE5vdGljZSBiZWxvdyBtdXN0IGFwcGVhciBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIGFueQorY29weSBZb3UgZGlzdHJpYnV0ZSBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgb3IgYW55IEV4dGVuc2lvbnMgdGhlcmV0bzoKKworVW5sZXNzIGV4cGxpY2l0bHkgYWNxdWlyZWQgYW5kIGxpY2Vuc2VkIGZyb20gTGljZW5zb3IgdW5kZXIgYW5vdGhlcgorbGljZW5zZSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgUmVjaXByb2NhbCBQdWJsaWMKK0xpY2Vuc2UgKCJSUEwiKSBWZXJzaW9uIDEuNSwgb3Igc3Vic2VxdWVudCB2ZXJzaW9ucyBhcyBhbGxvd2VkIGJ5IHRoZSBSUEwsCithbmQgWW91IG1heSBub3QgY29weSBvciB1c2UgdGhpcyBmaWxlIGluIGVpdGhlciBzb3VyY2UgY29kZSBvciBleGVjdXRhYmxlCitmb3JtLCBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgUlBMLgorCitBbGwgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFJQTCBpcyBwcm92aWRlZCBzdHJpY3RseSBvbiBhbiAiQVMKK0lTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgQU5ECitMSUNFTlNPUiBIRVJFQlkgRElTQ0xBSU1TIEFMTCBTVUNIIFdBUlJBTlRJRVMsIElOQ0xVRElORyBXSVRIT1VUCitMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRSwgUVVJRVQgRU5KT1lNRU5ULCBPUiBOT04tSU5GUklOR0VNRU5ULiBTZWUgdGhlIFJQTCBmb3Igc3BlY2lmaWMKK2xhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBSUEwuCisKK0VYSElCSVQgQgorCitUaGUgVXNlci1WaXNpYmxlIEF0dHJpYnV0aW9uIE5vdGljZSBiZWxvdywgd2hlbiBwcm92aWRlZCwgbXVzdCBhcHBlYXIgaW4gZWFjaAordXNlci12aXNpYmxlIGRpc3BsYXkgYXMgZGVmaW5lZCBpbiBTZWN0aW9uIDYuNCAoZCk6CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUlBTTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JQU0wtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwODE0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JQU0wtMS4wCkBAIC0wLDAgKzEsMTgyIEBACisKK1JlYWxOZXR3b3JrcyBQdWJsaWMgU291cmNlIExpY2Vuc2UgVmVyc2lvbiAxLjAKKworKFJldi4gRGF0ZSBPY3RvYmVyIDI4LCAyMDAyKQorCitBbHNvIGF2YWlsYWJsZSBpbiB0ZXh0IGZvcm1hdC4KKworMS4gR2VuZXJhbCBEZWZpbml0aW9ucy4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBSZWFsTmV0d29ya3MsIEluYy4sIG9yIGFueSBvdGhlciBlbnRpdHkgdGhhdCBlbGVjdHMgdG8gdXNlIHRoaXMgbGljZW5zZSwgKCJMaWNlbnNvciIpIG1ha2VzIHB1YmxpY2x5IGF2YWlsYWJsZSBhbmQgd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IExpY2Vuc29yIGlkZW50aWZ5aW5nIHN1Y2ggcHJvZ3JhbSBvciB3b3JrIGFzICJPcmlnaW5hbCBDb2RlIiBhbmQgc3RhdGluZyB0aGF0IGl0IGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgUmVhbE5ldHdvcmtzIFB1YmxpYyBTb3VyY2UgTGljZW5zZSB2ZXJzaW9uIDEuMCAob3Igc3Vic2VxdWVudCB2ZXJzaW9uIHRoZXJlb2YpICgiTGljZW5zZSIpLiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLiBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIFlvdSBwZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIHNvZnR3YXJlIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiBUaGVzZSBhY3Rpb25zIGFyZSBwcm9oaWJpdGVkIGJ5IGxhdyBpZiBZb3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nLCBjb3B5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgc29mdHdhcmUgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBzb2Z0d2FyZSksIFlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQgYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gSW4gYWRkaXRpb24sIHlvdSBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGJ5IGNsaWNraW5nIHRoZSBBY2NlcHQgYnV0dG9uIG9yIGRvd25sb2FkaW5nIHRoZSBzb2Z0d2FyZS4gQXMgdXNlZCBpbiB0aGlzIExpY2Vuc2U6CisKKzEuMSAiQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIiBtZWFuOiAoYSkgaW4gdGhlIGNhc2Ugd2hlcmUgTGljZW5zb3IgaXMgdGhlIGdyYW50b3Igb2YgcmlnaHRzLCBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IChpKSBhcmUgbm93IG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gTGljZW5zb3IgYW5kIChpaSkgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB1c2luZyBvciBtYWtpbmcgdGhlIE9yaWdpbmFsIENvZGUgYWxvbmUgYW5kIG5vdCBpbiBjb21iaW5hdGlvbiB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlOyBhbmQgKGIpIGluIHRoZSBjYXNlIHdoZXJlIFlvdSBhcmUgdGhlIGdyYW50b3Igb2YgcmlnaHRzLCBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IChpKSBhcmUgbm93IG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gWW91IGFuZCAoaWkpIGFyZSBpbmZyaW5nZWQgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIGJ5IHVzaW5nIG9yIG1ha2luZyBZb3VyIE1vZGlmaWNhdGlvbnMsIHRha2VuIGFsb25lIG9yIGluIGNvbWJpbmF0aW9uIHdpdGggT3JpZ2luYWwgQ29kZS4KKworMS4yICJDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlIiBtZWFucyBhbnkgb25lIG9mIHRoZSBsaWNlbnNlcyBsaXN0ZWQgb24gRXhoaWJpdCBCIG9yIGF0IGh0dHBzOi8vd3d3LmhlbGl4Y29tbXVuaXR5Lm9yZy9jb250ZW50L2NvbXBsaWNlbnNlIG9yIG90aGVyIGxpY2Vuc2VzIHNwZWNpZmljYWxseSBpZGVudGlmaWVkIGJ5IExpY2Vuc29yIGluIHdyaXRpbmcuIE5vdHdpdGhzdGFuZGluZyBhbnkgdGVybSB0byB0aGUgY29udHJhcnkgaW4gYW55IENvbXBhdGlibGUgU291cmNlIExpY2Vuc2UsIGFueSBjb2RlIGNvdmVyZWQgYnkgYW55IENvbXBhdGlibGUgU291cmNlIExpY2Vuc2UgdGhhdCBpcyB1c2VkIHdpdGggQ292ZXJlZCBDb2RlIG11c3QgYmUgbWFkZSByZWFkaWx5IGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtYXQgZm9yIHJveWFsdHktZnJlZSB1c2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlIG9yIHRoaXMgTGljZW5zZS4KKworMS4zICJDb250cmlidXRvciIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisxLjQgIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIHRoZSBjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueSByZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuNSAiRGVwbG95IiBtZWFucyB0byB1c2UsIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgb3RoZXIgdGhhbiBmb3IgWW91ciBpbnRlcm5hbCByZXNlYXJjaCBhbmQgZGV2ZWxvcG1lbnQgKFImYW1wO0QpIGFuZC9vciBQZXJzb25hbCBVc2UsIGFuZCBpbmNsdWRlcyB3aXRob3V0IGxpbWl0YXRpb24sIGFueSBhbmQgYWxsIGludGVybmFsIHVzZSBvciBkaXN0cmlidXRpb24gb2YgQ292ZXJlZCBDb2RlIHdpdGhpbiBZb3VyIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbiBleGNlcHQgZm9yIFImYW1wO0QgdXNlIGFuZC9vciBQZXJzb25hbCBVc2UsIGFzIHdlbGwgYXMgZGlyZWN0IG9yIGluZGlyZWN0IHN1YmxpY2Vuc2luZyBvciBkaXN0cmlidXRpb24gb2YgQ292ZXJlZCBDb2RlIGJ5IFlvdSB0byBhbnkgdGhpcmQgcGFydHkgaW4gYW55IGZvcm0gb3IgbWFubmVyLgorCisxLjYgIkRlcml2YXRpdmUgV29yayIgbWVhbnMgZWl0aGVyIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBVbml0ZWQgU3RhdGVzIGNvcHlyaWdodCBsYXcsIGFuZCBpbmNsdWRpbmcgYW55IHdvcmsgY29udGFpbmluZyBvciBpbmNsdWRpbmcgYW55IHBvcnRpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBvciBNb2RpZmljYXRpb25zLCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4gRGVyaXZhdGl2ZSBXb3JrIGFsc28gaW5jbHVkZXMgYW55IHdvcmsgd2hpY2ggY29tYmluZXMgYW55IHBvcnRpb24gb2YgQ292ZXJlZCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgd2l0aCBjb2RlIG5vdCBvdGhlcndpc2UgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS43ICJFeHRlcm5hbGx5IERlcGxveSIgbWVhbnMgdG8gRGVwbG95IHRoZSBDb3ZlcmVkIENvZGUgaW4gYW55IHdheSB0aGF0IG1heSBiZSBhY2Nlc3NlZCBvciB1c2VkIGJ5IGFueW9uZSBvdGhlciB0aGFuIFlvdSwgdXNlZCB0byBwcm92aWRlIGFueSBzZXJ2aWNlcyB0byBhbnlvbmUgb3RoZXIgdGhhbiBZb3UsIG9yIHVzZWQgaW4gYW55IHdheSB0byBkZWxpdmVyIGFueSBjb250ZW50IHRvIGFueW9uZSBvdGhlciB0aGFuIFlvdSwgd2hldGhlciB0aGUgQ292ZXJlZCBDb2RlIGlzIGRpc3RyaWJ1dGVkIHRvIHRob3NlIHBhcnRpZXMsIG1hZGUgYXZhaWxhYmxlIGFzIGFuIGFwcGxpY2F0aW9uIGludGVuZGVkIGZvciB1c2Ugb3ZlciBhIGNvbXB1dGVyIG5ldHdvcmssIG9yIHVzZWQgdG8gcHJvdmlkZSBzZXJ2aWNlcyBvciBvdGhlcndpc2UgZGVsaXZlciBjb250ZW50IHRvIGFueW9uZSBvdGhlciB0aGFuIFlvdS4KKworMS44LiAiSW50ZXJmYWNlIiBtZWFucyBpbnRlcmZhY2VzLCBmdW5jdGlvbnMsIHByb3BlcnRpZXMsIGNsYXNzIGRlZmluaXRpb25zLCBBUElzLCBoZWFkZXIgZmlsZXMsIEdVSURzLCBWLVRhYmxlcywgYW5kL29yIHByb3RvY29scyBhbGxvd2luZyBvbmUgcGllY2Ugb2Ygc29mdHdhcmUsIGZpcm13YXJlIG9yIGhhcmR3YXJlIHRvIGNvbW11bmljYXRlIG9yIGludGVyb3BlcmF0ZSB3aXRoIGFub3RoZXIgcGllY2Ugb2Ygc29mdHdhcmUsIGZpcm13YXJlIG9yIGhhcmR3YXJlLgorCisxLjkgIk1vZGlmaWNhdGlvbnMiIG1lYW4gYW55IGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tLCBhbmQvb3IgY2hhbmdlIHRvLCB0aGUgc3Vic3RhbmNlIGFuZC9vciBzdHJ1Y3R1cmUgb2YgdGhlIE9yaWdpbmFsIENvZGUsIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLCB0aGUgY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkgcmVzcGVjdGl2ZSBwb3J0aW9ucyB0aGVyZW9mLiBXaGVuIGNvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOiAoYSkgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIENvdmVyZWQgQ29kZTsgYW5kL29yIChiKSBhbnkgbmV3IGZpbGUgb3Igb3RoZXIgcmVwcmVzZW50YXRpb24gb2YgY29tcHV0ZXIgcHJvZ3JhbSBzdGF0ZW1lbnRzIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgQ292ZXJlZCBDb2RlLgorCisxLjEwICJPcmlnaW5hbCBDb2RlIiBtZWFucyAoYSkgdGhlIFNvdXJjZSBDb2RlIG9mIGEgcHJvZ3JhbSBvciBvdGhlciB3b3JrIGFzIG9yaWdpbmFsbHkgbWFkZSBhdmFpbGFibGUgYnkgTGljZW5zb3IgdW5kZXIgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgdGhlIFNvdXJjZSBDb2RlIG9mIGFueSB1cGRhdGVzIG9yIHVwZ3JhZGVzIHRvIHN1Y2ggcHJvZ3JhbXMgb3Igd29ya3MgbWFkZSBhdmFpbGFibGUgYnkgTGljZW5zb3IgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgdGhhdCBoYXMgYmVlbiBleHByZXNzbHkgaWRlbnRpZmllZCBieSBMaWNlbnNvciBhcyBzdWNoIGluIHRoZSBoZWFkZXIgZmlsZShzKSBvZiBzdWNoIHdvcms7IGFuZCAoYikgdGhlIG9iamVjdCBjb2RlIGNvbXBpbGVkIGZyb20gc3VjaCBTb3VyY2UgQ29kZSBhbmQgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBMaWNlbnNvciB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzEuMTEgIlBlcnNvbmFsIFVzZSIgbWVhbnMgdXNlIG9mIENvdmVyZWQgQ29kZSBieSBhbiBpbmRpdmlkdWFsIHNvbGVseSBmb3IgaGlzIG9yIGhlciBwZXJzb25hbCwgcHJpdmF0ZSBhbmQgbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMuIEFuIGluZGl2aWR1YWxgcyB1c2Ugb2YgQ292ZXJlZCBDb2RlIGluIGhpcyBvciBoZXIgY2FwYWNpdHkgYXMgYW4gb2ZmaWNlciwgZW1wbG95ZWUsIG1lbWJlciwgaW5kZXBlbmRlbnQgY29udHJhY3RvciBvciBhZ2VudCBvZiBhIGNvcnBvcmF0aW9uLCBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gKGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwpIGRvZXMgbm90IHF1YWxpZnkgYXMgUGVyc29uYWwgVXNlLgorCisxLjEyICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIGh1bWFuIHJlYWRhYmxlIGZvcm0gb2YgYSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgdGhhdCBpcyBzdWl0YWJsZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBleGVjdXRhYmxlIChvYmplY3QgY29kZSkuCisKKzEuMTMgIllvdSIgb3IgIllvdXIiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIG9yICJZb3VyIiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoLCBZb3UsIHdoZXJlICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIFBlcm1pdHRlZCBVc2VzOyBDb25kaXRpb25zICZhbXA7IFJlc3RyaWN0aW9ucy4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSwgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIFlvdSBhY2NlcHQgdGhpcyBMaWNlbnNlICh2aWEgZG93bmxvYWRpbmcgb3IgdXNpbmcgQ292ZXJlZCBDb2RlIG9yIG90aGVyd2lzZSBpbmRpY2F0aW5nIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UpLCBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGNvcHlyaWdodCBsaWNlbnNlLCB0byB0aGUgZXh0ZW50IG9mIExpY2Vuc29yYHMgY29weXJpZ2h0cyBjb3ZlciB0aGUgT3JpZ2luYWwgQ29kZSwgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworMi4xIFlvdSBtYXkgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBtb2RpZnkgYW5kIERlcGxveSBDb3ZlcmVkIENvZGUsIHByb3ZpZGVkIHRoYXQgaW4gZWFjaCBpbnN0YW5jZToKKworKGEpIFlvdSBtdXN0IHJldGFpbiBhbmQgcmVwcm9kdWNlIGluIGFsbCBjb3BpZXMgb2YgT3JpZ2luYWwgQ29kZSB0aGUgY29weXJpZ2h0IGFuZCBvdGhlciBwcm9wcmlldGFyeSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycyBvZiBMaWNlbnNvciBhcyB0aGV5IGFwcGVhciBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYW5kIGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIGluIHRoZSBPcmlnaW5hbCBDb2RlIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlOworCisoYikgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiBTb3VyY2UgQ29kZSBvZiBDb3ZlcmVkIENvZGUgYW5kIGRvY3VtZW50YXRpb24gWW91IGRpc3RyaWJ1dGUsIGFuZCBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHN1Y2ggU291cmNlIENvZGUgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIsIGV4Y2VwdCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA2OworCisoYykgWW91IG11c3QgZHVwbGljYXRlLCB0byB0aGUgZXh0ZW50IGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QsIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUgb2YgYWxsIFlvdXIgTW9kaWZpY2F0aW9ucywgYW5kIGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlOworCisoZCkgWW91IG11c3QgbWFrZSBTb3VyY2UgQ29kZSBvZiBhbGwgWW91ciBFeHRlcm5hbGx5IERlcGxveWVkIE1vZGlmaWNhdGlvbnMgcHVibGljbHkgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB0aGUgbGljZW5zZSBncmFudHMgc2V0IGZvcnRoIGluIFNlY3Rpb24gMyBiZWxvdywgZm9yIGFzIGxvbmcgYXMgeW91IERlcGxveSB0aGUgQ292ZXJlZCBDb2RlIG9yIHR3ZWx2ZSAoMTIpIG1vbnRocyBmcm9tIHRoZSBkYXRlIG9mIGluaXRpYWwgRGVwbG95bWVudCwgd2hpY2hldmVyIGlzIGxvbmdlci4gWW91IHNob3VsZCBwcmVmZXJhYmx5IGRpc3RyaWJ1dGUgdGhlIFNvdXJjZSBDb2RlIG9mIFlvdXIgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBlbGVjdHJvbmljYWxseSAoZS5nLiBkb3dubG9hZCBmcm9tIGEgd2ViIHNpdGUpOyBhbmQKKworKGUpIGlmIFlvdSBEZXBsb3kgQ292ZXJlZCBDb2RlIGluIG9iamVjdCBjb2RlLCBleGVjdXRhYmxlIGZvcm0gb25seSwgWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBub3RpY2UsIGluIHRoZSBjb2RlIGl0c2VsZiBhcyB3ZWxsIGFzIGluIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiwgc3RhdGluZyB0aGF0IFNvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBpbmZvcm1hdGlvbiBvbiBob3cgYW5kIHdoZXJlIHRvIG9idGFpbiBzdWNoIFNvdXJjZSBDb2RlLiBZb3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhlIE9iamVjdCBDb2RlIE5vdGljZSBzZXQgZm9ydGggaW4gRXhoaWJpdCBBIGluIHRoZSAiYWJvdXQiIGJveCBvciBvdGhlciBhcHByb3ByaWF0ZSBwbGFjZSB3aGVyZSBvdGhlciBjb3B5cmlnaHQgbm90aWNlcyBhcmUgcGxhY2VkLCBpbmNsdWRpbmcgYW55IHBhY2thZ2luZyBtYXRlcmlhbHMuCisKKzIuMiBZb3UgZXhwcmVzc2x5IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IGFsdGhvdWdoIExpY2Vuc29yIGFuZCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvciB0aGF0IHRoZSBDb3ZlcmVkIENvZGUgZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIExpY2Vuc29yIGFuZCBlYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltIGFueSBsaWFiaWxpdHkgdG8gWW91IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgWW91IGhlcmVieSBhc3N1bWUgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFlvdSB0byBtYWtlLCB1c2UsIHNlbGwsIGltcG9ydCBvciBvZmZlciBmb3Igc2FsZSB0aGUgQ292ZXJlZCBDb2RlLCBpdCBpcyBZb3VyIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgc3VjaCBsaWNlbnNlKHMpLgorCisyLjMgU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSwgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIFlvdSBhY2NlcHQgdGhpcyBMaWNlbnNlICh2aWEgZG93bmxvYWRpbmcgb3IgdXNpbmcgQ292ZXJlZCBDb2RlIG9yIG90aGVyd2lzZSBpbmRpY2F0aW5nIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UpLCBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBwZXJwZXR1YWwsIG5vbi1leGNsdXNpdmUgcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zb3JgcyBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSBhbmQgaW1wb3J0IHRoZSBDb3ZlcmVkIENvZGUsIHByb3ZpZGVkIHRoYXQgaW4gZWFjaCBpbnN0YW5jZSB5b3UgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMy4gWW91ciBHcmFudHMuIEluIGNvbnNpZGVyYXRpb24gb2YsIGFuZCBhcyBhIGNvbmRpdGlvbiB0bywgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZToKKworKGEpIFlvdSBncmFudCB0byBMaWNlbnNvciBhbmQgYWxsIHRoaXJkIHBhcnRpZXMgYSBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwsIGlycmV2b2NhYmxlLCByb3lhbHR5IGZyZWUgbGljZW5zZSB1bmRlciBZb3VyIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gbWFrZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIHVzZSwgaW1wb3J0LCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgRGVwbG95IFlvdXIgTW9kaWZpY2F0aW9ucyBvZiB0aGUgc2FtZSBzY29wZSBhbmQgZXh0ZW50IGFzIExpY2Vuc29yYHMgbGljZW5zZXMgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZCAyLjI7IGFuZAorCisoYikgWW91IGdyYW50IHRvIExpY2Vuc29yIGFuZCBpdHMgc3Vic2lkaWFyaWVzIGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIHBlcnBldHVhbCBhbmQgaXJyZXZvY2FibGUgbGljZW5zZSwgdW5kZXIgWW91ciBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3duZWQgb3IgY29udHJvbGxlZCBieSBZb3UsIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBkaXN0cmlidXRlLCBtb2RpZnkgb3IgaGF2ZSBtb2RpZmllZCAoZm9yIExpY2Vuc29yIGFuZC9vciBpdHMgc3Vic2lkaWFyaWVzKSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSBZb3VyIE1vZGlmaWNhdGlvbnMsIGluIGFueSBmb3JtIGFuZCBmb3IgYW55IHB1cnBvc2UsIHRocm91Z2ggbXVsdGlwbGUgdGllcnMgb2YgZGlzdHJpYnV0aW9uLgorCisoYykgWW91IGFncmVlIG5vdCB1c2UgYW55IGluZm9ybWF0aW9uIGRlcml2ZWQgZnJvbSBZb3VyIHVzZSBhbmQgcmV2aWV3IG9mIHRoZSBDb3ZlcmVkIENvZGUsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gYW55IGFsZ29yaXRobXMgb3IgaW52ZW50aW9ucyB0aGF0IG1heSBiZSBjb250YWluZWQgaW4gdGhlIENvdmVyZWQgQ29kZSwgZm9yIHRoZSBwdXJwb3NlIG9mIGFzc2VydGluZyBhbnkgb2YgWW91ciBwYXRlbnQgcmlnaHRzLCBvciBhc3Npc3RpbmcgYSB0aGlyZCBwYXJ0eSB0byBhc3NlcnQgYW55IG9mIGl0cyBwYXRlbnQgcmlnaHRzLCBhZ2FpbnN0IExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvci4KKworNC4gRGVyaXZhdGl2ZSBXb3Jrcy4gWW91IG1heSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IG90aGVyd2lzZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBEZXJpdmF0aXZlIFdvcmsgYXMgYW4gaW50ZWdyYXRlZCBwcm9kdWN0LiBJbiBlYWNoIHN1Y2ggaW5zdGFuY2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YsIGluY2x1ZGluZyBhbGwgTW9kaWZpY2F0aW9ucy4KKworNC4xIFlvdSBtdXN0IGNhdXNlIGFueSBEZXJpdmF0aXZlIFdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSwgcHVibGlzaCBvciBFeHRlcm5hbGx5IERlcGxveSwgdGhhdCBpbiB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgQ292ZXJlZCBDb2RlIG9yIGFueSBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIG5vIG90aGVyIGxpY2Vuc2UgZXhjZXB0IGFzIHByb3ZpZGVkIGluIFNlY3Rpb24gNC4yLiBZb3UgYWxzbyBtdXN0IG1ha2UgU291cmNlIENvZGUgYXZhaWxhYmxlIGZvciB0aGUgRGVyaXZhdGl2ZSBXb3JrIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIE1vZGlmaWNhdGlvbnMsIGRlc2NyaWJlZCBpbiBTZWN0aW9ucyAyIGFuZCAzLCBhYm92ZS4KKworNC4yIENvbXBhdGlibGUgU291cmNlIExpY2Vuc2VzLiBTb2Z0d2FyZSBtb2R1bGVzIHRoYXQgaGF2ZSBiZWVuIGluZGVwZW5kZW50bHkgZGV2ZWxvcGVkIHdpdGhvdXQgYW55IHVzZSBvZiBDb3ZlcmVkIENvZGUgYW5kIHdoaWNoIGNvbnRhaW4gbm8gcG9ydGlvbiBvZiB0aGUgQ292ZXJlZCBDb2RlLCBNb2RpZmljYXRpb25zIG9yIG90aGVyIERlcml2YXRpdmUgV29ya3MsIGJ1dCBhcmUgdXNlZCBvciBjb21iaW5lZCBpbiBhbnkgd2F5IHdpdGggdGhlIENvdmVyZWQgQ29kZSBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrIHRvIGZvcm0gYSBsYXJnZXIgRGVyaXZhdGl2ZSBXb3JrLCBhcmUgZXhlbXB0IGZyb20gdGhlIGNvbmRpdGlvbnMgZGVzY3JpYmVkIGluIFNlY3Rpb24gNC4xIGJ1dCBvbmx5IHRvIHRoZSBleHRlbnQgdGhhdDogdGhlIHNvZnR3YXJlIG1vZHVsZSwgaW5jbHVkaW5nIGFueSBzb2Z0d2FyZSB0aGF0IGlzIGxpbmtlZCB0bywgaW50ZWdyYXRlZCB3aXRoLCBvciBwYXJ0IG9mIHRoZSBzYW1lIGFwcGxpY2F0aW9ucyBhcywgdGhlIHNvZnR3YXJlIG1vZHVsZSBieSBhbnkgbWV0aG9kIG11c3QgYmUgd2hvbGx5IHN1YmplY3QgdG8gb25lIG9mIHRoZSBDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlcy4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIGFsbCBDb3ZlcmVkIENvZGUgbXVzdCBiZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFRodXMsIHRoZSBlbnRpcmUgRGVyaXZhdGl2ZSBXb3JrIG11c3QgYmUgbGljZW5zZWQgdW5kZXIgYSBjb21iaW5hdGlvbiBvZiB0aGUgUlBTTCAoZm9yIENvdmVyZWQgQ29kZSkgYW5kIGEgQ29tcGF0aWJsZSBTb3VyY2UgTGljZW5zZSBmb3IgYW55IGluZGVwZW5kZW50bHkgZGV2ZWxvcGVkIHNvZnR3YXJlIG1vZHVsZXMgd2l0aGluIHRoZSBEZXJpdmF0aXZlIFdvcmsuIFRoZSBmb3JlZ29pbmcgcmVxdWlyZW1lbnQgYXBwbGllcyBldmVuIGlmIHRoZSBDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlIHdvdWxkIG9yZGluYXJpbHkgYWxsb3cgdGhlIHNvZnR3YXJlIG1vZHVsZSB0byBsaW5rIHdpdGgsIG9yIGZvcm0gbGFyZ2VyIHdvcmtzIHdpdGgsIG90aGVyIHNvZnR3YXJlIHRoYXQgaXMgbm90IHN1YmplY3QgdG8gdGhlIENvbXBhdGlibGUgU291cmNlIExpY2Vuc2UuIEZvciBleGFtcGxlLCBhbHRob3VnaCB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSB2MS4xIGFsbG93cyBNb3ppbGxhIGNvZGUgdG8gYmUgY29tYmluZWQgd2l0aCBwcm9wcmlldGFyeSBzb2Z0d2FyZSB0aGF0IGlzIG5vdCBzdWJqZWN0IHRvIHRoZSBNUEwsIGlmIE1QTC1saWNlbnNlZCBjb2RlIGlzIHVzZWQgd2l0aCBDb3ZlcmVkIENvZGUgdGhlIE1QTC1saWNlbnNlZCBjb2RlIGNvdWxkIG5vdCBiZSBjb21iaW5lZCBvciBsaW5rZWQgd2l0aCBhbnkgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIE1QTC4gVGhlIGdlbmVyYWwgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiA0LjIgaXMgdG8gZW5hYmxlIHVzZSBvZiBDb3ZlcmVkIENvZGUgd2l0aCBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgd2hvbGx5IHN1YmplY3QgdG8gYW4gYWNjZXB0YWJsZSBvcGVuIHNvdXJjZSBsaWNlbnNlLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIHlvdXIgdXNlIG9mIHNvZnR3YXJlIHdpdGggQ292ZXJlZCBDb2RlIGlzIGFsbG93ZWQgdW5kZXIgWW91ciBsaWNlbnNlIHRvIHN1Y2ggc29mdHdhcmUuCisKKzQuMyBNZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIENvdmVyZWQgQ29kZSB3aXRoIHRoZSBDb3ZlcmVkIENvZGUgKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBDb3ZlcmVkIENvZGUpIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkZWxpdmVyIHRoZSBDb3ZlcmVkIENvZGUgZm9yIGNvbWJpbmF0aW9uIGFuZC9vciBpbnRlZ3JhdGlvbiB3aXRoIGFuIGFwcGxpY2F0aW9uIHByZXZpb3VzbHkgcHJvdmlkZWQgYnkgWW91IChmb3IgZXhhbXBsZSwgdmlhIGF1dG9tYXRpYyB1cGRhdGluZyB0ZWNobm9sb2d5KSwgc3VjaCBjb21iaW5hdGlvbiBhbmQvb3IgaW50ZWdyYXRpb24gY29uc3RpdHV0ZXMgYSBEZXJpdmF0aXZlIFdvcmsgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCis1LiBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHRvIGdyYW50IGFueSByaWdodHMgdG8gdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvciBleGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4uIE5vIHJpZ2h0IGlzIGdyYW50ZWQgdG8gdGhlIHRyYWRlbWFya3Mgb2YgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIENvdmVyZWQgQ29kZS4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgTGljZW5zb3IgZnJvbSBsaWNlbnNpbmcgdW5kZXIgZGlmZmVyZW50IHRlcm1zIGZyb20gdGhpcyBMaWNlbnNlIGFueSBjb2RlIHRoYXQgTGljZW5zb3Igb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYSByaWdodCB0byBsaWNlbnNlLiBNb2RpZmljYXRpb25zLCBEZXJpdmF0aXZlIFdvcmtzIGFuZC9vciBhbnkgdXNlIG9yIGNvbWJpbmF0aW9uIG9mIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIHRlY2hub2xvZ3kgcHJvdmlkZWQgYnkgTGljZW5zb3Igb3IgdGhpcmQgcGFydGllcyBtYXkgcmVxdWlyZSBhZGRpdGlvbmFsIHBhdGVudCBsaWNlbnNlcyBmcm9tIExpY2Vuc29yIHdoaWNoIExpY2Vuc29yIG1heSBncmFudCBpbiBpdHMgc29sZSBkaXNjcmV0aW9uLiBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHNlcGFyYXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGUgb3IgY29tYmluYXRpb25zIG9mIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUuCisKKzUuMS4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZSB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzIG93bmVkIGJ5IExpY2Vuc29yICgiTGljZW5zb3IgTWFya3MiIGRlZmluZWQgaW4gRXhoaWJpdCBDKSBvciB0byBhbnkgdHJhZGVtYXJrIG9yIHRyYWRlIG5hbWUgYmVsb25naW5nIHRvIGFueSBDb250cmlidXRvci4gTm8gTGljZW5zb3IgTWFya3MgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZSBvdGhlciB0aGFuIGFzIHBlcm1pdHRlZCBieSB0aGUgTGljZW5zb3IgVHJhZGVtYXJrIFBvbGljeSBkZWZpbmVkIGluIEV4aGliaXQgQy4KKworNi4gQWRkaXRpb25hbCBUZXJtcy4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3Igb3RoZXIgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGUgc2NvcGUgb2YgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlaW4gKCJBZGRpdGlvbmFsIFRlcm1zIikgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYgYW5kIGFzIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBvYnRhaW4gdGhlIHJlY2lwaWVudGBzIGFncmVlbWVudCB0aGF0IGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCBhbmQgaG9sZCBMaWNlbnNvciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QgTGljZW5zb3Igb3Igc3VjaCBDb250cmlidXRvciBieSByZWFzb24gb2YgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcy4KKworNy4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuIExpY2Vuc29yIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIE9uY2UgT3JpZ2luYWwgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHB1Ymxpc2hlZCBieSBMaWNlbnNvci4gTm8gb25lIG90aGVyIHRoYW4gTGljZW5zb3IgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCis4LiBOTyBXQVJSQU5UWSBPUiBTVVBQT1JULiBUaGUgQ292ZXJlZCBDb2RlIG1heSBjb250YWluIGluIHdob2xlIG9yIGluIHBhcnQgcHJlLXJlbGVhc2UsIHVudGVzdGVkLCBvciBub3QgZnVsbHkgdGVzdGVkIHdvcmtzLiBUaGUgQ292ZXJlZCBDb2RlIG1heSBjb250YWluIGVycm9ycyB0aGF0IGNvdWxkIGNhdXNlIGZhaWx1cmVzIG9yIGxvc3Mgb2YgZGF0YSwgYW5kIG1heSBiZSBpbmNvbXBsZXRlIG9yIGNvbnRhaW4gaW5hY2N1cmFjaWVzLiBZb3UgZXhwcmVzc2x5IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IHVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlLCBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLCBpcyBhdCBZb3VyIHNvbGUgYW5kIGVudGlyZSByaXNrLiBUSEUgQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgV0FSUkFOVFksIFVQR1JBREVTIE9SIFNVUFBPUlQgT0YgQU5ZIEtJTkQgQU5EIExJQ0VOU09SIEFORCBMSUNFTlNPUmBTIExJQ0VOU09SKFMpIChDT0xMRUNUSVZFTFkgUkVGRVJSRUQgVE8gQVMgIkxJQ0VOU09SIiBGT1IgVEhFIFBVUlBPU0VTIE9GIFNFQ1RJT05TIDggQU5EIDkpIEFORCBBTEwgQ09OVFJJQlVUT1JTIEVYUFJFU1NMWSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBBTkQvT1IgQ09ORElUSU9OUywgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBBTkQvT1IgQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIE9GIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBPRiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT0YgQUNDVVJBQ1ksIE9GIFFVSUVUIEVOSk9ZTUVOVCwgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuIExJQ0VOU09SIEFORCBFQUNIIENPTlRSSUJVVE9SIERPRVMgTk9UIFdBUlJBTlQgQUdBSU5TVCBJTlRFUkZFUkVOQ0UgV0lUSCBZT1VSIEVOSk9ZTUVOVCBPRiBUSEUgQ09WRVJFRCBDT0RFLCBUSEFUIFRIRSBGVU5DVElPTlMgQ09OVEFJTkVEIElOIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBNRUVUIFlPVVIgUkVRVUlSRU1FTlRTLCBUSEFUIFRIRSBPUEVSQVRJT04gT0YgVEhFIENPVkVSRUQgQ09ERSBXSUxMIEJFIFVOSU5URVJSVVBURUQgT1IgRVJST1ItRlJFRSwgT1IgVEhBVCBERUZFQ1RTIElOIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBCRSBDT1JSRUNURUQuIE5PIE9SQUwgT1IgV1JJVFRFTiBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBPUiBBRFZJQ0UgR0lWRU4gQlkgTElDRU5TT1IsIEEgTElDRU5TT1IgQVVUSE9SSVpFRCBSRVBSRVNFTlRBVElWRSBPUiBBTlkgQ09OVFJJQlVUT1IgU0hBTEwgQ1JFQVRFIEEgV0FSUkFOVFkuIFlvdSBhY2tub3dsZWRnZSB0aGF0IHRoZSBDb3ZlcmVkIENvZGUgaXMgbm90IGludGVuZGVkIGZvciB1c2UgaW4gaGlnaCByaXNrIGFjdGl2aXRpZXMsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCB0aGUgZGVzaWduLCBjb25zdHJ1Y3Rpb24sIG9wZXJhdGlvbiBvciBtYWludGVuYW5jZSBvZiBudWNsZWFyIGZhY2lsaXRpZXMsIGFpcmNyYWZ0IG5hdmlnYXRpb24sIGFpcmNyYWZ0IGNvbW11bmljYXRpb24gc3lzdGVtcywgb3IgYWlyIHRyYWZmaWMgY29udHJvbCBtYWNoaW5lcyBpbiB3aGljaCBjYXNlIHRoZSBmYWlsdXJlIG9mIHRoZSBDb3ZlcmVkIENvZGUgY291bGQgbGVhZCB0byBkZWF0aCwgcGVyc29uYWwgaW5qdXJ5LCBvciBzZXZlcmUgcGh5c2ljYWwgb3IgZW52aXJvbm1lbnRhbCBkYW1hZ2UuIExpY2Vuc29yIGRpc2NsYWltcyBhbnkgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5IG9mIGZpdG5lc3MgZm9yIHN1Y2ggdXNlcy4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuIFRPIFRIRSBFWFRFTlQgTk9UIFBST0hJQklURUQgQlkgTEFXLCBJTiBOTyBFVkVOVCBTSEFMTCBMSUNFTlNPUiBPUiBBTlkgQ09OVFJJQlVUT1IgQkUgTElBQkxFIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIE9SIFJFTEFUSU5HIFRPIFRISVMgTElDRU5TRSBPUiBZT1VSIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBDT1ZFUkVEIENPREUsIE9SIEFOWSBQT1JUSU9OIFRIRVJFT0YsIFdIRVRIRVIgVU5ERVIgQSBUSEVPUlkgT0YgQ09OVFJBQ1QsIFdBUlJBTlRZLCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBTVFJJQ1QgTElBQklMSVRZKSwgUFJPRFVDVFMgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRiBMSUNFTlNPUiBPUiBTVUNIIENPTlRSSUJVVE9SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUyBBTkQgTk9UV0lUSFNUQU5ESU5HIFRIRSBGQUlMVVJFIE9GIEVTU0VOVElBTCBQVVJQT1NFIE9GIEFOWSBSRU1FRFkuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIExJTUlUQVRJT04gT0YgTElBQklMSVRZIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuIEluIG5vIGV2ZW50IHNoYWxsIExpY2Vuc29yYHMgdG90YWwgbGlhYmlsaXR5IHRvIFlvdSBmb3IgYWxsIGRhbWFnZXMgKG90aGVyIHRoYW4gYXMgbWF5IGJlIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3KSB1bmRlciB0aGlzIExpY2Vuc2UgZXhjZWVkIHRoZSBhbW91bnQgb2YgdGVuIGRvbGxhcnMgKCQxMC4wMCkuCisKKzEwLiBPd25lcnNoaXAuIFN1YmplY3QgdG8gdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byBhbnkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2ggQ29udHJpYnV0b3IuIExpY2Vuc29yIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMgbWFkZSBieSBvciBvbiBiZWhhbGYgb2YgTGljZW5zb3IgKCJMaWNlbnNvciBNb2RpZmljYXRpb25zIiksIGFuZCBzdWNoIExpY2Vuc29yIE1vZGlmaWNhdGlvbnMgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gTGljZW5zb3IgbWF5LCBhdCBpdHMgc29sZSBkaXNjcmV0aW9uLCBjaG9vc2UgdG8gbGljZW5zZSBzdWNoIExpY2Vuc29yIE1vZGlmaWNhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLCBvciBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlIG9yIG1heSBjaG9vc2Ugbm90IHRvIGxpY2Vuc2UgdGhlbSBhdCBhbGwuCisKKzExLiBUZXJtaW5hdGlvbi4KKworMTEuMSBUZXJtIGFuZCBUZXJtaW5hdGlvbi4gVGhlIHRlcm0gb2YgdGhpcyBMaWNlbnNlIGlzIHBlcnBldHVhbCB1bmxlc3MgdGVybWluYXRlZCBhcyBwcm92aWRlZCBiZWxvdy4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlOgorCisoYSkgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBmcm9tIExpY2Vuc29yIGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSB0ZXJtKHMpIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggYnJlYWNoOworCisoYikgaW1tZWRpYXRlbHkgaW4gdGhlIGV2ZW50IG9mIHRoZSBjaXJjdW1zdGFuY2VzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEyLjUoYik7IG9yCisKKyhjKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gTGljZW5zb3IgaWYgWW91LCBhdCBhbnkgdGltZSBkdXJpbmcgdGhlIHRlcm0gb2YgdGhpcyBMaWNlbnNlLCBjb21tZW5jZSBhbiBhY3Rpb24gZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQgYWdhaW5zdCBMaWNlbnNvciAoaW5jbHVkaW5nIGJ5IGNyb3NzLWNsYWltIG9yIGNvdW50ZXIgY2xhaW0gaW4gYSBsYXdzdWl0KTsKKworKGQpIHVwb24gd3JpdHRlbiBub3RpY2UgZnJvbSBMaWNlbnNvciBpZiBZb3UsIGF0IGFueSB0aW1lIGR1cmluZyB0aGUgdGVybSBvZiB0aGlzIExpY2Vuc2UsIGNvbW1lbmNlIGFuIGFjdGlvbiBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCBhZ2FpbnN0IGFueSB0aGlyZCBwYXJ0eSBhbGxlZ2luZyB0aGF0IHRoZSBDb3ZlcmVkIENvZGUgaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBhbnkgcGF0ZW50IChpbmNsdWRpbmcgYnkgY3Jvc3MtY2xhaW0gb3IgY291bnRlciBjbGFpbSBpbiBhIGxhd3N1aXQpLgorCisxMS4yIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi4gVXBvbiB0ZXJtaW5hdGlvbiwgWW91IGFncmVlIHRvIGltbWVkaWF0ZWx5IHN0b3AgYW55IGZ1cnRoZXIgdXNlLCByZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiwgc3VibGljZW5zaW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBhbmQgdG8gZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGhhdmUgYmVlbiBwcm9wZXJseSBncmFudGVkIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBzaG91bGQgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIFNlY3Rpb25zIDMsIDUsIDgsIDksIDEwLCAxMSwgMTIuMiBhbmQgMTMuIE5vIHBhcnR5IHdpbGwgYmUgbGlhYmxlIHRvIGFueSBvdGhlciBmb3IgY29tcGVuc2F0aW9uLCBpbmRlbW5pdHkgb3IgZGFtYWdlcyBvZiBhbnkgc29ydCBzb2xlbHkgYXMgYSByZXN1bHQgb2YgdGVybWluYXRpbmcgdGhpcyBMaWNlbnNlIGluIGFjY29yZGFuY2Ugd2l0aCBpdHMgdGVybXMsIGFuZCB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBiZSB3aXRob3V0IHByZWp1ZGljZSB0byBhbnkgb3RoZXIgcmlnaHQgb3IgcmVtZWR5IG9mIGFueSBwYXJ0eS4KKworMTIuIE1pc2NlbGxhbmVvdXMuCisKKzEyLjEgR292ZXJubWVudCBFbmQgVXNlcnMuIFRoZSBDb3ZlcmVkIENvZGUgaXMgYSAiY29tbWVyY2lhbCBpdGVtIiBhcyBkZWZpbmVkIGluIEZBUiAyLjEwMS4gR292ZXJubWVudCBzb2Z0d2FyZSBhbmQgdGVjaG5pY2FsIGRhdGEgcmlnaHRzIGluIHRoZSBDb3ZlcmVkIENvZGUgaW5jbHVkZSBvbmx5IHRob3NlIHJpZ2h0cyBjdXN0b21hcmlseSBwcm92aWRlZCB0byB0aGUgcHVibGljIGFzIGRlZmluZWQgaW4gdGhpcyBMaWNlbnNlLiBUaGlzIGN1c3RvbWFyeSBjb21tZXJjaWFsIGxpY2Vuc2UgaW4gdGVjaG5pY2FsIGRhdGEgYW5kIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGluIGFjY29yZGFuY2Ugd2l0aCBGQVIgMTIuMjExIChUZWNobmljYWwgRGF0YSkgYW5kIDEyLjIxMiAoQ29tcHV0ZXIgU29mdHdhcmUpIGFuZCwgZm9yIERlcGFydG1lbnQgb2YgRGVmZW5zZSBwdXJjaGFzZXMsIERGQVIgMjUyLjIyNy03MDE1IChUZWNobmljYWwgRGF0YSAtLSBDb21tZXJjaWFsIEl0ZW1zKSBhbmQgMjI3LjcyMDItMyAoUmlnaHRzIGluIENvbW1lcmNpYWwgQ29tcHV0ZXIgU29mdHdhcmUgb3IgQ29tcHV0ZXIgU29mdHdhcmUgRG9jdW1lbnRhdGlvbikuIEFjY29yZGluZ2x5LCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKzEyLjIgUmVsYXRpb25zaGlwIG9mIFBhcnRpZXMuIFRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMgY3JlYXRpbmcgYW4gYWdlbmN5LCBwYXJ0bmVyc2hpcCwgam9pbnQgdmVudHVyZSBvciBhbnkgb3RoZXIgZm9ybSBvZiBsZWdhbCBhc3NvY2lhdGlvbiBiZXR3ZWVuIG9yIGFtb25nIFlvdSwgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yLCBhbmQgWW91IHdpbGwgbm90IHJlcHJlc2VudCB0byB0aGUgY29udHJhcnksIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgYXBwZWFyYW5jZSBvciBvdGhlcndpc2UuCisKKzEyLjMgSW5kZXBlbmRlbnQgRGV2ZWxvcG1lbnQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHdpbGwgaW1wYWlyIExpY2Vuc29yYHMgcmlnaHQgdG8gYWNxdWlyZSwgbGljZW5zZSwgZGV2ZWxvcCwgaGF2ZSBvdGhlcnMgZGV2ZWxvcCBmb3IgaXQsIG1hcmtldCBhbmQvb3IgZGlzdHJpYnV0ZSB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgcGVyZm9ybSB0aGUgc2FtZSBvciBzaW1pbGFyIGZ1bmN0aW9ucyBhcywgb3Igb3RoZXJ3aXNlIGNvbXBldGUgd2l0aCwgTW9kaWZpY2F0aW9ucywgRGVyaXZhdGl2ZSBXb3JrcywgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IFlvdSBtYXkgZGV2ZWxvcCwgcHJvZHVjZSwgbWFya2V0IG9yIGRpc3RyaWJ1dGUuCisKKzEyLjQgV2FpdmVyOyBDb25zdHJ1Y3Rpb24uIEZhaWx1cmUgYnkgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yIHRvIGVuZm9yY2UgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgZGVlbWVkIGEgd2FpdmVyIG9mIGZ1dHVyZSBlbmZvcmNlbWVudCBvZiB0aGF0IG9yIGFueSBvdGhlciBwcm92aXNpb24uIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHdpbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKworMTIuNSBTZXZlcmFiaWxpdHkuIChhKSBJZiBmb3IgYW55IHJlYXNvbiBhIGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24gZmluZHMgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIG9yIHBvcnRpb24gdGhlcmVvZiwgdG8gYmUgdW5lbmZvcmNlYWJsZSwgdGhhdCBwcm92aXNpb24gb2YgdGhlIExpY2Vuc2Ugd2lsbCBiZSBlbmZvcmNlZCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWlzc2libGUgc28gYXMgdG8gZWZmZWN0IHRoZSBlY29ub21pYyBiZW5lZml0cyBhbmQgaW50ZW50IG9mIHRoZSBwYXJ0aWVzLCBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuIChiKSBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgaWYgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIG9yIHJlc3RyaWN0cyBZb3UgZnJvbSBmdWxseSBhbmQvb3Igc3BlY2lmaWNhbGx5IGNvbXBseWluZyB3aXRoIFNlY3Rpb25zIDIgYW5kL29yIDMgb3IgcHJldmVudHMgdGhlIGVuZm9yY2VhYmlsaXR5IG9mIGVpdGhlciBvZiB0aG9zZSBTZWN0aW9ucywgdGhpcyBMaWNlbnNlIHdpbGwgaW1tZWRpYXRlbHkgdGVybWluYXRlIGFuZCBZb3UgbXVzdCBpbW1lZGlhdGVseSBkaXNjb250aW51ZSBhbnkgdXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUgYW5kIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiBpdCB0aGF0IGFyZSBpbiB5b3VyIHBvc3Nlc3Npb24gb3IgY29udHJvbC4KKworMTIuNiBEaXNwdXRlIFJlc29sdXRpb24uIEFueSBsaXRpZ2F0aW9uIG9yIG90aGVyIGRpc3B1dGUgcmVzb2x1dGlvbiBiZXR3ZWVuIFlvdSBhbmQgTGljZW5zb3IgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIHRha2UgcGxhY2UgaW4gdGhlIFNlYXR0bGUsIFdhc2hpbmd0b24sIGFuZCBZb3UgYW5kIExpY2Vuc29yIGhlcmVieSBjb25zZW50IHRvIHRoZSBwZXJzb25hbCBqdXJpc2RpY3Rpb24gb2YsIGFuZCB2ZW51ZSBpbiwgdGhlIHN0YXRlIGFuZCBmZWRlcmFsIGNvdXJ0cyB3aXRoaW4gdGhhdCBEaXN0cmljdCB3aXRoIHJlc3BlY3QgdG8gdGhpcyBMaWNlbnNlLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4KKworMTIuNyBFeHBvcnQvSW1wb3J0IExhd3MuIFRoaXMgc29mdHdhcmUgaXMgc3ViamVjdCB0byBhbGwgZXhwb3J0IGFuZCBpbXBvcnQgbGF3cyBhbmQgcmVzdHJpY3Rpb25zIGFuZCByZWd1bGF0aW9ucyBvZiB0aGUgY291bnRyeSBpbiB3aGljaCB5b3UgcmVjZWl2ZSB0aGUgQ292ZXJlZCBDb2RlIGFuZCBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCBZb3UgZG8gbm90IGV4cG9ydCwgcmUtZXhwb3J0IG9yIGltcG9ydCB0aGUgQ292ZXJlZCBDb2RlIG9yIGFueSBkaXJlY3QgcHJvZHVjdCB0aGVyZW9mIGluIHZpb2xhdGlvbiBvZiBhbnkgc3VjaCByZXN0cmljdGlvbnMsIGxhd3Mgb3IgcmVndWxhdGlvbnMsIG9yIHdpdGhvdXQgYWxsIG5lY2Vzc2FyeSBhdXRob3JpemF0aW9ucy4KKworMTIuOCBFbnRpcmUgQWdyZWVtZW50OyBHb3Zlcm5pbmcgTGF3LiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIGFuZCB0aGUgU3RhdGUgb2YgV2FzaGluZ3Rvbi4KKworV2hlcmUgWW91IGFyZSBsb2NhdGVkIGluIHRoZSBwcm92aW5jZSBvZiBRdWViZWMsIENhbmFkYSwgdGhlIGZvbGxvd2luZyBjbGF1c2UgYXBwbGllczogVGhlIHBhcnRpZXMgaGVyZWJ5IGNvbmZpcm0gdGhhdCB0aGV5IGhhdmUgcmVxdWVzdGVkIHRoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbGwgcmVsYXRlZCBkb2N1bWVudHMgYmUgZHJhZnRlZCBpbiBFbmdsaXNoLiBMZXMgcGFydGllcyBvbnQgZXhpZyYjMjMzOyBxdWUgbGUgcHImIzIzMztzZW50IGNvbnRyYXQgZXQgdG91cyBsZXMgZG9jdW1lbnRzIGNvbm5leGVzIHNvaWVudCByJiMyMzM7ZGlnJiMyMzM7cyBlbiBhbmdsYWlzLgorCisKK0VYSElCSVQgQS4KKworIkNvcHlyaWdodCAmIzE2OTsgMTk5NS0yMDAyIFJlYWxOZXR3b3JrcywgSW5jLiBhbmQvb3IgaXRzIGxpY2Vuc29ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSwgYW5kIHRoZSBmaWxlcyBpbmNsdWRlZCB3aXRoIHRoaXMgZmlsZSwgYXJlIHN1YmplY3QgdG8gdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgUmVhbE5ldHdvcmtzIFB1YmxpYyBTb3VyY2UgTGljZW5zZSBWZXJzaW9uIDEuMCAodGhlICJSUFNMIikgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmhlbGl4Y29tbXVuaXR5Lm9yZy9jb250ZW50L3Jwc2wgdW5sZXNzIHlvdSBoYXZlIGxpY2Vuc2VkIHRoZSBmaWxlIHVuZGVyIHRoZSBSZWFsTmV0d29ya3MgQ29tbXVuaXR5IFNvdXJjZSBMaWNlbnNlIFZlcnNpb24gMS4wICh0aGUgIlJDU0wiKSBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuaGVsaXhjb21tdW5pdHkub3JnL2NvbnRlbnQvcmNzbCwgaW4gd2hpY2ggY2FzZSB0aGUgUkNTTCB3aWxsIGFwcGx5LiBZb3UgbWF5IGFsc28gb2J0YWluIHRoZSBsaWNlbnNlIHRlcm1zIGRpcmVjdGx5IGZyb20gUmVhbE5ldHdvcmtzLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIFJQU0wgb3IsIGlmIHlvdSBoYXZlIGEgdmFsaWQgUkNTTCB3aXRoIFJlYWxOZXR3b3JrcyBhcHBsaWNhYmxlIHRvIHRoaXMgZmlsZSwgdGhlIFJDU0wuIFBsZWFzZSBzZWUgdGhlIGFwcGxpY2FibGUgUlBTTCBvciBSQ1NMIGZvciB0aGUgcmlnaHRzLCBvYmxpZ2F0aW9ucyBhbmQgbGltaXRhdGlvbnMgZ292ZXJuaW5nIHVzZSBvZiB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBIZWxpeCBETkEgVGVjaG5vbG9neS4gUmVhbE5ldHdvcmtzIGlzIHRoZSBkZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIGNvZGUgYW5kIG93bnMgdGhlIGNvcHlyaWdodHMgaW4gdGhlIHBvcnRpb25zIGl0IGNyZWF0ZWQuCisKK1RoaXMgZmlsZSwgYW5kIHRoZSBmaWxlcyBpbmNsdWRlZCB3aXRoIHRoaXMgZmlsZSwgaXMgZGlzdHJpYnV0ZWQgYW5kIG1hZGUgYXZhaWxhYmxlIG9uIGFuIGBBUyBJU2AgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIEFORCBSRUFMTkVUV09SS1MgSEVSRUJZIERJU0NMQUlNUyBBTEwgU1VDSCBXQVJSQU5USUVTLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBRVUlFVCBFTkpPWU1FTlQgT1IgTk9OLUlORlJJTkdFTUVOVC4KKworQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCitUZWNobm9sb2d5IENvbXBhdGliaWxpdHkgS2l0IFRlc3QgU3VpdGUocykgTG9jYXRpb24gKGlmIGxpY2Vuc2VkIHVuZGVyIHRoZSBSQ1NMKToKKworX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18iCisKK09iamVjdCBDb2RlIE5vdGljZTogSGVsaXggRE5BIENsaWVudCB0ZWNobm9sb2d5IGluY2x1ZGVkLiBDb3B5cmlnaHQgJiMxNjk7IFJlYWxOZXR3b3JrcywgSW5jLiwgMTk5NS0yMDAyLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitFWEhJQklUIEIKKworQ29tcGF0aWJsZSBTb3VyY2UgTGljZW5zZXMgZm9yIHRoZSBSZWFsTmV0d29ya3MgUHVibGljIFNvdXJjZSBMaWNlbnNlLiBUaGUgZm9sbG93aW5nIGxpc3QgYXBwbGllcyB0byB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSBhcyBvZiBPY3RvYmVyIDI1LCAyMDAyLCB1bmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZC4KKworQWNhZGVtaWMgRnJlZSBMaWNlbnNlCitBcGFjaGUgU29mdHdhcmUgTGljZW5zZQorQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlCitBcnRpc3RpYyBsaWNlbnNlCitBdHRyaWJ1dGlvbiBBc3N1cmFuY2UgTGljZW5zZXMKK0JTRCBsaWNlbnNlCitDb21tb24gUHVibGljIExpY2Vuc2UxCitFaWZmZWwgRm9ydW0gTGljZW5zZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkxCitHTlUgTGlicmFyeSBvciAiTGVzc2VyIiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChMR1BMKTEKK0lCTSBQdWJsaWMgTGljZW5zZQorSW50ZWwgT3BlbiBTb3VyY2UgTGljZW5zZQorSmFiYmVyIE9wZW4gU291cmNlIExpY2Vuc2UKK01JVCBsaWNlbnNlCitNSVRSRSBDb2xsYWJvcmF0aXZlIFZpcnR1YWwgV29ya3NwYWNlIExpY2Vuc2UgKENWVyBMaWNlbnNlKQorTW90b3NvdG8gTGljZW5zZQorTW96aWxsYSBQdWJsaWMgTGljZW5zZSAxLjAgKE1QTCkKK01vemlsbGEgUHVibGljIExpY2Vuc2UgMS4xIChNUEwpCitOb2tpYSBPcGVuIFNvdXJjZSBMaWNlbnNlCitPcGVuIEdyb3VwIFRlc3QgU3VpdGUgTGljZW5zZQorUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gTGljZW5zZQorUmljb2ggU291cmNlIENvZGUgUHVibGljIExpY2Vuc2UKK1N1biBJbmR1c3RyeSBTdGFuZGFyZHMgU291cmNlIExpY2Vuc2UgKFNJU1NMKQorU3VuIFB1YmxpYyBMaWNlbnNlCitVbml2ZXJzaXR5IG9mIElsbGlub2lzL05DU0EgT3BlbiBTb3VyY2UgTGljZW5zZQorVm92aWRhIFNvZnR3YXJlIExpY2Vuc2Ugdi4gMS4wCitXM0MgTGljZW5zZQorWC5OZXQgTGljZW5zZQorWm9wZSBQdWJsaWMgTGljZW5zZQoremxpYi9saWJwbmcgbGljZW5zZQorMU5vdGU6IGJlY2F1c2UgdGhpcyBsaWNlbnNlIGNvbnRhaW5zIGNlcnRhaW4gcmVjaXByb2NhbCBsaWNlbnNpbmcgdGVybXMgdGhhdCBwdXJwb3J0IHRvIGV4dGVuZCB0byBpbmRlcGVuZGVudGx5IGRldmVsb3BlZCBjb2RlLCBZb3UgbWF5IGJlIHByb2hpYml0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgb3RoZXJ3aXNlIGNvbXBhdGlibGUgbGljZW5zZSBmcm9tIHVzaW5nIGNvZGUgbGljZW5zZWQgdW5kZXIgaXRzIHRlcm1zIHdpdGggQ292ZXJlZCBDb2RlIGJlY2F1c2UgQ292ZXJlZCBDb2RlIG1heSBvbmx5IGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBSZWFsTmV0d29ya3MgUHVibGljIFNvdXJjZSBMaWNlbnNlLiBBbnkgYXR0ZW1wdCB0byBhcHBseSBub24gUlBTTCBsaWNlbnNlIHRlcm1zLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBHUEwsIHRvIENvdmVyZWQgQ29kZSBpcyBleHByZXNzbHkgZm9yYmlkZGVuLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IFlvdXIgdXNlIG9mIENvbXBhdGlibGUgU291cmNlIExpY2Vuc2VkIGNvZGUgZG9lcyBub3QgdmlvbGF0ZSBlaXRoZXIgdGhlIFJQU0wgb3IgdGhlIENvbXBhdGlibGUgU291cmNlIExpY2Vuc2UuCisKK1RoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGxpc3QgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5oZWxpeGNvbW11bml0eS5vcmcvY29udGVudC9jb21wbGljZW5zZQorCitFWEhJQklUIEMKKworUmVhbE5ldHdvcmtzYCBUcmFkZW1hcmsgcG9saWN5LgorCitSZWFsTmV0d29ya3MgZGVmaW5lcyB0aGUgZm9sbG93aW5nIHRyYWRlbWFya3MgY29sbGVjdGl2ZWx5IGFzICJMaWNlbnNvciBUcmFkZW1hcmtzIjogIlJlYWxOZXR3b3JrcyIsICJSZWFsUGxheWVyIiwgIlJlYWxKdWtlYm94IiwgIlJlYWxTeXN0ZW0iLCAiUmVhbEF1ZGlvIiwgIlJlYWxWaWRlbyIsICJSZWFsT25lIFBsYXllciIsICJSZWFsTWVkaWEiLCAiSGVsaXgiIG9yIGFueSBvdGhlciB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzIGJlbG9uZ2luZyB0byBSZWFsTmV0d29ya3MuCisKK1JlYWxOZXR3b3JrcyAiTGljZW5zb3IgVHJhZGVtYXJrIFBvbGljeSIgZm9yYmlkcyBhbnkgdXNlIG9mIExpY2Vuc29yIFRyYWRlbWFya3MgZXhjZXB0IGFzIHBlcm1pdHRlZCBieSBhbmQgaW4gc3RyaWN0IGNvbXBsaWFuY2UgYXQgYWxsIHRpbWVzIHdpdGggUmVhbE5ldHdvcmtzYCB0aGlyZCBwYXJ0eSB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcyB3aGljaCBhcmUgcG9zdGVkIGF0IHd3dy5yZWFsbmV0d29ya3MuY29tL2luZm8vaGVsaXhsb2dvLmh0bWwuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUlNDUEwgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JTQ1BMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZGJiYzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JTQ1BMCkBAIC0wLDAgKzEsMTkzIEBACisKK1JpY29oIFNvdXJjZSBDb2RlIFB1YmxpYyBMaWNlbnNlCisKK1ZlcnNpb24gMS4wCisKKworMS4gRGVmaW5pdGlvbnMuCisKKworMS4xLiAiQ29udHJpYnV0b3IiIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworCisxLjIuICJDb250cmlidXRvciBWZXJzaW9uIiBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKworMS4zLiAiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIiBtZWFucyBhIHdlYnNpdGUgb3IgYW55IG90aGVyIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YS4KKworCisxLjQuICJFeGVjdXRhYmxlIENvZGUiIG1lYW5zIEdvdmVybmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKworCisxLjUuICJHb3Zlcm5lZCBDb2RlIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorCisKKzEuNi4gIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgR292ZXJuZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworCisxLjcuICJMaWNlbnNhYmxlIiBtZWFucyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgorCisKKzEuOC4gIkxpY2Vuc2UiIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKworMS45LiAiTW9kaWZpY2F0aW9ucyIgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBXaGVuIEdvdmVybmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOgorCisKKyhhKSBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCisoYikgQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworCisKKzEuMTAuICJPcmlnaW5hbCBDb2RlIiBtZWFucyB0aGUgIlBsYXRmb3JtIGZvciBJbmZvcm1hdGlvbiBBcHBsaWNhdGlvbnMiIFNvdXJjZSBDb2RlIGFzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBieSBSU1YuCisKKworMS4xMSAiUGF0ZW50IENsYWltcyIgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IHRoZSBncmFudG9yIG9mIGEgbGljZW5zZSB0aGVyZXRvLgorCisxLjEyLiAiUlNWIiBtZWFucyBSaWNvaCBTaWxpY29uIFZhbGxleSwgSW5jLiwgYSBDYWxpZm9ybmlhIGNvcnBvcmF0aW9uIHdpdGggb2ZmaWNlcyBhdCAyODgyIFNhbmQgSGlsbCBSb2FkLCBTdWl0ZSAxMTUsIE1lbmxvIFBhcmssIENBIDk0MDI1LTcwMjIuCisKKzEuMTMuICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBHb3Zlcm5lZCBDb2RlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIEV4ZWN1dGFibGUgQ29kZSwgb3IgYSBsaXN0IG9mIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBHb3Zlcm5lZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcmBzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKworCisxLjE0LiAiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworCisKKzIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuCisKKzIuMS4gR3JhbnQgZnJvbSBSU1YuIFJTViBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKworCisoYSkgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcgb3Igc2VsbGluZyBvZiBPcmlnaW5hbCBDb2RlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsIHNlbGwsIGFuZCBvZmZlciBmb3Igc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKS4KKworCisKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuIEVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisKKworKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgR292ZXJuZWQgQ29kZSBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgZWl0aGVyIGFsb25lIGFuZC9vciBpbiBjb21iaW5hdGlvbiB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2Y6IChpKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZCAoaWkpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKS4KKworCisKKzMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy4KKworCisKKzMuMS4gQXBwbGljYXRpb24gb2YgTGljZW5zZS4gVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgR292ZXJuZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LgorCisKKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLiBBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzIGFuIEV4ZWN1dGFibGUgQ29kZSB2ZXJzaW9uIG9yIHZpYSBhbiBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSBDb2RlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIGFuIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuCisKKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLiBZb3UgbXVzdCBjYXVzZSBhbGwgR292ZXJuZWQgQ29kZSB0byB3aGljaCB5b3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBHb3Zlcm5lZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IFJTViBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIFJTViBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSBDb2RlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgR292ZXJuZWQgQ29kZS4KKworCiszLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzLgorCiszLjQuMS4gVGhpcmQgUGFydHkgQ2xhaW1zLiBJZiBZb3UgaGF2ZSBrbm93bGVkZ2UgdGhhdCBhIHBhcnR5IGNsYWltcyBhbiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgaW4gcGFydGljdWxhciBmdW5jdGlvbmFsaXR5IG9yIGNvZGUgKG9yIGl0cyB1dGlsaXphdGlvbiB1bmRlciB0aGlzIExpY2Vuc2UpLCB5b3UgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgIkxFR0FMIiB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIHlvdSBvYnRhaW4gc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgWW91IG1ha2UgWW91ciBNb2RpZmljYXRpb24gYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgWW91IHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIFlvdSBtYWtlIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBSU1YgYW5kIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIEdvdmVybmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLiBJbiB0aGUgZXZlbnQgdGhhdCBZb3UgYXJlIGEgQ29udHJpYnV0b3IsIFlvdSByZXByZXNlbnQgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBpbiB0aGUgTEVHQUwgZmlsZSwgeW91ciBNb2RpZmljYXRpb25zIGFyZSB5b3VyIG9yaWdpbmFsIGNyZWF0aW9ucyBhbmQsIHRvIHRoZSBiZXN0IG9mIHlvdXIga25vd2xlZGdlLCBubyB0aGlyZCBwYXJ0eSBoYXMgYW55IGNsYWltIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMpIHJlbGF0aW5nIHRvIHlvdXIgTW9kaWZpY2F0aW9ucy4gWW91IHJlcHJlc2VudCB0aGF0IHRoZSBMRUdBTCBmaWxlIGluY2x1ZGVzIGNvbXBsZXRlIGRldGFpbHMgb2YgYW55IGxpY2Vuc2Ugb3Igb3RoZXIgcmVzdHJpY3Rpb24gYXNzb2NpYXRlZCB3aXRoIGFueSBwYXJ0IG9mIHlvdXIgTW9kaWZpY2F0aW9ucy4KKworMy40LjIuIENvbnRyaWJ1dG9yIEFQSXMuIElmIFlvdXIgTW9kaWZpY2F0aW9uIGlzIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBhbmQgWW91IG93biBvciBjb250cm9sIHBhdGVudHMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgeW91IG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuCisKKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLiBZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSwgYW5kIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlLCB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIEdvdmVybmVkIENvZGUuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSwgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIHlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSBmaWxlKSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBHb3Zlcm5lZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiBSU1Ygb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbiBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgUlNWIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBSU1Ygb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCisKKworMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBDb2RlIFZlcnNpb25zLiBZb3UgbWF5IGRpc3RyaWJ1dGUgR292ZXJuZWQgQ29kZSBpbiBFeGVjdXRhYmxlIENvZGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgR292ZXJuZWQgQ29kZSwgYW5kIGlmIFlvdSBpbmNsdWRlIGEgcHJvbWluZW50IG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIEdvdmVybmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIENvZGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byB0aGUgR292ZXJuZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIENvZGUgdmVyc2lvbiBvZiBHb3Zlcm5lZCBDb2RlIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIENvZGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIENvZGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgUlNWIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgUlNWIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBSU1Ygb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuCisKKworMy43LiBMYXJnZXIgV29ya3MuIFlvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIEdvdmVybmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBHb3Zlcm5lZCBDb2RlLgorCisKKzQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGV0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBHb3Zlcm5lZCBDb2RlIGR1ZSB0byBzdGF0dXRlIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuCisKKworNS4gVHJhZGVtYXJrIFVzYWdlLgorCisKKworNS4xLiBBZHZlcnRpc2luZyBNYXRlcmlhbHMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhlIEdvdmVybmVkIENvZGUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OiAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBSaWNvaCBTaWxpY29uIFZhbGxleSwgSW5jLiIKKworCis1LjIuIEVuZG9yc2VtZW50cy4gVGhlIG5hbWVzICJSaWNvaCwiICJSaWNvaCBTaWxpY29uIFZhbGxleSwiIGFuZCAiUlNWIiBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBDb250cmlidXRvciBWZXJzaW9ucyBvciBMYXJnZXIgV29ya3Mgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIFJTVi4KKworCis1LjMuIFByb2R1Y3QgTmFtZXMuIENvbnRyaWJ1dG9yIFZlcnNpb25zIGFuZCBMYXJnZXIgV29ya3MgbWF5IG5vdCBiZSBjYWxsZWQgIlJpY29oIiBub3IgbWF5IHRoZSB3b3JkICJSaWNvaCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiBSU1YuCisKKworNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCisKKworCis2LjEuIE5ldyBWZXJzaW9ucy4gUlNWIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKworCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuIE9uY2UgR292ZXJuZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIEdvdmVybmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IFJTVi4gTm8gb25lIG90aGVyIHRoYW4gUlNWIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIEdvdmVybmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKworNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4KKworR09WRVJORUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBHT1ZFUk5FRCBDT0RFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBHT1ZFUk5FRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIEdPVkVSTkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBSU1YgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIEdPVkVSTkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKworCis4LiBUZXJtaW5hdGlvbi4KKworCisKKzguMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBHb3Zlcm5lZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKworCis4LjIuIElmIFlvdSBpbml0aWF0ZSBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24gYWdhaW5zdCBSU1Ygb3IgYSBDb250cmlidXRvciAoUlNWIG9yIHRoZSBDb250cmlidXRvciBhZ2FpbnN0IHdob20gWW91IGZpbGUgc3VjaCBhY3Rpb24gaXMgcmVmZXJyZWQgdG8gYXMgIlBhcnRpY2lwYW50IikgYWxsZWdpbmcgdGhhdDoKKworCisoYSkgc3VjaCBQYXJ0aWNpcGFudGBzIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZSBzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZSBmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LCB1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZiBub3RpY2UgWW91IGVpdGhlcjogKGkpIGFncmVlIGluIHdyaXRpbmcgdG8gcGF5IFBhcnRpY2lwYW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibGUgcm95YWx0eSBmb3IgWW91ciBwYXN0IGFuZCBmdXR1cmUgdXNlIG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHRoZSBDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMgb2Ygbm90aWNlLCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLgorCisoYikgYW55IHNvZnR3YXJlLCBoYXJkd2FyZSwgb3IgZGV2aWNlIHByb3ZpZGVkIHRvIFlvdSBieSB0aGUgUGFydGljaXBhbnQsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudGBzIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgVmVyc2lvbiwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xKGIpIGFuZCAyLjIoYikgYXJlIHJldm9rZWQgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIFlvdSBmaXJzdCBtYWRlLCB1c2VkLCBzb2xkLCBkaXN0cmlidXRlZCwgb3IgaGFkIG1hZGUsIE9yaWdpbmFsIENvZGUgb3IgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IFBhcnRpY2lwYW50LgorCisKKworOC4zLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50IGFsbGVnaW5nIHRoYXQgc3VjaCBQYXJ0aWNpcGFudGBzIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMgYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yIHNoYWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yIGxpY2Vuc2UuCisKKworOC40LiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKworOS4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCisKK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFJTViwgQU5ZIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgR09WRVJORUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBZT1UgT1IgQU5ZIE9USEVSIFBFUlNPTiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRIQVQgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLiBUTyBUSEUgRVhURU5UIFRIQVQgQU5ZIEVYQ0xVU0lPTiBPRiBEQU1BR0VTIEFCT1ZFIElTIE5PVCBWQUxJRCwgWU9VIEFHUkVFIFRIQVQgSU4gTk8gRVZFTlQgV0lMTCBSU1ZTIExJQUJJTElUWSBVTkRFUiBPUiBSRUxBVEVEIFRPIFRISVMgQUdSRUVNRU5UIEVYQ0VFRCBGSVZFIFRIT1VTQU5EIERPTExBUlMgKCQ1LDAwMCkuIFRIRSBHT1ZFUk5FRCBDT0RFIElTIE5PVCBJTlRFTkRFRCBGT1IgVVNFIElOIENPTk5FQ1RJT04gV0lUSCBBTlkgTlVDTEVSLCBBVklBVElPTiwgTUFTUyBUUkFOU0lUIE9SIE1FRElDQUwgQVBQTElDQVRJT04gT1IgQU5ZIE9USEVSIElOSEVSRU5UTFkgREFOR0VST1VTIEFQUExJQ0FUSU9OIFRIQVQgQ09VTEQgUkVTVUxUIElOIERFQVRILCBQRVJTT05BTCBJTkpVUlksIENBVEFTVFJPUEhJQyBEQU1BR0UgT1IgTUFTUyBERVNUUlVDVElPTiwgQU5EIFlPVSBBR1JFRSBUSEFUIE5FSVRIRVIgUlNWIE5PUiBBTlkgQ09OVFJJQlVUT1IgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIE9GIEFOWSBOQVRVUkUgQVMgQSBSRVNVTFQgT0YgQU5ZIFNVQ0ggVVNFIE9GIFRIRSBHT1ZFUk5FRCBDT0RFLgorCisKKzEwLiBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzLgorCitUaGUgR292ZXJuZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0sIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUiIGFuZCAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCIgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBHb3Zlcm5lZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKworCisxMS4gTWlzY2VsbGFuZW91cy4KKworVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBwcm92aXNpb25zIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBUaGUgcGFydGllcyBzdWJtaXQgdG8gcGVyc29uYWwganVyaXNkaWN0aW9uIGluIENhbGlmb3JuaWEgYW5kIGZ1cnRoZXIgYWdyZWUgdGhhdCBhbnkgY2F1c2Ugb2YgYWN0aW9uIGFyaXNpbmcgdW5kZXIgb3IgcmVsYXRlZCB0byB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBicm91Z2h0IGluIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEuIFRoZSBsb3NpbmcgcGFydHkgc2hhbGwgYmUgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXMgZmVlcyBhbmQgZXhwZW5zZXMuIE5vdHdpdGhzdGFuZGluZyBhbnl0aGluZyB0byB0aGUgY29udHJhcnkgaGVyZWluLCBSU1YgbWF5IHNlZWsgaW5qdW5jdGl2ZSByZWxpZWYgcmVsYXRlZCB0byBhIGJyZWFjaCBvZiB0aGlzIEFncmVlbWVudCBpbiBhbnkgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbi4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKworMTIuIFJlc3BvbnNpYmlsaXR5IGZvciBDbGFpbXMuCisKK0V4Y2VwdCBpbiBjYXNlcyB3aGVyZSBhbm90aGVyIENvbnRyaWJ1dG9yIGhhcyBmYWlsZWQgdG8gY29tcGx5IHdpdGggU2VjdGlvbiAzLjQsIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIFlvdXIgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgYmFzZWQgb24gdGhlIG51bWJlciBvZiBjb3BpZXMgb2YgR292ZXJuZWQgQ29kZSB5b3UgbWFkZSBhdmFpbGFibGUsIHRoZSByZXZlbnVlcyB5b3UgcmVjZWl2ZWQgZnJvbSB1dGlsaXppbmcgc3VjaCByaWdodHMsIGFuZCBvdGhlciByZWxldmFudCBmYWN0b3JzLiBZb3UgYWdyZWUgdG8gd29yayB3aXRoIGFmZmVjdGVkIHBhcnRpZXMgdG8gZGlzdHJpYnV0ZSByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuCisKKworCisgCisKK0VYSElCSVQgQQorCisiVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgUmljb2ggU291cmNlIENvZGUgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LnJpc291cmNlLm9yZy9SUEwKKworU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK1RoaXMgY29kZSB3YXMgaW5pdGlhbGx5IGRldmVsb3BlZCBieSBSaWNvaCBTaWxpY29uIFZhbGxleSwgSW5jLiBQb3J0aW9ucyBjcmVhdGVkIGJ5IFJpY29oIFNpbGljb24gVmFsbGV5LCBJbmMuIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SdWJ5IGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SdWJ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMmU1N2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1J1YnkKQEAgLTAsMCArMSw2MCBAQAorCitSdWJ5IGlzIGNvcHlyaWdodGVkIGZyZWUgc29mdHdhcmUgYnkgWXVraWhpcm8gTWF0c3Vtb3RvIDxtYXR6QG5ldGxhYi5jby5qcD4uCitZb3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIGVpdGhlciB0aGUgdGVybXMgb2YgdGhlIEdQTAorKHNlZSBDT1BZSU5HLnR4dCBmaWxlKSwgb3IgdGhlIGNvbmRpdGlvbnMgYmVsb3c6CisKKyAgMS4gWW91IG1heSBtYWtlIGFuZCBnaXZlIGF3YXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBzb3VyY2UgZm9ybSBvZiB0aGUKKyAgICAgc29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UgZHVwbGljYXRlIGFsbCBvZiB0aGUKKyAgICAgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZXMgYW5kIGFzc29jaWF0ZWQgZGlzY2xhaW1lcnMuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9mIHRoZSBzb2Z0d2FyZSBpbiBhbnkgd2F5LCBwcm92aWRlZCB0aGF0CisgICAgIHlvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICAgIGEpIHBsYWNlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgUHVibGljIERvbWFpbiBvciBvdGhlcndpc2UKKyAgICAgICAgICBtYWtlIHRoZW0gRnJlZWx5IEF2YWlsYWJsZSwgc3VjaCBhcyBieSBwb3N0aW5nIHNhaWQKKyAgIG1vZGlmaWNhdGlvbnMgdG8gVXNlbmV0IG9yIGFuIGVxdWl2YWxlbnQgbWVkaXVtLCBvciBieSBhbGxvd2luZworICAgdGhlIGF1dGhvciB0byBpbmNsdWRlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgc29mdHdhcmUuCisKKyAgICAgICBiKSB1c2UgdGhlIG1vZGlmaWVkIHNvZnR3YXJlIG9ubHkgd2l0aGluIHlvdXIgY29ycG9yYXRpb24gb3IKKyAgICAgICAgICBvcmdhbml6YXRpb24uCisKKyAgICAgICBjKSByZW5hbWUgYW55IG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBzbyB0aGUgbmFtZXMgZG8gbm90IGNvbmZsaWN0CisgICB3aXRoIHN0YW5kYXJkIGV4ZWN1dGFibGVzLCB3aGljaCBtdXN0IGFsc28gYmUgcHJvdmlkZWQuCisKKyAgICAgICBkKSBtYWtlIG90aGVyIGRpc3RyaWJ1dGlvbiBhcnJhbmdlbWVudHMgd2l0aCB0aGUgYXV0aG9yLgorCisgIDMuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgc29mdHdhcmUgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZQorICAgICBmb3JtLCBwcm92aWRlZCB0aGF0IHlvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICAgIGEpIGRpc3RyaWJ1dGUgdGhlIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJ5IGZpbGVzIG9mIHRoZSBzb2Z0d2FyZSwKKyAgIHRvZ2V0aGVyIHdpdGggaW5zdHJ1Y3Rpb25zIChpbiB0aGUgbWFudWFsIHBhZ2Ugb3IgZXF1aXZhbGVudCkKKyAgIG9uIHdoZXJlIHRvIGdldCB0aGUgb3JpZ2luYWwgZGlzdHJpYnV0aW9uLgorCisgICAgICAgYikgYWNjb21wYW55IHRoZSBkaXN0cmlidXRpb24gd2l0aCB0aGUgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2Ugb2YKKyAgIHRoZSBzb2Z0d2FyZS4KKworICAgICAgIGMpIGdpdmUgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIG5vbi1zdGFuZGFyZCBuYW1lcywgd2l0aAorICAgICAgICAgIGluc3RydWN0aW9ucyBvbiB3aGVyZSB0byBnZXQgdGhlIG9yaWdpbmFsIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbi4KKworICAgICAgIGQpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBhdXRob3IuCisKKyAgNC4gWW91IG1heSBtb2RpZnkgYW5kIGluY2x1ZGUgdGhlIHBhcnQgb2YgdGhlIHNvZnR3YXJlIGludG8gYW55IG90aGVyCisgICAgIHNvZnR3YXJlIChwb3NzaWJseSBjb21tZXJjaWFsKS4gIEJ1dCBzb21lIGZpbGVzIGluIHRoZSBkaXN0cmlidXRpb24KKyAgICAgYXJlIG5vdCB3cml0dGVuIGJ5IHRoZSBhdXRob3IsIHNvIHRoYXQgdGhleSBhcmUgbm90IHVuZGVyIHRoaXMgdGVybXMuCisKKyAgICAgVGhleSBhcmUgZ2MuYyhwYXJ0bHkpLCB1dGlscy5jKHBhcnRseSksIHJlZ2V4LltjaF0sIHN0LltjaF0gYW5kIHNvbWUKKyAgICAgZmlsZXMgdW5kZXIgdGhlIC4vbWlzc2luZyBkaXJlY3RvcnkuICBTZWUgZWFjaCBmaWxlIGZvciB0aGUgY29weWluZworICAgICBjb25kaXRpb24uCisKKyAgNS4gVGhlIHNjcmlwdHMgYW5kIGxpYnJhcnkgZmlsZXMgc3VwcGxpZWQgYXMgaW5wdXQgdG8gb3IgcHJvZHVjZWQgYXMgCisgICAgIG91dHB1dCBmcm9tIHRoZSBzb2Z0d2FyZSBkbyBub3QgYXV0b21hdGljYWxseSBmYWxsIHVuZGVyIHRoZQorICAgICBjb3B5cmlnaHQgb2YgdGhlIHNvZnR3YXJlLCBidXQgYmVsb25nIHRvIHdob21ldmVyIGdlbmVyYXRlZCB0aGVtLCAKKyAgICAgYW5kIG1heSBiZSBzb2xkIGNvbW1lcmNpYWxseSwgYW5kIG1heSBiZSBhZ2dyZWdhdGVkIHdpdGggdGhpcworICAgICBzb2Z0d2FyZS4KKworICA2LiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAgICAgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAgICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICAgICBQVVJQT1NFLgorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU0FYLVBEIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TQVgtUEQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFmZDExMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU0FYLVBECkBAIC0wLDAgKzEsMzMgQEAKKworQ29weXJpZ2h0IFN0YXR1cyBmb3IgU0FYCisKK1NBWCBpcyBmcmVlIQorCitJbiBmYWN0LCBpdGBzIG5vdCBwb3NzaWJsZSB0byBvd24gYSBsaWNlbnNlIHRvIFNBWCwgc2luY2UgaXRgcyBiZWVuIHBsYWNlZCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworTm8gV2FycmFudHkKKworQmVjYXVzZSBTQVggaXMgcmVsZWFzZWQgdG8gdGhlIHB1YmxpYyBkb21haW4sIHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgZGVzaWduIG9yIGZvciB0aGUgc29mdHdhcmUgaW1wbGVtZW50YXRpb24sIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LiBFeGNlcHQgd2hlbiBvdGhlcndpc2Ugc3RhdGVkIGluIHdyaXRpbmcgdGhlIGNvcHlyaWdodCBob2xkZXJzIGFuZC9vciBvdGhlciBwYXJ0aWVzIHByb3ZpZGUgU0FYICJhcyBpcyIgd2l0aG91dCB3YXJyYW50eSBvZiBhbnkga2luZCwgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiBUaGUgZW50aXJlIHJpc2sgYXMgdG8gdGhlIHF1YWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9mIFNBWCBpcyB3aXRoIHlvdS4gU2hvdWxkIFNBWCBwcm92ZSBkZWZlY3RpdmUsIHlvdSBhc3N1bWUgdGhlIGNvc3Qgb2YgYWxsIG5lY2Vzc2FyeSBzZXJ2aWNpbmcsIHJlcGFpciBvciBjb3JyZWN0aW9uLgorCitJbiBubyBldmVudCB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcgd2lsbCBhbnkgY29weXJpZ2h0IGhvbGRlciwgb3IgYW55IG90aGVyIHBhcnR5IHdobyBtYXkgbW9kaWZ5IGFuZC9vciByZWRpc3RyaWJ1dGUgU0FYLCBiZSBsaWFibGUgdG8geW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSBTQVggKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbG9zcyBvZiBkYXRhIG9yIGRhdGEgYmVpbmcgcmVuZGVyZWQgaW5hY2N1cmF0ZSBvciBsb3NzZXMgc3VzdGFpbmVkIGJ5IHlvdSBvciB0aGlyZCBwYXJ0aWVzIG9yIGEgZmFpbHVyZSBvZiB0aGUgU0FYIHRvIG9wZXJhdGUgd2l0aCBhbnkgb3RoZXIgcHJvZ3JhbXMpLCBldmVuIGlmIHN1Y2ggaG9sZGVyIG9yIG90aGVyIHBhcnR5IGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworQ29weXJpZ2h0IERpc2NsYWltZXJzCisKK1RoaXMgcGFnZSBpbmNsdWRlcyBzdGF0ZW1lbnRzIHRvIHRoYXQgZWZmZWN0IGJ5IERhdmlkIE1lZ2dpbnNvbiwgd2hvIHdvdWxkIGhhdmUgYmVlbiBhYmxlIHRvIGNsYWltIGNvcHlyaWdodCBmb3IgdGhlIG9yaWdpbmFsIHdvcmsuCisKK1NBWCAxLjAKKworVmVyc2lvbiAxLjAgb2YgdGhlIFNpbXBsZSBBUEkgZm9yIFhNTCAoU0FYKSwgY3JlYXRlZCBjb2xsZWN0aXZlbHkgYnkgdGhlIG1lbWJlcnNoaXAgb2YgdGhlIFhNTC1ERVYgbWFpbGluZyBsaXN0LCBpcyBoZXJlYnkgcmVsZWFzZWQgaW50byB0aGUgcHVibGljIGRvbWFpbi4KKworTm8gb25lIG93bnMgU0FYOiB5b3UgbWF5IHVzZSBpdCBmcmVlbHkgaW4gYm90aCBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGJ1bmRsZSBpdCB3aXRoIHlvdXIgc29mdHdhcmUgZGlzdHJpYnV0aW9uLCBpbmNsdWRlIGl0IG9uIGEgQ0QtUk9NLCBsaXN0IHRoZSBzb3VyY2UgY29kZSBpbiBhIGJvb2ssIG1pcnJvciB0aGUgZG9jdW1lbnRhdGlvbiBhdCB5b3VyIG93biB3ZWIgc2l0ZSwgb3IgdXNlIGl0IGluIGFueSBvdGhlciB3YXkgeW91IHNlZSBmaXQuCisKK0RhdmlkIE1lZ2dpbnNvbiwgTWVnZ2luc29uIFRlY2hub2xvZ2llcyBMdGQuCisxOTk4LTA1LTExCisKK1NBWCAyLjAKKworSSBoZXJlYnkgYWJhbmRvbiBhbnkgcHJvcGVydHkgcmlnaHRzIHRvIFNBWCAyLjAgKHRoZSBTaW1wbGUgQVBJIGZvciBYTUwpLCBhbmQgcmVsZWFzZSBhbGwgb2YgdGhlIFNBWCAyLjAgc291cmNlIGNvZGUsIGNvbXBpbGVkIGNvZGUsIGFuZCBkb2N1bWVudGF0aW9uIGNvbnRhaW5lZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbnRvIHRoZSBQdWJsaWMgRG9tYWluLiBTQVggY29tZXMgd2l0aCBOTyBXQVJSQU5UWSBvciBndWFyYW50ZWUgb2YgZml0bmVzcyBmb3IgYW55IHB1cnBvc2UuCisKK0RhdmlkIE1lZ2dpbnNvbiwgTWVnZ2luc29uIFRlY2hub2xvZ2llcyBMdGQuCisyMDAwLTA1LTA1CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU0dJLTEgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NHSS0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOTk4NTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NHSS0xCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAoYykgQ29weXJpZ2h0IDE5OTMsIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqIEFMTCBSSUdIVFMgUkVTRVJWRUQgCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciAKKyAqIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGUgY29weXJpZ2h0IG5vdGljZQorICogYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgCisgKiB0aGUgbmFtZSBvZiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nCisgKiBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsCisgKiB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIAorICoKKyAqIFRIRSBNQVRFUklBTCBFTUJPRElFRCBPTiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIFRPIFlPVSAiQVMtSVMiCisgKiBBTkQgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUywgSU1QTElFRCBPUiBPVEhFUldJU0UsCisgKiBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIElOIE5PIEVWRU5UIFNIQUxMIFNJTElDT04KKyAqIEdSQVBISUNTLCBJTkMuICBCRSBMSUFCTEUgVE8gWU9VIE9SIEFOWU9ORSBFTFNFIEZPUiBBTlkgRElSRUNULAorICogU1BFQ0lBTCwgSU5DSURFTlRBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWQorICogS0lORCwgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwKKyAqIExPU1MgT0YgUFJPRklULCBMT1NTIE9GIFVTRSwgU0FWSU5HUyBPUiBSRVZFTlVFLCBPUiBUSEUgQ0xBSU1TIE9GCisgKiBUSElSRCBQQVJUSUVTLCBXSEVUSEVSIE9SIE5PVCBTSUxJQ09OIEdSQVBISUNTLCBJTkMuICBIQVMgQkVFTgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBMT1NTLCBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisgKiBQT1NTRVNTSU9OLCBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqIAorICogVVMgR292ZXJubWVudCBVc2VycyBSZXN0cmljdGVkIFJpZ2h0cyAKKyAqIFVzZSwgZHVwbGljYXRpb24sIG9yIGRpc2Nsb3N1cmUgYnkgdGhlIEdvdmVybm1lbnQgaXMgc3ViamVjdCB0bworICogcmVzdHJpY3Rpb25zIHNldCBmb3J0aCBpbiBGQVIgNTIuMjI3LjE5KGMpKDIpIG9yIHN1YnBhcmFncmFwaAorICogKGMpKDEpKGlpKSBvZiB0aGUgUmlnaHRzIGluIFRlY2huaWNhbCBEYXRhIGFuZCBDb21wdXRlciBTb2Z0d2FyZQorICogY2xhdXNlIGF0IERGQVJTIDI1Mi4yMjctNzAxMyBhbmQvb3IgaW4gc2ltaWxhciBvciBzdWNjZXNzb3IKKyAqIGNsYXVzZXMgaW4gdGhlIEZBUiBvciB0aGUgRE9EIG9yIE5BU0EgRkFSIFN1cHBsZW1lbnQuCisgKiBVbnB1Ymxpc2hlZC0tIHJpZ2h0cyByZXNlcnZlZCB1bmRlciB0aGUgY29weXJpZ2h0IGxhd3Mgb2YgdGhlCisgKiBVbml0ZWQgU3RhdGVzLiAgQ29udHJhY3Rvci9tYW51ZmFjdHVyZXIgaXMgU2lsaWNvbiBHcmFwaGljcywKKyAqIEluYy4sIDIwMTEgTi4gIFNob3JlbGluZSBCbHZkLiwgTW91bnRhaW4gVmlldywgQ0EgOTQwMzktNzMxMS4KKyAqCisgKiBPcGVuR0woVE0pIGlzIGEgdHJhZGVtYXJrIG9mIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TTUFJTF9HUEwgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NNQUlMX0dQTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmMzZmQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TTUFJTF9HUEwKQEAgLTAsMCArMSwxNjQgQEAKK1RoaXMgaXMgdGhlIERlYmlhbiBHTlUvTGludXggcGFja2FnZSBkZWJpYW51dGlscy4KKworSXQgaXMgYW4gb3JpZ2luYWwgRGViaWFuIHBhY2thZ2UuICBQcm9ncmFtcyBpbiBpdCB3ZXJlIG1haW50YWluZWQgYnkKK0d1eSBNYW9yIDxtYW9yQGRlYmlhbi5vcmc+LCBhbmQgYXJlIG5vdyBtYWludGFpbmVkIGJ5IENsaW50IEFkYW1zCis8c2NoaXpvQGRlYmlhbi5vcmc+LgorCitBbGwgaXRzIHByb2dyYW1zIGV4Y2VwdCByZWFkbGluaywgc2F2ZWxvZywgYW5kIHdoaWNoIG1heSBiZQorcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwsIFZlcnNpb24gMiBvciBsYXRlciwKK2ZvdW5kIG9uIERlYmlhbiBzeXN0ZW1zIGluIHRoZSBmaWxlIC91c3Ivc2hhcmUvY29tbW9uLWxpY2Vuc2VzL0dQTC4KKword2hpY2ggaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisKK3JlYWRsaW5rIGlzIENvcHlyaWdodCAoYykgMTk5NyBLZW5uZXRoIFN0YWlsZXksIGFuZCBtYXkgYWxzbyBiZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBCU0QgY29weXJpZ2h0LgorCitzYXZlbG9nIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBmb2xsb3dpbmcgdGVybXM6IChUaGUgcmVzdCBvZgordGhpcyBmaWxlIGNvbnNpc3RzIG9mIHNhdmVsb2cncyBkaXN0cmlidXRpb24gdGVybXMuKQorCisjaWRlbnQJIkAoIylzbWFpbDpSRUxFQVNFLTNfMjpDT1BZSU5HLHYgMS4yIDE5OTYvMDYvMTQgMTg6NTk6MTAgd29vZHMgRXhwIgorCisJCSAgICAgU01BSUwgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgKENsYXJpZmllZCAxMSBGZWIgMTk4OCkKKworIENvcHlyaWdodCAoQykgIDE5ODggTGFuZG9uIEN1cnQgTm9sbCAmIFJvbmFsZCBTLiBLYXJyCisgQ29weXJpZ2h0IChDKSAgMTk5MiBSb25hbGQgUy4gS2FycgorIENvcHlsZWZ0IChHTlUpIDE5ODggTGFuZG9uIEN1cnQgTm9sbCAmIFJvbmFsZCBTLiBLYXJyCisKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4gIFlvdSBjYW4gYWxzbworIHVzZSB0aGlzIHdvcmRpbmcgdG8gbWFrZSB0aGUgdGVybXMgZm9yIG90aGVyIHByb2dyYW1zLgorCisgIFRoZSBsaWNlbnNlIGFncmVlbWVudHMgb2YgbW9zdCBzb2Z0d2FyZSBjb21wYW5pZXMga2VlcCB5b3UgYXQgdGhlCittZXJjeSBvZiB0aG9zZSBjb21wYW5pZXMuICBCeSBjb250cmFzdCwgb3VyIGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgaXMKK2ludGVuZGVkIHRvIGdpdmUgZXZlcnlvbmUgdGhlIHJpZ2h0IHRvIHNoYXJlIFNNQUlMLiAgVG8gbWFrZSBzdXJlIHRoYXQKK3lvdSBnZXQgdGhlIHJpZ2h0cyB3ZSB3YW50IHlvdSB0byBoYXZlLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zCit0aGF0IGZvcmJpZCBhbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyCit0aGUgcmlnaHRzLiAgSGVuY2UgdGhpcyBsaWNlbnNlIGFncmVlbWVudC4KKworICBTcGVjaWZpY2FsbHksIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIHJpZ2h0IHRvIGdpdmUKK2F3YXkgY29waWVzIG9mIFNNQUlMLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGVsc2UgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgU01BSUwgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcKK2ZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIG1ha2Ugc3VyZSB0aGF0IGV2ZXJ5b25lIGhhcyBzdWNoIHJpZ2h0cywgd2UgaGF2ZSB0byBmb3JiaWQgeW91IHRvCitkZXByaXZlIGFueW9uZSBlbHNlIG9mIHRoZXNlIHJpZ2h0cy4gIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZQorY29waWVzIG9mIFNNQUlMLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgeW91CitoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCB0ZWxsIHRoZW0gdGhlaXIgcmlnaHRzLgorCisgIEFsc28sIGZvciBvdXIgb3duIHByb3RlY3Rpb24sIHdlIG11c3QgbWFrZSBjZXJ0YWluIHRoYXQgZXZlcnlvbmUKK2ZpbmRzIG91dCB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciBTTUFJTC4gIElmIFNNQUlMIGlzIG1vZGlmaWVkIGJ5Citzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2Ugd2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdAordGhleSBoYXZlIGlzIG5vdCB3aGF0IHdlIGRpc3RyaWJ1dGVkLCBzbyB0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkCitieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiBvdXIgcmVwdXRhdGlvbi4KKworICBUaGVyZWZvcmUgd2UgKExhbmRvbiBDdXJ0IE5vbGwgYW5kIFJvbmFsZCBTLiBLYXJyKSBtYWtlIHRoZSBmb2xsb3dpbmcgCit0ZXJtcyB3aGljaCBzYXkgd2hhdCB5b3UgbXVzdCBkbyB0byBiZSBhbGxvd2VkIHRvIGRpc3RyaWJ1dGUgb3IgY2hhbmdlIAorU01BSUwuCisKKworCQkJQ09QWUlORyBQT0xJQ0lFUworCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgU01BSUwgc291cmNlIGNvZGUKK2FzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAorYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhIHZhbGlkIGNvcHlyaWdodCBub3RpY2UgIkNvcHlyaWdodAorKEMpIDE5ODggTGFuZG9uIEN1cnQgTm9sbCAmIFJvbmFsZCBTLiBLYXJyIiAob3Igd2l0aCB3aGF0ZXZlciB5ZWFyIGlzCithcHByb3ByaWF0ZSk7IGtlZXAgaW50YWN0IHRoZSBub3RpY2VzIG9uIGFsbCBmaWxlcyB0aGF0IHJlZmVyIHRvIHRoaXMKK0xpY2Vuc2UgQWdyZWVtZW50IGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFueQorb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgU01BSUwgcHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCitBZ3JlZW1lbnQgYWxvbmcgd2l0aCB0aGUgcHJvZ3JhbS4gIFlvdSBtYXkgY2hhcmdlIGEgZGlzdHJpYnV0aW9uIGZlZQorZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIFNNQUlMIG9yIGFueSBwb3J0aW9uIG9mIGl0LAorYW5kIGNvcHkgYW5kIGRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIHVuZGVyIHRoZSB0ZXJtcyBvZgorUGFyYWdyYXBoIDEgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gdGhlIGZvbGxvd2luZzoKKworICAgIGEpIGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nCisgICAgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2U7IGFuZAorCisgICAgYikgY2F1c2UgdGhlIHdob2xlIG9mIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwKKyAgICB0aGF0IGluIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgYSBkZXJpdmF0aXZlIG9mIFNNQUlMIG9yCisgICAgYW55IHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgb24gdGVybXMgaWRlbnRpY2FsIHRvIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2UKKyAgICBBZ3JlZW1lbnQgKGV4Y2VwdCB0aGF0IHlvdSBtYXkgY2hvb3NlIHRvIGdyYW50IG1vcmUgZXh0ZW5zaXZlCisgICAgd2FycmFudHkgcHJvdGVjdGlvbiB0byBzb21lIG9yIGFsbCB0aGlyZCBwYXJ0aWVzLCBhdCB5b3VyIG9wdGlvbikuCisKKyAgICBjKSBZb3UgbWF5IGNoYXJnZSBhIGRpc3RyaWJ1dGlvbiBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YKKyAgICB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eQorICAgIHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCitNZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgdW5yZWxhdGVkIHByb2dyYW0gd2l0aCB0aGlzIHByb2dyYW0gKG9yIGl0cworZGVyaXZhdGl2ZSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcKK3RoZSBvdGhlciBwcm9ncmFtIHVuZGVyIHRoZSBzY29wZSBvZiB0aGVzZSB0ZXJtcy4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgU01BSUwgKG9yIGEgcG9ydGlvbiBvciBkZXJpdmF0aXZlIG9mIGl0LAordW5kZXIgUGFyYWdyYXBoIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1BhcmFncmFwaHMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgYWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICAgIFBhcmFncmFwaHMgMSBhbmQgMiBhYm92ZTsgb3IsCisKKyAgICBiKSBhY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSBmcmVlIChleGNlcHQgZm9yIGEgbm9taW5hbAorICAgIHNoaXBwaW5nIGNoYXJnZSkgYSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlCisgICAgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgICAgUGFyYWdyYXBocyAxIGFuZCAyIGFib3ZlOyBvciwKKworICAgIGMpIGFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gd2hlcmUgdGhlCisgICAgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uLWNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSBhbG9uZS4pCisKK0ZvciBhbiBleGVjdXRhYmxlIGZpbGUsIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yCithbGwgbW9kdWxlcyBpdCBjb250YWluczsgYnV0LCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpdCBuZWVkIG5vdCBpbmNsdWRlCitzb3VyY2UgY29kZSBmb3IgbW9kdWxlcyB3aGljaCBhcmUgc3RhbmRhcmQgbGlicmFyaWVzIHRoYXQgYWNjb21wYW55IHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBmaWxlIHJ1bnMuCisKKyAgNC4gWW91IG1heSBub3QgY29weSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBvciB0cmFuc2ZlciBTTUFJTAorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBzdWJsaWNlbnNlLCBkaXN0cmlidXRlIG9yIHRyYW5zZmVyIFNNQUlMIGlzIHZvaWQgYW5kCit5b3VyIHJpZ2h0cyB0byB1c2UgdGhlIHByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlIGFncmVlbWVudCBzaGFsbCBiZQorYXV0b21hdGljYWxseSB0ZXJtaW5hdGVkLiAgSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb21wdXRlcgorc29mdHdhcmUgcHJvZ3JhbXMgZnJvbSB5b3Ugd2l0aCB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgbm90IGhhdmUKK3RoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiBTTUFJTCBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIExhbmRvbgorQ3VydCBOb2xsICYgUm9uYWxkIFMuIEthcnIgdmlhIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gYXQgNTEKK0ZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICBXZSBoYXZlIG5vdCB5ZXQKK3dvcmtlZCBvdXQgYSBzaW1wbGUgcnVsZSB0aGF0IGNhbiBiZSBzdGF0ZWQgaGVyZSwgYnV0IHdlIHdpbGwgb2Z0ZW4KK3Blcm1pdCB0aGlzLiAgV2Ugd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZQorZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcKK3RoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZS4KKworWW91ciBjb21tZW50cyBhbmQgc3VnZ2VzdGlvbnMgYWJvdXQgb3VyIGxpY2Vuc2luZyBwb2xpY2llcyBhbmQgb3VyCitzb2Z0d2FyZSBhcmUgd2VsY29tZSEgIFRoaXMgY29udHJhY3Qgd2FzIGJhc2VkIG9uIHRoZSBjb250cmFjdCBtYWRlIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgUGxlYXNlIGNvbnRhY3QgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorVVNBLCBvciBjYWxsICg2MTcpIDU0Mi01OTQyIGZvciBkZXRhaWxzIG9uIGNvcHlsZWZ0ZWQgbWF0ZXJpYWwgaW4KK2dlbmVyYWwuCisKKwkJICAgICAgIE5PIFdBUlJBTlRZCisKKyAgQkVDQVVTRSBTTUFJTCBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgV0UgUFJPVklERSBBQlNPTFVURUxZIE5PCitXQVJSQU5UWSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBTVEFURSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HLCBMQU5ET04gQ1VSVCBOT0xMICYgUk9OQUxEIFMuIEtBUlIgQU5EL09SCitPVEhFUiBQQVJUSUVTIFBST1ZJREUgU01BSUwgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KK1RIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgU01BSUwgSVMgV0lUSAorWU9VLiAgU0hPVUxEIFNNQUlMIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwKK05FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBXSUxMIExBTkRPTiBDVVJUIE5PTEwgJgorUk9OQUxEIFMuIEtBUlIgQU5EL09SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQgUkVESVNUUklCVVRFCitTTUFJTCBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkKK0xPU1QgUFJPRklUUywgTE9TVCBNT05JRVMsIE9SIE9USEVSIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UKKyhJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVECitJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFCitQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpIFNNQUlMLCBFVkVOIElGIFlPVSBIQVZFCitCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUywgT1IgRk9SIEFOWSBDTEFJTSBCWQorQU5ZIE9USEVSIFBBUlRZLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TUEwtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NDhiMzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NQTC0xLjAKQEAgLTAsMCArMSw1MDcgQEAKKworU1VOIFBVQkxJQyBMSUNFTlNFIFZlcnNpb24gMS4wCisKKzEuIERlZmluaXRpb25zLgorCisxLjAuMS4gIkNvbW1lcmNpYWwgVXNlIiBtZWFucyBkaXN0cmlidXRpb24gb3Igb3RoZXJ3aXNlIG1ha2luZyB0aGUKK0NvdmVyZWQgQ29kZSBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eS4KKworMS4xLiAiQ29udHJpYnV0b3IiIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0bwordGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMi4gIkNvbnRyaWJ1dG9yIFZlcnNpb24iIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwKK3ByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZQorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorCisxLjMuICJDb3ZlcmVkIENvZGUiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlCitjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlCitpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZiBhbmQgY29ycmVzcG9uZGluZyBkb2N1bWVudGF0aW9uIHJlbGVhc2VkCit3aXRoIHRoZSBzb3VyY2UgY29kZS4KKworMS40LiAiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIiBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkKK2FjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljCit0cmFuc2ZlciBvZiBkYXRhLgorCisxLjUuICJFeGVjdXRhYmxlIiBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UKK0NvZGUuCisKKzEuNi4gIkluaXRpYWwgRGV2ZWxvcGVyIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcwordGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdAorQS4KKworMS43LiAiTGFyZ2VyIFdvcmsiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IKK3BvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZS4KKworMS44LiAiTGljZW5zZSIgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworMS44LjEuICJMaWNlbnNhYmxlIiBtZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bQorZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yCitzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgorCisxLjkuICJNb2RpZmljYXRpb25zIiBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUKK3N1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cworTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEKK01vZGlmaWNhdGlvbiBpczoKKworQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nCitPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKK0IuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yCitwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCisxLjEwLiAiT3JpZ2luYWwgQ29kZSIuLi8gbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZQord2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzCitPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMKK0xpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKworMS4xMC4xLiAiUGF0ZW50IENsYWltcyIgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yCitoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kCithcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci4KKworMS4xMS4gIlNvdXJjZSBDb2RlIi4uLyBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZQorZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzCithbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkCit0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3Igc291cmNlCitjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvcgorYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcmBzCitjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sCitwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMKK3dpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKworMS4xMi4gIllvdSIgKG9yICJZb3VyIikgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eQorZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzCitMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4KK0ZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMKK2NvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YKK3RoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiLi4vIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwKK3RvCitjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3QKK29yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUKK291dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4gU291cmNlIENvZGUgTGljZW5zZS4KKworMi4xIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KKworVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLAorbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eQorY2xhaW1zOgorCisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IKK3RyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LAorZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IKK3BvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhCitMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZyBvciBzZWxsaW5nIG9mCitPcmlnaW5hbCBDb2RlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsIHNlbGwsIGFuZCBvZmZlciBmb3IKK3NhbGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMKK3RoZXJlb2YpLgorCisoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gdGhpcyBTZWN0aW9uIDIuMShhKSBhbmQgKGIpIGFyZSBlZmZlY3RpdmUKK29uIHRoZSBkYXRlIEluaXRpYWwgRGV2ZWxvcGVyIGZpcnN0IGRpc3RyaWJ1dGVzIE9yaWdpbmFsIENvZGUgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyhkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjEoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzCitncmFudGVkOiAxKSBmb3IgY29kZSB0aGF0IFlvdSBkZWxldGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgMikKK3NlcGFyYXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IG9yIDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZAorYnk6CisKK2kpIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgaWkpIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUKK09yaWdpbmFsIENvZGUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBkZXZpY2VzLgorCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorCitTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IKK2hlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UKKworKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50CitvcgordHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IENvbnRyaWJ1dG9yLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LAorZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkCitieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZAorYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBDb2RlIGFuZC9vciBhcyBwYXJ0IG9mIGEKK0xhcmdlciBXb3JrOyBhbmQKKworYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgb2YKK01vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IgaW4KK2NvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2gKK2NvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3IKK290aGVyd2lzZSBkaXNwb3NlIG9mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciAob3IKK3BvcnRpb25zIHRoZXJlb2YpOyBhbmQgMikgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieQordGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoCitjb21iaW5hdGlvbikuCisKKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUgZWZmZWN0aXZlCitvbiB0aGUgZGF0ZSBDb250cmlidXRvciBmaXJzdCBtYWtlcyBDb21tZXJjaWFsIFVzZSBvZiB0aGUgQ292ZXJlZAorQ29kZS4KKworKGQpIG5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMihiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMKK2dyYW50ZWQ6IDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlCitDb250cmlidXRvciBWZXJzaW9uOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAzKSBmb3IKK2luZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGlyZCBwYXJ0eSBtb2RpZmljYXRpb25zIG9mIENvbnRyaWJ1dG9yCitWZXJzaW9uIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvcgorVmVyc2lvbikgb3Igb3RoZXIgZGV2aWNlczsgb3IgNCkgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkKK0NvdmVyZWQgQ29kZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdAorQ29udHJpYnV0b3IuCisKKzMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy4KKworMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLgorCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZQorZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUKK2Rpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uCitvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEKK2NvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91CitkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZQordmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzCitMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUKK2FuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbgorU2VjdGlvbiAzLjUuCisKKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZQorbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlCitlaXRoZXIgb24gdGhlIHNhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZAorRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuCitFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMKK0Rpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikKK21vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4CisoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24KK2hhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IKK2Vuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUKK0VsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuCisKKzMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEKK2ZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZAordGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdAordGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsCitDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuCitFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUKK29yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycy4KKworKGEpIFRoaXJkIFBhcnR5IENsYWltcy4KKworSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5YHMKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cworZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsIENvbnRyaWJ1dG9yCittdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlIENvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZAorIi4uL0xFR0FMYGAgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4KK3N1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYKK0NvbnRyaWJ1dG9yIG9idGFpbnMgc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgdGhlIE1vZGlmaWNhdGlvbiBpcyBtYWRlCithdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseQorbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlCit0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZQorbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobworcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuCisKKyhiKSBDb250cmlidXRvciBBUElzLgorCitJZiBDb250cmlidXRvcmBzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZworaW50ZXJmYWNlICgiQVBJIi4uLykgYW5kIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzCit3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0CithbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS4KKworKGMpIFJlcHJlc2VudGF0aW9ucy4KKworQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIFNlY3Rpb24KKzMuNChhKSBhYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcmBzIE1vZGlmaWNhdGlvbnMKK2FyZSBDb250cmlidXRvcmBzIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vciBDb250cmlidXRvciBoYXMKK3N1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcworTGljZW5zZQorCisuCisKKzMuNS4gUmVxdWlyZWQgTm90aWNlcy4KKworWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlCitDb2RlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UKK0NvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEKK2xvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5Cit0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykKK1lvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluCitFeGhpYml0IEEuIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbgorZm9yIHRoZSBTb3VyY2UgQ29kZSB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIG9yIG93bmVyc2hpcAorcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0bworY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkKK29ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UKK21heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwKK0RldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuCithbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzCitvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsCitEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwKK3N1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorCitZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZQorcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZSwKK2FuZCBpZiBZb3UgaW5jbHVkZSBhIG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YKK3RoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsCitpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdSBoYXZlIGZ1bGZpbGxlZCB0aGUKK29ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSBpbmNsdWRlZAoraW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvcgorY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZQorQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkCitDb2RlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkKK2NvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4KK2NvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUKK0V4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcworcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcworTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudAorbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyCitmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlCitJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkKK3RoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoCit0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNy4gTGFyZ2VyIFdvcmtzLgorCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlcgorY29kZQorbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlcgorV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZQorcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLgorCis0LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uCisKK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvCitzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGgKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpCitkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uCittdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdAorYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUKK2V4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlCitzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8KK3VuZGVyc3RhbmQgaXQuCisKKzUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzCithdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCisKKzYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLgorCis2LjEuIE5ldyBWZXJzaW9ucy4KKworU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiAoIlN1biIpIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEKK2Rpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCisKK09uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZgordGhlCitMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQKK3ZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcworb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgU3VuLiBObyBvbmUKK290aGVyIHRoYW4gU3VuIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQKK0NvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy4KKworSWYgWW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91CittYXkKK29ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUKK2dvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIFlvdSBtdXN0OiAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0Cit0aGUgcGhyYXNlcyAiU3VuLCIgIlN1biBQdWJsaWMgTGljZW5zZSwiIG9yICJTUEwiLi4vIG9yIGFueSBjb25mdXNpbmdseQorc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91cgorbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyCit0aGF0IFlvdXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSBjb250YWlucyB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGUKK1N1biBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLAorT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBpbiB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEKK3NoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMKK0xpY2Vuc2UuKQorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICIuLi9BUyBJU2BgIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBDT0RFIElTIEZSRUUgT0YKK0RFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4KK1RIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERQorSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRCBDT0RFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwKK1lPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUKK0NPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIKK09GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GCitBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTCitESVNDTEFJTUVSLgorCis4LiBURVJNSU5BVElPTi4KKworOC4xLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUKK2F1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUKK3N1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbAorc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbAorc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpcgorbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UKK3NoYWxsIHN1cnZpdmUuCisKKzguMi4gSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50IGluZnJpbmdlbWVudAorY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXJhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyCitvciBhIENvbnRyaWJ1dG9yICh0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tCitZb3UgZmlsZSBzdWNoIGFjdGlvbiBpcyByZWZlcnJlZCB0byBhcyAiUGFydGljaXBhbnQiKSBhbGxlZ2luZwordGhhdDoKKworKGEpIHN1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkKK2luZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2gKK1BhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2UKK3NoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHksCit1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZiBub3RpY2UgWW91IGVpdGhlcjogKGkpCithZ3JlZSBpbiB3cml0aW5nIHRvIHBheSBQYXJ0aWNpcGFudCBhIG11dHVhbGx5IGFncmVlYWJsZSByZWFzb25hYmxlCityb3lhbHR5IGZvciBZb3VyIHBhc3QgYW5kIGZ1dHVyZSB1c2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2gKK1BhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8KK3RoZSBDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMKK29mIG5vdGljZSwgYSByZWFzb25hYmxlIHJveWFsdHkgYW5kIHBheW1lbnQgYXJyYW5nZW1lbnQgYXJlIG5vdAorbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbQoraXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlcgorU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgYXQgdGhlIGV4cGlyYXRpb24gb2YKK3RoZSA2MCBkYXkgbm90aWNlIHBlcmlvZCBzcGVjaWZpZWQgYWJvdmUuCisKKyhiKSBhbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudGBzCitDb250cmlidXRvciBWZXJzaW9uLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuCithbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xKGIpCithbmQgMi4yKGIpIGFyZSByZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwKK3NvbGQsIGRpc3RyaWJ1dGVkLCBvciBoYWQgbWFkZSwgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQKK1BhcnRpY2lwYW50LgorCis4LjMuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQKK2FsbGVnaW5nIHRoYXQgc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IKK2luZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcworYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcworZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIgc2hhbGwgYmUgdGFrZW4KK2ludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yCitsaWNlbnNlLgorCis4LjQuIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLAorYWxsCitlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykKK3doaWNoIGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIKK3ByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTAorREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsCitPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SCitBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkKK0NIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwKK1dPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSCitDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOCitJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YKK0xJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkKK1JFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcKK1BST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFCitFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08KK1RISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCisxMC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy4KKworVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0sIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbgorNDgKK0MuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSIKK2FuZCAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCIuLi8gYXMgc3VjaCB0ZXJtcyBhcmUKK3VzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4KKzEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwKK1UuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cworc2V0IGZvcnRoIGhlcmVpbi4KKworMTEuIE1JU0NFTExBTkVPVVMuCisKK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0CittYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlCit1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQKK25lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkKK0NhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZgorYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLgorV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZSBwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsCitvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4gdGhlIFVuaXRlZAorU3RhdGVzIG9mIEFtZXJpY2EsIGFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCBiZQorc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4KK0Rpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LAorQ2FsaWZvcm5pYSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nCit3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5c2AgZmVlcyBhbmQKK2V4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24KK0NvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuCitBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdAorc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMKK0xpY2Vuc2UuCisKKzEyLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLgorCitBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzCityZXNwb25zaWJsZSBmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksCitvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0bword29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoCityZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yCitzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KKworMTMuIE1VTFRJUExFLUxJQ0VOU0VEIENPREUuCisKK0luaXRpYWwgRGV2ZWxvcGVyIG1heSBkZXNpZ25hdGUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBhcworP011bHRpcGxlLUxpY2Vuc2VkPy4gP011bHRpcGxlLUxpY2Vuc2VkPyBtZWFucyB0aGF0IHRoZSBJbml0aWFsCitEZXZlbG9wZXIgcGVybWl0cyB5b3UgdG8gdXRpbGl6ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIHVuZGVyCitZb3VyIGNob2ljZSBvZiB0aGUgYWx0ZXJuYXRpdmUgbGljZW5zZXMsIGlmIGFueSwgc3BlY2lmaWVkIGJ5IHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIGZpbGUgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4KKworRXhoaWJpdCBBIC1TdW4gUHVibGljIExpY2Vuc2UgTm90aWNlLgorCitUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBTdW4gUHVibGljIExpY2Vuc2UKKworVmVyc2lvbiAxLjAgKHRoZSBMaWNlbnNlKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4KKworY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgYXZhaWxhYmxlIGF0CisKK2h0dHA6Ly93d3cuc3VuLmNvbS8KKworVGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX18uIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUKKworT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fXy4gUG9ydGlvbnMgY3JlYXRlZCBieSBfX19fX18gYXJlIENvcHlyaWdodAorCisoQylfX19fX19fX18uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK0NvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4KKworQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMKKworb2YgdGhlIF9fX19fIGxpY2Vuc2UgKHRoZSA/W19fX10gTGljZW5zZT8pLCBpbiB3aGljaCBjYXNlIHRoZQorCitwcm92aXNpb25zIG9mIFtfX19fX19dIExpY2Vuc2UgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBhYm92ZS4KKworSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUKKwordGVybXMgb2YgdGhlIFtfX19fXSBMaWNlbnNlIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyCisKK3ZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBTUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkgZGVsZXRpbmcKKwordGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kIG90aGVyCisKK3Byb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIFtfX19dIExpY2Vuc2UuIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZQorCitwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKworZWl0aGVyIHRoZSBTUEwgb3IgdGhlIFtfX19dIExpY2Vuc2UuCitbTk9URTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmcm9tIHRoZSB0ZXh0IG9mCisKK3RoZSBub3RpY2VzIGluIHRoZSBTb3VyY2UgQ29kZSBmaWxlcyBvZiB0aGUgT3JpZ2luYWwgQ29kZS4gWW91IHNob3VsZAorCit1c2UgdGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgcmF0aGVyIHRoYW4gdGhlIHRleHQgZm91bmQgaW4gdGhlCisKK09yaWdpbmFsIENvZGUgU291cmNlIENvZGUgZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy5dCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU2ltcGxlLTIuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU2ltcGxlLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjgzNTdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TaW1wbGUtMi4wCkBAIC0wLDAgKzEsMjcgQEAKKworU2ltcGxlIFB1YmxpYyBMaWNlbnNlIChTaW1QTCkKKworUHJlYW1ibGUKK1RoaXMgU2ltcGxlIFB1YmxpYyBMaWNlbnNlIDIuMCAoU2ltUEwgMi4wIGZvciBzaG9ydCkgaXMgYSBwbGFpbiBsYW5ndWFnZSBpbXBsZW1lbnRhdGlvbiBvZiBHUEwgMi4wLiAgVGhlIHdvcmRzIGFyZSBkaWZmZXJlbnQsIGJ1dCB0aGUgZ29hbCBpcyB0aGUgc2FtZSAtIHRvIGd1YXJhbnRlZSBmb3IgYWxsIHVzZXJzIHRoZSBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2Ugc29mdHdhcmUuICBJZiBhbnlvbmUgd29uZGVycyBhYm91dCB0aGUgbWVhbmluZyBvZiB0aGUgU2ltUEwsIHRoZXkgc2hvdWxkIGludGVycHJldCBpdCBhcyBjb25zaXN0ZW50IHdpdGggR1BMIDIuMC4KK1NpbXBsZSBQdWJsaWMgTGljZW5zZSAoU2ltUEwpIDIuMAorVGhlIFNpbVBMIGFwcGxpZXMgdG8gdGhlIHNvZnR3YXJlYHMgc291cmNlIGFuZCBvYmplY3QgY29kZSBhbmQgY29tZXMgd2l0aCBhbnkgcmlnaHRzIHRoYXQgSSBoYXZlIGluIGl0IChvdGhlciB0aGFuIHRyYWRlbWFya3MpLiBZb3UgYWdyZWUgdG8gdGhlIFNpbVBMIGJ5IGNvcHlpbmcsIGRpc3RyaWJ1dGluZywgb3IgbWFraW5nIGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBzb2Z0d2FyZS4KKworWW91IGdldCB0aGUgcm95YWx0eSBmcmVlIHJpZ2h0IHRvOgorVXNlIHRoZSBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2U7CitNYWtlIGRlcml2YXRpdmUgd29ya3Mgb2YgaXQgKHRoaXMgaXMgY2FsbGVkIGEgIkRlcml2ZWQgV29yayIpOworQ29weSBhbmQgZGlzdHJpYnV0ZSBpdCBhbmQgYW55IERlcml2ZWQgV29yay4KK0lmIHlvdSBkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZSBvciBhIERlcml2ZWQgV29yaywgeW91IG11c3QgZ2l2ZSBiYWNrIHRvIHRoZSBjb21tdW5pdHkgYnk6CitQcm9taW5lbnRseSBub3RpbmcgdGhlIGRhdGUgb2YgYW55IGNoYW5nZXMgeW91IG1ha2U7CitMZWF2aW5nIG90aGVyIHBlb3BsZWBzIGNvcHlyaWdodCBub3RpY2VzLCB3YXJyYW50eSBkaXNjbGFpbWVycywgYW5kIGxpY2Vuc2UgdGVybXMgIGluIHBsYWNlOworUHJvdmlkaW5nIHRoZSBzb3VyY2UgY29kZSwgYnVpbGQgc2NyaXB0cywgaW5zdGFsbGF0aW9uIHNjcmlwdHMsIGFuZCBpbnRlcmZhY2UgZGVmaW5pdGlvbnMgaW4gYSBmb3JtIHRoYXQgaXMgZWFzeSB0byBnZXQgYW5kIGJlc3QgdG8gbW9kaWZ5OworTGljZW5zaW5nIGl0IHRvIGV2ZXJ5b25lIHVuZGVyIFNpbVBMLCBvciBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdGVybXMgKHN1Y2ggYXMgR1BMIDIuMCksIHdpdGhvdXQgYWRkaW5nIGZ1cnRoZXIgcmVzdHJpY3Rpb25zIHRvIHRoZSByaWdodHMgcHJvdmlkZWQ7CitDb25zcGljdW91c2x5IGFubm91bmNpbmcgdGhhdCBpdCBpcyBhdmFpbGFibGUgdW5kZXIgdGhhdCBsaWNlbnNlLgorVGhlcmUgYXJlIHNvbWUgdGhpbmdzIHRoYXQgeW91IG11c3Qgc2hvdWxkZXI6CitZb3UgZ2V0IE5PIFdBUlJBTlRJRVMuIE5vbmUgb2YgYW55IGtpbmQ7CitJZiB0aGUgc29mdHdhcmUgZGFtYWdlcyB5b3UgaW4gYW55IHdheSwgeW91IG1heSBvbmx5IHJlY292ZXIgZGlyZWN0IGRhbWFnZXMgdXAgdG8gdGhlIGFtb3VudCB5b3UgcGFpZCBmb3IgaXQgKHRoYXQgaXMgemVybyBpZiB5b3UgZGlkIG5vdCBwYXkgYW55dGhpbmcpLiBZb3UgbWF5IG5vdCByZWNvdmVyIGFueSBvdGhlciBkYW1hZ2VzLCBpbmNsdWRpbmcgdGhvc2UgY2FsbGVkICJjb25zZXF1ZW50aWFsIGRhbWFnZXMuIiAoVGhlIHN0YXRlIG9yIGNvdW50cnkgd2hlcmUgeW91IGxpdmUgbWF5IG5vdCBhbGxvdyB5b3UgdG8gbGltaXQgeW91ciBsaWFiaWxpdHkgaW4gdGhpcyB3YXksIHNvIHRoaXMgbWF5IG5vdCBhcHBseSB0byB5b3UpOworVGhlIFNpbVBMIGNvbnRpbnVlcyBwZXJwZXR1YWxseSwgZXhjZXB0IHRoYXQgeW91ciBsaWNlbnNlIHJpZ2h0cyBlbmQgYXV0b21hdGljYWxseSBpZjoKK1lvdSBkbyBub3QgYWJpZGUgYnkgdGhlICJnaXZlIGJhY2sgdG8gdGhlIGNvbW11bml0eSIgdGVybXMgKHlvdXIgbGljZW5zZWVzIGdldCB0byBrZWVwIHRoZWlyIHJpZ2h0cyBpZiB0aGV5IGFiaWRlKTsKK0FueW9uZSBwcmV2ZW50cyB5b3UgZnJvbSBkaXN0cmlidXRpbmcgdGhlIHNvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgU2ltUEwuCitMaWNlbnNlIGZvciB0aGUgTGljZW5zZQorWW91IG1heSBkbyBhbnl0aGluZyB0aGF0IHlvdSB3YW50IHdpdGggdGhlIFNpbVBMIHRleHQ7IGl0YHMgYSBsaWNlbnNlIGZvcm0gdG8gdXNlIGluIGFueSB3YXkgdGhhdCB5b3UgZmluZCBoZWxwZnVsLiAgVG8gYXZvaWQgY29uZnVzaW9uLCBob3dldmVyLCBpZiB5b3UgY2hhbmdlIHRoZSB0ZXJtcyBpbiBhbnkgd2F5IHRoZW4geW91IG1heSBub3QgY2FsbCB5b3VyIGxpY2Vuc2UgdGhlIFNpbXBsZSBQdWJsaWMgTGljZW5zZSBvciB0aGUgU2ltUEwgKGJ1dCBmZWVsIGZyZWUgdG8gYWNrbm93bGVkZ2UgdGhhdCB5b3VyIGxpY2Vuc2UgaXMgImJhc2VkIG9uIHRoZSBTaW1wbGUgUHVibGljIExpY2Vuc2UiKS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TbGVlcHljYXQgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NsZWVweWNhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmU5ZDg0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TbGVlcHljYXQKQEAgLTAsMCArMSw5MCBAQAorCitUaGUgU2xlZXB5Y2F0IExpY2Vuc2UKK0NvcHlyaWdodCAoYykgMTk5MC0xOTk5CitTbGVlcHljYXQgU29mdHdhcmUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorCitSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKK2RvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitSZWRpc3RyaWJ1dGlvbnMgaW4gYW55IGZvcm0gbXVzdCBiZSBhY2NvbXBhbmllZCBieSBpbmZvcm1hdGlvbiBvbgoraG93IHRvIG9idGFpbiBjb21wbGV0ZSBzb3VyY2UgY29kZSBmb3IgdGhlIERCIHNvZnR3YXJlIGFuZCBhbnkKK2FjY29tcGFueWluZyBzb2Z0d2FyZSB0aGF0IHVzZXMgdGhlIERCIHNvZnR3YXJlLiBUaGUgc291cmNlIGNvZGUKK211c3QgZWl0aGVyIGJlIGluY2x1ZGVkIGluIHRoZSBkaXN0cmlidXRpb24gb3IgYmUgYXZhaWxhYmxlIGZvciBubworbW9yZSB0aGFuIHRoZSBjb3N0IG9mIGRpc3RyaWJ1dGlvbiBwbHVzIGEgbm9taW5hbCBmZWUsIGFuZCBtdXN0IGJlCitmcmVlbHkgcmVkaXN0cmlidXRhYmxlIHVuZGVyIHJlYXNvbmFibGUgY29uZGl0aW9ucy4gRm9yIGFuCitleGVjdXRhYmxlIGZpbGUsIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsCittb2R1bGVzIGl0IGNvbnRhaW5zLiBJdCBkb2VzIG5vdCBpbmNsdWRlIHNvdXJjZSBjb2RlIGZvciBtb2R1bGVzIG9yCitmaWxlcyB0aGF0IHR5cGljYWxseSBhY2NvbXBhbnkgdGhlIG1ham9yIGNvbXBvbmVudHMgb2YgdGhlIG9wZXJhdGluZworc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIGZpbGUgcnVucy4KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgU0xFRVBZQ0FUIFNPRlRXQVJFIGBgQVMgSVNgYCBBTkQgQU5ZIEVYUFJFU1MKK09SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCitOT04tSU5GUklOR0VNRU5ULCBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgU0xFRVBZQ0FUIFNPRlRXQVJFCitCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzLCAxOTk0LCAxOTk1CitUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKworUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK1JlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCitkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKK21heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQord2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJU2BgIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKK0NvcHlyaWdodCAoYykgMTk5NSwgMTk5NgorVGhlIFByZXNpZGVudCBhbmQgRmVsbG93cyBvZiBIYXJ2YXJkIFVuaXZlcnNpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorCitSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKK2RvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCit3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgSEFSVkFSRCBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTYGAgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgSEFSVkFSRCBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TdWdhckNSTS0xIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TdWdhckNSTS0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYmI0ZTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1N1Z2FyQ1JNLTEKQEAgLTAsMCArMSw0MzEgQEAKKworU1VHQVJDUk0gUFVCTElDIExJQ0VOU0UKKworVmVyc2lvbiAxLjEuMworCitUaGUgU3VnYXJDUk0gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAoIlNQTCIpIGNvbnNpc3RzIG9mIHRoZSBNb3ppbGxhCitQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSwgbW9kaWZpZWQgdG8gYmUgc3BlY2lmaWMgdG8gU3VnYXJDUk0sIHdpdGggdGhlCitBZGRpdGlvbmFsIFRlcm1zIGluIEV4aGliaXQgQi4gVGhlIG9yaWdpbmFsIE1vemlsbGEgUHVibGljIExpY2Vuc2UgMS4xIGNhbiBiZQorZm91bmQgYXQ6IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbAorCisKKzEuIERlZmluaXRpb25zLgorCisxLjAuMS4gIkNvbW1lcmNpYWwgVXNlIiBtZWFucyBkaXN0cmlidXRpb24gb3Igb3RoZXJ3aXNlIG1ha2luZyB0aGUKK0NvdmVyZWQgQ29kZSBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eS4KKzEuMS4gJydDb250cmlidXRvcicnIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUKK2NyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMi4gJydDb250cmlidXRvciBWZXJzaW9uJycgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBwcmlvcgorTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQKK3BhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKzEuMy4gJydDb3ZlcmVkIENvZGUnJyBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZQorY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcKK3BvcnRpb25zIHRoZXJlb2YuCisKKzEuNC4gJydFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20nJyBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQKK2luIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuCisKKzEuNS4gJydFeGVjdXRhYmxlJycgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuCisKKzEuNi4gJydJbml0aWFsIERldmVsb3BlcicnIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuCisKKzEuNy4gJydMYXJnZXIgV29yaycnIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMKK3RoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjguICcnTGljZW5zZScnIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKzEuOC4xLiAiTGljZW5zYWJsZSIgbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0KK2V4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkKK2FjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi4KKworMS45LiAnJ01vZGlmaWNhdGlvbnMnJyBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yCitzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBXaGVuCitDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOgorCitBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwKK0NvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KK0IuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzCitNb2RpZmljYXRpb25zLgorMS4xMC4gJydPcmlnaW5hbCBDb2RlJycgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcworZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIGFuZAord2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkCitDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKzEuMTAuMS4gIlBhdGVudCBDbGFpbXMiIG1lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZCBvcgoraGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZAorYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuCisKKzEuMTEuICcnU291cmNlIENvZGUnJyBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nCittb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQKK2ludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQKK2luc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdAorZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUKK0NvbnRyaWJ1dG9yJ3MgY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLAorcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseQorYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisKKzEuMTIuICJZb3UnJyAob3IgIllvdXIiKSBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5CitleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZQorb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwKK2VudGl0aWVzLCAiWW91JycgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IKK2lzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAorImNvbnRyb2wnJyBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24KK29yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikKK293bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yCitiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4gU291cmNlIENvZGUgTGljZW5zZS4KKzIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LgorVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tCitleGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykKK0xpY2Vuc2FibGUgYnkgSW5pdGlhbCBEZXZlbG9wZXIgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwKK3N1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3IKK3dpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisoYikgdW5kZXIgUGF0ZW50cyBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yIHNlbGxpbmcgb2YgT3JpZ2luYWwKK0NvZGUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3IKK290aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKS4KKworKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIHRoaXMgU2VjdGlvbiAyLjEoYSkgYW5kIChiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZQorZGF0ZSBJbml0aWFsIERldmVsb3BlciBmaXJzdCBkaXN0cmlidXRlcyBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlLgorKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogMSkgZm9yCitjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBPcmlnaW5hbAorQ29kZTsgb3IgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBPcmlnaW5hbAorQ29kZSBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGggb3RoZXIgc29mdHdhcmUgb3IKK2RldmljZXMuCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorU3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieQorZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlCisKKyhhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspCitMaWNlbnNhYmxlIGJ5IENvbnRyaWJ1dG9yLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLAorc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yCitwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcworQ292ZXJlZCBDb2RlIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIG9mCitNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUgYW5kL29yIGluIGNvbWJpbmF0aW9uIHdpdGgKK2l0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLAorb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUKK2J5IHRoYXQgQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQgMikgdGhlIGNvbWJpbmF0aW9uIG9mCitNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvcgorcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbikuCisKKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZQorZGF0ZSBDb250cmlidXRvciBmaXJzdCBtYWtlcyBDb21tZXJjaWFsIFVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IKK2FueSBjb2RlIHRoYXQgQ29udHJpYnV0b3IgaGFzIGRlbGV0ZWQgZnJvbSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsgMikgc2VwYXJhdGUKK2Zyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhpcmQgcGFydHkKK21vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IgVmVyc2lvbiBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMKK21hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIG90aGVyIHNvZnR3YXJlIChleGNlcHQgYXMgcGFydCBvZiB0aGUgQ29udHJpYnV0b3IKK1ZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yIDQpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IENvdmVyZWQgQ29kZQoraW4gdGhlIGFic2VuY2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IuCisKKworMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieQordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZQorQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdQorbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UKK2Rpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24KK3RoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUKK3JlY2lwaWVudHMnIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50CitvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LgorMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlCithdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlciBvbiB0aGUKK3NhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbgorTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGU7IGFuZCBpZgorbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvcgorYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdAorbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbgoraGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZwordGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljCitEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4KKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZQorZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZgorYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzCitkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwKK0RldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZQorQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24KK2luIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCiszLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzCisKKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuCitJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHkncyBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBDb250cmlidXRvcgordW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZQorQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkICJMRUdBTCcnIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eQorbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvCitjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZQorYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgQ29udHJpYnV0b3Igc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZQorTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIENvbnRyaWJ1dG9yIG1ha2VzIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlCitvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKQorcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldwora25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorKGIpIENvbnRyaWJ1dG9yIEFQSXMuCitJZiBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kCitDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8KK2ltcGxlbWVudCB0aGF0IEFQSSwgQ29udHJpYnV0b3IgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwKK2ZpbGUuCisoYykgUmVwcmVzZW50YXRpb25zLgorQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIFNlY3Rpb24gMy40KGEpCithYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgYXJlIENvbnRyaWJ1dG9yJ3MKK29yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vciBDb250cmlidXRvciBoYXMgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlCityaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCiszLjUuIFJlcXVpcmVkIE5vdGljZXMuCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZS4gSWYKK2l0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvCitpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhCityZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYKK1lvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvcgordG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBZb3UgbXVzdCBhbHNvIGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2UgaW4KK2FueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyBvcgorb3duZXJzaGlwIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8KK2NoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZQorb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duCitiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0CittYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbiBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yCitsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5Cit0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwKK2luZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mCitTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsIGFuZCBpZiBZb3UgaW5jbHVkZSBhCitub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdQoraGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseQoraW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvcgorY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkCitDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgb3Igb3duZXJzaGlwCityaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbQordGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8KK2xpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQncyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUKK3JpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uCit1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcword2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsCitEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLgorCiszLjcuIExhcmdlciBXb3Jrcy4KK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90Citnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhCitzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMKK0xpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4KKworNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLgorSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlCit3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsCitvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZQorbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5CithZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4KK1NlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLgorRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdAorYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvCit1bmRlcnN0YW5kIGl0LgorCis1LiBBcHBsaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlCitub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKworNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCis2LjEuIE5ldyBWZXJzaW9ucy4KK1N1Z2FyQ1JNIEluYy4gKCcnU3VnYXJDUk0nJykgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZQorTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uCitudW1iZXIuCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCitPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsCitZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvCitjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mCit0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgU3VnYXJDUk0uIE5vIG9uZSBvdGhlciB0aGFuIFN1Z2FyQ1JNIGhhcyB0aGUgcmlnaHQgdG8KK21vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy4KK0lmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkgb25seSBkbworaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcworTGljZW5zZSksIFlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZXMgJydTdWdhckNSTScnLAorJydTUEwnJyBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdAordG8gbm90ZSB0aGF0IHlvdXIgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0CitjbGVhciB0aGF0IFlvdXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSBjb250YWlucyB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGUKK1N1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsCitPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YKK3RoZW1zZWx2ZXMgYmUgZGVlbWVkIHRvIGJlIG1vZGlmaWNhdGlvbnMgb2YgdGhpcyBMaWNlbnNlLikKKworNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KK0NPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTJycgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVAorTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsCitGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFCitRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQKK0NPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZCitPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IKK0NPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTCitMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUworRElTQ0xBSU1FUi4KKworOC4gVEVSTUlOQVRJT04uCis4LjEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5CitpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAKK2RheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2gKK2FyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucword2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcworTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorOC4yLiBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltCisoZXhjbHVkaW5nIGRlY2xhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyIG9yIGEKK0NvbnRyaWJ1dG9yICh0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tIFlvdSBmaWxlIHN1Y2gKK2FjdGlvbiBpcyByZWZlcnJlZCB0byBhcyAiUGFydGljaXBhbnQiKSBhbGxlZ2luZyB0aGF0OgorCisoYSkgc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55CitwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIKK1NlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZSBzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZSBmcm9tCitQYXJ0aWNpcGFudCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSwgdW5sZXNzIGlmIHdpdGhpbiA2MCBkYXlzIGFmdGVyIHJlY2VpcHQgb2YKK25vdGljZSBZb3UgZWl0aGVyOiAoaSkgYWdyZWUgaW4gd3JpdGluZyB0byBwYXkgUGFydGljaXBhbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUKK3JlYXNvbmFibGUgcm95YWx0eSBmb3IgWW91ciBwYXN0IGFuZCBmdXR1cmUgdXNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoCitQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvIHRoZQorQ29udHJpYnV0b3IgVmVyc2lvbiBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQuIElmIHdpdGhpbiA2MCBkYXlzIG9mIG5vdGljZSwgYQorcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QgbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4KK3dyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cworZ3JhbnRlZCBieSBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgYXV0b21hdGljYWxseQordGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mIHRoZSA2MCBkYXkgbm90aWNlIHBlcmlvZCBzcGVjaWZpZWQgYWJvdmUuCisKKyhiKSBhbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudCdzCitDb250cmlidXRvciBWZXJzaW9uLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueQorcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xKGIpIGFuZCAyLjIoYikgYXJlCityZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwgc29sZCwgZGlzdHJpYnV0ZWQsIG9yCitoYWQgbWFkZSwgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgUGFydGljaXBhbnQuCisKKzguMy4gSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudCBhbGxlZ2luZwordGhhdCBzdWNoIFBhcnRpY2lwYW50J3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcworYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkKK3ByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZQordmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yCitzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudAorb3IgbGljZW5zZS4KKworOC40LiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsIGVuZCB1c2VyCitsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2ggaGF2ZSBiZWVuCit2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwKK3N1cnZpdmUgdGVybWluYXRpb24uCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBBTlkKK09USEVSIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBDT0RFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZCitPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsCitPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwKK0RBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sCitPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwKK0hBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YKK0xJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HCitGUk9NIFNVQ0ggUEFSVFknUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0gKK0xJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GCitJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVAorQVBQTFkgVE8gWU9VLgorCisxMC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy4KK1RoZSBDb3ZlcmVkIENvZGUgaXMgYSAnJ2NvbW1lcmNpYWwgaXRlbSwnJyBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4KKzIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mICcnY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZScnIGFuZAorJydjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sJycgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OAorQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4KKzIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycworYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisxMS4gTUlTQ0VMTEFORU9VUy4KK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlcgoraGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2gKK3Byb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQKK2VuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucworKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZworaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBXaXRoIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lCitwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbgordGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSwgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlCitzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZgorQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZworcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQKK3JlYXNvbmFibGUgYXR0b3JuZXlzJyBmZWVzIGFuZCBleHBlbnNlcy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucworQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5CitleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3QKK3NoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKzEyLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLgorQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcyByZXNwb25zaWJsZQorZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uCitvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8gd29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyIGFuZAorQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcKK2hlcmVpbiBpcyBpbnRlbmRlZCBvciBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KKworMTMuIE1VTFRJUExFLUxJQ0VOU0VEIENPREUuCitJbml0aWFsIERldmVsb3BlciBtYXkgZGVzaWduYXRlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgYXMKKyJNdWx0aXBsZS1MaWNlbnNlZCIuICJNdWx0aXBsZS1MaWNlbnNlZCIgbWVhbnMgdGhhdCB0aGUKK0luaXRpYWwgRGV2ZWxvcGVyIHBlcm1pdHMgeW91IHRvIHV0aWxpemUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSB1bmRlcgorWW91ciBjaG9pY2Ugb2YgdGhlIFNQTCBvciB0aGUgYWx0ZXJuYXRpdmUgbGljZW5zZXMsIGlmIGFueSwgc3BlY2lmaWVkIGJ5IHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIGZpbGUgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4KK1N1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlIDEuMS4zIC0gRXhoaWJpdCBBCisKK1RoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIFN1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKzEuMS4zCisoIkxpY2Vuc2UiKTsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQorTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuc3VnYXJjcm0uY29tL1NQTAorU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorYmFzaXMsCitXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yCit0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGlzOiBTdWdhckNSTSBPcGVuIFNvdXJjZQorCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgU3VnYXJDUk0sIEluYy4KK1BvcnRpb25zIGNyZWF0ZWQgYnkgU3VnYXJDUk0gYXJlIENvcHlyaWdodCAoQykgMjAwNCBTdWdhckNSTSwgSW5jLjsKK0FsbCBSaWdodHMgUmVzZXJ2ZWQuCitDb250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uCitbTk9URTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmcm9tIHRoZSB0ZXh0IG9mIHRoZQorbm90aWNlcyBpbiB0aGUgU291cmNlIENvZGUgZmlsZXMgb2YgdGhlIE9yaWdpbmFsIENvZGUuIFlvdSBzaG91bGQgdXNlIHRoZSB0ZXh0CitvZiB0aGlzIEV4aGliaXQgQSByYXRoZXIgdGhhbiB0aGUgdGV4dCBmb3VuZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSBTb3VyY2UgQ29kZQorZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy5dCisKK1N1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlIDEuMS4zIC0gRXhoaWJpdCBCCisKK0FkZGl0aW9uYWwgVGVybXMgYXBwbGljYWJsZSB0byB0aGUgU3VnYXJDUk0gUHVibGljIExpY2Vuc2UuCisKK0kuIEVmZmVjdC4KK1RoZXNlIGFkZGl0aW9uYWwgdGVybXMgZGVzY3JpYmVkIGluIHRoaXMgU3VnYXJDUk0gUHVibGljIExpY2Vuc2UgJm5kYXNoOworQWRkaXRpb25hbCBUZXJtcyBzaGFsbCBhcHBseSB0byB0aGUgQ292ZXJlZCBDb2RlIHVuZGVyIHRoaXMgTGljZW5zZS4KKworSUkuIFN1Z2FyQ1JNIGFuZCBsb2dvLgorVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZSB0cmFkZW1hcmtzCisiU3VnYXJDUk0iIGFuZCB0aGUgIlN1Z2FyQ1JNIiBsb2dvcyBldmVuIGlmIHN1Y2ggbWFya3MgYXJlCitpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zLgorCitIb3dldmVyLCBpbiBhZGRpdGlvbiB0byB0aGUgb3RoZXIgbm90aWNlIG9ibGlnYXRpb25zLCBhbGwgY29waWVzIG9mIHRoZSBDb3ZlcmVkCitDb2RlIGluIEV4ZWN1dGFibGUgYW5kIFNvdXJjZSBDb2RlIGZvcm0gZGlzdHJpYnV0ZWQgbXVzdCwgYXMgYSBmb3JtIG9mCithdHRyaWJ1dGlvbiBvZiB0aGUgb3JpZ2luYWwgYXV0aG9yLCBpbmNsdWRlIG9uIGVhY2ggdXNlciBpbnRlcmZhY2Ugc2NyZWVuIChpKQordGhlICJQb3dlcmVkIGJ5IFN1Z2FyQ1JNIiBsb2dvIGFuZCAoaWkpIHRoZSBjb3B5cmlnaHQgbm90aWNlIGluIHRoZQorc2FtZSBmb3JtIGFzIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IFN1Z2FyQ1JNLAorSW5jLiBhdCB0aGUgdGltZSBvZiBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3B5LiBJbiBhZGRpdGlvbiwgdGhlICJQb3dlcmVkCitieSBTdWdhckNSTSIgbG9nbyBtdXN0IGJlIHZpc2libGUgdG8gYWxsIHVzZXJzIGFuZCBiZSBsb2NhdGVkIGF0IHRoZSB2ZXJ5Citib3R0b20gY2VudGVyIG9mIGVhY2ggdXNlciBpbnRlcmZhY2Ugc2NyZWVuLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB0aGUKK2RpbWVuc2lvbnMgb2YgdGhlICJQb3dlcmVkIEJ5IFN1Z2FyQ1JNIiBsb2dvIG11c3QgYmUgYXQgbGVhc3QgMTA2IHgKKzIzIHBpeGVscy4gV2hlbiB1c2VycyBjbGljayBvbiB0aGUgIlBvd2VyZWQgYnkgU3VnYXJDUk0iIGxvZ28gaXQgbXVzdAorZGlyZWN0IHRoZW0gYmFjayB0byBodHRwOi8vd3d3LnN1Z2FyZm9yZ2Uub3JnLiBJbiBhZGRpdGlvbiwgdGhlIGNvcHlyaWdodAorbm90aWNlIG11c3QgcmVtYWluIHZpc2libGUgdG8gYWxsIHVzZXJzIGF0IGFsbCB0aW1lcyBhdCB0aGUgYm90dG9tIG9mIHRoZSB1c2VyCitpbnRlcmZhY2Ugc2NyZWVuLiBXaGVuIHVzZXJzIGNsaWNrIG9uIHRoZSBjb3B5cmlnaHQgbm90aWNlLCBpdCBtdXN0IGRpcmVjdCB0aGVtCitiYWNrIHRvIGh0dHA6Ly93d3cuc3VnYXJjcm0uY29tCisKKworCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1N1Z2FyQ1JNLTEuMS4zIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TdWdhckNSTS0xLjEuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDk2ODFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TdWdhckNSTS0xLjEuMwpAQCAtMCwwICsxLDE2MCBAQAorCitTVUdBUkNSTSBQVUJMSUMgTElDRU5TRQorCitWZXJzaW9uIDEuMS4zCisKK1RoZSBTdWdhckNSTSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uICgiU1BMIikgY29uc2lzdHMgb2YgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEsIG1vZGlmaWVkIHRvIGJlIHNwZWNpZmljIHRvIFN1Z2FyQ1JNLCB3aXRoIHRoZSBBZGRpdGlvbmFsIFRlcm1zIGluIEV4aGliaXQgQi4gVGhlIG9yaWdpbmFsIE1vemlsbGEgUHVibGljIExpY2Vuc2UgMS4xIGNhbiBiZSBmb3VuZCBhdDogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sCisKKworMS4gRGVmaW5pdGlvbnMuCisKKzEuMC4xLiAiQ29tbWVyY2lhbCBVc2UiIG1lYW5zIGRpc3RyaWJ1dGlvbiBvciBvdGhlcndpc2UgbWFraW5nIHRoZSBDb3ZlcmVkIENvZGUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuCisxLjEuIGBgQ29udHJpYnV0b3JgYCBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMi4gYGBDb250cmlidXRvciBWZXJzaW9uYGAgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorCisxLjMuIGBgQ292ZXJlZCBDb2RlYGAgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKworMS40LiBgYEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbWBgIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLgorCisxLjUuIGBgRXhlY3V0YWJsZWBgIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLgorCisxLjYuIGBgSW5pdGlhbCBEZXZlbG9wZXJgYCBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuCisKKzEuNy4gYGBMYXJnZXIgV29ya2BgIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuOC4gYGBMaWNlbnNlYGAgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworMS44LjEuICJMaWNlbnNhYmxlIiBtZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi4KKworMS45LiBgYE1vZGlmaWNhdGlvbnNgYCBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczoKKworQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KK0IuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIAorMS4xMC4gYGBPcmlnaW5hbCBDb2RlYGAgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMgT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKzEuMTAuMS4gIlBhdGVudCBDbGFpbXMiIG1lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZCBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLgorCisxLjExLiBgYFNvdXJjZSBDb2RlYGAgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3Igc291cmNlIGNvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3JgcyBjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisKKzEuMTIuICJZb3VgYCAob3IgIllvdXIiKSBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91YGAgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sYGAgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4gCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisoYikgdW5kZXIgUGF0ZW50cyBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yIHNlbGxpbmcgb2YgT3JpZ2luYWwgQ29kZSwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHByYWN0aWNlLCBzZWxsLCBhbmQgb2ZmZXIgZm9yIHNhbGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikuCisKKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xKGEpIGFuZCAoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBJbml0aWFsIERldmVsb3BlciBmaXJzdCBkaXN0cmlidXRlcyBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgY29kZSB0aGF0IFlvdSBkZWxldGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgMikgc2VwYXJhdGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgb3IgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBkZXZpY2VzLiAKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuIAorU3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UKKworKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUgYW5kL29yIGluIGNvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZjogMSkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQgMikgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLgorCisoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4yKGEpIGFuZCAyLjIoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBDb250cmlidXRvciBmaXJzdCBtYWtlcyBDb21tZXJjaWFsIFVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgYW55IGNvZGUgdGhhdCBDb250cmlidXRvciBoYXMgZGVsZXRlZCBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IgVmVyc2lvbiBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSBDb3ZlcmVkIENvZGUgaW4gdGhlIGFic2VuY2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IuCisKKworMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuIAorVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuCiszLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4gCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciB2aWEgYW4gYWNjZXB0ZWQgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGU7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4KKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLiAKK1lvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycworCisoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLiAKK0lmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eWBzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZSBDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgIkxFR0FMYGAgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZSBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKyhiKSBDb250cmlidXRvciBBUElzLiAKK0lmIENvbnRyaWJ1dG9yYHMgTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBhbmQgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgQ29udHJpYnV0b3IgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS4gCisoYykgUmVwcmVzZW50YXRpb25zLgorQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIFNlY3Rpb24gMy40KGEpIGFib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yYHMgTW9kaWZpY2F0aW9ucyBhcmUgQ29udHJpYnV0b3JgcyBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IgQ29udHJpYnV0b3IgaGFzIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCiszLjUuIFJlcXVpcmVkIE5vdGljZXMuIAorWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgb3Igb3duZXJzaGlwIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuIGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4gCitZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLCBhbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLgorCiszLjcuIExhcmdlciBXb3Jrcy4gCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCisKKzQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4KK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuCisKKzUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyBhdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCisKKzYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLgorNi4xLiBOZXcgVmVyc2lvbnMuIAorU3VnYXJDUk0gSW5jLiAoYGBTdWdhckNSTWBgKSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuIAorT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IFN1Z2FyQ1JNLiBObyBvbmUgb3RoZXIgdGhhbiBTdWdhckNSTSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy4gCitJZiBZb3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgWW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlcyBgYFN1Z2FyQ1JNYGAsIGBgU1BMYGAgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgaW4geW91ciBsaWNlbnNlIChleGNlcHQgdG8gbm90ZSB0aGF0IHlvdXIgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgWW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBTdWdhckNSTSBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKQorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVNgYCBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCis4LiBURVJNSU5BVElPTi4KKzguMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorOC4yLiBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIChleGNsdWRpbmcgZGVjbGF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYSBDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSBZb3UgZmlsZSBzdWNoIGFjdGlvbiBpcyByZWZlcnJlZCB0byBhcyAiUGFydGljaXBhbnQiKSBhbGxlZ2luZyB0aGF0OgorCisoYSkgc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UgZnJvbSBQYXJ0aWNpcGFudCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSwgdW5sZXNzIGlmIHdpdGhpbiA2MCBkYXlzIGFmdGVyIHJlY2VpcHQgb2Ygbm90aWNlIFlvdSBlaXRoZXI6IChpKSBhZ3JlZSBpbiB3cml0aW5nIHRvIHBheSBQYXJ0aWNpcGFudCBhIG11dHVhbGx5IGFncmVlYWJsZSByZWFzb25hYmxlIHJveWFsdHkgZm9yIFlvdXIgcGFzdCBhbmQgZnV0dXJlIHVzZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvIHRoZSBDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMgb2Ygbm90aWNlLCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLgorCisoYikgYW55IHNvZnR3YXJlLCBoYXJkd2FyZSwgb3IgZGV2aWNlLCBvdGhlciB0aGFuIHN1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEoYikgYW5kIDIuMihiKSBhcmUgcmV2b2tlZCBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgWW91IGZpcnN0IG1hZGUsIHVzZWQsIHNvbGQsIGRpc3RyaWJ1dGVkLCBvciBoYWQgbWFkZSwgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgUGFydGljaXBhbnQuCisKKzguMy4gSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudCBhbGxlZ2luZyB0aGF0IHN1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IgbGljZW5zZS4KKworOC40LiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCisxMC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy4KK1RoZSBDb3ZlcmVkIENvZGUgaXMgYSBgYGNvbW1lcmNpYWwgaXRlbSxgYCBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgYGBjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlYGAgYW5kIGBgY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLGBgIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKworMTEuIE1JU0NFTExBTkVPVVMuCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IENhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFdpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUgcGFydHkgaXMgYSBjaXRpemVuIG9mLCBvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSwgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXNgIGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKworMTIuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuCitBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8gd29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZyBoZXJlaW4gaXMgaW50ZW5kZWQgb3Igc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuCisKKzEzLiBNVUxUSVBMRS1MSUNFTlNFRCBDT0RFLgorSW5pdGlhbCBEZXZlbG9wZXIgbWF5IGRlc2lnbmF0ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIGFzICYjODIyMDtNdWx0aXBsZS1MaWNlbnNlZCYjODIyMTsuICYjODIyMDtNdWx0aXBsZS1MaWNlbnNlZCYjODIyMTsgbWVhbnMgdGhhdCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgcGVybWl0cyB5b3UgdG8gdXRpbGl6ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIHVuZGVyIFlvdXIgY2hvaWNlIG9mIHRoZSBTUEwgb3IgdGhlIGFsdGVybmF0aXZlIGxpY2Vuc2VzLCBpZiBhbnksIHNwZWNpZmllZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIGZpbGUgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4KK1N1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlIDEuMS4zIC0gRXhoaWJpdCBBCisKK1RoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIFN1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xLjMKKygiTGljZW5zZSIpOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIAorTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuc3VnYXJjcm0uY29tL1NQTAorU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKK1dJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IKK3RoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworVGhlIE9yaWdpbmFsIENvZGUgaXM6IFN1Z2FyQ1JNIE9wZW4gU291cmNlCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBTdWdhckNSTSwgSW5jLgorUG9ydGlvbnMgY3JlYXRlZCBieSBTdWdhckNSTSBhcmUgQ29weXJpZ2h0IChDKSAyMDA0IFN1Z2FyQ1JNLCBJbmMuOworQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK0NvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4KK1tOT1RFOiBUaGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSBtYXkgZGlmZmVyIHNsaWdodGx5IGZyb20gdGhlIHRleHQgb2YgdGhlIG5vdGljZXMgaW4gdGhlIFNvdXJjZSBDb2RlIGZpbGVzIG9mIHRoZSBPcmlnaW5hbCBDb2RlLiBZb3Ugc2hvdWxkIHVzZSB0aGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSByYXRoZXIgdGhhbiB0aGUgdGV4dCBmb3VuZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSBTb3VyY2UgQ29kZSBmb3IgWW91ciBNb2RpZmljYXRpb25zLl0KKworU3VnYXJDUk0gUHVibGljIExpY2Vuc2UgMS4xLjMgLSBFeGhpYml0IEIKKworQWRkaXRpb25hbCBUZXJtcyBhcHBsaWNhYmxlIHRvIHRoZSBTdWdhckNSTSBQdWJsaWMgTGljZW5zZS4KKworSS4gRWZmZWN0LgorVGhlc2UgYWRkaXRpb25hbCB0ZXJtcyBkZXNjcmliZWQgaW4gdGhpcyBTdWdhckNSTSBQdWJsaWMgTGljZW5zZSAmIzgyMTE7IEFkZGl0aW9uYWwgVGVybXMgc2hhbGwgYXBwbHkgdG8gdGhlIENvdmVyZWQgQ29kZSB1bmRlciB0aGlzIExpY2Vuc2UuCisKK0lJLiBTdWdhckNSTSBhbmQgbG9nby4KK1RoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUgdHJhZGVtYXJrcyAiU3VnYXJDUk0iIGFuZCB0aGUgIlN1Z2FyQ1JNIiBsb2dvcyBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMuCisKK0hvd2V2ZXIsIGluIGFkZGl0aW9uIHRvIHRoZSBvdGhlciBub3RpY2Ugb2JsaWdhdGlvbnMsIGFsbCBjb3BpZXMgb2YgdGhlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGFuZCBTb3VyY2UgQ29kZSBmb3JtIGRpc3RyaWJ1dGVkIG11c3QsIGFzIGEgZm9ybSBvZiBhdHRyaWJ1dGlvbiBvZiB0aGUgb3JpZ2luYWwgYXV0aG9yLCBpbmNsdWRlIG9uIGVhY2ggdXNlciBpbnRlcmZhY2Ugc2NyZWVuIChpKSB0aGUgIlBvd2VyZWQgYnkgU3VnYXJDUk0iIGxvZ28gYW5kIChpaSkgdGhlIGNvcHlyaWdodCBub3RpY2UgaW4gdGhlIHNhbWUgZm9ybSBhcyB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBkaXN0cmlidXRlZCBieSBTdWdhckNSTSwgSW5jLiBhdCB0aGUgdGltZSBvZiBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3B5LiBJbiBhZGRpdGlvbiwgdGhlICJQb3dlcmVkIGJ5IFN1Z2FyQ1JNIiBsb2dvIG11c3QgYmUgdmlzaWJsZSB0byBhbGwgdXNlcnMgYW5kIGJlIGxvY2F0ZWQgYXQgdGhlIHZlcnkgYm90dG9tIGNlbnRlciBvZiBlYWNoIHVzZXIgaW50ZXJmYWNlIHNjcmVlbi4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdGhlIGRpbWVuc2lvbnMgb2YgdGhlICJQb3dlcmVkIEJ5IFN1Z2FyQ1JNIiBsb2dvIG11c3QgYmUgYXQgbGVhc3QgMTA2IHggMjMgcGl4ZWxzLiBXaGVuIHVzZXJzIGNsaWNrIG9uIHRoZSAiUG93ZXJlZCBieSBTdWdhckNSTSIgbG9nbyBpdCBtdXN0IGRpcmVjdCB0aGVtIGJhY2sgdG8gaHR0cDovL3d3dy5zdWdhcmZvcmdlLm9yZy4gSW4gYWRkaXRpb24sIHRoZSBjb3B5cmlnaHQgbm90aWNlIG11c3QgcmVtYWluIHZpc2libGUgdG8gYWxsIHVzZXJzIGF0IGFsbCB0aW1lcyBhdCB0aGUgYm90dG9tIG9mIHRoZSB1c2VyIGludGVyZmFjZSBzY3JlZW4uIFdoZW4gdXNlcnMgY2xpY2sgb24gdGhlIGNvcHlyaWdodCBub3RpY2UsIGl0IG11c3QgZGlyZWN0IHRoZW0gYmFjayB0byBodHRwOi8vd3d3LnN1Z2FyY3JtLmNvbQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1VDQiBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvVUNCCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YTc1N2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1VDQgpAQCAtMCwwICsxLDI2IEBACisgICBDb3B5cmlnaHQgKGMpIDE5ODcsIDE5ODksIDE5OTAsIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQKKyAgICAgICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgICBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAgIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgICBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICAgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgICBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICAgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICAgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICAgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1ZTTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1ZTTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZiYWU1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvVlNMLTEuMApAQCAtMCwwICsxLDQ5IEBACisKK1ZvdmlkYSBTb2Z0d2FyZSBMaWNlbnNlIHYuIDEuMAorCitUaGlzIGxpY2Vuc2UgYXBwbGllcyB0byBhbGwgc29mdHdhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZSAiVm92aWRhCitPcGVuIENvbW11bmljYXRpb24gQXBwbGljYXRpb24gTGlicmFyeSIgZXhjZXB0IGZvciB0aG9zZSBwb3J0aW9ucworaW5jb3Jwb3JhdGluZyB0aGlyZCBwYXJ0eSBzb2Z0d2FyZSBzcGVjaWZpY2FsbHkgaWRlbnRpZmllZCBhcyBiZWluZworbGljZW5zZWQgdW5kZXIgc2VwYXJhdGUgbGljZW5zZS4KKworVGhlIFZvdmlkYSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMAorQ29weXJpZ2h0IChjKSAyMDAwIFZvdmlkYSBOZXR3b3JrcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgordGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorZGlzdHJpYnV0aW9uLgorCiszLiBUaGUgbmFtZXMgIlZPQ0FMIiwgIlZvdmlkYSBPcGVuIENvbW11bmljYXRpb24gQXBwbGljYXRpb24gTGlicmFyeSIsCithbmQgIlZvdmlkYSBPcGVuIENvbW11bmljYXRpb24gQXBwbGljYXRpb24gTGlicmFyeSAoVk9DQUwpIiBtdXN0Citub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKK3NvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgorcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3Qgdm9jYWxAdm92aWRhLm9yZy4KKworNC4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIlZPQ0FMIiwgbm9yCittYXkgIlZPQ0FMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciB3cml0dGVuCitwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAorV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFIEFORAorTk9OLUlORlJJTkdFTUVOVCBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVk9WSURBCitORVRXT1JLUywgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMKK0lOIEVYQ0VTUyBPRiAkMSwwMDAsIE5PUiBGT1IgQU5ZIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCitQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCitPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCitVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICitEQU1BR0UuCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1czQyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvVzNDCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YjhjNDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1czQwpAQCAtMCwwICsxLDE3IEBACisKK1czQyBTT0ZUV0FSRSBOT1RJQ0UgQU5EIExJQ0VOU0UKK1RoaXMgd29yayAoYW5kIGluY2x1ZGVkIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uIHN1Y2ggYXMgUkVBRE1Fcywgb3Igb3RoZXIgcmVsYXRlZCBpdGVtcykgaXMgYmVpbmcgcHJvdmlkZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZS4KK0xpY2Vuc2UKK0J5IG9idGFpbmluZywgdXNpbmcgYW5kL29yIGNvcHlpbmcgdGhpcyB3b3JrLCB5b3UgKHRoZSBsaWNlbnNlZSkgYWdyZWUgdGhhdCB5b3UgaGF2ZSByZWFkLCB1bmRlcnN0b29kLCBhbmQgd2lsbCBjb21wbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLgorUGVybWlzc2lvbiB0byBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIG9yIHJveWFsdHkgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgeW91IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBvbiBBTEwgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBvciBwb3J0aW9ucyB0aGVyZW9mLCBpbmNsdWRpbmcgbW9kaWZpY2F0aW9uczoKK1RoZSBmdWxsIHRleHQgb2YgdGhpcyBOT1RJQ0UgaW4gYSBsb2NhdGlvbiB2aWV3YWJsZSB0byB1c2VycyBvZiB0aGUgcmVkaXN0cmlidXRlZCBvciBkZXJpdmF0aXZlIHdvcmsuCitBbnkgcHJlLWV4aXN0aW5nIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBkaXNjbGFpbWVycywgbm90aWNlcywgb3IgdGVybXMgYW5kIGNvbmRpdGlvbnMuIElmIG5vbmUgZXhpc3QsIHRoZSBXM0MgU29mdHdhcmUgU2hvcnQgTm90aWNlIHNob3VsZCBiZSBpbmNsdWRlZCAoaHlwZXJ0ZXh0IGlzIHByZWZlcnJlZCwgdGV4dCBpcyBwZXJtaXR0ZWQpIHdpdGhpbiB0aGUgYm9keSBvZiBhbnkgcmVkaXN0cmlidXRlZCBvciBkZXJpdmF0aXZlIGNvZGUuCitOb3RpY2Ugb2YgYW55IGNoYW5nZXMgb3IgbW9kaWZpY2F0aW9ucyB0byB0aGUgZmlsZXMsIGluY2x1ZGluZyB0aGUgZGF0ZSBjaGFuZ2VzIHdlcmUgbWFkZS4gKFdlIHJlY29tbWVuZCB5b3UgcHJvdmlkZSBVUklzIHRvIHRoZSBsb2NhdGlvbiBmcm9tIHdoaWNoIHRoZSBjb2RlIGlzIGRlcml2ZWQuKQorRGlzY2xhaW1lcnMKK1RISVMgU09GVFdBUkUgQU5EIERPQ1VNRU5UQVRJT04gSVMgUFJPVklERUQgIkFTIElTLCIgQU5EIENPUFlSSUdIVCBIT0xERVJTIE1BS0UgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTywgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIERPQ1VNRU5UQVRJT04gV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFBBVEVOVFMsIENPUFlSSUdIVFMsIFRSQURFTUFSS1MgT1IgT1RIRVIgUklHSFRTLgorQ09QWVJJR0hUIEhPTERFUlMgV0lMTCBOT1QgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgQU5ZIFVTRSBPRiBUSEUgU09GVFdBUkUgT1IgRE9DVU1FTlRBVElPTi4KK1RoZSBuYW1lIGFuZCB0cmFkZW1hcmtzIG9mIGNvcHlyaWdodCBob2xkZXJzIG1heSBOT1QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiBUaXRsZSB0byBjb3B5cmlnaHQgaW4gdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB3aWxsIGF0IGFsbCB0aW1lcyByZW1haW4gd2l0aCBjb3B5cmlnaHQgaG9sZGVycy4KK05vdGVzCitUaGlzIHZlcnNpb246IGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKK1RoaXMgZm9ybXVsYXRpb24gb2YgVzNDYHMgbm90aWNlIGFuZCBsaWNlbnNlIGJlY2FtZSBhY3RpdmUgb24gRGVjZW1iZXIgMzEgMjAwMi4gVGhpcyB2ZXJzaW9uIHJlbW92ZXMgdGhlIGNvcHlyaWdodCBvd25lcnNoaXAgbm90aWNlIHN1Y2ggdGhhdCB0aGlzIGxpY2Vuc2UgY2FuIGJlIHVzZWQgd2l0aCBtYXRlcmlhbHMgb3RoZXIgdGhhbiB0aG9zZSBvd25lZCBieSB0aGUgVzNDLCByZWZsZWN0cyB0aGF0IEVSQ0lNIGlzIG5vdyBhIGhvc3Qgb2YgdGhlIFczQywgaW5jbHVkZXMgcmVmZXJlbmNlcyB0byB0aGlzIHNwZWNpZmljIGRhdGVkIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UsIGFuZCByZW1vdmVzIHRoZSBhbWJpZ3VvdXMgZ3JhbnQgb2YgInVzZSIuIE90aGVyd2lzZSwgdGhpcyB2ZXJzaW9uIGlzIHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyB2ZXJzaW9uIGFuZCBpcyB3cml0dGVuIHNvIGFzIHRvIHByZXNlcnZlIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb25gcyBhc3Nlc3NtZW50IG9mIEdQTCBjb21wYXRpYmlsaXR5IGFuZCBPU0lgcyBjZXJ0aWZpY2F0aW9uIHVuZGVyIHRoZSBPcGVuIFNvdXJjZSBEZWZpbml0aW9uLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1dYd2luZG93cyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvV1h3aW5kb3dzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZTA5NDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1dYd2luZG93cwpAQCAtMCwwICsxLDU1IEBACisKKyAgICAgICAgICAgICAgICB3eFdpbmRvd3MgTGlicmFyeSBMaWNlbmNlLCBWZXJzaW9uIDMuMQorICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDUgSnVsaWFuIFNtYXJ0LCBSb2JlcnQgUm9lYmxpbmcgZXQgYWwKKworICBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyAgb2YgdGhpcyBsaWNlbmNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKyAgICAgICAgICAgICAgICAgICAgICAgV1hXSU5ET1dTIExJQlJBUlkgTElDRU5DRQorICAgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKyAgCisgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSBhcyBwdWJsaXNoZWQgYnkKKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0CisgIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgCisgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMaWJyYXJ5CisgIEdlbmVyYWwgUHVibGljIExpY2VuY2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZSwgdXN1YWxseSBpbiBhIGZpbGUgbmFtZWQgQ09QWUlORy5MSUIuICBJZiBub3QsCisgIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAorICBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgorCisgIEVYQ0VQVElPTiBOT1RJQ0UKKworICAxLiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgY29weXJpZ2h0IGhvbGRlcnMgb2YgdGhpcyBsaWJyYXJ5IGdpdmUKKyAgcGVybWlzc2lvbiBmb3IgYWRkaXRpb25hbCB1c2VzIG9mIHRoZSB0ZXh0IGNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2Ugb2YKKyAgdGhlIGxpYnJhcnkgYXMgbGljZW5jZWQgdW5kZXIgdGhlIHd4V2luZG93cyBMaWJyYXJ5IExpY2VuY2UsIGFwcGx5aW5nCisgIGVpdGhlciB2ZXJzaW9uIDMuMSBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbiBvZgorICB0aGUgTGljZW5jZSBhcyBwdWJsaXNoZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mIHZlcnNpb24KKyAgMy4xIG9mIHRoZSBMaWNlbmNlIGRvY3VtZW50LgorCisgIDIuIFRoZSBleGNlcHRpb24gaXMgdGhhdCB5b3UgbWF5IHVzZSwgY29weSwgbGluaywgbW9kaWZ5IGFuZCBkaXN0cmlidXRlCisgIHVuZGVyIHlvdXIgb3duIHRlcm1zLCBiaW5hcnkgb2JqZWN0IGNvZGUgdmVyc2lvbnMgb2Ygd29ya3MgYmFzZWQKKyAgb24gdGhlIExpYnJhcnkuCisKKyAgMy4gSWYgeW91IGNvcHkgY29kZSBmcm9tIGZpbGVzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgIEdlbmVyYWwgUHVibGljIExpY2VuY2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2VuY2UgaW50byBhCisgIGNvcHkgb2YgdGhpcyBsaWJyYXJ5LCBhcyB0aGlzIGxpY2VuY2UgcGVybWl0cywgdGhlIGV4Y2VwdGlvbiBkb2VzIG5vdAorICBhcHBseSB0byB0aGUgY29kZSB0aGF0IHlvdSBhZGQgaW4gdGhpcyB3YXkuICBUbyBhdm9pZCBtaXNsZWFkaW5nIGFueW9uZSBhcworICB0byB0aGUgc3RhdHVzIG9mIHN1Y2ggbW9kaWZpZWQgZmlsZXMsIHlvdSBtdXN0IGRlbGV0ZSB0aGlzIGV4Y2VwdGlvbgorICBub3RpY2UgZnJvbSBzdWNoIGNvZGUgYW5kL29yIGFkanVzdCB0aGUgbGljZW5zaW5nIGNvbmRpdGlvbnMgbm90aWNlCisgIGFjY29yZGluZ2x5LgorCisgIDQuIElmIHlvdSB3cml0ZSBtb2RpZmljYXRpb25zIG9mIHlvdXIgb3duIGZvciB0aGlzIGxpYnJhcnksIGl0IGlzIHlvdXIKKyAgY2hvaWNlIHdoZXRoZXIgdG8gcGVybWl0IHRoaXMgZXhjZXB0aW9uIHRvIGFwcGx5IHRvIHlvdXIgbW9kaWZpY2F0aW9ucy4gCisgIElmIHlvdSBkbyBub3Qgd2lzaCB0aGF0LCB5b3UgbXVzdCBkZWxldGUgdGhlIGV4Y2VwdGlvbiBub3RpY2UgZnJvbSBzdWNoCisgIGNvZGUgYW5kL29yIGFkanVzdCB0aGUgbGljZW5zaW5nIGNvbmRpdGlvbnMgbm90aWNlIGFjY29yZGluZ2x5LgorCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9XYXRjb20tMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9XYXRjb20tMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYjYxOWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1dhdGNvbS0xLjAKQEAgLTAsMCArMSwxNDAgQEAKKworU3liYXNlIE9wZW4gV2F0Y29tIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMS4wCisKK1VTRSBPRiBUSEUgU1lCQVNFIE9QRU4gV0FUQ09NIFNPRlRXQVJFIERFU0NSSUJFRCBCRUxPVyAoIlNPRlRXQVJFIikgSVMgU1VCSkVDVCBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgU0VUIEZPUlRIIElOIFRIRSBTWUJBU0UgT1BFTiBXQVRDT00gUFVCTElDIExJQ0VOU0UgU0VUIEZPUlRIIEJFTE9XICgiTElDRU5TRSIpLiBZT1UgTUFZIE5PVCBVU0UgVEhFIFNPRlRXQVJFIElOIEFOWSBNQU5ORVIgVU5MRVNTIFlPVSBBQ0NFUFQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRIRSBMSUNFTlNFLiBZT1UgSU5ESUNBVEUgWU9VUiBBQ0NFUFRBTkNFIEJZIElOIEFOWSBNQU5ORVIgVVNJTkcgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQlkgUkVQUk9EVUNJTkcsIE1PRElGWUlORyBPUiBESVNUUklCVVRJTkcpIFRIRSBTT0ZUV0FSRS4gSUYgWU9VIERPIE5PVCBBQ0NFUFQgQUxMIE9GIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSEUgTElDRU5TRSwgRE8gTk9UIFVTRSBUSEUgU09GVFdBUkUgSU4gQU5ZIE1BTk5FUi4KKworU3liYXNlIE9wZW4gV2F0Y29tIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMS4wCisxLiBHZW5lcmFsOyBEZWZpbml0aW9ucy4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aGUgZm9sbG93aW5nIHNvZnR3YXJlIHByb2dyYW1zOiB0aGUgb3BlbiBzb3VyY2UgdmVyc2lvbnMgb2YgU3liYXNlYHMgV2F0Y29tIEMvQysrIGFuZCBGb3J0cmFuIGNvbXBpbGVyIHByb2R1Y3RzICgiU29mdHdhcmUiKSwgd2hpY2ggYXJlIG1vZGlmaWVkIHZlcnNpb25zIG9mLCB3aXRoIHNpZ25pZmljYW50IGNoYW5nZXMgZnJvbSwgdGhlIGxhc3QgdmVyc2lvbnMgbWFkZSBjb21tZXJjaWFsbHkgYXZhaWxhYmxlIGJ5IFN5YmFzZS4gQXMgdXNlZCBpbiB0aGlzIExpY2Vuc2U6CisKKworMS4xICJBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMiIG1lYW46IChhKSBpbiB0aGUgY2FzZSB3aGVyZSBTeWJhc2UgaXMgdGhlIGdyYW50b3Igb2YgcmlnaHRzLCAoaSkgY2xhaW1zIG9mIHBhdGVudHMgdGhhdCBhcmUgbm93IG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gU3liYXNlIGFuZCAoaWkpIHRoYXQgY292ZXIgc3ViamVjdCBtYXR0ZXIgY29udGFpbmVkIGluIHRoZSBPcmlnaW5hbCBDb2RlLCBidXQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byB1c2UsIHJlcHJvZHVjZSBhbmQvb3IgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSB3aXRob3V0IGluZnJpbmdlbWVudDsgYW5kIChiKSBpbiB0aGUgY2FzZSB3aGVyZSBZb3UgYXJlIHRoZSBncmFudG9yIG9mIHJpZ2h0cywgKGkpIGNsYWltcyBvZiBwYXRlbnRzIHRoYXQgYXJlIG5vdyBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIFlvdSBhbmQgKGlpKSB0aGF0IGNvdmVyIHN1YmplY3QgbWF0dGVyIGluIFlvdXIgTW9kaWZpY2F0aW9ucywgdGFrZW4gYWxvbmUgb3IgaW4gY29tYmluYXRpb24gd2l0aCBPcmlnaW5hbCBDb2RlLgorCisKKzEuMiAiQ29udHJpYnV0b3IiIG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworCisxLjMgIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIHRoZSBjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueSByZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuCisKKworMS40ICJEZXBsb3kiIG1lYW5zIHRvIHVzZSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBvdGhlciB0aGFuIGZvciBZb3VyIGludGVybmFsIHJlc2VhcmNoIGFuZCBkZXZlbG9wbWVudCAoUiZhbXA7RCkgYW5kL29yIFBlcnNvbmFsIFVzZSwgYW5kIGluY2x1ZGVzIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IGFuZCBhbGwgaW50ZXJuYWwgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkIENvZGUgd2l0aGluIFlvdXIgYnVzaW5lc3Mgb3Igb3JnYW5pemF0aW9uIGV4Y2VwdCBmb3IgUiZhbXA7RCB1c2UgYW5kL29yIFBlcnNvbmFsIFVzZSwgYXMgd2VsbCBhcyBkaXJlY3Qgb3IgaW5kaXJlY3Qgc3VibGljZW5zaW5nIG9yIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkIENvZGUgYnkgWW91IHRvIGFueSB0aGlyZCBwYXJ0eSBpbiBhbnkgZm9ybSBvciBtYW5uZXIuCisKKworMS41ICJMYXJnZXIgV29yayIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworCisxLjYgIk1vZGlmaWNhdGlvbnMiIG1lYW4gYW55IGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tLCBhbmQvb3IgY2hhbmdlIHRvLCB0aGUgc3Vic3RhbmNlIGFuZC9vciBzdHJ1Y3R1cmUgb2YgdGhlIE9yaWdpbmFsIENvZGUsIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLCB0aGUgY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkgcmVzcGVjdGl2ZSBwb3J0aW9ucyB0aGVyZW9mLiBXaGVuIGNvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOiAoYSkgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIENvdmVyZWQgQ29kZTsgYW5kL29yIChiKSBhbnkgbmV3IGZpbGUgb3Igb3RoZXIgcmVwcmVzZW50YXRpb24gb2YgY29tcHV0ZXIgcHJvZ3JhbSBzdGF0ZW1lbnRzIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgQ292ZXJlZCBDb2RlLgorCisKKzEuNyAiT3JpZ2luYWwgQ29kZSIgbWVhbnMgKGEpIHRoZSBTb3VyY2UgQ29kZSBvZiBhIHByb2dyYW0gb3Igb3RoZXIgd29yayBhcyBvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IFN5YmFzZSB1bmRlciB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB0aGUgU291cmNlIENvZGUgb2YgYW55IHVwZGF0ZXMgb3IgdXBncmFkZXMgdG8gc3VjaCBwcm9ncmFtcyBvciB3b3JrcyBtYWRlIGF2YWlsYWJsZSBieSBTeWJhc2UgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgdGhhdCBoYXMgYmVlbiBleHByZXNzbHkgaWRlbnRpZmllZCBieSBTeWJhc2UgYXMgc3VjaCBpbiB0aGUgaGVhZGVyIGZpbGUocykgb2Ygc3VjaCB3b3JrOyBhbmQgKGIpIHRoZSBvYmplY3QgY29kZSBjb21waWxlZCBmcm9tIHN1Y2ggU291cmNlIENvZGUgYW5kIG9yaWdpbmFsbHkgbWFkZSBhdmFpbGFibGUgYnkgU3liYXNlIHVuZGVyIHRoaXMgTGljZW5zZS4KKworCisxLjggIlBlcnNvbmFsIFVzZSIgbWVhbnMgdXNlIG9mIENvdmVyZWQgQ29kZSBieSBhbiBpbmRpdmlkdWFsIHNvbGVseSBmb3IgaGlzIG9yIGhlciBwZXJzb25hbCwgcHJpdmF0ZSBhbmQgbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMuIEFuIGluZGl2aWR1YWxgcyB1c2Ugb2YgQ292ZXJlZCBDb2RlIGluIGhpcyBvciBoZXIgY2FwYWNpdHkgYXMgYW4gb2ZmaWNlciwgZW1wbG95ZWUsIG1lbWJlciwgaW5kZXBlbmRlbnQgY29udHJhY3RvciBvciBhZ2VudCBvZiBhIGNvcnBvcmF0aW9uLCBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gKGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwpIGRvZXMgbm90IHF1YWxpZnkgYXMgUGVyc29uYWwgVXNlLgorCisKKzEuOSAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBodW1hbiByZWFkYWJsZSBmb3JtIG9mIGEgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHRoYXQgaXMgc3VpdGFibGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gZXhlY3V0YWJsZSAob2JqZWN0IGNvZGUpLgorCisKKzEuMTAgIllvdSIgb3IgIllvdXIiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIG9yICJZb3VyIiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoLCBZb3UsIHdoZXJlICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKworMi4gUGVybWl0dGVkIFVzZXM7IENvbmRpdGlvbnMgJmFtcDsgUmVzdHJpY3Rpb25zLlN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgU3liYXNlIGhlcmVieSBncmFudHMgWW91LCBlZmZlY3RpdmUgb24gdGhlIGRhdGUgWW91IGFjY2VwdCB0aGlzIExpY2Vuc2UgYW5kIGRvd25sb2FkIHRoZSBPcmlnaW5hbCBDb2RlLCBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCB0byB0aGUgZXh0ZW50IG9mIFN5YmFzZWBzIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgY29weXJpZ2h0cyBjb3ZlcmluZyB0aGUgT3JpZ2luYWwgQ29kZSwgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworCisyLjEgWW91IG1heSB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIE9yaWdpbmFsIENvZGUsIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBzb2xlbHkgZm9yIFlvdXIgaW50ZXJuYWwgcmVzZWFyY2ggYW5kIGRldmVsb3BtZW50IGFuZC9vciBQZXJzb25hbCBVc2UsIHByb3ZpZGVkIHRoYXQgaW4gZWFjaCBpbnN0YW5jZToKKworKGEpIFlvdSBtdXN0IHJldGFpbiBhbmQgcmVwcm9kdWNlIGluIGFsbCBjb3BpZXMgb2YgT3JpZ2luYWwgQ29kZSB0aGUgY29weXJpZ2h0IGFuZCBvdGhlciBwcm9wcmlldGFyeSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycyBvZiBTeWJhc2UgYXMgdGhleSBhcHBlYXIgaW4gdGhlIE9yaWdpbmFsIENvZGUsIGFuZCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyBpbiB0aGUgT3JpZ2luYWwgQ29kZSB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZTsgYW5kIAorCisoYikgWW91IG11c3QgcmV0YWluIGFuZCByZXByb2R1Y2UgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgU291cmNlIENvZGUgb2YgQ292ZXJlZCBDb2RlIGFuZCBkb2N1bWVudGF0aW9uIFlvdSBkaXN0cmlidXRlLCBhbmQgWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBzdWNoIFNvdXJjZSBDb2RlIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLCBleGNlcHQgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNi4KKworKGMpIFdoZW5ldmVyIHJlYXNvbmFibHkgZmVhc2libGUgeW91IHNob3VsZCBpbmNsdWRlIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZSBpbiBhIGNsaWNrLXdyYXAgZm9ybWF0LCB3aGljaCByZXF1aXJlcyBhZmZpcm1hdGl2ZSBhY2NlcHRhbmNlIGJ5IGNsaWNraW5nIG9uIGFuICJJIGFjY2VwdCIgYnV0dG9uIG9yIHNpbWlsYXIgbWVjaGFuaXNtLiBJZiBhIGNsaWNrLXdyYXAgZm9ybWF0IGlzIG5vdCBpbmNsdWRlZCwgeW91IG11c3QgaW5jbHVkZSBhIHN0YXRlbWVudCB0aGF0IGFueSB1c2UgKGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24gb3IgZGlzdHJpYnV0aW9uKSBvZiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgb3RoZXIgYWZmaXJtYXRpdmUgYWN0IHRoYXQgeW91IGRlZmluZSwgY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGUgTGljZW5zZSwgYW5kIGluc3RydWN0aW5nIHRoZSB1c2VyIG5vdCB0byB1c2UgdGhlIENvdmVyZWQgQ29kZSBpbiBhbnkgbWFubmVyIGlmIHRoZSB1c2VyIGRvZXMgbm90IGFjY2VwdCBhbGwgb2YgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLgorCisKKzIuMiBZb3UgbWF5IHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBtb2RpZnkgYW5kIERlcGxveSBDb3ZlcmVkIENvZGUsIHByb3ZpZGVkIHRoYXQgaW4gZWFjaCBpbnN0YW5jZToKKworKGEpIFlvdSBtdXN0IHNhdGlzZnkgYWxsIHRoZSBjb25kaXRpb25zIG9mIFNlY3Rpb24gMi4xIHdpdGggcmVzcGVjdCB0byB0aGUgU291cmNlIENvZGUgb2YgdGhlIENvdmVyZWQgQ29kZTsgCisKKyhiKSBZb3UgbXVzdCBkdXBsaWNhdGUsIHRvIHRoZSBleHRlbnQgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdCwgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiBhbGwgWW91ciBNb2RpZmljYXRpb25zLCBhbmQgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2U7IAorCisoYykgWW91IG11c3QgbWFrZSBTb3VyY2UgQ29kZSBvZiBhbGwgWW91ciBEZXBsb3llZCBNb2RpZmljYXRpb25zIHB1YmxpY2x5IGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGxpY2Vuc2UgZ3JhbnRzIHNldCBmb3J0aCBpbiBTZWN0aW9uIDMgYmVsb3csIGZvciBhcyBsb25nIGFzIHlvdSBEZXBsb3kgdGhlIENvdmVyZWQgQ29kZSBvciB0d2VsdmUgKDEyKSBtb250aHMgZnJvbSB0aGUgZGF0ZSBvZiBpbml0aWFsIERlcGxveW1lbnQsIHdoaWNoZXZlciBpcyBsb25nZXIuIFlvdSBzaG91bGQgcHJlZmVyYWJseSBkaXN0cmlidXRlIHRoZSBTb3VyY2UgQ29kZSBvZiBZb3VyIERlcGxveWVkIE1vZGlmaWNhdGlvbnMgZWxlY3Ryb25pY2FsbHkgKGUuZy4gZG93bmxvYWQgZnJvbSBhIHdlYiBzaXRlKTsgCisKKyhkKSBpZiBZb3UgRGVwbG95IENvdmVyZWQgQ29kZSBpbiBvYmplY3QgY29kZSwgZXhlY3V0YWJsZSBmb3JtIG9ubHksIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgbm90aWNlLCBpbiB0aGUgY29kZSBpdHNlbGYgYXMgd2VsbCBhcyBpbiByZWxhdGVkIGRvY3VtZW50YXRpb24sIHN0YXRpbmcgdGhhdCBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggaW5mb3JtYXRpb24gb24gaG93IGFuZCB3aGVyZSB0byBvYnRhaW4gc3VjaCBTb3VyY2UgQ29kZTsgYW5kIAorCisoZSkgdGhlIG9iamVjdCBjb2RlIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgWW91ciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQgc3VjaCBsaWNlbnNlIGFncmVlbWVudCBjb250YWlucyB0ZXJtcyBubyBsZXNzIHByb3RlY3RpdmUgb2YgU3liYXNlIGFuZCBlYWNoIENvbnRyaWJ1dG9yIHRoYW4gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHN0YXRpbmcgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5LgorCisKKzIuMyBZb3UgZXhwcmVzc2x5IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IGFsdGhvdWdoIFN5YmFzZSBhbmQgZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIHRoZWlyIHJlc3BlY3RpdmUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBTeWJhc2Ugb3IgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIENvdmVyZWQgQ29kZSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gU3liYXNlIGFuZCBlYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltIGFueSBsaWFiaWxpdHkgdG8gWW91IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgWW91IGhlcmVieSBhc3N1bWUgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFlvdSB0byBkaXN0cmlidXRlIHRoZSBDb3ZlcmVkIENvZGUsIGl0IGlzIFlvdXIgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlIGRpc3RyaWJ1dGluZyB0aGUgQ292ZXJlZCBDb2RlLgorCisKKzMuIFlvdXIgR3JhbnRzLiBJbiBjb25zaWRlcmF0aW9uIG9mLCBhbmQgYXMgYSBjb25kaXRpb24gdG8sIHRoZSBsaWNlbnNlcyBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBoZXJlYnkgZ3JhbnQgdG8gU3liYXNlIGFuZCBhbGwgdGhpcmQgcGFydGllcyBhIG5vbi1leGNsdXNpdmUsIHJveWFsdHktZnJlZSBsaWNlbnNlLCB1bmRlciBZb3VyIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQpIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgWW91LCB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zIG9mIHRoZSBzYW1lIHNjb3BlIGFuZCBleHRlbnQgYXMgU3liYXNlYHMgbGljZW5zZXMgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZCAyLjIuCisKKworNC4gTGFyZ2VyIFdvcmtzLiBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBlYWNoIHN1Y2ggaW5zdGFuY2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YuCisKKworNS4gTGltaXRhdGlvbnMgb24gUGF0ZW50IExpY2Vuc2UuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb24gMiwgbm8gb3RoZXIgcGF0ZW50IHJpZ2h0cywgZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBTeWJhc2UgaGVyZWluLiBNb2RpZmljYXRpb25zIGFuZC9vciBMYXJnZXIgV29ya3MgbWF5IHJlcXVpcmUgYWRkaXRpb25hbCBwYXRlbnQgbGljZW5zZXMgZnJvbSBTeWJhc2Ugd2hpY2ggU3liYXNlIG1heSBncmFudCBpbiBpdHMgc29sZSBkaXNjcmV0aW9uLgorCisKKzYuIEFkZGl0aW9uYWwgVGVybXMuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIG90aGVyIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcyBMaWNlbnNlICgiQWRkaXRpb25hbCBUZXJtcyIpIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmIGFuZCBhcyBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIGFuZCBub3Qgb24gYmVoYWxmIG9mIFN5YmFzZSBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG9idGFpbiB0aGUgcmVjaXBpZW50YHMgYWdyZWVtZW50IHRoYXQgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcyBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kIGFuZCBob2xkIFN5YmFzZSBhbmQgZXZlcnkgQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QgU3liYXNlIG9yIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uIG9mIGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMuCisKKworNy4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFN5YmFzZSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBPbmNlIE9yaWdpbmFsIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSwgWW91IG1heSBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBwdWJsaXNoZWQgYnkgU3liYXNlLiBObyBvbmUgb3RoZXIgdGhhbiBTeWJhc2UgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisKKzguIE5PIFdBUlJBTlRZIE9SIFNVUFBPUlQuIFRoZSBDb3ZlcmVkIENvZGUgbWF5IGNvbnRhaW4gaW4gd2hvbGUgb3IgaW4gcGFydCBwcmUtcmVsZWFzZSwgdW50ZXN0ZWQsIG9yIG5vdCBmdWxseSB0ZXN0ZWQgd29ya3MuIFRoZSBDb3ZlcmVkIENvZGUgbWF5IGNvbnRhaW4gZXJyb3JzIHRoYXQgY291bGQgY2F1c2UgZmFpbHVyZXMgb3IgbG9zcyBvZiBkYXRhLCBhbmQgbWF5IGJlIGluY29tcGxldGUgb3IgY29udGFpbiBpbmFjY3VyYWNpZXMuIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgdXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUsIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YsIGlzIGF0IFlvdXIgc29sZSBhbmQgZW50aXJlIHJpc2suIFRIRSBDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSwgVVBHUkFERVMgT1IgU1VQUE9SVCBPRiBBTlkgS0lORCBBTkQgU1lCQVNFIEFORCBTWUJBU0VgUyBMSUNFTlNPUihTKSAoQ09MTEVDVElWRUxZIFJFRkVSUkVEIFRPIEFTICJTWUJBU0UiIEZPUiBUSEUgUFVSUE9TRVMgT0YgU0VDVElPTlMgOCBBTkQgOSkgQU5EIEFMTCBDT05UUklCVVRPUlMgRVhQUkVTU0xZIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgT0YgU0FUSVNGQUNUT1JZIFFVQUxJVFksIE9GIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPRiBBQ0NVUkFDWSwgT0YgUVVJRVQgRU5KT1lNRU5ULCBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4gU1lCQVNFIEFORCBFQUNIIENPTlRSSUJVVE9SIERPRVMgTk9UIFdBUlJBTlQgQUdBSU5TVCBJTlRFUkZFUkVOQ0UgV0lUSCBZT1VSIEVOSk9ZTUVOVCBPRiBUSEUgQ09WRVJFRCBDT0RFLCBUSEFUIFRIRSBGVU5DVElPTlMgQ09OVEFJTkVEIElOIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBNRUVUIFlPVVIgUkVRVUlSRU1FTlRTLCBUSEFUIFRIRSBPUEVSQVRJT04gT0YgVEhFIENPVkVSRUQgQ09ERSBXSUxMIEJFIFVOSU5URVJSVVBURUQgT1IgRVJST1ItRlJFRSwgT1IgVEhBVCBERUZFQ1RTIElOIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBCRSBDT1JSRUNURUQuIE5PIE9SQUwgT1IgV1JJVFRFTiBJTkZPUk1BVElPTiBPUiBBRFZJQ0UgR0lWRU4gQlkgU1lCQVNFLCBBIFNZQkFTRSBBVVRIT1JJWkVEIFJFUFJFU0VOVEFUSVZFIE9SIEFOWSBDT05UUklCVVRPUiBTSEFMTCBDUkVBVEUgQSBXQVJSQU5UWS4gWW91IGFja25vd2xlZGdlIHRoYXQgdGhlIENvdmVyZWQgQ29kZSBpcyBub3QgaW50ZW5kZWQgZm9yIHVzZSBpbiB0aGUgb3BlcmF0aW9uIG9mIG51Y2xlYXIgZmFjaWxpdGllcywgYWlyY3JhZnQgbmF2aWdhdGlvbiwgY29tbXVuaWNhdGlvbiBzeXN0ZW1zLCBvciBhaXIgdHJhZmZpYyBjb250cm9sIG1hY2hpbmVzIGluIHdoaWNoIGNhc2UgdGhlIGZhaWx1cmUgb2YgdGhlIENvdmVyZWQgQ29kZSBjb3VsZCBsZWFkIHRvIGRlYXRoLCBwZXJzb25hbCBpbmp1cnksIG9yIHNldmVyZSBwaHlzaWNhbCBvciBlbnZpcm9ubWVudGFsIGRhbWFnZS4KKworCis5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4gVE8gVEhFIEVYVEVOVCBOT1QgUFJPSElCSVRFRCBCWSBMQVcsIElOIE5PIEVWRU5UIFNIQUxMIFNZQkFTRSBPUiBBTlkgQ09OVFJJQlVUT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBJTkRJUkVDVCwgQ09OU0VRVUVOVElBTCBPUiBPVEhFUiBEQU1BR0VTIE9GIEFOWSBLSU5EIEFSSVNJTkcgT1VUIE9GIE9SIFJFTEFUSU5HIFRPIFRISVMgTElDRU5TRSBPUiBZT1VSIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBDT1ZFUkVEIENPREUsIE9SIEFOWSBQT1JUSU9OIFRIRVJFT0YsIFdIRVRIRVIgVU5ERVIgQSBUSEVPUlkgT0YgQ09OVFJBQ1QsIFdBUlJBTlRZLCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFBST0RVQ1RTIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYgU1lCQVNFIE9SIFNVQ0ggQ09OVFJJQlVUT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLCBBTkQgTk9UV0lUSFNUQU5ESU5HIFRIRSBGQUlMVVJFIE9GIEVTU0VOVElBTCBQVVJQT1NFIE9GIEFOWSBSRU1FRFkuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIExJTUlUQVRJT04gT0YgTElBQklMSVRZIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBPUiBPVEhFUiBEQU1BR0VTIE9GIEFOWSBLSU5ELCBTTyBUSElTIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuIEluIG5vIGV2ZW50IHNoYWxsIFN5YmFzZWBzIG9yIGFueSBDb250cmlidXRvcmBzIHRvdGFsIGxpYWJpbGl0eSB0byBZb3UgZm9yIGFsbCBkYW1hZ2VzIChvdGhlciB0aGFuIGFzIG1heSBiZSByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdykgdW5kZXIgdGhpcyBMaWNlbnNlIGV4Y2VlZCB0aGUgYW1vdW50IG9mIGZpdmUgaHVuZHJlZCBkb2xsYXJzICgkNTAwLjAwKS4KKworCisxMC4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZSB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzICJTeWJhc2UiIG9yIGFueSBvdGhlciB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzIGJlbG9uZ2luZyB0byBTeWJhc2UgKGNvbGxlY3RpdmVseSAiU3liYXNlIE1hcmtzIikgb3IgdG8gYW55IHRyYWRlbWFyayBvciB0cmFkZSBuYW1lIGJlbG9uZ2luZyB0byBhbnkgQ29udHJpYnV0b3IoIkNvbnRyaWJ1dG9yIE1hcmtzIikuIE5vIFN5YmFzZSBNYXJrcyBvciBDb250cmlidXRvciBNYXJrcyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlIG9yIENvdmVyZWQgQ29kZSBvdGhlciB0aGFuIHdpdGggdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBTeWJhc2Ugb3IgdGhlIENvbnRyaWJ1dG9yLCBhcyBhcHBsaWNhYmxlLgorCisKKzExLiBPd25lcnNoaXAuIFN1YmplY3QgdG8gdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byBhbnkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2ggQ29udHJpYnV0b3IuIFN5YmFzZSByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgb3Igb24gYmVoYWxmIG9mIFN5YmFzZSAoIlN5YmFzZSBNb2RpZmljYXRpb25zIiksIGFuZCBzdWNoIFN5YmFzZSBNb2RpZmljYXRpb25zIHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuIFN5YmFzZSBtYXksIGF0IGl0cyBzb2xlIGRpc2NyZXRpb24sIGNob29zZSB0byBsaWNlbnNlIHN1Y2ggU3liYXNlIE1vZGlmaWNhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLCBvciBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlIG9yIG1heSBjaG9vc2Ugbm90IHRvIGxpY2Vuc2UgdGhlbSBhdCBhbGwuCisKKzEyLiBUZXJtaW5hdGlvbi4KKworCisxMi4xIFRlcm1pbmF0aW9uLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGU6CisKKyhhKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSB0ZXJtKHMpIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggYnJlYWNoOworCisoYikgaW1tZWRpYXRlbHkgaW4gdGhlIGV2ZW50IG9mIHRoZSBjaXJjdW1zdGFuY2VzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEzLjUoYik7IG9yCisKKyhjKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGlmIFlvdSwgYXQgYW55IHRpbWUgZHVyaW5nIHRoZSB0ZXJtIG9mIHRoaXMgTGljZW5zZSwgY29tbWVuY2UgYW4gYWN0aW9uIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50IChpbmNsdWRpbmcgYXMgYSBjcm9zcyBjbGFpbSBvciBjb3VudGVyY2xhaW0pIGFnYWluc3QgU3liYXNlIG9yIGFueSBDb250cmlidXRvci4KKworCisxMi4yIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi4gVXBvbiB0ZXJtaW5hdGlvbiwgWW91IGFncmVlIHRvIGltbWVkaWF0ZWx5IHN0b3AgYW55IGZ1cnRoZXIgdXNlLCByZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiwgc3VibGljZW5zaW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBhbmQgdG8gZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgaGF2ZSBiZWVuIHByb3Blcmx5IGdyYW50ZWQgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIHNob3VsZCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gU2VjdGlvbnMgMywgNSwgOCwgOSwgMTAsIDExLCAxMi4yIGFuZCAxMy4gTm8gcGFydHkgd2lsbCBiZSBsaWFibGUgdG8gYW55IG90aGVyIGZvciBjb21wZW5zYXRpb24sIGluZGVtbml0eSBvciBkYW1hZ2VzIG9mIGFueSBzb3J0IHNvbGVseSBhcyBhIHJlc3VsdCBvZiB0ZXJtaW5hdGluZyB0aGlzIExpY2Vuc2UgaW4gYWNjb3JkYW5jZSB3aXRoIGl0cyB0ZXJtcywgYW5kIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIGJlIHdpdGhvdXQgcHJlanVkaWNlIHRvIGFueSBvdGhlciByaWdodCBvciByZW1lZHkgb2YgYW55IHBhcnR5LgorCisKKzEzLiBNaXNjZWxsYW5lb3VzLgorCisKKzEzLjEgR292ZXJubWVudCBFbmQgVXNlcnMuIFRoZSBDb3ZlcmVkIENvZGUgaXMgYSAiY29tbWVyY2lhbCBpdGVtIiBhcyBkZWZpbmVkIGluIEZBUiAyLjEwMS4gR292ZXJubWVudCBzb2Z0d2FyZSBhbmQgdGVjaG5pY2FsIGRhdGEgcmlnaHRzIGluIHRoZSBDb3ZlcmVkIENvZGUgaW5jbHVkZSBvbmx5IHRob3NlIHJpZ2h0cyBjdXN0b21hcmlseSBwcm92aWRlZCB0byB0aGUgcHVibGljIGFzIGRlZmluZWQgaW4gdGhpcyBMaWNlbnNlLiBUaGlzIGN1c3RvbWFyeSBjb21tZXJjaWFsIGxpY2Vuc2UgaW4gdGVjaG5pY2FsIGRhdGEgYW5kIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGluIGFjY29yZGFuY2Ugd2l0aCBGQVIgMTIuMjExIChUZWNobmljYWwgRGF0YSkgYW5kIDEyLjIxMiAoQ29tcHV0ZXIgU29mdHdhcmUpIGFuZCwgZm9yIERlcGFydG1lbnQgb2YgRGVmZW5zZSBwdXJjaGFzZXMsIERGQVIgMjUyLjIyNy03MDE1IChUZWNobmljYWwgRGF0YSAtLSBDb21tZXJjaWFsIEl0ZW1zKSBhbmQgMjI3LjcyMDItMyAoUmlnaHRzIGluIENvbW1lcmNpYWwgQ29tcHV0ZXIgU29mdHdhcmUgb3IgQ29tcHV0ZXIgU29mdHdhcmUgRG9jdW1lbnRhdGlvbikuIEFjY29yZGluZ2x5LCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKworMTMuMiBSZWxhdGlvbnNoaXAgb2YgUGFydGllcy4gVGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcyBjcmVhdGluZyBhbiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBqb2ludCB2ZW50dXJlIG9yIGFueSBvdGhlciBmb3JtIG9mIGxlZ2FsIGFzc29jaWF0aW9uIGJldHdlZW4gb3IgYW1vbmcgeW91LCBTeWJhc2Ugb3IgYW55IENvbnRyaWJ1dG9yLCBhbmQgWW91IHdpbGwgbm90IHJlcHJlc2VudCB0byB0aGUgY29udHJhcnksIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgYXBwZWFyYW5jZSBvciBvdGhlcndpc2UuCisKKworMTMuMyBJbmRlcGVuZGVudCBEZXZlbG9wbWVudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugd2lsbCBpbXBhaXIgU3liYXNlYHMgb3IgYW55IENvbnRyaWJ1dG9yYHMgcmlnaHQgdG8gYWNxdWlyZSwgbGljZW5zZSwgZGV2ZWxvcCwgaGF2ZSBvdGhlcnMgZGV2ZWxvcCBmb3IgaXQsIG1hcmtldCBhbmQvb3IgZGlzdHJpYnV0ZSB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgcGVyZm9ybSB0aGUgc2FtZSBvciBzaW1pbGFyIGZ1bmN0aW9ucyBhcywgb3Igb3RoZXJ3aXNlIGNvbXBldGUgd2l0aCwgTW9kaWZpY2F0aW9ucywgTGFyZ2VyIFdvcmtzLCB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgWW91IG1heSBkZXZlbG9wLCBwcm9kdWNlLCBtYXJrZXQgb3IgZGlzdHJpYnV0ZS4KKworCisxMy40IFdhaXZlcjsgQ29uc3RydWN0aW9uLiBGYWlsdXJlIGJ5IFN5YmFzZSBvciBhbnkgQ29udHJpYnV0b3IgdG8gZW5mb3JjZSBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBkZWVtZWQgYSB3YWl2ZXIgb2YgZnV0dXJlIGVuZm9yY2VtZW50IG9mIHRoYXQgb3IgYW55IG90aGVyIHByb3Zpc2lvbi4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgd2lsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisKKzEzLjUgU2V2ZXJhYmlsaXR5LiAoYSkgSWYgZm9yIGFueSByZWFzb24gYSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uIGZpbmRzIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBvciBwb3J0aW9uIHRoZXJlb2YsIHRvIGJlIHVuZW5mb3JjZWFibGUsIHRoYXQgcHJvdmlzaW9uIG9mIHRoZSBMaWNlbnNlIHdpbGwgYmUgZW5mb3JjZWQgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pc3NpYmxlIHNvIGFzIHRvIGVmZmVjdCB0aGUgZWNvbm9taWMgYmVuZWZpdHMgYW5kIGludGVudCBvZiB0aGUgcGFydGllcywgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0LiAoYikgTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIGlmIGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBvciByZXN0cmljdHMgWW91IGZyb20gZnVsbHkgYW5kL29yIHNwZWNpZmljYWxseSBjb21wbHlpbmcgd2l0aCBTZWN0aW9ucyAyIGFuZC9vciAzIG9yIHByZXZlbnRzIHRoZSBlbmZvcmNlYWJpbGl0eSBvZiBlaXRoZXIgb2YgdGhvc2UgU2VjdGlvbnMsIHRoaXMgTGljZW5zZSB3aWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSBhbmQgWW91IG11c3QgaW1tZWRpYXRlbHkgZGlzY29udGludWUgYW55IHVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGFuZCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgaXQgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuCisKKworMTMuNiBEaXNwdXRlIFJlc29sdXRpb24uIEFueSBsaXRpZ2F0aW9uIG9yIG90aGVyIGRpc3B1dGUgcmVzb2x1dGlvbiBiZXR3ZWVuIFlvdSBhbmQgU3liYXNlIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCB0YWtlIHBsYWNlIGluIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCBhbmQgWW91IGFuZCBTeWJhc2UgaGVyZWJ5IGNvbnNlbnQgdG8gdGhlIHBlcnNvbmFsIGp1cmlzZGljdGlvbiBvZiwgYW5kIHZlbnVlIGluLCB0aGUgc3RhdGUgYW5kIGZlZGVyYWwgY291cnRzIHdpdGhpbiB0aGF0IERpc3RyaWN0IHdpdGggcmVzcGVjdCB0byB0aGlzIExpY2Vuc2UuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLgorCisKKzEzLjcgRW50aXJlIEFncmVlbWVudDsgR292ZXJuaW5nIExhdy4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGV4Y2VwdCB0aGF0IGJvZHkgb2YgQ2FsaWZvcm5pYSBsYXcgY29uY2VybmluZyBjb25mbGljdHMgb2YgbGF3LgorV2hlcmUgWW91IGFyZSBsb2NhdGVkIGluIHRoZSBwcm92aW5jZSBvZiBRdWViZWMsIENhbmFkYSwgdGhlIGZvbGxvd2luZyBjbGF1c2UgYXBwbGllczogVGhlIHBhcnRpZXMgaGVyZWJ5IGNvbmZpcm0gdGhhdCB0aGV5IGhhdmUgcmVxdWVzdGVkIHRoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbGwgcmVsYXRlZCBkb2N1bWVudHMgYmUgZHJhZnRlZCBpbiBFbmdsaXNoLiBMZXMgcGFydGllcyBvbnQgZXhpZyYjMjMyOyBxdWUgbGUgcHImIzIzMjtzZW50IGNvbnRyYXQgZXQgdG91cyBsZXMgZG9jdW1lbnRzIGNvbm5leGVzIHNvaWVudCByJiMyMzI7ZGkmIzIzMjtzIGVuIGFuZ2xhaXMuCisKKworRVhISUJJVCBBLiAKKworIlBvcnRpb25zIENvcHlyaWdodCAoYykgMTk4My0yMDAyIFN5YmFzZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorVGhpcyBmaWxlIGNvbnRhaW5zIE9yaWdpbmFsIENvZGUgYW5kL29yIE1vZGlmaWNhdGlvbnMgb2YgT3JpZ2luYWwgQ29kZSBhcyBkZWZpbmVkIGluIGFuZCB0aGF0IGFyZSBzdWJqZWN0IHRvIHRoZSBTeWJhc2UgT3BlbiBXYXRjb20gUHVibGljIExpY2Vuc2UgdmVyc2lvbiAxLjAgKHRoZSBgTGljZW5zZWApLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIEJZIFVTSU5HIFRISVMgRklMRSBZT1UgQUdSRUUgVE8gQUxMIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRIRSBMSUNFTlNFLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgcHJvdmlkZWQgd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IHd3dy5zeWJhc2UuY29tL2RldmVsb3Blci9vcGVuc291cmNlLiAKKworVGhlIE9yaWdpbmFsIENvZGUgYW5kIGFsbCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBhcmUgZGlzdHJpYnV0ZWQgb24gYW4gYEFTIElTYCBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgQU5EIFNZQkFTRSBBTkQgQUxMIENPTlRSSUJVVE9SUyBIRVJFQlkgRElTQ0xBSU0gQUxMIFNVQ0ggV0FSUkFOVElFUywgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgUVVJRVQgRU5KT1lNRU5UIE9SIE5PTi1JTkZSSU5HRU1FTlQuIFBsZWFzZSBzZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWEZyZWU4Ni0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1hGcmVlODYtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZjNiZjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1hGcmVlODYtMS4wCkBAIC0wLDAgKzEsMjIgQEAKK0NvcHlyaWdodCAoQykgMTk5NC0yMDAzIFRoZSBYRnJlZTg2IFByb2plY3QsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgordGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KK3RoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KK3VzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCitvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8KK3NvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCitjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK1hGUkVFODYgUFJPSkVDVCBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0FOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCitFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiB0aGUgWEZyZWU4NiBQcm9qZWN0IHNoYWxsIG5vdAorYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzCitpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gdGhlIFhGcmVlODYgUHJvamVjdC4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWEZyZWU4Ni0xLjEgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1hGcmVlODYtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYTVjYjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1hGcmVlODYtMS4xCkBAIC0wLDAgKzEsMTggQEAKKworWEZyZWU4NiBMaWNlbnNlICh2ZXJzaW9uIDEuMSkKKworQ29weXJpZ2h0IChDKSAxOTk0LTIwMDYgVGhlIFhGcmVlODYgUHJvamVjdCwgSW5jLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiwgYW5kIGluIHRoZSBzYW1lIHBsYWNlIGFuZCBmb3JtIGFzIG90aGVyIGNvcHlyaWdodCwgbGljZW5zZSBhbmQgZGlzY2xhaW1lciBpbmZvcm1hdGlvbi4KKworMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IFRoZSBYRnJlZTg2IFByb2plY3QsIEluYyAoaHR0cDovL3d3dy54ZnJlZTg2Lm9yZy8pIGFuZCBpdHMgY29udHJpYnV0b3JzIiwgaW4gdGhlIHNhbWUgcGxhY2UgYW5kIGZvcm0gYXMgb3RoZXIgdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzLiBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsIGluIHRoZSBzYW1lIGZvcm0gYW5kIGxvY2F0aW9uIGFzIG90aGVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzLgorCis0LiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiBUaGUgWEZyZWU4NiBQcm9qZWN0LCBJbmMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gVGhlIFhGcmVlODYgUHJvamVjdCwgSW5jLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVNgYCBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBYRlJFRTg2IFBST0pFQ1QsIElOQyBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1hTTCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWFNMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhODJkNjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1hTTApAQCAtMCwwICsxLDQ4IEBACitDb3B5cmlnaHQKKy0tLS0tLS0tLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMDcgTm9ybWFuIFdhbHNoCitDb3B5cmlnaHQgKEMpIDIwMDMgSmnFmcOtIEtvc2VrCitDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBTdGV2ZSBCYWxsCitDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBUaGUgRG9jQm9vayBQcm9qZWN0CitDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBPJ1JlaWxseSBNZWRpYQorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KK2ZpbGVzICh0aGUgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCitjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKK3NlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCitTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZXMgb2YgaW5kaXZpZHVhbHMKK2NyZWRpdGVkIHdpdGggY29udHJpYnV0aW9uIHRvIHRoaXMgc29mdHdhcmUgc2hhbGwgbm90IGJlIHVzZWQgaW4KK2FkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIKK2RlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24KK2Zyb20gdGhlIGluZGl2aWR1YWxzIGluIHF1ZXN0aW9uLgorCitBbnkgc3R5bGVzaGVldCBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB0aGF0IGlzIHB1YmxpY2FsbHkKK2Rpc3RyaWJ1dGVkIHdpbGwgYmUgaWRlbnRpZmllZCB3aXRoIGEgZGlmZmVyZW50IG5hbWUgYW5kIHRoZQordmVyc2lvbiBzdHJpbmdzIGluIGFueSBkZXJpdmVkIFNvZnR3YXJlIHdpbGwgYmUgY2hhbmdlZCBzbyB0aGF0CitubyBwb3NzaWJpbGl0eSBvZiBjb25mdXNpb24gYmV0d2VlbiB0aGUgZGVyaXZlZCBwYWNrYWdlIGFuZCB0aGlzCitTb2Z0d2FyZSB3aWxsIGV4aXN0LgorCitXYXJyYW50eQorLS0tLS0tLS0KK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCitPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgTk9STUFOIFdBTFNIIE9SIEFOWSBPVEhFUgorQ09OVFJJQlVUT1IgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCitGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCitPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKK0NvbnRhY3RpbmcgdGhlIEF1dGhvcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgRG9jQm9vayBYU0wgc3R5bGVzaGVldHMgYXJlIG1haW50YWluZWQgYnkgTm9ybWFuIFdhbHNoLAorPG5kd0Bud2Fsc2guY29tPiwgYW5kIG1lbWJlcnMgb2YgdGhlIERvY0Jvb2sgUHJvamVjdCwKKzxkb2Nib29rLWRldmVsb3BlcnNAc2YubmV0PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9YbmV0IGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9YbmV0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NDRlZGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1huZXQKQEAgLTAsMCArMSwyNyBAQAorCitUaGUgWC5OZXQsIEluYy4gTGljZW5zZQorVGhpcyBMaWNlbnNlIGhhcyBiZWVuIHZvbHVudGFyaWx5IGRlcHJlY2F0ZWQgYnkgaXRzIGF1dGhvci4KKworQ29weXJpZ2h0IChjKSAyMDAwLTIwMDEgWC5OZXQsIEluYy4gTGFmYXlldHRlLCBDYWxpZm9ybmlhLCBVU0EKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCisKK1RoaXMgYWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGluIGFsbCByZXNwZWN0cyBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YKK0NhbGlmb3JuaWEgYW5kIGJ5IHRoZSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWVBMLTEuMSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWVBMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTE4ODBhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9ZUEwtMS4xCkBAIC0wLDAgKzEsMzAgQEAKKworWWFob28hIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDEuMSAoWVBMKQorVGhpcyBZYWhvbyEgUHVibGljIExpY2Vuc2UgKHRoaXMgIkFncmVlbWVudCIpIGlzIGEgbGVnYWwgYWdyZWVtZW50IHRoYXQgZGVzY3JpYmVzIHRoZSB0ZXJtcyB1bmRlciB3aGljaCBZYWhvbyEgSW5jLiwgYSBEZWxhd2FyZSBjb3Jwb3JhdGlvbiBoYXZpbmcgaXRzIHByaW5jaXBhbCBwbGFjZSBvZiBidXNpbmVzcyBhdCA3MDEgRmlyc3QgQXZlbnVlLCBTdW5ueXZhbGUsIENhbGlmb3JuaWEgOTQwODkgKCJZYWhvbyEiKSB3aWxsIHByb3ZpZGUgc29mdHdhcmUgdG8geW91IHZpYSBkb3dubG9hZCBvciBvdGhlcndpc2UgKCJTb2Z0d2FyZSIpLiBCeSB1c2luZyB0aGUgU29mdHdhcmUsIHlvdSwgYW4gaW5kaXZpZHVhbCBvciBhbiBlbnRpdHkgKCJZb3UiKSBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgdGhlIG11dHVhbCBwcm9taXNlcyBhbmQgdXBvbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgc2V0IGZvcnRoIGJlbG93LCB0aGUgcGFydGllcyBhZ3JlZSBhcyBmb2xsb3dzOgorCitHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZQorMS4xIC0gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIFlhaG9vISBoZXJlYnkgZ3JhbnRzIHRvIFlvdSwgdW5kZXIgYW55IGFuZCBhbGwgb2YgaXRzIGNvcHlyaWdodCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIFNvZnR3YXJlLCBhIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSBsaWNlbnNlIHRvIGNvcHksIG1vZGlmeSwgY29tcGlsZSwgZXhlY3V0ZSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBNb2RpZmljYXRpb25zLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgQWdyZWVtZW50LCBhbnkgY2hhbmdlIHRvLCBhZGRpdGlvbiB0bywgb3IgYWJyaWRnZW1lbnQgb2YgdGhlIFNvZnR3YXJlIG1hZGUgYnkgWW91IGlzIGEgIk1vZGlmaWNhdGlvbjsiIGhvd2V2ZXIsIGFueSBmaWxlIFlvdSBhZGQgdG8gdGhlIFNvZnR3YXJlIHRoYXQgZG9lcyBub3QgY29udGFpbiBhbnkgcGFydCBvZiB0aGUgU29mdHdhcmUgaXMgbm90IGEgIk1vZGlmaWNhdGlvbi4iCisxLjIgLSBJZiBZb3UgYXJlIGFuIGluZGl2aWR1YWwgYWN0aW5nIG9uIGJlaGFsZiBvZiBhIGNvcnBvcmF0aW9uIG9yIG90aGVyIGVudGl0eSwgWW91ciB1c2Ugb2YgdGhlIFNvZnR3YXJlIG9yIGFueSBNb2RpZmljYXRpb24gaXMgc3ViamVjdCB0byBZb3VyIGhhdmluZyB0aGUgYXV0aG9yaXR5IHRvIGJpbmQgc3VjaCBjb3Jwb3JhdGlvbiBvciBlbnRpdHkgdG8gdGhpcyBBZ3JlZW1lbnQuIFByb3ZpZGluZyBjb3BpZXMgdG8gcGVyc29ucyB3aXRoaW4gc3VjaCBjb3Jwb3JhdGlvbiBvciBlbnRpdHkgaXMgbm90IGNvbnNpZGVyZWQgZGlzdHJpYnV0aW9uIGZvciBwdXJwb3NlcyBvZiB0aGlzIEFncmVlbWVudC4KKzEuMyAtIEZvciB0aGUgU29mdHdhcmUgb3IgYW55IE1vZGlmaWNhdGlvbiBZb3UgZGlzdHJpYnV0ZSBpbiBzb3VyY2UgY29kZSBmb3JtYXQsIFlvdSBtdXN0IGRvIHNvIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvbXBsZXRlIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgd2l0aCBZb3VyIGRpc3RyaWJ1dGlvbi4gV2l0aCByZXNwZWN0IHRvIGFueSBNb2RpZmljYXRpb24gWW91IGRpc3RyaWJ1dGUgaW4gc291cmNlIGNvZGUgZm9ybWF0LCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBhcHBseSB0byBZb3UgaW4gdGhlIHNhbWUgd2F5IHRob3NlIHRlcm1zIGFwcGx5IHRvIFlhaG9vISB3aXRoIHJlc3BlY3QgdG8gdGhlIFNvZnR3YXJlLiBJbiBvdGhlciB3b3Jkcywgd2hlbiBZb3UgYXJlIGRpc3RyaWJ1dGluZyBNb2RpZmljYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBZb3UgInN0YW5kIGluIHRoZSBzaG9lcyIgb2YgWWFob28hIGluIHRlcm1zIG9mIHRoZSByaWdodHMgWW91IGdyYW50IGFuZCBob3cgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGFwcGx5IHRvIFlvdSBhbmQgdGhlIGxpY2Vuc2VlcyBvZiBZb3VyIE1vZGlmaWNhdGlvbnMuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCB3aGVuIFlvdSAic3RhbmQgaW4gdGhlIHNob2VzIiBvZiBZYWhvbyEsIFlvdSBhcmUgbm90IHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBwcm92aXNpb24gdW5kZXIgU2VjdGlvbiA3LCB3aGljaCByZXF1aXJlcyBhbGwgZGlzcHV0ZXMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdG8gYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIGZlZGVyYWwgb3Igc3RhdGUgY291cnRzIG9mIG5vcnRoZXJuIENhbGlmb3JuaWEuCisxLjQgLSBGb3IgdGhlIFNvZnR3YXJlIG9yIGFueSBNb2RpZmljYXRpb24gWW91IGRpc3RyaWJ1dGUgaW4gY29tcGlsZWQgb3Igb2JqZWN0IGNvZGUgZm9ybWF0LCBZb3UgbXVzdCBhbHNvIHByb3ZpZGUgcmVjaXBpZW50cyB3aXRoIGFjY2VzcyB0byB0aGUgU29mdHdhcmUgb3IgTW9kaWZpY2F0aW9uIGluIHNvdXJjZSBjb2RlIGZvcm1hdCBhbG9uZyB3aXRoIGEgY29tcGxldGUgY29weSBvZiB0aGlzIEFncmVlbWVudC4gVGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUgb3IgTW9kaWZpY2F0aW9ucyBpbiBjb21waWxlZCBvciBvYmplY3QgY29kZSBmb3JtYXQgbWF5IGJlIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuIEluIGFkZGl0aW9uLCBZb3UgbXVzdCBtYWtlIGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgbGljZW5zZSB0ZXJtcyBhcHBseWluZyB0byBzdWNoIFNvZnR3YXJlIG9yIE1vZGlmaWNhdGlvbiB0aGF0IGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSBhbmQgbm90IGJ5IFlhaG9vISwgYW5kIHRoYXQgc3VjaCBsaWNlbnNlIGRvZXMgbm90IHJlc3RyaWN0IHJlY2lwaWVudHMgZnJvbSBleGVyY2lzaW5nIHJpZ2h0cyBpbiB0aGUgc291cmNlIGNvZGUgdG8gdGhlIFNvZnR3YXJlIGdyYW50ZWQgYnkgWWFob28hIHVuZGVyIHRoaXMgQWdyZWVtZW50IG9yIHJpZ2h0cyBpbiB0aGUgc291cmNlIGNvZGUgdG8gYW55IE1vZGlmaWNhdGlvbiBncmFudGVkIGJ5IFlvdSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAxLjMuCisxLjUgLSBUaGlzIEFncmVlbWVudCBkb2VzIG5vdCBsaW1pdCBZb3VyIHJpZ2h0IHRvIGRpc3RyaWJ1dGUgZmlsZXMgdGhhdCBhcmUgZW50aXJlbHkgWW91ciBvd24gd29yayAoaS5lLiwgd2hpY2ggZG8gbm90IGluY29ycG9yYXRlIGFueSBwb3J0aW9uIG9mIHRoZSBTb2Z0d2FyZSBhbmQgYXJlIG5vdCBNb2RpZmljYXRpb25zKSB1bmRlciBhbnkgdGVybXMgWW91IGNob29zZS4KK1N1cHBvcnQKK1lhaG9vISBoYXMgbm8gb2JsaWdhdGlvbiB0byBwcm92aWRlIHRlY2huaWNhbCBzdXBwb3J0IG9yIHVwZGF0ZXMgdG8gWW91LiBOb3RoaW5nIGluIHRoaXMgQWdyZWVtZW50IHJlcXVpcmVzIFlhaG9vISB0byBlbnRlciBpbnRvIGFueSBsaWNlbnNlIHdpdGggWW91IGZvciBhbnkgb3RoZXIgZWRpdGlvbiBvZiB0aGUgU29mdHdhcmUuCitJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzCiszLjEgLSBFeGNlcHQgZm9yIHRoZSBsaWNlbnNlIGV4cHJlc3NseSBncmFudGVkIHVuZGVyIGNvcHlyaWdodCBpbiBTZWN0aW9uIDEuMSwgbm8gcmlnaHRzLCBsaWNlbnNlcyBvciBmb3JiZWFyYW5jZXMgYXJlIGdyYW50ZWQgb3IgbWF5IGFyaXNlIGluIHJlbGF0aW9uIHRvIHRoaXMgQWdyZWVtZW50IHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXhoYXVzdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzLCBpbmNsdWRpbmcgYWxsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMsIHRoYXQgYXJlIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgaGVyZWJ5IHJlc2VydmVkLgorMy4yIC0gSW4gYW55IGNvcHkgb2YgdGhlIFNvZnR3YXJlIG9yIGluIGFueSBNb2RpZmljYXRpb24geW91IGNyZWF0ZSwgWW91IG11c3QgcmV0YWluIGFuZCByZXByb2R1Y2UsIGFueSBhbmQgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZCBhdHRyaWJ1dGlvbiBub3RpY2VzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBTb2Z0d2FyZSBpbiB0aGUgc2FtZSBmb3JtIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBTb2Z0d2FyZS4gVGhpcyBpbmNsdWRlcyB0aGUgcHJlc2VydmF0aW9uIG9mIGF0dHJpYnV0aW9uIG5vdGljZXMgaW4gdGhlIGZvcm0gb2YgdHJhZGVtYXJrcyBvciBsb2dvcyB0aGF0IGV4aXN0IHdpdGhpbiBhIHVzZXIgaW50ZXJmYWNlIG9mIHRoZSBTb2Z0d2FyZS4KKzMuMyAtIFRoaXMgbGljZW5zZSBkb2VzIG5vdCBncmFudCBZb3UgcmlnaHRzIHRvIHVzZSBhbnkgcGFydHlgcyBuYW1lLCBsb2dvLCBvciB0cmFkZW1hcmtzLCBleGNlcHQgc29sZWx5IGFzIG5lY2Vzc2FyeSB0byBjb21wbHkgd2l0aCBTZWN0aW9uIDMuMi4KK0Rpc2NsYWltZXIgb2YgV2FycmFudGllcworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQuIFlBSE9PISBNQUtFUyBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQsIE9SIFNUQVRVVE9SWSBSRUdBUkRJTkcgT1IgUkVMQVRJTkcgVE8gVEhFIFNPRlRXQVJFLiBTUEVDSUZJQ0FMTFksIFlBSE9PISBET0VTIE5PVCBXQVJSQU5UIFRIQVQgVEhFIFNPRlRXQVJFIFdJTEwgQkUgRVJST1IgRlJFRSBPUiBXSUxMIFBFUkZPUk0gSU4gQU4gVU5JTlRFUlJVUFRFRCBNQU5ORVIuIFRPIFRIRSBHUkVBVEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIFlBSE9PISBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSAoRVZFTiBJRiBZQUhPTyEgSEFEIEJFRU4gSU5GT1JNRUQgT0YgU1VDSCBQVVJQT1NFKSwgQU5EIE5PTklORlJJTkdFTUVOVCBXSVRIIFJFU1BFQ1QgVE8gVEhFIFNPRlRXQVJFLCBBTlkgTU9ESUZJQ0FUSU9OUyBUSEVSRVRPIEFORCBXSVRIIFJFU1BFQ1QgVE8gVEhFIFVTRSBPRiBUSEUgRk9SRUdPSU5HLgorTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkKK0lOIE5PIEVWRU5UIFdJTEwgWUFIT08hIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBLSU5EIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1MgT0YgUFJPRklUUywgTE9TUyBPRiBVU0UsIEJVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TUyBPRiBEQVRBLCBDT1NUIE9GIENPVkVSKSBJTiBDT05ORUNUSU9OIFdJVEggT1IgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRJTkcgVE8gVEhFIEZVUk5JU0hJTkcsIFBFUkZPUk1BTkNFIE9SIFVTRSBPRiBUSEUgU09GVFdBUkUgT1IgQU5ZIE9USEVSIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgV0hFVEhFUiBBTExFR0VEIEFTIEEgQlJFQUNIIE9GIENPTlRSQUNUIE9SIFRPUlRJT1VTIENPTkRVQ1QsIElOQ0xVRElORyBORUdMSUdFTkNFLCBBTkQgRVZFTiBJRiBZQUhPTyEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorVGVybSBhbmQgVGVybWluYXRpb24KKzYuMSAtIFRoaXMgQWdyZWVtZW50IHdpbGwgY29udGludWUgaW4gZWZmZWN0IHVubGVzcyBhbmQgdW50aWwgdGVybWluYXRlZCBlYXJsaWVyIHB1cnN1YW50IHRvIHRoaXMgU2VjdGlvbiA2LgorNi4yIC0gSW4gdGhlIGV2ZW50IFlvdSB2aW9sYXRlIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgWWFob28hIG1heSB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQuCis2LjMgLSBBbGwgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIgc2hhbGwgdGVybWluYXRlIHVwb24gdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LiBUZXJtaW5hdGlvbiB3aWxsIGJlIGluIGFkZGl0aW9uIHRvIGFueSByaWdodHMgYW5kIHJlbWVkaWVzIGF2YWlsYWJsZSB0byBZYWhvbyEgYXQgbGF3IG9yIGVxdWl0eSBvciB1bmRlciB0aGlzIEFncmVlbWVudC4KKzYuNCAtIFRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50IHdpbGwgbm90IGFmZmVjdCB0aGUgcHJvdmlzaW9ucyByZWdhcmRpbmcgcmVzZXJ2YXRpb24gb2YgcmlnaHRzIChTZWN0aW9uIDMuMSksIHByb3Zpc2lvbnMgZGlzY2xhaW1pbmcgb3IgbGltaXRpbmcgWWFob28hYHMgbGlhYmlsaXR5IChTZWN0aW9ucyA0IGFuZCA1KSwgVGVybWluYXRpb24gKFNlY3Rpb24gNikgb3IgTWlzY2VsbGFuZW91cyAoU2VjdGlvbiA3KSwgd2hpY2ggcHJvdmlzaW9ucyB3aWxsIHN1cnZpdmUgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuCitNaXNjZWxsYW5lb3VzCitUaGlzIEFncmVlbWVudCBjb250YWlucyB0aGUgZW50aXJlIGFncmVlbWVudCBvZiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBzdXBlcnNlZGVzIGFsbCBwcmV2aW91cyBjb21tdW5pY2F0aW9ucywgcmVwcmVzZW50YXRpb25zLCB1bmRlcnN0YW5kaW5ncyBhbmQgYWdyZWVtZW50cywgZWl0aGVyIG9yYWwgb3Igd3JpdHRlbiwgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gc2FpZCBzdWJqZWN0IG1hdHRlci4gVGhlIHJlbGF0aW9uc2hpcCBvZiB0aGUgcGFydGllcyBoZXJldW5kZXIgaXMgdGhhdCBvZiBpbmRlcGVuZGVudCBjb250cmFjdG9ycywgYW5kIHRoaXMgQWdyZWVtZW50IHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcyBjcmVhdGluZyBhbiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBqb2ludCB2ZW50dXJlIG9yIGFueSBvdGhlciBmb3JtIG9mIGxlZ2FsIGFzc29jaWF0aW9uIGJldHdlZW4gdGhlIHBhcnRpZXMuIElmIGFueSB0ZXJtLCBjb25kaXRpb24sIG9yIHByb3Zpc2lvbiBpbiB0aGlzIEFncmVlbWVudCBpcyBmb3VuZCB0byBiZSBpbnZhbGlkLCB1bmxhd2Z1bCBvciB1bmVuZm9yY2VhYmxlIHRvIGFueSBleHRlbnQsIHRoaXMgQWdyZWVtZW50IHdpbGwgYmUgY29uc3RydWVkIGluIGEgbWFubmVyIHRoYXQgbW9zdCBjbG9zZWx5IGVmZmVjdHVhdGVzIHRoZSBpbnRlbnQgb2YgdGhpcyBBZ3JlZW1lbnQuIFN1Y2ggaW52YWxpZCB0ZXJtLCBjb25kaXRpb24gb3IgcHJvdmlzaW9uIHdpbGwgYmUgc2V2ZXJlZCBmcm9tIHRoZSByZW1haW5pbmcgdGVybXMsIGNvbmRpdGlvbnMgYW5kIHByb3Zpc2lvbnMsIHdoaWNoIHdpbGwgY29udGludWUgdG8gYmUgdmFsaWQgYW5kIGVuZm9yY2VhYmxlIHRvIHRoZSBmdWxsZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LiBUaGlzIEFncmVlbWVudCB3aWxsIGJlIGludGVycHJldGVkIGFuZCBjb25zdHJ1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhIGFuZCB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCB3aXRob3V0IHJlZ2FyZCB0byBjb25mbGljdCBvZiBsYXcgcHJpbmNpcGxlcy4gVGhlIFUuTi4gQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgQWdyZWVtZW50LiBBbGwgZGlzcHV0ZXMgYXJpc2luZyBvdXQgb2YgdGhpcyBBZ3JlZW1lbnQgaW52b2x2aW5nIFlhaG9vISBvciBhbnkgb2YgaXRzIHN1YnNpZGlhcmllcyBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGZlZGVyYWwgb3Igc3RhdGUgY291cnRzIG9mIG5vcnRoZXJuIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLiBObyByaWdodHMgbWF5IGJlIGFzc2lnbmVkLCBubyBvYmxpZ2F0aW9ucyBtYXkgYmUgZGVsZWdhdGVkLCBhbmQgdGhpcyBBZ3JlZW1lbnQgbWF5IG5vdCBiZSB0cmFuc2ZlcnJlZCBieSBZb3UsIGluIHdob2xlIG9yIGluIHBhcnQsIHdoZXRoZXIgdm9sdW50YXJ5IG9yIGJ5IG9wZXJhdGlvbiBvZiBsYXcsIGluY2x1ZGluZyBieSB3YXkgb2Ygc2FsZSBvZiBhc3NldHMsIG1lcmdlciBvciBjb25zb2xpZGF0aW9uLCB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgWWFob28hLCBhbmQgYW55IHB1cnBvcnRlZCBhc3NpZ25tZW50LCBkZWxlZ2F0aW9uIG9yIHRyYW5zZmVyIHdpdGhvdXQgc3VjaCBjb25zZW50IHNoYWxsIGJlIHZvaWQgYWIgaW5pdGlvLiBBbnkgd2FpdmVyIG9mIHRoZSBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50IG9yIG9mIGEgcGFydHlgcyByaWdodHMgb3IgcmVtZWRpZXMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbiB3cml0aW5nIHRvIGJlIGVmZmVjdGl2ZS4gRmFpbHVyZSwgbmVnbGVjdCBvciBkZWxheSBieSBhIHBhcnR5IHRvIGVuZm9yY2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgb3IgaXRzIHJpZ2h0cyBvciByZW1lZGllcyBhdCBhbnkgdGltZSwgd2lsbCBub3QgYmUgY29uc3RydWVkIG9yIGJlIGRlZW1lZCB0byBiZSBhIHdhaXZlciBvZiBzdWNoIHBhcnR5YHMgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCB3aWxsIG5vdCBpbiBhbnkgd2F5IGFmZmVjdCB0aGUgdmFsaWRpdHkgb2YgdGhlIHdob2xlIG9yIGFueSBwYXJ0IG9mIHRoaXMgQWdyZWVtZW50IG9yIHByZWp1ZGljZSBzdWNoIHBhcnR5YHMgcmlnaHQgdG8gdGFrZSBzdWJzZXF1ZW50IGFjdGlvbi4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9aUEwtMS4xIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9aUEwtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YWFiZWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1pQTC0xLjEKQEAgLTAsMCArMSwyOCBAQAorCitab3BlIFB1YmxpYyBMaWNlbnNlIChaUEwpIFZlcnNpb24gMS4xCisKK0NvcHlyaWdodCAoYykgWm9wZSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVGhpcyBsaWNlbnNlIGhhcyBiZWVuIGNlcnRpZmllZCBhcyBvcGVuIHNvdXJjZS4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCitSZWRpc3RyaWJ1dGlvbnMgaW4gc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK0FsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgYW5kIGRvY3VtZW50YXRpb24gbWVudGlvbmluZyBmZWF0dXJlcyBkZXJpdmVkIGZyb20gb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgWm9wZSBDb3Jwb3JhdGlvbiBmb3IgdXNlIGluIHRoZSBaIE9iamVjdCBQdWJsaXNoaW5nIEVudmlyb25tZW50IChodHRwOi8vd3d3LnpvcGUuY29tLykuIgorCitJbiB0aGUgZXZlbnQgdGhhdCB0aGUgcHJvZHVjdCBiZWluZyBhZHZlcnRpc2VkIGluY2x1ZGVzIGFuIGludGFjdCBab3BlIGRpc3RyaWJ1dGlvbiAod2l0aCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5jbHVkZWQpIHRoZW4gdGhpcyBjbGF1c2UgaXMgd2FpdmVkLgorCitOYW1lcyBhc3NvY2lhdGVkIHdpdGggWm9wZSBvciBab3BlIENvcnBvcmF0aW9uIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gWm9wZSBDb3Jwb3JhdGlvbi4KK01vZGlmaWVkIHJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBab3BlIENvcnBvcmF0aW9uIGZvciB1c2UgaW4gdGhlIFogT2JqZWN0IFB1Ymxpc2hpbmcgRW52aXJvbm1lbnQgKGh0dHA6Ly93d3cuem9wZS5jb20vKS4iCisKK0ludGFjdCAocmUtKWRpc3RyaWJ1dGlvbnMgb2YgYW55IG9mZmljaWFsIFpvcGUgcmVsZWFzZSBkbyBub3QgcmVxdWlyZSBhbiBleHRlcm5hbCBhY2tub3dsZWRnZW1lbnQuCisKK01vZGlmaWNhdGlvbnMgYXJlIGVuY291cmFnZWQgYnV0IG11c3QgYmUgcGFja2FnZWQgc2VwYXJhdGVseSBhcyBwYXRjaGVzIHRvIG9mZmljaWFsIFpvcGUgcmVsZWFzZXMuIERpc3RyaWJ1dGlvbnMgdGhhdCBkbyBub3QgY2xlYXJseSBzZXBhcmF0ZSB0aGUgcGF0Y2hlcyBmcm9tIHRoZSBvcmlnaW5hbCB3b3JrIG11c3QgYmUgY2xlYXJseSBsYWJlbGVkIGFzIHVub2ZmaWNpYWwgZGlzdHJpYnV0aW9ucy4gTW9kaWZpY2F0aW9ucyB3aGljaCBkbyBub3QgY2FycnkgdGhlIG5hbWUgWm9wZSBtYXkgYmUgcGFja2FnZWQgaW4gYW55IGZvcm0sIGFzIGxvbmcgYXMgdGhleSBjb25mb3JtIHRvIGFsbCBvZiB0aGUgY2xhdXNlcyBhYm92ZS4KK0Rpc2NsYWltZXIKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgWk9QRSBDT1JQT1JBVElPTiBgYEFTIElTYGAgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBaT1BFIENPUlBPUkFUSU9OIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK1RoaXMgc29mdHdhcmUgY29uc2lzdHMgb2YgY29udHJpYnV0aW9ucyBtYWRlIGJ5IFpvcGUgQ29ycG9yYXRpb24gYW5kIG1hbnkgaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIFpvcGUgQ29ycG9yYXRpb24uIFNwZWNpZmljIGF0dHJpYnV0aW9ucyBhcmUgbGlzdGVkIGluIHRoZSBhY2NvbXBhbnlpbmcgY3JlZGl0cyBmaWxlLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1pQTC0yLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1pQTC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FlMjA4MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWlBMLTIuMApAQCAtMCwwICsxLDYxIEBACisKK1pvcGUgUHVibGljIExpY2Vuc2UgKFpQTCkgVmVyc2lvbiAyLjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc29mdHdhcmUgaXMgQ29weXJpZ2h0IChjKSBab3BlIENvcnBvcmF0aW9uICh0bSkgYW5kCitDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RoaXMgbGljZW5zZSBoYXMgYmVlbiBjZXJ0aWZpZWQgYXMgb3BlbiBzb3VyY2UuIEl0IGhhcyBhbHNvCitiZWVuIGRlc2lnbmF0ZWQgYXMgR1BMIGNvbXBhdGlibGUgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24gKEZTRikuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKK3dpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlCitmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisxLiBSZWRpc3RyaWJ1dGlvbnMgaW4gc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKKyAgIGRpc2NsYWltZXIuCisKKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKzMuIFRoZSBuYW1lIFpvcGUgQ29ycG9yYXRpb24gKHRtKSBtdXN0IG5vdCBiZSB1c2VkIHRvCisgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gWm9wZSBDb3Jwb3JhdGlvbi4KKworNC4gVGhlIHJpZ2h0IHRvIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBvciB0byB1c2UgaXQgZm9yCisgICBhbnkgcHVycG9zZSBkb2VzIG5vdCBnaXZlIHlvdSB0aGUgcmlnaHQgdG8gdXNlIFNlcnZpY2VtYXJrcworICAgKHNtKSBvciBUcmFkZW1hcmtzICh0bSkgb2YgWm9wZSBDb3Jwb3JhdGlvbi4gVXNlIG9mIHRoZW0gaXMKKyAgIGNvdmVyZWQgaW4gYSBzZXBhcmF0ZSBhZ3JlZW1lbnQgKHNlZQorICAgaHR0cDovL3d3dy56b3BlLmNvbS9NYXJrcykuCisKKzUuIElmIGFueSBmaWxlcyBhcmUgbW9kaWZpZWQsIHlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZAorICAgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkCisgICB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKK0Rpc2NsYWltZXIKKworICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFpPUEUgQ09SUE9SQVRJT04gYGBBUyBJU2BgCisgIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQKKyAgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCisgIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCisgIE5PIEVWRU5UIFNIQUxMIFpPUEUgQ09SUE9SQVRJT04gT1IgSVRTIENPTlRSSUJVVE9SUyBCRQorICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgIERBTUFHRS4KKworCitUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBab3BlCitDb3Jwb3JhdGlvbiBhbmQgbWFueSBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgWm9wZQorQ29ycG9yYXRpb24uICBTcGVjaWZpYyBhdHRyaWJ1dGlvbnMgYXJlIGxpc3RlZCBpbiB0aGUKK2FjY29tcGFueWluZyBjcmVkaXRzIGZpbGUuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWlBMLTIuMSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWlBMLTIuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDlkNDNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9aUEwtMi4xCkBAIC0wLDAgKzEsMTggQEAKKworWlBMIDIuMQorWm9wZSBQdWJsaWMgTGljZW5zZSAoWlBMKSBWZXJzaW9uIDIuMQorCitBIGNvcHlyaWdodCBub3RpY2UgYWNjb21wYW5pZXMgdGhpcyBsaWNlbnNlIGRvY3VtZW50IHRoYXQgaWRlbnRpZmllcyB0aGUgY29weXJpZ2h0IGhvbGRlcnMuCisKK1RoaXMgbGljZW5zZSBoYXMgYmVlbiBjZXJ0aWZpZWQgYXMgb3BlbiBzb3VyY2UuIEl0IGhhcyBhbHNvIGJlZW4gZGVzaWduYXRlZCBhcyBHUEwgY29tcGF0aWJsZSBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChGU0YpLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKK1JlZGlzdHJpYnV0aW9ucyBpbiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWNjb21wYW55aW5nIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhY2NvbXBhbnlpbmcgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitOYW1lcyBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSB0aGUgY29weXJpZ2h0IGhvbGRlcnMuCitUaGUgcmlnaHQgdG8gZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIG9yIHRvIHVzZSBpdCBmb3IgYW55IHB1cnBvc2UgZG9lcyBub3QgZ2l2ZSB5b3UgdGhlIHJpZ2h0IHRvIHVzZSBTZXJ2aWNlbWFya3MgKHNtKSBvciBUcmFkZW1hcmtzICh0bSkgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzLiBVc2Ugb2YgdGhlbSBpcyBjb3ZlcmVkIGJ5IHNlcGFyYXRlIGFncmVlbWVudCB3aXRoIHRoZSBjb3B5cmlnaHQgaG9sZGVycy4KK0lmIGFueSBmaWxlcyBhcmUgbW9kaWZpZWQsIHlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorRGlzY2xhaW1lcgorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJU2BgIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1ppbWJyYS0xLjMgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1ppbWJyYS0xLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzliN2IzNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWmltYnJhLTEuMwpAQCAtMCwwICsxLDMwIEBACisKK1ppbWJyYSBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAxLjMgKFpQTCkKK1RoaXMgWmltYnJhIFB1YmxpYyBMaWNlbnNlICh0aGlzICJBZ3JlZW1lbnQiKSBpcyBhIGxlZ2FsIGFncmVlbWVudCB0aGF0IGRlc2NyaWJlcyB0aGUgdGVybXMgdW5kZXIgd2hpY2ggVk13YXJlLCBJbmMuLCBhIERlbGF3YXJlIGNvcnBvcmF0aW9uIGhhdmluZyBpdHMgcHJpbmNpcGFsIHBsYWNlIG9mIGJ1c2luZXNzIGF0IDM0MDEgSGlsbHZpZXcgQXZlbnVlLCBQYWxvIEFsdG8sIENhbGlmb3JuaWEgOTQzMDQgKCJWTXdhcmUiKSB3aWxsIHByb3ZpZGUgc29mdHdhcmUgdG8geW91IHZpYSBkb3dubG9hZCBvciBvdGhlcndpc2UgKCJTb2Z0d2FyZSIpLiBCeSB1c2luZyB0aGUgU29mdHdhcmUsIHlvdSwgYW4gaW5kaXZpZHVhbCBvciBhbiBlbnRpdHkgKCJZb3UiKSBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgdGhlIG11dHVhbCBwcm9taXNlcyBhbmQgdXBvbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgc2V0IGZvcnRoIGJlbG93LCB0aGUgcGFydGllcyBhZ3JlZSBhcyBmb2xsb3dzOgorCisxLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZQorMS4xIC0gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIFZNd2FyZSBoZXJlYnkgZ3JhbnRzIHRvIFlvdSwgdW5kZXIgYW55IGFuZCBhbGwgb2YgaXRzIGNvcHlyaWdodCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIFNvZnR3YXJlLCBhIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSBsaWNlbnNlIHRvIGNvcHksIG1vZGlmeSwgY29tcGlsZSwgZXhlY3V0ZSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBNb2RpZmljYXRpb25zLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgQWdyZWVtZW50LCBhbnkgY2hhbmdlIHRvLCBhZGRpdGlvbiB0bywgb3IgYWJyaWRnZW1lbnQgb2YgdGhlIFNvZnR3YXJlIG1hZGUgYnkgWW91IGlzIGEgIk1vZGlmaWNhdGlvbjsiIGhvd2V2ZXIsIGFueSBmaWxlIFlvdSBhZGQgdG8gdGhlIFNvZnR3YXJlIHRoYXQgZG9lcyBub3QgY29udGFpbiBhbnkgcGFydCBvZiB0aGUgU29mdHdhcmUgaXMgbm90IGEgIk1vZGlmaWNhdGlvbi4iCisxLjIgLSBJZiBZb3UgYXJlIGFuIGluZGl2aWR1YWwgYWN0aW5nIG9uIGJlaGFsZiBvZiBhIGNvcnBvcmF0aW9uIG9yIG90aGVyIGVudGl0eSwgWW91ciB1c2Ugb2YgdGhlIFNvZnR3YXJlIG9yIGFueSBNb2RpZmljYXRpb24gaXMgc3ViamVjdCB0byBZb3VyIGhhdmluZyB0aGUgYXV0aG9yaXR5IHRvIGJpbmQgc3VjaCBjb3Jwb3JhdGlvbiBvciBlbnRpdHkgdG8gdGhpcyBBZ3JlZW1lbnQuIFByb3ZpZGluZyBjb3BpZXMgdG8gcGVyc29ucyB3aXRoaW4gc3VjaCBjb3Jwb3JhdGlvbiBvciBlbnRpdHkgaXMgbm90IGNvbnNpZGVyZWQgZGlzdHJpYnV0aW9uIGZvciBwdXJwb3NlcyBvZiB0aGlzIEFncmVlbWVudC4KKzEuMyAtIEZvciB0aGUgU29mdHdhcmUgb3IgYW55IE1vZGlmaWNhdGlvbiBZb3UgZGlzdHJpYnV0ZSBpbiBzb3VyY2UgY29kZSBmb3JtYXQsIFlvdSBtdXN0IGRvIHNvIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvbXBsZXRlIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgd2l0aCBZb3VyIGRpc3RyaWJ1dGlvbi4gV2l0aCByZXNwZWN0IHRvIGFueSBNb2RpZmljYXRpb24gWW91IGRpc3RyaWJ1dGUgaW4gc291cmNlIGNvZGUgZm9ybWF0LCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBhcHBseSB0byBZb3UgaW4gdGhlIHNhbWUgd2F5IHRob3NlIHRlcm1zIGFwcGx5IHRvIFZNd2FyZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFNvZnR3YXJlLiBJbiBvdGhlciB3b3Jkcywgd2hlbiBZb3UgYXJlIGRpc3RyaWJ1dGluZyBNb2RpZmljYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBZb3UgInN0YW5kIGluIHRoZSBzaG9lcyIgb2YgVk13YXJlIGluIHRlcm1zIG9mIHRoZSByaWdodHMgWW91IGdyYW50IGFuZCBob3cgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGFwcGx5IHRvIFlvdSBhbmQgdGhlIGxpY2Vuc2VlcyBvZiBZb3VyIE1vZGlmaWNhdGlvbnMuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCB3aGVuIFlvdSAic3RhbmQgaW4gdGhlIHNob2VzIiBvZiBWTXdhcmUsIFlvdSBhcmUgbm90IHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBwcm92aXNpb24gdW5kZXIgU2VjdGlvbiA3LCB3aGljaCByZXF1aXJlcyBhbGwgZGlzcHV0ZXMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdG8gYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIGZlZGVyYWwgb3Igc3RhdGUgY291cnRzIG9mIG5vcnRoZXJuIENhbGlmb3JuaWEuCisxLjQgLSBGb3IgdGhlIFNvZnR3YXJlIG9yIGFueSBNb2RpZmljYXRpb24gWW91IGRpc3RyaWJ1dGUgaW4gY29tcGlsZWQgb3Igb2JqZWN0IGNvZGUgZm9ybWF0LCBZb3UgbXVzdCBhbHNvIHByb3ZpZGUgcmVjaXBpZW50cyB3aXRoIGFjY2VzcyB0byB0aGUgU29mdHdhcmUgb3IgTW9kaWZpY2F0aW9uIGluIHNvdXJjZSBjb2RlIGZvcm1hdCBhbG9uZyB3aXRoIGEgY29tcGxldGUgY29weSBvZiB0aGlzIEFncmVlbWVudC4gVGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUgb3IgTW9kaWZpY2F0aW9ucyBpbiBjb21waWxlZCBvciBvYmplY3QgY29kZSBmb3JtYXQgbWF5IGJlIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuIEluIGFkZGl0aW9uLCBZb3UgbXVzdCBtYWtlIGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgbGljZW5zZSB0ZXJtcyBhcHBseWluZyB0byBzdWNoIFNvZnR3YXJlIG9yIE1vZGlmaWNhdGlvbiB0aGF0IGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSBhbmQgbm90IGJ5IFZNd2FyZSwgYW5kIHRoYXQgc3VjaCBsaWNlbnNlIGRvZXMgbm90IHJlc3RyaWN0IHJlY2lwaWVudHMgZnJvbSBleGVyY2lzaW5nIHJpZ2h0cyBpbiB0aGUgc291cmNlIGNvZGUgdG8gdGhlIFNvZnR3YXJlIGdyYW50ZWQgYnkgVk13YXJlIHVuZGVyIHRoaXMgQWdyZWVtZW50IG9yIHJpZ2h0cyBpbiB0aGUgc291cmNlIGNvZGUgdG8gYW55IE1vZGlmaWNhdGlvbiBncmFudGVkIGJ5IFlvdSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAxLjMuCisxLjUgLSBUaGlzIEFncmVlbWVudCBkb2VzIG5vdCBsaW1pdCBZb3VyIHJpZ2h0IHRvIGRpc3RyaWJ1dGUgZmlsZXMgdGhhdCBhcmUgZW50aXJlbHkgWW91ciBvd24gd29yayAoaS5lLiwgd2hpY2ggZG8gbm90IGluY29ycG9yYXRlIGFueSBwb3J0aW9uIG9mIHRoZSBTb2Z0d2FyZSBhbmQgYXJlIG5vdCBNb2RpZmljYXRpb25zKSB1bmRlciBhbnkgdGVybXMgWW91IGNob29zZS4KKzIuIFN1cHBvcnQKK1ZNd2FyZSBoYXMgbm8gb2JsaWdhdGlvbiB0byBwcm92aWRlIHRlY2huaWNhbCBzdXBwb3J0IG9yIHVwZGF0ZXMgdG8gWW91LiBOb3RoaW5nIGluIHRoaXMgQWdyZWVtZW50IHJlcXVpcmVzIFZNd2FyZSB0byBlbnRlciBpbnRvIGFueSBsaWNlbnNlIHdpdGggWW91IGZvciBhbnkgb3RoZXIgZWRpdGlvbiBvZiB0aGUgU29mdHdhcmUuCiszLiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzCiszLjEgLSBFeGNlcHQgZm9yIHRoZSBsaWNlbnNlIGV4cHJlc3NseSBncmFudGVkIHVuZGVyIGNvcHlyaWdodCBpbiBTZWN0aW9uIDEuMSwgbm8gcmlnaHRzLCBsaWNlbnNlcyBvciBmb3JiZWFyYW5jZXMgYXJlIGdyYW50ZWQgb3IgbWF5IGFyaXNlIGluIHJlbGF0aW9uIHRvIHRoaXMgQWdyZWVtZW50IHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXhoYXVzdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzLCBpbmNsdWRpbmcgYWxsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMsIHRoYXQgYXJlIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgaGVyZWJ5IHJlc2VydmVkLgorMy4yIC0gSW4gYW55IGNvcHkgb2YgdGhlIFNvZnR3YXJlIG9yIGluIGFueSBNb2RpZmljYXRpb24geW91IGNyZWF0ZSwgWW91IG11c3QgcmV0YWluIGFuZCByZXByb2R1Y2UsIGFueSBhbmQgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZCBhdHRyaWJ1dGlvbiBub3RpY2VzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBTb2Z0d2FyZSBpbiB0aGUgc2FtZSBmb3JtIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBTb2Z0d2FyZS4gVGhpcyBpbmNsdWRlcyB0aGUgcHJlc2VydmF0aW9uIG9mIGF0dHJpYnV0aW9uIG5vdGljZXMgaW4gdGhlIGZvcm0gb2YgdHJhZGVtYXJrcyBvciBsb2dvcyB0aGF0IGV4aXN0IHdpdGhpbiBhIHVzZXIgaW50ZXJmYWNlIG9mIHRoZSBTb2Z0d2FyZS4KKzMuMyAtIFRoaXMgbGljZW5zZSBkb2VzIG5vdCBncmFudCBZb3UgcmlnaHRzIHRvIHVzZSBhbnkgcGFydHlgcyBuYW1lLCBsb2dvLCBvciB0cmFkZW1hcmtzLCBleGNlcHQgc29sZWx5IGFzIG5lY2Vzc2FyeSB0byBjb21wbHkgd2l0aCBTZWN0aW9uIDMuMi4KKzQuIERpc2NsYWltZXIgb2YgV2FycmFudGllcworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQuIFZNV0FSRSBNQUtFUyBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQsIE9SIFNUQVRVVE9SWSBSRUdBUkRJTkcgT1IgUkVMQVRJTkcgVE8gVEhFIFNPRlRXQVJFLiBTUEVDSUZJQ0FMTFksIFZNV0FSRSBET0VTIE5PVCBXQVJSQU5UIFRIQVQgVEhFIFNPRlRXQVJFIFdJTEwgQkUgRVJST1IgRlJFRSBPUiBXSUxMIFBFUkZPUk0gSU4gQU4gVU5JTlRFUlJVUFRFRCBNQU5ORVIuIFRPIFRIRSBHUkVBVEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIFZNV0FSRSBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSAoRVZFTiBJRiBWTVdBUkUgSEFEIEJFRU4gSU5GT1JNRUQgT0YgU1VDSCBQVVJQT1NFKSwgQU5EIE5PTklORlJJTkdFTUVOVCBXSVRIIFJFU1BFQ1QgVE8gVEhFIFNPRlRXQVJFLCBBTlkgTU9ESUZJQ0FUSU9OUyBUSEVSRVRPIEFORCBXSVRIIFJFU1BFQ1QgVE8gVEhFIFVTRSBPRiBUSEUgRk9SRUdPSU5HLgorNS4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkKK0lOIE5PIEVWRU5UIFdJTEwgVk1XQVJFIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBLSU5EIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1MgT0YgUFJPRklUUywgTE9TUyBPRiBVU0UsIEJVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TUyBPRiBEQVRBLCBDT1NUIE9GIENPVkVSKSBJTiBDT05ORUNUSU9OIFdJVEggT1IgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRJTkcgVE8gVEhFIEZVUk5JU0hJTkcsIFBFUkZPUk1BTkNFIE9SIFVTRSBPRiBUSEUgU09GVFdBUkUgT1IgQU5ZIE9USEVSIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgV0hFVEhFUiBBTExFR0VEIEFTIEEgQlJFQUNIIE9GIENPTlRSQUNUIE9SIFRPUlRJT1VTIENPTkRVQ1QsIElOQ0xVRElORyBORUdMSUdFTkNFLCBBTkQgRVZFTiBJRiBWTVdBUkUgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorNi4gVGVybSBhbmQgVGVybWluYXRpb24KKzYuMSAtIFRoaXMgQWdyZWVtZW50IHdpbGwgY29udGludWUgaW4gZWZmZWN0IHVubGVzcyBhbmQgdW50aWwgdGVybWluYXRlZCBlYXJsaWVyIHB1cnN1YW50IHRvIHRoaXMgU2VjdGlvbiA2LgorNi4yIC0gSW4gdGhlIGV2ZW50IFlvdSB2aW9sYXRlIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgVk13YXJlIG1heSB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQuCis2LjMgLSBBbGwgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIgc2hhbGwgdGVybWluYXRlIHVwb24gdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LiBUZXJtaW5hdGlvbiB3aWxsIGJlIGluIGFkZGl0aW9uIHRvIGFueSByaWdodHMgYW5kIHJlbWVkaWVzIGF2YWlsYWJsZSB0byBWTXdhcmUgYXQgbGF3IG9yIGVxdWl0eSBvciB1bmRlciB0aGlzIEFncmVlbWVudC4KKzYuNCAtIFRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50IHdpbGwgbm90IGFmZmVjdCB0aGUgcHJvdmlzaW9ucyByZWdhcmRpbmcgcmVzZXJ2YXRpb24gb2YgcmlnaHRzIChTZWN0aW9uIDMuMSksIHByb3Zpc2lvbnMgZGlzY2xhaW1pbmcgb3IgbGltaXRpbmcgVk13YXJlYHMgbGlhYmlsaXR5IChTZWN0aW9ucyA0IGFuZCA1KSwgVGVybWluYXRpb24gKFNlY3Rpb24gNikgb3IgTWlzY2VsbGFuZW91cyAoU2VjdGlvbiA3KSwgd2hpY2ggcHJvdmlzaW9ucyB3aWxsIHN1cnZpdmUgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuCis3LiBNaXNjZWxsYW5lb3VzCitUaGlzIEFncmVlbWVudCBjb250YWlucyB0aGUgZW50aXJlIGFncmVlbWVudCBvZiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBzdXBlcnNlZGVzIGFsbCBwcmV2aW91cyBjb21tdW5pY2F0aW9ucywgcmVwcmVzZW50YXRpb25zLCB1bmRlcnN0YW5kaW5ncyBhbmQgYWdyZWVtZW50cywgZWl0aGVyIG9yYWwgb3Igd3JpdHRlbiwgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gc2FpZCBzdWJqZWN0IG1hdHRlci4gVGhlIHJlbGF0aW9uc2hpcCBvZiB0aGUgcGFydGllcyBoZXJldW5kZXIgaXMgdGhhdCBvZiBpbmRlcGVuZGVudCBjb250cmFjdG9ycywgYW5kIHRoaXMgQWdyZWVtZW50IHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcyBjcmVhdGluZyBhbiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBqb2ludCB2ZW50dXJlIG9yIGFueSBvdGhlciBmb3JtIG9mIGxlZ2FsIGFzc29jaWF0aW9uIGJldHdlZW4gdGhlIHBhcnRpZXMuIElmIGFueSB0ZXJtLCBjb25kaXRpb24sIG9yIHByb3Zpc2lvbiBpbiB0aGlzIEFncmVlbWVudCBpcyBmb3VuZCB0byBiZSBpbnZhbGlkLCB1bmxhd2Z1bCBvciB1bmVuZm9yY2VhYmxlIHRvIGFueSBleHRlbnQsIHRoaXMgQWdyZWVtZW50IHdpbGwgYmUgY29uc3RydWVkIGluIGEgbWFubmVyIHRoYXQgbW9zdCBjbG9zZWx5IGVmZmVjdHVhdGVzIHRoZSBpbnRlbnQgb2YgdGhpcyBBZ3JlZW1lbnQuIFN1Y2ggaW52YWxpZCB0ZXJtLCBjb25kaXRpb24gb3IgcHJvdmlzaW9uIHdpbGwgYmUgc2V2ZXJlZCBmcm9tIHRoZSByZW1haW5pbmcgdGVybXMsIGNvbmRpdGlvbnMgYW5kIHByb3Zpc2lvbnMsIHdoaWNoIHdpbGwgY29udGludWUgdG8gYmUgdmFsaWQgYW5kIGVuZm9yY2VhYmxlIHRvIHRoZSBmdWxsZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LiBUaGlzIEFncmVlbWVudCB3aWxsIGJlIGludGVycHJldGVkIGFuZCBjb25zdHJ1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhIGFuZCB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCB3aXRob3V0IHJlZ2FyZCB0byBjb25mbGljdCBvZiBsYXcgcHJpbmNpcGxlcy4gVGhlIFUuTi4gQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgQWdyZWVtZW50LiBBbGwgZGlzcHV0ZXMgYXJpc2luZyBvdXQgb2YgdGhpcyBBZ3JlZW1lbnQgaW52b2x2aW5nIFZNd2FyZSBvciBhbnkgb2YgaXRzIHN1YnNpZGlhcmllcyBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGZlZGVyYWwgb3Igc3RhdGUgY291cnRzIG9mIG5vcnRoZXJuIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLiBObyByaWdodHMgbWF5IGJlIGFzc2lnbmVkLCBubyBvYmxpZ2F0aW9ucyBtYXkgYmUgZGVsZWdhdGVkLCBhbmQgdGhpcyBBZ3JlZW1lbnQgbWF5IG5vdCBiZSB0cmFuc2ZlcnJlZCBieSBZb3UsIGluIHdob2xlIG9yIGluIHBhcnQsIHdoZXRoZXIgdm9sdW50YXJ5IG9yIGJ5IG9wZXJhdGlvbiBvZiBsYXcsIGluY2x1ZGluZyBieSB3YXkgb2Ygc2FsZSBvZiBhc3NldHMsIG1lcmdlciBvciBjb25zb2xpZGF0aW9uLCB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgVk13YXJlLCBhbmQgYW55IHB1cnBvcnRlZCBhc3NpZ25tZW50LCBkZWxlZ2F0aW9uIG9yIHRyYW5zZmVyIHdpdGhvdXQgc3VjaCBjb25zZW50IHNoYWxsIGJlIHZvaWQgYWIgaW5pdGlvLiBBbnkgd2FpdmVyIG9mIHRoZSBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50IG9yIG9mIGEgcGFydHlgcyByaWdodHMgb3IgcmVtZWRpZXMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbiB3cml0aW5nIHRvIGJlIGVmZmVjdGl2ZS4gRmFpbHVyZSwgbmVnbGVjdCBvciBkZWxheSBieSBhIHBhcnR5IHRvIGVuZm9yY2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgb3IgaXRzIHJpZ2h0cyBvciByZW1lZGllcyBhdCBhbnkgdGltZSwgd2lsbCBub3QgYmUgY29uc3RydWVkIG9yIGJlIGRlZW1lZCB0byBiZSBhIHdhaXZlciBvZiBzdWNoIHBhcnR5YHMgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCB3aWxsIG5vdCBpbiBhbnkgd2F5IGFmZmVjdCB0aGUgdmFsaWRpdHkgb2YgdGhlIHdob2xlIG9yIGFueSBwYXJ0IG9mIHRoaXMgQWdyZWVtZW50IG9yIHByZWp1ZGljZSBzdWNoIHBhcnR5YHMgcmlnaHQgdG8gdGFrZSBzdWJzZXF1ZW50IGFjdGlvbi4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9abGliIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9abGliCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YjM4ODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1psaWIKQEAgLTAsMCArMSwyMSBAQAorCit6bGliIExpY2Vuc2UKKworCisgIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYGFzLWlzYCwgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisgIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKKyAgYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKworICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKKyAgaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorICBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKKyAgMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKKyAgICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKKyAgICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCisgICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisgIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCisgICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKyAgMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL2J6aXAyIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9iemlwMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWM1OTlkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9iemlwMgpAQCAtMCwwICsxLDQxIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHByb2dyYW0sICJiemlwMiIsIHRoZSBhc3NvY2lhdGVkIGxpYnJhcnkgImxpYmJ6aXAyIiwgYW5kIGFsbAorZG9jdW1lbnRhdGlvbiwgYXJlIGNvcHlyaWdodCAoQykgMTk5Ni0yMDEwIEp1bGlhbiBSIFNld2FyZC4gIEFsbAorcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworMi4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdAorICAgbm90IGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gIElmIHlvdSB1c2UgdGhpcworICAgc29mdHdhcmUgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdAorICAgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZSBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorCiszLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0CisgICBub3QgYmUgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorCis0LiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorICAgcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MKK09SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWQorRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURQorR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCitXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK0p1bGlhbiBTZXdhcmQsIGpzZXdhcmRAYnppcC5vcmcKK2J6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjYgb2YgNiBTZXB0ZW1iZXIgMjAxMAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9lQ29zLTIuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvZUNvcy0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzliNWQ2MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvZUNvcy0yLjAKQEAgLTAsMCArMSwxOCBAQAorCitUaGUgZUNvcyBsaWNlbnNlIHZlcnNpb24gMi4wCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGVDb3MsIHRoZSBFbWJlZGRlZCBDb25maWd1cmFibGUgT3BlcmF0aW5nIFN5c3RlbS4gQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KK2VDb3MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK2VDb3MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggZUNvczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK0FzIGEgc3BlY2lhbCBleGNlcHRpb24sIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIHdvcmtzIHRvIHByb2R1Y2UgYSB3b3JrIGJhc2VkIG9uIHRoaXMgZmlsZSwgdGhpcyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIHdvcmsgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIEhvd2V2ZXIgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGlzIGZpbGUgbXVzdCBzdGlsbCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggc2VjdGlvbiAoMykgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCitUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSBhIHdvcmsgYmFzZWQgb24gdGhpcyBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCitBbHRlcm5hdGl2ZSBsaWNlbnNlcyBmb3IgZUNvcyBtYXkgYmUgYXJyYW5nZWQgYnkgY29udGFjdGluZyBSZWQgSGF0LCBJbmMuIGF0IGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vZWNvcy9lY29zLWxpY2Vuc2UvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyMjI0VDT1NHUExDT1BZUklHSFRFTkQjIyMjCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvZ1NPQVAtMSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvZ1NPQVAtMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjg2MzhhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9nU09BUC0xCkBAIC0wLDAgKzEsMzgwIEBACisKK2dTT0FQIFB1YmxpYyBMaWNlbnNlCisKK1ZlcnNpb24gMS4zYgorCitUaGUgZ1NPQVAgcHVibGljIGxpY2Vuc2UgaXMgZGVyaXZlZCBmcm9tIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIChNUEwxLjEpLgorVGhlIHNlY3Rpb25zIHRoYXQgd2VyZSBkZWxldGVkIGZyb20gdGhlIG9yaWdpbmFsIE1QTDEuMSB0ZXh0IGFyZSAxLjAuMSwgMi4xLgorKGMpLChkKSwgMi4yLihjKSwoZCksIDguMi4oYiksIDEwLCBhbmQgMTEuIFNlY3Rpb24gMy44IHdhcyBhZGRlZC4gVGhlIG1vZGlmaWVkCitzZWN0aW9ucyBhcmUgMi4xLihiKSwgMi4yLihiKSwgMy4yIChzaW1wbGlmaWVkKSwgMy41IChkZWxldGVkIHRoZSBsYXN0CitzZW50ZW5jZSksIGFuZCAzLjYgKHNpbXBsaWZpZWQpLgorVGhpcyBsaWNlbnNlIGFwcGxpZXMgdG8gdGhlIGdTT0FQIHNvZnR3YXJlIHBhY2thZ2UsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUKK3NvYXBjcHAyIGFuZCB3c2RsMmggc291cmNlIGNvZGUgbG9jYXRlZCBpbiBnc29hcC9zcmMgYW5kIGdzb2FwL3dzZGwsIGFsbCBjb2RlCitnZW5lcmF0ZWQgYnkgc29hcGNwcDIgYW5kIHdzZGwyaCwgdGhlIFVEREkgc291cmNlIGNvZGUgZ3NvYXAvdWRkaTIsIGFuZCB0aGUgV2ViCitzZXJ2ZXIgc2FtcGxlIHNvdXJjZSBjb2RlIHNhbXBsZXMvd2Vic2VydmVyLiBUbyB1c2UgYW55IG9mIHRoZXNlIHNvZnR3YXJlIHRvb2xzCithbmQgY29tcG9uZW50cyBjb21tZXJjaWFsbHksIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIHJlcXVpcmVkIGFuZCBjYW4gYmUKK29idGFpbmVkIGZyb20gd3d3Lmdlbml2aWEuY29tLgorMSBERUZJTklUSU9OUy4KKworMS4wLjEuCisxLjEuICJDb250cmlidXRvciIKK21lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKzEuMi4gIkNvbnRyaWJ1dG9yIFZlcnNpb24iCittZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhCitDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorMS4zLiAiQ292ZXJlZCBDb2RlIgorbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbAorQ29kZSwgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKzEuNC4gIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSIKK21lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvcgordGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YS4KKzEuNS4gIkV4ZWN1dGFibGUiCittZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKzEuNi4gIkluaXRpYWwgRGV2ZWxvcGVyIgorbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZQorU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS4KKzEuNy4gIkxhcmdlciBXb3JrIgorbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QKK2dvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisxLjguICJMaWNlbnNlIgorbWVhbnMgdGhpcyBkb2N1bWVudC4KKzEuOC4xLiAiTGljZW5zYWJsZSIKK21lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUKK3RpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzCitjb252ZXllZCBoZXJlaW4uCisxLjkuICJNb2RpZmljYXRpb25zIgorbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZQorT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYQorc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczoKK0EuCitBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwKK0NvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KK0IuCitBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgb3IgcHJldmlvdXMKK01vZGlmaWNhdGlvbnMuCisxLjEwLiAiT3JpZ2luYWwgQ29kZSIKK21lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UKK0NvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcyBPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mCitpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMKK0xpY2Vuc2UuCisxLjEwLjEuICJQYXRlbnQgQ2xhaW1zIgorbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQKK2xpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieQorZ3JhbnRvci4KKzEuMTEuICJTb3VyY2UgQ29kZSIKK21lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwKK2luY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbgorZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwKK29yIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvcgorYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcidzIGNob2ljZS4gVGhlCitTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZQorZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorMS4xMi4gIllvdSIgKG9yICJZb3VyIikKK21lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcKK3dpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlCitpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55CitlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LgorRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsCitkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwKK3doZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50CisoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorMiBTT1VSQ0UgQ09ERSBMSUNFTlNFLgorCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KKworVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tCitleGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorKGEpCit1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUKK2J5IEluaXRpYWwgRGV2ZWxvcGVyIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UKK2FuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQKK01vZGlmaWNhdGlvbnMsIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorKGIpCit1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBJbml0aWFsIERldmVsb3BlciwgdG8KK21ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsICgib2ZmZXIgdG8gc2VsbCBhbmQgaW1wb3J0IikgdGhlCitPcmlnaW5hbCBDb2RlLCBNb2RpZmljYXRpb25zLCBvciBwb3J0aW9ucyB0aGVyZW9mLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQKK3RoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gdXRpbGl6ZSwgYWxvbmUgb3IKK2luIGNvbWJpbmF0aW9uIHdpdGggb3RoZXIgc29mdHdhcmUsIHRoZSBPcmlnaW5hbCBDb2RlLCBNb2RpZmljYXRpb25zLCBvciBhbnkKK2NvbWJpbmF0aW9uIG9yIHBvcnRpb25zIHRoZXJlb2YuCisoYykKKyhkKQorCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorCitTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5CitncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UKKyhhKQordW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlCitieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQKK2Rpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKQorZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBDb2RlIGFuZC9vcgorYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKyhiKQordW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgQ29udHJpYnV0b3IsIHRvIG1ha2UsCitoYXZlIG1hZGUsIHVzZSBhbmQgc2VsbCAoIm9mZmVyIHRvIHNlbGwgYW5kIGltcG9ydCIpIHRoZSBDb250cmlidXRvcgorVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcworcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byB1dGlsaXplLCBhbG9uZSBvciBpbiBjb21iaW5hdGlvbiB3aXRoCitvdGhlciBzb2Z0d2FyZSwgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLgorKGMpCisoZCkKKzMgRElTVFJJQlVUSU9OIE9CTElHQVRJT05TLgorCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCisKK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5Cit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlCitDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91CittdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdQorZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbgordGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZQorcmVjaXBpZW50cycgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQKK29mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuCisKKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorCitBbnkgTW9kaWZpY2F0aW9uIGNyZWF0ZWQgYnkgWW91IHdpbGwgYmUgcHJvdmlkZWQgdG8gdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluCitTb3VyY2UgQ29kZSBmb3JtIGFuZCBhcmUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuCisKKzMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZQorZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZgorYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzCitkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwKK0RldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZQorQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24KK2luIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCiszLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzLgorKGEpIFRoaXJkIFBhcnR5IENsYWltcy4KK0lmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eSdzIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yCit1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yLCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlCitDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgIkxFR0FMIiB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUKK3BhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0bworY29udGFjdC4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlciB0aGUgTW9kaWZpY2F0aW9uIGlzIG1hZGUKK2F2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIENvbnRyaWJ1dG9yIHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUKK0xFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZQorb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykKK3JlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcKK2tub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKyhiKSBDb250cmlidXRvciBBUElzLgorSWYgQ29udHJpYnV0b3IncyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZAorQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvCitpbXBsZW1lbnQgdGhhdCBBUEksIENvbnRyaWJ1dG9yIG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMCitmaWxlLgorKGMpIFJlcHJlc2VudGF0aW9ucy4KK0NvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byBTZWN0aW9uIDMuNChhKQorYWJvdmUsIENvbnRyaWJ1dG9yIGJlbGlldmVzIHRoYXQgQ29udHJpYnV0b3IncyBNb2RpZmljYXRpb25zIGFyZSBDb250cmlidXRvcidzCitvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IgQ29udHJpYnV0b3IgaGFzIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZQorcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS4KKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLgorCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZS4gSWYKK2l0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvCitpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhCityZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYKK1lvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvcgordG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBZb3UgbXVzdCBhbHNvIGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2UgaW4KK2FueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyBvcgorb3duZXJzaGlwIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8KK2NoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZQorb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duCitiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuCisKKzMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCisKK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZgorU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlCitFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIKK2Nob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdQorYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUKK0V4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQncyByaWdodHMgaW4KK3RoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UKK2Rpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQKK2Fic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5CitZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBJZiB5b3UgZGlzdHJpYnV0ZQorZXhlY3V0YWJsZSB2ZXJzaW9ucyBjb250YWluaW5nIENvdmVyZWQgQ29kZSBhcyBwYXJ0IG9mIGEgcHJvZHVjdCwgeW91IG11c3QKK3JlcHJvZHVjZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCitwcm92aWRlZCB3aXRoIHRoZSBwcm9kdWN0LgorCiszLjcuIExhcmdlciBXb3Jrcy4KKworWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QKK2dvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEKK3NpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcworTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLgorCiszLjguIFJlc3RyaWN0aW9ucy4KKworWW91IG1heSBub3QgcmVtb3ZlIGFueSBwcm9kdWN0IGlkZW50aWZpY2F0aW9uLCBjb3B5cmlnaHQsIHByb3ByaWV0YXJ5IG5vdGljZXMKK29yIGxhYmVscyBmcm9tIGdTT0FQLgorNCBJTkFCSUxJVFkgVE8gQ09NUExZIERVRSBUTyBTVEFUVVRFIE9SIFJFR1VMQVRJT04uCisKK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZQord2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLAorb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUKK21heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleQorYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluCitTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4KK0V4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QKK2JlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0bwordW5kZXJzdGFuZCBpdC4KKzUgQVBQTElDQVRJT04gT0YgVEhJUyBMSUNFTlNFLgorCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlCitub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKzYgVkVSU0lPTlMgT0YgVEhFIExJQ0VOU0UuCisKKzYuMS4gTmV3IFZlcnNpb25zLgorCitHcmFudG9yIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8KK3RpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCisKKzYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4KKworT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLAorWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbworY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZgordGhlIExpY2Vuc2UuCisKKzYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy4KKworSWYgWW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvCitpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzCitMaWNlbnNlKSwgWW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlICJnU09BUCIKK29yIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGluIHlvdXIgbGljZW5zZSAoZXhjZXB0IHRvIG5vdGUKK3RoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIKK3RoYXQgWW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBnU09BUAorUHVibGljIExpY2Vuc2UuIChGaWxsaW5nIGluIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgQ29kZSBvcgorQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlCitkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKQorNyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBPRiBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBJTlRFTExFQ1RVQUwgUFJPUEVSVFkKK1JJR0hUUywgQU5EIEFOWSBXQVJSQU5UWSBUSEFUIE1BWSBBUklTRSBCWSBSRUFTT04gT0YgVFJBREUgVVNBR0UsIENVU1RPTSwgT1IKK0NPVVJTRSBPRiBERUFMSU5HLiBXSVRIT1VUIExJTUlUSU5HIFRIRSBGT1JFR09JTkcsIFlPVSBBQ0tOT1dMRURHRSBUSEFUIFRIRQorU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhBVCBUSEUgQVVUSE9SUyBETyBOT1QgV0FSUkFOVCBUSEUKK1NPRlRXQVJFIFdJTEwgUlVOIFVOSU5URVJSVVBURUQgT1IgRVJST1IgRlJFRS4gTElNSVRFRCBMSUFCSUxJVFkgVEhFIEVOVElSRQorUklTSyBBUyBUTyBSRVNVTFRTIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgU09GVFdBUkUgSVMgQVNTVU1FRCBCWSBZT1UuIFVOREVSIE5PCitDSVJDVU1TVEFOQ0VTIFdJTEwgVEhFIEFVVEhPUlMgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitFWEVNUExBUlkgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBLSU5EIE9SIE5BVFVSRSBXSEFUU09FVkVSLCBXSEVUSEVSCitCQVNFRCBPTiBDT05UUkFDVCwgV0FSUkFOVFksIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUgorT1RIRVJXSVNFLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBFVkVOIElGIFRIRQorQVVUSE9SUyBIQVZFIEJFRU4gQURWSVNFRCBPTiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UgT1IgSUYgU1VDSCBEQU1BR0UKK0NPVUxEIEhBVkUgQkVFTiBSRUFTT05BQkxZIEZPUkVTRUVOLCBBTkQgTk9UV0lUSFNUQU5ESU5HIEFOWSBGQUlMVVJFIE9GCitFU1NFTlRJQUwgUFVSUE9TRSBPRiBBTlkgRVhDTFVTSVZFIFJFTUVEWSBQUk9WSURFRC4gU1VDSCBMSU1JVEFUSU9OIE9OIERBTUFHRVMKK0lOQ0xVREVTLCBCVVQgSVMgTk9UIExJTUlURUQgVE8sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIExPU1QgUFJPRklUUywKK0xPU1MgT0YgREFUQSBPUiBTT0ZUV0FSRSwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiBPUgorSU1QQUlSTUVOVCBPRiBPVEhFUiBHT09EUy4gSU4gTk8gRVZFTlQgV0lMTCBUSEUgQVVUSE9SUyBCRSBMSUFCTEUgRk9SIFRIRSBDT1NUUworT0YgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBTT0ZUV0FSRSBPUiBTRVJWSUNFUy4gWU9VIEFDS05PV0xFREdFIFRIQVQgVEhJUworU09GVFdBUkUgSVMgTk9UIERFU0lHTkVEIEZPUiBVU0UgSU4gT04tTElORSBFUVVJUE1FTlQgSU4gSEFaQVJET1VTIEVOVklST05NRU5UUworU1VDSCBBUyBPUEVSQVRJT04gT0YgTlVDTEVBUiBGQUNJTElUSUVTLCBBSVJDUkFGVCBOQVZJR0FUSU9OIE9SIENPTlRST0wsIE9SCitMSUZFLUNSSVRJQ0FMIEFQUExJQ0FUSU9OUy4gVEhFIEFVVEhPUlMgRVhQUkVTU0xZIERJU0NMQUlNIEFOWSBMSUFCSUxJVFkKK1JFU1VMVElORyBGUk9NIFVTRSBPRiBUSEUgU09GVFdBUkUgSU4gQU5ZIFNVQ0ggT04tTElORSBFUVVJUE1FTlQgSU4gSEFaQVJET1VTCitFTlZJUk9OTUVOVFMgQU5EIEFDQ0VQVFMgTk8gTElBQklMSVRZIElOIFJFU1BFQ1QgT0YgQU5ZIEFDVElPTlMgT1IgQ0xBSU1TIEJBU0VECitPTiBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSBJTiBBTlkgU1VDSCBPTi1MSU5FIEVRVUlQTUVOVCBJTiBIQVpBUkRPVVMKK0VOVklST05NRU5UUyBCWSBZT1UuIEZPUiBQVVJQT1NFUyBPRiBUSElTIFBBUkFHUkFQSCwgVEhFIFRFUk0gIkxJRkUtCitDUklUSUNBTCBBUFBMSUNBVElPTiIgTUVBTlMgQU4gQVBQTElDQVRJT04gSU4gV0hJQ0ggVEhFIEZVTkNUSU9OSU5HIE9SCitNQUxGVU5DVElPTklORyBPRiBUSEUgU09GVFdBUkUgTUFZIFJFU1VMVCBESVJFQ1RMWSBPUiBJTkRJUkVDVExZIElOIFBIWVNJQ0FMCitJTkpVUlkgT1IgTE9TUyBPRiBIVU1BTiBMSUZFLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4KK0VTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRAorSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCis4IFRFUk1JTkFUSU9OLgorCis4LjEuCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZgorWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwCitkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoCithcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMKK3doaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMKK0xpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKzguMi4KKzguMy4KK0lmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQgYWxsZWdpbmcgdGhhdAorc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55CitwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvCit0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YKK3RoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiBzaGFsbCBiZQordGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IKK2xpY2Vuc2UuCis4LjQuCitJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsIGVuZCB1c2VyCitsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2ggaGF2ZSBiZWVuCit2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwKK3N1cnZpdmUgdGVybWluYXRpb24uCis5IExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWQorT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkKK09GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwKK09SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLAorREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwKK09SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTAorSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRgorTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcKK0ZST00gU1VDSCBQQVJUWSdTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSAorTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YKK0lOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UCitBUFBMWSBUTyBZT1UuCisxMCBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorCisxMSBNSVNDRUxMQU5FT1VTLgorCisxMiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLgorCitBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlCitmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBpdHMgdXRpbGl6YXRpb24KK29mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kCitDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZworaGVyZWluIGlzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorRVhISUJJVCBBLgorCisiVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZ1NPQVAgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorMS4zICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQord2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CitodHRwOi8vd3d3LmNzLmZzdS5lZHUvIGVuZ2VsZW4vc29hcGxpY2Vuc2UuaHRtbAorU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KK1RoZSBPcmlnaW5hbCBDb2RlIG9mIHRoZSBnU09BUCBTb2Z0d2FyZSBpczogc3Rkc29hcC5oLCBzdGRzb2FwMi5oLCBzdGRzb2FwLmMsCitzdGRzb2FwMi5jLCBzdGRzb2FwLmNwcCwgc3Rkc29hcDIuY3BwLCBzb2FwY3BwMi5oLCBzb2FwY3BwMi5jLCBzb2FwY3BwMl9sZXgubCwKK3NvYXBjcHAyX3lhY2MueSwgZXJyb3IyLmgsIGVycm9yMi5jLCBzeW1ib2wyLmMsIGluaXQyLmMsIHNvYXBkb2MyLmh0bWwsIGFuZAorc29hcGRvYzIucGRmLCBodHRwZ2V0LmgsIGh0dHBnZXQuYywgc3RsLmgsIHN0bGRlcXVlLmgsIHN0bGxpc3QuaCwgc3RsdmVjdG9yLmgsCitzdGxzZXQuaC4KK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBSb2JlcnQgQS4gdmFuIEVuZ2VsZW4uIFBvcnRpb25zCitjcmVhdGVkIGJ5IFJvYmVydCBBLiB2YW4gRW5nZWxlbiBhcmUgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQgUm9iZXJ0IEEuIHZhbgorRW5nZWxlbiwgR2VuaXZpYSBpbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitDb250cmlidXRvcihzKToKKyJfX19fX19fX19fX19fX19fX19fX19fX18uIgorW05vdGU6IFRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIG1heSBkaWZmZXIgc2xpZ2h0bHkgZm9ybSB0aGUgdGV4dCBvZiB0aGUKK25vdGljZXMgaW4gdGhlIFNvdXJjZSBDb2RlIGZpbGVzIG9mIHRoZSBPcmlnaW5hbCBjb2RlLiBZb3Ugc2hvdWxkIHVzZSB0aGUgdGV4dAorb2YgdGhpcyBFeGhpYml0IEEgcmF0aGVyIHRoYW4gdGhlIHRleHQgZm91bmQgaW4gdGhlIE9yaWdpbmFsIENvZGUgU291cmNlIENvZGUKK2ZvciBZb3VyIE1vZGlmaWNhdGlvbnMuXQorRVhISUJJVCBCLgorCisiUGFydCBvZiB0aGUgc29mdHdhcmUgZW1iZWRkZWQgaW4gdGhpcyBwcm9kdWN0IGlzIGdTT0FQIHNvZnR3YXJlLgorUG9ydGlvbnMgY3JlYXRlZCBieSBnU09BUCBhcmUgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDkgUm9iZXJ0IEEuIHZhbiBFbmdlbGVuLAorR2VuaXZpYSBpbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitUSEUgU09GVFdBUkUgSU4gVEhJUyBQUk9EVUNUIFdBUyBJTiBQQVJUIFBST1ZJREVEIEJZIEdFTklWSUEgSU5DIEFORCBBTlkKK0VYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIgorCisKKworCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9nU09BUC0xLjNiIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9nU09BUC0xLjNiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Yzk0MmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL2dTT0FQLTEuM2IKQEAgLTAsMCArMSwxNTcgQEAKKworZ1NPQVAgUHVibGljIExpY2Vuc2UKKworVmVyc2lvbiAxLjNiCisKK1RoZSBnU09BUCBwdWJsaWMgbGljZW5zZSBpcyBkZXJpdmVkIGZyb20gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgKE1QTDEuMSkuIFRoZSBzZWN0aW9ucyB0aGF0IHdlcmUgZGVsZXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBNUEwxLjEgdGV4dCBhcmUgMS4wLjEsIDIuMS4oYyksKGQpLCAyLjIuKGMpLChkKSwgOC4yLihiKSwgMTAsIGFuZCAxMS4gU2VjdGlvbiAzLjggd2FzIGFkZGVkLiBUaGUgbW9kaWZpZWQgc2VjdGlvbnMgYXJlIDIuMS4oYiksIDIuMi4oYiksIDMuMiAoc2ltcGxpZmllZCksIDMuNSAoZGVsZXRlZCB0aGUgbGFzdCBzZW50ZW5jZSksIGFuZCAzLjYgKHNpbXBsaWZpZWQpLgorVGhpcyBsaWNlbnNlIGFwcGxpZXMgdG8gdGhlIGdTT0FQIHNvZnR3YXJlIHBhY2thZ2UsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgc29hcGNwcDIgYW5kIHdzZGwyaCBzb3VyY2UgY29kZSBsb2NhdGVkIGluIGdzb2FwL3NyYyBhbmQgZ3NvYXAvd3NkbCwgYWxsIGNvZGUgZ2VuZXJhdGVkIGJ5IHNvYXBjcHAyIGFuZCB3c2RsMmgsIHRoZSBVRERJIHNvdXJjZSBjb2RlIGdzb2FwL3VkZGkyLCBhbmQgdGhlIFdlYiBzZXJ2ZXIgc2FtcGxlIHNvdXJjZSBjb2RlIHNhbXBsZXMvd2Vic2VydmVyLiBUbyB1c2UgYW55IG9mIHRoZXNlIHNvZnR3YXJlIHRvb2xzIGFuZCBjb21wb25lbnRzIGNvbW1lcmNpYWxseSwgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgcmVxdWlyZWQgYW5kIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHd3dy5nZW5pdmlhLmNvbS4KKzEgIERFRklOSVRJT05TLgorCisxLjAuMS4KKzEuMS4gIkNvbnRyaWJ1dG9yIgorbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorMS4yLiAiQ29udHJpYnV0b3IgVmVyc2lvbiIKK21lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKzEuMy4gIkNvdmVyZWQgQ29kZSIKK21lYW5zIHRoZSBPcmlnaW5hbCBDb2RlLCBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKzEuNC4gIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSIKK21lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLgorMS41LiAiRXhlY3V0YWJsZSIKK21lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLgorMS42LiAiSW5pdGlhbCBEZXZlbG9wZXIiCittZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuCisxLjcuICJMYXJnZXIgV29yayIKK21lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisxLjguICJMaWNlbnNlIgorbWVhbnMgdGhpcyBkb2N1bWVudC4KKzEuOC4xLiAiTGljZW5zYWJsZSIKK21lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgorMS45LiAiTW9kaWZpY2F0aW9ucyIKK21lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOgorQS4KK0FueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCitCLgorQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUsIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisxLjEwLiAiT3JpZ2luYWwgQ29kZSIKK21lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuCisxLjEwLjEuICJQYXRlbnQgQ2xhaW1zIgorbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuCisxLjExLiAiU291cmNlIENvZGUiCittZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcmBzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKzEuMTIuICJZb3UiIChvciAiWW91ciIpCittZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorMiAgU09VUkNFIENPREUgTElDRU5TRS4KKworMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisoYSkKK3VuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisoYikKK3VuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IEluaXRpYWwgRGV2ZWxvcGVyLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSBhbmQgc2VsbCAoIm9mZmVyIHRvIHNlbGwgYW5kIGltcG9ydCIpIHRoZSBPcmlnaW5hbCBDb2RlLCBNb2RpZmljYXRpb25zLCBvciBwb3J0aW9ucyB0aGVyZW9mLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byB1dGlsaXplLCBhbG9uZSBvciBpbiBjb21iaW5hdGlvbiB3aXRoIG90aGVyIHNvZnR3YXJlLCB0aGUgT3JpZ2luYWwgQ29kZSwgTW9kaWZpY2F0aW9ucywgb3IgYW55IGNvbWJpbmF0aW9uIG9yIHBvcnRpb25zIHRoZXJlb2YuCisoYykKKyhkKQorCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorCitTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZQorKGEpCit1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisoYikKK3VuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IENvbnRyaWJ1dG9yLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSBhbmQgc2VsbCAoIm9mZmVyIHRvIHNlbGwgYW5kIGltcG9ydCIpIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gdXRpbGl6ZSwgYWxvbmUgb3IgaW4gY29tYmluYXRpb24gd2l0aCBvdGhlciBzb2Z0d2FyZSwgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLgorKGMpCisoZCkKKzMgIERJU1RSSUJVVElPTiBPQkxJR0FUSU9OUy4KKworMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLgorCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS4gCisKKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorCitBbnkgTW9kaWZpY2F0aW9uIGNyZWF0ZWQgYnkgWW91IHdpbGwgYmUgcHJvdmlkZWQgdG8gdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIFNvdXJjZSBDb2RlIGZvcm0gYW5kIGFyZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gCisKKzMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLiAKKworMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycy4KKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuCitJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHlgcyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsIENvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBTb3VyY2UgQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkICJMRUdBTCIgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZSBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKyhiKSBDb250cmlidXRvciBBUElzLgorSWYgQ29udHJpYnV0b3JgcyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLgorKGMpIFJlcHJlc2VudGF0aW9ucy4KK0NvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byBTZWN0aW9uIDMuNChhKSBhYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcmBzIE1vZGlmaWNhdGlvbnMgYXJlIENvbnRyaWJ1dG9yYHMgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS4KKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLgorCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gWW91IG11c3QgYWxzbyBkdXBsaWNhdGUgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyBvciBvd25lcnNoaXAgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gCisKKzMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCisKK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBvciBvd25lcnNoaXAgcmlnaHRzIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50YHMgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBJZiB5b3UgZGlzdHJpYnV0ZSBleGVjdXRhYmxlIHZlcnNpb25zIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlIGFzIHBhcnQgb2YgYSBwcm9kdWN0LCB5b3UgbXVzdCByZXByb2R1Y2UgdGhlIG5vdGljZSBpbiBFeGhpYml0IEIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBwcm9kdWN0LiAKKworMy43LiBMYXJnZXIgV29ya3MuCisKK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4gCisKKzMuOC4gUmVzdHJpY3Rpb25zLgorCitZb3UgbWF5IG5vdCByZW1vdmUgYW55IHByb2R1Y3QgaWRlbnRpZmljYXRpb24sIGNvcHlyaWdodCwgcHJvcHJpZXRhcnkgbm90aWNlcyBvciBsYWJlbHMgZnJvbSBnU09BUC4KKzQgIElOQUJJTElUWSBUTyBDT01QTFkgRFVFIFRPIFNUQVRVVEUgT1IgUkVHVUxBVElPTi4KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKzUgIEFQUExJQ0FUSU9OIE9GIFRISVMgTElDRU5TRS4KKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKzYgIFZFUlNJT05TIE9GIFRIRSBMSUNFTlNFLgorCis2LjEuIE5ldyBWZXJzaW9ucy4KKworR3JhbnRvciBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIAorCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCisKK09uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLiAKKworNi4zLiBEZXJpdmF0aXZlIFdvcmtzLgorCitJZiBZb3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgWW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlICJnU09BUCIgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgaW4geW91ciBsaWNlbnNlIChleGNlcHQgdG8gbm90ZSB0aGF0IHlvdXIgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgWW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBnU09BUCBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKQorNyAgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KKworQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIE9GIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUywgQU5EIEFOWSBXQVJSQU5UWSBUSEFUIE1BWSBBUklTRSBCWSBSRUFTT04gT0YgVFJBREUgVVNBR0UsIENVU1RPTSwgT1IgQ09VUlNFIE9GIERFQUxJTkcuIFdJVEhPVVQgTElNSVRJTkcgVEhFIEZPUkVHT0lORywgWU9VIEFDS05PV0xFREdFIFRIQVQgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIQVQgVEhFIEFVVEhPUlMgRE8gTk9UIFdBUlJBTlQgVEhFIFNPRlRXQVJFIFdJTEwgUlVOIFVOSU5URVJSVVBURUQgT1IgRVJST1IgRlJFRS4gTElNSVRFRCBMSUFCSUxJVFkgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFJFU1VMVFMgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBTT0ZUV0FSRSBJUyBBU1NVTUVEIEJZIFlPVS4gVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBXSUxMIFRIRSBBVVRIT1JTIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULCBJTkNJREVOVEFMLCBFWEVNUExBUlkgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBLSU5EIE9SIE5BVFVSRSBXSEFUU09FVkVSLCBXSEVUSEVSIEJBU0VEIE9OIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgRVZFTiBJRiBUSEUgQVVUSE9SUyBIQVZFIEJFRU4gQURWSVNFRCBPTiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UgT1IgSUYgU1VDSCBEQU1BR0UgQ09VTEQgSEFWRSBCRUVOIFJFQVNPTkFCTFkgRk9SRVNFRU4sIEFORCBOT1RXSVRIU1RBTkRJTkcgQU5ZIEZBSUxVUkUgT0YgRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIEVYQ0xVU0lWRSBSRU1FRFkgUFJPVklERUQuIFNVQ0ggTElNSVRBVElPTiBPTiBEQU1BR0VTIElOQ0xVREVTLCBCVVQgSVMgTk9UIExJTUlURUQgVE8sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIExPU1QgUFJPRklUUywgTE9TUyBPRiBEQVRBIE9SIFNPRlRXQVJFLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OIE9SIElNUEFJUk1FTlQgT0YgT1RIRVIgR09PRFMuIElOIE5PIEVWRU5UIFdJTEwgVEhFIEFVVEhPUlMgQkUgTElBQkxFIEZPUiBUSEUgQ09TVFMgT0YgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBTT0ZUV0FSRSBPUiBTRVJWSUNFUy4gWU9VIEFDS05PV0xFREdFIFRIQVQgVEhJUyBTT0ZUV0FSRSBJUyBOT1QgREVTSUdORUQgRk9SIFVTRSBJTiBPTi1MSU5FIEVRVUlQTUVOVCBJTiBIQVpBUkRPVVMgRU5WSVJPTk1FTlRTIFNVQ0ggQVMgT1BFUkFUSU9OIE9GIE5VQ0xFQVIgRkFDSUxJVElFUywgQUlSQ1JBRlQgTkFWSUdBVElPTiBPUiBDT05UUk9MLCBPUiBMSUZFLUNSSVRJQ0FMIEFQUExJQ0FUSU9OUy4gVEhFIEFVVEhPUlMgRVhQUkVTU0xZIERJU0NMQUlNIEFOWSBMSUFCSUxJVFkgUkVTVUxUSU5HIEZST00gVVNFIE9GIFRIRSBTT0ZUV0FSRSBJTiBBTlkgU1VDSCBPTi1MSU5FIEVRVUlQTUVOVCBJTiBIQVpBUkRPVVMgRU5WSVJPTk1FTlRTIEFORCBBQ0NFUFRTIE5PIExJQUJJTElUWSBJTiBSRVNQRUNUIE9GIEFOWSBBQ1RJT05TIE9SIENMQUlNUyBCQVNFRCBPTiBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSBJTiBBTlkgU1VDSCBPTi1MSU5FIEVRVUlQTUVOVCBJTiBIQVpBUkRPVVMgRU5WSVJPTk1FTlRTIEJZIFlPVS4gRk9SIFBVUlBPU0VTIE9GIFRISVMgUEFSQUdSQVBILCBUSEUgVEVSTSAiTElGRS1DUklUSUNBTCBBUFBMSUNBVElPTiIgTUVBTlMgQU4gQVBQTElDQVRJT04gSU4gV0hJQ0ggVEhFIEZVTkNUSU9OSU5HIE9SIE1BTEZVTkNUSU9OSU5HIE9GIFRIRSBTT0ZUV0FSRSBNQVkgUkVTVUxUIERJUkVDVExZIE9SIElORElSRUNUTFkgSU4gUEhZU0lDQUwgSU5KVVJZIE9SIExPU1MgT0YgSFVNQU4gTElGRS4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKzggIFRFUk1JTkFUSU9OLgorCis4LjEuCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCis4LjIuCis4LjMuCitJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50IGFsbGVnaW5nIHRoYXQgc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiBzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvciBsaWNlbnNlLgorOC40LgorSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDguMSBvciA4LjIgYWJvdmUsIGFsbCBlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2ggaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLgorOSAgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCisKK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZYFMgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKzEwICBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorCisxMSAgTUlTQ0VMTEFORU9VUy4KKworMTIgIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuCisKK0FzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMgcmVzcG9uc2libGUgZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nIGhlcmVpbiBpcyBpbnRlbmRlZCBvciBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KK0VYSElCSVQgQS4KKworIlRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGdTT0FQIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4zICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKK2h0dHA6Ly93d3cuY3MuZnN1LmVkdS8gZW5nZWxlbi9zb2FwbGljZW5zZS5odG1sCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KK1RoZSBPcmlnaW5hbCBDb2RlIG9mIHRoZSBnU09BUCBTb2Z0d2FyZSBpczogc3Rkc29hcC5oLCBzdGRzb2FwMi5oLCBzdGRzb2FwLmMsIHN0ZHNvYXAyLmMsIHN0ZHNvYXAuY3BwLCBzdGRzb2FwMi5jcHAsIHNvYXBjcHAyLmgsIHNvYXBjcHAyLmMsIHNvYXBjcHAyX2xleC5sLCBzb2FwY3BwMl95YWNjLnksIGVycm9yMi5oLCBlcnJvcjIuYywgc3ltYm9sMi5jLCBpbml0Mi5jLCBzb2FwZG9jMi5odG1sLCBhbmQgc29hcGRvYzIucGRmLCBodHRwZ2V0LmgsIGh0dHBnZXQuYywgc3RsLmgsIHN0bGRlcXVlLmgsIHN0bGxpc3QuaCwgc3RsdmVjdG9yLmgsIHN0bHNldC5oLgorVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIFJvYmVydCBBLiB2YW4gRW5nZWxlbi4gUG9ydGlvbnMgY3JlYXRlZCBieSBSb2JlcnQgQS4gdmFuIEVuZ2VsZW4gYXJlIENvcHlyaWdodCAoQykgMjAwMS0yMDA0IFJvYmVydCBBLiB2YW4gRW5nZWxlbiwgR2VuaXZpYSBpbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitDb250cmlidXRvcihzKToKKyJfX19fX19fX19fX19fX19fX19fX19fX18uIgorW05vdGU6IFRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIG1heSBkaWZmZXIgc2xpZ2h0bHkgZm9ybSB0aGUgdGV4dCBvZiB0aGUgbm90aWNlcyBpbiB0aGUgU291cmNlIENvZGUgZmlsZXMgb2YgdGhlIE9yaWdpbmFsIGNvZGUuIFlvdSBzaG91bGQgdXNlIHRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIHJhdGhlciB0aGFuIHRoZSB0ZXh0IGZvdW5kIGluIHRoZSBPcmlnaW5hbCBDb2RlIFNvdXJjZSBDb2RlIGZvciBZb3VyIE1vZGlmaWNhdGlvbnMuXQorRVhISUJJVCBCLgorCisiUGFydCBvZiB0aGUgc29mdHdhcmUgZW1iZWRkZWQgaW4gdGhpcyBwcm9kdWN0IGlzIGdTT0FQIHNvZnR3YXJlLgorUG9ydGlvbnMgY3JlYXRlZCBieSBnU09BUCBhcmUgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDkgUm9iZXJ0IEEuIHZhbiBFbmdlbGVuLCBHZW5pdmlhIGluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK1RIRSBTT0ZUV0FSRSBJTiBUSElTIFBST0RVQ1QgV0FTIElOIFBBUlQgUFJPVklERUQgQlkgR0VOSVZJQSBJTkMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvdGNsIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy90Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwNDljZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvdGNsCkBAIC0wLDAgKzEsNDAgQEAKK1RoaXMgc29mdHdhcmUgaXMgY29weXJpZ2h0ZWQgYnkgdGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YKK0NhbGlmb3JuaWEsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4sIFNjcmlwdGljcyBDb3Jwb3JhdGlvbiwgQWN0aXZlU3RhdGUKK0NvcnBvcmF0aW9uIGFuZCBvdGhlciBwYXJ0aWVzLiAgVGhlIGZvbGxvd2luZyB0ZXJtcyBhcHBseSB0byBhbGwgZmlsZXMKK2Fzc29jaWF0ZWQgd2l0aCB0aGUgc29mdHdhcmUgdW5sZXNzIGV4cGxpY2l0bHkgZGlzY2xhaW1lZCBpbgoraW5kaXZpZHVhbCBmaWxlcy4KKworVGhlIGF1dGhvcnMgaGVyZWJ5IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsCithbmQgbGljZW5zZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UsIHByb3ZpZGVkCit0aGF0IGV4aXN0aW5nIGNvcHlyaWdodCBub3RpY2VzIGFyZSByZXRhaW5lZCBpbiBhbGwgY29waWVzIGFuZCB0aGF0IHRoaXMKK25vdGljZSBpcyBpbmNsdWRlZCB2ZXJiYXRpbSBpbiBhbnkgZGlzdHJpYnV0aW9ucy4gTm8gd3JpdHRlbiBhZ3JlZW1lbnQsCitsaWNlbnNlLCBvciByb3lhbHR5IGZlZSBpcyByZXF1aXJlZCBmb3IgYW55IG9mIHRoZSBhdXRob3JpemVkIHVzZXMuCitNb2RpZmljYXRpb25zIHRvIHRoaXMgc29mdHdhcmUgbWF5IGJlIGNvcHlyaWdodGVkIGJ5IHRoZWlyIGF1dGhvcnMKK2FuZCBuZWVkIG5vdCBmb2xsb3cgdGhlIGxpY2Vuc2luZyB0ZXJtcyBkZXNjcmliZWQgaGVyZSwgcHJvdmlkZWQgdGhhdAordGhlIG5ldyB0ZXJtcyBhcmUgY2xlYXJseSBpbmRpY2F0ZWQgb24gdGhlIGZpcnN0IHBhZ2Ugb2YgZWFjaCBmaWxlIHdoZXJlCit0aGV5IGFwcGx5LgorCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBESVNUUklCVVRPUlMgQkUgTElBQkxFIFRPIEFOWSBQQVJUWQorRk9SIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBJVFMgRE9DVU1FTlRBVElPTiwgT1IgQU5ZCitERVJJVkFUSVZFUyBUSEVSRU9GLCBFVkVOIElGIFRIRSBBVVRIT1JTIEhBVkUgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK1RIRSBBVVRIT1JTIEFORCBESVNUUklCVVRPUlMgU1BFQ0lGSUNBTExZIERJU0NMQUlNIEFOWSBXQVJSQU5USUVTLAorSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULiAgVEhJUyBTT0ZUV0FSRQorSVMgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFRIRSBBVVRIT1JTIEFORCBESVNUUklCVVRPUlMgSEFWRQorTk8gT0JMSUdBVElPTiBUTyBQUk9WSURFIE1BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SCitNT0RJRklDQVRJT05TLgorCitHT1ZFUk5NRU5UIFVTRTogSWYgeW91IGFyZSBhY3F1aXJpbmcgdGhpcyBzb2Z0d2FyZSBvbiBiZWhhbGYgb2YgdGhlCitVLlMuIGdvdmVybm1lbnQsIHRoZSBHb3Zlcm5tZW50IHNoYWxsIGhhdmUgb25seSAiUmVzdHJpY3RlZCBSaWdodHMiCitpbiB0aGUgc29mdHdhcmUgYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBhcyBkZWZpbmVkIGluIHRoZSBGZWRlcmFsCitBY3F1aXNpdGlvbiBSZWd1bGF0aW9ucyAoRkFScykgaW4gQ2xhdXNlIDUyLjIyNy4xOSAoYykgKDIpLiAgSWYgeW91CithcmUgYWNxdWlyaW5nIHRoZSBzb2Z0d2FyZSBvbiBiZWhhbGYgb2YgdGhlIERlcGFydG1lbnQgb2YgRGVmZW5zZSwgdGhlCitzb2Z0d2FyZSBzaGFsbCBiZSBjbGFzc2lmaWVkIGFzICJDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlIiBhbmQgdGhlCitHb3Zlcm5tZW50IHNoYWxsIGhhdmUgb25seSAiUmVzdHJpY3RlZCBSaWdodHMiIGFzIGRlZmluZWQgaW4gQ2xhdXNlCisyNTIuMjI3LTcwMTQgKGIpICgzKSBvZiBERkFScy4gIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCB0aGUKK2F1dGhvcnMgZ3JhbnQgdGhlIFUuUy4gR292ZXJubWVudCBhbmQgb3RoZXJzIGFjdGluZyBpbiBpdHMgYmVoYWxmCitwZXJtaXNzaW9uIHRvIHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGUgc29mdHdhcmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZQordGVybXMgc3BlY2lmaWVkIGluIHRoaXMgbGljZW5zZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvdW5mczMgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL3VuZnMzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMmI1M2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL3VuZnMzCkBAIC0wLDAgKzEsMjQgQEAKK1VORlMzIHVzZXItc3BhY2UgTkZTdjMgc2VydmVyCisoQykgMjAwMywgUGFzY2FsIFNjaG1pZHQgPHVuZnMzLXNlcnZlckBld2V0ZWwubmV0PgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECitXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8KK0VWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1BST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOworT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCitXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgorT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvZGVwbG95ZGlyX3JlYWRtZS50eHQgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvZGVwbG95ZGlyX3JlYWRtZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdlYzE4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9kZXBsb3lkaXJfcmVhZG1lLnR4dApAQCAtMCwwICsxLDggQEAKK0ZpbGVzIGluIHRoZSBkZXBsb3kgZGlyZWN0b3J5IHdpbGwgbm90IGJlIHJlLWNyZWF0ZWQgYXV0b21hdGljYWxseSBpZiB5b3UKK2RlbGV0ZSB0aGVtLiBJZiB5b3UgZG8gZGVsZXRlIGEgZmlsZSwgeW91IHdpbGwgbmVlZCB0byBydW46CisKKyAgYml0YmFrZSAtYyBjbGVhbiBUQVJHRVQKKyAgYml0YmFrZSBUQVJHRVQKKword2hlcmUgVEFSR0VUIGlzIHRoZSBuYW1lIG9mIHRoZSBhcHByb3ByaWF0ZSBwYWNrYWdlIG9yIHRhcmdldCBlLmcuCisidmlydHVhbC9rZXJuZWwiIGZvciB0aGUga2VybmVsLCBhbiBpbWFnZSwgZXRjLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2RldmljZV90YWJsZS1taW5pbWFsLnR4dCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9kZXZpY2VfdGFibGUtbWluaW1hbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ4OTFjYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9kZXZpY2VfdGFibGUtbWluaW1hbC50eHQKQEAgLTAsMCArMSwzNSBAQAorIzxwYXRoPgk8dHlwZT4gPG1vZGU+CTx1aWQ+CTxnaWQ+CTxtYWpvcj4JPG1pbm9yPgk8c3RhcnQ+CTxpbmM+CTxjb3VudD4KKyMvZGV2L21lbSAgICBjICAgICAgNjQwICAgICAgMCAgICAgICAwICAgICAgIDEgICAgICAgMSAgICAgICAwICAgICAgICAwICAgICAgICAtCisjCisjdHlwZSBjYW4gYmUgb25lIG9mOiAKKyMgICAgZglBIHJlZ3VsYXIgZmlsZQorIyAgICBkCURpcmVjdG9yeQorIyAgICBjCUNoYXJhY3RlciBzcGVjaWFsIGRldmljZSBmaWxlCisjICAgIGIJQmxvY2sgc3BlY2lhbCBkZXZpY2UgZmlsZQorIyAgICBwCUZpZm8gKG5hbWVkIHBpcGUpCisKKy9kZXYJCWQJNzU1CXJvb3QJcm9vdAktCS0JLQktCS0KKy9kZXYvY29uc29sZQljCTY2Mglyb290CXR0eQk1CTEJLQktCS0KKy9kZXYvZmIwCWMJNjAwCXJvb3QJcm9vdAkyOQkwCS0JLQktCisvZGV2L2hkYQliCTY2MAlyb290CWRpc2sJMwkwCS0JLQktCisvZGV2L2hkYQliCTY2MAlyb290CWRpc2sJMwkxCTEJMQk0CisvZGV2L2ttZW0JYwk2NDAJcm9vdAlrbWVtCTEJMgktCS0JLQorL2Rldi9rbXNnCWMJNjAwCXJvb3QJcm9vdAkxCTExCS0JLQktCisvZGV2L21lbQljCTY0MAlyb290CWttZW0JMQkxCS0JLQktCisvZGV2L21tY2JsazAJYgk2NjAJcm9vdAlkaXNrCTE3OQkwCS0JLQktCisvZGV2L21tY2JsazBwCWIJNjYwCXJvb3QJZGlzawkxNzkJMQkxCTEJNAorL2Rldi9tdGQJYwk2NjAJcm9vdAlkaXNrCTkwCTAJMAkyCTgKKy9kZXYvbXRkYmxvY2sJYgk2NDAJcm9vdAlyb290CTMxCTAJMAkxCTgKKy9kZXYvbnVsbAljCTY2Nglyb290CXJvb3QJMQkzCS0JLQktCisvZGV2L3JhbQliCTY0MAlyb290CXJvb3QJMQkwCTAJMQk0CisvZGV2L3JhbmRvbQljCTY0NAlyb290CXJvb3QJMQk4CS0JLQktCisvZGV2L3J0YwljCTY0NAlyb290CXJvb3QJMjU0CTAJMAkxCTIKKy9kZXYvc2RhCWIJNjYwCXJvb3QJZGlzawk4CTAJLQktCS0KKy9kZXYvc2RhCWIJNjYwCXJvb3QJZGlzawk4CTEJMQkxCTQKKy9kZXYvc2RiCWIJNjYwCXJvb3QJZGlzawk4CTE2CS0JLQktCisvZGV2L3NkYgliCTY2MAlyb290CWRpc2sJOAkxNwkxCTEJNAorL2Rldi90dHkJYwk2NjIJcm9vdAl0dHkJNQkwCS0JLQktCisvZGV2L3R0eQljCTY2Nglyb290CXR0eQk0CTAJMAkxCTgKKy9kZXYvdHR5UwljCTY0MAlyb290CXR0eQk0CTY0CTAJMQkyCisvZGV2L3VyYW5kb20JYwk2NDQJcm9vdAlyb290CTEJOQktCS0JLQorL2Rldi96ZXJvCWMJNjQ0CXJvb3QJcm9vdAkxCTUJLQktCS0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9mcy1wZXJtcy50eHQgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvZnMtcGVybXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwOWNiZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvZnMtcGVybXMudHh0CkBAIC0wLDAgKzEsNjcgQEAKKyMgVGhpcyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgd2l0aCBrbm93biBwZXJtaXNzaW9ucy4KKyMgSXQgaXMgdXNlZCBieSB0aGUgcGFja2FnaW5nIGNsYXNzIHRvIGVuc3VyZSB0aGF0IHRoZSBwZXJtaXNzaW9ucywgb3duZXJzIGFuZAorIyBncm91cCBvZiBsaXN0ZWQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGFyZSBpbiBzeW5jIGFjcm9zcyB0aGUgc3lzdGVtLgorIworIyBUaGUgZm9ybWF0IG9mIHRoaXMgZmlsZSAKKyMKKyM8cGF0aD4JPG1vZGU+CTx1aWQ+CTxnaWQ+CTx3YWxrPgk8Zm1vZGU+CTxmdWlkPgk8ZmdpZD4KKyMKKyMgb3IKKyMKKyM8cGF0aD4gbGluayA8dGFyZ2V0PgorIworIyA8cGF0aD46IGRpcmVjdG9yeSBwYXRoCisjIDxtb2RlPjogbW9kZSBmb3IgZGlyZWN0b3J5CisjIDx1aWQ+OiAgdWlkIGZvciBkaXJlY3RvcnkKKyMgPGdpZD46ICBnaWQgZm9yIGRpcmVjdG9yeQorIyA8d2Fsaz46IHJlY3Vyc2l2ZWx5IHdhbGsgdGhlIGRpcmVjdG9yeT8gIHRydWUgb3IgZmFsc2UKKyMgPGZtb2RlPjogaWYgd2Fsa2luZywgbmV3IG1vZGUgZm9yIGZpbGVzCisjIDxmdWlkPjogIGlmIHdhbGtpbmcsIG5ldyB1aWQgZm9yIGZpbGVzCisjIDxmZ2lkPjogIGlmIHdhbGtpbmcsIG5ldyBnaWQgZm9yIGZpbGVzCisjIDx0YXJnZXQ+OiB0dXJuIHRoZSBkaXJlY3RvcnkgaW50byBhIHN5bWxpbmsgcG9pbnQgdG8gdGFyZ2V0CisjCisjIGluIG1vZGUsIHVpZCBvciBnaWQsIGEgIi0iIG1lYW5zIGRvbid0IGNoYW5nZSBhbnkgZXhpc3RpbmcgdmFsdWVzCisjCisjIC91c3Ivc3JjCQkwNzU1CXJvb3QJcm9vdAlmYWxzZQktCS0JLQorIyAvdXNyL3NoYXJlL21hbgkwNzU1CXJvb3QJcm9vdAl0cnVlCTA2NDQJcm9vdAlyb290CisKKyMgTm90ZTogYWxsIHN0YW5kYXJkIGNvbmZpZyBkaXJlY3RvcmllcyBhcmUgYXV0b21hdGljYWxseSBhc3NpZ25lZCAiMDc1NSByb290IHJvb3QgZmFsc2UgLSAtIC0iCisKKyMgRG9jdW1lbnRhdGlvbiBzaG91bGQgYWx3YXlzIGJlIGNvcnJlY3RlZAorJHttYW5kaXJ9CQkwNzU1CXJvb3QJcm9vdAl0cnVlCTA2NDQJcm9vdAlyb290Ciske2luZm9kaXJ9CQkwNzU1CXJvb3QJcm9vdAl0cnVlCTA2NDQJcm9vdAlyb290Ciske2RvY2Rpcn0JCTA3NTUJcm9vdAlyb290CXRydWUJMDY0NAlyb290CXJvb3QKKyR7ZGF0YWRpcn0vZ3RrLWRvYwkwNzU1CXJvb3QJcm9vdAl0cnVlCTA2NDQJcm9vdAlyb290CisKKyMgRml4dXAgbG9jYWxlcworJHtkYXRhZGlyfS9sb2NhbGUJMDc1NQlyb290CXJvb3QJdHJ1ZQkwNjQ0CXJvb3QJcm9vdAorCisjIENsZWFudXAgaGVhZGVycworJHtpbmNsdWRlZGlyfQkJMDc1NQlyb290CXJvb3QJdHJ1ZQkwNjQ0CXJvb3QJcm9vdAorJHtvbGRpbmNsdWRlZGlyfQkwNzU1CXJvb3QJcm9vdAl0cnVlCTA2NDQJcm9vdAlyb290CisKKyMgQ2xlYW51cCBkZWJ1ZyBzcmMKKy91c3Ivc3JjL2RlYnVnCQkwNzU1CXJvb3QJcm9vdAl0cnVlCS0Jcm9vdAlyb290CisKKyMgSXRlbXMgZnJvbSBiYXNlLWZpbGVzCisjIExpbmtzCiske2xvY2Fsc3RhdGVkaXJ9L3J1bglsaW5rCS9ydW4KKyR7bG9jYWxzdGF0ZWRpcn0vbG9nCWxpbmsJdm9sYXRpbGUvbG9nCiske2xvY2Fsc3RhdGVkaXJ9L2xvY2sJbGluawkvcnVuL2xvY2sKKyR7bG9jYWxzdGF0ZWRpcn0vdG1wCWxpbmsJdm9sYXRpbGUvdG1wCisKKy9ob21lCQkJCTA3NTUJcm9vdAlyb290CWZhbHNlIC0gLSAtCisvc3J2CQkJCTA3NTUJcm9vdAlyb290CWZhbHNlIC0gLSAtCiske3ByZWZpeH0vc3JjCQkJMDc1NQlyb290CXJvb3QJZmFsc2UgLSAtIC0KKyR7bG9jYWxzdGF0ZWRpcn0vbG9jYWwJCTA3NTUJcm9vdAlyb290CWZhbHNlIC0gLSAtCisKKyMgU3BlY2lhbCBwZXJtaXNzaW9ucyBmcm9tIGJhc2UtZmlsZXMKKyMgU2V0IDE3NzcKKy90bXAJCQkJMDE3NzcJcm9vdAlyb290CWZhbHNlIC0gLSAtCiske2xvY2Fsc3RhdGVkaXJ9L3ZvbGF0aWxlL3RtcAkwMTc3Nwlyb290CXJvb3QJZmFsc2UgLSAtIC0KKworIyBTZXQgNzU1LWxzYgorL3NydgkJCQkwNzU1CXJvb3QJcm9vdAlmYWxzZSAtIC0gLQorCisjIFNldCAyNzc1LWxzYgorL3Zhci9tYWlsCQkJMDI3NzUJcm9vdAltYWlsCWZhbHNlIC0gLSAtCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvdG9vbGNoYWluLXNoYXItZXh0cmFjdC5zaCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy90b29sY2hhaW4tc2hhci1leHRyYWN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMGE1NDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvdG9vbGNoYWluLXNoYXItZXh0cmFjdC5zaApAQCAtMCwwICsxLDE4OSBAQAorIyEvYmluL2Jhc2gKKworSU5TVF9BUkNIPSQodW5hbWUgLW0gfCBzZWQgLWUgInMvaVszLTZdODYvaXg4Ni8iIC1lICJzL3g4NlstX102NC94ODZfNjQvIikKK1NES19BUkNIPSQoZWNobyBAU0RLX0FSQ0hAIHwgc2VkIC1lICJzL2lbMy02XTg2L2l4ODYvIiAtZSAicy94ODZbLV9dNjQveDg2XzY0LyIpCisKK3Zlcmx0ZSAoKSB7CisJWyAgIiQxIiA9ICJgcHJpbnRmICIkMVxuJDIiIHwgc29ydCAtViB8IGhlYWQgLW4xYCIgXQorfQorCit2ZXJsdCgpIHsKKwlbICIkMSIgPSAiJDIiIF0gJiYgcmV0dXJuIDEgfHwgdmVybHRlICQxICQyCit9CisKK3Zlcmx0IGB1bmFtZSAtcmAgQE9MREVTVF9LRVJORUxACitpZiBbICQ/ID0gMCBdOyB0aGVuCisJZWNobyAiRXJyb3I6IFRoZSBTREsgbmVlZHMgYSBrZXJuZWwgPiBAT0xERVNUX0tFUk5FTEAiCisJZXhpdCAxCitmaQorCitpZiBbICIkSU5TVF9BUkNIIiAhPSAiJFNES19BUkNIIiBdOyB0aGVuCisJIyBBbGxvdyBmb3IgaW5zdGFsbGF0aW9uIG9mIGl4ODYgU0RLIG9uIHg4Nl82NCBob3N0CisJaWYgWyAiJElOU1RfQVJDSCIgIT0geDg2XzY0IC1vICIkU0RLX0FSQ0giICE9IGl4ODYgXTsgdGhlbgorCQllY2hvICJFcnJvcjogSW5zdGFsbGF0aW9uIG1hY2hpbmUgbm90IHN1cHBvcnRlZCEiCisJCWV4aXQgMQorCWZpCitmaQorCitERUZBVUxUX0lOU1RBTExfRElSPSJAU0RLUEFUSEAiCitTVURPX0VYRUM9IiIKK3RhcmdldF9zZGtfZGlyPSIiCithbnN3ZXI9IiIKK3JlbG9jYXRlPTEKK3NhdmVzY3JpcHRzPTAKK3ZlcmJvc2U9MAord2hpbGUgZ2V0b3B0cyAiOnlkOm5EUlMiIE9QVDsgZG8KKwljYXNlICRPUFQgaW4KKwl5KQorCQlhbnN3ZXI9IlkiCisJCTs7CisJZCkKKwkJdGFyZ2V0X3Nka19kaXI9JE9QVEFSRworCQk7OworCW4pCisJCXByZXBhcmVfYnVpbGRzeXN0ZW09Im5vIgorCQk7OworCUQpCisJCXZlcmJvc2U9MQorCQk7OworCVIpCisJCXJlbG9jYXRlPTAKKwkJc2F2ZXNjcmlwdHM9MQorCQk7OworCVMpCisJCXNhdmVzY3JpcHRzPTEKKwkJOzsKKwkqKQorCQllY2hvICJVc2FnZTogJChiYXNlbmFtZSAkMCkgWy15XSBbLWQgPGRpcj5dIgorCQllY2hvICIgIC15ICAgICAgICAgQXV0b21hdGljIHllcyB0byBhbGwgcHJvbXB0cyIKKwkJZWNobyAiICAtZCA8ZGlyPiAgIEluc3RhbGwgdGhlIFNESyB0byA8ZGlyPiIKKwkJZWNobyAiPT09PT09PT0gRXh0ZW5zaWJsZSBTREsgb25seSBvcHRpb25zID09PT09PT09PT09PSIKKwkJZWNobyAiICAtbiAgICAgICAgIERvIG5vdCBwcmVwYXJlIHRoZSBidWlsZCBzeXN0ZW0iCisJCWVjaG8gIj09PT09PT09IEFkdmFuY2VkIERFQlVHR0lORyBPTkxZIE9QVElPTlMgPT09PT09PT0iCisJCWVjaG8gIiAgLVMgICAgICAgICBTYXZlIHJlbG9jYXRpb24gc2NyaXB0cyIKKwkJZWNobyAiICAtUiAgICAgICAgIERvIG5vdCByZWxvY2F0ZSBleGVjdXRhYmxlcyIKKwkJZWNobyAiICAtRCAgICAgICAgIHVzZSBzZXQgLXggdG8gc2VlIHdoYXQgaXMgZ29pbmcgb24iCisJCWV4aXQgMQorCQk7OworCWVzYWMKK2RvbmUKKworZWNobyAiQFNES19USVRMRUAgaW5zdGFsbGVyIHZlcnNpb24gQFNES19WRVJTSU9OQCIKK2VjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgorCitpZiBbICR2ZXJib3NlID0gMSBdIDsgdGhlbgorCXNldCAteAorZmkKKworQFNES19QUkVfSU5TVEFMTF9DT01NQU5EQAorCisjIFNES19FWFRFTlNJQkxFIGlzIGV4cG9zZWQgZnJvbSB0aGUgU0RLX1BSRV9JTlNUQUxMX0NPTU1BTkQgYWJvdmUKK2lmIFsgIiRTREtfRVhURU5TSUJMRSIgPSAiMSIgXTsgdGhlbgorCURFRkFVTFRfSU5TVEFMTF9ESVI9IkBTREtFWFRQQVRIQCIKK2ZpCisKK2lmIFsgIiR0YXJnZXRfc2RrX2RpciIgPSAiIiBdOyB0aGVuCisJaWYgWyAiJGFuc3dlciIgPSAiWSIgXTsgdGhlbgorCQl0YXJnZXRfc2RrX2Rpcj0iJERFRkFVTFRfSU5TVEFMTF9ESVIiCisJZWxzZQorCQlyZWFkIC1lIC1wICJFbnRlciB0YXJnZXQgZGlyZWN0b3J5IGZvciBTREsgKGRlZmF1bHQ6ICRERUZBVUxUX0lOU1RBTExfRElSKTogIiB0YXJnZXRfc2RrX2RpcgorCQlbICIkdGFyZ2V0X3Nka19kaXIiID0gIiIgXSAmJiB0YXJnZXRfc2RrX2Rpcj0kREVGQVVMVF9JTlNUQUxMX0RJUgorCWZpCitmaQorCitldmFsIHRhcmdldF9zZGtfZGlyPSQoZWNobyAiJHRhcmdldF9zZGtfZGlyInxzZWQgJ3MvIC9cXCAvZycpCitpZiBbIC1kICIkdGFyZ2V0X3Nka19kaXIiIF07IHRoZW4KKwl0YXJnZXRfc2RrX2Rpcj0kKGNkICIkdGFyZ2V0X3Nka19kaXIiOyBwd2QpCitlbHNlCisJdGFyZ2V0X3Nka19kaXI9JChyZWFkbGluayAtbSAiJHRhcmdldF9zZGtfZGlyIikKK2ZpCisKK2lmIFsgIiRTREtfRVhURU5TSUJMRSIgPSAiMSIgXTsgdGhlbgorCSMgV2UncmUgZ29pbmcgdG8gYmUgcnVubmluZyB0aGUgYnVpbGQgc3lzdGVtLCBhZGRpdGlvbmFsIHJlc3RyaWN0aW9ucyBhcHBseQorCWlmIGVjaG8gIiR0YXJnZXRfc2RrX2RpciIgfCBncmVwIC1xICdbK1wgQF0nOyB0aGVuCisJCWVjaG8gIlRoZSB0YXJnZXQgZGlyZWN0b3J5IHBhdGggKCR0YXJnZXRfc2RrX2RpcikgY29udGFpbnMgaWxsZWdhbCIgXAorCQkgICAgICJjaGFyYWN0ZXJzIHN1Y2ggYXMgc3BhY2VzLCBAIG9yICsuIEFib3J0ISIKKwkJZXhpdCAxCisJZmkKK2Vsc2UKKwlpZiBbIC1uICIkKGVjaG8gJHRhcmdldF9zZGtfZGlyfGdyZXAgJyAnKSIgXTsgdGhlbgorCQllY2hvICJUaGUgdGFyZ2V0IGRpcmVjdG9yeSBwYXRoICgkdGFyZ2V0X3Nka19kaXIpIGNvbnRhaW5zIHNwYWNlcy4gQWJvcnQhIgorCQlleGl0IDEKKwlmaQorZmkKKworaWYgWyAtZSAiJHRhcmdldF9zZGtfZGlyL2Vudmlyb25tZW50LXNldHVwLUBSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTQCIgXTsgdGhlbgorCWVjaG8gIlRoZSBkaXJlY3RvcnkgXCIkdGFyZ2V0X3Nka19kaXJcIiBhbHJlYWR5IGNvbnRhaW5zIGEgU0RLIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4iCisJcHJpbnRmICJJZiB5b3UgY29udGludWUsIGV4aXN0aW5nIGZpbGVzIHdpbGwgYmUgb3ZlcndyaXR0ZW4hIFByb2NlZWRbeS9OXT8gIgorCisJZGVmYXVsdF9hbnN3ZXI9Im4iCitlbHNlCisJcHJpbnRmICJZb3UgYXJlIGFib3V0IHRvIGluc3RhbGwgdGhlIFNESyB0byBcIiR0YXJnZXRfc2RrX2RpclwiLiBQcm9jZWVkW1kvbl0/ICIKKworCWRlZmF1bHRfYW5zd2VyPSJ5IgorZmkKKworaWYgWyAiJGFuc3dlciIgPSAiIiBdOyB0aGVuCisJcmVhZCBhbnN3ZXIKKwlbICIkYW5zd2VyIiA9ICIiIF0gJiYgYW5zd2VyPSIkZGVmYXVsdF9hbnN3ZXIiCitlbHNlCisJZWNobyAkYW5zd2VyCitmaQorCitpZiBbICIkYW5zd2VyIiAhPSAiWSIgLWEgIiRhbnN3ZXIiICE9ICJ5IiBdOyB0aGVuCisJZWNobyAiSW5zdGFsbGF0aW9uIGFib3J0ZWQhIgorCWV4aXQgMQorZmkKKworIyBUcnkgdG8gY3JlYXRlIHRoZSBkaXJlY3RvcnkgKHRoaXMgd2lsbCBub3Qgc3VjY2VlZCBpZiB1c2VyIGRvZXNuJ3QgaGF2ZSByaWdodHMpCitta2RpciAtcCAkdGFyZ2V0X3Nka19kaXIgPi9kZXYvbnVsbCAyPiYxCisKKyMgaWYgZG9uJ3QgaGF2ZSB0aGUgcmlnaHQgdG8gYWNjZXNzIGRpciwgZ2FpbiBieSBzdWRvIAoraWYgWyAhIC14ICR0YXJnZXRfc2RrX2RpciAtbyAhIC13ICR0YXJnZXRfc2RrX2RpciAtbyAhIC1yICR0YXJnZXRfc2RrX2RpciBdOyB0aGVuIAorCWlmIFsgIiRTREtfRVhURU5TSUJMRSIgPSAiMSIgXTsgdGhlbgorCQllY2hvICJVbmFibGUgdG8gYWNjZXNzIFwiJHRhcmdldF9zZGtfZGlyXCIsIHdpbGwgbm90IGF0dGVtcHQgdG8gdXNlIiBcCisJCSAgICAgInN1ZG8gYXMgYXMgZXh0ZW5zaWJsZSBTREsgY2Fubm90IGJlIHVzZWQgYXMgcm9vdC4iCisJCWV4aXQgMQorCWZpCisKKwlTVURPX0VYRUM9JCh3aGljaCAic3VkbyIpCisJaWYgWyAteiAkU1VET19FWEVDIF07IHRoZW4KKwkJZWNobyAiTm8gY29tbWFuZCAnc3VkbycgZm91bmQsIHBsZWFzZSBpbnN0YWxsIHN1ZG8gZmlyc3QuIEFib3J0ISIKKwkJZXhpdCAxCisJZmkKKworCSMgdGVzdCBzdWRvIGNvdWxkIGdhaW4gcm9vdCByaWdodAorCSRTVURPX0VYRUMgcHdkID4vZGV2L251bGwgMj4mMQorCVsgJD8gLW5lIDAgXSAmJiBlY2hvICJTb3JyeSwgeW91IGFyZSBub3QgYWxsb3dlZCB0byBleGVjdXRlIGFzIHJvb3QuIiAmJiBleGl0IDEKKworCSMgbm93IHRoYXQgd2UgaGF2ZSBzdWRvIHJpZ2h0cywgY3JlYXRlIHRoZSBkaXJlY3RvcnkKKwkkU1VET19FWEVDIG1rZGlyIC1wICR0YXJnZXRfc2RrX2RpciA+L2Rldi9udWxsIDI+JjEKK2ZpCisKK3BheWxvYWRfb2Zmc2V0PSQoKCQoZ3JlcCAtbmEgLW0xICJeTUFSS0VSOiQiICQwfGN1dCAtZCc6JyAtZjEpICsgMSkpCisKK3ByaW50ZiAiRXh0cmFjdGluZyBTREsuLi4iCit0YWlsIC1uICskcGF5bG9hZF9vZmZzZXQgJDB8ICRTVURPX0VYRUMgdGFyIHhqIC1DICR0YXJnZXRfc2RrX2RpcgorZWNobyAiZG9uZSIKKworcHJpbnRmICJTZXR0aW5nIGl0IHVwLi4uIgorIyBmaXggZW52aXJvbm1lbnQgcGF0aHMKK2ZvciBlbnZfc2V0dXBfc2NyaXB0IGluIGBscyAkdGFyZ2V0X3Nka19kaXIvZW52aXJvbm1lbnQtc2V0dXAtKmA7IGRvCisJJFNVRE9fRVhFQyBzZWQgLWUgInM6QFNES1BBVEhAOiR0YXJnZXRfc2RrX2RpcjpnIiAtaSAkZW52X3NldHVwX3NjcmlwdAorZG9uZQorCitAU0RLX1BPU1RfSU5TVEFMTF9DT01NQU5EQAorCisjIGRlbGV0ZSB0aGUgcmVsb2NhdGluZyBzY3JpcHQsIHNvIHRoYXQgdXNlciBpcyBmb3JjZWQgdG8gcmUtcnVuIHRoZSBpbnN0YWxsZXIKKyMgaWYgaGUvc2hlIHdhbnRzIGFub3RoZXIgbG9jYXRpb24gZm9yIHRoZSBzZGsKK2lmIFsgJHNhdmVzY3JpcHRzID0gMCBdIDsgdGhlbgorCSRTVURPX0VYRUMgcm0gLWYgJHtlbnZfc2V0dXBfc2NyaXB0JS8qfS9yZWxvY2F0ZV9zZGsucHkgJHtlbnZfc2V0dXBfc2NyaXB0JS8qfS9yZWxvY2F0ZV9zZGsuc2gKK2ZpCisKK2VjaG8gIlNESyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgc2V0IHVwIGFuZCBpcyByZWFkeSB0byBiZSB1c2VkLiIKK2VjaG8gIkVhY2ggdGltZSB5b3Ugd2lzaCB0byB1c2UgdGhlIFNESyBpbiBhIG5ldyBzaGVsbCBzZXNzaW9uLCB5b3UgbmVlZCB0byBzb3VyY2UgdGhlIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBlLmcuIgorZWNobyAiIFwkIC4gJHRhcmdldF9zZGtfZGlyL2Vudmlyb25tZW50LXNldHVwLUBSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTQCIKKworZXhpdCAwCisKK01BUktFUjoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy90b29sY2hhaW4tc2hhci1yZWxvY2F0ZS5zaCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy90b29sY2hhaW4tc2hhci1yZWxvY2F0ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmI4ZTE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL3Rvb2xjaGFpbi1zaGFyLXJlbG9jYXRlLnNoCkBAIC0wLDAgKzEsNTAgQEAKKyMgZml4IGR5bmFtaWMgbG9hZGVyIHBhdGhzIGluIGFsbCBFTEYgU0RLIGJpbmFyaWVzCituYXRpdmVfc3lzcm9vdD0kKCRTVURPX0VYRUMgY2F0ICRlbnZfc2V0dXBfc2NyaXB0IHxncmVwICdPRUNPUkVfTkFUSVZFX1NZU1JPT1Q9J3xjdXQgLWQnPScgLWYyfHRyIC1kICciJykKK2RsX3BhdGg9JCgkU1VET19FWEVDIGZpbmQgJG5hdGl2ZV9zeXNyb290L2xpYiAtbmFtZSAibGQtbGludXgqIikKK2lmIFsgIiRkbF9wYXRoIiA9ICIiIF0gOyB0aGVuCisJZWNobyAiU0RLIGNvdWxkIG5vdCBiZSBzZXQgdXAuIFJlbG9jYXRlIHNjcmlwdCB1bmFibGUgdG8gZmluZCBsZC1saW51eC5zby4gQWJvcnQhIgorCWV4aXQgMQorZmkKK2V4ZWN1dGFibGVfZmlsZXM9JCgkU1VET19FWEVDIGZpbmQgJG5hdGl2ZV9zeXNyb290IC10eXBlIGYgXAorCVwoIC1wZXJtIC0wMTAwIC1vIC1wZXJtIC0wMDEwIC1vIC1wZXJtIC0wMDAxIFwpIC1wcmludGYgIiclaC8lZicgIikKKwordGRpcj1gbWt0ZW1wIC1kYAoraWYgWyB4JHRkaXIgPSB4IF0gOyB0aGVuCisgICBlY2hvICJTREsgcmVsb2NhdGUgZmFpbGVkLCBjb3VsZCBub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSIKKyAgIGV4aXQgMQorZmkKK2VjaG8gIiMhL2Jpbi9iYXNoIiA+ICR0ZGlyL3JlbG9jYXRlX3Nkay5zaAorZWNobyBleGVjICR7ZW52X3NldHVwX3NjcmlwdCUvKn0vcmVsb2NhdGVfc2RrLnB5ICR0YXJnZXRfc2RrX2RpciAkZGxfcGF0aCAkZXhlY3V0YWJsZV9maWxlcyA+PiAkdGRpci9yZWxvY2F0ZV9zZGsuc2gKKyRTVURPX0VYRUMgbXYgJHRkaXIvcmVsb2NhdGVfc2RrLnNoICR7ZW52X3NldHVwX3NjcmlwdCUvKn0vcmVsb2NhdGVfc2RrLnNoCiskU1VET19FWEVDIGNobW9kIDc1NSAke2Vudl9zZXR1cF9zY3JpcHQlLyp9L3JlbG9jYXRlX3Nkay5zaAorcm0gLXJmICR0ZGlyCitpZiBbICRyZWxvY2F0ZSA9IDEgXSA7IHRoZW4KKwkkU1VET19FWEVDICR7ZW52X3NldHVwX3NjcmlwdCUvKn0vcmVsb2NhdGVfc2RrLnNoCisJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCWVjaG8gIlNESyBjb3VsZCBub3QgYmUgc2V0IHVwLiBSZWxvY2F0ZSBzY3JpcHQgZmFpbGVkLiBBYm9ydCEiCisJCWV4aXQgMQorCWZpCitmaQorCisjIHJlcGxhY2UgQFNES1BBVEhAIHdpdGggdGhlIG5ldyBwcmVmaXggaW4gYWxsIHRleHQgZmlsZXM6IGNvbmZpZ3Mvc2NyaXB0cy9ldGMKK2ZvciByZXBsYWNlIGluICIkdGFyZ2V0X3Nka19kaXIgLW1heGRlcHRoIDEiICIkbmF0aXZlX3N5c3Jvb3QiOyBkbworCSRTVURPX0VYRUMgZmluZCAkcmVwbGFjZSAtdHlwZSBmIC1leGVjIGZpbGUgJ3t9JyBcOyB8IFwKKwkJZ3JlcCAiOi4qXChBU0NJSVx8c2NyaXB0XHxzb3VyY2VcKS4qdGV4dCIgfCBcCisJCWF3ayAtRic6JyAne3ByaW50ZiAiXCIlc1wiXG4iLCAkMX0nIHwgXAorCQlncmVwIC12ICIkdGFyZ2V0X3Nka19kaXIvZW52aXJvbm1lbnQtc2V0dXAtKiIgfCBcCisJCSRTVURPX0VYRUMgeGFyZ3MgLW4zMiBzZWQgLWkgLWUgInM6JERFRkFVTFRfSU5TVEFMTF9ESVI6JHRhcmdldF9zZGtfZGlyOmciCitkb25lCisKKyMgY2hhbmdlIGFsbCBzeW1saW5rcyBwb2ludGluZyB0byBAU0RLUEFUSEAKK2ZvciBsIGluICQoJFNVRE9fRVhFQyBmaW5kICRuYXRpdmVfc3lzcm9vdCAtdHlwZSBsKTsgZG8KKwkkU1VET19FWEVDIGxuIC1zZm4gJChyZWFkbGluayAkbHwkU1VET19FWEVDIHNlZCAtZSAiczokREVGQVVMVF9JTlNUQUxMX0RJUjokdGFyZ2V0X3Nka19kaXI6IikgJGwKK2RvbmUKKworIyBmaW5kIG91dCBhbGwgcGVybCBzY3JpcHRzIGluICRuYXRpdmVfc3lzcm9vdCBhbmQgbW9kaWZ5IHRoZW0gcmVwbGFjaW5nIHRoZQorIyBob3N0IHBlcmwgd2l0aCBTREsgcGVybC4KK2ZvciBwZXJsX3NjcmlwdCBpbiAkKCRTVURPX0VYRUMgZmluZCAkbmF0aXZlX3N5c3Jvb3QgLXR5cGUgZiAtZXhlYyBncmVwIC1sICJeIyEuKnBlcmwiICd7fScgXDspOyBkbworCSRTVURPX0VYRUMgc2VkIC1pIC1lICJzOl4jISAqL3Vzci9iaW4vcGVybC4qOiMhIC91c3IvYmluL2VudiBwZXJsOmciIC1lIFwKKwkJInM6IC91c3IvYmluL3Blcmw6IC91c3IvYmluL2VudiBwZXJsOmciICRwZXJsX3NjcmlwdAorZG9uZQorCitlY2hvIGRvbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvX19pbml0X18ucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZDk1MTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMiBAQAorZnJvbSBwa2d1dGlsIGltcG9ydCBleHRlbmRfcGF0aAorX19wYXRoX18gPSBleHRlbmRfcGF0aChfX3BhdGhfXywgX19uYW1lX18pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL2J1aWxkaGlzdG9yeV9hbmFseXNpcy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvYnVpbGRoaXN0b3J5X2FuYWx5c2lzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzOTVjNzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2J1aWxkaGlzdG9yeV9hbmFseXNpcy5weQpAQCAtMCwwICsxLDQ1NiBAQAorIyBSZXBvcnQgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZXMgaW4gdGhlIGJ1aWxkaGlzdG9yeSByZXBvc2l0b3J5IHNpbmNlIGEgc3BlY2lmaWMgcmV2aXNpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCisjIEF1dGhvcjogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisjCisjIE5vdGU6IHJlcXVpcmVzIEdpdFB5dGhvbiAwLjMuMSsKKyMKKyMgWW91IGNhbiB1c2UgdGhpcyBmcm9tIHRoZSBjb21tYW5kIGxpbmUgYnkgcnVubmluZyBzY3JpcHRzL2J1aWxkaGlzdG9yeS1kaWZmCisjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgZGlmZmxpYgoraW1wb3J0IGdpdAoraW1wb3J0IHJlCitpbXBvcnQgYmIudXRpbHMKKworCisjIEhvdyB0byBkaXNwbGF5IGZpZWxkcworbGlzdF9maWVsZHMgPSBbJ0RFUEVORFMnLCAnUlBST1ZJREVTJywgJ1JERVBFTkRTJywgJ1JSRUNPTU1FTkRTJywgJ1JTVUdHRVNUUycsICdSUkVQTEFDRVMnLCAnUkNPTkZMSUNUUycsICdGSUxFUycsICdGSUxFTElTVCcsICdVU0VSX0NMQVNTRVMnLCAnSU1BR0VfQ0xBU1NFUycsICdJTUFHRV9GRUFUVVJFUycsICdJTUFHRV9MSU5HVUFTJywgJ0lNQUdFX0lOU1RBTEwnLCAnQkFEX1JFQ09NTUVOREFUSU9OUycsICdQQUNLQUdFX0VYQ0xVREUnXQorbGlzdF9vcmRlcl9maWVsZHMgPSBbJ1BBQ0tBR0VTJ10KK2RlZmF1bHR2YWxfbWFwID0geydQS0cnOiAnUEtHJywgJ1BLR0UnOiAnUEUnLCAnUEtHVic6ICdQVicsICdQS0dSJzogJ1BSJ30KK251bWVyaWNfZmllbGRzID0gWydQS0dTSVpFJywgJ0lNQUdFU0laRSddCisjIEZpZWxkcyB0byBtb25pdG9yCittb25pdG9yX2ZpZWxkcyA9IFsnUlBST1ZJREVTJywgJ1JERVBFTkRTJywgJ1JSRUNPTU1FTkRTJywgJ1JSRVBMQUNFUycsICdSQ09ORkxJQ1RTJywgJ1BBQ0tBR0VTJywgJ0ZJTEVMSVNUJywgJ1BLR1NJWkUnLCAnSU1BR0VTSVpFJywgJ1BLRyddCit2ZXJfbW9uaXRvcl9maWVsZHMgPSBbJ1BLR0UnLCAnUEtHVicsICdQS0dSJ10KKyMgUGVyY2VudGFnZSBjaGFuZ2UgdG8gYWxlcnQgZm9yIG51bWVyaWMgZmllbGRzCittb25pdG9yX251bWVyaWNfdGhyZXNob2xkID0gMTAKKyMgSW1hZ2UgZmlsZXMgdG8gbW9uaXRvciAobm90ZSB0aGF0IGltYWdlLWluZm8udHh0IGlzIGhhbmRsZWQgc2VwYXJhdGVseSkKK2ltZ19tb25pdG9yX2ZpbGVzID0gWydpbnN0YWxsZWQtcGFja2FnZS1uYW1lcy50eHQnLCAnZmlsZXMtaW4taW1hZ2UudHh0J10KKyMgUmVsYXRlZCBjb250ZXh0IGZpZWxkcyBmb3IgcmVwb3J0aW5nIChub3RlOiBQRSwgUFYgJiBQUiBhcmUgYWx3YXlzIHJlcG9ydGVkIGZvciBtb25pdG9yZWQgcGFja2FnZSBmaWVsZHMpCityZWxhdGVkX2ZpZWxkcyA9IHt9CityZWxhdGVkX2ZpZWxkc1snUkRFUEVORFMnXSA9IFsnREVQRU5EUyddCityZWxhdGVkX2ZpZWxkc1snUlJFQ09NTUVORFMnXSA9IFsnREVQRU5EUyddCityZWxhdGVkX2ZpZWxkc1snRklMRUxJU1QnXSA9IFsnRklMRVMnXQorcmVsYXRlZF9maWVsZHNbJ1BLR1NJWkUnXSA9IFsnRklMRUxJU1QnXQorcmVsYXRlZF9maWVsZHNbJ2ZpbGVzLWluLWltYWdlLnR4dCddID0gWydpbnN0YWxsZWQtcGFja2FnZS1uYW1lcy50eHQnLCAnVVNFUl9DTEFTU0VTJywgJ0lNQUdFX0NMQVNTRVMnLCAnUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQnLCAnSU1BR0VfUE9TVFBST0NFU1NfQ09NTUFORCddCityZWxhdGVkX2ZpZWxkc1snaW5zdGFsbGVkLXBhY2thZ2UtbmFtZXMudHh0J10gPSBbJ0lNQUdFX0ZFQVRVUkVTJywgJ0lNQUdFX0xJTkdVQVMnLCAnSU1BR0VfSU5TVEFMTCcsICdCQURfUkVDT01NRU5EQVRJT05TJywgJ05PX1JFQ09NTUVOREFUSU9OUycsICdQQUNLQUdFX0VYQ0xVREUnXQorCisKK2NsYXNzIENoYW5nZVJlY29yZDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCwgZmllbGRuYW1lLCBvbGR2YWx1ZSwgbmV3dmFsdWUsIG1vbml0b3JlZCk6CisgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKyAgICAgICAgc2VsZi5maWVsZG5hbWUgPSBmaWVsZG5hbWUKKyAgICAgICAgc2VsZi5vbGR2YWx1ZSA9IG9sZHZhbHVlCisgICAgICAgIHNlbGYubmV3dmFsdWUgPSBuZXd2YWx1ZQorICAgICAgICBzZWxmLm1vbml0b3JlZCA9IG1vbml0b3JlZAorICAgICAgICBzZWxmLnJlbGF0ZWQgPSBbXQorICAgICAgICBzZWxmLmZpbGVjaGFuZ2VzID0gTm9uZQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zdHJfaW50ZXJuYWwoVHJ1ZSkKKworICAgIGRlZiBfc3RyX2ludGVybmFsKHNlbGYsIG91dGVyKToKKyAgICAgICAgaWYgb3V0ZXI6CisgICAgICAgICAgICBpZiAnL2ltYWdlLWZpbGVzLycgaW4gc2VsZi5wYXRoOgorICAgICAgICAgICAgICAgIHByZWZpeCA9ICclczogJyAlIHNlbGYucGF0aC5zcGxpdCgnL2ltYWdlLWZpbGVzLycpWzBdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByZWZpeCA9ICclczogJyAlIHNlbGYucGF0aAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJlZml4ID0gJycKKworICAgICAgICBkZWYgcGtnbGlzdF9jb21iaW5lKGRlcHZlcik6CisgICAgICAgICAgICBwa2dsaXN0ID0gW10KKyAgICAgICAgICAgIGZvciBrLHYgaW4gZGVwdmVyLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIHY6CisgICAgICAgICAgICAgICAgICAgIHBrZ2xpc3QuYXBwZW5kKCIlcyAoJXMpIiAlIChrLHYpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHBrZ2xpc3QuYXBwZW5kKGspCisgICAgICAgICAgICByZXR1cm4gcGtnbGlzdAorCisgICAgICAgIGlmIHNlbGYuZmllbGRuYW1lIGluIGxpc3RfZmllbGRzIG9yIHNlbGYuZmllbGRuYW1lIGluIGxpc3Rfb3JkZXJfZmllbGRzOgorICAgICAgICAgICAgaWYgc2VsZi5maWVsZG5hbWUgaW4gWydSUFJPVklERVMnLCAnUkRFUEVORFMnLCAnUlJFQ09NTUVORFMnLCAnUlNVR0dFU1RTJywgJ1JSRVBMQUNFUycsICdSQ09ORkxJQ1RTJ106CisgICAgICAgICAgICAgICAgKGRlcHZlcmEsIGRlcHZlcmIpID0gY29tcGFyZV9wa2dfbGlzdHMoc2VsZi5vbGR2YWx1ZSwgc2VsZi5uZXd2YWx1ZSkKKyAgICAgICAgICAgICAgICBhaXRlbXMgPSBwa2dsaXN0X2NvbWJpbmUoZGVwdmVyYSkKKyAgICAgICAgICAgICAgICBiaXRlbXMgPSBwa2dsaXN0X2NvbWJpbmUoZGVwdmVyYikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYWl0ZW1zID0gc2VsZi5vbGR2YWx1ZS5zcGxpdCgpCisgICAgICAgICAgICAgICAgYml0ZW1zID0gc2VsZi5uZXd2YWx1ZS5zcGxpdCgpCisgICAgICAgICAgICByZW1vdmVkID0gbGlzdChzZXQoYWl0ZW1zKSAtIHNldChiaXRlbXMpKQorICAgICAgICAgICAgYWRkZWQgPSBsaXN0KHNldChiaXRlbXMpIC0gc2V0KGFpdGVtcykpCisKKyAgICAgICAgICAgIGlmIHJlbW92ZWQgb3IgYWRkZWQ6CisgICAgICAgICAgICAgICAgaWYgcmVtb3ZlZCBhbmQgbm90IGJpdGVtczoKKyAgICAgICAgICAgICAgICAgICAgb3V0ID0gJyVzOiByZW1vdmVkIGFsbCBpdGVtcyAiJXMiJyAlIChzZWxmLmZpZWxkbmFtZSwgJyAnLmpvaW4ocmVtb3ZlZCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgb3V0ID0gJyVzOiVzJXMnICUgKHNlbGYuZmllbGRuYW1lLCAnIHJlbW92ZWQgIiVzIicgJSAnICcuam9pbihyZW1vdmVkKSBpZiByZW1vdmVkIGVsc2UgJycsICcgYWRkZWQgIiVzIicgJSAnICcuam9pbihhZGRlZCkgaWYgYWRkZWQgZWxzZSAnJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3V0ID0gJyVzIGNoYW5nZWQgb3JkZXInICUgc2VsZi5maWVsZG5hbWUKKyAgICAgICAgZWxpZiBzZWxmLmZpZWxkbmFtZSBpbiBudW1lcmljX2ZpZWxkczoKKyAgICAgICAgICAgIGF2YWwgPSBpbnQoc2VsZi5vbGR2YWx1ZSBvciAwKQorICAgICAgICAgICAgYnZhbCA9IGludChzZWxmLm5ld3ZhbHVlIG9yIDApCisgICAgICAgICAgICBpZiBhdmFsICE9IDA6CisgICAgICAgICAgICAgICAgcGVyY2VudGNoZyA9ICgoYnZhbCAtIGF2YWwpIC8gZmxvYXQoYXZhbCkpICogMTAwCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBlcmNlbnRjaGcgPSAxMDAKKyAgICAgICAgICAgIG91dCA9ICclcyBjaGFuZ2VkIGZyb20gJXMgdG8gJXMgKCVzJWQlJSknICUgKHNlbGYuZmllbGRuYW1lLCBzZWxmLm9sZHZhbHVlIG9yICInJyIsIHNlbGYubmV3dmFsdWUgb3IgIicnIiwgJysnIGlmIHBlcmNlbnRjaGcgPiAwIGVsc2UgJycsIHBlcmNlbnRjaGcpCisgICAgICAgIGVsaWYgc2VsZi5maWVsZG5hbWUgaW4gZGVmYXVsdHZhbF9tYXA6CisgICAgICAgICAgICBvdXQgPSAnJXMgY2hhbmdlZCBmcm9tICVzIHRvICVzJyAlIChzZWxmLmZpZWxkbmFtZSwgc2VsZi5vbGR2YWx1ZSwgc2VsZi5uZXd2YWx1ZSkKKyAgICAgICAgICAgIGlmIHNlbGYuZmllbGRuYW1lID09ICdQS0cnIGFuZCAnW2RlZmF1bHRdJyBpbiBzZWxmLm5ld3ZhbHVlOgorICAgICAgICAgICAgICAgIG91dCArPSAnIC0gbWF5IGluZGljYXRlIGRlYmlhbiByZW5hbWluZyBmYWlsdXJlJworICAgICAgICBlbGlmIHNlbGYuZmllbGRuYW1lIGluIFsncGtnX3ByZWluc3QnLCAncGtnX3Bvc3RpbnN0JywgJ3BrZ19wcmVybScsICdwa2dfcG9zdHJtJ106CisgICAgICAgICAgICBpZiBzZWxmLm9sZHZhbHVlIGFuZCBzZWxmLm5ld3ZhbHVlOgorICAgICAgICAgICAgICAgIG91dCA9ICclcyBjaGFuZ2VkOlxuICAnICUgc2VsZi5maWVsZG5hbWUKKyAgICAgICAgICAgIGVsaWYgc2VsZi5uZXd2YWx1ZToKKyAgICAgICAgICAgICAgICBvdXQgPSAnJXMgYWRkZWQ6XG4gICcgJSBzZWxmLmZpZWxkbmFtZQorICAgICAgICAgICAgZWxpZiBzZWxmLm9sZHZhbHVlOgorICAgICAgICAgICAgICAgIG91dCA9ICclcyBjbGVhcmVkOlxuICAnICUgc2VsZi5maWVsZG5hbWUKKyAgICAgICAgICAgIGFsaW5lcyA9IHNlbGYub2xkdmFsdWUuc3BsaXRsaW5lcygpCisgICAgICAgICAgICBibGluZXMgPSBzZWxmLm5ld3ZhbHVlLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgZGlmZiA9IGRpZmZsaWIudW5pZmllZF9kaWZmKGFsaW5lcywgYmxpbmVzLCBzZWxmLmZpZWxkbmFtZSwgc2VsZi5maWVsZG5hbWUsIGxpbmV0ZXJtPScnKQorICAgICAgICAgICAgb3V0ICs9ICdcbiAgJy5qb2luKGxpc3QoZGlmZilbMjpdKQorICAgICAgICAgICAgb3V0ICs9ICdcbiAgLS0nCisgICAgICAgIGVsaWYgc2VsZi5maWVsZG5hbWUgaW4gaW1nX21vbml0b3JfZmlsZXMgb3IgJy9pbWFnZS1maWxlcy8nIGluIHNlbGYucGF0aDoKKyAgICAgICAgICAgIGZpZWxkbmFtZSA9IHNlbGYuZmllbGRuYW1lCisgICAgICAgICAgICBpZiAnL2ltYWdlLWZpbGVzLycgaW4gc2VsZi5wYXRoOgorICAgICAgICAgICAgICAgIGZpZWxkbmFtZSA9IG9zLnBhdGguam9pbignLycgKyBzZWxmLnBhdGguc3BsaXQoJy9pbWFnZS1maWxlcy8nKVsxXSwgc2VsZi5maWVsZG5hbWUpCisgICAgICAgICAgICAgICAgb3V0ID0gJ0NoYW5nZXMgdG8gJXM6XG4gICcgJSBmaWVsZG5hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgb3V0ZXI6CisgICAgICAgICAgICAgICAgICAgIHByZWZpeCA9ICdDaGFuZ2VzIHRvICVzICcgJSBzZWxmLnBhdGgKKyAgICAgICAgICAgICAgICBvdXQgPSAnKCVzKTpcbiAgJyAlIHNlbGYuZmllbGRuYW1lCisgICAgICAgICAgICBpZiBzZWxmLmZpbGVjaGFuZ2VzOgorICAgICAgICAgICAgICAgIG91dCArPSAnXG4gICcuam9pbihbJyVzJyAlIGkgZm9yIGkgaW4gc2VsZi5maWxlY2hhbmdlc10pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFsaW5lcyA9IHNlbGYub2xkdmFsdWUuc3BsaXRsaW5lcygpCisgICAgICAgICAgICAgICAgYmxpbmVzID0gc2VsZi5uZXd2YWx1ZS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgICAgICBkaWZmID0gZGlmZmxpYi51bmlmaWVkX2RpZmYoYWxpbmVzLCBibGluZXMsIGZpZWxkbmFtZSwgZmllbGRuYW1lLCBsaW5ldGVybT0nJykKKyAgICAgICAgICAgICAgICBvdXQgKz0gJ1xuICAnLmpvaW4obGlzdChkaWZmKSkKKyAgICAgICAgICAgICAgICBvdXQgKz0gJ1xuICAtLScKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG91dCA9ICclcyBjaGFuZ2VkIGZyb20gIiVzIiB0byAiJXMiJyAlIChzZWxmLmZpZWxkbmFtZSwgc2VsZi5vbGR2YWx1ZSwgc2VsZi5uZXd2YWx1ZSkKKworICAgICAgICBpZiBzZWxmLnJlbGF0ZWQ6CisgICAgICAgICAgICBmb3IgY2hnIGluIHNlbGYucmVsYXRlZDoKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3V0ZXIgYW5kIGNoZy5maWVsZG5hbWUgaW4gWydQRScsICdQVicsICdQUiddOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGNoZy5fc3RyX2ludGVybmFsKEZhbHNlKS5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAgICAgICAgIG91dCArPSAnXG4gICogJXMnICUgbGluZQorCisgICAgICAgIHJldHVybiAnJXMlcycgJSAocHJlZml4LCBvdXQpCisKK2NsYXNzIEZpbGVDaGFuZ2U6CisgICAgY2hhbmdldHlwZV9hZGQgPSAnQScKKyAgICBjaGFuZ2V0eXBlX3JlbW92ZSA9ICdSJworICAgIGNoYW5nZXR5cGVfdHlwZSA9ICdUJworICAgIGNoYW5nZXR5cGVfcGVybXMgPSAnUCcKKyAgICBjaGFuZ2V0eXBlX293bmVyZ3JvdXAgPSAnTycKKyAgICBjaGFuZ2V0eXBlX2xpbmsgPSAnTCcKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoLCBjaGFuZ2V0eXBlLCBvbGR2YWx1ZSA9IE5vbmUsIG5ld3ZhbHVlID0gTm9uZSk6CisgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKyAgICAgICAgc2VsZi5jaGFuZ2V0eXBlID0gY2hhbmdldHlwZQorICAgICAgICBzZWxmLm9sZHZhbHVlID0gb2xkdmFsdWUKKyAgICAgICAgc2VsZi5uZXd2YWx1ZSA9IG5ld3ZhbHVlCisKKyAgICBkZWYgX2Z0eXBlX3N0cihzZWxmLCBmdHlwZSk6CisgICAgICAgIGlmIGZ0eXBlID09ICctJzoKKyAgICAgICAgICAgIHJldHVybiAnZmlsZScKKyAgICAgICAgZWxpZiBmdHlwZSA9PSAnZCc6CisgICAgICAgICAgICByZXR1cm4gJ2RpcmVjdG9yeScKKyAgICAgICAgZWxpZiBmdHlwZSA9PSAnbCc6CisgICAgICAgICAgICByZXR1cm4gJ3N5bWxpbmsnCisgICAgICAgIGVsaWYgZnR5cGUgPT0gJ2MnOgorICAgICAgICAgICAgcmV0dXJuICdjaGFyIGRldmljZScKKyAgICAgICAgZWxpZiBmdHlwZSA9PSAnYic6CisgICAgICAgICAgICByZXR1cm4gJ2Jsb2NrIGRldmljZScKKyAgICAgICAgZWxpZiBmdHlwZSA9PSAncCc6CisgICAgICAgICAgICByZXR1cm4gJ2ZpZm8nCisgICAgICAgIGVsaWYgZnR5cGUgPT0gJ3MnOgorICAgICAgICAgICAgcmV0dXJuICdzb2NrZXQnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJ3Vua25vd24gKCVzKScgJSBmdHlwZQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuY2hhbmdldHlwZSA9PSBzZWxmLmNoYW5nZXR5cGVfYWRkOgorICAgICAgICAgICAgcmV0dXJuICclcyB3YXMgYWRkZWQnICUgc2VsZi5wYXRoCisgICAgICAgIGVsaWYgc2VsZi5jaGFuZ2V0eXBlID09IHNlbGYuY2hhbmdldHlwZV9yZW1vdmU6CisgICAgICAgICAgICByZXR1cm4gJyVzIHdhcyByZW1vdmVkJyAlIHNlbGYucGF0aAorICAgICAgICBlbGlmIHNlbGYuY2hhbmdldHlwZSA9PSBzZWxmLmNoYW5nZXR5cGVfdHlwZToKKyAgICAgICAgICAgIHJldHVybiAnJXMgY2hhbmdlZCB0eXBlIGZyb20gJXMgdG8gJXMnICUgKHNlbGYucGF0aCwgc2VsZi5fZnR5cGVfc3RyKHNlbGYub2xkdmFsdWUpLCBzZWxmLl9mdHlwZV9zdHIoc2VsZi5uZXd2YWx1ZSkpCisgICAgICAgIGVsaWYgc2VsZi5jaGFuZ2V0eXBlID09IHNlbGYuY2hhbmdldHlwZV9wZXJtczoKKyAgICAgICAgICAgIHJldHVybiAnJXMgY2hhbmdlZCBwZXJtaXNzaW9ucyBmcm9tICVzIHRvICVzJyAlIChzZWxmLnBhdGgsIHNlbGYub2xkdmFsdWUsIHNlbGYubmV3dmFsdWUpCisgICAgICAgIGVsaWYgc2VsZi5jaGFuZ2V0eXBlID09IHNlbGYuY2hhbmdldHlwZV9vd25lcmdyb3VwOgorICAgICAgICAgICAgcmV0dXJuICclcyBjaGFuZ2VkIG93bmVyL2dyb3VwIGZyb20gJXMgdG8gJXMnICUgKHNlbGYucGF0aCwgc2VsZi5vbGR2YWx1ZSwgc2VsZi5uZXd2YWx1ZSkKKyAgICAgICAgZWxpZiBzZWxmLmNoYW5nZXR5cGUgPT0gc2VsZi5jaGFuZ2V0eXBlX2xpbms6CisgICAgICAgICAgICByZXR1cm4gJyVzIGNoYW5nZWQgc3ltbGluayB0YXJnZXQgZnJvbSAlcyB0byAlcycgJSAoc2VsZi5wYXRoLCBzZWxmLm9sZHZhbHVlLCBzZWxmLm5ld3ZhbHVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICclcyBjaGFuZ2VkICh1bmtub3duKScgJSBzZWxmLnBhdGgKKworCitkZWYgYmxvYl90b19kaWN0KGJsb2IpOgorICAgIGFsaW5lcyA9IGJsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLnNwbGl0bGluZXMoKQorICAgIGFkaWN0ID0ge30KKyAgICBmb3IgbGluZSBpbiBhbGluZXM6CisgICAgICAgIHNwbGl0diA9IFtpLnN0cmlwKCkgZm9yIGkgaW4gbGluZS5zcGxpdCgnPScsMSldCisgICAgICAgIGlmIGxlbihzcGxpdHYpID4gMToKKyAgICAgICAgICAgIGFkaWN0W3NwbGl0dlswXV0gPSBzcGxpdHZbMV0KKyAgICByZXR1cm4gYWRpY3QKKworCitkZWYgZmlsZV9saXN0X3RvX2RpY3QobGluZXMpOgorICAgIGFkaWN0ID0ge30KKyAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgIyBMZWF2ZSB0aGUgbGFzdCBmZXcgZmllbGRzIGludGFjdCBzbyB3ZSBoYW5kbGUgZmlsZSBuYW1lcyBjb250YWluaW5nIHNwYWNlcworICAgICAgICBzcGxpdHYgPSBsaW5lLnNwbGl0KE5vbmUsNCkKKyAgICAgICAgIyBHcmFiIHRoZSBwYXRoIGFuZCByZW1vdmUgdGhlIGxlYWRpbmcgLgorICAgICAgICBwYXRoID0gc3BsaXR2WzRdWzE6XS5zdHJpcCgpCisgICAgICAgICMgSGFuZGxlIHN5bWxpbmtzCisgICAgICAgIGlmKCcgLT4gJyBpbiBwYXRoKToKKyAgICAgICAgICAgIHRhcmdldCA9IHBhdGguc3BsaXQoJyAtPiAnKVsxXQorICAgICAgICAgICAgcGF0aCA9IHBhdGguc3BsaXQoJyAtPiAnKVswXQorICAgICAgICAgICAgYWRpY3RbcGF0aF0gPSBzcGxpdHZbMDozXSArIFt0YXJnZXRdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhZGljdFtwYXRoXSA9IHNwbGl0dlswOjNdCisgICAgcmV0dXJuIGFkaWN0CisKKworZGVmIGNvbXBhcmVfZmlsZV9saXN0cyhhbGluZXMsIGJsaW5lcyk6CisgICAgYWRpY3QgPSBmaWxlX2xpc3RfdG9fZGljdChhbGluZXMpCisgICAgYmRpY3QgPSBmaWxlX2xpc3RfdG9fZGljdChibGluZXMpCisgICAgZmlsZWNoYW5nZXMgPSBbXQorICAgIGZvciBwYXRoLCBzcGxpdHYgaW4gYWRpY3QuaXRlcml0ZW1zKCk6CisgICAgICAgIG5ld3NwbGl0diA9IGJkaWN0LnBvcChwYXRoLCBOb25lKQorICAgICAgICBpZiBuZXdzcGxpdHY6CisgICAgICAgICAgICAjIENoZWNrIHR5cGUKKyAgICAgICAgICAgIG9sZHZhbHVlID0gc3BsaXR2WzBdWzBdCisgICAgICAgICAgICBuZXd2YWx1ZSA9IG5ld3NwbGl0dlswXVswXQorICAgICAgICAgICAgaWYgb2xkdmFsdWUgIT0gbmV3dmFsdWU6CisgICAgICAgICAgICAgICAgZmlsZWNoYW5nZXMuYXBwZW5kKEZpbGVDaGFuZ2UocGF0aCwgRmlsZUNoYW5nZS5jaGFuZ2V0eXBlX3R5cGUsIG9sZHZhbHVlLCBuZXd2YWx1ZSkpCisgICAgICAgICAgICAjIENoZWNrIHBlcm1pc3Npb25zCisgICAgICAgICAgICBvbGR2YWx1ZSA9IHNwbGl0dlswXVsxOl0KKyAgICAgICAgICAgIG5ld3ZhbHVlID0gbmV3c3BsaXR2WzBdWzE6XQorICAgICAgICAgICAgaWYgb2xkdmFsdWUgIT0gbmV3dmFsdWU6CisgICAgICAgICAgICAgICAgZmlsZWNoYW5nZXMuYXBwZW5kKEZpbGVDaGFuZ2UocGF0aCwgRmlsZUNoYW5nZS5jaGFuZ2V0eXBlX3Blcm1zLCBvbGR2YWx1ZSwgbmV3dmFsdWUpKQorICAgICAgICAgICAgIyBDaGVjayBvd25lci9ncm91cAorICAgICAgICAgICAgb2xkdmFsdWUgPSAnJXMvJXMnICUgKHNwbGl0dlsxXSwgc3BsaXR2WzJdKQorICAgICAgICAgICAgbmV3dmFsdWUgPSAnJXMvJXMnICUgKG5ld3NwbGl0dlsxXSwgbmV3c3BsaXR2WzJdKQorICAgICAgICAgICAgaWYgb2xkdmFsdWUgIT0gbmV3dmFsdWU6CisgICAgICAgICAgICAgICAgZmlsZWNoYW5nZXMuYXBwZW5kKEZpbGVDaGFuZ2UocGF0aCwgRmlsZUNoYW5nZS5jaGFuZ2V0eXBlX293bmVyZ3JvdXAsIG9sZHZhbHVlLCBuZXd2YWx1ZSkpCisgICAgICAgICAgICAjIENoZWNrIHN5bWxpbmsgdGFyZ2V0CisgICAgICAgICAgICBpZiBuZXdzcGxpdHZbMF1bMF0gPT0gJ2wnOgorICAgICAgICAgICAgICAgIGlmIGxlbihzcGxpdHYpID4gMzoKKyAgICAgICAgICAgICAgICAgICAgb2xkdmFsdWUgPSBzcGxpdHZbM10KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvbGR2YWx1ZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBuZXd2YWx1ZSA9IG5ld3NwbGl0dlszXQorICAgICAgICAgICAgICAgIGlmIG9sZHZhbHVlICE9IG5ld3ZhbHVlOgorICAgICAgICAgICAgICAgICAgICBmaWxlY2hhbmdlcy5hcHBlbmQoRmlsZUNoYW5nZShwYXRoLCBGaWxlQ2hhbmdlLmNoYW5nZXR5cGVfbGluaywgb2xkdmFsdWUsIG5ld3ZhbHVlKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpbGVjaGFuZ2VzLmFwcGVuZChGaWxlQ2hhbmdlKHBhdGgsIEZpbGVDaGFuZ2UuY2hhbmdldHlwZV9yZW1vdmUpKQorCisgICAgIyBXaGF0ZXZlciBpcyBsZWZ0IG92ZXIgaGFzIGJlZW4gYWRkZWQKKyAgICBmb3IgcGF0aCBpbiBiZGljdDoKKyAgICAgICAgZmlsZWNoYW5nZXMuYXBwZW5kKEZpbGVDaGFuZ2UocGF0aCwgRmlsZUNoYW5nZS5jaGFuZ2V0eXBlX2FkZCkpCisKKyAgICByZXR1cm4gZmlsZWNoYW5nZXMKKworCitkZWYgY29tcGFyZV9saXN0cyhhbGluZXMsIGJsaW5lcyk6CisgICAgcmVtb3ZlZCA9IGxpc3Qoc2V0KGFsaW5lcykgLSBzZXQoYmxpbmVzKSkKKyAgICBhZGRlZCA9IGxpc3Qoc2V0KGJsaW5lcykgLSBzZXQoYWxpbmVzKSkKKworICAgIGZpbGVjaGFuZ2VzID0gW10KKyAgICBmb3IgcGtnIGluIHJlbW92ZWQ6CisgICAgICAgIGZpbGVjaGFuZ2VzLmFwcGVuZChGaWxlQ2hhbmdlKHBrZywgRmlsZUNoYW5nZS5jaGFuZ2V0eXBlX3JlbW92ZSkpCisgICAgZm9yIHBrZyBpbiBhZGRlZDoKKyAgICAgICAgZmlsZWNoYW5nZXMuYXBwZW5kKEZpbGVDaGFuZ2UocGtnLCBGaWxlQ2hhbmdlLmNoYW5nZXR5cGVfYWRkKSkKKworICAgIHJldHVybiBmaWxlY2hhbmdlcworCisKK2RlZiBjb21wYXJlX3BrZ19saXN0cyhhc3RyLCBic3RyKToKKyAgICBkZXB2ZXJhID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGFzdHIpCisgICAgZGVwdmVyYiA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihic3RyKQorCisgICAgIyBTdHJpcCBvdXQgY2hhbmdlcyB3aGVyZSB0aGUgdmVyc2lvbiBoYXMgaW5jcmVhc2VkCisgICAgcmVtb3ZlID0gW10KKyAgICBmb3IgayBpbiBkZXB2ZXJhOgorICAgICAgICBpZiBrIGluIGRlcHZlcmI6CisgICAgICAgICAgICBkdmEgPSBkZXB2ZXJhW2tdCisgICAgICAgICAgICBkdmIgPSBkZXB2ZXJiW2tdCisgICAgICAgICAgICBpZiBkdmEgYW5kIGR2YiBhbmQgbGVuKGR2YSkgPT0gbGVuKGR2Yik6CisgICAgICAgICAgICAgICAgIyBTaW5jZSBsZW5ndGggaXMgdGhlIHNhbWUsIHNvcnQgc28gdGhhdCBwcmVmaXhlcyAoZS5nLiA+PSkgd2lsbCBsaW5lIHVwCisgICAgICAgICAgICAgICAgZHZhLnNvcnQoKQorICAgICAgICAgICAgICAgIGR2Yi5zb3J0KCkKKyAgICAgICAgICAgICAgICByZW1vdmVpdCA9IFRydWUKKyAgICAgICAgICAgICAgICBmb3IgZHZhaSwgZHZiaSBpbiB6aXAoZHZhLCBkdmIpOgorICAgICAgICAgICAgICAgICAgICBpZiBkdmFpICE9IGR2Ymk6CisgICAgICAgICAgICAgICAgICAgICAgICBhaXByZWZpeCA9IGR2YWkuc3BsaXQoJyAnKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgYmlwcmVmaXggPSBkdmJpLnNwbGl0KCcgJylbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFpcHJlZml4ID09IGJpcHJlZml4IGFuZCBhaXByZWZpeCBpbiBbJz49JywgJz0nXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBiYi51dGlscy52ZXJjbXAoYmIudXRpbHMuc3BsaXRfdmVyc2lvbihkdmFpKSwgYmIudXRpbHMuc3BsaXRfdmVyc2lvbihkdmJpKSkgPiAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVpdCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWl0ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIHJlbW92ZWl0OgorICAgICAgICAgICAgICAgICAgICByZW1vdmUuYXBwZW5kKGspCisKKyAgICBmb3IgayBpbiByZW1vdmU6CisgICAgICAgIGRlcHZlcmEucG9wKGspCisgICAgICAgIGRlcHZlcmIucG9wKGspCisKKyAgICByZXR1cm4gKGRlcHZlcmEsIGRlcHZlcmIpCisKKworZGVmIGNvbXBhcmVfZGljdF9ibG9icyhwYXRoLCBhYmxvYiwgYmJsb2IsIHJlcG9ydF9hbGwsIHJlcG9ydF92ZXIpOgorICAgIGFkaWN0ID0gYmxvYl90b19kaWN0KGFibG9iKQorICAgIGJkaWN0ID0gYmxvYl90b19kaWN0KGJibG9iKQorCisgICAgcGtnbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUocGF0aCkKKworICAgIGRlZmF1bHR2YWxzID0ge30KKyAgICBkZWZhdWx0dmFsc1snUEtHJ10gPSBwa2duYW1lCisgICAgZGVmYXVsdHZhbHNbJ1BLR0UnXSA9ICcwJworCisgICAgY2hhbmdlcyA9IFtdCisgICAga2V5cyA9IGxpc3Qoc2V0KGFkaWN0LmtleXMoKSkgfCBzZXQoYmRpY3Qua2V5cygpKSB8IHNldChkZWZhdWx0dmFsX21hcC5rZXlzKCkpKQorICAgIGZvciBrZXkgaW4ga2V5czoKKyAgICAgICAgYXN0ciA9IGFkaWN0LmdldChrZXksICcnKQorICAgICAgICBic3RyID0gYmRpY3QuZ2V0KGtleSwgJycpCisgICAgICAgIGlmIGtleSBpbiB2ZXJfbW9uaXRvcl9maWVsZHM6CisgICAgICAgICAgICBtb25pdG9yZWQgPSByZXBvcnRfdmVyIG9yIGFzdHIgb3IgYnN0cgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW9uaXRvcmVkID0ga2V5IGluIG1vbml0b3JfZmllbGRzCisgICAgICAgIG1hcHBlZF9rZXkgPSBkZWZhdWx0dmFsX21hcC5nZXQoa2V5LCAnJykKKyAgICAgICAgaWYgbWFwcGVkX2tleToKKyAgICAgICAgICAgIGlmIG5vdCBhc3RyOgorICAgICAgICAgICAgICAgIGFzdHIgPSAnJXMgW2RlZmF1bHRdJyAlIGFkaWN0LmdldChtYXBwZWRfa2V5LCBkZWZhdWx0dmFscy5nZXQoa2V5LCAnJykpCisgICAgICAgICAgICBpZiBub3QgYnN0cjoKKyAgICAgICAgICAgICAgICBic3RyID0gJyVzIFtkZWZhdWx0XScgJSBiZGljdC5nZXQobWFwcGVkX2tleSwgZGVmYXVsdHZhbHMuZ2V0KGtleSwgJycpKQorCisgICAgICAgIGlmIGFzdHIgIT0gYnN0cjoKKyAgICAgICAgICAgIGlmIChub3QgcmVwb3J0X2FsbCkgYW5kIGtleSBpbiBudW1lcmljX2ZpZWxkczoKKyAgICAgICAgICAgICAgICBhdmFsID0gaW50KGFzdHIgb3IgMCkKKyAgICAgICAgICAgICAgICBidmFsID0gaW50KGJzdHIgb3IgMCkKKyAgICAgICAgICAgICAgICBpZiBhdmFsICE9IDA6CisgICAgICAgICAgICAgICAgICAgIHBlcmNlbnRjaGcgPSAoKGJ2YWwgLSBhdmFsKSAvIGZsb2F0KGF2YWwpKSAqIDEwMAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHBlcmNlbnRjaGcgPSAxMDAKKyAgICAgICAgICAgICAgICBpZiBhYnMocGVyY2VudGNoZykgPCBtb25pdG9yX251bWVyaWNfdGhyZXNob2xkOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxpZiAobm90IHJlcG9ydF9hbGwpIGFuZCBrZXkgaW4gbGlzdF9maWVsZHM6CisgICAgICAgICAgICAgICAgaWYga2V5ID09ICJGSUxFTElTVCIgYW5kIHBhdGguZW5kc3dpdGgoIi1kYmciKSBhbmQgYnN0ci5zdHJpcCgpICE9ICcnOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIGtleSBpbiBbJ1JQUk9WSURFUycsICdSREVQRU5EUycsICdSUkVDT01NRU5EUycsICdSU1VHR0VTVFMnLCAnUlJFUExBQ0VTJywgJ1JDT05GTElDVFMnXToKKyAgICAgICAgICAgICAgICAgICAgKGRlcHZlcmEsIGRlcHZlcmIpID0gY29tcGFyZV9wa2dfbGlzdHMoYXN0ciwgYnN0cikKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwdmVyYSA9PSBkZXB2ZXJiOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBhbGlzdCA9IGFzdHIuc3BsaXQoKQorICAgICAgICAgICAgICAgIGFsaXN0LnNvcnQoKQorICAgICAgICAgICAgICAgIGJsaXN0ID0gYnN0ci5zcGxpdCgpCisgICAgICAgICAgICAgICAgYmxpc3Quc29ydCgpCisgICAgICAgICAgICAgICAgIyBXZSBkb24ndCBjYXJlIGFib3V0IHRoZSByZW1vdmFsIG9mIHNlbGYtZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgaWYgcGtnbmFtZSBpbiBhbGlzdCBhbmQgbm90IHBrZ25hbWUgaW4gYmxpc3Q6CisgICAgICAgICAgICAgICAgICAgIGFsaXN0LnJlbW92ZShwa2duYW1lKQorICAgICAgICAgICAgICAgIGlmICcgJy5qb2luKGFsaXN0KSA9PSAnICcuam9pbihibGlzdCk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGNoZyA9IENoYW5nZVJlY29yZChwYXRoLCBrZXksIGFzdHIsIGJzdHIsIG1vbml0b3JlZCkKKyAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKGNoZykKKyAgICByZXR1cm4gY2hhbmdlcworCisKK2RlZiBwcm9jZXNzX2NoYW5nZXMocmVwb3BhdGgsIHJldmlzaW9uMSwgcmV2aXNpb24yPSdIRUFEJywgcmVwb3J0X2FsbD1GYWxzZSwgcmVwb3J0X3Zlcj1GYWxzZSk6CisgICAgcmVwbyA9IGdpdC5SZXBvKHJlcG9wYXRoKQorICAgIGFzc2VydCByZXBvLmJhcmUgPT0gRmFsc2UKKyAgICBjb21taXQgPSByZXBvLmNvbW1pdChyZXZpc2lvbjEpCisgICAgZGlmZiA9IGNvbW1pdC5kaWZmKHJldmlzaW9uMikKKworICAgIGNoYW5nZXMgPSBbXQorICAgIGZvciBkIGluIGRpZmYuaXRlcl9jaGFuZ2VfdHlwZSgnTScpOgorICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKGQuYV9ibG9iLnBhdGgpCisgICAgICAgIGlmIHBhdGguc3RhcnRzd2l0aCgncGFja2FnZXMvJyk6CisgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoZC5hX2Jsb2IucGF0aCkKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lID09ICdsYXRlc3QnOgorICAgICAgICAgICAgICAgIGNoYW5nZXMuZXh0ZW5kKGNvbXBhcmVfZGljdF9ibG9icyhwYXRoLCBkLmFfYmxvYiwgZC5iX2Jsb2IsIHJlcG9ydF9hbGwsIHJlcG9ydF92ZXIpKQorICAgICAgICAgICAgZWxpZiBmaWxlbmFtZS5zdGFydHN3aXRoKCdsYXRlc3QuJyk6CisgICAgICAgICAgICAgICAgY2hnID0gQ2hhbmdlUmVjb3JkKHBhdGgsIGZpbGVuYW1lLCBkLmFfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCksIGQuYl9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChjaGcpCisgICAgICAgIGVsaWYgcGF0aC5zdGFydHN3aXRoKCdpbWFnZXMvJyk6CisgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoZC5hX2Jsb2IucGF0aCkKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lIGluIGltZ19tb25pdG9yX2ZpbGVzOgorICAgICAgICAgICAgICAgIGlmIGZpbGVuYW1lID09ICdmaWxlcy1pbi1pbWFnZS50eHQnOgorICAgICAgICAgICAgICAgICAgICBhbGluZXMgPSBkLmFfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCkuc3BsaXRsaW5lcygpCisgICAgICAgICAgICAgICAgICAgIGJsaW5lcyA9IGQuYl9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgICAgICAgICAgZmlsZWNoYW5nZXMgPSBjb21wYXJlX2ZpbGVfbGlzdHMoYWxpbmVzLGJsaW5lcykKKyAgICAgICAgICAgICAgICAgICAgaWYgZmlsZWNoYW5nZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBjaGcgPSBDaGFuZ2VSZWNvcmQocGF0aCwgZmlsZW5hbWUsIE5vbmUsIE5vbmUsIFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBjaGcuZmlsZWNoYW5nZXMgPSBmaWxlY2hhbmdlcworICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy5hcHBlbmQoY2hnKQorICAgICAgICAgICAgICAgIGVsaWYgZmlsZW5hbWUgPT0gJ2luc3RhbGxlZC1wYWNrYWdlLW5hbWVzLnR4dCc6CisgICAgICAgICAgICAgICAgICAgIGFsaW5lcyA9IGQuYV9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgICAgICAgICAgYmxpbmVzID0gZC5iX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgICAgICAgICBmaWxlY2hhbmdlcyA9IGNvbXBhcmVfbGlzdHMoYWxpbmVzLGJsaW5lcykKKyAgICAgICAgICAgICAgICAgICAgaWYgZmlsZWNoYW5nZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBjaGcgPSBDaGFuZ2VSZWNvcmQocGF0aCwgZmlsZW5hbWUsIE5vbmUsIE5vbmUsIFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBjaGcuZmlsZWNoYW5nZXMgPSBmaWxlY2hhbmdlcworICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy5hcHBlbmQoY2hnKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNoZyA9IENoYW5nZVJlY29yZChwYXRoLCBmaWxlbmFtZSwgZC5hX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLCBkLmJfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCksIFRydWUpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKGNoZykKKyAgICAgICAgICAgIGVsaWYgZmlsZW5hbWUgPT0gJ2ltYWdlLWluZm8udHh0JzoKKyAgICAgICAgICAgICAgICBjaGFuZ2VzLmV4dGVuZChjb21wYXJlX2RpY3RfYmxvYnMocGF0aCwgZC5hX2Jsb2IsIGQuYl9ibG9iLCByZXBvcnRfYWxsLCByZXBvcnRfdmVyKSkKKyAgICAgICAgICAgIGVsaWYgJy9pbWFnZS1maWxlcy8nIGluIHBhdGg6CisgICAgICAgICAgICAgICAgY2hnID0gQ2hhbmdlUmVjb3JkKHBhdGgsIGZpbGVuYW1lLCBkLmFfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCksIGQuYl9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChjaGcpCisKKyAgICAjIExvb2sgZm9yIGFkZGVkIHByZWluc3QvcG9zdGluc3QvcHJlcm0vcG9zdHJtCisgICAgIyAod2l0aG91dCByZXBvcnRpbmcgbmV3bHkgYWRkZWQgcmVjaXBlcykKKyAgICBhZGRlZHBrZ3MgPSBbXQorICAgIGFkZGVkY2hhbmdlcyA9IFtdCisgICAgZm9yIGQgaW4gZGlmZi5pdGVyX2NoYW5nZV90eXBlKCdBJyk6CisgICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUoZC5iX2Jsb2IucGF0aCkKKyAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKCdwYWNrYWdlcy8nKToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShkLmJfYmxvYi5wYXRoKQorICAgICAgICAgICAgaWYgZmlsZW5hbWUgPT0gJ2xhdGVzdCc6CisgICAgICAgICAgICAgICAgYWRkZWRwa2dzLmFwcGVuZChwYXRoKQorICAgICAgICAgICAgZWxpZiBmaWxlbmFtZS5zdGFydHN3aXRoKCdsYXRlc3QuJyk6CisgICAgICAgICAgICAgICAgY2hnID0gQ2hhbmdlUmVjb3JkKHBhdGgsIGZpbGVuYW1lWzc6XSwgJycsIGQuYl9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBhZGRlZGNoYW5nZXMuYXBwZW5kKGNoZykKKyAgICBmb3IgY2hnIGluIGFkZGVkY2hhbmdlczoKKyAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICBmb3IgcGtnIGluIGFkZGVkcGtnczoKKyAgICAgICAgICAgIGlmIGNoZy5wYXRoLnN0YXJ0c3dpdGgocGtnKToKKyAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBub3QgZm91bmQ6CisgICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChjaGcpCisKKyAgICAjIExvb2sgZm9yIGNsZWFyZWQgcHJlaW5zdC9wb3N0aW5zdC9wcmVybS9wb3N0cm0KKyAgICBmb3IgZCBpbiBkaWZmLml0ZXJfY2hhbmdlX3R5cGUoJ0QnKToKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguZGlybmFtZShkLmFfYmxvYi5wYXRoKQorICAgICAgICBpZiBwYXRoLnN0YXJ0c3dpdGgoJ3BhY2thZ2VzLycpOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGQuYV9ibG9iLnBhdGgpCisgICAgICAgICAgICBpZiBmaWxlbmFtZSAhPSAnbGF0ZXN0JyBhbmQgZmlsZW5hbWUuc3RhcnRzd2l0aCgnbGF0ZXN0LicpOgorICAgICAgICAgICAgICAgIGNoZyA9IENoYW5nZVJlY29yZChwYXRoLCBmaWxlbmFtZVs3Ol0sIGQuYV9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKSwgJycsIFRydWUpCisgICAgICAgICAgICAgICAgY2hhbmdlcy5hcHBlbmQoY2hnKQorCisgICAgIyBMaW5rIHJlbGF0ZWQgY2hhbmdlcworICAgIGZvciBjaGcgaW4gY2hhbmdlczoKKyAgICAgICAgaWYgY2hnLm1vbml0b3JlZDoKKyAgICAgICAgICAgIGZvciBjaGcyIGluIGNoYW5nZXM6CisgICAgICAgICAgICAgICAgIyAoQ2hlY2sgZGlybmFtZSBpbiB0aGUgY2FzZSBvZiBmaWVsZHMgZnJvbSByZWNpcGUgaW5mbyBmaWxlcykKKyAgICAgICAgICAgICAgICBpZiBjaGcucGF0aCA9PSBjaGcyLnBhdGggb3Igb3MucGF0aC5kaXJuYW1lKGNoZy5wYXRoKSA9PSBjaGcyLnBhdGg6CisgICAgICAgICAgICAgICAgICAgIGlmIGNoZzIuZmllbGRuYW1lIGluIHJlbGF0ZWRfZmllbGRzLmdldChjaGcuZmllbGRuYW1lLCBbXSk6CisgICAgICAgICAgICAgICAgICAgICAgICBjaGcucmVsYXRlZC5hcHBlbmQoY2hnMikKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBjaGcucGF0aCA9PSBjaGcyLnBhdGggYW5kIGNoZy5wYXRoLnN0YXJ0c3dpdGgoJ3BhY2thZ2VzLycpIGFuZCBjaGcyLmZpZWxkbmFtZSBpbiBbJ1BFJywgJ1BWJywgJ1BSJ106CisgICAgICAgICAgICAgICAgICAgICAgICBjaGcucmVsYXRlZC5hcHBlbmQoY2hnMikKKworICAgIGlmIHJlcG9ydF9hbGw6CisgICAgICAgIHJldHVybiBjaGFuZ2VzCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIFtjaGcgZm9yIGNoZyBpbiBjaGFuZ2VzIGlmIGNoZy5tb25pdG9yZWRdCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL2NhY2hlZHBhdGgucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2NhY2hlZHBhdGgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg0MGNjNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvY2FjaGVkcGF0aC5weQpAQCAtMCwwICsxLDIzMyBAQAorIworIyBCYXNlZCBvbiBzdGFuZGFyZCBweXRob24gbGlicmFyeSBmdW5jdGlvbnMgYnV0IGF2b2lkCisjIHJlcGVhdGVkIHN0YXQgY2FsbHMuIEl0cyBhc3N1bWVkIHRoZSBmaWxlcyB3aWxsIG5vdCBjaGFuZ2UgZnJvbSB1bmRlciB1cworIyBzbyB3ZSBjYW4gY2FjaGUgc3RhdCBjYWxscy4KKyMKKworaW1wb3J0IG9zCitpbXBvcnQgZXJybm8KK2ltcG9ydCBzdGF0IGFzIHN0YXRtb2QKKworY2xhc3MgQ2FjaGVkUGF0aChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5zdGF0Y2FjaGUgPSB7fQorICAgICAgICBzZWxmLmxzdGF0Y2FjaGUgPSB7fQorICAgICAgICBzZWxmLm5vcm1wYXRoY2FjaGUgPSB7fQorICAgICAgICByZXR1cm4KKworICAgIGRlZiB1cGRhdGVjYWNoZShzZWxmLCB4KToKKyAgICAgICAgeCA9IHNlbGYubm9ybXBhdGgoeCkKKyAgICAgICAgaWYgeCBpbiBzZWxmLnN0YXRjYWNoZToKKyAgICAgICAgICAgIGRlbCBzZWxmLnN0YXRjYWNoZVt4XQorICAgICAgICBpZiB4IGluIHNlbGYubHN0YXRjYWNoZToKKyAgICAgICAgICAgIGRlbCBzZWxmLmxzdGF0Y2FjaGVbeF0KKworICAgIGRlZiBub3JtcGF0aChzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgcGF0aCBpbiBzZWxmLm5vcm1wYXRoY2FjaGU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5ub3JtcGF0aGNhY2hlW3BhdGhdCisgICAgICAgIG5ld3BhdGggPSBvcy5wYXRoLm5vcm1wYXRoKHBhdGgpCisgICAgICAgIHNlbGYubm9ybXBhdGhjYWNoZVtwYXRoXSA9IG5ld3BhdGgKKyAgICAgICAgcmV0dXJuIG5ld3BhdGgKKworICAgIGRlZiBfY2FsbHN0YXQoc2VsZiwgcGF0aCk6CisgICAgICAgIGlmIHBhdGggaW4gc2VsZi5zdGF0Y2FjaGU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zdGF0Y2FjaGVbcGF0aF0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3QgPSBvcy5zdGF0KHBhdGgpCisgICAgICAgICAgICBzZWxmLnN0YXRjYWNoZVtwYXRoXSA9IHN0CisgICAgICAgICAgICByZXR1cm4gc3QKKyAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgc2VsZi5zdGF0Y2FjaGVbcGF0aF0gPSBGYWxzZQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAjIFdlIG1pZ2h0IGFzIHdlbGwgY2FsbCBsc3RhdCBhbmQgdGhlbiBvbmx5IAorICAgICMgY2FsbCBzdGF0IGFzIHdlbGwgaW4gdGhlIHN5bWJvbGljIGxpbmsgY2FzZQorICAgICMgc2luY2UgdGhpcyB0dXJucyBvdXQgdG8gYmUgbXVjaCBtb3JlIG9wdGltYWwKKyAgICAjIGluIHJlYWwgd29ybGQgdXNhZ2Ugb2YgdGhpcyBjYWNoZQorICAgIGRlZiBjYWxsc3RhdChzZWxmLCBwYXRoKToKKyAgICAgICAgcGF0aCA9IHNlbGYubm9ybXBhdGgocGF0aCkKKyAgICAgICAgc2VsZi5jYWxsbHN0YXQocGF0aCkKKyAgICAgICAgcmV0dXJuIHNlbGYuc3RhdGNhY2hlW3BhdGhdCisKKyAgICBkZWYgY2FsbGxzdGF0KHNlbGYsIHBhdGgpOgorICAgICAgICBwYXRoID0gc2VsZi5ub3JtcGF0aChwYXRoKQorICAgICAgICBpZiBwYXRoIGluIHNlbGYubHN0YXRjYWNoZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmxzdGF0Y2FjaGVbcGF0aF0KKyAgICAgICAgI2JiLmVycm9yKCJMU3RhdHBhdGg6IiArIHBhdGgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxzdCA9IG9zLmxzdGF0KHBhdGgpCisgICAgICAgICAgICBzZWxmLmxzdGF0Y2FjaGVbcGF0aF0gPSBsc3QKKyAgICAgICAgICAgIGlmIG5vdCBzdGF0bW9kLlNfSVNMTksobHN0LnN0X21vZGUpOgorICAgICAgICAgICAgICAgIHNlbGYuc3RhdGNhY2hlW3BhdGhdID0gbHN0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2NhbGxzdGF0KHBhdGgpCisgICAgICAgICAgICByZXR1cm4gbHN0CisgICAgICAgIGV4Y2VwdCAob3MuZXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubHN0YXRjYWNoZVtwYXRoXSA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLnN0YXRjYWNoZVtwYXRoXSA9IEZhbHNlCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICMgVGhpcyBmb2xsb3dzIHN5bWJvbGljIGxpbmtzLCBzbyBib3RoIGlzbGluaygpIGFuZCBpc2RpcigpIGNhbiBiZSB0cnVlCisgICAgIyBmb3IgdGhlIHNhbWUgcGF0aCBvbm8gc3lzdGVtcyB0aGF0IHN1cHBvcnQgc3ltbGlua3MKKyAgICBkZWYgaXNmaWxlKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGlzIGEgcmVndWxhciBmaWxlIiIiCisgICAgICAgIHN0ID0gc2VsZi5jYWxsc3RhdChwYXRoKQorICAgICAgICBpZiBub3Qgc3Q6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIHN0YXRtb2QuU19JU1JFRyhzdC5zdF9tb2RlKQorCisgICAgIyBJcyBhIHBhdGggYSBkaXJlY3Rvcnk/CisgICAgIyBUaGlzIGZvbGxvd3Mgc3ltYm9saWMgbGlua3MsIHNvIGJvdGggaXNsaW5rKCkgYW5kIGlzZGlyKCkKKyAgICAjIGNhbiBiZSB0cnVlIGZvciB0aGUgc2FtZSBwYXRoIG9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IHN5bWxpbmtzCisgICAgZGVmIGlzZGlyKHNlbGYsIHMpOgorICAgICAgICAiIiJSZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0aG5hbWUgcmVmZXJzIHRvIGFuIGV4aXN0aW5nIGRpcmVjdG9yeS4iIiIKKyAgICAgICAgc3QgPSBzZWxmLmNhbGxzdGF0KHMpCisgICAgICAgIGlmIG5vdCBzdDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gc3RhdG1vZC5TX0lTRElSKHN0LnN0X21vZGUpCisKKyAgICBkZWYgaXNsaW5rKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGlzIGEgc3ltYm9saWMgbGluayIiIgorICAgICAgICBzdCA9IHNlbGYuY2FsbGxzdGF0KHBhdGgpCisgICAgICAgIGlmIG5vdCBzdDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gc3RhdG1vZC5TX0lTTE5LKHN0LnN0X21vZGUpCisKKyAgICAjIERvZXMgYSBwYXRoIGV4aXN0PworICAgICMgVGhpcyBpcyBmYWxzZSBmb3IgZGFuZ2xpbmcgc3ltYm9saWMgbGlua3Mgb24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgdGhlbS4KKyAgICBkZWYgZXhpc3RzKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGV4aXN0cy4gIFJldHVybnMgRmFsc2UgZm9yIGJyb2tlbiBzeW1ib2xpYyBsaW5rcyIiIgorICAgICAgICBpZiBzZWxmLmNhbGxzdGF0KHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgbGV4aXN0cyhzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBleGlzdHMuICBSZXR1cm5zIFRydWUgZm9yIGJyb2tlbiBzeW1ib2xpYyBsaW5rcyIiIgorICAgICAgICBpZiBzZWxmLmNhbGxsc3RhdChwYXRoKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHN0YXQoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLmNhbGxzdGF0KHBhdGgpCisKKyAgICBkZWYgbHN0YXQoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLmNhbGxsc3RhdChwYXRoKQorCisgICAgZGVmIHdhbGsoc2VsZiwgdG9wLCB0b3Bkb3duPVRydWUsIG9uZXJyb3I9Tm9uZSwgZm9sbG93bGlua3M9RmFsc2UpOgorICAgICAgICAjIE1hdGNoZXMgb3Mud2Fsaywgbm90IG9zLnBhdGgud2FsaygpCisKKyAgICAgICAgIyBXZSBtYXkgbm90IGhhdmUgcmVhZCBwZXJtaXNzaW9uIGZvciB0b3AsIGluIHdoaWNoIGNhc2Ugd2UgY2FuJ3QKKyAgICAgICAgIyBnZXQgYSBsaXN0IG9mIHRoZSBmaWxlcyB0aGUgZGlyZWN0b3J5IGNvbnRhaW5zLiAgb3MucGF0aC53YWxrCisgICAgICAgICMgYWx3YXlzIHN1cHByZXNzZWQgdGhlIGV4Y2VwdGlvbiB0aGVuLCByYXRoZXIgdGhhbiBibG93IHVwIGZvciBhCisgICAgICAgICMgbWlub3IgcmVhc29uIHdoZW4gKHNheSkgYSB0aG91c2FuZCByZWFkYWJsZSBkaXJlY3RvcmllcyBhcmUgc3RpbGwKKyAgICAgICAgIyBsZWZ0IHRvIHZpc2l0LiAgVGhhdCBsb2dpYyBpcyBjb3BpZWQgaGVyZS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKHRvcCkKKyAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGlmIG9uZXJyb3IgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgb25lcnJvcihlcnIpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBkaXJzLCBub25kaXJzID0gW10sIFtdCisgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgaWYgc2VsZi5pc2Rpcihvcy5wYXRoLmpvaW4odG9wLCBuYW1lKSk6CisgICAgICAgICAgICAgICAgZGlycy5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbm9uZGlycy5hcHBlbmQobmFtZSkKKworICAgICAgICBpZiB0b3Bkb3duOgorICAgICAgICAgICAgeWllbGQgdG9wLCBkaXJzLCBub25kaXJzCisgICAgICAgIGZvciBuYW1lIGluIGRpcnM6CisgICAgICAgICAgICBuZXdfcGF0aCA9IG9zLnBhdGguam9pbih0b3AsIG5hbWUpCisgICAgICAgICAgICBpZiBmb2xsb3dsaW5rcyBvciBub3Qgc2VsZi5pc2xpbmsobmV3X3BhdGgpOgorICAgICAgICAgICAgICAgIGZvciB4IGluIHNlbGYud2FsayhuZXdfcGF0aCwgdG9wZG93biwgb25lcnJvciwgZm9sbG93bGlua3MpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCB4CisgICAgICAgIGlmIG5vdCB0b3Bkb3duOgorICAgICAgICAgICAgeWllbGQgdG9wLCBkaXJzLCBub25kaXJzCisKKyAgICAjIyByZWFscGF0aCgpIHJlbGF0ZWQgZnVuY3Rpb25zCisgICAgZGVmIF9faXNfcGF0aF9iZWxvdyhzZWxmLCBmaWxlLCByb290KToKKyAgICAgICAgcmV0dXJuIChmaWxlICsgb3MucGF0aC5zZXApLnN0YXJ0c3dpdGgocm9vdCkKKworICAgIGRlZiBfX3JlYWxwYXRoX3JlbChzZWxmLCBzdGFydCwgcmVsX3BhdGgsIHJvb3QsIGxvb3BfY250LCBhc3N1bWVfZGlyKToKKyAgICAgICAgIiIiQ2FsY3VsYXRlcyByZWFsIHBhdGggb2Ygc3ltbGluayAnc3RhcnQnICsgJ3JlbF9wYXRoJyBiZWxvdworICAgICAgICAncm9vdCc7IG5vIHBhcnQgb2YgJ3N0YXJ0JyBiZWxvdyAncm9vdCcgbXVzdCBjb250YWluIHN5bWxpbmtzLiAiIiIKKyAgICAgICAgaGF2ZV9kaXIgPSBUcnVlCisKKyAgICAgICAgZm9yIGQgaW4gcmVsX3BhdGguc3BsaXQob3MucGF0aC5zZXApOgorICAgICAgICAgICAgaWYgbm90IGhhdmVfZGlyIGFuZCBub3QgYXNzdW1lX2RpcjoKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVOT0VOVCwgIm5vIHN1Y2ggZGlyZWN0b3J5ICVzIiAlIHN0YXJ0KQorCisgICAgICAgICAgICBpZiBkID09IG9zLnBhdGgucGFyZGlyOiAjICcuLicKKyAgICAgICAgICAgICAgICBpZiBsZW4oc3RhcnQpID49IGxlbihyb290KToKKyAgICAgICAgICAgICAgICAgICAgIyBkbyBub3QgZm9sbG93ICcuLicgYmVmb3JlIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBvcy5wYXRoLmRpcm5hbWUoc3RhcnQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBlbWl0IHdhcm5pbmc/CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgKHN0YXJ0LCBoYXZlX2RpcikgPSBzZWxmLl9fcmVhbHBhdGgob3MucGF0aC5qb2luKHN0YXJ0LCBkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290LCBsb29wX2NudCwgYXNzdW1lX2RpcikKKworICAgICAgICAgICAgYXNzZXJ0KHNlbGYuX19pc19wYXRoX2JlbG93KHN0YXJ0LCByb290KSkKKworICAgICAgICByZXR1cm4gc3RhcnQKKworICAgIGRlZiBfX3JlYWxwYXRoKHNlbGYsIGZpbGUsIHJvb3QsIGxvb3BfY250LCBhc3N1bWVfZGlyKToKKyAgICAgICAgd2hpbGUgc2VsZi5pc2xpbmsoZmlsZSkgYW5kIGxlbihmaWxlKSA+PSBsZW4ocm9vdCk6CisgICAgICAgICAgICBpZiBsb29wX2NudCA9PSAwOgorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRUxPT1AsIGZpbGUpCisKKyAgICAgICAgICAgIGxvb3BfY250IC09IDEKKyAgICAgICAgICAgIHRhcmdldCA9IG9zLnBhdGgubm9ybXBhdGgob3MucmVhZGxpbmsoZmlsZSkpCisgICAgCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Ficyh0YXJnZXQpOgorICAgICAgICAgICAgICAgIHRkaXIgPSBvcy5wYXRoLmRpcm5hbWUoZmlsZSkKKyAgICAgICAgICAgICAgICBhc3NlcnQoc2VsZi5fX2lzX3BhdGhfYmVsb3codGRpciwgcm9vdCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRkaXIgPSByb290CisKKyAgICAgICAgICAgIGZpbGUgPSBzZWxmLl9fcmVhbHBhdGhfcmVsKHRkaXIsIHRhcmdldCwgcm9vdCwgbG9vcF9jbnQsIGFzc3VtZV9kaXIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaXNfZGlyID0gc2VsZi5pc2RpcihmaWxlKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBpc19kaXIgPSBGYWxzZQorCisgICAgICAgIHJldHVybiAoZmlsZSwgaXNfZGlyKQorCisgICAgZGVmIHJlYWxwYXRoKHNlbGYsIGZpbGUsIHJvb3QsIHVzZV9waHlzZGlyID0gVHJ1ZSwgbG9vcF9jbnQgPSAxMDAsIGFzc3VtZV9kaXIgPSBGYWxzZSk6CisgICAgICAgICIiIiBSZXR1cm5zIHRoZSBjYW5vbmljYWwgcGF0aCBvZiAnZmlsZScgd2l0aCBhc3N1bWluZyBhCisgICAgICAgIHRvcGxldmVsICdyb290JyBkaXJlY3RvcnkuIFdoZW4gJ3VzZV9waHlzZGlyJyBpcyBzZXQsIGFsbAorICAgICAgICBwcmVjZWRpbmcgcGF0aCBjb21wb25lbnRzIG9mICdmaWxlJyB3aWxsIGJlIHJlc29sdmVkIGZpcnN0OworICAgICAgICB0aGlzIGZsYWcgc2hvdWxkIGJlIHNldCB1bmxlc3MgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IHRoZXJlIGlzCisgICAgICAgIG5vIHN5bWxpbmsgaW4gdGhlIHBhdGguIFdoZW4gJ2Fzc3VtZV9kaXInIGlzIG5vdCBzZXQsIG1pc3NpbmcKKyAgICAgICAgcGF0aCBjb21wb25lbnRzIHdpbGwgcmFpc2UgYW4gRU5PRU5UIGVycm9yIiIiCisKKyAgICAgICAgcm9vdCA9IG9zLnBhdGgubm9ybXBhdGgocm9vdCkKKyAgICAgICAgZmlsZSA9IG9zLnBhdGgubm9ybXBhdGgoZmlsZSkKKworICAgICAgICBpZiBub3Qgcm9vdC5lbmRzd2l0aChvcy5wYXRoLnNlcCk6CisgICAgICAgICAgICAjIGxldHRpbmcgcm9vdCBlbmQgd2l0aCAnLycgbWFrZXMgc29tZSB0aGluZ3MgZWFzaWVyCisgICAgICAgICAgICByb290ID0gcm9vdCArIG9zLnBhdGguc2VwCisKKyAgICAgICAgaWYgbm90IHNlbGYuX19pc19wYXRoX2JlbG93KGZpbGUsIHJvb3QpOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FSU5WQUwsICJmaWxlICclcycgaXMgbm90IGJlbG93IHJvb3QiICUgZmlsZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiB1c2VfcGh5c2RpcjoKKyAgICAgICAgICAgICAgICBmaWxlID0gc2VsZi5fX3JlYWxwYXRoX3JlbChyb290LCBmaWxlWyhsZW4ocm9vdCkgLSAxKTpdLCByb290LCBsb29wX2NudCwgYXNzdW1lX2RpcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmlsZSA9IHNlbGYuX19yZWFscGF0aChmaWxlLCByb290LCBsb29wX2NudCwgYXNzdW1lX2RpcilbMF0KKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUxPT1A6CisgICAgICAgICAgICAgICAgIyBtYWtlIEVMT09QIG1vcmUgcmVhZGFibGU7IHdpdGhvdXQgY2F0Y2hpbmcgaXQsIHRoZXJlIHdpbGwKKyAgICAgICAgICAgICAgICAjIGJlIHByaW50ZWQgYSBiYWNrdHJhY2Ugd2l0aCAxMDBzIG9mIE9TRXJyb3IgZXhjZXB0aW9ucworICAgICAgICAgICAgICAgICMgZWxzZQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRUxPT1AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG9vIG11Y2ggcmVjdXJzaW9ucyB3aGlsZSByZXNvbHZpbmcgJyVzJzsgbG9vcCBpbiAnJXMnIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZSwgZS5zdHJlcnJvcikpCisKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgcmV0dXJuIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvY2xhc3NleHRlbmQucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2NsYXNzZXh0ZW5kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMDdlY2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2NsYXNzZXh0ZW5kLnB5CkBAIC0wLDAgKzEsMTIwIEBACitjbGFzcyBDbGFzc0V4dGVuZGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4dG5hbWUsIGQpOgorICAgICAgICBzZWxmLmV4dG5hbWUgPSBleHRuYW1lCisgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgc2VsZi5wa2dzX21hcHBpbmcgPSBbXQorCisgICAgZGVmIGV4dGVuZF9uYW1lKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoImtlcm5lbC0iKSBvciBuYW1lID09ICJ2aXJ0dWFsL2tlcm5lbCI6CisgICAgICAgICAgICByZXR1cm4gbmFtZQorICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoInJ0bGQiKToKKyAgICAgICAgICAgIHJldHVybiBuYW1lCisgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoIi1jcm9zc3NkayIpOgorICAgICAgICAgICAgcmV0dXJuIG5hbWUKKyAgICAgICAgaWYgbmFtZS5lbmRzd2l0aCgiLSIgKyBzZWxmLmV4dG5hbWUpOgorICAgICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgiLSIgKyBzZWxmLmV4dG5hbWUsICIiKQorICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoInZpcnR1YWwvIik6CisgICAgICAgICAgICBzdWJzID0gbmFtZS5zcGxpdCgiLyIsIDEpWzFdCisgICAgICAgICAgICBpZiBub3Qgc3Vicy5zdGFydHN3aXRoKHNlbGYuZXh0bmFtZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuICJ2aXJ0dWFsLyIgKyBzZWxmLmV4dG5hbWUgKyAiLSIgKyBzdWJzCisgICAgICAgICAgICByZXR1cm4gbmFtZQorICAgICAgICBpZiBub3QgbmFtZS5zdGFydHN3aXRoKHNlbGYuZXh0bmFtZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5leHRuYW1lICsgIi0iICsgbmFtZQorICAgICAgICByZXR1cm4gbmFtZQorCisgICAgZGVmIG1hcF92YXJpYWJsZShzZWxmLCB2YXJuYW1lLCBzZXR2YXIgPSBUcnVlKToKKyAgICAgICAgdmFyID0gc2VsZi5kLmdldFZhcih2YXJuYW1lLCBUcnVlKQorICAgICAgICBpZiBub3QgdmFyOgorICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAgIHZhciA9IHZhci5zcGxpdCgpCisgICAgICAgIG5ld3ZhciA9IFtdCisgICAgICAgIGZvciB2IGluIHZhcjoKKyAgICAgICAgICAgIG5ld3Zhci5hcHBlbmQoc2VsZi5leHRlbmRfbmFtZSh2KSkKKyAgICAgICAgbmV3ZGF0YSA9ICAiICIuam9pbihuZXd2YXIpCisgICAgICAgIGlmIHNldHZhcjoKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIodmFybmFtZSwgbmV3ZGF0YSkKKyAgICAgICAgcmV0dXJuIG5ld2RhdGEKKworICAgIGRlZiBtYXBfcmVnZXhwX3ZhcmlhYmxlKHNlbGYsIHZhcm5hbWUsIHNldHZhciA9IFRydWUpOgorICAgICAgICB2YXIgPSBzZWxmLmQuZ2V0VmFyKHZhcm5hbWUsIFRydWUpCisgICAgICAgIGlmIG5vdCB2YXI6CisgICAgICAgICAgICByZXR1cm4gIiIKKyAgICAgICAgdmFyID0gdmFyLnNwbGl0KCkKKyAgICAgICAgbmV3dmFyID0gW10KKyAgICAgICAgZm9yIHYgaW4gdmFyOgorICAgICAgICAgICAgaWYgdi5zdGFydHN3aXRoKCJeIiArIHNlbGYuZXh0bmFtZSk6CisgICAgICAgICAgICAgICAgbmV3dmFyLmFwcGVuZCh2KQorICAgICAgICAgICAgZWxpZiB2LnN0YXJ0c3dpdGgoIl4iKToKKyAgICAgICAgICAgICAgICBuZXd2YXIuYXBwZW5kKCJeIiArIHNlbGYuZXh0bmFtZSArICItIiArIHZbMTpdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXd2YXIuYXBwZW5kKHNlbGYuZXh0ZW5kX25hbWUodikpCisgICAgICAgIG5ld2RhdGEgPSAgIiAiLmpvaW4obmV3dmFyKQorICAgICAgICBpZiBzZXR2YXI6CisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKHZhcm5hbWUsIG5ld2RhdGEpCisgICAgICAgIHJldHVybiBuZXdkYXRhCisKKyAgICBkZWYgbWFwX2RlcGVuZHMoc2VsZiwgZGVwKToKKyAgICAgICAgaWYgZGVwLmVuZHN3aXRoKCgiLW5hdGl2ZSIsICItbmF0aXZlLXJ1bnRpbWUiKSkgb3IgKCduYXRpdmVzZGstJyBpbiBkZXApIG9yICgnY3Jvc3MtY2FuYWRpYW4nIGluIGRlcCkgb3IgKCctY3Jvc3NzZGstJyBpbiBkZXApOgorICAgICAgICAgICAgcmV0dXJuIGRlcAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBEbyBub3QgZXh0ZW5kIGZvciB0aGF0IGFscmVhZHkgaGF2ZSBtdWx0aWxpYiBwcmVmaXgKKyAgICAgICAgICAgIHZhciA9IHNlbGYuZC5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIHZhcjoKKyAgICAgICAgICAgICAgICB2YXIgPSB2YXIuc3BsaXQoKQorICAgICAgICAgICAgICAgIGZvciB2IGluIHZhcjoKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwLnN0YXJ0c3dpdGgodik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVwCisgICAgICAgICAgICByZXR1cm4gc2VsZi5leHRlbmRfbmFtZShkZXApCisKKyAgICBkZWYgbWFwX2RlcGVuZHNfdmFyaWFibGUoc2VsZiwgdmFybmFtZSwgc3VmZml4ID0gIiIpOgorICAgICAgICAjIFdlIG5lZWQgdG8gcHJlc2VydmUgRVhURU5EUEtHViBzbyBpdCBjYW4gYmUgZXhwYW5kZWQgY29ycmVjdGx5IGxhdGVyCisgICAgICAgIGlmIHN1ZmZpeDoKKyAgICAgICAgICAgIHZhcm5hbWUgPSB2YXJuYW1lICsgIl8iICsgc3VmZml4CisgICAgICAgIG9yaWcgPSBzZWxmLmQuZ2V0VmFyKCJFWFRFTkRQS0dWIiwgRmFsc2UpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkVYVEVORFBLR1YiLCAiRVhURU5EUEtHViIpCisgICAgICAgIGRlcHMgPSBzZWxmLmQuZ2V0VmFyKHZhcm5hbWUsIFRydWUpCisgICAgICAgIGlmIG5vdCBkZXBzOgorICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiRVhURU5EUEtHViIsIG9yaWcpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZGVwcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihkZXBzKQorICAgICAgICBuZXdkZXBzID0ge30KKyAgICAgICAgZm9yIGRlcCBpbiBkZXBzOgorICAgICAgICAgICAgbmV3ZGVwc1tzZWxmLm1hcF9kZXBlbmRzKGRlcCldID0gZGVwc1tkZXBdCisKKyAgICAgICAgc2VsZi5kLnNldFZhcih2YXJuYW1lLCBiYi51dGlscy5qb2luX2RlcHMobmV3ZGVwcywgRmFsc2UpLnJlcGxhY2UoIkVYVEVORFBLR1YiLCAiJHtFWFRFTkRQS0dWfSIpKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJFWFRFTkRQS0dWIiwgb3JpZykKKworICAgIGRlZiBtYXBfcGFja2FnZXZhcnMoc2VsZik6CisgICAgICAgIGZvciBwa2cgaW4gKHNlbGYuZC5nZXRWYXIoIlBBQ0tBR0VTIiwgVHJ1ZSkuc3BsaXQoKSArIFsiIl0pOgorICAgICAgICAgICAgc2VsZi5tYXBfZGVwZW5kc192YXJpYWJsZSgiUkRFUEVORFMiLCBwa2cpCisgICAgICAgICAgICBzZWxmLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJSUkVDT01NRU5EUyIsIHBrZykKKyAgICAgICAgICAgIHNlbGYubWFwX2RlcGVuZHNfdmFyaWFibGUoIlJTVUdHRVNUUyIsIHBrZykKKyAgICAgICAgICAgIHNlbGYubWFwX2RlcGVuZHNfdmFyaWFibGUoIlJQUk9WSURFUyIsIHBrZykKKyAgICAgICAgICAgIHNlbGYubWFwX2RlcGVuZHNfdmFyaWFibGUoIlJSRVBMQUNFUyIsIHBrZykKKyAgICAgICAgICAgIHNlbGYubWFwX2RlcGVuZHNfdmFyaWFibGUoIlJDT05GTElDVFMiLCBwa2cpCisgICAgICAgICAgICBzZWxmLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJQS0ciLCBwa2cpCisKKyAgICBkZWYgcmVuYW1lX3BhY2thZ2VzKHNlbGYpOgorICAgICAgICBmb3IgcGtnIGluIChzZWxmLmQuZ2V0VmFyKCJQQUNLQUdFUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgcGtnLnN0YXJ0c3dpdGgoc2VsZi5leHRuYW1lKToKKyAgICAgICAgICAgICAgIHNlbGYucGtnc19tYXBwaW5nLmFwcGVuZChbcGtnLnNwbGl0KHNlbGYuZXh0bmFtZSArICItIilbMV0sIHBrZ10pCisgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc2VsZi5wa2dzX21hcHBpbmcuYXBwZW5kKFtwa2csIHNlbGYuZXh0ZW5kX25hbWUocGtnKV0pCisKKyAgICAgICAgc2VsZi5kLnNldFZhcigiUEFDS0FHRVMiLCAiICIuam9pbihbcm93WzFdIGZvciByb3cgaW4gc2VsZi5wa2dzX21hcHBpbmddKSkKKworICAgIGRlZiByZW5hbWVfcGFja2FnZV92YXJpYWJsZXMoc2VsZiwgdmFyaWFibGVzKToKKyAgICAgICAgZm9yIHBrZ19tYXBwaW5nIGluIHNlbGYucGtnc19tYXBwaW5nOgorICAgICAgICAgICAgZm9yIHN1YnMgaW4gdmFyaWFibGVzOgorICAgICAgICAgICAgICAgIHNlbGYuZC5yZW5hbWVWYXIoIiVzXyVzIiAlIChzdWJzLCBwa2dfbWFwcGluZ1swXSksICIlc18lcyIgJSAoc3VicywgcGtnX21hcHBpbmdbMV0pKQorCitjbGFzcyBOYXRpdmVzZGtDbGFzc0V4dGVuZGVyKENsYXNzRXh0ZW5kZXIpOgorICAgIGRlZiBtYXBfZGVwZW5kcyhzZWxmLCBkZXApOgorICAgICAgICBpZiBkZXAuc3RhcnRzd2l0aChzZWxmLmV4dG5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIGRlcAorICAgICAgICBpZiBkZXAuZW5kc3dpdGgoKCItZ2NjLWluaXRpYWwiLCAiLWdjYyIsICItZysrIikpOgorICAgICAgICAgICAgcmV0dXJuIGRlcCArICItY3Jvc3NzZGsiCisgICAgICAgIGVsaWYgZGVwLmVuZHN3aXRoKCgiLW5hdGl2ZSIsICItbmF0aXZlLXJ1bnRpbWUiKSkgb3IgKCduYXRpdmVzZGstJyBpbiBkZXApIG9yICgnLWNyb3NzLScgaW4gZGVwKSBvciAoJy1jcm9zc3Nkay0nIGluIGRlcCk6CisgICAgICAgICAgICByZXR1cm4gZGVwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5leHRlbmRfbmFtZShkZXApCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL2NsYXNzdXRpbHMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2NsYXNzdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgxODhmZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvY2xhc3N1dGlscy5weQpAQCAtMCwwICsxLDQzIEBACitjbGFzcyBDbGFzc1JlZ2lzdHJ5KHR5cGUpOgorICAgICIiIk1haW50YWluIGEgcmVnaXN0cnkgb2YgY2xhc3NlcywgaW5kZXhlZCBieSBuYW1lLgorCitOb3RlIHRoYXQgdGhpcyBpbXBsZW1lbnRhdGlvbiByZXF1aXJlcyB0aGF0IHRoZSBuYW1lcyBiZSB1bmlxdWUsIGFzIGl0IHVzZXMKK2EgZGljdGlvbmFyeSB0byBob2xkIHRoZSBjbGFzc2VzIGJ5IG5hbWUuCisKK1RoZSBuYW1lIGluIHRoZSByZWdpc3RyeSBjYW4gYmUgb3ZlcnJpZGRlbiB2aWEgdGhlICduYW1lJyBhdHRyaWJ1dGUgb2YgdGhlCitjbGFzcywgYW5kIHRoZSAncHJpb3JpdHknIGF0dHJpYnV0ZSBjb250cm9scyBwcmlvcml0eS4gVGhlIHByaW9yaXRpemVkKCkKK21ldGhvZCByZXR1cm5zIHRoZSByZWdpc3RlcmVkIGNsYXNzZXMgaW4gcHJpb3JpdHkgb3JkZXIuCisKK1N1YmNsYXNzZXMgb2YgQ2xhc3NSZWdpc3RyeSBtYXkgZGVmaW5lIGFuICdpbXBsZW1lbnRlZCcgcHJvcGVydHkgdG8gZXhlcnQKK2NvbnRyb2wgb3ZlciB3aGV0aGVyIHRoZSBjbGFzcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSByZWdpc3RyeSAoZS5nLiB0byBrZWVwCithYnN0cmFjdCBiYXNlIGNsYXNzZXMgb3V0IG9mIHRoZSByZWdpc3RyeSkuIiIiCisgICAgcHJpb3JpdHkgPSAwCisgICAgY2xhc3MgX19tZXRhY2xhc3NfXyh0eXBlKToKKyAgICAgICAgIiIiR2l2ZSBlYWNoIENsYXNzUmVnaXN0cnkgdGhlaXIgb3duIHJlZ2lzdHJ5IiIiCisgICAgICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBhdHRycyk6CisgICAgICAgICAgICBjbHMucmVnaXN0cnkgPSB7fQorICAgICAgICAgICAgdHlwZS5fX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBhdHRycykKKworICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBhdHRycyk6CisgICAgICAgIHN1cGVyKENsYXNzUmVnaXN0cnksIGNscykuX19pbml0X18obmFtZSwgYmFzZXMsIGF0dHJzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3QgY2xzLmltcGxlbWVudGVkOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xzLm5hbWUKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgY2xzLm5hbWUgPSBuYW1lCisgICAgICAgIGNscy5yZWdpc3RyeVtjbHMubmFtZV0gPSBjbHMKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwcmlvcml0aXplZCh0Y2xzKToKKyAgICAgICAgcmV0dXJuIHNvcnRlZCh0Y2xzLnJlZ2lzdHJ5LnZhbHVlcygpLAorICAgICAgICAgICAgICAgICAgICAgIGtleT1sYW1iZGEgdjogdi5wcmlvcml0eSwgcmV2ZXJzZT1UcnVlKQorCisgICAgZGVmIHVucmVnaXN0ZXIoY2xzKToKKyAgICAgICAgZm9yIGtleSBpbiBjbHMucmVnaXN0cnkua2V5cygpOgorICAgICAgICAgICAgaWYgY2xzLnJlZ2lzdHJ5W2tleV0gaXMgY2xzOgorICAgICAgICAgICAgICAgIGRlbCBjbHMucmVnaXN0cnlba2V5XQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9jb3B5X2J1aWxkc3lzdGVtLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9jb3B5X2J1aWxkc3lzdGVtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OTU3OGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2NvcHlfYnVpbGRzeXN0ZW0ucHkKQEAgLTAsMCArMSwxMDEgQEAKKyMgVGhpcyBjbGFzcyBzaG91bGQgcHJvdmlkZSBlYXN5IGFjY2VzcyB0byB0aGUgZGlmZmVyZW50IGFzcGVjdHMgb2YgdGhlCisjIGJ1aWxkc3lzdGVtIHN1Y2ggYXMgbGF5ZXJzLCBiaXRiYWtlIGxvY2F0aW9uLCBldGMuCitpbXBvcnQgc3RhdAoraW1wb3J0IHNodXRpbAorCitkZWYgX3NtYXJ0X2NvcHkoc3JjLCBkZXN0KToKKyAgICAjIHNtYXJ0X2NvcHkgd2lsbCBjaG9vc2UgdGhlIGNvcnJlY3QgZnVuY3Rpb24gZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlCisgICAgIyBzb3VyY2UgaXMgYSBmaWxlIG9yIGEgZGlyZWN0b3J5LgorICAgIG1vZGUgPSBvcy5zdGF0KHNyYykuc3RfbW9kZQorICAgIGlmIHN0YXQuU19JU0RJUihtb2RlKToKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNyYywgZGVzdCwgc3ltbGlua3M9VHJ1ZSkKKyAgICBlbHNlOgorICAgICAgICBzaHV0aWwuY29weWZpbGUoc3JjLCBkZXN0KQorICAgICAgICBzaHV0aWwuY29weW1vZGUoc3JjLCBkZXN0KQorCitjbGFzcyBCdWlsZFN5c3RlbShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc2VsZi5kID0gZAorICAgICAgICBzZWxmLmxheWVyZGlycyA9IGQuZ2V0VmFyKCdCQkxBWUVSUycsIFRydWUpLnNwbGl0KCkKKworICAgIGRlZiBjb3B5X2JpdGJha2VfYW5kX2xheWVycyhzZWxmLCBkZXN0ZGlyKToKKyAgICAgICAgIyBDb3B5IGluIGFsbCBtZXRhZGF0YSBsYXllcnMgKyBiaXRiYWtlIChhcyByZXBvc2l0b3JpZXMpCisgICAgICAgIGxheWVyc19jb3BpZWQgPSBbXQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZGVzdGRpcikKKyAgICAgICAgbGF5ZXJzID0gbGlzdChzZWxmLmxheWVyZGlycykKKworICAgICAgICBjb3JlYmFzZSA9IHNlbGYuZC5nZXRWYXIoJ0NPUkVCQVNFJywgVHJ1ZSkKKyAgICAgICAgbGF5ZXJzLmFwcGVuZChjb3JlYmFzZSkKKworICAgICAgICBjb3JlYmFzZV9maWxlcyA9IHNlbGYuZC5nZXRWYXIoJ0NPUkVCQVNFX0ZJTEVTJywgVHJ1ZSkuc3BsaXQoKQorICAgICAgICBjb3JlYmFzZV9maWxlcyA9IFtjb3JlYmFzZSArICcvJyAreCBmb3IgeCBpbiBjb3JlYmFzZV9maWxlc10KKyAgICAgICAgIyBNYWtlIHN1cmUgYml0YmFrZSBnb2VzIGluCisgICAgICAgIGJpdGJha2VfZGlyID0gYmIuX19maWxlX18ucnNwbGl0KCcvJywgMylbMF0KKyAgICAgICAgY29yZWJhc2VfZmlsZXMuYXBwZW5kKGJpdGJha2VfZGlyKQorCisgICAgICAgIGZvciBsYXllciBpbiBsYXllcnM6CisgICAgICAgICAgICBsYXllcmNvbmYgPSBvcy5wYXRoLmpvaW4obGF5ZXIsICdjb25mJywgJ2xheWVyLmNvbmYnKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobGF5ZXJjb25mKToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4obGF5ZXJjb25mLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGlmIGYucmVhZGxpbmUoKS5zdGFydHN3aXRoKCIjICMjIyB3b3Jrc3BhY2UgbGF5ZXIgYXV0by1nZW5lcmF0ZWQgYnkgZGV2dG9vbCAjIyMiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlNraXBwaW5nIGxvY2FsIHdvcmtzcGFjZSBsYXllciAlcyIgJSBsYXllcikKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgSWYgdGhlIGxheWVyIHdhcyBhbHJlYWR5IHVuZGVyIGNvcmViYXNlLCBsZWF2ZSBpdCB0aGVyZQorICAgICAgICAgICAgIyBzaW5jZSBsYXllcnMgc3VjaCBhcyBtZXRhIGhhdmUgaXNzdWVzIHdoZW4gbW92ZWQuCisgICAgICAgICAgICBsYXllcmRlc3RwYXRoID0gZGVzdGRpcgorICAgICAgICAgICAgaWYgY29yZWJhc2UgPT0gb3MucGF0aC5kaXJuYW1lKGxheWVyKToKKyAgICAgICAgICAgICAgICBsYXllcmRlc3RwYXRoICs9ICcvJyArIG9zLnBhdGguYmFzZW5hbWUoY29yZWJhc2UpCisgICAgICAgICAgICBsYXllcmRlc3RwYXRoICs9ICcvJyArIG9zLnBhdGguYmFzZW5hbWUobGF5ZXIpCisKKyAgICAgICAgICAgIGxheWVyX3JlbGF0aXZlID0gb3MucGF0aC5yZWxwYXRoKGxheWVyZGVzdHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ZGlyKQorICAgICAgICAgICAgbGF5ZXJzX2NvcGllZC5hcHBlbmQobGF5ZXJfcmVsYXRpdmUpCisKKyAgICAgICAgICAgICMgVHJlYXQgY29yZWJhc2UgYXMgc3BlY2lhbCBzaW5jZSBpdCB0eXBpY2FsbHkgd2lsbCBjb250YWluCisgICAgICAgICAgICAjIGJ1aWxkIGRpcmVjdG9yaWVzIG9yIG90aGVyIGN1c3RvbSBpdGVtcy4KKyAgICAgICAgICAgIGlmIGNvcmViYXNlID09IGxheWVyOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihsYXllcmRlc3RwYXRoKQorICAgICAgICAgICAgICAgIGZvciBmIGluIGNvcmViYXNlX2ZpbGVzOgorICAgICAgICAgICAgICAgICAgICBmX2Jhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShmKQorICAgICAgICAgICAgICAgICAgICBkZXN0bmFtZSA9IG9zLnBhdGguam9pbihsYXllcmRlc3RwYXRoLCBmX2Jhc2VuYW1lKQorICAgICAgICAgICAgICAgICAgICBfc21hcnRfY29weShmLCBkZXN0bmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobGF5ZXJkZXN0cGF0aCk6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIlNraXBwaW5nIGxheWVyICVzLCBhbHJlYWR5IGhhbmRsZWQiICUgbGF5ZXIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgX3NtYXJ0X2NvcHkobGF5ZXIsIGxheWVyZGVzdHBhdGgpCisKKyAgICAgICAgcmV0dXJuIGxheWVyc19jb3BpZWQKKworZGVmIGdlbmVyYXRlX2xvY2tlZF9zaWdzKHNpZ2ZpbGUsIGQpOgorICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoc2lnZmlsZSkpCisgICAgZGVwZCA9IGQuZ2V0VmFyKCdCQl9UQVNLREVQREFUQScsIFRydWUpCisgICAgdGFza3MgPSBbJyVzLiVzJyAlICh2WzJdLCB2WzFdKSBmb3IgdiBpbiBkZXBkLml0ZXJ2YWx1ZXMoKV0KKyAgICBiYi5wYXJzZS5zaWdnZW4uZHVtcF9sb2NrZWRzaWdzKHNpZ2ZpbGUsIHRhc2tzKQorCitkZWYgcHJ1bmVfbG9ja2Vkc2lncyhhbGxvd2VkX3Rhc2tzLCBleGNsdWRlZF90YXJnZXRzLCBsb2NrZWRzaWdzLCBwcnVuZWRfb3V0cHV0KToKKyAgICB3aXRoIG9wZW4obG9ja2Vkc2lncywgJ3InKSBhcyBpbmZpbGU6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUocHJ1bmVkX291dHB1dCkpCisgICAgICAgIHdpdGggb3BlbihwcnVuZWRfb3V0cHV0LCAndycpIGFzIGY6CisgICAgICAgICAgICBpbnZhbHVlID0gRmFsc2UKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGluZmlsZToKKyAgICAgICAgICAgICAgICBpZiBpbnZhbHVlOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLmVuZHN3aXRoKCdcXFxuJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdHZhbCA9IGxpbmUuc3RyaXAoKS5zcGxpdCgnOicpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzcGxpdHZhbFsxXSBpbiBhbGxvd2VkX3Rhc2tzIGFuZCBub3Qgc3BsaXR2YWxbMF0gaW4gZXhjbHVkZWRfdGFyZ2V0czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBpbnZhbHVlID0gRmFsc2UKKyAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnU0lHR0VOX0xPQ0tFRFNJR1MnKToKKyAgICAgICAgICAgICAgICAgICAgaW52YWx1ZSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZShsaW5lKQorCitkZWYgY3JlYXRlX2xvY2tlZF9zc3RhdGVfY2FjaGUobG9ja2Vkc2lncywgaW5wdXRfc3N0YXRlX2NhY2hlLCBvdXRwdXRfc3N0YXRlX2NhY2hlLCBkLCBmaXhlZGxzYnN0cmluZz0iIik6CisgICAgYmIubm90ZSgnR2VuZXJhdGluZyBzc3RhdGUtY2FjaGUuLi4nKQorCisgICAgYmIucHJvY2Vzcy5ydW4oImdlbi1sb2NrZWRzaWctY2FjaGUgJXMgJXMgJXMiICUgKGxvY2tlZHNpZ3MsIGlucHV0X3NzdGF0ZV9jYWNoZSwgb3V0cHV0X3NzdGF0ZV9jYWNoZSkpCisgICAgaWYgZml4ZWRsc2JzdHJpbmc6CisgICAgICAgIG9zLnJlbmFtZShvdXRwdXRfc3N0YXRlX2NhY2hlICsgJy8nICsgZC5nZXRWYXIoJ05BVElWRUxTQlNUUklORycsIFRydWUpLAorICAgICAgICBvdXRwdXRfc3N0YXRlX2NhY2hlICsgJy8nICsgZml4ZWRsc2JzdHJpbmcpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL2RhdGEucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2RhdGEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNjMGUwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvZGF0YS5weQpAQCAtMCwwICsxLDE3IEBACitpbXBvcnQgb2UubWFrZXR5cGUKKworZGVmIHR5cGVkX3ZhbHVlKGtleSwgZCk6CisgICAgIiIiQ29uc3RydWN0IGEgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgbWV0YWRhdGEgdmFyaWFibGUsIHVzaW5nIGl0cyBmbGFncworICAgIHRvIGRldGVybWluZSB0aGUgdHlwZSBhbmQgcGFyYW1ldGVycyBmb3IgY29uc3RydWN0aW9uLiIiIgorICAgIHZhcl90eXBlID0gZC5nZXRWYXJGbGFnKGtleSwgJ3R5cGUnKQorICAgIGZsYWdzID0gZC5nZXRWYXJGbGFncyhrZXkpCisgICAgaWYgZmxhZ3MgaXMgbm90IE5vbmU6CisgICAgICAgIGZsYWdzID0gZGljdCgoZmxhZywgZC5leHBhbmQodmFsdWUpKQorICAgICAgICAgICAgICAgICAgICAgZm9yIGZsYWcsIHZhbHVlIGluIGZsYWdzLml0ZXJpdGVtcygpKQorICAgIGVsc2U6CisgICAgICAgIGZsYWdzID0ge30KKworICAgIHRyeToKKyAgICAgICAgcmV0dXJuIG9lLm1ha2V0eXBlLmNyZWF0ZShkLmdldFZhcihrZXksIFRydWUpIG9yICcnLCB2YXJfdHlwZSwgKipmbGFncykKKyAgICBleGNlcHQgKFR5cGVFcnJvciwgVmFsdWVFcnJvciksIGV4YzoKKyAgICAgICAgYmIubXNnLmZhdGFsKCJEYXRhIiwgIiVzOiAlcyIgJSAoa2V5LCBzdHIoZXhjKSkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL2Rpc3Ryb19jaGVjay5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvZGlzdHJvX2NoZWNrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZDViMGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2Rpc3Ryb19jaGVjay5weQpAQCAtMCwwICsxLDM4MyBAQAorZGVmIGdldF9saW5rc19mcm9tX3VybCh1cmwpOgorICAgICJSZXR1cm4gYWxsIHRoZSBocmVmIGxpbmtzIGZvdW5kIG9uIHRoZSB3ZWIgbG9jYXRpb24iCisKKyAgICBpbXBvcnQgdXJsbGliLCBzZ21sbGliCisgICAgCisgICAgY2xhc3MgTGlua3NQYXJzZXIoc2dtbGxpYi5TR01MUGFyc2VyKToKKyAgICAgICAgZGVmIHBhcnNlKHNlbGYsIHMpOgorICAgICAgICAgICAgIlBhcnNlIHRoZSBnaXZlbiBzdHJpbmcgJ3MnLiIKKyAgICAgICAgICAgIHNlbGYuZmVlZChzKQorICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2ZXJib3NlPTApOgorICAgICAgICAgICAgIkluaXRpYWxpc2UgYW4gb2JqZWN0IHBhc3NpbmcgJ3ZlcmJvc2UnIHRvIHRoZSBzdXBlcmNsYXNzLiIKKyAgICAgICAgICAgIHNnbWxsaWIuU0dNTFBhcnNlci5fX2luaXRfXyhzZWxmLCB2ZXJib3NlKQorICAgICAgICAgICAgc2VsZi5oeXBlcmxpbmtzID0gW10KKyAgICAKKyAgICAgICAgZGVmIHN0YXJ0X2Eoc2VsZiwgYXR0cmlidXRlcyk6CisgICAgICAgICAgICAiUHJvY2VzcyBhIGh5cGVybGluayBhbmQgaXRzICdhdHRyaWJ1dGVzJy4iCisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gYXR0cmlidXRlczoKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICJocmVmIjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5oeXBlcmxpbmtzLmFwcGVuZCh2YWx1ZS5zdHJpcCgnLycpKQorICAgIAorICAgICAgICBkZWYgZ2V0X2h5cGVybGlua3Moc2VsZik6CisgICAgICAgICAgICAiUmV0dXJuIHRoZSBsaXN0IG9mIGh5cGVybGlua3MuIgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuaHlwZXJsaW5rcworCisgICAgc29jayA9IHVybGxpYi51cmxvcGVuKHVybCkKKyAgICB3ZWJwYWdlID0gc29jay5yZWFkKCkKKyAgICBzb2NrLmNsb3NlKCkKKworICAgIGxpbmtzcGFyc2VyID0gTGlua3NQYXJzZXIoKQorICAgIGxpbmtzcGFyc2VyLnBhcnNlKHdlYnBhZ2UpCisgICAgcmV0dXJuIGxpbmtzcGFyc2VyLmdldF9oeXBlcmxpbmtzKCkKKworZGVmIGZpbmRfbGF0ZXN0X251bWVyaWNfcmVsZWFzZSh1cmwpOgorICAgICJGaW5kIHRoZSBsYXRlc3QgbGlzdGVkIG51bWVyaWMgcmVsZWFzZSBvbiB0aGUgZ2l2ZW4gdXJsIgorICAgIG1heD0wCisgICAgbWF4c3RyPSIiCisgICAgZm9yIGxpbmsgaW4gZ2V0X2xpbmtzX2Zyb21fdXJsKHVybCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlbGVhc2UgPSBmbG9hdChsaW5rKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByZWxlYXNlID0gMAorICAgICAgICBpZiByZWxlYXNlID4gbWF4OgorICAgICAgICAgICAgbWF4ID0gcmVsZWFzZQorICAgICAgICAgICAgbWF4c3RyID0gbGluaworICAgIHJldHVybiBtYXhzdHIKKworZGVmIGlzX3NyY19ycG0obmFtZSk6CisgICAgIkNoZWNrIGlmIHRoZSBsaW5rIGlzIHBvaW50aW5nIHRvIGEgc3JjLnJwbSBmaWxlIgorICAgIGlmIG5hbWVbLTg6XSA9PSAiLnNyYy5ycG0iOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBGYWxzZQorCitkZWYgcGFja2FnZV9uYW1lX2Zyb21fc3JwbShzcnBtKToKKyAgICAiU3RyaXAgb3V0IHRoZSBwYWNrYWdlIG5hbWUgZnJvbSB0aGUgc3JjLnJwbSBmaWxlbmFtZSIKKyAgICBzdHJpbmdzID0gc3JwbS5zcGxpdCgnLScpCisgICAgcGFja2FnZV9uYW1lID0gc3RyaW5nc1swXQorICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbiAoc3RyaW5ncykgLSAxKToKKyAgICAgICAgc3RyID0gc3RyaW5nc1tpXQorICAgICAgICBpZiBub3Qgc3RyWzBdLmlzZGlnaXQoKToKKyAgICAgICAgICAgIHBhY2thZ2VfbmFtZSArPSAnLScgKyBzdHIKKyAgICByZXR1cm4gcGFja2FnZV9uYW1lCisKK2RlZiBjbGVhbl9wYWNrYWdlX2xpc3QocGFja2FnZV9saXN0KToKKyAgICAiUmVtb3ZlcyBtdWx0aXBsZSBlbnRyaWVzIG9mIHBhY2thZ2VzIGFuZCBzb3J0cyB0aGUgbGlzdCIKKyAgICBzZXQgPSB7fQorICAgIG1hcChzZXQuX19zZXRpdGVtX18sIHBhY2thZ2VfbGlzdCwgW10pCisgICAgcmV0dXJuIHNldC5rZXlzKCkKKworCitkZWYgZ2V0X2xhdGVzdF9yZWxlYXNlZF9tZWVnb19zb3VyY2VfcGFja2FnZV9saXN0KCk6CisgICAgIlJldHVybnMgbGlzdCBvZiBhbGwgdGhlIG5hbWUgb3MgcGFja2FnZXMgaW4gdGhlIGxhdGVzdCBtZWVnbyBkaXN0cm8iCisKKyAgICBwYWNrYWdlX25hbWVzID0gW10KKyAgICB0cnk6CisgICAgICAgIGYgPSBvcGVuKCIvdG1wL01lZWdvLTEuMSIsICJyIikKKyAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgIHBhY2thZ2VfbmFtZXMuYXBwZW5kKGxpbmVbOi0xXSArICI6IiArICJtYWluIikgIyBBbHNvIHN0cmlwIHRoZSAnXG4nIGF0IHRoZSBlbmQKKyAgICBleGNlcHQgSU9FcnJvcjogcGFzcworICAgIHBhY2thZ2VfbGlzdD1jbGVhbl9wYWNrYWdlX2xpc3QocGFja2FnZV9uYW1lcykKKyAgICByZXR1cm4gIjEuMCIsIHBhY2thZ2VfbGlzdAorCitkZWYgZ2V0X3NvdXJjZV9wYWNrYWdlX2xpc3RfZnJvbV91cmwodXJsLCBzZWN0aW9uKToKKyAgICAiUmV0dXJuIGEgc2VjdGlvbmVkIGxpc3Qgb2YgcGFja2FnZSBuYW1lcyBmcm9tIGEgVVJMIGxpc3QiCisKKyAgICBiYi5ub3RlKCJSZWFkaW5nICVzOiAlcyIgJSAodXJsLCBzZWN0aW9uKSkKKyAgICBsaW5rcyA9IGdldF9saW5rc19mcm9tX3VybCh1cmwpCisgICAgc3JwbXMgPSBmaWx0ZXIoaXNfc3JjX3JwbSwgbGlua3MpCisgICAgbmFtZXNfbGlzdCA9IG1hcChwYWNrYWdlX25hbWVfZnJvbV9zcnBtLCBzcnBtcykKKworICAgIG5ld19wa2dzID0gW10KKyAgICBmb3IgcGtncyBpbiBuYW1lc19saXN0OgorICAgICAgIG5ld19wa2dzLmFwcGVuZChwa2dzICsgIjoiICsgc2VjdGlvbikKKworICAgIHJldHVybiBuZXdfcGtncworCitkZWYgZ2V0X2xhdGVzdF9yZWxlYXNlZF9mZWRvcmFfc291cmNlX3BhY2thZ2VfbGlzdCgpOgorICAgICJSZXR1cm5zIGxpc3Qgb2YgYWxsIHRoZSBuYW1lIG9zIHBhY2thZ2VzIGluIHRoZSBsYXRlc3QgZmVkb3JhIGRpc3RybyIKKyAgICBsYXRlc3QgPSBmaW5kX2xhdGVzdF9udW1lcmljX3JlbGVhc2UoImh0dHA6Ly9hcmNoaXZlLmZlZG9yYXByb2plY3Qub3JnL3B1Yi9mZWRvcmEvbGludXgvcmVsZWFzZXMvIikKKworICAgIHBhY2thZ2VfbmFtZXMgPSBnZXRfc291cmNlX3BhY2thZ2VfbGlzdF9mcm9tX3VybCgiaHR0cDovL2FyY2hpdmUuZmVkb3JhcHJvamVjdC5vcmcvcHViL2ZlZG9yYS9saW51eC9yZWxlYXNlcy8lcy9GZWRvcmEvc291cmNlL1NSUE1TLyIgJSBsYXRlc3QsICJtYWluIikKKworIyAgICBwYWNrYWdlX25hbWVzICs9IGdldF9zb3VyY2VfcGFja2FnZV9saXN0X2Zyb21fdXJsKCJodHRwOi8vZG93bmxvYWQuZmVkb3JhLnJlZGhhdC5jb20vcHViL2ZlZG9yYS9saW51eC9yZWxlYXNlcy8lcy9FdmVyeXRoaW5nL3NvdXJjZS9TUFJNUy8iICUgbGF0ZXN0LCAiZXZlcnl0aGluZyIpCisgICAgcGFja2FnZV9uYW1lcyArPSBnZXRfc291cmNlX3BhY2thZ2VfbGlzdF9mcm9tX3VybCgiaHR0cDovL2FyY2hpdmUuZmVkb3JhcHJvamVjdC5vcmcvcHViL2ZlZG9yYS9saW51eC91cGRhdGVzLyVzL1NSUE1TLyIgJSBsYXRlc3QsICJ1cGRhdGVzIikKKworICAgIHBhY2thZ2VfbGlzdD1jbGVhbl9wYWNrYWdlX2xpc3QocGFja2FnZV9uYW1lcykKKyAgICAgICAgCisgICAgcmV0dXJuIGxhdGVzdCwgcGFja2FnZV9saXN0CisKK2RlZiBnZXRfbGF0ZXN0X3JlbGVhc2VkX29wZW5zdXNlX3NvdXJjZV9wYWNrYWdlX2xpc3QoKToKKyAgICAiUmV0dXJucyBsaXN0IG9mIGFsbCB0aGUgbmFtZSBvcyBwYWNrYWdlcyBpbiB0aGUgbGF0ZXN0IG9wZW5zdXNlIGRpc3RybyIKKyAgICBsYXRlc3QgPSBmaW5kX2xhdGVzdF9udW1lcmljX3JlbGVhc2UoImh0dHA6Ly9kb3dubG9hZC5vcGVuc3VzZS5vcmcvc291cmNlL2Rpc3RyaWJ1dGlvbi8iKQorCisgICAgcGFja2FnZV9uYW1lcyA9IGdldF9zb3VyY2VfcGFja2FnZV9saXN0X2Zyb21fdXJsKCJodHRwOi8vZG93bmxvYWQub3BlbnN1c2Uub3JnL3NvdXJjZS9kaXN0cmlidXRpb24vJXMvcmVwby9vc3Mvc3VzZS9zcmMvIiAlIGxhdGVzdCwgIm1haW4iKQorICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X3NvdXJjZV9wYWNrYWdlX2xpc3RfZnJvbV91cmwoImh0dHA6Ly9kb3dubG9hZC5vcGVuc3VzZS5vcmcvdXBkYXRlLyVzL3JwbS9zcmMvIiAlIGxhdGVzdCwgInVwZGF0ZXMiKQorCisgICAgcGFja2FnZV9saXN0PWNsZWFuX3BhY2thZ2VfbGlzdChwYWNrYWdlX25hbWVzKQorICAgIHJldHVybiBsYXRlc3QsIHBhY2thZ2VfbGlzdAorCitkZWYgZ2V0X2xhdGVzdF9yZWxlYXNlZF9tYW5kcml2YV9zb3VyY2VfcGFja2FnZV9saXN0KCk6CisgICAgIlJldHVybnMgbGlzdCBvZiBhbGwgdGhlIG5hbWUgb3MgcGFja2FnZXMgaW4gdGhlIGxhdGVzdCBtYW5kcml2YSBkaXN0cm8iCisgICAgbGF0ZXN0ID0gZmluZF9sYXRlc3RfbnVtZXJpY19yZWxlYXNlKCJodHRwOi8vZGlzdHJpYi1jb2ZmZWUuaXBzbC5qdXNzaWV1LmZyL3B1Yi9saW51eC9NYW5kcml2YUxpbnV4L29mZmljaWFsLyIpCisgICAgcGFja2FnZV9uYW1lcyA9IGdldF9zb3VyY2VfcGFja2FnZV9saXN0X2Zyb21fdXJsKCJodHRwOi8vZGlzdHJpYi1jb2ZmZWUuaXBzbC5qdXNzaWV1LmZyL3B1Yi9saW51eC9NYW5kcml2YUxpbnV4L29mZmljaWFsLyVzL1NSUE1TL21haW4vcmVsZWFzZS8iICUgbGF0ZXN0LCAibWFpbiIpCisjICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X3NvdXJjZV9wYWNrYWdlX2xpc3RfZnJvbV91cmwoImh0dHA6Ly9kaXN0cmliLWNvZmZlZS5pcHNsLmp1c3NpZXUuZnIvcHViL2xpbnV4L01hbmRyaXZhTGludXgvb2ZmaWNpYWwvJXMvU1JQTVMvY29udHJpYi9yZWxlYXNlLyIgJSBsYXRlc3QsICJjb250cmliIikKKyAgICBwYWNrYWdlX25hbWVzICs9IGdldF9zb3VyY2VfcGFja2FnZV9saXN0X2Zyb21fdXJsKCJodHRwOi8vZGlzdHJpYi1jb2ZmZWUuaXBzbC5qdXNzaWV1LmZyL3B1Yi9saW51eC9NYW5kcml2YUxpbnV4L29mZmljaWFsLyVzL1NSUE1TL21haW4vdXBkYXRlcy8iICUgbGF0ZXN0LCAidXBkYXRlcyIpCisKKyAgICBwYWNrYWdlX2xpc3Q9Y2xlYW5fcGFja2FnZV9saXN0KHBhY2thZ2VfbmFtZXMpCisgICAgcmV0dXJuIGxhdGVzdCwgcGFja2FnZV9saXN0CisKK2RlZiBmaW5kX2xhdGVzdF9kZWJpYW5fcmVsZWFzZSh1cmwpOgorICAgICJGaW5kIHRoZSBsYXRlc3QgbGlzdGVkIGRlYmlhbiByZWxlYXNlIG9uIHRoZSBnaXZlbiB1cmwiCisKKyAgICByZWxlYXNlcyA9IFtdCisgICAgZm9yIGxpbmsgaW4gZ2V0X2xpbmtzX2Zyb21fdXJsKHVybCk6CisgICAgICAgIGlmIGxpbmtbOjZdID09ICJEZWJpYW4iOgorICAgICAgICAgICAgaWYgJzsnIG5vdCBpbiBsaW5rOgorICAgICAgICAgICAgICAgIHJlbGVhc2VzLmFwcGVuZChsaW5rKQorICAgIHJlbGVhc2VzLnNvcnQoKQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIHJlbGVhc2VzLnBvcCgpWzY6XQorICAgIGV4Y2VwdDoKKyAgICAgICAgcmV0dXJuICJfTm90Rm91bmRfIgorCitkZWYgZ2V0X2RlYmlhbl9zdHlsZV9zb3VyY2VfcGFja2FnZV9saXN0KHVybCwgc2VjdGlvbik6CisgICAgIlJldHVybiB0aGUgbGlzdCBvZiBwYWNrYWdlLW5hbWVzIHN0b3JlZCBpbiB0aGUgZGViaWFuIHN0eWxlIFNvdXJjZXMuZ3ogZmlsZSIKKyAgICBpbXBvcnQgdXJsbGliCisgICAgc29jayA9IHVybGxpYi51cmxvcGVuKHVybCkKKyAgICBpbXBvcnQgdGVtcGZpbGUKKyAgICB0bXBmaWxlID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKG1vZGU9J3diJywgcHJlZml4PSdvZWNvcmUuJywgc3VmZml4PScudG1wJywgZGVsZXRlPUZhbHNlKQorICAgIHRtcGZpbGVuYW1lPXRtcGZpbGUubmFtZQorICAgIHRtcGZpbGUud3JpdGUoc29jay5yZWFkKCkpCisgICAgc29jay5jbG9zZSgpCisgICAgdG1wZmlsZS5jbG9zZSgpCisgICAgaW1wb3J0IGd6aXAKKyAgICBiYi5ub3RlKCJSZWFkaW5nICVzOiAlcyIgJSAodXJsLCBzZWN0aW9uKSkKKworICAgIGYgPSBnemlwLm9wZW4odG1wZmlsZW5hbWUpCisgICAgcGFja2FnZV9uYW1lcyA9IFtdCisgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgaWYgbGluZVs6OV0gPT0gIlBhY2thZ2U6ICI6CisgICAgICAgICAgICBwYWNrYWdlX25hbWVzLmFwcGVuZChsaW5lWzk6LTFdICsgIjoiICsgc2VjdGlvbikgIyBBbHNvIHN0cmlwIHRoZSAnXG4nIGF0IHRoZSBlbmQKKyAgICBvcy51bmxpbmsodG1wZmlsZW5hbWUpCisKKyAgICByZXR1cm4gcGFja2FnZV9uYW1lcworCitkZWYgZ2V0X2xhdGVzdF9yZWxlYXNlZF9kZWJpYW5fc291cmNlX3BhY2thZ2VfbGlzdCgpOgorICAgICJSZXR1cm5zIGxpc3Qgb2YgYWxsIHRoZSBuYW1lIG9zIHBhY2thZ2VzIGluIHRoZSBsYXRlc3QgZGViaWFuIGRpc3RybyIKKyAgICBsYXRlc3QgPSBmaW5kX2xhdGVzdF9kZWJpYW5fcmVsZWFzZSgiaHR0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9kaXN0cy8iKQorICAgIHVybCA9ICJodHRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL2Rpc3RzL3N0YWJsZS9tYWluL3NvdXJjZS9Tb3VyY2VzLmd6IiAKKyAgICBwYWNrYWdlX25hbWVzID0gZ2V0X2RlYmlhbl9zdHlsZV9zb3VyY2VfcGFja2FnZV9saXN0KHVybCwgIm1haW4iKQorIyAgICB1cmwgPSAiaHR0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9kaXN0cy9zdGFibGUvY29udHJpYi9zb3VyY2UvU291cmNlcy5neiIgCisjICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X2RlYmlhbl9zdHlsZV9zb3VyY2VfcGFja2FnZV9saXN0KHVybCwgImNvbnRyaWIiKQorICAgIHVybCA9ICJodHRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL2Rpc3RzL3N0YWJsZS1wcm9wb3NlZC11cGRhdGVzL21haW4vc291cmNlL1NvdXJjZXMuZ3oiIAorICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X2RlYmlhbl9zdHlsZV9zb3VyY2VfcGFja2FnZV9saXN0KHVybCwgInVwZGF0ZXMiKQorICAgIHBhY2thZ2VfbGlzdD1jbGVhbl9wYWNrYWdlX2xpc3QocGFja2FnZV9uYW1lcykKKyAgICByZXR1cm4gbGF0ZXN0LCBwYWNrYWdlX2xpc3QKKworZGVmIGZpbmRfbGF0ZXN0X3VidW50dV9yZWxlYXNlKHVybCk6CisgICAgIkZpbmQgdGhlIGxhdGVzdCBsaXN0ZWQgdWJ1bnR1IHJlbGVhc2Ugb24gdGhlIGdpdmVuIHVybCIKKyAgICB1cmwgKz0gIj9DPU07Tz1EIiAjIERlc2NlbmRpbmcgU29ydCBieSBMYXN0IE1vZGlmaWVkCisgICAgZm9yIGxpbmsgaW4gZ2V0X2xpbmtzX2Zyb21fdXJsKHVybCk6CisgICAgICAgIGlmIGxpbmtbLTg6XSA9PSAiLXVwZGF0ZXMiOgorICAgICAgICAgICAgcmV0dXJuIGxpbmtbOi04XQorICAgIHJldHVybiAiX05vdEZvdW5kXyIKKworZGVmIGdldF9sYXRlc3RfcmVsZWFzZWRfdWJ1bnR1X3NvdXJjZV9wYWNrYWdlX2xpc3QoKToKKyAgICAiUmV0dXJucyBsaXN0IG9mIGFsbCB0aGUgbmFtZSBvcyBwYWNrYWdlcyBpbiB0aGUgbGF0ZXN0IHVidW50dSBkaXN0cm8iCisgICAgbGF0ZXN0ID0gZmluZF9sYXRlc3RfdWJ1bnR1X3JlbGVhc2UoImh0dHA6Ly9hcmNoaXZlLnVidW50dS5jb20vdWJ1bnR1L2Rpc3RzLyIpCisgICAgdXJsID0gImh0dHA6Ly9hcmNoaXZlLnVidW50dS5jb20vdWJ1bnR1L2Rpc3RzLyVzL21haW4vc291cmNlL1NvdXJjZXMuZ3oiICUgbGF0ZXN0CisgICAgcGFja2FnZV9uYW1lcyA9IGdldF9kZWJpYW5fc3R5bGVfc291cmNlX3BhY2thZ2VfbGlzdCh1cmwsICJtYWluIikKKyMgICAgdXJsID0gImh0dHA6Ly9hcmNoaXZlLnVidW50dS5jb20vdWJ1bnR1L2Rpc3RzLyVzL211bHRpdmVyc2Uvc291cmNlL1NvdXJjZXMuZ3oiICUgbGF0ZXN0CisjICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X2RlYmlhbl9zdHlsZV9zb3VyY2VfcGFja2FnZV9saXN0KHVybCwgIm11bHRpdmVyc2UiKQorIyAgICB1cmwgPSAiaHR0cDovL2FyY2hpdmUudWJ1bnR1LmNvbS91YnVudHUvZGlzdHMvJXMvdW5pdmVyc2Uvc291cmNlL1NvdXJjZXMuZ3oiICUgbGF0ZXN0CisjICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X2RlYmlhbl9zdHlsZV9zb3VyY2VfcGFja2FnZV9saXN0KHVybCwgInVuaXZlcnNlIikKKyAgICB1cmwgPSAiaHR0cDovL2FyY2hpdmUudWJ1bnR1LmNvbS91YnVudHUvZGlzdHMvJXMtdXBkYXRlcy9tYWluL3NvdXJjZS9Tb3VyY2VzLmd6IiAlIGxhdGVzdAorICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X2RlYmlhbl9zdHlsZV9zb3VyY2VfcGFja2FnZV9saXN0KHVybCwgInVwZGF0ZXMiKQorICAgIHBhY2thZ2VfbGlzdD1jbGVhbl9wYWNrYWdlX2xpc3QocGFja2FnZV9uYW1lcykKKyAgICByZXR1cm4gbGF0ZXN0LCBwYWNrYWdlX2xpc3QKKworZGVmIGNyZWF0ZV9kaXN0cm9fcGFja2FnZXNfbGlzdChkaXN0cm9fY2hlY2tfZGlyKToKKyAgICBwa2dsc3RfZGlyID0gb3MucGF0aC5qb2luKGRpc3Ryb19jaGVja19kaXIsICJwYWNrYWdlX2xpc3RzIikKKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpciAocGtnbHN0X2Rpcik6CisgICAgICAgIG9zLm1ha2VkaXJzKHBrZ2xzdF9kaXIpCisgICAgIyBmaXJzdCBjbGVhciBvbGQgc3R1ZmYKKyAgICBmb3IgZmlsZSBpbiBvcy5saXN0ZGlyKHBrZ2xzdF9kaXIpOgorICAgICAgICBvcy51bmxpbmsob3MucGF0aC5qb2luKHBrZ2xzdF9kaXIsIGZpbGUpKQorIAorICAgIHBlcl9kaXN0cm9fZnVuY3Rpb25zID0gWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiRGViaWFuIiwgZ2V0X2xhdGVzdF9yZWxlYXNlZF9kZWJpYW5fc291cmNlX3BhY2thZ2VfbGlzdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJVYnVudHUiLCBnZXRfbGF0ZXN0X3JlbGVhc2VkX3VidW50dV9zb3VyY2VfcGFja2FnZV9saXN0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIkZlZG9yYSIsIGdldF9sYXRlc3RfcmVsZWFzZWRfZmVkb3JhX3NvdXJjZV9wYWNrYWdlX2xpc3RdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiT3BlblN1U0UiLCBnZXRfbGF0ZXN0X3JlbGVhc2VkX29wZW5zdXNlX3NvdXJjZV9wYWNrYWdlX2xpc3RdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiTWFuZHJpdmEiLCBnZXRfbGF0ZXN0X3JlbGVhc2VkX21hbmRyaXZhX3NvdXJjZV9wYWNrYWdlX2xpc3RdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiTWVlZ28iLCBnZXRfbGF0ZXN0X3JlbGVhc2VkX21lZWdvX3NvdXJjZV9wYWNrYWdlX2xpc3RdCisgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgCisgICAgZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKKyAgICBiZWdpbiA9IGRhdGV0aW1lLm5vdygpCisgICAgZm9yIGRpc3RybyBpbiBwZXJfZGlzdHJvX2Z1bmN0aW9uczoKKyAgICAgICAgbmFtZSA9IGRpc3Ryb1swXQorICAgICAgICByZWxlYXNlLCBwYWNrYWdlX2xpc3QgPSBkaXN0cm9bMV0oKQorICAgICAgICBiYi5ub3RlKCJEaXN0cm86ICVzLCBMYXRlc3QgUmVsZWFzZTogJXMsICMgc3JjIHBhY2thZ2VzOiAlZCIgJSAobmFtZSwgcmVsZWFzZSwgbGVuKHBhY2thZ2VfbGlzdCkpKQorICAgICAgICBwYWNrYWdlX2xpc3RfZmlsZSA9IG9zLnBhdGguam9pbihwa2dsc3RfZGlyLCBuYW1lICsgIi0iICsgcmVsZWFzZSkKKyAgICAgICAgZiA9IG9wZW4ocGFja2FnZV9saXN0X2ZpbGUsICJ3K2IiKQorICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VfbGlzdDoKKyAgICAgICAgICAgIGYud3JpdGUocGtnICsgIlxuIikKKyAgICAgICAgZi5jbG9zZSgpCisgICAgZW5kID0gZGF0ZXRpbWUubm93KCkKKyAgICBkZWx0YSA9IGVuZCAtIGJlZ2luCisgICAgYmIubm90ZSgicGFja2FnZV9saXN0IGdlbmVyYXRpb3NuIHRvb2sgdGhpcyBtdWNoIHRpbWU6ICVkIHNlY29uZHMiICUgZGVsdGEuc2Vjb25kcykKKworZGVmIHVwZGF0ZV9kaXN0cm9fZGF0YShkaXN0cm9fY2hlY2tfZGlyLCBkYXRldGltZSk6CisgICAgIiIiCisgICAgICAgIElmIGRpc3RybyBwYWNrYWdlcyBsaXN0IGRhdGEgaXMgb2xkIHRoZW4gcmVidWlsZCBpdC4KKyAgICAgICAgVGhlIG9wZXJhdGlvbnMgaGFzIHRvIGJlIHByb3RlY3RlZCBieSBhIGxvY2sgc28gdGhhdAorICAgICAgICBvbmx5IG9uZSB0aHJlYWQgcGVyZm9ybWVzIGl0IGF0IGEgdGltZS4KKyAgICAiIiIKKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpciAoZGlzdHJvX2NoZWNrX2Rpcik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLm5vdGUgKCJNYWtpbmcgbmV3IGRpcmVjdG9yeTogJXMiICUgZGlzdHJvX2NoZWNrX2RpcikKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzIChkaXN0cm9fY2hlY2tfZGlyKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignVW5hYmxlIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXMnICUgKGRpc3Ryb19jaGVja19kaXIpKQorCisKKyAgICBkYXRldGltZV9maWxlID0gb3MucGF0aC5qb2luKGRpc3Ryb19jaGVja19kaXIsICJidWlsZF9kYXRldGltZSIpCisgICAgc2F2ZWRfZGF0ZXRpbWUgPSAiX2ludmFsaWRfIgorICAgIGltcG9ydCBmY250bAorICAgIHRyeToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRhdGV0aW1lX2ZpbGUpOgorICAgICAgICAgICAgb3BlbihkYXRldGltZV9maWxlLCAndytiJykuY2xvc2UoKSAjIHRvdWNoIHRoZSBmaWxlIHNvIHRoYXQgdGhlIG5leHQgb3BlbiB3b24ndCBmYWlsCisKKyAgICAgICAgZiA9IG9wZW4oZGF0ZXRpbWVfZmlsZSwgInIrYiIpCisgICAgICAgIGZjbnRsLmxvY2tmKGYsIGZjbnRsLkxPQ0tfRVgpCisgICAgICAgIHNhdmVkX2RhdGV0aW1lID0gZi5yZWFkKCkKKyAgICAgICAgaWYgc2F2ZWRfZGF0ZXRpbWVbMDo4XSAhPSBkYXRldGltZVswOjhdOgorICAgICAgICAgICAgYmIubm90ZSgiVGhlIGJ1aWxkIGRhdGV0aW1lIGRpZCBub3QgbWF0Y2g6IHNhdmVkOiVzIGN1cnJlbnQ6JXMiICUgKHNhdmVkX2RhdGV0aW1lLCBkYXRldGltZSkpCisgICAgICAgICAgICBiYi5ub3RlKCJSZWdlbmVyYXRpbmcgZGlzdHJvIHBhY2thZ2UgbGlzdHMiKQorICAgICAgICAgICAgY3JlYXRlX2Rpc3Ryb19wYWNrYWdlc19saXN0KGRpc3Ryb19jaGVja19kaXIpCisgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgIGYud3JpdGUoZGF0ZXRpbWUpCisKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdVbmFibGUgdG8gcmVhZC93cml0ZSB0aGlzIGZpbGU6ICVzJyAlIChkYXRldGltZV9maWxlKSkKKyAgICBmaW5hbGx5OgorICAgICAgICBmY250bC5sb2NrZihmLCBmY250bC5MT0NLX1VOKQorICAgICAgICBmLmNsb3NlKCkKKyAKK2RlZiBjb21wYXJlX2luX2Rpc3Ryb19wYWNrYWdlc19saXN0KGRpc3Ryb19jaGVja19kaXIsIGQpOgorICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGRpc3Ryb19jaGVja19kaXIpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oImNvbXBhcmVfaW5fZGlzdHJvX3BhY2thZ2VzX2xpc3Q6IGludmFsaWQgZGlzdHJvX2NoZWNrX2RpciBwYXNzZWQiKQorICAgICAgICAKKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICBwa2dsc3RfZGlyID0gb3MucGF0aC5qb2luKGRpc3Ryb19jaGVja19kaXIsICJwYWNrYWdlX2xpc3RzIikKKyAgICBtYXRjaGluZ19kaXN0cm9zID0gW10KKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgcmVjaXBlX25hbWUgPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGJiLm5vdGUoIkNoZWNraW5nOiAlcyIgJSBwbikKKworICAgIHRyaW1fZGljdCA9IGRpY3QoeyItbmF0aXZlIjoiLW5hdGl2ZSIsICItY3Jvc3MiOiItY3Jvc3MiLCAiLWluaXRpYWwiOiItaW5pdGlhbCJ9KQorCisgICAgaWYgcG4uZmluZCgiLW5hdGl2ZSIpICE9IC0xOgorICAgICAgICBwbnN0cmlwcGVkID0gcG4uc3BsaXQoIi1uYXRpdmUiKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICByZWNpcGVfbmFtZSA9IHBuc3RyaXBwZWRbMF0KKworICAgIGlmIHBuLnN0YXJ0c3dpdGgoIm5hdGl2ZXNkay0iKToKKyAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCJuYXRpdmVzZGstIikKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzFdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgcmVjaXBlX25hbWUgPSBwbnN0cmlwcGVkWzFdCisKKyAgICBpZiBwbi5maW5kKCItY3Jvc3MiKSAhPSAtMToKKyAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItY3Jvc3MiKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICByZWNpcGVfbmFtZSA9IHBuc3RyaXBwZWRbMF0KKworICAgIGlmIHBuLmZpbmQoIi1pbml0aWFsIikgIT0gLTE6CisgICAgICAgIHBuc3RyaXBwZWQgPSBwbi5zcGxpdCgiLWluaXRpYWwiKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICByZWNpcGVfbmFtZSA9IHBuc3RyaXBwZWRbMF0KKworICAgIGJiLm5vdGUoIlJlY2lwZTogJXMiICUgcmVjaXBlX25hbWUpCisgICAgdG1wID0gbG9jYWxkYXRhLmdldFZhcignRElTVFJPX1BOX0FMSUFTJywgVHJ1ZSkKKworICAgIGRpc3Ryb19leGNlcHRpb25zID0gZGljdCh7Ik9FLUNvcmUiOidPRS1Db3JlJywgIk9wZW5lZEhhbmQiOidPcGVuZWRIYW5kJywgIkludGVsIjonSW50ZWwnLCAiVXBzdHJlYW0iOidVcHN0cmVhbScsICJXaW5kcml2ZXIiOidXaW5kcml2ZXInLCAiT1NQRFQiOidPU1BEVCBBcHByb3ZlZCcsICJQb2t5IjoncG9reSd9KQorCisgICAgaWYgdG1wOgorICAgICAgICBsaXN0ID0gdG1wLnNwbGl0KCcgJykKKyAgICAgICAgZm9yIHN0ciBpbiBsaXN0OgorICAgICAgICAgICAgaWYgc3RyIGFuZCBzdHIuZmluZCgiPSIpID09IC0xIGFuZCBkaXN0cm9fZXhjZXB0aW9uc1tzdHJdOgorICAgICAgICAgICAgICAgIG1hdGNoaW5nX2Rpc3Ryb3MuYXBwZW5kKHN0cikKKworICAgIGRpc3Ryb19wbl9hbGlhc2VzID0ge30KKyAgICBpZiB0bXA6CisgICAgICAgIGxpc3QgPSB0bXAuc3BsaXQoJyAnKQorICAgICAgICBmb3Igc3RyIGluIGxpc3Q6CisgICAgICAgICAgICBpZiBzdHIuZmluZCgiPSIpICE9IC0xOgorICAgICAgICAgICAgICAgIChkaXN0LCBwbl9hbGlhcykgPSBzdHIuc3BsaXQoJz0nKQorICAgICAgICAgICAgICAgIGRpc3Ryb19wbl9hbGlhc2VzW2Rpc3Quc3RyaXAoKS5sb3dlcigpXSA9IHBuX2FsaWFzLnN0cmlwKCkKKyAKKyAgICBmb3IgZmlsZSBpbiBvcy5saXN0ZGlyKHBrZ2xzdF9kaXIpOgorICAgICAgICAoZGlzdHJvLCBkaXN0cm9fcmVsZWFzZSkgPSBmaWxlLnNwbGl0KCItIikKKyAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHBrZ2xzdF9kaXIsIGZpbGUpLCAicmIiKQorICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgKHBrZywgc2VjdGlvbikgPSBsaW5lLnNwbGl0KCI6IikKKyAgICAgICAgICAgIGlmIGRpc3Ryby5sb3dlcigpIGluIGRpc3Ryb19wbl9hbGlhc2VzOgorICAgICAgICAgICAgICAgIHBuID0gZGlzdHJvX3BuX2FsaWFzZXNbZGlzdHJvLmxvd2VyKCldCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBuID0gcmVjaXBlX25hbWUKKyAgICAgICAgICAgIGlmIHBuID09IHBrZzoKKyAgICAgICAgICAgICAgICBtYXRjaGluZ19kaXN0cm9zLmFwcGVuZChkaXN0cm8gKyAiLSIgKyBzZWN0aW9uWzotMV0pICMgc3RyaXAgdGhlIFxuIGF0IHRoZSBlbmQKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBmLmNsb3NlKCkKKworICAgIAorICAgIGlmIHRtcCAhPSBOb25lOgorCWxpc3QgPSB0bXAuc3BsaXQoJyAnKQorCWZvciBpdGVtIGluIGxpc3Q6CisgICAgICAgICAgICBtYXRjaGluZ19kaXN0cm9zLmFwcGVuZChpdGVtKQorICAgIGJiLm5vdGUoIk1hdGNoaW5nOiAlcyIgJSBtYXRjaGluZ19kaXN0cm9zKQorICAgIHJldHVybiBtYXRjaGluZ19kaXN0cm9zCisKK2RlZiBjcmVhdGVfbG9nX2ZpbGUoZCwgbG9nbmFtZSk6CisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICBsb2dwYXRoID0gZC5nZXRWYXIoJ0xPR19ESVInLCBUcnVlKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihsb2dwYXRoKQorICAgIGxvZ2ZuLCBsb2dzdWZmaXggPSBvcy5wYXRoLnNwbGl0ZXh0KGxvZ25hbWUpCisgICAgbG9nZmlsZSA9IG9zLnBhdGguam9pbihsb2dwYXRoLCAiJXMuJXMlcyIgJSAobG9nZm4sIGQuZ2V0VmFyKCdEQVRFVElNRScsIFRydWUpLCBsb2dzdWZmaXgpKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhsb2dmaWxlKToKKyAgICAgICAgICAgIHNsb2dmaWxlID0gb3MucGF0aC5qb2luKGxvZ3BhdGgsIGxvZ25hbWUpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzbG9nZmlsZSk6CisgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShzbG9nZmlsZSkKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbCgidG91Y2ggJXMiICUgbG9nZmlsZSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIG9zLnN5bWxpbmsobG9nZmlsZSwgc2xvZ2ZpbGUpCisgICAgICAgICAgICBkLnNldFZhcignTE9HX0ZJTEUnLCBsb2dmaWxlKQorICAgIHJldHVybiBsb2dmaWxlCisKKworZGVmIHNhdmVfZGlzdHJvX2NoZWNrX3Jlc3VsdChyZXN1bHQsIGRhdGV0aW1lLCByZXN1bHRfZmlsZSwgZCk6CisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGxvZ2RpciA9IGQuZ2V0VmFyKCdMT0dfRElSJywgVHJ1ZSkKKyAgICBpZiBub3QgbG9nZGlyOgorICAgICAgICBiYi5lcnJvcigiTE9HX0RJUiB2YXJpYWJsZSBpcyBub3QgZGVmaW5lZCwgY2FuJ3Qgd3JpdGUgdGhlIGRpc3Ryb19jaGVjayByZXN1bHRzIikKKyAgICAgICAgcmV0dXJuCisgICAgaWYgbm90IG9zLnBhdGguaXNkaXIobG9nZGlyKToKKyAgICAgICAgb3MubWFrZWRpcnMobG9nZGlyKQorICAgIGxpbmUgPSBwbgorICAgIGZvciBpIGluIHJlc3VsdDoKKyAgICAgICAgbGluZSA9IGxpbmUgKyAiLCIgKyBpCisgICAgZiA9IG9wZW4ocmVzdWx0X2ZpbGUsICJhIikKKyAgICBpbXBvcnQgZmNudGwKKyAgICBmY250bC5sb2NrZihmLCBmY250bC5MT0NLX0VYKQorICAgIGYuc2VlaygwLCBvcy5TRUVLX0VORCkgIyBzZWVrIHRvIHRoZSBlbmQgb2YgZmlsZQorICAgIGYud3JpdGUobGluZSArICJcbiIpCisgICAgZmNudGwubG9ja2YoZiwgZmNudGwuTE9DS19VTikKKyAgICBmLmNsb3NlKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvaW1hZ2UucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2ltYWdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNjE5NTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2ltYWdlLnB5CkBAIC0wLDAgKzEsMzg2IEBACitmcm9tIG9lLnV0aWxzIGltcG9ydCBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3MKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKKworCitkZWYgZ2VuZXJhdGVfaW1hZ2UoYXJnKToKKyAgICAodHlwZSwgc3ViaW1hZ2VzLCBjcmVhdGVfaW1nX2NtZCkgPSBhcmcKKworICAgIGJiLm5vdGUoIlJ1bm5pbmcgaW1hZ2UgY3JlYXRpb24gc2NyaXB0IGZvciAlczogJXMgLi4uIiAlCisgICAgICAgICAgICAodHlwZSwgY3JlYXRlX2ltZ19jbWQpKQorCisgICAgdHJ5OgorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjcmVhdGVfaW1nX2NtZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICByZXR1cm4oIkVycm9yOiBUaGUgaW1hZ2UgY3JlYXRpb24gc2NyaXB0ICclcycgcmV0dXJuZWQgJWQ6XG4lcyIgJQorICAgICAgICAgICAgICAgKGUuY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgIGJiLm5vdGUoIlNjcmlwdCBvdXRwdXQ6XG4lcyIgJSBvdXRwdXQpCisKKyAgICByZXR1cm4gTm9uZQorCisKKyIiIgorVGhpcyBjbGFzcyB3aWxsIGhlbHAgY29tcHV0ZSBJTUFHRV9GU1RZUEUgZGVwZW5kZW5jaWVzIGFuZCBncm91cCB0aGVtIGluIGJhdGNoZXMKK3RoYXQgY2FuIGJlIGV4ZWN1dGVkIGluIHBhcmFsbGVsLgorCitUaGUgbmV4dCBleGFtcGxlIGlzIGZvciBpbGx1c3RyYXRpb24gcHVycG9zZXMsIGhpZ2hseSB1bmxpa2VseSB0byBoYXBwZW4gaW4gcmVhbCBsaWZlLgorSXQncyBqdXN0IG9uZSBvZiB0aGUgdGVzdCBjYXNlcyBJIHVzZWQgdG8gdGVzdCB0aGUgYWxnb3JpdGhtOgorCitGb3I6CitJTUFHRV9GU1RZUEVTID0gImkxIGkyIGkzIGk0IGk1IgorSU1BR0VfVFlQRURFUF9pNCA9ICJpMiIKK0lNQUdFX1RZUEVERVBfaTUgPSAiaTYgaTQiCitJTUFHRV9UWVBFREVQX2k2ID0gImk3IgorSU1BR0VfVFlQRURFUF9pNyA9ICJpMiIKKworV2UgZ2V0IHRoZSBmb2xsb3dpbmcgbGlzdCBvZiBiYXRjaGVzIHRoYXQgY2FuIGJlIGV4ZWN1dGVkIGluIHBhcmFsbGVsLCBoYXZpbmcgdGhlCitkZXBlbmRlbmNpZXMgc2F0aXNmaWVkOgorCitbWydpMScsICdpMycsICdpMiddLCBbJ2k0JywgJ2k3J10sIFsnaTYnXSwgWydpNSddXQorIiIiCitjbGFzcyBJbWFnZURlcEdyYXBoKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYuZ3JhcGggPSBkaWN0KCkKKyAgICAgICAgc2VsZi5kZXBzX2FycmF5ID0gZGljdCgpCisKKyAgICBkZWYgX2NvbnN0cnVjdF9kZXBfZ3JhcGgoc2VsZiwgaW1hZ2VfZnN0eXBlcyk6CisgICAgICAgIGdyYXBoID0gZGljdCgpCisKKyAgICAgICAgZGVmIGFkZF9ub2RlKG5vZGUpOgorICAgICAgICAgICAgYmFzZV90eXBlID0gc2VsZi5faW1hZ2VfYmFzZV90eXBlKG5vZGUpCisgICAgICAgICAgICBkZXBzID0gKHNlbGYuZC5nZXRWYXIoJ0lNQUdFX1RZUEVERVBfJyArIG5vZGUsIFRydWUpIG9yICIiKQorICAgICAgICAgICAgYmFzZV9kZXBzID0gKHNlbGYuZC5nZXRWYXIoJ0lNQUdFX1RZUEVERVBfJyArIGJhc2VfdHlwZSwgVHJ1ZSkgb3IgIiIpCisgICAgICAgICAgICBpZiBkZXBzICE9ICIiIG9yIGJhc2VfZGVwcyAhPSAiIjoKKyAgICAgICAgICAgICAgICBncmFwaFtub2RlXSA9IGRlcHMKKworICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwcy5zcGxpdCgpICsgYmFzZV9kZXBzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkZXAgaW4gZ3JhcGg6CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRfbm9kZShkZXApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGdyYXBoW25vZGVdID0gIiIKKworICAgICAgICBmb3IgZnN0eXBlIGluIGltYWdlX2ZzdHlwZXM6CisgICAgICAgICAgICBhZGRfbm9kZShmc3R5cGUpCisKKyAgICAgICAgcmV0dXJuIGdyYXBoCisKKyAgICBkZWYgX2NsZWFuX2dyYXBoKHNlbGYpOgorICAgICAgICAjIExpdmUgYW5kIFZNREsvVkRJIGltYWdlcyB3aWxsIGJlIHByb2Nlc3NlZCB2aWEgaW5oZXJpdGluZworICAgICAgICAjIGJiY2xhc3MgYW5kIGRvZXMgbm90IGdldCBwcm9jZXNzZWQgaGVyZS4gUmVtb3ZlIHRoZW0gZnJvbSB0aGUgZnN0eXBlcworICAgICAgICAjIGdyYXBoLiBUaGVpciBkZXBlbmRlbmNpZXMgYXJlIGFscmVhZHkgYWRkZWQsIHNvIG5vIHdvcnJpZXMgaGVyZS4KKyAgICAgICAgcmVtb3ZlX2xpc3QgPSAoc2VsZi5kLmdldFZhcignSU1BR0VfVFlQRVNfTUFTS0VEJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgICAgICBmb3IgaXRlbSBpbiByZW1vdmVfbGlzdDoKKyAgICAgICAgICAgIHNlbGYuZ3JhcGgucG9wKGl0ZW0sIE5vbmUpCisKKyAgICBkZWYgX2ltYWdlX2Jhc2VfdHlwZShzZWxmLCB0eXBlKToKKyAgICAgICAgY3R5cGVzID0gc2VsZi5kLmdldFZhcignQ09NUFJFU1NJT05UWVBFUycsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgaWYgdHlwZSBpbiBbInZtZGsiLCAidmRpIiwgInFjb3cyIiwgImxpdmUiLCAiaXNvIiwgImhkZGltZyJdOgorICAgICAgICAgICAgdHlwZSA9ICJleHQ0IgorICAgICAgICBiYXNldHlwZSA9IHR5cGUKKyAgICAgICAgZm9yIGN0eXBlIGluIGN0eXBlczoKKyAgICAgICAgICAgIGlmIHR5cGUuZW5kc3dpdGgoIi4iICsgY3R5cGUpOgorICAgICAgICAgICAgICAgIGJhc2V0eXBlID0gdHlwZVs6LWxlbigiLiIgKyBjdHlwZSldCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICByZXR1cm4gYmFzZXR5cGUKKworICAgIGRlZiBfY29tcHV0ZV9kZXBlbmRlbmNpZXMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICByZXR1cm5zIGRpY3Qgb2JqZWN0IG9mIG5vZGVzIHdpdGggW25vX29mX2RlcGVuZHNfb24sIG5vX29mX2RlcGVuZGVkX2J5XQorICAgICAgICBmb3IgZWFjaCBub2RlCisgICAgICAgICIiIgorICAgICAgICBkZXBzX2FycmF5ID0gZGljdCgpCisgICAgICAgIGZvciBub2RlIGluIHNlbGYuZ3JhcGg6CisgICAgICAgICAgICBkZXBzX2FycmF5W25vZGVdID0gWzAsIDBdCisKKyAgICAgICAgZm9yIG5vZGUgaW4gc2VsZi5ncmFwaDoKKyAgICAgICAgICAgIGRlcHMgPSBzZWxmLmdyYXBoW25vZGVdLnNwbGl0KCkKKyAgICAgICAgICAgIGRlcHNfYXJyYXlbbm9kZV1bMF0gKz0gbGVuKGRlcHMpCisgICAgICAgICAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgICAgICAgICAgZGVwc19hcnJheVtkZXBdWzFdICs9IDEKKworICAgICAgICByZXR1cm4gZGVwc19hcnJheQorCisgICAgZGVmIF9zb3J0X2dyYXBoKHNlbGYpOgorICAgICAgICBzb3J0ZWRfbGlzdCA9IFtdCisgICAgICAgIGdyb3VwID0gW10KKyAgICAgICAgZm9yIG5vZGUgaW4gc2VsZi5ncmFwaDoKKyAgICAgICAgICAgIGlmIG5vZGUgbm90IGluIHNlbGYuZGVwc19hcnJheToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBkZXBlbmRzX29uID0gc2VsZi5kZXBzX2FycmF5W25vZGVdWzBdCisKKyAgICAgICAgICAgIGlmIGRlcGVuZHNfb24gPT0gMDoKKyAgICAgICAgICAgICAgICBncm91cC5hcHBlbmQobm9kZSkKKworICAgICAgICBpZiBsZW4oZ3JvdXApID09IDAgYW5kIGxlbihzZWxmLmRlcHNfYXJyYXkpICE9IDA6CisgICAgICAgICAgICBiYi5mYXRhbCgicG9zc2libGUgZnN0eXBlIGNpcmN1bGFyIGRlcGVuZGVuY3kuLi4iKQorCisgICAgICAgIHNvcnRlZF9saXN0LmFwcGVuZChncm91cCkKKworICAgICAgICAjIHJlbW92ZSBhZGRlZCBub2RlcyBmcm9tIGRlcHNfYXJyYXkKKyAgICAgICAgZm9yIGl0ZW0gaW4gZ3JvdXA6CisgICAgICAgICAgICBmb3Igbm9kZSBpbiBzZWxmLmdyYXBoOgorICAgICAgICAgICAgICAgIGlmIGl0ZW0gaW4gc2VsZi5ncmFwaFtub2RlXS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmRlcHNfYXJyYXlbbm9kZV1bMF0gLT0gMQorCisgICAgICAgICAgICBzZWxmLmRlcHNfYXJyYXkucG9wKGl0ZW0sIE5vbmUpCisKKyAgICAgICAgaWYgbGVuKHNlbGYuZGVwc19hcnJheSk6CisgICAgICAgICAgICAjIHJlY3Vyc2l2ZSBjYWxsLCB0byBmaW5kIHRoZSBuZXh0IGdyb3VwCisgICAgICAgICAgICBzb3J0ZWRfbGlzdCArPSBzZWxmLl9zb3J0X2dyYXBoKCkKKworICAgICAgICByZXR1cm4gc29ydGVkX2xpc3QKKworICAgIGRlZiBncm91cF9mc3R5cGVzKHNlbGYsIGltYWdlX2ZzdHlwZXMpOgorICAgICAgICBzZWxmLmdyYXBoID0gc2VsZi5fY29uc3RydWN0X2RlcF9ncmFwaChpbWFnZV9mc3R5cGVzKQorCisgICAgICAgIHNlbGYuX2NsZWFuX2dyYXBoKCkKKworICAgICAgICBzZWxmLmRlcHNfYXJyYXkgPSBzZWxmLl9jb21wdXRlX2RlcGVuZGVuY2llcygpCisKKyAgICAgICAgYWxsdHlwZXMgPSBbbm9kZSBmb3Igbm9kZSBpbiBzZWxmLmdyYXBoXQorCisgICAgICAgIHJldHVybiAoYWxsdHlwZXMsIHNlbGYuX3NvcnRfZ3JhcGgoKSkKKworCitjbGFzcyBJbWFnZShJbWFnZURlcEdyYXBoKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisgICAgICAgIHNlbGYuZCA9IGQKKworICAgICAgICBzdXBlcihJbWFnZSwgc2VsZikuX19pbml0X18oZCkKKworICAgIGRlZiBfZ2V0X3Jvb3Rmc19zaXplKHNlbGYpOgorICAgICAgICAiIiJjb21wdXRlIHRoZSByb290ZnMgc2l6ZSIiIgorICAgICAgICByb290ZnNfYWxpZ25tZW50ID0gaW50KHNlbGYuZC5nZXRWYXIoJ0lNQUdFX1JPT1RGU19BTElHTk1FTlQnLCBUcnVlKSkKKyAgICAgICAgb3ZlcmhlYWRfZmFjdG9yID0gZmxvYXQoc2VsZi5kLmdldFZhcignSU1BR0VfT1ZFUkhFQURfRkFDVE9SJywgVHJ1ZSkpCisgICAgICAgIHJvb3Rmc19yZXFfc2l6ZSA9IGludChzZWxmLmQuZ2V0VmFyKCdJTUFHRV9ST09URlNfU0laRScsIFRydWUpKQorICAgICAgICByb290ZnNfZXh0cmFfc3BhY2UgPSBldmFsKHNlbGYuZC5nZXRWYXIoJ0lNQUdFX1JPT1RGU19FWFRSQV9TUEFDRScsIFRydWUpKQorICAgICAgICByb290ZnNfbWF4c2l6ZSA9IHNlbGYuZC5nZXRWYXIoJ0lNQUdFX1JPT1RGU19NQVhTSVpFJywgVHJ1ZSkKKworICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ2R1JywgJy1rcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCBUcnVlKV0pCisgICAgICAgIHNpemVfa2IgPSBpbnQob3V0cHV0LnNwbGl0KClbMF0pCisgICAgICAgIGJhc2Vfc2l6ZSA9IHNpemVfa2IgKiBvdmVyaGVhZF9mYWN0b3IKKyAgICAgICAgYmFzZV9zaXplID0gKGJhc2Vfc2l6ZSwgcm9vdGZzX3JlcV9zaXplKVtiYXNlX3NpemUgPCByb290ZnNfcmVxX3NpemVdICsgXAorICAgICAgICAgICAgcm9vdGZzX2V4dHJhX3NwYWNlCisKKyAgICAgICAgaWYgYmFzZV9zaXplICE9IGludChiYXNlX3NpemUpOgorICAgICAgICAgICAgYmFzZV9zaXplID0gaW50KGJhc2Vfc2l6ZSArIDEpCisKKyAgICAgICAgYmFzZV9zaXplICs9IHJvb3Rmc19hbGlnbm1lbnQgLSAxCisgICAgICAgIGJhc2Vfc2l6ZSAtPSBiYXNlX3NpemUgJSByb290ZnNfYWxpZ25tZW50CisKKyAgICAgICAgIyBDaGVjayB0aGUgcm9vdGZzIHNpemUgYWdhaW5zdCBJTUFHRV9ST09URlNfTUFYU0laRSAoaWYgc2V0KQorICAgICAgICBpZiByb290ZnNfbWF4c2l6ZToKKyAgICAgICAgICAgIHJvb3Rmc19tYXhzaXplX2ludCA9IGludChyb290ZnNfbWF4c2l6ZSkKKyAgICAgICAgICAgIGlmIGJhc2Vfc2l6ZSA+IHJvb3Rmc19tYXhzaXplX2ludDoKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiVGhlIHJvb3RmcyBzaXplICVkKEspIG92ZXJyaWRlcyB0aGUgbWF4IHNpemUgJWQoSykiICUgXAorICAgICAgICAgICAgICAgICAgICAoYmFzZV9zaXplLCByb290ZnNfbWF4c2l6ZV9pbnQpKQorCisgICAgICAgIHJldHVybiBiYXNlX3NpemUKKworICAgIGRlZiBfY3JlYXRlX3N5bWxpbmtzKHNlbGYsIHN1YmltYWdlcyk6CisgICAgICAgICIiImNyZWF0ZSBzeW1saW5rcyB0byB0aGUgbmV3bHkgY3JlYXRlZCBpbWFnZSIiIgorICAgICAgICBkZXBsb3lfZGlyID0gc2VsZi5kLmdldFZhcignREVQTE9ZX0RJUl9JTUFHRScsIFRydWUpCisgICAgICAgIGltZ19uYW1lID0gc2VsZi5kLmdldFZhcignSU1BR0VfTkFNRScsIFRydWUpCisgICAgICAgIGxpbmtfbmFtZSA9IHNlbGYuZC5nZXRWYXIoJ0lNQUdFX0xJTktfTkFNRScsIFRydWUpCisgICAgICAgIG1hbmlmZXN0X25hbWUgPSBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9NQU5JRkVTVCcsIFRydWUpCisKKyAgICAgICAgb3MuY2hkaXIoZGVwbG95X2RpcikKKworICAgICAgICBpZiBsaW5rX25hbWU6CisgICAgICAgICAgICBmb3IgdHlwZSBpbiBzdWJpbWFnZXM6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoaW1nX25hbWUgKyAiLnJvb3Rmcy4iICsgdHlwZSk6CisgICAgICAgICAgICAgICAgICAgIGRzdCA9IGxpbmtfbmFtZSArICIuIiArIHR5cGUKKyAgICAgICAgICAgICAgICAgICAgc3JjID0gaW1nX25hbWUgKyAiLnJvb3Rmcy4iICsgdHlwZQorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJDcmVhdGluZyBzeW1saW5rOiAlcyAtPiAlcyIgJSAoZHN0LCBzcmMpKQorICAgICAgICAgICAgICAgICAgICBvcy5zeW1saW5rKHNyYywgZHN0KQorCisgICAgICAgICAgICBpZiBtYW5pZmVzdF9uYW1lIGlzIG5vdCBOb25lIGFuZCBcCisgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguZXhpc3RzKG1hbmlmZXN0X25hbWUpIGFuZCBcCisgICAgICAgICAgICAgICAgICAgIG5vdCBvcy5wYXRoLmV4aXN0cyhsaW5rX25hbWUgKyAiLm1hbmlmZXN0Iik6CisgICAgICAgICAgICAgICAgb3Muc3ltbGluayhvcy5wYXRoLmJhc2VuYW1lKG1hbmlmZXN0X25hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua19uYW1lICsgIi5tYW5pZmVzdCIpCisKKyAgICBkZWYgX3JlbW92ZV9vbGRfc3ltbGlua3Moc2VsZik6CisgICAgICAgICIiInJlbW92ZSB0aGUgc3ltbGlua3MgdG8gb2xkIGJpbmFyaWVzIiIiCisKKyAgICAgICAgaWYgc2VsZi5kLmdldFZhcignSU1BR0VfTElOS19OQU1FJywgVHJ1ZSk6CisgICAgICAgICAgICBkZXBsb3lfZGlyID0gc2VsZi5kLmdldFZhcignREVQTE9ZX0RJUl9JTUFHRScsIFRydWUpCisgICAgICAgICAgICBmb3IgaW1nIGluIG9zLmxpc3RkaXIoZGVwbG95X2Rpcik6CisgICAgICAgICAgICAgICAgaWYgaW1nLmZpbmQoc2VsZi5kLmdldFZhcignSU1BR0VfTElOS19OQU1FJywgVHJ1ZSkpID09IDA6CisgICAgICAgICAgICAgICAgICAgIGltZyA9IG9zLnBhdGguam9pbihkZXBsb3lfZGlyLCBpbWcpCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGltZyk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmQuZ2V0VmFyKCdSTV9PTERfSU1BR0UnLCBUcnVlKSA9PSAiMSIgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5leGlzdHMob3MucGF0aC5yZWFscGF0aChpbWcpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5yZWFscGF0aChpbWcpKQorCisgICAgICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoaW1nKQorCisgICAgIiIiCisgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGp1c3QgZmlsdGVyIG91dCB0aGUgY29tcHJlc3NlZCBpbWFnZSB0eXBlcyBmcm9tIHRoZQorICAgIGZzdHlwZSBncm91cHMgcmV0dXJuaW5nIGEgKGZpbHRlcmVkX2ZzdHlwZV9ncm91cHMsIGNpbWFnZXMpIHR1cGxlLgorICAgICIiIgorICAgIGRlZiBfZmlsdGVyX291dF9jb21tcHJlc3NlZChzZWxmLCBmc3R5cGVfZ3JvdXBzKToKKyAgICAgICAgY3R5cGVzID0gc2VsZi5kLmdldFZhcignQ09NUFJFU1NJT05UWVBFUycsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgY2ltYWdlcyA9IHt9CisKKyAgICAgICAgZmlsdGVyZWRfZ3JvdXBzID0gW10KKyAgICAgICAgZm9yIGdyb3VwIGluIGZzdHlwZV9ncm91cHM6CisgICAgICAgICAgICBmaWx0ZXJlZF9ncm91cCA9IFtdCisgICAgICAgICAgICBmb3IgdHlwZSBpbiBncm91cDoKKyAgICAgICAgICAgICAgICBiYXNldHlwZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBmb3IgY3R5cGUgaW4gY3R5cGVzOgorICAgICAgICAgICAgICAgICAgICBpZiB0eXBlLmVuZHN3aXRoKCIuIiArIGN0eXBlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2V0eXBlID0gdHlwZVs6LWxlbigiLiIgKyBjdHlwZSldCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBiYXNldHlwZSBub3QgaW4gZmlsdGVyZWRfZ3JvdXA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRfZ3JvdXAuYXBwZW5kKGJhc2V0eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYmFzZXR5cGUgbm90IGluIGNpbWFnZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ltYWdlc1tiYXNldHlwZV0gPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgY3R5cGUgbm90IGluIGNpbWFnZXNbYmFzZXR5cGVdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpbWFnZXNbYmFzZXR5cGVdLmFwcGVuZChjdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgbm90IGJhc2V0eXBlIGFuZCB0eXBlIG5vdCBpbiBmaWx0ZXJlZF9ncm91cDoKKyAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRfZ3JvdXAuYXBwZW5kKHR5cGUpCisKKyAgICAgICAgICAgIGZpbHRlcmVkX2dyb3Vwcy5hcHBlbmQoZmlsdGVyZWRfZ3JvdXApCisKKyAgICAgICAgcmV0dXJuIChmaWx0ZXJlZF9ncm91cHMsIGNpbWFnZXMpCisKKyAgICBkZWYgX2dldF9pbWFnZV90eXBlcyhzZWxmKToKKyAgICAgICAgIiIicmV0dXJucyBhICh0eXBlcywgY2ltYWdlcykgdHVwbGUiIiIKKworICAgICAgICBhbGx0eXBlcywgZnN0eXBlX2dyb3VwcyA9IHNlbGYuZ3JvdXBfZnN0eXBlcyhzZWxmLmQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJywgVHJ1ZSkuc3BsaXQoKSkKKworICAgICAgICBmaWx0ZXJlZF9ncm91cHMsIGNpbWFnZXMgPSBzZWxmLl9maWx0ZXJfb3V0X2NvbW1wcmVzc2VkKGZzdHlwZV9ncm91cHMpCisKKyAgICAgICAgcmV0dXJuIChhbGx0eXBlcywgZmlsdGVyZWRfZ3JvdXBzLCBjaW1hZ2VzKQorCisgICAgZGVmIF93cml0ZV9zY3JpcHQoc2VsZiwgdHlwZSwgY21kcyk6CisgICAgICAgIHRlbXBkaXIgPSBzZWxmLmQuZ2V0VmFyKCdUJywgVHJ1ZSkKKyAgICAgICAgc2NyaXB0X25hbWUgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgImNyZWF0ZV9pbWFnZS4iICsgdHlwZSkKKyAgICAgICAgcm9vdGZzX3NpemUgPSBzZWxmLl9nZXRfcm9vdGZzX3NpemUoKQorCisgICAgICAgIHNlbGYuZC5zZXRWYXIoJ2ltZ19jcmVhdGlvbl9mdW5jJywgJ1xuJy5qb2luKGNtZHMpKQorICAgICAgICBzZWxmLmQuc2V0VmFyRmxhZygnaW1nX2NyZWF0aW9uX2Z1bmMnLCAnZnVuYycsIDEpCisgICAgICAgIHNlbGYuZC5zZXRWYXJGbGFnKCdpbWdfY3JlYXRpb25fZnVuYycsICdmYWtlcm9vdCcsIDEpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoJ1JPT1RGU19TSVpFJywgc3RyKHJvb3Rmc19zaXplKSkKKworICAgICAgICB3aXRoIG9wZW4oc2NyaXB0X25hbWUsICJ3KyIpIGFzIHNjcmlwdDoKKyAgICAgICAgICAgIHNjcmlwdC53cml0ZSgiJXMiICUgYmIuYnVpbGQuc2hlbGxfdHJhcF9jb2RlKCkpCisgICAgICAgICAgICBzY3JpcHQud3JpdGUoImV4cG9ydCBST09URlNfU0laRT0lZFxuIiAlIHJvb3Rmc19zaXplKQorICAgICAgICAgICAgYmIuZGF0YS5lbWl0X2Z1bmMoJ2ltZ19jcmVhdGlvbl9mdW5jJywgc2NyaXB0LCBzZWxmLmQpCisgICAgICAgICAgICBzY3JpcHQud3JpdGUoImltZ19jcmVhdGlvbl9mdW5jXG4iKQorCisgICAgICAgIG9zLmNobW9kKHNjcmlwdF9uYW1lLCAwNzc1KQorCisgICAgICAgIHJldHVybiBzY3JpcHRfbmFtZQorCisgICAgZGVmIF9nZXRfaW1hZ2VjbWRzKHNlbGYpOgorICAgICAgICBvbGRfb3ZlcnJpZGVzID0gc2VsZi5kLmdldFZhcignT1ZFUlJJREVTJywgMCkKKworICAgICAgICBhbGx0eXBlcywgZnN0eXBlX2dyb3VwcywgY2ltYWdlcyA9IHNlbGYuX2dldF9pbWFnZV90eXBlcygpCisKKyAgICAgICAgaW1hZ2VfY21kX2dyb3VwcyA9IFtdCisKKyAgICAgICAgYmIubm90ZSgiVGhlIGltYWdlIGNyZWF0aW9uIGdyb3VwcyBhcmU6ICVzIiAlIHN0cihmc3R5cGVfZ3JvdXBzKSkKKyAgICAgICAgZm9yIGZzdHlwZV9ncm91cCBpbiBmc3R5cGVfZ3JvdXBzOgorICAgICAgICAgICAgaW1hZ2VfY21kcyA9IFtdCisgICAgICAgICAgICBmb3IgdHlwZSBpbiBmc3R5cGVfZ3JvdXA6CisgICAgICAgICAgICAgICAgY21kcyA9IFtdCisgICAgICAgICAgICAgICAgc3ViaW1hZ2VzID0gW10KKworICAgICAgICAgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShzZWxmLmQpCisgICAgICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgJyVzOiVzJyAlICh0eXBlLCBvbGRfb3ZlcnJpZGVzKSkKKyAgICAgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCd0eXBlJywgdHlwZSkKKworICAgICAgICAgICAgICAgIGltYWdlX2NtZCA9IGxvY2FsZGF0YS5nZXRWYXIoIklNQUdFX0NNRCIsIFRydWUpCisgICAgICAgICAgICAgICAgaWYgaW1hZ2VfY21kOgorICAgICAgICAgICAgICAgICAgICBjbWRzLmFwcGVuZCgiXHQiICsgaW1hZ2VfY21kKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJObyBJTUFHRV9DTUQgZGVmaW5lZCBmb3IgSU1BR0VfRlNUWVBFUyBlbnRyeSAnJXMnIC0gcG9zc2libHkgaW52YWxpZCB0eXBlIG5hbWUgb3IgbWlzc2luZyBzdXBwb3J0IGNsYXNzIiAlIHR5cGUpCisgICAgICAgICAgICAgICAgY21kcy5hcHBlbmQobG9jYWxkYXRhLmV4cGFuZCgiXHRjZCAke0RFUExPWV9ESVJfSU1BR0V9IikpCisKKyAgICAgICAgICAgICAgICBpZiB0eXBlIGluIGNpbWFnZXM6CisgICAgICAgICAgICAgICAgICAgIGZvciBjdHlwZSBpbiBjaW1hZ2VzW3R5cGVdOgorICAgICAgICAgICAgICAgICAgICAgICAgY21kcy5hcHBlbmQoIlx0IiArIGxvY2FsZGF0YS5nZXRWYXIoIkNPTVBSRVNTX0NNRF8iICsgY3R5cGUsIFRydWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgc3ViaW1hZ2VzLmFwcGVuZCh0eXBlICsgIi4iICsgY3R5cGUpCisKKyAgICAgICAgICAgICAgICBpZiB0eXBlIG5vdCBpbiBhbGx0eXBlczoKKyAgICAgICAgICAgICAgICAgICAgY21kcy5hcHBlbmQobG9jYWxkYXRhLmV4cGFuZCgiXHRybSAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9IikpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc3ViaW1hZ2VzLmFwcGVuZCh0eXBlKQorCisgICAgICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBzZWxmLl93cml0ZV9zY3JpcHQodHlwZSwgY21kcykKKworICAgICAgICAgICAgICAgIGltYWdlX2NtZHMuYXBwZW5kKCh0eXBlLCBzdWJpbWFnZXMsIHNjcmlwdF9uYW1lKSkKKworICAgICAgICAgICAgaW1hZ2VfY21kX2dyb3Vwcy5hcHBlbmQoaW1hZ2VfY21kcykKKworICAgICAgICByZXR1cm4gaW1hZ2VfY21kX2dyb3VwcworCisgICAgZGVmIF93cml0ZV93aWNfZW52KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV3JpdGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHVzZWQgYnkgd2ljCisgICAgICAgIHRvIHRtcC9zeXNyb290cy88bWFjaGluZT4vaW1nZGF0YS88aW1hZ2U+LmVudgorICAgICAgICAiIiIKKyAgICAgICAgc3RkaXIgPSBzZWxmLmQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9UQVJHRVQnLCBUcnVlKQorICAgICAgICBvdXRkaXIgPSBvcy5wYXRoLmpvaW4oc3RkaXIsICdpbWdkYXRhJykKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG91dGRpcik6CisgICAgICAgICAgICBvcy5tYWtlZGlycyhvdXRkaXIpCisgICAgICAgIGJhc2VuYW1lID0gc2VsZi5kLmdldFZhcignSU1BR0VfQkFTRU5BTUUnLCBUcnVlKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKG91dGRpciwgYmFzZW5hbWUpICsgJy5lbnYnLCAndycpIGFzIGVudmY6CisgICAgICAgICAgICBmb3IgdmFyIGluIHNlbGYuZC5nZXRWYXIoJ1dJQ1ZBUlMnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZi5kLmdldFZhcih2YXIsIFRydWUpCisgICAgICAgICAgICAgICAgaWYgdmFsdWU6CisgICAgICAgICAgICAgICAgICAgIGVudmYud3JpdGUoJyVzPSIlcyJcbicgJSAodmFyLCB2YWx1ZS5zdHJpcCgpKSkKKworICAgIGRlZiBjcmVhdGUoc2VsZik6CisgICAgICAgIGJiLm5vdGUoIiMjIyMjIyBHZW5lcmF0ZSBpbWFnZXMgIyMjIyMjIyIpCisgICAgICAgIHByZV9wcm9jZXNzX2NtZHMgPSBzZWxmLmQuZ2V0VmFyKCJJTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQiLCBUcnVlKQorICAgICAgICBwb3N0X3Byb2Nlc3NfY21kcyA9IHNlbGYuZC5nZXRWYXIoIklNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkQiLCBUcnVlKQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIHByZV9wcm9jZXNzX2NtZHMpCisKKyAgICAgICAgc2VsZi5fcmVtb3ZlX29sZF9zeW1saW5rcygpCisKKyAgICAgICAgaW1hZ2VfY21kX2dyb3VwcyA9IHNlbGYuX2dldF9pbWFnZWNtZHMoKQorCisgICAgICAgIHNlbGYuX3dyaXRlX3dpY19lbnYoKQorCisgICAgICAgIGZvciBpbWFnZV9jbWRzIGluIGltYWdlX2NtZF9ncm91cHM6CisgICAgICAgICAgICAjIGNyZWF0ZSB0aGUgaW1hZ2VzIGluIHBhcmFsbGVsCisgICAgICAgICAgICBucHJvYyA9IG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKQorICAgICAgICAgICAgcG9vbCA9IGJiLnV0aWxzLm11bHRpcHJvY2Vzc2luZ3Bvb2wobnByb2MpCisgICAgICAgICAgICByZXN1bHRzID0gbGlzdChwb29sLmltYXAoZ2VuZXJhdGVfaW1hZ2UsIGltYWdlX2NtZHMpKQorICAgICAgICAgICAgcG9vbC5jbG9zZSgpCisgICAgICAgICAgICBwb29sLmpvaW4oKQorCisgICAgICAgICAgICBmb3IgcmVzdWx0IGluIHJlc3VsdHM6CisgICAgICAgICAgICAgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbChyZXN1bHQpCisKKyAgICAgICAgICAgIGZvciBpbWFnZV90eXBlLCBzdWJpbWFnZXMsIHNjcmlwdCBpbiBpbWFnZV9jbWRzOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoIkNyZWF0aW5nIHN5bWxpbmtzIGZvciAlcyBpbWFnZSAuLi4iICUgaW1hZ2VfdHlwZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9jcmVhdGVfc3ltbGlua3Moc3ViaW1hZ2VzKQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIHBvc3RfcHJvY2Vzc19jbWRzKQorCisKK2RlZiBjcmVhdGVfaW1hZ2UoZCk6CisgICAgSW1hZ2UoZCkuY3JlYXRlKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICAiIiIKKyAgICBJbWFnZSBjcmVhdGlvbiBjYW4gYmUgY2FsbGVkIGluZGVwZW5kZW50IGZyb20gYml0YmFrZSBlbnZpcm9ubWVudC4KKyAgICAiIiIKKyAgICAiIiIKKyAgICBUQkQKKyAgICAiIiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvbGljZW5zZS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvbGljZW5zZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGY2NjFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9saWNlbnNlLnB5CkBAIC0wLDAgKzEsMjE3IEBACisjIHZpOnN0cz00OnN3PTQ6ZXQKKyIiIkNvZGUgZm9yIHBhcnNpbmcgT3BlbkVtYmVkZGVkIGxpY2Vuc2Ugc3RyaW5ncyIiIgorCitpbXBvcnQgYXN0CitpbXBvcnQgcmUKK2Zyb20gZm5tYXRjaCBpbXBvcnQgZm5tYXRjaGNhc2UgYXMgZm5tYXRjaAorCitkZWYgbGljZW5zZV9vayhsaWNlbnNlLCBkb250X3dhbnRfbGljZW5zZXMpOgorICAgICIiIiBSZXR1cm4gRmFsc2UgaWYgTGljZW5zZSBleGlzdCBpbiBkb250X3dhbnRfbGljZW5zZXMgZWxzZSBUcnVlICIiIgorICAgIGZvciBkd2wgaW4gZG9udF93YW50X2xpY2Vuc2VzOgorICAgICAgICAjIElmIHlvdSB3YW50IHRvIGV4Y2x1ZGUgbGljZW5zZSBuYW1lZCBnZW5lcmljYWxseSAnWCcsIHdlCisgICAgICAgICMgc3VyZWx5IHdhbnQgdG8gZXhjbHVkZSAnWCsnIGFzIHdlbGwuICBJbiBjb25zZXF1ZW5jZSwgd2UKKyAgICAgICAgIyB3aWxsIGV4Y2x1ZGUgYSB0cmFpbGluZyAnKycgY2hhcmFjdGVyIGZyb20gTElDRU5TRSBpbgorICAgICAgICAjIGNhc2UgSU5DT01QQVRJQkxFX0xJQ0VOU0UgaXMgbm90IGEgJ1grJyBsaWNlbnNlLgorICAgICAgICBsaWMgPSBsaWNlbnNlCisgICAgICAgIGlmIG5vdCByZS5zZWFyY2goJ1wrJCcsIGR3bCk6CisgICAgICAgICAgICBsaWMgPSByZS5zdWIoJ1wrJywgJycsIGxpY2Vuc2UpCisgICAgICAgIGlmIGZubWF0Y2gobGljLCBkd2wpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIFRydWUKKworY2xhc3MgTGljZW5zZUVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitjbGFzcyBMaWNlbnNlU3ludGF4RXJyb3IoTGljZW5zZUVycm9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGljZW5zZXN0ciwgZXhjKToKKyAgICAgICAgc2VsZi5saWNlbnNlc3RyID0gbGljZW5zZXN0cgorICAgICAgICBzZWxmLmV4YyA9IGV4YworICAgICAgICBMaWNlbnNlRXJyb3IuX19pbml0X18oc2VsZikKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gImVycm9yIGluICclcyc6ICVzIiAlIChzZWxmLmxpY2Vuc2VzdHIsIHNlbGYuZXhjKQorCitjbGFzcyBJbnZhbGlkTGljZW5zZShMaWNlbnNlRXJyb3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaWNlbnNlKToKKyAgICAgICAgc2VsZi5saWNlbnNlID0gbGljZW5zZQorICAgICAgICBMaWNlbnNlRXJyb3IuX19pbml0X18oc2VsZikKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gImludmFsaWQgY2hhcmFjdGVycyBpbiBsaWNlbnNlICclcyciICUgc2VsZi5saWNlbnNlCisKK2xpY2Vuc2Vfb3BlcmF0b3JfY2hhcnMgPSAnJnwoKSAnCitsaWNlbnNlX29wZXJhdG9yID0gcmUuY29tcGlsZSgnKFsnICsgbGljZW5zZV9vcGVyYXRvcl9jaGFycyArICddKScpCitsaWNlbnNlX3BhdHRlcm4gPSByZS5jb21waWxlKCdbYS16QS1aMC05LitfXC1dKyQnKQorCitjbGFzcyBMaWNlbnNlVmlzaXRvcihhc3QuTm9kZVZpc2l0b3IpOgorICAgICIiIkdldCBlbGVtZW50cyBiYXNlZCBvbiBPcGVuRW1iZWRkZWQgbGljZW5zZSBzdHJpbmdzIiIiCisgICAgZGVmIGdldF9lbGVtZW50cyhzZWxmLCBsaWNlbnNlc3RyKToKKyAgICAgICAgbmV3X2VsZW1lbnRzID0gW10KKyAgICAgICAgZWxlbWVudHMgPSBmaWx0ZXIobGFtYmRhIHg6IHguc3RyaXAoKSwgbGljZW5zZV9vcGVyYXRvci5zcGxpdChsaWNlbnNlc3RyKSkKKyAgICAgICAgZm9yIHBvcywgZWxlbWVudCBpbiBlbnVtZXJhdGUoZWxlbWVudHMpOgorICAgICAgICAgICAgaWYgbGljZW5zZV9wYXR0ZXJuLm1hdGNoKGVsZW1lbnQpOgorICAgICAgICAgICAgICAgIGlmIHBvcyA+IDAgYW5kIGxpY2Vuc2VfcGF0dGVybi5tYXRjaChlbGVtZW50c1twb3MtMV0pOgorICAgICAgICAgICAgICAgICAgICBuZXdfZWxlbWVudHMuYXBwZW5kKCcmJykKKyAgICAgICAgICAgICAgICBlbGVtZW50ID0gJyInICsgZWxlbWVudCArICciJworICAgICAgICAgICAgZWxpZiBub3QgbGljZW5zZV9vcGVyYXRvci5tYXRjaChlbGVtZW50KToKKyAgICAgICAgICAgICAgICByYWlzZSBJbnZhbGlkTGljZW5zZShlbGVtZW50KQorICAgICAgICAgICAgbmV3X2VsZW1lbnRzLmFwcGVuZChlbGVtZW50KQorCisgICAgICAgIHJldHVybiBuZXdfZWxlbWVudHMKKworICAgICIiIlN5bnRheCB0cmVlIHZpc2l0b3Igd2hpY2ggY2FuIGFjY2VwdCBlbGVtZW50cyBwcmV2aW91c2x5IGdlbmVyYXRlZCB3aXRoCisgICAgT3BlbkVtYmVkZGVkIGxpY2Vuc2Ugc3RyaW5nIiIiCisgICAgZGVmIHZpc2l0X2VsZW1lbnRzKHNlbGYsIGVsZW1lbnRzKToKKyAgICAgICAgc2VsZi52aXNpdChhc3QucGFyc2UoJyAnLmpvaW4oZWxlbWVudHMpKSkKKworICAgICIiIlN5bnRheCB0cmVlIHZpc2l0b3Igd2hpY2ggY2FuIGFjY2VwdCBPcGVuRW1iZWRkZWQgbGljZW5zZSBzdHJpbmdzIiIiCisgICAgZGVmIHZpc2l0X3N0cmluZyhzZWxmLCBsaWNlbnNlc3RyKToKKyAgICAgICAgc2VsZi52aXNpdF9lbGVtZW50cyhzZWxmLmdldF9lbGVtZW50cyhsaWNlbnNlc3RyKSkKKworY2xhc3MgRmxhdHRlblZpc2l0b3IoTGljZW5zZVZpc2l0b3IpOgorICAgICIiIkZsYXR0ZW4gYSBsaWNlbnNlIHRyZWUgKHBhcnNlZCBmcm9tIGEgc3RyaW5nKSBieSBzZWxlY3Rpbmcgb25lIG9mIGVhY2gKKyAgICBzZXQgb2YgT1Igb3B0aW9ucywgaW4gdGhlIHdheSB0aGUgdXNlciBzcGVjaWZpZXMiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2hvb3NlX2xpY2Vuc2VzKToKKyAgICAgICAgc2VsZi5jaG9vc2VfbGljZW5zZXMgPSBjaG9vc2VfbGljZW5zZXMKKyAgICAgICAgc2VsZi5saWNlbnNlcyA9IFtdCisgICAgICAgIExpY2Vuc2VWaXNpdG9yLl9faW5pdF9fKHNlbGYpCisKKyAgICBkZWYgdmlzaXRfU3RyKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLmxpY2Vuc2VzLmFwcGVuZChub2RlLnMpCisKKyAgICBkZWYgdmlzaXRfQmluT3Aoc2VsZiwgbm9kZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZS5vcCwgYXN0LkJpdE9yKToKKyAgICAgICAgICAgIGxlZnQgPSBGbGF0dGVuVmlzaXRvcihzZWxmLmNob29zZV9saWNlbnNlcykKKyAgICAgICAgICAgIGxlZnQudmlzaXQobm9kZS5sZWZ0KQorCisgICAgICAgICAgICByaWdodCA9IEZsYXR0ZW5WaXNpdG9yKHNlbGYuY2hvb3NlX2xpY2Vuc2VzKQorICAgICAgICAgICAgcmlnaHQudmlzaXQobm9kZS5yaWdodCkKKworICAgICAgICAgICAgc2VsZWN0ZWQgPSBzZWxmLmNob29zZV9saWNlbnNlcyhsZWZ0LmxpY2Vuc2VzLCByaWdodC5saWNlbnNlcykKKyAgICAgICAgICAgIHNlbGYubGljZW5zZXMuZXh0ZW5kKHNlbGVjdGVkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5nZW5lcmljX3Zpc2l0KG5vZGUpCisKK2RlZiBmbGF0dGVuZWRfbGljZW5zZXMobGljZW5zZXN0ciwgY2hvb3NlX2xpY2Vuc2VzKToKKyAgICAiIiJHaXZlbiBhIGxpY2Vuc2Ugc3RyaW5nIGFuZCBjaG9vc2VfbGljZW5zZXMgZnVuY3Rpb24sIHJldHVybiBhIGZsYXQgbGlzdCBvZiBsaWNlbnNlcyIiIgorICAgIGZsYXR0ZW4gPSBGbGF0dGVuVmlzaXRvcihjaG9vc2VfbGljZW5zZXMpCisgICAgdHJ5OgorICAgICAgICBmbGF0dGVuLnZpc2l0X3N0cmluZyhsaWNlbnNlc3RyKQorICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBleGM6CisgICAgICAgIHJhaXNlIExpY2Vuc2VTeW50YXhFcnJvcihsaWNlbnNlc3RyLCBleGMpCisgICAgcmV0dXJuIGZsYXR0ZW4ubGljZW5zZXMKKworZGVmIGlzX2luY2x1ZGVkKGxpY2Vuc2VzdHIsIHdoaXRlbGlzdD1Ob25lLCBibGFja2xpc3Q9Tm9uZSk6CisgICAgIiIiR2l2ZW4gYSBsaWNlbnNlIHN0cmluZyBhbmQgd2hpdGVsaXN0IGFuZCBibGFja2xpc3QsIGRldGVybWluZSBpZiB0aGUKKyAgICBsaWNlbnNlIHN0cmluZyBtYXRjaGVzIHRoZSB3aGl0ZWxpc3QgYW5kIGRvZXMgbm90IG1hdGNoIHRoZSBibGFja2xpc3QuCisKKyAgICBSZXR1cm5zIGEgdHVwbGUgaG9sZGluZyB0aGUgYm9vbGVhbiBzdGF0ZSBhbmQgYSBsaXN0IG9mIHRoZSBhcHBsaWNhYmxlCisgICAgbGljZW5zZXMgd2hpY2ggd2VyZSBleGNsdWRlZCAob3IgTm9uZSwgaWYgdGhlIHN0YXRlIGlzIFRydWUpCisgICAgIiIiCisKKyAgICBkZWYgaW5jbHVkZV9saWNlbnNlKGxpY2Vuc2UpOgorICAgICAgICByZXR1cm4gYW55KGZubWF0Y2gobGljZW5zZSwgcGF0dGVybikgZm9yIHBhdHRlcm4gaW4gd2hpdGVsaXN0KQorCisgICAgZGVmIGV4Y2x1ZGVfbGljZW5zZShsaWNlbnNlKToKKyAgICAgICAgcmV0dXJuIGFueShmbm1hdGNoKGxpY2Vuc2UsIHBhdHRlcm4pIGZvciBwYXR0ZXJuIGluIGJsYWNrbGlzdCkKKworICAgIGRlZiBjaG9vc2VfbGljZW5zZXMoYWxwaGEsIGJldGEpOgorICAgICAgICAiIiJTZWxlY3QgdGhlIG9wdGlvbiBpbiBhbiBPUiB3aGljaCBpcyB0aGUgJ2Jlc3QnIChoYXMgdGhlIG1vc3QKKyAgICAgICAgaW5jbHVkZWQgbGljZW5zZXMpLiIiIgorICAgICAgICBhbHBoYV93ZWlnaHQgPSBsZW4oZmlsdGVyKGluY2x1ZGVfbGljZW5zZSwgYWxwaGEpKQorICAgICAgICBiZXRhX3dlaWdodCA9IGxlbihmaWx0ZXIoaW5jbHVkZV9saWNlbnNlLCBiZXRhKSkKKyAgICAgICAgaWYgYWxwaGFfd2VpZ2h0ID4gYmV0YV93ZWlnaHQ6CisgICAgICAgICAgICByZXR1cm4gYWxwaGEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBiZXRhCisKKyAgICBpZiBub3Qgd2hpdGVsaXN0OgorICAgICAgICB3aGl0ZWxpc3QgPSBbJyonXQorCisgICAgaWYgbm90IGJsYWNrbGlzdDoKKyAgICAgICAgYmxhY2tsaXN0ID0gW10KKworICAgIGxpY2Vuc2VzID0gZmxhdHRlbmVkX2xpY2Vuc2VzKGxpY2Vuc2VzdHIsIGNob29zZV9saWNlbnNlcykKKyAgICBleGNsdWRlZCA9IGZpbHRlcihsYW1iZGEgbGljOiBleGNsdWRlX2xpY2Vuc2UobGljKSwgbGljZW5zZXMpCisgICAgaW5jbHVkZWQgPSBmaWx0ZXIobGFtYmRhIGxpYzogaW5jbHVkZV9saWNlbnNlKGxpYyksIGxpY2Vuc2VzKQorICAgIGlmIGV4Y2x1ZGVkOgorICAgICAgICByZXR1cm4gRmFsc2UsIGV4Y2x1ZGVkCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIFRydWUsIGluY2x1ZGVkCisKK2NsYXNzIE1hbmlmZXN0VmlzaXRvcihMaWNlbnNlVmlzaXRvcik6CisgICAgIiIiV2FsayBsaWNlbnNlIHRyZWUgKHBhcnNlZCBmcm9tIGEgc3RyaW5nKSByZW1vdmluZyB0aGUgaW5jb21wYXRpYmxlCisgICAgbGljZW5zZXMgc3BlY2lmaWVkIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRvbnRfd2FudF9saWNlbnNlcywgY2Fub25pY2FsX2xpY2Vuc2UsIGQpOgorICAgICAgICBzZWxmLl9kb250X3dhbnRfbGljZW5zZXMgPSBkb250X3dhbnRfbGljZW5zZXMKKyAgICAgICAgc2VsZi5fY2Fub25pY2FsX2xpY2Vuc2UgPSBjYW5vbmljYWxfbGljZW5zZQorICAgICAgICBzZWxmLl9kID0gZAorICAgICAgICBzZWxmLl9vcGVyYXRvcnMgPSBbXQorCisgICAgICAgIHNlbGYubGljZW5zZXMgPSBbXQorICAgICAgICBzZWxmLmxpY2Vuc2VzdHIgPSAnJworCisgICAgICAgIExpY2Vuc2VWaXNpdG9yLl9faW5pdF9fKHNlbGYpCisKKyAgICBkZWYgdmlzaXQoc2VsZiwgbm9kZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZSwgYXN0LlN0cik6CisgICAgICAgICAgICBsaWMgPSBub2RlLnMKKworICAgICAgICAgICAgaWYgbGljZW5zZV9vayhzZWxmLl9jYW5vbmljYWxfbGljZW5zZShzZWxmLl9kLCBsaWMpLAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9kb250X3dhbnRfbGljZW5zZXMpID09IFRydWU6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fb3BlcmF0b3JzOgorICAgICAgICAgICAgICAgICAgICBvcHMgPSBbXQorICAgICAgICAgICAgICAgICAgICBmb3Igb3AgaW4gc2VsZi5fb3BlcmF0b3JzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3AgPT0gJ1snOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wcy5hcHBlbmQob3ApCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIG9wID09ICddJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHMuYXBwZW5kKG9wKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3BzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHMuYXBwZW5kKG9wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgb3BzWy0xXSBpbiBbJ1snLCAnXSddOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHMuYXBwZW5kKG9wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wc1stMV0gPSBvcCAKKworICAgICAgICAgICAgICAgICAgICBmb3Igb3AgaW4gb3BzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3AgPT0gJ1snIG9yIG9wID09ICddJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpY2Vuc2VzdHIgKz0gb3AKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5saWNlbnNlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpY2Vuc2VzdHIgKz0gJyAnICsgb3AgKyAnICcKKworICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcGVyYXRvcnMgPSBbXQorCisgICAgICAgICAgICAgICAgc2VsZi5saWNlbnNlc3RyICs9IGxpYworICAgICAgICAgICAgICAgIHNlbGYubGljZW5zZXMuYXBwZW5kKGxpYykKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIGFzdC5CaXRBbmQpOgorICAgICAgICAgICAgc2VsZi5fb3BlcmF0b3JzLmFwcGVuZCgiJiIpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShub2RlLCBhc3QuQml0T3IpOgorICAgICAgICAgICAgc2VsZi5fb3BlcmF0b3JzLmFwcGVuZCgifCIpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShub2RlLCBhc3QuTGlzdCk6CisgICAgICAgICAgICBzZWxmLl9vcGVyYXRvcnMuYXBwZW5kKCJbIikKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIGFzdC5Mb2FkKToKKyAgICAgICAgICAgIHNlbGYubGljZW5zZXN0ciArPSAiXSIKKworICAgICAgICBzZWxmLmdlbmVyaWNfdmlzaXQobm9kZSkKKworZGVmIG1hbmlmZXN0X2xpY2Vuc2VzKGxpY2Vuc2VzdHIsIGRvbnRfd2FudF9saWNlbnNlcywgY2Fub25pY2FsX2xpY2Vuc2UsIGQpOgorICAgICIiIkdpdmVuIGEgbGljZW5zZSBzdHJpbmcgYW5kIGRvbnRfd2FudF9saWNlbnNlcyBsaXN0LAorICAgICAgIHJldHVybiBsaWNlbnNlIHN0cmluZyBmaWx0ZXJlZCBhbmQgYSBsaXN0IG9mIGxpY2Vuc2VzIiIiCisgICAgbWFuaWZlc3QgPSBNYW5pZmVzdFZpc2l0b3IoZG9udF93YW50X2xpY2Vuc2VzLCBjYW5vbmljYWxfbGljZW5zZSwgZCkKKworICAgIHRyeToKKyAgICAgICAgZWxlbWVudHMgPSBtYW5pZmVzdC5nZXRfZWxlbWVudHMobGljZW5zZXN0cikKKworICAgICAgICAjIFJlcGxhY2UgJygpJyB0byAnW10nIGZvciBoYW5kbGUgaW4gYXN0IGFzIExpc3QgYW5kIExvYWQgdHlwZXMuCisgICAgICAgIGVsZW1lbnRzID0gWydbJyBpZiBlID09ICcoJyBlbHNlIGUgZm9yIGUgaW4gZWxlbWVudHNdCisgICAgICAgIGVsZW1lbnRzID0gWyddJyBpZiBlID09ICcpJyBlbHNlIGUgZm9yIGUgaW4gZWxlbWVudHNdCisKKyAgICAgICAgbWFuaWZlc3QudmlzaXRfZWxlbWVudHMoZWxlbWVudHMpCisgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIGV4YzoKKyAgICAgICAgcmFpc2UgTGljZW5zZVN5bnRheEVycm9yKGxpY2Vuc2VzdHIsIGV4YykKKworICAgICMgUmVwbGFjZSAnW10nIHRvICcoKScgZm9yIG91dHB1dCBjb3JyZWN0IGxpY2Vuc2UuCisgICAgbWFuaWZlc3QubGljZW5zZXN0ciA9IG1hbmlmZXN0LmxpY2Vuc2VzdHIucmVwbGFjZSgnWycsICcoJykucmVwbGFjZSgnXScsICcpJykKKworICAgIHJldHVybiAobWFuaWZlc3QubGljZW5zZXN0ciwgbWFuaWZlc3QubGljZW5zZXMpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL2xzYi5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvbHNiLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZmU3MWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2xzYi5weQpAQCAtMCwwICsxLDgzIEBACitkZWYgcmVsZWFzZV9kaWN0KCk6CisgICAgIiIiUmV0dXJuIHRoZSBvdXRwdXQgb2YgbHNiX3JlbGVhc2UgLWlyIGFzIGEgZGljdGlvbmFyeSIiIgorICAgIGZyb20gc3VicHJvY2VzcyBpbXBvcnQgUElQRQorCisgICAgdHJ5OgorICAgICAgICBvdXRwdXQsIGVyciA9IGJiLnByb2Nlc3MucnVuKFsnbHNiX3JlbGVhc2UnLCAnLWlyJ10sIHN0ZGVycj1QSVBFKQorICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkNtZEVycm9yIGFzIGV4YzoKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRhdGEgPSB7fQorICAgIGZvciBsaW5lIGluIG91dHB1dC5zcGxpdGxpbmVzKCk6CisgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiLWUiKTogbGluZSA9IGxpbmVbMzpdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtleSwgdmFsdWUgPSBsaW5lLnNwbGl0KCI6XHQiLCAxKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZQorICAgIHJldHVybiBkYXRhCisKK2RlZiByZWxlYXNlX2RpY3RfZmlsZSgpOgorICAgICIiIiBUcnkgdG8gZ2F0aGVyIExTQiByZWxlYXNlIGluZm9ybWF0aW9uIG1hbnVhbGx5IHdoZW4gbHNiX3JlbGVhc2UgdG9vbCBpcyB1bmF2YWlsYWJsZSAiIiIKKyAgICBkYXRhID0gTm9uZQorICAgIHRyeToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoJy9ldGMvbHNiLXJlbGVhc2UnKToKKyAgICAgICAgICAgIGRhdGEgPSB7fQorICAgICAgICAgICAgd2l0aCBvcGVuKCcvZXRjL2xzYi1yZWxlYXNlJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICBrZXksIHZhbHVlID0gbGluZS5zcGxpdCgiPSIsIDEpCisgICAgICAgICAgICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlLnN0cmlwKCkKKyAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cygnL2V0Yy9yZWRoYXQtcmVsZWFzZScpOgorICAgICAgICAgICAgZGF0YSA9IHt9CisgICAgICAgICAgICB3aXRoIG9wZW4oJy9ldGMvcmVkaGF0LXJlbGVhc2UnKSBhcyBmOgorICAgICAgICAgICAgICAgIGRpc3RybyA9IGYucmVhZGxpbmUoKS5zdHJpcCgpCisgICAgICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgICAgIG1hdGNoID0gcmUubWF0Y2gocicoLiopIHJlbGVhc2UgKC4qKSBcKCguKilcKScsIGRpc3RybykKKyAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgIGRhdGFbJ0RJU1RSSUJfSUQnXSA9IG1hdGNoLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgZGF0YVsnRElTVFJJQl9SRUxFQVNFJ10gPSBtYXRjaC5ncm91cCgyKQorICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKCcvZXRjL29zLXJlbGVhc2UnKToKKyAgICAgICAgICAgIGRhdGEgPSB7fQorICAgICAgICAgICAgd2l0aCBvcGVuKCcvZXRjL29zLXJlbGVhc2UnKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnTkFNRT0nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbJ0RJU1RSSUJfSUQnXSA9IGxpbmVbNTpdLnJzdHJpcCgpLnN0cmlwKCciJykKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdWRVJTSU9OX0lEPScpOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsnRElTVFJJQl9SRUxFQVNFJ10gPSBsaW5lWzExOl0ucnN0cmlwKCkuc3RyaXAoJyInKQorICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKCcvZXRjL1N1U0UtcmVsZWFzZScpOgorICAgICAgICAgICAgZGF0YSA9IHt9CisgICAgICAgICAgICBkYXRhWydESVNUUklCX0lEJ10gPSAnU1VTRSBMSU5VWCcKKyAgICAgICAgICAgIHdpdGggb3BlbignL2V0Yy9TdVNFLXJlbGVhc2UnKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnVkVSU0lPTiA9ICcpOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsnRElTVFJJQl9SRUxFQVNFJ10gPSBsaW5lWzEwOl0ucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICByZXR1cm4gZGF0YQorCitkZWYgZGlzdHJvX2lkZW50aWZpZXIoYWRqdXN0X2hvb2s9Tm9uZSk6CisgICAgIiIiUmV0dXJuIGEgZGlzdHJvIGlkZW50aWZpZXIgc3RyaW5nIGJhc2VkIHVwb24gbHNiX3JlbGVhc2UgLXJpLAorICAgICAgIHdpdGggb3B0aW9uYWwgYWRqdXN0bWVudCB2aWEgYSBob29rIiIiCisKKyAgICBsc2JfZGF0YSA9IHJlbGVhc2VfZGljdCgpCisgICAgaWYgbHNiX2RhdGE6CisgICAgICAgIGRpc3Ryb19pZCwgcmVsZWFzZSA9IGxzYl9kYXRhWydEaXN0cmlidXRvciBJRCddLCBsc2JfZGF0YVsnUmVsZWFzZSddCisgICAgZWxzZToKKyAgICAgICAgbHNiX2RhdGFfZmlsZSA9IHJlbGVhc2VfZGljdF9maWxlKCkKKyAgICAgICAgaWYgbHNiX2RhdGFfZmlsZToKKyAgICAgICAgICAgIGRpc3Ryb19pZCwgcmVsZWFzZSA9IGxzYl9kYXRhX2ZpbGVbJ0RJU1RSSUJfSUQnXSwgbHNiX2RhdGFfZmlsZS5nZXQoJ0RJU1RSSUJfUkVMRUFTRScsIE5vbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkaXN0cm9faWQsIHJlbGVhc2UgPSBOb25lLCBOb25lCisKKyAgICBpZiBhZGp1c3RfaG9vazoKKyAgICAgICAgZGlzdHJvX2lkLCByZWxlYXNlID0gYWRqdXN0X2hvb2soZGlzdHJvX2lkLCByZWxlYXNlKQorICAgIGlmIG5vdCBkaXN0cm9faWQ6CisgICAgICAgIHJldHVybiAiVW5rbm93biIKKyAgICBpZiByZWxlYXNlOgorICAgICAgICBpZF9zdHIgPSAnezB9LXsxfScuZm9ybWF0KGRpc3Ryb19pZCwgcmVsZWFzZSkKKyAgICBlbHNlOgorICAgICAgICBpZF9zdHIgPSBkaXN0cm9faWQKKyAgICByZXR1cm4gaWRfc3RyLnJlcGxhY2UoJyAnLCctJykucmVwbGFjZSgnLycsJy0nKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9tYWtldHlwZS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvbWFrZXR5cGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM5ZjMzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvbWFrZXR5cGUucHkKQEAgLTAsMCArMSw5OSBAQAorIiIiT3BlbkVtYmVkZGVkIHZhcmlhYmxlIHR5cGluZyBzdXBwb3J0CisKK1R5cGVzIGFyZSBkZWZpbmVkIGluIHRoZSBtZXRhZGF0YSBieSBuYW1lLCB1c2luZyB0aGUgJ3R5cGUnIGZsYWcgb24gYQordmFyaWFibGUuICBPdGhlciBmbGFncyBtYXkgYmUgdXRpbGl6ZWQgaW4gdGhlIGNvbnN0cnVjdGlvbiBvZiB0aGUgdHlwZXMuICBTZWUKK3RoZSBhcmd1bWVudHMgb2YgdGhlIHR5cGUncyBmYWN0b3J5IGZvciBkZXRhaWxzLgorIiIiCisKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgdHlwZXMKKworYXZhaWxhYmxlX3R5cGVzID0ge30KKworY2xhc3MgTWlzc2luZ0ZsYWcoVHlwZUVycm9yKToKKyAgICAiIiJBIHBhcnRpY3VsYXIgZmxhZyBpcyByZXF1aXJlZCB0byBjb25zdHJ1Y3QgdGhlIHR5cGUsIGJ1dCBoYXMgbm90IGJlZW4KKyAgICBwcm92aWRlZC4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmxhZywgdHlwZSk6CisgICAgICAgIHNlbGYuZmxhZyA9IGZsYWcKKyAgICAgICAgc2VsZi50eXBlID0gdHlwZQorICAgICAgICBUeXBlRXJyb3IuX19pbml0X18oc2VsZikKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlR5cGUgJyVzJyByZXF1aXJlcyBmbGFnICclcyciICUgKHNlbGYudHlwZSwgc2VsZi5mbGFnKQorCitkZWYgZmFjdG9yeSh2YXJfdHlwZSk6CisgICAgIiIiUmV0dXJuIHRoZSBmYWN0b3J5IGZvciBhIHNwZWNpZmllZCB0eXBlLiIiIgorICAgIGlmIHZhcl90eXBlIGlzIE5vbmU6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiTm8gdHlwZSBzcGVjaWZpZWQuIFZhbGlkIHR5cGVzOiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgJywgJy5qb2luKGF2YWlsYWJsZV90eXBlcykpCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gYXZhaWxhYmxlX3R5cGVzW3Zhcl90eXBlXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJJbnZhbGlkIHR5cGUgJyVzJzpcbiAgVmFsaWQgdHlwZXM6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAodmFyX3R5cGUsICcsICcuam9pbihhdmFpbGFibGVfdHlwZXMpKSkKKworZGVmIGNyZWF0ZSh2YWx1ZSwgdmFyX3R5cGUsICoqZmxhZ3MpOgorICAgICIiIkNyZWF0ZSBhbiBvYmplY3Qgb2YgdGhlIHNwZWNpZmllZCB0eXBlLCBnaXZlbiB0aGUgc3BlY2lmaWVkIGZsYWdzIGFuZAorICAgIHN0cmluZyB2YWx1ZS4iIiIKKyAgICBvYmogPSBmYWN0b3J5KHZhcl90eXBlKQorICAgIG9iamZsYWdzID0ge30KKyAgICBmb3IgZmxhZyBpbiBvYmouZmxhZ3M6CisgICAgICAgIGlmIGZsYWcgbm90IGluIGZsYWdzOgorICAgICAgICAgICAgaWYgZmxhZyBub3QgaW4gb2JqLm9wdGZsYWdzOgorICAgICAgICAgICAgICAgIHJhaXNlIE1pc3NpbmdGbGFnKGZsYWcsIHZhcl90eXBlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb2JqZmxhZ3NbZmxhZ10gPSBmbGFnc1tmbGFnXQorCisgICAgcmV0dXJuIG9iaih2YWx1ZSwgKipvYmpmbGFncykKKworZGVmIGdldF9jYWxsYWJsZV9hcmdzKG9iaik6CisgICAgIiIiR3JhYiBhbGwgYnV0IHRoZSBmaXJzdCBhcmd1bWVudCBvZiB0aGUgc3BlY2lmaWVkIGNhbGxhYmxlLCByZXR1cm5pbmcKKyAgICB0aGUgbGlzdCwgYXMgd2VsbCBhcyBhIGxpc3Qgb2Ygd2hpY2ggb2YgdGhlIGFyZ3VtZW50cyBoYXZlIGRlZmF1bHQKKyAgICB2YWx1ZXMuIiIiCisgICAgaWYgdHlwZShvYmopIGlzIHR5cGU6CisgICAgICAgIG9iaiA9IG9iai5fX2luaXRfXworCisgICAgYXJncywgdmFyYXJncywga2V5d29yZHMsIGRlZmF1bHRzID0gaW5zcGVjdC5nZXRhcmdzcGVjKG9iaikKKyAgICBmbGFnbGlzdCA9IFtdCisgICAgaWYgYXJnczoKKyAgICAgICAgaWYgbGVuKGFyZ3MpID4gMSBhbmQgYXJnc1swXSA9PSAnc2VsZic6CisgICAgICAgICAgICBhcmdzID0gYXJnc1sxOl0KKyAgICAgICAgZmxhZ2xpc3QuZXh0ZW5kKGFyZ3MpCisKKyAgICBvcHRpb25hbCA9IHNldCgpCisgICAgaWYgZGVmYXVsdHM6CisgICAgICAgIG9wdGlvbmFsIHw9IHNldChmbGFnbGlzdFstbGVuKGRlZmF1bHRzKTpdKQorICAgIHJldHVybiBmbGFnbGlzdCwgb3B0aW9uYWwKKworZGVmIGZhY3Rvcnlfc2V0dXAobmFtZSwgb2JqKToKKyAgICAiIiJQcmVwYXJlIGEgZmFjdG9yeSBmb3IgdXNlLiIiIgorICAgIGFyZ3MsIG9wdGlvbmFsID0gZ2V0X2NhbGxhYmxlX2FyZ3Mob2JqKQorICAgIGV4dHJhX2FyZ3MgPSBhcmdzWzE6XQorICAgIGlmIGV4dHJhX2FyZ3M6CisgICAgICAgIG9iai5mbGFncywgb3B0aW9uYWwgPSBleHRyYV9hcmdzLCBvcHRpb25hbAorICAgICAgICBvYmoub3B0ZmxhZ3MgPSBzZXQob3B0aW9uYWwpCisgICAgZWxzZToKKyAgICAgICAgb2JqLmZsYWdzID0gb2JqLm9wdGZsYWdzID0gKCkKKworICAgIGlmIG5vdCBoYXNhdHRyKG9iaiwgJ25hbWUnKToKKyAgICAgICAgb2JqLm5hbWUgPSBuYW1lCisKK2RlZiByZWdpc3RlcihuYW1lLCBmYWN0b3J5KToKKyAgICAiIiJSZWdpc3RlciBhIHR5cGUsIGdpdmVuIGl0cyBuYW1lIGFuZCBhIGZhY3RvcnkgY2FsbGFibGUuCisKKyAgICBEZXRlcm1pbmVzIHRoZSByZXF1aXJlZCBhbmQgb3B0aW9uYWwgZmxhZ3MgZnJvbSB0aGUgZmFjdG9yeSdzCisgICAgYXJndW1lbnRzLiIiIgorICAgIGZhY3Rvcnlfc2V0dXAobmFtZSwgZmFjdG9yeSkKKyAgICBhdmFpbGFibGVfdHlwZXNbZmFjdG9yeS5uYW1lXSA9IGZhY3RvcnkKKworCisjIFJlZ2lzdGVyIGFsbCBvdXIgaW5jbHVkZWQgdHlwZXMKK2ZvciBuYW1lIGluIGRpcih0eXBlcyk6CisgICAgaWYgbmFtZS5zdGFydHN3aXRoKCdfJyk6CisgICAgICAgIGNvbnRpbnVlCisKKyAgICBvYmogPSBnZXRhdHRyKHR5cGVzLCBuYW1lKQorICAgIGlmIG5vdCBjYWxsYWJsZShvYmopOgorICAgICAgICBjb250aW51ZQorCisgICAgcmVnaXN0ZXIobmFtZSwgb2JqKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9tYW5pZmVzdC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvbWFuaWZlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI4MzJmMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvbWFuaWZlc3QucHkKQEAgLTAsMCArMSwzNDUgQEAKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBiYgorCisKK2NsYXNzIE1hbmlmZXN0KG9iamVjdCk6CisgICAgIiIiCisgICAgVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcy4gRG8gbm90IGluc3RhbnRpYXRlIHRoaXMgZGlyZWN0bHkuCisgICAgIiIiCisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIFBLR19UWVBFX01VU1RfSU5TVEFMTCA9ICJtaXAiCisgICAgUEtHX1RZUEVfTVVMVElMSUIgPSAibWxwIgorICAgIFBLR19UWVBFX0xBTkdVQUdFID0gImxncCIKKyAgICBQS0dfVFlQRV9BVFRFTVBUX09OTFkgPSAiYW9wIgorCisgICAgTUFOSUZFU1RfVFlQRV9JTUFHRSA9ICJpbWFnZSIKKyAgICBNQU5JRkVTVF9UWVBFX1NES19IT1NUID0gInNka19ob3N0IgorICAgIE1BTklGRVNUX1RZUEVfU0RLX1RBUkdFVCA9ICJzZGtfdGFyZ2V0IgorCisgICAgdmFyX21hcHMgPSB7CisgICAgICAgIE1BTklGRVNUX1RZUEVfSU1BR0U6IHsKKyAgICAgICAgICAgICJQQUNLQUdFX0lOU1RBTEwiOiBQS0dfVFlQRV9NVVNUX0lOU1RBTEwsCisgICAgICAgICAgICAiUEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZIjogUEtHX1RZUEVfQVRURU1QVF9PTkxZLAorICAgICAgICAgICAgIkxJTkdVQVNfSU5TVEFMTCI6IFBLR19UWVBFX0xBTkdVQUdFCisgICAgICAgIH0sCisgICAgICAgIE1BTklGRVNUX1RZUEVfU0RLX0hPU1Q6IHsKKyAgICAgICAgICAgICJUT09MQ0hBSU5fSE9TVF9UQVNLIjogUEtHX1RZUEVfTVVTVF9JTlNUQUxMLAorICAgICAgICAgICAgIlRPT0xDSEFJTl9IT1NUX1RBU0tfQVRURU1QVE9OTFkiOiBQS0dfVFlQRV9BVFRFTVBUX09OTFkKKyAgICAgICAgfSwKKyAgICAgICAgTUFOSUZFU1RfVFlQRV9TREtfVEFSR0VUOiB7CisgICAgICAgICAgICAiVE9PTENIQUlOX1RBUkdFVF9UQVNLIjogUEtHX1RZUEVfTVVTVF9JTlNUQUxMLAorICAgICAgICAgICAgIlRPT0xDSEFJTl9UQVJHRVRfVEFTS19BVFRFTVBUT05MWSI6IFBLR19UWVBFX0FUVEVNUFRfT05MWQorICAgICAgICB9CisgICAgfQorCisgICAgSU5TVEFMTF9PUkRFUiA9IFsKKyAgICAgICAgUEtHX1RZUEVfTEFOR1VBR0UsCisgICAgICAgIFBLR19UWVBFX01VU1RfSU5TVEFMTCwKKyAgICAgICAgUEtHX1RZUEVfQVRURU1QVF9PTkxZLAorICAgICAgICBQS0dfVFlQRV9NVUxUSUxJQgorICAgIF0KKworICAgIGluaXRpYWxfbWFuaWZlc3RfZmlsZV9oZWFkZXIgPSBcCisgICAgICAgICIjIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYW5kIGNvbnRhaW5zIHRoZSBwYWNrYWdlc1xuIiBcCisgICAgICAgICIjIHBhc3NlZCBvbiB0byB0aGUgcGFja2FnZSBtYW5hZ2VyIGluIG9yZGVyIHRvIGNyZWF0ZSB0aGUgcm9vdGZzLlxuXG4iIFwKKyAgICAgICAgIiMgRm9ybWF0OlxuIiBcCisgICAgICAgICIjICA8cGFja2FnZV90eXBlPiw8cGFja2FnZV9uYW1lPlxuIiBcCisgICAgICAgICIjIHdoZXJlOlxuIiBcCisgICAgICAgICIjICAgPHBhY2thZ2VfdHlwZT4gY2FuIGJlOlxuIiBcCisgICAgICAgICIjICAgICAgJ21pcCcgPSBtdXN0IGluc3RhbGwgcGFja2FnZVxuIiBcCisgICAgICAgICIjICAgICAgJ2FvcCcgPSBhdHRlbXB0IG9ubHkgcGFja2FnZVxuIiBcCisgICAgICAgICIjICAgICAgJ21scCcgPSBtdWx0aWxpYiBwYWNrYWdlXG4iIFwKKyAgICAgICAgIiMgICAgICAnbGdwJyA9IGxhbmd1YWdlIHBhY2thZ2VcblxuIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIG1hbmlmZXN0X2Rpcj1Ob25lLCBtYW5pZmVzdF90eXBlPU1BTklGRVNUX1RZUEVfSU1BR0UpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYubWFuaWZlc3RfdHlwZSA9IG1hbmlmZXN0X3R5cGUKKworICAgICAgICBpZiBtYW5pZmVzdF9kaXIgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIG1hbmlmZXN0X3R5cGUgIT0gc2VsZi5NQU5JRkVTVF9UWVBFX0lNQUdFOgorICAgICAgICAgICAgICAgIHNlbGYubWFuaWZlc3RfZGlyID0gc2VsZi5kLmdldFZhcignU0RLX0RJUicsIFRydWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYubWFuaWZlc3RfZGlyID0gc2VsZi5kLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLm1hbmlmZXN0X2RpciA9IG1hbmlmZXN0X2RpcgorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLm1hbmlmZXN0X2RpcikKKworICAgICAgICBzZWxmLmluaXRpYWxfbWFuaWZlc3QgPSBvcy5wYXRoLmpvaW4oc2VsZi5tYW5pZmVzdF9kaXIsICIlc19pbml0aWFsX21hbmlmZXN0IiAlIG1hbmlmZXN0X3R5cGUpCisgICAgICAgIHNlbGYuZmluYWxfbWFuaWZlc3QgPSBvcy5wYXRoLmpvaW4oc2VsZi5tYW5pZmVzdF9kaXIsICIlc19maW5hbF9tYW5pZmVzdCIgJSBtYW5pZmVzdF90eXBlKQorICAgICAgICBzZWxmLmZ1bGxfbWFuaWZlc3QgPSBvcy5wYXRoLmpvaW4oc2VsZi5tYW5pZmVzdF9kaXIsICIlc19mdWxsX21hbmlmZXN0IiAlIG1hbmlmZXN0X3R5cGUpCisKKyAgICAgICAgIyBwYWNrYWdlcyBpbiB0aGUgZm9sbG93aW5nIHZhcnMgd2lsbCBiZSBzcGxpdCBpbiAnbXVzdCBpbnN0YWxsJyBhbmQKKyAgICAgICAgIyAnbXVsdGlsaWInCisgICAgICAgIHNlbGYudmFyc190b19zcGxpdCA9IFsiUEFDS0FHRV9JTlNUQUxMIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUT09MQ0hBSU5fSE9TVF9UQVNLIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUT09MQ0hBSU5fVEFSR0VUX1RBU0siXQorCisgICAgIiIiCisgICAgVGhpcyBjcmVhdGVzIGEgc3RhbmRhcmQgaW5pdGlhbCBtYW5pZmVzdCBmb3IgY29yZS1pbWFnZS0obWluaW1hbHxzYXRvfHNhdG8tc2RrKS4KKyAgICBUaGlzIHdpbGwgYmUgdXNlZCBmb3IgdGVzdGluZyB1bnRpbCB0aGUgY2xhc3MgaXMgaW1wbGVtZW50ZWQgcHJvcGVybHkhCisgICAgIiIiCisgICAgZGVmIF9jcmVhdGVfZHVtbXlfaW5pdGlhbChzZWxmKToKKyAgICAgICAgaW1hZ2Vfcm9vdGZzID0gc2VsZi5kLmdldFZhcignSU1BR0VfUk9PVEZTJywgVHJ1ZSkKKyAgICAgICAgcGtnX2xpc3QgPSBkaWN0KCkKKyAgICAgICAgaWYgaW1hZ2Vfcm9vdGZzLmZpbmQoImNvcmUtaW1hZ2Utc2F0by1zZGsiKSA+IDA6CisgICAgICAgICAgICBwa2dfbGlzdFtzZWxmLlBLR19UWVBFX01VU1RfSU5TVEFMTF0gPSBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvLWdhbWVzIHBhY2thZ2Vncm91cC1iYXNlLWV4dGVuZGVkICIgXAorICAgICAgICAgICAgICAgICJwYWNrYWdlZ3JvdXAtY29yZS14MTEtc2F0byBwYWNrYWdlZ3JvdXAtY29yZS14MTEtYmFzZSAiIFwKKyAgICAgICAgICAgICAgICAicGFja2FnZWdyb3VwLWNvcmUtc2RrIHBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLWRlYnVnICIgXAorICAgICAgICAgICAgICAgICJwYWNrYWdlZ3JvdXAtY29yZS1ib290IHBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXRlc3RhcHBzICIgXAorICAgICAgICAgICAgICAgICJwYWNrYWdlZ3JvdXAtY29yZS1lY2xpcHNlLWRlYnVnIHBhY2thZ2Vncm91cC1jb3JlLXF0LWRlbW9hcHBzICIgXAorICAgICAgICAgICAgICAgICJhcHQgcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtcHJvZmlsZSBwc3BsYXNoICIgXAorICAgICAgICAgICAgICAgICJwYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQgIiBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLXNzaC1vcGVuc3NoIGRwa2cga2VybmVsLWRldiIKKyAgICAgICAgICAgIHBrZ19saXN0W3NlbGYuUEtHX1RZUEVfTEFOR1VBR0VdID0gXAorICAgICAgICAgICAgICAgICJsb2NhbGUtYmFzZS1lbi11cyBsb2NhbGUtYmFzZS1lbi1nYiIKKyAgICAgICAgZWxpZiBpbWFnZV9yb290ZnMuZmluZCgiY29yZS1pbWFnZS1zYXRvIikgPiAwOgorICAgICAgICAgICAgcGtnX2xpc3Rbc2VsZi5QS0dfVFlQRV9NVVNUX0lOU1RBTExdID0gXAorICAgICAgICAgICAgICAgICJwYWNrYWdlZ3JvdXAtY29yZS1zc2gtZHJvcGJlYXIgcGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8tZ2FtZXMgIiBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLXgxMS1iYXNlIHBzcGxhc2ggYXB0IGRwa2cgcGFja2FnZWdyb3VwLWJhc2UtZXh0ZW5kZWQgIiBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvIHBhY2thZ2Vncm91cC1jb3JlLWJvb3QiCisgICAgICAgICAgICBwa2dfbGlzdFsnbGdwJ10gPSBcCisgICAgICAgICAgICAgICAgImxvY2FsZS1iYXNlLWVuLXVzIGxvY2FsZS1iYXNlLWVuLWdiIgorICAgICAgICBlbGlmIGltYWdlX3Jvb3Rmcy5maW5kKCJjb3JlLWltYWdlLW1pbmltYWwiKSA+IDA6CisgICAgICAgICAgICBwa2dfbGlzdFtzZWxmLlBLR19UWVBFX01VU1RfSU5TVEFMTF0gPSAicnVuLXBvc3RpbnN0cyBwYWNrYWdlZ3JvdXAtY29yZS1ib290IgorCisgICAgICAgIHdpdGggb3BlbihzZWxmLmluaXRpYWxfbWFuaWZlc3QsICJ3KyIpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgbWFuaWZlc3Qud3JpdGUoc2VsZi5pbml0aWFsX21hbmlmZXN0X2ZpbGVfaGVhZGVyKQorCisgICAgICAgICAgICBmb3IgcGtnX3R5cGUgaW4gcGtnX2xpc3Q6CisgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiBwa2dfbGlzdFtwa2dfdHlwZV0uc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3Qud3JpdGUoIiVzLCVzXG4iICUgKHBrZ190eXBlLCBwa2cpKQorCisgICAgIiIiCisgICAgVGhpcyB3aWxsIGNyZWF0ZSB0aGUgaW5pdGlhbCBtYW5pZmVzdCB3aGljaCB3aWxsIGJlIHVzZWQgYnkgUm9vdGZzIGNsYXNzIHRvCisgICAgZ2VuZXJhdGUgdGhlIHJvb3RmcworICAgICIiIgorICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBjcmVhdGVfaW5pdGlhbChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgIiIiCisgICAgVGhpcyBjcmVhdGVzIHRoZSBtYW5pZmVzdCBhZnRlciBldmVyeXRoaW5nIGhhcyBiZWVuIGluc3RhbGxlZC4KKyAgICAiIiIKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgY3JlYXRlX2ZpbmFsKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICAiIiIKKyAgICBUaGlzIGNyZWF0ZXMgdGhlIG1hbmlmZXN0IGFmdGVyIHRoZSBwYWNrYWdlIGluIGluaXRpYWwgbWFuaWZlc3QgaGFzIGJlZW4KKyAgICBkdW1teSBpbnN0YWxsZWQuIEl0IGxpc3RzIGFsbCAqdG8gYmUgaW5zdGFsbGVkKiBwYWNrYWdlcy4gVGhlcmUgaXMgbm8gcmVhbAorICAgIGluc3RhbGxhdGlvbiwganVzdCBhIHRlc3QuCisgICAgIiIiCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGNyZWF0ZV9mdWxsKHNlbGYsIHBtKToKKyAgICAgICAgcGFzcworCisgICAgIiIiCisgICAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBwYXJzZXMgYW4gaW5pdGlhbCBtYW5pZmVzdCBhbmQgcmV0dXJucyBhIGRpY3Rpb25hcnkKKyAgICBvYmplY3Qgd2l0aCB0aGUgbXVzdCBpbnN0YWxsLCBhdHRlbXB0IG9ubHksIG11bHRpbGliIGFuZCBsYW5ndWFnZSBwYWNrYWdlcy4KKyAgICAiIiIKKyAgICBkZWYgcGFyc2VfaW5pdGlhbF9tYW5pZmVzdChzZWxmKToKKyAgICAgICAgcGtncyA9IGRpY3QoKQorCisgICAgICAgIHdpdGggb3BlbihzZWxmLmluaXRpYWxfbWFuaWZlc3QpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gbWFuaWZlc3QucmVhZCgpLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgIGNvbW1lbnQgPSByZS5tYXRjaCgiXiMuKiIsIGxpbmUpCisgICAgICAgICAgICAgICAgcGF0dGVybiA9ICJeKCVzfCVzfCVzfCVzKSwoLiopJCIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLlBLR19UWVBFX01VU1RfSU5TVEFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuUEtHX1RZUEVfQVRURU1QVF9PTkxZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5QS0dfVFlQRV9NVUxUSUxJQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuUEtHX1RZUEVfTEFOR1VBR0UpCisgICAgICAgICAgICAgICAgcGtnID0gcmUubWF0Y2gocGF0dGVybiwgbGluZSkKKworICAgICAgICAgICAgICAgIGlmIGNvbW1lbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBwa2cgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHBrZ190eXBlID0gcGtnLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgICAgIHBrZ19uYW1lID0gcGtnLmdyb3VwKDIpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHBrZ190eXBlIGluIHBrZ3M6CisgICAgICAgICAgICAgICAgICAgICAgICBwa2dzW3BrZ190eXBlXSA9IFtwa2dfbmFtZV0KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ3NbcGtnX3R5cGVdLmFwcGVuZChwa2dfbmFtZSkKKworICAgICAgICByZXR1cm4gcGtncworCisgICAgJycnCisgICAgVGhpcyBmb2xsb3dpbmcgZnVuY3Rpb24gcGFyc2VzIGEgZnVsbCBtYW5pZmVzdCBhbmQgcmV0dXJuIGEgbGlzdAorICAgIG9iamVjdCB3aXRoIHBhY2thZ2VzLgorICAgICcnJworICAgIGRlZiBwYXJzZV9mdWxsX21hbmlmZXN0KHNlbGYpOgorICAgICAgICBpbnN0YWxsZWRfcGtncyA9IGxpc3QoKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5mdWxsX21hbmlmZXN0KToKKyAgICAgICAgICAgIGJiLm5vdGUoJ2Z1bGwgbWFuaWZlc3Qgbm90IGV4aXN0JykKKyAgICAgICAgICAgIHJldHVybiBpbnN0YWxsZWRfcGtncworCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZ1bGxfbWFuaWZlc3QsICdyJykgYXMgbWFuaWZlc3Q6CisgICAgICAgICAgICBmb3IgcGtnIGluIG1hbmlmZXN0LnJlYWQoKS5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICBpbnN0YWxsZWRfcGtncy5hcHBlbmQocGtnLnN0cmlwKCkpCisKKyAgICAgICAgcmV0dXJuIGluc3RhbGxlZF9wa2dzCisKKworY2xhc3MgUnBtTWFuaWZlc3QoTWFuaWZlc3QpOgorICAgICIiIgorICAgIFJldHVybnMgYSBkaWN0aW9uYXJ5IG9iamVjdCB3aXRoIG1pcCBhbmQgbWxwIHBhY2thZ2VzLgorICAgICIiIgorICAgIGRlZiBfc3BsaXRfbXVsdGlsaWIoc2VsZiwgcGtnX2xpc3QpOgorICAgICAgICBwa2dzID0gZGljdCgpCisKKyAgICAgICAgZm9yIHBrZyBpbiBwa2dfbGlzdC5zcGxpdCgpOgorICAgICAgICAgICAgcGtnX3R5cGUgPSBzZWxmLlBLR19UWVBFX01VU1RfSU5TVEFMTAorCisgICAgICAgICAgICBtbF92YXJpYW50cyA9IHNlbGYuZC5nZXRWYXIoJ01VTFRJTElCX1ZBUklBTlRTJywgVHJ1ZSkuc3BsaXQoKQorCisgICAgICAgICAgICBmb3IgbWxfdmFyaWFudCBpbiBtbF92YXJpYW50czoKKyAgICAgICAgICAgICAgICBpZiBwa2cuc3RhcnRzd2l0aChtbF92YXJpYW50ICsgJy0nKToKKyAgICAgICAgICAgICAgICAgICAgcGtnX3R5cGUgPSBzZWxmLlBLR19UWVBFX01VTFRJTElCCisKKyAgICAgICAgICAgIGlmIG5vdCBwa2dfdHlwZSBpbiBwa2dzOgorICAgICAgICAgICAgICAgIHBrZ3NbcGtnX3R5cGVdID0gcGtnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBrZ3NbcGtnX3R5cGVdICs9ICIgIiArIHBrZworCisgICAgICAgIHJldHVybiBwa2dzCisKKyAgICBkZWYgY3JlYXRlX2luaXRpYWwoc2VsZik6CisgICAgICAgIHBrZ3MgPSBkaWN0KCkKKworICAgICAgICB3aXRoIG9wZW4oc2VsZi5pbml0aWFsX21hbmlmZXN0LCAidysiKSBhcyBtYW5pZmVzdDoKKyAgICAgICAgICAgIG1hbmlmZXN0LndyaXRlKHNlbGYuaW5pdGlhbF9tYW5pZmVzdF9maWxlX2hlYWRlcikKKworICAgICAgICAgICAgZm9yIHZhciBpbiBzZWxmLnZhcl9tYXBzW3NlbGYubWFuaWZlc3RfdHlwZV06CisgICAgICAgICAgICAgICAgaWYgdmFyIGluIHNlbGYudmFyc190b19zcGxpdDoKKyAgICAgICAgICAgICAgICAgICAgc3BsaXRfcGtncyA9IHNlbGYuX3NwbGl0X211bHRpbGliKHNlbGYuZC5nZXRWYXIodmFyLCBUcnVlKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgc3BsaXRfcGtncyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ3MgPSBkaWN0KHBrZ3MuaXRlbXMoKSArIHNwbGl0X3BrZ3MuaXRlbXMoKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwa2dfbGlzdCA9IHNlbGYuZC5nZXRWYXIodmFyLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICBpZiBwa2dfbGlzdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ3Nbc2VsZi52YXJfbWFwc1tzZWxmLm1hbmlmZXN0X3R5cGVdW3Zhcl1dID0gc2VsZi5kLmdldFZhcih2YXIsIFRydWUpCisKKyAgICAgICAgICAgIGZvciBwa2dfdHlwZSBpbiBwa2dzOgorICAgICAgICAgICAgICAgIGZvciBwa2cgaW4gcGtnc1twa2dfdHlwZV0uc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3Qud3JpdGUoIiVzLCVzXG4iICUgKHBrZ190eXBlLCBwa2cpKQorCisgICAgZGVmIGNyZWF0ZV9maW5hbChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGNyZWF0ZV9mdWxsKHNlbGYsIHBtKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIE9wa2dNYW5pZmVzdChNYW5pZmVzdCk6CisgICAgIiIiCisgICAgUmV0dXJucyBhIGRpY3Rpb25hcnkgb2JqZWN0IHdpdGggbWlwIGFuZCBtbHAgcGFja2FnZXMuCisgICAgIiIiCisgICAgZGVmIF9zcGxpdF9tdWx0aWxpYihzZWxmLCBwa2dfbGlzdCk6CisgICAgICAgIHBrZ3MgPSBkaWN0KCkKKworICAgICAgICBmb3IgcGtnIGluIHBrZ19saXN0LnNwbGl0KCk6CisgICAgICAgICAgICBwa2dfdHlwZSA9IHNlbGYuUEtHX1RZUEVfTVVTVF9JTlNUQUxMCisKKyAgICAgICAgICAgIG1sX3ZhcmlhbnRzID0gc2VsZi5kLmdldFZhcignTVVMVElMSUJfVkFSSUFOVFMnLCBUcnVlKS5zcGxpdCgpCisKKyAgICAgICAgICAgIGZvciBtbF92YXJpYW50IGluIG1sX3ZhcmlhbnRzOgorICAgICAgICAgICAgICAgIGlmIHBrZy5zdGFydHN3aXRoKG1sX3ZhcmlhbnQgKyAnLScpOgorICAgICAgICAgICAgICAgICAgICBwa2dfdHlwZSA9IHNlbGYuUEtHX1RZUEVfTVVMVElMSUIKKworICAgICAgICAgICAgaWYgbm90IHBrZ190eXBlIGluIHBrZ3M6CisgICAgICAgICAgICAgICAgcGtnc1twa2dfdHlwZV0gPSBwa2cKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGtnc1twa2dfdHlwZV0gKz0gIiAiICsgcGtnCisKKyAgICAgICAgcmV0dXJuIHBrZ3MKKworICAgIGRlZiBjcmVhdGVfaW5pdGlhbChzZWxmKToKKyAgICAgICAgcGtncyA9IGRpY3QoKQorCisgICAgICAgIHdpdGggb3BlbihzZWxmLmluaXRpYWxfbWFuaWZlc3QsICJ3KyIpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgbWFuaWZlc3Qud3JpdGUoc2VsZi5pbml0aWFsX21hbmlmZXN0X2ZpbGVfaGVhZGVyKQorCisgICAgICAgICAgICBmb3IgdmFyIGluIHNlbGYudmFyX21hcHNbc2VsZi5tYW5pZmVzdF90eXBlXToKKyAgICAgICAgICAgICAgICBpZiB2YXIgaW4gc2VsZi52YXJzX3RvX3NwbGl0OgorICAgICAgICAgICAgICAgICAgICBzcGxpdF9wa2dzID0gc2VsZi5fc3BsaXRfbXVsdGlsaWIoc2VsZi5kLmdldFZhcih2YXIsIFRydWUpKQorICAgICAgICAgICAgICAgICAgICBpZiBzcGxpdF9wa2dzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcGtncyA9IGRpY3QocGtncy5pdGVtcygpICsgc3BsaXRfcGtncy5pdGVtcygpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHBrZ19saXN0ID0gc2VsZi5kLmdldFZhcih2YXIsIFRydWUpCisgICAgICAgICAgICAgICAgICAgIGlmIHBrZ19saXN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcGtnc1tzZWxmLnZhcl9tYXBzW3NlbGYubWFuaWZlc3RfdHlwZV1bdmFyXV0gPSBzZWxmLmQuZ2V0VmFyKHZhciwgVHJ1ZSkKKworICAgICAgICAgICAgZm9yIHBrZ190eXBlIGluIHBrZ3M6CisgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiBwa2dzW3BrZ190eXBlXS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdC53cml0ZSgiJXMsJXNcbiIgJSAocGtnX3R5cGUsIHBrZykpCisKKyAgICBkZWYgY3JlYXRlX2ZpbmFsKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgY3JlYXRlX2Z1bGwoc2VsZiwgcG0pOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5pbml0aWFsX21hbmlmZXN0KToKKyAgICAgICAgICAgIHNlbGYuY3JlYXRlX2luaXRpYWwoKQorCisgICAgICAgIGluaXRpYWxfbWFuaWZlc3QgPSBzZWxmLnBhcnNlX2luaXRpYWxfbWFuaWZlc3QoKQorICAgICAgICBwa2dzX3RvX2luc3RhbGwgPSBsaXN0KCkKKyAgICAgICAgZm9yIHBrZ190eXBlIGluIGluaXRpYWxfbWFuaWZlc3Q6CisgICAgICAgICAgICBwa2dzX3RvX2luc3RhbGwgKz0gaW5pdGlhbF9tYW5pZmVzdFtwa2dfdHlwZV0KKyAgICAgICAgaWYgbGVuKHBrZ3NfdG9faW5zdGFsbCkgPT0gMDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIG91dHB1dCA9IHBtLmR1bW15X2luc3RhbGwocGtnc190b19pbnN0YWxsKQorCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZ1bGxfbWFuaWZlc3QsICd3KycpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgcGtnX3JlID0gcmUuY29tcGlsZSgnXkluc3RhbGxpbmcgKFteIF0rKSBbXiBdLionKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2V0KG91dHB1dC5zcGxpdCgnXG4nKSk6CisgICAgICAgICAgICAgICAgbSA9IHBrZ19yZS5tYXRjaChsaW5lKQorICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0LndyaXRlKG0uZ3JvdXAoMSkgKyAnXG4nKQorCisgICAgICAgIHJldHVybgorCisKK2NsYXNzIERwa2dNYW5pZmVzdChNYW5pZmVzdCk6CisgICAgZGVmIGNyZWF0ZV9pbml0aWFsKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oc2VsZi5pbml0aWFsX21hbmlmZXN0LCAidysiKSBhcyBtYW5pZmVzdDoKKyAgICAgICAgICAgIG1hbmlmZXN0LndyaXRlKHNlbGYuaW5pdGlhbF9tYW5pZmVzdF9maWxlX2hlYWRlcikKKworICAgICAgICAgICAgZm9yIHZhciBpbiBzZWxmLnZhcl9tYXBzW3NlbGYubWFuaWZlc3RfdHlwZV06CisgICAgICAgICAgICAgICAgcGtnX2xpc3QgPSBzZWxmLmQuZ2V0VmFyKHZhciwgVHJ1ZSkKKworICAgICAgICAgICAgICAgIGlmIHBrZ19saXN0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHBrZ19saXN0LnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0LndyaXRlKCIlcywlc1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLnZhcl9tYXBzW3NlbGYubWFuaWZlc3RfdHlwZV1bdmFyXSwgcGtnKSkKKworICAgIGRlZiBjcmVhdGVfZmluYWwoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBjcmVhdGVfZnVsbChzZWxmLCBwbSk6CisgICAgICAgIHBhc3MKKworCitkZWYgY3JlYXRlX21hbmlmZXN0KGQsIGZpbmFsX21hbmlmZXN0PUZhbHNlLCBtYW5pZmVzdF9kaXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3RfdHlwZT1NYW5pZmVzdC5NQU5JRkVTVF9UWVBFX0lNQUdFKToKKyAgICBtYW5pZmVzdF9tYXAgPSB7J3JwbSc6IFJwbU1hbmlmZXN0LAorICAgICAgICAgICAgICAgICAgICAnaXBrJzogT3BrZ01hbmlmZXN0LAorICAgICAgICAgICAgICAgICAgICAnZGViJzogRHBrZ01hbmlmZXN0fQorCisgICAgbWFuaWZlc3QgPSBtYW5pZmVzdF9tYXBbZC5nZXRWYXIoJ0lNQUdFX1BLR1RZUEUnLCBUcnVlKV0oZCwgbWFuaWZlc3RfZGlyLCBtYW5pZmVzdF90eXBlKQorCisgICAgaWYgZmluYWxfbWFuaWZlc3Q6CisgICAgICAgIG1hbmlmZXN0LmNyZWF0ZV9maW5hbCgpCisgICAgZWxzZToKKyAgICAgICAgbWFuaWZlc3QuY3JlYXRlX2luaXRpYWwoKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgcGFzcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYWNrYWdlLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYWNrYWdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNzY0NDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3BhY2thZ2UucHkKQEAgLTAsMCArMSwxMjUgQEAKK2RlZiBydW5zdHJpcChhcmcpOgorICAgICMgRnVuY3Rpb24gdG8gc3RyaXAgYSBzaW5nbGUgZmlsZSwgY2FsbGVkIGZyb20gc3BsaXRfYW5kX3N0cmlwX2ZpbGVzIGJlbG93CisgICAgIyBBIHdvcmtpbmcgJ2ZpbGUnIChvbmUgd2hpY2ggd29ya3Mgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUpCisgICAgIworICAgICMgVGhlIGVsZnR5cGUgaXMgYSBiaXQgcGF0dGVybiAoZXhwbGFpbmVkIGluIHNwbGl0X2FuZF9zdHJpcF9maWxlcykgdG8gdGVsbAorICAgICMgdXMgd2hhdCB0eXBlIG9mIGZpbGUgd2UncmUgcHJvY2Vzc2luZy4uLgorICAgICMgNCAtIGV4ZWN1dGFibGUKKyAgICAjIDggLSBzaGFyZWQgbGlicmFyeQorICAgICMgMTYgLSBrZXJuZWwgbW9kdWxlCisKKyAgICBpbXBvcnQgY29tbWFuZHMsIHN0YXQsIHN1YnByb2Nlc3MKKworICAgIChmaWxlLCBlbGZ0eXBlLCBzdHJpcCkgPSBhcmcKKworICAgIG5ld21vZGUgPSBOb25lCisgICAgaWYgbm90IG9zLmFjY2VzcyhmaWxlLCBvcy5XX09LKSBvciBvcy5hY2Nlc3MoZmlsZSwgb3MuUl9PSyk6CisgICAgICAgIG9yaWdtb2RlID0gb3Muc3RhdChmaWxlKVtzdGF0LlNUX01PREVdCisgICAgICAgIG5ld21vZGUgPSBvcmlnbW9kZSB8IHN0YXQuU19JV1JJVEUgfCBzdGF0LlNfSVJFQUQKKyAgICAgICAgb3MuY2htb2QoZmlsZSwgbmV3bW9kZSkKKworICAgIGV4dHJhZmxhZ3MgPSAiIgorCisgICAgIyBrZXJuZWwgbW9kdWxlICAgIAorICAgIGlmIGVsZnR5cGUgJiAxNjoKKyAgICAgICAgZXh0cmFmbGFncyA9ICItLXN0cmlwLWRlYnVnIC0tcmVtb3ZlLXNlY3Rpb249LmNvbW1lbnQgLS1yZW1vdmUtc2VjdGlvbj0ubm90ZSAtLXByZXNlcnZlLWRhdGVzIgorICAgICMgLnNvIGFuZCBzaGFyZWQgbGlicmFyeQorICAgIGVsaWYgIi5zbyIgaW4gZmlsZSBhbmQgZWxmdHlwZSAmIDg6CisgICAgICAgIGV4dHJhZmxhZ3MgPSAiLS1yZW1vdmUtc2VjdGlvbj0uY29tbWVudCAtLXJlbW92ZS1zZWN0aW9uPS5ub3RlIC0tc3RyaXAtdW5uZWVkZWQiCisgICAgIyBzaGFyZWQgb3IgZXhlY3V0YWJsZToKKyAgICBlbGlmIGVsZnR5cGUgJiA4IG9yIGVsZnR5cGUgJiA0OgorICAgICAgICBleHRyYWZsYWdzID0gIi0tcmVtb3ZlLXNlY3Rpb249LmNvbW1lbnQgLS1yZW1vdmUtc2VjdGlvbj0ubm90ZSIKKworICAgIHN0cmlwY21kID0gIiclcycgJXMgJyVzJyIgJSAoc3RyaXAsIGV4dHJhZmxhZ3MsIGZpbGUpCisgICAgYmIuZGVidWcoMSwgInJ1bnN0cmlwOiAlcyIgJSBzdHJpcGNtZCkKKworICAgIHRyeToKKyAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoc3RyaXBjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKKyAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgYmIuZXJyb3IoInJ1bnN0cmlwOiAnJXMnIHN0cmlwIGNvbW1hbmQgZmFpbGVkIHdpdGggJXMgKCVzKSIgJSAoc3RyaXBjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgaWYgbmV3bW9kZToKKyAgICAgICAgb3MuY2htb2QoZmlsZSwgb3JpZ21vZGUpCisKKyAgICByZXR1cm4KKworCitkZWYgZmlsZV90cmFuc2xhdGUoZmlsZSk6CisgICAgZnQgPSBmaWxlLnJlcGxhY2UoIkAiLCAiQGF0QCIpCisgICAgZnQgPSBmdC5yZXBsYWNlKCIgIiwgIkBzcGFjZUAiKQorICAgIGZ0ID0gZnQucmVwbGFjZSgiXHQiLCAiQHRhYkAiKQorICAgIGZ0ID0gZnQucmVwbGFjZSgiWyIsICJAb3BlbmJyYWNlQCIpCisgICAgZnQgPSBmdC5yZXBsYWNlKCJdIiwgIkBjbG9zZWJyYWNlQCIpCisgICAgZnQgPSBmdC5yZXBsYWNlKCJfIiwgIkB1bmRlcnNjb3JlQCIpCisgICAgcmV0dXJuIGZ0CisKK2RlZiBmaWxlZGVwcnVubmVyKGFyZyk6CisgICAgaW1wb3J0IHJlLCBzdWJwcm9jZXNzLCBzaGxleAorCisgICAgKHBrZywgcGtnZmlsZXMsIHJwbWRlcHMsIHBrZ2Rlc3QpID0gYXJnCisgICAgcHJvdmlkZXMgPSB7fQorICAgIHJlcXVpcmVzID0ge30KKworICAgIHIgPSByZS5jb21waWxlKHInWzw+PV0rICtbXiBdKicpCisKKyAgICBkZWYgcHJvY2Vzc19kZXBzKHBpcGUsIHBrZywgcGtnZGVzdCwgcHJvdmlkZXMsIHJlcXVpcmVzKToKKyAgICAgICAgZm9yIGxpbmUgaW4gcGlwZToKKyAgICAgICAgICAgIGYgPSBsaW5lLnNwbGl0KCIgIiwgMSlbMF0uc3RyaXAoKQorICAgICAgICAgICAgbGluZSA9IGxpbmUuc3BsaXQoIiAiLCAxKVsxXS5zdHJpcCgpCisKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiUmVxdWlyZXM6Iik6CisgICAgICAgICAgICAgICAgaSA9IHJlcXVpcmVzCisgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgiUHJvdmlkZXM6Iik6CisgICAgICAgICAgICAgICAgaSA9IHByb3ZpZGVzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZpbGUgPSBmLnJlcGxhY2UocGtnZGVzdCArICIvIiArIHBrZywgIiIpCisgICAgICAgICAgICBmaWxlID0gZmlsZV90cmFuc2xhdGUoZmlsZSkKKyAgICAgICAgICAgIHZhbHVlID0gbGluZS5zcGxpdCgiOiIsIDEpWzFdLnN0cmlwKCkKKyAgICAgICAgICAgIHZhbHVlID0gci5zdWIocicoXGc8MD4pJywgdmFsdWUpCisKKyAgICAgICAgICAgIGlmIHZhbHVlLnN0YXJ0c3dpdGgoInJwbWxpYigiKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgdmFsdWUgPT0gInB5dGhvbiI6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGZpbGUgbm90IGluIGk6CisgICAgICAgICAgICAgICAgaVtmaWxlXSA9IFtdCisgICAgICAgICAgICBpW2ZpbGVdLmFwcGVuZCh2YWx1ZSkKKworICAgICAgICByZXR1cm4gcHJvdmlkZXMsIHJlcXVpcmVzCisKKyAgICB0cnk6CisgICAgICAgIGRlcF9wb3BlbiA9IHN1YnByb2Nlc3MuUG9wZW4oc2hsZXguc3BsaXQocnBtZGVwcykgKyBwa2dmaWxlcywgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgcHJvdmlkZXMsIHJlcXVpcmVzID0gcHJvY2Vzc19kZXBzKGRlcF9wb3Blbi5zdGRvdXQsIHBrZywgcGtnZGVzdCwgcHJvdmlkZXMsIHJlcXVpcmVzKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGJiLmVycm9yKCJycG1kZXBzOiAnJXMnIGNvbW1hbmQgZmFpbGVkLCAnJXMnIiAlIChzaGxleC5zcGxpdChycG1kZXBzKSArIHBrZ2ZpbGVzLCBlKSkKKyAgICAgICAgcmFpc2UgZQorCisgICAgcmV0dXJuIChwa2csIHByb3ZpZGVzLCByZXF1aXJlcykKKworCitkZWYgcmVhZF9zaGxpYl9wcm92aWRlcnMoZCk6CisgICAgaW1wb3J0IHJlCisKKyAgICBzaGxpYl9wcm92aWRlciA9IHt9CisgICAgc2hsaWJzX2RpcnMgPSBkLmdldFZhcignU0hMSUJTRElSUycsIFRydWUpLnNwbGl0KCkKKyAgICBsaXN0X3JlID0gcmUuY29tcGlsZSgnXiguKilcLmxpc3QkJykKKyAgICAjIEdvIGZyb20gbGVhc3QgdG8gbW9zdCBzcGVjaWZpYyBzaW5jZSB0aGUgbGFzdCBvbmUgZm91bmQgd2lucworICAgIGZvciBkaXIgaW4gcmV2ZXJzZWQoc2hsaWJzX2RpcnMpOgorICAgICAgICBiYi5kZWJ1ZygyLCAiUmVhZGluZyBzaGxpYiBwcm92aWRlcnMgaW4gJXMiICUgKGRpcikpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXIpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZm9yIGZpbGUgaW4gb3MubGlzdGRpcihkaXIpOgorICAgICAgICAgICAgbSA9IGxpc3RfcmUubWF0Y2goZmlsZSkKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgZGVwX3BrZyA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICBmZCA9IG9wZW4ob3MucGF0aC5qb2luKGRpciwgZmlsZSkpCisgICAgICAgICAgICAgICAgbGluZXMgPSBmZC5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgIGZkLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBmb3IgbCBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgcyA9IGwuc3RyaXAoKS5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgICAgIGlmIHNbMF0gbm90IGluIHNobGliX3Byb3ZpZGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgc2hsaWJfcHJvdmlkZXJbc1swXV0gPSB7fQorICAgICAgICAgICAgICAgICAgICBzaGxpYl9wcm92aWRlcltzWzBdXVtzWzFdXSA9IChkZXBfcGtnLCBzWzJdKQorICAgIHJldHVybiBzaGxpYl9wcm92aWRlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYWNrYWdlX21hbmFnZXIucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3BhY2thZ2VfbWFuYWdlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTJlZDQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYWNrYWdlX21hbmFnZXIucHkKQEAgLTAsMCArMSwxOTAwIEBACitmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3RtZXRob2QKK2ltcG9ydCBvcworaW1wb3J0IGdsb2IKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBiYgoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgb2UudXRpbHMKKworCisjIHRoaXMgY2FuIGJlIHVzZWQgYnkgYWxsIFBNIGJhY2tlbmRzIHRvIGNyZWF0ZSB0aGUgaW5kZXggZmlsZXMgaW4gcGFyYWxsZWwKK2RlZiBjcmVhdGVfaW5kZXgoYXJnKToKKyAgICBpbmRleF9jbWQgPSBhcmcKKworICAgIHRyeToKKyAgICAgICAgYmIubm90ZSgiRXhlY3V0aW5nICclcycgLi4uIiAlIGluZGV4X2NtZCkKKyAgICAgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoaW5kZXhfY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgIHJldHVybigiSW5kZXggY3JlYXRpb24gY29tbWFuZCAnJXMnIGZhaWxlZCB3aXRoIHJldHVybiBjb2RlICVkOlxuJXMiICUKKyAgICAgICAgICAgICAgIChlLmNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICBpZiByZXN1bHQ6CisgICAgICAgIGJiLm5vdGUocmVzdWx0KQorCisgICAgcmV0dXJuIE5vbmUKKworCitjbGFzcyBJbmRleGVyKG9iamVjdCk6CisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCBkZXBsb3lfZGlyKToKKyAgICAgICAgc2VsZi5kID0gZAorICAgICAgICBzZWxmLmRlcGxveV9kaXIgPSBkZXBsb3lfZGlyCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgd3JpdGVfaW5kZXgoc2VsZik6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBScG1JbmRleGVyKEluZGV4ZXIpOgorICAgIGRlZiBnZXRfbWxfcHJlZml4X2FuZF9vc19saXN0KHNlbGYsIGFyY2hfdmFyPU5vbmUsIG9zX3Zhcj1Ob25lKToKKyAgICAgICAgcGFja2FnZV9hcmNocyA9IHsKKyAgICAgICAgICAgICdkZWZhdWx0JzogW10sCisgICAgICAgIH0KKworICAgICAgICB0YXJnZXRfb3MgPSB7CisgICAgICAgICAgICAnZGVmYXVsdCc6ICIiLAorICAgICAgICB9CisKKyAgICAgICAgaWYgYXJjaF92YXIgaXMgbm90IE5vbmUgYW5kIG9zX3ZhciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHBhY2thZ2VfYXJjaHNbJ2RlZmF1bHQnXSA9IHNlbGYuZC5nZXRWYXIoYXJjaF92YXIsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgICAgIHBhY2thZ2VfYXJjaHNbJ2RlZmF1bHQnXS5yZXZlcnNlKCkKKyAgICAgICAgICAgIHRhcmdldF9vc1snZGVmYXVsdCddID0gc2VsZi5kLmdldFZhcihvc192YXIsIFRydWUpLnN0cmlwKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhY2thZ2VfYXJjaHNbJ2RlZmF1bHQnXSA9IHNlbGYuZC5nZXRWYXIoIlBBQ0tBR0VfQVJDSFMiLCBUcnVlKS5zcGxpdCgpCisgICAgICAgICAgICAjIGFyY2ggb3JkZXIgaXMgcmV2ZXJzZWQuICBUaGlzIGVuc3VyZXMgdGhlIC1iZXN0LSBtYXRjaCBpcworICAgICAgICAgICAgIyBsaXN0ZWQgZmlyc3QhCisgICAgICAgICAgICBwYWNrYWdlX2FyY2hzWydkZWZhdWx0J10ucmV2ZXJzZSgpCisgICAgICAgICAgICB0YXJnZXRfb3NbJ2RlZmF1bHQnXSA9IHNlbGYuZC5nZXRWYXIoIlRBUkdFVF9PUyIsIFRydWUpLnN0cmlwKCkKKyAgICAgICAgICAgIG11bHRpbGlicyA9IHNlbGYuZC5nZXRWYXIoJ01VTFRJTElCUycsIFRydWUpIG9yICIiCisgICAgICAgICAgICBmb3IgZXh0IGluIG11bHRpbGlicy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGVleHQgPSBleHQuc3BsaXQoJzonKQorICAgICAgICAgICAgICAgIGlmIGxlbihlZXh0KSA+IDEgYW5kIGVleHRbMF0gPT0gJ211bHRpbGliJzoKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KHNlbGYuZCkKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF90dW5lX2tleSA9ICJERUZBVUxUVFVORV92aXJ0Y2xhc3MtbXVsdGlsaWItIiArIGVleHRbMV0KKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF90dW5lID0gbG9jYWxkYXRhLmdldFZhcihkZWZhdWx0X3R1bmVfa2V5LCBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVmYXVsdF90dW5lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3R1bmVfa2V5ID0gIkRFRkFVTFRUVU5FX01MXyIgKyBlZXh0WzFdCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3R1bmUgPSBsb2NhbGRhdGEuZ2V0VmFyKGRlZmF1bHRfdHVuZV9rZXksIEZhbHNlKQorICAgICAgICAgICAgICAgICAgICBpZiBkZWZhdWx0X3R1bmU6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJERUZBVUxUVFVORSIsIGRlZmF1bHRfdHVuZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZV9hcmNoc1tlZXh0WzFdXSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BBQ0tBR0VfQVJDSFMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkuc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZV9hcmNoc1tlZXh0WzFdXS5yZXZlcnNlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9vc1tlZXh0WzFdXSA9IGxvY2FsZGF0YS5nZXRWYXIoIlRBUkdFVF9PUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpLnN0cmlwKCkKKworICAgICAgICBtbF9wcmVmaXhfbGlzdCA9IGRpY3QoKQorICAgICAgICBmb3IgbWxpYiBpbiBwYWNrYWdlX2FyY2hzOgorICAgICAgICAgICAgaWYgbWxpYiA9PSAnZGVmYXVsdCc6CisgICAgICAgICAgICAgICAgbWxfcHJlZml4X2xpc3RbbWxpYl0gPSBwYWNrYWdlX2FyY2hzW21saWJdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1sX3ByZWZpeF9saXN0W21saWJdID0gbGlzdCgpCisgICAgICAgICAgICAgICAgZm9yIGFyY2ggaW4gcGFja2FnZV9hcmNoc1ttbGliXToKKyAgICAgICAgICAgICAgICAgICAgaWYgYXJjaCBpbiBbJ2FsbCcsICdub2FyY2gnLCAnYW55J106CisgICAgICAgICAgICAgICAgICAgICAgICBtbF9wcmVmaXhfbGlzdFttbGliXS5hcHBlbmQoYXJjaCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1sX3ByZWZpeF9saXN0W21saWJdLmFwcGVuZChtbGliICsgIl8iICsgYXJjaCkKKworICAgICAgICByZXR1cm4gKG1sX3ByZWZpeF9saXN0LCB0YXJnZXRfb3MpCisKKyAgICBkZWYgd3JpdGVfaW5kZXgoc2VsZik6CisgICAgICAgIHNka19wa2dfYXJjaHMgPSAoc2VsZi5kLmdldFZhcignU0RLX1BBQ0tBR0VfQVJDSFMnLCBUcnVlKSBvciAiIikucmVwbGFjZSgnLScsICdfJykuc3BsaXQoKQorICAgICAgICBhbGxfbWxiX3BrZ19hcmNocyA9IChzZWxmLmQuZ2V0VmFyKCdBTExfTVVMVElMSUJfUEFDS0FHRV9BUkNIUycsIFRydWUpIG9yICIiKS5yZXBsYWNlKCctJywgJ18nKS5zcGxpdCgpCisKKyAgICAgICAgbWxiX3ByZWZpeF9saXN0ID0gc2VsZi5nZXRfbWxfcHJlZml4X2FuZF9vc19saXN0KClbMF0KKworICAgICAgICBhcmNocyA9IHNldCgpCisgICAgICAgIGZvciBpdGVtIGluIG1sYl9wcmVmaXhfbGlzdDoKKyAgICAgICAgICAgIGFyY2hzID0gYXJjaHMudW5pb24oc2V0KGkucmVwbGFjZSgnLScsICdfJykgZm9yIGkgaW4gbWxiX3ByZWZpeF9saXN0W2l0ZW1dKSkKKworICAgICAgICBpZiBsZW4oYXJjaHMpID09IDA6CisgICAgICAgICAgICBhcmNocyA9IGFyY2hzLnVuaW9uKHNldChhbGxfbWxiX3BrZ19hcmNocykpCisKKyAgICAgICAgYXJjaHMgPSBhcmNocy51bmlvbihzZXQoc2RrX3BrZ19hcmNocykpCisKKyAgICAgICAgcnBtX2NyZWF0ZXJlcG8gPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgImNyZWF0ZXJlcG8iKQorICAgICAgICBpZiBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0ZFRURfU0lHTicsIFRydWUpID09ICcxJzoKKyAgICAgICAgICAgIHBrZ2ZlZWRfZ3BnX25hbWUgPSBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0ZFRURfR1BHX05BTUUnLCBUcnVlKQorICAgICAgICAgICAgcGtnZmVlZF9ncGdfcGFzcyA9IHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRkVFRF9HUEdfUEFTU1BIUkFTRV9GSUxFJywgVHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBrZ2ZlZWRfZ3BnX25hbWUgPSBOb25lCisgICAgICAgICAgICBwa2dmZWVkX2dwZ19wYXNzID0gTm9uZQorICAgICAgICBncGdfYmluID0gc2VsZi5kLmdldFZhcignR1BHX0JJTicsIFRydWUpIG9yIFwKKyAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAiZ3BnIikKKworICAgICAgICBpbmRleF9jbWRzID0gW10KKyAgICAgICAgcmVwb19zaWduX2NtZHMgPSBbXQorICAgICAgICBycG1fZGlyc19mb3VuZCA9IEZhbHNlCisgICAgICAgIGZvciBhcmNoIGluIGFyY2hzOgorICAgICAgICAgICAgZGJwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSwgJ3JwbWRiJywgYXJjaCkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRicGF0aCk6CisgICAgICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKGRicGF0aCwgVHJ1ZSkKKyAgICAgICAgICAgIGFyY2hfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgYXJjaCkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGFyY2hfZGlyKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpbmRleF9jbWRzLmFwcGVuZCgiJXMgLS1kYnBhdGggJXMgLS11cGRhdGUgLXEgJXMiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnBtX2NyZWF0ZXJlcG8sIGRicGF0aCwgYXJjaF9kaXIpKQorICAgICAgICAgICAgaWYgcGtnZmVlZF9ncGdfbmFtZToKKyAgICAgICAgICAgICAgICByZXBvbWRfZmlsZSA9IG9zLnBhdGguam9pbihhcmNoX2RpciwgJ3JlcG9kYXRhJywgJ3JlcG9tZC54bWwnKQorICAgICAgICAgICAgICAgIGdwZ19jbWQgPSAiJXMgLS1kZXRhY2gtc2lnbiAtLWFybW9yIC0tYmF0Y2ggLS1uby10dHkgLS15ZXMgIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICItLXBhc3NwaHJhc2UtZmlsZSAnJXMnIC11ICclcycgJXMiICUgKGdwZ19iaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ2ZlZWRfZ3BnX3Bhc3MsIHBrZ2ZlZWRfZ3BnX25hbWUsIHJlcG9tZF9maWxlKQorICAgICAgICAgICAgICAgIHJlcG9fc2lnbl9jbWRzLmFwcGVuZChncGdfY21kKQorCisgICAgICAgICAgICBycG1fZGlyc19mb3VuZCA9IFRydWUKKworICAgICAgICBpZiBub3QgcnBtX2RpcnNfZm91bmQ6CisgICAgICAgICAgICBiYi5ub3RlKCJUaGVyZSBhcmUgbm8gcGFja2FnZXMgaW4gJXMiICUgc2VsZi5kZXBsb3lfZGlyKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBDcmVhdGUgcmVwb2RhdGEKKyAgICAgICAgcmVzdWx0ID0gb2UudXRpbHMubXVsdGlwcm9jZXNzX2V4ZWMoaW5kZXhfY21kcywgY3JlYXRlX2luZGV4KQorICAgICAgICBpZiByZXN1bHQ6CisgICAgICAgICAgICBiYi5mYXRhbCgnJXMnICUgKCdcbicuam9pbihyZXN1bHQpKSkKKyAgICAgICAgIyBTaWduIHJlcG9tZAorICAgICAgICByZXN1bHQgPSBvZS51dGlscy5tdWx0aXByb2Nlc3NfZXhlYyhyZXBvX3NpZ25fY21kcywgY3JlYXRlX2luZGV4KQorICAgICAgICBpZiByZXN1bHQ6CisgICAgICAgICAgICBiYi5mYXRhbCgnJXMnICUgKCdcbicuam9pbihyZXN1bHQpKSkKKyAgICAgICAgIyBDb3B5IHB1YmtleShzKSB0byByZXBvCisgICAgICAgIGRpc3Ryb192ZXJzaW9uID0gc2VsZi5kLmdldFZhcignRElTVFJPX1ZFUlNJT04nLCBUcnVlKSBvciAib2UuMCIKKyAgICAgICAgaWYgc2VsZi5kLmdldFZhcignUlBNX1NJR05fUEFDS0FHRVMnLCBUcnVlKSA9PSAnMSc6CisgICAgICAgICAgICBzaHV0aWwuY29weTIoc2VsZi5kLmdldFZhcignUlBNX0dQR19QVUJLRVknLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUlBNLUdQRy1LRVktJXMnICUgZGlzdHJvX3ZlcnNpb24pKQorICAgICAgICBpZiBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0ZFRURfU0lHTicsIFRydWUpID09ICcxJzoKKyAgICAgICAgICAgIHNodXRpbC5jb3B5MihzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0ZFRURfR1BHX1BVQktFWScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSRVBPREFUQS1HUEctS0VZLSVzJyAlIGRpc3Ryb192ZXJzaW9uKSkKKworCitjbGFzcyBPcGtnSW5kZXhlcihJbmRleGVyKToKKyAgICBkZWYgd3JpdGVfaW5kZXgoc2VsZik6CisgICAgICAgIGFyY2hfdmFycyA9IFsiQUxMX01VTFRJTElCX1BBQ0tBR0VfQVJDSFMiLAorICAgICAgICAgICAgICAgICAgICAgIlNES19QQUNLQUdFX0FSQ0hTIiwKKyAgICAgICAgICAgICAgICAgICAgICJNVUxUSUxJQl9BUkNIUyJdCisKKyAgICAgICAgb3BrZ19pbmRleF9jbWQgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgIm9wa2ctbWFrZS1pbmRleCIpCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsICJQYWNrYWdlcyIpKToKKyAgICAgICAgICAgIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgIlBhY2thZ2VzIiksICJ3IikuY2xvc2UoKQorCisgICAgICAgIGluZGV4X2NtZHMgPSBbXQorICAgICAgICBmb3IgYXJjaF92YXIgaW4gYXJjaF92YXJzOgorICAgICAgICAgICAgYXJjaHMgPSBzZWxmLmQuZ2V0VmFyKGFyY2hfdmFyLCBUcnVlKQorICAgICAgICAgICAgaWYgYXJjaHMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmb3IgYXJjaCBpbiBhcmNocy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHBrZ3NfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgYXJjaCkKKyAgICAgICAgICAgICAgICBwa2dzX2ZpbGUgPSBvcy5wYXRoLmpvaW4ocGtnc19kaXIsICJQYWNrYWdlcyIpCisKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihwa2dzX2Rpcik6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGtnc19maWxlKToKKyAgICAgICAgICAgICAgICAgICAgb3Blbihwa2dzX2ZpbGUsICJ3IikuY2xvc2UoKQorCisgICAgICAgICAgICAgICAgaW5kZXhfY21kcy5hcHBlbmQoJyVzIC1yICVzIC1wICVzIC1tICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wa2dfaW5kZXhfY21kLCBwa2dzX2ZpbGUsIHBrZ3NfZmlsZSwgcGtnc19kaXIpKQorCisgICAgICAgIGlmIGxlbihpbmRleF9jbWRzKSA9PSAwOgorICAgICAgICAgICAgYmIubm90ZSgiVGhlcmUgYXJlIG5vIHBhY2thZ2VzIGluICVzISIgJSBzZWxmLmRlcGxveV9kaXIpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICByZXN1bHQgPSBvZS51dGlscy5tdWx0aXByb2Nlc3NfZXhlYyhpbmRleF9jbWRzLCBjcmVhdGVfaW5kZXgpCisgICAgICAgIGlmIHJlc3VsdDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCclcycgJSAoJ1xuJy5qb2luKHJlc3VsdCkpKQorCisKKworY2xhc3MgRHBrZ0luZGV4ZXIoSW5kZXhlcik6CisgICAgZGVmIF9jcmVhdGVfY29uZmlncyhzZWxmKToKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuYXB0X2NvbmZfZGlyKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKHNlbGYuYXB0X2NvbmZfZGlyLCAibGlzdHMiLCAicGFydGlhbCIpKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKHNlbGYuYXB0X2NvbmZfZGlyLCAiYXB0LmNvbmYuZCIpKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKHNlbGYuYXB0X2NvbmZfZGlyLCAicHJlZmVyZW5jZXMuZCIpKQorCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5hcHRfY29uZl9kaXIsICJwcmVmZXJlbmNlcyIpLAorICAgICAgICAgICAgICAgICJ3IikgYXMgcHJlZnNfZmlsZToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLmFwdF9jb25mX2RpciwgInNvdXJjZXMubGlzdCIpLAorICAgICAgICAgICAgICAgICJ3KyIpIGFzIHNvdXJjZXNfZmlsZToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB3aXRoIG9wZW4oc2VsZi5hcHRfY29uZl9maWxlLCAidyIpIGFzIGFwdF9jb25mOgorICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLmQuZXhwYW5kKCIke1NUQUdJTkdfRVRDRElSX05BVElWRX0iKSwKKyAgICAgICAgICAgICAgICAiYXB0IiwgImFwdC5jb25mLnNhbXBsZSIpKSBhcyBhcHRfY29uZl9zYW1wbGU6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gYXB0X2NvbmZfc2FtcGxlLnJlYWQoKS5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IHJlLnN1YigiI1JPT1RGUyMiLCAiL2Rldi9udWxsIiwgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IHJlLnN1YigiI0FQVENPTkYjIiwgc2VsZi5hcHRfY29uZl9kaXIsIGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGFwdF9jb25mLndyaXRlKGxpbmUgKyAiXG4iKQorCisgICAgZGVmIHdyaXRlX2luZGV4KHNlbGYpOgorICAgICAgICBzZWxmLmFwdF9jb25mX2RpciA9IG9zLnBhdGguam9pbihzZWxmLmQuZXhwYW5kKCIke0FQVENPTkZfVEFSR0VUfSIpLAorICAgICAgICAgICAgICAgICJhcHQtZnRwYXJjaGl2ZSIpCisgICAgICAgIHNlbGYuYXB0X2NvbmZfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLmFwdF9jb25mX2RpciwgImFwdC5jb25mIikKKyAgICAgICAgc2VsZi5fY3JlYXRlX2NvbmZpZ3MoKQorCisgICAgICAgIG9zLmVudmlyb25bJ0FQVF9DT05GSUcnXSA9IHNlbGYuYXB0X2NvbmZfZmlsZQorCisgICAgICAgIHBrZ19hcmNocyA9IHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfQVJDSFMnLCBUcnVlKQorICAgICAgICBpZiBwa2dfYXJjaHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBhcmNoX2xpc3QgPSBwa2dfYXJjaHMuc3BsaXQoKQorICAgICAgICBzZGtfcGtnX2FyY2hzID0gc2VsZi5kLmdldFZhcignU0RLX1BBQ0tBR0VfQVJDSFMnLCBUcnVlKQorICAgICAgICBpZiBzZGtfcGtnX2FyY2hzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIGEgaW4gc2RrX3BrZ19hcmNocy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGlmIGEgbm90IGluIHBrZ19hcmNoczoKKyAgICAgICAgICAgICAgICAgICAgYXJjaF9saXN0LmFwcGVuZChhKQorCisgICAgICAgIGFsbF9tbGJfcGtnX2FyY2hfbGlzdCA9IChzZWxmLmQuZ2V0VmFyKCdBTExfTVVMVElMSUJfUEFDS0FHRV9BUkNIUycsIFRydWUpIG9yICIiKS5yZXBsYWNlKCctJywgJ18nKS5zcGxpdCgpCisgICAgICAgIGFyY2hfbGlzdC5leHRlbmQoYXJjaCBmb3IgYXJjaCBpbiBhbGxfbWxiX3BrZ19hcmNoX2xpc3QgaWYgYXJjaCBub3QgaW4gYXJjaF9saXN0KQorCisgICAgICAgIGFwdF9mdHBhcmNoaXZlID0gYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJhcHQtZnRwYXJjaGl2ZSIpCisgICAgICAgIGd6aXAgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgImd6aXAiKQorCisgICAgICAgIGluZGV4X2NtZHMgPSBbXQorICAgICAgICBkZWJfZGlyc19mb3VuZCA9IEZhbHNlCisgICAgICAgIGZvciBhcmNoIGluIGFyY2hfbGlzdDoKKyAgICAgICAgICAgIGFyY2hfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgYXJjaCkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGFyY2hfZGlyKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBjbWQgPSAiY2QgJXM7IFBTRVVET19VTkxPQUQ9MSAlcyBwYWNrYWdlcyAuID4gUGFja2FnZXM7IiAlIChhcmNoX2RpciwgYXB0X2Z0cGFyY2hpdmUpCisKKyAgICAgICAgICAgIGNtZCArPSAiJXMgLWZjIFBhY2thZ2VzID4gUGFja2FnZXMuZ3o7IiAlIGd6aXAKKworICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihhcmNoX2RpciwgIlJlbGVhc2UiKSwgIncrIikgYXMgcmVsZWFzZToKKyAgICAgICAgICAgICAgICByZWxlYXNlLndyaXRlKCJMYWJlbDogJXNcbiIgJSBhcmNoKQorCisgICAgICAgICAgICBjbWQgKz0gIlBTRVVET19VTkxPQUQ9MSAlcyByZWxlYXNlIC4gPj4gUmVsZWFzZSIgJSBhcHRfZnRwYXJjaGl2ZQorICAgICAgICAgICAgCisgICAgICAgICAgICBpbmRleF9jbWRzLmFwcGVuZChjbWQpCisKKyAgICAgICAgICAgIGRlYl9kaXJzX2ZvdW5kID0gVHJ1ZQorCisgICAgICAgIGlmIG5vdCBkZWJfZGlyc19mb3VuZDoKKyAgICAgICAgICAgIGJiLm5vdGUoIlRoZXJlIGFyZSBubyBwYWNrYWdlcyBpbiAlcyIgJSBzZWxmLmRlcGxveV9kaXIpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICByZXN1bHQgPSBvZS51dGlscy5tdWx0aXByb2Nlc3NfZXhlYyhpbmRleF9jbWRzLCBjcmVhdGVfaW5kZXgpCisgICAgICAgIGlmIHJlc3VsdDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCclcycgJSAoJ1xuJy5qb2luKHJlc3VsdCkpKQorCisKKworY2xhc3MgUGtnc0xpc3Qob2JqZWN0KToKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIHJvb3Rmc19kaXIpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYucm9vdGZzX2RpciA9IHJvb3Rmc19kaXIKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBsaXN0KHNlbGYsIGZvcm1hdD1Ob25lKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIFJwbVBrZ3NMaXN0KFBrZ3NMaXN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgcm9vdGZzX2RpciwgYXJjaF92YXI9Tm9uZSwgb3NfdmFyPU5vbmUpOgorICAgICAgICBzdXBlcihScG1Qa2dzTGlzdCwgc2VsZikuX19pbml0X18oZCwgcm9vdGZzX2RpcikKKworICAgICAgICBzZWxmLnJwbV9jbWQgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgInJwbSIpCisgICAgICAgIHNlbGYuaW1hZ2VfcnBtbGliID0gb3MucGF0aC5qb2luKHNlbGYucm9vdGZzX2RpciwgJ3Zhci9saWIvcnBtJykKKworICAgICAgICBzZWxmLm1sX3ByZWZpeF9saXN0LCBzZWxmLm1sX29zX2xpc3QgPSBcCisgICAgICAgICAgICBScG1JbmRleGVyKGQsIHJvb3Rmc19kaXIpLmdldF9tbF9wcmVmaXhfYW5kX29zX2xpc3QoYXJjaF92YXIsIG9zX3ZhcikKKworICAgICAgICAjIERldGVybWluZSBycG0gdmVyc2lvbgorICAgICAgICBjbWQgPSAiJXMgLS12ZXJzaW9uIiAlIHNlbGYucnBtX2NtZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiR2V0dGluZyBycG0gdmVyc2lvbiBmYWlsZWQuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKyAgICAgICAgc2VsZi5ycG1fdmVyc2lvbiA9IGludChvdXRwdXQuc3BsaXQoKVstMV0uc3BsaXQoJy4nKVswXSkKKworICAgICcnJworICAgIFRyYW5zbGF0ZSB0aGUgUlBNL1NtYXJ0IGZvcm1hdCBuYW1lcyB0byB0aGUgT0UgbXVsdGlsaWIgZm9ybWF0IG5hbWVzCisgICAgJycnCisgICAgZGVmIF9wa2dfdHJhbnNsYXRlX3NtYXJ0X3RvX29lKHNlbGYsIHBrZywgYXJjaCk6CisgICAgICAgIG5ld19wa2cgPSBwa2cKKyAgICAgICAgbmV3X2FyY2ggPSBhcmNoCisgICAgICAgIGZpeGVkX2FyY2ggPSBhcmNoLnJlcGxhY2UoJ18nLCAnLScpCisgICAgICAgIGZvdW5kID0gMAorICAgICAgICBmb3IgbWxpYiBpbiBzZWxmLm1sX3ByZWZpeF9saXN0OgorICAgICAgICAgICAgZm9yIGNtcF9hcmNoIGluIHNlbGYubWxfcHJlZml4X2xpc3RbbWxpYl06CisgICAgICAgICAgICAgICAgZml4ZWRfY21wX2FyY2ggPSBjbXBfYXJjaC5yZXBsYWNlKCdfJywgJy0nKQorICAgICAgICAgICAgICAgIGlmIGZpeGVkX2FyY2ggPT0gZml4ZWRfY21wX2FyY2g6CisgICAgICAgICAgICAgICAgICAgIGlmIG1saWIgPT0gJ2RlZmF1bHQnOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3BrZyA9IHBrZworICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2FyY2ggPSBjbXBfYXJjaAorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3BrZyA9IG1saWIgKyAnLScgKyBwa2cKKyAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgbmVlZCB0byBzdHJpcCBvZmYgdGhlICR7bWxpYn1fIHByZWZpeCBvbiB0aGUgYXJjaAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2FyY2ggPSBjbXBfYXJjaC5yZXBsYWNlKG1saWIgKyAnXycsICcnKQorCisgICAgICAgICAgICAgICAgICAgICMgV29ya2Fyb3VuZCBmb3IgYnVnIDM1NjUuIFNpbXBseSBsb29rIHRvIHNlZSBpZiB3ZQorICAgICAgICAgICAgICAgICAgICAjIGtub3cgb2YgYSBwYWNrYWdlIHdpdGggdGhhdCBuYW1lLCBpZiBub3QgdHJ5IGFnYWluIQorICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLmQuZ2V0VmFyKCdQS0dEQVRBX0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVudGltZS1yZXZlcnNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3BrZykKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZmlsZW5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSAxCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBmb3VuZCA9PSAxIGFuZCBmaXhlZF9hcmNoID09IGZpeGVkX2NtcF9hcmNoOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICNiYi5ub3RlKCclcywgJXMgLT4gJXMsICVzJyAlIChwa2csIGFyY2gsIG5ld19wa2csIG5ld19hcmNoKSkKKyAgICAgICAgcmV0dXJuIG5ld19wa2csIG5ld19hcmNoCisKKyAgICBkZWYgX2xpc3RfcGtnX2RlcHMoc2VsZik6CisgICAgICAgIGNtZCA9IFtiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgInJwbXJlc29sdmUiKSwKKyAgICAgICAgICAgICAgICItdCIsIHNlbGYuaW1hZ2VfcnBtbGliXQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKS5zdHJpcCgpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkNhbm5vdCBnZXQgdGhlIHBhY2thZ2UgZGVwZW5kZW5jaWVzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKCcgJy5qb2luKGNtZCksIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgIHJldHVybiBvdXRwdXQKKworICAgIGRlZiBsaXN0KHNlbGYsIGZvcm1hdD1Ob25lKToKKyAgICAgICAgaWYgZm9ybWF0ID09ICJkZXBzIjoKKyAgICAgICAgICAgIGlmIHNlbGYucnBtX3ZlcnNpb24gPT0gNDoKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiJ2RlcHMnIGZvcm1hdCBkZXBlbmRlbmN5IGxpc3RpbmdzIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggcnBtIDQgc2luY2UgcnBtcmVzb2x2ZSBkb2VzIG5vdCB3b3JrIikKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9saXN0X3BrZ19kZXBzKCkKKworICAgICAgICBjbWQgPSBzZWxmLnJwbV9jbWQgKyAnIC0tcm9vdCAnICsgc2VsZi5yb290ZnNfZGlyCisgICAgICAgIGNtZCArPSAnIC1EICJfZGJwYXRoIC92YXIvbGliL3JwbSIgLXFhJworICAgICAgICBpZiBzZWxmLnJwbV92ZXJzaW9uID09IDQ6CisgICAgICAgICAgICBjbWQgKz0gIiAtLXFmICdbJXtOQU1FfSAle0FSQ0h9ICV7VkVSU0lPTn1cbl0nIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY21kICs9ICIgLS1xZiAnWyV7TkFNRX0gJXtBUkNIfSAle1ZFUlNJT059ICV7UEFDS0FHRU9SSUdJTn1cbl0nIgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgYmIubm90ZShjbWQpCisgICAgICAgICAgICB0bXBfb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpLnN0cmlwKCkKKworICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJDYW5ub3QgZ2V0IHRoZSBpbnN0YWxsZWQgcGFja2FnZXMgbGlzdC4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgIG91dHB1dCA9IGxpc3QoKQorICAgICAgICBmb3IgbGluZSBpbiB0bXBfb3V0cHV0LnNwbGl0KCdcbicpOgorICAgICAgICAgICAgaWYgbGVuKGxpbmUuc3RyaXAoKSkgPT0gMDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcGtnID0gbGluZS5zcGxpdCgpWzBdCisgICAgICAgICAgICBhcmNoID0gbGluZS5zcGxpdCgpWzFdCisgICAgICAgICAgICB2ZXIgPSBsaW5lLnNwbGl0KClbMl0KKyAgICAgICAgICAgICMgU2tpcCBHUEcga2V5cworICAgICAgICAgICAgaWYgcGtnID09ICdncGctcHVia2V5JzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgc2VsZi5ycG1fdmVyc2lvbiA9PSA0OgorICAgICAgICAgICAgICAgIHBrZ29yaWdpbiA9ICJ1bmtub3duIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwa2dvcmlnaW4gPSBsaW5lLnNwbGl0KClbM10KKyAgICAgICAgICAgIG5ld19wa2csIG5ld19hcmNoID0gc2VsZi5fcGtnX3RyYW5zbGF0ZV9zbWFydF90b19vZShwa2csIGFyY2gpCisKKyAgICAgICAgICAgIGlmIGZvcm1hdCA9PSAiYXJjaCI6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnJXMgJXMnICUgKG5ld19wa2csIG5ld19hcmNoKSkKKyAgICAgICAgICAgIGVsaWYgZm9ybWF0ID09ICJmaWxlIjoKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCclcyAlcyAlcycgJSAobmV3X3BrZywgcGtnb3JpZ2luLCBuZXdfYXJjaCkpCisgICAgICAgICAgICBlbGlmIGZvcm1hdCA9PSAidmVyIjoKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCclcyAlcyAlcycgJSAobmV3X3BrZywgbmV3X2FyY2gsIHZlcikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJyVzJyAlIChuZXdfcGtnKSkKKworICAgICAgICAgICAgb3V0cHV0LnNvcnQoKQorCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4ob3V0cHV0KQorCisKK2NsYXNzIE9wa2dQa2dzTGlzdChQa2dzTGlzdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIHJvb3Rmc19kaXIsIGNvbmZpZ19maWxlKToKKyAgICAgICAgc3VwZXIoT3BrZ1BrZ3NMaXN0LCBzZWxmKS5fX2luaXRfXyhkLCByb290ZnNfZGlyKQorCisgICAgICAgIHNlbGYub3BrZ19jbWQgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgIm9wa2ciKQorICAgICAgICBzZWxmLm9wa2dfYXJncyA9ICItZiAlcyAtbyAlcyAiICUgKGNvbmZpZ19maWxlLCByb290ZnNfZGlyKQorICAgICAgICBzZWxmLm9wa2dfYXJncyArPSBzZWxmLmQuZ2V0VmFyKCJPUEtHX0FSR1MiLCBUcnVlKQorCisgICAgZGVmIGxpc3Qoc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICBvcGtnX3F1ZXJ5X2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAib3BrZy1xdWVyeS1oZWxwZXIucHkiKQorCisgICAgICAgIGlmIGZvcm1hdCA9PSAiYXJjaCI6CisgICAgICAgICAgICBjbWQgPSAiJXMgJXMgc3RhdHVzIHwgJXMgLWEiICUgXAorICAgICAgICAgICAgICAgIChzZWxmLm9wa2dfY21kLCBzZWxmLm9wa2dfYXJncywgb3BrZ19xdWVyeV9jbWQpCisgICAgICAgIGVsaWYgZm9ybWF0ID09ICJmaWxlIjoKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyBzdGF0dXMgfCAlcyAtZiIgJSBcCisgICAgICAgICAgICAgICAgKHNlbGYub3BrZ19jbWQsIHNlbGYub3BrZ19hcmdzLCBvcGtnX3F1ZXJ5X2NtZCkKKyAgICAgICAgZWxpZiBmb3JtYXQgPT0gInZlciI6CisgICAgICAgICAgICBjbWQgPSAiJXMgJXMgc3RhdHVzIHwgJXMgLXYiICUgXAorICAgICAgICAgICAgICAgIChzZWxmLm9wa2dfY21kLCBzZWxmLm9wa2dfYXJncywgb3BrZ19xdWVyeV9jbWQpCisgICAgICAgIGVsaWYgZm9ybWF0ID09ICJkZXBzIjoKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyBzdGF0dXMgfCAlcyIgJSBcCisgICAgICAgICAgICAgICAgKHNlbGYub3BrZ19jbWQsIHNlbGYub3BrZ19hcmdzLCBvcGtnX3F1ZXJ5X2NtZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyBsaXN0X2luc3RhbGxlZCB8IGN1dCAtZCcgJyAtZjEiICUgXAorICAgICAgICAgICAgICAgIChzZWxmLm9wa2dfY21kLCBzZWxmLm9wa2dfYXJncykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkuc3RyaXAoKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJDYW5ub3QgZ2V0IHRoZSBpbnN0YWxsZWQgcGFja2FnZXMgbGlzdC4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgIGlmIG91dHB1dCBhbmQgZm9ybWF0ID09ICJmaWxlIjoKKyAgICAgICAgICAgIHRtcF9vdXRwdXQgPSAiIgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgIHBrZywgcGtnX2ZpbGUsIHBrZ19hcmNoID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYucm9vdGZzX2RpciwgcGtnX2FyY2gsIHBrZ19maWxlKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZ1bGxfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIHRtcF9vdXRwdXQgKz0gIiVzICVzICVzXG4iICUgKHBrZywgZnVsbF9wYXRoLCBwa2dfYXJjaCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0bXBfb3V0cHV0ICs9ICIlcyAlcyAlc1xuIiAlIChwa2csIHBrZ19maWxlLCBwa2dfYXJjaCkKKworICAgICAgICAgICAgb3V0cHV0ID0gdG1wX291dHB1dAorCisgICAgICAgIHJldHVybiBvdXRwdXQKKworCitjbGFzcyBEcGtnUGtnc0xpc3QoUGtnc0xpc3QpOgorICAgIGRlZiBsaXN0KHNlbGYsIGZvcm1hdD1Ob25lKToKKyAgICAgICAgY21kID0gW2JiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAiZHBrZy1xdWVyeSIpLAorICAgICAgICAgICAgICAgIi0tYWRtaW5kaXI9JXMvdmFyL2xpYi9kcGtnIiAlIHNlbGYucm9vdGZzX2RpciwKKyAgICAgICAgICAgICAgICItVyJdCisKKyAgICAgICAgaWYgZm9ybWF0ID09ICJhcmNoIjoKKyAgICAgICAgICAgIGNtZC5hcHBlbmQoIi1mPSR7UGFja2FnZX0gJHtQYWNrYWdlQXJjaH1cbiIpCisgICAgICAgIGVsaWYgZm9ybWF0ID09ICJmaWxlIjoKKyAgICAgICAgICAgIGNtZC5hcHBlbmQoIi1mPSR7UGFja2FnZX0gJHtQYWNrYWdlfV8ke1ZlcnNpb259XyR7QXJjaGl0ZWN0dXJlfS5kZWIgJHtQYWNrYWdlQXJjaH1cbiIpCisgICAgICAgIGVsaWYgZm9ybWF0ID09ICJ2ZXIiOgorICAgICAgICAgICAgY21kLmFwcGVuZCgiLWY9JHtQYWNrYWdlfSAke1BhY2thZ2VBcmNofSAke1ZlcnNpb259XG4iKQorICAgICAgICBlbGlmIGZvcm1hdCA9PSAiZGVwcyI6CisgICAgICAgICAgICBjbWQuYXBwZW5kKCItZj1QYWNrYWdlOiAke1BhY2thZ2V9XG5EZXBlbmRzOiAke0RlcGVuZHN9XG5SZWNvbW1lbmRzOiAke1JlY29tbWVuZHN9XG5cbiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWQuYXBwZW5kKCItZj0ke1BhY2thZ2V9XG4iKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKS5zdHJpcCgpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkNhbm5vdCBnZXQgdGhlIGluc3RhbGxlZCBwYWNrYWdlcyBsaXN0LiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKCcgJy5qb2luKGNtZCksIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgIGlmIGZvcm1hdCA9PSAiZmlsZSI6CisgICAgICAgICAgICB0bXBfb3V0cHV0ID0gIiIKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHR1cGxlKG91dHB1dC5zcGxpdCgnXG4nKSk6CisgICAgICAgICAgICAgICAgaWYgbm90IGxpbmUuc3RyaXAoKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBwa2csIHBrZ19maWxlLCBwa2dfYXJjaCA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnJvb3Rmc19kaXIsIHBrZ19hcmNoLCBwa2dfZmlsZSkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmdWxsX3BhdGgpOgorICAgICAgICAgICAgICAgICAgICB0bXBfb3V0cHV0ICs9ICIlcyAlcyAlc1xuIiAlIChwa2csIGZ1bGxfcGF0aCwgcGtnX2FyY2gpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdG1wX291dHB1dCArPSAiJXMgJXMgJXNcbiIgJSAocGtnLCBwa2dfZmlsZSwgcGtnX2FyY2gpCisKKyAgICAgICAgICAgIG91dHB1dCA9IHRtcF9vdXRwdXQKKyAgICAgICAgZWxpZiBmb3JtYXQgPT0gImRlcHMiOgorICAgICAgICAgICAgb3BrZ19xdWVyeV9jbWQgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgIm9wa2ctcXVlcnktaGVscGVyLnB5IikKKyAgICAgICAgICAgIGZpbGVfb3V0ID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgICAgIGZpbGVfb3V0LndyaXRlKG91dHB1dCkKKyAgICAgICAgICAgIGZpbGVfb3V0LmZsdXNoKCkKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCJjYXQgJXMgfCAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlX291dC5uYW1lLCBvcGtnX3F1ZXJ5X2NtZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsPVRydWUpCisgICAgICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBmaWxlX291dC5jbG9zZSgpCisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIkNhbm5vdCBjb21wdXRlIHBhY2thZ2VzIGRlcGVuZGVuY2llcy4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoZS5jbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgICAgICBmaWxlX291dC5jbG9zZSgpCisKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisKK2NsYXNzIFBhY2thZ2VNYW5hZ2VyKG9iamVjdCk6CisgICAgIiIiCisgICAgVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcy4gRG8gbm90IGluc3RhbnRpYXRlIHRoaXMgZGlyZWN0bHkuCisgICAgIiIiCisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc2VsZi5kID0gZAorICAgICAgICBzZWxmLmRlcGxveV9kaXIgPSBOb25lCisgICAgICAgIHNlbGYuZGVwbG95X2xvY2sgPSBOb25lCisgICAgICAgIHNlbGYuZmVlZF91cmlzID0gc2VsZi5kLmdldFZhcignUEFDS0FHRV9GRUVEX1VSSVMnLCBUcnVlKSBvciAiIgorICAgICAgICBzZWxmLmZlZWRfcHJlZml4ID0gc2VsZi5kLmdldFZhcignUEFDS0FHRV9GRUVEX1BSRUZJWCcsIFRydWUpIG9yICIiCisKKyAgICAiIiIKKyAgICBVcGRhdGUgdGhlIHBhY2thZ2UgbWFuYWdlciBwYWNrYWdlIGRhdGFiYXNlLgorICAgICIiIgorICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiB1cGRhdGUoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgICIiIgorICAgIEluc3RhbGwgYSBsaXN0IG9mIHBhY2thZ2VzLiAncGtncycgaXMgYSBsaXN0IG9iamVjdC4gSWYgJ2F0dGVtcHRfb25seScgaXMKKyAgICBUcnVlLCBpbnN0YWxsYXRpb24gZmFpbHVyZXMgYXJlIGlnbm9yZWQuCisgICAgIiIiCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGluc3RhbGwoc2VsZiwgcGtncywgYXR0ZW1wdF9vbmx5PUZhbHNlKToKKyAgICAgICAgcGFzcworCisgICAgIiIiCisgICAgUmVtb3ZlIGEgbGlzdCBvZiBwYWNrYWdlcy4gJ3BrZ3MnIGlzIGEgbGlzdCBvYmplY3QuIElmICd3aXRoX2RlcGVuZGVuY2llcycKKyAgICBpcyBGYWxzZSwgdGhlIGFueSBkZXBlbmRlbmNpZXMgYXJlIGxlZnQgaW4gcGxhY2UuCisgICAgIiIiCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHJlbW92ZShzZWxmLCBwa2dzLCB3aXRoX2RlcGVuZGVuY2llcz1UcnVlKToKKyAgICAgICAgcGFzcworCisgICAgIiIiCisgICAgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIHRoZSBpbmRleCBmaWxlcworICAgICIiIgorICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiB3cml0ZV9pbmRleChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHJlbW92ZV9wYWNrYWdpbmdfZGF0YShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGxpc3RfaW5zdGFsbGVkKHNlbGYsIGZvcm1hdD1Ob25lKToKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGluc2VydF9mZWVkc191cmlzKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICAiIiIKKyAgICBJbnN0YWxsIGNvbXBsZW1lbnRhcnkgcGFja2FnZXMgYmFzZWQgdXBvbiB0aGUgbGlzdCBvZiBjdXJyZW50bHkgaW5zdGFsbGVkCisgICAgcGFja2FnZXMgZS5nLiBsb2NhbGVzLCAqLWRldiwgKi1kYmcsIGV0Yy4gVGhpcyB3aWxsIG9ubHkgYXR0ZW1wdCB0byBpbnN0YWxsCisgICAgdGhlc2UgcGFja2FnZXMsIGlmIHRoZXkgZG9uJ3QgZXhpc3QgdGhlbiBubyBlcnJvciB3aWxsIG9jY3VyLiAgTm90ZTogZXZlcnkKKyAgICBiYWNrZW5kIG5lZWRzIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBleHBsaWNpdGx5IGFmdGVyIHRoZSBub3JtYWwgcGFja2FnZQorICAgIGluc3RhbGxhdGlvbgorICAgICIiIgorICAgIGRlZiBpbnN0YWxsX2NvbXBsZW1lbnRhcnkoc2VsZiwgZ2xvYnM9Tm9uZSk6CisgICAgICAgICMgd2UgbmVlZCB0byB3cml0ZSB0aGUgbGlzdCBvZiBpbnN0YWxsZWQgcGFja2FnZXMgdG8gYSBmaWxlIGJlY2F1c2UgdGhlCisgICAgICAgICMgb2UtcGtnZGF0YS11dGlsIHJlYWRzIGl0IGZyb20gYSBmaWxlCisgICAgICAgIGluc3RhbGxlZF9wa2dzX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5kLmdldFZhcignV09SS0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnN0YWxsZWRfcGtncy50eHQiKQorICAgICAgICB3aXRoIG9wZW4oaW5zdGFsbGVkX3BrZ3NfZmlsZSwgIncrIikgYXMgaW5zdGFsbGVkX3BrZ3M6CisgICAgICAgICAgICBpbnN0YWxsZWRfcGtncy53cml0ZShzZWxmLmxpc3RfaW5zdGFsbGVkKCJhcmNoIikpCisKKyAgICAgICAgaWYgZ2xvYnMgaXMgTm9uZToKKyAgICAgICAgICAgIGdsb2JzID0gc2VsZi5kLmdldFZhcignSU1BR0VfSU5TVEFMTF9DT01QTEVNRU5UQVJZJywgVHJ1ZSkKKyAgICAgICAgICAgIHNwbGl0X2xpbmd1YXMgPSBzZXQoKQorCisgICAgICAgICAgICBmb3IgdHJhbnNsYXRpb24gaW4gc2VsZi5kLmdldFZhcignSU1BR0VfTElOR1VBUycsIFRydWUpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgc3BsaXRfbGluZ3Vhcy5hZGQodHJhbnNsYXRpb24pCisgICAgICAgICAgICAgICAgc3BsaXRfbGluZ3Vhcy5hZGQodHJhbnNsYXRpb24uc3BsaXQoJy0nKVswXSkKKworICAgICAgICAgICAgc3BsaXRfbGluZ3VhcyA9IHNvcnRlZChzcGxpdF9saW5ndWFzKQorCisgICAgICAgICAgICBmb3IgbGFuZyBpbiBzcGxpdF9saW5ndWFzOgorICAgICAgICAgICAgICAgIGdsb2JzICs9ICIgKi1sb2NhbGUtJXMiICUgbGFuZworCisgICAgICAgIGlmIGdsb2JzIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBjbWQgPSBbYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJvZS1wa2dkYXRhLXV0aWwiKSwKKyAgICAgICAgICAgICAgICItcCIsIHNlbGYuZC5nZXRWYXIoJ1BLR0RBVEFfRElSJywgVHJ1ZSksICJnbG9iIiwgaW5zdGFsbGVkX3BrZ3NfZmlsZSwKKyAgICAgICAgICAgICAgIGdsb2JzXQorICAgICAgICBleGNsdWRlID0gc2VsZi5kLmdldFZhcignUEFDS0FHRV9FWENMVURFX0NPTVBMRU1FTlRBUlknLCBUcnVlKQorICAgICAgICBpZiBleGNsdWRlOgorICAgICAgICAgICAgY21kLmV4dGVuZChbJy14JywgZXhjbHVkZV0pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgY29tcGxlbWVudGFyeSBwYWNrYWdlcyAuLi4iKQorICAgICAgICAgICAgY29tcGxlbWVudGFyeV9wa2dzID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkNvdWxkIG5vdCBjb21wdXRlIGNvbXBsZW1lbnRhcnkgcGFja2FnZXMgbGlzdC4gQ29tbWFuZCAiCisgICAgICAgICAgICAgICAgICAgICAiJyVzJyByZXR1cm5lZCAlZDpcbiVzIiAlCisgICAgICAgICAgICAgICAgICAgICAoJyAnLmpvaW4oY21kKSwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgc2VsZi5pbnN0YWxsKGNvbXBsZW1lbnRhcnlfcGtncy5zcGxpdCgpLCBhdHRlbXB0X29ubHk9VHJ1ZSkKKworICAgIGRlZiBkZXBsb3lfZGlyX2xvY2soc2VsZik6CisgICAgICAgIGlmIHNlbGYuZGVwbG95X2RpciBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJkZXBsb3lfZGlyIGlzIG5vdCBzZXQhIikKKworICAgICAgICBsb2NrX2ZpbGVfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsICJkZXBsb3kubG9jayIpCisKKyAgICAgICAgc2VsZi5kZXBsb3lfbG9jayA9IGJiLnV0aWxzLmxvY2tmaWxlKGxvY2tfZmlsZV9uYW1lKQorCisgICAgZGVmIGRlcGxveV9kaXJfdW5sb2NrKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmRlcGxveV9sb2NrIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKHNlbGYuZGVwbG95X2xvY2spCisKKyAgICAgICAgc2VsZi5kZXBsb3lfbG9jayA9IE5vbmUKKworCitjbGFzcyBScG1QTShQYWNrYWdlTWFuYWdlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsCisgICAgICAgICAgICAgICAgIGQsCisgICAgICAgICAgICAgICAgIHRhcmdldF9yb290ZnMsCisgICAgICAgICAgICAgICAgIHRhcmdldF92ZW5kb3IsCisgICAgICAgICAgICAgICAgIHRhc2tfbmFtZT0ndGFyZ2V0JywKKyAgICAgICAgICAgICAgICAgcHJvdmlkZW5hbWU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgYXJjaF92YXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgb3NfdmFyPU5vbmUpOgorICAgICAgICBzdXBlcihScG1QTSwgc2VsZikuX19pbml0X18oZCkKKyAgICAgICAgc2VsZi50YXJnZXRfcm9vdGZzID0gdGFyZ2V0X3Jvb3RmcworICAgICAgICBzZWxmLnRhcmdldF92ZW5kb3IgPSB0YXJnZXRfdmVuZG9yCisgICAgICAgIHNlbGYudGFza19uYW1lID0gdGFza19uYW1lCisgICAgICAgIHNlbGYucHJvdmlkZW5hbWUgPSBwcm92aWRlbmFtZQorICAgICAgICBzZWxmLmZ1bGxwa2dsaXN0ID0gbGlzdCgpCisgICAgICAgIHNlbGYuZGVwbG95X2RpciA9IHNlbGYuZC5nZXRWYXIoJ0RFUExPWV9ESVJfUlBNJywgVHJ1ZSkKKyAgICAgICAgc2VsZi5ldGNycG1fZGlyID0gb3MucGF0aC5qb2luKHNlbGYudGFyZ2V0X3Jvb3RmcywgImV0Yy9ycG0iKQorICAgICAgICBzZWxmLmluc3RhbGxfZGlyX25hbWUgPSAib2VfaW5zdGFsbCIKKyAgICAgICAgc2VsZi5pbnN0YWxsX2Rpcl9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYudGFyZ2V0X3Jvb3Rmcywgc2VsZi5pbnN0YWxsX2Rpcl9uYW1lKQorICAgICAgICBzZWxmLnJwbV9jbWQgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgInJwbSIpCisgICAgICAgIHNlbGYuc21hcnRfY21kID0gYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJzbWFydCIpCisgICAgICAgIHNlbGYuc21hcnRfb3B0ID0gIi0tbG9nLWxldmVsPXdhcm5pbmcgLS1kYXRhLWRpcj0iICsgb3MucGF0aC5qb2luKHRhcmdldF9yb290ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmFyL2xpYi9zbWFydCcpCisgICAgICAgIHNlbGYuc2NyaXB0bGV0X3dyYXBwZXIgPSBzZWxmLmQuZXhwYW5kKCcke1dPUktESVJ9L3NjcmlwdGxldF93cmFwcGVyJykKKyAgICAgICAgc2VsZi5zb2x1dGlvbl9tYW5pZmVzdCA9IHNlbGYuZC5leHBhbmQoJyR7VH0vc2F2ZWQvJXNfc29sdXRpb24nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YXNrX25hbWUpCisgICAgICAgIHNlbGYuc2F2ZWRfcnBtbGliID0gc2VsZi5kLmV4cGFuZCgnJHtUfS9zYXZlZC8lcycgJSBzZWxmLnRhc2tfbmFtZSkKKyAgICAgICAgc2VsZi5pbWFnZV9ycG1saWIgPSBvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXRfcm9vdGZzLCAndmFyL2xpYi9ycG0nKQorCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmQuZXhwYW5kKCcke1R9L3NhdmVkJykpOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuZC5leHBhbmQoJyR7VH0vc2F2ZWQnKSkKKworICAgICAgICBzZWxmLmluZGV4ZXIgPSBScG1JbmRleGVyKHNlbGYuZCwgc2VsZi5kZXBsb3lfZGlyKQorICAgICAgICBzZWxmLnBrZ3NfbGlzdCA9IFJwbVBrZ3NMaXN0KHNlbGYuZCwgc2VsZi50YXJnZXRfcm9vdGZzLCBhcmNoX3Zhciwgb3NfdmFyKQorICAgICAgICBzZWxmLnJwbV92ZXJzaW9uID0gc2VsZi5wa2dzX2xpc3QucnBtX3ZlcnNpb24KKworICAgICAgICBzZWxmLm1sX3ByZWZpeF9saXN0LCBzZWxmLm1sX29zX2xpc3QgPSBzZWxmLmluZGV4ZXIuZ2V0X21sX3ByZWZpeF9hbmRfb3NfbGlzdChhcmNoX3Zhciwgb3NfdmFyKQorCisgICAgZGVmIGluc2VydF9mZWVkc191cmlzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmZlZWRfdXJpcyA9PSAiIjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgTGlzdCBtdXN0IGJlIHByZWZlcmVkIHRvIGxlYXN0IHByZWZlcnJlZCBvcmRlcgorICAgICAgICBkZWZhdWx0X3BsYXRmb3JtX2V4dHJhID0gc2V0KCkKKyAgICAgICAgcGxhdGZvcm1fZXh0cmEgPSBzZXQoKQorICAgICAgICBiYmV4dGVuZHZhcmlhbnQgPSBzZWxmLmQuZ2V0VmFyKCdCQkVYVEVORFZBUklBTlQnLCBUcnVlKSBvciAiIgorICAgICAgICBmb3IgbWxpYiBpbiBzZWxmLm1sX29zX2xpc3Q6CisgICAgICAgICAgICBmb3IgYXJjaCBpbiBzZWxmLm1sX3ByZWZpeF9saXN0W21saWJdOgorICAgICAgICAgICAgICAgIHBsdCA9IGFyY2gucmVwbGFjZSgnLScsICdfJykgKyAnLS4qLScgKyBzZWxmLm1sX29zX2xpc3RbbWxpYl0KKyAgICAgICAgICAgICAgICBpZiBtbGliID09IGJiZXh0ZW5kdmFyaWFudDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfcGxhdGZvcm1fZXh0cmEuYWRkKHBsdCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1fZXh0cmEuYWRkKHBsdCkKKworICAgICAgICBwbGF0Zm9ybV9leHRyYSA9IHBsYXRmb3JtX2V4dHJhLnVuaW9uKGRlZmF1bHRfcGxhdGZvcm1fZXh0cmEpCisKKyAgICAgICAgYXJjaF9saXN0ID0gW10KKyAgICAgICAgZm9yIGNhbm9uaWNhbF9hcmNoIGluIHBsYXRmb3JtX2V4dHJhOgorICAgICAgICAgICAgYXJjaCA9IGNhbm9uaWNhbF9hcmNoLnNwbGl0KCctJylbMF0KKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGFyY2hfbGlzdC5hcHBlbmQoYXJjaCkKKworICAgICAgICB1cmlfaXRlcmF0b3IgPSAwCisgICAgICAgIGNoYW5uZWxfcHJpb3JpdHkgPSAxMCArIDUgKiBsZW4oc2VsZi5mZWVkX3VyaXMuc3BsaXQoKSkgKiBsZW4oYXJjaF9saXN0KQorCisgICAgICAgIGZvciB1cmkgaW4gc2VsZi5mZWVkX3VyaXMuc3BsaXQoKToKKyAgICAgICAgICAgIGZ1bGxfdXJpID0gdXJpCisgICAgICAgICAgICBpZiBzZWxmLmZlZWRfcHJlZml4OgorICAgICAgICAgICAgICAgIGZ1bGxfdXJpID0gb3MucGF0aC5qb2luKHVyaSwgc2VsZi5mZWVkX3ByZWZpeCkKKyAgICAgICAgICAgIGZvciBhcmNoIGluIGFyY2hfbGlzdDoKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCdOb3RlOiBhZGRpbmcgU21hcnQgY2hhbm5lbCB1cmwlZCVzICglcyknICUKKyAgICAgICAgICAgICAgICAgICAgICAgICh1cmlfaXRlcmF0b3IsIGFyY2gsIGNoYW5uZWxfcHJpb3JpdHkpKQorICAgICAgICAgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY2hhbm5lbCAtLWFkZCB1cmwlZC0lcyB0eXBlPXJwbS1tZCBiYXNldXJsPSVzLyVzIC15JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICh1cmlfaXRlcmF0b3IsIGFyY2gsIGZ1bGxfdXJpLCBhcmNoKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NoYW5uZWwgLS1zZXQgdXJsJWQtJXMgcHJpb3JpdHk9JWQnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVyaV9pdGVyYXRvciwgYXJjaCwgY2hhbm5lbF9wcmlvcml0eSkpCisgICAgICAgICAgICAgICAgY2hhbm5lbF9wcmlvcml0eSAtPSA1CisgICAgICAgICAgICB1cmlfaXRlcmF0b3IgKz0gMQorCisgICAgJycnCisgICAgQ3JlYXRlIGNvbmZpZ3MgZm9yIHJwbSBhbmQgc21hcnQsIGFuZCBtdWx0aWxpYiBpcyBzdXBwb3J0ZWQKKyAgICAnJycKKyAgICBkZWYgY3JlYXRlX2NvbmZpZ3Moc2VsZik6CisgICAgICAgIHRhcmdldF9hcmNoID0gc2VsZi5kLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKQorICAgICAgICBwbGF0Zm9ybSA9ICclcyVzLSVzJyAlICh0YXJnZXRfYXJjaC5yZXBsYWNlKCctJywgJ18nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YXJnZXRfdmVuZG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1sX29zX2xpc3RbJ2RlZmF1bHQnXSkKKworICAgICAgICAjIExpc3QgbXVzdCBiZSBwcmVmZXJlZCB0byBsZWFzdCBwcmVmZXJyZWQgb3JkZXIKKyAgICAgICAgZGVmYXVsdF9wbGF0Zm9ybV9leHRyYSA9IGxpc3QoKQorICAgICAgICBwbGF0Zm9ybV9leHRyYSA9IGxpc3QoKQorICAgICAgICBiYmV4dGVuZHZhcmlhbnQgPSBzZWxmLmQuZ2V0VmFyKCdCQkVYVEVORFZBUklBTlQnLCBUcnVlKSBvciAiIgorICAgICAgICBmb3IgbWxpYiBpbiBzZWxmLm1sX29zX2xpc3Q6CisgICAgICAgICAgICBmb3IgYXJjaCBpbiBzZWxmLm1sX3ByZWZpeF9saXN0W21saWJdOgorICAgICAgICAgICAgICAgIHBsdCA9IGFyY2gucmVwbGFjZSgnLScsICdfJykgKyAnLS4qLScgKyBzZWxmLm1sX29zX2xpc3RbbWxpYl0KKyAgICAgICAgICAgICAgICBpZiBtbGliID09IGJiZXh0ZW5kdmFyaWFudDoKKyAgICAgICAgICAgICAgICAgICAgaWYgcGx0IG5vdCBpbiBkZWZhdWx0X3BsYXRmb3JtX2V4dHJhOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9wbGF0Zm9ybV9leHRyYS5hcHBlbmQocGx0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIHBsdCBub3QgaW4gcGxhdGZvcm1fZXh0cmE6CisgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybV9leHRyYS5hcHBlbmQocGx0KQorICAgICAgICBwbGF0Zm9ybV9leHRyYSA9IGRlZmF1bHRfcGxhdGZvcm1fZXh0cmEgKyBwbGF0Zm9ybV9leHRyYQorCisgICAgICAgIHNlbGYuX2NyZWF0ZV9jb25maWdzKHBsYXRmb3JtLCBwbGF0Zm9ybV9leHRyYSkKKworICAgIGRlZiBfaW52b2tlX3NtYXJ0KHNlbGYsIGFyZ3MpOgorICAgICAgICBjbWQgPSAiJXMgJXMgJXMiICUgKHNlbGYuc21hcnRfY21kLCBzZWxmLnNtYXJ0X29wdCwgYXJncykKKyAgICAgICAgIyBiYi5ub3RlKGNtZCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29tcGxlbWVudGFyeV9wa2dzID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgICMgYmIubm90ZShjb21wbGVtZW50YXJ5X3BrZ3MpCisgICAgICAgICAgICByZXR1cm4gY29tcGxlbWVudGFyeV9wa2dzCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkNvdWxkIG5vdCBpbnZva2Ugc21hcnQuIENvbW1hbmQgIgorICAgICAgICAgICAgICAgICAgICAgIiclcycgcmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgIGRlZiBfc2VhcmNoX3BrZ19uYW1lX2luX2ZlZWRzKHNlbGYsIHBrZywgZmVlZF9hcmNocyk6CisgICAgICAgIGZvciBhcmNoIGluIGZlZWRfYXJjaHM6CisgICAgICAgICAgICBhcmNoID0gYXJjaC5yZXBsYWNlKCctJywgJ18nKQorICAgICAgICAgICAgcmVnZXhfbWF0Y2ggPSByZS5jb21waWxlKHIiXiVzLVteLV0qLVteLV0qQCVzJCIgJSBcCisgICAgICAgICAgICAgICAgKHJlLmVzY2FwZShwa2cpLCByZS5lc2NhcGUoYXJjaCkpKQorICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5mdWxscGtnbGlzdDoKKyAgICAgICAgICAgICAgICBpZiByZWdleF9tYXRjaC5tYXRjaChwKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgIyBGaXJzdCBmb3VuZCBpcyBiZXN0IG1hdGNoCisgICAgICAgICAgICAgICAgICAgICMgYmIubm90ZSgnJXMgLT4gJXMnICUgKHBrZywgcGtnICsgJ0AnICsgYXJjaCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwa2cgKyAnQCcgKyBhcmNoCisKKyAgICAgICAgIyBTZWFyY2ggcHJvdmlkZXMgaWYgbm90IGZvdW5kIGJ5IHBrZ25hbWUuCisgICAgICAgIGJiLm5vdGUoJ05vdCBmb3VuZCAlcyBieSBuYW1lLCBzZWFyY2hpbmcgcHJvdmlkZXMgLi4uJyAlIHBrZykKKyAgICAgICAgY21kID0gIiVzICVzIHF1ZXJ5IC0tcHJvdmlkZXMgJXMgLS1zaG93LWZvcm1hdD0nJG5hbWUtJHZlcnNpb24nIiAlIFwKKyAgICAgICAgICAgICAgICAoc2VsZi5zbWFydF9jbWQsIHNlbGYuc21hcnRfb3B0LCBwa2cpCisgICAgICAgIGNtZCArPSAiIHwgc2VkIC1uZSAncy8gKlByb3ZpZGVzOi8vcCciCisgICAgICAgIGJiLm5vdGUoJ2NtZDogJXMnICUgY21kKQorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgIyBGb3VuZCBhIHByb3ZpZGVyCisgICAgICAgIGlmIG91dHB1dDoKKyAgICAgICAgICAgIGJiLm5vdGUoJ0ZvdW5kIHByb3ZpZGVycyBmb3IgJXM6ICVzJyAlIChwa2csIG91dHB1dCkpCisgICAgICAgICAgICBmb3IgcCBpbiBvdXRwdXQuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBmb3IgYXJjaCBpbiBmZWVkX2FyY2hzOgorICAgICAgICAgICAgICAgICAgICBhcmNoID0gYXJjaC5yZXBsYWNlKCctJywgJ18nKQorICAgICAgICAgICAgICAgICAgICBpZiBwLnJzdHJpcCgpLmVuZHN3aXRoKCdAJyArIGFyY2gpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAKKworICAgICAgICByZXR1cm4gIiIKKworICAgICcnJworICAgIFRyYW5zbGF0ZSB0aGUgT0UgbXVsdGlsaWIgZm9ybWF0IG5hbWVzIHRvIHRoZSBSUE0vU21hcnQgZm9ybWF0IG5hbWVzCisgICAgSXQgc2VhcmNoZWQgdGhlIFJQTS9TbWFydCBmb3JtYXQgbmFtZXMgaW4gcHJvYmFibGUgbXVsdGlsaWIgZmVlZHMgZmlyc3QsCisgICAgYW5kIHRoZW4gc2VhcmNoZWQgdGhlIGRlZmF1bHQgYmFzZSBmZWVkLgorICAgICcnJworICAgIGRlZiBfcGtnX3RyYW5zbGF0ZV9vZV90b19zbWFydChzZWxmLCBwa2dzLCBhdHRlbXB0X29ubHk9RmFsc2UpOgorICAgICAgICBuZXdfcGtncyA9IGxpc3QoKQorCisgICAgICAgIGZvciBwa2cgaW4gcGtnczoKKyAgICAgICAgICAgIG5ld19wa2cgPSBwa2cKKyAgICAgICAgICAgICMgU2VhcmNoIG5ld19wa2cgaW4gcHJvYmFibGUgbXVsdGlsaWJzIGZpcnN0CisgICAgICAgICAgICBmb3IgbWxpYiBpbiBzZWxmLm1sX3ByZWZpeF9saXN0OgorICAgICAgICAgICAgICAgICMgSnVtcCB0aGUgZGVmYXVsdCBhcmNocworICAgICAgICAgICAgICAgIGlmIG1saWIgPT0gJ2RlZmF1bHQnOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgc3Vic3QgPSBwa2cucmVwbGFjZShtbGliICsgJy0nLCAnJykKKyAgICAgICAgICAgICAgICAjIGlmIHRoZSBwa2cgaW4gdGhpcyBtdWx0aWxpYiBmZWVkCisgICAgICAgICAgICAgICAgaWYgc3Vic3QgIT0gcGtnOgorICAgICAgICAgICAgICAgICAgICBmZWVkX2FyY2hzID0gc2VsZi5tbF9wcmVmaXhfbGlzdFttbGliXQorICAgICAgICAgICAgICAgICAgICBuZXdfcGtnID0gc2VsZi5fc2VhcmNoX3BrZ19uYW1lX2luX2ZlZWRzKHN1YnN0LCBmZWVkX2FyY2hzKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgbmV3X3BrZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRmFpbGVkIHRvIHRyYW5zbGF0ZSwgcGFja2FnZSBub3QgZm91bmQhCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJfbXNnID0gJyVzIG5vdCBmb3VuZCBpbiB0aGUgJXMgZmVlZHMgKCVzKS5cbicgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBrZywgbWxpYiwgIiAiLmpvaW4oZmVlZF9hcmNocykpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgYXR0ZW1wdF9vbmx5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycl9tc2cgKz0gIiAiLmpvaW4oc2VsZi5mdWxscGtnbGlzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbChlcnJfbXNnKQorICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybihlcnJfbXNnKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3BrZ3MuYXBwZW5kKG5ld19wa2cpCisKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgIyBBcHBhcmVudGx5IG5vdCBhIG11bHRpbGliIHBhY2thZ2UuLi4KKyAgICAgICAgICAgIGlmIHBrZyA9PSBuZXdfcGtnOgorICAgICAgICAgICAgICAgICMgU2VhcmNoIG5ld19wa2cgaW4gZGVmYXVsdCBhcmNocworICAgICAgICAgICAgICAgIGRlZmF1bHRfYXJjaHMgPSBzZWxmLm1sX3ByZWZpeF9saXN0WydkZWZhdWx0J10KKyAgICAgICAgICAgICAgICBuZXdfcGtnID0gc2VsZi5fc2VhcmNoX3BrZ19uYW1lX2luX2ZlZWRzKHBrZywgZGVmYXVsdF9hcmNocykKKyAgICAgICAgICAgICAgICBpZiBub3QgbmV3X3BrZzoKKyAgICAgICAgICAgICAgICAgICAgZXJyX21zZyA9ICclcyBub3QgZm91bmQgaW4gdGhlIGJhc2UgZmVlZHMgKCVzKS5cbicgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnLCAnICcuam9pbihkZWZhdWx0X2FyY2hzKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGF0dGVtcHRfb25seToKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycl9tc2cgKz0gIiAiLmpvaW4oc2VsZi5mdWxscGtnbGlzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKGVycl9tc2cpCisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oZXJyX21zZykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBuZXdfcGtncy5hcHBlbmQobmV3X3BrZykKKworICAgICAgICByZXR1cm4gbmV3X3BrZ3MKKworICAgIGRlZiBfY3JlYXRlX2NvbmZpZ3Moc2VsZiwgcGxhdGZvcm0sIHBsYXRmb3JtX2V4dHJhKToKKyAgICAgICAgIyBTZXR1cCBiYXNlIHN5c3RlbSBjb25maWd1cmF0aW9uCisgICAgICAgIGJiLm5vdGUoImNvbmZpZ3VyaW5nIFJQTSBwbGF0Zm9ybSBzZXR0aW5ncyIpCisKKyAgICAgICAgIyBDb25maWd1cmUgaW50ZXJuYWwgUlBNIGVudmlyb25tZW50IHdoZW4gdXNpbmcgU21hcnQKKyAgICAgICAgb3MuZW52aXJvblsnUlBNX0VUQ1JQTSddID0gc2VsZi5ldGNycG1fZGlyCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmV0Y3JwbV9kaXIpCisKKyAgICAgICAgIyBTZXR1cCB0ZW1wb3JhcnkgZGlyZWN0b3J5IC0tIGluc3RhbGwuLi4KKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5pbnN0YWxsX2Rpcl9wYXRoKToKKyAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLmluc3RhbGxfZGlyX3BhdGgsIFRydWUpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmpvaW4oc2VsZi5pbnN0YWxsX2Rpcl9wYXRoLCAndG1wJykpCisKKyAgICAgICAgY2hhbm5lbF9wcmlvcml0eSA9IDUKKyAgICAgICAgcGxhdGZvcm1fZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZXRjcnBtX2RpciwgInBsYXRmb3JtIikKKyAgICAgICAgc2Rrb3MgPSBzZWxmLmQuZ2V0VmFyKCJTREtfT1MiLCBUcnVlKQorICAgICAgICB3aXRoIG9wZW4ocGxhdGZvcm1fZGlyLCAidysiKSBhcyBwbGF0Zm9ybV9mZDoKKyAgICAgICAgICAgIHBsYXRmb3JtX2ZkLndyaXRlKHBsYXRmb3JtICsgJ1xuJykKKyAgICAgICAgICAgIGZvciBwdCBpbiBwbGF0Zm9ybV9leHRyYToKKyAgICAgICAgICAgICAgICBjaGFubmVsX3ByaW9yaXR5ICs9IDUKKyAgICAgICAgICAgICAgICBpZiBzZGtvczoKKyAgICAgICAgICAgICAgICAgICAgdG1wID0gcmUuc3ViKCItJXMkIiAlIHNka29zLCAiLSVzXG4iICUgc2Rrb3MsIHB0KQorICAgICAgICAgICAgICAgIHRtcCA9IHJlLnN1YigiLWxpbnV4LiokIiwgIi1saW51eC4qXG4iLCB0bXApCisgICAgICAgICAgICAgICAgcGxhdGZvcm1fZmQud3JpdGUodG1wKQorCisgICAgICAgICMgVGVsbCBSUE0gdGhhdCB0aGUgIi8iIGRpcmVjdG9yeSBleGlzdCBhbmQgaXMgYXZhaWxhYmxlCisgICAgICAgIGJiLm5vdGUoImNvbmZpZ3VyaW5nIFJQTSBzeXN0ZW0gcHJvdmlkZXMiKQorICAgICAgICBzeXNpbmZvX2RpciA9IG9zLnBhdGguam9pbihzZWxmLmV0Y3JwbV9kaXIsICJzeXNpbmZvIikKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHN5c2luZm9fZGlyKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHN5c2luZm9fZGlyLCAiRGlybmFtZXMiKSwgIncrIikgYXMgZGlybmFtZXM6CisgICAgICAgICAgICBkaXJuYW1lcy53cml0ZSgiL1xuIikKKworICAgICAgICBpZiBzZWxmLnByb3ZpZGVuYW1lOgorICAgICAgICAgICAgcHJvdmlkZW5hbWVfZGlyID0gb3MucGF0aC5qb2luKHN5c2luZm9fZGlyLCAiUHJvdmlkZW5hbWUiKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHByb3ZpZGVuYW1lX2Rpcik6CisgICAgICAgICAgICAgICAgcHJvdmlkZW5hbWVfY29udGVudCA9ICdcbicuam9pbihzZWxmLnByb3ZpZGVuYW1lKQorICAgICAgICAgICAgICAgIHByb3ZpZGVuYW1lX2NvbnRlbnQgKz0gJ1xuJworICAgICAgICAgICAgICAgIG9wZW4ocHJvdmlkZW5hbWVfZGlyLCAidysiKS53cml0ZShwcm92aWRlbmFtZV9jb250ZW50KQorCisgICAgICAgICMgQ29uZmlndXJlIFJQTS4uLiB3ZSBlbmZvcmNlIHRoZXNlIHNldHRpbmdzIQorICAgICAgICBiYi5ub3RlKCJjb25maWd1cmluZyBSUE0gREIgc2V0dGluZ3MiKQorICAgICAgICAjIEFmdGVyIGNoYW5nZSB0aGUgX19kYi4qIGNhY2hlIHNpemUsIGxvZyBmaWxlIHdpbGwgbm90IGJlCisgICAgICAgICMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHksIHRoYXQgd2lsbCByYWlzZSBzb21lIHdhcm5pbmdzLAorICAgICAgICAjIHNvIHRvdWNoIGEgYmFyZSBsb2cgZm9yIHJwbSB3cml0ZSBpbnRvIGl0LgorICAgICAgICBpZiBzZWxmLnJwbV92ZXJzaW9uID09IDU6CisgICAgICAgICAgICBycG1saWJfbG9nID0gb3MucGF0aC5qb2luKHNlbGYuaW1hZ2VfcnBtbGliLCAnbG9nJywgJ2xvZy4wMDAwMDAwMDAxJykKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhycG1saWJfbG9nKToKKyAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKHNlbGYuaW1hZ2VfcnBtbGliLCAnbG9nJykpCisgICAgICAgICAgICAgICAgb3BlbihycG1saWJfbG9nLCAndysnKS5jbG9zZSgpCisKKyAgICAgICAgICAgIERCX0NPTkZJR19DT05URU5UID0gIiMgPT09PT09PT09PT09PT09PSBFbnZpcm9ubWVudFxuIiBcCisgICAgICAgICAgICAgICAgInNldF9kYXRhX2RpciAuXG4iIFwKKyAgICAgICAgICAgICAgICAic2V0X2NyZWF0ZV9kaXIgLlxuIiBcCisgICAgICAgICAgICAgICAgInNldF9sZ19kaXIgLi9sb2dcbiIgXAorICAgICAgICAgICAgICAgICJzZXRfdG1wX2RpciAuL3RtcFxuIiBcCisgICAgICAgICAgICAgICAgInNldF9mbGFncyBkYl9sb2dfYXV0b3JlbW92ZSBvblxuIiBcCisgICAgICAgICAgICAgICAgIlxuIiBcCisgICAgICAgICAgICAgICAgIiMgLS0gdGhyZWFkX2NvdW50IG11c3QgYmUgPj0gOFxuIiBcCisgICAgICAgICAgICAgICAgInNldF90aHJlYWRfY291bnQgNjRcbiIgXAorICAgICAgICAgICAgICAgICJcbiIgXAorICAgICAgICAgICAgICAgICIjID09PT09PT09PT09PT09PT0gTG9nZ2luZ1xuIiBcCisgICAgICAgICAgICAgICAgIlxuIiBcCisgICAgICAgICAgICAgICAgIiMgPT09PT09PT09PT09PT09PSBNZW1vcnkgUG9vbFxuIiBcCisgICAgICAgICAgICAgICAgInNldF9jYWNoZXNpemUgMCAxMDQ4NTc2IDBcbiIgXAorICAgICAgICAgICAgICAgICJzZXRfbXBfbW1hcHNpemUgMjY4NDM1NDU2XG4iIFwKKyAgICAgICAgICAgICAgICAiXG4iIFwKKyAgICAgICAgICAgICAgICAiIyA9PT09PT09PT09PT09PT09IExvY2tpbmdcbiIgXAorICAgICAgICAgICAgICAgICJzZXRfbGtfbWF4X2xvY2tzIDE2Mzg0XG4iIFwKKyAgICAgICAgICAgICAgICAic2V0X2xrX21heF9sb2NrZXJzIDE2Mzg0XG4iIFwKKyAgICAgICAgICAgICAgICAic2V0X2xrX21heF9vYmplY3RzIDE2Mzg0XG4iIFwKKyAgICAgICAgICAgICAgICAibXV0ZXhfc2V0X21heCAxNjM4NDBcbiIgXAorICAgICAgICAgICAgICAgICJcbiIgXAorICAgICAgICAgICAgICAgICIjID09PT09PT09PT09PT09PT0gUmVwbGljYXRpb25cbiIKKworICAgICAgICAgICAgZGJfY29uZmlnX2RpciA9IG9zLnBhdGguam9pbihzZWxmLmltYWdlX3JwbWxpYiwgJ0RCX0NPTkZJRycpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGJfY29uZmlnX2Rpcik6CisgICAgICAgICAgICAgICAgb3BlbihkYl9jb25maWdfZGlyLCAndysnKS53cml0ZShEQl9DT05GSUdfQ09OVEVOVCkKKworICAgICAgICAjIENyZWF0ZSBkYXRhYmFzZSBzbyB0aGF0IHNtYXJ0IGRvZXNuJ3QgY29tcGxhaW4gKGxhenkgaW5pdCkKKyAgICAgICAgb3B0ID0gIi1xYSIKKyAgICAgICAgaWYgc2VsZi5ycG1fdmVyc2lvbiA9PSA0OgorICAgICAgICAgICAgb3B0ID0gIi0taW5pdGRiIgorICAgICAgICBjbWQgPSAiJXMgLS1yb290ICVzIC0tZGJwYXRoIC92YXIvbGliL3JwbSAlcyA+IC9kZXYvbnVsbCIgJSAoCisgICAgICAgICAgICAgIHNlbGYucnBtX2NtZCwgc2VsZi50YXJnZXRfcm9vdGZzLCBvcHQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJDcmVhdGUgcnBtIGRhdGFiYXNlIGZhaWxlZC4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorICAgICAgICAjIEltcG9ydCBHUEcga2V5IHRvIFJQTSBkYXRhYmFzZSBvZiB0aGUgdGFyZ2V0IHN5c3RlbQorICAgICAgICBpZiBzZWxmLmQuZ2V0VmFyKCdSUE1fU0lHTl9QQUNLQUdFUycsIFRydWUpID09ICcxJzoKKyAgICAgICAgICAgIHB1YmtleV9wYXRoID0gc2VsZi5kLmdldFZhcignUlBNX0dQR19QVUJLRVknLCBUcnVlKQorICAgICAgICAgICAgY21kID0gIiVzIC0tcm9vdCAlcyAtLWRicGF0aCAvdmFyL2xpYi9ycG0gLS1pbXBvcnQgJXMgPiAvZGV2L251bGwiICUgKAorICAgICAgICAgICAgICAgICAgc2VsZi5ycG1fY21kLCBzZWxmLnRhcmdldF9yb290ZnMsIHB1YmtleV9wYXRoKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisKKyAgICAgICAgIyBDb25maWd1cmUgc21hcnQKKyAgICAgICAgYmIubm90ZSgiY29uZmlndXJpbmcgU21hcnQgc2V0dGluZ3MiKQorICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYudGFyZ2V0X3Jvb3RmcywgJ3Zhci9saWIvc21hcnQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpCisgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2V0IHJwbS1yb290PSVzJyAlIHNlbGYudGFyZ2V0X3Jvb3RmcykKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjb25maWcgLS1zZXQgcnBtLWRicGF0aD0vdmFyL2xpYi9ycG0nKQorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBycG0tZXh0cmEtbWFjcm9zLl92YXI9JXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ2xvY2Fsc3RhdGVkaXInLCBUcnVlKSkKKyAgICAgICAgY21kID0gImNvbmZpZyAtLXNldCBycG0tZXh0cmEtbWFjcm9zLl90bXBwYXRoPS8lcy90bXAiICUgKHNlbGYuaW5zdGFsbF9kaXJfbmFtZSkKKworICAgICAgICBwcmVmZXJfY29sb3IgPSBzZWxmLmQuZ2V0VmFyKCdSUE1fUFJFRkVSX0VMRl9BUkNIJywgVHJ1ZSkKKyAgICAgICAgaWYgcHJlZmVyX2NvbG9yOgorICAgICAgICAgICAgaWYgcHJlZmVyX2NvbG9yIG5vdCBpbiBbJzAnLCAnMScsICcyJywgJzQnXToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiSW52YWxpZCBSUE1fUFJFRkVSX0VMRl9BUkNIOiAlcywgaXQgc2hvdWxkIGJlIG9uZSBvZjpcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICJcdDE6IEVMRjMyIHdpbnNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICJcdDI6IEVMRjY0IHdpbnNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICJcdDQ6IEVMRjY0IE4zMiB3aW5zIChtaXBzNjQgb3IgbWlwczY0ZWwgb25seSkiICUKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWZlcl9jb2xvcikKKyAgICAgICAgICAgIGlmIHByZWZlcl9jb2xvciA9PSAiNCIgYW5kIHNlbGYuZC5nZXRWYXIoIlRVTkVfQVJDSCIsIFRydWUpIG5vdCBpbiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ21pcHM2NCcsICdtaXBzNjRlbCddOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJSUE1fUFJFRkVSX0VMRl9BUkNIID0gXCI0XCIgaXMgZm9yIG1pcHM2NCBvciBtaXBzNjRlbCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIm9ubHkuIikKKyAgICAgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2V0IHJwbS1leHRyYS1tYWNyb3MuX3ByZWZlcl9jb2xvcj0lcycKKyAgICAgICAgICAgICAgICAgICAgICAgICUgcHJlZmVyX2NvbG9yKQorCisgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydChjbWQpCisgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2V0IHJwbS1pZ25vcmVzaXplPTEnKQorCisgICAgICAgICMgV3JpdGUgY29tbW9uIGNvbmZpZ3VyYXRpb24gZm9yIGhvc3QgYW5kIHRhcmdldCB1c2FnZQorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBycG0tbm9saW5rdG9zPTEnKQorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBycG0tbm9wYXJlbnRkaXJzPTEnKQorICAgICAgICBjaGVja19zaWduYXR1cmUgPSBzZWxmLmQuZ2V0VmFyKCdSUE1fQ0hFQ0tfU0lHTkFUVVJFUycsIFRydWUpCisgICAgICAgIGlmIGNoZWNrX3NpZ25hdHVyZSBhbmQgY2hlY2tfc2lnbmF0dXJlLnN0cmlwKCkgPT0gIjAiOgorICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjb25maWcgLS1zZXQgcnBtLWNoZWNrLXNpZ25hdHVyZXM9ZmFsc2UnKQorICAgICAgICBmb3IgaSBpbiBzZWxmLmQuZ2V0VmFyKCdCQURfUkVDT01NRU5EQVRJT05TJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnZmxhZyAtLXNldCBpZ25vcmUtcmVjb21tZW5kcyAlcycgJSBpKQorCisgICAgICAgICMgRG8gdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9ucyBoZXJlLCB0byBhdm9pZCB0aGVtIGJlaW5nCisgICAgICAgICMgc2F2ZWQgZm9yIGZpZWxkIHVwZ3JhZGUKKyAgICAgICAgaWYgc2VsZi5kLmdldFZhcignTk9fUkVDT01NRU5EQVRJT05TJywgVHJ1ZSkuc3RyaXAoKSA9PSAiMSI6CisgICAgICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBpZ25vcmUtYWxsLXJlY29tbWVuZHM9MScpCisgICAgICAgIHBrZ19leGNsdWRlID0gc2VsZi5kLmdldFZhcignUEFDS0FHRV9FWENMVURFJywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgZm9yIGkgaW4gcGtnX2V4Y2x1ZGUuc3BsaXQoKToKKyAgICAgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnZmxhZyAtLXNldCBleGNsdWRlLXBhY2thZ2VzICVzJyAlIGkpCisKKyAgICAgICAgIyBPcHRpb25hbCBkZWJ1Z2dpbmcKKyAgICAgICAgIyBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBycG0tbG9nLWxldmVsPWRlYnVnJykKKyAgICAgICAgIyBjbWQgPSAnY29uZmlnIC0tc2V0IHJwbS1sb2ctZmlsZT0vdG1wL3NtYXJ0LWRlYnVnLWxvZ2ZpbGUnCisgICAgICAgICMgc2VsZi5faW52b2tlX3NtYXJ0KGNtZCkKKyAgICAgICAgY2hfYWxyZWFkeV9hZGRlZCA9IFtdCisgICAgICAgIGZvciBjYW5vbmljYWxfYXJjaCBpbiBwbGF0Zm9ybV9leHRyYToKKyAgICAgICAgICAgIGFyY2ggPSBjYW5vbmljYWxfYXJjaC5zcGxpdCgnLScpWzBdCisgICAgICAgICAgICBhcmNoX2NoYW5uZWwgPSBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoYXJjaF9jaGFubmVsKSBhbmQgbm90IGFyY2ggaW4gY2hfYWxyZWFkeV9hZGRlZDoKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCdOb3RlOiBhZGRpbmcgU21hcnQgY2hhbm5lbCAlcyAoJXMpJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAoYXJjaCwgY2hhbm5lbF9wcmlvcml0eSkpCisgICAgICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjaGFubmVsIC0tYWRkICVzIHR5cGU9cnBtLW1kIGJhc2V1cmw9JXMgLXknCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGFyY2gsIGFyY2hfY2hhbm5lbCkpCisgICAgICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjaGFubmVsIC0tc2V0ICVzIHByaW9yaXR5PSVkJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcmNoLCBjaGFubmVsX3ByaW9yaXR5KSkKKyAgICAgICAgICAgICAgICBjaGFubmVsX3ByaW9yaXR5IC09IDUKKworICAgICAgICAgICAgICAgIGNoX2FscmVhZHlfYWRkZWQuYXBwZW5kKGFyY2gpCisKKyAgICAgICAgYmIubm90ZSgnYWRkaW5nIFNtYXJ0IFJQTSBEQiBjaGFubmVsJykKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjaGFubmVsIC0tYWRkIHJwbXN5cyB0eXBlPXJwbS1zeXMgLXknKQorCisgICAgICAgICMgQ29uc3RydWN0IGluc3RhbGwgc2NyaXB0bGV0IHdyYXBwZXIuCisgICAgICAgICMgU2NyaXB0cyBuZWVkIHRvIGJlIG9yZGVyZWQgd2hlbiBleGVjdXRlZCwgdGhpcyBlbnN1cmVzIG51bWVyaWMgb3JkZXIuCisgICAgICAgICMgSWYgd2UgZXZlciBydW4gaW50byBuZWVkaW5nIG1vcmUgdGhlIDg5OSBzY3JpcHRzLCB3ZSdsbCBoYXZlIHRvLgorICAgICAgICAjIGNoYW5nZSBudW0gdG8gc3RhcnQgd2l0aCAxMDAwLgorICAgICAgICAjCisgICAgICAgIGlmIHNlbGYucnBtX3ZlcnNpb24gPT0gNDoKKyAgICAgICAgICAgIHNjcmlwdGxldGNtZCA9ICIkMiAkMyAkNFxuIgorICAgICAgICAgICAgc2NyaXB0cGF0aCA9ICIkMyIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNjcmlwdGxldGNtZCA9ICIkMiAkMS8kMyAkNFxuIgorICAgICAgICAgICAgc2NyaXB0cGF0aCA9ICIkMS8kMyIKKworICAgICAgICBTQ1JJUFRMRVRfRk9STUFUID0gIiMhL2Jpbi9iYXNoXG4iIFwKKyAgICAgICAgICAgICJcbiIgXAorICAgICAgICAgICAgImV4cG9ydCBQQVRIPSVzXG4iIFwKKyAgICAgICAgICAgICJleHBvcnQgRD0lc1xuIiBcCisgICAgICAgICAgICAnZXhwb3J0IE9GRkxJTkVfUk9PVD0iJEQiXG4nIFwKKyAgICAgICAgICAgICdleHBvcnQgSVBLR19PRkZMSU5FX1JPT1Q9IiREIlxuJyBcCisgICAgICAgICAgICAnZXhwb3J0IE9QS0dfT0ZGTElORV9ST09UPSIkRCJcbicgXAorICAgICAgICAgICAgImV4cG9ydCBJTlRFUkNFUFRfRElSPSVzXG4iIFwKKyAgICAgICAgICAgICJleHBvcnQgTkFUSVZFX1JPT1Q9JXNcbiIgXAorICAgICAgICAgICAgIlxuIiBcCisgICAgICAgICAgICArIHNjcmlwdGxldGNtZCArIFwKKyAgICAgICAgICAgICJpZiBbICQ/IC1uZSAwIF07IHRoZW5cbiIgXAorICAgICAgICAgICAgIiAgaWYgWyAkNCAtZXEgMSBdOyB0aGVuXG4iIFwKKyAgICAgICAgICAgICIgICAgbWtkaXIgLXAgJDEvZXRjL3JwbS1wb3N0aW5zdHNcbiIgXAorICAgICAgICAgICAgIiAgICBudW09MTAwXG4iIFwKKyAgICAgICAgICAgICIgICAgd2hpbGUgWyAtZSAkMS9ldGMvcnBtLXBvc3RpbnN0cy8ke251bX0tKiBdOyBkbyBudW09JCgobnVtICsgMSkpOyBkb25lXG4iIFwKKyAgICAgICAgICAgICIgICAgbmFtZT1gaGVhZCAtMSAiICsgc2NyaXB0cGF0aCArICIgfCBjdXQgLWRcJyBcJyAtZiAyYFxuIiBcCisgICAgICAgICAgICAnICAgIGVjaG8gIiMhJDIiID4gJDEvZXRjL3JwbS1wb3N0aW5zdHMvJHtudW19LSR7bmFtZX1cbicgXAorICAgICAgICAgICAgJyAgICBlY2hvICIjIEFyZzogJDQiID4+ICQxL2V0Yy9ycG0tcG9zdGluc3RzLyR7bnVtfS0ke25hbWV9XG4nIFwKKyAgICAgICAgICAgICIgICAgY2F0ICIgKyBzY3JpcHRwYXRoICsgIiA+PiAkMS9ldGMvcnBtLXBvc3RpbnN0cy8ke251bX0tJHtuYW1lfVxuIiBcCisgICAgICAgICAgICAiICAgIGNobW9kICt4ICQxL2V0Yy9ycG0tcG9zdGluc3RzLyR7bnVtfS0ke25hbWV9XG4iIFwKKyAgICAgICAgICAgICIgIGVsc2VcbiIgXAorICAgICAgICAgICAgJyAgICBlY2hvICJFcnJvcjogcHJlL3Bvc3QgcmVtb3ZlIHNjcmlwdGxldCBmYWlsZWQiXG4nIFwKKyAgICAgICAgICAgICIgIGZpXG4iIFwKKyAgICAgICAgICAgICJmaVxuIgorCisgICAgICAgIGludGVyY2VwdF9kaXIgPSBzZWxmLmQuZXhwYW5kKCcke1dPUktESVJ9L2ludGVyY2VwdF9zY3JpcHRzJykKKyAgICAgICAgbmF0aXZlX3Jvb3QgPSBzZWxmLmQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9OQVRJVkUnLCBUcnVlKQorICAgICAgICBzY3JpcHRsZXRfY29udGVudCA9IFNDUklQVExFVF9GT1JNQVQgJSAob3MuZW52aXJvblsnUEFUSCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YXJnZXRfcm9vdGZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJjZXB0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9yb290KQorICAgICAgICBvcGVuKHNlbGYuc2NyaXB0bGV0X3dyYXBwZXIsICd3KycpLndyaXRlKHNjcmlwdGxldF9jb250ZW50KQorCisgICAgICAgIGJiLm5vdGUoIk5vdGU6IGNvbmZpZ3VyaW5nIFJQTSBjcm9zcy1pbnN0YWxsIHNjcmlwdGxldF93cmFwcGVyIikKKyAgICAgICAgb3MuY2htb2Qoc2VsZi5zY3JpcHRsZXRfd3JhcHBlciwgMDc1NSkKKyAgICAgICAgY21kID0gJ2NvbmZpZyAtLXNldCBycG0tZXh0cmEtbWFjcm9zLl9jcm9zc19zY3JpcHRsZXRfd3JhcHBlcj0lcycgJSBcCisgICAgICAgICAgICAgIHNlbGYuc2NyaXB0bGV0X3dyYXBwZXIKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KGNtZCkKKworICAgICAgICAjIERlYnVnIHRvIHNob3cgc21hcnQgY29uZmlnIGluZm8KKyAgICAgICAgIyBiYi5ub3RlKHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2hvdycpKQorCisgICAgZGVmIHVwZGF0ZShzZWxmKToKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCd1cGRhdGUgcnBtc3lzJykKKworICAgICcnJworICAgIEluc3RhbGwgcGtncyB3aXRoIHNtYXJ0LCB0aGUgcGtnIG5hbWUgaXMgb2UgZm9ybWF0CisgICAgJycnCisgICAgZGVmIGluc3RhbGwoc2VsZiwgcGtncywgYXR0ZW1wdF9vbmx5PUZhbHNlKToKKworICAgICAgICBpZiBub3QgcGtnczoKKyAgICAgICAgICAgIGJiLm5vdGUoIlRoZXJlIGFyZSBubyBwYWNrYWdlcyB0byBpbnN0YWxsIikKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBiYi5ub3RlKCJJbnN0YWxsaW5nIHRoZSBmb2xsb3dpbmcgcGFja2FnZXM6ICVzIiAlICcgJy5qb2luKHBrZ3MpKQorICAgICAgICBwa2dzID0gc2VsZi5fcGtnX3RyYW5zbGF0ZV9vZV90b19zbWFydChwa2dzLCBhdHRlbXB0X29ubHkpCisKKyAgICAgICAgaWYgbm90IGF0dGVtcHRfb25seToKKyAgICAgICAgICAgIGJiLm5vdGUoJ3RvIGJlIGluc3RhbGxlZDogJXMnICUgJyAnLmpvaW4ocGtncykpCisgICAgICAgICAgICBjbWQgPSAiJXMgJXMgaW5zdGFsbCAteSAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAoc2VsZi5zbWFydF9jbWQsIHNlbGYuc21hcnRfb3B0LCAnICcuam9pbihwa2dzKSkKKyAgICAgICAgICAgIGJiLm5vdGUoY21kKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIubm90ZSgnaW5zdGFsbGluZyBhdHRlbXB0IG9ubHkgcGFja2FnZXMuLi4nKQorICAgICAgICAgICAgYmIubm90ZSgnQXR0ZW1wdGluZyAlcycgJSAnICcuam9pbihwa2dzKSkKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyBpbnN0YWxsIC0tYXR0ZW1wdCAteSAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAoc2VsZi5zbWFydF9jbWQsIHNlbGYuc21hcnRfb3B0LCAnICcuam9pbihwa2dzKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLnNwbGl0KCksIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgIGJiLm5vdGUob3V0cHV0KQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJVbmFibGUgdG8gaW5zdGFsbCBwYWNrYWdlcy4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgJycnCisgICAgUmVtb3ZlIHBrZ3Mgd2l0aCBzbWFydCwgdGhlIHBrZyBuYW1lIGlzIHNtYXJ0L3JwbSBmb3JtYXQKKyAgICAnJycKKyAgICBkZWYgcmVtb3ZlKHNlbGYsIHBrZ3MsIHdpdGhfZGVwZW5kZW5jaWVzPVRydWUpOgorICAgICAgICBiYi5ub3RlKCd0byBiZSByZW1vdmVkOiAnICsgJyAnLmpvaW4ocGtncykpCisKKyAgICAgICAgaWYgbm90IHdpdGhfZGVwZW5kZW5jaWVzOgorICAgICAgICAgICAgY21kID0gIiVzIC1lIC0tbm9kZXBzICIgJSBzZWxmLnJwbV9jbWQKKyAgICAgICAgICAgIGNtZCArPSAiLS1yb290PSVzICIgJSBzZWxmLnRhcmdldF9yb290ZnMKKyAgICAgICAgICAgIGNtZCArPSAiLS1kYnBhdGg9L3Zhci9saWIvcnBtICIKKyAgICAgICAgICAgIGNtZCArPSAiLS1kZWZpbmU9J19jcm9zc19zY3JpcHRsZXRfd3JhcHBlciAlcycgIiAlIFwKKyAgICAgICAgICAgICAgICAgICBzZWxmLnNjcmlwdGxldF93cmFwcGVyCisgICAgICAgICAgICBjbWQgKz0gIi0tZGVmaW5lPSdfdG1wcGF0aCAvJXMvdG1wJyAlcyIgJSAoc2VsZi5pbnN0YWxsX2Rpcl9uYW1lLCAnICcuam9pbihwa2dzKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgZm9yIHBrZyBpbiBwa2dzOgorICAgICAgICAgICAgIyAgIGJiLm5vdGUoJ0RlYnVnOiBXaGF0IHJlcXVpcmVkOiAlcycgJSBwa2cpCisgICAgICAgICAgICAjICAgYmIubm90ZShzZWxmLl9pbnZva2Vfc21hcnQoJ3F1ZXJ5ICVzIC0tc2hvdy1yZXF1aXJlZGJ5JyAlIHBrZykpCisKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyByZW1vdmUgLXkgJXMiICUgKHNlbGYuc21hcnRfY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zbWFydF9vcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICcuam9pbihwa2dzKSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi5ub3RlKGNtZCkKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgYmIubm90ZShvdXRwdXQpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIubm90ZSgiVW5hYmxlIHRvIHJlbW92ZSBwYWNrYWdlcy4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICBkZWYgdXBncmFkZShzZWxmKToKKyAgICAgICAgYmIubm90ZSgnc21hcnQgdXBncmFkZScpCisgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgndXBncmFkZScpCisKKyAgICBkZWYgd3JpdGVfaW5kZXgoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuaW5kZXhlci53cml0ZV9pbmRleCgpCisKKyAgICAgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYmIuZmF0YWwocmVzdWx0KQorCisgICAgZGVmIHJlbW92ZV9wYWNrYWdpbmdfZGF0YShzZWxmKToKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuaW1hZ2VfcnBtbGliLCBUcnVlKQorICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYudGFyZ2V0X3Jvb3RmcywgJ3Zhci9saWIvc21hcnQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXRfcm9vdGZzLCAndmFyL2xpYi9vcGtnJyksIFRydWUpCisKKyAgICAgICAgIyByZW1vdmUgdGVtcCBkaXJlY3RvcnkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuaW5zdGFsbF9kaXJfcGF0aCwgVHJ1ZSkKKworICAgIGRlZiBiYWNrdXBfcGFja2FnaW5nX2RhdGEoc2VsZik6CisgICAgICAgICMgU2F2ZSB0aGUgcnBtbGliIGZvciBpbmNyZW1lbnQgcnBtIGltYWdlIGdlbmVyYXRpb24KKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5zYXZlZF9ycG1saWIpOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuc2F2ZWRfcnBtbGliLCBUcnVlKQorICAgICAgICBzaHV0aWwuY29weXRyZWUoc2VsZi5pbWFnZV9ycG1saWIsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNhdmVkX3JwbWxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzPVRydWUpCisKKyAgICBkZWYgcmVjb3ZlcnlfcGFja2FnaW5nX2RhdGEoc2VsZik6CisgICAgICAgICMgTW92ZSB0aGUgcnBtbGliIGJhY2sKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5zYXZlZF9ycG1saWIpOgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5pbWFnZV9ycG1saWIpOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLmltYWdlX3JwbWxpYiwgVHJ1ZSkKKworICAgICAgICAgICAgYmIubm90ZSgnUmVjb3ZlcnkgcGFja2FnaW5nIGRhdGEnKQorICAgICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNlbGYuc2F2ZWRfcnBtbGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2VfcnBtbGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzPVRydWUpCisKKyAgICBkZWYgbGlzdF9pbnN0YWxsZWQoc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5wa2dzX2xpc3QubGlzdChmb3JtYXQpCisKKyAgICAnJycKKyAgICBJZiBpbmNyZW1lbnRhbCBpbnN0YWxsLCB3ZSBuZWVkIHRvIGRldGVybWluZSB3aGF0IHdlJ3ZlIGdvdCwKKyAgICB3aGF0IHdlIG5lZWQgdG8gYWRkLCBhbmQgd2hhdCB0byByZW1vdmUuLi4KKyAgICBUaGUgZHVtcF9pbnN0YWxsX3NvbHV0aW9uIHdpbGwgZHVtcCBhbmQgc2F2ZSB0aGUgbmV3IGluc3RhbGwKKyAgICBzb2x1dGlvbi4KKyAgICAnJycKKyAgICBkZWYgZHVtcF9pbnN0YWxsX3NvbHV0aW9uKHNlbGYsIHBrZ3MpOgorICAgICAgICBiYi5ub3RlKCdjcmVhdGluZyBuZXcgaW5zdGFsbCBzb2x1dGlvbiBmb3IgaW5jcmVtZW50YWwgaW5zdGFsbCcpCisgICAgICAgIGlmIGxlbihwa2dzKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcGtncyA9IHNlbGYuX3BrZ190cmFuc2xhdGVfb2VfdG9fc21hcnQocGtncywgRmFsc2UpCisgICAgICAgIGluc3RhbGxfcGtncyA9IGxpc3QoKQorCisgICAgICAgIGNtZCA9ICIlcyAlcyBpbnN0YWxsIC15IC0tZHVtcCAlcyAyPiVzIiAlICBcCisgICAgICAgICAgICAgIChzZWxmLnNtYXJ0X2NtZCwKKyAgICAgICAgICAgICAgIHNlbGYuc21hcnRfb3B0LAorICAgICAgICAgICAgICAgJyAnLmpvaW4ocGtncyksCisgICAgICAgICAgICAgICBzZWxmLnNvbHV0aW9uX21hbmlmZXN0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIERpc2FibGUgcnBtc3lzIGNoYW5uZWwgZm9yIHRoZSBmYWtlIGluc3RhbGwKKyAgICAgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY2hhbm5lbCAtLWRpc2FibGUgcnBtc3lzJykKKworICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5zb2x1dGlvbl9tYW5pZmVzdCwgJ3InKSBhcyBtYW5pZmVzdDoKKyAgICAgICAgICAgICAgICBmb3IgcGtnIGluIG1hbmlmZXN0LnJlYWQoKS5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICAgICAgaWYgJ0AnIGluIHBrZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxfcGtncy5hcHBlbmQocGtnKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLm5vdGUoIlVuYWJsZSB0byBkdW1wIGluc3RhbGwgcGFja2FnZXMuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorICAgICAgICAjIFJlY292ZXJ5IHJwbXN5cyBjaGFubmVsCisgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY2hhbm5lbCAtLWVuYWJsZSBycG1zeXMnKQorICAgICAgICByZXR1cm4gaW5zdGFsbF9wa2dzCisKKyAgICAnJycKKyAgICBJZiBpbmNyZW1lbnRhbCBpbnN0YWxsLCB3ZSBuZWVkIHRvIGRldGVybWluZSB3aGF0IHdlJ3ZlIGdvdCwKKyAgICB3aGF0IHdlIG5lZWQgdG8gYWRkLCBhbmQgd2hhdCB0byByZW1vdmUuLi4KKyAgICBUaGUgbG9hZF9vbGRfaW5zdGFsbF9zb2x1dGlvbiB3aWxsIGxvYWQgdGhlIHByZXZpb3VzIGluc3RhbGwKKyAgICBzb2x1dGlvbgorICAgICcnJworICAgIGRlZiBsb2FkX29sZF9pbnN0YWxsX3NvbHV0aW9uKHNlbGYpOgorICAgICAgICBiYi5ub3RlKCdsb2FkIG9sZCBpbnN0YWxsIHNvbHV0aW9uIGZvciBpbmNyZW1lbnRhbCBpbnN0YWxsJykKKyAgICAgICAgaW5zdGFsbGVkX3BrZ3MgPSBsaXN0KCkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuc29sdXRpb25fbWFuaWZlc3QpOgorICAgICAgICAgICAgYmIubm90ZSgnb2xkIGluc3RhbGwgc29sdXRpb24gbm90IGV4aXN0JykKKyAgICAgICAgICAgIHJldHVybiBpbnN0YWxsZWRfcGtncworCisgICAgICAgIHdpdGggb3BlbihzZWxmLnNvbHV0aW9uX21hbmlmZXN0LCAncicpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgZm9yIHBrZyBpbiBtYW5pZmVzdC5yZWFkKCkuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgaWYgJ0AnIGluIHBrZzoKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkX3BrZ3MuYXBwZW5kKHBrZy5zdHJpcCgpKQorCisgICAgICAgIHJldHVybiBpbnN0YWxsZWRfcGtncworCisgICAgJycnCisgICAgRHVtcCBhbGwgYXZhaWxhYmxlIHBhY2thZ2VzIGluIGZlZWRzLCBpdCBzaG91bGQgYmUgaW52b2tlZCBhZnRlciB0aGUKKyAgICBuZXdlc3QgcnBtIGluZGV4IHdhcyBjcmVhdGVkCisgICAgJycnCisgICAgZGVmIGR1bXBfYWxsX2F2YWlsYWJsZV9wa2dzKHNlbGYpOgorICAgICAgICBhdmFpbGFibGVfbWFuaWZlc3QgPSBzZWxmLmQuZXhwYW5kKCcke1R9L3NhdmVkL2F2YWlsYWJsZV9wa2dzLnR4dCcpCisgICAgICAgIGF2YWlsYWJsZV9wa2dzID0gbGlzdCgpCisgICAgICAgIGNtZCA9ICIlcyAlcyBxdWVyeSAtLW91dHB1dCAlcyIgJSAgXAorICAgICAgICAgICAgICAoc2VsZi5zbWFydF9jbWQsIHNlbGYuc21hcnRfb3B0LCBhdmFpbGFibGVfbWFuaWZlc3QpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgd2l0aCBvcGVuKGF2YWlsYWJsZV9tYW5pZmVzdCwgJ3InKSBhcyBtYW5pZmVzdDoKKyAgICAgICAgICAgICAgICBmb3IgcGtnIGluIG1hbmlmZXN0LnJlYWQoKS5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICAgICAgaWYgJ0AnIGluIHBrZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZV9wa2dzLmFwcGVuZChwa2cuc3RyaXAoKSkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5ub3RlKCJVbmFibGUgdG8gbGlzdCBhbGwgYXZhaWxhYmxlIHBhY2thZ2VzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgICAgICBzZWxmLmZ1bGxwa2dsaXN0ID0gYXZhaWxhYmxlX3BrZ3MKKworICAgICAgICByZXR1cm4KKworICAgIGRlZiBzYXZlX3JwbXBvc3RpbnN0KHNlbGYsIHBrZyk6CisgICAgICAgIG1saWJzID0gKHNlbGYuZC5nZXRWYXIoJ01VTFRJTElCX0dMT0JBTF9WQVJJQU5UUycsIEZhbHNlKSBvciAiIikuc3BsaXQoKQorCisgICAgICAgIG5ld19wa2cgPSBwa2cKKyAgICAgICAgIyBSZW1vdmUgYW55IG11bHRpbGliIHByZWZpeCBmcm9tIHRoZSBwYWNrYWdlIG5hbWUKKyAgICAgICAgZm9yIG1saWIgaW4gbWxpYnM6CisgICAgICAgICAgICBpZiBtbGliIGluIHBrZzoKKyAgICAgICAgICAgICAgICBuZXdfcGtnID0gcGtnLnJlcGxhY2UobWxpYiArICctJywgJycpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBiYi5ub3RlKCcgICogcG9zdHBvbmluZyAlcycgJSBuZXdfcGtnKQorICAgICAgICBzYXZlZF9kaXIgPSBzZWxmLnRhcmdldF9yb290ZnMgKyBzZWxmLmQuZXhwYW5kKCcke3N5c2NvbmZkaXJ9L3JwbS1wb3N0aW5zdHMvJykgKyBuZXdfcGtnCisKKyAgICAgICAgY21kID0gc2VsZi5ycG1fY21kICsgJyAtcSAtLXNjcmlwdHMgLS1yb290ICcgKyBzZWxmLnRhcmdldF9yb290ZnMKKyAgICAgICAgY21kICs9ICcgLS1kYnBhdGg9L3Zhci9saWIvcnBtICcgKyBuZXdfcGtnCisgICAgICAgIGNtZCArPSAnIHwgc2VkIC1uIC1lICIvXnBvc3RpbnN0YWxsIHNjcmlwdGxldCAodXNpbmcgLiopOiQvLC9eLiogc2NyaXB0bGV0ICh1c2luZyAuKik6JC8gey8uKi9wfSInCisgICAgICAgIGNtZCArPSAnIHwgc2VkIC1lICIvcG9zdGluc3RhbGwgc2NyaXB0bGV0ICh1c2luZyBcKC4qXCkpOiQvZCInCisgICAgICAgIGNtZCArPSAnIC1lICIvXi4qIHNjcmlwdGxldCAodXNpbmcgLiopOiQvZCIgPiAlcycgJSBzYXZlZF9kaXIKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi5ub3RlKGNtZCkKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKS5zdHJpcCgpCisgICAgICAgICAgICBiYi5ub3RlKG91dHB1dCkKKyAgICAgICAgICAgIG9zLmNobW9kKHNhdmVkX2RpciwgMDc1NSkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiSW52b2tlIHNhdmVfcnBtcG9zdGluc3QgZmFpbGVkLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAnJydXcml0ZSBjb21tb24gY29uZmlndXJhdGlvbiBmb3IgdGFyZ2V0IHVzYWdlJycnCisgICAgZGVmIHJwbV9zZXR1cF9zbWFydF90YXJnZXRfY29uZmlnKHNlbGYpOgorICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYudGFyZ2V0X3Jvb3RmcywgJ3Zhci9saWIvc21hcnQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpCisKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjb25maWcgLS1zZXQgcnBtLW5vbGlua3Rvcz0xJykKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjb25maWcgLS1zZXQgcnBtLW5vcGFyZW50ZGlycz0xJykKKyAgICAgICAgZm9yIGkgaW4gc2VsZi5kLmdldFZhcignQkFEX1JFQ09NTUVOREFUSU9OUycsIFRydWUpLnNwbGl0KCk6CisgICAgICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2ZsYWcgLS1zZXQgaWdub3JlLXJlY29tbWVuZHMgJXMnICUgaSkKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjaGFubmVsIC0tYWRkIHJwbXN5cyB0eXBlPXJwbS1zeXMgLXknKQorCisgICAgJycnCisgICAgVGhlIHJwbSBkYiBsb2NrIGZpbGVzIHdlcmUgcHJvZHVjZWQgYWZ0ZXIgaW52b2tpbmcgcnBtIHRvIHF1ZXJ5IG9uCisgICAgYnVpbGQgc3lzdGVtLCBhbmQgdGhleSBjYXVzZWQgdGhlIHJwbSBvbiB0YXJnZXQgZGlkbid0IHdvcmssIHNvIHdlCisgICAgbmVlZCB0byB1bmxvY2sgdGhlIHJwbSBkYiBieSByZW1vdmluZyB0aGUgbG9jayBmaWxlcy4KKyAgICAnJycKKyAgICBkZWYgdW5sb2NrX3JwbV9kYihzZWxmKToKKyAgICAgICAgIyBSZW1vdmUgcnBtIGRiIGxvY2sgZmlsZXMKKyAgICAgICAgcnBtX2RiX2xvY2tzID0gZ2xvYi5nbG9iKCclcy92YXIvbGliL3JwbS9fX2RiLionICUgc2VsZi50YXJnZXRfcm9vdGZzKQorICAgICAgICBmb3IgZiBpbiBycG1fZGJfbG9ja3M6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoZiwgVHJ1ZSkKKworCitjbGFzcyBPcGtnUE0oUGFja2FnZU1hbmFnZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCB0YXJnZXRfcm9vdGZzLCBjb25maWdfZmlsZSwgYXJjaHMsIHRhc2tfbmFtZT0ndGFyZ2V0Jyk6CisgICAgICAgIHN1cGVyKE9wa2dQTSwgc2VsZikuX19pbml0X18oZCkKKworICAgICAgICBzZWxmLnRhcmdldF9yb290ZnMgPSB0YXJnZXRfcm9vdGZzCisgICAgICAgIHNlbGYuY29uZmlnX2ZpbGUgPSBjb25maWdfZmlsZQorICAgICAgICBzZWxmLnBrZ19hcmNocyA9IGFyY2hzCisgICAgICAgIHNlbGYudGFza19uYW1lID0gdGFza19uYW1lCisKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyID0gc2VsZi5kLmdldFZhcigiREVQTE9ZX0RJUl9JUEsiLCBUcnVlKQorICAgICAgICBzZWxmLmRlcGxveV9sb2NrX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCAiZGVwbG95LmxvY2siKQorICAgICAgICBzZWxmLm9wa2dfY21kID0gYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJvcGtnIikKKyAgICAgICAgc2VsZi5vcGtnX2FyZ3MgPSAiLS12b2xhdGlsZS1jYWNoZSAtZiAlcyAtbyAlcyAiICUgKHNlbGYuY29uZmlnX2ZpbGUsIHRhcmdldF9yb290ZnMpCisgICAgICAgIHNlbGYub3BrZ19hcmdzICs9IHNlbGYuZC5nZXRWYXIoIk9QS0dfQVJHUyIsIFRydWUpCisKKyAgICAgICAgb3BrZ19saWJfZGlyID0gc2VsZi5kLmdldFZhcignT1BLR0xJQkRJUicsIFRydWUpCisgICAgICAgIGlmIG9wa2dfbGliX2RpclswXSA9PSAiLyI6CisgICAgICAgICAgICBvcGtnX2xpYl9kaXIgPSBvcGtnX2xpYl9kaXJbMTpdCisKKyAgICAgICAgc2VsZi5vcGtnX2RpciA9IG9zLnBhdGguam9pbih0YXJnZXRfcm9vdGZzLCBvcGtnX2xpYl9kaXIsICJvcGtnIikKKworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5vcGtnX2RpcikKKworICAgICAgICBzZWxmLnNhdmVkX29wa2dfZGlyID0gc2VsZi5kLmV4cGFuZCgnJHtUfS9zYXZlZC8lcycgJSBzZWxmLnRhc2tfbmFtZSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuZC5leHBhbmQoJyR7VH0vc2F2ZWQnKSk6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5kLmV4cGFuZCgnJHtUfS9zYXZlZCcpKQorCisgICAgICAgIGlmIChzZWxmLmQuZ2V0VmFyKCdCVUlMRF9JTUFHRVNfRlJPTV9GRUVEUycsIFRydWUpIG9yICIiKSAhPSAiMSI6CisgICAgICAgICAgICBzZWxmLl9jcmVhdGVfY29uZmlnKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9jdXN0b21fY29uZmlnKCkKKworICAgICAgICBzZWxmLmluZGV4ZXIgPSBPcGtnSW5kZXhlcihzZWxmLmQsIHNlbGYuZGVwbG95X2RpcikKKworICAgICIiIgorICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGFuZ2UgYSBwYWNrYWdlJ3Mgc3RhdHVzIGluIC92YXIvbGliL29wa2cvc3RhdHVzIGZpbGUuCisgICAgSWYgJ3BhY2thZ2VzJyBpcyBOb25lIHRoZW4gdGhlIG5ld19zdGF0dXMgd2lsbCBiZSBhcHBsaWVkIHRvIGFsbAorICAgIHBhY2thZ2VzCisgICAgIiIiCisgICAgZGVmIG1hcmtfcGFja2FnZXMoc2VsZiwgc3RhdHVzX3RhZywgcGFja2FnZXM9Tm9uZSk6CisgICAgICAgIHN0YXR1c19maWxlID0gb3MucGF0aC5qb2luKHNlbGYub3BrZ19kaXIsICJzdGF0dXMiKQorCisgICAgICAgIHdpdGggb3BlbihzdGF0dXNfZmlsZSwgInIiKSBhcyBzZjoKKyAgICAgICAgICAgIHdpdGggb3BlbihzdGF0dXNfZmlsZSArICIudG1wIiwgIncrIikgYXMgdG1wX3NmOgorICAgICAgICAgICAgICAgIGlmIHBhY2thZ2VzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHRtcF9zZi53cml0ZShyZS5zdWIociJQYWNrYWdlOiAoLio/KVxuKCg/OlteXG5dK1xuKSo/KVN0YXR1czogKC4qKSg/OnVucGFja2VkfGluc3RhbGxlZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiUGFja2FnZTogXDFcblwyU3RhdHVzOiBcMyVzIiAlIHN0YXR1c190YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2YucmVhZCgpKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiB0eXBlKHBhY2thZ2VzKS5fX25hbWVfXyAhPSAibGlzdCI6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIidwYWNrYWdlcycgc2hvdWxkIGJlIGEgbGlzdCBvYmplY3QiKQorCisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNmLnJlYWQoKQorICAgICAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gcmUuc3ViKHIiUGFja2FnZTogJXNcbigoPzpbXlxuXStcbikqPylTdGF0dXM6ICguKikoPzp1bnBhY2tlZHxpbnN0YWxsZWQpIiAlIHBrZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIlBhY2thZ2U6ICVzXG5cMVN0YXR1czogXDIlcyIgJSAocGtnLCBzdGF0dXNfdGFnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMpCisKKyAgICAgICAgICAgICAgICAgICAgdG1wX3NmLndyaXRlKHN0YXR1cykKKworICAgICAgICBvcy5yZW5hbWUoc3RhdHVzX2ZpbGUgKyAiLnRtcCIsIHN0YXR1c19maWxlKQorCisgICAgZGVmIF9jcmVhdGVfY3VzdG9tX2NvbmZpZyhzZWxmKToKKyAgICAgICAgYmIubm90ZSgiQnVpbGRpbmcgZnJvbSBmZWVkcyBhY3RpdmF0ZWQhIikKKworICAgICAgICB3aXRoIG9wZW4oc2VsZi5jb25maWdfZmlsZSwgIncrIikgYXMgY29uZmlnX2ZpbGU6CisgICAgICAgICAgICBwcmlvcml0eSA9IDEKKyAgICAgICAgICAgIGZvciBhcmNoIGluIHNlbGYucGtnX2FyY2hzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgY29uZmlnX2ZpbGUud3JpdGUoImFyY2ggJXMgJWRcbiIgJSAoYXJjaCwgcHJpb3JpdHkpKQorICAgICAgICAgICAgICAgIHByaW9yaXR5ICs9IDUKKworICAgICAgICAgICAgZm9yIGxpbmUgaW4gKHNlbGYuZC5nZXRWYXIoJ0lQS19GRUVEX1VSSVMnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBmZWVkX21hdGNoID0gcmUubWF0Y2goIl5bIFx0XSooLiopIyMoW14gXHRdKilbIFx0XSokIiwgbGluZSkKKworICAgICAgICAgICAgICAgIGlmIGZlZWRfbWF0Y2ggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGZlZWRfbmFtZSA9IGZlZWRfbWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgZmVlZF91cmkgPSBmZWVkX21hdGNoLmdyb3VwKDIpCisKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiQWRkICVzIGZlZWQgd2l0aCBVUkwgJXMiICUgKGZlZWRfbmFtZSwgZmVlZF91cmkpKQorCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ19maWxlLndyaXRlKCJzcmMvZ3ogJXMgJXNcbiIgJSAoZmVlZF9uYW1lLCBmZWVkX3VyaSkpCisKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgQWxsb3cgdG8gdXNlIHBhY2thZ2UgZGVwbG95IGRpcmVjdG9yeSBjb250ZW50cyBhcyBxdWljayBkZXZlbC10ZXN0aW5nCisgICAgICAgICAgICBmZWVkLiBUaGlzIGNyZWF0ZXMgaW5kaXZpZHVhbCBmZWVkIGNvbmZpZ3MgZm9yIGVhY2ggYXJjaCBzdWJkaXIgb2YgdGhvc2UKKyAgICAgICAgICAgIHNwZWNpZmllZCBhcyBjb21wYXRpYmxlIGZvciB0aGUgY3VycmVudCBtYWNoaW5lLgorICAgICAgICAgICAgTk9URTogRGV2ZWxvcG1lbnQtaGVscGVyIGZlYXR1cmUsIE5PVCBhIGZ1bGwtZmxlZGdlZCBmZWVkLgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBpZiAoc2VsZi5kLmdldFZhcignRkVFRF9ERVBMT1lESVJfQkFTRV9VUkknLCBUcnVlKSBvciAiIikgIT0gIiI6CisgICAgICAgICAgICAgICAgZm9yIGFyY2ggaW4gc2VsZi5wa2dfYXJjaHMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgY2ZnX2ZpbGVfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLnRhcmdldF9yb290ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcigic3lzY29uZmRpciIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGtnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9jYWwtJXMtZmVlZC5jb25mIiAlIGFyY2gpCisKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGNmZ19maWxlX25hbWUsICJ3KyIpIGFzIGNmZ19maWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgY2ZnX2ZpbGUud3JpdGUoInNyYy9neiBsb2NhbC0lcyAlcy8lcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFyY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignRkVFRF9ERVBMT1lESVJfQkFTRV9VUkknLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoKSkKKworICAgIGRlZiBfY3JlYXRlX2NvbmZpZyhzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuY29uZmlnX2ZpbGUsICJ3KyIpIGFzIGNvbmZpZ19maWxlOgorICAgICAgICAgICAgcHJpb3JpdHkgPSAxCisgICAgICAgICAgICBmb3IgYXJjaCBpbiBzZWxmLnBrZ19hcmNocy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGNvbmZpZ19maWxlLndyaXRlKCJhcmNoICVzICVkXG4iICUgKGFyY2gsIHByaW9yaXR5KSkKKyAgICAgICAgICAgICAgICBwcmlvcml0eSArPSA1CisKKyAgICAgICAgICAgIGNvbmZpZ19maWxlLndyaXRlKCJzcmMgb2UgZmlsZTolc1xuIiAlIHNlbGYuZGVwbG95X2RpcikKKworICAgICAgICAgICAgZm9yIGFyY2ggaW4gc2VsZi5wa2dfYXJjaHMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBwa2dzX2RpciA9IG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsIGFyY2gpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihwa2dzX2Rpcik6CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ19maWxlLndyaXRlKCJzcmMgb2UtJXMgZmlsZTolc1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcmNoLCBwa2dzX2RpcikpCisKKyAgICBkZWYgaW5zZXJ0X2ZlZWRzX3VyaXMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZmVlZF91cmlzID09ICIiOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcm9vdGZzX2NvbmZpZyA9IG9zLnBhdGguam9pbignJXMvZXRjL29wa2cvYmFzZS1mZWVkcy5jb25mJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgc2VsZi50YXJnZXRfcm9vdGZzKQorCisgICAgICAgIHdpdGggb3Blbihyb290ZnNfY29uZmlnLCAidysiKSBhcyBjb25maWdfZmlsZToKKyAgICAgICAgICAgIHVyaV9pdGVyYXRvciA9IDAKKyAgICAgICAgICAgIGZvciB1cmkgaW4gc2VsZi5mZWVkX3VyaXMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBmdWxsX3VyaSA9IHVyaQorICAgICAgICAgICAgICAgIGlmIHNlbGYuZmVlZF9wcmVmaXg6CisgICAgICAgICAgICAgICAgICAgIGZ1bGxfdXJpID0gb3MucGF0aC5qb2luKHVyaSwgc2VsZi5mZWVkX3ByZWZpeCkKKworICAgICAgICAgICAgICAgIGZvciBhcmNoIGluIHNlbGYucGtnX2FyY2hzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCdOb3RlOiBhZGRpbmcgb3BrZyBmZWVkIHVybC0lcy0lZCAoJXMpJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAoYXJjaCwgdXJpX2l0ZXJhdG9yLCBmdWxsX3VyaSkpCisKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnX2ZpbGUud3JpdGUoInNyYy9neiB1cmktJXMtJWQgJXMvJXNcbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXJjaCwgdXJpX2l0ZXJhdG9yLCBmdWxsX3VyaSwgYXJjaCkpCisgICAgICAgICAgICAgICAgdXJpX2l0ZXJhdG9yICs9IDEKKworICAgIGRlZiB1cGRhdGUoc2VsZik6CisgICAgICAgIHNlbGYuZGVwbG95X2Rpcl9sb2NrKCkKKworICAgICAgICBjbWQgPSAiJXMgJXMgdXBkYXRlIiAlIChzZWxmLm9wa2dfY21kLCBzZWxmLm9wa2dfYXJncykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQuc3BsaXQoKSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHNlbGYuZGVwbG95X2Rpcl91bmxvY2soKQorICAgICAgICAgICAgYmIuZmF0YWwoIlVuYWJsZSB0byB1cGRhdGUgdGhlIHBhY2thZ2UgaW5kZXggZmlsZXMuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgICAgICBzZWxmLmRlcGxveV9kaXJfdW5sb2NrKCkKKworICAgIGRlZiBpbnN0YWxsKHNlbGYsIHBrZ3MsIGF0dGVtcHRfb25seT1GYWxzZSk6CisgICAgICAgIGlmIGF0dGVtcHRfb25seSBhbmQgbGVuKHBrZ3MpID09IDA6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBjbWQgPSAiJXMgJXMgaW5zdGFsbCAlcyIgJSAoc2VsZi5vcGtnX2NtZCwgc2VsZi5vcGtnX2FyZ3MsICcgJy5qb2luKHBrZ3MpKQorCisgICAgICAgIG9zLmVudmlyb25bJ0QnXSA9IHNlbGYudGFyZ2V0X3Jvb3RmcworICAgICAgICBvcy5lbnZpcm9uWydPRkZMSU5FX1JPT1QnXSA9IHNlbGYudGFyZ2V0X3Jvb3RmcworICAgICAgICBvcy5lbnZpcm9uWydJUEtHX09GRkxJTkVfUk9PVCddID0gc2VsZi50YXJnZXRfcm9vdGZzCisgICAgICAgIG9zLmVudmlyb25bJ09QS0dfT0ZGTElORV9ST09UJ10gPSBzZWxmLnRhcmdldF9yb290ZnMKKyAgICAgICAgb3MuZW52aXJvblsnSU5URVJDRVBUX0RJUiddID0gb3MucGF0aC5qb2luKHNlbGYuZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmNlcHRfc2NyaXB0cyIpCisgICAgICAgIG9zLmVudmlyb25bJ05BVElWRV9ST09UJ10gPSBzZWxmLmQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9OQVRJVkUnLCBUcnVlKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgdGhlIGZvbGxvd2luZyBwYWNrYWdlczogJXMiICUgJyAnLmpvaW4ocGtncykpCisgICAgICAgICAgICBiYi5ub3RlKGNtZCkKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZC5zcGxpdCgpLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgICAgICBiYi5ub3RlKG91dHB1dCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICAoYmIuZmF0YWwsIGJiLm5vdGUpW2F0dGVtcHRfb25seV0oIlVuYWJsZSB0byBpbnN0YWxsIHBhY2thZ2VzLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbW1hbmQgJyVzJyByZXR1cm5lZCAlZDpcbiVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICBkZWYgcmVtb3ZlKHNlbGYsIHBrZ3MsIHdpdGhfZGVwZW5kZW5jaWVzPVRydWUpOgorICAgICAgICBpZiB3aXRoX2RlcGVuZGVuY2llczoKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyAtLWZvcmNlLWRlcGVuZHMgLS1mb3JjZS1yZW1vdmUgLS1mb3JjZS1yZW1vdmFsLW9mLWRlcGVuZGVudC1wYWNrYWdlcyByZW1vdmUgJXMiICUgXAorICAgICAgICAgICAgICAgIChzZWxmLm9wa2dfY21kLCBzZWxmLm9wa2dfYXJncywgJyAnLmpvaW4ocGtncykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWQgPSAiJXMgJXMgLS1mb3JjZS1kZXBlbmRzIHJlbW92ZSAlcyIgJSBcCisgICAgICAgICAgICAgICAgKHNlbGYub3BrZ19jbWQsIHNlbGYub3BrZ19hcmdzLCAnICcuam9pbihwa2dzKSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi5ub3RlKGNtZCkKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZC5zcGxpdCgpLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgICAgICBiYi5ub3RlKG91dHB1dCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiVW5hYmxlIHRvIHJlbW92ZSBwYWNrYWdlcy4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChlLmNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICBkZWYgd3JpdGVfaW5kZXgoc2VsZik6CisgICAgICAgIHNlbGYuZGVwbG95X2Rpcl9sb2NrKCkKKworICAgICAgICByZXN1bHQgPSBzZWxmLmluZGV4ZXIud3JpdGVfaW5kZXgoKQorCisgICAgICAgIHNlbGYuZGVwbG95X2Rpcl91bmxvY2soKQorCisgICAgICAgIGlmIHJlc3VsdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGJiLmZhdGFsKHJlc3VsdCkKKworICAgIGRlZiByZW1vdmVfcGFja2FnaW5nX2RhdGEoc2VsZik6CisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLm9wa2dfZGlyLCBUcnVlKQorICAgICAgICAjIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IGJhY2ssIGl0J3MgbmVlZGVkIGJ5IFBNIGxvY2sKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYub3BrZ19kaXIpCisKKyAgICBkZWYgbGlzdF9pbnN0YWxsZWQoc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICByZXR1cm4gT3BrZ1BrZ3NMaXN0KHNlbGYuZCwgc2VsZi50YXJnZXRfcm9vdGZzLCBzZWxmLmNvbmZpZ19maWxlKS5saXN0KGZvcm1hdCkKKworICAgIGRlZiBoYW5kbGVfYmFkX3JlY29tbWVuZGF0aW9ucyhzZWxmKToKKyAgICAgICAgYmFkX3JlY29tbWVuZGF0aW9ucyA9IHNlbGYuZC5nZXRWYXIoIkJBRF9SRUNPTU1FTkRBVElPTlMiLCBUcnVlKSBvciAiIgorICAgICAgICBpZiBiYWRfcmVjb21tZW5kYXRpb25zLnN0cmlwKCkgPT0gIiI6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzdGF0dXNfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLm9wa2dfZGlyLCAic3RhdHVzIikKKworICAgICAgICAjIElmIHN0YXR1cyBmaWxlIGV4aXN0ZWQsIGl0IG1lYW5zIHRoZSBiYWQgcmVjb21tZW5kYXRpb25zIGhhcyBhbHJlYWR5CisgICAgICAgICMgYmVlbiBoYW5kbGVkCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHN0YXR1c19maWxlKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGNtZCA9ICIlcyAlcyBpbmZvICIgJSAoc2VsZi5vcGtnX2NtZCwgc2VsZi5vcGtnX2FyZ3MpCisKKyAgICAgICAgd2l0aCBvcGVuKHN0YXR1c19maWxlLCAidysiKSBhcyBzdGF0dXM6CisgICAgICAgICAgICBmb3IgcGtnIGluIGJhZF9yZWNvbW1lbmRhdGlvbnMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBwa2dfaW5mbyA9IGNtZCArIHBrZworCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChwa2dfaW5mby5zcGxpdCgpLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoIkNhbm5vdCBnZXQgcGFja2FnZSBpbmZvLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAocGtnX2luZm8sIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgICAgICAgICAgaWYgb3V0cHV0ID09ICIiOgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJJZ25vcmVkIGJhZCByZWNvbW1lbmRhdGlvbjogJyVzJyBpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhIHBhY2thZ2UiICUgcGtnKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlN0YXR1czoiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy53cml0ZSgiU3RhdHVzOiBkZWluc3RhbGwgaG9sZCBub3QtaW5zdGFsbGVkXG4iKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLndyaXRlKGxpbmUgKyAiXG4iKQorCisgICAgICAgICAgICAgICAgIyBBcHBlbmQgYSBibGFuayBsaW5lIGFmdGVyIGVhY2ggcGFja2FnZSBlbnRyeSB0byBlbnN1cmUgdGhhdCBpdAorICAgICAgICAgICAgICAgICMgaXMgc2VwYXJhdGVkIGZyb20gdGhlIGZvbGxvd2luZyBlbnRyeQorICAgICAgICAgICAgICAgIHN0YXR1cy53cml0ZSgiXG4iKQorCisgICAgJycnCisgICAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBkdW1teSBpbnN0YWxscyBwa2dzIGFuZCByZXR1cm5zIHRoZSBsb2cgb2Ygb3V0cHV0LgorICAgICcnJworICAgIGRlZiBkdW1teV9pbnN0YWxsKHNlbGYsIHBrZ3MpOgorICAgICAgICBpZiBsZW4ocGtncykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgQ3JlYXRlIGFuIHRlbXAgZGlyIGFzIG9wa2cgcm9vdCBmb3IgZHVtbXkgaW5zdGFsbGF0aW9uCisgICAgICAgIHRlbXBfcm9vdGZzID0gc2VsZi5kLmV4cGFuZCgnJHtUfS9vcGtnJykKKyAgICAgICAgdGVtcF9vcGtnX2RpciA9IG9zLnBhdGguam9pbih0ZW1wX3Jvb3RmcywgJ3Zhci9saWIvb3BrZycpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih0ZW1wX29wa2dfZGlyKQorCisgICAgICAgIG9wa2dfYXJncyA9ICItZiAlcyAtbyAlcyAiICUgKHNlbGYuY29uZmlnX2ZpbGUsIHRlbXBfcm9vdGZzKQorICAgICAgICBvcGtnX2FyZ3MgKz0gc2VsZi5kLmdldFZhcigiT1BLR19BUkdTIiwgVHJ1ZSkKKworICAgICAgICBjbWQgPSAiJXMgJXMgdXBkYXRlIiAlIChzZWxmLm9wa2dfY21kLCBvcGtnX2FyZ3MpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJVbmFibGUgdG8gdXBkYXRlLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgIyBEdW1teSBpbnN0YWxsYXRpb24KKyAgICAgICAgY21kID0gIiVzICVzIC0tbm9hY3Rpb24gaW5zdGFsbCAlcyAiICUgKHNlbGYub3BrZ19jbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGtnX2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICcuam9pbihwa2dzKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIlVuYWJsZSB0byBkdW1teSBpbnN0YWxsIHBhY2thZ2VzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHRlbXBfcm9vdGZzLCBUcnVlKQorCisgICAgICAgIHJldHVybiBvdXRwdXQKKworICAgIGRlZiBiYWNrdXBfcGFja2FnaW5nX2RhdGEoc2VsZik6CisgICAgICAgICMgU2F2ZSB0aGUgb3BrZ2xpYiBmb3IgaW5jcmVtZW50IGlwayBpbWFnZSBnZW5lcmF0aW9uCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuc2F2ZWRfb3BrZ19kaXIpOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuc2F2ZWRfb3BrZ19kaXIsIFRydWUpCisgICAgICAgIHNodXRpbC5jb3B5dHJlZShzZWxmLm9wa2dfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zYXZlZF9vcGtnX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzPVRydWUpCisKKyAgICBkZWYgcmVjb3Zlcl9wYWNrYWdpbmdfZGF0YShzZWxmKToKKyAgICAgICAgIyBNb3ZlIHRoZSBvcGtnbGliIGJhY2sKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5zYXZlZF9vcGtnX2Rpcik6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLm9wa2dfZGlyKToKKyAgICAgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5vcGtnX2RpciwgVHJ1ZSkKKworICAgICAgICAgICAgYmIubm90ZSgnUmVjb3ZlciBwYWNrYWdpbmcgZGF0YScpCisgICAgICAgICAgICBzaHV0aWwuY29weXRyZWUoc2VsZi5zYXZlZF9vcGtnX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wa2dfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzPVRydWUpCisKKworY2xhc3MgRHBrZ1BNKFBhY2thZ2VNYW5hZ2VyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgdGFyZ2V0X3Jvb3RmcywgYXJjaHMsIGJhc2VfYXJjaHMsIGFwdF9jb25mX2Rpcj1Ob25lKToKKyAgICAgICAgc3VwZXIoRHBrZ1BNLCBzZWxmKS5fX2luaXRfXyhkKQorICAgICAgICBzZWxmLnRhcmdldF9yb290ZnMgPSB0YXJnZXRfcm9vdGZzCisgICAgICAgIHNlbGYuZGVwbG95X2RpciA9IHNlbGYuZC5nZXRWYXIoJ0RFUExPWV9ESVJfREVCJywgVHJ1ZSkKKyAgICAgICAgaWYgYXB0X2NvbmZfZGlyIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmFwdF9jb25mX2RpciA9IHNlbGYuZC5leHBhbmQoIiR7QVBUQ09ORl9UQVJHRVR9L2FwdCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFwdF9jb25mX2RpciA9IGFwdF9jb25mX2RpcgorICAgICAgICBzZWxmLmFwdF9jb25mX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5hcHRfY29uZl9kaXIsICJhcHQuY29uZiIpCisgICAgICAgIHNlbGYuYXB0X2dldF9jbWQgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgImFwdC1nZXQiKQorCisgICAgICAgIHNlbGYuYXB0X2FyZ3MgPSBkLmdldFZhcigiQVBUX0FSR1MiLCBUcnVlKQorCisgICAgICAgIHNlbGYuYWxsX2FyY2hfbGlzdCA9IGFyY2hzLnNwbGl0KCkKKyAgICAgICAgYWxsX21sYl9wa2dfYXJjaF9saXN0ID0gKHNlbGYuZC5nZXRWYXIoJ0FMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTJywgVHJ1ZSkgb3IgIiIpLnJlcGxhY2UoJy0nLCAnXycpLnNwbGl0KCkKKyAgICAgICAgc2VsZi5hbGxfYXJjaF9saXN0LmV4dGVuZChhcmNoIGZvciBhcmNoIGluIGFsbF9tbGJfcGtnX2FyY2hfbGlzdCBpZiBhcmNoIG5vdCBpbiBzZWxmLmFsbF9hcmNoX2xpc3QpCisKKyAgICAgICAgc2VsZi5fY3JlYXRlX2NvbmZpZ3MoYXJjaHMsIGJhc2VfYXJjaHMpCisKKyAgICAgICAgc2VsZi5pbmRleGVyID0gRHBrZ0luZGV4ZXIoc2VsZi5kLCBzZWxmLmRlcGxveV9kaXIpCisKKyAgICAiIiIKKyAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgY2hhbmdlIGEgcGFja2FnZSdzIHN0YXR1cyBpbiAvdmFyL2xpYi9kcGtnL3N0YXR1cyBmaWxlLgorICAgIElmICdwYWNrYWdlcycgaXMgTm9uZSB0aGVuIHRoZSBuZXdfc3RhdHVzIHdpbGwgYmUgYXBwbGllZCB0byBhbGwKKyAgICBwYWNrYWdlcworICAgICIiIgorICAgIGRlZiBtYXJrX3BhY2thZ2VzKHNlbGYsIHN0YXR1c190YWcsIHBhY2thZ2VzPU5vbmUpOgorICAgICAgICBzdGF0dXNfZmlsZSA9IHNlbGYudGFyZ2V0X3Jvb3RmcyArICIvdmFyL2xpYi9kcGtnL3N0YXR1cyIKKworICAgICAgICB3aXRoIG9wZW4oc3RhdHVzX2ZpbGUsICJyIikgYXMgc2Y6CisgICAgICAgICAgICB3aXRoIG9wZW4oc3RhdHVzX2ZpbGUgKyAiLnRtcCIsICJ3KyIpIGFzIHRtcF9zZjoKKyAgICAgICAgICAgICAgICBpZiBwYWNrYWdlcyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICB0bXBfc2Yud3JpdGUocmUuc3ViKHIiUGFja2FnZTogKC4qPylcbigoPzpbXlxuXStcbikqPylTdGF0dXM6ICguKikoPzp1bnBhY2tlZHxpbnN0YWxsZWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIlBhY2thZ2U6IFwxXG5cMlN0YXR1czogXDMlcyIgJSBzdGF0dXNfdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmLnJlYWQoKSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgdHlwZShwYWNrYWdlcykuX19uYW1lX18gIT0gImxpc3QiOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCIncGFja2FnZXMnIHNob3VsZCBiZSBhIGxpc3Qgb2JqZWN0IikKKworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBzZi5yZWFkKCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHJlLnN1YihyIlBhY2thZ2U6ICVzXG4oKD86W15cbl0rXG4pKj8pU3RhdHVzOiAoLiopKD86dW5wYWNrZWR8aW5zdGFsbGVkKSIgJSBwa2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJQYWNrYWdlOiAlc1xuXDFTdGF0dXM6IFwyJXMiICUgKHBrZywgc3RhdHVzX3RhZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzKQorCisgICAgICAgICAgICAgICAgICAgIHRtcF9zZi53cml0ZShzdGF0dXMpCisKKyAgICAgICAgb3MucmVuYW1lKHN0YXR1c19maWxlICsgIi50bXAiLCBzdGF0dXNfZmlsZSkKKworICAgICIiIgorICAgIFJ1biB0aGUgcHJlL3Bvc3QgaW5zdGFsbHMgZm9yIHBhY2thZ2UgInBhY2thZ2VfbmFtZSIuIElmIHBhY2thZ2VfbmFtZSBpcworICAgIE5vbmUsIHRoZW4gcnVuIGFsbCBwcmUvcG9zdCBpbnN0YWxsIHNjcmlwdGxldHMuCisgICAgIiIiCisgICAgZGVmIHJ1bl9wcmVfcG9zdF9pbnN0YWxscyhzZWxmLCBwYWNrYWdlX25hbWU9Tm9uZSk6CisgICAgICAgIGluZm9fZGlyID0gc2VsZi50YXJnZXRfcm9vdGZzICsgIi92YXIvbGliL2Rwa2cvaW5mbyIKKyAgICAgICAgc3VmZml4ZXMgPSBbKCIucHJlaW5zdCIsICJQcmVpbnN0YWxsIiksICgiLnBvc3RpbnN0IiwgIlBvc3RpbnN0YWxsIildCisgICAgICAgIHN0YXR1c19maWxlID0gc2VsZi50YXJnZXRfcm9vdGZzICsgIi92YXIvbGliL2Rwa2cvc3RhdHVzIgorICAgICAgICBpbnN0YWxsZWRfcGtncyA9IFtdCisKKyAgICAgICAgd2l0aCBvcGVuKHN0YXR1c19maWxlLCAiciIpIGFzIHN0YXR1czoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHN0YXR1cy5yZWFkKCkuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCJeUGFja2FnZTogKC4qKSIsIGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkX3BrZ3MuYXBwZW5kKG0uZ3JvdXAoMSkpCisKKyAgICAgICAgaWYgcGFja2FnZV9uYW1lIGlzIG5vdCBOb25lIGFuZCBub3QgcGFja2FnZV9uYW1lIGluIGluc3RhbGxlZF9wa2dzOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgb3MuZW52aXJvblsnRCddID0gc2VsZi50YXJnZXRfcm9vdGZzCisgICAgICAgIG9zLmVudmlyb25bJ09GRkxJTkVfUk9PVCddID0gc2VsZi50YXJnZXRfcm9vdGZzCisgICAgICAgIG9zLmVudmlyb25bJ0lQS0dfT0ZGTElORV9ST09UJ10gPSBzZWxmLnRhcmdldF9yb290ZnMKKyAgICAgICAgb3MuZW52aXJvblsnT1BLR19PRkZMSU5FX1JPT1QnXSA9IHNlbGYudGFyZ2V0X3Jvb3RmcworICAgICAgICBvcy5lbnZpcm9uWydJTlRFUkNFUFRfRElSJ10gPSBvcy5wYXRoLmpvaW4oc2VsZi5kLmdldFZhcignV09SS0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVyY2VwdF9zY3JpcHRzIikKKyAgICAgICAgb3MuZW52aXJvblsnTkFUSVZFX1JPT1QnXSA9IHNlbGYuZC5nZXRWYXIoJ1NUQUdJTkdfRElSX05BVElWRScsIFRydWUpCisKKyAgICAgICAgZmFpbGVkX3BrZ3MgPSBbXQorICAgICAgICBmb3IgcGtnX25hbWUgaW4gaW5zdGFsbGVkX3BrZ3M6CisgICAgICAgICAgICBmb3Igc3VmZml4IGluIHN1ZmZpeGVzOgorICAgICAgICAgICAgICAgIHBfZnVsbCA9IG9zLnBhdGguam9pbihpbmZvX2RpciwgcGtnX25hbWUgKyBzdWZmaXhbMF0pCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocF9mdWxsKToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiRXhlY3V0aW5nICVzIGZvciBwYWNrYWdlOiAlcyAuLi4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdWZmaXhbMV0ubG93ZXIoKSwgcGtnX25hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQocF9mdWxsLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiJXMgZm9yIHBhY2thZ2UgJXMgZmFpbGVkIHdpdGggJWQ6XG4lcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3VmZml4WzFdLCBwa2dfbmFtZSwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisgICAgICAgICAgICAgICAgICAgICAgICBmYWlsZWRfcGtncy5hcHBlbmQocGtnX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIGxlbihmYWlsZWRfcGtncyk6CisgICAgICAgICAgICBzZWxmLm1hcmtfcGFja2FnZXMoInVucGFja2VkIiwgZmFpbGVkX3BrZ3MpCisKKyAgICBkZWYgdXBkYXRlKHNlbGYpOgorICAgICAgICBvcy5lbnZpcm9uWydBUFRfQ09ORklHJ10gPSBzZWxmLmFwdF9jb25mX2ZpbGUKKworICAgICAgICBzZWxmLmRlcGxveV9kaXJfbG9jaygpCisKKyAgICAgICAgY21kID0gIiVzIHVwZGF0ZSIgJSBzZWxmLmFwdF9nZXRfY21kCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLnNwbGl0KCksIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiVW5hYmxlIHRvIHVwZGF0ZSB0aGUgcGFja2FnZSBpbmRleCBmaWxlcy4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChlLmNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyX3VubG9jaygpCisKKyAgICBkZWYgaW5zdGFsbChzZWxmLCBwa2dzLCBhdHRlbXB0X29ubHk9RmFsc2UpOgorICAgICAgICBpZiBhdHRlbXB0X29ubHkgYW5kIGxlbihwa2dzKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgb3MuZW52aXJvblsnQVBUX0NPTkZJRyddID0gc2VsZi5hcHRfY29uZl9maWxlCisKKyAgICAgICAgY21kID0gIiVzICVzIGluc3RhbGwgLS1mb3JjZS15ZXMgLS1hbGxvdy11bmF1dGhlbnRpY2F0ZWQgJXMiICUgXAorICAgICAgICAgICAgICAoc2VsZi5hcHRfZ2V0X2NtZCwgc2VsZi5hcHRfYXJncywgJyAnLmpvaW4ocGtncykpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIubm90ZSgiSW5zdGFsbGluZyB0aGUgZm9sbG93aW5nIHBhY2thZ2VzOiAlcyIgJSAnICcuam9pbihwa2dzKSkKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZC5zcGxpdCgpLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgKGJiLmZhdGFsLCBiYi5ub3RlKVthdHRlbXB0X29ubHldKCJVbmFibGUgdG8gaW5zdGFsbCBwYWNrYWdlcy4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb21tYW5kICclcycgcmV0dXJuZWQgJWQ6XG4lcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgICMgcmVuYW1lICouZHBrZy1uZXcgZmlsZXMvZGlycworICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzZWxmLnRhcmdldF9yb290ZnMpOgorICAgICAgICAgICAgZm9yIGRpciBpbiBkaXJzOgorICAgICAgICAgICAgICAgIG5ld19kaXIgPSByZS5zdWIoIlwuZHBrZy1uZXciLCAiIiwgZGlyKQorICAgICAgICAgICAgICAgIGlmIGRpciAhPSBuZXdfZGlyOgorICAgICAgICAgICAgICAgICAgICBvcy5yZW5hbWUob3MucGF0aC5qb2luKHJvb3QsIGRpciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ocm9vdCwgbmV3X2RpcikpCisKKyAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIG5ld19maWxlID0gcmUuc3ViKCJcLmRwa2ctbmV3IiwgIiIsIGZpbGUpCisgICAgICAgICAgICAgICAgaWYgZmlsZSAhPSBuZXdfZmlsZToKKyAgICAgICAgICAgICAgICAgICAgb3MucmVuYW1lKG9zLnBhdGguam9pbihyb290LCBmaWxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihyb290LCBuZXdfZmlsZSkpCisKKworICAgIGRlZiByZW1vdmUoc2VsZiwgcGtncywgd2l0aF9kZXBlbmRlbmNpZXM9VHJ1ZSk6CisgICAgICAgIGlmIHdpdGhfZGVwZW5kZW5jaWVzOgorICAgICAgICAgICAgb3MuZW52aXJvblsnQVBUX0NPTkZJRyddID0gc2VsZi5hcHRfY29uZl9maWxlCisgICAgICAgICAgICBjbWQgPSAiJXMgcHVyZ2UgJXMiICUgKHNlbGYuYXB0X2dldF9jbWQsICcgJy5qb2luKHBrZ3MpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY21kID0gIiVzIC0tYWRtaW5kaXI9JXMvdmFyL2xpYi9kcGtnIC0taW5zdGRpcj0lcyIgXAorICAgICAgICAgICAgICAgICAgIiAtUCAtLWZvcmNlLWRlcGVuZHMgJXMiICUgXAorICAgICAgICAgICAgICAgICAgKGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAiZHBrZyIpLAorICAgICAgICAgICAgICAgICAgIHNlbGYudGFyZ2V0X3Jvb3Rmcywgc2VsZi50YXJnZXRfcm9vdGZzLCAnICcuam9pbihwa2dzKSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQuc3BsaXQoKSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJVbmFibGUgdG8gcmVtb3ZlIHBhY2thZ2VzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGUuY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgIGRlZiB3cml0ZV9pbmRleChzZWxmKToKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyX2xvY2soKQorCisgICAgICAgIHJlc3VsdCA9IHNlbGYuaW5kZXhlci53cml0ZV9pbmRleCgpCisKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyX3VubG9jaygpCisKKyAgICAgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYmIuZmF0YWwocmVzdWx0KQorCisgICAgZGVmIGluc2VydF9mZWVkc191cmlzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmZlZWRfdXJpcyA9PSAiIjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNvdXJjZXNfY29uZiA9IG9zLnBhdGguam9pbigiJXMvZXRjL2FwdC9zb3VyY2VzLmxpc3QiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHNlbGYudGFyZ2V0X3Jvb3RmcykKKyAgICAgICAgYXJjaF9saXN0ID0gW10KKworICAgICAgICBmb3IgYXJjaCBpbiBzZWxmLmFsbF9hcmNoX2xpc3Q6CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgYXJjaCkpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBhcmNoX2xpc3QuYXBwZW5kKGFyY2gpCisKKyAgICAgICAgd2l0aCBvcGVuKHNvdXJjZXNfY29uZiwgIncrIikgYXMgc291cmNlc19maWxlOgorICAgICAgICAgICAgZm9yIHVyaSBpbiBzZWxmLmZlZWRfdXJpcy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGZ1bGxfdXJpID0gdXJpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5mZWVkX3ByZWZpeDoKKyAgICAgICAgICAgICAgICAgICAgZnVsbF91cmkgPSBvcy5wYXRoLmpvaW4odXJpLCBzZWxmLmZlZWRfcHJlZml4KQorICAgICAgICAgICAgICAgIGZvciBhcmNoIGluIGFyY2hfbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgnTm90ZTogYWRkaW5nIGRwa2cgY2hhbm5lbCBhdCAoJXMpJyAlIHVyaSkKKyAgICAgICAgICAgICAgICAgICAgc291cmNlc19maWxlLndyaXRlKCJkZWIgJXMvJXMgLi9cbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bGxfdXJpLCBhcmNoKSkKKworICAgIGRlZiBfY3JlYXRlX2NvbmZpZ3Moc2VsZiwgYXJjaHMsIGJhc2VfYXJjaHMpOgorICAgICAgICBiYXNlX2FyY2hzID0gcmUuc3ViKCJfIiwgIi0iLCBiYXNlX2FyY2hzKQorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuYXB0X2NvbmZfZGlyKToKKyAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLmFwdF9jb25mX2RpciwgVHJ1ZSkKKworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5hcHRfY29uZl9kaXIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmFwdF9jb25mX2RpciArICIvbGlzdHMvcGFydGlhbC8iKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5hcHRfY29uZl9kaXIgKyAiL2FwdC5jb25mLmQvIikKKworICAgICAgICBhcmNoX2xpc3QgPSBbXQorICAgICAgICBmb3IgYXJjaCBpbiBzZWxmLmFsbF9hcmNoX2xpc3Q6CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgYXJjaCkpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBhcmNoX2xpc3QuYXBwZW5kKGFyY2gpCisKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLmFwdF9jb25mX2RpciwgInByZWZlcmVuY2VzIiksICJ3KyIpIGFzIHByZWZzX2ZpbGU6CisgICAgICAgICAgICBwcmlvcml0eSA9IDgwMQorICAgICAgICAgICAgZm9yIGFyY2ggaW4gYXJjaF9saXN0OgorICAgICAgICAgICAgICAgIHByZWZzX2ZpbGUud3JpdGUoCisgICAgICAgICAgICAgICAgICAgICJQYWNrYWdlOiAqXG4iCisgICAgICAgICAgICAgICAgICAgICJQaW46IHJlbGVhc2UgbD0lc1xuIgorICAgICAgICAgICAgICAgICAgICAiUGluLVByaW9yaXR5OiAlZFxuXG4iICUgKGFyY2gsIHByaW9yaXR5KSkKKworICAgICAgICAgICAgICAgIHByaW9yaXR5ICs9IDUKKworICAgICAgICAgICAgcGtnX2V4Y2x1ZGUgPSBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0VYQ0xVREUnLCBUcnVlKSBvciAiIgorICAgICAgICAgICAgZm9yIHBrZyBpbiBwa2dfZXhjbHVkZS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHByZWZzX2ZpbGUud3JpdGUoCisgICAgICAgICAgICAgICAgICAgICJQYWNrYWdlOiAlc1xuIgorICAgICAgICAgICAgICAgICAgICAiUGluOiByZWxlYXNlICpcbiIKKyAgICAgICAgICAgICAgICAgICAgIlBpbi1Qcmlvcml0eTogLTFcblxuIiAlIHBrZykKKworICAgICAgICBhcmNoX2xpc3QucmV2ZXJzZSgpCisKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLmFwdF9jb25mX2RpciwgInNvdXJjZXMubGlzdCIpLCAidysiKSBhcyBzb3VyY2VzX2ZpbGU6CisgICAgICAgICAgICBmb3IgYXJjaCBpbiBhcmNoX2xpc3Q6CisgICAgICAgICAgICAgICAgc291cmNlc19maWxlLndyaXRlKCJkZWIgZmlsZTolcy8gLi9cbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKSkKKworICAgICAgICBiYXNlX2FyY2hfbGlzdCA9IGJhc2VfYXJjaHMuc3BsaXQoKQorICAgICAgICBtdWx0aWxpYl92YXJpYW50cyA9IHNlbGYuZC5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSk7CisgICAgICAgIGZvciB2YXJpYW50IGluIG11bHRpbGliX3ZhcmlhbnRzLnNwbGl0KCk6CisgICAgICAgICAgICBpZiB2YXJpYW50ID09ICJsaWIzMiI6CisgICAgICAgICAgICAgICAgYmFzZV9hcmNoX2xpc3QuYXBwZW5kKCJpMzg2IikKKyAgICAgICAgICAgIGVsaWYgdmFyaWFudCA9PSAibGliNjQiOgorICAgICAgICAgICAgICAgIGJhc2VfYXJjaF9saXN0LmFwcGVuZCgiYW1kNjQiKQorCisgICAgICAgIHdpdGggb3BlbihzZWxmLmFwdF9jb25mX2ZpbGUsICJ3KyIpIGFzIGFwdF9jb25mOgorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZC5leHBhbmQoIiR7U1RBR0lOR19FVENESVJfTkFUSVZFfS9hcHQvYXB0LmNvbmYuc2FtcGxlIikpIGFzIGFwdF9jb25mX3NhbXBsZToKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBhcHRfY29uZl9zYW1wbGUucmVhZCgpLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgICAgICAgICBtYXRjaF9hcmNoID0gcmUubWF0Y2goIiAgQXJjaGl0ZWN0dXJlIFwiLipcIjskIiwgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcyA9ICIiCisgICAgICAgICAgICAgICAgICAgIGlmIG1hdGNoX2FyY2g6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYmFzZV9hcmNoIGluIGJhc2VfYXJjaF9saXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZXMgKz0gIlwiJXNcIjsiICUgYmFzZV9hcmNoCisgICAgICAgICAgICAgICAgICAgICAgICBhcHRfY29uZi53cml0ZSgiICBBcmNoaXRlY3R1cmVzIHslc307XG4iICUgYXJjaGl0ZWN0dXJlcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBhcHRfY29uZi53cml0ZSgiICBBcmNoaXRlY3R1cmUgXCIlc1wiO1xuIiAlIGJhc2VfYXJjaHMpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gcmUuc3ViKCIjUk9PVEZTIyIsIHNlbGYudGFyZ2V0X3Jvb3RmcywgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSByZS5zdWIoIiNBUFRDT05GIyIsIHNlbGYuYXB0X2NvbmZfZGlyLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgYXB0X2NvbmYud3JpdGUobGluZSArICJcbiIpCisKKyAgICAgICAgdGFyZ2V0X2Rwa2dfZGlyID0gIiVzL3Zhci9saWIvZHBrZyIgJSBzZWxmLnRhcmdldF9yb290ZnMKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguam9pbih0YXJnZXRfZHBrZ19kaXIsICJpbmZvIikpCisKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguam9pbih0YXJnZXRfZHBrZ19kaXIsICJ1cGRhdGVzIikpCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih0YXJnZXRfZHBrZ19kaXIsICJzdGF0dXMiKSk6CisgICAgICAgICAgICBvcGVuKG9zLnBhdGguam9pbih0YXJnZXRfZHBrZ19kaXIsICJzdGF0dXMiKSwgIncrIikuY2xvc2UoKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHRhcmdldF9kcGtnX2RpciwgImF2YWlsYWJsZSIpKToKKyAgICAgICAgICAgIG9wZW4ob3MucGF0aC5qb2luKHRhcmdldF9kcGtnX2RpciwgImF2YWlsYWJsZSIpLCAidysiKS5jbG9zZSgpCisKKyAgICBkZWYgcmVtb3ZlX3BhY2thZ2luZ19kYXRhKHNlbGYpOgorICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYudGFyZ2V0X3Jvb3RmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCdvcGtnbGliZGlyJywgVHJ1ZSkpLCBUcnVlKQorICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi50YXJnZXRfcm9vdGZzICsgIi92YXIvbGliL2Rwa2cvIiwgVHJ1ZSkKKworICAgIGRlZiBmaXhfYnJva2VuX2RlcGVuZGVuY2llcyhzZWxmKToKKyAgICAgICAgb3MuZW52aXJvblsnQVBUX0NPTkZJRyddID0gc2VsZi5hcHRfY29uZl9maWxlCisKKyAgICAgICAgY21kID0gIiVzICVzIC1mIGluc3RhbGwiICUgKHNlbGYuYXB0X2dldF9jbWQsIHNlbGYuYXB0X2FyZ3MpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLnNwbGl0KCksIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiQ2Fubm90IGZpeCBicm9rZW4gZGVwZW5kZW5jaWVzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICBkZWYgbGlzdF9pbnN0YWxsZWQoc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICByZXR1cm4gRHBrZ1BrZ3NMaXN0KHNlbGYuZCwgc2VsZi50YXJnZXRfcm9vdGZzKS5saXN0KCkKKworCitkZWYgZ2VuZXJhdGVfaW5kZXhfZmlsZXMoZCk6CisgICAgY2xhc3NlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFX0NMQVNTRVMnLCBUcnVlKS5yZXBsYWNlKCJwYWNrYWdlXyIsICIiKS5zcGxpdCgpCisKKyAgICBpbmRleGVyX21hcCA9IHsKKyAgICAgICAgInJwbSI6IChScG1JbmRleGVyLCBkLmdldFZhcignREVQTE9ZX0RJUl9SUE0nLCBUcnVlKSksCisgICAgICAgICJpcGsiOiAoT3BrZ0luZGV4ZXIsIGQuZ2V0VmFyKCdERVBMT1lfRElSX0lQSycsIFRydWUpKSwKKyAgICAgICAgImRlYiI6IChEcGtnSW5kZXhlciwgZC5nZXRWYXIoJ0RFUExPWV9ESVJfREVCJywgVHJ1ZSkpCisgICAgfQorCisgICAgcmVzdWx0ID0gTm9uZQorCisgICAgZm9yIHBrZ19jbGFzcyBpbiBjbGFzc2VzOgorICAgICAgICBpZiBub3QgcGtnX2NsYXNzIGluIGluZGV4ZXJfbWFwOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhpbmRleGVyX21hcFtwa2dfY2xhc3NdWzFdKToKKyAgICAgICAgICAgIHJlc3VsdCA9IGluZGV4ZXJfbWFwW3BrZ19jbGFzc11bMF0oZCwgaW5kZXhlcl9tYXBbcGtnX2NsYXNzXVsxXSkud3JpdGVfaW5kZXgoKQorCisgICAgICAgICAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwocmVzdWx0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgICIiIgorICAgIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJ1biB0aGlzIGFzIGEgc3RhbmRhbG9uZSBzY3JpcHQsIGZyb20gb3V0c2lkZSBiaXRiYWtlCisgICAgZW52aXJvbm1lbnQuCisgICAgIiIiCisgICAgIiIiCisgICAgVEJECisgICAgIiIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL3BhY2thZ2VkYXRhLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYWNrYWdlZGF0YS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDVmMDQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYWNrYWdlZGF0YS5weQpAQCAtMCwwICsxLDk0IEBACitpbXBvcnQgY29kZWNzCisKK2RlZiBwYWNrYWdlZChwa2csIGQpOgorICAgIHJldHVybiBvcy5hY2Nlc3MoZ2V0X3N1YnBrZ2VkYXRhX2ZuKHBrZywgZCkgKyAnLnBhY2thZ2VkJywgb3MuUl9PSykKKworZGVmIHJlYWRfcGtnZGF0YWZpbGUoZm4pOgorICAgIHBrZ2RhdGEgPSB7fQorCisgICAgZGVmIGRlY29kZShzdHIpOgorICAgICAgICBjID0gY29kZWNzLmdldGRlY29kZXIoInN0cmluZ19lc2NhcGUiKQorICAgICAgICByZXR1cm4gYyhzdHIpWzBdCisKKyAgICBpZiBvcy5hY2Nlc3MoZm4sIG9zLlJfT0spOgorICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgZiA9IG9wZW4oZm4sICdyJykKKyAgICAgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICByID0gcmUuY29tcGlsZSgiKFteOl0rKTpccyooLiopIikKKyAgICAgICAgZm9yIGwgaW4gbGluZXM6CisgICAgICAgICAgICBtID0gci5tYXRjaChsKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBwa2dkYXRhW20uZ3JvdXAoMSldID0gZGVjb2RlKG0uZ3JvdXAoMikpCisKKyAgICByZXR1cm4gcGtnZGF0YQorCitkZWYgZ2V0X3N1YnBrZ2VkYXRhX2ZuKHBrZywgZCk6CisgICAgcmV0dXJuIGQuZXhwYW5kKCcke1BLR0RBVEFfRElSfS9ydW50aW1lLyVzJyAlIHBrZykKKworZGVmIGhhc19zdWJwa2dkYXRhKHBrZywgZCk6CisgICAgcmV0dXJuIG9zLmFjY2VzcyhnZXRfc3VicGtnZWRhdGFfZm4ocGtnLCBkKSwgb3MuUl9PSykKKworZGVmIHJlYWRfc3VicGtnZGF0YShwa2csIGQpOgorICAgIHJldHVybiByZWFkX3BrZ2RhdGFmaWxlKGdldF9zdWJwa2dlZGF0YV9mbihwa2csIGQpKQorCitkZWYgaGFzX3BrZ2RhdGEocG4sIGQpOgorICAgIGZuID0gZC5leHBhbmQoJyR7UEtHREFUQV9ESVJ9LyVzJyAlIHBuKQorICAgIHJldHVybiBvcy5hY2Nlc3MoZm4sIG9zLlJfT0spCisKK2RlZiByZWFkX3BrZ2RhdGEocG4sIGQpOgorICAgIGZuID0gZC5leHBhbmQoJyR7UEtHREFUQV9ESVJ9LyVzJyAlIHBuKQorICAgIHJldHVybiByZWFkX3BrZ2RhdGFmaWxlKGZuKQorCisjCisjIENvbGxhcHNlIEZPT19wa2cgdmFyaWFibGVzIGludG8gRk9PCisjCitkZWYgcmVhZF9zdWJwa2dkYXRhX2RpY3QocGtnLCBkKToKKyAgICByZXQgPSB7fQorICAgIHN1YmQgPSByZWFkX3BrZ2RhdGFmaWxlKGdldF9zdWJwa2dlZGF0YV9mbihwa2csIGQpKQorICAgIGZvciB2YXIgaW4gc3ViZDoKKyAgICAgICAgbmV3dmFyID0gdmFyLnJlcGxhY2UoIl8iICsgcGtnLCAiIikKKyAgICAgICAgaWYgbmV3dmFyID09IHZhciBhbmQgdmFyICsgIl8iICsgcGtnIGluIHN1YmQ6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICByZXRbbmV3dmFyXSA9IHN1YmRbdmFyXQorICAgIHJldHVybiByZXQKKworZGVmIF9wa2dtYXAoZCk6CisgICAgIiIiUmV0dXJuIGEgZGljdGlvbmFyeSBtYXBwaW5nIHBhY2thZ2UgdG8gcmVjaXBlIG5hbWUuIiIiCisKKyAgICBwa2dkYXRhZGlyID0gZC5nZXRWYXIoIlBLR0RBVEFfRElSIiwgVHJ1ZSkKKworICAgIHBrZ21hcCA9IHt9CisgICAgdHJ5OgorICAgICAgICBmaWxlcyA9IG9zLmxpc3RkaXIocGtnZGF0YWRpcikKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgYmIud2FybigiTm8gZmlsZXMgaW4gJXM/IiAlIHBrZ2RhdGFkaXIpCisgICAgICAgIGZpbGVzID0gW10KKworICAgIGZvciBwbiBpbiBmaWx0ZXIobGFtYmRhIGY6IG5vdCBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihwa2dkYXRhZGlyLCBmKSksIGZpbGVzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGtnZGF0YSA9IHJlYWRfcGtnZGF0YWZpbGUob3MucGF0aC5qb2luKHBrZ2RhdGFkaXIsIHBuKSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHBhY2thZ2VzID0gcGtnZGF0YS5nZXQoIlBBQ0tBR0VTIikgb3IgIiIKKyAgICAgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICAgICAgcGtnbWFwW3BrZ10gPSBwbgorCisgICAgcmV0dXJuIHBrZ21hcAorCitkZWYgcGtnbWFwKGQpOgorICAgICIiIlJldHVybiBhIGRpY3Rpb25hcnkgbWFwcGluZyBwYWNrYWdlIHRvIHJlY2lwZSBuYW1lLgorICAgIENhY2hlIHRoZSBtYXBwaW5nIGluIHRoZSBtZXRhZGF0YSIiIgorCisgICAgcGtnbWFwX2RhdGEgPSBkLmdldFZhcigiX19wa2dtYXBfZGF0YSIsIEZhbHNlKQorICAgIGlmIHBrZ21hcF9kYXRhIGlzIE5vbmU6CisgICAgICAgIHBrZ21hcF9kYXRhID0gX3BrZ21hcChkKQorICAgICAgICBkLnNldFZhcigiX19wa2dtYXBfZGF0YSIsIHBrZ21hcF9kYXRhKQorCisgICAgcmV0dXJuIHBrZ21hcF9kYXRhCisKK2RlZiByZWNpcGVuYW1lKHBrZywgZCk6CisgICAgIiIiUmV0dXJuIHRoZSByZWNpcGUgbmFtZSBmb3IgdGhlIGdpdmVuIGJpbmFyeSBwYWNrYWdlIG5hbWUuIiIiCisKKyAgICByZXR1cm4gcGtnbWFwKGQpLmdldChwa2cpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL3BhY2thZ2Vncm91cC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcGFja2FnZWdyb3VwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZWI0MjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3BhY2thZ2Vncm91cC5weQpAQCAtMCwwICsxLDM2IEBACitpbXBvcnQgaXRlcnRvb2xzCisKK2RlZiBpc19vcHRpb25hbChmZWF0dXJlLCBkKToKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCJGRUFUVVJFX1BBQ0tBR0VTXyVzIiAlIGZlYXR1cmUsIFRydWUpCisgICAgaWYgcGFja2FnZXM6CisgICAgICAgIHJldHVybiBib29sKGQuZ2V0VmFyRmxhZygiRkVBVFVSRV9QQUNLQUdFU18lcyIgJSBmZWF0dXJlLCAib3B0aW9uYWwiKSkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gYm9vbChkLmdldFZhckZsYWcoIlBBQ0tBR0VfR1JPVVBfJXMiICUgZmVhdHVyZSwgIm9wdGlvbmFsIikpCisKK2RlZiBwYWNrYWdlcyhmZWF0dXJlcywgZCk6CisgICAgZm9yIGZlYXR1cmUgaW4gZmVhdHVyZXM6CisgICAgICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoIkZFQVRVUkVfUEFDS0FHRVNfJXMiICUgZmVhdHVyZSwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBhY2thZ2VzOgorICAgICAgICAgICAgcGFja2FnZXMgPSBkLmdldFZhcigiUEFDS0FHRV9HUk9VUF8lcyIgJSBmZWF0dXJlLCBUcnVlKQorICAgICAgICBmb3IgcGtnIGluIChwYWNrYWdlcyBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIHlpZWxkIHBrZworCitkZWYgcmVxdWlyZWRfcGFja2FnZXMoZmVhdHVyZXMsIGQpOgorICAgIHJlcSA9IGZpbHRlcihsYW1iZGEgZmVhdHVyZTogbm90IGlzX29wdGlvbmFsKGZlYXR1cmUsIGQpLCBmZWF0dXJlcykKKyAgICByZXR1cm4gcGFja2FnZXMocmVxLCBkKQorCitkZWYgb3B0aW9uYWxfcGFja2FnZXMoZmVhdHVyZXMsIGQpOgorICAgIG9wdCA9IGZpbHRlcihsYW1iZGEgZmVhdHVyZTogaXNfb3B0aW9uYWwoZmVhdHVyZSwgZCksIGZlYXR1cmVzKQorICAgIHJldHVybiBwYWNrYWdlcyhvcHQsIGQpCisKK2RlZiBhY3RpdmVfcGFja2FnZXMoZmVhdHVyZXMsIGQpOgorICAgIHJldHVybiBpdGVydG9vbHMuY2hhaW4ocmVxdWlyZWRfcGFja2FnZXMoZmVhdHVyZXMsIGQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxfcGFja2FnZXMoZmVhdHVyZXMsIGQpKQorCitkZWYgYWN0aXZlX3JlY2lwZXMoZmVhdHVyZXMsIGQpOgorICAgIGltcG9ydCBvZS5wYWNrYWdlZGF0YQorCisgICAgZm9yIHBrZyBpbiBhY3RpdmVfcGFja2FnZXMoZmVhdHVyZXMsIGQpOgorICAgICAgICByZWNpcGUgPSBvZS5wYWNrYWdlZGF0YS5yZWNpcGVuYW1lKHBrZywgZCkKKyAgICAgICAgaWYgcmVjaXBlOgorICAgICAgICAgICAgeWllbGQgcmVjaXBlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL3BhdGNoLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYXRjaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDhiZjFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYXRjaC5weQpAQCAtMCwwICsxLDY1OSBAQAoraW1wb3J0IG9lLnBhdGgKKworY2xhc3MgTm90Rm91bmRFcnJvcihiYi5CQkhhbmRsZWRFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiRXJyb3I6ICVzIG5vdCBmb3VuZC4iICUgc2VsZi5wYXRoCisKK2NsYXNzIENtZEVycm9yKGJiLkJCSGFuZGxlZEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4aXRzdGF0dXMsIG91dHB1dCk6CisgICAgICAgIHNlbGYuc3RhdHVzID0gZXhpdHN0YXR1cworICAgICAgICBzZWxmLm91dHB1dCA9IG91dHB1dAorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiQ29tbWFuZCBFcnJvcjogZXhpdCBzdGF0dXM6ICVkICBPdXRwdXQ6XG4lcyIgJSAoc2VsZi5zdGF0dXMsIHNlbGYub3V0cHV0KQorCisKK2RlZiBydW5jbWQoYXJncywgZGlyID0gTm9uZSk6CisgICAgaW1wb3J0IHBpcGVzCisKKyAgICBpZiBkaXI6CisgICAgICAgIG9sZGRpciA9IG9zLnBhdGguYWJzcGF0aChvcy5jdXJkaXIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXIpOgorICAgICAgICAgICAgcmFpc2UgTm90Rm91bmRFcnJvcihkaXIpCisgICAgICAgIG9zLmNoZGlyKGRpcikKKyAgICAgICAgIyBwcmludCgiY3dkOiAlcyAtPiAlcyIgJSAob2xkZGlyLCBkaXIpKQorCisgICAgdHJ5OgorICAgICAgICBhcmdzID0gWyBwaXBlcy5xdW90ZShzdHIoYXJnKSkgZm9yIGFyZyBpbiBhcmdzIF0KKyAgICAgICAgY21kID0gIiAiLmpvaW4oYXJncykKKyAgICAgICAgIyBwcmludCgiY21kOiAlcyIgJSBjbWQpCisgICAgICAgIChleGl0c3RhdHVzLCBvdXRwdXQpID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKyAgICAgICAgaWYgZXhpdHN0YXR1cyAhPSAwOgorICAgICAgICAgICAgcmFpc2UgQ21kRXJyb3IoZXhpdHN0YXR1cyA+PiA4LCBvdXRwdXQpCisgICAgICAgIHJldHVybiBvdXRwdXQKKworICAgIGZpbmFsbHk6CisgICAgICAgIGlmIGRpcjoKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZGRpcikKKworY2xhc3MgUGF0Y2hFcnJvcihFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2cpOgorICAgICAgICBzZWxmLm1zZyA9IG1zZworCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiUGF0Y2ggRXJyb3I6ICVzIiAlIHNlbGYubXNnCisKK2NsYXNzIFBhdGNoU2V0KG9iamVjdCk6CisgICAgZGVmYXVsdHMgPSB7CisgICAgICAgICJzdHJpcHBhdGgiOiAxCisgICAgfQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpciwgZCk6CisgICAgICAgIHNlbGYuZGlyID0gZGlyCisgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgc2VsZi5wYXRjaGVzID0gW10KKyAgICAgICAgc2VsZi5fY3VycmVudCA9IE5vbmUKKworICAgIGRlZiBjdXJyZW50KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY3VycmVudAorCisgICAgZGVmIENsZWFuKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2xlYW4gb3V0IHRoZSBwYXRjaCBzZXQuICBHZW5lcmFsbHkgaW5jbHVkZXMgdW5hcHBseWluZyBhbGwKKyAgICAgICAgcGF0Y2hlcyBhbmQgd2lwaW5nIG91dCBhbGwgYXNzb2NpYXRlZCBtZXRhZGF0YS4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIEltcG9ydChzZWxmLCBwYXRjaCwgZm9yY2UpOgorICAgICAgICBpZiBub3QgcGF0Y2guZ2V0KCJmaWxlIik6CisgICAgICAgICAgICBpZiBub3QgcGF0Y2guZ2V0KCJyZW1vdGUiKToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXRjaEVycm9yKCJQYXRjaCBmaWxlIG11c3QgYmUgc3BlY2lmaWVkIGluIHBhdGNoIGltcG9ydC4iKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXRjaFsiZmlsZSJdID0gYmIuZmV0Y2gyLmxvY2FscGF0aChwYXRjaFsicmVtb3RlIl0sIHNlbGYuZCkKKworICAgICAgICBmb3IgcGFyYW0gaW4gUGF0Y2hTZXQuZGVmYXVsdHM6CisgICAgICAgICAgICBpZiBub3QgcGF0Y2guZ2V0KHBhcmFtKToKKyAgICAgICAgICAgICAgICBwYXRjaFtwYXJhbV0gPSBQYXRjaFNldC5kZWZhdWx0c1twYXJhbV0KKworICAgICAgICBpZiBwYXRjaC5nZXQoInJlbW90ZSIpOgorICAgICAgICAgICAgcGF0Y2hbImZpbGUiXSA9IGJiLmRhdGEuZXhwYW5kKGJiLmZldGNoMi5sb2NhbHBhdGgocGF0Y2hbInJlbW90ZSJdLCBzZWxmLmQpLCBzZWxmLmQpCisKKyAgICAgICAgcGF0Y2hbImZpbGVtZDUiXSA9IGJiLnV0aWxzLm1kNV9maWxlKHBhdGNoWyJmaWxlIl0pCisKKyAgICBkZWYgUHVzaChzZWxmLCBmb3JjZSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIFBvcChzZWxmLCBmb3JjZSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIFJlZnJlc2goc2VsZiwgcmVtb3RlID0gTm9uZSwgYWxsID0gTm9uZSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBnZXRQYXRjaGVkRmlsZXMocGF0Y2hmaWxlLCBzdHJpcGxldmVsLCBzcmNkaXI9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBSZWFkIGEgcGF0Y2ggZmlsZSBhbmQgZGV0ZXJtaW5lIHdoaWNoIGZpbGVzIGl0IHdpbGwgbW9kaWZ5LgorICAgICAgICBQYXJhbXM6CisgICAgICAgICAgICBwYXRjaGZpbGU6IHRoZSBwYXRjaCBmaWxlIHRvIHJlYWQKKyAgICAgICAgICAgIHN0cmlwbGV2ZWw6IHRoZSBzdHJpcCBsZXZlbCBhdCB3aGljaCB0aGUgcGF0Y2ggaXMgZ29pbmcgdG8gYmUgYXBwbGllZAorICAgICAgICAgICAgc3JjZGlyOiBvcHRpb25hbCBwYXRoIHRvIGpvaW4gb250byB0aGUgcGF0Y2hlZCBmaWxlIHBhdGhzCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBBIGxpc3Qgb2YgdHVwbGVzIG9mIGZpbGUgcGF0aCBhbmQgY2hhbmdlIG1vZGUgKCdBJyBmb3IgYWRkLAorICAgICAgICAgICAgJ0QnIGZvciBkZWxldGUgb3IgJ00nIGZvciBtb2RpZnkpCisgICAgICAgICIiIgorCisgICAgICAgIGRlZiBwYXRjaGVkcGF0aChwYXRjaGxpbmUpOgorICAgICAgICAgICAgZmlsZXB0aCA9IHBhdGNobGluZS5zcGxpdCgpWzFdCisgICAgICAgICAgICBpZiBmaWxlcHRoLmVuZHN3aXRoKCcvZGV2L251bGwnKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJy9kZXYvbnVsbCcKKyAgICAgICAgICAgIGZpbGVzcGxpdCA9IGZpbGVwdGguc3BsaXQob3Muc2VwKQorICAgICAgICAgICAgaWYgc3RyaXBsZXZlbCA+IGxlbihmaWxlc3BsaXQpOgorICAgICAgICAgICAgICAgIGJiLmVycm9yKCdQYXRjaCAlcyBoYXMgaW52YWxpZCBzdHJpcCBsZXZlbCAlZCcgJSAocGF0Y2hmaWxlLCBzdHJpcGxldmVsKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgcmV0dXJuIG9zLnNlcC5qb2luKGZpbGVzcGxpdFtzdHJpcGxldmVsOl0pCisKKyAgICAgICAgY29waWVkbW9kZSA9IEZhbHNlCisgICAgICAgIGZpbGVsaXN0ID0gW10KKyAgICAgICAgd2l0aCBvcGVuKHBhdGNoZmlsZSkgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCctLS0gJyk6CisgICAgICAgICAgICAgICAgICAgIHBhdGNocHRoID0gcGF0Y2hlZHBhdGgobGluZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHBhdGNocHRoOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgaWYgY29waWVkbW9kZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkZmlsZSA9IHBhdGNocHRoCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkZmlsZSA9IHBhdGNocHRoCisgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJysrKyAnKToKKyAgICAgICAgICAgICAgICAgICAgYWRkZWRmaWxlID0gcGF0Y2hlZHBhdGgobGluZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGFkZGVkZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJyoqKiAnKToKKyAgICAgICAgICAgICAgICAgICAgY29waWVkbW9kZSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZGZpbGUgPSBwYXRjaGVkcGF0aChsaW5lKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmVtb3ZlZGZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZWRmaWxlID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBhZGRlZGZpbGUgPSBOb25lCisKKyAgICAgICAgICAgICAgICBpZiBhZGRlZGZpbGUgYW5kIHJlbW92ZWRmaWxlOgorICAgICAgICAgICAgICAgICAgICBpZiByZW1vdmVkZmlsZSA9PSAnL2Rldi9udWxsJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAnQScKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBhZGRlZGZpbGUgPT0gJy9kZXYvbnVsbCc6CisgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gJ0QnCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gJ00nCisgICAgICAgICAgICAgICAgICAgIGlmIHNyY2RpcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxwYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihzcmNkaXIsIGFkZGVkZmlsZSkpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBmdWxscGF0aCA9IGFkZGVkZmlsZQorICAgICAgICAgICAgICAgICAgICBmaWxlbGlzdC5hcHBlbmQoKGZ1bGxwYXRoLCBtb2RlKSkKKworICAgICAgICByZXR1cm4gZmlsZWxpc3QKKworCitjbGFzcyBQYXRjaFRyZWUoUGF0Y2hTZXQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaXIsIGQpOgorICAgICAgICBQYXRjaFNldC5fX2luaXRfXyhzZWxmLCBkaXIsIGQpCisgICAgICAgIHNlbGYucGF0Y2hkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICdwYXRjaGVzJykKKyAgICAgICAgc2VsZi5zZXJpZXNwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuZGlyLCAncGF0Y2hlcycsICdzZXJpZXMnKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5wYXRjaGRpcikKKworICAgIGRlZiBfYXBwZW5kUGF0Y2hGaWxlKHNlbGYsIHBhdGNoLCBzdHJpcHBhdGgpOgorICAgICAgICB3aXRoIG9wZW4oc2VsZi5zZXJpZXNwYXRoLCAnYScpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKG9zLnBhdGguYmFzZW5hbWUocGF0Y2gpICsgIiwiICsgc3RyaXBwYXRoICsgIlxuIikKKyAgICAgICAgc2hlbGxjbWQgPSBbImNhdCIsIHBhdGNoLCAiPiIgLCBzZWxmLnBhdGNoZGlyICsgIi8iICsgb3MucGF0aC5iYXNlbmFtZShwYXRjaCldCisgICAgICAgIHJ1bmNtZChbInNoIiwgIi1jIiwgIiAiLmpvaW4oc2hlbGxjbWQpXSwgc2VsZi5kaXIpCisKKyAgICBkZWYgX3JlbW92ZVBhdGNoKHNlbGYsIHApOgorICAgICAgICBwYXRjaCA9IHt9CisgICAgICAgIHBhdGNoWydmaWxlJ10gPSBwLnNwbGl0KCIsIilbMF0KKyAgICAgICAgcGF0Y2hbJ3N0cmlwcGF0aCddID0gcC5zcGxpdCgiLCIpWzFdCisgICAgICAgIHNlbGYuX2FwcGx5cGF0Y2gocGF0Y2gsIEZhbHNlLCBUcnVlKQorCisgICAgZGVmIF9yZW1vdmVQYXRjaEZpbGUoc2VsZiwgYWxsID0gRmFsc2UpOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5zZXJpZXNwYXRoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB3aXRoIG9wZW4oc2VsZi5zZXJpZXNwYXRoLCAncisnKSBhcyBmOgorICAgICAgICAgICAgcGF0Y2hlcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgaWYgYWxsOgorICAgICAgICAgICAgZm9yIHAgaW4gcmV2ZXJzZWQocGF0Y2hlcyk6CisgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlUGF0Y2gob3MucGF0aC5qb2luKHNlbGYucGF0Y2hkaXIsIHAuc3RyaXAoKSkpCisgICAgICAgICAgICBwYXRjaGVzID0gW10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3JlbW92ZVBhdGNoKG9zLnBhdGguam9pbihzZWxmLnBhdGNoZGlyLCBwYXRjaGVzWy0xXS5zdHJpcCgpKSkKKyAgICAgICAgICAgIHBhdGNoZXMucG9wKCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuc2VyaWVzcGF0aCwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZm9yIHAgaW4gcGF0Y2hlczoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHApCisgICAgICAgICAKKyAgICBkZWYgSW1wb3J0KHNlbGYsIHBhdGNoLCBmb3JjZSA9IE5vbmUpOgorICAgICAgICAiIiIiIiIKKyAgICAgICAgUGF0Y2hTZXQuSW1wb3J0KHNlbGYsIHBhdGNoLCBmb3JjZSkKKworICAgICAgICBpZiBzZWxmLl9jdXJyZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaSA9IHNlbGYuX2N1cnJlbnQgKyAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpID0gMAorICAgICAgICBzZWxmLnBhdGNoZXMuaW5zZXJ0KGksIHBhdGNoKQorCisgICAgZGVmIF9hcHBseXBhdGNoKHNlbGYsIHBhdGNoLCBmb3JjZSA9IEZhbHNlLCByZXZlcnNlID0gRmFsc2UsIHJ1biA9IFRydWUpOgorICAgICAgICBzaGVsbGNtZCA9IFsiY2F0IiwgcGF0Y2hbJ2ZpbGUnXSwgInwiLCAicGF0Y2giLCAiLXAiLCBwYXRjaFsnc3RyaXBwYXRoJ11dCisgICAgICAgIGlmIHJldmVyc2U6CisgICAgICAgICAgICBzaGVsbGNtZC5hcHBlbmQoJy1SJykKKworICAgICAgICBpZiBub3QgcnVuOgorICAgICAgICAgICAgcmV0dXJuICJzaCIgKyAiLWMiICsgIiAiLmpvaW4oc2hlbGxjbWQpCisKKyAgICAgICAgaWYgbm90IGZvcmNlOgorICAgICAgICAgICAgc2hlbGxjbWQuYXBwZW5kKCctLWRyeS1ydW4nKQorCisgICAgICAgIG91dHB1dCA9IHJ1bmNtZChbInNoIiwgIi1jIiwgIiAiLmpvaW4oc2hlbGxjbWQpXSwgc2VsZi5kaXIpCisKKyAgICAgICAgaWYgZm9yY2U6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzaGVsbGNtZC5wb3AobGVuKHNoZWxsY21kKSAtIDEpCisgICAgICAgIG91dHB1dCA9IHJ1bmNtZChbInNoIiwgIi1jIiwgIiAiLmpvaW4oc2hlbGxjbWQpXSwgc2VsZi5kaXIpCisKKyAgICAgICAgaWYgbm90IHJldmVyc2U6CisgICAgICAgICAgICBzZWxmLl9hcHBlbmRQYXRjaEZpbGUocGF0Y2hbJ2ZpbGUnXSwgcGF0Y2hbJ3N0cmlwcGF0aCddKQorCisgICAgICAgIHJldHVybiBvdXRwdXQKKworICAgIGRlZiBQdXNoKHNlbGYsIGZvcmNlID0gRmFsc2UsIGFsbCA9IEZhbHNlLCBydW4gPSBUcnVlKToKKyAgICAgICAgYmIubm90ZSgic2VsZi5fY3VycmVudCBpcyAlcyIgJSBzZWxmLl9jdXJyZW50KQorICAgICAgICBiYi5ub3RlKCJwYXRjaGVzIGlzICVzIiAlIHNlbGYucGF0Y2hlcykKKyAgICAgICAgaWYgYWxsOgorICAgICAgICAgICAgZm9yIGkgaW4gc2VsZi5wYXRjaGVzOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoImFwcGx5aW5nIHBhdGNoICVzIiAlIGkpCisgICAgICAgICAgICAgICAgc2VsZi5fYXBwbHlwYXRjaChpLCBmb3JjZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50ID0gaQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2VsZi5fY3VycmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBuZXh0ID0gc2VsZi5fY3VycmVudCArIDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV4dCA9IDAKKworICAgICAgICAgICAgYmIubm90ZSgiYXBwbHlpbmcgcGF0Y2ggJXMiICUgc2VsZi5wYXRjaGVzW25leHRdKQorICAgICAgICAgICAgcmV0ID0gc2VsZi5fYXBwbHlwYXRjaChzZWxmLnBhdGNoZXNbbmV4dF0sIGZvcmNlKQorCisgICAgICAgICAgICBzZWxmLl9jdXJyZW50ID0gbmV4dAorICAgICAgICAgICAgcmV0dXJuIHJldAorCisgICAgZGVmIFBvcChzZWxmLCBmb3JjZSA9IE5vbmUsIGFsbCA9IE5vbmUpOgorICAgICAgICBpZiBhbGw6CisgICAgICAgICAgICBzZWxmLl9yZW1vdmVQYXRjaEZpbGUoVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnQgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9yZW1vdmVQYXRjaEZpbGUoRmFsc2UpCisKKyAgICAgICAgaWYgc2VsZi5fY3VycmVudCA9PSAwOgorICAgICAgICAgICAgc2VsZi5fY3VycmVudCA9IE5vbmUKKworICAgICAgICBpZiBzZWxmLl9jdXJyZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fY3VycmVudCA9IHNlbGYuX2N1cnJlbnQgLSAxCisKKyAgICBkZWYgQ2xlYW4oc2VsZik6CisgICAgICAgICIiIiIiIgorICAgICAgICBzZWxmLlBvcChhbGw9VHJ1ZSkKKworY2xhc3MgR2l0QXBwbHlUcmVlKFBhdGNoVHJlZSk6CisgICAgcGF0Y2hfbGluZV9wcmVmaXggPSAnJSUgb3JpZ2luYWwgcGF0Y2gnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGlyLCBkKToKKyAgICAgICAgUGF0Y2hUcmVlLl9faW5pdF9fKHNlbGYsIGRpciwgZCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZXh0cmFjdFBhdGNoSGVhZGVyKHBhdGNoZmlsZSk6CisgICAgICAgICIiIgorICAgICAgICBFeHRyYWN0IGp1c3QgdGhlIGhlYWRlciBsaW5lcyBmcm9tIHRoZSB0b3Agb2YgYSBwYXRjaCBmaWxlCisgICAgICAgICIiIgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIHdpdGggb3BlbihwYXRjaGZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdJbmRleDogJykgb3IgbGluZS5zdGFydHN3aXRoKCdkaWZmIC0nKSBvciBsaW5lLnN0YXJ0c3dpdGgoJy0tLScpOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICByZXR1cm4gbGluZXMKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcHJlcGFyZUNvbW1pdChwYXRjaGZpbGUpOgorICAgICAgICAiIiIKKyAgICAgICAgUHJlcGFyZSBhIGdpdCBjb21taXQgY29tbWFuZCBsaW5lIGJhc2VkIG9uIHRoZSBoZWFkZXIgZnJvbSBhIHBhdGNoIGZpbGUKKyAgICAgICAgKHR5cGljYWxseSB0aGlzIGlzIHVzZWZ1bCBmb3IgcGF0Y2hlcyB0aGF0IGNhbm5vdCBiZSBhcHBsaWVkIHdpdGggImdpdCBhbSIgZHVlIHRvIGZvcm1hdHRpbmcpCisgICAgICAgICIiIgorICAgICAgICBpbXBvcnQgdGVtcGZpbGUKKyAgICAgICAgaW1wb3J0IHJlCisgICAgICAgIGF1dGhvcl9yZSA9IHJlLmNvbXBpbGUoJ1tcUyBdKyA8XFMrQFxTK1wuXFMrPicpCisgICAgICAgICMgUHJvY2VzcyBwYXRjaCBoZWFkZXIgYW5kIGV4dHJhY3QgdXNlZnVsIGluZm9ybWF0aW9uCisgICAgICAgIGxpbmVzID0gR2l0QXBwbHlUcmVlLmV4dHJhY3RQYXRjaEhlYWRlcihwYXRjaGZpbGUpCisgICAgICAgIG91dGxpbmVzID0gW10KKyAgICAgICAgYXV0aG9yID0gTm9uZQorICAgICAgICBkYXRlID0gTm9uZQorICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnU3ViamVjdDogJyk6CisgICAgICAgICAgICAgICAgc3ViamVjdCA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXQorICAgICAgICAgICAgICAgICMgUmVtb3ZlIGFueSBbUEFUQ0hdW29lLWNvcmVdIGV0Yy4KKyAgICAgICAgICAgICAgICBzdWJqZWN0ID0gcmUuc3ViKHInXFsuKz9cXVxzKicsICcnLCBzdWJqZWN0KQorICAgICAgICAgICAgICAgIG91dGxpbmVzLmluc2VydCgwLCAnJXNcblxuJyAlIHN1YmplY3Quc3RyaXAoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdGcm9tOiAnKSBvciBsaW5lLnN0YXJ0c3dpdGgoJ0F1dGhvcjogJyk6CisgICAgICAgICAgICAgICAgYXV0aG9ydmFsID0gbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCkucmVwbGFjZSgnIicsICcnKQorICAgICAgICAgICAgICAgICMgZ2l0IGlzIGZ1c3N5IGFib3V0IGF1dGhvciBmb3JtYXR0aW5nIGkuZS4gaXQgbXVzdCBiZSBOYW1lIDxlbWFpbEBkb21haW4+CisgICAgICAgICAgICAgICAgaWYgYXV0aG9yX3JlLm1hdGNoKGF1dGhvcnZhbCk6CisgICAgICAgICAgICAgICAgICAgIGF1dGhvciA9IGF1dGhvcnZhbAorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdEYXRlOiAnKToKKyAgICAgICAgICAgICAgICBpZiBkYXRlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGRhdGV2YWwgPSBsaW5lLnNwbGl0KCc6JywgMSlbMV0uc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAjIFZlcnkgY3J1ZGUgY2hlY2sgZm9yIGRhdGUgZm9ybWF0LCBzaW5jZSBnaXQgd2lsbCBibG93IHVwIGlmIGl0J3Mgbm90IGluIHRoZSByaWdodAorICAgICAgICAgICAgICAgICAgICAjIGZvcm1hdC4gV2l0aG91dCBlLmcuIGEgcHl0aG9uLWRhdGV1dGlscyBkZXBlbmRlbmN5IHdlIGNhbid0IGRvIGEgd2hvbGUgbG90IG1vcmUKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGRhdGV2YWwpID4gMTI6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRlID0gZGF0ZXZhbAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1NpZ25lZC1vZmYtYnk6ICcpOgorICAgICAgICAgICAgICAgIGF1dGhvcnZhbCA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpLnJlcGxhY2UoJyInLCAnJykKKyAgICAgICAgICAgICAgICAjIGdpdCBpcyBmdXNzeSBhYm91dCBhdXRob3IgZm9ybWF0dGluZyBpLmUuIGl0IG11c3QgYmUgTmFtZSA8ZW1haWxAZG9tYWluPgorICAgICAgICAgICAgICAgIGlmIGF1dGhvcl9yZS5tYXRjaChhdXRob3J2YWwpOgorICAgICAgICAgICAgICAgICAgICBhdXRob3IgPSBhdXRob3J2YWwKKyAgICAgICAgICAgIG91dGxpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICAjIFdyaXRlIG91dCBjb21taXQgbWVzc2FnZSB0byBhIGZpbGUKKyAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoJ3cnLCBkZWxldGU9RmFsc2UpIGFzIHRmOgorICAgICAgICAgICAgdG1wZmlsZSA9IHRmLm5hbWUKKyAgICAgICAgICAgIGZvciBsaW5lIGluIG91dGxpbmVzOgorICAgICAgICAgICAgICAgIHRmLndyaXRlKGxpbmUpCisgICAgICAgICMgUHJlcGFyZSBnaXQgY29tbWFuZAorICAgICAgICBjbWQgPSBbImdpdCIsICJjb21taXQiLCAiLUYiLCB0bXBmaWxlXQorICAgICAgICAjIGdpdCBkb2Vzbid0IGxpa2UgcGxhaW4gZW1haWwgYWRkcmVzc2VzIGFzIGF1dGhvcnMKKyAgICAgICAgaWYgYXV0aG9yIGFuZCAnPCcgaW4gYXV0aG9yOgorICAgICAgICAgICAgY21kLmFwcGVuZCgnLS1hdXRob3I9IiVzIicgJSBhdXRob3IpCisgICAgICAgIGlmIGRhdGU6CisgICAgICAgICAgICBjbWQuYXBwZW5kKCctLWRhdGU9IiVzIicgJSBkYXRlKQorICAgICAgICByZXR1cm4gKHRtcGZpbGUsIGNtZCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZXh0cmFjdFBhdGNoZXModHJlZSwgc3RhcnRjb21taXQsIG91dGRpcik6CisgICAgICAgIGltcG9ydCB0ZW1wZmlsZQorICAgICAgICBpbXBvcnQgc2h1dGlsCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nb2VwYXRjaCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNoZWxsY21kID0gWyJnaXQiLCAiZm9ybWF0LXBhdGNoIiwgc3RhcnRjb21taXQsICItbyIsIHRlbXBkaXJdCisgICAgICAgICAgICBvdXQgPSBydW5jbWQoWyJzaCIsICItYyIsICIgIi5qb2luKHNoZWxsY21kKV0sIHRyZWUpCisgICAgICAgICAgICBpZiBvdXQ6CisgICAgICAgICAgICAgICAgZm9yIHNyY2ZpbGUgaW4gb3V0LnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIHBhdGNobGluZXMgPSBbXQorICAgICAgICAgICAgICAgICAgICBvdXRmaWxlID0gTm9uZQorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc3JjZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoR2l0QXBwbHlUcmVlLnBhdGNoX2xpbmVfcHJlZml4KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZmlsZSA9IGxpbmUuc3BsaXQoKVstMV0uc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNobGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvdXRmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZmlsZSA9IG9zLnBhdGguYmFzZW5hbWUoc3JjZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihvdXRkaXIsIG91dGZpbGUpLCAndycpIGFzIG9mOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gcGF0Y2hsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZi53cml0ZShsaW5lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wZGlyKQorCisgICAgZGVmIF9hcHBseXBhdGNoKHNlbGYsIHBhdGNoLCBmb3JjZSA9IEZhbHNlLCByZXZlcnNlID0gRmFsc2UsIHJ1biA9IFRydWUpOgorICAgICAgICBpbXBvcnQgc2h1dGlsCisKKyAgICAgICAgZGVmIF9hcHBseXBhdGNoaGVscGVyKHNoZWxsY21kLCBwYXRjaCwgZm9yY2UgPSBGYWxzZSwgcmV2ZXJzZSA9IEZhbHNlLCBydW4gPSBUcnVlKToKKyAgICAgICAgICAgIGlmIHJldmVyc2U6CisgICAgICAgICAgICAgICAgc2hlbGxjbWQuYXBwZW5kKCctUicpCisKKyAgICAgICAgICAgIHNoZWxsY21kLmFwcGVuZChwYXRjaFsnZmlsZSddKQorCisgICAgICAgICAgICBpZiBub3QgcnVuOgorICAgICAgICAgICAgICAgIHJldHVybiAic2giICsgIi1jIiArICIgIi5qb2luKHNoZWxsY21kKQorCisgICAgICAgICAgICByZXR1cm4gcnVuY21kKFsic2giLCAiLWMiLCAiICIuam9pbihzaGVsbGNtZCldLCBzZWxmLmRpcikKKworICAgICAgICAjIEFkZCBob29rcyB3aGljaCBhZGQgYSBwb2ludGVyIHRvIHRoZSBvcmlnaW5hbCBwYXRjaCBmaWxlIG5hbWUgaW4gdGhlIGNvbW1pdCBtZXNzYWdlCisgICAgICAgIHJlcG9yb290ID0gKHJ1bmNtZCgiZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwiLnNwbGl0KCksIHNlbGYuZGlyKSBvciAnJykuc3RyaXAoKQorICAgICAgICBpZiBub3QgcmVwb3Jvb3Q6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNhbm5vdCBnZXQgcmVwb3NpdG9yeSByb290IGZvciBkaXJlY3RvcnkgJXMiICUgc2VsZi5kaXIpCisgICAgICAgIGNvbW1pdGhvb2sgPSBvcy5wYXRoLmpvaW4ocmVwb3Jvb3QsICcuZ2l0JywgJ2hvb2tzJywgJ2NvbW1pdC1tc2cnKQorICAgICAgICBjb21taXRob29rX2JhY2t1cCA9IGNvbW1pdGhvb2sgKyAnLmRldnRvb2wtb3JpZycKKyAgICAgICAgYXBwbHlob29rID0gb3MucGF0aC5qb2luKHJlcG9yb290LCAnLmdpdCcsICdob29rcycsICdhcHBseXBhdGNoLW1zZycpCisgICAgICAgIGFwcGx5aG9va19iYWNrdXAgPSBhcHBseWhvb2sgKyAnLmRldnRvb2wtb3JpZycKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29tbWl0aG9vayk6CisgICAgICAgICAgICBzaHV0aWwubW92ZShjb21taXRob29rLCBjb21taXRob29rX2JhY2t1cCkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoYXBwbHlob29rKToKKyAgICAgICAgICAgIHNodXRpbC5tb3ZlKGFwcGx5aG9vaywgYXBwbHlob29rX2JhY2t1cCkKKyAgICAgICAgd2l0aCBvcGVuKGNvbW1pdGhvb2ssICd3JykgYXMgZjoKKyAgICAgICAgICAgICMgTk9URTogdGhlIGZvcm1hdHRpbmcgaGVyZSBpcyBzaWduaWZpY2FudDsgaWYgeW91IGNoYW5nZSBpdCB5b3UnbGwgYWxzbyBuZWVkIHRvCisgICAgICAgICAgICAjIGNoYW5nZSBvdGhlciBwbGFjZXMgd2hpY2ggcmVhZCBpdCBiYWNrCisgICAgICAgICAgICBmLndyaXRlKCdlY2hvID4+ICQxXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnZWNobyAiJXM6ICRQQVRDSEZJTEUiID4+ICQxXG4nICUgR2l0QXBwbHlUcmVlLnBhdGNoX2xpbmVfcHJlZml4KQorICAgICAgICBvcy5jaG1vZChjb21taXRob29rLCAwNzU1KQorICAgICAgICBzaHV0aWwuY29weTIoY29tbWl0aG9vaywgYXBwbHlob29rKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXRjaGZpbGV2YXIgPSAnUEFUQ0hGSUxFPSIlcyInICUgb3MucGF0aC5iYXNlbmFtZShwYXRjaFsnZmlsZSddKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNoZWxsY21kID0gW3BhdGNoZmlsZXZhciwgImdpdCIsICItLXdvcmstdHJlZT0lcyIgJSByZXBvcm9vdCwgImFtIiwgIi0zIiwgIi0ta2VlcC1jciIsICItcCVzIiAlIHBhdGNoWydzdHJpcHBhdGgnXV0KKyAgICAgICAgICAgICAgICByZXR1cm4gX2FwcGx5cGF0Y2hoZWxwZXIoc2hlbGxjbWQsIHBhdGNoLCBmb3JjZSwgcmV2ZXJzZSwgcnVuKQorICAgICAgICAgICAgZXhjZXB0IENtZEVycm9yOgorICAgICAgICAgICAgICAgICMgTmVlZCB0byBhYm9ydCB0aGUgZ2l0IGFtLCBvciB3ZSdsbCBzdGlsbCBiZSB3aXRoaW4gaXQgYXQgdGhlIGVuZAorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2hlbGxjbWQgPSBbImdpdCIsICItLXdvcmstdHJlZT0lcyIgJSByZXBvcm9vdCwgImFtIiwgIi0tYWJvcnQiXQorICAgICAgICAgICAgICAgICAgICBydW5jbWQoWyJzaCIsICItYyIsICIgIi5qb2luKHNoZWxsY21kKV0sIHNlbGYuZGlyKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBDbWRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICMgRmFsbCBiYWNrIHRvIGdpdCBhcHBseQorICAgICAgICAgICAgICAgIHNoZWxsY21kID0gWyJnaXQiLCAiLS1naXQtZGlyPSVzIiAlIHJlcG9yb290LCAiYXBwbHkiLCAiLXAlcyIgJSBwYXRjaFsnc3RyaXBwYXRoJ11dCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBfYXBwbHlwYXRjaGhlbHBlcihzaGVsbGNtZCwgcGF0Y2gsIGZvcmNlLCByZXZlcnNlLCBydW4pCisgICAgICAgICAgICAgICAgZXhjZXB0IENtZEVycm9yOgorICAgICAgICAgICAgICAgICAgICAjIEZhbGwgYmFjayB0byBwYXRjaAorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBQYXRjaFRyZWUuX2FwcGx5cGF0Y2goc2VsZiwgcGF0Y2gsIGZvcmNlLCByZXZlcnNlLCBydW4pCisgICAgICAgICAgICAgICAgIyBBZGQgYWxsIGZpbGVzCisgICAgICAgICAgICAgICAgc2hlbGxjbWQgPSBbImdpdCIsICJhZGQiLCAiLWYiLCAiLUEiLCAiLiJdCisgICAgICAgICAgICAgICAgb3V0cHV0ICs9IHJ1bmNtZChbInNoIiwgIi1jIiwgIiAiLmpvaW4oc2hlbGxjbWQpXSwgc2VsZi5kaXIpCisgICAgICAgICAgICAgICAgIyBFeGNsdWRlIHRoZSBwYXRjaGVzIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIHNoZWxsY21kID0gWyJnaXQiLCAicmVzZXQiLCAiSEVBRCIsIHNlbGYucGF0Y2hkaXJdCisgICAgICAgICAgICAgICAgb3V0cHV0ICs9IHJ1bmNtZChbInNoIiwgIi1jIiwgIiAiLmpvaW4oc2hlbGxjbWQpXSwgc2VsZi5kaXIpCisgICAgICAgICAgICAgICAgIyBDb21taXQgdGhlIHJlc3VsdAorICAgICAgICAgICAgICAgICh0bXBmaWxlLCBzaGVsbGNtZCkgPSBzZWxmLnByZXBhcmVDb21taXQocGF0Y2hbJ2ZpbGUnXSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNoZWxsY21kLmluc2VydCgwLCBwYXRjaGZpbGV2YXIpCisgICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSBydW5jbWQoWyJzaCIsICItYyIsICIgIi5qb2luKHNoZWxsY21kKV0sIHNlbGYuZGlyKQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZSh0bXBmaWxlKQorICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJlbW92ZShjb21taXRob29rKQorICAgICAgICAgICAgb3MucmVtb3ZlKGFwcGx5aG9vaykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNvbW1pdGhvb2tfYmFja3VwKToKKyAgICAgICAgICAgICAgICBzaHV0aWwubW92ZShjb21taXRob29rX2JhY2t1cCwgY29tbWl0aG9vaykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGFwcGx5aG9va19iYWNrdXApOgorICAgICAgICAgICAgICAgIHNodXRpbC5tb3ZlKGFwcGx5aG9va19iYWNrdXAsIGFwcGx5aG9vaykKKworCitjbGFzcyBRdWlsdFRyZWUoUGF0Y2hTZXQpOgorICAgIGRlZiBfcnVuY21kKHNlbGYsIGFyZ3MsIHJ1biA9IFRydWUpOgorICAgICAgICBxdWlsdHJjID0gc2VsZi5kLmdldFZhcignUVVJTFRSQ0ZJTEUnLCBUcnVlKQorICAgICAgICBpZiBub3QgcnVuOgorICAgICAgICAgICAgcmV0dXJuIFsicXVpbHQiXSArIFsiLS1xdWlsdHJjIl0gKyBbcXVpbHRyY10gKyBhcmdzCisgICAgICAgIHJ1bmNtZChbInF1aWx0Il0gKyBbIi0tcXVpbHRyYyJdICsgW3F1aWx0cmNdICsgYXJncywgc2VsZi5kaXIpCisKKyAgICBkZWYgX3F1aWx0cGF0Y2hwYXRoKHNlbGYsIGZpbGUpOgorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuZGlyLCAicGF0Y2hlcyIsIG9zLnBhdGguYmFzZW5hbWUoZmlsZSkpCisKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaXIsIGQpOgorICAgICAgICBQYXRjaFNldC5fX2luaXRfXyhzZWxmLCBkaXIsIGQpCisgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSBGYWxzZQorICAgICAgICBwID0gb3MucGF0aC5qb2luKHNlbGYuZGlyLCAncGF0Y2hlcycpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwKToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKHApCisKKyAgICBkZWYgQ2xlYW4oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3J1bmNtZChbInBvcCIsICItYSIsICItZiJdKQorICAgICAgICAgICAgb2UucGF0aC5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYuZGlyLCAicGF0Y2hlcyIsInNlcmllcyIpKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmluaXRpYWxpemVkID0gVHJ1ZQorCisgICAgZGVmIEluaXRGcm9tRGlyKHNlbGYpOgorICAgICAgICAjIHJlYWQgc2VyaWVzIC0+IHNlbGYucGF0Y2hlcworICAgICAgICBzZXJpZXNwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuZGlyLCAncGF0Y2hlcycsICdzZXJpZXMnKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5kaXIpOgorICAgICAgICAgICAgcmFpc2UgTm90Rm91bmRFcnJvcihzZWxmLmRpcikKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VyaWVzcGF0aCk6CisgICAgICAgICAgICB3aXRoIG9wZW4oc2VyaWVzcGF0aCwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgICAgIHBhdGNoID0ge30KKyAgICAgICAgICAgICAgICAgICAgcGFydHMgPSBsaW5lLnN0cmlwKCkuc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICBwYXRjaFsicXVpbHRmaWxlIl0gPSBzZWxmLl9xdWlsdHBhdGNocGF0aChwYXJ0c1swXSkKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hbInF1aWx0ZmlsZW1kNSJdID0gYmIudXRpbHMubWQ1X2ZpbGUocGF0Y2hbInF1aWx0ZmlsZSJdKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4ocGFydHMpID4gMToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoWyJzdHJpcHBhdGgiXSA9IHBhcnRzWzFdWzI6XQorICAgICAgICAgICAgICAgICAgICBzZWxmLnBhdGNoZXMuYXBwZW5kKHBhdGNoKQorCisgICAgICAgICAgICAjIGRldGVybWluZSB3aGljaCBwYXRjaGVzIGFyZSBhcHBsaWVkIC0+IHNlbGYuX2N1cnJlbnQKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBydW5jbWQoWyJxdWlsdCIsICJhcHBsaWVkIl0sIHNlbGYuZGlyKQorICAgICAgICAgICAgZXhjZXB0IENtZEVycm9yOgorICAgICAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgICAgICBpZiBzeXMuZXhjX3ZhbHVlLm91dHB1dC5zdHJpcCgpID09ICJObyBwYXRjaGVzIGFwcGxpZWQiOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgb3V0cHV0ID0gW3ZhbCBmb3IgdmFsIGluIG91dHB1dC5zcGxpdCgnXG4nKSBpZiBub3QgdmFsLnN0YXJ0c3dpdGgoJyMnKV0KKyAgICAgICAgICAgIGZvciBwYXRjaCBpbiBzZWxmLnBhdGNoZXM6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5iYXNlbmFtZShwYXRjaFsicXVpbHRmaWxlIl0pID09IG91dHB1dFstMV06CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnQgPSBzZWxmLnBhdGNoZXMuaW5kZXgocGF0Y2gpCisgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSBUcnVlCisKKyAgICBkZWYgSW1wb3J0KHNlbGYsIHBhdGNoLCBmb3JjZSA9IE5vbmUpOgorICAgICAgICBpZiBub3Qgc2VsZi5pbml0aWFsaXplZDoKKyAgICAgICAgICAgIHNlbGYuSW5pdEZyb21EaXIoKQorICAgICAgICBQYXRjaFNldC5JbXBvcnQoc2VsZiwgcGF0Y2gsIGZvcmNlKQorICAgICAgICBvZS5wYXRoLnN5bWxpbmsocGF0Y2hbImZpbGUiXSwgc2VsZi5fcXVpbHRwYXRjaHBhdGgocGF0Y2hbImZpbGUiXSksIGZvcmNlPVRydWUpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICJwYXRjaGVzIiwgInNlcmllcyIpLCAiYSIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKG9zLnBhdGguYmFzZW5hbWUocGF0Y2hbImZpbGUiXSkgKyAiIC1wIiArIHBhdGNoWyJzdHJpcHBhdGgiXSArICJcbiIpCisgICAgICAgIHBhdGNoWyJxdWlsdGZpbGUiXSA9IHNlbGYuX3F1aWx0cGF0Y2hwYXRoKHBhdGNoWyJmaWxlIl0pCisgICAgICAgIHBhdGNoWyJxdWlsdGZpbGVtZDUiXSA9IGJiLnV0aWxzLm1kNV9maWxlKHBhdGNoWyJxdWlsdGZpbGUiXSkKKworICAgICAgICAjIFRPRE86IGRldGVybWluZSBpZiB0aGUgZmlsZSBiZWluZyBpbXBvcnRlZDoKKyAgICAgICAgIyAgICAgIDEpIGlzIGFscmVhZHkgaW1wb3J0ZWQsIGFuZCBpcyB0aGUgc2FtZQorICAgICAgICAjICAgICAgMikgaXMgYWxyZWFkeSBpbXBvcnRlZCwgYnV0IGRpZmZlcnMKKworICAgICAgICBzZWxmLnBhdGNoZXMuaW5zZXJ0KHNlbGYuX2N1cnJlbnQgb3IgMCwgcGF0Y2gpCisKKworICAgIGRlZiBQdXNoKHNlbGYsIGZvcmNlID0gRmFsc2UsIGFsbCA9IEZhbHNlLCBydW4gPSBUcnVlKToKKyAgICAgICAgIyBxdWlsdCBwdXNoIFstZl0KKworICAgICAgICBhcmdzID0gWyJwdXNoIl0KKyAgICAgICAgaWYgZm9yY2U6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgiLWYiKQorICAgICAgICBpZiBhbGw6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgiLWEiKQorICAgICAgICBpZiBub3QgcnVuOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bmNtZChhcmdzLCBydW4pCisKKyAgICAgICAgc2VsZi5fcnVuY21kKGFyZ3MpCisKKyAgICAgICAgaWYgc2VsZi5fY3VycmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnQgPSBzZWxmLl9jdXJyZW50ICsgMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fY3VycmVudCA9IDAKKworICAgIGRlZiBQb3Aoc2VsZiwgZm9yY2UgPSBOb25lLCBhbGwgPSBOb25lKToKKyAgICAgICAgIyBxdWlsdCBwb3AgWy1mXQorICAgICAgICBhcmdzID0gWyJwb3AiXQorICAgICAgICBpZiBmb3JjZToKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCItZiIpCisgICAgICAgIGlmIGFsbDoKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCItYSIpCisKKyAgICAgICAgc2VsZi5fcnVuY21kKGFyZ3MpCisKKyAgICAgICAgaWYgc2VsZi5fY3VycmVudCA9PSAwOgorICAgICAgICAgICAgc2VsZi5fY3VycmVudCA9IE5vbmUKKworICAgICAgICBpZiBzZWxmLl9jdXJyZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fY3VycmVudCA9IHNlbGYuX2N1cnJlbnQgLSAxCisKKyAgICBkZWYgUmVmcmVzaChzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIGlmIGt3YXJncy5nZXQoInJlbW90ZSIpOgorICAgICAgICAgICAgcGF0Y2ggPSBzZWxmLnBhdGNoZXNba3dhcmdzWyJwYXRjaCJdXQorICAgICAgICAgICAgaWYgbm90IHBhdGNoOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhdGNoRXJyb3IoIk5vIHBhdGNoIGZvdW5kIGF0IGluZGV4ICVzIGluIHBhdGNoc2V0LiIgJSBrd2FyZ3NbInBhdGNoIl0pCisgICAgICAgICAgICAodHlwZSwgaG9zdCwgcGF0aCwgdXNlciwgcHN3ZCwgcGFybSkgPSBiYi5mZXRjaC5kZWNvZGV1cmwocGF0Y2hbInJlbW90ZSJdKQorICAgICAgICAgICAgaWYgdHlwZSA9PSAiZmlsZSI6CisgICAgICAgICAgICAgICAgaW1wb3J0IHNodXRpbAorICAgICAgICAgICAgICAgIGlmIG5vdCBwYXRjaC5nZXQoImZpbGUiKSBhbmQgcGF0Y2guZ2V0KCJyZW1vdGUiKToKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hbImZpbGUiXSA9IGJiLmZldGNoMi5sb2NhbHBhdGgocGF0Y2hbInJlbW90ZSJdLCBzZWxmLmQpCisKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUocGF0Y2hbInF1aWx0ZmlsZSJdLCBwYXRjaFsiZmlsZSJdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXRjaEVycm9yKCJVbmFibGUgdG8gZG8gYSByZW1vdGUgcmVmcmVzaCBvZiAlcywgdW5zdXBwb3J0ZWQgcmVtb3RlIHVybCBzY2hlbWUgJXMuIiAlIChvcy5wYXRoLmJhc2VuYW1lKHBhdGNoWyJxdWlsdGZpbGUiXSksIHR5cGUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBxdWlsdCByZWZyZXNoCisgICAgICAgICAgICBhcmdzID0gWyJyZWZyZXNoIl0KKyAgICAgICAgICAgIGlmIGt3YXJncy5nZXQoInF1aWx0ZmlsZSIpOgorICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKG9zLnBhdGguYmFzZW5hbWUoa3dhcmdzWyJxdWlsdGZpbGUiXSkpCisgICAgICAgICAgICBlbGlmIGt3YXJncy5nZXQoInBhdGNoIik6CisgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQob3MucGF0aC5iYXNlbmFtZShzZWxmLnBhdGNoZXNba3dhcmdzWyJwYXRjaCJdXVsicXVpbHRmaWxlIl0pKQorICAgICAgICAgICAgc2VsZi5fcnVuY21kKGFyZ3MpCisKK2NsYXNzIFJlc29sdmVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGNoc2V0LCB0ZXJtaW5hbCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIFJlc29sdmUoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIFJldmVydChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgRmluYWxpemUoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCitjbGFzcyBOT09QUmVzb2x2ZXIoUmVzb2x2ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRjaHNldCwgdGVybWluYWwpOgorICAgICAgICBzZWxmLnBhdGNoc2V0ID0gcGF0Y2hzZXQKKyAgICAgICAgc2VsZi50ZXJtaW5hbCA9IHRlcm1pbmFsCisKKyAgICBkZWYgUmVzb2x2ZShzZWxmKToKKyAgICAgICAgb2xkZGlyID0gb3MucGF0aC5hYnNwYXRoKG9zLmN1cmRpcikKKyAgICAgICAgb3MuY2hkaXIoc2VsZi5wYXRjaHNldC5kaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucGF0Y2hzZXQuUHVzaCgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBvcy5jaGRpcihvbGRkaXIpCisgICAgICAgICAgICByYWlzZQorCisjIFBhdGNoIHJlc29sdmVyIHdoaWNoIHJlbGllcyBvbiB0aGUgdXNlciBkb2luZyBhbGwgdGhlIHdvcmsgaW52b2x2ZWQgaW4gdGhlCisjIHJlc29sdXRpb24sIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiByZWZyZXNoaW5nIHRoZSByZW1vdGUgY29weSBvZiB0aGUgcGF0Y2gKKyMgZmlsZXMgKHRoZSB1cmxzKS4KK2NsYXNzIFVzZXJSZXNvbHZlcihSZXNvbHZlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGNoc2V0LCB0ZXJtaW5hbCk6CisgICAgICAgIHNlbGYucGF0Y2hzZXQgPSBwYXRjaHNldAorICAgICAgICBzZWxmLnRlcm1pbmFsID0gdGVybWluYWwKKworICAgICMgRm9yY2UgYSBwdXNoIGluIHRoZSBwYXRjaHNldCwgdGhlbiBkcm9wIHRvIGEgc2hlbGwgZm9yIHRoZSB1c2VyIHRvCisgICAgIyByZXNvbHZlIGFueSByZWplY3RlZCBodW5rcworICAgIGRlZiBSZXNvbHZlKHNlbGYpOgorICAgICAgICBvbGRkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MuY3VyZGlyKQorICAgICAgICBvcy5jaGRpcihzZWxmLnBhdGNoc2V0LmRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5wYXRjaHNldC5QdXNoKEZhbHNlKQorICAgICAgICBleGNlcHQgQ21kRXJyb3IgYXMgdjoKKyAgICAgICAgICAgICMgUGF0Y2ggYXBwbGljYXRpb24gZmFpbGVkCisgICAgICAgICAgICBwYXRjaGNtZCA9IHNlbGYucGF0Y2hzZXQuUHVzaChUcnVlLCBGYWxzZSwgRmFsc2UpCisKKyAgICAgICAgICAgIHQgPSBzZWxmLnBhdGNoc2V0LmQuZ2V0VmFyKCdUJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCB0OgorICAgICAgICAgICAgICAgIGJiLm1zZy5mYXRhbCgiQnVpbGQiLCAiVCBub3Qgc2V0IikKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih0KQorICAgICAgICAgICAgaW1wb3J0IHJhbmRvbQorICAgICAgICAgICAgcmNmaWxlID0gIiVzL2Jhc2hyYy4lcy4lcyIgJSAodCwgc3RyKG9zLmdldHBpZCgpKSwgcmFuZG9tLnJhbmRvbSgpKQorICAgICAgICAgICAgd2l0aCBvcGVuKHJjZmlsZSwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoImVjaG8gJyoqKiBNYW51YWwgcGF0Y2ggcmVzb2x1dGlvbiBtb2RlICoqKidcbiIpCisgICAgICAgICAgICAgICAgZi53cml0ZSgiZWNobyAnRHJvcHBpbmcgdG8gYSBzaGVsbCwgc28gcGF0Y2ggcmVqZWN0cyBjYW4gYmUgZml4ZWQgbWFudWFsbHkuJ1xuIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJlY2hvICdSdW4gXCJxdWlsdCByZWZyZXNoXCIgd2hlbiBwYXRjaCBpcyBjb3JyZWN0ZWQsIHByZXNzIENUUkwrRCB0byBleGl0LidcbiIpCisgICAgICAgICAgICAgICAgZi53cml0ZSgiZWNobyAnJ1xuIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCIgIi5qb2luKHBhdGNoY21kKSArICJcbiIpCisgICAgICAgICAgICBvcy5jaG1vZChyY2ZpbGUsIDA3NzUpCisKKyAgICAgICAgICAgIHNlbGYudGVybWluYWwoImJhc2ggLS1yY2ZpbGUgIiArIHJjZmlsZSwgJ1BhdGNoIFJlamVjdHM6IFBsZWFzZSBmaXggcGF0Y2ggcmVqZWN0cyBtYW51YWxseScsIHNlbGYucGF0Y2hzZXQuZCkKKworICAgICAgICAgICAgIyBDb25zdHJ1Y3QgYSBuZXcgUGF0Y2hTZXQgYWZ0ZXIgdGhlIHVzZXIncyBjaGFuZ2VzLCBjb21wYXJlIHRoZQorICAgICAgICAgICAgIyBzZXRzLCBjaGVja2luZyBwYXRjaGVzIGZvciBtb2RpZmljYXRpb25zLCBhbmQgZG9pbmcgYSByZW1vdGUKKyAgICAgICAgICAgICMgcmVmcmVzaCBvbiBlYWNoLgorICAgICAgICAgICAgb2xkcGF0Y2hzZXQgPSBzZWxmLnBhdGNoc2V0CisgICAgICAgICAgICBzZWxmLnBhdGNoc2V0ID0gb2xkcGF0Y2hzZXQuX19jbGFzc19fKHNlbGYucGF0Y2hzZXQuZGlyLCBzZWxmLnBhdGNoc2V0LmQpCisKKyAgICAgICAgICAgIGZvciBwYXRjaCBpbiBzZWxmLnBhdGNoc2V0LnBhdGNoZXM6CisgICAgICAgICAgICAgICAgb2xkcGF0Y2ggPSBOb25lCisgICAgICAgICAgICAgICAgZm9yIG9wYXRjaCBpbiBvbGRwYXRjaHNldC5wYXRjaGVzOgorICAgICAgICAgICAgICAgICAgICBpZiBvcGF0Y2hbInF1aWx0ZmlsZSJdID09IHBhdGNoWyJxdWlsdGZpbGUiXToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9sZHBhdGNoID0gb3BhdGNoCisKKyAgICAgICAgICAgICAgICBpZiBvbGRwYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hbInJlbW90ZSJdID0gb2xkcGF0Y2hbInJlbW90ZSJdCisgICAgICAgICAgICAgICAgICAgIGlmIHBhdGNoWyJxdWlsdGZpbGUiXSA9PSBvbGRwYXRjaFsicXVpbHRmaWxlIl06CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwYXRjaFsicXVpbHRmaWxlbWQ1Il0gIT0gb2xkcGF0Y2hbInF1aWx0ZmlsZW1kNSJdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIlBhdGNoICVzIGhhcyBjaGFuZ2VkLCB1cGRhdGluZyByZW1vdGUgdXJsICVzIiAlIChvcy5wYXRoLmJhc2VuYW1lKHBhdGNoWyJxdWlsdGZpbGUiXSksIHBhdGNoWyJyZW1vdGUiXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB1c2VyIGNoYW5nZT8gIHJlbW90ZSByZWZyZXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXRjaHNldC5SZWZyZXNoKHJlbW90ZT1UcnVlLCBwYXRjaD1zZWxmLnBhdGNoc2V0LnBhdGNoZXMuaW5kZXgocGF0Y2gpKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFVzZXIgZGlkIG5vdCBmaXggdGhlIHByb2JsZW0uICBBYm9ydC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBQYXRjaEVycm9yKCJQYXRjaCBhcHBsaWNhdGlvbiBmYWlsZWQsIGFuZCB1c2VyIGRpZCBub3QgZml4IGFuZCByZWZyZXNoIHRoZSBwYXRjaC4iKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgb3MuY2hkaXIob2xkZGlyKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgb3MuY2hkaXIob2xkZGlyKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYXRoLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYXRoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxM2ViZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3BhdGgucHkKQEAgLTAsMCArMSwyNDMgQEAKK2ltcG9ydCBlcnJubworaW1wb3J0IGdsb2IKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgb3MucGF0aAorCitkZWYgam9pbigqcGF0aHMpOgorICAgICIiIkxpa2Ugb3MucGF0aC5qb2luIGJ1dCBkb2Vzbid0IHRyZWF0IGFic29sdXRlIFJIUyBzcGVjaWFsbHkiIiIKKyAgICByZXR1cm4gb3MucGF0aC5ub3JtcGF0aCgiLyIuam9pbihwYXRocykpCisKK2RlZiByZWxhdGl2ZShzcmMsIGRlc3QpOgorICAgICIiIiBSZXR1cm4gYSByZWxhdGl2ZSBwYXRoIGZyb20gc3JjIHRvIGRlc3QuCisKKyAgICA+Pj4gcmVsYXRpdmUoIi91c3IvYmluIiwgIi90bXAvZm9vL2JhciIpCisgICAgLi4vLi4vdG1wL2Zvby9iYXIKKworICAgID4+PiByZWxhdGl2ZSgiL3Vzci9iaW4iLCAiL3Vzci9saWIiKQorICAgIC4uL2xpYgorCisgICAgPj4+IHJlbGF0aXZlKCIvdG1wIiwgIi90bXAvZm9vL2JhciIpCisgICAgZm9vL2JhcgorICAgICIiIgorCisgICAgcmV0dXJuIG9zLnBhdGgucmVscGF0aChkZXN0LCBzcmMpCisKK2RlZiBtYWtlX3JlbGF0aXZlX3N5bWxpbmsocGF0aCk6CisgICAgIiIiIENvbnZlcnQgYW4gYWJzb2x1dGUgc3ltbGluayB0byBhIHJlbGF0aXZlIG9uZSAiIiIKKyAgICBpZiBub3Qgb3MucGF0aC5pc2xpbmsocGF0aCk6CisgICAgICAgIHJldHVybgorICAgIGxpbmsgPSBvcy5yZWFkbGluayhwYXRoKQorICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGxpbmspOgorICAgICAgICByZXR1cm4KKworICAgICMgZmluZCB0aGUgY29tbW9uIGFuY2VzdG9yIGRpcmVjdG9yeQorICAgIGFuY2VzdG9yID0gcGF0aAorICAgIGRlcHRoID0gMAorICAgIHdoaWxlIGFuY2VzdG9yIGFuZCBub3QgbGluay5zdGFydHN3aXRoKGFuY2VzdG9yKToKKyAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5ycGFydGl0aW9uKCcvJylbMF0KKyAgICAgICAgZGVwdGggKz0gMQorCisgICAgaWYgbm90IGFuY2VzdG9yOgorICAgICAgICBwcmludCgibWFrZV9yZWxhdGl2ZV9zeW1saW5rKCkgRXJyb3I6IHVuYWJsZSB0byBmaW5kIHRoZSBjb21tb24gYW5jZXN0b3Igb2YgJXMgYW5kIGl0cyB0YXJnZXQiICUgcGF0aCkKKyAgICAgICAgcmV0dXJuCisKKyAgICBiYXNlID0gbGluay5wYXJ0aXRpb24oYW5jZXN0b3IpWzJdLnN0cmlwKCcvJykKKyAgICB3aGlsZSBkZXB0aCA+IDE6CisgICAgICAgIGJhc2UgPSAiLi4vIiArIGJhc2UKKyAgICAgICAgZGVwdGggLT0gMQorCisgICAgb3MucmVtb3ZlKHBhdGgpCisgICAgb3Muc3ltbGluayhiYXNlLCBwYXRoKQorCitkZWYgZm9ybWF0X2Rpc3BsYXkocGF0aCwgbWV0YWRhdGEpOgorICAgICIiIiBQcmVwYXJlIGEgcGF0aCBmb3IgZGlzcGxheSB0byB0aGUgdXNlci4gIiIiCisgICAgcmVsID0gcmVsYXRpdmUobWV0YWRhdGEuZ2V0VmFyKCJUT1BESVIiLCBUcnVlKSwgcGF0aCkKKyAgICBpZiBsZW4ocmVsKSA+IGxlbihwYXRoKToKKyAgICAgICAgcmV0dXJuIHBhdGgKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gcmVsCisKK2RlZiBjb3B5dHJlZShzcmMsIGRzdCk6CisgICAgIyBXZSBjb3VsZCB1c2Ugc29tZXRoaW5nIGxpa2Ugc2h1dGlsLmNvcHl0cmVlIGhlcmUgYnV0IGl0IHR1cm5zIG91dCB0bworICAgICMgdG8gYmUgc2xvdy4gSXQgdGFrZXMgdHdpY2UgYXMgbG9uZyBjb3B5aW5nIHRvIGFuIGVtcHR5IGRpcmVjdG9yeS4gCisgICAgIyBJZiBkc3QgYWxyZWFkeSBoYXMgY29udGVudHMgcGVyZm9ybWFuY2UgY2FuIGJlIDE1IHRpbWUgc2xvd2VyCisgICAgIyBUaGlzIHdheSB3ZSBhbHNvIHByZXNlcnZlIGhhcmRsaW5rcyBiZXR3ZWVuIGZpbGVzIGluIHRoZSB0cmVlLgorCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGRzdCkKKyAgICBjbWQgPSAndGFyIC1jZiAtIC1DICVzIC1wIC4gfCB0YXIgLXhmIC0gLUMgJXMnICUgKHNyYywgZHN0KQorICAgIGNoZWNrX291dHB1dChjbWQsIHNoZWxsPVRydWUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKworZGVmIGNvcHloYXJkbGlua3RyZWUoc3JjLCBkc3QpOgorICAgICIiIiBNYWtlIHRoZSBoYXJkIGxpbmsgd2hlbiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGNvcHkuICIiIgorICAgIGJiLnV0aWxzLm1rZGlyaGllcihkc3QpCisgICAgaWYgb3MucGF0aC5pc2RpcihzcmMpIGFuZCBub3QgbGVuKG9zLmxpc3RkaXIoc3JjKSk6CisgICAgICAgIHJldHVybgkKKworICAgIGlmIChvcy5zdGF0KHNyYykuc3RfZGV2ID09ICBvcy5zdGF0KGRzdCkuc3RfZGV2KToKKyAgICAgICAgIyBOZWVkIHRvIGNvcHkgZGlyZWN0b3JpZXMgb25seSB3aXRoIHRhciBmaXJzdCBzaW5jZSBjcCB3aWxsIGVycm9yIGlmIHR3byAKKyAgICAgICAgIyB3cml0ZXJzIHRyeSBhbmQgY3JlYXRlIGEgZGlyZWN0b3J5IGF0IHRoZSBzYW1lIHRpbWUKKyAgICAgICAgY21kID0gJ2NkICVzOyBmaW5kIC4gLXR5cGUgZCAtcHJpbnQgfCB0YXIgLWNmIC0gLUMgJXMgLXAgLS1maWxlcy1mcm9tIC0gLS1uby1yZWN1cnNpb24gfCB0YXIgLXhmIC0gLUMgJXMnICUgKHNyYywgc3JjLCBkc3QpCisgICAgICAgIGNoZWNrX291dHB1dChjbWQsIHNoZWxsPVRydWUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgY21kID0gJ2NkICVzOyBmaW5kIC4gLXByaW50MCB8IGNwaW8gLS1udWxsIC1wZGx1ICVzJyAlIChzcmMsIGRzdCkKKyAgICAgICAgY2hlY2tfb3V0cHV0KGNtZCwgc2hlbGw9VHJ1ZSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgIGVsc2U6CisgICAgICAgIGNvcHl0cmVlKHNyYywgZHN0KQorCitkZWYgcmVtb3ZlKHBhdGgsIHJlY3Vyc2U9VHJ1ZSk6CisgICAgIiIiRXF1aXZhbGVudCB0byBybSAtZiBvciBybSAtcmYiIiIKKyAgICBmb3IgbmFtZSBpbiBnbG9iLmdsb2IocGF0aCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayhuYW1lKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBpZiByZWN1cnNlIGFuZCBleGMuZXJybm8gPT0gZXJybm8uRUlTRElSOgorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUobmFtZSkKKyAgICAgICAgICAgIGVsaWYgZXhjLmVycm5vICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorCitkZWYgc3ltbGluayhzb3VyY2UsIGRlc3RpbmF0aW9uLCBmb3JjZT1GYWxzZSk6CisgICAgIiIiQ3JlYXRlIGEgc3ltYm9saWMgbGluayIiIgorICAgIHRyeToKKyAgICAgICAgaWYgZm9yY2U6CisgICAgICAgICAgICByZW1vdmUoZGVzdGluYXRpb24pCisgICAgICAgIG9zLnN5bWxpbmsoc291cmNlLCBkZXN0aW5hdGlvbikKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVCBvciBvcy5yZWFkbGluayhkZXN0aW5hdGlvbikgIT0gc291cmNlOgorICAgICAgICAgICAgcmFpc2UKKworY2xhc3MgQ2FsbGVkUHJvY2Vzc0Vycm9yKEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJldGNvZGUsIGNtZCwgb3V0cHV0ID0gTm9uZSk6CisgICAgICAgIHNlbGYucmV0Y29kZSA9IHJldGNvZGUKKyAgICAgICAgc2VsZi5jbWQgPSBjbWQKKyAgICAgICAgc2VsZi5vdXRwdXQgPSBvdXRwdXQKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJDb21tYW5kICclcycgcmV0dXJuZWQgbm9uLXplcm8gZXhpdCBzdGF0dXMgJWQgd2l0aCBvdXRwdXQgJXMiICUgKHNlbGYuY21kLCBzZWxmLnJldGNvZGUsIHNlbGYub3V0cHV0KQorCisjIE5vdCBuZWVkZWQgd2hlbiB3ZSBtb3ZlIHRvIHB5dGhvbiAyLjcKK2RlZiBjaGVja19vdXRwdXQoKnBvcGVuYXJncywgKiprd2FyZ3MpOgorICAgIHIiIiJSdW4gY29tbWFuZCB3aXRoIGFyZ3VtZW50cyBhbmQgcmV0dXJuIGl0cyBvdXRwdXQgYXMgYSBieXRlIHN0cmluZy4KKworICAgIElmIHRoZSBleGl0IGNvZGUgd2FzIG5vbi16ZXJvIGl0IHJhaXNlcyBhIENhbGxlZFByb2Nlc3NFcnJvci4gIFRoZQorICAgIENhbGxlZFByb2Nlc3NFcnJvciBvYmplY3Qgd2lsbCBoYXZlIHRoZSByZXR1cm4gY29kZSBpbiB0aGUgcmV0dXJuY29kZQorICAgIGF0dHJpYnV0ZSBhbmQgb3V0cHV0IGluIHRoZSBvdXRwdXQgYXR0cmlidXRlLgorCisgICAgVGhlIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgZm9yIHRoZSBQb3BlbiBjb25zdHJ1Y3Rvci4gIEV4YW1wbGU6CisKKyAgICA+Pj4gY2hlY2tfb3V0cHV0KFsibHMiLCAiLWwiLCAiL2Rldi9udWxsIl0pCisgICAgJ2Nydy1ydy1ydy0gMSByb290IHJvb3QgMSwgMyBPY3QgMTggIDIwMDcgL2Rldi9udWxsXG4nCisKKyAgICBUaGUgc3Rkb3V0IGFyZ3VtZW50IGlzIG5vdCBhbGxvd2VkIGFzIGl0IGlzIHVzZWQgaW50ZXJuYWxseS4KKyAgICBUbyBjYXB0dXJlIHN0YW5kYXJkIGVycm9yIGluIHRoZSByZXN1bHQsIHVzZSBzdGRlcnI9U1RET1VULgorCisgICAgPj4+IGNoZWNrX291dHB1dChbIi9iaW4vc2giLCAiLWMiLAorICAgIC4uLiAgICAgICAgICAgICAgICJscyAtbCBub25fZXhpc3RlbnRfZmlsZSA7IGV4aXQgMCJdLAorICAgIC4uLiAgICAgICAgICAgICAgc3RkZXJyPVNURE9VVCkKKyAgICAnbHM6IG5vbl9leGlzdGVudF9maWxlOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XG4nCisgICAgIiIiCisgICAgaWYgJ3N0ZG91dCcgaW4ga3dhcmdzOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdzdGRvdXQgYXJndW1lbnQgbm90IGFsbG93ZWQsIGl0IHdpbGwgYmUgb3ZlcnJpZGRlbi4nKQorICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsICpwb3BlbmFyZ3MsICoqa3dhcmdzKQorICAgIG91dHB1dCwgdW51c2VkX2VyciA9IHByb2Nlc3MuY29tbXVuaWNhdGUoKQorICAgIHJldGNvZGUgPSBwcm9jZXNzLnBvbGwoKQorICAgIGlmIHJldGNvZGU6CisgICAgICAgIGNtZCA9IGt3YXJncy5nZXQoImFyZ3MiKQorICAgICAgICBpZiBjbWQgaXMgTm9uZToKKyAgICAgICAgICAgIGNtZCA9IHBvcGVuYXJnc1swXQorICAgICAgICByYWlzZSBDYWxsZWRQcm9jZXNzRXJyb3IocmV0Y29kZSwgY21kLCBvdXRwdXQ9b3V0cHV0KQorICAgIHJldHVybiBvdXRwdXQKKworZGVmIGZpbmQoZGlyLCAqKndhbGtvcHRpb25zKToKKyAgICAiIiIgR2l2ZW4gYSBkaXJlY3RvcnksIHJlY3Vyc2VzIGludG8gdGhhdCBkaXJlY3RvcnksCisgICAgcmV0dXJuaW5nIGFsbCBmaWxlcyBhcyBhYnNvbHV0ZSBwYXRocy4gIiIiCisKKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkaXIsICoqd2Fsa29wdGlvbnMpOgorICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIHlpZWxkIG9zLnBhdGguam9pbihyb290LCBmaWxlKQorCisKKyMjIHJlYWxwYXRoKCkgcmVsYXRlZCBmdW5jdGlvbnMKK2RlZiBfX2lzX3BhdGhfYmVsb3coZmlsZSwgcm9vdCk6CisgICAgcmV0dXJuIChmaWxlICsgb3MucGF0aC5zZXApLnN0YXJ0c3dpdGgocm9vdCkKKworZGVmIF9fcmVhbHBhdGhfcmVsKHN0YXJ0LCByZWxfcGF0aCwgcm9vdCwgbG9vcF9jbnQsIGFzc3VtZV9kaXIpOgorICAgICIiIkNhbGN1bGF0ZXMgcmVhbCBwYXRoIG9mIHN5bWxpbmsgJ3N0YXJ0JyArICdyZWxfcGF0aCcgYmVsb3cKKyAgICAncm9vdCc7IG5vIHBhcnQgb2YgJ3N0YXJ0JyBiZWxvdyAncm9vdCcgbXVzdCBjb250YWluIHN5bWxpbmtzLiAiIiIKKyAgICBoYXZlX2RpciA9IFRydWUKKworICAgIGZvciBkIGluIHJlbF9wYXRoLnNwbGl0KG9zLnBhdGguc2VwKToKKyAgICAgICAgaWYgbm90IGhhdmVfZGlyIGFuZCBub3QgYXNzdW1lX2RpcjoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRU5PRU5ULCAibm8gc3VjaCBkaXJlY3RvcnkgJXMiICUgc3RhcnQpCisKKyAgICAgICAgaWYgZCA9PSBvcy5wYXRoLnBhcmRpcjogIyAnLi4nCisgICAgICAgICAgICBpZiBsZW4oc3RhcnQpID49IGxlbihyb290KToKKyAgICAgICAgICAgICAgICAjIGRvIG5vdCBmb2xsb3cgJy4uJyBiZWZvcmUgcm9vdAorICAgICAgICAgICAgICAgIHN0YXJ0ID0gb3MucGF0aC5kaXJuYW1lKHN0YXJ0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGVtaXQgd2FybmluZz8KKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAoc3RhcnQsIGhhdmVfZGlyKSA9IF9fcmVhbHBhdGgob3MucGF0aC5qb2luKHN0YXJ0LCBkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290LCBsb29wX2NudCwgYXNzdW1lX2RpcikKKworICAgICAgICBhc3NlcnQoX19pc19wYXRoX2JlbG93KHN0YXJ0LCByb290KSkKKworICAgIHJldHVybiBzdGFydAorCitkZWYgX19yZWFscGF0aChmaWxlLCByb290LCBsb29wX2NudCwgYXNzdW1lX2Rpcik6CisgICAgd2hpbGUgb3MucGF0aC5pc2xpbmsoZmlsZSkgYW5kIGxlbihmaWxlKSA+PSBsZW4ocm9vdCk6CisgICAgICAgIGlmIGxvb3BfY250ID09IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVMT09QLCBmaWxlKQorCisgICAgICAgIGxvb3BfY250IC09IDEKKyAgICAgICAgdGFyZ2V0ID0gb3MucGF0aC5ub3JtcGF0aChvcy5yZWFkbGluayhmaWxlKSkKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Ficyh0YXJnZXQpOgorICAgICAgICAgICAgdGRpciA9IG9zLnBhdGguZGlybmFtZShmaWxlKQorICAgICAgICAgICAgYXNzZXJ0KF9faXNfcGF0aF9iZWxvdyh0ZGlyLCByb290KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRkaXIgPSByb290CisKKyAgICAgICAgZmlsZSA9IF9fcmVhbHBhdGhfcmVsKHRkaXIsIHRhcmdldCwgcm9vdCwgbG9vcF9jbnQsIGFzc3VtZV9kaXIpCisKKyAgICB0cnk6CisgICAgICAgIGlzX2RpciA9IG9zLnBhdGguaXNkaXIoZmlsZSkKKyAgICBleGNlcHQ6CisgICAgICAgIGlzX2RpciA9IGZhbHNlCisKKyAgICByZXR1cm4gKGZpbGUsIGlzX2RpcikKKworZGVmIHJlYWxwYXRoKGZpbGUsIHJvb3QsIHVzZV9waHlzZGlyID0gVHJ1ZSwgbG9vcF9jbnQgPSAxMDAsIGFzc3VtZV9kaXIgPSBGYWxzZSk6CisgICAgIiIiIFJldHVybnMgdGhlIGNhbm9uaWNhbCBwYXRoIG9mICdmaWxlJyB3aXRoIGFzc3VtaW5nIGEKKyAgICB0b3BsZXZlbCAncm9vdCcgZGlyZWN0b3J5LiBXaGVuICd1c2VfcGh5c2RpcicgaXMgc2V0LCBhbGwKKyAgICBwcmVjZWRpbmcgcGF0aCBjb21wb25lbnRzIG9mICdmaWxlJyB3aWxsIGJlIHJlc29sdmVkIGZpcnN0OworICAgIHRoaXMgZmxhZyBzaG91bGQgYmUgc2V0IHVubGVzcyBpdCBpcyBndWFyYW50ZWVkIHRoYXQgdGhlcmUgaXMKKyAgICBubyBzeW1saW5rIGluIHRoZSBwYXRoLiBXaGVuICdhc3N1bWVfZGlyJyBpcyBub3Qgc2V0LCBtaXNzaW5nCisgICAgcGF0aCBjb21wb25lbnRzIHdpbGwgcmFpc2UgYW4gRU5PRU5UIGVycm9yIiIiCisKKyAgICByb290ID0gb3MucGF0aC5ub3JtcGF0aChyb290KQorICAgIGZpbGUgPSBvcy5wYXRoLm5vcm1wYXRoKGZpbGUpCisKKyAgICBpZiBub3Qgcm9vdC5lbmRzd2l0aChvcy5wYXRoLnNlcCk6CisgICAgICAgICMgbGV0dGluZyByb290IGVuZCB3aXRoICcvJyBtYWtlcyBzb21lIHRoaW5ncyBlYXNpZXIKKyAgICAgICAgcm9vdCA9IHJvb3QgKyBvcy5wYXRoLnNlcAorCisgICAgaWYgbm90IF9faXNfcGF0aF9iZWxvdyhmaWxlLCByb290KToKKyAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FSU5WQUwsICJmaWxlICclcycgaXMgbm90IGJlbG93IHJvb3QiICUgZmlsZSkKKworICAgIHRyeToKKyAgICAgICAgaWYgdXNlX3BoeXNkaXI6CisgICAgICAgICAgICBmaWxlID0gX19yZWFscGF0aF9yZWwocm9vdCwgZmlsZVsobGVuKHJvb3QpIC0gMSk6XSwgcm9vdCwgbG9vcF9jbnQsIGFzc3VtZV9kaXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWxlID0gX19yZWFscGF0aChmaWxlLCByb290LCBsb29wX2NudCwgYXNzdW1lX2RpcilbMF0KKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVMT09QOgorICAgICAgICAgICAgIyBtYWtlIEVMT09QIG1vcmUgcmVhZGFibGU7IHdpdGhvdXQgY2F0Y2hpbmcgaXQsIHRoZXJlIHdpbGwKKyAgICAgICAgICAgICMgYmUgcHJpbnRlZCBhIGJhY2t0cmFjZSB3aXRoIDEwMHMgb2YgT1NFcnJvciBleGNlcHRpb25zCisgICAgICAgICAgICAjIGVsc2UKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRUxPT1AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ0b28gbXVjaCByZWN1cnNpb25zIHdoaWxlIHJlc29sdmluZyAnJXMnOyBsb29wIGluICclcyciICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGUsIGUuc3RyZXJyb3IpKQorCisgICAgICAgIHJhaXNlCisKKyAgICByZXR1cm4gZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wcnNlcnZpY2UucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Byc2VydmljZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGNiY2IxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wcnNlcnZpY2UucHkKQEAgLTAsMCArMSwxMjYgQEAKKworZGVmIHByc2Vydl9tYWtlX2Nvbm4oZCwgY2hlY2sgPSBGYWxzZSk6CisgICAgaW1wb3J0IHByc2Vydi5zZXJ2CisgICAgaG9zdF9wYXJhbXMgPSBmaWx0ZXIoTm9uZSwgKGQuZ2V0VmFyKCJQUlNFUlZfSE9TVCIsIFRydWUpIG9yICcnKS5zcGxpdCgnOicpKQorICAgIHRyeToKKyAgICAgICAgY29ubiA9IE5vbmUKKyAgICAgICAgY29ubiA9IHByc2Vydi5zZXJ2LlBSU2VydmVyQ29ubmVjdGlvbihob3N0X3BhcmFtc1swXSwgaW50KGhvc3RfcGFyYW1zWzFdKSkKKyAgICAgICAgaWYgY2hlY2s6CisgICAgICAgICAgICBpZiBub3QgY29ubi5waW5nKCk6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdzZXJ2aWNlIG5vdCBhdmFpbGFibGUnKQorICAgICAgICBkLnNldFZhcigiX19QUlNFUlZfQ09OTiIsY29ubikKKyAgICBleGNlcHQgRXhjZXB0aW9uLCBleGM6CisgICAgICAgIGJiLmZhdGFsKCJDb25uZWN0aW5nIHRvIFBSIHNlcnZpY2UgJXM6JXMgZmFpbGVkOiAlcyIgJSAoaG9zdF9wYXJhbXNbMF0sIGhvc3RfcGFyYW1zWzFdLCBzdHIoZXhjKSkpCisKKyAgICByZXR1cm4gY29ubgorCitkZWYgcHJzZXJ2X2R1bXBfZGIoZCk6CisgICAgaWYgbm90IGQuZ2V0VmFyKCdQUlNFUlZfSE9TVCcsIFRydWUpOgorICAgICAgICBiYi5lcnJvcigiTm90IHVzaW5nIG5ldHdvcmsgYmFzZWQgUFIgc2VydmljZSIpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBjb25uID0gZC5nZXRWYXIoIl9fUFJTRVJWX0NPTk4iLCBUcnVlKQorICAgIGlmIGNvbm4gaXMgTm9uZToKKyAgICAgICAgY29ubiA9IHByc2Vydl9tYWtlX2Nvbm4oZCkKKyAgICAgICAgaWYgY29ubiBpcyBOb25lOgorICAgICAgICAgICAgYmIuZXJyb3IoIk1ha2luZyBjb25uZWN0aW9uIGZhaWxlZCB0byByZW1vdGUgUFIgc2VydmljZSIpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgI2R1bXAgZGIKKyAgICBvcHRfdmVyc2lvbiA9IGQuZ2V0VmFyKCdQUlNFUlZfRFVNUE9QVF9WRVJTSU9OJywgVHJ1ZSkKKyAgICBvcHRfcGtnYXJjaCA9IGQuZ2V0VmFyKCdQUlNFUlZfRFVNUE9QVF9QS0dBUkNIJywgVHJ1ZSkKKyAgICBvcHRfY2hlY2tzdW0gPSBkLmdldFZhcignUFJTRVJWX0RVTVBPUFRfQ0hFQ0tTVU0nLCBUcnVlKQorICAgIG9wdF9jb2wgPSAoIjEiID09IGQuZ2V0VmFyKCdQUlNFUlZfRFVNUE9QVF9DT0wnLCBUcnVlKSkKKyAgICByZXR1cm4gY29ubi5leHBvcnQob3B0X3ZlcnNpb24sIG9wdF9wa2dhcmNoLCBvcHRfY2hlY2tzdW0sIG9wdF9jb2wpCisKK2RlZiBwcnNlcnZfaW1wb3J0X2RiKGQsIGZpbHRlcl92ZXJzaW9uPU5vbmUsIGZpbHRlcl9wa2dhcmNoPU5vbmUsIGZpbHRlcl9jaGVja3N1bT1Ob25lKToKKyAgICBpZiBub3QgZC5nZXRWYXIoJ1BSU0VSVl9IT1NUJywgVHJ1ZSk6CisgICAgICAgIGJiLmVycm9yKCJOb3QgdXNpbmcgbmV0d29yayBiYXNlZCBQUiBzZXJ2aWNlIikKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGNvbm4gPSBkLmdldFZhcigiX19QUlNFUlZfQ09OTiIsIFRydWUpCisgICAgaWYgY29ubiBpcyBOb25lOgorICAgICAgICBjb25uID0gcHJzZXJ2X21ha2VfY29ubihkKQorICAgICAgICBpZiBjb25uIGlzIE5vbmU6CisgICAgICAgICAgICBiYi5lcnJvcigiTWFraW5nIGNvbm5lY3Rpb24gZmFpbGVkIHRvIHJlbW90ZSBQUiBzZXJ2aWNlIikKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgI2dldCB0aGUgZW50cnkgdmFsdWVzCisgICAgaW1wb3J0ZWQgPSBbXQorICAgIHByZWZpeCA9ICJQUkFVVE8kIgorICAgIGZvciB2IGluIGQua2V5cygpOgorICAgICAgICBpZiB2LnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgICAgIChyZW1haW4sIHNlcCwgY2hlY2tzdW0pID0gdi5ycGFydGl0aW9uKCckJykKKyAgICAgICAgICAgIChyZW1haW4sIHNlcCwgcGtnYXJjaCkgPSByZW1haW4ucnBhcnRpdGlvbignJCcpCisgICAgICAgICAgICAocmVtYWluLCBzZXAsIHZlcnNpb24pID0gcmVtYWluLnJwYXJ0aXRpb24oJyQnKQorICAgICAgICAgICAgaWYgKHJlbWFpbiArICckJyAhPSBwcmVmaXgpIG9yIFwKKyAgICAgICAgICAgICAgIChmaWx0ZXJfdmVyc2lvbiBhbmQgZmlsdGVyX3ZlcnNpb24gIT0gdmVyc2lvbikgb3IgXAorICAgICAgICAgICAgICAgKGZpbHRlcl9wa2dhcmNoIGFuZCBmaWx0ZXJfcGtnYXJjaCAhPSBwa2dhcmNoKSBvciBcCisgICAgICAgICAgICAgICAoZmlsdGVyX2NoZWNrc3VtIGFuZCBmaWx0ZXJfY2hlY2tzdW0gIT0gY2hlY2tzdW0pOgorICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGludChkLmdldFZhcihyZW1haW4gKyAnJCcgKyB2ZXJzaW9uICsgJyQnICsgcGtnYXJjaCArICckJyArIGNoZWNrc3VtLCBUcnVlKSkKKyAgICAgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBiYi5kZWJ1ZygiTm90IHZhbGlkIHZhbHVlIG9mICVzOiVzIiAlICh2LHN0cihleGMpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcmV0ID0gY29ubi5pbXBvcnRvbmUodmVyc2lvbixwa2dhcmNoLGNoZWNrc3VtLHZhbHVlKQorICAgICAgICAgICAgaWYgcmV0ICE9IHZhbHVlOgorICAgICAgICAgICAgICAgIGJiLmVycm9yKCJpbXBvcnRpbmcoJXMsJXMsJXMsJWQpIGZhaWxlZC4gREIgbWF5IGhhdmUgbGFyZ2VyIHZhbHVlICVkIiAlICh2ZXJzaW9uLHBrZ2FyY2gsY2hlY2tzdW0sdmFsdWUscmV0KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICBpbXBvcnRlZC5hcHBlbmQoKHZlcnNpb24scGtnYXJjaCxjaGVja3N1bSx2YWx1ZSkpCisgICAgcmV0dXJuIGltcG9ydGVkCisKK2RlZiBwcnNlcnZfZXhwb3J0X3RvZmlsZShkLCBtZXRhaW5mbywgZGF0YWluZm8sIGxvY2tkb3duLCBub21heD1GYWxzZSk6CisgICAgaW1wb3J0IGJiLnV0aWxzCisgICAgI2luaXRpbGl6ZSB0aGUgb3V0cHV0IGZpbGUKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZC5nZXRWYXIoJ1BSU0VSVl9EVU1QRElSJywgVHJ1ZSkpCisgICAgZGYgPSBkLmdldFZhcignUFJTRVJWX0RVTVBGSUxFJywgVHJ1ZSkKKyAgICAjd3JpdGUgZGF0YQorICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUoIiVzLmxvY2siICUgZGYpCisgICAgZiA9IG9wZW4oZGYsICJhIikKKyAgICBpZiBtZXRhaW5mbzoKKyAgICAgICAgI2R1bXAgY29sdW1uIGluZm8gCisgICAgICAgIGYud3JpdGUoIiNQUl9jb3JlX3ZlciA9IFwiJXNcIlxuXG4iICUgbWV0YWluZm9bJ2NvcmVfdmVyJ10pOworICAgICAgICBmLndyaXRlKCIjVGFibGU6ICVzXG4iICUgbWV0YWluZm9bJ3RibF9uYW1lJ10pCisgICAgICAgIGYud3JpdGUoIiNDb2x1bW5zOlxuIikKKyAgICAgICAgZi53cml0ZSgiI25hbWUgICAgICBcdCB0eXBlICAgIFx0IG5vdG4gICAgXHQgZGZsdCAgICBcdCBwa1xuIikKKyAgICAgICAgZi53cml0ZSgiIy0tLS0tLS0tLS1cdCAtLS0tLS0tLVx0IC0tLS0tLS0tXHQgLS0tLS0tLS1cdCAtLS0tXG4iKQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4obWV0YWluZm9bJ2NvbF9pbmZvJ10pKToKKyAgICAgICAgICAgIGYud3JpdGUoIiMlMTBzXHQgJThzXHQgJThzXHQgJThzXHQgJTRzXG4iICUgCisgICAgICAgICAgICAgICAgICAgIChtZXRhaW5mb1snY29sX2luZm8nXVtpXVsnbmFtZSddLCAKKyAgICAgICAgICAgICAgICAgICAgIG1ldGFpbmZvWydjb2xfaW5mbyddW2ldWyd0eXBlJ10sIAorICAgICAgICAgICAgICAgICAgICAgbWV0YWluZm9bJ2NvbF9pbmZvJ11baV1bJ25vdG51bGwnXSwgCisgICAgICAgICAgICAgICAgICAgICBtZXRhaW5mb1snY29sX2luZm8nXVtpXVsnZGZsdF92YWx1ZSddLCAKKyAgICAgICAgICAgICAgICAgICAgIG1ldGFpbmZvWydjb2xfaW5mbyddW2ldWydwayddKSkKKyAgICAgICAgZi53cml0ZSgiXG4iKQorCisgICAgaWYgbG9ja2Rvd246CisgICAgICAgIGYud3JpdGUoIlBSU0VSVl9MT0NLRE9XTiA9IFwiMVwiXG5cbiIpCisKKyAgICBpZiBkYXRhaW5mbzoKKyAgICAgICAgaWR4ID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGRhdGFpbmZvKSk6CisgICAgICAgICAgICBwa2dhcmNoID0gZGF0YWluZm9baV1bJ3BrZ2FyY2gnXQorICAgICAgICAgICAgdmFsdWUgPSBkYXRhaW5mb1tpXVsndmFsdWUnXQorICAgICAgICAgICAgaWYgcGtnYXJjaCBub3QgaW4gaWR4OgorICAgICAgICAgICAgICAgIGlkeFtwa2dhcmNoXSA9IGkKKyAgICAgICAgICAgIGVsaWYgdmFsdWUgPiBkYXRhaW5mb1tpZHhbcGtnYXJjaF1dWyd2YWx1ZSddOgorICAgICAgICAgICAgICAgIGlkeFtwa2dhcmNoXSA9IGkKKyAgICAgICAgICAgIGYud3JpdGUoIlBSQVVUTyQlcyQlcyQlcyA9IFwiJXNcIlxuIiAlIAorICAgICAgICAgICAgICAgIChzdHIoZGF0YWluZm9baV1bJ3ZlcnNpb24nXSksIHBrZ2FyY2gsIHN0cihkYXRhaW5mb1tpXVsnY2hlY2tzdW0nXSksIHN0cih2YWx1ZSkpKQorICAgICAgICBpZiBub3Qgbm9tYXg6CisgICAgICAgICAgICBmb3IgaSBpbiBpZHg6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiUFJBVVRPXyVzXyVzID0gXCIlc1wiXG4iICUgKHN0cihkYXRhaW5mb1tpZHhbaV1dWyd2ZXJzaW9uJ10pLHN0cihkYXRhaW5mb1tpZHhbaV1dWydwa2dhcmNoJ10pLHN0cihkYXRhaW5mb1tpZHhbaV1dWyd2YWx1ZSddKSkpCisgICAgZi5jbG9zZSgpCisgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKworZGVmIHByc2Vydl9jaGVja19hdmFpbChkKToKKyAgICBob3N0X3BhcmFtcyA9IGZpbHRlcihOb25lLCAoZC5nZXRWYXIoIlBSU0VSVl9IT1NUIiwgVHJ1ZSkgb3IgJycpLnNwbGl0KCc6JykpCisgICAgdHJ5OgorICAgICAgICBpZiBsZW4oaG9zdF9wYXJhbXMpICE9IDI6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGludChob3N0X3BhcmFtc1sxXSkKKyAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICBiYi5mYXRhbCgnVW5kZWZpbmVkL2luY29ycmVjdCBQUlNFUlZfSE9TVCB2YWx1ZS4gRm9ybWF0OiAiaG9zdDpwb3J0IicpCisgICAgZWxzZToKKyAgICAgICAgcHJzZXJ2X21ha2VfY29ubihkLCBUcnVlKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9xYS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcWEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVjZGFhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcWEucHkKQEAgLTAsMCArMSwxMTEgQEAKK2NsYXNzIEVMRkZpbGU6CisgICAgRUlfTklERU5UID0gMTYKKworICAgIEVJX0NMQVNTICAgICAgPSA0CisgICAgRUlfREFUQSAgICAgICA9IDUKKyAgICBFSV9WRVJTSU9OICAgID0gNgorICAgIEVJX09TQUJJICAgICAgPSA3CisgICAgRUlfQUJJVkVSU0lPTiA9IDgKKworICAgICMgcG9zc2libGUgdmFsdWVzIGZvciBFSV9DTEFTUworICAgIEVMRkNMQVNTTk9ORSA9IDAKKyAgICBFTEZDTEFTUzMyICAgPSAxCisgICAgRUxGQ0xBU1M2NCAgID0gMgorCisgICAgIyBwb3NzaWJsZSB2YWx1ZSBmb3IgRUlfVkVSU0lPTgorICAgIEVWX0NVUlJFTlQgICA9IDEKKworICAgICMgcG9zc2libGUgdmFsdWVzIGZvciBFSV9EQVRBCisgICAgRUxGREFUQU5PTkUgID0gMAorICAgIEVMRkRBVEEyTFNCICA9IDEKKyAgICBFTEZEQVRBMk1TQiAgPSAyCisKKyAgICBkZWYgbXlfYXNzZXJ0KHNlbGYsIGV4cGVjdGF0aW9uLCByZXN1bHQpOgorICAgICAgICBpZiBub3QgZXhwZWN0YXRpb24gPT0gcmVzdWx0OgorICAgICAgICAgICAgI3ByaW50ICInJXgnLCcleCcgJXMiICUgKG9yZChleHBlY3RhdGlvbiksIG9yZChyZXN1bHQpLCBzZWxmLm5hbWUpCisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRoaXMgZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZCIpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgYml0cyA9IDApOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuYml0cyA9IGJpdHMKKyAgICAgICAgc2VsZi5vYmpkdW1wX291dHB1dCA9IHt9CisKKyAgICBkZWYgb3BlbihzZWxmKToKKyAgICAgICAgc2VsZi5maWxlID0gZmlsZShzZWxmLm5hbWUsICJyIikKKyAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5maWxlLnJlYWQoRUxGRmlsZS5FSV9OSURFTlQrNCkKKworICAgICAgICBzZWxmLm15X2Fzc2VydChsZW4oc2VsZi5kYXRhKSwgRUxGRmlsZS5FSV9OSURFTlQrNCkKKyAgICAgICAgc2VsZi5teV9hc3NlcnQoc2VsZi5kYXRhWzBdLCBjaHIoMHg3ZikgKQorICAgICAgICBzZWxmLm15X2Fzc2VydChzZWxmLmRhdGFbMV0sICdFJykKKyAgICAgICAgc2VsZi5teV9hc3NlcnQoc2VsZi5kYXRhWzJdLCAnTCcpCisgICAgICAgIHNlbGYubXlfYXNzZXJ0KHNlbGYuZGF0YVszXSwgJ0YnKQorICAgICAgICBpZiBzZWxmLmJpdHMgPT0gMDoKKyAgICAgICAgICAgIGlmIHNlbGYuZGF0YVtFTEZGaWxlLkVJX0NMQVNTXSA9PSBjaHIoRUxGRmlsZS5FTEZDTEFTUzMyKToKKyAgICAgICAgICAgICAgICBzZWxmLmJpdHMgPSAzMgorICAgICAgICAgICAgZWxpZiBzZWxmLmRhdGFbRUxGRmlsZS5FSV9DTEFTU10gPT0gY2hyKEVMRkZpbGUuRUxGQ0xBU1M2NCk6CisgICAgICAgICAgICAgICAgc2VsZi5iaXRzID0gNjQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBOb3QgMzItYml0IG9yIDY0Li4gbGV0cyBhc3NlcnQKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkVMRiBidXQgbm90IDMyIG9yIDY0IGJpdC4iKQorICAgICAgICBlbGlmIHNlbGYuYml0cyA9PSAzMjoKKyAgICAgICAgICAgIHNlbGYubXlfYXNzZXJ0KHNlbGYuZGF0YVtFTEZGaWxlLkVJX0NMQVNTXSwgY2hyKEVMRkZpbGUuRUxGQ0xBU1MzMikpCisgICAgICAgIGVsaWYgc2VsZi5iaXRzID09IDY0OgorICAgICAgICAgICAgc2VsZi5teV9hc3NlcnQoc2VsZi5kYXRhW0VMRkZpbGUuRUlfQ0xBU1NdLCBjaHIoRUxGRmlsZS5FTEZDTEFTUzY0KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTXVzdCBzcGVjaWZ5IHVua25vd24sIDMyIG9yIDY0IGJpdCBzaXplLiIpCisgICAgICAgIHNlbGYubXlfYXNzZXJ0KHNlbGYuZGF0YVtFTEZGaWxlLkVJX1ZFUlNJT05dLCBjaHIoRUxGRmlsZS5FVl9DVVJSRU5UKSApCisKKyAgICAgICAgc2VsZi5zZXggPSBzZWxmLmRhdGFbRUxGRmlsZS5FSV9EQVRBXQorICAgICAgICBpZiBzZWxmLnNleCA9PSBjaHIoRUxGRmlsZS5FTEZEQVRBTk9ORSk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oInNlbGYuc2V4ID09IEVMRkRBVEFOT05FIikKKyAgICAgICAgZWxpZiBzZWxmLnNleCA9PSBjaHIoRUxGRmlsZS5FTEZEQVRBMkxTQik6CisgICAgICAgICAgICBzZWxmLnNleCA9ICI8IgorICAgICAgICBlbGlmIHNlbGYuc2V4ID09IGNocihFTEZGaWxlLkVMRkRBVEEyTVNCKToKKyAgICAgICAgICAgIHNlbGYuc2V4ID0gIj4iCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gc2VsZi5zZXgiKQorCisgICAgZGVmIG9zQWJpKHNlbGYpOgorICAgICAgICByZXR1cm4gb3JkKHNlbGYuZGF0YVtFTEZGaWxlLkVJX09TQUJJXSkKKworICAgIGRlZiBhYmlWZXJzaW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gb3JkKHNlbGYuZGF0YVtFTEZGaWxlLkVJX0FCSVZFUlNJT05dKQorCisgICAgZGVmIGFiaVNpemUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmJpdHMKKworICAgIGRlZiBpc0xpdHRsZUVuZGlhbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2V4ID09ICI8IgorCisgICAgZGVmIGlzQmlnRW5naWFuKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zZXggPT0gIj4iCisKKyAgICBkZWYgbWFjaGluZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdlIGtub3cgdGhlIHNleCBzdG9yZWQgaW4gc2VsZi5zZXggYW5kIHdlCisgICAgICAgIGtub3cgdGhlIHBvc2l0aW9uCisgICAgICAgICIiIgorICAgICAgICBpbXBvcnQgc3RydWN0CisgICAgICAgIChhLCkgPSBzdHJ1Y3QudW5wYWNrKHNlbGYuc2V4KyJIIiwgc2VsZi5kYXRhWzE4OjIwXSkKKyAgICAgICAgcmV0dXJuIGEKKworICAgIGRlZiBydW5fb2JqZHVtcChzZWxmLCBjbWQsIGQpOgorICAgICAgICBpbXBvcnQgYmIucHJvY2VzcworICAgICAgICBpbXBvcnQgc3lzCisKKyAgICAgICAgaWYgY21kIGluIHNlbGYub2JqZHVtcF9vdXRwdXQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5vYmpkdW1wX291dHB1dFtjbWRdCisKKyAgICAgICAgb2JqZHVtcCA9IGQuZ2V0VmFyKCdPQkpEVU1QJywgVHJ1ZSkKKworICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBlbnZbIkxDX0FMTCJdID0gIkMiCisgICAgICAgIGVudlsiUEFUSCJdID0gZC5nZXRWYXIoJ1BBVEgnLCBUcnVlKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLm5vdGUoIiVzICVzICVzIiAlIChvYmpkdW1wLCBjbWQsIHNlbGYubmFtZSkpCisgICAgICAgICAgICBzZWxmLm9iamR1bXBfb3V0cHV0W2NtZF0gPSBiYi5wcm9jZXNzLnJ1bihbb2JqZHVtcCwgY21kLCBzZWxmLm5hbWVdLCBlbnY9ZW52LCBzaGVsbD1GYWxzZSlbMF0KKyAgICAgICAgICAgIHJldHVybiBzZWxmLm9iamR1bXBfb3V0cHV0W2NtZF0KKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgYmIubm90ZSgiJXMgJXMgJXMgZmFpbGVkOiAlcyIgJSAob2JqZHVtcCwgY21kLCBzZWxmLm5hbWUsIGUpKQorICAgICAgICAgICAgcmV0dXJuICIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL3JlY2lwZXV0aWxzLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9yZWNpcGV1dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGZhNzI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9yZWNpcGV1dGlscy5weQpAQCAtMCwwICsxLDc0MCBAQAorIyBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQgbW9kaWZ5aW5nIHJlY2lwZXMKKyMKKyMgU29tZSBjb2RlIGJvcnJvd2VkIGZyb20gdGhlIE9FIGxheWVyIGluZGV4CisjCisjIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHRleHR3cmFwCitpbXBvcnQgZGlmZmxpYgoraW1wb3J0IHV0aWxzCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgcmUKK2ltcG9ydCBmbm1hdGNoCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdCwgZGVmYXVsdGRpY3QKKworCisjIEhlbHAgdXMgdG8gZmluZCBwbGFjZXMgdG8gaW5zZXJ0IHZhbHVlcworcmVjaXBlX3Byb2dyZXNzaW9uID0gWydTVU1NQVJZJywgJ0RFU0NSSVBUSU9OJywgJ0hPTUVQQUdFJywgJ0JVR1RSQUNLRVInLCAnU0VDVElPTicsICdMSUNFTlNFJywgJ0xJQ19GSUxFU19DSEtTVU0nLCAnUFJPVklERVMnLCAnREVQRU5EUycsICdQUicsICdQVicsICdTUkNSRVYnLCAnU1JDX1VSSScsICdTJywgJ2RvX2ZldGNoJywgJ2RvX3VucGFjaycsICdkb19wYXRjaCcsICdFWFRSQV9PRUNPTkYnLCAnZG9fY29uZmlndXJlJywgJ0VYVFJBX09FTUFLRScsICdkb19jb21waWxlJywgJ2RvX2luc3RhbGwnLCAnZG9fcG9wdWxhdGVfc3lzcm9vdCcsICdJTklUU0NSSVBUJywgJ1VTRVJBREQnLCAnR1JPVVBBREQnLCAnUEFDS0FHRVMnLCAnRklMRVMnLCAnUkRFUEVORFMnLCAnUlJFQ09NTUVORFMnLCAnUlNVR0dFU1RTJywgJ1JQUk9WSURFUycsICdSUkVQTEFDRVMnLCAnUkNPTkZMSUNUUycsICdBTExPV19FTVBUWScsICdkb19wYWNrYWdlJywgJ2RvX2RlcGxveSddCisjIFZhcmlhYmxlcyB0aGF0IHNvbWV0aW1lcyBhcmUgYSBiaXQgbG9uZyBidXQgc2hvdWxkbid0IGJlIHdyYXBwZWQKK25vd3JhcF92YXJzID0gWydTVU1NQVJZJywgJ0hPTUVQQUdFJywgJ0JVR1RSQUNLRVInXQorbGlzdF92YXJzID0gWydTUkNfVVJJJywgJ0xJQ19GSUxFU19DSEtTVU0nXQorbWV0YV92YXJzID0gWydTVU1NQVJZJywgJ0RFU0NSSVBUSU9OJywgJ0hPTUVQQUdFJywgJ0JVR1RSQUNLRVInLCAnU0VDVElPTiddCisKKworZGVmIHBuX3RvX3JlY2lwZShjb29rZXIsIHBuKToKKyAgICAiIiJDb252ZXJ0IGEgcmVjaXBlIG5hbWUgKFBOKSB0byB0aGUgcGF0aCB0byB0aGUgcmVjaXBlIGZpbGUiIiIKKyAgICBpbXBvcnQgYmIucHJvdmlkZXJzCisKKyAgICBpZiBwbiBpbiBjb29rZXIucmVjaXBlY2FjaGUucGtnX3BuOgorICAgICAgICBmaWxlbmFtZXMgPSBjb29rZXIucmVjaXBlY2FjaGUucGtnX3BuW3BuXQorICAgICAgICBiZXN0ID0gYmIucHJvdmlkZXJzLmZpbmRCZXN0UHJvdmlkZXIocG4sIGNvb2tlci5kYXRhLCBjb29rZXIucmVjaXBlY2FjaGUsIGNvb2tlci5yZWNpcGVjYWNoZS5wa2dfcG4pCisgICAgICAgIHJldHVybiBiZXN0WzNdCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworCitkZWYgZ2V0X3VuYXZhaWxhYmxlX3JlYXNvbnMoY29va2VyLCBwbik6CisgICAgIiIiSWYgYSByZWNpcGUgY291bGQgbm90IGJlIGZvdW5kLCBmaW5kIG91dCB3aHkgaWYgcG9zc2libGUiIiIKKyAgICBpbXBvcnQgYmIudGFza2RhdGEKKyAgICB0YXNrZGF0YSA9IGJiLnRhc2tkYXRhLlRhc2tEYXRhKE5vbmUsIHNraXBsaXN0PWNvb2tlci5za2lwbGlzdCkKKyAgICByZXR1cm4gdGFza2RhdGEuZ2V0X3JlYXNvbnMocG4pCisKKworZGVmIHBhcnNlX3JlY2lwZShmbiwgYXBwZW5kZmlsZXMsIGQpOgorICAgICIiIgorICAgIFBhcnNlIGFuIGluZGl2aWR1YWwgcmVjaXBlIGZpbGUsIG9wdGlvbmFsbHkgd2l0aCBhIGxpc3Qgb2YKKyAgICBiYmFwcGVuZCBmaWxlcy4KKyAgICAiIiIKKyAgICBpbXBvcnQgYmIuY2FjaGUKKyAgICBlbnZkYXRhID0gYmIuY2FjaGUuQ2FjaGUubG9hZERhdGFGdWxsKGZuLCBhcHBlbmRmaWxlcywgZCkKKyAgICByZXR1cm4gZW52ZGF0YQorCisKK2RlZiBwYXJzZV9yZWNpcGVfc2ltcGxlKGNvb2tlciwgcG4sIGQsIGFwcGVuZHM9VHJ1ZSk6CisgICAgIiIiCisgICAgUGFyc2UgYSByZWNpcGUgYW5kIG9wdGlvbmFsbHkgYWxsIGJiYXBwZW5kcyB0aGF0IGFwcGx5IHRvIGl0CisgICAgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyAgICAiIiIKKyAgICBpbXBvcnQgYmIucHJvdmlkZXJzCisKKyAgICByZWNpcGVmaWxlID0gcG5fdG9fcmVjaXBlKGNvb2tlciwgcG4pCisgICAgaWYgbm90IHJlY2lwZWZpbGU6CisgICAgICAgIHNraXByZWFzb25zID0gZ2V0X3VuYXZhaWxhYmxlX3JlYXNvbnMoY29va2VyLCBwbikKKyAgICAgICAgIyBXZSBtYXkgYXMgd2VsbCByZS11c2UgYmIucHJvdmlkZXJzLk5vUHJvdmlkZXIgaGVyZQorICAgICAgICBpZiBza2lwcmVhc29uczoKKyAgICAgICAgICAgIHJhaXNlIGJiLnByb3ZpZGVycy5Ob1Byb3ZpZGVyKHNraXByZWFzb25zKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgYmIucHJvdmlkZXJzLk5vUHJvdmlkZXIoJ1VuYWJsZSB0byBmaW5kIGFueSByZWNpcGUgZmlsZSBtYXRjaGluZyAlcycgJSBwbikKKyAgICBpZiBhcHBlbmRzOgorICAgICAgICBhcHBlbmRmaWxlcyA9IGNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMocmVjaXBlZmlsZSkKKyAgICByZXR1cm4gcGFyc2VfcmVjaXBlKHJlY2lwZWZpbGUsIGFwcGVuZGZpbGVzLCBkKQorCisKK2RlZiBnZXRfdmFyX2ZpbGVzKGZuLCB2YXJsaXN0LCBkKToKKyAgICAiIiJGaW5kIHRoZSBmaWxlIGluIHdoaWNoIGVhY2ggb2YgYSBsaXN0IG9mIHZhcmlhYmxlcyBpcyBzZXQuCisgICAgTm90ZTogcmVxdWlyZXMgdmFyaWFibGUgaGlzdG9yeSB0byBiZSBlbmFibGVkIHdoZW4gcGFyc2luZy4KKyAgICAiIiIKKyAgICB2YXJmaWxlcyA9IHt9CisgICAgZm9yIHYgaW4gdmFybGlzdDoKKyAgICAgICAgaGlzdG9yeSA9IGQudmFyaGlzdG9yeS52YXJpYWJsZSh2KQorICAgICAgICBmaWxlcyA9IFtdCisgICAgICAgIGZvciBldmVudCBpbiBoaXN0b3J5OgorICAgICAgICAgICAgaWYgJ2ZpbGUnIGluIGV2ZW50IGFuZCBub3QgJ2ZsYWcnIGluIGV2ZW50OgorICAgICAgICAgICAgICAgIGZpbGVzLmFwcGVuZChldmVudFsnZmlsZSddKQorICAgICAgICBpZiBmaWxlczoKKyAgICAgICAgICAgIGFjdHVhbGZpbGUgPSBmaWxlc1stMV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFjdHVhbGZpbGUgPSBOb25lCisgICAgICAgIHZhcmZpbGVzW3ZdID0gYWN0dWFsZmlsZQorCisgICAgcmV0dXJuIHZhcmZpbGVzCisKKworZGVmIHBhdGNoX3JlY2lwZV9maWxlKGZuLCB2YWx1ZXMsIHBhdGNoPUZhbHNlLCByZWxwYXRoPScnKToKKyAgICAiIiJVcGRhdGUgb3IgaW5zZXJ0IHZhcmlhYmxlIHZhbHVlcyBpbnRvIGEgcmVjaXBlIGZpbGUgKGFzc3VtaW5nIHlvdQorICAgICAgIGhhdmUgYWxyZWFkeSBpZGVudGlmaWVkIHRoZSBleGFjdCBmaWxlIHlvdSB3YW50IHRvIHVwZGF0ZS4pCisgICAgICAgTm90ZSB0aGF0IHNvbWUgbWFudWFsIGluc3BlY3Rpb24vaW50ZXJ2ZW50aW9uIG1heSBiZSByZXF1aXJlZAorICAgICAgIHNpbmNlIHRoaXMgY2Fubm90IGhhbmRsZSBhbGwgc2l0dWF0aW9ucy4KKyAgICAiIiIKKyAgICByZW1haW5pbmduYW1lcyA9IHt9CisgICAgZm9yIGsgaW4gdmFsdWVzLmtleXMoKToKKyAgICAgICAgcmVtYWluaW5nbmFtZXNba10gPSByZWNpcGVfcHJvZ3Jlc3Npb24uaW5kZXgoaykgaWYgayBpbiByZWNpcGVfcHJvZ3Jlc3Npb24gZWxzZSAtMQorICAgIHJlbWFpbmluZ25hbWVzID0gT3JkZXJlZERpY3Qoc29ydGVkKHJlbWFpbmluZ25hbWVzLml0ZXJpdGVtcygpLCBrZXk9bGFtYmRhIHg6IHhbMV0pKQorCisgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoJ3cnLCBkZWxldGU9RmFsc2UpIGFzIHRmOgorICAgICAgICBkZWYgb3V0cHV0dmFsdWUobmFtZSk6CisgICAgICAgICAgICByYXd0ZXh0ID0gJyVzID0gIiVzIlxuJyAlIChuYW1lLCB2YWx1ZXNbbmFtZV0pCisgICAgICAgICAgICBpZiBuYW1lIGluIG5vd3JhcF92YXJzOgorICAgICAgICAgICAgICAgIHRmLndyaXRlKHJhd3RleHQpCisgICAgICAgICAgICBlbGlmIG5hbWUgaW4gbGlzdF92YXJzOgorICAgICAgICAgICAgICAgIHNwbGl0dmFsdWUgPSB2YWx1ZXNbbmFtZV0uc3BsaXQoKQorICAgICAgICAgICAgICAgIGlmIGxlbihzcGxpdHZhbHVlKSA+IDE6CisgICAgICAgICAgICAgICAgICAgIGxpbmVzcGxpdCA9ICcgXFxcbicgKyAoJyAnICogKGxlbihuYW1lKSArIDQpKQorICAgICAgICAgICAgICAgICAgICB0Zi53cml0ZSgnJXMgPSAiJXMlcyJcbicgJSAobmFtZSwgbGluZXNwbGl0LmpvaW4oc3BsaXR2YWx1ZSksIGxpbmVzcGxpdCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdGYud3JpdGUocmF3dGV4dCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgd3JhcHBlZCA9IHRleHR3cmFwLndyYXAocmF3dGV4dCkKKyAgICAgICAgICAgICAgICBmb3Igd3JhcGxpbmUgaW4gd3JhcHBlZFs6LTFdOgorICAgICAgICAgICAgICAgICAgICB0Zi53cml0ZSgnJXMgXFxcbicgJSB3cmFwbGluZSkKKyAgICAgICAgICAgICAgICB0Zi53cml0ZSgnJXNcbicgJSB3cmFwcGVkWy0xXSkKKworICAgICAgICB0Zm4gPSB0Zi5uYW1lCisgICAgICAgIHdpdGggb3BlbihmbiwgJ3InKSBhcyBmOgorICAgICAgICAgICAgIyBGaXJzdCBydW50aHJvdWdoIC0gZmluZCBleGlzdGluZyBuYW1lcyAoc28gd2Uga25vdyBub3QgdG8gaW5zZXJ0IGJhc2VkIG9uIHJlY2lwZV9wcm9ncmVzc2lvbikKKyAgICAgICAgICAgICMgU2Vjb25kIHJ1bnRocm91Z2ggLSBtYWtlIHRoZSBjaGFuZ2VzCisgICAgICAgICAgICBleGlzdGluZ25hbWVzID0gW10KKyAgICAgICAgICAgIGZvciBydW50aHJvdWdoIGluIFsxLCAyXToKKyAgICAgICAgICAgICAgICBjdXJybmFtZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgY3Vycm5hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGsgaW4gcmVtYWluaW5nbmFtZXMua2V5cygpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIHJlY2lwZV9wcm9ncmVzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2goJ14lcyhfcHJlcGVuZHxfYXBwZW5kKSpbID86PShdJyAlIHAsIGxpbmUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVtYWluaW5nbmFtZXNba10gPiAtMSBhbmQgcmVjaXBlX3Byb2dyZXNzaW9uLmluZGV4KHApID4gcmVtYWluaW5nbmFtZXNba10gYW5kIHJ1bnRocm91Z2ggPiAxIGFuZCBub3QgayBpbiBleGlzdGluZ25hbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dHZhbHVlKGspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHJlbWFpbmluZ25hbWVzW2tdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGsgaW4gcmVtYWluaW5nbmFtZXMua2V5cygpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlLm1hdGNoKCdeJXNbID86PV0nICUgaywgbGluZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJuYW1lID0gaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBydW50aHJvdWdoID09IDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ25hbWVzLmFwcGVuZChrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHJlbWFpbmluZ25hbWVzW2tdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjdXJybmFtZSBhbmQgcnVudGhyb3VnaCA+IDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0dmFsdWUoY3Vycm5hbWUpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgY3Vycm5hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICBzbGluZSA9IGxpbmUucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzbGluZS5lbmRzd2l0aCgnXFwnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJybmFtZSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGlmIHJ1bnRocm91Z2ggPiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgdGYud3JpdGUobGluZSkKKyAgICAgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgaWYgcmVtYWluaW5nbmFtZXM6CisgICAgICAgICAgICB0Zi53cml0ZSgnXG4nKQorICAgICAgICAgICAgZm9yIGsgaW4gcmVtYWluaW5nbmFtZXMua2V5cygpOgorICAgICAgICAgICAgICAgIG91dHB1dHZhbHVlKGspCisKKyAgICB3aXRoIG9wZW4odGZuLCAnVScpIGFzIGY6CisgICAgICAgIHRvbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgaWYgcGF0Y2g6CisgICAgICAgIHdpdGggb3BlbihmbiwgJ1UnKSBhcyBmOgorICAgICAgICAgICAgZnJvbWxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICByZWxmbiA9IG9zLnBhdGgucmVscGF0aChmbiwgcmVscGF0aCkKKyAgICAgICAgZGlmZiA9IGRpZmZsaWIudW5pZmllZF9kaWZmKGZyb21saW5lcywgdG9saW5lcywgJ2EvJXMnICUgcmVsZm4sICdiLyVzJyAlIHJlbGZuKQorICAgICAgICBvcy5yZW1vdmUodGZuKQorICAgICAgICByZXR1cm4gZGlmZgorICAgIGVsc2U6CisgICAgICAgIHdpdGggb3BlbihmbiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZWxpbmVzKHRvbGluZXMpCisgICAgICAgIG9zLnJlbW92ZSh0Zm4pCisgICAgICAgIHJldHVybiBOb25lCisKK2RlZiBsb2NhbGlzZV9maWxlX3ZhcnMoZm4sIHZhcmZpbGVzLCB2YXJsaXN0KToKKyAgICAiIiJHaXZlbiBhIGxpc3Qgb2YgdmFyaWFibGVzIGFuZCB2YXJpYWJsZSBoaXN0b3J5IChmZXRjaGVkIHdpdGggZ2V0X3Zhcl9maWxlcygpKQorICAgIGZpbmQgd2hlcmUgZWFjaCB2YXJpYWJsZSBzaG91bGQgYmUgc2V0L2NoYW5nZWQuIFRoaXMgaGFuZGxlcyBmb3IgZXhhbXBsZSB3aGVyZSBhCisgICAgcmVjaXBlIGluY2x1ZGVzIGFuIGluYyBmaWxlIHdoZXJlIHZhcmlhYmxlcyBtaWdodCBiZSBjaGFuZ2VkIC0gaW4gbW9zdCBjYXNlcworICAgIHdlIHdhbnQgdG8gdXBkYXRlIHRoZSBpbmMgZmlsZSB3aGVuIGNoYW5naW5nIHRoZSB2YXJpYWJsZSB2YWx1ZSByYXRoZXIgdGhhbiBhZGRpbmcKKyAgICBpdCB0byB0aGUgcmVjaXBlIGl0c2VsZi4KKyAgICAiIiIKKyAgICBmbmRpciA9IG9zLnBhdGguZGlybmFtZShmbikgKyBvcy5zZXAKKworICAgIGZpcnN0X21ldGFfZmlsZSA9IE5vbmUKKyAgICBmb3IgdiBpbiBtZXRhX3ZhcnM6CisgICAgICAgIGYgPSB2YXJmaWxlcy5nZXQodiwgTm9uZSkKKyAgICAgICAgaWYgZjoKKyAgICAgICAgICAgIGFjdHVhbGRpciA9IG9zLnBhdGguZGlybmFtZShmKSArIG9zLnNlcAorICAgICAgICAgICAgaWYgYWN0dWFsZGlyLnN0YXJ0c3dpdGgoZm5kaXIpOgorICAgICAgICAgICAgICAgIGZpcnN0X21ldGFfZmlsZSA9IGYKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgZmlsZXZhcnMgPSBkZWZhdWx0ZGljdChsaXN0KQorICAgIGZvciB2IGluIHZhcmxpc3Q6CisgICAgICAgIGYgPSB2YXJmaWxlc1t2XQorICAgICAgICAjIE9ubHkgcmV0dXJuIGZpbGVzIHRoYXQgYXJlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgcmVjaXBlIG9yIGluIHNvbWUgZGlyZWN0b3J5IGJlbG93IHRoZXJlCisgICAgICAgICMgKHRoaXMgZXhjbHVkZXMgYmJjbGFzcyBmaWxlcyBhbmQgY29tbW9uIGluYyBmaWxlcyB0aGF0IHdvdWxkbid0IGJlIGFwcHJvcHJpYXRlIHRvIHNldCB0aGUgdmFyaWFibGUKKyAgICAgICAgIyBpbiBpZiB3ZSB3ZXJlIGdvaW5nIHRvIHNldCBhIHZhbHVlIHNwZWNpZmljIHRvIHRoaXMgcmVjaXBlKQorICAgICAgICBpZiBmOgorICAgICAgICAgICAgYWN0dWFsZmlsZSA9IGYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgVmFyaWFibGUgaXNuJ3QgaW4gYSBmaWxlLCBpZiBpdCdzIG9uZSBvZiB0aGUgIm1ldGEiIHZhcnMsIHVzZSB0aGUgZmlyc3QgZmlsZSB3aXRoIGEgbWV0YSB2YXIgaW4gaXQKKyAgICAgICAgICAgIGlmIGZpcnN0X21ldGFfZmlsZToKKyAgICAgICAgICAgICAgICBhY3R1YWxmaWxlID0gZmlyc3RfbWV0YV9maWxlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFjdHVhbGZpbGUgPSBmbgorCisgICAgICAgIGFjdHVhbGRpciA9IG9zLnBhdGguZGlybmFtZShhY3R1YWxmaWxlKSArIG9zLnNlcAorICAgICAgICBpZiBub3QgYWN0dWFsZGlyLnN0YXJ0c3dpdGgoZm5kaXIpOgorICAgICAgICAgICAgYWN0dWFsZmlsZSA9IGZuCisgICAgICAgIGZpbGV2YXJzW2FjdHVhbGZpbGVdLmFwcGVuZCh2KQorCisgICAgcmV0dXJuIGZpbGV2YXJzCisKK2RlZiBwYXRjaF9yZWNpcGUoZCwgZm4sIHZhcnZhbHVlcywgcGF0Y2g9RmFsc2UsIHJlbHBhdGg9JycpOgorICAgICIiIk1vZGlmeSBhIGxpc3Qgb2YgdmFyaWFibGUgdmFsdWVzIGluIHRoZSBzcGVjaWZpZWQgcmVjaXBlLiBIYW5kbGVzIGluYyBmaWxlcyBpZgorICAgIHVzZWQgYnkgdGhlIHJlY2lwZS4KKyAgICAiIiIKKyAgICB2YXJsaXN0ID0gdmFydmFsdWVzLmtleXMoKQorICAgIHZhcmZpbGVzID0gZ2V0X3Zhcl9maWxlcyhmbiwgdmFybGlzdCwgZCkKKyAgICBsb2NzID0gbG9jYWxpc2VfZmlsZV92YXJzKGZuLCB2YXJmaWxlcywgdmFybGlzdCkKKyAgICBwYXRjaGVzID0gW10KKyAgICBmb3IgZix2IGluIGxvY3MuaXRlcml0ZW1zKCk6CisgICAgICAgIHZhbHMgPSB7azogdmFydmFsdWVzW2tdIGZvciBrIGluIHZ9CisgICAgICAgIHBhdGNoZGF0YSA9IHBhdGNoX3JlY2lwZV9maWxlKGYsIHZhbHMsIHBhdGNoLCByZWxwYXRoKQorICAgICAgICBpZiBwYXRjaDoKKyAgICAgICAgICAgIHBhdGNoZXMuYXBwZW5kKHBhdGNoZGF0YSkKKworICAgIGlmIHBhdGNoOgorICAgICAgICByZXR1cm4gcGF0Y2hlcworICAgIGVsc2U6CisgICAgICAgIHJldHVybiBOb25lCisKKworCitkZWYgY29weV9yZWNpcGVfZmlsZXMoZCwgdGd0X2Rpciwgd2hvbGVfZGlyPUZhbHNlLCBkb3dubG9hZD1UcnVlKToKKyAgICAiIiJDb3B5IChsb2NhbCkgcmVjaXBlIGZpbGVzLCBpbmNsdWRpbmcgYm90aCBmaWxlcyBpbmNsdWRlZCB2aWEgaW5jbHVkZS9yZXF1aXJlLAorICAgIGFuZCBmaWxlcyByZWZlcnJlZCB0byBpbiB0aGUgU1JDX1VSSSB2YXJpYWJsZS4iIiIKKyAgICBpbXBvcnQgYmIuZmV0Y2gyCisgICAgaW1wb3J0IG9lLnBhdGgKKworICAgICMgRklYTUUgbmVlZCBhIHdhcm5pbmcgaWYgdGhlIHVuZXhwYW5kZWQgU1JDX1VSSSB2YWx1ZSBjb250YWlucyB2YXJpYWJsZSByZWZlcmVuY2VzCisKKyAgICB1cmlzID0gKGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBmZXRjaCA9IGJiLmZldGNoMi5GZXRjaCh1cmlzLCBkKQorICAgIGlmIGRvd25sb2FkOgorICAgICAgICBmZXRjaC5kb3dubG9hZCgpCisKKyAgICAjIENvcHkgbG9jYWwgZmlsZXMgdG8gdGFyZ2V0IGRpcmVjdG9yeSBhbmQgZ2F0aGVyIGFueSByZW1vdGUgZmlsZXMKKyAgICBiYl9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKSkgKyBvcy5zZXAKKyAgICByZW1vdGVzID0gW10KKyAgICBpbmNsdWRlcyA9IFtwYXRoIGZvciBwYXRoIGluIGQuZ2V0VmFyKCdCQklOQ0xVREVEJywgVHJ1ZSkuc3BsaXQoKSBpZgorICAgICAgICAgICAgICAgIHBhdGguc3RhcnRzd2l0aChiYl9kaXIpIGFuZCBvcy5wYXRoLmV4aXN0cyhwYXRoKV0KKyAgICBmb3IgcGF0aCBpbiBmZXRjaC5sb2NhbHBhdGhzKCkgKyBpbmNsdWRlczoKKyAgICAgICAgIyBPbmx5IGltcG9ydCBmaWxlcyB0aGF0IGFyZSB1bmRlciB0aGUgbWV0YSBkaXJlY3RvcnkKKyAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKGJiX2Rpcik6CisgICAgICAgICAgICBpZiBub3Qgd2hvbGVfZGlyOgorICAgICAgICAgICAgICAgIHJlbHBhdGggPSBvcy5wYXRoLnJlbHBhdGgocGF0aCwgYmJfZGlyKQorICAgICAgICAgICAgICAgIHN1YmRpciA9IG9zLnBhdGguam9pbih0Z3RfZGlyLCBvcy5wYXRoLmRpcm5hbWUocmVscGF0aCkpCisgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHN1YmRpcik6CisgICAgICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKHN1YmRpcikKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weTIocGF0aCwgb3MucGF0aC5qb2luKHRndF9kaXIsIHJlbHBhdGgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVtb3Rlcy5hcHBlbmQocGF0aCkKKyAgICAjIFNpbXBseSBjb3B5IHdob2xlIG1ldGEgZGlyLCBpZiByZXF1ZXN0ZWQKKyAgICBpZiB3aG9sZV9kaXI6CisgICAgICAgIHNodXRpbC5jb3B5dHJlZShiYl9kaXIsIHRndF9kaXIpCisKKyAgICByZXR1cm4gcmVtb3RlcworCisKK2RlZiBnZXRfcmVjaXBlX3BhdGNoZXMoZCk6CisgICAgIiIiR2V0IGEgbGlzdCBvZiB0aGUgcGF0Y2hlcyBpbmNsdWRlZCBpbiBTUkNfVVJJIHdpdGhpbiBhIHJlY2lwZS4iIiIKKyAgICBwYXRjaGZpbGVzID0gW10KKyAgICAjIEV4ZWN1dGUgc3JjX3BhdGNoZXMoKSBkZWZpbmVkIGluIHBhdGNoLmJiY2xhc3MgLSB0aGlzIHdvcmtzIHNpbmNlIHRoYXQgY2xhc3MKKyAgICAjIGlzIGluaGVyaXRlZCBnbG9iYWxseQorICAgIHBhdGNoZXMgPSBiYi51dGlscy5leGVjX2ZsYXRfcHl0aG9uX2Z1bmMoJ3NyY19wYXRjaGVzJywgZCkKKyAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKKyAgICAgICAgXywgXywgbG9jYWwsIF8sIF8sIHBhcm0gPSBiYi5mZXRjaC5kZWNvZGV1cmwocGF0Y2gpCisgICAgICAgIHBhdGNoZmlsZXMuYXBwZW5kKGxvY2FsKQorICAgIHJldHVybiBwYXRjaGZpbGVzCisKKworZGVmIGdldF9yZWNpcGVfcGF0Y2hlZF9maWxlcyhkKToKKyAgICAiIiIKKyAgICBHZXQgdGhlIGxpc3Qgb2YgcGF0Y2hlcyBmb3IgYSByZWNpcGUgYWxvbmcgd2l0aCB0aGUgZmlsZXMgZWFjaCBwYXRjaCBtb2RpZmllcy4KKyAgICBQYXJhbXM6CisgICAgICAgIGQ6IHRoZSBkYXRhc3RvcmUgZm9yIHRoZSByZWNpcGUKKyAgICBSZXR1cm5zOgorICAgICAgICBhIGRpY3QgbWFwcGluZyBwYXRjaCBmaWxlIHBhdGggdG8gYSBsaXN0IG9mIHR1cGxlcyBvZiBjaGFuZ2VkIGZpbGVzIGFuZAorICAgICAgICBjaGFuZ2UgbW9kZSAoJ0EnIGZvciBhZGQsICdEJyBmb3IgZGVsZXRlIG9yICdNJyBmb3IgbW9kaWZ5KQorICAgICIiIgorICAgIGltcG9ydCBvZS5wYXRjaAorICAgICMgRXhlY3V0ZSBzcmNfcGF0Y2hlcygpIGRlZmluZWQgaW4gcGF0Y2guYmJjbGFzcyAtIHRoaXMgd29ya3Mgc2luY2UgdGhhdCBjbGFzcworICAgICMgaXMgaW5oZXJpdGVkIGdsb2JhbGx5CisgICAgcGF0Y2hlcyA9IGJiLnV0aWxzLmV4ZWNfZmxhdF9weXRob25fZnVuYygnc3JjX3BhdGNoZXMnLCBkKQorICAgIHBhdGNoZWRmaWxlcyA9IHt9CisgICAgZm9yIHBhdGNoIGluIHBhdGNoZXM6CisgICAgICAgIF8sIF8sIHBhdGNoZmlsZSwgXywgXywgcGFybSA9IGJiLmZldGNoLmRlY29kZXVybChwYXRjaCkKKyAgICAgICAgc3RyaXBsZXZlbCA9IGludChwYXJtWydzdHJpcGxldmVsJ10pCisgICAgICAgIHBhdGNoZWRmaWxlc1twYXRjaGZpbGVdID0gb2UucGF0Y2guUGF0Y2hTZXQuZ2V0UGF0Y2hlZEZpbGVzKHBhdGNoZmlsZSwgc3RyaXBsZXZlbCwgb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdTJywgVHJ1ZSksIHBhcm0uZ2V0KCdwYXRjaGRpcicsICcnKSkpCisgICAgcmV0dXJuIHBhdGNoZWRmaWxlcworCisKK2RlZiB2YWxpZGF0ZV9wbihwbik6CisgICAgIiIiUGVyZm9ybSB2YWxpZGF0aW9uIG9uIGEgcmVjaXBlIG5hbWUgKFBOKSBmb3IgYSBuZXcgcmVjaXBlLiIiIgorICAgIHJlc2VydmVkX25hbWVzID0gWydmb3JjZXZhcmlhYmxlJywgJ2FwcGVuZCcsICdwcmVwZW5kJywgJ3JlbW92ZSddCisgICAgaWYgbm90IHJlLm1hdGNoKCdbMC05YS16LS5dKycsIHBuKToKKyAgICAgICAgcmV0dXJuICdSZWNpcGUgbmFtZSAiJXMiIGlzIGludmFsaWQ6IG9ubHkgY2hhcmFjdGVycyAwLTksIGEteiwgLSBhbmQgLiBhcmUgYWxsb3dlZCcgJSBwbgorICAgIGVsaWYgcG4gaW4gcmVzZXJ2ZWRfbmFtZXM6CisgICAgICAgIHJldHVybiAnUmVjaXBlIG5hbWUgIiVzIiBpcyBpbnZhbGlkOiBpcyBhIHJlc2VydmVkIGtleXdvcmQnICUgcG4KKyAgICBlbGlmIHBuLnN0YXJ0c3dpdGgoJ3BuLScpOgorICAgICAgICByZXR1cm4gJ1JlY2lwZSBuYW1lICIlcyIgaXMgaW52YWxpZDogbmFtZXMgc3RhcnRpbmcgd2l0aCAicG4tIiBhcmUgcmVzZXJ2ZWQnICUgcG4KKyAgICByZXR1cm4gJycKKworCitkZWYgZ2V0X2JiYXBwZW5kX3BhdGgoZCwgZGVzdGxheWVyZGlyLCB3aWxkY2FyZHZlcj1GYWxzZSk6CisgICAgIiIiRGV0ZXJtaW5lIGhvdyBhIGJiYXBwZW5kIGZvciBhIHJlY2lwZSBzaG91bGQgYmUgbmFtZWQgYW5kIGxvY2F0ZWQgd2l0aGluIGFub3RoZXIgbGF5ZXIiIiIKKworICAgIGltcG9ydCBiYi5jb29rZXJkYXRhCisKKyAgICBkZXN0bGF5ZXJkaXIgPSBvcy5wYXRoLmFic3BhdGgoZGVzdGxheWVyZGlyKQorICAgIHJlY2lwZWZpbGUgPSBkLmdldFZhcignRklMRScsIFRydWUpCisgICAgcmVjaXBlZm4gPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUocmVjaXBlZmlsZSkpWzBdCisgICAgaWYgd2lsZGNhcmR2ZXIgYW5kICdfJyBpbiByZWNpcGVmbjoKKyAgICAgICAgcmVjaXBlZm4gPSByZWNpcGVmbi5zcGxpdCgnXycsIDEpWzBdICsgJ18lJworICAgIGFwcGVuZGZuID0gcmVjaXBlZm4gKyAnLmJiYXBwZW5kJworCisgICAgIyBQYXJzZSB0aGUgc3BlY2lmaWVkIGxheWVyJ3MgbGF5ZXIuY29uZiBmaWxlIGRpcmVjdGx5LCBpbiBjYXNlIHRoZSBsYXllciBpc24ndCBpbiBiYmxheWVycy5jb25mCisgICAgY29uZmRhdGEgPSBkLmNyZWF0ZUNvcHkoKQorICAgIGNvbmZkYXRhLnNldFZhcignQkJGSUxFUycsICcnKQorICAgIGNvbmZkYXRhLnNldFZhcignTEFZRVJESVInLCBkZXN0bGF5ZXJkaXIpCisgICAgZGVzdGxheWVyY29uZiA9IG9zLnBhdGguam9pbihkZXN0bGF5ZXJkaXIsICJjb25mIiwgImxheWVyLmNvbmYiKQorICAgIGNvbmZkYXRhID0gYmIuY29va2VyZGF0YS5wYXJzZV9jb25maWdfZmlsZShkZXN0bGF5ZXJjb25mLCBjb25mZGF0YSkKKworICAgIG9yaWdsYXllcmRpciA9IGZpbmRfbGF5ZXJkaXIocmVjaXBlZmlsZSkKKyAgICBpZiBub3Qgb3JpZ2xheWVyZGlyOgorICAgICAgICByZXR1cm4gKE5vbmUsIEZhbHNlKQorICAgICMgTm93IGpvaW4gdGhpcyB0byB0aGUgcGF0aCB3aGVyZSB0aGUgYmJhcHBlbmQgaXMgZ29pbmcgYW5kIGNoZWNrIGlmIGl0IGlzIGNvdmVyZWQgYnkgQkJGSUxFUworICAgIGFwcGVuZHBhdGggPSBvcy5wYXRoLmpvaW4oZGVzdGxheWVyZGlyLCBvcy5wYXRoLnJlbHBhdGgob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCBvcmlnbGF5ZXJkaXIpLCBhcHBlbmRmbikKKyAgICBjbG9zZXBhdGggPSAnJworICAgIHBhdGhvayA9IFRydWUKKyAgICBmb3IgYmJmaWxlc3BlYyBpbiBjb25mZGF0YS5nZXRWYXIoJ0JCRklMRVMnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2hjYXNlKGFwcGVuZHBhdGgsIGJiZmlsZXNwZWMpOgorICAgICAgICAgICAgIyBPdXIgYXBwZW5kIHBhdGggd29ya3MsIHdlJ3JlIGRvbmUKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsaWYgYmJmaWxlc3BlYy5zdGFydHN3aXRoKGRlc3RsYXllcmRpcikgYW5kIGZubWF0Y2guZm5tYXRjaGNhc2UoJ3Rlc3QuYmJhcHBlbmQnLCBvcy5wYXRoLmJhc2VuYW1lKGJiZmlsZXNwZWMpKToKKyAgICAgICAgICAgICMgVHJ5IHRvIGZpbmQgdGhlIGxvbmdlc3QgbWF0Y2hpbmcgcGF0aAorICAgICAgICAgICAgaWYgbGVuKGJiZmlsZXNwZWMpID4gbGVuKGNsb3NlcGF0aCk6CisgICAgICAgICAgICAgICAgY2xvc2VwYXRoID0gYmJmaWxlc3BlYworICAgIGVsc2U6CisgICAgICAgICMgVW5mb3J0dW5hdGVseSB0aGUgYmJhcHBlbmQgbGF5ZXIgYW5kIHRoZSBvcmlnaW5hbCByZWNpcGUncyBsYXllciBkb24ndCBoYXZlIHRoZSBzYW1lIHN0cnVjdHVyZQorICAgICAgICBpZiBjbG9zZXBhdGg6CisgICAgICAgICAgICAjIGJiYXBwZW5kIGxheWVyJ3MgbGF5ZXIuY29uZiBhdCBsZWFzdCBoYXMgYSBzcGVjIHRoYXQgcGlja3MgdXAgLmJiYXBwZW5kIGZpbGVzCisgICAgICAgICAgICAjIE5vdyB3ZSBqdXN0IG5lZWQgdG8gc3Vic3RpdHV0ZSBvdXQgYW55IHdpbGRjYXJkcworICAgICAgICAgICAgYXBwZW5kc3ViZGlyID0gb3MucGF0aC5yZWxwYXRoKG9zLnBhdGguZGlybmFtZShjbG9zZXBhdGgpLCBkZXN0bGF5ZXJkaXIpCisgICAgICAgICAgICBpZiAncmVjaXBlcy0qJyBpbiBhcHBlbmRzdWJkaXI6CisgICAgICAgICAgICAgICAgIyBUcnkgdG8gY29weSB0aGlzIHBhcnQgZnJvbSB0aGUgb3JpZ2luYWwgcmVjaXBlIHBhdGgKKyAgICAgICAgICAgICAgICByZXMgPSByZS5zZWFyY2goJy9yZWNpcGVzLVteL10rLycsIHJlY2lwZWZpbGUpCisgICAgICAgICAgICAgICAgaWYgcmVzOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmRzdWJkaXIgPSBhcHBlbmRzdWJkaXIucmVwbGFjZSgnL3JlY2lwZXMtKi8nLCByZXMuZ3JvdXAoMCkpCisgICAgICAgICAgICAjIFRoaXMgaXMgY3J1ZGUsIGJ1dCB3ZSBoYXZlIHRvIGRvIHNvbWV0aGluZworICAgICAgICAgICAgYXBwZW5kc3ViZGlyID0gYXBwZW5kc3ViZGlyLnJlcGxhY2UoJyonLCByZWNpcGVmbi5zcGxpdCgnXycpWzBdKQorICAgICAgICAgICAgYXBwZW5kc3ViZGlyID0gYXBwZW5kc3ViZGlyLnJlcGxhY2UoJz8nLCAnYScpCisgICAgICAgICAgICBhcHBlbmRwYXRoID0gb3MucGF0aC5qb2luKGRlc3RsYXllcmRpciwgYXBwZW5kc3ViZGlyLCBhcHBlbmRmbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhdGhvayA9IEZhbHNlCisgICAgcmV0dXJuIChhcHBlbmRwYXRoLCBwYXRob2spCisKKworZGVmIGJiYXBwZW5kX3JlY2lwZShyZCwgZGVzdGxheWVyZGlyLCBzcmNmaWxlcywgaW5zdGFsbD1Ob25lLCB3aWxkY2FyZHZlcj1GYWxzZSwgbWFjaGluZT1Ob25lLCBleHRyYWxpbmVzPU5vbmUsIHJlbW92ZXZhbHVlcz1Ob25lKToKKyAgICAiIiIKKyAgICBXcml0ZXMgYSBiYmFwcGVuZCBmaWxlIGZvciBhIHJlY2lwZQorICAgIFBhcmFtZXRlcnM6CisgICAgICAgIHJkOiBkYXRhIGRpY3Rpb25hcnkgZm9yIHRoZSByZWNpcGUKKyAgICAgICAgZGVzdGxheWVyZGlyOiBiYXNlIGRpcmVjdG9yeSBvZiB0aGUgbGF5ZXIgdG8gcGxhY2UgdGhlIGJiYXBwZW5kIGluCisgICAgICAgICAgICAoc3ViZGlyZWN0b3J5IHBhdGggZnJvbSB0aGVyZSB3aWxsIGJlIGRldGVybWluZWQgYXV0b21hdGljYWxseSkKKyAgICAgICAgc3JjZmlsZXM6IGRpY3Qgb2Ygc291cmNlIGZpbGVzIHRvIGFkZCB0byBTUkNfVVJJLCB3aGVyZSB0aGUgdmFsdWUKKyAgICAgICAgICAgIGlzIHRoZSBmdWxsIHBhdGggdG8gdGhlIGZpbGUgdG8gYmUgYWRkZWQsIGFuZCB0aGUgdmFsdWUgaXMgdGhlCisgICAgICAgICAgICBvcmlnaW5hbCBmaWxlbmFtZSBhcyBpdCB3b3VsZCBhcHBlYXIgaW4gU1JDX1VSSSBvciBOb25lIGlmIGl0CisgICAgICAgICAgICBpc24ndCBhbHJlYWR5IHByZXNlbnQuIFlvdSBtYXkgcGFzcyBOb25lIGZvciB0aGlzIHBhcmFtZXRlciBpZgorICAgICAgICAgICAgeW91IHNpbXBseSB3YW50IHRvIHNwZWNpZnkgeW91ciBvd24gY29udGVudCB2aWEgdGhlIGV4dHJhbGluZXMKKyAgICAgICAgICAgIHBhcmFtZXRlci4KKyAgICAgICAgaW5zdGFsbDogZGljdCBtYXBwaW5nIGVudHJpZXMgaW4gc3JjZmlsZXMgdG8gYSB0dXBsZSBvZiB0d28gZWxlbWVudHM6CisgICAgICAgICAgICBpbnN0YWxsIHBhdGggKCp3aXRob3V0KiAke0R9IHByZWZpeCkgYW5kIHBlcm1pc3Npb24gdmFsdWUgKGFzIGEKKyAgICAgICAgICAgIHN0cmluZywgZS5nLiAnMDY0NCcpLgorICAgICAgICB3aWxkY2FyZHZlcjogVHJ1ZSB0byB1c2UgYSAlIHdpbGRjYXJkIGluIHRoZSBiYmFwcGVuZCBmaWxlbmFtZSwgb3IKKyAgICAgICAgICAgIEZhbHNlIHRvIG1ha2UgdGhlIGJiYXBwZW5kIHNwZWNpZmljIHRvIHRoZSByZWNpcGUgdmVyc2lvbi4KKyAgICAgICAgbWFjaGluZToKKyAgICAgICAgICAgIElmIHNwZWNpZmllZCwgbWFrZSB0aGUgY2hhbmdlcyBpbiB0aGUgYmJhcHBlbmQgc3BlY2lmaWMgdG8gdGhpcworICAgICAgICAgICAgbWFjaGluZS4gVGhpcyB3aWxsIGFsc28gY2F1c2UgUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKyAgICAgICAgICAgIHRvIGJlIGFkZGVkIHRvIHRoZSBiYmFwcGVuZC4KKyAgICAgICAgZXh0cmFsaW5lczoKKyAgICAgICAgICAgIEV4dHJhIGxpbmVzIHRvIGFkZCB0byB0aGUgYmJhcHBlbmQuIFRoaXMgbWF5IGJlIGEgZGljdCBvZiBuYW1lCisgICAgICAgICAgICB2YWx1ZSBwYWlycywgb3Igc2ltcGx5IGEgbGlzdCBvZiB0aGUgbGluZXMuCisgICAgICAgIHJlbW92ZXZhbHVlczoKKyAgICAgICAgICAgIFZhcmlhYmxlIHZhbHVlcyB0byByZW1vdmUgLSBhIGRpY3Qgb2YgbmFtZXMvdmFsdWVzLgorICAgICIiIgorCisgICAgaWYgbm90IHJlbW92ZXZhbHVlczoKKyAgICAgICAgcmVtb3ZldmFsdWVzID0ge30KKworICAgICMgRGV0ZXJtaW5lIGhvdyB0aGUgYmJhcHBlbmQgc2hvdWxkIGJlIG5hbWVkCisgICAgYXBwZW5kcGF0aCwgcGF0aG9rID0gZ2V0X2JiYXBwZW5kX3BhdGgocmQsIGRlc3RsYXllcmRpciwgd2lsZGNhcmR2ZXIpCisgICAgaWYgbm90IGFwcGVuZHBhdGg6CisgICAgICAgIGJiLmVycm9yKCdVbmFibGUgdG8gZGV0ZXJtaW5lIGxheWVyIGRpcmVjdG9yeSBjb250YWluaW5nICVzJyAlIHJlY2lwZWZpbGUpCisgICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSkKKyAgICBpZiBub3QgcGF0aG9rOgorICAgICAgICBiYi53YXJuKCdVbmFibGUgdG8gZGV0ZXJtaW5lIGNvcnJlY3Qgc3ViZGlyZWN0b3J5IHBhdGggZm9yIGJiYXBwZW5kIGZpbGUgLSBjaGVjayB0aGF0IHdoYXQgJXMgYWRkcyB0byBCQkZJTEVTIGFsc28gbWF0Y2hlcyAuYmJhcHBlbmQgZmlsZXMuIFVzaW5nICVzIGZvciBub3csIGJ1dCB1bnRpbCB5b3UgZml4IHRoaXMgdGhlIGJiYXBwZW5kIHdpbGwgbm90IGJlIGFwcGxpZWQuJyAlIChvcy5wYXRoLmpvaW4oZGVzdGxheWVyZGlyLCAnY29uZicsICdsYXllci5jb25mJyksIG9zLnBhdGguZGlybmFtZShhcHBlbmRwYXRoKSkpCisKKyAgICBhcHBlbmRkaXIgPSBvcy5wYXRoLmRpcm5hbWUoYXBwZW5kcGF0aCkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoYXBwZW5kZGlyKQorCisgICAgIyBGSVhNRSBjaGVjayBpZiB0aGUgYmJhcHBlbmQgZG9lc24ndCBnZXQgb3ZlcnJpZGRlbiBieSBhIGhpZ2hlciBwcmlvcml0eSBsYXllcj8KKworICAgIGxheWVyZGlycyA9IFtvcy5wYXRoLmFic3BhdGgobGF5ZXJkaXIpIGZvciBsYXllcmRpciBpbiByZC5nZXRWYXIoJ0JCTEFZRVJTJywgVHJ1ZSkuc3BsaXQoKV0KKyAgICBpZiBub3Qgb3MucGF0aC5hYnNwYXRoKGRlc3RsYXllcmRpcikgaW4gbGF5ZXJkaXJzOgorICAgICAgICBiYi53YXJuKCdTcGVjaWZpZWQgbGF5ZXIgaXMgbm90IGN1cnJlbnRseSBlbmFibGVkIGluIGJibGF5ZXJzLmNvbmYsIHlvdSB3aWxsIG5lZWQgdG8gYWRkIGl0IGJlZm9yZSB0aGlzIGJiYXBwZW5kIHdpbGwgYmUgYWN0aXZlJykKKworICAgIGJiYXBwZW5kbGluZXMgPSBbXQorICAgIGlmIGV4dHJhbGluZXM6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXh0cmFsaW5lcywgZGljdCk6CisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gZXh0cmFsaW5lcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBiYmFwcGVuZGxpbmVzLmFwcGVuZCgobmFtZSwgJz0nLCB2YWx1ZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIERvIG91ciBiZXN0IHRvIHNwbGl0IGl0CisgICAgICAgICAgICBmb3IgbGluZSBpbiBleHRyYWxpbmVzOgorICAgICAgICAgICAgICAgIGlmIGxpbmVbLTFdID09ICdcbic6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KKyAgICAgICAgICAgICAgICBzcGxpdGxpbmUgPSBsaW5lLnNwbGl0KE5vbmUsIDIpCisgICAgICAgICAgICAgICAgaWYgbGVuKHNwbGl0bGluZSkgPT0gMzoKKyAgICAgICAgICAgICAgICAgICAgYmJhcHBlbmRsaW5lcy5hcHBlbmQodHVwbGUoc3BsaXRsaW5lKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0ludmFsaWQgZXh0cmFsaW5lcyB2YWx1ZSBwYXNzZWQnKQorCisgICAgZGVmIHBvcGxpbmUodmFybmFtZSk6CisgICAgICAgIGZvciBpIGluIHhyYW5nZSgwLCBsZW4oYmJhcHBlbmRsaW5lcykpOgorICAgICAgICAgICAgaWYgYmJhcHBlbmRsaW5lc1tpXVswXSA9PSB2YXJuYW1lOgorICAgICAgICAgICAgICAgIGxpbmUgPSBiYmFwcGVuZGxpbmVzLnBvcChpKQorICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgYXBwZW5kbGluZSh2YXJuYW1lLCBvcCwgdmFsdWUpOgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMCwgbGVuKGJiYXBwZW5kbGluZXMpKToKKyAgICAgICAgICAgIGl0ZW0gPSBiYmFwcGVuZGxpbmVzW2ldCisgICAgICAgICAgICBpZiBpdGVtWzBdID09IHZhcm5hbWU6CisgICAgICAgICAgICAgICAgYmJhcHBlbmRsaW5lc1tpXSA9IChpdGVtWzBdLCBpdGVtWzFdLCBpdGVtWzJdICsgJyAnICsgdmFsdWUpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiYXBwZW5kbGluZXMuYXBwZW5kKCh2YXJuYW1lLCBvcCwgdmFsdWUpKQorCisgICAgZGVzdHN1YmRpciA9IHJkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGlmIHNyY2ZpbGVzOgorICAgICAgICBiYmFwcGVuZGxpbmVzLmFwcGVuZCgoJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kJywgJzo9JywgJyR7VEhJU0RJUn0vJHtQTn06JykpCisKKyAgICBhcHBlbmRvdmVycmlkZSA9ICcnCisgICAgaWYgbWFjaGluZToKKyAgICAgICAgYmJhcHBlbmRsaW5lcy5hcHBlbmQoKCdQQUNLQUdFX0FSQ0gnLCAnPScsICcke01BQ0hJTkVfQVJDSH0nKSkKKyAgICAgICAgYXBwZW5kb3ZlcnJpZGUgPSAnXyVzJyAlIG1hY2hpbmUKKyAgICBjb3B5ZmlsZXMgPSB7fQorICAgIGlmIHNyY2ZpbGVzOgorICAgICAgICBpbnN0ZnVuY2xpbmVzID0gW10KKyAgICAgICAgZm9yIG5ld2ZpbGUsIG9yaWdzcmNmaWxlIGluIHNyY2ZpbGVzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgc3JjZmlsZSA9IG9yaWdzcmNmaWxlCisgICAgICAgICAgICBzcmN1cmllbnRyeSA9IE5vbmUKKyAgICAgICAgICAgIGlmIG5vdCBzcmNmaWxlOgorICAgICAgICAgICAgICAgIHNyY2ZpbGUgPSBvcy5wYXRoLmJhc2VuYW1lKG5ld2ZpbGUpCisgICAgICAgICAgICAgICAgc3JjdXJpZW50cnkgPSAnZmlsZTovLyVzJyAlIHNyY2ZpbGUKKyAgICAgICAgICAgICAgICAjIERvdWJsZS1jaGVjayBpdCdzIG5vdCB0aGVyZSBhbHJlYWR5CisgICAgICAgICAgICAgICAgIyBGSVhNRSBkbyB3ZSBjYXJlIGlmIHRoZSBlbnRyeSBpcyBhZGRlZCBieSBhbm90aGVyIGJiYXBwZW5kIHRoYXQgbWlnaHQgZ28gYXdheT8KKyAgICAgICAgICAgICAgICBpZiBub3Qgc3JjdXJpZW50cnkgaW4gcmQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbWFjaGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZGxpbmUoJ1NSQ19VUklfYXBwZW5kJXMnICUgYXBwZW5kb3ZlcnJpZGUsICc9JywgJyAnICsgc3JjdXJpZW50cnkpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRsaW5lKCdTUkNfVVJJJywgJys9Jywgc3JjdXJpZW50cnkpCisgICAgICAgICAgICBjb3B5ZmlsZXNbbmV3ZmlsZV0gPSBzcmNmaWxlCisgICAgICAgICAgICBpZiBpbnN0YWxsOgorICAgICAgICAgICAgICAgIGluc3RpdGVtID0gaW5zdGFsbC5wb3AobmV3ZmlsZSwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBpbnN0aXRlbToKKyAgICAgICAgICAgICAgICAgICAgKGRlc3RwYXRoLCBwZXJtcykgPSBpbnN0aXRlbQorICAgICAgICAgICAgICAgICAgICBpbnN0ZGVzdHBhdGggPSByZXBsYWNlX2Rpcl92YXJzKGRlc3RwYXRoLCByZCkKKyAgICAgICAgICAgICAgICAgICAgaW5zdGRpcmxpbmUgPSAnaW5zdGFsbCAtZCAke0R9JXMnICUgb3MucGF0aC5kaXJuYW1lKGluc3RkZXN0cGF0aCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGluc3RkaXJsaW5lIGluIGluc3RmdW5jbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZnVuY2xpbmVzLmFwcGVuZChpbnN0ZGlybGluZSkKKyAgICAgICAgICAgICAgICAgICAgaW5zdGZ1bmNsaW5lcy5hcHBlbmQoJ2luc3RhbGwgLW0gJXMgJHtXT1JLRElSfS8lcyAke0R9JXMnICUgKHBlcm1zLCBvcy5wYXRoLmJhc2VuYW1lKHNyY2ZpbGUpLCBpbnN0ZGVzdHBhdGgpKQorICAgICAgICBpZiBpbnN0ZnVuY2xpbmVzOgorICAgICAgICAgICAgYmJhcHBlbmRsaW5lcy5hcHBlbmQoKCdkb19pbnN0YWxsX2FwcGVuZCVzKCknICUgYXBwZW5kb3ZlcnJpZGUsICcnLCBpbnN0ZnVuY2xpbmVzKSkKKworICAgIGJiLm5vdGUoJ1dyaXRpbmcgYXBwZW5kIGZpbGUgJXMnICUgYXBwZW5kcGF0aCkKKworICAgIGlmIG9zLnBhdGguZXhpc3RzKGFwcGVuZHBhdGgpOgorICAgICAgICAjIFdvcmsgYXJvdW5kIGxhY2sgb2Ygbm9ubG9jYWwgaW4gcHl0aG9uIDIKKyAgICAgICAgZXh0dmFycyA9IHsnZGVzdHN1YmRpcic6IGRlc3RzdWJkaXJ9CisKKyAgICAgICAgZGVmIGFwcGVuZGZpbGVfdmFyZnVuYyh2YXJuYW1lLCBvcmlndmFsdWUsIG9wLCBuZXdsaW5lcyk6CisgICAgICAgICAgICBpZiB2YXJuYW1lID09ICdGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCc6CisgICAgICAgICAgICAgICAgaWYgb3JpZ3ZhbHVlLnN0YXJ0c3dpdGgoJyR7VEhJU0RJUn0vJyk6CisgICAgICAgICAgICAgICAgICAgIHBvcGxpbmUoJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kJykKKyAgICAgICAgICAgICAgICAgICAgZXh0dmFyc1snZGVzdHN1YmRpciddID0gcmQuZXhwYW5kKG9yaWd2YWx1ZS5zcGxpdCgnJHtUSElTRElSfS8nLCAxKVsxXS5yc3RyaXAoJzonKSkKKyAgICAgICAgICAgIGVsaWYgdmFybmFtZSA9PSAnUEFDS0FHRV9BUkNIJzoKKyAgICAgICAgICAgICAgICBpZiBtYWNoaW5lOgorICAgICAgICAgICAgICAgICAgICBwb3BsaW5lKCdQQUNLQUdFX0FSQ0gnKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1hY2hpbmUsIE5vbmUsIDQsIEZhbHNlKQorICAgICAgICAgICAgZWxpZiB2YXJuYW1lLnN0YXJ0c3dpdGgoJ2RvX2luc3RhbGxfYXBwZW5kJyk6CisgICAgICAgICAgICAgICAgZnVuYyA9IHBvcGxpbmUodmFybmFtZSkKKyAgICAgICAgICAgICAgICBpZiBmdW5jOgorICAgICAgICAgICAgICAgICAgICBpbnN0ZnVuY2xpbmVzID0gW2xpbmUuc3RyaXAoKSBmb3IgbGluZSBpbiBvcmlndmFsdWUuc3RyaXAoJ1xuJykuc3BsaXRsaW5lcygpXQorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmdW5jWzJdOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmUgaW4gaW5zdGZ1bmNsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZnVuY2xpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGluc3RmdW5jbGluZXMsIE5vbmUsIDQsIEZhbHNlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzcGxpdHZhbCA9IG9yaWd2YWx1ZS5zcGxpdCgpCisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgcmVtb3ZldmFyID0gdmFybmFtZQorICAgICAgICAgICAgICAgIGlmIHZhcm5hbWUgaW4gWydTUkNfVVJJJywgJ1NSQ19VUklfYXBwZW5kJXMnICUgYXBwZW5kb3ZlcnJpZGVdOgorICAgICAgICAgICAgICAgICAgICByZW1vdmV2YXIgPSAnU1JDX1VSSScKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IHBvcGxpbmUodmFybmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmVbMl0gbm90IGluIHNwbGl0dmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dmFsLmFwcGVuZChsaW5lWzJdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IHBvcGxpbmUodmFybmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dmFsID0gW2xpbmVbMl1dCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gVHJ1ZQorCisgICAgICAgICAgICAgICAgaWYgcmVtb3ZldmFyIGluIHJlbW92ZXZhbHVlczoKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlID0gcmVtb3ZldmFsdWVzW3JlbW92ZXZhcl0KKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShyZW1vdmUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVtb3ZlIGluIHNwbGl0dmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dmFsLnJlbW92ZShyZW1vdmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciByZW1vdmVpdGVtIGluIHJlbW92ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZW1vdmVpdGVtIGluIHNwbGl0dmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdHZhbC5yZW1vdmUocmVtb3ZlaXRlbSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IFRydWUKKworICAgICAgICAgICAgICAgIGlmIGNoYW5nZWQ6CisgICAgICAgICAgICAgICAgICAgIG5ld3ZhbHVlID0gc3BsaXR2YWwKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKG5ld3ZhbHVlKSA9PSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBFbnN1cmUgaXQncyB3cml0dGVuIG91dCBhcyBvbmUgbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ19hcHBlbmQnIGluIHZhcm5hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3dmFsdWUgPSAnICcgKyBuZXd2YWx1ZVswXQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXd2YWx1ZSA9IG5ld3ZhbHVlWzBdCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuZXd2YWx1ZSBhbmQgKG9wIGluIFsnKz0nLCAnLj0nXSBvciAnX2FwcGVuZCcgaW4gdmFybmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZXJlJ3Mgbm8gcG9pbnQgYXBwZW5kaW5nIG5vdGhpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3ZhbHVlID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBpZiB2YXJuYW1lLmVuZHN3aXRoKCcoKScpOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gNAorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gLTEKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChuZXd2YWx1ZSwgTm9uZSwgaW5kZW50LCBUcnVlKQorICAgICAgICAgICAgcmV0dXJuIChvcmlndmFsdWUsIE5vbmUsIDQsIEZhbHNlKQorCisgICAgICAgIHZhcm5hbWVzID0gW2l0ZW1bMF0gZm9yIGl0ZW0gaW4gYmJhcHBlbmRsaW5lc10KKyAgICAgICAgaWYgcmVtb3ZldmFsdWVzOgorICAgICAgICAgICAgdmFybmFtZXMuZXh0ZW5kKHJlbW92ZXZhbHVlcy5rZXlzKCkpCisKKyAgICAgICAgd2l0aCBvcGVuKGFwcGVuZHBhdGgsICdyJykgYXMgZjoKKyAgICAgICAgICAgICh1cGRhdGVkLCBuZXdsaW5lcykgPSBiYi51dGlscy5lZGl0X21ldGFkYXRhKGYsIHZhcm5hbWVzLCBhcHBlbmRmaWxlX3ZhcmZ1bmMpCisKKyAgICAgICAgZGVzdHN1YmRpciA9IGV4dHZhcnNbJ2Rlc3RzdWJkaXInXQorICAgIGVsc2U6CisgICAgICAgIHVwZGF0ZWQgPSBGYWxzZQorICAgICAgICBuZXdsaW5lcyA9IFtdCisKKyAgICBpZiBiYmFwcGVuZGxpbmVzOgorICAgICAgICBmb3IgbGluZSBpbiBiYmFwcGVuZGxpbmVzOgorICAgICAgICAgICAgaWYgbGluZVswXS5lbmRzd2l0aCgnKCknKToKKyAgICAgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQoJyVzIHtcbiAgICAlc1xufVxuJyAlIChsaW5lWzBdLCAnXG4gICAgJy5qb2luKGxpbmVbMl0pKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCclcyAlcyAiJXMiXG5cbicgJSBsaW5lKQorICAgICAgICB1cGRhdGVkID0gVHJ1ZQorCisgICAgaWYgdXBkYXRlZDoKKyAgICAgICAgd2l0aCBvcGVuKGFwcGVuZHBhdGgsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGVsaW5lcyhuZXdsaW5lcykKKworICAgIGlmIGNvcHlmaWxlczoKKyAgICAgICAgaWYgbWFjaGluZToKKyAgICAgICAgICAgIGRlc3RzdWJkaXIgPSBvcy5wYXRoLmpvaW4oZGVzdHN1YmRpciwgbWFjaGluZSkKKyAgICAgICAgZm9yIG5ld2ZpbGUsIHNyY2ZpbGUgaW4gY29weWZpbGVzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZmlsZWRlc3QgPSBvcy5wYXRoLmpvaW4oYXBwZW5kZGlyLCBkZXN0c3ViZGlyLCBvcy5wYXRoLmJhc2VuYW1lKHNyY2ZpbGUpKQorICAgICAgICAgICAgaWYgb3MucGF0aC5hYnNwYXRoKG5ld2ZpbGUpICE9IG9zLnBhdGguYWJzcGF0aChmaWxlZGVzdCk6CisgICAgICAgICAgICAgICAgYmIubm90ZSgnQ29weWluZyAlcyB0byAlcycgJSAobmV3ZmlsZSwgZmlsZWRlc3QpKQorICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZmlsZWRlc3QpKQorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShuZXdmaWxlLCBmaWxlZGVzdCkKKworICAgIHJldHVybiAoYXBwZW5kcGF0aCwgb3MucGF0aC5qb2luKGFwcGVuZGRpciwgZGVzdHN1YmRpcikpCisKKworZGVmIGZpbmRfbGF5ZXJkaXIoZm4pOgorICAgICIiIiBGaWd1cmUgb3V0IHJlbGF0aXZlIHBhdGggdG8gYmFzZSBvZiBsYXllciBmb3IgYSBmaWxlIChlLmcuIGEgcmVjaXBlKSIiIgorICAgIHB0aCA9IG9zLnBhdGguZGlybmFtZShmbikKKyAgICBsYXllcmRpciA9ICcnCisgICAgd2hpbGUgcHRoOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocHRoLCAnY29uZicsICdsYXllci5jb25mJykpOgorICAgICAgICAgICAgbGF5ZXJkaXIgPSBwdGgKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHB0aCA9IG9zLnBhdGguZGlybmFtZShwdGgpCisgICAgcmV0dXJuIGxheWVyZGlyCisKKworZGVmIHJlcGxhY2VfZGlyX3ZhcnMocGF0aCwgZCk6CisgICAgIiIiUmVwbGFjZSBjb21tb24gZGlyZWN0b3J5IHBhdGhzIHdpdGggYXBwcm9wcmlhdGUgdmFyaWFibGUgcmVmZXJlbmNlcyAoZS5nLiAvZXRjIGJlY29tZXMgJHtzeXNjb25mZGlyfSkiIiIKKyAgICBkaXJ2YXJzID0ge30KKyAgICAjIFNvcnQgYnkgbGVuZ3RoIHNvIHdlIGdldCB0aGUgdmFyaWFibGVzIHdlJ3JlIGludGVyZXN0ZWQgaW4gZmlyc3QKKyAgICBmb3IgdmFyIGluIHNvcnRlZChkLmtleXMoKSwga2V5PWxlbik6CisgICAgICAgIGlmIHZhci5lbmRzd2l0aCgnZGlyJykgYW5kIHZhci5sb3dlcigpID09IHZhcjoKKyAgICAgICAgICAgIHZhbHVlID0gZC5nZXRWYXIodmFyLCBUcnVlKQorICAgICAgICAgICAgaWYgdmFsdWUuc3RhcnRzd2l0aCgnLycpIGFuZCBub3QgJ1xuJyBpbiB2YWx1ZSBhbmQgdmFsdWUgbm90IGluIGRpcnZhcnM6CisgICAgICAgICAgICAgICAgZGlydmFyc1t2YWx1ZV0gPSB2YXIKKyAgICBmb3IgZGlycGF0aCBpbiBzb3J0ZWQoZGlydmFycy5rZXlzKCksIHJldmVyc2U9VHJ1ZSk6CisgICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoZGlycGF0aCwgJyR7JXN9JyAlIGRpcnZhcnNbZGlycGF0aF0pCisgICAgcmV0dXJuIHBhdGgKKworZGVmIGdldF9yZWNpcGVfcHZfd2l0aG91dF9zcmNwdihwdiwgdXJpX3R5cGUpOgorICAgICIiIgorICAgIEdldCBQViB3aXRob3V0IFNSQ1BWIGNvbW1vbiBpbiBTQ00ncyBmb3Igbm93IG9ubHkKKyAgICBzdXBwb3J0IGdpdC4KKworICAgIFJldHVybnMgdHVwbGUgd2l0aCBwdiwgcHJlZml4IGFuZCBzdWZmaXguCisgICAgIiIiCisgICAgcGZ4ID0gJycKKyAgICBzZnggPSAnJworCisgICAgaWYgdXJpX3R5cGUgPT0gJ2dpdCc6CisgICAgICAgIGdpdF9yZWdleCA9IHJlLmNvbXBpbGUoIig/UDxwZng+dj8pKD9QPHZlcj5bXlwrXSopKCg/UDxzZng+XCsoZ2l0KT9yPyhBVVRPSU5DXCspKSg/UDxyZXY+LiopKT8iKQorICAgICAgICBtID0gZ2l0X3JlZ2V4Lm1hdGNoKHB2KQorCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBwdiA9IG0uZ3JvdXAoJ3ZlcicpCisgICAgICAgICAgICBwZnggPSBtLmdyb3VwKCdwZngnKQorICAgICAgICAgICAgc2Z4ID0gbS5ncm91cCgnc2Z4JykKKyAgICBlbHNlOgorICAgICAgICByZWdleCA9IHJlLmNvbXBpbGUoIig/UDxwZng+KHZ8cik/KSg/UDx2ZXI+LiopIikKKyAgICAgICAgbSA9IHJlZ2V4Lm1hdGNoKHB2KQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgcHYgPSBtLmdyb3VwKCd2ZXInKQorICAgICAgICAgICAgcGZ4ID0gbS5ncm91cCgncGZ4JykKKworICAgIHJldHVybiAocHYsIHBmeCwgc2Z4KQorCitkZWYgZ2V0X3JlY2lwZV91cHN0cmVhbV92ZXJzaW9uKHJkKToKKyAgICAiIiIKKyAgICAgICAgR2V0IHVwc3RyZWFtIHZlcnNpb24gb2YgcmVjaXBlIHVzaW5nIGJiLmZldGNoMiBtZXRob2RzIHdpdGggc3VwcG9ydCBmb3IKKyAgICAgICAgaHR0cCwgaHR0cHMsIGZ0cCBhbmQgZ2l0LgorCisgICAgICAgIGJiLmZldGNoMiBleGNlcHRpb25zIGNhbiBiZSByYWlzZWQsCisgICAgICAgICAgICBGZXRjaEVycm9yIHdoZW4gZG9uJ3QgaGF2ZSBuZXR3b3JrIGFjY2VzcyBvciB1cHN0cmVhbSBzaXRlIGRvbid0IHJlc3BvbnNlLgorICAgICAgICAgICAgTm9NZXRob2RFcnJvciB3aGVuIHVyaSBsYXRlc3RfdmVyc2lvbnN0cmluZyBtZXRob2QgaXNuJ3QgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgUmV0dXJucyBhIGRpY3RvbmFyeSB3aXRoIHZlcnNpb24sIHR5cGUgYW5kIGRhdGV0aW1lLgorICAgICAgICBUeXBlIGNhbiBiZSBBIGZvciBBdXRvbWF0aWMsIE0gZm9yIE1hbnVhbCBhbmQgVSBmb3IgVW5rbm93bi4KKyAgICAiIiIKKyAgICBmcm9tIGJiLmZldGNoMiBpbXBvcnQgZGVjb2RldXJsCisgICAgZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKKworICAgIHJ1ID0ge30KKyAgICBydVsndmVyc2lvbiddID0gJycKKyAgICBydVsndHlwZSddID0gJ1UnCisgICAgcnVbJ2RhdGV0aW1lJ10gPSAnJworCisgICAgIyBYWFg6IElmIGRvbid0IGhhdmUgU1JDX1VSSSBtZWFucyB0aGF0IGRvbid0IGhhdmUgdXBzdHJlYW0gc291cmNlcyBzbworICAgICMgcmV0dXJucyAxLjAuCisgICAgc3JjX3VyaXMgPSByZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKQorICAgIGlmIG5vdCBzcmNfdXJpczoKKyAgICAgICAgcnVbJ3ZlcnNpb24nXSA9ICcxLjAnCisgICAgICAgIHJ1Wyd0eXBlJ10gPSAnTScKKyAgICAgICAgcnVbJ2RhdGV0aW1lJ10gPSBkYXRldGltZS5ub3coKQorICAgICAgICByZXR1cm4gcnUKKworICAgICMgWFhYOiB3ZSBzdXBwb3NlIHRoYXQgdGhlIGZpcnN0IGVudHJ5IHBvaW50cyB0byB0aGUgdXBzdHJlYW0gc291cmNlcworICAgIHNyY191cmkgPSBzcmNfdXJpcy5zcGxpdCgpWzBdCisgICAgdXJpX3R5cGUsIF8sIF8sIF8sIF8sIF8gPSAgZGVjb2RldXJsKHNyY191cmkpCisKKyAgICBwdiA9IHJkLmdldFZhcignUFYnLCBUcnVlKQorCisgICAgbWFudWFsX3Vwc3RyZWFtX3ZlcnNpb24gPSByZC5nZXRWYXIoIlJFQ0lQRV9VUFNUUkVBTV9WRVJTSU9OIiwgVHJ1ZSkKKyAgICBpZiBtYW51YWxfdXBzdHJlYW1fdmVyc2lvbjoKKyAgICAgICAgIyBtYW51YWwgdHJhY2tpbmcgb2YgdXBzdHJlYW0gdmVyc2lvbi4KKyAgICAgICAgcnVbJ3ZlcnNpb24nXSA9IG1hbnVhbF91cHN0cmVhbV92ZXJzaW9uCisgICAgICAgIHJ1Wyd0eXBlJ10gPSAnTScKKworICAgICAgICBtYW51YWxfdXBzdHJlYW1fZGF0ZSA9IHJkLmdldFZhcigiQ0hFQ0tfREFURSIsIFRydWUpCisgICAgICAgIGlmIG1hbnVhbF91cHN0cmVhbV9kYXRlOgorICAgICAgICAgICAgZGF0ZSA9IGRhdGV0aW1lLnN0cnB0aW1lKG1hbnVhbF91cHN0cmVhbV9kYXRlLCAiJWIgJWQsICVZIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRhdGUgPSBkYXRldGltZS5ub3coKQorICAgICAgICBydVsnZGF0ZXRpbWUnXSA9IGRhdGUKKworICAgIGVsaWYgdXJpX3R5cGUgPT0gImZpbGUiOgorICAgICAgICAjIGZpbGVzIGFyZSBhbHdheXMgdXAtdG8tZGF0ZQorICAgICAgICBydVsndmVyc2lvbiddID0gIHB2CisgICAgICAgIHJ1Wyd0eXBlJ10gPSAnQScKKyAgICAgICAgcnVbJ2RhdGV0aW1lJ10gPSBkYXRldGltZS5ub3coKQorICAgIGVsc2U6CisgICAgICAgIHVkID0gYmIuZmV0Y2gyLkZldGNoRGF0YShzcmNfdXJpLCByZCkKKyAgICAgICAgcHVwdmVyID0gdWQubWV0aG9kLmxhdGVzdF92ZXJzaW9uc3RyaW5nKHVkLCByZCkKKyAgICAgICAgKHVwdmVyc2lvbiwgcmV2aXNpb24pID0gcHVwdmVyCisKKyAgICAgICAgIyBmb3JtYXQgZ2l0IHZlcnNpb24gdmVyc2lvbitnaXRBVVRPSU5DK0hBU0gKKyAgICAgICAgaWYgdXJpX3R5cGUgPT0gJ2dpdCc6CisgICAgICAgICAgICAocHYsIHBmeCwgc2Z4KSA9IGdldF9yZWNpcGVfcHZfd2l0aG91dF9zcmNwdihwdiwgdXJpX3R5cGUpCisKKyAgICAgICAgICAgICMgaWYgY29udGFpbnMgcmV2aXNpb24gYnV0IG5vdCB1cHZlcnNpb24gdXNlIGN1cnJlbnQgcHYKKyAgICAgICAgICAgIGlmIHVwdmVyc2lvbiA9PSAnJyBhbmQgcmV2aXNpb246CisgICAgICAgICAgICAgICAgdXB2ZXJzaW9uID0gcHYKKworICAgICAgICAgICAgaWYgdXB2ZXJzaW9uOgorICAgICAgICAgICAgICAgIHRtcCA9IHVwdmVyc2lvbgorICAgICAgICAgICAgICAgIHVwdmVyc2lvbiA9ICcnCisKKyAgICAgICAgICAgICAgICBpZiBwZng6CisgICAgICAgICAgICAgICAgICAgIHVwdmVyc2lvbiA9IHBmeCArIHRtcAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHVwdmVyc2lvbiA9IHRtcAorCisgICAgICAgICAgICAgICAgaWYgc2Z4OgorICAgICAgICAgICAgICAgICAgICB1cHZlcnNpb24gPSB1cHZlcnNpb24gKyBzZnggKyByZXZpc2lvbls6MTBdCisKKyAgICAgICAgaWYgdXB2ZXJzaW9uOgorICAgICAgICAgICAgcnVbJ3ZlcnNpb24nXSA9IHVwdmVyc2lvbgorICAgICAgICAgICAgcnVbJ3R5cGUnXSA9ICdBJworCisgICAgICAgIHJ1WydkYXRldGltZSddID0gZGF0ZXRpbWUubm93KCkKKworICAgIHJldHVybiBydQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9yb290ZnMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Jvb3Rmcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjUzZmNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9yb290ZnMucHkKQEAgLTAsMCArMSw5ODQgQEAKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAorZnJvbSBvZS51dGlscyBpbXBvcnQgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzCitmcm9tIG9lLnBhY2thZ2VfbWFuYWdlciBpbXBvcnQgKgorZnJvbSBvZS5tYW5pZmVzdCBpbXBvcnQgKgoraW1wb3J0IG9lLnBhdGgKK2ltcG9ydCBmaWxlY21wCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgcmUKKworCitjbGFzcyBSb290ZnMob2JqZWN0KToKKyAgICAiIiIKKyAgICBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzLiBEbyBub3QgaW5zdGFudGlhdGUgdGhpcyBkaXJlY3RseS4KKyAgICAiIiIKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYucG0gPSBOb25lCisgICAgICAgIHNlbGYuaW1hZ2Vfcm9vdGZzID0gc2VsZi5kLmdldFZhcignSU1BR0VfUk9PVEZTJywgVHJ1ZSkKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyX2ltYWdlID0gc2VsZi5kLmdldFZhcignREVQTE9ZX0RJUl9JTUFHRScsIFRydWUpCisKKyAgICAgICAgc2VsZi5pbnN0YWxsX29yZGVyID0gTWFuaWZlc3QuSU5TVEFMTF9PUkRFUgorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9jcmVhdGUoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfZ2V0X2RlbGF5ZWRfcG9zdGluc3RzKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX3NhdmVfcG9zdGluc3RzKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX2xvZ19jaGVjayhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9sb2dfY2hlY2tfd2FybihzZWxmKToKKyAgICAgICAgciA9IHJlLmNvbXBpbGUoJ14od2FybnxXYXJufE5PVEU6IHdhcm58Tk9URTogV2FybnxXQVJOSU5HOiknKQorICAgICAgICBsb2dfcGF0aCA9IHNlbGYuZC5leHBhbmQoIiR7VH0vbG9nLmRvX3Jvb3RmcyIpCisgICAgICAgIHdpdGggb3Blbihsb2dfcGF0aCwgJ3InKSBhcyBsb2c6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBsb2c6CisgICAgICAgICAgICAgICAgaWYgJ2xvZ19jaGVjaycgaW4gbGluZSBvciAnTk9URTonIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBtID0gci5zZWFyY2gobGluZSkKKyAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCdbbG9nX2NoZWNrXSAlczogZm91bmQgYSB3YXJuaW5nIG1lc3NhZ2UgaW4gdGhlIGxvZ2ZpbGUgKGtleXdvcmQgXCclc1wnKTpcbltsb2dfY2hlY2tdICVzJworCQkJCSAgICAlIChzZWxmLmQuZ2V0VmFyKCdQTicsIFRydWUpLCBtLmdyb3VwKCksIGxpbmUpKQorCisgICAgZGVmIF9sb2dfY2hlY2tfZXJyb3Ioc2VsZik6CisgICAgICAgIHIgPSByZS5jb21waWxlKHNlbGYubG9nX2NoZWNrX3JlZ2V4KQorICAgICAgICBsb2dfcGF0aCA9IHNlbGYuZC5leHBhbmQoIiR7VH0vbG9nLmRvX3Jvb3RmcyIpCisgICAgICAgIHdpdGggb3Blbihsb2dfcGF0aCwgJ3InKSBhcyBsb2c6CisgICAgICAgICAgICBmb3VuZF9lcnJvciA9IDAKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiXG4iCisgICAgICAgICAgICBmb3IgbGluZSBpbiBsb2c6CisgICAgICAgICAgICAgICAgaWYgJ2xvZ19jaGVjaycgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIG0gPSByLnNlYXJjaChsaW5lKQorICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Vycm9yID0gMQorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCdbbG9nX2NoZWNrXSAlczogZm91bmQgYW4gZXJyb3IgbWVzc2FnZSBpbiB0aGUgbG9nZmlsZSAoa2V5d29yZCBcJyVzXCcpOlxuW2xvZ19jaGVja10gJXMnCisJCQkJICAgICUgKHNlbGYuZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIG0uZ3JvdXAoKSwgbGluZSkpCisKKyAgICAgICAgICAgICAgICBpZiBmb3VuZF9lcnJvciA+PSAxIGFuZCBmb3VuZF9lcnJvciA8PSA1OgorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9IGxpbmUgKyAnXG4nCisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Vycm9yICs9IDEKKworICAgICAgICAgICAgICAgIGlmIGZvdW5kX2Vycm9yID09IDY6CisgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKG1lc3NhZ2UpCisKKyAgICBkZWYgX2luc2VydF9mZWVkX3VyaXMoc2VsZik6CisgICAgICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zKCJJTUFHRV9GRUFUVVJFUyIsICJwYWNrYWdlLW1hbmFnZW1lbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUsIEZhbHNlLCBzZWxmLmQpOgorICAgICAgICAgICAgc2VsZi5wbS5pbnNlcnRfZmVlZHNfdXJpcygpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX2hhbmRsZV9pbnRlcmNlcHRfZmFpbHVyZShzZWxmLCBmYWlsZWRfc2NyaXB0KToKKyAgICAgICAgcGFzcworCisgICAgIiIiCisgICAgVGhlIF9jbGVhbnVwKCkgbWV0aG9kIHNob3VsZCBiZSB1c2VkIHRvIGNsZWFuLXVwIHN0dWZmIHRoYXQgd2UgZG9uJ3QgcmVhbGx5CisgICAgd2FudCB0byBlbmQgdXAgb24gdGFyZ2V0LiBGb3IgZXhhbXBsZSwgaW4gdGhlIGNhc2Ugb2YgUlBNLCB0aGUgREIgbG9ja3MuCisgICAgVGhlIG1ldGhvZCBpcyBjYWxsZWQsIG9uY2UsIGF0IHRoZSBlbmQgb2YgY3JlYXRlKCkgbWV0aG9kLgorICAgICIiIgorICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfY2xlYW51cChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9zZXR1cF9kYmdfcm9vdGZzKHNlbGYsIGRpcnMpOgorICAgICAgICBnZW5fZGVidWdmcyA9IHNlbGYuZC5nZXRWYXIoJ0lNQUdFX0dFTl9ERUJVR0ZTJywgVHJ1ZSkgb3IgJzAnCisgICAgICAgIGlmIGdlbl9kZWJ1Z2ZzICE9ICcxJzoKKyAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgYmIubm90ZSgiICBSZW5hbWluZyB0aGUgb3JpZ2luYWwgcm9vdGZzLi4uIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmltYWdlX3Jvb3RmcyArICctb3JpZycpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgb3MucmVuYW1lKHNlbGYuaW1hZ2Vfcm9vdGZzLCBzZWxmLmltYWdlX3Jvb3RmcyArICctb3JpZycpCisKKyAgICAgICAgYmIubm90ZSgiICBDcmVhdGluZyBkZWJ1ZyByb290ZnMuLi4iKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5pbWFnZV9yb290ZnMpCisKKyAgICAgICAgYmIubm90ZSgiICBDb3B5aW5nIGJhY2sgcGFja2FnZSBkYXRhYmFzZS4uLiIpCisgICAgICAgIGZvciBkaXIgaW4gZGlyczoKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmltYWdlX3Jvb3RmcyArIG9zLnBhdGguZGlybmFtZShkaXIpKQorICAgICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNlbGYuaW1hZ2Vfcm9vdGZzICsgJy1vcmlnJyArIGRpciwgc2VsZi5pbWFnZV9yb290ZnMgKyBkaXIpCisKKyAgICAgICAgY3BhdGggPSBvZS5jYWNoZWRwYXRoLkNhY2hlZFBhdGgoKQorICAgICAgICAjIENvcHkgZmlsZXMgbG9jYXRlZCBpbiAvdXNyL2xpYi9kZWJ1ZyBvciAvdXNyL3NyYy9kZWJ1ZworICAgICAgICBmb3IgZGlyIGluIFsiL3Vzci9saWIvZGVidWciLCAiL3Vzci9zcmMvZGVidWciXToKKyAgICAgICAgICAgIHNyYyA9IHNlbGYuaW1hZ2Vfcm9vdGZzICsgJy1vcmlnJyArIGRpcgorICAgICAgICAgICAgaWYgY3BhdGguZXhpc3RzKHNyYyk6CisgICAgICAgICAgICAgICAgZHN0ID0gc2VsZi5pbWFnZV9yb290ZnMgKyBkaXIKKyAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGRzdCkpCisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNyYywgZHN0KQorCisgICAgICAgICMgQ29weSBmaWxlcyB3aXRoIHN1ZmZpeCAnLmRlYnVnJyBvciBsb2NhdGVkIGluICcuZGVidWcnIGRpci4KKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIGNwYXRoLndhbGsoc2VsZi5pbWFnZV9yb290ZnMgKyAnLW9yaWcnKToKKyAgICAgICAgICAgIHJlbGF0aXZlX2RpciA9IHJvb3RbbGVuKHNlbGYuaW1hZ2Vfcm9vdGZzICsgJy1vcmlnJyk6XQorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgZi5lbmRzd2l0aCgnLmRlYnVnJykgb3IgJy8uZGVidWcnIGluIHJlbGF0aXZlX2RpcjoKKyAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuaW1hZ2Vfcm9vdGZzICsgcmVsYXRpdmVfZGlyKQorICAgICAgICAgICAgICAgICAgICBzaHV0aWwuY29weShvcy5wYXRoLmpvaW4ocm9vdCwgZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2Vfcm9vdGZzICsgcmVsYXRpdmVfZGlyKQorCisgICAgICAgIGJiLm5vdGUoIiAgSW5zdGFsbCBjb21wbGVtZW50YXJ5ICcqLWRiZycgcGFja2FnZXMuLi4iKQorICAgICAgICBzZWxmLnBtLmluc3RhbGxfY29tcGxlbWVudGFyeSgnKi1kYmcnKQorCisgICAgICAgIGJiLm5vdGUoIiAgUmVuYW1lIGRlYnVnIHJvb3Rmcy4uLiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5pbWFnZV9yb290ZnMgKyAnLWRiZycpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgb3MucmVuYW1lKHNlbGYuaW1hZ2Vfcm9vdGZzLCBzZWxmLmltYWdlX3Jvb3RmcyArICctZGJnJykKKworICAgICAgICBiYi5ub3RlKCIgIFJlc3RvcmVpbmcgb3JpZ2luYWwgcm9vdGZzLi4uIikKKyAgICAgICAgb3MucmVuYW1lKHNlbGYuaW1hZ2Vfcm9vdGZzICsgJy1vcmlnJywgc2VsZi5pbWFnZV9yb290ZnMpCisKKyAgICBkZWYgX2V4ZWNfc2hlbGxfY21kKHNlbGYsIGNtZCk6CisgICAgICAgIGZha2Vyb290Y21kID0gc2VsZi5kLmdldFZhcignRkFLRVJPT1QnLCBUcnVlKQorICAgICAgICBpZiBmYWtlcm9vdGNtZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGV4ZWNfY21kID0gW2Zha2Vyb290Y21kLCBjbWRdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleGVjX2NtZCA9IGNtZAorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGV4ZWNfY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgcmV0dXJuKCJDb21tYW5kICclcycgcmV0dXJuZWQgJWQ6XG4lcyIgJSAoZS5jbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgY3JlYXRlKHNlbGYpOgorICAgICAgICBiYi5ub3RlKCIjIyMjIyMgR2VuZXJhdGUgcm9vdGZzICMjIyMjIyMiKQorICAgICAgICBwcmVfcHJvY2Vzc19jbWRzID0gc2VsZi5kLmdldFZhcigiUk9PVEZTX1BSRVBST0NFU1NfQ09NTUFORCIsIFRydWUpCisgICAgICAgIHBvc3RfcHJvY2Vzc19jbWRzID0gc2VsZi5kLmdldFZhcigiUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQiLCBUcnVlKQorCisgICAgICAgIHBvc3RpbnN0X2ludGVyY2VwdHNfZGlyID0gc2VsZi5kLmdldFZhcigiUE9TVElOU1RfSU5URVJDRVBUU19ESVIiLCBUcnVlKQorICAgICAgICBpZiBub3QgcG9zdGluc3RfaW50ZXJjZXB0c19kaXI6CisgICAgICAgICAgICBwb3N0aW5zdF9pbnRlcmNlcHRzX2RpciA9IHNlbGYuZC5leHBhbmQoIiR7Q09SRUJBU0V9L3NjcmlwdHMvcG9zdGluc3QtaW50ZXJjZXB0cyIpCisgICAgICAgIGludGVyY2VwdHNfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVyY2VwdF9zY3JpcHRzIikKKworICAgICAgICBiYi51dGlscy5yZW1vdmUoaW50ZXJjZXB0c19kaXIsIFRydWUpCisKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuaW1hZ2Vfcm9vdGZzKQorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmRlcGxveV9kaXJfaW1hZ2UpCisKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHBvc3RpbnN0X2ludGVyY2VwdHNfZGlyLCBpbnRlcmNlcHRzX2RpcikKKworICAgICAgICBzaHV0aWwuY29weShzZWxmLmQuZXhwYW5kKCIke0NPUkVCQVNFfS9tZXRhL2ZpbGVzL2RlcGxveWRpcl9yZWFkbWUudHh0IiksCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVwbG95X2Rpcl9pbWFnZSArCisgICAgICAgICAgICAgICAgICAgICIvUkVBRE1FXy1fRE9fTk9UX0RFTEVURV9GSUxFU19JTl9USElTX0RJUkVDVE9SWS50eHQiKQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIHByZV9wcm9jZXNzX2NtZHMpCisKKyAgICAgICAgIyBjYWxsIHRoZSBwYWNrYWdlIG1hbmFnZXIgZGVwZW5kZW50IGNyZWF0ZSBtZXRob2QKKyAgICAgICAgc2VsZi5fY3JlYXRlKCkKKworICAgICAgICBzeXNjb25mZGlyID0gc2VsZi5pbWFnZV9yb290ZnMgKyBzZWxmLmQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHN5c2NvbmZkaXIpCisgICAgICAgIHdpdGggb3BlbihzeXNjb25mZGlyICsgIi92ZXJzaW9uIiwgIncrIikgYXMgdmVyOgorICAgICAgICAgICAgdmVyLndyaXRlKHNlbGYuZC5nZXRWYXIoJ0JVSUxETkFNRScsIFRydWUpICsgIlxuIikKKworICAgICAgICBzZWxmLl9ydW5faW50ZXJjZXB0cygpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgcG9zdF9wcm9jZXNzX2NtZHMpCisKKyAgICAgICAgaWYgYmIudXRpbHMuY29udGFpbnMoIklNQUdFX0ZFQVRVUkVTIiwgInJlYWQtb25seS1yb290ZnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUsIEZhbHNlLCBzZWxmLmQpOgorICAgICAgICAgICAgZGVsYXllZF9wb3N0aW5zdHMgPSBzZWxmLl9nZXRfZGVsYXllZF9wb3N0aW5zdHMoKQorICAgICAgICAgICAgaWYgZGVsYXllZF9wb3N0aW5zdHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIlRoZSBmb2xsb3dpbmcgcGFja2FnZXMgY291bGQgbm90IGJlIGNvbmZpZ3VyZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJvZmZsaW5lIGFuZCByb290ZnMgaXMgcmVhZC1vbmx5OiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5ZWRfcG9zdGluc3RzKQorCisgICAgICAgIGlmIHNlbGYuZC5nZXRWYXIoJ1VTRV9ERVZGUycsIFRydWUpICE9ICIxIjoKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9kZXZmcygpCisKKyAgICAgICAgc2VsZi5fdW5pbnN0YWxsX3VubmVlZGVkKCkKKworICAgICAgICBzZWxmLl9pbnNlcnRfZmVlZF91cmlzKCkKKworICAgICAgICBzZWxmLl9ydW5fbGRjb25maWcoKQorCisgICAgICAgIGlmIHNlbGYuZC5nZXRWYXIoJ1VTRV9ERVBNT0QnLCBUcnVlKSAhPSAiMCI6CisgICAgICAgICAgICBzZWxmLl9nZW5lcmF0ZV9rZXJuZWxfbW9kdWxlX2RlcHMoKQorCisgICAgICAgIHNlbGYuX2NsZWFudXAoKQorICAgICAgICBzZWxmLl9sb2dfY2hlY2soKQorCisgICAgZGVmIF91bmluc3RhbGxfdW5uZWVkZWQoc2VsZik6CisgICAgICAgICMgUmVtb3ZlIHVubmVlZGVkIGluaXQgc2NyaXB0IHN5bWxpbmtzCisgICAgICAgIGRlbGF5ZWRfcG9zdGluc3RzID0gc2VsZi5fZ2V0X2RlbGF5ZWRfcG9zdGluc3RzKCkKKyAgICAgICAgaWYgZGVsYXllZF9wb3N0aW5zdHMgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuZC5leHBhbmQoIiR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vaW5pdC5kL3J1bi1wb3N0aW5zdHMiKSk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXhlY19zaGVsbF9jbWQoWyJ1cGRhdGUtcmMuZCIsICItZiIsICItciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ0lNQUdFX1JPT1RGUycsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicnVuLXBvc3RpbnN0cyIsICJyZW1vdmUiXSkKKworICAgICAgICBydW50aW1lX3BrZ21hbmFnZSA9IGJiLnV0aWxzLmNvbnRhaW5zKCJJTUFHRV9GRUFUVVJFUyIsICJwYWNrYWdlLW1hbmFnZW1lbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUsIEZhbHNlLCBzZWxmLmQpCisgICAgICAgIHN5c3Zjb21wYXRfaW5fZGlzdHJvID0gYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsIFsgInN5c3RlbWQiLCAic3lzdmluaXQiIF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkKKyAgICAgICAgaW1hZ2Vfcm9yZnMgPSBiYi51dGlscy5jb250YWlucygiSU1BR0VfRkVBVFVSRVMiLCAicmVhZC1vbmx5LXJvb3RmcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkKKyAgICAgICAgaWYgc3lzdmNvbXBhdF9pbl9kaXN0cm8gYW5kIG5vdCBpbWFnZV9yb3JmczoKKyAgICAgICAgICAgIHBrZ190b19yZW1vdmUgPSAiIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGtnX3RvX3JlbW92ZSA9ICJ1cGRhdGUtcmMuZCIKKyAgICAgICAgaWYgbm90IHJ1bnRpbWVfcGtnbWFuYWdlOgorICAgICAgICAgICAgIyBSZW1vdmUgY29tcG9uZW50cyB0aGF0IHdlIGRvbid0IG5lZWQgaWYgd2UncmUgbm90IGdvaW5nIHRvIGluc3RhbGwKKyAgICAgICAgICAgICMgYWRkaXRpb25hbCBwYWNrYWdlcyBhdCBydW50aW1lCisgICAgICAgICAgICBpZiBkZWxheWVkX3Bvc3RpbnN0cyBpcyBOb25lOgorICAgICAgICAgICAgICAgIGluc3RhbGxlZF9wa2dzX2RpciA9IHNlbGYuZC5leHBhbmQoJyR7V09SS0RJUn0vaW5zdGFsbGVkX3BrZ3MudHh0JykKKyAgICAgICAgICAgICAgICBwa2dzX3RvX3JlbW92ZSA9IGxpc3QoKQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihpbnN0YWxsZWRfcGtnc19kaXIsICJyKyIpIGFzIGluc3RhbGxlZF9wa2dzOgorICAgICAgICAgICAgICAgICAgICBwa2dzX2luc3RhbGxlZCA9IGluc3RhbGxlZF9wa2dzLnJlYWQoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIHBrZ19pbnN0YWxsZWQgaW4gcGtnc19pbnN0YWxsZWRbOl06CisgICAgICAgICAgICAgICAgICAgICAgICBwa2cgPSBwa2dfaW5zdGFsbGVkLnNwbGl0KClbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBrZyBpbiBbInVwZGF0ZS1yYy5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhc2UtcGFzc3dkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNoYWRvdyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1cGRhdGUtYWx0ZXJuYXRpdmVzIiwgcGtnX3RvX3JlbW92ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcigiUk9PVEZTX0JPT1RTVFJBUF9JTlNUQUxMIiwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2dzX3RvX3JlbW92ZS5hcHBlbmQocGtnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ3NfaW5zdGFsbGVkLnJlbW92ZShwa2dfaW5zdGFsbGVkKQorCisgICAgICAgICAgICAgICAgaWYgbGVuKHBrZ3NfdG9fcmVtb3ZlKSA+IDA6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucG0ucmVtb3ZlKHBrZ3NfdG9fcmVtb3ZlLCBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgIyBVcGRhdGUgaW5zdGFsbGVkX3BrZ3MudHh0CisgICAgICAgICAgICAgICAgICAgIG9wZW4oaW5zdGFsbGVkX3BrZ3NfZGlyLCAidysiKS53cml0ZSgnXG4nLmpvaW4ocGtnc19pbnN0YWxsZWQpKQorCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3NhdmVfcG9zdGluc3RzKCkKKworICAgICAgICBwb3N0X3VuaW5zdGFsbF9jbWRzID0gc2VsZi5kLmdldFZhcigiUk9PVEZTX1BPU1RVTklOU1RBTExfQ09NTUFORCIsIFRydWUpCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIHBvc3RfdW5pbnN0YWxsX2NtZHMpCisKKyAgICAgICAgaWYgbm90IHJ1bnRpbWVfcGtnbWFuYWdlOgorICAgICAgICAgICAgIyBSZW1vdmUgdGhlIHBhY2thZ2UgbWFuYWdlciBkYXRhIGZpbGVzCisgICAgICAgICAgICBzZWxmLnBtLnJlbW92ZV9wYWNrYWdpbmdfZGF0YSgpCisKKyAgICBkZWYgX3J1bl9pbnRlcmNlcHRzKHNlbGYpOgorICAgICAgICBpbnRlcmNlcHRzX2RpciA9IG9zLnBhdGguam9pbihzZWxmLmQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmNlcHRfc2NyaXB0cyIpCisKKyAgICAgICAgYmIubm90ZSgiUnVubmluZyBpbnRlcmNlcHQgc2NyaXB0czoiKQorICAgICAgICBvcy5lbnZpcm9uWydEJ10gPSBzZWxmLmltYWdlX3Jvb3RmcworICAgICAgICBmb3Igc2NyaXB0IGluIG9zLmxpc3RkaXIoaW50ZXJjZXB0c19kaXIpOgorICAgICAgICAgICAgc2NyaXB0X2Z1bGwgPSBvcy5wYXRoLmpvaW4oaW50ZXJjZXB0c19kaXIsIHNjcmlwdCkKKworICAgICAgICAgICAgaWYgc2NyaXB0ID09ICJwb3N0aW5zdF9pbnRlcmNlcHQiIG9yIG5vdCBvcy5hY2Nlc3Moc2NyaXB0X2Z1bGwsIG9zLlhfT0spOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGJiLm5vdGUoIj4gRXhlY3V0aW5nICVzIGludGVyY2VwdCAuLi4iICUgc2NyaXB0KQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKHNjcmlwdF9mdWxsKQorICAgICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgYmIud2FybigiVGhlIHBvc3RpbnN0YWxsIGludGVyY2VwdCBob29rICclcycgZmFpbGVkIChleGl0IGNvZGU6ICVkKSEgU2VlIGxvZyBmb3IgZGV0YWlscyEiICUKKyAgICAgICAgICAgICAgICAgICAgICAgIChzY3JpcHQsIGUucmV0dXJuY29kZSkpCisKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc2NyaXB0X2Z1bGwpIGFzIGludGVyY2VwdDoKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJlZF9wa2dzID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBpbnRlcmNlcHQucmVhZCgpLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCJeIyNQS0dTOiguKikiLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlcmVkX3BrZ3MgPSBtLmdyb3VwKDEpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAgICAgICAgIGlmIHJlZ2lzdGVyZWRfcGtncyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlRoZSBwb3N0aW5zdGFsbHMgZm9yIHRoZSBmb2xsb3dpbmcgcGFja2FnZXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2lsbCBiZSBwb3N0cG9uZWQgZm9yIGZpcnN0IGJvb3Q6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyZWRfcGtncykKKworICAgICAgICAgICAgICAgICAgICAgICAgIyBjYWxsIHRoZSBiYWNrZW5kIGRlcGVuZGVudCBoYW5kbGVyCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfaW50ZXJjZXB0X2ZhaWx1cmUocmVnaXN0ZXJlZF9wa2dzKQorCisgICAgZGVmIF9ydW5fbGRjb25maWcoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZC5nZXRWYXIoJ0xEQ09ORklHREVQRU5EJywgVHJ1ZSk6CisgICAgICAgICAgICBiYi5ub3RlKCJFeGVjdXRpbmc6IGxkY29uZmlnIC1yIiArIHNlbGYuaW1hZ2Vfcm9vdGZzICsgIi1jIG5ldyAtdiIpCisgICAgICAgICAgICBzZWxmLl9leGVjX3NoZWxsX2NtZChbJ2xkY29uZmlnJywgJy1yJywgc2VsZi5pbWFnZV9yb290ZnMsICctYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ldycsICctdiddKQorCisgICAgZGVmIF9jaGVja19mb3Jfa2VybmVsX21vZHVsZXMoc2VsZiwgbW9kdWxlc19kaXIpOgorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhtb2R1bGVzX2RpciwgdG9wZG93bj1UcnVlKToKKyAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGZvdW5kX2tvID0gbmFtZS5lbmRzd2l0aCgiLmtvIikKKyAgICAgICAgICAgICAgICBpZiBmb3VuZF9rbzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kX2tvCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9nZW5lcmF0ZV9rZXJuZWxfbW9kdWxlX2RlcHMoc2VsZik6CisgICAgICAgIG1vZHVsZXNfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuaW1hZ2Vfcm9vdGZzLCAnbGliJywgJ21vZHVsZXMnKQorICAgICAgICAjIGlmIHdlIGRvbid0IGhhdmUgYW55IG1vZHVsZXMgZG9uJ3QgYm90aGVyIHRvIGRvIHRoZSBkZXBtb2QKKyAgICAgICAgaWYgbm90IHNlbGYuX2NoZWNrX2Zvcl9rZXJuZWxfbW9kdWxlcyhtb2R1bGVzX2Rpcik6CisgICAgICAgICAgICBiYi5ub3RlKCJObyBLZXJuZWwgTW9kdWxlcyBmb3VuZCwgbm90IHJ1bm5pbmcgZGVwbW9kIikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGtlcm5lbF9hYmlfdmVyX2ZpbGUgPSBvZS5wYXRoLmpvaW4oc2VsZi5kLmdldFZhcignUEtHREFUQV9ESVInLCBUcnVlKSwgImtlcm5lbC1kZXBtb2QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrZXJuZWwtYWJpdmVyc2lvbicpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhrZXJuZWxfYWJpX3Zlcl9maWxlKToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJObyBrZXJuZWwtYWJpdmVyc2lvbiBmaWxlIGZvdW5kICglcyksIGNhbm5vdCBydW4gZGVwbW9kLCBhYm9ydGluZyIgJSBrZXJuZWxfYWJpX3Zlcl9maWxlKQorCisgICAgICAgIGtlcm5lbF92ZXIgPSBvcGVuKGtlcm5lbF9hYmlfdmVyX2ZpbGUpLnJlYWQoKS5zdHJpcCgnIFxuJykKKyAgICAgICAgdmVyc2lvbmVkX21vZHVsZXNfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuaW1hZ2Vfcm9vdGZzLCBtb2R1bGVzX2Rpciwga2VybmVsX3ZlcikKKworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodmVyc2lvbmVkX21vZHVsZXNfZGlyKQorCisgICAgICAgIHNlbGYuX2V4ZWNfc2hlbGxfY21kKFsnZGVwbW9kd3JhcHBlcicsICctYScsICctYicsIHNlbGYuaW1hZ2Vfcm9vdGZzLCBrZXJuZWxfdmVyXSkKKworICAgICIiIgorICAgIENyZWF0ZSBkZXZmczoKKyAgICAqIElNQUdFX0RFVklDRV9UQUJMRSBpcyB0aGUgb2xkIG5hbWUgdG8gYW4gYWJzb2x1dGUgcGF0aCB0byBhIGRldmljZSB0YWJsZSBmaWxlCisgICAgKiBJTUFHRV9ERVZJQ0VfVEFCTEVTIGlzIGEgbmV3IG5hbWUgZm9yIGEgZmlsZSwgb3IgbGlzdCBvZiBmaWxlcywgc2VhY2hlZAorICAgICAgZm9yIGluIHRoZSBCQlBBVEgKKyAgICBJZiBuZWl0aGVyIGFyZSBzcGVjaWZpZWQgdGhlbiB0aGUgZGVmYXVsdCBuYW1lIG9mIGZpbGVzL2RldmljZV90YWJsZS1taW5pbWFsLnR4dAorICAgIGlzIHNlYXJjaGVkIGZvciBpbiB0aGUgQkJQQVRIIChzYW1lIGFzIHRoZSBvbGQgdmVyc2lvbi4pCisgICAgIiIiCisgICAgZGVmIF9jcmVhdGVfZGV2ZnMoc2VsZik6CisgICAgICAgIGRldnRhYmxlX2xpc3QgPSBbXQorICAgICAgICBkZXZ0YWJsZSA9IHNlbGYuZC5nZXRWYXIoJ0lNQUdFX0RFVklDRV9UQUJMRScsIFRydWUpCisgICAgICAgIGlmIGRldnRhYmxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZGV2dGFibGVfbGlzdC5hcHBlbmQoZGV2dGFibGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZXZ0YWJsZXMgPSBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9ERVZJQ0VfVEFCTEVTJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGRldnRhYmxlcyBpcyBOb25lOgorICAgICAgICAgICAgICAgIGRldnRhYmxlcyA9ICdmaWxlcy9kZXZpY2VfdGFibGUtbWluaW1hbC50eHQnCisgICAgICAgICAgICBmb3IgZGV2dGFibGUgaW4gZGV2dGFibGVzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgZGV2dGFibGVfbGlzdC5hcHBlbmQoIiVzIiAlIGJiLnV0aWxzLndoaWNoKHNlbGYuZC5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpLCBkZXZ0YWJsZSkpCisKKyAgICAgICAgZm9yIGRldnRhYmxlIGluIGRldnRhYmxlX2xpc3Q6CisgICAgICAgICAgICBzZWxmLl9leGVjX3NoZWxsX2NtZChbIm1ha2VkZXZzIiwgIi1yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmltYWdlX3Jvb3RmcywgIi1EIiwgZGV2dGFibGVdKQorCisKK2NsYXNzIFJwbVJvb3RmcyhSb290ZnMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCBtYW5pZmVzdF9kaXIpOgorICAgICAgICBzdXBlcihScG1Sb290ZnMsIHNlbGYpLl9faW5pdF9fKGQpCisgICAgICAgIHNlbGYubG9nX2NoZWNrX3JlZ2V4ID0gJyh1bnBhY2tpbmcgb2YgYXJjaGl2ZSBmYWlsZWR8Q2Fubm90IGZpbmQgcGFja2FnZSdcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3xleGl0IDF8RVJST1I6IHxFcnJvcjogfEVycm9yIHxFUlJPUiAnXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd8RmFpbGVkIHxGYWlsZWQ6IHxGYWlsZWQkfEZhaWxlZFwoXGQrXCk6KScKKyAgICAgICAgc2VsZi5tYW5pZmVzdCA9IFJwbU1hbmlmZXN0KGQsIG1hbmlmZXN0X2RpcikKKworICAgICAgICBzZWxmLnBtID0gUnBtUE0oZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ1RBUkdFVF9WRU5ET1InLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYuaW5jX3JwbV9pbWFnZV9nZW4gPSBzZWxmLmQuZ2V0VmFyKCdJTkNfUlBNX0lNQUdFX0dFTicsIFRydWUpCisgICAgICAgIGlmIHNlbGYuaW5jX3JwbV9pbWFnZV9nZW4gIT0gIjEiOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuaW1hZ2Vfcm9vdGZzLCBUcnVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5wbS5yZWNvdmVyeV9wYWNrYWdpbmdfZGF0YSgpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLmQuZ2V0VmFyKCdNVUxUSUxJQl9URU1QX1JPT1RGUycsIFRydWUpLCBUcnVlKQorCisgICAgICAgIHNlbGYucG0uY3JlYXRlX2NvbmZpZ3MoKQorCisgICAgJycnCisgICAgV2hpbGUgcnBtIGluY3JlbWVudGFsIGltYWdlIGdlbmVyYXRpb24gaXMgZW5hYmxlZCwgaXQgd2lsbCByZW1vdmUgdGhlCisgICAgdW5uZWVkZWQgcGtncyBieSBjb21wYXJpbmcgdGhlIG5ldyBpbnN0YWxsIHNvbHV0aW9uIG1hbmlmZXN0IGFuZCB0aGUKKyAgICBvbGQgaW5zdGFsbGVkIG1hbmlmZXN0LgorICAgICcnJworICAgIGRlZiBfY3JlYXRlX2luY3JlbWVudGFsKHNlbGYsIHBrZ3NfaW5pdGlhbF9pbnN0YWxsKToKKyAgICAgICAgaWYgc2VsZi5pbmNfcnBtX2ltYWdlX2dlbiA9PSAiMSI6CisKKyAgICAgICAgICAgIHBrZ3NfdG9faW5zdGFsbCA9IGxpc3QoKQorICAgICAgICAgICAgZm9yIHBrZ190eXBlIGluIHBrZ3NfaW5pdGlhbF9pbnN0YWxsOgorICAgICAgICAgICAgICAgIHBrZ3NfdG9faW5zdGFsbCArPSBwa2dzX2luaXRpYWxfaW5zdGFsbFtwa2dfdHlwZV0KKworICAgICAgICAgICAgaW5zdGFsbGVkX21hbmlmZXN0ID0gc2VsZi5wbS5sb2FkX29sZF9pbnN0YWxsX3NvbHV0aW9uKCkKKyAgICAgICAgICAgIHNvbHV0aW9uX21hbmlmZXN0ID0gc2VsZi5wbS5kdW1wX2luc3RhbGxfc29sdXRpb24ocGtnc190b19pbnN0YWxsKQorCisgICAgICAgICAgICBwa2dfdG9fcmVtb3ZlID0gbGlzdCgpCisgICAgICAgICAgICBmb3IgcGtnIGluIGluc3RhbGxlZF9tYW5pZmVzdDoKKyAgICAgICAgICAgICAgICBpZiBwa2cgbm90IGluIHNvbHV0aW9uX21hbmlmZXN0OgorICAgICAgICAgICAgICAgICAgICBwa2dfdG9fcmVtb3ZlLmFwcGVuZChwa2cpCisKKyAgICAgICAgICAgIHNlbGYucG0udXBkYXRlKCkKKworICAgICAgICAgICAgYmIubm90ZSgnaW5jcmVtZW50YWwgdXBkYXRlIC0tIHVwZ3JhZGUgcGFja2FnZXMgaW4gcGxhY2UgJykKKyAgICAgICAgICAgIHNlbGYucG0udXBncmFkZSgpCisgICAgICAgICAgICBpZiBwa2dfdG9fcmVtb3ZlICE9IFtdOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoJ2luY3JlbWVudGFsIHJlbW92ZWQ6ICVzJyAlICcgJy5qb2luKHBrZ190b19yZW1vdmUpKQorICAgICAgICAgICAgICAgIHNlbGYucG0ucmVtb3ZlKHBrZ190b19yZW1vdmUpCisKKyAgICBkZWYgX2NyZWF0ZShzZWxmKToKKyAgICAgICAgcGtnc190b19pbnN0YWxsID0gc2VsZi5tYW5pZmVzdC5wYXJzZV9pbml0aWFsX21hbmlmZXN0KCkKKyAgICAgICAgcnBtX3ByZV9wcm9jZXNzX2NtZHMgPSBzZWxmLmQuZ2V0VmFyKCdSUE1fUFJFUFJPQ0VTU19DT01NQU5EUycsIFRydWUpCisgICAgICAgIHJwbV9wb3N0X3Byb2Nlc3NfY21kcyA9IHNlbGYuZC5nZXRWYXIoJ1JQTV9QT1NUUFJPQ0VTU19DT01NQU5EUycsIFRydWUpCisKKyAgICAgICAgIyB1cGRhdGUgUE0gaW5kZXggZmlsZXMKKyAgICAgICAgc2VsZi5wbS53cml0ZV9pbmRleCgpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgcnBtX3ByZV9wcm9jZXNzX2NtZHMpCisKKyAgICAgICAgc2VsZi5wbS5kdW1wX2FsbF9hdmFpbGFibGVfcGtncygpCisKKyAgICAgICAgaWYgc2VsZi5pbmNfcnBtX2ltYWdlX2dlbiA9PSAiMSI6CisgICAgICAgICAgICBzZWxmLl9jcmVhdGVfaW5jcmVtZW50YWwocGtnc190b19pbnN0YWxsKQorCisgICAgICAgIHNlbGYucG0udXBkYXRlKCkKKworICAgICAgICBwa2dzID0gW10KKyAgICAgICAgcGtnc19hdHRlbXB0ID0gW10KKyAgICAgICAgZm9yIHBrZ190eXBlIGluIHBrZ3NfdG9faW5zdGFsbDoKKyAgICAgICAgICAgIGlmIHBrZ190eXBlID09IE1hbmlmZXN0LlBLR19UWVBFX0FUVEVNUFRfT05MWToKKyAgICAgICAgICAgICAgICBwa2dzX2F0dGVtcHQgKz0gcGtnc190b19pbnN0YWxsW3BrZ190eXBlXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwa2dzICs9IHBrZ3NfdG9faW5zdGFsbFtwa2dfdHlwZV0KKworICAgICAgICBzZWxmLnBtLmluc3RhbGwocGtncykKKworICAgICAgICBzZWxmLnBtLmluc3RhbGwocGtnc19hdHRlbXB0LCBUcnVlKQorCisgICAgICAgIHNlbGYucG0uaW5zdGFsbF9jb21wbGVtZW50YXJ5KCkKKworICAgICAgICBzZWxmLl9zZXR1cF9kYmdfcm9vdGZzKFsnL2V0Yy9ycG0nLCAnL3Zhci9saWIvcnBtJywgJy92YXIvbGliL3NtYXJ0J10pCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgcnBtX3Bvc3RfcHJvY2Vzc19jbWRzKQorCisgICAgICAgIHNlbGYuX2xvZ19jaGVjaygpCisKKyAgICAgICAgaWYgc2VsZi5pbmNfcnBtX2ltYWdlX2dlbiA9PSAiMSI6CisgICAgICAgICAgICBzZWxmLnBtLmJhY2t1cF9wYWNrYWdpbmdfZGF0YSgpCisKKyAgICAgICAgc2VsZi5wbS5ycG1fc2V0dXBfc21hcnRfdGFyZ2V0X2NvbmZpZygpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9kZXBlbmRzX2xpc3QoKToKKyAgICAgICAgcmV0dXJuIFsnREVQTE9ZX0RJUl9SUE0nLCAnSU5DX1JQTV9JTUFHRV9HRU4nLCAnUlBNX1BSRVBST0NFU1NfQ09NTUFORFMnLAorICAgICAgICAgICAgICAgICdSUE1fUE9TVFBST0NFU1NfQ09NTUFORFMnLCAnUlBNX1BSRUZFUl9FTEZfQVJDSCddCisKKyAgICBkZWYgX2dldF9kZWxheWVkX3Bvc3RpbnN0cyhzZWxmKToKKyAgICAgICAgcG9zdGluc3RfZGlyID0gc2VsZi5kLmV4cGFuZCgiJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9ycG0tcG9zdGluc3RzIikKKyAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihwb3N0aW5zdF9kaXIpOgorICAgICAgICAgICAgZmlsZXMgPSBvcy5saXN0ZGlyKHBvc3RpbnN0X2RpcikKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoJ0RlbGF5ZWQgcGFja2FnZSBzY3JpcHRsZXQ6ICVzJyAlIGYpCisgICAgICAgICAgICByZXR1cm4gZmlsZXMKKworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9zYXZlX3Bvc3RpbnN0cyhzZWxmKToKKyAgICAgICAgIyB0aGlzIGlzIGp1c3QgYSBzdHViLiBGb3IgUlBNLCB0aGUgZmFpbGVkIHBvc3RpbnN0YWxscyBhcmUKKyAgICAgICAgIyBhbHJlYWR5IHNhdmVkIGluIC9ldGMvcnBtLXBvc3RpbnN0cworICAgICAgICBwYXNzCisKKyAgICBkZWYgX2xvZ19jaGVja19lcnJvcihzZWxmKToKKyAgICAgICAgciA9IHJlLmNvbXBpbGUoJyh1bnBhY2tpbmcgb2YgYXJjaGl2ZSBmYWlsZWR8Q2Fubm90IGZpbmQgcGFja2FnZXxleGl0IDF8RVJSfEZhaWwpJykKKyAgICAgICAgbG9nX3BhdGggPSBzZWxmLmQuZXhwYW5kKCIke1R9L2xvZy5kb19yb290ZnMiKQorICAgICAgICB3aXRoIG9wZW4obG9nX3BhdGgsICdyJykgYXMgbG9nOgorICAgICAgICAgICAgZm91bmRfZXJyb3IgPSAwCisgICAgICAgICAgICBtZXNzYWdlID0gIlxuIgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gbG9nLnJlYWQoKS5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICBpZiAnbG9nX2NoZWNrJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICMgc2ggLXggbWF5IGVtaXQgY29kZSB3aGljaCBpc24ndCBhY3R1YWxseSBleGVjdXRlZAorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnKycpOgorCQkgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIG0gPSByLnNlYXJjaChsaW5lKQorICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Vycm9yID0gMQorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCdsb2dfY2hlY2s6IFRoZXJlIHdlcmUgZXJyb3IgbWVzc2FnZXMgaW4gdGhlIGxvZ2ZpbGUnKQorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCdsb2dfY2hlY2s6IE1hdGNoZWQga2V5d29yZDogWyVzXVxuXG4nICUgbS5ncm91cCgpKQorCisgICAgICAgICAgICAgICAgaWYgZm91bmRfZXJyb3IgPj0gMSBhbmQgZm91bmRfZXJyb3IgPD0gNToKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSBsaW5lICsgJ1xuJworICAgICAgICAgICAgICAgICAgICBmb3VuZF9lcnJvciArPSAxCisKKyAgICAgICAgICAgICAgICBpZiBmb3VuZF9lcnJvciA9PSA2OgorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbChtZXNzYWdlKQorCisgICAgZGVmIF9sb2dfY2hlY2soc2VsZik6CisgICAgICAgIHNlbGYuX2xvZ19jaGVja193YXJuKCkKKyAgICAgICAgc2VsZi5fbG9nX2NoZWNrX2Vycm9yKCkKKworICAgIGRlZiBfaGFuZGxlX2ludGVyY2VwdF9mYWlsdXJlKHNlbGYsIHJlZ2lzdGVyZWRfcGtncyk6CisgICAgICAgIHJwbV9wb3N0aW5zdHNfZGlyID0gc2VsZi5pbWFnZV9yb290ZnMgKyBzZWxmLmQuZXhwYW5kKCcke3N5c2NvbmZkaXJ9L3JwbS1wb3N0aW5zdHMvJykKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHJwbV9wb3N0aW5zdHNfZGlyKQorCisgICAgICAgICMgU2F2ZSB0aGUgcGFja2FnZSBwb3N0aW5zdGFsbHMgaW4gL2V0Yy9ycG0tcG9zdGluc3RzCisgICAgICAgIGZvciBwa2cgaW4gcmVnaXN0ZXJlZF9wa2dzLnNwbGl0KCk6CisgICAgICAgICAgICBzZWxmLnBtLnNhdmVfcnBtcG9zdGluc3QocGtnKQorCisgICAgZGVmIF9jbGVhbnVwKHNlbGYpOgorICAgICAgICAjIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIHBvc3Rwcm9jZXNzIGNvbW1hbmRzLCBycG0gaXMgY2FsbGVkIHNldmVyYWwKKyAgICAgICAgIyB0aW1lcyB0byBnZXQgdGhlIGZpbGVzIGluc3RhbGxlZCwgZGVwZW5kZW5jaWVzLCBldGMuIFRoaXMgY3JlYXRlcyB0aGUKKyAgICAgICAgIyBfX2RiLjAwKiAoQmVya2VsZXkgREIgZmlsZXMgdGhhdCBob2xkIGxvY2tzLCBycG0gc3BlY2lmaWMgZW52aXJvbm1lbnQKKyAgICAgICAgIyBzZXR0aW5ncywgZXRjLiksIHRoYXQgc2hvdWxkIG5vdCBnZXQgaW50byB0aGUgZmluYWwgcm9vdGZzCisgICAgICAgIHNlbGYucG0udW5sb2NrX3JwbV9kYigpCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc2VsZi5wbS5pbnN0YWxsX2Rpcl9wYXRoICsgIi90bXAiKSBhbmQgbm90IG9zLmxpc3RkaXIoc2VsZi5wbS5pbnN0YWxsX2Rpcl9wYXRoICsgIi90bXAiKToKKyAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYucG0uaW5zdGFsbF9kaXJfcGF0aCArICIvdG1wIiwgVHJ1ZSkKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihzZWxmLnBtLmluc3RhbGxfZGlyX3BhdGgpIGFuZCBub3Qgb3MubGlzdGRpcihzZWxmLnBtLmluc3RhbGxfZGlyX3BhdGgpOgorICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5wbS5pbnN0YWxsX2Rpcl9wYXRoLCBUcnVlKQorCitjbGFzcyBEcGtnT3BrZ1Jvb3RmcyhSb290ZnMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc3VwZXIoRHBrZ09wa2dSb290ZnMsIHNlbGYpLl9faW5pdF9fKGQpCisKKyAgICBkZWYgX2dldF9wa2dzX3Bvc3RpbnN0cyhzZWxmLCBzdGF0dXNfZmlsZSk6CisgICAgICAgIGRlZiBfZ2V0X3BrZ19kZXBlbmRzX2xpc3QocGtnX2RlcGVuZHMpOgorICAgICAgICAgICAgcGtnX2RlcGVuZHNfbGlzdCA9IFtdCisgICAgICAgICAgICAjIGZpbHRlciB2ZXJzaW9uIHJlcXVpcmVtZW50cyBsaWtlIGxpYmMgKD49IDEuMSkKKyAgICAgICAgICAgIGZvciBkZXAgaW4gcGtnX2RlcGVuZHMuc3BsaXQoJywgJyk6CisgICAgICAgICAgICAgICAgbV9kZXAgPSByZS5tYXRjaCgiXiguKikgXCguKlwpJCIsIGRlcCkKKyAgICAgICAgICAgICAgICBpZiBtX2RlcDoKKyAgICAgICAgICAgICAgICAgICAgZGVwID0gbV9kZXAuZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICBwa2dfZGVwZW5kc19saXN0LmFwcGVuZChkZXApCisKKyAgICAgICAgICAgIHJldHVybiBwa2dfZGVwZW5kc19saXN0CisKKyAgICAgICAgcGtncyA9IHt9CisgICAgICAgIHBrZ19uYW1lID0gIiIKKyAgICAgICAgcGtnX3N0YXR1c19tYXRjaCA9IEZhbHNlCisgICAgICAgIHBrZ19kZXBlbmRzID0gIiIKKworICAgICAgICB3aXRoIG9wZW4oc3RhdHVzX2ZpbGUpIGFzIHN0YXR1czoKKyAgICAgICAgICAgIGRhdGEgPSBzdGF0dXMucmVhZCgpCisgICAgICAgICAgICBzdGF0dXMuY2xvc2UoKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZGF0YS5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICBtX3BrZyA9IHJlLm1hdGNoKCJeUGFja2FnZTogKC4qKSIsIGxpbmUpCisgICAgICAgICAgICAgICAgbV9zdGF0dXMgPSByZS5tYXRjaCgiXlN0YXR1czouKnVucGFja2VkIiwgbGluZSkKKyAgICAgICAgICAgICAgICBtX2RlcGVuZHMgPSByZS5tYXRjaCgiXkRlcGVuZHM6ICguKikiLCBsaW5lKQorCisgICAgICAgICAgICAgICAgaWYgbV9wa2cgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIHBrZ19uYW1lIGFuZCBwa2dfc3RhdHVzX21hdGNoOgorICAgICAgICAgICAgICAgICAgICAgICAgcGtnc1twa2dfbmFtZV0gPSBfZ2V0X3BrZ19kZXBlbmRzX2xpc3QocGtnX2RlcGVuZHMpCisKKyAgICAgICAgICAgICAgICAgICAgcGtnX25hbWUgPSBtX3BrZy5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICBwa2dfc3RhdHVzX21hdGNoID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgcGtnX2RlcGVuZHMgPSAiIgorICAgICAgICAgICAgICAgIGVsaWYgbV9zdGF0dXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHBrZ19zdGF0dXNfbWF0Y2ggPSBUcnVlCisgICAgICAgICAgICAgICAgZWxpZiBtX2RlcGVuZHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHBrZ19kZXBlbmRzID0gbV9kZXBlbmRzLmdyb3VwKDEpCisKKyAgICAgICAgIyByZW1vdmUgcGFja2FnZSBkZXBlbmRlbmNpZXMgbm90IGluIHBvc3RpbnN0cworICAgICAgICBwa2dfbmFtZXMgPSBwa2dzLmtleXMoKQorICAgICAgICBmb3IgcGtnX25hbWUgaW4gcGtnX25hbWVzOgorICAgICAgICAgICAgZGVwcyA9IHBrZ3NbcGtnX25hbWVdWzpdCisKKyAgICAgICAgICAgIGZvciBkIGluIGRlcHM6CisgICAgICAgICAgICAgICAgaWYgZCBub3QgaW4gcGtnX25hbWVzOgorICAgICAgICAgICAgICAgICAgICBwa2dzW3BrZ19uYW1lXS5yZW1vdmUoZCkKKworICAgICAgICByZXR1cm4gcGtncworCisgICAgZGVmIF9nZXRfZGVsYXllZF9wb3N0aW5zdHNfY29tbW9uKHNlbGYsIHN0YXR1c19maWxlKToKKyAgICAgICAgZGVmIF9kZXBfcmVzb2x2ZShncmFwaCwgbm9kZSwgcmVzb2x2ZWQsIHNlZW4pOgorICAgICAgICAgICAgc2Vlbi5hcHBlbmQobm9kZSkKKworICAgICAgICAgICAgZm9yIGVkZ2UgaW4gZ3JhcGhbbm9kZV06CisgICAgICAgICAgICAgICAgaWYgZWRnZSBub3QgaW4gcmVzb2x2ZWQ6CisgICAgICAgICAgICAgICAgICAgIGlmIGVkZ2UgaW4gc2VlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiUGFja2FnZXMgJXMgYW5kICVzIGhhdmUgIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhIGNpcmN1bGFyIGRlcGVuZGVuY3kgaW4gcG9zdGluc3RzIHNjcmlwdHMuIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKG5vZGUsIGVkZ2UpKQorICAgICAgICAgICAgICAgICAgICBfZGVwX3Jlc29sdmUoZ3JhcGgsIGVkZ2UsIHJlc29sdmVkLCBzZWVuKQorCisgICAgICAgICAgICByZXNvbHZlZC5hcHBlbmQobm9kZSkKKworICAgICAgICBwa2dfbGlzdCA9IFtdCisKKyAgICAgICAgcGtncyA9IHNlbGYuX2dldF9wa2dzX3Bvc3RpbnN0cyhzdGF0dXNfZmlsZSkKKyAgICAgICAgaWYgcGtnczoKKyAgICAgICAgICAgIHJvb3QgPSAiX19wYWNrYWdlZ3JvdXBfcG9zdGluc3RfXyIKKyAgICAgICAgICAgIHBrZ3Nbcm9vdF0gPSBwa2dzLmtleXMoKQorICAgICAgICAgICAgX2RlcF9yZXNvbHZlKHBrZ3MsIHJvb3QsIHBrZ19saXN0LCBbXSkKKyAgICAgICAgICAgIHBrZ19saXN0LnJlbW92ZShyb290KQorCisgICAgICAgIGlmIGxlbihwa2dfbGlzdCkgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgcmV0dXJuIHBrZ19saXN0CisKKyAgICBkZWYgX3NhdmVfcG9zdGluc3RzX2NvbW1vbihzZWxmLCBkc3RfcG9zdGluc3RfZGlyLCBzcmNfcG9zdGluc3RfZGlyKToKKyAgICAgICAgbnVtID0gMAorICAgICAgICBmb3IgcCBpbiBzZWxmLl9nZXRfZGVsYXllZF9wb3N0aW5zdHMoKToKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihkc3RfcG9zdGluc3RfZGlyKQorCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc3JjX3Bvc3RpbnN0X2RpciwgcCArICIucG9zdGluc3QiKSk6CisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkob3MucGF0aC5qb2luKHNyY19wb3N0aW5zdF9kaXIsIHAgKyAiLnBvc3RpbnN0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGRzdF9wb3N0aW5zdF9kaXIsICIlMDNkLSVzIiAlIChudW0sIHApKSkKKworICAgICAgICAgICAgbnVtICs9IDEKKworY2xhc3MgRHBrZ1Jvb3RmcyhEcGtnT3BrZ1Jvb3Rmcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIG1hbmlmZXN0X2Rpcik6CisgICAgICAgIHN1cGVyKERwa2dSb290ZnMsIHNlbGYpLl9faW5pdF9fKGQpCisgICAgICAgIHNlbGYubG9nX2NoZWNrX3JlZ2V4ID0gJ15FOicKKworICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5pbWFnZV9yb290ZnMsIFRydWUpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLmQuZ2V0VmFyKCdNVUxUSUxJQl9URU1QX1JPT1RGUycsIFRydWUpLCBUcnVlKQorICAgICAgICBzZWxmLm1hbmlmZXN0ID0gRHBrZ01hbmlmZXN0KGQsIG1hbmlmZXN0X2RpcikKKyAgICAgICAgc2VsZi5wbSA9IERwa2dQTShkLCBkLmdldFZhcignSU1BR0VfUk9PVEZTJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ1BBQ0tBR0VfQVJDSFMnLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcignRFBLR19BUkNIJywgVHJ1ZSkpCisKKworICAgIGRlZiBfY3JlYXRlKHNlbGYpOgorICAgICAgICBwa2dzX3RvX2luc3RhbGwgPSBzZWxmLm1hbmlmZXN0LnBhcnNlX2luaXRpYWxfbWFuaWZlc3QoKQorICAgICAgICBkZWJfcHJlX3Byb2Nlc3NfY21kcyA9IHNlbGYuZC5nZXRWYXIoJ0RFQl9QUkVQUk9DRVNTX0NPTU1BTkRTJywgVHJ1ZSkKKyAgICAgICAgZGViX3Bvc3RfcHJvY2Vzc19jbWRzID0gc2VsZi5kLmdldFZhcignREVCX1BPU1RQUk9DRVNTX0NPTU1BTkRTJywgVHJ1ZSkKKworICAgICAgICBhbHRfZGlyID0gc2VsZi5kLmV4cGFuZCgiJHtJTUFHRV9ST09URlN9L3Zhci9saWIvZHBrZy9hbHRlcm5hdGl2ZXMiKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoYWx0X2RpcikKKworICAgICAgICAjIHVwZGF0ZSBQTSBpbmRleCBmaWxlcworICAgICAgICBzZWxmLnBtLndyaXRlX2luZGV4KCkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBkZWJfcHJlX3Byb2Nlc3NfY21kcykKKworICAgICAgICBzZWxmLnBtLnVwZGF0ZSgpCisKKyAgICAgICAgZm9yIHBrZ190eXBlIGluIHNlbGYuaW5zdGFsbF9vcmRlcjoKKyAgICAgICAgICAgIGlmIHBrZ190eXBlIGluIHBrZ3NfdG9faW5zdGFsbDoKKyAgICAgICAgICAgICAgICBzZWxmLnBtLmluc3RhbGwocGtnc190b19pbnN0YWxsW3BrZ190eXBlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0ZhbHNlLCBUcnVlXVtwa2dfdHlwZSA9PSBNYW5pZmVzdC5QS0dfVFlQRV9BVFRFTVBUX09OTFldKQorCisgICAgICAgIHNlbGYucG0uaW5zdGFsbF9jb21wbGVtZW50YXJ5KCkKKworICAgICAgICBzZWxmLl9zZXR1cF9kYmdfcm9vdGZzKFsnL3Zhci9saWIvZHBrZyddKQorCisgICAgICAgIHNlbGYucG0uZml4X2Jyb2tlbl9kZXBlbmRlbmNpZXMoKQorCisgICAgICAgIHNlbGYucG0ubWFya19wYWNrYWdlcygiaW5zdGFsbGVkIikKKworICAgICAgICBzZWxmLnBtLnJ1bl9wcmVfcG9zdF9pbnN0YWxscygpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgZGViX3Bvc3RfcHJvY2Vzc19jbWRzKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZGVwZW5kc19saXN0KCk6CisgICAgICAgIHJldHVybiBbJ0RFUExPWV9ESVJfREVCJywgJ0RFQl9TREtfQVJDSCcsICdBUFRDT05GX1RBUkdFVCcsICdBUFRfQVJHUycsICdEUEtHX0FSQ0gnLCAnREVCX1BSRVBST0NFU1NfQ09NTUFORFMnLCAnREVCX1BPU1RQUk9DRVNTX0NPTU1BTkRTJ10KKworICAgIGRlZiBfZ2V0X2RlbGF5ZWRfcG9zdGluc3RzKHNlbGYpOgorICAgICAgICBzdGF0dXNfZmlsZSA9IHNlbGYuaW1hZ2Vfcm9vdGZzICsgIi92YXIvbGliL2Rwa2cvc3RhdHVzIgorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2RlbGF5ZWRfcG9zdGluc3RzX2NvbW1vbihzdGF0dXNfZmlsZSkKKworICAgIGRlZiBfc2F2ZV9wb3N0aW5zdHMoc2VsZik6CisgICAgICAgIGRzdF9wb3N0aW5zdF9kaXIgPSBzZWxmLmQuZXhwYW5kKCIke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L2RlYi1wb3N0aW5zdHMiKQorICAgICAgICBzcmNfcG9zdGluc3RfZGlyID0gc2VsZi5kLmV4cGFuZCgiJHtJTUFHRV9ST09URlN9L3Zhci9saWIvZHBrZy9pbmZvIikKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NhdmVfcG9zdGluc3RzX2NvbW1vbihkc3RfcG9zdGluc3RfZGlyLCBzcmNfcG9zdGluc3RfZGlyKQorCisgICAgZGVmIF9oYW5kbGVfaW50ZXJjZXB0X2ZhaWx1cmUoc2VsZiwgcmVnaXN0ZXJlZF9wa2dzKToKKyAgICAgICAgc2VsZi5wbS5tYXJrX3BhY2thZ2VzKCJ1bnBhY2tlZCIsIHJlZ2lzdGVyZWRfcGtncy5zcGxpdCgpKQorCisgICAgZGVmIF9sb2dfY2hlY2soc2VsZik6CisgICAgICAgIHNlbGYuX2xvZ19jaGVja193YXJuKCkKKyAgICAgICAgc2VsZi5fbG9nX2NoZWNrX2Vycm9yKCkKKworICAgIGRlZiBfY2xlYW51cChzZWxmKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIE9wa2dSb290ZnMoRHBrZ09wa2dSb290ZnMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCBtYW5pZmVzdF9kaXIpOgorICAgICAgICBzdXBlcihPcGtnUm9vdGZzLCBzZWxmKS5fX2luaXRfXyhkKQorICAgICAgICBzZWxmLmxvZ19jaGVja19yZWdleCA9ICcoZXhpdCAxfENvbGxlY3RlZCBlcnJvcnMpJworCisgICAgICAgIHNlbGYubWFuaWZlc3QgPSBPcGtnTWFuaWZlc3QoZCwgbWFuaWZlc3RfZGlyKQorICAgICAgICBzZWxmLm9wa2dfY29uZiA9IHNlbGYuZC5nZXRWYXIoIklQS0dDT05GX1RBUkdFVCIsIFRydWUpCisgICAgICAgIHNlbGYucGtnX2FyY2hzID0gc2VsZi5kLmdldFZhcigiQUxMX01VTFRJTElCX1BBQ0tBR0VfQVJDSFMiLCBUcnVlKQorCisgICAgICAgIHNlbGYuaW5jX29wa2dfaW1hZ2VfZ2VuID0gc2VsZi5kLmdldFZhcignSU5DX0lQS19JTUFHRV9HRU4nLCBUcnVlKSBvciAiIgorICAgICAgICBpZiBzZWxmLl9yZW1vdmVfb2xkX3Jvb3RmcygpOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuaW1hZ2Vfcm9vdGZzLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5wbSA9IE9wa2dQTShkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmltYWdlX3Jvb3RmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcGtnX2NvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGtnX2FyY2hzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5wbSA9IE9wa2dQTShkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmltYWdlX3Jvb3RmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcGtnX2NvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGtnX2FyY2hzKQorICAgICAgICAgICAgc2VsZi5wbS5yZWNvdmVyX3BhY2thZ2luZ19kYXRhKCkKKworICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5kLmdldFZhcignTVVMVElMSUJfVEVNUF9ST09URlMnLCBUcnVlKSwgVHJ1ZSkKKworICAgIGRlZiBfcHJlbGlua19maWxlKHNlbGYsIHJvb3RfZGlyLCBmaWxlbmFtZSk6CisgICAgICAgIGJiLm5vdGUoJ3ByZWxpbmsgJXMgaW4gJXMnICUgKGZpbGVuYW1lLCByb290X2RpcikpCisgICAgICAgIHByZWxpbmtfY2ZnID0gb2UucGF0aC5qb2luKHJvb3RfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZXhwYW5kKCcke3N5c2NvbmZkaXJ9L3ByZWxpbmsuY29uZicpKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocHJlbGlua19jZmcpOgorICAgICAgICAgICAgc2h1dGlsLmNvcHkoc2VsZi5kLmV4cGFuZCgnJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtzeXNjb25mZGlyX25hdGl2ZX0vcHJlbGluay5jb25mJyksCisgICAgICAgICAgICAgICAgICAgICAgICBwcmVsaW5rX2NmZykKKworICAgICAgICBjbWRfcHJlbGluayA9IHNlbGYuZC5leHBhbmQoJyR7U1RBR0lOR19ESVJfTkFUSVZFfSR7c2JpbmRpcl9uYXRpdmV9L3ByZWxpbmsnKQorICAgICAgICBzZWxmLl9leGVjX3NoZWxsX2NtZChbY21kX3ByZWxpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1yb290JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1hbVInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1OJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZXhwYW5kKCcke3N5c2NvbmZkaXJ9L3ByZWxpbmsuY29uZicpXSkKKworICAgICcnJworICAgIENvbXBhcmUgdHdvIGZpbGVzIHdpdGggdGhlIHNhbWUga2V5IHR3aWNlIHRvIHNlZSBpZiB0aGV5IGFyZSBlcXVhbC4KKyAgICBJZiB0aGV5IGFyZSBub3QgZXF1YWwsIGl0IG1lYW5zIHRoZXkgYXJlIGR1cGxpY2F0ZWQgYW5kIGNvbWUgZnJvbQorICAgIGRpZmZlcmVudCBwYWNrYWdlcy4KKyAgICAxc3Q6IENvbWFwcmUgdGhlbSBkaXJlY3RseTsKKyAgICAybmQ6IFdoaWxlIGluY3JlbWVudGFsIGltYWdlIGNyZWF0aW9uIGlzIGVuYWJsZWQsIG9uZSBvZiB0aGUKKyAgICAgICAgIGZpbGVzIGNvdWxkIGJlIHByb2JhbHkgcHJlbGlua2VkIGluIHRoZSBwcmV2aW91cyBpbWFnZQorICAgICAgICAgY3JlYXRpb24gYW5kIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQsIHNvIHdlIG5lZWQgdG8KKyAgICAgICAgIHByZWxpbmsgdGhlIG90aGVyIG9uZSBhbmQgY29tcGFyZSB0aGVtLgorICAgICcnJworICAgIGRlZiBfZmlsZV9lcXVhbChzZWxmLCBrZXksIGYxLCBmMik6CisKKyAgICAgICAgIyBCb3RoIG9mIHRoZW0gYXJlIG5vdCBwcmVsaW5rZWQKKyAgICAgICAgaWYgZmlsZWNtcC5jbXAoZjEsIGYyKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgaWYgc2VsZi5pbWFnZV9yb290ZnMgbm90IGluIGYxOgorICAgICAgICAgICAgc2VsZi5fcHJlbGlua19maWxlKGYxLnJlcGxhY2Uoa2V5LCAnJyksIGYxKQorCisgICAgICAgIGlmIHNlbGYuaW1hZ2Vfcm9vdGZzIG5vdCBpbiBmMjoKKyAgICAgICAgICAgIHNlbGYuX3ByZWxpbmtfZmlsZShmMi5yZXBsYWNlKGtleSwgJycpLCBmMikKKworICAgICAgICAjIEJvdGggb2YgdGhlbSBhcmUgcHJlbGlua2VkCisgICAgICAgIGlmIGZpbGVjbXAuY21wKGYxLCBmMik6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICMgTm90IGVxdWFsCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgIiIiCisgICAgVGhpcyBmdW5jdGlvbiB3YXMgcmV1c2VkIGZyb20gdGhlIG9sZCBpbXBsZW1lbnRhdGlvbi4KKyAgICBTZWUgY29tbWl0OiAiaW1hZ2UuYmJjbGFzczogQWRkZWQgdmFyaWFibGVzIGZvciBtdWx0aWxpYiBzdXBwb3J0LiIgYnkKKyAgICBMaWFuaGFvIEx1LgorICAgICIiIgorICAgIGRlZiBfbXVsdGlsaWJfc2FuaXR5X3Rlc3Qoc2VsZiwgZGlycyk6CisKKyAgICAgICAgYWxsb3dfcmVwbGFjZSA9IHNlbGYuZC5nZXRWYXIoIk1VTFRJTElCUkVfQUxMT1dfUkVQIiwgVHJ1ZSkKKyAgICAgICAgaWYgYWxsb3dfcmVwbGFjZSBpcyBOb25lOgorICAgICAgICAgICAgYWxsb3dfcmVwbGFjZSA9ICIiCisKKyAgICAgICAgYWxsb3dfcmVwID0gcmUuY29tcGlsZShyZS5zdWIoIlx8JCIsICIiLCBhbGxvd19yZXBsYWNlKSkKKyAgICAgICAgZXJyb3JfcHJvbXB0ID0gIk11bHRpbGliIGNoZWNrIGVycm9yOiIKKworICAgICAgICBmaWxlcyA9IHt9CisgICAgICAgIGZvciBkaXIgaW4gZGlyczoKKyAgICAgICAgICAgIGZvciByb290LCBzdWJmb2xkZXJzLCBzdWJmaWxlcyBpbiBvcy53YWxrKGRpcik6CisgICAgICAgICAgICAgICAgZm9yIGZpbGUgaW4gc3ViZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBvcy5wYXRoLmpvaW4ocm9vdCwgZmlsZSkKKyAgICAgICAgICAgICAgICAgICAga2V5ID0gc3RyKG9zLnBhdGguam9pbigiLyIsIG9zLnBhdGgucmVscGF0aChpdGVtLCBkaXIpKSkKKworICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgaWYga2V5IGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgI2NoZWNrIHdoZXRoZXIgdGhlIGZpbGUgaXMgYWxsb3cgdG8gcmVwbGFjZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYWxsb3dfcmVwLm1hdGNoKGtleSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZpbGVzW2tleV0pIGFuZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5leGlzdHMoaXRlbSkgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3Qgc2VsZi5fZmlsZV9lcXVhbChrZXksIGZpbGVzW2tleV0sIGl0ZW0pOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCIlcyBkdXBsaWNhdGUgZmlsZXMgJXMgJXMgaXMgbm90IHRoZSBzYW1lXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yX3Byb21wdCwgaXRlbSwgZmlsZXNba2V5XSkpCisKKyAgICAgICAgICAgICAgICAgICAgI3Bhc3MgdGhlIGNoZWNrLCBhZGQgdG8gbGlzdAorICAgICAgICAgICAgICAgICAgICBpZiB2YWxpZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzW2tleV0gPSBpdGVtCisKKyAgICBkZWYgX211bHRpbGliX3Rlc3RfaW5zdGFsbChzZWxmLCBwa2dzKToKKyAgICAgICAgbWxfdGVtcCA9IHNlbGYuZC5nZXRWYXIoIk1VTFRJTElCX1RFTVBfUk9PVEZTIiwgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG1sX3RlbXApCisKKyAgICAgICAgZGlycyA9IFtzZWxmLmltYWdlX3Jvb3Rmc10KKworICAgICAgICBmb3IgdmFyaWFudCBpbiBzZWxmLmQuZ2V0VmFyKCJNVUxUSUxJQl9WQVJJQU5UUyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgICAgICBtbF90YXJnZXRfcm9vdGZzID0gb3MucGF0aC5qb2luKG1sX3RlbXAsIHZhcmlhbnQpCisKKyAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShtbF90YXJnZXRfcm9vdGZzLCBUcnVlKQorCisgICAgICAgICAgICBtbF9vcGtnX2NvbmYgPSBvcy5wYXRoLmpvaW4obWxfdGVtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50ICsgIi0iICsgb3MucGF0aC5iYXNlbmFtZShzZWxmLm9wa2dfY29uZikpCisKKyAgICAgICAgICAgIG1sX3BtID0gT3BrZ1BNKHNlbGYuZCwgbWxfdGFyZ2V0X3Jvb3RmcywgbWxfb3BrZ19jb25mLCBzZWxmLnBrZ19hcmNocykKKworICAgICAgICAgICAgbWxfcG0udXBkYXRlKCkKKyAgICAgICAgICAgIG1sX3BtLmluc3RhbGwocGtncykKKworICAgICAgICAgICAgZGlycy5hcHBlbmQobWxfdGFyZ2V0X3Jvb3RmcykKKworICAgICAgICBzZWxmLl9tdWx0aWxpYl9zYW5pdHlfdGVzdChkaXJzKQorCisgICAgJycnCisgICAgV2hpbGUgaXBrIGluY3JlbWVudGFsIGltYWdlIGdlbmVyYXRpb24gaXMgZW5hYmxlZCwgaXQgd2lsbCByZW1vdmUgdGhlCisgICAgdW5uZWVkZWQgcGtncyBieSBjb21wYXJpbmcgdGhlIG9sZCBmdWxsIG1hbmlmZXN0IGluIHByZXZpb3VzIGV4aXN0aW5nCisgICAgaW1hZ2UgYW5kIHRoZSBuZXcgZnVsbCBtYW5pZmVzdCBpbiB0aGUgY3VycmVudCBpbWFnZS4KKyAgICAnJycKKyAgICBkZWYgX3JlbW92ZV9leHRyYV9wYWNrYWdlcyhzZWxmLCBwa2dzX2luaXRpYWxfaW5zdGFsbCk6CisgICAgICAgIGlmIHNlbGYuaW5jX29wa2dfaW1hZ2VfZ2VuID09ICIxIjoKKyAgICAgICAgICAgICMgUGFyc2UgZnVsbCBtYW5pZmVzdCBpbiBwcmV2aW91cyBleGlzdGluZyBpbWFnZSBjcmVhdGlvbiBzZXNzaW9uCisgICAgICAgICAgICBvbGRfZnVsbF9tYW5pZmVzdCA9IHNlbGYubWFuaWZlc3QucGFyc2VfZnVsbF9tYW5pZmVzdCgpCisKKyAgICAgICAgICAgICMgQ3JlYXRlIGZ1bGwgbWFuaWZlc3QgZm9yIHRoZSBjdXJyZW50IGltYWdlIHNlc3Npb24sIHRoZSBvbGQgb25lCisgICAgICAgICAgICAjIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIG5ldyBvbmUuCisgICAgICAgICAgICBzZWxmLm1hbmlmZXN0LmNyZWF0ZV9mdWxsKHNlbGYucG0pCisKKyAgICAgICAgICAgICMgUGFyc2UgZnVsbCBtYW5pZmVzdCBpbiBjdXJyZW50IGltYWdlIGNyZWF0aW9uIHNlc3Npb24KKyAgICAgICAgICAgIG5ld19mdWxsX21hbmlmZXN0ID0gc2VsZi5tYW5pZmVzdC5wYXJzZV9mdWxsX21hbmlmZXN0KCkKKworICAgICAgICAgICAgcGtnX3RvX3JlbW92ZSA9IGxpc3QoKQorICAgICAgICAgICAgZm9yIHBrZyBpbiBvbGRfZnVsbF9tYW5pZmVzdDoKKyAgICAgICAgICAgICAgICBpZiBwa2cgbm90IGluIG5ld19mdWxsX21hbmlmZXN0OgorICAgICAgICAgICAgICAgICAgICBwa2dfdG9fcmVtb3ZlLmFwcGVuZChwa2cpCisKKyAgICAgICAgICAgIGlmIHBrZ190b19yZW1vdmUgIT0gW106CisgICAgICAgICAgICAgICAgYmIubm90ZSgnZGVjcmVtZW50YWwgcmVtb3ZlZDogJXMnICUgJyAnLmpvaW4ocGtnX3RvX3JlbW92ZSkpCisgICAgICAgICAgICAgICAgc2VsZi5wbS5yZW1vdmUocGtnX3RvX3JlbW92ZSkKKworICAgICcnJworICAgIENvbXBhcmUgd2l0aCBwcmV2aW91cyBleGlzdGluZyBpbWFnZSBjcmVhdGlvbiwgaWYgc29tZSBjb25kaXRpb25zCisgICAgdHJpZ2dlcmVkLCB0aGUgcHJldmlvdXMgb2xkIGltYWdlIHNob3VsZCBiZSByZW1vdmVkLgorICAgIFRoZSBjb25kaXRpb25zIGluY2x1ZGUgYW55IG9mICdQQUNLQUdFX0VYQ0xVREUsIE5PX1JFQ09NTUVOREFUSU9OUworICAgIGFuZCBCQURfUkVDT01NRU5EQVRJT05TJyBoYXMgYmVlbiBjaGFuZ2VkLgorICAgICcnJworICAgIGRlZiBfcmVtb3ZlX29sZF9yb290ZnMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaW5jX29wa2dfaW1hZ2VfZ2VuICE9ICIxIjoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgdmFyc19saXN0X2ZpbGUgPSBzZWxmLmQuZXhwYW5kKCcke1R9L3ZhcnNfbGlzdCcpCisKKyAgICAgICAgb2xkX3ZhcnNfbGlzdCA9ICIiCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHZhcnNfbGlzdF9maWxlKToKKyAgICAgICAgICAgIG9sZF92YXJzX2xpc3QgPSBvcGVuKHZhcnNfbGlzdF9maWxlLCAncisnKS5yZWFkKCkKKworICAgICAgICBuZXdfdmFyc19saXN0ID0gJyVzOiVzOiVzXG4nICUgXAorICAgICAgICAgICAgICAgICgoc2VsZi5kLmdldFZhcignQkFEX1JFQ09NTUVOREFUSU9OUycsIFRydWUpIG9yICcnKS5zdHJpcCgpLAorICAgICAgICAgICAgICAgICAoc2VsZi5kLmdldFZhcignTk9fUkVDT01NRU5EQVRJT05TJywgVHJ1ZSkgb3IgJycpLnN0cmlwKCksCisgICAgICAgICAgICAgICAgIChzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0VYQ0xVREUnLCBUcnVlKSBvciAnJykuc3RyaXAoKSkKKyAgICAgICAgb3Blbih2YXJzX2xpc3RfZmlsZSwgJ3crJykud3JpdGUobmV3X3ZhcnNfbGlzdCkKKworICAgICAgICBpZiBvbGRfdmFyc19saXN0ICE9IG5ld192YXJzX2xpc3Q6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9jcmVhdGUoc2VsZik6CisgICAgICAgIHBrZ3NfdG9faW5zdGFsbCA9IHNlbGYubWFuaWZlc3QucGFyc2VfaW5pdGlhbF9tYW5pZmVzdCgpCisgICAgICAgIG9wa2dfcHJlX3Byb2Nlc3NfY21kcyA9IHNlbGYuZC5nZXRWYXIoJ09QS0dfUFJFUFJPQ0VTU19DT01NQU5EUycsIFRydWUpCisgICAgICAgIG9wa2dfcG9zdF9wcm9jZXNzX2NtZHMgPSBzZWxmLmQuZ2V0VmFyKCdPUEtHX1BPU1RQUk9DRVNTX0NPTU1BTkRTJywgVHJ1ZSkKKyAgICAgICAgcm9vdGZzX3Bvc3RfaW5zdGFsbF9jbWRzID0gc2VsZi5kLmdldFZhcignUk9PVEZTX1BPU1RJTlNUQUxMX0NPTU1BTkQnLCBUcnVlKQorCisgICAgICAgICMgdXBkYXRlIFBNIGluZGV4IGZpbGVzLCB1bmxlc3MgdXNlcnMgcHJvdmlkZSB0aGVpciBvd24gZmVlZHMKKyAgICAgICAgaWYgKHNlbGYuZC5nZXRWYXIoJ0JVSUxEX0lNQUdFU19GUk9NX0ZFRURTJywgVHJ1ZSkgb3IgIiIpICE9ICIxIjoKKyAgICAgICAgICAgIHNlbGYucG0ud3JpdGVfaW5kZXgoKQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIG9wa2dfcHJlX3Byb2Nlc3NfY21kcykKKworICAgICAgICBzZWxmLnBtLnVwZGF0ZSgpCisKKyAgICAgICAgc2VsZi5wbS5oYW5kbGVfYmFkX3JlY29tbWVuZGF0aW9ucygpCisKKyAgICAgICAgaWYgc2VsZi5pbmNfb3BrZ19pbWFnZV9nZW4gPT0gIjEiOgorICAgICAgICAgICAgc2VsZi5fcmVtb3ZlX2V4dHJhX3BhY2thZ2VzKHBrZ3NfdG9faW5zdGFsbCkKKworICAgICAgICBmb3IgcGtnX3R5cGUgaW4gc2VsZi5pbnN0YWxsX29yZGVyOgorICAgICAgICAgICAgaWYgcGtnX3R5cGUgaW4gcGtnc190b19pbnN0YWxsOgorICAgICAgICAgICAgICAgICMgRm9yIG11bHRpbGliLCB3ZSBwZXJmb3JtIGEgc2FuaXR5IHRlc3QgYmVmb3JlIGZpbmFsIGluc3RhbGwKKyAgICAgICAgICAgICAgICAjIElmIHNhbml0eSB0ZXN0IGZhaWxzLCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgZG8gYSBiYi5mYXRhbCgpCisgICAgICAgICAgICAgICAgIyBhbmQgdGhlIGluc3RhbGxhdGlvbiB3aWxsIHN0b3AKKyAgICAgICAgICAgICAgICBpZiBwa2dfdHlwZSA9PSBNYW5pZmVzdC5QS0dfVFlQRV9NVUxUSUxJQjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbXVsdGlsaWJfdGVzdF9pbnN0YWxsKHBrZ3NfdG9faW5zdGFsbFtwa2dfdHlwZV0pCisKKyAgICAgICAgICAgICAgICBzZWxmLnBtLmluc3RhbGwocGtnc190b19pbnN0YWxsW3BrZ190eXBlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0ZhbHNlLCBUcnVlXVtwa2dfdHlwZSA9PSBNYW5pZmVzdC5QS0dfVFlQRV9BVFRFTVBUX09OTFldKQorCisgICAgICAgIHNlbGYucG0uaW5zdGFsbF9jb21wbGVtZW50YXJ5KCkKKworICAgICAgICBzZWxmLl9zZXR1cF9kYmdfcm9vdGZzKFsnL3Zhci9saWIvb3BrZyddKQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIG9wa2dfcG9zdF9wcm9jZXNzX2NtZHMpCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIHJvb3Rmc19wb3N0X2luc3RhbGxfY21kcykKKworICAgICAgICBpZiBzZWxmLmluY19vcGtnX2ltYWdlX2dlbiA9PSAiMSI6CisgICAgICAgICAgICBzZWxmLnBtLmJhY2t1cF9wYWNrYWdpbmdfZGF0YSgpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9kZXBlbmRzX2xpc3QoKToKKyAgICAgICAgcmV0dXJuIFsnSVBLR0NPTkZfU0RLJywgJ0lQS19GRUVEX1VSSVMnLCAnREVQTE9ZX0RJUl9JUEsnLCAnSVBLR0NPTkZfVEFSR0VUJywgJ0lOQ19JUEtfSU1BR0VfR0VOJywgJ09QS0dfQVJHUycsICdPUEtHTElCRElSJywgJ09QS0dfUFJFUFJPQ0VTU19DT01NQU5EUycsICdPUEtHX1BPU1RQUk9DRVNTX0NPTU1BTkRTJywgJ09QS0dMSUJESVInXQorCisgICAgZGVmIF9nZXRfZGVsYXllZF9wb3N0aW5zdHMoc2VsZik6CisgICAgICAgIHN0YXR1c19maWxlID0gb3MucGF0aC5qb2luKHNlbGYuaW1hZ2Vfcm9vdGZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCdPUEtHTElCRElSJywgVHJ1ZSkuc3RyaXAoJy8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wa2ciLCAic3RhdHVzIikKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9kZWxheWVkX3Bvc3RpbnN0c19jb21tb24oc3RhdHVzX2ZpbGUpCisKKyAgICBkZWYgX3NhdmVfcG9zdGluc3RzKHNlbGYpOgorICAgICAgICBkc3RfcG9zdGluc3RfZGlyID0gc2VsZi5kLmV4cGFuZCgiJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9pcGstcG9zdGluc3RzIikKKyAgICAgICAgc3JjX3Bvc3RpbnN0X2RpciA9IHNlbGYuZC5leHBhbmQoIiR7SU1BR0VfUk9PVEZTfSR7T1BLR0xJQkRJUn0vb3BrZy9pbmZvIikKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NhdmVfcG9zdGluc3RzX2NvbW1vbihkc3RfcG9zdGluc3RfZGlyLCBzcmNfcG9zdGluc3RfZGlyKQorCisgICAgZGVmIF9oYW5kbGVfaW50ZXJjZXB0X2ZhaWx1cmUoc2VsZiwgcmVnaXN0ZXJlZF9wa2dzKToKKyAgICAgICAgc2VsZi5wbS5tYXJrX3BhY2thZ2VzKCJ1bnBhY2tlZCIsIHJlZ2lzdGVyZWRfcGtncy5zcGxpdCgpKQorCisgICAgZGVmIF9sb2dfY2hlY2soc2VsZik6CisgICAgICAgIHNlbGYuX2xvZ19jaGVja193YXJuKCkKKyAgICAgICAgc2VsZi5fbG9nX2NoZWNrX2Vycm9yKCkKKworICAgIGRlZiBfY2xlYW51cChzZWxmKToKKyAgICAgICAgcGFzcworCitkZWYgZ2V0X2NsYXNzX2Zvcl90eXBlKGltZ3R5cGUpOgorICAgIHJldHVybiB7InJwbSI6IFJwbVJvb3RmcywKKyAgICAgICAgICAgICJpcGsiOiBPcGtnUm9vdGZzLAorICAgICAgICAgICAgImRlYiI6IERwa2dSb290ZnN9W2ltZ3R5cGVdCisKK2RlZiB2YXJpYWJsZV9kZXBlbmRzKGQsIG1hbmlmZXN0X2Rpcj1Ob25lKToKKyAgICBpbWdfdHlwZSA9IGQuZ2V0VmFyKCdJTUFHRV9QS0dUWVBFJywgVHJ1ZSkKKyAgICBjbHMgPSBnZXRfY2xhc3NfZm9yX3R5cGUoaW1nX3R5cGUpCisgICAgcmV0dXJuIGNscy5fZGVwZW5kc19saXN0KCkKKworZGVmIGNyZWF0ZV9yb290ZnMoZCwgbWFuaWZlc3RfZGlyPU5vbmUpOgorICAgIGVudl9ia3AgPSBvcy5lbnZpcm9uLmNvcHkoKQorCisgICAgaW1nX3R5cGUgPSBkLmdldFZhcignSU1BR0VfUEtHVFlQRScsIFRydWUpCisgICAgaWYgaW1nX3R5cGUgPT0gInJwbSI6CisgICAgICAgIFJwbVJvb3RmcyhkLCBtYW5pZmVzdF9kaXIpLmNyZWF0ZSgpCisgICAgZWxpZiBpbWdfdHlwZSA9PSAiaXBrIjoKKyAgICAgICAgT3BrZ1Jvb3RmcyhkLCBtYW5pZmVzdF9kaXIpLmNyZWF0ZSgpCisgICAgZWxpZiBpbWdfdHlwZSA9PSAiZGViIjoKKyAgICAgICAgRHBrZ1Jvb3RmcyhkLCBtYW5pZmVzdF9kaXIpLmNyZWF0ZSgpCisKKyAgICBvcy5lbnZpcm9uLmNsZWFyKCkKKyAgICBvcy5lbnZpcm9uLnVwZGF0ZShlbnZfYmtwKQorCisKK2RlZiBpbWFnZV9saXN0X2luc3RhbGxlZF9wYWNrYWdlcyhkLCBmb3JtYXQ9Tm9uZSwgcm9vdGZzX2Rpcj1Ob25lKToKKyAgICBpZiBub3Qgcm9vdGZzX2RpcjoKKyAgICAgICAgcm9vdGZzX2RpciA9IGQuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCBUcnVlKQorCisgICAgaW1nX3R5cGUgPSBkLmdldFZhcignSU1BR0VfUEtHVFlQRScsIFRydWUpCisgICAgaWYgaW1nX3R5cGUgPT0gInJwbSI6CisgICAgICAgIHJldHVybiBScG1Qa2dzTGlzdChkLCByb290ZnNfZGlyKS5saXN0KGZvcm1hdCkKKyAgICBlbGlmIGltZ190eXBlID09ICJpcGsiOgorICAgICAgICByZXR1cm4gT3BrZ1BrZ3NMaXN0KGQsIHJvb3Rmc19kaXIsIGQuZ2V0VmFyKCJJUEtHQ09ORl9UQVJHRVQiLCBUcnVlKSkubGlzdChmb3JtYXQpCisgICAgZWxpZiBpbWdfdHlwZSA9PSAiZGViIjoKKyAgICAgICAgcmV0dXJuIERwa2dQa2dzTGlzdChkLCByb290ZnNfZGlyKS5saXN0KGZvcm1hdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICAiIiIKKyAgICBXZSBzaG91bGQgYmUgYWJsZSB0byBydW4gdGhpcyBhcyBhIHN0YW5kYWxvbmUgc2NyaXB0LCBmcm9tIG91dHNpZGUgYml0YmFrZQorICAgIGVudmlyb25tZW50LgorICAgICIiIgorICAgICIiIgorICAgIFRCRAorICAgICIiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9zZGsucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Nkay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2RhMGYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9zZGsucHkKQEAgLTAsMCArMSwzNDkgQEAKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAorZnJvbSBvZS51dGlscyBpbXBvcnQgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzCitmcm9tIG9lLm1hbmlmZXN0IGltcG9ydCAqCitmcm9tIG9lLnBhY2thZ2VfbWFuYWdlciBpbXBvcnQgKgoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgZ2xvYgorCisKK2NsYXNzIFNkayhvYmplY3QpOgorICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgbWFuaWZlc3RfZGlyKToKKyAgICAgICAgc2VsZi5kID0gZAorICAgICAgICBzZWxmLnNka19vdXRwdXQgPSBzZWxmLmQuZ2V0VmFyKCdTREtfT1VUUFVUJywgVHJ1ZSkKKyAgICAgICAgc2VsZi5zZGtfbmF0aXZlX3BhdGggPSBzZWxmLmQuZ2V0VmFyKCdTREtQQVRITkFUSVZFJywgVHJ1ZSkuc3RyaXAoJy8nKQorICAgICAgICBzZWxmLnRhcmdldF9wYXRoID0gc2VsZi5kLmdldFZhcignU0RLVEFSR0VUU1lTUk9PVCcsIFRydWUpLnN0cmlwKCcvJykKKyAgICAgICAgc2VsZi5zeXNjb25mZGlyID0gc2VsZi5kLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLnN0cmlwKCcvJykKKworICAgICAgICBzZWxmLnNka190YXJnZXRfc3lzcm9vdCA9IG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsIHNlbGYudGFyZ2V0X3BhdGgpCisgICAgICAgIHNlbGYuc2RrX2hvc3Rfc3lzcm9vdCA9IHNlbGYuc2RrX291dHB1dAorCisgICAgICAgIGlmIG1hbmlmZXN0X2RpciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5tYW5pZmVzdF9kaXIgPSBzZWxmLmQuZ2V0VmFyKCJTREtfRElSIiwgVHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubWFuaWZlc3RfZGlyID0gbWFuaWZlc3RfZGlyCisKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuc2RrX291dHB1dCwgVHJ1ZSkKKworICAgICAgICBzZWxmLmluc3RhbGxfb3JkZXIgPSBNYW5pZmVzdC5JTlNUQUxMX09SREVSCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX3BvcHVsYXRlKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcG9wdWxhdGUoc2VsZik6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLnNka19vdXRwdXQpCisKKyAgICAgICAgIyBjYWxsIGJhY2tlbmQgZGVwZW5kZW50IGltcGxlbWVudGF0aW9uCisgICAgICAgIHNlbGYuX3BvcHVsYXRlKCkKKworICAgICAgICAjIERvbid0IHNoaXAgYW55IGxpYkdMIGluIHRoZSBTREsKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsIHNlbGYuc2RrX25hdGl2ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ2xpYmRpcl9uYXRpdmVzZGsnLCBUcnVlKS5zdHJpcCgnLycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWJHTCoiKSkKKworICAgICAgICAjIEZpeCBvciByZW1vdmUgYnJva2VuIC5sYSBmaWxlcworICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgc2VsZi5zZGtfbmF0aXZlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignbGliZGlyX25hdGl2ZXNkaycsIFRydWUpLnN0cmlwKCcvJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIioubGEiKSkKKworICAgICAgICAjIExpbmsgdGhlIGxkLnNvLmNhY2hlIGZpbGUgaW50byB0aGUgaG9zdHMgZmlsZXN5c3RlbQorICAgICAgICBsaW5rX25hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCBzZWxmLnNka19uYXRpdmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3lzY29uZmRpciwgImxkLnNvLmNhY2hlIikKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShsaW5rX25hbWUpKQorICAgICAgICBvcy5zeW1saW5rKCIvZXRjL2xkLnNvLmNhY2hlIiwgbGlua19uYW1lKQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIHNlbGYuZC5nZXRWYXIoJ1NES19QT1NUUFJPQ0VTU19DT01NQU5EJywgVHJ1ZSkpCisKKworY2xhc3MgUnBtU2RrKFNkayk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIG1hbmlmZXN0X2Rpcj1Ob25lKToKKyAgICAgICAgc3VwZXIoUnBtU2RrLCBzZWxmKS5fX2luaXRfXyhkLCBtYW5pZmVzdF9kaXIpCisKKyAgICAgICAgc2VsZi50YXJnZXRfbWFuaWZlc3QgPSBScG1NYW5pZmVzdChkLCBzZWxmLm1hbmlmZXN0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW5pZmVzdC5NQU5JRkVTVF9UWVBFX1NES19UQVJHRVQpCisgICAgICAgIHNlbGYuaG9zdF9tYW5pZmVzdCA9IFJwbU1hbmlmZXN0KGQsIHNlbGYubWFuaWZlc3RfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW5pZmVzdC5NQU5JRkVTVF9UWVBFX1NES19IT1NUKQorCisgICAgICAgIHRhcmdldF9wcm92aWRlbmFtZSA9IFsnL2Jpbi9zaCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL2Jpbi9iYXNoJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvdXNyL2Jpbi9lbnYnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy91c3IvYmluL3BlcmwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BrZ2NvbmZpZycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKworICAgICAgICBzZWxmLnRhcmdldF9wbSA9IFJwbVBNKGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZGtfdGFyZ2V0X3N5c3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignVEFSR0VUX1ZFTkRPUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0YXJnZXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9wcm92aWRlbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICBzZGtfcHJvdmlkZW5hbWUgPSBbJy9iaW4vc2gnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9iaW4vYmFzaCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3Vzci9iaW4vZW52JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcvdXNyL2Jpbi9wZXJsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdwa2djb25maWcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpYkdMLnNvKCkoNjRiaXQpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaWJHTC5zbycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKworICAgICAgICBzZWxmLmhvc3RfcG0gPSBScG1QTShkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNka19ob3N0X3N5c3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ1NES19WRU5ET1InLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hvc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZGtfcHJvdmlkZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTREtfUEFDS0FHRV9BUkNIUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTREtfT1MiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgIGRlZiBfcG9wdWxhdGVfc3lzcm9vdChzZWxmLCBwbSwgbWFuaWZlc3QpOgorICAgICAgICBwa2dzX3RvX2luc3RhbGwgPSBtYW5pZmVzdC5wYXJzZV9pbml0aWFsX21hbmlmZXN0KCkKKworICAgICAgICBwbS5jcmVhdGVfY29uZmlncygpCisgICAgICAgIHBtLndyaXRlX2luZGV4KCkKKyAgICAgICAgcG0uZHVtcF9hbGxfYXZhaWxhYmxlX3BrZ3MoKQorICAgICAgICBwbS51cGRhdGUoKQorCisgICAgICAgIHBrZ3MgPSBbXQorICAgICAgICBwa2dzX2F0dGVtcHQgPSBbXQorICAgICAgICBmb3IgcGtnX3R5cGUgaW4gcGtnc190b19pbnN0YWxsOgorICAgICAgICAgICAgaWYgcGtnX3R5cGUgPT0gTWFuaWZlc3QuUEtHX1RZUEVfQVRURU1QVF9PTkxZOgorICAgICAgICAgICAgICAgIHBrZ3NfYXR0ZW1wdCArPSBwa2dzX3RvX2luc3RhbGxbcGtnX3R5cGVdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBrZ3MgKz0gcGtnc190b19pbnN0YWxsW3BrZ190eXBlXQorCisgICAgICAgIHBtLmluc3RhbGwocGtncykKKworICAgICAgICBwbS5pbnN0YWxsKHBrZ3NfYXR0ZW1wdCwgVHJ1ZSkKKworICAgIGRlZiBfcG9wdWxhdGUoc2VsZik6CisgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgVEFSR0VUIHBhY2thZ2VzIikKKyAgICAgICAgc2VsZi5fcG9wdWxhdGVfc3lzcm9vdChzZWxmLnRhcmdldF9wbSwgc2VsZi50YXJnZXRfbWFuaWZlc3QpCisKKyAgICAgICAgc2VsZi50YXJnZXRfcG0uaW5zdGFsbF9jb21wbGVtZW50YXJ5KHNlbGYuZC5nZXRWYXIoJ1NES0lNQUdFX0lOU1RBTExfQ09NUExFTUVOVEFSWScsIFRydWUpKQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIHNlbGYuZC5nZXRWYXIoIlBPUFVMQVRFX1NES19QT1NUX1RBUkdFVF9DT01NQU5EIiwgVHJ1ZSkpCisKKyAgICAgICAgc2VsZi50YXJnZXRfcG0ucmVtb3ZlX3BhY2thZ2luZ19kYXRhKCkKKworICAgICAgICBiYi5ub3RlKCJJbnN0YWxsaW5nIE5BVElWRVNESyBwYWNrYWdlcyIpCisgICAgICAgIHNlbGYuX3BvcHVsYXRlX3N5c3Jvb3Qoc2VsZi5ob3N0X3BtLCBzZWxmLmhvc3RfbWFuaWZlc3QpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgc2VsZi5kLmdldFZhcigiUE9QVUxBVEVfU0RLX1BPU1RfSE9TVF9DT01NQU5EIiwgVHJ1ZSkpCisKKyAgICAgICAgc2VsZi5ob3N0X3BtLnJlbW92ZV9wYWNrYWdpbmdfZGF0YSgpCisKKyAgICAgICAgIyBNb3ZlIGhvc3QgUlBNIGxpYnJhcnkgZGF0YQorICAgICAgICBuYXRpdmVfcnBtX3N0YXRlX2RpciA9IG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2RrX25hdGl2ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCdsb2NhbHN0YXRlZGlyX25hdGl2ZXNkaycsIFRydWUpLnN0cmlwKCcvJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicnBtIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihuYXRpdmVfcnBtX3N0YXRlX2RpcikKKyAgICAgICAgZm9yIGYgaW4gZ2xvYi5nbG9iKG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJwbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIioiKSk6CisgICAgICAgICAgICBiYi51dGlscy5tb3ZlZmlsZShmLCBuYXRpdmVfcnBtX3N0YXRlX2RpcikKKworICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgInZhciIpLCBUcnVlKQorCisgICAgICAgICMgTW92ZSBob3N0IHN5c2NvbmZpZyBkYXRhCisgICAgICAgIG5hdGl2ZV9zeXNjb25mX2RpciA9IG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNka19uYXRpdmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ3N5c2NvbmZkaXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlKS5zdHJpcCgnLycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIobmF0aXZlX3N5c2NvbmZfZGlyKQorICAgICAgICBmb3IgZiBpbiBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgImV0YyIsICIqIikpOgorICAgICAgICAgICAgYmIudXRpbHMubW92ZWZpbGUoZiwgbmF0aXZlX3N5c2NvbmZfZGlyKQorICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgImV0YyIpLCBUcnVlKQorCisKK2NsYXNzIE9wa2dTZGsoU2RrKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgbWFuaWZlc3RfZGlyPU5vbmUpOgorICAgICAgICBzdXBlcihPcGtnU2RrLCBzZWxmKS5fX2luaXRfXyhkLCBtYW5pZmVzdF9kaXIpCisKKyAgICAgICAgc2VsZi50YXJnZXRfY29uZiA9IHNlbGYuZC5nZXRWYXIoIklQS0dDT05GX1RBUkdFVCIsIFRydWUpCisgICAgICAgIHNlbGYuaG9zdF9jb25mID0gc2VsZi5kLmdldFZhcigiSVBLR0NPTkZfU0RLIiwgVHJ1ZSkKKworICAgICAgICBzZWxmLnRhcmdldF9tYW5pZmVzdCA9IE9wa2dNYW5pZmVzdChkLCBzZWxmLm1hbmlmZXN0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFuaWZlc3QuTUFOSUZFU1RfVFlQRV9TREtfVEFSR0VUKQorICAgICAgICBzZWxmLmhvc3RfbWFuaWZlc3QgPSBPcGtnTWFuaWZlc3QoZCwgc2VsZi5tYW5pZmVzdF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW5pZmVzdC5NQU5JRkVTVF9UWVBFX1NES19IT1NUKQorCisgICAgICAgIHNlbGYudGFyZ2V0X3BtID0gT3BrZ1BNKGQsIHNlbGYuc2RrX3RhcmdldF9zeXNyb290LCBzZWxmLnRhcmdldF9jb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCJBTExfTVVMVElMSUJfUEFDS0FHRV9BUkNIUyIsIFRydWUpKQorCisgICAgICAgIHNlbGYuaG9zdF9wbSA9IE9wa2dQTShkLCBzZWxmLnNka19ob3N0X3N5c3Jvb3QsIHNlbGYuaG9zdF9jb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcigiU0RLX1BBQ0tBR0VfQVJDSFMiLCBUcnVlKSkKKworICAgIGRlZiBfcG9wdWxhdGVfc3lzcm9vdChzZWxmLCBwbSwgbWFuaWZlc3QpOgorICAgICAgICBwa2dzX3RvX2luc3RhbGwgPSBtYW5pZmVzdC5wYXJzZV9pbml0aWFsX21hbmlmZXN0KCkKKworICAgICAgICBpZiAoc2VsZi5kLmdldFZhcignQlVJTERfSU1BR0VTX0ZST01fRkVFRFMnLCBUcnVlKSBvciAiIikgIT0gIjEiOgorICAgICAgICAgICAgcG0ud3JpdGVfaW5kZXgoKQorCisgICAgICAgIHBtLnVwZGF0ZSgpCisKKyAgICAgICAgcGtncyA9IFtdCisgICAgICAgIHBrZ3NfYXR0ZW1wdCA9IFtdCisgICAgICAgIGZvciBwa2dfdHlwZSBpbiBwa2dzX3RvX2luc3RhbGw6CisgICAgICAgICAgICBpZiBwa2dfdHlwZSA9PSBNYW5pZmVzdC5QS0dfVFlQRV9BVFRFTVBUX09OTFk6CisgICAgICAgICAgICAgICAgcGtnc19hdHRlbXB0ICs9IHBrZ3NfdG9faW5zdGFsbFtwa2dfdHlwZV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGtncyArPSBwa2dzX3RvX2luc3RhbGxbcGtnX3R5cGVdCisKKyAgICAgICAgcG0uaW5zdGFsbChwa2dzKQorCisgICAgICAgIHBtLmluc3RhbGwocGtnc19hdHRlbXB0LCBUcnVlKQorCisgICAgZGVmIF9wb3B1bGF0ZShzZWxmKToKKyAgICAgICAgYmIubm90ZSgiSW5zdGFsbGluZyBUQVJHRVQgcGFja2FnZXMiKQorICAgICAgICBzZWxmLl9wb3B1bGF0ZV9zeXNyb290KHNlbGYudGFyZ2V0X3BtLCBzZWxmLnRhcmdldF9tYW5pZmVzdCkKKworICAgICAgICBzZWxmLnRhcmdldF9wbS5pbnN0YWxsX2NvbXBsZW1lbnRhcnkoc2VsZi5kLmdldFZhcignU0RLSU1BR0VfSU5TVEFMTF9DT01QTEVNRU5UQVJZJywgVHJ1ZSkpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgc2VsZi5kLmdldFZhcigiUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkQiLCBUcnVlKSkKKworICAgICAgICBiYi5ub3RlKCJJbnN0YWxsaW5nIE5BVElWRVNESyBwYWNrYWdlcyIpCisgICAgICAgIHNlbGYuX3BvcHVsYXRlX3N5c3Jvb3Qoc2VsZi5ob3N0X3BtLCBzZWxmLmhvc3RfbWFuaWZlc3QpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgc2VsZi5kLmdldFZhcigiUE9QVUxBVEVfU0RLX1BPU1RfSE9TVF9DT01NQU5EIiwgVHJ1ZSkpCisKKyAgICAgICAgdGFyZ2V0X3N5c2NvbmZkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5zZGtfdGFyZ2V0X3N5c3Jvb3QsIHNlbGYuc3lzY29uZmRpcikKKyAgICAgICAgaG9zdF9zeXNjb25mZGlyID0gb3MucGF0aC5qb2luKHNlbGYuc2RrX2hvc3Rfc3lzcm9vdCwgc2VsZi5zeXNjb25mZGlyKQorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih0YXJnZXRfc3lzY29uZmRpcikKKyAgICAgICAgc2h1dGlsLmNvcHkoc2VsZi50YXJnZXRfY29uZiwgdGFyZ2V0X3N5c2NvbmZkaXIpCisgICAgICAgIG9zLmNobW9kKG9zLnBhdGguam9pbih0YXJnZXRfc3lzY29uZmRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUoc2VsZi50YXJnZXRfY29uZikpLCAwNjQ0KQorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihob3N0X3N5c2NvbmZkaXIpCisgICAgICAgIHNodXRpbC5jb3B5KHNlbGYuaG9zdF9jb25mLCBob3N0X3N5c2NvbmZkaXIpCisgICAgICAgIG9zLmNobW9kKG9zLnBhdGguam9pbihob3N0X3N5c2NvbmZkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKHNlbGYuaG9zdF9jb25mKSksIDA2NDQpCisKKyAgICAgICAgbmF0aXZlX29wa2dfc3RhdGVfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgc2VsZi5zZGtfbmF0aXZlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCdsb2NhbHN0YXRlZGlyX25hdGl2ZXNkaycsIFRydWUpLnN0cmlwKCcvJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGliIiwgIm9wa2ciKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIobmF0aXZlX29wa2dfc3RhdGVfZGlyKQorICAgICAgICBmb3IgZiBpbiBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgInZhciIsICJsaWIiLCAib3BrZyIsICIqIikpOgorICAgICAgICAgICAgYmIudXRpbHMubW92ZWZpbGUoZiwgbmF0aXZlX29wa2dfc3RhdGVfZGlyKQorCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCAidmFyIiksIFRydWUpCisKKworY2xhc3MgRHBrZ1NkayhTZGspOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCBtYW5pZmVzdF9kaXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKERwa2dTZGssIHNlbGYpLl9faW5pdF9fKGQsIG1hbmlmZXN0X2RpcikKKworICAgICAgICBzZWxmLnRhcmdldF9jb25mX2RpciA9IG9zLnBhdGguam9pbihzZWxmLmQuZ2V0VmFyKCJBUFRDT05GX1RBUkdFVCIsIFRydWUpLCAiYXB0IikKKyAgICAgICAgc2VsZi5ob3N0X2NvbmZfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZC5nZXRWYXIoIkFQVENPTkZfVEFSR0VUIiwgVHJ1ZSksICJhcHQtc2RrIikKKworICAgICAgICBzZWxmLnRhcmdldF9tYW5pZmVzdCA9IERwa2dNYW5pZmVzdChkLCBzZWxmLm1hbmlmZXN0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFuaWZlc3QuTUFOSUZFU1RfVFlQRV9TREtfVEFSR0VUKQorICAgICAgICBzZWxmLmhvc3RfbWFuaWZlc3QgPSBEcGtnTWFuaWZlc3QoZCwgc2VsZi5tYW5pZmVzdF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW5pZmVzdC5NQU5JRkVTVF9UWVBFX1NES19IT1NUKQorCisgICAgICAgIHNlbGYudGFyZ2V0X3BtID0gRHBrZ1BNKGQsIHNlbGYuc2RrX3RhcmdldF9zeXNyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCJQQUNLQUdFX0FSQ0hTIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoIkRQS0dfQVJDSCIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhcmdldF9jb25mX2RpcikKKworICAgICAgICBzZWxmLmhvc3RfcG0gPSBEcGtnUE0oZCwgc2VsZi5zZGtfaG9zdF9zeXNyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcigiU0RLX1BBQ0tBR0VfQVJDSFMiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoIkRFQl9TREtfQVJDSCIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ob3N0X2NvbmZfZGlyKQorCisgICAgZGVmIF9jb3B5X2FwdF9kaXJfdG8oc2VsZiwgZHN0X2Rpcik6CisgICAgICAgIHN0YWdpbmdfZXRjZGlyX25hdGl2ZSA9IHNlbGYuZC5nZXRWYXIoIlNUQUdJTkdfRVRDRElSX05BVElWRSIsIFRydWUpCisKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKGRzdF9kaXIsIFRydWUpCisKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKG9zLnBhdGguam9pbihzdGFnaW5nX2V0Y2Rpcl9uYXRpdmUsICJhcHQiKSwgZHN0X2RpcikKKworICAgIGRlZiBfcG9wdWxhdGVfc3lzcm9vdChzZWxmLCBwbSwgbWFuaWZlc3QpOgorICAgICAgICBwa2dzX3RvX2luc3RhbGwgPSBtYW5pZmVzdC5wYXJzZV9pbml0aWFsX21hbmlmZXN0KCkKKworICAgICAgICBwbS53cml0ZV9pbmRleCgpCisgICAgICAgIHBtLnVwZGF0ZSgpCisKKyAgICAgICAgcGtncyA9IFtdCisgICAgICAgIHBrZ3NfYXR0ZW1wdCA9IFtdCisgICAgICAgIGZvciBwa2dfdHlwZSBpbiBwa2dzX3RvX2luc3RhbGw6CisgICAgICAgICAgICBpZiBwa2dfdHlwZSA9PSBNYW5pZmVzdC5QS0dfVFlQRV9BVFRFTVBUX09OTFk6CisgICAgICAgICAgICAgICAgcGtnc19hdHRlbXB0ICs9IHBrZ3NfdG9faW5zdGFsbFtwa2dfdHlwZV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGtncyArPSBwa2dzX3RvX2luc3RhbGxbcGtnX3R5cGVdCisKKyAgICAgICAgcG0uaW5zdGFsbChwa2dzKQorCisgICAgICAgIHBtLmluc3RhbGwocGtnc19hdHRlbXB0LCBUcnVlKQorCisgICAgZGVmIF9wb3B1bGF0ZShzZWxmKToKKyAgICAgICAgYmIubm90ZSgiSW5zdGFsbGluZyBUQVJHRVQgcGFja2FnZXMiKQorICAgICAgICBzZWxmLl9wb3B1bGF0ZV9zeXNyb290KHNlbGYudGFyZ2V0X3BtLCBzZWxmLnRhcmdldF9tYW5pZmVzdCkKKworICAgICAgICBzZWxmLnRhcmdldF9wbS5pbnN0YWxsX2NvbXBsZW1lbnRhcnkoc2VsZi5kLmdldFZhcignU0RLSU1BR0VfSU5TVEFMTF9DT01QTEVNRU5UQVJZJywgVHJ1ZSkpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgc2VsZi5kLmdldFZhcigiUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkQiLCBUcnVlKSkKKworICAgICAgICBzZWxmLl9jb3B5X2FwdF9kaXJfdG8ob3MucGF0aC5qb2luKHNlbGYuc2RrX3RhcmdldF9zeXNyb290LCAiZXRjIiwgImFwdCIpKQorCisgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgTkFUSVZFU0RLIHBhY2thZ2VzIikKKyAgICAgICAgc2VsZi5fcG9wdWxhdGVfc3lzcm9vdChzZWxmLmhvc3RfcG0sIHNlbGYuaG9zdF9tYW5pZmVzdCkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBzZWxmLmQuZ2V0VmFyKCJQT1BVTEFURV9TREtfUE9TVF9IT1NUX0NPTU1BTkQiLCBUcnVlKSkKKworICAgICAgICBzZWxmLl9jb3B5X2FwdF9kaXJfdG8ob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgc2VsZi5zZGtfbmF0aXZlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV0YyIsICJhcHQiKSkKKworICAgICAgICBuYXRpdmVfZHBrZ19zdGF0ZV9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCBzZWxmLnNka19uYXRpdmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YXIiLCAibGliIiwgImRwa2ciKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIobmF0aXZlX2Rwa2dfc3RhdGVfZGlyKQorICAgICAgICBmb3IgZiBpbiBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgInZhciIsICJsaWIiLCAiZHBrZyIsICIqIikpOgorICAgICAgICAgICAgYmIudXRpbHMubW92ZWZpbGUoZiwgbmF0aXZlX2Rwa2dfc3RhdGVfZGlyKQorCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCAidmFyIiksIFRydWUpCisKKworZGVmIHNka19saXN0X2luc3RhbGxlZF9wYWNrYWdlcyhkLCB0YXJnZXQsIGZvcm1hdD1Ob25lLCByb290ZnNfZGlyPU5vbmUpOgorICAgIGlmIHJvb3Rmc19kaXIgaXMgTm9uZToKKyAgICAgICAgc2RrX291dHB1dCA9IGQuZ2V0VmFyKCdTREtfT1VUUFVUJywgVHJ1ZSkKKyAgICAgICAgdGFyZ2V0X3BhdGggPSBkLmdldFZhcignU0RLVEFSR0VUU1lTUk9PVCcsIFRydWUpLnN0cmlwKCcvJykKKworICAgICAgICByb290ZnNfZGlyID0gW3Nka19vdXRwdXQsIG9zLnBhdGguam9pbihzZGtfb3V0cHV0LCB0YXJnZXRfcGF0aCldW3RhcmdldCBpcyBUcnVlXQorCisgICAgaW1nX3R5cGUgPSBkLmdldFZhcignSU1BR0VfUEtHVFlQRScsIFRydWUpCisgICAgaWYgaW1nX3R5cGUgPT0gInJwbSI6CisgICAgICAgIGFyY2hfdmFyID0gWyJTREtfUEFDS0FHRV9BUkNIUyIsIE5vbmVdW3RhcmdldCBpcyBUcnVlXQorICAgICAgICBvc192YXIgPSBbIlNES19PUyIsIE5vbmVdW3RhcmdldCBpcyBUcnVlXQorICAgICAgICByZXR1cm4gUnBtUGtnc0xpc3QoZCwgcm9vdGZzX2RpciwgYXJjaF92YXIsIG9zX3ZhcikubGlzdChmb3JtYXQpCisgICAgZWxpZiBpbWdfdHlwZSA9PSAiaXBrIjoKKyAgICAgICAgY29uZl9maWxlX3ZhciA9IFsiSVBLR0NPTkZfU0RLIiwgIklQS0dDT05GX1RBUkdFVCJdW3RhcmdldCBpcyBUcnVlXQorICAgICAgICByZXR1cm4gT3BrZ1BrZ3NMaXN0KGQsIHJvb3Rmc19kaXIsIGQuZ2V0VmFyKGNvbmZfZmlsZV92YXIsIFRydWUpKS5saXN0KGZvcm1hdCkKKyAgICBlbGlmIGltZ190eXBlID09ICJkZWIiOgorICAgICAgICByZXR1cm4gRHBrZ1BrZ3NMaXN0KGQsIHJvb3Rmc19kaXIpLmxpc3QoZm9ybWF0KQorCitkZWYgcG9wdWxhdGVfc2RrKGQsIG1hbmlmZXN0X2Rpcj1Ob25lKToKKyAgICBlbnZfYmtwID0gb3MuZW52aXJvbi5jb3B5KCkKKworICAgIGltZ190eXBlID0gZC5nZXRWYXIoJ0lNQUdFX1BLR1RZUEUnLCBUcnVlKQorICAgIGlmIGltZ190eXBlID09ICJycG0iOgorICAgICAgICBScG1TZGsoZCwgbWFuaWZlc3RfZGlyKS5wb3B1bGF0ZSgpCisgICAgZWxpZiBpbWdfdHlwZSA9PSAiaXBrIjoKKyAgICAgICAgT3BrZ1NkayhkLCBtYW5pZmVzdF9kaXIpLnBvcHVsYXRlKCkKKyAgICBlbGlmIGltZ190eXBlID09ICJkZWIiOgorICAgICAgICBEcGtnU2RrKGQsIG1hbmlmZXN0X2RpcikucG9wdWxhdGUoKQorCisgICAgb3MuZW52aXJvbi5jbGVhcigpCisgICAgb3MuZW52aXJvbi51cGRhdGUoZW52X2JrcCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBwYXNzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL3NzdGF0ZXNpZy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2Uvc3N0YXRlc2lnLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNDY3MTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3NzdGF0ZXNpZy5weQpAQCAtMCwwICsxLDI5MSBAQAoraW1wb3J0IGJiLnNpZ2dlbgorCitkZWYgc3N0YXRlX3J1bmRlcGZpbHRlcihzaWdnZW4sIGZuLCByZWNpcGVuYW1lLCB0YXNrLCBkZXAsIGRlcG5hbWUsIGRhdGFDYWNoZSk6CisgICAgIyBSZXR1cm4gVHJ1ZSBpZiB3ZSBzaG91bGQga2VlcCB0aGUgZGVwZW5kZW5jeSwgRmFsc2UgdG8gZHJvcCBpdAorICAgIGRlZiBpc05hdGl2ZSh4KToKKyAgICAgICAgcmV0dXJuIHguZW5kc3dpdGgoIi1uYXRpdmUiKQorICAgIGRlZiBpc0Nyb3NzKHgpOgorICAgICAgICByZXR1cm4gIi1jcm9zcy0iIGluIHgKKyAgICBkZWYgaXNOYXRpdmVTREsoeCk6CisgICAgICAgIHJldHVybiB4LnN0YXJ0c3dpdGgoIm5hdGl2ZXNkay0iKQorICAgIGRlZiBpc0tlcm5lbChmbik6CisgICAgICAgIGluaGVyaXRzID0gIiAiLmpvaW4oZGF0YUNhY2hlLmluaGVyaXRzW2ZuXSkKKyAgICAgICAgcmV0dXJuIGluaGVyaXRzLmZpbmQoIi9tb2R1bGUtYmFzZS5iYmNsYXNzIikgIT0gLTEgb3IgaW5oZXJpdHMuZmluZCgiL2xpbnV4LWtlcm5lbC1iYXNlLmJiY2xhc3MiKSAhPSAtMQorICAgIGRlZiBpc1BhY2thZ2VHcm91cChmbik6CisgICAgICAgIGluaGVyaXRzID0gIiAiLmpvaW4oZGF0YUNhY2hlLmluaGVyaXRzW2ZuXSkKKyAgICAgICAgcmV0dXJuICIvcGFja2FnZWdyb3VwLmJiY2xhc3MiIGluIGluaGVyaXRzCisgICAgZGVmIGlzQWxsQXJjaChmbik6CisgICAgICAgIGluaGVyaXRzID0gIiAiLmpvaW4oZGF0YUNhY2hlLmluaGVyaXRzW2ZuXSkKKyAgICAgICAgcmV0dXJuICIvYWxsYXJjaC5iYmNsYXNzIiBpbiBpbmhlcml0cworICAgIGRlZiBpc0ltYWdlKGZuKToKKyAgICAgICAgcmV0dXJuICIvaW1hZ2UuYmJjbGFzcyIgaW4gIiAiLmpvaW4oZGF0YUNhY2hlLmluaGVyaXRzW2ZuXSkKKworICAgICMgQWx3YXlzIGluY2x1ZGUgb3VyIG93biBpbnRlci10YXNrIGRlcGVuZGVuY2llcworICAgIGlmIHJlY2lwZW5hbWUgPT0gZGVwbmFtZToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgICMgUXVpbHQgKHBhdGNoIGFwcGxpY2F0aW9uKSBjaGFuZ2luZyBpc24ndCBsaWtlbHkgdG8gYWZmZWN0IGFueXRoaW5nCisgICAgZXhjbHVkZWxpc3QgPSBbJ3F1aWx0LW5hdGl2ZScsICdzdWJ2ZXJzaW9uLW5hdGl2ZScsICdnaXQtbmF0aXZlJ10KKyAgICBpZiBkZXBuYW1lIGluIGV4Y2x1ZGVsaXN0IGFuZCByZWNpcGVuYW1lICE9IGRlcG5hbWU6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgIyBFeGNsdWRlIHdlbGwgZGVmaW5lZCByZWNpcGUtPmRlcGVuZGVuY3kKKyAgICBpZiAiJXMtPiVzIiAlIChyZWNpcGVuYW1lLCBkZXBuYW1lKSBpbiBzaWdnZW4uc2FmZXJlY2lwZWRlcHM6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgIyBEb24ndCBjaGFuZ2UgbmF0aXZlL2Nyb3NzL25hdGl2ZXNkayByZWNpcGUgZGVwZW5kZW5jaWVzIGFueSBmdXJ0aGVyCisgICAgaWYgaXNOYXRpdmUocmVjaXBlbmFtZSkgb3IgaXNDcm9zcyhyZWNpcGVuYW1lKSBvciBpc05hdGl2ZVNESyhyZWNpcGVuYW1lKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgICMgT25seSB0YXJnZXQgcGFja2FnZXMgYmV5b25kIGhlcmUKKworICAgICMgYWxsYXJjaCBwYWNrYWdlZ3JvdXBzIGFyZSBhc3N1bWVkIHRvIGhhdmUgd2VsbCBiZWhhdmVkIG5hbWVzIHdoaWNoIGRvbid0IGNoYW5nZSBiZXR3ZWVuIGFyY2hpdGVjdXJlcy90dW5lcworICAgIGlmIGlzUGFja2FnZUdyb3VwKGZuKSBhbmQgaXNBbGxBcmNoKGZuKToKKyAgICAgICAgcmV0dXJuIEZhbHNlICAKKworICAgICMgRXhjbHVkZSB3ZWxsIGRlZmluZWQgbWFjaGluZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB3aGljaCBkb24ndCBjaGFuZ2UgQUJJCisgICAgaWYgZGVwbmFtZSBpbiBzaWdnZW4uYWJpc2FmZXJlY2lwZXMgYW5kIG5vdCBpc0ltYWdlKGZuKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAjIEtlcm5lbCBtb2R1bGVzIGFyZSB3ZWxsIG5hbWVzcGFjZWQuIFdlIGRvbid0IHdhbnQgdG8gZGVwZW5kIG9uIHRoZSBrZXJuZWwncyBjaGVja3N1bQorICAgICMgaWYgd2UncmUganVzdCBkb2luZyBhbiBSUkVDT01NRU5EU194eHggPSAia2VybmVsLW1vZHVsZS0qIiwgbm90IGxlYXN0IGJlY2F1c2UgdGhlIGNoZWNrc3VtCisgICAgIyBpcyBtYWNoaW5lIHNwZWNpZmljLgorICAgICMgVGhlcmVmb3JlIGlmIHdlJ3JlIG5vdCBhIGtlcm5lbCBvciBhIG1vZHVsZSByZWNpcGUgKGluaGVyaXRpbmcgdGhlIGtlcm5lbCBjbGFzc2VzKQorICAgICMgYW5kIHdlIHJlY2NvbWVuZCBhIGtlcm5lbC1tb2R1bGUsIHdlIGV4Y2x1ZGUgdGhlIGRlcGVuZGVuY3kuCisgICAgZGVwZm4gPSBkZXAucnNwbGl0KCIuIiwgMSlbMF0KKyAgICBpZiBkYXRhQ2FjaGUgYW5kIGlzS2VybmVsKGRlcGZuKSBhbmQgbm90IGlzS2VybmVsKGZuKToKKyAgICAgICAgZm9yIHBrZyBpbiBkYXRhQ2FjaGUucnVucmVjc1tmbl06CisgICAgICAgICAgICBpZiAiICIuam9pbihkYXRhQ2FjaGUucnVucmVjc1tmbl1bcGtnXSkuZmluZCgia2VybmVsLW1vZHVsZS0iKSAhPSAtMToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICMgRGVmYXVsdCB0byBrZWVwIGRlcGVuZGVuY2llcworICAgIHJldHVybiBUcnVlCisKK2RlZiBzc3RhdGVfbG9ja2Vkc2lncyhkKToKKyAgICBzaWdzID0ge30KKyAgICB0eXBlcyA9IChkLmdldFZhcigiU0lHR0VOX0xPQ0tFRFNJR1NfVFlQRVMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGZvciB0IGluIHR5cGVzOgorICAgICAgICBsb2NrZWRzaWdzID0gKGQuZ2V0VmFyKCJTSUdHRU5fTE9DS0VEU0lHU18lcyIgJSB0LCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBmb3IgbHMgaW4gbG9ja2Vkc2lnczoKKyAgICAgICAgICAgIHBuLCB0YXNrLCBoID0gbHMuc3BsaXQoIjoiLCAyKQorICAgICAgICAgICAgaWYgcG4gbm90IGluIHNpZ3M6CisgICAgICAgICAgICAgICAgc2lnc1twbl0gPSB7fQorICAgICAgICAgICAgc2lnc1twbl1bdGFza10gPSBoCisgICAgcmV0dXJuIHNpZ3MKKworY2xhc3MgU2lnbmF0dXJlR2VuZXJhdG9yT0VCYXNpYyhiYi5zaWdnZW4uU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWMpOgorICAgIG5hbWUgPSAiT0VCYXNpYyIKKyAgICBkZWYgaW5pdF9ydW5kZXBjaGVjayhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5hYmlzYWZlcmVjaXBlcyA9IChkYXRhLmdldFZhcigiU0lHR0VOX0VYQ0xVREVSRUNJUEVTX0FCSVNBRkUiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBzZWxmLnNhZmVyZWNpcGVkZXBzID0gKGRhdGEuZ2V0VmFyKCJTSUdHRU5fRVhDTFVERV9TQUZFX1JFQ0lQRV9ERVBTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgcGFzcworICAgIGRlZiBydW5kZXBfY2hlY2soc2VsZiwgZm4sIHJlY2lwZW5hbWUsIHRhc2ssIGRlcCwgZGVwbmFtZSwgZGF0YUNhY2hlID0gTm9uZSk6CisgICAgICAgIHJldHVybiBzc3RhdGVfcnVuZGVwZmlsdGVyKHNlbGYsIGZuLCByZWNpcGVuYW1lLCB0YXNrLCBkZXAsIGRlcG5hbWUsIGRhdGFDYWNoZSkKKworY2xhc3MgU2lnbmF0dXJlR2VuZXJhdG9yT0VCYXNpY0hhc2goYmIuc2lnZ2VuLlNpZ25hdHVyZUdlbmVyYXRvckJhc2ljSGFzaCk6CisgICAgbmFtZSA9ICJPRUJhc2ljSGFzaCIKKyAgICBkZWYgaW5pdF9ydW5kZXBjaGVjayhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5hYmlzYWZlcmVjaXBlcyA9IChkYXRhLmdldFZhcigiU0lHR0VOX0VYQ0xVREVSRUNJUEVTX0FCSVNBRkUiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBzZWxmLnNhZmVyZWNpcGVkZXBzID0gKGRhdGEuZ2V0VmFyKCJTSUdHRU5fRVhDTFVERV9TQUZFX1JFQ0lQRV9ERVBTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgc2VsZi5sb2NrZWRzaWdzID0gc3N0YXRlX2xvY2tlZHNpZ3MoZGF0YSkKKyAgICAgICAgc2VsZi5sb2NrZWRoYXNoZXMgPSB7fQorICAgICAgICBzZWxmLmxvY2tlZHBubWFwID0ge30KKyAgICAgICAgc2VsZi5sb2NrZWRoYXNoZm4gPSB7fQorICAgICAgICBzZWxmLm1hY2hpbmUgPSBkYXRhLmdldFZhcigiTUFDSElORSIsIFRydWUpCisgICAgICAgIHNlbGYubWlzbWF0Y2hfbXNncyA9IFtdCisgICAgICAgIHBhc3MKKyAgICBkZWYgcnVuZGVwX2NoZWNrKHNlbGYsIGZuLCByZWNpcGVuYW1lLCB0YXNrLCBkZXAsIGRlcG5hbWUsIGRhdGFDYWNoZSA9IE5vbmUpOgorICAgICAgICByZXR1cm4gc3N0YXRlX3J1bmRlcGZpbHRlcihzZWxmLCBmbiwgcmVjaXBlbmFtZSwgdGFzaywgZGVwLCBkZXBuYW1lLCBkYXRhQ2FjaGUpCisKKyAgICBkZWYgZ2V0X3Rhc2tkYXRhKHNlbGYpOgorICAgICAgICBkYXRhID0gc3VwZXIoYmIuc2lnZ2VuLlNpZ25hdHVyZUdlbmVyYXRvckJhc2ljSGFzaCwgc2VsZikuZ2V0X3Rhc2tkYXRhKCkKKyAgICAgICAgcmV0dXJuIChkYXRhLCBzZWxmLmxvY2tlZHBubWFwLCBzZWxmLmxvY2tlZGhhc2hmbikKKworICAgIGRlZiBzZXRfdGFza2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIGNvcmVkYXRhLCBzZWxmLmxvY2tlZHBubWFwLCBzZWxmLmxvY2tlZGhhc2hmbiA9IGRhdGEKKyAgICAgICAgc3VwZXIoYmIuc2lnZ2VuLlNpZ25hdHVyZUdlbmVyYXRvckJhc2ljSGFzaCwgc2VsZikuc2V0X3Rhc2tkYXRhKGNvcmVkYXRhKQorCisgICAgZGVmIGR1bXBfc2lncyhzZWxmLCBkYXRhQ2FjaGUsIG9wdGlvbnMpOgorICAgICAgICBzZWxmLmR1bXBfbG9ja2Vkc2lncygpCisgICAgICAgIHJldHVybiBzdXBlcihiYi5zaWdnZW4uU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWNIYXNoLCBzZWxmKS5kdW1wX3NpZ3MoZGF0YUNhY2hlLCBvcHRpb25zKQorCisgICAgZGVmIGdldF90YXNraGFzaChzZWxmLCBmbiwgdGFzaywgZGVwcywgZGF0YUNhY2hlKToKKyAgICAgICAgaCA9IHN1cGVyKGJiLnNpZ2dlbi5TaWduYXR1cmVHZW5lcmF0b3JCYXNpY0hhc2gsIHNlbGYpLmdldF90YXNraGFzaChmbiwgdGFzaywgZGVwcywgZGF0YUNhY2hlKQorCisgICAgICAgIHJlY2lwZW5hbWUgPSBkYXRhQ2FjaGUucGtnX2ZuW2ZuXQorICAgICAgICBzZWxmLmxvY2tlZHBubWFwW2ZuXSA9IHJlY2lwZW5hbWUKKyAgICAgICAgc2VsZi5sb2NrZWRoYXNoZm5bZm5dID0gZGF0YUNhY2hlLmhhc2hmbltmbl0KKyAgICAgICAgaWYgcmVjaXBlbmFtZSBpbiBzZWxmLmxvY2tlZHNpZ3M6CisgICAgICAgICAgICBpZiB0YXNrIGluIHNlbGYubG9ja2Vkc2lnc1tyZWNpcGVuYW1lXToKKyAgICAgICAgICAgICAgICBrID0gZm4gKyAiLiIgKyB0YXNrCisgICAgICAgICAgICAgICAgaF9sb2NrZWQgPSBzZWxmLmxvY2tlZHNpZ3NbcmVjaXBlbmFtZV1bdGFza10KKyAgICAgICAgICAgICAgICBzZWxmLmxvY2tlZGhhc2hlc1trXSA9IGhfbG9ja2VkCisgICAgICAgICAgICAgICAgc2VsZi50YXNraGFzaFtrXSA9IGhfbG9ja2VkCisgICAgICAgICAgICAgICAgI2JiLndhcm4oIlVzaW5nICVzICVzICVzIiAlIChyZWNpcGVuYW1lLCB0YXNrLCBoKSkKKworICAgICAgICAgICAgICAgIGlmIGggIT0gaF9sb2NrZWQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubWlzbWF0Y2hfbXNncy5hcHBlbmQoJ1RoZSAlczolcyBzaWcgKCVzKSBjaGFuZ2VkLCB1c2UgbG9ja2VkIHNpZyAlcyB0byBpbnN0ZWFkJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocmVjaXBlbmFtZSwgdGFzaywgaCwgaF9sb2NrZWQpKQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGhfbG9ja2VkCisgICAgICAgICNiYi53YXJuKCIlcyAlcyAlcyIgJSAocmVjaXBlbmFtZSwgdGFzaywgaCkpCisgICAgICAgIHJldHVybiBoCisKKyAgICBkZWYgZHVtcF9zaWd0YXNrKHNlbGYsIGZuLCB0YXNrLCBzdGFtcGJhc2UsIHJ1bnRpbWUpOgorICAgICAgICBrID0gZm4gKyAiLiIgKyB0YXNrCisgICAgICAgIGlmIGsgaW4gc2VsZi5sb2NrZWRoYXNoZXM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc3VwZXIoYmIuc2lnZ2VuLlNpZ25hdHVyZUdlbmVyYXRvckJhc2ljSGFzaCwgc2VsZikuZHVtcF9zaWd0YXNrKGZuLCB0YXNrLCBzdGFtcGJhc2UsIHJ1bnRpbWUpCisKKyAgICBkZWYgZHVtcF9sb2NrZWRzaWdzKHNlbGYsIHNpZ2ZpbGU9Tm9uZSwgdGFza2ZpbHRlcj1Ob25lKToKKyAgICAgICAgaWYgbm90IHNpZ2ZpbGU6CisgICAgICAgICAgICBzaWdmaWxlID0gb3MuZ2V0Y3dkKCkgKyAiL2xvY2tlZC1zaWdzLmluYyIKKworICAgICAgICBiYi5wbGFpbigiV3JpdGluZyBsb2NrZWQgc2lncyB0byAlcyIgJSBzaWdmaWxlKQorICAgICAgICB0eXBlcyA9IHt9CisgICAgICAgIGZvciBrIGluIHNlbGYucnVudGFza2RlcHM6CisgICAgICAgICAgICBpZiB0YXNrZmlsdGVyOgorICAgICAgICAgICAgICAgIGlmIG5vdCBrIGluIHRhc2tmaWx0ZXI6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmbiA9IGsucnNwbGl0KCIuIiwxKVswXQorICAgICAgICAgICAgdCA9IHNlbGYubG9ja2VkaGFzaGZuW2ZuXS5zcGxpdCgiICIpWzFdLnNwbGl0KCI6IilbNV0KKyAgICAgICAgICAgIHQgPSAndC0nICsgdC5yZXBsYWNlKCdfJywgJy0nKQorICAgICAgICAgICAgaWYgdCBub3QgaW4gdHlwZXM6CisgICAgICAgICAgICAgICAgdHlwZXNbdF0gPSBbXQorICAgICAgICAgICAgdHlwZXNbdF0uYXBwZW5kKGspCisKKyAgICAgICAgd2l0aCBvcGVuKHNpZ2ZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGZvciB0IGluIHR5cGVzOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ1NJR0dFTl9MT0NLRURTSUdTXyVzID0gIlxcXG4nICUgdCkKKyAgICAgICAgICAgICAgICB0eXBlc1t0XS5zb3J0KCkKKyAgICAgICAgICAgICAgICBzb3J0ZWRrID0gc29ydGVkKHR5cGVzW3RdLCBrZXk9bGFtYmRhIGs6IHNlbGYubG9ja2VkcG5tYXBbay5yc3BsaXQoIi4iLDEpWzBdXSkKKyAgICAgICAgICAgICAgICBmb3IgayBpbiBzb3J0ZWRrOgorICAgICAgICAgICAgICAgICAgICBmbiA9IGsucnNwbGl0KCIuIiwxKVswXQorICAgICAgICAgICAgICAgICAgICB0YXNrID0gay5yc3BsaXQoIi4iLDEpWzFdCisgICAgICAgICAgICAgICAgICAgIGlmIGsgbm90IGluIHNlbGYudGFza2hhc2g6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCIgICAgIiArIHNlbGYubG9ja2VkcG5tYXBbZm5dICsgIjoiICsgdGFzayArICI6IiArIHNlbGYudGFza2hhc2hba10gKyAiIFxcXG4iKQorICAgICAgICAgICAgICAgIGYud3JpdGUoJyAgICAiXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnU0lHR0VOX0xPQ0tFRFNJR1NfVFlQRVNfJXMgPSAiJXMiJyAlIChzZWxmLm1hY2hpbmUsICIgIi5qb2luKHR5cGVzLmtleXMoKSkpKQorCisgICAgZGVmIGNoZWNraGFzaGVzKHNlbGYsIG1pc3NlZCwgcmV0LCBzcV9mbiwgc3FfdGFzaywgc3FfaGFzaCwgc3FfaGFzaGZuLCBkKToKKyAgICAgICAgY2hlY2tsZXZlbCA9IGQuZ2V0VmFyKCJTSUdHRU5fTE9DS0VEU0lHU19DSEVDS19MRVZFTCIsIFRydWUpCisgICAgICAgIGZvciB0YXNrIGluIHJhbmdlKGxlbihzcV9mbikpOgorICAgICAgICAgICAgaWYgdGFzayBub3QgaW4gcmV0OgorICAgICAgICAgICAgICAgIGZvciBwbiBpbiBzZWxmLmxvY2tlZHNpZ3M6CisgICAgICAgICAgICAgICAgICAgIGlmIHNxX2hhc2hbdGFza10gaW4gc2VsZi5sb2NrZWRzaWdzW3BuXS5pdGVydmFsdWVzKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1pc21hdGNoX21zZ3MuYXBwZW5kKCJMb2NrZWQgc2lnIGlzIHNldCBmb3IgJXM6JXMgKCVzKSB5ZXQgbm90IGluIHNzdGF0ZSBjYWNoZT8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBuLCBzcV90YXNrW3Rhc2tdLCBzcV9oYXNoW3Rhc2tdKSkKKworICAgICAgICBpZiBzZWxmLm1pc21hdGNoX21zZ3MgYW5kIGNoZWNrbGV2ZWwgPT0gJ3dhcm4nOgorICAgICAgICAgICAgYmIud2FybigiXG4iLmpvaW4oc2VsZi5taXNtYXRjaF9tc2dzKSkKKyAgICAgICAgZWxpZiBzZWxmLm1pc21hdGNoX21zZ3MgYW5kIGNoZWNrbGV2ZWwgPT0gJ2Vycm9yJzoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJcbiIuam9pbihzZWxmLm1pc21hdGNoX21zZ3MpKQorCisKKyMgSW5zZXJ0IHRoZXNlIGNsYXNzZXMgaW50byBzaWdnZW4ncyBuYW1lc3BhY2Ugc28gaXQgY2FuIHNlZSBhbmQgc2VsZWN0IHRoZW0KK2JiLnNpZ2dlbi5TaWduYXR1cmVHZW5lcmF0b3JPRUJhc2ljID0gU2lnbmF0dXJlR2VuZXJhdG9yT0VCYXNpYworYmIuc2lnZ2VuLlNpZ25hdHVyZUdlbmVyYXRvck9FQmFzaWNIYXNoID0gU2lnbmF0dXJlR2VuZXJhdG9yT0VCYXNpY0hhc2gKKworCitkZWYgZmluZF9zaWdpbmZvKHBuLCB0YXNrbmFtZSwgdGFza2hhc2hsaXN0LCBkKToKKyAgICAiIiIgRmluZCBzaWduYXR1cmUgZGF0YSBmaWxlcyBmb3IgY29tcGFyaXNvbiBwdXJwb3NlcyAiIiIKKworICAgIGltcG9ydCBmbm1hdGNoCisgICAgaW1wb3J0IGdsb2IKKworICAgIGlmIHRhc2toYXNobGlzdDoKKyAgICAgICAgaGFzaGZpbGVzID0ge30KKworICAgIGlmIG5vdCB0YXNrbmFtZToKKyAgICAgICAgIyBXZSBoYXZlIHRvIGRlcml2ZSBwbiBhbmQgdGFza25hbWUKKyAgICAgICAga2V5ID0gcG4KKyAgICAgICAgc3BsaXRpdCA9IGtleS5zcGxpdCgnLmJiLicpCisgICAgICAgIHRhc2tuYW1lID0gc3BsaXRpdFsxXQorICAgICAgICBwbiA9IG9zLnBhdGguYmFzZW5hbWUoc3BsaXRpdFswXSkuc3BsaXQoJ18nKVswXQorICAgICAgICBpZiBrZXkuc3RhcnRzd2l0aCgndmlydHVhbDpuYXRpdmU6Jyk6CisgICAgICAgICAgICBwbiA9IHBuICsgJy1uYXRpdmUnCisKKyAgICBmaWxlZGF0ZXMgPSB7fQorCisgICAgIyBGaXJzdCBzZWFyY2ggaW4gc3RhbXBzIGRpcgorICAgIGxvY2FsZGF0YSA9IGQuY3JlYXRlQ29weSgpCisgICAgbG9jYWxkYXRhLnNldFZhcignTVVMVElNQUNIX1RBUkdFVF9TWVMnLCAnKicpCisgICAgbG9jYWxkYXRhLnNldFZhcignUE4nLCBwbikKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdQVicsICcqJykKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdQUicsICcqJykKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdFWFRFTkRQRScsICcnKQorICAgIHN0YW1wID0gbG9jYWxkYXRhLmdldFZhcignU1RBTVAnLCBUcnVlKQorICAgIGZpbGVzcGVjID0gJyVzLiVzLnNpZ2RhdGEuKicgJSAoc3RhbXAsIHRhc2tuYW1lKQorICAgIGZvdW5kYWxsID0gRmFsc2UKKyAgICBpbXBvcnQgZ2xvYgorICAgIGZvciBmdWxscGF0aCBpbiBnbG9iLmdsb2IoZmlsZXNwZWMpOgorICAgICAgICBtYXRjaCA9IEZhbHNlCisgICAgICAgIGlmIHRhc2toYXNobGlzdDoKKyAgICAgICAgICAgIGZvciB0YXNraGFzaCBpbiB0YXNraGFzaGxpc3Q6CisgICAgICAgICAgICAgICAgaWYgZnVsbHBhdGguZW5kc3dpdGgoJy4lcycgJSB0YXNraGFzaCk6CisgICAgICAgICAgICAgICAgICAgIGhhc2hmaWxlc1t0YXNraGFzaF0gPSBmdWxscGF0aAorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oaGFzaGZpbGVzKSA9PSBsZW4odGFza2hhc2hsaXN0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kYWxsID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmaWxlZGF0ZXNbZnVsbHBhdGhdID0gb3Muc3RhdChmdWxscGF0aCkuc3RfbXRpbWUKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICBpZiBub3QgdGFza2hhc2hsaXN0IG9yIChsZW4oZmlsZWRhdGVzKSA8IDIgYW5kIG5vdCBmb3VuZGFsbCk6CisgICAgICAgICMgVGhhdCBkaWRuJ3Qgd29yaywgbG9vayBpbiBzc3RhdGUtY2FjaGUKKyAgICAgICAgaGFzaGVzID0gdGFza2hhc2hsaXN0IG9yIFsnKiddCisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICBmb3IgaGFzaHZhbCBpbiBoYXNoZXM6CisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdQQUNLQUdFX0FSQ0gnLCAnKicpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdUQVJHRVRfVkVORE9SJywgJyonKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignVEFSR0VUX09TJywgJyonKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUE4nLCBwbikKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BWJywgJyonKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUFInLCAnKicpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdCQl9UQVNLSEFTSCcsIGhhc2h2YWwpCisgICAgICAgICAgICBzd3NwZWMgPSBsb2NhbGRhdGEuZ2V0VmFyKCdTU1RBVEVfU1dTUEVDJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIHRhc2tuYW1lIGluIFsnZG9fZmV0Y2gnLCAnZG9fdW5wYWNrJywgJ2RvX3BhdGNoJywgJ2RvX3BvcHVsYXRlX2xpYycsICdkb19wcmVjb25maWd1cmUnXSBhbmQgc3dzcGVjOgorICAgICAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1NTVEFURV9QS0dTUEVDJywgJyR7U1NUQVRFX1NXU1BFQ30nKQorICAgICAgICAgICAgZWxpZiBwbi5lbmRzd2l0aCgnLW5hdGl2ZScpIG9yICItY3Jvc3MtIiBpbiBwbiBvciAiLWNyb3Nzc2RrLSIgaW4gcG46CisgICAgICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignU1NUQVRFX0VYVFJBUEFUSCcsICIke05BVElWRUxTQlNUUklOR30vIikKKyAgICAgICAgICAgIHNzdGF0ZW5hbWUgPSB0YXNrbmFtZVszOl0KKyAgICAgICAgICAgIGZpbGVzcGVjID0gJyVzXyVzLiouc2lnaW5mbycgJSAobG9jYWxkYXRhLmdldFZhcignU1NUQVRFX1BLRycsIFRydWUpLCBzc3RhdGVuYW1lKQorCisgICAgICAgICAgICBpZiBoYXNodmFsICE9ICcqJzoKKyAgICAgICAgICAgICAgICBzc3RhdGVkaXIgPSAiJXMvJXMiICUgKGQuZ2V0VmFyKCdTU1RBVEVfRElSJywgVHJ1ZSksIGhhc2h2YWxbOjJdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzc3RhdGVkaXIgPSBkLmdldFZhcignU1NUQVRFX0RJUicsIFRydWUpCisKKyAgICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNzdGF0ZWRpcik6CisgICAgICAgICAgICAgICAgZm9yIGZuIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICBmdWxscGF0aCA9IG9zLnBhdGguam9pbihyb290LCBmbikKKyAgICAgICAgICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoKGZ1bGxwYXRoLCBmaWxlc3BlYyk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0YXNraGFzaGxpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaGZpbGVzW2hhc2h2YWxdID0gZnVsbHBhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlZGF0ZXNbZnVsbHBhdGhdID0gb3Muc3RhdChmdWxscGF0aCkuc3RfbXRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICBpZiB0YXNraGFzaGxpc3Q6CisgICAgICAgIHJldHVybiBoYXNoZmlsZXMKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gZmlsZWRhdGVzCisKK2JiLnNpZ2dlbi5maW5kX3NpZ2luZm8gPSBmaW5kX3NpZ2luZm8KKworCitkZWYgc3N0YXRlX2dldF9tYW5pZmVzdF9maWxlbmFtZSh0YXNrLCBkKToKKyAgICAiIiIKKyAgICBSZXR1cm4gdGhlIHNzdGF0ZSBtYW5pZmVzdCBmaWxlIHBhdGggZm9yIGEgcGFydGljdWxhciB0YXNrLgorICAgIEFsc28gcmV0dXJucyB0aGUgZGF0YXN0b3JlIHRoYXQgY2FuIGJlIHVzZWQgdG8gcXVlcnkgcmVsYXRlZCB2YXJpYWJsZXMuCisgICAgIiIiCisgICAgZDIgPSBkLmNyZWF0ZUNvcHkoKQorICAgIGV4dHJhaW5mID0gZC5nZXRWYXJGbGFnKCJkb18iICsgdGFzaywgJ3N0YW1wLWV4dHJhLWluZm8nLCBUcnVlKQorICAgIGlmIGV4dHJhaW5mOgorICAgICAgICBkMi5zZXRWYXIoIlNTVEFURV9NQU5NQUNIIiwgZXh0cmFpbmYpCisgICAgcmV0dXJuIChkMi5leHBhbmQoIiR7U1NUQVRFX01BTkZJTEVQUkVGSVh9LiVzIiAlIHRhc2spLCBkMikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdGVybWluYWwucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlcm1pbmFsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYTg5MTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlcm1pbmFsLnB5CkBAIC0wLDAgKzEsMjYzIEBACitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9lLmNsYXNzdXRpbHMKK2ltcG9ydCBzaGxleAorZnJvbSBiYi5wcm9jZXNzIGltcG9ydCBQb3BlbiwgRXhlY3V0aW9uRXJyb3IKK2Zyb20gZGlzdHV0aWxzLnZlcnNpb24gaW1wb3J0IExvb3NlVmVyc2lvbgorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZS5PRS5UZXJtaW5hbCcpCisKKworY2xhc3MgVW5zdXBwb3J0ZWRUZXJtaW5hbChFeGNlcHRpb24pOgorICAgIHBhc3MKKworY2xhc3MgTm9TdXBwb3J0ZWRUZXJtaW5hbHMoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworY2xhc3MgUmVnaXN0cnkob2UuY2xhc3N1dGlscy5DbGFzc1JlZ2lzdHJ5KToKKyAgICBjb21tYW5kID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGF0dHJzKToKKyAgICAgICAgc3VwZXIoUmVnaXN0cnksIGNscykuX19pbml0X18obmFtZS5sb3dlcigpLCBiYXNlcywgYXR0cnMpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaW1wbGVtZW50ZWQoY2xzKToKKyAgICAgICAgcmV0dXJuIGJvb2woY2xzLmNvbW1hbmQpCisKKworY2xhc3MgVGVybWluYWwoUG9wZW4pOgorICAgIF9fbWV0YWNsYXNzX18gPSBSZWdpc3RyeQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGU9Tm9uZSwgZW52PU5vbmUsIGQ9Tm9uZSk6CisgICAgICAgIGZtdF9zaF9jbWQgPSBzZWxmLmZvcm1hdF9jb21tYW5kKHNoX2NtZCwgdGl0bGUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIFBvcGVuLl9faW5pdF9fKHNlbGYsIGZtdF9zaF9jbWQsIGVudj1lbnYpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGltcG9ydCBlcnJubworICAgICAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZFRlcm1pbmFsKHNlbGYubmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBmb3JtYXRfY29tbWFuZChzZWxmLCBzaF9jbWQsIHRpdGxlKToKKyAgICAgICAgZm10ID0geyd0aXRsZSc6IHRpdGxlIG9yICdUZXJtaW5hbCcsICdjb21tYW5kJzogc2hfY21kfQorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuY29tbWFuZCwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICByZXR1cm4gc2hsZXguc3BsaXQoc2VsZi5jb21tYW5kLmZvcm1hdCgqKmZtdCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gW2VsZW1lbnQuZm9ybWF0KCoqZm10KSBmb3IgZWxlbWVudCBpbiBzZWxmLmNvbW1hbmRdCisKK2NsYXNzIFhUZXJtaW5hbChUZXJtaW5hbCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGU9Tm9uZSwgZW52PU5vbmUsIGQ9Tm9uZSk6CisgICAgICAgIFRlcm1pbmFsLl9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGUsIGVudiwgZCkKKyAgICAgICAgaWYgbm90IG9zLmVudmlyb24uZ2V0KCdESVNQTEFZJyk6CisgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZFRlcm1pbmFsKHNlbGYubmFtZSkKKworY2xhc3MgR25vbWUoWFRlcm1pbmFsKToKKyAgICBjb21tYW5kID0gJ2dub21lLXRlcm1pbmFsIC10ICJ7dGl0bGV9IiAtLWRpc2FibGUtZmFjdG9yeSAteCB7Y29tbWFuZH0nCisgICAgcHJpb3JpdHkgPSAyCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZT1Ob25lLCBlbnY9Tm9uZSwgZD1Ob25lKToKKyAgICAgICAgIyBSZWNlbnQgdmVyc2lvbnMgb2YgZ25vbWUtdGVybWluYWwgZG9lcyBub3Qgc3VwcG9ydCBub24tVVRGOCBjaGFyc2V0OgorICAgICAgICAjIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzIxMjc7IGFzIGEgd29ya2Fyb3VuZCwKKyAgICAgICAgIyBjbGVhcmluZyB0aGUgTENfQUxMIGVudmlyb25tZW50IHZhcmlhYmxlIHNvIGl0IHVzZXMgdGhlIGxvY2FsZS4KKyAgICAgICAgIyBPbmNlIGZpeGVkIG9uIHRoZSBnbm9tZS10ZXJtaW5hbCBwcm9qZWN0LCB0aGlzIHNob3VsZCBiZSByZW1vdmVkLgorICAgICAgICBpZiBvcy5nZXRlbnYoJ0xDX0FMTCcpOiBvcy5wdXRlbnYoJ0xDX0FMTCcsJycpCisKKyAgICAgICAgIyBDaGVjayB2ZXJzaW9uCisgICAgICAgIHZlcm51bSA9IGNoZWNrX3Rlcm1pbmFsX3ZlcnNpb24oImdub21lLXRlcm1pbmFsIikKKyAgICAgICAgaWYgdmVybnVtIGFuZCBMb29zZVZlcnNpb24odmVybnVtKSA+PSAnMy4xMCc6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgJ0dub21lLVRlcm1pbmFsIDMuMTAgb3IgbGF0ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLWRpc2FibGUtZmFjdG9yeScpCisgICAgICAgICAgICBzZWxmLmNvbW1hbmQgPSAnZ25vbWUtdGVybWluYWwgLXQgInt0aXRsZX0iIC14IHtjb21tYW5kfScKKyAgICAgICAgWFRlcm1pbmFsLl9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGUsIGVudiwgZCkKKworY2xhc3MgTWF0ZShYVGVybWluYWwpOgorICAgIGNvbW1hbmQgPSAnbWF0ZS10ZXJtaW5hbCAtdCAie3RpdGxlfSIgLXgge2NvbW1hbmR9JworICAgIHByaW9yaXR5ID0gMgorCitjbGFzcyBYZmNlKFhUZXJtaW5hbCk6CisgICAgY29tbWFuZCA9ICd4ZmNlNC10ZXJtaW5hbCAtVCAie3RpdGxlfSIgLWUgIntjb21tYW5kfSInCisgICAgcHJpb3JpdHkgPSAyCisKK2NsYXNzIFRlcm1pbm9sb2d5KFhUZXJtaW5hbCk6CisgICAgY29tbWFuZCA9ICd0ZXJtaW5vbG9neSAtVD0ie3RpdGxlfSIgLWUge2NvbW1hbmR9JworICAgIHByaW9yaXR5ID0gMgorCitjbGFzcyBLb25zb2xlKFhUZXJtaW5hbCk6CisgICAgY29tbWFuZCA9ICdrb25zb2xlIC0tbm9mb3JrIC1wIHRhYnRpdGxlPSJ7dGl0bGV9IiAtZSB7Y29tbWFuZH0nCisgICAgcHJpb3JpdHkgPSAyCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZT1Ob25lLCBlbnY9Tm9uZSwgZD1Ob25lKToKKyAgICAgICAgIyBDaGVjayB2ZXJzaW9uCisgICAgICAgIHZlcm51bSA9IGNoZWNrX3Rlcm1pbmFsX3ZlcnNpb24oImtvbnNvbGUiKQorICAgICAgICBpZiB2ZXJudW0gYW5kIExvb3NlVmVyc2lvbih2ZXJudW0pIDwgJzIuMC4wJzoKKyAgICAgICAgICAgICMgS29uc29sZSBmcm9tIEtERSAzLngKKyAgICAgICAgICAgIHNlbGYuY29tbWFuZCA9ICdrb25zb2xlIC1UICJ7dGl0bGV9IiAtZSB7Y29tbWFuZH0nCisgICAgICAgIFhUZXJtaW5hbC5fX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlLCBlbnYsIGQpCisKK2NsYXNzIFhUZXJtKFhUZXJtaW5hbCk6CisgICAgY29tbWFuZCA9ICd4dGVybSAtVCAie3RpdGxlfSIgLWUge2NvbW1hbmR9JworICAgIHByaW9yaXR5ID0gMQorCitjbGFzcyBSeHZ0KFhUZXJtaW5hbCk6CisgICAgY29tbWFuZCA9ICdyeHZ0IC1UICJ7dGl0bGV9IiAtZSB7Y29tbWFuZH0nCisgICAgcHJpb3JpdHkgPSAxCisKK2NsYXNzIFNjcmVlbihUZXJtaW5hbCk6CisgICAgY29tbWFuZCA9ICdzY3JlZW4gLUQgLW0gLXQgInt0aXRsZX0iIC1TIGRldnNoZWxsIHtjb21tYW5kfScKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlPU5vbmUsIGVudj1Ob25lLCBkPU5vbmUpOgorICAgICAgICBzX2lkID0gImRldnNoZWxsXyVpIiAlIG9zLmdldHBpZCgpCisgICAgICAgIHNlbGYuY29tbWFuZCA9ICJzY3JlZW4gLUQgLW0gLXQgXCJ7dGl0bGV9XCIgLVMgJXMge2NvbW1hbmR9IiAlIHNfaWQKKyAgICAgICAgVGVybWluYWwuX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZSwgZW52LCBkKQorICAgICAgICBtc2cgPSAnU2NyZWVuIHN0YXJ0ZWQuIFBsZWFzZSBjb25uZWN0IGluIGFub3RoZXIgdGVybWluYWwgd2l0aCAnIFwKKyAgICAgICAgICAgICcic2NyZWVuIC1yICVzIicgJSBzX2lkCisgICAgICAgIGlmIChkKToKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTG9nRXhlY1RUWShtc2csICJzY3JlZW4gLXIgJXMiICUgc19pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjUsIDEwKSwgZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKG1zZykKKworY2xhc3MgVG11eFJ1bm5pbmcoVGVybWluYWwpOgorICAgICIiIk9wZW4gYSBuZXcgcGFuZSBpbiB0aGUgY3VycmVudCBydW5uaW5nIHRtdXggd2luZG93IiIiCisgICAgbmFtZSA9ICd0bXV4LXJ1bm5pbmcnCisgICAgY29tbWFuZCA9ICd0bXV4IHNwbGl0LXdpbmRvdyAie2NvbW1hbmR9IicKKyAgICBwcmlvcml0eSA9IDIuNzUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlPU5vbmUsIGVudj1Ob25lLCBkPU5vbmUpOgorICAgICAgICBpZiBub3QgYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICd0bXV4Jyk6CisgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZFRlcm1pbmFsKCd0bXV4IGlzIG5vdCBpbnN0YWxsZWQnKQorCisgICAgICAgIGlmIG5vdCBvcy5nZXRlbnYoJ1RNVVgnKToKKyAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwoJ3RtdXggaXMgbm90IHJ1bm5pbmcnKQorCisgICAgICAgIGlmIG5vdCBjaGVja190bXV4X3BhbmVfc2l6ZSgndG11eCcpOgorICAgICAgICAgICAgcmFpc2UgVW5zdXBwb3J0ZWRUZXJtaW5hbCgndG11eCBwYW5lIHRvbyBzbWFsbCcpCisKKyAgICAgICAgVGVybWluYWwuX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZSwgZW52LCBkKQorCitjbGFzcyBUbXV4TmV3V2luZG93KFRlcm1pbmFsKToKKyAgICAiIiJPcGVuIGEgbmV3IHdpbmRvdyBpbiB0aGUgY3VycmVudCBydW5uaW5nIHRtdXggc2Vzc2lvbiIiIgorICAgIG5hbWUgPSAndG11eC1uZXctd2luZG93JworICAgIGNvbW1hbmQgPSAndG11eCBuZXctd2luZG93IC1uICJ7dGl0bGV9IiAie2NvbW1hbmR9IicKKyAgICBwcmlvcml0eSA9IDIuNzAKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlPU5vbmUsIGVudj1Ob25lLCBkPU5vbmUpOgorICAgICAgICBpZiBub3QgYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICd0bXV4Jyk6CisgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZFRlcm1pbmFsKCd0bXV4IGlzIG5vdCBpbnN0YWxsZWQnKQorCisgICAgICAgIGlmIG5vdCBvcy5nZXRlbnYoJ1RNVVgnKToKKyAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwoJ3RtdXggaXMgbm90IHJ1bm5pbmcnKQorCisgICAgICAgIFRlcm1pbmFsLl9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGUsIGVudiwgZCkKKworY2xhc3MgVG11eChUZXJtaW5hbCk6CisgICAgIiIiU3RhcnQgYSBuZXcgdG11eCBzZXNzaW9uIGFuZCB3aW5kb3ciIiIKKyAgICBjb21tYW5kID0gJ3RtdXggbmV3IC1kIC1zIGRldnNoZWxsIC1uIGRldnNoZWxsICJ7Y29tbWFuZH0iJworICAgIHByaW9yaXR5ID0gMC43NQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGU9Tm9uZSwgZW52PU5vbmUsIGQ9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgJ3RtdXgnKToKKyAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwoJ3RtdXggaXMgbm90IGluc3RhbGxlZCcpCisKKyAgICAgICAgIyBUT0RPOiBjb25zaWRlciB1c2luZyBhICdkZXZzaGVsbCcgc2Vzc2lvbiBzaGFyZWQgYW1vbmdzdCBhbGwKKyAgICAgICAgIyBkZXZzaGVsbHMsIGlmIGl0J3MgYWxyZWFkeSB0aGVyZSwgYWRkIGEgbmV3IHdpbmRvdyB0byBpdC4KKyAgICAgICAgd2luZG93X25hbWUgPSAnZGV2c2hlbGwtJWknICUgb3MuZ2V0cGlkKCkKKworICAgICAgICBzZWxmLmNvbW1hbmQgPSAndG11eCBuZXcgLWQgLXMgezB9IC1uIHswfSAie3tjb21tYW5kfX0iJy5mb3JtYXQod2luZG93X25hbWUpCisgICAgICAgIFRlcm1pbmFsLl9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGUsIGVudiwgZCkKKworICAgICAgICBhdHRhY2hfY21kID0gJ3RtdXggYXR0IC10IHswfScuZm9ybWF0KHdpbmRvd19uYW1lKQorICAgICAgICBtc2cgPSAnVG11eCBzdGFydGVkLiBQbGVhc2UgY29ubmVjdCBpbiBhbm90aGVyIHRlcm1pbmFsIHdpdGggYHRtdXggYXR0IC10IHswfWAnLmZvcm1hdCh3aW5kb3dfbmFtZSkKKyAgICAgICAgaWYgZDoKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTG9nRXhlY1RUWShtc2csIGF0dGFjaF9jbWQsIDAuNSwgMTApLCBkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLndhcm4obXNnKQorCitjbGFzcyBDdXN0b20oVGVybWluYWwpOgorICAgIGNvbW1hbmQgPSAnZmFsc2UnICMgVGhpcyBpcyBhIHBsYWNlaG9sZGVyCisgICAgcHJpb3JpdHkgPSAzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZT1Ob25lLCBlbnY9Tm9uZSwgZD1Ob25lKToKKyAgICAgICAgc2VsZi5jb21tYW5kID0gZCBhbmQgZC5nZXRWYXIoJ09FX1RFUk1JTkFMX0NVU1RPTUNNRCcsIFRydWUpCisgICAgICAgIGlmIHNlbGYuY29tbWFuZDoKKyAgICAgICAgICAgIGlmIG5vdCAne2NvbW1hbmR9JyBpbiBzZWxmLmNvbW1hbmQ6CisgICAgICAgICAgICAgICAgc2VsZi5jb21tYW5kICs9ICcge2NvbW1hbmR9JworICAgICAgICAgICAgVGVybWluYWwuX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZSwgZW52LCBkKQorICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0N1c3RvbSB0ZXJtaW5hbCB3YXMgc3RhcnRlZC4nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICdObyBjdXN0b20gdGVybWluYWwgKE9FX1RFUk1JTkFMX0NVU1RPTUNNRCkgc2V0JykKKyAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwoJ09FX1RFUk1JTkFMX0NVU1RPTUNNRCBub3Qgc2V0JykKKworCitkZWYgcHJpb3JpdGl6ZWQoKToKKyAgICByZXR1cm4gUmVnaXN0cnkucHJpb3JpdGl6ZWQoKQorCitkZWYgc3Bhd25fcHJlZmVycmVkKHNoX2NtZCwgdGl0bGU9Tm9uZSwgZW52PU5vbmUsIGQ9Tm9uZSk6CisgICAgIiIiU3Bhd24gdGhlIGZpcnN0IHN1cHBvcnRlZCB0ZXJtaW5hbCwgYnkgcHJpb3JpdHkiIiIKKyAgICBmb3IgdGVybWluYWwgaW4gcHJpb3JpdGl6ZWQoKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3Bhd24odGVybWluYWwubmFtZSwgc2hfY21kLCB0aXRsZSwgZW52LCBkKQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZXhjZXB0IFVuc3VwcG9ydGVkVGVybWluYWw6CisgICAgICAgICAgICBjb250aW51ZQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIE5vU3VwcG9ydGVkVGVybWluYWxzKCkKKworZGVmIHNwYXduKG5hbWUsIHNoX2NtZCwgdGl0bGU9Tm9uZSwgZW52PU5vbmUsIGQ9Tm9uZSk6CisgICAgIiIiU3Bhd24gdGhlIHNwZWNpZmllZCB0ZXJtaW5hbCwgYnkgbmFtZSIiIgorICAgIGxvZ2dlci5kZWJ1ZygxLCAnQXR0ZW1wdGluZyB0byBzcGF3biB0ZXJtaW5hbCAiJXMiJywgbmFtZSkKKyAgICB0cnk6CisgICAgICAgIHRlcm1pbmFsID0gUmVnaXN0cnkucmVnaXN0cnlbbmFtZV0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwobmFtZSkKKworICAgIHBpcGUgPSB0ZXJtaW5hbChzaF9jbWQsIHRpdGxlLCBlbnYsIGQpCisgICAgb3V0cHV0ID0gcGlwZS5jb21tdW5pY2F0ZSgpWzBdCisgICAgaWYgcGlwZS5yZXR1cm5jb2RlICE9IDA6CisgICAgICAgIHJhaXNlIEV4ZWN1dGlvbkVycm9yKHNoX2NtZCwgcGlwZS5yZXR1cm5jb2RlLCBvdXRwdXQpCisKK2RlZiBjaGVja190bXV4X3BhbmVfc2l6ZSh0bXV4KToKKyAgICBpbXBvcnQgc3VicHJvY2VzcyBhcyBzdWIKKyAgICB0cnk6CisgICAgICAgIHAgPSBzdWIuUG9wZW4oJyVzIGxpc3QtcGFuZXMgLUYgIiN7P3BhbmVfYWN0aXZlLCN7cGFuZV9oZWlnaHR9LH0iJyAlIHRtdXgsCisgICAgICAgICAgICAgICAgc2hlbGw9VHJ1ZSxzdGRvdXQ9c3ViLlBJUEUsc3RkZXJyPXN1Yi5QSVBFKQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBzaXplID0gaW50KG91dC5zdHJpcCgpKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgaW1wb3J0IGVycm5vCisgICAgICAgIGlmIGV4Yy5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UKKyAgICBpZiBzaXplLzIgPj0gMTk6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBjaGVja190ZXJtaW5hbF92ZXJzaW9uKHRlcm1pbmFsTmFtZSk6CisgICAgaW1wb3J0IHN1YnByb2Nlc3MgYXMgc3ViCisgICAgdHJ5OgorICAgICAgICBwID0gc3ViLlBvcGVuKFsnc2gnLCAnLWMnLCAnJXMgLS12ZXJzaW9uJyAlIHRlcm1pbmFsTmFtZV0sc3Rkb3V0PXN1Yi5QSVBFLHN0ZGVycj1zdWIuUElQRSkKKyAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgdmVyX2luZm8gPSBvdXQucnN0cmlwKCkuc3BsaXQoJ1xuJykKKyAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgIGltcG9ydCBlcnJubworICAgICAgICBpZiBleGMuZXJybm8gPT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlCisgICAgdmVybnVtID0gTm9uZQorICAgIGZvciB2ZXIgaW4gdmVyX2luZm86CisgICAgICAgIGlmIHZlci5zdGFydHN3aXRoKCdLb25zb2xlJyk6CisgICAgICAgICAgICB2ZXJudW0gPSB2ZXIuc3BsaXQoJyAnKVstMV0KKyAgICAgICAgaWYgdmVyLnN0YXJ0c3dpdGgoJ0dOT01FIFRlcm1pbmFsJyk6CisgICAgICAgICAgICB2ZXJudW0gPSB2ZXIuc3BsaXQoJyAnKVstMV0KKyAgICByZXR1cm4gdmVybnVtCisKK2RlZiBkaXN0cm9fbmFtZSgpOgorICAgIHRyeToKKyAgICAgICAgcCA9IFBvcGVuKFsnbHNiX3JlbGVhc2UnLCAnLWknXSkKKyAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgZGlzdHJvID0gb3V0LnNwbGl0KCc6JylbMV0uc3RyaXAoKS5sb3dlcigpCisgICAgZXhjZXB0OgorICAgICAgICBkaXN0cm8gPSAidW5rbm93biIKKyAgICByZXR1cm4gZGlzdHJvCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlc3RzL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90ZXN0cy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90ZXN0cy9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X2xpY2Vuc2UucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfbGljZW5zZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzg4ODg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X2xpY2Vuc2UucHkKQEAgLTAsMCArMSw2OCBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb2UubGljZW5zZQorCitjbGFzcyBTZWVuVmlzaXRvcihvZS5saWNlbnNlLkxpY2Vuc2VWaXNpdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuc2VlbiA9IFtdCisgICAgICAgIG9lLmxpY2Vuc2UuTGljZW5zZVZpc2l0b3IuX19pbml0X18oc2VsZikKKworICAgIGRlZiB2aXNpdF9TdHIoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYuc2Vlbi5hcHBlbmQobm9kZS5zKQorCitjbGFzcyBUZXN0U2luZ2xlTGljZW5zZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbGljZW5zZXMgPSBbCisgICAgICAgICJHUEx2MiIsCisgICAgICAgICJMR1BMLTIuMCIsCisgICAgICAgICJBcnRpc3RpYyIsCisgICAgICAgICJNSVQiLAorICAgICAgICAiR1BMdjMrIiwKKyAgICAgICAgIkZPT19CQVIiLAorICAgIF0KKyAgICBpbnZhbGlkX2xpY2Vuc2VzID0gWyJHUEwvQlNEIl0KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcGFyc2UobGljZW5zZXN0cik6CisgICAgICAgIHZpc2l0b3IgPSBTZWVuVmlzaXRvcigpCisgICAgICAgIHZpc2l0b3IudmlzaXRfc3RyaW5nKGxpY2Vuc2VzdHIpCisgICAgICAgIHJldHVybiB2aXNpdG9yLnNlZW4KKworICAgIGRlZiB0ZXN0X3NpbmdsZV9saWNlbnNlcyhzZWxmKToKKyAgICAgICAgZm9yIGxpY2Vuc2UgaW4gc2VsZi5saWNlbnNlczoKKyAgICAgICAgICAgIGxpY2Vuc2VzID0gc2VsZi5wYXJzZShsaWNlbnNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwobGljZW5zZXMsIFtsaWNlbnNlXSkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfbGljZW5zZXMoc2VsZik6CisgICAgICAgIGZvciBsaWNlbnNlIGluIHNlbGYuaW52YWxpZF9saWNlbnNlczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMob2UubGljZW5zZS5JbnZhbGlkTGljZW5zZSkgYXMgY206CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZShsaWNlbnNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubGljZW5zZSwgbGljZW5zZSkKKworY2xhc3MgVGVzdFNpbXBsZUNvbWJpbmF0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgdGVzdHMgPSB7CisgICAgICAgICJGT08mQkFSIjogWyJGT08iLCAiQkFSIl0sCisgICAgICAgICJCQVogJiBNT08iOiBbIkJBWiIsICJNT08iXSwKKyAgICAgICAgIkFMUEhBfEJFVEEiOiBbIkFMUEhBIl0sCisgICAgICAgICJCQVomTU9PfEZPTyI6IFsiRk9PIl0sCisgICAgICAgICJGT08mQkFSfEJBWiI6IFsiRk9PIiwgIkJBUiJdLAorICAgIH0KKyAgICBwcmVmZXJyZWQgPSBbIkFMUEhBIiwgIkZPTyIsICJCQVIiXQorCisgICAgZGVmIHRlc3RfdGVzdHMoc2VsZik6CisgICAgICAgIGRlZiBjaG9vc2UoYSwgYik6CisgICAgICAgICAgICBpZiBhbGwobGljIGluIHNlbGYucHJlZmVycmVkIGZvciBsaWMgaW4gYik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGEKKworICAgICAgICBmb3IgbGljZW5zZSwgZXhwZWN0ZWQgaW4gc2VsZi50ZXN0cy5pdGVtcygpOgorICAgICAgICAgICAgbGljZW5zZXMgPSBvZS5saWNlbnNlLmZsYXR0ZW5lZF9saWNlbnNlcyhsaWNlbnNlLCBjaG9vc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChsaWNlbnNlcywgZXhwZWN0ZWQpCisKK2NsYXNzIFRlc3RDb21wbGV4Q29tYmluYXRpb25zKFRlc3RTaW1wbGVDb21iaW5hdGlvbnMpOgorICAgIHRlc3RzID0geworICAgICAgICAiRk9PICYgKEJBUiB8IEJBWikmTU9PIjogWyJGT08iLCAiQkFSIiwgIk1PTyJdLAorICAgICAgICAiKEFMUEhBfChCRVRBJlRIRVRBKXxPTUVHQSkmREVMVEEiOiBbIk9NRUdBIiwgIkRFTFRBIl0sCisgICAgICAgICIoKEFMUEhBfEJFVEEpJkZPTyl8QkFaIjogWyJCRVRBIiwgIkZPTyJdLAorICAgICAgICAiKEdQTC0yLjB8UHJvcHJpZXRhcnkpJkJTRC00LWNsYXVzZSZNSVQiOiBbIkdQTC0yLjAiLCAiQlNELTQtY2xhdXNlIiwgIk1JVCJdLAorICAgIH0KKyAgICBwcmVmZXJyZWQgPSBbIkJBUiIsICJPTUVHQSIsICJCRVRBIiwgIkdQTC0yLjAiXQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X3BhdGgucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfcGF0aC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDQxY2UxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X3BhdGgucHkKQEAgLTAsMCArMSw4OSBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb2UsIG9lLnBhdGgKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IG9zCitpbXBvcnQgZXJybm8KK2ltcG9ydCBzaHV0aWwKKworY2xhc3MgVGVzdFJlYWxQYXRoKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBESVJTID0gWyAiYSIsICJiIiwgImV0YyIsICJzYmluIiwgInVzciIsICJ1c3IvYmluIiwgInVzci9iaW5YIiwgInVzci9zYmluIiwgInVzci9pbmNsdWRlIiwgInVzci9pbmNsdWRlL2dkYm0iIF0KKyAgICBGSUxFUyA9IFsgImV0Yy9wYXNzd2QiLCAiYi9maWxlIiBdCisgICAgTElOS1MgPSBbCisgICAgICAgICggImJpbiIsICAgICAgICAgICAgICIvdXNyL2JpbiIsICAgICAgICAgICAgICIvdXNyL2JpbiIgKSwKKyAgICAgICAgKCAiYmluWCIsICAgICAgICAgICAgInVzci9iaW5YIiwgICAgICAgICAgICAgIi91c3IvYmluWCIgKSwKKyAgICAgICAgKCAiYyIsICAgICAgICAgICAgICAgImJyb2tlbiIsICAgICAgICAgICAgICAgIi9icm9rZW4iICksCisgICAgICAgICggImV0Yy9wYXNzd2QtMSIsICAgICJwYXNzd2QiLCAgICAgICAgICAgICAgICIvZXRjL3Bhc3N3ZCIgKSwKKyAgICAgICAgKCAiZXRjL3Bhc3N3ZC0yIiwgICAgInBhc3N3ZC0xIiwgICAgICAgICAgICAgIi9ldGMvcGFzc3dkIiApLAorICAgICAgICAoICJldGMvcGFzc3dkLTMiLCAgICAiL2V0Yy9wYXNzd2QtMSIsICAgICAgICAiL2V0Yy9wYXNzd2QiICksCisgICAgICAgICggImV0Yy9zaGFkb3ctMSIsICAgICIvZXRjL3NoYWRvdyIsICAgICAgICAgICIvZXRjL3NoYWRvdyIgKSwKKyAgICAgICAgKCAiZXRjL3NoYWRvdy0yIiwgICAgIi9ldGMvc2hhZG93LTEiLCAgICAgICAgIi9ldGMvc2hhZG93IiApLAorICAgICAgICAoICJwcm9nLUEiLCAgICAgICAgICAiYmluL3Byb2ctQSIsICAgICAgICAgICAiL3Vzci9iaW4vcHJvZy1BIiApLAorICAgICAgICAoICJwcm9nLUIiLCAgICAgICAgICAiL2Jpbi9wcm9nLUIiLCAgICAgICAgICAiL3Vzci9iaW4vcHJvZy1CIiApLAorICAgICAgICAoICJ1c3IvYmluL3Byb2ctQyIsICAiLi4vLi4vc2Jpbi9wcm9nLUMiLCAgICAiL3NiaW4vcHJvZy1DIiApLAorICAgICAgICAoICJ1c3IvYmluL3Byb2ctRCIsICAiL3NiaW4vcHJvZy1EIiwgICAgICAgICAiL3NiaW4vcHJvZy1EIiApLAorICAgICAgICAoICJ1c3IvYmluWC9wcm9nLUUiLCAiLi4vc2Jpbi9wcm9nLUUiLCAgICAgICBOb25lICksCisgICAgICAgICggInVzci9iaW4vcHJvZy1GIiwgICIuLi8uLi8uLi9zYmluL3Byb2ctRiIsICIvc2Jpbi9wcm9nLUYiICksCisgICAgICAgICggImxvb3AiLCAgICAgICAgICAgICJhL2xvb3AiLCAgICAgICAgICAgICAgIE5vbmUgKSwKKyAgICAgICAgKCAiYS9sb29wIiwgICAgICAgICAgIi4uL2xvb3AiLCAgICAgICAgICAgICAgTm9uZSApLAorICAgICAgICAoICJiL3Rlc3QiLCAgICAgICAgICAiZmlsZS9mb28iLCAgICAgICAgICAgICAiL2IvZmlsZS9mb28iICksCisgICAgXQorCisgICAgTElOS1NfUEhZUyA9IFsKKyAgICAgICAgKCAiLi8iLCAgICAgICAgICAiLyIsICAgICAgICAgICAgICAgICIiICksCisgICAgICAgICggImJpblgvcHJvZy1FIiwgIi91c3Ivc2Jpbi9wcm9nLUUiLCAiL3NiaW4vcHJvZy1FIiApLAorICAgIF0KKworICAgIEVYQ0VQVElPTlMgPSBbCisgICAgICAgICggImxvb3AiLCAgIGVycm5vLkVMT09QICksCisgICAgICAgICggImIvdGVzdCIsIGVycm5vLkVOT0VOVCApLAorICAgIF0KKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjb3Muc3lzdGVtKCJ0cmVlIC1GICVzIiAlIHNlbGYudG1wZGlyKQorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLnRtcGRpcikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnRtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4ID0gIm9lLXRlc3RfcGF0aCIpCisgICAgICAgIHNlbGYucm9vdCA9IG9zLnBhdGguam9pbihzZWxmLnRtcGRpciwgIlIiKQorCisgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihzZWxmLnRtcGRpciwgIl9yZWFsIikpCisgICAgICAgIG9zLnN5bWxpbmsoIl9yZWFsIiwgc2VsZi5yb290KQorCisgICAgICAgIGZvciBkIGluIHNlbGYuRElSUzoKKyAgICAgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihzZWxmLnJvb3QsIGQpKQorICAgICAgICBmb3IgZiBpbiBzZWxmLkZJTEVTOgorICAgICAgICAgICAgZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5yb290LCBmKSwgInciKQorICAgICAgICBmb3IgbCBpbiBzZWxmLkxJTktTOgorICAgICAgICAgICAgb3Muc3ltbGluayhsWzFdLCBvcy5wYXRoLmpvaW4oc2VsZi5yb290LCBsWzBdKSkKKworICAgIGRlZiBfX3JlYWxwYXRoKHNlbGYsIGZpbGUsIHVzZV9waHlzZGlyLCBhc3N1bWVfZGlyID0gVHJ1ZSk6CisgICAgICAgIHJldHVybiBvZS5wYXRoLnJlYWxwYXRoKG9zLnBhdGguam9pbihzZWxmLnJvb3QsIGZpbGUpLCBzZWxmLnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9waHlzZGlyLCBhc3N1bWVfZGlyID0gYXNzdW1lX2RpcikKKworICAgIGRlZiB0ZXN0X25vcm0oc2VsZik6CisgICAgICAgIGZvciBsIGluIHNlbGYuTElOS1M6CisgICAgICAgICAgICBpZiBsWzJdID09IE5vbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgdGFyZ2V0X3AgPSBzZWxmLl9fcmVhbHBhdGgobFswXSwgVHJ1ZSkKKyAgICAgICAgICAgIHRhcmdldF9sID0gc2VsZi5fX3JlYWxwYXRoKGxbMF0sIEZhbHNlKQorCisgICAgICAgICAgICBpZiBsWzJdICE9IEZhbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyZ2V0X3AsIHRhcmdldF9sKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFsyXSwgdGFyZ2V0X3BbbGVuKHNlbGYucm9vdCk6XSkKKworICAgIGRlZiB0ZXN0X3BoeXMoc2VsZik6CisgICAgICAgIGZvciBsIGluIHNlbGYuTElOS1NfUEhZUzoKKyAgICAgICAgICAgIHRhcmdldF9wID0gc2VsZi5fX3JlYWxwYXRoKGxbMF0sIFRydWUpCisgICAgICAgICAgICB0YXJnZXRfbCA9IHNlbGYuX19yZWFscGF0aChsWzBdLCBGYWxzZSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzFdLCB0YXJnZXRfcFtsZW4oc2VsZi5yb290KTpdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzJdLCB0YXJnZXRfbFtsZW4oc2VsZi5yb290KTpdKQorCisgICAgZGVmIHRlc3RfbG9vcChzZWxmKToKKyAgICAgICAgZm9yIGUgaW4gc2VsZi5FWENFUFRJT05TOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoT1NFcnJvciwgcidcW0Vycm5vICV1XF0nICUgZVsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19yZWFscGF0aCwgZVswXSwgRmFsc2UsIEZhbHNlKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X3R5cGVzLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X3R5cGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2N2NjMzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfdHlwZXMucHkKQEAgLTAsMCArMSw2MiBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIG9lLm1ha2V0eXBlIGltcG9ydCBjcmVhdGUsIGZhY3RvcnkKKworY2xhc3MgVGVzdFR5cGVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgYXNzZXJ0SXNJbnN0YW5jZShzZWxmLCBvYmosIGNscyk6CisgICAgICAgIHJldHVybiBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShvYmosIGNscykpCisKKyAgICBkZWYgYXNzZXJ0SXNOb3Qoc2VsZiwgb2JqLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLmFzc2VydEZhbHNlKG9iaiBpcyBvdGhlcikKKworICAgIGRlZiBhc3NlcnRGYWN0b3J5Q3JlYXRlZChzZWxmLCB2YWx1ZSwgdHlwZSwgKipmbGFncyk6CisgICAgICAgIGNscyA9IGZhY3RvcnkodHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChjbHMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjcmVhdGUodmFsdWUsIHR5cGUsICoqZmxhZ3MpLCBjbHMpCisKK2NsYXNzIFRlc3RCb29sZWFuVHlwZShUZXN0VHlwZXMpOgorICAgIGRlZiB0ZXN0X2ludmFsaWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNyZWF0ZSwgJycsICdib29sZWFuJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY3JlYXRlLCAnZm9vJywgJ2Jvb2xlYW4nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNyZWF0ZSwgb2JqZWN0KCksICdib29sZWFuJykKKworICAgIGRlZiB0ZXN0X3RydWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmVhdGUoJ3knLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3JlYXRlKCd5ZXMnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3JlYXRlKCcxJywgJ2Jvb2xlYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNyZWF0ZSgndCcsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmVhdGUoJ3RydWUnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3JlYXRlKCdUUlVFJywgJ2Jvb2xlYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNyZWF0ZSgndHJ1RScsICdib29sZWFuJykpCisKKyAgICBkZWYgdGVzdF9mYWxzZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjcmVhdGUoJ24nLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNyZWF0ZSgnbm8nLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNyZWF0ZSgnMCcsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3JlYXRlKCdmJywgJ2Jvb2xlYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjcmVhdGUoJ2ZhbHNlJywgJ2Jvb2xlYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjcmVhdGUoJ0ZBTFNFJywgJ2Jvb2xlYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjcmVhdGUoJ2ZhTHNlJywgJ2Jvb2xlYW4nKSkKKworICAgIGRlZiB0ZXN0X2Jvb2xfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3JlYXRlKCduJywgJ2Jvb2xlYW4nKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY3JlYXRlKCduJywgJ2Jvb2xlYW4nKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVhdGUoJ3knLCAnYm9vbGVhbicpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGNyZWF0ZSgneScsICdib29sZWFuJyksIEZhbHNlKQorCitjbGFzcyBUZXN0TGlzdChUZXN0VHlwZXMpOgorICAgIGRlZiBhc3NlcnRMaXN0RXF1YWwoc2VsZiwgdmFsdWUsIHZhbGlkLCBzZXA9Tm9uZSk6CisgICAgICAgIG9iaiA9IGNyZWF0ZSh2YWx1ZSwgJ2xpc3QnLCBzZXBhcmF0b3I9c2VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iaiwgdmFsaWQpCisgICAgICAgIGlmIHNlcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLnNlcGFyYXRvciwgc2VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihvYmopLCBvYmouc2VwYXJhdG9yLmpvaW4ob2JqKSkKKworICAgIGRlZiB0ZXN0X2xpc3Rfbm9zZXAoc2VsZik6CisgICAgICAgIHRlc3RsaXN0ID0gWydhbHBoYScsICdiZXRhJywgJ3RoZXRhJ10KKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoJ2FscGhhIGJldGEgdGhldGEnLCB0ZXN0bGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoJ2FscGhhICBiZXRhXHR0aGV0YScsIHRlc3RsaXN0KQorICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbCgnYWxwaGEnLCBbJ2FscGhhJ10pCisKKyAgICBkZWYgdGVzdF9saXN0X3VzZXJzZXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKCdmb286YmFyJywgWydmb28nLCAnYmFyJ10sICc6JykKKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoJ2ZvbzpiYXI6YmF6JywgWydmb28nLCAnYmFyJywgJ2JheiddLCAnOicpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfdXRpbHMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ5YWM1MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdGVzdHMvdGVzdF91dGlscy5weQpAQCAtMCwwICsxLDUxIEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2UudXRpbHMgaW1wb3J0IHBhY2thZ2VzX2ZpbHRlcl9vdXRfc3lzdGVtCisKK2NsYXNzIFRlc3RQYWNrYWdlc0ZpbHRlck91dFN5c3RlbSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZmlsdGVyKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdCB0aGF0IG9lLnV0aWxzLnBhY2thZ2VzX2ZpbHRlcl9vdXRfc3lzdGVtIHdvcmtzLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IGJiCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkNhbm5vdCBpbXBvcnQgYmIiKQorCisgICAgICAgIGQgPSBiYi5kYXRhX3NtYXJ0LkRhdGFTbWFydCgpCisgICAgICAgIGQuc2V0VmFyKCJQTiIsICJmb28iKQorCisgICAgICAgIGQuc2V0VmFyKCJQQUNLQUdFUyIsICJmb28gZm9vLWRvYyBmb28tZGV2IikKKyAgICAgICAgcGtncyA9IHBhY2thZ2VzX2ZpbHRlcl9vdXRfc3lzdGVtKGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGtncywgW10pCisKKyAgICAgICAgZC5zZXRWYXIoIlBBQ0tBR0VTIiwgImZvbyBmb28tZG9jIGZvby1kYXRhIGZvby1kZXYiKQorICAgICAgICBwa2dzID0gcGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0oZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwa2dzLCBbImZvby1kYXRhIl0pCisKKyAgICAgICAgZC5zZXRWYXIoIlBBQ0tBR0VTIiwgImZvbyBmb28tbG9jYWxlLWVuLWdiIikKKyAgICAgICAgcGtncyA9IHBhY2thZ2VzX2ZpbHRlcl9vdXRfc3lzdGVtKGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGtncywgW10pCisKKyAgICAgICAgZC5zZXRWYXIoIlBBQ0tBR0VTIiwgImZvbyBmb28tZGF0YSBmb28tbG9jYWxlLWVuLWdiIikKKyAgICAgICAgcGtncyA9IHBhY2thZ2VzX2ZpbHRlcl9vdXRfc3lzdGVtKGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGtncywgWyJmb28tZGF0YSJdKQorCisKK2NsYXNzIFRlc3RUcmltVmVyc2lvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfdmVyc2lvbl9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHRyaW1fdmVyc2lvbihOb25lLCAyKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB0cmltX3ZlcnNpb24oKDEsIDIsIDMpLCAyKQorCisgICAgZGVmIHRlc3RfbnVtX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHRyaW1fdmVyc2lvbigiMS4yLjMiLCAwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgdHJpbV92ZXJzaW9uKCIxLjIuMyIsIC0xKQorCisgICAgZGVmIHRlc3RfdmFsaWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJpbV92ZXJzaW9uKCIxLjIuMyIsIDEpLCAiMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJpbV92ZXJzaW9uKCIxLjIuMyIsIDIpLCAiMS4yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmltX3ZlcnNpb24oIjEuMi4zIiwgMyksICIxLjIuMyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJpbV92ZXJzaW9uKCIxLjIuMyIsIDQpLCAiMS4yLjMiKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90eXBlcy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdHlwZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y0N2MxNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdHlwZXMucHkKQEAgLTAsMCArMSwxNTMgQEAKK2ltcG9ydCBlcnJubworaW1wb3J0IHJlCitpbXBvcnQgb3MKKworCitjbGFzcyBPRUxpc3QobGlzdCk6CisgICAgIiIiT3BlbkVtYmVkZGVkICdsaXN0JyB0eXBlCisKKyAgICBBY3RzIGFzIGFuIG9yZGluYXJ5IGxpc3QsIGJ1dCBpcyBjb25zdHJ1Y3RlZCBmcm9tIGEgc3RyaW5nIHZhbHVlIGFuZCBhCisgICAgc2VwYXJhdG9yIChvcHRpb25hbCksIGFuZCByZS1qb2lucyBpdHNlbGYgd2hlbiBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgd2l0aAorICAgIHN0cigpLiAgU2V0IHRoZSB2YXJpYWJsZSB0eXBlIGZsYWcgdG8gJ2xpc3QnIHRvIHVzZSB0aGlzIHR5cGUsIGFuZCB0aGUKKyAgICAnc2VwYXJhdG9yJyBmbGFnIG1heSBiZSBzcGVjaWZpZWQgKGRlZmF1bHRpbmcgdG8gd2hpdGVzcGFjZSkuIiIiCisKKyAgICBuYW1lID0gImxpc3QiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUsIHNlcGFyYXRvciA9IE5vbmUpOgorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxpc3QuX19pbml0X18oc2VsZiwgdmFsdWUuc3BsaXQoc2VwYXJhdG9yKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpc3QuX19pbml0X18oc2VsZikKKworICAgICAgICBpZiBzZXBhcmF0b3IgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuc2VwYXJhdG9yID0gIiAiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNlcGFyYXRvciA9IHNlcGFyYXRvcgorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNlcGFyYXRvci5qb2luKHNlbGYpCisKK2RlZiBjaG9pY2UodmFsdWUsIGNob2ljZXMpOgorICAgICIiIk9wZW5FbWJlZGRlZCAnY2hvaWNlJyB0eXBlCisKKyAgICBBY3RzIGFzIGEgbXVsdGlwbGUgY2hvaWNlIGZvciB0aGUgdXNlci4gIFRvIHVzZSB0aGlzLCBzZXQgdGhlIHZhcmlhYmxlCisgICAgdHlwZSBmbGFnIHRvICdjaG9pY2UnLCBhbmQgc2V0IHRoZSAnY2hvaWNlcycgZmxhZyB0byBhIHNwYWNlIHNlcGFyYXRlZAorICAgIGxpc3Qgb2YgdmFsaWQgdmFsdWVzLiIiIgorICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJjaG9pY2UgYWNjZXB0cyBhIHN0cmluZywgbm90ICclcyciICUgdHlwZSh2YWx1ZSkpCisKKyAgICB2YWx1ZSA9IHZhbHVlLmxvd2VyKCkKKyAgICBjaG9pY2VzID0gY2hvaWNlcy5sb3dlcigpCisgICAgaWYgdmFsdWUgbm90IGluIGNob2ljZXMuc3BsaXQoKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBjaG9pY2UgJyVzJy4gIFZhbGlkIGNob2ljZXM6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlLCBjaG9pY2VzKSkKKyAgICByZXR1cm4gdmFsdWUKKworY2xhc3MgTm9NYXRjaChvYmplY3QpOgorICAgICIiIlN0dWIgcHl0aG9uIHJlZ2V4IHBhdHRlcm4gb2JqZWN0IHdoaWNoIG5ldmVyIG1hdGNoZXMgYW55dGhpbmciIiIKKyAgICBkZWYgZmluZGFsbChzZWxmLCBzdHJpbmcsIGZsYWdzPTApOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGZpbmRpdGVyKHNlbGYsIHN0cmluZywgZmxhZ3M9MCk6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgbWF0Y2goc2VsZiwgZmxhZ3M9MCk6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgc2VhcmNoKHNlbGYsIHN0cmluZywgZmxhZ3M9MCk6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgc3BsaXQoc2VsZiwgc3RyaW5nLCBtYXhzcGxpdD0wKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzdWIocGF0dGVybiwgcmVwbCwgc3RyaW5nLCBjb3VudD0wKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzdWJuKHBhdHRlcm4sIHJlcGwsIHN0cmluZywgY291bnQ9MCk6CisgICAgICAgIHJldHVybiBOb25lCisKK05vTWF0Y2ggPSBOb01hdGNoKCkKKworZGVmIHJlZ2V4KHZhbHVlLCByZWdleGZsYWdzPU5vbmUpOgorICAgICIiIk9wZW5FbWJlZGRlZCAncmVnZXgnIHR5cGUKKworICAgIEFjdHMgYXMgYSByZWd1bGFyIGV4cHJlc3Npb24sIHJldHVybmluZyB0aGUgcHJlLWNvbXBpbGVkIHJlZ3VsYXIKKyAgICBleHByZXNzaW9uIHBhdHRlcm4gb2JqZWN0LiAgVG8gdXNlIHRoaXMgdHlwZSwgc2V0IHRoZSB2YXJpYWJsZSB0eXBlIGZsYWcKKyAgICB0byAncmVnZXgnLCBhbmQgb3B0aW9uYWxseSwgc2V0IHRoZSAncmVnZXhmbGFncycgdHlwZSB0byBhIHNwYWNlIHNlcGFyYXRlZAorICAgIGxpc3Qgb2YgdGhlIGZsYWdzIHRvIGNvbnRyb2wgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyAoZS5nLgorICAgIEZPT1tyZWdleGZsYWdzXSArPSAnaWdub3JlY2FzZScpLiAgU2VlIHRoZSBweXRob24gZG9jdW1lbnRhdGlvbiBvbiB0aGUKKyAgICAncmUnIG1vZHVsZSBmb3IgYSBsaXN0IG9mIHZhbGlkIGZsYWdzLiIiIgorCisgICAgZmxhZ3ZhbCA9IDAKKyAgICBpZiByZWdleGZsYWdzOgorICAgICAgICBmb3IgZmxhZyBpbiByZWdleGZsYWdzLnNwbGl0KCk6CisgICAgICAgICAgICBmbGFnID0gZmxhZy51cHBlcigpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmxhZ3ZhbCB8PSBnZXRhdHRyKHJlLCBmbGFnKQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgcmVnZXggZmxhZyAnJXMnIiAlIGZsYWcpCisKKyAgICBpZiBub3QgdmFsdWU6CisgICAgICAgICMgTGV0J3MgZW5zdXJlIHRoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGFuIHVuZGVmaW5lZCBvciBlbXB0eQorICAgICAgICAjIHZhcmlhYmxlIGlzIHRvIG1hdGNoIG5vdGhpbmcuIElmIHRoZSB1c2VyIGV4cGxpY2l0bHkgd2FudHMgdG8gbWF0Y2gKKyAgICAgICAgIyBhbnl0aGluZywgdGhleSBjYW4gbWF0Y2ggJy4qJyBpbnN0ZWFkLgorICAgICAgICByZXR1cm4gTm9NYXRjaAorCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gcmUuY29tcGlsZSh2YWx1ZSwgZmxhZ3ZhbCkKKyAgICBleGNlcHQgcmUuZXJyb3IgYXMgZXhjOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIHJlZ2V4IHZhbHVlICclcyc6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlLCBleGMuYXJnc1swXSkpCisKK2RlZiBib29sZWFuKHZhbHVlKToKKyAgICAiIiJPcGVuRW1iZWRkZWQgJ2Jvb2xlYW4nIHR5cGUKKworICAgIFZhbGlkIHZhbHVlcyBmb3IgdHJ1ZTogJ3llcycsICd5JywgJ3RydWUnLCAndCcsICcxJworICAgIFZhbGlkIHZhbHVlcyBmb3IgZmFsc2U6ICdubycsICduJywgJ2ZhbHNlJywgJ2YnLCAnMCcKKyAgICAiIiIKKworICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJib29sZWFuIGFjY2VwdHMgYSBzdHJpbmcsIG5vdCAnJXMnIiAlIHR5cGUodmFsdWUpKQorCisgICAgdmFsdWUgPSB2YWx1ZS5sb3dlcigpCisgICAgaWYgdmFsdWUgaW4gKCd5ZXMnLCAneScsICd0cnVlJywgJ3QnLCAnMScpOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGVsaWYgdmFsdWUgaW4gKCdubycsICduJywgJ2ZhbHNlJywgJ2YnLCAnMCcpOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIGJvb2xlYW4gdmFsdWUgJyVzJyIgJSB2YWx1ZSkKKworZGVmIGludGVnZXIodmFsdWUsIG51bWJlcmJhc2U9MTApOgorICAgICIiIk9wZW5FbWJlZGRlZCAnaW50ZWdlcicgdHlwZQorCisgICAgRGVmYXVsdHMgdG8gYmFzZSAxMCwgYnV0IHRoaXMgY2FuIGJlIHNwZWNpZmllZCB1c2luZyB0aGUgb3B0aW9uYWwKKyAgICAnbnVtYmVyYmFzZScgZmxhZy4iIiIKKworICAgIHJldHVybiBpbnQodmFsdWUsIGludChudW1iZXJiYXNlKSkKKworX2Zsb2F0ID0gZmxvYXQKK2RlZiBmbG9hdCh2YWx1ZSwgZnJvbWhleD0nZmFsc2UnKToKKyAgICAiIiJPcGVuRW1iZWRkZWQgZmxvYXRpbmcgcG9pbnQgdHlwZQorCisgICAgVG8gdXNlIHRoaXMgdHlwZSwgc2V0IHRoZSB0eXBlIGZsYWcgdG8gJ2Zsb2F0JywgYW5kIG9wdGlvbmFsbHkgc2V0IHRoZQorICAgICdmcm9taGV4JyBmbGFnIHRvIGEgdHJ1ZSB2YWx1ZSAob2JleWluZyB0aGUgc2FtZSBydWxlcyBhcyBmb3IgdGhlCisgICAgJ2Jvb2xlYW4nIHR5cGUpIGlmIHRoZSB2YWx1ZSBpcyBpbiBiYXNlIDE2IHJhdGhlciB0aGFuIGJhc2UgMTAuIiIiCisKKyAgICBpZiBib29sZWFuKGZyb21oZXgpOgorICAgICAgICByZXR1cm4gX2Zsb2F0LmZyb21oZXgodmFsdWUpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIF9mbG9hdCh2YWx1ZSkKKworZGVmIHBhdGgodmFsdWUsIHJlbGF0aXZldG89JycsIG5vcm1hbGl6ZT0ndHJ1ZScsIG11c3RleGlzdD0nZmFsc2UnKToKKyAgICB2YWx1ZSA9IG9zLnBhdGguam9pbihyZWxhdGl2ZXRvLCB2YWx1ZSkKKworICAgIGlmIGJvb2xlYW4obm9ybWFsaXplKToKKyAgICAgICAgdmFsdWUgPSBvcy5wYXRoLm5vcm1wYXRoKHZhbHVlKQorCisgICAgaWYgYm9vbGVhbihtdXN0ZXhpc3QpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcGVuKHZhbHVlLCAncicpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGlmIGV4Yy5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiezB9OiB7MX0iLmZvcm1hdCh2YWx1ZSwgb3Muc3RyZXJyb3IoZXJybm8uRU5PRU5UKSkpCisKKyAgICByZXR1cm4gdmFsdWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdXRpbHMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZTA4N2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3V0aWxzLnB5CkBAIC0wLDAgKzEsMjczIEBACit0cnk6CisgICAgIyBQeXRob24gMgorICAgIGltcG9ydCBjb21tYW5kcyBhcyBjbWRzdGF0dXMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAjIFB5dGhvbiAzCisgICAgaW1wb3J0IHN1YnByb2Nlc3MgYXMgY21kc3RhdHVzCisKK2RlZiByZWFkX2ZpbGUoZmlsZW5hbWUpOgorICAgIHRyeToKKyAgICAgICAgZiA9IG9wZW4oIGZpbGVuYW1lLCAiciIgKQorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIHJlYXNvbjoKKyAgICAgICAgcmV0dXJuICIiICMgV0FSTklORzogY2FuJ3QgcmFpc2UgYW4gZXJyb3Igbm93IGJlY2F1c2Ugb2YgdGhlIG5ldyBSREVQRU5EUyBoYW5kbGluZy4gVGhpcyBpcyBhIGJpdCB1Z2x5LiA6TToKKyAgICBlbHNlOgorICAgICAgICBkYXRhID0gZi5yZWFkKCkuc3RyaXAoKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIGRhdGEKKyAgICByZXR1cm4gTm9uZQorCitkZWYgaWZlbHNlKGNvbmRpdGlvbiwgaWZ0cnVlID0gVHJ1ZSwgaWZmYWxzZSA9IEZhbHNlKToKKyAgICBpZiBjb25kaXRpb246CisgICAgICAgIHJldHVybiBpZnRydWUKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gaWZmYWxzZQorCitkZWYgY29uZGl0aW9uYWwodmFyaWFibGUsIGNoZWNrdmFsdWUsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCk6CisgICAgaWYgZC5nZXRWYXIodmFyaWFibGUsMSkgPT0gY2hlY2t2YWx1ZToKKyAgICAgICAgcmV0dXJuIHRydWV2YWx1ZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBmYWxzZXZhbHVlCisKK2RlZiBsZXNzX29yX2VxdWFsKHZhcmlhYmxlLCBjaGVja3ZhbHVlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpOgorICAgIGlmIGZsb2F0KGQuZ2V0VmFyKHZhcmlhYmxlLDEpKSA8PSBmbG9hdChjaGVja3ZhbHVlKToKKyAgICAgICAgcmV0dXJuIHRydWV2YWx1ZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBmYWxzZXZhbHVlCisKK2RlZiB2ZXJzaW9uX2xlc3Nfb3JfZXF1YWwodmFyaWFibGUsIGNoZWNrdmFsdWUsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCk6CisgICAgcmVzdWx0ID0gYmIudXRpbHMudmVyY21wX3N0cmluZyhkLmdldFZhcih2YXJpYWJsZSxUcnVlKSwgY2hlY2t2YWx1ZSkKKyAgICBpZiByZXN1bHQgPD0gMDoKKyAgICAgICAgcmV0dXJuIHRydWV2YWx1ZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBmYWxzZXZhbHVlCisKK2RlZiBib3RoX2NvbnRhaW4odmFyaWFibGUxLCB2YXJpYWJsZTIsIGNoZWNrdmFsdWUsIGQpOgorICAgIHZhbDEgPSBkLmdldFZhcih2YXJpYWJsZTEsIFRydWUpCisgICAgdmFsMiA9IGQuZ2V0VmFyKHZhcmlhYmxlMiwgVHJ1ZSkKKyAgICB2YWwxID0gc2V0KHZhbDEuc3BsaXQoKSkKKyAgICB2YWwyID0gc2V0KHZhbDIuc3BsaXQoKSkKKyAgICBpZiBpc2luc3RhbmNlKGNoZWNrdmFsdWUsIGJhc2VzdHJpbmcpOgorICAgICAgICBjaGVja3ZhbHVlID0gc2V0KGNoZWNrdmFsdWUuc3BsaXQoKSkKKyAgICBlbHNlOgorICAgICAgICBjaGVja3ZhbHVlID0gc2V0KGNoZWNrdmFsdWUpCisgICAgaWYgY2hlY2t2YWx1ZS5pc3N1YnNldCh2YWwxKSBhbmQgY2hlY2t2YWx1ZS5pc3N1YnNldCh2YWwyKToKKyAgICAgICAgcmV0dXJuICIgIi5qb2luKGNoZWNrdmFsdWUpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuICIiCisKK2RlZiBzZXRfaW50ZXJzZWN0KHZhcmlhYmxlMSwgdmFyaWFibGUyLCBkKToKKyAgICAiIiIKKyAgICBFeHBhbmQgYm90aCB2YXJpYWJsZXMsIGludGVycHJldCB0aGVtIGFzIGxpc3RzIG9mIHN0cmluZ3MsIGFuZCByZXR1cm4gdGhlCisgICAgaW50ZXJzZWN0aW9uIGFzIGEgZmxhdHRlbmVkIHN0cmluZy4KKworICAgIEZvciBleGFtcGxlOgorICAgIHMxID0gImEgYiBjIgorICAgIHMyID0gImIgYyBkIgorICAgIHMzID0gc2V0X2ludGVyc2VjdChzMSwgczIpCisgICAgPT4gczMgPSAiYiBjIgorICAgICIiIgorICAgIHZhbDEgPSBzZXQoZC5nZXRWYXIodmFyaWFibGUxLCBUcnVlKS5zcGxpdCgpKQorICAgIHZhbDIgPSBzZXQoZC5nZXRWYXIodmFyaWFibGUyLCBUcnVlKS5zcGxpdCgpKQorICAgIHJldHVybiAiICIuam9pbih2YWwxICYgdmFsMikKKworZGVmIHBydW5lX3N1ZmZpeCh2YXIsIHN1ZmZpeGVzLCBkKToKKyAgICAjIFNlZSBpZiB2YXIgZW5kcyB3aXRoIGFueSBvZiB0aGUgc3VmZml4ZXMgbGlzdGVkIGFuZAorICAgICMgcmVtb3ZlIGl0IGlmIGZvdW5kCisgICAgZm9yIHN1ZmZpeCBpbiBzdWZmaXhlczoKKyAgICAgICAgaWYgdmFyLmVuZHN3aXRoKHN1ZmZpeCk6CisgICAgICAgICAgICB2YXIgPSB2YXIucmVwbGFjZShzdWZmaXgsICIiKQorCisgICAgcHJlZml4ID0gZC5nZXRWYXIoIk1MUFJFRklYIiwgVHJ1ZSkKKyAgICBpZiBwcmVmaXggYW5kIHZhci5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgIHZhciA9IHZhci5yZXBsYWNlKHByZWZpeCwgIiIpCisKKyAgICByZXR1cm4gdmFyCisKK2RlZiBzdHJfZmlsdGVyKGYsIHN0ciwgZCk6CisgICAgZnJvbSByZSBpbXBvcnQgbWF0Y2gKKyAgICByZXR1cm4gIiAiLmpvaW4oZmlsdGVyKGxhbWJkYSB4OiBtYXRjaChmLCB4LCAwKSwgc3RyLnNwbGl0KCkpKQorCitkZWYgc3RyX2ZpbHRlcl9vdXQoZiwgc3RyLCBkKToKKyAgICBmcm9tIHJlIGltcG9ydCBtYXRjaAorICAgIHJldHVybiAiICIuam9pbihmaWx0ZXIobGFtYmRhIHg6IG5vdCBtYXRjaChmLCB4LCAwKSwgc3RyLnNwbGl0KCkpKQorCitkZWYgcGFyYW1fYm9vbChjZmcsIGZpZWxkLCBkZmx0ID0gTm9uZSk6CisgICAgIiIiTG9va3VwIDxmaWVsZD4gaW4gPGNmZz4gbWFwIGFuZCBjb252ZXJ0IGl0IHRvIGEgYm9vbGVhbjsgdGFrZQorICAgIDxkZmx0PiB3aGVuIHRoaXMgPGZpZWxkPiBkb2VzIG5vdCBleGlzdCIiIgorICAgIHZhbHVlID0gY2ZnLmdldChmaWVsZCwgZGZsdCkKKyAgICBzdHJ2YWx1ZSA9IHN0cih2YWx1ZSkubG93ZXIoKQorICAgIGlmIHN0cnZhbHVlIGluICgneWVzJywgJ3knLCAndHJ1ZScsICd0JywgJzEnKToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBlbGlmIHN0cnZhbHVlIGluICgnbm8nLCAnbicsICdmYWxzZScsICdmJywgJzAnKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCB2YWx1ZSBmb3IgYm9vbGVhbiBwYXJhbWV0ZXIgJyVzJzogJyVzJyIgJSAoZmllbGQsIHZhbHVlKSkKKworZGVmIGluaGVyaXRzKGQsICpjbGFzc2VzKToKKyAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgbWV0YWRhdGEgaW5oZXJpdHMgYW55IG9mIHRoZSBzcGVjaWZpZWQgY2xhc3NlcyIiIgorICAgIHJldHVybiBhbnkoYmIuZGF0YS5pbmhlcml0c19jbGFzcyhjbHMsIGQpIGZvciBjbHMgaW4gY2xhc3NlcykKKworZGVmIGZlYXR1cmVzX2JhY2tmaWxsKHZhcixkKToKKyAgICAjIFRoaXMgY29uc3RydWN0IGFsbG93cyB0aGUgYWRkaXRpb24gb2YgbmV3IGZlYXR1cmVzIHRvIHZhcmlhYmxlIHNwZWNpZmllZAorICAgICMgYXMgdmFyCisgICAgIyBFeGFtcGxlIGZvciB2YXIgPSAiRElTVFJPX0ZFQVRVUkVTIgorICAgICMgVGhpcyBjb25zdHJ1Y3QgYWxsb3dzIHRoZSBhZGRpdGlvbiBvZiBuZXcgZmVhdHVyZXMgdG8gRElTVFJPX0ZFQVRVUkVTCisgICAgIyB0aGF0IGlmIG5vdCBwcmVzZW50IHdvdWxkIGRpc2FibGUgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eSwgd2l0aG91dAorICAgICMgZGlzdHVyYmluZyBkaXN0cmlidXRpb25zIHRoYXQgaGF2ZSBhbHJlYWR5IHNldCBESVNUUk9fRkVBVFVSRVMuCisgICAgIyBEaXN0cmlidXRpb25zIHdhbnRpbmcgdG8gZWxpZGUgYSB2YWx1ZSBpbiBESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTEwgc2hvdWxkCisgICAgIyBhZGQgdGhlIGZlYXR1cmUgdG8gRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQKKyAgICBmZWF0dXJlcyA9IChkLmdldFZhcih2YXIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgYmFja2ZpbGwgPSAoZC5nZXRWYXIodmFyKyJfQkFDS0ZJTEwiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGNvbnNpZGVyZWQgPSAoZC5nZXRWYXIodmFyKyJfQkFDS0ZJTExfQ09OU0lERVJFRCIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisKKyAgICBhZGRmZWF0dXJlcyA9IFtdCisgICAgZm9yIGZlYXR1cmUgaW4gYmFja2ZpbGw6CisgICAgICAgIGlmIGZlYXR1cmUgbm90IGluIGZlYXR1cmVzIGFuZCBmZWF0dXJlIG5vdCBpbiBjb25zaWRlcmVkOgorICAgICAgICAgICAgYWRkZmVhdHVyZXMuYXBwZW5kKGZlYXR1cmUpCisKKyAgICBpZiBhZGRmZWF0dXJlczoKKyAgICAgICAgZC5hcHBlbmRWYXIodmFyLCAiICIgKyAiICIuam9pbihhZGRmZWF0dXJlcykpCisKKworZGVmIHBhY2thZ2VzX2ZpbHRlcl9vdXRfc3lzdGVtKGQpOgorICAgICIiIgorICAgIFJldHVybiBhIGxpc3Qgb2YgcGFja2FnZXMgZnJvbSBQQUNLQUdFUyB3aXRoIHRoZSAic3lzdGVtIiBwYWNrYWdlcyBzdWNoIGFzCisgICAgUE4tZGJnIFBOLWRvYyBQTi1sb2NhbGUtZWItZ2IgcmVtb3ZlZC4KKyAgICAiIiIKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgYmxhY2tsaXN0ID0gbWFwKGxhbWJkYSBzdWZmaXg6IHBuICsgc3VmZml4LCAoJycsICctZGJnJywgJy1kZXYnLCAnLWRvYycsICctbG9jYWxlJywgJy1zdGF0aWNkZXYnKSkKKyAgICBsb2NhbGVwa2cgPSBwbiArICItbG9jYWxlLSIKKyAgICBwa2dzID0gW10KKworICAgIGZvciBwa2cgaW4gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgaWYgcGtnIG5vdCBpbiBibGFja2xpc3QgYW5kIGxvY2FsZXBrZyBub3QgaW4gcGtnOgorICAgICAgICAgICAgcGtncy5hcHBlbmQocGtnKQorICAgIHJldHVybiBwa2dzCisKK2RlZiBnZXRzdGF0dXNvdXRwdXQoY21kKToKKyAgICByZXR1cm4gY21kc3RhdHVzLmdldHN0YXR1c291dHB1dChjbWQpCisKKworZGVmIHRyaW1fdmVyc2lvbih2ZXJzaW9uLCBudW1fcGFydHM9Mik6CisgICAgIiIiCisgICAgUmV0dXJuIGp1c3QgdGhlIGZpcnN0IDxudW1fcGFydHM+IG9mIDx2ZXJzaW9uPiwgc3BsaXQgYnkgcGVyaW9kcy4gIEZvcgorICAgIGV4YW1wbGUsIHRyaW1fdmVyc2lvbigiMS4yLjMiLCAyKSB3aWxsIHJldHVybiAiMS4yIi4KKyAgICAiIiIKKyAgICBpZiB0eXBlKHZlcnNpb24pIGlzIG5vdCBzdHI6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVmVyc2lvbiBzaG91bGQgYmUgYSBzdHJpbmciKQorICAgIGlmIG51bV9wYXJ0cyA8IDE6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCBzcGxpdCB0byBwYXJ0cyA8IDEiKQorCisgICAgcGFydHMgPSB2ZXJzaW9uLnNwbGl0KCIuIikKKyAgICB0cmltbWVkID0gIi4iLmpvaW4ocGFydHNbOm51bV9wYXJ0c10pCisgICAgcmV0dXJuIHRyaW1tZWQKKworZGVmIGNwdV9jb3VudCgpOgorICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKKyAgICByZXR1cm4gbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpCisKK2RlZiBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3MoZCwgY21kcyk6CisgICAgaWYgY21kcyBpcyBOb25lOgorICAgICAgICByZXR1cm4KKworICAgIGZvciBjbWQgaW4gY21kcy5zdHJpcCgpLnNwbGl0KCc7Jyk6CisgICAgICAgIGNtZCA9IGNtZC5zdHJpcCgpCisgICAgICAgIGlmIGNtZCAhPSAnJzoKKyAgICAgICAgICAgIGJiLm5vdGUoIkV4ZWN1dGluZyAlcyAuLi4iICUgY21kKQorICAgICAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGNtZCwgZCkKKworZGVmIG11bHRpcHJvY2Vzc19leGVjKGNvbW1hbmRzLCBmdW5jdGlvbik6CisgICAgaW1wb3J0IHNpZ25hbAorICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKKworICAgIGlmIG5vdCBjb21tYW5kczoKKyAgICAgICAgcmV0dXJuIFtdCisKKyAgICBkZWYgaW5pdF93b3JrZXIoKToKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBzaWduYWwuU0lHX0lHTikKKworICAgIG5wcm9jID0gbWluKG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKSwgbGVuKGNvbW1hbmRzKSkKKyAgICBwb29sID0gYmIudXRpbHMubXVsdGlwcm9jZXNzaW5ncG9vbChucHJvYywgaW5pdF93b3JrZXIpCisgICAgaW1hcCA9IHBvb2wuaW1hcChmdW5jdGlvbiwgY29tbWFuZHMpCisKKyAgICB0cnk6CisgICAgICAgIHJlcyA9IGxpc3QoaW1hcCkKKyAgICAgICAgcG9vbC5jbG9zZSgpCisgICAgICAgIHBvb2wuam9pbigpCisgICAgICAgIHJlc3VsdHMgPSBbXQorICAgICAgICBmb3IgcmVzdWx0IGluIHJlczoKKyAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHRzCisKKyAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgIHBvb2wudGVybWluYXRlKCkKKyAgICAgICAgcG9vbC5qb2luKCkKKyAgICAgICAgcmFpc2UKKworZGVmIHNxdWFzaHNwYWNlcyhzdHJpbmcpOgorICAgIGltcG9ydCByZQorICAgIHJldHVybiByZS5zdWIoIlxzKyIsICIgIiwgc3RyaW5nKS5zdHJpcCgpCisKKyMKKyMgUHl0aG9uIDIuNyBkb2Vzbid0IGhhdmUgdGhyZWFkZWQgcG9vbHMgKGp1c3QgbXVsdGlwcm9jZXNzaW5nKQorIyBzbyBpbXBsZW1lbnQgYSB2ZXJzaW9uIGhlcmUKKyMKKworZnJvbSBRdWV1ZSBpbXBvcnQgUXVldWUKK2Zyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQKKworY2xhc3MgVGhyZWFkZWRXb3JrZXIoVGhyZWFkKToKKyAgICAiIiJUaHJlYWQgZXhlY3V0aW5nIHRhc2tzIGZyb20gYSBnaXZlbiB0YXNrcyBxdWV1ZSIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXNrcywgd29ya2VyX2luaXQsIHdvcmtlcl9lbmQpOgorICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi50YXNrcyA9IHRhc2tzCisgICAgICAgIHNlbGYuZGFlbW9uID0gVHJ1ZQorCisgICAgICAgIHNlbGYud29ya2VyX2luaXQgPSB3b3JrZXJfaW5pdAorICAgICAgICBzZWxmLndvcmtlcl9lbmQgPSB3b3JrZXJfZW5kCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBmcm9tIFF1ZXVlIGltcG9ydCBFbXB0eQorCisgICAgICAgIGlmIHNlbGYud29ya2VyX2luaXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLndvcmtlcl9pbml0KHNlbGYpCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmdW5jLCBhcmdzLCBrYXJncyA9IHNlbGYudGFza3MuZ2V0KGJsb2NrPUZhbHNlKQorICAgICAgICAgICAgZXhjZXB0IEVtcHR5OgorICAgICAgICAgICAgICAgIGlmIHNlbGYud29ya2VyX2VuZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi53b3JrZXJfZW5kKHNlbGYpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZ1bmMoc2VsZiwgKmFyZ3MsICoqa2FyZ3MpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgIHByaW50IGUKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2VsZi50YXNrcy50YXNrX2RvbmUoKQorCitjbGFzcyBUaHJlYWRlZFBvb2w6CisgICAgIiIiUG9vbCBvZiB0aHJlYWRzIGNvbnN1bWluZyB0YXNrcyBmcm9tIGEgcXVldWUiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbnVtX3dvcmtlcnMsIG51bV90YXNrcywgd29ya2VyX2luaXQ9Tm9uZSwKKyAgICAgICAgICAgIHdvcmtlcl9lbmQ9Tm9uZSk6CisgICAgICAgIHNlbGYudGFza3MgPSBRdWV1ZShudW1fdGFza3MpCisgICAgICAgIHNlbGYud29ya2VycyA9IFtdCisKKyAgICAgICAgZm9yIF8gaW4gcmFuZ2UobnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgd29ya2VyID0gVGhyZWFkZWRXb3JrZXIoc2VsZi50YXNrcywgd29ya2VyX2luaXQsIHdvcmtlcl9lbmQpCisgICAgICAgICAgICBzZWxmLndvcmtlcnMuYXBwZW5kKHdvcmtlcikKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgZm9yIHdvcmtlciBpbiBzZWxmLndvcmtlcnM6CisgICAgICAgICAgICB3b3JrZXIuc3RhcnQoKQorCisgICAgZGVmIGFkZF90YXNrKHNlbGYsIGZ1bmMsICphcmdzLCAqKmthcmdzKToKKyAgICAgICAgIiIiQWRkIGEgdGFzayB0byB0aGUgcXVldWUiIiIKKyAgICAgICAgc2VsZi50YXNrcy5wdXQoKGZ1bmMsIGFyZ3MsIGthcmdzKSkKKworICAgIGRlZiB3YWl0X2NvbXBsZXRpb24oc2VsZik6CisgICAgICAgICIiIldhaXQgZm9yIGNvbXBsZXRpb24gb2YgYWxsIHRoZSB0YXNrcyBpbiB0aGUgcXVldWUiIiIKKyAgICAgICAgc2VsZi50YXNrcy5qb2luKCkKKyAgICAgICAgZm9yIHdvcmtlciBpbiBzZWxmLndvcmtlcnM6CisgICAgICAgICAgICB3b3JrZXIuam9pbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvX19pbml0X18ucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvbnRyb2xsZXJzL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvbnRyb2xsZXJzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZGE5MjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29udHJvbGxlcnMvX19pbml0X18ucHkKQEAgLTAsMCArMSwzIEBACisjIEVuYWJsZSBvdGhlciBsYXllcnMgdG8gaGF2ZSBtb2R1bGVzIGluIHRoZSBzYW1lIG5hbWVkIGRpcmVjdG9yeQorZnJvbSBwa2d1dGlsIGltcG9ydCBleHRlbmRfcGF0aAorX19wYXRoX18gPSBleHRlbmRfcGF0aChfX3BhdGhfXywgX19uYW1lX18pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29udHJvbGxlcnMvbWFzdGVyaW1hZ2UucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29udHJvbGxlcnMvbWFzdGVyaW1hZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIyZjllYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb250cm9sbGVycy9tYXN0ZXJpbWFnZS5weQpAQCAtMCwwICsxLDIwMSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IHRvIHRlc3RpbWFnZS5iYmNsYXNzIHRvIGRlcGxveSBpbWFnZXMgYW5kIHJ1bgorIyB0ZXN0cyB1c2luZyBhICJtYXN0ZXIgaW1hZ2UiIC0gdGhpcyBpcyBhICJrbm93biBnb29kIiBpbWFnZSB0aGF0IGlzCisjIGluc3RhbGxlZCBvbnRvIHRoZSBkZXZpY2UgYXMgcGFydCBvZiBpbml0aWFsIHNldHVwIGFuZCB3aWxsIGJlIGJvb3RlZCBpbnRvCisjIHdpdGggbm8gaW50ZXJhY3Rpb247IHdlIGNhbiB0aGVuIHVzZSBpdCB0byBkZXBsb3kgdGhlIGltYWdlIHRvIGJlIHRlc3RlZAorIyB0byBhIHNlY29uZCBwYXJ0aXRpb24gYmVmb3JlIHJ1bm5pbmcgdGhlIHRlc3RzLgorIworIyBGb3IgYW4gZXhhbXBsZSBtYXN0ZXIgaW1hZ2UsIHNlZSBjb3JlLWltYWdlLXRlc3RtYXN0ZXIKKyMgKG1ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS10ZXN0bWFzdGVyLmJiKQorCitpbXBvcnQgb3MKK2ltcG9ydCBiYgoraW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHRpbWUKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2ltcG9ydCBvZXFhLnRhcmdldGNvbnRyb2wKK2ltcG9ydCBvZXFhLnV0aWxzLnNzaGNvbnRyb2wgYXMgc3NoY29udHJvbAoraW1wb3J0IG9lcWEudXRpbHMuY29tbWFuZHMgYXMgY29tbWFuZHMKK2Zyb20gb2VxYS51dGlscyBpbXBvcnQgQ29tbWFuZEVycm9yCisKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAorCitjbGFzcyBNYXN0ZXJJbWFnZUhhcmR3YXJlVGFyZ2V0KG9lcWEudGFyZ2V0Y29udHJvbC5CYXNlVGFyZ2V0KToKKworICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCisKKyAgICBzdXBwb3J0ZWRfaW1hZ2VfZnN0eXBlcyA9IFsndGFyLmd6JywgJ3Rhci5iejInXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzdXBlcihNYXN0ZXJJbWFnZUhhcmR3YXJlVGFyZ2V0LCBzZWxmKS5fX2luaXRfXyhkKQorCisgICAgICAgICMgdGFyZ2V0IGlwCisgICAgICAgIGFkZHIgPSBkLmdldFZhcigiVEVTVF9UQVJHRVRfSVAiLCBUcnVlKSBvciBiYi5mYXRhbCgnUGxlYXNlIHNldCBURVNUX1RBUkdFVF9JUCB3aXRoIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBtYWNoaW5lIHlvdSB3YW50IHRvIHJ1biB0aGUgdGVzdHMgb24uJykKKyAgICAgICAgc2VsZi5pcCA9IGFkZHIuc3BsaXQoIjoiKVswXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnBvcnQgPSBhZGRyLnNwbGl0KCI6IilbMV0KKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBzZWxmLnBvcnQgPSBOb25lCisgICAgICAgIGJiLm5vdGUoIlRhcmdldCBJUDogJXMiICUgc2VsZi5pcCkKKyAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBkLmdldFZhcigiVEVTVF9TRVJWRVJfSVAiLCBUcnVlKQorICAgICAgICBpZiBub3Qgc2VsZi5zZXJ2ZXJfaXA6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ2lwJywgJ3JvdXRlJywgJ2dldCcsIHNlbGYuaXAgXSkuc3BsaXQoIlxuIilbMF0uc3BsaXQoKVstMV0KKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiRmFpbGVkIHRvIGRldGVybWluZSB0aGUgaG9zdCBJUCBhZGRyZXNzIChhbHRlcm5hdGl2ZWx5IHlvdSBjYW4gc2V0IFRFU1RfU0VSVkVSX0lQIHdpdGggdGhlIElQIGFkZHJlc3Mgb2YgdGhpcyBtYWNoaW5lKTogJXMiICUgZSkKKyAgICAgICAgYmIubm90ZSgiU2VydmVyIElQOiAlcyIgJSBzZWxmLnNlcnZlcl9pcCkKKworICAgICAgICAjIHRlc3Qgcm9vdGZzICsga2VybmVsCisgICAgICAgIHNlbGYuaW1hZ2VfZnN0eXBlID0gc2VsZi5nZXRfaW1hZ2VfZnN0eXBlKGQpCisgICAgICAgIHNlbGYucm9vdGZzID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJERVBMT1lfRElSX0lNQUdFIiwgVHJ1ZSksIGQuZ2V0VmFyKCJJTUFHRV9MSU5LX05BTUUiLCBUcnVlKSArICcuJyArIHNlbGYuaW1hZ2VfZnN0eXBlKQorICAgICAgICBzZWxmLmtlcm5lbCA9IG9zLnBhdGguam9pbihkLmdldFZhcigiREVQTE9ZX0RJUl9JTUFHRSIsIFRydWUpLCBkLmdldFZhcigiS0VSTkVMX0lNQUdFVFlQRSIsIEZhbHNlKSArICctJyArIGQuZ2V0VmFyKCdNQUNISU5FJywgRmFsc2UpICsgJy5iaW4nKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoc2VsZi5yb290ZnMpOgorICAgICAgICAgICAgIyB3ZSBjb3VsZCd2ZSBjaGVja2VkIHRoYXQgSU1BR0VfRlNUWVBFUyBjb250YWlucyB0YXIuZ3ogYnV0IHRoZSBjb25maWcgZm9yIHJ1bm5pbmcgdGVzdGltYWdlIG1pZ2h0IG5vdCBiZQorICAgICAgICAgICAgIyB0aGUgc2FtZSBhcyB0aGUgY29uZmlnIHdpdGggd2hpY2ggdGhlIGltYWdlIHdhcyBidWlsZCwgaWUKKyAgICAgICAgICAgICMgeW91IGJpdGJha2UgY29yZS1pbWFnZS1zYXRvIHdpdGggSU1BR0VfRlNUWVBFUyArPSAidGFyLmd6IgorICAgICAgICAgICAgIyBhbmQgeW91ciBhdXRvYnVpbGRlciBvdmVyd3JpdGVzIHRoZSBjb25maWcsIGFkZHMgdGhlIHRlc3QgYml0cyBhbmQgcnVucyBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0byAtYyB0ZXN0aW1hZ2UKKyAgICAgICAgICAgIGJiLmZhdGFsKCJObyByb290ZnMgZm91bmQuIERpZCB5b3UgYnVpbGQgdGhlIGltYWdlID9cbklmIHllcywgZGlkIHlvdSBidWlsZCBpdCB3aXRoIElNQUdFX0ZTVFlQRVMgKz0gXCJ0YXIuZ3pcIiA/IFwKKyAgICAgICAgICAgICAgICAgICAgICBcbkV4cGVjdGVkIHBhdGg6ICVzIiAlIHNlbGYucm9vdGZzKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoc2VsZi5rZXJuZWwpOgorICAgICAgICAgICAgYmIuZmF0YWwoIk5vIGtlcm5lbCBmb3VuZC4gRXhwZWN0ZWQgcGF0aDogJXMiICUgc2VsZi5rZXJuZWwpCisKKyAgICAgICAgIyBtYXN0ZXIgc3NoIGNvbm5lY3Rpb24KKyAgICAgICAgc2VsZi5tYXN0ZXIgPSBOb25lCisgICAgICAgICMgaWYgdGhlIHVzZXIga25vd3Mgd2hhdCB0aGV5IGFyZSBkb2luZywgdGhlbiBieSBhbGwgbWVhbnMuLi4KKyAgICAgICAgc2VsZi51c2VyX2NtZHMgPSBkLmdldFZhcigiVEVTVF9ERVBMT1lfQ01EUyIsIFRydWUpCisgICAgICAgIHNlbGYuZGVwbG95X2NtZHMgPSBOb25lCisKKyAgICAgICAgIyB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kIHRoYXQgY29udHJvbHMgdGhlIHBvd2VyIGZvciBhIGJvYXJkCisgICAgICAgICMgZS5nOiBURVNUX1BPV0VSQ09OVFJPTF9DTUQgPSAiL2hvbWUvdXNlci9teXNjcmlwdHMvcG93ZXJjb250cm9sLnB5ICR7TUFDSElORX0gd2hhdC1ldmVyLW90aGVyLWFyZ3MtdGhlLXNjcmlwdC13YW50cyIKKyAgICAgICAgIyB0aGUgY29tbWFuZCBzaG91bGQgdGFrZSBhcyB0aGUgbGFzdCBhcmd1bWVudCAib2ZmIiBhbmQgIm9uIiBhbmQgImN5Y2xlIiAob2ZmLCBvbikKKyAgICAgICAgc2VsZi5wb3dlcmNvbnRyb2xfY21kID0gZC5nZXRWYXIoIlRFU1RfUE9XRVJDT05UUk9MX0NNRCIsIFRydWUpIG9yIE5vbmUKKyAgICAgICAgc2VsZi5wb3dlcmNvbnRyb2xfYXJncyA9IGQuZ2V0VmFyKCJURVNUX1BPV0VSQ09OVFJPTF9FWFRSQV9BUkdTIiwgRmFsc2UpIG9yICIiCisKKyAgICAgICAgc2VsZi5zZXJpYWxjb250cm9sX2NtZCA9IGQuZ2V0VmFyKCJURVNUX1NFUklBTENPTlRST0xfQ01EIiwgVHJ1ZSkgb3IgTm9uZQorICAgICAgICBzZWxmLnNlcmlhbGNvbnRyb2xfYXJncyA9IGQuZ2V0VmFyKCJURVNUX1NFUklBTENPTlRST0xfRVhUUkFfQVJHUyIsIEZhbHNlKSBvciAiIgorCisgICAgICAgIHNlbGYub3JpZ2VudiA9IG9zLmVudmlyb24KKyAgICAgICAgaWYgc2VsZi5wb3dlcmNvbnRyb2xfY21kIG9yIHNlbGYuc2VyaWFsY29udHJvbF9jbWQ6CisgICAgICAgICAgICAjIHRoZSBleHRlcm5hbCBzY3JpcHQgZm9yIGNvbnRyb2xsaW5nIHBvd2VyIG1pZ2h0IHVzZSBzc2gKKyAgICAgICAgICAgICMgc3NoICsga2V5cyBtZWFucyB3ZSBuZWVkIHRoZSBvcmlnaW5hbCB1c2VyIGVudgorICAgICAgICAgICAgYmJvcmlnZW52ID0gZC5nZXRWYXIoIkJCX09SSUdFTlYiLCBGYWxzZSkgb3Ige30KKyAgICAgICAgICAgIGZvciBrZXkgaW4gYmJvcmlnZW52OgorICAgICAgICAgICAgICAgIHZhbCA9IGJib3JpZ2Vudi5nZXRWYXIoa2V5LCBUcnVlKQorICAgICAgICAgICAgICAgIGlmIHZhbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5vcmlnZW52W2tleV0gPSBzdHIodmFsKQorCisgICAgICAgIGlmIHNlbGYucG93ZXJjb250cm9sX2NtZDoKKyAgICAgICAgICAgIGlmIHNlbGYucG93ZXJjb250cm9sX2FyZ3M6CisgICAgICAgICAgICAgICAgc2VsZi5wb3dlcmNvbnRyb2xfY21kID0gIiVzICVzIiAlIChzZWxmLnBvd2VyY29udHJvbF9jbWQsIHNlbGYucG93ZXJjb250cm9sX2FyZ3MpCisgICAgICAgIGlmIHNlbGYuc2VyaWFsY29udHJvbF9jbWQ6CisgICAgICAgICAgICBpZiBzZWxmLnNlcmlhbGNvbnRyb2xfYXJnczoKKyAgICAgICAgICAgICAgICBzZWxmLnNlcmlhbGNvbnRyb2xfY21kID0gIiVzICVzIiAlIChzZWxmLnNlcmlhbGNvbnRyb2xfY21kLCBzZWxmLnNlcmlhbGNvbnRyb2xfYXJncykKKworICAgIGRlZiBwb3dlcl9jdGwoc2VsZiwgbXNnKToKKyAgICAgICAgaWYgc2VsZi5wb3dlcmNvbnRyb2xfY21kOgorICAgICAgICAgICAgY21kID0gIiVzICVzIiAlIChzZWxmLnBvd2VyY29udHJvbF9jbWQsIG1zZykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjb21tYW5kcy5ydW5DbWQoY21kLCBhc3NlcnRfZXJyb3I9RmFsc2UsIHByZWV4ZWNfZm49b3Muc2V0c2lkLCBlbnY9c2VsZi5vcmlnZW52KQorICAgICAgICAgICAgZXhjZXB0IENvbW1hbmRFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKHN0cihlKSkKKworICAgIGRlZiBwb3dlcl9jeWNsZShzZWxmLCBjb25uKToKKyAgICAgICAgaWYgc2VsZi5wb3dlcmNvbnRyb2xfY21kOgorICAgICAgICAgICAgIyBiZSBuaWNlLCBkb24ndCBqdXN0IGN1dCBwb3dlcgorICAgICAgICAgICAgY29ubi5ydW4oInNodXRkb3duIC1oIG5vdyIpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICAgICAgc2VsZi5wb3dlcl9jdGwoImN5Y2xlIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gY29ubi5ydW4oInJlYm9vdCIpCisgICAgICAgICAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgICAgICAgICBiYi5lcnJvcigiRmFpbGVkIHJlYm9vdGluZyB0YXJnZXQgYW5kIG5vIHBvd2VyIGNvbnRyb2wgY29tbWFuZCBkZWZpbmVkLiBZb3UgbmVlZCB0byBtYW51YWxseSByZXNldCB0aGUgZGV2aWNlLlxuJXMiICUgb3V0cHV0KQorCisgICAgZGVmIF93YWl0X3VudGlsX2Jvb3RlZChzZWxmKToKKyAgICAgICAgJycnIFdhaXRzIHVudGlsIHRoZSB0YXJnZXQgZGV2aWNlIGhhcyBib290ZWQgKGlmIHdlIGhhdmUganVzdCBwb3dlciBjeWNsZWQgaXQpICcnJworICAgICAgICAjIFN1YmNsYXNzZXMgd2l0aCBiZXR0ZXIgbWV0aG9kcyBvZiBkZXRlcm1pbmluZyBib290IGNhbiBvdmVycmlkZSB0aGlzCisgICAgICAgIHRpbWUuc2xlZXAoMTIwKQorCisgICAgZGVmIGRlcGxveShzZWxmKToKKyAgICAgICAgIyBiYXNlIGNsYXNzIGp1c3Qgc2V0cyB0aGUgc3NoIGxvZyBmaWxlIGZvciB1cworICAgICAgICBzdXBlcihNYXN0ZXJJbWFnZUhhcmR3YXJlVGFyZ2V0LCBzZWxmKS5kZXBsb3koKQorICAgICAgICBzZWxmLm1hc3RlciA9IHNzaGNvbnRyb2wuU1NIQ29udHJvbChpcD1zZWxmLmlwLCBsb2dmaWxlPXNlbGYuc3NobG9nLCB0aW1lb3V0PTYwMCwgcG9ydD1zZWxmLnBvcnQpCisgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gc2VsZi5tYXN0ZXIucnVuKCJjYXQgL2V0Yy9tYXN0ZXJpbWFnZSIpCisgICAgICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICAgICAgIyBXZSdyZSBub3QgYm9vdGVkIGludG8gdGhlIG1hc3RlciBpbWFnZSwgc28gdHJ5IHJlYm9vdGluZworICAgICAgICAgICAgYmIucGxhaW4oIiVzIC0gYm9vdGluZyBpbnRvIHRoZSBtYXN0ZXIgaW1hZ2UiICUgc2VsZi5wbikKKyAgICAgICAgICAgIHNlbGYucG93ZXJfY3RsKCJjeWNsZSIpCisgICAgICAgICAgICBzZWxmLl93YWl0X3VudGlsX2Jvb3RlZCgpCisKKyAgICAgICAgYmIucGxhaW4oIiVzIC0gZGVwbG95aW5nIGltYWdlIG9uIHRhcmdldCIgJSBzZWxmLnBuKQorICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHNlbGYubWFzdGVyLnJ1bigiY2F0IC9ldGMvbWFzdGVyaW1hZ2UiKQorICAgICAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJObyBzc2ggY29ubmVjdGl2aXR5IG9yIHRhcmdldCBpc24ndCBydW5uaW5nIGEgbWFzdGVyIGltYWdlLlxuJXMiICUgb3V0cHV0KQorICAgICAgICBpZiBzZWxmLnVzZXJfY21kczoKKyAgICAgICAgICAgIHNlbGYuZGVwbG95X2NtZHMgPSBzZWxmLnVzZXJfY21kcy5zcGxpdCgiXG4iKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9kZXBsb3koKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiRmFpbGVkIGRlcGxveWluZyB0ZXN0IGltYWdlOiAlcyIgJSBlKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9kZXBsb3koc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdGFydChzZWxmLCBwYXJhbXM9Tm9uZSk6CisgICAgICAgIGJiLnBsYWluKCIlcyAtIGJvb3QgdGVzdCBpbWFnZSBvbiB0YXJnZXQiICUgc2VsZi5wbikKKyAgICAgICAgc2VsZi5fc3RhcnQoKQorICAgICAgICAjIHNldCB0aGUgc3NoIG9iamVjdCBmb3IgdGhlIHRhcmdldC90ZXN0IGltYWdlCisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IHNzaGNvbnRyb2wuU1NIQ29udHJvbChzZWxmLmlwLCBsb2dmaWxlPXNlbGYuc3NobG9nLCBwb3J0PXNlbGYucG9ydCkKKyAgICAgICAgYmIucGxhaW4oIiVzIC0gc3RhcnQgcnVubmluZyB0ZXN0cyIgJSBzZWxmLnBuKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9zdGFydChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIGJiLnBsYWluKCIlcyAtIHJlYm9vdC9wb3dlcmN5Y2xlIHRhcmdldCIgJSBzZWxmLnBuKQorICAgICAgICBzZWxmLnBvd2VyX2N5Y2xlKHNlbGYuY29ubmVjdGlvbikKKworCitjbGFzcyBHdW1taWJvb3RUYXJnZXQoTWFzdGVySW1hZ2VIYXJkd2FyZVRhcmdldCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisgICAgICAgIHN1cGVyKEd1bW1pYm9vdFRhcmdldCwgc2VsZikuX19pbml0X18oZCkKKyAgICAgICAgIyB0aGlzIHRoZSB2YWx1ZSB3ZSBuZWVkIHRvIHNldCBpbiB0aGUgTG9hZGVyRW50cnlPbmVTaG90IEVGSSB2YXJpYWJsZQorICAgICAgICAjIHNvIHRoZSBzeXN0ZW0gYm9vdHMgdGhlICd0ZXN0JyBib290bG9hZGVyIGxhYmVsIGFuZCBub3QgdGhlIGRlZmF1bHQKKyAgICAgICAgIyBUaGUgZmlyc3QgZm91ciBieXRlcyBhcmUgRUZJIGJpdHMsIGFuZCB0aGUgcmVzdCBpcyBhbiB1dGYtMTZsZSBzdHJpbmcKKyAgICAgICAgIyAoRUZJIHZhcnMgdmFsdWVzIG5lZWQgdG8gYmUgdXRmLTE2KQorICAgICAgICAjICQgZWNobyAtZW4gInRlc3RcMCIgfCBpY29udiAtZiBhc2NpaSAtdCB1dGYtMTZsZSB8IGhleGR1bXAgLUMKKyAgICAgICAgIyAwMDAwMDAwMCAgNzQgMDAgNjUgMDAgNzMgMDAgNzQgMDAgIDAwIDAwICAgICAgICAgICAgICAgICAgICB8dC5lLnMudC4uLnwKKyAgICAgICAgc2VsZi5lZml2YXJ2YWx1ZSA9IHInXHgwN1x4MDBceDAwXHgwMFx4NzRceDAwXHg2NVx4MDBceDczXHgwMFx4NzRceDAwXHgwMFx4MDAnCisgICAgICAgIHNlbGYuZGVwbG95X2NtZHMgPSBbCisgICAgICAgICAgICAgICAgJ21vdW50IC1MIGJvb3QgL2Jvb3QnLAorICAgICAgICAgICAgICAgICdta2RpciAtcCAvbW50L3Rlc3Ryb290ZnMnLAorICAgICAgICAgICAgICAgICdtb3VudCAtTCB0ZXN0cm9vdGZzIC9tbnQvdGVzdHJvb3RmcycsCisgICAgICAgICAgICAgICAgJ21vZHByb2JlIGVmaXZhcmZzJywKKyAgICAgICAgICAgICAgICAnbW91bnQgLXQgZWZpdmFyZnMgZWZpdmFyZnMgL3N5cy9maXJtd2FyZS9lZmkvZWZpdmFycycsCisgICAgICAgICAgICAgICAgJ2NwIH4vdGVzdC1rZXJuZWwgL2Jvb3QnLAorICAgICAgICAgICAgICAgICdybSAtcmYgL21udC90ZXN0cm9vdGZzLyonLAorICAgICAgICAgICAgICAgICd0YXIgeHZmIH4vdGVzdC1yb290ZnMuJXMgLUMgL21udC90ZXN0cm9vdGZzJyAlIHNlbGYuaW1hZ2VfZnN0eXBlLAorICAgICAgICAgICAgICAgICdwcmludGYgIiVzIiA+IC9zeXMvZmlybXdhcmUvZWZpL2VmaXZhcnMvTG9hZGVyRW50cnlPbmVTaG90LTRhNjdiMDgyLTBhNGMtNDFjZi1iNmM3LTQ0MGIyOWJiOGM0ZicgJSBzZWxmLmVmaXZhcnZhbHVlCisgICAgICAgICAgICAgICAgXQorCisgICAgZGVmIF9kZXBsb3koc2VsZik6CisgICAgICAgICMgbWFrZSBzdXJlIHRoZXNlIGFyZW4ndCBtb3VudGVkCisgICAgICAgIHNlbGYubWFzdGVyLnJ1bigidW1vdW50IC9ib290OyB1bW91bnQgL21udC90ZXN0cm9vdGZzOyB1bW91bnQgL3N5cy9maXJtd2FyZS9lZmkvZWZpdmFyczsiKQorICAgICAgICAjIGZyb20gbm93IG9uLCBldmVyeSBkZXBsb3kgY21kIHNob3VsZCByZXR1cm4gMAorICAgICAgICAjIGVsc2UgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duIGJ5IHNzaGNvbnRyb2wKKyAgICAgICAgc2VsZi5tYXN0ZXIuaWdub3JlX3N0YXR1cyA9IEZhbHNlCisgICAgICAgIHNlbGYubWFzdGVyLmNvcHlfdG8oc2VsZi5yb290ZnMsICJ+L3Rlc3Qtcm9vdGZzLiIgKyBzZWxmLmltYWdlX2ZzdHlwZSkKKyAgICAgICAgc2VsZi5tYXN0ZXIuY29weV90byhzZWxmLmtlcm5lbCwgIn4vdGVzdC1rZXJuZWwiKQorICAgICAgICBmb3IgY21kIGluIHNlbGYuZGVwbG95X2NtZHM6CisgICAgICAgICAgICBzZWxmLm1hc3Rlci5ydW4oY21kKQorCisgICAgZGVmIF9zdGFydChzZWxmLCBwYXJhbXM9Tm9uZSk6CisgICAgICAgIHNlbGYucG93ZXJfY3ljbGUoc2VsZi5tYXN0ZXIpCisgICAgICAgICMgdGhlcmUgYXJlIGJldHRlciB3YXlzIHRoYW4gYSB0aW1lb3V0IGJ1dCB0aGlzIHNob3VsZCB3b3JrIGZvciBub3cKKyAgICAgICAgdGltZS5zbGVlcCgxMjApCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29udHJvbGxlcnMvdGVzdHRhcmdldGxvYWRlci5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb250cm9sbGVycy90ZXN0dGFyZ2V0bG9hZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYjdiMWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29udHJvbGxlcnMvdGVzdHRhcmdldGxvYWRlci5weQpAQCAtMCwwICsxLDcwIEBACitpbXBvcnQgdHlwZXMKK2ltcG9ydCBiYgoraW1wb3J0IG9zCisKKyMgVGhpcyBjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IgbG9hZGluZyBhIHRlc3QgdGFyZ2V0IGNvbnRyb2xsZXIKK2NsYXNzIFRlc3RUYXJnZXRMb2FkZXI6CisKKyAgICAjIFNlYXJjaCBvZXFhLmNvbnRyb2xsZXJzIG1vZHVsZSBkaXJlY3RvcnkgZm9yIGFuZCByZXR1cm4gYSBjb250cm9sbGVyICAKKyAgICAjIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIHRhcmdldCBuYW1lLiAKKyAgICAjIEF0dHJpYnV0ZUVycm9yIHJhaXNlZCBpZiBub3QgZm91bmQuCisgICAgIyBJbXBvcnRFcnJvciByYWlzZWQgaWYgYSBwcm92aWRlZCBtb2R1bGUgY2FuIG5vdCBiZSBpbXBvcnRlZC4KKyAgICBkZWYgZ2V0X2NvbnRyb2xsZXJfbW9kdWxlKHNlbGYsIHRhcmdldCwgYmJwYXRoKToKKyAgICAgICAgY29udHJvbGxlcnNsaXN0ID0gc2VsZi5nZXRfY29udHJvbGxlcl9tb2R1bGVuYW1lcyhiYnBhdGgpCisgICAgICAgIGJiLm5vdGUoIkF2YWlsYWJsZSBjb250cm9sbGVyIG1vZHVsZXM6ICVzIiAlIHN0cihjb250cm9sbGVyc2xpc3QpKQorICAgICAgICBjb250cm9sbGVyID0gc2VsZi5sb2FkX2NvbnRyb2xsZXJfZnJvbV9uYW1lKHRhcmdldCwgY29udHJvbGxlcnNsaXN0KQorICAgICAgICByZXR1cm4gY29udHJvbGxlcgorCisgICAgIyBSZXR1cm4gYSBsaXN0IG9mIGFsbCBweXRob24gbW9kdWxlcyBpbiBsaWIvb2VxYS9jb250cm9sbGVycyBmb3IgZWFjaAorICAgICMgbGF5ZXIgaW4gYmJwYXRoCisgICAgZGVmIGdldF9jb250cm9sbGVyX21vZHVsZW5hbWVzKHNlbGYsIGJicGF0aCk6CisKKyAgICAgICAgY29udHJvbGxlcnNsaXN0ID0gW10KKworICAgICAgICBkZWYgYWRkX2NvbnRyb2xsZXJfbGlzdChwYXRoKToKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocGF0aCwgJ19faW5pdF9fLnB5JykpOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCdDb250cm9sbGVycyBkaXJlY3RvcnkgJXMgZXhpc3RzIGJ1dCBpcyBtaXNzaW5nIF9faW5pdF9fLnB5JyAlIHBhdGgpCisgICAgICAgICAgICBmaWxlcyA9IHNvcnRlZChbZiBmb3IgZiBpbiBvcy5saXN0ZGlyKHBhdGgpIGlmIGYuZW5kc3dpdGgoJy5weScpIGFuZCBub3QgZi5zdGFydHN3aXRoKCdfJyldKQorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gJ29lcWEuY29udHJvbGxlcnMuJyArIGZbOi0zXQorICAgICAgICAgICAgICAgIGlmIG1vZHVsZSBub3QgaW4gY29udHJvbGxlcnNsaXN0OgorICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyc2xpc3QuYXBwZW5kKG1vZHVsZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJEdXBsaWNhdGUgY29udHJvbGxlciBtb2R1bGUgZm91bmQgZm9yICVzLCBvbmx5IG9uZSBhZGRlZC4gTGF5ZXJzIHNob3VsZCBjcmVhdGUgdW5pcXVlIGNvbnRyb2xsZXIgbW9kdWxlIG5hbWVzIiAlIG1vZHVsZSkKKworICAgICAgICBmb3IgcCBpbiBiYnBhdGg6CisgICAgICAgICAgICBjb250cm9sbGVycGF0aCA9IG9zLnBhdGguam9pbihwLCAnbGliJywgJ29lcWEnLCAnY29udHJvbGxlcnMnKQorICAgICAgICAgICAgYmIuZGVidWcoMiwgJ1NlYXJjaGluZyBmb3IgdGFyZ2V0IGNvbnRyb2xsZXJzIGluICVzJyAlIGNvbnRyb2xsZXJwYXRoKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29udHJvbGxlcnBhdGgpOgorICAgICAgICAgICAgICAgIGFkZF9jb250cm9sbGVyX2xpc3QoY29udHJvbGxlcnBhdGgpCisgICAgICAgIHJldHVybiBjb250cm9sbGVyc2xpc3QKKworICAgICMgU2VhcmNoIGZvciBhbmQgcmV0dXJuIGEgY29udHJvbGxlciBmcm9tIGdpdmVuIHRhcmdldCBuYW1lIGFuZAorICAgICMgc2V0IG9mIG1vZHVsZSBuYW1lcy4gCisgICAgIyBSYWlzZSBBdHRyaWJ1dGVFcnJvciBpZiBub3QgZm91bmQuCisgICAgIyBSYWlzZSBJbXBvcnRFcnJvciBpZiBhIHByb3ZpZGVkIG1vZHVsZSBjYW4gbm90IGJlIGltcG9ydGVkCisgICAgZGVmIGxvYWRfY29udHJvbGxlcl9mcm9tX25hbWUoc2VsZiwgdGFyZ2V0LCBtb2R1bGVuYW1lcyk6CisgICAgICAgIGZvciBuYW1lIGluIG1vZHVsZW5hbWVzOgorICAgICAgICAgICAgb2JqID0gc2VsZi5sb2FkX2NvbnRyb2xsZXJfZnJvbV9tb2R1bGUodGFyZ2V0LCBuYW1lKQorICAgICAgICAgICAgaWYgb2JqOgorICAgICAgICAgICAgICAgIHJldHVybiBvYmoKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIlVuYWJsZSB0byBsb2FkIHswfSBmcm9tIGF2YWlsYWJsZSBtb2R1bGVzOiB7MX0iLmZvcm1hdCh0YXJnZXQsIHN0cihtb2R1bGVuYW1lcykpKQorCisgICAgIyBTZWFyY2ggZm9yIGFuZCByZXR1cm4gYSBjb250cm9sbGVyIG9yIE5vbmUgZnJvbSBnaXZlbiBtb2R1bGUgbmFtZQorICAgIGRlZiBsb2FkX2NvbnRyb2xsZXJfZnJvbV9tb2R1bGUoc2VsZiwgdGFyZ2V0LCBtb2R1bGVuYW1lKToKKyAgICAgICAgb2JqID0gTm9uZQorICAgICAgICAjIGltcG9ydCBtb2R1bGUsIGFsbG93aW5nIGl0IHRvIHJhaXNlIGltcG9ydCBleGNlcHRpb24KKyAgICAgICAgbW9kdWxlID0gX19pbXBvcnRfXyhtb2R1bGVuYW1lLCBnbG9iYWxzKCksIGxvY2FscygpLCBbdGFyZ2V0XSkKKyAgICAgICAgIyBsb29rIGZvciB0YXJnZXQgY2xhc3MgaW4gdGhlIG1vZHVsZSwgY2F0Y2hpbmcgYW55IGV4Y2VwdGlvbnMgYXMgaXQKKyAgICAgICAgIyBpcyB2YWxpZCB0aGF0IGEgbW9kdWxlIG1heSBub3QgaGF2ZSB0aGUgdGFyZ2V0IGNsYXNzLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvYmogPSBnZXRhdHRyKG1vZHVsZSwgdGFyZ2V0KQorICAgICAgICAgICAgaWYgb2JqOiAKKyAgICAgICAgICAgICAgICBmcm9tIG9lcWEudGFyZ2V0Y29udHJvbCBpbXBvcnQgQmFzZVRhcmdldAorICAgICAgICAgICAgICAgIGlmIChub3QgaXNpbnN0YW5jZShvYmosICh0eXBlLCB0eXBlcy5DbGFzc1R5cGUpKSk6CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlRhcmdldCB7MH0gZm91bmQsIGJ1dCBub3Qgb2YgdHlwZSBDbGFzcyIuZm9ybWF0KHRhcmdldCkpCisgICAgICAgICAgICAgICAgaWYoIG5vdCBpc3N1YmNsYXNzKG9iaiwgQmFzZVRhcmdldCkpOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJUYXJnZXQgezB9IGZvdW5kLCBidXQgc3ViY2xhc3MgaXMgbm90IEJhc2VUYXJnZXQiLmZvcm1hdCh0YXJnZXQpKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBvYmogPSBOb25lCisgICAgICAgIHJldHVybiBvYmoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9vZXRlc3QucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvb2V0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZTY4ZDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvb2V0ZXN0LnB5CkBAIC0wLDAgKzEsMjE0IEBACisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBNYWluIHVuaXR0ZXN0IG1vZHVsZSB1c2VkIGJ5IHRlc3RpbWFnZS5iYmNsYXNzCisjIFRoaXMgcHJvdmlkZXMgdGhlIG9lUnVudGltZVRlc3QgYmFzZSBjbGFzcyB3aGljaCBpcyBpbmhlcml0ZWQgYnkgYWxsIHRlc3RzIGluIG1ldGEvbGliL29lcWEvcnVudGltZS4KKworIyBJdCBhbHNvIGhhcyBzb21lIGhlbHBlciBmdW5jdGlvbnMgYW5kIGl0J3MgcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHN0YXJ0aW5nIHRoZSB0ZXN0cworCitpbXBvcnQgb3MsIHJlLCBtbWFwCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IGJiCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgTG9nUmVzdWx0cywgZ2V0dGFnCitmcm9tIHN5cyBpbXBvcnQgZXhjX2luZm8sIGV4Y19jbGVhcgorCitkZWYgZ2V0VmFyKG9iaik6CisgICAgI2V4dGVuZCBmb3JtIGRpY3QsIGlmIGEgdmFyaWFibGUgZGlkbid0IGV4aXN0cywgbmVlZCBmaW5kIGl0IGluIHRlc3RjYXNlCisgICAgY2xhc3MgVmFyRGljdChkaWN0KToKKyAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICByZXR1cm4gZ2V0dGFnKG9iaiwga2V5KQorICAgIHJldHVybiBWYXJEaWN0KCkKKworZGVmIGNoZWNrVGFncyh0YywgdGFnZXhwKToKKyAgICByZXR1cm4gZXZhbCh0YWdleHAsIE5vbmUsIGdldFZhcih0YykpCisKKworZGVmIGZpbHRlckJ5VGFnRXhwKHRlc3RzdWl0ZSwgdGFnZXhwKToKKyAgICBpZiBub3QgdGFnZXhwOgorICAgICAgICByZXR1cm4gdGVzdHN1aXRlCisgICAgY2FzZUxpc3QgPSBbXQorICAgIGZvciBlYWNoIGluIHRlc3RzdWl0ZToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZWFjaCwgdW5pdHRlc3QuQmFzZVRlc3RTdWl0ZSk6CisgICAgICAgICAgICBpZiBjaGVja1RhZ3MoZWFjaCwgdGFnZXhwKToKKyAgICAgICAgICAgICAgICBjYXNlTGlzdC5hcHBlbmQoZWFjaCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNhc2VMaXN0LmFwcGVuZChmaWx0ZXJCeVRhZ0V4cChlYWNoLCB0YWdleHApKQorICAgIHJldHVybiB0ZXN0c3VpdGUuX19jbGFzc19fKGNhc2VMaXN0KQorCitkZWYgbG9hZFRlc3RzKHRjLCB0eXBlPSJydW50aW1lIik6CisgICAgaWYgdHlwZSA9PSAicnVudGltZSI6CisgICAgICAgICMgc2V0IHRoZSBjb250ZXh0IG9iamVjdCBwYXNzZWQgZnJvbSB0aGUgdGVzdCBjbGFzcworICAgICAgICBzZXRhdHRyKG9lVGVzdCwgInRjIiwgdGMpCisgICAgICAgICMgc2V0IHBzIGNvbW1hbmQgdG8gdXNlCisgICAgICAgIHNldGF0dHIob2VSdW50aW1lVGVzdCwgInBzY21kIiwgInBzIC1lZiIgaWYgb2VUZXN0Lmhhc1BhY2thZ2UoInByb2NwcyIpIGVsc2UgInBzIikKKyAgICAgICAgIyBwcmVwYXJlIHRlc3Qgc3VpdGUsIGxvYWRlciBhbmQgcnVubmVyCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICBlbGlmIHR5cGUgPT0gInNkayI6CisgICAgICAgICMgc2V0IHRoZSBjb250ZXh0IG9iamVjdCBwYXNzZWQgZnJvbSB0aGUgdGVzdCBjbGFzcworICAgICAgICBzZXRhdHRyKG9lVGVzdCwgInRjIiwgdGMpCisgICAgdGVzdGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgIHRlc3Rsb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcgPSBOb25lCisgICAgc3VpdGVzID0gW3Rlc3Rsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUobmFtZSkgZm9yIG5hbWUgaW4gdGMudGVzdHNsaXN0XQorICAgIHN1aXRlcyA9IGZpbHRlckJ5VGFnRXhwKHN1aXRlcywgZ2V0YXR0cih0YywgInRhZ2V4cCIsIE5vbmUpKQorCisgICAgZGVmIGdldFRlc3RzKHRlc3QpOgorICAgICAgICAnJydSZXR1cm4gYWxsIGluZGl2aWR1YWwgdGVzdHMgZXhlY3V0ZWQgd2hlbiBydW5uaW5nIHRoZSBzdWl0ZS4nJycKKyAgICAgICAgIyBVbmZvcnR1bmF0ZWx5IHVuaXR0ZXN0IGRvZXMgbm90IGhhdmUgYW4gQVBJIGZvciB0aGlzLCBzbyB3ZSBoYXZlCisgICAgICAgICMgdG8gcmVseSBvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBUaGlzIG9ubHkgbmVlZHMgdG8gd29yaworICAgICAgICAjIGZvciBUZXN0U3VpdGUgY29udGFpbmluZyBUZXN0Q2FzZS4KKyAgICAgICAgbWV0aG9kID0gZ2V0YXR0cih0ZXN0LCAnX3Rlc3RNZXRob2ROYW1lJywgTm9uZSkKKyAgICAgICAgaWYgbWV0aG9kOgorICAgICAgICAgICAgIyBsZWFmIGNhc2U6IGEgVGVzdENhc2UKKyAgICAgICAgICAgIHlpZWxkIHRlc3QKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgTG9vayBpbnRvIFRlc3RTdWl0ZS4KKyAgICAgICAgICAgIHRlc3RzID0gZ2V0YXR0cih0ZXN0LCAnX3Rlc3RzJywgW10pCisgICAgICAgICAgICBmb3IgdDEgaW4gdGVzdHM6CisgICAgICAgICAgICAgICAgZm9yIHQyIGluIGdldFRlc3RzKHQxKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgdDIKKworICAgICMgRGV0ZXJtaW5lIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHN1aXRlcyBieSBsb29raW5nIGZvciBAc2tpcFVubGVzc1Bhc3NlZAorICAgICMgbWV0aG9kIGFubm90YXRpb25zLiBTdWl0ZSBBIGRlcGVuZHMgb24gc3VpdGUgQiBpZiBhbnkgbWV0aG9kIGluIEEKKyAgICAjIGRlcGVuZHMgb24gYSBtZXRob2Qgb24gQi4KKyAgICBmb3Igc3VpdGUgaW4gc3VpdGVzOgorICAgICAgICBzdWl0ZS5kZXBlbmRlbmNpZXMgPSBbXQorICAgICAgICBzdWl0ZS5kZXB0aCA9IDAKKyAgICAgICAgZm9yIHRlc3QgaW4gZ2V0VGVzdHMoc3VpdGUpOgorICAgICAgICAgICAgbWV0aG9kbmFtZSA9IGdldGF0dHIodGVzdCwgJ190ZXN0TWV0aG9kTmFtZScsIE5vbmUpCisgICAgICAgICAgICBpZiBtZXRob2RuYW1lOgorICAgICAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIodGVzdCwgbWV0aG9kbmFtZSkKKyAgICAgICAgICAgICAgICBkZXBlbmRzX29uID0gZ2V0YXR0cihtZXRob2QsICdfZGVwZW5kc19vbicsIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgZGVwZW5kc19vbjoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGRlcF9zdWl0ZSBpbiBzdWl0ZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkZXBlbmRzX29uIGluIFtnZXRhdHRyKHQsICdfdGVzdE1ldGhvZE5hbWUnLCBOb25lKSBmb3IgdCBpbiBnZXRUZXN0cyhkZXBfc3VpdGUpXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBkZXBfc3VpdGUgbm90IGluIHN1aXRlLmRlcGVuZGVuY2llcyBhbmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcF9zdWl0ZSBpcyBub3Qgc3VpdGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlLmRlcGVuZGVuY2llcy5hcHBlbmQoZGVwX3N1aXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJUZXN0ICVzIHdhcyBkZWNsYXJlZCBhcyBAc2tpcFVubGVzc1Bhc3NlZCgnJXMnKSBidXQgdGhhdCB0ZXN0IGlzIGVpdGhlciBub3QgZGVmaW5lZCBvciBub3QgYWN0aXZlLiBXaWxsIHJ1biB0aGUgdGVzdCBhbnl3YXkuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0ZXN0LCBkZXBlbmRzX29uKSkKKyAgICAjIFVzZSBicnV0ZS1mb3JjZSB0b3BvbG9naWNhbCBzb3J0IHRvIGRldGVybWluZSBvcmRlcmluZy4gU29ydCBieQorICAgICMgZGVwdGggKGhpZ2hlciBkZXB0aCA9IG11c3QgcnVuIGxhdGVyKSwgd2l0aCBvcmlnaW5hbCBvcmRlcmluZyB0bworICAgICMgYnJlYWsgdGllcy4KKyAgICBkZWYgc2V0X3N1aXRlX2RlcHRoKHN1aXRlKToKKyAgICAgICAgZm9yIGRlcCBpbiBzdWl0ZS5kZXBlbmRlbmNpZXM6CisgICAgICAgICAgICBuZXdfZGVwdGggPSBzZXRfc3VpdGVfZGVwdGgoZGVwKSArIDEKKyAgICAgICAgICAgIGlmIG5ld19kZXB0aCA+IHN1aXRlLmRlcHRoOgorICAgICAgICAgICAgICAgIHN1aXRlLmRlcHRoID0gbmV3X2RlcHRoCisgICAgICAgIHJldHVybiBzdWl0ZS5kZXB0aAorICAgIGZvciBpbmRleCwgc3VpdGUgaW4gZW51bWVyYXRlKHN1aXRlcyk6CisgICAgICAgIHNldF9zdWl0ZV9kZXB0aChzdWl0ZSkKKyAgICAgICAgc3VpdGUuaW5kZXggPSBpbmRleAorICAgIHN1aXRlcy5zb3J0KGNtcD1sYW1iZGEgYSxiOiBjbXAoKGEuZGVwdGgsIGEuaW5kZXgpLCAoYi5kZXB0aCwgYi5pbmRleCkpKQorICAgIHJldHVybiB0ZXN0bG9hZGVyLnN1aXRlQ2xhc3Moc3VpdGVzKQorCitkZWYgcnVuVGVzdHModGMsIHR5cGU9InJ1bnRpbWUiKToKKworICAgIHN1aXRlID0gbG9hZFRlc3RzKHRjLCB0eXBlKQorICAgIGJiLm5vdGUoIlRlc3QgbW9kdWxlcyAgJXMiICUgdGMudGVzdHNsaXN0KQorICAgIGlmIGhhc2F0dHIodGMsICJ0YWdleHAiKSBhbmQgdGMudGFnZXhwOgorICAgICAgICBiYi5ub3RlKCJGaWx0ZXIgdGVzdCBjYXNlcyBieSB0YWdzOiAlcyIgJSB0Yy50YWdleHApCisgICAgYmIubm90ZSgiRm91bmQgJXMgdGVzdHMiICUgc3VpdGUuY291bnRUZXN0Q2FzZXMoKSkKKyAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcih2ZXJib3NpdHk9MikKKyAgICByZXN1bHQgPSBydW5uZXIucnVuKHN1aXRlKQorCisgICAgcmV0dXJuIHJlc3VsdAorCitATG9nUmVzdWx0cworY2xhc3Mgb2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGxvbmdNZXNzYWdlID0gVHJ1ZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGhhc1BhY2thZ2Uoc2VsZiwgcGtnKToKKyAgICAgICAgZm9yIGl0ZW0gaW4gb2VUZXN0LnRjLnBrZ21hbmlmZXN0LnNwbGl0KCdcbicpOgorICAgICAgICAgICAgaWYgcmUubWF0Y2gocGtnLCBpdGVtKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBoYXNGZWF0dXJlKHNlbGYsZmVhdHVyZSk6CisKKyAgICAgICAgaWYgZmVhdHVyZSBpbiBvZVRlc3QudGMuaW1hZ2VmZWF0dXJlcyBvciBcCisgICAgICAgICAgICAgICAgZmVhdHVyZSBpbiBvZVRlc3QudGMuZGlzdHJvZmVhdHVyZXM6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKK2NsYXNzIG9lUnVudGltZVRlc3Qob2VUZXN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgorICAgICAgICBzZWxmLnRhcmdldCA9IG9lUnVudGltZVRlc3QudGMudGFyZ2V0CisgICAgICAgIHN1cGVyKG9lUnVudGltZVRlc3QsIHNlbGYpLl9faW5pdF9fKG1ldGhvZE5hbWUpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgQ2hlY2sgaWYgdGVzdCBuZWVkcyB0byBydW4KKyAgICAgICAgaWYgc2VsZi50Yy5zaWd0ZXJtOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJHb3QgU0lHVEVSTSIpCisgICAgICAgIGVsaWYgKHR5cGUoc2VsZi50YXJnZXQpLl9fbmFtZV9fID09ICJRZW11VGFyZ2V0Iik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi50YXJnZXQuY2hlY2soKSwgbXNnID0gIlFlbXUgbm90IHJ1bm5pbmc/IikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyBJZiBhIHRlc3QgZmFpbHMgb3IgdGhlcmUgaXMgYW4gZXhjZXB0aW9uCisgICAgICAgIGlmIG5vdCBleGNfaW5mbygpID09IChOb25lLCBOb25lLCBOb25lKToKKyAgICAgICAgICAgIGV4Y19jbGVhcigpCisgICAgICAgICAgICAjT25seSBkdW1wIGZvciBRZW11VGFyZ2V0CisgICAgICAgICAgICBpZiAodHlwZShzZWxmLnRhcmdldCkuX19uYW1lX18gPT0gIlFlbXVUYXJnZXQiKToKKyAgICAgICAgICAgICAgICBzZWxmLnRjLmhvc3RfZHVtcGVyLmNyZWF0ZV9kaXIoc2VsZi5fdGVzdE1ldGhvZE5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi50Yy5ob3N0X2R1bXBlci5kdW1wX2hvc3QoKQorICAgICAgICAgICAgICAgIHNlbGYudGFyZ2V0LnRhcmdldF9kdW1wZXIuZHVtcF90YXJnZXQoCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRjLmhvc3RfZHVtcGVyLmR1bXBfZGlyKQorICAgICAgICAgICAgICAgIHByaW50ICgiJXMgZHVtcCBkYXRhIHN0b3JlZCBpbiAlcyIgJSAoc2VsZi5fdGVzdE1ldGhvZE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50Yy5ob3N0X2R1bXBlci5kdW1wX2RpcikpCisKKyAgICAjVE9ETzogdXNlIHBhY2thZ2VfbWFuYWdlci5weSB0byBpbnN0YWxsIHBhY2thZ2VzIG9uIGFueSB0eXBlIG9mIGltYWdlCisgICAgZGVmIGluc3RhbGxfcGFja2FnZXMoc2VsZiwgcGFja2FnZWxpc3QpOgorICAgICAgICBmb3IgcGFja2FnZSBpbiBwYWNrYWdlbGlzdDoKKyAgICAgICAgICAgIChzdGF0dXMsIHJlc3VsdCkgPSBzZWxmLnRhcmdldC5ydW4oInNtYXJ0IGluc3RhbGwgLXkgIitwYWNrYWdlKQorICAgICAgICAgICAgaWYgc3RhdHVzICE9IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1cworCitjbGFzcyBvZVNES1Rlc3Qob2VUZXN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgorICAgICAgICBzZWxmLnNka3Rlc3RkaXIgPSBvZVNES1Rlc3QudGMuc2RrdGVzdGRpcgorICAgICAgICBzdXBlcihvZVNES1Rlc3QsIHNlbGYpLl9faW5pdF9fKG1ldGhvZE5hbWUpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgaGFzSG9zdFBhY2thZ2Uoc2VsZiwgcGtnKToKKworICAgICAgICBpZiByZS5zZWFyY2gocGtnLCBvZVRlc3QudGMuaG9zdHBrZ21hbmlmZXN0KToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9ydW4oc2VsZiwgY21kKToKKyAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc2hlbGw9VHJ1ZSkKKworZGVmIGdldG1vZHVsZShwb3M9Mik6CisgICAgIyBzdGFjayByZXR1cm5zIGEgbGlzdCBvZiB0dXBsZXMgY29udGFpbmcgZnJhbWUgaW5mb3JtYXRpb24KKyAgICAjIEZpcnN0IGVsZW1lbnQgb2YgdGhlIGxpc3QgdGhlIGlzIGN1cnJlbnQgZnJhbWUsIGNhbGxlciBpcyAxCisgICAgZnJhbWVpbmZvID0gaW5zcGVjdC5zdGFjaygpW3Bvc10KKyAgICBtb2RuYW1lID0gaW5zcGVjdC5nZXRtb2R1bGVuYW1lKGZyYW1laW5mb1sxXSkKKyAgICAjbW9kbmFtZSA9IGluc3BlY3QuZ2V0bW9kdWxlKGZyYW1laW5mb1swXSkuX19uYW1lX18KKyAgICByZXR1cm4gbW9kbmFtZQorCitkZWYgc2tpcE1vZHVsZShyZWFzb24sIHBvcz0yKToKKyAgICBtb2RuYW1lID0gZ2V0bW9kdWxlKHBvcykKKyAgICBpZiBtb2RuYW1lIG5vdCBpbiBvZVRlc3QudGMudGVzdHNyZXF1aXJlZDoKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIiVzOiAlcyIgJSAobW9kbmFtZSwgcmVhc29uKSkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIlxuVGVzdCAlcyB3YW50cyB0byBiZSBza2lwcGVkLlxuUmVhc29uIGlzOiAlcyIgXAorICAgICAgICAgICAgICAgICJcblRlc3Qgd2FzIHJlcXVpcmVkIGluIFRFU1RfU1VJVEVTLCBzbyBlaXRoZXIgdGhlIGNvbmRpdGlvbiBmb3Igc2tpcHBpbmcgaXMgd3JvbmciIFwKKyAgICAgICAgICAgICAgICAiXG5vciB0aGUgaW1hZ2UgcmVhbGx5IGRvZXNuJ3QgaGF2ZSB0aGUgcmVxdWlyZWQgZmVhdHVyZS9wYWNrYWdlIHdoZW4gaXQgc2hvdWxkLiIgJSAobW9kbmFtZSwgcmVhc29uKSkKKworZGVmIHNraXBNb2R1bGVJZihjb25kLCByZWFzb24pOgorCisgICAgaWYgY29uZDoKKyAgICAgICAgc2tpcE1vZHVsZShyZWFzb24sIDMpCisKK2RlZiBza2lwTW9kdWxlVW5sZXNzKGNvbmQsIHJlYXNvbik6CisKKyAgICBpZiBub3QgY29uZDoKKyAgICAgICAgc2tpcE1vZHVsZShyZWFzb24sIDMpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVuZXhwb3J0ZWQucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVuZXhwb3J0ZWQucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTY0NDJiMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW5leHBvcnRlZC5weQpAQCAtMCwwICsxLDE0NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKworIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgVGhpcyBzY3JpcHQgc2hvdWxkIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgYnVpbGQgc3lzdGVtIHRvIHJ1biBpbWFnZSB0ZXN0cy4KKyMgSXQgbmVlZHMgYSBqc29uIGZpbGUgYXMgaW5wdXQgYXMgZXhwb3J0ZWQgYnkgdGhlIGJ1aWxkLgorIyBFLmcgZm9yIGFuIGFscmVhZHkgYnVpbHQgaW1hZ2U6CisjLSBleHBvcnQgdGhlIHRlc3RzOgorIyAgIFRFU1RfRVhQT1JUX09OTFkgPSAiMSIKKyMgICBURVNUX1RBUkdFVCAgPSAic2ltcGxlcmVtb3RlIgorIyAgIFRFU1RfVEFSR0VUX0lQID0gIjE5Mi4xNjguNy4yIgorIyAgIFRFU1RfU0VSVkVSX0lQID0gIjE5Mi4xNjguNy4xIgorIyBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0byAtYyB0ZXN0aW1hZ2UKKyMgU2V0dXAgeW91ciB0YXJnZXQsIGUuZyBmb3IgcWVtdTogcnVucWVtdSBjb3JlLWltYWdlLXNhdG8KKyMgY2QgYnVpbGQvdG1wL3Rlc3RpbWFnZS9jb3JlLWltYWdlLXNhdG8KKyMgLi9ydW5leHBvcnRlZC5weSB0ZXN0ZGF0YS5qc29uCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHRpbWUKK2Zyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlcgorCit0cnk6CisgICAgaW1wb3J0IHNpbXBsZWpzb24gYXMganNvbgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGltcG9ydCBqc29uCisKK3N5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJvZXFhIikpKQorCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBydW5UZXN0cworZnJvbSBvZXFhLnV0aWxzLnNzaGNvbnRyb2wgaW1wb3J0IFNTSENvbnRyb2wKK2Zyb20gb2VxYS51dGlscy5kdW1wIGltcG9ydCBnZXRfaG9zdF9kdW1wZXIKKworIyB0aGlzIGlzbid0IHByZXR0eSBidXQgd2UgbmVlZCBhIGZha2UgdGFyZ2V0IG9iamVjdAorIyBmb3IgcnVubmluZyB0aGUgdGVzdHMgZXh0ZXJuYWxseSBhcyB3ZSBkb24ndCBjYXJlCisjIGFib3V0IGRlcGxveS9zdGFydCB3ZSBvbmx5IGNhcmUgYWJvdXQgdGhlIGNvbm5lY3Rpb24gbWV0aG9kcyAocnVuLCBjb3B5KQorY2xhc3MgRmFrZVRhcmdldChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gTm9uZQorICAgICAgICBzZWxmLmlwID0gTm9uZQorICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IE5vbmUKKyAgICAgICAgc2VsZi5kYXRldGltZSA9IHRpbWUuc3RyZnRpbWUoJyVZJW0lZCVIJU0lUycsdGltZS5nbXRpbWUoKSkKKyAgICAgICAgc2VsZi50ZXN0ZGlyID0gZC5nZXRWYXIoIlRFU1RfTE9HX0RJUiIsIFRydWUpCisgICAgICAgIHNlbGYucG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorCisgICAgZGVmIGV4cG9ydFN0YXJ0KHNlbGYpOgorICAgICAgICBzZWxmLnNzaGxvZyA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkaXIsICJzc2hfdGFyZ2V0X2xvZy4lcyIgJSBzZWxmLmRhdGV0aW1lKQorICAgICAgICBzc2hsb2dsaW5rID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRpciwgInNzaF90YXJnZXRfbG9nIikKKyAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoc3NobG9nbGluayk6CisgICAgICAgICAgICBvcy51bmxpbmsoc3NobG9nbGluaykKKyAgICAgICAgb3Muc3ltbGluayhzZWxmLnNzaGxvZywgc3NobG9nbGluaykKKyAgICAgICAgcHJpbnQoIlNTSCBsb2cgZmlsZTogJXMiICUgIHNlbGYuc3NobG9nKQorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBTU0hDb250cm9sKHNlbGYuaXAsIGxvZ2ZpbGU9c2VsZi5zc2hsb2cpCisKKyAgICBkZWYgcnVuKHNlbGYsIGNtZCwgdGltZW91dD1Ob25lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbi5ydW4oY21kLCB0aW1lb3V0KQorCisgICAgZGVmIGNvcHlfdG8oc2VsZiwgbG9jYWxwYXRoLCByZW1vdGVwYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbi5jb3B5X3RvKGxvY2FscGF0aCwgcmVtb3RlcGF0aCkKKworICAgIGRlZiBjb3B5X2Zyb20oc2VsZiwgcmVtb3RlcGF0aCwgbG9jYWxwYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbi5jb3B5X2Zyb20ocmVtb3RlcGF0aCwgbG9jYWxwYXRoKQorCisKK2NsYXNzIE15RGF0YURpY3QoZGljdCk6CisgICAgZGVmIGdldFZhcihzZWxmLCBrZXksIHVudXNlZCA9IE5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5nZXQoa2V5LCAiIikKKworY2xhc3MgVGVzdENvbnRleHQob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuZCA9IE5vbmUKKyAgICAgICAgc2VsZi50YXJnZXQgPSBOb25lCisKK2RlZiBtYWluKCk6CisKKyAgICB1c2FnZSA9ICJ1c2FnZTogJXByb2cgW29wdGlvbnNdIDxqc29uIGZpbGU+IgorICAgIHBhcnNlciA9IE9wdGlvblBhcnNlcih1c2FnZT11c2FnZSkKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXQiLCAiLS10YXJnZXQtaXAiLCBkZXN0PSJpcCIsIGhlbHA9IlRoZSBJUCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgbWFjaGluZS4gVXNlIHRoaXMgdG8gXAorICAgICAgICAgICAgb3ZlcndyaXRlIHRoZSB2YWx1ZSBkZXRlcm1pbmVkIGZyb20gVEVTVF9UQVJHRVRfSVAgYXQgYnVpbGQgdGltZSIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1zIiwgIi0tc2VydmVyLWlwIiwgZGVzdD0ic2VydmVyX2lwIiwgaGVscD0iVGhlIElQIGFkZHJlc3Mgb2YgdGhpcyBtYWNoaW5lLiBVc2UgdGhpcyB0byBcCisgICAgICAgICAgICBvdmVyd3JpdGUgdGhlIHZhbHVlIGRldGVybWluZWQgZnJvbSBURVNUX1NFUlZFUl9JUCBhdCBidWlsZCB0aW1lLiIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1kIiwgIi0tZGVwbG95LWRpciIsIGRlc3Q9ImRlcGxveV9kaXIiLCBoZWxwPSJGdWxsIHBhdGggdG8gdGhlIHBhY2thZ2UgZmVlZHMsIHRoYXQgdGhpcyBcCisgICAgICAgICAgICB0aGUgY29udGVudHMgb2Ygd2hhdCB1c2VkIHRvIGJlIERFUExPWV9ESVIgb24gdGhlIGJ1aWxkIG1hY2hpbmUuIElmIG5vdCBzcGVjaWZpZWQgaXQgd2lsbCB1c2UgdGhlIHZhbHVlIFwKKyAgICAgICAgICAgIHNwZWNpZmllZCBpbiB0aGUganNvbiBpZiB0aGF0IGRpcmVjdG9yeSBhY3R1YWxseSBleGlzdHMgb3IgaXQgd2lsbCBlcnJvciBvdXQuIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWwiLCAiLS1sb2ctZGlyIiwgZGVzdD0ibG9nX2RpciIsIGhlbHA9IlRoaXMgc2V0cyB0aGUgcGF0aCBmb3IgVEVTVF9MT0dfRElSLiBJZiBub3Qgc3BlY2lmaWVkIFwKKyAgICAgICAgICAgIHRoZSBjdXJyZW50IGRpciBpcyB1c2VkLiBUaGlzIGlzIHVzZWQgZm9yIHVzdWFsbHkgY3JlYXRpbmcgYSBzc2ggbG9nIGZpbGUgYW5kIGEgc2NwIHRlc3QgZmlsZS4iKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIGlmIGxlbihhcmdzKSAhPSAxOgorICAgICAgICBwYXJzZXIuZXJyb3IoIkluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzLiBUaGUgb25lIGFuZCBvbmx5IGFyZ3VtZW50IHNob3VsZCBiZSBhIGpzb24gZmlsZSBleHBvcnRlZCBieSB0aGUgYnVpbGQgc3lzdGVtIikKKworICAgIHdpdGggb3BlbihhcmdzWzBdLCAiciIpIGFzIGY6CisgICAgICAgIGxvYWRlZCA9IGpzb24ubG9hZChmKQorCisgICAgaWYgb3B0aW9ucy5pcDoKKyAgICAgICAgbG9hZGVkWyJ0YXJnZXQiXVsiaXAiXSA9IG9wdGlvbnMuaXAKKyAgICBpZiBvcHRpb25zLnNlcnZlcl9pcDoKKyAgICAgICAgbG9hZGVkWyJ0YXJnZXQiXVsic2VydmVyX2lwIl0gPSBvcHRpb25zLnNlcnZlcl9pcAorCisgICAgZCA9IE15RGF0YURpY3QoKQorICAgIGZvciBrZXkgaW4gbG9hZGVkWyJkIl0ua2V5cygpOgorICAgICAgICBkW2tleV0gPSBsb2FkZWRbImQiXVtrZXldCisKKyAgICBpZiBvcHRpb25zLmxvZ19kaXI6CisgICAgICAgIGRbIlRFU1RfTE9HX0RJUiJdID0gb3B0aW9ucy5sb2dfZGlyCisgICAgZWxzZToKKyAgICAgICAgZFsiVEVTVF9MT0dfRElSIl0gPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKKyAgICBpZiBvcHRpb25zLmRlcGxveV9kaXI6CisgICAgICAgIGRbIkRFUExPWV9ESVIiXSA9IG9wdGlvbnMuZGVwbG95X2RpcgorICAgIGVsc2U6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGRbIkRFUExPWV9ESVIiXSk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRoZSBwYXRoIHRvIERFUExPWV9ESVIgZG9lcyBub3QgZXhpc3RzOiAlcyIgJSBkWyJERVBMT1lfRElSIl0pCisKKworICAgIHRhcmdldCA9IEZha2VUYXJnZXQoZCkKKyAgICBmb3Iga2V5IGluIGxvYWRlZFsidGFyZ2V0Il0ua2V5cygpOgorICAgICAgICBzZXRhdHRyKHRhcmdldCwga2V5LCBsb2FkZWRbInRhcmdldCJdW2tleV0pCisKKyAgICBob3N0X2R1bXBlciA9IGdldF9ob3N0X2R1bXBlcihkKQorICAgIGhvc3RfZHVtcGVyLnBhcmVudF9kaXIgPSBsb2FkZWRbImhvc3RfZHVtcGVyIl1bInBhcmVudF9kaXIiXQorICAgIGhvc3RfZHVtcGVyLmNtZHMgPSBsb2FkZWRbImhvc3RfZHVtcGVyIl1bImNtZHMiXQorCisgICAgdGMgPSBUZXN0Q29udGV4dCgpCisgICAgc2V0YXR0cih0YywgImQiLCBkKQorICAgIHNldGF0dHIodGMsICJ0YXJnZXQiLCB0YXJnZXQpCisgICAgc2V0YXR0cih0YywgImhvc3RfZHVtcGVyIiwgaG9zdF9kdW1wZXIpCisgICAgZm9yIGtleSBpbiBsb2FkZWQua2V5cygpOgorICAgICAgICBpZiBrZXkgIT0gImQiIGFuZCBrZXkgIT0gInRhcmdldCIgYW5kIGtleSAhPSAiaG9zdF9kdW1wZXIiOgorICAgICAgICAgICAgc2V0YXR0cih0Yywga2V5LCBsb2FkZWRba2V5XSkKKworICAgIHRhcmdldC5leHBvcnRTdGFydCgpCisgICAgcnVuVGVzdHModGMpCisKKyAgICByZXR1cm4gMAorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRyeToKKyAgICAgICAgcmV0ID0gbWFpbigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmV0ID0gMQorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoNSkKKyAgICBzeXMuZXhpdChyZXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZjNmYTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9fX2luaXRfXy5weQpAQCAtMCwwICsxLDMgQEAKKyMgRW5hYmxlIG90aGVyIGxheWVycyB0byBoYXZlIHRlc3RzIGluIHRoZSBzYW1lIG5hbWVkIGRpcmVjdG9yeQorZnJvbSBwa2d1dGlsIGltcG9ydCBleHRlbmRfcGF0aAorX19wYXRoX18gPSBleHRlbmRfcGF0aChfX3BhdGhfXywgX19uYW1lX18pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9fcHRlc3QucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9fcHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFjOWM0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL19wdGVzdC5weQpAQCAtMCwwICsxLDEyNSBAQAoraW1wb3J0IHVuaXR0ZXN0LCBvcywgc2h1dGlsCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorZnJvbSBvZXFhLnV0aWxzLmxvZ3BhcnNlciBpbXBvcnQgKgorZnJvbSBvZXFhLnV0aWxzLmh0dHBzZXJ2ZXIgaW1wb3J0IEhUVFBTZXJ2aWNlCitpbXBvcnQgYmIKK2ltcG9ydCBnbG9iCitmcm9tIG9lLnBhY2thZ2VfbWFuYWdlciBpbXBvcnQgUnBtUGtnc0xpc3QKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInBhY2thZ2UtbWFuYWdlbWVudCIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgcGFja2FnZSBtYW5hZ2VtZW50IGZlYXR1cmUiKQorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoInNtYXJ0Iik6CisgICAgICAgIHNraXBNb2R1bGUoIkltYWdlIGRvZXNuJ3QgaGF2ZSBzbWFydCBpbnN0YWxsZWQiKQorICAgIGlmICJwYWNrYWdlX3JwbSIgIT0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiUEFDS0FHRV9DTEFTU0VTIiwgVHJ1ZSkuc3BsaXQoKVswXToKKyAgICAgICAgc2tpcE1vZHVsZSgiUnBtIGlzIG5vdCB0aGUgcHJpbWFyeSBwYWNrYWdlIG1hbmFnZXIiKQorCitjbGFzcyBQdGVzdFJ1bm5lclRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICAjIGEgcHRlc3QgbG9nIHBhcnNlcgorICAgIGRlZiBwYXJzZV9wdGVzdChzZWxmLCBsb2dmaWxlKToKKyAgICAgICAgcGFyc2VyID0gTHBhcnNlcih0ZXN0XzBfcGFzc19yZWdleD0iXlBBU1M6KC4rKSIsIHRlc3RfMF9mYWlsX3JlZ2V4PSJeRkFJTDooLispIiwgc2VjdGlvbl8wX2JlZ2luX3JlZ2V4PSJeQkVHSU46IC4qLyguKykvcHRlc3QiLCBzZWN0aW9uXzBfZW5kX3JlZ2V4PSJeRU5EOiAuKi8oLispL3B0ZXN0IikKKyAgICAgICAgcGFyc2VyLmluaXQoKQorICAgICAgICByZXN1bHQgPSBSZXN1bHQoKQorCisgICAgICAgIHdpdGggb3Blbihsb2dmaWxlKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICByZXN1bHRfdHVwbGUgPSBwYXJzZXIucGFyc2VfbGluZShsaW5lKQorICAgICAgICAgICAgICAgIGlmIG5vdCByZXN1bHRfdHVwbGU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcmVzdWx0X3R1cGxlID0gbGluZV90eXBlLCBjYXRlZ29yeSwgc3RhdHVzLCBuYW1lID0gcGFyc2VyLnBhcnNlX2xpbmUobGluZSkKKworICAgICAgICAgICAgICAgIGlmIGxpbmVfdHlwZSA9PSAnc2VjdGlvbicgYW5kIHN0YXR1cyA9PSAnYmVnaW4nOgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3NlY3Rpb24gPSBuYW1lCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBsaW5lX3R5cGUgPT0gJ3NlY3Rpb24nIGFuZCBzdGF0dXMgPT0gJ2VuZCc6CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfc2VjdGlvbiA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIGxpbmVfdHlwZSA9PSAndGVzdCcgYW5kIHN0YXR1cyA9PSAncGFzcyc6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdG9yZShjdXJyZW50X3NlY3Rpb24sIG5hbWUsIHN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIGxpbmVfdHlwZSA9PSAndGVzdCcgYW5kIHN0YXR1cyA9PSAnZmFpbCc6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdG9yZShjdXJyZW50X3NlY3Rpb24sIG5hbWUsIHN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICByZXN1bHQuc29ydF90ZXN0cygpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICAjbm90ZSB0aGUgZXhpc3RpbmcgY2hhbm5lbHMgdGhhdCBhcmUgb24gdGhlIGJvYXJkIGJlZm9yZSBjcmVhdGluZyBuZXcgb25lcworIyAgICAgICAgc2VsZi5leGlzdGluZ2NoYW5uZWxzID0gc2V0KCkKKyMgICAgICAgIChzdGF0dXMsIHJlc3VsdCkgPSBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5ydW4oJ3NtYXJ0IGNoYW5uZWwgLS1zaG93IHwgZ3JlcCAiXFsiJywgMCkKKyMgICAgICAgIGZvciB4IGluIHJlc3VsdC5zcGxpdCgiXG4iKToKKyMgICAgICAgICAgICBzZWxmLmV4aXN0aW5nY2hhbm5lbHMuYWRkKHgpCisgICAgICAgIHNlbGYucmVwb19zZXJ2ZXIgPSBIVFRQU2VydmljZShvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCdERVBMT1lfRElSJywgVHJ1ZSksIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LnNlcnZlcl9pcCkKKyAgICAgICAgc2VsZi5yZXBvX3NlcnZlci5zdGFydCgpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5yZXBvX3NlcnZlci5zdG9wKCkKKyAgICAgICAgI3JlbW92ZSBjcmVhdGVkIGNoYW5uZWxzIHRvIGJlIGFibGUgdG8gcmVwZWF0IHRoZSB0ZXN0cyBvbiBzYW1lIGltYWdlCisjICAgICAgICAoc3RhdHVzLCByZXN1bHQpID0gb2VSdW50aW1lVGVzdC50Yy50YXJnZXQucnVuKCdzbWFydCBjaGFubmVsIC0tc2hvdyB8IGdyZXAgIlxbIicsIDApCisjICAgICAgICBmb3IgeCBpbiByZXN1bHQuc3BsaXQoIlxuIik6CisjICAgICAgICAgICAgaWYgeCBub3QgaW4gc2VsZi5leGlzdGluZ2NoYW5uZWxzOgorIyAgICAgICAgICAgICAgICBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5ydW4oJ3NtYXJ0IGNoYW5uZWwgLS1yZW1vdmUgJyt4WzE6LTFdKycgLXknLCAwKQorCisgICAgZGVmIGFkZF9zbWFydF9jaGFubmVsKHNlbGYpOgorICAgICAgICBpbWFnZV9wa2d0eXBlID0gc2VsZi50Yy5kLmdldFZhcignSU1BR0VfUEtHVFlQRScsIFRydWUpCisgICAgICAgIGRlcGxveV91cmwgPSAnaHR0cDovLyVzOiVzLyVzJyAlKHNlbGYudGFyZ2V0LnNlcnZlcl9pcCwgc2VsZi5yZXBvX3NlcnZlci5wb3J0LCBpbWFnZV9wa2d0eXBlKQorICAgICAgICBwa2dhcmNocyA9IHNlbGYudGMuZC5nZXRWYXIoJ1BBQ0tBR0VfQVJDSFMnLCBUcnVlKS5yZXBsYWNlKCItIiwiXyIpLnNwbGl0KCkKKyAgICAgICAgZm9yIGFyY2ggaW4gb3MubGlzdGRpcignJXMvJXMnICUgKHNlbGYucmVwb19zZXJ2ZXIucm9vdF9kaXIsIGltYWdlX3BrZ3R5cGUpKToKKyAgICAgICAgICAgIGlmIGFyY2ggaW4gcGtnYXJjaHM6CisgICAgICAgICAgICAgICAgc2VsZi50YXJnZXQucnVuKCdzbWFydCBjaGFubmVsIC15IC0tYWRkIHthfSB0eXBlPXJwbS1tZCBiYXNldXJsPXt1fS97YX0nLmZvcm1hdChhPWFyY2gsIHU9ZGVwbG95X3VybCksIDApCisgICAgICAgIHNlbGYudGFyZ2V0LnJ1bignc21hcnQgdXBkYXRlJywgMCkKKworICAgIGRlZiBpbnN0YWxsX2NvbXBsZW1lbnRhcnkoc2VsZiwgZ2xvYnM9Tm9uZSk6CisgICAgICAgIGluc3RhbGxlZF9wa2dzX2ZpbGUgPSBvcy5wYXRoLmpvaW4ob2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcignV09SS0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnN0YWxsZWRfcGtncy50eHQiKQorICAgICAgICBzZWxmLnBrZ3NfbGlzdCA9IFJwbVBrZ3NMaXN0KG9lUnVudGltZVRlc3QudGMuZCwgb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcignSU1BR0VfUk9PVEZTJywgVHJ1ZSksIG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoJ2FyY2hfdmFyJywgVHJ1ZSksIG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoJ29zX3ZhcicsIFRydWUpKQorICAgICAgICB3aXRoIG9wZW4oaW5zdGFsbGVkX3BrZ3NfZmlsZSwgIncrIikgYXMgaW5zdGFsbGVkX3BrZ3M6CisgICAgICAgICAgICBpbnN0YWxsZWRfcGtncy53cml0ZShzZWxmLnBrZ3NfbGlzdC5saXN0KCJhcmNoIikpCisKKyAgICAgICAgY21kID0gW2JiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAib2UtcGtnZGF0YS11dGlsIiksCisgICAgICAgICAgICAgICAiLXAiLCBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCdQS0dEQVRBX0RJUicsIFRydWUpLCAiZ2xvYiIsIGluc3RhbGxlZF9wa2dzX2ZpbGUsCisgICAgICAgICAgICAgICBnbG9ic10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIubm90ZSgiSW5zdGFsbGluZyBjb21wbGVtZW50YXJ5IHBhY2thZ2VzIC4uLiIpCisgICAgICAgICAgICBjb21wbGVtZW50YXJ5X3BrZ3MgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiQ291bGQgbm90IGNvbXB1dGUgY29tcGxlbWVudGFyeSBwYWNrYWdlcyBsaXN0LiBDb21tYW5kICIKKyAgICAgICAgICAgICAgICAgICAgICInJXMnIHJldHVybmVkICVkOlxuJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICgnICcuam9pbihjbWQpLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgICAgICByZXR1cm4gY29tcGxlbWVudGFyeV9wa2dzLnNwbGl0KCkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wdGVzdF9sb2cgPSBvcy5wYXRoLmpvaW4ob2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiVEVTVF9MT0dfRElSIixUcnVlKSwgInB0ZXN0LSVzLmxvZyIgJSBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCdEQVRFVElNRScsIFRydWUpKQorCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9wdGVzdHJ1bm5lcihzZWxmKToKKyAgICAgICAgc2VsZi5hZGRfc21hcnRfY2hhbm5lbCgpCisgICAgICAgIChydW5uZXJzdGF0dXMsIHJlc3VsdCkgPSBzZWxmLnRhcmdldC5ydW4oJ3doaWNoIHB0ZXN0LXJ1bm5lcicsIDApCisgICAgICAgIGNvbmQgPSBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoInB0ZXN0LXJ1bm5lciIpIGFuZCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInB0ZXN0IikgYW5kIG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgiLXB0ZXN0IikgYW5kIChydW5uZXJzdGF0dXMgIT0gMCkKKyAgICAgICAgaWYgY29uZDoKKyAgICAgICAgICAgIHNlbGYuaW5zdGFsbF9wYWNrYWdlcyhzZWxmLmluc3RhbGxfY29tcGxlbWVudGFyeSgiKi1wdGVzdCIpKQorICAgICAgICAgICAgc2VsZi5pbnN0YWxsX3BhY2thZ2VzKFsncHRlc3QtcnVubmVyJ10pCisKKyAgICAgICAgKHJ1bm5lcnN0YXR1cywgcmVzdWx0KSA9IHNlbGYudGFyZ2V0LnJ1bignL3Vzci9iaW4vcHRlc3QtcnVubmVyID4gL3RtcC9wdGVzdC5sb2cgMj4mMScsIDApCisgICAgICAgICNleGl0IGNvZGUgaXMgIT0wIGV2ZW4gaWYgcHRlc3QtcnVubmVyIGV4ZWN1dGVzIGJlY2F1c2Ugc29tZSBwdGVzdCB0ZXN0cyBmYWlsLgorICAgICAgICBzZWxmLmFzc2VydFRydWUocnVubmVyc3RhdHVzICE9IDEyNywgbXNnPSJDYW5ub3QgZXhlY3V0ZSBwdGVzdC1ydW5uZXIhIikKKyAgICAgICAgc2VsZi50YXJnZXQuY29weV9mcm9tKCcvdG1wL3B0ZXN0LmxvZycsIHNlbGYucHRlc3RfbG9nKQorICAgICAgICBzaHV0aWwuY29weWZpbGUoc2VsZi5wdGVzdF9sb2csICJwdGVzdC5sb2ciKQorCisgICAgICAgIHJlc3VsdCA9IHNlbGYucGFyc2VfcHRlc3QoInB0ZXN0LmxvZyIpCisgICAgICAgIGxvZ19yZXN1bHRzX3RvX2xvY2F0aW9uID0gIi4vcmVzdWx0cyIKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobG9nX3Jlc3VsdHNfdG9fbG9jYXRpb24pOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShsb2dfcmVzdWx0c190b19sb2NhdGlvbikKKyAgICAgICAgb3MubWFrZWRpcnMobG9nX3Jlc3VsdHNfdG9fbG9jYXRpb24pCisKKyAgICAgICAgcmVzdWx0LmxvZ19hc19maWxlcyhsb2dfcmVzdWx0c190b19sb2NhdGlvbiwgdGVzdF9zdGF0dXMgPSBbJ3Bhc3MnLCdmYWlsJ10pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9fcWVtdXRpbnkucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9fcWVtdXRpbnkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNjMjlmMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL19xZW11dGlueS5weQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdAorZnJvbSBvZXFhLnV0aWxzLnFlbXV0aW55cnVubmVyIGltcG9ydCAqCisKK2NsYXNzIFFlbXVUaW55VGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIGRlZiB0ZXN0X2Jvb3RfdGlueShzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bl9zZXJpYWwoJ3VuYW1lIC1hJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJ5b2N0by10aW55IiBpbiBvdXRwdXQsIG1zZz0iQ2Fubm90IGRldGVjdCBwb2t5IHRpbnkgYm9vdCEiKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2J1aWxkY3ZzLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvYnVpbGRjdnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU2Y2JmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2J1aWxkY3ZzLnB5CkBAIC0wLDAgKzEsMzEgQEAKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCitmcm9tIG9lcWEudXRpbHMudGFyZ2V0YnVpbGQgaW1wb3J0IFRhcmdldEJ1aWxkUHJvamVjdAorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNGZWF0dXJlKCJ0b29scy1zZGsiKToKKyAgICAgICAgc2tpcE1vZHVsZSgiSW1hZ2UgZG9lc24ndCBoYXZlIHRvb2xzLXNkayBpbiBJTUFHRV9GRUFUVVJFUyIpCisKK2NsYXNzIEJ1aWxkQ3ZzVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2plY3QgPSBUYXJnZXRCdWlsZFByb2plY3Qob2VSdW50aW1lVGVzdC50Yy50YXJnZXQsIG9lUnVudGltZVRlc3QudGMuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZnRwLmdudS5vcmcvbm9uLWdudS9jdnMvc291cmNlL2ZlYXR1cmUvMS4xMi4xMy9jdnMtMS4xMi4xMy50YXIuYnoyIikKKyAgICAgICAgc2VsZi5wcm9qZWN0LmRvd25sb2FkX2FyY2hpdmUoKQorCisgICAgQHRlc3RjYXNlKDIwNSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zc2giKQorICAgIGRlZiB0ZXN0X2N2cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX2NvbmZpZ3VyZSgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIGNvbmZpZ3VyZSBmYWlsZWQiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wcm9qZWN0LnJ1bl9tYWtlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgbWFrZSBmYWlsZWQiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wcm9qZWN0LnJ1bl9pbnN0YWxsKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgbWFrZSBpbnN0YWxsIGZhaWxlZCIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9qZWN0LmNsZWFuKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2J1aWxkaXB0YWJsZXMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9idWlsZGlwdGFibGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZTI1MmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9idWlsZGlwdGFibGVzLnB5CkBAIC0wLDAgKzEsMzEgQEAKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCitmcm9tIG9lcWEudXRpbHMudGFyZ2V0YnVpbGQgaW1wb3J0IFRhcmdldEJ1aWxkUHJvamVjdAorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNGZWF0dXJlKCJ0b29scy1zZGsiKToKKyAgICAgICAgc2tpcE1vZHVsZSgiSW1hZ2UgZG9lc24ndCBoYXZlIHRvb2xzLXNkayBpbiBJTUFHRV9GRUFUVVJFUyIpCisKK2NsYXNzIEJ1aWxkSXB0YWJsZXNUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdCA9IFRhcmdldEJ1aWxkUHJvamVjdChvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldCwgb2VSdW50aW1lVGVzdC50Yy5kLAorICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9uZXRmaWx0ZXIub3JnL3Byb2plY3RzL2lwdGFibGVzL2ZpbGVzL2lwdGFibGVzLTEuNC4xMy50YXIuYnoyIikKKyAgICAgICAgc2VsZi5wcm9qZWN0LmRvd25sb2FkX2FyY2hpdmUoKQorCisgICAgQHRlc3RjYXNlKDIwNikKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zc2giKQorICAgIGRlZiB0ZXN0X2lwdGFibGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fY29uZmlndXJlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgY29uZmlndXJlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX21ha2UoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX2luc3RhbGwoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGluc3RhbGwgZmFpbGVkIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2plY3QuY2xlYW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvYnVpbGRzdWRva3UucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9idWlsZHN1ZG9rdS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDJiMDYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvYnVpbGRzdWRva3UucHkKQEAgLTAsMCArMSwyOCBAQAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKK2Zyb20gb2VxYS51dGlscy50YXJnZXRidWlsZCBpbXBvcnQgVGFyZ2V0QnVpbGRQcm9qZWN0CisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInRvb2xzLXNkayIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgdG9vbHMtc2RrIGluIElNQUdFX0ZFQVRVUkVTIikKKworY2xhc3MgU3Vkb2t1VGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2plY3QgPSBUYXJnZXRCdWlsZFByb2plY3Qob2VSdW50aW1lVGVzdC50Yy50YXJnZXQsIG9lUnVudGltZVRlc3QudGMuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3N1ZG9rdS1zYXZhbnQvc3Vkb2t1LXNhdmFudC9zdWRva3Utc2F2YW50LTEuMy9zdWRva3Utc2F2YW50LTEuMy50YXIuYnoyIikKKyAgICAgICAgc2VsZi5wcm9qZWN0LmRvd25sb2FkX2FyY2hpdmUoKQorCisgICAgQHRlc3RjYXNlKDIwNykKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zc2giKQorICAgIGRlZiB0ZXN0X3N1ZG9rdShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX2NvbmZpZ3VyZSgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIGNvbmZpZ3VyZSBmYWlsZWQiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wcm9qZWN0LnJ1bl9tYWtlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgbWFrZSBmYWlsZWQiKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdC5jbGVhbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9jb25ubWFuLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvY29ubm1hbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTY5ZTVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvY29ubm1hbi5weQpAQCAtMCwwICsxLDU0IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoImNvbm5tYW4iKToKKyAgICAgICAgc2tpcE1vZHVsZSgiTm8gY29ubm1hbiBwYWNrYWdlIGluIGltYWdlIikKKworCitjbGFzcyBDb25ubWFuVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIGRlZiBzZXJ2aWNlX3N0YXR1cyhzZWxmLCBzZXJ2aWNlKToKKyAgICAgICAgaWYgb2VSdW50aW1lVGVzdC5oYXNGZWF0dXJlKCJzeXN0ZW1kIik6CisgICAgICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdzeXN0ZW1jdGwgc3RhdHVzIC1sICVzJyAlIHNlcnZpY2UpCisgICAgICAgICAgICByZXR1cm4gb3V0cHV0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIlVuYWJsZSB0byBnZXQgc3RhdHVzIG9yIGxvZ3MgZm9yICVzIiAlIHNlcnZpY2UKKworICAgIEB0ZXN0Y2FzZSg5NjEpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9jb25ubWFuZF9oZWxwKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCcvdXNyL3NiaW4vY29ubm1hbmQgLS1oZWxwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0ic3RhdHVzIGFuZCBvdXRwdXQ6ICVzIGFuZCAlcyIgJSAoc3RhdHVzLG91dHB1dCkpCisKKyAgICBAdGVzdGNhc2UoMjIxKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X2Nvbm5tYW5kX2hlbHAnKQorICAgIGRlZiB0ZXN0X2Nvbm5tYW5kX3J1bm5pbmcoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4ob2VSdW50aW1lVGVzdC5wc2NtZCArICcgfCBncmVwIFtjXW9ubm1hbmQnKQorICAgICAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgICAgIHByaW50IHNlbGYuc2VydmljZV9zdGF0dXMoImNvbm5tYW4iKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBjb25ubWFuZCBwcm9jZXNzIHJ1bm5pbmciKQorCisgICAgQHRlc3RjYXNlKDIyMykKKyAgICBkZWYgdGVzdF9vbmx5X29uZV9jb25ubWFuZF9pbl9iYWNrZ3JvdW5kKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VtbWFyeTogICAgIE9ubHkgb25lIGNvbm5tYW5kIGluIGJhY2tncm91bmQKKyAgICAgICAgRXhwZWN0ZWQ6ICAgIFRoZXJlIHdpbGwgYmUgb25seSBvbmUgY29ubm1hbmQgaW5zdGFuY2UgaW4gYmFja2dyb3VuZC4KKyAgICAgICAgUHJvZHVjdDogICAgIEJTUHMKKyAgICAgICAgQXV0aG9yOiAgICAgIEFsZXhhbmRydSBHZW9yZ2VzY3UgPGFsZXhhbmRydS5jLmdlb3JnZXNjdUBpbnRlbC5jb20+CisgICAgICAgIEF1dG9tYXRlZEJ5OiBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+CisgICAgICAgICIiIgorCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgJ2Nvbm5tYW5kJyBpcyBydW5uaW5nIGluIGJhY2tncm91bmQKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihvZVJ1bnRpbWVUZXN0LnBzY21kICsgJyB8IGdyZXAgW2Ndb25ubWFuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzLCAnRmFpbGVkIHRvIGZpbmQgImNvbm5tYW5kIiBwcm9jZXNzIHJ1bm5pbmcgaW4gYmFja2dyb3VuZC4nKQorCisgICAgICAgICMgU3RhcnQgYSBuZXcgaW5zdGFuY2Ugb2YgJ2Nvbm5tYW5kJworICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdjb25ubWFuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzLCAnRmFpbGVkIHRvIHN0YXJ0IGEgbmV3ICJjb25ubWFuZCIgcHJvY2Vzcy4nKQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgb25seSBvbmUgJ2Nvbm5tYW5kJyBpcyBydW5uaW5nIGluIGJhY2tncm91bmQKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihvZVJ1bnRpbWVUZXN0LnBzY21kICsgJyB8IGdyZXAgW2Ndb25ubWFuZCB8IHdjIC1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMsICdGYWlsZWQgdG8gZmluZCAiY29ubm1hbmQiIHByb2Nlc3MgcnVubmluZyBpbiBiYWNrZ3JvdW5kLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgaW50KG91dHB1dCksICdGb3VuZCB7fSBjb25ubWFuZCBwcm9jZXNzZXMgcnVubmluZywgZXhwZWN0ZWQgMS4nLmZvcm1hdChvdXRwdXQpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZGF0ZS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2RhdGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E4ZmU4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2RhdGUucHkKQEAgLTAsMCArMSwzMSBAQAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdAorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKK2ltcG9ydCByZQorCitjbGFzcyBEYXRlVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgaWYgb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciIsIFRydWUpID09ICJzeXN0ZW1kIjoKKyAgICAgICAgICAgIHNlbGYudGFyZ2V0LnJ1bignc3lzdGVtY3RsIHN0b3Agc3lzdGVtZC10aW1lc3luY2QnKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyIiwgVHJ1ZSkgPT0gInN5c3RlbWQiOgorICAgICAgICAgICAgc2VsZi50YXJnZXQucnVuKCdzeXN0ZW1jdGwgc3RhcnQgc3lzdGVtZC10aW1lc3luY2QnKQorCisgICAgQHRlc3RjYXNlKDIxMSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zc2giKQorICAgIGRlZiB0ZXN0X2RhdGUoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2RhdGUgKyIlWS0lbS0lZCAlVCInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJGYWlsZWQgdG8gZ2V0IGluaXRpYWwgZGF0ZSwgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCisgICAgICAgIG9sZERhdGUgPSBvdXRwdXQKKworICAgICAgICBzYW1wbGVEYXRlID0gJyIyMDE2LTA4LTA5IDEwOjAwOjAwIicKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigiZGF0ZSAtcyAlcyIgJSBzYW1wbGVEYXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJEYXRlIHNldCBmYWlsZWQsIG91dHB1dDogJXMiICUgb3V0cHV0KQorCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oImRhdGUgLVIiKQorICAgICAgICBwID0gcmUubWF0Y2goJ1R1ZSwgMDkgQXVnIDIwMTYgMTA6MDA6Li4gXCswMDAwJywgb3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocCwgbXNnPSJUaGUgZGF0ZSB3YXMgbm90IHNldCBjb3JyZWN0bHksIG91dHB1dDogJXMiICUgb3V0cHV0KQorCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2RhdGUgLXMgIiVzIicgJSBvbGREYXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJGYWlsZWQgdG8gcmVzZXQgZGF0ZSwgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9kZi5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2RmLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NTY5ZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9kZi5weQpAQCAtMCwwICsxLDEyIEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKKworY2xhc3MgRGZUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHRlc3RjYXNlKDIzNCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zc2giKQorICAgIGRlZiB0ZXN0X2RmKHNlbGYpOgorICAgICAgICAoc3RhdHVzLG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oImRmIC8gfCBzZWQgLW4gJzJwJyB8IGF3ayAne3ByaW50ICQ0fSciKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW50KG91dHB1dCk+NTEyMCwgbXNnPSJOb3QgZW5vdWdoIHNwYWNlIG9uIGltYWdlLiBDdXJyZW50IHNpemUgaXMgJXMiICUgb3V0cHV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZG1lc2cucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9kbWVzZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODMxNDcxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZG1lc2cucHkKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0Citmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCisKK2NsYXNzIERtZXNnVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEB0ZXN0Y2FzZSgyMTUpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9kbWVzZyhzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignZG1lc2cgfCBncmVwIC12IG1tY2ktcGwxOHggfCBncmVwIC12ICJlcnJvciBjaGFuZ2luZyBuZXQgaW50ZXJmYWNlIG5hbWUiIHwgZ3JlcCAtaXYgImRtYSB0aW1lb3V0IiB8IGdyZXAgLXYgdXNiaGlkIHwgZ3JlcCAtaSBlcnJvcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAxLCBtc2cgPSAiRXJyb3IgbWVzc2FnZXMgaW4gZG1lc2cgbG9nOiAlcyIgJSBvdXRwdXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy9oZWxsb21vZC5jIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvaGVsbG9tb2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzgzMzk3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvaGVsbG9tb2QuYwpAQCAtMCwwICsxLDE5IEBACisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCitzdGF0aWMgaW50IF9faW5pdCBoZWxsb19pbml0KHZvaWQpCit7CisgICAgICAgIHByaW50ayhLRVJOX0lORk8gIkhlbGxvIHdvcmxkIVxuIik7CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaGVsbG9fY2xlYW51cCh2b2lkKQoreworICAgICAgICBwcmludGsoS0VSTl9JTkZPICJDbGVhbmluZyB1cCBoZWxsb21vZC5cbiIpOworfQorCittb2R1bGVfaW5pdChoZWxsb19pbml0KTsKK21vZHVsZV9leGl0KGhlbGxvX2NsZWFudXApOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy9oZWxsb21vZF9tYWtlZmlsZSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL2hlbGxvbW9kX21ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MmQ1YzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy9oZWxsb21vZF9tYWtlZmlsZQpAQCAtMCwwICsxLDggQEAKK29iai1tIDo9IGhlbGxvbW9kLm8KK0tESVIgOj0gL3Vzci9zcmMva2VybmVsCisKK2FsbDoKKwkkKE1BS0UpIC1DICQoS0RJUikgTT0kKFBXRCkgbW9kdWxlcworCitjbGVhbjoKKwkkKE1BS0UpIC1DICQoS0RJUikgTT0kKFBXRCkgY2xlYW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3QuYyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDgzODljCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdC5jCkBAIC0wLDAgKzEsMjYgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworZG91YmxlIGNvbnZlcnQobG9uZyBsb25nIGwpCit7CisgIHJldHVybiAoZG91YmxlKWw7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICogYXJndltdKSB7CisKKyAgbG9uZyBsb25nIGwgPSAxMDsKKyAgZG91YmxlIGY7CisgIGRvdWJsZSBjaGVjayA9IDEwLjA7CisKKyAgZiA9IGNvbnZlcnQobCk7CisgIHByaW50ZigiY29udmVydDogJWxsZCA9PiAlZlxuIiwgbCwgZik7CisgIGlmICggZiAhPSBjaGVjayApIGV4aXQoMSk7CisKKyAgZiA9IDEyMzQuNjc7CisgIGNoZWNrID0gMTIzNC4wOworICBwcmludGYoImZsb29yZiglZikgPSAlZlxuIiwgZiwgZmxvb3JmKGYpKTsKKyAgaWYgKCBmbG9vcmYoZikgIT0gY2hlY2spIGV4aXQoMSk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LmNwcCBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMWE3NjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LmNwcApAQCAtMCwwICsxLDMgQEAKKyNpbmNsdWRlIDxsaW1pdHM+CisKK2ludCBtYWluKCkge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LnBsIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODljOGYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdC5wbApAQCAtMCwwICsxLDIgQEAKKyRhID0gOS4wMWUrMjEgLSA5LjAxZSsyMSArIDAuMDE7CitwcmludCAoInRoZSB2YWx1ZSBvZiBhIGlzICIsICRhLCAiXG4iKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3QucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYTIyNzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LnB5CkBAIC0wLDAgKzEsNiBAQAoraW1wb3J0IG9zCisKK29zLnN5c3RlbSgndG91Y2ggL3RtcC90ZXN0ZmlsZS5weXRob24nKQorCithID0gOS4wMWUrMjEgLSA5LjAxZSsyMSArIDAuMDEKK3ByaW50ICJ0aGUgdmFsdWUgb2YgYSBpcyAlcyIgJSBhCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0bWFrZWZpbGUgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0bWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ExODQ0ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3RtYWtlZmlsZQpAQCAtMCwwICsxLDUgQEAKK3Rlc3Q6IHRlc3QubworCWdjYyAtbyB0ZXN0IHRlc3QubyAtbG0KK3Rlc3QubzogdGVzdC5jCisJZ2NjIC1jIHRlc3QuYworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9nY2MucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9nY2MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkwY2QxNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2djYy5weQpAQCAtMCwwICsxLDQ3IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgidG9vbHMtc2RrIik6CisgICAgICAgIHNraXBNb2R1bGUoIkltYWdlIGRvZXNuJ3QgaGF2ZSB0b29scy1zZGsgaW4gSU1BR0VfRkVBVFVSRVMiKQorCisKK2NsYXNzIEdjY0NvbXBpbGVUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LmNvcHlfdG8ob3MucGF0aC5qb2luKG9lUnVudGltZVRlc3QudGMuZmlsZXNkaXIsICJ0ZXN0LmMiKSwgIi90bXAvdGVzdC5jIikKKyAgICAgICAgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQuY29weV90byhvcy5wYXRoLmpvaW4ob2VSdW50aW1lVGVzdC50Yy5maWxlc2RpciwgInRlc3RtYWtlZmlsZSIpLCAiL3RtcC90ZXN0bWFrZWZpbGUiKQorICAgICAgICBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5jb3B5X3RvKG9zLnBhdGguam9pbihvZVJ1bnRpbWVUZXN0LnRjLmZpbGVzZGlyLCAidGVzdC5jcHAiKSwgIi90bXAvdGVzdC5jcHAiKQorCisgICAgQHRlc3RjYXNlKDIwMykKKyAgICBkZWYgdGVzdF9nY2NfY29tcGlsZShzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignZ2NjIC90bXAvdGVzdC5jIC1vIC90bXAvdGVzdCAtbG0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJnY2MgY29tcGlsZSBmYWlsZWQsIG91dHB1dDogJXMiICUgb3V0cHV0KQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCcvdG1wL3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJydW5uaW5nIGNvbXBpbGVkIGZpbGUgZmFpbGVkLCBvdXRwdXQgJXMiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDIwMCkKKyAgICBkZWYgdGVzdF9ncHBfY29tcGlsZShzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignZysrIC90bXAvdGVzdC5jIC1vIC90bXAvdGVzdCAtbG0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJnKysgY29tcGlsZSBmYWlsZWQsIG91dHB1dDogJXMiICUgb3V0cHV0KQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCcvdG1wL3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJydW5uaW5nIGNvbXBpbGVkIGZpbGUgZmFpbGVkLCBvdXRwdXQgJXMiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExNDIpCisgICAgZGVmIHRlc3RfZ3BwMl9jb21waWxlKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdnKysgL3RtcC90ZXN0LmNwcCAtbyAvdG1wL3Rlc3QgLWxtJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0iZysrIGNvbXBpbGUgZmFpbGVkLCBvdXRwdXQ6ICVzIiAlIG91dHB1dCkKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignL3RtcC90ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0icnVubmluZyBjb21waWxlZCBmaWxlIGZhaWxlZCwgb3V0cHV0ICVzIiAlIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgyMDQpCisgICAgZGVmIHRlc3RfbWFrZShzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignY2QgL3RtcDsgbWFrZSAtZiB0ZXN0bWFrZWZpbGUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJydW5uaW5nIG1ha2UgZmFpbGVkLCBvdXRwdXQgJXMiICUgb3V0cHV0KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LnJ1bigicm0gL3RtcC90ZXN0LmMgL3RtcC90ZXN0Lm8gL3RtcC90ZXN0IC90bXAvdGVzdG1ha2VmaWxlIikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2tlcm5lbG1vZHVsZS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2tlcm5lbG1vZHVsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTgxNzIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUva2VybmVsbW9kdWxlLnB5CkBAIC0wLDAgKzEsMzQgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNGZWF0dXJlKCJ0b29scy1zZGsiKToKKyAgICAgICAgc2tpcE1vZHVsZSgiSW1hZ2UgZG9lc24ndCBoYXZlIHRvb2xzLXNkayBpbiBJTUFHRV9GRUFUVVJFUyIpCisKKworY2xhc3MgS2VybmVsTW9kdWxlVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi50YXJnZXQuY29weV90byhvcy5wYXRoLmpvaW4ob2VSdW50aW1lVGVzdC50Yy5maWxlc2RpciwgImhlbGxvbW9kLmMiKSwgIi90bXAvaGVsbG9tb2QuYyIpCisgICAgICAgIHNlbGYudGFyZ2V0LmNvcHlfdG8ob3MucGF0aC5qb2luKG9lUnVudGltZVRlc3QudGMuZmlsZXNkaXIsICJoZWxsb21vZF9tYWtlZmlsZSIpLCAiL3RtcC9NYWtlZmlsZSIpCisKKyAgICBAdGVzdGNhc2UoJzMxNicpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9nY2NfY29tcGlsZScpCisgICAgZGVmIHRlc3Rfa2VybmVsX21vZHVsZShzZWxmKToKKyAgICAgICAgY21kcyA9IFsKKyAgICAgICAgICAgICdjZCAvdXNyL3NyYy9rZXJuZWwgJiYgbWFrZSBzY3JpcHRzJywKKyAgICAgICAgICAgICdjZCAvdG1wICYmIG1ha2UnLAorICAgICAgICAgICAgJ2NkIC90bXAgJiYgaW5zbW9kIGhlbGxvbW9kLmtvJywKKyAgICAgICAgICAgICdsc21vZCB8IGdyZXAgaGVsbG9tb2QnLAorICAgICAgICAgICAgJ2RtZXNnIHwgZ3JlcCBIZWxsbycsCisgICAgICAgICAgICAncm1tb2QgaGVsbG9tb2QnLCAnZG1lc2cgfCBncmVwICJDbGVhbmluZyB1cCBoZWxsb21vZCInCisgICAgICAgICAgICBdCisgICAgICAgIGZvciBjbWQgaW4gY21kczoKKyAgICAgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oY21kLCA5MDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJcbiIuam9pbihbY21kLCBvdXRwdXRdKSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi50YXJnZXQucnVuKCdybSAtZiAvdG1wL01ha2VmaWxlIC90bXAvaGVsbG9tb2QuYycpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9sZGQucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9sZGQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdiMzg4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2xkZC5weQpAQCAtMCwwICsxLDIxIEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInRvb2xzLXNkayIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgdG9vbHMtc2RrIGluIElNQUdFX0ZFQVRVUkVTIikKKworY2xhc3MgTGRkVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEB0ZXN0Y2FzZSg5NjIpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9sZGRfZXhpc3RzKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCd3aGljaCBsZGQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gImxkZCBkb2VzIG5vdCBleGlzdCBpbiBQQVRIOiB3aGljaCBsZGQ6ICVzIiAlIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgyMzkpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3RfbGRkX2V4aXN0cycpCisgICAgZGVmIHRlc3RfbGRkX3J0bGRsaXN0X2NoZWNrKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdmb3IgaSBpbiAkKHdoaWNoIGxkZCB8IHhhcmdzIGNhdCB8IGdyZXAgIl5SVExETElTVCJ8Y3V0IC1kXCc9XCcgLWYyfHRyIC1kIFwnIlwnKTsgZG8gdGVzdCAtZiAkaSAmJiBlY2hvICRpICYmIGJyZWFrOyBkb25lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJsZGQgcGF0aCBub3QgY29ycmVjdCBvciBSVExETElTVCBmaWxlcyBkb24ndCBleGlzdC4gIikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2xvZ3JvdGF0ZS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2xvZ3JvdGF0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmQ3OTFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvbG9ncm90YXRlLnB5CkBAIC0wLDAgKzEsMjggQEAKKyMgVGhpcyB0ZXN0IHNob3VsZCBjb3ZlciBodHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvdHJfc2hvd19jYXNlLmNnaT9jYXNlX2lkPTI4OSB0ZXN0Y2FzZQorIyBOb3RlIHRoYXQgdGhlIGltYWdlIHVuZGVyIHRlc3QgbXVzdCBoYXZlIGxvZ3JvdGF0ZSBpbnN0YWxsZWQKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJsb2dyb3RhdGUiKToKKyAgICAgICAgc2tpcE1vZHVsZSgiTm8gbG9ncm90YXRlIHBhY2thZ2UgaW4gaW1hZ2UiKQorCisKK2NsYXNzIExvZ3JvdGF0ZVRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zc2giKQorICAgIGRlZiB0ZXN0XzFfbG9ncm90YXRlX3NldHVwKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdta2RpciAvaG9tZS9yb290L2xvZ3JvdGF0ZV9kaXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gIkNvdWxkIG5vdCBjcmVhdGUgbG9ncm90YXRlX2Rpci4gT3V0cHV0OiAlcyIgJSBvdXRwdXQpCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oInNlZCAtaSAncyN3dG1wIHsjd3RtcCB7XFxuICAgIG9sZGRpciAvaG9tZS9yb290L2xvZ3JvdGF0ZV9kaXIjJyAvZXRjL2xvZ3JvdGF0ZS5jb25mIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJDb3VsZCBub3Qgd3JpdGUgdG8gbG9ncm90YXRlLmNvbmYgZmlsZS4gU3RhdHVzIGFuZCBvdXRwdXQ6ICVzIGFuZCAlcykiICUgKHN0YXR1cywgb3V0cHV0KSkKKworICAgIEB0ZXN0Y2FzZSgyODkpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoInRlc3RfMV9sb2dyb3RhdGVfc2V0dXAiKQorICAgIGRlZiB0ZXN0XzJfbG9ncm90YXRlKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdsb2dyb3RhdGUgLWYgL2V0Yy9sb2dyb3RhdGUuY29uZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2cgPSAibG9ncm90YXRlIHNlcnZpY2UgY291bGQgbm90IGJlIHJlbG9hZGVkLiBTdGF0dXMgYW5kIG91dHB1dDogJXMgYW5kICVzIiAlIChzdGF0dXMsIG91dHB1dCkpCisgICAgICAgIG91dHB1dCA9IHNlbGYudGFyZ2V0LnJ1bignbHMgLWxhIC9ob21lL3Jvb3QvbG9ncm90YXRlX2Rpci8gfCB3YyAtbCcpWzFdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnQob3V0cHV0KT49MywgbXNnID0gIm5ldyBsb2dmaWxlIGNvdWxkIG5vdCBiZSBjcmVhdGVkLiBMaXN0IG9mIGZpbGVzIHdpdGhpbiBsb2cgZGlyZWN0b3J5OiAlcyIgJShzZWxmLnRhcmdldC5ydW4oJ2xzIC1sYSAvaG9tZS9yb290L2xvZ3JvdGF0ZV9kaXInKVsxXSkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9tdWx0aWxpYi5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL211bHRpbGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYmNjNDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9tdWx0aWxpYi5weQpAQCAtMCwwICsxLDQ4IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIG11bHRpbGlicyA9IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIk1VTFRJTElCUyIsIFRydWUpIG9yICIiCisgICAgaWYgIm11bHRpbGliOmxpYjMyIiBub3QgaW4gbXVsdGlsaWJzOgorICAgICAgICBza2lwTW9kdWxlKCJ0aGlzIGlzbid0IGEgbXVsdGlsaWI6bGliMzIgaW1hZ2UiKQorCisKK2NsYXNzIE11bHRpbGliVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIGRlZiBwYXJzZShzZWxmLCBzKToKKyAgICAgICAgIiIiCisgICAgICAgIFBhcnNlIHRoZSBvdXRwdXQgb2YgcmVhZGVsZiAtaCBhbmQgcmV0dXJuIHRoZSBiaW5hcnkgY2xhc3MsIG9yIGZhaWwuCisgICAgICAgICIiIgorICAgICAgICBsID0gW2wuc3BsaXQoKVsxXSBmb3IgbCBpbiBzLnNwbGl0KCdcbicpIGlmICJDbGFzczoiIGluIGxdCisgICAgICAgIGlmIGw6CisgICAgICAgICAgICByZXR1cm4gbFswXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJDYW5ub3QgcGFyc2UgcmVhZGVsZiBvdXRwdXRcbiIgKyBzKQorCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9jaGVja19tdWx0aWxpYl9saWJjKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgdGhhdCBhIG11bHRpbGliIGltYWdlIGhhcyBib3RoIDMyLWJpdCBhbmQgNjQtYml0IGxpYmMgaW4uCisgICAgICAgICIiIgorCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oInJlYWRlbGYgLWggL2xpYi9saWJjLnNvLjYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgIkZhaWxlZCB0byByZWFkZWxmIC9saWIvbGliYy5zby42IikKKyAgICAgICAgY2xhc3MzMiA9IHNlbGYucGFyc2Uob3V0cHV0KQorCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oInJlYWRlbGYgLWggL2xpYjY0L2xpYmMuc28uNiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCAiRmFpbGVkIHRvIHJlYWRlbGYgL2xpYjY0L2xpYmMuc28uNiIpCisgICAgICAgIGNsYXNzNjQgPSBzZWxmLnBhcnNlKG91dHB1dCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNsYXNzMzIsICJFTEYzMiIsIG1zZz0iL2xpYi9saWJjLnNvLjYgaXNuJ3QgRUxGMzIgKGlzICVzKSIgJSBjbGFzczMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNsYXNzNjQsICJFTEY2NCIsIG1zZz0iL2xpYjY0L2xpYmMuc28uNiBpc24ndCBFTEY2NCAoaXMgJXMpIiAlIGNsYXNzNjQpCisKKyAgICBAdGVzdGNhc2UoJzI3OScpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3RfY2hlY2tfbXVsdGlsaWJfbGliYycpCisgICAgZGVmIHRlc3RfZmlsZV9jb25ubWFuKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUob2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCdsaWIzMi1jb25ubWFuLWdub21lJyksIG1zZz0iVGhpcyB0ZXN0IGFzc3VtZXMgbGliMzItY29ubm1hbi1nbm9tZSBpcyBpbnN0YWxsZWQiKQorCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oInJlYWRlbGYgLWggL3Vzci9iaW4vY29ubm1hbi1hcHBsZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgIkZhaWxlZCB0byByZWFkZWxmIC91c3IvYmluL2Nvbm5tYW4tYXBwbGV0IikKKyAgICAgICAgdGhlY2xhc3MgPSBzZWxmLnBhcnNlKG91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aGVjbGFzcywgIkVMRjMyIiwgbXNnPSJjb25ubWFuLWFwcGxldCBpc24ndCBFTEYzMiAoaXMgJXMpIiAlIHRoZWNsYXNzKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcGFtLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcGFtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MjA1YzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9wYW0ucHkKQEAgLTAsMCArMSwyNSBAQAorIyBUaGlzIHRlc3Qgc2hvdWxkIGNvdmVyIGh0dHBzOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy90cl9zaG93X2Nhc2UuY2dpP2Nhc2VfaWQ9Mjg3IHRlc3RjYXNlCisjIE5vdGUgdGhhdCB0aGUgaW1hZ2UgdW5kZXIgdGVzdCBtdXN0IGhhdmUgInBhbSIgaW4gRElTVFJPX0ZFQVRVUkVTCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgicGFtIik6CisgICAgICAgIHNraXBNb2R1bGUoInRhcmdldCBkb2Vzbid0IGhhdmUgJ3BhbScgaW4gRElTVFJPX0ZFQVRVUkVTIikKKworCitjbGFzcyBQYW1CYXNpY1Rlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMjg3KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3RfcGFtKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdsb2dpbiAtLWhlbHAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMSwgbXNnID0gImxvZ2luIGNvbW1hbmQgZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZC4gU3RhdHVzIGFuZCBvdXRwdXQ6JXMgYW5kICVzIiAlKHN0YXR1cywgb3V0cHV0KSkKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigncGFzc3dkIC0taGVscCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2cgPSAicGFzc3dkIGNvbW1hbmQgZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZC4gU3RhdHVzIGFuZCBvdXRwdXQ6JXMgYW5kICVzIiAlKHN0YXR1cywgb3V0cHV0KSkKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignc3UgLS1oZWxwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJzdSBjb21tYW5kIGRvZXMgbm90IHdvcmsgYXMgZXhwZWN0ZWQuIFN0YXR1cyBhbmQgb3V0cHV0OiVzIGFuZCAlcyIgJShzdGF0dXMsIG91dHB1dCkpCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3VzZXJhZGQgLS1oZWxwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJ1c2VyYWRkIGNvbW1hbmQgZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZC4gU3RhdHVzIGFuZCBvdXRwdXQ6JXMgYW5kICVzIiAlKHN0YXR1cywgb3V0cHV0KSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BhcnNlbG9ncy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BhcnNlbG9ncy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjA5NDdiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcGFyc2Vsb2dzLnB5CkBAIC0wLDAgKzEsMjU3IEBACitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN1YnByb2Nlc3MKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKKyNpbiB0aGUgZnV0dXJlIHRoZXNlIGxpc3RzIGNvdWxkIGJlIG1vdmVkIG91dHNpZGUgb2YgbW9kdWxlCitlcnJvcnMgPSBbImVycm9yIiwgImNhbm5vdCIsICJjYW5cJ3QiLCAiZmFpbGVkIl0KKworY29tbW9uX2Vycm9ycyA9IFsKKyAgICAiKFdXKSB3YXJuaW5nLCAoRUUpIGVycm9yLCAoTkkpIG5vdCBpbXBsZW1lbnRlZCwgKD8/KSB1bmtub3duLiIsCisgICAgImRtYSB0aW1lb3V0IiwKKyAgICAiY2FuXCd0IGFkZCBoaWQgZGV2aWNlOiIsCisgICAgInVzYmhpZDogcHJvYmUgb2YgIiwKKyAgICAiX09TQyBmYWlsZWQgKEFFX0VSUk9SKSIsCisgICAgIl9PU0MgZmFpbGVkIChBRV9TVVBQT1JUKSIsCisgICAgIkFFX0FMUkVBRFlfRVhJU1RTIiwKKyAgICAiQUNQSSBfT1NDIHJlcXVlc3QgZmFpbGVkIChBRV9TVVBQT1JUKSIsCisgICAgImNhblwndCBkaXNhYmxlIEFTUE0iLAorICAgICJGYWlsZWQgdG8gbG9hZCBtb2R1bGUgXCJ2ZXNhXCIiLAorICAgICJGYWlsZWQgdG8gbG9hZCBtb2R1bGUgdmVzYSIsCisgICAgIkZhaWxlZCB0byBsb2FkIG1vZHVsZSBcIm1vZGVzZXR0aW5nXCIiLAorICAgICJGYWlsZWQgdG8gbG9hZCBtb2R1bGUgbW9kZXNldHRpbmciLAorICAgICJGYWlsZWQgdG8gbG9hZCBtb2R1bGUgXCJnbHhcIiIsCisgICAgIkZhaWxlZCB0byBsb2FkIG1vZHVsZSBcImZiZGV2XCIiLAorICAgICJGYWlsZWQgdG8gbG9hZCBtb2R1bGUgZmJkZXYiLAorICAgICJGYWlsZWQgdG8gbG9hZCBtb2R1bGUgZ2x4IiwKKyAgICAiW2RybV0gQ2Fubm90IGZpbmQgYW55IGNydGMgb3Igc2l6ZXMgLSBnb2luZyAxMDI0eDc2OCIsCisgICAgIl9PU0MgZmFpbGVkIChBRV9OT1RfRk9VTkQpOyBkaXNhYmxpbmcgQVNQTSIsCisgICAgIk9wZW4gQUNQSSBmYWlsZWQgKC92YXIvcnVuL2FjcGlkLnNvY2tldCkgKE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkpIiwKKyAgICAiTlggKEV4ZWN1dGUgRGlzYWJsZSkgcHJvdGVjdGlvbiBjYW5ub3QgYmUgZW5hYmxlZDogbm9uLVBBRSBrZXJuZWwhIiwKKyAgICAiaGQuOiBwb3NzaWJseSBmYWlsZWQgb3Bjb2RlIiwKKyAgICAnTkVUTElOSyBJTklUSUFMSVpBVElPTiBGQUlMRUQnLAorICAgICdrZXJuZWw6IENhbm5vdCBmaW5kIG1hcCBmaWxlJywKKyAgICAnb21hcF9od21vZDogZGVidWdzczogX3dhaXRfdGFyZ2V0X2Rpc2FibGUgZmFpbGVkJywKKyAgICAnVkdBIGFyYml0ZXI6IGNhbm5vdCBvcGVuIGtlcm5lbCBhcmJpdGVyLCBubyBtdWx0aS1jYXJkIHN1cHBvcnQnLAorICAgICdGYWlsZWQgdG8gZmluZCBVUkw6aHR0cDovL2lwdjQuY29ubm1hbi5uZXQvb25saW5lL3N0YXR1cy5odG1sJywKKyAgICAnT25saW5lIGNoZWNrIGZhaWxlZCBmb3InLAorICAgIF0KKworeDg2X2NvbW1vbiA9IFsKKyAgICAnW2RybTpwc2JfZG9faW5pdF0gKkVSUk9SKiBEZWJ1ZyBpcycsCisgICAgJ3dyb25nIEVMRiBjbGFzcycsCisgICAgJ0NvdWxkIG5vdCBlbmFibGUgUG93ZXJCdXR0b24gZXZlbnQnLAorICAgICdwcm9iZSBvZiBMTlhQV1JCTjowMCBmYWlsZWQgd2l0aCBlcnJvciAtMjInLAorXSArIGNvbW1vbl9lcnJvcnMKKworcWVtdXg4Nl9jb21tb24gPSBbCisgICAgJ0Zhc3QgVFNDIGNhbGlicmF0aW9uJywgCisgICAgJ3dyb25nIEVMRiBjbGFzcycsCisgICAgImZhaWwgdG8gYWRkIE1NQ09ORklHIGluZm9ybWF0aW9uLCBjYW4ndCBhY2Nlc3MgZXh0ZW5kZWQgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgdW5kZXIgdGhpcyBicmlkZ2UuIiwKKyAgICAiY2FuJ3QgY2xhaW0gQkFSICIsCitdICsgY29tbW9uX2Vycm9ycworCitpZ25vcmVfZXJyb3JzID0geyAKKyAgICAnZGVmYXVsdCcgOiBjb21tb25fZXJyb3JzLAorICAgICdxZW11eDg2JyA6IFsKKyAgICAgICAgJ0ZhaWxlZCB0byBhY2Nlc3MgcGVyZmN0ciBtc3IgKE1TUicsCisgICAgICAgIF0gKyBxZW11eDg2X2NvbW1vbiwKKyAgICAncWVtdXg4Ni02NCcgOiBxZW11eDg2X2NvbW1vbiwKKyAgICAncWVtdW1pcHMnIDogWworICAgICAgICAnRmFpbGVkIHRvIGxvYWQgbW9kdWxlICJnbHgiJywKKyAgICAgICAgJ3BjaSAwMDAwOjAwOjAwLjA6IFtGaXJtd2FyZSBCdWddOiByZWcgMHguLjogaW52YWxpZCBCQVIgKGNhblwndCBzaXplKScsCisgICAgICAgIF0gKyBjb21tb25fZXJyb3JzLAorICAgICdxZW11bWlwczY0JyA6IFsKKyAgICAgICAgJ3BjaSAwMDAwOjAwOjAwLjA6IFtGaXJtd2FyZSBCdWddOiByZWcgMHguLjogaW52YWxpZCBCQVIgKGNhblwndCBzaXplKScsCisgICAgICAgICBdICsgY29tbW9uX2Vycm9ycywKKyAgICAncWVtdXBwYycgOiBbCisgICAgICAgICdQQ0kgMDAwMDowMCBDYW5ub3QgcmVzZXJ2ZSBMZWdhY3kgSU8gW2lvICAweDAwMDAtMHgwZmZmXScsCisgICAgICAgICdob3N0IHNpZGUgODAtd2lyZSBjYWJsZSBkZXRlY3Rpb24gZmFpbGVkLCBsaW1pdGluZyBtYXggc3BlZWQnLAorICAgICAgICAnbW9kZSAiNjQweDQ4MCIgdGVzdCBmYWlsZWQnLAorICAgICAgICAnRmFpbGVkIHRvIGxvYWQgbW9kdWxlICJnbHgiJywKKyAgICAgICAgXSArIGNvbW1vbl9lcnJvcnMsCisgICAgJ3FlbXVhcm0nIDogWworICAgICAgICAnbW1jaS1wbDE4eDogcHJvYmUgb2YgZnBnYTowNSBmYWlsZWQgd2l0aCBlcnJvciAtMjInLAorICAgICAgICAnbW1jaS1wbDE4eDogcHJvYmUgb2YgZnBnYTowYiBmYWlsZWQgd2l0aCBlcnJvciAtMjInLAorICAgICAgICAnRmFpbGVkIHRvIGxvYWQgbW9kdWxlICJnbHgiJworICAgICAgICBdICsgY29tbW9uX2Vycm9ycywKKyAgICAncWVtdWFybTY0JyA6IFsKKyAgICAgICAgJ0ZhdGFsIHNlcnZlciBlcnJvcjonLAorICAgICAgICAnKEVFKSBTZXJ2ZXIgdGVybWluYXRlZCB3aXRoIGVycm9yICgxKS4gQ2xvc2luZyBsb2cgZmlsZS4nLAorICAgICAgICBdICsgY29tbW9uX2Vycm9ycywKKyAgICAnZW1lbmxvdycgOiBbCisgICAgICAgICdbRmlybXdhcmUgQnVnXTogQUNQSTogTm8gX0JRQyBtZXRob2QsIGNhbm5vdCBkZXRlcm1pbmUgaW5pdGlhbCBicmlnaHRuZXNzJywKKyAgICAgICAgJyhFRSkgRmFpbGVkIHRvIGxvYWQgbW9kdWxlICJwc2IiJywKKyAgICAgICAgJyhFRSkgRmFpbGVkIHRvIGxvYWQgbW9kdWxlIHBzYicsCisgICAgICAgICcoRUUpIEZhaWxlZCB0byBsb2FkIG1vZHVsZSAicHNiZHJ2IicsCisgICAgICAgICcoRUUpIEZhaWxlZCB0byBsb2FkIG1vZHVsZSBwc2JkcnYnLAorICAgICAgICAnKEVFKSBvcGVuIC9kZXYvZmIwOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JywKKyAgICAgICAgJyhFRSkgQUlHTFg6IHJldmVydGluZyB0byBzb2Z0d2FyZSByZW5kZXJpbmcnLAorICAgICAgICBdICsgeDg2X2NvbW1vbiwKKyAgICAnY29yZTJfMzInIDogWworICAgICAgICAnQUNQSTogTm8gX0JRQyBtZXRob2QsIGNhbm5vdCBkZXRlcm1pbmUgaW5pdGlhbCBicmlnaHRuZXNzJywKKyAgICAgICAgJ1tGaXJtd2FyZSBCdWddOiBBQ1BJOiBObyBfQlFDIG1ldGhvZCwgY2Fubm90IGRldGVybWluZSBpbml0aWFsIGJyaWdodG5lc3MnLAorICAgICAgICAnKEVFKSBGYWlsZWQgdG8gbG9hZCBtb2R1bGUgInBzYiInLAorICAgICAgICAnKEVFKSBGYWlsZWQgdG8gbG9hZCBtb2R1bGUgcHNiJywKKyAgICAgICAgJyhFRSkgRmFpbGVkIHRvIGxvYWQgbW9kdWxlICJwc2JkcnYiJywKKyAgICAgICAgJyhFRSkgRmFpbGVkIHRvIGxvYWQgbW9kdWxlIHBzYmRydicsCisgICAgICAgICcoRUUpIG9wZW4gL2Rldi9mYjA6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknLAorICAgICAgICAnKEVFKSBBSUdMWDogcmV2ZXJ0aW5nIHRvIHNvZnR3YXJlIHJlbmRlcmluZycsCisgICAgICAgIF0gKyB4ODZfY29tbW9uLAorICAgICdpbnRlbC1jb3JlaTctNjQnIDogWworICAgICAgICAiY29udHJvbGxlciBjYW4ndCBkbyBERVZTTFAsIHR1cm5pbmcgb2ZmIiwKKyAgICAgICAgXSArIGNvbW1vbl9lcnJvcnMsCisgICAgJ2Nyb3duYmF5JyA6IHg4Nl9jb21tb24sCisgICAgJ2dlbmVyaWN4ODYnIDogeDg2X2NvbW1vbiwKKyAgICAnZ2VuZXJpY3g4Ni02NCcgOiB4ODZfY29tbW9uLAorICAgICdlZGdlcm91dGVyJyA6IFsKKyAgICAgICAgJ0ZhdGFsIHNlcnZlciBlcnJvcjonLAorICAgICAgICBdICsgY29tbW9uX2Vycm9ycywKKyAgICAnbWlubm93JyA6IFsKKyAgICAgICAgJ25ldGxpbmsgaW5pdCBmYWlsZWQnLAorICAgICAgICBdICsgY29tbW9uX2Vycm9ycywKKyAgICAnamFzcGVyZm9yZXN0JyA6IFsKKyAgICAgICAgJ0FjdGl2YXRlZCBzZXJ2aWNlIFwnb3JnLmJsdWV6XCcgZmFpbGVkOicsCisgICAgICAgICdVbmFibGUgdG8gZmluZCBORkMgbmV0bGluayBmYW1pbHknLAorICAgICAgICAnbmV0bGluayBpbml0IGZhaWxlZCcsCisgICAgICAgIF0gKyBjb21tb25fZXJyb3JzLAorfQorCitsb2dfbG9jYXRpb25zID0gWyIvdmFyL2xvZy8iLCIvdmFyL2xvZy9kbWVzZyIsICIvdG1wL2RtZXNnX291dHB1dC5sb2ciXQorCitjbGFzcyBQYXJzZUxvZ3NUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYuZXJyb3JzID0gZXJyb3JzCisgICAgICAgIHNlbGYuaWdub3JlX2Vycm9ycyA9IGlnbm9yZV9lcnJvcnMKKyAgICAgICAgc2VsZi5sb2dfbG9jYXRpb25zID0gbG9nX2xvY2F0aW9ucworICAgICAgICBzZWxmLm1zZyA9ICIiCisKKyAgICBkZWYgZ2V0TWFjaGluZShzZWxmKToKKyAgICAgICAgcmV0dXJuIG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIk1BQ0hJTkUiLCBUcnVlKQorCisgICAgI2dldCBzb21lIGluZm9ybWF0aW9uIG9uIHRoZSBDUFUgb2YgdGhlIG1hY2hpbmUgdG8gZGlzcGxheSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBvdXRwdXQuIFRoaXMgaW5mbyBtaWdodCBiZSB1c2VmdWwgaW4gc29tZSBjYXNlcy4KKyAgICBkZWYgZ2V0SGFyZHdhcmVJbmZvKHNlbGYpOgorICAgICAgICBod2kgPSAiIgorICAgICAgICAoc3RhdHVzLCBjcHVfbmFtZSkgPSBzZWxmLnRhcmdldC5ydW4oImNhdCAvcHJvYy9jcHVpbmZvIHwgZ3JlcCBcIm1vZGVsIG5hbWVcIiB8IGhlYWQgLW4xIHwgYXdrICdCRUdJTntGUz1cIjpcIn17cHJpbnQgJDJ9JyIpCisgICAgICAgIChzdGF0dXMsIGNwdV9waHlzaWNhbF9jb3JlcykgPSBzZWxmLnRhcmdldC5ydW4oImNhdCAvcHJvYy9jcHVpbmZvIHwgZ3JlcCBcImNwdSBjb3Jlc1wiIHwgaGVhZCAtbjEgfCBhd2sgeydwcmludCAkNCd9IikKKyAgICAgICAgKHN0YXR1cywgY3B1X2xvZ2ljYWxfY29yZXMpID0gc2VsZi50YXJnZXQucnVuKCJjYXQgL3Byb2MvY3B1aW5mbyB8IGdyZXAgXCJwcm9jZXNzb3JcIiB8IHdjIC1sIikKKyAgICAgICAgKHN0YXR1cywgY3B1X2FyY2gpID0gc2VsZi50YXJnZXQucnVuKCJ1bmFtZSAtbSIpCisgICAgICAgIGh3aSArPSAiTWFjaGluZSBpbmZvcm1hdGlvbjogXG4iCisgICAgICAgIGh3aSArPSAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIgorICAgICAgICBod2kgKz0gIk1hY2hpbmUgbmFtZTogIitzZWxmLmdldE1hY2hpbmUoKSsiXG4iCisgICAgICAgIGh3aSArPSAiQ1BVOiAiK3N0cihjcHVfbmFtZSkrIlxuIgorICAgICAgICBod2kgKz0gIkFyY2g6ICIrc3RyKGNwdV9hcmNoKSsiXG4iCisgICAgICAgIGh3aSArPSAiUGh5c2ljYWwgY29yZXM6ICIrc3RyKGNwdV9waHlzaWNhbF9jb3JlcykrIlxuIgorICAgICAgICBod2kgKz0gIkxvZ2ljYWwgY29yZXM6ICIrc3RyKGNwdV9sb2dpY2FsX2NvcmVzKSsiXG4iCisgICAgICAgIGh3aSArPSAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIgorICAgICAgICByZXR1cm4gaHdpCisKKyAgICAjZ28gdGhyb3VnaCB0aGUgbG9nIGxvY2F0aW9ucyBwcm92aWRlZCBhbmQgaWYgaXQncyBhIGZvbGRlciBjcmVhdGUgYSBsaXN0IHdpdGggYWxsIHRoZSAubG9nIGZpbGVzIGluIGl0LCBpZiBpdCdzIGEgZmlsZSBqdXN0IGFkZCAKKyAgICAjaXQgdG8gdGhhdCBsaXN0CisgICAgZGVmIGdldExvZ0xpc3Qoc2VsZiwgbG9nX2xvY2F0aW9ucyk6CisgICAgICAgIGxvZ3MgPSBbXQorICAgICAgICBmb3IgbG9jYXRpb24gaW4gbG9nX2xvY2F0aW9uczoKKyAgICAgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oInRlc3QgLWYgIitzdHIobG9jYXRpb24pKQorICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSAwKToKKyAgICAgICAgICAgICAgICBsb2dzLmFwcGVuZChzdHIobG9jYXRpb24pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCJ0ZXN0IC1kICIrc3RyKGxvY2F0aW9uKSkKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IDApOgorICAgICAgICAgICAgICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCJmaW5kICIrc3RyKGxvY2F0aW9uKSsiLyoubG9nIC1tYXhkZXB0aCAxIC10eXBlIGYiKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IDApOgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnNwbGl0bGluZXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxvZ2ZpbGUgaW4gb3V0cHV0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ3MuYXBwZW5kKG9zLnBhdGguam9pbihsb2NhdGlvbixzdHIobG9nZmlsZSkpKQorICAgICAgICByZXR1cm4gbG9ncworCisgICAgI2NvcHkgdGhlIGxvZyBmaWxlcyB0byBiZSBwYXJzZWQgbG9jYWxseQorICAgIGRlZiB0cmFuc2Zlcl9sb2dzKHNlbGYsIGxvZ19saXN0KToKKyAgICAgICAgdGFyZ2V0X2xvZ3MgPSAndGFyZ2V0X2xvZ3MnCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0YXJnZXRfbG9ncyk6CisgICAgICAgICAgICBvcy5tYWtlZGlycyh0YXJnZXRfbG9ncykKKyAgICAgICAgZm9yIGYgaW4gbG9nX2xpc3Q6CisgICAgICAgICAgICBzZWxmLnRhcmdldC5jb3B5X2Zyb20oZiwgdGFyZ2V0X2xvZ3MpCisKKyAgICAjZ2V0IHRoZSBsb2NhbCBsaXN0IG9mIGxvZ3MKKyAgICBkZWYgZ2V0X2xvY2FsX2xvZ19saXN0KHNlbGYsIGxvZ19sb2NhdGlvbnMpOgorICAgICAgICBzZWxmLnRyYW5zZmVyX2xvZ3Moc2VsZi5nZXRMb2dMaXN0KGxvZ19sb2NhdGlvbnMpKQorICAgICAgICBsb2dzID0gWyBvcy5wYXRoLmpvaW4oJ3RhcmdldF9sb2dzJyxmKSBmb3IgZiBpbiBvcy5saXN0ZGlyKCd0YXJnZXRfbG9ncycpIGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbigndGFyZ2V0X2xvZ3MnLGYpKSBdCisgICAgICAgIHJldHVybiBsb2dzCisKKyAgICAjYnVpbGQgdGhlIGdyZXAgY29tbWFuZCB0byBiZSB1c2VkIHdpdGggZmlsdGVycyBhbmQgZXhjbHVzaW9ucworICAgIGRlZiBidWlsZF9ncmVwY21kKHNlbGYsIGVycm9ycywgaWdub3JlX2Vycm9ycywgbG9nKToKKyAgICAgICAgZ3JlcGNtZCA9ICJncmVwICIKKyAgICAgICAgZ3JlcGNtZCArPSItRWkgXCIiCisgICAgICAgIGZvciBlcnJvciBpbiBlcnJvcnM6CisgICAgICAgICAgICBncmVwY21kICs9IGVycm9yKyJ8IgorICAgICAgICBncmVwY21kID0gZ3JlcGNtZFs6LTFdCisgICAgICAgIGdyZXBjbWQgKz0gIlwiICIrc3RyKGxvZykrIiB8IGdyZXAgLUVpdiBcJyIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXJyb3JsaXN0ID0gaWdub3JlX2Vycm9yc1tzZWxmLmdldE1hY2hpbmUoKV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZi5tc2cgKz0gIk5vIGlnbm9yZSBsaXN0IGZvdW5kIGZvciB0aGlzIG1hY2hpbmUsIHVzaW5nIGRlZmF1bHRcbiIKKyAgICAgICAgICAgIGVycm9ybGlzdCA9IGlnbm9yZV9lcnJvcnNbJ2RlZmF1bHQnXQorICAgICAgICBmb3IgaWdub3JlX2Vycm9yIGluIGVycm9ybGlzdDoKKyAgICAgICAgICAgIGlnbm9yZV9lcnJvciA9IGlnbm9yZV9lcnJvci5yZXBsYWNlKCIoIiwgIlwoIikKKyAgICAgICAgICAgIGlnbm9yZV9lcnJvciA9IGlnbm9yZV9lcnJvci5yZXBsYWNlKCIpIiwgIlwpIikKKyAgICAgICAgICAgIGlnbm9yZV9lcnJvciA9IGlnbm9yZV9lcnJvci5yZXBsYWNlKCInIiwgIi4iKQorICAgICAgICAgICAgaWdub3JlX2Vycm9yID0gaWdub3JlX2Vycm9yLnJlcGxhY2UoIj8iLCAiXD8iKQorICAgICAgICAgICAgaWdub3JlX2Vycm9yID0gaWdub3JlX2Vycm9yLnJlcGxhY2UoIlsiLCAiXFsiKQorICAgICAgICAgICAgaWdub3JlX2Vycm9yID0gaWdub3JlX2Vycm9yLnJlcGxhY2UoIl0iLCAiXF0iKQorICAgICAgICAgICAgaWdub3JlX2Vycm9yID0gaWdub3JlX2Vycm9yLnJlcGxhY2UoIioiLCAiXCoiKQorICAgICAgICAgICAgZ3JlcGNtZCArPSBpZ25vcmVfZXJyb3IrInwiCisgICAgICAgIGdyZXBjbWQgPSBncmVwY21kWzotMV0KKyAgICAgICAgZ3JlcGNtZCArPSAiXCciCisgICAgICAgIHJldHVybiBncmVwY21kCisKKyAgICAjZ3JlcCBvbmx5IHRoZSBlcnJvcnMgc28gdGhhdCB0aGVpciBjb250ZXh0IGNvdWxkIGJlIGNvbGxlY3RlZC4gRGVmYXVsdCBjb250ZXh0IGlzIDEwIGxpbmVzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGVycm9yIGl0c2VsZgorICAgIGRlZiBwYXJzZV9sb2dzKHNlbGYsIGVycm9ycywgaWdub3JlX2Vycm9ycywgbG9ncywgbGluZXNfYmVmb3JlID0gMTAsIGxpbmVzX2FmdGVyID0gMTApOgorICAgICAgICByZXN1bHRzID0ge30KKyAgICAgICAgcmV6ID0gW10KKyAgICAgICAgZ3JlcF9vdXRwdXQgPSAnJworICAgICAgICBmb3IgbG9nIGluIGxvZ3M6CisgICAgICAgICAgICByZXN1bHQgPSBOb25lCisgICAgICAgICAgICB0aGVncmVwID0gc2VsZi5idWlsZF9ncmVwY21kKGVycm9ycywgaWdub3JlX2Vycm9ycywgbG9nKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KHRoZWdyZXAsIHNoZWxsPVRydWUpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaWYgKHJlc3VsdCBpcyBub3QgTm9uZSk6CisgICAgICAgICAgICAgICAgcmVzdWx0c1tsb2cucmVwbGFjZSgndGFyZ2V0X2xvZ3MvJywnJyldID0ge30KKyAgICAgICAgICAgICAgICByZXogPSByZXN1bHQuc3BsaXRsaW5lcygpCisgICAgICAgICAgICAgICAgZm9yIHhyZXogaW4gcmV6OgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gImdyZXAgXCJcXCIrc3RyKHhyZXopKyJcIiAtQiAiK3N0cihsaW5lc19iZWZvcmUpKyIgLUEgIitzdHIobGluZXNfYWZ0ZXIpKyIgIitzdHIobG9nKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBncmVwX291dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNvbW1hbmQsIHNoZWxsPVRydWUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1tsb2cucmVwbGFjZSgndGFyZ2V0X2xvZ3MvJywnJyldW3hyZXpdPWdyZXBfb3V0cHV0CisgICAgICAgIHJldHVybiByZXN1bHRzCisKKyAgICAjZ2V0IHRoZSBvdXRwdXQgb2YgZG1lc2cgYW5kIHdyaXRlIGl0IGluIGEgZmlsZS4gVGhpcyBmaWxlIGlzIGFkZGVkIHRvIGxvZ19sb2NhdGlvbnMuCisgICAgZGVmIHdyaXRlX2RtZXNnKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBkbWVzZykgPSBzZWxmLnRhcmdldC5ydW4oImRtZXNnIikKKyAgICAgICAgKHN0YXR1cywgZG1lc2cyKSA9IHNlbGYudGFyZ2V0LnJ1bigiZWNobyBcIiIrc3RyKGRtZXNnKSsiXCIgPiAvdG1wL2RtZXNnX291dHB1dC5sb2ciKQorCisgICAgQHRlc3RjYXNlKDEwNTkpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9wYXJzZWxvZ3Moc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfZG1lc2coKQorICAgICAgICBsb2dfbGlzdCA9IHNlbGYuZ2V0X2xvY2FsX2xvZ19saXN0KHNlbGYubG9nX2xvY2F0aW9ucykKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5wYXJzZV9sb2dzKHNlbGYuZXJyb3JzLCBzZWxmLmlnbm9yZV9lcnJvcnMsIGxvZ19saXN0KQorICAgICAgICBwcmludCBzZWxmLmdldEhhcmR3YXJlSW5mbygpCisgICAgICAgIGVycmNvdW50ID0gMAorICAgICAgICBmb3IgbG9nIGluIHJlc3VsdDoKKyAgICAgICAgICAgIHNlbGYubXNnICs9ICJMb2c6ICIrbG9nKyJcbiIKKyAgICAgICAgICAgIHNlbGYubXNnICs9ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICAgICAgICAgZm9yIGVycm9yIGluIHJlc3VsdFtsb2ddOgorICAgICAgICAgICAgICAgIGVycmNvdW50ICs9IDEKKyAgICAgICAgICAgICAgICBzZWxmLm1zZyArPSAiQ2VudHJhbCBlcnJvcjogIitzdHIoZXJyb3IpKyJcbiIKKyAgICAgICAgICAgICAgICBzZWxmLm1zZyArPSAgIioqKioqKioqKioqKioqKioqKioqKioqXG4iCisgICAgICAgICAgICAgICAgc2VsZi5tc2cgKz0gIHJlc3VsdFtzdHIobG9nKV1bc3RyKGVycm9yKV0rIlxuIgorICAgICAgICAgICAgICAgIHNlbGYubXNnICs9ICAiKioqKioqKioqKioqKioqKioqKioqKipcbiIKKyAgICAgICAgc2VsZi5tc2cgKz0gIiVzIGVycm9ycyBmb3VuZCBpbiBsb2dzLiIgJSBlcnJjb3VudAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVycmNvdW50LCAwLCBtc2c9c2VsZi5tc2cpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9wZXJsLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcGVybC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDQ0ZDBhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcGVybC5weQpAQCAtMCwwICsxLDMwIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgicGVybCIpOgorICAgICAgICBza2lwTW9kdWxlKCJObyBwZXJsIHBhY2thZ2UgaW4gdGhlIGltYWdlIikKKworCitjbGFzcyBQZXJsVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5jb3B5X3RvKG9zLnBhdGguam9pbihvZVJ1bnRpbWVUZXN0LnRjLmZpbGVzZGlyLCAidGVzdC5wbCIpLCAiL3RtcC90ZXN0LnBsIikKKworICAgIEB0ZXN0Y2FzZSgxMTQxKQorICAgIGRlZiB0ZXN0X3BlcmxfZXhpc3RzKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCd3aGljaCBwZXJsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0iUGVybCBiaW5hcnkgbm90IGluIFBBVEggb3Igbm90IG9uIHRhcmdldC4iKQorCisgICAgQHRlc3RjYXNlKDIwOCkKKyAgICBkZWYgdGVzdF9wZXJsX3dvcmtzKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdwZXJsIC90bXAvdGVzdC5wbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IkV4aXQgc3RhdHVzIHdhcyBub3QgMC4gT3V0cHV0OiAlcyIgJSBvdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCAidGhlIHZhbHVlIG9mIGEgaXMgMC4wMSIsIG1zZz0iSW5jb3JyZWN0IG91dHB1dDogJXMiICUgb3V0cHV0KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LnJ1bigicm0gL3RtcC90ZXN0LnBsIikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BpbmcucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9waW5nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwYzQ2MDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9waW5nLnB5CkBAIC0wLDAgKzEsMjIgQEAKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0Citmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitjbGFzcyBQaW5nVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEB0ZXN0Y2FzZSg5NjQpCisgICAgZGVmIHRlc3RfcGluZyhzZWxmKToKKyAgICAgICAgb3V0cHV0ID0gJycKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSArIDYwCisgICAgICAgIHdoaWxlIGNvdW50IDwgNSBhbmQgdGltZS50aW1lKCkgPCBlbmR0aW1lOgorICAgICAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oInBpbmcgLWMgMSAlcyIgJSBzZWxmLnRhcmdldC5pcCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgICAgIG91dHB1dCArPSBwcm9jLmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgICAgIGlmIHByb2MucG9sbCgpID09IDA6CisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudCwgNSwgbXNnID0gIkV4cGVjdGVkIDUgY29uc2VjdXRpdmUgcmVwbGllcywgZ290ICVkLlxucGluZyBvdXRwdXQgaXM6XG4lcyIgJSAoY291bnQsb3V0cHV0KSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3B5dGhvbi5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3B5dGhvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmVkYjdhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcHl0aG9uLnB5CkBAIC0wLDAgKzEsMzUgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJweXRob24iKToKKyAgICAgICAgc2tpcE1vZHVsZSgiTm8gcHl0aG9uIHBhY2thZ2UgaW4gdGhlIGltYWdlIikKKworCitjbGFzcyBQeXRob25UZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LmNvcHlfdG8ob3MucGF0aC5qb2luKG9lUnVudGltZVRlc3QudGMuZmlsZXNkaXIsICJ0ZXN0LnB5IiksICIvdG1wL3Rlc3QucHkiKQorCisgICAgQHRlc3RjYXNlKDExNDUpCisgICAgZGVmIHRlc3RfcHl0aG9uX2V4aXN0cyhzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignd2hpY2ggcHl0aG9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0iUHl0aG9uIGJpbmFyeSBub3QgaW4gUEFUSCBvciBub3Qgb24gdGFyZ2V0LiIpCisKKyAgICBAdGVzdGNhc2UoOTY1KQorICAgIGRlZiB0ZXN0X3B5dGhvbl9zdGRvdXQoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3B5dGhvbiAvdG1wL3Rlc3QucHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJFeGl0IHN0YXR1cyB3YXMgbm90IDAuIE91dHB1dDogJXMiICUgb3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgInRoZSB2YWx1ZSBvZiBhIGlzIDAuMDEiLCBtc2c9IkluY29ycmVjdCBvdXRwdXQ6ICVzIiAlIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTQ2KQorICAgIGRlZiB0ZXN0X3B5dGhvbl90ZXN0ZmlsZShzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignbHMgL3RtcC90ZXN0ZmlsZS5weXRob24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJQeXRob24gdGVzdCBmaWxlIGdlbmVyYXRlIGZhaWxlZC4iKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LnJ1bigicm0gL3RtcC90ZXN0LnB5IC90bXAvdGVzdGZpbGUucHl0aG9uIikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3JwbS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3JwbS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmFhZTI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcnBtLnB5CkBAIC0wLDAgKzEsMTAxIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IGZubWF0Y2gKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInBhY2thZ2UtbWFuYWdlbWVudCIpOgorICAgICAgICAgICAgc2tpcE1vZHVsZSgicnBtIG1vZHVsZSBza2lwcGVkOiB0YXJnZXQgZG9lc24ndCBoYXZlIHBhY2thZ2UtbWFuYWdlbWVudCBpbiBJTUFHRV9GRUFUVVJFUyIpCisgICAgaWYgInBhY2thZ2VfcnBtIiAhPSBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJQQUNLQUdFX0NMQVNTRVMiLCBUcnVlKS5zcGxpdCgpWzBdOgorICAgICAgICAgICAgc2tpcE1vZHVsZSgicnBtIG1vZHVsZSBza2lwcGVkOiB0YXJnZXQgZG9lc24ndCBoYXZlIHJwbSBhcyBwcmltYXJ5IHBhY2thZ2UgbWFuYWdlciIpCisKKworY2xhc3MgUnBtQmFzaWNUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHRlc3RjYXNlKDk2MCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3JwbV9oZWxwKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdycG0gLS1oZWxwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0ic3RhdHVzIGFuZCBvdXRwdXQ6ICVzIGFuZCAlcyIgJSAoc3RhdHVzLG91dHB1dCkpCisKKyAgICBAdGVzdGNhc2UoMTkxKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3JwbV9oZWxwJykKKyAgICBkZWYgdGVzdF9ycG1fcXVlcnkoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3JwbSAtcSBycG0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJzdGF0dXMgYW5kIG91dHB1dDogJXMgYW5kICVzIiAlIChzdGF0dXMsb3V0cHV0KSkKKworY2xhc3MgUnBtSW5zdGFsbFJlbW92ZVRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgcGtnYXJjaCA9IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoJ1RVTkVfUEtHQVJDSCcsIFRydWUpLnJlcGxhY2UoIi0iLCAiXyIpCisgICAgICAgIHJwbWRpciA9IG9zLnBhdGguam9pbihvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCdERVBMT1lfRElSJywgVHJ1ZSksICJycG0iLCBwa2dhcmNoKQorICAgICAgICAjIHBpY2sgcnBtLWRvYyBhcyBhIHRlc3QgZmlsZSB0byBnZXQgaW5zdGFsbGVkLCBiZWNhdXNlIGl0J3Mgc21hbGwgYW5kIGl0IHdpbGwgYWx3YXlzIGJlIGJ1aWx0IGZvciBzdGFuZGFyZCB0YXJnZXRzCisgICAgICAgIGZvciBmIGluIGZubWF0Y2guZmlsdGVyKG9zLmxpc3RkaXIocnBtZGlyKSwgInJwbS1kb2MtKi4lcy5ycG0iICUgcGtnYXJjaCk6CisgICAgICAgICAgICB0ZXN0cnBtZmlsZSA9IGYKKyAgICAgICAgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQuY29weV90byhvcy5wYXRoLmpvaW4ocnBtZGlyLHRlc3RycG1maWxlKSwgIi90bXAvcnBtLWRvYy5ycG0iKQorCisgICAgQHRlc3RjYXNlKDE5MikKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9ycG1faGVscCcpCisgICAgZGVmIHRlc3RfcnBtX2luc3RhbGwoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3JwbSAtaXZoIC90bXAvcnBtLWRvYy5ycG0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJGYWlsZWQgdG8gaW5zdGFsbCBycG0tZG9jIHBhY2thZ2U6ICVzIiAlIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxOTQpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3RfcnBtX2luc3RhbGwnKQorICAgIGRlZiB0ZXN0X3JwbV9yZW1vdmUoc2VsZik6CisgICAgICAgIChzdGF0dXMsb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigncnBtIC1lIHJwbS1kb2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJGYWlsZWQgdG8gcmVtb3ZlIHJwbS1kb2MgcGFja2FnZTogJXMiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEwOTYpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9ycG1fcXVlcnlfbm9ucm9vdChzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigndXNlcmFkZCB0ZXN0MScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGF0dXMgPT0gMCwgbXNnPSJGYWlsZWQgdG8gY3JlYXRlIG5ldyB1c2VyIikKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignc3VkbyAtdSB0ZXN0MSBpZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnKHRlc3QxKScgaW4gb3V0cHV0LCBtc2c9IkZhaWxlZCB0byBleGVjdXRlIGFzIG5ldyB1c2VyIikKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignc3VkbyAtdSB0ZXN0MSBycG0gLXFhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0ic3RhdHVzOiAlcy4gQ2Fubm90IHJ1biBycG0gLXFhIiAlIHN0YXR1cykKKworICAgIEB0ZXN0Y2FzZSgxOTUpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3RfcnBtX2luc3RhbGwnKQorICAgIGRlZiB0ZXN0X2NoZWNrX3JwbV9pbnN0YWxsX3JlbW92YWxfbG9nX2ZpbGVfc2l6ZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6ICAgICBDaGVjayBycG0gaW5zdGFsbC9yZW1vdmFsIGxvZyBmaWxlIHNpemUKKyAgICAgICAgRXhwZWN0ZWQ6ICAgIFRoZXJlIHNob3VsZCBiZSBzb21lIG1ldGhvZCB0byBrZWVwIHJwbSBsb2cgaW4gYSBzbWFsbCBzaXplIC4KKyAgICAgICAgUHJvZHVjdDogICAgIEJTUHMKKyAgICAgICAgQXV0aG9yOiAgICAgIEFsZXhhbmRydSBHZW9yZ2VzY3UgPGFsZXhhbmRydS5jLmdlb3JnZXNjdUBpbnRlbC5jb20+CisgICAgICAgIEF1dG9tYXRlZEJ5OiBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+CisgICAgICAgICIiIgorICAgICAgICBkYl9maWxlc19jbWQgPSAnbHMgL3Zhci9saWIvcnBtL19fZGIuKicKKyAgICAgICAgZ2V0X2xvZ19zaXplX2NtZCA9ICJkdSAvdmFyL2xpYi9ycG0vbG9nL2xvZy4qIHwgYXdrICd7cHJpbnQgJDF9JyIKKworICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHNvbWUgZGF0YWJhc2UgZmlsZXMgYXJlIHVuZGVyIC92YXIvbGliL3JwbSBhcyAnX19kYi54eHgnCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oZGJfZmlsZXNfY21kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0YXR1cywgJ0ZhaWxlZCB0byBmaW5kIGRhdGFiYXNlIGZpbGVzIHVuZGVyIC92YXIvbGliL3JwbS8gYXMgX19kYi54eHgnKQorCisgICAgICAgICMgUmVtb3ZlIHRoZSBwYWNrYWdlIGp1c3QgaW4gY2FzZQorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ3JwbSAtZSBycG0tZG9jJykKKworICAgICAgICAjIEluc3RhbGwvUmVtb3ZlIGEgcGFja2FnZSAxMCB0aW1lcworICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdycG0gLWl2aCAvdG1wL3JwbS1kb2MucnBtJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzLCAiRmFpbGVkIHRvIGluc3RhbGwgcnBtLWRvYyBwYWNrYWdlLiBSZWFzb246IHt9Ii5mb3JtYXQob3V0cHV0KSkKKworICAgICAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigncnBtIC1lIHJwbS1kb2MnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMsICJGYWlsZWQgdG8gcmVtb3ZlIHJwbS1kb2MgcGFja2FnZS4gUmVhc29uOiB7fSIuZm9ybWF0KG91dHB1dCkpCisKKyAgICAgICAgIyBHZXQgdGhlIHNpemUgb2YgbG9nIGZpbGUKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihnZXRfbG9nX3NpemVfY21kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0YXR1cywgJ0ZhaWxlZCB0byBnZXQgdGhlIGZpbmFsIHNpemUgb2YgdGhlIGxvZyBmaWxlLicpCisKKyAgICAgICAgIyBDb21wYXJlIGVhY2ggbG9nIHNpemUKKyAgICAgICAgZm9yIGxvZ19maWxlX3NpemUgaW4gb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoaW50KGxvZ19maWxlX3NpemUpLCAxMTI2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0xvZyBmaWxlIHNpemUgaXMgZ3JlYXRlciB0aGF0IGV4cGVjdGVkICh+MTBNQiksIGZvdW5kIHt9IGJ5dGVzJy5mb3JtYXQobG9nX2ZpbGVfc2l6ZSkpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQucnVuKCdybSAtZiAvdG1wL3JwbS1kb2MucnBtJykKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc2NhbmVsZi5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NjYW5lbGYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNhMDI0YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NjYW5lbGYucHkKQEAgLTAsMCArMSwyOCBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJwYXgtdXRpbHMiKToKKyAgICAgICAgc2tpcE1vZHVsZSgicGF4LXV0aWxzIHBhY2thZ2Ugbm90IGluc3RhbGxlZCIpCisKK2NsYXNzIFNjYW5lbGZUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNjYW5jbWQgPSAnc2NhbmVsZiAtLXF1aWV0IC0tcmVjdXJzaXZlIC0tbW91bnQgLS1sZHBhdGggLS1wYXRoJworCisgICAgQHRlc3RjYXNlKDk2NikKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3NjYW5lbGZfdGV4dHJlbChzZWxmKToKKyAgICAgICAgIyBwcmludCBURVhUUkVMIGluZm9ybWF0aW9uCisgICAgICAgIHNlbGYuc2NhbmNtZCArPSAiIC0tdGV4dHJlbCIKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihzZWxmLnNjYW5jbWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LnN0cmlwKCksICIiLCAiXG4iLmpvaW4oW3NlbGYuc2NhbmNtZCwgb3V0cHV0XSkpCisKKyAgICBAdGVzdGNhc2UoOTY3KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3Rfc2NhbmVsZl9ycGF0aChzZWxmKToKKyAgICAgICAgIyBwcmludCBSUEFUSCBpbmZvcm1hdGlvbgorICAgICAgICBzZWxmLnNjYW5jbWQgKz0gIiAtLXJwYXRoIgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKHNlbGYuc2NhbmNtZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQuc3RyaXAoKSwgIiIsICJcbiIuam9pbihbc2VsZi5zY2FuY21kLCBvdXRwdXRdKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NjcC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NjcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGU4N2QyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc2NwLnB5CkBAIC0wLDAgKzEsMjIgQEAKK2ltcG9ydCBvcworZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHNraXBVbmxlc3NQYXNzZWQsIHRlc3RjYXNlCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCAob2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJkcm9wYmVhciIpIG9yIG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgib3BlbnNzaC1zc2hkIikpOgorICAgICAgICBza2lwTW9kdWxlKCJObyBzc2ggcGFja2FnZSBpbiBpbWFnZSIpCisKK2NsYXNzIFNjcFRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMjIwKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3Rfc2NwX2ZpbGUoc2VsZik6CisgICAgICAgIHRlc3RfbG9nX2RpciA9IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIlRFU1RfTE9HX0RJUiIsIFRydWUpCisgICAgICAgIHRlc3RfZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHRlc3RfbG9nX2RpciwgJ3Rlc3Rfc2NwX2ZpbGUnKQorICAgICAgICB3aXRoIG9wZW4odGVzdF9maWxlX3BhdGgsICd3JykgYXMgdGVzdF9zY3BfZmlsZToKKyAgICAgICAgICAgIHRlc3Rfc2NwX2ZpbGUuc2VlaygyICoqIDIyIC0gMSkKKyAgICAgICAgICAgIHRlc3Rfc2NwX2ZpbGUud3JpdGUob3MubGluZXNlcCkKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LmNvcHlfdG8odGVzdF9maWxlX3BhdGgsICcvdG1wL3Rlc3Rfc2NwX2ZpbGUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gIkZpbGUgY291bGQgbm90IGJlIGNvcGllZC4gT3V0cHV0OiAlcyIgJSBvdXRwdXQpCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oImxzIC1sYSAvdG1wL3Rlc3Rfc2NwX2ZpbGUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gIlNDUCB0ZXN0IGZhaWxlZCIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9za2VsZXRvbmluaXQucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9za2VsZXRvbmluaXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IwY2I5YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NrZWxldG9uaW5pdC5weQpAQCAtMCwwICsxLDI5IEBACisjIFRoaXMgdGVzdCBzaG91bGQgY292ZXIgaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3RyX3Nob3dfY2FzZS5jZ2k/Y2FzZV9pZD0yODQgdGVzdGNhc2UKKyMgTm90ZSB0aGF0IHRoZSBpbWFnZSB1bmRlciB0ZXN0IG11c3QgaGF2ZSBtZXRhLXNrZWxldG9uIGxheWVyIGluIGJibGF5ZXJzIGFuZCBJTUFHRV9JTlNUQUxMX2FwcGVuZCA9ICIgc2VydmljZSIgaW4gbG9jYWwuY29uZgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoInNlcnZpY2UiKToKKyAgICAgICAgc2tpcE1vZHVsZSgiTm8gc2VydmljZSBwYWNrYWdlIGluIGltYWdlIikKKworCitjbGFzcyBTa2VsZXRvbkJhc2ljVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgQHVuaXR0ZXN0LnNraXBJZigic3lzdGVtZCIgPT0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciIsIEZhbHNlKSwgIk5vdCBhcHByb3BpYXRlIGZvciBzeXN0ZW1kIGltYWdlIikKKyAgICBkZWYgdGVzdF9za2VsZXRvbl9hdmFpbGFiaWxpdHkoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2xzIC9ldGMvaW5pdC5kL3NrZWxldG9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJza2VsZXRvbiBpbml0IHNjcmlwdCBub3QgZm91bmQuIE91dHB1dDpcbiVzICIgJSBvdXRwdXQpCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSAgc2VsZi50YXJnZXQucnVuKCdscyAvdXNyL3NiaW4vc2tlbGV0b24tdGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2cgPSAic2tlbGV0b24tdGVzdCBub3QgZm91bmQuIE91dHB1dDpcbiVzIiAlIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgyODQpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc2tlbGV0b25fYXZhaWxhYmlsaXR5JykKKyAgICBAdW5pdHRlc3Quc2tpcElmKCJzeXN0ZW1kIiA9PSBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyIiwgRmFsc2UpLCAiTm90IGFwcHJvcGlhdGUgZm9yIHN5c3RlbWQgaW1hZ2UiKQorICAgIGRlZiB0ZXN0X3NrZWxldG9uX3NjcmlwdChzZWxmKToKKyAgICAgICAgb3V0cHV0MSA9IHNlbGYudGFyZ2V0LnJ1bigiL2V0Yy9pbml0LmQvc2tlbGV0b24gc3RhcnQiKVsxXQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQyKSA9IHNlbGYudGFyZ2V0LnJ1bihvZVJ1bnRpbWVUZXN0LnBzY21kICsgJyB8IGdyZXAgW3Nda2VsZXRvbi10ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJTa2VsZXRvbiBzY3JpcHQgY291bGQgbm90IGJlIHN0YXJ0ZWQ6XG4lc1xuJXMiICUgKG91dHB1dDEsIG91dHB1dDIpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc21hcnQucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9zbWFydC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDE2NjhkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc21hcnQucHkKQEAgLTAsMCArMSwxNzUgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHJlCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorZnJvbSBvZXFhLnV0aWxzLmh0dHBzZXJ2ZXIgaW1wb3J0IEhUVFBTZXJ2aWNlCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInBhY2thZ2UtbWFuYWdlbWVudCIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgcGFja2FnZSBtYW5hZ2VtZW50IGZlYXR1cmUiKQorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoInNtYXJ0Iik6CisgICAgICAgIHNraXBNb2R1bGUoIkltYWdlIGRvZXNuJ3QgaGF2ZSBzbWFydCBpbnN0YWxsZWQiKQorICAgIGlmICJwYWNrYWdlX3JwbSIgIT0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiUEFDS0FHRV9DTEFTU0VTIiwgVHJ1ZSkuc3BsaXQoKVswXToKKyAgICAgICAgc2tpcE1vZHVsZSgiUnBtIGlzIG5vdCB0aGUgcHJpbWFyeSBwYWNrYWdlIG1hbmFnZXIiKQorCitjbGFzcyBTbWFydFRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zbWFydF9oZWxwJykKKyAgICBkZWYgc21hcnQoc2VsZiwgY29tbWFuZCwgZXhwZWN0ZWQgPSAwKToKKyAgICAgICAgY29tbWFuZCA9ICdzbWFydCAlcycgJSBjb21tYW5kCisgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gc2VsZi50YXJnZXQucnVuKGNvbW1hbmQsIDE1MDApCisgICAgICAgIG1lc3NhZ2UgPSBvcy5saW5lc2VwLmpvaW4oW2NvbW1hbmQsIG91dHB1dF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCBleHBlY3RlZCwgbWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSIgaW4gb3V0cHV0LCBtZXNzYWdlKQorICAgICAgICByZXR1cm4gb3V0cHV0CisKK2NsYXNzIFNtYXJ0QmFzaWNUZXN0KFNtYXJ0VGVzdCk6CisKKyAgICBAdGVzdGNhc2UoNzE2KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3Rfc21hcnRfaGVscChzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnLS1oZWxwJykKKworICAgIEB0ZXN0Y2FzZSg5NjgpCisgICAgZGVmIHRlc3Rfc21hcnRfdmVyc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnLS12ZXJzaW9uJykKKworICAgIEB0ZXN0Y2FzZSg3MjEpCisgICAgZGVmIHRlc3Rfc21hcnRfaW5mbyhzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnaW5mbyBweXRob24tc21hcnRwbScpCisKKyAgICBAdGVzdGNhc2UoNDIxKQorICAgIGRlZiB0ZXN0X3NtYXJ0X3F1ZXJ5KHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdxdWVyeSBweXRob24tc21hcnRwbScpCisKKyAgICBAdGVzdGNhc2UoNzIwKQorICAgIGRlZiB0ZXN0X3NtYXJ0X3NlYXJjaChzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnc2VhcmNoIHB5dGhvbi1zbWFydHBtJykKKworICAgIEB0ZXN0Y2FzZSg3MjIpCisgICAgZGVmIHRlc3Rfc21hcnRfc3RhdHMoc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ3N0YXRzJykKKworY2xhc3MgU21hcnRSZXBvVGVzdChTbWFydFRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucmVwb2xpc3QgPSBbXQorICAgICAgICBzZWxmLnJlcG9fc2VydmVyID0gSFRUUFNlcnZpY2Uob2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcignREVQTE9ZX0RJUicsIFRydWUpLCBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5zZXJ2ZXJfaXApCisgICAgICAgIHNlbGYucmVwb19zZXJ2ZXIuc3RhcnQoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucmVwb19zZXJ2ZXIuc3RvcCgpCisgICAgICAgIGZvciBpIGluIHNlbGYucmVwb2xpc3Q6CisgICAgICAgICAgICBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5ydW4oJ3NtYXJ0IGNoYW5uZWwgLXkgLS1yZW1vdmUgJytzdHIoaSkpCisKKyAgICBAdGVzdGNhc2UoMTE0MykKKyAgICBkZWYgdGVzdF9zbWFydF9jaGFubmVsKHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsJywgMSkKKworICAgIEB0ZXN0Y2FzZSg3MTkpCisgICAgZGVmIHRlc3Rfc21hcnRfY2hhbm5lbF9hZGQoc2VsZik6CisgICAgICAgIGltYWdlX3BrZ3R5cGUgPSBzZWxmLnRjLmQuZ2V0VmFyKCdJTUFHRV9QS0dUWVBFJywgVHJ1ZSkKKyAgICAgICAgZGVwbG95X3VybCA9ICdodHRwOi8vJXM6JXMvJXMnICUoc2VsZi50YXJnZXQuc2VydmVyX2lwLCBzZWxmLnJlcG9fc2VydmVyLnBvcnQsIGltYWdlX3BrZ3R5cGUpCisgICAgICAgIHBrZ2FyY2hzID0gc2VsZi50Yy5kLmdldFZhcignUEFDS0FHRV9BUkNIUycsIFRydWUpLnJlcGxhY2UoIi0iLCJfIikuc3BsaXQoKQorICAgICAgICBmb3IgYXJjaCBpbiBvcy5saXN0ZGlyKCclcy8lcycgJSAoc2VsZi5yZXBvX3NlcnZlci5yb290X2RpciwgaW1hZ2VfcGtndHlwZSkpOgorICAgICAgICAgICAgaWYgYXJjaCBpbiBwa2dhcmNoczoKKyAgICAgICAgICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC15IC0tYWRkIHthfSB0eXBlPXJwbS1tZCBiYXNldXJsPXt1fS97YX0nLmZvcm1hdChhPWFyY2gsIHU9ZGVwbG95X3VybCkpCisgICAgICAgICAgICAgICAgc2VsZi5yZXBvbGlzdC5hcHBlbmQoYXJjaCkKKyAgICAgICAgc2VsZi5zbWFydCgndXBkYXRlJykKKworICAgIEB0ZXN0Y2FzZSg5NjkpCisgICAgZGVmIHRlc3Rfc21hcnRfY2hhbm5lbF9oZWxwKHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0taGVscCcpCisKKyAgICBAdGVzdGNhc2UoOTcwKQorICAgIGRlZiB0ZXN0X3NtYXJ0X2NoYW5uZWxfbGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnY2hhbm5lbCAtLWxpc3QnKQorCisgICAgQHRlc3RjYXNlKDk3MSkKKyAgICBkZWYgdGVzdF9zbWFydF9jaGFubmVsX3Nob3coc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1zaG93JykKKworICAgIEB0ZXN0Y2FzZSg3MTcpCisgICAgZGVmIHRlc3Rfc21hcnRfY2hhbm5lbF9ycG1zeXMoc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1zaG93IHJwbXN5cycpCisgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1kaXNhYmxlIHJwbXN5cycpCisgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1lbmFibGUgcnBtc3lzJykKKworICAgIEB0ZXN0Y2FzZSgxMTQ0KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NtYXJ0X2NoYW5uZWxfYWRkJykKKyAgICBkZWYgdGVzdF9zbWFydF9pbnN0YWxsKHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdyZW1vdmUgLXkgcHNwbGFzaC1kZWZhdWx0JykKKyAgICAgICAgc2VsZi5zbWFydCgnaW5zdGFsbCAteSBwc3BsYXNoLWRlZmF1bHQnKQorCisgICAgQHRlc3RjYXNlKDcyOCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zbWFydF9pbnN0YWxsJykKKyAgICBkZWYgdGVzdF9zbWFydF9pbnN0YWxsX2RlcGVuZGVuY3koc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ3JlbW92ZSAteSBwc3BsYXNoJykKKyAgICAgICAgc2VsZi5zbWFydCgnaW5zdGFsbCAteSBwc3BsYXNoLWRlZmF1bHQnKQorCisgICAgQHRlc3RjYXNlKDcyMykKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zbWFydF9jaGFubmVsX2FkZCcpCisgICAgZGVmIHRlc3Rfc21hcnRfaW5zdGFsbF9mcm9tX2Rpc2soc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ3JlbW92ZSAteSBwc3BsYXNoLWRlZmF1bHQnKQorICAgICAgICBzZWxmLnNtYXJ0KCdkb3dubG9hZCBwc3BsYXNoLWRlZmF1bHQnKQorICAgICAgICBzZWxmLnNtYXJ0KCdpbnN0YWxsIC15IC4vcHNwbGFzaC1kZWZhdWx0KicpCisKKyAgICBAdGVzdGNhc2UoNzI1KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NtYXJ0X2NoYW5uZWxfYWRkJykKKyAgICBkZWYgdGVzdF9zbWFydF9pbnN0YWxsX2Zyb21faHR0cChzZWxmKToKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5zbWFydCgnZG93bmxvYWQgLS11cmxzIHBzcGxhc2gtZGVmYXVsdCcpCisgICAgICAgIHVybCA9IHJlLnNlYXJjaCgnKGh0dHA6Ly8uKi9wc3BsYXNoLWRlZmF1bHQuKlwucnBtKScsIG91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVybCwgbXNnPSJDb3Vsbid0IGZpbmQgZG93bmxvYWQgdXJsIGluICVzIiAlIG91dHB1dCkKKyAgICAgICAgc2VsZi5zbWFydCgncmVtb3ZlIC15IHBzcGxhc2gtZGVmYXVsdCcpCisgICAgICAgIHNlbGYuc21hcnQoJ2luc3RhbGwgLXkgJXMnICUgdXJsLmdyb3VwKDApKQorCisgICAgQHRlc3RjYXNlKDcyOSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zbWFydF9pbnN0YWxsJykKKyAgICBkZWYgdGVzdF9zbWFydF9yZWluc3RhbGwoc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ3JlaW5zdGFsbCAteSBwc3BsYXNoLWRlZmF1bHQnKQorCisgICAgQHRlc3RjYXNlKDcyNykKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zbWFydF9jaGFubmVsX2FkZCcpCisgICAgZGVmIHRlc3Rfc21hcnRfcmVtb3RlX3JlcG8oc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ3VwZGF0ZScpCisgICAgICAgIHNlbGYuc21hcnQoJ2luc3RhbGwgLXkgcHNwbGFzaCcpCisgICAgICAgIHNlbGYuc21hcnQoJ3JlbW92ZSAteSBwc3BsYXNoJykKKworICAgIEB0ZXN0Y2FzZSg3MjYpCisgICAgZGVmIHRlc3Rfc21hcnRfbG9jYWxfZGlyKHNlbGYpOgorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ21rZGlyIC90bXAvbXlycG1kaXInKQorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tYWRkIG15cnBtZGlyIHR5cGU9cnBtLWRpciBwYXRoPS90bXAvbXlycG1kaXIgLXknKQorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ2NkIC90bXAvbXlycG1kaXInKQorICAgICAgICBzZWxmLnNtYXJ0KCdkb3dubG9hZCBwc3BsYXNoJykKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5zbWFydCgnY2hhbm5lbCAtLWxpc3QnKQorICAgICAgICBmb3IgaSBpbiBvdXRwdXQuc3BsaXQoIlxuIik6CisgICAgICAgICAgICBpZiAoInJwbXN5cyIgIT0gc3RyKGkpKSBhbmQgKCJteXJwbWRpciIgIT0gc3RyKGkpKToKKyAgICAgICAgICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tZGlzYWJsZSAnK3N0cihpKSkKKyAgICAgICAgc2VsZi50YXJnZXQucnVuKCdjZCAvaG9tZS9yb290JykKKyAgICAgICAgc2VsZi5zbWFydCgnaW5zdGFsbCBwc3BsYXNoJykKKyAgICAgICAgZm9yIGkgaW4gb3V0cHV0LnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgaWYgKCJycG1zeXMiICE9IHN0cihpKSkgYW5kICgibXlycG1kaXIiICE9IHN0cihpKSk6CisgICAgICAgICAgICAgICAgc2VsZi5zbWFydCgnY2hhbm5lbCAtLWVuYWJsZSAnK3N0cihpKSkKKyAgICAgICAgc2VsZi5zbWFydCgnY2hhbm5lbCAtLXJlbW92ZSBteXJwbWRpciAteScpCisgICAgICAgIHNlbGYudGFyZ2V0LnJ1bigicm0gLXJmIC90bXAvbXlycG1kaXIiKQorCisgICAgQHRlc3RjYXNlKDcxOCkKKyAgICBkZWYgdGVzdF9zbWFydF9hZGRfcnBtZGlyKHNlbGYpOgorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ21rZGlyIC90bXAvbXlycG1kaXInKQorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tYWRkIG15cnBtZGlyIHR5cGU9cnBtLWRpciBwYXRoPS90bXAvbXlycG1kaXIgLXknKQorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tZGlzYWJsZSBteXJwbWRpciAteScpCisgICAgICAgIG91dHB1dCA9IHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1zaG93IG15cnBtZGlyJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJkaXNhYmxlZCA9IHllcyIgaW4gb3V0cHV0LCBtc2c9IkZhaWxlZCB0byBkaXNhYmxlIHJwbSBkaXIiKQorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tZW5hYmxlICBteXJwbWRpciAteScpCisgICAgICAgIG91dHB1dCA9IHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1zaG93IG15cnBtZGlyJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgiZGlzYWJsZWQgPSB5ZXMiIGluIG91dHB1dCwgbXNnPSJGYWlsZWQgdG8gZW5hYmxlIHJwbSBkaXIiKQorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tcmVtb3ZlIG15cnBtZGlyIC15JykKKyAgICAgICAgc2VsZi50YXJnZXQucnVuKCJybSAtcmYgL3RtcC9teXJwbWRpciIpCisKKyAgICBAdGVzdGNhc2UoNzMxKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NtYXJ0X2NoYW5uZWxfYWRkJykKKyAgICBkZWYgdGVzdF9zbWFydF9yZW1vdmVfcGFja2FnZShzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnaW5zdGFsbCAteSBwc3BsYXNoJykKKyAgICAgICAgc2VsZi5zbWFydCgncmVtb3ZlIC15IHBzcGxhc2gnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NzaC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTc2ZDVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc3NoLnB5CkBAIC0wLDAgKzEsMTkgQEAKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCAob2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJkcm9wYmVhciIpIG9yIG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgib3BlbnNzaCIpKToKKyAgICAgICAgc2tpcE1vZHVsZSgiTm8gc3NoIHBhY2thZ2UgaW4gaW1hZ2UiKQorCitjbGFzcyBTc2hUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHRlc3RjYXNlKDIyNCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9waW5nJykKKyAgICBkZWYgdGVzdF9zc2goc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3VuYW1lIC1hJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0iU1NIIFRlc3QgZmFpbGVkOiAlcyIgJSBvdXRwdXQpCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2NhdCAvZXRjL21hc3RlcmltYWdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDEsIG1zZz0iVGhpcyBpc24ndCB0aGUgcmlnaHQgaW1hZ2UgIC0gL2V0Yy9tYXN0ZXJpbWFnZSBzaG91bGRuJ3QgYmUgaGVyZSAlcyIgJSBvdXRwdXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9zeXNsb2cucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9zeXNsb2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYwMWRkOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3N5c2xvZy5weQpAQCAtMCwwICsxLDQ1IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCAob2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJidXN5Ym94LXN5c2xvZyIpIG9yIG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgic3lza2xvZ2QiKSk6CisgICAgICAgIHNraXBNb2R1bGUoIk5vIHN5c2xvZyBwYWNrYWdlIGluIGltYWdlIikKKworY2xhc3MgU3lzbG9nVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEB0ZXN0Y2FzZSgyMDEpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoInRlc3Rfc3lzbG9nX2hlbHAiKQorICAgIGRlZiB0ZXN0X3N5c2xvZ19ydW5uaW5nKHNlbGYpOgorICAgICAgICAoc3RhdHVzLG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4ob2VSdW50aW1lVGVzdC5wc2NtZCArICcgfCBncmVwIC1pIFtzXXlzbG9nZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9Im5vIHN5c2xvZ2QgcHJvY2VzcywgcHMgb3V0cHV0OiAlcyIgJSBzZWxmLnRhcmdldC5ydW4ob2VSdW50aW1lVGVzdC5wc2NtZClbMV0pCisKK2NsYXNzIFN5c2xvZ1Rlc3RDb25maWcob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMTE0OSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zeXNsb2dfcnVubmluZyIpCisgICAgZGVmIHRlc3Rfc3lzbG9nX2xvZ2dlcihzZWxmKToKKyAgICAgICAgKHN0YXR1cyxvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdsb2dnZXIgZm9vYmFyICYmIHRlc3QgLWUgL3Zhci9sb2cvbWVzc2FnZXMgJiYgZ3JlcCBmb29iYXIgL3Zhci9sb2cvbWVzc2FnZXMgfHwgbG9ncmVhZCB8IGdyZXAgZm9vYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0iVGVzdCBsb2cgc3RyaW5nIG5vdCBmb3VuZCBpbiAvdmFyL2xvZy9tZXNzYWdlcy4gT3V0cHV0OiAlcyAiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExNTApCisgICAgQHNraXBVbmxlc3NQYXNzZWQoInRlc3Rfc3lzbG9nX3J1bm5pbmciKQorICAgIGRlZiB0ZXN0X3N5c2xvZ19yZXN0YXJ0KHNlbGYpOgorICAgICAgICBpZiAic3lzdGVtZCIgIT0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciIsIEZhbHNlKToKKyAgICAgICAgICAgIChzdGF0dXMsb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignL2V0Yy9pbml0LmQvc3lzbG9nIHJlc3RhcnQnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgKHN0YXR1cyxvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdzeXN0ZW1jdGwgcmVzdGFydCBzeXNsb2cuc2VydmljZScpCisKKyAgICBAdGVzdGNhc2UoMjAyKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3N5c2xvZ19yZXN0YXJ0IikKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zeXNsb2dfbG9nZ2VyIikKKyAgICBAdW5pdHRlc3Quc2tpcElmKCJzeXN0ZW1kIiA9PSBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyIiwgRmFsc2UpLCAiTm90IGFwcHJvcGlhdGUgZm9yIHN5c3RlbWQgaW1hZ2UiKQorICAgIEB1bml0dGVzdC5za2lwSWYob2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJzeXNrbG9nZCIpIG9yIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoImJ1c3lib3giKSwgIk5vbi1idXN5Ym94IHN5c2xvZyIpCisgICAgZGVmIHRlc3Rfc3lzbG9nX3N0YXJ0dXBfY29uZmlnKHNlbGYpOgorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ2VjaG8gIkxPR0ZJTEU9L3Zhci9sb2cvdGVzdCIgPj4gL2V0Yy9zeXNsb2ctc3RhcnR1cC5jb25mJykKKyAgICAgICAgKHN0YXR1cyxvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCcvZXRjL2luaXQuZC9zeXNsb2cgcmVzdGFydCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IkNvdWxkIG5vdCByZXN0YXJ0IHN5c2xvZyBzZXJ2aWNlLiBTdGF0dXMgYW5kIG91dHB1dDogJXMgYW5kICVzIiAlIChzdGF0dXMsb3V0cHV0KSkKKyAgICAgICAgKHN0YXR1cyxvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdsb2dnZXIgZm9vYmFyICYmIGdyZXAgZm9vYmFyIC92YXIvbG9nL3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJUZXN0IGxvZyBzdHJpbmcgbm90IGZvdW5kLiBPdXRwdXQ6ICVzICIgJSBvdXRwdXQpCisgICAgICAgIHNlbGYudGFyZ2V0LnJ1bigic2VkIC1pICdzI0xPR0ZJTEU9L3Zhci9sb2cvdGVzdCMjJyAvZXRjL3N5c2xvZy1zdGFydHVwLmNvbmYiKQorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJy9ldGMvaW5pdC5kL3N5c2xvZyByZXN0YXJ0JykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3N5c3RlbWQucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9zeXN0ZW1kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NDM5NGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9zeXN0ZW1kLnB5CkBAIC0wLDAgKzEsMTAxIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCByZQorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgic3lzdGVtZCIpOgorICAgICAgICAgICAgc2tpcE1vZHVsZSgidGFyZ2V0IGRvZXNuJ3QgaGF2ZSBzeXN0ZW1kIGluIERJU1RST19GRUFUVVJFUyIpCisgICAgaWYgInN5c3RlbWQiICE9IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIlZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIiLCBUcnVlKToKKyAgICAgICAgICAgIHNraXBNb2R1bGUoInN5c3RlbWQgaXMgbm90IHRoZSBpbml0IG1hbmFnZXIgZm9yIHRoaXMgaW1hZ2UiKQorCisKK2NsYXNzIFN5c3RlbWRUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgZGVmIHN5c3RlbWN0bChzZWxmLCBhY3Rpb24gPSAnJywgdGFyZ2V0ID0gJycsIGV4cGVjdGVkID0gMCwgdmVyYm9zZSA9IEZhbHNlKToKKyAgICAgICAgY29tbWFuZCA9ICdzeXN0ZW1jdGwgJXMgJXMnICUgKGFjdGlvbiwgdGFyZ2V0KQorICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHNlbGYudGFyZ2V0LnJ1bihjb21tYW5kKQorICAgICAgICBtZXNzYWdlID0gJ1xuJy5qb2luKFtjb21tYW5kLCBvdXRwdXRdKQorICAgICAgICBpZiBzdGF0dXMgIT0gZXhwZWN0ZWQgYW5kIHZlcmJvc2U6CisgICAgICAgICAgICBtZXNzYWdlICs9IHNlbGYudGFyZ2V0LnJ1bignc3lzdGVtY3RsIHN0YXR1cyAtLWZ1bGwgJXMnICUgdGFyZ2V0KVsxXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgZXhwZWN0ZWQsIG1lc3NhZ2UpCisgICAgICAgIHJldHVybiBvdXRwdXQKKworCitjbGFzcyBTeXN0ZW1kQmFzaWNUZXN0cyhTeXN0ZW1kVGVzdCk6CisKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3N5c3RlbWRfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCctLXZlcnNpb24nKQorCisgICAgQHRlc3RjYXNlKDU1MSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zeXN0ZW1fYmFzaWMnKQorICAgIGRlZiB0ZXN0X3N5c3RlbWRfbGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5zeXN0ZW1jdGwoJ2xpc3QtdW5pdC1maWxlcycpCisKKyAgICBkZWYgc2V0dGxlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQmxvY2sgdW50aWwgc3lzdGVtZCBoYXMgZmluaXNoZWQgYWN0aXZhdGluZyBhbnkgdW5pdHMgYmVpbmcgYWN0aXZhdGVkLAorICAgICAgICBvciB1bnRpbCB0d28gbWludXRlcyBoYXMgZWxhcHNlZC4KKworICAgICAgICBSZXR1cm5zIGEgdHVwbGUsIGVpdGhlciAoVHJ1ZSwgJycpIGlmIGFsbCB1bml0cyBoYXZlIGZpbmlzaGVkCisgICAgICAgIGFjdGl2YXRpbmcsIG9yIChGYWxzZSwgbWVzc2FnZSBzdHJpbmcpIGlmIHRoZXJlIGFyZSBzdGlsbCB1bml0cworICAgICAgICBhY3RpdmF0aW5nIChnZW5lcmFsbHksIGZhaWxpbmcgdW5pdHMgdGhhdCByZXN0YXJ0KS4KKyAgICAgICAgIiIiCisgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSArICg2MCAqIDIpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHNlbGYudGFyZ2V0LnJ1bignc3lzdGVtY3RsIC0tc3RhdGU9YWN0aXZhdGluZycpCisgICAgICAgICAgICBpZiAiMCBsb2FkZWQgdW5pdHMgbGlzdGVkIiBpbiBvdXRwdXQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIChUcnVlLCAnJykKKyAgICAgICAgICAgIGlmIHRpbWUudGltZSgpID49IGVuZHRpbWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIChGYWxzZSwgb3V0cHV0KQorICAgICAgICAgICAgdGltZS5zbGVlcCgxMCkKKworICAgIEB0ZXN0Y2FzZSg1NTApCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3lzdGVtZF9iYXNpYycpCisgICAgZGVmIHRlc3Rfc3lzdGVtZF9mYWlsZWQoc2VsZik6CisgICAgICAgIHNldHRsZWQsIG91dHB1dCA9IHNlbGYuc2V0dGxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNldHRsZWQsIG1zZz0iVGltZWQgb3V0IHdhaXRpbmcgZm9yIHN5c3RlbWQgdG8gc2V0dGxlOlxuIiArIG91dHB1dCkKKworICAgICAgICBvdXRwdXQgPSBzZWxmLnN5c3RlbWN0bCgnbGlzdC11bml0cycsICctLWZhaWxlZCcpCisgICAgICAgIG1hdGNoID0gcmUuc2VhcmNoKCIwIGxvYWRlZCB1bml0cyBsaXN0ZWQiLCBvdXRwdXQpCisgICAgICAgIGlmIG5vdCBtYXRjaDoKKyAgICAgICAgICAgIG91dHB1dCArPSBzZWxmLnN5c3RlbWN0bCgnc3RhdHVzIC0tZnVsbCAtLWZhaWxlZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRjaCwgbXNnPSJTb21lIHN5c3RlbWQgdW5pdHMgZmFpbGVkOlxuJXMiICUgb3V0cHV0KQorCisKK2NsYXNzIFN5c3RlbWRTZXJ2aWNlVGVzdHMoU3lzdGVtZFRlc3QpOgorCisgICAgZGVmIGNoZWNrX2Zvcl9hdmFoaShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaGFzUGFja2FnZSgnYXZhaGktZGFlbW9uJyk6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiVGVzdGNhc2UgZGVwZW5kZW5jeSBub3QgbWV0OiBuZWVkIGF2YWhpLWRhZW1vbiBpbnN0YWxsZWQgb24gdGFyZ2V0IikKKworICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3N5c3RlbWRfYmFzaWMnKQorICAgIGRlZiB0ZXN0X3N5c3RlbWRfc3RhdHVzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Zvcl9hdmFoaSgpCisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCdzdGF0dXMgLS1mdWxsJywgJ2F2YWhpLWRhZW1vbi5zZXJ2aWNlJykKKworICAgIEB0ZXN0Y2FzZSg2OTUpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3lzdGVtZF9zdGF0dXMnKQorICAgIGRlZiB0ZXN0X3N5c3RlbWRfc3RvcF9zdGFydChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mb3JfYXZhaGkoKQorICAgICAgICBzZWxmLnN5c3RlbWN0bCgnc3RvcCcsICdhdmFoaS1kYWVtb24uc2VydmljZScpCisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCdpcy1hY3RpdmUnLCAnYXZhaGktZGFlbW9uLnNlcnZpY2UnLCBleHBlY3RlZD0zLCB2ZXJib3NlPVRydWUpCisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCdzdGFydCcsJ2F2YWhpLWRhZW1vbi5zZXJ2aWNlJykKKyAgICAgICAgc2VsZi5zeXN0ZW1jdGwoJ2lzLWFjdGl2ZScsICdhdmFoaS1kYWVtb24uc2VydmljZScsIHZlcmJvc2U9VHJ1ZSkKKworICAgIEB0ZXN0Y2FzZSg2OTYpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3lzdGVtZF9iYXNpYycpCisgICAgZGVmIHRlc3Rfc3lzdGVtZF9kaXNhYmxlX2VuYWJsZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mb3JfYXZhaGkoKQorICAgICAgICBzZWxmLnN5c3RlbWN0bCgnZGlzYWJsZScsICdhdmFoaS1kYWVtb24uc2VydmljZScpCisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCdpcy1lbmFibGVkJywgJ2F2YWhpLWRhZW1vbi5zZXJ2aWNlJywgZXhwZWN0ZWQ9MSkKKyAgICAgICAgc2VsZi5zeXN0ZW1jdGwoJ2VuYWJsZScsICdhdmFoaS1kYWVtb24uc2VydmljZScpCisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCdpcy1lbmFibGVkJywgJ2F2YWhpLWRhZW1vbi5zZXJ2aWNlJykKKworY2xhc3MgU3lzdGVtZEpvdXJuYWxUZXN0cyhTeXN0ZW1kVGVzdCk6CisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9zeXN0ZW1kX2pvdXJuYWwoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2pvdXJuYWxjdGwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgb3V0cHV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvdm5jLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvdm5jLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMWRlZmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS92bmMucHkKQEAgLTAsMCArMSwyMCBAQAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZVVubGVzcworZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKK2ltcG9ydCByZQorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBza2lwTW9kdWxlVW5sZXNzKG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgneDExdm5jJyksICJObyB4MTF2bmMgcGFja2FnZSBpbiBpbWFnZSIpCisKK2NsYXNzIFZOQ1Rlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMjEzKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3Rfdm5jKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCd4MTF2bmMgLWRpc3BsYXkgOjAgLWJnIC1vIHgxMXZuYy5sb2cnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJ4MTF2bmMgc2VydmVyIGZhaWxlZCB0byBzdGFydDogJXMiICUgb3V0cHV0KQorICAgICAgICBwb3J0ID0gcmUuc2VhcmNoKCdQT1JUPVswLTldKicsIG91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnQsIG1zZz0iTGlzdGVuaW5nIHBvcnQgbm90IHNwZWNpZmllZCBpbiBjb21tYW5kIG91dHB1dDogJXMiICVvdXRwdXQpCisKKyAgICAgICAgdm5jcG9ydCA9IHBvcnQuZ3JvdXAoMCkuc3BsaXQoJz0nKVsxXQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCduZXRzdGF0IC1udGwgfCBncmVwICI6JXMiJyAlIHZuY3BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IngxMXZuYyBzZXJ2ZXIgbm90IHJ1bm5pbmcgb24gcG9ydCAlc1xuXG4lcyIgJSAodm5jcG9ydCwgc2VsZi50YXJnZXQucnVuKCduZXRzdGF0IC1udGw7IGNhdCB4MTF2bmMubG9nJylbMV0pKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUveDMybGliLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUveDMybGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNWUyMTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS94MzJsaWIucHkKQEAgLTAsMCArMSwxOCBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICAgICAgI2NoZWNrIGlmIERFRkFVTFRUVU5FIGlzIHNldCBhbmQgaXQncyB2YWx1ZSBpczogeDg2LTY0LXgzMgorICAgICAgICBkZWZhdWx0dHVuZSA9IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIkRFRkFVTFRUVU5FIiwgVHJ1ZSkKKyAgICAgICAgaWYgIng4Ni02NC14MzIiIG5vdCBpbiBkZWZhdWx0dHVuZToKKyAgICAgICAgICAgIHNraXBNb2R1bGUoIkRFRkFVTFRUVU5FIGlzIG5vdCBzZXQgdG8geDg2LTY0LXgzMiIpCisKK2NsYXNzIFgzMmxpYlRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMjgxKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3NzaCIpCisgICAgZGVmIHRlc3RfeDMyX2ZpbGUoc2VsZik6CisgICAgICAgIHN0YXR1czEgPSBzZWxmLnRhcmdldC5ydW4oInJlYWRlbGYgLWggL2Jpbi9scyB8IGdyZXAgQ2xhc3MgfCBncmVwIEVMRjMyIilbMF0KKyAgICAgICAgc3RhdHVzMiA9IHNlbGYudGFyZ2V0LnJ1bigicmVhZGVsZiAtaCAvYmluL2xzIHwgZ3JlcCBNYWNoaW5lIHwgZ3JlcCBYODYtNjQiKVswXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RhdHVzMSA9PSAwIGFuZCBzdGF0dXMyID09IDAsIG1zZz0iL2Jpbi9scyBpc24ndCBhbiBYODYtNjQgRUxGMzIgYmluYXJ5LiByZWFkZWxmIHNheXM6ICVzIiAlIHNlbGYudGFyZ2V0LnJ1bigicmVhZGVsZiAtaCAvYmluL2xzIilbMV0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS94b3JnLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUveG9yZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmJjZDM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUveG9yZy5weQpAQCAtMCwwICsxLDE2IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoIngxMS1iYXNlIik6CisgICAgICAgICAgICBza2lwTW9kdWxlKCJ0YXJnZXQgZG9lc24ndCBoYXZlIHgxMSBpbiBJTUFHRV9GRUFUVVJFUyIpCisKKworY2xhc3MgWG9yZ1Rlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMTE1MSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3hvcmdfcnVubmluZyhzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihvZVJ1bnRpbWVUZXN0LnBzY21kICsgJyB8ICBncmVwIC12IHhpbml0IHwgZ3JlcCBbWF1vcmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJYb3JnIGRvZXMgbm90IGFwcGVhciB0byBiZSBydW5uaW5nICVzIiAlIHNlbGYudGFyZ2V0LnJ1bihvZVJ1bnRpbWVUZXN0LnBzY21kKVsxXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvX19pbml0X18ucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZjNmYTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMyBAQAorIyBFbmFibGUgb3RoZXIgbGF5ZXJzIHRvIGhhdmUgdGVzdHMgaW4gdGhlIHNhbWUgbmFtZWQgZGlyZWN0b3J5Citmcm9tIHBrZ3V0aWwgaW1wb3J0IGV4dGVuZF9wYXRoCitfX3BhdGhfXyA9IGV4dGVuZF9wYXRoKF9fcGF0aF9fLCBfX25hbWVfXykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRjdnMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL2J1aWxkY3ZzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MTQ2ZmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL2J1aWxkY3ZzLnB5CkBAIC0wLDAgKzEsMjUgQEAKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lU0RLVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKK2Zyb20gb2VxYS51dGlscy50YXJnZXRidWlsZCBpbXBvcnQgU0RLQnVpbGRQcm9qZWN0CisKK2NsYXNzIEJ1aWxkQ3ZzVGVzdChvZVNES1Rlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdCA9IFNES0J1aWxkUHJvamVjdChvZVNES1Rlc3QudGMuc2RrdGVzdGRpciArICIvY3ZzLyIsIG9lU0RLVGVzdC50Yy5zZGtlbnYsIG9lU0RLVGVzdC50Yy5kLAorICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9mdHAuZ251Lm9yZy9ub24tZ251L2N2cy9zb3VyY2UvZmVhdHVyZS8xLjEyLjEzL2N2cy0xLjEyLjEzLnRhci5iejIiKQorICAgICAgICBzZWxmLnByb2plY3QuZG93bmxvYWRfYXJjaGl2ZSgpCisKKyAgICBkZWYgdGVzdF9jdnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wcm9qZWN0LnJ1bl9jb25maWd1cmUoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBjb25maWd1cmUgZmFpbGVkIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fbWFrZSgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIG1ha2UgZmFpbGVkIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5faW5zdGFsbCgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIG1ha2UgaW5zdGFsbCBmYWlsZWQiKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdC5jbGVhbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL2J1aWxkaXB0YWJsZXMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL2J1aWxkaXB0YWJsZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYyZTUzMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRpcHRhYmxlcy5weQpAQCAtMCwwICsxLDI2IEBACitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVNES1Rlc3QKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCitmcm9tIG9lcWEudXRpbHMudGFyZ2V0YnVpbGQgaW1wb3J0IFNES0J1aWxkUHJvamVjdAorCisKK2NsYXNzIEJ1aWxkSXB0YWJsZXNUZXN0KG9lU0RLVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9qZWN0ID0gU0RLQnVpbGRQcm9qZWN0KG9lU0RLVGVzdC50Yy5zZGt0ZXN0ZGlyICsgIi9pcHRhYmxlcy8iLCBvZVNES1Rlc3QudGMuc2RrZW52LCBvZVNES1Rlc3QudGMuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vbmV0ZmlsdGVyLm9yZy9wcm9qZWN0cy9pcHRhYmxlcy9maWxlcy9pcHRhYmxlcy0xLjQuMTMudGFyLmJ6MiIpCisgICAgICAgIHNlbGYucHJvamVjdC5kb3dubG9hZF9hcmNoaXZlKCkKKworICAgIGRlZiB0ZXN0X2lwdGFibGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fY29uZmlndXJlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgY29uZmlndXJlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX21ha2UoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX2luc3RhbGwoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGluc3RhbGwgZmFpbGVkIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2plY3QuY2xlYW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3Nkay9idWlsZHN1ZG9rdS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRzdWRva3UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVhNzdjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRzdWRva3UucHkKQEAgLTAsMCArMSwyNiBAQAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VTREtUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorZnJvbSBvZXFhLnV0aWxzLnRhcmdldGJ1aWxkIGltcG9ydCBTREtCdWlsZFByb2plY3QKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lU0RLVGVzdC5oYXNQYWNrYWdlKCJndGtcKyIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgZ3RrKyBpbiBtYW5pZmVzdCIpCisKK2NsYXNzIFN1ZG9rdVRlc3Qob2VTREtUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2plY3QgPSBTREtCdWlsZFByb2plY3Qob2VTREtUZXN0LnRjLnNka3Rlc3RkaXIgKyAiL3N1ZG9rdS8iLCBvZVNES1Rlc3QudGMuc2RrZW52LCBvZVNES1Rlc3QudGMuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3N1ZG9rdS1zYXZhbnQvc3Vkb2t1LXNhdmFudC9zdWRva3Utc2F2YW50LTEuMy9zdWRva3Utc2F2YW50LTEuMy50YXIuYnoyIikKKyAgICAgICAgc2VsZi5wcm9qZWN0LmRvd25sb2FkX2FyY2hpdmUoKQorCisgICAgZGVmIHRlc3Rfc3Vkb2t1KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fY29uZmlndXJlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgY29uZmlndXJlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX21ha2UoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGZhaWxlZCIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9qZWN0LmNsZWFuKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvZ2NjLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3Nkay9nY2MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc5OTRiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvZ2NjLnB5CkBAIC0wLDAgKzEsMzYgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVNES1Rlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIG1hY2hpbmUgPSBvZVNES1Rlc3QudGMuZC5nZXRWYXIoIk1BQ0hJTkUiLCBUcnVlKQorICAgIGlmIG5vdCBvZVNES1Rlc3QuaGFzSG9zdFBhY2thZ2UoInBhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi0iICsgbWFjaGluZSk6CisgICAgICAgIHNraXBNb2R1bGUoIlNESyBkb2Vzbid0IGNvbnRhaW4gYSBjcm9zcy1jYW5hZGlhbiB0b29sY2hhaW4iKQorCisKK2NsYXNzIEdjY0NvbXBpbGVUZXN0KG9lU0RLVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gWyd0ZXN0LmMnLCAndGVzdC5jcHAnLCAndGVzdG1ha2VmaWxlJ106CisgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUob3MucGF0aC5qb2luKHNlbGYudGMuZmlsZXNkaXIsIGYpLCBzZWxmLnRjLnNka3Rlc3RkaXIgKyBmKQorCisgICAgZGVmIHRlc3RfZ2NjX2NvbXBpbGUoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bignJENDICVzL3Rlc3QuYyAtbyAlcy90ZXN0IC1sbScgJSAoc2VsZi50Yy5zZGt0ZXN0ZGlyLCBzZWxmLnRjLnNka3Rlc3RkaXIpKQorCisgICAgZGVmIHRlc3RfZ3BwX2NvbXBpbGUoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bignJENYWCAlcy90ZXN0LmMgLW8gJXMvdGVzdCAtbG0nICUgKHNlbGYudGMuc2RrdGVzdGRpciwgc2VsZi50Yy5zZGt0ZXN0ZGlyKSkKKworICAgIGRlZiB0ZXN0X2dwcDJfY29tcGlsZShzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuKCckQ1hYICVzL3Rlc3QuY3BwIC1vICVzL3Rlc3QgLWxtJyAlIChzZWxmLnRjLnNka3Rlc3RkaXIsIHNlbGYudGMuc2RrdGVzdGRpcikpCisKKyAgICBkZWYgdGVzdF9tYWtlKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW4oJ2NkICVzOyBtYWtlIC1mIHRlc3RtYWtlZmlsZScgJSBzZWxmLnRjLnNka3Rlc3RkaXIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgZmlsZXMgPSBbc2VsZi50Yy5zZGt0ZXN0ZGlyICsgZiBmb3IgZiBpbiBbJ3Rlc3QuYycsICd0ZXN0LmNwcCcsICd0ZXN0Lm8nLCAndGVzdCcsICd0ZXN0bWFrZWZpbGUnXV0KKyAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoZikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvcGVybC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvcGVybC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWY0MjJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3Nkay9wZXJsLnB5CkBAIC0wLDAgKzEsMjggQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVNES1Rlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVNES1Rlc3QuaGFzSG9zdFBhY2thZ2UoIm5hdGl2ZXNkay1wZXJsIik6CisgICAgICAgIHNraXBNb2R1bGUoIk5vIHBlcmwgcGFja2FnZSBpbiB0aGUgU0RLIikKKworCitjbGFzcyBQZXJsVGVzdChvZVNES1Rlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIGZvciBmIGluIFsndGVzdC5wbCddOgorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbihzZWxmLnRjLmZpbGVzZGlyLCBmKSwgc2VsZi50Yy5zZGt0ZXN0ZGlyICsgZikKKyAgICAgICAgc2VsZi50ZXN0ZmlsZSA9IHNlbGYudGMuc2RrdGVzdGRpciArICJ0ZXN0LnBsIgorCisgICAgZGVmIHRlc3RfcGVybF9leGlzdHMoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bignd2hpY2ggcGVybCcpCisKKyAgICBkZWYgdGVzdF9wZXJsX3dvcmtzKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW4oJ3BlcmwgJXMvdGVzdC5wbCcgJSBzZWxmLnRjLnNka3Rlc3RkaXIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKCIlcy90ZXN0LnBsIiAlIHNlbGYudGMuc2RrdGVzdGRpcikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvcHl0aG9uLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3Nkay9weXRob24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk2ZmFiNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvcHl0aG9uLnB5CkBAIC0wLDAgKzEsMzIgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVNES1Rlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVNES1Rlc3QuaGFzSG9zdFBhY2thZ2UoIm5hdGl2ZXNkay1weXRob24iKToKKyAgICAgICAgc2tpcE1vZHVsZSgiTm8gcHl0aG9uIHBhY2thZ2UgaW4gdGhlIFNESyIpCisKKworY2xhc3MgUHl0aG9uVGVzdChvZVNES1Rlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIGZvciBmIGluIFsndGVzdC5weSddOgorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbihzZWxmLnRjLmZpbGVzZGlyLCBmKSwgc2VsZi50Yy5zZGt0ZXN0ZGlyICsgZikKKworICAgIGRlZiB0ZXN0X3B5dGhvbl9leGlzdHMoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bignd2hpY2ggcHl0aG9uJykKKworICAgIGRlZiB0ZXN0X3B5dGhvbl9zdGRvdXQoc2VsZik6CisgICAgICAgIG91dHB1dCA9IHNlbGYuX3J1bigncHl0aG9uICVzL3Rlc3QucHknICUgc2VsZi50Yy5zZGt0ZXN0ZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5zdHJpcCgpLCAidGhlIHZhbHVlIG9mIGEgaXMgMC4wMSIsIG1zZz0iSW5jb3JyZWN0IG91dHB1dDogJXMiICUgb3V0cHV0KQorCisgICAgZGVmIHRlc3RfcHl0aG9uX3Rlc3RmaWxlKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW4oJ2xzIC90bXAvdGVzdGZpbGUucHl0aG9uJykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgorICAgICAgICBiYi51dGlscy5yZW1vdmUoIiVzL3Rlc3QucHkiICUgc2VsZi50Yy5zZGt0ZXN0ZGlyKQorICAgICAgICBiYi51dGlscy5yZW1vdmUoIi90bXAvdGVzdGZpbGUucHl0aG9uIikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWQ5NTEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMiBAQAorZnJvbSBwa2d1dGlsIGltcG9ydCBleHRlbmRfcGF0aAorX19wYXRoX18gPSBleHRlbmRfcGF0aChfX3BhdGhfXywgX19uYW1lX18pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvX3NzdGF0ZXRlc3RzX25vYXV0by5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9fc3N0YXRldGVzdHNfbm9hdXRvLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjOWFlN2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvX3NzdGF0ZXRlc3RzX25vYXV0by5weQpAQCAtMCwwICsxLDk1IEBACitpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBnZXRfdGVzdF9sYXllcgorZnJvbSBvZXFhLnNlbGZ0ZXN0LnNzdGF0ZSBpbXBvcnQgU1N0YXRlQmFzZQorCisKK2NsYXNzIFJlYnVpbGRGcm9tU1N0YXRlKFNTdGF0ZUJhc2UpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYuYnVpbGRkaXIgPSBvcy5wYXRoLmpvaW4ob3MuZW52aXJvbi5nZXQoJ0JVSUxERElSJykpCisKKyAgICBkZWYgZ2V0X2RlcF90YXJnZXRzKHNlbGYsIHByaW1hcnlfdGFyZ2V0cyk6CisgICAgICAgIGZvdW5kX3RhcmdldHMgPSBbXQorICAgICAgICBiaXRiYWtlKCItZyAiICsgJyAnLmpvaW4obWFwKHN0ciwgcHJpbWFyeV90YXJnZXRzKSkpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3BuLWJ1aWxkbGlzdCcpLCAncicpIGFzIHBuZmlsZToKKyAgICAgICAgICAgIGZvdW5kX3RhcmdldHMgPSBwbmZpbGUucmVhZCgpLnNwbGl0bGluZXMoKQorICAgICAgICByZXR1cm4gZm91bmRfdGFyZ2V0cworCisgICAgZGVmIGNvbmZpZ3VyZV9idWlsZGRpcihzZWxmLCBidWlsZGRpcik6CisgICAgICAgIG9zLm1rZGlyKGJ1aWxkZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKGJ1aWxkZGlyKQorICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICdjb25mJykpCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShvcy5wYXRoLmpvaW4ob3MuZW52aXJvbi5nZXQoJ0JVSUxERElSJyksICdjb25mL2xvY2FsLmNvbmYnKSwgb3MucGF0aC5qb2luKGJ1aWxkZGlyLCAnY29uZi9sb2NhbC5jb25mJykpCisgICAgICAgIGNvbmZpZyA9IHt9CisgICAgICAgIGNvbmZpZ1snZGVmYXVsdF9zc3RhdGVfZGlyJ10gPSAiU1NUQVRFX0RJUiA/PSBcIiR7VE9QRElSfS9zc3RhdGUtY2FjaGVcIiIKKyAgICAgICAgY29uZmlnWydudWxsX3NzdGF0ZV9taXJyb3JzJ10gPSAiU1NUQVRFX01JUlJPUlMgPSBcIlwiIgorICAgICAgICBjb25maWdbJ2RlZmF1bHRfdG1wX2RpciddID0gIlRNUERJUiA9IFwiJHtUT1BESVJ9L3RtcFwiIgorICAgICAgICBmb3Iga2V5IGluIGNvbmZpZzoKKyAgICAgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICdjb25mL3NlbGZ0ZXN0LmluYycpLCBjb25maWdba2V5XSkKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbihvcy5lbnZpcm9uLmdldCgnQlVJTERESVInKSwgJ2NvbmYvYmJsYXllcnMuY29uZicpLCBvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICdjb25mL2JibGF5ZXJzLmNvbmYnKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbihvcy5lbnZpcm9uLmdldCgnQlVJTERESVInKSwgJ2NvbmYvYXV0by5jb25mJyksIG9zLnBhdGguam9pbihidWlsZGRpciwgJ2NvbmYvYXV0by5jb25mJykpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBoYXJkbGlua190cmVlKHNlbGYsIHNyYywgZHN0KToKKyAgICAgICAgb3MubWtkaXIoZHN0KQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKGRzdCkKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc3JjKToKKyAgICAgICAgICAgIGlmIHJvb3QgPT0gc3JjOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oZHN0LCByb290LnNwbGl0KHNyYylbMV1bMTpdKSkKKyAgICAgICAgICAgIGZvciBzc3RhdGVfZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBvcy5saW5rKG9zLnBhdGguam9pbihyb290LCBzc3RhdGVfZmlsZSksIG9zLnBhdGguam9pbihkc3QsIHJvb3Quc3BsaXQoc3JjKVsxXVsxOl0sIHNzdGF0ZV9maWxlKSkKKworICAgIGRlZiBydW5fdGVzdF9zc3RhdGVfcmVidWlsZChzZWxmLCBwcmltYXJ5X3RhcmdldHMsIHJlbG9jYXRlPUZhbHNlLCByZWJ1aWxkX2RlcGVuZGVuY2llcz1GYWxzZSk6CisgICAgICAgIGJ1aWxkQSA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnYnVpbGRBJykKKyAgICAgICAgaWYgcmVsb2NhdGU6CisgICAgICAgICAgICBidWlsZEIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ2J1aWxkQicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBidWlsZEIgPSBidWlsZEEKKworICAgICAgICBpZiByZWJ1aWxkX2RlcGVuZGVuY2llczoKKyAgICAgICAgICAgIHJlYnVpbGRfdGFyZ2V0cyA9IHNlbGYuZ2V0X2RlcF90YXJnZXRzKHByaW1hcnlfdGFyZ2V0cykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlYnVpbGRfdGFyZ2V0cyA9IHByaW1hcnlfdGFyZ2V0cworCisgICAgICAgIHNlbGYuY29uZmlndXJlX2J1aWxkZGlyKGJ1aWxkQSkKKyAgICAgICAgcnVuQ21kKCgiLiAlcy9vZS1pbml0LWJ1aWxkLWVudiAlcyAmJiAiICUgKGdldF9iYl92YXIoJ0NPUkVCQVNFJyksIGJ1aWxkQSkpICsgJ2JpdGJha2UgICcgKyAnICcuam9pbihtYXAoc3RyLCBwcmltYXJ5X3RhcmdldHMpKSwgc2hlbGw9VHJ1ZSwgZXhlY3V0YWJsZT0nL2Jpbi9iYXNoJykKKyAgICAgICAgc2VsZi5oYXJkbGlua190cmVlKG9zLnBhdGguam9pbihidWlsZEEsICdzc3RhdGUtY2FjaGUnKSwgb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdzc3RhdGUtY2FjaGUtYnVpbGRBJykpCisgICAgICAgIHNodXRpbC5ybXRyZWUoYnVpbGRBKQorCisgICAgICAgIGZhaWxlZF9yZWJ1aWxkID0gW10KKyAgICAgICAgZmFpbGVkX2NsZWFuc3N0YXRlID0gW10KKyAgICAgICAgZm9yIHRhcmdldCBpbiByZWJ1aWxkX3RhcmdldHM6CisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyZV9idWlsZGRpcihidWlsZEIpCisgICAgICAgICAgICBzZWxmLmhhcmRsaW5rX3RyZWUob3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdzc3RhdGUtY2FjaGUtYnVpbGRBJyksIG9zLnBhdGguam9pbihidWlsZEIsICdzc3RhdGUtY2FjaGUnKSkKKworICAgICAgICAgICAgcmVzdWx0X2NsZWFuc3N0YXRlID0gcnVuQ21kKCgiLiAlcy9vZS1pbml0LWJ1aWxkLWVudiAlcyAmJiAiICUgKGdldF9iYl92YXIoJ0NPUkVCQVNFJyksIGJ1aWxkQikpICsgJ2JpdGJha2UgLWNjbGVhbnNzdGF0ZSAnICsgdGFyZ2V0LCBpZ25vcmVfc3RhdHVzPVRydWUsIHNoZWxsPVRydWUsIGV4ZWN1dGFibGU9Jy9iaW4vYmFzaCcpCisgICAgICAgICAgICBpZiBub3QgcmVzdWx0X2NsZWFuc3N0YXRlLnN0YXR1cyA9PSAwOgorICAgICAgICAgICAgICAgIGZhaWxlZF9jbGVhbnNzdGF0ZS5hcHBlbmQodGFyZ2V0KQorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoYnVpbGRCKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZCA9IHJ1bkNtZCgoIi4gJXMvb2UtaW5pdC1idWlsZC1lbnYgJXMgJiYgIiAlIChnZXRfYmJfdmFyKCdDT1JFQkFTRScpLCBidWlsZEIpKSArICdiaXRiYWtlICcgKyB0YXJnZXQsIGlnbm9yZV9zdGF0dXM9VHJ1ZSwgc2hlbGw9VHJ1ZSwgZXhlY3V0YWJsZT0nL2Jpbi9iYXNoJykKKyAgICAgICAgICAgIGlmIG5vdCByZXN1bHRfYnVpbGQuc3RhdHVzID09IDA6CisgICAgICAgICAgICAgICAgZmFpbGVkX3JlYnVpbGQuYXBwZW5kKHRhcmdldCkKKworICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShidWlsZEIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmYWlsZWRfcmVidWlsZCwgbXNnPSJUaGUgZm9sbG93aW5nIHJlY2lwZXMgaGF2ZSBmYWlsZWQgdG8gcmVidWlsZDogJXMiICUgJyAnLmpvaW4obWFwKHN0ciwgZmFpbGVkX3JlYnVpbGQpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmYWlsZWRfY2xlYW5zc3RhdGUsIG1zZz0iVGhlIGZvbGxvd2luZyByZWNpcGVzIGhhdmUgZmFpbGVkIGNsZWFuc3N0YXRlKGFsbCBvdGhlcnMgaGF2ZSBwYXNzZWQgYm90aCBjbGVhbnNzdGF0ZSBhbmQgcmVidWlsZCBmcm9tIHNzdGF0ZSB0ZXN0cyk6ICVzIiAlICcgJy5qb2luKG1hcChzdHIsIGZhaWxlZF9jbGVhbnNzdGF0ZSkpKQorCisgICAgZGVmIHRlc3Rfc3N0YXRlX3JlbG9jYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX3JlYnVpbGQoWydjb3JlLWltYWdlLXNhdG8tc2RrJ10sIHJlbG9jYXRlPVRydWUsIHJlYnVpbGRfZGVwZW5kZW5jaWVzPVRydWUpCisKKyAgICBkZWYgdGVzdF9zc3RhdGVfcmVidWlsZChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfcmVidWlsZChbJ2NvcmUtaW1hZ2Utc2F0by1zZGsnXSwgcmVsb2NhdGU9RmFsc2UsIHJlYnVpbGRfZGVwZW5kZW5jaWVzPVRydWUpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvX3RvYXN0ZXIucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvX3RvYXN0ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQyNDY1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9fdG9hc3Rlci5weQpAQCAtMCwwICsxLDMyMCBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzaGxleCwgc3VicHJvY2VzcworaW1wb3J0IHVybGxpYiwgY29tbWFuZHMsIHRpbWUsIGdldHBhc3MsIHJlLCBqc29uLCBzaGxleAorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQKKworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uLy4uLy4uLy4uLycsICdiaXRiYWtlL2xpYi90b2FzdGVyJykpKQorb3MuZW52aXJvbi5zZXRkZWZhdWx0KCJESkFOR09fU0VUVElOR1NfTU9EVUxFIiwgInRvYXN0ZXJtYWluLnNldHRpbmdzIikKKworaW1wb3J0IHRvYXN0ZXJtYWluLnNldHRpbmdzCitmcm9tIGRqYW5nby5kYi5tb2RlbHMgaW1wb3J0IFEKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgKgorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCisKK2NsYXNzIFRvYXN0ZXJTZXR1cChvZVNlbGZUZXN0KToKKworICAgIGRlZiByZWNpcGVfcGFyc2Uoc2VsZiwgZmlsZV9wYXRoLCB2YXIpOgorICAgICAgICBmb3IgbGluZSBpbiBvcGVuKGZpbGVfcGF0aCwncicpOgorICAgICAgICAgICAgaWYgbGluZS5maW5kKHZhcikgPiAtMToKKyAgICAgICAgICAgICAgICB2YWwgPSBsaW5lLnNwbGl0KCIgPSAiKVsxXS5yZXBsYWNlKCJcIiIsICIiKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbAorCisgICAgZGVmIGZpeF9maWxlX3BhdGgoc2VsZiwgZmlsZV9wYXRoKToKKyAgICAgICAgaWYgIjoiIGluIGZpbGVfcGF0aDoKKyAgICAgICAgICAgIGZpbGVfcGF0aD1maWxlX3BhdGguc3BsaXQoIjoiKVsyXQorICAgICAgICByZXR1cm4gZmlsZV9wYXRoCisKK2NsYXNzIFRvYXN0ZXJfREJfVGVzdHMoVG9hc3RlclNldHVwKToKKworICAgICMgQ2hlY2sgaWYgYnVpbGQgbmFtZSBpcyB1bmlxdWUgLSB0Y19pZD03OTUKKyAgICBAdGVzdGNhc2UoNzk1KQorICAgIGRlZiB0ZXN0X0J1aWxkX1VuaXF1ZV9OYW1lKHNlbGYpOgorICAgICAgICBhbGxfYnVpbGRzID0gQnVpbGQub2JqZWN0cy5hbGwoKS5jb3VudCgpCisgICAgICAgIGRpc3RpbmN0X2J1aWxkcyA9IEJ1aWxkLm9iamVjdHMudmFsdWVzKCdpZCcpLmRpc3RpbmN0KCkuY291bnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpc3RpbmN0X2J1aWxkcywgYWxsX2J1aWxkcywgbXNnID0gJ0J1aWxkIG5hbWUgaXMgbm90IHVuaXF1ZScpCisKKyAgICAjIENoZWNrIGlmIGJ1aWxkIGNvb2NrZXIgbG9nIHBhdGggaXMgdW5pcXVlIC0gdGNfaWQ9ODE5CisgICAgQHRlc3RjYXNlKDgxOSkKKyAgICBkZWYgdGVzdF9CdWlsZF9VbmlxdWVfQ29va2VyX0xvZ19QYXRoKHNlbGYpOgorICAgICAgICBkaXN0aW5jdF9wYXRoID0gQnVpbGQub2JqZWN0cy52YWx1ZXMoJ2Nvb2tlcl9sb2dfcGF0aCcpLmRpc3RpbmN0KCkuY291bnQoKQorICAgICAgICB0b3RhbF9idWlsZHMgPSBCdWlsZC5vYmplY3RzLnZhbHVlcygnaWQnKS5jb3VudCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzdGluY3RfcGF0aCwgdG90YWxfYnVpbGRzLCBtc2cgPSAnQnVpbGQgY29vY2tlciBsb2cgcGF0aCBpcyBub3QgdW5pcXVlJykKKworICAgICMgQ2hlY2sgaWYgdGFzayBvcmRlciBpcyB1bmlxdWUgZm9yIG9uZSBidWlsZCAtIHRjPTgyNAorICAgIEB0ZXN0Y2FzZSg4MjQpCisgICAgZGVmIHRlc3RfVGFza19VbmlxdWVfT3JkZXIoc2VsZik6CisgICAgICAgIGJ1aWxkcyA9IEJ1aWxkLm9iamVjdHMudmFsdWVzKCdpZCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgYnVpbGQgaW4gYnVpbGRzOgorICAgICAgICAgICAgdG90YWxfdGFza19vcmRlciA9IFRhc2sub2JqZWN0cy5maWx0ZXIoYnVpbGQgPSBidWlsZFsnaWQnXSkudmFsdWVzKCdvcmRlcicpLmNvdW50KCkKKyAgICAgICAgICAgIGRpc3RpbmN0X3Rhc2tfb3JkZXIgPSBUYXNrLm9iamVjdHMuZmlsdGVyKGJ1aWxkID0gYnVpbGRbJ2lkJ10pLnZhbHVlcygnb3JkZXInKS5kaXN0aW5jdCgpLmNvdW50KCkKKyAgICAgICAgICAgIGlmICh0b3RhbF90YXNrX29yZGVyICE9IGRpc3RpbmN0X3Rhc2tfb3JkZXIpOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKGJ1aWxkWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgYnVpbGQgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIHRhc2sgb3JkZXIgc2VxdWVuY2UgZm9yIG9uZSBidWlsZCAtIHRjPTgyNQorICAgIEB0ZXN0Y2FzZSg4MjUpCisgICAgZGVmIHRlc3RfVGFza19PcmRlcl9TZXF1ZW5jZShzZWxmKToKKyAgICAgICAgYnVpbGRzID0gYnVpbGRzID0gQnVpbGQub2JqZWN0cy52YWx1ZXMoJ2lkJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBidWlsZCBpbiBidWlsZHM6CisgICAgICAgICAgICB0YXNrcyA9IFRhc2sub2JqZWN0cy5maWx0ZXIoUShidWlsZCA9IGJ1aWxkWydpZCddKSwgflEob3JkZXIgPSBOb25lKSwgflEodGFza19uYW1lX19jb250YWlucyA9ICdfc2V0c2NlbmUnKSkudmFsdWVzKCdpZCcsICdvcmRlcicpLm9yZGVyX2J5KCJvcmRlciIpCisgICAgICAgICAgICBjbnRfdGFza3MgPSAwCisgICAgICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgICAgICBjbnRfdGFza3MgKz0gMQorICAgICAgICAgICAgICAgIGlmICh0YXNrWydvcmRlciddICE9IGNudF90YXNrcyk6CisgICAgICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhc2tbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXNrIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBkaXNrX2lvIG1hdGNoZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBFbmRUaW1lSU8gYW5kIFN0YXJ0VGltZUlPIGluIGJ1aWxkIHN0YXRzIC0gdGM9ODI4CisgICAgIyMjIHRoaXMgbmVlZHMgdG8gYmUgdXBkYXRlZCAjIyMKKyAgICAjZGVmIHRlc3RfVGFza19EaXNrX0lPX1RDODI4KHNlbGYpOgorCisgICAgIyBDaGVjayBpZiBvdXRjb21lID0gMiAoU1NUQVRFKSB0aGVuIHNzdGF0ZV9yZXN1bHQgbXVzdCBiZSAzIChSRVNUT1JFRCkgLSB0Yz04MzIKKyAgICBAdGVzdGNhc2UoODMyKQorICAgIGRlZiB0ZXN0X1Rhc2tfSWZfT3V0Y29tZV8yX1NzdGF0ZV9SZXN1bHRfTXVzdF9CZV8zKHNlbGYpOgorICAgICAgICB0YXNrcyA9IFRhc2sub2JqZWN0cy5maWx0ZXIob3V0Y29tZSA9IDIpLnZhbHVlcygnaWQnLCAnc3N0YXRlX3Jlc3VsdCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgIGlmIChyb3dbJ3NzdGF0ZV9yZXN1bHQnXSAhPSAzKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh0YXNrWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgdGFzayBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgb3V0Y29tZSA9IDEgKENPVkVSRUQpIG9yIDMgKEVYSVNUSU5HKSB0aGVuIHNzdGF0ZV9yZXN1bHQgbXVzdCBiZSAwIChTU1RBVEVfTkEpIC0gdGM9ODMzCisgICAgQHRlc3RjYXNlKDgzMykKKyAgICBkZWYgdGVzdF9UYXNrX0lmX091dGNvbWVfMV8zX1NzdGF0ZV9SZXN1bHRfTXVzdF9CZV8wKHNlbGYpOgorICAgICAgICB0YXNrcyA9IFRhc2sub2JqZWN0cy5maWx0ZXIob3V0Y29tZV9faW4gPSAoMSwgMykpLnZhbHVlcygnaWQnLCAnc3N0YXRlX3Jlc3VsdCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgIGlmICh0YXNrWydzc3RhdGVfcmVzdWx0J10gIT0gMCk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQodGFza1snaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHRhc2sgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIGlmIG91dGNvbWUgaXMgMCAoU1VDQ0VTUykgb3IgNCAoRkFJTEVEKSB0aGVuIHNzdGF0ZV9yZXN1bHQgbXVzdCBiZSAwIChOQSksIDEgKE1JU1MpIG9yIDIgKEZBSUxFRCkgLSB0Yz04MzQKKyAgICBAdGVzdGNhc2UoODM0KQorICAgIGRlZiB0ZXN0X1Rhc2tfSWZfT3V0Y29tZV8wXzRfU3N0YXRlX1Jlc3VsdF9NdXN0X0JlXzBfMV8yKHNlbGYpOgorICAgICAgICB0YXNrcyA9IFRhc2sub2JqZWN0cy5maWx0ZXIob3V0Y29tZV9faW4gPSAoMCwgNCkpLnZhbHVlcygnaWQnLCAnc3N0YXRlX3Jlc3VsdCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgIGlmICh0YXNrWydzc3RhdGVfcmVzdWx0J10gbm90IGluIFswLCAxLCAyXSk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQodGFza1snaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHRhc2sgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIGlmIHRhc2tfZXhlY3V0ZWQgPSBUUlVFICgxKSwgc2NyaXB0X3R5cGUgbXVzdCBiZSAwIChDT0RJTkdfTkEpLCAyIChDT0RJTkdfUFlUSE9OKSwgMyAoQ09ESU5HX1NIRUxMKSAtIHRjPTg5MQorICAgIEB0ZXN0Y2FzZSg4OTEpCisgICAgZGVmIHRlc3RfVGFza19JZl9UYXNrX0V4ZWN1dGVkX1RydWVfU2NyaXB0X1R5cGVfMF8yXzMoc2VsZik6CisgICAgICAgIHRhc2tzID0gVGFzay5vYmplY3RzLmZpbHRlcih0YXNrX2V4ZWN1dGVkID0gMSkudmFsdWVzKCdpZCcsICdzY3JpcHRfdHlwZScpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgIGlmICh0YXNrWydzY3JpcHRfdHlwZSddIG5vdCBpbiBbMCwgMiwgM10pOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhc2tbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXNrIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiB0YXNrX2V4ZWN1dGVkID0gVFJVRSAoMSksIG91dGNvbWUgbXVzdCBiZSAwIChTVUNDRVNTKSBvciA0IChGQUlMRUQpIC0gdGM9ODM2CisgICAgQHRlc3RjYXNlKDgzNikKKyAgICBkZWYgdGVzdF9UYXNrX0lmX1Rhc2tfRXhlY3V0ZWRfVHJ1ZV9PdXRjb21lXzBfNChzZWxmKToKKyAgICAgICAgdGFza3MgPSBUYXNrLm9iamVjdHMuZmlsdGVyKHRhc2tfZXhlY3V0ZWQgPSAxKS52YWx1ZXMoJ2lkJywgJ291dGNvbWUnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CisgICAgICAgICAgICBpZiAodGFza1snb3V0Y29tZSddIG5vdCBpbiBbMCwgNF0pOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhc2tbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXNrIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiB0YXNrX2V4ZWN1dGVkID0gRkFMU0UgKDApLCBzY3JpcHRfdHlwZSBtdXN0IGJlIDAgLSB0Yz04OTAKKyAgICBAdGVzdGNhc2UoODkwKQorICAgIGRlZiB0ZXN0X1Rhc2tfSWZfVGFza19FeGVjdXRlZF9GYWxzZV9TY3JpcHRfVHlwZV8wKHNlbGYpOgorICAgICAgICB0YXNrcyA9IFRhc2sub2JqZWN0cy5maWx0ZXIodGFza19leGVjdXRlZCA9IDApLnZhbHVlcygnaWQnLCAnc2NyaXB0X3R5cGUnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CisgICAgICAgICAgICBpZiAodGFza1snc2NyaXB0X3R5cGUnXSAhPSAwKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh0YXNrWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgdGFzayBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgdGFza19leGVjdXRlZCA9IEZBTFNFICgwKSBhbmQgYnVpbGQgb3V0Y29tZSA9IFNVQ0NFRURFRCAoMCksIHRhc2sgb3V0Y29tZSBtdXN0IGJlIDEgKENPVkVSRUQpLCAyIChDQUNIRUQpLCAzIChQUkVCVUlMVCksIDUgKEVNUFRZKSAtIHRjPTgzNworICAgIEB0ZXN0Y2FzZSg4MzcpCisgICAgZGVmIHRlc3RfVGFza19JZl9UYXNrX0V4ZWN1dGVkX0ZhbHNlX091dGNvbWVfMV8yXzNfNShzZWxmKToKKyAgICAgICAgYnVpbGRzID0gQnVpbGQub2JqZWN0cy5maWx0ZXIob3V0Y29tZSA9IDApLnZhbHVlcygnaWQnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIGJ1aWxkIGluIGJ1aWxkczoKKyAgICAgICAgICAgIHRhc2tzID0gVGFzay5vYmplY3RzLmZpbHRlcihidWlsZCA9IGJ1aWxkWydpZCddLCB0YXNrX2V4ZWN1dGVkID0gMCkudmFsdWVzKCdpZCcsICdvdXRjb21lJykKKyAgICAgICAgICAgIGZvciB0YXNrIGluIHRhc2tzOgorICAgICAgICAgICAgICAgIGlmICh0YXNrWydvdXRjb21lJ10gbm90IGluIFsxLCAyLCAzLCA1XSk6CisgICAgICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhc2tbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXNrIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBLZXkgdmVyaWZpY2F0aW9uIC0gdGM9ODg4CisgICAgQHRlc3RjYXNlKDg4OCkKKyAgICBkZWYgdGVzdF9UYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2Uoc2VsZik6CisgICAgICAgIHJvd3MgPSBUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2Uub2JqZWN0cy52YWx1ZXMoJ2lkJywgJ3RhcmdldF9pZCcsICdwYWNrYWdlX2lkJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciByb3cgaW4gcm93czoKKyAgICAgICAgICAgIHRhcmdldCA9IFRhcmdldC5vYmplY3RzLmZpbHRlcihpZCA9IHJvd1sndGFyZ2V0X2lkJ10pLnZhbHVlcygnaWQnKQorICAgICAgICAgICAgcGFja2FnZSA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoaWQgPSByb3dbJ3BhY2thZ2VfaWQnXSkudmFsdWVzKCdpZCcpCisgICAgICAgICAgICBpZiAobm90IHRhcmdldCBvciBub3QgcGFja2FnZSk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQocm93WydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgdGFyZ2V0IGluc3RhbGxlZCBwYWNrYWdlIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBLZXkgdmVyaWZpY2F0aW9uIC0gdGM9ODg5CisgICAgQHRlc3RjYXNlKDg4OSkKKyAgICBkZWYgdGVzdF9UYXNrX0RlcGVuZGVuY3koc2VsZik6CisgICAgICAgIHJvd3MgPSBUYXNrX0RlcGVuZGVuY3kub2JqZWN0cy52YWx1ZXMoJ2lkJywgJ3Rhc2tfaWQnLCAnZGVwZW5kc19vbl9pZCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3Igcm93IGluIHJvd3M6CisgICAgICAgICAgICB0YXNrX2lkID0gVGFzay5vYmplY3RzLmZpbHRlcihpZCA9IHJvd1sndGFza19pZCddKS52YWx1ZXMoJ2lkJykKKyAgICAgICAgICAgIGRlcGVuZHNfb25faWQgPSBUYXNrLm9iamVjdHMuZmlsdGVyKGlkID0gcm93WydkZXBlbmRzX29uX2lkJ10pLnZhbHVlcygnaWQnKQorICAgICAgICAgICAgaWYgKG5vdCB0YXNrX2lkIG9yIG5vdCBkZXBlbmRzX29uX2lkKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChyb3dbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXNrIGRlcGVuZGVuY3kgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIGlmIGJ1aWxkIHRhcmdldCBmaWxlX25hbWUgaXMgcG9wdWxhdGVkIG9ubHkgaWYgaXNfaW1hZ2U9dHJ1ZSBBTkQgb3JtX2J1aWxkLm91dGNvbWU9MCB0aGVuIGlmIHRoZSBmaWxlIGV4aXN0cyBhbmQgaXRzIHNpemUgbWF0Y2hlcyB0aGUgZmlsZV9zaXplIHZhbHVlCisgICAgIyMjIE5lZWQgdG8gYWRkIHRoZSB0YyBpbiB0aGUgdGVzdCBydW4KKyAgICBAdGVzdGNhc2UoMTAzNykKKyAgICBkZWYgdGVzdF9UYXJnZXRfRmlsZV9OYW1lX1BvcHVsYXRlZChzZWxmKToKKyAgICAgICAgYnVpbGRzID0gQnVpbGQub2JqZWN0cy5maWx0ZXIob3V0Y29tZSA9IDApLnZhbHVlcygnaWQnKQorICAgICAgICBmb3IgYnVpbGQgaW4gYnVpbGRzOgorICAgICAgICAgICAgdGFyZ2V0cyA9IFRhcmdldC5vYmplY3RzLmZpbHRlcihidWlsZF9pZCA9IGJ1aWxkWydpZCddLCBpc19pbWFnZSA9IDEpLnZhbHVlcygnaWQnKQorICAgICAgICAgICAgZm9yIHRhcmdldCBpbiB0YXJnZXRzOgorICAgICAgICAgICAgICAgIHRhcmdldF9maWxlcyA9IFRhcmdldF9JbWFnZV9GaWxlLm9iamVjdHMuZmlsdGVyKHRhcmdldF9pZCA9IHRhcmdldFsnaWQnXSkudmFsdWVzKCdpZCcsICdmaWxlX25hbWUnLCAnZmlsZV9zaXplJykKKyAgICAgICAgICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgICAgICAgICBmb3IgZmlsZV9pbmZvIGluIHRhcmdldF9maWxlczoKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2lkID0gZmlsZV9pbmZvWydpZCddCisgICAgICAgICAgICAgICAgICAgIHRhcmdldF9maWxlX25hbWUgPSBmaWxlX2luZm9bJ2ZpbGVfbmFtZSddCisgICAgICAgICAgICAgICAgICAgIHRhcmdldF9maWxlX3NpemUgPSBmaWxlX2luZm9bJ2ZpbGVfc2l6ZSddCisgICAgICAgICAgICAgICAgICAgIGlmIChub3QgdGFyZ2V0X2ZpbGVfbmFtZSBvciBub3QgdGFyZ2V0X2ZpbGVfc2l6ZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh0YXJnZXRfaWQpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm90IG9zLnBhdGguZXhpc3RzKHRhcmdldF9maWxlX25hbWUpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh0YXJnZXRfaWQpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcy5wYXRoLmdldHNpemUodGFyZ2V0X2ZpbGVfbmFtZSkgIT0gdGFyZ2V0X2ZpbGVfc2l6ZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhcmdldF9pZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHRhcmdldCBpbWFnZSBmaWxlIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBLZXkgdmVyaWZpY2F0aW9uIC0gdGM9ODg0CisgICAgQHRlc3RjYXNlKDg4NCkKKyAgICBkZWYgdGVzdF9QYWNrYWdlX0RlcGVuZGVuY3koc2VsZik6CisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBkZXBzID0gUGFja2FnZV9EZXBlbmRlbmN5Lm9iamVjdHMudmFsdWVzKCdpZCcsICdwYWNrYWdlX2lkJywgJ2RlcGVuZHNfb25faWQnKQorICAgICAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgICAgICBpZiAoZGVwWydwYWNrYWdlX2lkJ10gPT0gZGVwWydkZXBlbmRzX29uX2lkJ10pOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKGRlcFsnaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHBhY2thZ2UgZGVwZW5kZW5jeSBpZDogJXMnICUgY250X2VycikKKworICAgICMgUmVjaXBlIGtleSB2ZXJpZmljYXRpb24sIHJlY2lwZSBuYW1lIGRvZXMgbm90IGRlcGVuZHMgb24gYSByZWNpcGUgaGF2aW5nIHRoZSBzYW1lIG5hbWUgLSB0Yz04ODMKKyAgICBAdGVzdGNhc2UoODgzKQorICAgIGRlZiB0ZXN0X1JlY2lwZV9EZXBlbmRlbmN5KHNlbGYpOgorICAgICAgICBkZXBzID0gUmVjaXBlX0RlcGVuZGVuY3kub2JqZWN0cy52YWx1ZXMoJ2lkJywgJ3JlY2lwZV9pZCcsICdkZXBlbmRzX29uX2lkJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgICAgIGlmIChub3QgZGVwWydyZWNpcGVfaWQnXSBvciBub3QgZGVwWydkZXBlbmRzX29uX2lkJ10pOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKGRlcFsnaWQnXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmFtZSA9IFJlY2lwZS5vYmplY3RzLmZpbHRlcihpZCA9IGRlcFsncmVjaXBlX2lkJ10pLnZhbHVlcygnbmFtZScpCisgICAgICAgICAgICAgICAgZGVwX25hbWUgPSBSZWNpcGUub2JqZWN0cy5maWx0ZXIoaWQgPSBkZXBbJ2RlcGVuZHNfb25faWQnXSkudmFsdWVzKCduYW1lJykKKyAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSBkZXBfbmFtZSk6CisgICAgICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKGRlcFsnaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHJlY2lwZSBkZXBlbmRlbmN5IGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBwYWNrYWdlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCBhIG51bWJlciAoMC05KSAtIHRjPTg0NgorICAgIEB0ZXN0Y2FzZSg4NDYpCisgICAgZGVmIHRlc3RfUGFja2FnZV9OYW1lX0Zvcl9OdW1iZXIoc2VsZik6CisgICAgICAgIHBhY2thZ2VzID0gUGFja2FnZS5vYmplY3RzLmZpbHRlcih+UShzaXplID0gLTEpKS52YWx1ZXMoJ2lkJywgJ25hbWUnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgICAgICBpZiAocGFja2FnZVsnbmFtZSddWzBdLmlzZGlnaXQoKSBpcyBUcnVlKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChwYWNrYWdlWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgcGFja2FnZSBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgcGFja2FnZSB2ZXJzaW9uIHN0YXJ0cyB3aXRoIGEgbnVtYmVyICgwLTkpIC0gdGM9ODQ3CisgICAgQHRlc3RjYXNlKDg0NykKKyAgICBkZWYgdGVzdF9QYWNrYWdlX1ZlcnNpb25fU3RhcnRzX1dpdGhfTnVtYmVyKHNlbGYpOgorICAgICAgICBwYWNrYWdlcyA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoflEoc2l6ZSA9IC0xKSkudmFsdWVzKCdpZCcsICd2ZXJzaW9uJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgaWYgKHBhY2thZ2VbJ3ZlcnNpb24nXVswXS5pc2RpZ2l0KCkgaXMgRmFsc2UpOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHBhY2thZ2VbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciBwYWNrYWdlIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBwYWNrYWdlIHJldmlzaW9uIHN0YXJ0cyB3aXRoICdyJyAtIHRjPTg0OAorICAgIEB0ZXN0Y2FzZSg4NDgpCisgICAgZGVmIHRlc3RfUGFja2FnZV9SZXZpc2lvbl9TdGFydHNfV2l0aF9yKHNlbGYpOgorICAgICAgICBwYWNrYWdlcyA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoflEoc2l6ZSA9IC0xKSkudmFsdWVzKCdpZCcsICdyZXZpc2lvbicpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgcGFja2FnZSBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgIGlmIChwYWNrYWdlWydyZXZpc2lvbiddWzBdLnN0YXJ0c3dpdGgoInIiKSBpcyBGYWxzZSk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQocGFja2FnZVsnaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHBhY2thZ2UgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgcGFja2FnZSBidWlsZF9pZAorICAgICMjIyBUQyBtdXN0IGJlIGFkZGVkIGluIHRlc3QgcnVuCisgICAgQHRlc3RjYXNlKDEwMzgpCisgICAgZGVmIHRlc3RfUGFja2FnZV9CdWlsZF9JZChzZWxmKToKKyAgICAgICAgcGFja2FnZXMgPSBQYWNrYWdlLm9iamVjdHMuZmlsdGVyKH5RKHNpemUgPSAtMSkpLnZhbHVlcygnaWQnLCAnYnVpbGRfaWQnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgICAgICBidWlsZF9pZCA9IEJ1aWxkLm9iamVjdHMuZmlsdGVyKGlkID0gcGFja2FnZVsnYnVpbGRfaWQnXSkudmFsdWVzKCdpZCcpCisgICAgICAgICAgICBpZiAobm90IGJ1aWxkX2lkKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChwYWNrYWdlWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgcGFja2FnZSBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgdGhlIHZhbGlkaXR5IG9mIHBhY2thZ2UgcmVjaXBlX2lkCisgICAgIyMjIFRDIG11c3QgYmUgYWRkZWQgaW4gdGVzdCBydW4KKyAgICBAdGVzdGNhc2UoMTAzOSkKKyAgICBkZWYgdGVzdF9QYWNrYWdlX1JlY2lwZV9JZChzZWxmKToKKyAgICAgICAgcGFja2FnZXMgPSBQYWNrYWdlLm9iamVjdHMuZmlsdGVyKH5RKHNpemUgPSAtMSkpLnZhbHVlcygnaWQnLCAncmVjaXBlX2lkJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgcmVjaXBlX2lkID0gUmVjaXBlLm9iamVjdHMuZmlsdGVyKGlkID0gcGFja2FnZVsncmVjaXBlX2lkJ10pLnZhbHVlcygnaWQnKQorICAgICAgICAgICAgaWYgKG5vdCByZWNpcGVfaWQpOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHBhY2thZ2VbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciBwYWNrYWdlIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBwYWNrYWdlIGluc3RhbGxlZF9zaXplIGZpZWxkIGlzIG5vdCBudWxsCisgICAgIyMjIFRDIG11c3QgYmUgYWRlZCBpbiB0ZXN0IHJ1bgorICAgIEB0ZXN0Y2FzZSgxMDQwKQorICAgIGRlZiB0ZXN0X1BhY2thZ2VfSW5zdGFsbGVkX1NpemVfTm90X05VTEwoc2VsZik6CisgICAgICAgIHBhY2thZ2VzID0gUGFja2FnZS5vYmplY3RzLmZpbHRlcihpbnN0YWxsZWRfc2l6ZV9faXNudWxsID0gVHJ1ZSkudmFsdWVzKCdpZCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgcGFja2FnZSBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHBhY2thZ2VbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciBwYWNrYWdlIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBhbGwgbGF5ZXJzIHJlcXVlc3RzIHJldHVybiBleGl0IGNvZGUgaXMgMjAwIC0gdGM9ODQzCisgICAgQHRlc3RjYXNlKDg0MykKKyAgICBkZWYgdGVzdF9MYXllcnNfUmVxdWVzdHNfRXhpdF9Db2RlKHNlbGYpOgorICAgICAgICBsYXllcnMgPSBMYXllci5vYmplY3RzLnZhbHVlcygnaWQnLCAnbGF5ZXJfaW5kZXhfdXJsJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBsYXllciBpbiBsYXllcnM6CisgICAgICAgICAgICByZXNwID0gdXJsbGliLnVybG9wZW4obGF5ZXJbJ2xheWVyX2luZGV4X3VybCddKQorICAgICAgICAgICAgaWYgKHJlc3AuZ2V0Y29kZSgpICE9IDIwMCk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQobGF5ZXJbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciBsYXllciBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgZGphbmdvIHNlcnZlciBzdGFydHMgcmVnYXJkbGVzcyBvZiB0aGUgdGltZXpvbmUgc2V0IG9uIHRoZSBtYWNoaW5lIC0gdGM9OTA1CisgICAgQHRlc3RjYXNlKDkwNSkKKyAgICBkZWYgdGVzdF9TdGFydF9EamFuZ29fVGltZXpvbmUoc2VsZik6CisgICAgICAgIGN1cnJlbnRfcGF0aCA9IG9zLmdldGN3ZCgpCisgICAgICAgIHpvbmVmaWxlbGlzdCA9IFtdCisgICAgICAgIFpPTkVJTkZPUEFUSCA9ICcvdXNyL3NoYXJlL3pvbmVpbmZvLycKKyAgICAgICAgb3MuY2hkaXIoIi4uL2JpdGJha2UvbGliL3RvYXN0ZXIvIikKKyAgICAgICAgY250X2VyciA9IDAKKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIG9zLmxpc3RkaXIoWk9ORUlORk9QQVRIKToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihaT05FSU5GT1BBVEgsIGZpbGVuYW1lKSk6CisgICAgICAgICAgICAgICAgem9uZWZpbGVsaXN0LmFwcGVuZChmaWxlbmFtZSkKKyAgICAgICAgZm9yIGsgaW4gcmFuZ2UobGVuKHpvbmVmaWxlbGlzdCkpOgorICAgICAgICAgICAgaWYgayA8PSA1OgorICAgICAgICAgICAgICAgIGZpbGVzID0gem9uZWZpbGVsaXN0W2tdCisgICAgICAgICAgICAgICAgb3Muc3lzdGVtKCJleHBvcnQgVFo9IitzdHIoZmlsZXMpKyI7IHB5dGhvbiBtYW5hZ2UucHkgcnVuc2VydmVyID4gL2Rldi9udWxsIDI+JjEgJiIpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgzKQorICAgICAgICAgICAgICAgIHBpZCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCJwcyBhdXggfCBncmVwICdbL3Vdc3IvYmluL3B5dGhvbiBtYW5hZ2UucHkgcnVuc2VydmVyJyB8IGF3ayAne3ByaW50ICQyfSciLCBzaGVsbCA9IFRydWUpCisgICAgICAgICAgICAgICAgaWYgcGlkOgorICAgICAgICAgICAgICAgICAgICBvcy5zeXN0ZW0oImtpbGwgLTkgIitzdHIocGlkKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh6b25lZmlsZWxpc3Rba10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY250X2VyciwgMCwgbXNnID0gJ0Vycm9ycyBkamFuZ28gc2VydmVyIGRvZXMgbm90IHN0YXJ0IHdpdGggdGltZXpvbmU6ICVzJyAlIGNudF9lcnIpCisgICAgICAgIG9zLmNoZGlyKGN1cnJlbnRfcGF0aCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYXNlLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Jhc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJmYWE2NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYXNlLnB5CkBAIC0wLDAgKzEsMTUzIEBACisjIENvcHlyaWdodCAoYykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworCisjIERFU0NSSVBUSU9OCisjIEJhc2UgY2xhc3MgaW5oZXJpdGVkIGJ5IHRlc3QgY2xhc3NlcyBpbiBtZXRhL2xpYi9zZWxmdGVzdAorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHNodXRpbAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBlcnJubworCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgZ2V0X3Rlc3RfbGF5ZXIKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCBMb2dSZXN1bHRzCisKK0BMb2dSZXN1bHRzCitjbGFzcyBvZVNlbGZUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJzZWxmdGVzdC5iYXNlIikKKyAgICBsb25nTWVzc2FnZSA9IFRydWUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSJydW5UZXN0Iik6CisgICAgICAgIHNlbGYuYnVpbGRkaXIgPSBvcy5lbnZpcm9uLmdldCgiQlVJTERESVIiKQorICAgICAgICBzZWxmLmxvY2FsY29uZl9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICJjb25mL2xvY2FsLmNvbmYiKQorICAgICAgICBzZWxmLnRlc3RpbmNfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAiY29uZi9zZWxmdGVzdC5pbmMiKQorICAgICAgICBzZWxmLmxvY2FsX2JibGF5ZXJzX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgImNvbmYvYmJsYXllcnMuY29uZiIpCisgICAgICAgIHNlbGYudGVzdGluY19iYmxheWVyc19wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICJjb25mL2JibGF5ZXJzLmluYyIpCisgICAgICAgIHNlbGYudGVzdGxheWVyX3BhdGggPSBvZVNlbGZUZXN0LnRlc3RsYXllcl9wYXRoCisgICAgICAgIHNlbGYuX2V4dHJhX3RlYXJfZG93bl9jb21tYW5kcyA9IFtdCisgICAgICAgIHNlbGYuX3RyYWNrX2Zvcl9jbGVhbnVwID0gW10KKyAgICAgICAgc3VwZXIob2VTZWxmVGVzdCwgc2VsZikuX19pbml0X18obWV0aG9kTmFtZSkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgb3MuY2hkaXIoc2VsZi5idWlsZGRpcikKKyAgICAgICAgIyB3ZSBkb24ndCBrbm93IHdoYXQgdGhlIHByZXZpb3VzIHRlc3QgbGVmdCBhcm91bmQgaW4gY29uZmlnIG9yIGluYyBmaWxlcworICAgICAgICAjIGlmIGl0IGZhaWxlZCBzbyB3ZSBuZWVkIGEgZnJlc2ggc3RhcnQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYudGVzdGluY19wYXRoKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZm9yIHJvb3QsIF8sIGZpbGVzIGluIG9zLndhbGsoc2VsZi50ZXN0bGF5ZXJfcGF0aCk6CisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBpZiBmID09ICd0ZXN0X3JlY2lwZS5pbmMnOgorICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKHJvb3QsIGYpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAjIHRlc3RzIG1pZ2h0IG5lZWQgdGhlaXIgb3duIHNldHVwCisgICAgICAgICMgYnV0IGlmIHRoZXkgb3ZlcndyaXRlIHRoaXMgb25lIHRoZXkgaGF2ZSB0byBjYWxsCisgICAgICAgICMgc3VwZXIgZWFjaCB0aW1lLCBzbyBsZXQncyBnaXZlIHRoZW0gYW4gYWx0ZXJuYXRpdmUKKyAgICAgICAgc2VsZi5zZXRVcExvY2FsKCkKKworICAgIGRlZiBzZXRVcExvY2FsKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2V4dHJhX3RlYXJfZG93bl9jb21tYW5kczoKKyAgICAgICAgICAgIGZhaWxlZF9leHRyYV9jb21tYW5kcyA9IFtdCisgICAgICAgICAgICBmb3IgY29tbWFuZCBpbiBzZWxmLl9leHRyYV90ZWFyX2Rvd25fY29tbWFuZHM6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKGNvbW1hbmQsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiBub3QgcmVzdWx0LnN0YXR1cyA9PSAgMDoKKyAgICAgICAgICAgICAgICAgICAgZmFpbGVkX2V4dHJhX2NvbW1hbmRzLmFwcGVuZChjb21tYW5kKQorICAgICAgICAgICAgaWYgZmFpbGVkX2V4dHJhX2NvbW1hbmRzOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLndhcm5pbmcoInRlYXJEb3duIGNvbW1hbmRzIGhhdmUgZmFpbGVkOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgZmFpbGVkX2V4dHJhX2NvbW1hbmRzKSkpCisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZGVidWcoIlRyeWluZyB0byBtb3ZlIG9uLiIpCisgICAgICAgICAgICBzZWxmLl9leHRyYV90ZWFyX2Rvd25fY29tbWFuZHMgPSBbXQorCisgICAgICAgIGlmIHNlbGYuX3RyYWNrX2Zvcl9jbGVhbnVwOgorICAgICAgICAgICAgZm9yIHBhdGggaW4gc2VsZi5fdHJhY2tfZm9yX2NsZWFudXA6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShwYXRoKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHBhdGgpOgorICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUocGF0aCkKKyAgICAgICAgICAgIHNlbGYuX3RyYWNrX2Zvcl9jbGVhbnVwID0gW10KKworICAgICAgICBzZWxmLnRlYXJEb3duTG9jYWwoKQorCisgICAgZGVmIHRlYXJEb3duTG9jYWwoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgICMgYWRkIHRlc3Qgc3BlY2lmaWMgY29tbWFuZHMgdG8gdGhlIHRlYXJEb3duIG1ldGhvZC4KKyAgICBkZWYgYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oc2VsZiwgY29tbWFuZCk6CisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJBZGRpbmcgY29tbWFuZCAnJXMnIHRvIHRlYXJEb3duIGZvciB0aGlzIHRlc3QuIiAlIGNvbW1hbmQpCisgICAgICAgIHNlbGYuX2V4dHJhX3RlYXJfZG93bl9jb21tYW5kcy5hcHBlbmQoY29tbWFuZCkKKyAgICAjIGFkZCB0ZXN0IHNwZWNpZmljIGZpbGVzIG9yIGRpcmVjdG9yaWVzIHRvIGJlIHJlbW92ZWQgaW4gdGhlIHRlYXJEb3duIG1ldGhvZAorICAgIGRlZiB0cmFja19mb3JfY2xlYW51cChzZWxmLCBwYXRoKToKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIkFkZGluZyBwYXRoICclcycgdG8gYmUgY2xlYW5lZCB1cCB3aGVuIHRlc3QgaXMgb3ZlciIgJSBwYXRoKQorICAgICAgICBzZWxmLl90cmFja19mb3JfY2xlYW51cC5hcHBlbmQocGF0aCkKKworICAgICMgd3JpdGUgdG8gPGJ1aWxkZGlyPi9jb25mL3NlbGZ0ZXN0LmluYworICAgIGRlZiB3cml0ZV9jb25maWcoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJXcml0aW5nIHRvOiAlc1xuJXNcbiIgJSAoc2VsZi50ZXN0aW5jX3BhdGgsIGRhdGEpKQorICAgICAgICBmdG9vbHMud3JpdGVfZmlsZShzZWxmLnRlc3RpbmNfcGF0aCwgZGF0YSkKKworICAgICMgYXBwZW5kIHRvIDxidWlsZGRpcj4vY29uZi9zZWxmdGVzdC5pbmMKKyAgICBkZWYgYXBwZW5kX2NvbmZpZyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIkFwcGVuZGluZyB0bzogJXNcbiVzXG4iICUgKHNlbGYudGVzdGluY19wYXRoLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLmFwcGVuZF9maWxlKHNlbGYudGVzdGluY19wYXRoLCBkYXRhKQorCisgICAgIyByZW1vdmUgZGF0YSBmcm9tIDxidWlsZGRpcj4vY29uZi9zZWxmdGVzdC5pbmMKKyAgICBkZWYgcmVtb3ZlX2NvbmZpZyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIlJlbW92aW5nIGZyb206ICVzXG5cJXNcbiIgJSAoc2VsZi50ZXN0aW5jX3BhdGgsIGRhdGEpKQorICAgICAgICBmdG9vbHMucmVtb3ZlX2Zyb21fZmlsZShzZWxmLnRlc3RpbmNfcGF0aCwgZGF0YSkKKworICAgICMgd3JpdGUgdG8gbWV0YS1zZWZsdGVzdC9yZWNpcGVzLXRlc3QvPHJlY2lwZT4vdGVzdF9yZWNpcGUuaW5jCisgICAgZGVmIHdyaXRlX3JlY2lwZWluYyhzZWxmLCByZWNpcGUsIGRhdGEpOgorICAgICAgICBpbmNfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RsYXllcl9wYXRoLCAncmVjaXBlcy10ZXN0JywgcmVjaXBlLCAndGVzdF9yZWNpcGUuaW5jJykKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIldyaXRpbmcgdG86ICVzXG4lc1xuIiAlIChpbmNfZmlsZSwgZGF0YSkpCisgICAgICAgIGZ0b29scy53cml0ZV9maWxlKGluY19maWxlLCBkYXRhKQorCisgICAgIyBhcHBlbmQgZGF0YSB0byBtZXRhLXNlZmx0ZXN0L3JlY2lwZXMtdGVzdC88cmVjaXBlPi90ZXN0X3JlY2lwZS5pbmMKKyAgICBkZWYgYXBwZW5kX3JlY2lwZWluYyhzZWxmLCByZWNpcGUsIGRhdGEpOgorICAgICAgICBpbmNfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RsYXllcl9wYXRoLCAncmVjaXBlcy10ZXN0JywgcmVjaXBlLCAndGVzdF9yZWNpcGUuaW5jJykKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIkFwcGVuZGluZyB0bzogJXNcbiVzXG4iICUgKGluY19maWxlLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLmFwcGVuZF9maWxlKGluY19maWxlLCBkYXRhKQorCisgICAgIyByZW1vdmUgZGF0YSBmcm9tIG1ldGEtc2VmbHRlc3QvcmVjaXBlcy10ZXN0LzxyZWNpcGU+L3Rlc3RfcmVjaXBlLmluYworICAgIGRlZiByZW1vdmVfcmVjaXBlaW5jKHNlbGYsIHJlY2lwZSwgZGF0YSk6CisgICAgICAgIGluY19maWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGxheWVyX3BhdGgsICdyZWNpcGVzLXRlc3QnLCByZWNpcGUsICd0ZXN0X3JlY2lwZS5pbmMnKQorICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiUmVtb3ZpbmcgZnJvbTogJXNcbiVzXG4iICUgKGluY19maWxlLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLnJlbW92ZV9mcm9tX2ZpbGUoaW5jX2ZpbGUsIGRhdGEpCisKKyAgICAjIGRlbGV0ZSBtZXRhLXNlZmx0ZXN0L3JlY2lwZXMtdGVzdC88cmVjaXBlPi90ZXN0X3JlY2lwZS5pbmMgZmlsZQorICAgIGRlZiBkZWxldGVfcmVjaXBlaW5jKHNlbGYsIHJlY2lwZSk6CisgICAgICAgIGluY19maWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGxheWVyX3BhdGgsICdyZWNpcGVzLXRlc3QnLCByZWNpcGUsICd0ZXN0X3JlY2lwZS5pbmMnKQorICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiRGVsZXRpbmcgZmlsZTogJXMiICUgaW5jX2ZpbGUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnJlbW92ZShpbmNfZmlsZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAjIHdyaXRlIHRvIDxidWlsZGRpcj4vY29uZi9iYmxheWVycy5pbmMKKyAgICBkZWYgd3JpdGVfYmJsYXllcnNfY29uZmlnKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiV3JpdGluZyB0bzogJXNcbiVzXG4iICUgKHNlbGYudGVzdGluY19iYmxheWVyc19wYXRoLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLndyaXRlX2ZpbGUoc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGgsIGRhdGEpCisKKyAgICAjIGFwcGVuZCB0byA8YnVpbGRkaXI+L2NvbmYvYmJsYXllcnMuaW5jCisgICAgZGVmIGFwcGVuZF9iYmxheWVyc19jb25maWcoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJBcHBlbmRpbmcgdG86ICVzXG4lc1xuIiAlIChzZWxmLnRlc3RpbmNfYmJsYXllcnNfcGF0aCwgZGF0YSkpCisgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShzZWxmLnRlc3RpbmNfYmJsYXllcnNfcGF0aCwgZGF0YSkKKworICAgICMgcmVtb3ZlIGRhdGEgZnJvbSA8YnVpbGRkaXI+L2NvbmYvYmJsYXllcnMuaW5jCisgICAgZGVmIHJlbW92ZV9iYmxheWVyc19jb25maWcoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJSZW1vdmluZyBmcm9tOiAlc1xuXCVzXG4iICUgKHNlbGYudGVzdGluY19iYmxheWVyc19wYXRoLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLnJlbW92ZV9mcm9tX2ZpbGUoc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGgsIGRhdGEpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvYmJsYXllcnMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvYmJsYXllcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBjMTdlNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYmxheWVycy5weQpAQCAtMCwwICsxLDYyIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGdldF9iYl92YXIKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBCaXRiYWtlTGF5ZXJzKG9lU2VsZlRlc3QpOgorCisgICAgQHRlc3RjYXNlKDc1NikKKyAgICBkZWYgdGVzdF9iaXRiYWtlbGF5ZXJzX3Nob3djcm9zc2RlcGVuZHMoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1jcm9zcy1kZXBlbmRzJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhc3BlbGwnIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJObyBkZXBlbmRlbmNpZXMgd2VyZSBzaG93bi4gYml0YmFrZS1sYXllcnMgc2hvdy1jcm9zcy1kZXBlbmRzIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSg4MykKKyAgICBkZWYgdGVzdF9iaXRiYWtlbGF5ZXJzX3Nob3dsYXllcnMoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ21ldGEtc2VsZnRlc3QnIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJObyBsYXllcnMgd2VyZSBzaG93bi4gYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMgb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDkzKQorICAgIGRlZiB0ZXN0X2JpdGJha2VsYXllcnNfc2hvd2FwcGVuZHMoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1hcHBlbmRzJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lXzAuMS4xLmJiYXBwZW5kJyBpbiByZXN1bHQub3V0cHV0LCBtc2c9InhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWVfMC4xLjEuYmJhcHBlbmQgZmlsZSB3YXMgbm90IHJlY29nbmlzZWQuICBiaXRiYWtlLWxheWVycyBzaG93LWFwcGVuZHMgb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDkwKQorICAgIGRlZiB0ZXN0X2JpdGJha2VsYXllcnNfc2hvd292ZXJsYXllZChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LW92ZXJsYXllZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYXNwZWxsJyBpbiByZXN1bHQub3V0cHV0LCBtc2c9ImFzcGVsbCBvdmVybGF5ZWQgcmVjaXBlIHdhcyBub3QgcmVjb2duaXNlZCBiaXRiYWtlLWxheWVycyBzaG93LW92ZXJsYXllZCAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDk1KQorICAgIGRlZiB0ZXN0X2JpdGJha2VsYXllcnNfZmxhdHRlbihzZWxmKToKKyAgICAgICAgdGVzdG91dGRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAndGVzdF9iaXRiYWtlbGF5ZXJzX2ZsYXR0ZW4nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguaXNkaXIodGVzdG91dGRpciksIG1zZyA9ICJ0ZXN0X2JpdGJha2VsYXllcnNfZmxhdHRlbiBzaG91bGQgbm90IGV4aXN0IGF0IHRoaXMgcG9pbnQgaW4gdGltZSIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVzdG91dGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBmbGF0dGVuICVzJyAlIHRlc3RvdXRkaXIpCisgICAgICAgIGJiX2ZpbGUgPSBvcy5wYXRoLmpvaW4odGVzdG91dGRpciwgJ3JlY2lwZXMtZ3JhcGhpY3MveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lXzAuMS4xLmJiJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGJiX2ZpbGUpLCBtc2cgPSAiQ2Fubm90IGZpbmQgeGN1cnNvci10cmFuc3BhcmVudC10aGVtZV8wLjEuMS5iYiBpbiB0aGUgdGVzdF9iaXRiYWtlbGF5ZXJzX2ZsYXR0ZW4gbG9jYWwgZGlyLiIpCisgICAgICAgIGNvbnRlbnRzID0gZnRvb2xzLnJlYWRfZmlsZShiYl9maWxlKQorICAgICAgICBmaW5kX2luX2NvbnRlbnRzID0gcmUuc2VhcmNoKCIjIyMjIyBiYmFwcGVuZGVkIGZyb20gbWV0YS1zZWxmdGVzdCAjIyMjI1xuKC4qXG4pKmluY2x1ZGUgdGVzdF9yZWNpcGUuaW5jIiwgY29udGVudHMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kX2luX2NvbnRlbnRzLCBtc2cgPSAiRmxhdHRlbmluZyBsYXllcnMgZGlkIG5vdCB3b3JrLiBiaXRiYWtlLWxheWVycyBmbGF0dGVuIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTk1KQorICAgIGRlZiB0ZXN0X2JpdGJha2VsYXllcnNfYWRkX3JlbW92ZShzZWxmKToKKyAgICAgICAgdGVzdF9sYXllciA9IG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCdDT1JFQkFTRScpLCAnbWV0YS1za2VsZXRvbicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdtZXRhLXNrZWxldG9uJywgcmVzdWx0Lm91dHB1dCwgIlRoaXMgdGVzdCBjYW5ub3QgcnVuIHdpdGggbWV0YS1za2VsZXRvbiBpbiBiYmxheWVycy5jb25mLiBiaXRiYWtlLWxheWVycyBzaG93LWxheWVycyBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgYWRkLWxheWVyICVzJyAlIHRlc3RfbGF5ZXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdtZXRhLXNrZWxldG9uJywgcmVzdWx0Lm91dHB1dCwgbXNnID0gIlNvbWV0aGluZyB3cm9uZyBoYXBwZW5lZC4gbWV0YS1za2VsZXRvbiBsYXllciB3YXMgbm90IGFkZGVkIHRvIGNvbmYvYmJsYXllcnMuY29uZi4gIGJpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgJXMnICUgdGVzdF9sYXllcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LWxheWVycycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ21ldGEtc2tlbGV0b24nLCByZXN1bHQub3V0cHV0LCBtc2cgPSAibWV0YS1za2VsZXRvbiBzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQgYXQgdGhpcyBzdGVwLiAgYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMgb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIGFkZC1sYXllciAlcycgJSB0ZXN0X2xheWVyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbWV0YS1za2VsZXRvbicsIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJTb21ldGhpbmcgd3JvbmcgaGFwcGVuZWQuIG1ldGEtc2tlbGV0b24gbGF5ZXIgd2FzIG5vdCBhZGRlZCB0byBjb25mL2JibGF5ZXJzLmNvbmYuICBiaXRiYWtlLWxheWVycyBzaG93LWxheWVycyBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovbWV0YS1za2VsZXRvbicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdtZXRhLXNrZWxldG9uJywgcmVzdWx0Lm91dHB1dCwgbXNnID0gIm1ldGEtc2tlbGV0b24gc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkIGF0IHRoaXMgc3RlcC4gIGJpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYnRlc3RzLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2JidGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q2ODYwZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYnRlc3RzLnB5CkBAIC0wLDAgKzEsMjAxIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBCaXRiYWtlVGVzdHMob2VTZWxmVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoNzg5KQorICAgIGRlZiB0ZXN0X3J1bl9iaXRiYWtlX2Zyb21fZGlyXzEoc2VsZik6CisgICAgICAgIG9zLmNoZGlyKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnY29uZicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpdGJha2UoJy1lJykuc3RhdHVzLCAwLCBtc2cgPSAiYml0YmFrZSBjb3VsZG4ndCBydW4gZnJvbSBcImNvbmZcIiBkaXIiKQorCisgICAgQHRlc3RjYXNlKDc5MCkKKyAgICBkZWYgdGVzdF9ydW5fYml0YmFrZV9mcm9tX2Rpcl8yKHNlbGYpOgorICAgICAgICBteV9lbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBteV9lbnZbJ0JCUEFUSCddID0gbXlfZW52WydCVUlMRERJUiddCisgICAgICAgIG9zLmNoZGlyKG9zLnBhdGguZGlybmFtZShvcy5lbnZpcm9uWydCVUlMRERJUiddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaXRiYWtlKCctZScsIGVudj1teV9lbnYpLnN0YXR1cywgMCwgbXNnID0gImJpdGJha2UgY291bGRuJ3QgcnVuIGZyb20gYnVpbGRkaXIiKQorCisgICAgQHRlc3RjYXNlKDgwNikKKyAgICBkZWYgdGVzdF9ldmVudF9oYW5kbGVyKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiSU5IRVJJVCArPSBcInRlc3RfZXZlbnRzXCIiKQorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCdtNC1uYXRpdmUnKQorICAgICAgICBmaW5kX2J1aWxkX3N0YXJ0ZWQgPSByZS5zZWFyY2goIk5PVEU6IFRlc3QgZm9yIGJiXC5ldmVudFwuQnVpbGRTdGFydGVkKFxuLiopKk5PVEU6IFByZXBhcmluZyBSdW5RdWV1ZSIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIGZpbmRfYnVpbGRfY29tcGxldGVkID0gcmUuc2VhcmNoKCJUYXNrcyBTdW1tYXJ5Oi4qKFxuLiopKk5PVEU6IFRlc3QgZm9yIGJiXC5ldmVudFwuQnVpbGRDb21wbGV0ZWQiLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluZF9idWlsZF9zdGFydGVkLCBtc2cgPSAiTWF0Y2ggZmFpbGVkIGluOlxuJXMiICAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kX2J1aWxkX2NvbXBsZXRlZCwgbXNnID0gIk1hdGNoIGZhaWxlZCBpbjpcbiVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoJ1Rlc3QgZm9yIGJiLmV2ZW50LkludmFsaWRFdmVudCcgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gIlwiVGVzdCBmb3IgYmIuZXZlbnQuSW52YWxpZEV2ZW50XCIgbWVzc2FnZSBmb3VuZCBkdXJpbmcgYml0YmFrZSBwcm9jZXNzLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMDMpCisgICAgZGVmIHRlc3RfbG9jYWxfc3N0YXRlKHNlbGYpOgorICAgICAgICBiaXRiYWtlKCdtNC1uYXRpdmUgLWNjbGVhbnNzdGF0ZScpCisgICAgICAgIGJpdGJha2UoJ200LW5hdGl2ZScpCisgICAgICAgIGJpdGJha2UoJ200LW5hdGl2ZSAtY2NsZWFuJykKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnbTQtbmF0aXZlJykKKyAgICAgICAgZmluZF9zZXRzY2VuZSA9IHJlLnNlYXJjaCgibTQtbmF0aXZlLipkb18uKl9zZXRzY2VuZSIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kX3NldHNjZW5lLCBtc2cgPSAiTm8gXCJtNC1uYXRpdmUuKmRvXy4qX3NldHNjZW5lXCIgbWVzc2FnZSBmb3VuZCBkdXJpbmcgYml0YmFrZSBtNC1uYXRpdmUuIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0ICkKKworICAgIEB0ZXN0Y2FzZSgxMDUpCisgICAgZGVmIHRlc3RfYml0YmFrZV9pbnZhbGlkX3JlY2lwZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnLWIgYXNkZicsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJFUlJPUjogVW5hYmxlIHRvIGZpbmQgYW55IHJlY2lwZSBmaWxlIG1hdGNoaW5nICdhc2RmJyIgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gIlRob3VnaCBhc2RmIHJlY2lwZSBkb2Vzbid0IGV4aXN0LCBiaXRiYWtlIGRpZG4ndCBvdXRwdXQgYW55IGVyci4gbWVzc2FnZS4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTA3KQorICAgIGRlZiB0ZXN0X2JpdGJha2VfaW52YWxpZF90YXJnZXQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJ2FzZGYnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiRVJST1I6IE5vdGhpbmcgUFJPVklERVMgJ2FzZGYnIiBpbiByZXN1bHQub3V0cHV0LCBtc2cgPSAiVGhvdWdoIG5vICdhc2RmJyB0YXJnZXQgZXhpc3RzLCBiaXRiYWtlIGRpZG4ndCBvdXRwdXQgYW55IGVyci4gbWVzc2FnZS4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTA2KQorICAgIGRlZiB0ZXN0X3dhcm5pbmdzX2Vycm9ycyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnLWIgYXNkZicsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgZmluZF93YXJuaW5ncyA9IHJlLnNlYXJjaCgiU3VtbWFyeTogVGhlcmUgdy57MiwzfT8gWzEtOV1bMC05XSogV0FSTklORyBtZXNzYWdlcyogc2hvd24iLCByZXN1bHQub3V0cHV0KQorICAgICAgICBmaW5kX2Vycm9ycyA9IHJlLnNlYXJjaCgiU3VtbWFyeTogVGhlcmUgdy57MiwzfT8gWzEtOV1bMC05XSogRVJST1IgbWVzc2FnZXMqIHNob3duIiwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRfd2FybmluZ3MsIG1zZz0iRGlkIG5vdCBmaW5kIHRoZSBtdW1iZXIgb2Ygd2FybmluZ3MgYXQgdGhlIGVuZCBvZiB0aGUgYnVpbGQ6XG4iICsgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRfZXJyb3JzLCBtc2c9IkRpZCBub3QgZmluZCB0aGUgbXVtYmVyIG9mIGVycm9ycyBhdCB0aGUgZW5kIG9mIHRoZSBidWlsZDpcbiIgKyByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEwOCkKKyAgICBkZWYgdGVzdF9pbnZhbGlkX3BhdGNoKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYygnbWFuJywgJ1NSQ19VUkkgKz0gImZpbGU6Ly9tYW4tMS41aDEtbWFrZS5wYXRjaCInKQorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCdtYW4gLWMgcGF0Y2gnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuZGVsZXRlX3JlY2lwZWluYygnbWFuJykKKyAgICAgICAgYml0YmFrZSgnLWNjbGVhbiBtYW4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIkVSUk9SOiBGdW5jdGlvbiBmYWlsZWQ6IHBhdGNoX2RvX3BhdGNoIiBpbiByZXN1bHQub3V0cHV0LCBtc2cgPSAiVGhvdWdoIG5vIG1hbi0xLjVoMS1tYWtlLnBhdGNoIGZpbGUgZXhpc3RzLCBiaXRiYWtlIGRpZG4ndCBvdXRwdXQgYW55IGVyci4gbWVzc2FnZS4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTYzKQorICAgIGRlZiB0ZXN0X2ZvcmNlX3Rhc2soc2VsZik6CisgICAgICAgIGJpdGJha2UoJ200LW5hdGl2ZScpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW4gbTQtbmF0aXZlJykKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnLUMgY29tcGlsZSBtNC1uYXRpdmUnKQorICAgICAgICBsb29rX2Zvcl90YXNrcyA9IFsnZG9fY29tcGlsZScsICdkb19pbnN0YWxsJywgJ2RvX3BvcHVsYXRlX3N5c3Jvb3QnXQorICAgICAgICBmb3IgdGFzayBpbiBsb29rX2Zvcl90YXNrczoKKyAgICAgICAgICAgIGZpbmRfdGFzayA9IHJlLnNlYXJjaCgibTQtbmF0aXZlLiolcyIgJSB0YXNrLCByZXN1bHQub3V0cHV0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRfdGFzaywgbXNnID0gIkNvdWxkbid0IGZpbmQgJXMgdGFzay4gYml0YmFrZSBvdXRwdXQgJXMiICUgKHRhc2ssIHJlc3VsdC5vdXRwdXQpKQorCisgICAgQHRlc3RjYXNlKDE2NykKKyAgICBkZWYgdGVzdF9iaXRiYWtlX2coc2VsZik6CisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJy1nIGNvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lJykKKyAgICAgICAgZm9yIGYgaW4gWydwbi1idWlsZGxpc3QnLCAncG4tZGVwZW5kcy5kb3QnLCAncGFja2FnZS1kZXBlbmRzLmRvdCcsICd0YXNrLWRlcGVuZHMuZG90J106CisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAob3MucmVtb3ZlLCBmKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ05PVEU6IFBOIGJ1aWxkIGxpc3Qgc2F2ZWQgdG8gXCdwbi1idWlsZGxpc3RcJycgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gIk5vIGRlcGVuZGVuY3kgXCJwbi1idWlsZGxpc3RcIiBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIHRoZSBnaXZlbiB0YXNrIHRhcmdldC4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnb3BlbnNzaCcgaW4gZnRvb2xzLnJlYWRfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3BuLWJ1aWxkbGlzdCcpKSwgbXNnID0gIk5vIFwib3BlbnNzaFwiIGRlcGVuZGVuY3kgZm91bmQgaW4gcG4tYnVpbGRsaXN0IGZpbGUuIikKKworICAgIEB0ZXN0Y2FzZSg4OTkpCisgICAgZGVmIHRlc3RfaW1hZ2VfbWFuaWZlc3Qoc2VsZik6CisgICAgICAgIGJpdGJha2UoJ2NvcmUtaW1hZ2UtbWluaW1hbCcpCisgICAgICAgIGRlcGxveWRpciA9IGdldF9iYl92YXIoIkRFUExPWV9ESVJfSU1BR0UiLCB0YXJnZXQ9ImNvcmUtaW1hZ2UtbWluaW1hbCIpCisgICAgICAgIGltYWdlbmFtZSA9IGdldF9iYl92YXIoIklNQUdFX0xJTktfTkFNRSIsIHRhcmdldD0iY29yZS1pbWFnZS1taW5pbWFsIikKKyAgICAgICAgbWFuaWZlc3QgPSBvcy5wYXRoLmpvaW4oZGVwbG95ZGlyLCBpbWFnZW5hbWUgKyAiLm1hbmlmZXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNsaW5rKG1hbmlmZXN0KSwgbXNnPSJObyBtYW5pZmVzdCBmaWxlIGNyZWF0ZWQgZm9yIGltYWdlLiBJdCBzaG91bGQgaGF2ZSBiZWVuIGNyZWF0ZWQgaW4gJXMiICUgbWFuaWZlc3QpCisKKyAgICBAdGVzdGNhc2UoMTY4KQorICAgIGRlZiB0ZXN0X2ludmFsaWRfcmVjaXBlX3NyY191cmkoc2VsZik6CisgICAgICAgIGRhdGEgPSAnU1JDX1VSSSA9ICJmaWxlOi8vaW52YWxpZCInCisgICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKCdtYW4nLCBkYXRhKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiJETF9ESVIgPSBcIiR7VE9QRElSfS9kb3dubG9hZC1zZWxmdGVzdFwiCitTU1RBVEVfRElSID0gXCIke1RPUERJUn0vZG93bmxvYWQtc2VsZnRlc3RcIgorIiIiKQorICAgICAgICBiaXRiYWtlKCctY2NsZWFuYWxsIG1hbicpCisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJy1jIGZldGNoIG1hbicsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgYml0YmFrZSgnLWNjbGVhbmFsbCBtYW4nKQorICAgICAgICBzZWxmLmRlbGV0ZV9yZWNpcGVpbmMoJ21hbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMSwgbXNnPSJDb21tYW5kIHN1Y2NlZGVkIHdoZW4gaXQgc2hvdWxkIGhhdmUgZmFpbGVkLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdGZXRjaGVyIGZhaWx1cmU6IFVuYWJsZSB0byBmaW5kIGZpbGUgZmlsZTovL2ludmFsaWQgYW55d2hlcmUuIFRoZSBwYXRocyB0aGF0IHdlcmUgc2VhcmNoZWQgd2VyZTonIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJcImludmFsaWRcIiBmaWxlIFwKK2RvZXNuJ3QgZXhpc3QsIHlldCBubyBlcnJvciBtZXNzYWdlIGVuY291bnRlcmVkLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdFUlJPUjogRnVuY3Rpb24gZmFpbGVkOiBGZXRjaGVyIGZhaWx1cmUgZm9yIFVSTDogXCdmaWxlOi8vaW52YWxpZFwnLiBVbmFibGUgdG8gZmV0Y2ggVVJMIGZyb20gYW55IHNvdXJjZS4nIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJcImludmFsaWRcIiBmaWxlIFwKK2RvZXNuJ3QgZXhpc3QsIHlldCBmZXRjaGVyIGRpZG4ndCByZXBvcnQgYW55IGVycm9yLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxNzEpCisgICAgZGVmIHRlc3RfcmVuYW1lX2Rvd25sb2FkZWRfZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiRExfRElSID0gXCIke1RPUERJUn0vZG93bmxvYWQtc2VsZnRlc3RcIgorU1NUQVRFX0RJUiA9IFwiJHtUT1BESVJ9L2Rvd25sb2FkLXNlbGZ0ZXN0XCIKKyIiIikKKyAgICAgICAgZGF0YSA9ICdTUkNfVVJJX2FwcGVuZCA9ICI7ZG93bmxvYWRmaWxlbmFtZT10ZXN0LWFzcGVsbC50YXIuZ3oiJworICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYygnYXNwZWxsJywgZGF0YSkKKyAgICAgICAgYml0YmFrZSgnLWNjbGVhbmFsbCBhc3BlbGwnKQorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCctYyBmZXRjaCBhc3BlbGwnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuZGVsZXRlX3JlY2lwZWluYygnYXNwZWxsJykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGJpdGJha2UsICctY2NsZWFuYWxsIGFzcGVsbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMCwgbXNnID0gIkNvdWxkbid0IGZldGNoIGFzcGVsbC4gJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCJETF9ESVIiKSwgJ3Rlc3QtYXNwZWxsLnRhci5neicpKSwgbXNnID0gIkZpbGUgcmVuYW1lIGZhaWxlZC4gTm8gY29ycmVzcG9uZGluZyB0ZXN0LWFzcGVsbC50YXIuZ3ogZmlsZSBmb3VuZCB1bmRlciAlcyIgJSBzdHIoZ2V0X2JiX3ZhcigiRExfRElSIikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGdldF9iYl92YXIoIkRMX0RJUiIpLCAndGVzdC1hc3BlbGwudGFyLmd6LmRvbmUnKSksICJGaWxlIHJlbmFtZSBmYWlsZWQuIE5vIGNvcnJlc3BvbmRpbmcgdGVzdC1hc3BlbGwudGFyLmd6LmRvbmUgZmlsZSBmb3VuZCB1bmRlciAlcyIgJSBzdHIoZ2V0X2JiX3ZhcigiRExfRElSIikpKQorCisgICAgQHRlc3RjYXNlKDEwMjgpCisgICAgZGVmIHRlc3RfZW52aXJvbm1lbnQoc2VsZik6CisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZygiVEVTVF9FTlY9XCJsb2NhbGNvbmZcIiIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLnJlbW92ZV9jb25maWcsICJURVNUX0VOVj1cImxvY2FsY29uZlwiIikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1lIHwgZ3JlcCBURVNUX0VOVj0nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2xvY2FsY29uZicgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gImJpdGJha2UgZGlkbid0IHJlcG9ydCBhbnkgdmFsdWUgZm9yIFRFU1RfRU5WIHZhcmlhYmxlLiBUbyB0ZXN0LCBydW4gJ2JpdGJha2UgLWUgfCBncmVwIFRFU1RfRU5WPSciKQorCisgICAgQHRlc3RjYXNlKDEwMjkpCisgICAgZGVmIHRlc3RfZHJ5X3J1bihzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1uIG00LW5hdGl2ZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVzdWx0LnN0YXR1cywgImJpdGJha2UgZHJ5IHJ1biBkaWRuJ3QgcnVuIGFzIGV4cGVjdGVkLiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEwMzApCisgICAgZGVmIHRlc3RfanVzdF9wYXJzZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1wJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCByZXN1bHQuc3RhdHVzLCAiZXJyb3JzIGVuY291bnRlcmVkIHdoZW4gcGFyc2luZyByZWNpcGVzLiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEwMzEpCisgICAgZGVmIHRlc3RfdmVyc2lvbihzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1zIHwgZ3JlcCB3Z2V0JykKKyAgICAgICAgZmluZCA9IHJlLnNlYXJjaCgid2dldCAqOihbMC05YS16QS1aXC5cLV0rKSIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kLCAiTm8gdmVyc2lvbiByZXR1cm5lZCBmb3Igc2VhcmNoZWQgcmVjaXBlLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMDMyKQorICAgIGRlZiB0ZXN0X3ByZWZpbGUoc2VsZik6CisgICAgICAgIHByZWNvbmYgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ2NvbmYvcHJlZmlsZS5jb25mJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChwcmVjb25mKQorICAgICAgICBmdG9vbHMud3JpdGVfZmlsZShwcmVjb25mICwiVEVTVF9QUkVGSUxFPVwicHJlZmlsZVwiIikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1yIGNvbmYvcHJlZmlsZS5jb25mIC1lIHwgZ3JlcCBURVNUX1BSRUZJTEU9JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdwcmVmaWxlJyBpbiByZXN1bHQub3V0cHV0LCAiUHJlY29uZmlndXJlIGZpbGUgXCJwcmVmaWxlLmNvbmZcIndhcyBub3QgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiAiKQorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoIlRFU1RfUFJFRklMRT1cImxvY2FsY29uZlwiIikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlbGYucmVtb3ZlX2NvbmZpZywgIlRFU1RfUFJFRklMRT1cImxvY2FsY29uZlwiIikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1yIGNvbmYvcHJlZmlsZS5jb25mIC1lIHwgZ3JlcCBURVNUX1BSRUZJTEU9JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdsb2NhbGNvbmYnIGluIHJlc3VsdC5vdXRwdXQsICJQcmVjb25maWd1cmUgZmlsZSBcInByZWZpbGUuY29uZlwid2FzIG5vdCB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIikKKworICAgIEB0ZXN0Y2FzZSgxMDMzKQorICAgIGRlZiB0ZXN0X3Bvc3RmaWxlKHNlbGYpOgorICAgICAgICBwb3N0Y29uZiA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnY29uZi9wb3N0ZmlsZS5jb25mJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChwb3N0Y29uZikKKyAgICAgICAgZnRvb2xzLndyaXRlX2ZpbGUocG9zdGNvbmYgLCAiVEVTVF9QT1NURklMRT1cInBvc3RmaWxlXCIiKQorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoIlRFU1RfUE9TVEZJTEU9XCJsb2NhbGNvbmZcIiIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLnJlbW92ZV9jb25maWcsICJURVNUX1BPU1RGSUxFPVwibG9jYWxjb25mXCIiKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UgLVIgY29uZi9wb3N0ZmlsZS5jb25mIC1lIHwgZ3JlcCBURVNUX1BPU1RGSUxFPScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgncG9zdGZpbGUnIGluIHJlc3VsdC5vdXRwdXQsICJQb3N0Y29uZmlndXJlIGZpbGUgXCJwb3N0ZmlsZS5jb25mXCJ3YXMgbm90IHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4iKQorCisgICAgQHRlc3RjYXNlKDEwMzQpCisgICAgZGVmIHRlc3RfY2hlY2t1cmkoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZSAtYyBjaGVja3VyaSBtNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVzdWx0LnN0YXR1cywgbXNnID0gIlwiY2hlY2t1cmlcIiB0YXNrIHdhcyBub3QgZXhlY3V0ZWQuIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEwMzUpCisgICAgZGVmIHRlc3RfY29udGludWUoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIkRMX0RJUiA9IFwiJHtUT1BESVJ9L2Rvd25sb2FkLXNlbGZ0ZXN0XCIKK1NTVEFURV9ESVIgPSBcIiR7VE9QRElSfS9kb3dubG9hZC1zZWxmdGVzdFwiCisiIiIpCisgICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKCdtYW4nLCJcbmRvX2ZhaWxfdGFzayAoKSB7XG5leGl0IDEgXG59XG5cbmFkZHRhc2sgZG9fZmFpbF90YXNrIGJlZm9yZSBkb19mZXRjaFxuIiApCisgICAgICAgIHJ1bkNtZCgnYml0YmFrZSAtYyBjbGVhbmFsbCBtYW4geGN1cnNvci10cmFuc3BhcmVudC10aGVtZScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZSBtYW4geGN1cnNvci10cmFuc3BhcmVudC10aGVtZSAtaycsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgZXJyb3Jwb3MgPSByZXN1bHQub3V0cHV0LmZpbmQoJ0VSUk9SOiBGdW5jdGlvbiBmYWlsZWQ6IGRvX2ZhaWxfdGFzaycpCisgICAgICAgIG1hbnZlciA9IHJlLnNlYXJjaCgiTk9URTogcmVjaXBlIHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtKC4qPyk6IHRhc2sgZG9fdW5wYWNrOiBTdGFydGVkIiwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgY29udGludWVwb3MgPSByZXN1bHQub3V0cHV0LmZpbmQoJ05PVEU6IHJlY2lwZSB4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLSVzOiB0YXNrIGRvX3VucGFjazogU3RhcnRlZCcgJSBtYW52ZXIuZ3JvdXAoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhlcnJvcnBvcyxjb250aW51ZXBvcywgbXNnID0gImJpdGJha2UgZGlkbid0IHBhc3MgZG9fZmFpbF90YXNrLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTE5KQorICAgIGRlZiB0ZXN0X25vbl9ncGx2MyhzZWxmKToKKyAgICAgICAgZGF0YSA9ICdJTkNPTVBBVElCTEVfTElDRU5TRSA9ICJHUEx2MyInCisgICAgICAgIGNvbmYgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ2NvbmYvbG9jYWwuY29uZicpCisgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShjb25mICxkYXRhKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoZnRvb2xzLnJlbW92ZV9mcm9tX2ZpbGUsIGNvbmYgLGRhdGEpCisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJ3JlYWRsaW5lJywgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsICJCaXRiYWtlIGZhaWxlZCwgZXhpdCBjb2RlICVzLCBvdXRwdXQgJXMiICUgKHJlc3VsdC5zdGF0dXMsIHJlc3VsdC5vdXRwdXQpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAndG1wL2RlcGxveS9saWNlbnNlcy9yZWFkbGluZS9nZW5lcmljX0dQTHYzJykpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd0bXAvZGVwbG95L2xpY2Vuc2VzL3JlYWRsaW5lL2dlbmVyaWNfR1BMdjInKSkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvYnVpbGRoaXN0b3J5LnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2J1aWxkaGlzdG9yeS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGNhZTQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2J1aWxkaGlzdG9yeS5weQpAQCAtMCwwICsxLDQ1IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgZGF0ZXRpbWUKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgQ29tbWFuZCwgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBnZXRfdGVzdF9sYXllcgorCisKK2NsYXNzIEJ1aWxkaGlzdG9yeUJhc2Uob2VTZWxmVGVzdCk6CisKKyAgICBkZWYgY29uZmlnX2J1aWxkaGlzdG9yeShzZWxmLCB0bXBfYmhfbG9jYXRpb249RmFsc2UpOgorICAgICAgICBpZiAobm90ICdidWlsZGhpc3RvcnknIGluIGdldF9iYl92YXIoJ1VTRVJfQ0xBU1NFUycpKSBhbmQgKG5vdCAnYnVpbGRoaXN0b3J5JyBpbiBnZXRfYmJfdmFyKCdJTkhFUklUJykpOgorICAgICAgICAgICAgYWRkX2J1aWxkaGlzdG9yeV9jb25maWcgPSAnSU5IRVJJVCArPSAiYnVpbGRoaXN0b3J5IlxuQlVJTERISVNUT1JZX0NPTU1JVCA9ICIxIicKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhhZGRfYnVpbGRoaXN0b3J5X2NvbmZpZykKKworICAgICAgICBpZiB0bXBfYmhfbG9jYXRpb246CisgICAgICAgICAgICAjIFVzaW5nIGEgdGVtcG9yYXJ5IGJ1aWxkaGlzdG9yeSBsb2NhdGlvbiBmb3IgdGVzdGluZworICAgICAgICAgICAgdG1wX2JoX2RpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAidG1wX2J1aWxkaGlzdG9yeV8lcyIgJSBkYXRldGltZS5kYXRldGltZS5ub3coKS5zdHJmdGltZSgnJVklbSVkJUglTSVTJykpCisgICAgICAgICAgICBidWlsZGhpc3RvcnlfZGlyX2NvbmZpZyA9ICJCVUlMREhJU1RPUllfRElSID0gXCIlc1wiIiAlIHRtcF9iaF9kaXIKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhidWlsZGhpc3RvcnlfZGlyX2NvbmZpZykKKyAgICAgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodG1wX2JoX2RpcikKKworICAgIGRlZiBydW5fYnVpbGRoaXN0b3J5X29wZXJhdGlvbihzZWxmLCB0YXJnZXQsIGdsb2JhbF9jb25maWc9JycsIHRhcmdldF9jb25maWc9JycsIGNoYW5nZV9iaF9sb2NhdGlvbj1GYWxzZSwgZXhwZWN0X2Vycm9yPUZhbHNlLCBlcnJvcl9yZWdleD0nJyk6CisgICAgICAgIGlmIGNoYW5nZV9iaF9sb2NhdGlvbjoKKyAgICAgICAgICAgIHRtcF9iaF9sb2NhdGlvbiA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRtcF9iaF9sb2NhdGlvbiA9IEZhbHNlCisgICAgICAgIHNlbGYuY29uZmlnX2J1aWxkaGlzdG9yeSh0bXBfYmhfbG9jYXRpb24pCisKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGdsb2JhbF9jb25maWcpCisgICAgICAgIHNlbGYuYXBwZW5kX3JlY2lwZWluYyh0YXJnZXQsIHRhcmdldF9jb25maWcpCisgICAgICAgIGJpdGJha2UoIi1jY2xlYW4gJXMiICUgdGFyZ2V0KQorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKHRhcmdldCwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLnJlbW92ZV9jb25maWcoZ2xvYmFsX2NvbmZpZykKKyAgICAgICAgc2VsZi5yZW1vdmVfcmVjaXBlaW5jKHRhcmdldCwgdGFyZ2V0X2NvbmZpZykKKworICAgICAgICBpZiBleHBlY3RfZXJyb3I6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDEsIG1zZz0iRXJyb3IgZXhwZWN0ZWQgZm9yIGdsb2JhbCBjb25maWcgJyVzJyBhbmQgdGFyZ2V0IGNvbmZpZyAnJXMnIiAlIChnbG9iYWxfY29uZmlnLCB0YXJnZXRfY29uZmlnKSkKKyAgICAgICAgICAgIHNlYXJjaF9mb3JfZXJyb3IgPSByZS5zZWFyY2goZXJyb3JfcmVnZXgsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VhcmNoX2Zvcl9lcnJvciwgbXNnPSJDb3VsZCBub3QgZmluZCBkZXNpcmVkIGVycm9yIGluIG91dHB1dDogJXMiICUgZXJyb3JfcmVnZXgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsIG1zZz0iQ29tbWFuZCAnYml0YmFrZSAlcycgaGFzIGZhaWxlZCB1bmV4cGVjdGVkbHk6ICVzIiAlICh0YXJnZXQsIHJlc3VsdC5vdXRwdXQpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2J1aWxkb3B0aW9ucy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9idWlsZG9wdGlvbnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgzODAzYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9idWlsZG9wdGlvbnMucHkKQEAgLTAsMCArMSwxNDkgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHJlCitpbXBvcnQgZ2xvYiBhcyBnCitpbXBvcnQgcGV4cGVjdCBhcyBwCisKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEuc2VsZnRlc3QuYnVpbGRoaXN0b3J5IGltcG9ydCBCdWlsZGhpc3RvcnlCYXNlCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhcgoraW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCisKK2NsYXNzIEltYWdlT3B0aW9uc1Rlc3RzKG9lU2VsZlRlc3QpOgorCisgICAgQHRlc3RjYXNlKDc2MSkKKyAgICBkZWYgdGVzdF9pbmNyZW1lbnRhbF9pbWFnZV9nZW5lcmF0aW9uKHNlbGYpOgorICAgICAgICBpbWFnZV9wa2d0eXBlID0gZ2V0X2JiX3ZhcigiSU1BR0VfUEtHVFlQRSIpCisgICAgICAgIGlmIGltYWdlX3BrZ3R5cGUgIT0gJ3JwbSc6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdOb3QgdXNpbmcgUlBNIGFzIG1haW4gcGFja2FnZSBmb3JtYXQnKQorICAgICAgICBiaXRiYWtlKCItYyBjbGVhbmFsbCBjb3JlLWltYWdlLW1pbmltYWwiKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygnSU5DX1JQTV9JTUFHRV9HRU4gPSAiMSInKQorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoJ0lNQUdFX0ZFQVRVUkVTICs9ICJzc2gtc2VydmVyLW9wZW5zc2giJykKKyAgICAgICAgYml0YmFrZSgiY29yZS1pbWFnZS1taW5pbWFsIikKKyAgICAgICAgbG9nX2RhdGFfZmlsZSA9IG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCJXT1JLRElSIiwgImNvcmUtaW1hZ2UtbWluaW1hbCIpLCAidGVtcC9sb2cuZG9fcm9vdGZzIikKKyAgICAgICAgbG9nX2RhdGFfY3JlYXRlZCA9IGZ0b29scy5yZWFkX2ZpbGUobG9nX2RhdGFfZmlsZSkKKyAgICAgICAgaW5jcmVtZW50YWxfY3JlYXRlZCA9IHJlLnNlYXJjaCgiTk9URTogbG9hZCBvbGQgaW5zdGFsbCBzb2x1dGlvbiBmb3IgaW5jcmVtZW50YWwgaW5zdGFsbFxuTk9URTogb2xkIGluc3RhbGwgc29sdXRpb24gbm90IGV4aXN0XG5OT1RFOiBjcmVhdGluZyBuZXcgaW5zdGFsbCBzb2x1dGlvbiBmb3IgaW5jcmVtZW50YWwgaW5zdGFsbChcbi4qKSpOT1RFOiBJbnN0YWxsaW5nIHRoZSBmb2xsb3dpbmcgcGFja2FnZXM6LipwYWNrYWdlZ3JvdXAtY29yZS1zc2gtb3BlbnNzaCIsIGxvZ19kYXRhX2NyZWF0ZWQpCisgICAgICAgIHNlbGYucmVtb3ZlX2NvbmZpZygnSU1BR0VfRkVBVFVSRVMgKz0gInNzaC1zZXJ2ZXItb3BlbnNzaCInKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5jcmVtZW50YWxfY3JlYXRlZCwgbXNnID0gIk1hdGNoIGZhaWxlZCBpbjpcbiVzIiAlIGxvZ19kYXRhX2NyZWF0ZWQpCisgICAgICAgIGJpdGJha2UoImNvcmUtaW1hZ2UtbWluaW1hbCIpCisgICAgICAgIGxvZ19kYXRhX3JlbW92ZWQgPSBmdG9vbHMucmVhZF9maWxlKGxvZ19kYXRhX2ZpbGUpCisgICAgICAgIGluY3JlbWVudGFsX3JlbW92ZWQgPSByZS5zZWFyY2goIk5PVEU6IGxvYWQgb2xkIGluc3RhbGwgc29sdXRpb24gZm9yIGluY3JlbWVudGFsIGluc3RhbGxcbk5PVEU6IGNyZWF0aW5nIG5ldyBpbnN0YWxsIHNvbHV0aW9uIGZvciBpbmNyZW1lbnRhbCBpbnN0YWxsKFxuLiopKk5PVEU6IGluY3JlbWVudGFsIHJlbW92ZWQ6LipvcGVuc3NoLXNzaGQtLioiLCBsb2dfZGF0YV9yZW1vdmVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5jcmVtZW50YWxfcmVtb3ZlZCwgbXNnID0gIk1hdGNoIGZhaWxlZCBpbjpcbiVzIiAlIGxvZ19kYXRhX3JlbW92ZWQpCisKKyAgICBAdGVzdGNhc2UoOTI1KQorICAgIGRlZiB0ZXN0X3JtX29sZF9pbWFnZShzZWxmKToKKyAgICAgICAgYml0YmFrZSgiY29yZS1pbWFnZS1taW5pbWFsIikKKyAgICAgICAgZGVwbG95ZGlyID0gZ2V0X2JiX3ZhcigiREVQTE9ZX0RJUl9JTUFHRSIsIHRhcmdldD0iY29yZS1pbWFnZS1taW5pbWFsIikKKyAgICAgICAgaW1hZ2VuYW1lID0gZ2V0X2JiX3ZhcigiSU1BR0VfTElOS19OQU1FIiwgdGFyZ2V0PSJjb3JlLWltYWdlLW1pbmltYWwiKQorICAgICAgICBkZXBsb3lkaXJfZmlsZXMgPSBvcy5saXN0ZGlyKGRlcGxveWRpcikKKyAgICAgICAgdHJhY2tfb3JpZ2luYWxfZmlsZXMgPSBbXQorICAgICAgICBmb3IgaW1hZ2VfZmlsZSBpbiBkZXBsb3lkaXJfZmlsZXM6CisgICAgICAgICAgICBpZiBpbWFnZW5hbWUgaW4gaW1hZ2VfZmlsZSBhbmQgb3MucGF0aC5pc2xpbmsob3MucGF0aC5qb2luKGRlcGxveWRpciwgaW1hZ2VfZmlsZSkpOgorICAgICAgICAgICAgICAgIHRyYWNrX29yaWdpbmFsX2ZpbGVzLmFwcGVuZChvcy5wYXRoLnJlYWxwYXRoKG9zLnBhdGguam9pbihkZXBsb3lkaXIsIGltYWdlX2ZpbGUpKSkKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKCJSTV9PTERfSU1BR0UgPSBcIjFcIiIpCisgICAgICAgIGJpdGJha2UoIi1DIHJvb3RmcyBjb3JlLWltYWdlLW1pbmltYWwiKQorICAgICAgICBkZXBsb3lkaXJfZmlsZXMgPSBvcy5saXN0ZGlyKGRlcGxveWRpcikKKyAgICAgICAgcmVtYWluaW5nX25vdF9leHBlY3RlZCA9IFtwYXRoIGZvciBwYXRoIGluIHRyYWNrX29yaWdpbmFsX2ZpbGVzIGlmIG9zLnBhdGguYmFzZW5hbWUocGF0aCkgaW4gZGVwbG95ZGlyX2ZpbGVzXQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlbWFpbmluZ19ub3RfZXhwZWN0ZWQsIG1zZz0iXG5UaGUgZm9sbG93aW5nIGltYWdlIGZpbGVzIHdlcmUgbm90IHJlbW92ZWQ6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCByZW1haW5pbmdfbm90X2V4cGVjdGVkKSkpCisKKyAgICBAdGVzdGNhc2UoMjg2KQorICAgIGRlZiB0ZXN0X2NjYWNoZV90b29sKHNlbGYpOgorICAgICAgICBiaXRiYWtlKCJjY2FjaGUtbmF0aXZlIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCdTVEFHSU5HX0JJTkRJUl9OQVRJVkUnLCAnY2NhY2hlLW5hdGl2ZScpLCAiY2NhY2hlIikpLCBtc2cgPSAiTm8gY2NhY2hlIGZvdW5kIHVuZGVyICVzIiAlIHN0cihnZXRfYmJfdmFyKCdTVEFHSU5HX0JJTkRJUl9OQVRJVkUnLCAnY2NhY2hlLW5hdGl2ZScpKSkKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoJ0lOSEVSSVQgKz0gImNjYWNoZSInKQorICAgICAgICBiaXRiYWtlKCJtNCAtYyBjbGVhbnNzdGF0ZSIpCisgICAgICAgIGJpdGJha2UoIm00IC1jIGNvbXBpbGUiKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoYml0YmFrZSwgJ2NjYWNoZS1uYXRpdmUgLWNjbGVhbnNzdGF0ZScpCisgICAgICAgIHJlcyA9IHJ1bkNtZCgiZ3JlcCBjY2FjaGUgJXMiICUgKG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCJXT1JLRElSIiwibTQiKSwidGVtcC9sb2cuZG9fY29tcGlsZSIpKSwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJlcy5zdGF0dXMsIG1zZz0iTm8gbWF0Y2ggZm9yIGNjYWNoZSBpbiBtNCBsb2cuZG9fY29tcGlsZS4gRm9yIGZ1cnRoZXIgZGV0YWlsczogJXMiICUgb3MucGF0aC5qb2luKGdldF9iYl92YXIoIldPUktESVIiLCJtNCIpLCJ0ZW1wL2xvZy5kb19jb21waWxlIikpCisKKworY2xhc3MgRGlza01vblRlc3Qob2VTZWxmVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMjc3KQorICAgIGRlZiB0ZXN0X3N0b3B0YXNrX2JlaGF2aW9yKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygnQkJfRElTS01PTl9ESVJTID0gIlNUT1BUQVNLUywke1RNUERJUn0sMTAwMDAwRywxMDBLIicpCisgICAgICAgIHJlcyA9IGJpdGJha2UoIm00IiwgaWdub3JlX3N0YXR1cyA9IFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnRVJST1I6IE5vIG5ldyB0YXNrcyBjYW4gYmUgZXhlY3V0ZWQgc2luY2UgdGhlIGRpc2sgc3BhY2UgbW9uaXRvciBhY3Rpb24gaXMgIlNUT1BUQVNLUyIhJyBpbiByZXMub3V0cHV0LCBtc2cgPSAiVGFza3Mgc2hvdWxkIGhhdmUgc3RvcHBlZC4gRGlzayBtb25pdG9yIGlzIHNldCB0byBTVE9QVEFTSzogJXMiICUgcmVzLm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCAxLCBtc2cgPSAiYml0YmFrZSByZXBvcnRlZCBleGl0IGNvZGUgJXMuIEl0IHNob3VsZCBoYXZlIGJlZW4gMS4gQml0YmFrZSBvdXRwdXQ6ICVzIiAlIChzdHIocmVzLnN0YXR1cyksIHJlcy5vdXRwdXQpKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygnQkJfRElTS01PTl9ESVJTID0gIkFCT1JULCR7VE1QRElSfSwxMDAwMDBHLDEwMEsiJykKKyAgICAgICAgcmVzID0gYml0YmFrZSgibTQiLCBpZ25vcmVfc3RhdHVzID0gVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdFUlJPUjogSW1tZWRpYXRlbHkgYWJvcnQgc2luY2UgdGhlIGRpc2sgc3BhY2UgbW9uaXRvciBhY3Rpb24gaXMgIkFCT1JUIiEnIGluIHJlcy5vdXRwdXQsICJUYXNrcyBzaG91bGQgaGF2ZSBiZWVuIGFib3J0ZWQgaW1tZWRpYXRlbGx5LiBEaXNrIG1vbml0b3IgaXMgc2V0IHRvIEFCT1JUOiAlcyIgJSByZXMub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDEsIG1zZyA9ICJiaXRiYWtlIHJlcG9ydGVkIGV4aXQgY29kZSAlcy4gSXQgc2hvdWxkIGhhdmUgYmVlbiAxLiBCaXRiYWtlIG91dHB1dDogJXMiICUgKHN0cihyZXMuc3RhdHVzKSwgcmVzLm91dHB1dCkpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCdCQl9ESVNLTU9OX0RJUlMgPSAiV0FSTiwke1RNUERJUn0sMTAwMDAwRywxMDBLIicpCisgICAgICAgIHJlcyA9IGJpdGJha2UoIm00IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdXQVJOSU5HOiBUaGUgZnJlZSBzcGFjZScgaW4gcmVzLm91dHB1dCwgbXNnID0gIkEgd2FybmluZyBzaG91bGQgaGF2ZSBiZWVuIGRpc3BsYXllZCBmb3IgZGlzayBtb25pdG9yIGlzIHNldCB0byBXQVJOOiAlcyIgJXJlcy5vdXRwdXQpCisKK2NsYXNzIFNhbml0eU9wdGlvbnNUZXN0KG9lU2VsZlRlc3QpOgorCisgICAgQHRlc3RjYXNlKDkyNykKKyAgICBkZWYgdGVzdF9vcHRpb25zX3dhcm5xYV9lcnJvcnFhX3N3aXRjaChzZWxmKToKKyAgICAgICAgYml0YmFrZSgieGN1cnNvci10cmFuc3BhcmVudC10aGVtZSAtY2NsZWFuc3N0YXRlIikKKworICAgICAgICBpZiAicGFja2FnZXMtbGlzdCIgbm90IGluIGdldF9iYl92YXIoIkVSUk9SX1FBIik6CisgICAgICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiRVJST1JfUUFfYXBwZW5kID0gXCIgcGFja2FnZXMtbGlzdFwiIikKKworICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYygneGN1cnNvci10cmFuc3BhcmVudC10aGVtZScsICdQQUNLQUdFUyArPSBcIiR7UE59LWRiZ1wiJykKKyAgICAgICAgcmVzID0gYml0YmFrZSgieGN1cnNvci10cmFuc3BhcmVudC10aGVtZSIsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5kZWxldGVfcmVjaXBlaW5jKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJFUlJPUjogUUEgSXNzdWU6IHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtZGJnIGlzIGxpc3RlZCBpbiBQQUNLQUdFUyBtdWx0aXBsZSB0aW1lcywgdGhpcyBsZWFkcyB0byBwYWNrYWdpbmcgZXJyb3JzLiIgaW4gcmVzLm91dHB1dCwgbXNnPXJlcy5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgMSwgbXNnID0gImJpdGJha2UgcmVwb3J0ZWQgZXhpdCBjb2RlICVzLiBJdCBzaG91bGQgaGF2ZSBiZWVuIDEuIEJpdGJha2Ugb3V0cHV0OiAlcyIgJSAoc3RyKHJlcy5zdGF0dXMpLCByZXMub3V0cHV0KSkKKyAgICAgICAgc2VsZi53cml0ZV9yZWNpcGVpbmMoJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnLCAnUEFDS0FHRVMgKz0gXCIke1BOfS1kYmdcIicpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZygnRVJST1JfUUFfcmVtb3ZlID0gInBhY2thZ2VzLWxpc3QiJykKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKCdXQVJOX1FBX2FwcGVuZCA9ICIgcGFja2FnZXMtbGlzdCInKQorICAgICAgICBiaXRiYWtlKCJ4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lIC1jY2xlYW5zc3RhdGUiKQorICAgICAgICByZXMgPSBiaXRiYWtlKCJ4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lIikKKyAgICAgICAgc2VsZi5kZWxldGVfcmVjaXBlaW5jKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJXQVJOSU5HOiBRQSBJc3N1ZTogeGN1cnNvci10cmFuc3BhcmVudC10aGVtZS1kYmcgaXMgbGlzdGVkIGluIFBBQ0tBR0VTIG11bHRpcGxlIHRpbWVzLCB0aGlzIGxlYWRzIHRvIHBhY2thZ2luZyBlcnJvcnMuIiBpbiByZXMub3V0cHV0LCBtc2c9cmVzLm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgyNzgpCisgICAgZGVmIHRlc3Rfc2FuaXR5X3VzZXJzcGFjZV9kZXBlbmRlbmN5KHNlbGYpOgorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoJ1dBUk5fUUFfYXBwZW5kID0gIiB1bnNhZmUtcmVmZXJlbmNlcy1pbi1iaW5hcmllcyB1bnNhZmUtcmVmZXJlbmNlcy1pbi1zY3JpcHRzIicpCisgICAgICAgIGJpdGJha2UoIi1jY2xlYW5zc3RhdGUgZ3ppcCBuZnMtdXRpbHMiKQorICAgICAgICByZXMgPSBiaXRiYWtlKCJnemlwIG5mcy11dGlscyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiV0FSTklORzogUUEgSXNzdWU6IGd6aXAiIGluIHJlcy5vdXRwdXQsICJXQVJOSU5HOiBRQSBJc3N1ZTogZ3ppcCBtZXNzYWdlIGlzIG5vdCBwcmVzZW50IGluIGJpdGJha2UncyBvdXRwdXQ6ICVzIiAlIHJlcy5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiV0FSTklORzogUUEgSXNzdWU6IG5mcy11dGlscyIgaW4gcmVzLm91dHB1dCwgIldBUk5JTkc6IFFBIElzc3VlOiBuZnMtdXRpbHMgbWVzc2FnZSBpcyBub3QgcHJlc2VudCBpbiBiaXRiYWtlJ3Mgb3V0cHV0OiAlcyIgJSByZXMub3V0cHV0KQorCitjbGFzcyBCdWlsZGhpc3RvcnlUZXN0cyhCdWlsZGhpc3RvcnlCYXNlKToKKworICAgIEB0ZXN0Y2FzZSgyOTMpCisgICAgZGVmIHRlc3RfYnVpbGRoaXN0b3J5X2Jhc2ljKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl9idWlsZGhpc3Rvcnlfb3BlcmF0aW9uKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIoZ2V0X2JiX3ZhcignQlVJTERISVNUT1JZX0RJUicpKSwgImJ1aWxkaGlzdG9yeSBkaXIgd2FzIG5vdCBjcmVhdGVkLiIpCisKKyAgICBAdGVzdGNhc2UoMjk0KQorICAgIGRlZiB0ZXN0X2J1aWxkaGlzdG9yeV9idWlsZHRpbWVfcHJfYmFja3dhcmRzKHNlbGYpOgorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjbGVhbnVwLXdvcmtkaXInKQorICAgICAgICB0YXJnZXQgPSAneGN1cnNvci10cmFuc3BhcmVudC10aGVtZScKKyAgICAgICAgZXJyb3IgPSAiRVJST1I6IFFBIElzc3VlOiBQYWNrYWdlIHZlcnNpb24gZm9yIHBhY2thZ2UgJXMgd2VudCBiYWNrd2FyZHMgd2hpY2ggd291bGQgYnJlYWsgcGFja2FnZSBmZWVkcyBmcm9tICguKi1yMSB0byAuKi1yMCkiICUgdGFyZ2V0CisgICAgICAgIHNlbGYucnVuX2J1aWxkaGlzdG9yeV9vcGVyYXRpb24odGFyZ2V0LCB0YXJnZXRfY29uZmlnPSJQUiA9IFwicjFcIiIsIGNoYW5nZV9iaF9sb2NhdGlvbj1UcnVlKQorICAgICAgICBzZWxmLnJ1bl9idWlsZGhpc3Rvcnlfb3BlcmF0aW9uKHRhcmdldCwgdGFyZ2V0X2NvbmZpZz0iUFIgPSBcInIwXCIiLCBjaGFuZ2VfYmhfbG9jYXRpb249RmFsc2UsIGV4cGVjdF9lcnJvcj1UcnVlLCBlcnJvcl9yZWdleD1lcnJvcikKKworY2xhc3MgQnVpbGRJbWFnZXNUZXN0KG9lU2VsZlRlc3QpOgorICAgIEB0ZXN0Y2FzZSg1NjMpCisgICAgZGVmIHRlc3RfZGlyZWN0ZmIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHRlc3QgdGhlIGJ1aWxkIG9mIGRpcmVjdGZiIGltYWdlIGZvciBhcm0gYXJjaC4KKyAgICAgICAgSW4gZXNzZW5jZSB3ZSBidWlsZCBhIGNvcmVpbWFnZWRpcmVjdGZiIGFuZCB0ZXN0IHRoZSBleGl0Y29kZSBvZiBiaXRiYWtlIHRoYXQgaW4gY2FzZSBvZiBzdWNjZXNzIGlzIDAuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjbGVhbnVwd29ya2RpcicpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCJESVNUUk9fRkVBVFVSRVNfcmVtb3ZlID0gXCJ4MTFcIlxuRElTVFJPX0ZFQVRVUkVTX2FwcGVuZCA9IFwiIGRpcmVjdGZiXCJcbk1BQ0hJTkUgPz89IFwicWVtdWFybVwiIikKKyAgICAgICAgcmVzID0gYml0YmFrZSgiY29yZS1pbWFnZS1kaXJlY3RmYiIsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCAwLCAiXG5jb3JlaW1hZ2VkaXJlY3RmYiBmYWlsZWQgdG8gYnVpbGQuIFBsZWFzZSBjaGVjayBsb2dzIGZvciBmdXJ0aGVyIGRldGFpbHMuXG5iaXRiYWtlIG91dHB1dCAlcyIgJSByZXMub3V0cHV0KQorCitjbGFzcyBBcmNoaXZlclRlc3Qob2VTZWxmVGVzdCk6CisgICAgQHRlc3RjYXNlKDkyNikKKyAgICBkZWYgdGVzdF9hcmNoX3dvcmtfZGlyX2FuZF9leHBvcnRfc291cmNlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdCBmb3IgYXJjaGl2aW5nIHRoZSB3b3JrIGRpcmVjdG9yeSBhbmQgZXhwb3J0aW5nIHRoZSBzb3VyY2UgZmlsZXMuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjbGVhbnVwd29ya2RpcicpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCJJTkhFUklUID0gXCJhcmNoaXZlclwiXG5BUkNISVZFUl9NT0RFW3NyY10gPSBcIm9yaWdpbmFsXCJcbkFSQ0hJVkVSX01PREVbc3JwbV0gPSBcIjFcIiIpCisgICAgICAgIHJlcyA9IGJpdGJha2UoInhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUiLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgMCwgIlxuQ291bGRuJ3QgYnVpbGQgeGN1cnNvcnRyYW5zcGFyZW50dGhlbWUuXG5iaXRiYWtlIG91dHB1dCAlcyIgJSByZXMub3V0cHV0KQorICAgICAgICBwa2dzX3BhdGggPSBnLmdsb2Ioc3RyKHNlbGYuYnVpbGRkaXIpICsgIi90bXAvZGVwbG95L3NvdXJjZXMvYWxsYXJjaCoveGN1cnMqIikKKyAgICAgICAgc3JjX2ZpbGVfZ2xvYiA9IHN0cihwa2dzX3BhdGhbMF0pICsgIi94Y3Vyc29yKi5zcmMucnBtIgorICAgICAgICB0YXJfZmlsZV9nbG9iID0gc3RyKHBrZ3NfcGF0aFswXSkgKyAiL3hjdXJzb3IqLnRhci5neiIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChnLmdsb2Ioc3JjX2ZpbGVfZ2xvYikgYW5kIGcuZ2xvYih0YXJfZmlsZV9nbG9iKSksICJDb3VsZG4ndCBmaW5kIC5zcmMucnBtIGFuZCAudGFyLmd6IGZpbGVzIHVuZGVyIHRtcC9kZXBsb3kvc291cmNlcy9hbGxhcmNoKi94Y3Vyc29yKiIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvZGV2dG9vbC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9kZXZ0b29sLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNzMxZDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvZGV2dG9vbC5weQpAQCAtMCwwICsxLDk3MSBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IGdsb2IKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBjcmVhdGVfdGVtcF9sYXllciwgcnVucWVtdQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCisKK2NsYXNzIERldnRvb2xCYXNlKG9lU2VsZlRlc3QpOgorCisgICAgZGVmIF90ZXN0X3JlY2lwZV9jb250ZW50cyhzZWxmLCByZWNpcGVmaWxlLCBjaGVja3ZhcnMsIGNoZWNraW5oZXJpdHMpOgorICAgICAgICB3aXRoIG9wZW4ocmVjaXBlZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBpZiAnPScgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgc3BsaXRsaW5lID0gbGluZS5zcGxpdCgnPScsIDEpCisgICAgICAgICAgICAgICAgICAgIHZhciA9IHNwbGl0bGluZVswXS5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNwbGl0bGluZVsxXS5zdHJpcCgpLnN0cmlwKCciJykKKyAgICAgICAgICAgICAgICAgICAgaWYgdmFyIGluIGNoZWNrdmFyczoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lZWR2YWx1ZSA9IGNoZWNrdmFycy5wb3AodmFyKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgbmVlZHZhbHVlLCAndmFsdWVzIGZvciAlcyBkbyBub3QgbWF0Y2gnICUgdmFyKQorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnaW5oZXJpdCAnKToKKyAgICAgICAgICAgICAgICAgICAgaW5oZXJpdHMgPSBsaW5lLnNwbGl0KClbMTpdCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGVja3ZhcnMsIHt9LCAnU29tZSB2YXJpYWJsZXMgbm90IGZvdW5kOiAlcycgJSBjaGVja3ZhcnMpCisKKyAgICAgICAgZm9yIGluaGVyaXQgaW4gY2hlY2tpbmhlcml0czoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaW5oZXJpdCwgaW5oZXJpdHMsICdNaXNzaW5nIGluaGVyaXQgb2YgJXMnICUgaW5oZXJpdCkKKworICAgIGRlZiBfY2hlY2tfYmJhcHBlbmQoc2VsZiwgdGVzdHJlY2lwZSwgcmVjaXBlZmlsZSwgYXBwZW5kZGlyKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LWFwcGVuZHMnLCBjd2Q9c2VsZi5idWlsZGRpcikKKyAgICAgICAgcmVzdWx0bGluZXMgPSByZXN1bHQub3V0cHV0LnNwbGl0bGluZXMoKQorICAgICAgICBpbnJlY2lwZSA9IEZhbHNlCisgICAgICAgIGJiYXBwZW5kcyA9IFtdCisgICAgICAgIGJiYXBwZW5kZmlsZSA9IE5vbmUKKyAgICAgICAgZm9yIGxpbmUgaW4gcmVzdWx0bGluZXM6CisgICAgICAgICAgICBpZiBpbnJlY2lwZToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyAnKToKKyAgICAgICAgICAgICAgICAgICAgYmJhcHBlbmRzLmFwcGVuZChsaW5lLnN0cmlwKCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsaWYgbGluZSA9PSAnJXM6JyAlIG9zLnBhdGguYmFzZW5hbWUocmVjaXBlZmlsZSk6CisgICAgICAgICAgICAgICAgaW5yZWNpcGUgPSBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGxlbihiYmFwcGVuZHMpLCAyLCAnJXMgcmVjaXBlIGlzIGJlaW5nIGJiYXBwZW5kZWQgYnkgYW5vdGhlciBsYXllciAtIGJiYXBwZW5kcyBmb3VuZDpcbiAgJXMnICUgKHRlc3RyZWNpcGUsICdcbiAgJy5qb2luKGJiYXBwZW5kcykpKQorICAgICAgICBmb3IgYmJhcHBlbmQgaW4gYmJhcHBlbmRzOgorICAgICAgICAgICAgaWYgYmJhcHBlbmQuc3RhcnRzd2l0aChhcHBlbmRkaXIpOgorICAgICAgICAgICAgICAgIGJiYXBwZW5kZmlsZSA9IGJiYXBwZW5kCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnYmJhcHBlbmQgZm9yIHJlY2lwZSAlcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGNyZWF0ZWQgaW4gdGVzdCBsYXllcicgJSB0ZXN0cmVjaXBlKQorICAgICAgICByZXR1cm4gYmJhcHBlbmRmaWxlCisKKyAgICBkZWYgX2NyZWF0ZV90ZW1wX2xheWVyKHNlbGYsIHRlbXBsYXllcmRpciwgYWRkbGF5ZXIsIHRlbXBsYXllcm5hbWUsIHByaW9yaXR5PTk5OSwgcmVjaXBlcGF0aHNwZWM9J3JlY2lwZXMtKi8qJyk6CisgICAgICAgIGNyZWF0ZV90ZW1wX2xheWVyKHRlbXBsYXllcmRpciwgdGVtcGxheWVybmFtZSwgcHJpb3JpdHksIHJlY2lwZXBhdGhzcGVjKQorICAgICAgICBpZiBhZGRsYXllcjoKKyAgICAgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAlcyB8fCB0cnVlJyAlIHRlbXBsYXllcmRpcikKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgYWRkLWxheWVyICVzJyAlIHRlbXBsYXllcmRpciwgY3dkPXNlbGYuYnVpbGRkaXIpCisKKyAgICBkZWYgX3Byb2Nlc3NfbHNfb3V0cHV0KHNlbGYsIG91dHB1dCk6CisgICAgICAgICIiIgorICAgICAgICBDb252ZXJ0IGxzIC1sIG91dHB1dCB0byBhIGZvcm1hdCB3ZSBjYW4gcmVhc29uYWJseSBjb21wYXJlIGZyb20gb25lIGNvbnRleHQKKyAgICAgICAgdG8gYW5vdGhlciAoZS5nLiBmcm9tIGhvc3QgdG8gdGFyZ2V0KQorICAgICAgICAiIiIKKyAgICAgICAgZmlsZWxpc3QgPSBbXQorICAgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgc3BsaXRsaW5lID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICAjIFJlbW92ZSB0cmFpbGluZyAuIG9uIHBlcm1zCisgICAgICAgICAgICBzcGxpdGxpbmVbMF0gPSBzcGxpdGxpbmVbMF0ucnN0cmlwKCcuJykKKyAgICAgICAgICAgICMgUmVtb3ZlIGxlYWRpbmcgLiBvbiBwYXRocworICAgICAgICAgICAgc3BsaXRsaW5lWy0xXSA9IHNwbGl0bGluZVstMV0ubHN0cmlwKCcuJykKKyAgICAgICAgICAgICMgRHJvcCBmaWVsZHMgd2UgZG9uJ3Qgd2FudCB0byBjb21wYXJlCisgICAgICAgICAgICBkZWwgc3BsaXRsaW5lWzddCisgICAgICAgICAgICBkZWwgc3BsaXRsaW5lWzZdCisgICAgICAgICAgICBkZWwgc3BsaXRsaW5lWzVdCisgICAgICAgICAgICBkZWwgc3BsaXRsaW5lWzRdCisgICAgICAgICAgICBkZWwgc3BsaXRsaW5lWzFdCisgICAgICAgICAgICBmaWxlbGlzdC5hcHBlbmQoJyAnLmpvaW4oc3BsaXRsaW5lKSkKKyAgICAgICAgcmV0dXJuIGZpbGVsaXN0CisKKworY2xhc3MgRGV2dG9vbFRlc3RzKERldnRvb2xCYXNlKToKKworICAgIEB0ZXN0Y2FzZSgxMTU4KQorICAgIGRlZiB0ZXN0X2NyZWF0ZV93b3Jrc3BhY2Uoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCcvd29ya3NwYWNlJyBub3QgaW4gcmVzdWx0Lm91dHB1dCwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgbGF5ZXIgaW4gYmJsYXllcnMuY29uZicpCisgICAgICAgICMgVHJ5IGNyZWF0aW5nIGEgd29ya3NwYWNlIGxheWVyIHdpdGggYSBzcGVjaWZpYyBwYXRoCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgY3JlYXRlLXdvcmtzcGFjZSAlcycgJSB0ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHRlbXBkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksIG1zZyA9ICJObyB3b3Jrc3BhY2UgY3JlYXRlZC4gZGV2dG9vbCBvdXRwdXQ6ICVzICIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZW1wZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIFRyeSBjcmVhdGluZyBhIHdvcmtzcGFjZSBsYXllciB3aXRoIHRoZSBkZWZhdWx0IHBhdGgKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBjcmVhdGUtd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksIG1zZyA9ICJObyB3b3Jrc3BhY2UgY3JlYXRlZC4gZGV2dG9vbCBvdXRwdXQ6ICVzICIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbih0ZW1wZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHdvcmtzcGFjZWRpciwgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTU5KQorICAgIGRlZiB0ZXN0X2RldnRvb2xfYWRkKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBGZXRjaCBzb3VyY2UKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHVybCA9ICdodHRwOi8vd3d3Lml2YXJjaC5jb20vcHJvZ3JhbXMvc291cmNlcy9wdi0xLjUuMy50YXIuYnoyJworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3dnZXQgJXMnICUgdXJsLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCd0YXIgeGZ2IHB2LTEuNS4zLnRhci5iejInLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc3JjZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdwdi0xLjUuMycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc3JjZGlyLCAnY29uZmlndXJlJykpLCAnVW5hYmxlIHRvIGZpbmQgY29uZmlndXJlIHNjcmlwdCBpbiBzb3VyY2UgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgYWRkCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuc3N0YXRlIHB2JykKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGFkZCBwdiAlcycgJSBzcmNkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZCcpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigncHYnLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHNyY2RpciwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBDbGVhbiB1cCBhbnl0aGluZyBpbiB0aGUgd29ya2Rpci9zeXNyb290L3NzdGF0ZSBjYWNoZSAoaGF2ZSB0byBkbyB0aGlzICphZnRlciogZGV2dG9vbCBhZGQgc2luY2UgdGhlIHJlY2lwZSBvbmx5IGV4aXN0cyB0aGVuKQorICAgICAgICBiaXRiYWtlKCdwdiAtYyBjbGVhbnNzdGF0ZScpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIGJ1aWxkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBidWlsZCBwdicpCisgICAgICAgIGluc3RhbGxkaXIgPSBnZXRfYmJfdmFyKCdEJywgJ3B2JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3RhbGxkaXIsICdDb3VsZCBub3QgcXVlcnkgaW5zdGFsbGRpciB2YXJpYWJsZScpCisgICAgICAgIGJpbmRpciA9IGdldF9iYl92YXIoJ2JpbmRpcicsICdwdicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiaW5kaXIsICdDb3VsZCBub3QgcXVlcnkgYmluZGlyIHZhcmlhYmxlJykKKyAgICAgICAgaWYgYmluZGlyWzBdID09ICcvJzoKKyAgICAgICAgICAgIGJpbmRpciA9IGJpbmRpclsxOl0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihpbnN0YWxsZGlyLCBiaW5kaXIsICdwdicpKSwgJ3B2IGJpbmFyeSBub3QgZm91bmQgaW4gRCcpCisKKyAgICBAdGVzdGNhc2UoMTE2MikKKyAgICBkZWYgdGVzdF9kZXZ0b29sX2FkZF9saWJyYXJ5KHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBXZSBkb24ndCBoYXZlIHRoZSBhYmlsaXR5IHRvIHBpY2sgdXAgdGhpcyBkZXBlbmRlbmN5IGF1dG9tYXRpY2FsbHkgeWV0Li4uCisgICAgICAgIGJpdGJha2UoJ2xpYnVzYjEnKQorICAgICAgICAjIEZldGNoIHNvdXJjZQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgdXJsID0gJ2h0dHA6Ly93d3cuaW50cmEybmV0LmNvbS9lbi9kZXZlbG9wZXIvbGliZnRkaS9kb3dubG9hZC9saWJmdGRpMS0xLjEudGFyLmJ6MicKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCd3Z2V0ICVzJyAlIHVybCwgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgndGFyIHhmdiBsaWJmdGRpMS0xLjEudGFyLmJ6MicsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ2xpYmZ0ZGkxLTEuMScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc3JjZGlyLCAnQ01ha2VMaXN0cy50eHQnKSksICdVbmFibGUgdG8gZmluZCBDTWFrZUxpc3RzLnR4dCBpbiBzb3VyY2UgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgYWRkIChhbmQgdXNlIC1WIHNvIHdlIHRlc3QgdGhhdCB0b28pCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYWRkIGxpYmZ0ZGkgJXMgLVYgMS4xJyAlIHNyY2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksICdXb3Jrc3BhY2UgZGlyZWN0b3J5IG5vdCBjcmVhdGVkJykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJmdGRpJywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzcmNkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2xlYW4gdXAgYW55dGhpbmcgaW4gdGhlIHdvcmtkaXIvc3lzcm9vdC9zc3RhdGUgY2FjaGUgKGhhdmUgdG8gZG8gdGhpcyAqYWZ0ZXIqIGRldnRvb2wgYWRkIHNpbmNlIHRoZSByZWNpcGUgb25seSBleGlzdHMgdGhlbikKKyAgICAgICAgYml0YmFrZSgnbGliZnRkaSAtYyBjbGVhbnNzdGF0ZScpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIGJ1aWxkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBidWlsZCBsaWJmdGRpJykKKyAgICAgICAgc3RhZ2luZ19saWJkaXIgPSBnZXRfYmJfdmFyKCdTVEFHSU5HX0xJQkRJUicsICdsaWJmdGRpJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YWdpbmdfbGliZGlyLCAnQ291bGQgbm90IHF1ZXJ5IFNUQUdJTkdfTElCRElSIHZhcmlhYmxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzdGFnaW5nX2xpYmRpciwgJ2xpYmZ0ZGkxLnNvLjIuMS4wJykpLCAibGliZnRkaSBiaW5hcnkgbm90IGZvdW5kIGluIFNUQUdJTkdfTElCRElSLiBPdXRwdXQgb2YgZGV2dG9vbCBidWlsZCBsaWJmdGRpICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHJlc2V0CisgICAgICAgIHN0YW1wcHJlZml4ID0gZ2V0X2JiX3ZhcignU1RBTVAnLCAnbGliZnRkaScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZXNldCBsaWJmdGRpJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2xpYmZ0ZGknLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RhbXBwcmVmaXgsICdVbmFibGUgdG8gZ2V0IFNUQU1QIHZhbHVlIGZvciByZWNpcGUgbGliZnRkaScpCisgICAgICAgIG1hdGNoZXMgPSBnbG9iLmdsb2Ioc3RhbXBwcmVmaXggKyAnKicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0Y2hlcywgJ1N0YW1wIGZpbGVzIGV4aXN0IGZvciByZWNpcGUgbGliZnRkaSB0aGF0IHNob3VsZCBoYXZlIGJlZW4gY2xlYW5lZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHN0YWdpbmdfbGliZGlyLCAnbGliZnRkaTEuc28uMi4xLjAnKSksICdsaWJmdGRpIGJpbmFyeSBzdGlsbCBmb3VuZCBpbiBTVEFHSU5HX0xJQkRJUiBhZnRlciBjbGVhbmluZycpCisKKyAgICBAdGVzdGNhc2UoMTE2MCkKKyAgICBkZWYgdGVzdF9kZXZ0b29sX2FkZF9mZXRjaChzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgICMgRmV0Y2ggc291cmNlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICB0ZXN0dmVyID0gJzAuMjMnCisgICAgICAgIHVybCA9ICdodHRwczovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvTS9NYXJrdXBTYWZlL01hcmt1cFNhZmUtJXMudGFyLmd6JyAlIHRlc3R2ZXIKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdweXRob24tbWFya3Vwc2FmZScKKyAgICAgICAgc3JjZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsIHRlc3RyZWNpcGUpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIGFkZAorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbnNzdGF0ZSAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYWRkICVzICVzIC1mICVzJyAlICh0ZXN0cmVjaXBlLCBzcmNkaXIsIHVybCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZC4gJXMnICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzcmNkaXIsICdzZXR1cC5weScpKSwgJ1VuYWJsZSB0byBmaW5kIHNldHVwLnB5IGluIHNvdXJjZSBkaXJlY3RvcnknKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBzdGF0dXMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzcmNkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2hlY2sgcmVjaXBlCisgICAgICAgIHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJXMuYmInICUgdGVzdHJlY2lwZSwgcmVjaXBlZmlsZSwgJ1JlY2lwZSBmaWxlIGluY29ycmVjdGx5IG5hbWVkJykKKyAgICAgICAgY2hlY2t2YXJzID0ge30KKyAgICAgICAgY2hlY2t2YXJzWydTJ10gPSAnJHtXT1JLRElSfS9NYXJrdXBTYWZlLSVzJyAlIHRlc3R2ZXIKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSB1cmwKKyAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBbXSkKKyAgICAgICAgIyBUcnkgd2l0aCB2ZXJzaW9uIHNwZWNpZmllZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgcmVzZXQgLW4gJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzcmNkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBhZGQgJXMgJXMgLWYgJXMgLVYgJXMnICUgKHRlc3RyZWNpcGUsIHNyY2RpciwgdXJsLCB0ZXN0dmVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzcmNkaXIsICdzZXR1cC5weScpKSwgJ1VuYWJsZSB0byBmaW5kIHNldHVwLnB5IGluIHNvdXJjZSBkaXJlY3RvcnknKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBzdGF0dXMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzcmNkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2hlY2sgcmVjaXBlCisgICAgICAgIHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJXNfJXMuYmInICUgKHRlc3RyZWNpcGUsIHRlc3R2ZXIpLCByZWNpcGVmaWxlLCAnUmVjaXBlIGZpbGUgaW5jb3JyZWN0bHkgbmFtZWQnKQorICAgICAgICBjaGVja3ZhcnMgPSB7fQorICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9ICcke1dPUktESVJ9L01hcmt1cFNhZmUtJHtQVn0nCisgICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSSddID0gdXJsLnJlcGxhY2UodGVzdHZlciwgJyR7UFZ9JykKKyAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBbXSkKKworICAgIEB0ZXN0Y2FzZSgxMTYxKQorICAgIGRlZiB0ZXN0X2RldnRvb2xfYWRkX2ZldGNoX2dpdChzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgICMgRmV0Y2ggc291cmNlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICB1cmwgPSAnZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGlibWF0Y2hib3gnCisgICAgICAgIGNoZWNrcmV2ID0gJzQ2MmYwNjUyMDU1ZDg5YzY0OGRkZDU0ZmQ3YjAzZjE3NWMyYzY5NzMnCisgICAgICAgIHRlc3RyZWNpcGUgPSAnbGlibWF0Y2hib3gyJworICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgYWRkCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuc3N0YXRlICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBhZGQgJXMgJXMgLWYgJXMnICUgKHRlc3RyZWNpcGUsIHNyY2RpciwgdXJsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksICdXb3Jrc3BhY2UgZGlyZWN0b3J5IG5vdCBjcmVhdGVkOiAlcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNyY2RpciwgJ2NvbmZpZ3VyZS5hYycpKSwgJ1VuYWJsZSB0byBmaW5kIGNvbmZpZ3VyZS5hYyBpbiBzb3VyY2UgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3JjZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIHJlY2lwZQorICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ19naXQuYmInLCByZWNpcGVmaWxlLCAnUmVjaXBlIGZpbGUgaW5jb3JyZWN0bHkgbmFtZWQnKQorICAgICAgICBjaGVja3ZhcnMgPSB7fQorICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9ICcke1dPUktESVJ9L2dpdCcKKyAgICAgICAgY2hlY2t2YXJzWydQViddID0gJzEuMCtnaXQke1NSQ1BWfScKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSB1cmwKKyAgICAgICAgY2hlY2t2YXJzWydTUkNSRVYnXSA9ICcke0FVVE9SRVZ9JworICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIFtdKQorICAgICAgICAjIFRyeSB3aXRoIHJldmlzaW9uIGFuZCB2ZXJzaW9uIHNwZWNpZmllZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgcmVzZXQgLW4gJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzcmNkaXIpCisgICAgICAgIHVybF9yZXYgPSAnJXM7cmV2PSVzJyAlICh1cmwsIGNoZWNrcmV2KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYWRkICVzICVzIC1mICIlcyIgLVYgMS41JyAlICh0ZXN0cmVjaXBlLCBzcmNkaXIsIHVybF9yZXYpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNyY2RpciwgJ2NvbmZpZ3VyZS5hYycpKSwgJ1VuYWJsZSB0byBmaW5kIGNvbmZpZ3VyZS5hYyBpbiBzb3VyY2UgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3JjZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIHJlY2lwZQorICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ19naXQuYmInLCByZWNpcGVmaWxlLCAnUmVjaXBlIGZpbGUgaW5jb3JyZWN0bHkgbmFtZWQnKQorICAgICAgICBjaGVja3ZhcnMgPSB7fQorICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9ICcke1dPUktESVJ9L2dpdCcKKyAgICAgICAgY2hlY2t2YXJzWydQViddID0gJzEuNStnaXQke1NSQ1BWfScKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSB1cmwKKyAgICAgICAgY2hlY2t2YXJzWydTUkNSRVYnXSA9IGNoZWNrcmV2CisgICAgICAgIHNlbGYuX3Rlc3RfcmVjaXBlX2NvbnRlbnRzKHJlY2lwZWZpbGUsIGNoZWNrdmFycywgW10pCisKKyAgICBAdGVzdGNhc2UoMTE2NCkKKyAgICBkZWYgdGVzdF9kZXZ0b29sX21vZGlmeShzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgICMgQ2xlYW4gdXAgYW55dGhpbmcgaW4gdGhlIHdvcmtkaXIvc3lzcm9vdC9zc3RhdGUgY2FjaGUKKyAgICAgICAgYml0YmFrZSgnbWRhZG0gLWMgY2xlYW5zc3RhdGUnKQorICAgICAgICAjIFRyeSBtb2RpZnlpbmcgYSByZWNpcGUKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuIG1kYWRtJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSBtZGFkbSAteCAlcycgJSB0ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHRlbXBkaXIsICdNYWtlZmlsZScpKSwgJ0V4dHJhY3RlZCBzb3VyY2UgY291bGQgbm90IGJlIGZvdW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHRlbXBkaXIsICcuZ2l0JykpLCAnZ2l0IHJlcG9zaXRvcnkgZm9yIGV4dGVybmFsIHNvdXJjZSB0cmVlIG5vdCBmb3VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZCcpCisgICAgICAgIG1hdGNoZXMgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHdvcmtzcGFjZWRpciwgJ2FwcGVuZHMnLCAnbWRhZG1fKi5iYmFwcGVuZCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2hlcywgJ2JiYXBwZW5kIG5vdCBjcmVhdGVkICVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbWRhZG0nLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHRlbXBkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2hlY2sgZ2l0IHJlcG8KKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJ0NyZWF0ZWQgZ2l0IHJlcG8gaXMgbm90IGNsZWFuJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3ltYm9saWMtcmVmIEhFQUQnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICJyZWZzL2hlYWRzL2RldnRvb2wiLCAnV3JvbmcgYnJhbmNoIGluIGdpdCByZXBvJykKKyAgICAgICAgIyBUcnkgYnVpbGRpbmcKKyAgICAgICAgYml0YmFrZSgnbWRhZG0nKQorICAgICAgICAjIFRyeSBtYWtpbmcgKG1pbm9yKSBtb2RpZmljYXRpb25zIHRvIHRoZSBzb3VyY2UKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJzZWQgLWkgJ3MhXlwuVEguKiEuVEggTURBRE0gOCBcIlwiIHY5Ljk5OS1jdXN0b20hJyAlcyIgJSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ21kYWRtLjguaW4nKSkKKyAgICAgICAgYml0YmFrZSgnbWRhZG0gLWMgcGFja2FnZScpCisgICAgICAgIHBrZ2QgPSBnZXRfYmJfdmFyKCdQS0dEJywgJ21kYWRtJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBrZ2QsICdDb3VsZCBub3QgcXVlcnkgUEtHRCB2YXJpYWJsZScpCisgICAgICAgIG1hbmRpciA9IGdldF9iYl92YXIoJ21hbmRpcicsICdtZGFkbScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYW5kaXIsICdDb3VsZCBub3QgcXVlcnkgbWFuZGlyIHZhcmlhYmxlJykKKyAgICAgICAgaWYgbWFuZGlyWzBdID09ICcvJzoKKyAgICAgICAgICAgIG1hbmRpciA9IG1hbmRpclsxOl0KKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihwa2dkLCBtYW5kaXIsICdtYW44JywgJ21kYWRtLjgnKSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJy5USCcpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUucnN0cmlwKCksICcuVEggTURBRE0gOCAiIiB2OS45OTktY3VzdG9tJywgJ21hbiBmaWxlIG5vdCBtb2RpZmllZC4gbWFuIHNlYXJjaGVkIGZpbGUgcGF0aDogJXMnICUgb3MucGF0aC5qb2luKHBrZ2QsIG1hbmRpciwgJ21hbjgnLCAnbWRhZG0uOCcpKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCByZXNldAorICAgICAgICBzdGFtcHByZWZpeCA9IGdldF9iYl92YXIoJ1NUQU1QJywgJ21kYWRtJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHJlc2V0IG1kYWRtJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ21kYWRtJywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YW1wcHJlZml4LCAnVW5hYmxlIHRvIGdldCBTVEFNUCB2YWx1ZSBmb3IgcmVjaXBlIG1kYWRtJykKKyAgICAgICAgbWF0Y2hlcyA9IGdsb2IuZ2xvYihzdGFtcHByZWZpeCArICcqJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtYXRjaGVzLCAnU3RhbXAgZmlsZXMgZXhpc3QgZm9yIHJlY2lwZSBtZGFkbSB0aGF0IHNob3VsZCBoYXZlIGJlZW4gY2xlYW5lZCcpCisKKyAgICBAdGVzdGNhc2UoMTE2NikKKyAgICBkZWYgdGVzdF9kZXZ0b29sX21vZGlmeV9pbnZhbGlkKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUcnkgbW9kaWZ5aW5nIHNvbWUgcmVjaXBlcworICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisKKyAgICAgICAgdGVzdHJlY2lwZXMgPSAncGVyZiBrZXJuZWwtZGV2c3JjIHBhY2thZ2UtaW5kZXggY29yZS1pbWFnZS1taW5pbWFsIG1ldGEtdG9vbGNoYWluIHBhY2thZ2Vncm91cC1jb3JlLXNkayBtZXRhLWlkZS1zdXBwb3J0Jy5zcGxpdCgpCisgICAgICAgICMgRmluZCBhY3R1YWwgbmFtZSBvZiBnY2Mtc291cmNlIHNpbmNlIGl0IG5vdyBpbmNsdWRlcyB0aGUgdmVyc2lvbiAtIGNydWRlLCBidXQgZ29vZCBlbm91Z2ggZm9yIHRoaXMgcHVycG9zZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctcmVjaXBlcyBnY2Mtc291cmNlKicpCisgICAgICAgIHJlYWRpbmcgPSBGYWxzZQorICAgICAgICBmb3IgbGluZSBpbiByZXN1bHQub3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnPT0nKToKKyAgICAgICAgICAgICAgICByZWFkaW5nID0gVHJ1ZQorICAgICAgICAgICAgZWxpZiByZWFkaW5nIGFuZCBub3QgbGluZS5zdGFydHN3aXRoKCcgJyk6CisgICAgICAgICAgICAgICAgdGVzdHJlY2lwZXMuYXBwZW5kKGxpbmUuc3BsaXQoJzonKVswXSkKKyAgICAgICAgZm9yIHRlc3RyZWNpcGUgaW4gdGVzdHJlY2lwZXM6CisgICAgICAgICAgICAjIENoZWNrIGl0J3MgYSB2YWxpZCByZWNpcGUKKyAgICAgICAgICAgIGJpdGJha2UoJyVzIC1lJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICAgICAjIGRldnRvb2wgZXh0cmFjdCBzaG91bGQgZmFpbAorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGV4dHJhY3QgJXMgJXMnICUgKHRlc3RyZWNpcGUsIG9zLnBhdGguam9pbih0ZW1wZGlyLCB0ZXN0cmVjaXBlKSksIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0LnN0YXR1cywgMCwgJ2RldnRvb2wgZXh0cmFjdCBvbiAlcyBzaG91bGQgaGF2ZSBmYWlsZWQuIGRldnRvb2wgb3V0cHV0OiAlcycgJSAodGVzdHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdGZXRjaGluZyAnLCByZXN1bHQub3V0cHV0LCAnZGV2dG9vbCBleHRyYWN0IG9uICVzIHNob3VsZCBoYXZlIGVycm9yZWQgb3V0IGJlZm9yZSB0cnlpbmcgdG8gZmV0Y2gnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0VSUk9SOiAnLCByZXN1bHQub3V0cHV0LCAnZGV2dG9vbCBleHRyYWN0IG9uICVzIHNob3VsZCBoYXZlIGdpdmVuIGFuIEVSUk9SJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICAgICAjIGRldnRvb2wgbW9kaWZ5IHNob3VsZCBmYWlsCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZSkpLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsICdkZXZ0b29sIG1vZGlmeSBvbiAlcyBzaG91bGQgaGF2ZSBmYWlsZWQuIGRldnRvb2wgb3V0cHV0OiAlcycgJSAgKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignRVJST1I6ICcsIHJlc3VsdC5vdXRwdXQsICdkZXZ0b29sIG1vZGlmeSBvbiAlcyBzaG91bGQgaGF2ZSBnaXZlbiBhbiBFUlJPUicgJSB0ZXN0cmVjaXBlKQorCisgICAgZGVmIHRlc3RfZGV2dG9vbF9tb2RpZnlfbmF0aXZlKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUcnkgbW9kaWZ5aW5nIHNvbWUgcmVjaXBlcworICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisKKyAgICAgICAgYmJjbGFzc2V4dGVuZGVkID0gRmFsc2UKKyAgICAgICAgaW5oZXJpdG5hdGl2ZSA9IEZhbHNlCisgICAgICAgIHRlc3RyZWNpcGVzID0gJ210b29scy1uYXRpdmUgYXB0LW5hdGl2ZSBkZXNrdG9wLWZpbGUtdXRpbHMtbmF0aXZlJy5zcGxpdCgpCisgICAgICAgIGZvciB0ZXN0cmVjaXBlIGluIHRlc3RyZWNpcGVzOgorICAgICAgICAgICAgY2hlY2tleHRlbmQgPSAnbmF0aXZlJyBpbiAoZ2V0X2JiX3ZhcignQkJDTEFTU0VYVEVORCcsIHRlc3RyZWNpcGUpIG9yICcnKS5zcGxpdCgpCisgICAgICAgICAgICBpZiBub3QgYmJjbGFzc2V4dGVuZGVkOgorICAgICAgICAgICAgICAgIGJiY2xhc3NleHRlbmRlZCA9IGNoZWNrZXh0ZW5kCisgICAgICAgICAgICBpZiBub3QgaW5oZXJpdG5hdGl2ZToKKyAgICAgICAgICAgICAgICBpbmhlcml0bmF0aXZlID0gbm90IGNoZWNrZXh0ZW5kCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignRVJST1I6ICcsIHJlc3VsdC5vdXRwdXQsICdFUlJPUiBpbiBkZXZ0b29sIG1vZGlmeSBvdXRwdXQ6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYnVpbGQgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0VSUk9SOiAnLCByZXN1bHQub3V0cHV0LCAnRVJST1IgaW4gZGV2dG9vbCBidWlsZCBvdXRwdXQ6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgcmVzZXQgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0VSUk9SOiAnLCByZXN1bHQub3V0cHV0LCAnRVJST1IgaW4gZGV2dG9vbCByZXNldCBvdXRwdXQ6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiY2xhc3NleHRlbmRlZCwgJ05vbmUgb2YgdGhlc2UgcmVjaXBlcyBhcmUgQkJDTEFTU0VYVEVORGVkIHRvIG5hdGl2ZSAtIG5lZWQgdG8gYWRqdXN0IHRlc3RyZWNpcGVzIGxpc3Q6ICVzJyAlICcsICcuam9pbih0ZXN0cmVjaXBlcykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbmhlcml0bmF0aXZlLCAnTm9uZSBvZiB0aGVzZSByZWNpcGVzIGRvICJpbmhlcml0IG5hdGl2ZSIgLSBuZWVkIHRvIGFkanVzdCB0ZXN0cmVjaXBlcyBsaXN0OiAlcycgJSAnLCAnLmpvaW4odGVzdHJlY2lwZXMpKQorCisKKyAgICBAdGVzdGNhc2UoMTE2NSkKKyAgICBkZWYgdGVzdF9kZXZ0b29sX21vZGlmeV9naXQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICB0ZXN0cmVjaXBlID0gJ21rZWxmaW1hZ2UnCisgICAgICAgIHNyY191cmkgPSBnZXRfYmJfdmFyKCdTUkNfVVJJJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignZ2l0Oi8vJywgc3JjX3VyaSwgJ1RoaXMgdGVzdCBleHBlY3RzIHRoZSAlcyByZWNpcGUgdG8gYmUgYSBnaXQgcmVjaXBlJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgQ2xlYW4gdXAgYW55dGhpbmcgaW4gdGhlIHdvcmtkaXIvc3lzcm9vdC9zc3RhdGUgY2FjaGUKKyAgICAgICAgYml0YmFrZSgnJXMgLWMgY2xlYW5zc3RhdGUnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBUcnkgbW9kaWZ5aW5nIGEgcmVjaXBlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnTWFrZWZpbGUnKSksICdFeHRyYWN0ZWQgc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnLmdpdCcpKSwgJ2dpdCByZXBvc2l0b3J5IGZvciBleHRlcm5hbCBzb3VyY2UgdHJlZSBub3QgZm91bmQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHdvcmtzcGFjZWRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpKSwgJ1dvcmtzcGFjZSBkaXJlY3Rvcnkgbm90IGNyZWF0ZWQuIGRldnRvb2wgb3V0cHV0OiAlcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBtYXRjaGVzID0gZ2xvYi5nbG9iKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdhcHBlbmRzJywgJ21rZWxmaW1hZ2VfKi5iYmFwcGVuZCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2hlcywgJ2JiYXBwZW5kIG5vdCBjcmVhdGVkJykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVtcGRpciwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBDaGVjayBnaXQgcmVwbworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW4nLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICIiLCAnQ3JlYXRlZCBnaXQgcmVwbyBpcyBub3QgY2xlYW4nKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzeW1ib2xpYy1yZWYgSEVBRCcsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgInJlZnMvaGVhZHMvZGV2dG9vbCIsICdXcm9uZyBicmFuY2ggaW4gZ2l0IHJlcG8nKQorICAgICAgICAjIFRyeSBidWlsZGluZworICAgICAgICBiaXRiYWtlKHRlc3RyZWNpcGUpCisKKyAgICBAdGVzdGNhc2UoMTE2NykKKyAgICBkZWYgdGVzdF9kZXZ0b29sX21vZGlmeV9sb2NhbGZpbGVzKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdsaWdodHRwZCcKKyAgICAgICAgc3JjX3VyaSA9IChnZXRfYmJfdmFyKCdTUkNfVVJJJywgdGVzdHJlY2lwZSkgb3IgJycpLnNwbGl0KCkKKyAgICAgICAgZm91bmRsb2NhbCA9IEZhbHNlCisgICAgICAgIGZvciBpdGVtIGluIHNyY191cmk6CisgICAgICAgICAgICBpZiBpdGVtLnN0YXJ0c3dpdGgoJ2ZpbGU6Ly8nKSBhbmQgJy5wYXRjaCcgbm90IGluIGl0ZW06CisgICAgICAgICAgICAgICAgZm91bmRsb2NhbCA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBzZWxmLmFzc2VydFRydWUoZm91bmRsb2NhbCwgJ1RoaXMgdGVzdCBleHBlY3RzIHRoZSAlcyByZWNpcGUgdG8gZmV0Y2ggbG9jYWwgZmlsZXMgYW5kIGl0IHNlZW1zIHRoYXQgaXQgbm8gbG9uZ2VyIGRvZXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBDbGVhbiB1cCBhbnl0aGluZyBpbiB0aGUgd29ya2Rpci9zeXNyb290L3NzdGF0ZSBjYWNoZQorICAgICAgICBiaXRiYWtlKCclcyAtYyBjbGVhbnNzdGF0ZScgJSB0ZXN0cmVjaXBlKQorICAgICAgICAjIFRyeSBtb2RpZnlpbmcgYSByZWNpcGUKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgLXggJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBkaXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHRlbXBkaXIsICdjb25maWd1cmUuYWMnKSksICdFeHRyYWN0ZWQgc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZCcpCisgICAgICAgIG1hdGNoZXMgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHdvcmtzcGFjZWRpciwgJ2FwcGVuZHMnLCAnJXNfKi5iYmFwcGVuZCcgJSB0ZXN0cmVjaXBlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGNoZXMsICdiYmFwcGVuZCBub3QgY3JlYXRlZCcpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZXN0cmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHRlbXBkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgVHJ5IGJ1aWxkaW5nCisgICAgICAgIGJpdGJha2UodGVzdHJlY2lwZSkKKworICAgIEB0ZXN0Y2FzZSgxMTY5KQorICAgIGRlZiB0ZXN0X2RldnRvb2xfdXBkYXRlX3JlY2lwZShzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgIHRlc3RyZWNpcGUgPSAnbWluaWNvbScKKyAgICAgICAgcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCB0ZXN0cmVjaXBlKQorICAgICAgICBzcmNfdXJpID0gZ2V0X2JiX3ZhcignU1JDX1VSSScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2dpdDovLycsIHNyY191cmksICdUaGlzIHRlc3QgZXhwZWN0cyB0aGUgJXMgcmVjaXBlIHRvIE5PVCBiZSBhIGdpdCByZWNpcGUnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC4gLS1wb3JjZWxhaW4nLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICclcyByZWNpcGUgaXMgbm90IGNsZWFuJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgRmlyc3QsIG1vZGlmeSBhIHJlY2lwZQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgICMgKGRvbid0IGJvdGhlciB3aXRoIGNsZWFuaW5nIHRoZSByZWNpcGUgb24gdGVhcmRvd24sIHdlIHdvbid0IGJlIGJ1aWxkaW5nIGl0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wZGlyKSkKKyAgICAgICAgIyBDaGVjayBnaXQgcmVwbworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4odGVtcGRpciwgJy5naXQnKSksICdnaXQgcmVwb3NpdG9yeSBmb3IgZXh0ZXJuYWwgc291cmNlIHRyZWUgbm90IGZvdW5kJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJ0NyZWF0ZWQgZ2l0IHJlcG8gaXMgbm90IGNsZWFuJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3ltYm9saWMtcmVmIEhFQUQnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICJyZWZzL2hlYWRzL2RldnRvb2wiLCAnV3JvbmcgYnJhbmNoIGluIGdpdCByZXBvJykKKyAgICAgICAgIyBBZGQgYSBjb3VwbGUgb2YgY29tbWl0cworICAgICAgICAjIEZJWE1FOiB0aGlzIG9ubHkgdGVzdHMgYWRkaW5nLCBuZWVkIHRvIGFsc28gdGVzdCB1cGRhdGUgYW5kIHJlbW92ZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2VjaG8gIkFkZGl0aW9uYWwgbGluZSIgPj4gUkVBRE1FJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlIHRoZSBSRUFETUUiJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZWNobyAiQSBuZXcgZmlsZSIgPiBkZXZ0b29sLW5ldy1maWxlJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGFkZCBkZXZ0b29sLW5ldy1maWxlJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCAtbSAiQWRkIGEgbmV3IGZpbGUiJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2NkICVzOyBybSAlcy8qLnBhdGNoOyBnaXQgY2hlY2tvdXQgJXMgJXMnICUgKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgdGVzdHJlY2lwZSwgdGVzdHJlY2lwZSwgb3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKSkpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAuIC0tcG9yY2VsYWluJywgY3dkPW9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICIiLCAnJXMgcmVjaXBlIHNob3VsZCBiZSBtb2RpZmllZCcgJSB0ZXN0cmVjaXBlKQorICAgICAgICBzdGF0dXMgPSByZXN1bHQub3V0cHV0LnNwbGl0bGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzdGF0dXMpLCAzLCAnTGVzcy9tb3JlIGZpbGVzIG1vZGlmaWVkIHRoYW4gZXhwZWN0ZWQuIEVudGlyZSBzdGF0dXM6XG4lcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBmb3IgbGluZSBpbiBzdGF0dXM6CisgICAgICAgICAgICBpZiBsaW5lLmVuZHN3aXRoKCcwMDAxLUNoYW5nZS10aGUtUkVBRE1FLnBhdGNoJyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lWzozXSwgJz8/ICcsICdVbmV4cGVjdGVkIHN0YXR1cyBpbiBsaW5lOiAlcycgJSBsaW5lKQorICAgICAgICAgICAgZWxpZiBsaW5lLmVuZHN3aXRoKCcwMDAyLUFkZC1hLW5ldy1maWxlLnBhdGNoJyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lWzozXSwgJz8/ICcsICdVbmV4cGVjdGVkIHN0YXR1cyBpbiBsaW5lOiAlcycgJSBsaW5lKQorICAgICAgICAgICAgZWxpZiByZS5zZWFyY2goJyVzX1teX10qLmJiJCcgJSB0ZXN0cmVjaXBlLCBsaW5lKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVbOjNdLCAnIE0gJywgJ1VuZXhwZWN0ZWQgc3RhdHVzIGluIGxpbmU6ICVzJyAlIGxpbmUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdVbmV4cGVjdGVkIG1vZGlmaWVkIGZpbGUgaW4gc3RhdHVzOiAlcycgJSBsaW5lKQorCisgICAgQHRlc3RjYXNlKDExNzIpCisgICAgZGVmIHRlc3RfZGV2dG9vbF91cGRhdGVfcmVjaXBlX2dpdChzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgIHRlc3RyZWNpcGUgPSAnbXRkLXV0aWxzJworICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNyY191cmkgPSBnZXRfYmJfdmFyKCdTUkNfVVJJJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignZ2l0Oi8vJywgc3JjX3VyaSwgJ1RoaXMgdGVzdCBleHBlY3RzIHRoZSAlcyByZWNpcGUgdG8gYmUgYSBnaXQgcmVjaXBlJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHBhdGNoZXMgPSBbXQorICAgICAgICBmb3IgZW50cnkgaW4gc3JjX3VyaS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgZW50cnkuc3RhcnRzd2l0aCgnZmlsZTovLycpIGFuZCBlbnRyeS5lbmRzd2l0aCgnLnBhdGNoJyk6CisgICAgICAgICAgICAgICAgcGF0Y2hlcy5hcHBlbmQoZW50cnlbNzpdLnNwbGl0KCc7JylbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihsZW4ocGF0Y2hlcyksIDAsICdUaGUgJXMgcmVjaXBlIGRvZXMgbm90IGFwcGVhciB0byBjb250YWluIGFueSBwYXRjaGVzLCBzbyB0aGlzIHRlc3Qgd2lsbCBub3QgYmUgZWZmZWN0aXZlJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAuIC0tcG9yY2VsYWluJywgY3dkPW9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICIiLCAnJXMgcmVjaXBlIGlzIG5vdCBjbGVhbicgJSB0ZXN0cmVjaXBlKQorICAgICAgICAjIEZpcnN0LCBtb2RpZnkgYSByZWNpcGUKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICAjIChkb24ndCBib3RoZXIgd2l0aCBjbGVhbmluZyB0aGUgcmVjaXBlIG9uIHRlYXJkb3duLCB3ZSB3b24ndCBiZSBidWlsZGluZyBpdCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGRpcikpCisgICAgICAgICMgQ2hlY2sgZ2l0IHJlcG8KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHRlbXBkaXIsICcuZ2l0JykpLCAnZ2l0IHJlcG9zaXRvcnkgZm9yIGV4dGVybmFsIHNvdXJjZSB0cmVlIG5vdCBmb3VuZCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbicsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICdDcmVhdGVkIGdpdCByZXBvIGlzIG5vdCBjbGVhbicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN5bWJvbGljLXJlZiBIRUFEJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAicmVmcy9oZWFkcy9kZXZ0b29sIiwgJ1dyb25nIGJyYW5jaCBpbiBnaXQgcmVwbycpCisgICAgICAgICMgQWRkIGEgY291cGxlIG9mIGNvbW1pdHMKKyAgICAgICAgIyBGSVhNRTogdGhpcyBvbmx5IHRlc3RzIGFkZGluZywgbmVlZCB0byBhbHNvIHRlc3QgdXBkYXRlIGFuZCByZW1vdmUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdlY2hvICIjIEFkZGl0aW9uYWwgbGluZSIgPj4gTWFrZWZpbGUnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgY29tbWl0IC1hIC1tICJDaGFuZ2UgdGhlIE1ha2VmaWxlIicsIGN3ZD10ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2VjaG8gIkEgbmV3IGZpbGUiID4gZGV2dG9vbC1uZXctZmlsZScsIGN3ZD10ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBhZGQgZGV2dG9vbC1uZXctZmlsZScsIGN3ZD10ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjb21taXQgLW0gIkFkZCBhIG5ldyBmaWxlIicsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjZCAlczsgcm0gLXJmICVzOyBnaXQgY2hlY2tvdXQgJXMgJXMnICUgKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgdGVzdHJlY2lwZSwgdGVzdHJlY2lwZSwgb3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKSkpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlIC1tIHNyY3JldiAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLiAtLXBvcmNlbGFpbicsIGN3ZD1vcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJyVzIHJlY2lwZSBzaG91bGQgYmUgbW9kaWZpZWQnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgc3RhdHVzID0gcmVzdWx0Lm91dHB1dC5zcGxpdGxpbmVzKCkKKyAgICAgICAgZm9yIGxpbmUgaW4gc3RhdHVzOgorICAgICAgICAgICAgZm9yIHBhdGNoIGluIHBhdGNoZXM6CisgICAgICAgICAgICAgICAgaWYgbGluZS5lbmRzd2l0aChwYXRjaCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZVs6M10sICcgRCAnLCAnVW5leHBlY3RlZCBzdGF0dXMgaW4gbGluZTogJXMnICUgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKCclc19bXl9dKi5iYiQnICUgdGVzdHJlY2lwZSwgbGluZSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZVs6M10sICcgTSAnLCAnVW5leHBlY3RlZCBzdGF0dXMgaW4gbGluZTogJXMnICUgbGluZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignVW5leHBlY3RlZCBtb2RpZmllZCBmaWxlIGluIHN0YXR1czogJXMnICUgbGluZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgZGlmZiAlcycgJSBvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZWZpbGUpLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICBhZGRsaW5lcyA9IFsnU1JDUkVWID0gIi4qIicsICdTUkNfVVJJID0gImdpdDovL2dpdC5pbmZyYWRlYWQub3JnL210ZC11dGlscy5naXQiJ10KKyAgICAgICAgc3JjdXJpbGluZXMgPSBzcmNfdXJpLnNwbGl0KCkKKyAgICAgICAgc3JjdXJpbGluZXNbMF0gPSAnU1JDX1VSSSA9ICInICsgc3JjdXJpbGluZXNbMF0KKyAgICAgICAgc3JjdXJpbGluZXMuYXBwZW5kKCciJykKKyAgICAgICAgcmVtb3ZlbGluZXMgPSBbJ1NSQ1JFViA9ICIuKiInXSArIHNyY3VyaWxpbmVzCisgICAgICAgIGZvciBsaW5lIGluIHJlc3VsdC5vdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcrKysnKSBvciBsaW5lLnN0YXJ0c3dpdGgoJy0tLScpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnKycpOgorICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIGFkZGxpbmVzOgorICAgICAgICAgICAgICAgICAgICBpZiByZS5tYXRjaChpdGVtLCBsaW5lWzE6XS5zdHJpcCgpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRjaGVkLCAnVW5leHBlY3RlZCBkaWZmIGFkZCBsaW5lOiAlcycgJSBsaW5lKQorICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJy0nKToKKyAgICAgICAgICAgICAgICBtYXRjaGVkID0gRmFsc2UKKyAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiByZW1vdmVsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2goaXRlbSwgbGluZVsxOl0uc3RyaXAoKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2hlZCwgJ1VuZXhwZWN0ZWQgZGlmZiByZW1vdmUgbGluZTogJXMnICUgbGluZSkKKyAgICAgICAgIyBOb3cgdHJ5IHdpdGggYXV0byBtb2RlCisgICAgICAgIHJ1bkNtZCgnY2QgJXM7IGdpdCBjaGVja291dCAlcyAlcycgJSAob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCB0ZXN0cmVjaXBlLCBvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZWZpbGUpKSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCcpCisgICAgICAgIHRvcGxldmVsZGlyID0gcmVzdWx0Lm91dHB1dC5zdHJpcCgpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAuIC0tcG9yY2VsYWluJywgY3dkPW9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSkKKyAgICAgICAgc3RhdHVzID0gcmVzdWx0Lm91dHB1dC5zcGxpdGxpbmVzKCkKKyAgICAgICAgcmVscGF0Y2hwYXRoID0gb3MucGF0aC5qb2luKG9zLnBhdGgucmVscGF0aChvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIHRvcGxldmVsZGlyKSwgdGVzdHJlY2lwZSkKKyAgICAgICAgZXhwZWN0ZWRzdGF0dXMgPSBbKCdNJywgb3MucGF0aC5yZWxwYXRoKHJlY2lwZWZpbGUsIHRvcGxldmVsZGlyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnPz8nLCAnJXMvMDAwMS1DaGFuZ2UtdGhlLU1ha2VmaWxlLnBhdGNoJyAlIHJlbHBhdGNocGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnPz8nLCAnJXMvMDAwMi1BZGQtYS1uZXctZmlsZS5wYXRjaCcgJSByZWxwYXRjaHBhdGgpXQorICAgICAgICBmb3IgbGluZSBpbiBzdGF0dXM6CisgICAgICAgICAgICBzdGF0dXNsaW5lID0gbGluZS5zcGxpdChOb25lLCAxKQorICAgICAgICAgICAgZm9yIGZzdGF0dXMsIGZuIGluIGV4cGVjdGVkc3RhdHVzOgorICAgICAgICAgICAgICAgIGlmIGZuID09IHN0YXR1c2xpbmVbMV06CisgICAgICAgICAgICAgICAgICAgIGlmIGZzdGF0dXMgIT0gc3RhdHVzbGluZVswXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5leHBlY3RlZCBzdGF0dXMgaW4gbGluZTogJXMnICUgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdVbmV4cGVjdGVkIG1vZGlmaWVkIGZpbGUgaW4gbGluZTogJXMnICUgbGluZSkKKworICAgIEB0ZXN0Y2FzZSgxMTcwKQorICAgIGRlZiB0ZXN0X2RldnRvb2xfdXBkYXRlX3JlY2lwZV9hcHBlbmQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICB0ZXN0cmVjaXBlID0gJ21kYWRtJworICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNyY191cmkgPSBnZXRfYmJfdmFyKCdTUkNfVVJJJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignZ2l0Oi8vJywgc3JjX3VyaSwgJ1RoaXMgdGVzdCBleHBlY3RzIHRoZSAlcyByZWNpcGUgdG8gTk9UIGJlIGEgZ2l0IHJlY2lwZScgJSB0ZXN0cmVjaXBlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLiAtLXBvcmNlbGFpbicsIGN3ZD1vcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJyVzIHJlY2lwZSBpcyBub3QgY2xlYW4nICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBGaXJzdCwgbW9kaWZ5IGEgcmVjaXBlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgdGVtcHNyY2RpciA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAnc291cmNlJykKKyAgICAgICAgdGVtcGxheWVyZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdsYXllcicpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgICMgKGRvbid0IGJvdGhlciB3aXRoIGNsZWFuaW5nIHRoZSByZWNpcGUgb24gdGVhcmRvd24sIHdlIHdvbid0IGJlIGJ1aWxkaW5nIGl0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wc3JjZGlyKSkKKyAgICAgICAgIyBDaGVjayBnaXQgcmVwbworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4odGVtcHNyY2RpciwgJy5naXQnKSksICdnaXQgcmVwb3NpdG9yeSBmb3IgZXh0ZXJuYWwgc291cmNlIHRyZWUgbm90IGZvdW5kJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJ0NyZWF0ZWQgZ2l0IHJlcG8gaXMgbm90IGNsZWFuJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3ltYm9saWMtcmVmIEhFQUQnLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICJyZWZzL2hlYWRzL2RldnRvb2wiLCAnV3JvbmcgYnJhbmNoIGluIGdpdCByZXBvJykKKyAgICAgICAgIyBBZGQgYSBjb21taXQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJzZWQgJ3MhXFwoI2RlZmluZSBWRVJTSU9OXFxXKlwiW15cIl0qXFwpXCIhXFwxLWN1c3RvbVwiIScgLWkgUmVhZE1lLmMiLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgY29tbWl0IC1hIC1tICJBZGQgb3VyIGN1c3RvbSB2ZXJzaW9uIicsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjZCAlczsgcm0gLWYgJXMvKi5wYXRjaDsgZ2l0IGNoZWNrb3V0IC4nICUgKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgdGVzdHJlY2lwZSkpCisgICAgICAgICMgQ3JlYXRlIGEgdGVtcG9yYXJ5IGxheWVyIGFuZCBhZGQgaXQgdG8gYmJsYXllcnMuY29uZgorICAgICAgICBzZWxmLl9jcmVhdGVfdGVtcF9sYXllcih0ZW1wbGF5ZXJkaXIsIFRydWUsICdzZWxmdGVzdHVwZGF0ZXJlY2lwZScpCisgICAgICAgICMgQ3JlYXRlIHRoZSBiYmFwcGVuZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAlcyAtYSAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGxheWVyZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzonLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIHJlY2lwZSBpcyBzdGlsbCBjbGVhbgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLiAtLXBvcmNlbGFpbicsIGN3ZD1vcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJyVzIHJlY2lwZSBpcyBub3QgY2xlYW4nICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBDaGVjayBiYmFwcGVuZCB3YXMgY3JlYXRlZAorICAgICAgICBzcGxpdHBhdGggPSBvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkuc3BsaXQob3Muc2VwKQorICAgICAgICBhcHBlbmRkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGxheWVyZGlyLCBzcGxpdHBhdGhbLTJdLCBzcGxpdHBhdGhbLTFdKQorICAgICAgICBiYmFwcGVuZGZpbGUgPSBzZWxmLl9jaGVja19iYmFwcGVuZCh0ZXN0cmVjaXBlLCByZWNpcGVmaWxlLCBhcHBlbmRkaXIpCisgICAgICAgIHBhdGNoZmlsZSA9IG9zLnBhdGguam9pbihhcHBlbmRkaXIsIHRlc3RyZWNpcGUsICcwMDAxLUFkZC1vdXItY3VzdG9tLXZlcnNpb24ucGF0Y2gnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocGF0Y2hmaWxlKSwgJ1BhdGNoIGZpbGUgbm90IGNyZWF0ZWQnKQorCisgICAgICAgICMgQ2hlY2sgYmJhcHBlbmQgY29udGVudHMKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1BZGQtb3VyLWN1c3RvbS12ZXJzaW9uLnBhdGNoIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICB3aXRoIG9wZW4oYmJhcHBlbmRmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkbGluZXMsIGYucmVhZGxpbmVzKCkpCisKKyAgICAgICAgIyBDaGVjayB3ZSBjYW4gcnVuIGl0IGFnYWluIGFuZCBiYmFwcGVuZCBpc24ndCBtb2RpZmllZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAlcyAtYSAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGxheWVyZGlyKSkKKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQorICAgICAgICAjIERyb3AgbmV3IGNvbW1pdCBhbmQgY2hlY2sgcGF0Y2ggZ2V0cyBkZWxldGVkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHJlc2V0IEhFQUReJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHBhdGNoZmlsZSksICdQYXRjaCBmaWxlIG5vdCBkZWxldGVkJykKKyAgICAgICAgZXhwZWN0ZWRsaW5lczIgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzMiwgZi5yZWFkbGluZXMoKSkKKyAgICAgICAgIyBQdXQgY29tbWl0IGJhY2sgYW5kIGNoZWNrIHdlIGNhbiBydW4gaXQgaWYgbGF5ZXIgaXNuJ3QgaW4gYmJsYXllcnMuY29uZgorICAgICAgICBvcy5yZW1vdmUoYmJhcHBlbmRmaWxlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjb21taXQgLWEgLW0gIkFkZCBvdXIgY3VzdG9tIHZlcnNpb24iJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICVzJyAlIHRlbXBsYXllcmRpciwgY3dkPXNlbGYuYnVpbGRkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdXQVJOSU5HOiBTcGVjaWZpZWQgbGF5ZXIgaXMgbm90IGN1cnJlbnRseSBlbmFibGVkIGluIGJibGF5ZXJzLmNvbmYnLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocGF0Y2hmaWxlKSwgJ1BhdGNoIGZpbGUgbm90IGNyZWF0ZWQgKHdpdGggZGlzYWJsZWQgbGF5ZXIpJykKKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQorICAgICAgICAjIERlbGV0aW5nIGlzbid0IGV4cGVjdGVkIHRvIHdvcmsgdW5kZXIgdGhlc2UgY2lyY3Vtc3RhbmNlcworCisgICAgQHRlc3RjYXNlKDExNzEpCisgICAgZGVmIHRlc3RfZGV2dG9vbF91cGRhdGVfcmVjaXBlX2FwcGVuZF9naXQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICB0ZXN0cmVjaXBlID0gJ210ZC11dGlscycKKyAgICAgICAgcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCB0ZXN0cmVjaXBlKQorICAgICAgICBzcmNfdXJpID0gZ2V0X2JiX3ZhcignU1JDX1VSSScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2dpdDovLycsIHNyY191cmksICdUaGlzIHRlc3QgZXhwZWN0cyB0aGUgJXMgcmVjaXBlIHRvIGJlIGEgZ2l0IHJlY2lwZScgJSB0ZXN0cmVjaXBlKQorICAgICAgICBmb3IgZW50cnkgaW4gc3JjX3VyaS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgZW50cnkuc3RhcnRzd2l0aCgnZ2l0Oi8vJyk6CisgICAgICAgICAgICAgICAgZ2l0X3VyaSA9IGVudHJ5CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC4gLS1wb3JjZWxhaW4nLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICclcyByZWNpcGUgaXMgbm90IGNsZWFuJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgRmlyc3QsIG1vZGlmeSBhIHJlY2lwZQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHRlbXBzcmNkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ3NvdXJjZScpCisgICAgICAgIHRlbXBsYXllcmRpciA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAnbGF5ZXInKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICAjIChkb24ndCBib3RoZXIgd2l0aCBjbGVhbmluZyB0aGUgcmVjaXBlIG9uIHRlYXJkb3duLCB3ZSB3b24ndCBiZSBidWlsZGluZyBpdCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAodGVzdHJlY2lwZSwgdGVtcHNyY2RpcikpCisgICAgICAgICMgQ2hlY2sgZ2l0IHJlcG8KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHRlbXBzcmNkaXIsICcuZ2l0JykpLCAnZ2l0IHJlcG9zaXRvcnkgZm9yIGV4dGVybmFsIHNvdXJjZSB0cmVlIG5vdCBmb3VuZCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbicsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICdDcmVhdGVkIGdpdCByZXBvIGlzIG5vdCBjbGVhbicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN5bWJvbGljLXJlZiBIRUFEJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAicmVmcy9oZWFkcy9kZXZ0b29sIiwgJ1dyb25nIGJyYW5jaCBpbiBnaXQgcmVwbycpCisgICAgICAgICMgQWRkIGEgY29tbWl0CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZWNobyAiIyBBZGRpdGlvbmFsIGxpbmUiID4+IE1ha2VmaWxlJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlIHRoZSBNYWtlZmlsZSInLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignY2QgJXM7IHJtIC1mICVzLyoucGF0Y2g7IGdpdCBjaGVja291dCAuJyAlIChvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIHRlc3RyZWNpcGUpKQorICAgICAgICAjIENyZWF0ZSBhIHRlbXBvcmFyeSBsYXllcgorICAgICAgICBvcy5tYWtlZGlycyhvcy5wYXRoLmpvaW4odGVtcGxheWVyZGlyLCAnY29uZicpKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHRlbXBsYXllcmRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCdCQlBBVEggLj0gIjoke0xBWUVSRElSfSJcbicpCisgICAgICAgICAgICBmLndyaXRlKCdCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ0JCRklMRV9DT0xMRUNUSU9OUyArPSAib2VzZWxmdGVzdHRlbXBsYXllciJcbicpCisgICAgICAgICAgICBmLndyaXRlKCdCQkZJTEVfUEFUVEVSTl9vZXNlbGZ0ZXN0dGVtcGxheWVyID0gIl4ke0xBWUVSRElSfS8iXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnQkJGSUxFX1BSSU9SSVRZX29lc2VsZnRlc3R0ZW1wbGF5ZXIgPSAiOTk5IlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ0JCRklMRV9QQVRURVJOX0lHTk9SRV9FTVBUWV9vZXNlbGZ0ZXN0dGVtcGxheWVyID0gIjEiXG4nKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgJXMgfHwgdHJ1ZScgJSB0ZW1wbGF5ZXJkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgYWRkLWxheWVyICVzJyAlIHRlbXBsYXllcmRpciwgY3dkPXNlbGYuYnVpbGRkaXIpCisgICAgICAgICMgQ3JlYXRlIHRoZSBiYmFwcGVuZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAtbSBzcmNyZXYgJXMgLWEgJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBsYXllcmRpcikpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6JywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBDaGVjayByZWNpcGUgaXMgc3RpbGwgY2xlYW4KKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC4gLS1wb3JjZWxhaW4nLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICclcyByZWNpcGUgaXMgbm90IGNsZWFuJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgQ2hlY2sgYmJhcHBlbmQgd2FzIGNyZWF0ZWQKKyAgICAgICAgc3BsaXRwYXRoID0gb3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLnNwbGl0KG9zLnNlcCkKKyAgICAgICAgYXBwZW5kZGlyID0gb3MucGF0aC5qb2luKHRlbXBsYXllcmRpciwgc3BsaXRwYXRoWy0yXSwgc3BsaXRwYXRoWy0xXSkKKyAgICAgICAgYmJhcHBlbmRmaWxlID0gc2VsZi5fY2hlY2tfYmJhcHBlbmQodGVzdHJlY2lwZSwgcmVjaXBlZmlsZSwgYXBwZW5kZGlyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihhcHBlbmRkaXIsIHRlc3RyZWNpcGUpKSwgJ1BhdGNoIGRpcmVjdG9yeSBzaG91bGQgbm90IGJlIGNyZWF0ZWQnKQorCisgICAgICAgICMgQ2hlY2sgYmJhcHBlbmQgY29udGVudHMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgcmV2LXBhcnNlIEhFQUQnLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnU1JDUkVWID0gIiVzIlxuJyAlIHJlc3VsdC5vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSA9ICIlcyJcbicgJSBnaXRfdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisgICAgICAgIHdpdGggb3BlbihiYmFwcGVuZGZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRsaW5lcywgZi5yZWFkbGluZXMoKSkKKworICAgICAgICAjIENoZWNrIHdlIGNhbiBydW4gaXQgYWdhaW4gYW5kIGJiYXBwZW5kIGlzbid0IG1vZGlmaWVkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlIC1tIHNyY3JldiAlcyAtYSAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGxheWVyZGlyKSkKKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQorICAgICAgICAjIERyb3AgbmV3IGNvbW1pdCBhbmQgY2hlY2sgU1JDUkVWIGNoYW5nZXMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgcmVzZXQgSEVBRF4nLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgLW0gc3JjcmV2ICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihhcHBlbmRkaXIsIHRlc3RyZWNpcGUpKSwgJ1BhdGNoIGRpcmVjdG9yeSBzaG91bGQgbm90IGJlIGNyZWF0ZWQnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCByZXYtcGFyc2UgSEVBRCcsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydTUkNSRVYgPSAiJXMiXG4nICUgcmVzdWx0Lm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJID0gIiVzIlxuJyAlIGdpdF91cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQorICAgICAgICAjIFB1dCBjb21taXQgYmFjayBhbmQgY2hlY2sgd2UgY2FuIHJ1biBpdCBpZiBsYXllciBpc24ndCBpbiBiYmxheWVycy5jb25mCisgICAgICAgIG9zLnJlbW92ZShiYmFwcGVuZGZpbGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlIHRoZSBNYWtlZmlsZSInLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgJXMnICUgdGVtcGxheWVyZGlyLCBjd2Q9c2VsZi5idWlsZGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgLW0gc3JjcmV2ICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdXQVJOSU5HOiBTcGVjaWZpZWQgbGF5ZXIgaXMgbm90IGN1cnJlbnRseSBlbmFibGVkIGluIGJibGF5ZXJzLmNvbmYnLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihhcHBlbmRkaXIsIHRlc3RyZWNpcGUpKSwgJ1BhdGNoIGRpcmVjdG9yeSBzaG91bGQgbm90IGJlIGNyZWF0ZWQnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCByZXYtcGFyc2UgSEVBRCcsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydTUkNSRVYgPSAiJXMiXG4nICUgcmVzdWx0Lm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJID0gIiVzIlxuJyAlIGdpdF91cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQorICAgICAgICAjIERlbGV0aW5nIGlzbid0IGV4cGVjdGVkIHRvIHdvcmsgdW5kZXIgdGhlc2UgY2lyY3Vtc3RhbmNlcworCisgICAgQHRlc3RjYXNlKDExNjMpCisgICAgZGVmIHRlc3RfZGV2dG9vbF9leHRyYWN0KHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICAjIFRyeSBkZXZ0b29sIGV4dHJhY3QKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGV4dHJhY3QgcmVtYWtlICVzJyAlIHRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4odGVtcGRpciwgJ01ha2VmaWxlLmFtJykpLCAnRXh0cmFjdGVkIHNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4odGVtcGRpciwgJy5naXQnKSksICdnaXQgcmVwb3NpdG9yeSBmb3IgZXh0ZXJuYWwgc291cmNlIHRyZWUgbm90IGZvdW5kJykKKworICAgIEB0ZXN0Y2FzZSgxMTY4KQorICAgIGRlZiB0ZXN0X2RldnRvb2xfcmVzZXRfYWxsKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICB0ZXN0cmVjaXBlMSA9ICdtZGFkbScKKyAgICAgICAgdGVzdHJlY2lwZTIgPSAnY3JvbmllJworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5IC14ICVzICVzJyAlICh0ZXN0cmVjaXBlMSwgb3MucGF0aC5qb2luKHRlbXBkaXIsIHRlc3RyZWNpcGUxKSkpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgLXggJXMgJXMnICUgKHRlc3RyZWNpcGUyLCBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZTIpKSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGJ1aWxkICVzJyAlIHRlc3RyZWNpcGUxKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYnVpbGQgJXMnICUgdGVzdHJlY2lwZTIpCisgICAgICAgIHN0YW1wcHJlZml4MSA9IGdldF9iYl92YXIoJ1NUQU1QJywgdGVzdHJlY2lwZTEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGFtcHByZWZpeDEsICdVbmFibGUgdG8gZ2V0IFNUQU1QIHZhbHVlIGZvciByZWNpcGUgJXMnICUgdGVzdHJlY2lwZTEpCisgICAgICAgIHN0YW1wcHJlZml4MiA9IGdldF9iYl92YXIoJ1NUQU1QJywgdGVzdHJlY2lwZTIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGFtcHByZWZpeDIsICdVbmFibGUgdG8gZ2V0IFNUQU1QIHZhbHVlIGZvciByZWNpcGUgJXMnICUgdGVzdHJlY2lwZTIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZXNldCAtYScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZTEsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZTIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHRlc3RyZWNpcGUxLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHRlc3RyZWNpcGUyLCByZXN1bHQub3V0cHV0KQorICAgICAgICBtYXRjaGVzMSA9IGdsb2IuZ2xvYihzdGFtcHByZWZpeDEgKyAnKicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0Y2hlczEsICdTdGFtcCBmaWxlcyBleGlzdCBmb3IgcmVjaXBlICVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBjbGVhbmVkJyAlIHRlc3RyZWNpcGUxKQorICAgICAgICBtYXRjaGVzMiA9IGdsb2IuZ2xvYihzdGFtcHByZWZpeDIgKyAnKicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0Y2hlczIsICdTdGFtcCBmaWxlcyBleGlzdCBmb3IgcmVjaXBlICVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBjbGVhbmVkJyAlIHRlc3RyZWNpcGUyKQorCisgICAgZGVmIHRlc3RfZGV2dG9vbF9kZXBsb3lfdGFyZ2V0KHNlbGYpOgorICAgICAgICAjIE5PVEU6IFdoaWxzdCB0aGlzIHRlc3Qgd291bGQgc2VlbWluZ2x5IGJlIGJldHRlciBwbGFjZWQgYXMgYSBydW50aW1lIHRlc3QsCisgICAgICAgICMgdW5mb3J0dW5hdGVseSB0aGUgcnVudGltZSB0ZXN0cyBydW4gdW5kZXIgYml0YmFrZSBhbmQgeW91IGNhbid0IHJ1bgorICAgICAgICAjIGRldnRvb2wgd2l0aGluIGJpdGJha2UgKHNpbmNlIGRldnRvb2wgbmVlZHMgdG8gcnVuIGJpdGJha2UgaXRzZWxmKS4KKyAgICAgICAgIyBBZGRpdGlvbmFsbHkgd2UgYXJlIHRlc3RpbmcgYnVpbGQtdGltZSBmdW5jdGlvbmFsaXR5IGFzIHdlbGwsIHNvCisgICAgICAgICMgcmVhbGx5IHRoaXMgaGFzIHRvIGJlIGRvbmUgYXMgYW4gb2Utc2VsZnRlc3QgdGVzdC4KKyAgICAgICAgIworICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgbWFjaGluZSA9IGdldF9iYl92YXIoJ01BQ0hJTkUnKQorICAgICAgICBpZiBub3QgbWFjaGluZS5zdGFydHN3aXRoKCdxZW11Jyk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdUaGlzIHRlc3Qgb25seSB3b3JrcyB3aXRoIHFlbXUgbWFjaGluZXMnKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoJy9ldGMvcnVucWVtdS1ub3N1ZG8nKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ1lvdSBtdXN0IHNldCB1cCB0YXAgZGV2aWNlcyB3aXRoIHNjcmlwdHMvcnVucWVtdS1nZW4tdGFwZGV2cyBiZWZvcmUgcnVubmluZyB0aGlzIHRlc3QnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ1BBVEg9IiRQQVRIOi9zYmluOi91c3Ivc2JpbiIgaXAgdHVudGFwIHNob3cnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIGlmIHJlc3VsdC5zdGF0dXMgIT0gMDoKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnUEFUSD0iJFBBVEg6L3NiaW46L3Vzci9zYmluIiBpZmNvbmZpZyAtYScsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgICAgIGlmIHJlc3VsdC5zdGF0dXMgIT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdGYWlsZWQgdG8gZGV0ZXJtaW5lIGlmIHRhcCBkZXZpY2VzIGV4aXN0IHdpdGggaWZjb25maWcgb3IgaXA6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIGZvciBsaW5lIGluIHJlc3VsdC5vdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCd0YXAnKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnTm8gdGFwIGRldmljZXMgZm91bmQgLSB5b3UgbXVzdCBzZXQgdXAgdGFwIGRldmljZXMgd2l0aCBzY3JpcHRzL3J1bnFlbXUtZ2VuLXRhcGRldnMgYmVmb3JlIHJ1bm5pbmcgdGhpcyB0ZXN0JykKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBEZWZpbml0aW9ucworICAgICAgICB0ZXN0cmVjaXBlID0gJ21kYWRtJworICAgICAgICB0ZXN0ZmlsZSA9ICcvc2Jpbi9tZGFkbScKKyAgICAgICAgdGVzdGltYWdlID0gJ29lLXNlbGZ0ZXN0LWltYWdlJworICAgICAgICB0ZXN0Y29tbWFuZCA9ICcvc2Jpbi9tZGFkbSAtLWhlbHAnCisgICAgICAgICMgQnVpbGQgYW4gaW1hZ2UgdG8gcnVuCisgICAgICAgIGJpdGJha2UoIiVzIHFlbXUtbmF0aXZlIHFlbXUtaGVscGVyLW5hdGl2ZSIgJSB0ZXN0aW1hZ2UpCisgICAgICAgIGRlcGxveV9kaXJfaW1hZ2UgPSBnZXRfYmJfdmFyKCdERVBMT1lfRElSX0lNQUdFJykKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiAlcycgJSB0ZXN0aW1hZ2UpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ3JtIC1mICVzLyVzKicgJSAoZGVwbG95X2Rpcl9pbWFnZSwgdGVzdGltYWdlKSkKKyAgICAgICAgIyBDbGVhbiByZWNpcGUgc28gdGhlIGZpcnN0IGRlcGxveSB3aWxsIGZhaWwKKyAgICAgICAgYml0YmFrZSgiJXMgLWMgY2xlYW4iICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBUcnkgZGV2dG9vbCBtb2RpZnkKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgLXggJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBkaXIpKQorICAgICAgICAjIFRlc3QgdGhhdCBkZXBsb3ktdGFyZ2V0IGF0IHRoaXMgcG9pbnQgZmFpbHMgKHByb3Blcmx5KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgZGVwbG95LXRhcmdldCAtbiAlcyByb290QGxvY2FsaG9zdCcgJSB0ZXN0cmVjaXBlLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0Lm91dHB1dCwgMCwgJ2RldnRvb2wgZGVwbG95LXRhcmdldCBzaG91bGQgaGF2ZSBmYWlsZWQsIG91dHB1dDogJXMnICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihyZXN1bHQub3V0cHV0LCAnVHJhY2ViYWNrJywgJ2RldnRvb2wgZGVwbG95LXRhcmdldCBzaG91bGQgaGF2ZSBmYWlsZWQgd2l0aCBhIHByb3BlciBlcnJvciBub3QgYSB0cmFjZWJhY2ssIG91dHB1dDogJXMnICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGJ1aWxkICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgRmlyc3QgdHJ5IGEgZHJ5LXJ1biBvZiBkZXBsb3ktdGFyZ2V0CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBkZXBsb3ktdGFyZ2V0IC1uICVzIHJvb3RAbG9jYWxob3N0JyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJyAgJXMnICUgdGVzdGZpbGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQm9vdCB0aGUgaW1hZ2UKKyAgICAgICAgd2l0aCBydW5xZW11KHRlc3RpbWFnZSwgc2VsZikgYXMgcWVtdToKKyAgICAgICAgICAgICMgTm93IHJlYWxseSB0ZXN0IGRlcGxveS10YXJnZXQKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBkZXBsb3ktdGFyZ2V0IC1jICVzIHJvb3RAJXMnICUgKHRlc3RyZWNpcGUsIHFlbXUuaXApKQorICAgICAgICAgICAgIyBSdW4gYSB0ZXN0IGNvbW1hbmQgdG8gc2VlIGlmIGl0IHdhcyBpbnN0YWxsZWQgcHJvcGVybHkKKyAgICAgICAgICAgIHNzaGFyZ3MgPSAnLW8gVXNlcktub3duSG9zdHNGaWxlPS9kZXYvbnVsbCAtbyBTdHJpY3RIb3N0S2V5Q2hlY2tpbmc9bm8nCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3NzaCAlcyByb290QCVzICVzJyAlIChzc2hhcmdzLCBxZW11LmlwLCB0ZXN0Y29tbWFuZCkpCisgICAgICAgICAgICAjIENoZWNrIGlmIGl0IGRlcGxveWVkIGFsbCBvZiB0aGUgZmlsZXMgd2l0aCB0aGUgcmlnaHQgb3duZXJzaGlwL3Blcm1zCisgICAgICAgICAgICAjIEZpcnN0IGxvb2sgb24gdGhlIGhvc3QgLSBuZWVkIHRvIGRvIHRoaXMgdW5kZXIgcHNldWRvIHRvIGdldCB0aGUgY29ycmVjdCBvd25lcnNoaXAvcGVybXMKKyAgICAgICAgICAgIGluc3RhbGxkaXIgPSBnZXRfYmJfdmFyKCdEJywgdGVzdHJlY2lwZSkKKyAgICAgICAgICAgIGZha2Vyb290ZW52ID0gZ2V0X2JiX3ZhcignRkFLRVJPT1RFTlYnLCB0ZXN0cmVjaXBlKQorICAgICAgICAgICAgZmFrZXJvb3RjbWQgPSBnZXRfYmJfdmFyKCdGQUtFUk9PVENNRCcsIHRlc3RyZWNpcGUpCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJyVzICVzIGZpbmQgLiAtdHlwZSBmIC1leGVjIGxzIC1sIHt9IFw7JyAlIChmYWtlcm9vdGVudiwgZmFrZXJvb3RjbWQpLCBjd2Q9aW5zdGFsbGRpcikKKyAgICAgICAgICAgIGZpbGVsaXN0MSA9IHNlbGYuX3Byb2Nlc3NfbHNfb3V0cHV0KHJlc3VsdC5vdXRwdXQpCisKKyAgICAgICAgICAgICMgTm93IGxvb2sgb24gdGhlIHRhcmdldAorICAgICAgICAgICAgdGVtcGRpcjIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcjIpCisgICAgICAgICAgICB0bXBmaWxlbGlzdCA9IG9zLnBhdGguam9pbih0ZW1wZGlyMiwgJ2ZpbGVzLnR4dCcpCisgICAgICAgICAgICB3aXRoIG9wZW4odG1wZmlsZWxpc3QsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmaWxlbGlzdDE6CisgICAgICAgICAgICAgICAgICAgIHNwbGl0bGluZSA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHNwbGl0bGluZVstMV0gKyAnXG4nKQorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdjYXQgJXMgfCBzc2ggLXEgJXMgcm9vdEAlcyBcJ3hhcmdzIGxzIC1sXCcnICUgKHRtcGZpbGVsaXN0LCBzc2hhcmdzLCBxZW11LmlwKSkKKyAgICAgICAgICAgIGZpbGVsaXN0MiA9IHNlbGYuX3Byb2Nlc3NfbHNfb3V0cHV0KHJlc3VsdC5vdXRwdXQpCisgICAgICAgICAgICBmaWxlbGlzdDEuc29ydChrZXk9bGFtYmRhIGl0ZW06IGl0ZW0uc3BsaXQoKVstMV0pCisgICAgICAgICAgICBmaWxlbGlzdDIuc29ydChrZXk9bGFtYmRhIGl0ZW06IGl0ZW0uc3BsaXQoKVstMV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVsaXN0MSwgZmlsZWxpc3QyKQorICAgICAgICAgICAgIyBUZXN0IHVuZGVwbG95LXRhcmdldAorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVuZGVwbG95LXRhcmdldCAtYyAlcyByb290QCVzJyAlICh0ZXN0cmVjaXBlLCBxZW11LmlwKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnc3NoICVzIHJvb3RAJXMgJXMnICUgKHNzaGFyZ3MsIHFlbXUuaXAsIHRlc3Rjb21tYW5kKSwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQsIDAsICd1bmRlcGxveS10YXJnZXQgZGlkIG5vdCByZW1vdmUgY29tbWFuZCBhcyBpdCBzaG91bGQgaGF2ZScpCisKKyAgICBkZWYgdGVzdF9kZXZ0b29sX2J1aWxkX2ltYWdlKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGRldnRvb2wgYnVpbGQtaW1hZ2UgcGx1Z2luIiIiCisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICBpbWFnZSA9ICdjb3JlLWltYWdlLW1pbmltYWwnCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuICVzJyAlIGltYWdlKQorICAgICAgICBiaXRiYWtlKCclcyAtYyBjbGVhbicgJSBpbWFnZSkKKyAgICAgICAgIyBBZGQgdGFyZ2V0IGFuZCBuYXRpdmUgcmVjaXBlcyB0byB3b3Jrc3BhY2UKKyAgICAgICAgZm9yIHJlY2lwZSBpbiAoJ21kYWRtJywgJ3BhcnRlZC1uYXRpdmUnKToKKyAgICAgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW4gJXMnICUgcmVjaXBlKQorICAgICAgICAgICAgcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAocmVjaXBlLCB0ZW1wZGlyKSkKKyAgICAgICAgIyBUcnkgdG8gYnVpbGQgaW1hZ2UKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGJ1aWxkLWltYWdlICVzJyAlIGltYWdlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdCwgMCwgJ2RldnRvb2wgYnVpbGQtaW1hZ2UgZmFpbGVkJykKKyAgICAgICAgIyBDaGVjayBpZiBpbWFnZS5iYmFwcGVuZCBoYXMgcmVxdWlyZWQgY29udGVudAorICAgICAgICBiYmFwcGVuZCA9IG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdhcHBlbmRzJywgaW1hZ2UrJy5iYmFwcGVuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShiYmFwcGVuZCksICdiYmFwcGVuZCBub3QgY3JlYXRlZCAlcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICAjIE5PVEU6IG5hdGl2ZSByZWNpcGUgcGFydGVkLW5hdGl2ZSBzaG91bGQgbm90IGJlIGluIElNQUdFX0lOU1RBTExfYXBwZW5kCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnSU1BR0VfSU5TVEFMTF9hcHBlbmQgPSAiIG1kYWRtIlxuJyBpbiBvcGVuKGJiYXBwZW5kKS5yZWFkbGluZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdJTUFHRV9JTlNUQUxMX2FwcGVuZCA9ICIgbWRhZG0iIG5vdCBmb3VuZCBpbiAlcycgJSBiYmFwcGVuZCkKKworICAgIGRlZiB0ZXN0X2RldnRvb2xfdXBncmFkZShzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgICMgQ2hlY2sgcGFyYW1ldGVycworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBncmFkZSAtaCcpCisgICAgICAgIGZvciBwYXJhbSBpbiAncmVjaXBlbmFtZSBzcmN0cmVlIC0tdmVyc2lvbiAtViAtLWJyYW5jaCAtYiAtLWtlZXAtdGVtcCAtLW5vLXBhdGNoJy5zcGxpdCgpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihwYXJhbSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBGb3IgdGhlIG1vbWVudCwgd2UgYXJlIHVzaW5nIGEgcmVhbCByZWNpcGUuCisgICAgICAgIHJlY2lwZT0nZGV2dG9vbC11cGdyYWRlJworICAgICAgICB2ZXJzaW9uPScwLjInCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgIyBDaGVjayB0aGF0IHJlY2lwZSBpcyBub3QgYWxyZWFkeSB1bmRlciBkZXZ0b29sIGNvbnRyb2wKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIHVwZ3JhZGUuIENvZGUgZG9lcyBub3QgY2hlY2sgaWYgbmV3IFBWIGlzIG9sZGVyIG9yIG5ld2VyIHRoYXQgY3VycmVudCBQViwgc28sIGl0IG1heSBiZSB0aGF0CisgICAgICAgICMgd2UgYXJlIGRvd25ncmFkaW5nIGluc3RlYWQgb2YgdXBncmFkaW5nLgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBncmFkZSAlcyAlcyAtViAlcycgJSAocmVjaXBlLCB0ZW1wZGlyLCB2ZXJzaW9uKSkKKyAgICAgICAgIyBDaGVjayBpZiBzcmN0cmVlIGF0IGxlYXN0IGlzIHBvcHVsYXRlZAorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKG9zLmxpc3RkaXIodGVtcGRpcikpID4gMCwgJ3NjcnRyZWUgKCVzKSBzaG91bGQgYmUgcG9wdWxhdGVkIHdpdGggbmV3ICglcykgc291cmNlIGNvZGUnICUgKHRlbXBkaXIsIHZlcnNpb24pKQorICAgICAgICAjIENoZWNrIG5ldyByZWNpcGUgZm9sZGVyIGlzIHByZXNlbnQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsJ3JlY2lwZXMnLHJlY2lwZSkpLCAnUmVjaXBlIGZvbGRlciBzaG91bGQgZXhpc3QnKQorICAgICAgICAjIENoZWNrIG5ldyByZWNpcGUgZmlsZSBpcyBwcmVzZW50CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCdyZWNpcGVzJyxyZWNpcGUsIiVzXyVzLmJiIiAlIChyZWNpcGUsdmVyc2lvbikpKSwgJ1JlY2lwZSBmb2xkZXIgc2hvdWxkIGV4aXN0JykKKyAgICAgICAgIyBDaGVjayBkZXZ0b29sIHN0YXR1cyBhbmQgbWFrZSBzdXJlIHJlY2lwZSBpcyBwcmVzZW50CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZW1wZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIGRldnRvb2wgcmVzZXQgcmVjaXBlCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZXNldCAlcyAtbicgJSByZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9pbWFnZWZlYXR1cmVzLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2ltYWdlZmVhdHVyZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNmZmM0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9pbWFnZWZlYXR1cmVzLnB5CkBAIC0wLDAgKzEsMTY4IEBACitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIHJ1bnFlbXUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorZnJvbSBvZXFhLnV0aWxzLnNzaGNvbnRyb2wgaW1wb3J0IFNTSENvbnRyb2wKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IGxvZ2dpbmcKKworY2xhc3MgSW1hZ2VGZWF0dXJlcyhvZVNlbGZUZXN0KToKKworICAgIHRlc3RfdXNlciA9ICd0ZXN0ZXInCisgICAgcm9vdF91c2VyID0gJ3Jvb3QnCisKKyAgICBAdGVzdGNhc2UoMTEwNykKKyAgICBkZWYgdGVzdF9ub25fcm9vdF91c2VyX2Nhbl9jb25uZWN0X3ZpYV9zc2hfd2l0aG91dF9wYXNzd29yZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6IENoZWNrIGlmIG5vbiByb290IHVzZXIgY2FuIGNvbm5lY3QgdmlhIHNzaCB3aXRob3V0IHBhc3N3b3JkCisgICAgICAgIEV4cGVjdGVkOiAxLiBDb25uZWN0aW9uIHRvIHRoZSBpbWFnZSB2aWEgc3NoIHVzaW5nIHJvb3QgdXNlciB3aXRob3V0IHByb3ZpZGluZyBhIHBhc3N3b3JkIHNob3VsZCBiZSBhbGxvd2VkLgorICAgICAgICAgICAgICAgICAgMi4gQ29ubmVjdGlvbiB0byB0aGUgaW1hZ2UgdmlhIHNzaCB1c2luZyB0ZXN0ZXIgdXNlciB3aXRob3V0IHByb3ZpZGluZyBhIHBhc3N3b3JkIHNob3VsZCBiZSBhbGxvd2VkLgorICAgICAgICBQcm9kdWN0OiBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogSW9udXQgQ2hpc2Fub3ZpY2kgPGlvbnV0eC5jaGlzYW5vdmljaUBpbnRlbC5jb20+CisgICAgICAgIEF1dG9tYXRlZEJ5OiBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+CisgICAgICAgICIiIgorCisgICAgICAgIGZlYXR1cmVzID0gJ0VYVFJBX0lNQUdFX0ZFQVRVUkVTID0gInNzaC1zZXJ2ZXItb3BlbnNzaCBlbXB0eS1yb290LXBhc3N3b3JkIGFsbG93LWVtcHR5LXBhc3N3b3JkIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnSU5IRVJJVCArPSAiZXh0cmF1c2VycyJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ0VYVFJBX1VTRVJTX1BBUkFNUyA9ICJ1c2VyYWRkIC1wIFwnXCcge307IHVzZXJtb2QgLXMgL2Jpbi9zaCB7fTsiJy5mb3JtYXQoc2VsZi50ZXN0X3VzZXIsIHNlbGYudGVzdF91c2VyKQorCisgICAgICAgICMgQXBwZW5kICdmZWF0dXJlcycgdG8gbG9jYWwuY29uZgorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoZmVhdHVyZXMpCisKKyAgICAgICAgIyBCdWlsZCBhIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwnKQorCisgICAgICAgIHdpdGggcnVucWVtdSgiY29yZS1pbWFnZS1taW5pbWFsIiwgc2VsZikgYXMgcWVtdToKKyAgICAgICAgICAgICMgQXR0ZW1wdCB0byBzc2ggd2l0aCBlYWNoIHVzZXIgaW50byBxZW11IHdpdGggZW1wdHkgcGFzc3dvcmQKKyAgICAgICAgICAgIGZvciB1c2VyIGluIFtzZWxmLnJvb3RfdXNlciwgc2VsZi50ZXN0X3VzZXJdOgorICAgICAgICAgICAgICAgIHNzaCA9IFNTSENvbnRyb2woaXA9cWVtdS5pcCwgbG9nZmlsZT1xZW11LnNzaGxvZywgdXNlcj11c2VyKQorICAgICAgICAgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gc3NoLnJ1bigidHJ1ZSIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsICdzc2ggdG8gdXNlciAlcyBmYWlsZWQgd2l0aCAlcycgJSAodXNlciwgb3V0cHV0KSkKKworICAgIEB0ZXN0Y2FzZSgxMTE1KQorICAgIGRlZiB0ZXN0X2FsbF91c2Vyc19jYW5fY29ubmVjdF92aWFfc3NoX3dpdGhvdXRfcGFzc3dvcmQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgQ2hlY2sgaWYgYWxsIHVzZXJzIGNhbiBjb25uZWN0IHZpYSBzc2ggd2l0aG91dCBwYXNzd29yZAorICAgICAgICBFeHBlY3RlZDogMS4gQ29ubmVjdGlvbiB0byB0aGUgaW1hZ2UgdmlhIHNzaCB1c2luZyByb290IHVzZXIgd2l0aG91dCBwcm92aWRpbmcgYSBwYXNzd29yZCBzaG91bGQgTk9UIGJlIGFsbG93ZWQuCisgICAgICAgICAgICAgICAgICAyLiBDb25uZWN0aW9uIHRvIHRoZSBpbWFnZSB2aWEgc3NoIHVzaW5nIHRlc3RlciB1c2VyIHdpdGhvdXQgcHJvdmlkaW5nIGEgcGFzc3dvcmQgc2hvdWxkIGJlIGFsbG93ZWQuCisgICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogICAgICBJb251dCBDaGlzYW5vdmljaSA8aW9udXR4LmNoaXNhbm92aWNpQGludGVsLmNvbT4KKyAgICAgICAgQXV0b21hdGVkQnk6IERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZmVhdHVyZXMgPSAnRVhUUkFfSU1BR0VfRkVBVFVSRVMgPSAic3NoLXNlcnZlci1vcGVuc3NoIGFsbG93LWVtcHR5LXBhc3N3b3JkIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnSU5IRVJJVCArPSAiZXh0cmF1c2VycyJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ0VYVFJBX1VTRVJTX1BBUkFNUyA9ICJ1c2VyYWRkIC1wIFwnXCcge307IHVzZXJtb2QgLXMgL2Jpbi9zaCB7fTsiJy5mb3JtYXQoc2VsZi50ZXN0X3VzZXIsIHNlbGYudGVzdF91c2VyKQorCisgICAgICAgICMgQXBwZW5kICdmZWF0dXJlcycgdG8gbG9jYWwuY29uZgorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoZmVhdHVyZXMpCisKKyAgICAgICAgIyBCdWlsZCBhIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwnKQorCisgICAgICAgIHdpdGggcnVucWVtdSgiY29yZS1pbWFnZS1taW5pbWFsIiwgc2VsZikgYXMgcWVtdToKKyAgICAgICAgICAgICMgQXR0ZW1wdCB0byBzc2ggd2l0aCBlYWNoIHVzZXIgaW50byBxZW11IHdpdGggZW1wdHkgcGFzc3dvcmQKKyAgICAgICAgICAgIGZvciB1c2VyIGluIFtzZWxmLnJvb3RfdXNlciwgc2VsZi50ZXN0X3VzZXJdOgorICAgICAgICAgICAgICAgIHNzaCA9IFNTSENvbnRyb2woaXA9cWVtdS5pcCwgbG9nZmlsZT1xZW11LnNzaGxvZywgdXNlcj11c2VyKQorICAgICAgICAgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gc3NoLnJ1bigidHJ1ZSIpCisgICAgICAgICAgICAgICAgaWYgdXNlciA9PSAncm9vdCc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc3RhdHVzLCAwLCAnc3NoIHRvIHVzZXIgcm9vdCB3YXMgYWxsb3dlZCB3aGVuIGl0IHNob3VsZCBub3QgaGF2ZSBiZWVuJykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgJ3NzaCB0byB1c2VyIHRlc3RlciBmYWlsZWQgd2l0aCAlcycgJSBvdXRwdXQpCisKKworICAgIEB0ZXN0Y2FzZSgxMTE0KQorICAgIGRlZiB0ZXN0X3JwbV92ZXJzaW9uXzRfc3VwcG9ydF9vbl9pbWFnZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6ICAgICBDaGVjayBycG0gdmVyc2lvbiA0IHN1cHBvcnQgb24gaW1hZ2UKKyAgICAgICAgRXhwZWN0ZWQ6ICAgIFJwbSB2ZXJzaW9uIG11c3QgYmUgNC54CisgICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogICAgICBJb251dCBDaGlzYW5vdmljaSA8aW9udXR4LmNoaXNhbm92aWNpQGludGVsLmNvbT4KKyAgICAgICAgQXV0b21hdGVkQnk6IERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZmVhdHVyZXMgPSAnUFJFRkVSUkVEX1ZFUlNJT05fcnBtID0gIjQuJSJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ1BSRUZFUlJFRF9WRVJTSU9OX3JwbS1uYXRpdmUgPSAiNC4lIlxuJworICAgICAgICAjIFVzZSBvcGVuc3NoIGluIElNQUdFX0lOU1RBTEwgaW5zdGVhZCBvZiBzc2gtc2VydmVyLW9wZW5zc2ggaW4gRVhUUkFfSU1BR0VfRkVBVFVSRVMgYXMgYSB3b3JrYXJvdW5kIGZvciBidWcgODA0NworICAgICAgICBmZWF0dXJlcyArPSAnSU1BR0VfSU5TVEFMTF9hcHBlbmQgPSAiIG9wZW5zc2giXG4nCisgICAgICAgIGZlYXR1cmVzICs9ICdFWFRSQV9JTUFHRV9GRUFUVVJFUyA9ICJlbXB0eS1yb290LXBhc3N3b3JkIGFsbG93LWVtcHR5LXBhc3N3b3JkIHBhY2thZ2UtbWFuYWdlbWVudCJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ1JQTVJPT1RGU0RFUEVORFNfcmVtb3ZlID0gInJwbXJlc29sdmUtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiJworCisgICAgICAgICMgQXBwZW5kICdmZWF0dXJlcycgdG8gbG9jYWwuY29uZgorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoZmVhdHVyZXMpCisKKyAgICAgICAgIyBCdWlsZCBhIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwnKQorCisgICAgICAgICMgQ2hlY2sgdGhlIG5hdGl2ZSB2ZXJzaW9uIG9mIHJwbSBpcyBjb3JyZWN0CisgICAgICAgIG5hdGl2ZV9iaW5kaXIgPSBnZXRfYmJfdmFyKCdTVEFHSU5HX0JJTkRJUl9OQVRJVkUnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQob3MucGF0aC5qb2luKG5hdGl2ZV9iaW5kaXIsICdycG0nKSArICcgLS12ZXJzaW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigndmVyc2lvbiA0LicsIHJlc3VsdC5vdXRwdXQpCisKKyAgICAgICAgIyBDaGVjayBtYW5pZmVzdCBmb3IgdGhlIHJwbSBwYWNrYWdlCisgICAgICAgIGRlcGxveWRpciA9IGdldF9iYl92YXIoJ0RFUExPWV9ESVJfSU1BR0UnKQorICAgICAgICBpbWduYW1lID0gZ2V0X2JiX3ZhcignSU1BR0VfTElOS19OQU1FJywgJ2NvcmUtaW1hZ2UtbWluaW1hbCcpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZGVwbG95ZGlyLCBpbWduYW1lKSArICcubWFuaWZlc3QnLCAncicpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIHNwbGl0bGluZSA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgICAgIGlmIGxlbihzcGxpdGxpbmUpID4gMjoKKyAgICAgICAgICAgICAgICAgICAgcnBtX3ZlcnNpb24gPSBzcGxpdGxpbmVbMl0KKyAgICAgICAgICAgICAgICAgICAgaWYgc3BsaXRsaW5lWzBdID09ICdycG0nOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJwbV92ZXJzaW9uLnN0YXJ0c3dpdGgoJzQuJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdycG0gdmVyc2lvbiAlcyBmb3VuZCBpbiBpbWFnZSwgZXhwZWN0ZWQgNC54JyAlIHJwbV92ZXJzaW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdObyBycG0gcGFja2FnZSBmb3VuZCBpbiBpbWFnZScpCisKKyAgICAgICAgIyBOb3cgZG8gYSBjb3VwbGUgb2YgcnVudGltZSB0ZXN0cworICAgICAgICB3aXRoIHJ1bnFlbXUoImNvcmUtaW1hZ2UtbWluaW1hbCIsIHNlbGYpIGFzIHFlbXU6CisgICAgICAgICAgICBjb21tYW5kID0gInJwbSAtLXZlcnNpb24iCisgICAgICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHFlbXUucnVuKGNvbW1hbmQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0YXR1cywgJ0ZhaWxlZCB0byBydW4gY29tbWFuZCAiJXMiOiAlcycgJSAoY29tbWFuZCwgb3V0cHV0KSkKKyAgICAgICAgICAgIGZvdW5kX3JwbV92ZXJzaW9uID0gb3V0cHV0LnN0cmlwKCkKKworICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIHJldHJpZXZlZCBycG0gdmVyc2lvbiBpcyB0aGUgZXhwZWN0ZWQgb25lCisgICAgICAgICAgICBpZiBycG1fdmVyc2lvbiBub3QgaW4gZm91bmRfcnBtX3ZlcnNpb246CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdSUE0gdmVyc2lvbiBpcyBub3Qge30sIGZvdW5kIGluc3RlYWQge30uJy5mb3JtYXQocnBtX3ZlcnNpb24sIGZvdW5kX3JwbV92ZXJzaW9uKSkKKworICAgICAgICAgICAgIyBUZXN0IHRoYXQgdGhlIHJwbSBkYXRhYmFzZSBpcyB0aGVyZSBhbmQgd29ya2luZworICAgICAgICAgICAgY29tbWFuZCA9ICJycG0gLXFhIgorICAgICAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBxZW11LnJ1bihjb21tYW5kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMsICdGYWlsZWQgdG8gcnVuIGNvbW1hbmQgIiVzIjogJXMnICUgKGNvbW1hbmQsIG91dHB1dCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdwYWNrYWdlZ3JvdXAtY29yZS1ib290Jywgb3V0cHV0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignYnVzeWJveCcsIG91dHB1dCkKKworCisgICAgQHRlc3RjYXNlKDExMTYpCisgICAgZGVmIHRlc3RfY2x1dHRlcl9pbWFnZV9jYW5fYmVfYnVpbHQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgQ2hlY2sgaWYgY2x1dHRlciBpbWFnZSBjYW4gYmUgYnVpbHQKKyAgICAgICAgRXhwZWN0ZWQ6ICAgIDEuIGNvcmUtaW1hZ2UtY2x1dHRlciBjYW4gYmUgYnVpbHQKKyAgICAgICAgUHJvZHVjdDogICAgIG9lLWNvcmUKKyAgICAgICAgQXV0aG9yOiAgICAgIElvbnV0IENoaXNhbm92aWNpIDxpb251dHguY2hpc2Fub3ZpY2lAaW50ZWwuY29tPgorICAgICAgICBBdXRvbWF0ZWRCeTogRGFuaWVsIElzdHJhdGUgPGRhbmllbC5hbGV4YW5kcnV4LmlzdHJhdGVAaW50ZWwuY29tPgorICAgICAgICAiIiIKKworICAgICAgICAjIEJ1aWxkIGEgY29yZS1pbWFnZS1jbHV0dGVyCisgICAgICAgIGJpdGJha2UoJ2NvcmUtaW1hZ2UtY2x1dHRlcicpCisKKyAgICBAdGVzdGNhc2UoMTExNykKKyAgICBkZWYgdGVzdF93YXlsYW5kX3N1cHBvcnRfaW5faW1hZ2Uoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgQ2hlY2sgV2F5bGFuZCBzdXBwb3J0IGluIGltYWdlCisgICAgICAgIEV4cGVjdGVkOiAgICAxLiBXYXlsYW5kIGltYWdlIGNhbiBiZSBidWlsZAorICAgICAgICAgICAgICAgICAgICAgMi4gV2F5bGFuZCBmZWF0dXJlIGNhbiBiZSBpbnN0YWxsZWQKKyAgICAgICAgUHJvZHVjdDogICAgIG9lLWNvcmUKKyAgICAgICAgQXV0aG9yOiAgICAgIElvbnV0IENoaXNhbm92aWNpIDxpb251dHguY2hpc2Fub3ZpY2lAaW50ZWwuY29tPgorICAgICAgICBBdXRvbWF0ZWRCeTogRGFuaWVsIElzdHJhdGUgPGRhbmllbC5hbGV4YW5kcnV4LmlzdHJhdGVAaW50ZWwuY29tPgorICAgICAgICAiIiIKKworICAgICAgICBmZWF0dXJlcyA9ICdESVNUUk9fRkVBVFVSRVNfYXBwZW5kID0gIiB3YXlsYW5kIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnQ09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMICs9ICJ3YXlsYW5kIHdlc3RvbiInCisKKyAgICAgICAgIyBBcHBlbmQgJ2ZlYXR1cmVzJyB0byBsb2NhbC5jb25mCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhmZWF0dXJlcykKKworICAgICAgICAjIEJ1aWxkIGEgY29yZS1pbWFnZS13ZXN0b24KKyAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS13ZXN0b24nKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvbGF5ZXJhcHBlbmQucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvbGF5ZXJhcHBlbmQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgyYTZjOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9sYXllcmFwcGVuZC5weQpAQCAtMCwwICsxLDk2IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQorCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnNlbGZ0ZXN0LmJ1aWxkaGlzdG9yeSBpbXBvcnQgQnVpbGRoaXN0b3J5QmFzZQorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBMYXllckFwcGVuZFRlc3RzKG9lU2VsZlRlc3QpOgorICAgIGxheWVyY29uZiA9ICIiIgorIyBXZSBoYXZlIGEgY29uZiBhbmQgY2xhc3NlcyBkaXJlY3RvcnksIGFwcGVuZCB0byBCQlBBVEgKK0JCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IgorCisjIFdlIGhhdmUgYSByZWNpcGVzIGRpcmVjdG9yeSwgYWRkIHRvIEJCRklMRVMKK0JCRklMRVMgKz0gIiR7TEFZRVJESVJ9L3JlY2lwZXMqLyouYmIgJHtMQVlFUkRJUn0vcmVjaXBlcyovKi5iYmFwcGVuZCIKKworQkJGSUxFX0NPTExFQ1RJT05TICs9ICJtZXRhLWxheWVySU5UIgorQkJGSUxFX1BBVFRFUk5fbWV0YS1sYXllcklOVCA6PSAiXiR7TEFZRVJESVJ9LyIKK0JCRklMRV9QUklPUklUWV9tZXRhLWxheWVySU5UID0gIjYiCisiIiIKKyAgICByZWNpcGUgPSAiIiIKK0xJQ0VOU0U9IkNMT1NFRCIKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK3B5dGhvbiBkb19idWlsZCgpIHsKKyAgICBiYi5wbGFpbignQnVpbGRpbmcgLi4uJykKK30KK2FkZHRhc2sgYnVpbGQKKyIiIgorICAgIGFwcGVuZCA9ICIiIgorRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IgorCitTUkNfVVJJX2FwcGVuZCA9ICIgZmlsZTovL2FwcGVuZHRlc3QudHh0IgorCitzeXNyb290X3N0YWdlX2FsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS9hcHBlbmR0ZXN0LnR4dCAke1NZU1JPT1RfREVTVERJUn0vCit9CisKKyIiIgorCisgICAgYXBwZW5kMiA9ICIiIgorRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IgorCitTUkNfVVJJX2FwcGVuZCArPSAiZmlsZTovL2FwcGVuZHRlc3QudHh0IgorIiIiCisgICAgbGF5ZXJhcHBlbmQgPSAiQkJMQVlFUlMgKz0gXCJDT1JFQkFTRS9tZXRhLWxheWVydGVzdDAgQ09SRUJBU0UvbWV0YS1sYXllcnRlc3QxIENPUkVCQVNFL21ldGEtbGF5ZXJ0ZXN0MlwiIgorCisgICAgZGVmIHRlYXJEb3duTG9jYWwoc2VsZik6CisgICAgICAgIGZ0b29scy5yZW1vdmVfZnJvbV9maWxlKHNlbGYuYnVpbGRkaXIgKyAiL2NvbmYvYmJsYXllcnMuY29uZiIsIHNlbGYubGF5ZXJhcHBlbmQucmVwbGFjZSgiQ09SRUJBU0UiLCBzZWxmLmJ1aWxkZGlyICsgIi8uLiIpKQorCisgICAgQHRlc3RjYXNlKDExOTYpCisgICAgZGVmIHRlc3RfbGF5ZXJfYXBwZW5kcyhzZWxmKToKKyAgICAgICAgY29yZWJhc2UgPSBnZXRfYmJfdmFyKCJDT1JFQkFTRSIpCisgICAgICAgIHN0YWdpbmdkaXIgPSBnZXRfYmJfdmFyKCJTVEFHSU5HX0RJUl9UQVJHRVQiKQorICAgICAgICBmb3IgbCBpbiBbIjAiLCAiMSIsICIyIl06CisgICAgICAgICAgICBsYXllciA9IG9zLnBhdGguam9pbihjb3JlYmFzZSwgIm1ldGEtbGF5ZXJ0ZXN0IiArIGwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGxheWVyKSkKKyAgICAgICAgICAgIG9zLm1rZGlyKGxheWVyKQorICAgICAgICAgICAgb3MubWtkaXIobGF5ZXIgKyAiL2NvbmYiKQorICAgICAgICAgICAgd2l0aCBvcGVuKGxheWVyICsgIi9jb25mL2xheWVyLmNvbmYiLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShzZWxmLmxheWVyY29uZi5yZXBsYWNlKCJJTlQiLCBsKSkKKyAgICAgICAgICAgIG9zLm1rZGlyKGxheWVyICsgIi9yZWNpcGVzLXRlc3QiKQorICAgICAgICAgICAgaWYgbCA9PSAiMCI6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGxheWVyICsgIi9yZWNpcGVzLXRlc3QvbGF5ZXJhcHBlbmR0ZXN0LmJiIiwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHNlbGYucmVjaXBlKQorICAgICAgICAgICAgZWxpZiBsID09ICIxIjoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4obGF5ZXIgKyAiL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QuYmJhcHBlbmQiLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5hcHBlbmQpCisgICAgICAgICAgICAgICAgb3MubWtkaXIobGF5ZXIgKyAiL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QiKQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihsYXllciArICIvcmVjaXBlcy10ZXN0L2xheWVyYXBwZW5kdGVzdC9hcHBlbmR0ZXN0LnR4dCIsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiTGF5ZXIgMSB0ZXN0IikKKyAgICAgICAgICAgIGVsaWYgbCA9PSAiMiI6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGxheWVyICsgIi9yZWNpcGVzLXRlc3QvbGF5ZXJhcHBlbmR0ZXN0LmJiYXBwZW5kIiwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHNlbGYuYXBwZW5kMikKKyAgICAgICAgICAgICAgICBvcy5ta2RpcihsYXllciArICIvcmVjaXBlcy10ZXN0L2xheWVyYXBwZW5kdGVzdCIpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGxheWVyICsgIi9yZWNpcGVzLXRlc3QvbGF5ZXJhcHBlbmR0ZXN0L2FwcGVuZHRlc3QudHh0IiwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCJMYXllciAyIHRlc3QiKQorICAgICAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChsYXllcikKKyAgICAgICAgZnRvb2xzLmFwcGVuZF9maWxlKHNlbGYuYnVpbGRkaXIgKyAiL2NvbmYvYmJsYXllcnMuY29uZiIsIHNlbGYubGF5ZXJhcHBlbmQucmVwbGFjZSgiQ09SRUJBU0UiLCBzZWxmLmJ1aWxkZGlyICsgIi8uLiIpKQorICAgICAgICBiaXRiYWtlKCJsYXllcmFwcGVuZHRlc3QiKQorICAgICAgICBkYXRhID0gZnRvb2xzLnJlYWRfZmlsZShzdGFnaW5nZGlyICsgIi9hcHBlbmR0ZXN0LnR4dCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgIkxheWVyIDIgdGVzdCIpCisgICAgICAgIG9zLnJlbW92ZShjb3JlYmFzZSArICIvbWV0YS1sYXllcnRlc3QyL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QvYXBwZW5kdGVzdC50eHQiKQorICAgICAgICBiaXRiYWtlKCJsYXllcmFwcGVuZHRlc3QiKQorICAgICAgICBkYXRhID0gZnRvb2xzLnJlYWRfZmlsZShzdGFnaW5nZGlyICsgIi9hcHBlbmR0ZXN0LnR4dCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgIkxheWVyIDEgdGVzdCIpCisgICAgICAgIHdpdGggb3Blbihjb3JlYmFzZSArICIvbWV0YS1sYXllcnRlc3QyL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QvYXBwZW5kdGVzdC50eHQiLCAidyIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCJMYXllciAyIHRlc3QiKQorICAgICAgICBiaXRiYWtlKCJsYXllcmFwcGVuZHRlc3QiKQorICAgICAgICBkYXRhID0gZnRvb2xzLnJlYWRfZmlsZShzdGFnaW5nZGlyICsgIi9hcHBlbmR0ZXN0LnR4dCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgIkxheWVyIDIgdGVzdCIpCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2xpYy1jaGVja3N1bS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9saWMtY2hlY2tzdW0ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQzYjlhMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9saWMtY2hlY2tzdW0ucHkKQEAgLTAsMCArMSwzMSBAQAoraW1wb3J0IG9zCitpbXBvcnQgdGVtcGZpbGUKKworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgYml0YmFrZQorZnJvbSBvZXFhLnV0aWxzIGltcG9ydCBDb21tYW5kRXJyb3IKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBMaWNlbnNlVGVzdHMob2VTZWxmVGVzdCk6CisKKyAgICAjIFZlcmlmeSB0aGF0IGNoYW5naW5nIGEgbGljZW5zZSBmaWxlIHRoYXQgaGFzIGFuIGFic29sdXRlIHBhdGggY2F1c2VzCisgICAgIyB0aGUgbGljZW5zZSBxYSB0byBmYWlsIGR1ZSB0byBhIG1pc21hdGNoZWQgbWQ1c3VtLgorICAgIEB0ZXN0Y2FzZSgxMTk3KQorICAgIGRlZiB0ZXN0X25vbm1hdGNoaW5nX2NoZWNrc3VtKHNlbGYpOgorICAgICAgICBiaXRiYWtlX2NtZCA9ICctYyBjb25maWd1cmUgZW1wdHl0ZXN0JworICAgICAgICBlcnJvcl9tc2cgPSAnRVJST1I6IGVtcHR5dGVzdDogVGhlIG5ldyBtZDUgY2hlY2tzdW0gaXMgOGQ3NzdmMzg1ZDNkZmVjODgxNWQyMGY3NDk2MDI2ZGMnCisKKyAgICAgICAgbGljX2ZpbGUsIGxpY19wYXRoID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIG9zLmNsb3NlKGxpY19maWxlKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKGxpY19wYXRoKQorCisgICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKCdlbXB0eXRlc3QnLCAnSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSInKQorICAgICAgICBzZWxmLmFwcGVuZF9yZWNpcGVpbmMoJ2VtcHR5dGVzdCcsICdMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8lczttZDU9ZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UiJyAlIGxpY19wYXRoKQorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKGJpdGJha2VfY21kKQorCisgICAgICAgIHdpdGggb3BlbihsaWNfcGF0aCwgInciKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgiZGF0YSIpCisKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZShiaXRiYWtlX2NtZCwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBpZiBlcnJvcl9tc2cgbm90IGluIHJlc3VsdC5vdXRwdXQ6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcihyZXN1bHQub3V0cHV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L29lc2NyaXB0cy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9vZXNjcmlwdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFjZDUwOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9vZXNjcmlwdHMucHkKQEAgLTAsMCArMSw1NCBAQAoraW1wb3J0IGRhdGV0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCisKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEuc2VsZnRlc3QuYnVpbGRoaXN0b3J5IGltcG9ydCBCdWlsZGhpc3RvcnlCYXNlCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IENvbW1hbmQsIHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgZ2V0X3Rlc3RfbGF5ZXIKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBUZXN0U2NyaXB0cyhvZVNlbGZUZXN0KToKKworICAgIEB0ZXN0Y2FzZSgzMDApCisgICAgZGVmIHRlc3RfY2xlYW51cF93b3JrZGlyKHNlbGYpOgorICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKGdldF9iYl92YXIoJ1dPUktESVInLCAnZ3ppcCcpKQorICAgICAgICBvbGRfdmVyc2lvbl9yZWNpcGUgPSBvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcignQ09SRUJBU0UnKSwgJ21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXBfMS4zLjEyLmJiJykKKyAgICAgICAgb2xkX3ZlcnNpb24gPSAnMS4zLjEyJworICAgICAgICBiaXRiYWtlKCItY2NsZWFuc3N0YXRlIGd6aXAiKQorICAgICAgICBiaXRiYWtlKCItY2NsZWFuc3N0YXRlIC1iICVzIiAlIG9sZF92ZXJzaW9uX3JlY2lwZSkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZ2V0X2JiX3ZhcignV09SS0RJUicsICItYiAlcyIgJSBvbGRfdmVyc2lvbl9yZWNpcGUpKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZ2V0X2JiX3ZhcignV09SS0RJUicsICItYiAlcyIgJSBvbGRfdmVyc2lvbl9yZWNpcGUpKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhnZXRfYmJfdmFyKCdXT1JLRElSJywgJ2d6aXAnKSk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKGdldF9iYl92YXIoJ1dPUktESVInLCAnZ3ppcCcpKQorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICAgICAgaW5pdGlhbF9jb250ZW50cyA9IG9zLmxpc3RkaXIocGF0aCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGluaXRpYWxfY29udGVudHMgPSBbXQorCisgICAgICAgIGJpdGJha2UoJ2d6aXAnKQorICAgICAgICBpbnRlcm1lZGlhcnlfY29udGVudHMgPSBvcy5saXN0ZGlyKHBhdGgpCisgICAgICAgIGJpdGJha2UoIi1iICVzIiAlIG9sZF92ZXJzaW9uX3JlY2lwZSkKKyAgICAgICAgcnVuQ21kKCdjbGVhbnVwLXdvcmtkaXInKQorICAgICAgICByZW1haW5pbmdfY29udGVudHMgPSBvcy5saXN0ZGlyKHBhdGgpCisKKyAgICAgICAgZXhwZWN0ZWRfY29udGVudHMgPSBbeCBmb3IgeCBpbiBpbnRlcm1lZGlhcnlfY29udGVudHMgaWYgeCBub3QgaW4gaW5pdGlhbF9jb250ZW50c10KKyAgICAgICAgcmVtYWluaW5nX25vdF9leHBlY3RlZCA9IFt4IGZvciB4IGluIHJlbWFpbmluZ19jb250ZW50cyBpZiB4IG5vdCBpbiBleHBlY3RlZF9jb250ZW50c10KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZW1haW5pbmdfbm90X2V4cGVjdGVkLCBtc2c9Ik5vdCBhbGwgbmVjZXNzYXJ5IGNvbnRlbnQgaGFzIGJlZW4gZGVsZXRlZCBmcm9tICVzOiAlcyIgJSAocGF0aCwgJywgJy5qb2luKG1hcChzdHIsIHJlbWFpbmluZ19ub3RfZXhwZWN0ZWQpKSkpCisgICAgICAgIGV4cGVjdGVkX25vdF9yZW1haW5pbmcgPSBbeCBmb3IgeCBpbiBleHBlY3RlZF9jb250ZW50cyBpZiB4IG5vdCBpbiByZW1haW5pbmdfY29udGVudHNdCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXhwZWN0ZWRfbm90X3JlbWFpbmluZywgbXNnPSJUaGUgc2NyaXB0IHJlbW92ZWQgZXh0cmEgY29udGVudHMgZnJvbSAlczogJXMiICUgKHBhdGgsICcsICcuam9pbihtYXAoc3RyLCBleHBlY3RlZF9ub3RfcmVtYWluaW5nKSkpKQorCitjbGFzcyBCdWlsZGhpc3RvcnlEaWZmVGVzdHMoQnVpbGRoaXN0b3J5QmFzZSk6CisKKyAgICBAdGVzdGNhc2UoMjk1KQorICAgIGRlZiB0ZXN0X2J1aWxkaGlzdG9yeV9kaWZmKHNlbGYpOgorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjbGVhbnVwLXdvcmtkaXInKQorICAgICAgICB0YXJnZXQgPSAneGN1cnNvci10cmFuc3BhcmVudC10aGVtZScKKyAgICAgICAgc2VsZi5ydW5fYnVpbGRoaXN0b3J5X29wZXJhdGlvbih0YXJnZXQsIHRhcmdldF9jb25maWc9IlBSID0gXCJyMVwiIiwgY2hhbmdlX2JoX2xvY2F0aW9uPVRydWUpCisgICAgICAgIHNlbGYucnVuX2J1aWxkaGlzdG9yeV9vcGVyYXRpb24odGFyZ2V0LCB0YXJnZXRfY29uZmlnPSJQUiA9IFwicjBcIiIsIGNoYW5nZV9iaF9sb2NhdGlvbj1GYWxzZSwgZXhwZWN0X2Vycm9yPVRydWUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgiYnVpbGRoaXN0b3J5LWRpZmYgLXAgJXMiICUgZ2V0X2JiX3ZhcignQlVJTERISVNUT1JZX0RJUicpKQorICAgICAgICBleHBlY3RlZF9vdXRwdXQgPSAnUFIgY2hhbmdlZCBmcm9tICJyMSIgdG8gInIwIicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkX291dHB1dCBpbiByZXN1bHQub3V0cHV0LCBtc2c9IkRpZCBub3QgZmluZCBleHBlY3RlZCBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvcGtnZGF0YS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9wa2dkYXRhLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzOGIwM2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvcGtnZGF0YS5weQpAQCAtMCwwICsxLDIyNiBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBmbm1hdGNoCisKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhcgorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCisKK2NsYXNzIE9lUGtnZGF0YVV0aWxUZXN0cyhvZVNlbGZUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICMgRW5zdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IGRhdGEgaW4gcGtnZGF0YQorICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigic2VsZnRlc3QiKQorICAgICAgICBsb2dnZXIuaW5mbygnUnVubmluZyBiaXRiYWtlIHRvIGdlbmVyYXRlIHBrZ2RhdGEnKQorICAgICAgICBiaXRiYWtlKCdnbGliYyBidXN5Ym94IHpsaWIgYmFzaCcpCisKKyAgICBAdGVzdGNhc2UoMTIwMykKKyAgICBkZWYgdGVzdF9sb29rdXBfcGtnKHNlbGYpOgorICAgICAgICAjIEZvcndhcmQgdGVzdHMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbG9va3VwLXBrZyAiZ2xpYmMgYnVzeWJveCInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdsaWJjNlxuYnVzeWJveCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1wa2cgemxpYi1kZXYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdsaWJ6LWRldicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1wa2cgbm9uZXhpc3RlbnRwa2cnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMSwgIlN0YXR1cyBkaWZmZXJlbnQgdGhhbiAxLiBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ0VSUk9SOiBUaGUgZm9sbG93aW5nIHBhY2thZ2VzIGNvdWxkIG5vdCBiZSBmb3VuZDogbm9uZXhpc3RlbnRwa2cnKQorICAgICAgICAjIFJldmVyc2UgdGVzdHMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbG9va3VwLXBrZyAtciAibGliYzYgYnVzeWJveCInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdnbGliY1xuYnVzeWJveCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1wa2cgLXIgbGliei1kZXYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICd6bGliLWRldicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1wa2cgLXIgbm9uZXhpc3RlbnRwa2cnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMSwgIlN0YXR1cyBkaWZmZXJlbnQgdGhhbiAxLiBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ0VSUk9SOiBUaGUgZm9sbG93aW5nIHBhY2thZ2VzIGNvdWxkIG5vdCBiZSBmb3VuZDogbm9uZXhpc3RlbnRwa2cnKQorCisgICAgQHRlc3RjYXNlKDEyMDUpCisgICAgZGVmIHRlc3RfcmVhZF92YWx1ZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgcmVhZC12YWx1ZSBQTiBsaWJ6MScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ3psaWInKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCByZWFkLXZhbHVlIFBLR1NJWkUgYmFzaCcpCisgICAgICAgIHBrZ3NpemUgPSBpbnQocmVzdWx0Lm91dHB1dC5zdHJpcCgpKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIocGtnc2l6ZSwgMSwgIlNpemUgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAxLiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExOTgpCisgICAgZGVmIHRlc3RfZmluZF9wYXRoKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBmaW5kLXBhdGggL2xpYi9saWJjLnNvLjYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdnbGliYzogL2xpYi9saWJjLnNvLjYnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBmaW5kLXBhdGggL2Jpbi9iYXNoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnYmFzaDogL2Jpbi9iYXNoJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgZmluZC1wYXRoIC9ub3QvZXhpc3QnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMSwgIlN0YXR1cyBkaWZmZXJlbnQgdGhhbiAxLiBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ0VSUk9SOiBVbmFibGUgdG8gZmluZCBhbnkgcGFja2FnZSBwcm9kdWNpbmcgcGF0aCAvbm90L2V4aXN0JykKKworICAgIEB0ZXN0Y2FzZSgxMjA0KQorICAgIGRlZiB0ZXN0X2xvb2t1cF9yZWNpcGUoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1yZWNpcGUgImxpYmM2LXN0YXRpY2RldiBidXN5Ym94IicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ2dsaWJjXG5idXN5Ym94JykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbG9va3VwLXJlY2lwZSBsaWJ6LWRiZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ3psaWInKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsb29rdXAtcmVjaXBlIG5vbmV4aXN0ZW50cGtnJywgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDEsICJTdGF0dXMgZGlmZmVyZW50IHRoYW4gMS4gb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdFUlJPUjogVGhlIGZvbGxvd2luZyBwYWNrYWdlcyBjb3VsZCBub3QgYmUgZm91bmQ6IG5vbmV4aXN0ZW50cGtnJykKKworICAgIEB0ZXN0Y2FzZSgxMjAyKQorICAgIGRlZiB0ZXN0X2xpc3RfcGtncyhzZWxmKToKKyAgICAgICAgIyBObyBhcmd1bWVudHMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2dzJykKKyAgICAgICAgcGtnbGlzdCA9IHJlc3VsdC5vdXRwdXQuc3BsaXQoKQorICAgICAgICBzZWxmLmFzc2VydEluKCdnbGliYy11dGlscycsIHBrZ2xpc3QsICJMaXN0ZWQgcGFja2FnZXM6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWItZGV2JywgcGtnbGlzdCwgIkxpc3RlZCBwYWNrYWdlczogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBObyBwa2dzcGVjLCBydW50aW1lCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtncyAtcicpCisgICAgICAgIHBrZ2xpc3QgPSByZXN1bHQub3V0cHV0LnNwbGl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliYzYtdXRpbHMnLCBwa2dsaXN0LCAiTGlzdGVkIHBhY2thZ2VzOiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRldicsIHBrZ2xpc3QsICJMaXN0ZWQgcGFja2FnZXM6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgV2l0aCByZWNpcGUgc3BlY2lmaWVkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtncyAtcCB6bGliJykKKyAgICAgICAgcGtnbGlzdCA9IHNvcnRlZChyZXN1bHQub3V0cHV0LnNwbGl0KCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBrZ2xpc3QucmVtb3ZlKCd6bGliLXB0ZXN0JykgIyBpbiBjYXNlIHB0ZXN0IGlzIGRpc2FibGVkCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBrZ2xpc3QsIFsnemxpYicsICd6bGliLWRiZycsICd6bGliLWRldicsICd6bGliLWRvYycsICd6bGliLXN0YXRpY2RldiddLCAiUGFja2FnZXMgbGlzdGVkIGFmdGVyIHJlbW92ZTogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBXaXRoIHJlY2lwZSBzcGVjaWZpZWQsIHJ1bnRpbWUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2dzIC1wIHpsaWIgLXInKQorICAgICAgICBwa2dsaXN0ID0gc29ydGVkKHJlc3VsdC5vdXRwdXQuc3BsaXQoKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGtnbGlzdC5yZW1vdmUoJ2xpYnotcHRlc3QnKSAjIGluIGNhc2UgcHRlc3QgaXMgZGlzYWJsZWQKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGtnbGlzdCwgWydsaWJ6LWRiZycsICdsaWJ6LWRldicsICdsaWJ6LWRvYycsICdsaWJ6LXN0YXRpY2RldicsICdsaWJ6MSddLCAiUGFja2FnZXMgbGlzdGVkIGFmdGVyIHJlbW92ZTogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBXaXRoIHJlY2lwZSBzcGVjaWZpZWQgYW5kIHVucGFja2FnZWQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2dzIC1wIHpsaWIgLXUnKQorICAgICAgICBwa2dsaXN0ID0gc29ydGVkKHJlc3VsdC5vdXRwdXQuc3BsaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1sb2NhbGUnLCBwa2dsaXN0LCAiTGlzdGVkIHBhY2thZ2VzOiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICAjIFdpdGggcmVjaXBlIHNwZWNpZmllZCBhbmQgdW5wYWNrYWdlZCwgcnVudGltZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZ3MgLXAgemxpYiAtdSAtcicpCisgICAgICAgIHBrZ2xpc3QgPSBzb3J0ZWQocmVzdWx0Lm91dHB1dC5zcGxpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWxvY2FsZScsIHBrZ2xpc3QsICJMaXN0ZWQgcGFja2FnZXM6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgV2l0aCByZWNpcGUgc3BlY2lmaWVkIGFuZCBwa2dzcGVjCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtncyAtcCB6bGliICIqLWQqIicpCisgICAgICAgIHBrZ2xpc3QgPSBzb3J0ZWQocmVzdWx0Lm91dHB1dC5zcGxpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBrZ2xpc3QsIFsnemxpYi1kYmcnLCAnemxpYi1kZXYnLCAnemxpYi1kb2MnXSwgIlBhY2thZ2VzIGxpc3RlZDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBXaXRoIHJlY2lwZSBzcGVjaWZpZWQgYW5kIHBrZ3NwZWMsIHJ1bnRpbWUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2dzIC1wIHpsaWIgLXIgIiotZCoiJykKKyAgICAgICAgcGtnbGlzdCA9IHNvcnRlZChyZXN1bHQub3V0cHV0LnNwbGl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGtnbGlzdCwgWydsaWJ6LWRiZycsICdsaWJ6LWRldicsICdsaWJ6LWRvYyddLCAiUGFja2FnZXMgbGlzdGVkOiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEyMDEpCisgICAgZGVmIHRlc3RfbGlzdF9wa2dfZmlsZXMoc2VsZik6CisgICAgICAgIGRlZiBzcGxpdG91dHB1dChvdXRwdXQpOgorICAgICAgICAgICAgZmlsZXMgPSB7fQorICAgICAgICAgICAgY3VycGtnID0gTm9uZQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1x0Jyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjdXJwa2csICdVbmV4cGVjdGVkIG5vbi1wYWNrYWdlIGxpbmU6XG4lcycgJSBsaW5lKQorICAgICAgICAgICAgICAgICAgICBmaWxlc1tjdXJwa2ddLmFwcGVuZChsaW5lLnN0cmlwKCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmUucnN0cmlwKCkuZW5kc3dpdGgoJzonKSwgJ0ludmFsaWQgcGFja2FnZSBsaW5lIGluIG91dHB1dDpcbiVzJyAlIGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGN1cnBrZyA9IGxpbmUuc3BsaXQoJzonKVswXQorICAgICAgICAgICAgICAgICAgICBmaWxlc1tjdXJwa2ddID0gW10KKyAgICAgICAgICAgIHJldHVybiBmaWxlcworICAgICAgICBiYXNlX2xpYmRpciA9IGdldF9iYl92YXIoJ2Jhc2VfbGliZGlyJykKKyAgICAgICAgbGliZGlyID0gZ2V0X2JiX3ZhcignbGliZGlyJykKKyAgICAgICAgaW5jbHVkZWRpciA9IGdldF9iYl92YXIoJ2luY2x1ZGVkaXInKQorICAgICAgICBtYW5kaXIgPSBnZXRfYmJfdmFyKCdtYW5kaXInKQorICAgICAgICAjIFRlc3QgcmVjaXBlLXNwYWNlIHBhY2thZ2UgbmFtZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZy1maWxlcyB6bGliLWRldiB6bGliLWRvYycpCisgICAgICAgIGZpbGVzID0gc3BsaXRvdXRwdXQocmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kb2MnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4oaW5jbHVkZWRpciwgJ3psaWIuaCcpLCBmaWxlc1snemxpYi1kZXYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obWFuZGlyLCAnbWFuMy96bGliLjMnKSwgZmlsZXNbJ3psaWItZG9jJ10pCisgICAgICAgICMgVGVzdCBydW50aW1lIHBhY2thZ2UgbmFtZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZy1maWxlcyAtciBsaWJ6MSBsaWJ6LWRldicpCisgICAgICAgIGZpbGVzID0gc3BsaXRvdXRwdXQocmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliejEnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1kZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihmaWxlc1snbGliejEnXSksIDEpCisgICAgICAgIGxpYnNwZWMgPSBvcy5wYXRoLmpvaW4oYmFzZV9saWJkaXIsICdsaWJ6LnNvLjEuKicpCisgICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgZm9yIGZpbGVpdGVtIGluIGZpbGVzWydsaWJ6MSddOgorICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoY2FzZShmaWxlaXRlbSwgbGlic3BlYyk6CisgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvdW5kLCAnQ291bGQgbm90IGZpbmQgemxpYiBsaWJyYXJ5IGZpbGUgJXMgaW4gbGliejEgcGFja2FnZSBmaWxlIGxpc3Q6ICVzJyAlIChsaWJzcGVjLCBmaWxlc1snbGliejEnXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGluY2x1ZGVkaXIsICd6bGliLmgnKSwgZmlsZXNbJ2xpYnotZGV2J10pCisgICAgICAgICMgVGVzdCByZWNpcGUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2ctZmlsZXMgLXAgemxpYicpCisgICAgICAgIGZpbGVzID0gc3BsaXRvdXRwdXQocmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kYmcnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kb2MnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1zdGF0aWNkZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCd6bGliLWxvY2FsZScsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICAjIChpZ25vcmUgcHRlc3QsIG1pZ2h0IG5vdCBiZSB0aGVyZSBkZXBlbmRpbmcgb24gY29uZmlnKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihpbmNsdWRlZGlyLCAnemxpYi5oJyksIGZpbGVzWyd6bGliLWRldiddKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihtYW5kaXIsICdtYW4zL3psaWIuMycpLCBmaWxlc1snemxpYi1kb2MnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obGliZGlyLCAnbGliei5hJyksIGZpbGVzWyd6bGliLXN0YXRpY2RldiddKQorICAgICAgICAjIFRlc3QgcmVjaXBlLCBydW50aW1lCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtnLWZpbGVzIC1wIHpsaWIgLXInKQorICAgICAgICBmaWxlcyA9IHNwbGl0b3V0cHV0KHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZGJnJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZG9jJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZGV2JywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotc3RhdGljZGV2JywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnoxJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2xpYnotbG9jYWxlJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGluY2x1ZGVkaXIsICd6bGliLmgnKSwgZmlsZXNbJ2xpYnotZGV2J10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKG1hbmRpciwgJ21hbjMvemxpYi4zJyksIGZpbGVzWydsaWJ6LWRvYyddKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihsaWJkaXIsICdsaWJ6LmEnKSwgZmlsZXNbJ2xpYnotc3RhdGljZGV2J10pCisgICAgICAgICMgVGVzdCByZWNpcGUsIHVucGFja2FnZWQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2ctZmlsZXMgLXAgemxpYiAtdScpCisgICAgICAgIGZpbGVzID0gc3BsaXRvdXRwdXQocmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kYmcnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kb2MnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1zdGF0aWNkZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWxvY2FsZScsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KSAjIHRoaXMgaXMgdGhlIGtleSBvbmUKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4oaW5jbHVkZWRpciwgJ3psaWIuaCcpLCBmaWxlc1snemxpYi1kZXYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obWFuZGlyLCAnbWFuMy96bGliLjMnKSwgZmlsZXNbJ3psaWItZG9jJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGxpYmRpciwgJ2xpYnouYScpLCBmaWxlc1snemxpYi1zdGF0aWNkZXYnXSkKKyAgICAgICAgIyBUZXN0IHJlY2lwZSwgcnVudGltZSwgdW5wYWNrYWdlZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZy1maWxlcyAtcCB6bGliIC1yIC11JykKKyAgICAgICAgZmlsZXMgPSBzcGxpdG91dHB1dChyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRiZycsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRvYycsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRldicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LXN0YXRpY2RldicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6MScsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWxvY2FsZScsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KSAjIHRoaXMgaXMgdGhlIGtleSBvbmUKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4oaW5jbHVkZWRpciwgJ3psaWIuaCcpLCBmaWxlc1snbGliei1kZXYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obWFuZGlyLCAnbWFuMy96bGliLjMnKSwgZmlsZXNbJ2xpYnotZG9jJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGxpYmRpciwgJ2xpYnouYScpLCBmaWxlc1snbGliei1zdGF0aWNkZXYnXSkKKworICAgIEB0ZXN0Y2FzZSgxMjAwKQorICAgIGRlZiB0ZXN0X2dsb2Ioc2VsZik6CisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0ncGtnZGF0YXFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBwa2dsaXN0ZmlsZSA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAncGtnbGlzdCcpCisgICAgICAgIHdpdGggb3Blbihwa2dsaXN0ZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgnbGliYzZcbicpCisgICAgICAgICAgICBmLndyaXRlKCdsaWJ6MVxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ2J1c3lib3hcbicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGdsb2IgJXMgIiotZGV2IicgJSBwa2dsaXN0ZmlsZSkKKyAgICAgICAgZGVzaXJlZHJlc3VsdCA9IFsnbGliYzYtZGV2JywgJ2xpYnotZGV2JywgJ2J1c3lib3gtZGV2J10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQocmVzdWx0Lm91dHB1dC5zcGxpdCgpKSwgc29ydGVkKGRlc2lyZWRyZXN1bHQpKQorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgc2hvdWxkIG5vdCBlcnJvciAoYmVjYXVzZSB3aGVuIHdlIHVzZSB0aGlzIGR1cmluZyByb290ZnMgY29uc3RydWN0aW9uLCBzb21ldGltZXMgdGhlIGNvbXBsZW1lbnRhcnkgcGFja2FnZSB3b24ndCBleGlzdCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgZ2xvYiAlcyAiKi1ub25leGlzdGVudCInICUgcGtnbGlzdGZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJycpCisgICAgICAgICMgVGVzdCBleGNsdWRlIG9wdGlvbgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBnbG9iICVzICIqLWRldiAqLWRiZyIgLXggIl5saWJ6IicgJSBwa2dsaXN0ZmlsZSkKKyAgICAgICAgcmVzdWx0bGlzdCA9IHJlc3VsdC5vdXRwdXQuc3BsaXQoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdsaWJ6LWRldicsIHJlc3VsdGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2xpYnotZGJnJywgcmVzdWx0bGlzdCkKKworICAgIEB0ZXN0Y2FzZSgxMjA2KQorICAgIGRlZiB0ZXN0X3NwZWNpZnlfcGtnZGF0YWRpcihzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgLXAgJXMgbG9va3VwLXBrZyBnbGliYycgJSBnZXRfYmJfdmFyKCdQS0dEQVRBX0RJUicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdsaWJjNicpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvcHJzZXJ2aWNlLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3Byc2VydmljZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTg3ZmJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3Byc2VydmljZS5weQpAQCAtMCwwICsxLDEyMSBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBkYXRldGltZQorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBCaXRiYWtlUHJUZXN0cyhvZVNlbGZUZXN0KToKKworICAgIGRlZiBnZXRfcHJfdmVyc2lvbihzZWxmLCBwYWNrYWdlX25hbWUpOgorICAgICAgICBwa2dkYXRhX2RpciA9IGdldF9iYl92YXIoJ1BLR0RBVEFfRElSJykKKyAgICAgICAgcGFja2FnZV9kYXRhX2ZpbGUgPSBvcy5wYXRoLmpvaW4ocGtnZGF0YV9kaXIsICdydW50aW1lJywgcGFja2FnZV9uYW1lKQorICAgICAgICBwYWNrYWdlX2RhdGEgPSBmdG9vbHMucmVhZF9maWxlKHBhY2thZ2VfZGF0YV9maWxlKQorICAgICAgICBmaW5kX3ByID0gcmUuc2VhcmNoKCJQS0dSOiByWzAtOV0rXC4oWzAtOV0rKSIsIHBhY2thZ2VfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRfcHIsICJObyBQS0cgcmV2aXNpb24gZm91bmQgaW4gJXMiICUgcGFja2FnZV9kYXRhX2ZpbGUpCisgICAgICAgIHJldHVybiBpbnQoZmluZF9wci5ncm91cCgxKSkKKworICAgIGRlZiBnZXRfdGFza19zdGFtcChzZWxmLCBwYWNrYWdlX25hbWUsIHJlY2lwZV90YXNrKToKKyAgICAgICAgc3RhbXBkYXRhID0gZ2V0X2JiX3ZhcignU1RBTVAnLCB0YXJnZXQ9cGFja2FnZV9uYW1lKS5zcGxpdCgnLycpCisgICAgICAgIHByZWZpeCA9IHN0YW1wZGF0YVstMV0KKyAgICAgICAgcGFja2FnZV9zdGFtcHNfcGF0aCA9ICIvIi5qb2luKHN0YW1wZGF0YVs6LTFdKQorICAgICAgICBzdGFtcHMgPSBbXQorICAgICAgICBmb3Igc3RhbXAgaW4gb3MubGlzdGRpcihwYWNrYWdlX3N0YW1wc19wYXRoKToKKyAgICAgICAgICAgIGZpbmRfc3RhbXAgPSByZS5tYXRjaCgiJXNcLiVzXC4oW2EtejAtOV17MzJ9KSIgJSAocHJlZml4LCByZWNpcGVfdGFzayksIHN0YW1wKQorICAgICAgICAgICAgaWYgZmluZF9zdGFtcDoKKyAgICAgICAgICAgICAgICBzdGFtcHMuYXBwZW5kKGZpbmRfc3RhbXAuZ3JvdXAoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGVuKHN0YW1wcykgPT0gMCwgbXNnPSJDb3VuZCBub3QgZmluZCBzdGFtcCBmb3IgdGFzayAlcyBmb3IgcmVjaXBlICVzIiAlIChyZWNpcGVfdGFzaywgcGFja2FnZV9uYW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsZW4oc3RhbXBzKSA+IDEsIG1zZz0iRm91bmQgbXVsdGlwbGUgJXMgc3RhbXBzIGZvciB0aGUgJXMgcmVjaXBlIGluIHRoZSAlcyBkaXJlY3RvcnkuIiAlIChyZWNpcGVfdGFzaywgcGFja2FnZV9uYW1lLCBwYWNrYWdlX3N0YW1wc19wYXRoKSkKKyAgICAgICAgcmV0dXJuIHN0cihzdGFtcHNbMF0pCisKKyAgICBkZWYgaW5jcmVtZW50X3BhY2thZ2VfcHIoc2VsZiwgcGFja2FnZV9uYW1lKToKKyAgICAgICAgaW5jX2RhdGEgPSAiZG9fcGFja2FnZV9hcHBlbmQoKSB7XG5iYi5idWlsZC5leGVjX2Z1bmMoJ2RvX3Rlc3RfcHJzZXJ2JywgZClcbn1cbmRvX3Rlc3RfcHJzZXJ2KCkge1xuZWNobyBcIlRoZSBjdXJyZW50IGRhdGUgaXM6ICVzXCJcbn0iICUgZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkKKyAgICAgICAgc2VsZi53cml0ZV9yZWNpcGVpbmMocGFja2FnZV9uYW1lLCBpbmNfZGF0YSkKKyAgICAgICAgYml0YmFrZSgiLWNjbGVhbnNzdGF0ZSAlcyIgJSBwYWNrYWdlX25hbWUpCisgICAgICAgIHJlcyA9IGJpdGJha2UocGFja2FnZV9uYW1lLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuZGVsZXRlX3JlY2lwZWluYyhwYWNrYWdlX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgMCwgbXNnPXJlcy5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiTk9URTogU3RhcnRlZCBQUlNlcnZlciB3aXRoIERCZmlsZSIgaW4gcmVzLm91dHB1dCwgbXNnPXJlcy5vdXRwdXQpCisKKyAgICBkZWYgY29uZmlnX3ByX3Rlc3RzKHNlbGYsIHBhY2thZ2VfbmFtZSwgcGFja2FnZV90eXBlPSdycG0nLCBwcl9zb2NrZXQ9J2xvY2FsaG9zdDowJyk6CisgICAgICAgIGNvbmZpZ19wYWNrYWdlX2RhdGEgPSAnUEFDS0FHRV9DTEFTU0VTID0gInBhY2thZ2VfJXMiJyAlIHBhY2thZ2VfdHlwZQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZyhjb25maWdfcGFja2FnZV9kYXRhKQorICAgICAgICBjb25maWdfc2VydmVyX2RhdGEgPSAnUFJTRVJWX0hPU1QgPSAiJXMiJyAlIHByX3NvY2tldAorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoY29uZmlnX3NlcnZlcl9kYXRhKQorCisgICAgZGVmIHJ1bl90ZXN0X3ByX3NlcnZpY2Uoc2VsZiwgcGFja2FnZV9uYW1lLCBwYWNrYWdlX3R5cGU9J3JwbScsIHRyYWNrX3Rhc2s9J2RvX3BhY2thZ2UnLCBwcl9zb2NrZXQ9J2xvY2FsaG9zdDowJyk6CisgICAgICAgIHNlbGYuY29uZmlnX3ByX3Rlc3RzKHBhY2thZ2VfbmFtZSwgcGFja2FnZV90eXBlLCBwcl9zb2NrZXQpCisKKyAgICAgICAgc2VsZi5pbmNyZW1lbnRfcGFja2FnZV9wcihwYWNrYWdlX25hbWUpCisgICAgICAgIHByXzEgPSBzZWxmLmdldF9wcl92ZXJzaW9uKHBhY2thZ2VfbmFtZSkKKyAgICAgICAgc3RhbXBfMSA9IHNlbGYuZ2V0X3Rhc2tfc3RhbXAocGFja2FnZV9uYW1lLCB0cmFja190YXNrKQorCisgICAgICAgIHNlbGYuaW5jcmVtZW50X3BhY2thZ2VfcHIocGFja2FnZV9uYW1lKQorICAgICAgICBwcl8yID0gc2VsZi5nZXRfcHJfdmVyc2lvbihwYWNrYWdlX25hbWUpCisgICAgICAgIHN0YW1wXzIgPSBzZWxmLmdldF90YXNrX3N0YW1wKHBhY2thZ2VfbmFtZSwgdHJhY2tfdGFzaykKKworICAgICAgICBiaXRiYWtlKCItY2NsZWFuc3N0YXRlICVzIiAlIHBhY2thZ2VfbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByXzIgLSBwcl8xID09IDEsICJTdGVwIGJldHdlZW4gc2FtZSBwa2cuIHJldmlzaW9uIGlzIGdyZWF0ZXIgdGhhbiAxIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YW1wXzEgIT0gc3RhbXBfMiwgIkRpZmZlcmVudCBwa2cgcmV2LiBidXQgc2FtZSBzdGFtcDogJXMiICUgc3RhbXBfMSkKKworICAgIGRlZiBydW5fdGVzdF9wcl9leHBvcnRfaW1wb3J0KHNlbGYsIHBhY2thZ2VfbmFtZSwgcmVwbGFjZV9jdXJyZW50X2RiPVRydWUpOgorICAgICAgICBzZWxmLmNvbmZpZ19wcl90ZXN0cyhwYWNrYWdlX25hbWUpCisKKyAgICAgICAgc2VsZi5pbmNyZW1lbnRfcGFja2FnZV9wcihwYWNrYWdlX25hbWUpCisgICAgICAgIHByXzEgPSBzZWxmLmdldF9wcl92ZXJzaW9uKHBhY2thZ2VfbmFtZSkKKworICAgICAgICBleHBvcnRlZF9kYl9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdleHBvcnQuaW5jJykKKyAgICAgICAgZXhwb3J0X3Jlc3VsdCA9IHJ1bkNtZCgiYml0YmFrZS1wcnNlcnYtdG9vbCBleHBvcnQgJXMiICUgZXhwb3J0ZWRfZGJfcGF0aCwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cG9ydF9yZXN1bHQuc3RhdHVzLCAwLCBtc2c9IlBSIFNlcnZpY2UgZGF0YWJhc2UgZXhwb3J0IGZhaWxlZDogJXMiICUgZXhwb3J0X3Jlc3VsdC5vdXRwdXQpCisKKyAgICAgICAgaWYgcmVwbGFjZV9jdXJyZW50X2RiOgorICAgICAgICAgICAgY3VycmVudF9kYl9wYXRoID0gb3MucGF0aC5qb2luKGdldF9iYl92YXIoJ1BFUlNJU1RFTlRfRElSJyksICdwcnNlcnYuc3FsaXRlMycpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoY3VycmVudF9kYl9wYXRoKSwgbXNnPSJQYXRoIHRvIGN1cnJlbnQgUFIgU2VydmljZSBkYXRhYmFzZSBpcyBpbnZhbGlkOiAlcyIgJSBjdXJyZW50X2RiX3BhdGgpCisgICAgICAgICAgICBvcy5yZW1vdmUoY3VycmVudF9kYl9wYXRoKQorCisgICAgICAgIGltcG9ydF9yZXN1bHQgPSBydW5DbWQoImJpdGJha2UtcHJzZXJ2LXRvb2wgaW1wb3J0ICVzIiAlIGV4cG9ydGVkX2RiX3BhdGgsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgb3MucmVtb3ZlKGV4cG9ydGVkX2RiX3BhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1wb3J0X3Jlc3VsdC5zdGF0dXMsIDAsIG1zZz0iUFIgU2VydmljZSBkYXRhYmFzZSBpbXBvcnQgZmFpbGVkOiAlcyIgJSBpbXBvcnRfcmVzdWx0Lm91dHB1dCkKKworICAgICAgICBzZWxmLmluY3JlbWVudF9wYWNrYWdlX3ByKHBhY2thZ2VfbmFtZSkKKyAgICAgICAgcHJfMiA9IHNlbGYuZ2V0X3ByX3ZlcnNpb24ocGFja2FnZV9uYW1lKQorCisgICAgICAgIGJpdGJha2UoIi1jY2xlYW5zc3RhdGUgJXMiICUgcGFja2FnZV9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJfMiAtIHByXzEgPT0gMSwgIlN0ZXAgYmV0d2VlbiBzYW1lIHBrZy4gcmV2aXNpb24gaXMgZ3JlYXRlciB0aGFuIDEiKQorCisgICAgQHRlc3RjYXNlKDkzMCkKKyAgICBkZWYgdGVzdF9pbXBvcnRfZXhwb3J0X3JlcGxhY2VfZGIoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfcHJfZXhwb3J0X2ltcG9ydCgnbTQnKQorCisgICAgQHRlc3RjYXNlKDkzMSkKKyAgICBkZWYgdGVzdF9pbXBvcnRfZXhwb3J0X292ZXJyaWRlX2RiKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX2V4cG9ydF9pbXBvcnQoJ200JywgcmVwbGFjZV9jdXJyZW50X2RiPUZhbHNlKQorCisgICAgQHRlc3RjYXNlKDkzMikKKyAgICBkZWYgdGVzdF9wcl9zZXJ2aWNlX3JwbV9hcmNoX2RlcChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9wcl9zZXJ2aWNlKCdtNCcsICdycG0nLCAnZG9fcGFja2FnZScpCisKKyAgICBAdGVzdGNhc2UoOTM0KQorICAgIGRlZiB0ZXN0X3ByX3NlcnZpY2VfZGViX2FyY2hfZGVwKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX3NlcnZpY2UoJ200JywgJ2RlYicsICdkb19wYWNrYWdlJykKKworICAgIEB0ZXN0Y2FzZSg5MzMpCisgICAgZGVmIHRlc3RfcHJfc2VydmljZV9pcGtfYXJjaF9kZXAoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfcHJfc2VydmljZSgnbTQnLCAnaXBrJywgJ2RvX3BhY2thZ2UnKQorCisgICAgQHRlc3RjYXNlKDkzNSkKKyAgICBkZWYgdGVzdF9wcl9zZXJ2aWNlX3JwbV9hcmNoX2luZGVwKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX3NlcnZpY2UoJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnLCAncnBtJywgJ2RvX3BhY2thZ2UnKQorCisgICAgQHRlc3RjYXNlKDkzNykKKyAgICBkZWYgdGVzdF9wcl9zZXJ2aWNlX2RlYl9hcmNoX2luZGVwKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX3NlcnZpY2UoJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnLCAnZGViJywgJ2RvX3BhY2thZ2UnKQorCisgICAgQHRlc3RjYXNlKDkzNikKKyAgICBkZWYgdGVzdF9wcl9zZXJ2aWNlX2lwa19hcmNoX2luZGVwKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX3NlcnZpY2UoJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnLCAnaXBrJywgJ2RvX3BhY2thZ2UnKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3JlY2lwZXRvb2wucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvcmVjaXBldG9vbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzRhZDY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3JlY2lwZXRvb2wucHkKQEAgLTAsMCArMSw1NTQgQEAKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHVybHBhcnNlCisKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBjcmVhdGVfdGVtcF9sYXllcgorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCitmcm9tIG9lcWEuc2VsZnRlc3QgaW1wb3J0IGRldnRvb2wKKworCit0ZW1wbGF5ZXJkaXIgPSBOb25lCisKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgZ2xvYmFsIHRlbXBsYXllcmRpcgorICAgIHRlbXBsYXllcmRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdyZWNpcGV0b29scWEnKQorICAgIGNyZWF0ZV90ZW1wX2xheWVyKHRlbXBsYXllcmRpciwgJ3NlbGZ0ZXN0cmVjaXBldG9vbCcpCisgICAgcnVuQ21kKCdiaXRiYWtlLWxheWVycyBhZGQtbGF5ZXIgJXMnICUgdGVtcGxheWVyZGlyKQorCisKK2RlZiB0ZWFyRG93bk1vZHVsZSgpOgorICAgIHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICVzJyAlIHRlbXBsYXllcmRpciwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgIHJ1bkNtZCgncm0gLXJmICVzJyAlIHRlbXBsYXllcmRpcikKKworCitjbGFzcyBSZWNpcGV0b29sQmFzZShkZXZ0b29sLkRldnRvb2xCYXNlKToKKyAgICBkZWYgc2V0VXBMb2NhbChzZWxmKToKKyAgICAgICAgc2VsZi50ZW1wbGF5ZXJkaXIgPSB0ZW1wbGF5ZXJkaXIKKyAgICAgICAgc2VsZi50ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J3JlY2lwZXRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi50ZW1wZGlyKQorICAgICAgICBzZWxmLnRlc3RmaWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ3Rlc3RmaWxlJykKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYudGVzdGZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJ1Rlc3QgZmlsZVxuJykKKworICAgIGRlZiB0ZWFyRG93bkxvY2FsKHNlbGYpOgorICAgICAgICBydW5DbWQoJ3JtIC1yZiAlcy9yZWNpcGVzLSonICUgc2VsZi50ZW1wbGF5ZXJkaXIpCisKKyAgICBkZWYgX3RyeV9yZWNpcGV0b29sX2FwcGVuZGNtZChzZWxmLCBjbWQsIHRlc3RyZWNpcGUsIGV4cGVjdGVkZmlsZXMsIGV4cGVjdGVkbGluZXM9Tm9uZSk6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZChjbWQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1RyYWNlYmFjaycsIHJlc3VsdC5vdXRwdXQpCisKKyAgICAgICAgIyBDaGVjayB0aGUgYmJhcHBlbmQgd2FzIGNyZWF0ZWQgYW5kIGFwcGxpZXMgcHJvcGVybHkKKyAgICAgICAgcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCB0ZXN0cmVjaXBlKQorICAgICAgICBiYmFwcGVuZGZpbGUgPSBzZWxmLl9jaGVja19iYmFwcGVuZCh0ZXN0cmVjaXBlLCByZWNpcGVmaWxlLCBzZWxmLnRlbXBsYXllcmRpcikKKworICAgICAgICAjIENoZWNrIHRoZSBiYmFwcGVuZCBjb250ZW50cworICAgICAgICBpZiBleHBlY3RlZGxpbmVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRsaW5lcywgZi5yZWFkbGluZXMoKSwgIkV4cGVjdGVkIGxpbmVzIGFyZSBub3QgcHJlc2VudCBpbiAlcyIgJSBiYmFwcGVuZGZpbGUpCisKKyAgICAgICAgIyBDaGVjayBmaWxlIHdhcyBjb3BpZWQKKyAgICAgICAgZmlsZXNkaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGJiYXBwZW5kZmlsZSksIHRlc3RyZWNpcGUpCisgICAgICAgIGZvciBleHBlY3RlZGZpbGUgaW4gZXhwZWN0ZWRmaWxlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZmlsZXNkaXIsIGV4cGVjdGVkZmlsZSkpLCAnRXhwZWN0ZWQgZmlsZSAlcyB0byBiZSBjb3BpZWQgbmV4dCB0byBiYmFwcGVuZCwgYnV0IGl0IHdhc25cJ3QnICUgZXhwZWN0ZWRmaWxlKQorCisgICAgICAgICMgQ2hlY2sgbm8gb3RoZXIgZmlsZXMgY3JlYXRlZAorICAgICAgICBjcmVhdGVkZmlsZXMgPSBbXQorICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhmaWxlc2Rpcik6CisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBjcmVhdGVkZmlsZXMuYXBwZW5kKG9zLnBhdGgucmVscGF0aChvcy5wYXRoLmpvaW4ocm9vdCwgZiksIGZpbGVzZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvcnRlZChjcmVhdGVkZmlsZXMpLCBzb3J0ZWQoZXhwZWN0ZWRmaWxlcykpCisKKyAgICAgICAgcmV0dXJuIGJiYXBwZW5kZmlsZSwgcmVzdWx0Lm91dHB1dAorCisKK2NsYXNzIFJlY2lwZXRvb2xUZXN0cyhSZWNpcGV0b29sQmFzZSk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgIyBFbnN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgZGF0YSBpbiBzaGxpYnMvcGtnZGF0YQorICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigic2VsZnRlc3QiKQorICAgICAgICBsb2dnZXIuaW5mbygnUnVubmluZyBiaXRiYWtlIHRvIGdlbmVyYXRlIHBrZ2RhdGEnKQorICAgICAgICBiaXRiYWtlKCctYyBwYWNrYWdlZGF0YSBiYXNlLWZpbGVzIGNvcmV1dGlscyBidXN5Ym94IHNlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAjIFNob3VsZG4ndCBsZWF2ZSBhbnkgdHJhY2VzIG9mIHRoaXMgYXJ0aWZpY2lhbCByZWNpcGUgYmVoaW5kCisgICAgICAgIGJpdGJha2UoJy1jIGNsZWFuc3N0YXRlIHNlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScpCisKKyAgICBkZWYgX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoc2VsZiwgdGVzdHJlY2lwZSwgZGVzdGZpbGUsIG5ld2ZpbGUsIG9wdGlvbnMsIGV4cGVjdGVkbGluZXMsIGV4cGVjdGVkZmlsZXMpOgorICAgICAgICBjbWQgPSAncmVjaXBldG9vbCBhcHBlbmRmaWxlICVzICVzICVzICVzJyAlIChzZWxmLnRlbXBsYXllcmRpciwgZGVzdGZpbGUsIG5ld2ZpbGUsIG9wdGlvbnMpCisgICAgICAgIHJldHVybiBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRjbWQoY21kLCB0ZXN0cmVjaXBlLCBleHBlY3RlZGZpbGVzLCBleHBlY3RlZGxpbmVzKQorCisgICAgZGVmIF90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2ZhaWwoc2VsZiwgZGVzdGZpbGUsIG5ld2ZpbGUsIGNoZWNrZXJyb3IpOgorICAgICAgICBjbWQgPSAncmVjaXBldG9vbCBhcHBlbmRmaWxlICVzICVzICVzJyAlIChzZWxmLnRlbXBsYXllcmRpciwgZGVzdGZpbGUsIG5ld2ZpbGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZChjbWQsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQuc3RhdHVzLCAwLCAnQ29tbWFuZCAiJXMiIHNob3VsZCBoYXZlIGZhaWxlZCBidXQgZGlkblwndCcgJSBjbWQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1RyYWNlYmFjaycsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIGZvciBlcnJvcnN0ciBpbiBjaGVja2Vycm9yOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlcnJvcnN0ciwgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTc3KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9iYXNpYyhzZWxmKToKKyAgICAgICAgIyBCYXNpYyB0ZXN0CisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdiYXNlLWZpbGVzJywgJy9ldGMvbW90ZCcsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ21vdGQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExODMpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2ludmFsaWQoc2VsZik6CisgICAgICAgICMgVGVzdCBzb21lIGNvbW1hbmRzIHRoYXQgc2hvdWxkIGVycm9yCisgICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGVfZmFpbCgnL2V0Yy9wYXNzd2QnLCBzZWxmLnRlc3RmaWxlLCBbJ0VSUk9SOiAvZXRjL3Bhc3N3ZCBjYW5ub3QgYmUgaGFuZGxlZCBieSB0aGlzIHRvb2wnLCAndXNlcmFkZCcsICdleHRyYXVzZXJzJ10pCisgICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGVfZmFpbCgnL2V0Yy90aW1lc3RhbXAnLCBzZWxmLnRlc3RmaWxlLCBbJ0VSUk9SOiAvZXRjL3RpbWVzdGFtcCBjYW5ub3QgYmUgaGFuZGxlZCBieSB0aGlzIHRvb2wnXSkKKyAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9mYWlsKCcvZGV2L2NvbnNvbGUnLCBzZWxmLnRlc3RmaWxlLCBbJ0VSUk9SOiAvZGV2L2NvbnNvbGUgY2Fubm90IGJlIGhhbmRsZWQgYnkgdGhpcyB0b29sJ10pCisKKyAgICBAdGVzdGNhc2UoMTE3NikKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfYWx0ZXJuYXRpdmVzKHNlbGYpOgorICAgICAgICAjIE5vdyB0cnkgd2l0aCBhIGZpbGUgd2Uga25vdyBzaG91bGQgYmUgYW4gYWx0ZXJuYXRpdmUKKyAgICAgICAgIyAodGhpcyBpcyB2ZXJ5IG11Y2ggYSBmYWtlIGV4YW1wbGUsIGJ1dCBvbmUgd2Uga25vdyBpcyByZWxpYWJseSBhbiBhbHRlcm5hdGl2ZSkKKyAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9mYWlsKCcvYmluL2xzJywgc2VsZi50ZXN0ZmlsZSwgWydFUlJPUjogRmlsZSAvYmluL2xzIGlzIGFuIGFsdGVybmF0aXZlIHBvc3NpYmx5IHByb3ZpZGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVjaXBlczonLCAnY29yZXV0aWxzJywgJ2J1c3lib3gnXSkKKyAgICAgICAgY29yZWJhc2UgPSBnZXRfYmJfdmFyKCdDT1JFQkFTRScpCisgICAgICAgICMgTmVlZCBhIHRlc3QgZmlsZSAtIHNob3VsZCBiZSBleGVjdXRhYmxlCisgICAgICAgIHRlc3RmaWxlMiA9IG9zLnBhdGguam9pbihjb3JlYmFzZSwgJ29lLWluaXQtYnVpbGQtZW52JykKKyAgICAgICAgdGVzdGZpbGUybmFtZSA9IG9zLnBhdGguYmFzZW5hbWUodGVzdGZpbGUyKQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly8lcyJcbicgJSB0ZXN0ZmlsZTJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vJXMgJHtEfSR7YmFzZV9iaW5kaXJ9L2xzXG4nICUgdGVzdGZpbGUybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KKyAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnY29yZXV0aWxzJywgJy9iaW4vbHMnLCB0ZXN0ZmlsZTIsICctciBjb3JldXRpbHMnLCBleHBlY3RlZGxpbmVzLCBbdGVzdGZpbGUybmFtZV0pCisgICAgICAgICMgTm93IHRyeSBiYmFwcGVuZGluZyB0aGUgc2FtZSBmaWxlIGFnYWluLCBjb250ZW50cyBzaG91bGQgbm90IGNoYW5nZQorICAgICAgICBiYmFwcGVuZGZpbGUsIF8gPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdjb3JldXRpbHMnLCAnL2Jpbi9scycsIHNlbGYudGVzdGZpbGUsICctciBjb3JldXRpbHMnLCBleHBlY3RlZGxpbmVzLCBbdGVzdGZpbGUybmFtZV0pCisgICAgICAgICMgQnV0IGZpbGUgc2hvdWxkIGhhdmUKKyAgICAgICAgY29waWVkZmlsZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoYmJhcHBlbmRmaWxlKSwgJ2NvcmV1dGlscycsIHRlc3RmaWxlMm5hbWUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGlmZiAtcSAlcyAlcycgJSAodGVzdGZpbGUyLCBjb3BpZWRmaWxlKSwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsICdOZXcgZmlsZSBzaG91bGQgaGF2ZSBiZWVuIGNvcGllZCBidXQgd2FzIG5vdCAlcycgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExNzgpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2JpbmFyeShzZWxmKToKKyAgICAgICAgIyBUcnkgYXBwZW5kaW5nIGEgYmluYXJ5IGZpbGUKKyAgICAgICAgIyAvYmluL2xzIGNhbiBiZSBhIHN5bWxpbmsgdG8gL3Vzci9iaW4vbHMKKyAgICAgICAgbHMgPSBvcy5wYXRoLnJlYWxwYXRoKCIvYmluL2xzIikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdyZWNpcGV0b29sIGFwcGVuZGZpbGUgJXMgL2Jpbi9scyAlcyAtciBjb3JldXRpbHMnICUgKHNlbGYudGVtcGxheWVyZGlyLCBscykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1dBUk5JTkc6ICcsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2lzIGEgYmluYXJ5JywgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTczKQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9hZGQoc2VsZik6CisgICAgICAgIGNvcmViYXNlID0gZ2V0X2JiX3ZhcignQ09SRUJBU0UnKQorICAgICAgICAjIFRyeSBhcmJpdHJhcnkgZmlsZSBhZGQgdG8gYSByZWNpcGUKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtkYXRhZGlyfS9zb21ldGhpbmdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ25ldGJhc2UnLCAnL3Vzci9zaGFyZS9zb21ldGhpbmcnLCBzZWxmLnRlc3RmaWxlLCAnLXIgbmV0YmFzZScsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnXSkKKyAgICAgICAgIyBUcnkgYWRkaW5nIGFub3RoZXIgZmlsZSwgdGhpcyB0aW1lIHdoZXJlIHRoZSBzb3VyY2UgZmlsZSBpcyBleGVjdXRhYmxlCisgICAgICAgICMgKHNvIHdlJ3JlIHRlc3RpbmcgdGhhdCwgcGx1cyBtb2RpZnlpbmcgYW4gZXhpc3RpbmcgYmJhcHBlbmQpCisgICAgICAgIHRlc3RmaWxlMiA9IG9zLnBhdGguam9pbihjb3JlYmFzZSwgJ29lLWluaXQtYnVpbGQtZW52JykKKyAgICAgICAgdGVzdGZpbGUybmFtZSA9IG9zLnBhdGguYmFzZW5hbWUodGVzdGZpbGUyKQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly90ZXN0ZmlsZSBcXFxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgZmlsZTovLyVzIFxcXG4nICUgdGVzdGZpbGUybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdkb19pbnN0YWxsX2FwcGVuZCgpIHtcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdGVzdGZpbGUgJHtEfSR7ZGF0YWRpcn0vc29tZXRoaW5nXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vJXMgJHtEfSR7ZGF0YWRpcn0vc2NyaXB0bmFtZVxuJyAlIHRlc3RmaWxlMm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ25ldGJhc2UnLCAnL3Vzci9zaGFyZS9zY3JpcHRuYW1lJywgdGVzdGZpbGUyLCAnLXIgbmV0YmFzZScsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnLCB0ZXN0ZmlsZTJuYW1lXSkKKworICAgIEB0ZXN0Y2FzZSgxMTc0KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9hZGRfYmluZGlyKHNlbGYpOgorICAgICAgICAjIFRyeSBhcmJpdHJhcnkgZmlsZSBhZGQgdG8gYSByZWNpcGUsIHRoaXMgdGltZSB0byBhIGxvY2F0aW9uIHN1Y2ggdGhhdCBzaG91bGQgYmUgaW5zdGFsbGVkIGFzIGV4ZWN1dGFibGUKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2JpbmRpcn0vc2VsZnRlc3QtcmVjaXBldG9vbC10ZXN0YmluXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICd9XG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCduZXRiYXNlJywgJy91c3IvYmluL3NlbGZ0ZXN0LXJlY2lwZXRvb2wtdGVzdGJpbicsIHNlbGYudGVzdGZpbGUsICctciBuZXRiYXNlJywgZXhwZWN0ZWRsaW5lcywgWyd0ZXN0ZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE3NSkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfYWRkX21hY2hpbmUoc2VsZik6CisgICAgICAgICMgVHJ5IGFyYml0cmFyeSBmaWxlIGFkZCB0byBhIHJlY2lwZSwgdGhpcyB0aW1lIHRvIGEgbG9jYXRpb24gc3VjaCB0aGF0IHNob3VsZCBiZSBpbnN0YWxsZWQgYXMgZXhlY3V0YWJsZQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUklfYXBwZW5kX215bWFjaGluZSA9ICIgZmlsZTovL3Rlc3RmaWxlIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdkb19pbnN0YWxsX2FwcGVuZF9teW1hY2hpbmUoKSB7XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2RhdGFkaXJ9L3NvbWV0aGluZ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnbmV0YmFzZScsICcvdXNyL3NoYXJlL3NvbWV0aGluZycsIHNlbGYudGVzdGZpbGUsICctciBuZXRiYXNlIC1tIG15bWFjaGluZScsIGV4cGVjdGVkbGluZXMsIFsnbXltYWNoaW5lL3Rlc3RmaWxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTg0KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9vcmlnKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgaW4gU1JDX1VSSSBhbmQgaW4gZG9faW5zdGFsbCB3aXRoIHRoZSBzYW1lIG5hbWUKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCAnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtb3JpZycsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ3NlbGZ0ZXN0LXJlcGxhY2VtZS1vcmlnJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTkxKQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV90b2RpcihzZWxmKToKKyAgICAgICAgIyBBIGZpbGUgdGhhdCdzIGluIFNSQ19VUkkgYW5kIGluIGRvX2luc3RhbGwgd2l0aCBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgcmF0aGVyIHRoYW4gZmlsZQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS10b2RpcicsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ3NlbGZ0ZXN0LXJlcGxhY2VtZS10b2RpciddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE4NykKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfcmVuYW1lZChzZWxmKToKKyAgICAgICAgIyBBIGZpbGUgdGhhdCdzIGluIFNSQ19VUkkgd2l0aCBhIGRpZmZlcmVudCBuYW1lIHRvIHRoZSBkZXN0aW5hdGlvbiBmaWxlCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLXJlbmFtZWQnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWydmaWxlMSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE5MCkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfc3ViZGlyKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgaW4gU1JDX1VSSSBpbiBhIHN1YmRpcgorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly90ZXN0ZmlsZSJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZG9faW5zdGFsbF9hcHBlbmQoKSB7XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2RhdGFkaXJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1zdWJkaXJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1zdWJkaXInLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWyd0ZXN0ZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE4OSkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfc3JjX2dsb2Ioc2VsZik6CisgICAgICAgICMgQSBmaWxlIHRoYXQncyBpbiBTUkNfVVJJIGFzIGEgZ2xvYgorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly90ZXN0ZmlsZSJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZG9faW5zdGFsbF9hcHBlbmQoKSB7XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2RhdGFkaXJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1zcmMtZ2xvYmZpbGVcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1zcmMtZ2xvYmZpbGUnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWyd0ZXN0ZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE4MSkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfaW5zdF9nbG9iKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgaW4gZG9faW5zdGFsbCBhcyBhIGdsb2IKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCAnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1nbG9iZmlsZScsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LWdsb2JmaWxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTgyKQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9pbnN0X3RvZGlyX2dsb2Ioc2VsZik6CisgICAgICAgICMgQSBmaWxlIHRoYXQncyBpbiBkb19pbnN0YWxsIGFzIGEgZ2xvYiB3aXRoIGRlc3RpbmF0aW9uIGFzIGEgZGlyZWN0b3J5CisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtdG9kaXItZ2xvYmZpbGUnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWydzZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC10b2Rpci1nbG9iZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE4NSkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfcGF0Y2goc2VsZik6CisgICAgICAgICMgQSBmaWxlIHRoYXQncyBhZGRlZCBieSBhIHBhdGNoIGluIFNSQ19VUkkKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtzeXNjb25mZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtcGF0Y2hlZFxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy9ldGMvc2VsZnRlc3QtcmVwbGFjZW1lLXBhdGNoZWQnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWyd0ZXN0ZmlsZSddKQorICAgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdXQVJOSU5HOiAnKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdhZGQtZmlsZS5wYXRjaCcsIGxpbmUsICdVbmV4cGVjdGVkIHdhcm5pbmcgZm91bmQgaW4gb3V0cHV0OlxuJXMnICUgbGluZSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdQYXRjaCB3YXJuaW5nIG5vdCBmb3VuZCBpbiBvdXRwdXQ6XG4lcycgJSBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE4OCkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfc2NyaXB0KHNlbGYpOgorICAgICAgICAjIE5vdywgYSBmaWxlIHRoYXQncyBpbiBTUkNfVVJJIGJ1dCBpbnN0YWxsZWQgYnkgYSBzY3JpcHQgKHNvIG5vIG1lbnRpb24gaW4gZG9faW5zdGFsbCkKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtc2NyaXB0ZWRcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1zY3JpcHRlZCcsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ3Rlc3RmaWxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTgwKQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9pbnN0X2Z1bmMoc2VsZik6CisgICAgICAgICMgQSBmaWxlIHRoYXQncyBpbnN0YWxsZWQgZnJvbSBhIGZ1bmN0aW9uIGNhbGxlZCBieSBkb19pbnN0YWxsCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZnVuYycsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LWZ1bmMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExODYpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX3Bvc3RpbnN0YWxsKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgY3JlYXRlZCBieSBhIHBvc3RpbnN0YWxsIHNjcmlwdCAoYW5kIGV4cGxpY2l0bHkgbWVudGlvbmVkIGluIGl0KQorICAgICAgICAjIEZpcnN0IHRyeSB3aXRob3V0IHNwZWNpZnlpbmcgcmVjaXBlCisgICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGVfZmFpbCgnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtcG9zdGluc3QnLCBzZWxmLnRlc3RmaWxlLCBbJ0ZpbGUgL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtcG9zdGluc3QgbWF5IGJlIHdyaXR0ZW4gb3V0IGluIGEgcHJlL3Bvc3RpbnN0YWxsIHNjcmlwdCBvZiB0aGUgZm9sbG93aW5nIHJlY2lwZXM6JywgJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZSddKQorICAgICAgICAjIE5vdyBzcGVjaWZ5IHJlY2lwZQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly90ZXN0ZmlsZSJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZG9faW5zdGFsbF9hcHBlbmQoKSB7XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2RhdGFkaXJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1wb3N0aW5zdFxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLXBvc3RpbnN0Jywgc2VsZi50ZXN0ZmlsZSwgJy1yIHNlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnXSkKKworICAgIEB0ZXN0Y2FzZSgxMTc5KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9leHRsYXllcihzZWxmKToKKyAgICAgICAgIyBUcnkgY3JlYXRpbmcgYSBiYmFwcGVuZCBpbiBhIGxheWVyIHRoYXQncyBub3QgaW4gYmJsYXllcnMuY29uZiBhbmQgaGFzIGEgZGlmZmVyZW50IHN0cnVjdHVyZQorICAgICAgICBleHR0ZW1wbGF5ZXJkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAnZXh0bGF5ZXInKQorICAgICAgICBzZWxmLl9jcmVhdGVfdGVtcF9sYXllcihleHR0ZW1wbGF5ZXJkaXIsIEZhbHNlLCAnb2VzZWxmdGVzdGV4dGxheWVyJywgcmVjaXBlcGF0aHNwZWM9J21ldGFkYXRhL3JlY2lwZXMvcmVjaXBlcy0qLyonKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3JlY2lwZXRvb2wgYXBwZW5kZmlsZSAlcyAvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1vcmlnICVzJyAlIChleHR0ZW1wbGF5ZXJkaXIsIHNlbGYudGVzdGZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdUcmFjZWJhY2snLCByZXN1bHQub3V0cHV0KQorICAgICAgICBjcmVhdGVkZmlsZXMgPSBbXQorICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhleHR0ZW1wbGF5ZXJkaXIpOgorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgY3JlYXRlZGZpbGVzLmFwcGVuZChvcy5wYXRoLnJlbHBhdGgob3MucGF0aC5qb2luKHJvb3QsIGYpLCBleHR0ZW1wbGF5ZXJkaXIpKQorICAgICAgICBjcmVhdGVkZmlsZXMucmVtb3ZlKCdjb25mL2xheWVyLmNvbmYnKQorICAgICAgICBleHBlY3RlZGZpbGVzID0gWydtZXRhZGF0YS9yZWNpcGVzL3JlY2lwZXMtdGVzdC9zZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUvc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlLmJiYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnbWV0YWRhdGEvcmVjaXBlcy9yZWNpcGVzLXRlc3Qvc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlL3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZS9zZWxmdGVzdC1yZXBsYWNlbWUtb3JpZyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGNyZWF0ZWRmaWxlcyksIHNvcnRlZChleHBlY3RlZGZpbGVzKSkKKworICAgIEB0ZXN0Y2FzZSgxMTkyKQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV93aWxkY2FyZChzZWxmKToKKworICAgICAgICBkZWYgdHJ5X2FwcGVuZGZpbGVfd2Mob3B0aW9ucyk6CisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3JlY2lwZXRvb2wgYXBwZW5kZmlsZSAlcyAvZXRjL3Byb2ZpbGUgJXMgJXMnICUgKHNlbGYudGVtcGxheWVyZGlyLCBzZWxmLnRlc3RmaWxlLCBvcHRpb25zKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1RyYWNlYmFjaycsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICAgICBiYmFwcGVuZGZpbGUgPSBOb25lCisgICAgICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhzZWxmLnRlbXBsYXllcmRpcik6CisgICAgICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIGYuZW5kc3dpdGgoJy5iYmFwcGVuZCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgYmJhcHBlbmRmaWxlID0gZgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIG5vdCBiYmFwcGVuZGZpbGU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdObyBiYmFwcGVuZCBmaWxlIGNyZWF0ZWQnKQorICAgICAgICAgICAgcnVuQ21kKCdybSAtcmYgJXMvcmVjaXBlcy0qJyAlIHNlbGYudGVtcGxheWVyZGlyKQorICAgICAgICAgICAgcmV0dXJuIGJiYXBwZW5kZmlsZQorCisgICAgICAgICMgQ2hlY2sgd2l0aG91dCB3aWxkY2FyZCBvcHRpb24KKyAgICAgICAgcmVjaXBlZm4gPSBvcy5wYXRoLmJhc2VuYW1lKGdldF9iYl92YXIoJ0ZJTEUnLCAnYmFzZS1maWxlcycpKQorICAgICAgICBmaWxlbmFtZSA9IHRyeV9hcHBlbmRmaWxlX3djKCcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVuYW1lLCByZWNpcGVmbi5yZXBsYWNlKCcuYmInLCAnLmJiYXBwZW5kJykpCisgICAgICAgICMgTm93IGNoZWNrIHdpdGggd2lsZGNhcmQgb3B0aW9uCisgICAgICAgIGZpbGVuYW1lID0gdHJ5X2FwcGVuZGZpbGVfd2MoJy13JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlbmFtZSwgcmVjaXBlZm4uc3BsaXQoJ18nKVswXSArICdfJS5iYmFwcGVuZCcpCisKKyAgICBAdGVzdGNhc2UoMTE5MykKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2NyZWF0ZShzZWxmKToKKyAgICAgICAgIyBUcnkgYWRkaW5nIGEgcmVjaXBlCisgICAgICAgIHRlbXBzcmMgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAnc3JjdHJlZScpCisgICAgICAgIG9zLm1ha2VkaXJzKHRlbXBzcmMpCisgICAgICAgIHJlY2lwZWZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAnbG9ncm90YXRlXzMuOC43LmJiJykKKyAgICAgICAgc3JjdXJpID0gJ2h0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9sL28vbG9ncm90YXRlL2xvZ3JvdGF0ZS0zLjguNy50YXIuZ3onCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgncmVjaXBldG9vbCBjcmVhdGUgLW8gJXMgJXMgLXggJXMnICUgKHJlY2lwZWZpbGUsIHNyY3VyaSwgdGVtcHNyYykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShyZWNpcGVmaWxlKSkKKyAgICAgICAgY2hlY2t2YXJzID0ge30KKyAgICAgICAgY2hlY2t2YXJzWydMSUNFTlNFJ10gPSAnR1BMdjInCisgICAgICAgIGNoZWNrdmFyc1snTElDX0ZJTEVTX0NIS1NVTSddID0gJ2ZpbGU6Ly9DT1BZSU5HO21kNT0xODgxMDY2OWYxM2I4NzM0ODQ1OWU2MTFkMzFhYjc2MCcKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSAnaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL3JlbGVhc2VzL2wvby9sb2dyb3RhdGUvbG9ncm90YXRlLSR7UFZ9LnRhci5neicKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJW21kNXN1bV0nXSA9ICc5OWUwODUwM2VmMjRjM2UyZTNmZjc0Y2M1ZjNiZTIxMycKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJW3NoYTI1NnN1bV0nXSA9ICdmNmJhNjkxZjQwZTMwZTY0MGVmYTI3NTJjMWY5NDk5YTNmOTczODI1NzY2MDk5NGRlNzBhNDVmZTAwZDEyYjY0JworICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIFtdKQorCisgICAgQHRlc3RjYXNlKDExOTQpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9jcmVhdGVfZ2l0KHNlbGYpOgorICAgICAgICAjIEVuc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBkYXRhIGluIHNobGlicy9wa2dkYXRhCisgICAgICAgIGJpdGJha2UoJ2xpYnBuZyBwYW5nbyBsaWJ4MTEgbGlieGV4dCBqcGVnJykKKyAgICAgICAgIyBUcnkgYWRkaW5nIGEgcmVjaXBlCisgICAgICAgIHRlbXBzcmMgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAnc3JjdHJlZScpCisgICAgICAgIG9zLm1ha2VkaXJzKHRlbXBzcmMpCisgICAgICAgIHJlY2lwZWZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAnbGlibWF0Y2hib3guYmInKQorICAgICAgICBzcmN1cmkgPSAnZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGlibWF0Y2hib3gnCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgncmVjaXBldG9vbCBjcmVhdGUgLW8gJXMgJXMgLXggJXMnICUgKHJlY2lwZWZpbGUsIHNyY3VyaSwgdGVtcHNyYykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShyZWNpcGVmaWxlKSwgJ3JlY2lwZXRvb2wgZGlkIG5vdCBjcmVhdGUgcmVjaXBlIGZpbGU7IG91dHB1dDpcbiVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIGNoZWNrdmFycyA9IHt9CisgICAgICAgIGNoZWNrdmFyc1snTElDRU5TRSddID0gJ0xHUEx2Mi4xJworICAgICAgICBjaGVja3ZhcnNbJ0xJQ19GSUxFU19DSEtTVU0nXSA9ICdmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQnCisgICAgICAgIGNoZWNrdmFyc1snUyddID0gJyR7V09SS0RJUn0vZ2l0JworICAgICAgICBjaGVja3ZhcnNbJ1BWJ10gPSAnMS4wK2dpdCR7U1JDUFZ9JworICAgICAgICBjaGVja3ZhcnNbJ1NSQ19VUkknXSA9IHNyY3VyaQorICAgICAgICBjaGVja3ZhcnNbJ0RFUEVORFMnXSA9ICdsaWJwbmcgcGFuZ28gbGlieDExIGxpYnhleHQganBlZycKKyAgICAgICAgaW5oZXJpdHMgPSBbJ2F1dG90b29scycsICdwa2djb25maWcnXQorICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIGluaGVyaXRzKQorCisKK2NsYXNzIFJlY2lwZXRvb2xBcHBlbmRzcmNCYXNlKFJlY2lwZXRvb2xCYXNlKToKKyAgICBkZWYgX3RyeV9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGUoc2VsZiwgdGVzdHJlY2lwZSwgbmV3ZmlsZSwgZGVzdGZpbGUsIG9wdGlvbnMsIGV4cGVjdGVkbGluZXMsIGV4cGVjdGVkZmlsZXMpOgorICAgICAgICBjbWQgPSAncmVjaXBldG9vbCBhcHBlbmRzcmNmaWxlICVzICVzICVzICVzICVzJyAlIChvcHRpb25zLCBzZWxmLnRlbXBsYXllcmRpciwgdGVzdHJlY2lwZSwgbmV3ZmlsZSwgZGVzdGZpbGUpCisgICAgICAgIHJldHVybiBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRjbWQoY21kLCB0ZXN0cmVjaXBlLCBleHBlY3RlZGZpbGVzLCBleHBlY3RlZGxpbmVzKQorCisgICAgZGVmIF90cnlfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlcyhzZWxmLCB0ZXN0cmVjaXBlLCBuZXdmaWxlcywgZXhwZWN0ZWRsaW5lcz1Ob25lLCBleHBlY3RlZGZpbGVzPU5vbmUsIGRlc3RkaXI9Tm9uZSwgb3B0aW9ucz0nJyk6CisKKyAgICAgICAgaWYgZGVzdGRpcjoKKyAgICAgICAgICAgIG9wdGlvbnMgKz0gJyAtRCAlcycgJSBkZXN0ZGlyCisKKyAgICAgICAgaWYgZXhwZWN0ZWRmaWxlcyBpcyBOb25lOgorICAgICAgICAgICAgZXhwZWN0ZWRmaWxlcyA9IFtvcy5wYXRoLmJhc2VuYW1lKGYpIGZvciBmIGluIG5ld2ZpbGVzXQorCisgICAgICAgIGNtZCA9ICdyZWNpcGV0b29sIGFwcGVuZHNyY2ZpbGVzICVzICVzICVzICVzJyAlIChvcHRpb25zLCBzZWxmLnRlbXBsYXllcmRpciwgdGVzdHJlY2lwZSwgJyAnLmpvaW4obmV3ZmlsZXMpKQorICAgICAgICByZXR1cm4gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kY21kKGNtZCwgdGVzdHJlY2lwZSwgZXhwZWN0ZWRmaWxlcywgZXhwZWN0ZWRsaW5lcykKKworICAgIGRlZiBfdHJ5X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZV9mYWlsKHNlbGYsIHRlc3RyZWNpcGUsIG5ld2ZpbGUsIGRlc3RmaWxlLCBjaGVja2Vycm9yKToKKyAgICAgICAgY21kID0gJ3JlY2lwZXRvb2wgYXBwZW5kc3JjZmlsZSAlcyAlcyAlcyAlcycgJSAoc2VsZi50ZW1wbGF5ZXJkaXIsIHRlc3RyZWNpcGUsIG5ld2ZpbGUsIGRlc3RmaWxlIG9yICcnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoY21kLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0LnN0YXR1cywgMCwgJ0NvbW1hbmQgIiVzIiBzaG91bGQgaGF2ZSBmYWlsZWQgYnV0IGRpZG5cJ3QnICUgY21kKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdUcmFjZWJhY2snLCByZXN1bHQub3V0cHV0KQorICAgICAgICBmb3IgZXJyb3JzdHIgaW4gY2hlY2tlcnJvcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXJyb3JzdHIsIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9nZXRfZmlyc3RfZmlsZV91cmkocmVjaXBlKToKKyAgICAgICAgJycnUmV0dXJuIHRoZSBmaXJzdCBmaWxlOi8vIGluIFNSQ19VUkkgZm9yIHRoZSBzcGVjaWZpZWQgcmVjaXBlLicnJworICAgICAgICBzcmNfdXJpID0gZ2V0X2JiX3ZhcignU1JDX1VSSScsIHJlY2lwZSkuc3BsaXQoKQorICAgICAgICBmb3IgdXJpIGluIHNyY191cmk6CisgICAgICAgICAgICBwID0gdXJscGFyc2UudXJscGFyc2UodXJpKQorICAgICAgICAgICAgaWYgcC5zY2hlbWUgPT0gJ2ZpbGUnOgorICAgICAgICAgICAgICAgIHJldHVybiBwLm5ldGxvYyArIHAucGF0aAorCisgICAgZGVmIF90ZXN0X2FwcGVuZHNyY2ZpbGUoc2VsZiwgdGVzdHJlY2lwZSwgZmlsZW5hbWU9Tm9uZSwgZGVzdGRpcj1Ob25lLCBoYXNfc3JjX3VyaT1UcnVlLCBzcmNkaXI9Tm9uZSwgbmV3ZmlsZT1Ob25lLCBvcHRpb25zPScnKToKKyAgICAgICAgaWYgbmV3ZmlsZSBpcyBOb25lOgorICAgICAgICAgICAgbmV3ZmlsZSA9IHNlbGYudGVzdGZpbGUKKworICAgICAgICBpZiBzcmNkaXI6CisgICAgICAgICAgICBpZiBkZXN0ZGlyOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkX3N1YmRpciA9IG9zLnBhdGguam9pbihzcmNkaXIsIGRlc3RkaXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkX3N1YmRpciA9IHNyY2RpcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3B0aW9ucyArPSAiIC1XIgorICAgICAgICAgICAgZXhwZWN0ZWRfc3ViZGlyID0gZGVzdGRpcgorCisgICAgICAgIGlmIGZpbGVuYW1lOgorICAgICAgICAgICAgaWYgZGVzdGRpcjoKKyAgICAgICAgICAgICAgICBkZXN0cGF0aCA9IG9zLnBhdGguam9pbihkZXN0ZGlyLCBmaWxlbmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVzdHBhdGggPSBmaWxlbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKG5ld2ZpbGUpCisgICAgICAgICAgICBpZiBkZXN0ZGlyOgorICAgICAgICAgICAgICAgIGRlc3RwYXRoID0gZGVzdGRpciArIG9zLnNlcAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkZXN0cGF0aCA9ICcuJyArIG9zLnNlcAorCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgaWYgaGFzX3NyY191cmk6CisgICAgICAgICAgICB1cmkgPSAnZmlsZTovLyVzJyAlIGZpbGVuYW1lCisgICAgICAgICAgICBpZiBleHBlY3RlZF9zdWJkaXI6CisgICAgICAgICAgICAgICAgdXJpICs9ICc7c3ViZGlyPSVzJyAlIGV4cGVjdGVkX3N1YmRpcgorICAgICAgICAgICAgZXhwZWN0ZWRsaW5lc1swOjBdID0gWydTUkNfVVJJICs9ICIlcyJcbicgJSB1cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKworICAgICAgICByZXR1cm4gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZSh0ZXN0cmVjaXBlLCBuZXdmaWxlLCBkZXN0cGF0aCwgb3B0aW9ucywgZXhwZWN0ZWRsaW5lcywgW2ZpbGVuYW1lXSkKKworICAgIGRlZiBfdGVzdF9hcHBlbmRzcmNmaWxlcyhzZWxmLCB0ZXN0cmVjaXBlLCBuZXdmaWxlcywgZXhwZWN0ZWRmaWxlcz1Ob25lLCBkZXN0ZGlyPU5vbmUsIG9wdGlvbnM9JycpOgorICAgICAgICBpZiBleHBlY3RlZGZpbGVzIGlzIE5vbmU6CisgICAgICAgICAgICBleHBlY3RlZGZpbGVzID0gW29zLnBhdGguYmFzZW5hbWUobikgZm9yIG4gaW4gbmV3ZmlsZXNdCisKKyAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZXModGVzdHJlY2lwZSwgbmV3ZmlsZXMsIGV4cGVjdGVkZmlsZXM9ZXhwZWN0ZWRmaWxlcywgZGVzdGRpcj1kZXN0ZGlyLCBvcHRpb25zPW9wdGlvbnMpCisKKyAgICAgICAgc3JjX3VyaSA9IGdldF9iYl92YXIoJ1NSQ19VUkknLCB0ZXN0cmVjaXBlKS5zcGxpdCgpCisgICAgICAgIGZvciBmIGluIGV4cGVjdGVkZmlsZXM6CisgICAgICAgICAgICBpZiBkZXN0ZGlyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ZpbGU6Ly8lcztzdWJkaXI9JXMnICUgKGYsIGRlc3RkaXIpLCBzcmNfdXJpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdmaWxlOi8vJXMnICUgZiwgc3JjX3VyaSkKKworICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIGJiYXBwZW5kZmlsZSA9IHNlbGYuX2NoZWNrX2JiYXBwZW5kKHRlc3RyZWNpcGUsIHJlY2lwZWZpbGUsIHNlbGYudGVtcGxheWVyZGlyKQorICAgICAgICBmaWxlc2RpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoYmJhcHBlbmRmaWxlKSwgdGVzdHJlY2lwZSkKKyAgICAgICAgZmlsZXNleHRyYXBhdGhzID0gZ2V0X2JiX3ZhcignRklMRVNFWFRSQVBBVEhTJywgdGVzdHJlY2lwZSkuc3BsaXQoJzonKQorICAgICAgICBzZWxmLmFzc2VydEluKGZpbGVzZGlyLCBmaWxlc2V4dHJhcGF0aHMpCisKKworY2xhc3MgUmVjaXBldG9vbEFwcGVuZHNyY1Rlc3RzKFJlY2lwZXRvb2xBcHBlbmRzcmNCYXNlKToKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSgnYmFzZS1maWxlcycsICdhLWZpbGUnKQorCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlX2Jhc2ljX3dpbGRjYXJkKHNlbGYpOgorICAgICAgICB0ZXN0cmVjaXBlID0gJ2Jhc2UtZmlsZXMnCisgICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSh0ZXN0cmVjaXBlLCAnYS1maWxlJywgb3B0aW9ucz0nLXcnKQorICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIGJiYXBwZW5kZmlsZSA9IHNlbGYuX2NoZWNrX2JiYXBwZW5kKHRlc3RyZWNpcGUsIHJlY2lwZWZpbGUsIHNlbGYudGVtcGxheWVyZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYmFzZW5hbWUoYmJhcHBlbmRmaWxlKSwgJyVzXyUlLmJiYXBwZW5kJyAlIHRlc3RyZWNpcGUpCisKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfc3ViZGlyX2Jhc2ljKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2FwcGVuZHNyY2ZpbGUoJ2Jhc2UtZmlsZXMnLCAnYS1maWxlJywgJ3RtcCcpCisKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfc3ViZGlyX2Jhc2ljX2RpcmRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSgnYmFzZS1maWxlcycsIGRlc3RkaXI9J3RtcCcpCisKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfc3JjZGlyX2Jhc2ljKHNlbGYpOgorICAgICAgICB0ZXN0cmVjaXBlID0gJ2Jhc2gnCisgICAgICAgIHNyY2RpciA9IGdldF9iYl92YXIoJ1MnLCB0ZXN0cmVjaXBlKQorICAgICAgICB3b3JrZGlyID0gZ2V0X2JiX3ZhcignV09SS0RJUicsIHRlc3RyZWNpcGUpCisgICAgICAgIHN1YmRpciA9IG9zLnBhdGgucmVscGF0aChzcmNkaXIsIHdvcmtkaXIpCisgICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSh0ZXN0cmVjaXBlLCAnYS1maWxlJywgc3JjZGlyPXN1YmRpcikKKworICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZV9leGlzdGluZ19pbl9zcmNfdXJpKHNlbGYpOgorICAgICAgICB0ZXN0cmVjaXBlID0gJ2Jhc2UtZmlsZXMnCisgICAgICAgIGZpbGVwYXRoID0gc2VsZi5fZ2V0X2ZpcnN0X2ZpbGVfdXJpKHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlcGF0aCwgJ1VuYWJsZSB0byB0ZXN0LCBubyBmaWxlOi8vIHVyaSBmb3VuZCBpbiBTUkNfVVJJIGZvciAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLl90ZXN0X2FwcGVuZHNyY2ZpbGUodGVzdHJlY2lwZSwgZmlsZXBhdGgsIGhhc19zcmNfdXJpPUZhbHNlKQorCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlX2V4aXN0aW5nX2luX3NyY191cmlfZGlmZl9wYXJhbXMoc2VsZik6CisgICAgICAgIHRlc3RyZWNpcGUgPSAnYmFzZS1maWxlcycKKyAgICAgICAgc3ViZGlyID0gJ3RtcCcKKyAgICAgICAgZmlsZXBhdGggPSBzZWxmLl9nZXRfZmlyc3RfZmlsZV91cmkodGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVwYXRoLCAnVW5hYmxlIHRvIHRlc3QsIG5vIGZpbGU6Ly8gdXJpIGZvdW5kIGluIFNSQ19VUkkgZm9yICVzJyAlIHRlc3RyZWNpcGUpCisKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5fdGVzdF9hcHBlbmRzcmNmaWxlKHRlc3RyZWNpcGUsIGZpbGVwYXRoLCBzdWJkaXIsIGhhc19zcmNfdXJpPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCd3aXRoIGRpZmZlcmVudCBwYXJhbWV0ZXJzJyBpbiBsIGZvciBsIGluIG91dHB1dCkpCisKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfcmVwbGFjZV9maWxlX3NyY2RpcihzZWxmKToKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdiYXNoJworICAgICAgICBmaWxlcGF0aCA9ICdNYWtlZmlsZS5pbicKKyAgICAgICAgc3JjZGlyID0gZ2V0X2JiX3ZhcignUycsIHRlc3RyZWNpcGUpCisgICAgICAgIHdvcmtkaXIgPSBnZXRfYmJfdmFyKCdXT1JLRElSJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc3ViZGlyID0gb3MucGF0aC5yZWxwYXRoKHNyY2Rpciwgd29ya2RpcikKKworICAgICAgICBzZWxmLl90ZXN0X2FwcGVuZHNyY2ZpbGUodGVzdHJlY2lwZSwgZmlsZXBhdGgsIHNyY2Rpcj1zdWJkaXIpCisgICAgICAgIGJpdGJha2UoJyVzOmRvX3VucGFjaycgJSB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZW4oc2VsZi50ZXN0ZmlsZSwgJ3InKS5yZWFkKCksIG9wZW4ob3MucGF0aC5qb2luKHNyY2RpciwgZmlsZXBhdGgpLCAncicpLnJlYWQoKSkKKworICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZXNfYmFzaWMoc2VsZiwgZGVzdGRpcj1Ob25lKToKKyAgICAgICAgbmV3ZmlsZXMgPSBbc2VsZi50ZXN0ZmlsZV0KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgNSk6CisgICAgICAgICAgICB0ZXN0ZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICd0ZXN0ZmlsZSVkJyAlIGkpCisgICAgICAgICAgICB3aXRoIG9wZW4odGVzdGZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdUZXN0IGZpbGUgJWRcbicgJSBpKQorICAgICAgICAgICAgbmV3ZmlsZXMuYXBwZW5kKHRlc3RmaWxlKQorICAgICAgICBzZWxmLl90ZXN0X2FwcGVuZHNyY2ZpbGVzKCdnY2MnLCBuZXdmaWxlcywgZGVzdGRpcj1kZXN0ZGlyLCBvcHRpb25zPSctVycpCisKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVzX2Jhc2ljX3N1YmRpcihzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZXNfYmFzaWMoZGVzdGRpcj0ndGVzdGRpcicpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvc3N0YXRlLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3NzdGF0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTg5NzI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3NzdGF0ZS5weQpAQCAtMCwwICsxLDUzIEBACitpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBnZXRfdGVzdF9sYXllcgorCisKK2NsYXNzIFNTdGF0ZUJhc2Uob2VTZWxmVGVzdCk6CisKKyAgICBkZWYgc2V0VXBMb2NhbChzZWxmKToKKyAgICAgICAgc2VsZi50ZW1wX3NzdGF0ZV9sb2NhdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5zc3RhdGVfcGF0aCA9IGdldF9iYl92YXIoJ1NTVEFURV9ESVInKQorICAgICAgICBzZWxmLmRpc3RybyA9IGdldF9iYl92YXIoJ05BVElWRUxTQlNUUklORycpCisgICAgICAgIHNlbGYuZGlzdHJvX3NwZWNpZmljX3NzdGF0ZSA9IG9zLnBhdGguam9pbihzZWxmLnNzdGF0ZV9wYXRoLCBzZWxmLmRpc3RybykKKworICAgICMgQ3JlYXRlcyBhIHNwZWNpYWwgc3N0YXRlIGNvbmZpZ3VyYXRpb24gd2l0aCB0aGUgb3B0aW9uIHRvIGFkZCBzc3RhdGUgbWlycm9ycworICAgIGRlZiBjb25maWdfc3N0YXRlKHNlbGYsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPUZhbHNlLCBhZGRfbG9jYWxfbWlycm9ycz1bXSk6CisgICAgICAgIHNlbGYudGVtcF9zc3RhdGVfbG9jYXRpb24gPSB0ZW1wX3NzdGF0ZV9sb2NhdGlvbgorCisgICAgICAgIGlmIHNlbGYudGVtcF9zc3RhdGVfbG9jYXRpb246CisgICAgICAgICAgICB0ZW1wX3NzdGF0ZV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICJ0ZW1wX3NzdGF0ZV8lcyIgJSBkYXRldGltZS5kYXRldGltZS5ub3coKS5zdHJmdGltZSgnJVklbSVkJUglTSVTJykpCisgICAgICAgICAgICBjb25maWdfdGVtcF9zc3RhdGUgPSAiU1NUQVRFX0RJUiA9IFwiJXNcIiIgJSB0ZW1wX3NzdGF0ZV9wYXRoCisgICAgICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoY29uZmlnX3RlbXBfc3N0YXRlKQorICAgICAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wX3NzdGF0ZV9wYXRoKQorICAgICAgICBzZWxmLnNzdGF0ZV9wYXRoID0gZ2V0X2JiX3ZhcignU1NUQVRFX0RJUicpCisgICAgICAgIHNlbGYuZGlzdHJvID0gZ2V0X2JiX3ZhcignTkFUSVZFTFNCU1RSSU5HJykKKyAgICAgICAgc2VsZi5kaXN0cm9fc3BlY2lmaWNfc3N0YXRlID0gb3MucGF0aC5qb2luKHNlbGYuc3N0YXRlX3BhdGgsIHNlbGYuZGlzdHJvKQorCisgICAgICAgIGlmIGFkZF9sb2NhbF9taXJyb3JzOgorICAgICAgICAgICAgY29uZmlnX3NldF9zc3RhdGVfaWZfbm90X3NldCA9ICdTU1RBVEVfTUlSUk9SUyA/PSAiIicKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhjb25maWdfc2V0X3NzdGF0ZV9pZl9ub3Rfc2V0KQorICAgICAgICAgICAgZm9yIGxvY2FsX21pcnJvciBpbiBhZGRfbG9jYWxfbWlycm9yczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguam9pbihsb2NhbF9taXJyb3IpID09IG9zLnBhdGguam9pbihzZWxmLnNzdGF0ZV9wYXRoKSwgbXNnPSdDYW5ub3QgYWRkIHRoZSBjdXJyZW50IHNzdGF0ZSBwYXRoIGFzIGEgc3N0YXRlIG1pcnJvcicpCisgICAgICAgICAgICAgICAgY29uZmlnX3NzdGF0ZV9taXJyb3IgPSAiU1NUQVRFX01JUlJPUlMgKz0gXCJmaWxlOi8vLiogZmlsZTovLy8lcy9QQVRIXCIiICUgbG9jYWxfbWlycm9yCisgICAgICAgICAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGNvbmZpZ19zc3RhdGVfbWlycm9yKQorCisgICAgIyBSZXR1cm5zIGEgbGlzdCBjb250YWluaW5nIHNzdGF0ZSBmaWxlcworICAgIGRlZiBzZWFyY2hfc3N0YXRlKHNlbGYsIGZpbGVuYW1lX3JlZ2V4LCBkaXN0cm9fc3BlY2lmaWM9VHJ1ZSwgZGlzdHJvX25vbnNwZWNpZmljPVRydWUpOgorICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzZWxmLnNzdGF0ZV9wYXRoKToKKyAgICAgICAgICAgIGlmIGRpc3Ryb19zcGVjaWZpYyBhbmQgcmUuc2VhcmNoKCIlcy9bYS16MC05XXsyfSQiICUgc2VsZi5kaXN0cm8sIHJvb3QpOgorICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICBpZiByZS5zZWFyY2goZmlsZW5hbWVfcmVnZXgsIGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChmKQorICAgICAgICAgICAgaWYgZGlzdHJvX25vbnNwZWNpZmljIGFuZCByZS5zZWFyY2goIiVzL1thLXowLTldezJ9JCIgJSBzZWxmLnNzdGF0ZV9wYXRoLCByb290KToKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKGZpbGVuYW1lX3JlZ2V4LCBmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZikKKyAgICAgICAgcmV0dXJuIHJlc3VsdApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3NzdGF0ZXRlc3RzLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3NzdGF0ZXRlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MDZiMjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvc3N0YXRldGVzdHMucHkKQEAgLTAsMCArMSwzMDggQEAKK2ltcG9ydCBkYXRldGltZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIGdldF90ZXN0X2xheWVyCitmcm9tIG9lcWEuc2VsZnRlc3Quc3N0YXRlIGltcG9ydCBTU3RhdGVCYXNlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKKworY2xhc3MgU1N0YXRlVGVzdHMoU1N0YXRlQmFzZSk6CisKKyAgICAjIFRlc3Qgc3N0YXRlIGZpbGVzIGNyZWF0aW9uIGFuZCB0aGVpciBsb2NhdGlvbgorICAgIGRlZiBydW5fdGVzdF9zc3RhdGVfY3JlYXRpb24oc2VsZiwgdGFyZ2V0cywgZGlzdHJvX3NwZWNpZmljPVRydWUsIGRpc3Ryb19ub25zcGVjaWZpYz1UcnVlLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlLCBzaG91bGRfcGFzcz1UcnVlKToKKyAgICAgICAgc2VsZi5jb25maWdfc3N0YXRlKHRlbXBfc3N0YXRlX2xvY2F0aW9uKQorCisgICAgICAgIGlmICBzZWxmLnRlbXBfc3N0YXRlX2xvY2F0aW9uOgorICAgICAgICAgICAgYml0YmFrZShbJy1jY2xlYW4nXSArIHRhcmdldHMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiaXRiYWtlKFsnLWNjbGVhbnNzdGF0ZSddICsgdGFyZ2V0cykKKworICAgICAgICBiaXRiYWtlKHRhcmdldHMpCisgICAgICAgIGZpbGVfdHJhY2tlciA9IHNlbGYuc2VhcmNoX3NzdGF0ZSgnfCcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSksIGRpc3Ryb19zcGVjaWZpYywgZGlzdHJvX25vbnNwZWNpZmljKQorICAgICAgICBpZiBzaG91bGRfcGFzczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlX3RyYWNrZXIgLCBtc2c9IkNvdWxkIG5vdCBmaW5kIHNzdGF0ZSBmaWxlcyBmb3I6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGZpbGVfdHJhY2tlciAsIG1zZz0iRm91bmQgc3N0YXRlIGZpbGVzIGluIHRoZSB3cm9uZyBwbGFjZSBmb3I6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSkpCisKKyAgICBAdGVzdGNhc2UoOTc1KQorICAgIGRlZiB0ZXN0X3NzdGF0ZV9jcmVhdGlvbl9kaXN0cm9fc3BlY2lmaWNfcGFzcyhzZWxmKToKKyAgICAgICAgdGFyZ2V0YXJjaCA9IGdldF9iYl92YXIoJ1RVTkVfQVJDSCcpCisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX2NyZWF0aW9uKFsnYmludXRpbHMtY3Jvc3MtJysgdGFyZ2V0YXJjaCwgJ2JpbnV0aWxzLW5hdGl2ZSddLCBkaXN0cm9fc3BlY2lmaWM9VHJ1ZSwgZGlzdHJvX25vbnNwZWNpZmljPUZhbHNlLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKQorCisgICAgQHRlc3RjYXNlKDk3NSkKKyAgICBkZWYgdGVzdF9zc3RhdGVfY3JlYXRpb25fZGlzdHJvX3NwZWNpZmljX2ZhaWwoc2VsZik6CisgICAgICAgIHRhcmdldGFyY2ggPSBnZXRfYmJfdmFyKCdUVU5FX0FSQ0gnKQorICAgICAgICBzZWxmLnJ1bl90ZXN0X3NzdGF0ZV9jcmVhdGlvbihbJ2JpbnV0aWxzLWNyb3NzLScrIHRhcmdldGFyY2gsICdiaW51dGlscy1uYXRpdmUnXSwgZGlzdHJvX3NwZWNpZmljPUZhbHNlLCBkaXN0cm9fbm9uc3BlY2lmaWM9VHJ1ZSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSwgc2hvdWxkX3Bhc3M9RmFsc2UpCisKKyAgICBAdGVzdGNhc2UoOTc2KQorICAgIGRlZiB0ZXN0X3NzdGF0ZV9jcmVhdGlvbl9kaXN0cm9fbm9uc3BlY2lmaWNfcGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfY3JlYXRpb24oWydnbGliYy1pbml0aWFsJ10sIGRpc3Ryb19zcGVjaWZpYz1GYWxzZSwgZGlzdHJvX25vbnNwZWNpZmljPVRydWUsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUpCisKKyAgICBAdGVzdGNhc2UoOTc2KQorICAgIGRlZiB0ZXN0X3NzdGF0ZV9jcmVhdGlvbl9kaXN0cm9fbm9uc3BlY2lmaWNfZmFpbChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfY3JlYXRpb24oWydnbGliYy1pbml0aWFsJ10sIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9RmFsc2UsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUsIHNob3VsZF9wYXNzPUZhbHNlKQorCisKKyAgICAjIFRlc3QgdGhlIHNzdGF0ZSBmaWxlcyBkZWxldGlvbiBwYXJ0IG9mIHRoZSBkb19jbGVhbnNzdGF0ZSB0YXNrCisgICAgZGVmIHJ1bl90ZXN0X2NsZWFuc3N0YXRlX3Rhc2soc2VsZiwgdGFyZ2V0cywgZGlzdHJvX3NwZWNpZmljPVRydWUsIGRpc3Ryb19ub25zcGVjaWZpYz1UcnVlLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKToKKyAgICAgICAgc2VsZi5jb25maWdfc3N0YXRlKHRlbXBfc3N0YXRlX2xvY2F0aW9uKQorCisgICAgICAgIGJpdGJha2UoWyctY2NsZWFuc3N0YXRlJ10gKyB0YXJnZXRzKQorCisgICAgICAgIGJpdGJha2UodGFyZ2V0cykKKyAgICAgICAgdGd6X2NyZWF0ZWQgPSBzZWxmLnNlYXJjaF9zc3RhdGUoJ3wnLmpvaW4obWFwKHN0ciwgW3MgKyAnLio/XC50Z3okJyBmb3IgcyBpbiB0YXJnZXRzXSkpLCBkaXN0cm9fc3BlY2lmaWMsIGRpc3Ryb19ub25zcGVjaWZpYykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRnel9jcmVhdGVkLCBtc2c9IkNvdWxkIG5vdCBmaW5kIHNzdGF0ZSAudGd6IGZpbGVzIGZvcjogJXMiICUgJywgJy5qb2luKG1hcChzdHIsIHRhcmdldHMpKSkKKworICAgICAgICBzaWdpbmZvX2NyZWF0ZWQgPSBzZWxmLnNlYXJjaF9zc3RhdGUoJ3wnLmpvaW4obWFwKHN0ciwgW3MgKyAnLio/XC5zaWdpbmZvJCcgZm9yIHMgaW4gdGFyZ2V0c10pKSwgZGlzdHJvX3NwZWNpZmljLCBkaXN0cm9fbm9uc3BlY2lmaWMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzaWdpbmZvX2NyZWF0ZWQsIG1zZz0iQ291bGQgbm90IGZpbmQgc3N0YXRlIC5zaWdpbmZvIGZpbGVzIGZvcjogJXMiICUgJywgJy5qb2luKG1hcChzdHIsIHRhcmdldHMpKSkKKworICAgICAgICBiaXRiYWtlKFsnLWNjbGVhbnNzdGF0ZSddICsgdGFyZ2V0cykKKyAgICAgICAgdGd6X3JlbW92ZWQgPSBzZWxmLnNlYXJjaF9zc3RhdGUoJ3wnLmpvaW4obWFwKHN0ciwgW3MgKyAnLio/XC50Z3okJyBmb3IgcyBpbiB0YXJnZXRzXSkpLCBkaXN0cm9fc3BlY2lmaWMsIGRpc3Ryb19ub25zcGVjaWZpYykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0Z3pfcmVtb3ZlZCwgbXNnPSJkb19jbGVhbnNzdGF0ZSBkaWRuJ3QgcmVtb3ZlIC50Z3ogc3N0YXRlIGZpbGVzIGZvcjogJXMiICUgJywgJy5qb2luKG1hcChzdHIsIHRhcmdldHMpKSkKKworICAgIEB0ZXN0Y2FzZSg5NzcpCisgICAgZGVmIHRlc3RfY2xlYW5zc3RhdGVfdGFza19kaXN0cm9fc3BlY2lmaWNfbm9uc3BlY2lmaWMoc2VsZik6CisgICAgICAgIHRhcmdldGFyY2ggPSBnZXRfYmJfdmFyKCdUVU5FX0FSQ0gnKQorICAgICAgICBzZWxmLnJ1bl90ZXN0X2NsZWFuc3N0YXRlX3Rhc2soWydiaW51dGlscy1jcm9zcy0nICsgdGFyZ2V0YXJjaCwgJ2JpbnV0aWxzLW5hdGl2ZScsICdnbGliYy1pbml0aWFsJ10sIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9VHJ1ZSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSkKKworICAgIEB0ZXN0Y2FzZSg5NzcpCisgICAgZGVmIHRlc3RfY2xlYW5zc3RhdGVfdGFza19kaXN0cm9fbm9uc3BlY2lmaWMoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfY2xlYW5zc3RhdGVfdGFzayhbJ2dsaWJjLWluaXRpYWwnXSwgZGlzdHJvX3NwZWNpZmljPUZhbHNlLCBkaXN0cm9fbm9uc3BlY2lmaWM9VHJ1ZSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSkKKworICAgIEB0ZXN0Y2FzZSg5NzcpCisgICAgZGVmIHRlc3RfY2xlYW5zc3RhdGVfdGFza19kaXN0cm9fc3BlY2lmaWMoc2VsZik6CisgICAgICAgIHRhcmdldGFyY2ggPSBnZXRfYmJfdmFyKCdUVU5FX0FSQ0gnKQorICAgICAgICBzZWxmLnJ1bl90ZXN0X2NsZWFuc3N0YXRlX3Rhc2soWydiaW51dGlscy1jcm9zcy0nKyB0YXJnZXRhcmNoLCAnYmludXRpbHMtbmF0aXZlJywgJ2dsaWJjLWluaXRpYWwnXSwgZGlzdHJvX3NwZWNpZmljPVRydWUsIGRpc3Ryb19ub25zcGVjaWZpYz1GYWxzZSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSkKKworCisgICAgIyBUZXN0IHJlYnVpbGRpbmcgb2YgZGlzdHJvLXNwZWNpZmljIHNzdGF0ZSBmaWxlcworICAgIGRlZiBydW5fdGVzdF9yZWJ1aWxkX2Rpc3Ryb19zcGVjaWZpY19zc3RhdGUoc2VsZiwgdGFyZ2V0cywgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSk6CisgICAgICAgIHNlbGYuY29uZmlnX3NzdGF0ZSh0ZW1wX3NzdGF0ZV9sb2NhdGlvbikKKworICAgICAgICBiaXRiYWtlKFsnLWNjbGVhbnNzdGF0ZSddICsgdGFyZ2V0cykKKworICAgICAgICBiaXRiYWtlKHRhcmdldHMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNlYXJjaF9zc3RhdGUoJ3wnLmpvaW4obWFwKHN0ciwgW3MgKyAnLio/XC50Z3okJyBmb3IgcyBpbiB0YXJnZXRzXSkpLCBkaXN0cm9fc3BlY2lmaWM9RmFsc2UsIGRpc3Ryb19ub25zcGVjaWZpYz1UcnVlKSA9PSBbXSwgbXNnPSJGb3VuZCBkaXN0cm8gbm9uLXNwZWNpZmljIHNzdGF0ZSBmb3I6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSkpCisgICAgICAgIGZpbGVfdHJhY2tlcl8xID0gc2VsZi5zZWFyY2hfc3N0YXRlKCd8Jy5qb2luKG1hcChzdHIsIFtzICsgJy4qP1wudGd6JCcgZm9yIHMgaW4gdGFyZ2V0c10pKSwgZGlzdHJvX3NwZWNpZmljPVRydWUsIGRpc3Ryb19ub25zcGVjaWZpYz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihmaWxlX3RyYWNrZXJfMSkgPj0gbGVuKHRhcmdldHMpLCBtc2cgPSAiTm90IGFsbCBzc3RhdGUgZmlsZXMgd2FyZSBjcmVhdGVkIGZvcjogJXMiICUgJywgJy5qb2luKG1hcChzdHIsIHRhcmdldHMpKSkKKworICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYuZGlzdHJvX3NwZWNpZmljX3NzdGF0ZSArICJfb2xkIikKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNlbGYuZGlzdHJvX3NwZWNpZmljX3NzdGF0ZSwgc2VsZi5kaXN0cm9fc3BlY2lmaWNfc3N0YXRlICsgIl9vbGQiKQorICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZGlzdHJvX3NwZWNpZmljX3NzdGF0ZSkKKworICAgICAgICBiaXRiYWtlKFsnLWNjbGVhbiddICsgdGFyZ2V0cykKKyAgICAgICAgYml0YmFrZSh0YXJnZXRzKQorICAgICAgICBmaWxlX3RyYWNrZXJfMiA9IHNlbGYuc2VhcmNoX3NzdGF0ZSgnfCcuam9pbihtYXAoc3RyLCBbcyArICcuKj9cLnRneiQnIGZvciBzIGluIHRhcmdldHNdKSksIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZmlsZV90cmFja2VyXzIpID49IGxlbih0YXJnZXRzKSwgbXNnID0gIk5vdCBhbGwgc3N0YXRlIGZpbGVzIHdhcmUgY3JlYXRlZCBmb3I6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSkpCisKKyAgICAgICAgbm90X3JlY3JlYXRlZCA9IFt4IGZvciB4IGluIGZpbGVfdHJhY2tlcl8xIGlmIHggbm90IGluIGZpbGVfdHJhY2tlcl8yXQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90X3JlY3JlYXRlZCA9PSBbXSwgbXNnPSJUaGUgZm9sbG93aW5nIHNzdGF0ZSBmaWxlcyB3YXJlIG5vdCByZWNyZWF0ZWQ6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCBub3RfcmVjcmVhdGVkKSkpCisKKyAgICAgICAgY3JlYXRlZF9vbmNlID0gW3ggZm9yIHggaW4gZmlsZV90cmFja2VyXzIgaWYgeCBub3QgaW4gZmlsZV90cmFja2VyXzFdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmVhdGVkX29uY2UgPT0gW10sIG1zZz0iVGhlIGZvbGxvd2luZyBzc3RhdGUgZmlsZXMgd2FyZSBjcmVhdGVkIG9ubHkgaW4gdGhlIHNlY29uZCBydW46ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCBjcmVhdGVkX29uY2UpKSkKKworICAgIEB0ZXN0Y2FzZSgxNzUpCisgICAgZGVmIHRlc3RfcmVidWlsZF9kaXN0cm9fc3BlY2lmaWNfc3N0YXRlX2Nyb3NzX25hdGl2ZV90YXJnZXRzKHNlbGYpOgorICAgICAgICB0YXJnZXRhcmNoID0gZ2V0X2JiX3ZhcignVFVORV9BUkNIJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9yZWJ1aWxkX2Rpc3Ryb19zcGVjaWZpY19zc3RhdGUoWydiaW51dGlscy1jcm9zcy0nICsgdGFyZ2V0YXJjaCwgJ2JpbnV0aWxzLW5hdGl2ZSddLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKQorCisgICAgQHRlc3RjYXNlKDE3NSkKKyAgICBkZWYgdGVzdF9yZWJ1aWxkX2Rpc3Ryb19zcGVjaWZpY19zc3RhdGVfY3Jvc3NfdGFyZ2V0KHNlbGYpOgorICAgICAgICB0YXJnZXRhcmNoID0gZ2V0X2JiX3ZhcignVFVORV9BUkNIJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9yZWJ1aWxkX2Rpc3Ryb19zcGVjaWZpY19zc3RhdGUoWydiaW51dGlscy1jcm9zcy0nICsgdGFyZ2V0YXJjaF0sIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUpCisKKyAgICBAdGVzdGNhc2UoMTc1KQorICAgIGRlZiB0ZXN0X3JlYnVpbGRfZGlzdHJvX3NwZWNpZmljX3NzdGF0ZV9uYXRpdmVfdGFyZ2V0KHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3JlYnVpbGRfZGlzdHJvX3NwZWNpZmljX3NzdGF0ZShbJ2JpbnV0aWxzLW5hdGl2ZSddLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKQorCisKKyAgICAjIFRlc3QgdGhlIHNzdGF0ZS1jYWNoZS1tYW5hZ2VtZW50IHNjcmlwdC4gRWFjaCBlbGVtZW50IGluIHRoZSBnbG9iYWxfY29uZmlnIGxpc3QgaXMgdXNlZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgaW4gdGhlIHRhcmdldF9jb25maWcgbGlzdAorICAgICMgZ2xvYmFsX2NvbmZpZyBlbGVtZW50cyBhcmUgZXhwZWN0ZWQgdG8gbm90IGdlbmVyYXRlIGFueSBzc3RhdGUgZmlsZXMgdGhhdCB3b3VsZCBiZSByZW1vdmVkIGJ5IHNzdGF0ZS1jYWNoZS1tYW5hZ2VtZW50LnNoIChzdWNoIGFzIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBNQUNISU5FKQorICAgIGRlZiBydW5fdGVzdF9zc3RhdGVfY2FjaGVfbWFuYWdlbWVudF9zY3JpcHQoc2VsZiwgdGFyZ2V0LCBnbG9iYWxfY29uZmlnPVsnJ10sIHRhcmdldF9jb25maWc9WycnXSwgaWdub3JlX3BhdHRlcm5zPVtdKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdsb2JhbF9jb25maWcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXJnZXRfY29uZmlnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGdsb2JhbF9jb25maWcpID09IGxlbih0YXJnZXRfY29uZmlnKSwgbXNnPSdMaXN0cyBnbG9iYWxfY29uZmlnIGFuZCB0YXJnZXRfY29uZmlnIHNob3VsZCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBlbGVtZW50cycpCisgICAgICAgIHNlbGYuY29uZmlnX3NzdGF0ZSh0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlLCBhZGRfbG9jYWxfbWlycm9ycz1bc2VsZi5zc3RhdGVfcGF0aF0pCisKKyAgICAgICAgIyBJZiBidWlsZGhpc3RvcnkgaXMgZW5hYmxlZCwgd2UgbmVlZCB0byBkaXNhYmxlIHZlcnNpb24tZ29pbmctYmFja3dhcmRzIFFBIGNoZWNrcyBmb3IgdGhpcyB0ZXN0LiBJdCBtYXkgcmVwb3J0IGVycm9ycyBvdGhlcndpc2UuCisgICAgICAgIGlmICgnYnVpbGRoaXN0b3J5JyBpbiBnZXRfYmJfdmFyKCdVU0VSX0NMQVNTRVMnKSkgb3IgKCdidWlsZGhpc3RvcnknIGluIGdldF9iYl92YXIoJ0lOSEVSSVQnKSk6CisgICAgICAgICAgICByZW1vdmVfZXJyb3JzX2NvbmZpZyA9ICdFUlJPUl9RQV9yZW1vdmUgPSAidmVyc2lvbi1nb2luZy1iYWNrd2FyZHMiJworICAgICAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKHJlbW92ZV9lcnJvcnNfY29uZmlnKQorCisgICAgICAgICMgRm9yIG5vdCB0aGlzIG9ubHkgY2hlY2tzIGlmIHJhbmRvbSBzc3RhdGUgdGFza3MgYXJlIGhhbmRsZWQgY29ycmVjdGx5IGFzIGEgZ3JvdXAuCisgICAgICAgICMgSW4gdGhlIGZ1dHVyZSB3ZSBzaG91bGQgYWRkIGNvbnRyb2wgb3ZlciB3aGF0IHRhc2tzIHdlIGNoZWNrIGZvci4KKworICAgICAgICBzc3RhdGVfYXJjaHNfbGlzdCA9IFtdCisgICAgICAgIGV4cGVjdGVkX3JlbWFpbmluZ19zc3RhdGUgPSBbXQorICAgICAgICBmb3IgaWR4IGluIHJhbmdlKGxlbih0YXJnZXRfY29uZmlnKSk6CisgICAgICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoZ2xvYmFsX2NvbmZpZ1tpZHhdKQorICAgICAgICAgICAgc2VsZi5hcHBlbmRfcmVjaXBlaW5jKHRhcmdldCwgdGFyZ2V0X2NvbmZpZ1tpZHhdKQorICAgICAgICAgICAgc3N0YXRlX2FyY2ggPSBnZXRfYmJfdmFyKCdTU1RBVEVfUEtHQVJDSCcsIHRhcmdldCkKKyAgICAgICAgICAgIGlmIG5vdCBzc3RhdGVfYXJjaCBpbiBzc3RhdGVfYXJjaHNfbGlzdDoKKyAgICAgICAgICAgICAgICBzc3RhdGVfYXJjaHNfbGlzdC5hcHBlbmQoc3N0YXRlX2FyY2gpCisgICAgICAgICAgICBpZiB0YXJnZXRfY29uZmlnW2lkeF0gPT0gdGFyZ2V0X2NvbmZpZ1stMV06CisgICAgICAgICAgICAgICAgdGFyZ2V0X3NzdGF0ZV9iZWZvcmVfYnVpbGQgPSBzZWxmLnNlYXJjaF9zc3RhdGUodGFyZ2V0ICsgJy4qP1wudGd6JCcpCisgICAgICAgICAgICBiaXRiYWtlKCItY2NsZWFuICVzIiAlIHRhcmdldCkKKyAgICAgICAgICAgIHJlc3VsdCA9IGJpdGJha2UodGFyZ2V0LCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgICAgICBpZiB0YXJnZXRfY29uZmlnW2lkeF0gPT0gdGFyZ2V0X2NvbmZpZ1stMV06CisgICAgICAgICAgICAgICAgdGFyZ2V0X3NzdGF0ZV9hZnRlcl9idWlsZCA9IHNlbGYuc2VhcmNoX3NzdGF0ZSh0YXJnZXQgKyAnLio/XC50Z3okJykKKyAgICAgICAgICAgICAgICBleHBlY3RlZF9yZW1haW5pbmdfc3N0YXRlICs9IFt4IGZvciB4IGluIHRhcmdldF9zc3RhdGVfYWZ0ZXJfYnVpbGQgaWYgeCBub3QgaW4gdGFyZ2V0X3NzdGF0ZV9iZWZvcmVfYnVpbGQgaWYgbm90IGFueShwYXR0ZXJuIGluIHggZm9yIHBhdHRlcm4gaW4gaWdub3JlX3BhdHRlcm5zKV0KKyAgICAgICAgICAgIHNlbGYucmVtb3ZlX2NvbmZpZyhnbG9iYWxfY29uZmlnW2lkeF0pCisgICAgICAgICAgICBzZWxmLnJlbW92ZV9yZWNpcGVpbmModGFyZ2V0LCB0YXJnZXRfY29uZmlnW2lkeF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsIG1zZyA9ICJidWlsZCBvZiAlcyBmYWlsZWQgd2l0aCAlcyIgJSAodGFyZ2V0LCByZXN1bHQub3V0cHV0KSkKKworICAgICAgICBydW5DbWQoInNzdGF0ZS1jYWNoZS1tYW5hZ2VtZW50LnNoIC15IC0tY2FjaGUtZGlyPSVzIC0tcmVtb3ZlLWR1cGxpY2F0ZWQgLS1leHRyYS1hcmNocz0lcyIgJSAoc2VsZi5zc3RhdGVfcGF0aCwgJywnLmpvaW4obWFwKHN0ciwgc3N0YXRlX2FyY2hzX2xpc3QpKSkpCisgICAgICAgIGFjdHVhbF9yZW1haW5pbmdfc3N0YXRlID0gW3ggZm9yIHggaW4gc2VsZi5zZWFyY2hfc3N0YXRlKHRhcmdldCArICcuKj9cLnRneiQnKSBpZiBub3QgYW55KHBhdHRlcm4gaW4geCBmb3IgcGF0dGVybiBpbiBpZ25vcmVfcGF0dGVybnMpXQorCisgICAgICAgIGFjdHVhbF9ub3RfZXhwZWN0ZWQgPSBbeCBmb3IgeCBpbiBhY3R1YWxfcmVtYWluaW5nX3NzdGF0ZSBpZiB4IG5vdCBpbiBleHBlY3RlZF9yZW1haW5pbmdfc3N0YXRlXQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFjdHVhbF9ub3RfZXhwZWN0ZWQsIG1zZz0iRmlsZXMgc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkIGJ1dCB3YXJlIG5vdDogJXMiICUgJywgJy5qb2luKG1hcChzdHIsIGFjdHVhbF9ub3RfZXhwZWN0ZWQpKSkKKyAgICAgICAgZXhwZWN0ZWRfbm90X2FjdHVhbCA9IFt4IGZvciB4IGluIGV4cGVjdGVkX3JlbWFpbmluZ19zc3RhdGUgaWYgeCBub3QgaW4gYWN0dWFsX3JlbWFpbmluZ19zc3RhdGVdCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXhwZWN0ZWRfbm90X2FjdHVhbCwgbXNnPSJFeHRyYSBmaWxlcyB3YXJlIHJlbW92ZWQ6ICVzIiAnLCAnLmpvaW4obWFwKHN0ciwgZXhwZWN0ZWRfbm90X2FjdHVhbCkpKQorCisgICAgQHRlc3RjYXNlKDk3MykKKyAgICBkZWYgdGVzdF9zc3RhdGVfY2FjaGVfbWFuYWdlbWVudF9zY3JpcHRfdXNpbmdfcHJfMShzZWxmKToKKyAgICAgICAgZ2xvYmFsX2NvbmZpZyA9IFtdCisgICAgICAgIHRhcmdldF9jb25maWcgPSBbXQorICAgICAgICBnbG9iYWxfY29uZmlnLmFwcGVuZCgnJykKKyAgICAgICAgdGFyZ2V0X2NvbmZpZy5hcHBlbmQoJ1BSID0gIjAiJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfY2FjaGVfbWFuYWdlbWVudF9zY3JpcHQoJ200JywgZ2xvYmFsX2NvbmZpZywgIHRhcmdldF9jb25maWcsIGlnbm9yZV9wYXR0ZXJucz1bJ3BvcHVsYXRlX2xpYyddKQorCisgICAgQHRlc3RjYXNlKDk3OCkKKyAgICBkZWYgdGVzdF9zc3RhdGVfY2FjaGVfbWFuYWdlbWVudF9zY3JpcHRfdXNpbmdfcHJfMihzZWxmKToKKyAgICAgICAgZ2xvYmFsX2NvbmZpZyA9IFtdCisgICAgICAgIHRhcmdldF9jb25maWcgPSBbXQorICAgICAgICBnbG9iYWxfY29uZmlnLmFwcGVuZCgnJykKKyAgICAgICAgdGFyZ2V0X2NvbmZpZy5hcHBlbmQoJ1BSID0gIjAiJykKKyAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoJycpCisgICAgICAgIHRhcmdldF9jb25maWcuYXBwZW5kKCdQUiA9ICIxIicpCisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0KCdtNCcsIGdsb2JhbF9jb25maWcsICB0YXJnZXRfY29uZmlnLCBpZ25vcmVfcGF0dGVybnM9Wydwb3B1bGF0ZV9saWMnXSkKKworICAgIEB0ZXN0Y2FzZSg5NzkpCisgICAgZGVmIHRlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0X3VzaW5nX3ByXzMoc2VsZik6CisgICAgICAgIGdsb2JhbF9jb25maWcgPSBbXQorICAgICAgICB0YXJnZXRfY29uZmlnID0gW10KKyAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoJ01BQ0hJTkUgPSAicWVtdXg4Ni02NCInKQorICAgICAgICB0YXJnZXRfY29uZmlnLmFwcGVuZCgnUFIgPSAiMCInKQorICAgICAgICBnbG9iYWxfY29uZmlnLmFwcGVuZChnbG9iYWxfY29uZmlnWzBdKQorICAgICAgICB0YXJnZXRfY29uZmlnLmFwcGVuZCgnUFIgPSAiMSInKQorICAgICAgICBnbG9iYWxfY29uZmlnLmFwcGVuZCgnTUFDSElORSA9ICJxZW11eDg2IicpCisgICAgICAgIHRhcmdldF9jb25maWcuYXBwZW5kKCdQUiA9ICIxIicpCisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0KCdtNCcsIGdsb2JhbF9jb25maWcsICB0YXJnZXRfY29uZmlnLCBpZ25vcmVfcGF0dGVybnM9Wydwb3B1bGF0ZV9saWMnXSkKKworICAgIEB0ZXN0Y2FzZSg5NzQpCisgICAgZGVmIHRlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0X3VzaW5nX21hY2hpbmUoc2VsZik6CisgICAgICAgIGdsb2JhbF9jb25maWcgPSBbXQorICAgICAgICB0YXJnZXRfY29uZmlnID0gW10KKyAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoJ01BQ0hJTkUgPSAicWVtdXg4Ni02NCInKQorICAgICAgICB0YXJnZXRfY29uZmlnLmFwcGVuZCgnJykKKyAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoJ01BQ0hJTkUgPSAicWVtdXg4NiInKQorICAgICAgICB0YXJnZXRfY29uZmlnLmFwcGVuZCgnJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfY2FjaGVfbWFuYWdlbWVudF9zY3JpcHQoJ200JywgZ2xvYmFsX2NvbmZpZywgIHRhcmdldF9jb25maWcsIGlnbm9yZV9wYXR0ZXJucz1bJ3BvcHVsYXRlX2xpYyddKQorCisgICAgQHRlc3RjYXNlKDEyNzApCisgICAgZGVmIHRlc3Rfc3N0YXRlXzMyXzY0X3NhbWVfaGFzaChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBzc3RhdGUgY2hlY2tzdW1zIGZvciBib3RoIG5hdGl2ZSBhbmQgdGFyZ2V0IHNob3VsZCBub3QgdmFyeSB3aGV0aGVyCisgICAgICAgIHRoZXkncmUgYnVpbHQgb24gYSAzMiBvciA2NCBiaXQgc3lzdGVtLiBSYXRoZXIgdGhhbiByZXF1aXJpbmcgdHdvIGRpZmZlcmVudCAKKyAgICAgICAgYnVpbGQgbWFjaGluZXMgYW5kIHJ1bm5pbmcgYSBidWlsZHMsIG92ZXJyaWRlIHRoZSB2YXJpYWJsZXMgY2FsbGluZyB1bmFtZSgpCisgICAgICAgIG1hbnVhbGx5IGFuZCBjaGVjayB1c2luZyBiaXRiYWtlIC1TLgorICAgICAgICAiIiIKKworICAgICAgICB0b3BkaXIgPSBnZXRfYmJfdmFyKCdUT1BESVInKQorICAgICAgICB0YXJnZXR2ZW5kb3IgPSBnZXRfYmJfdmFyKCdUQVJHRVRfVkVORE9SJykKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiCitUTVBESVIgPSBcIiR7VE9QRElSfS90bXAtc3N0YXRlc2FtZWhhc2hcIgorQlVJTERfQVJDSCA9IFwieDg2XzY0XCIKK0JVSUxEX09TID0gXCJsaW51eFwiCisiIiIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2giKQorICAgICAgICBiaXRiYWtlKCJjb3JlLWltYWdlLXNhdG8gLVMgbm9uZSIpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIgorVE1QRElSID0gXCIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoMlwiCitCVUlMRF9BUkNIID0gXCJpNjg2XCIKK0JVSUxEX09TID0gXCJsaW51eFwiCisiIiIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gyIikKKyAgICAgICAgYml0YmFrZSgiY29yZS1pbWFnZS1zYXRvIC1TIG5vbmUiKQorCisgICAgICAgIGRlZiBnZXRfZmlsZXMoZCk6CisgICAgICAgICAgICBmID0gW10KKyAgICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGQpOgorICAgICAgICAgICAgICAgIGYuZXh0ZW5kKG9zLnBhdGguam9pbihyb290LCBuYW1lKSBmb3IgbmFtZSBpbiBmaWxlcykKKyAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgIGZpbGVzMSA9IGdldF9maWxlcyh0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaC9zdGFtcHMvIikKKyAgICAgICAgZmlsZXMyID0gZ2V0X2ZpbGVzKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMi9zdGFtcHMvIikKKyAgICAgICAgZmlsZXMyID0gW3gucmVwbGFjZSgidG1wLXNzdGF0ZXNhbWVoYXNoMiIsICJ0bXAtc3N0YXRlc2FtZWhhc2giKS5yZXBsYWNlKCJpNjg2LWxpbnV4IiwgIng4Nl82NC1saW51eCIpLnJlcGxhY2UoImk2ODYiICsgdGFyZ2V0dmVuZG9yICsgIi1saW51eCIsICJ4ODZfNjQiICsgdGFyZ2V0dmVuZG9yICsgIi1saW51eCIsICkgZm9yIHggaW4gZmlsZXMyXQorICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoZmlsZXMxLCBmaWxlczIpCisKKworICAgIEB0ZXN0Y2FzZSgxMjcxKQorICAgIGRlZiB0ZXN0X3NzdGF0ZV9uYXRpdmVsc2JzdHJpbmdfc2FtZV9oYXNoKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhlIHNzdGF0ZSBjaGVja3N1bXMgc2hvdWxkIGJlIGluZGVwZW5kZW50IG9mIHdoaWNoZXZlciBOQVRJVkVMU0JTVFJJTkcgaXMKKyAgICAgICAgZGV0ZWN0ZWQuIFJhdGhlciB0aGFuIHJlcXVpcmluZyB0d28gZGlmZmVyZW50IGJ1aWxkIG1hY2hpbmVzIGFuZCBydW5uaW5nIAorICAgICAgICBidWlsZHMsIG92ZXJyaWRlIHRoZSB2YXJpYWJsZXMgbWFudWFsbHkgYW5kIGNoZWNrIHVzaW5nIGJpdGJha2UgLVMuCisgICAgICAgICIiIgorCisgICAgICAgIHRvcGRpciA9IGdldF9iYl92YXIoJ1RPUERJUicpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIgorVE1QRElSID0gXCIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoXCIKK05BVElWRUxTQlNUUklORyA9IFwiRGlzdHJvQVwiCisiIiIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2giKQorICAgICAgICBiaXRiYWtlKCJjb3JlLWltYWdlLXNhdG8gLVMgbm9uZSIpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIgorVE1QRElSID0gXCIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoMlwiCitOQVRJVkVMU0JTVFJJTkcgPSBcIkRpc3Ryb0JcIgorIiIiKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMiIpCisgICAgICAgIGJpdGJha2UoImNvcmUtaW1hZ2Utc2F0byAtUyBub25lIikKKworICAgICAgICBkZWYgZ2V0X2ZpbGVzKGQpOgorICAgICAgICAgICAgZiA9IFtdCisgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkKToKKyAgICAgICAgICAgICAgICBmLmV4dGVuZChvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkgZm9yIG5hbWUgaW4gZmlsZXMpCisgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICBmaWxlczEgPSBnZXRfZmlsZXModG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gvc3RhbXBzLyIpCisgICAgICAgIGZpbGVzMiA9IGdldF9maWxlcyh0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaDIvc3RhbXBzLyIpCisgICAgICAgIGZpbGVzMiA9IFt4LnJlcGxhY2UoInRtcC1zc3RhdGVzYW1laGFzaDIiLCAidG1wLXNzdGF0ZXNhbWVoYXNoIikgZm9yIHggaW4gZmlsZXMyXQorICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoZmlsZXMxLCBmaWxlczIpCisKKyAgICBkZWYgdGVzdF9zc3RhdGVfYWxsYXJjaF9zYW1lc2lncyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBzc3RhdGUgY2hlY2tzdW1zIG9mZiBhbGxhcmNoIHBhY2thZ2VzIHNob3VsZCBiZSBpbmRlcGVuZGVudCBvZiB3aGljaGV2ZXIgCisgICAgICAgIE1BQ0hJTkUgaXMgc2V0LiBDaGVjayB0aGlzIHVzaW5nIGJpdGJha2UgLVMuCisgICAgICAgICIiIgorCisgICAgICAgIHRvcGRpciA9IGdldF9iYl92YXIoJ1RPUERJUicpCisgICAgICAgIHRhcmdldG9zID0gZ2V0X2JiX3ZhcignVEFSR0VUX09TJykKKyAgICAgICAgdGFyZ2V0dmVuZG9yID0gZ2V0X2JiX3ZhcignVEFSR0VUX1ZFTkRPUicpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIgorVE1QRElSID0gXCIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoXCIKK01BQ0hJTkUgPSBcInFlbXV4ODZcIgorIiIiKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoIikKKyAgICAgICAgYml0YmFrZSgid29ybGQgLVMgbm9uZSIpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIgorVE1QRElSID0gXCIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoMlwiCitNQUNISU5FID0gXCJxZW11YXJtXCIKKyIiIikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaDIiKQorICAgICAgICBiaXRiYWtlKCJ3b3JsZCAtUyBub25lIikKKworICAgICAgICBkZWYgZ2V0X2ZpbGVzKGQpOgorICAgICAgICAgICAgZiA9IFtdCisgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkKToKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgaWYgImRvX2J1aWxkIiBub3QgaW4gbmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGYuYXBwZW5kKG9zLnBhdGguam9pbihyb290LCBuYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgIGZpbGVzMSA9IGdldF9maWxlcyh0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaC9zdGFtcHMvYWxsIiArIHRhcmdldHZlbmRvciArICItIiArIHRhcmdldG9zKQorICAgICAgICBmaWxlczIgPSBnZXRfZmlsZXModG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gyL3N0YW1wcy9hbGwiICsgdGFyZ2V0dmVuZG9yICsgIi0iICsgdGFyZ2V0b3MpCisgICAgICAgIGZpbGVzMiA9IFt4LnJlcGxhY2UoInRtcC1zc3RhdGVzYW1laGFzaDIiLCAidG1wLXNzdGF0ZXNhbWVoYXNoIikgZm9yIHggaW4gZmlsZXMyXQorICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChmaWxlczEsIGZpbGVzMikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC93aWMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvd2ljLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYzU0YTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvd2ljLnB5CkBAIC0wLDAgKzEsMjM2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxNSwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBBVVRIT1JTCisjIEVkIEJhcnRvc2ggPGVkLmJhcnRvc2hAbGludXguaW50ZWwuY29tPgorCisiIiJUZXN0IGNhc2VzIGZvciB3aWMuIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitmcm9tIGdsb2IgaW1wb3J0IGdsb2IKK2Zyb20gc2h1dGlsIGltcG9ydCBybXRyZWUKKworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyCisKK2NsYXNzIFdpYyhvZVNlbGZUZXN0KToKKyAgICAiIiJXaWMgdGVzdCBjbGFzcy4iIiIKKworICAgIHJlc3VsdGRpciA9ICIvdmFyL3RtcC93aWMvYnVpbGQvIgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgIiIiQnVpbGQgd2ljIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLiIiIgorICAgICAgICBiaXRiYWtlKCdzeXNsaW51eCBzeXNsaW51eC1uYXRpdmUgcGFydGVkLW5hdGl2ZSBncHRmZGlzay1uYXRpdmUgJworICAgICAgICAgICAgICAgICdkb3Nmc3Rvb2xzLW5hdGl2ZSBtdG9vbHMtbmF0aXZlJykKKyAgICAgICAgV2ljLmltYWdlX2lzX3JlYWR5ID0gRmFsc2UKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIiIiVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIGJlZm9yZSBlYWNoIHRlc3QgbWV0aG9kLiIiIgorICAgICAgICBpZiBub3QgV2ljLmltYWdlX2lzX3JlYWR5OgorICAgICAgICAgICAgIyBidWlsZCBjb3JlLWltYWdlLW1pbmltYWwgd2l0aCByZXF1aXJlZCBmZWF0dXJlcworICAgICAgICAgICAgZmVhdHVyZXMgPSAnSU1BR0VfRlNUWVBFUyArPSAiIGhkZGltZyJcbk1BQ0hJTkVfRkVBVFVSRVNfYXBwZW5kID0gIiBlZmkiXG4nCisgICAgICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoZmVhdHVyZXMpCisgICAgICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwnKQorICAgICAgICAgICAgIyBzZXQgdGhpcyBjbGFzcyB2YXJpYWJsZSB0byBhdm9pZCBidWlkaW5nIGltYWdlIG1hbnkgdGltZXMKKyAgICAgICAgICAgIFdpYy5pbWFnZV9pc19yZWFkeSA9IFRydWUKKworICAgICAgICBybXRyZWUoc2VsZi5yZXN1bHRkaXIsIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKKworICAgIGRlZiB0ZXN0MDFfaGVscChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgLS1oZWxwIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCd3aWMgLS1oZWxwJykuc3RhdHVzKQorCisgICAgZGVmIHRlc3QwMl9jcmVhdGVoZWxwKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdpYyBjcmVhdGUgLS1oZWxwIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCd3aWMgY3JlYXRlIC0taGVscCcpLnN0YXR1cykKKworICAgIGRlZiB0ZXN0MDNfbGlzdGhlbHAoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2ljIGxpc3QgLS1oZWxwIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCd3aWMgbGlzdCAtLWhlbHAnKS5zdGF0dXMpCisKKyAgICBkZWYgdGVzdDA0X2J1aWxkX2ltYWdlX25hbWUoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2ljIGNyZWF0ZSBkaXJlY3RkaXNrIC0taW1hZ2UtbmFtZSBjb3JlLWltYWdlLW1pbmltYWwiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgZGlyZWN0ZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWUgY29yZS1pbWFnZS1taW5pbWFsIikuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgImRpcmVjdGRpc2stKi5kaXJlY3QiKSkpCisKKyAgICBkZWYgdGVzdDA1X2J1aWxkX2FydGlmYWN0cyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgY3JlYXRlIGRpcmVjdGRpc2sgcHJvdmlkaW5nIGFsbCBhcnRpZmFjdHMuIiIiCisgICAgICAgIHZhcnMgPSBkaWN0KCh2YXIubG93ZXIoKSwgZ2V0X2JiX3Zhcih2YXIsICdjb3JlLWltYWdlLW1pbmltYWwnKSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHZhciBpbiAoJ1NUQUdJTkdfREFUQURJUicsICdERVBMT1lfRElSX0lNQUdFJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTVEFHSU5HX0RJUl9OQVRJVkUnLCAnSU1BR0VfUk9PVEZTJykpCisgICAgICAgIHN0YXR1cyA9IHJ1bkNtZCgid2ljIGNyZWF0ZSBkaXJlY3RkaXNrICIKKyAgICAgICAgICAgICAgICAgICAgICAgICItYiAlKHN0YWdpbmdfZGF0YWRpcilzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICItayAlKGRlcGxveV9kaXJfaW1hZ2UpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLW4gJShzdGFnaW5nX2Rpcl9uYXRpdmUpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLXIgJShpbWFnZV9yb290ZnMpcyIgJSB2YXJzKS5zdGF0dXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiZGlyZWN0ZGlzay0qLmRpcmVjdCIpKSkKKworICAgIGRlZiB0ZXN0MDZfZ3B0X2ltYWdlKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGNyZWF0aW9uIG9mIGNvcmUtaW1hZ2UtbWluaW1hbCB3aXRoIGdwdCB0YWJsZSBhbmQgVVVJRCBib290IiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlIGRpcmVjdGRpc2stZ3B0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZSBjb3JlLWltYWdlLW1pbmltYWwiKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiZGlyZWN0ZGlzay0qLmRpcmVjdCIpKSkKKworICAgIGRlZiB0ZXN0MDdfdW5zdXBwb3J0ZWRfc3ViY29tbWFuZChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB1bnN1cHBvcnRlZCBzdWJjb21tYW5kIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcnVuQ21kKCd3aWMgdW5zdXBwb3J0ZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZV9zdGF0dXM9VHJ1ZSkuc3RhdHVzKQorCisgICAgZGVmIHRlc3QwOF9ub19jb21tYW5kKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdpYyB3aXRob3V0IGNvbW1hbmQiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBydW5DbWQoJ3dpYycsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkuc3RhdHVzKQorCisgICAgZGVmIHRlc3QwOV9oZWxwX2tpY2tzdGFydChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgaGVscCBvdmVydmlldyIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgnd2ljIGhlbHAgb3ZlcnZpZXcnKS5zdGF0dXMpCisKKyAgICBkZWYgdGVzdDEwX2hlbHBfcGx1Z2lucyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgaGVscCBwbHVnaW5zIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCd3aWMgaGVscCBwbHVnaW5zJykuc3RhdHVzKQorCisgICAgZGVmIHRlc3QxMV9oZWxwX2tpY2tzdGFydChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgaGVscCBraWNrc3RhcnQiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoJ3dpYyBoZWxwIGtpY2tzdGFydCcpLnN0YXR1cykKKworICAgIGRlZiB0ZXN0MTJfY29tcHJlc3NfZ3ppcChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjb21wcmVzc2luZyBhbiBpbWFnZSB3aXRoIGd6aXAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgZGlyZWN0ZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWUgY29yZS1pbWFnZS1taW5pbWFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1jIGd6aXAiKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXJlY3RkaXNrLSouZGlyZWN0Lmd6IikpKQorCisgICAgZGVmIHRlc3QxM19jb21wcmVzc19nemlwKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGNvbXByZXNzaW5nIGFuIGltYWdlIHdpdGggYnppcDIiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgZGlyZWN0ZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWUgY29yZS1pbWFnZS1taW5pbWFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1jIGJ6aXAyIikuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlyZWN0ZGlzay0qLmRpcmVjdC5iejIiKSkpCisKKyAgICBkZWYgdGVzdDE0X2NvbXByZXNzX2d6aXAoc2VsZik6CisgICAgICAgICIiIlRlc3QgY29tcHJlc3NpbmcgYW4gaW1hZ2Ugd2l0aCB4eiIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSBkaXJlY3RkaXNrICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZSBjb3JlLWltYWdlLW1pbmltYWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMgeHoiKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXJlY3RkaXNrLSouZGlyZWN0Lnh6IikpKQorCisgICAgZGVmIHRlc3QxNV93cm9uZ19jb21wcmVzc29yKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGhvdyB3aWMgYnJlYWtzIGlmIHdyb25nIGNvbXByZXNzb3IgaXMgcHJvdmlkZWQiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBydW5DbWQoIndpYyBjcmVhdGUgZGlyZWN0ZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWUgY29yZS1pbWFnZS1taW5pbWFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1jIHdyb25nIiwgaWdub3JlX3N0YXR1cz1UcnVlKS5zdGF0dXMpCisKKyAgICBkZWYgdGVzdDE2X3Jvb3Rmc19pbmRpcmVjdF9yZWNpcGVzKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHVzYWdlIG9mIHJvb3RmcyBwbHVnaW4gd2l0aCByb290ZnMgcmVjaXBlcyIiIgorICAgICAgICB3a3MgPSAiZGlyZWN0ZGlzay1tdWx0aS1yb290ZnMiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlICVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZSBjb3JlLWltYWdlLW1pbmltYWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1yb290ZnMgcm9vdGZzMT1jb3JlLWltYWdlLW1pbmltYWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1yb290ZnMgcm9vdGZzMj1jb3JlLWltYWdlLW1pbmltYWwiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSB3a3MpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICIlcyouZGlyZWN0IiAlIHdrcykpKQorCisgICAgZGVmIHRlc3QxN19yb290ZnNfYXJ0aWZhY3RzKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHVzYWdlIG9mIHJvb3RmcyBwbHVnaW4gd2l0aCByb290ZnMgcGF0aHMiIiIKKyAgICAgICAgdmFycyA9IGRpY3QoKHZhci5sb3dlcigpLCBnZXRfYmJfdmFyKHZhciwgJ2NvcmUtaW1hZ2UtbWluaW1hbCcpKSBcCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdmFyIGluICgnU1RBR0lOR19EQVRBRElSJywgJ0RFUExPWV9ESVJfSU1BR0UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NUQUdJTkdfRElSX05BVElWRScsICdJTUFHRV9ST09URlMnKSkKKyAgICAgICAgdmFyc1snd2tzJ10gPSAiZGlyZWN0ZGlzay1tdWx0aS1yb290ZnMiCisgICAgICAgIHN0YXR1cyA9IHJ1bkNtZCgid2ljIGNyZWF0ZSAlKHdrcylzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICItYiAlKHN0YWdpbmdfZGF0YWRpcilzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICItayAlKGRlcGxveV9kaXJfaW1hZ2UpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLW4gJShzdGFnaW5nX2Rpcl9uYXRpdmUpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLS1yb290ZnMtZGlyIHJvb3RmczE9JShpbWFnZV9yb290ZnMpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLS1yb290ZnMtZGlyIHJvb3RmczI9JShpbWFnZV9yb290ZnMpcyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgJSB2YXJzKS5zdGF0dXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUod2tzKXMtKi5kaXJlY3QiICUgdmFycykpKQorCisgICAgZGVmIHRlc3QxOF9pc29faW1hZ2Uoc2VsZik6CisgICAgICAgICIiIlRlc3QgY3JlYXRpb24gb2YgaHlicmlkIGlzbyBpbWFnZXdpdGggbGVnYWN5IGFuZCBFRkkgYm9vdCIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSBta2h5YnJpZGlzbyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWUgY29yZS1pbWFnZS1taW5pbWFsIikuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIkhZQlJJRF9JU09fSU1HLSouZGlyZWN0IikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIkhZQlJJRF9JU09fSU1HLSouaXNvIikpKQorCisgICAgZGVmIHRlc3QxOV9pbWFnZV9lbnYoc2VsZik6CisgICAgICAgICIiIlRlc3QgZ2VuZXJhdGlvbiBvZiA8aW1hZ2U+LmVudiBmaWxlcy4iIiIKKyAgICAgICAgaW1hZ2UgPSAnY29yZS1pbWFnZS1taW5pbWFsJworICAgICAgICBzdGRpciA9IGdldF9iYl92YXIoJ1NUQUdJTkdfRElSX1RBUkdFVCcsIGltYWdlKQorICAgICAgICBpbWdkYXRhZGlyID0gb3MucGF0aC5qb2luKHN0ZGlyLCAnaW1nZGF0YScpCisKKyAgICAgICAgYmFzZW5hbWUgPSBnZXRfYmJfdmFyKCdJTUFHRV9CQVNFTkFNRScsIGltYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2VuYW1lLCBpbWFnZSkKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihpbWdkYXRhZGlyLCBiYXNlbmFtZSkgKyAnLmVudicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHBhdGgpKQorCisgICAgICAgIHdpY3ZhcnMgPSBzZXQoZ2V0X2JiX3ZhcignV0lDVkFSUycsIGltYWdlKS5zcGxpdCgpKQorICAgICAgICAjIGZpbHRlciBvdXQgb3B0aW9uYWwgdmFyaWFibGVzCisgICAgICAgIHdpY3ZhcnMgPSB3aWN2YXJzLmRpZmZlcmVuY2UoKCdIRERESVInLCAnSU1BR0VfQk9PVF9GSUxFUycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJTklUUkQnLCAnSVNPRElSJykpCisgICAgICAgIHdpdGggb3BlbihwYXRoKSBhcyBlbnZmaWxlOgorICAgICAgICAgICAgY29udGVudCA9IGRpY3QobGluZS5zcGxpdCgiPSIsIDEpIGZvciBsaW5lIGluIGVudmZpbGUpCisgICAgICAgICAgICAjIHRlc3QgaWYgdmFyaWFibGVzIHVzZWQgYnkgd2ljIHByZXNlbnQgaW4gdGhlIC5lbnYgZmlsZQorICAgICAgICAgICAgZm9yIHZhciBpbiB3aWN2YXJzOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2YXIgaW4gY29udGVudCwgIiVzIGlzIG5vdCBpbiAuZW52IGZpbGUiICUgdmFyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb250ZW50W3Zhcl0pCisKKyAgICBkZWYgdGVzdDIwX3dpY19pbWFnZV90eXBlKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGJ1aWxkaW5nIHdpYyBpbWFnZXMgYnkgYml0YmFrZSIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGJpdGJha2UoJ3dpYy1pbWFnZS1taW5pbWFsJykuc3RhdHVzKQorCisgICAgICAgIGRlcGxveV9kaXIgPSBnZXRfYmJfdmFyKCdERVBMT1lfRElSX0lNQUdFJykKKyAgICAgICAgbWFjaGluZSA9IGdldF9iYl92YXIoJ01BQ0hJTkUnKQorICAgICAgICBwcmVmaXggPSBvcy5wYXRoLmpvaW4oZGVwbG95X2RpciwgJ3dpYy1pbWFnZS1taW5pbWFsLSVzLicgJSBtYWNoaW5lKQorICAgICAgICAjIGNoZWNrIGlmIHdlIGhhdmUgcmVzdWx0IGltYWdlIGFuZCBtYW5pZmVzdHMgc3ltbGlua3MKKyAgICAgICAgIyBwb2ludGluZyB0byBleGlzdGluZyBmaWxlcworICAgICAgICBmb3Igc3VmZml4IGluICgnd2ljLmJ6MicsICdtYW5pZmVzdCcpOgorICAgICAgICAgICAgcGF0aCA9IHByZWZpeCArIHN1ZmZpeAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNsaW5rKHBhdGgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGgucmVhbHBhdGgocGF0aCkpKQorCisgICAgZGVmIHRlc3QyMV9xZW11eDg2X2RpcmVjdGRpc2soc2VsZik6CisgICAgICAgICIiIlRlc3QgY3JlYXRpb24gb2YgcWVtdXgtODYtZGlyZWN0ZGlzayBpbWFnZSIiIgorICAgICAgICBpbWFnZSA9ICJxZW11eDg2LWRpcmVjdGRpc2siCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlICVzIC1lIGNvcmUtaW1hZ2UtbWluaW1hbCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGltYWdlKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiJXMtKmRpcmVjdCIgJSBpbWFnZSkpKQorCisgICAgZGVmIHRlc3QyMl9ta2d1bW1pZGlzayhzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjcmVhdGlvbiBvZiBta2d1bW1pZGlzayBpbWFnZSIiIgorICAgICAgICBpbWFnZSA9ICJta2d1bW1pZGlzayIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgJXMgLWUgY29yZS1pbWFnZS1taW5pbWFsIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgaW1hZ2UpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICIlcy0qZGlyZWN0IiAlIGltYWdlKSkpCisKKyAgICBkZWYgdGVzdDIzX21rZWZpZGlzayhzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjcmVhdGlvbiBvZiBta2VmaWRpc2sgaW1hZ2UiIiIKKyAgICAgICAgaW1hZ2UgPSAibWtlZmlkaXNrIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSAlcyAtZSBjb3JlLWltYWdlLW1pbmltYWwiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBpbWFnZSkuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIiVzLSpkaXJlY3QiICUgaW1hZ2UpKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS90YXJnZXRjb250cm9sLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3RhcmdldGNvbnRyb2wucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRjMGQwMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS90YXJnZXRjb250cm9sLnB5CkBAIC0wLDAgKzEsMjQwIEBACisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBUaGlzIG1vZHVsZSBpcyB1c2VkIGJ5IHRlc3RpbWFnZS5iYmNsYXNzIGZvciBzZXR0aW5nIHVwIGFuZCBjb250cm9sbGluZyBhIHRhcmdldCBtYWNoaW5lLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgYmIKK2ltcG9ydCB0cmFjZWJhY2sKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCitmcm9tIG9lcWEudXRpbHMuc3NoY29udHJvbCBpbXBvcnQgU1NIQ29udHJvbAorZnJvbSBvZXFhLnV0aWxzLnFlbXVydW5uZXIgaW1wb3J0IFFlbXVSdW5uZXIKK2Zyb20gb2VxYS51dGlscy5xZW11dGlueXJ1bm5lciBpbXBvcnQgUWVtdVRpbnlSdW5uZXIKK2Zyb20gb2VxYS51dGlscy5kdW1wIGltcG9ydCBUYXJnZXREdW1wZXIKK2Zyb20gb2VxYS5jb250cm9sbGVycy50ZXN0dGFyZ2V0bG9hZGVyIGltcG9ydCBUZXN0VGFyZ2V0TG9hZGVyCitmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3RtZXRob2QKKworZGVmIGdldF90YXJnZXRfY29udHJvbGxlcihkKToKKyAgICB0ZXN0dGFyZ2V0ID0gZC5nZXRWYXIoIlRFU1RfVEFSR0VUIiwgVHJ1ZSkKKyAgICAjIG9sZCwgc2ltcGxlIG5hbWVzCisgICAgaWYgdGVzdHRhcmdldCA9PSAicWVtdSI6CisgICAgICAgIHJldHVybiBRZW11VGFyZ2V0KGQpCisgICAgZWxpZiB0ZXN0dGFyZ2V0ID09ICJzaW1wbGVyZW1vdGUiOgorICAgICAgICByZXR1cm4gU2ltcGxlUmVtb3RlVGFyZ2V0KGQpCisgICAgZWxzZToKKyAgICAgICAgIyB1c2UgdGhlIGNsYXNzIG5hbWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBpcyBpdCBhIGNvcmUgY2xhc3MgZGVmaW5lZCBoZXJlPworICAgICAgICAgICAgY29udHJvbGxlciA9IGdldGF0dHIoc3lzLm1vZHVsZXNbX19uYW1lX19dLCB0ZXN0dGFyZ2V0KQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAjIG5vcGUsIHBlcmhhcHMgYSBsYXllciBkZWZpbmVkIG9uZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGJicGF0aCA9IGQuZ2V0VmFyKCJCQlBBVEgiLCBUcnVlKS5zcGxpdCgnOicpCisgICAgICAgICAgICAgICAgdGVzdHRhcmdldGxvYWRlciA9IFRlc3RUYXJnZXRMb2FkZXIoKQorICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIgPSB0ZXN0dGFyZ2V0bG9hZGVyLmdldF9jb250cm9sbGVyX21vZHVsZSh0ZXN0dGFyZ2V0LCBiYnBhdGgpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiRmFpbGVkIHRvIGltcG9ydCB7MH0gZnJvbSBhdmFpbGFibGUgY29udHJvbGxlciBtb2R1bGVzOlxuezF9Ii5mb3JtYXQodGVzdHRhcmdldCx0cmFjZWJhY2suZm9ybWF0X2V4YygpKSkKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJJbnZhbGlkIFRFU1RfVEFSR0VUIC0gIiArIHN0cihlKSkKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIoZCkKKworCitjbGFzcyBCYXNlVGFyZ2V0KG9iamVjdCk6CisKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgc3VwcG9ydGVkX2ltYWdlX2ZzdHlwZXMgPSBbXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBOb25lCisgICAgICAgIHNlbGYuaXAgPSBOb25lCisgICAgICAgIHNlbGYuc2VydmVyX2lwID0gTm9uZQorICAgICAgICBzZWxmLmRhdGV0aW1lID0gZC5nZXRWYXIoJ0RBVEVUSU1FJywgVHJ1ZSkKKyAgICAgICAgc2VsZi50ZXN0ZGlyID0gZC5nZXRWYXIoIlRFU1RfTE9HX0RJUiIsIFRydWUpCisgICAgICAgIHNlbGYucG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGRlcGxveShzZWxmKToKKworICAgICAgICBzZWxmLnNzaGxvZyA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkaXIsICJzc2hfdGFyZ2V0X2xvZy4lcyIgJSBzZWxmLmRhdGV0aW1lKQorICAgICAgICBzc2hsb2dsaW5rID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRpciwgInNzaF90YXJnZXRfbG9nIikKKyAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoc3NobG9nbGluayk6CisgICAgICAgICAgICBvcy51bmxpbmsoc3NobG9nbGluaykKKyAgICAgICAgb3Muc3ltbGluayhzZWxmLnNzaGxvZywgc3NobG9nbGluaykKKyAgICAgICAgYmIubm90ZSgiU1NIIGxvZyBmaWxlOiAlcyIgJSAgc2VsZi5zc2hsb2cpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgc3RhcnQoc2VsZiwgcGFyYW1zPU5vbmUpOgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdldF9leHRyYV9maWxlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBtYXRjaF9pbWFnZV9mc3R5cGUoc2VsZiwgZCwgaW1hZ2VfZnN0eXBlcz1Ob25lKToKKyAgICAgICAgaWYgbm90IGltYWdlX2ZzdHlwZXM6CisgICAgICAgICAgICBpbWFnZV9mc3R5cGVzID0gZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKS5zcGxpdCgnICcpCisgICAgICAgIHBvc3NpYmxlX2ltYWdlX2ZzdHlwZXMgPSBbZnN0eXBlIGZvciBmc3R5cGUgaW4gc2VsZi5zdXBwb3J0ZWRfaW1hZ2VfZnN0eXBlcyBpZiBmc3R5cGUgaW4gaW1hZ2VfZnN0eXBlc10KKyAgICAgICAgaWYgcG9zc2libGVfaW1hZ2VfZnN0eXBlczoKKyAgICAgICAgICAgIHJldHVybiBwb3NzaWJsZV9pbWFnZV9mc3R5cGVzWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGdldF9pbWFnZV9mc3R5cGUoc2VsZiwgZCk6CisgICAgICAgIGltYWdlX2ZzdHlwZSA9IHNlbGYubWF0Y2hfaW1hZ2VfZnN0eXBlKGQpCisgICAgICAgIGlmIGltYWdlX2ZzdHlwZToKKyAgICAgICAgICAgIHJldHVybiBpbWFnZV9mc3R5cGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJJTUFHRV9GU1RZUEVTIHNob3VsZCBjb250YWluIGEgVGFyZ2V0IENvbnRyb2xsZXIgc3VwcG9ydGVkIGltYWdlIGZzdHlwZTogJXMgIiAlICcsICcuam9pbihtYXAoc3RyLCBzZWxmLnN1cHBvcnRlZF9pbWFnZV9mc3R5cGVzKSkpCisKKyAgICBkZWYgcmVzdGFydChzZWxmLCBwYXJhbXM9Tm9uZSk6CisgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgIHNlbGYuc3RhcnQocGFyYW1zKQorCisgICAgZGVmIHJ1bihzZWxmLCBjbWQsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24ucnVuKGNtZCwgdGltZW91dCkKKworICAgIGRlZiBjb3B5X3RvKHNlbGYsIGxvY2FscGF0aCwgcmVtb3RlcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24uY29weV90byhsb2NhbHBhdGgsIHJlbW90ZXBhdGgpCisKKyAgICBkZWYgY29weV9mcm9tKHNlbGYsIHJlbW90ZXBhdGgsIGxvY2FscGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24uY29weV9mcm9tKHJlbW90ZXBhdGgsIGxvY2FscGF0aCkKKworCisKK2NsYXNzIFFlbXVUYXJnZXQoQmFzZVRhcmdldCk6CisKKyAgICBzdXBwb3J0ZWRfaW1hZ2VfZnN0eXBlcyA9IFsnZXh0MycsICdleHQ0JywgJ2NwaW8uZ3onXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorCisgICAgICAgIHN1cGVyKFFlbXVUYXJnZXQsIHNlbGYpLl9faW5pdF9fKGQpCisKKyAgICAgICAgc2VsZi5pbWFnZV9mc3R5cGUgPSBzZWxmLmdldF9pbWFnZV9mc3R5cGUoZCkKKyAgICAgICAgc2VsZi5xZW11bG9nID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRpciwgInFlbXVfYm9vdF9sb2cuJXMiICUgc2VsZi5kYXRldGltZSkKKyAgICAgICAgc2VsZi5vcmlncm9vdGZzID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJERVBMT1lfRElSX0lNQUdFIiwgVHJ1ZSksICBkLmdldFZhcigiSU1BR0VfTElOS19OQU1FIiwgVHJ1ZSkgKyAnLicgKyBzZWxmLmltYWdlX2ZzdHlwZSkKKyAgICAgICAgc2VsZi5yb290ZnMgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGlyLCBkLmdldFZhcigiSU1BR0VfTElOS19OQU1FIiwgVHJ1ZSkgKyAnLXRlc3RpbWFnZS4nICsgc2VsZi5pbWFnZV9mc3R5cGUpCisgICAgICAgIHNlbGYua2VybmVsID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJERVBMT1lfRElSX0lNQUdFIiwgVHJ1ZSksIGQuZ2V0VmFyKCJLRVJORUxfSU1BR0VUWVBFIiwgRmFsc2UpICsgJy0nICsgZC5nZXRWYXIoJ01BQ0hJTkUnLCBGYWxzZSkgKyAnLmJpbicpCisgICAgICAgIGR1bXBfdGFyZ2V0X2NtZHMgPSBkLmdldFZhcigidGVzdGltYWdlX2R1bXBfdGFyZ2V0IiwgVHJ1ZSkKKyAgICAgICAgZHVtcF9ob3N0X2NtZHMgPSBkLmdldFZhcigidGVzdGltYWdlX2R1bXBfaG9zdCIsIFRydWUpCisgICAgICAgIGR1bXBfZGlyID0gZC5nZXRWYXIoIlRFU1RJTUFHRV9EVU1QX0RJUiIsIFRydWUpCisKKyAgICAgICAgIyBMb2cgUWVtdVJ1bm5lciBsb2cgb3V0cHV0IHRvIGEgZmlsZQorICAgICAgICBpbXBvcnQgb2UucGF0aAorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi50ZXN0ZGlyKQorICAgICAgICBzZWxmLnFlbXVydW5uZXJsb2cgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGlyLCAncWVtdXJ1bm5lcl9sb2cuJXMnICUgc2VsZi5kYXRldGltZSkKKyAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ0JpdEJha2UuUWVtdVJ1bm5lcicpCisgICAgICAgIGxvZ2dlcmhhbmRsZXIgPSBsb2dnaW5nLkZpbGVIYW5kbGVyKHNlbGYucWVtdXJ1bm5lcmxvZykKKyAgICAgICAgbG9nZ2VyaGFuZGxlci5zZXRGb3JtYXR0ZXIobG9nZ2luZy5Gb3JtYXR0ZXIoIiUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIikpCisgICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKGxvZ2dlcmhhbmRsZXIpCisgICAgICAgIG9lLnBhdGguc3ltbGluayhvcy5wYXRoLmJhc2VuYW1lKHNlbGYucWVtdXJ1bm5lcmxvZyksIG9zLnBhdGguam9pbihzZWxmLnRlc3RkaXIsICdxZW11cnVubmVyX2xvZycpLCBmb3JjZT1UcnVlKQorCisgICAgICAgIGlmIGQuZ2V0VmFyKCJESVNUUk8iLCBUcnVlKSA9PSAicG9reS10aW55IjoKKyAgICAgICAgICAgIHNlbGYucnVubmVyID0gUWVtdVRpbnlSdW5uZXIobWFjaGluZT1kLmdldFZhcigiTUFDSElORSIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Rmcz1zZWxmLnJvb3RmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBkaXIgPSBkLmdldFZhcigiVE1QRElSIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwbG95X2Rpcl9pbWFnZSA9IGQuZ2V0VmFyKCJERVBMT1lfRElSX0lNQUdFIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSA9IGQuZ2V0VmFyKCJCQl9PUklHRU5WIiwgRmFsc2UpLmdldFZhcigiRElTUExBWSIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ZpbGUgPSBzZWxmLnFlbXVsb2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsID0gc2VsZi5rZXJuZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vdHRpbWUgPSBpbnQoZC5nZXRWYXIoIlRFU1RfUUVNVUJPT1RfVElNRU9VVCIsIFRydWUpKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucnVubmVyID0gUWVtdVJ1bm5lcihtYWNoaW5lPWQuZ2V0VmFyKCJNQUNISU5FIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdGZzPXNlbGYucm9vdGZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcGRpciA9IGQuZ2V0VmFyKCJUTVBESVIiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBsb3lfZGlyX2ltYWdlID0gZC5nZXRWYXIoIkRFUExPWV9ESVJfSU1BR0UiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ID0gZC5nZXRWYXIoIkJCX09SSUdFTlYiLCBGYWxzZSkuZ2V0VmFyKCJESVNQTEFZIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZmlsZSA9IHNlbGYucWVtdWxvZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290dGltZSA9IGludChkLmdldFZhcigiVEVTVF9RRU1VQk9PVF9USU1FT1VUIiwgVHJ1ZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBfZGlyID0gZHVtcF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcF9ob3N0X2NtZHMgPSBkLmdldFZhcigidGVzdGltYWdlX2R1bXBfaG9zdCIsIFRydWUpKQorCisgICAgICAgIHNlbGYudGFyZ2V0X2R1bXBlciA9IFRhcmdldER1bXBlcihkdW1wX3RhcmdldF9jbWRzLCBkdW1wX2Rpciwgc2VsZi5ydW5uZXIpCisKKyAgICBkZWYgZGVwbG95KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi50ZXN0ZGlyKQorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNlbGYub3JpZ3Jvb3Rmcywgc2VsZi5yb290ZnMpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJFcnJvciBjb3B5aW5nIHJvb3RmczogJXMiICUgZSkKKworICAgICAgICBxZW11bG9nbGluayA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkaXIsICJxZW11X2Jvb3RfbG9nIikKKyAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsocWVtdWxvZ2xpbmspOgorICAgICAgICAgICAgb3MudW5saW5rKHFlbXVsb2dsaW5rKQorICAgICAgICBvcy5zeW1saW5rKHNlbGYucWVtdWxvZywgcWVtdWxvZ2xpbmspCisKKyAgICAgICAgYmIubm90ZSgicm9vdGZzIGZpbGU6ICVzIiAlICBzZWxmLnJvb3RmcykKKyAgICAgICAgYmIubm90ZSgiUWVtdSBsb2cgZmlsZTogJXMiICUgc2VsZi5xZW11bG9nKQorICAgICAgICBzdXBlcihRZW11VGFyZ2V0LCBzZWxmKS5kZXBsb3koKQorCisgICAgZGVmIHN0YXJ0KHNlbGYsIHBhcmFtcz1Ob25lKToKKyAgICAgICAgaWYgc2VsZi5ydW5uZXIuc3RhcnQocGFyYW1zKToKKyAgICAgICAgICAgIHNlbGYuaXAgPSBzZWxmLnJ1bm5lci5pcAorICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBzZWxmLnJ1bm5lci5zZXJ2ZXJfaXAKKyAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IFNTSENvbnRyb2woaXA9c2VsZi5pcCwgbG9nZmlsZT1zZWxmLnNzaGxvZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLnFlbXVsb2cpOgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLnFlbXVsb2csICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgYmIuZXJyb3IoIlFlbXUgbG9nIG91dHB1dCBmcm9tICVzOlxuJXMiICUgKHNlbGYucWVtdWxvZywgZi5yZWFkKCkpKQorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXMgLSBGQUlMRUQgdG8gc3RhcnQgcWVtdSAtIGNoZWNrIHRoZSB0YXNrIGxvZyBhbmQgdGhlIGJvb3QgbG9nIiAlIHNlbGYucG4pCisKKyAgICBkZWYgY2hlY2soc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bm5lci5pc19hbGl2ZSgpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5uZXIuc3RvcCgpCisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5pcCA9IE5vbmUKKyAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBOb25lCisKKyAgICBkZWYgcmVzdGFydChzZWxmLCBwYXJhbXM9Tm9uZSk6CisgICAgICAgIGlmIHNlbGYucnVubmVyLnJlc3RhcnQocGFyYW1zKToKKyAgICAgICAgICAgIHNlbGYuaXAgPSBzZWxmLnJ1bm5lci5pcAorICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBzZWxmLnJ1bm5lci5zZXJ2ZXJfaXAKKyAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IFNTSENvbnRyb2woaXA9c2VsZi5pcCwgbG9nZmlsZT1zZWxmLnNzaGxvZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzIC0gRkFJTEVEIHRvIHJlLXN0YXJ0IHFlbXUgLSBjaGVjayB0aGUgdGFzayBsb2cgYW5kIHRoZSBib290IGxvZyIgJSBzZWxmLnBuKQorCisgICAgZGVmIHJ1bl9zZXJpYWwoc2VsZiwgY29tbWFuZCk6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bm5lci5ydW5fc2VyaWFsKGNvbW1hbmQpCisKKworY2xhc3MgU2ltcGxlUmVtb3RlVGFyZ2V0KEJhc2VUYXJnZXQpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzdXBlcihTaW1wbGVSZW1vdGVUYXJnZXQsIHNlbGYpLl9faW5pdF9fKGQpCisgICAgICAgIGFkZHIgPSBkLmdldFZhcigiVEVTVF9UQVJHRVRfSVAiLCBUcnVlKSBvciBiYi5mYXRhbCgnUGxlYXNlIHNldCBURVNUX1RBUkdFVF9JUCB3aXRoIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBtYWNoaW5lIHlvdSB3YW50IHRvIHJ1biB0aGUgdGVzdHMgb24uJykKKyAgICAgICAgc2VsZi5pcCA9IGFkZHIuc3BsaXQoIjoiKVswXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnBvcnQgPSBhZGRyLnNwbGl0KCI6IilbMV0KKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBzZWxmLnBvcnQgPSBOb25lCisgICAgICAgIGJiLm5vdGUoIlRhcmdldCBJUDogJXMiICUgc2VsZi5pcCkKKyAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBkLmdldFZhcigiVEVTVF9TRVJWRVJfSVAiLCBUcnVlKQorICAgICAgICBpZiBub3Qgc2VsZi5zZXJ2ZXJfaXA6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ2lwJywgJ3JvdXRlJywgJ2dldCcsIHNlbGYuaXAgXSkuc3BsaXQoIlxuIilbMF0uc3BsaXQoKVstMV0KKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiRmFpbGVkIHRvIGRldGVybWluZSB0aGUgaG9zdCBJUCBhZGRyZXNzIChhbHRlcm5hdGl2ZWx5IHlvdSBjYW4gc2V0IFRFU1RfU0VSVkVSX0lQIHdpdGggdGhlIElQIGFkZHJlc3Mgb2YgdGhpcyBtYWNoaW5lKTogJXMiICUgZSkKKyAgICAgICAgYmIubm90ZSgiU2VydmVyIElQOiAlcyIgJSBzZWxmLnNlcnZlcl9pcCkKKworICAgIGRlZiBkZXBsb3koc2VsZik6CisgICAgICAgIHN1cGVyKFNpbXBsZVJlbW90ZVRhcmdldCwgc2VsZikuZGVwbG95KCkKKworICAgIGRlZiBzdGFydChzZWxmLCBwYXJhbXM9Tm9uZSk6CisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IFNTSENvbnRyb2woc2VsZi5pcCwgbG9nZmlsZT1zZWxmLnNzaGxvZywgcG9ydD1zZWxmLnBvcnQpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gTm9uZQorICAgICAgICBzZWxmLmlwID0gTm9uZQorICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IE5vbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjYwMDQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTUgQEAKKyMgRW5hYmxlIG90aGVyIGxheWVycyB0byBoYXZlIG1vZHVsZXMgaW4gdGhlIHNhbWUgbmFtZWQgZGlyZWN0b3J5Citmcm9tIHBrZ3V0aWwgaW1wb3J0IGV4dGVuZF9wYXRoCitfX3BhdGhfXyA9IGV4dGVuZF9wYXRoKF9fcGF0aF9fLCBfX25hbWVfXykKKworCisjIEJvcnJvd2VkIGZyb20gQ2FsbGVkUHJvY2Vzc0Vycm9yCisKK2NsYXNzIENvbW1hbmRFcnJvcihFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXRjb2RlLCBjbWQsIG91dHB1dCA9IE5vbmUpOgorICAgICAgICBzZWxmLnJldGNvZGUgPSByZXRjb2RlCisgICAgICAgIHNlbGYuY21kID0gY21kCisgICAgICAgIHNlbGYub3V0cHV0ID0gb3V0cHV0CisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiQ29tbWFuZCAnJXMnIHJldHVybmVkIG5vbi16ZXJvIGV4aXQgc3RhdHVzICVkIHdpdGggb3V0cHV0OiAlcyIgJSAoc2VsZi5jbWQsIHNlbGYucmV0Y29kZSwgc2VsZi5vdXRwdXQpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9jb21tYW5kcy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9jb21tYW5kcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGUyY2JiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2NvbW1hbmRzLnB5CkBAIC0wLDAgKzEsMjI0IEBACisjIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCisjIERFU0NSSVBUSU9OCisjIFRoaXMgbW9kdWxlIGlzIG1haW5seSB1c2VkIGJ5IHNjcmlwdHMvb2Utc2VsZnRlc3QgYW5kIG1vZHVsZXMgdW5kZXIgbWV0YS9vZXFhL3NlbGZ0ZXN0CisjIEl0IHByb3ZpZGVzIGEgY2xhc3MgYW5kIG1ldGhvZHMgZm9yIHJ1bm5pbmcgY29tbWFuZHMgb24gdGhlIGhvc3QgaW4gYSBjb252aWVuZW50IHdheSBmb3IgdGVzdHMuCisKKworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgbG9nZ2luZworZnJvbSBvZXFhLnV0aWxzIGltcG9ydCBDb21tYW5kRXJyb3IKK2Zyb20gb2VxYS51dGlscyBpbXBvcnQgZnRvb2xzCitpbXBvcnQgcmUKK2ltcG9ydCBjb250ZXh0bGliCisKK2NsYXNzIENvbW1hbmQob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZCwgYmc9RmFsc2UsIHRpbWVvdXQ9Tm9uZSwgZGF0YT1Ob25lLCAqKm9wdGlvbnMpOgorCisgICAgICAgIHNlbGYuZGVmYXVsdG9wdHMgPSB7CisgICAgICAgICAgICAic3Rkb3V0Ijogc3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgInN0ZGVyciI6IHN1YnByb2Nlc3MuU1RET1VULAorICAgICAgICAgICAgInN0ZGluIjogTm9uZSwKKyAgICAgICAgICAgICJzaGVsbCI6IEZhbHNlLAorICAgICAgICAgICAgImJ1ZnNpemUiOiAtMSwKKyAgICAgICAgfQorCisgICAgICAgIHNlbGYuY21kID0gY29tbWFuZAorICAgICAgICBzZWxmLmJnID0gYmcKKyAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAorICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCisKKyAgICAgICAgc2VsZi5vcHRpb25zID0gZGljdChzZWxmLmRlZmF1bHRvcHRzKQorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuY21kLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIHNlbGYub3B0aW9uc1sic2hlbGwiXSA9IFRydWUKKyAgICAgICAgaWYgc2VsZi5kYXRhOgorICAgICAgICAgICAgc2VsZi5vcHRpb25zWydzdGRpbiddID0gc3VicHJvY2Vzcy5QSVBFCisgICAgICAgIHNlbGYub3B0aW9ucy51cGRhdGUob3B0aW9ucykKKworICAgICAgICBzZWxmLnN0YXR1cyA9IE5vbmUKKyAgICAgICAgc2VsZi5vdXRwdXQgPSBOb25lCisgICAgICAgIHNlbGYuZXJyb3IgPSBOb25lCisgICAgICAgIHNlbGYudGhyZWFkID0gTm9uZQorCisgICAgICAgIHNlbGYubG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoInV0aWxzLmNvbW1hbmRzIikKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHNlbGYucHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oc2VsZi5jbWQsICoqc2VsZi5vcHRpb25zKQorCisgICAgICAgIGRlZiBjb21tVGhyZWFkKCk6CisgICAgICAgICAgICBzZWxmLm91dHB1dCwgc2VsZi5lcnJvciA9IHNlbGYucHJvY2Vzcy5jb21tdW5pY2F0ZShzZWxmLmRhdGEpCisKKyAgICAgICAgc2VsZi50aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1jb21tVGhyZWFkKQorICAgICAgICBzZWxmLnRocmVhZC5zdGFydCgpCisKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIlJ1bm5pbmcgY29tbWFuZCAnJXMnIiAlIHNlbGYuY21kKQorCisgICAgICAgIGlmIG5vdCBzZWxmLmJnOgorICAgICAgICAgICAgc2VsZi50aHJlYWQuam9pbihzZWxmLnRpbWVvdXQpCisgICAgICAgICAgICBzZWxmLnN0b3AoKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIGlmIHNlbGYudGhyZWFkLmlzQWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYucHJvY2Vzcy50ZXJtaW5hdGUoKQorICAgICAgICAgICAgIyBsZXQncyBnaXZlIGl0IG1vcmUgdGltZSB0byB0ZXJtaW5hdGUgZ3JhY2VmdWxseSBiZWZvcmUga2lsbGluZyBpdAorICAgICAgICAgICAgc2VsZi50aHJlYWQuam9pbig1KQorICAgICAgICAgICAgaWYgc2VsZi50aHJlYWQuaXNBbGl2ZSgpOgorICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzcy5raWxsKCkKKyAgICAgICAgICAgICAgICBzZWxmLnRocmVhZC5qb2luKCkKKworICAgICAgICBzZWxmLm91dHB1dCA9IHNlbGYub3V0cHV0LnJzdHJpcCgpCisgICAgICAgIHNlbGYuc3RhdHVzID0gc2VsZi5wcm9jZXNzLnBvbGwoKQorCisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJDb21tYW5kICclcycgcmV0dXJuZWQgJWQgYXMgZXhpdCBjb2RlLiIgJSAoc2VsZi5jbWQsIHNlbGYuc3RhdHVzKSkKKyAgICAgICAgIyBsb2dnaW5nIHRoZSBjb21wbGV0ZSBvdXRwdXQgaXMgaW5zYW5lCisgICAgICAgICMgYml0YmFrZSAtZSBvdXRwdXQgaXMgcmVhbGx5IGJpZworICAgICAgICAjIGFuZCBtYWtlcyB0aGUgbG9nIGZpbGUgdXNlbGVzcworICAgICAgICBpZiBzZWxmLnN0YXR1czoKKyAgICAgICAgICAgIGxvdXQgPSAiXG4iLmpvaW4oc2VsZi5vdXRwdXQuc3BsaXRsaW5lcygpWy0yMDpdKQorICAgICAgICAgICAgc2VsZi5sb2cuZGVidWcoIkxhc3QgMjAgbGluZXM6XG4lcyIgJSBsb3V0KQorCisKK2NsYXNzIFJlc3VsdChvYmplY3QpOgorICAgIHBhc3MKKworCitkZWYgcnVuQ21kKGNvbW1hbmQsIGlnbm9yZV9zdGF0dXM9RmFsc2UsIHRpbWVvdXQ9Tm9uZSwgYXNzZXJ0X2Vycm9yPVRydWUsICoqb3B0aW9ucyk6CisgICAgcmVzdWx0ID0gUmVzdWx0KCkKKworICAgIGNtZCA9IENvbW1hbmQoY29tbWFuZCwgdGltZW91dD10aW1lb3V0LCAqKm9wdGlvbnMpCisgICAgY21kLnJ1bigpCisKKyAgICByZXN1bHQuY29tbWFuZCA9IGNvbW1hbmQKKyAgICByZXN1bHQuc3RhdHVzID0gY21kLnN0YXR1cworICAgIHJlc3VsdC5vdXRwdXQgPSBjbWQub3V0cHV0CisgICAgcmVzdWx0LnBpZCA9IGNtZC5wcm9jZXNzLnBpZAorCisgICAgaWYgcmVzdWx0LnN0YXR1cyBhbmQgbm90IGlnbm9yZV9zdGF0dXM6CisgICAgICAgIGlmIGFzc2VydF9lcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJDb21tYW5kICclcycgcmV0dXJuZWQgbm9uLXplcm8gZXhpdCBzdGF0dXMgJWQ6XG4lcyIgJSAoY29tbWFuZCwgcmVzdWx0LnN0YXR1cywgcmVzdWx0Lm91dHB1dCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBDb21tYW5kRXJyb3IocmVzdWx0LnN0YXR1cywgY29tbWFuZCwgcmVzdWx0Lm91dHB1dCkKKworICAgIHJldHVybiByZXN1bHQKKworCitkZWYgYml0YmFrZShjb21tYW5kLCBpZ25vcmVfc3RhdHVzPUZhbHNlLCB0aW1lb3V0PU5vbmUsIHBvc3Rjb25maWc9Tm9uZSwgKipvcHRpb25zKToKKworICAgIGlmIHBvc3Rjb25maWc6CisgICAgICAgIHBvc3Rjb25maWdfZmlsZSA9IG9zLnBhdGguam9pbihvcy5lbnZpcm9uLmdldCgnQlVJTERESVInKSwgJ29lcWEtcG9zdC5jb25mJykKKyAgICAgICAgZnRvb2xzLndyaXRlX2ZpbGUocG9zdGNvbmZpZ19maWxlLCBwb3N0Y29uZmlnKQorICAgICAgICBleHRyYV9hcmdzID0gIi1SICVzIiAlIHBvc3Rjb25maWdfZmlsZQorICAgIGVsc2U6CisgICAgICAgIGV4dHJhX2FyZ3MgPSAiIgorCisgICAgaWYgaXNpbnN0YW5jZShjb21tYW5kLCBiYXNlc3RyaW5nKToKKyAgICAgICAgY21kID0gImJpdGJha2UgIiArIGV4dHJhX2FyZ3MgKyAiICIgKyBjb21tYW5kCisgICAgZWxzZToKKyAgICAgICAgY21kID0gWyAiYml0YmFrZSIgXSArIFthIGZvciBhIGluIChjb21tYW5kICsgZXh0cmFfYXJncy5zcGxpdCgiICIpKSBpZiBhIG5vdCBpbiBbIiJdXQorCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gcnVuQ21kKGNtZCwgaWdub3JlX3N0YXR1cywgdGltZW91dCwgKipvcHRpb25zKQorICAgIGZpbmFsbHk6CisgICAgICAgIGlmIHBvc3Rjb25maWc6CisgICAgICAgICAgICBvcy5yZW1vdmUocG9zdGNvbmZpZ19maWxlKQorCisKK2RlZiBnZXRfYmJfZW52KHRhcmdldD1Ob25lLCBwb3N0Y29uZmlnPU5vbmUpOgorICAgIGlmIHRhcmdldDoKKyAgICAgICAgcmV0dXJuIGJpdGJha2UoIi1lICVzIiAlIHRhcmdldCwgcG9zdGNvbmZpZz1wb3N0Y29uZmlnKS5vdXRwdXQKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gYml0YmFrZSgiLWUiLCBwb3N0Y29uZmlnPXBvc3Rjb25maWcpLm91dHB1dAorCitkZWYgZ2V0X2JiX3Zhcih2YXIsIHRhcmdldD1Ob25lLCBwb3N0Y29uZmlnPU5vbmUpOgorICAgIHZhbCA9IE5vbmUKKyAgICBiYmVudiA9IGdldF9iYl9lbnYodGFyZ2V0LCBwb3N0Y29uZmlnPXBvc3Rjb25maWcpCisgICAgbGFzdGxpbmUgPSBOb25lCisgICAgZm9yIGxpbmUgaW4gYmJlbnYuc3BsaXRsaW5lcygpOgorICAgICAgICBpZiByZS5zZWFyY2goIl4oZXhwb3J0ICk/JXM9IiAlIHZhciwgbGluZSk6CisgICAgICAgICAgICB2YWwgPSBsaW5lLnNwbGl0KCc9JywgMSlbMV0KKyAgICAgICAgICAgIHZhbCA9IHZhbC5zdHJpcCgnXCInKQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxpZiByZS5tYXRjaCgidW5zZXQgJXMkIiAlIHZhciwgbGluZSk6CisgICAgICAgICAgICAjIEhhbmRsZSBbdW5leHBvcnRdIHZhcmlhYmxlcworICAgICAgICAgICAgaWYgbGFzdGxpbmUuc3RhcnRzd2l0aCgnIyAgICInKToKKyAgICAgICAgICAgICAgICB2YWwgPSBsYXN0bGluZS5zcGxpdCgnXCInKVsxXQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGxhc3RsaW5lID0gbGluZQorICAgIHJldHVybiB2YWwKKworZGVmIGdldF90ZXN0X2xheWVyKCk6CisgICAgbGF5ZXJzID0gZ2V0X2JiX3ZhcigiQkJMQVlFUlMiKS5zcGxpdCgpCisgICAgdGVzdGxheWVyID0gTm9uZQorICAgIGZvciBsIGluIGxheWVyczoKKyAgICAgICAgaWYgJ34nIGluIGw6CisgICAgICAgICAgICBsID0gb3MucGF0aC5leHBhbmR1c2VyKGwpCisgICAgICAgIGlmICIvbWV0YS1zZWxmdGVzdCIgaW4gbCBhbmQgb3MucGF0aC5pc2RpcihsKToKKyAgICAgICAgICAgIHRlc3RsYXllciA9IGwKKyAgICAgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIHRlc3RsYXllcgorCitkZWYgY3JlYXRlX3RlbXBfbGF5ZXIodGVtcGxheWVyZGlyLCB0ZW1wbGF5ZXJuYW1lLCBwcmlvcml0eT05OTksIHJlY2lwZXBhdGhzcGVjPSdyZWNpcGVzLSovKicpOgorICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguam9pbih0ZW1wbGF5ZXJkaXIsICdjb25mJykpCisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbih0ZW1wbGF5ZXJkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSwgJ3cnKSBhcyBmOgorICAgICAgICBmLndyaXRlKCdCQlBBVEggLj0gIjoke0xBWUVSRElSfSJcbicpCisgICAgICAgIGYud3JpdGUoJ0JCRklMRVMgKz0gIiR7TEFZRVJESVJ9LyVzLyouYmIgXFwnICUgcmVjaXBlcGF0aHNwZWMpCisgICAgICAgIGYud3JpdGUoJyAgICAgICAgICAgICR7TEFZRVJESVJ9LyVzLyouYmJhcHBlbmQiXG4nICUgcmVjaXBlcGF0aHNwZWMpCisgICAgICAgIGYud3JpdGUoJ0JCRklMRV9DT0xMRUNUSU9OUyArPSAiJXMiXG4nICUgdGVtcGxheWVybmFtZSkKKyAgICAgICAgZi53cml0ZSgnQkJGSUxFX1BBVFRFUk5fJXMgPSAiXiR7TEFZRVJESVJ9LyJcbicgJSB0ZW1wbGF5ZXJuYW1lKQorICAgICAgICBmLndyaXRlKCdCQkZJTEVfUFJJT1JJVFlfJXMgPSAiJWQiXG4nICUgKHRlbXBsYXllcm5hbWUsIHByaW9yaXR5KSkKKyAgICAgICAgZi53cml0ZSgnQkJGSUxFX1BBVFRFUk5fSUdOT1JFX0VNUFRZXyVzID0gIjEiXG4nICUgdGVtcGxheWVybmFtZSkKKworCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIHJ1bnFlbXUocG4sIHRlc3QpOgorCisgICAgaW1wb3J0IGJiLnRpbmZvaWwKKyAgICBpbXBvcnQgYmIuYnVpbGQKKworICAgIHRpbmZvaWwgPSBiYi50aW5mb2lsLlRpbmZvaWwoKQorICAgIHRpbmZvaWwucHJlcGFyZShGYWxzZSkKKyAgICB0cnk6CisgICAgICAgIHRpbmZvaWwubG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuV0FSTklORykKKyAgICAgICAgaW1wb3J0IG9lcWEudGFyZ2V0Y29udHJvbAorICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhLnNldFZhcigiVEVTVF9MT0dfRElSIiwgIiR7V09SS0RJUn0vdGVzdGltYWdlIikKKyAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YS5zZXRWYXIoIlRFU1RfUUVNVUJPT1RfVElNRU9VVCIsICIxMDAwIikKKyAgICAgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisgICAgICAgIHJlY2lwZWZpbGUgPSBvZS5yZWNpcGV1dGlscy5wbl90b19yZWNpcGUodGluZm9pbC5jb29rZXIsIHBuKQorICAgICAgICByZWNpcGVkYXRhID0gb2UucmVjaXBldXRpbHMucGFyc2VfcmVjaXBlKHJlY2lwZWZpbGUsIFtdLCB0aW5mb2lsLmNvbmZpZ19kYXRhKQorCisgICAgICAgICMgVGhlIFFlbXVSdW5uZXIgbG9nIGlzIHNhdmVkIG91dCwgYnV0IHdlIG5lZWQgdG8gZW5zdXJlIGl0IGlzIGF0IHRoZSByaWdodAorICAgICAgICAjIGxvZyBsZXZlbCAoYW5kIHRoZW4gZW5zdXJlIHRoYXQgc2luY2UgaXQncyBhIGNoaWxkIG9mIHRoZSBCaXRCYWtlIGxvZ2dlciwKKyAgICAgICAgIyB3ZSBkaXNhYmxlIHByb3BhZ2F0aW9uIHNvIHdlIGRvbid0IHRoZW4gc2VlIHRoZSBsb2cgZXZlbnRzIG9uIHRoZSBjb25zb2xlKQorICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZS5RZW11UnVubmVyJykKKyAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisgICAgICAgIGxvZ2dlci5wcm9wYWdhdGUgPSBGYWxzZQorICAgICAgICBsb2dkaXIgPSByZWNpcGVkYXRhLmdldFZhcigiVEVTVF9MT0dfRElSIiwgVHJ1ZSkKKworICAgICAgICBxZW11ID0gb2VxYS50YXJnZXRjb250cm9sLlFlbXVUYXJnZXQocmVjaXBlZGF0YSkKKyAgICBmaW5hbGx5OgorICAgICAgICAjIFdlIG5lZWQgdG8gc2h1dCBkb3duIHRpbmZvaWwgZWFybHkgaGVyZSBpbiBjYXNlIHdlIGFjdHVhbGx5IHdhbnQKKyAgICAgICAgIyB0byBydW4gdGluZm9pbC11c2luZyB1dGlsaXRpZXMgd2l0aCB0aGUgcnVubmluZyBRRU1VIGluc3RhbmNlLgorICAgICAgICAjIEx1Y2tpbHkgUWVtdVRhcmdldCBkb2Vzbid0IG5lZWQgaXQgYWZ0ZXIgdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICB0aW5mb2lsLnNodXRkb3duKCkKKworICAgIHRyeToKKyAgICAgICAgcWVtdS5kZXBsb3koKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBxZW11LnN0YXJ0KCkKKyAgICAgICAgZXhjZXB0IGJiLmJ1aWxkLkZ1bmNGYWlsZWQ6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0ZhaWxlZCB0byBzdGFydCBRRU1VIC0gc2VlIHRoZSBsb2dzIGluICVzJyAlIGxvZ2RpcikKKworICAgICAgICB5aWVsZCBxZW11CisKKyAgICBmaW5hbGx5OgorICAgICAgICB0cnk6CisgICAgICAgICAgICBxZW11LnN0b3AoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvZGVjb3JhdG9ycy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9kZWNvcmF0b3JzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MmE4OGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvZGVjb3JhdG9ycy5weQpAQCAtMCwwICsxLDIyMiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgU29tZSBjdXN0b20gZGVjb3JhdG9ycyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHVuaXR0ZXN0cworIyBNb3N0IHVzZWZ1bCBpcyBza2lwVW5sZXNzUGFzc2VkIHdoaWNoIGNhbiBiZSB1c2VkIGZvcgorIyBjcmVhdGluZyBkZXBlbmRlY2llcyBiZXR3ZWVuIHR3byB0ZXN0IG1ldGhvZHMuCisKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRocmVhZGluZworaW1wb3J0IHNpZ25hbAorZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCisKKyNnZXQgdGhlICJyZXN1bHQiIG9iamVjdCBmcm9tIG9uZSBvZiB0aGUgdXBwZXIgZnJhbWVzIHByb3ZpZGVkIHRoYXQgb25lIG9mIHRoZXNlIHVwcGVyIGZyYW1lcyBpcyBhIHVuaXR0ZXN0LmNhc2UgZnJhbWUKK2NsYXNzIGdldFJlc3VsdHMob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICNkeW5hbWljYWxseSBkZXRlcm1pbmUgdGhlIHVuaXR0ZXN0LmNhc2UgZnJhbWUgYW5kIHVzZSBpdCB0byBnZXQgdGhlIG5hbWUgb2YgdGhlIHRlc3QgbWV0aG9kCisgICAgICAgIGlkZW50ID0gdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkuaWRlbnQKKyAgICAgICAgdXBwZXJmID0gc3lzLl9jdXJyZW50X2ZyYW1lcygpW2lkZW50XQorICAgICAgICB3aGlsZSAodXBwZXJmLmZfZ2xvYmFsc1snX19uYW1lX18nXSAhPSAndW5pdHRlc3QuY2FzZScpOgorICAgICAgICAgICAgdXBwZXJmID0gdXBwZXJmLmZfYmFjaworCisgICAgICAgIGRlZiBoYW5kbGVMaXN0KGl0ZW1zKToKKyAgICAgICAgICAgIHJldCA9IFtdCisgICAgICAgICAgICAjIGl0ZW1zIGlzIGEgbGlzdCBvZiB0dXBsZXMsICh0ZXN0LCBmYWlsdXJlKSBvciAoX0Vycm9ySGFuZGxlcigpLCBFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGZvciBpIGluIGl0ZW1zOgorICAgICAgICAgICAgICAgIHMgPSBpWzBdLmlkKCkKKyAgICAgICAgICAgICAgICAjSGFuZGxlIHRoZSBfRXJyb3JIb2xkZXIgb2JqZWN0cyBmcm9tIHNraXBNb2R1bGUgZmFpbHVyZXMKKyAgICAgICAgICAgICAgICBpZiAic2V0VXBNb2R1bGUgKCIgaW4gczoKKyAgICAgICAgICAgICAgICAgICAgcmV0LmFwcGVuZChzLnJlcGxhY2UoInNldFVwTW9kdWxlICgiLCAiIikucmVwbGFjZSgiKSIsIiIpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldC5hcHBlbmQocykKKyAgICAgICAgICAgIHJldHVybiByZXQKKyAgICAgICAgc2VsZi5mYWlsbGlzdCA9IGhhbmRsZUxpc3QodXBwZXJmLmZfbG9jYWxzWydyZXN1bHQnXS5mYWlsdXJlcykKKyAgICAgICAgc2VsZi5lcnJvcmxpc3QgPSBoYW5kbGVMaXN0KHVwcGVyZi5mX2xvY2Fsc1sncmVzdWx0J10uZXJyb3JzKQorICAgICAgICBzZWxmLnNraXBsaXN0ID0gaGFuZGxlTGlzdCh1cHBlcmYuZl9sb2NhbHNbJ3Jlc3VsdCddLnNraXBwZWQpCisKKyAgICBkZWYgZ2V0RmFpbExpc3Qoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmZhaWxsaXN0CisKKyAgICBkZWYgZ2V0RXJyb3JMaXN0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5lcnJvcmxpc3QKKworICAgIGRlZiBnZXRTa2lwTGlzdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2tpcGxpc3QKKworY2xhc3Mgc2tpcElmRmFpbHVyZShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsdGVzdGNhc2UpOgorICAgICAgICBzZWxmLnRlc3RjYXNlID0gdGVzdGNhc2UKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLGYpOgorICAgICAgICBkZWYgd3JhcHBlZF9mKCphcmdzKToKKyAgICAgICAgICAgIHJlcyA9IGdldFJlc3VsdHMoKQorICAgICAgICAgICAgaWYgc2VsZi50ZXN0Y2FzZSBpbiAocmVzLmdldEZhaWxMaXN0KCkgb3IgcmVzLmdldEVycm9yTGlzdCgpKToKKyAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiVGVzdGNhc2UgZGVwZW5kZW5jeSBub3QgbWV0OiAlcyIgJSBzZWxmLnRlc3RjYXNlKQorICAgICAgICAgICAgcmV0dXJuIGYoKmFyZ3MpCisgICAgICAgIHdyYXBwZWRfZi5fX25hbWVfXyA9IGYuX19uYW1lX18KKyAgICAgICAgcmV0dXJuIHdyYXBwZWRfZgorCitjbGFzcyBza2lwSWZTa2lwcGVkKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZix0ZXN0Y2FzZSk6CisgICAgICAgIHNlbGYudGVzdGNhc2UgPSB0ZXN0Y2FzZQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsZik6CisgICAgICAgIGRlZiB3cmFwcGVkX2YoKmFyZ3MpOgorICAgICAgICAgICAgcmVzID0gZ2V0UmVzdWx0cygpCisgICAgICAgICAgICBpZiBzZWxmLnRlc3RjYXNlIGluIHJlcy5nZXRTa2lwTGlzdCgpOgorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJUZXN0Y2FzZSBkZXBlbmRlbmN5IG5vdCBtZXQ6ICVzIiAlIHNlbGYudGVzdGNhc2UpCisgICAgICAgICAgICByZXR1cm4gZigqYXJncykKKyAgICAgICAgd3JhcHBlZF9mLl9fbmFtZV9fID0gZi5fX25hbWVfXworICAgICAgICByZXR1cm4gd3JhcHBlZF9mCisKK2NsYXNzIHNraXBVbmxlc3NQYXNzZWQob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLHRlc3RjYXNlKToKKyAgICAgICAgc2VsZi50ZXN0Y2FzZSA9IHRlc3RjYXNlCisKKyAgICBkZWYgX19jYWxsX18oc2VsZixmKToKKyAgICAgICAgZGVmIHdyYXBwZWRfZigqYXJncyk6CisgICAgICAgICAgICByZXMgPSBnZXRSZXN1bHRzKCkKKyAgICAgICAgICAgIGlmIHNlbGYudGVzdGNhc2UgaW4gcmVzLmdldFNraXBMaXN0KCkgb3IgXAorICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3RjYXNlIGluIHJlcy5nZXRGYWlsTGlzdCgpIG9yIFwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0Y2FzZSBpbiByZXMuZ2V0RXJyb3JMaXN0KCk6CisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlRlc3RjYXNlIGRlcGVuZGVuY3kgbm90IG1ldDogJXMiICUgc2VsZi50ZXN0Y2FzZSkKKyAgICAgICAgICAgIHJldHVybiBmKCphcmdzKQorICAgICAgICB3cmFwcGVkX2YuX19uYW1lX18gPSBmLl9fbmFtZV9fCisgICAgICAgIHdyYXBwZWRfZi5fZGVwZW5kc19vbiA9IHNlbGYudGVzdGNhc2UKKyAgICAgICAgcmV0dXJuIHdyYXBwZWRfZgorCitjbGFzcyB0ZXN0Y2FzZShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfY2FzZSk6CisgICAgICAgIHNlbGYudGVzdF9jYXNlID0gdGVzdF9jYXNlCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgZnVuYyk6CisgICAgICAgIGRlZiB3cmFwcGVkX2YoKmFyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3MpCisgICAgICAgIHdyYXBwZWRfZi50ZXN0X2Nhc2UgPSBzZWxmLnRlc3RfY2FzZQorICAgICAgICB3cmFwcGVkX2YuX19uYW1lX18gPSBmdW5jLl9fbmFtZV9fCisgICAgICAgIHJldHVybiB3cmFwcGVkX2YKKworY2xhc3MgTm9QYXJzaW5nRmlsdGVyKGxvZ2dpbmcuRmlsdGVyKToKKyAgICBkZWYgZmlsdGVyKHNlbGYsIHJlY29yZCk6CisgICAgICAgIHJldHVybiByZWNvcmQubGV2ZWxubyA9PSAxMDAKKworZGVmIExvZ1Jlc3VsdHMob3JpZ2luYWxfY2xhc3MpOgorICAgIG9yaWdfbWV0aG9kID0gb3JpZ2luYWxfY2xhc3MucnVuCisKKyAgICAjcmV3cml0ZSB0aGUgcnVuIG1ldGhvZCBvZiB1bml0dGVzdC5UZXN0Q2FzZSB0byBhZGQgdGVzdGNhc2UgbG9nZ2luZworICAgIGRlZiBydW4oc2VsZiwgcmVzdWx0LCAqYXJncywgKiprd3MpOgorICAgICAgICBvcmlnX21ldGhvZChzZWxmLCByZXN1bHQsICphcmdzLCAqKmt3cykKKyAgICAgICAgcGFzc2VkID0gVHJ1ZQorICAgICAgICB0ZXN0TWV0aG9kID0gZ2V0YXR0cihzZWxmLCBzZWxmLl90ZXN0TWV0aG9kTmFtZSkKKyAgICAgICAgI2lmIHRlc3QgY2FzZSBpcyBkZWNvcmF0ZWQgdGhlbiB1c2UgaXQncyBudW1iZXIsIGVsc2UgdXNlIGl0J3MgbmFtZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0X2Nhc2UgPSB0ZXN0TWV0aG9kLnRlc3RfY2FzZQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICB0ZXN0X2Nhc2UgPSBzZWxmLl90ZXN0TWV0aG9kTmFtZQorCisgICAgICAgIGNsYXNzX25hbWUgPSBzdHIodGVzdE1ldGhvZC5pbV9jbGFzcykuc3BsaXQoIiciKVsxXQorCisgICAgICAgICNjcmVhdGUgY3VzdG9tIGxvZ2dpbmcgbGV2ZWwgZm9yIGZpbHRlcmluZy4KKyAgICAgICAgY3VzdG9tX2xvZ19sZXZlbCA9IDEwMAorICAgICAgICBsb2dnaW5nLmFkZExldmVsTmFtZShjdXN0b21fbG9nX2xldmVsLCAnUkVTVUxUUycpCisgICAgICAgIGNhbGxlciA9IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pCisKKyAgICAgICAgZGVmIHJlc3VsdHMoc2VsZiwgbWVzc2FnZSwgKmFyZ3MsICoqa3dzKToKKyAgICAgICAgICAgIGlmIHNlbGYuaXNFbmFibGVkRm9yKGN1c3RvbV9sb2dfbGV2ZWwpOgorICAgICAgICAgICAgICAgIHNlbGYubG9nKGN1c3RvbV9sb2dfbGV2ZWwsIG1lc3NhZ2UsICphcmdzLCAqKmt3cykKKyAgICAgICAgbG9nZ2luZy5Mb2dnZXIucmVzdWx0cyA9IHJlc3VsdHMKKworICAgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGZpbGVuYW1lPW9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwncmVzdWx0cy0nK2NhbGxlcisnLmxvZycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVtb2RlPSd3JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9JyUoYXNjdGltZSlzIC0gJShuYW1lKXMgLSAlKGxldmVsbmFtZSlzIC0gJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVmbXQ9JyVIOiVNOiVTJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbD1jdXN0b21fbG9nX2xldmVsKQorICAgICAgICBmb3IgaGFuZGxlciBpbiBsb2dnaW5nLnJvb3QuaGFuZGxlcnM6CisgICAgICAgICAgICBoYW5kbGVyLmFkZEZpbHRlcihOb1BhcnNpbmdGaWx0ZXIoKSkKKyAgICAgICAgbG9jYWxfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoY2FsbGVyKQorCisgICAgICAgICNjaGVjayBzdGF0dXMgb2YgdGVzdHMgYW5kIHJlY29yZCBpdAorCisgICAgICAgIGZvciAobmFtZSwgbXNnKSBpbiByZXN1bHQuZXJyb3JzOgorICAgICAgICAgICAgaWYgKHNlbGYuX3Rlc3RNZXRob2ROYW1lID09IHN0cihuYW1lKS5zcGxpdCgnICcpWzBdKSBhbmQgKGNsYXNzX25hbWUgaW4gc3RyKG5hbWUpLnNwbGl0KCcgJylbMV0pOgorICAgICAgICAgICAgICAgIGxvY2FsX2xvZy5yZXN1bHRzKCJUZXN0Y2FzZSAiK3N0cih0ZXN0X2Nhc2UpKyI6IEVSUk9SIikKKyAgICAgICAgICAgICAgICBsb2NhbF9sb2cucmVzdWx0cygiVGVzdGNhc2UgIitzdHIodGVzdF9jYXNlKSsiOlxuIittc2cpCisgICAgICAgICAgICAgICAgcGFzc2VkID0gRmFsc2UKKyAgICAgICAgZm9yIChuYW1lLCBtc2cpIGluIHJlc3VsdC5mYWlsdXJlczoKKyAgICAgICAgICAgIGlmIChzZWxmLl90ZXN0TWV0aG9kTmFtZSA9PSBzdHIobmFtZSkuc3BsaXQoJyAnKVswXSkgYW5kIChjbGFzc19uYW1lIGluIHN0cihuYW1lKS5zcGxpdCgnICcpWzFdKToKKyAgICAgICAgICAgICAgICBsb2NhbF9sb2cucmVzdWx0cygiVGVzdGNhc2UgIitzdHIodGVzdF9jYXNlKSsiOiBGQUlMRUQiKQorICAgICAgICAgICAgICAgIGxvY2FsX2xvZy5yZXN1bHRzKCJUZXN0Y2FzZSAiK3N0cih0ZXN0X2Nhc2UpKyI6XG4iK21zZykKKyAgICAgICAgICAgICAgICBwYXNzZWQgPSBGYWxzZQorICAgICAgICBmb3IgKG5hbWUsIG1zZykgaW4gcmVzdWx0LnNraXBwZWQ6CisgICAgICAgICAgICBpZiAoc2VsZi5fdGVzdE1ldGhvZE5hbWUgPT0gc3RyKG5hbWUpLnNwbGl0KCcgJylbMF0pIGFuZCAoY2xhc3NfbmFtZSBpbiBzdHIobmFtZSkuc3BsaXQoJyAnKVsxXSk6CisgICAgICAgICAgICAgICAgbG9jYWxfbG9nLnJlc3VsdHMoIlRlc3RjYXNlICIrc3RyKHRlc3RfY2FzZSkrIjogU0tJUFBFRCIpCisgICAgICAgICAgICAgICAgcGFzc2VkID0gRmFsc2UKKyAgICAgICAgaWYgcGFzc2VkOgorICAgICAgICAgICAgbG9jYWxfbG9nLnJlc3VsdHMoIlRlc3RjYXNlICIrc3RyKHRlc3RfY2FzZSkrIjogUEFTU0VEIikKKworICAgIG9yaWdpbmFsX2NsYXNzLnJ1biA9IHJ1bgorICAgIHJldHVybiBvcmlnaW5hbF9jbGFzcworCitjbGFzcyBUaW1lT3V0KEJhc2VFeGNlcHRpb24pOgorICAgIHBhc3MKKworZGVmIHRpbWVvdXQoc2Vjb25kcyk6CisgICAgZGVmIGRlY29yYXRvcihmbik6CisgICAgICAgIGlmIGhhc2F0dHIoc2lnbmFsLCAnYWxhcm0nKToKKyAgICAgICAgICAgIEB3cmFwcyhmbikKKyAgICAgICAgICAgIGRlZiB3cmFwcGVkX2YoKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgICAgIGN1cnJlbnRfZnJhbWUgPSBzeXMuX2dldGZyYW1lKCkKKyAgICAgICAgICAgICAgICBkZWYgcmFpc2VUaW1lT3V0KHNpZ25hbCwgZnJhbWUpOgorICAgICAgICAgICAgICAgICAgICBpZiBmcmFtZSBpcyBub3QgY3VycmVudF9mcmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFRpbWVPdXQoJyVzIHNlY29uZHMnICUgc2Vjb25kcykKKyAgICAgICAgICAgICAgICBwcmV2X2hhbmRsZXIgPSBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCByYWlzZVRpbWVPdXQpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzaWduYWwuYWxhcm0oc2Vjb25kcykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuKCphcmdzLCAqKmt3KQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgwKQorICAgICAgICAgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBwcmV2X2hhbmRsZXIpCisgICAgICAgICAgICByZXR1cm4gd3JhcHBlZF9mCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gZm4KKyAgICByZXR1cm4gZGVjb3JhdG9yCisKK19fdGFnX3ByZWZpeCA9ICJ0YWdfXyIKK2RlZiB0YWcoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAiIiJEZWNvcmF0b3IgdGhhdCBhZGRzIGF0dHJpYnV0ZXMgdG8gY2xhc3NlcyBvciBmdW5jdGlvbnMKKyAgICBmb3IgdXNlIHdpdGggdGhlIEF0dHJpYnV0ZSAoLWEpIHBsdWdpbi4KKyAgICAiIiIKKyAgICBkZWYgd3JhcF9vYihvYik6CisgICAgICAgIGZvciBuYW1lIGluIGFyZ3M6CisgICAgICAgICAgICBzZXRhdHRyKG9iLCBfX3RhZ19wcmVmaXggKyBuYW1lLCBUcnVlKQorICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4ga3dhcmdzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgc2V0YXR0cihvYiwgX190YWdfcHJlZml4ICsgbmFtZSwgdmFsdWUpCisgICAgICAgIHJldHVybiBvYgorICAgIHJldHVybiB3cmFwX29iCisKK2RlZiBnZXR0YWcob2JqLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CisgICAga2V5ID0gX190YWdfcHJlZml4ICsga2V5CisgICAgaWYgbm90IGlzaW5zdGFuY2Uob2JqLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgIHJldHVybiBnZXRhdHRyKG9iaiwga2V5LCBkZWZhdWx0KQorICAgIHRjX21ldGhvZCA9IGdldGF0dHIob2JqLCBvYmouX3Rlc3RNZXRob2ROYW1lKQorICAgIHJldCA9IGdldGF0dHIodGNfbWV0aG9kLCBrZXksIGdldGF0dHIob2JqLCBrZXksIGRlZmF1bHQpKQorICAgIHJldHVybiByZXQKKworZGVmIGdldEFsbFRhZ3Mob2JqKToKKyAgICBkZWYgX19nZXR0YWdzKG8pOgorICAgICAgICByID0ge2tbbGVuKF9fdGFnX3ByZWZpeCk6XTpnZXRhdHRyKG8saykgZm9yIGsgaW4gZGlyKG8pIGlmIGsuc3RhcnRzd2l0aChfX3RhZ19wcmVmaXgpfQorICAgICAgICByZXR1cm4gcgorICAgIGlmIG5vdCBpc2luc3RhbmNlKG9iaiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICByZXR1cm4gX19nZXR0YWdzKG9iaikKKyAgICB0Y19tZXRob2QgPSBnZXRhdHRyKG9iaiwgb2JqLl90ZXN0TWV0aG9kTmFtZSkKKyAgICByZXQgPSBfX2dldHRhZ3Mob2JqKQorICAgIHJldC51cGRhdGUoX19nZXR0YWdzKHRjX21ldGhvZCkpCisgICAgcmV0dXJuIHJldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2R1bXAucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvZHVtcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWU4NzFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2R1bXAucHkKQEAgLTAsMCArMSw4NyBAQAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgZXJybm8KK2ltcG9ydCBkYXRldGltZQoraW1wb3J0IGl0ZXJ0b29scworZnJvbSBjb21tYW5kcyBpbXBvcnQgcnVuQ21kCisKK2RlZiBnZXRfaG9zdF9kdW1wZXIoZCk6CisgICAgY21kcyA9IGQuZ2V0VmFyKCJ0ZXN0aW1hZ2VfZHVtcF9ob3N0IiwgVHJ1ZSkKKyAgICBwYXJlbnRfZGlyID0gZC5nZXRWYXIoIlRFU1RJTUFHRV9EVU1QX0RJUiIsIFRydWUpCisgICAgcmV0dXJuIEhvc3REdW1wZXIoY21kcywgcGFyZW50X2RpcikKKworCitjbGFzcyBCYXNlRHVtcGVyKG9iamVjdCk6CisgICAgIiIiIEJhc2UgY2xhc3MgdG8gZHVtcCBjb21tYW5kcyBmcm9tIGhvc3QvdGFyZ2V0ICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNtZHMsIHBhcmVudF9kaXIpOgorICAgICAgICBzZWxmLmNtZHMgPSBbXQorICAgICAgICBzZWxmLnBhcmVudF9kaXIgPSBwYXJlbnRfZGlyCisgICAgICAgIGlmIG5vdCBjbWRzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGZvciBjbWQgaW4gY21kcy5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgIGNtZCA9IGNtZC5sc3RyaXAoKQorICAgICAgICAgICAgaWYgbm90IGNtZCBvciBjbWRbMF0gPT0gJyMnOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWxmLmNtZHMuYXBwZW5kKGNtZCkKKworICAgIGRlZiBjcmVhdGVfZGlyKHNlbGYsIGRpcl9zdWZmaXgpOgorICAgICAgICBkdW1wX3N1YmRpciA9ICgiJXNfJXMiICUgKAorICAgICAgICAgICAgICAgIGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCclWSVtJWQlSCVNJyksCisgICAgICAgICAgICAgICAgZGlyX3N1ZmZpeCkpCisgICAgICAgIGR1bXBfZGlyID0gb3MucGF0aC5qb2luKHNlbGYucGFyZW50X2RpciwgZHVtcF9zdWJkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKGR1bXBfZGlyKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBpZiBlcnIuZXJybm8gIT0gZXJybm8uRUVYSVNUOgorICAgICAgICAgICAgICAgIHJhaXNlIGVycgorICAgICAgICBzZWxmLmR1bXBfZGlyID0gZHVtcF9kaXIKKworICAgIGRlZiBfd3JpdGVfZHVtcChzZWxmLCBjb21tYW5kLCBvdXRwdXQpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYsIEhvc3REdW1wZXIpOgorICAgICAgICAgICAgcHJlZml4ID0gImhvc3QiCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzZWxmLCBUYXJnZXREdW1wZXIpOgorICAgICAgICAgICAgcHJlZml4ID0gInRhcmdldCIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByZWZpeCA9ICJ1bmtub3duIgorICAgICAgICBmb3IgaSBpbiBpdGVydG9vbHMuY291bnQoKToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gIiVzXyUwMmRfJXMiICUgKHByZWZpeCwgaSwgY29tbWFuZCkKKyAgICAgICAgICAgIGZ1bGxuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuZHVtcF9kaXIsIGZpbGVuYW1lKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZ1bGxuYW1lKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICB3aXRoIG9wZW4oZnVsbG5hbWUsICd3JykgYXMgZHVtcF9maWxlOgorICAgICAgICAgICAgZHVtcF9maWxlLndyaXRlKG91dHB1dCkKKworCitjbGFzcyBIb3N0RHVtcGVyKEJhc2VEdW1wZXIpOgorICAgICIiIiBDbGFzcyB0byBnZXQgZHVtcHMgZnJvbSB0aGUgaG9zdCBydW5uaW5nIHRoZSB0ZXN0cyAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbWRzLCBwYXJlbnRfZGlyKToKKyAgICAgICAgc3VwZXIoSG9zdER1bXBlciwgc2VsZikuX19pbml0X18oY21kcywgcGFyZW50X2RpcikKKworICAgIGRlZiBkdW1wX2hvc3Qoc2VsZiwgZHVtcF9kaXI9IiIpOgorICAgICAgICBpZiBkdW1wX2RpcjoKKyAgICAgICAgICAgIHNlbGYuZHVtcF9kaXIgPSBkdW1wX2RpcgorICAgICAgICBmb3IgY21kIGluIHNlbGYuY21kczoKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZChjbWQsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX2R1bXAoY21kLnNwbGl0KClbMF0sIHJlc3VsdC5vdXRwdXQpCisKKworY2xhc3MgVGFyZ2V0RHVtcGVyKEJhc2VEdW1wZXIpOgorICAgICIiIiBDbGFzcyB0byBnZXQgZHVtcHMgZnJvbSB0YXJnZXQsIGl0IG9ubHkgd29ya3Mgd2l0aCBRZW11UnVubmVyICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNtZHMsIHBhcmVudF9kaXIsIHFlbXVydW5uZXIpOgorICAgICAgICBzdXBlcihUYXJnZXREdW1wZXIsIHNlbGYpLl9faW5pdF9fKGNtZHMsIHBhcmVudF9kaXIpCisgICAgICAgIHNlbGYucnVubmVyID0gcWVtdXJ1bm5lcgorCisgICAgZGVmIGR1bXBfdGFyZ2V0KHNlbGYsIGR1bXBfZGlyPSIiKToKKyAgICAgICAgaWYgZHVtcF9kaXI6CisgICAgICAgICAgICBzZWxmLmR1bXBfZGlyID0gZHVtcF9kaXIKKyAgICAgICAgZm9yIGNtZCBpbiBzZWxmLmNtZHM6CisgICAgICAgICAgICAjIFdlIGNhbiBjb250aW51ZSB3aXRoIHRoZSB0ZXN0aW5nIGlmIHNlcmlhbCBjb21tYW5kcyBmYWlsCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYucnVubmVyLnJ1bl9zZXJpYWwoY21kKQorICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX2R1bXAoY21kLnNwbGl0KClbMF0sIG91dHB1dCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwcmludCgiVHJpZWQgdG8gZHVtcCBpbmZvIGZyb20gdGFyZ2V0IGJ1dCAiCisgICAgICAgICAgICAgICAgICAgICAgICAic2VyaWFsIGNvbnNvbGUgZmFpbGVkIikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9mdG9vbHMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvZnRvb2xzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZWJlM2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvZnRvb2xzLnB5CkBAIC0wLDAgKzEsMjcgQEAKK2ltcG9ydCBvcworaW1wb3J0IHJlCisKK2RlZiB3cml0ZV9maWxlKHBhdGgsIGRhdGEpOgorICAgIHdkYXRhID0gZGF0YS5yc3RyaXAoKSArICJcbiIKKyAgICB3aXRoIG9wZW4ocGF0aCwgInciKSBhcyBmOgorICAgICAgICBmLndyaXRlKHdkYXRhKQorCitkZWYgYXBwZW5kX2ZpbGUocGF0aCwgZGF0YSk6CisgICAgd2RhdGEgPSBkYXRhLnJzdHJpcCgpICsgIlxuIgorICAgIHdpdGggb3BlbihwYXRoLCAiYSIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKHdkYXRhKQorCitkZWYgcmVhZF9maWxlKHBhdGgpOgorICAgIGRhdGEgPSBOb25lCisgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGY6CisgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgIHJldHVybiBkYXRhCisKK2RlZiByZW1vdmVfZnJvbV9maWxlKHBhdGgsIGRhdGEpOgorICAgIGxpbmVzID0gcmVhZF9maWxlKHBhdGgpLnNwbGl0bGluZXMoKQorICAgIHJtZGF0YSA9IGRhdGEuc3RyaXAoKS5zcGxpdGxpbmVzKCkKKyAgICBmb3IgbCBpbiBybWRhdGE6CisgICAgICAgIGZvciBjIGluIHJhbmdlKDAsIGxpbmVzLmNvdW50KGwpKToKKyAgICAgICAgICAgIGkgPSBsaW5lcy5pbmRleChsKQorICAgICAgICAgICAgZGVsKGxpbmVzW2ldKQorICAgIHdyaXRlX2ZpbGUocGF0aCwgIlxuIi5qb2luKGxpbmVzKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9odHRwc2VydmVyLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2h0dHBzZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY1MThkOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9odHRwc2VydmVyLnB5CkBAIC0wLDAgKzEsMzUgQEAKK2ltcG9ydCBTaW1wbGVIVFRQU2VydmVyCitpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCitpbXBvcnQgb3MKKworY2xhc3MgSFRUUFNlcnZlcihTaW1wbGVIVFRQU2VydmVyLkJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIpOgorCisgICAgZGVmIHNlcnZlcl9zdGFydChzZWxmLCByb290X2Rpcik6CisgICAgICAgIGltcG9ydCBzaWduYWwKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVEVSTSwgc2lnbmFsLlNJR19ERkwpCisgICAgICAgIG9zLmNoZGlyKHJvb3RfZGlyKQorICAgICAgICBzZWxmLnNlcnZlX2ZvcmV2ZXIoKQorCitjbGFzcyBIVFRQUmVxdWVzdEhhbmRsZXIoU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIpOgorCisgICAgZGVmIGxvZ19tZXNzYWdlKHNlbGYsIGZvcm1hdF9zdHIsICphcmdzKToKKyAgICAgICAgcGFzcworCitjbGFzcyBIVFRQU2VydmljZShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvb3RfZGlyLCBob3N0PScnKToKKyAgICAgICAgc2VsZi5yb290X2RpciA9IHJvb3RfZGlyCisgICAgICAgIHNlbGYuaG9zdCA9IGhvc3QKKyAgICAgICAgc2VsZi5wb3J0ID0gMAorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZlciA9IEhUVFBTZXJ2ZXIoKHNlbGYuaG9zdCwgc2VsZi5wb3J0KSwgSFRUUFJlcXVlc3RIYW5kbGVyKQorICAgICAgICBpZiBzZWxmLnBvcnQgPT0gMDoKKyAgICAgICAgICAgIHNlbGYucG9ydCA9IHNlbGYuc2VydmVyLnNlcnZlcl9wb3J0CisgICAgICAgIHNlbGYucHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1zZWxmLnNlcnZlci5zZXJ2ZXJfc3RhcnQsIGFyZ3M9W3NlbGYucm9vdF9kaXJdKQorICAgICAgICBzZWxmLnByb2Nlc3Muc3RhcnQoKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyLnNlcnZlcl9jbG9zZSgpCisgICAgICAgIHNlbGYucHJvY2Vzcy50ZXJtaW5hdGUoKQorICAgICAgICBzZWxmLnByb2Nlc3Muam9pbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvbG9ncGFyc2VyLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2xvZ3BhcnNlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2I1MDM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2xvZ3BhcnNlci5weQpAQCAtMCwwICsxLDEyNSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgZnRvb2xzCisKKworIyBBIHBhcnNlciB0aGF0IGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IHdlYXRoZXIgYSBsaW5lIGlzIGEgdGVzdCByZXN1bHQgb3IgYSBzZWN0aW9uIHN0YXRlbWVudC4KK2NsYXNzIExwYXJzZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0XzBfcGFzc19yZWdleCwgdGVzdF8wX2ZhaWxfcmVnZXgsIHNlY3Rpb25fMF9iZWdpbl9yZWdleD1Ob25lLCBzZWN0aW9uXzBfZW5kX3JlZ2V4PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIyBJbml0aWFsaXplIHRoZSBhcmd1bWVudHMgZGljdGlvbmFyeQorICAgICAgICBpZiBrd2FyZ3M6CisgICAgICAgICAgICBzZWxmLmFyZ3MgPSBrd2FyZ3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXJncyA9IHt9CisKKyAgICAgICAgIyBBZGQgdGhlIGRlZmF1bHQgYXJncyB0byB0aGUgZGljdGlvbmFyeQorICAgICAgICBzZWxmLmFyZ3NbJ3Rlc3RfMF9wYXNzX3JlZ2V4J10gPSB0ZXN0XzBfcGFzc19yZWdleAorICAgICAgICBzZWxmLmFyZ3NbJ3Rlc3RfMF9mYWlsX3JlZ2V4J10gPSB0ZXN0XzBfZmFpbF9yZWdleAorICAgICAgICBpZiBzZWN0aW9uXzBfYmVnaW5fcmVnZXg6CisgICAgICAgICAgICBzZWxmLmFyZ3NbJ3NlY3Rpb25fMF9iZWdpbl9yZWdleCddID0gc2VjdGlvbl8wX2JlZ2luX3JlZ2V4CisgICAgICAgIGlmIHNlY3Rpb25fMF9lbmRfcmVnZXg6CisgICAgICAgICAgICBzZWxmLmFyZ3NbJ3NlY3Rpb25fMF9lbmRfcmVnZXgnXSA9IHNlY3Rpb25fMF9lbmRfcmVnZXgKKworICAgICAgICBzZWxmLnRlc3RfcG9zc2libGVfc3RhdHVzID0gWydwYXNzJywgJ2ZhaWwnLCAnZXJyb3InXQorICAgICAgICBzZWxmLnNlY3Rpb25fcG9zc2libGVfc3RhdHVzID0gWydiZWdpbicsICdlbmQnXQorCisgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSBGYWxzZQorCisKKyAgICAjIEluaXRpYWxpemUgdGhlIHBhcnNlciB3aXRoIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24KKyAgICBkZWYgaW5pdChzZWxmKToKKworICAgICAgICAjIGV4dHJhIGFyZ3VtZW50cyBjYW4gYmUgYWRkZWQgYnkgdGhlIHVzZXIgdG8gZGVmaW5lIG5ldyB0ZXN0IGFuZCBzZWN0aW9uIGNhdGVnb3JpZXMuIFRoZXkgbXVzdCBmb2xsb3cgYSBwcmUtZGVmaW5lZCBwYXR0ZXJuOiA8dHlwZT5fPGNhdGVnb3J5X25hbWU+XzxzdGF0dXM+X3JlZ2V4CisgICAgICAgIHNlbGYudGVzdF9hcmd1bWVudF9wYXR0ZXJuID0gIl50ZXN0XyguKz8pXyglcylfcmVnZXgiICUgJ3wnLmpvaW4obWFwKHN0ciwgc2VsZi50ZXN0X3Bvc3NpYmxlX3N0YXR1cykpCisgICAgICAgIHNlbGYuc2VjdGlvbl9hcmd1bWVudF9wYXR0ZXJuID0gIl5zZWN0aW9uXyguKz8pXyglcylfcmVnZXgiICUgJ3wnLmpvaW4obWFwKHN0ciwgc2VsZi5zZWN0aW9uX3Bvc3NpYmxlX3N0YXR1cykpCisKKyAgICAgICAgIyBJbml0aWFsaXplIHRoZSB0ZXN0IGFuZCBzZWN0aW9uIHJlZ2V4IGRpY3Rpb25hcmllcworICAgICAgICBzZWxmLnRlc3RfcmVnZXggPSB7fQorICAgICAgICBzZWxmLnNlY3Rpb25fcmVnZXggPXt9CisKKyAgICAgICAgZm9yIGFyZywgdmFsdWUgaW4gc2VsZi5hcmdzLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBub3QgdmFsdWU6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdUaGUgdmFsdWUgb2YgcHJvdmlkZWQgYXJndW1lbnQgJXMgaXMgJXMuIFNob3VsZCBoYXZlIGEgdmFsaWQgdmFsdWUuJyAlIChrZXksIHZhbHVlKSkKKyAgICAgICAgICAgIGlzX3Rlc3QgPSAgcmUuc2VhcmNoKHNlbGYudGVzdF9hcmd1bWVudF9wYXR0ZXJuLCBhcmcpCisgICAgICAgICAgICBpc19zZWN0aW9uID0gcmUuc2VhcmNoKHNlbGYuc2VjdGlvbl9hcmd1bWVudF9wYXR0ZXJuLCBhcmcpCisgICAgICAgICAgICBpZiBpc190ZXN0OgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc190ZXN0Lmdyb3VwKDEpIGluIHNlbGYudGVzdF9yZWdleDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0X3JlZ2V4W2lzX3Rlc3QuZ3JvdXAoMSldID0ge30KKyAgICAgICAgICAgICAgICBzZWxmLnRlc3RfcmVnZXhbaXNfdGVzdC5ncm91cCgxKV1baXNfdGVzdC5ncm91cCgyKV0gPSByZS5jb21waWxlKHZhbHVlKQorICAgICAgICAgICAgZWxpZiBpc19zZWN0aW9uOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc19zZWN0aW9uLmdyb3VwKDEpIGluIHNlbGYuc2VjdGlvbl9yZWdleDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWN0aW9uX3JlZ2V4W2lzX3NlY3Rpb24uZ3JvdXAoMSldID0ge30KKyAgICAgICAgICAgICAgICBzZWxmLnNlY3Rpb25fcmVnZXhbaXNfc2VjdGlvbi5ncm91cCgxKV1baXNfc2VjdGlvbi5ncm91cCgyKV0gPSByZS5jb21waWxlKHZhbHVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFRPRE86IE1ha2UgdGhlc2UgY2FsbCBhIHRyYWNlYmFjayBpbnN0ZWFkIG9mIGEgc2ltcGxlIGV4Y2VwdGlvbi4uCisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUaGUgcHJvdmlkZWQgYXJndW1lbnQgbmFtZSBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFueSB2YWxpZCB0eXBlLiBQbGVhc2UgZ2l2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0eXBlczpcbmZvciB0ZXN0czogJXNcbmZvciBzZWN0aW9uczogJXMiICUgKHNlbGYudGVzdF9hcmd1bWVudF9wYXR0ZXJuLCBzZWxmLnNlY3Rpb25fYXJndW1lbnRfcGF0dGVybikpCisKKyAgICAgICAgc2VsZi5pbml0aWFsaXplZCA9IFRydWUKKworICAgICMgUGFyc2UgYSBsaW5lIGFuZCByZXR1cm4gYSB0dXBsZSBjb250YWluaW5nIHRoZSB0eXBlIG9mIHJlc3VsdCAodGVzdC9zZWN0aW9uKSBhbmQgaXRzIGNhdGVnb3J5LCBzdGF0dXMgYW5kIG5hbWUKKyAgICBkZWYgcGFyc2VfbGluZShzZWxmLCBsaW5lKToKKyAgICAgICAgaWYgbm90IHNlbGYuaW5pdGlhbGl6ZWQ6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRoZSBwYXJzZXIgaXMgbm90IGluaXRpYWxpemVkLi4iKQorCisgICAgICAgIGZvciB0ZXN0X2NhdGVnb3J5LCB0ZXN0X3N0YXR1c19saXN0IGluIHNlbGYudGVzdF9yZWdleC5pdGVtcygpOgorICAgICAgICAgICAgZm9yIHRlc3Rfc3RhdHVzLCBzdGF0dXNfcmVnZXggaW4gdGVzdF9zdGF0dXNfbGlzdC5pdGVtcygpOgorICAgICAgICAgICAgICAgIHRlc3RfbmFtZSA9IHN0YXR1c19yZWdleC5zZWFyY2gobGluZSkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X25hbWU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBbJ3Rlc3QnLCB0ZXN0X2NhdGVnb3J5LCB0ZXN0X3N0YXR1cywgdGVzdF9uYW1lLmdyb3VwKDEpXQorCisgICAgICAgIGZvciBzZWN0aW9uX2NhdGVnb3J5LCBzZWN0aW9uX3N0YXR1c19saXN0IGluIHNlbGYuc2VjdGlvbl9yZWdleC5pdGVtcygpOgorICAgICAgICAgICAgZm9yIHNlY3Rpb25fc3RhdHVzLCBzdGF0dXNfcmVnZXggaW4gc2VjdGlvbl9zdGF0dXNfbGlzdC5pdGVtcygpOgorICAgICAgICAgICAgICAgIHNlY3Rpb25fbmFtZSA9IHN0YXR1c19yZWdleC5zZWFyY2gobGluZSkKKyAgICAgICAgICAgICAgICBpZiBzZWN0aW9uX25hbWU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBbJ3NlY3Rpb24nLCBzZWN0aW9uX2NhdGVnb3J5LCBzZWN0aW9uX3N0YXR1cywgc2VjdGlvbl9uYW1lLmdyb3VwKDEpXQorICAgICAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIFJlc3VsdChvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnJlc3VsdF9kaWN0ID0ge30KKworICAgIGRlZiBzdG9yZShzZWxmLCBzZWN0aW9uLCB0ZXN0LCBzdGF0dXMpOgorICAgICAgICBpZiBub3Qgc2VjdGlvbiBpbiBzZWxmLnJlc3VsdF9kaWN0OgorICAgICAgICAgICAgc2VsZi5yZXN1bHRfZGljdFtzZWN0aW9uXSA9IFtdCisKKyAgICAgICAgc2VsZi5yZXN1bHRfZGljdFtzZWN0aW9uXS5hcHBlbmQoKHRlc3QsIHN0YXR1cykpCisKKyAgICAjIHNvcnQgdGVzdHMgYnkgdGhlIHRlc3QgbmFtZSh0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgdHVwbGUpLCBmb3IgZWFjaCBzZWN0aW9uLiBUaGlzIGNhbiBiZSBoZWxwZnVsIHdoZW4gdXNpbmcgZ2l0IHRvIGRpZmYgZm9yIGNoYW5nZXMgYnkgbWFraW5nIHN1cmUgdGhleSBhcmUgYWx3YXlzIGluIHRoZSBzYW1lIG9yZGVyLgorICAgIGRlZiBzb3J0X3Rlc3RzKHNlbGYpOgorICAgICAgICBmb3IgcGFja2FnZSBpbiBzZWxmLnJlc3VsdF9kaWN0OgorICAgICAgICAgICAgc29ydGVkX3Jlc3VsdHMgPSBzb3J0ZWQoc2VsZi5yZXN1bHRfZGljdFtwYWNrYWdlXSwga2V5PWxhbWJkYSB0dXA6IHR1cFswXSkKKyAgICAgICAgICAgIHNlbGYucmVzdWx0X2RpY3RbcGFja2FnZV0gPSBzb3J0ZWRfcmVzdWx0cworCisgICAgIyBMb2cgdGhlIHJlc3VsdHMgYXMgZmlsZXMuIFRoZSBmaWxlIG5hbWUgaXMgdGhlIHNlY3Rpb24gbmFtZSBhbmQgdGhlIGNvbnRlbnRzIGFyZSB0aGUgdGVzdHMgaW4gdGhhdCBzZWN0aW9uLgorICAgIGRlZiBsb2dfYXNfZmlsZXMoc2VsZiwgdGFyZ2V0X2RpciwgdGVzdF9zdGF0dXMpOgorICAgICAgICBzdGF0dXNfcmVnZXggPSByZS5jb21waWxlKCd8Jy5qb2luKG1hcChzdHIsIHRlc3Rfc3RhdHVzKSkpCisgICAgICAgIGlmIG5vdCB0eXBlKHRlc3Rfc3RhdHVzKSA9PSB0eXBlKFtdKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigidGVzdF9zdGF0dXMgc2hvdWxkIGJlIGEgbGlzdC4gR290ICIgKyBzdHIodGVzdF9zdGF0dXMpICsgIiBpbnN0ZWFkLiIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0YXJnZXRfZGlyKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVGFyZ2V0IGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdDogJXMiICUgdGFyZ2V0X2RpcikKKworICAgICAgICBmb3Igc2VjdGlvbiwgdGVzdF9yZXN1bHRzIGluIHNlbGYucmVzdWx0X2RpY3QuaXRlbXMoKToKKyAgICAgICAgICAgIHByZWZpeCA9ICcnCisgICAgICAgICAgICBmb3IgeCBpbiB0ZXN0X3N0YXR1czoKKyAgICAgICAgICAgICAgICBwcmVmaXggKz14KycuJworICAgICAgICAgICAgaWYgKHNlY3Rpb24gIT0gJycpOgorICAgICAgICAgICAgICAgIHByZWZpeCArPSBzZWN0aW9uCisgICAgICAgICAgICBzZWN0aW9uX2ZpbGUgPSBvcy5wYXRoLmpvaW4odGFyZ2V0X2RpciwgcHJlZml4KQorICAgICAgICAgICAgIyBwdXJnZSB0aGUgZmlsZSBjb250ZW50cyBpZiBpdCBleGlzdHMKKyAgICAgICAgICAgIG9wZW4oc2VjdGlvbl9maWxlLCAndycpLmNsb3NlKCkKKyAgICAgICAgICAgIGZvciB0ZXN0X3Jlc3VsdCBpbiB0ZXN0X3Jlc3VsdHM6CisgICAgICAgICAgICAgICAgKHRlc3RfbmFtZSwgc3RhdHVzKSA9IHRlc3RfcmVzdWx0CisgICAgICAgICAgICAgICAgIyB3ZSBsb2cgb25seSB0aGUgdGVzdHMgd2l0aCBzdGF0dXMgaW4gdGhlIHRlc3Rfc3RhdHVzIGxpc3QKKyAgICAgICAgICAgICAgICBtYXRjaF9zdGF0dXMgPSBzdGF0dXNfcmVnZXguc2VhcmNoKHN0YXR1cykKKyAgICAgICAgICAgICAgICBpZiBtYXRjaF9zdGF0dXM6CisgICAgICAgICAgICAgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShzZWN0aW9uX2ZpbGUsIHN0YXR1cyArICI6ICIgKyB0ZXN0X25hbWUpCisKKyAgICAjIE5vdCB5ZXQgaW1wbGVtZW50ZWQhCisgICAgZGVmIGxvZ190b19sYXZhKHNlbGYpOgorICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvcWVtdXJ1bm5lci5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9xZW11cnVubmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMmM5ZGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvcWVtdXJ1bm5lci5weQpAQCAtMCwwICsxLDUxOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBjbGFzcyBmb3Igc3RhcnRpbmcgcWVtdSBpbWFnZXMgdXNpbmcgcnVucWVtdS4KKyMgSXQncyB1c2VkIGJ5IHRlc3RpbWFnZS5iYmNsYXNzLgorCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IG9zCitpbXBvcnQgdGltZQoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHJlCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc2VsZWN0CitpbXBvcnQgZXJybm8KK2ltcG9ydCB0aHJlYWRpbmcKK2Zyb20gb2VxYS51dGlscy5kdW1wIGltcG9ydCBIb3N0RHVtcGVyCisKK2ltcG9ydCBsb2dnaW5nCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5RZW11UnVubmVyIikKKworY2xhc3MgUWVtdVJ1bm5lcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYWNoaW5lLCByb290ZnMsIGRpc3BsYXksIHRtcGRpciwgZGVwbG95X2Rpcl9pbWFnZSwgbG9nZmlsZSwgYm9vdHRpbWUsIGR1bXBfZGlyLCBkdW1wX2hvc3RfY21kcyk6CisKKyAgICAgICAgIyBQb3BlbiBvYmplY3QgZm9yIHJ1bnFlbXUKKyAgICAgICAgc2VsZi5ydW5xZW11ID0gTm9uZQorICAgICAgICAjIHBpZCBvZiB0aGUgcWVtdSBwcm9jZXNzIHRoYXQgcnVucWVtdSB3aWxsIHN0YXJ0CisgICAgICAgIHNlbGYucWVtdXBpZCA9IE5vbmUKKyAgICAgICAgIyB0YXJnZXQgaXAgLSBmcm9tIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgICAgc2VsZi5pcCA9IE5vbmUKKyAgICAgICAgIyBob3N0IGlwIC0gd2hlcmUgcWVtdSBpcyBydW5uaW5nCisgICAgICAgIHNlbGYuc2VydmVyX2lwID0gTm9uZQorCisgICAgICAgIHNlbGYubWFjaGluZSA9IG1hY2hpbmUKKyAgICAgICAgc2VsZi5yb290ZnMgPSByb290ZnMKKyAgICAgICAgc2VsZi5kaXNwbGF5ID0gZGlzcGxheQorICAgICAgICBzZWxmLnRtcGRpciA9IHRtcGRpcgorICAgICAgICBzZWxmLmRlcGxveV9kaXJfaW1hZ2UgPSBkZXBsb3lfZGlyX2ltYWdlCisgICAgICAgIHNlbGYubG9nZmlsZSA9IGxvZ2ZpbGUKKyAgICAgICAgc2VsZi5ib290dGltZSA9IGJvb3R0aW1lCisgICAgICAgIHNlbGYubG9nZ2VkID0gRmFsc2UKKyAgICAgICAgc2VsZi50aHJlYWQgPSBOb25lCisKKyAgICAgICAgc2VsZi5ydW5xZW11dGltZSA9IDYwCisgICAgICAgIHNlbGYuaG9zdF9kdW1wZXIgPSBIb3N0RHVtcGVyKGR1bXBfaG9zdF9jbWRzLCBkdW1wX2RpcikKKworICAgIGRlZiBjcmVhdGVfc29ja2V0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgc29jay5zZXRibG9ja2luZygwKQorICAgICAgICAgICAgc29jay5iaW5kKCgiMTI3LjAuMC4xIiwwKSkKKyAgICAgICAgICAgIHNvY2subGlzdGVuKDIpCisgICAgICAgICAgICBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpWzFdCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiQ3JlYXRlZCBsaXN0ZW5pbmcgc29ja2V0IGZvciBxZW11IHNlcmlhbCBjb25zb2xlIG9uOiAxMjcuMC4wLjE6JXMiICUgcG9ydCkKKyAgICAgICAgICAgIHJldHVybiAoc29jaywgcG9ydCkKKworICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIGxvZyhzZWxmLCBtc2cpOgorICAgICAgICBpZiBzZWxmLmxvZ2ZpbGU6CisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5sb2dmaWxlLCAiYSIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiJXMiICUgbXNnKQorCisgICAgZGVmIGdldE91dHB1dChzZWxmLCBvKToKKyAgICAgICAgaW1wb3J0IGZjbnRsCisgICAgICAgIGZsID0gZmNudGwuZmNudGwobywgZmNudGwuRl9HRVRGTCkKKyAgICAgICAgZmNudGwuZmNudGwobywgZmNudGwuRl9TRVRGTCwgZmwgfCBvcy5PX05PTkJMT0NLKQorICAgICAgICByZXR1cm4gb3MucmVhZChvLmZpbGVubygpLCAxMDAwMDAwKQorCisKKyAgICBkZWYgaGFuZGxlU0lHQ0hMRChzZWxmLCBzaWdudW0sIGZyYW1lKToKKyAgICAgICAgaWYgc2VsZi5ydW5xZW11IGFuZCBzZWxmLnJ1bnFlbXUucG9sbCgpOgorICAgICAgICAgICAgaWYgc2VsZi5ydW5xZW11LnJldHVybmNvZGU6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ3J1bnFlbXUgZXhpdGVkIHdpdGggY29kZSAlZCcgJSBzZWxmLnJ1bnFlbXUucmV0dXJuY29kZSkKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiT3V0cHV0IGZyb20gcnVucWVtdTpcbiVzIiAlIHNlbGYuZ2V0T3V0cHV0KHNlbGYucnVucWVtdS5zdGRvdXQpKQorICAgICAgICAgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgICAgICAgICAgc2VsZi5fZHVtcF9ob3N0KCkKKyAgICAgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0CisKKyAgICBkZWYgc3RhcnQoc2VsZiwgcWVtdXBhcmFtcyA9IE5vbmUpOgorICAgICAgICBpZiBzZWxmLmRpc3BsYXk6CisgICAgICAgICAgICBvcy5lbnZpcm9uWyJESVNQTEFZIl0gPSBzZWxmLmRpc3BsYXkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVG8gc3RhcnQgcWVtdSBJIG5lZWQgYSBYIGRlc2t0b3AsIHBsZWFzZSBzZXQgRElTUExBWSBjb3JyZWN0bHkgKGUuZy4gRElTUExBWT06MSkiKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLnJvb3Rmcyk6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkludmFsaWQgcm9vdGZzICVzIiAlIHNlbGYucm9vdGZzKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLnRtcGRpcik6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkludmFsaWQgVE1QRElSIHBhdGggJXMiICUgc2VsZi50bXBkaXIpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLmVudmlyb25bIk9FX1RNUERJUiJdID0gc2VsZi50bXBkaXIKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuZGVwbG95X2Rpcl9pbWFnZSk6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkludmFsaWQgREVQTE9ZX0RJUl9JTUFHRSBwYXRoICVzIiAlIHNlbGYuZGVwbG95X2Rpcl9pbWFnZSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MuZW52aXJvblsiREVQTE9ZX0RJUl9JTUFHRSJdID0gc2VsZi5kZXBsb3lfZGlyX2ltYWdlCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGhyZWFkc29jaywgdGhyZWFkcG9ydCA9IHNlbGYuY3JlYXRlX3NvY2tldCgpCisgICAgICAgICAgICBzZWxmLnNlcnZlcl9zb2NrZXQsIHNlbGYuc2VydmVycG9ydCA9IHNlbGYuY3JlYXRlX3NvY2tldCgpCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBsaXN0ZW5pbmcgc29ja2V0OiAlcyIgJSBtc2dbMV0pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAjIFNldCB0aGlzIGZsYWcgc28gdGhhdCBRZW11IGRvZXNuJ3QgZG8gYW55IGdyYWJzIGFzIFNETCBncmFicyBpbnRlcmFjdAorICAgICAgICAjIGJhZGx5IHdpdGggc2NyZWVuc2F2ZXJzLgorICAgICAgICBvcy5lbnZpcm9uWyJRRU1VX0RPTlRfR1JBQiJdID0gIjEiCisgICAgICAgIHNlbGYucWVtdXBhcmFtcyA9ICdib290cGFyYW1zPSJjb25zb2xlPXR0eTEgY29uc29sZT10dHlTMCwxMTUyMDBuOCIgcWVtdXBhcmFtcz0iLXNlcmlhbCB0Y3A6MTI3LjAuMC4xOnt9IicuZm9ybWF0KHRocmVhZHBvcnQpCisgICAgICAgIGlmIHFlbXVwYXJhbXM6CisgICAgICAgICAgICBzZWxmLnFlbXVwYXJhbXMgPSBzZWxmLnFlbXVwYXJhbXNbOi0xXSArICIgIiArIHFlbXVwYXJhbXMgKyAiICIgKyAnXCInCisKKyAgICAgICAgc2VsZi5vcmlnY2hsZGhhbmRsZXIgPSBzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdDSExEKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdDSExELCBzZWxmLmhhbmRsZVNJR0NITEQpCisKKyAgICAgICAgbGF1bmNoX2NtZCA9ICdydW5xZW11IHRjcHNlcmlhbD0lcyAlcyAlcyAlcycgJSAoc2VsZi5zZXJ2ZXJwb3J0LCBzZWxmLm1hY2hpbmUsIHNlbGYucm9vdGZzLCBzZWxmLnFlbXVwYXJhbXMpCisgICAgICAgICMgRklYTUU6IFdlIHBhc3MgaW4gc3RkaW49c3VicHJvY2Vzcy5QSVBFIGhlcmUgdG8gd29yayBhcm91bmQgc3R0eQorICAgICAgICAjIGJsb2NraW5nIGF0IHRoZSBlbmQgb2YgdGhlIHJ1bnFlbXUgc2NyaXB0IHdoZW4gdXNpbmcgdGhpcyB3aXRoaW4KKyAgICAgICAgIyBvZS1zZWxmdGVzdCAodGhpcyBtYWtlcyBzdHR5IGVycm9yIG91dCBpbW1lZGlhdGVseSkuIFRoZXJlIG91Z2h0CisgICAgICAgICMgdG8gYmUgYSBwcm9wZXIgZml4IGJ1dCB0aGlzIHdpbGwgc3VmZmljZSBmb3Igbm93LgorICAgICAgICBzZWxmLnJ1bnFlbXUgPSBzdWJwcm9jZXNzLlBvcGVuKGxhdW5jaF9jbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBwcmVleGVjX2ZuPW9zLnNldHBncnApCisgICAgICAgIG91dHB1dCA9IHNlbGYucnVucWVtdS5zdGRvdXQKKworICAgICAgICAjCisgICAgICAgICMgV2UgbmVlZCB0aGUgcHJlZXhlY19mbiBhYm92ZSBzbyB0aGF0IGFsbCBydW5xZW11IHByb2Nlc3NlcyBjYW4gZWFzaWx5IGJlIGtpbGxlZCAKKyAgICAgICAgIyAoYnkga2lsbGluZyB0aGVpciBwcm9jZXNzIGdyb3VwKS4gVGhpcyBwcmVzZW50cyBhIHByb2JsZW0gaWYgdGhpcyBjb250cm9sbGluZworICAgICAgICAjIHByb2Nlc3MgaXRzZWxmIGlzIGtpbGxlZCBob3dldmVyIHNpbmNlIHRob3NlIHByb2Nlc3NlcyBkb24ndCBub3RpY2UgdGhlIGRlYXRoIAorICAgICAgICAjIG9mIHRoZSBwYXJlbnQgYW5kIG1lcnJpbHkgY29udGludWUgb24uCisgICAgICAgICMKKyAgICAgICAgIyBSYXRoZXIgdGhhbiBoYWNrIHJ1bnFlbXUgdG8gZGVhbCB3aXRoIHRoaXMsIHdlIGFkZCBzb21ldGhpbmcgaGVyZSBpbnN0ZWFkLiAKKyAgICAgICAgIyBCYXNpY2FsbHkgd2UgZm9yayBvZmYgYW5vdGhlciBwcm9jZXNzIHdoaWNoIGhvbGRzIGFuIG9wZW4gcGlwZSB0byB0aGUgcGFyZW50CisgICAgICAgICMgYW5kIGFsc28gaXMgc2V0cGdycC4gSWYvd2hlbiB0aGUgcGlwZSBzZWVzIEVPRiBmcm9tIHRoZSBwYXJlbnQgZGllaW5nLCBpdCBraWxscworICAgICAgICAjIHRoZSBwcm9jZXNzIGdyb3VwLiBUaGlzIGlzIGxpa2UgcGN0cmwncyBQREVBVEhTSUcgYnV0IGZvciBhIHByb2Nlc3MgZ3JvdXAKKyAgICAgICAgIyByYXRoZXIgdGhhbiBhIHNpbmdsZSBwcm9jZXNzLgorICAgICAgICAjCisgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgc2VsZi5tb25pdG9ycGlkID0gb3MuZm9yaygpCisgICAgICAgIGlmIHNlbGYubW9uaXRvcnBpZDoKKyAgICAgICAgICAgIG9zLmNsb3NlKHIpCisgICAgICAgICAgICBzZWxmLm1vbml0b3JwaXBlID0gb3MuZmRvcGVuKHcsICJ3IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgY2hpbGQgcHJvY2VzcworICAgICAgICAgICAgb3Muc2V0cGdycCgpCisgICAgICAgICAgICBvcy5jbG9zZSh3KQorICAgICAgICAgICAgciA9IG9zLmZkb3BlbihyKQorICAgICAgICAgICAgeCA9IHIucmVhZCgpCisgICAgICAgICAgICBvcy5raWxscGcob3MuZ2V0cGdpZChzZWxmLnJ1bnFlbXUucGlkKSwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICBzeXMuZXhpdCgwKQorCisgICAgICAgIGxvZ2dlci5pbmZvKCJydW5xZW11IHN0YXJ0ZWQsIHBpZCBpcyAlcyIgJSBzZWxmLnJ1bnFlbXUucGlkKQorICAgICAgICBsb2dnZXIuaW5mbygid2FpdGluZyBhdCBtb3N0ICVzIHNlY29uZHMgZm9yIHFlbXUgcGlkIiAlIHNlbGYucnVucWVtdXRpbWUpCisgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSArIHNlbGYucnVucWVtdXRpbWUKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNfYWxpdmUoKSBhbmQgdGltZS50aW1lKCkgPCBlbmR0aW1lOgorICAgICAgICAgICAgaWYgc2VsZi5ydW5xZW11LnBvbGwoKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnJ1bnFlbXUucmV0dXJuY29kZToKKyAgICAgICAgICAgICAgICAgICAgIyBObyBwb2ludCB3YWl0aW5nIGFueSBsb25nZXIKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ3J1bnFlbXUgZXhpdGVkIHdpdGggY29kZSAlZCcgJSBzZWxmLnJ1bnFlbXUucmV0dXJuY29kZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZHVtcF9ob3N0KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zdG9wKCkKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIk91dHB1dCBmcm9tIHJ1bnFlbXU6XG4lcyIgJSBzZWxmLmdldE91dHB1dChvdXRwdXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKworICAgICAgICBpZiBzZWxmLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygicWVtdSBzdGFydGVkIC0gcWVtdSBwcm9jY2VzIHBpZCBpcyAlcyIgJSBzZWxmLnFlbXVwaWQpCisgICAgICAgICAgICBjbWRsaW5lID0gJycKKyAgICAgICAgICAgIHdpdGggb3BlbignL3Byb2MvJXMvY21kbGluZScgJSBzZWxmLnFlbXVwaWQpIGFzIHA6CisgICAgICAgICAgICAgICAgY21kbGluZSA9IHAucmVhZCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaXBzID0gcmUuZmluZGFsbCgiKCg/OlswLTldezEsM31cLil7M31bMC05XXsxLDN9KSIsIGNtZGxpbmUuc3BsaXQoImlwPSIpWzFdKQorICAgICAgICAgICAgICAgIGlmIG5vdCBpcHMgb3IgbGVuKGlwcykgIT0gMzoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaXAgPSBpcHNbMF0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBpcHNbMV0KKyAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yLCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDb3VsZG4ndCBnZXQgaXAgZnJvbSBxZW11IHByb2Nlc3MgYXJndW1lbnRzISBIZXJlIGlzIHRoZSBxZW11IGNvbW1hbmQgbGluZSB1c2VkOlxuJXNcbmFuZCBvdXRwdXQgZnJvbSBydW5xZW11OlxuJXMiICUgKGNtZGxpbmUsIHNlbGYuZ2V0T3V0cHV0KG91dHB1dCkpKQorICAgICAgICAgICAgICAgIHNlbGYuX2R1bXBfaG9zdCgpCisgICAgICAgICAgICAgICAgc2VsZi5zdG9wKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJxZW11IGNtZGxpbmUgdXNlZDpcbnt9Ii5mb3JtYXQoY21kbGluZSkpCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiVGFyZ2V0IElQOiAlcyIgJSBzZWxmLmlwKQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlNlcnZlciBJUDogJXMiICUgc2VsZi5zZXJ2ZXJfaXApCisKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJTdGFydGluZyBsb2dnaW5nIHRocmVhZCIpCisgICAgICAgICAgICBzZWxmLnRocmVhZCA9IExvZ2dpbmdUaHJlYWQoc2VsZi5sb2csIHRocmVhZHNvY2ssIGxvZ2dlcikKKyAgICAgICAgICAgIHNlbGYudGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnRocmVhZC5jb25uZWN0aW9uX2VzdGFibGlzaGVkLndhaXQoc2VsZi5ib290dGltZSk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJEaWRuJ3QgcmVjZWl2ZSBhIGNvbnNvbGUgY29ubmVjdGlvbiBmcm9tIHFlbXUuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlcmUgaXMgdGhlIHFlbXUgY29tbWFuZCBsaW5lIHVzZWQ6XG4lc1xuYW5kICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm91dHB1dCBmcm9tIHJ1bnFlbXU6XG4lcyIgJSAoY21kbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRPdXRwdXQob3V0cHV0KSkpCisgICAgICAgICAgICAgICAgc2VsZi5zdG9wX3RocmVhZCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJXYWl0aW5nIGF0IG1vc3QgJWQgc2Vjb25kcyBmb3IgbG9naW4gYmFubmVyIiAlIHNlbGYuYm9vdHRpbWUpCisgICAgICAgICAgICBlbmR0aW1lID0gdGltZS50aW1lKCkgKyBzZWxmLmJvb3R0aW1lCisgICAgICAgICAgICBzb2NrbGlzdCA9IFtzZWxmLnNlcnZlcl9zb2NrZXRdCisgICAgICAgICAgICByZWFjaGVkbG9naW4gPSBGYWxzZQorICAgICAgICAgICAgc3RvcHJlYWQgPSBGYWxzZQorICAgICAgICAgICAgcWVtdXNvY2sgPSBOb25lCisgICAgICAgICAgICBib290bG9nID0gJycKKyAgICAgICAgICAgIHdoaWxlIHRpbWUudGltZSgpIDwgZW5kdGltZSBhbmQgbm90IHN0b3ByZWFkOgorICAgICAgICAgICAgICAgIHNyZWFkLCBzd3JpdGUsIHNlcnJvciA9IHNlbGVjdC5zZWxlY3Qoc29ja2xpc3QsIFtdLCBbXSwgNSkKKyAgICAgICAgICAgICAgICBmb3Igc29jayBpbiBzcmVhZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgc29jayBpcyBzZWxmLnNlcnZlcl9zb2NrZXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBxZW11c29jaywgYWRkciA9IHNlbGYuc2VydmVyX3NvY2tldC5hY2NlcHQoKQorICAgICAgICAgICAgICAgICAgICAgICAgcWVtdXNvY2suc2V0YmxvY2tpbmcoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsaXN0LmFwcGVuZChxZW11c29jaykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsaXN0LnJlbW92ZShzZWxmLnNlcnZlcl9zb2NrZXQpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiQ29ubmVjdGlvbiBmcm9tICVzOiVzIiAlIGFkZHIpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gc29jay5yZWN2KDEwMjQpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3Rsb2cgKz0gZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlLnNlYXJjaCgiLiogbG9naW46IiwgYm9vdGxvZyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldCA9IHFlbXVzb2NrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3ByZWFkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFjaGVkbG9naW4gPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJSZWFjaGVkIGxvZ2luIGJhbm5lciIpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsaXN0LnJlbW92ZShzb2NrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3ByZWFkID0gVHJ1ZQorCisgICAgICAgICAgICBpZiBub3QgcmVhY2hlZGxvZ2luOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJUYXJnZXQgZGlkbid0IHJlYWNoZWQgbG9naW4gYm9vdCBpbiAlZCBzZWNvbmRzIiAlIHNlbGYuYm9vdHRpbWUpCisgICAgICAgICAgICAgICAgbGluZXMgPSAiXG4iLmpvaW4oYm9vdGxvZy5zcGxpdGxpbmVzKClbLTI1Ol0pCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkxhc3QgMjUgbGluZXMgb2YgdGV4dDpcbiVzIiAlIGxpbmVzKQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDaGVjayBmdWxsIGJvb3QgbG9nOiAlcyIgJSBzZWxmLmxvZ2ZpbGUpCisgICAgICAgICAgICAgICAgc2VsZi5fZHVtcF9ob3N0KCkKKyAgICAgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICAgICAjIElmIHdlIGFyZSBub3QgYWJsZSB0byBsb2dpbiB0aGUgdGVzdHMgY2FuIGNvbnRpbnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYucnVuX3NlcmlhbCgicm9vdFxuIiwgcmF3PVRydWUpCisgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKCJyb290QFthLXpBLVowLTlcLV0rOn4jIiwgb3V0cHV0KToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJMb2dnZWQgYXMgcm9vdCBpbiBzZXJpYWwgY29uc29sZSIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkNvdWxkbid0IGxvZ2luIGludG8gc2VyaWFsIGNvbnNvbGUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBhcyByb290IHVzaW5nIGJsYW5rIHBhc3N3b3JkIikKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiU2VyaWFsIGNvbnNvbGUgZmFpbGVkIHdoaWxlIHRyeWluZyB0byBsb2dpbiIpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJRZW11IHBpZCBkaWRuJ3QgYXBwZWFyZWQgaW4gJXMgc2Vjb25kcyIgJSBzZWxmLnJ1bnFlbXV0aW1lKQorICAgICAgICAgICAgc2VsZi5fZHVtcF9ob3N0KCkKKyAgICAgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiT3V0cHV0IGZyb20gcnVucWVtdTpcbiVzIiAlIHNlbGYuZ2V0T3V0cHV0KG91dHB1dCkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICByZXR1cm4gc2VsZi5pc19hbGl2ZSgpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5zdG9wX3RocmVhZCgpCisgICAgICAgIGlmIHNlbGYucnVucWVtdToKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0NITEQsIHNlbGYub3JpZ2NobGRoYW5kbGVyKQorICAgICAgICAgICAgb3Mua2lsbChzZWxmLm1vbml0b3JwaWQsIHNpZ25hbC5TSUdLSUxMKQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlNlbmRpbmcgU0lHVEVSTSB0byBydW5xZW11IikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5raWxscGcob3MuZ2V0cGdpZChzZWxmLnJ1bnFlbXUucGlkKSwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRVNSQ0g6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBlbmR0aW1lID0gdGltZS50aW1lKCkgKyBzZWxmLnJ1bnFlbXV0aW1lCisgICAgICAgICAgICB3aGlsZSBzZWxmLnJ1bnFlbXUucG9sbCgpIGlzIE5vbmUgYW5kIHRpbWUudGltZSgpIDwgZW5kdGltZToKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgICAgICBpZiBzZWxmLnJ1bnFlbXUucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlNlbmRpbmcgU0lHS0lMTCB0byBydW5xZW11IikKKyAgICAgICAgICAgICAgICBvcy5raWxscGcob3MuZ2V0cGdpZChzZWxmLnJ1bnFlbXUucGlkKSwgc2lnbmFsLlNJR0tJTEwpCisgICAgICAgICAgICBzZWxmLnJ1bnFlbXUgPSBOb25lCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ3NlcnZlcl9zb2NrZXQnKSBhbmQgc2VsZi5zZXJ2ZXJfc29ja2V0OgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfc29ja2V0LmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldCA9IE5vbmUKKyAgICAgICAgc2VsZi5xZW11cGlkID0gTm9uZQorICAgICAgICBzZWxmLmlwID0gTm9uZQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdDSExELCBzZWxmLm9yaWdjaGxkaGFuZGxlcikKKworICAgIGRlZiBzdG9wX3RocmVhZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi50aHJlYWQgYW5kIHNlbGYudGhyZWFkLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBzZWxmLnRocmVhZC5zdG9wKCkKKyAgICAgICAgICAgIHNlbGYudGhyZWFkLmpvaW4oKQorCisgICAgZGVmIHJlc3RhcnQoc2VsZiwgcWVtdXBhcmFtcyA9IE5vbmUpOgorICAgICAgICBsb2dnZXIuaW5mbygiUmVzdGFydGluZyBxZW11IHByb2Nlc3MiKQorICAgICAgICBpZiBzZWxmLnJ1bnFlbXUucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICBpZiBzZWxmLnN0YXJ0KHFlbXVwYXJhbXMpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgaXNfYWxpdmUoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLnJ1bnFlbXU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcWVtdV9jaGlsZCA9IHNlbGYuZmluZF9jaGlsZChzdHIoc2VsZi5ydW5xZW11LnBpZCkpCisgICAgICAgIGlmIHFlbXVfY2hpbGQ6CisgICAgICAgICAgICBzZWxmLnFlbXVwaWQgPSBxZW11X2NoaWxkWzBdCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygiL3Byb2MvIiArIHN0cihzZWxmLnFlbXVwaWQpKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBmaW5kX2NoaWxkKHNlbGYscGFyZW50X3BpZCk6CisgICAgICAgICMKKyAgICAgICAgIyBXYWxrIHRoZSBwcm9jZXNzIHRyZWUgZnJvbSB0aGUgcHJvY2VzcyBzcGVjaWZpZWQgbG9va2luZyBmb3IgYSBxZW11LXN5c3RlbS4gUmV0dXJuIGl0cyBbcGlkJ2NtZF0KKyAgICAgICAgIworICAgICAgICBwcyA9IHN1YnByb2Nlc3MuUG9wZW4oWydwcycsICdheHd3JywgJy1vJywgJ3BpZCxwcGlkLGNvbW1hbmQnXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQorICAgICAgICBwcm9jZXNzZXMgPSBwcy5zcGxpdCgnXG4nKQorICAgICAgICBuZmllbGRzID0gbGVuKHByb2Nlc3Nlc1swXS5zcGxpdCgpKSAtIDEKKyAgICAgICAgcGlkcyA9IHt9CisgICAgICAgIGNvbW1hbmRzID0ge30KKyAgICAgICAgZm9yIHJvdyBpbiBwcm9jZXNzZXNbMTpdOgorICAgICAgICAgICAgZGF0YSA9IHJvdy5zcGxpdChOb25lLCBuZmllbGRzKQorICAgICAgICAgICAgaWYgbGVuKGRhdGEpICE9IDM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGRhdGFbMV0gbm90IGluIHBpZHM6CisgICAgICAgICAgICAgICAgcGlkc1tkYXRhWzFdXSA9IFtdCisKKyAgICAgICAgICAgIHBpZHNbZGF0YVsxXV0uYXBwZW5kKGRhdGFbMF0pCisgICAgICAgICAgICBjb21tYW5kc1tkYXRhWzBdXSA9IGRhdGFbMl0KKworICAgICAgICBpZiBwYXJlbnRfcGlkIG5vdCBpbiBwaWRzOgorICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAgICAgICAgcGFyZW50cyA9IFtdCisgICAgICAgIG5ld3BhcmVudHMgPSBwaWRzW3BhcmVudF9waWRdCisgICAgICAgIHdoaWxlIG5ld3BhcmVudHM6CisgICAgICAgICAgICBuZXh0ID0gW10KKyAgICAgICAgICAgIGZvciBwIGluIG5ld3BhcmVudHM6CisgICAgICAgICAgICAgICAgaWYgcCBpbiBwaWRzOgorICAgICAgICAgICAgICAgICAgICBmb3IgbiBpbiBwaWRzW3BdOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbiBub3QgaW4gcGFyZW50cyBhbmQgbiBub3QgaW4gbmV4dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0LmFwcGVuZChuKQorICAgICAgICAgICAgICAgIGlmIHAgbm90IGluIHBhcmVudHM6CisgICAgICAgICAgICAgICAgICAgIHBhcmVudHMuYXBwZW5kKHApCisgICAgICAgICAgICAgICAgICAgIG5ld3BhcmVudHMgPSBuZXh0CisgICAgICAgICNwcmludCAiQ2hpbGRyZW4gbWF0Y2hpbmcgJXM6IiAlIHN0cihwYXJlbnRzKQorICAgICAgICBmb3IgcCBpbiBwYXJlbnRzOgorICAgICAgICAgICAgIyBOZWVkIHRvIGJlIGNhcmVmdWwgaGVyZSBzaW5jZSBydW5xZW11LWludGVybmFsIHJ1bnMgImxkZCBxZW11LXN5c3RlbS14eHh4IgorICAgICAgICAgICAgIyBBbHNvLCBvbGQgdmVyc2lvbnMgb2YgbGRkICgyLjExKSBydW4gIkxEX1hYWFggcWVtdS1zeXN0ZW0teHh4eCIKKyAgICAgICAgICAgIGJhc2VjbWQgPSBjb21tYW5kc1twXS5zcGxpdCgpWzBdCisgICAgICAgICAgICBiYXNlY21kID0gb3MucGF0aC5iYXNlbmFtZShiYXNlY21kKQorICAgICAgICAgICAgaWYgInFlbXUtc3lzdGVtIiBpbiBiYXNlY21kIGFuZCAiLXNlcmlhbCB0Y3AiIGluIGNvbW1hbmRzW3BdOgorICAgICAgICAgICAgICAgIHJldHVybiBbaW50KHApLGNvbW1hbmRzW3BdXQorCisgICAgZGVmIHJ1bl9zZXJpYWwoc2VsZiwgY29tbWFuZCwgcmF3PUZhbHNlKToKKyAgICAgICAgIyBXZSBhc3N1bWUgdGFyZ2V0IHN5c3RlbSBoYXZlIGVjaG8gdG8gZ2V0IGNvbW1hbmQgc3RhdHVzCisgICAgICAgIGlmIG5vdCByYXc6CisgICAgICAgICAgICBjb21tYW5kID0gIiVzOyBlY2hvICQ/XG4iICUgY29tbWFuZAorICAgICAgICBzZWxmLnNlcnZlcl9zb2NrZXQuc2VuZGFsbChjb21tYW5kKQorICAgICAgICBkYXRhID0gJycKKyAgICAgICAgc3RhdHVzID0gMAorICAgICAgICBzdG9wcmVhZCA9IEZhbHNlCisgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSs1CisgICAgICAgIHdoaWxlIHRpbWUudGltZSgpPGVuZHRpbWUgYW5kIG5vdCBzdG9wcmVhZDoKKyAgICAgICAgICAgIHNyZWFkLCBfLCBfID0gc2VsZWN0LnNlbGVjdChbc2VsZi5zZXJ2ZXJfc29ja2V0XSxbXSxbXSw1KQorICAgICAgICAgICAgZm9yIHNvY2sgaW4gc3JlYWQ6CisgICAgICAgICAgICAgICAgYW5zd2VyID0gc29jay5yZWN2KDEwMjQpCisgICAgICAgICAgICAgICAgaWYgYW5zd2VyOgorICAgICAgICAgICAgICAgICAgICBkYXRhICs9IGFuc3dlcgorICAgICAgICAgICAgICAgICAgICAjIFNlYXJjaCB0aGUgcHJvbXB0IHRvIHN0b3AKKyAgICAgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKCJbYS16QS1aMC05XStAW2EtekEtWjAtOVwtXSs6fiMiLCBkYXRhKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3ByZWFkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIk5vIGRhdGEgb24gc2VyaWFsIGNvbnNvbGUgc29ja2V0IikKKyAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgIGlmIHJhdzoKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgUmVtb3ZlIGZpcnN0IGxpbmUgKGNvbW1hbmQgbGluZSkgYW5kIGxhc3QgbGluZSAocHJvbXB0KQorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEuZmluZCgnJD9cclxuJykrNDpkYXRhLnJmaW5kKCdcclxuJyldCisgICAgICAgICAgICAgICAgaW5kZXggPSBkYXRhLnJmaW5kKCdcclxuJykKKyAgICAgICAgICAgICAgICBpZiBpbmRleCA9PSAtMToKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzX2NtZCA9IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9ICIiCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzX2NtZCA9IGRhdGFbaW5kZXgrMjpdCisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhWzppbmRleF0KKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzX2NtZCA9PSAiMCIpOgorICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAxCisgICAgICAgIHJldHVybiAoc3RhdHVzLCBzdHIoZGF0YSkpCisKKworICAgIGRlZiBfZHVtcF9ob3N0KHNlbGYpOgorICAgICAgICBzZWxmLmhvc3RfZHVtcGVyLmNyZWF0ZV9kaXIoInFlbXUiKQorICAgICAgICBsb2dnZXIud2FybigiUWVtdSBlbmRlZCB1bmV4cGVjdGVkbHksIGR1bXAgZGF0YSBmcm9tIGhvc3QiCisgICAgICAgICAgICAgICAgIiBpcyBpbiAlcyIgJSBzZWxmLmhvc3RfZHVtcGVyLmR1bXBfZGlyKQorICAgICAgICBzZWxmLmhvc3RfZHVtcGVyLmR1bXBfaG9zdCgpCisKKyMgVGhpcyBjbGFzcyBpcyBmb3IgcmVhZGluZyBkYXRhIGZyb20gYSBzb2NrZXQgYW5kIHBhc3NpbmcgaXQgdG8gbG9nZnVuYworIyB0byBiZSBwcm9jZXNzZWQuIEl0J3MgY29tcGxldGVseSBldmVudCBkcml2ZW4gYW5kIGhhcyBhIHN0cmFpZ2h0Zm9yd2FyZAorIyBldmVudCBsb29wLiBUaGUgbWVjaGFuaXNtIGZvciBzdG9wcGluZyB0aGUgdGhyZWFkIGlzIGEgc2ltcGxlIHBpcGUgd2hpY2gKKyMgd2lsbCB3YWtlIHVwIHRoZSBwb2xsIGFuZCBhbGxvdyBmb3IgdGVhcmluZyBldmVyeXRoaW5nIGRvd24uCitjbGFzcyBMb2dnaW5nVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dmdW5jLCBzb2NrLCBsb2dnZXIpOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb25fZXN0YWJsaXNoZWQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBzZWxmLnNlcnZlcnNvY2sgPSBzb2NrCisgICAgICAgIHNlbGYubG9nZnVuYyA9IGxvZ2Z1bmMKKyAgICAgICAgc2VsZi5sb2dnZXIgPSBsb2dnZXIKKyAgICAgICAgc2VsZi5yZWFkc29jayA9IE5vbmUKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKworICAgICAgICBzZWxmLmVycm9yZXZlbnRzID0gc2VsZWN0LlBPTExFUlIgfCBzZWxlY3QuUE9MTEhVUCB8IHNlbGVjdC5QT0xMTlZBTAorICAgICAgICBzZWxmLnJlYWRldmVudHMgPSBzZWxlY3QuUE9MTElOIHwgc2VsZWN0LlBPTExQUkkKKworICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYsIHRhcmdldD1zZWxmLnRocmVhZHRhcmdldCkKKworICAgIGRlZiB0aHJlYWR0YXJnZXQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZXZlbnRsb29wKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYudGVhcmRvd24oKQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiU3RhcnRpbmcgbG9nZ2luZyB0aHJlYWQiKQorICAgICAgICBzZWxmLnJlYWRwaXBlLCBzZWxmLndyaXRlcGlwZSA9IG9zLnBpcGUoKQorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLnJ1bihzZWxmKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlN0b3BwaW5nIGxvZ2dpbmcgdGhyZWFkIikKKyAgICAgICAgaWYgc2VsZi5ydW5uaW5nOgorICAgICAgICAgICAgb3Mud3JpdGUoc2VsZi53cml0ZXBpcGUsICJzdG9wIikKKworICAgIGRlZiB0ZWFyZG93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiVGVhcmluZyBkb3duIGxvZ2dpbmcgdGhyZWFkIikKKyAgICAgICAgc2VsZi5jbG9zZV9zb2NrZXQoc2VsZi5zZXJ2ZXJzb2NrKQorCisgICAgICAgIGlmIHNlbGYucmVhZHNvY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmNsb3NlX3NvY2tldChzZWxmLnJlYWRzb2NrKQorCisgICAgICAgIHNlbGYuY2xvc2VfaWdub3JlX2Vycm9yKHNlbGYucmVhZHBpcGUpCisgICAgICAgIHNlbGYuY2xvc2VfaWdub3JlX2Vycm9yKHNlbGYud3JpdGVwaXBlKQorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorCisgICAgZGVmIGV2ZW50bG9vcChzZWxmKToKKyAgICAgICAgcG9sbCA9IHNlbGVjdC5wb2xsKCkKKyAgICAgICAgZXZlbnRtYXNrID0gc2VsZi5lcnJvcmV2ZW50cyB8IHNlbGYucmVhZGV2ZW50cworICAgICAgICBwb2xsLnJlZ2lzdGVyKHNlbGYuc2VydmVyc29jay5maWxlbm8oKSkKKyAgICAgICAgcG9sbC5yZWdpc3RlcihzZWxmLnJlYWRwaXBlLCBldmVudG1hc2spCisKKyAgICAgICAgYnJlYWtvdXQgPSBGYWxzZQorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlN0YXJ0aW5nIHRocmVhZCBldmVudCBsb29wIikKKyAgICAgICAgd2hpbGUgbm90IGJyZWFrb3V0OgorICAgICAgICAgICAgZXZlbnRzID0gcG9sbC5wb2xsKCkKKyAgICAgICAgICAgIGZvciBldmVudCBpbiBldmVudHM6CisgICAgICAgICAgICAgICAgIyBBbiBlcnJvciBvY2N1cnJlZCwgYmFpbCBvdXQKKyAgICAgICAgICAgICAgICBpZiBldmVudFsxXSAmIHNlbGYuZXJyb3JldmVudHM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihzZWxmLnN0cmluZ2lmeV9ldmVudChldmVudFsxXSkpCisKKyAgICAgICAgICAgICAgICAjIEV2ZW50IHRvIHN0b3AgdGhlIHRocmVhZAorICAgICAgICAgICAgICAgIGlmIHNlbGYucmVhZHBpcGUgPT0gZXZlbnRbMF06CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlN0b3AgZXZlbnQgcmVjZWl2ZWQiKQorICAgICAgICAgICAgICAgICAgICBicmVha291dCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgICMgQSBjb25uZWN0aW9uIHJlcXVlc3Qgd2FzIHJlY2VpdmVkCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLnNlcnZlcnNvY2suZmlsZW5vKCkgPT0gZXZlbnRbMF06CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIkNvbm5lY3Rpb24gcmVxdWVzdCByZWNlaXZlZCIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVhZHNvY2ssIF8gPSBzZWxmLnNlcnZlcnNvY2suYWNjZXB0KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWFkc29jay5zZXRibG9ja2luZygwKQorICAgICAgICAgICAgICAgICAgICBwb2xsLnVucmVnaXN0ZXIoc2VsZi5zZXJ2ZXJzb2NrLmZpbGVubygpKQorICAgICAgICAgICAgICAgICAgICBwb2xsLnJlZ2lzdGVyKHNlbGYucmVhZHNvY2suZmlsZW5vKCkpCisKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiU2V0dGluZyBjb25uZWN0aW9uIGVzdGFibGlzaGVkIGV2ZW50IikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uX2VzdGFibGlzaGVkLnNldCgpCisKKyAgICAgICAgICAgICAgICAjIEFjdHVhbCBkYXRhIHRvIGJlIGxvZ2dlZAorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5yZWFkc29jay5maWxlbm8oKSA9PSBldmVudFswXToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYucmVjdigxMDI0KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2Z1bmMoZGF0YSkKKworICAgICMgU2luY2UgdGhlIHNvY2tldCBpcyBub24tYmxvY2tpbmcgbWFrZSBzdXJlIHRvIGhvbm9yIEVBR0FJTgorICAgICMgYW5kIEVXT1VMREJMT0NLLgorICAgIGRlZiByZWN2KHNlbGYsIGNvdW50KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IHNlbGYucmVhZHNvY2sucmVjdihjb3VudCkKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FQUdBSU4gb3IgZS5lcnJubyA9PSBlcnJuby5FV09VTERCTE9DSzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBpZiBkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIk5vIGRhdGEgb24gcmVhZCByZWFkeSBzb2NrZXQiKQorICAgICAgICBlbGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgIyBUaGlzIGFjdHVhbGx5IG1lYW5zIGFuIG9yZGVybHkgc2h1dGRvd24KKyAgICAgICAgICAgICMgaGFwcGVuZWQuIEJ1dCBmb3IgdGhpcyBjb2RlIGl0IGNvdW50cyBhcyBhbgorICAgICAgICAgICAgIyBlcnJvciBzaW5jZSB0aGUgY29ubmVjdGlvbiBzaG91bGRuJ3QgZ28gYXdheQorICAgICAgICAgICAgIyB1bnRpbCBxZW11IGV4aXRzLgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDb25zb2xlIGNvbm5lY3Rpb24gY2xvc2VkIHVuZXhwZWN0ZWRseSIpCisKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiBzdHJpbmdpZnlfZXZlbnQoc2VsZiwgZXZlbnQpOgorICAgICAgICB2YWwgPSAnJworICAgICAgICBpZiBzZWxlY3QuUE9MTEVSUiA9PSBldmVudDoKKyAgICAgICAgICAgIHZhbCA9ICdQT0xMRVInCisgICAgICAgIGVsaWYgc2VsZWN0LlBPTExIVVAgPT0gZXZlbnQ6CisgICAgICAgICAgICB2YWwgPSAnUE9MTEhVUCcKKyAgICAgICAgZWxpZiBzZWxlY3QuUE9MTE5WQUwgPT0gZXZlbnQ6CisgICAgICAgICAgICB2YWwgPSAnUE9MTE5WQUwnCisgICAgICAgIHJldHVybiB2YWwKKworICAgIGRlZiBjbG9zZV9zb2NrZXQoc2VsZiwgc29jayk6CisgICAgICAgIHNvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfUkRXUikKKyAgICAgICAgc29jay5jbG9zZSgpCisKKyAgICBkZWYgY2xvc2VfaWdub3JlX2Vycm9yKHNlbGYsIGZkKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL3FlbXV0aW55cnVubmVyLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL3FlbXV0aW55cnVubmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOTUxMDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvcWVtdXRpbnlydW5uZXIucHkKQEAgLTAsMCArMSwxNzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCisjIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgY2xhc3MgZm9yIHN0YXJ0aW5nIHFlbXUgaW1hZ2VzIG9mIHBva3kgdGlueS4KKyMgSXQncyB1c2VkIGJ5IHRlc3RpbWFnZS5iYmNsYXNzLgorCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IG9zCitpbXBvcnQgdGltZQoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHJlCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc2VsZWN0CitpbXBvcnQgYmIKK2Zyb20gcWVtdXJ1bm5lciBpbXBvcnQgUWVtdVJ1bm5lcgorCitjbGFzcyBRZW11VGlueVJ1bm5lcihRZW11UnVubmVyKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYWNoaW5lLCByb290ZnMsIGRpc3BsYXksIHRtcGRpciwgZGVwbG95X2Rpcl9pbWFnZSwgbG9nZmlsZSwga2VybmVsLCBib290dGltZSk6CisKKyAgICAgICAgIyBQb3BlbiBvYmplY3QgZm9yIHJ1bnFlbXUKKyAgICAgICAgc2VsZi5ydW5xZW11ID0gTm9uZQorICAgICAgICAjIHBpZCBvZiB0aGUgcWVtdSBwcm9jZXNzIHRoYXQgcnVucWVtdSB3aWxsIHN0YXJ0CisgICAgICAgIHNlbGYucWVtdXBpZCA9IE5vbmUKKyAgICAgICAgIyB0YXJnZXQgaXAgLSBmcm9tIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgICAgc2VsZi5pcCA9IE5vbmUKKyAgICAgICAgIyBob3N0IGlwIC0gd2hlcmUgcWVtdSBpcyBydW5uaW5nCisgICAgICAgIHNlbGYuc2VydmVyX2lwID0gTm9uZQorCisgICAgICAgIHNlbGYubWFjaGluZSA9IG1hY2hpbmUKKyAgICAgICAgc2VsZi5yb290ZnMgPSByb290ZnMKKyAgICAgICAgc2VsZi5kaXNwbGF5ID0gZGlzcGxheQorICAgICAgICBzZWxmLnRtcGRpciA9IHRtcGRpcgorICAgICAgICBzZWxmLmRlcGxveV9kaXJfaW1hZ2UgPSBkZXBsb3lfZGlyX2ltYWdlCisgICAgICAgIHNlbGYubG9nZmlsZSA9IGxvZ2ZpbGUKKyAgICAgICAgc2VsZi5ib290dGltZSA9IGJvb3R0aW1lCisKKyAgICAgICAgc2VsZi5ydW5xZW11dGltZSA9IDYwCisgICAgICAgIHNlbGYuc29ja2V0ZmlsZSA9ICJjb25zb2xlLnNvY2siCisgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldCA9IE5vbmUKKyAgICAgICAgc2VsZi5rZXJuZWwgPSBrZXJuZWwKKworCisgICAgZGVmIGNyZWF0ZV9zb2NrZXQoc2VsZik6CisgICAgICAgIHRyaWVzID0gMworICAgICAgICB3aGlsZSB0cmllcyA+IDA6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfc29ja2V0ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldC5jb25uZWN0KHNlbGYuc29ja2V0ZmlsZSkKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJDcmVhdGVkIGxpc3RlbmluZyBzb2NrZXQgZm9yIHFlbXUgc2VyaWFsIGNvbnNvbGUuIikKKyAgICAgICAgICAgICAgICB0cmllcyA9IDAKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIG1zZzoKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9zb2NrZXQuY2xvc2UoKQorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJGYWlsZWQgdG8gY3JlYXRlIGxpc3RlbmluZyBzb2NrZXQuIikKKyAgICAgICAgICAgICAgICB0cmllcyAtPSAxCisKKyAgICBkZWYgbG9nKHNlbGYsIG1zZyk6CisgICAgICAgIGlmIHNlbGYubG9nZmlsZToKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCIlcyIgJSBtc2cpCisKKyAgICBkZWYgc3RhcnQoc2VsZiwgcWVtdXBhcmFtcyA9IE5vbmUpOgorCisgICAgICAgIGlmIHNlbGYuZGlzcGxheToKKyAgICAgICAgICAgIG9zLmVudmlyb25bIkRJU1BMQVkiXSA9IHNlbGYuZGlzcGxheQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIuZXJyb3IoIlRvIHN0YXJ0IHFlbXUgSSBuZWVkIGEgWCBkZXNrdG9wLCBwbGVhc2Ugc2V0IERJU1BMQVkgY29ycmVjdGx5IChlLmcuIERJU1BMQVk9OjEpIikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5yb290ZnMpOgorICAgICAgICAgICAgYmIuZXJyb3IoIkludmFsaWQgcm9vdGZzICVzIiAlIHNlbGYucm9vdGZzKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLnRtcGRpcik6CisgICAgICAgICAgICBiYi5lcnJvcigiSW52YWxpZCBUTVBESVIgcGF0aCAlcyIgJSBzZWxmLnRtcGRpcikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MuZW52aXJvblsiT0VfVE1QRElSIl0gPSBzZWxmLnRtcGRpcgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5kZXBsb3lfZGlyX2ltYWdlKToKKyAgICAgICAgICAgIGJiLmVycm9yKCJJbnZhbGlkIERFUExPWV9ESVJfSU1BR0UgcGF0aCAlcyIgJSBzZWxmLmRlcGxveV9kaXJfaW1hZ2UpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLmVudmlyb25bIkRFUExPWV9ESVJfSU1BR0UiXSA9IHNlbGYuZGVwbG95X2Rpcl9pbWFnZQorCisgICAgICAgICMgU2V0IHRoaXMgZmxhZyBzbyB0aGF0IFFlbXUgZG9lc24ndCBkbyBhbnkgZ3JhYnMgYXMgU0RMIGdyYWJzIGludGVyYWN0CisgICAgICAgICMgYmFkbHkgd2l0aCBzY3JlZW5zYXZlcnMuCisgICAgICAgIG9zLmVudmlyb25bIlFFTVVfRE9OVF9HUkFCIl0gPSAiMSIKKyAgICAgICAgc2VsZi5xZW11cGFyYW1zID0gJy0tYXBwZW5kICJyb290PS9kZXYvcmFtMCBjb25zb2xlPXR0eVMwIiAtbm9ncmFwaGljIC1zZXJpYWwgdW5peDolcyxzZXJ2ZXIsbm93YWl0JyAlIHNlbGYuc29ja2V0ZmlsZQorCisgICAgICAgIGxhdW5jaF9jbWQgPSAncWVtdS1zeXN0ZW0taTM4NiAta2VybmVsICVzIC1pbml0cmQgJXMgJXMnICUgKHNlbGYua2VybmVsLCBzZWxmLnJvb3Rmcywgc2VsZi5xZW11cGFyYW1zKQorICAgICAgICBzZWxmLnJ1bnFlbXUgPSBzdWJwcm9jZXNzLlBvcGVuKGxhdW5jaF9jbWQsc2hlbGw9VHJ1ZSxzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCxwcmVleGVjX2ZuPW9zLnNldHBncnApCisKKyAgICAgICAgYmIubm90ZSgicnVucWVtdSBzdGFydGVkLCBwaWQgaXMgJXMiICUgc2VsZi5ydW5xZW11LnBpZCkKKyAgICAgICAgYmIubm90ZSgid2FpdGluZyBhdCBtb3N0ICVzIHNlY29uZHMgZm9yIHFlbXUgcGlkIiAlIHNlbGYucnVucWVtdXRpbWUpCisgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSArIHNlbGYucnVucWVtdXRpbWUKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNfYWxpdmUoKSBhbmQgdGltZS50aW1lKCkgPCBlbmR0aW1lOgorICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorCisgICAgICAgIGlmIHNlbGYuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIGJiLm5vdGUoInFlbXUgc3RhcnRlZCAtIHFlbXUgcHJvY2NlcyBwaWQgaXMgJXMiICUgc2VsZi5xZW11cGlkKQorICAgICAgICAgICAgc2VsZi5jcmVhdGVfc29ja2V0KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiLm5vdGUoIlFlbXUgcGlkIGRpZG4ndCBhcHBlYXJlZCBpbiAlcyBzZWNvbmRzIiAlIHNlbGYucnVucWVtdXRpbWUpCisgICAgICAgICAgICBvdXRwdXQgPSBzZWxmLnJ1bnFlbXUuc3Rkb3V0CisgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICAgICAgYmIubm90ZSgiT3V0cHV0IGZyb20gcnVucWVtdTpcbiVzIiAlIG91dHB1dC5yZWFkKCkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICByZXR1cm4gc2VsZi5pc19hbGl2ZSgpCisKKyAgICBkZWYgcnVuX3NlcmlhbChzZWxmLCBjb21tYW5kKToKKyAgICAgICAgc2VsZi5zZXJ2ZXJfc29ja2V0LnNlbmRhbGwoY29tbWFuZCsnXG4nKQorICAgICAgICBkYXRhID0gJycKKyAgICAgICAgc3RhdHVzID0gMAorICAgICAgICBzdG9wcmVhZCA9IEZhbHNlCisgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSs1CisgICAgICAgIHdoaWxlIHRpbWUudGltZSgpPGVuZHRpbWUgYW5kIG5vdCBzdG9wcmVhZDoKKyAgICAgICAgICAgICAgICBzcmVhZCwgXywgXyA9IHNlbGVjdC5zZWxlY3QoW3NlbGYuc2VydmVyX3NvY2tldF0sW10sW10sNSkKKyAgICAgICAgICAgICAgICBmb3Igc29jayBpbiBzcmVhZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuc3dlciA9IHNvY2sucmVjdigxMDI0KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYW5zd2VyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhICs9IGFuc3dlcgorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3ByZWFkID0gVHJ1ZQorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHN0YXR1cyA9IDEKKyAgICAgICAgcmV0dXJuIChzdGF0dXMsIHN0cihkYXRhKSkKKworICAgIGRlZiBmaW5kX2NoaWxkKHNlbGYscGFyZW50X3BpZCk6CisgICAgICAgICMKKyAgICAgICAgIyBXYWxrIHRoZSBwcm9jZXNzIHRyZWUgZnJvbSB0aGUgcHJvY2VzcyBzcGVjaWZpZWQgbG9va2luZyBmb3IgYSBxZW11LXN5c3RlbS4gUmV0dXJuIGl0cyBbcGlkJ2NtZF0KKyAgICAgICAgIworICAgICAgICBwcyA9IHN1YnByb2Nlc3MuUG9wZW4oWydwcycsICdheHd3JywgJy1vJywgJ3BpZCxwcGlkLGNvbW1hbmQnXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQorICAgICAgICBwcm9jZXNzZXMgPSBwcy5zcGxpdCgnXG4nKQorICAgICAgICBuZmllbGRzID0gbGVuKHByb2Nlc3Nlc1swXS5zcGxpdCgpKSAtIDEKKyAgICAgICAgcGlkcyA9IHt9CisgICAgICAgIGNvbW1hbmRzID0ge30KKyAgICAgICAgZm9yIHJvdyBpbiBwcm9jZXNzZXNbMTpdOgorICAgICAgICAgICAgZGF0YSA9IHJvdy5zcGxpdChOb25lLCBuZmllbGRzKQorICAgICAgICAgICAgaWYgbGVuKGRhdGEpICE9IDM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGRhdGFbMV0gbm90IGluIHBpZHM6CisgICAgICAgICAgICAgICAgcGlkc1tkYXRhWzFdXSA9IFtdCisKKyAgICAgICAgICAgIHBpZHNbZGF0YVsxXV0uYXBwZW5kKGRhdGFbMF0pCisgICAgICAgICAgICBjb21tYW5kc1tkYXRhWzBdXSA9IGRhdGFbMl0KKworICAgICAgICBpZiBwYXJlbnRfcGlkIG5vdCBpbiBwaWRzOgorICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAgICAgICAgcGFyZW50cyA9IFtdCisgICAgICAgIG5ld3BhcmVudHMgPSBwaWRzW3BhcmVudF9waWRdCisgICAgICAgIHdoaWxlIG5ld3BhcmVudHM6CisgICAgICAgICAgICBuZXh0ID0gW10KKyAgICAgICAgICAgIGZvciBwIGluIG5ld3BhcmVudHM6CisgICAgICAgICAgICAgICAgaWYgcCBpbiBwaWRzOgorICAgICAgICAgICAgICAgICAgICBmb3IgbiBpbiBwaWRzW3BdOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbiBub3QgaW4gcGFyZW50cyBhbmQgbiBub3QgaW4gbmV4dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0LmFwcGVuZChuKQorICAgICAgICAgICAgICAgIGlmIHAgbm90IGluIHBhcmVudHM6CisgICAgICAgICAgICAgICAgICAgIHBhcmVudHMuYXBwZW5kKHApCisgICAgICAgICAgICAgICAgICAgIG5ld3BhcmVudHMgPSBuZXh0CisgICAgICAgICNwcmludCAiQ2hpbGRyZW4gbWF0Y2hpbmcgJXM6IiAlIHN0cihwYXJlbnRzKQorICAgICAgICBmb3IgcCBpbiBwYXJlbnRzOgorICAgICAgICAgICAgIyBOZWVkIHRvIGJlIGNhcmVmdWwgaGVyZSBzaW5jZSBydW5xZW11LWludGVybmFsIHJ1bnMgImxkZCBxZW11LXN5c3RlbS14eHh4IgorICAgICAgICAgICAgIyBBbHNvLCBvbGQgdmVyc2lvbnMgb2YgbGRkICgyLjExKSBydW4gIkxEX1hYWFggcWVtdS1zeXN0ZW0teHh4eCIKKyAgICAgICAgICAgIGJhc2VjbWQgPSBjb21tYW5kc1twXS5zcGxpdCgpWzBdCisgICAgICAgICAgICBiYXNlY21kID0gb3MucGF0aC5iYXNlbmFtZShiYXNlY21kKQorICAgICAgICAgICAgaWYgInFlbXUtc3lzdGVtIiBpbiBiYXNlY21kIGFuZCAiLXNlcmlhbCB1bml4IiBpbiBjb21tYW5kc1twXToKKyAgICAgICAgICAgICAgICByZXR1cm4gW2ludChwKSxjb21tYW5kc1twXV0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvc3NoY29udHJvbC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9zc2hjb250cm9sLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZjUwNTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvc3NoY29udHJvbC5weQpAQCAtMCwwICsxLDE1NCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgUHJvdmlkZXMgYSBjbGFzcyBmb3Igc2V0dGluZyB1cCBzc2ggY29ubmVjdGlvbnMsCisjIHJ1bm5pbmcgY29tbWFuZHMgYW5kIGNvcHlpbmcgZmlsZXMgdG8vZnJvbSBhIHRhcmdldC4KKyMgSXQncyB1c2VkIGJ5IHRlc3RpbWFnZS5iYmNsYXNzIGFuZCB0ZXN0cyBpbiBsaWIvb2VxYS9ydW50aW1lLgorCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRpbWUKK2ltcG9ydCBvcworaW1wb3J0IHNlbGVjdAorCisKK2NsYXNzIFNTSFByb2Nlc3Mob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKipvcHRpb25zKToKKworICAgICAgICBzZWxmLmRlZmF1bHRvcHRzID0geworICAgICAgICAgICAgInN0ZG91dCI6IHN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICJzdGRlcnIiOiBzdWJwcm9jZXNzLlNURE9VVCwKKyAgICAgICAgICAgICJzdGRpbiI6IE5vbmUsCisgICAgICAgICAgICAic2hlbGwiOiBGYWxzZSwKKyAgICAgICAgICAgICJidWZzaXplIjogLTEsCisgICAgICAgICAgICAicHJlZXhlY19mbiI6IG9zLnNldHNpZCwKKyAgICAgICAgfQorICAgICAgICBzZWxmLm9wdGlvbnMgPSBkaWN0KHNlbGYuZGVmYXVsdG9wdHMpCisgICAgICAgIHNlbGYub3B0aW9ucy51cGRhdGUob3B0aW9ucykKKyAgICAgICAgc2VsZi5zdGF0dXMgPSBOb25lCisgICAgICAgIHNlbGYub3V0cHV0ID0gTm9uZQorICAgICAgICBzZWxmLnByb2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuc3RhcnR0aW1lID0gTm9uZQorICAgICAgICBzZWxmLmxvZ2ZpbGUgPSBOb25lCisKKyAgICAgICAgIyBVbnNldCBESVNQTEFZIHdoaWNoIG1lYW5zIHdlIHdvbid0IHRyaWdnZXIgU1NIX0FTS1BBU1MKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgaWYgIkRJU1BMQVkiIGluIGVudjoKKyAgICAgICAgICAgIGRlbCBlbnZbJ0RJU1BMQVknXQorICAgICAgICBzZWxmLm9wdGlvbnNbJ2VudiddID0gZW52CisKKyAgICBkZWYgbG9nKHNlbGYsIG1zZyk6CisgICAgICAgIGlmIHNlbGYubG9nZmlsZToKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgICAgIGYud3JpdGUoIiVzIiAlIG1zZykKKworICAgIGRlZiBfcnVuKHNlbGYsIGNvbW1hbmQsIHRpbWVvdXQ9Tm9uZSwgbG9nZmlsZT1Ob25lKToKKyAgICAgICAgc2VsZi5sb2dmaWxlID0gbG9nZmlsZQorICAgICAgICBzZWxmLnN0YXJ0dGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIG91dHB1dCA9ICcnCisgICAgICAgIHNlbGYucHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oY29tbWFuZCwgKipzZWxmLm9wdGlvbnMpCisgICAgICAgIGlmIHRpbWVvdXQ6CisgICAgICAgICAgICBlbmR0aW1lID0gc2VsZi5zdGFydHRpbWUgKyB0aW1lb3V0CisgICAgICAgICAgICBlb2YgPSBGYWxzZQorICAgICAgICAgICAgd2hpbGUgdGltZS50aW1lKCkgPCBlbmR0aW1lIGFuZCBub3QgZW9mOgorICAgICAgICAgICAgICAgIGlmIHNlbGVjdC5zZWxlY3QoW3NlbGYucHJvY2Vzcy5zdGRvdXRdLCBbXSwgW10sIDUpWzBdICE9IFtdOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gb3MucmVhZChzZWxmLnByb2Nlc3Muc3Rkb3V0LmZpbGVubygpLCAxMDI0KQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzcy5zdGRvdXQuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgZW9mID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nKGRhdGEpCisgICAgICAgICAgICAgICAgICAgICAgICBlbmR0aW1lID0gdGltZS50aW1lKCkgKyB0aW1lb3V0CisKKworICAgICAgICAgICAgIyBwcm9jZXNzIGhhc24ndCByZXR1cm5lZCB5ZXQKKyAgICAgICAgICAgIGlmIG5vdCBlb2Y6CisgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzLnRlcm1pbmF0ZSgpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzLmtpbGwoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgbGFzdGxpbmUgPSAiXG5Qcm9jZXNzIGtpbGxlZCAtIG5vIG91dHB1dCBmb3IgJWQgc2Vjb25kcy4gVG90YWwgcnVubmluZyB0aW1lOiAlZCBzZWNvbmRzLiIgJSAodGltZW91dCwgdGltZS50aW1lKCkgLSBzZWxmLnN0YXJ0dGltZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxvZyhsYXN0bGluZSkKKyAgICAgICAgICAgICAgICBvdXRwdXQgKz0gbGFzdGxpbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG91dHB1dCA9IHNlbGYucHJvY2Vzcy5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgICAgICBzZWxmLmxvZyhvdXRwdXQucnN0cmlwKCkpCisKKyAgICAgICAgc2VsZi5zdGF0dXMgPSBzZWxmLnByb2Nlc3Mud2FpdCgpCisgICAgICAgIHNlbGYub3V0cHV0ID0gb3V0cHV0LnJzdHJpcCgpCisKKyAgICBkZWYgcnVuKHNlbGYsIGNvbW1hbmQsIHRpbWVvdXQ9Tm9uZSwgbG9nZmlsZT1Ob25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fcnVuKGNvbW1hbmQsIHRpbWVvdXQsIGxvZ2ZpbGUpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICMgTmVlZCB0byBndWFyZCBhZ2FpbnN0IGEgU3lzdGVtRXhpdCBvciBvdGhlciBleGNlcHRpb24gb2NjdXJpbmcgd2hpbHN0IHJ1bm5pbmcKKyAgICAgICAgICAgICMgYW5kIGVuc3VyZSB3ZSBkb24ndCBsZWF2ZSBhIHByb2Nlc3MgYmVoaW5kLgorICAgICAgICAgICAgaWYgc2VsZi5wcm9jZXNzLnBvbGwoKSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzcy5raWxsKCkKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXR1cyA9IHNlbGYucHJvY2Vzcy53YWl0KCkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiAoc2VsZi5zdGF0dXMsIHNlbGYub3V0cHV0KQorCitjbGFzcyBTU0hDb250cm9sKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGlwLCBsb2dmaWxlPU5vbmUsIHRpbWVvdXQ9MzAwLCB1c2VyPSdyb290JywgcG9ydD1Ob25lKToKKyAgICAgICAgc2VsZi5pcCA9IGlwCisgICAgICAgIHNlbGYuZGVmYXVsdHRpbWVvdXQgPSB0aW1lb3V0CisgICAgICAgIHNlbGYuaWdub3JlX3N0YXR1cyA9IFRydWUKKyAgICAgICAgc2VsZi5sb2dmaWxlID0gbG9nZmlsZQorICAgICAgICBzZWxmLnVzZXIgPSB1c2VyCisgICAgICAgIHNlbGYuc3NoX29wdGlvbnMgPSBbCisgICAgICAgICAgICAgICAgJy1vJywgJ1VzZXJLbm93bkhvc3RzRmlsZT0vZGV2L251bGwnLAorICAgICAgICAgICAgICAgICctbycsICdTdHJpY3RIb3N0S2V5Q2hlY2tpbmc9bm8nLAorICAgICAgICAgICAgICAgICctbycsICdMb2dMZXZlbD1FUlJPUicKKyAgICAgICAgICAgICAgICBdCisgICAgICAgIHNlbGYuc3NoID0gWydzc2gnLCAnLWwnLCBzZWxmLnVzZXIgXSArIHNlbGYuc3NoX29wdGlvbnMKKyAgICAgICAgc2VsZi5zY3AgPSBbJ3NjcCddICsgc2VsZi5zc2hfb3B0aW9ucworICAgICAgICBpZiBwb3J0OgorICAgICAgICAgICAgc2VsZi5zc2ggPSBzZWxmLnNzaCArIFsgJy1wJywgcG9ydCBdCisgICAgICAgICAgICBzZWxmLnNjcCA9IHNlbGYuc2NwICsgWyAnLVAnLCBwb3J0IF0KKworICAgIGRlZiBsb2coc2VsZiwgbXNnKToKKyAgICAgICAgaWYgc2VsZi5sb2dmaWxlOgorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYubG9nZmlsZSwgImEiKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoIiVzXG4iICUgbXNnKQorCisgICAgZGVmIF9pbnRlcm5hbF9ydW4oc2VsZiwgY29tbWFuZCwgdGltZW91dD1Ob25lLCBpZ25vcmVfc3RhdHVzID0gVHJ1ZSk6CisgICAgICAgIHNlbGYubG9nKCJbUnVubmluZ10kICVzIiAlICIgIi5qb2luKGNvbW1hbmQpKQorCisgICAgICAgIHByb2MgPSBTU0hQcm9jZXNzKCkKKyAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBwcm9jLnJ1bihjb21tYW5kLCB0aW1lb3V0LCBsb2dmaWxlPXNlbGYubG9nZmlsZSkKKworICAgICAgICBzZWxmLmxvZygiW0NvbW1hbmQgcmV0dXJuZWQgJyVkJyBhZnRlciAlLjJmIHNlY29uZHNdIiAlIChzdGF0dXMsIHRpbWUudGltZSgpIC0gcHJvYy5zdGFydHRpbWUpKQorCisgICAgICAgIGlmIHN0YXR1cyBhbmQgbm90IGlnbm9yZV9zdGF0dXM6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiQ29tbWFuZCAnJXMnIHJldHVybmVkIG5vbi16ZXJvIGV4aXQgc3RhdHVzICVkOlxuJXMiICUgKGNvbW1hbmQsIHN0YXR1cywgb3V0cHV0KSkKKworICAgICAgICByZXR1cm4gKHN0YXR1cywgb3V0cHV0KQorCisgICAgZGVmIHJ1bihzZWxmLCBjb21tYW5kLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgY29tbWFuZCAtIHNzaCBjb21tYW5kIHRvIHJ1bgorICAgICAgICB0aW1lb3V0PTx2YWw+IC0ga2lsbCBjb21tYW5kIGlmIHRoZXJlIGlzIG5vIG91dHB1dCBhZnRlciA8dmFsPiBzZWNvbmRzCisgICAgICAgIHRpbWVvdXQ9Tm9uZSAtIGtpbGwgY29tbWFuZCBpZiB0aGVyZSBpcyBubyBvdXRwdXQgYWZ0ZXIgYSBkZWZhdWx0IHZhbHVlIHNlY29uZHMKKyAgICAgICAgdGltZW91dD0wIC0gbm8gdGltZW91dCwgbGV0IGNvbW1hbmQgcnVuIHVudGlsIGl0IHJldHVybnMKKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBXZSBuZWVkIHRvIHNvdXJjZSAvZXRjL3Byb2ZpbGUgZm9yIGEgcHJvcGVyIFBBVEggb24gdGhlIHRhcmdldAorICAgICAgICBjb21tYW5kID0gc2VsZi5zc2ggKyBbc2VsZi5pcCwgJyAuIC9ldGMvcHJvZmlsZTsgJyArIGNvbW1hbmRdCisKKyAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ludGVybmFsX3J1bihjb21tYW5kLCBzZWxmLmRlZmF1bHR0aW1lb3V0LCBzZWxmLmlnbm9yZV9zdGF0dXMpCisgICAgICAgIGlmIHRpbWVvdXQgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9pbnRlcm5hbF9ydW4oY29tbWFuZCwgTm9uZSwgc2VsZi5pZ25vcmVfc3RhdHVzKQorICAgICAgICByZXR1cm4gc2VsZi5faW50ZXJuYWxfcnVuKGNvbW1hbmQsIHRpbWVvdXQsIHNlbGYuaWdub3JlX3N0YXR1cykKKworICAgIGRlZiBjb3B5X3RvKHNlbGYsIGxvY2FscGF0aCwgcmVtb3RlcGF0aCk6CisgICAgICAgIGNvbW1hbmQgPSBzZWxmLnNjcCArIFtsb2NhbHBhdGgsICclc0AlczolcycgJSAoc2VsZi51c2VyLCBzZWxmLmlwLCByZW1vdGVwYXRoKV0KKyAgICAgICAgcmV0dXJuIHNlbGYuX2ludGVybmFsX3J1bihjb21tYW5kLCBpZ25vcmVfc3RhdHVzPUZhbHNlKQorCisgICAgZGVmIGNvcHlfZnJvbShzZWxmLCByZW1vdGVwYXRoLCBsb2NhbHBhdGgpOgorICAgICAgICBjb21tYW5kID0gc2VsZi5zY3AgKyBbJyVzQCVzOiVzJyAlIChzZWxmLnVzZXIsIHNlbGYuaXAsIHJlbW90ZXBhdGgpLCBsb2NhbHBhdGhdCisgICAgICAgIHJldHVybiBzZWxmLl9pbnRlcm5hbF9ydW4oY29tbWFuZCwgaWdub3JlX3N0YXR1cz1GYWxzZSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy90YXJnZXRidWlsZC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy90YXJnZXRidWlsZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODUwZDc4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL3RhcmdldGJ1aWxkLnB5CkBAIC0wLDAgKzEsMTM3IEBACisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBQcm92aWRlcyBhIGNsYXNzIGZvciBhdXRvbWF0aW5nIGJ1aWxkIHRlc3RzIGZvciBwcm9qZWN0cworCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IGJiLnV0aWxzCitpbXBvcnQgc3VicHJvY2VzcworZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCisKK2NsYXNzIEJ1aWxkUHJvamVjdCgpOgorCisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCB1cmksIGZvbGRlcm5hbWU9Tm9uZSwgdG1wZGlyPSIvdG1wLyIpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYudXJpID0gdXJpCisgICAgICAgIHNlbGYuYXJjaGl2ZSA9IG9zLnBhdGguYmFzZW5hbWUodXJpKQorICAgICAgICBzZWxmLmxvY2FsYXJjaGl2ZSA9IG9zLnBhdGguam9pbih0bXBkaXIsc2VsZi5hcmNoaXZlKQorICAgICAgICBzZWxmLmZuYW1lID0gcmUuc3ViKHInLnRhci5iejJ8dGFyLmd6JCcsICcnLCBzZWxmLmFyY2hpdmUpCisgICAgICAgIGlmIGZvbGRlcm5hbWU6CisgICAgICAgICAgICBzZWxmLmZuYW1lID0gZm9sZGVybmFtZQorCisgICAgIyBEb3dubG9hZCBzZWxmLmFyY2hpdmUgdG8gc2VsZi5sb2NhbGFyY2hpdmUKKyAgICBkZWYgX2Rvd25sb2FkX2FyY2hpdmUoc2VsZik6CisKKyAgICAgICAgZGxfZGlyID0gc2VsZi5kLmdldFZhcigiRExfRElSIiwgVHJ1ZSkKKyAgICAgICAgaWYgZGxfZGlyIGFuZCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZGxfZGlyLCBzZWxmLmFyY2hpdmUpKToKKyAgICAgICAgICAgIGJiLnV0aWxzLmNvcHlmaWxlKG9zLnBhdGguam9pbihkbF9kaXIsIHNlbGYuYXJjaGl2ZSksIHNlbGYubG9jYWxhcmNoaXZlKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZXhwb3J0dmFycyA9IFsnSFRUUF9QUk9YWScsICdodHRwX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICAgICAnSFRUUFNfUFJPWFknLCAnaHR0cHNfcHJveHknLAorICAgICAgICAgICAgICAgICAgICAgICdGVFBfUFJPWFknLCAnZnRwX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICAgICAnRlRQU19QUk9YWScsICdmdHBzX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICAgICAnTk9fUFJPWFknLCAnbm9fcHJveHknLAorICAgICAgICAgICAgICAgICAgICAgICdBTExfUFJPWFknLCAnYWxsX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICAgICAnU09DS1M1X1VTRVInLCAnU09DS1M1X1BBU1NXRCddCisKKyAgICAgICAgY21kID0gJycKKyAgICAgICAgZm9yIHZhciBpbiBleHBvcnR2YXJzOgorICAgICAgICAgICAgdmFsID0gc2VsZi5kLmdldFZhcih2YXIsIFRydWUpCisgICAgICAgICAgICBpZiB2YWw6CisgICAgICAgICAgICAgICAgY21kID0gJ2V4cG9ydCAnICsgdmFyICsgJz1cIiVzXCI7ICVzJyAlICh2YWwsIGNtZCkKKworICAgICAgICBjbWQgPSBjbWQgKyAid2dldCAtTyAlcyAlcyIgJSAoc2VsZi5sb2NhbGFyY2hpdmUsIHNlbGYudXJpKQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoY21kLCBzaGVsbD1UcnVlKQorCisgICAgIyBUaGlzIG1ldGhvZCBzaG91bGQgcHJvdmlkZSBhIHdheSB0byBydW4gYSBjb21tYW5kIGluIHRoZSBkZXNpcmVkIGVudmlyb25tZW50LgorICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfcnVuKHNlbGYsIGNtZCk6CisgICAgICAgIHBhc3MKKworICAgICMgVGhlIHRpbWVvdXQgcGFyYW1ldGVyIG9mIHRhcmdldC5ydW4gaXMgc2V0IHRvIDAgdG8gbWFrZSB0aGUgc3NoIGNvbW1hbmQKKyAgICAjIHJ1biB3aXRoIG5vIHRpbWVvdXQuCisgICAgZGVmIHJ1bl9jb25maWd1cmUoc2VsZiwgY29uZmlndXJlX2FyZ3M9JycsIGV4dHJhX2NtZHM9JycpOgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuKCdjZCAlczsgJXMgLi9jb25maWd1cmUgJXMnICUgKHNlbGYudGFyZ2V0ZGlyLCBleHRyYV9jbWRzLCBjb25maWd1cmVfYXJncykpCisKKyAgICBkZWYgcnVuX21ha2Uoc2VsZiwgbWFrZV9hcmdzPScnKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bignY2QgJXM7IG1ha2UgJXMnICUgKHNlbGYudGFyZ2V0ZGlyLCBtYWtlX2FyZ3MpKQorCisgICAgZGVmIHJ1bl9pbnN0YWxsKHNlbGYsIGluc3RhbGxfYXJncz0nJyk6CisgICAgICAgIHJldHVybiBzZWxmLl9ydW4oJ2NkICVzOyBtYWtlIGluc3RhbGwgJXMnICUgKHNlbGYudGFyZ2V0ZGlyLCBpbnN0YWxsX2FyZ3MpKQorCisgICAgZGVmIGNsZWFuKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW4oJ3JtIC1yZiAlcycgJSBzZWxmLnRhcmdldGRpcikKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKCdybSAtZiAlcycgJSBzZWxmLmxvY2FsYXJjaGl2ZSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgcGFzcworCitjbGFzcyBUYXJnZXRCdWlsZFByb2plY3QoQnVpbGRQcm9qZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXJnZXQsIGQsIHVyaSwgZm9sZGVybmFtZT1Ob25lKToKKyAgICAgICAgc2VsZi50YXJnZXQgPSB0YXJnZXQKKyAgICAgICAgc2VsZi50YXJnZXRkaXIgPSAifi8iCisgICAgICAgIEJ1aWxkUHJvamVjdC5fX2luaXRfXyhzZWxmLCBkLCB1cmksIGZvbGRlcm5hbWUsIHRtcGRpcj0iL3RtcCIpCisKKyAgICBkZWYgZG93bmxvYWRfYXJjaGl2ZShzZWxmKToKKworICAgICAgICBzZWxmLl9kb3dubG9hZF9hcmNoaXZlKCkKKworICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQuY29weV90byhzZWxmLmxvY2FsYXJjaGl2ZSwgc2VsZi50YXJnZXRkaXIpCisgICAgICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGYWlsZWQgdG8gY29weSBhcmNoaXZlIHRvIHRhcmdldCwgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCisKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigndGFyIHhmICVzJXMgLUMgJXMnICUgKHNlbGYudGFyZ2V0ZGlyLCBzZWxmLmFyY2hpdmUsIHNlbGYudGFyZ2V0ZGlyKSkKKyAgICAgICAgaWYgc3RhdHVzICE9IDA6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byBleHRyYWN0IGFyY2hpdmUsIG91dHB1dDogJXMiICUgb3V0cHV0KQorCisgICAgICAgICNDaGFuZ2UgdGFyZ2V0ZGlyIHRvIHByb2plY3QgZm9sZGVyCisgICAgICAgIHNlbGYudGFyZ2V0ZGlyID0gc2VsZi50YXJnZXRkaXIgKyBzZWxmLmZuYW1lCisKKyAgICAjIFRoZSB0aW1lb3V0IHBhcmFtZXRlciBvZiB0YXJnZXQucnVuIGlzIHNldCB0byAwIHRvIG1ha2UgdGhlIHNzaCBjb21tYW5kCisgICAgIyBydW4gd2l0aCBubyB0aW1lb3V0LgorICAgIGRlZiBfcnVuKHNlbGYsIGNtZCk6CisgICAgICAgIHJldHVybiBzZWxmLnRhcmdldC5ydW4oY21kLCAwKVswXQorCisKK2NsYXNzIFNES0J1aWxkUHJvamVjdChCdWlsZFByb2plY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RwYXRoLCBzZGtlbnYsIGQsIHVyaSwgZm9sZGVybmFtZT1Ob25lKToKKyAgICAgICAgc2VsZi5zZGtlbnYgPSBzZGtlbnYKKyAgICAgICAgc2VsZi50ZXN0ZGlyID0gdGVzdHBhdGgKKyAgICAgICAgc2VsZi50YXJnZXRkaXIgPSB0ZXN0cGF0aAorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodGVzdHBhdGgpCisgICAgICAgIHNlbGYuZGF0ZXRpbWUgPSBkLmdldFZhcignREFURVRJTUUnLCBUcnVlKQorICAgICAgICBzZWxmLnRlc3Rsb2dkaXIgPSBkLmdldFZhcigiVEVTVF9MT0dfRElSIiwgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYudGVzdGxvZ2RpcikKKyAgICAgICAgc2VsZi5sb2dmaWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGxvZ2RpciwgInNka190YXJnZXRfbG9nLiVzIiAlIHNlbGYuZGF0ZXRpbWUpCisgICAgICAgIEJ1aWxkUHJvamVjdC5fX2luaXRfXyhzZWxmLCBkLCB1cmksIGZvbGRlcm5hbWUsIHRtcGRpcj10ZXN0cGF0aCkKKworICAgIGRlZiBkb3dubG9hZF9hcmNoaXZlKHNlbGYpOgorCisgICAgICAgIHNlbGYuX2Rvd25sb2FkX2FyY2hpdmUoKQorCisgICAgICAgIGNtZCA9ICd0YXIgeGYgJXMlcyAtQyAlcycgJSAoc2VsZi50YXJnZXRkaXIsIHNlbGYuYXJjaGl2ZSwgc2VsZi50YXJnZXRkaXIpCisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChjbWQsIHNoZWxsPVRydWUpCisKKyAgICAgICAgI0NoYW5nZSB0YXJnZXRkaXIgdG8gcHJvamVjdCBmb2xkZXIKKyAgICAgICAgc2VsZi50YXJnZXRkaXIgPSBzZWxmLnRhcmdldGRpciArIHNlbGYuZm5hbWUKKworICAgIGRlZiBydW5fY29uZmlndXJlKHNlbGYsIGNvbmZpZ3VyZV9hcmdzPScnKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKFNES0J1aWxkUHJvamVjdCwgc2VsZikucnVuX2NvbmZpZ3VyZShjb25maWd1cmVfYXJncz0oY29uZmlndXJlX2FyZ3Mgb3IgJyRDT05GSUdVUkVfRkxBR1MnKSwgZXh0cmFfY21kcz0nIGdudS1jb25maWdpemU7ICcpCisKKyAgICBkZWYgcnVuX2luc3RhbGwoc2VsZiwgaW5zdGFsbF9hcmdzPScnKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKFNES0J1aWxkUHJvamVjdCwgc2VsZikucnVuX2luc3RhbGwoaW5zdGFsbF9hcmdzPShpbnN0YWxsX2FyZ3Mgb3IgIkRFU1RESVI9JXMvLi4vaW5zdGFsbCIgJSBzZWxmLnRhcmdldGRpcikpCisKKyAgICBkZWYgbG9nKHNlbGYsIG1zZyk6CisgICAgICAgIGlmIHNlbGYubG9nZmlsZToKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgICAgIGYud3JpdGUoIiVzXG4iICUgbXNnKQorCisgICAgZGVmIF9ydW4oc2VsZiwgY21kKToKKyAgICAgICAgc2VsZi5sb2coIlJ1bm5pbmcgLiAlczsgIiAlIHNlbGYuc2RrZW52ICsgY21kKQorICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5jYWxsKCIuICVzOyAiICUgc2VsZi5zZGtlbnYgKyBjbWQsIHNoZWxsPVRydWUpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWNwaWQvYWNwaWQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMTU2MTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWNwaWQvYWNwaWQuaW5jCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiQSBkYWVtb24gZm9yIGRlbGl2ZXJpbmcgQUNQSSBldmVudHMiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2FjcGlkLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0zMzE0MCZhdGlkPTQwNzM0MSIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9hY3BpZDIvYWNwaWQtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2luaXQgXAorICAgICAgICAgICBmaWxlOi8vYWNwaWQuc2VydmljZSBcCisgICAgICAgICAgIgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtcmMuZCBzeXN0ZW1kCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJhY3BpZCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiYWNwaWQuc2VydmljZSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJc2VkIC1lICdzLC91c3Ivc2Jpbiwke3NiaW5kaXJ9LGcnICR7V09SS0RJUn0vaW5pdCA+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9hY3BpZAorCWNobW9kIDc1NSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvYWNwaWQKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYWNwaQorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYWNwaS9ldmVudHMKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9hY3BpZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2FjcGlkLnNlcnZpY2UKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZC9hY3BpZC5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FjcGlkL2FjcGlkL2FjcGlkLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcwZTc0MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZC9hY3BpZC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTAgQEAKK1tVbml0XQorRGVzY3JpcHRpb249QUNQSSBFdmVudCBEYWVtb24KK0FmdGVyPXN5c2xvZy50YXJnZXQKKworW1NlcnZpY2VdCitUeXBlPWZvcmtpbmcKK0V4ZWNTdGFydD1AU0JJTkRJUkAvYWNwaWQKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FjcGlkL2FjcGlkL2luaXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWNwaWQvYWNwaWQvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MGZmMzg1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FjcGlkL2FjcGlkL2luaXQKQEAgLTAsMCArMSwzMSBAQAorIyEgL2Jpbi9zaCAtZQorCit0ZXN0IC14IC91c3Ivc2Jpbi9hY3BpZCB8fCBleGl0IDAKK3Rlc3QgLWQgL3Byb2MvYWNwaSB8fCBleGl0IDAKK21rZGlyIC1wIC9ldGMvYWNwaS9ldmVudHMKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgIGVjaG8gLW4gIlN0YXJ0aW5nIEFkdmFuY2VkIENvbmZpZ3VyYXRpb24gYW5kIFBvd2VyIEludGVyZmFjZSBkYWVtb246ICIKKyAgICBpZiBbICEgLWQgL2V0Yy9hY3BpL2V2ZW50cyBdOyB0aGVuCisgICAgICAgIGVjaG8gIlRoZXJlIGlzIG5vdCBhbnkgcnVsZSBjb25maWd1cmF0aW9uIGZpbGUuIgorICAgIGVsc2UKKyAgICAgICAgc3RhcnQtc3RvcC1kYWVtb24gLW8gLVMgLXggL3Vzci9zYmluL2FjcGlkIC0tIC1jIC9ldGMvYWNwaS9ldmVudHMKKyAgICAgICAgZWNobyAiYWNwaWQuIgorICAgIGZpCisgICAgOzsKKyAgc3RvcCkKKyAgICBlY2hvIC1uICJTdG9wcGluZyBBZHZhbmNlZCBDb25maWd1cmF0aW9uIGFuZCBQb3dlciBJbnRlcmZhY2UgZGFlbW9uOiAiCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLW8gLUsgLXggL3Vzci9zYmluL2FjcGlkCisgICAgZWNobyAiYWNwaWQuIgorICAgIDs7CisgIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKSAKKyAgICAkMCBzdG9wCisgICAgJDAgc3RhcnQKKyAgICA7OworICAqKQorICAgIGVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9hY3BpZCB7c3RhcnR8c3RvcHxyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iCisgICAgZXhpdCAxCitlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FjcGlkL2FjcGlkXzIuMC4yMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZF8yLjAuMjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUzMTdhNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZF8yLjAuMjMuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIGFjcGlkLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04Y2E0M2NiYzg0MmMyMzM2ZTgzNTkyNmMyMTY2YzI4YiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hY3BpZC5oO2VuZGxpbmU9MjQ7bWQ1PTMyNGE5Y2YyMjVhZTY5ZGRhYWQxYmY5ZDk0MjExNWI1IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDdiY2RjZGVmY2Q1M2IwMzczMGU1MGJhODQyNTU0ZWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDM5NmFhZWMxMzUxMGMzYTFmYWE5NDFhMTVhNGI1MzM1YjZhZTRmYmVjODQzOGI5MjQ5Yjg4YzNiNjYxODdlZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZjdiYjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlLmJiCkBAIC0wLDAgKzEsNjcgQEAKKyMgQ29weXJpZ2h0IE1hdHRoaWFzIEhlbnRnZXMgPGRldmVsQGhlbnRnZXMubmV0PiAoYykgMjAwNworIyBMaWNlbnNlOiBNSVQgKHNlZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocAorIyAgICAgICAgICAgICAgIGZvciBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UpCisjCisjIEZpbGVuYW1lOiBhbHNhLXN0YXRlLmJiCisKK1NVTU1BUlkgPSAiQWxzYSBzY2VuYXJpbyBmaWxlcyB0byBlbmFibGUgYWxzYSBzdGF0ZSByZXN0b3JhdGlvbiIKK0RFU0NSSVBUSU9OID0gIkFsc2EgU2NlbmFyaW8gRmlsZXMgLSBhbiBpbml0IHNjcmlwdCBhbmQgc3RhdGUgZmlsZXMgdG8gcmVzdG9yZSBcCitzb3VuZCBzdGF0ZSBhdCBzeXN0ZW0gYm9vdCBhbmQgc2F2ZSBpdCBhdCBzeXN0ZW0gc2h1dCBkb3duLiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitQViA9ICIwLjIuMCIKK1BSID0gInI1IgorCitTUkNfVVJJID0gIlwKKyAgZmlsZTovL2Fzb3VuZC5jb25mIFwKKyAgZmlsZTovL2Fzb3VuZC5zdGF0ZSBcCisgIGZpbGU6Ly9hbHNhLXN0YXRlLWluaXQgXAorIgorCitTID0gIiR7V09SS0RJUn0iCisKKyMgQXMgdGhlIHJlY2lwZSBkb2Vzbid0IGluaGVyaXQgc3lzdGVtZC5iYmNsYXNzLCB3ZSBuZWVkIHRvIHNldCB0aGlzIHZhcmlhYmxlCisjIG1hbnVhbGx5IHRvIGF2b2lkIHVubmVjZXNzYXJ5IHBvc3RpbnN0L3ByZWluc3QgZ2VuZXJhdGVkLgorcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBkLnNldFZhcigiSU5ISUJJVF9VUERBVEVSQ0RfQkJDTEFTUyIsICIxIikKK30KKworaW5oZXJpdCB1cGRhdGUtcmMuZAorCitJTklUU0NSSVBUX05BTUUgPSAiYWxzYS1zdGF0ZSIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDM5IFMgLiBzdG9wIDMxIDAgNiAuIgorCitkb19pbnN0YWxsKCkgeworICAgICMgT25seSBpbnN0YWxsIHRoZSBpbml0IHNjcmlwdCB3aGVuICdzeXN2aW5pdCcgaXMgaW4gRElTVFJPX0ZFQVRVUkVTLgorICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN2aW5pdCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJc2VkIC1pIC1lICJzOiNTVEFURURJUiM6JHtsb2NhbHN0YXRlZGlyfS9saWIvYWxzYTpnIiAke1dPUktESVJ9L2Fsc2Etc3RhdGUtaW5pdAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vYWxzYS1zdGF0ZS1pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9hbHNhLXN0YXRlCisgICAgZmkKKworICAgIGluc3RhbGwgLWQgJHtEfS8ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9hbHNhCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2Fzb3VuZC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vKi5zdGF0ZSAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvYWxzYQorfQorCitQQUNLQUdFUyArPSAiYWxzYS1zdGF0ZXMiCisKK1JSRUNPTU1FTkRTX2Fsc2Etc3RhdGUgPSAiYWxzYS1zdGF0ZXMiCisKK1JERVBFTkRTXyR7UE59ID0gImFsc2EtdXRpbHMtYWxzYWN0bCIKK0ZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kICR7c3lzY29uZmRpcn0vYXNvdW5kLmNvbmYiCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9hc291bmQuY29uZiIKKworRklMRVNfYWxzYS1zdGF0ZXMgPSAiJHtsb2NhbHN0YXRlZGlyfS9saWIvYWxzYS8qLnN0YXRlIgorCitwa2dfcG9zdGluc3RfJHtQTn0oKSB7CisJaWYgdGVzdCAteiAiJEQiCisJdGhlbgorCQlpZiB0ZXN0IC14ICR7c2JpbmRpcn0vYWxzYWN0bAorCQl0aGVuCisJCQkke3NiaW5kaXJ9L2Fsc2FjdGwgLWYgJHtsb2NhbHN0YXRlZGlyfS9saWIvYWxzYS9hc291bmQuc3RhdGUgcmVzdG9yZQorCQlmaQorCWZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUtaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS1pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVlZTU5Y2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUtaW5pdApAQCAtMCwwICsxLDM5IEBACisjISAvYmluL3NoCisjCisjIENvcHlyaWdodCBNYXR0aGlhcyBIZW50Z2VzIDxkZXZlbEBoZW50Z2VzLm5ldD4gKGMpIDIwMDcKKyMgTGljZW5zZTogR1BMIChzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC50eHQgZm9yIGEgY29weSBvZiB0aGUgbGljZW5zZSkKKyMKKyMgRmlsZW5hbWU6IGFsc2Etc3RhdGUKKyMgRGF0ZTogMjAwNzAzMDggKFlNRCkKKworIyBzb3VyY2UgZnVuY3Rpb24gbGlicmFyeQorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworYXNvdW5kX3Jlc3RvcmUoKXsKKwllY2hvICJBTFNBOiBSZXN0b3JpbmcgbWl4ZXIgc2V0dGluZ3MuLi4iCisJaWYgdGVzdCAteCAvdXNyL3NiaW4vYWxzYWN0bCAtYSAtZSAjU1RBVEVESVIjL2Fzb3VuZC5zdGF0ZQorCXRoZW4KKwkJL3Vzci9zYmluL2Fsc2FjdGwgLWYgI1NUQVRFRElSIy9hc291bmQuc3RhdGUgcmVzdG9yZSAmCisJZmkKK30KKworYXNvdW5kX3N0b3JlKCl7CisJZWNobyAiQUxTQTogU3RvcmluZyBtaXhlciBzZXR0aW5ncy4uLiIKKwlpZiB0ZXN0IC14IC91c3Ivc2Jpbi9hbHNhY3RsCisJdGhlbgorCQkvdXNyL3NiaW4vYWxzYWN0bCAtZiAjU1RBVEVESVIjL2Fzb3VuZC5zdGF0ZSBzdG9yZQorCWZpCit9CisKK2Nhc2UgIiQxIiBpbgorc3RhcnQpCQlhc291bmRfcmVzdG9yZSA7Oworc3RvcCkJCWFzb3VuZF9zdG9yZSA7OworICBzdGF0dXMpCisgICAgc3RhdHVzIC91c3Ivc2Jpbi9hbHNhY3RsOworICAgIGV4aXQgJD8KKyAgOzsKKyAgKikKKyAgICBlY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvYWxzYS1zdGF0ZSB7c3RhcnR8c3RvcHxzdGF0dXN9IgorICAgIGV4aXQgMQorICA7OworZXNhYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS9hc291bmQuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUvYXNvdW5kLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM2NTNjZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUvYXNvdW5kLmNvbmYKQEAgLTAsMCArMSBAQAorIyBHbG9iYWwgYWxzYS1saWIgY29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS9hc291bmQuc3RhdGUgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlL2Fzb3VuZC5zdGF0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGQxY2NlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS9hc291bmQuc3RhdGUKQEAgLTAsMCArMSBAQAorIyBEdW1teSBmaWxlLCBkbyBub3QgZGVsZXRlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2FwbWQuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvYXBtZC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYWI4MjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2FwbWQuc2VydmljZQpAQCAtMCwwICsxLDcgQEAKK1tVbml0XQorRGVzY3JpcHRpb249QWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCBkYWVtb24KK0FmdGVyPXJlbW90ZS1mcy50YXJnZXQKKworW1NlcnZpY2VdCitFbnZpcm9ubWVudEZpbGU9LUBTWVNDT05GRElSQC9kZWZhdWx0L2FwbWQKK0V4ZWNTdGFydD1AU0JJTkRJUkAvYXBtZCAtUCBAU1lTQ09ORkRJUkAvYXBtL2FwbWRfcHJveHkgJEFQTUQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvYXBtZF9wcm94eSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvYXBtZF9wcm94eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDhlZTRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9hcG1kX3Byb3h5CkBAIC0wLDAgKzEsOTEgQEAKKyMhL2Jpbi9zaAorIyAKKyMgYXBtZF9wcm94eSAtIHByb2dyYW0gZGlzcGF0Y2hlciBmb3IgQVBNIGRhZW1vbgorIworIyBXcml0dGVuIGJ5IENyYWlnIE1hcmt3YXJkdCAoY3JhaWdtQGxoZWFtYWlsLmdzZmMubmFzYS5nb3YpIDIxIE1heSAxOTk5CisjIE1vZGlmaWVkIGZvciBEZWJpYW4gYnkgQXZlcnkgUGVubmFydW4KKyMKKyMgVGhpcyBzaGVsbCBzY3JpcHQgaXMgY2FsbGVkIGJ5IHRoZSBBUE0gZGFlbW9uIChhcG1kKSB3aGVuIGEgcG93ZXIKKyMgbWFuYWdlbWVudCBldmVudCBvY2N1cnMuICBJdHMgZmlyc3QgYW5kIHNlY29uZCBhcmd1bWVudHMgZGVzY3JpYmUgdGhlCisjIGV2ZW50LiAgRm9yIGV4YW1wbGUsIGFwbWQgd2lsbCBjYWxsICJhcG1kX3Byb3h5IHN1c3BlbmQgc3lzdGVtIiBqdXN0CisjIGJlZm9yZSB0aGUgc3lzdGVtIGlzIHN1c3BlbmRlZC4KKyMKKyMgSGVyZSBhcmUgdGhlIHBvc3NpYmxlIGFyZ3VtZW50czoKKyMKKyMgc3RhcnQgICAgICAgICAgICAgIC0gQVBNIGRhZW1vbiBoYXMgc3RhcnRlZAorIyBzdG9wICAgICAgICAgICAgICAgLSBBUE0gZGFlbW9uIGlzIHNodXR0aW5nIGRvd24KKyMgc3VzcGVuZCBjcml0aWNhbCAgIC0gQVBNIHN5c3RlbSBpbmRpY2F0ZXMgY3JpdGljYWwgc3VzcGVuZCAoKyspCisjIHN1c3BlbmQgc3lzdGVtICAgICAtIEFQTSBzeXN0ZW0gaGFzIHJlcXVlc3RlZCBzdXNwZW5kIG1vZGUKKyMgc3VzcGVuZCB1c2VyICAgICAgIC0gVXNlciBoYXMgcmVxdWVzdGVkIHN1c3BlbmQgbW9kZQorIyBzdGFuZGJ5IHN5c3RlbSAgICAgLSBBUE0gc3lzdGVtIGhhcyByZXF1ZXN0ZWQgc3RhbmRieSBtb2RlIAorIyBzdGFuZGJ5IHVzZXIgICAgICAgLSBVc2VyIGhhcyByZXF1ZXN0ZWQgc3RhbmRieSBtb2RlCisjIHJlc3VtZSBzdXNwZW5kICAgICAtIFN5c3RlbSBoYXMgcmVzdW1lZCBmcm9tIHN1c3BlbmQgbW9kZQorIyByZXN1bWUgc3RhbmRieSAgICAgLSBTeXN0ZW0gaGFzIHJlc3VtZWQgZnJvbSBzdGFuZGJ5IG1vZGUKKyMgcmVzdW1lIGNyaXRpY2FsICAgIC0gU3lzdGVtIGhhcyByZXN1bWVkIGZyb20gY3JpdGljYWwgc3VzcGVuZAorIyBjaGFuZ2UgYmF0dGVyeSAgICAgLSBBUE0gc3lzdGVtIHJlcG9ydGVkIGxvdyBiYXR0ZXJ5CisjIGNoYW5nZSBwb3dlciAgICAgICAtIEFQTSBzeXN0ZW0gcmVwb3J0ZWQgQUMvYmF0dGVyeSBjaGFuZ2UKKyMgY2hhbmdlIHRpbWUgICAgICAgIC0gQVBNIHN5c3RlbSByZXBvcnRlZCB0aW1lIGNoYW5nZSAoKikKKyMgY2hhbmdlIGNhcGFiaWxpdHkgIC0gQVBNIHN5c3RlbSByZXBvcnRlZCBjb25maWcuIGNoYW5nZSAoKykKKyMKKyMgKCopIC0gQVBNIGRhZW1vbiBtYXkgYmUgY29uZmlndXJlZCB0byBub3QgY2FsbCB0aGVzZSBzZXF1ZW5jZXMKKyMgKCspIC0gQXZhaWxhYmxlIGlmIEFQTSBrZXJuZWwgc3VwcG9ydHMgaXQuCisjICgrKykgLSAic3VzcGVuZCBjcml0aWNhbCIgaXMgbmV2ZXIgcGFzc2VkIHRvIGFwbWQgZnJvbSB0aGUga2VybmVsLAorIyAgIHNvIHdlIHdpbGwgbmV2ZXIgc2VlIGl0IGhlcmUuICBTY3JpcHRzIHRoYXQgcHJvY2VzcyAicmVzdW1lCisjICAgY3JpdGljYWwiIGV2ZW50cyBuZWVkIHRvIHRha2UgdGhpcyBpbnRvIGFjY291bnQuCisjCisjIEl0IGlzIHRoZSBwcm94eSBzY3JpcHQncyByZXNwb25zaWJpbGl0eSB0byBleGFtaW5lIHRoZSBBUE0gc3RhdHVzCisjICh2aWEgL3Byb2MvYXBtKSBvciBvdGhlciBzdGF0dXMgYW5kIHRvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9ucy4KKyMgRm9yIGV4YW1wbGUsIHRoZSBzY3JpcHQgbWlnaHQgdW5tb3VudCBuZXR3b3JrIGRyaXZlcyBiZWZvcmUgdGhlCisjIG1hY2hpbmUgaXMgc3VzcGVuZGVkLgorIworIyBJbiBEZWJpYW4sIHRoZSB1c3VhbCB3YXkgb2YgYWRkaW5nIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIHByb3h5IGlzIHRvCisjIGFkZCBhIHNjcmlwdCB0byAvZXRjL2FwbS9ldmVudC5kLiAgVGhpcyBzY3JpcHQgd2lsbCBiZSBjYWxsZWQgYnkKKyMgYXBtZF9wcm94eSAodmlhIHJ1bi1wYXJ0cykgd2l0aCB0aGUgc2FtZSBhcmd1bWVudHMuCisjCisjIElmIGl0IGlzIGltcG9ydGFudCB0aGF0IGEgY2VydGFpbiBzZXQgb2Ygc2NyaXB0IGJlIHJ1biBpbiBhIGNlcnRhaW4KKyMgb3JkZXIgb24gc3VzcGVuZCBhbmQgaW4gYSBkaWZmZXJlbnQgb3JkZXIgb24gcmVzdW1lLCB0aGVuIHB1dCBhbGwKKyMgdGhlIHNjcmlwdHMgaW4gL2V0Yy9hcG0vc2NyaXB0cy5kIGluc3RlYWQgb2YgL2V0Yy9hcG0vZXZlbnQuZCBhbmQKKyMgc3ltbGluayB0byB0aGVzZSBmcm9tIC9ldGMvYXBtL3N1c3BlbmQuZCwgL2V0Yy9hcG0vcmVzdW1lLmQgYW5kCisjIC9ldGMvYXBtL290aGVyLmQgdXNpbmcgbmFtZXMgd2hvc2UgbGV4aWNvZ3JhcGhpY2FsIG9yZGVyIGlzIHRoZSBzYW1lCisjIGFzIHRoZSBkZXNpcmVkIG9yZGVyIG9mIGV4ZWN1dGlvbi4KKyMKKyMgSWYgdGhlIGtlcm5lbCdzIEFQTSBkcml2ZXIgc3VwcG9ydHMgaXQsIGFwbWRfcHJveHkgY2FuIHJldHVybiBhIG5vbi16ZXJvCisjIGV4aXQgc3RhdHVzIG9uIHN1c3BlbmQgYW5kIHN0YW5kYnkgZXZlbnRzLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHN1c3BlbmQKKyMgb3Igc3RhbmRieSBldmVudCBzaG91bGQgYmUgcmVqZWN0ZWQuCisjCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworc2V0IC1lCisKKyMgVGhlIGZvbGxvd2luZyBkb2Vzbid0IHlldCB3b3JrLCBiZWNhdXNlIGN1cnJlbnQga2VybmVscyAodXAgdG8gYXQgbGVhc3QKKyMgMi40LjIwKSBkbyBub3Qgc3VwcG9ydCByZWplY3Rpb24gb2YgQVBNIGV2ZW50cy4gIFN1cHBvcnRpbmcgdGhpcyB3b3VsZAorIyByZXF1aXJlIHN1YnN0YW50aWFsIG1vZGlmaWNhdGlvbnMgdG8gdGhlIEFQTSBkcml2ZXIuICBXZSB3aWxsIHJlLWVuYWJsZQorIyB0aGlzIGZlYXR1cmUgaWYgdGhlIGRyaXZlciBpcyBldmVyIG1vZGlmaWVkLiAgICAgICAtLSBjcGhAZGViaWFuLm9yZworIworI1NVU1BFTkRfT05fQUM9ZmFsc2UKKyNbIC1yIC9ldGMvYXBtL2FwbWRfcHJveHkuY29uZiBdICYmIC4gL2V0Yy9hcG0vYXBtZF9wcm94eS5jb25mCisjCisjaWYgWyAiJHtTVVNQRU5EX09OX0FDfSIgPSAiZmFsc2UiIC1hICIkezJ9IiA9ICJzeXN0ZW0iIF0gXAorIwkmJiBvbl9hY19wb3dlciA+L2Rldi9udWxsOyB0aGVuCisjICAgICMgUmVqZWN0IHN5c3RlbSBzdXNwZW5kcyBhbmQgc3RhbmRieXMgaWYgd2UgYXJlIG9uIEFDIHBvd2VyCisjICAgIGV4aXQgMSAgIyBSZWplY3QgKE5PVEUga2VybmVsIHN1cHBvcnQgbXVzdCBiZSBlbmFibGVkKQorI2ZpCisKK2lmIFsgIiR7MX0iID0gInN1c3BlbmQiIC1vICIkezF9IiA9ICJzdGFuZGJ5IiBdOyB0aGVuCisgICAgcnVuLXBhcnRzIC1hICIkezF9IiAtYSAiJHsyfSIgL2V0Yy9hcG0vZXZlbnQuZAorICAgIGlmIFsgLWQgL2V0Yy9hcG0vc3VzcGVuZC5kIF07IHRoZW4KKyAgICAgICAgcnVuLXBhcnRzIC1hICIkezF9IiAtYSAiJHsyfSIgL2V0Yy9hcG0vc3VzcGVuZC5kCisgICAgZmkKK2VsaWYgWyAiJHsxfSIgPSAicmVzdW1lIiBdOyB0aGVuCisgICAgaWYgWyAtZCAvZXRjL2FwbS9yZXN1bWUuZCBdOyB0aGVuCisgICAgICAgIHJ1bi1wYXJ0cyAtYSAiJHsxfSIgLWEgIiR7Mn0iIC9ldGMvYXBtL3Jlc3VtZS5kCisgICAgZmkKKyAgICBydW4tcGFydHMgLWEgIiR7MX0iIC1hICIkezJ9IiAvZXRjL2FwbS9ldmVudC5kCitlbHNlCisgICAgcnVuLXBhcnRzIC1hICIkezF9IiAtYSAiJHsyfSIgL2V0Yy9hcG0vZXZlbnQuZAorICAgIGlmIFsgLWQgL2V0Yy9hcG0vb3RoZXIuZCBdOyB0aGVuCisgICAgICAgIHJ1bi1wYXJ0cyAtYSAiJHsxfSIgLWEgIiR7Mn0iIC9ldGMvYXBtL290aGVyLmQKKyAgICBmaQorZmkKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2FwbWRfcHJveHkuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvYXBtZF9wcm94eS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MTE0NWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2FwbWRfcHJveHkuY29uZgpAQCAtMCwwICsxLDE2IEBACisjIC9ldGMvYXBtL2FwbWRfcHJveHkuY29uZjogY29uZmlndXJhdGlvbiBmaWxlIGZvciBhcG1kLgorIworIyBUaGlzIGZpbGUgaXMgbWFuYWdlZCBieSBkZWJjb25mIHdoZW4gaW5zdGFsbGluZyBvciByZWNvbmZpZ3VyaW5nIHRoZQorIyBwYWNrYWdlLiAgSXQgaXMgZ2VuZXJhdGVkIGJ5IG1lcmdpbmcgdGhlIGFuc3dlcnMgZ2F0aGVyZWQgYnkgZGViY29uZgorIyBpbnRvIHRoZSB0ZW1wbGF0ZSBmaWxlICIvdXNyL3NoYXJlL2FwbWQvYXBtZF9wcm94eS5jb25mIi4KKworIyBUaGUgZm9sbG93aW5nIGRvZXNuJ3QgeWV0IHdvcmssIGJlY2F1c2UgY3VycmVudCBrZXJuZWxzICh1cCB0byBhdCBsZWFzdAorIyAyLjQuMjApIGRvIG5vdCBzdXBwb3J0IHJlamVjdGlvbiBvZiBBUE0gZXZlbnRzLiAgU3VwcG9ydGluZyB0aGlzIHdvdWxkCisjIHJlcXVpcmUgc3Vic3RhbnRpYWwgbW9kaWZpY2F0aW9ucyB0byB0aGUgQVBNIGRyaXZlci4gIFdlIHdpbGwgcmUtZW5hYmxlCisjIHRoaXMgZmVhdHVyZSBpZiB0aGUgZHJpdmVyIGlzIGV2ZXIgbW9kaWZpZWQuICAgICAgIC0tIGNwaEBkZWJpYW4ub3JnCisjCisjIFNldCB0aGUgZm9sbG93aW5nIHRvICJmYWxzZSIgaWYgeW91IHdhbnQgdG8gcmVqZWN0IHN5c3RlbSBzdXNwZW5kIG9yCisjIHN5c3RlbSBzdGFuZGJ5IHJlcXVlc3RzIHdoZW4gdGhlIGNvbXB1dGVyIGlzIHJ1bm5pbmcgb24gQUMgcG93ZXIuCisjIE90aGVyd2lzZSBzZXQgdGhpcyB0byAidHJ1ZSIuICBTdWNoIHJlcXVlc3RzIGFyZSBuZXZlciByZWplY3RlZCB3aGVuCisjIHRoZSBjb21wdXRlciBpcyBydW5uaW5nIG9uIGJhdHRlcnkgcG93ZXIuCisjU1VTUEVORF9PTl9BQz10cnVlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2RlZmF1bHQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2RlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI3OTY1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvZGVmYXVsdApAQCAtMCwwICsxLDggQEAKKyMKKyMgRGVmYXVsdCBmb3IgL2V0Yy9pbml0LmQvYXBtZAorIworCisjIEFzIGFwbWQgY2FuIGJlIGNhbGxlZCB3aXRoIGFyZ3VtZW50cywgd2UgdXNlIHRoZSBmb2xsb3dpbmcgdmFyaWFibGUKKyMgdG8gc3RvcmUgdGhlbSwgZS5nLiwgQVBNRD0iLXcgNSAtcCAyIi4KKyMgU2VlIHRoZSBtYW51YWwgcGFnZSBhcG1kKDgpIGZvciBkZXRhaWxzLgorQVBNRD0iLS1wcm94eS10aW1lb3V0IDMwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9pbml0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMwYjQxYWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2luaXQKQEAgLTAsMCArMSw1MSBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBhcG1kCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkcmVtb3RlX2ZzCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkcmVtb3RlX2ZzCisjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAwIDEgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCBkYWVtb24KKyMjIyBFTkQgSU5JVCBJTkZPCisKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCitQQVRIPS9iaW46L3Vzci9iaW46L3NiaW46L3Vzci9zYmluCisKK1sgLWYgL2V0Yy9kZWZhdWx0L3JjUyBdICYmIC4gL2V0Yy9kZWZhdWx0L3JjUworWyAtZiAvZXRjL2RlZmF1bHQvYXBtZCBdICYmIC4gL2V0Yy9kZWZhdWx0L2FwbWQKKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisJZWNobyAtbiAiU3RhcnRpbmcgYWR2YW5jZWQgcG93ZXIgbWFuYWdlbWVudCBkYWVtb246ICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAteCAvdXNyL3NiaW4vYXBtZCAtLSBcCisJCS1QIC9ldGMvYXBtL2FwbWRfcHJveHkgJEFQTUQKKwlpZiBbICQ/ID0gMCBdOyB0aGVuCisJICAgIGVjaG8gImFwbWQuIgorCWVsc2UKKwkgICAgZWNobyAiKGZhaWxlZC4pIgorCWZpCisJOzsKKyAgICBzdG9wKQorCWVjaG8gLW4gIlN0b3BwaW5nIGFkdmFuY2VkIHBvd2VyIG1hbmFnZW1lbnQgZGFlbW9uOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLUsgXAorCQkteCAvdXNyL3NiaW4vYXBtZAorCWVjaG8gImFwbWQuIgorCTs7CisgICAgc3RhdHVzKQorCXN0YXR1cyAvdXNyL3NiaW4vYXBtZDsKKwlleGl0ICQ/CisJOzsKKyAgICByZXN0YXJ0fGZvcmNlLXJlbG9hZCkgCisJJDAgc3RvcAorCSQwIHN0YXJ0CisJZXhpdAorCTs7CisgICAgKikKKwllY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvYXBtZCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydHxmb3JjZS1yZWxvYWR9IgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9sZWdhY3kucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2xlZ2FjeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGI4OTVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9sZWdhY3kucGF0Y2gKQEAgLTAsMCArMSwxMzMgQEAKK0Zyb20gMzU5NTkzM2QyMjFmMGJhODM2OTE3ZGViYzA3NzZiODcyMzk3MmVjOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogVHVlLCAxMSBBdWcgMjAxNSAxNzo0MDo1MCArMDMwMAorU3ViamVjdDogW1BBVENIIDEvM10gUGF0Y2ggd2l0aCBmaXhlcyBwcm92aWRlZCBieSBEZWJpYW4uCisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9hL2FwbWQvYXBtZF8zLjIuMi0xNS5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBsaW51eC5pbnRlbC5jb20+CisKKy0tLQorIE1ha2VmaWxlIHwgIDIgKy0KKyBhcG0uYyAgICB8ICAzICsrLQorIGFwbS5oICAgIHwgIDkgKysrKysrKysrCisgYXBtZC5jICAgfCAxNSArKysrKysrKy0tLS0tLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCBiZjM0NmQ5Li45MmZjMGZkIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtNDMsNyArNDMsNyBAQCBERVNURElSPQorIAorIENDPWdjYworIENGTEFHUz0tTyAtZworLVhUUkFDRkxBR1M9LVdhbGwgLXBpcGUgLUkuIC1JL3Vzci9zcmMvbGludXgvaW5jbHVkZSBcCisrWFRSQUNGTEFHUz0tV2FsbCAtcGlwZSAtSS4gLUkvdXNyL3NyYy9saW51eC9pbmNsdWRlIC1JL3Vzci9YMTFSNi9pbmNsdWRlIFwKKyAJCS1JL3Vzci9zcmMvbGludXgtMi4yL2luY2x1ZGUgLUkgL3Vzci9zcmMvbGludXgtMi4wL2luY2x1ZGUgXAorIAkJLURWRVJTSU9OPVwiJChWRVJTSU9OKVwiIFwKKyAJCS1EREVGQVVMVF9QUk9YWV9OQU1FPVwiJChQUk9YWV9ESVIpL2FwbWRfcHJveHlcIgorZGlmZiAtLWdpdCBhL2FwbS5jIGIvYXBtLmMKK2luZGV4IGIyMWMwNTcuLjAzNTliMWMgMTAwNjQ0CistLS0gYS9hcG0uYworKysrIGIvYXBtLmMKK0BAIC0yMTksMTIgKzIxOSwxMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQl9CisgCX0KKyAJCQkJCQkJCQkJCQkJICAgIAorLQorKyNpZiAwCisgICAgIGlmICghKGkuYXBtX2ZsYWdzICYgQVBNXzMyX0JJVF9TVVBQT1JUKSkKKyAgICAgeworIAlmcHJpbnRmKHN0ZGVyciwgIjMyLWJpdCBBUE0gaW50ZXJmYWNlIG5vdCBzdXBwb3J0ZWRcbiIpOworIAlleGl0KDEpOworICAgICB9CisrI2VuZGlmCisgCisgICAgIGlmICh2ZXJib3NlICYmIChpLmFwbV9mbGFncyAmIDB4MTApKQorIAlwcmludGYoIkFQTSBCSU9TIFBvd2VyIE1hbmFnZW1lbnQgaXMgY3VycmVudGx5IGRpc2FibGVkXG4iKTsKK2RpZmYgLS1naXQgYS9hcG0uaCBiL2FwbS5oCitpbmRleCBmYjI0ZGZkLi44MjRjYzA2IDEwMDY0NAorLS0tIGEvYXBtLmgKKysrKyBiL2FwbS5oCitAQCAtMjAsNiArMjAsMTMgQEAKKyAgKiAkSWQ6IGFwbS5oLHYgMS43IDE5OTkvMDcvMDUgMjI6MzE6MTEgYXBlbndhcnIgRXhwICQKKyAgKiAKKyAgKi8KKysjaWZuZGVmIF9BUE1fSAorKyNkZWZpbmUgX0FQTV9IIDEKKysKKysjaWZuZGVmIF9fS0VSTkVMX1NUUklDVF9OQU1FUworKyNkZWZpbmUgX19LRVJORUxfU1RSSUNUX05BTUVTCisrI2VuZGlmCisrCisgI2luY2x1ZGUgPGxpbnV4L2FwbV9iaW9zLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIAorQEAgLTkzLDMgKzEwMCw1IEBAIGV4dGVybiBpbnQgYXBtX3JlamVjdChpbnQgZmQpOworICNlbHNlCisgI2RlZmluZSBhcG1fcmVqZWN0KGZkKSAgICgtRUlOVkFMKQorICNlbmRpZgorKworKyNlbmRpZgorZGlmZiAtLWdpdCBhL2FwbWQuYyBiL2FwbWQuYworaW5kZXggNDllZDNhMS4uNTYwZjUzNiAxMDA2NDQKKy0tLSBhL2FwbWQuYworKysrIGIvYXBtZC5jCitAQCAtMzQzLDcgKzM0Myw3IEBAIHN0YXRpYyBpbnQgY2FsbF9wcm94eShhcG1fZXZlbnRfdCBldmVudCkKKyAJCS8qIHBhcmVudCAqLworIAkJaW50IHN0YXR1cywgcmV0dmFsOworIAkJc3NpemVfdCBsZW47CistCQl0aW1lX3QgdGltZV9saW1pdDsKKysJCXRpbWVfdCBjb3VudGRvd247CisgCisgCQlpZiAocGlkIDwgMCkgeworIAkJCS8qIENvdWxkbid0IGZvcmsgKi8KK0BAIC0zNTYsOCArMzU2LDkgQEAgc3RhdGljIGludCBjYWxsX3Byb3h5KGFwbV9ldmVudF90IGV2ZW50KQorIAkJLyogQ2FwdHVyZSB0aGUgY2hpbGQncyBvdXRwdXQsIGlmIGFueSwgYnV0IG9ubHkgdW50aWwgaXQgdGVybWluYXRlcyAqLworIAkJY2xvc2UoZmRzWzFdKTsKKyAJCWZjbnRsKGZkc1swXSwgRl9TRVRGTCwgT19SRE9OTFl8T19OT05CTE9DSyk7CistCQl0aW1lX2xpbWl0ID0gdGltZSgwKSArIHByb3h5X3RpbWVvdXQ7CisrCQljb3VudGRvd24gPSBwcm94eV90aW1lb3V0OworIAkJZG8geworKwkJCWNvdW50ZG93biAtPSAxOworIAkJCXdoaWxlICgobGVuID0gcmVhZChmZHNbMF0sIGxpbmUsIHNpemVvZihsaW5lKS0xKSkgPiAwKSB7CisgCQkJCWxpbmVbbGVuXSA9IDA7CisgCQkJCUFQTURfU1lTTE9HKExPR19JTkZPLCAiKyAlcyIsIGxpbmUpOworQEAgLTM3MiwxNiArMzczLDE2IEBAIHN0YXRpYyBpbnQgY2FsbF9wcm94eShhcG1fZXZlbnRfdCBldmVudCkKKyAJCQkJZ290byBwcm94eV9kb25lOworIAkJCX0KKyAJCQkJCistCQkJc2xlZXAoMSk7CisrCQkJd2hpbGUgKHNsZWVwKDEpID4gMCkgOworIAkJfSB3aGlsZSAoCistCQkJKHRpbWUoMCkgPCB0aW1lX2xpbWl0KQorKwkJCShjb3VudGRvd24gPj0gMCkKKyAJCQl8fCAocHJveHlfdGltZW91dCA8IDApCisgCQkpOworIAorIAkJQVBNRF9TWVNMT0coTE9HX05PVElDRSwgIlByb3h5IGhhcyBiZWVuIHJ1bm5pbmcgbW9yZSB0aGFuICVkIHNlY29uZHM7IGtpbGxpbmcgaXQiLCBwcm94eV90aW1lb3V0KTsKKyAKKyAJCWtpbGwocGlkLCBTSUdURVJNKTsKKy0JCXRpbWVfbGltaXQgPSB0aW1lKDApICsgNTsKKysJCWNvdW50ZG93biA9IDU7CisgCQlkbyB7CisgCQkJcmV0dmFsID0gd2FpdHBpZChwaWQsICZzdGF0dXMsIFdOT0hBTkcpOworIAkJCWlmIChyZXR2YWwgPT0gcGlkKQorQEAgLTM5Miw5ICszOTMsOSBAQCBzdGF0aWMgaW50IGNhbGxfcHJveHkoYXBtX2V2ZW50X3QgZXZlbnQpCisgCQkJCWdvdG8gcHJveHlfZG9uZTsKKyAJCQl9CisgCistCQkJc2xlZXAoMSk7CisrCQkJd2hpbGUgKHNsZWVwKDEpID4gMCkgOworIAorLQkJfSB3aGlsZSAodGltZSgwKSA8IHRpbWVfbGltaXQpOworKwkJfSB3aGlsZSAoY291bnRkb3duID49IDApOworIAorIAkJa2lsbChwaWQsIFNJR0tJTEwpOworIAkJc3RhdHVzID0gX19XX0VYSVRDT0RFKDAsIFNJR0tJTEwpOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2xpYnRvb2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2xpYnRvb2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM0ZWUwOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvbGlidG9vbC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitBZGQgYnkgUlAgdG8gYWRkcmVzcyAidW5hYmxlIHRvIGluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIiBlcnJvcjoKKyAgIGNvbW1pdCAzNWRlMDVlNjFiODhjMDgwOGE1ZTg4NWJiMGVmZGY0MjA1NTVkNWFkCisgICBBdXRob3I6IFJpY2hhcmQgUHVyZGllIDxycHVyZGllQHJwc3lzLm5ldD4KKyAgIERhdGU6ICAgU3VuIEp1biAxIDE2OjEzOjM4IDIwMDggKzAwMDAKKworICAgYXBtZDogVXNlIGxpYnRvb2wgLS10YWcgb3B0aW9ucyB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIGxpYnRvb2wgMi4yLjQgKGZyb20gcG9reSkKKworSG93ZXZlciBJIGRpZG4ndCBzZWUgc2FtZSBpc3N1ZSB3aXRoIGN1cnJlbnQgbGlidG9vbC0yLjIuMTAuIEFsc28gcGVyIG15IHVuZGVyc3RhbmRpbmcsCit0aGUgZGVmYXVsdCB0YWcsIGlmIG5vdCBzcGVjaWZpZWQsIGZhbGxzIGJhY2sgdG8gQ0MuIFNvIGRpc2FibGUgaXQgZnJvbSBwYXRjaGluZywgYnV0CitrZWVwIGl0IGhlcmUuIElmIHdlIGVuY291bnRlciBzaW1pbGFyIGlzc3VlIGluIHRoZSBmdXR1cmUsIHdlIGNvdWxkIHRoZW4gcHVzaCB1cHN0cmVhbQorCitDb21tZW50IGFkZGVkIGJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMjAxMC0wNy0xNgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK0luZGV4OiBhcG1kLTMuMi4yLm9yaWcvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcG1kLTMuMi4yLm9yaWcub3JpZy9NYWtlZmlsZQkyMDA0LTAxLTA0IDA4OjEzOjE4LjAwMDAwMDAwMCArMDAwMAorKysrIGFwbWQtMy4yLjIub3JpZy9NYWtlZmlsZQkyMDA4LTA0LTIxIDE3OjEwOjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTU4LDkgKzU3LDggQEAKKyAjQ0ZMQUdTPS1PMyAtbTQ4NiAtZm9taXQtZnJhbWUtcG9pbnRlcgorICNMREZMQUdTPS1zCisgCistTElCVE9PTD1saWJ0b29sIC0tcXVpZXQKKy1MVF9DT01QSUxFID0gJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENDKQorLUxUX0xJTksgPSAkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpCisrTFRfQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykKKytMVF9MSU5LID0gJChMSUJUT09MKSAgLS10YWc9Q0MgLS1tb2RlPWxpbmsgJChDQykKKyBMVF9JTlNUQUxMID0gJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCBpbnN0YWxsCisgTFRfQ0xFQU4gPSAkKExJQlRPT0wpIC0tbW9kZT1jbGVhbiBybQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC91bmxpbnV4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC91bmxpbnV4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjODIwNmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL3VubGludXgucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorY29weSBPRSBjb21taXQgbWVzc2FnZSBoZXJlOgorICAgY29tbWl0IDk0NTZjZGMxY2Y0M2UzYmE5ZTZkODhjNjM1NjBjMWI2ZmRlZTQzNTkKKyAgIEF1dGhvcjogTWljaGFlbCBLcmVsaW4gPGhhY2tlckBrbGV2ZXIubmV0PgorICAgRGF0ZTogICBUdWUgTWF5IDI5IDEyOjI3OjQ1IDIwMDcgKzAwMDAKKworICAgYXBtZDogcHJldmVudCBidWlsZCBmcm9tIGludGVyZmVycmluZyB3aXRoIGhvc3Qga2VybmVsIGhlYWRlcnMuIENsb3NlcyAjMTI1NworCitjb21tZW50IGFkZGVkIGJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMjAxMC0wNy0xMworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBhcG1kLTMuMi4yLm9yaWcvTWFrZWZpbGUKKysrKyBhcG1kLTMuMi4yL01ha2VmaWxlCitAQCAtNDMsOCArNDMsNyBAQAorIAorIENDPWdjYworIENGTEFHUz0tTyAtZworLVhUUkFDRkxBR1M9LVdhbGwgLXBpcGUgLUkuIC1JL3Vzci9zcmMvbGludXgvaW5jbHVkZSAtSS91c3IvWDExUjYvaW5jbHVkZSBcCistCQktSS91c3Ivc3JjL2xpbnV4LTIuMi9pbmNsdWRlIC1JIC91c3Ivc3JjL2xpbnV4LTIuMC9pbmNsdWRlIFwKKytYVFJBQ0ZMQUdTPS1XYWxsIC1waXBlIC1JLiBcCisgCQktRFZFUlNJT049XCIkKFZFUlNJT04pXCIgXAorIAkJLURERUZBVUxUX1BST1hZX05BTUU9XCIkKFBST1hZX0RJUikvYXBtZF9wcm94eVwiCisgTERGTEFHUz0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWRfMy4yLjItMTUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kXzMuMi4yLTE1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMTA1MjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kXzMuMi4yLTE1LmJiCkBAIC0wLDAgKzEsNzYgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGZvciBBZHZhbmNlZCBQb3dlciBNYW5hZ2VtZW50IgorREVTQ1JJUFRJT04gPSAiVGhlIEFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQgKEFQTSkgc3VwcG9ydCBwcm92aWRlcyBcCithY2Nlc3MgdG8gYmF0dGVyeSBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIGEgc2V0IG9mIHRvb2xzIGZvciBtYW5hZ2luZyBcCitub3RlYm9vayBwb3dlciBjb25zdW1wdGlvbi4iCitIT01FUEFHRSA9ICJodHRwOi8vYXBlbndhcnIuY2EvYXBtZC8iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2FwbS5oO2JlZ2lubGluZT02O2VuZGxpbmU9MTg7bWQ1PTdkNGFjYzEyNTA5MTBhODlmODRjZTNjYzY1NTdjNGMyIgorREVQRU5EUyA9ICJsaWJ0b29sLWNyb3NzIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9hL2FwbWQvYXBtZF8zLjIuMi5vcmlnLnRhci5nejtuYW1lPXRhcmJhbGwgXAorICAgICAgICAgICBmaWxlOi8vbGVnYWN5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnRvb2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdW5saW51eC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IFwKKyAgICAgICAgICAgZmlsZTovL2RlZmF1bHQgXAorICAgICAgICAgICBmaWxlOi8vYXBtZF9wcm94eSBcCisgICAgICAgICAgIGZpbGU6Ly9hcG1kX3Byb3h5LmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vYXBtZC5zZXJ2aWNlIgorCitTUkNfVVJJW3RhcmJhbGwubWQ1c3VtXSA9ICJiMWU2MzA5ZTgzMzFlMGY0ZTZlZmQzMTFjMmQ5N2ZhOCIKK1NSQ19VUklbdGFyYmFsbC5zaGEyNTZzdW1dID0gIjdmN2Q5ZjYwYjc3NjZiODUyODgxZDQwYjhmZjkxZDhlMzlmY2NiMGQxZDkxMzEwMmE1Yzc1YTJkYmI1MjMzMmQiCisKK1MgPSAiJHtXT1JLRElSfS9hcG1kLTMuMi4yLm9yaWciCisKK2luaGVyaXQgdXBkYXRlLXJjLmQgc3lzdGVtZAorCitJTklUU0NSSVBUX05BTUUgPSAiYXBtZCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiYXBtZC5zZXJ2aWNlIgorU1lTVEVNRF9BVVRPX0VOQUJMRSA9ICJkaXNhYmxlIgorCitkb19jb21waWxlKCkgeworCSMgYXBtZCBkb2Vzbid0IHVzZSB3aG9sZSBhdXRvdG9vbHMuIEp1c3QgbGlidG9vbCBmb3IgaW5zdGFsbGF0aW9uCisJb2VfcnVubWFrZSAiTElCVE9PTD0ke1NUQUdJTkdfQklORElSX0NST1NTfS8ke0hPU1RfU1lTfS1saWJ0b29sIiBhcG0gYXBtZAorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwbQorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYXBtL2V2ZW50LmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwbS9vdGhlci5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcG0vc3VzcGVuZC5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcG0vcmVzdW1lLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwbS9zY3JpcHRzLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2FwbWQKKwlpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9CisKKwlpbnN0YWxsIC1tIDQ3NTUgJHtTfS8ubGlicy9hcG0gJHtEfSR7YmluZGlyfS9hcG0KKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS8ubGlicy9hcG1kICR7RH0ke3NiaW5kaXJ9L2FwbWQKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9hcG1kX3Byb3h5ICR7RH0ke3N5c2NvbmZkaXJ9L2FwbS8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9hcG1kX3Byb3h5LmNvbmYgJHtEfSR7ZGF0YWRpcn0vYXBtZC8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kZWZhdWx0ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvYXBtZAorCW9lX2xpYmluc3RhbGwgLXNvIGxpYmFwbSAke0R9JHtsaWJkaXJ9CisJaW5zdGFsbCAtbSAwNjQ0IGFwbS5oICR7RH0ke2luY2x1ZGVkaXJ9CisKKwlzZWQgLWUgJ3MsL3Vzci9zYmluLCR7c2JpbmRpcn0sZzsgcywvZXRjLCR7c3lzY29uZmRpcn0sZzsnICR7V09SS0RJUn0vaW5pdCA+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9hcG1kCisJY2htb2QgNzU1ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9hcG1kCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vYXBtZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCXNlZCAtaSAtZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyBcCisJCS1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2FwbWQuc2VydmljZQorfQorCitQQUNLQUdFUyA9KyAibGliYXBtIGFwbSIKKworRklMRVNfbGliYXBtID0gIiR7bGliZGlyfS9saWJhcG0ke1NPTElCU30iCitGSUxFU19hcG0gPSAiJHtiaW5kaXJ9L2FwbSoiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9lZWUtYWNwaS1zY3JpcHRzX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9lZWUtYWNwaS1zY3JpcHRzL2VlZS1hY3BpLXNjcmlwdHNfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYTAyYWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9lZWUtYWNwaS1zY3JpcHRzX2dpdC5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gImVlZVBDIHNwZWNpZmljIEFDUEkgc2NyaXB0cyIKK0hPTUVQQUdFID0gImh0dHA6Ly9hbGlvdGguZGViaWFuLm9yZy9wcm9qZWN0cy9kZWJpYW4tZWVlcGMvIgorU0VDVElPTiA9ICJiYXNlIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZGViaWFuL2NvcHlyaWdodDttZDU9NzdlZjgzYWI1ZjRhZjkzOGE5M2VkYjYxZjdiNzRmMmMiCisKK1NSQ1JFViA9ICI5ZDRjZGVkY2EyNWIzOTY0MDVmODU4N2Y5YzRmYmY4MjI5ZTA0MWMyIgorUFYgPSAiMS4xLjEyK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5kZWJpYW4ub3JnL2dpdC9kZWJpYW4tZWVlcGMvZWVlcGMtYWNwaS1zY3JpcHRzLmdpdCBcCisJICAgZmlsZTovL3JlbW92ZS1kb2MtY2hlY2sucGF0Y2ggXAorCSAgIGZpbGU6Ly9wb3dlcmJ0bi5wYXRjaCBcCisJICAgZmlsZTovL3BvbGljeS1mdW5jcyAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0ZJTEVTXyR7UE59ID0gIiR7ZGF0YWRpcn0vYWNwaS1zdXBwb3J0LyBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2VlZXBjLWFjcGktc2NyaXB0cyBcCisgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2RlZmF1bHQvIFwKKyAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vYWNwaS8iCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC8KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FjcGkvYWN0aW9ucy8KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FjcGkvZXZlbnRzLworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYWNwaS9saWIvdWRldi9ydWxlcy5kCisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9lZWVwYy1hY3BpLXNjcmlwdHMvCisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9hY3BpLXN1cHBvcnQvCisJaW5zdGFsbCAtbSA2NDQgJHtTfS9ldmVudHMvKiAke0R9JHtzeXNjb25mZGlyfS9hY3BpL2V2ZW50cy8KKwlpbnN0YWxsIC1tIDY0NCAke1N9L2xpYi91ZGV2L3J1bGVzLmQvKiAke0R9JHtzeXNjb25mZGlyfS9hY3BpL2xpYi91ZGV2L3J1bGVzLmQvCisJaW5zdGFsbCAke1N9L2FjdGlvbnMvKiAke0R9JHtzeXNjb25mZGlyfS9hY3BpL2FjdGlvbnMvCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vYWNwaWxpYi9mdW5jdGlvbnMuc2ggJHtEfSR7ZGF0YWRpcn0vZWVlcGMtYWNwaS1zY3JpcHRzLworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3BvbGljeS1mdW5jcyAke0R9JHtkYXRhZGlyfS9hY3BpLXN1cHBvcnQvCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vZGViaWFuL2VlZXBjLWFjcGktc2NyaXB0cy5kZWZhdWx0KiAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0LworfQorCitSREVQRU5EU18ke1BOfSA9ICJwbS11dGlscyIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2VlZS1hY3BpLXNjcmlwdHMvZmlsZXMvcG9saWN5LWZ1bmNzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2VlZS1hY3BpLXNjcmlwdHMvZmlsZXMvcG9saWN5LWZ1bmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMDk5ZGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9maWxlcy9wb2xpY3ktZnVuY3MKQEAgLTAsMCArMSw4IEBACitDaGVja1BvbGljeSgpIHsKKwlpZiBwaWRvZiBnbm9tZS1wb3dlci1tYW5hZ2VyIGtwb3dlcnNhdmUgPiAvZGV2L251bGwgfHwKKwkgICAocGlkb2YgZGNvcHNlcnZlciA+IC9kZXYvbnVsbCAmJiB0ZXN0IC14IC91c3IvYmluL2Rjb3AgJiYgL3Vzci9iaW4vZGNvcCBrZGVkIGtkZWQgbG9hZGVkTW9kdWxlcyB8IGdyZXAgLXEga2xhcHRvcGRhZW1vbikgOyB0aGVuCisJCWVjaG8gMDsKKwllbHNlCisJCWVjaG8gMTsKKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2VlZS1hY3BpLXNjcmlwdHMvZmlsZXMvcG93ZXJidG4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9maWxlcy9wb3dlcmJ0bi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDNlNTU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2VlZS1hY3BpLXNjcmlwdHMvZmlsZXMvcG93ZXJidG4ucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorLS0tCisgYWN0aW9ucy9wb3dlci5zaCB8ICAgIDMgKysrCisgZXZlbnRzL3Bvd2VyYnRuICB8ICAgIDIgKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VuYWJsZSBmZWF0dXJlXQorCitJbmRleDogZ2l0L2V2ZW50cy9wb3dlcmJ0bgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGdpdC9ldmVudHMvcG93ZXJidG4JMjAwOC0xMC0wOCAxNzo0MzozNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMiBAQAorK2V2ZW50PWJ1dHRvbi9wb3dlciBQV1JGCisrYWN0aW9uPS9ldGMvYWNwaS9hY3Rpb25zL3Bvd2VyLnNoCitJbmRleDogZ2l0L2FjdGlvbnMvcG93ZXIuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnaXQvYWN0aW9ucy9wb3dlci5zaAkyMDA4LTEwLTA4IDE3OjQ1OjI2LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwzIEBACisrIyEvYmluL3NoCisrCisrL3NiaW4vc2h1dGRvd24gLWggbm93ICJQb3dlciBidXR0b24gcHJlc3NlZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9lZWUtYWNwaS1zY3JpcHRzL2ZpbGVzL3JlbW92ZS1kb2MtY2hlY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9maWxlcy9yZW1vdmUtZG9jLWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYjNkY2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9maWxlcy9yZW1vdmUtZG9jLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsNjAgQEAKKy0tLQorIGFjdGlvbnMvaG90a2V5LnNoICAgICB8ICAgIDMgLS0tCisgYWN0aW9ucy9zdXNwZW5kLnNoICAgIHwgICAgMyAtLS0KKyBhY3Rpb25zL3ZnYS10b2dnbGUuc2ggfCAgICAzIC0tLQorIGFjdGlvbnMvdm9sdW1lLnNoICAgICB8ICAgIDMgLS0tCisgNCBmaWxlcyBjaGFuZ2VkLCAxMiBkZWxldGlvbnMoLSkKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogZ2l0L2VlZXBjLWFjcGktc2NyaXB0cy92b2x1bWUuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9lZWVwYy1hY3BpLXNjcmlwdHMvdm9sdW1lLnNoCTIwMTEtMTEtMjkgMTk6MjE6NTUuMDAwMDAwMDAwICswODAwCisrKysgZ2l0L2VlZXBjLWFjcGktc2NyaXB0cy92b2x1bWUuc2gJMjAxMS0xMS0yOSAxOTo0MTozNi4wMDAwMDAwMDAgKzA4MDAKK0BAIC0zLDEyICszLDEwIEBACisgWyAtZCAvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMgXSB8fCBbIC1kIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9lZWVwYy13bWkgXSB8fCBleGl0IDAKKyAjIFZvbHVtZSBjb250cm9scworIAorLSMgZG8gbm90aGluZyBpZiBwYWNrYWdlIGlzIHJlbW92ZWQKKyBQS0c9ZWVlcGMtYWNwaS1zY3JpcHRzCisgUEtHX0RJUj0vdXNyL3NoYXJlL2FjcGktc3VwcG9ydC8kUEtHCisgRlVOQ19MSUI9JFBLR19ESVIvbGliL2Z1bmN0aW9ucy5zaAorIERFRkFVTFQ9L2V0Yy9kZWZhdWx0LyRQS0cKKy1bIC1lICIkRlVOQ19MSUIiIF0gfHwgZXhpdCAwCisgCisgLiAkRlVOQ19MSUIKKyAuICRQS0dfRElSL2xpYi9zb3VuZC5zaAorSW5kZXg6IGdpdC9lZWVwYy1hY3BpLXNjcmlwdHMvaG90a2V5LnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvZWVlcGMtYWNwaS1zY3JpcHRzL2hvdGtleS5zaAkyMDExLTExLTI5IDE5OjIxOjU1LjAwMDAwMDAwMCArMDgwMAorKysrIGdpdC9lZWVwYy1hY3BpLXNjcmlwdHMvaG90a2V5LnNoCTIwMTEtMTEtMjkgMTk6Mzk6NTEuMDAwMDAwMDAwICswODAwCitAQCAtMSwxMiArMSwxMCBAQAorICMhL2Jpbi9zaAorIAorIFsgLWQgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2VlZXBjIF0gfHwgWyAtZCAvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMtd21pIF0gfHwgZXhpdCAwCistIyBkbyBub3RoaW5nIGlmIHBhY2thZ2UgaXMgcmVtb3ZlZAorIFBLRz1lZWVwYy1hY3BpLXNjcmlwdHMKKyBQS0dfRElSPS91c3Ivc2hhcmUvYWNwaS1zdXBwb3J0LyRQS0cKKyBGVU5DX0xJQj0kUEtHX0RJUi9saWIvZnVuY3Rpb25zLnNoCisgREVGQVVMVD0vZXRjL2RlZmF1bHQvJFBLRworLVsgLWUgIiRGVU5DX0xJQiIgXSB8fCBleGl0IDAKKyAKKyBjYXNlICQocnVubGV2ZWwpIGluCisgICAgICowfCo2KQorSW5kZXg6IGdpdC9lZWVwYy1hY3BpLXNjcmlwdHMvdmdhLXRvZ2dsZS5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2VlZXBjLWFjcGktc2NyaXB0cy92Z2EtdG9nZ2xlLnNoCTIwMTEtMTEtMjkgMTk6MjE6NTUuMDAwMDAwMDAwICswODAwCisrKysgZ2l0L2VlZXBjLWFjcGktc2NyaXB0cy92Z2EtdG9nZ2xlLnNoCTIwMTEtMTEtMjkgMTk6NDA6MjQuMDAwMDAwMDAwICswODAwCitAQCAtMSwxMiArMSwxMCBAQAorICMhL2Jpbi9zaAorIAorIFsgLWQgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2VlZXBjIF0gfHwgWyAtZCAvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMtd21pIF0gfHwgZXhpdCAwCistIyBkbyBub3RoaW5nIGlmIHBhY2thZ2UgaXMgcmVtb3ZlZAorIFBLRz1lZWVwYy1hY3BpLXNjcmlwdHMKKyBQS0dfRElSPS91c3Ivc2hhcmUvYWNwaS1zdXBwb3J0LyRQS0cKKyBGVU5DX0xJQj0kUEtHX0RJUi9saWIvZnVuY3Rpb25zLnNoCisgREVGQVVMVD0vZXRjL2RlZmF1bHQvJFBLRworLVsgLWUgIiRGVU5DX0xJQiIgXSB8fCBleGl0IDAKKyAKKyBpZiBbIC1lICIkREVGQVVMVCIgXTsgdGhlbiAuICIkREVGQVVMVCI7IGZpCisgLiAkRlVOQ19MSUIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL2NvbmZpZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MTA2NmRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvY29uZmlnCkBAIC0wLDAgKzEsNTAgQEAKKyMhL2Jpbi9zaAorCitpZiBbIC1lIC9ldGMvZm9ybWZhY3Rvci9tYWNoY29uZmlnIF07IHRoZW4KKyAgICAuIC9ldGMvZm9ybWZhY3Rvci9tYWNoY29uZmlnCitmaQorCitpZiBbIC16ICIkSEFWRV9UT1VDSFNDUkVFTiIgXTsgdGhlbgorICAgIEhBVkVfVE9VQ0hTQ1JFRU49MAorZmkKKworaWYgWyAteiAiJEhBVkVfS0VZQk9BUkQiIF07IHRoZW4KKyAgICBIQVZFX0tFWUJPQVJEPTAKK2ZpCisKK2lmIFsgLXogIiRIQVZFX0tFWUJPQVJEX1BPUlRSQUlUIiBdOyB0aGVuCisgICAgSEFWRV9LRVlCT0FSRF9QT1JUUkFJVD0wCitmaQorCitpZiBbIC16ICIkSEFWRV9LRVlCT0FSRF9MQU5EU0NBUEUiIF07IHRoZW4KKyAgICBIQVZFX0tFWUJPQVJEX0xBTkRTQ0FQRT0wCitmaQorCitpZiBbIC16ICIkRElTUExBWV9DQU5fUk9UQVRFIiBdOyB0aGVuCisgICAgRElTUExBWV9DQU5fUk9UQVRFPTAKK2ZpCisKK2lmIFsgLXogIiRESVNQTEFZX09SSUVOVEFUSU9OIiBdOyB0aGVuCisgICAgRElTUExBWV9PUklFTlRBVElPTj0wCitmaQorCitpZiBbIC1lICIvZGV2L2ZiIiBdOyB0aGVuCisgICAgaWYgWyAteiAiJERJU1BMQVlfV0lEVEhfUElYRUxTIiBdOyB0aGVuCisgICAgICAgIERJU1BMQVlfV0lEVEhfUElYRUxTPWAvdXNyL3NiaW4vZmJzZXQgfCBncmVwIGdlb21ldHJ5IHwgYXdrICd7IHByaW50ICQyIH0nYAorICAgIGZpCisKKyAgICBpZiBbIC16ICIkRElTUExBWV9IRUlHSFRfUElYRUxTIiBdOyB0aGVuCisgICAgICAgIERJU1BMQVlfSEVJR0hUX1BJWEVMUz1gL3Vzci9zYmluL2Zic2V0IHwgZ3JlcCBnZW9tZXRyeSB8IGF3ayAneyBwcmludCAkMyB9J2AKKyAgICBmaQorCisgICAgaWYgWyAteiAiJERJU1BMQVlfQlBQIiBdOyB0aGVuCisgICAgICAgIERJU1BMQVlfQlBQPWAvdXNyL3NiaW4vZmJzZXQgfCBncmVwIGdlb21ldHJ5IHwgYXdrICd7IHByaW50ICQ2IH0nYAorICAgIGZpCitmaQorCisjIAorIyBObyB3YXkgdG8gZ3Vlc3MgdGhlc2Ugb3IgaGF2ZSBhbnkgZGVmYXVsdHMKKyMKKyNESVNQTEFZX1dJRFRIX01NCisjRElTUExBWV9IRUlHSFRfTU0KKyNESVNQTEFZX1NVQlBJWEVMX09SREVSPQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvbWFjaGNvbmZpZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL21hY2hjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL21hY2hjb25maWcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVhcm0vbWFjaGNvbmZpZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVhcm0vbWFjaGNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NmEyYWUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdWFybS9tYWNoY29uZmlnCkBAIC0wLDAgKzEsMTAgQEAKK0hBVkVfVE9VQ0hTQ1JFRU49MQorSEFWRV9LRVlCT0FSRD0xCisgCitESVNQTEFZX0NBTl9ST1RBVEU9MAorRElTUExBWV9PUklFTlRBVElPTj0wCisjRElTUExBWV9XSURUSF9QSVhFTFM9NjQwCisjRElTUExBWV9IRUlHSFRfUElYRUxTPTQ4MAorI0RJU1BMQVlfQlBQPTE2CitESVNQTEFZX0RQST0xNTAKK0RJU1BMQVlfU1VCUElYRUxfT1JERVI9dnJnYgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdWFybXY2L21hY2hjb25maWcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11YXJtdjYvbWFjaGNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NmEyYWUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdWFybXY2L21hY2hjb25maWcKQEAgLTAsMCArMSwxMCBAQAorSEFWRV9UT1VDSFNDUkVFTj0xCitIQVZFX0tFWUJPQVJEPTEKKyAKK0RJU1BMQVlfQ0FOX1JPVEFURT0wCitESVNQTEFZX09SSUVOVEFUSU9OPTAKKyNESVNQTEFZX1dJRFRIX1BJWEVMUz02NDAKKyNESVNQTEFZX0hFSUdIVF9QSVhFTFM9NDgwCisjRElTUExBWV9CUFA9MTYKK0RJU1BMQVlfRFBJPTE1MAorRElTUExBWV9TVUJQSVhFTF9PUkRFUj12cmdiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11YXJtdjcvbWFjaGNvbmZpZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVhcm12Ny9tYWNoY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU2YTJhZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11YXJtdjcvbWFjaGNvbmZpZwpAQCAtMCwwICsxLDEwIEBACitIQVZFX1RPVUNIU0NSRUVOPTEKK0hBVkVfS0VZQk9BUkQ9MQorIAorRElTUExBWV9DQU5fUk9UQVRFPTAKK0RJU1BMQVlfT1JJRU5UQVRJT049MAorI0RJU1BMQVlfV0lEVEhfUElYRUxTPTY0MAorI0RJU1BMQVlfSEVJR0hUX1BJWEVMUz00ODAKKyNESVNQTEFZX0JQUD0xNgorRElTUExBWV9EUEk9MTUwCitESVNQTEFZX1NVQlBJWEVMX09SREVSPXZyZ2IKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVtaXBzL21hY2hjb25maWcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11bWlwcy9tYWNoY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU2Nzc3YjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11bWlwcy9tYWNoY29uZmlnCkBAIC0wLDAgKzEsMTAgQEAKK0hBVkVfVE9VQ0hTQ1JFRU49MQorSEFWRV9LRVlCT0FSRD0xCisgCitESVNQTEFZX0NBTl9ST1RBVEU9MAorRElTUExBWV9PUklFTlRBVElPTj0wCitESVNQTEFZX1dJRFRIX1BJWEVMUz02NDAKK0RJU1BMQVlfSEVJR0hUX1BJWEVMUz00ODAKK0RJU1BMQVlfQlBQPTE2CitESVNQTEFZX0RQST0xNTAKKyNESVNQTEFZX1NVQlBJWEVMX09SREVSPXZyZ2IKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVwcGMvbWFjaGNvbmZpZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVwcGMvbWFjaGNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZWEyMjcwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdXBwYy9tYWNoY29uZmlnCkBAIC0wLDAgKzEsMTAgQEAKK0hBVkVfVE9VQ0hTQ1JFRU49MQorSEFWRV9LRVlCT0FSRD0xCisgCitESVNQTEFZX0NBTl9ST1RBVEU9MAorRElTUExBWV9PUklFTlRBVElPTj0wCitESVNQTEFZX1dJRFRIX1BJWEVMUz04MDAKK0RJU1BMQVlfSEVJR0hUX1BJWEVMUz02MDAKK0RJU1BMQVlfQlBQPTE2CitESVNQTEFZX0RQST0xNTAKK0RJU1BMQVlfU1VCUElYRUxfT1JERVI9dnJnYgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdXg4Ni02NC9tYWNoY29uZmlnIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdXg4Ni02NC9tYWNoY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU2YTJhZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11eDg2LTY0L21hY2hjb25maWcKQEAgLTAsMCArMSwxMCBAQAorSEFWRV9UT1VDSFNDUkVFTj0xCitIQVZFX0tFWUJPQVJEPTEKKyAKK0RJU1BMQVlfQ0FOX1JPVEFURT0wCitESVNQTEFZX09SSUVOVEFUSU9OPTAKKyNESVNQTEFZX1dJRFRIX1BJWEVMUz02NDAKKyNESVNQTEFZX0hFSUdIVF9QSVhFTFM9NDgwCisjRElTUExBWV9CUFA9MTYKK0RJU1BMQVlfRFBJPTE1MAorRElTUExBWV9TVUJQSVhFTF9PUkRFUj12cmdiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11eDg2L21hY2hjb25maWcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11eDg2L21hY2hjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTZhMmFlMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXV4ODYvbWFjaGNvbmZpZwpAQCAtMCwwICsxLDEwIEBACitIQVZFX1RPVUNIU0NSRUVOPTEKK0hBVkVfS0VZQk9BUkQ9MQorIAorRElTUExBWV9DQU5fUk9UQVRFPTAKK0RJU1BMQVlfT1JJRU5UQVRJT049MAorI0RJU1BMQVlfV0lEVEhfUElYRUxTPTY0MAorI0RJU1BMQVlfSEVJR0hUX1BJWEVMUz00ODAKKyNESVNQTEFZX0JQUD0xNgorRElTUExBWV9EUEk9MTUwCitESVNQTEFZX1NVQlBJWEVMX09SREVSPXZyZ2IKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvcl8wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMzMGJkNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiRGV2aWNlIGZvcm1mYWN0b3IgaW5mb3JtYXRpb24iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorUFIgPSAicjQ1IgorCitTUkNfVVJJID0gImZpbGU6Ly9jb25maWcgZmlsZTovL21hY2hjb25maWciCitTID0gIiR7V09SS0RJUn0iCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitkb19pbnN0YWxsKCkgeworCSMgSW5zdGFsbCBmaWxlIG9ubHkgaWYgaXQgaGFzIGNvbnRlbnRzCisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZm9ybWZhY3Rvci8KKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7U30vY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L2Zvcm1mYWN0b3IvCisJaWYgWyAtcyAiJHtTfS9tYWNoY29uZmlnIiBdOyB0aGVuCisJICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9tYWNoY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L2Zvcm1mYWN0b3IvCisJZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvZ251LWVmaS1NYWtlLXNldGptcC5TLXBvcnRhYmxlLXRvLUFSTS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvZ251LWVmaS1NYWtlLXNldGptcC5TLXBvcnRhYmxlLXRvLUFSTS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWQxMjhhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaS9nbnUtZWZpLU1ha2Utc2V0am1wLlMtcG9ydGFibGUtdG8tQVJNLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0Zyb20gOGEzNTZkNGI2YTI0MmNlNjNiNzM5MjBkM2VkMzNmODhmOWUxMmZlMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorRGF0ZTogU3VuLCA2IFNlcCAyMDE1IDA1OjIwOjQzIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGdudS1lZmk6IE1ha2Ugc2V0am1wLlMgcG9ydGFibGUgdG8gQVJNCisKK1RoaXMgcGF0Y2ggZml4ZXMgdGhlIGZvbGxvd2luZyBlcnJvcjoKKworICAuLi4vbGliL2FybS9zZXRqbXAuUzoxODogRXJyb3I6IHVucmVjb2duaXplZCBzeW1ib2wgdHlwZSAiIgorICAuLi4vbGliL2FybS9zZXRqbXAuUzoyNjogRXJyb3I6IHVucmVjb2duaXplZCBzeW1ib2wgdHlwZSAiIgorCitUaGUgcHJvYmxlbSBpcyB0aGUgYXNzZW1ibHkgc3ludGF4IHRoYXQgaXMgdXNlZCBpcyBub3QgcG9ydGFibGUgdG8gQVJNLAord2hlcmUgdGhlICdAJyBzeW1ib2wgaXMgYSBjb21tZW50OgorCisgID4gTm90ZSBvbiB0YXJnZXRzIHdoZXJlIHRoZSBAIGNoYXJhY3RlciBpcyB0aGUgc3RhcnQgb2YgYSBjb21tZW50CisgID4gKGVnIEFSTSkgdGhlbiBhbm90aGVyIGNoYXJhY3RlciBpcyB1c2VkIGluc3RlYWQuIEZvciBleGFtcGxlIHRoZQorICA+IEFSTSBwb3J0IHVzZXMgdGhlICUgY2hhcmFjdGVyLgorCisoRnJvbSBodHRwczovL3NvdXJjZXdhcmUub3JnL2JpbnV0aWxzL2RvY3MtMi4yNS9hcy9TZWN0aW9uLmh0bWwjU2VjdGlvbikKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorLS0tCisgbGliL2FybS9zZXRqbXAuUyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvYXJtL3NldGptcC5TIGIvbGliL2FybS9zZXRqbXAuUworaW5kZXggNmUzZmJmMC4uODVjODcwNSAxMDA2NDQKKy0tLSBhL2xpYi9hcm0vc2V0am1wLlMKKysrKyBiL2xpYi9hcm0vc2V0am1wLlMKK0BAIC0xNSw3ICsxNSw3IEBAIEJBU0lTLAorIAkudGV4dAorIAkuYXJtCisgCS5nbG9ibAlzZXRqbXAKKy0JLnR5cGUJc2V0am1wLCBAZnVuY3Rpb24KKysJLnR5cGUJc2V0am1wLCAlZnVuY3Rpb24KKyBzZXRqbXA6CisgCW1vdglyMywgcjEzCisgCXN0bWlhCXIwLCB7cjMtcjEyLHIxNH0KK0BAIC0yMyw2ICsyMyw2IEBAIHNldGptcDoKKyAJYngJbHIKKyAKKyAJLmdsb2JsCWxvbmdqbXAKKy0JLnR5cGUJbG9uZ2ptcCwgQGZ1bmN0aW9uCisrCS50eXBlCWxvbmdqbXAsICVmdW5jdGlvbgorIGxvbmdqbXA6CisgCWxkbWlhCXIwLCB7cjMtcjEyLHIxNH0KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaS9saWItTWFrZWZpbGUtZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaS9saWItTWFrZWZpbGUtZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMmFlMWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpL2xpYi1NYWtlZmlsZS1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSAwZGFhMzU0YTE2YWEzY2FkZTU2ZWQ0MjNkMGY4YTA0Y2YxYzIyZjlkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUaHUsIDIzIEFwciAyMDE1IDAxOjQ5OjMxIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGxpYi9NYWtlZmlsZTogZml4IHBhcmFsbGVsIGlzc3VlCisKK0ZpeGVkOgorQXNzZW1ibGVyIG1lc3NhZ2VzOgorRmF0YWwgZXJyb3I6IGNhbid0IGNyZWF0ZSBydW50aW1lL3J0bG9jay5vOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CitBc3NlbWJsZXIgbWVzc2FnZXM6CitGYXRhbCBlcnJvcjogY2FuJ3QgY3JlYXRlIHJ1bnRpbWUvcnRkYXRhLm86IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK0Fzc2VtYmxlciBtZXNzYWdlczoKK0ZhdGFsIGVycm9yOiBjYW4ndCBjcmVhdGUgcnVudGltZS92bS5vOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CitBc3NlbWJsZXIgbWVzc2FnZXM6CitGYXRhbCBlcnJvcjogY2FuJ3QgY3JlYXRlIHJ1bnRpbWUvZWZpcnRsaWIubzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWIvTWFrZWZpbGUgfCAgICAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlCitpbmRleCBkYzRiOTRhLi5mNjRkMWVkIDEwMDY0NAorLS0tIGEvbGliL01ha2VmaWxlCisrKysgYi9saWIvTWFrZWZpbGUKK0BAIC03Myw2ICs3Myw4IEBAIGFsbDogbGlic3ViZGlycyBsaWJlZmkuYQorIGxpYnN1YmRpcnM6CisgCWZvciBzZGlyIGluICQoU1VCRElSUyk7IGRvIG1rZGlyIC1wICQkc2RpcjsgZG9uZQorIAorKyQoT0JKUyk6IGxpYnN1YmRpcnMKKysKKyBsaWJlZmkuYTogJChPQkpTKQorIAkkKEFSKSBydiAkQCAkKE9CSlMpCisgCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaS9wYXJhbGxlbC1tYWtlLWFyY2hpdmVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaS9wYXJhbGxlbC1tYWtlLWFyY2hpdmVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YjQ3YzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpL3BhcmFsbGVsLW1ha2UtYXJjaGl2ZXMucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorRml4IHBhcmFsbGVsIG1ha2UgZmFpbHVyZSBmb3IgYXJjaGl2ZXMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoZSBsaWIgYW5kIGdudWVmaSBtYWtlZmlsZXMgd2VyZSB1c2luZyB0aGUgbGliLmEoKSBmb3JtIHdoaWNoIGNvbXBpbGVzCithbmQgYXIncyBhcyBhIHBhaXIgaW5zdGVhZCBvZiBjb21waWxpbmcgYWxsIGFuZCB0aGVuIGFyJ2luZyB3aGljaCBjYW4KK3BhcmFsbGVsaXplIGJldHRlci4gVGhpcyB3YXMgcmVzdWx0aW5nIGluIGJ1aWxkIGZhaWx1cmVzIG9uIGxhcmdlciB2YWx1ZXMKK29mIC1qLgorCitTZWUgaHR0cDovL3d3dy5jaGVtaWUuZnUtYmVybGluLmRlL2NoZW1uZXQvdXNlL2luZm8vbWFrZS9tYWtlX3RvYy5odG1sI1RPQzEwNQorZm9yIGRldGFpbHMuCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCistLS0KKyBnbnVlZmkvTWFrZWZpbGUgfCAgICAzICsrLQorIGxpYi9NYWtlZmlsZSAgICB8ICAgIDMgKystCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnbnUtZWZpLTMuMC9saWIvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnUtZWZpLTMuMC5vcmlnL2xpYi9NYWtlZmlsZQorKysrIGdudS1lZmktMy4wL2xpYi9NYWtlZmlsZQorQEAgLTY2LDcgKzY2LDggQEAgYWxsOiBsaWJzdWJkaXJzIGxpYmVmaS5hCisgbGlic3ViZGlyczoKKyAJZm9yIHNkaXIgaW4gJChTVUJESVJTKTsgZG8gbWtkaXIgLXAgJCRzZGlyOyBkb25lCisgCistbGliZWZpLmE6ICQocGF0c3Vic3QgJSxsaWJlZmkuYSglKSwkKE9CSlMpKQorK2xpYmVmaS5hOiAkKE9CSlMpCisrCSQoQVIpIHJ2ICRAICQoT0JKUykKKyAKKyBjbGVhbjoKKyAJcm0gLWYgbGliZWZpLmEgKn4gJChPQkpTKSAqLyoubworSW5kZXg6IGdudS1lZmktMy4wL2dudWVmaS9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudS1lZmktMy4wLm9yaWcvZ251ZWZpL01ha2VmaWxlCisrKysgZ251LWVmaS0zLjAvZ251ZWZpL01ha2VmaWxlCitAQCAtNTEsNyArNTEsOCBAQCBUQVJHRVRTCT0gY3J0MC1lZmktJChBUkNIKS5vIGxpYmdudWVmaS5hCisgCisgYWxsOgkkKFRBUkdFVFMpCisgCistbGliZ251ZWZpLmE6ICQocGF0c3Vic3QgJSxsaWJnbnVlZmkuYSglKSwkKE9CSlMpKQorK2xpYmdudWVmaS5hOiAkKE9CSlMpCisrCSQoQVIpIHJ2ICRAICQoT0JKUykKKyAKKyBjbGVhbjoKKyAJcm0gLWYgJChUQVJHRVRTKSAqfiAqLm8gJChPQkpTKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaV8zLjAuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmlfMy4wLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWExYmE0MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmlfMy4wLjMuYmIKQEAgLTAsMCArMSw0NSBAQAorU1VNTUFSWSA9ICJMaWJyYXJpZXMgZm9yIHByb2R1Y2luZyBFRkkgYmluYXJpZXMiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dudS1lZmkvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIrIHwgQlNELTItQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZ251ZWZpL2NydDAtZWZpLWFybS5TO2JlZ2lubGluZT00O2VuZGxpbmU9OTttZDU9MjI0MGQ3YmJkZjA5MjgyOTRjMmY0YTY4YjE0ZDY1OTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ251ZWZpL2NydDAtZWZpLWFhcmNoNjQuUztiZWdpbmxpbmU9NDtlbmRsaW5lPTE2O21kNT1lNTgyNzY0YTQ3NzZlNjBjOTViZjlhYjYxNzM0M2QzNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmMvZWZpc2hlbGxpbnRmLmg7YmVnaW5saW5lPTEzO2VuZGxpbmU9MjA7bWQ1PTIwMjc2NmI3OWQ3MDhlZmYzY2M3MGZjZTE1ZmI4MGM3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luYy9lZmlzaGVsbHBhcm0uaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTExO21kNT00NjhiMTIzMWIwNWJiYzg0YmFlM2EwZDU3NzRlM2JiNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvYXJtL2RpdjY0LlM7YmVnaW5saW5lPTY7ZW5kbGluZT0xMjttZDU9YTk2Yzg0ZjVhZDEyYjRmMDExZjk4YjVkMDM5MjQyZjIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2FybS9tYXRoLmM7YmVnaW5saW5lPTQ7ZW5kbGluZT0xMDttZDU9NjRkZDE5ODdjZWUxZGNmNTlkMTFhYTU3MmNmYTY0NGUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2FybS9pbml0cGxhdC5jO2JlZ2lubGluZT00O2VuZGxpbmU9MTA7bWQ1PTY0ZGQxOTg3Y2VlMWRjZjU5ZDExYWE1NzJjZmE2NDRlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9hcm0vbGliMWZ1bmNzLlM7YmVnaW5saW5lPTk7ZW5kbGluZT0zMzttZDU9ZjU2ZDVlYmJjODcxMzZiYzY2Y2ZlMjRkYjgyYmNmMDEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2FhcmNoNjQvbWF0aC5jO2JlZ2lubGluZT05O2VuZGxpbmU9MzM7bWQ1PWNmYWRlNGM1NjBlMDMzYTdiYjAyZGFiMjgyODcyYzdkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9hYXJjaDY0L2luaXRwbGF0LmM7YmVnaW5saW5lPTk7ZW5kbGluZT0zMzttZDU9OTAwY2IxZmZiZTNlMWRlZDM0NDEwMmJlOTIxODMwZjEgXAorICAgICAgICAgICAgICAgICAgICIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vJHtCUE59LyR7QlB9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcGFyYWxsZWwtbWFrZS1hcmNoaXZlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWItTWFrZWZpbGUtZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dudS1lZmktTWFrZS1zZXRqbXAuUy1wb3J0YWJsZS10by1BUk0ucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjE1YTRiY2JjMThhOWE1ZTgxMTBlZDk1NTk3MDYyMmU2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM1MzBmMjFhMTVmZDljMjE0ZGQ5MmQyOWE2Y2FhMjBmYWM5ODkyODkyNjc1MTIwMjBiNmRhMWY1ZTZmNWI0Y2IiCisKK0NPTVBBVElCTEVfSE9TVCA9ICIoeDg2XzY0Lip8aS44Ni4qfGFhcmNoNjQuKnxhcm0uKiktbGludXgiCisKK2RlZiBnbnVfZWZpX2FyY2goZCk6CisgICAgaW1wb3J0IHJlCisgICAgdGFyY2ggPSBkLmdldFZhcigiVEFSR0VUX0FSQ0giLCBUcnVlKQorICAgIGlmIHJlLm1hdGNoKCJpWzM0NTY3ODldODYiLCB0YXJjaCk6CisgICAgICAgIHJldHVybiAiaWEzMiIKKyAgICByZXR1cm4gdGFyY2gKKworRVhUUkFfT0VNQUtFID0gIidBUkNIPSR7QGdudV9lZmlfYXJjaChkKX0nICdDQz0ke0NDfScgJ0FTPSR7QVN9JyAnTEQ9JHtMRH0nICdBUj0ke0FSfScgXAorICAgICAgICAgICAgICAgICdSQU5MSUI9JHtSQU5MSUJ9JyAnT0JKQ09QWT0ke09CSkNPUFl9JyAnUFJFRklYPSR7cHJlZml4fScgJ0xJQkRJUj0ke2xpYmRpcn0nIFwKKyAgICAgICAgICAgICAgICAiCisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgaW5zdGFsbCBJTlNUQUxMUk9PVD0iJHtEfSIKK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8qLmxkcyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDAxLUZpeC1idWlsZC13aXRoLWdsaWJjLTIuMjAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDAxLUZpeC1idWlsZC13aXRoLWdsaWJjLTIuMjAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZhYWE5NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtRml4LWJ1aWxkLXdpdGgtZ2xpYmMtMi4yMC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDI3NWZlMDI2OWVjYzAwYWY0Nzg4YWZhZjlkYzE1MWE1MGIyNTY0NWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVGh1LCAyOCBBdWcgMjAxNCAxOToyNjoxNCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBGaXggYnVpbGQgd2l0aCBnbGliYyAyLjIwCisKKyogZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jOiBzcXVhaGVzIGJlbG93IHdhcm5pbmcKKyAgd2FybmluZzogI3dhcm5pbmcgIl9CU0RfU09VUkNFIGFuZCBfU1ZJRF9TT1VSQ0UgYXJlIGRlcHJlY2F0ZWQsIHVzZSBfREVGQVVMVF9TT1VSQ0UiCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKKy0tLQorIGdydWItY29yZS9rZXJuL2VtdS9ob3N0ZnMuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2dydWItY29yZS9rZXJuL2VtdS9ob3N0ZnMuYyBiL2dydWItY29yZS9rZXJuL2VtdS9ob3N0ZnMuYworaW5kZXggN2U3MjVmNi4uOGRkOGU2NSAxMDA2NDQKKy0tLSBhL2dydWItY29yZS9rZXJuL2VtdS9ob3N0ZnMuYworKysrIGIvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jCitAQCAtMTksNyArMTksNyBAQAorIAorICNpbmNsdWRlIDxjb25maWctdXRpbC5oPgorIAorLSNkZWZpbmUgX0JTRF9TT1VSQ0UKKysjZGVmaW5lIF9ERUZBVUxUX1NPVVJDRQorICNpbmNsdWRlIDxncnViL2ZzLmg+CisgI2luY2x1ZGUgPGdydWIvZmlsZS5oPgorICNpbmNsdWRlIDxncnViL2Rpc2suaD4KKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdkYzExNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogZ3J1Yi0yLjAwL2dydWItY29yZS9nbnVsaWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncnViLTIuMDAub3JpZy9ncnViLWNvcmUvZ251bGliL01ha2VmaWxlLmFtCisrKysgZ3J1Yi0yLjAwL2dydWItY29yZS9nbnVsaWIvTWFrZWZpbGUuYW0KK0BAIC00MTAsNyArNDEwLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtcGFyc2VfZGhjcF92ZW5kb3ItQWRkLW1pc3NpbmctY29uc3QtcXVhbGlmaWVycy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtcGFyc2VfZGhjcF92ZW5kb3ItQWRkLW1pc3NpbmctY29uc3QtcXVhbGlmaWVycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTVlM2ViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1wYXJzZV9kaGNwX3ZlbmRvci1BZGQtbWlzc2luZy1jb25zdC1xdWFsaWZpZXJzLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworT3JpZ2luYWwgY29tbWl0OiBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvY2dpdC9ncnViLmdpdC9jb21taXQvZ3J1Yi1jb3JlL25ldC9ib290cC5jP2lkPWYwNmMyMTcyYzBiMzIwNTJmMjJlMzc1MjM0NDVjZjhlN2FmZmFlYTMKKworRnJvbSAxNDlkMmExNGY0NzIzNzc4Y2VkMjNmNDM5NDg3MjAxY2NiZjFhMmM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMjMgQXByIDIwMTUgMDc6MDM6MzQgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gcGFyc2VfZGhjcF92ZW5kb3I6IEFkZCBtaXNzaW5nIGNvbnN0IHF1YWxpZmllcnMuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBncnViLWNvcmUvbmV0L2Jvb3RwLmMgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL25ldC9ib290cC5jIGIvZ3J1Yi1jb3JlL25ldC9ib290cC5jCitpbmRleCBiYzA3ZDUzLi40NDEzMWVkIDEwMDY0NAorLS0tIGEvZ3J1Yi1jb3JlL25ldC9ib290cC5jCisrKysgYi9ncnViLWNvcmUvbmV0L2Jvb3RwLmMKK0BAIC01Miw5ICs1Miw5IEBAIHNldF9lbnZfbGltbl9ybyAoY29uc3QgY2hhciAqaW50ZXJuYW1lLCBjb25zdCBjaGFyICpzdWZmaXgsCisgfQorIAorIHN0YXRpYyB2b2lkCistcGFyc2VfZGhjcF92ZW5kb3IgKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKnZlbmQsIGludCBsaW1pdCwgaW50ICptYXNrKQorK3BhcnNlX2RoY3BfdmVuZG9yIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2ZW5kLCBpbnQgbGltaXQsIGludCAqbWFzaykKKyB7CistICBncnViX3VpbnQ4X3QgKnB0ciwgKnB0cjA7CisrICBjb25zdCBncnViX3VpbnQ4X3QgKnB0ciwgKnB0cjA7CisgCisgICBwdHIgPSBwdHIwID0gdmVuZDsKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvY2ZnIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYTUzZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9jZmcKQEAgLTAsMCArMSwyIEBACitzZWFyY2guZmlsZSAoJGNtZHBhdGgpL0VGSS9CT09UL2dydWIuY2ZnIHJvb3QKK3NldCBwcmVmaXg9KCRyb290KS9FRkkvQk9PVApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvY2hlY2staWYtbGlibHptYS1pcy1kaXNhYmxlZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2NoZWNrLWlmLWxpYmx6bWEtaXMtZGlzYWJsZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVlY2UwOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2NoZWNrLWlmLWxpYmx6bWEtaXMtZGlzYWJsZWQucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRGlzYWJsZSBsaWJsem1hIGlmIC0tZW5hYmxlLWxpYmx6bWE9bm8KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTAyOSwxMCArMTAyOSwyMCBAQCBmaQorIAorIEFDX1NVQlNUKFtMSUJHRU9NXSkKKyAKKy1BQ19DSEVDS19MSUIoW2x6bWFdLCBbbHptYV9jb2RlXSwKKy0gICAgICAgICAgICAgW0xJQkxaTUE9Ii1sbHptYSIKKy0gICAgICAgICAgICAgIEFDX0RFRklORShbSEFWRV9MSUJMWk1BXSwgWzFdLAorLSAgICAgICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTFpNQSBsaWJyYXJ5Ll0pXSwpCisrQUNfQVJHX0VOQUJMRShbbGlibHptYV0sCisrICAgICAgICAgICAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxpYmx6bWFdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbmFibGUgbGlibHptYSBpbnRlZ3JhdGlvbiAoZGVmYXVsdD1ndWVzc2VkKV0pXSkKKytpZiB0ZXN0IHgiJGVuYWJsZV9saWJsem1hIiA9IHhubyA7IHRoZW4KKysgIGxpYmx6bWFfZXhjdXNlPSJleHBsaWNpdGx5IGRpc2FibGVkIgorK2ZpCisrCisraWYgdGVzdCB4IiRsaWJsem1hX2V4Y3VzZSIgPSB4IDsgdGhlbgorKyAgQUNfQ0hFQ0tfTElCKFtsem1hXSwgW2x6bWFfY29kZV0sCisrICAgICAgICAgICAgICAgW0xJQkxaTUE9Ii1sbHptYSIKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFtIQVZFX0xJQkxaTUFdLCBbMV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIExaTUEgbGlicmFyeS5dKV0sKQorK2ZpCisrCisgQUNfU1VCU1QoW0xJQkxaTUFdKQorIAorIEFDX0FSR19FTkFCTEUoW2xpYnpmc10sCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9maXgtZW5kaWFubmVzcy1wcm9ibGVtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZml4LWVuZGlhbm5lc3MtcHJvYmxlbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzk5OTJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZml4LWVuZGlhbm5lc3MtcHJvYmxlbS5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitncnViLWNvcmUvbmV0L3RmdHAuYzogZml4IGVuZGlhbm5lc3MgcHJvYmxlbS4KKworCSogZ3J1Yi1jb3JlL25ldC90ZnRwLmMgKGFjayk6IEZpeCBlbmRpYW5uZXNzIHByb2JsZW0uCisJKHRmdHBfcmVjZWl2ZSk6IExpa2V3aXNlLgorCVJlcG9ydGVkIGJ5OiBNaWNoYWVsIERhdmlkc2F2ZXIuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZworaW5kZXggODFiZGFlOS4uYzJmNDJkNSAxMDA2NDQKKy0tLSBhL0NoYW5nZUxvZworKysrIGIvQ2hhbmdlTG9nCitAQCAtMSwzICsxLDkgQEAKKysyMDEyLTA3LTAyICBWbGFkaW1pciBTZXJiaW5lbmtvICA8cGhjb2RlckBnbWFpbC5jb20+CisrCisrCSogZ3J1Yi1jb3JlL25ldC90ZnRwLmMgKGFjayk6IEZpeCBlbmRpYW5uZXNzIHByb2JsZW0uCisrCSh0ZnRwX3JlY2VpdmUpOiBMaWtld2lzZS4KKysJUmVwb3J0ZWQgYnk6IE1pY2hhZWwgRGF2aWRzYXZlci4KKysKKyAyMDEyLTA2LTI3ICBWbGFkaW1pciBTZXJiaW5lbmtvICA8cGhjb2RlckBnbWFpbC5jb20+CisgCisgCSogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMi4wMC4KK2RpZmYgLS1naXQgYS9ncnViLWNvcmUvbmV0L3RmdHAuYyBiL2dydWItY29yZS9uZXQvdGZ0cC5jCitpbmRleCA5YzcwZWZiLi5kMGYzOWVhIDEwMDY0NAorLS0tIGEvZ3J1Yi1jb3JlL25ldC90ZnRwLmMKKysrKyBiL2dydWItY29yZS9uZXQvdGZ0cC5jCitAQCAtMTQzLDcgKzE0Myw3IEBAIGFjayAodGZ0cF9kYXRhX3QgZGF0YSwgZ3J1Yl91aW50MTZfdCBibG9jaykKKyAKKyAgIHRmdHBoX2FjayA9IChzdHJ1Y3QgdGZ0cGhkciAqKSBuYl9hY2suZGF0YTsKKyAgIHRmdHBoX2Fjay0+b3Bjb2RlID0gZ3J1Yl9jcHVfdG9fYmUxNiAoVEZUUF9BQ0spOworLSAgdGZ0cGhfYWNrLT51LmFjay5ibG9jayA9IGJsb2NrOworKyAgdGZ0cGhfYWNrLT51LmFjay5ibG9jayA9IGdydWJfY3B1X3RvX2JlMTYgKGJsb2NrKTsKKyAKKyAgIGVyciA9IGdydWJfbmV0X3NlbmRfdWRwX3BhY2tldCAoZGF0YS0+c29jaywgJm5iX2Fjayk7CisgICBpZiAoZXJyKQorQEAgLTIyNSw3ICsyMjUsNyBAQCB0ZnRwX3JlY2VpdmUgKGdydWJfbmV0X3VkcF9zb2NrZXRfdCBzb2NrIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKyAJICAgIGdydWJfcHJpb3JpdHlfcXVldWVfcG9wIChkYXRhLT5wcSk7CisgCisgCSAgICBpZiAoZmlsZS0+ZGV2aWNlLT5uZXQtPnBhY2tzLmNvdW50IDwgNTApCistCSAgICAgIGVyciA9IGFjayAoZGF0YSwgdGZ0cGgtPnUuZGF0YS5ibG9jayk7CisrCSAgICAgIGVyciA9IGFjayAoZGF0YSwgZGF0YS0+YmxvY2sgKyAxKTsKKyAJICAgIGVsc2UKKyAJICAgICAgeworIAkJZmlsZS0+ZGV2aWNlLT5uZXQtPnN0YWxsID0gMTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2ZpeC1pc3N1ZS13aXRoLWZsZXgtMi41LjM3LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZml4LWlzc3VlLXdpdGgtZmxleC0yLjUuMzcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFhZTJmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2ZpeC1pc3N1ZS13aXRoLWZsZXgtMi41LjM3LnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworVGhpcyBmaXhlcyBjb21waWxhdGlvbiBpc3N1ZXMgd2hlbiB1c2luZyBmbGV4LTIuNS4zNy4gSXQgd2FzIHRha2VuIGZyb20gdXBzdHJlYW0uCisKK09yaWdpbmFsIGF1dGhvciBpczogVmxhZGltaXIgU2VyYmluZW5rbyAgPHBoY29kZXJAZ21haWwuY29tPgorCitTaWduZWQtb2ZmLWJ5OiBMYXVyZW50aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBpbnRlbC5jb20+CisKK0luZGV4OiBncnViLTIuMDAvZ3J1Yi1jb3JlL3NjcmlwdC95eWxleC5sCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3J1Yi0yLjAwLm9yaWcvZ3J1Yi1jb3JlL3NjcmlwdC95eWxleC5sCTIwMTItMDYtMDggMjM6MjQ6MTUuMDAwMDAwMDAwICswMzAwCisrKysgZ3J1Yi0yLjAwL2dydWItY29yZS9zY3JpcHQveXlsZXgubAkyMDEzLTA3LTMxIDE0OjM0OjQwLjcwODEwMDk4MiArMDMwMAorQEAgLTI5LDYgKzI5LDggQEAKKyAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1wcm90b3R5cGVzIgorICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyIKKyAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5zYWZlLWxvb3Atb3B0aW1pemF0aW9ucyIKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLWZ1bmN0aW9uIgorKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdzaWduLWNvbXBhcmUiCisgCisgI2RlZmluZSB5eWZyZWUgICAgZ3J1Yl9sZXhlcl95eWZyZWUKKyAjZGVmaW5lIHl5YWxsb2MgICBncnViX2xleGVyX3l5YWxsb2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1hZGQtb2Uta2VybmVsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi0yLjAwLWFkZC1vZS1rZXJuZWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI4OTE2YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1hZGQtb2Uta2VybmVsLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK0Zyb20gN2FiNTc2YTdjNjE0MDZiN2U2MzczOWQxYjExMDE3YWUzMzZiOTAwOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAzIE1hciAyMDE0IDAzOjM0OjQ4IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGdydWIuZC8xMF9saW51eC5pbjogYWRkIG9lJ3Mga2VybmVsIG5hbWUKKworT3VyIGtlcm5lbCdzIG5hbWUgaXMgYnpJbWFnZSwgd2UgbmVlZCBhZGQgaXQgdG8gZ3J1Yi5kLzEwX2xpbnV4LmluIHNvCit0aGF0IHRoZSBncnViLW1rY29uZmlnIGFuZCBncnViLWluc3RhbGwgY2FuIHdvcmsgY29ycmVjdGx5LgorCitXZSBvbmx5IG5lZWQgYWRkIHRoZSBiekltYWdlIHRvIHV0aWwvZ3J1Yi5kLzEwX2xpbnV4LmluLCBidXQgYWxzbyBhZGQgaXQKK3RvIHV0aWwvZ3J1Yi5kLzIwX2xpbnV4X3hlbi5pbiB0byBrZWVwIGNvbXBhdGliaWxpdHkuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgdXRpbC9ncnViLmQvMTBfbGludXguaW4gICAgIHwgICAgNCArKy0tCisgdXRpbC9ncnViLmQvMjBfbGludXhfeGVuLmluIHwgICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdXRpbC9ncnViLmQvMTBfbGludXguaW4gYi91dGlsL2dydWIuZC8xMF9saW51eC5pbgoraW5kZXggMTQ0MDJlOC4uYzU4ZjQxNyAxMDA2NDQKKy0tLSBhL3V0aWwvZ3J1Yi5kLzEwX2xpbnV4LmluCisrKysgYi91dGlsL2dydWIuZC8xMF9saW51eC5pbgorQEAgLTE1MywxMSArMTUzLDExIEBAIEVPRgorIG1hY2hpbmU9YHVuYW1lIC1tYAorIGNhc2UgIngkbWFjaGluZSIgaW4KKyAgICAgeGk/ODYgfCB4eDg2XzY0KQorLQlsaXN0PWBmb3IgaSBpbiAvYm9vdC92bWxpbnV6LSogL3ZtbGludXotKiAvYm9vdC9rZXJuZWwtKiA7IGRvCisrCWxpc3Q9YGZvciBpIGluIC9ib290L2J6SW1hZ2UtKiAvYnpJbWFnZS0qIC9ib290L3ZtbGludXotKiAvdm1saW51ei0qIC9ib290L2tlcm5lbC0qIDsgZG8KKyAgICAgICAgICAgICAgICAgICBpZiBncnViX2ZpbGVfaXNfbm90X2dhcmJhZ2UgIiRpIiA7IHRoZW4gZWNobyAtbiAiJGkgIiA7IGZpCisgICAgICAgICAgICAgICBkb25lYCA7OworICAgICAqKSAKKy0JbGlzdD1gZm9yIGkgaW4gL2Jvb3Qvdm1saW51ei0qIC9ib290L3ZtbGludXgtKiAvdm1saW51ei0qIC92bWxpbnV4LSogL2Jvb3Qva2VybmVsLSogOyBkbworKwlsaXN0PWBmb3IgaSBpbiAvYm9vdC9iekltYWdlLSogL2Jvb3Qvdm1saW51ei0qIC9ib290L3ZtbGludXgtKiAvYnpJbWFnZS0qIC92bWxpbnV6LSogL3ZtbGludXgtKiAvYm9vdC9rZXJuZWwtKiA7IGRvCisgICAgICAgICAgICAgICAgICAgaWYgZ3J1Yl9maWxlX2lzX25vdF9nYXJiYWdlICIkaSIgOyB0aGVuIGVjaG8gLW4gIiRpICIgOyBmaQorIAkgICAgIGRvbmVgIDs7CisgZXNhYworZGlmZiAtLWdpdCBhL3V0aWwvZ3J1Yi5kLzIwX2xpbnV4X3hlbi5pbiBiL3V0aWwvZ3J1Yi5kLzIwX2xpbnV4X3hlbi5pbgoraW5kZXggMWQ5NDUwMi4uYjJkZWNmMyAxMDA2NDQKKy0tLSBhL3V0aWwvZ3J1Yi5kLzIwX2xpbnV4X3hlbi5pbgorKysrIGIvdXRpbC9ncnViLmQvMjBfbGludXhfeGVuLmluCitAQCAtMTM4LDcgKzEzOCw3IEBAIEVPRgorIEVPRgorIH0KKyAKKy1saW51eF9saXN0PWBmb3IgaSBpbiAvYm9vdC92bWxpbnVbeHpdLSogL3ZtbGludVt4el0tKiAvYm9vdC9rZXJuZWwtKjsgZG8KKytsaW51eF9saXN0PWBmb3IgaSBpbiAvYm9vdC9iekltYWdlW3h6XS0qIC9iekltYWdlW3h6XS0qIC9ib290L3ZtbGludVt4el0tKiAvdm1saW51W3h6XS0qIC9ib290L2tlcm5lbC0qOyBkbworICAgICBpZiBncnViX2ZpbGVfaXNfbm90X2dhcmJhZ2UgIiRpIjsgdGhlbgorICAgICAJYmFzZW5hbWU9JChiYXNlbmFtZSAkaSkKKyAJdmVyc2lvbj0kKGVjaG8gJGJhc2VuYW1lIHwgc2VkIC1lICJzLF5bXjAtOV0qLSwsZyIpCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1maXgtZW5hYmxlX2V4ZWN1dGVfc3RhY2stY2hlY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtZml4LWVuYWJsZV9leGVjdXRlX3N0YWNrLWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZWY0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtZml4LWVuYWJsZV9leGVjdXRlX3N0YWNrLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisKK1RoaXMgcGF0Y2ggYXZvaWRzIHRoaXMgY29uZmlndXJlIGZhaWx1cmUKKworY29uZmlndXJlOjIwMzA2OiBjaGVja2luZyB3aGV0aGVyIGBjY2FjaGUgaTU4Ni1wb2t5LWxpbnV4LWdjYyAgLW0zMiAgICAtbWFyY2g9Y29yZTIgLW1zc2UzIC1tdHVuZT1nZW5lcmljIC1tZnBtYXRoPXNzZSAtLXN5c3Jvb3Q9L2J1aWxkZGlzay9idWlsZC9idWlsZDAvdG1wL3N5c3Jvb3RzL2VtZW5sb3cnIGdlbmVyYXRlcyBjYWxscyB0byBgX19lbmFibGVfZXhlY3V0ZV9zdGFjaygpJworY29uZmlndXJlOjIwMzIwOiBjY2FjaGUgaTU4Ni1wb2t5LWxpbnV4LWdjYyAgLW0zMiAgICAtbWFyY2g9Y29yZTIgLW1zc2UzIC1tdHVuZT1nZW5lcmljIC1tZnBtYXRoPXNzZSAtLXN5c3Jvb3Q9L2J1aWxkZGlzay9idWlsZC9idWlsZDAvdG1wL3N5c3Jvb3RzL2VtZW5sb3cgLU8yIC1waXBlIC1nIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAtV2FsbCAtVyAtV3NoYWRvdyAtV3BvaW50ZXItYXJpdGggLVdtaXNzaW5nLXByb3RvdHlwZXMgLVd1bmRlZiAtV3N0cmljdC1wcm90b3R5cGVzIC1nIC1mYWxpZ24tanVtcHM9MSAtZmFsaWduLWxvb3BzPTEgLWZhbGlnbi1mdW5jdGlvbnM9MSAtbW5vLW1teCAtbW5vLXNzZSAtbW5vLXNzZTIgLW1uby0zZG5vdyAtbWZwbWF0aD0zODcgLWZuby1kd2FyZjItY2ZpLWFzbSAtbTMyIC1mbm8tc3RhY2stcHJvdGVjdG9yIC1tbm8tc3RhY2stYXJnLXByb2JlIC1XZXJyb3IgLVduby10cmFtcG9saW5lcyAtZmFsaWduLWxvb3BzPTEgLVMgY29uZnRlc3QuYworY29uZnRlc3QuYzozMDg6NjogZXJyb3I6IG5vIHByZXZpb3VzIHByb3RvdHlwZSBmb3IgJ2cnIFstV2Vycm9yPW1pc3NpbmctcHJvdG90eXBlc10KK2NjMTogYWxsIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCitjb25maWd1cmU6MjAzMjM6ICQ/ID0gMQorY29uZmlndXJlOjIwMzI3OiBlcnJvcjogY2NhY2hlIGk1ODYtcG9reS1saW51eC1nY2MgIC1tMzIgICAgLW1hcmNoPWNvcmUyIC1tc3NlMyAtbXR1bmU9Z2VuZXJpYyAtbWZwbWF0aD1zc2UgLS1zeXNyb290PS9idWlsZGRpc2svYnVpbGQvYnVpbGQwL3RtcC9zeXNyb290cy9lbWVubG93IGZhaWxlZCB0byBwcm9kdWNlIGFzc2VtYmx5IGNvZGUKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDQvMTMKKworSW5kZXg6IGdydWItMi4wMC9hY2luY2x1ZGUubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncnViLTIuMDAub3JpZy9hY2luY2x1ZGUubTQKKysrKyBncnViLTIuMDAvYWNpbmNsdWRlLm00CitAQCAtMzE3LDYgKzMxNyw3IEBAIGRubCBDaGVjayBpZiB0aGUgQyBjb21waWxlciBnZW5lcmF0ZXMgY2EKKyBBQ19ERUZVTihbZ3J1Yl9DSEVDS19FTkFCTEVfRVhFQ1VURV9TVEFDS10sWworIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBgJENDJyBnZW5lcmF0ZXMgY2FsbHMgdG8gYF9fZW5hYmxlX2V4ZWN1dGVfc3RhY2soKSddKQorIEFDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfU09VUkNFKFtbCisrdm9pZCBnIChpbnQpOworIHZvaWQgZiAoaW50ICgqcCkgKHZvaWQpKTsKKyB2b2lkIGcgKGludCBpKQorIHsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1mcG1hdGgtc3NlLTM4Ny1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtZnBtYXRoLXNzZS0zODctZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NTdmMTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtZnBtYXRoLXNzZS0zODctZml4LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1Vwc3RyZWFtLVN0YXR1czogcGVuZGluZworCitUaGlzIHBhdGNoIGZpeGVzIHRoaXMgY29uZmlndXJlIGlzc3VlIGZvciBncnViIHdoZW4gLW1mcG1hdGg9c3NlIGlzIGluIHRoZSBnY2MgcGFyYW1ldGVycy4KKworY29uZmlndXJlOjIwNTc0OiBpNTg2LXBva3ktbGludXgtZ2NjICAtbTMyICAgIC1tYXJjaD1jb3JlMiAtbXNzZTMgLW10dW5lPWdlbmVyaWMgLW1mcG1hdGg9c3NlIC0tc3lzcm9vdD0vdXNyL2xvY2FsL2Rldi95b2N0by9ncnVidGVzdDIvYnVpbGQvdG1wL3N5c3Jvb3RzL2VtZW5sb3cgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1nIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAtV2FsbCAtVyAtV3NoYWRvdyAtV3BvaW50ZXItYXJpdGggLVdtaXNzaW5nLXByb3RvdHlwZXMgLVd1bmRlZiAtV3N0cmljdC1wcm90b3R5cGVzIC1nIC1mYWxpZ24tanVtcHM9MSAtZmFsaWduLWxvb3BzPTEgLWZhbGlnbi1mdW5jdGlvbnM9MSAtbW5vLW1teCAtbW5vLXNzZSAtbW5vLXNzZTIgLW1uby0zZG5vdyAtZm5vLWR3YXJmMi1jZmktYXNtIC1tMzIgLWZuby1zdGFjay1wcm90ZWN0b3IgLW1uby1zdGFjay1hcmctcHJvYmUgLVdlcnJvciAtbm9zdGRsaWIgLVdsLC0tZGVmc3ltLF9fX21haW49MHg4MTAwICAtV2FsbCAtVyAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAtSSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlICAtREdSVUJfTUFDSElORV9QQ0JJT1M9MSAtREdSVUJfTUFDSElORT1JMzg2X1BDIC1XbCwtTzEgLVdsLC0taGFzaC1zdHlsZT1nbnUgLVdsLC0tYXMtbmVlZGVkIGNvbmZ0ZXN0LmMgID4mNQorY29uZnRlc3QuYzoxOjA6IGVycm9yOiBTU0UgaW5zdHJ1Y3Rpb24gc2V0IGRpc2FibGVkLCB1c2luZyAzODcgYXJpdGhtZXRpY3MgWy1XZXJyb3JdCitjYzE6IGFsbCB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycworCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNC8xMworCitJbmRleDogZ3J1Yi0xLjk5L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdydWItMS45OS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdydWItMS45OS9jb25maWd1cmUuYWMKK0BAIC0zNzgsNyArMzc4LDcgQEAgaWYgdGVzdCAieCR0YXJnZXRfY3B1IiA9IHhpMzg2OyB0aGVuCisgCisgICAjIFNvbWUgdG9vbGNoYWlucyBlbmFibGUgdGhlc2UgZmVhdHVyZXMgYnkgZGVmYXVsdCwgYnV0IHRoZXkgbmVlZAorICAgIyByZWdpc3RlcnMgdGhhdCBhcmVuJ3Qgc2V0IHVwIHByb3Blcmx5IGluIEdSVUIuCistICBUQVJHRVRfQ0ZMQUdTPSIkVEFSR0VUX0NGTEFHUyAtbW5vLW1teCAtbW5vLXNzZSAtbW5vLXNzZTIgLW1uby0zZG5vdyIKKysgIFRBUkdFVF9DRkxBR1M9IiRUQVJHRVRfQ0ZMQUdTIC1tbm8tbW14IC1tbm8tc3NlIC1tbm8tc3NlMiAtbW5vLTNkbm93IC1tZnBtYXRoPTM4NyIKKyBmaQorIAorICMgQnkgZGVmYXVsdCwgR0NDIDQuNCBnZW5lcmF0ZXMgLmVoX2ZyYW1lIHNlY3Rpb25zIGNvbnRhaW5pbmcgdW53aW5kCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWVmaS1hbGxvdy1hLWNvbXBpbGF0aW9uLXdpdGhvdXQtbWNtb2RlbC1sYXJnZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItZWZpLWFsbG93LWEtY29tcGlsYXRpb24td2l0aG91dC1tY21vZGVsLWxhcmdlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ODhmY2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWVmaS1hbGxvdy1hLWNvbXBpbGF0aW9uLXdpdGhvdXQtbWNtb2RlbC1sYXJnZS5wYXRjaApAQCAtMCwwICsxLDEzMSBAQAorQWxsb3cgYSBjb21waWxhdGlvbiB3aXRob3V0IC1tY21vZGVsPWxhcmdlCisKK0l0J3MgcHJvdmlkZWQgYnkgVmxhZGltaXIgU2VyYmluZW5rbywgYW5kIGhlIHdpbGwgY29tbWl0CitpdCB1cHN0cmVhbSBzbyBpdCBzaG91bGQgYmUgYmFja3BvcnQgcGF0Y2guCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKworLS0KK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDlmOGZiOGEuLjJjNWU2ZWQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTcyMyw5ICs3MjMsNyBAQCBpZiB0ZXN0ICIkdGFyZ2V0X2NwdSIgPSB4ODZfNjQ7IHRoZW4KKyAJCSAgICAgIFtncnViX2N2X2NjX21jbW9kZWw9eWVzXSwKKyAJCSAgICAgIFtncnViX2N2X2NjX21jbW9kZWw9bm9dKQorICAgXSkKKy0gIGlmIHRlc3QgIngkZ3J1Yl9jdl9jY19tY21vZGVsIiA9IHhubzsgdGhlbgorLSAgICBBQ19NU0dfRVJST1IoWy1tY21vZGVsPWxhcmdlIG5vdCBzdXBwb3J0ZWQuIFVwZ3JhZGUgeW91ciBnY2MuXSkKKy0gIGVsc2UKKysgIGlmIHRlc3QgIngkZ3J1Yl9jdl9jY19tY21vZGVsIiA9IHh5ZXM7IHRoZW4KKyAgICAgVEFSR0VUX0NGTEFHUz0iJFRBUkdFVF9DRkxBR1MgLW1jbW9kZWw9bGFyZ2UiCisgICBmaQorIGZpCitkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2tlcm4vZWZpL21tLmMgYi9ncnViLWNvcmUva2Vybi9lZmkvbW0uYworaW5kZXggMTQwOWI1ZC4uNmU5ZGFjZSAxMDA2NDQKKy0tLSBhL2dydWItY29yZS9rZXJuL2VmaS9tbS5jCisrKysgYi9ncnViLWNvcmUva2Vybi9lZmkvbW0uYworQEAgLTMyLDYgKzMyLDEyIEBACisgI2RlZmluZSBCWVRFU19UT19QQUdFUyhieXRlcykJKCgoYnl0ZXMpICsgMHhmZmYpID4+IDEyKQorICNkZWZpbmUgUEFHRVNfVE9fQllURVMocGFnZXMpCSgocGFnZXMpIDw8IDEyKQorCisrI2lmIGRlZmluZWQgKF9fY29kZV9tb2RlbF9sYXJnZV9fKSB8fCAhZGVmaW5lZCAoX194ODZfNjRfXykKKysjZGVmaW5lIE1BWF9VU0FCTEVfQUREUkVTUyAweGZmZmZmZmZmCisrI2Vsc2UKKysjZGVmaW5lIE1BWF9VU0FCTEVfQUREUkVTUyAweDdmZmZmZmZmCisrI2VuZGlmCisrCisgLyogVGhlIHNpemUgb2YgYSBtZW1vcnkgbWFwIG9idGFpbmVkIGZyb20gdGhlIGZpcm13YXJlLiBUaGlzIG11c3QgYmUKKyAgICBhIG11bHRpcGxpZXIgb2YgNEtCLiAgKi8KKyAjZGVmaW5lIE1FTU9SWV9NQVBfU0laRQkweDMwMDAKK0BAIC01OCw3ICs2NCw3IEBAIGdydWJfZWZpX2FsbG9jYXRlX3BhZ2VzIChncnViX2VmaV9waHlzaWNhbF9hZGRyZXNzX3QgYWRkcmVzcywKKworICNpZiAxCisgICAvKiBMaW1pdCB0aGUgbWVtb3J5IGFjY2VzcyB0byBsZXNzIHRoYW4gNEdCIGZvciAzMi1iaXQgcGxhdGZvcm1zLiAgKi8KKy0gIGlmIChhZGRyZXNzID4gMHhmZmZmZmZmZikKKysgIGlmIChhZGRyZXNzID4gTUFYX1VTQUJMRV9BRERSRVNTKQorICAgICByZXR1cm4gMDsKKyAjZW5kaWYKKworQEAgLTY2LDcgKzcyLDcgQEAgZ3J1Yl9lZmlfYWxsb2NhdGVfcGFnZXMgKGdydWJfZWZpX3BoeXNpY2FsX2FkZHJlc3NfdCBhZGRyZXNzLAorICAgaWYgKGFkZHJlc3MgPT0gMCkKKyAgICAgeworICAgICAgIHR5cGUgPSBHUlVCX0VGSV9BTExPQ0FURV9NQVhfQUREUkVTUzsKKy0gICAgICBhZGRyZXNzID0gMHhmZmZmZmZmZjsKKysgICAgICBhZGRyZXNzID0gTUFYX1VTQUJMRV9BRERSRVNTOworICAgICB9CisgICBlbHNlCisgICAgIHR5cGUgPSBHUlVCX0VGSV9BTExPQ0FURV9BRERSRVNTOworQEAgLTg2LDcgKzkyLDcgQEAgZ3J1Yl9lZmlfYWxsb2NhdGVfcGFnZXMgKGdydWJfZWZpX3BoeXNpY2FsX2FkZHJlc3NfdCBhZGRyZXNzLAorICAgICB7CisgICAgICAgLyogVWdnaCwgdGhlIGFkZHJlc3MgMCB3YXMgYWxsb2NhdGVkLi4uIFRoaXMgaXMgdG9vIGFubm95aW5nLAorIAkgc28gcmVhbGxvY2F0ZSBhbm90aGVyIG9uZS4gICovCistICAgICAgYWRkcmVzcyA9IDB4ZmZmZmZmZmY7CisrICAgICAgYWRkcmVzcyA9IE1BWF9VU0FCTEVfQUREUkVTUzsKKyAgICAgICBzdGF0dXMgPSBlZmlfY2FsbF80IChiLT5hbGxvY2F0ZV9wYWdlcywgdHlwZSwgR1JVQl9FRklfTE9BREVSX0RBVEEsIHBhZ2VzLCAmYWRkcmVzcyk7CisgICAgICAgZ3J1Yl9lZmlfZnJlZV9wYWdlcyAoMCwgcGFnZXMpOworICAgICAgIGlmIChzdGF0dXMgIT0gR1JVQl9FRklfU1VDQ0VTUykKK0BAIC0zMTksNyArMzI1LDcgQEAgZmlsdGVyX21lbW9yeV9tYXAgKGdydWJfZWZpX21lbW9yeV9kZXNjcmlwdG9yX3QgKm1lbW9yeV9tYXAsCisgICAgIHsKKyAgICAgICBpZiAoZGVzYy0+dHlwZSA9PSBHUlVCX0VGSV9DT05WRU5USU9OQUxfTUVNT1JZCisgI2lmIDEKKy0JICAmJiBkZXNjLT5waHlzaWNhbF9zdGFydCA8PSAweGZmZmZmZmZmCisrCSAgJiYgZGVzYy0+cGh5c2ljYWxfc3RhcnQgPD0gTUFYX1VTQUJMRV9BRERSRVNTCisgI2VuZGlmCisgCSAgJiYgZGVzYy0+cGh5c2ljYWxfc3RhcnQgKyBQQUdFU19UT19CWVRFUyAoZGVzYy0+bnVtX3BhZ2VzKSA+IDB4MTAwMDAwCisgCSAgJiYgZGVzYy0+bnVtX3BhZ2VzICE9IDApCitAQCAtMzM3LDkgKzM0Myw5IEBAIGZpbHRlcl9tZW1vcnlfbWFwIChncnViX2VmaV9tZW1vcnlfZGVzY3JpcHRvcl90ICptZW1vcnlfbWFwLAorICNpZiAxCisgCSAgaWYgKEJZVEVTX1RPX1BBR0VTIChmaWx0ZXJlZF9kZXNjLT5waHlzaWNhbF9zdGFydCkKKyAJICAgICAgKyBmaWx0ZXJlZF9kZXNjLT5udW1fcGFnZXMKKy0JICAgICAgPiBCWVRFU19UT19QQUdFUyAoMHgxMDAwMDAwMDBMTCkpCisrCSAgICAgID4gQllURVNfVE9fUEFHRVMgKE1BWF9VU0FCTEVfQUREUkVTUysxTEwpKQorIAkgICAgZmlsdGVyZWRfZGVzYy0+bnVtX3BhZ2VzCistCSAgICAgID0gKEJZVEVTX1RPX1BBR0VTICgweDEwMDAwMDAwMExMKQorKwkgICAgICA9IChCWVRFU19UT19QQUdFUyAoTUFYX1VTQUJMRV9BRERSRVNTKzFMTCkKKyAJCSAtIEJZVEVTX1RPX1BBR0VTIChmaWx0ZXJlZF9kZXNjLT5waHlzaWNhbF9zdGFydCkpOworICNlbmRpZgorCitkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2tlcm4veDg2XzY0L2RsLmMgYi9ncnViLWNvcmUva2Vybi94ODZfNjQvZGwuYworaW5kZXggNjVmMDllZi4uMTdjMTIxNSAxMDA2NDQKKy0tLSBhL2dydWItY29yZS9rZXJuL3g4Nl82NC9kbC5jCisrKysgYi9ncnViLWNvcmUva2Vybi94ODZfNjQvZGwuYworQEAgLTEwMCwxNCArMTAwLDMyIEBAIGdydWJfYXJjaF9kbF9yZWxvY2F0ZV9zeW1ib2xzIChncnViX2RsX3QgbW9kLCB2b2lkICplaGRyKQorIAkJICAgIGJyZWFrOworCisgCQkgIGNhc2UgUl9YODZfNjRfUEMzMjoKKy0JCSAgICAqYWRkcjMyICs9IHJlbC0+cl9hZGRlbmQgKyBzeW0tPnN0X3ZhbHVlIC0KKy0JCSAgICAgICAgICAgICAgKEVsZjY0X1h3b3JkKSBzZWctPmFkZHIgLSByZWwtPnJfb2Zmc2V0OworKwkJICAgIHsKKysJCSAgICAgIGdydWJfaW50NjRfdCB2YWx1ZTsKKysJCSAgICAgIHZhbHVlID0gKChncnViX2ludDMyX3QpICphZGRyMzIpICsgcmVsLT5yX2FkZGVuZCArIHN5bS0+c3RfdmFsdWUgLQorKwkJCShFbGY2NF9Yd29yZCkgc2VnLT5hZGRyIC0gcmVsLT5yX29mZnNldDsKKysJCSAgICAgIGlmICh2YWx1ZSAhPSAoZ3J1Yl9pbnQzMl90KSB2YWx1ZSkKKysJCQlyZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX01PRFVMRSwgInJlbG9jYXRpb24gb3V0IG9mIHJhbmdlIik7CisrCQkgICAgICAqYWRkcjMyID0gdmFsdWU7CisrCQkgICAgfQorIAkJICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgY2FzZSBSX1g4Nl82NF8zMjoKKysJCSAgICB7CisrCQkgICAgICBncnViX3VpbnQ2NF90IHZhbHVlID0gKmFkZHIzMiArIHJlbC0+cl9hZGRlbmQgKyBzeW0tPnN0X3ZhbHVlOworKwkJICAgICAgaWYgKHZhbHVlICE9IChncnViX3VpbnQzMl90KSB2YWx1ZSkKKysJCQlyZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX01PRFVMRSwgInJlbG9jYXRpb24gb3V0IG9mIHJhbmdlIik7CisrCQkgICAgICAqYWRkcjMyID0gdmFsdWU7CisrCQkgICAgfQorKwkJICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgIGNhc2UgUl9YODZfNjRfMzJTOgorLSAgICAgICAgICAgICAgICAgICAgKmFkZHIzMiArPSByZWwtPnJfYWRkZW5kICsgc3ltLT5zdF92YWx1ZTsKKy0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworKwkJICAgIHsKKysJCSAgICAgIGdydWJfaW50NjRfdCB2YWx1ZSA9ICgoZ3J1Yl9pbnQzMl90KSAqYWRkcjMyKSArIHJlbC0+cl9hZGRlbmQgKyBzeW0tPnN0X3ZhbHVlOworKwkJICAgICAgaWYgKHZhbHVlICE9IChncnViX2ludDMyX3QpIHZhbHVlKQorKwkJCXJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfTU9EVUxFLCAicmVsb2NhdGlvbiBvdXQgb2YgcmFuZ2UiKTsKKysJCSAgICAgICphZGRyMzIgPSB2YWx1ZTsKKysJCSAgICB9CisrCQkgICAgYnJlYWs7CisKKyAJCSAgZGVmYXVsdDoKKyAJCSAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfTk9UX0lNUExFTUVOVEVEX1lFVCwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItZWZpLWZpeC13aXRoLWdsaWJjLTIuMjAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWVmaS1maXgtd2l0aC1nbGliYy0yLjIwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMTI2MjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWVmaS1maXgtd2l0aC1nbGliYy0yLjIwLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gZWI2MzY4ZTY1ZjY5ODhlZWJhZDI2Y2ViZGVjMDU3Zjc5N2JjZWI0MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCA5IFNlcCAyMDE0IDAwOjAyOjMwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBidWlsZCB3aXRoIGdsaWJjIDIuMjAKKworKiBncnViLWNvcmUva2Vybi9lbXUvaG9zdGZzLmM6IHNxdWFoZXMgYmVsb3cgd2FybmluZworICB3YXJuaW5nOiAjd2FybmluZyAiX0JTRF9TT1VSQ0UgYW5kIF9TVklEX1NPVVJDRSBhcmUgZGVwcmVjYXRlZCwgdXNlIF9ERUZBVUxUX1NPVVJDRSIKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jIGIvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jCitpbmRleCAzY2IwODljLi5hNTFlZTMyIDEwMDY0NAorLS0tIGEvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jCisrKysgYi9ncnViLWNvcmUva2Vybi9lbXUvaG9zdGZzLmMKK0BAIC0xNiw3ICsxNiw3IEBACisgICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICogIGFsb25nIHdpdGggR1JVQi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAgKi8KKy0jZGVmaW5lIF9CU0RfU09VUkNFCisrI2RlZmluZSBfREVGQVVMVF9TT1VSQ0UKKyAjaW5jbHVkZSA8Z3J1Yi9mcy5oPgorICNpbmNsdWRlIDxncnViL2ZpbGUuaD4KKyAjaW5jbHVkZSA8Z3J1Yi9kaXNrLmg+CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi1pbnN0YWxsLmluLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi1pbnN0YWxsLmluLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNjk1MWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWluc3RhbGwuaW4ucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworT3VyIHVzZSBvZiBncnViLWluc3RhbGwgZG9lc24ndCByZXF1aXJlIHRoZSAteCBvcHRpb24sIHNvIHdlIHNob3VsZCBiZQorYmUgYWJsZSBtYWtlIHVzZSBvZiBncmVwIHZlcnNpb25zIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpdC4KKworU2lnbmVkLW9mZi1ieTogVG9tIFphbnVzc2kgPHRvbS56YW51c3NpQGludGVsLmNvbT4KKworSW5kZXg6IGdydWItMS45OS91dGlsL2dydWItaW5zdGFsbC5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdydWItMS45OS5vcmlnL3V0aWwvZ3J1Yi1pbnN0YWxsLmluCTIwMTEtMDktMDkgMjI6Mzc6MjAuMDkzOTA2Njc5IC0wNTAwCisrKysgZ3J1Yi0xLjk5L3V0aWwvZ3J1Yi1pbnN0YWxsLmluCTIwMTEtMDktMDkgMjI6Mzc6MzAuODU0NzM3ODgyIC0wNTAwCitAQCAtNTEwLDcgKzUxMCw3IEBACisgCisgaWYgWyAieCR7ZGV2YWJzdHJhY3Rpb25fbW9kdWxlfSIgPSAieCIgXSA7IHRoZW4KKyAgICAgaWYgWyB4IiR7aW5zdGFsbF9kZXZpY2V9IiAhPSB4IF07IHRoZW4KKy0gICAgICBpZiBlY2hvICIke2luc3RhbGxfZGV2aWNlfSIgfCBncmVwIC1xeCAiKC4qKSIgOyB0aGVuCisrICAgICAgaWYgZWNobyAiJHtpbnN0YWxsX2RldmljZX0iIHwgZ3JlcCAtcSAiKC4qKSIgOyB0aGVuCisgICAgICAgICBpbnN0YWxsX2RyaXZlPSIke2luc3RhbGxfZGV2aWNlfSIKKyAgICAgICBlbHNlCisgICAgICAgICBpbnN0YWxsX2RyaXZlPSJgIiRncnViX3Byb2JlIiAtLWRldmljZS1tYXA9IiR7ZGV2aWNlX21hcH0iIC0tdGFyZ2V0PWRyaXZlIC0tZGV2aWNlICIke2luc3RhbGxfZGV2aWNlfSJgIiB8fCBleGl0IDEKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItbm8tdW51c2VkLXJlc3VsdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItbm8tdW51c2VkLXJlc3VsdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2JkMDgzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi1uby11bnVzZWQtcmVzdWx0LnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1NpZ25lZC1vZmYtYnk6IFJhZHUgTW9pc2FuIDxyYWR1Lm1vaXNhbkBpbnRlbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSSBoYWQgYW4gZXJyb3IgYmVjYXVzZSBvZiBhbiB1bnVzZWQgcmV0dXJuIHZhbHVlIGZvciByZWFkKCkuCitJIGFkZGVkIC1Xbm8tdW51c2VkLXJlc3VsdC4KKworSW5kZXg6IGdydWItMi4wMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncnViLTIuMDAub3JpZy9jb25maWd1cmUuYWMJMjAxMi0wOC0xMyAxNjozMjozMy4wMDAwMDAwMDAgKzAzMDAKKysrKyBncnViLTIuMDAvY29uZmlndXJlLmFjCTIwMTItMDgtMTMgMTY6Mzg6MjIuMDAwMDAwMDAwICswMzAwCitAQCAtMzk0LDcgKzM5NCw3IEBACisgTElCUz0iIgorIAorICMgZGVidWcgZmxhZ3MuCistV0FSTl9GTEFHUz0iLVdhbGwgLVcgLVdzaGFkb3cgLVdvbGQtc3R5bGUtZGVmaW5pdGlvbiAtV3BvaW50ZXItYXJpdGggLVd1bmRlZiAtV2V4dHJhIC1XYWRkcmVzcyAtV2F0dHJpYnV0ZXMgLVdjYXN0LWFsaWduIC1XY2hhci1zdWJzY3JpcHRzIC1XY29tbWVudCAtV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIC1XZGlzYWJsZWQtb3B0aW1pemF0aW9uIC1XZGl2LWJ5LXplcm8gLVdlbXB0eS1ib2R5IC1XZW5kaWYtbGFiZWxzIC1XZmxvYXQtZXF1YWwgLVdmb3JtYXQtZXh0cmEtYXJncyAtV2Zvcm1hdC1zZWN1cml0eSAtV2Zvcm1hdC15MmsgLVdpbXBsaWNpdCAtV2ltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uIC1XaW1wbGljaXQtaW50IC1XaW5pdC1zZWxmIC1XaW50LXRvLXBvaW50ZXItY2FzdCAtV2ludmFsaWQtcGNoIC1XbWFpbiAtV21pc3NpbmctYnJhY2VzIC1XbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMgLVdtaXNzaW5nLWZvcm1hdC1hdHRyaWJ1dGUgLVdtaXNzaW5nLW5vcmV0dXJuIC1XbXVsdGljaGFyIC1Xbm9ubnVsbCAtV292ZXJmbG93IC1XcGFyZW50aGVzZXMgLVdwb2ludGVyLWFyaXRoIC1XcG9pbnRlci10by1pbnQtY2FzdCAtV3JldHVybi10eXBlIC1Xc2VxdWVuY2UtcG9pbnQgLVdzaGFkb3cgLVdzaWduLWNvbXBhcmUgLVdzdHJpY3QtYWxpYXNpbmcgLVdzd2l0Y2ggLVd0cmlncmFwaHMgLVd1bmRlZiAtV3Vua25vd24tcHJhZ21hcyAtV3VudXNlZCAtV3VudXNlZC1mdW5jdGlvbiAtV3VudXNlZC1sYWJlbCAtV3VudXNlZC1wYXJhbWV0ZXIgLVd1bnVzZWQtdmFsdWUgIC1XdW51c2VkLXZhcmlhYmxlIC1XdmFyaWFkaWMtbWFjcm9zIC1Xdm9sYXRpbGUtcmVnaXN0ZXItdmFyIC1Xd3JpdGUtc3RyaW5ncyAtV25lc3RlZC1leHRlcm5zIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdwb2ludGVyLXNpZ24iCisrV0FSTl9GTEFHUz0iLVdhbGwgLVcgLVdzaGFkb3cgLVdvbGQtc3R5bGUtZGVmaW5pdGlvbiAtV3BvaW50ZXItYXJpdGggLVd1bmRlZiAtV2V4dHJhIC1XYWRkcmVzcyAtV2F0dHJpYnV0ZXMgLVdjYXN0LWFsaWduIC1XY2hhci1zdWJzY3JpcHRzIC1XY29tbWVudCAtV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIC1XZGlzYWJsZWQtb3B0aW1pemF0aW9uIC1XZGl2LWJ5LXplcm8gLVdlbXB0eS1ib2R5IC1XZW5kaWYtbGFiZWxzIC1XZmxvYXQtZXF1YWwgLVdmb3JtYXQtZXh0cmEtYXJncyAtV2Zvcm1hdC1zZWN1cml0eSAtV2Zvcm1hdC15MmsgLVdpbXBsaWNpdCAtV2ltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uIC1XaW1wbGljaXQtaW50IC1XaW5pdC1zZWxmIC1XaW50LXRvLXBvaW50ZXItY2FzdCAtV2ludmFsaWQtcGNoIC1XbWFpbiAtV21pc3NpbmctYnJhY2VzIC1XbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMgLVdtaXNzaW5nLWZvcm1hdC1hdHRyaWJ1dGUgLVdtaXNzaW5nLW5vcmV0dXJuIC1XbXVsdGljaGFyIC1Xbm9ubnVsbCAtV292ZXJmbG93IC1XcGFyZW50aGVzZXMgLVdwb2ludGVyLWFyaXRoIC1XcG9pbnRlci10by1pbnQtY2FzdCAtV3JldHVybi10eXBlIC1Xc2VxdWVuY2UtcG9pbnQgLVdzaGFkb3cgLVdzaWduLWNvbXBhcmUgLVdzdHJpY3QtYWxpYXNpbmcgLVdzd2l0Y2ggLVd0cmlncmFwaHMgLVd1bmRlZiAtV3Vua25vd24tcHJhZ21hcyAtV3VudXNlZCAtV3VudXNlZC1mdW5jdGlvbiAtV3VudXNlZC1sYWJlbCAtV3VudXNlZC1wYXJhbWV0ZXIgLVd1bnVzZWQtdmFsdWUgIC1XdW51c2VkLXZhcmlhYmxlIC1Xbm8tdW51c2VkLXJlc3VsdCAtV3ZhcmlhZGljLW1hY3JvcyAtV3ZvbGF0aWxlLXJlZ2lzdGVyLXZhciAtV3dyaXRlLXN0cmluZ3MgLVduZXN0ZWQtZXh0ZXJucyAtV3N0cmljdC1wcm90b3R5cGVzIC1XcG9pbnRlci1zaWduIgorIEhPU1RfQ0ZMQUdTPSIkSE9TVF9DRkxBR1MgJFdBUk5fRkxBR1MiCisgVEFSR0VUX0NGTEFHUz0iJFRBUkdFVF9DRkxBR1MgJFdBUk5fRkxBR1MgLWcgLVdyZWR1bmRhbnQtZGVjbHMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyIKKyBUQVJHRVRfQ0NBU0ZMQUdTPSIkVEFSR0VUX0NDQVNGTEFHUyAtZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWIyLWZpeC1pbml0cmQtc2l6ZS1idWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViMi1maXgtaW5pdHJkLXNpemUtYnVnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMTRmNDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViMi1maXgtaW5pdHJkLXNpemUtYnVnLnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK0Zyb20gOGZiYjE1MGE1Njk2NmVkZGU0ZGMwN2I4ZDAxYmU1ZWIxNDliNjVhYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENvbGluIFdhdHNvbiA8Y2p3YXRzb25AdWJ1bnR1LmNvbT4KK0RhdGU6IFN1biwgMjAgSmFuIDIwMTMgMjM6MDM6MzUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzFdICogZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L2xpbnV4LmMgKGdydWJfY21kX2luaXRyZCk6IERvbid0CisgYWRkIHRoZSBpbml0cmQgc2l6ZSB0byBhZGRyX21pbiwgc2luY2UgdGhlIGluaXRyZCB3aWxsIGJlIGFsbG9jYXRlZCBhZnRlcgorIHRoaXMgYWRkcmVzcy4KKworY29tbWl0IDZhMGRlYmJkOTE2N2U4Zjc5Y2RlZjU0OTdhNzNkMjNlNTgwYzBjZDQgdXBzdHJlYW0KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBTaGFuIEhhaSA8c2hhbi5oYWlAd2luZHJpdmVyLmNvbT4KKy0tLQorIENoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgIHwgNiArKysrKysKKyBncnViLWNvcmUvbG9hZGVyL2kzODYvbGludXguYyB8IDMgKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKK2luZGV4IGMyZjQyZDUuLjQwY2I1MDggMTAwNjQ0CistLS0gYS9DaGFuZ2VMb2cKKysrKyBiL0NoYW5nZUxvZworQEAgLTEsMyArMSw5IEBACisrMjAxMy0wMS0yMCAgQ29saW4gV2F0c29uICA8Y2p3YXRzb25AdWJ1bnR1LmNvbT4KKysKKysJKiBncnViLWNvcmUvbG9hZGVyL2kzODYvbGludXguYyAoZ3J1Yl9jbWRfaW5pdHJkKTogRG9uJ3QgYWRkIHRoZQorKwlpbml0cmQgc2l6ZSB0byBhZGRyX21pbiwgc2luY2UgdGhlIGluaXRyZCB3aWxsIGJlIGFsbG9jYXRlZCBhZnRlcgorKwl0aGlzIGFkZHJlc3MuCisrCisgMjAxMi0wNy0wMiAgVmxhZGltaXIgU2VyYmluZW5rbyAgPHBoY29kZXJAZ21haWwuY29tPgorIAorIAkqIGdydWItY29yZS9uZXQvdGZ0cC5jIChhY2spOiBGaXggZW5kaWFubmVzcyBwcm9ibGVtLgorZGlmZiAtLWdpdCBhL2dydWItY29yZS9sb2FkZXIvaTM4Ni9saW51eC5jIGIvZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L2xpbnV4LmMKK2luZGV4IDYyMDg3Y2YuLmUyNDI1YzggMTAwNjQ0CistLS0gYS9ncnViLWNvcmUvbG9hZGVyL2kzODYvbGludXguYworKysrIGIvZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L2xpbnV4LmMKK0BAIC0xMDk4LDggKzEwOTgsNyBAQCBncnViX2NtZF9pbml0cmQgKGdydWJfY29tbWFuZF90IGNtZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisgICAgICB3b3JzZSB0aGFuIHRoYXQgb2YgTGludXggMi4zLnh4LCBzbyBhdm9pZCB0aGUgbGFzdCA2NGtiLiAgKi8KKyAgIGFkZHJfbWF4IC09IDB4MTAwMDA7CisgCistICBhZGRyX21pbiA9IChncnViX2FkZHJfdCkgcHJvdF9tb2RlX3RhcmdldCArIHByb3RfaW5pdF9zcGFjZQorLSAgICAgICAgICAgICArIHBhZ2VfYWxpZ24gKHNpemUpOworKyAgYWRkcl9taW4gPSAoZ3J1Yl9hZGRyX3QpIHByb3RfbW9kZV90YXJnZXQgKyBwcm90X2luaXRfc3BhY2U7CisgCisgICAvKiBQdXQgdGhlIGluaXRyZCBhcyBoaWdoIGFzIHBvc3NpYmxlLCA0S2lCIGFsaWduZWQuICAqLworICAgYWRkciA9IChhZGRyX21heCAtIHNpemUpICYgfjB4RkZGOworLS0gCisxLjguNS4yLjIzMy5nOTMyZjdlNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViMi1yZW1vdmUtc3BhcmM2NC1zZXR1cC1mcm9tLXg4Ni1idWlsZHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViMi1yZW1vdmUtc3BhcmM2NC1zZXR1cC1mcm9tLXg4Ni1idWlsZHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI1OWExYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWIyLXJlbW92ZS1zcGFyYzY0LXNldHVwLWZyb20teDg2LWJ1aWxkcy5wYXRjaApAQCAtMCwwICsxLDEwNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworcmVtb3ZlIHRoZSBncnViLXNwYXJjNjQtc2V0dXAgZmlsZXMgZnJvbSB0aGUgeDg2IGJ1aWxkcy4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworLS0tIGEvTWFrZWZpbGUudXRpbC5hbQkyMDE0LTA4LTE1IDExOjQxOjAyLjQ0MTAxMTI3OCAtMDcwMAorKysrIGIvTWFrZWZpbGUudXRpbC5hbQkyMDE0LTA4LTE1IDExOjQ0OjI2LjI0NTAyMTE0MiAtMDcwMAorQEAgLTQ2OTIsOSArNDY5Miw5IEBACisgZW5kaWYKKyAKKyBpZiBDT05EX2VtdQorLXNiaW5fUFJPR1JBTVMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwCisrc2Jpbl9QUk9HUkFNUyArPQorIGlmIENPTkRfTUFOX1BBR0VTCistbWFuX01BTlMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwLjgKKyttYW5fTUFOUyArPQorIAorIGdydWItc3BhcmM2NC1zZXR1cC44OiBncnViLXNwYXJjNjQtc2V0dXAKKyAJY2htb2QgYSt4IGdydWItc3BhcmM2NC1zZXR1cAorQEAgLTQ3MTUsOSArNDcxNSw5IEBACisgZW5kaWYKKyAKKyBpZiBDT05EX2kzODZfcGMKKy1zYmluX1BST0dSQU1TICs9IGdydWItc3BhcmM2NC1zZXR1cAorK3NiaW5fUFJPR1JBTVMgKz0KKyBpZiBDT05EX01BTl9QQUdFUworLW1hbl9NQU5TICs9IGdydWItc3BhcmM2NC1zZXR1cC44CisrbWFuX01BTlMgKz0KKyAKKyBncnViLXNwYXJjNjQtc2V0dXAuODogZ3J1Yi1zcGFyYzY0LXNldHVwCisgCWNobW9kIGEreCBncnViLXNwYXJjNjQtc2V0dXAKK0BAIC00NzM4LDkgKzQ3MzgsOSBAQAorIGVuZGlmCisgCisgaWYgQ09ORF9pMzg2X2VmaQorLXNiaW5fUFJPR1JBTVMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwCisrc2Jpbl9QUk9HUkFNUyArPQorIGlmIENPTkRfTUFOX1BBR0VTCistbWFuX01BTlMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwLjgKKyttYW5fTUFOUyArPQorIAorIGdydWItc3BhcmM2NC1zZXR1cC44OiBncnViLXNwYXJjNjQtc2V0dXAKKyAJY2htb2QgYSt4IGdydWItc3BhcmM2NC1zZXR1cAorQEAgLTQ3NjEsOSArNDc2MSw5IEBACisgZW5kaWYKKyAKKyBpZiBDT05EX2kzODZfcWVtdQorLXNiaW5fUFJPR1JBTVMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwCisrc2Jpbl9QUk9HUkFNUyArPQorIGlmIENPTkRfTUFOX1BBR0VTCistbWFuX01BTlMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwLjgKKyttYW5fTUFOUyArPQorIAorIGdydWItc3BhcmM2NC1zZXR1cC44OiBncnViLXNwYXJjNjQtc2V0dXAKKyAJY2htb2QgYSt4IGdydWItc3BhcmM2NC1zZXR1cAorQEAgLTQ3ODQsOSArNDc4NCw5IEBACisgZW5kaWYKKyAKKyBpZiBDT05EX2kzODZfY29yZWJvb3QKKy1zYmluX1BST0dSQU1TICs9IGdydWItc3BhcmM2NC1zZXR1cAorK3NiaW5fUFJPR1JBTVMgKz0KKyBpZiBDT05EX01BTl9QQUdFUworLW1hbl9NQU5TICs9IGdydWItc3BhcmM2NC1zZXR1cC44CisrbWFuX01BTlMgKz0KKyAKKyBncnViLXNwYXJjNjQtc2V0dXAuODogZ3J1Yi1zcGFyYzY0LXNldHVwCisgCWNobW9kIGEreCBncnViLXNwYXJjNjQtc2V0dXAKK0BAIC00ODA3LDkgKzQ4MDcsOSBAQAorIGVuZGlmCisgCisgaWYgQ09ORF9pMzg2X211bHRpYm9vdAorLXNiaW5fUFJPR1JBTVMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwCisrc2Jpbl9QUk9HUkFNUyArPQorIGlmIENPTkRfTUFOX1BBR0VTCistbWFuX01BTlMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwLjgKKyttYW5fTUFOUyArPQorIAorIGdydWItc3BhcmM2NC1zZXR1cC44OiBncnViLXNwYXJjNjQtc2V0dXAKKyAJY2htb2QgYSt4IGdydWItc3BhcmM2NC1zZXR1cAorQEAgLTQ4MzAsOSArNDgzMCw5IEBACisgZW5kaWYKKyAKKyBpZiBDT05EX2kzODZfaWVlZTEyNzUKKy1zYmluX1BST0dSQU1TICs9IGdydWItc3BhcmM2NC1zZXR1cAorK3NiaW5fUFJPR1JBTVMgKz0KKyBpZiBDT05EX01BTl9QQUdFUworLW1hbl9NQU5TICs9IGdydWItc3BhcmM2NC1zZXR1cC44CisrbWFuX01BTlMgKz0KKyAKKyBncnViLXNwYXJjNjQtc2V0dXAuODogZ3J1Yi1zcGFyYzY0LXNldHVwCisgCWNobW9kIGEreCBncnViLXNwYXJjNjQtc2V0dXAKK0BAIC00ODUzLDkgKzQ4NTMsOSBAQAorIGVuZGlmCisgCisgaWYgQ09ORF94ODZfNjRfZWZpCistc2Jpbl9QUk9HUkFNUyArPSBncnViLXNwYXJjNjQtc2V0dXAKKytzYmluX1BST0dSQU1TICs9CisgaWYgQ09ORF9NQU5fUEFHRVMKKy1tYW5fTUFOUyArPSBncnViLXNwYXJjNjQtc2V0dXAuOAorK21hbl9NQU5TICs9CisgCisgZ3J1Yi1zcGFyYzY0LXNldHVwLjg6IGdydWItc3BhcmM2NC1zZXR1cAorIAljaG1vZCBhK3ggZ3J1Yi1zcGFyYzY0LXNldHVwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9yZW1vdmUtZ2V0cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL3JlbW92ZS1nZXRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2M2Y3ODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9yZW1vdmUtZ2V0cy5wYXRjaApAQCAtMCwwICsxLDIwIEBACitJU08gQzExIHJlbW92ZXMgdGhlIHNwZWNpZmljYXRpb24gb2YgZ2V0cygpIGZyb20gdGhlIEMgbGFuZ3VhZ2UsIGVnbGliYyAyLjE2KyByZW1vdmVkIGl0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworSW5kZXg6IGdydWItMS45OS9ncnViLWNvcmUvZ251bGliL3N0ZGlvLmluLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncnViLTEuOTkub3JpZy9ncnViLWNvcmUvZ251bGliL3N0ZGlvLmluLmgJMjAxMC0xMi0wMSAwNjo0NTo0My4wMDAwMDAwMDAgLTA4MDAKKysrKyBncnViLTEuOTkvZ3J1Yi1jb3JlL2dudWxpYi9zdGRpby5pbi5oCTIwMTItMDctMDQgMTI6MjU6MDIuMDU3MDk5MTA3IC0wNzAwCitAQCAtMTQwLDggKzE0MCwxMCBAQAorIC8qIEl0IGlzIHZlcnkgcmFyZSB0aGF0IHRoZSBkZXZlbG9wZXIgZXZlciBoYXMgZnVsbCBjb250cm9sIG9mIHN0ZGluLAorICAgIHNvIGFueSB1c2Ugb2YgZ2V0cyB3YXJyYW50cyBhbiB1bmNvbmRpdGlvbmFsIHdhcm5pbmcuICBBc3N1bWUgaXQgaXMKKyAgICBhbHdheXMgZGVjbGFyZWQsIHNpbmNlIGl0IGlzIHJlcXVpcmVkIGJ5IEM4OS4gICovCisrI2lmIGRlZmluZWQgZ2V0cworICN1bmRlZiBnZXRzCisgX0dMX1dBUk5fT05fVVNFIChnZXRzLCAiZ2V0cyBpcyBhIHNlY3VyaXR5IGhvbGUgLSB1c2UgZmdldHMgaW5zdGVhZCIpOworKyNlbmRpZgorIAorICNpZiBAR05VTElCX0ZPUEVOQAorICMgaWYgQFJFUExBQ0VfRk9QRU5ACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvYXV0b2hlbGwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvYXV0b2hlbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY2MjA3YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9hdXRvaGVsbC5wYXRjaApAQCAtMCwwICsxLDIxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgIDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBncnViLTAuOTcvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3J1Yi0wLjk3Lm9yaWcvY29uZmlndXJlLmFjCTIwMDgtMDktMTIgMTc6Mzk6NTIuMDAwMDAwMDAwICswMjAwCisrKysgZ3J1Yi0wLjk3L2NvbmZpZ3VyZS5hYwkyMDA4LTA5LTEyIDE3OjQwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTYwLDggKzYwLDggQEAgQUNfUFJPR19DQworIF9BTV9ERVBFTkRFTkNJRVMoQ0MpCisgCisgZG5sIEJlY2F1c2UgcmVjZW50IGF1dG9tYWtlIGNvbXBsYWlucyBhYm91dCBBUywgc2V0IGl0IGhlcmUuCistQ0NBUz0iJENDIgorLUFDX1NVQlNUKENDQVMpCisrQU1fUFJPR19BUworK0FDX1NVQlNUKEFTKQorIAorIEFDX0FSR19XSVRIKGJpbnV0aWxzLAorICAgWyAgLS13aXRoLWJpbnV0aWxzPURJUiAgICAgc2VhcmNoIHRoZSBkaXJlY3RvcnkgRElSIHRvIGZpbmQgYmludXRpbHNdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L2dydWItc3VwcG9ydC0yNTZieXRlLWlub2RlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L2dydWItc3VwcG9ydC0yNTZieXRlLWlub2RlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMjVkMTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvZ3J1Yi1zdXBwb3J0LTI1NmJ5dGUtaW5vZGUucGF0Y2gKQEAgLTAsMCArMSwxMDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbTm8gTG9uZ2VyIE1haW50YWluZWRdCisKK2RpZmYgLU5hdXIgZ3J1Yi0wLjk3LTgwMC9zdGFnZTIvZnN5c19leHQyZnMuYyBncnViLTAuOTctODEwL3N0YWdlMi9mc3lzX2V4dDJmcy5jCistLS0gZ3J1Yi0wLjk3LTgwMC9zdGFnZTIvZnN5c19leHQyZnMuYwkyMDA4LTA3LTIxIDAwOjQwOjIxLjY2ODg3OTQ3NSAtMDYwMAorKysrIGdydWItMC45Ny04MTAvc3RhZ2UyL2ZzeXNfZXh0MmZzLmMJMjAwOC0wNy0yMSAwMTowMToxMS4wNjM5NTM3NzMgLTA2MDAKK0BAIC03OSw3ICs3OSw1MiBAQAorICAgICBfX3UzMiBzX3Jldl9sZXZlbDsJCS8qIFJldmlzaW9uIGxldmVsICovCisgICAgIF9fdTE2IHNfZGVmX3Jlc3VpZDsJCS8qIERlZmF1bHQgdWlkIGZvciByZXNlcnZlZCBibG9ja3MgKi8KKyAgICAgX191MTYgc19kZWZfcmVzZ2lkOwkJLyogRGVmYXVsdCBnaWQgZm9yIHJlc2VydmVkIGJsb2NrcyAqLworLSAgICBfX3UzMiBzX3Jlc2VydmVkWzIzNV07CS8qIFBhZGRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgYmxvY2sgKi8KKysgICAgLyoKKysgICAgICogVGhlc2UgZmllbGRzIGFyZSBmb3IgRVhUMl9EWU5BTUlDX1JFViBzdXBlcmJsb2NrcyBvbmx5LgorKyAgICAgKgorKyAgICAgKiBOb3RlOiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjb21wYXRpYmxlIGZlYXR1cmUgc2V0IGFuZAorKyAgICAgKiB0aGUgaW5jb21wYXRpYmxlIGZlYXR1cmUgc2V0IGlzIHRoYXQgaWYgdGhlcmUgaXMgYSBiaXQgc2V0CisrICAgICAqIGluIHRoZSBpbmNvbXBhdGlibGUgZmVhdHVyZSBzZXQgdGhhdCB0aGUga2VybmVsIGRvZXNuJ3QKKysgICAgICoga25vdyBhYm91dCwgaXQgc2hvdWxkIHJlZnVzZSB0byBtb3VudCB0aGUgZmlsZXN5c3RlbS4KKysgICAgICoKKysgICAgICogZTJmc2NrJ3MgcmVxdWlyZW1lbnRzIGFyZSBtb3JlIHN0cmljdDsgaWYgaXQgZG9lc24ndCBrbm93CisrICAgICAqIGFib3V0IGEgZmVhdHVyZSBpbiBlaXRoZXIgdGhlIGNvbXBhdGlibGUgb3IgaW5jb21wYXRpYmxlCisrICAgICAqIGZlYXR1cmUgc2V0LCBpdCBtdXN0IGFib3J0IGFuZCBub3QgdHJ5IHRvIG1lZGRsZSB3aXRoCisrICAgICAqIHRoaW5ncyBpdCBkb2Vzbid0IHVuZGVyc3RhbmQuLi4KKysgICAgICovCisrICAgIF9fdTMyIHNfZmlyc3RfaW5vOwkJLyogRmlyc3Qgbm9uLXJlc2VydmVkIGlub2RlICovCisrICAgIF9fdTE2IHNfaW5vZGVfc2l6ZTsJCS8qIHNpemUgb2YgaW5vZGUgc3RydWN0dXJlICovCisrICAgIF9fdTE2IHNfYmxvY2tfZ3JvdXBfbnI7CS8qIGJsb2NrIGdyb3VwICMgb2YgdGhpcyBzdXBlcmJsb2NrICovCisrICAgIF9fdTMyIHNfZmVhdHVyZV9jb21wYXQ7CS8qIGNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKysgICAgX191MzIgc19mZWF0dXJlX2luY29tcGF0OwkvKiBpbmNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKysgICAgX191MzIgc19mZWF0dXJlX3JvX2NvbXBhdDsJLyogcmVhZG9ubHktY29tcGF0aWJsZSBmZWF0dXJlIHNldCAqLworKyAgICBfX3U4ICBzX3V1aWRbMTZdOwkJLyogMTI4LWJpdCB1dWlkIGZvciB2b2x1bWUgKi8KKysgICAgY2hhciAgc192b2x1bWVfbmFtZVsxNl07CS8qIHZvbHVtZSBuYW1lICovCisrICAgIGNoYXIgIHNfbGFzdF9tb3VudGVkWzY0XTsJLyogZGlyZWN0b3J5IHdoZXJlIGxhc3QgbW91bnRlZCAqLworKyAgICBfX3UzMiBzX2FsZ29yaXRobV91c2FnZV9iaXRtYXA7IC8qIEZvciBjb21wcmVzc2lvbiAqLworKyAgICAvKgorKyAgICAgKiBQZXJmb3JtYW5jZSBoaW50cy4gIERpcmVjdG9yeSBwcmVhbGxvY2F0aW9uIHNob3VsZCBvbmx5CisrICAgICAqIGhhcHBlbiBpZiB0aGUgRVhUMl9GRUFUVVJFX0NPTVBBVF9ESVJfUFJFQUxMT0MgZmxhZyBpcyBvbi4KKysgICAgICovCisrICAgIF9fdTggIHNfcHJlYWxsb2NfYmxvY2tzOwkvKiBOciBvZiBibG9ja3MgdG8gdHJ5IHRvIHByZWFsbG9jYXRlKi8KKysgICAgX191OCAgc19wcmVhbGxvY19kaXJfYmxvY2tzOwkvKiBOciB0byBwcmVhbGxvY2F0ZSBmb3IgZGlycyAqLworKyAgICBfX3UxNiBzX3Jlc2VydmVkX2dkdF9ibG9ja3M7LyogUGVyIGdyb3VwIHRhYmxlIGZvciBvbmxpbmUgZ3Jvd3RoICovCisrICAgIC8qCisrICAgICAqIEpvdXJuYWxpbmcgc3VwcG9ydCB2YWxpZCBpZiBFWFQyX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMIHNldC4KKysgICAgICovCisrICAgIF9fdTggc19qb3VybmFsX3V1aWRbMTZdOwkvKiB1dWlkIG9mIGpvdXJuYWwgc3VwZXJibG9jayAqLworKyAgICBfX3UzMiBzX2pvdXJuYWxfaW51bTsJLyogaW5vZGUgbnVtYmVyIG9mIGpvdXJuYWwgZmlsZSAqLworKyAgICBfX3UzMiBzX2pvdXJuYWxfZGV2OwkvKiBkZXZpY2UgbnVtYmVyIG9mIGpvdXJuYWwgZmlsZSAqLworKyAgICBfX3UzMiBzX2xhc3Rfb3JwaGFuOwkvKiBzdGFydCBvZiBsaXN0IG9mIGlub2RlcyB0byBkZWxldGUgKi8KKysgICAgX191MzIgc19oYXNoX3NlZWRbNF07CS8qIEhUUkVFIGhhc2ggc2VlZCAqLworKyAgICBfX3U4ICBzX2RlZl9oYXNoX3ZlcnNpb247CS8qIERlZmF1bHQgaGFzaCB2ZXJzaW9uIHRvIHVzZSAqLworKyAgICBfX3U4ICBzX2pubF9iYWNrdXBfdHlwZTsgCS8qIERlZmF1bHQgdHlwZSBvZiBqb3VybmFsIGJhY2t1cCAqLworKyAgICBfX3UxNiBzX3Jlc2VydmVkX3dvcmRfcGFkOworKyAgICBfX3UzMiBzX2RlZmF1bHRfbW91bnRfb3B0czsKKysgICAgX191MzIgc19maXJzdF9tZXRhX2JnOwkvKiBGaXJzdCBtZXRhYmxvY2sgZ3JvdXAgKi8KKysgICAgX191MzIgc19ta2ZzX3RpbWU7CQkvKiBXaGVuIHRoZSBmaWxlc3lzdGVtIHdhcyBjcmVhdGVkICovCisrICAgIF9fdTMyIHNfam5sX2Jsb2Nrc1sxN107IAkvKiBCYWNrdXAgb2YgdGhlIGpvdXJuYWwgaW5vZGUgKi8KKysgICAgX191MzIgc19yZXNlcnZlZFsxNzJdOwkvKiBQYWRkaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGJsb2NrICovCisgICB9OworIAorIHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MKK0BAIC0yMTgsNiArMjYzLDE0IEBACisgI2RlZmluZSBFWFQyX0FERFJfUEVSX0JMT0NLKHMpICAgICAgICAgIChFWFQyX0JMT0NLX1NJWkUocykgLyBzaXplb2YgKF9fdTMyKSkKKyAjZGVmaW5lIEVYVDJfQUREUl9QRVJfQkxPQ0tfQklUUyhzKQkJKGxvZzIoRVhUMl9BRERSX1BFUl9CTE9DSyhzKSkpCisgCisrI2RlZmluZSBFWFQyX0dPT0RfT0xEX1JFViAgIDAgICAvKiBUaGUgZ29vZCBvbGQgKG9yaWdpbmFsKSBmb3JtYXQgKi8KKysjZGVmaW5lIEVYVDJfRFlOQU1JQ19SRVYgICAgMSAgIC8qIFYyIGZvcm1hdCB3LyBkeW5hbWljIGlub2RlIHNpemVzICovCisrI2RlZmluZSBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUgMTI4CisrI2RlZmluZSBFWFQyX0lOT0RFX1NJWkUocykgICgoKHMpLT5zX3Jldl9sZXZlbCA9PSBFWFQyX0dPT0RfT0xEX1JFVikgPyBcCisrICAgICAgICAgICAgICAgICBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUgOiBcCisrICAgICAgICAgICAgICAgICAocyktPnNfaW5vZGVfc2l6ZSkKKysjZGVmaW5lIEVYVDJfSU5PREVTX1BFUl9CTE9DSyhzKQkoRVhUMl9CTE9DS19TSVpFKHMpL0VYVDJfSU5PREVfU0laRShzKSkKKysKKyAvKiBsaW51eC9leHQyX2ZzLmggKi8KKyAjZGVmaW5lIEVYVDJfQkxPQ0tfU0laRV9CSVRTKHMpICAgICAgICAoKHMpLT5zX2xvZ19ibG9ja19zaXplICsgMTApCisgLyoga2luZCBvZiBmcm9tIGV4dDIvc3VwZXIuYyAqLworQEAgLTU1Myw3ICs2MDYsNyBAQAorICAgICAgIGdkcCA9IEdST1VQX0RFU0M7CisgICAgICAgaW5vX2JsayA9IGdkcFtkZXNjXS5iZ19pbm9kZV90YWJsZSArCisgCSgoKGN1cnJlbnRfaW5vIC0gMSkgJSAoU1VQRVJCTE9DSy0+c19pbm9kZXNfcGVyX2dyb3VwKSkKKy0JID4+IGxvZzIgKEVYVDJfQkxPQ0tfU0laRSAoU1VQRVJCTE9DSykgLyBzaXplb2YgKHN0cnVjdCBleHQyX2lub2RlKSkpOworKwkgPj4gbG9nMiAoRVhUMl9JTk9ERVNfUEVSX0JMT0NLIChTVVBFUkJMT0NLKSkpOworICNpZmRlZiBFMkRFQlVHCisgICAgICAgcHJpbnRmICgiaW5vZGUgdGFibGUgZnNibG9jaz0lZFxuIiwgaW5vX2Jsayk7CisgI2VuZGlmIC8qIEUyREVCVUcgKi8KK0BAIC01NjUsMTMgKzYxOCwxMiBAQAorICAgICAgIC8qIHJlc2V0IGluZGlyZWN0IGJsb2NrcyEgKi8KKyAgICAgICBtYXBibG9jazIgPSBtYXBibG9jazEgPSAtMTsKKyAKKy0gICAgICByYXdfaW5vZGUgPSBJTk9ERSArCistCSgoY3VycmVudF9pbm8gLSAxKQorLQkgJiAoRVhUMl9CTE9DS19TSVpFIChTVVBFUkJMT0NLKSAvIHNpemVvZiAoc3RydWN0IGV4dDJfaW5vZGUpIC0gMSkpOworKyAgICAgIHJhd19pbm9kZSA9IChzdHJ1Y3QgZXh0Ml9pbm9kZSAqKSgoY2hhciAqKUlOT0RFICsKKysJKChjdXJyZW50X2lubyAtIDEpICYgKEVYVDJfSU5PREVTX1BFUl9CTE9DSyAoU1VQRVJCTE9DSykgLSAxKSkgKgorKwlFWFQyX0lOT0RFX1NJWkUgKFNVUEVSQkxPQ0spKTsKKyAjaWZkZWYgRTJERUJVRworICAgICAgIHByaW50ZiAoImlwYj0lZCwgc2l6ZW9mKGlub2RlKT0lZFxuIiwKKy0JICAgICAgKEVYVDJfQkxPQ0tfU0laRSAoU1VQRVJCTE9DSykgLyBzaXplb2YgKHN0cnVjdCBleHQyX2lub2RlKSksCistCSAgICAgIHNpemVvZiAoc3RydWN0IGV4dDJfaW5vZGUpKTsKKysJICAgICAgRVhUMl9JTk9ERVNfUEVSX0JMT0NLIChTVVBFUkJMT0NLKSwgRVhUMl9JTk9ERV9TSVpFIChTVVBFUkJMT0NLKSk7CisgICAgICAgcHJpbnRmICgiaW5vZGU9JXgsIHJhd19pbm9kZT0leFxuIiwgSU5PREUsIHJhd19pbm9kZSk7CisgICAgICAgcHJpbnRmICgib2Zmc2V0IGludG8gaW5vZGUgdGFibGUgYmxvY2s9JWRcbiIsIChpbnQpIHJhd19pbm9kZSAtIChpbnQpIElOT0RFKTsKKyAgICAgICBmb3IgKGkgPSAodW5zaWduZWQgY2hhciAqKSBJTk9ERTsgaSA8PSAodW5zaWduZWQgY2hhciAqKSByYXdfaW5vZGU7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvZ3J1Yl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvZ3J1Yl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNmN2RjOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9ncnViX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDc0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU3ViamVjdDogW1BBVENIXSBncnViOiBmaXggZm9yIGF1dG9tYWtlLTEuMTIKKworYXV0b21ha2UgMS4xMiBoYXMgZGVwcmljYXRlZCBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0CisKK3RoaXMgcGF0Y2ggYXZvaWRzIHRoZXNlIGtpbmRzIG9mIGVycm9yczoKKworfCBzdGFnZTEvTWFrZWZpbGUuYW06MjogZXJyb3I6ICdwa2dsaWJkaXInIGlzIG5vdCBhIGxlZ2l0aW1hdGUgZGlyZWN0b3J5IGZvciAnREFUQScKK3wgc3RhZ2UyL01ha2VmaWxlLmFtOjM1OiBlcnJvcjogJ3BrZ2xpYmRpcicgaXMgbm90IGEgbGVnaXRpbWF0ZSBkaXJlY3RvcnkgZm9yICdEQVRBJworfCBzdGFnZTIvTWFrZWZpbGUuYW06NDY6IGVycm9yOiAncGtnbGliZGlyJyBpcyBub3QgYSBsZWdpdGltYXRlIGRpcmVjdG9yeSBmb3IgJ0RBVEEnCit8IGF1dG9yZWNvbmY6IGF1dG9tYWtlIGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzOiAxCit8IEVSUk9SOiBhdXRvcmVjb25mIGV4ZWN1dGlvbiBmYWlsZWQuCisKK1RoZSB1cHN0cmVhbSBzdGF0dXMgaXMgbWFya2VkIGFzICdJbmFwcHJvcHJpYXRlJyBiZWNhdXNlIHRoaXMgcHJvYmxlbSBpcyBub3QgdW5jb21tb24sCitpdCBoYXMgYmVlbiB0aGVyZSBmb3IgYSBsb25nIHRpbWUgYW5kIG5vIGNoYW5nZSBpbiB1cHN0cmVhbS4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorCitJbmRleDogZ3J1Yi0wLjk3L3N0YWdlMS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvc3RhZ2UxL01ha2VmaWxlLmFtCisrKysgYi9zdGFnZTEvTWFrZWZpbGUuYW0KK0BAIC0xLDcgKzEsNyBAQAorLXBrZ2xpYmRpciA9ICQobGliZGlyKS8kKFBBQ0tBR0UpLyQoaG9zdF9jcHUpLSQoaG9zdF92ZW5kb3IpCistbm9kaXN0X3BrZ2xpYl9EQVRBID0gc3RhZ2UxCisrcGtnZGF0YWRpciA9ICQobGliZGlyKS8kKFBBQ0tBR0UpLyQoaG9zdF9jcHUpLSQoaG9zdF92ZW5kb3IpCisrbm9kaXN0X3BrZ2RhdGFfREFUQSA9IHN0YWdlMQorIAorLUNMRUFORklMRVMgPSAkKG5vZGlzdF9wa2dsaWJfREFUQSkKKytDTEVBTkZJTEVTID0gJChub2Rpc3RfcGtnZGF0YV9EQVRBKQorIAorICMgV2UgY2FuJ3QgdXNlIGJ1aWx0aW5zIG9yIHN0YW5kYXJkIGluY2x1ZGVzLgorIEFNX0NDQVNGTEFHUyA9ICQoU1RBR0UxX0NGTEFHUykgLWZuby1idWlsdGluIC1ub3N0ZGluYworSW5kZXg6IGdydWItMC45Ny9zdGFnZTIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL3N0YWdlMi9NYWtlZmlsZS5hbQorKysrIGIvc3RhZ2UyL01ha2VmaWxlLmFtCitAQCAtMjcsMTIgKzI3LDEyIEBAIGxpYmdydWJfYV9DRkxBR1MgPSAkKEdSVUJfQ0ZMQUdTKSAtSSQodG9wX3NyY2RpcikvbGliIFwKKyAJLURVU0VfTUQ1X1BBU1NXT1JEUz0xIC1EU1VQUE9SVF9TRVJJQUw9MSAtRFNVUFBPUlRfSEVSQ1VMRVM9MQorIAorICMgU3RhZ2UgMiBhbmQgU3RhZ2UgMS41J3MuCistcGtnbGliZGlyID0gJChsaWJkaXIpLyQoUEFDS0FHRSkvJChob3N0X2NwdSktJChob3N0X3ZlbmRvcikKKytwa2dkYXRhZGlyID0gJChsaWJkaXIpLyQoUEFDS0FHRSkvJChob3N0X2NwdSktJChob3N0X3ZlbmRvcikKKyAKKyBFWFRSQV9QUk9HUkFNUyA9IG5ibG9hZGVyLmV4ZWMgcHhlbG9hZGVyLmV4ZWMgZGlza2xlc3MuZXhlYworIAorIGlmIERJU0tMRVNTX1NVUFBPUlQKKy1wa2dsaWJfREFUQSA9IHN0YWdlMiBzdGFnZTJfZWx0b3JpdG8gZTJmc19zdGFnZTFfNSBmYXRfc3RhZ2UxXzUgXAorK3BrZ2RhdGFfREFUQSA9IHN0YWdlMiBzdGFnZTJfZWx0b3JpdG8gZTJmc19zdGFnZTFfNSBmYXRfc3RhZ2UxXzUgXAorIAlmZnNfc3RhZ2UxXzUgaXNvOTY2MF9zdGFnZTFfNSBqZnNfc3RhZ2UxXzUgbWluaXhfc3RhZ2UxXzUgXAorIAlyZWlzZXJmc19zdGFnZTFfNSB1ZnMyX3N0YWdlMV81IHZzdGFmc19zdGFnZTFfNSB4ZnNfc3RhZ2UxXzUgXAorIAluYmdydWIgcHhlZ3J1YgorQEAgLTQzLDcgKzQzLDcgQEAgbm9pbnN0X1BST0dSQU1TID0gcHJlX3N0YWdlMi5leGVjIHN0YXJ0LmV4ZWMgc3RhcnRfZWx0b3JpdG8uZXhlYyBcCisgCXJlaXNlcmZzX3N0YWdlMV81LmV4ZWMgdWZzMl9zdGFnZTFfNS5leGVjIHZzdGFmc19zdGFnZTFfNS5leGVjIFwKKyAJeGZzX3N0YWdlMV81LmV4ZWMgbmJsb2FkZXIuZXhlYyBweGVsb2FkZXIuZXhlYyBkaXNrbGVzcy5leGVjCisgZWxzZQorLXBrZ2xpYl9EQVRBID0gc3RhZ2UyIHN0YWdlMl9lbHRvcml0byBlMmZzX3N0YWdlMV81IGZhdF9zdGFnZTFfNSBcCisrcGtnZGF0YV9EQVRBID0gc3RhZ2UyIHN0YWdlMl9lbHRvcml0byBlMmZzX3N0YWdlMV81IGZhdF9zdGFnZTFfNSBcCisgCWZmc19zdGFnZTFfNSBpc285NjYwX3N0YWdlMV81IGpmc19zdGFnZTFfNSBtaW5peF9zdGFnZTFfNSBcCisgCXJlaXNlcmZzX3N0YWdlMV81IHVmczJfc3RhZ2UxXzUgdnN0YWZzX3N0YWdlMV81IHhmc19zdGFnZTFfNQorIG5vaW5zdF9EQVRBID0gcHJlX3N0YWdlMiBzdGFydCBzdGFydF9lbHRvcml0bworQEAgLTEwNSw3ICsxMDUsNyBAQCBlbHNlCisgQlVJTFRfU09VUkNFUyA9IHN0YWdlMl9zaXplLmgKKyBlbmRpZgorIAorLUNMRUFORklMRVMgPSAkKHBrZ2xpYl9EQVRBKSAkKG5vaW5zdF9EQVRBKSAkKEJVSUxUX1NPVVJDRVMpCisrQ0xFQU5GSUxFUyA9ICQocGtnZGF0YV9EQVRBKSAkKG5vaW5zdF9EQVRBKSAkKEJVSUxUX1NPVVJDRVMpCisgCisgc3RhZ2UyX3NpemUuaDogcHJlX3N0YWdlMgorIAktcm0gLWYgc3RhZ2UyX3NpemUuaAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9uby1yZW9yZGVyLWZ1bmN0aW9ucy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9uby1yZW9yZGVyLWZ1bmN0aW9ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDAzN2U0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L25vLXJlb3JkZXItZnVuY3Rpb25zLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitBZnRlciB0aGUgY29tbWl0ICJ0Y21vZGUtZGVmYXVsdDogc3dpdGNoIHRvIGdjYyA0LjYuMCBmb3IgeDg2LCB4ODYtNjQgJiBhcm0iLAord2UgZ290IGJ1ZyAxMDk5IChodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5OSk6CisKK1J1bm5pbmcgImluc3RhbGwgLS1zdGFnZTI9L3NzZC9ib290L2dydWIvc3RhZ2UyIC9ib290L2dydWIvc3RhZ2UxKGhkMCkKKyAgICAgL2Jvb3QvZ3J1Yi9zdGFnZTIgcCAvYm9vdC9ncnViL21lbnUgbGlzdCIgZmFpbGVkCitFcnJvciA2OiBNaXNtYXRjaGVkIG9yIGNvcnJ1cHQgdmVyc2lvbiBvZiBzdGFnZTEvc3RhZ2UyCisKK1RoaXMgdHVybmVkIG91dCB0byBiZSBhIGdjYydzIGJ1Zy4gU2VlCitodHRwczovL2J1Z3MuZ2VudG9vLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzYwNTEzCitodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTM5MzMzCisKK1Vwc3RyZWFtIGdjYyBzZWVtcyB1bmludGVyZXN0ZWQgaW4gdGhlIGJ1Zywgc28gYXQgcHJlc2VudCB3ZSBjYW4gZGlzYWJsZSB0aGUKK29wdGlvbiBhcyBhIHdvcmthcm91bmQuIFRoYW5rcyBSeWFuIEhpbGwgZm9yIHRoZSBpbnZlc3RpZ2F0aW9uIGFuZCB0aGUKK3dvcmthcm91bmQgcGF0Y2guCisKK0RleHVhbiBDdWkgPGRleHVhbi5jdWlAaW50ZWwuY29tPgorV2VkIEp1biAyOSAyMDoyMTozOSBDU1QgMjAxMQorCistLS0gZ3J1Yi0wLjk3L3N0YWdlMi9NYWtlZmlsZS5hbS5vcmlnCisrKysgZ3J1Yi0wLjk3L3N0YWdlMi9NYWtlZmlsZS5hbQorQEAgLTc5LDcgKzc5LDcgQEAKKyBIRVJDVUxFU19GTEFHUyA9CisgZW5kaWYKKyAKKy1TVEFHRTJfQ09NUElMRSA9ICQoU1RBR0UyX0NGTEFHUykgLWZuby1idWlsdGluIC1ub3N0ZGluYyBcCisrU1RBR0UyX0NPTVBJTEUgPSAkKFNUQUdFMl9DRkxBR1MpIC1mbm8tcmVvcmRlci1mdW5jdGlvbnMgLWZuby1idWlsdGluIC1ub3N0ZGluYyBcCisgCSQoTkVUQk9PVF9GTEFHUykgJChTRVJJQUxfRkxBR1MpICQoSEVSQ1VMRVNfRkxBR1MpCisgCisgU1RBR0UxXzVfTElOSyA9IC1ub3N0ZGxpYiAtV2wsLU4gLVdsLC1UdGV4dCAtV2wsMjAwMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L29iamNvcHktYWJzb2x1dGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvb2JqY29weS1hYnNvbHV0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDhlMGE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L29iamNvcHktYWJzb2x1dGUucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorCitUaGlzIHBhdGNoIGlzIGZyb20gdWJ1bnR1OgorICAqIG9iamNvcHktYWJzb2x1dGUuZGlmZiAodXBkYXRlKTogUmVtb3ZlIC5ub3RlLCAuY29tbWVudCwgYW5kCisgICAgLm5vdGUuZ251LmJ1aWxkLWlkIHNlY3Rpb25zIGZyb20gaW1hZ2VzIChMUDogIzQ0NDcwMykuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbm8gbG9uZ2VyIG1haW50YWluZWRdCisKK0luZGV4OiBiL2FjaW5jbHVkZS5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvYWNpbmNsdWRlLm00CisrKysgYi9hY2luY2x1ZGUubTQKK0BAIC02MSw3ICs2MSw3IEBACisgICBlbHNlCisgICAgIEFDX01TR19FUlJPUihbJHtDQy1jY30gY2Fubm90IGxpbmsgYXQgYWRkcmVzcyAkbGlua19hZGRyXSkKKyAgIGZpCistICBpZiBBQ19UUllfQ09NTUFORChbJHtPQkpDT1BZLW9iamNvcHl9IC1PIGJpbmFyeSBjb25mdGVzdC5leGVjIGNvbmZ0ZXN0XSk7IHRoZW4gOgorKyAgaWYgQUNfVFJZX0NPTU1BTkQoWyR7T0JKQ09QWS1vYmpjb3B5fSAtLW9ubHktc2VjdGlvbj0udGV4dCAtTyBiaW5hcnkgY29uZnRlc3QuZXhlYyBjb25mdGVzdF0pOyB0aGVuIDoKKyAgIGVsc2UKKyAgICAgQUNfTVNHX0VSUk9SKFske09CSkNPUFktb2JqY29weX0gY2Fubm90IGNyZWF0ZSBiaW5hcnkgZmlsZXNdKQorICAgZmkKK0luZGV4OiBiL3N0YWdlMS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvc3RhZ2UxL01ha2VmaWxlLmFtCisrKysgYi9zdGFnZTEvTWFrZWZpbGUuYW0KK0BAIC0xMiw0ICsxMiw0IEBACisKKyBTVUZGSVhFUyA9IC5leGVjCisgLmV4ZWM6CistCSQoT0JKQ09QWSkgLU8gYmluYXJ5ICQ8ICRACisrCSQoT0JKQ09QWSkgLU8gYmluYXJ5IC1SIC5ub3RlIC1SIC5jb21tZW50IC1SIC5ub3RlLmdudS5idWlsZC1pZCAkPCAkQAorSW5kZXg6IGIvc3RhZ2UyL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9zdGFnZTIvTWFrZWZpbGUuYW0KKysrKyBiL3N0YWdlMi9NYWtlZmlsZS5hbQorQEAgLTI5Myw0ICsyOTMsNCBAQAorICMgR2VuZXJhbCBydWxlIGZvciBtYWtpbmcgYSByYXcgYmluYXJ5LgorIFNVRkZJWEVTID0gLmV4ZWMKKyAuZXhlYzoKKy0JJChPQkpDT1BZKSAtTyBiaW5hcnkgJDwgJEAKKysJJChPQkpDT1BZKSAtTyBiaW5hcnkgLVIgLm5vdGUgLVIgLmNvbW1lbnQgLVIgLm5vdGUuZ251LmJ1aWxkLWlkICQ8ICRACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLWVmaV8yLjAwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi1lZmlfMi4wMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjQ0ZWFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi1lZmlfMi4wMC5iYgpAQCAtMCwwICsxLDY2IEBACityZXF1aXJlIGdydWIyLmluYworCitERVBFTkRTX2NsYXNzLXRhcmdldCA9ICJncnViLWVmaS1uYXRpdmUiCitSREVQRU5EU18ke1BOfV9jbGFzcy10YXJnZXQgPSAiZGlmZnV0aWxzIGZyZWV0eXBlIgorUFIgPSAicjMiCisKK1NSQ19VUkkgKz0gIiBcCisgICAgICAgICAgIGZpbGU6Ly9jZmcgXAorICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L2dydWItJHtQVn0iCisKKyMgRGV0ZXJtaW5lIHRoZSB0YXJnZXQgYXJjaCBmb3IgdGhlIGdydWIgbW9kdWxlcworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBpbXBvcnQgcmUKKyAgICB0YXJnZXQgPSBkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKQorICAgIGlmIHRhcmdldCA9PSAieDg2XzY0IjoKKyAgICAgICAgZ3J1YnRhcmdldCA9ICd4ODZfNjQnCisgICAgICAgIGdydWJpbWFnZSA9ICJib290eDY0LmVmaSIKKyAgICBlbGlmIHJlLm1hdGNoKCdpLjg2JywgdGFyZ2V0KToKKyAgICAgICAgZ3J1YnRhcmdldCA9ICdpMzg2JworICAgICAgICBncnViaW1hZ2UgPSAiYm9vdGlhMzIuZWZpIgorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJncnViLWVmaSBpcyBpbmNvbXBhdGlibGUgd2l0aCB0YXJnZXQgJXMiICUgdGFyZ2V0KQorICAgIGQuc2V0VmFyKCJHUlVCX1RBUkdFVCIsIGdydWJ0YXJnZXQpCisgICAgZC5zZXRWYXIoIkdSVUJfSU1BR0UiLCBncnViaW1hZ2UpCit9CisKK2luaGVyaXQgZGVwbG95CisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX0hFTFAyTUFOPSIKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtcGxhdGZvcm09ZWZpIC0tZGlzYWJsZS1ncnViLW1rZm9udCBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtZWZpZW11PW5vIC0tcHJvZ3JhbS1wcmVmaXg9JycgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWxpYmx6bWE9bm8gLS1lbmFibGUtZGV2aWNlLW1hcHBlcj1ubyAtLWVuYWJsZS1saWJ6ZnM9bm8iCisKK2RvX2luc3RhbGxfY2xhc3MtbmF0aXZlKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gNzU1IGdydWItbWtpbWFnZSAke0R9JHtiaW5kaXJ9Cit9CisKK0dSVUJfQlVJTERJTiA/PSAiYm9vdCBsaW51eCBleHQyIGZhdCBzZXJpYWwgcGFydF9tc2RvcyBwYXJ0X2dwdCBub3JtYWwgZWZpX2dvcCBpc285NjYwIHNlYXJjaCIKKworZG9fZGVwbG95KCkgeworCSMgU2VhcmNoIGZvciB0aGUgZ3J1Yi5jZmcgb24gdGhlIGxvY2FsIGJvb3QgbWVkaWEgYnkgdXNpbmcgdGhlCisJIyBidWlsdCBpbiBjZmcgZmlsZSBwcm92aWRlZCB2aWEgdGhpcyByZWNpcGUKKwlncnViLW1raW1hZ2UgLWMgLi4vY2ZnIC1wIC9FRkkvQk9PVCAtZCAuL2dydWItY29yZS8gXAorCSAgICAgICAgICAgICAgIC1PICR7R1JVQl9UQVJHRVR9LWVmaSAtbyAuLyR7R1JVQl9JTUFHRX0gXAorCSAgICAgICAgICAgICAgICR7R1JVQl9CVUlMRElOfQorCWluc3RhbGwgLW0gNjQ0ICR7Qn0vJHtHUlVCX0lNQUdFfSAke0RFUExPWURJUn0KK30KKworZG9fZGVwbG95X2NsYXNzLW5hdGl2ZSgpIHsKKwk6Cit9CisKK2FkZHRhc2sgZGVwbG95IGFmdGVyIGRvX2luc3RhbGwgYmVmb3JlIGRvX2J1aWxkCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2dydWIvJHtHUlVCX1RBUkdFVH0tZWZpLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgL2Jvb3QvZWZpL0VGSS9CT09ULyR7R1JVQl9UQVJHRVR9LWVmaS8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAiCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2dydWIvJHtHUlVCX1RBUkdFVH0tZWZpIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2dydWIgXAorICAgICAgICAgICAgICAgICIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWIvYXV0b2dlbi5zaC1leGNsdWRlLXBjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi9hdXRvZ2VuLnNoLWV4Y2x1ZGUtcGMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM1YWE0ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWIvYXV0b2dlbi5zaC1leGNsdWRlLXBjLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gZmY4ZjY4Y2M0OGZkM2MzMGQ1NWUxZDU3MGQ1MWYyZTA5NTJjOTY4ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogU2F0LCAyNSBKYW4gMjAxNCAyMzo0OTo0NCAtMDUwMAorU3ViamVjdDogW1BBVENIXSBhdXRvZ2VuLnNoOiBleGNsdWRlIC5wYyBmcm9tIHBvL1BPVEZJTEVTLmluCisKK0V4Y2x1ZGUgdGhlIC5wYyBmcm9tIHBvL1BPVEZJTEVTLmluIHNpbmNlIHF1aWx0IHVzZXMgInBhdGNoIC0tYmFja3VwIiwKK3doaWNoIHdpbGwgY3JlYXRlIHRoZSBiYWNrdXAgZmlsZSB1bmRlciAucGMsIHRoaXMgbWF5IGNhdXNlIHVuZXhwZWN0ZWQKK2Vycm9ycywgZm9yIGV4YW1wbGUsIG9uIENlbnRPUyA1LngsIGlmIHRoZSBiYWNrdXAgZmlsZSBpcyBudWxsCisobmV3ZmlsZSksIGl0J3MgbW9kZSB3aWxsIGJlIDAwMCwgdGhlbiB3ZSB3aWxsIGdldCBlcnJvcnMgd2hlbiB4Z2V0dGV4dAordHJ5IHRvIHJlYWQgaXQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgYXV0b2dlbi5zaCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2F1dG9nZW4uc2ggYi9hdXRvZ2VuLnNoCitpbmRleCA3NDI0NDI4Li44NDM2MTllIDEwMDc1NQorLS0tIGEvYXV0b2dlbi5zaAorKysrIGIvYXV0b2dlbi5zaAorQEAgLTUsNyArNSw3IEBAIHNldCAtZQorIGV4cG9ydCBMQ19DT0xMQVRFPUMKKyB1bnNldCBMQ19BTEwKKyAKKy1maW5kIC4gLWluYW1lICcqLltjaF0nICEgLWlwYXRoICcuL2dydWItY29yZS9saWIvbGliZ2NyeXB0LWdydWIvKicgISAtaXBhdGggJy4vYnVpbGQtYXV4LyonICEgLWlwYXRoICcuL2dydWItY29yZS9saWIvbGliZ2NyeXB0L3NyYy9taXNjLmMnICEgLWlwYXRoICcuL2dydWItY29yZS9saWIvbGliZ2NyeXB0L3NyYy9nbG9iYWwuYycgISAtaXBhdGggJy4vZ3J1Yi1jb3JlL2xpYi9saWJnY3J5cHQvc3JjL3NlY21lbS5jJyAgISAtaXBhdGggJy4vdXRpbC9ncnViLWdlbi13aWR0aHNwZWMuYycgISAtaXBhdGggJy4vdXRpbC9ncnViLWdlbi1hc2NpaWguYycgfHNvcnQgPiBwby9QT1RGSUxFUy5pbgorK2ZpbmQgLiAtaW5hbWUgJyouW2NoXScgISAtaXBhdGggJy4vZ3J1Yi1jb3JlL2xpYi9saWJnY3J5cHQtZ3J1Yi8qJyAhIC1pcGF0aCAnLi9idWlsZC1hdXgvKicgISAtaXBhdGggJy4vZ3J1Yi1jb3JlL2xpYi9saWJnY3J5cHQvc3JjL21pc2MuYycgISAtaXBhdGggJy4vZ3J1Yi1jb3JlL2xpYi9saWJnY3J5cHQvc3JjL2dsb2JhbC5jJyAhIC1pcGF0aCAnLi9ncnViLWNvcmUvbGliL2xpYmdjcnlwdC9zcmMvc2VjbWVtLmMnICAhIC1pcGF0aCAnLi91dGlsL2dydWItZ2VuLXdpZHRoc3BlYy5jJyAhIC1pcGF0aCAnLi91dGlsL2dydWItZ2VuLWFzY2lpaC5jJyAhIC1wYXRoICcuLy5wYy8qJyB8IHNvcnQgPiBwby9QT1RGSUxFUy5pbgorIGZpbmQgdXRpbCAtaW5hbWUgJyouaW4nICEgLW5hbWUgTWFrZWZpbGUuaW4gIHxzb3J0ID4gcG8vUE9URklMRVMtc2hlbGwuaW4KKyAKKyBlY2hvICJJbXBvcnRpbmcgdW5pY29kZS4uLiIKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1YjIuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1YjIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMjc3MWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViMi5pbmMKQEAgLTAsMCArMSw1MSBAQAorU1VNTUFSWSA9ICJHUlVCMiBpcyB0aGUgbmV4dC1nZW5lcmF0aW9uIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlciIKKworREVTQ1JJUFRJT04gPSAiR1JVQjIgaXMgdGhlIG5leHQgZ2VuZXJhaW9uIG9mIGEgR1BMZWQgYm9vdGxvYWRlciBcCitpbnRlbmRlZCB0byB1bmlmeSBib290bG9hZGluZyBhY3Jvc3MgeDg2IG9wZXJhdGluZyBzeXN0ZW1zLiBJbiBcCithZGRpdGlvbiB0byBsb2FkaW5nIHRoZSBMaW51eCBrZXJuZWwsIGl0IGltcGxlbWVudHMgdGhlIE11bHRpYm9vdCBcCitzdGFuZGFyZCwgd2hpY2ggYWxsb3dzIGZvciBmbGV4aWJsZSBsb2FkaW5nIG9mIG11bHRpcGxlIGJvb3QgaW1hZ2VzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dydWIvIgorU0VDVElPTiA9ICJib290bG9hZGVycyIKKworTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnUub3JnL2dudS9ncnViL2dydWItJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2dydWItMi4wMC1mcG1hdGgtc3NlLTM4Ny1maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2hlY2staWYtbGlibHptYS1pcy1kaXNhYmxlZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtaXNzdWUtd2l0aC1mbGV4LTIuNS4zNy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViLTIuMDAtYWRkLW9lLWtlcm5lbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViLWluc3RhbGwuaW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLWdldHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWVuZGlhbm5lc3MtcHJvYmxlbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViMi1yZW1vdmUtc3BhcmM2NC1zZXR1cC1mcm9tLXg4Ni1idWlsZHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3J1Yi0yLjAwLWZpeC1lbmFibGVfZXhlY3V0ZV9zdGFjay1jaGVjay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViLW5vLXVudXNlZC1yZXN1bHQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3J1Yi1lZmktYWxsb3ctYS1jb21waWxhdGlvbi13aXRob3V0LW1jbW9kZWwtbGFyZ2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3J1Yi1lZmktZml4LXdpdGgtZ2xpYmMtMi4yMC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcGFyc2VfZGhjcF92ZW5kb3ItQWRkLW1pc3NpbmctY29uc3QtcXVhbGlmaWVycy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViMi1maXgtaW5pdHJkLXNpemUtYnVnLnBhdGNoIFwKKyAgICAgICAgICAgICIKKworREVQRU5EUyA9ICJmbGV4LW5hdGl2ZSBiaXNvbi1uYXRpdmUgeHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlOTI3NTQwYjZlZGE4YjAyNGZiMDM5MWVlYWE0MDkxYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2NWIzOWEwNTU4ZjhjODAyMjA5YzU3NGY0ZDAyY2EyNjNhODA0ZThhNTY0YmM2Y2FmMWNkMGZkM2IzY2MxMWUzIgorCitDT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NC4qfGkuODYuKiktKGxpbnV4fGZyZWVic2QuKiknCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tncnViLW1vdW50XSA9ICItLWVuYWJsZS1ncnViLW1vdW50LC0tZGlzYWJsZS1ncnViLW1vdW50LGZ1c2UiCitQQUNLQUdFQ09ORklHW2RldmljZS1tYXBwZXJdID0gIi0tZW5hYmxlLWRldmljZS1tYXBwZXIsLS1kaXNhYmxlLWRldmljZS1tYXBwZXIsbHZtMiIKKworIyBncnViIGFuZCBncnViLWVmaSdzIHN5c3Jvb3QvJHtkYXRhZGlyfS9ncnViL2dydWItbWtjb25maWdfbGliIGFyZQorIyBjb25mbGljdGVkLCByZW1vdmUgaXQgc2luY2Ugbm8gb25lIHVzZXMgaXQuCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1NfY2xhc3MtdGFyZ2V0ICs9ICJyZW1vdmVfc3lzcm9vdF9ta2NvbmZpZ19saWIiCityZW1vdmVfc3lzcm9vdF9ta2NvbmZpZ19saWIoKSB7CisgICAgcm0gLXIgIiR7U1lTUk9PVF9ERVNURElSfSR7ZGF0YWRpcn0vZ3J1Yi9ncnViLW1rY29uZmlnX2xpYiIKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl8wLjk3LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl8wLjk3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5N2EwNDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViXzAuOTcuYmIKQEAgLTAsMCArMSwzNSBAQAorU1VNTUFSWSA9ICJHUlVCIGlzIHRoZSBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIiCitERVNDUklQVElPTiA9ICJHUlVCIGlzIGEgR1BMZWQgYm9vdGxvYWRlciBpbnRlbmRlZCB0byB1bmlmeSBib290bG9hZGluZyBhY3Jvc3MgeDg2IFwKK29wZXJhdGluZyBzeXN0ZW1zLiBJbiBhZGRpdGlvbiB0byBsb2FkaW5nIHRoZSBMaW51eCBrZXJuZWwsIGl0IGltcGxlbWVudHMgdGhlIE11bHRpYm9vdCBcCitzdGFuZGFyZCwgd2hpY2ggYWxsb3dzIGZvciBmbGV4aWJsZSBsb2FkaW5nIG9mIG11bHRpcGxlIGJvb3QgaW1hZ2VzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9ncnViLyIKK1NFQ1RJT04gPSAiYm9vdGxvYWRlcnMiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzkzYzA1NTBiZDMxNzNmNDUwNGIyY2JkODk5MWU1MGIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3J1Yi9tYWluLmM7YmVnaW5saW5lPTM7ZW5kbGluZT05O21kNT0yMmE1ZjI4ZDIxMzBmZmY5ZjJhMTdlZDU0YmU5MGVkNiIKKworUkRFUEVORFNfJHtQTn0gPSAiZGlmZnV0aWxzIgorUFIgPSAicjYiCisKK1NSQ19VUkkgPSAiZnRwOi8vYWxwaGEuZ251Lm9yZy9nbnUvZ3J1Yi9ncnViLSR7UFZ9LnRhci5nejsgXAorICAgICAgICAgICBmaWxlOi8vbm8tcmVvcmRlci1mdW5jdGlvbnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXV0b2hlbGwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3J1Yl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb2JqY29weS1hYnNvbHV0ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViLXN1cHBvcnQtMjU2Ynl0ZS1pbm9kZS5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjZDNmM2ViNTQ0NDZiZTYwMDMxNTYxNThkNTFmNDg4NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0ZTFkMTVkMTJkYmQzZTkyMDgxMTFkNmI4MDZhZDVhOTg1N2NhODg1MGM0Nzg3N2QzNjU3NWI5MDQ1NTkyNjBiIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0NPTVBBVElCTEVfSE9TVCA9ICJpLjg2LiotbGludXgiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtY3Vyc2VzIgorCitkb19pbnN0YWxsX2FwcGVuZF92bXdhcmUoKSB7CisJbWtkaXIgLXAgJHtEfS9ib290LworCWxuIC1zZiAuLi91c3IvbGliL2dydWIveyRUQVJHRVRfQVJDSH17JFRBUkdFVF9WRU5ET1J9LyAke0R9L2Jvb3QvZ3J1YgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl8yLjAwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl8yLjAwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YTcwOWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViXzIuMDAuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSBncnViMi5pbmMKKworUkRFUEVORFNfJHtQTn0gPSAiZGlmZnV0aWxzIGZyZWV0eXBlIgorUFIgPSAicjEiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9LyR7QlBOfS9pMzg2LXBjLy5kZWJ1ZyIKKworCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXBsYXRmb3JtPXBjIC0tZGlzYWJsZS1ncnViLW1rZm9udCAtLXByb2dyYW0tcHJlZml4PSIiIFwKKyAgICAgICAgICAgICAgIC0tZW5hYmxlLWxpYmx6bWE9bm8gLS1lbmFibGUtZGV2aWNlLW1hcHBlcj1ubyAtLWVuYWJsZS1saWJ6ZnM9bm8iCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2dydWIuZAorfQorCitJTlNBTkVfU0tJUF8ke1BOfSA9ICJhcmNoIgorSU5TQU5FX1NLSVBfJHtQTn0tZGJnID0gImFyY2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWJfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNzYwYzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViX2dpdC5iYgpAQCAtMCwwICsxLDUwIEBACityZXF1aXJlIGdydWIyLmluYworCitERVBFTkRTICs9ICJhdXRvZ2VuLW5hdGl2ZSIKKworREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorREVGQVVMVF9QUkVGRVJFTkNFX2FybSA9ICIxIgorCitQViA9ICIyLjAwKyR7U1JDUFZ9IgorU1JDUkVWID0gIjg3ZGU2NmQ5ZDgzNDQ2ZWNkZGIyOWNmYmRmNzM2OTEwMmM4ZTIwOWUiCitTUkNfVVJJID0gImdpdDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dydWIuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2dydWItMi4wMC1mcG1hdGgtc3NlLTM4Ny1maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXV0b2dlbi5zaC1leGNsdWRlLXBjLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dydWItMi4wMC1hZGQtb2Uta2VybmVsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWJ1aWxkLXdpdGgtZ2xpYmMtMi4yMC5wYXRjaCBcCisgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitDT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NC4qfGkuODYuKnxhcm0uKnxhYXJjaDY0LiopLShsaW51eC4qfGZyZWVic2QuKiknCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCisjIGNvbmZpZ3VyZS5hYyBoYXMgY29kZSB0byBzZXQgdGhpcyBhdXRvbWFnaWNhbGx5IGZyb20gdGhlIHRhcmdldCB0dXBsZQorIyBidXQgdGhlIE9FIGZyZWVmb3JtIG9uZSAoY29yZTItZm9vLWJhci1saW51eCkgZG9uJ3Qgd29yayB3aXRoIHRoYXQuCisKK0dSVUJQTEFURk9STV9hcm0gPSAidWJvb3QiCitHUlVCUExBVEZPUk1fYWFyY2g2NCA9ICJlZmkiCitHUlVCUExBVEZPUk0gPz89ICJwYyIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1wbGF0Zm9ybT0ke0dSVUJQTEFURk9STX0gLS1kaXNhYmxlLWdydWItbWtmb250IC0tcHJvZ3JhbS1wcmVmaXg9IiIgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWxpYmx6bWE9bm8gLS1lbmFibGUtZGV2aWNlLW1hcHBlcj1ubyAtLWVuYWJsZS1saWJ6ZnM9bm8iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICggY2QgJHtTfQorICAgICAgJHtTfS9hdXRvZ2VuLnNoICkKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZ3J1Yi5kCisgCit9CisKKyMgZGVidWdlZGl0IGNob2tlcyBvbiBiYXJlIG1ldGFsIGJpbmFyaWVzCitJTkhJQklUX1BBQ0tBR0VfREVCVUdfU1BMSVQgPSAiMSIKKworUkRFUEVORFNfJHtQTn0gPSAiZGlmZnV0aWxzIGZyZWV0eXBlIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vJHtCUE59LyovLmRlYnVnIgorCitJTlNBTkVfU0tJUF8ke1BOfSA9ICJhcmNoIgorSU5TQU5FX1NLSVBfJHtQTn0tZGJnID0gImFyY2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3VtbWlib290L2d1bW1pYm9vdC9maXgtb2JqY29weS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ndW1taWJvb3QvZ3VtbWlib290L2ZpeC1vYmpjb3B5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZjU1OTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3VtbWlib290L2d1bW1pYm9vdC9maXgtb2JqY29weS5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitGcm9tIDBmN2Y5ZTNiYjFkMGUxYjkzZjNhZDhhMWQ1ZDdiZGQzZmJmMjc0OTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMjcgTWFyIDIwMTQgMDc6MjA6MzMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gTWFrZWZpbGUuYW06IHVzZSBvYmpjb3B5IGZyb20gdGhlIGVudgorCitJdCB1c2VzIHRoZSAib2JqY29weSIgZGlyZWN0bHksIHdoaWNoIGlzIG5vdCBzdWl0YWJsZSBmb3IgY3Jvc3MgY29tcGlsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuYW0gfCA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBnaXQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9NYWtlZmlsZS5hbQorKysrIGdpdC9NYWtlZmlsZS5hbQorQEAgLTE5LDYgKzE5LDggQEAKKyBBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNCAke0FDTE9DQUxfRkxBR1N9CisgQU1fTUFLRUZMQUdTID0gLS1uby1wcmludC1kaXJlY3RvcnkKKyAKKytPQkpDT1BZID89IG9iamNvcHkKKysKKyBndW1taWJvb3RsaWJkaXIgPSAkKHByZWZpeCkvbGliL2d1bW1pYm9vdAorIAorIEFNX0NQUEZMQUdTID0gLWluY2x1ZGUgY29uZmlnLmgKK0BAIC0xNDgsNyArMTUwLDcgQEAgJChndW1taWJvb3Rfc29saWIpOiAkKGd1bW1pYm9vdF9vYmplY3RzKQorIC5ERUxFVEVfT05fRVJST1I6ICQoZ3VtbWJvb3Rfc29saWIpCisgCisgJChndW1taWJvb3QpOiAkKGd1bW1pYm9vdF9zb2xpYikKKy0JJChBTV9WX0dFTikgb2JqY29weSAtaiAudGV4dCAtaiAuc2RhdGEgLWogLmRhdGEgLWogLmR5bmFtaWMgXAorKwkkKEFNX1ZfR0VOKSAkKE9CSkNPUFkpIC1qIC50ZXh0IC1qIC5zZGF0YSAtaiAuZGF0YSAtaiAuZHluYW1pYyBcCisgCSAgLWogLmR5bnN5bSAtaiAucmVsIC1qIC5yZWxhIC1qIC5yZWxvYyBcCisgCSAgLS10YXJnZXQ9ZWZpLWFwcC0kKEFSQ0gpICQ8ICRACisgCitAQCAtMTgzLDcgKzE4NSw3IEBAICQoc3R1Yl9zb2xpYik6ICQoc3R1Yl9vYmplY3RzKQorIC5ERUxFVEVfT05fRVJST1I6ICQoZ3VtbWJvb3Rfc29saWIpCisgCisgJChzdHViKTogJChzdHViX3NvbGliKQorLQkkKEFNX1ZfR0VOKSBvYmpjb3B5IC1qIC50ZXh0IC1qIC5zZGF0YSAtaiAuZGF0YSAtaiAuZHluYW1pYyBcCisrCSQoQU1fVl9HRU4pICQoT0JKQ09QWSkgLWogLnRleHQgLWogLnNkYXRhIC1qIC5kYXRhIC1qIC5keW5hbWljIFwKKyAJICAtaiAuZHluc3ltIC1qIC5yZWwgLWogLnJlbGEgLWogLnJlbG9jIFwKKyAJICAtLXRhcmdldD1lZmktYXBwLSQoQVJDSCkgJDwgJEAKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ndW1taWJvb3QvZ3VtbWlib290X2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ndW1taWJvb3QvZ3VtbWlib290X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWMzZGI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2d1bW1pYm9vdC9ndW1taWJvb3RfZ2l0LmJiCkBAIC0wLDAgKzEsMzQgQEAKK1NVTU1BUlkgPSAiR3VtbWlib290IGlzIGEgc2ltcGxlIFVFRkkgYm9vdCBtYW5hZ2VyIHdoaWNoIGV4ZWN1dGVzIGNvbmZpZ3VyZWQgRUZJIGltYWdlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvZ3VtbWlib290IgorCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCisKK0RFUEVORFMgPSAiZ251LWVmaSB1dGlsLWxpbnV4IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKK2luaGVyaXQgZGVwbG95CisKK1BWID0gIjQ4K2dpdCR7U1JDUFZ9IgorU1JDUkVWID0gIjJiY2Q5MTljNjgxYzk1MmViODY3ZWYxYmRiNDU4ZjFiYzQ5YzJkNTUiCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2d1bW1pYm9vdCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtb2JqY29weS5wYXRjaCBcCisgICAgICAgICAgIgorCisjIE5vdGU6IEFkZCBDT01QQVRJQkxFX0hPU1QgaGVyZSBpcyBvbmx5IGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBnbnUtZWZpCisjIHdoaWNoIGhhcyBzZXQgdGhlIENPTVBBVElCTEVfSE9TVCwgdGhlIGd1bW1pYm9vdCBpdHNlbGYgbWF5IHdvcmsgb24KKyMgbW9yZSBob3N0cy4KK0NPTVBBVElCTEVfSE9TVCA9ICIoeDg2XzY0Lip8aS44Ni4qKS1saW51eCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1tYW5wYWdlcyAtLXdpdGgtZWZpLWluY2x1ZGVkaXI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICAgICAgICAgIC0td2l0aC1lZmktbGRzZGlyPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtZWZpLWxpYmRpcj0ke1NUQUdJTkdfTElCRElSfSIKKworRVhUUkFfT0VNQUtFICs9ICJndW1taWJvb3RsaWJkaXI9JHtsaWJkaXJ9L2d1bW1pYm9vdCIKKworZG9fZGVwbG95ICgpIHsKKyAgICAgICAgaW5zdGFsbCAke0J9L2d1bW1pYm9vdCouZWZpICR7REVQTE9ZRElSfQorfQorYWRkdGFzayBkZXBsb3kgYmVmb3JlIGRvX2J1aWxkIGFmdGVyIGRvX2NvbXBpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvQ09QWUlORy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvQ09QWUlORy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWM3MGM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9DT1BZSU5HLnBhdGNoCkBAIC0wLDAgKzEsMzQ2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXQorCitkaWZmIC1ydU4gaG9zdGFwLWNvbmYtMS4wLW9yaWcvQ09QWUlORyBob3N0YXAtY29uZi0xLjAvQ09QWUlORworLS0tIGhvc3RhcC1jb25mLTEuMC1vcmlnL0NPUFlJTkcJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBob3N0YXAtY29uZi0xLjAvQ09QWUlORwkyMDEwLTEyLTA5IDE2OjM2OjQ4LjAwMDAwMDAwMCArMDgwMAorQEAgLTAsMCArMSwzNDAgQEAKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisrCisrIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICAgICAgICAgICAgICAgICAgICAgIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKysgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisrIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorKworKwkJCSAgICBQcmVhbWJsZQorKworKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCisrTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCisrR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKKytGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCisrdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQorK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworK3lvdXIgcHJvZ3JhbXMsIHRvby4KKysKKysgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKKytwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CisraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgorK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAorK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CisraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorKworKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KKytUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKysKKysgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKKytncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKKyt5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKKytyaWdodHMuCisrCisrICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisrKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKKytkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorKworKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KKyt0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQorK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCisrdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKKythdXRob3JzJyByZXB1dGF0aW9ucy4KKysKKysgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCisrcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKKytwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKKytwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorKworKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKKyttb2RpZmljYXRpb24gZm9sbG93LgorKwwKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorKworKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCisrdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6CisrdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKKytlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KKyt0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKysKKytBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKKytydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCisraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorKworKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCisrc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91CisrY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKKytub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CisrYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisrCisrWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCisreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKysKKysgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KKytvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCisrZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCisrYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKysKKysgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisrICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisrCisrICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKysgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKysgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisrICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKysgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKysgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisrICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKysgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKysgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKysgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKysMCisrVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgorK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCisrYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCisrdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgorK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCisrZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorKworK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAorK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisrCisrSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQorK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCisrdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAorK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKysKKysgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKysgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisrICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisrICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKysgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisrICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisrICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisrICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKysgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisrCisrVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCisrY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKKythc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KKytjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCisrc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCisrYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKKytmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CisraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorKworK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKKythY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CisrYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCisrZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90CisrY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKysMCisrICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKytleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0Cisrb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCisrdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCisrdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKKytwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisrCisrICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKKytzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKKyttb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKKyt0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKysKKysgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KKyt0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KKytZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bworK3RoaXMgTGljZW5zZS4KKysKKysgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKKytpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKKytvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CisrZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKKytkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCisrTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKKytsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CisrYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCisrdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisrCisrSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCisrYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCisrY2lyY3Vtc3RhbmNlcy4KKysKKytJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CisrcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKKytzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCisraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCisraW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCisrZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAorK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0Cisrc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZworK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAorK2ltcG9zZSB0aGF0IGNob2ljZS4KKysKKytUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KKytiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKysMCisrICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKKyttYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKKyt0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCisrY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCisrdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorKworK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KKytzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKKytlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKKyt0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrRm91bmRhdGlvbi4KKysKKysgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKKytwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCisrdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCisrbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKKytvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCisrb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisrCisrCQkJICAgIE5PIFdBUlJBTlRZCisrCisrICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKKytGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KKytPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCisrUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKKytPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKKytUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCisrUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCisrUkVQQUlSIE9SIENPUlJFQ1RJT04uCisrCisrICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCisrV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCisrSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCisrT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCisrUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCisrUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorKworKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKysMCisrCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKysKKysgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKKytwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CisrZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisrCisrICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAorK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKKytjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAorK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorKworKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisrCisrCisrQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisrCisrSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcworK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisrCisrICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisrICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKysgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorKworK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKKytiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKKyttb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorKworK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCisrc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKKytuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisrCisrICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisrICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKysKKysgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKysKKytUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KKytwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXAtZnctbG9hZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvaG9zdGFwLWZ3LWxvYWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUwYmRjMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvaG9zdGFwLWZ3LWxvYWQucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorCisjCisjIFBhdGNoIG1hbmFnZWQgYnkgaHR0cDovL3d3dy5ob2xnZXJzY2h1cmlnLmRlL3BhdGNoZXIuaHRtbAorIworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKy0tLSBob3N0YXAtdXRpbHMtMC4yLjQvaG9zdGFwX2Z3X2xvYWR+aG9zdGFwLWZ3LWxvYWQKKysrKyBob3N0YXAtdXRpbHMtMC4yLjQvaG9zdGFwX2Z3X2xvYWQKK0BAIC02LDkgKzYsOSBAQAorICMgRmlybXdhcmUgaW1hZ2VzIGZvciB0aGUgY2FyZAorICMgVE9ETzogY291bGQgdHJ5IHRvIHNlbGVjdCBjb3JyZWN0IGZpcm13YXJlIHR5cGUgYXV0b21hdGljYWxseQorIAorLVBSST0vZXRjL3BjbWNpYS9QTTAxMDEwMi5IRVgKKy1TVEE9L2V0Yy9wY21jaWEvUkYwMTA4MDIuSEVYCistUFJJU00yX1NSRUM9L3Vzci9sb2NhbC9iaW4vcHJpc20yX3NyZWMKKytQUkk9L2V0Yy9wY21jaWEvcG0wMTAxMDIuaGV4CisrU1RBPS9ldGMvcGNtY2lhL3JmMDEwODA0LmhleAorK1BSSVNNMl9TUkVDPS91c3Ivc2Jpbi9wcmlzbTJfc3JlYworIAorIHNldCAtZQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXBfY3MuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvaG9zdGFwX2NzLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRkYTgyYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvaG9zdGFwX2NzLmNvbmYKQEAgLTAsMCArMSwxOTMgQEAKK21vZHVsZSAiaG9zdGFwX2NzIiBvcHRzICJjaGFubmVsPTMgaXdfbW9kZT0yIGVzc2lkPWFueSBpZ25vcmVfY2lzX3ZjYz0xIgorCitjYXJkICJBY3Rpb250ZWMgODAyQ0kyIgorICBtYW5maWQgMHgxNjY4LCAweDAxMDEKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJBaXJXYXkgODAyLjExIEFkYXB0ZXIgKFBDTUNJQSkiCisgICN2ZXJzaW9uICJBaXJXYXkiLCAiODAyLjExIEFkYXB0ZXIgKFBDTUNJQSkiCisgIG1hbmZpZCAweDAyNjEsIDB4MDAwMgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkFzdXMgU3BhY2VMaW5rIFdMMTEwIgorICAgbWFuZmlkIDB4MDJhYSwweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworIyMgaGFuZGhlbGRzLm9yZyBidWcgOTY0CitjYXJkICJCZWxraW4gRjVENjA2MCBFdGhlcm5ldCIKKyAgICN2ZXJzaW9uICJQQ01DSUEiLCAiMTFNIFdMQU4gQ2FyZCB2Mi41IiwgIklTTDM3MzAwUCIsICJSZXZBIgorICAgbWFuZmlkIDB4MDI3NCwgMHgxNjEyCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkNvbXBhcSAxMU1icHMgV2lyZWxlc3MgUEMgQ2FyZCIKKyAgbWFuZmlkIDB4MDI4YSwgMHgwMDAyCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQ29tcGFxIFdMMTAwIDExIE1icHMgV2lyZWxlc3MgQWRhcHRlciIKKyAgbWFuZmlkIDB4MDEzOCwgMHgwMDAyCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQ29tcGFxIEhOVy0xMDAgMTEgTWJwcyBXaXJlbGVzcyBBZGFwdGVyIgorICBtYW5maWQgMHgwMjhhLCAweDAwMDIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJELUxpbmsgRFdMLTY1MCIKKyAgdmVyc2lvbiAiRCIsICJMaW5rIERXTC02NTAgMTFNYnBzIFdMQU4gQ2FyZCIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJELUxpbmsgRFJDLTY1MCIKKyAgdmVyc2lvbiAiRCIsICJMaW5rIERSQy02NTAgMTFNYnBzIFdMQU4gQ2FyZCIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJELUxpbmsgRENGNjYwIgorICBtYW5maWQgMHhkNjAxLCAweDAwMDUKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJGYXJhbGxvbiBTa3lMSU5FIgorICB2ZXJzaW9uICJJTlRFUlNJTCIsICJIRkEzODR4L0lFRUUiCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiSHlwZXJMaW5rIFdpcmVsZXNzIFBDIENhcmQgMTFNYnBzIgorICB2ZXJzaW9uICJIeXBlckxpbmsiLCAiV2lyZWxlc3MgUEMgQ2FyZCAxMU1icHMiCisgIGJpbmQgImhvc3RhcF9jcyIKKworIyBjYXJkICJJbnRlcnNpbCBQUklTTTIgMTEgTWJwcyBXaXJlbGVzcyBBZGFwdGVyIgorIyAgIG1hbmZpZCAweDAxNTYsIDB4MDAwMgorIyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMQTQxMTEgU3BlY3RydW0yNCBXaXJlbGVzcyBMQU4gUEMgQ2FyZCIKKyAgdmVyc2lvbiAiU3ltYm9sIFRlY2hub2xvZ2llcyIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMaW5rc3lzIFdQQzExIDExTWJwcyA4MDIuMTFiIFdMQU4gQ2FyZCIKKyAgdmVyc2lvbiAiSW5zdGFudCBXaXJlbGVzcyAiLCAiIE5ldHdvcmsgUEMgQ0FSRCIsICJWZXJzaW9uIDAxLjAyIgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkxpbmtzeXMgV0NGMTEgMTFNYnBzIDgwMi4xMWIgV0xBTiBDYXJkIgorICAgbWFuZmlkIDB4MDI3NCwgMHgzMzAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIGJpbmQgImhvc3RhcF9jcyIgCisKKyMjIGhhbmRoZWxkcy5vcmcgYnVnICM3OTAKK2NhcmQgIkxpbmtzeXMgV2lyZWxlc3MgQ29tcGFjdEZsYXNoIENhcmQgV0NGMTIiCisgIG1hbmZpZCAweDAyOGEsIDB4MDY3MworICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkxpbmtzeXMgV0xBTiBDRiBDYXJkIgorICBtYW5maWQgMHgwMjc0LCAweDMzMDEKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJORVRHRUFSIE1BNzAxIFdpcmVsZXNzIENGIENhcmQiCisgIG1hbmZpZCAweGQ2MDEsIDB4MDAwMgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIk5vcnRlbCBOZXR3b3JrcyBlTW9iaWxpdHkgODAyLjExIFdpcmVsZXNzIEFkYXB0ZXIiCisgIG1hbmZpZCAweDAxZWIsIDB4MDgwYQorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlBMQU5FWCBHZW9XYXZlIEdXLUNGMTEwIgorICB2ZXJzaW9uICJQTEFORVgiLCAiR2VvV2F2ZS9HVy1DRjExMCIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJQUk9YSU0gTEFOIFBDIENBUkQgSEFSTU9OWSA4MDIxMUIiCisgIHZlcnNpb24gIlBST1hJTSIsICJMQU4gUEMgQ0FSRCBIQVJNT05ZIDgwMjExQiIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJQcm94aW0gUmFuZ2VMQU4vRFMiCisgIHZlcnNpb24gIlBST1hJTSIsIlJhbmdlTEFOLURTL0xBTiBQQyBDQVJEIgorICBtYW5maWQgMHgwMTI2LCAweDgwMDAKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJTYWZld2F5IDgwMi4xMWIgV2lyZWxlc3MgQWRhcHRlciIKKyAgbWFuZmlkIDB4ZDYwMSwgMHgwMDAyCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiU0FNU1VORyAxMU1icHMgV0xBTiBDYXJkIgorICB2ZXJzaW9uICJTQU1TVU5HIiwgIjExTWJwcyBXTEFOIENhcmQiCisgIGJpbmQgImhvc3RhcF9jcyIKKworIyBuZWVkcyBmaXJtd2FyZSB1cGxvYWQgdmlhIGhvc3RhcF9md19sb2FkCitjYXJkICJTYW5EaXNrIENvbm5lY3RQbHVzIE9FTSAoME1CKSIKKyAgIG1hbmZpZCAweGQ2MDEsIDB4MDAxMAorICAgYmluZCAiaG9zdGFwX2NzIgorCisjIG5lZWRzIHNwZWNpYWwgYWN0aXZhdGlvbiAoPj1ob3N0YXAgMC4zLjIgb25seSkgcGx1cyBmaXJtd2FyZSB1cGxvYWQKK2NhcmQgIlNhbkRpc2sgQ29ubmVjdFBsdXMgdy8gTWVtb3J5IgorICAgdmVyc2lvbiAiU2FuRGlzayIsICJDb25uZWN0UGx1cyIKKyAgIG1hbmZpZCAweGQ2MDEsIDB4MDEwMQorICAgYmluZCAiaG9zdGFwX2NzIiB0byAwCisjICAgYmluZCAiaWRlLWNzIiB0byAxCisKK2NhcmQgIlNlbmFvL09yaWdvIDgwMjExYiBXTEFOIENhcmQiCisgICBtYW5maWQgMHgwMDBiLDB4NzEwMAorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJTaXRlY29tIFdMLTAwNyBXTEFOIENGIENhcmQiCisgIG1hbmZpZCAweGQ2MDEsIDB4MDAwNAorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNNQzI2MzIgODAyLjExIChwcmlzbTIpIENhcmQiCisgIHZlcnNpb24gIlNNQyIsICJTTUMyNjMyVyIsICJWZXJzaW9uIDAxLjAyIiwgIiIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJTcGVlZFN0cmVhbSBTUzEwMjEgV2lyZWxlc3MgQWRhcHRlciIKKyAgI3ZlcnNpb24gIlNpZW1lbnMiLCAiU3BlZWRTdHJlYW0gV2lyZWxlc3MgUENNQ0lBIgorICBtYW5maWQgMHgwMmFjLCAweDAwMDIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJaQ09NQVggQWlyUnVubmVyL1hJLTMwMCIKKyAgI3ZlcnNpb24gIlpDT01BWCIsICJBaXJSdW5uZXIvWEktMzAwIgorICBtYW5maWQgMHhkNjAxLCAweDAwMDIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJab25ldCBaQ0YxMTAwIgorICBtYW5maWQgMHgwMDBiLCAweDcxMDAKKyAgYmluZCAiaG9zdGFwX2NzIgorICAKK2NhcmQgIldpcmVsZXNzIExBTiBBZGFwdGVyIFZlcnNpb24gMDEuMDIiCisgICB2ZXJzaW9uICJXaXJlbGVzcyIsICJMQU4gQWRhcHRlciIsICJWZXJzaW9uIDAxLjAyIgorIyAgIG1hbmZpZCAweDAxNTYsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJBbWJpY29tIFdMMTEwMEMgMTFNYnMgQ2FyZCA4MDIuMTFiIgorICB2ZXJzaW9uICJBbWJpQ29tIiwgIldMMTEwMEMgODAyLjExYiBDRi1DYXJkIiwgIjIuMiIKKyAgbWFuZmlkIDB4ZDYwMSwweDAwMDIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJBbWJpY29tIFdMMTEwMEMgMTFNYnMgQ2FyZCA4MDIuMTFiIgorICBtYW5maWQgMHhkNjAxLDB4MDAwMgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNhbmRpc2sgQ29ubmVjdCBTRFdDRkItMDAwIgorICBtYW5maWQgMHhkNjAxLDB4MDAwNQorICBiaW5kICJob3N0YXBfY3MiCisKKyMgQ2FyZHMgd2l0aCBJbnRlcnNpbCBmaXJtd2FyZSAoUHJpc20gY2hpcHNldCkKKworY2FyZCAiTGlua3N5cyBXUEMxMSAxMU1icHMgODAyLjExYiBXTEFOIENhcmQiCisgIHZlcnNpb24gIlRoZSBMaW5rc3lzIEdyb3VwLCBJbmMuIiwgIkluc3RhbnQgV2lyZWxlc3MgTmV0d29yayBQQyBDYXJkIiwgIklTTDM3MzAwUCIsICJSZXZBIgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkxpbmtzeXMgQ29tcGFjdEZsYXNoIFdpcmVsZXNzIENhcmQiCisgIHZlcnNpb24gIkxpbmtzeXMiLCAiV2lyZWxlc3MgQ29tcGFjdEZsYXNoIENhcmQiCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQUNUSU9OVEVDIFBSSVNNIFdpcmVsZXNzIExBTiBQQyBDYXJkIgorICB2ZXJzaW9uICJBQ1RJT05URUMiLCAiUFJJU00gV2lyZWxlc3MgTEFOIFBDIENhcmQiCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTGlua3N5cyBXUEMxMSBWZXJzaW9uIDMiCisgIG1hbmZpZCAweDAyNzQsMHgxNjEzCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQkVOUSBBV0wxMDAiCisgIHZlcnNpb24gIkJFTlEiLCAiQVdMMTAwIFBDTUNJQSBBREFQVEVSIgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlByZXRlYyBXTEFOIgorICB2ZXJzaW9uICJQcmV0ZWMiLCAiQ29tcGFjdFdMQU4gQ2FyZCA4MDIuMTFiIiwgIjIuNSIKKyAgbWFuZmlkIDB4MDE1NiwgMHgwMDAyCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiVHJlbmROZXQgVEVXIFBDMTYiCisgIG1hbmZpZCAweDAyNzQsIDB4MTYwMQorICBiaW5kICJob3N0YXBfY3MiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL2hvc3RhcF9jcy5jb25mLXVwc3RyZWFtIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXBfY3MuY29uZi11cHN0cmVhbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjczODVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXBfY3MuY29uZi11cHN0cmVhbQpAQCAtMCwwICsxLDE5MSBAQAorZGV2aWNlICJob3N0YXBfY3MiCisgICBjbGFzcyAibmV0d29yayIgbW9kdWxlICJob3N0YXAiLCAiaG9zdGFwX2NzIgorCitjYXJkICJJbnRlcnNpbCBQUklTTTIgUmVmZXJlbmNlIERlc2lnbiAxMU1iL3MgV0xBTiBDYXJkIgorICAgdmVyc2lvbiAiSU5URVJTSUwiLCAiSEZBMzg0eC9JRUVFIgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJDb21wYXEgV0wxMDAgMTFNYi9zIFdMQU4gQ2FyZCIKKyAgIG1hbmZpZCAweDAxMzgsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJDb21wYXEgV0wyMDAiCisgICB2ZXJzaW9uICJDb21wYXEiLCAiV0wyMDBfMTFNYnBzX1dpcmVsZXNzX1BDSV9DYXJkIgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJFTVRBQyBBMjQyNGkgMTFNYnBzIFdMQU4gQ2FyZCIKKyAgIG1hbmZpZCAweGMyNTAsIDB4MDAwMgorIyAgIGNpcyAiY2lzL0VtdGFjLmRhdCIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTGlua3N5cyBXUEMxMSAxMU1icHMgV0xBTiBDYXJkIgorICAgdmVyc2lvbiAiSW5zdGFudCBXaXJlbGVzcyAiLCAiIE5ldHdvcmsgUEMgQ0FSRCIsICJWZXJzaW9uIDAxLjAyIgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMaW5rc3lzIFdQQzExIFZlciAyLjUgMTFNYnBzIFdMQU4gQ2FyZCIKKyAgIG1hbmZpZCAweDAyNzQsIDB4MTYxMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMaW5rc3lzIFdQQzExIFZlciAzIDExTWJwcyBXTEFOIENhcmQiCisgICBtYW5maWQgMHgwMjc0LCAweDE2MTMKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTGlua3N5cyBXQ0YxMiBXaXJlbGVzcyBDb21wYWN0Rmxhc2ggQ2FyZCIKKyAgIHZlcnNpb24gIkxpbmtzeXMiLCAiV2lyZWxlc3MgQ29tcGFjdEZsYXNoIENhcmQiCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkQtTGluayBEV0wtNjUwIDExTWJwcyBXTEFOIENhcmQiCisgICB2ZXJzaW9uICJEIiwgIkxpbmsgRFdMLTY1MCAxMU1icHMgV0xBTiBDYXJkIiwgIlZlcnNpb24gMDEuMDIiCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkQtTGluayBEUkMtNjUwIDExTWJwcyBXTEFOIENhcmQiCisjICB2ZXJzaW9uICJEIiwgIkxpbmsgRFJDLTY1MCAxMU1icHMgV0xBTiBDYXJkIiwgIlZlcnNpb24gMDEuMDIiCisgICBtYW5maWQgMHgwMjhhLCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiWm9vbUFpciA0MTAwIDExTWIvcyBXTEFOIENhcmQiCisgICB2ZXJzaW9uICJab29tQWlyIDExTWJwcyBIaWdoIiwgIlJhdGUgd2lyZWxlc3MgTmV0d29ya2luZyIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQWRkdHJvbiBBV1AtMTAwIDExTWJwcyBXTEFOIENhcmQiCisgICB2ZXJzaW9uICJBZGR0cm9uIiwgIkFXUC0xMDAgV2lyZWxlc3MgUENNQ0lBIiwgIlZlcnNpb24gMDEuMDIiCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNhbXN1bmcgU1dMMjAwMC1OIDExTWIvcyBXTEFOIENhcmQiCisgICBtYW5maWQgMHgwMjUwLCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiU01DIDI2MzJXIDExTWJwcyBXTEFOIENhcmQiCisgICB2ZXJzaW9uICJTTUMiLCAiU01DMjYzMlciLCAiVmVyc2lvbiAwMS4wMiIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQnJvTWF4IEZyZWVwb3J0IDExTWJwcyBXTEFOIENhcmQiCisgICB2ZXJzaW9uICJJbnRlcnNpbCIsICJQUklTTSAyXzUgUENNQ0lBIEFEQVBURVIiLCAiSVNMMzczMDBQIiwgIkV2YWwtUmV2QSIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiWi1Db20gWEkzMDAgMTFNYi9zIFdMQU4gQ2FyZCIKKyAgIG1hbmZpZCAweGQ2MDEsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJaY29tYXggWEktMzI1SCAyMDBtVyIKKyMgICB2ZXJzaW9uICIgIiwgIklFRUUgODAyLjExIFdpcmVsZXNzIExBTi9QQyBDYXJkIgorICAgbWFuZmlkIDB4ZDYwMSwgMHgwMDA1CisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIjNDb20gQWlyQ29ubmVjdCBQQ0kgNzc3QSIKKyAgIG1hbmZpZCAweDAxMDEsIDB4MDc3NworICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJVLlMuIFJvYm90aWNzIElFRUUgODAyLjExYiBQQy1DQVJEIgorICAgdmVyc2lvbiAiVS5TLiBSb2JvdGljcyIsICJJRUVFIDgwMi4xMWIgUEMtQ0FSRCIsICJWZXJzaW9uIDAxLjAyIgorIyAgIG1hbmZpZCAweDAxNTYsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMb25nc2hpbmUgTENSLTg1MzEgMTFNYnBzIFdMQU4gUENNQ0lBIENBUkQiCisgICB2ZXJzaW9uICJPRU0iLCAiUFJJU00yIElFRUUgODAyLjExIFBDLUNhcmQiLCAiVmVyc2lvbiAwMS4wMiIKKyMgICBtYW5maWQgMHgwMTU2LCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiUGhpbGlwcyA4MDIuMTFiIFdMQU4gUENNQ0lBIgorICAgbWFuZmlkIDB4MDAwYiwgMHg3MzAwCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlByb3hpbSBSYW5nZUxBTiIKKyMgICB2ZXJzaW9uICJQUk9YSU0iLCAiUmFuZ2VMQU4tRFMvTEFOIFBDIENBUkQiCisgICBtYW5maWQgMHgwMTI2LCAweDgwMDAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQnVmZmFsbyBXTEktQ0YtUzExRyIKKyAgIHZlcnNpb24gIkJVRkZBTE8iLCAiV0xJLUNGLVMxMUciCisjICBtYW5maWQgMHgwMjZmLCAweDAzMGIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTGV2ZWwtT25lIFdQQy0wMTAwIgorICAgdmVyc2lvbiAiRGlnaXRhbCBEYXRhIENvbW11bmljYXRpb25zIiwgIldQQy0wMTAwIiwgIlZlcnNpb24gMDAuMDAiCisgICBtYW5maWQgMHgwMTU2LCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQmVsa2luIDgwMi4xMWIgV0xBTiBQQ01DSUEiCisgICB2ZXJzaW9uICJCZWxraW4iLCAiMTFNYnBzIFdpcmVsZXNzIE5vdGVib29rIE5ldHdvcmsgQWRhcHRlciIsICJWZXJzaW9uIDAxLjAyIgorICAgbWFuZmlkIDB4MDE1NiwgMHgwMDAyCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNlbmFvIFNMLTIwMTFDRC9TTC0yMDExQ0RQTFVTIgorICAgdmVyc2lvbiAiSU5URVJTSUwiLCAiSEZBMzg0eC9JRUVFIiwgIlZlcnNpb24gMDEuMDIiCisgICBtYW5maWQgMHgwMTU2LCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiRnVsYm9uZCBBaXJib25kIFhJLTMwMEIiCisgICB2ZXJzaW9uICIgIiwgIklFRUUgODAyLjExIFdpcmVsZXNzIExBTi9QQyBDYXJkIgorICAgbWFuZmlkIDB4ZDYwMSwgMHgwMDAyCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIk5ldGdlYXIgTUE0MDEiCisgICB2ZXJzaW9uICJORVRHRUFSIE1BNDAxIFdpcmVsZXNzIFBDIiwgIkNhcmQiLCAiVmVyc2lvbiAwMS4wMCIKKyMgICBtYW5maWQgMHgwMTU2LCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiRC1MaW5rIERXTC02NTAgUmV2LiBQMSIKKyAgIHZlcnNpb24gIkQtTGluayIsICJEV0wtNjUwIFdpcmVsZXNzIFBDIENhcmQgUmV2UCIsICJJU0wzNzEwMVAtMTAiLCAiQTMiCisjICAgbWFuZmlkIDB4MDAwYiwgMHg3MTEwCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNvbmljV0FMTCBMb25nIFJhbmdlIFdpcmVsZXNzIENhcmQiCisgICB2ZXJzaW9uICJTb25pY1dBTEwiLCAiTG9uZyBSYW5nZSBXaXJlbGVzcyBDYXJkIiwgIklTTDM3MTAwUCIsICIxLjAiCisgICBtYW5maWQgMHgwMDBiLCAweDcxMDAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiU2VuYW8gTkwtMjAxMUNEIFBMVVMgRXh0MiBNZXJjdXJ5IgorICAgdmVyc2lvbiAiV0xBTiIsICIxMU1icHNfUEMtQ2FyZF8zLjAiLCAiSVNMMzcxMDBQIiwgIkV2YWwtUmV2QSIKKyAgIG1hbmZpZCAweDAwMGIsIDB4NzEwMAorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJBaXJ2YXN0IFdMMTAwIgorICAgdmVyc2lvbiAiQUlSVkFTVCIsICJJRUVFIDgwMi4xMWIgV2lyZWxlc3MgUENNQ0lBIENhcmQiLCAiSEZBMzg2MyIKKyAgIG1hbmZpZCAweDUwYzIsIDB4MDAwMQorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJNaWNyb3NvZnQgV2lyZWxlc3MgTm90ZWJvb2sgQWRhcHRlciBNTi01MjAgMS4wLjMiCisgICB2ZXJzaW9uICJNaWNyb3NvZnQiLCAiV2lyZWxlc3MgTm90ZWJvb2sgQWRhcHRlciBNTi01MjAiLCAiIiwgIjEuMC4zIgorICAgbWFuZmlkIDB4MDJkMiwgMHgwMDAxCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIk5FVEdFQVIgTUE0MDFSQSIKKyAgIHZlcnNpb24gIk5FVEdFQVIgTUE0MDFSQSBXaXJlbGVzcyBQQyIsICJDYXJkIiwgIklTTDM3MzAwUCIsICJFdmFsLVJldkEiCisgICBtYW5maWQgMHgwMDBiLCAweDczMDAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQWxsaWVkIFRlbGVzeW4gQVQtV0NMNDUyIgorICAgdmVyc2lvbiAiQWxsaWVkIFRlbGVzeW4iLCAiQVQtV0NMNDUyIFdpcmVsZXNzIFBDTUNJQSBSYWRpbyIsICJWZXIuIDEuMDAiCisgICBtYW5maWQgMHhjMDBmLCAweDAwMDAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiY29yZWdhIFdMIFBDQ0wtMTEiCisgICB2ZXJzaW9uICJjb3JlZ2EiLCAiV0wgUENDTC0xMSIsICJJU0wzNzMwMFAiLCAiUmV2QSIKKyAgIG1hbmZpZCAweGMwMGYsIDB4MDAwMAorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJTYW5EaXNrIENvbm5lY3RQbHVzIgorICAgdmVyc2lvbiAiU2FuRGlzayIsICJDb25uZWN0UGx1cyIKKyAgIG1hbmZpZCAweGQ2MDEsIDB4MDEwMQorICAgYmluZCAiaG9zdGFwX2NzIiB0byAwCisgICBiaW5kICJpZGUtY3MiIHRvIDEKKworY2FyZCAiQVNVUyBXTC0xMDAgODAxMWIgV0xBTiBQQyBDYXJkIgorICAgdmVyc2lvbiAiQVNVUyIsICI4MDJfMTFiX1BDX0NBUkRfMjUiLCAiVmVyc2lvbiAwMS4wMCIKKyAgIG1hbmZpZCAweDAyYWEsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJaeVhlbCBaeWFpciBCLTEwMSA4MDIuMTFiIFdMQU4gY2FyZCIKKyAgIHZlcnNpb24gIiAiLCAiSUVFRSA4MDIuMTEgV2lyZWxlc3MgTEFOL1BDIENhcmQiCisgICBtYW5maWQgMHhkNjAxLCAweDAwMTAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiV0xBTiBQUklTTSBQQ01DSUEgQ0FSRCAzNzMwMFAgUmV2QjYiCisgICB2ZXJzaW9uICJXTEFOIiwgIlBSSVNNIFBDTUNJQSBDQVJEIiwgIjM3MzAwUCIsICJSZXZpc2lvbiBCNiIKKyAgIG1hbmZpZCAweDUwYzIsIDB4NzMwMAorICAgYmluZCAiaG9zdGFwX2NzIgorCisKKyMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBob3N0YXBfY3MubworIyBtb2R1bGUgImhvc3RhcF9jcyIgb3B0cyAiY2hhbm5lbD0zIGl3X21vZGU9MyBlc3NpZD10ZXN0IGlnbm9yZV9jaXNfdmNjPTAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL2hvc3RhcF9jcy5tb2RhbGlhcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvaG9zdGFwX2NzLm1vZGFsaWFzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NDgzNTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL2hvc3RhcF9jcy5tb2RhbGlhcwpAQCAtMCwwICsxLDI4IEBACisjIHByb2R1Y3QgaW5mbzogIlByZXRlYyIsICJDb21wYWN0V0xBTiBDYXJkIDgwMi4xMWIiLCAiMi41IgorYWxpYXMgcGNtY2lhOm0wMTU2YzAwMDJmMDZmbjAwcGZuMDBwYTFDQUREM0U1cGJFNjk3NjM2Q3BjN0E1QkZDRjFwZDAwMDAwMDAwIGhvc3RhcF9jcworCisjIG1hbnVmYWN0dXJlciBJRCB3aGljaCBleGlzdCBpbiBvcmlub2NvX2NzIEFORCBpbiBob3N0YXBfY3MKK2FsaWFzIHBjbWNpYTptMDAwQmM3MTAwZjA2Zm4wMHBmbjAwcGEqcGIqcGMqcGQqIGhvc3RhcF9jcworYWxpYXMgcGNtY2lhOm0wMDBCYzczMDBmMDZmbjAwcGZuMDBwYSpwYipwYypwZCogaG9zdGFwX2NzCithbGlhcyBwY21jaWE6bTAxMjZjODAwMGYwNmZuMDBwZm4wMHBhKnBiKnBjKnBkKiBob3N0YXBfY3MKK2FsaWFzIHBjbWNpYTptMDEzOGMwMDAyZjA2Zm4wMHBmbjAwcGEqcGIqcGMqcGQqIGhvc3RhcF9jcworYWxpYXMgcGNtY2lhOm0wMjUwYzAwMDJmMDZmbjAwcGZuMDBwYSpwYipwYypwZCogaG9zdGFwX2NzCithbGlhcyBwY21jaWE6bTAyNzRjMTYxMmYwNmZuMDBwZm4wMHBhKnBiKnBjKnBkKiBob3N0YXBfY3MKK2FsaWFzIHBjbWNpYTptMDI3NGMxNjEzZjA2Zm4wMHBmbjAwcGEqcGIqcGMqcGQqIGhvc3RhcF9jcworYWxpYXMgcGNtY2lhOm0wMjhBYzAwMDJmMDZmbjAwcGZuMDBwYSpwYipwYypwZCogaG9zdGFwX2NzCithbGlhcyBwY21jaWE6bTAyQUFjMDAwMmYwNmZuMDBwZm4wMHBhKnBiKnBjKnBkKiBob3N0YXBfY3MKK2FsaWFzIHBjbWNpYTptNTBDMmM3MzAwZjA2Zm4wMHBmbjAwcGEqcGIqcGMqcGQqIGhvc3RhcF9jcworYWxpYXMgcGNtY2lhOm1ENjAxYzAwMDJmMDZmbjAwcGZuMDBwYSpwYipwYypwZCogaG9zdGFwX2NzCithbGlhcyBwY21jaWE6bUQ2MDFjMDAwNWYwNmZuMDBwZm4wMHBhKnBiKnBjKnBkKiBob3N0YXBfY3MKKworIyBwcm9kdWN0IGluZm86ICJMaW5rc3lzIiwgIldpcmVsZXNzIENvbXBhY3RGbGFzaCBDYXJkIiwgIiIsICIiCithbGlhcyBwY21jaWE6bTAyOEFjMDY3M2YwNmZuMDBwZm4wMHBhMDczM0NDODFwYjBDNTJGMzk1cGMwMDAwMDAwMHBkMDAwMDAwMDAgaG9zdGFwX2NzCisKKyMgcHJvZHVjdCBpbmZvOiJQTEFORVggQ09NTVVOSUNBVElPTiBJTkMiLCJQTEFORVggR1ctQ0YxMVggV2lyZWxlc3MgQ0YgQ2FyZCIsICIiLCAiIgorYWxpYXMgcGNtY2lhOm1ENjAxYzAwMTBmMDZmbjAwcGZuMDBwYTQ3MDNDRjY4cGJGQUQ3MzE4RHBjMDAwMDAwMDBwZDAwMDAwMDAwIGhvc3RhcF9jcworCisjIDB4MDE1NiwgMHgwMDAyIGFuZCAiVmVyc2lvbiAwMS4wMiIgb25seSBhcHBlYXIgZm9yIFByaXNtIGJhc2VkIGNhcmRzLgorYWxpYXMgcGNtY2lhOm0wMTU2YzAwMDJmMDZmbjAwcGZuMDBwYSpwYipwYzRCNzRCQUEwcGQwMDAwMDAwMCBob3N0YXBfY3MKKworIyAiQlVGRkFMTyIsICJXTEktQ0YtUzExRyIsICIiLCAiIgorYWxpYXMgcGNtY2lhOm0wMjZGYzAzMEJmMDZmbjAwcGZuMDBwYTJERUNFQ0UzcGI4MjA2N0MxOHBjMDAwMDAwMDBwZDAwMDAwMDAwIGhvc3RhcF9jcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtY29uZl8xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2hvc3RhcC1jb25mXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWQ0YzU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtY29uZl8xLjAuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJDb25maWd1cmF0aW9uIGZpbGVzIGZvciBIb3N0QVAgKHdpZmkpIGRyaXZlciIKK0RFU0NSSVBUSU9OID0gIlBDTUNJQS1jcyBjb25maWd1cmF0aW9uIGZpbGVzIGZvciB3aXJlbGVzcyBMQU4gY2FyZHMgYmFzZWQgb24gSW50ZXJzaWwncyBQcmlzbTIvMi41LzMgY2hpcHNldC4iCitTRUNUSU9OID0gImtlcm5lbC9tb2R1bGVzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTM5M2E1Y2E0NDVmNjk2NTg3M2VjYTAyNTlhMTdmODMzIgorUFIgPSAicjE1IgorCitTUkNfVVJJID0gImZpbGU6Ly9ob3N0YXBfY3MubW9kYWxpYXMgXAorICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5wYXRjaCIKKworaW5oZXJpdCBhbGxhcmNoCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9fY29tcGlsZSgpIHsKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L21vZHByb2JlLmQKKworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2hvc3RhcF9jcy5tb2RhbGlhcyAke0R9JHtzeXNjb25mZGlyfS9tb2Rwcm9iZS5kL2hvc3RhcF9jcy5jb25mCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLXV0aWxzLTAuNC43L2xkZmxhZ3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2hvc3RhcC11dGlscy0wLjQuNy9sZGZsYWdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlOTlkMGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2hvc3RhcC11dGlscy0wLjQuNy9sZGZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK09iZXkgTERGTEFHUworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBob3N0YXAtdXRpbHMtMC40Ljcub3JpZy9NYWtlZmlsZQorKysrIGhvc3RhcC11dGlscy0wLjQuNy9NYWtlZmlsZQorQEAgLTE0LDE3ICsxNCwxNyBAQCBwcmlzbTJfc3JlYy5vOiBwcmlzbTJfc3JlYy5jIHV0aWwuaAorIGhvc3RhcF9jcnlwdF9jb25mOiBob3N0YXBfY3J5cHRfY29uZi5jCisKKyBob3N0YXBfZGlhZzogaG9zdGFwX2RpYWcubyB1dGlsLm8KKy0JJChDQykgLW8gaG9zdGFwX2RpYWcgJChDRkxBR1MpIGhvc3RhcF9kaWFnLm8gdXRpbC5vCisrCSQoQ0MpIC1vIGhvc3RhcF9kaWFnICQoQ0ZMQUdTKSAkKExERkxBR1MpIGhvc3RhcF9kaWFnLm8gdXRpbC5vCisKKyBob3N0YXBfZGlhZy5vOiBob3N0YXBfZGlhZy5jIHV0aWwuaAorCisgdXRpbC5vOiB1dGlsLmMgdXRpbC5oCisKKyBob3N0YXBfaW9fZGVidWc6IGhvc3RhcF9pb19kZWJ1Zy5jCistCSQoQ0MpIC1vIGhvc3RhcF9pb19kZWJ1ZyAkKENGTEFHUykgaG9zdGFwX2lvX2RlYnVnLmMKKysJJChDQykgLW8gaG9zdGFwX2lvX2RlYnVnICQoQ0ZMQUdTKSAkKExERkxBR1MpIGhvc3RhcF9pb19kZWJ1Zy5jCisKKyBob3N0YXBfcmlkOiBob3N0YXBfcmlkLm8gdXRpbC5vCistCSQoQ0MpIC1vIGhvc3RhcF9yaWQgJChDRkxBR1MpIGhvc3RhcF9yaWQubyB1dGlsLm8KKysJJChDQykgLW8gaG9zdGFwX3JpZCAkKENGTEFHUykgJChMREZMQUdTKSBob3N0YXBfcmlkLm8gdXRpbC5vCisKKyBob3N0YXBfcmlkLm86IGhvc3RhcF9yaWQuYyB1dGlsLmgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLXV0aWxzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLXV0aWxzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWQ5NzdhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtdXRpbHMuaW5jCkBAIC0wLDAgKzEsMjYgQEAKK1NVTU1BUlkgPSAiVXNlciBtb2RlIGhlbHBlcnMgZm9yIHRoZSBob3N0YXAgZHJpdmVyIgorREVTQ1JJUFRJT04gPSAiVGhlIGhvc3RhcCBkcml2ZXIgc3VwcG9ydHMgSG9zdCBBUCBtb2RlLCBpdCBhbGxvd3MgZm9yIElFRUUgODAyLjExIFwKK21hbmFnZW1lbnQgZnVuY3Rpb25zIG9uIHRoZSBob3N0IGNvbXB1dGVyIGFuZCBhbGxvd3MgdGhlIHN5c3RlbSB0byBhY3QgYXMgYW4gYWNjZXNzIHBvaW50LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9ob3N0YXAuZXBpdGVzdC5maSIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2hvc3RhcC5lcGl0ZXN0LmZpL2J1Z3ovIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIFwKKwkJCWZpbGU6Ly91dGlsLmM7YmVnaW5saW5lPTE7ZW5kbGluZT05O21kNT1kM2I5MjgwODUxMzAyZTViYTM0ZTVmYjcxNzQ4OWI2ZCIKK1NFQ1RJT04gPSAia2VybmVsL3VzZXJsYW5kIgorUFIgPSAicjQiCisKK1NSQ19VUkkgPSAiaHR0cDovL2hvc3RhcC5lcGl0ZXN0LmZpL3JlbGVhc2VzL2hvc3RhcC11dGlscy0ke1BWfS50YXIuZ3ogXAorCSAgIGZpbGU6Ly9ob3N0YXAtZnctbG9hZC5wYXRjaCIKK1MgPSAiJHtXT1JLRElSfS9ob3N0YXAtdXRpbHMtJHtQVn0iCisKK0JJTkFSSUVTID0gImhvc3RhcF9jcnlwdF9jb25mIGhvc3RhcF9kaWFnIGhvc3RhcF9md19sb2FkIGhvc3RhcF9pb19kZWJ1ZyBcCisJICAgIGhvc3RhcF9yaWQgcHJpc20yX3BhcmFtIHByaXNtMl9zcmVjIHNwbGl0X2NvbWJpbmVkX2hleCIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9LworCWZvciBmIGluICR7QklOQVJJRVN9CisJZG8KKwkJaW5zdGFsbCAtbSAwNzU1ICRmICR7RH0ke3NiaW5kaXJ9LworCWRvbmUKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtdXRpbHNfMC40LjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2hvc3RhcC11dGlsc18wLjQuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTU0ODFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtdXRpbHNfMC40LjcuYmIKQEAgLTAsMCArMSw1IEBACityZXF1aXJlIGhvc3RhcC11dGlscy5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL2xkZmxhZ3MucGF0Y2giCitTUkNfVVJJW21kNXN1bV0gPSAiYWZlMDQxNTgxYjhmMDE2NjZlMzUzYmVjMjA5MTdjODUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzZmNTk4ZDhlMzU2YzE2MjBmYTAwOWVjYTBhNzAwYmYxMTA1ZTE2ODE3ZWVmZDc3ZDg5MTk5NDI2MTAwOTM1NSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9rZXltYXBzL2ZpbGVzL0dQTHYyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2tleW1hcHMvZmlsZXMvR1BMdjIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVlODE4MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9rZXltYXBzL2ZpbGVzL0dQTHYyLnBhdGNoCkBAIC0wLDAgKzEsMzQ3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9DT1BZSU5HCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDUxMTkwNQorLS0tIC9kZXYvbnVsbAorKysrIGIvQ09QWUlORworQEAgLTAsMCArMSwzMzkgQEAKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisrCisrIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisrIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKysgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisrIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorKworKwkJCSAgICBQcmVhbWJsZQorKworKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCisrTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCisrR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKKytGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCisrdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQorK3RoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCisreW91ciBwcm9ncmFtcywgdG9vLgorKworKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKKytoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCisrdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CisraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKKytpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisrCisrICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCisrYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CisrZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorKworKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAorK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCisrc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorK3JpZ2h0cy4KKysKKysgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKysoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisrCisrICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgorK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCisrc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCisrd2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KKyt0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorKworKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKKytwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCisrcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisrCisrICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorK21vZGlmaWNhdGlvbiBmb2xsb3cuCisrCisrCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKysgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKysKKysgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKKythIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAorK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKKytyZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKKyttZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgorK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCisrZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKKytsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCisrdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisrCisrQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKKytjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCisrcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQorK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KKytXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKysKKysgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKKytjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCisrbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKKythbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorKworK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAorK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisrCisrICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCisrb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisrCisrICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorKworKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKysgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisrICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisrICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKysKKysgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisrICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKysgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisrICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisrICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisrICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisrICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKysgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisrCisrVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgorK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCisrYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCisrdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgorK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCisrZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorKworK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAorK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisrCisrSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQorK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCisrdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAorK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKysKKysgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKysgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisrICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisrICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKysgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisrICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisrICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisrICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKysgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisrCisrVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCisrY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKKythc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KKytjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCisrc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCisrYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKKytmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CisraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorKworK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKKythY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CisrYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCisrZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90CisrY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKysKKysgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKKytvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKKyt2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCisrSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKKyt0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKysKKysgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCisrZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCisrcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCisrYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZworK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorKworKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCisrb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bworK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCisrcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCisrdGhpcyBMaWNlbnNlLgorKworKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAorK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCisrY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKKytleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKKytMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CisrbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKKythbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KKyt0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCisrcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKysKKytJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKKythbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCisrYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKKytjaXJjdW1zdGFuY2VzLgorKworK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKKytwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKKytpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKKytpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKKytnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCisrdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKKytzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCisrdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CisraW1wb3NlIHRoYXQgY2hvaWNlLgorKworK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KKytjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKKytvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCisrbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCisrdGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcworK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKKytvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKKytiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KKythZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKysKKytFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCisrc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKKytsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCisrZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKytTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCisrdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorK0ZvdW5kYXRpb24uCisrCisrICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCisrcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgorK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCisrb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorKworKwkJCSAgICBOTyBXQVJSQU5UWQorKworKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCisrRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCisrT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECisrT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCisrVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorKworKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKKytSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKKytUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKKytZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKysKKysJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisrCisrCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKysKKysgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKKytwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CisrZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisrCisrICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAorK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKKytjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAorK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorKworKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorKyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorKworK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorKworK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKKyt3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorKworKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKysgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisrICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKysKKytUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKKytwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CisrYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCisrbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKysKKytZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCisrbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorKworKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisrCisrICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKysgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisrCisrVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCisrcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKKytjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKKytsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2tleW1hcHMvZmlsZXMva2V5bWFwLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2tleW1hcHMvZmlsZXMva2V5bWFwLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZlYmM2MzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Ava2V5bWFwcy9maWxlcy9rZXltYXAuc2gKQEAgLTAsMCArMSwxNiBAQAorIyEvYmluL3NoCisjCisjIGxvYWQga2V5bWFwLCBpZiBleGlzdGluZworCitLRVJORUxfTUFKTUlOPWB1bmFtZSAtciB8IGN1dCAtZCAnLicgLWYgMSwyYAoraWYgWyAtZSAvZXRjL2tleW1hcC0kS0VSTkVMX01BSk1JTi5tYXAgXTsgdGhlbgorCWxvYWRrZXlzIC9ldGMva2V5bWFwLSRLRVJORUxfTUFKTUlOLm1hcAorZmkKKworaWYgKCBscyAiL2V0YyIgfCBncmVwIC1xICJrZXltYXAtZXh0ZW5zaW9uLSR7S0VSTkVMX01BSk1JTn0iICkKK3RoZW4KKwlmb3IgZXh0ZW5zaW9uIGluIGBscyAtMSAvZXRjL2tleW1hcC1leHRlbnNpb24tJEtFUk5FTF9NQUpNSU4qYCAKKwlkbwkKKwkJbG9hZGtleXMgIiRleHRlbnNpb24iCisJZG9uZQorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9rZXltYXBzL2tleW1hcHNfMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2tleW1hcHMva2V5bWFwc18xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc5M2E3NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9rZXltYXBzL2tleW1hcHNfMS4wLmJiCkBAIC0wLDAgKzEsNTAgQEAKK1NVTU1BUlkgPSAiS2V5Ym9hcmQgbWFwcyIKK0RFU0NSSVBUSU9OID0gIktleW1hcHMgYW5kIGluaXRzY3JpcHQgdG8gc2V0IHRoZSBrZXltYXAgb24gYm9vdHVwLiIKK1NFQ1RJT04gPSAiYmFzZSIKKworUkRFUEVORFNfJHtQTn0gPSAia2JkIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorUFIgPSAicjMxIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCisjIEFzIHRoZSByZWNpcGUgZG9lc24ndCBpbmhlcml0IHN5c3RlbWQuYmJjbGFzcywgd2UgbmVlZCB0byBzZXQgdGhpcyB2YXJpYWJsZQorIyBtYW51YWxseSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBwb3N0aW5zdC9wcmVpbnN0IGdlbmVyYXRlZC4KK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgZC5zZXRWYXIoIklOSElCSVRfVVBEQVRFUkNEX0JCQ0xBU1MiLCAiMSIpCit9CisKK2luaGVyaXQgdXBkYXRlLXJjLmQKKworU1JDX1VSSSA9ICJmaWxlOi8va2V5bWFwLnNoIFwKKwkgICBmaWxlOi8vR1BMdjIucGF0Y2giCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJrZXltYXAuc2giCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAwMSBTIC4iCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCAoKSB7CisgICAgIyBPbmx5IGluc3RhbGwgdGhlIHNjcmlwdCBpZiAnc3lzdmluaXQnIGlzIGluIERJU1RST19GRUFUVVJFUworICAgICMgVEhlIHVsaXRpdHkgdGhpcyBzY3JpcHQgcHJvdmlkZXMgY291bGQgYmUgYWNoaWV2ZWQgYnkgc3lzdGVtZC12Y29uc29sZS1zZXR1cC5zZXJ2aWNlCisgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9rZXltYXAuc2ggJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworICAgIGZpCit9CisKK0RFUEVORFNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3N5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZScsJycsZCl9IgorcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCBzeXN2aW5pdCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCQlPUFRTPSItLXJvb3Q9JEQiCisJCWZpCisJCXN5c3RlbWN0bCAkT1BUUyBtYXNrIGtleW1hcC5zZXJ2aWNlCisJZmkKK30KKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2ZpbGVzL2xkZmxhZ3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy9sZGZsYWdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NDI0YzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy9sZGZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK2xpYmFjcGk6IFJlbW92ZSBRQSB3YXJuaW5nOiBObyBHTlVfSEFTSCBpbiB0aGUgZWxmIGJpbmFyeQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXQorICBVc2VmdWwgd2l0aGluIGJpdGJha2UgZW52aXJvbm1lbnQgb25seS4KKworU2lnbmVkLW9mZi1ieTogTXVoYW1tYWQgU2hha2VlbCA8bXVoYW1tYWRfc2hha2VlbEBtZW50b3IuY29tPgorCistLS0KKyBNYWtlZmlsZSAgfCAgICAzICsrLQorIGNvbmZpZy5tayB8ICAgIDEgKworIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBsaWJhY3BpLTAuMi5vcmlnL01ha2VmaWxlCisrKysgbGliYWNwaS0wLjIvTWFrZWZpbGUKK0BAIC0xOSw2ICsxOSw3IEBAIG9wdGlvbnM6CisgCUBlY2hvICJDRkxBR1MgICA9ICR7Q0ZMQUdTfSIKKyAJQGVjaG8gIkNDICAgICAgID0gJHtDQ30iCisgCUBlY2hvICJTT0ZMQUdTICA9ICR7U09GTEFHU30iCisrCUBlY2hvICJMREZMQUdTICA9ICR7TERGTEFHU30iCisgCUBlY2hvICJMRCAgICAgICA9ICR7TER9IgorIAorIC5jLm86CitAQCAtMzQsNyArMzUsNyBAQCBsaWJhY3BpLmE6ICR7T0JKfQorIAorIGxpYmFjcGkuc286ICR7T0JKfQorIAlAZWNobyBMRCAkQAorLQlAJHtDQ30gJHtTT0ZMQUdTfSAtbyAkQC4ke1NPVkVSU0lPTn0gJHtPQkp9CisrCUAke0NDfSAke1NPRkxBR1N9ICR7TERGTEFHU30gLW8gJEAuJHtTT1ZFUlNJT059ICR7T0JKfQorIAorIHRlc3QtbGliYWNwaTogJHtPQkpfdGVzdH0KKyAJQGVjaG8gTEQgJEAKKy0tLSBsaWJhY3BpLTAuMi5vcmlnL2NvbmZpZy5taworKysrIGxpYmFjcGktMC4yL2NvbmZpZy5taworQEAgLTEwLDYgKzEwLDcgQEAgTUFOUFJFRklYID0gJHtQUkVGSVh9L3NoYXJlL21hbgorIFNPRkxBR1MgPSAtc2hhcmVkIC1XbCwtc29uYW1lLCR7U09OQU1FfQorIENGTEFHUyArPSAtZlBJQyAtZyAtLXBlZGFudGljIC1XYWxsIC1XZXh0cmEKKyBBUkZMQUdTID0gY3IKKytMREZMQUdTID0KKyAKKyAjIENvbXBpbGVyIGFuZCBsaW5rZXIKKyBDQyA9IGNjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy9saWJhY3BpX2ZpeF9mb3JfeDMyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvbGliYWNwaV9maXhfZm9yX3gzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmVkMzQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvbGliYWNwaV9maXhfZm9yX3gzMi5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworRml4IGxpYmFjcGkgZm9yIHgzMgorICAgIAorICAgIGxpYmFjcGkgZG9lc24ndCB1c2UgYmFzZV9saWJkaXIgZm9yIGluc3RhbGwuICBUaGlzIHBhdGNoIGFkZHMKKyAgICBiYXNlX2xpYmRpciBzdXBwb3J0IHNvIHRoYXQgeDMyIGxpYnJhcmllcyBhcmUgaW5zdGFsbGVkIHByb3Blcmx5LgorCitQYXRjaCBSZWNlaXZlZCBmcm9tOiAgSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8xMi8wNQorCitJbmRleDogbGliYWNwaS0wLjIvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhY3BpLTAuMi5vcmlnL01ha2VmaWxlCisrKysgbGliYWNwaS0wLjIvTWFrZWZpbGUKK0BAIC04LDYgKzgsMTAgQEAgU1JDX3Rlc3QgPSB0ZXN0LWxpYmFjcGkuYyBsaWJhY3BpLmMgbGlzdAorIE9CSiA9ICR7U1JDOi5jPS5vfQorIE9CSl90ZXN0ID0gJHtTUkNfdGVzdDouYz0ub30KKyAKKytpZm5kZWYgYmFzZV9saWJkaXIKKytiYXNlX2xpYmRpcj0vbGliCisrZW5kaWYKKysKKyBhbGw6IG9wdGlvbnMgbGliYWNwaS5hIGxpYmFjcGkuc28gdGVzdC1saWJhY3BpCisgCisgb3B0aW9uczoKK0BAIC00MiwxMyArNDYsMTMgQEAgaW5zdGFsbDogYWxsCisgCUBta2RpciAtcCAke0RFU1RESVJ9JHtQUkVGSVh9L2luY2x1ZGUKKyAJQGNwIC1mIGxpYmFjcGkuaCAke0RFU1RESVJ9JHtQUkVGSVh9L2luY2x1ZGUKKyAJQGNobW9kIDY0NCAke0RFU1RESVJ9JHtQUkVGSVh9L2luY2x1ZGUvbGliYWNwaS5oCistCUBlY2hvIGluc3RhbGxpbmcgbGlicmFyeSB0byAke0RFU1RESVJ9JHtQUkVGSVh9L2xpYgorLQlAbWtkaXIgLXAgJHtERVNURElSfSR7UFJFRklYfS9saWIKKy0JQGNwIC1mIGxpYmFjcGkuYSAke0RFU1RESVJ9JHtQUkVGSVh9L2xpYgorLQlAY2htb2QgNjQ0ICR7REVTVERJUn0ke1BSRUZJWH0vbGliL2xpYmFjcGkuYQorLQlAY3AgLWYgJHtTT05BTUV9ICR7REVTVERJUn0ke1BSRUZJWH0vbGliLworLQlAY2htb2QgNjQ0ICR7REVTVERJUn0ke1BSRUZJWH0vbGliLyR7U09OQU1FfQorLQlAbG4gLXMgJHtTT05BTUV9ICR7REVTVERJUn0ke1BSRUZJWH0vbGliL2xpYmFjcGkuc28KKysJQGVjaG8gaW5zdGFsbGluZyBsaWJyYXJ5IHRvICR7REVTVERJUn0ke1BSRUZJWH0ke2Jhc2VfbGliZGlyfQorKwlAbWtkaXIgLXAgJHtERVNURElSfSR7UFJFRklYfSR7YmFzZV9saWJkaXJ9CisrCUBjcCAtZiBsaWJhY3BpLmEgJHtERVNURElSfSR7UFJFRklYfSR7YmFzZV9saWJkaXJ9CisrCUBjaG1vZCA2NDQgJHtERVNURElSfSR7UFJFRklYfSR7YmFzZV9saWJkaXJ9L2xpYmFjcGkuYQorKwlAY3AgLWYgJHtTT05BTUV9ICR7REVTVERJUn0ke1BSRUZJWH0ke2Jhc2VfbGliZGlyfS8KKysJQGNobW9kIDY0NCAke0RFU1RESVJ9JHtQUkVGSVh9JHtiYXNlX2xpYmRpcn0vJHtTT05BTUV9CisrCUBsbiAtcyAke1NPTkFNRX0gJHtERVNURElSfSR7UFJFRklYfSR7YmFzZV9saWJkaXJ9L2xpYmFjcGkuc28KKyAJQGVjaG8gaW5zdGFsbGluZyB0ZXN0LWxpYmFjcGkgdG8gJHtERVNURElSfSR7UFJFRklYfS9iaW4KKyAJQG1rZGlyIC1wICR7REVTVERJUn0ke1BSRUZJWH0vYmluCisgCUBjcCAtZiB0ZXN0LWxpYmFjcGkgJHtERVNURElSfSR7UFJFRklYfS9iaW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2ZpbGVzL21ha2VmaWxlLWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2ZpbGVzL21ha2VmaWxlLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzRlZjM0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvbWFrZWZpbGUtZml4LnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0KKyBNYWtlZmlsZSAgfCAgICA2ICsrKy0tLQorIGNvbmZpZy5tayB8ICAgIDMgKystCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK0luZGV4OiBsaWJhY3BpLTAuMi9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmFjcGktMC4yLm9yaWcvTWFrZWZpbGUJMjAwNy0wNy0yOSAxNDowOTozNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBsaWJhY3BpLTAuMi9NYWtlZmlsZQkyMDA4LTA5LTI2IDEwOjM0OjUzLjAwMDAwMDAwMCArMDIwMAorQEAgLTI1LDE2ICsyNSwxNiBAQCAke09CSn06IGNvbmZpZy5tayBsaWJhY3BpLmgKKyAKKyBsaWJhY3BpLmE6ICR7T0JKfQorIAlAZWNobyBBUiAkQAorLQlAJHtBUn0gJEAgJHtPQkp9CisrCSR7QVJ9ICR7QVJGTEFHU30gJEAgJHtPQkp9CisgCUAke1JBTkxJQn0gJEAKKyAKKyBsaWJhY3BpLnNvOiAke09CSn0KKyAJQGVjaG8gTEQgJEAKKy0JQCR7TER9ICR7U09GTEFHU30gLW8gJEAuJHtTT1ZFUlNJT059ICR7T0JKfQorKwlAJHtDQ30gJHtTT0ZMQUdTfSAtbyAkQC4ke1NPVkVSU0lPTn0gJHtPQkp9CisgCisgdGVzdC1saWJhY3BpOiAke09CSl90ZXN0fQorIAlAZWNobyBMRCAkQAorLQlAJHtMRH0gLW8gJEAgJHtPQkpfdGVzdH0gJHtMREZMQUdTfQorKwlAJHtDQ30gLW8gJEAgJHtPQkpfdGVzdH0gJHtMREZMQUdTfQorIAlAc3RyaXAgJEAKKyAKKyBpbnN0YWxsOiBhbGwKK0luZGV4OiBsaWJhY3BpLTAuMi9jb25maWcubWsKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhY3BpLTAuMi5vcmlnL2NvbmZpZy5tawkyMDA3LTA3LTI5IDE0OjA5OjM0LjAwMDAwMDAwMCArMDIwMAorKysrIGxpYmFjcGktMC4yL2NvbmZpZy5tawkyMDA4LTA5LTI2IDEwOjM0OjMzLjAwMDAwMDAwMCArMDIwMAorQEAgLTksOSArOSwxMCBAQCBNQU5QUkVGSVggPSAke1BSRUZJWH0vc2hhcmUvbWFuCisgIyBmbGFncworIFNPRkxBR1MgPSAtc2hhcmVkIC1XbCwtc29uYW1lLCR7U09OQU1FfQorIENGTEFHUyArPSAtZlBJQyAtZyAtLXBlZGFudGljIC1XYWxsIC1XZXh0cmEKKytBUkZMQUdTID0gY3IKKyAKKyAjIENvbXBpbGVyIGFuZCBsaW5rZXIKKyBDQyA9IGNjCisgTEQgPSAke0NDfQorLUFSID0gYXIgY3IKKytBUiA9IGFyCisgUkFOTElCID0gcmFubGliCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy91c2VfY29ycmVjdF9zdHJpcF9pbl9jcm9zc19lbnZpcm9ubWVudC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2ZpbGVzL3VzZV9jb3JyZWN0X3N0cmlwX2luX2Nyb3NzX2Vudmlyb25tZW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYTc1ZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy91c2VfY29ycmVjdF9zdHJpcF9pbl9jcm9zc19lbnZpcm9ubWVudC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVXNlZCB0aGUgY3Jvc3Mgc3RyaXAgaW5zdGVhZCBvZiBob3N0IHN0cmlwIHRvIGF2b2lkIHRoaXMgYnVpbGQgZXJyb3I6CisKK3wgc3RyaXA6IFVuYWJsZSB0byByZWNvZ25pc2UgdGhlIGZvcm1hdCBvZiB0aGUgaW5wdXQgZmlsZSBgdGVzdC1saWJhY3BpJworfCBtYWtlOiAqKiogW3Rlc3QtbGliYWNwaV0gRXJyb3IgMQorfCBFUlJPUjogb2VfcnVubWFrZSBmYWlsZWQKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8xMi8wNworCitJbmRleDogbGliYWNwaS0wLjIvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhY3BpLTAuMi5vcmlnL01ha2VmaWxlCisrKysgbGliYWNwaS0wLjIvTWFrZWZpbGUKK0BAIC0zOSw3ICszOSw3IEBAIGxpYmFjcGkuc286ICR7T0JKfQorIHRlc3QtbGliYWNwaTogJHtPQkpfdGVzdH0KKyAJQGVjaG8gTEQgJEAKKyAJQCR7Q0N9IC1vICRAICR7T0JKX3Rlc3R9ICR7TERGTEFHU30KKy0JQHN0cmlwICRACisrCUAke1NUUklQfSAkQAorIAorIGluc3RhbGw6IGFsbAorIAlAZWNobyBpbnN0YWxsaW5nIGhlYWRlciB0byAke0RFU1RESVJ9JHtQUkVGSVh9L2luY2x1ZGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2xpYmFjcGlfMC4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvbGliYWNwaV8wLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYzMDJmMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2xpYmFjcGlfMC4yLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiQUNQSSBkYXRhIGdhdGhlcmluZyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiR2VuZXJhbCBwdXJwb3NlIHNoYXJlZCBsaWJyYXJ5IGZvciBwcm9ncmFtcyBnYXRoZXJpbmcgQUNQSSBkYXRhIG9uIExpbnV4LiBcCitUaGVybWFsIHpvbmVzLCBiYXR0ZXJ5IGluZm9tcmF0aW9uLCBmYW4gaW5mb3JtYXRpb24gYW5kIEFDIHN0YXRlcyBhcmUgaW1wbGVtZW50ZWQuIgorU0VDVElPTiA9ICJiYXNlIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5uZ29sZGUuZGUvbGliYWNwaS5odG1sIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1mZWMxN2Y4MmYxNjYzMGFkZjJkZmI3ZDJhNDZmMjFjNSIKK1BSID0gInI2IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubmdvbGRlLmRlL2Rvd25sb2FkL2xpYmFjcGktJHtQVn0udGFyLmd6IFwKKwkgICBmaWxlOi8vbWFrZWZpbGUtZml4LnBhdGNoIFwKKwkgICBmaWxlOi8vbGliYWNwaV9maXhfZm9yX3gzMi5wYXRjaCBcCisJICAgZmlsZTovL3VzZV9jb3JyZWN0X3N0cmlwX2luX2Nyb3NzX2Vudmlyb25tZW50LnBhdGNoIFwKKwkgICBmaWxlOi8vbGRmbGFncy5wYXRjaCAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwNWI1M2RkN2JlYWQ2NmRkYTM1ZmVjNTAyYjkxMDY2YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxMzA4NmUzMWQ0MjhiOWMxMjU5NTRkNDhhYzQ5N2I3NTRiYmJjZTJlZjM0ZWEyOWVjZDkwM2U4MmUyNWJhZDI5IgorCitpbmhlcml0IGxpYl9wYWNrYWdlCisKK0NPTVBBVElCTEVfSE9TVCA9ICcoeDg2XzY0fGkuODYpLiotKGxpbnV4fGZyZWVic2QuKiknCisKK0NGTEFHUyArPSAiLWZQSUMiCitFWFRSQV9PRU1BS0UgKz0gJ1NUUklQPSJlY2hvIicKKworVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSBQUkVGSVg9JHtleGVjX3ByZWZpeH0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2FjZGVmaW5lLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvYWNkZWZpbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgyY2Y0MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2FjZGVmaW5lLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK0FkZCBhIGRlc2NyaXB0aW9uIHRvIHRoZSBBQ19ERUZJTkUgZm9yIExPQ0FMRURJUiBzbyB0aGF0IGl0IGFwcGVhcnMgaW4gY29uZmlnLmgKK2FuZCBzaWxlbmNlcyBhIGZhdGFsIHdhcm5pbmcuCisKK1Vwc3RyZWFtLVN0YXR1czpQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCitpbmRleCBjMTA0NjBjLi5hYTIwMjYzIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC0yNTgsNyArMjU4LDcgQEAgQUNfU1VCU1QoTElCUykKKyAKKyBBTV9HTlVfR0VUVEVYVAorIAorLUFDX0RFRklORV9VTlFVT1RFRChMT0NBTEVESVIsIiRwcmVmaXgvJERBVEFESVJOQU1FIikKKytBQ19ERUZJTkVfVU5RVU9URUQoTE9DQUxFRElSLCIkcHJlZml4LyREQVRBRElSTkFNRSIsW2xvY2FsZSBkaXJlY3RvcnldKQorIAorIEFDX09VVFBVVChbTWFrZWZpbGUgaW50bC9NYWtlZmlsZSBsaWIvTWFrZWZpbGUgdGVzdHN1aXRlL01ha2VmaWxlICBtNC9NYWtlZmlsZSBcCisgbWFuL01ha2VmaWxlIHBvL01ha2VmaWxlLmluIHNyYy9NYWtlZmlsZSBkZWJpYW4vcnVsZXMgU3BlY2ZpbGUgc3lzdHlwZSBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9hdXRvdG9vbHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9hdXRvdG9vbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk0NTE5OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2F1dG90b29scy5wYXRjaApAQCAtMCwwICsxLDM5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKy0tLSBscnpzei0wLjEyLjIwL2FjaW5jbHVkZS5tNH5hdXRvdG9vbHMJMTk5OC0xMi0yNyAxNzowODo1OS4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2FjaW5jbHVkZS5tNAkyMDA0LTA1LTA5IDIyOjI2OjE5LjAwMDAwMDAwMCAtMDQwMAorQEAgLTEsMTIgKzEsMTEgQEAKKyBkbmwgQUNfUkVQTEFDRV9HTlVfR0VUT1BUCistQUNfREVGVU4oQUNfUkVQTEFDRV9HTlVfR0VUT1BULAorLVtBQ19DSEVDS19GVU5DKGdldG9wdF9sb25nLCAsIFtMSUJPQkpTPSIkTElCT0JKUyBnZXRvcHQxLm8gZ2V0b3B0Lm8iXSkKKy1BQ19TVUJTVChMSUJPQkpTKWRubAorLV0pCisrQUNfREVGVU4oW0FDX1JFUExBQ0VfR05VX0dFVE9QVF0sCisrW0FDX0NIRUNLX0ZVTkMoZ2V0b3B0X2xvbmcsICwgW0FDX0xJQk9CSihbZ2V0b3B0MV0pCisrQUNfTElCT0JKKFtnZXRvcHRdKWRubF0pXSkKKyAKKyBkbmwKKyBkbmwgdGFrZW4gZnJvbSB0YXlsb3IgdXVjcAorLUFDX0RFRlVOKExSWlNaX0VSUk5PX0RFQ0wsWworK0FDX0RFRlVOKFtMUlpTWl9FUlJOT19ERUNMXSxbCisgQUNfTVNHX0NIRUNLSU5HKGZvciBlcnJubyBkZWNsYXJhdGlvbikKKyBBQ19DQUNIRV9WQUwobHJ6c3pfY3ZfZGVjbF9lcnJubywKKyBbQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxlcnJuby5oPl0sIFtpbnQgaSA9IGVycm5vOyBlcnJubyA9IDE7XSwKK0BAIC0yMyw3ICsyMSw3IEBACisgXSkKKyAKKyBkbmwgTFJaU1pfVFlQRV9TUEVFRF9UCistQUNfREVGVU4oTFJaU1pfVFlQRV9TUEVFRF9ULFsKKytBQ19ERUZVTihbTFJaU1pfVFlQRV9TUEVFRF9UXSxbCisgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKWRubAorIEFDX1JFUVVJUkUoW0xSWlNaX0hFQURFUlNfVEVSTV9JT10pZG5sCisgQUNfTVNHX0NIRUNLSU5HKGZvciBzcGVlZF90KQorQEAgLTYxLDcgKzU5LDcgQEAKKyBmaQorIF0pCisgCistQUNfREVGVU4obHJ6c3pfSEVBREVSX1NZU19TRUxFQ1QsCisrQUNfREVGVU4oW2xyenN6X0hFQURFUl9TWVNfU0VMRUNUXSwKKyBbQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgc3lzL3RpbWUuaCBhbmQgc3lzL3NlbGVjdC5oIG1heSBib3RoIGJlIGluY2x1ZGVkXSwKKyAgIGxyenN6X2N2X2hlYWRlcl9zeXNfc2VsZWN0LAorIFtBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvZ2V0dGV4dC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2dldHRleHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEyNGExZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2dldHRleHQucGF0Y2gKQEAgLTAsMCArMSwyMTg4NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL0FCT1VULU5MUwkxOTk4LTA0LTI2IDA5OjIyOjMwLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvQUJPVVQtTkxTCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzIzNzUyOTUyIC0wNDAwCitAQCAtMSwxNCArMSwxNCBAQAorIE5vdGVzIG9uIHRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgCistICAgRnJlZSBzb2Z0d2FyZSBpcyBnb2luZyBpbnRlcm5hdGlvbmFsISAgVGhlIEZyZWUgVHJhbnNsYXRpb24gUHJvamVjdAorLWlzIGEgd2F5IHRvIGdldCBtYWludGFpbmVycyBvZiBmcmVlIHNvZnR3YXJlLCB0cmFuc2xhdG9ycywgYW5kIHVzZXJzIGFsbAorK0ZyZWUgc29mdHdhcmUgaXMgZ29pbmcgaW50ZXJuYXRpb25hbCEgIFRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QgaXMKKythIHdheSB0byBnZXQgbWFpbnRhaW5lcnMgb2YgZnJlZSBzb2Z0d2FyZSwgdHJhbnNsYXRvcnMsIGFuZCB1c2VycyBhbGwKKyB0b2dldGhlciwgc28gdGhhdCB3aWxsIGdyYWR1YWxseSBiZWNvbWUgYWJsZSB0byBzcGVhayBtYW55IGxhbmd1YWdlcy4KKyBBIGZldyBwYWNrYWdlcyBhbHJlYWR5IHByb3ZpZGUgdHJhbnNsYXRpb25zIGZvciB0aGVpciBtZXNzYWdlcy4KKyAKKyAgICBJZiB5b3UgZm91bmQgdGhpcyBgQUJPVVQtTkxTJyBmaWxlIGluc2lkZSBhIGRpc3RyaWJ1dGlvbiwgeW91IG1heQorIGFzc3VtZSB0aGF0IHRoZSBkaXN0cmlidXRlZCBwYWNrYWdlIGRvZXMgdXNlIEdOVSBgZ2V0dGV4dCcgaW50ZXJuYWxseSwKKy1pdHNlbGYgYXZhaWxhYmxlIGF0IHlvdXIgbmVhcmVzdCBHTlUgYXJjaGl2ZSBzaXRlLiAgQnV0IHlvdSBkbyAqbm90KgorK2l0c2VsZiBhdmFpbGFibGUgYXQgeW91ciBuZWFyZXN0IEdOVSBhcmNoaXZlIHNpdGUuICBCdXQgeW91IGRvIF9ub3RfCisgbmVlZCB0byBpbnN0YWxsIEdOVSBgZ2V0dGV4dCcgcHJpb3IgdG8gY29uZmlndXJpbmcsIGluc3RhbGxpbmcgb3IgdXNpbmcKKyB0aGlzIHBhY2thZ2Ugd2l0aCBtZXNzYWdlcyB0cmFuc2xhdGVkLgorIAorQEAgLTIyLDEwICsyMiwxMCBAQAorIGBnZXR0ZXh0JyB3aGljaCBpcyB1c2VkLiAgVGhlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUKKyBgaW50bC9WRVJTSU9OJyBmaWxlLCBpbiBpbnRlcm5hdGlvbmFsaXplZCBwYWNrYWdlcy4KKyAKKy1PbmUgYWR2aXNlIGluIGFkdmFuY2UKKy09PT09PT09PT09PT09PT09PT09PT0KKytRdWljayBjb25maWd1cmF0aW9uIGFkdmljZQorKz09PT09PT09PT09PT09PT09PT09PT09PT09CisgCistICAgSWYgeW91IHdhbnQgdG8gZXhwbG9pdCB0aGUgZnVsbCBwb3dlciBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgeW91CisrSWYgeW91IHdhbnQgdG8gZXhwbG9pdCB0aGUgZnVsbCBwb3dlciBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgeW91Cisgc2hvdWxkIGNvbmZpZ3VyZSBpdCB1c2luZworIAorICAgICAgLi9jb25maWd1cmUgLS13aXRoLWluY2x1ZGVkLWdldHRleHQKK0BAIC0zNCw0MiArMzQsNDAgQEAKKyBwYWNrYWdlLCBkZXNwaXRlIHRoZSBleGlzdGVuY2Ugb2YgaW50ZXJuYXRpb25hbGl6aW5nIGNhcGFiaWxpdGllcyBpbiB0aGUKKyBvcGVyYXRpbmcgc3lzdGVtIHdoZXJlIHRoaXMgcGFja2FnZSBpcyBiZWluZyBpbnN0YWxsZWQuICBTbyBmYXIsIG9ubHkKKyB0aGUgYGdldHRleHQnIGltcGxlbWVudGF0aW9uIGluIHRoZSBHTlUgQyBsaWJyYXJ5IHZlcnNpb24gMiBwcm92aWRlcyBhcworLW1hbnkgZmVhdHVyZXMgKHN1Y2ggYXMgbG9jYWxlIGFsaWFzIG9yIG1lc3NhZ2UgaW5oZXJpdGFuY2UpIGFzIHRoZQorLWltcGxlbWVudGF0aW9uIGhlcmUuICBJdCBpcyBhbHNvIG5vdCBwb3NzaWJsZSB0byBvZmZlciB0aGlzIGFkZGl0aW9uYWwKKy1mdW5jdGlvbmFsaXR5IG9uIHRvcCBvZiBhIGBjYXRnZXRzJyBpbXBsZW1lbnRhdGlvbi4gIEZ1dHVyZSB2ZXJzaW9ucyBvZgorLUdOVSBgZ2V0dGV4dCcgd2lsbCB2ZXJ5IGxpa2VseSBjb252ZXkgZXZlbiBtb3JlIGZ1bmN0aW9uYWxpdHkuICBTbyBpdAorLW1pZ2h0IGJlIGEgZ29vZCBpZGVhIHRvIGNoYW5nZSB0byBHTlUgYGdldHRleHQnIGFzIHNvb24gYXMgcG9zc2libGUuCisrbWFueSBmZWF0dXJlcyAoc3VjaCBhcyBsb2NhbGUgYWxpYXMsIG1lc3NhZ2UgaW5oZXJpdGFuY2UsIGF1dG9tYXRpYworK2NoYXJzZXQgY29udmVyc2lvbiBvciBwbHVyYWwgZm9ybSBoYW5kbGluZykgYXMgdGhlIGltcGxlbWVudGF0aW9uIGhlcmUuCisrSXQgaXMgYWxzbyBub3QgcG9zc2libGUgdG8gb2ZmZXIgdGhpcyBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkgb24gdG9wCisrb2YgYSBgY2F0Z2V0cycgaW1wbGVtZW50YXRpb24uICBGdXR1cmUgdmVyc2lvbnMgb2YgR05VIGBnZXR0ZXh0JyB3aWxsCisrdmVyeSBsaWtlbHkgY29udmV5IGV2ZW4gbW9yZSBmdW5jdGlvbmFsaXR5LiAgU28gaXQgbWlnaHQgYmUgYSBnb29kIGlkZWEKKyt0byBjaGFuZ2UgdG8gR05VIGBnZXR0ZXh0JyBhcyBzb29uIGFzIHBvc3NpYmxlLgorIAorLSAgIFNvIHlvdSBuZWVkIG5vdCBwcm92aWRlIHRoaXMgb3B0aW9uIGlmIHlvdSBhcmUgdXNpbmcgR05VIGxpYmMgMiBvcgorKyAgIFNvIHlvdSBuZWVkIF9ub3RfIHByb3ZpZGUgdGhpcyBvcHRpb24gaWYgeW91IGFyZSB1c2luZyBHTlUgbGliYyAyIG9yCisgeW91IGhhdmUgaW5zdGFsbGVkIGEgcmVjZW50IGNvcHkgb2YgdGhlIEdOVSBnZXR0ZXh0IHBhY2thZ2Ugd2l0aCB0aGUKKyBpbmNsdWRlZCBgbGliaW50bCcuCisgCisgSU5TVEFMTCBNYXR0ZXJzCisgPT09PT09PT09PT09PT09CisgCistICAgU29tZSBwYWNrYWdlcyBhcmUgImxvY2FsaXphYmxlIiB3aGVuIHByb3Blcmx5IGluc3RhbGxlZDsgdGhlCistcHJvZ3JhbXMgdGhleSBjb250YWluIGNhbiBiZSBtYWRlIHRvIHNwZWFrIHlvdXIgb3duIG5hdGl2ZSBsYW5ndWFnZS4KKy1Nb3N0IHN1Y2ggcGFja2FnZXMgdXNlIEdOVSBgZ2V0dGV4dCcuICBPdGhlciBwYWNrYWdlcyBoYXZlIHRoZWlyIG93bgorLXdheXMgdG8gaW50ZXJuYXRpb25hbGl6YXRpb24sIHByZWRhdGluZyBHTlUgYGdldHRleHQnLgorK1NvbWUgcGFja2FnZXMgYXJlICJsb2NhbGl6YWJsZSIgd2hlbiBwcm9wZXJseSBpbnN0YWxsZWQ7IHRoZSBwcm9ncmFtcworK3RoZXkgY29udGFpbiBjYW4gYmUgbWFkZSB0byBzcGVhayB5b3VyIG93biBuYXRpdmUgbGFuZ3VhZ2UuICBNb3N0IHN1Y2gKKytwYWNrYWdlcyB1c2UgR05VIGBnZXR0ZXh0Jy4gIE90aGVyIHBhY2thZ2VzIGhhdmUgdGhlaXIgb3duIHdheXMgdG8KKytpbnRlcm5hdGlvbmFsaXphdGlvbiwgcHJlZGF0aW5nIEdOVSBgZ2V0dGV4dCcuCisgCisgICAgQnkgZGVmYXVsdCwgdGhpcyBwYWNrYWdlIHdpbGwgYmUgaW5zdGFsbGVkIHRvIGFsbG93IHRyYW5zbGF0aW9uIG9mCistbWVzc2FnZXMuICBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoZXRoZXIgdGhlIHN5c3RlbSBwcm92aWRlcworLXVzYWJsZSBgY2F0Z2V0cycgKGlmIHVzaW5nIHRoaXMgaXMgc2VsZWN0ZWQgYnkgdGhlIGluc3RhbGxlcikgb3IKKy1gZ2V0dGV4dCcgZnVuY3Rpb25zLiAgSWYgbmVpdGhlciBpcyBhdmFpbGFibGUsIHRoZSBHTlUgYGdldHRleHQnIG93bgorK21lc3NhZ2VzLiAgSXQgd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVjdCB3aGV0aGVyIHRoZSBzeXN0ZW0gYWxyZWFkeQorK3Byb3ZpZGVzIHRoZSBHTlUgYGdldHRleHQnIGZ1bmN0aW9ucy4gIElmIG5vdCwgdGhlIEdOVSBgZ2V0dGV4dCcgb3duCisgbGlicmFyeSB3aWxsIGJlIHVzZWQuICBUaGlzIGxpYnJhcnkgaXMgd2hvbGx5IGNvbnRhaW5lZCB3aXRoaW4gdGhpcworIHBhY2thZ2UsIHVzdWFsbHkgaW4gdGhlIGBpbnRsLycgc3ViZGlyZWN0b3J5LCBzbyBwcmlvciBpbnN0YWxsYXRpb24gb2YKKy10aGUgR05VIGBnZXR0ZXh0JyBwYWNrYWdlIGlzICpub3QqIHJlcXVpcmVkLiAgSW5zdGFsbGVycyBtYXkgdXNlCisrdGhlIEdOVSBgZ2V0dGV4dCcgcGFja2FnZSBpcyBfbm90XyByZXF1aXJlZC4gIEluc3RhbGxlcnMgbWF5IHVzZQorIHNwZWNpYWwgb3B0aW9ucyBhdCBjb25maWd1cmF0aW9uIHRpbWUgZm9yIGNoYW5naW5nIHRoZSBkZWZhdWx0CisgYmVoYXZpb3VyLiAgVGhlIGNvbW1hbmRzOgorIAorICAgICAgLi9jb25maWd1cmUgLS13aXRoLWluY2x1ZGVkLWdldHRleHQKKy0gICAgIC4vY29uZmlndXJlIC0td2l0aC1jYXRnZXRzCisgICAgICAuL2NvbmZpZ3VyZSAtLWRpc2FibGUtbmxzCisgCistd2lsbCByZXNwZWN0aXZlbHkgYnlwYXNzIGFueSBwcmUtZXhpc3RpbmcgYGNhdGdldHMnIG9yIGBnZXR0ZXh0JyB0byB1c2UKKy10aGUgaW50ZXJuYXRpb25hbGl6aW5nIHJvdXRpbmVzIHByb3ZpZGVkIHdpdGhpbiB0aGlzIHBhY2thZ2UsIGVuYWJsZQorLXRoZSB1c2Ugb2YgdGhlIGBjYXRnZXRzJyBmdW5jdGlvbnMgKGlmIGZvdW5kIG9uIHRoZSBsb2NhbGUgc3lzdGVtKSwgb3IKKy1lbHNlLCAqdG90YWxseSogZGlzYWJsZSB0cmFuc2xhdGlvbiBvZiBtZXNzYWdlcy4KKyt3aWxsIHJlc3BlY3RpdmVseSBieXBhc3MgYW55IHByZS1leGlzdGluZyBgZ2V0dGV4dCcgdG8gdXNlIHRoZQorK2ludGVybmF0aW9uYWxpemluZyByb3V0aW5lcyBwcm92aWRlZCB3aXRoaW4gdGhpcyBwYWNrYWdlLCBvciBlbHNlLAorK190b3RhbGx5XyBkaXNhYmxlIHRyYW5zbGF0aW9uIG9mIG1lc3NhZ2VzLgorIAorICAgIFdoZW4geW91IGFscmVhZHkgaGF2ZSBHTlUgYGdldHRleHQnIGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbSBhbmQgcnVuCisgY29uZmlndXJlIHdpdGhvdXQgYW4gb3B0aW9uIGZvciB5b3VyIG5ldyBwYWNrYWdlLCBgY29uZmlndXJlJyB3aWxsCitAQCAtODMsMTggKzgxLDEwIEBACisgCisgdG8gcHJldmVudCBhdXRvLWRldGVjdGlvbi4KKyAKKy0gICBCeSBkZWZhdWx0IHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3Mgd2lsbCBub3QgdGVzdCBmb3IgdGhlIGBjYXRnZXRzJworLWZ1bmN0aW9uIGFuZCB0aGVyZWZvcmUgdGhleSB3aWxsIG5vdCBiZSB1c2VkLiAgVGhlIHJlYXNvbnMgYXJlIGFscmVhZHkKKy1naXZlbiBhYm92ZTogdGhlIGVtdWxhdGlvbiBvbiB0b3Agb2YgYGNhdGdldHMnIGNhbm5vdCBwcm92aWRlIGFsbCB0aGUKKy1leHRlbnNpb25zIHByb3ZpZGVkIGJ5IHRoZSBHTlUgYGdldHRleHQnIGxpYnJhcnkuICBJZiB5b3UgbmV2ZXJ0aGVsZXNzCistd2FudCB0byB1c2UgdGhlIGBjYXRnZXRzJyBmdW5jdGlvbnMgdXNlCistCistICAgICAuL2NvbmZpZ3VyZSAtLXdpdGgtY2F0Z2V0cworLQorLXRvIGVuYWJsZSB0aGUgdGVzdCBmb3IgYGNhdGdldHMnICh0aGlzIGNhdXNlcyBubyBoYXJtIGlmIGBjYXRnZXRzJyBpcworLW5vdCBhdmFpbGFibGUgb24geW91ciBzeXN0ZW0pLiAgSWYgeW91IHJlYWxseSBzZWxlY3QgdGhpcyBvcHRpb24gd2UKKy13b3VsZCBsaWtlIHRvIGhlYXIgYWJvdXQgdGhlIHJlYXNvbnMgYmVjYXVzZSB3ZSBjYW5ub3QgdGhpbmsgb2YgYW55CistZ29vZCBvbmUgb3Vyc2VsZi4KKysgICBUaGUgY29uZmlndXJhdGlvbiBwcm9jZXNzIHdpbGwgbm90IHRlc3QgZm9yIHRoZSBgY2F0Z2V0cycgZnVuY3Rpb24KKythbmQgdGhlcmVmb3JlIGl0IHdpbGwgbm90IGJlIHVzZWQuICBUaGUgcmVhc29uIGlzIHRoYXQgZXZlbiBhbgorK2VtdWxhdGlvbiBvZiBgZ2V0dGV4dCcgb24gdG9wIG9mIGBjYXRnZXRzJyBjb3VsZCBub3QgcHJvdmlkZSBhbGwgdGhlCisrZXh0ZW5zaW9ucyBvZiB0aGUgR05VIGBnZXR0ZXh0JyBsaWJyYXJ5LgorIAorICAgIEludGVybmF0aW9uYWxpemVkIHBhY2thZ2VzIGhhdmUgdXN1YWxseSBtYW55IGBwby9MTC5wbycgZmlsZXMsIHdoZXJlCisgTEwgZ2l2ZXMgYW4gSVNPIDYzOSB0d28tbGV0dGVyIGNvZGUgaWRlbnRpZnlpbmcgdGhlIGxhbmd1YWdlLiAgVW5sZXNzCitAQCAtMTA4LDU3ICs5OCw3MyBAQAorIFVzaW5nIFRoaXMgUGFja2FnZQorID09PT09PT09PT09PT09PT09PQorIAorLSAgIEFzIGEgdXNlciwgaWYgeW91ciBsYW5ndWFnZSBoYXMgYmVlbiBpbnN0YWxsZWQgZm9yIHRoaXMgcGFja2FnZSwgeW91CisrQXMgYSB1c2VyLCBpZiB5b3VyIGxhbmd1YWdlIGhhcyBiZWVuIGluc3RhbGxlZCBmb3IgdGhpcyBwYWNrYWdlLCB5b3UKKyBvbmx5IGhhdmUgdG8gc2V0IHRoZSBgTEFORycgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGFwcHJvcHJpYXRlCistSVNPIDYzOSBgTEwnIHR3by1sZXR0ZXIgY29kZSBwcmlvciB0byB1c2luZyB0aGUgcHJvZ3JhbXMgaW4gdGhlCistcGFja2FnZS4gIEZvciBleGFtcGxlLCBsZXQncyBzdXBwb3NlIHRoYXQgeW91IHNwZWFrIEdlcm1hbi4gIEF0IHRoZQorLXNoZWxsIHByb21wdCwgbWVyZWx5IGV4ZWN1dGUgYHNldGVudiBMQU5HIGRlJyAoaW4gYGNzaCcpLAorLWBleHBvcnQgTEFORzsgTEFORz1kZScgKGluIGBzaCcpIG9yIGBleHBvcnQgTEFORz1kZScgKGluIGBiYXNoJykuICBUaGlzCistY2FuIGJlIGRvbmUgZnJvbSB5b3VyIGAubG9naW4nIG9yIGAucHJvZmlsZScgZmlsZSwgb25jZSBhbmQgZm9yIGFsbC4KKytgTExfQ0MnIGNvbWJpbmF0aW9uLiAgSGVyZSBgTEwnIGlzIGFuIElTTyA2MzkgdHdvLWxldHRlciBsYW5ndWFnZSBjb2RlLAorK2FuZCBgQ0MnIGlzIGFuIElTTyAzMTY2IHR3by1sZXR0ZXIgY291bnRyeSBjb2RlLiAgRm9yIGV4YW1wbGUsIGxldCdzCisrc3VwcG9zZSB0aGF0IHlvdSBzcGVhayBHZXJtYW4gYW5kIGxpdmUgaW4gR2VybWFueS4gIEF0IHRoZSBzaGVsbAorK3Byb21wdCwgbWVyZWx5IGV4ZWN1dGUgYHNldGVudiBMQU5HIGRlX0RFJyAoaW4gYGNzaCcpLAorK2BleHBvcnQgTEFORzsgTEFORz1kZV9ERScgKGluIGBzaCcpIG9yIGBleHBvcnQgTEFORz1kZV9ERScgKGluIGBiYXNoJykuCisrVGhpcyBjYW4gYmUgZG9uZSBmcm9tIHlvdXIgYC5sb2dpbicgb3IgYC5wcm9maWxlJyBmaWxlLCBvbmNlIGFuZCBmb3IKKythbGwuCisgCistICAgQW4gb3BlcmF0aW5nIHN5c3RlbSBtaWdodCBhbHJlYWR5IG9mZmVyIG1lc3NhZ2UgbG9jYWxpemF0aW9uIGZvcgorLW1hbnkgb2YgaXRzIHByb2dyYW1zLCB3aGlsZSBvdGhlciBwcm9ncmFtcyBoYXZlIGJlZW4gaW5zdGFsbGVkIGxvY2FsbHkKKy13aXRoIHRoZSBmdWxsIGNhcGFiaWxpdGllcyBvZiBHTlUgYGdldHRleHQnLiAgSnVzdCB1c2luZyBgZ2V0dGV4dCcKKy1leHRlbmRlZCBzeW50YXggZm9yIGBMQU5HJyB3b3VsZCBicmVhayBwcm9wZXIgbG9jYWxpemF0aW9uIG9mIGFscmVhZHkKKy1hdmFpbGFibGUgb3BlcmF0aW5nIHN5c3RlbSBwcm9ncmFtcy4gIEluIHRoaXMgY2FzZSwgdXNlcnMgc2hvdWxkIHNldAorLWJvdGggYExBTkdVQUdFJyBhbmQgYExBTkcnIHZhcmlhYmxlcyBpbiB0aGVpciBlbnZpcm9ubWVudCwgYXMgcHJvZ3JhbXMKKy11c2luZyBHTlUgYGdldHRleHQnIGdpdmUgcHJlZmVyZW5jZSB0byBgTEFOR1VBR0UnLiAgRm9yIGV4YW1wbGUsIHNvbWUKKy1Td2VkaXNoIHVzZXJzIHdvdWxkIHJhdGhlciByZWFkIHRyYW5zbGF0aW9ucyBpbiBHZXJtYW4gdGhhbiBFbmdsaXNoIGZvcgorLXdoZW4gU3dlZGlzaCBpcyBub3QgYXZhaWxhYmxlLiAgVGhpcyBpcyBlYXNpbHkgYWNjb21wbGlzaGVkIGJ5IHNldHRpbmcKKy1gTEFOR1VBR0UnIHRvIGBzdjpkZScgd2hpbGUgbGVhdmluZyBgTEFORycgdG8gYHN2Jy4KKysgICBZb3UgbWlnaHQgdGhpbmsgdGhhdCB0aGUgY291bnRyeSBjb2RlIHNwZWNpZmljYXRpb24gaXMgcmVkdW5kYW50LgorK0J1dCBpbiBmYWN0LCBzb21lIGxhbmd1YWdlcyBoYXZlIGRpYWxlY3RzIGluIGRpZmZlcmVudCBjb3VudHJpZXMuICBGb3IKKytleGFtcGxlLCBgZGVfQVQnIGlzIHVzZWQgZm9yIEF1c3RyaWEsIGFuZCBgcHRfQlInIGZvciBCcmF6aWwuICBUaGUKKytjb3VudHJ5IGNvZGUgc2VydmVzIHRvIGRpc3Rpbmd1aXNoIHRoZSBkaWFsZWN0cy4KKysKKysgICBUaGUgbG9jYWxlIG5hbWluZyBjb252ZW50aW9uIG9mIGBMTF9DQycsIHdpdGggYExMJyBkZW5vdGluZyB0aGUKKytsYW5ndWFnZSBhbmQgYENDJyBkZW5vdGluZyB0aGUgY291bnRyeSwgaXMgdGhlIG9uZSB1c2Ugb24gc3lzdGVtcyBiYXNlZAorK29uIEdOVSBsaWJjLiAgT24gb3RoZXIgc3lzdGVtcywgc29tZSB2YXJpYXRpb25zIG9mIHRoaXMgc2NoZW1lIGFyZQorK3VzZWQsIHN1Y2ggYXMgYExMJyBvciBgTExfQ0MuRU5DT0RJTkcnLiAgWW91IGNhbiBnZXQgdGhlIGxpc3Qgb2YKKytsb2NhbGVzIHN1cHBvcnRlZCBieSB5b3VyIHN5c3RlbSBmb3IgeW91ciBjb3VudHJ5IGJ5IHJ1bm5pbmcgdGhlIGNvbW1hbmQKKytgbG9jYWxlIC1hIHwgZ3JlcCAnXkxMJycuCisrCisrICAgTm90IGFsbCBwcm9ncmFtcyBoYXZlIHRyYW5zbGF0aW9ucyBmb3IgYWxsIGxhbmd1YWdlcy4gIEJ5IGRlZmF1bHQsIGFuCisrRW5nbGlzaCBtZXNzYWdlIGlzIHNob3duIGluIHBsYWNlIG9mIGEgbm9uZXhpc3RlbnQgdHJhbnNsYXRpb24uICBJZiB5b3UKKyt1bmRlcnN0YW5kIG90aGVyIGxhbmd1YWdlcywgeW91IGNhbiBzZXQgdXAgYSBwcmlvcml0eSBsaXN0IG9mIGxhbmd1YWdlcy4KKytUaGlzIGlzIGRvbmUgdGhyb3VnaCBhIGRpZmZlcmVudCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgY2FsbGVkCisrYExBTkdVQUdFJy4gIEdOVSBgZ2V0dGV4dCcgZ2l2ZXMgcHJlZmVyZW5jZSB0byBgTEFOR1VBR0UnIG92ZXIgYExBTkcnCisrZm9yIHRoZSBwdXJwb3NlIG9mIG1lc3NhZ2UgaGFuZGxpbmcsIGJ1dCB5b3Ugc3RpbGwgbmVlZCB0byBoYXZlIGBMQU5HJworK3NldCB0byB0aGUgcHJpbWFyeSBsYW5ndWFnZTsgdGhpcyBpcyByZXF1aXJlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUKKytzeXN0ZW0gbGlicmFyaWVzLiAgRm9yIGV4YW1wbGUsIHNvbWUgU3dlZGlzaCB1c2VycyB3aG8gd291bGQgcmF0aGVyCisrcmVhZCB0cmFuc2xhdGlvbnMgaW4gR2VybWFuIHRoYW4gRW5nbGlzaCBmb3Igd2hlbiBTd2VkaXNoIGlzIG5vdAorK2F2YWlsYWJsZSwgc2V0IGBMQU5HVUFHRScgdG8gYHN2OmRlJyB3aGlsZSBsZWF2aW5nIGBMQU5HJyB0byBgc3ZfU0UnLgorKworKyAgIFNwZWNpYWwgYWR2aWNlIGZvciBOb3J3ZWdpYW4gdXNlcnM6IFRoZSBsYW5ndWFnZSBjb2RlIGZvciBOb3J3ZWdpYW4KKytib2ttYSpsIGNoYW5nZWQgZnJvbSBgbm8nIHRvIGBuYicgcmVjZW50bHkgKGluIDIwMDMpLiAgRHVyaW5nIHRoZQorK3RyYW5zaXRpb24gcGVyaW9kLCB3aGlsZSBzb21lIG1lc3NhZ2UgY2F0YWxvZ3MgZm9yIHRoaXMgbGFuZ3VhZ2UgYXJlCisraW5zdGFsbGVkIHVuZGVyIGBuYicgYW5kIHNvbWUgb2xkZXIgb25lcyB1bmRlciBgbm8nLCBpdCdzIHJlY29tbWVuZGVkCisrZm9yIE5vcndlZ2lhbiB1c2VycyB0byBzZXQgYExBTkdVQUdFJyB0byBgbmI6bm8nIHNvIHRoYXQgYm90aCBuZXdlciBhbmQKKytvbGRlciB0cmFuc2xhdGlvbnMgYXJlIHVzZWQuCisrCisrICAgSW4gdGhlIGBMQU5HVUFHRScgZW52aXJvbm1lbnQgdmFyaWFibGUsIGJ1dCBub3QgaW4gdGhlIGBMQU5HJworK2Vudmlyb25tZW50IHZhcmlhYmxlLCBgTExfQ0MnIGNvbWJpbmF0aW9ucyBjYW4gYmUgYWJicmV2aWF0ZWQgYXMgYExMJworK3RvIGRlbm90ZSB0aGUgbGFuZ3VhZ2UncyBtYWluIGRpYWxlY3QuICBGb3IgZXhhbXBsZSwgYGRlJyBpcyBlcXVpdmFsZW50CisrdG8gYGRlX0RFJyAoR2VybWFuIGFzIHNwb2tlbiBpbiBHZXJtYW55KSwgYW5kIGBwdCcgdG8gYHB0X1BUJworKyhQb3J0dWd1ZXNlIGFzIHNwb2tlbiBpbiBQb3J0dWdhbCkgaW4gdGhpcyBjb250ZXh0LgorIAorIFRyYW5zbGF0aW5nIFRlYW1zCisgPT09PT09PT09PT09PT09PT0KKyAKKy0gICBGb3IgdGhlIEZyZWUgVHJhbnNsYXRpb24gUHJvamVjdCB0byBiZSBhIHN1Y2Nlc3MsIHdlIG5lZWQgaW50ZXJlc3RlZAorK0ZvciB0aGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0IHRvIGJlIGEgc3VjY2Vzcywgd2UgbmVlZCBpbnRlcmVzdGVkCisgcGVvcGxlIHdobyBsaWtlIHRoZWlyIG93biBsYW5ndWFnZSBhbmQgd3JpdGUgaXQgd2VsbCwgYW5kIHdobyBhcmUgYWxzbworIGFibGUgdG8gc3luZXJnaXplIHdpdGggb3RoZXIgdHJhbnNsYXRvcnMgc3BlYWtpbmcgdGhlIHNhbWUgbGFuZ3VhZ2UuCistRWFjaCB0cmFuc2xhdGlvbiB0ZWFtIGhhcyBpdHMgb3duIG1haWxpbmcgbGlzdCwgY291cnRlc3kgb2YgTGludXgKKy1JbnRlcm5hdGlvbmFsLiAgWW91IG1heSByZWFjaCB5b3VyIHRyYW5zbGF0aW9uIHRlYW0gYXQgdGhlIGFkZHJlc3MKKy1gTExAbGkub3JnJywgcmVwbGFjaW5nIExMIGJ5IHRoZSB0d28tbGV0dGVyIElTTyA2MzkgY29kZSBmb3IgeW91cgorLWxhbmd1YWdlLiAgTGFuZ3VhZ2UgY29kZXMgYXJlICpub3QqIHRoZSBzYW1lIGFzIHRoZSBjb3VudHJ5IGNvZGVzIGdpdmVuCistaW4gSVNPIDMxNjYuICBUaGUgZm9sbG93aW5nIHRyYW5zbGF0aW9uIHRlYW1zIGV4aXN0LCBhcyBvZiBBdWd1c3QgMTk5NzoKKy0KKy0gICAgIENoaW5lc2UgYHpoJywgQ3plY2ggYGNzJywgRGFuaXNoIGBkYScsIER1dGNoIGBubCcsIEVuZ2xpc2ggYGVuJywKKy0gICAgIEVzcGVyYW50byBgZW8nLCBGaW5uaXNoIGBmaScsIEZyZW5jaCBgZnInLCBHZXJtYW4gYGRlJywgSHVuZ2FyaWFuCistICAgICBgaHUnLCBJcmlzaCBgZ2EnLCBJdGFsaWFuIGBpdCcsIEluZG9uZXNpYW4gYGlkJywgSmFwYW5lc2UgYGphJywKKy0gICAgIEtvcmVhbiBga28nLCBMYXRpbiBgbGEnLCBOb3J3ZWdpYW4gYG5vJywgUGVyc2lhbiBgZmEnLCBQb2xpc2gKKy0gICAgIGBwbCcsIFBvcnR1Z3Vlc2UgYHB0JywgUnVzc2lhbiBgcnUnLCBTbG92ZW5pYW4gYHNsJywgU3BhbmlzaCBgZXMnLAorLSAgICAgU3dlZGlzaCBgc3YnLCBhbmQgVHVya2lzaCBgdHInLgorLQorLUZvciBleGFtcGxlLCB5b3UgbWF5IHJlYWNoIHRoZSBDaGluZXNlIHRyYW5zbGF0aW9uIHRlYW0gYnkgd3JpdGluZyB0bworLWB6aEBsaS5vcmcnLgorK0VhY2ggdHJhbnNsYXRpb24gdGVhbSBoYXMgaXRzIG93biBtYWlsaW5nIGxpc3QuICBUaGUgdXAtdG8tZGF0ZSBsaXN0IG9mCisrdGVhbXMgY2FuIGJlIGZvdW5kIGF0IHRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QncyBob21lcGFnZSwKKytgaHR0cDovL3d3dy5pcm8udW1vbnRyZWFsLmNhL2NvbnRyaWIvcG8vSFRNTC8nLCBpbiB0aGUgIk5hdGlvbmFsIHRlYW1zIgorK2FyZWEuCisgCistICAgSWYgeW91J2QgbGlrZSB0byB2b2x1bnRlZXIgdG8gKndvcmsqIGF0IHRyYW5zbGF0aW5nIG1lc3NhZ2VzLCB5b3UKKysgICBJZiB5b3UnZCBsaWtlIHRvIHZvbHVudGVlciB0byBfd29ya18gYXQgdHJhbnNsYXRpbmcgbWVzc2FnZXMsIHlvdQorIHNob3VsZCBiZWNvbWUgYSBtZW1iZXIgb2YgdGhlIHRyYW5zbGF0aW5nIHRlYW0gZm9yIHlvdXIgb3duIGxhbmd1YWdlLgorLVRoZSBzdWJzY3JpYmluZyBhZGRyZXNzIGlzICpub3QqIHRoZSBzYW1lIGFzIHRoZSBsaXN0IGl0c2VsZiwgaXQgaGFzCisrVGhlIHN1YnNjcmliaW5nIGFkZHJlc3MgaXMgX25vdF8gdGhlIHNhbWUgYXMgdGhlIGxpc3QgaXRzZWxmLCBpdCBoYXMKKyBgLXJlcXVlc3QnIGFwcGVuZGVkLiAgRm9yIGV4YW1wbGUsIHNwZWFrZXJzIG9mIFN3ZWRpc2ggY2FuIHNlbmQgYQorIG1lc3NhZ2UgdG8gYHN2LXJlcXVlc3RAbGkub3JnJywgaGF2aW5nIHRoaXMgbWVzc2FnZSBib2R5OgorIAorICAgICAgc3Vic2NyaWJlCisgCisgICAgS2VlcCBpbiBtaW5kIHRoYXQgdGVhbSBtZW1iZXJzIGFyZSBleHBlY3RlZCB0byBwYXJ0aWNpcGF0ZQorLSphY3RpdmVseSogaW4gdHJhbnNsYXRpb25zLCBvciBhdCBzb2x2aW5nIHRyYW5zbGF0aW9uYWwgZGlmZmljdWx0aWVzLAorK19hY3RpdmVseV8gaW4gdHJhbnNsYXRpb25zLCBvciBhdCBzb2x2aW5nIHRyYW5zbGF0aW9uYWwgZGlmZmljdWx0aWVzLAorIHJhdGhlciB0aGFuIG1lcmVseSBsdXJraW5nIGFyb3VuZC4gIElmIHlvdXIgdGVhbSBkb2VzIG5vdCBleGlzdCB5ZXQgYW5kCisgeW91IHdhbnQgdG8gc3RhcnQgb25lLCBvciBpZiB5b3UgYXJlIHVuc3VyZSBhYm91dCB3aGF0IHRvIGRvIG9yIGhvdyB0bworIGdldCBzdGFydGVkLCBwbGVhc2Ugd3JpdGUgdG8gYHRyYW5zbGF0aW9uQGlyby51bW9udHJlYWwuY2EnIHRvIHJlYWNoIHRoZQorQEAgLTE3MSw0MyArMTc3LDU1OSBAQAorIEF2YWlsYWJsZSBQYWNrYWdlcworID09PT09PT09PT09PT09PT09PQorIAorLSAgIExhbmd1YWdlcyBhcmUgbm90IGVxdWFsbHkgc3VwcG9ydGVkIGluIGFsbCBwYWNrYWdlcy4gIFRoZSBmb2xsb3dpbmcKKy1tYXRyaXggc2hvd3MgdGhlIGN1cnJlbnQgc3RhdGUgb2YgaW50ZXJuYXRpb25hbGl6YXRpb24sIGFzIG9mIEF1Z3VzdAorLTE5OTcuICBUaGUgbWF0cml4IHNob3dzLCBpbiByZWdhcmQgb2YgZWFjaCBwYWNrYWdlLCBmb3Igd2hpY2ggbGFuZ3VhZ2VzCistUE8gZmlsZXMgaGF2ZSBiZWVuIHN1Ym1pdHRlZCB0byB0cmFuc2xhdGlvbiBjb29yZGluYXRpb24uCisrTGFuZ3VhZ2VzIGFyZSBub3QgZXF1YWxseSBzdXBwb3J0ZWQgaW4gYWxsIHBhY2thZ2VzLiAgVGhlIGZvbGxvd2luZworK21hdHJpeCBzaG93cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgYXMgb2YgSmFudWFyeQorKzIwMDQuICBUaGUgbWF0cml4IHNob3dzLCBpbiByZWdhcmQgb2YgZWFjaCBwYWNrYWdlLCBmb3Igd2hpY2ggbGFuZ3VhZ2VzCisrUE8gZmlsZXMgaGF2ZSBiZWVuIHN1Ym1pdHRlZCB0byB0cmFuc2xhdGlvbiBjb29yZGluYXRpb24sIHdpdGggYQorK3RyYW5zbGF0aW9uIHBlcmNlbnRhZ2Ugb2YgYXQgbGVhc3QgNTAlLgorIAorLSAgICAgUmVhZHkgUE8gZmlsZXMgICAgY3MgZGEgZGUgZW4gZXMgZmkgZnIgaXQgamEga28gbmwgbm8gcGwgcHQgc2wgc3YKKy0gICAgICAgICAgICAgICAgICAgICAuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKy0gICAgIGJhc2ggICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwgIDMKKy0gICAgIGJpc29uICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwgIDMKKy0gICAgIGNsaXNwICAgICAgICAgICB8ICAgICAgIFtdIFtdIFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKy0gICAgIGNwaW8gICAgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgICAgIFtdICAgIFtdICAgICAgICAgIHwgIDUKKy0gICAgIGRpZmZ1dGlscyAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIHwgIDUKKy0gICAgIGVuc2NyaXB0ICAgICAgICB8ICAgICAgIFtdICAgIFtdIFtdIFtdICAgICAgICAgIFtdICAgICAgICAgIFtdICAgIHwgIDYKKy0gICAgIGZpbGV1dGlscyAgICAgICB8IFtdICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdICAgIFtdIFtdIFtdIFtdIHwgMTAKKy0gICAgIGZpbmR1dGlscyAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdIFtdICAgIFtdIFtdICAgIFtdICAgICAgIFtdIHwgIDgKKy0gICAgIGZsZXggICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIFtdIHwgIDQKKy0gICAgIGdjYWwgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgIFtdICAgIFtdICAgICAgIFtdIHwgIDUKKy0gICAgIGdldHRleHQgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdIFtdIFtdIFtdIFtdIFtdIHwgMTEKKy0gICAgIGdyZXAgICAgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdIFtdIFtdICAgIFtdIFtdIHwgIDkKKy0gICAgIGhlbGxvICAgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdIFtdIFtdIFtdIFtdIFtdIHwgMTAKKy0gICAgIGlkLXV0aWxzICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwgIDMKKy0gICAgIGluZGVudCAgICAgICAgICB8ICAgIFtdIFtdICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgIHwgIDQKKy0gICAgIGxpYmMgICAgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdICAgIFtdICAgICAgIFtdIHwgIDcKKy0gICAgIG00ICAgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgICAgICAgIFtdIHwgIDUKKy0gICAgIG1ha2UgICAgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdICAgIFtdICAgICAgICAgIHwgIDYKKy0gICAgIG11c2ljICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwgIDIKKy0gICAgIHB0eCAgICAgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgICAgIFtdIFtdIFtdIFtdICAgIFtdIHwgIDgKKy0gICAgIHJlY29kZSAgICAgICAgICB8ICAgIFtdIFtdICAgIFtdICAgIFtdICAgICAgICAgIFtdICAgIFtdIFtdIFtdIFtdIHwgIDkKKy0gICAgIHNoLXV0aWxzICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIFtdIFtdICAgIFtdIHwgIDcKKy0gICAgIHNoYXJ1dGlscyAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgIFtdIHwgIDUKKy0gICAgIHRhciAgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdIFtdICAgIFtdIFtdIFtdIFtdIFtdIFtdIFtdIHwgMTAKKy0gICAgIHRleGluZm8gICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEKKy0gICAgIHRleHR1dGlscyAgICAgICB8IFtdICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdIFtdIFtdICAgICAgIFtdIHwgIDkKKy0gICAgIHdkaWZmICAgICAgICAgICB8IFtdICAgIFtdICAgIFtdICAgIFtdICAgICAgICAgIFtdIFtdIFtdICAgICAgIFtdIHwgIDgKKy0gICAgICAgICAgICAgICAgICAgICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScKKy0gICAgICAgMTYgbGFuZ3VhZ2VzICAgIGNzIGRhIGRlIGVuIGVzIGZpIGZyIGl0IGphIGtvIG5sIG5vIHBsIHB0IHNsIHN2CistICAgICAgIDI3IHBhY2thZ2VzICAgICAgMyAgMiAyNCAgMSAxNyAgMSAyNiAgMiAgMSAxMSAyMCAgOSAxOSAgNyAgNyAxNyAgMTY3CisrICAgICBSZWFkeSBQTyBmaWxlcyAgICAgICBhZiBhbSBhciBheiBiZSBiZyBicyBjYSBjcyBkYSBkZSBlbCBlbiBlbl9HQiBlbyBlcworKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKyAgICAgYTJwcyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gW10gW10gICAgICAgICAgICAgICAgfAorKyAgICAgYWVnaXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYW51YmlzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYXAtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYmFzaCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgW10gW10gfAorKyAgICAgYmF0Y2hlbG9yICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgYmludXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgYmlzb24gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgYmx1ZXotcGluICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgW10gfAorKyAgICAgY29uc29sZS10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgY29yZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgY3BpbyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZGFya3N0YXQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgZGlmZnV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gW10gICAgICAgICAgW10gW10gfAorKyAgICAgZTJmc3Byb2dzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgIFtdICAgICAgICAgfAorKyAgICAgZXJyb3IgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgIFtdICAgICAgW10gfAorKyAgICAgZmV0Y2htYWlsICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gKCkgW10gW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgZmlsZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZmluZHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgW10gW10gW10gICAgICAgICAgW10gW10gfAorKyAgICAgZmxleCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZnNsaW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2FzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2F3ayAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2JpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2NhbCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2NjICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2V0dGV4dCAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2V0dGV4dC1leGFtcGxlcyAgIHwgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2V0dGV4dC1ydW50aW1lICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2ltcC1wcmludCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gICAgICAgIFtdICAgICAgW10gfAorKyAgICAgZ2xpdiAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ251YmlmZiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ251Y2FzaCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgKCkgICAgICAgIFtdICAgICAgW10gfAorKyAgICAgZ251Y2FzaC1nbG9zc2FyeSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ251cGcgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgW10gW10gICAgICAgICAgW10gW10gfAorKyAgICAgZ3BlLWFlcmlhbCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWNhbGVuZGFyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWNsb2NrICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWNvbnRhY3RzICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWVkaXQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWdvICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWxvZ2luICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLW93bmVyaW5mbyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXN1ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXRhc2ttYW5hZ2VyICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXRvZGF5ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXRvZG8gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ3Byb2YgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ3BzZHJpdmUgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgKCkgICAgICAgICAgKCkgfAorKyAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3JlcCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gW10gICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgZ3JldGwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgaGVsbG8gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gW10gICAgICAgICAgW10gW10gfAorKyAgICAgaWQtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgaW5kZW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgW10gW10gfAorKyAgICAgaXNvXzMxNjYgICAgICAgICAgIHwgICAgICAgICAgW10gICAgW10gW10gW10gW10gW10gW10gW10gICAgICAgICAgW10gW10gfAorKyAgICAgaXNvXzMxNjZfMSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgaXNvXzMxNjZfMyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgaXNvXzQyMTcgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAganBpbG90ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAganRhZyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgandob2lzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAga2JkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgbGF0cmluZSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgbGliYyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgbGliZ3Bld2lkZ2V0ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGliaWNvbnYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgW10gW10gfAorKyAgICAgbGlmZWxpbmVzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGlseXBvbmQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGluZ290ZWFjaCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGluZ290ZWFjaF9sZXNzb25zIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgKCkgfAorKyAgICAgbHlueCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgbTQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgICAgfAorKyAgICAgbWFpbHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgbWFrZSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgbWFuLWRiICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gKCkgW10gW10gICAgICAgICAgICAgICAgKCkgfAorKyAgICAgbWluaWNvbSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgbXlzZWNyZXRkaWFyeSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gKCkgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgbmFub18xXzAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gKCkgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgb3Bjb2RlcyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgcHR4ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgW10gW10gfAorKyAgICAgcHl0aG9uICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgcmVjb2RlICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgW10gW10gW10gICAgICAgICAgW10gW10gfAorKyAgICAgcnBtICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgc2Nyb2xsa2VlcGVyICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgc2VkICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgW10gW10gfAorKyAgICAgc2gtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgc2hhcmVkLW1pbWUtaW5mbyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgc2hhcnV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgc2lsa3kgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgc2tlbmNpbCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgICAgICAgICAgICAgW10gfAorKyAgICAgc2tldGNoICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgICAgICAgICAgICAgW10gfAorKyAgICAgc291bmR0cmFja2VyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgc3AgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgdGFyICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgW10gICAgfAorKyAgICAgdGV4dHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgdGluICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICgpICAgICAgICAgfAorKyAgICAgdHAtcm9ib3QgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdHV4cGFpbnQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gW10gICAgIFtdICAgICAgW10gfAorKyAgICAgdW5pY29kZS1oYW4tdHJhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdXRpbC1saW51eCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgdm9yYmlzLXRvb2xzICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgd2RpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgd2dldCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgW10gICAgW10gW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgeGNoYXQgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgeGZyZWU4Nl94a2JfeG1sICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgeHBhZCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKyAgICAgICAgICAgICAgICAgICAgICAgICAgYWYgYW0gYXIgYXogYmUgYmcgYnMgY2EgY3MgZGEgZGUgZWwgZW4gZW5fR0IgZW8gZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAwICAwICAxICA5ICA0ICAxIDQwIDQxIDYwIDc4IDE3ICAxICAgNSAgIDEzIDY4CisrICAgICAKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGV0IGV1IGZhIGZpIGZyIGdhIGdsIGhlIGhyIGh1IGlkIGlzIGl0IGphIGtvIGxnCisrICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisrICAgICBhMnBzICAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAoKSAgICAoKSAgICB8CisrICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBhbnQtcGhvbmUgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBhcC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBhc3BlbGwgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBiYXNoICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBiYXRjaGVsb3IgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBiZmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBiaW51dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICBiaXNvbiAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBibHVlei1waW4gICAgICAgICAgfCAgICAgICAgICBbXSBbXSBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBjb25zb2xlLXRvb2xzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBjb3JldXRpbHMgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICB8CisrICAgICBjcGlvICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICBbXSAgICB8CisrICAgICBkYXJrc3RhdCAgICAgICAgICAgfCAgICAgICAgICAgICAoKSBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBkaWZmdXRpbHMgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgICBbXSAgICAgICB8CisrICAgICBlMmZzcHJvZ3MgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBlbnNjcmlwdCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBlcnJvciAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBmZXRjaG1haWwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICBmaWxldXRpbHMgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICB8CisrICAgICBmaW5kdXRpbHMgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSBbXSAgICBbXSBbXSBbXSAgICBbXSBbXSBbXSAgICB8CisrICAgICBmbGV4ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisrICAgICBmc2xpbnQgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnYXMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICBnYmlmZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnY2FsICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnZXR0ZXh0ICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICB8CisrICAgICBnZXR0ZXh0LWV4YW1wbGVzICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICB8CisrICAgICBnZXR0ZXh0LXRvb2xzICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICB8CisrICAgICBnaW1wLXByaW50ICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICBnbGl2ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnbHVuYXJjbG9jayAgICAgICAgfCAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBnbnViaWZmICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnbnVjYXNoICAgICAgICAgICAgfCAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisrICAgICBnbnVjYXNoLWdsb3NzYXJ5ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisrICAgICBnbnVwZyAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICBbXSAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICB8CisrICAgICBncGUtYWVyaWFsICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtYmVhbSAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtY2FsZW5kYXIgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBncGUtY2xvY2sgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtY29uZiAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtY29udGFjdHMgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtZWRpdCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisrICAgICBncGUtZ28gICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtbG9naW4gICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtb3duZXJpbmZvICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBncGUtc2tldGNoYm9vayAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtc3UgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtdGFza21hbmFnZXIgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtdGltZXNoZWV0ICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisrICAgICBncGUtdG9kYXkgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtdG9kbyAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisrICAgICBncGhvdG8yICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICB8CisrICAgICBncHJvZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisrICAgICBncHNkcml2ZSAgICAgICAgICAgfCAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAoKSAoKSAgICAgICB8CisrICAgICBncmFtYWRvaXIgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncmVwICAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSBbXSBbXSBbXSBbXSBbXSAgICBbXSBbXSAgICAgICB8CisrICAgICBncmV0bCAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisrICAgICBndGljayAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBoZWxsbyAgICAgICAgICAgICAgfCBbXSAgICBbXSBbXSBbXSBbXSBbXSBbXSBbXSBbXSBbXSAgICBbXSBbXSBbXSAgICB8CisrICAgICBpZC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBpbmRlbnQgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSAgICBbXSBbXSAgICAgICB8CisrICAgICBpc29fMzE2NiAgICAgICAgICAgfCAgICBbXSAgICAgICBbXSBbXSAgICAgICBbXSBbXSBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBpc29fMzE2Nl8xICAgICAgICAgfCAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBpc29fMzE2Nl8yICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBpc29fMzE2Nl8zICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBpc29fNDIxNyAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICB8CisrICAgICBpc29fNjM5ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBqcGlsb3QgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICB8CisrICAgICBqdGFnICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBqd2hvaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBrYmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsZCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsaWJjICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICBbXSBbXSAgICB8CisrICAgICBsaWJncGV3aWRnZXQgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBsaWJpY29udiAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSBbXSAgICBbXSBbXSBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBsaWZlbGluZXMgICAgICAgICAgfCAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsaWx5cG9uZCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsaW5nb3RlYWNoICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisrICAgICBsaW5nb3RlYWNoX2xlc3NvbnMgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBseW54ICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICB8CisrICAgICBtNCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICBbXSAgICAgICBbXSAgICAgICB8CisrICAgICBtYWlsdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBtYWtlICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSBbXSBbXSAgICAgICAgICAgICBbXSBbXSAgICB8CisrICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAoKSAgICAgICB8CisrICAgICBtaW5pY29tICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICB8CisrICAgICBteXNlY3JldGRpYXJ5ICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisrICAgICBuYW5vICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBuYW5vXzFfMCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBwYXJ0ZWQgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICBwdHggICAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBweXRob24gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICByYWRpdXMgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICByZWNvZGUgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICBbXSBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisrICAgICBzY3JlZW0gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBzY3JvbGxrZWVwZXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBzZWQgICAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSAgICBbXSBbXSAgICAgICB8CisrICAgICBzaC11dGlscyAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICB8CisrICAgICBzaGFyZWQtbWltZS1pbmZvICAgfCAgICAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBzaGFydXRpbHMgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICBbXSAgICAgICB8CisrICAgICBzaWxreSAgICAgICAgICAgICAgfCAgICAgICAgICAoKSBbXSAgICAgICAgICAgICAoKSAgICAgICAoKSAgICAgICAgICB8CisrICAgICBza2VuY2lsICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBza2V0Y2ggICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisrICAgICBzcCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICB8CisrICAgICB0YXIgICAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICBbXSAgICBbXSBbXSBbXSAgICBbXSBbXSAgICAgICB8CisrICAgICB0ZXhpbmZvICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICB0ZXh0dXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSBbXSAgICAgICBbXSAgICAgICAgICBbXSBbXSAgICB8CisrICAgICB0aW4gICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB0cC1yb2JvdCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB0dXhwYWludCAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgICBbXSAgICBbXSBbXSBbXSBbXSBbXSBbXSAgICB8CisrICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB1bmljb2RlLXRyYW5zbGEuLi4gfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB1dGlsLWxpbnV4ICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAoKSBbXSAgICAgICB8CisrICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB3ZGlmZiAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICB3Z2V0ICAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICBbXSAgICBbXSBbXSAgICAgICAgICBbXSAgICAgICB8CisrICAgICB4Y2hhdCAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB4ZnJlZTg2X3hrYl94bWwgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICB4cGFkICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisrICAgICAgICAgICAgICAgICAgICAgICAgICBldCBldSBmYSBmaSBmciBnYSBnbCBoZSBociBodSBpZCBpcyBpdCBqYSBrbyBsZworKyAgICAgICAgICAgICAgICAgICAgICAgICAgMjIgIDIgIDEgMjYgMTA2IDI4IDI0ICA4IDEwIDQxIDMzICAxIDI2IDMzIDEyICAwCisrICAgICAKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGx0IGx2IG1rIG1uIG1zIG10IG5iIG5sIG5uIG5vIG5zbyBwbCBwdCBwdF9CUiBybyBydQorKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKysgICAgIGEycHMgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICgpICAgICAoKSAgICAgW10gICBbXSBbXSB8CisrICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgKCkgKCkgfAorKyAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGFudWJpcyAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBhcC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgKCkgICAgICAgICAgW10gICAgfAorKyAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGJhc2ggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICBbXSBbXSB8CisrICAgICBiYXRjaGVsb3IgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGJpbnV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICBiaXNvbiAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgW10gW10gfAorKyAgICAgYmx1ZXotcGluICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICAgICAgIFtdICAgIHwKKysgICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgY29uc29sZS10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGNvcmV1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSB8CisrICAgICBjcGlvICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgIFtdICAgW10gW10gfAorKyAgICAgZGFya3N0YXQgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgIFtdICAgIHwKKysgICAgIGRpZmZ1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICBlMmZzcHJvZ3MgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorKyAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgIFtdIFtdIHwKKysgICAgIGVycm9yICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICBbXSAgICB8CisrICAgICBmZXRjaG1haWwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICgpICAgICAgW10gfAorKyAgICAgZmlsZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIGZpbmR1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICBmbGV4ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdICAgW10gW10gfAorKyAgICAgZnNsaW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGdhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdICAgW10gICAgfAorKyAgICAgZ2JpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2V0dGV4dCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIGdldHRleHQtZXhhbXBsZXMgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICB8CisrICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICAgICAgW10gW10gfAorKyAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgIHwKKysgICAgIGdpbXAtcHJpbnQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnbGl2ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgW10gICAgfAorKyAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIHwKKysgICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnbnVjYXNoICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICgpICAgICAgW10gfAorKyAgICAgZ251Y2FzaC1nbG9zc2FyeSAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgICAgICAgIHwKKysgICAgIGdudXBnICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisrICAgICBncGUtYWVyaWFsICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS1jYWxlbmRhciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtY2xvY2sgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS1jb250YWN0cyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtZWRpdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLWdvICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS1sb2dpbiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtb3duZXJpbmZvICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS1zdSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtdGFza21hbmFnZXIgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS10b2RheSAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtdG9kbyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGdwcm9mICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICBbXSAgICB8CisrICAgICBncHNkcml2ZSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAoKSAgICAoKSAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGdyZXAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgW10gICBbXSBbXSB8CisrICAgICBncmV0bCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIHwKKysgICAgIGhlbGxvICAgICAgICAgICAgICB8ICAgIFtdICAgICAgIFtdICAgIFtdIFtdIFtdIFtdICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICBpZC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgW10gW10gfAorKyAgICAgaW5kZW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgIFtdIFtdIHwKKysgICAgIGlzb18zMTY2ICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICB8CisrICAgICBpc29fMzE2Nl8xICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGlzb18zMTY2XzMgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBpc29fNDIxNyAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSBbXSAgICAgW10gW10gIFtdICAgICAgW10gfAorKyAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGpwaWxvdCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICgpICAgICgpICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBqdGFnICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgandob2lzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICBbXSAgIFtdICgpIHwKKysgICAgIGtiZCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICB8CisrICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgbGQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGxpYmMgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICBbXSAgICAgW10gICAgICAgICB8CisrICAgICBsaWJncGV3aWRnZXQgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gICAgfAorKyAgICAgbGliaWNvbnYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICBbXSAgIFtdIFtdIHwKKysgICAgIGxpZmVsaW5lcyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsaWx5cG9uZCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGluZ290ZWFjaCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGxpbmdvdGVhY2hfbGVzc29ucyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBseW54ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gfAorKyAgICAgbTQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICBbXSAgIFtdIFtdIHwKKysgICAgIG1haWx1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBtYWtlICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgIFtdICAgICAgW10gfAorKyAgICAgbWFuLWRiICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIG1pbmljb20gICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICBteXNlY3JldGRpYXJ5ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgW10gICAgfAorKyAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIG5hbm9fMV8wICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgICBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIFtdIFtdICBbXSAgICAgICAgIHwKKysgICAgIHB0eCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdIFtdICAgIFtdICAgICBbXSBbXSAgW10gICBbXSBbXSB8CisrICAgICBweXRob24gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdIHwKKysgICAgIHJlY29kZSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgW10gfAorKyAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHNjcm9sbGtlZXBlciAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBzZWQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdICAgW10gICAgfAorKyAgICAgc2gtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIHNoYXJlZC1taW1lLWluZm8gICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBzaGFydXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgc2lsa3kgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpIHwKKysgICAgIHNrZW5jaWwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICB8CisrICAgICBza2V0Y2ggICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gIFtdICAgICAgICAgfAorKyAgICAgc291bmR0cmFja2VyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHNwICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB0YXIgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgW10gICAgIFtdICAgW10gICAgfAorKyAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIHRleHR1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICB0aW4gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdHAtcm9ib3QgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHR1eHBhaW50ICAgICAgICAgICB8IFtdICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICBbXSBbXSAgW10gICBbXSAgICB8CisrICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHV0aWwtbGludXggICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICBbXSB8CisrICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gW10gfAorKyAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHdkaWZmICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICB3Z2V0ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gW10gfAorKyAgICAgeGNoYXQgICAgICAgICAgICAgIHwgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIHhmcmVlODZfeGtiX3htbCAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICB4cGFkICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGx0IGx2IG1rIG1uIG1zIG10IG5iIG5sIG5uIG5vIG5zbyBwbCBwdCBwdF9CUiBybyBydQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIDIgIDAgIDMgMTIgIDAgMTAgNjkgIDYgIDcgIDEgIDQwIDI2ICAzNiAgIDc2IDYzCisrICAgICAKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHNrIHNsIHNyIHN2IHRhIHRoIHRyIHVrIHZlbiB2aSB3YSB4aCB6aF9DTiB6aF9UVyB6dQorKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKysgICAgIGEycHMgICAgICAgICAgICAgICB8ICAgIFtdICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE2CisrICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAorKyAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKysgICAgIGFudWJpcyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5CisrICAgICBhcC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKysgICAgIGJhc2ggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5CisrICAgICBiYXRjaGVsb3IgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYKKysgICAgIGJpbnV0aWxzICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8ICA4CisrICAgICBiaXNvbiAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNAorKyAgICAgYmx1ZXotcGluICAgICAgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwgMTQKKysgICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAwCisrICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorKyAgICAgY29uc29sZS10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKysgICAgIGNvcmV1dGlscyAgICAgICAgICB8ICAgIFtdICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDE2CisrICAgICBjcGlvICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAxNAorKyAgICAgZGFya3N0YXQgICAgICAgICAgIHwgW10gICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAoKSAgICAgIHwgMTIKKysgICAgIGRpZmZ1dGlscyAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDIzCisrICAgICBlMmZzcHJvZ3MgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorKyAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTIKKysgICAgIGVycm9yICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDE1CisrICAgICBmZXRjaG1haWwgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMQorKyAgICAgZmlsZXV0aWxzICAgICAgICAgIHwgICAgW10gICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgIHwgMTcKKysgICAgIGZpbmR1dGlscyAgICAgICAgICB8IFtdIFtdIFtdIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDI5CisrICAgICBmbGV4ICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMworKyAgICAgZnNsaW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKysgICAgIGdhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisrICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMgorKyAgICAgZ2JpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKysgICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0CisrICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorKyAgICAgZ2V0dGV4dCAgICAgICAgICAgIHwgW10gW10gICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTYKKysgICAgIGdldHRleHQtZXhhbXBsZXMgICB8IFtdICAgIFtdIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDE0CisrICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgfCAyMgorKyAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgW10gW10gW10gW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTQKKysgICAgIGdpbXAtcHJpbnQgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwCisrICAgICBnbGl2ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwgMTMKKysgICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisrICAgICBnbnVjYXNoICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAgOQorKyAgICAgZ251Y2FzaC1nbG9zc2FyeSAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgIDgKKysgICAgIGdudXBnICAgICAgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDE3CisrICAgICBncGUtYWVyaWFsICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNworKyAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDgKKysgICAgIGdwZS1jYWxlbmRhciAgICAgICB8IFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICB8IDEzCisrICAgICBncGUtY2xvY2sgICAgICAgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMAorKyAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkKKysgICAgIGdwZS1jb250YWN0cyAgICAgICB8IFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDExCisrICAgICBncGUtZWRpdCAgICAgICAgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICAgfCAxMgorKyAgICAgZ3BlLWdvICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKysgICAgIGdwZS1sb2dpbiAgICAgICAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICB8IDEzCisrICAgICBncGUtb3duZXJpbmZvICAgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxMworKyAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkKKysgICAgIGdwZS1zdSAgICAgICAgICAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwCisrICAgICBncGUtdGFza21hbmFnZXIgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMAorKyAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgW10gICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTIKKysgICAgIGdwZS10b2RheSAgICAgICAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICB8IDEzCisrICAgICBncGUtdG9kbyAgICAgICAgICAgfCBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICAgfCAxMgorKyAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTEKKysgICAgIGdwcm9mICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5CisrICAgICBncHNkcml2ZSAgICAgICAgICAgfCBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKysgICAgIGdyZXAgICAgICAgICAgICAgICB8ICAgIFtdIFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDI2CisrICAgICBncmV0bCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKKysgICAgIGhlbGxvICAgICAgICAgICAgICB8IFtdICAgIFtdIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDM0CisrICAgICBpZC11dGlscyAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMgorKyAgICAgaW5kZW50ICAgICAgICAgICAgIHwgW10gICAgW10gW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjEKKysgICAgIGlzb18zMTY2ICAgICAgICAgICB8IFtdIFtdIFtdIFtdICAgICAgIFtdICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICB8IDI3CisrICAgICBpc29fMzE2Nl8xICAgICAgICAgfCBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNgorKyAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDAKKysgICAgIGlzb18zMTY2XzMgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisrICAgICBpc29fNDIxNyAgICAgICAgICAgfCBbXSBbXSAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAyNAorKyAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEKKysgICAgIGpwaWxvdCAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICBbXSAgICAgICAgW10gICAgW10gICAgICB8ICA5CisrICAgICBqdGFnICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgorKyAgICAgandob2lzICAgICAgICAgICAgIHwgICAgICAgICAgKCkgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTEKKysgICAgIGtiZCAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDExCisrICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgorKyAgICAgbGQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKysgICAgIGxpYmMgICAgICAgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDIwCisrICAgICBsaWJncGV3aWRnZXQgICAgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfCAxMworKyAgICAgbGliaWNvbnYgICAgICAgICAgIHwgW10gW10gW10gW10gICAgICAgW10gW10gICAgICAgIFtdICAgICBbXSAgICAgICAgICAgIHwgMjcKKysgICAgIGxpZmVsaW5lcyAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisrICAgICBsaWx5cG9uZCAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgbGluZ290ZWFjaCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKysgICAgIGxpbmdvdGVhY2hfbGVzc29ucyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICB8ICAwCisrICAgICBseW54ICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNAorKyAgICAgbTQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTUKKysgICAgIG1haWx1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1CisrICAgICBtYWtlICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAxNgorKyAgICAgbWFuLWRiICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKysgICAgIG1pbmljb20gICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDExCisrICAgICBteXNlY3JldGRpYXJ5ICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMAorKyAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgW10gW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTcKKysgICAgIG5hbm9fMV8wICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE3CisrICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorKyAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTUKKysgICAgIHB0eCAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIyCisrICAgICBweXRob24gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAorKyAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKysgICAgIHJlY29kZSAgICAgICAgICAgICB8ICAgIFtdICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIwCisrICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOQorKyAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgIDIKKysgICAgIHNjcm9sbGtlZXBlciAgICAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1CisrICAgICBzZWQgICAgICAgICAgICAgICAgfCBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyNAorKyAgICAgc2gtdXRpbHMgICAgICAgICAgIHwgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTQKKysgICAgIHNoYXJlZC1taW1lLWluZm8gICB8ICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3CisrICAgICBzaGFydXRpbHMgICAgICAgICAgfCAgICAgICBbXSBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxNworKyAgICAgc2lsa3kgICAgICAgICAgICAgIHwgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKysgICAgIHNrZW5jaWwgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2CisrICAgICBza2V0Y2ggICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorKyAgICAgc291bmR0cmFja2VyICAgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKKysgICAgIHNwICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisrICAgICB0YXIgICAgICAgICAgICAgICAgfCBbXSBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAyNAorKyAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTQKKysgICAgIHRleHR1dGlscyAgICAgICAgICB8ICAgIFtdICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDE2CisrICAgICB0aW4gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMQorKyAgICAgdHAtcm9ib3QgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKysgICAgIHR1eHBhaW50ICAgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICB8IDI5CisrICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAorKyAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKysgICAgIHV0aWwtbGludXggICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1CisrICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOAorKyAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDAKKysgICAgIHdkaWZmICAgICAgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE4CisrICAgICB3Z2V0ICAgICAgICAgICAgICAgfCBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgfCAyNAorKyAgICAgeGNoYXQgICAgICAgICAgICAgIHwgW10gW10gW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTUKKysgICAgIHhmcmVlODZfeGtiX3htbCAgICB8IFtdICAgIFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDExCisrICAgICB4cGFkICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKysgICAgICAgNjMgdGVhbXMgICAgICAgICAgIHNrIHNsIHNyIHN2IHRhIHRoIHRyIHVrIHZlbiB2aSB3YSB4aCB6aF9DTiB6aF9UVyB6dQorKyAgICAgIDEzMSBkb21haW5zICAgICAgICAgNDcgMTkgMjggODMgIDAgIDAgNTkgMTMgIDEgICAxIDExICAwICAyMiAgICAyMiAgICAwICAxMzczCisgCisgICAgU29tZSBjb3VudGVycyBpbiB0aGUgcHJlY2VkaW5nIG1hdHJpeCBhcmUgaGlnaGVyIHRoYW4gdGhlIG51bWJlciBvZgorIHZpc2libGUgYmxvY2tzIGxldCB1cyBleHBlY3QuICBUaGlzIGlzIGJlY2F1c2UgYSBmZXcgZXh0cmEgUE8gZmlsZXMgYXJlCitAQCAtMjIwLDYgKzc0MiwyNyBAQAorIGxhZyBiZXR3ZWVuIHRoZSBtZXJlIGV4aXN0ZW5jZSBhIFBPIGZpbGUgYW5kIGl0cyB3aWRlIGF2YWlsYWJpbGl0eSBpbiBhCisgZGlzdHJpYnV0aW9uLgorIAorLSAgIElmIEF1Z3VzdCAxOTk3IHNlZW1zIHRvIGJlIG9sZCwgeW91IG1heSBmZXRjaCBhIG1vcmUgcmVjZW50IGNvcHkgb2YKKy10aGlzIGBBQk9VVC1OTFMnIGZpbGUgb24gbW9zdCBHTlUgYXJjaGl2ZSBzaXRlcy4KKysgICBJZiBKYW51YXJ5IDIwMDQgc2VlbXMgdG8gYmUgb2xkLCB5b3UgbWF5IGZldGNoIGEgbW9yZSByZWNlbnQgY29weSBvZgorK3RoaXMgYEFCT1VULU5MUycgZmlsZSBvbiBtb3N0IEdOVSBhcmNoaXZlIHNpdGVzLiAgVGhlIG1vc3QgdXAtdG8tZGF0ZQorK21hdHJpeCB3aXRoIGZ1bGwgcGVyY2VudGFnZSBkZXRhaWxzIGNhbiBiZSBmb3VuZCBhdAorK2BodHRwOi8vd3d3Lmlyby51bW9udHJlYWwuY2EvY29udHJpYi9wby9IVE1ML21hdHJpeC5odG1sJy4KKysKKytVc2luZyBgZ2V0dGV4dCcgaW4gbmV3IHBhY2thZ2VzCisrPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKworK0lmIHlvdSBhcmUgd3JpdGluZyBhIGZyZWVseSBhdmFpbGFibGUgcHJvZ3JhbSBhbmQgd2FudCB0bworK2ludGVybmF0aW9uYWxpemUgaXQgeW91IGFyZSB3ZWxjb21lIHRvIHVzZSBHTlUgYGdldHRleHQnIGluIHlvdXIKKytwYWNrYWdlLiAgT2YgY291cnNlIHlvdSBoYXZlIHRvIHJlc3BlY3QgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrTGljZW5zZSB3aGljaCBjb3ZlcnMgdGhlIHVzZSBvZiB0aGUgR05VIGBnZXR0ZXh0JyBsaWJyYXJ5LiAgVGhpcyBtZWFucworK2luIHBhcnRpY3VsYXIgdGhhdCBldmVuIG5vbi1mcmVlIHByb2dyYW1zIGNhbiB1c2UgYGxpYmludGwnIGFzIGEgc2hhcmVkCisrbGlicmFyeSwgd2hlcmVhcyBvbmx5IGZyZWUgc29mdHdhcmUgY2FuIHVzZSBgbGliaW50bCcgYXMgYSBzdGF0aWMKKytsaWJyYXJ5IG9yIHVzZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBgbGliaW50bCcuCisrCisrICAgT25jZSB0aGUgc291cmNlcyBhcmUgY2hhbmdlZCBhcHByb3ByaWF0ZWx5IGFuZCB0aGUgc2V0dXAgY2FuIGhhbmRsZQorK3RoZSB1c2Ugb2YgYGdldHRleHQnIHRoZSBvbmx5IHRoaW5nIG1pc3NpbmcgYXJlIHRoZSB0cmFuc2xhdGlvbnMuICBUaGUKKytGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QgaXMgYWxzbyBhdmFpbGFibGUgZm9yIHBhY2thZ2VzIHdoaWNoIGFyZSBub3QKKytkZXZlbG9wZWQgaW5zaWRlIHRoZSBHTlUgcHJvamVjdC4gIFRoZXJlZm9yZSB0aGUgaW5mb3JtYXRpb24gZ2l2ZW4gYWJvdmUKKythcHBsaWVzIGFsc28gZm9yIGV2ZXJ5IG90aGVyIEZyZWUgU29mdHdhcmUgUHJvamVjdC4gIENvbnRhY3QKKytgdHJhbnNsYXRpb25AaXJvLnVtb250cmVhbC5jYScgdG8gbWFrZSB0aGUgYC5wb3QnIGZpbGVzIGF2YWlsYWJsZSB0bworK3RoZSB0cmFuc2xhdGlvbiB0ZWFtcy4KKyAKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvQ2hhbmdlTG9nCTE5OTgtMTItMjkgMTc6NDk6NTYuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9DaGFuZ2VMb2cJMjAwNC0wOS0xMiAxNDo0MDozNS44NDY1MjE0NTYgLTA0MDAKK0BAIC0xLDMgKzEsMTEgQEAKKysyMDA0LTA5LTEyICBnZXR0ZXh0aXplICA8YnVnLWdudS1nZXR0ZXh0QGdudS5vcmc+CisrCisrCSogTWFrZWZpbGUuYW0gKEFDTE9DQUxfQU1GTEFHUyk6IE5ldyB2YXJpYWJsZS4KKysJKEVYVFJBX0RJU1QpOiBBZGQgY29uZmlnLnJwYXRoLgorKwkqIGNvbmZpZ3VyZS5pbiAoQUNfT1VUUFVUKTogQWRkIG00L01ha2VmaWxlLgorKwkoQUNfT1VUUFVUKTogUmVtb3ZlIGNvbW1hbmQgdGhhdCBjcmVhdGVkIHBvL01ha2VmaWxlLgorKwkoQUNfTElOS19GSUxFUyk6IFJlbW92ZSBpbnZvY2F0aW9uLgorKworIDE5OTgtMTItMjkJVXdlIE9oc2UgIDx1d2VAb2hzZS5kZT4KKyAKKyAJKiBzcmMvbHJ6LmM6IHJlbW92ZWQgc3RwY3B5IGNhbGwuCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2NvbmZpZy5ycGF0aAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvY29uZmlnLnJwYXRoCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzI5NzUyMDQwIC0wNDAwCitAQCAtMCwwICsxLDU0OCBAQAorKyMhIC9iaW4vc2gKKysjIE91dHB1dCBhIHN5c3RlbSBkZXBlbmRlbnQgc2V0IG9mIHZhcmlhYmxlcywgZGVzY3JpYmluZyBob3cgdG8gc2V0IHRoZQorKyMgcnVuIHRpbWUgc2VhcmNoIHBhdGggb2Ygc2hhcmVkIGxpYnJhcmllcyBpbiBhbiBleGVjdXRhYmxlLgorKyMKKysjICAgQ29weXJpZ2h0IDE5OTYtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjICAgVGFrZW4gZnJvbSBHTlUgbGlidG9vbCwgMjAwMQorKyMgICBPcmlnaW5hbGx5IGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorKyMKKysjICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKysjICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysjICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyMgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrIworKyMgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyMgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKyMKKysjICAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorKyMgICBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKysjICAgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKysjICAgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKyMKKysjIFRoZSBmaXJzdCBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyBmaWxlIGlzIHRoZSBjYW5vbmljYWwgaG9zdCBzcGVjaWZpY2F0aW9uLAorKyMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0KKysjIG9yCisrIyAgICBDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU0KKysjIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgQ0MsIEdDQywgTERGTEFHUywgTEQsIHdpdGhfZ251X2xkCisrIyBzaG91bGQgYmUgc2V0IGJ5IHRoZSBjYWxsZXIuCisrIworKyMgVGhlIHNldCBvZiBkZWZpbmVkIHZhcmlhYmxlcyBpcyBhdCB0aGUgZW5kIG9mIHRoaXMgc2NyaXB0LgorKworKyMgS25vd24gbGltaXRhdGlvbnM6CisrIyAtIE9uIElSSVggNi41IHdpdGggQ0M9ImNjIiwgdGhlIHJ1biB0aW1lIHNlYXJjaCBwYXRjaCBtdXN0IG5vdCBiZSBsb25nZXIKKysjICAgdGhhbiAyNTYgYnl0ZXMsIG90aGVyd2lzZSB0aGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgZHVtcCBjb3JlLiBUaGUgb25seQorKyMgICBrbm93biB3b3JrYXJvdW5kIGlzIHRvIGNob29zZSBzaG9ydGVyIGRpcmVjdG9yeSBuYW1lcyBmb3IgdGhlIGJ1aWxkCisrIyAgIGRpcmVjdG9yeSBhbmQvb3IgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisrCisrIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE0kVkMsCisrIyB3aGljaCBuZWVkcyAnLmxpYicpLgorK2xpYmV4dD1hCisrc2hyZXh0PS5zbworKworK2hvc3Q9IiQxIgorK2hvc3RfY3B1PWBlY2hvICIkaG9zdCIgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYAorK2hvc3RfdmVuZG9yPWBlY2hvICIkaG9zdCIgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYAorK2hvc3Rfb3M9YGVjaG8gIiRob3N0IiB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisrCisrIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIEFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUMuCisrCisrd2w9CisraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgIHdsPSctV2wsJworK2Vsc2UKKysgIGNhc2UgIiRob3N0X29zIiBpbgorKyAgICBhaXgqKQorKyAgICAgIHdsPSctV2wsJworKyAgICAgIDs7CisrICAgIG1pbmd3KiB8IHB3MzIqIHwgb3MyKikKKysgICAgICA7OworKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKysgICAgICB3bD0nLVdsLCcKKysgICAgICA7OworKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorKyAgICAgIHdsPSctV2wsJworKyAgICAgIDs7CisrICAgIG5ld3NvczYpCisrICAgICAgOzsKKysgICAgbGludXgqKQorKyAgICAgIGNhc2UgJENDIGluCisrICAgICAgICBpY2N8ZWNjKQorKyAgICAgICAgICB3bD0nLVdsLCcKKysgICAgICAgICAgOzsKKysgICAgICAgIGNjYykKKysgICAgICAgICAgd2w9Jy1XbCwnCisrICAgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgICAgIDs7CisrICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKysgICAgICB3bD0nLVdsLCcKKysgICAgICA7OworKyAgICBzY28zLjJ2NSopCisrICAgICAgOzsKKysgICAgc29sYXJpcyopCisrICAgICAgd2w9Jy1XbCwnCisrICAgICAgOzsKKysgICAgc3Vub3M0KikKKysgICAgICB3bD0nLVFvcHRpb24gbGQgJworKyAgICAgIDs7CisrICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKysgICAgICB3bD0nLVdsLCcKKysgICAgICA7OworKyAgICBzeXN2NCpNUCopCisrICAgICAgOzsKKysgICAgdXRzNCopCisrICAgICAgOzsKKysgIGVzYWMKKytmaQorKworKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTLgorKworK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KKytoYXJkY29kZV9kaXJlY3Q9bm8KKytoYXJkY29kZV9taW51c19MPW5vCisrCisrY2FzZSAiJGhvc3Rfb3MiIGluCisrICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisrICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKKysgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKysgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKysgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisrICAgICAgd2l0aF9nbnVfbGQ9bm8KKysgICAgZmkKKysgICAgOzsKKysgIG9wZW5ic2QqKQorKyAgICB3aXRoX2dudV9sZD1ubworKyAgICA7OworK2VzYWMKKysKKytsZF9zaGxpYnM9eWVzCisraWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisrICAgIGFpeDMqIHwgYWl4NCogfCBhaXg1KikKKysgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisrICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisrICAgICAgICBsZF9zaGxpYnM9bm8KKysgICAgICBmaQorKyAgICAgIDs7CisrICAgIGFtaWdhb3MqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKysgICAgICBoYXJkY29kZV9taW51c19MPXllcworKyAgICAgICMgU2FtdWVsIEEuIEZhbHZvIElJIDxrYzV0amFAZG9scGhpbi5vcGVucHJvamVjdHMubmV0PiByZXBvcnRzCisrICAgICAgIyB0aGF0IHRoZSBzZW1hbnRpY3Mgb2YgZHluYW1pYyBsaWJyYXJpZXMgb24gQW1pZ2FPUywgYXQgbGVhc3QgdXAKKysgICAgICAjIHRvIHZlcnNpb24gNCwgaXMgdG8gc2hhcmUgZGF0YSBhbW9uZyBtdWx0aXBsZSBwcm9ncmFtcyBsaW5rZWQKKysgICAgICAjIHdpdGggdGhlIHNhbWUgZHluYW1pYyBsaWJyYXJ5LiAgU2luY2UgdGhpcyBkb2Vzbid0IG1hdGNoIHRoZQorKyAgICAgICMgYmVoYXZpb3Igb2Ygc2hhcmVkIGxpYnJhcmllcyBvbiBvdGhlciBwbGF0Zm9ybXMsIHdlIGNhbiB1c2UKKysgICAgICAjIHRoZW0uCisrICAgICAgbGRfc2hsaWJzPW5vCisrICAgICAgOzsKKysgICAgYmVvcyopCisrICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisrICAgICAgICA6CisrICAgICAgZWxzZQorKyAgICAgICAgbGRfc2hsaWJzPW5vCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisrICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgOgorKyAgICAgIGVsc2UKKysgICAgICAgIGxkX3NobGlicz1ubworKyAgICAgIGZpCisrICAgICAgOzsKKysgICAgbmV0YnNkKikKKysgICAgICA7OworKyAgICBzb2xhcmlzKiB8IHN5c3Y1KikKKysgICAgICBpZiAkTEQgLXYgMj4mMSB8IGdyZXAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgbGRfc2hsaWJzPW5vCisrICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKysgICAgICAgIDoKKysgICAgICBlbHNlCisrICAgICAgICBsZF9zaGxpYnM9bm8KKysgICAgICBmaQorKyAgICAgIDs7CisrICAgIHN1bm9zNCopCisrICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgIDs7CisrICAgICopCisrICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisrICAgICAgICA6CisrICAgICAgZWxzZQorKyAgICAgICAgbGRfc2hsaWJzPW5vCisrICAgICAgZmkKKysgICAgICA7OworKyAgZXNhYworKyAgaWYgdGVzdCAiJGxkX3NobGlicyIgPSB5ZXM7IHRoZW4KKysgICAgIyBVbmxpa2UgbGlidG9vbCwgd2UgdXNlIC1ycGF0aCBoZXJlLCBub3QgLS1ycGF0aCwgc2luY2UgdGhlIGRvY3VtZW50ZWQKKysgICAgIyBvcHRpb24gb2YgR05VIGxkIGlzIGNhbGxlZCAtcnBhdGgsIG5vdCAtLXJwYXRoLgorKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisrICBmaQorK2Vsc2UKKysgIGNhc2UgIiRob3N0X29zIiBpbgorKyAgICBhaXgzKikKKysgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQorKyAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KKysgICAgICBoYXJkY29kZV9taW51c19MPXllcworKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICAgICAjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKKysgICAgICAgICMgYnJva2VuIGNvbGxlY3QyLgorKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBhaXg0KiB8IGFpeDUqKQorKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisrICAgICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisrICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKysgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKysgICAgICBlbHNlCisrICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisrICAgICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKysgICAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorKyAgICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKysgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeDUqKQorKyAgICAgICAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKysgICAgICAgICAgICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorKyAgICAgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKysgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgZG9uZQorKyAgICAgICAgZXNhYworKyAgICAgIGZpCisrICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCisrICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCisrICAgICAgICAgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKysgICAgICAgICAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYgXAorKyAgICAgICAgICAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKysgICAgICAgICAgdGhlbgorKyAgICAgICAgICAgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKysgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKysgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKysgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQorKyAgICAgICAgICBmaQorKyAgICAgICAgZXNhYworKyAgICAgIGZpCisrICAgICAgIyBCZWdpbiBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYLgorKyAgICAgIGVjaG8gJ2ludCBtYWluICgpIHsgcmV0dXJuIDA7IH0nID4gY29uZnRlc3QuYworKyAgICAgICR7Q0N9ICR7TERGTEFHU30gY29uZnRlc3QuYyAtbyBjb25mdGVzdAorKyAgICAgIGFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0IDI+L2Rldi9udWxsIHwgc2VkIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KKyt9J2AKKysgICAgICBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisrICAgICAgICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCAyPi9kZXYvbnVsbCB8IHNlZCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9CisrfSdgCisrICAgICAgZmkKKysgICAgICBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisrICAgICAgICBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiIKKysgICAgICBmaQorKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LmMgY29uZnRlc3QKKysgICAgICAjIEVuZCBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYLgorKyAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKysgICAgICBlbHNlCisrICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBhbWlnYW9zKikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisrICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKysgICAgICAjIHNlZSBjb21tZW50IGFib3V0IGRpZmZlcmVudCBzZW1hbnRpY3Mgb24gdGhlIEdOVSBsZCBzZWN0aW9uCisrICAgICAgbGRfc2hsaWJzPW5vCisrICAgICAgOzsKKysgICAgYnNkaTQqKQorKyAgICAgIDs7CisrICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKysgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworKyAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisrICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysgICAgICBsaWJleHQ9bGliCisrICAgICAgOzsKKysgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKysgICAgICBpZiAkQ0MgLXYgMj4mMSB8IGdyZXAgJ0FwcGxlJyA+L2Rldi9udWxsIDsgdGhlbgorKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBkZ3V4KikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisrICAgICAgOzsKKysgICAgZnJlZWJzZDEqKQorKyAgICAgIGxkX3NobGlicz1ubworKyAgICAgIDs7CisrICAgIGZyZWVic2QyLjIqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgOzsKKysgICAgZnJlZWJzZDIqKQorKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICBoYXJkY29kZV9taW51c19MPXllcworKyAgICAgIDs7CisrICAgIGZyZWVic2QqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgOzsKKysgICAgaHB1eDkqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorKyAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisrICAgICAgOzsKKysgICAgaHB1eDEwKiB8IGhwdXgxMSopCisrICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisrICAgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisrICAgICAgICAgIGhwcGEqNjQqKQorKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworKyAgICAgICAgICAgIDs7CisrICAgICAgICAgIGlhNjQqKQorKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKysgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKysgICAgICAgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorKyAgICAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisrICAgICAgICAgICAgOzsKKysgICAgICAgICAgKikKKysgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKysgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKysgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKysgICAgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKysgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworKyAgICAgICAgICAgIDs7CisrICAgICAgICBlc2FjCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKysgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKysgICAgICA7OworKyAgICBuZXRic2QqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgOzsKKysgICAgbmV3c29zNikKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorKyAgICAgIDs7CisrICAgIG9wZW5ic2QqKQorKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKysgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisrICAgICAgZWxzZQorKyAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisrICAgICAgICAgIG9wZW5ic2RbMDFdLiogfCBvcGVuYnNkMi5bMC03XSB8IG9wZW5ic2QyLlswLTddLiopCisrICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworKyAgICAgICAgICAgIDs7CisrICAgICAgICAgICopCisrICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKysgICAgICAgICAgICA7OworKyAgICAgICAgZXNhYworKyAgICAgIGZpCisrICAgICAgOzsKKysgICAgb3MyKikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisrICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKysgICAgICA7OworKyAgICBvc2YzKikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisrICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisrICAgICAgOzsKKysgICAgb3NmNCogfCBvc2Y1KikKKysgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworKyAgICAgIGVsc2UKKysgICAgICAgICMgQm90aCBjYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5CisrICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctcnBhdGggJGxpYmRpcicKKysgICAgICBmaQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorKyAgICAgIDs7CisrICAgIHNjbzMuMnY1KikKKysgICAgICA7OworKyAgICBzb2xhcmlzKikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisrICAgICAgOzsKKysgICAgc3Vub3M0KikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisrICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisrICAgICAgOzsKKysgICAgc3lzdjQpCisrICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKysgICAgICAgIHNuaSkKKysgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KKysgICAgICAgICAgOzsKKysgICAgICAgIHNpZW1lbnMpCisrICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworKyAgICAgICAgICA7OworKyAgICAgICAgbW90b3JvbGEpCisrICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCisrICAgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgICAgIDs7CisrICAgIHN5c3Y0LjMqKQorKyAgICAgIDs7CisrICAgIHN5c3Y0Kk1QKikKKysgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisrICAgICAgICBsZF9zaGxpYnM9eWVzCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBzeXN2NC4ydXcyKikKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgaGFyZGNvZGVfbWludXNfTD1ubworKyAgICAgIDs7CisrICAgIHN5c3Y1T3BlblVOSVg4KiB8IHN5c3Y1VW5peFdhcmU3KiB8ICBzeXN2NXV3Wzc4XSogfCB1bml4d2FyZTcqKQorKyAgICAgIDs7CisrICAgIHN5c3Y1KikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorKyAgICAgIDs7CisrICAgIHV0czQqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIGxkX3NobGlicz1ubworKyAgICAgIDs7CisrICBlc2FjCisrZmkKKysKKysjIENoZWNrIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcworKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUi4KKytsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworK2Nhc2UgIiRob3N0X29zIiBpbgorKyAgYWl4MyopCisrICAgIDs7CisrICBhaXg0KiB8IGFpeDUqKQorKyAgICA7OworKyAgYW1pZ2FvcyopCisrICAgIDs7CisrICBiZW9zKikKKysgICAgOzsKKysgIGJzZGk0KikKKysgICAgOzsKKysgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKysgICAgc2hyZXh0PS5kbGwKKysgICAgOzsKKysgIGRhcndpbiogfCByaGFwc29keSopCisrICAgIHNocmV4dD0uZHlsaWIKKysgICAgOzsKKysgIGRndXgqKQorKyAgICA7OworKyAgZnJlZWJzZDEqKQorKyAgICA7OworKyAgZnJlZWJzZCopCisrICAgIDs7CisrICBnbnUqKQorKyAgICA7OworKyAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisrICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKysgICAgICBpYTY0KikKKysgICAgICAgIHNocmV4dD0uc28KKysgICAgICAgIDs7CisrICAgICAgaHBwYSo2NCopCisrICAgICAgICBzaHJleHQ9LnNsCisrICAgICAgICA7OworKyAgICAgICopCisrICAgICAgICBzaHJleHQ9LnNsCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorKyAgICBjYXNlICIkaG9zdF9vcyIgaW4KKysgICAgICBpcml4NSogfCBub25zdG9wdXgqKQorKyAgICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorKyAgICAgICAgOzsKKysgICAgICAqKQorKyAgICAgICAgY2FzZSAkTEQgaW4KKysgICAgICAgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikgbGlic3VmZj0gc2hsaWJzdWZmPSA7OworKyAgICAgICAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKSBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgOzsKKysgICAgICAgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IDs7CisrICAgICAgICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gOzsKKysgICAgICAgIGVzYWMKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgIGxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisrICAgIDs7CisrICBsaW51eCopCisrICAgIDs7CisrICBuZXRic2QqKQorKyAgICA7OworKyAgbmV3c29zNikKKysgICAgOzsKKysgIG50by1xbngpCisrICAgIDs7CisrICBvcGVuYnNkKikKKysgICAgOzsKKysgIG9zMiopCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNocmV4dD0uZGxsCisrICAgIDs7CisrICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisrICAgIDs7CisrICBzY28zLjJ2NSopCisrICAgIDs7CisrICBzb2xhcmlzKikKKysgICAgOzsKKysgIHN1bm9zNCopCisrICAgIDs7CisrICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyogfCBzeXN2NSopCisrICAgIDs7CisrICBzeXN2NCpNUCopCisrICAgIDs7CisrICB1dHM0KikKKysgICAgOzsKKytlc2FjCisrCisrc2VkX3F1b3RlX3N1YnN0PSdzL1woWyJgJFxcXVwpL1xcXDEvZycKKytlc2NhcGVkX3dsPWBlY2hvICJYJHdsIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrc2hsaWJleHQ9YGVjaG8gIiRzaHJleHQiIHwgc2VkIC1lICdzLF5cLiwsJ2AKKytlc2NhcGVkX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9YGVjaG8gIlgkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKworK3NlZCAtZSAncy9eXChbYS16QS1aMC05X10qXCk9L2FjbF9jdl9cMT0vJyA8PEVPRgorKworKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKyt3bD0iJGVzY2FwZWRfd2wiCisrCisrIyBTdGF0aWMgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCisrbGliZXh0PSIkbGliZXh0IgorKworKyMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAic28iKS4KKytzaGxpYmV4dD0iJHNobGliZXh0IgorKworKyMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorKyMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KKytoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkZXNjYXBlZF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgorKworKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCisraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiCisrCisrIyBTZXQgdG8geWVzIGlmIHVzaW5nIERJUi9saWJOQU1FLnNvIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKysjIHJlc3VsdGluZyBiaW5hcnkuCisraGFyZGNvZGVfZGlyZWN0PSIkaGFyZGNvZGVfZGlyZWN0IgorKworKyMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisrIyByZXN1bHRpbmcgYmluYXJ5LgorK2hhcmRjb2RlX21pbnVzX0w9IiRoYXJkY29kZV9taW51c19MIgorKworK0VPRgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9jb25maWd1cmUuaW4JMjAwNC0wOS0xMiAxNDozOTo1NS4xNjE3MDY0ODggLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2NvbmZpZ3VyZS5pbgkyMDA0LTA5LTEyIDE0OjQwOjM1LjgxNjUyNjAxNiAtMDQwMAorQEAgLTI2MCwxMSArMjYwLDEwIEBACisgQU1fR05VX0dFVFRFWFQKKyAKKyBBQ19ERUZJTkVfVU5RVU9URUQoTE9DQUxFRElSLCIkcHJlZml4LyREQVRBRElSTkFNRSIpCistQUNfTElOS19GSUxFUygkbmxzX2N2X2hlYWRlcl9saWJndCwgJG5sc19jdl9oZWFkZXJfaW50bCkKKyAKKy1BQ19PVVRQVVQoW01ha2VmaWxlIGludGwvTWFrZWZpbGUgbGliL01ha2VmaWxlIHRlc3RzdWl0ZS9NYWtlZmlsZSBcCisrQUNfT1VUUFVUKFtNYWtlZmlsZSBpbnRsL01ha2VmaWxlIGxpYi9NYWtlZmlsZSB0ZXN0c3VpdGUvTWFrZWZpbGUgIG00L01ha2VmaWxlIFwKKyBtYW4vTWFrZWZpbGUgcG8vTWFrZWZpbGUuaW4gc3JjL01ha2VmaWxlIGRlYmlhbi9ydWxlcyBTcGVjZmlsZSBzeXN0eXBlIFwKKyBzcmMvbHJ6c3pidWddLAorLVtzZWQgLWUgIi9QT1RGSUxFUyA9L3IgcG8vUE9URklMRVMiIHBvL01ha2VmaWxlLmluID4gcG8vTWFrZWZpbGU7IAorK1sKKyBjaG1vZCAreCBkZWJpYW4vcnVsZXM7CisgdGVzdCAteiAiJENPTkZJR19IRUFERVJTIiB8fCBlY2hvIHRpbWVzdGFtcCA+IHN0YW1wLWhdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2JpbmR0ZXh0ZG9tLmMJMTk5OC0wNC0yNiAwOToyMjozNi4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvYmluZHRleHRkb20uYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjM0Mzc0OTkxMiAtMDQwMAorQEAgLTEsNTkgKzEsNzUgQEAKKyAvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgYmluZHRleHRkb21haW4oMykgZnVuY3Rpb24KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTgsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorLSAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLSNpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzdGRsaWIuaD4KKy0jZWxzZQorLSMgaWZkZWYgSEFWRV9NQUxMT0NfSAorLSMgIGluY2x1ZGUgPG1hbGxvYy5oPgorLSMgZWxzZQorLXZvaWQgZnJlZSAoKTsKKy0jIGVuZGlmCistI2VuZGlmCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisgCistI2lmIGRlZmluZWQgSEFWRV9TVFJJTkdfSCB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzdHJpbmcuaD4KKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGxpYmludGwuaD4KKyAjZWxzZQorLSMgaW5jbHVkZSA8c3RyaW5ncy5oPgorLSMgaWZuZGVmIG1lbWNweQorLSMgIGRlZmluZSBtZW1jcHkoRHN0LCBTcmMsIE51bSkgYmNvcHkgKFNyYywgRHN0LCBOdW0pCistIyBlbmRpZgorKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorICNlbmRpZgorKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorIAorICNpZmRlZiBfTElCQworLSMgaW5jbHVkZSA8bGliaW50bC5oPgorKy8qIFdlIGhhdmUgdG8gaGFuZGxlIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucy4gICovCisrIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorICNlbHNlCistIyBpbmNsdWRlICJsaWJnZXR0ZXh0LmgiCisrLyogUHJvdmlkZSBkdW1teSBpbXBsZW1lbnRhdGlvbiBpZiB0aGlzIGlzIG91dHNpZGUgZ2xpYmMuICAqLworKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfZGVmaW5lKENMQVNTLCBOQU1FKQorKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfd3Jsb2NrKE5BTUUpCisrIyBkZWZpbmUgX19saWJjX3J3bG9ja191bmxvY2soTkFNRSkKKysjZW5kaWYKKysKKysvKiBUaGUgaW50ZXJuYWwgdmFyaWFibGVzIGluIHRoZSBzdGFuZGFsb25lIGxpYmludGwuYSBtdXN0IGhhdmUgZGlmZmVyZW50CisrICAgbmFtZXMgdGhhbiB0aGUgaW50ZXJuYWwgdmFyaWFibGVzIGluIEdOVSBsaWJjLCBvdGhlcndpc2UgcHJvZ3JhbXMKKysgICB1c2luZyBsaWJpbnRsLmEgY2Fubm90IGJlIGxpbmtlZCBzdGF0aWNhbGx5LiAgKi8KKysjaWYgIWRlZmluZWQgX0xJQkMKKysjIGRlZmluZSBfbmxfZGVmYXVsdF9kaXJuYW1lIGxpYmludGxfbmxfZGVmYXVsdF9kaXJuYW1lCisrIyBkZWZpbmUgX25sX2RvbWFpbl9iaW5kaW5ncyBsaWJpbnRsX25sX2RvbWFpbl9iaW5kaW5ncworKyNlbmRpZgorKworKy8qIFNvbWUgY29tcGlsZXJzLCBsaWtlIFN1bk9TNCBjYywgZG9uJ3QgaGF2ZSBvZmZzZXRvZiBpbiA8c3RkZGVmLmg+LiAgKi8KKysjaWZuZGVmIG9mZnNldG9mCisrIyBkZWZpbmUgb2Zmc2V0b2YodHlwZSxpZGVudCkgKChzaXplX3QpJigoKHR5cGUqKTApLT5pZGVudCkpCisgI2VuZGlmCistI2luY2x1ZGUgImdldHRleHQuaCIKKy0jaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCisgLyogQ29udGFpbnMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIG1lc3NhZ2UgY2F0YWxvZ3MuICAqLworIGV4dGVybiBjb25zdCBjaGFyIF9ubF9kZWZhdWx0X2Rpcm5hbWVbXTsKKysjaWZkZWYgX0xJQkMKKytleHRlcm4gY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kaXJuYW1lX2ludGVybmFsW10gYXR0cmlidXRlX2hpZGRlbjsKKysjZWxzZQorKyMgZGVmaW5lIElOVFVTRShuYW1lKSBuYW1lCisrI2VuZGlmCisgCisgLyogTGlzdCB3aXRoIGJpbmRpbmdzIG9mIHNwZWNpZmljIGRvbWFpbnMuICAqLworIGV4dGVybiBzdHJ1Y3QgYmluZGluZyAqX25sX2RvbWFpbl9iaW5kaW5nczsKKyAKKysvKiBMb2NrIHZhcmlhYmxlIHRvIHByb3RlY3QgdGhlIGdsb2JhbCBkYXRhIGluIHRoZSBnZXR0ZXh0IGltcGxlbWVudGF0aW9uLiAgKi8KKytfX2xpYmNfcndsb2NrX2RlZmluZSAoZXh0ZXJuLCBfbmxfc3RhdGVfbG9jayBhdHRyaWJ1dGVfaGlkZGVuKQorKworIAorIC8qIE5hbWVzIGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoZXkgbXVzdCBub3QgY2xhc2gKKyAgICB3aXRoIGV4aXN0aW5nIG5hbWVzIGFuZCB0aGV5IHNob3VsZCBmb2xsb3cgQU5TSSBDLiAgQnV0IHRoaXMgc291cmNlCitAQCAtNjEsMjMgKzc3LDQxIEBACisgICAgcHJlZml4LiAgU28gd2UgaGF2ZSB0byBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKyAjaWZkZWYgX0xJQkMKKyAjIGRlZmluZSBCSU5EVEVYVERPTUFJTiBfX2JpbmR0ZXh0ZG9tYWluCistIyBkZWZpbmUgc3RyZHVwKHN0cikgX19zdHJkdXAgKHN0cikKKysjIGRlZmluZSBCSU5EX1RFWFRET01BSU5fQ09ERVNFVCBfX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0CisrIyBpZm5kZWYgc3RyZHVwCisrIyAgZGVmaW5lIHN0cmR1cChzdHIpIF9fc3RyZHVwIChzdHIpCisrIyBlbmRpZgorICNlbHNlCistIyBkZWZpbmUgQklORFRFWFRET01BSU4gYmluZHRleHRkb21haW5fXworKyMgZGVmaW5lIEJJTkRURVhURE9NQUlOIGxpYmludGxfYmluZHRleHRkb21haW4KKysjIGRlZmluZSBCSU5EX1RFWFRET01BSU5fQ09ERVNFVCBsaWJpbnRsX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0CisgI2VuZGlmCisgCistLyogU3BlY2lmeSB0aGF0IHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyB3aWxsIGJlIGZvdW5kCistICAgaW4gRElSTkFNRSByYXRoZXIgdGhhbiBpbiB0aGUgc3lzdGVtIGxvY2FsZSBkYXRhIGJhc2UuICAqLworLWNoYXIgKgorLUJJTkRURVhURE9NQUlOIChkb21haW5uYW1lLCBkaXJuYW1lKQorLSAgICAgY29uc3QgY2hhciAqZG9tYWlubmFtZTsKKy0gICAgIGNvbnN0IGNoYXIgKmRpcm5hbWU7CisrLyogU3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgbmFtZSAqRElSTkFNRVAgYW5kIHRoZSBvdXRwdXQgY29kZXNldCAqQ09ERVNFVFAKKysgICB0byBiZSB1c2VkIGZvciB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cuCisrICAgSWYgKkRJUk5BTUVQIG9yICpDT0RFU0VUUCBpcyBOVUxMLCB0aGUgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGUgaXMgbm90CisrICAgbW9kaWZpZWQsIG9ubHkgdGhlIGN1cnJlbnQgdmFsdWUgaXMgcmV0dXJuZWQuCisrICAgSWYgRElSTkFNRVAgb3IgQ09ERVNFVFAgaXMgTlVMTCwgdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIGlzIG5laXRoZXIKKysgICBtb2RpZmllZCBub3IgcmV0dXJuZWQuICAqLworK3N0YXRpYyB2b2lkCisrc2V0X2JpbmRpbmdfdmFsdWVzIChjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkJICAgIGNvbnN0IGNoYXIgKipkaXJuYW1lcCwgY29uc3QgY2hhciAqKmNvZGVzZXRwKQorIHsKKyAgIHN0cnVjdCBiaW5kaW5nICpiaW5kaW5nOworKyAgaW50IG1vZGlmaWVkOworIAorICAgLyogU29tZSBzYW5pdHkgY2hlY2tzLiAgKi8KKyAgIGlmIChkb21haW5uYW1lID09IE5VTEwgfHwgZG9tYWlubmFtZVswXSA9PSAnXDAnKQorLSAgICByZXR1cm4gTlVMTDsKKysgICAgeworKyAgICAgIGlmIChkaXJuYW1lcCkKKysJKmRpcm5hbWVwID0gTlVMTDsKKysgICAgICBpZiAoY29kZXNldHApCisrCSpjb2Rlc2V0cCA9IE5VTEw7CisrICAgICAgcmV0dXJuOworKyAgICB9CisrCisrICBfX2xpYmNfcndsb2NrX3dybG9jayAoX25sX3N0YXRlX2xvY2spOworKworKyAgbW9kaWZpZWQgPSAwOworIAorICAgZm9yIChiaW5kaW5nID0gX25sX2RvbWFpbl9iaW5kaW5nczsgYmluZGluZyAhPSBOVUxMOyBiaW5kaW5nID0gYmluZGluZy0+bmV4dCkKKyAgICAgeworQEAgLTkzLDgxICsxMjcsMTczIEBACisgCX0KKyAgICAgfQorIAorLSAgaWYgKGRpcm5hbWUgPT0gTlVMTCkKKy0gICAgLyogVGhlIGN1cnJlbnQgYmluZGluZyBoYXMgYmUgdG8gcmV0dXJuZWQuICAqLworLSAgICByZXR1cm4gYmluZGluZyA9PSBOVUxMID8gKGNoYXIgKikgX25sX2RlZmF1bHRfZGlybmFtZSA6IGJpbmRpbmctPmRpcm5hbWU7CistCisgICBpZiAoYmluZGluZyAhPSBOVUxMKQorICAgICB7CistICAgICAgLyogVGhlIGRvbWFpbiBpcyBhbHJlYWR5IGJvdW5kLiAgSWYgdGhlIG5ldyB2YWx1ZSBhbmQgdGhlIG9sZAorLQkgb25lIGFyZSBlcXVhbCB3ZSBzaW1wbHkgZG8gbm90aGluZy4gIE90aGVyd2lzZSByZXBsYWNlIHRoZQorLQkgb2xkIGJpbmRpbmcuICAqLworLSAgICAgIGlmIChzdHJjbXAgKGRpcm5hbWUsIGJpbmRpbmctPmRpcm5hbWUpICE9IDApCisrICAgICAgaWYgKGRpcm5hbWVwKQorIAl7CistCSAgY2hhciAqbmV3X2Rpcm5hbWU7CisrCSAgY29uc3QgY2hhciAqZGlybmFtZSA9ICpkaXJuYW1lcDsKKyAKKy0JICBpZiAoc3RyY21wIChkaXJuYW1lLCBfbmxfZGVmYXVsdF9kaXJuYW1lKSA9PSAwKQorLQkgICAgbmV3X2Rpcm5hbWUgPSAoY2hhciAqKSBfbmxfZGVmYXVsdF9kaXJuYW1lOworKwkgIGlmIChkaXJuYW1lID09IE5VTEwpCisrCSAgICAvKiBUaGUgY3VycmVudCBiaW5kaW5nIGhhcyBiZSB0byByZXR1cm5lZC4gICovCisrCSAgICAqZGlybmFtZXAgPSBiaW5kaW5nLT5kaXJuYW1lOworIAkgIGVsc2UKKyAJICAgIHsKKysJICAgICAgLyogVGhlIGRvbWFpbiBpcyBhbHJlYWR5IGJvdW5kLiAgSWYgdGhlIG5ldyB2YWx1ZSBhbmQgdGhlIG9sZAorKwkJIG9uZSBhcmUgZXF1YWwgd2Ugc2ltcGx5IGRvIG5vdGhpbmcuICBPdGhlcndpc2UgcmVwbGFjZSB0aGUKKysJCSBvbGQgYmluZGluZy4gICovCisrCSAgICAgIGNoYXIgKnJlc3VsdCA9IGJpbmRpbmctPmRpcm5hbWU7CisrCSAgICAgIGlmIChzdHJjbXAgKGRpcm5hbWUsIHJlc3VsdCkgIT0gMCkKKysJCXsKKysJCSAgaWYgKHN0cmNtcCAoZGlybmFtZSwgSU5UVVNFKF9ubF9kZWZhdWx0X2Rpcm5hbWUpKSA9PSAwKQorKwkJICAgIHJlc3VsdCA9IChjaGFyICopIElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKTsKKysJCSAgZWxzZQorKwkJICAgIHsKKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSRFVQCistCSAgICAgIG5ld19kaXJuYW1lID0gc3RyZHVwIChkaXJuYW1lKTsKKy0JICAgICAgaWYgKG5ld19kaXJuYW1lID09IE5VTEwpCistCQlyZXR1cm4gTlVMTDsKKysJCSAgICAgIHJlc3VsdCA9IHN0cmR1cCAoZGlybmFtZSk7CisgI2Vsc2UKKy0JICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoZGlybmFtZSkgKyAxOworLQkgICAgICBuZXdfZGlybmFtZSA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKy0JICAgICAgaWYgKG5ld19kaXJuYW1lID09IE5VTEwpCistCQlyZXR1cm4gTlVMTDsKKy0KKy0JICAgICAgbWVtY3B5IChuZXdfZGlybmFtZSwgZGlybmFtZSwgbGVuKTsKKysJCSAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKGRpcm5hbWUpICsgMTsKKysJCSAgICAgIHJlc3VsdCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKysJCSAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChyZXN1bHQgIT0gTlVMTCwgMSkpCisrCQkJbWVtY3B5IChyZXN1bHQsIGRpcm5hbWUsIGxlbik7CisgI2VuZGlmCisrCQkgICAgfQorKworKwkJICBpZiAoX19idWlsdGluX2V4cGVjdCAocmVzdWx0ICE9IE5VTEwsIDEpKQorKwkJICAgIHsKKysJCSAgICAgIGlmIChiaW5kaW5nLT5kaXJuYW1lICE9IElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKSkKKysJCQlmcmVlIChiaW5kaW5nLT5kaXJuYW1lKTsKKysKKysJCSAgICAgIGJpbmRpbmctPmRpcm5hbWUgPSByZXN1bHQ7CisrCQkgICAgICBtb2RpZmllZCA9IDE7CisrCQkgICAgfQorKwkJfQorKwkgICAgICAqZGlybmFtZXAgPSByZXN1bHQ7CisgCSAgICB9CisrCX0KKyAKKy0JICBpZiAoYmluZGluZy0+ZGlybmFtZSAhPSBfbmxfZGVmYXVsdF9kaXJuYW1lKQorLQkgICAgZnJlZSAoYmluZGluZy0+ZGlybmFtZSk7CisrICAgICAgaWYgKGNvZGVzZXRwKQorKwl7CisrCSAgY29uc3QgY2hhciAqY29kZXNldCA9ICpjb2Rlc2V0cDsKKyAKKy0JICBiaW5kaW5nLT5kaXJuYW1lID0gbmV3X2Rpcm5hbWU7CisrCSAgaWYgKGNvZGVzZXQgPT0gTlVMTCkKKysJICAgIC8qIFRoZSBjdXJyZW50IGJpbmRpbmcgaGFzIGJlIHRvIHJldHVybmVkLiAgKi8KKysJICAgICpjb2Rlc2V0cCA9IGJpbmRpbmctPmNvZGVzZXQ7CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICAvKiBUaGUgZG9tYWluIGlzIGFscmVhZHkgYm91bmQuICBJZiB0aGUgbmV3IHZhbHVlIGFuZCB0aGUgb2xkCisrCQkgb25lIGFyZSBlcXVhbCB3ZSBzaW1wbHkgZG8gbm90aGluZy4gIE90aGVyd2lzZSByZXBsYWNlIHRoZQorKwkJIG9sZCBiaW5kaW5nLiAgKi8KKysJICAgICAgY2hhciAqcmVzdWx0ID0gYmluZGluZy0+Y29kZXNldDsKKysJICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMIHx8IHN0cmNtcCAoY29kZXNldCwgcmVzdWx0KSAhPSAwKQorKwkJeworKyNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9TVFJEVVAKKysJCSAgcmVzdWx0ID0gc3RyZHVwIChjb2Rlc2V0KTsKKysjZWxzZQorKwkJICBzaXplX3QgbGVuID0gc3RybGVuIChjb2Rlc2V0KSArIDE7CisrCQkgIHJlc3VsdCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKysJCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCAhPSBOVUxMLCAxKSkKKysJCSAgICBtZW1jcHkgKHJlc3VsdCwgY29kZXNldCwgbGVuKTsKKysjZW5kaWYKKysKKysJCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCAhPSBOVUxMLCAxKSkKKysJCSAgICB7CisrCQkgICAgICBpZiAoYmluZGluZy0+Y29kZXNldCAhPSBOVUxMKQorKwkJCWZyZWUgKGJpbmRpbmctPmNvZGVzZXQpOworKworKwkJICAgICAgYmluZGluZy0+Y29kZXNldCA9IHJlc3VsdDsKKysJCSAgICAgIGJpbmRpbmctPmNvZGVzZXRfY250cisrOworKwkJICAgICAgbW9kaWZpZWQgPSAxOworKwkJICAgIH0KKysJCX0KKysJICAgICAgKmNvZGVzZXRwID0gcmVzdWx0OworKwkgICAgfQorIAl9CisgICAgIH0KKysgIGVsc2UgaWYgKChkaXJuYW1lcCA9PSBOVUxMIHx8ICpkaXJuYW1lcCA9PSBOVUxMKQorKwkgICAmJiAoY29kZXNldHAgPT0gTlVMTCB8fCAqY29kZXNldHAgPT0gTlVMTCkpCisrICAgIHsKKysgICAgICAvKiBTaW1wbHkgcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlcy4gICovCisrICAgICAgaWYgKGRpcm5hbWVwKQorKwkqZGlybmFtZXAgPSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSk7CisrICAgICAgaWYgKGNvZGVzZXRwKQorKwkqY29kZXNldHAgPSBOVUxMOworKyAgICB9CisgICBlbHNlCisgICAgIHsKKyAgICAgICAvKiBXZSBoYXZlIHRvIGNyZWF0ZSBhIG5ldyBiaW5kaW5nLiAgKi8KKy0gICAgICBzaXplX3QgbGVuOworKyAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKGRvbWFpbm5hbWUpICsgMTsKKyAgICAgICBzdHJ1Y3QgYmluZGluZyAqbmV3X2JpbmRpbmcgPQorLQkoc3RydWN0IGJpbmRpbmcgKikgbWFsbG9jIChzaXplb2YgKCpuZXdfYmluZGluZykpOworKwkoc3RydWN0IGJpbmRpbmcgKikgbWFsbG9jIChvZmZzZXRvZiAoc3RydWN0IGJpbmRpbmcsIGRvbWFpbm5hbWUpICsgbGVuKTsKKyAKKy0gICAgICBpZiAobmV3X2JpbmRpbmcgPT0gTlVMTCkKKy0JcmV0dXJuIE5VTEw7CisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKG5ld19iaW5kaW5nID09IE5VTEwsIDApKQorKwlnb3RvIGZhaWxlZDsKKyAKKysgICAgICBtZW1jcHkgKG5ld19iaW5kaW5nLT5kb21haW5uYW1lLCBkb21haW5uYW1lLCBsZW4pOworKworKyAgICAgIGlmIChkaXJuYW1lcCkKKysJeworKwkgIGNvbnN0IGNoYXIgKmRpcm5hbWUgPSAqZGlybmFtZXA7CisrCisrCSAgaWYgKGRpcm5hbWUgPT0gTlVMTCkKKysJICAgIC8qIFRoZSBkZWZhdWx0IHZhbHVlLiAgKi8KKysJICAgIGRpcm5hbWUgPSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSk7CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBpZiAoc3RyY21wIChkaXJuYW1lLCBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSkpID09IDApCisrCQlkaXJuYW1lID0gSU5UVVNFKF9ubF9kZWZhdWx0X2Rpcm5hbWUpOworKwkgICAgICBlbHNlCisrCQl7CisrCQkgIGNoYXIgKnJlc3VsdDsKKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSRFVQCistICAgICAgbmV3X2JpbmRpbmctPmRvbWFpbm5hbWUgPSBzdHJkdXAgKGRvbWFpbm5hbWUpOworLSAgICAgIGlmIChuZXdfYmluZGluZy0+ZG9tYWlubmFtZSA9PSBOVUxMKQorLQlyZXR1cm4gTlVMTDsKKysJCSAgcmVzdWx0ID0gc3RyZHVwIChkaXJuYW1lKTsKKysJCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCA9PSBOVUxMLCAwKSkKKysJCSAgICBnb3RvIGZhaWxlZF9kaXJuYW1lOworICNlbHNlCistICAgICAgbGVuID0gc3RybGVuIChkb21haW5uYW1lKSArIDE7CistICAgICAgbmV3X2JpbmRpbmctPmRvbWFpbm5hbWUgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CistICAgICAgaWYgKG5ld19iaW5kaW5nLT5kb21haW5uYW1lID09IE5VTEwpCistCXJldHVybiBOVUxMOworLSAgICAgIG1lbWNweSAobmV3X2JpbmRpbmctPmRvbWFpbm5hbWUsIGRvbWFpbm5hbWUsIGxlbik7CisrCQkgIHNpemVfdCBsZW4gPSBzdHJsZW4gKGRpcm5hbWUpICsgMTsKKysJCSAgcmVzdWx0ID0gKGNoYXIgKikgbWFsbG9jIChsZW4pOworKwkJICBpZiAoX19idWlsdGluX2V4cGVjdCAocmVzdWx0ID09IE5VTEwsIDApKQorKwkJICAgIGdvdG8gZmFpbGVkX2Rpcm5hbWU7CisrCQkgIG1lbWNweSAocmVzdWx0LCBkaXJuYW1lLCBsZW4pOworICNlbmRpZgorLQorLSAgICAgIGlmIChzdHJjbXAgKGRpcm5hbWUsIF9ubF9kZWZhdWx0X2Rpcm5hbWUpID09IDApCistCW5ld19iaW5kaW5nLT5kaXJuYW1lID0gKGNoYXIgKikgX25sX2RlZmF1bHRfZGlybmFtZTsKKysJCSAgZGlybmFtZSA9IHJlc3VsdDsKKysJCX0KKysJICAgIH0KKysJICAqZGlybmFtZXAgPSBkaXJuYW1lOworKwkgIG5ld19iaW5kaW5nLT5kaXJuYW1lID0gKGNoYXIgKikgZGlybmFtZTsKKysJfQorICAgICAgIGVsc2UKKysJLyogVGhlIGRlZmF1bHQgdmFsdWUuICAqLworKwluZXdfYmluZGluZy0+ZGlybmFtZSA9IChjaGFyICopIElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKTsKKysKKysgICAgICBuZXdfYmluZGluZy0+Y29kZXNldF9jbnRyID0gMDsKKysKKysgICAgICBpZiAoY29kZXNldHApCisgCXsKKysJICBjb25zdCBjaGFyICpjb2Rlc2V0ID0gKmNvZGVzZXRwOworKworKwkgIGlmIChjb2Rlc2V0ICE9IE5VTEwpCisrCSAgICB7CisrCSAgICAgIGNoYXIgKnJlc3VsdDsKKysKKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSRFVQCistCSAgbmV3X2JpbmRpbmctPmRpcm5hbWUgPSBzdHJkdXAgKGRpcm5hbWUpOworLQkgIGlmIChuZXdfYmluZGluZy0+ZGlybmFtZSA9PSBOVUxMKQorLQkgICAgcmV0dXJuIE5VTEw7CisrCSAgICAgIHJlc3VsdCA9IHN0cmR1cCAoY29kZXNldCk7CisrCSAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChyZXN1bHQgPT0gTlVMTCwgMCkpCisrCQlnb3RvIGZhaWxlZF9jb2Rlc2V0OworICNlbHNlCistCSAgbGVuID0gc3RybGVuIChkaXJuYW1lKSArIDE7CistCSAgbmV3X2JpbmRpbmctPmRpcm5hbWUgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CistCSAgaWYgKG5ld19iaW5kaW5nLT5kaXJuYW1lID09IE5VTEwpCistCSAgICByZXR1cm4gTlVMTDsKKy0JICBtZW1jcHkgKG5ld19iaW5kaW5nLT5kaXJuYW1lLCBkaXJuYW1lLCBsZW4pOworKwkgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChjb2Rlc2V0KSArIDE7CisrCSAgICAgIHJlc3VsdCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKysJICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCA9PSBOVUxMLCAwKSkKKysJCWdvdG8gZmFpbGVkX2NvZGVzZXQ7CisrCSAgICAgIG1lbWNweSAocmVzdWx0LCBjb2Rlc2V0LCBsZW4pOworICNlbmRpZgorKwkgICAgICBjb2Rlc2V0ID0gcmVzdWx0OworKwkgICAgICBuZXdfYmluZGluZy0+Y29kZXNldF9jbnRyKys7CisrCSAgICB9CisrCSAgKmNvZGVzZXRwID0gY29kZXNldDsKKysJICBuZXdfYmluZGluZy0+Y29kZXNldCA9IChjaGFyICopIGNvZGVzZXQ7CisgCX0KKysgICAgICBlbHNlCisrCW5ld19iaW5kaW5nLT5jb2Rlc2V0ID0gTlVMTDsKKyAKKyAgICAgICAvKiBOb3cgZW5xdWV1ZSBpdC4gICovCisgICAgICAgaWYgKF9ubF9kb21haW5fYmluZGluZ3MgPT0gTlVMTAorQEAgLTE4NywxMyArMzEzLDUxIEBACisgCSAgYmluZGluZy0+bmV4dCA9IG5ld19iaW5kaW5nOworIAl9CisgCistICAgICAgYmluZGluZyA9IG5ld19iaW5kaW5nOworKyAgICAgIG1vZGlmaWVkID0gMTsKKysKKysgICAgICAvKiBIZXJlIHdlIGRlYWwgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcy4gICovCisrICAgICAgaWYgKDApCisrCXsKKysJZmFpbGVkX2NvZGVzZXQ6CisrCSAgaWYgKG5ld19iaW5kaW5nLT5kaXJuYW1lICE9IElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKSkKKysJICAgIGZyZWUgKG5ld19iaW5kaW5nLT5kaXJuYW1lKTsKKysJZmFpbGVkX2Rpcm5hbWU6CisrCSAgZnJlZSAobmV3X2JpbmRpbmcpOworKwlmYWlsZWQ6CisrCSAgaWYgKGRpcm5hbWVwKQorKwkgICAgKmRpcm5hbWVwID0gTlVMTDsKKysJICBpZiAoY29kZXNldHApCisrCSAgICAqY29kZXNldHAgPSBOVUxMOworKwl9CisgICAgIH0KKyAKKy0gIHJldHVybiBiaW5kaW5nLT5kaXJuYW1lOworKyAgLyogSWYgd2UgbW9kaWZpZWQgYW55IGJpbmRpbmcsIHdlIGZsdXNoIHRoZSBjYWNoZXMuICAqLworKyAgaWYgKG1vZGlmaWVkKQorKyAgICArK19ubF9tc2dfY2F0X2NudHI7CisrCisrICBfX2xpYmNfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworK30KKysKKysvKiBTcGVjaWZ5IHRoYXQgdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIHdpbGwgYmUgZm91bmQKKysgICBpbiBESVJOQU1FIHJhdGhlciB0aGFuIGluIHRoZSBzeXN0ZW0gbG9jYWxlIGRhdGEgYmFzZS4gICovCisrY2hhciAqCisrQklORFRFWFRET01BSU4gKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKmRpcm5hbWUpCisreworKyAgc2V0X2JpbmRpbmdfdmFsdWVzIChkb21haW5uYW1lLCAmZGlybmFtZSwgTlVMTCk7CisrICByZXR1cm4gKGNoYXIgKikgZGlybmFtZTsKKyt9CisrCisrLyogU3BlY2lmeSB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIGluIHdoaWNoIHRoZSBtZXNzYWdlcyBmcm9tIHRoZQorKyAgIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIHdpbGwgYmUgcmV0dXJuZWQuICAqLworK2NoYXIgKgorK0JJTkRfVEVYVERPTUFJTl9DT0RFU0VUIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICpjb2Rlc2V0KQorK3sKKysgIHNldF9iaW5kaW5nX3ZhbHVlcyAoZG9tYWlubmFtZSwgTlVMTCwgJmNvZGVzZXQpOworKyAgcmV0dXJuIChjaGFyICopIGNvZGVzZXQ7CisgfQorIAorICNpZmRlZiBfTElCQworLS8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLworKy8qIEFsaWFzZXMgZm9yIGZ1bmN0aW9uIG5hbWVzIGluIEdOVSBDIExpYnJhcnkuICAqLworIHdlYWtfYWxpYXMgKF9fYmluZHRleHRkb21haW4sIGJpbmR0ZXh0ZG9tYWluKTsKKyt3ZWFrX2FsaWFzIChfX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0LCBiaW5kX3RleHRkb21haW5fY29kZXNldCk7CisgI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvY2F0LWNvbXBhdC5jCTE5OTgtMDQtMjYgMDk6MjI6MzcuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2NhdC1jb21wYXQuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorQEAgLTEsMjYyICswLDAgQEAKKy0vKiBDb21wYXRpYmlsaXR5IGNvZGUgZm9yIGdldHRleHQtdXNpbmctY2F0Z2V0cyBpbnRlcmZhY2UuCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistICAgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCistCistI2lmZGVmIEhBVkVfQ09ORklHX0gKKy0jIGluY2x1ZGUgPGNvbmZpZy5oPgorLSNlbmRpZgorLQorLSNpbmNsdWRlIDxzdGRpby5oPgorLQorLSNpZmRlZiBTVERDX0hFQURFUlMKKy0jIGluY2x1ZGUgPHN0ZGxpYi5oPgorLSMgaW5jbHVkZSA8c3RyaW5nLmg+CistI2Vsc2UKKy1jaGFyICpnZXRlbnYgKCk7CistIyBpZmRlZiBIQVZFX01BTExPQ19ICistIyAgaW5jbHVkZSA8bWFsbG9jLmg+CistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpZmRlZiBIQVZFX05MX1RZUEVTX0gKKy0jIGluY2x1ZGUgPG5sX3R5cGVzLmg+CistI2VuZGlmCistCistI2luY2x1ZGUgImxpYmdldHRleHQuaCIKKy0KKy0vKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCistCistLyogWFBHMyBkZWZpbmVzIHRoZSByZXN1bHQgb2YgYHNldGxvY2FsZSAoY2F0ZWdvcnksIE5VTEwpJyBhczoKKy0gICBgYERpcmVjdHMgYHNldGxvY2FsZSgpJyB0byBxdWVyeSBgY2F0ZWdvcnknIGFuZCByZXR1cm4gdGhlIGN1cnJlbnQKKy0gICAgIHNldHRpbmcgb2YgYGxvY2FsJy4nJworLSAgIEhvd2V2ZXIgaXQgZG9lcyBub3Qgc3BlY2lmeSB0aGUgZXhhY3QgZm9ybWF0LiAgQW5kIGV2ZW4gd29yc2U6IFBPU0lYCistICAgZGVmaW5lcyB0aGlzIG5vdCBhdCBhbGwuICBTbyB3ZSBjYW4gdXNlIHRoaXMgZmVhdHVyZSBvbmx5IG9uIHNlbGVjdGVkCistICAgc3lzdGVtIChlLmcuIHRob3NlIHVzaW5nIEdOVSBDIExpYnJhcnkpLiAgKi8KKy0jaWZkZWYgX0xJQkMKKy0jIGRlZmluZSBIQVZFX0xPQ0FMRV9OVUxMCistI2VuZGlmCistCistLyogVGhlIGNhdGFsb2cgZGVzY3JpcHRvci4gICovCistc3RhdGljIG5sX2NhdGQgY2F0YWxvZyA9IChubF9jYXRkKSAtMTsKKy0KKy0vKiBOYW1lIG9mIHRoZSBkZWZhdWx0IGNhdGFsb2cuICAqLworLXN0YXRpYyBjb25zdCBjaGFyIGRlZmF1bHRfY2F0YWxvZ19uYW1lW10gPSAibWVzc2FnZXMiOworLQorLS8qIE5hbWUgb2YgY3VycmVudGx5IHVzZWQgY2F0YWxvZy4gICovCistc3RhdGljIGNvbnN0IGNoYXIgKmNhdGFsb2dfbmFtZSA9IGRlZmF1bHRfY2F0YWxvZ19uYW1lOworLQorLS8qIEdldCBJRCBmb3IgZ2l2ZW4gc3RyaW5nLiAgSWYgbm90IGZvdW5kIHJldHVybiAtMS4gICovCistc3RhdGljIGludCBtc2dfdG9fY2F0X2lkIFBBUkFNUyAoKGNvbnN0IGNoYXIgKm1zZykpOworLQorLS8qIFN1YnN0aXR1dGlvbiBmb3Igc3lzdGVtcyBsYWNraW5nIHRoaXMgZnVuY3Rpb24gaW4gdGhlaXIgQyBsaWJyYXJ5LiAgKi8KKy0jaWYgIV9MSUJDICYmICFIQVZFX1NUUENQWQorLXN0YXRpYyBjaGFyICpzdHBjcHkgUEFSQU1TICgoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKSk7CistI2VuZGlmCistCistCistLyogU2V0IGN1cnJlbnRseSB1c2VkIGRvbWFpbi9jYXRhbG9nLiAgKi8KKy1jaGFyICoKKy10ZXh0ZG9tYWluIChkb21haW5uYW1lKQorLSAgICAgY29uc3QgY2hhciAqZG9tYWlubmFtZTsKKy17CistICBubF9jYXRkIG5ld19jYXRhbG9nOworLSAgY2hhciAqbmV3X25hbWU7CistICBzaXplX3QgbmV3X25hbWVfbGVuOworLSAgY2hhciAqbGFuZzsKKy0KKy0jaWYgZGVmaW5lZCBIQVZFX1NFVExPQ0FMRSAmJiBkZWZpbmVkIEhBVkVfTENfTUVTU0FHRVMgXAorLSAgICAmJiBkZWZpbmVkIEhBVkVfTE9DQUxFX05VTEwKKy0gIGxhbmcgPSBzZXRsb2NhbGUgKExDX01FU1NBR0VTLCBOVUxMKTsKKy0jZWxzZQorLSAgbGFuZyA9IGdldGVudiAoIkxDX0FMTCIpOworLSAgaWYgKGxhbmcgPT0gTlVMTCB8fCBsYW5nWzBdID09ICdcMCcpCistICAgIHsKKy0gICAgICBsYW5nID0gZ2V0ZW52ICgiTENfTUVTU0FHRVMiKTsKKy0gICAgICBpZiAobGFuZyA9PSBOVUxMIHx8IGxhbmdbMF0gPT0gJ1wwJykKKy0JbGFuZyA9IGdldGVudiAoIkxBTkciKTsKKy0gICAgfQorLSNlbmRpZgorLSAgaWYgKGxhbmcgPT0gTlVMTCB8fCBsYW5nWzBdID09ICdcMCcpCistICAgIGxhbmcgPSAiQyI7CistCistICAvKiBTZWUgd2hldGhlciBuYW1lIG9mIGN1cnJlbnRseSB1c2VkIGRvbWFpbiBpcyBhc2tlZC4gICovCistICBpZiAoZG9tYWlubmFtZSA9PSBOVUxMKQorLSAgICByZXR1cm4gKGNoYXIgKikgY2F0YWxvZ19uYW1lOworLQorLSAgaWYgKGRvbWFpbm5hbWVbMF0gPT0gJ1wwJykKKy0gICAgZG9tYWlubmFtZSA9IGRlZmF1bHRfY2F0YWxvZ19uYW1lOworLQorLSAgLyogQ29tcHV0ZSBsZW5ndGggb2YgYWRkZWQgcGF0aCBlbGVtZW50LiAgKi8KKy0gIG5ld19uYW1lX2xlbiA9IHNpemVvZiAoTE9DQUxFRElSKSAtIDEgKyAxICsgc3RybGVuIChsYW5nKQorLQkJICsgc2l6ZW9mICgiL0xDX01FU1NBR0VTLyIpIC0gMSArIHNpemVvZiAoUEFDS0FHRSkgLSAxCistCQkgKyBzaXplb2YgKCIuY2F0Iik7CistCistICBuZXdfbmFtZSA9IChjaGFyICopIG1hbGxvYyAobmV3X25hbWVfbGVuKTsKKy0gIGlmIChuZXdfbmFtZSA9PSBOVUxMKQorLSAgICByZXR1cm4gTlVMTDsKKy0KKy0gIHN0cmNweSAobmV3X25hbWUsIFBBQ0tBR0UpOworLSAgbmV3X2NhdGFsb2cgPSBjYXRvcGVuIChuZXdfbmFtZSwgMCk7CistCistICBpZiAobmV3X2NhdGFsb2cgPT0gKG5sX2NhdGQpIC0xKQorLSAgICB7CistICAgICAgLyogTkxTUEFUSCBzZWFyY2ggZGlkbid0IHdvcmssIHRyeSBhYnNvbHV0ZSBwYXRoICovCistICAgICAgc3ByaW50ZiAobmV3X25hbWUsICIlcy8lcy9MQ19NRVNTQUdFUy8lcy5jYXQiLCBMT0NBTEVESVIsIGxhbmcsCistCSAgICAgICBQQUNLQUdFKTsKKy0gICAgICBuZXdfY2F0YWxvZyA9IGNhdG9wZW4gKG5ld19uYW1lLCAwKTsKKy0KKy0gICAgICBpZiAobmV3X2NhdGFsb2cgPT0gKG5sX2NhdGQpIC0xKQorLQl7CistCSAgZnJlZSAobmV3X25hbWUpOworLQkgIHJldHVybiAoY2hhciAqKSBjYXRhbG9nX25hbWU7CistCX0KKy0gICAgfQorLQorLSAgLyogQ2xvc2Ugb2xkIGNhdGFsb2cuICAqLworLSAgaWYgKGNhdGFsb2cgIT0gKG5sX2NhdGQpIC0xKQorLSAgICBjYXRjbG9zZSAoY2F0YWxvZyk7CistICBpZiAoY2F0YWxvZ19uYW1lICE9IGRlZmF1bHRfY2F0YWxvZ19uYW1lKQorLSAgICBmcmVlICgoY2hhciAqKSBjYXRhbG9nX25hbWUpOworLQorLSAgY2F0YWxvZyA9IG5ld19jYXRhbG9nOworLSAgY2F0YWxvZ19uYW1lID0gbmV3X25hbWU7CistCistICByZXR1cm4gKGNoYXIgKikgY2F0YWxvZ19uYW1lOworLX0KKy0KKy1jaGFyICoKKy1iaW5kdGV4dGRvbWFpbiAoZG9tYWlubmFtZSwgZGlybmFtZSkKKy0gICAgIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWU7CistICAgICBjb25zdCBjaGFyICpkaXJuYW1lOworLXsKKy0jaWYgSEFWRV9TRVRFTlYgfHwgSEFWRV9QVVRFTlYKKy0gIGNoYXIgKm9sZF92YWwsICpuZXdfdmFsLCAqY3A7CistICBzaXplX3QgbmV3X3ZhbF9sZW47CistCistICAvKiBUaGlzIGRvZXMgbm90IG1ha2UgbXVjaCBzZW5zZSBoZXJlIGJ1dCB0byBiZSBjb21wYXRpYmxlIGRvIGl0LiAgKi8KKy0gIGlmIChkb21haW5uYW1lID09IE5VTEwpCistICAgIHJldHVybiBOVUxMOworLQorLSAgLyogQ29tcHV0ZSBsZW5ndGggb2YgYWRkZWQgcGF0aCBlbGVtZW50LiAgSWYgd2UgdXNlIHNldGVudiB3ZSBkb24ndCBuZWVkCistICAgICB0aGUgZmlyc3QgYnl0cyBmb3IgTkxTUEFUSD0sIGJ1dCB3aHkgY29tcGxpY2F0ZSB0aGUgY29kZSBmb3IgdGhpcworLSAgICAgcGVhbnV0cy4gICovCistICBuZXdfdmFsX2xlbiA9IHNpemVvZiAoIk5MU1BBVEg9IikgLSAxICsgc3RybGVuIChkaXJuYW1lKQorLQkJKyBzaXplb2YgKCIvJUwvTENfTUVTU0FHRVMvJU4uY2F0Iik7CistCistICBvbGRfdmFsID0gZ2V0ZW52ICgiTkxTUEFUSCIpOworLSAgaWYgKG9sZF92YWwgPT0gTlVMTCB8fCBvbGRfdmFsWzBdID09ICdcMCcpCistICAgIHsKKy0gICAgICBvbGRfdmFsID0gTlVMTDsKKy0gICAgICBuZXdfdmFsX2xlbiArPSAxICsgc2l6ZW9mIChMT0NBTEVESVIpIC0gMQorLQkgICAgICAgICAgICAgKyBzaXplb2YgKCIvJUwvTENfTUVTU0FHRVMvJU4uY2F0Iik7CistICAgIH0KKy0gIGVsc2UKKy0gICAgbmV3X3ZhbF9sZW4gKz0gc3RybGVuIChvbGRfdmFsKTsKKy0KKy0gIG5ld192YWwgPSAoY2hhciAqKSBtYWxsb2MgKG5ld192YWxfbGVuKTsKKy0gIGlmIChuZXdfdmFsID09IE5VTEwpCistICAgIHJldHVybiBOVUxMOworLQorLSMgaWYgSEFWRV9TRVRFTlYKKy0gIGNwID0gbmV3X3ZhbDsKKy0jIGVsc2UKKy0gIGNwID0gc3RwY3B5IChuZXdfdmFsLCAiTkxTUEFUSD0iKTsKKy0jIGVuZGlmCistCistICBjcCA9IHN0cGNweSAoY3AsIGRpcm5hbWUpOworLSAgY3AgPSBzdHBjcHkgKGNwLCAiLyVML0xDX01FU1NBR0VTLyVOLmNhdDoiKTsKKy0KKy0gIGlmIChvbGRfdmFsID09IE5VTEwpCistICAgIHsKKy0jIGlmIF9fU1REQ19fCistICAgICAgc3RwY3B5IChjcCwgTE9DQUxFRElSICIvJUwvTENfTUVTU0FHRVMvJU4uY2F0Iik7CistIyBlbHNlCistCistICAgICAgY3AgPSBzdHBjcHkgKGNwLCBMT0NBTEVESVIpOworLSAgICAgIHN0cGNweSAoY3AsICIvJUwvTENfTUVTU0FHRVMvJU4uY2F0Iik7CistIyBlbmRpZgorLSAgICB9CistICBlbHNlCistICAgIHN0cGNweSAoY3AsIG9sZF92YWwpOworLQorLSMgaWYgSEFWRV9TRVRFTlYKKy0gIHNldGVudiAoIk5MU1BBVEgiLCBuZXdfdmFsLCAxKTsKKy0gIGZyZWUgKG5ld192YWwpOworLSMgZWxzZQorLSAgcHV0ZW52IChuZXdfdmFsKTsKKy0gIC8qIERvICpub3QqIGZyZWUgdGhlIGVudmlyb25tZW50IGVudHJ5IHdlIGp1c3QgZW50ZXJlZC4gIEl0IGlzIHVzZWQKKy0gICAgIGZyb20gbm93IG9uLiAgICovCistIyBlbmRpZgorLQorLSNlbmRpZgorLQorLSAgcmV0dXJuIChjaGFyICopIGRvbWFpbm5hbWU7CistfQorLQorLSN1bmRlZiBnZXR0ZXh0CistY2hhciAqCistZ2V0dGV4dCAobXNnKQorLSAgICAgY29uc3QgY2hhciAqbXNnOworLXsKKy0gIGludCBtc2dpZDsKKy0KKy0gIGlmIChtc2cgPT0gTlVMTCB8fCBjYXRhbG9nID09IChubF9jYXRkKSAtMSkKKy0gICAgcmV0dXJuIChjaGFyICopIG1zZzsKKy0KKy0gIC8qIEdldCB0aGUgbWVzc2FnZSBmcm9tIHRoZSBjYXRhbG9nLiAgV2UgYWx3YXlzIHVzZSBzZXQgbnVtYmVyIDEuCistICAgICBUaGUgbWVzc2FnZSBJRCBpcyBjb21wdXRlZCBieSB0aGUgZnVuY3Rpb24gYG1zZ190b19jYXRfaWQnCistICAgICB3aGljaCB3b3JrcyBvbiB0aGUgdGFibGUgZ2VuZXJhdGVkIGJ5IGBwby10by10YmwnLiAgKi8KKy0gIG1zZ2lkID0gbXNnX3RvX2NhdF9pZCAobXNnKTsKKy0gIGlmIChtc2dpZCA9PSAtMSkKKy0gICAgcmV0dXJuIChjaGFyICopIG1zZzsKKy0KKy0gIHJldHVybiBjYXRnZXRzIChjYXRhbG9nLCAxLCBtc2dpZCwgKGNoYXIgKikgbXNnKTsKKy19CistCistLyogTG9vayB0aHJvdWdoIHRoZSB0YWJsZSBgX21zZ190YmwnIHdoaWNoIGhhcyBgX21zZ190YmxfbGVuZ3RoJyBlbnRyaWVzCistICAgZm9yIHRoZSBvbmUgZXF1YWwgdG8gbXNnLiAgSWYgaXQgaXMgZm91bmQgcmV0dXJuIHRoZSBJRC4gIEluIGNhc2Ugd2hlbgorLSAgIHRoZSBzdHJpbmcgaXMgbm90IGZvdW5kIHJldHVybiAtMS4gICovCistc3RhdGljIGludAorLW1zZ190b19jYXRfaWQgKG1zZykKKy0gICAgIGNvbnN0IGNoYXIgKm1zZzsKKy17CistICBpbnQgY250OworLQorLSAgZm9yIChjbnQgPSAwOyBjbnQgPCBfbXNnX3RibF9sZW5ndGg7ICsrY250KQorLSAgICBpZiAoc3RyY21wIChtc2csIF9tc2dfdGJsW2NudF0uX21zZykgPT0gMCkKKy0gICAgICByZXR1cm4gX21zZ190YmxbY250XS5fbXNnX251bWJlcjsKKy0KKy0gIHJldHVybiAtMTsKKy19CistCistCistLyogQEAgYmVnaW4gb2YgZXBpbG9nIEBAICovCistCistLyogV2UgZG9uJ3Qgd2FudCBsaWJpbnRsLmEgdG8gZGVwZW5kIG9uIGFueSBvdGhlciBsaWJyYXJ5LiAgU28gd2UKKy0gICBhdm9pZCB0aGUgbm9uLXN0YW5kYXJkIGZ1bmN0aW9uIHN0cGNweS4gIEluIEdOVSBDIExpYnJhcnkgdGhpcworLSAgIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSwgdGhvdWdoLiAgQWxzbyBhbGxvdyB0aGUgc3ltYm9sIEhBVkVfU1RQQ1BZCistICAgdG8gYmUgZGVmaW5lZC4gICovCistI2lmICFfTElCQyAmJiAhSEFWRV9TVFBDUFkKKy1zdGF0aWMgY2hhciAqCistc3RwY3B5IChkZXN0LCBzcmMpCistICAgICBjaGFyICpkZXN0OworLSAgICAgY29uc3QgY2hhciAqc3JjOworLXsKKy0gIHdoaWxlICgoKmRlc3QrKyA9ICpzcmMrKykgIT0gJ1wwJykKKy0gICAgLyogRG8gbm90aGluZy4gKi8gOworLSAgcmV0dXJuIGRlc3QgLSAxOworLX0KKy0jZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9DaGFuZ2VMb2cJMTk5OC0wNC0yNiAwOToyMjozNS4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvQ2hhbmdlTG9nCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzQ5NzQ5MDAwIC0wNDAwCitAQCAtMSwxMDIyICsxLDQgQEAKKy0xOTk3LTA5LTA2IDAyOjEwICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBpbnRsaC5pbnN0LmluOiBSZWZvcm1hdCBjb3B5cmlnaHQuCistCistMTk5Ny0wOC0xOSAxNToyMiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogZGNnZXR0ZXh0LmMgKERDR0VUVEVYVCk6IFJlbW92ZSB3cm9uZyBjb21tZW50LgorLQorLTE5OTctMDgtMTYgMDA6MTMgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWRhdGEpOiBEb24ndCBjaGFuZ2UgZGlyZWN0b3J5IHRvIGluc3RhbGwuCistCistMTk5Ny0wOC0wMSAxNDozMCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogY2F0LWNvbXBhdC5jOiBGaXggY29weXJpZ2h0LgorLQorLQkqIGxvY2FsZWFsaWFzLmM6IERvbid0IGRlZmluZSBzdHJjaHIgdW5sZXNzICFIQVZFX1NUUkNIUi4KKy0KKy0JKiBsb2FkbXNnY2F0LmM6IFVwZGF0ZSBjb3B5cmlnaHQuICBGaXggdHlwb3MuCistCistCSogbDEwbmZsaXN0LmM6IERvbid0IGRlZmluZSBzdHJjaHIgdW5sZXNzICFIQVZFX1NUUkNIUi4KKy0JKF9ubF9tYWtlX2wxMG5mbGlzdCk6IEhhbmRsZSBzcG9uc29yIGFuZCByZXZpc2lvbiBjb3JyZWN0bHkuCistCistCSogZ2V0dGV4dC5jOiBVcGRhdGUgY29weXJpZ2h0LgorLQkqIGdldHRleHQuaDogTGlrZXdpc2UuCistCSogaGFzaC1zdHJpbmcuaDogTGlrZXdpc2UuCistCistCSogZmluZGRvbWFpbi5jOiBSZW1vYXZlIGRlYWQgY29kZS4gIERlZmluZSBzdHJjaHIgb25seSBpZgorLQkhSEFWRV9TVFJDSFIuCistCistCSogZXhwbG9kZW5hbWUuYzogSW5jbHVkZSA8c3lzL3R5cGVzLmg+LgorLQorLQkqIGV4cGxvZGVuYW1lLmM6IFJlZm9ybWF0IGNvcHlyaWdodCB0ZXh0LgorLQkoX25sX2V4cGxvZGVfbmFtZSk6IEZpeCB0eXBvLgorLQorLQkqIGRjZ2V0dGV4dC5jOiBEZWZpbmUgYW5kIHVzZSBfX3NldF9lcnJuby4KKy0JKGd1ZXNzX2NhdGVnb3J5X3ZhbHVlKTogRG9uJ3QgdXNlIHNldGxvY2FsZSBpZiBIQVZFX0xDX01FU1NBR0VTIGlzCistCW5vdCBkZWZpbmVkLgorLQorLQkqIGJpbmR0ZXh0ZG9tLmM6IFByZXR0eSBwcmludGluZy4KKy0KKy0xOTk3LTA1LTAxIDAyOjI1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBkY2dldHRleHQuYyAoZ3Vlc3NfY2F0ZWdvcnlfdmFsdWUpOiBEb24ndCBkZXBlbmQgb24KKy0JSEFWRV9MQ19NRVNTQUdFUy4gIFdlIGRvbid0IG5lZWQgdGhlIG1hY3JvIGhlcmUuCistCVBhdGNoIGJ5IEJydW5vIEhhaWJsZSA8aGFpYmxlQGlsb2cuZnI+LgorLQorLQkqIGNhdC1jb21wYXQuYyAodGV4dGRvbWFpbik6IERvTid0IHJlZmVyIHRvIEhBVkVfU0VUTE9DQUxFX05VTEwKKy0JbWFjcm8uICBJbnN0ZWFkIHVzZSBIQVZFX0xPQ0FMRV9OVUxMIGFuZCBkZWZpbmUgaXQgd2hlbiB1c2luZworLQlnbGliYywgYXMgaW4gZGNnZXR0ZXh0LmMuCistCVBhdGNoIGJ5IEJydW5vIEhhaWJsZSA8aGFpYmxlQGlsb2cuZnI+LgorLQorLQkqIE1ha2VmaWxlLmluIChDUFBGTEFHUyk6IE5ldyB2YXJpYWJsZS4gIFJlcG9ydGVkIGJ5IEZyYW5jLG9pcworLQlQaW5hcmQuCistCistTW9uIE1hciAxMCAwNjo1MToxNyAxOTk3ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBNYWtlZmlsZS5pbjogSW1wbGVtZW50IGhhbmRsaW5nIG9mIGxpYnRvb2wuCistCistCSogZ2V0dGV4dFAuaDogQ2hhbmdlIGRhdGEgc3RydWN0dXJlcyBmb3IgdXNlIG9mIGdlbmVyaWMgbG93bGV2ZWwKKy0JaTE4biBmaWxlIGhhbmRsaW5nLgorLQorLVdlZCBEZWMgIDQgMjA6MjE6MTggMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogdGV4dGRvbWFpbi5jOiBQdXQgcGFyZW50aGVzZXMgYXJvdW5kIGFyZ3VtZW50cyBvZiBtZW1jcHkgbWFjcm8KKy0JZGVmaW5pdGlvbi4KKy0JKiBsb2NhbGVhbGlhcy5jOiBMaWtld2lzZS4KKy0JKiBsMTBuZmxpc3QuYzogTGlrZXdpc2UuCistCSogZmluZGRvbWFpbi5jOiBMaWtld2lzZS4KKy0JKiBiaW5kdGV4dGRvbS5jOiBMaWtld2lzZS4KKy0JUmVwb3J0ZWQgYnkgVGhvbWFzIEVza2VuLgorLQorLU1vbiBOb3YgMjUgMjI6NTc6NTEgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogdGV4dGRvbWFpbi5jOiBNb3ZlIGRlZmluaXRpb24gb2YgYG1lbWNweWAgbWFjcm8gdG8gcmlnaHQKKy0JcG9zaXRpb24uCistCistRnJpIE5vdiAyMiAwNDowMTo1OCAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBmaW5kZG9tYWluLmMgWyFIQVZFX1NUUklOR19IICYmICFfTElCQ106IERlZmluZSBtZW1jcHkgdXNpbmcKKy0gCWJjb3B5IGlmIG5vdCBhbHJlYWR5IGRlZmluZWQuICBSZXBvcnRlZCBieSBUaG9tYXMgRXNrZW4uCistCSogYmluZHRleHRkb20uYzogTGlrZXdpc2UuCistCSogbDEwbmZsaXN0LmM6IExpa2V3aXNlLgorLQkqIGxvY2FsZWFsaWFzLmM6IExpa2V3aXNlLgorLQkqIHRleHRkb21haW4uYzogTGlrZXdpc2UuCistCistVHVlIE9jdCAyOSAxMToxMDoyNyAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAobGliZGlyKTogQ2hhbmdlIHRvIHVzZSBleGVjX3ByZWZpeCBpbnN0ZWFkIG9mCistIAlwcmVmaXguICBSZXBvcnRlZCBieSBLbnV0LUjldmFyZEFrc25lcyA8ZXRva25hQGV0by5lcmljc3Nvbi5zZT4uCistCistU2F0IEF1ZyAzMSAwMzowNzowOSAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBsMTBuZmxpc3QuYyAoX25sX25vcm1hbGl6ZV9jb2Rlc2V0KTogV2UgY29udmVydCB0byBsb3dlciBjYXNlLAorLQlzbyBkb24ndCBwcmVwZW5kIHVwcGVyY2FzZSBgSVNPJyBmb3Igb25seSBudW1lcmljIGFyZy4KKy0KKy1GcmkgSnVsIDE5IDAwOjE1OjQ2IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIGwxMG5mbGlzdC5jOiBNb3ZlIGluY2x1c2lvbiBvZiBhcmd6LmgsIGN0eXBlLmgsIHN0ZGxpYi5oIGFmdGVyCistCWRlZmluaXRpb24gb2YgX0dOVV9TT1VSQ0UuICBQYXRjaCBieSBSb2xhbmQgTWNHcmF0aC4KKy0KKy0JKiBNYWtlZmlsZS5pbiAodW5pbnN0YWxsKTogRml4IGFub3RoZXIgYnVnIHdpdGggYGZvcicgbG9vcCBhbmQKKy0JZW1wdHkgYXJndW1lbnRzLiAgUGF0Y2ggYnkgSmltIE1leWVyaW5nLiAgQ29ycmVjdCBuYW1lIG9zCistCXVuaW5zdGFsbGVkIGZpbGVzOiBubyBpbnRsLSBwcmVmaXggYW55bW9yZS4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1kYXRhKTogQWdhaW4gd29yayBhcm91bmQgc2hlbGxzIHdoaWNoCistCWNhbm5vdCBoYW5kbGUgbXB0eSBmb3IgbGlzdC4gIFJlcG9ydGVkIGJ5IEppbSBNZXllcmluZy4KKy0KKy1TYXQgSnVsIDEzIDE4OjExOjM1IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogU3BsaXQgZ29hbC4gIE5vdyBkZXBlbmQgb24gaW5zdGFsbC1leGVjCistICAgICAgICBhbmQgaW5zdGFsbC1kYXRhLgorLQkoaW5zdGFsbC1leGVjLCBpbnN0YWxsLWRhdGEpOiBOZXcgZ29hbHMuICBDcmVhdGVkIGZyb20gZm9ybWVyCistCWluc3RhbGwgZ29hbC4KKy0JUmVwb3J0ZWQgYnkgS2FybCBCZXJyeS4KKy0KKy1TYXQgSnVuIDIyIDA0OjU4OjE0IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIE1ha2VmaWxlLmluIChNS0lOU1RBTExESVJTKTogTmV3IHZhcmlhYmxlLiAgUGF0aCB0bworLSAgICAgICAgbWtpbnN0YWxsZGlycyBzY3JpcHQuCistCShpbnN0YWxsKTogdXNlIE1LSU5TVEFMTERJUlMgdmFyaWFibGUgb3IgaWYgdGhlIHNjcmlwdCBpcyBub3QgcHJlc2VudAorLQl0cnkgdG8gZmluZCBpdCBpbiB0aGUgJHRvcF9zY3JkaXIpLgorLQorLVdlZCBKdW4gMTkgMDI6NTY6NTYgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogbDEwbmZsaXN0LmM6IExpbnV4IGxpYmMgKnBhcnRseSogaW5jbHVkZXMgdGhlIGFyZ3pfKiBmdW5jdGlvbnMuCistCUdyci4gIFdvcmsgYXJvdW5kIGJ5IHJlbmFtaW5nIHRoZSBzdGF0aWMgdmVyc2lvbiBhbmQgdXNlIG1hY3JvcworLQlmb3IgcmVuYW1pbmcuCistCistVHVlIEp1biAxOCAyMDoxMToxNyAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBsMTBuZmxpc3QuYzogQ29ycmVjdCBwcmVzZW5jZSB0ZXN0IG1hY3JvcyBvZiBfX2FyZ3pfKiBmdW5jdGlvbnMuCistCistCSogbDEwbmZsaXN0LmM6IEluY2x1ZGUgPGFyZ3ouaD4gYmFzZWQgb24gdGVzdCBvZiBpdCBpbnN0ZWFkIHdoZW4KKy0JX19hcmd6XyogZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUuCistCVJlcG9ydGVkIGJ5IEFuZHJlYXMgU2Nod2FiLgorLQorLVRodSBKdW4gMTMgMTU6MTc6NDQgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogZXhwbG9kZW5hbWUuYywgbDEwbmZsaXN0LmM6IERlZmluZSBOVUxMIGZvciBkdW1iIHN5c3RlbXMuCistCistVHVlIEp1biAxMSAxNzowNToxMyAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBpbnRsaC5pbnN0LmluLCBsaWJnZXR0ZXh0LmggKGRjZ2V0dGV4dCk6IFJlbmFtZSBsb2NhbCB2YXJpYWJsZQorLQlyZXN1bHQgdG8gX19yZXN1bHQgdG8gcHJldmVudCBuYW1lIGNsYXNoLgorLQorLQkqIGwxMG5mbGlzdC5jLCBsb2NhbGVhbGlhcy5jLCBkY2dldHRleHQuYzogRGVmaW5lIF9HTlVfU09VUkNFIHRvCistICAgICAgICBnZXQgcHJvdG90eXBlIGZvciBzdHBjcHkgYW5kIHN0cmNhc2VjbXAuCistCistCSogaW50bGguaW5zdC5pbiwgbGliZ2V0dGV4dC5oOiBNb3ZlIGRlY2xhcmF0aW9uIG9mCistCWBfbmxfbXNnX2NhdF9jbnRyJyBvdXRzaWRlIF9fZXh0ZW5zaW9uX18gYmxvY2sgdG8gcHJldmVudCB3YXJuaW5nCistCWZyb20gZ2NjJ3MgLVduZXN0ZWQtZXh0ZXJuIG9wdGlvbi4KKy0KKy1GcmkgSnVuICA3IDAxOjU4OjAwIDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogUmVtb3ZlIGNvbW1lbnQuCistCistVGh1IEp1biAgNiAxNzoyODoxNyAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6IFdvcmsgYXJvdW5kIGZvciBhbm90aGVyIEJ1Z2xpeCBzdHVwaWRpdHkuCistCUFsd2F5cyB1c2UgYW4gYGVsc2UnIGNsb3NlIGZvciBgaWYncy4gIFJlcG9ydGVkIGJ5IE5lbHNvbiBCZWViZS4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW50bGguaW5zdCk6IENvcnJlY3QgdHlwbyBpbiBwaG9ueSBydWxlLgorLQlSZXBvcnRlZCBieSBOZWxzb24gQmVlYmUuCistCistVGh1IEp1biAgNiAwMTo0OTo1MiAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBkY2dldHRleHQuYyAocmVhZF9hbGlhc19maWxlKTogUmVuYW1lIHZhcmlhYmxlIGFsbG9jYV9saXN0IHRvCistCWJsb2NrX2xpc3QgYXMgdGhlIG1hY3JvIGNhbGxzIGFzc3VtZS4KKy0JUGF0Y2ggYnkgRXJpYyBCYWNrdXMuCistCistCSogbG9jYWxlYWxpYXMuYyBbIUhBVkVfQUxMT0NBXTogRGVmaW5lIGFsbG9jYSBhcyBtYWNybyB1c2luZworLSAgICAgICAgbWFsbG9jLgorLQkocmVhZF9hbGlhc19maWxlKTogUmVuYW1lIHZhcnJpYWJlIGFsbG9jYV9saXN0IHRvIGJsb2NrX2xpc3QgYXMgdGhlCistCW1hY3JvIGNhbGxzIGFzc3VtZS4KKy0JUGF0Y2ggYnkgRXJpYyBCYWNrdXMuCistCistCSogbDEwbmZsaXN0LmM6IENvcnJlY3QgY29uZGl0aW9uYWwgZm9yIDxhcmd6Lmg+IGluY2x1c2lvbi4KKy0JUmVwb3J0ZWQgYnkgUm9sYW5kIE1jR3JhdGguCistCistCSogTWFrZWZpbGUuaW4gKGFsbCk6IERlcGVuZCBvbiBhbGwtQFVTRV9JTkNMVURFRF9MSUJJTlRMQCwgbm90CistICAgICAgICBhbGwtQFVTRV9OTFNALgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogaW50bGguaW5zdCBjb21lcyBmcm9tIGxvY2FsIGRpciwgbm90CistICAgICAgICAkKHNyY2RpcikuCistCistCSogTWFrZWZpbGUuaW4gKGludGxoLmluc3QpOiBTcGVjaWFsIGhhbmRsaW5nIG9mIHRoaXMgZ29hbC4gIElmCistCXVzZWQgaW4gZ2V0dGV4dCwgdGhpcyBpcyByZWFsbHkgYSBydWwgdG8gY29uc3RydWN0IHRoaXMgZmlsZS4gIElmCistCXVzZWQgaW4gYW55IG90aGVyIHBhY2thZ2UgaXQgaXMgZGVmaW5lZCBhcyBhIC5QSE9OWSBydWxlIHdpdGgKKy0JZW1wdHkgYm9keS4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IEV4dHJhY3QgbG9jYWxlIGZpbGUgaW5mb3JtYXRpb24gaGFuZGxpbmcgaW50bworLQlsMTBuZmlsZS5jLiAgUmVuYW1lIGxvY2FsIHN0cGNweV9fIGZ1bmN0aW9uIHRvIHN0cGNweS4KKy0KKy0JKiBkY2dldHRleHQuYyAoc3RwY3B5KTogQWRkIGxvY2FsIGRlZmluaXRpb24uCistCistCSogbDEwbmZsaXN0LmM6IFNvbHZlIHNvbWUgcG9ydGFiaWxpdHkgcHJvYmxlbXMuICBQYXRjaGVzIHBhcnRseSBieQorLQlUaG9tYXMgRXNrZW4uICBBZGQgbG9jYWwgZGVmaW5pdGlvbiBvZiBzdHBjcHkuCistCistVHVlIEp1biAgNCAwMjo0Nzo0OSAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBpbnRsaC5pbnN0LmluOiBEb24ndCBkZXBlbmQgaW5jbHVkaW5nIDxsb2NhbGUuaD4gb24KKy0JSEFWRV9MT0NBTEVfSC4gIEluc3RlYWQgY29uZmlndXJlIG11c3QgcmV3cml0ZSB0aGlzIGZpaWxlCistCWRlcGVuZGluZyBvbiB0aGUgcmVzdWx0IG9mIHRoZSBjb25maWd1cmUgcnVuLgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogbGliaW50bC5pbnN0IGlzIG5vdyBjYWxsZWQgaW50bGguaW5zdC4KKy0JQWRkIHJ1bGVzIGZvciB1cGRhdGluZyBpbnRsaC5pbnN0IGZyb20gaW50bGguaW5zdC5pbi4KKy0KKy0JKiBsaWJpbnRsLmluc3Q6IFJlbmFtZWQgdG8gaW50bGguaW5zdC5pbi4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jLCBkY2dldHRleHQuYyBbX19HTlVDX19dOiBEZWZpbmUgSEFWRV9BTExPQ0EgdG8gMQorLSAgICAgICAgYmVjYXVzZSBnY2MgaGFzIF9fYnVpdGxpbl9hbGxvY2EuCistCVJlcG9ydGVkIGJ5IFJvbGFuZCBNY0dyYXRoLgorLQorLU1vbiBKdW4gIDMgMDA6MzI6MTYgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogTWFrZWZpbGUuaW4gKGluc3RhbGxjaGVjayk6IE5ldyBnb2FsIHRvIGZ1bGZpbGwgbmVlZHMgb2YKKy0gICAgICAgIGF1dG9tYWtlJ3MgZGlzdGNoZWNrLgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogUmVvcmRlciBjb21tYW5kcyBzbyB0aGF0IFZFUlNJT04gaXMKKy0gICAgICAgIGZvdW5kLgorLQorLQkqIE1ha2VmaWxlLmluIChnZXR0ZXh0c3JjZGlyKTogTm93IHVzZSBzdWJkaXJlY3RvcnkgaW50bC8gaW4KKy0gICAgICAgIEBkYXRhZGlyQC9nZXR0ZXh0LgorLQkoQ09NU1JDUyk6IEFkZCBsMTBuZmlsZS5jLgorLQkoT0JKRUNUUyk6IEFkZCBsMTBuZmlsZS5vLgorLQkoRElTVEZJTEVTKTogUmVuYW1lIHRvIERJU1RGSUxFLm5vcm1hbC4gIFJlbW92ZSAkKERJU1RGSUxFUy5jb21tb24pLgorLQkoRElTVEZJTEUuZ2V0dGV4dCk6IFJlbW92ZSAkKERJU1RGSUxFUy5jb21tb24pLgorLQkoYWxsLWdldHRleHQpOiBSZW1vdmUgZ29hbC4KKy0JKGluc3RhbGwpOiBJZiAkKFBBQ0tBR0UpID0gZ2V0dGV4dCBpbnN0YWxsLCBvdGhlcndvc2UgZG8gbm90aGluZy4gIE5vCistCXBhY2thZ2UgYnV0IGdldHRleHQgaXRzZWxmIHNob3VsZCBpbnN0YWxsIGxpYmludGwuaCArIGhlYWRlcnMuCistCShkaXN0KTogRXh0ZW5kIGdvYWwgdG8gd29yayBmb3IgZ2V0dGV4dCwgdG9vLgorLQkoZGlzdC1nZXR0ZXh0KTogUmVtb3ZlIGdvYWwuCistCistCSogZGNnZXR0ZXh0LmMgWyFIQVZFX0FMTE9DQV06IERlZmluZSBtYWNybyBhbGxvY2EgYnkgdXNpbmcgbWFsbG9jLgorLQorLVN1biBKdW4gIDIgMTc6MzM6MDYgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogbG9hZG1zZ2NhdC5jIChfbmxfbG9hZF9kb21haW4pOiBQYXJhbWV0ZXIgaXMgbm93IGNvbWVzIGZyb20KKy0gICAgICAgIGZpbmRfbDEwbmZpbGUuCistCistU2F0IEp1biAgMSAwMjoyMzowMyAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBsMTBuZmxpc3QuYyAoX19hcmd6X25leHQpOiBBZGQgZGVmaW5pdGlvbi4KKy0KKy0JKiBkY2dldHRleHQuYyBbIUhBVkVfQUxMT0NBXTogQWRkIGNvZGUgZm9yIGhhbmRsaW5nIG1pc3NpbmcgYWxsb2NhCistCWNvZGUuICBVc2UgbmV3IGwxMG5maWxlIGhhbmRsaW5nLgorLQorLQkqIGxvY2FsZWFsaWFzLmMgWyFIQVZFX0FMTE9DQV06IEFkZCBjb2RlIGZvciBoYW5kbGluZyBtaXNzaW5nCistICAgICAgICBhbGxvY2EgY29kZS4KKy0KKy0JKiBsMTBuZmxpc3QuYzogSW5pdGlhbCByZXZpc2lvbi4KKy0KKy1UdWUgQXByICAyIDE4OjUxOjE4IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKGFsbC1nZXR0ZXh0KTogTmV3IGdvYWwuICBTYW1lIGFzIGFsbC15ZXMuCistCistVGh1IE1hciAyOCAyMzowMToyMiAxOTk2ICBLYXJsIEVpY2h3YWxkZXIgIDxrZUBrZS5jZW50cmFsLmRlPgorLQorLQkqIE1ha2VmaWxlLmluIChnZXR0ZXh0c3JjZGlyKTogRGVmaW5lIHVzaW5nIEBkYXRhZGlyQC4KKy0KKy1UdWUgTWFyIDI2IDEyOjM5OjE0IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogZmluZGRvbWFpbi5jOiBJbmNsdWRlIDxjdHlwZS5oPi4gIFJlcG9ydGVkIGJ5IFJvbGFuZCBNY0dyYXRoLgorLQorLVNhdCBNYXIgMjMgMDI6MDA6MzUgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKHN0cGNweSk6IFJlbmFtZSB0byBzdHBjcHlfXyB0byBwcmV2ZW50IGNsYXNoaW5nCistICAgICAgICB3aXRoIGV4dGVybmFsIGRlY2xhcmF0aW9uLgorLQorLVNhdCBNYXIgIDIgMDA6NDc6MDkgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoYWxsLW5vKTogUmVuYW1lIGZyb20gYWxsX25vLgorLQorLVNhdCBGZWIgMTcgMDA6MjU6NTkgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBnZXR0ZXh0UC5oIFtsb2FkZWRfZG9tYWluXTogQXJyYXkgYHN1Y2Nlc3NvcicgbXVzdCBub3cgY29udGFpbiB1cAorLSAgICAgICAgdG8gNjMgZWxlbWVudHMgKGJlY2F1c2Ugb2YgY29kZXNldCBuYW1lIG5vcm1hbGl6YXRpb24pLgorLQorLQkqIGZpbmRkb21haW4uYzogSW1wbGVtZW50IGNvZGVzZXQgbmFtZSBub3JtYWxpemF0aW9uLgorLQorLVRodSBGZWIgMTUgMDQ6Mzk6MDkgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoYWxsKTogRGVmaW5lIHRvIGBhbGwtQFVTRV9OTFNAJy4KKy0JKGFsbC15ZXMsIGFsbF9ubyk6IE5ldyBnb2Fscy4gIGBhbGwtbm8nIGlzIG5vb3AsIGBhbGwteWVzJworLQlpcyBmb3JtZXIgYWxsLgorLQorLU1vbiBKYW4gMTUgMjE6NDY6MDEgMTk5NiAgSG93YXJkIEdheWxlICA8aG93YXJkQGhhbC5jb20+CistCistCSogbG9jYWxlYWxpYXMuYyAoYWxpYXNfY29tcGFyZSk6IEluY3JlbWVudCBzdHJpbmcgcG9pbnRlcnMgaW4gbG9vcAorLSAgICAgICAgb2Ygc3RyY2FzZWNtcCByZXBsYWNlbWVudC4KKy0KKy1GcmkgRGVjIDI5IDIxOjE2OjM0IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtc3JjKTogV2hvIGNvbW1lbnRlZCB0aGlzIGdvYWwgb3V0ID8gOi0pCistCistRnJpIERlYyAyOSAxNTowODoxNiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGRjZ2V0dGV4dC5jIChEQ0dFVFRFWFQpOiBTYXZlIGBlcnJubycuICBGYWlsaW5nIHN5c3RlbSBjYWxscworLQlzaG91bGQgbm90IGVmZmVjdCBpdCBiZWNhdXNlIGEgbWlzc2luZyBjYXRhbG9nIGlzIG5vIGVycm9yLgorLQlSZXBvcnRlZCBieSBIYXJhbGQgSzxvOj5uaWcgPGtvZW5pZ0B0YXQucGh5c2lrLnVuaS10dWViaW5nZW4uZGU+LgorLQorLVR1ZSBEZWMgMTkgMjI6MDk6MTMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoTWFrZWZpbGUpOiBFeHBsaWNpdGx5IHVzZSAkKFNIRUxMKSBmb3IgcnVubmluZworLSAgICAgICAgc2hlbGwgc2NyaXB0cy4KKy0KKy1GcmkgRGVjIDE1IDE3OjM0OjU5IDE5OTUgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsLXNyYyk6IE9ubHkgaW5zdGFsbCBsaWJyYXJ5IGFuZCBoZWFkZXIgd2hlbgorLQl3ZSB1c2UgdGhlIG93biBpbXBsZW1lbnRhdGlvbi4gIERvbid0IGRvIGl0IHdoZW4gdXNpbmcgdGhlCistCXN5c3RlbSdzIGdldHRleHQgb3IgY2F0Z2V0cyBmdW5jdGlvbnMuCistCistCSogZGNnZXR0ZXh0LmMgKGZpbmRfbXNnKTogTXVzdCBub3Qgc3dhcCBkb21haW4tPmhhc2hfc2l6ZSBoZXJlLgorLQorLVNhdCBEZWMgIDkgMTY6MjQ6MzcgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jLCBsaWJpbnRsLmluc3QsIGxpYmdldHRleHQuaCwgaGFzaC1zdHJpbmcuaCwKKy0JZ2V0dGV4dFAuaCwgZmluZGRvbWFpbi5jLCBkY2dldHRleHQuYywgY2F0LWNvbXBhdC5jOgorLQlVc2UgUEFSQU1TIGluc3RlYWQgb2YgX19QLiAgU3VnZ2VzdGVkIGJ5IFJvbGFuZCBNY0dyYXRoLgorLQorLVR1ZSBEZWMgIDUgMTE6Mzk6MTQgMTk5NSAgTGFycnkgU2Nod2ltbWVyICA8cm9zZWJ1ZEBjeWNsb25lLnN0YW5mb3JkLmVkdT4KKy0KKy0JKiBsaWJnZXR0ZXh0Lmg6IFVzZSBgI2lmICFkZWZpbmVkIChfTElCSU5UTF9IKScgaW5zdGVhZCBvZiBgI2lmCistCSFfTElCSU5UTF9IJyBiZWNhdXNlIFNvbGFyaXMgZGVmaW5lcyBfTElCSU5UTF9IIGFzIGVtcHR5LgorLQorLU1vbiBEZWMgIDQgMTU6NDI6MDcgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1zcmMpOgorLQlJbnN0YWxsIGxpYmludGwuaW5zdCBpbnN0ZWFkIG9mIGxpYmludGwuaC5pbnN0YWxsLgorLQorLVNhdCBEZWMgIDIgMjI6NTE6MzggMTk5NSAgTWFyY3VzIERhbmllbHMgIDxtYXJjdXNAc3lzYy5wZHguZWR1PgorLQorLQkqIGNhdC1jb21wYXQuYyAodGV4dGRvbWFpbik6CistCVJldmVyc2Ugb3JkZXIgaW4gd2hpY2ggZmlsZXMgYXJlIHRyaWVkIHlvdSBsb2FkLiAgRmlyc3QKKy0JdHJ5IGxvY2FsIGZpbGUsIHdoZW4gdGhpcyBmYWlsZWQgYWJzb2x1dGUgcGF0aC4KKy0KKy1XZWQgTm92IDI5IDAyOjAzOjUzIDE5OTUgIE5lbHNvbiBILiBGLiBCZWViZSAgPGJlZWJlQG1hdGgudXRhaC5lZHU+CistCistCSogY2F0LWNvbXBhdC5jIChiaW5kdGV4dGRvbWFpbik6IEFkZCBtaXNzaW5nIHsgfS4KKy0KKy1TdW4gTm92IDI2IDE4OjIxOjQxIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogbGliaW50bC5pbnN0OiBBZGQgbWlzc2luZyBfX1AgZGVmaW5pdGlvbi4gIFJlcG9ydGVkIGJ5IE5lbHNvbiBCZWViZS4KKy0KKy0JKiBNYWtlZmlsZS5pbjoKKy0JQWRkIGR1bW15IGBhbGwnIGFuZCBgZHZpJyBnb2Fscy4gIFJlcG9ydGVkIGJ5IFRvbSBUcm9tZXkuCistCistU2F0IE5vdiAyNSAxNjoxMjowMSAxOTk1ICBGcmFuYyxvaXMgUGluYXJkICA8cGluYXJkQGlyby51bW9udHJlYWwuY2E+CistCistCSogaGFzaC1zdHJpbmcuaDogQ2FwaXRhbGl6ZSBhcmd1bWVudHMgb2YgbWFjcm9zLgorLQorLVNhdCBOb3YgMjUgMTI6MDE6MzYgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoRElTVEZJTEVTKTogUHJldmVudCBmaWxlcyBuYW1lcyBsb25nZXIgdGhhbiAxMworLQljaGFyYWN0ZXJzLiAgbGliaW50bC5oLmdsaWJjLT5saWJpbnRsLmdsaWJjLAorLQlsaWJpbnRsLmguaW5zdGFsbC0+bGliaW50bC5pbnN0LiAgUmVwb3J0ZWQgYnkgSm9zaHVhIFIuIFBvdWxzb24uCistCistU2F0IE5vdiAyNSAxMTozMToxMiAxOTk1ICBFcmljIEJhY2t1cyAgPGVyaWNiQGxzaWQuaHAuY29tPgorLQorLQkqIGRjZ2V0dGV4dC5jOiBGaXggYnVnIGluIHByZXByb2Nlc3NvciBjb25kaXRpb25hbHMuCistCistU2F0IE5vdiAyNSAwMjozNToyNyAxOTk1ICBOZWxzb24gSC4gRi4gQmVlYmUgIDxiZWViZUBtYXRoLnV0YWguZWR1PgorLQorLQkqIGxpYmdldHRleHQuaDogU29sYXJpcyBjYyBkb2VzIG5vdCB1bmRlcnN0YW5kCistCSAjaWYgIVNZTUJPTDEgJiYgIVNZTUJPTDIuICBTYWQJYnV0IHRydWUuCistCistVGh1IE5vdiAyMyAxNjoyMjoxNCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGhhc2gtc3RyaW5nLmggKGhhc2hfc3RyaW5nKToKKy0JRml4IGZvciBtYWNoaW5lIHdpdGggPjMyIGJpdCBgdW5zaWduZWQgbG9uZydzLgorLQorLQkqIGRjZ2V0dGV4dC5jIChEQ0dFVFRFWFQpOgorLQlGaXggaG9ycmlibGUgYnVnIGluIGxvb3AgZm9yIGFsdGVybmF0aXZlIHRyYW5zbGF0aW9uLgorLQorLVRodSBOb3YgMjMgMDE6NDU6MjkgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBwbzJ0Ymwuc2VkLmluLCBsaW51eC1tc2cuc2VkLCB4b3Blbi1tc2cuc2VkOgorLQlTb21lIGZ1cnRoZXIgc2ltcGxpZmljYXRpb25zIGluIG1lc3NhZ2UgbnVtYmVyIGdlbmVyYXRpb24uCistCistTW9uIE5vdiAyMCAyMTowODo0MyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxpYmludGwuaC5nbGliYzogVXNlIF9fY29uc3QgaW5zdGVhZCBvZiBjb25zdCBpbiBwcm90b3R5cGVzLgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsLXNyYyk6CistCUluc3RhbGwgbGliaW50bC5oLmluc3RhbGwgaW5zdGVhZCBvZiBsaWJpbnRsLmguICBUaGlzCistCWlzIGEgc3RyaXBwZWQtZG93biB2ZXJzaW9uLiAgU3VnZ2VzdGVkIGJ5IFBldGVyIE1pbGxlci4KKy0KKy0JKiBsaWJpbnRsLmguaW5zdGFsbCwgbGliaW50bC5oLmdsaWJjOiBJbml0aWFsIHJldmlzaW9uLgorLQorLQkqIGxvY2FsZWFsaWFzLmMgKF9ubF9leHBhbmRfYWxpYXMsIHJlYWRfYWxpYXNfZmlsZSk6CistCVByb3RlY3QgcHJvdG90eXBlcyBpbiB0eXBlIGNhc3RzIGJ5IF9fUC4KKy0KKy1UdWUgTm92IDE0IDE2OjQzOjU4IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogaGFzaC1zdHJpbmcuaDogQ29ycmVjdCBwcm90b3R5cGUgZm9yIGhhc2hfc3RyaW5nLgorLQorLVN1biBOb3YgMTIgMTI6NDI6MzAgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBoYXNoLXN0cmluZy5oIChoYXNoX3N0cmluZyk6IEFkZCBwcm90b3R5cGUuCistCistCSogZ2V0dGV4dFAuaDogRml4IGNvcHlyaWdodC4KKy0JKFNXQVApOiBBZGQgcHJvdG90eXBlLgorLQorLVdlZCBOb3YgIDggMjI6NTY6MzMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jIChyZWFkX2FsaWFzX2ZpbGUpOiBGb3Jnb3Qgc2l6ZW9mLgorLQlBdm9pZCBjYWxsaW5nICpwcmludGYgZnVuY3Rpb24uICBUaGlzIGludHJvZHVjZXMgYSBiaWcgb3ZlcmhlYWQuCistCVBhdGNoIGJ5IFJvbGFuZCBNY0dyYXRoLgorLQorLVR1ZSBOb3YgIDcgMTQ6MjE6MDggMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmMsIGNhdC1jb21wYXQuYzogV3JvbmcgaW5kZW50YXRpb24gaW4gI2lmIGZvciBzdHBjcHkuCistCistCSogZmluZGRvbWFpbi5jIChzdHBjcHkpOgorLQlEZWZpbmUgc3Vic3RpdHV0aW9uIGZ1bmN0aW9uIGxvY2FsLiAgVGhlIG1hY3JvIHdhcyB0byBmbGFreS4KKy0KKy0JKiBjYXQtY29tcGF0LmM6IEZpeCB0eXBvLgorLQorLQkqIHhvcGVuLW1zZy5zZWQsIGxpbnV4LW1zZy5zZWQ6CistCVdoaWxlIGJyaW5naW5nIG1lc3NhZ2UgbnVtYmVyIHRvIHJpZ2h0IHBsYWNlIG9ubHkgYWNjZXB0IGRpZ2l0cy4KKy0KKy0JKiBsaW51eC1tc2cuc2VkLCB4b3Blbi1tc2cuc2VkOiBOb3cgdGhhdCB0aGUgY291bnRlciBkb2VzIG5vdCBoYXZlCistCWxlYWRpbmcgMHMgd2UgZG9uJ3QgbmVlZCB0byByZW1vdmUgdGhlbS4gIFJlcG9ydGVkIGJ5IE1hcmN1cworLQlEYW5pZWxzLgorLQorLQkqIE1ha2VmaWxlLmluICguLi9wby9jYXQtaWQtdGJsLm8pOiBVc2UgJCh0b3Bfc3JkaXIpIGluCistCWRlcGVuZGVuY3kuICBSZXBvcnRlZCBieSBNYXJjdXMgRGFuaWVscy4KKy0KKy0JKiBjYXQtY29tcGF0LmM6IChzdHBjcHkpIFshX0xJQkMgJiYgIUhBVkVfU1RQQ1BZXTogRGVmaW5lIHJlcGxhY2VtZW50LgorLQlHZW5lcmFsbHkgY2xlYW51cCB1c2luZyAjaWYgaW5zdGVhZCBvZiAjaWZuZGVmLgorLQorLQkqIE1ha2VmaWxlLmluOiBDb3JyZWN0IHR5cG9zIGluIGNvbW1lbnQuICBCeSBGcmFuYyxvaXMgUGluYXJkLgorLQorLU1vbiBOb3YgIDYgMDA6Mjc6MDIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1zcmMpOiBEb24ndCBpbnN0YWxsIGxpYmludGwuaCBhbmQgbGliaW50bC5hCistCWlmIHdlIHVzZSBhbiBhdmFpbGFibGUgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbi4KKy0KKy1TdW4gTm92ICA1IDIyOjAyOjA4IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogbGliZ2V0dGV4dC5oOiBGaXggdHlwbzogSEFWRV9DQVRHRVRUUyAtPiBIQVZFX0NBVEdFVFMuICBSZXBvcnRlZAorLQlieSBGcmFuYyxvaXMgUGluYXJkLgorLQorLQkqIGxpYmdldHRleHQuaDogVXNlICNpZiBpbnN0ZWFkIG9mICNpZmRlZi8jaWZuZGVmLgorLQorLQkqIGZpbmRkb21haW4uYzoKKy0JQ29tbWVudHMgZGVzY3JpYmluZyB3aGF0IGhhcyB0byBiZSBkb25lIHNob3VsZCBzdGFydCB3aXRoIEZJWE1FLgorLQorLVN1biBOb3YgIDUgMTk6Mzg6MDEgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoRElTVEZJTEVTKTogU3BsaXQuICBVc2UgRElTVEZJTEVTIHdpdGggbm9ybWFsIG1lYW5pbmcuCistCURJU1RGSUxFUy5jb21tb24gbmFtZXMgdGhlIGZpbGVzIGNvbW1vbiB0byBib3RoIGRpc3QgZ29hbHMuCistCURJU1RGSUxFUy5nZXR0ZXh0IGFyZSB0aGUgZmlsZXMgb25seSBkaXN0cmlidXRlZCBpbiBHTlUgZ2V0dGV4dC4KKy0KKy1TdW4gTm92ICA1IDE3OjMyOjU0IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogZGNnZXR0ZXh0LmMgKERDR0VUVEVYVCk6IENvcnJlY3Qgc2VhcmNoaW5nIGluIGRlcml2ZWQgbG9jYWxlcy4KKy0JVGhpcyB3YXMgbmVjZXNzYXJ5IHNpbmNlIGEgY2hhbmdlIGluIF9ubF9maW5kX21zZyBzZXZlcmFsIHdlZWtzCistCWFnby4gIEkgcmVhbGx5IGRvbid0IGtub3cgdGhpcyBpcyBzdGlsbCBub3QgZml4ZWQuCistCistU3VuIE5vdiAgNSAxMjo0MzoxMiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxvYWRtc2djYXQuYyAoX25sX2xvYWRfZG9tYWluKTogVGVzdCBmb3IgRklMRU5BTUUgPT0gTlVMTC4gIFRoaXMKKy0JbWlnaHQgbWFyayBhIHNwZWNpYWwgY29uZGl0aW9uLgorLQorLQkqIGZpbmRkb21haW4uYyAobWFrZV9lbnRyeV9yZWMpOiBEb24ndCBtYWtlIGlsbGVnYWwgZW50cnkgYXMgZGVjaWRlZC4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoZGlzdCk6IFN1cHByZXNzIGVycm9yIG1lc3NhZ2Ugd2hlbiBsbiBmYWlsZWQuCistCUdldCBmaWxlcyBmcm9tICQoc3JjZGlyKSBleHBsaWNpdGx5LgorLQorLQkqIGxpYmdldHRleHQuaCAoZ2V0dGV4dF9jb25zdCk6IFJlbmFtZSB0byBnZXR0ZXh0X25vb3AuCistCistRnJpIE5vdiAgMyAwNzozNjo1MCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGZpbmRkb21haW4uYyAobWFrZV9lbnRyeV9yZWMpOgorLQlQcm90ZWN0IGFnYWluc3Qgd3JvbmcgbG9jYWxlIG5hbWVzIGJ5IHRlc3RpbmcgbWFzay4KKy0KKy0JKiBsaWJnZXR0ZXh0LmggKGdldHRleHRfY29uc3QpOiBBZGQgbWFjcm8gZGVmaW5pdGlvbi4KKy0JQ2FwaXRhbGl6ZSBtYWNybyBhcmd1bWVudHMuCistCistVGh1IE5vdiAgMiAyMzoxNTo1MSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGZpbmRkb21haW4uYyAoX25sX2ZpbmRfZG9tYWluKToKKy0JVGVzdCBmb3IgcG9pbnRlciAhPSBOVUxMIGJlZm9yZSBhY2Nlc3NpbmcgdmFsdWUuCistCVJlcG9ydGVkIGJ5IFRvbSBUcm9tZXkuCistCistCSogZ2V0dGV4dC5jIChOVUxMKToKKy0JRGVmaW5lIGFzICh2b2lkKikwIGluc3RhZCBvZiAwLiAgUmVwb3J0ZWQgYnkgRnJhbmMsb2lzIFBpbmFyZC4KKy0KKy1Nb24gT2N0IDMwIDIxOjI4OjUyIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogcG8ydGJsLnNlZC5pbjogU2VyaW91cyB0eXBvIGJ1ZyBmaXhlZCBieSBKaW0gTWV5ZXJpbmcuCistCistU2F0IE9jdCAyOCAyMzoyMDo0NyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxpYmdldHRleHQuaDogRGlzYWJsZSBkY2dldHRleHQgb3B0aW1pemF0aW9uIGZvciBTb2xhcmlzIDIuMy4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jIChhbGlhc19jb21wYXJlKToKKy0JUGV0ZXIgTWlsbGVyIHJlcG9ydGVkIHRoYXQgdG9sb3dlciBpbiBzb21lIHN5c3RlbXMgaXMKKy0JZXZlbiBkdW1iZXIgdGhhbiBJIHRob3VnaHQuICBQcm90ZWN0IGNhbGwgYnkgYGlzdXBwZXInLgorLQorLUZyaSBPY3QgMjcgMjI6MjI6NTEgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAobGliZGlyLCBpbmNsdWRlZGlyKTogTmV3IHZhcmlhYmxlcy4KKy0JKGluc3RhbGwtc3JjKTogSW5zdGFsbCBsaWJpbnRsLmEgYW5kIGxpYmludGwuaCBpbiBjb3JyZWN0IGRpcnMuCistCistRnJpIE9jdCAyNyAyMjowNzoyOSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChTT1VSQ0VTKTogRml4IHR5cG86IGludHJsLmNvbXBhdC5jIC0+IGludGwtY29tcGF0LmMuCistCistCSogcG8ydGJsLnNlZC5pbjogUGF0Y2ggZm9yIGJ1Z2d5IFNFRHMgYnkgQ2hyaXN0aWFuIHZvbiBSb3F1ZXMuCistCistCSogbG9jYWxlYWxpYXMuYzoKKy0JRml4IHR5cG8gYW5kIHN1cGVyZmxvdXMgdGVzdC4gIFJlcG9ydGVkIGJ5IENocmlzdGlhbiB2b24gUm9xdWVzLgorLQorLUZyaSBPY3QgIDYgMTE6NTI6MDUgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKF9ubF9maW5kX2RvbWFpbik6CistCUNvcnJlY3Qgc29tZSByZW1haW5kZXIgZnJvbSB0aGUgcHJlLUNFTiBzeW50YXguICBOb3cKKy0Jd2UgZG9uJ3QgaGF2ZSBhIGNvbnN0YW50IG51bWJlciBvZiBzdWNjZXNzb3JzIGFueW1vcmUuCistCistV2VkIFNlcCAyNyAyMTo0MToxMyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOiBBZGQgbGliaW50bC5oLmdsaWJjLgorLQorLQkqIE1ha2VmaWxlLmluIChkaXN0LWxpYmMpOiBBZGQgZ29hbCBmb3IgcGFja2luZyBzb3VyY2VzIGZvciBnbGliYy4KKy0JKENPTVNSQ1MsIENPTUhEUlMpOiBTcGxpdHRlZCB0byBzZXBhcmF0ZSBzb3VyY2VzIHNoYXJlZCB3aXRoIGdsaWJjLgorLQorLQkqIGxvYWRtc2djYXQuYzogRm9yZ2V0IHRvIGNvbnRpbnVlICNpZiBsaW5lLgorLQorLQkqIGxvY2FsZWFsaWFzLmM6CistCVtfTElCQ106IFJlbmFtZSBzdHJjYXNlY21wIHRvIF9fc3RyY2FzZWNtcCB0byBrZWVwIEFOU0kgQyBuYW1lCistCXNwYWNlIGNsZWFuLgorLQorLQkqIGRjZ2V0dGV4dC5jLCBmaW5kZG9tYWluLmM6IEJldHRlciBjb21tZW50IHRvIGxhc3QgY2hhbmdlLgorLQorLQkqIGxvYWRtc2djYXQuYzoKKy0JW19MSUJDXTogUmVuYW1lIGZzdGF0LCBvcGVuLCBjbG9zZSwgcmVhZCwgbW1hcCwgYW5kIG11bm1hcCB0bworLQlfX2ZzdGF0LCBfX29wZW4sIF9fY2xvc2UsIF9fcmVhZCwgX19tbWFwLCBhbmQgX19tdW5tYXAgcmVzcAorLQl0byBrZWVwIEFOU0kgQyBuYW1lIHNwYWNlIGNsZWFuLgorLQorLQkqIGZpbmRkb21haW4uYzoKKy0JW19MSUJDXTogUmVuYW1lIHN0cGNweSB0byBfX3N0cGNweSB0byBrZWVwIEFOU0kgQyBuYW1lIHNwYWNlIGNsZWFuLgorLQorLQkqIGRjZ2V0dGV4dC5jOgorLQlbX0xJQkNdOiBSZW5hbWUgZ2V0Y2VkIGFuZCBzdHBjcHkgdG8gX19nZXRjd2QgYW5kIF9fc3RwY3B5IHJlc3AgdG8KKy0Ja2VlcCBBTlNJIEMgbmFtZSBzcGFjZSBjbGVhbi4KKy0KKy0JKiBsaWJnZXR0ZXh0Lmg6CistCUluY2x1ZGUgc3lzL3R5cGVzLmggZm9yIHRob3NlIG9sZCBTeXNWIHN5c3RlbXMgb3V0IHRoZXJlLgorLQlSZXBvcnRlZCBieSBGcmFuY2VzY28gUG90b3J0aWAuCistCistCSogbG9hZG1zZ2NhdC5jICh1c2VfbW1hcCk6IERlZmluZSBpZiBjb21waWxlZCBmb3IgZ2xpYmMuCistCistCSogYmluZHRleHRkb20uYzogSW5jbHVkZSBhbGwgdGhvc2Ugc3RhbmRhcmQgaGVhZGVycworLQl1bmNvbmRpdGlvbmFsbHkgaWYgX0xJQkMgaXMgZGVmaW5lZC4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IEZpeCAyIHRpbWVzIGRlZmllbmQgLT4gZGVmaW5lZC4KKy0KKy0JKiB0ZXh0ZG9tYWluLmM6IEluY2x1ZGUgbGliaW50bC5oIGluc3RlYWQgb2YgbGliZ2V0dGV4dC5oIHdoZW4KKy0JY29tcGlsaW5nIGZvciBnbGliYy4gIEluY2x1ZGUgYWxsIHRob3NlIHN0YW5kYXJkIGhlYWRlcnMKKy0JdW5jb25kaXRpb25hbGx5IGlmIF9MSUJDIGlzIGRlZmluZWQuCistCistCSogbG9jYWxlYWxpYXMuYywgbG9hZG1zZ2NhdC5jOiBQcmVwYXJlIHRvIGJlIGNvbXBpbGVkIGluIGdsaWJjLgorLQorLQkqIGdldHRleHQuYzoKKy0JSW5jbHVkZSBsaWJpbnRsLmggaW5zdGVhZCBvZiBsaWJnZXR0ZXh0Lmggd2hlbiBjb21waWxpbmcgZm9yIGdsaWJjLgorLQlHZXQgTlVMTCBmcm9tIHN0ZGRlZi5oIGlmIHdlIGNvbXBpbGUgZm9yIGdsaWJjLgorLQorLQkqIGZpbmRkb21haW4uYzogSW5jbHVkZSBsaWJpbnRsLmggaW5zdGVhZCBvZiBsaWJnZXR0ZXh0Lmggd2hlbgorLQljb21waWxpbmcgZm9yIGdsaWJjLiAgSW5jbHVkZSBhbGwgdGhvc2Ugc3RhbmRhcmQgaGVhZGVycworLQl1bmNvbmRpdGlvbmFsbHkgaWYgX0xJQkMgaXMgZGVmaW5lZC4KKy0KKy0JKiBkY2dldHRleHQuYzogSW5jbHVkZSBhbGwgdGhvc2Ugc3RhbmRhcmQgaGVhZGVycyB1bmNvbmRpdGlvbmFsbHkKKy0JaWYgX0xJQkMgaXMgZGVmaW5lZC4KKy0KKy0JKiBkZ2V0dGV4dC5jOiBJZiBjb21waWxlZCBpbiBnbGliYyBpbmNsdWRlIGxpYmludGwuaCBpbnN0ZWFkIG9mCistCWxpYmdldHRleHQuaC4KKy0JKGxvY2FsZS5oKTogRG9uJ3QgcmVseSBvbiBIQVZFX0xPQ0FMRV9IIHdoZW4gY29tcGlsaW5nIGZvciBnbGliYy4KKy0KKy0JKiBkY2dldHRleHQuYzogSWYgY29tcGlsZWQgaW4gZ2xpYmMgaW5jbHVkZSBsaWJpbnRsLmggaW5zdGVhZCBvZgorLQlsaWJnZXR0ZXh0LmguCistCShnZXRjd2QpOiBEb24ndCByZWx5IG9uIEhBVkVfR0VUQ1dEIHdoZW4gY29tcGlsaW5nIGZvciBnbGliYy4KKy0KKy0JKiBiaW5kdGV4dGRvbS5jOgorLQlJZiBjb21waWxlZCBpbiBnbGliYyBpbmNsdWRlIGxpYmludGwuaCBpbnN0ZWFkIG9mIGxpYmdldHRleHQuaC4KKy0KKy1Nb24gU2VwIDI1IDIyOjIzOjA2IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogbG9jYWxlYWxpYXMuYyAoX25sX2V4cGFuZF9hbGlhcyk6IERvbid0IGNhbGwgYnNlYXJjaCBpZiBOTUFQIDw9IDAuCistCVJlcG9ydGVkIGJ5IE1hcmN1cyBEYW5pZWxzLgorLQorLQkqIGNhdC1jb21wYXQuYyAoYmluZHRleHRkb21haW4pOgorLQlTdHJpbmcgdXNlZCBpbiBwdXRlbnYgbXVzdCBub3QgYmUgcmVjeWNsZWQuCistCVJlcG9ydGVkIGJ5IE1hcmN1cyBEYW5pZWxzLgorLQorLQkqIGxpYmdldHRleHQuaCAoX19VU0VfR05VX0dFVFRFWFQpOgorLQlBZGRpdGlvbmFsIHN5bWJvbCB0byBzaWduYWwgdGhhdCB3ZSB1c2UgR05VIGdldHRleHQKKy0JbGlicmFyeS4KKy0KKy0JKiBjYXQtY29tcGF0LmMgKGJpbmR0ZXh0ZG9tYWluKToKKy0JRml4IGJ1ZyB3aXRoIHRoZSBzdHJhbmdlIHN0cGNweSByZXBsYWNlbWVudC4KKy0JUmVwb3J0ZWQgYnkgTmVsc29uIEJlZWJlLgorLQorLVNhdCBTZXAgMjMgMDg6MjM6NTEgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBjYXQtY29tcGF0LmM6IEluY2x1ZGUgPHN0cmluZy5oPiBmb3Igc3RwY3B5IHByb3RvdHlwZS4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jIChyZWFkX2FsaWFzX2ZpbGUpOgorLQlXaGlsZSBleHBhbmQgc3RyZHVwIGNvZGUgdGVtcG9yYXJ5IHZhcmlhYmxlIGBjcCcgaGlkZWQKKy0JaGlnaGVyIGxldmVsIHZhcmlhYmxlIHdpdGggc2FtZSBuYW1lLiAgUmVuYW1lIHRvIGB0cCcuCistCistCSogdGV4dGRvbWFpbi5jICh0ZXh0ZG9tYWluKToKKy0JQXZvaWQgd2FybmluZyBieSB1c2luZyB0ZW1wb3JhcnkgdmFyaWFibGUgaW4gc3RyZHVwIGNvZGUuCistCistCSogZmluZGRvbWFpbi5jIChfbmxfZmluZF9kb21haW4pOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBhcHBsaWNhdGlvbicuCistCistVGh1IFNlcCAyMSAxNTo1MTo0NCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxvY2FsZWFsaWFzLmMgKGFsaWFzX2NvbXBhcmUpOgorLQlVc2Ugc3RyY2FzZWNtcCgpIG9ubHkgaWYgYXZhaWxhYmxlLiAgRWxzZSB1c2UKKy0JaW1wbGVtZW50YXRpb24gaW4gcGxhY2UuCistCistCSogaW50bC1jb21wYXQuYzoKKy0JV3JhcHBlciBmdW5jdGlvbnMgbm93IGNhbGwgKl9fIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIF9fKi4KKy0KKy0JKiBsaWJnZXR0ZXh0Lmg6IERlY2xhcmUgcHJvdG90eXBlcyBmb3IgKl9fIGZ1bmN0aW9ucyBpbnN0ZWFkIGZvciBfXyouCistCistCSogY2F0LWNvbXBhdC5jLCBsb2FkbXNnY2F0LmM6CistCURvbid0IHVzZSB4bWFsbG9jLCB4c3RyZHVwLCBhbmQgc3RwY3B5LiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgcGFydAorLQlvZiB0aGUgc3RhbmRhcmQgbGliYyBhbmQgc28gcHJldmVudCBsaWJpbnRsLmEgZnJvbSBiZWluZyB1c2VkCistCXN0YW5kYWxvbmUuCistCistCSogYmluZHRleHRkb20uYzoKKy0JRG9uJ3QgdXNlIHhtYWxsb2MsIHhzdHJkdXAsIGFuZCBzdHBjcHkuICBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBwYXJ0CistCW9mIHRoZSBzdGFuZGFyZCBsaWJjIGFuZCBzbyBwcmV2ZW50IGxpYmludGwuYSBmcm9tIGJlaW5nIHVzZWQKKy0Jc3RhbmRhbG9uZS4KKy0JUmVuYW1lIHRvIGJpbmR0ZXh0ZG9tYWluX18gaWYgbm90IHVzZWQgaW4gR05VIEMgTGlicmFyeS4KKy0KKy0JKiBkZ2V0dGV4dC5jOgorLQlSZW5hbWUgZnVuY3Rpb24gdG8gZGdldHRleHRfXyBpZiBub3QgdXNlZCBpbiBHTlUgQyBMaWJyYXJ5LgorLQorLQkqIGdldHRleHQuYzoKKy0JRG9uJ3QgdXNlIHhtYWxsb2MsIHhzdHJkdXAsIGFuZCBzdHBjcHkuICBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBwYXJ0CistCW9mIHRoZSBzdGFuZGFyZCBsaWJjIGFuZCBzbyBwcmV2ZW50IGxpYmludGwuYSBmcm9tIGJlaW5nIHVzZWQKKy0Jc3RhbmRhbG9uZS4KKy0JRnVuY3Rpb25zIG5vdyBjYWxsZWQgZ2V0dGV4dF9fIGlmIG5vdCB1c2VkIGluIEdOVSBDIExpYnJhcnkuCistCistCSogZGNnZXR0ZXh0LmMsIGxvY2FsZWFsaWFzLmMsIHRleHRkb21haW4uYywgZmluZGRvbWFpbi5jOgorLQlEb24ndCB1c2UgeG1hbGxvYywgeHN0cmR1cCwgYW5kIHN0cGNweS4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHBhcnQKKy0Jb2YgdGhlIHN0YW5kYXJkIGxpYmMgYW5kIHNvIHByZXZlbnQgbGliaW50bC5hIGZyb20gYmVpbmcgdXNlZAorLQlzdGFuZGFsb25lLgorLQorLVN1biBTZXAgMTcgMjM6MTQ6NDkgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IENvcnJlY3Qgc29tZSBidWdzIGluIGhhbmRsaW5nIG9mIENFTiBzdGFuZGFyZAorLSAJbG9jYWxlIGRlZmluaXRpb25zLgorLQorLVRodSBTZXAgIDcgMDE6NDk6MjggMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IEltcGxlbWVudCBDRU4gc3ludGF4LgorLQorLQkqIGdldHRleHRQLmggKGxvYWRlZF9kb21haW4pOiBFeHRlbmQgbnVtYmVyIG9mIHN1Y2Nlc3NvcnMgdG8gMzEuCistCistU2F0IEF1ZyAxOSAxOToyNToyOSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChhbGlhc3BhdGgpOiBSZW1vdmUgcGF0aCB0byBYMTEgbG9jYWxlIGRpci4KKy0KKy0JKiBNYWtlZmlsZS5pbjogTWFrZSBpbnN0YWxsLXNyYyBkZXBlbmQgb24gaW5zdGFsbC4gIFRoaXMgaGVscHMKKy0gCWdldHRleHQgdG8gaW5zdGFsbCB0aGUgc291cmNlcyBhbmQgb3RoZXIgcGFja2FnZXMgY2FuIHVzZSB0aGUKKy0gCWluc3RhbGwgZ29hbC4KKy0KKy1TYXQgQXVnIDE5IDE1OjE5OjMzIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKHVuaW5zdGFsbCk6IFJlbW92ZSBzdHVmZiBpbnN0YWxsZWQgYnkgaW5zdGFsbC1zcmMuCistCistVHVlIEF1ZyAxNSAxMzoxMzo1MyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIFZFUlNJT04uaW46IEluaXRpYWwgcmV2aXNpb24uCistCistCSogTWFrZWZpbGUuaW4gKERJU1RGSUxFUyk6CistCUFkZCBWRVJTSU9OIGZpbGUuICBUaGlzIGlzIG5vdCBuZWNlc3NhcnkgZm9yIGdldHRleHQsIGJ1dAorLQlmb3Igb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhpcyBsaWJyYXJ5LgorLQorLVR1ZSBBdWcgMTUgMDY6MTY6NDQgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBnZXR0ZXh0UC5oIChfbmxfZmluZF9kb21haW4pOgorLQlOZXcgcHJvdG90eXBlIGFmdGVyIGNoYW5naW5nIHNlYXJjaCBzdHJhdGVneS4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKF9ubF9maW5kX2RvbWFpbik6CistCVdlIG5vdyB0cnkgb25seSB0byBmaW5kIGEgc3BlY2lmaWVkIGNhdGFsb2cuICBGYWxsIGJhY2sgdG8gb3RoZXIKKy0JY2F0YWxvZ3MgbGlzdGVkIGluIHRoZSBsb2NhbGUgbGlzdCBpcyBub3cgZG9uZSBpbiBfX2RjZ2V0dGV4dC4KKy0KKy0JKiBkY2dldHRleHQuYyAoX19kY2dldHRleHQpOgorLQlOb3cgd2UgcHJvdmlkZSBtZXNzYWdlIGZhbGwgYmFjayBldmVuIHRvIGRpZmZlcmVudCBsYW5ndWFnZXMuCistCUkuZS4gaWYgYSBtZXNzYWdlIGlzIG5vdCBhdmFpbGFibGUgaW4gb25lIGxhbmd1YWdlIGFsbCB0aGUgb3RoZXIKKy0gCWluIHRoZSBsb2NhbGUgbGlzdCBhIHRyaWVkLiAgRm9ybWVybHkgZmFsbCBiYWNrIHdhcyBvbmx5IHBvc3NpYmxlCistIAl3aXRoaW4gb25lIGxhbmd1YWdlLiAgSW1wbGVtZW50ZWQgYnkgbW92aW5nIG9uZSBsb29wIGZyb20KKy0gCV9ubF9maW5kX2RvbWFpbiB0byBoZXJlLgorLQorLU1vbiBBdWcgMTQgMjM6NDU6NTAgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoZ2V0dGV4dHNyY2Rpcik6CistCURpcmVjdG9yeSB3aGVyZSBzb3VyY2Ugb2YgR05VIGdldHRleHQgbGlicmFyeSBhcmUgbWFkZQorLQlhdmFpbGFibGUuCistCShJTlNUQUxMLCBJTlNUQUxMX0RBVEEpOiBQcm9ncmFtcyB1c2VkIGZvciBpbnN0YWxsaW5nIHNvdXJjZXMuCistCShnZXR0ZXh0LXNyYyk6IE5ldy4gIFJ1bGUgdG8gaW5zdGFsbCBHTlUgZ2V0dGV4dCBzb3VyY2VzIGZvciB1c2UgaW4KKy0JZ2V0dGV4dGl6ZSBzaGVsbCBzY3JpcHQuCistCistU3VuIEF1ZyAxMyAxNDo0MDo0OCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxvYWRtc2djYXQuYyAoX25sX2xvYWRfZG9tYWluKToKKy0JVXNlIG1tYXAgZm9yIGxvYWRpbmcgb25seSB3aGVuIG11bm1hcCBmdW5jdGlvbiBpcworLQlhbHNvIGF2YWlsYWJsZS4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6IERlcGVuZCBvbiBgYWxsJyBnb2FsLgorLQorLVdlZCBBdWcgIDkgMTE6MDQ6MzMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jIChyZWFkX2FsaWFzX2ZpbGUpOgorLQlEbyBub3Qgb3ZlcndyaXRlICdcbicgd2hlbiB0ZXJtaW5hdGluZyBhbGlhcyB2YWx1ZSBzdHJpbmcuCistCistCSogbG9jYWxlYWxpYXMuYyAocmVhZF9hbGlhc19maWxlKToKKy0JSGFuZGxlIGxvbmcgbGluZXMuICBJZ25vcmUgdGhlIHJlc3Qgbm90IGZpdHRpbmcgaW4KKy0JdGhlIGJ1ZmZlciBhZnRlciB0aGUgaW5pdGlhbCBgZmdldHMnIGNhbGwuCistCistV2VkIEF1ZyAgOSAwMDo1NDoyOSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGdldHRleHRQLmggKF9ubF9sb2FkX2RvbWFpbik6CistCUFkZCBwcm90b3R5cGUsIHJlcGxhY2luZyBwcm90b3R5cGUgZm9yIF9ubF9sb2FkX21zZ19jYXQuCistCistCSogZmluZGRvbWFpbi5jIChfbmxfZmluZF9kb21haW4pOgorLQlSZW1vdmUgdW5uZWVkZWQgdmFyaWFibGUgZmlsZW5hbWUgYW5kIGZpbGVuYW1lX2xlbi4KKy0JKGV4cGFuZF9hbGlhcyk6IFJlbW92ZSBwcm90b3R5cGUgYmVjYXVzZSBmdW5jdGlvbnMgZG9lcyBub3QKKy0gCWV4aXN0IGFueW1vcmUuCistCistCSogbG9jYWxlYWxpYXMuYyAocmVhZF9hbGlhc19maWxlKToKKy0JQ2hhbmdlIHR5cGUgb2YgZm5hbWVfbGVuIHBhcmFtZXRlciB0byBpbnQuCistCSh4bWFsbG9jKTogQWRkIHByb3RvdHlwZS4KKy0KKy0JKiBsb2FkbXNnY2F0LmM6IEJldHRlciBwcm90b3R5cGVzIGZvciB4bWFsbG9jLgorLQorLVR1ZSBBdWcgIDggMjI6MzA6MzkgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKF9ubF9maW5kX2RvbWFpbik6CistCUFsbG93IGFsaWFzIG5hbWUgdG8gYmUgY29uc3RydWN0ZWQgZnJvbSB0aGUgZm91ciBjb21wb25lbnRzLgorLQorLQkqIE1ha2VmaWxlLmluIChhbGlhc3BhdGgpOiBOZXcgdmFyaWFibGUuICBTZXQgdG8gcHJlbGltaW5hcnkgdmFsdWUuCistCShTT1VSQ0VTKTogQWRkIGxvY2FsZWFsaWFzLmMuCistCShPQkpFQ1RTKTogQWRkIGxvY2FsZWFsaWFzLm8uCistCistCSogZ2V0dGV4dFAuaDogQWRkIHByb3RvdHlwZSBmb3IgX25sX2V4cGFuZF9hbGlhcy4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IEFsaWFzaW5nIGhhbmRsZWQgaW4gaW50bC9sb2NhbGVhbGlhcy5jLgorLQorLQkqIGxvY2FsZWFsaWFzLmM6IEFsaWFzaW5nIGZvciBsb2NhbGUgbmFtZXMuCistCistCSogYmluZHRleHRkb20uYzogQmV0dGVyIHByb3RvdHlwZXMgZm9yIHhtYWxsb2MgYW5kIHhzdHJkdXAuCistCistTW9uIEF1ZyAgNyAyMzo0Nzo0MiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOiBnZXR0ZXh0LnBlcmwgaXMgbm93IGZvdW5kIGluIG1pc2MvLgorLQorLQkqIGNhdC1jb21wYXQuYyAoYmluZHRleHRkb21haW4pOgorLQlDb3JyZWN0IGltcGxlbWVudGF0aW9uLiAgZGlybmFtZSBwYXJhbWV0ZXIgd2FzIG5vdCB1c2VkLgorLQlSZXBvcnRlZCBieSBNYXJjdXMgRGFuaWVscy4KKy0KKy0JKiBnZXR0ZXh0UC5oIChsb2FkZWRfZG9tYWluKToKKy0JTmV3IGZpZWxkcyBgc3VjY2Vzc29yJyBhbmQgYGRlY2lkZWQnIGZvciBvbywgbGF6eQorLQltZXNzYWdlIGhhbmRsaW5nIGltcGxlbWVudGF0aW9uLgorLQorLQkqIGRjZ2V0dGV4dC5jOgorLQlBZG9wdCBmb3Igb28sIGxhenkgbWVzc2FnZSBoYW5kbGlpbmcuCistICAJTm93IHdlIGNhbiBpbmhlcml0IHRyYW5zbGF0aW9ucyBmcm9tIGxlc3Mgc3BlY2lmaWMgbG9jYWxlcy4KKy0JKGZpbmRfbXNnKTogTmV3IGZ1bmN0aW9uLgorLQorLQkqIGxvYWRtc2djYXQuYywgZmluZGRvbWFpbi5jOgorLQlDb21wbGV0ZSByZXdyaXRlLiAgSW1wbGVtZW50IG9vLCBsYXp5IG1lc3NhZ2UgaGFuZGxpbmcgOi0pLgorLSAgCVdlIG5vdyBoYXZlIGFuIGFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGUgYExBTkdVQUdFJyB3aXRoCistIAlhIGhpZ2hlciBwcmlvcml0eSB0aGFuIExDX0FMTCBmb3IgdGhlIExDX01FU1NBR0UgbG9jYWxlLgorLSAgCUhlcmUgd2UgY2FuIHNldCBhIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIHNwZWNpZmljYXRpb25zIGVhY2gKKy0gCW9mIHRoZSBmb3JtIGBsYW5ndWFnZVtfdGVycml0b3J5Wy5jb2Rlc2V0XV1bQG1vZGlmaWVyXScuCistCistU2F0IEF1ZyAgNSAwOTo1NTo0MiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGZpbmRkb21haW4uYyAodW5pc3RkLmgpOgorLQlJbmNsdWRlIHRvIGdldCBfUENfUEFUSF9NQVggZGVmaW5lZCBvbiBzeXN0ZW0gaGF2aW5nIGl0LgorLQorLUZyaSBBdWcgIDQgMjI6NDI6MDAgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKHN0cGNweSk6IEluY2x1ZGUgcHJvdG90eXBlLgorLQorLQkqIE1ha2VmaWxlLmluIChkaXN0KTogUmVtb3ZlIGBjb3B5aW5nIGluc3RlYWQnIG1lc3NhZ2UuCistCistV2VkIEF1ZyAgMiAxODo1MjowMyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChJRCwgVEFHUyk6IERvIG5vdCB1c2UgJF4uCistCistVHVlIEF1ZyAgMSAyMDowNzoxMSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChUQUdTLCBJRCk6IFVzZSAkXiBhcyBjb21tYW5kIGFyZ3VtZW50LgorLQkoVEFHUyk6IEdpdmUgZXRhZ3MgLW8gb3B0aW9uIHQgd3JpdGUgdG8gY3VycmVudCBkaXJlY3RvcnksCistIAlub3QgJChzcmNkaXIpLgorLQkoSUQpOiBVc2UgJChzcmNkaXIpIGluc3RlYWQgb3MgJCh0b3Bfc3JjZGlyKS9zcmMuCistCShkaXN0Y2xlYW4pOiBSZW1vdmUgSUQuCistCistU3VuIEp1bCAzMCAxMTo1MTo0NiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChnbnVsb2NhbGVkaXIpOgorLQlOZXcgdmFyaWFibGUsIGFsd2F5cyB1c2luZyBzaGFyZS8gZm9yIGRhdGEgZGlyZWN0b3J5LgorLQkoREVGUyk6IEFkZCBHTlVMT0NBTEVESVIsIHVzZWQgaW4gZmluZGRvbWFpbi5jLgorLQorLQkqIGZpbmRkb21haW4uYyAoX25sX2RlZmF1bHRfZGlybmFtZSk6CistCVNldCB0byBHTlVMT0NBTEVESVIsIGJlY2F1c2UgaXQgYWx3YXlzIGhhcyB0byBwb2ludAorLQl0byB0aGUgZGlyZWN0b3J5IHdoZXJlIEdOVSBnZXR0ZXh0IExpYnJhcnkgd3JpdGVzIGl0IHRvLgorLQorLQkqIGludGwtY29tcGF0LmMgKHRleHRkb21haW4sIGJpbmR0ZXh0ZG9tYWluKToKKy0JVW5kZWZpbmUgbWFjcm9zIGJlZm9yZSBmdW5jdGlvbiBkZWZpbml0aW9uLgorLQorLVNhdCBKdWwgMjIgMDE6MTA6MDIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBsaWJnZXR0ZXh0LmggKF9MSUJJTlRMX0gpOgorLQlQcm90ZWN0IGRlZmluaXRpb24gaW4gY2FzZSB3aGVyZSB0aGlzIGZpbGUgaXMgaW5jbHVkZWQgYXMKKy0JbGliZ2V0dGV4dC5oIG9uIFNvbGFyaXMgbWFjaGluZXMuICBBZGQgY29tbWVudCBhYm91dCB0aGlzLgorLQorLVdlZCBKdWwgMTkgMDI6MzY6NDIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBpbnRsLWNvbXBhdC5jICh0ZXh0ZG9tYWluKTogQ29ycmVjdCB0eXBvLgorLQorLVdlZCBKdWwgMTkgMDE6NTE6MzUgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBkY2dldHRleHQuYyAoZGNnZXR0ZXh0KTogRnVuY3Rpb24gbm93IGNhbGxlZCBfX2RjZ2V0dGV4dC4KKy0KKy0JKiBkZ2V0dGV4dC5jIChkZ2V0dGV4dCk6IE5vdyBjYWxsZWQgX19kZ2V0dGV4dCBhbmQgY2FsbHMKKy0gCV9fZGNnZXR0ZXh0LgorLQorLQkqIGdldHRleHQuYyAoZ2V0dGV4dCk6CistCUZ1bmN0aW9uIG5vdyBjYWxsZWQgX19nZXR0ZXh0IGFuZCBjYWxscyBfX2RnZXR0ZXh0LgorLQorLQkqIHRleHRkb21haW4uYyAodGV4dGRvbWFpbik6IEZ1bmN0aW9uIG5vdyBjYWxsZWQgX190ZXh0ZG9tYWluLgorLQorLQkqIGJpbmR0ZXh0ZG9tLmMgKGJpbmR0ZXh0ZG9tYWluKTogRnVuY3Rpb24gbm93IGNhbGxlZAorLSAJX19iaW5kdGV4dGRvbWFpbi4KKy0KKy0JKiBpbnRsLWNvbXBhdC5jOiBJbml0aWFsIHJldmlzaW9uLgorLQorLQkqIE1ha2VmaWxlLmluIChTT1VSQ0VTKTogQWRkIGludGwtY29tcGF0LmMuCistCShPQkpFQ1RTKTogV2UgYWx3YXlzIGNvbXBpbGUgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgZnVuY3Rpb25zLgorLSAgCU9CSkVDVFMgY29udGFpbnMgYWxsIG9iamVjdHMgYnV0IGNhdC1jb21wYXQubywgLi4vcG8vY2F0LWlmLXRibC5vLAorLSAJYW5kIGludGwtY29tcGF0Lm8uCistICAJKEdFVFRPQkpTKTogQ29udGFpbnMgbm93IG9ubHkgaW50bC1jb21wYXQuby4KKy0KKy0JKiBsaWJnZXR0ZXh0Lmg6CistCVJlLWluY2x1ZGUgcHJvdGVjdGlvbiBtYXRjaGVzIGR1YWxpc3RpYyBjaGFyYWN0ZXIgb2YgbGliZ2V0dGV4dC5oLgorLQlGb3IgYWxsIGZ1bmN0aW9ucyBpbiBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGRlZmluZSBfXyBjb3VudGVyIHBhcnQuCistCistCSogZmluZGRvbWFpbi5jIChzdHJjaHIpOiBEZWZpbmUgYXMgaW5kZXggaWYgbm90IGZvdW5kIGluIEMgbGlicmFyeS4KKy0JKF9ubF9maW5kX2RvbWFpbik6IEZvciByZWxhdGl2ZSBwYXRocyBwYXN0ZSAvIGluIGJldHdlZW4uCistCistVHVlIEp1bCAxOCAxNjozNzo0NSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxvYWRtc2djYXQuYywgZmluZGRvbWFpbi5jOiBBZGQgaW5jbHVzaW9uIG9mIHN5cy90eXBlcy5oLgorLQorLQkqIHhvcGVuLW1zZy5zZWQ6IEZpeCBidWcgd2l0aCBgbXNnc3RyICIiJyBsaW5lcy4KKy0JQSBsaXR0bGUgYml0IGJldHRlciBjb21tZW50cy4KKy0KKy1UdWUgSnVsIDE4IDAxOjE4OjI3IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW46CistCXBvLW1vZGUuZWwsIG1ha2VsaW5rcywgY29tYmluZS1zaCBhcmUgbm93IGZvdW5kIGluIC4uL21pc2MuCistCistCSogcG8tbW9kZS5lbCwgbWFrZWxpbmtzLCBjb21iaW5lLXNoLCBlbGlzcC1jb21wOgorLQlNb3ZlZCB0byAuLi9taXNjLy4KKy0KKy0JKiBsaWJnZXR0ZXh0LmgsIGdldHRleHRQLmgsIGdldHRleHQuaDogVW5pZm9ybSB0ZXN0IGZvciBfX1NURENfXy4KKy0KKy1TdW4gSnVsIDE2IDIyOjMzOjAyIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKElOU1RBTEwsIElOU1RBTExfREFUQSk6IE5ldyB2YXJpYWJsZXMuCistCShpbnN0YWxsLWRhdGEsIHVuaW5zdGFsbCk6IEluc3RhbGwvdW5pbnN0YWxsIC5lbGMgZmlsZS4KKy0KKy0JKiBwby1tb2RlLmVsIChJbnN0YWxsYXRpb24gY29tbWVudCk6CistCUFkZCAucG94IGFzIHBvc3NpYmxlIGV4dGVuc2lvbiBvZiAucG8gZmlsZXMuCistCistU3VuIEp1bCAxNiAxMzoyMzoyNyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGVsaXNwLWNvbXA6IENvbXBsZXRlIG5ldyB2ZXJzaW9uIGJ5IEZyYW5jLG9pczogVGhpcyBkb2VzIG5vdAorLSAJZmFpbCB3aGVuIG5vdCBjb21waWxpbmcgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkuCistCistU3VuIEp1bCAxNiAwMDoxMjoxNyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluICguLi9wby9jYXQtaWQtdGJsLm8pOgorLQlVc2UgJChNQUtFKSBpbnN0ZWFkIG9mIG1ha2UgZm9yIHJlY3Vyc2l2ZSBtYWtlLgorLQorLQkqIE1ha2VmaWxlLmluICguZWwuZWxjKTogVXNlICQoU0hFTEwpIGluc3RlYWQgb2YgL2Jpbi9zaC4KKy0JKGluc3RhbGwtZXhlYyk6IEFkZCBtaXNzaW5nIGR1bW15IGdvYWwuCistCShpbnN0YWxsLWRhdGEsIHVuaW5zdGFsbCk6IEAgaW4gbXVsdGktbGluZSBzaGVsbCBjb21tYW5kIGF0CistIAliZWdpbm5pbmcsIG5vdCBpbiBmcm9udCBvZiBlY2hvLiAgUmVwb3J0ZWQgYnkgRXJpYyBCYWNrdXMuCistCistU2F0IEp1bCAxNSAwMDoyMToyOCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOgorLQlSZW5hbWUgbGliZ2V0dGV4dC5wZXJsIHRvIGdldHRleHQucGVybCB0byBmaXQgaW4gMTQgY2hhcnMKKy0JZmlsZSBzeXN0ZW1zLgorLQorLQkqIGdldHRleHQucGVybDoKKy0gCVJlbmFtZSB0byBnZXR0ZXh0LnBlcmwgdG8gZml0IGluIDE0IGNoYXJzIGZpbGUgc3lzdGVtcy4KKy0KKy1UaHUgSnVsIDEzIDIzOjE3OjIwIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogY2F0LWNvbXBhdC5jOiBJZiAhU1REQ19IRUFERVJTIHRyeSB0byBpbmNsdWRlIG1hbGxvYy5oLgorLQorLVRodSBKdWwgMTMgMjA6NTU6MDIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBwbzJ0Ymwuc2VkLmluOiBQcmV0dHkgcHJpbnRpbmcuCistCistCSogbGludXgtbXNnLnNlZCwgeG9wZW4tbXNnLnNlZDoKKy0JQ29ycmVjdCBidWdzIHdpdGggaGFuZGxpbmcgc3Vic3RpdHV0ZSBmbGFncyBpbiBicmFuY2hlcy4KKy0KKy0JKiBoYXNoLXN0cmluZy5oIChoYXNoX3N0cmluZyk6CistCU9sZCBLJlIgY29tcGlsZXJzIGRvbid0IHVuZGVyIHN0YW5kIGB1bnNpZ25lZCBjaGFyJy4KKy0KKy0JKiBnZXR0ZXh0LmggKG5sc191aW50MzIpOgorLQlTb21lIG9sZCBLJlIgY29tcGlsZXJzIChlZyBIUCkgZG9uJ3QgdW5kZXJzdGFuZCBgdW5zaWduZWQgaW50Jy4KKy0KKy0JKiBjYXQtY29tcGF0LmMgKG1zZ190b19jYXRfaWQpOiBEZS1BTlNJLWZ5IHByb3RvdHlwZXMuCistCistVGh1IEp1bCAxMyAwMTozNDozMyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChFTENGSUxFUyk6IE5ldyB2YXJpYWJsZS4KKy0JKERJU1RGSUxFUyk6IEFkZCBlbGlzcC1jb21wLgorLQlBZGQgaW1wbGljaXQgcnVsZSBmb3IgLmVsIC0+IC5lbGMgY29tcGlsYXRpb24uCistCShpbnN0YWxsLWRhdGEpOiBpbnN0YWxsICRFTENGSUxFUworLQkoY2xlYW4pOiByZW5hbWVkIHBvLXRvLXRibCBhbmQgcG8tdG8tbXNnIHRvIHBvMnRibCBhbmQgcG8ybXNnIHJlc3AuCistCistCSogZWxpc3AtY29tcDogSW5pdGlhbCByZXZpc2lvbgorLQorLVdlZCBKdWwgMTIgMTY6MTQ6NTIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbjoKKy0JY2F0LWlkLXRibC5jIGlzIG5vdyBmb3VuZCBpbiBwby8uICBUaGlzIGVuYWJsZXMgdXMgdG8gdXNlIGFuIGlkZW50aWNhbAorLQlpbnRsLyBkaXJlY3RvcnkgaW4gYWxsIHBhY2thZ2VzLgorLQorLQkqIGRjZ2V0dGV4dC5jIChkY2dldHRleHQpOiBoYXNoaW5nIGRvZXMgbm90IHdvcmsgZm9yIHRhYmxlIHNpemUgPD0gMi4KKy0KKy0JKiB0ZXh0ZG9tYWluLmM6IGZpeCB0eXBvICgjaWYgZGVmIC0+ICNpZiBkZWZpbmVkKQorLQorLVR1ZSBKdWwgMTEgMTg6NDQ6NDMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoc3RhbXAtY2F0LWlkKTogdXNlIHRvcF9zcmNkaXIgdG8gYWRkcmVzcyBzb3VyY2UgZmlsZXMKKy0JKERJU1RGSUxFUyxkaXN0Y2xlYW4pOiBtb3ZlIHR1cGRhdGUucGVybCB0byBzcmMvCistCistCSogcG8tdG8tdGJsLnNlZC5pbjoKKy0JYWRkIGFkZGl0aW9uYWwganVtcCB0byBjbGVhciBjaGFuZ2UgZmxhZyB0byByZWNvZ25pemUgbXVsdGlsaW5lIHN0cmluZ3MKKy0KKy1UdWUgSnVsIDExIDAxOjMyOjUwIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogdGV4dGRvbWFpbi5jOiBQcm90ZWN0IGluY2x1c2lvbiBvZiBzdGRsaWIuaCBhbmQgc3RyaW5nLmguCistCistCSogbG9hZG1zZ2NhdC5jOiBQcm90ZWN0IGluY2x1c2lvbiBvZiBzdGRsaWIuaC4KKy0KKy0JKiBsaWJnZXR0ZXh0Lmg6IFByb3RlY3QgaW5jbHVzaW9uIG9mIGxvY2FsZS5oLgorLQlBbGxvdyB1c2UgaW4gQysrIHByb2dyYW1zLgorLQlEZWZpbmUgTlVMTCBpcyBub3QgaGFwcGVuZWQgYWxyZWFkeS4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoRElTVEZJTEVTKTogc2hpcCBwby10by10Ymwuc2VkLmluIGluc3RlYWQgb2YKKy0JcG8tdG8tdGJsLnNlZC4KKy0JKGRpc3RjbGVhbik6IHJlbW92ZSBwby10by10Ymwuc2VkIGFuZCB0dXBkYXRlLnBlcmwuCistCistCSogdHVwZGF0ZS5wZXJsLmluOiBTdWJzdGl0dXRlIFBlcmwgcGF0aCBldmVuIGluIGV4ZWMgbGluZS4KKy0JRG9uJ3QgaW5jbHVkZSBlbnRyaWVzIHdpdGhvdXQgdHJhbnNsYXRpb24gZnJvbSBvbGQgLnBvIGZpbGUuCistCistVHVlIEp1bCAgNCAwMDo0MTo1MSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIHR1cGRhdGUucGVybC5pbjogdXNlICJVcGRhdGVkOiAiIGluIG1zZ2lkICIiLgorLQorLQkqIGNhdC1jb21wYXQuYzogRml4IHR5cG8gKExPQ0FMRElSIC0+IExPQ0FMRURJUikuCistIAlEZWZpbmUgZ2V0ZW52IGlmICFfX1NURENfXy4KKy0KKy0JKiBiaW5kdGV4dGRvbS5jOiBQcm90ZWN0IHN0ZGxpYi5oIGFuZCBzdHJpbmcuaCBpbmNsdXNpb24uCistIAlEZWZpbmUgZnJlZSBpZiAhX19TVERDX18uCistCistCSogZmluZGRvbWFpbi5jOiBDaGFuZ2UgREVGX01TR19ET01fRElSIHRvIExPQ0FMRURJUi4KKy0gCURlZmluZSBmcmVlIGlmICFfX1NURENfXy4KKy0KKy0JKiBjYXQtY29tcGF0LmM6IENoYW5nZSBERUZfTVNHX0RPTV9ESVIgdG8gTE9DQUxFRElSLgorLQorLU1vbiBKdWwgIDMgMjM6NTY6MzAgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbjogVXNlIExPQ0FMRURJUiBpbnN0ZWFkIG9mIERFRl9NU0dfRE9NX0RJUi4KKy0JUmVtb3ZlIHVubmVlZGVkICQoc3JjZGlyKSBmcm9tIE1ha2VmaWxlLmluIGRlcGVuZGVuY3kuCistCistCSogbWFrZWxpbmtzOiBBZGQgY29weXJpZ2h0IGFuZCBzaG9ydCBkZXNjcmlwdGlvbi4KKy0KKy0JKiBwby1tb2RlLmVsOiBMYXN0IHZlcnNpb24gZm9yIDAuNy4KKy0KKy0JKiB0dXBkYXRlLnBlcmwuaW46IEZpeCBkaWUgbWVzc2FnZS4KKy0KKy0JKiBkY2dldHRleHQuYzogUHJvdGVjdCBpbmNsdWRlIG9mIHN0cmluZy5oLgorLQorLQkqIGdldHRleHQuYzogUHJvdGVjdCBpbmNsdWRlIG9mIHN0ZGxpYi5oIGFuZCBmdXJ0aGVyIHRyaWVzIHRvIGdldCBOVUxMLgorLQorLQkqIGZpbmRkb21haW4uYzogU29tZSBjb3JyZWN0aW9ucyBpbiBpbmNsdWRlcy4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoSU5DTFVERVMpOiBQcnVuZSBsaXN0IGNvcnJlY3QgcGF0aCB0byBNYWtlZmlsZS5pbi4KKy0KKy0JKiBwby10by10Ymwuc2VkOiBBZG9wdCBmb3IgbmV3IC5wbyBmaWxlIGZvcm1hdC4KKy0KKy0JKiBsaW51eC1tc2cuc2VkLCB4b3Blbi1tc2cuc2VkOiBBZG9wdCBmb3IgbmV3IC5wbyBmaWxlIGZvcm1hdC4KKy0KKy1TdW4gSnVsICAyIDIzOjU1OjAzIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogdHVwZGF0ZS5wZXJsLmluOiBDb21wbGV0ZSByZXdyaXRlIGZvciBuZXcgLnBvIGZpbGUgZm9ybWF0LgorKzIwMDQtMDEtMjkgIEdOVSAgPGJ1Zy1nbnUtZ2V0dGV4dEBnbnUub3JnPgorIAorLVN1biBKdWwgIDIgMDI6MDY6NTAgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKysJKiBWZXJzaW9uIDAuMTQuMSByZWxlYXNlZC4KKyAKKy0JKiBGaXJzdCBvZmZpY2lhbCByZWxlYXNlLiAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYWxsIHRoZSBjb2RlCistCW5lZWRlZCB0byBpbnRlcm5hdGlvbmFsaXplIG93biBwYWNrYWdlcy4gIEl0IHByb3ZpZGVzIGZ1bmN0aW9ucworLQl3aGljaCBhbGxvdyB0byB1c2UgdGhlIFgvT3BlbiBjYXRnZXRzIGZ1bmN0aW9uIHdpdGggYW4gaW50ZXJmYWNlCistCWxpa2UgdGhlIFVuaWZvcnVtIGdldHRleHQgZnVuY3Rpb24uICBGb3Igc3lzdGVtIHdoaWNoIGRvZXMgbm90CistCWhhdmUgbmVpdGhlciBvZiB0aG9zZSBhIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIGlzIHByb3ZpZGVkLgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2NvbmZpZy5jaGFyc2V0CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2NvbmZpZy5jaGFyc2V0CTIwMDQtMDktMTIgMTQ6NDA6MzQuMzU0NzQ4MjQwIC0wNDAwCitAQCAtMCwwICsxLDYwOCBAQAorKyMhIC9iaW4vc2gKKysjIE91dHB1dCBhIHN5c3RlbSBkZXBlbmRlbnQgdGFibGUgb2YgY2hhcmFjdGVyIGVuY29kaW5nIGFsaWFzZXMuCisrIworKyMgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrIyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysjICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyMgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrIyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrIyAgIFVTQS4KKysjCisrIyBUaGUgdGFibGUgY29uc2lzdHMgb2YgbGluZXMgb2YgdGhlIGZvcm0KKysjICAgIEFMSUFTICBDQU5PTklDQUwKKysjCisrIyBBTElBUyBpcyB0aGUgKHN5c3RlbSBkZXBlbmRlbnQpIHJlc3VsdCBvZiAibmxfbGFuZ2luZm8gKENPREVTRVQpIi4KKysjIEFMSUFTIGlzIGNvbXBhcmVkIGluIGEgY2FzZSBzZW5zaXRpdmUgd2F5LgorKyMKKysjIENBTk9OSUNBTCBpcyB0aGUgR05VIGNhbm9uaWNhbCBuYW1lIGZvciB0aGlzIGNoYXJhY3RlciBlbmNvZGluZy4KKysjIEl0IG11c3QgYmUgYW4gZW5jb2Rpbmcgc3VwcG9ydGVkIGJ5IGxpYmljb252LiBTdXBwb3J0IGJ5IEdOVSBsaWJjIGlzCisrIyBhbHNvIGRlc2lyYWJsZS4gQ0FOT05JQ0FMIGlzIGNhc2UgaW5zZW5zaXRpdmUuIFVzdWFsbHkgYW4gdXBwZXIgY2FzZQorKyMgTUlNRSBjaGFyc2V0IG5hbWUgaXMgcHJlZmVycmVkLgorKyMgVGhlIGN1cnJlbnQgbGlzdCBvZiBHTlUgY2Fub25pY2FsIGNoYXJzZXQgbmFtZXMgaXMgYXMgZm9sbG93cy4KKysjCisrIyAgICAgICBuYW1lICAgICAgICAgICAgICBNSU1FPyAgICAgICAgICAgICB1c2VkIGJ5IHdoaWNoIHN5c3RlbXMKKysjICAgQVNDSUksIEFOU0lfWDMuNC0xOTY4ICAgICAgIGdsaWJjIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgSVNPLTg4NTktMSAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgSVNPLTg4NTktMiAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgSVNPLTg4NTktMyAgICAgICAgICAgICAgWSAgIGdsaWJjIHNvbGFyaXMKKysjICAgSVNPLTg4NTktNCAgICAgICAgICAgICAgWSAgIG9zZiBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisrIyAgIElTTy04ODU5LTUgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisrIyAgIElTTy04ODU5LTYgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBzb2xhcmlzCisrIyAgIElTTy04ODU5LTcgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzCisrIyAgIElTTy04ODU5LTggICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBvc2Ygc29sYXJpcworKyMgICBJU08tODg1OS05ICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcworKyMgICBJU08tODg1OS0xMyAgICAgICAgICAgICAgICAgZ2xpYmMKKysjICAgSVNPLTg4NTktMTQgICAgICAgICAgICAgICAgIGdsaWJjCisrIyAgIElTTy04ODU5LTE1ICAgICAgICAgICAgICAgICBnbGliYyBhaXggb3NmIHNvbGFyaXMgZnJlZWJzZAorKyMgICBLT0k4LVIgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgc29sYXJpcyBmcmVlYnNkIGRhcndpbgorKyMgICBLT0k4LVUgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgZnJlZWJzZCBkYXJ3aW4KKysjICAgS09JOC1UICAgICAgICAgICAgICAgICAgICAgIGdsaWJjCisrIyAgIENQNDM3ICAgICAgICAgICAgICAgICAgICAgICBkb3MKKysjICAgQ1A3NzUgICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDg1MCAgICAgICAgICAgICAgICAgICAgICAgYWl4IG9zZiBkb3MKKysjICAgQ1A4NTIgICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDg1NSAgICAgICAgICAgICAgICAgICAgICAgZG9zCisrIyAgIENQODU2ICAgICAgICAgICAgICAgICAgICAgICBhaXgKKysjICAgQ1A4NTcgICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDg2MSAgICAgICAgICAgICAgICAgICAgICAgZG9zCisrIyAgIENQODYyICAgICAgICAgICAgICAgICAgICAgICBkb3MKKysjICAgQ1A4NjQgICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDg2NSAgICAgICAgICAgICAgICAgICAgICAgZG9zCisrIyAgIENQODY2ICAgICAgICAgICAgICAgICAgICAgICBmcmVlYnNkIGRhcndpbiBkb3MKKysjICAgQ1A4NjkgICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDg3NCAgICAgICAgICAgICAgICAgICAgICAgd29lMzIgZG9zCisrIyAgIENQOTIyICAgICAgICAgICAgICAgICAgICAgICBhaXgKKysjICAgQ1A5MzIgICAgICAgICAgICAgICAgICAgICAgIGFpeCB3b2UzMiBkb3MKKysjICAgQ1A5NDMgICAgICAgICAgICAgICAgICAgICAgIGFpeAorKyMgICBDUDk0OSAgICAgICAgICAgICAgICAgICAgICAgb3NmIHdvZTMyIGRvcworKyMgICBDUDk1MCAgICAgICAgICAgICAgICAgICAgICAgd29lMzIgZG9zCisrIyAgIENQMTA0NiAgICAgICAgICAgICAgICAgICAgICBhaXgKKysjICAgQ1AxMTI0ICAgICAgICAgICAgICAgICAgICAgIGFpeAorKyMgICBDUDExMjUgICAgICAgICAgICAgICAgICAgICAgZG9zCisrIyAgIENQMTEyOSAgICAgICAgICAgICAgICAgICAgICBhaXgKKysjICAgQ1AxMjUwICAgICAgICAgICAgICAgICAgICAgIHdvZTMyCisrIyAgIENQMTI1MSAgICAgICAgICAgICAgICAgICAgICBnbGliYyBzb2xhcmlzIGRhcndpbiB3b2UzMgorKyMgICBDUDEyNTIgICAgICAgICAgICAgICAgICAgICAgYWl4IHdvZTMyCisrIyAgIENQMTI1MyAgICAgICAgICAgICAgICAgICAgICB3b2UzMgorKyMgICBDUDEyNTQgICAgICAgICAgICAgICAgICAgICAgd29lMzIKKysjICAgQ1AxMjU1ICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIHdvZTMyCisrIyAgIENQMTI1NiAgICAgICAgICAgICAgICAgICAgICB3b2UzMgorKyMgICBDUDEyNTcgICAgICAgICAgICAgICAgICAgICAgd29lMzIKKysjICAgR0IyMzEyICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggc29sYXJpcyBmcmVlYnNkIGRhcndpbgorKyMgICBFVUMtSlAgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcyBmcmVlYnNkIGRhcndpbgorKyMgICBFVUMtS1IgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcyBmcmVlYnNkIGRhcndpbgorKyMgICBFVUMtVFcgICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcworKyMgICBCSUc1ICAgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggb3NmIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgQklHNS1IS1NDUyAgICAgICAgICAgICAgICAgIGdsaWJjIHNvbGFyaXMKKysjICAgR0JLICAgICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIGFpeCBvc2Ygc29sYXJpcyB3b2UzMiBkb3MKKysjICAgR0IxODAzMCAgICAgICAgICAgICAgICAgICAgIGdsaWJjIHNvbGFyaXMKKysjICAgU0hJRlRfSklTICAgICAgICAgICAgICAgWSAgIGhwdXggb3NmIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgSk9IQUIgICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIHNvbGFyaXMgd29lMzIKKysjICAgVElTLTYyMCAgICAgICAgICAgICAgICAgICAgIGdsaWJjIGFpeCBocHV4IG9zZiBzb2xhcmlzCisrIyAgIFZJU0NJSSAgICAgICAgICAgICAgICAgIFkgICBnbGliYworKyMgICBUQ1ZONTcxMi0xICAgICAgICAgICAgICAgICAgZ2xpYmMKKysjICAgR0VPUkdJQU4tUFMgICAgICAgICAgICAgICAgIGdsaWJjCisrIyAgIEhQLVJPTUFOOCAgICAgICAgICAgICAgICAgICBocHV4CisrIyAgIEhQLUFSQUJJQzggICAgICAgICAgICAgICAgICBocHV4CisrIyAgIEhQLUdSRUVLOCAgICAgICAgICAgICAgICAgICBocHV4CisrIyAgIEhQLUhFQlJFVzggICAgICAgICAgICAgICAgICBocHV4CisrIyAgIEhQLVRVUktJU0g4ICAgICAgICAgICAgICAgICBocHV4CisrIyAgIEhQLUtBTkE4ICAgICAgICAgICAgICAgICAgICBocHV4CisrIyAgIERFQy1LQU5KSSAgICAgICAgICAgICAgICAgICBvc2YKKysjICAgREVDLUhBTllVICAgICAgICAgICAgICAgICAgIG9zZgorKyMgICBVVEYtOCAgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggb3NmIHNvbGFyaXMKKysjCisrIyBOb3RlOiBOYW1lcyB3aGljaCBhcmUgbm90IG1hcmtlZCBhcyBiZWluZyBhIE1JTUUgbmFtZSBzaG91bGQgbm90IGJlIHVzZWQgaW4KKysjIEludGVybmV0IHByb3RvY29scyBmb3IgaW5mb3JtYXRpb24gaW50ZXJjaGFuZ2UgKG1haWwsIG5ld3MsIGV0Yy4pLgorKyMKKysjIE5vdGU6IEFTQ0lJIGFuZCBBTlNJX1gzLjQtMTk2OCBhcmUgc3lub255bW91cyBjYW5vbmljYWwgbmFtZXMuIEFwcGxpY2F0aW9ucworKyMgbXVzdCB1bmRlcnN0YW5kIGJvdGggbmFtZXMgYW5kIHRyZWF0IHRoZW0gYXMgZXF1aXZhbGVudC4KKysjCisrIyBUaGUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgZmlsZSBpcyB0aGUgY2Fub25pY2FsIGhvc3Qgc3BlY2lmaWNhdGlvbiwKKysjICAgIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNCisrIyBvcgorKyMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNCisrCisraG9zdD0iJDEiCisrb3M9YGVjaG8gIiRob3N0IiB8IHNlZCAtZSAncy9eW14tXSotW14tXSotXCguKlwpJC9cMS8nYAorK2VjaG8gIiMgVGhpcyBmaWxlIGNvbnRhaW5zIGEgdGFibGUgb2YgY2hhcmFjdGVyIGVuY29kaW5nIGFsaWFzZXMsIgorK2VjaG8gIiMgc3VpdGFibGUgZm9yIG9wZXJhdGluZyBzeXN0ZW0gJyR7b3N9Jy4iCisrZWNobyAiIyBJdCB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb25maWcuY2hhcnNldC4iCisrIyBMaXN0IG9mIHJlZmVyZW5jZXMsIHVwZGF0ZWQgZHVyaW5nIGluc3RhbGxhdGlvbjoKKytlY2hvICIjIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTogIgorK2Nhc2UgIiRvcyIgaW4KKysgICAgbGludXgtZ251bGliYzEqKQorKwkjIExpbnV4IGxpYmM1IGRvZXNuJ3QgaGF2ZSBubF9sYW5naW5mbyhDT0RFU0VUKTsgdGhlcmVmb3JlCisrCSMgbG9jYWxjaGFyc2V0LmMgZmFsbHMgYmFjayB0byB1c2luZyB0aGUgZnVsbCBsb2NhbGUgbmFtZQorKwkjIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKysJZWNobyAiQyBBU0NJSSIKKysJZWNobyAiUE9TSVggQVNDSUkiCisrCWZvciBsIGluIGFmIGFmX1pBIGNhIGNhX0VTIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIFwKKysJICAgICAgICAgZW4gZW5fQVUgZW5fQlcgZW5fQ0EgZW5fREsgZW5fR0IgZW5fSUUgZW5fTlogZW5fVVMgZW5fWkEgXAorKwkgICAgICAgICBlbl9aVyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19ETyBlc19FQyBlc19FUyBlc19HVCBcCisrCSAgICAgICAgIGVzX0hOIGVzX01YIGVzX1BBIGVzX1BFIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IFwKKysJICAgICAgICAgZXRfRUUgZXUgZXVfRVMgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgXAorKwkgICAgICAgICBmcl9MVSBnYSBnYV9JRSBnbCBnbF9FUyBpZCBpZF9JRCBpbiBpbl9JRCBpcyBpc19JUyBpdCBpdF9DSCBcCisrCSAgICAgICAgIGl0X0lUIGtsIGtsX0dMIG5sIG5sX0JFIG5sX05MIG5vIG5vX05PIHB0IHB0X0JSIHB0X1BUIHN2IFwKKysJICAgICAgICAgc3ZfRkkgc3ZfU0U7IGRvCisrCSAgZWNobyAiJGwgSVNPLTg4NTktMSIKKysJICBlY2hvICIkbC5pc28tODg1OS0xIElTTy04ODU5LTEiCisrCSAgZWNobyAiJGwuaXNvLTg4NTktMTUgSVNPLTg4NTktMTUiCisrCSAgZWNobyAiJGwuaXNvLTg4NTktMTVAZXVybyBJU08tODg1OS0xNSIKKysJICBlY2hvICIkbEBldXJvIElTTy04ODU5LTE1IgorKwkgIGVjaG8gIiRsLmNwLTQzNyBDUDQzNyIKKysJICBlY2hvICIkbC5jcC04NTAgQ1A4NTAiCisrCSAgZWNobyAiJGwuY3AtMTI1MiBDUDEyNTIiCisrCSAgZWNobyAiJGwuY3AtMTI1MkBldXJvIENQMTI1MiIKKysJICAjZWNobyAiJGwuYXRhcmktc3QgQVRBUkktU1QiICMgbm90IGEgY29tbW9ubHkgdXNlZCBlbmNvZGluZworKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorKwkgIGVjaG8gIiRsLnV0Zi04QGV1cm8gVVRGLTgiCisrCWRvbmUKKysJZm9yIGwgaW4gY3MgY3NfQ1ogaHIgaHJfSFIgaHUgaHVfSFUgcGwgcGxfUEwgcm8gcm9fUk8gc2sgc2tfU0sgc2wgXAorKwkgICAgICAgICBzbF9TSSBzciBzcl9DUyBzcl9ZVTsgZG8KKysJICBlY2hvICIkbCBJU08tODg1OS0yIgorKwkgIGVjaG8gIiRsLmlzby04ODU5LTIgSVNPLTg4NTktMiIKKysJICBlY2hvICIkbC5jcC04NTIgQ1A4NTIiCisrCSAgZWNobyAiJGwuY3AtMTI1MCBDUDEyNTAiCisrCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisrCWRvbmUKKysJZm9yIGwgaW4gbWsgbWtfTUsgcnUgcnVfUlU7IGRvCisrCSAgZWNobyAiJGwgSVNPLTg4NTktNSIKKysJICBlY2hvICIkbC5pc28tODg1OS01IElTTy04ODU5LTUiCisrCSAgZWNobyAiJGwua29pOC1yIEtPSTgtUiIKKysJICBlY2hvICIkbC5jcC04NjYgQ1A4NjYiCisrCSAgZWNobyAiJGwuY3AtMTI1MSBDUDEyNTEiCisrCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisrCWRvbmUKKysJZm9yIGwgaW4gYXIgYXJfU0E7IGRvCisrCSAgZWNobyAiJGwgSVNPLTg4NTktNiIKKysJICBlY2hvICIkbC5pc28tODg1OS02IElTTy04ODU5LTYiCisrCSAgZWNobyAiJGwuY3AtODY0IENQODY0IgorKwkgICNlY2hvICIkbC5jcC04NjggQ1A4NjgiICMgbm90IGEgY29tbW9ubHkgdXNlZCBlbmNvZGluZworKwkgIGVjaG8gIiRsLmNwLTEyNTYgQ1AxMjU2IgorKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorKwlkb25lCisrCWZvciBsIGluIGVsIGVsX0dSIGdyIGdyX0dSOyBkbworKwkgIGVjaG8gIiRsIElTTy04ODU5LTciCisrCSAgZWNobyAiJGwuaXNvLTg4NTktNyBJU08tODg1OS03IgorKwkgIGVjaG8gIiRsLmNwLTg2OSBDUDg2OSIKKysJICBlY2hvICIkbC5jcC0xMjUzIENQMTI1MyIKKysJICBlY2hvICIkbC5jcC0xMjUzQGV1cm8gQ1AxMjUzIgorKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorKwkgIGVjaG8gIiRsLnV0Zi04QGV1cm8gVVRGLTgiCisrCWRvbmUKKysJZm9yIGwgaW4gaGUgaGVfSUwgaXcgaXdfSUw7IGRvCisrCSAgZWNobyAiJGwgSVNPLTg4NTktOCIKKysJICBlY2hvICIkbC5pc28tODg1OS04IElTTy04ODU5LTgiCisrCSAgZWNobyAiJGwuY3AtODYyIENQODYyIgorKwkgIGVjaG8gIiRsLmNwLTEyNTUgQ1AxMjU1IgorKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorKwlkb25lCisrCWZvciBsIGluIHRyIHRyX1RSOyBkbworKwkgIGVjaG8gIiRsIElTTy04ODU5LTkiCisrCSAgZWNobyAiJGwuaXNvLTg4NTktOSBJU08tODg1OS05IgorKwkgIGVjaG8gIiRsLmNwLTg1NyBDUDg1NyIKKysJICBlY2hvICIkbC5jcC0xMjU0IENQMTI1NCIKKysJICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKysJZG9uZQorKwlmb3IgbCBpbiBsdCBsdF9MVCBsdiBsdl9MVjsgZG8KKysJICAjZWNobyAiJGwgQkFMVElDIiAjIG5vdCBhIGNvbW1vbmx5IHVzZWQgZW5jb2RpbmcsIHdyb25nIGVuY29kaW5nIG5hbWUKKysJICBlY2hvICIkbCBJU08tODg1OS0xMyIKKysJZG9uZQorKwlmb3IgbCBpbiBydV9VQSB1ayB1a19VQTsgZG8KKysJICBlY2hvICIkbCBLT0k4LVUiCisrCWRvbmUKKysJZm9yIGwgaW4gemggemhfQ047IGRvCisrCSAgI2VjaG8gIiRsIEdCXzIzMTItODAiICMgbm90IGEgY29tbW9ubHkgdXNlZCBlbmNvZGluZywgd3JvbmcgZW5jb2RpbmcgbmFtZQorKwkgIGVjaG8gIiRsIEdCMjMxMiIKKysJZG9uZQorKwlmb3IgbCBpbiBqYSBqYV9KUCBqYV9KUC5FVUM7IGRvCisrCSAgZWNobyAiJGwgRVVDLUpQIgorKwlkb25lCisrCWZvciBsIGluIGtvIGtvX0tSOyBkbworKwkgIGVjaG8gIiRsIEVVQy1LUiIKKysJZG9uZQorKwlmb3IgbCBpbiB0aCB0aF9USDsgZG8KKysJICBlY2hvICIkbCBUSVMtNjIwIgorKwlkb25lCisrCWZvciBsIGluIGZhIGZhX0lSOyBkbworKwkgICNlY2hvICIkbCBJU0lSSS0zMzQyIiAjIGEgYnJva2VuIGVuY29kaW5nCisrCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisrCWRvbmUKKysJOzsKKysgICAgbGludXgqIHwgKi1nbnUqKQorKwkjIFdpdGggZ2xpYmMtMi4xIG9yIG5ld2VyLCB3ZSBkb24ndCBuZWVkIGFueSBjYW5vbmljYWxpemF0aW9uLAorKwkjIGJlY2F1c2UgZ2xpYmMgaGFzIGljb252IGFuZCBib3RoIGdsaWJjIGFuZCBsaWJpY29udiBzdXBwb3J0IGFsbAorKwkjIEdOVSBjYW5vbmljYWwgbmFtZXMgZGlyZWN0bHkuIFRoZXJlZm9yZSwgdGhlIE1ha2VmaWxlIGRvZXMgbm90CisrCSMgbmVlZCB0byBpbnN0YWxsIHRoZSBhbGlhcyBmaWxlIGF0IGFsbC4KKysJIyBUaGUgZm9sbG93aW5nIGFwcGxpZXMgb25seSB0byBnbGliYy0yLjAueCBhbmQgb2xkZXIgbGliY3MuCisrCWVjaG8gIklTT182NDYuSVJWOjE5ODMgQVNDSUkiCisrCTs7CisrICAgIGFpeCopCisrCWVjaG8gIklTTzg4NTktMSBJU08tODg1OS0xIgorKwllY2hvICJJU084ODU5LTIgSVNPLTg4NTktMiIKKysJZWNobyAiSVNPODg1OS01IElTTy04ODU5LTUiCisrCWVjaG8gIklTTzg4NTktNiBJU08tODg1OS02IgorKwllY2hvICJJU084ODU5LTcgSVNPLTg4NTktNyIKKysJZWNobyAiSVNPODg1OS04IElTTy04ODU5LTgiCisrCWVjaG8gIklTTzg4NTktOSBJU08tODg1OS05IgorKwllY2hvICJJU084ODU5LTE1IElTTy04ODU5LTE1IgorKwllY2hvICJJQk0tODUwIENQODUwIgorKwllY2hvICJJQk0tODU2IENQODU2IgorKwllY2hvICJJQk0tOTIxIElTTy04ODU5LTEzIgorKwllY2hvICJJQk0tOTIyIENQOTIyIgorKwllY2hvICJJQk0tOTMyIENQOTMyIgorKwllY2hvICJJQk0tOTQzIENQOTQzIgorKwllY2hvICJJQk0tMTA0NiBDUDEwNDYiCisrCWVjaG8gIklCTS0xMTI0IENQMTEyNCIKKysJZWNobyAiSUJNLTExMjkgQ1AxMTI5IgorKwllY2hvICJJQk0tMTI1MiBDUDEyNTIiCisrCWVjaG8gIklCTS1ldWNDTiBHQjIzMTIiCisrCWVjaG8gIklCTS1ldWNKUCBFVUMtSlAiCisrCWVjaG8gIklCTS1ldWNLUiBFVUMtS1IiCisrCWVjaG8gIklCTS1ldWNUVyBFVUMtVFciCisrCWVjaG8gImJpZzUgQklHNSIKKysJZWNobyAiR0JLIEdCSyIKKysJZWNobyAiVElTLTYyMCBUSVMtNjIwIgorKwllY2hvICJVVEYtOCBVVEYtOCIKKysJOzsKKysgICAgaHB1eCopCisrCWVjaG8gImlzbzg4NTkxIElTTy04ODU5LTEiCisrCWVjaG8gImlzbzg4NTkyIElTTy04ODU5LTIiCisrCWVjaG8gImlzbzg4NTk1IElTTy04ODU5LTUiCisrCWVjaG8gImlzbzg4NTk2IElTTy04ODU5LTYiCisrCWVjaG8gImlzbzg4NTk3IElTTy04ODU5LTciCisrCWVjaG8gImlzbzg4NTk4IElTTy04ODU5LTgiCisrCWVjaG8gImlzbzg4NTk5IElTTy04ODU5LTkiCisrCWVjaG8gImlzbzg4NTkxNSBJU08tODg1OS0xNSIKKysJZWNobyAicm9tYW44IEhQLVJPTUFOOCIKKysJZWNobyAiYXJhYmljOCBIUC1BUkFCSUM4IgorKwllY2hvICJncmVlazggSFAtR1JFRUs4IgorKwllY2hvICJoZWJyZXc4IEhQLUhFQlJFVzgiCisrCWVjaG8gInR1cmtpc2g4IEhQLVRVUktJU0g4IgorKwllY2hvICJrYW5hOCBIUC1LQU5BOCIKKysJZWNobyAidGlzNjIwIFRJUy02MjAiCisrCWVjaG8gImJpZzUgQklHNSIKKysJZWNobyAiZXVjSlAgRVVDLUpQIgorKwllY2hvICJldWNLUiBFVUMtS1IiCisrCWVjaG8gImV1Y1RXIEVVQy1UVyIKKysJZWNobyAiaHAxNUNOIEdCMjMxMiIKKysJI2VjaG8gImNjZGMgPyIgIyB3aGF0IGlzIHRoaXM/CisrCWVjaG8gIlNKSVMgU0hJRlRfSklTIgorKwllY2hvICJ1dGY4IFVURi04IgorKwk7OworKyAgICBpcml4KikKKysJZWNobyAiSVNPODg1OS0xIElTTy04ODU5LTEiCisrCWVjaG8gIklTTzg4NTktMiBJU08tODg1OS0yIgorKwllY2hvICJJU084ODU5LTUgSVNPLTg4NTktNSIKKysJZWNobyAiSVNPODg1OS03IElTTy04ODU5LTciCisrCWVjaG8gIklTTzg4NTktOSBJU08tODg1OS05IgorKwllY2hvICJldWNDTiBHQjIzMTIiCisrCWVjaG8gImV1Y0pQIEVVQy1KUCIKKysJZWNobyAiZXVjS1IgRVVDLUtSIgorKwllY2hvICJldWNUVyBFVUMtVFciCisrCTs7CisrICAgIG9zZiopCisrCWVjaG8gIklTTzg4NTktMSBJU08tODg1OS0xIgorKwllY2hvICJJU084ODU5LTIgSVNPLTg4NTktMiIKKysJZWNobyAiSVNPODg1OS00IElTTy04ODU5LTQiCisrCWVjaG8gIklTTzg4NTktNSBJU08tODg1OS01IgorKwllY2hvICJJU084ODU5LTcgSVNPLTg4NTktNyIKKysJZWNobyAiSVNPODg1OS04IElTTy04ODU5LTgiCisrCWVjaG8gIklTTzg4NTktOSBJU08tODg1OS05IgorKwllY2hvICJJU084ODU5LTE1IElTTy04ODU5LTE1IgorKwllY2hvICJjcDg1MCBDUDg1MCIKKysJZWNobyAiYmlnNSBCSUc1IgorKwllY2hvICJkZWNoYW55dSBERUMtSEFOWVUiCisrCWVjaG8gImRlY2hhbnppIEdCMjMxMiIKKysJZWNobyAiZGVja2FuamkgREVDLUtBTkpJIgorKwllY2hvICJkZWNrb3JlYW4gRVVDLUtSIgorKwllY2hvICJldWNKUCBFVUMtSlAiCisrCWVjaG8gImV1Y0tSIEVVQy1LUiIKKysJZWNobyAiZXVjVFcgRVVDLVRXIgorKwllY2hvICJHQksgR0JLIgorKwllY2hvICJLU0M1NjAxIENQOTQ5IgorKwllY2hvICJzZGVja2FuamkgRVVDLUpQIgorKwllY2hvICJTSklTIFNISUZUX0pJUyIKKysJZWNobyAiVEFDVElTIFRJUy02MjAiCisrCWVjaG8gIlVURi04IFVURi04IgorKwk7OworKyAgICBzb2xhcmlzKikKKysJZWNobyAiNjQ2IEFTQ0lJIgorKwllY2hvICJJU084ODU5LTEgSVNPLTg4NTktMSIKKysJZWNobyAiSVNPODg1OS0yIElTTy04ODU5LTIiCisrCWVjaG8gIklTTzg4NTktMyBJU08tODg1OS0zIgorKwllY2hvICJJU084ODU5LTQgSVNPLTg4NTktNCIKKysJZWNobyAiSVNPODg1OS01IElTTy04ODU5LTUiCisrCWVjaG8gIklTTzg4NTktNiBJU08tODg1OS02IgorKwllY2hvICJJU084ODU5LTcgSVNPLTg4NTktNyIKKysJZWNobyAiSVNPODg1OS04IElTTy04ODU5LTgiCisrCWVjaG8gIklTTzg4NTktOSBJU08tODg1OS05IgorKwllY2hvICJJU084ODU5LTE1IElTTy04ODU5LTE1IgorKwllY2hvICJrb2k4LXIgS09JOC1SIgorKwllY2hvICJhbnNpLTEyNTEgQ1AxMjUxIgorKwllY2hvICJCSUc1IEJJRzUiCisrCWVjaG8gIkJpZzUtSEtTQ1MgQklHNS1IS1NDUyIKKysJZWNobyAiZ2IyMzEyIEdCMjMxMiIKKysJZWNobyAiR0JLIEdCSyIKKysJZWNobyAiR0IxODAzMCBHQjE4MDMwIgorKwllY2hvICJjbnMxMTY0MyBFVUMtVFciCisrCWVjaG8gIjU2MDEgRVVDLUtSIgorKwllY2hvICJrb19LUi5qb2hhcDkyIEpPSEFCIgorKwllY2hvICJldWNKUCBFVUMtSlAiCisrCWVjaG8gIlBDSyBTSElGVF9KSVMiCisrCWVjaG8gIlRJUzYyMC4yNTMzIFRJUy02MjAiCisrCSNlY2hvICJzdW5fZXVfZ3JlZWsgPyIgIyB3aGF0IGlzIHRoaXM/CisrCWVjaG8gIlVURi04IFVURi04IgorKwk7OworKyAgICBmcmVlYnNkKiB8IG9zMiopCisrCSMgRnJlZUJTRCA0LjIgZG9lc24ndCBoYXZlIG5sX2xhbmdpbmZvKENPREVTRVQpOyB0aGVyZWZvcmUKKysJIyBsb2NhbGNoYXJzZXQuYyBmYWxscyBiYWNrIHRvIHVzaW5nIHRoZSBmdWxsIGxvY2FsZSBuYW1lCisrCSMgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorKwkjIExpa2V3aXNlIGZvciBPUy8yLiBPUy8yIGhhcyBYRnJlZTg2IGp1c3QgbGlrZSBGcmVlQlNELiBKdXN0CisrCSMgcmV1c2UgRnJlZUJTRCdzIGxvY2FsZSBkYXRhIGZvciBPUy8yLgorKwllY2hvICJDIEFTQ0lJIgorKwllY2hvICJVUy1BU0NJSSBBU0NJSSIKKysJZm9yIGwgaW4gbGFfTE4gbHRfTE47IGRvCisrCSAgZWNobyAiJGwuQVNDSUkgQVNDSUkiCisrCWRvbmUKKysJZm9yIGwgaW4gZGFfREsgZGVfQVQgZGVfQ0ggZGVfREUgZW5fQVUgZW5fQ0EgZW5fR0IgZW5fVVMgZXNfRVMgXAorKwkgICAgICAgICBmaV9GSSBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBpc19JUyBpdF9DSCBpdF9JVCBsYV9MTiBcCisrCSAgICAgICAgIGx0X0xOIG5sX0JFIG5sX05MIG5vX05PIHB0X1BUIHN2X1NFOyBkbworKwkgIGVjaG8gIiRsLklTT184ODU5LTEgSVNPLTg4NTktMSIKKysJICBlY2hvICIkbC5ESVNfODg1OS0xNSBJU08tODg1OS0xNSIKKysJZG9uZQorKwlmb3IgbCBpbiBjc19DWiBocl9IUiBodV9IVSBsYV9MTiBsdF9MTiBwbF9QTCBzbF9TSTsgZG8KKysJICBlY2hvICIkbC5JU09fODg1OS0yIElTTy04ODU5LTIiCisrCWRvbmUKKysJZm9yIGwgaW4gbGFfTE4gbHRfTFQ7IGRvCisrCSAgZWNobyAiJGwuSVNPXzg4NTktNCBJU08tODg1OS00IgorKwlkb25lCisrCWZvciBsIGluIHJ1X1JVIHJ1X1NVOyBkbworKwkgIGVjaG8gIiRsLktPSTgtUiBLT0k4LVIiCisrCSAgZWNobyAiJGwuSVNPXzg4NTktNSBJU08tODg1OS01IgorKwkgIGVjaG8gIiRsLkNQODY2IENQODY2IgorKwlkb25lCisrCWVjaG8gInVrX1VBLktPSTgtVSBLT0k4LVUiCisrCWVjaG8gInpoX1RXLkJJRzUgQklHNSIKKysJZWNobyAiemhfVFcuQmlnNSBCSUc1IgorKwllY2hvICJ6aF9DTi5FVUMgR0IyMzEyIgorKwllY2hvICJqYV9KUC5FVUMgRVVDLUpQIgorKwllY2hvICJqYV9KUC5TSklTIFNISUZUX0pJUyIKKysJZWNobyAiamFfSlAuU2hpZnRfSklTIFNISUZUX0pJUyIKKysJZWNobyAia29fS1IuRVVDIEVVQy1LUiIKKysJOzsKKysgICAgbmV0YnNkKikKKysJZWNobyAiNjQ2IEFTQ0lJIgorKwllY2hvICJJU084ODU5LTEgSVNPLTg4NTktMSIKKysJZWNobyAiSVNPODg1OS0yIElTTy04ODU5LTIiCisrCWVjaG8gIklTTzg4NTktNCBJU08tODg1OS00IgorKwllY2hvICJJU084ODU5LTUgSVNPLTg4NTktNSIKKysJZWNobyAiSVNPODg1OS0xNSBJU08tODg1OS0xNSIKKysJZWNobyAiZXVjQ04gR0IyMzEyIgorKwllY2hvICJldWNKUCBFVUMtSlAiCisrCWVjaG8gImV1Y0tSIEVVQy1LUiIKKysJZWNobyAiZXVjVFcgRVVDLVRXIgorKwllY2hvICJCSUc1IEJJRzUiCisrCWVjaG8gIlNKSVMgU0hJRlRfSklTIgorKwk7OworKyAgICBkYXJ3aW4qKQorKwkjIERhcndpbiA2LjggZG9lc24ndCBoYXZlIG5sX2xhbmdpbmZvKENPREVTRVQpOyB0aGVyZWZvcmUKKysJIyBsb2NhbGNoYXJzZXQuYyBmYWxscyBiYWNrIHRvIHVzaW5nIHRoZSBmdWxsIGxvY2FsZSBuYW1lCisrCSMgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorKwllY2hvICJDIEFTQ0lJIgorKwlmb3IgbCBpbiBlbl9BVSBlbl9DQSBlbl9HQiBlbl9VUyBsYV9MTjsgZG8KKysJICBlY2hvICIkbC5VUy1BU0NJSSBBU0NJSSIKKysJZG9uZQorKwlmb3IgbCBpbiBkYV9ESyBkZV9BVCBkZV9DSCBkZV9ERSBlbl9BVSBlbl9DQSBlbl9HQiBlbl9VUyBlc19FUyBcCisrCSAgICAgICAgIGZpX0ZJIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGlzX0lTIGl0X0NIIGl0X0lUIG5sX0JFIFwKKysJICAgICAgICAgbmxfTkwgbm9fTk8gcHRfUFQgc3ZfU0U7IGRvCisrCSAgZWNobyAiJGwgSVNPLTg4NTktMSIKKysJICBlY2hvICIkbC5JU084ODU5LTEgSVNPLTg4NTktMSIKKysJICBlY2hvICIkbC5JU084ODU5LTE1IElTTy04ODU5LTE1IgorKwlkb25lCisrCWZvciBsIGluIGxhX0xOOyBkbworKwkgIGVjaG8gIiRsLklTTzg4NTktMSBJU08tODg1OS0xIgorKwkgIGVjaG8gIiRsLklTTzg4NTktMTUgSVNPLTg4NTktMTUiCisrCWRvbmUKKysJZm9yIGwgaW4gY3NfQ1ogaHJfSFIgaHVfSFUgbGFfTE4gcGxfUEwgc2xfU0k7IGRvCisrCSAgZWNobyAiJGwuSVNPODg1OS0yIElTTy04ODU5LTIiCisrCWRvbmUKKysJZm9yIGwgaW4gbGFfTE4gbHRfTFQ7IGRvCisrCSAgZWNobyAiJGwuSVNPODg1OS00IElTTy04ODU5LTQiCisrCWRvbmUKKysJZm9yIGwgaW4gcnVfUlU7IGRvCisrCSAgZWNobyAiJGwuS09JOC1SIEtPSTgtUiIKKysJICBlY2hvICIkbC5JU084ODU5LTUgSVNPLTg4NTktNSIKKysJICBlY2hvICIkbC5DUDg2NiBDUDg2NiIKKysJZG9uZQorKwlmb3IgbCBpbiBiZ19CRzsgZG8KKysJICBlY2hvICIkbC5DUDEyNTEgQ1AxMjUxIgorKwlkb25lCisrCWVjaG8gInVrX1VBLktPSTgtVSBLT0k4LVUiCisrCWVjaG8gInpoX1RXLkJJRzUgQklHNSIKKysJZWNobyAiemhfVFcuQmlnNSBCSUc1IgorKwllY2hvICJ6aF9DTi5FVUMgR0IyMzEyIgorKwllY2hvICJqYV9KUC5FVUMgRVVDLUpQIgorKwllY2hvICJqYV9KUC5TSklTIFNISUZUX0pJUyIKKysJZWNobyAia29fS1IuRVVDIEVVQy1LUiIKKysJOzsKKysgICAgYmVvcyopCisrCSMgQmVPUyBoYXMgYSBzaW5nbGUgbG9jYWxlLCBhbmQgaXQgaGFzIFVURi04IGVuY29kaW5nLgorKwllY2hvICIqIFVURi04IgorKwk7OworKyAgICBtc2Rvc2RqZ3BwKikKKysJIyBESkdQUCAyLjAzIGRvZXNuJ3QgaGF2ZSBubF9sYW5naW5mbyhDT0RFU0VUKTsgdGhlcmVmb3JlCisrCSMgbG9jYWxjaGFyc2V0LmMgZmFsbHMgYmFjayB0byB1c2luZyB0aGUgZnVsbCBsb2NhbGUgbmFtZQorKwkjIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKysJZWNobyAiIyIKKysJZWNobyAiIyBUaGUgZW5jb2RpbmdzIGdpdmVuIGhlcmUgbWF5IG5vdCBhbGwgYmUgY29ycmVjdC4iCisrCWVjaG8gIiMgSWYgeW91IGZpbmQgdGhhdCB0aGUgZW5jb2RpbmcgZ2l2ZW4gZm9yIHlvdXIgbGFuZ3VhZ2UgYW5kIgorKwllY2hvICIjIGNvdW50cnkgaXMgbm90IHRoZSBvbmUgeW91ciBET1MgbWFjaGluZSBhY3R1YWxseSB1c2VzLCBqdXN0IgorKwllY2hvICIjIGNvcnJlY3QgaXQgaW4gdGhpcyBmaWxlLCBhbmQgc2VuZCBhIG1haWwgdG8iCisrCWVjaG8gIiMgSnVhbiBNYW51ZWwgR3VlcnJlcm8gPHN0MDAxOTA2QGhyejEuaHJ6LnR1LWRhcm1zdGFkdC5kZT4iCisrCWVjaG8gIiMgYW5kIEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPi4iCisrCWVjaG8gIiMiCisrCWVjaG8gIkMgQVNDSUkiCisrCSMgSVNPLTg4NTktMSBsYW5ndWFnZXMKKysJZWNobyAiY2EgQ1A4NTAiCisrCWVjaG8gImNhX0VTIENQODUwIgorKwllY2hvICJkYSBDUDg2NSIgICAgIyBub3QgQ1A4NTAgPz8KKysJZWNobyAiZGFfREsgQ1A4NjUiICMgbm90IENQODUwID8/CisrCWVjaG8gImRlIENQODUwIgorKwllY2hvICJkZV9BVCBDUDg1MCIKKysJZWNobyAiZGVfQ0ggQ1A4NTAiCisrCWVjaG8gImRlX0RFIENQODUwIgorKwllY2hvICJlbiBDUDg1MCIKKysJZWNobyAiZW5fQVUgQ1A4NTAiICMgbm90IENQNDM3ID8/CisrCWVjaG8gImVuX0NBIENQODUwIgorKwllY2hvICJlbl9HQiBDUDg1MCIKKysJZWNobyAiZW5fTlogQ1A0MzciCisrCWVjaG8gImVuX1VTIENQNDM3IgorKwllY2hvICJlbl9aQSBDUDg1MCIgIyBub3QgQ1A0MzcgPz8KKysJZWNobyAiZXMgQ1A4NTAiCisrCWVjaG8gImVzX0FSIENQODUwIgorKwllY2hvICJlc19CTyBDUDg1MCIKKysJZWNobyAiZXNfQ0wgQ1A4NTAiCisrCWVjaG8gImVzX0NPIENQODUwIgorKwllY2hvICJlc19DUiBDUDg1MCIKKysJZWNobyAiZXNfQ1UgQ1A4NTAiCisrCWVjaG8gImVzX0RPIENQODUwIgorKwllY2hvICJlc19FQyBDUDg1MCIKKysJZWNobyAiZXNfRVMgQ1A4NTAiCisrCWVjaG8gImVzX0dUIENQODUwIgorKwllY2hvICJlc19ITiBDUDg1MCIKKysJZWNobyAiZXNfTVggQ1A4NTAiCisrCWVjaG8gImVzX05JIENQODUwIgorKwllY2hvICJlc19QQSBDUDg1MCIKKysJZWNobyAiZXNfUFkgQ1A4NTAiCisrCWVjaG8gImVzX1BFIENQODUwIgorKwllY2hvICJlc19TViBDUDg1MCIKKysJZWNobyAiZXNfVVkgQ1A4NTAiCisrCWVjaG8gImVzX1ZFIENQODUwIgorKwllY2hvICJldCBDUDg1MCIKKysJZWNobyAiZXRfRUUgQ1A4NTAiCisrCWVjaG8gImV1IENQODUwIgorKwllY2hvICJldV9FUyBDUDg1MCIKKysJZWNobyAiZmkgQ1A4NTAiCisrCWVjaG8gImZpX0ZJIENQODUwIgorKwllY2hvICJmciBDUDg1MCIKKysJZWNobyAiZnJfQkUgQ1A4NTAiCisrCWVjaG8gImZyX0NBIENQODUwIgorKwllY2hvICJmcl9DSCBDUDg1MCIKKysJZWNobyAiZnJfRlIgQ1A4NTAiCisrCWVjaG8gImdhIENQODUwIgorKwllY2hvICJnYV9JRSBDUDg1MCIKKysJZWNobyAiZ2QgQ1A4NTAiCisrCWVjaG8gImdkX0dCIENQODUwIgorKwllY2hvICJnbCBDUDg1MCIKKysJZWNobyAiZ2xfRVMgQ1A4NTAiCisrCWVjaG8gImlkIENQODUwIiAgICAjIG5vdCBDUDQzNyA/PworKwllY2hvICJpZF9JRCBDUDg1MCIgIyBub3QgQ1A0MzcgPz8KKysJZWNobyAiaXMgQ1A4NjEiICAgICMgbm90IENQODUwID8/CisrCWVjaG8gImlzX0lTIENQODYxIiAjIG5vdCBDUDg1MCA/PworKwllY2hvICJpdCBDUDg1MCIKKysJZWNobyAiaXRfQ0ggQ1A4NTAiCisrCWVjaG8gIml0X0lUIENQODUwIgorKwllY2hvICJsdCBDUDc3NSIKKysJZWNobyAibHRfTFQgQ1A3NzUiCisrCWVjaG8gImx2IENQNzc1IgorKwllY2hvICJsdl9MViBDUDc3NSIKKysJZWNobyAibmIgQ1A4NjUiICAgICMgbm90IENQODUwID8/CisrCWVjaG8gIm5iX05PIENQODY1IiAjIG5vdCBDUDg1MCA/PworKwllY2hvICJubCBDUDg1MCIKKysJZWNobyAibmxfQkUgQ1A4NTAiCisrCWVjaG8gIm5sX05MIENQODUwIgorKwllY2hvICJubiBDUDg2NSIgICAgIyBub3QgQ1A4NTAgPz8KKysJZWNobyAibm5fTk8gQ1A4NjUiICMgbm90IENQODUwID8/CisrCWVjaG8gIm5vIENQODY1IiAgICAjIG5vdCBDUDg1MCA/PworKwllY2hvICJub19OTyBDUDg2NSIgIyBub3QgQ1A4NTAgPz8KKysJZWNobyAicHQgQ1A4NTAiCisrCWVjaG8gInB0X0JSIENQODUwIgorKwllY2hvICJwdF9QVCBDUDg1MCIKKysJZWNobyAic3YgQ1A4NTAiCisrCWVjaG8gInN2X1NFIENQODUwIgorKwkjIElTTy04ODU5LTIgbGFuZ3VhZ2VzCisrCWVjaG8gImNzIENQODUyIgorKwllY2hvICJjc19DWiBDUDg1MiIKKysJZWNobyAiaHIgQ1A4NTIiCisrCWVjaG8gImhyX0hSIENQODUyIgorKwllY2hvICJodSBDUDg1MiIKKysJZWNobyAiaHVfSFUgQ1A4NTIiCisrCWVjaG8gInBsIENQODUyIgorKwllY2hvICJwbF9QTCBDUDg1MiIKKysJZWNobyAicm8gQ1A4NTIiCisrCWVjaG8gInJvX1JPIENQODUyIgorKwllY2hvICJzayBDUDg1MiIKKysJZWNobyAic2tfU0sgQ1A4NTIiCisrCWVjaG8gInNsIENQODUyIgorKwllY2hvICJzbF9TSSBDUDg1MiIKKysJZWNobyAic3EgQ1A4NTIiCisrCWVjaG8gInNxX0FMIENQODUyIgorKwllY2hvICJzciBDUDg1MiIgICAgIyBDUDg1MiBvciBDUDg2NiBvciBDUDg1NSA/PworKwllY2hvICJzcl9DUyBDUDg1MiIgIyBDUDg1MiBvciBDUDg2NiBvciBDUDg1NSA/PworKwllY2hvICJzcl9ZVSBDUDg1MiIgIyBDUDg1MiBvciBDUDg2NiBvciBDUDg1NSA/PworKwkjIElTTy04ODU5LTMgbGFuZ3VhZ2VzCisrCWVjaG8gIm10IENQODUwIgorKwllY2hvICJtdF9NVCBDUDg1MCIKKysJIyBJU08tODg1OS01IGxhbmd1YWdlcworKwllY2hvICJiZSBDUDg2NiIKKysJZWNobyAiYmVfQkUgQ1A4NjYiCisrCWVjaG8gImJnIENQODY2IiAgICAjIG5vdCBDUDg1NSA/PworKwllY2hvICJiZ19CRyBDUDg2NiIgIyBub3QgQ1A4NTUgPz8KKysJZWNobyAibWsgQ1A4NjYiICAgICMgbm90IENQODU1ID8/CisrCWVjaG8gIm1rX01LIENQODY2IiAjIG5vdCBDUDg1NSA/PworKwllY2hvICJydSBDUDg2NiIKKysJZWNobyAicnVfUlUgQ1A4NjYiCisrCWVjaG8gInVrIENQMTEyNSIKKysJZWNobyAidWtfVUEgQ1AxMTI1IgorKwkjIElTTy04ODU5LTYgbGFuZ3VhZ2VzCisrCWVjaG8gImFyIENQODY0IgorKwllY2hvICJhcl9BRSBDUDg2NCIKKysJZWNobyAiYXJfRFogQ1A4NjQiCisrCWVjaG8gImFyX0VHIENQODY0IgorKwllY2hvICJhcl9JUSBDUDg2NCIKKysJZWNobyAiYXJfSVIgQ1A4NjQiCisrCWVjaG8gImFyX0pPIENQODY0IgorKwllY2hvICJhcl9LVyBDUDg2NCIKKysJZWNobyAiYXJfTUEgQ1A4NjQiCisrCWVjaG8gImFyX09NIENQODY0IgorKwllY2hvICJhcl9RQSBDUDg2NCIKKysJZWNobyAiYXJfU0EgQ1A4NjQiCisrCWVjaG8gImFyX1NZIENQODY0IgorKwkjIElTTy04ODU5LTcgbGFuZ3VhZ2VzCisrCWVjaG8gImVsIENQODY5IgorKwllY2hvICJlbF9HUiBDUDg2OSIKKysJIyBJU08tODg1OS04IGxhbmd1YWdlcworKwllY2hvICJoZSBDUDg2MiIKKysJZWNobyAiaGVfSUwgQ1A4NjIiCisrCSMgSVNPLTg4NTktOSBsYW5ndWFnZXMKKysJZWNobyAidHIgQ1A4NTciCisrCWVjaG8gInRyX1RSIENQODU3IgorKwkjIEphcGFuZXNlCisrCWVjaG8gImphIENQOTMyIgorKwllY2hvICJqYV9KUCBDUDkzMiIKKysJIyBDaGluZXNlCisrCWVjaG8gInpoX0NOIEdCSyIKKysJZWNobyAiemhfVFcgQ1A5NTAiICMgbm90IENQOTM4ID8/CisrCSMgS29yZWFuCisrCWVjaG8gImtyIENQOTQ5IiAgICAjIG5vdCBDUDkzNCA/PworKwllY2hvICJrcl9LUiBDUDk0OSIgIyBub3QgQ1A5MzQgPz8KKysJIyBUaGFpCisrCWVjaG8gInRoIENQODc0IgorKwllY2hvICJ0aF9USCBDUDg3NCIKKysJIyBPdGhlcgorKwllY2hvICJlbyBDUDg1MCIKKysJZWNobyAiZW9fRU8gQ1A4NTAiCisrCTs7CisrZXNhYworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2RjZ2V0dGV4dC5jCTE5OTgtMDQtMjYgMDk6MjI6MzYuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2RjZ2V0dGV4dC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzU5NzQ3NDgwIC0wNDAwCitAQCAtMSw1OTMgKzEsNTYgQEAKKy0vKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGNnZXR0ZXh0KDMpIGZ1bmN0aW9uCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8qIEltcGxlbWVudGF0aW9uIG9mIHRoZSBkY2dldHRleHQoMykgZnVuY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorLSAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0KKy0jaWZkZWYgX19HTlVDX18KKy0jIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorLSMgZGVmaW5lIEhBVkVfQUxMT0NBIDEKKy0jZWxzZQorLSMgaWYgZGVmaW5lZCBIQVZFX0FMTE9DQV9IIHx8IGRlZmluZWQgX0xJQkMKKy0jICBpbmNsdWRlIDxhbGxvY2EuaD4KKy0jIGVsc2UKKy0jICBpZmRlZiBfQUlYCistICNwcmFnbWEgYWxsb2NhCistIyAgZWxzZQorLSMgICBpZm5kZWYgYWxsb2NhCistY2hhciAqYWxsb2NhICgpOworLSMgICBlbmRpZgorLSMgIGVuZGlmCistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpbmNsdWRlIDxlcnJuby5oPgorLSNpZm5kZWYgZXJybm8KKy1leHRlcm4gaW50IGVycm5vOworLSNlbmRpZgorLSNpZm5kZWYgX19zZXRfZXJybm8KKy0jIGRlZmluZSBfX3NldF9lcnJubyh2YWwpIGVycm5vID0gKHZhbCkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBfTElCQworLSMgaW5jbHVkZSA8c3RkbGliLmg+CistI2Vsc2UKKy1jaGFyICpnZXRlbnYgKCk7CistIyBpZmRlZiBIQVZFX01BTExPQ19ICistIyAgaW5jbHVkZSA8bWFsbG9jLmg+CistIyBlbHNlCistdm9pZCBmcmVlICgpOworLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZCBIQVZFX1NUUklOR19IIHx8IGRlZmluZWQgX0xJQkMKKy0jIGlmbmRlZiBfR05VX1NPVVJDRQorLSMgIGRlZmluZSBfR05VX1NPVVJDRQkxCistIyBlbmRpZgorLSMgaW5jbHVkZSA8c3RyaW5nLmg+CistI2Vsc2UKKy0jIGluY2x1ZGUgPHN0cmluZ3MuaD4KKy0jZW5kaWYKKy0jaWYgIUhBVkVfU1RSQ0hSICYmICFkZWZpbmVkIF9MSUJDCistIyBpZm5kZWYgc3RyY2hyCistIyAgZGVmaW5lIHN0cmNociBpbmRleAorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZCBIQVZFX1VOSVNURF9IIHx8IGRlZmluZWQgX0xJQkMKKy0jIGluY2x1ZGUgPHVuaXN0ZC5oPgorLSNlbmRpZgorLQorLSNpbmNsdWRlICJnZXR0ZXh0LmgiCisgI2luY2x1ZGUgImdldHRleHRQLmgiCisgI2lmZGVmIF9MSUJDCisgIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisgI2Vsc2UKKy0jIGluY2x1ZGUgImxpYmdldHRleHQuaCIKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKyAjZW5kaWYKKy0jaW5jbHVkZSAiaGFzaC1zdHJpbmcuaCIKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCistI2lmZGVmIF9MSUJDCistLyogUmVuYW1lIHRoZSBub24gQU5TSSBDIGZ1bmN0aW9ucy4gIFRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkCistICAgYmVjYXVzZSBzb21lIEFOU0kgQyBmdW5jdGlvbnMgd2lsbCByZXF1aXJlIGxpbmtpbmcgd2l0aCB0aGlzIG9iamVjdAorLSAgIGZpbGUgYW5kIHRoZSBuYW1lIHNwYWNlIG11c3Qgbm90IGJlIHBvbGx1dGVkLiAgKi8KKy0jIGRlZmluZSBnZXRjd2QgX19nZXRjd2QKKy0jIGRlZmluZSBzdHBjcHkgX19zdHBjcHkKKy0jZWxzZQorLSMgaWYgIWRlZmluZWQgSEFWRV9HRVRDV0QKKy1jaGFyICpnZXR3ZCAoKTsKKy0jICBkZWZpbmUgZ2V0Y3dkKGJ1ZiwgbWF4KSBnZXR3ZCAoYnVmKQorLSMgZWxzZQorLWNoYXIgKmdldGN3ZCAoKTsKKy0jIGVuZGlmCistIyBpZm5kZWYgSEFWRV9TVFBDUFkKKy1zdGF0aWMgY2hhciAqc3RwY3B5IFBBUkFNUyAoKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYykpOworLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0vKiBBbW91bnQgdG8gaW5jcmVhc2UgYnVmZmVyIHNpemUgYnkgaW4gZWFjaCB0cnkuICAqLworLSNkZWZpbmUgUEFUSF9JTkNSIDMyCistCistLyogVGhlIGZvbGxvd2luZyBpcyBmcm9tIHBhdGhtYXguaC4gICovCistLyogTm9uLVBPU0lYIEJTRCBzeXN0ZW1zIG1pZ2h0IGhhdmUgZ2NjJ3MgbGltaXRzLmgsIHdoaWNoIGRvZXNuJ3QgZGVmaW5lCistICAgUEFUSF9NQVggYnV0IG1pZ2h0IGNhdXNlIHJlZGVmaW5pdGlvbiB3YXJuaW5ncyB3aGVuIHN5cy9wYXJhbS5oIGlzCistICAgbGF0ZXIgaW5jbHVkZWQgKGFzIG9uIE1PUkUvQlNEIDQuMykuICAqLworLSNpZiBkZWZpbmVkKF9QT1NJWF9WRVJTSU9OKSB8fCAoZGVmaW5lZChIQVZFX0xJTUlUU19IKSAmJiAhZGVmaW5lZChfX0dOVUNfXykpCistIyBpbmNsdWRlIDxsaW1pdHMuaD4KKy0jZW5kaWYKKy0KKy0jaWZuZGVmIF9QT1NJWF9QQVRIX01BWAorLSMgZGVmaW5lIF9QT1NJWF9QQVRIX01BWCAyNTUKKy0jZW5kaWYKKy0KKy0jaWYgIWRlZmluZWQoUEFUSF9NQVgpICYmIGRlZmluZWQoX1BDX1BBVEhfTUFYKQorLSMgZGVmaW5lIFBBVEhfTUFYIChwYXRoY29uZiAoIi8iLCBfUENfUEFUSF9NQVgpIDwgMSA/IDEwMjQgOiBwYXRoY29uZiAoIi8iLCBfUENfUEFUSF9NQVgpKQorLSNlbmRpZgorLQorLS8qIERvbid0IGluY2x1ZGUgc3lzL3BhcmFtLmggaWYgaXQgYWxyZWFkeSBoYXMgYmVlbi4gICovCistI2lmIGRlZmluZWQoSEFWRV9TWVNfUEFSQU1fSCkgJiYgIWRlZmluZWQoUEFUSF9NQVgpICYmICFkZWZpbmVkKE1BWFBBVEhMRU4pCistIyBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKy0jZW5kaWYKKy0KKy0jaWYgIWRlZmluZWQoUEFUSF9NQVgpICYmIGRlZmluZWQoTUFYUEFUSExFTikKKy0jIGRlZmluZSBQQVRIX01BWCBNQVhQQVRITEVOCistI2VuZGlmCistCistI2lmbmRlZiBQQVRIX01BWAorLSMgZGVmaW5lIFBBVEhfTUFYIF9QT1NJWF9QQVRIX01BWAorLSNlbmRpZgorLQorLS8qIFhQRzMgZGVmaW5lcyB0aGUgcmVzdWx0IG9mIGBzZXRsb2NhbGUgKGNhdGVnb3J5LCBOVUxMKScgYXM6CistICAgYGBEaXJlY3RzIGBzZXRsb2NhbGUoKScgdG8gcXVlcnkgYGNhdGVnb3J5JyBhbmQgcmV0dXJuIHRoZSBjdXJyZW50CistICAgICBzZXR0aW5nIG9mIGBsb2NhbCcuJycKKy0gICBIb3dldmVyIGl0IGRvZXMgbm90IHNwZWNpZnkgdGhlIGV4YWN0IGZvcm1hdC4gIEFuZCBldmVuIHdvcnNlOiBQT1NJWAorLSAgIGRlZmluZXMgdGhpcyBub3QgYXQgYWxsLiAgU28gd2UgY2FuIHVzZSB0aGlzIGZlYXR1cmUgb25seSBvbiBzZWxlY3RlZAorLSAgIHN5c3RlbSAoZS5nLiB0aG9zZSB1c2luZyBHTlUgQyBMaWJyYXJ5KS4gICovCistI2lmZGVmIF9MSUJDCistIyBkZWZpbmUgSEFWRV9MT0NBTEVfTlVMTAorLSNlbmRpZgorLQorLS8qIE5hbWUgb2YgdGhlIGRlZmF1bHQgZG9tYWluIHVzZWQgZm9yIGdldHRleHQoMykgcHJpb3IgYW55IGNhbGwgdG8KKy0gICB0ZXh0ZG9tYWluKDMpLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgaXMgIm1lc3NhZ2VzIi4gICovCistY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbltdID0gIm1lc3NhZ2VzIjsKKy0KKy0vKiBWYWx1ZSB1c2VkIGFzIHRoZSBkZWZhdWx0IGRvbWFpbiBmb3IgZ2V0dGV4dCgzKS4gICovCistY29uc3QgY2hhciAqX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gPSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbjsKKy0KKy0vKiBDb250YWlucyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbWVzc2FnZSBjYXRhbG9ncy4gICovCistY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kaXJuYW1lW10gPSBHTlVMT0NBTEVESVI7CistCistLyogTGlzdCB3aXRoIGJpbmRpbmdzIG9mIHNwZWNpZmljIGRvbWFpbnMgY3JlYXRlZCBieSBiaW5kdGV4dGRvbWFpbigpCistICAgY2FsbHMuICAqLworLXN0cnVjdCBiaW5kaW5nICpfbmxfZG9tYWluX2JpbmRpbmdzOworLQorLS8qIFByb3RvdHlwZXMgZm9yIGxvY2FsIGZ1bmN0aW9ucy4gICovCistc3RhdGljIGNoYXIgKmZpbmRfbXNnIFBBUkFNUyAoKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbl9maWxlLAorLQkJCSAgICAgICBjb25zdCBjaGFyICptc2dpZCkpOworLXN0YXRpYyBjb25zdCBjaGFyICpjYXRlZ29yeV90b19uYW1lIFBBUkFNUyAoKGludCBjYXRlZ29yeSkpOworLXN0YXRpYyBjb25zdCBjaGFyICpndWVzc19jYXRlZ29yeV92YWx1ZSBQQVJBTVMgKChpbnQgY2F0ZWdvcnksCistCQkJCQkJIGNvbnN0IGNoYXIgKmNhdGVnb3J5bmFtZSkpOworLQorLQorLS8qIEZvciB0aG9zZSBsb29zaW5nIHN5c3RlbXMgd2hpY2ggZG9uJ3QgaGF2ZSBgYWxsb2NhJyB3ZSBoYXZlIHRvIGFkZAorLSAgIHNvbWUgYWRkaXRpb25hbCBjb2RlIGVtdWxhdGluZyBpdC4gICovCistI2lmZGVmIEhBVkVfQUxMT0NBCistLyogTm90aGluZyBoYXMgdG8gYmUgZG9uZS4gICovCistIyBkZWZpbmUgQUREX0JMT0NLKGxpc3QsIGFkZHJlc3MpIC8qIG5vdGhpbmcgKi8KKy0jIGRlZmluZSBGUkVFX0JMT0NLUyhsaXN0KSAvKiBub3RoaW5nICovCistI2Vsc2UKKy1zdHJ1Y3QgYmxvY2tfbGlzdAorLXsKKy0gIHZvaWQgKmFkZHJlc3M7CistICBzdHJ1Y3QgYmxvY2tfbGlzdCAqbmV4dDsKKy19OworLSMgZGVmaW5lIEFERF9CTE9DSyhsaXN0LCBhZGRyKQkJCQkJCSAgICAgIFwKKy0gIGRvIHsJCQkJCQkJCQkgICAgICBcCistICAgIHN0cnVjdCBibG9ja19saXN0ICpuZXdwID0gKHN0cnVjdCBibG9ja19saXN0ICopIG1hbGxvYyAoc2l6ZW9mICgqbmV3cCkpOyAgXAorLSAgICAvKiBJZiB3ZSBjYW5ub3QgZ2V0IGEgZnJlZSBibG9jayB3ZSBjYW5ub3QgYWRkIHRoZSBuZXcgZWxlbWVudCB0bwkgICAgICBcCistICAgICAgIHRoZSBsaXN0LiAgKi8JCQkJCQkJICAgICAgXAorLSAgICBpZiAobmV3cCAhPSBOVUxMKSB7CQkJCQkJCSAgICAgIFwKKy0gICAgICBuZXdwLT5hZGRyZXNzID0gKGFkZHIpOwkJCQkJCSAgICAgIFwKKy0gICAgICBuZXdwLT5uZXh0ID0gKGxpc3QpOwkJCQkJCSAgICAgIFwKKy0gICAgICAobGlzdCkgPSBuZXdwOwkJCQkJCQkgICAgICBcCistICAgIH0JCQkJCQkJCQkgICAgICBcCistICB9IHdoaWxlICgwKQorLSMgZGVmaW5lIEZSRUVfQkxPQ0tTKGxpc3QpCQkJCQkJICAgICAgXAorLSAgZG8gewkJCQkJCQkJCSAgICAgIFwKKy0gICAgd2hpbGUgKGxpc3QgIT0gTlVMTCkgewkJCQkJCSAgICAgIFwKKy0gICAgICBzdHJ1Y3QgYmxvY2tfbGlzdCAqb2xkID0gbGlzdDsJCQkJCSAgICAgIFwKKy0gICAgICBsaXN0ID0gbGlzdC0+bmV4dDsJCQkJCQkgICAgICBcCistICAgICAgZnJlZSAob2xkKTsJCQkJCQkJICAgICAgXAorLSAgICB9CQkJCQkJCQkJICAgICAgXAorLSAgfSB3aGlsZSAoMCkKKy0jIHVuZGVmIGFsbG9jYQorLSMgZGVmaW5lIGFsbG9jYShzaXplKSAobWFsbG9jIChzaXplKSkKKy0jZW5kaWYJLyogaGF2ZSBhbGxvY2EgKi8KKy0KKy0KKyAvKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCisgICAgd2l0aCBleGlzdGluZyBuYW1lcyBhbmQgdGhleSBzaG91bGQgZm9sbG93IEFOU0kgQy4gIEJ1dCB0aGlzIHNvdXJjZQorICAgIGNvZGUgaXMgYWxzbyB1c2VkIGluIEdOVSBDIExpYnJhcnkgd2hlcmUgdGhlIG5hbWVzIGhhdmUgYSBfXworICAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCisgI2lmZGVmIF9MSUJDCisgIyBkZWZpbmUgRENHRVRURVhUIF9fZGNnZXR0ZXh0CisrIyBkZWZpbmUgRENJR0VUVEVYVCBfX2RjaWdldHRleHQKKyAjZWxzZQorLSMgZGVmaW5lIERDR0VUVEVYVCBkY2dldHRleHRfXworKyMgZGVmaW5lIERDR0VUVEVYVCBsaWJpbnRsX2RjZ2V0dGV4dAorKyMgZGVmaW5lIERDSUdFVFRFWFQgbGliaW50bF9kY2lnZXR0ZXh0CisgI2VuZGlmCisgCisgLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50IENBVEVHT1JZCisgICAgbG9jYWxlLiAgKi8KKyBjaGFyICoKKy1EQ0dFVFRFWFQgKGRvbWFpbm5hbWUsIG1zZ2lkLCBjYXRlZ29yeSkKKy0gICAgIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWU7CistICAgICBjb25zdCBjaGFyICptc2dpZDsKKy0gICAgIGludCBjYXRlZ29yeTsKKytEQ0dFVFRFWFQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpCisgeworLSNpZm5kZWYgSEFWRV9BTExPQ0EKKy0gIHN0cnVjdCBibG9ja19saXN0ICpibG9ja19saXN0ID0gTlVMTDsKKy0jZW5kaWYKKy0gIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbjsKKy0gIHN0cnVjdCBiaW5kaW5nICpiaW5kaW5nOworLSAgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lOworLSAgY29uc3QgY2hhciAqY2F0ZWdvcnl2YWx1ZTsKKy0gIGNoYXIgKmRpcm5hbWUsICp4ZG9tYWlubmFtZTsKKy0gIGNoYXIgKnNpbmdsZV9sb2NhbGU7CistICBjaGFyICpyZXR2YWw7CistICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKy0KKy0gIC8qIElmIG5vIHJlYWwgTVNHSUQgaXMgZ2l2ZW4gcmV0dXJuIE5VTEwuICAqLworLSAgaWYgKG1zZ2lkID09IE5VTEwpCistICAgIHJldHVybiBOVUxMOworLQorLSAgLyogSWYgRE9NQUlOTkFNRSBpcyBOVUxMLCB3ZSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgZGVmYXVsdCBkb21haW4uICBJZgorLSAgICAgQ0FURUdPUlkgaXMgbm90IExDX01FU1NBR0VTIHRoaXMgbWlnaHQgbm90IG1ha2UgbXVjaCBzZW5zZSBidXQgdGhlCistICAgICBkZWZpbnRpb24gbGVmdCB0aGlzIHVuZGVmaW5lZC4gICovCistICBpZiAoZG9tYWlubmFtZSA9PSBOVUxMKQorLSAgICBkb21haW5uYW1lID0gX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW47CistCistICAvKiBGaXJzdCBmaW5kIG1hdGNoaW5nIGJpbmRpbmcuICAqLworLSAgZm9yIChiaW5kaW5nID0gX25sX2RvbWFpbl9iaW5kaW5nczsgYmluZGluZyAhPSBOVUxMOyBiaW5kaW5nID0gYmluZGluZy0+bmV4dCkKKy0gICAgeworLSAgICAgIGludCBjb21wYXJlID0gc3RyY21wIChkb21haW5uYW1lLCBiaW5kaW5nLT5kb21haW5uYW1lKTsKKy0gICAgICBpZiAoY29tcGFyZSA9PSAwKQorLQkvKiBXZSBmb3VuZCBpdCEgICovCistCWJyZWFrOworLSAgICAgIGlmIChjb21wYXJlIDwgMCkKKy0JeworLQkgIC8qIEl0IGlzIG5vdCBpbiB0aGUgbGlzdC4gICovCistCSAgYmluZGluZyA9IE5VTEw7CistCSAgYnJlYWs7CistCX0KKy0gICAgfQorLQorLSAgaWYgKGJpbmRpbmcgPT0gTlVMTCkKKy0gICAgZGlybmFtZSA9IChjaGFyICopIF9ubF9kZWZhdWx0X2Rpcm5hbWU7CistICBlbHNlIGlmIChiaW5kaW5nLT5kaXJuYW1lWzBdID09ICcvJykKKy0gICAgZGlybmFtZSA9IGJpbmRpbmctPmRpcm5hbWU7CistICBlbHNlCistICAgIHsKKy0gICAgICAvKiBXZSBoYXZlIGEgcmVsYXRpdmUgcGF0aC4gIE1ha2UgaXQgYWJzb2x1dGUgbm93LiAgKi8KKy0gICAgICBzaXplX3QgZGlybmFtZV9sZW4gPSBzdHJsZW4gKGJpbmRpbmctPmRpcm5hbWUpICsgMTsKKy0gICAgICBzaXplX3QgcGF0aF9tYXg7CistICAgICAgY2hhciAqcmV0OworLQorLSAgICAgIHBhdGhfbWF4ID0gKHVuc2lnbmVkKSBQQVRIX01BWDsKKy0gICAgICBwYXRoX21heCArPSAyOwkJLyogVGhlIGdldGN3ZCBkb2NzIHNheSB0byBkbyB0aGlzLiAgKi8KKy0KKy0gICAgICBkaXJuYW1lID0gKGNoYXIgKikgYWxsb2NhIChwYXRoX21heCArIGRpcm5hbWVfbGVuKTsKKy0gICAgICBBRERfQkxPQ0sgKGJsb2NrX2xpc3QsIGRpcm5hbWUpOworLQorLSAgICAgIF9fc2V0X2Vycm5vICgwKTsKKy0gICAgICB3aGlsZSAoKHJldCA9IGdldGN3ZCAoZGlybmFtZSwgcGF0aF9tYXgpKSA9PSBOVUxMICYmIGVycm5vID09IEVSQU5HRSkKKy0JeworLQkgIHBhdGhfbWF4ICs9IFBBVEhfSU5DUjsKKy0JICBkaXJuYW1lID0gKGNoYXIgKikgYWxsb2NhIChwYXRoX21heCArIGRpcm5hbWVfbGVuKTsKKy0JICBBRERfQkxPQ0sgKGJsb2NrX2xpc3QsIGRpcm5hbWUpOworLQkgIF9fc2V0X2Vycm5vICgwKTsKKy0JfQorLQorLSAgICAgIGlmIChyZXQgPT0gTlVMTCkKKy0JeworLQkgIC8qIFdlIGNhbm5vdCBnZXQgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuICBEb24ndCBzaWduYWwgYW4KKy0JICAgICBlcnJvciBidXQgc2ltcGx5IHJldHVybiB0aGUgZGVmYXVsdCBzdHJpbmcuICAqLworLQkgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKy0JICBfX3NldF9lcnJubyAoc2F2ZWRfZXJybm8pOworLQkgIHJldHVybiAoY2hhciAqKSBtc2dpZDsKKy0JfQorLQorLSAgICAgIHN0cGNweSAoc3RwY3B5IChzdHJjaHIgKGRpcm5hbWUsICdcMCcpLCAiLyIpLCBiaW5kaW5nLT5kaXJuYW1lKTsKKy0gICAgfQorLQorLSAgLyogTm93IGRldGVybWluZSB0aGUgc3ltYm9saWMgbmFtZSBvZiBDQVRFR09SWSBhbmQgaXRzIHZhbHVlLiAgKi8KKy0gIGNhdGVnb3J5bmFtZSA9IGNhdGVnb3J5X3RvX25hbWUgKGNhdGVnb3J5KTsKKy0gIGNhdGVnb3J5dmFsdWUgPSBndWVzc19jYXRlZ29yeV92YWx1ZSAoY2F0ZWdvcnksIGNhdGVnb3J5bmFtZSk7CistCistICB4ZG9tYWlubmFtZSA9IChjaGFyICopIGFsbG9jYSAoc3RybGVuIChjYXRlZ29yeW5hbWUpCistCQkJCSArIHN0cmxlbiAoZG9tYWlubmFtZSkgKyA1KTsKKy0gIEFERF9CTE9DSyAoYmxvY2tfbGlzdCwgeGRvbWFpbm5hbWUpOworLQorLSAgc3RwY3B5IChzdHBjcHkgKHN0cGNweSAoc3RwY3B5ICh4ZG9tYWlubmFtZSwgY2F0ZWdvcnluYW1lKSwgIi8iKSwKKy0JCSAgZG9tYWlubmFtZSksCistCSAgIi5tbyIpOworLQorLSAgLyogQ3JlYXRpbmcgd29ya2luZyBhcmVhLiAgKi8KKy0gIHNpbmdsZV9sb2NhbGUgPSAoY2hhciAqKSBhbGxvY2EgKHN0cmxlbiAoY2F0ZWdvcnl2YWx1ZSkgKyAxKTsKKy0gIEFERF9CTE9DSyAoYmxvY2tfbGlzdCwgc2luZ2xlX2xvY2FsZSk7CistCistCistICAvKiBTZWFyY2ggZm9yIHRoZSBnaXZlbiBzdHJpbmcuICBUaGlzIGlzIGEgbG9vcCBiZWNhdXNlIHdlIHBlcmhhcHMKKy0gICAgIGdvdCBhbiBvcmRlcmVkIGxpc3Qgb2YgbGFuZ3VhZ2VzIHRvIGNvbnNpZGVyIGZvciB0aCB0cmFuc2xhdGlvbi4gICovCistICB3aGlsZSAoMSkKKy0gICAgeworLSAgICAgIC8qIE1ha2UgQ0FURUdPUllWQUxVRSBwb2ludCB0byB0aGUgbmV4dCBlbGVtZW50IG9mIHRoZSBsaXN0LiAgKi8KKy0gICAgICB3aGlsZSAoY2F0ZWdvcnl2YWx1ZVswXSAhPSAnXDAnICYmIGNhdGVnb3J5dmFsdWVbMF0gPT0gJzonKQorLQkrK2NhdGVnb3J5dmFsdWU7CistICAgICAgaWYgKGNhdGVnb3J5dmFsdWVbMF0gPT0gJ1wwJykKKy0JeworLQkgIC8qIFRoZSB3aG9sZSBjb250ZW50cyBvZiBDQVRFR09SWVZBTFVFIGhhcyBiZWVuIHNlYXJjaGVkIGJ1dAorLQkgICAgIG5vIHZhbGlkIGVudHJ5IGhhcyBiZWVuIGZvdW5kLiAgV2Ugc29sdmUgdGhpcyBzaXR1YXRpb24KKy0JICAgICBieSBpbXBsaWNpdGx5IGFwcGVuZGluZyBhICJDIiBlbnRyeSwgaS5lLiBubyB0cmFuc2xhdGlvbgorLQkgICAgIHdpbGwgdGFrZSBwbGFjZS4gICovCistCSAgc2luZ2xlX2xvY2FsZVswXSA9ICdDJzsKKy0JICBzaW5nbGVfbG9jYWxlWzFdID0gJ1wwJzsKKy0JfQorLSAgICAgIGVsc2UKKy0JeworLQkgIGNoYXIgKmNwID0gc2luZ2xlX2xvY2FsZTsKKy0JICB3aGlsZSAoY2F0ZWdvcnl2YWx1ZVswXSAhPSAnXDAnICYmIGNhdGVnb3J5dmFsdWVbMF0gIT0gJzonKQorLQkgICAgKmNwKysgPSAqY2F0ZWdvcnl2YWx1ZSsrOworLQkgICpjcCA9ICdcMCc7CistCX0KKy0KKy0gICAgICAvKiBJZiB0aGUgY3VycmVudCBsb2NhbGUgdmFsdWUgaXMgQyAob3IgUE9TSVgpIHdlIGRvbid0IGxvYWQgYQorLQkgZG9tYWluLiAgUmV0dXJuIHRoZSBNU0dJRC4gICovCistICAgICAgaWYgKHN0cmNtcCAoc2luZ2xlX2xvY2FsZSwgIkMiKSA9PSAwCistCSAgfHwgc3RyY21wIChzaW5nbGVfbG9jYWxlLCAiUE9TSVgiKSA9PSAwKQorLQl7CistCSAgRlJFRV9CTE9DS1MgKGJsb2NrX2xpc3QpOworLQkgIF9fc2V0X2Vycm5vIChzYXZlZF9lcnJubyk7CistCSAgcmV0dXJuIChjaGFyICopIG1zZ2lkOworLQl9CistCistCistICAgICAgLyogRmluZCBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBjYXRhbG9nIG1hdGNoaW5nIHRoZQorLQkgRE9NQUlOTkFNRSBhbmQgQ0FURUdPUlkuICAqLworLSAgICAgIGRvbWFpbiA9IF9ubF9maW5kX2RvbWFpbiAoZGlybmFtZSwgc2luZ2xlX2xvY2FsZSwgeGRvbWFpbm5hbWUpOworLQorLSAgICAgIGlmIChkb21haW4gIT0gTlVMTCkKKy0JeworLQkgIHJldHZhbCA9IGZpbmRfbXNnIChkb21haW4sIG1zZ2lkKTsKKy0KKy0JICBpZiAocmV0dmFsID09IE5VTEwpCistCSAgICB7CistCSAgICAgIGludCBjbnQ7CistCistCSAgICAgIGZvciAoY250ID0gMDsgZG9tYWluLT5zdWNjZXNzb3JbY250XSAhPSBOVUxMOyArK2NudCkKKy0JCXsKKy0JCSAgcmV0dmFsID0gZmluZF9tc2cgKGRvbWFpbi0+c3VjY2Vzc29yW2NudF0sIG1zZ2lkKTsKKy0KKy0JCSAgaWYgKHJldHZhbCAhPSBOVUxMKQorLQkJICAgIGJyZWFrOworLQkJfQorLQkgICAgfQorLQorLQkgIGlmIChyZXR2YWwgIT0gTlVMTCkKKy0JICAgIHsKKy0JICAgICAgRlJFRV9CTE9DS1MgKGJsb2NrX2xpc3QpOworLQkgICAgICBfX3NldF9lcnJubyAoc2F2ZWRfZXJybm8pOworLQkgICAgICByZXR1cm4gcmV0dmFsOworLQkgICAgfQorLQl9CistICAgIH0KKy0gIC8qIE5PVFJFQUNIRUQgKi8KKysgIHJldHVybiBEQ0lHRVRURVhUIChkb21haW5uYW1lLCBtc2dpZCwgTlVMTCwgMCwgMCwgY2F0ZWdvcnkpOworIH0KKyAKKyAjaWZkZWYgX0xJQkMKKyAvKiBBbGlhcyBmb3IgZnVuY3Rpb24gbmFtZSBpbiBHTlUgQyBMaWJyYXJ5LiAgKi8KKytJTlRERUYoX19kY2dldHRleHQpCisgd2Vha19hbGlhcyAoX19kY2dldHRleHQsIGRjZ2V0dGV4dCk7CisgI2VuZGlmCistCistCistc3RhdGljIGNoYXIgKgorLWZpbmRfbXNnIChkb21haW5fZmlsZSwgbXNnaWQpCistICAgICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW5fZmlsZTsKKy0gICAgIGNvbnN0IGNoYXIgKm1zZ2lkOworLXsKKy0gIHNpemVfdCB0b3AsIGFjdCwgYm90dG9tOworLSAgc3RydWN0IGxvYWRlZF9kb21haW4gKmRvbWFpbjsKKy0KKy0gIGlmIChkb21haW5fZmlsZS0+ZGVjaWRlZCA9PSAwKQorLSAgICBfbmxfbG9hZF9kb21haW4gKGRvbWFpbl9maWxlKTsKKy0KKy0gIGlmIChkb21haW5fZmlsZS0+ZGF0YSA9PSBOVUxMKQorLSAgICByZXR1cm4gTlVMTDsKKy0KKy0gIGRvbWFpbiA9IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqKSBkb21haW5fZmlsZS0+ZGF0YTsKKy0KKy0gIC8qIExvY2F0ZSB0aGUgTVNHSUQgYW5kIGl0cyB0cmFuc2xhdGlvbi4gICovCistICBpZiAoZG9tYWluLT5oYXNoX3NpemUgPiAyICYmIGRvbWFpbi0+aGFzaF90YWIgIT0gTlVMTCkKKy0gICAgeworLSAgICAgIC8qIFVzZSB0aGUgaGFzaGluZyB0YWJsZS4gICovCistICAgICAgbmxzX3VpbnQzMiBsZW4gPSBzdHJsZW4gKG1zZ2lkKTsKKy0gICAgICBubHNfdWludDMyIGhhc2hfdmFsID0gaGFzaF9zdHJpbmcgKG1zZ2lkKTsKKy0gICAgICBubHNfdWludDMyIGlkeCA9IGhhc2hfdmFsICUgZG9tYWluLT5oYXNoX3NpemU7CistICAgICAgbmxzX3VpbnQzMiBpbmNyID0gMSArIChoYXNoX3ZhbCAlIChkb21haW4tPmhhc2hfc2l6ZSAtIDIpKTsKKy0gICAgICBubHNfdWludDMyIG5zdHIgPSBXIChkb21haW4tPm11c3Rfc3dhcCwgZG9tYWluLT5oYXNoX3RhYltpZHhdKTsKKy0KKy0gICAgICBpZiAobnN0ciA9PSAwKQorLQkvKiBIYXNoIHRhYmxlIGVudHJ5IGlzIGVtcHR5LiAgKi8KKy0JcmV0dXJuIE5VTEw7CistCistICAgICAgaWYgKFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkb21haW4tPm9yaWdfdGFiW25zdHIgLSAxXS5sZW5ndGgpID09IGxlbgorLQkgICYmIHN0cmNtcCAobXNnaWQsCistCQkgICAgIGRvbWFpbi0+ZGF0YSArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAorLQkJCQkgICAgICAgZG9tYWluLT5vcmlnX3RhYltuc3RyIC0gMV0ub2Zmc2V0KSkgPT0gMCkKKy0JcmV0dXJuIChjaGFyICopIGRvbWFpbi0+ZGF0YSArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAorLQkJCQkJICBkb21haW4tPnRyYW5zX3RhYltuc3RyIC0gMV0ub2Zmc2V0KTsKKy0KKy0gICAgICB3aGlsZSAoMSkKKy0JeworLQkgIGlmIChpZHggPj0gZG9tYWluLT5oYXNoX3NpemUgLSBpbmNyKQorLQkgICAgaWR4IC09IGRvbWFpbi0+aGFzaF9zaXplIC0gaW5jcjsKKy0JICBlbHNlCistCSAgICBpZHggKz0gaW5jcjsKKy0KKy0JICBuc3RyID0gVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRvbWFpbi0+aGFzaF90YWJbaWR4XSk7CistCSAgaWYgKG5zdHIgPT0gMCkKKy0JICAgIC8qIEhhc2ggdGFibGUgZW50cnkgaXMgZW1wdHkuICAqLworLQkgICAgcmV0dXJuIE5VTEw7CistCistCSAgaWYgKFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkb21haW4tPm9yaWdfdGFiW25zdHIgLSAxXS5sZW5ndGgpID09IGxlbgorLQkgICAgICAmJiBzdHJjbXAgKG1zZ2lkLAorLQkJCSBkb21haW4tPmRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwKKy0JCQkJCSAgIGRvbWFpbi0+b3JpZ190YWJbbnN0ciAtIDFdLm9mZnNldCkpCistCSAgICAgICAgID09IDApCistCSAgICByZXR1cm4gKGNoYXIgKikgZG9tYWluLT5kYXRhCistCSAgICAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRvbWFpbi0+dHJhbnNfdGFiW25zdHIgLSAxXS5vZmZzZXQpOworLQl9CistICAgICAgLyogTk9UUkVBQ0hFRCAqLworLSAgICB9CistCistICAvKiBOb3cgd2UgdHJ5IHRoZSBkZWZhdWx0IG1ldGhvZDogIGJpbmFyeSBzZWFyY2ggaW4gdGhlIHNvcnRlZAorLSAgICAgYXJyYXkgb2YgbWVzc2FnZXMuICAqLworLSAgYm90dG9tID0gMDsKKy0gIHRvcCA9IGRvbWFpbi0+bnN0cmluZ3M7CistICB3aGlsZSAoYm90dG9tIDwgdG9wKQorLSAgICB7CistICAgICAgaW50IGNtcF92YWw7CistCistICAgICAgYWN0ID0gKGJvdHRvbSArIHRvcCkgLyAyOworLSAgICAgIGNtcF92YWwgPSBzdHJjbXAgKG1zZ2lkLCBkb21haW4tPmRhdGEKKy0JCQkgICAgICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwKKy0JCQkJICAgIGRvbWFpbi0+b3JpZ190YWJbYWN0XS5vZmZzZXQpKTsKKy0gICAgICBpZiAoY21wX3ZhbCA8IDApCistCXRvcCA9IGFjdDsKKy0gICAgICBlbHNlIGlmIChjbXBfdmFsID4gMCkKKy0JYm90dG9tID0gYWN0ICsgMTsKKy0gICAgICBlbHNlCistCWJyZWFrOworLSAgICB9CistCistICAvKiBJZiBhbiB0cmFuc2xhdGlvbiBpcyBmb3VuZCByZXR1cm4gdGhpcy4gICovCistICByZXR1cm4gYm90dG9tID49IHRvcCA/IE5VTEwgOiAoY2hhciAqKSBkb21haW4tPmRhdGEKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsCistCQkJCSAgICAgZG9tYWluLT50cmFuc190YWJbYWN0XS5vZmZzZXQpOworLX0KKy0KKy0KKy0vKiBSZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGxvY2FsZSBDQVRFR09SWS4gICovCistc3RhdGljIGNvbnN0IGNoYXIgKgorLWNhdGVnb3J5X3RvX25hbWUgKGNhdGVnb3J5KQorLSAgICAgaW50IGNhdGVnb3J5OworLXsKKy0gIGNvbnN0IGNoYXIgKnJldHZhbDsKKy0KKy0gIHN3aXRjaCAoY2F0ZWdvcnkpCistICB7CistI2lmZGVmIExDX0NPTExBVEUKKy0gIGNhc2UgTENfQ09MTEFURToKKy0gICAgcmV0dmFsID0gIkxDX0NPTExBVEUiOworLSAgICBicmVhazsKKy0jZW5kaWYKKy0jaWZkZWYgTENfQ1RZUEUKKy0gIGNhc2UgTENfQ1RZUEU6CistICAgIHJldHZhbCA9ICJMQ19DVFlQRSI7CistICAgIGJyZWFrOworLSNlbmRpZgorLSNpZmRlZiBMQ19NT05FVEFSWQorLSAgY2FzZSBMQ19NT05FVEFSWToKKy0gICAgcmV0dmFsID0gIkxDX01PTkVUQVJZIjsKKy0gICAgYnJlYWs7CistI2VuZGlmCistI2lmZGVmIExDX05VTUVSSUMKKy0gIGNhc2UgTENfTlVNRVJJQzoKKy0gICAgcmV0dmFsID0gIkxDX05VTUVSSUMiOworLSAgICBicmVhazsKKy0jZW5kaWYKKy0jaWZkZWYgTENfVElNRQorLSAgY2FzZSBMQ19USU1FOgorLSAgICByZXR2YWwgPSAiTENfVElNRSI7CistICAgIGJyZWFrOworLSNlbmRpZgorLSNpZmRlZiBMQ19NRVNTQUdFUworLSAgY2FzZSBMQ19NRVNTQUdFUzoKKy0gICAgcmV0dmFsID0gIkxDX01FU1NBR0VTIjsKKy0gICAgYnJlYWs7CistI2VuZGlmCistI2lmZGVmIExDX1JFU1BPTlNFCistICBjYXNlIExDX1JFU1BPTlNFOgorLSAgICByZXR2YWwgPSAiTENfUkVTUE9OU0UiOworLSAgICBicmVhazsKKy0jZW5kaWYKKy0jaWZkZWYgTENfQUxMCistICBjYXNlIExDX0FMTDoKKy0gICAgLyogVGhpcyBtaWdodCBub3QgbWFrZSBzZW5zZSBidXQgaXMgcGVyaGFwcyBiZXR0ZXIgdGhhbiBhbnkgb3RoZXIKKy0gICAgICAgdmFsdWUuICAqLworLSAgICByZXR2YWwgPSAiTENfQUxMIjsKKy0gICAgYnJlYWs7CistI2VuZGlmCistICBkZWZhdWx0OgorLSAgICAvKiBJZiB5b3UgaGF2ZSBhIGJldHRlciBpZGVhIGZvciBhIGRlZmF1bHQgdmFsdWUgbGV0IG1lIGtub3cuICAqLworLSAgICByZXR2YWwgPSAiTENfWFhYIjsKKy0gIH0KKy0KKy0gIHJldHVybiByZXR2YWw7CistfQorLQorLS8qIEd1ZXNzIHZhbHVlIG9mIGN1cnJlbnQgbG9jYWxlIGZyb20gdmFsdWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gICovCistc3RhdGljIGNvbnN0IGNoYXIgKgorLWd1ZXNzX2NhdGVnb3J5X3ZhbHVlIChjYXRlZ29yeSwgY2F0ZWdvcnluYW1lKQorLSAgICAgaW50IGNhdGVnb3J5OworLSAgICAgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lOworLXsKKy0gIGNvbnN0IGNoYXIgKnJldHZhbDsKKy0KKy0gIC8qIFRoZSBoaWdoZXN0IHByaW9yaXR5IHZhbHVlIGlzIHRoZSBgTEFOR1VBR0UnIGVudmlyb25tZW50CistICAgICB2YXJpYWJsZS4gIFRoaXMgaXMgYSBHTlUgZXh0ZW5zaW9uLiAgKi8KKy0gIHJldHZhbCA9IGdldGVudiAoIkxBTkdVQUdFIik7CistICBpZiAocmV0dmFsICE9IE5VTEwgJiYgcmV0dmFsWzBdICE9ICdcMCcpCistICAgIHJldHVybiByZXR2YWw7CistCistICAvKiBgTEFOR1VBR0UnIGlzIG5vdCBzZXQuICBTbyB3ZSBoYXZlIHRvIHByb2NlZWQgd2l0aCB0aGUgUE9TSVgKKy0gICAgIG1ldGhvZHMgb2YgbG9va2luZyB0byBgTENfQUxMJywgYExDX3h4eCcsIGFuZCBgTEFORycuICBPbiBzb21lCistICAgICBzeXN0ZW1zIHRoaXMgY2FuIGJlIGRvbmUgYnkgdGhlIGBzZXRsb2NhbGUnIGZ1bmN0aW9uIGl0c2VsZi4gICovCistI2lmIGRlZmluZWQgSEFWRV9TRVRMT0NBTEUgJiYgZGVmaW5lZCBIQVZFX0xDX01FU1NBR0VTICYmIGRlZmluZWQgSEFWRV9MT0NBTEVfTlVMTAorLSAgcmV0dXJuIHNldGxvY2FsZSAoY2F0ZWdvcnksIE5VTEwpOworLSNlbHNlCistICAvKiBTZXR0aW5nIG9mIExDX0FMTCBvdmVyd3JpdGVzIGFsbCBvdGhlci4gICovCistICByZXR2YWwgPSBnZXRlbnYgKCJMQ19BTEwiKTsKKy0gIGlmIChyZXR2YWwgIT0gTlVMTCAmJiByZXR2YWxbMF0gIT0gJ1wwJykKKy0gICAgcmV0dXJuIHJldHZhbDsKKy0KKy0gIC8qIE5leHQgY29tZXMgdGhlIG5hbWUgb2YgdGhlIGRlc2lyZWQgY2F0ZWdvcnkuICAqLworLSAgcmV0dmFsID0gZ2V0ZW52IChjYXRlZ29yeW5hbWUpOworLSAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorLSAgICByZXR1cm4gcmV0dmFsOworLQorLSAgLyogTGFzdCBwb3NzaWJpbGl0eSBpcyB0aGUgTEFORyBlbnZpcm9ubWVudCB2YXJpYWJsZS4gICovCistICByZXR2YWwgPSBnZXRlbnYgKCJMQU5HIik7CistICBpZiAocmV0dmFsICE9IE5VTEwgJiYgcmV0dmFsWzBdICE9ICdcMCcpCistICAgIHJldHVybiByZXR2YWw7CistCistICAvKiBXZSB1c2UgQyBhcyB0aGUgZGVmYXVsdCBkb21haW4uICBQT1NJWCBzYXlzIHRoaXMgaXMgaW1wbGVtZW50YXRpb24KKy0gICAgIGRlZmluZWQuICAqLworLSAgcmV0dXJuICJDIjsKKy0jZW5kaWYKKy19CistCistLyogQEAgYmVnaW4gb2YgZXBpbG9nIEBAICovCistCistLyogV2UgZG9uJ3Qgd2FudCBsaWJpbnRsLmEgdG8gZGVwZW5kIG9uIGFueSBvdGhlciBsaWJyYXJ5LiAgU28gd2UKKy0gICBhdm9pZCB0aGUgbm9uLXN0YW5kYXJkIGZ1bmN0aW9uIHN0cGNweS4gIEluIEdOVSBDIExpYnJhcnkgdGhpcworLSAgIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSwgdGhvdWdoLiAgQWxzbyBhbGxvdyB0aGUgc3ltYm9sIEhBVkVfU1RQQ1BZCistICAgdG8gYmUgZGVmaW5lZC4gICovCistI2lmICFfTElCQyAmJiAhSEFWRV9TVFBDUFkKKy1zdGF0aWMgY2hhciAqCistc3RwY3B5IChkZXN0LCBzcmMpCistICAgICBjaGFyICpkZXN0OworLSAgICAgY29uc3QgY2hhciAqc3JjOworLXsKKy0gIHdoaWxlICgoKmRlc3QrKyA9ICpzcmMrKykgIT0gJ1wwJykKKy0gICAgLyogRG8gbm90aGluZy4gKi8gOworLSAgcmV0dXJuIGRlc3QgLSAxOworLX0KKy0jZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9kY2lnZXR0ZXh0LmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvZGNpZ2V0dGV4dC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzY5NzQ1OTYwIC0wNDAwCitAQCAtMCwwICsxLDEyMTkgQEAKKysvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW50ZXJuYWwgZGNpZ2V0dGV4dCBmdW5jdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysvKiBUZWxsIGdsaWJjJ3MgPHN0cmluZy5oPiB0byBwcm92aWRlIGEgcHJvdG90eXBlIGZvciBtZW1wY3B5KCkuCisrICAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4gYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlCisrICAgPGZlYXR1cmVzLmg+LCBhbmQgb25jZSA8ZmVhdHVyZXMuaD4gaGFzIGJlZW4gaW5jbHVkZWQsIGl0J3MgdG9vIGxhdGUuICAqLworKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjIGRlZmluZSBfR05VX1NPVVJDRQkxCisrI2VuZGlmCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysKKysjaWZkZWYgX19HTlVDX18KKysjIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorKyMgZGVmaW5lIEhBVkVfQUxMT0NBIDEKKysjZWxzZQorKyMgaWZkZWYgX01TQ19WRVIKKysjICBpbmNsdWRlIDxtYWxsb2MuaD4KKysjICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKKysjIGVsc2UKKysjICBpZiBkZWZpbmVkIEhBVkVfQUxMT0NBX0ggfHwgZGVmaW5lZCBfTElCQworKyMgICBpbmNsdWRlIDxhbGxvY2EuaD4KKysjICBlbHNlCisrIyAgIGlmZGVmIF9BSVgKKysgI3ByYWdtYSBhbGxvY2EKKysjICAgZWxzZQorKyMgICAgaWZuZGVmIGFsbG9jYQorK2NoYXIgKmFsbG9jYSAoKTsKKysjICAgIGVuZGlmCisrIyAgIGVuZGlmCisrIyAgZW5kaWYKKysjIGVuZGlmCisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2lmbmRlZiBlcnJubworK2V4dGVybiBpbnQgZXJybm87CisrI2VuZGlmCisrI2lmbmRlZiBfX3NldF9lcnJubworKyMgZGVmaW5lIF9fc2V0X2Vycm5vKHZhbCkgZXJybm8gPSAodmFsKQorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworKyNpZiBkZWZpbmVkIEhBVkVfVU5JU1REX0ggfHwgZGVmaW5lZCBfTElCQworKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGxvY2FsZS5oPgorKworKyNpZmRlZiBfTElCQworKyAgLyogR3Vlc3Mgd2hldGhlciBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8gcmFpc2VzIHNpZ25hbCBTSUdGUEUuCisrICAgICBTZXQgdG8gMSBvbmx5IGlmIHlvdSBrbm93IGZvciBzdXJlLiAgSW4gY2FzZSBvZiBkb3VidCwgc2V0IHRvIDAuICAqLworKyMgaWYgZGVmaW5lZCBfX2FscGhhX18gfHwgZGVmaW5lZCBfX2FybV9fIHx8IGRlZmluZWQgX19pMzg2X18gXAorKyAgICAgfHwgZGVmaW5lZCBfX202OGtfXyB8fCBkZWZpbmVkIF9fczM5MF9fCisrIyAgZGVmaW5lIElOVERJVjBfUkFJU0VTX1NJR0ZQRSAxCisrIyBlbHNlCisrIyAgZGVmaW5lIElOVERJVjBfUkFJU0VTX1NJR0ZQRSAwCisrIyBlbmRpZgorKyNlbmRpZgorKyNpZiAhSU5URElWMF9SQUlTRVNfU0lHRlBFCisrIyBpbmNsdWRlIDxzaWduYWwuaD4KKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBIQVZFX1NZU19QQVJBTV9IIHx8IGRlZmluZWQgX0xJQkMKKysjIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorKyNpbmNsdWRlICJwbHVyYWwtZXhwLmgiCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisrI2Vsc2UKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKysjZW5kaWYKKysjaW5jbHVkZSAiaGFzaC1zdHJpbmcuaCIKKysKKysvKiBUaHJlYWQgc2FmZXR5bmVzcy4gICovCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorKyNlbHNlCisrLyogUHJvdmlkZSBkdW1teSBpbXBsZW1lbnRhdGlvbiBpZiB0aGlzIGlzIG91dHNpZGUgZ2xpYmMuICAqLworKyMgZGVmaW5lIF9fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZChDTEFTUywgTkFNRSkKKysjIGRlZmluZSBfX2xpYmNfbG9ja19sb2NrKE5BTUUpCisrIyBkZWZpbmUgX19saWJjX2xvY2tfdW5sb2NrKE5BTUUpCisrIyBkZWZpbmUgX19saWJjX3J3bG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQoQ0xBU1MsIE5BTUUpCisrIyBkZWZpbmUgX19saWJjX3J3bG9ja19yZGxvY2soTkFNRSkKKysjIGRlZmluZSBfX2xpYmNfcndsb2NrX3VubG9jayhOQU1FKQorKyNlbmRpZgorKworKy8qIEFsaWdubWVudCBvZiB0eXBlcy4gICovCisrI2lmIGRlZmluZWQgX19HTlVDX18gJiYgX19HTlVDX18gPj0gMgorKyMgZGVmaW5lIGFsaWdub2YoVFlQRSkgX19hbGlnbm9mX18gKFRZUEUpCisrI2Vsc2UKKysjIGRlZmluZSBhbGlnbm9mKFRZUEUpIFwKKysgICAgKChpbnQpICYoKHN0cnVjdCB7IGNoYXIgZHVtbXkxOyBUWVBFIGR1bW15MjsgfSAqKSAwKS0+ZHVtbXkyKQorKyNlbmRpZgorKworKy8qIFRoZSBpbnRlcm5hbCB2YXJpYWJsZXMgaW4gdGhlIHN0YW5kYWxvbmUgbGliaW50bC5hIG11c3QgaGF2ZSBkaWZmZXJlbnQKKysgICBuYW1lcyB0aGFuIHRoZSBpbnRlcm5hbCB2YXJpYWJsZXMgaW4gR05VIGxpYmMsIG90aGVyd2lzZSBwcm9ncmFtcworKyAgIHVzaW5nIGxpYmludGwuYSBjYW5ub3QgYmUgbGlua2VkIHN0YXRpY2FsbHkuICAqLworKyNpZiAhZGVmaW5lZCBfTElCQworKyMgZGVmaW5lIF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluIGxpYmludGxfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbgorKyMgZGVmaW5lIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluIGxpYmludGxfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbgorKyMgZGVmaW5lIF9ubF9kZWZhdWx0X2Rpcm5hbWUgbGliaW50bF9ubF9kZWZhdWx0X2Rpcm5hbWUKKysjIGRlZmluZSBfbmxfZG9tYWluX2JpbmRpbmdzIGxpYmludGxfbmxfZG9tYWluX2JpbmRpbmdzCisrI2VuZGlmCisrCisrLyogU29tZSBjb21waWxlcnMsIGxpa2UgU3VuT1M0IGNjLCBkb24ndCBoYXZlIG9mZnNldG9mIGluIDxzdGRkZWYuaD4uICAqLworKyNpZm5kZWYgb2Zmc2V0b2YKKysjIGRlZmluZSBvZmZzZXRvZih0eXBlLGlkZW50KSAoKHNpemVfdCkmKCgodHlwZSopMCktPmlkZW50KSkKKysjZW5kaWYKKysKKysvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisrCisrI2lmZGVmIF9MSUJDCisrLyogUmVuYW1lIHRoZSBub24gQU5TSSBDIGZ1bmN0aW9ucy4gIFRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkCisrICAgYmVjYXVzZSBzb21lIEFOU0kgQyBmdW5jdGlvbnMgd2lsbCByZXF1aXJlIGxpbmtpbmcgd2l0aCB0aGlzIG9iamVjdAorKyAgIGZpbGUgYW5kIHRoZSBuYW1lIHNwYWNlIG11c3Qgbm90IGJlIHBvbGx1dGVkLiAgKi8KKysjIGRlZmluZSBnZXRjd2QgX19nZXRjd2QKKysjIGlmbmRlZiBzdHBjcHkKKysjICBkZWZpbmUgc3RwY3B5IF9fc3RwY3B5CisrIyBlbmRpZgorKyMgZGVmaW5lIHRmaW5kIF9fdGZpbmQKKysjZWxzZQorKyMgaWYgIWRlZmluZWQgSEFWRV9HRVRDV0QKKytjaGFyICpnZXR3ZCAoKTsKKysjICBkZWZpbmUgZ2V0Y3dkKGJ1ZiwgbWF4KSBnZXR3ZCAoYnVmKQorKyMgZWxzZQorKyMgIGlmIFZNUworKyMgICBkZWZpbmUgZ2V0Y3dkKGJ1ZiwgbWF4KSAoZ2V0Y3dkKSAoYnVmLCBtYXgsIDApCisrIyAgZWxzZQorK2NoYXIgKmdldGN3ZCAoKTsKKysjICBlbmRpZgorKyMgZW5kaWYKKysjIGlmbmRlZiBIQVZFX1NUUENQWQorK3N0YXRpYyBjaGFyICpzdHBjcHkgKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYyk7CisrIyBlbmRpZgorKyMgaWZuZGVmIEhBVkVfTUVNUENQWQorK3N0YXRpYyB2b2lkICptZW1wY3B5ICh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKTsKKysjIGVuZGlmCisrI2VuZGlmCisrCisrLyogQW1vdW50IHRvIGluY3JlYXNlIGJ1ZmZlciBzaXplIGJ5IGluIGVhY2ggdHJ5LiAgKi8KKysjZGVmaW5lIFBBVEhfSU5DUiAzMgorKworKy8qIFRoZSBmb2xsb3dpbmcgaXMgZnJvbSBwYXRobWF4LmguICAqLworKy8qIE5vbi1QT1NJWCBCU0Qgc3lzdGVtcyBtaWdodCBoYXZlIGdjYydzIGxpbWl0cy5oLCB3aGljaCBkb2Vzbid0IGRlZmluZQorKyAgIFBBVEhfTUFYIGJ1dCBtaWdodCBjYXVzZSByZWRlZmluaXRpb24gd2FybmluZ3Mgd2hlbiBzeXMvcGFyYW0uaCBpcworKyAgIGxhdGVyIGluY2x1ZGVkIChhcyBvbiBNT1JFL0JTRCA0LjMpLiAgKi8KKysjaWYgZGVmaW5lZCBfUE9TSVhfVkVSU0lPTiB8fCAoZGVmaW5lZCBIQVZFX0xJTUlUU19IICYmICFkZWZpbmVkIF9fR05VQ19fKQorKyMgaW5jbHVkZSA8bGltaXRzLmg+CisrI2VuZGlmCisrCisrI2lmbmRlZiBfUE9TSVhfUEFUSF9NQVgKKysjIGRlZmluZSBfUE9TSVhfUEFUSF9NQVggMjU1CisrI2VuZGlmCisrCisrI2lmICFkZWZpbmVkIFBBVEhfTUFYICYmIGRlZmluZWQgX1BDX1BBVEhfTUFYCisrIyBkZWZpbmUgUEFUSF9NQVggKHBhdGhjb25mICgiLyIsIF9QQ19QQVRIX01BWCkgPCAxID8gMTAyNCA6IHBhdGhjb25mICgiLyIsIF9QQ19QQVRIX01BWCkpCisrI2VuZGlmCisrCisrLyogRG9uJ3QgaW5jbHVkZSBzeXMvcGFyYW0uaCBpZiBpdCBhbHJlYWR5IGhhcyBiZWVuLiAgKi8KKysjaWYgZGVmaW5lZCBIQVZFX1NZU19QQVJBTV9IICYmICFkZWZpbmVkIFBBVEhfTUFYICYmICFkZWZpbmVkIE1BWFBBVEhMRU4KKysjIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorKyNlbmRpZgorKworKyNpZiAhZGVmaW5lZCBQQVRIX01BWCAmJiBkZWZpbmVkIE1BWFBBVEhMRU4KKysjIGRlZmluZSBQQVRIX01BWCBNQVhQQVRITEVOCisrI2VuZGlmCisrCisrI2lmbmRlZiBQQVRIX01BWAorKyMgZGVmaW5lIFBBVEhfTUFYIF9QT1NJWF9QQVRIX01BWAorKyNlbmRpZgorKworKy8qIFBhdGhuYW1lIHN1cHBvcnQuCisrICAgSVNTTEFTSChDKSAgICAgICAgICAgdGVzdHMgd2hldGhlciBDIGlzIGEgZGlyZWN0b3J5IHNlcGFyYXRvciBjaGFyYWN0ZXIuCisrICAgSVNfQUJTT0xVVEVfUEFUSChQKSAgdGVzdHMgd2hldGhlciBQIGlzIGFuIGFic29sdXRlIHBhdGguICBJZiBpdCBpcyBub3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgaXQgbWF5IGJlIGNvbmNhdGVuYXRlZCB0byBhIGRpcmVjdG9yeSBwYXRobmFtZS4KKysgICBJU19QQVRIX1dJVEhfRElSKFApICB0ZXN0cyB3aGV0aGVyIFAgY29udGFpbnMgYSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbi4KKysgKi8KKysjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0VNWF9fIHx8IGRlZmluZWQgX19ESkdQUF9fCisrICAvKiBXaW4zMiwgT1MvMiwgRE9TICovCisrIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09ICcvJyB8fCAoQykgPT0gJ1xcJykKKysjIGRlZmluZSBIQVNfREVWSUNFKFApIFwKKysgICAgKCgoKFApWzBdID49ICdBJyAmJiAoUClbMF0gPD0gJ1onKSB8fCAoKFApWzBdID49ICdhJyAmJiAoUClbMF0gPD0gJ3onKSkgXAorKyAgICAgJiYgKFApWzFdID09ICc6JykKKysjIGRlZmluZSBJU19BQlNPTFVURV9QQVRIKFApIChJU1NMQVNIICgoUClbMF0pIHx8IEhBU19ERVZJQ0UgKFApKQorKyMgZGVmaW5lIElTX1BBVEhfV0lUSF9ESVIoUCkgXAorKyAgICAoc3RyY2hyIChQLCAnLycpICE9IE5VTEwgfHwgc3RyY2hyIChQLCAnXFwnKSAhPSBOVUxMIHx8IEhBU19ERVZJQ0UgKFApKQorKyNlbHNlCisrICAvKiBVbml4ICovCisrIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09ICcvJykKKysjIGRlZmluZSBJU19BQlNPTFVURV9QQVRIKFApIElTU0xBU0ggKChQKVswXSkKKysjIGRlZmluZSBJU19QQVRIX1dJVEhfRElSKFApIChzdHJjaHIgKFAsICcvJykgIT0gTlVMTCkKKysjZW5kaWYKKysKKysvKiBUaGlzIGlzIHRoZSB0eXBlIHVzZWQgZm9yIHRoZSBzZWFyY2ggdHJlZSB3aGVyZSBrbm93biB0cmFuc2xhdGlvbnMKKysgICBhcmUgc3RvcmVkLiAgKi8KKytzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdAorK3sKKysgIC8qIERvbWFpbiBpbiB3aGljaCB0byBzZWFyY2guICAqLworKyAgY2hhciAqZG9tYWlubmFtZTsKKysKKysgIC8qIFRoZSBjYXRlZ29yeS4gICovCisrICBpbnQgY2F0ZWdvcnk7CisrCisrICAvKiBTdGF0ZSBvZiB0aGUgY2F0YWxvZyBjb3VudGVyIGF0IHRoZSBwb2ludCB0aGUgc3RyaW5nIHdhcyBmb3VuZC4gICovCisrICBpbnQgY291bnRlcjsKKysKKysgIC8qIENhdGFsb2cgd2hlcmUgdGhlIHN0cmluZyB3YXMgZm91bmQuICAqLworKyAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9tYWluOworKworKyAgLyogQW5kIGZpbmFsbHkgdGhlIHRyYW5zbGF0aW9uLiAgKi8KKysgIGNvbnN0IGNoYXIgKnRyYW5zbGF0aW9uOworKyAgc2l6ZV90IHRyYW5zbGF0aW9uX2xlbmd0aDsKKysKKysgIC8qIFBvaW50ZXIgdG8gdGhlIHN0cmluZyBpbiBxdWVzdGlvbi4gICovCisrICBjaGFyIG1zZ2lkW1pFUk9dOworK307CisrCisrLyogUm9vdCBvZiB0aGUgc2VhcmNoIHRyZWUgd2l0aCBrbm93biB0cmFuc2xhdGlvbnMuICBXZSBjYW4gdXNlIHRoaXMKKysgICBvbmx5IGlmIHRoZSBzeXN0ZW0gcHJvdmlkZXMgdGhlIGB0c2VhcmNoJyBmdW5jdGlvbiBmYW1pbHkuICAqLworKyNpZiBkZWZpbmVkIEhBVkVfVFNFQVJDSCB8fCBkZWZpbmVkIF9MSUJDCisrIyBpbmNsdWRlIDxzZWFyY2guaD4KKysKKytzdGF0aWMgdm9pZCAqcm9vdDsKKysKKysjIGlmZGVmIF9MSUJDCisrIyAgZGVmaW5lIHRzZWFyY2ggX190c2VhcmNoCisrIyBlbmRpZgorKworKy8qIEZ1bmN0aW9uIHRvIGNvbXBhcmUgdHdvIGVudHJpZXMgaW4gdGhlIHRhYmxlIG9mIGtub3duIHRyYW5zbGF0aW9ucy4gICovCisrc3RhdGljIGludAorK3RyYW5zY21wIChjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpCisreworKyAgY29uc3Qgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKnMxOworKyAgY29uc3Qgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKnMyOworKyAgaW50IHJlc3VsdDsKKysKKysgIHMxID0gKGNvbnN0IHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICopIHAxOworKyAgczIgPSAoY29uc3Qgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKikgcDI7CisrCisrICByZXN1bHQgPSBzdHJjbXAgKHMxLT5tc2dpZCwgczItPm1zZ2lkKTsKKysgIGlmIChyZXN1bHQgPT0gMCkKKysgICAgeworKyAgICAgIHJlc3VsdCA9IHN0cmNtcCAoczEtPmRvbWFpbm5hbWUsIHMyLT5kb21haW5uYW1lKTsKKysgICAgICBpZiAocmVzdWx0ID09IDApCisrCS8qIFdlIGNvbXBhcmUgdGhlIGNhdGVnb3J5IGxhc3QgKHRob3VnaCB0aGlzIGlzIHRoZSBjaGVhcGVzdAorKwkgICBvcGVyYXRpb24pIHNpbmNlIGl0IGlzIGhvcGVmdWxseSBhbHdheXMgdGhlIHNhbWUgKG5hbWVseQorKwkgICBMQ19NRVNTQUdFUykuICAqLworKwlyZXN1bHQgPSBzMS0+Y2F0ZWdvcnkgLSBzMi0+Y2F0ZWdvcnk7CisrICAgIH0KKysKKysgIHJldHVybiByZXN1bHQ7CisrfQorKyNlbmRpZgorKworKyNpZm5kZWYgSU5UVkFSREVGCisrIyBkZWZpbmUgSU5UVkFSREVGKG5hbWUpCisrI2VuZGlmCisrI2lmbmRlZiBJTlRVU0UKKysjIGRlZmluZSBJTlRVU0UobmFtZSkgbmFtZQorKyNlbmRpZgorKworKy8qIE5hbWUgb2YgdGhlIGRlZmF1bHQgZG9tYWluIHVzZWQgZm9yIGdldHRleHQoMykgcHJpb3IgYW55IGNhbGwgdG8KKysgICB0ZXh0ZG9tYWluKDMpLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgaXMgIm1lc3NhZ2VzIi4gICovCisrY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbltdIGF0dHJpYnV0ZV9oaWRkZW4gPSAibWVzc2FnZXMiOworKworKy8qIFZhbHVlIHVzZWQgYXMgdGhlIGRlZmF1bHQgZG9tYWluIGZvciBnZXR0ZXh0KDMpLiAgKi8KKytjb25zdCBjaGFyICpfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiBhdHRyaWJ1dGVfaGlkZGVuCisrICAgICA9IF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluOworKworKy8qIENvbnRhaW5zIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBtZXNzYWdlIGNhdGFsb2dzLiAgKi8KKysjaWYgZGVmaW5lZCBfX0VNWF9fCisrZXh0ZXJuIGNvbnN0IGNoYXIgX25sX2RlZmF1bHRfZGlybmFtZVtdOworKyNlbHNlCisrY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kaXJuYW1lW10gPSBMT0NBTEVESVI7CisrSU5UVkFSREVGIChfbmxfZGVmYXVsdF9kaXJuYW1lKQorKyNlbmRpZgorKworKy8qIExpc3Qgd2l0aCBiaW5kaW5ncyBvZiBzcGVjaWZpYyBkb21haW5zIGNyZWF0ZWQgYnkgYmluZHRleHRkb21haW4oKQorKyAgIGNhbGxzLiAgKi8KKytzdHJ1Y3QgYmluZGluZyAqX25sX2RvbWFpbl9iaW5kaW5nczsKKysKKysvKiBQcm90b3R5cGVzIGZvciBsb2NhbCBmdW5jdGlvbnMuICAqLworK3N0YXRpYyBjaGFyICpwbHVyYWxfbG9va3VwIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW4sCisrCQkJICAgIHVuc2lnbmVkIGxvbmcgaW50IG4sCisrCQkJICAgIGNvbnN0IGNoYXIgKnRyYW5zbGF0aW9uLCBzaXplX3QgdHJhbnNsYXRpb25fbGVuKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247Cisrc3RhdGljIGNvbnN0IGNoYXIgKmd1ZXNzX2NhdGVnb3J5X3ZhbHVlIChpbnQgY2F0ZWdvcnksCisrCQkJCQkgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlICIuLi9sb2NhbGUvbG9jYWxlaW5mby5oIgorKyMgZGVmaW5lIGNhdGVnb3J5X3RvX25hbWUoY2F0ZWdvcnkpCV9ubF9jYXRlZ29yeV9uYW1lc1tjYXRlZ29yeV0KKysjZWxzZQorK3N0YXRpYyBjb25zdCBjaGFyICpjYXRlZ29yeV90b19uYW1lIChpbnQgY2F0ZWdvcnkpIGludGVybmFsX2Z1bmN0aW9uOworKyNlbmRpZgorKworKworKy8qIEZvciB0aG9zZSBsb29zaW5nIHN5c3RlbXMgd2hpY2ggZG9uJ3QgaGF2ZSBgYWxsb2NhJyB3ZSBoYXZlIHRvIGFkZAorKyAgIHNvbWUgYWRkaXRpb25hbCBjb2RlIGVtdWxhdGluZyBpdC4gICovCisrI2lmZGVmIEhBVkVfQUxMT0NBCisrLyogTm90aGluZyBoYXMgdG8gYmUgZG9uZS4gICovCisrIyBkZWZpbmUgZnJlZWEocCkgLyogbm90aGluZyAqLworKyMgZGVmaW5lIEFERF9CTE9DSyhsaXN0LCBhZGRyZXNzKSAvKiBub3RoaW5nICovCisrIyBkZWZpbmUgRlJFRV9CTE9DS1MobGlzdCkgLyogbm90aGluZyAqLworKyNlbHNlCisrc3RydWN0IGJsb2NrX2xpc3QKKyt7CisrICB2b2lkICphZGRyZXNzOworKyAgc3RydWN0IGJsb2NrX2xpc3QgKm5leHQ7CisrfTsKKysjIGRlZmluZSBBRERfQkxPQ0sobGlzdCwgYWRkcikJCQkJCQkgICAgICBcCisrICBkbyB7CQkJCQkJCQkJICAgICAgXAorKyAgICBzdHJ1Y3QgYmxvY2tfbGlzdCAqbmV3cCA9IChzdHJ1Y3QgYmxvY2tfbGlzdCAqKSBtYWxsb2MgKHNpemVvZiAoKm5ld3ApKTsgIFwKKysgICAgLyogSWYgd2UgY2Fubm90IGdldCBhIGZyZWUgYmxvY2sgd2UgY2Fubm90IGFkZCB0aGUgbmV3IGVsZW1lbnQgdG8JICAgICAgXAorKyAgICAgICB0aGUgbGlzdC4gICovCQkJCQkJCSAgICAgIFwKKysgICAgaWYgKG5ld3AgIT0gTlVMTCkgewkJCQkJCQkgICAgICBcCisrICAgICAgbmV3cC0+YWRkcmVzcyA9IChhZGRyKTsJCQkJCQkgICAgICBcCisrICAgICAgbmV3cC0+bmV4dCA9IChsaXN0KTsJCQkJCQkgICAgICBcCisrICAgICAgKGxpc3QpID0gbmV3cDsJCQkJCQkJICAgICAgXAorKyAgICB9CQkJCQkJCQkJICAgICAgXAorKyAgfSB3aGlsZSAoMCkKKysjIGRlZmluZSBGUkVFX0JMT0NLUyhsaXN0KQkJCQkJCSAgICAgIFwKKysgIGRvIHsJCQkJCQkJCQkgICAgICBcCisrICAgIHdoaWxlIChsaXN0ICE9IE5VTEwpIHsJCQkJCQkgICAgICBcCisrICAgICAgc3RydWN0IGJsb2NrX2xpc3QgKm9sZCA9IGxpc3Q7CQkJCQkgICAgICBcCisrICAgICAgbGlzdCA9IGxpc3QtPm5leHQ7CQkJCQkJICAgICAgXAorKyAgICAgIGZyZWUgKG9sZC0+YWRkcmVzcyk7CQkJCQkJICAgICAgXAorKyAgICAgIGZyZWUgKG9sZCk7CQkJCQkJCSAgICAgIFwKKysgICAgfQkJCQkJCQkJCSAgICAgIFwKKysgIH0gd2hpbGUgKDApCisrIyB1bmRlZiBhbGxvY2EKKysjIGRlZmluZSBhbGxvY2Eoc2l6ZSkgKG1hbGxvYyAoc2l6ZSkpCisrIyBkZWZpbmUgZnJlZWEocCkgZnJlZSAocCkKKysjZW5kaWYJLyogaGF2ZSBhbGxvY2EgKi8KKysKKysKKysjaWZkZWYgX0xJQkMKKysvKiBMaXN0IG9mIGJsb2NrcyBhbGxvY2F0ZWQgZm9yIHRyYW5zbGF0aW9ucy4gICovCisrdHlwZWRlZiBzdHJ1Y3QgdHJhbnNtZW1fbGlzdAorK3sKKysgIHN0cnVjdCB0cmFuc21lbV9saXN0ICpuZXh0OworKyAgY2hhciBkYXRhW1pFUk9dOworK30gdHJhbnNtZW1fYmxvY2tfdDsKKytzdGF0aWMgc3RydWN0IHRyYW5zbWVtX2xpc3QgKnRyYW5zbWVtX2xpc3Q7CisrI2Vsc2UKKyt0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHJhbnNtZW1fYmxvY2tfdDsKKysjZW5kaWYKKysKKysKKysvKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCisrICAgd2l0aCBleGlzdGluZyBuYW1lcyBhbmQgdGhleSBzaG91bGQgZm9sbG93IEFOU0kgQy4gIEJ1dCB0aGlzIHNvdXJjZQorKyAgIGNvZGUgaXMgYWxzbyB1c2VkIGluIEdOVSBDIExpYnJhcnkgd2hlcmUgdGhlIG5hbWVzIGhhdmUgYSBfXworKyAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCisrI2lmZGVmIF9MSUJDCisrIyBkZWZpbmUgRENJR0VUVEVYVCBfX2RjaWdldHRleHQKKysjZWxzZQorKyMgZGVmaW5lIERDSUdFVFRFWFQgbGliaW50bF9kY2lnZXR0ZXh0CisrI2VuZGlmCisrCisrLyogTG9jayB2YXJpYWJsZSB0byBwcm90ZWN0IHRoZSBnbG9iYWwgZGF0YSBpbiB0aGUgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbi4gICovCisrI2lmZGVmIF9MSUJDCisrX19saWJjX3J3bG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQgKCwgX25sX3N0YXRlX2xvY2sgYXR0cmlidXRlX2hpZGRlbikKKysjZW5kaWYKKysKKysvKiBDaGVja2luZyB3aGV0aGVyIHRoZSBiaW5hcmllcyBydW5zIFNVSUQgbXVzdCBiZSBkb25lIGFuZCBnbGliYyBwcm92aWRlcworKyAgIGVhc2llciBtZXRob2RzIHRoZXJlZm9yZSB3ZSBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKysjaWZkZWYgX0xJQkMKKysjIGRlZmluZSBFTkFCTEVfU0VDVVJFIF9fbGliY19lbmFibGVfc2VjdXJlCisrIyBkZWZpbmUgREVURVJNSU5FX1NFQ1VSRQorKyNlbHNlCisrIyBpZm5kZWYgSEFWRV9HRVRVSUQKKysjICBkZWZpbmUgZ2V0dWlkKCkgMAorKyMgZW5kaWYKKysjIGlmbmRlZiBIQVZFX0dFVEdJRAorKyMgIGRlZmluZSBnZXRnaWQoKSAwCisrIyBlbmRpZgorKyMgaWZuZGVmIEhBVkVfR0VURVVJRAorKyMgIGRlZmluZSBnZXRldWlkKCkgZ2V0dWlkKCkKKysjIGVuZGlmCisrIyBpZm5kZWYgSEFWRV9HRVRFR0lECisrIyAgZGVmaW5lIGdldGVnaWQoKSBnZXRnaWQoKQorKyMgZW5kaWYKKytzdGF0aWMgaW50IGVuYWJsZV9zZWN1cmU7CisrIyBkZWZpbmUgRU5BQkxFX1NFQ1VSRSAoZW5hYmxlX3NlY3VyZSA9PSAxKQorKyMgZGVmaW5lIERFVEVSTUlORV9TRUNVUkUgXAorKyAgaWYgKGVuYWJsZV9zZWN1cmUgPT0gMCkJCQkJCQkgICAgICBcCisrICAgIHsJCQkJCQkJCQkgICAgICBcCisrICAgICAgaWYgKGdldHVpZCAoKSAhPSBnZXRldWlkICgpIHx8IGdldGdpZCAoKSAhPSBnZXRlZ2lkICgpKQkJICAgICAgXAorKwllbmFibGVfc2VjdXJlID0gMTsJCQkJCQkgICAgICBcCisrICAgICAgZWxzZQkJCQkJCQkJICAgICAgXAorKwllbmFibGVfc2VjdXJlID0gLTE7CQkJCQkJICAgICAgXAorKyAgICB9CisrI2VuZGlmCisrCisrLyogR2V0IHRoZSBmdW5jdGlvbiB0byBldmFsdWF0ZSB0aGUgcGx1cmFsIGV4cHJlc3Npb24uICAqLworKyNpbmNsdWRlICJldmFsLXBsdXJhbC5oIgorKworKy8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudAorKyAgIENBVEVHT1JZIGxvY2FsZSBhbmQsIGlmIFBMVVJBTCBpcyBub256ZXJvLCBzZWFyY2ggb3ZlciBzdHJpbmcKKysgICBkZXBlbmRpbmcgb24gdGhlIHBsdXJhbCBmb3JtIGRldGVybWluZWQgYnkgTi4gICovCisrY2hhciAqCisrRENJR0VUVEVYVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsCisrCSAgICBpbnQgcGx1cmFsLCB1bnNpZ25lZCBsb25nIGludCBuLCBpbnQgY2F0ZWdvcnkpCisreworKyNpZm5kZWYgSEFWRV9BTExPQ0EKKysgIHN0cnVjdCBibG9ja19saXN0ICpibG9ja19saXN0ID0gTlVMTDsKKysjZW5kaWYKKysgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbjsKKysgIHN0cnVjdCBiaW5kaW5nICpiaW5kaW5nOworKyAgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lOworKyAgY29uc3QgY2hhciAqY2F0ZWdvcnl2YWx1ZTsKKysgIGNoYXIgKmRpcm5hbWUsICp4ZG9tYWlubmFtZTsKKysgIGNoYXIgKnNpbmdsZV9sb2NhbGU7CisrICBjaGFyICpyZXR2YWw7CisrICBzaXplX3QgcmV0bGVuOworKyAgaW50IHNhdmVkX2Vycm5vOworKyNpZiBkZWZpbmVkIEhBVkVfVFNFQVJDSCB8fCBkZWZpbmVkIF9MSUJDCisrICBzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqc2VhcmNoOworKyAgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKipmb3VuZHAgPSBOVUxMOworKyAgc2l6ZV90IG1zZ2lkX2xlbjsKKysjZW5kaWYKKysgIHNpemVfdCBkb21haW5uYW1lX2xlbjsKKysKKysgIC8qIElmIG5vIHJlYWwgTVNHSUQgaXMgZ2l2ZW4gcmV0dXJuIE5VTEwuICAqLworKyAgaWYgKG1zZ2lkMSA9PSBOVUxMKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysjaWZkZWYgX0xJQkMKKysgIGlmIChjYXRlZ29yeSA8IDAgfHwgY2F0ZWdvcnkgPj0gX19MQ19MQVNUIHx8IGNhdGVnb3J5ID09IExDX0FMTCkKKysgICAgLyogQm9ndXMuICAqLworKyAgICByZXR1cm4gKHBsdXJhbCA9PSAwCisrCSAgICA/IChjaGFyICopIG1zZ2lkMQorKwkgICAgLyogVXNlIHRoZSBHZXJtYW5pYyBwbHVyYWwgcnVsZS4gICovCisrCSAgICA6IG4gPT0gMSA/IChjaGFyICopIG1zZ2lkMSA6IChjaGFyICopIG1zZ2lkMik7CisrI2VuZGlmCisrCisrICBfX2xpYmNfcndsb2NrX3JkbG9jayAoX25sX3N0YXRlX2xvY2spOworKworKyAgLyogSWYgRE9NQUlOTkFNRSBpcyBOVUxMLCB3ZSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgZGVmYXVsdCBkb21haW4uICBJZgorKyAgICAgQ0FURUdPUlkgaXMgbm90IExDX01FU1NBR0VTIHRoaXMgbWlnaHQgbm90IG1ha2UgbXVjaCBzZW5zZSBidXQgdGhlCisrICAgICBkZWZpbml0aW9uIGxlZnQgdGhpcyB1bmRlZmluZWQuICAqLworKyAgaWYgKGRvbWFpbm5hbWUgPT0gTlVMTCkKKysgICAgZG9tYWlubmFtZSA9IF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworKworKyAgLyogT1MvMiBzcGVjaWZpYzogYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIGxpYmludGwgdmVyc2lvbnMgICovCisrI2lmZGVmIExDX01FU1NBR0VTX0NPTVBBVAorKyAgaWYgKGNhdGVnb3J5ID09IExDX01FU1NBR0VTX0NPTVBBVCkKKysgICAgY2F0ZWdvcnkgPSBMQ19NRVNTQUdFUzsKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBIQVZFX1RTRUFSQ0ggfHwgZGVmaW5lZCBfTElCQworKyAgbXNnaWRfbGVuID0gc3RybGVuIChtc2dpZDEpICsgMTsKKysKKysgIC8qIFRyeSB0byBmaW5kIHRoZSB0cmFuc2xhdGlvbiBhbW9uZyB0aG9zZSB3aGljaCB3ZSBmb3VuZCBhdAorKyAgICAgc29tZSB0aW1lLiAgKi8KKysgIHNlYXJjaCA9IChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqKQorKwkgICBhbGxvY2EgKG9mZnNldG9mIChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCwgbXNnaWQpICsgbXNnaWRfbGVuKTsKKysgIG1lbWNweSAoc2VhcmNoLT5tc2dpZCwgbXNnaWQxLCBtc2dpZF9sZW4pOworKyAgc2VhcmNoLT5kb21haW5uYW1lID0gKGNoYXIgKikgZG9tYWlubmFtZTsKKysgIHNlYXJjaC0+Y2F0ZWdvcnkgPSBjYXRlZ29yeTsKKysKKysgIGZvdW5kcCA9IChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqKikgdGZpbmQgKHNlYXJjaCwgJnJvb3QsIHRyYW5zY21wKTsKKysgIGZyZWVhIChzZWFyY2gpOworKyAgaWYgKGZvdW5kcCAhPSBOVUxMICYmICgqZm91bmRwKS0+Y291bnRlciA9PSBfbmxfbXNnX2NhdF9jbnRyKQorKyAgICB7CisrICAgICAgLyogTm93IGRlYWwgd2l0aCBwbHVyYWwuICAqLworKyAgICAgIGlmIChwbHVyYWwpCisrCXJldHZhbCA9IHBsdXJhbF9sb29rdXAgKCgqZm91bmRwKS0+ZG9tYWluLCBuLCAoKmZvdW5kcCktPnRyYW5zbGF0aW9uLAorKwkJCQkoKmZvdW5kcCktPnRyYW5zbGF0aW9uX2xlbmd0aCk7CisrICAgICAgZWxzZQorKwlyZXR2YWwgPSAoY2hhciAqKSAoKmZvdW5kcCktPnRyYW5zbGF0aW9uOworKworKyAgICAgIF9fbGliY19yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CisrICAgICAgcmV0dXJuIHJldHZhbDsKKysgICAgfQorKyNlbmRpZgorKworKyAgLyogUHJlc2VydmUgdGhlIGBlcnJubycgdmFsdWUuICAqLworKyAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKysKKysgIC8qIFNlZSB3aGV0aGVyIHRoaXMgaXMgYSBTVUlEIGJpbmFyeSBvciBub3QuICAqLworKyAgREVURVJNSU5FX1NFQ1VSRTsKKysKKysgIC8qIEZpcnN0IGZpbmQgbWF0Y2hpbmcgYmluZGluZy4gICovCisrICBmb3IgKGJpbmRpbmcgPSBfbmxfZG9tYWluX2JpbmRpbmdzOyBiaW5kaW5nICE9IE5VTEw7IGJpbmRpbmcgPSBiaW5kaW5nLT5uZXh0KQorKyAgICB7CisrICAgICAgaW50IGNvbXBhcmUgPSBzdHJjbXAgKGRvbWFpbm5hbWUsIGJpbmRpbmctPmRvbWFpbm5hbWUpOworKyAgICAgIGlmIChjb21wYXJlID09IDApCisrCS8qIFdlIGZvdW5kIGl0ISAgKi8KKysJYnJlYWs7CisrICAgICAgaWYgKGNvbXBhcmUgPCAwKQorKwl7CisrCSAgLyogSXQgaXMgbm90IGluIHRoZSBsaXN0LiAgKi8KKysJICBiaW5kaW5nID0gTlVMTDsKKysJICBicmVhazsKKysJfQorKyAgICB9CisrCisrICBpZiAoYmluZGluZyA9PSBOVUxMKQorKyAgICBkaXJuYW1lID0gKGNoYXIgKikgSU5UVVNFKF9ubF9kZWZhdWx0X2Rpcm5hbWUpOworKyAgZWxzZSBpZiAoSVNfQUJTT0xVVEVfUEFUSCAoYmluZGluZy0+ZGlybmFtZSkpCisrICAgIGRpcm5hbWUgPSBiaW5kaW5nLT5kaXJuYW1lOworKyAgZWxzZQorKyAgICB7CisrICAgICAgLyogV2UgaGF2ZSBhIHJlbGF0aXZlIHBhdGguICBNYWtlIGl0IGFic29sdXRlIG5vdy4gICovCisrICAgICAgc2l6ZV90IGRpcm5hbWVfbGVuID0gc3RybGVuIChiaW5kaW5nLT5kaXJuYW1lKSArIDE7CisrICAgICAgc2l6ZV90IHBhdGhfbWF4OworKyAgICAgIGNoYXIgKnJldDsKKysKKysgICAgICBwYXRoX21heCA9ICh1bnNpZ25lZCBpbnQpIFBBVEhfTUFYOworKyAgICAgIHBhdGhfbWF4ICs9IDI7CQkvKiBUaGUgZ2V0Y3dkIGRvY3Mgc2F5IHRvIGRvIHRoaXMuICAqLworKworKyAgICAgIGZvciAoOzspCisrCXsKKysJICBkaXJuYW1lID0gKGNoYXIgKikgYWxsb2NhIChwYXRoX21heCArIGRpcm5hbWVfbGVuKTsKKysJICBBRERfQkxPQ0sgKGJsb2NrX2xpc3QsIGRpcm5hbWUpOworKworKwkgIF9fc2V0X2Vycm5vICgwKTsKKysJICByZXQgPSBnZXRjd2QgKGRpcm5hbWUsIHBhdGhfbWF4KTsKKysJICBpZiAocmV0ICE9IE5VTEwgfHwgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgYnJlYWs7CisrCisrCSAgcGF0aF9tYXggKz0gcGF0aF9tYXggLyAyOworKwkgIHBhdGhfbWF4ICs9IFBBVEhfSU5DUjsKKysJfQorKworKyAgICAgIGlmIChyZXQgPT0gTlVMTCkKKysJLyogV2UgY2Fubm90IGdldCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gIERvbid0IHNpZ25hbCBhbgorKwkgICBlcnJvciBidXQgc2ltcGx5IHJldHVybiB0aGUgZGVmYXVsdCBzdHJpbmcuICAqLworKwlnb3RvIHJldHVybl91bnRyYW5zbGF0ZWQ7CisrCisrICAgICAgc3RwY3B5IChzdHBjcHkgKHN0cmNociAoZGlybmFtZSwgJ1wwJyksICIvIiksIGJpbmRpbmctPmRpcm5hbWUpOworKyAgICB9CisrCisrICAvKiBOb3cgZGV0ZXJtaW5lIHRoZSBzeW1ib2xpYyBuYW1lIG9mIENBVEVHT1JZIGFuZCBpdHMgdmFsdWUuICAqLworKyAgY2F0ZWdvcnluYW1lID0gY2F0ZWdvcnlfdG9fbmFtZSAoY2F0ZWdvcnkpOworKyAgY2F0ZWdvcnl2YWx1ZSA9IGd1ZXNzX2NhdGVnb3J5X3ZhbHVlIChjYXRlZ29yeSwgY2F0ZWdvcnluYW1lKTsKKysKKysgIGRvbWFpbm5hbWVfbGVuID0gc3RybGVuIChkb21haW5uYW1lKTsKKysgIHhkb21haW5uYW1lID0gKGNoYXIgKikgYWxsb2NhIChzdHJsZW4gKGNhdGVnb3J5bmFtZSkKKysJCQkJICsgZG9tYWlubmFtZV9sZW4gKyA1KTsKKysgIEFERF9CTE9DSyAoYmxvY2tfbGlzdCwgeGRvbWFpbm5hbWUpOworKworKyAgc3RwY3B5IChtZW1wY3B5IChzdHBjcHkgKHN0cGNweSAoeGRvbWFpbm5hbWUsIGNhdGVnb3J5bmFtZSksICIvIiksCisrCQkgIGRvbWFpbm5hbWUsIGRvbWFpbm5hbWVfbGVuKSwKKysJICAiLm1vIik7CisrCisrICAvKiBDcmVhdGluZyB3b3JraW5nIGFyZWEuICAqLworKyAgc2luZ2xlX2xvY2FsZSA9IChjaGFyICopIGFsbG9jYSAoc3RybGVuIChjYXRlZ29yeXZhbHVlKSArIDEpOworKyAgQUREX0JMT0NLIChibG9ja19saXN0LCBzaW5nbGVfbG9jYWxlKTsKKysKKysKKysgIC8qIFNlYXJjaCBmb3IgdGhlIGdpdmVuIHN0cmluZy4gIFRoaXMgaXMgYSBsb29wIGJlY2F1c2Ugd2UgcGVyaGFwcworKyAgICAgZ290IGFuIG9yZGVyZWQgbGlzdCBvZiBsYW5ndWFnZXMgdG8gY29uc2lkZXIgZm9yIHRoZSB0cmFuc2xhdGlvbi4gICovCisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIC8qIE1ha2UgQ0FURUdPUllWQUxVRSBwb2ludCB0byB0aGUgbmV4dCBlbGVtZW50IG9mIHRoZSBsaXN0LiAgKi8KKysgICAgICB3aGlsZSAoY2F0ZWdvcnl2YWx1ZVswXSAhPSAnXDAnICYmIGNhdGVnb3J5dmFsdWVbMF0gPT0gJzonKQorKwkrK2NhdGVnb3J5dmFsdWU7CisrICAgICAgaWYgKGNhdGVnb3J5dmFsdWVbMF0gPT0gJ1wwJykKKysJeworKwkgIC8qIFRoZSB3aG9sZSBjb250ZW50cyBvZiBDQVRFR09SWVZBTFVFIGhhcyBiZWVuIHNlYXJjaGVkIGJ1dAorKwkgICAgIG5vIHZhbGlkIGVudHJ5IGhhcyBiZWVuIGZvdW5kLiAgV2Ugc29sdmUgdGhpcyBzaXR1YXRpb24KKysJICAgICBieSBpbXBsaWNpdGx5IGFwcGVuZGluZyBhICJDIiBlbnRyeSwgaS5lLiBubyB0cmFuc2xhdGlvbgorKwkgICAgIHdpbGwgdGFrZSBwbGFjZS4gICovCisrCSAgc2luZ2xlX2xvY2FsZVswXSA9ICdDJzsKKysJICBzaW5nbGVfbG9jYWxlWzFdID0gJ1wwJzsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGNoYXIgKmNwID0gc2luZ2xlX2xvY2FsZTsKKysJICB3aGlsZSAoY2F0ZWdvcnl2YWx1ZVswXSAhPSAnXDAnICYmIGNhdGVnb3J5dmFsdWVbMF0gIT0gJzonKQorKwkgICAgKmNwKysgPSAqY2F0ZWdvcnl2YWx1ZSsrOworKwkgICpjcCA9ICdcMCc7CisrCisrCSAgLyogV2hlbiB0aGlzIGlzIGEgU1VJRCBiaW5hcnkgd2UgbXVzdCBub3QgYWxsb3cgYWNjZXNzaW5nIGZpbGVzCisrCSAgICAgb3V0c2lkZSB0aGUgZGVkaWNhdGVkIGRpcmVjdG9yaWVzLiAgKi8KKysJICBpZiAoRU5BQkxFX1NFQ1VSRSAmJiBJU19QQVRIX1dJVEhfRElSIChzaW5nbGVfbG9jYWxlKSkKKysJICAgIC8qIEluZ29yZSB0aGlzIGVudHJ5LiAgKi8KKysJICAgIGNvbnRpbnVlOworKwl9CisrCisrICAgICAgLyogSWYgdGhlIGN1cnJlbnQgbG9jYWxlIHZhbHVlIGlzIEMgKG9yIFBPU0lYKSB3ZSBkb24ndCBsb2FkIGEKKysJIGRvbWFpbi4gIFJldHVybiB0aGUgTVNHSUQuICAqLworKyAgICAgIGlmIChzdHJjbXAgKHNpbmdsZV9sb2NhbGUsICJDIikgPT0gMAorKwkgIHx8IHN0cmNtcCAoc2luZ2xlX2xvY2FsZSwgIlBPU0lYIikgPT0gMCkKKysJYnJlYWs7CisrCisrICAgICAgLyogRmluZCBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBjYXRhbG9nIG1hdGNoaW5nIHRoZQorKwkgRE9NQUlOTkFNRSBhbmQgQ0FURUdPUlkuICAqLworKyAgICAgIGRvbWFpbiA9IF9ubF9maW5kX2RvbWFpbiAoZGlybmFtZSwgc2luZ2xlX2xvY2FsZSwgeGRvbWFpbm5hbWUsIGJpbmRpbmcpOworKworKyAgICAgIGlmIChkb21haW4gIT0gTlVMTCkKKysJeworKwkgIHJldHZhbCA9IF9ubF9maW5kX21zZyAoZG9tYWluLCBiaW5kaW5nLCBtc2dpZDEsICZyZXRsZW4pOworKworKwkgIGlmIChyZXR2YWwgPT0gTlVMTCkKKysJICAgIHsKKysJICAgICAgaW50IGNudDsKKysKKysJICAgICAgZm9yIChjbnQgPSAwOyBkb21haW4tPnN1Y2Nlc3NvcltjbnRdICE9IE5VTEw7ICsrY250KQorKwkJeworKwkJICByZXR2YWwgPSBfbmxfZmluZF9tc2cgKGRvbWFpbi0+c3VjY2Vzc29yW2NudF0sIGJpbmRpbmcsCisrCQkJCQkgbXNnaWQxLCAmcmV0bGVuKTsKKysKKysJCSAgaWYgKHJldHZhbCAhPSBOVUxMKQorKwkJICAgIHsKKysJCSAgICAgIGRvbWFpbiA9IGRvbWFpbi0+c3VjY2Vzc29yW2NudF07CisrCQkgICAgICBicmVhazsKKysJCSAgICB9CisrCQl9CisrCSAgICB9CisrCisrCSAgaWYgKHJldHZhbCAhPSBOVUxMKQorKwkgICAgeworKwkgICAgICAvKiBGb3VuZCB0aGUgdHJhbnNsYXRpb24gb2YgTVNHSUQxIGluIGRvbWFpbiBET01BSU46CisrCQkgc3RhcnRpbmcgYXQgUkVUVkFMLCBSRVRMRU4gYnl0ZXMuICAqLworKwkgICAgICBGUkVFX0JMT0NLUyAoYmxvY2tfbGlzdCk7CisrI2lmIGRlZmluZWQgSEFWRV9UU0VBUkNIIHx8IGRlZmluZWQgX0xJQkMKKysJICAgICAgaWYgKGZvdW5kcCA9PSBOVUxMKQorKwkJeworKwkJICAvKiBDcmVhdGUgYSBuZXcgZW50cnkgYW5kIGFkZCBpdCB0byB0aGUgc2VhcmNoIHRyZWUuICAqLworKwkJICBzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqbmV3cDsKKysKKysJCSAgbmV3cCA9IChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqKQorKwkJICAgIG1hbGxvYyAob2Zmc2V0b2YgKHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90LCBtc2dpZCkKKysJCQkgICAgKyBtc2dpZF9sZW4gKyBkb21haW5uYW1lX2xlbiArIDEpOworKwkJICBpZiAobmV3cCAhPSBOVUxMKQorKwkJICAgIHsKKysJCSAgICAgIG5ld3AtPmRvbWFpbm5hbWUgPQorKwkJCW1lbXBjcHkgKG5ld3AtPm1zZ2lkLCBtc2dpZDEsIG1zZ2lkX2xlbik7CisrCQkgICAgICBtZW1jcHkgKG5ld3AtPmRvbWFpbm5hbWUsIGRvbWFpbm5hbWUsIGRvbWFpbm5hbWVfbGVuICsgMSk7CisrCQkgICAgICBuZXdwLT5jYXRlZ29yeSA9IGNhdGVnb3J5OworKwkJICAgICAgbmV3cC0+Y291bnRlciA9IF9ubF9tc2dfY2F0X2NudHI7CisrCQkgICAgICBuZXdwLT5kb21haW4gPSBkb21haW47CisrCQkgICAgICBuZXdwLT50cmFuc2xhdGlvbiA9IHJldHZhbDsKKysJCSAgICAgIG5ld3AtPnRyYW5zbGF0aW9uX2xlbmd0aCA9IHJldGxlbjsKKysKKysJCSAgICAgIC8qIEluc2VydCB0aGUgZW50cnkgaW4gdGhlIHNlYXJjaCB0cmVlLiAgKi8KKysJCSAgICAgIGZvdW5kcCA9IChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqKikKKysJCQl0c2VhcmNoIChuZXdwLCAmcm9vdCwgdHJhbnNjbXApOworKwkJICAgICAgaWYgKGZvdW5kcCA9PSBOVUxMCisrCQkJICB8fCBfX2J1aWx0aW5fZXhwZWN0ICgqZm91bmRwICE9IG5ld3AsIDApKQorKwkJCS8qIFRoZSBpbnNlcnQgZmFpbGVkLiAgKi8KKysJCQlmcmVlIChuZXdwKTsKKysJCSAgICB9CisrCQl9CisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgLyogV2UgY2FuIHVwZGF0ZSB0aGUgZXhpc3RpbmcgZW50cnkuICAqLworKwkJICAoKmZvdW5kcCktPmNvdW50ZXIgPSBfbmxfbXNnX2NhdF9jbnRyOworKwkJICAoKmZvdW5kcCktPmRvbWFpbiA9IGRvbWFpbjsKKysJCSAgKCpmb3VuZHApLT50cmFuc2xhdGlvbiA9IHJldHZhbDsKKysJCSAgKCpmb3VuZHApLT50cmFuc2xhdGlvbl9sZW5ndGggPSByZXRsZW47CisrCQl9CisrI2VuZGlmCisrCSAgICAgIF9fc2V0X2Vycm5vIChzYXZlZF9lcnJubyk7CisrCisrCSAgICAgIC8qIE5vdyBkZWFsIHdpdGggcGx1cmFsLiAgKi8KKysJICAgICAgaWYgKHBsdXJhbCkKKysJCXJldHZhbCA9IHBsdXJhbF9sb29rdXAgKGRvbWFpbiwgbiwgcmV0dmFsLCByZXRsZW4pOworKworKwkgICAgICBfX2xpYmNfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworKwkgICAgICByZXR1cm4gcmV0dmFsOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKysgcmV0dXJuX3VudHJhbnNsYXRlZDoKKysgIC8qIFJldHVybiB0aGUgdW50cmFuc2xhdGVkIE1TR0lELiAgKi8KKysgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKysgIF9fbGliY19yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CisrI2lmbmRlZiBfTElCQworKyAgaWYgKCFFTkFCTEVfU0VDVVJFKQorKyAgICB7CisrICAgICAgZXh0ZXJuIHZvaWQgX25sX2xvZ191bnRyYW5zbGF0ZWQgKGNvbnN0IGNoYXIgKmxvZ2ZpbGVuYW1lLAorKwkJCQkJY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCQkJCWNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLAorKwkJCQkJaW50IHBsdXJhbCk7CisrICAgICAgY29uc3QgY2hhciAqbG9nZmlsZW5hbWUgPSBnZXRlbnYgKCJHRVRURVhUX0xPR19VTlRSQU5TTEFURUQiKTsKKysKKysgICAgICBpZiAobG9nZmlsZW5hbWUgIT0gTlVMTCAmJiBsb2dmaWxlbmFtZVswXSAhPSAnXDAnKQorKwlfbmxfbG9nX3VudHJhbnNsYXRlZCAobG9nZmlsZW5hbWUsIGRvbWFpbm5hbWUsIG1zZ2lkMSwgbXNnaWQyLCBwbHVyYWwpOworKyAgICB9CisrI2VuZGlmCisrICBfX3NldF9lcnJubyAoc2F2ZWRfZXJybm8pOworKyAgcmV0dXJuIChwbHVyYWwgPT0gMAorKwkgID8gKGNoYXIgKikgbXNnaWQxCisrCSAgLyogVXNlIHRoZSBHZXJtYW5pYyBwbHVyYWwgcnVsZS4gICovCisrCSAgOiBuID09IDEgPyAoY2hhciAqKSBtc2dpZDEgOiAoY2hhciAqKSBtc2dpZDIpOworK30KKysKKysKKytjaGFyICoKKytpbnRlcm5hbF9mdW5jdGlvbgorK19ubF9maW5kX21zZyAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9tYWluX2ZpbGUsCisrCSAgICAgIHN0cnVjdCBiaW5kaW5nICpkb21haW5iaW5kaW5nLCBjb25zdCBjaGFyICptc2dpZCwKKysJICAgICAgc2l6ZV90ICpsZW5ndGhwKQorK3sKKysgIHN0cnVjdCBsb2FkZWRfZG9tYWluICpkb21haW47CisrICBubHNfdWludDMyIG5zdHJpbmdzOworKyAgc2l6ZV90IGFjdDsKKysgIGNoYXIgKnJlc3VsdDsKKysgIHNpemVfdCByZXN1bHRsZW47CisrCisrICBpZiAoZG9tYWluX2ZpbGUtPmRlY2lkZWQgPT0gMCkKKysgICAgX25sX2xvYWRfZG9tYWluIChkb21haW5fZmlsZSwgZG9tYWluYmluZGluZyk7CisrCisrICBpZiAoZG9tYWluX2ZpbGUtPmRhdGEgPT0gTlVMTCkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICBkb21haW4gPSAoc3RydWN0IGxvYWRlZF9kb21haW4gKikgZG9tYWluX2ZpbGUtPmRhdGE7CisrCisrICBuc3RyaW5ncyA9IGRvbWFpbi0+bnN0cmluZ3M7CisrCisrICAvKiBMb2NhdGUgdGhlIE1TR0lEIGFuZCBpdHMgdHJhbnNsYXRpb24uICAqLworKyAgaWYgKGRvbWFpbi0+aGFzaF90YWIgIT0gTlVMTCkKKysgICAgeworKyAgICAgIC8qIFVzZSB0aGUgaGFzaGluZyB0YWJsZS4gICovCisrICAgICAgbmxzX3VpbnQzMiBsZW4gPSBzdHJsZW4gKG1zZ2lkKTsKKysgICAgICBubHNfdWludDMyIGhhc2hfdmFsID0gaGFzaF9zdHJpbmcgKG1zZ2lkKTsKKysgICAgICBubHNfdWludDMyIGlkeCA9IGhhc2hfdmFsICUgZG9tYWluLT5oYXNoX3NpemU7CisrICAgICAgbmxzX3VpbnQzMiBpbmNyID0gMSArIChoYXNoX3ZhbCAlIChkb21haW4tPmhhc2hfc2l6ZSAtIDIpKTsKKysKKysgICAgICB3aGlsZSAoMSkKKysJeworKwkgIG5sc191aW50MzIgbnN0ciA9CisrCSAgICBXIChkb21haW4tPm11c3Rfc3dhcF9oYXNoX3RhYiwgZG9tYWluLT5oYXNoX3RhYltpZHhdKTsKKysKKysJICBpZiAobnN0ciA9PSAwKQorKwkgICAgLyogSGFzaCB0YWJsZSBlbnRyeSBpcyBlbXB0eS4gICovCisrCSAgICByZXR1cm4gTlVMTDsKKysKKysJICBuc3RyLS07CisrCisrCSAgLyogQ29tcGFyZSBtc2dpZCB3aXRoIHRoZSBvcmlnaW5hbCBzdHJpbmcgYXQgaW5kZXggbnN0ci4KKysJICAgICBXZSBjb21wYXJlIHRoZSBsZW5ndGhzIHdpdGggPj0sIG5vdCA9PSwgYmVjYXVzZSBwbHVyYWwgZW50cmllcworKwkgICAgIGFyZSByZXByZXNlbnRlZCBieSBzdHJpbmdzIHdpdGggYW4gZW1iZWRkZWQgTlVMLiAgKi8KKysJICBpZiAobnN0ciA8IG5zdHJpbmdzCisrCSAgICAgID8gVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRvbWFpbi0+b3JpZ190YWJbbnN0cl0ubGVuZ3RoKSA+PSBsZW4KKysJCSYmIChzdHJjbXAgKG1zZ2lkLAorKwkJCSAgICBkb21haW4tPmRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwKKysJCQkJCSAgICAgIGRvbWFpbi0+b3JpZ190YWJbbnN0cl0ub2Zmc2V0KSkKKysJCSAgICA9PSAwKQorKwkgICAgICA6IGRvbWFpbi0+b3JpZ19zeXNkZXBfdGFiW25zdHIgLSBuc3RyaW5nc10ubGVuZ3RoID4gbGVuCisrCQkmJiAoc3RyY21wIChtc2dpZCwKKysJCQkgICAgZG9tYWluLT5vcmlnX3N5c2RlcF90YWJbbnN0ciAtIG5zdHJpbmdzXS5wb2ludGVyKQorKwkJICAgID09IDApKQorKwkgICAgeworKwkgICAgICBhY3QgPSBuc3RyOworKwkgICAgICBnb3RvIGZvdW5kOworKwkgICAgfQorKworKwkgIGlmIChpZHggPj0gZG9tYWluLT5oYXNoX3NpemUgLSBpbmNyKQorKwkgICAgaWR4IC09IGRvbWFpbi0+aGFzaF9zaXplIC0gaW5jcjsKKysJICBlbHNlCisrCSAgICBpZHggKz0gaW5jcjsKKysJfQorKyAgICAgIC8qIE5PVFJFQUNIRUQgKi8KKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgLyogVHJ5IHRoZSBkZWZhdWx0IG1ldGhvZDogIGJpbmFyeSBzZWFyY2ggaW4gdGhlIHNvcnRlZCBhcnJheSBvZgorKwkgbWVzc2FnZXMuICAqLworKyAgICAgIHNpemVfdCB0b3AsIGJvdHRvbTsKKysKKysgICAgICBib3R0b20gPSAwOworKyAgICAgIHRvcCA9IG5zdHJpbmdzOworKyAgICAgIHdoaWxlIChib3R0b20gPCB0b3ApCisrCXsKKysJICBpbnQgY21wX3ZhbDsKKysKKysJICBhY3QgPSAoYm90dG9tICsgdG9wKSAvIDI7CisrCSAgY21wX3ZhbCA9IHN0cmNtcCAobXNnaWQsIChkb21haW4tPmRhdGEKKysJCQkJICAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsCisrCQkJCQkgZG9tYWluLT5vcmlnX3RhYlthY3RdLm9mZnNldCkpKTsKKysJICBpZiAoY21wX3ZhbCA8IDApCisrCSAgICB0b3AgPSBhY3Q7CisrCSAgZWxzZSBpZiAoY21wX3ZhbCA+IDApCisrCSAgICBib3R0b20gPSBhY3QgKyAxOworKwkgIGVsc2UKKysJICAgIGdvdG8gZm91bmQ7CisrCX0KKysgICAgICAvKiBObyB0cmFuc2xhdGlvbiB3YXMgZm91bmQuICAqLworKyAgICAgIHJldHVybiBOVUxMOworKyAgICB9CisrCisrIGZvdW5kOgorKyAgLyogVGhlIHRyYW5zbGF0aW9uIHdhcyBmb3VuZCBhdCBpbmRleCBBQ1QuICBJZiB3ZSBoYXZlIHRvIGNvbnZlcnQgdGhlCisrICAgICBzdHJpbmcgdG8gdXNlIGEgZGlmZmVyZW50IGNoYXJhY3RlciBzZXQsIHRoaXMgaXMgdGhlIHRpbWUuICAqLworKyAgaWYgKGFjdCA8IG5zdHJpbmdzKQorKyAgICB7CisrICAgICAgcmVzdWx0ID0gKGNoYXIgKikKKysJKGRvbWFpbi0+ZGF0YSArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkb21haW4tPnRyYW5zX3RhYlthY3RdLm9mZnNldCkpOworKyAgICAgIHJlc3VsdGxlbiA9IFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkb21haW4tPnRyYW5zX3RhYlthY3RdLmxlbmd0aCkgKyAxOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICByZXN1bHQgPSAoY2hhciAqKSBkb21haW4tPnRyYW5zX3N5c2RlcF90YWJbYWN0IC0gbnN0cmluZ3NdLnBvaW50ZXI7CisrICAgICAgcmVzdWx0bGVuID0gZG9tYWluLT50cmFuc19zeXNkZXBfdGFiW2FjdCAtIG5zdHJpbmdzXS5sZW5ndGg7CisrICAgIH0KKysKKysjaWYgZGVmaW5lZCBfTElCQyB8fCBIQVZFX0lDT05WCisrICBpZiAoZG9tYWluLT5jb2Rlc2V0X2NudHIKKysgICAgICAhPSAoZG9tYWluYmluZGluZyAhPSBOVUxMID8gZG9tYWluYmluZGluZy0+Y29kZXNldF9jbnRyIDogMCkpCisrICAgIHsKKysgICAgICAvKiBUaGUgZG9tYWluJ3MgY29kZXNldCBoYXMgY2hhbmdlZCB0aHJvdWdoIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KCkKKysJIHNpbmNlIHRoZSBtZXNzYWdlIGNhdGFsb2cgd2FzIGluaXRpYWxpemVkIG9yIGxhc3QgYWNjZXNzZWQuICBXZQorKwkgaGF2ZSB0byByZWluaXRpYWxpemUgdGhlIGNvbnZlcnRlci4gICovCisrICAgICAgX25sX2ZyZWVfZG9tYWluX2NvbnYgKGRvbWFpbik7CisrICAgICAgX25sX2luaXRfZG9tYWluX2NvbnYgKGRvbWFpbl9maWxlLCBkb21haW4sIGRvbWFpbmJpbmRpbmcpOworKyAgICB9CisrCisrICBpZiAoCisrIyBpZmRlZiBfTElCQworKyAgICAgIGRvbWFpbi0+Y29udiAhPSAoX19nY29udl90KSAtMQorKyMgZWxzZQorKyMgIGlmIEhBVkVfSUNPTlYKKysgICAgICBkb21haW4tPmNvbnYgIT0gKGljb252X3QpIC0xCisrIyAgZW5kaWYKKysjIGVuZGlmCisrICAgICAgKQorKyAgICB7CisrICAgICAgLyogV2UgYXJlIHN1cHBvc2VkIHRvIGRvIGEgY29udmVyc2lvbi4gIEZpcnN0IGFsbG9jYXRlIGFuCisrCSBhcHByb3ByaWF0ZSB0YWJsZSB3aXRoIHRoZSBzYW1lIHN0cnVjdHVyZSBhcyB0aGUgdGFibGUKKysJIG9mIHRyYW5zbGF0aW9ucyBpbiB0aGUgZmlsZSwgd2hlcmUgd2UgY2FuIHB1dCB0aGUgcG9pbnRlcnMKKysJIHRvIHRoZSBjb252ZXJ0ZWQgc3RyaW5ncyBpbi4KKysJIFRoZXJlIGlzIGEgc2xpZ2h0IGNvbXBsaWNhdGlvbiB3aXRoIHBsdXJhbCBlbnRyaWVzLiAgVGhleQorKwkgYXJlIHJlcHJlc2VudGVkIGJ5IGNvbnNlY3V0aXZlIE5VTCB0ZXJtaW5hdGVkIHN0cmluZ3MuICBXZQorKwkgaGFuZGxlIHRoaXMgY2FzZSBieSBjb252ZXJ0aW5nIFJFU1VMVExFTiBieXRlcywgaW5jbHVkaW5nCisrCSBOVUxzLiAgKi8KKysKKysgICAgICBpZiAoZG9tYWluLT5jb252X3RhYiA9PSBOVUxMCisrCSAgJiYgKChkb21haW4tPmNvbnZfdGFiID0KKysJCSAoY2hhciAqKikgY2FsbG9jIChuc3RyaW5ncyArIGRvbWFpbi0+bl9zeXNkZXBfc3RyaW5ncywKKysJCQkJICAgc2l6ZW9mIChjaGFyICopKSkKKysJICAgICAgPT0gTlVMTCkpCisrCS8qIE1hcmsgdGhhdCB3ZSBkaWRuJ3Qgc3VjY2VlZCBhbGxvY2F0aW5nIGEgdGFibGUuICAqLworKwlkb21haW4tPmNvbnZfdGFiID0gKGNoYXIgKiopIC0xOworKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChkb21haW4tPmNvbnZfdGFiID09IChjaGFyICoqKSAtMSwgMCkpCisrCS8qIE5vdGhpbmcgd2UgY2FuIGRvLCBubyBtb3JlIG1lbW9yeS4gICovCisrCWdvdG8gY29udmVydGVkOworKworKyAgICAgIGlmIChkb21haW4tPmNvbnZfdGFiW2FjdF0gPT0gTlVMTCkKKysJeworKwkgIC8qIFdlIGhhdmVuJ3QgdXNlZCB0aGlzIHN0cmluZyBzbyBmYXIsIHNvIGl0IGlzIG5vdAorKwkgICAgIHRyYW5zbGF0ZWQgeWV0LiAgRG8gdGhpcyBub3cuICAqLworKwkgIC8qIFdlIHVzZSBhIGJpdCBtb3JlIGVmZmljaWVudCBtZW1vcnkgaGFuZGxpbmcuCisrCSAgICAgV2UgYWxsb2NhdGUgYWx3YXlzIGxhcmdlciBibG9ja3Mgd2hpY2ggZ2V0IHVzZWQgb3ZlcgorKwkgICAgIHRpbWUuICBUaGlzIGlzIGZhc3RlciB0aGFuIG1hbnkgc21hbGwgYWxsb2NhdGlvbnMuICAgKi8KKysJICBfX2xpYmNfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQgKHN0YXRpYywgbG9jaykKKysjIGRlZmluZSBJTklUSUFMX0JMT0NLX1NJWkUJNDA4MAorKwkgIHN0YXRpYyB1bnNpZ25lZCBjaGFyICpmcmVlbWVtOworKwkgIHN0YXRpYyBzaXplX3QgZnJlZW1lbV9zaXplOworKworKwkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmOworKwkgIHVuc2lnbmVkIGNoYXIgKm91dGJ1ZjsKKysJICBpbnQgbWFsbG9jX2NvdW50OworKyMgaWZuZGVmIF9MSUJDCisrCSAgdHJhbnNtZW1fYmxvY2tfdCAqdHJhbnNtZW1fbGlzdCA9IE5VTEw7CisrIyBlbmRpZgorKworKwkgIF9fbGliY19sb2NrX2xvY2sgKGxvY2spOworKworKwkgIGluYnVmID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcmVzdWx0OworKwkgIG91dGJ1ZiA9IGZyZWVtZW0gKyBzaXplb2YgKHNpemVfdCk7CisrCisrCSAgbWFsbG9jX2NvdW50ID0gMDsKKysJICB3aGlsZSAoMSkKKysJICAgIHsKKysJICAgICAgdHJhbnNtZW1fYmxvY2tfdCAqbmV3bWVtOworKyMgaWZkZWYgX0xJQkMKKysJICAgICAgc2l6ZV90IG5vbl9yZXZlcnNpYmxlOworKwkgICAgICBpbnQgcmVzOworKworKwkgICAgICBpZiAoZnJlZW1lbV9zaXplIDwgc2l6ZW9mIChzaXplX3QpKQorKwkJZ290byByZXNpemVfZnJlZW1lbTsKKysKKysJICAgICAgcmVzID0gX19nY29udiAoZG9tYWluLT5jb252LAorKwkJCSAgICAgJmluYnVmLCBpbmJ1ZiArIHJlc3VsdGxlbiwKKysJCQkgICAgICZvdXRidWYsCisrCQkJICAgICBvdXRidWYgKyBmcmVlbWVtX3NpemUgLSBzaXplb2YgKHNpemVfdCksCisrCQkJICAgICAmbm9uX3JldmVyc2libGUpOworKworKwkgICAgICBpZiAocmVzID09IF9fR0NPTlZfT0sgfHwgcmVzID09IF9fR0NPTlZfRU1QVFlfSU5QVVQpCisrCQlicmVhazsKKysKKysJICAgICAgaWYgKHJlcyAhPSBfX0dDT05WX0ZVTExfT1VUUFVUKQorKwkJeworKwkJICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworKwkJICBnb3RvIGNvbnZlcnRlZDsKKysJCX0KKysKKysJICAgICAgaW5idWYgPSByZXN1bHQ7CisrIyBlbHNlCisrIyAgaWYgSEFWRV9JQ09OVgorKwkgICAgICBjb25zdCBjaGFyICppbnB0ciA9IChjb25zdCBjaGFyICopIGluYnVmOworKwkgICAgICBzaXplX3QgaW5sZWZ0ID0gcmVzdWx0bGVuOworKwkgICAgICBjaGFyICpvdXRwdHIgPSAoY2hhciAqKSBvdXRidWY7CisrCSAgICAgIHNpemVfdCBvdXRsZWZ0OworKworKwkgICAgICBpZiAoZnJlZW1lbV9zaXplIDwgc2l6ZW9mIChzaXplX3QpKQorKwkJZ290byByZXNpemVfZnJlZW1lbTsKKysKKysJICAgICAgb3V0bGVmdCA9IGZyZWVtZW1fc2l6ZSAtIHNpemVvZiAoc2l6ZV90KTsKKysJICAgICAgaWYgKGljb252IChkb21haW4tPmNvbnYsCisrCQkJIChJQ09OVl9DT05TVCBjaGFyICoqKSAmaW5wdHIsICZpbmxlZnQsCisrCQkJICZvdXRwdHIsICZvdXRsZWZ0KQorKwkJICAhPSAoc2l6ZV90KSAoLTEpKQorKwkJeworKwkJICBvdXRidWYgPSAodW5zaWduZWQgY2hhciAqKSBvdXRwdHI7CisrCQkgIGJyZWFrOworKwkJfQorKwkgICAgICBpZiAoZXJybm8gIT0gRTJCSUcpCisrCQl7CisrCQkgIF9fbGliY19sb2NrX3VubG9jayAobG9jayk7CisrCQkgIGdvdG8gY29udmVydGVkOworKwkJfQorKyMgIGVuZGlmCisrIyBlbmRpZgorKworKwkgICAgcmVzaXplX2ZyZWVtZW06CisrCSAgICAgIC8qIFdlIG11c3QgYWxsb2NhdGUgYSBuZXcgYnVmZmVyIG9yIHJlc2l6ZSB0aGUgb2xkIG9uZS4gICovCisrCSAgICAgIGlmIChtYWxsb2NfY291bnQgPiAwKQorKwkJeworKwkJICArK21hbGxvY19jb3VudDsKKysJCSAgZnJlZW1lbV9zaXplID0gbWFsbG9jX2NvdW50ICogSU5JVElBTF9CTE9DS19TSVpFOworKwkJICBuZXdtZW0gPSAodHJhbnNtZW1fYmxvY2tfdCAqKSByZWFsbG9jICh0cmFuc21lbV9saXN0LAorKwkJCQkJCQkgZnJlZW1lbV9zaXplKTsKKysjIGlmZGVmIF9MSUJDCisrCQkgIGlmIChuZXdtZW0gIT0gTlVMTCkKKysJCSAgICB0cmFuc21lbV9saXN0ID0gdHJhbnNtZW1fbGlzdC0+bmV4dDsKKysJCSAgZWxzZQorKwkJICAgIHsKKysJCSAgICAgIHN0cnVjdCB0cmFuc21lbV9saXN0ICpvbGQgPSB0cmFuc21lbV9saXN0OworKworKwkJICAgICAgdHJhbnNtZW1fbGlzdCA9IHRyYW5zbWVtX2xpc3QtPm5leHQ7CisrCQkgICAgICBmcmVlIChvbGQpOworKwkJICAgIH0KKysjIGVuZGlmCisrCQl9CisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgbWFsbG9jX2NvdW50ID0gMTsKKysJCSAgZnJlZW1lbV9zaXplID0gSU5JVElBTF9CTE9DS19TSVpFOworKwkJICBuZXdtZW0gPSAodHJhbnNtZW1fYmxvY2tfdCAqKSBtYWxsb2MgKGZyZWVtZW1fc2l6ZSk7CisrCQl9CisrCSAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChuZXdtZW0gPT0gTlVMTCwgMCkpCisrCQl7CisrCQkgIGZyZWVtZW0gPSBOVUxMOworKwkJICBmcmVlbWVtX3NpemUgPSAwOworKwkJICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworKwkJICBnb3RvIGNvbnZlcnRlZDsKKysJCX0KKysKKysjIGlmZGVmIF9MSUJDCisrCSAgICAgIC8qIEFkZCB0aGUgYmxvY2sgdG8gdGhlIGxpc3Qgb2YgYmxvY2tzIHdlIGhhdmUgdG8gZnJlZQorKyAgICAgICAgICAgICAgICAgYXQgc29tZSBwb2ludC4gICovCisrCSAgICAgIG5ld21lbS0+bmV4dCA9IHRyYW5zbWVtX2xpc3Q7CisrCSAgICAgIHRyYW5zbWVtX2xpc3QgPSBuZXdtZW07CisrCisrCSAgICAgIGZyZWVtZW0gPSBuZXdtZW0tPmRhdGE7CisrCSAgICAgIGZyZWVtZW1fc2l6ZSAtPSBvZmZzZXRvZiAoc3RydWN0IHRyYW5zbWVtX2xpc3QsIGRhdGEpOworKyMgZWxzZQorKwkgICAgICB0cmFuc21lbV9saXN0ID0gbmV3bWVtOworKwkgICAgICBmcmVlbWVtID0gbmV3bWVtOworKyMgZW5kaWYKKysKKysJICAgICAgb3V0YnVmID0gZnJlZW1lbSArIHNpemVvZiAoc2l6ZV90KTsKKysJICAgIH0KKysKKysJICAvKiBXZSBoYXZlIG5vdyBpbiBvdXIgYnVmZmVyIGEgY29udmVydGVkIHN0cmluZy4gIFB1dCB0aGlzCisrCSAgICAgaW50byB0aGUgdGFibGUgb2YgY29udmVyc2lvbnMuICAqLworKwkgICooc2l6ZV90ICopIGZyZWVtZW0gPSBvdXRidWYgLSBmcmVlbWVtIC0gc2l6ZW9mIChzaXplX3QpOworKwkgIGRvbWFpbi0+Y29udl90YWJbYWN0XSA9IChjaGFyICopIGZyZWVtZW07CisrCSAgLyogU2hyaW5rIGZyZWVtZW0sIGJ1dCBrZWVwIGl0IGFsaWduZWQuICAqLworKwkgIGZyZWVtZW1fc2l6ZSAtPSBvdXRidWYgLSBmcmVlbWVtOworKwkgIGZyZWVtZW0gPSBvdXRidWY7CisrCSAgZnJlZW1lbSArPSBmcmVlbWVtX3NpemUgJiAoYWxpZ25vZiAoc2l6ZV90KSAtIDEpOworKwkgIGZyZWVtZW1fc2l6ZSA9IGZyZWVtZW1fc2l6ZSAmIH4gKGFsaWdub2YgKHNpemVfdCkgLSAxKTsKKysKKysJICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworKwl9CisrCisrICAgICAgLyogTm93IGRvbWFpbi0+Y29udl90YWJbYWN0XSBjb250YWlucyB0aGUgdHJhbnNsYXRpb24gb2YgYWxsCisrCSB0aGUgcGx1cmFsIHZhcmlhbnRzLiAgKi8KKysgICAgICByZXN1bHQgPSBkb21haW4tPmNvbnZfdGFiW2FjdF0gKyBzaXplb2YgKHNpemVfdCk7CisrICAgICAgcmVzdWx0bGVuID0gKihzaXplX3QgKikgZG9tYWluLT5jb252X3RhYlthY3RdOworKyAgICB9CisrCisrIGNvbnZlcnRlZDoKKysgIC8qIFRoZSByZXN1bHQgc3RyaW5nIGlzIGNvbnZlcnRlZC4gICovCisrCisrI2VuZGlmIC8qIF9MSUJDIHx8IEhBVkVfSUNPTlYgKi8KKysKKysgICpsZW5ndGhwID0gcmVzdWx0bGVuOworKyAgcmV0dXJuIHJlc3VsdDsKKyt9CisrCisrCisrLyogTG9vayB1cCBhIHBsdXJhbCB2YXJpYW50LiAgKi8KKytzdGF0aWMgY2hhciAqCisraW50ZXJuYWxfZnVuY3Rpb24KKytwbHVyYWxfbG9va3VwIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW4sIHVuc2lnbmVkIGxvbmcgaW50IG4sCisrCSAgICAgICBjb25zdCBjaGFyICp0cmFuc2xhdGlvbiwgc2l6ZV90IHRyYW5zbGF0aW9uX2xlbikKKyt7CisrICBzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqZG9tYWluZGF0YSA9IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqKSBkb21haW4tPmRhdGE7CisrICB1bnNpZ25lZCBsb25nIGludCBpbmRleDsKKysgIGNvbnN0IGNoYXIgKnA7CisrCisrICBpbmRleCA9IHBsdXJhbF9ldmFsIChkb21haW5kYXRhLT5wbHVyYWwsIG4pOworKyAgaWYgKGluZGV4ID49IGRvbWFpbmRhdGEtPm5wbHVyYWxzKQorKyAgICAvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uICBJdCBtZWFucyB0aGUgcGx1cmFsIGV4cHJlc3Npb24gYW5kIHRoZQorKyAgICAgICBnaXZlbiBtYXhpbXVtIHZhbHVlIGRvIG5vdCBtYXRjaC4gICovCisrICAgIGluZGV4ID0gMDsKKysKKysgIC8qIFNraXAgSU5ERVggc3RyaW5ncyBhdCBUUkFOU0xBVElPTi4gICovCisrICBwID0gdHJhbnNsYXRpb247CisrICB3aGlsZSAoaW5kZXgtLSA+IDApCisrICAgIHsKKysjaWZkZWYgX0xJQkMKKysgICAgICBwID0gX19yYXdtZW1jaHIgKHAsICdcMCcpOworKyNlbHNlCisrICAgICAgcCA9IHN0cmNociAocCwgJ1wwJyk7CisrI2VuZGlmCisrICAgICAgLyogQW5kIHNraXAgb3ZlciB0aGUgTlVMIGJ5dGUuICAqLworKyAgICAgIHArKzsKKysKKysgICAgICBpZiAocCA+PSB0cmFuc2xhdGlvbiArIHRyYW5zbGF0aW9uX2xlbikKKysJLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgSXQgbWVhbnMgdGhlIHBsdXJhbCBleHByZXNzaW9uCisrCSAgIGV2YWx1YXRlZCB0byBhIHZhbHVlIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2YgdmFyaWFudHMKKysJICAgYXZhaWxhYmxlIGZvciBNU0dJRDEuICAqLworKwlyZXR1cm4gKGNoYXIgKikgdHJhbnNsYXRpb247CisrICAgIH0KKysgIHJldHVybiAoY2hhciAqKSBwOworK30KKysKKysjaWZuZGVmIF9MSUJDCisrLyogUmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBsb2NhbGUgQ0FURUdPUlkuICAqLworK3N0YXRpYyBjb25zdCBjaGFyICoKKytpbnRlcm5hbF9mdW5jdGlvbgorK2NhdGVnb3J5X3RvX25hbWUgKGludCBjYXRlZ29yeSkKKyt7CisrICBjb25zdCBjaGFyICpyZXR2YWw7CisrCisrICBzd2l0Y2ggKGNhdGVnb3J5KQorKyAgeworKyNpZmRlZiBMQ19DT0xMQVRFCisrICBjYXNlIExDX0NPTExBVEU6CisrICAgIHJldHZhbCA9ICJMQ19DT0xMQVRFIjsKKysgICAgYnJlYWs7CisrI2VuZGlmCisrI2lmZGVmIExDX0NUWVBFCisrICBjYXNlIExDX0NUWVBFOgorKyAgICByZXR2YWwgPSAiTENfQ1RZUEUiOworKyAgICBicmVhazsKKysjZW5kaWYKKysjaWZkZWYgTENfTU9ORVRBUlkKKysgIGNhc2UgTENfTU9ORVRBUlk6CisrICAgIHJldHZhbCA9ICJMQ19NT05FVEFSWSI7CisrICAgIGJyZWFrOworKyNlbmRpZgorKyNpZmRlZiBMQ19OVU1FUklDCisrICBjYXNlIExDX05VTUVSSUM6CisrICAgIHJldHZhbCA9ICJMQ19OVU1FUklDIjsKKysgICAgYnJlYWs7CisrI2VuZGlmCisrI2lmZGVmIExDX1RJTUUKKysgIGNhc2UgTENfVElNRToKKysgICAgcmV0dmFsID0gIkxDX1RJTUUiOworKyAgICBicmVhazsKKysjZW5kaWYKKysjaWZkZWYgTENfTUVTU0FHRVMKKysgIGNhc2UgTENfTUVTU0FHRVM6CisrICAgIHJldHZhbCA9ICJMQ19NRVNTQUdFUyI7CisrICAgIGJyZWFrOworKyNlbmRpZgorKyNpZmRlZiBMQ19SRVNQT05TRQorKyAgY2FzZSBMQ19SRVNQT05TRToKKysgICAgcmV0dmFsID0gIkxDX1JFU1BPTlNFIjsKKysgICAgYnJlYWs7CisrI2VuZGlmCisrI2lmZGVmIExDX0FMTAorKyAgY2FzZSBMQ19BTEw6CisrICAgIC8qIFRoaXMgbWlnaHQgbm90IG1ha2Ugc2Vuc2UgYnV0IGlzIHBlcmhhcHMgYmV0dGVyIHRoYW4gYW55IG90aGVyCisrICAgICAgIHZhbHVlLiAgKi8KKysgICAgcmV0dmFsID0gIkxDX0FMTCI7CisrICAgIGJyZWFrOworKyNlbmRpZgorKyAgZGVmYXVsdDoKKysgICAgLyogSWYgeW91IGhhdmUgYSBiZXR0ZXIgaWRlYSBmb3IgYSBkZWZhdWx0IHZhbHVlIGxldCBtZSBrbm93LiAgKi8KKysgICAgcmV0dmFsID0gIkxDX1hYWCI7CisrICB9CisrCisrICByZXR1cm4gcmV0dmFsOworK30KKysjZW5kaWYKKysKKysvKiBHdWVzcyB2YWx1ZSBvZiBjdXJyZW50IGxvY2FsZSBmcm9tIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICAqLworK3N0YXRpYyBjb25zdCBjaGFyICoKKytpbnRlcm5hbF9mdW5jdGlvbgorK2d1ZXNzX2NhdGVnb3J5X3ZhbHVlIChpbnQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmNhdGVnb3J5bmFtZSkKKyt7CisrICBjb25zdCBjaGFyICpsYW5ndWFnZTsKKysgIGNvbnN0IGNoYXIgKnJldHZhbDsKKysKKysgIC8qIFRoZSBoaWdoZXN0IHByaW9yaXR5IHZhbHVlIGlzIHRoZSBgTEFOR1VBR0UnIGVudmlyb25tZW50CisrICAgICB2YXJpYWJsZS4gIEJ1dCB3ZSBkb24ndCB1c2UgdGhlIHZhbHVlIGlmIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQKKysgICAgIGxvY2FsZSBpcyB0aGUgQyBsb2NhbGUuICBUaGlzIGlzIGEgR05VIGV4dGVuc2lvbi4gICovCisrICBsYW5ndWFnZSA9IGdldGVudiAoIkxBTkdVQUdFIik7CisrICBpZiAobGFuZ3VhZ2UgIT0gTlVMTCAmJiBsYW5ndWFnZVswXSA9PSAnXDAnKQorKyAgICBsYW5ndWFnZSA9IE5VTEw7CisrCisrICAvKiBXZSBoYXZlIHRvIHByb2NlZWQgd2l0aCB0aGUgUE9TSVggbWV0aG9kcyBvZiBsb29raW5nIHRvIGBMQ19BTEwnLAorKyAgICAgYExDX3h4eCcsIGFuZCBgTEFORycuICBPbiBzb21lIHN5c3RlbXMgdGhpcyBjYW4gYmUgZG9uZSBieSB0aGUKKysgICAgIGBzZXRsb2NhbGUnIGZ1bmN0aW9uIGl0c2VsZi4gICovCisrI2lmZGVmIF9MSUJDCisrICByZXR2YWwgPSBfX2N1cnJlbnRfbG9jYWxlX25hbWUgKGNhdGVnb3J5KTsKKysjZWxzZQorKyAgcmV0dmFsID0gX25sX2xvY2FsZV9uYW1lIChjYXRlZ29yeSwgY2F0ZWdvcnluYW1lKTsKKysjZW5kaWYKKysKKysgIC8qIElnbm9yZSBMQU5HVUFHRSBpZiB0aGUgbG9jYWxlIGlzIHNldCB0byAiQyIgYmVjYXVzZQorKyAgICAgMS4gIkMiIGxvY2FsZSB1c3VhbGx5IHVzZXMgdGhlIEFTQ0lJIGVuY29kaW5nLCBhbmQgbW9zdCBpbnRlcm5hdGlvbmFsCisrCW1lc3NhZ2VzIHVzZSBub24tQVNDSUkgY2hhcmFjdGVycy4gVGhlc2UgY2hhcmFjdGVycyBnZXQgZGlzcGxheWVkCisrCWFzIHF1ZXN0aW9uIG1hcmtzIChpZiB1c2luZyBnbGliYydzIGljb252KCkpIG9yIGFzIGludmFsaWQgOC1iaXQKKysJY2hhcmFjdGVycyAoYmVjYXVzZSBvdGhlciBpY29udigpcyByZWZ1c2UgdG8gY29udmVydCBtb3N0IG5vbi1BU0NJSQorKwljaGFyYWN0ZXJzIHRvIEFTQ0lJKS4gSW4gYW55IGNhc2UsIHRoZSBvdXRwdXQgaXMgdWdseS4KKysgICAgIDIuIFRoZSBwcmVjaXNlIG91dHB1dCBvZiBzb21lIHByb2dyYW1zIGluIHRoZSAiQyIgbG9jYWxlIGlzIHNwZWNpZmllZAorKwlieSBQT1NJWCBhbmQgc2hvdWxkIG5vdCBkZXBlbmQgb24gZW52aXJvbm1lbnQgdmFyaWFibGVzIGxpa2UKKysJIkxBTkdVQUdFIi4gIFdlIGFsbG93IHN1Y2ggcHJvZ3JhbXMgdG8gdXNlIGdldHRleHQoKS4gICovCisrICByZXR1cm4gbGFuZ3VhZ2UgIT0gTlVMTCAmJiBzdHJjbXAgKHJldHZhbCwgIkMiKSAhPSAwID8gbGFuZ3VhZ2UgOiByZXR2YWw7CisrfQorKworKy8qIEBAIGJlZ2luIG9mIGVwaWxvZyBAQCAqLworKworKy8qIFdlIGRvbid0IHdhbnQgbGliaW50bC5hIHRvIGRlcGVuZCBvbiBhbnkgb3RoZXIgbGlicmFyeS4gIFNvIHdlCisrICAgYXZvaWQgdGhlIG5vbi1zdGFuZGFyZCBmdW5jdGlvbiBzdHBjcHkuICBJbiBHTlUgQyBMaWJyYXJ5IHRoaXMKKysgICBmdW5jdGlvbiBpcyBhdmFpbGFibGUsIHRob3VnaC4gIEFsc28gYWxsb3cgdGhlIHN5bWJvbCBIQVZFX1NUUENQWQorKyAgIHRvIGJlIGRlZmluZWQuICAqLworKyNpZiAhX0xJQkMgJiYgIUhBVkVfU1RQQ1BZCisrc3RhdGljIGNoYXIgKgorK3N0cGNweSAoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKQorK3sKKysgIHdoaWxlICgoKmRlc3QrKyA9ICpzcmMrKykgIT0gJ1wwJykKKysgICAgLyogRG8gbm90aGluZy4gKi8gOworKyAgcmV0dXJuIGRlc3QgLSAxOworK30KKysjZW5kaWYKKysKKysjaWYgIV9MSUJDICYmICFIQVZFX01FTVBDUFkKKytzdGF0aWMgdm9pZCAqCisrbWVtcGNweSAodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikKKyt7CisrICByZXR1cm4gKHZvaWQgKikgKChjaGFyICopIG1lbWNweSAoZGVzdCwgc3JjLCBuKSArIG4pOworK30KKysjZW5kaWYKKysKKysKKysjaWZkZWYgX0xJQkMKKysvKiBJZiB3ZSB3YW50IHRvIGZyZWUgYWxsIHJlc291cmNlcyB3ZSBoYXZlIHRvIGRvIHNvbWUgd29yayBhdAorKyAgIHByb2dyYW0ncyBlbmQuICAqLworK2xpYmNfZnJlZXJlc19mbiAoZnJlZV9tZW0pCisreworKyAgdm9pZCAqb2xkOworKworKyAgd2hpbGUgKF9ubF9kb21haW5fYmluZGluZ3MgIT0gTlVMTCkKKysgICAgeworKyAgICAgIHN0cnVjdCBiaW5kaW5nICpvbGRwID0gX25sX2RvbWFpbl9iaW5kaW5nczsKKysgICAgICBfbmxfZG9tYWluX2JpbmRpbmdzID0gX25sX2RvbWFpbl9iaW5kaW5ncy0+bmV4dDsKKysgICAgICBpZiAob2xkcC0+ZGlybmFtZSAhPSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSkpCisrCS8qIFllcywgdGhpcyBpcyBhIHBvaW50ZXIgY29tcGFyaXNvbi4gICovCisrCWZyZWUgKG9sZHAtPmRpcm5hbWUpOworKyAgICAgIGZyZWUgKG9sZHAtPmNvZGVzZXQpOworKyAgICAgIGZyZWUgKG9sZHApOworKyAgICB9CisrCisrICBpZiAoX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gIT0gX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4pCisrICAgIC8qIFllcywgYWdhaW4gYSBwb2ludGVyIGNvbXBhcmlzb24uICAqLworKyAgICBmcmVlICgoY2hhciAqKSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbik7CisrCisrICAvKiBSZW1vdmUgdGhlIHNlYXJjaCB0cmVlIHdpdGggdGhlIGtub3duIHRyYW5zbGF0aW9ucy4gICovCisrICBfX3RkZXN0cm95IChyb290LCBmcmVlKTsKKysgIHJvb3QgPSBOVUxMOworKworKyAgd2hpbGUgKHRyYW5zbWVtX2xpc3QgIT0gTlVMTCkKKysgICAgeworKyAgICAgIG9sZCA9IHRyYW5zbWVtX2xpc3Q7CisrICAgICAgdHJhbnNtZW1fbGlzdCA9IHRyYW5zbWVtX2xpc3QtPm5leHQ7CisrICAgICAgZnJlZSAob2xkKTsKKysgICAgfQorK30KKysjZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9kY25nZXR0ZXh0LmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvZGNuZ2V0dGV4dC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzc1NzQ1MDQ4IC0wNDAwCitAQCAtMCwwICsxLDU3IEBACisrLyogSW1wbGVtZW50YXRpb24gb2YgdGhlIGRjbmdldHRleHQoMykgZnVuY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8bGliaW50bC5oPgorKyNlbHNlCisrIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCisrI2VuZGlmCisrCisrLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworKworKy8qIE5hbWVzIGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoZXkgbXVzdCBub3QgY2xhc2gKKysgICB3aXRoIGV4aXN0aW5nIG5hbWVzIGFuZCB0aGV5IHNob3VsZCBmb2xsb3cgQU5TSSBDLiAgQnV0IHRoaXMgc291cmNlCisrICAgY29kZSBpcyBhbHNvIHVzZWQgaW4gR05VIEMgTGlicmFyeSB3aGVyZSB0aGUgbmFtZXMgaGF2ZSBhIF9fCisrICAgcHJlZml4LiAgU28gd2UgaGF2ZSB0byBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKysjaWZkZWYgX0xJQkMKKysjIGRlZmluZSBEQ05HRVRURVhUIF9fZGNuZ2V0dGV4dAorKyMgZGVmaW5lIERDSUdFVFRFWFQgX19kY2lnZXR0ZXh0CisrI2Vsc2UKKysjIGRlZmluZSBEQ05HRVRURVhUIGxpYmludGxfZGNuZ2V0dGV4dAorKyMgZGVmaW5lIERDSUdFVFRFWFQgbGliaW50bF9kY2lnZXR0ZXh0CisrI2VuZGlmCisrCisrLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50IENBVEVHT1JZCisrICAgbG9jYWxlLiAgKi8KKytjaGFyICoKKytEQ05HRVRURVhUIChjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkgICAgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IG4sCisrCSAgICBpbnQgY2F0ZWdvcnkpCisreworKyAgcmV0dXJuIERDSUdFVFRFWFQgKGRvbWFpbm5hbWUsIG1zZ2lkMSwgbXNnaWQyLCAxLCBuLCBjYXRlZ29yeSk7CisrfQorKworKyNpZmRlZiBfTElCQworKy8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLworK3dlYWtfYWxpYXMgKF9fZGNuZ2V0dGV4dCwgZGNuZ2V0dGV4dCk7CisrI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZGdldHRleHQuYwkxOTk4LTA0LTI2IDA5OjIwOjUyLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9kZ2V0dGV4dC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzgwNzQ0Mjg4IC0wNDAwCitAQCAtMSwzMiArMSwzMyBAQAorLS8qIGRnZXR0ZXh0LmMgLS0gaW1wbGVtZW50YXRpb24gb2YgdGhlIGRnZXR0ZXh0KDMpIGZ1bmN0aW9uCistICAgQ29weXJpZ2h0IChDKSAxOTk1IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGdldHRleHQoMykgZnVuY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKy1UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLWFueSBsYXRlciB2ZXJzaW9uLgorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKy1UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy1idXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy1HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy1Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKyAKKyAjaWZkZWYgSEFWRV9DT05GSUdfSAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistI2lmIGRlZmluZWQgSEFWRV9MT0NBTEVfSCB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxsb2NhbGUuaD4KKy0jZW5kaWYKKysjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKysKKysjaW5jbHVkZSA8bG9jYWxlLmg+CisgCisgI2lmZGVmIF9MSUJDCisgIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisgI2Vsc2UKKy0jIGluY2x1ZGUgImxpYmdldHRleHQuaCIKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKyAjZW5kaWYKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCitAQCAtMzcsMTggKzM4LDE2IEBACisgICAgcHJlZml4LiAgU28gd2UgaGF2ZSB0byBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKyAjaWZkZWYgX0xJQkMKKyAjIGRlZmluZSBER0VUVEVYVCBfX2RnZXR0ZXh0CistIyBkZWZpbmUgRENHRVRURVhUIF9fZGNnZXR0ZXh0CisrIyBkZWZpbmUgRENHRVRURVhUIElOVFVTRShfX2RjZ2V0dGV4dCkKKyAjZWxzZQorLSMgZGVmaW5lIERHRVRURVhUIGRnZXR0ZXh0X18KKy0jIGRlZmluZSBEQ0dFVFRFWFQgZGNnZXR0ZXh0X18KKysjIGRlZmluZSBER0VUVEVYVCBsaWJpbnRsX2RnZXR0ZXh0CisrIyBkZWZpbmUgRENHRVRURVhUIGxpYmludGxfZGNnZXR0ZXh0CisgI2VuZGlmCisgCisgLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgb2YgdGhlIGN1cnJlbnQKKyAgICBMQ19NRVNTQUdFUyBsb2NhbGUuICAqLworIGNoYXIgKgorLURHRVRURVhUIChkb21haW5uYW1lLCBtc2dpZCkKKy0gICAgIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWU7CistICAgICBjb25zdCBjaGFyICptc2dpZDsKKytER0VUVEVYVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqbXNnaWQpCisgeworICAgcmV0dXJuIERDR0VUVEVYVCAoZG9tYWlubmFtZSwgbXNnaWQsIExDX01FU1NBR0VTKTsKKyB9CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZG5nZXR0ZXh0LmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvZG5nZXR0ZXh0LmMJMjAwNC0wOS0xMiAxNDo0MDozNC4zODU3NDM1MjggLTA0MDAKK0BAIC0wLDAgKzEsNTkgQEAKKysvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZG5nZXR0ZXh0KDMpIGZ1bmN0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk3LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKysKKysjaW5jbHVkZSA8bG9jYWxlLmg+CisrCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisrI2Vsc2UKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKysjZW5kaWYKKysKKysvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisrCisrLyogTmFtZXMgZm9yIHRoZSBsaWJpbnRsIGZ1bmN0aW9ucyBhcmUgYSBwcm9ibGVtLiAgVGhleSBtdXN0IG5vdCBjbGFzaAorKyAgIHdpdGggZXhpc3RpbmcgbmFtZXMgYW5kIHRoZXkgc2hvdWxkIGZvbGxvdyBBTlNJIEMuICBCdXQgdGhpcyBzb3VyY2UKKysgICBjb2RlIGlzIGFsc28gdXNlZCBpbiBHTlUgQyBMaWJyYXJ5IHdoZXJlIHRoZSBuYW1lcyBoYXZlIGEgX18KKysgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworKyNpZmRlZiBfTElCQworKyMgZGVmaW5lIEROR0VUVEVYVCBfX2RuZ2V0dGV4dAorKyMgZGVmaW5lIERDTkdFVFRFWFQgX19kY25nZXR0ZXh0CisrI2Vsc2UKKysjIGRlZmluZSBETkdFVFRFWFQgbGliaW50bF9kbmdldHRleHQKKysjIGRlZmluZSBEQ05HRVRURVhUIGxpYmludGxfZGNuZ2V0dGV4dAorKyNlbmRpZgorKworKy8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIG9mIHRoZSBjdXJyZW50CisrICAgTENfTUVTU0FHRVMgbG9jYWxlIGFuZCBza2lwIG1lc3NhZ2UgYWNjb3JkaW5nIHRvIHRoZSBwbHVyYWwgZm9ybS4gICovCisrY2hhciAqCisrRE5HRVRURVhUIChjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkgICBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgbikKKyt7CisrICByZXR1cm4gRENOR0VUVEVYVCAoZG9tYWlubmFtZSwgbXNnaWQxLCBtc2dpZDIsIG4sIExDX01FU1NBR0VTKTsKKyt9CisrCisrI2lmZGVmIF9MSUJDCisrLyogQWxpYXMgZm9yIGZ1bmN0aW9uIG5hbWUgaW4gR05VIEMgTGlicmFyeS4gICovCisrd2Vha19hbGlhcyAoX19kbmdldHRleHQsIGRuZ2V0dGV4dCk7CisrI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZXZhbC1wbHVyYWwuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9ldmFsLXBsdXJhbC5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzkwNzQyNzY4IC0wNDAwCitAQCAtMCwwICsxLDEwOCBAQAorKy8qIFBsdXJhbCBleHByZXNzaW9uIGV2YWx1YXRpb24uCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgU1RBVElDCisrI2RlZmluZSBTVEFUSUMgc3RhdGljCisrI2VuZGlmCisrCisrLyogRXZhbHVhdGUgdGhlIHBsdXJhbCBleHByZXNzaW9uIGFuZCByZXR1cm4gYW4gaW5kZXggdmFsdWUuICAqLworK1NUQVRJQworK3Vuc2lnbmVkIGxvbmcgaW50CisraW50ZXJuYWxfZnVuY3Rpb24KKytwbHVyYWxfZXZhbCAoc3RydWN0IGV4cHJlc3Npb24gKnBleHAsIHVuc2lnbmVkIGxvbmcgaW50IG4pCisreworKyAgc3dpdGNoIChwZXhwLT5uYXJncykKKysgICAgeworKyAgICBjYXNlIDA6CisrICAgICAgc3dpdGNoIChwZXhwLT5vcGVyYXRpb24pCisrCXsKKysJY2FzZSB2YXI6CisrCSAgcmV0dXJuIG47CisrCWNhc2UgbnVtOgorKwkgIHJldHVybiBwZXhwLT52YWwubnVtOworKwlkZWZhdWx0OgorKwkgIGJyZWFrOworKwl9CisrICAgICAgLyogTk9UUkVBQ0hFRCAqLworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIDE6CisrICAgICAgeworKwkvKiBwZXhwLT5vcGVyYXRpb24gbXVzdCBiZSBsbm90LiAgKi8KKysJdW5zaWduZWQgbG9uZyBpbnQgYXJnID0gcGx1cmFsX2V2YWwgKHBleHAtPnZhbC5hcmdzWzBdLCBuKTsKKysJcmV0dXJuICEgYXJnOworKyAgICAgIH0KKysgICAgY2FzZSAyOgorKyAgICAgIHsKKysJdW5zaWduZWQgbG9uZyBpbnQgbGVmdGFyZyA9IHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1swXSwgbik7CisrCWlmIChwZXhwLT5vcGVyYXRpb24gPT0gbG9yKQorKwkgIHJldHVybiBsZWZ0YXJnIHx8IHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1sxXSwgbik7CisrCWVsc2UgaWYgKHBleHAtPm9wZXJhdGlvbiA9PSBsYW5kKQorKwkgIHJldHVybiBsZWZ0YXJnICYmIHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1sxXSwgbik7CisrCWVsc2UKKysJICB7CisrCSAgICB1bnNpZ25lZCBsb25nIGludCByaWdodGFyZyA9IHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1sxXSwgbik7CisrCisrCSAgICBzd2l0Y2ggKHBleHAtPm9wZXJhdGlvbikKKysJICAgICAgeworKwkgICAgICBjYXNlIG11bHQ6CisrCQlyZXR1cm4gbGVmdGFyZyAqIHJpZ2h0YXJnOworKwkgICAgICBjYXNlIGRpdmlkZToKKysjaWYgIUlOVERJVjBfUkFJU0VTX1NJR0ZQRQorKwkJaWYgKHJpZ2h0YXJnID09IDApCisrCQkgIHJhaXNlIChTSUdGUEUpOworKyNlbmRpZgorKwkJcmV0dXJuIGxlZnRhcmcgLyByaWdodGFyZzsKKysJICAgICAgY2FzZSBtb2R1bGU6CisrI2lmICFJTlRESVYwX1JBSVNFU19TSUdGUEUKKysJCWlmIChyaWdodGFyZyA9PSAwKQorKwkJICByYWlzZSAoU0lHRlBFKTsKKysjZW5kaWYKKysJCXJldHVybiBsZWZ0YXJnICUgcmlnaHRhcmc7CisrCSAgICAgIGNhc2UgcGx1czoKKysJCXJldHVybiBsZWZ0YXJnICsgcmlnaHRhcmc7CisrCSAgICAgIGNhc2UgbWludXM6CisrCQlyZXR1cm4gbGVmdGFyZyAtIHJpZ2h0YXJnOworKwkgICAgICBjYXNlIGxlc3NfdGhhbjoKKysJCXJldHVybiBsZWZ0YXJnIDwgcmlnaHRhcmc7CisrCSAgICAgIGNhc2UgZ3JlYXRlcl90aGFuOgorKwkJcmV0dXJuIGxlZnRhcmcgPiByaWdodGFyZzsKKysJICAgICAgY2FzZSBsZXNzX29yX2VxdWFsOgorKwkJcmV0dXJuIGxlZnRhcmcgPD0gcmlnaHRhcmc7CisrCSAgICAgIGNhc2UgZ3JlYXRlcl9vcl9lcXVhbDoKKysJCXJldHVybiBsZWZ0YXJnID49IHJpZ2h0YXJnOworKwkgICAgICBjYXNlIGVxdWFsOgorKwkJcmV0dXJuIGxlZnRhcmcgPT0gcmlnaHRhcmc7CisrCSAgICAgIGNhc2Ugbm90X2VxdWFsOgorKwkJcmV0dXJuIGxlZnRhcmcgIT0gcmlnaHRhcmc7CisrCSAgICAgIGRlZmF1bHQ6CisrCQlicmVhazsKKysJICAgICAgfQorKwkgIH0KKysJLyogTk9UUkVBQ0hFRCAqLworKwlicmVhazsKKysgICAgICB9CisrICAgIGNhc2UgMzoKKysgICAgICB7CisrCS8qIHBleHAtPm9wZXJhdGlvbiBtdXN0IGJlIHFtb3AuICAqLworKwl1bnNpZ25lZCBsb25nIGludCBib29sYXJnID0gcGx1cmFsX2V2YWwgKHBleHAtPnZhbC5hcmdzWzBdLCBuKTsKKysJcmV0dXJuIHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1tib29sYXJnID8gMSA6IDJdLCBuKTsKKysgICAgICB9CisrICAgIH0KKysgIC8qIE5PVFJFQUNIRUQgKi8KKysgIHJldHVybiAwOworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9leHBsb2RlbmFtZS5jCTE5OTgtMDQtMjYgMDk6MjI6MzcuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2V4cGxvZGVuYW1lLmMJMjAwNC0wOS0xMiAxNDo0MDozNC4zOTU3NDIwMDggLTA0MDAKK0BAIC0xLDE5ICsxLDIwIEBACistLyogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4LCAyMDAwLTIwMDEsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgQ29udHJpYnV0ZWQgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+LCAxOTk1LgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKyAKKyAjaWZkZWYgSEFWRV9DT05GSUdfSAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CitAQCAtMzYsMTggKzM3LDIzIEBACisgCisgLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworIAorK2NoYXIgKgorK19ubF9maW5kX2xhbmd1YWdlIChjb25zdCBjaGFyICpuYW1lKQorK3sKKysgIHdoaWxlIChuYW1lWzBdICE9ICdcMCcgJiYgbmFtZVswXSAhPSAnXycgJiYgbmFtZVswXSAhPSAnQCcKKysJICYmIG5hbWVbMF0gIT0gJysnICYmIG5hbWVbMF0gIT0gJywnKQorKyAgICArK25hbWU7CisrCisrICByZXR1cm4gKGNoYXIgKikgbmFtZTsKKyt9CisrCisrCisgaW50CistX25sX2V4cGxvZGVfbmFtZSAobmFtZSwgbGFuZ3VhZ2UsIG1vZGlmaWVyLCB0ZXJyaXRvcnksIGNvZGVzZXQsCistCQkgIG5vcm1hbGl6ZWRfY29kZXNldCwgc3BlY2lhbCwgc3BvbnNvciwgcmV2aXNpb24pCistICAgICBjaGFyICpuYW1lOworLSAgICAgY29uc3QgY2hhciAqKmxhbmd1YWdlOworLSAgICAgY29uc3QgY2hhciAqKm1vZGlmaWVyOworLSAgICAgY29uc3QgY2hhciAqKnRlcnJpdG9yeTsKKy0gICAgIGNvbnN0IGNoYXIgKipjb2Rlc2V0OworLSAgICAgY29uc3QgY2hhciAqKm5vcm1hbGl6ZWRfY29kZXNldDsKKy0gICAgIGNvbnN0IGNoYXIgKipzcGVjaWFsOworLSAgICAgY29uc3QgY2hhciAqKnNwb25zb3I7CistICAgICBjb25zdCBjaGFyICoqcmV2aXNpb247CisrX25sX2V4cGxvZGVfbmFtZSAoY2hhciAqbmFtZSwKKysJCSAgY29uc3QgY2hhciAqKmxhbmd1YWdlLCBjb25zdCBjaGFyICoqbW9kaWZpZXIsCisrCQkgIGNvbnN0IGNoYXIgKip0ZXJyaXRvcnksIGNvbnN0IGNoYXIgKipjb2Rlc2V0LAorKwkJICBjb25zdCBjaGFyICoqbm9ybWFsaXplZF9jb2Rlc2V0LCBjb25zdCBjaGFyICoqc3BlY2lhbCwKKysJCSAgY29uc3QgY2hhciAqKnNwb25zb3IsIGNvbnN0IGNoYXIgKipyZXZpc2lvbikKKyB7CisgICBlbnVtIHsgdW5kZWNpZGVkLCB4cGcsIGNlbiB9IHN5bnRheDsKKyAgIGNoYXIgKmNwOworQEAgLTY3LDkgKzczLDcgQEAKKyAgIG1hc2sgPSAwOworICAgc3ludGF4ID0gdW5kZWNpZGVkOworICAgKmxhbmd1YWdlID0gY3AgPSBuYW1lOworLSAgd2hpbGUgKGNwWzBdICE9ICdcMCcgJiYgY3BbMF0gIT0gJ18nICYmIGNwWzBdICE9ICdAJworLQkgJiYgY3BbMF0gIT0gJysnICYmIGNwWzBdICE9ICcsJykKKy0gICAgKytjcDsKKysgIGNwID0gX25sX2ZpbmRfbGFuZ3VhZ2UgKCpsYW5ndWFnZSk7CisgCisgICBpZiAoKmxhbmd1YWdlID09IGNwKQorICAgICAvKiBUaGlzIGRvZXMgbm90IG1ha2Ugc2Vuc2U6IGxhbmd1YWdlIGhhcyB0byBiZSBzcGVjaWZpZWQuICBVc2UKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9maW5kZG9tYWluLmMJMTk5OC0wNC0yNiAwOToyMjozNi4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvZmluZGRvbWFpbi5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNDE1NzM4OTY4IC0wNDAwCitAQCAtMSw2NCArMSw0MCBAQAorIC8qIEhhbmRsZSBsaXN0IG9mIG5lZWRlZCBtZXNzYWdlIGNhdGFsb2dzCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLSAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+LCAxOTk1LgorKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAwLTIwMDEsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUub3JnPiwgMTk5NS4KKyAKKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorLSAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLSNpbmNsdWRlIDxjdHlwZS5oPgorLSNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0KKy0jaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBfTElCQworLSMgaW5jbHVkZSA8c3RkbGliLmg+CistI2Vsc2UKKy0jIGlmZGVmIEhBVkVfTUFMTE9DX0gKKy0jICBpbmNsdWRlIDxtYWxsb2MuaD4KKy0jIGVsc2UKKy12b2lkIGZyZWUgKCk7CistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpZiBkZWZpbmVkIEhBVkVfU1RSSU5HX0ggfHwgZGVmaW5lZCBfTElCQworLSMgaW5jbHVkZSA8c3RyaW5nLmg+CistI2Vsc2UKKy0jIGluY2x1ZGUgPHN0cmluZ3MuaD4KKy0jIGlmbmRlZiBtZW1jcHkKKy0jICBkZWZpbmUgbWVtY3B5KERzdCwgU3JjLCBOdW0pIGJjb3B5IChTcmMsIERzdCwgTnVtKQorLSMgZW5kaWYKKy0jZW5kaWYKKy0jaWYgIUhBVkVfU1RSQ0hSICYmICFkZWZpbmVkIF9MSUJDCistIyBpZm5kZWYgc3RyY2hyCistIyAgZGVmaW5lIHN0cmNociBpbmRleAorLSMgZW5kaWYKKy0jZW5kaWYKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorIAorICNpZiBkZWZpbmVkIEhBVkVfVU5JU1REX0ggfHwgZGVmaW5lZCBfTElCQworICMgaW5jbHVkZSA8dW5pc3RkLmg+CisgI2VuZGlmCisgCistI2luY2x1ZGUgImdldHRleHQuaCIKKyAjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKyAjaWZkZWYgX0xJQkMKKyAjIGluY2x1ZGUgPGxpYmludGwuaD4KKyAjZWxzZQorLSMgaW5jbHVkZSAibGliZ2V0dGV4dC5oIgorKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorICNlbmRpZgorIAorIC8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KK0BAIC03MCwxMCArNDYsOSBAQAorICAgIHRoZSBET01BSU5OQU1FIGFuZCBDQVRFR09SWSBwYXJhbWV0ZXJzIHdpdGggcmVzcGVjdCB0byB0aGUgY3VycmVudGx5CisgICAgZXN0YWJsaXNoZWQgYmluZGluZ3MuICAqLworIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKgorLV9ubF9maW5kX2RvbWFpbiAoZGlybmFtZSwgbG9jYWxlLCBkb21haW5uYW1lKQorLSAgICAgY29uc3QgY2hhciAqZGlybmFtZTsKKy0gICAgIGNoYXIgKmxvY2FsZTsKKy0gICAgIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWU7CisraW50ZXJuYWxfZnVuY3Rpb24KKytfbmxfZmluZF9kb21haW4gKGNvbnN0IGNoYXIgKmRpcm5hbWUsIGNoYXIgKmxvY2FsZSwKKysJCSBjb25zdCBjaGFyICpkb21haW5uYW1lLCBzdHJ1Y3QgYmluZGluZyAqZG9tYWluYmluZGluZykKKyB7CisgICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpyZXR2YWw7CisgICBjb25zdCBjaGFyICpsYW5ndWFnZTsKK0BAIC05NSw5ICs3MCw5IEBACisgCisgCWxhbmd1YWdlW190ZXJyaXRvcnldWythdWRpZW5jZV1bK3NwZWNpYWxdWyxbc3BvbnNvcl1bX3JldmlzaW9uXV0KKyAKKy0gICAgIEJlc2lkZSB0aGUgZmlyc3QgYWxsIG9mIHRoZW0gYXJlIGFsbG93ZWQgdG8gYmUgbWlzc2luZy4gIElmIHRoZQorLSAgICAgZnVsbCBzcGVjaWZpZWQgbG9jYWxlIGlzIG5vdCBmb3VuZCwgdGhlIGxlc3Mgc3BlY2lmaWMgb25lIGFyZQorLSAgICAgbG9va2VkIGZvci4gIFRoZSB2YXJpb3VzIHBhcnQgd2lsbCBiZSBzdHJpcHBlZCBvZiBhY2NvcmRpbmcgdG8KKysgICAgIEJlc2lkZSB0aGUgZmlyc3QgcGFydCBhbGwgb2YgdGhlbSBhcmUgYWxsb3dlZCB0byBiZSBtaXNzaW5nLiAgSWYKKysgICAgIHRoZSBmdWxsIHNwZWNpZmllZCBsb2NhbGUgaXMgbm90IGZvdW5kLCB0aGUgbGVzcyBzcGVjaWZpYyBvbmUgYXJlCisrICAgICBsb29rZWQgZm9yLiAgVGhlIHZhcmlvdXMgcGFydHMgd2lsbCBiZSBzdHJpcHBlZCBvZmYgYWNjb3JkaW5nIHRvCisgICAgICB0aGUgZm9sbG93aW5nIG9yZGVyOgorIAkJKDEpIHJldmlzaW9uCisgCQkoMikgc3BvbnNvcgorQEAgLTExOSw3ICs5NCw3IEBACisgICAgICAgaW50IGNudDsKKyAKKyAgICAgICBpZiAocmV0dmFsLT5kZWNpZGVkID09IDApCistCV9ubF9sb2FkX2RvbWFpbiAocmV0dmFsKTsKKysJX25sX2xvYWRfZG9tYWluIChyZXR2YWwsIGRvbWFpbmJpbmRpbmcpOworIAorICAgICAgIGlmIChyZXR2YWwtPmRhdGEgIT0gTlVMTCkKKyAJcmV0dXJuIHJldHZhbDsKK0BAIC0xMjcsNyArMTAyLDcgQEAKKyAgICAgICBmb3IgKGNudCA9IDA7IHJldHZhbC0+c3VjY2Vzc29yW2NudF0gIT0gTlVMTDsgKytjbnQpCisgCXsKKyAJICBpZiAocmV0dmFsLT5zdWNjZXNzb3JbY250XS0+ZGVjaWRlZCA9PSAwKQorLQkgICAgX25sX2xvYWRfZG9tYWluIChyZXR2YWwtPnN1Y2Nlc3NvcltjbnRdKTsKKysJICAgIF9ubF9sb2FkX2RvbWFpbiAocmV0dmFsLT5zdWNjZXNzb3JbY250XSwgZG9tYWluYmluZGluZyk7CisgCisgCSAgaWYgKHJldHZhbC0+c3VjY2Vzc29yW2NudF0tPmRhdGEgIT0gTlVMTCkKKyAJICAgIGJyZWFrOworQEAgLTE0MiwxMiArMTE3LDE4IEBACisgICBhbGlhc192YWx1ZSA9IF9ubF9leHBhbmRfYWxpYXMgKGxvY2FsZSk7CisgICBpZiAoYWxpYXNfdmFsdWUgIT0gTlVMTCkKKyAgICAgeworKyNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9TVFJEVVAKKysgICAgICBsb2NhbGUgPSBzdHJkdXAgKGFsaWFzX3ZhbHVlKTsKKysgICAgICBpZiAobG9jYWxlID09IE5VTEwpCisrCXJldHVybiBOVUxMOworKyNlbHNlCisgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoYWxpYXNfdmFsdWUpICsgMTsKKyAgICAgICBsb2NhbGUgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CisgICAgICAgaWYgKGxvY2FsZSA9PSBOVUxMKQorIAlyZXR1cm4gTlVMTDsKKyAKKyAgICAgICBtZW1jcHkgKGxvY2FsZSwgYWxpYXNfdmFsdWUsIGxlbik7CisrI2VuZGlmCisgICAgIH0KKyAKKyAgIC8qIE5vdyB3ZSBkZXRlcm1pbmUgdGhlIHNpbmdsZSBwYXJ0cyBvZiB0aGUgbG9jYWxlIG5hbWUuICBGaXJzdAorQEAgLTE2OCwxNCArMTQ5LDE0IEBACisgICAgIHJldHVybiBOVUxMOworIAorICAgaWYgKHJldHZhbC0+ZGVjaWRlZCA9PSAwKQorLSAgICBfbmxfbG9hZF9kb21haW4gKHJldHZhbCk7CisrICAgIF9ubF9sb2FkX2RvbWFpbiAocmV0dmFsLCBkb21haW5iaW5kaW5nKTsKKyAgIGlmIChyZXR2YWwtPmRhdGEgPT0gTlVMTCkKKyAgICAgeworICAgICAgIGludCBjbnQ7CisgICAgICAgZm9yIChjbnQgPSAwOyByZXR2YWwtPnN1Y2Nlc3NvcltjbnRdICE9IE5VTEw7ICsrY250KQorIAl7CisgCSAgaWYgKHJldHZhbC0+c3VjY2Vzc29yW2NudF0tPmRlY2lkZWQgPT0gMCkKKy0JICAgIF9ubF9sb2FkX2RvbWFpbiAocmV0dmFsLT5zdWNjZXNzb3JbY250XSk7CisrCSAgICBfbmxfbG9hZF9kb21haW4gKHJldHZhbC0+c3VjY2Vzc29yW2NudF0sIGRvbWFpbmJpbmRpbmcpOworIAkgIGlmIChyZXR2YWwtPnN1Y2Nlc3NvcltjbnRdLT5kYXRhICE9IE5VTEwpCisgCSAgICBicmVhazsKKyAJfQorQEAgLTE4NSw1ICsxNjYsMjcgQEAKKyAgIGlmIChhbGlhc192YWx1ZSAhPSBOVUxMKQorICAgICBmcmVlIChsb2NhbGUpOworIAorKyAgLyogVGhlIHNwYWNlIGZvciBub3JtYWxpemVkX2NvZGVzZXQgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkLiAgRnJlZSBpdC4gICovCisrICBpZiAobWFzayAmIFhQR19OT1JNX0NPREVTRVQpCisrICAgIGZyZWUgKCh2b2lkICopIG5vcm1hbGl6ZWRfY29kZXNldCk7CisrCisgICByZXR1cm4gcmV0dmFsOworIH0KKysKKysKKysjaWZkZWYgX0xJQkMKKytsaWJjX2ZyZWVyZXNfZm4gKGZyZWVfbWVtKQorK3sKKysgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKnJ1bnAgPSBfbmxfbG9hZGVkX2RvbWFpbnM7CisrCisrICB3aGlsZSAocnVucCAhPSBOVUxMKQorKyAgICB7CisrICAgICAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqaGVyZSA9IHJ1bnA7CisrICAgICAgaWYgKHJ1bnAtPmRhdGEgIT0gTlVMTCkKKysJX25sX3VubG9hZF9kb21haW4gKChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqKSBydW5wLT5kYXRhKTsKKysgICAgICBydW5wID0gcnVucC0+bmV4dDsKKysgICAgICBmcmVlICgoY2hhciAqKSBoZXJlLT5maWxlbmFtZSk7CisrICAgICAgZnJlZSAoaGVyZSk7CisrICAgIH0KKyt9CisrI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZ2V0dGV4dC5jCTE5OTgtMDQtMjYgMDk6MjI6MzYuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2dldHRleHQuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjQyMDczODIwOCAtMDQwMAorQEAgLTEsMTkgKzEsMjAgQEAKKy0vKiBJbXBsZW1lbnRhdGlvbiBvZiBnZXR0ZXh0KDMpIGZ1bmN0aW9uCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8qIEltcGxlbWVudGF0aW9uIG9mIGdldHRleHQoMykgZnVuY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICAgYW55IGxhdGVyIHZlcnNpb24uCisgCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKy0gICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworIAorICNpZmRlZiBIQVZFX0NPTkZJR19ICisgIyBpbmNsdWRlIDxjb25maWcuaD4KK0BAIC0yMywyMSArMjQsMTQgQEAKKyAjIGRlZmluZSBfX25lZWRfTlVMTAorICMgaW5jbHVkZSA8c3RkZGVmLmg+CisgI2Vsc2UKKy0jIGlmZGVmIFNURENfSEVBREVSUworLSMgIGluY2x1ZGUgPHN0ZGxpYi5oPgkJLyogSnVzdCBmb3IgTlVMTC4gICovCistIyBlbHNlCistIyAgaWZkZWYgSEFWRV9TVFJJTkdfSAorLSMgICBpbmNsdWRlIDxzdHJpbmcuaD4KKy0jICBlbHNlCistIyAgIGRlZmluZSBOVUxMICgodm9pZCAqKSAwKQorLSMgIGVuZGlmCistIyBlbmRpZgorKyMgaW5jbHVkZSA8c3RkbGliLmg+CQkvKiBKdXN0IGZvciBOVUxMLiAgKi8KKyAjZW5kaWYKKyAKKysjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKyAjaWZkZWYgX0xJQkMKKyAjIGluY2x1ZGUgPGxpYmludGwuaD4KKyAjZWxzZQorLSMgaW5jbHVkZSAibGliZ2V0dGV4dC5oIgorKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorICNlbmRpZgorIAorIC8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KK0BAIC00OCwyMCArNDIsMTkgQEAKKyAgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworICNpZmRlZiBfTElCQworICMgZGVmaW5lIEdFVFRFWFQgX19nZXR0ZXh0CistIyBkZWZpbmUgREdFVFRFWFQgX19kZ2V0dGV4dAorKyMgZGVmaW5lIERDR0VUVEVYVCBJTlRVU0UoX19kY2dldHRleHQpCisgI2Vsc2UKKy0jIGRlZmluZSBHRVRURVhUIGdldHRleHRfXworLSMgZGVmaW5lIERHRVRURVhUIGRnZXR0ZXh0X18KKysjIGRlZmluZSBHRVRURVhUIGxpYmludGxfZ2V0dGV4dAorKyMgZGVmaW5lIERDR0VUVEVYVCBsaWJpbnRsX2RjZ2V0dGV4dAorICNlbmRpZgorIAorIC8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIGN1cnJlbnQgZGVmYXVsdCBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50CisgICAgTENfTUVTU0FHRVMgbG9jYWxlLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIE1TR0lEIGl0c2VsZiAodGhlIGRlZmF1bHQKKyAgICB0ZXh0KS4gICovCisgY2hhciAqCistR0VUVEVYVCAobXNnaWQpCistICAgICBjb25zdCBjaGFyICptc2dpZDsKKytHRVRURVhUIChjb25zdCBjaGFyICptc2dpZCkKKyB7CistICByZXR1cm4gREdFVFRFWFQgKE5VTEwsIG1zZ2lkKTsKKysgIHJldHVybiBEQ0dFVFRFWFQgKE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUyk7CisgfQorIAorICNpZmRlZiBfTElCQworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2dldHRleHQuaAkxOTk4LTA0LTI2IDA5OjIyOjM1LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9nZXR0ZXh0LmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKK0BAIC0xLDEwNSArMCwwIEBACistLyogSW50ZXJuYWwgaGVhZGVyIGZvciBHTlUgZ2V0dGV4dCBpbnRlcm5hdGlvbmFsaXphdGlvbiBmdW5jdGlvbnMKKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsCistICAgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorLSAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKy0KKy0jaWZuZGVmIF9HRVRURVhUX0gKKy0jZGVmaW5lIF9HRVRURVhUX0ggMQorLQorLSNpbmNsdWRlIDxzdGRpby5oPgorLQorLSNpZiBIQVZFX0xJTUlUU19IIHx8IF9MSUJDCistIyBpbmNsdWRlIDxsaW1pdHMuaD4KKy0jZW5kaWYKKy0KKy0vKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCistCistLyogVGhlIG1hZ2ljIG51bWJlciBvZiB0aGUgR05VIG1lc3NhZ2UgY2F0YWxvZyBmb3JtYXQuICAqLworLSNkZWZpbmUgX01BR0lDIDB4OTUwNDEyZGUKKy0jZGVmaW5lIF9NQUdJQ19TV0FQUEVEIDB4ZGUxMjA0OTUKKy0KKy0vKiBSZXZpc2lvbiBudW1iZXIgb2YgdGhlIGN1cnJlbnRseSB1c2VkIC5tbyAoYmluYXJ5KSBmaWxlIGZvcm1hdC4gICovCistI2RlZmluZSBNT19SRVZJU0lPTl9OVU1CRVIgMAorLQorLS8qIFRoZSBmb2xsb3dpbmcgY29udG9ydGlvbnMgYXJlIGFuIGF0dGVtcHQgdG8gdXNlIHRoZSBDIHByZXByb2Nlc3NvcgorLSAgIHRvIGRldGVybWluZSBhbiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlIHRoYXQgaXMgMzIgYml0cyB3aWRlLiAgQW4KKy0gICBhbHRlcm5hdGl2ZSBhcHByb2FjaCBpcyB0byB1c2UgYXV0b2NvbmYncyBBQ19DSEVDS19TSVpFT0YgbWFjcm8sIGJ1dAorLSAgIGRvaW5nIHRoYXQgd291bGQgcmVxdWlyZSB0aGF0IHRoZSBjb25maWd1cmUgc2NyaXB0IGNvbXBpbGUgYW5kICpydW4qCistICAgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlLiAgTG9jYWxseSBydW5uaW5nIGNyb3NzLWNvbXBpbGVkIGV4ZWN1dGFibGVzCistICAgaXMgdXN1YWxseSBub3QgcG9zc2libGUuICAqLworLQorLSNpZiBfX1NURENfXworLSMgZGVmaW5lIFVJTlRfTUFYXzMyX0JJVFMgNDI5NDk2NzI5NVUKKy0jZWxzZQorLSMgZGVmaW5lIFVJTlRfTUFYXzMyX0JJVFMgMHhGRkZGRkZGRgorLSNlbmRpZgorLQorLS8qIElmIFVJTlRfTUFYIGlzbid0IGRlZmluZWQsIGFzc3VtZSBpdCdzIGEgMzItYml0IHR5cGUuCistICAgVGhpcyBzaG91bGQgYmUgdmFsaWQgZm9yIGFsbCBzeXN0ZW1zIEdOVSBjYXJlcyBhYm91dCBiZWNhdXNlCistICAgdGhhdCBkb2Vzbid0IGluY2x1ZGUgMTYtYml0IHN5c3RlbXMsIGFuZCBvbmx5IG1vZGVybiBzeXN0ZW1zCistICAgKHRoYXQgY2VydGFpbmx5IGhhdmUgPGxpbWl0cy5oPikgaGF2ZSA2NCstYml0IGludGVncmFsIHR5cGVzLiAgKi8KKy0KKy0jaWZuZGVmIFVJTlRfTUFYCistIyBkZWZpbmUgVUlOVF9NQVggVUlOVF9NQVhfMzJfQklUUworLSNlbmRpZgorLQorLSNpZiBVSU5UX01BWCA9PSBVSU5UX01BWF8zMl9CSVRTCistdHlwZWRlZiB1bnNpZ25lZCBubHNfdWludDMyOworLSNlbHNlCistIyBpZiBVU0hSVF9NQVggPT0gVUlOVF9NQVhfMzJfQklUUworLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbmxzX3VpbnQzMjsKKy0jIGVsc2UKKy0jICBpZiBVTE9OR19NQVggPT0gVUlOVF9NQVhfMzJfQklUUworLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBubHNfdWludDMyOworLSMgIGVsc2UKKy0gIC8qIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBpbnRlbmRlZCB0byB0aHJvdyBhbiBlcnJvci4gIFVzaW5nICNlcnJvciBpcworLSAgICAgbm90IHBvcnRhYmxlIGVub3VnaC4gICovCistICAiQ2Fubm90IGRldGVybWluZSB1bnNpZ25lZCAzMi1iaXQgZGF0YSB0eXBlLiIKKy0jICBlbmRpZgorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0KKy0vKiBIZWFkZXIgZm9yIGJpbmFyeSAubW8gZmlsZSBmb3JtYXQuICAqLworLXN0cnVjdCBtb19maWxlX2hlYWRlcgorLXsKKy0gIC8qIFRoZSBtYWdpYyBudW1iZXIuICAqLworLSAgbmxzX3VpbnQzMiBtYWdpYzsKKy0gIC8qIFRoZSByZXZpc2lvbiBudW1iZXIgb2YgdGhlIGZpbGUgZm9ybWF0LiAgKi8KKy0gIG5sc191aW50MzIgcmV2aXNpb247CistICAvKiBUaGUgbnVtYmVyIG9mIHN0cmluZ3MgcGFpcnMuICAqLworLSAgbmxzX3VpbnQzMiBuc3RyaW5nczsKKy0gIC8qIE9mZnNldCBvZiB0YWJsZSB3aXRoIHN0YXJ0IG9mZnNldHMgb2Ygb3JpZ2luYWwgc3RyaW5ncy4gICovCistICBubHNfdWludDMyIG9yaWdfdGFiX29mZnNldDsKKy0gIC8qIE9mZnNldCBvZiB0YWJsZSB3aXRoIHN0YXJ0IG9mZnNldHMgb2YgdHJhbnNsYXRpb24gc3RyaW5ncy4gICovCistICBubHNfdWludDMyIHRyYW5zX3RhYl9vZmZzZXQ7CistICAvKiBTaXplIG9mIGhhc2hpbmcgdGFibGUuICAqLworLSAgbmxzX3VpbnQzMiBoYXNoX3RhYl9zaXplOworLSAgLyogT2Zmc2V0IG9mIGZpcnN0IGhhc2hpbmcgZW50cnkuICAqLworLSAgbmxzX3VpbnQzMiBoYXNoX3RhYl9vZmZzZXQ7CistfTsKKy0KKy1zdHJ1Y3Qgc3RyaW5nX2Rlc2MKKy17CistICAvKiBMZW5ndGggb2YgYWRkcmVzc2VkIHN0cmluZy4gICovCistICBubHNfdWludDMyIGxlbmd0aDsKKy0gIC8qIE9mZnNldCBvZiBzdHJpbmcgaW4gZmlsZS4gICovCistICBubHNfdWludDMyIG9mZnNldDsKKy19OworLQorLS8qIEBAIGJlZ2luIG9mIGVwaWxvZyBAQCAqLworLQorLSNlbmRpZgkvKiBnZXR0ZXh0LmggICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZ2V0dGV4dFAuaAkxOTk4LTA0LTI2IDA5OjIyOjM1LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9nZXR0ZXh0UC5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuNDI2NzM3Mjk2IC0wNDAwCitAQCAtMSwzMyArMSw1MyBAQAorLS8qIEhlYWRlciBkZXNjcmliaW5nIGludGVybmFscyBvZiBnZXR0ZXh0IGxpYnJhcnkKKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLyogSGVhZGVyIGRlc2NyaWJpbmcgaW50ZXJuYWxzIG9mIGxpYmludGwgbGlicmFyeS4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUuCisgCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICAgYW55IGxhdGVyIHZlcnNpb24uCisgCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKy0gICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworIAorICNpZm5kZWYgX0dFVFRFWFRQX0gKKyAjZGVmaW5lIF9HRVRURVhUUF9ICisgCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgkJLyogR2V0IHNpemVfdC4gICovCisrCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlICIuLi9pY29udi9nY29udl9pbnQuaCIKKysjZWxzZQorKyMgaWYgSEFWRV9JQ09OVgorKyMgIGluY2x1ZGUgPGljb252Lmg+CisrIyBlbmRpZgorKyNlbmRpZgorKworICNpbmNsdWRlICJsb2FkaW5mby5oIgorIAorKyNpbmNsdWRlICJnbW8uaCIJCS8qIEdldCBubHNfdWludDMyLiAgKi8KKysKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCistI2lmbmRlZiBQQVJBTVMKKy0jIGlmIF9fU1REQ19fCistIyAgZGVmaW5lIFBBUkFNUyhhcmdzKSBhcmdzCistIyBlbHNlCistIyAgZGVmaW5lIFBBUkFNUyhhcmdzKSAoKQorLSMgZW5kaWYKKysjaWZuZGVmIGludGVybmFsX2Z1bmN0aW9uCisrIyBkZWZpbmUgaW50ZXJuYWxfZnVuY3Rpb24KKysjZW5kaWYKKysKKysjaWZuZGVmIGF0dHJpYnV0ZV9oaWRkZW4KKysjIGRlZmluZSBhdHRyaWJ1dGVfaGlkZGVuCisrI2VuZGlmCisrCisrLyogVGVsbCB0aGUgY29tcGlsZXIgd2hlbiBhIGNvbmRpdGlvbmFsIG9yIGludGVnZXIgZXhwcmVzc2lvbiBpcworKyAgIGFsbW9zdCBhbHdheXMgdHJ1ZSBvciBhbG1vc3QgYWx3YXlzIGZhbHNlLiAgKi8KKysjaWZuZGVmIEhBVkVfQlVJTFRJTl9FWFBFQ1QKKysjIGRlZmluZSBfX2J1aWx0aW5fZXhwZWN0KGV4cHIsIHZhbCkgKGV4cHIpCisgI2VuZGlmCisgCisgI2lmbmRlZiBXCitAQCAtMzUsMzggKzU1LDE2MCBAQAorICNlbmRpZgorIAorIAorLXN0YXRpYyBubHNfdWludDMyIFNXQVAgUEFSQU1TICgobmxzX3VpbnQzMiBpKSk7CistCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxieXRlc3dhcC5oPgorKyMgZGVmaW5lIFNXQVAoaSkgYnN3YXBfMzIgKGkpCisrI2Vsc2UKKyBzdGF0aWMgaW5saW5lIG5sc191aW50MzIKKyBTV0FQIChpKQorICAgICAgbmxzX3VpbnQzMiBpOworIHsKKyAgIHJldHVybiAoaSA8PCAyNCkgfCAoKGkgJiAweGZmMDApIDw8IDgpIHwgKChpID4+IDgpICYgMHhmZjAwKSB8IChpID4+IDI0KTsKKyB9CisrI2VuZGlmCisrCisgCisrLyogSW4tbWVtb3J5IHJlcHJlc2VudGF0aW9uIG9mIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5nLiAgKi8KKytzdHJ1Y3Qgc3lzZGVwX3N0cmluZ19kZXNjCisreworKyAgLyogTGVuZ3RoIG9mIGFkZHJlc3NlZCBzdHJpbmcsIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgKi8KKysgIHNpemVfdCBsZW5ndGg7CisrICAvKiBQb2ludGVyIHRvIGFkZHJlc3NlZCBzdHJpbmcuICAqLworKyAgY29uc3QgY2hhciAqcG9pbnRlcjsKKyt9OworIAorKy8qIFRoZSByZXByZXNlbnRhdGlvbiBvZiBhbiBvcGVuZWQgbWVzc2FnZSBjYXRhbG9nLiAgKi8KKyBzdHJ1Y3QgbG9hZGVkX2RvbWFpbgorIHsKKysgIC8qIFBvaW50ZXIgdG8gbWVtb3J5IGNvbnRhaW5pbmcgdGhlIC5tbyBmaWxlLiAgKi8KKyAgIGNvbnN0IGNoYXIgKmRhdGE7CisrICAvKiAxIGlmIHRoZSBtZW1vcnkgaXMgbW1hcCgpZWQsIDAgaWYgdGhlIG1lbW9yeSBpcyBtYWxsb2MoKWVkLiAgKi8KKysgIGludCB1c2VfbW1hcDsKKysgIC8qIFNpemUgb2YgbW1hcCgpZWQgbWVtb3J5LiAgKi8KKysgIHNpemVfdCBtbWFwX3NpemU7CisrICAvKiAxIGlmIHRoZSAubW8gZmlsZSB1c2VzIGEgZGlmZmVyZW50IGVuZGlhbm5lc3MgdGhhbiB0aGlzIG1hY2hpbmUuICAqLworICAgaW50IG11c3Rfc3dhcDsKKysgIC8qIFBvaW50ZXIgdG8gYWRkaXRpb25hbCBtYWxsb2MoKWVkIG1lbW9yeS4gICovCisrICB2b2lkICptYWxsb2NlZDsKKysKKysgIC8qIE51bWJlciBvZiBzdGF0aWMgc3RyaW5ncyBwYWlycy4gICovCisgICBubHNfdWludDMyIG5zdHJpbmdzOworLSAgc3RydWN0IHN0cmluZ19kZXNjICpvcmlnX3RhYjsKKy0gIHN0cnVjdCBzdHJpbmdfZGVzYyAqdHJhbnNfdGFiOworKyAgLyogUG9pbnRlciB0byBkZXNjcmlwdG9ycyBvZiBvcmlnaW5hbCBzdHJpbmdzIGluIHRoZSBmaWxlLiAgKi8KKysgIGNvbnN0IHN0cnVjdCBzdHJpbmdfZGVzYyAqb3JpZ190YWI7CisrICAvKiBQb2ludGVyIHRvIGRlc2NyaXB0b3JzIG9mIHRyYW5zbGF0ZWQgc3RyaW5ncyBpbiB0aGUgZmlsZS4gICovCisrICBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2Rlc2MgKnRyYW5zX3RhYjsKKysKKysgIC8qIE51bWJlciBvZiBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZ3MgcGFpcnMuICAqLworKyAgbmxzX3VpbnQzMiBuX3N5c2RlcF9zdHJpbmdzOworKyAgLyogUG9pbnRlciB0byBkZXNjcmlwdG9ycyBvZiBvcmlnaW5hbCBzeXNkZXAgc3RyaW5ncy4gICovCisrICBjb25zdCBzdHJ1Y3Qgc3lzZGVwX3N0cmluZ19kZXNjICpvcmlnX3N5c2RlcF90YWI7CisrICAvKiBQb2ludGVyIHRvIGRlc2NyaXB0b3JzIG9mIHRyYW5zbGF0ZWQgc3lzZGVwIHN0cmluZ3MuICAqLworKyAgY29uc3Qgc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyAqdHJhbnNfc3lzZGVwX3RhYjsKKysKKysgIC8qIFNpemUgb2YgaGFzaCB0YWJsZS4gICovCisgICBubHNfdWludDMyIGhhc2hfc2l6ZTsKKy0gIG5sc191aW50MzIgKmhhc2hfdGFiOworKyAgLyogUG9pbnRlciB0byBoYXNoIHRhYmxlLiAgKi8KKysgIGNvbnN0IG5sc191aW50MzIgKmhhc2hfdGFiOworKyAgLyogMSBpZiB0aGUgaGFzaCB0YWJsZSB1c2VzIGEgZGlmZmVyZW50IGVuZGlhbm5lc3MgdGhhbiB0aGlzIG1hY2hpbmUuICAqLworKyAgaW50IG11c3Rfc3dhcF9oYXNoX3RhYjsKKysKKysgIGludCBjb2Rlc2V0X2NudHI7CisrI2lmZGVmIF9MSUJDCisrICBfX2djb252X3QgY29udjsKKysjZWxzZQorKyMgaWYgSEFWRV9JQ09OVgorKyAgaWNvbnZfdCBjb252OworKyMgZW5kaWYKKysjZW5kaWYKKysgIGNoYXIgKipjb252X3RhYjsKKysKKysgIHN0cnVjdCBleHByZXNzaW9uICpwbHVyYWw7CisrICB1bnNpZ25lZCBsb25nIGludCBucGx1cmFsczsKKyB9OworIAorKy8qIFdlIHdhbnQgdG8gYWxsb2NhdGUgYSBzdHJpbmcgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0LiAgQnV0IElTTyBDCisrICAgZG9lc24ndCBhbGxvdyB6ZXJvIHNpemVkIGFycmF5cy4gICovCisrI2lmZGVmIF9fR05VQ19fCisrIyBkZWZpbmUgWkVSTyAwCisrI2Vsc2UKKysjIGRlZmluZSBaRVJPIDEKKysjZW5kaWYKKysKKysvKiBBIHNldCBvZiBzZXR0aW5ncyBib3VuZCB0byBhIG1lc3NhZ2UgZG9tYWluLiAgVXNlZCB0byBzdG9yZSBzZXR0aW5ncworKyAgIGZyb20gYmluZHRleHRkb21haW4oKSBhbmQgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQoKS4gICovCisgc3RydWN0IGJpbmRpbmcKKyB7CisgICBzdHJ1Y3QgYmluZGluZyAqbmV4dDsKKy0gIGNoYXIgKmRvbWFpbm5hbWU7CisgICBjaGFyICpkaXJuYW1lOworKyAgaW50IGNvZGVzZXRfY250cjsJLyogSW5jcmVtZW50ZWQgZWFjaCB0aW1lIGNvZGVzZXQgY2hhbmdlcy4gICovCisrICBjaGFyICpjb2Rlc2V0OworKyAgY2hhciBkb21haW5uYW1lW1pFUk9dOworIH07CisgCistc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqX25sX2ZpbmRfZG9tYWluIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZGlybmFtZSwKKy0JCQkJCQkgY2hhciAqX19sb2NhbGUsCistCQkJCQkJIGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSkpOworLXZvaWQgX25sX2xvYWRfZG9tYWluIFBBUkFNUyAoKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKl9fZG9tYWluKSk7CisrLyogQSBjb3VudGVyIHdoaWNoIGlzIGluY3JlbWVudGVkIGVhY2ggdGltZSBzb21lIHByZXZpb3VzIHRyYW5zbGF0aW9ucworKyAgIGJlY29tZSBpbnZhbGlkLgorKyAgIFRoaXMgdmFyaWFibGUgaXMgcGFydCBvZiB0aGUgZXh0ZXJuYWwgQUJJIG9mIHRoZSBHTlUgbGliaW50bC4gICovCisrZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworKworKyNpZm5kZWYgX0xJQkMKKytjb25zdCBjaGFyICpfbmxfbG9jYWxlX25hbWUgKGludCBjYXRlZ29yeSwgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lKTsKKysjZW5kaWYKKysKKytzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpfbmxfZmluZF9kb21haW4gKGNvbnN0IGNoYXIgKl9fZGlybmFtZSwgY2hhciAqX19sb2NhbGUsCisrCQkJCQkgY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCQkJIHN0cnVjdCBiaW5kaW5nICpfX2RvbWFpbmJpbmRpbmcpCisrICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKyt2b2lkIF9ubF9sb2FkX2RvbWFpbiAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqX19kb21haW4sCisrCQkgICAgICBzdHJ1Y3QgYmluZGluZyAqX19kb21haW5iaW5kaW5nKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247Cisrdm9pZCBfbmxfdW5sb2FkX2RvbWFpbiAoc3RydWN0IGxvYWRlZF9kb21haW4gKl9fZG9tYWluKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisrY29uc3QgY2hhciAqX25sX2luaXRfZG9tYWluX2NvbnYgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKl9fZG9tYWluX2ZpbGUsCisrCQkJCSAgc3RydWN0IGxvYWRlZF9kb21haW4gKl9fZG9tYWluLAorKwkJCQkgIHN0cnVjdCBiaW5kaW5nICpfX2RvbWFpbmJpbmRpbmcpCisrICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKyt2b2lkIF9ubF9mcmVlX2RvbWFpbl9jb252IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqX19kb21haW4pCisrICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKysKKytjaGFyICpfbmxfZmluZF9tc2cgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbl9maWxlLAorKwkJICAgIHN0cnVjdCBiaW5kaW5nICpkb21haW5iaW5kaW5nLCBjb25zdCBjaGFyICptc2dpZCwKKysJCSAgICBzaXplX3QgKmxlbmd0aHApCisrICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKysKKysjaWZkZWYgX0xJQkMKKytleHRlcm4gY2hhciAqX19nZXR0ZXh0IChjb25zdCBjaGFyICpfX21zZ2lkKTsKKytleHRlcm4gY2hhciAqX19kZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkKTsKKytleHRlcm4gY2hhciAqX19kY2dldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCwKKysJCQkgIGludCBfX2NhdGVnb3J5KTsKKytleHRlcm4gY2hhciAqX19uZ2V0dGV4dCAoY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorKwkJCSB1bnNpZ25lZCBsb25nIGludCBfX24pOworK2V4dGVybiBjaGFyICpfX2RuZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCSAgY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorKwkJCSAgdW5zaWduZWQgbG9uZyBpbnQgbik7CisrZXh0ZXJuIGNoYXIgKl9fZGNuZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCSAgIGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKysJCQkgICB1bnNpZ25lZCBsb25nIGludCBfX24sIGludCBfX2NhdGVnb3J5KTsKKytleHRlcm4gY2hhciAqX19kY2lnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJICAgY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorKwkJCSAgIGludCBfX3BsdXJhbCwgdW5zaWduZWQgbG9uZyBpbnQgX19uLAorKwkJCSAgIGludCBfX2NhdGVnb3J5KTsKKytleHRlcm4gY2hhciAqX190ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUpOworK2V4dGVybiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJICAgICAgIGNvbnN0IGNoYXIgKl9fZGlybmFtZSk7CisrZXh0ZXJuIGNoYXIgKl9fYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQkJCWNvbnN0IGNoYXIgKl9fY29kZXNldCk7CisrI2Vsc2UKKysvKiBEZWNsYXJlIHRoZSBleHBvcnRlZCBsaWJpbnRsXyogZnVuY3Rpb25zLCBpbiBhIHdheSB0aGF0IGFsbG93cyB1cyB0bworKyAgIGNhbGwgdGhlbSB1bmRlciB0aGVpciByZWFsIG5hbWUuICAqLworKyMgdW5kZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCisrIyB1bmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKysjIGRlZmluZSBfSU5UTF9SRURJUkVDVF9NQUNST1MKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKytleHRlcm4gY2hhciAqbGliaW50bF9kY2lnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJCSBjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisrCQkJCSBpbnQgX19wbHVyYWwsIHVuc2lnbmVkIGxvbmcgaW50IF9fbiwKKysJCQkJIGludCBfX2NhdGVnb3J5KTsKKysjZW5kaWYKKyAKKyAvKiBAQCBiZWdpbiBvZiBlcGlsb2cgQEAgKi8KKyAKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9nbW8uaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9nbW8uaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjQzMTczNjUzNiAtMDQwMAorQEAgLTAsMCArMSwxNDkgQEAKKysvKiBEZXNjcmlwdGlvbiBvZiBHTlUgbWVzc2FnZSBjYXRhbG9nIGZvcm1hdDogZ2VuZXJhbCBmaWxlIGxheW91dC4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTcsIDIwMDAtMjAwMiwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfR0VUVEVYVF9ICisrI2RlZmluZSBfR0VUVEVYVF9IIDEKKysKKysjaW5jbHVkZSA8bGltaXRzLmg+CisrCisrLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworKworKy8qIFRoZSBtYWdpYyBudW1iZXIgb2YgdGhlIEdOVSBtZXNzYWdlIGNhdGFsb2cgZm9ybWF0LiAgKi8KKysjZGVmaW5lIF9NQUdJQyAweDk1MDQxMmRlCisrI2RlZmluZSBfTUFHSUNfU1dBUFBFRCAweGRlMTIwNDk1CisrCisrLyogUmV2aXNpb24gbnVtYmVyIG9mIHRoZSBjdXJyZW50bHkgdXNlZCAubW8gKGJpbmFyeSkgZmlsZSBmb3JtYXQuICAqLworKyNkZWZpbmUgTU9fUkVWSVNJT05fTlVNQkVSIDAKKysjZGVmaW5lIE1PX1JFVklTSU9OX05VTUJFUl9XSVRIX1NZU0RFUF9JIDEKKysKKysvKiBUaGUgZm9sbG93aW5nIGNvbnRvcnRpb25zIGFyZSBhbiBhdHRlbXB0IHRvIHVzZSB0aGUgQyBwcmVwcm9jZXNzb3IKKysgICB0byBkZXRlcm1pbmUgYW4gdW5zaWduZWQgaW50ZWdyYWwgdHlwZSB0aGF0IGlzIDMyIGJpdHMgd2lkZS4gIEFuCisrICAgYWx0ZXJuYXRpdmUgYXBwcm9hY2ggaXMgdG8gdXNlIGF1dG9jb25mJ3MgQUNfQ0hFQ0tfU0laRU9GIG1hY3JvLCBidXQKKysgICBhcyBvZiB2ZXJzaW9uIGF1dG9jb25mLTIuMTMsIHRoZSBBQ19DSEVDS19TSVpFT0YgbWFjcm8gZG9lc24ndCB3b3JrCisrICAgd2hlbiBjcm9zcy1jb21waWxpbmcuICAqLworKworKyNpZiBfX1NURENfXworKyMgZGVmaW5lIFVJTlRfTUFYXzMyX0JJVFMgNDI5NDk2NzI5NVUKKysjZWxzZQorKyMgZGVmaW5lIFVJTlRfTUFYXzMyX0JJVFMgMHhGRkZGRkZGRgorKyNlbmRpZgorKworKy8qIElmIFVJTlRfTUFYIGlzbid0IGRlZmluZWQsIGFzc3VtZSBpdCdzIGEgMzItYml0IHR5cGUuCisrICAgVGhpcyBzaG91bGQgYmUgdmFsaWQgZm9yIGFsbCBzeXN0ZW1zIEdOVSBjYXJlcyBhYm91dCBiZWNhdXNlCisrICAgdGhhdCBkb2Vzbid0IGluY2x1ZGUgMTYtYml0IHN5c3RlbXMsIGFuZCBvbmx5IG1vZGVybiBzeXN0ZW1zCisrICAgKHRoYXQgY2VydGFpbmx5IGhhdmUgPGxpbWl0cy5oPikgaGF2ZSA2NCstYml0IGludGVncmFsIHR5cGVzLiAgKi8KKysKKysjaWZuZGVmIFVJTlRfTUFYCisrIyBkZWZpbmUgVUlOVF9NQVggVUlOVF9NQVhfMzJfQklUUworKyNlbmRpZgorKworKyNpZiBVSU5UX01BWCA9PSBVSU5UX01BWF8zMl9CSVRTCisrdHlwZWRlZiB1bnNpZ25lZCBubHNfdWludDMyOworKyNlbHNlCisrIyBpZiBVU0hSVF9NQVggPT0gVUlOVF9NQVhfMzJfQklUUworK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgbmxzX3VpbnQzMjsKKysjIGVsc2UKKysjICBpZiBVTE9OR19NQVggPT0gVUlOVF9NQVhfMzJfQklUUworK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBubHNfdWludDMyOworKyMgIGVsc2UKKysgIC8qIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBpbnRlbmRlZCB0byB0aHJvdyBhbiBlcnJvci4gIFVzaW5nICNlcnJvciBpcworKyAgICAgbm90IHBvcnRhYmxlIGVub3VnaC4gICovCisrICAiQ2Fubm90IGRldGVybWluZSB1bnNpZ25lZCAzMi1iaXQgZGF0YSB0eXBlLiIKKysjICBlbmRpZgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysKKysvKiBIZWFkZXIgZm9yIGJpbmFyeSAubW8gZmlsZSBmb3JtYXQuICAqLworK3N0cnVjdCBtb19maWxlX2hlYWRlcgorK3sKKysgIC8qIFRoZSBtYWdpYyBudW1iZXIuICAqLworKyAgbmxzX3VpbnQzMiBtYWdpYzsKKysgIC8qIFRoZSByZXZpc2lvbiBudW1iZXIgb2YgdGhlIGZpbGUgZm9ybWF0LiAgKi8KKysgIG5sc191aW50MzIgcmV2aXNpb247CisrCisrICAvKiBUaGUgZm9sbG93aW5nIGFyZSBvbmx5IHVzZWQgaW4gLm1vIGZpbGVzIHdpdGggbWFqb3IgcmV2aXNpb24gMCBvciAxLiAgKi8KKysKKysgIC8qIFRoZSBudW1iZXIgb2Ygc3RyaW5ncyBwYWlycy4gICovCisrICBubHNfdWludDMyIG5zdHJpbmdzOworKyAgLyogT2Zmc2V0IG9mIHRhYmxlIHdpdGggc3RhcnQgb2Zmc2V0cyBvZiBvcmlnaW5hbCBzdHJpbmdzLiAgKi8KKysgIG5sc191aW50MzIgb3JpZ190YWJfb2Zmc2V0OworKyAgLyogT2Zmc2V0IG9mIHRhYmxlIHdpdGggc3RhcnQgb2Zmc2V0cyBvZiB0cmFuc2xhdGVkIHN0cmluZ3MuICAqLworKyAgbmxzX3VpbnQzMiB0cmFuc190YWJfb2Zmc2V0OworKyAgLyogU2l6ZSBvZiBoYXNoIHRhYmxlLiAgKi8KKysgIG5sc191aW50MzIgaGFzaF90YWJfc2l6ZTsKKysgIC8qIE9mZnNldCBvZiBmaXJzdCBoYXNoIHRhYmxlIGVudHJ5LiAgKi8KKysgIG5sc191aW50MzIgaGFzaF90YWJfb2Zmc2V0OworKworKyAgLyogVGhlIGZvbGxvd2luZyBhcmUgb25seSB1c2VkIGluIC5tbyBmaWxlcyB3aXRoIG1pbm9yIHJldmlzaW9uID49IDEuICAqLworKworKyAgLyogVGhlIG51bWJlciBvZiBzeXN0ZW0gZGVwZW5kZW50IHNlZ21lbnRzLiAgKi8KKysgIG5sc191aW50MzIgbl9zeXNkZXBfc2VnbWVudHM7CisrICAvKiBPZmZzZXQgb2YgdGFibGUgZGVzY3JpYmluZyBzeXN0ZW0gZGVwZW5kZW50IHNlZ21lbnRzLiAgKi8KKysgIG5sc191aW50MzIgc3lzZGVwX3NlZ21lbnRzX29mZnNldDsKKysgIC8qIFRoZSBudW1iZXIgb2Ygc3lzdGVtIGRlcGVuZGVudCBzdHJpbmdzIHBhaXJzLiAgKi8KKysgIG5sc191aW50MzIgbl9zeXNkZXBfc3RyaW5nczsKKysgIC8qIE9mZnNldCBvZiB0YWJsZSB3aXRoIHN0YXJ0IG9mZnNldHMgb2Ygb3JpZ2luYWwgc3lzZGVwIHN0cmluZ3MuICAqLworKyAgbmxzX3VpbnQzMiBvcmlnX3N5c2RlcF90YWJfb2Zmc2V0OworKyAgLyogT2Zmc2V0IG9mIHRhYmxlIHdpdGggc3RhcnQgb2Zmc2V0cyBvZiB0cmFuc2xhdGVkIHN5c2RlcCBzdHJpbmdzLiAgKi8KKysgIG5sc191aW50MzIgdHJhbnNfc3lzZGVwX3RhYl9vZmZzZXQ7CisrfTsKKysKKysvKiBEZXNjcmlwdG9yIGZvciBzdGF0aWMgc3RyaW5nIGNvbnRhaW5lZCBpbiB0aGUgYmluYXJ5IC5tbyBmaWxlLiAgKi8KKytzdHJ1Y3Qgc3RyaW5nX2Rlc2MKKyt7CisrICAvKiBMZW5ndGggb2YgYWRkcmVzc2VkIHN0cmluZywgbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgKi8KKysgIG5sc191aW50MzIgbGVuZ3RoOworKyAgLyogT2Zmc2V0IG9mIHN0cmluZyBpbiBmaWxlLiAgKi8KKysgIG5sc191aW50MzIgb2Zmc2V0OworK307CisrCisrLyogVGhlIGZvbGxvd2luZyBhcmUgb25seSB1c2VkIGluIC5tbyBmaWxlcyB3aXRoIG1pbm9yIHJldmlzaW9uID49IDEuICAqLworKworKy8qIERlc2NyaXB0b3IgZm9yIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5nIHNlZ21lbnQuICAqLworK3N0cnVjdCBzeXNkZXBfc2VnbWVudAorK3sKKysgIC8qIExlbmd0aCBvZiBhZGRyZXNzZWQgc3RyaW5nLCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gICovCisrICBubHNfdWludDMyIGxlbmd0aDsKKysgIC8qIE9mZnNldCBvZiBzdHJpbmcgaW4gZmlsZS4gICovCisrICBubHNfdWludDMyIG9mZnNldDsKKyt9OworKworKy8qIERlc2NyaXB0b3IgZm9yIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5nLiAgKi8KKytzdHJ1Y3Qgc3lzZGVwX3N0cmluZworK3sKKysgIC8qIE9mZnNldCBvZiBzdGF0aWMgc3RyaW5nIHNlZ21lbnRzIGluIGZpbGUuICAqLworKyAgbmxzX3VpbnQzMiBvZmZzZXQ7CisrICAvKiBBbHRlcm5hdGluZyBzZXF1ZW5jZSBvZiBzdGF0aWMgYW5kIHN5c3RlbSBkZXBlbmRlbnQgc2VnbWVudHMuCisrICAgICBUaGUgbGFzdCBzZWdtZW50IGlzIGEgc3RhdGljIHNlZ21lbnQsIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgKi8KKysgIHN0cnVjdCBzZWdtZW50X3BhaXIKKysgIHsKKysgICAgLyogU2l6ZSBvZiBzdGF0aWMgc2VnbWVudC4gICovCisrICAgIG5sc191aW50MzIgc2Vnc2l6ZTsKKysgICAgLyogUmVmZXJlbmNlIHRvIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5nIHNlZ21lbnQsIG9yIH4wIGF0IHRoZSBlbmQuICAqLworKyAgICBubHNfdWludDMyIHN5c2RlcHJlZjsKKysgIH0gc2VnbWVudHNbMV07CisrfTsKKysKKysvKiBNYXJrZXIgZm9yIHRoZSBlbmQgb2YgdGhlIHNlZ21lbnRzW10gYXJyYXkuICBUaGlzIGhhcyB0aGUgdmFsdWUgMHhGRkZGRkZGRiwKKysgICByZWdhcmRsZXNzIHdoZXRoZXIgJ2ludCcgaXMgMTYgYml0LCAzMiBiaXQsIG9yIDY0IGJpdC4gICovCisrI2RlZmluZSBTRUdNRU5UU19FTkQgKChubHNfdWludDMyKSB+MCkKKysKKysvKiBAQCBiZWdpbiBvZiBlcGlsb2cgQEAgKi8KKysKKysjZW5kaWYJLyogZ2V0dGV4dC5oICAqLworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2hhc2gtc3RyaW5nLmgJMTk5OC0wNC0yNiAwOToyMjozNi4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvaGFzaC1zdHJpbmcuaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjQzNjczNTc3NiAtMDQwMAorQEAgLTEsMzUgKzEsMjMgQEAKKy0vKiBJbXBsZW1lbnRzIGEgc3RyaW5nIGhhc2hpbmcgZnVuY3Rpb24uCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8qIERlc2NyaXB0aW9uIG9mIEdOVSBtZXNzYWdlIGNhdGFsb2cgZm9ybWF0OiBzdHJpbmcgaGFzaGluZyBmdW5jdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTctMTk5OCwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LAorLSAgIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKy0gICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCistCistI2lmZGVmIEhBVkVfVkFMVUVTX0gKKy0jIGluY2x1ZGUgPHZhbHVlcy5oPgorLSNlbmRpZgorKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworIAorIC8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKyAKKy0jaWZuZGVmIFBBUkFNUworLSMgaWYgX19TVERDX18KKy0jICBkZWZpbmUgUEFSQU1TKEFyZ3MpIEFyZ3MKKy0jIGVsc2UKKy0jICBkZWZpbmUgUEFSQU1TKEFyZ3MpICgpCistIyBlbmRpZgorLSNlbmRpZgorLQorIC8qIFdlIGFzc3VtZSB0byBoYXZlIGB1bnNpZ25lZCBsb25nIGludCcgdmFsdWUgd2l0aCBhdCBsZWFzdCAzMiBiaXRzLiAgKi8KKyAjZGVmaW5lIEhBU0hXT1JEQklUUyAzMgorIAorQEAgLTM3LDExICsyNSw4IEBACisgLyogRGVmaW5lcyB0aGUgc28gY2FsbGVkIGBoYXNocGp3JyBmdW5jdGlvbiBieSBQLkouIFdlaW5iZXJnZXIKKyAgICBbc2VlIEFoby9TZXRoaS9VbGxtYW4sIENPTVBJTEVSUzogUHJpbmNpcGxlcywgVGVjaG5pcXVlcyBhbmQgVG9vbHMsCisgICAgMTk4NiwgMTk4NyBCZWxsIFRlbGVwaG9uZSBMYWJvcmF0b3JpZXMsIEluYy5dICAqLworLXN0YXRpYyB1bnNpZ25lZCBsb25nIGhhc2hfc3RyaW5nIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fc3RyX3BhcmFtKSk7CistCistc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCistaGFzaF9zdHJpbmcgKHN0cl9wYXJhbSkKKy0gICAgIGNvbnN0IGNoYXIgKnN0cl9wYXJhbTsKKytzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaW50CisraGFzaF9zdHJpbmcgKGNvbnN0IGNoYXIgKnN0cl9wYXJhbSkKKyB7CisgICB1bnNpZ25lZCBsb25nIGludCBodmFsLCBnOworICAgY29uc3QgY2hhciAqc3RyID0gc3RyX3BhcmFtOworQEAgLTUxLDggKzM2LDggQEAKKyAgIHdoaWxlICgqc3RyICE9ICdcMCcpCisgICAgIHsKKyAgICAgICBodmFsIDw8PSA0OworLSAgICAgIGh2YWwgKz0gKHVuc2lnbmVkIGxvbmcpICpzdHIrKzsKKy0gICAgICBnID0gaHZhbCAmICgodW5zaWduZWQgbG9uZykgMHhmIDw8IChIQVNIV09SREJJVFMgLSA0KSk7CisrICAgICAgaHZhbCArPSAodW5zaWduZWQgY2hhcikgKnN0cisrOworKyAgICAgIGcgPSBodmFsICYgKCh1bnNpZ25lZCBsb25nIGludCkgMHhmIDw8IChIQVNIV09SREJJVFMgLSA0KSk7CisgICAgICAgaWYgKGcgIT0gMCkKKyAJeworIAkgIGh2YWwgXj0gZyA+PiAoSEFTSFdPUkRCSVRTIC0gOCk7CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvaW50bC1jb21wYXQuYwkxOTk4LTA0LTI2IDA5OjIwOjUyLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9pbnRsLWNvbXBhdC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNDQxNzM1MDE2IC0wNDAwCitAQCAtMSw3NiArMSwxMzEgQEAKKyAvKiBpbnRsLWNvbXBhdC5jIC0gU3R1YiBmdW5jdGlvbnMgdG8gY2FsbCBnZXR0ZXh0IGZ1bmN0aW9ucyBmcm9tIEdOVSBnZXR0ZXh0CisgICAgTGlicmFyeS4KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMTk5NSwgMjAwMC0yMDAzIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKy1UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLWFueSBsYXRlciB2ZXJzaW9uLgorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKy1UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy1idXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy1HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy1Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKyAKKyAjaWZkZWYgSEFWRV9DT05GSUdfSAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistI2luY2x1ZGUgImxpYmdldHRleHQuaCIKKysjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCisrLyogVGhpcyBmaWxlIHJlZGlyZWN0cyB0aGUgZ2V0dGV4dCBmdW5jdGlvbnMgKHdpdGhvdXQgcHJlZml4KSB0byB0aG9zZQorKyAgIGRlZmluZWQgaW4gdGhlIGluY2x1ZGVkIEdOVSBsaWJpbnRsIGxpYnJhcnkgKHdpdGggImxpYmludGxfIiBwcmVmaXgpLgorKyAgIEl0IGlzIGNvbXBpbGVkIGludG8gbGliaW50bCBpbiBvcmRlciB0byBtYWtlIHRoZSBBTV9HTlVfR0VUVEVYVCB0ZXN0CisrICAgb2YgZ2V0dGV4dCA8PSAwLjExLjIgd29yayB3aXRoIHRoZSBsaWJpbnRsIGxpYnJhcnkgPj0gMC4xMS4zIHdoaWNoCisrICAgaGFzIHRoZSByZWRpcmVjdGlvbnMgcHJpbWFyaWx5IGluIHRoZSA8bGliaW50bC5oPiBpbmNsdWRlIGZpbGUuCisrICAgSXQgaXMgYWxzbyBjb21waWxlZCBpbnRvIGxpYmdudWludGwgc28gdGhhdCBsaWJnbnVpbnRsLnNvIGNhbiBiZSB1c2VkCisrICAgYXMgTERfUFJFTE9BRGFibGUgbGlicmFyeSBvbiBnbGliYyBzeXN0ZW1zLCB0byBwcm92aWRlIHRoZSBleHRyYQorKyAgIGZlYXR1cmVzIHRoYXQgdGhlIGZ1bmN0aW9ucyBpbiB0aGUgbGliYyBkb24ndCBoYXZlIChuYW1lbHksIGxvZ2dpbmcpLiAgKi8KKysKKyAKKyAjdW5kZWYgZ2V0dGV4dAorICN1bmRlZiBkZ2V0dGV4dAorICN1bmRlZiBkY2dldHRleHQKKysjdW5kZWYgbmdldHRleHQKKysjdW5kZWYgZG5nZXR0ZXh0CisrI3VuZGVmIGRjbmdldHRleHQKKyAjdW5kZWYgdGV4dGRvbWFpbgorICN1bmRlZiBiaW5kdGV4dGRvbWFpbgorKyN1bmRlZiBiaW5kX3RleHRkb21haW5fY29kZXNldAorKworKworKy8qIFdoZW4gYnVpbGRpbmcgYSBETEwsIHdlIG11c3QgZXhwb3J0IHNvbWUgZnVuY3Rpb25zLiAgTm90ZSB0aGF0IGJlY2F1c2UKKysgICB0aGUgZnVuY3Rpb25zIGFyZSBvbmx5IGRlZmluZWQgZm9yIGJpbmFyeSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB3ZQorKyAgIGRvbid0IG5lZWQgdG8gdXNlIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSBpbiBhbnkgY2FzZS4gICovCisrI2lmIGRlZmluZWQgX01TQ19WRVIgJiYgQlVJTERJTkdfRExMCisrIyBkZWZpbmUgRExMX0VYUE9SVEVEIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorKyNlbHNlCisrIyBkZWZpbmUgRExMX0VYUE9SVEVECisrI2VuZGlmCisgCisgCisrRExMX0VYUE9SVEVECisgY2hhciAqCistYmluZHRleHRkb21haW4gKGRvbWFpbm5hbWUsIGRpcm5hbWUpCistICAgICBjb25zdCBjaGFyICpkb21haW5uYW1lOworLSAgICAgY29uc3QgY2hhciAqZGlybmFtZTsKKytnZXR0ZXh0IChjb25zdCBjaGFyICptc2dpZCkKKyB7CistICByZXR1cm4gYmluZHRleHRkb21haW5fXyAoZG9tYWlubmFtZSwgZGlybmFtZSk7CisrICByZXR1cm4gbGliaW50bF9nZXR0ZXh0IChtc2dpZCk7CisgfQorIAorIAorK0RMTF9FWFBPUlRFRAorIGNoYXIgKgorLWRjZ2V0dGV4dCAoZG9tYWlubmFtZSwgbXNnaWQsIGNhdGVnb3J5KQorLSAgICAgY29uc3QgY2hhciAqZG9tYWlubmFtZTsKKy0gICAgIGNvbnN0IGNoYXIgKm1zZ2lkOworLSAgICAgaW50IGNhdGVnb3J5OworK2RnZXR0ZXh0IChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICptc2dpZCkKKyB7CistICByZXR1cm4gZGNnZXR0ZXh0X18gKGRvbWFpbm5hbWUsIG1zZ2lkLCBjYXRlZ29yeSk7CisrICByZXR1cm4gbGliaW50bF9kZ2V0dGV4dCAoZG9tYWlubmFtZSwgbXNnaWQpOworIH0KKyAKKyAKKytETExfRVhQT1JURUQKKyBjaGFyICoKKy1kZ2V0dGV4dCAoZG9tYWlubmFtZSwgbXNnaWQpCistICAgICBjb25zdCBjaGFyICpkb21haW5uYW1lOworLSAgICAgY29uc3QgY2hhciAqbXNnaWQ7CisrZGNnZXR0ZXh0IChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KQorIHsKKy0gIHJldHVybiBkZ2V0dGV4dF9fIChkb21haW5uYW1lLCBtc2dpZCk7CisrICByZXR1cm4gbGliaW50bF9kY2dldHRleHQgKGRvbWFpbm5hbWUsIG1zZ2lkLCBjYXRlZ29yeSk7CisgfQorIAorIAorK0RMTF9FWFBPUlRFRAorIGNoYXIgKgorLWdldHRleHQgKG1zZ2lkKQorLSAgICAgY29uc3QgY2hhciAqbXNnaWQ7CisrbmdldHRleHQgKGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBuKQorIHsKKy0gIHJldHVybiBnZXR0ZXh0X18gKG1zZ2lkKTsKKysgIHJldHVybiBsaWJpbnRsX25nZXR0ZXh0IChtc2dpZDEsIG1zZ2lkMiwgbik7CisgfQorIAorIAorK0RMTF9FWFBPUlRFRAorIGNoYXIgKgorLXRleHRkb21haW4gKGRvbWFpbm5hbWUpCistICAgICBjb25zdCBjaGFyICpkb21haW5uYW1lOworK2RuZ2V0dGV4dCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJICAgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IG4pCisgeworLSAgcmV0dXJuIHRleHRkb21haW5fXyAoZG9tYWlubmFtZSk7CisrICByZXR1cm4gbGliaW50bF9kbmdldHRleHQgKGRvbWFpbm5hbWUsIG1zZ2lkMSwgbXNnaWQyLCBuKTsKKyt9CisrCisrCisrRExMX0VYUE9SVEVECisrY2hhciAqCisrZGNuZ2V0dGV4dCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJICAgIGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBuLAorKwkgICAgaW50IGNhdGVnb3J5KQorK3sKKysgIHJldHVybiBsaWJpbnRsX2RjbmdldHRleHQgKGRvbWFpbm5hbWUsIG1zZ2lkMSwgbXNnaWQyLCBuLCBjYXRlZ29yeSk7CisrfQorKworKworK0RMTF9FWFBPUlRFRAorK2NoYXIgKgorK3RleHRkb21haW4gKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpCisreworKyAgcmV0dXJuIGxpYmludGxfdGV4dGRvbWFpbiAoZG9tYWlubmFtZSk7CisrfQorKworKworK0RMTF9FWFBPUlRFRAorK2NoYXIgKgorK2JpbmR0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICpkaXJuYW1lKQorK3sKKysgIHJldHVybiBsaWJpbnRsX2JpbmR0ZXh0ZG9tYWluIChkb21haW5uYW1lLCBkaXJuYW1lKTsKKyt9CisrCisrCisrRExMX0VYUE9SVEVECisrY2hhciAqCisrYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKmNvZGVzZXQpCisreworKyAgcmV0dXJuIGxpYmludGxfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKGRvbWFpbm5hbWUsIGNvZGVzZXQpOworIH0KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9sMTBuZmxpc3QuYwkxOTk4LTA0LTI2IDA5OjIyOjM3LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9sMTBuZmxpc3QuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjQ1NzczMjU4NCAtMDQwMAorQEAgLTEsNTIgKzEsNDAgQEAKKy0vKiBIYW5kbGUgbGlzdCBvZiBuZWVkZWQgbWVzc2FnZSBjYXRhbG9ncworLSAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0gICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgMTk5NS4KKysvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIENvbnRyaWJ1dGVkIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgMTk5NS4KKyAKKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorLSAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrLyogVGVsbCBnbGliYydzIDxzdHJpbmcuaD4gdG8gcHJvdmlkZSBhIHByb3RvdHlwZSBmb3Igc3RwY3B5KCkuCisrICAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4gYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlCisrICAgPGZlYXR1cmVzLmg+LCBhbmQgb25jZSA8ZmVhdHVyZXMuaD4gaGFzIGJlZW4gaW5jbHVkZWQsIGl0J3MgdG9vIGxhdGUuICAqLworKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjIGRlZmluZSBfR05VX1NPVVJDRQkxCisrI2VuZGlmCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLQorLSNpZiBkZWZpbmVkIEhBVkVfU1RSSU5HX0ggfHwgZGVmaW5lZCBfTElCQworLSMgaWZuZGVmIF9HTlVfU09VUkNFCistIyAgZGVmaW5lIF9HTlVfU09VUkNFCTEKKy0jIGVuZGlmCistIyBpbmNsdWRlIDxzdHJpbmcuaD4KKy0jZWxzZQorLSMgaW5jbHVkZSA8c3RyaW5ncy5oPgorLSMgaWZuZGVmIG1lbWNweQorLSMgIGRlZmluZSBtZW1jcHkoRHN0LCBTcmMsIE51bSkgYmNvcHkgKFNyYywgRHN0LCBOdW0pCistIyBlbmRpZgorLSNlbmRpZgorLSNpZiAhSEFWRV9TVFJDSFIgJiYgIWRlZmluZWQgX0xJQkMKKy0jIGlmbmRlZiBzdHJjaHIKKy0jICBkZWZpbmUgc3RyY2hyIGluZGV4CistIyBlbmRpZgorLSNlbmRpZgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfQVJHWl9ICisgIyBpbmNsdWRlIDxhcmd6Lmg+CisgI2VuZGlmCisgI2luY2x1ZGUgPGN0eXBlLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLQorLSNpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzdGRsaWIuaD4KKy0jZW5kaWYKKysjaW5jbHVkZSA8c3RkbGliLmg+CisgCisgI2luY2x1ZGUgImxvYWRpbmZvLmgiCisgCitAQCAtNjUsMjMgKzUzLDM5IEBACisgLyogUmVuYW1lIHRoZSBub24gQU5TSSBDIGZ1bmN0aW9ucy4gIFRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkCisgICAgYmVjYXVzZSBzb21lIEFOU0kgQyBmdW5jdGlvbnMgd2lsbCByZXF1aXJlIGxpbmtpbmcgd2l0aCB0aGlzIG9iamVjdAorICAgIGZpbGUgYW5kIHRoZSBuYW1lIHNwYWNlIG11c3Qgbm90IGJlIHBvbGx1dGVkLiAgKi8KKy0jIGRlZmluZSBzdHBjcHkoZGVzdCwgc3JjKSBfX3N0cGNweShkZXN0LCBzcmMpCisrIyBpZm5kZWYgc3RwY3B5CisrIyAgZGVmaW5lIHN0cGNweShkZXN0LCBzcmMpIF9fc3RwY3B5KGRlc3QsIHNyYykKKysjIGVuZGlmCisgI2Vsc2UKKyAjIGlmbmRlZiBIQVZFX1NUUENQWQorLXN0YXRpYyBjaGFyICpzdHBjcHkgUEFSQU1TICgoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKSk7Cisrc3RhdGljIGNoYXIgKnN0cGNweSAoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKTsKKyAjIGVuZGlmCisgI2VuZGlmCisgCisrLyogUGF0aG5hbWUgc3VwcG9ydC4KKysgICBJU1NMQVNIKEMpICAgICAgICAgICB0ZXN0cyB3aGV0aGVyIEMgaXMgYSBkaXJlY3Rvcnkgc2VwYXJhdG9yIGNoYXJhY3Rlci4KKysgICBJU19BQlNPTFVURV9QQVRIKFApICB0ZXN0cyB3aGV0aGVyIFAgaXMgYW4gYWJzb2x1dGUgcGF0aC4gIElmIGl0IGlzIG5vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICBpdCBtYXkgYmUgY29uY2F0ZW5hdGVkIHRvIGEgZGlyZWN0b3J5IHBhdGhuYW1lLgorKyAqLworKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXyB8fCBkZWZpbmVkIF9fRU1YX18gfHwgZGVmaW5lZCBfX0RKR1BQX18KKysgIC8qIFdpbjMyLCBPUy8yLCBET1MgKi8KKysjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nIHx8IChDKSA9PSAnXFwnKQorKyMgZGVmaW5lIEhBU19ERVZJQ0UoUCkgXAorKyAgICAoKCgoUClbMF0gPj0gJ0EnICYmIChQKVswXSA8PSAnWicpIHx8ICgoUClbMF0gPj0gJ2EnICYmIChQKVswXSA8PSAneicpKSBcCisrICAgICAmJiAoUClbMV0gPT0gJzonKQorKyMgZGVmaW5lIElTX0FCU09MVVRFX1BBVEgoUCkgKElTU0xBU0ggKChQKVswXSkgfHwgSEFTX0RFVklDRSAoUCkpCisrI2Vsc2UKKysgIC8qIFVuaXggKi8KKysjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nKQorKyMgZGVmaW5lIElTX0FCU09MVVRFX1BBVEgoUCkgSVNTTEFTSCAoKFApWzBdKQorKyNlbmRpZgorKworIC8qIERlZmluZSBmdW5jdGlvbiB3aGljaCBhcmUgdXN1YWxseSBub3QgYXZhaWxhYmxlLiAgKi8KKyAKKyAjaWYgIWRlZmluZWQgX0xJQkMgJiYgIWRlZmluZWQgSEFWRV9fX0FSR1pfQ09VTlQKKyAvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3RyaW5ncyBpbiBBUkdaLiAgKi8KKy1zdGF0aWMgc2l6ZV90IGFyZ3pfY291bnRfXyBQQVJBTVMgKChjb25zdCBjaGFyICphcmd6LCBzaXplX3QgbGVuKSk7CistCisgc3RhdGljIHNpemVfdAorLWFyZ3pfY291bnRfXyAoYXJneiwgbGVuKQorLSAgICAgY29uc3QgY2hhciAqYXJnejsKKy0gICAgIHNpemVfdCBsZW47CisrYXJnel9jb3VudF9fIChjb25zdCBjaGFyICphcmd6LCBzaXplX3QgbGVuKQorIHsKKyAgIHNpemVfdCBjb3VudCA9IDA7CisgICB3aGlsZSAobGVuID4gMCkKK0BAIC05NSwxOCArOTksMTcgQEAKKyB9CisgIyB1bmRlZiBfX2FyZ3pfY291bnQKKyAjIGRlZmluZSBfX2FyZ3pfY291bnQoYXJneiwgbGVuKSBhcmd6X2NvdW50X18gKGFyZ3osIGxlbikKKysjZWxzZQorKyMgaWZkZWYgX0xJQkMKKysjICBkZWZpbmUgX19hcmd6X2NvdW50KGFyZ3osIGxlbikgSU5UVVNFKF9fYXJnel9jb3VudCkgKGFyZ3osIGxlbikKKysjIGVuZGlmCisgI2VuZGlmCS8qICFfTElCQyAmJiAhSEFWRV9fX0FSR1pfQ09VTlQgKi8KKyAKKyAjaWYgIWRlZmluZWQgX0xJQkMgJiYgIWRlZmluZWQgSEFWRV9fX0FSR1pfU1RSSU5HSUZZCisgLyogTWFrZSAnXDAnIHNlcGFyYXRlZCBhcmcgdmVjdG9yIEFSR1ogcHJpbnRhYmxlIGJ5IGNvbnZlcnRpbmcgYWxsIHRoZSAnXDAncworICAgIGV4Y2VwdCB0aGUgbGFzdCBpbnRvIHRoZSBjaGFyYWN0ZXIgU0VQLiAgKi8KKy1zdGF0aWMgdm9pZCBhcmd6X3N0cmluZ2lmeV9fIFBBUkFNUyAoKGNoYXIgKmFyZ3osIHNpemVfdCBsZW4sIGludCBzZXApKTsKKy0KKyBzdGF0aWMgdm9pZAorLWFyZ3pfc3RyaW5naWZ5X18gKGFyZ3osIGxlbiwgc2VwKQorLSAgICAgY2hhciAqYXJnejsKKy0gICAgIHNpemVfdCBsZW47CistICAgICBpbnQgc2VwOworK2FyZ3pfc3RyaW5naWZ5X18gKGNoYXIgKmFyZ3osIHNpemVfdCBsZW4sIGludCBzZXApCisgeworICAgd2hpbGUgKGxlbiA+IDApCisgICAgIHsKK0BAIC0xMTksMTcgKzEyMiwxNiBAQAorIH0KKyAjIHVuZGVmIF9fYXJnel9zdHJpbmdpZnkKKyAjIGRlZmluZSBfX2FyZ3pfc3RyaW5naWZ5KGFyZ3osIGxlbiwgc2VwKSBhcmd6X3N0cmluZ2lmeV9fIChhcmd6LCBsZW4sIHNlcCkKKysjZWxzZQorKyMgaWZkZWYgX0xJQkMKKysjICBkZWZpbmUgX19hcmd6X3N0cmluZ2lmeShhcmd6LCBsZW4sIHNlcCkgXAorKyAgSU5UVVNFKF9fYXJnel9zdHJpbmdpZnkpIChhcmd6LCBsZW4sIHNlcCkKKysjIGVuZGlmCisgI2VuZGlmCS8qICFfTElCQyAmJiAhSEFWRV9fX0FSR1pfU1RSSU5HSUZZICovCisgCisgI2lmICFkZWZpbmVkIF9MSUJDICYmICFkZWZpbmVkIEhBVkVfX19BUkdaX05FWFQKKy1zdGF0aWMgY2hhciAqYXJnel9uZXh0X18gUEFSQU1TICgoY2hhciAqYXJneiwgc2l6ZV90IGFyZ3pfbGVuLAorLQkJCQkgIGNvbnN0IGNoYXIgKmVudHJ5KSk7CistCisgc3RhdGljIGNoYXIgKgorLWFyZ3pfbmV4dF9fIChhcmd6LCBhcmd6X2xlbiwgZW50cnkpCistICAgICBjaGFyICphcmd6OworLSAgICAgc2l6ZV90IGFyZ3pfbGVuOworLSAgICAgY29uc3QgY2hhciAqZW50cnk7CisrYXJnel9uZXh0X18gKGNoYXIgKmFyZ3osIHNpemVfdCBhcmd6X2xlbiwgY29uc3QgY2hhciAqZW50cnkpCisgeworICAgaWYgKGVudHJ5KQorICAgICB7CitAQCAtMTUwLDExICsxNTIsOCBAQAorIAorIAorIC8qIFJldHVybiBudW1iZXIgb2YgYml0cyBzZXQgaW4gWC4gICovCistc3RhdGljIGludCBwb3AgUEFSQU1TICgoaW50IHgpKTsKKy0KKyBzdGF0aWMgaW5saW5lIGludAorLXBvcCAoeCkKKy0gICAgIGludCB4OworK3BvcCAoaW50IHgpCisgeworICAgLyogV2UgYXNzdW1lIHRoYXQgbm8gbW9yZSB0aGFuIDE2IGJpdHMgYXJlIHVzZWQuICAqLworICAgeCA9ICgoeCAmIH4weDU1NTUpID4+IDEpICsgKHggJiAweDU1NTUpOworQEAgLTE2NywzMSArMTY2LDI3IEBACisgCisgDAorIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKgorLV9ubF9tYWtlX2wxMG5mbGlzdCAobDEwbmZpbGVfbGlzdCwgZGlybGlzdCwgZGlybGlzdF9sZW4sIG1hc2ssIGxhbmd1YWdlLAorLQkJICAgIHRlcnJpdG9yeSwgY29kZXNldCwgbm9ybWFsaXplZF9jb2Rlc2V0LCBtb2RpZmllciwgc3BlY2lhbCwKKy0JCSAgICBzcG9uc29yLCByZXZpc2lvbiwgZmlsZW5hbWUsIGRvX2FsbG9jYXRlKQorLSAgICAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqKmwxMG5maWxlX2xpc3Q7CistICAgICBjb25zdCBjaGFyICpkaXJsaXN0OworLSAgICAgc2l6ZV90IGRpcmxpc3RfbGVuOworLSAgICAgaW50IG1hc2s7CistICAgICBjb25zdCBjaGFyICpsYW5ndWFnZTsKKy0gICAgIGNvbnN0IGNoYXIgKnRlcnJpdG9yeTsKKy0gICAgIGNvbnN0IGNoYXIgKmNvZGVzZXQ7CistICAgICBjb25zdCBjaGFyICpub3JtYWxpemVkX2NvZGVzZXQ7CistICAgICBjb25zdCBjaGFyICptb2RpZmllcjsKKy0gICAgIGNvbnN0IGNoYXIgKnNwZWNpYWw7CistICAgICBjb25zdCBjaGFyICpzcG9uc29yOworLSAgICAgY29uc3QgY2hhciAqcmV2aXNpb247CistICAgICBjb25zdCBjaGFyICpmaWxlbmFtZTsKKy0gICAgIGludCBkb19hbGxvY2F0ZTsKKytfbmxfbWFrZV9sMTBuZmxpc3QgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKipsMTBuZmlsZV9saXN0LAorKwkJICAgIGNvbnN0IGNoYXIgKmRpcmxpc3QsIHNpemVfdCBkaXJsaXN0X2xlbiwKKysJCSAgICBpbnQgbWFzaywgY29uc3QgY2hhciAqbGFuZ3VhZ2UsIGNvbnN0IGNoYXIgKnRlcnJpdG9yeSwKKysJCSAgICBjb25zdCBjaGFyICpjb2Rlc2V0LCBjb25zdCBjaGFyICpub3JtYWxpemVkX2NvZGVzZXQsCisrCQkgICAgY29uc3QgY2hhciAqbW9kaWZpZXIsIGNvbnN0IGNoYXIgKnNwZWNpYWwsCisrCQkgICAgY29uc3QgY2hhciAqc3BvbnNvciwgY29uc3QgY2hhciAqcmV2aXNpb24sCisrCQkgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBkb19hbGxvY2F0ZSkKKyB7CisgICBjaGFyICphYnNfZmlsZW5hbWU7CistICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpsYXN0ID0gTlVMTDsKKysgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKipsYXN0cDsKKyAgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKnJldHZhbDsKKyAgIGNoYXIgKmNwOworKyAgc2l6ZV90IGRpcmxpc3RfY291bnQ7CisgICBzaXplX3QgZW50cmllczsKKyAgIGludCBjbnQ7CisgCisrICAvKiBJZiBMQU5HVUFHRSBjb250YWlucyBhbiBhYnNvbHV0ZSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbiwgd2UgaWdub3JlCisrICAgICBESVJMSVNULiAgKi8KKysgIGlmIChJU19BQlNPTFVURV9QQVRIIChsYW5ndWFnZSkpCisrICAgIGRpcmxpc3RfbGVuID0gMDsKKysKKyAgIC8qIEFsbG9jYXRlIHJvb20gZm9yIHRoZSBmdWxsIGZpbGUgbmFtZS4gICovCisgICBhYnNfZmlsZW5hbWUgPSAoY2hhciAqKSBtYWxsb2MgKGRpcmxpc3RfbGVuCisgCQkJCSAgKyBzdHJsZW4gKGxhbmd1YWdlKQorQEAgLTIwOSw3ICsyMDQsNyBAQAorIAkJCQkgICsgKCgobWFzayAmIENFTl9TUE9OU09SKSAhPSAwCisgCQkJCSAgICAgIHx8IChtYXNrICYgQ0VOX1JFVklTSU9OKSAhPSAwKQorIAkJCQkgICAgID8gKDEgKyAoKG1hc2sgJiBDRU5fU1BPTlNPUikgIT0gMAorLQkJCQkJICAgICA/IHN0cmxlbiAoc3BvbnNvcikgKyAxIDogMCkKKysJCQkJCSAgICAgPyBzdHJsZW4gKHNwb25zb3IpIDogMCkKKyAJCQkJCSsgKChtYXNrICYgQ0VOX1JFVklTSU9OKSAhPSAwCisgCQkJCQkgICA/IHN0cmxlbiAocmV2aXNpb24pICsgMSA6IDApKSA6IDApCisgCQkJCSAgKyAxICsgc3RybGVuIChmaWxlbmFtZSkgKyAxKTsKK0BAIC0yMTcsMTQgKzIxMiwxNiBAQAorICAgaWYgKGFic19maWxlbmFtZSA9PSBOVUxMKQorICAgICByZXR1cm4gTlVMTDsKKyAKKy0gIHJldHZhbCA9IE5VTEw7CistICBsYXN0ID0gTlVMTDsKKy0KKyAgIC8qIENvbnN0cnVjdCBmaWxlIG5hbWUuICAqLworLSAgbWVtY3B5IChhYnNfZmlsZW5hbWUsIGRpcmxpc3QsIGRpcmxpc3RfbGVuKTsKKy0gIF9fYXJnel9zdHJpbmdpZnkgKGFic19maWxlbmFtZSwgZGlybGlzdF9sZW4sICc6Jyk7CistICBjcCA9IGFic19maWxlbmFtZSArIChkaXJsaXN0X2xlbiAtIDEpOworLSAgKmNwKysgPSAnLyc7CisrICBjcCA9IGFic19maWxlbmFtZTsKKysgIGlmIChkaXJsaXN0X2xlbiA+IDApCisrICAgIHsKKysgICAgICBtZW1jcHkgKGNwLCBkaXJsaXN0LCBkaXJsaXN0X2xlbik7CisrICAgICAgX19hcmd6X3N0cmluZ2lmeSAoY3AsIGRpcmxpc3RfbGVuLCBQQVRIX1NFUEFSQVRPUik7CisrICAgICAgY3AgKz0gZGlybGlzdF9sZW47CisrICAgICAgY3BbLTFdID0gJy8nOworKyAgICB9CisrCisgICBjcCA9IHN0cGNweSAoY3AsIGxhbmd1YWdlKTsKKyAKKyAgIGlmICgobWFzayAmIFRFUlJJVE9SWSkgIT0gMCkKK0BAIC0yNzEsNyArMjY4LDcgQEAKKyAKKyAgIC8qIExvb2sgaW4gbGlzdCBvZiBhbHJlYWR5IGxvYWRlZCBkb21haW5zIHdoZXRoZXIgaXQgaXMgYWxyZWFkeQorICAgICAgYXZhaWxhYmxlLiAgKi8KKy0gIGxhc3QgPSBOVUxMOworKyAgbGFzdHAgPSBsMTBuZmlsZV9saXN0OworICAgZm9yIChyZXR2YWwgPSAqbDEwbmZpbGVfbGlzdDsgcmV0dmFsICE9IE5VTEw7IHJldHZhbCA9IHJldHZhbC0+bmV4dCkKKyAgICAgaWYgKHJldHZhbC0+ZmlsZW5hbWUgIT0gTlVMTCkKKyAgICAgICB7CitAQCAtMjg2LDcgKzI4Myw3IEBACisgCSAgICBicmVhazsKKyAJICB9CisgCistCWxhc3QgPSByZXR2YWw7CisrCWxhc3RwID0gJnJldHZhbC0+bmV4dDsKKyAgICAgICB9CisgCisgICBpZiAocmV0dmFsICE9IE5VTEwgfHwgZG9fYWxsb2NhdGUgPT0gMCkKK0BAIC0yOTUsNDggKzI5Miw2NiBAQAorICAgICAgIHJldHVybiByZXR2YWw7CisgICAgIH0KKyAKKy0gIHJldHZhbCA9IChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICopCistICAgIG1hbGxvYyAoc2l6ZW9mICgqcmV0dmFsKSArIChfX2FyZ3pfY291bnQgKGRpcmxpc3QsIGRpcmxpc3RfbGVuKQorLQkJCQkqICgxIDw8IHBvcCAobWFzaykpCistCQkJCSogc2l6ZW9mIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICopKSk7CisrICBkaXJsaXN0X2NvdW50ID0gKGRpcmxpc3RfbGVuID4gMCA/IF9fYXJnel9jb3VudCAoZGlybGlzdCwgZGlybGlzdF9sZW4pIDogMSk7CisrCisrICAvKiBBbGxvY2F0ZSBhIG5ldyBsb2FkZWRfbDEwbmZpbGUuICAqLworKyAgcmV0dmFsID0KKysgICAgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKikKKysgICAgbWFsbG9jIChzaXplb2YgKCpyZXR2YWwpCisrCSAgICArICgoKGRpcmxpc3RfY291bnQgPDwgcG9wIChtYXNrKSkgKyAoZGlybGlzdF9jb3VudCA+IDEgPyAxIDogMCkpCisrCSAgICAgICAqIHNpemVvZiAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqKSkpOworICAgaWYgKHJldHZhbCA9PSBOVUxMKQorICAgICByZXR1cm4gTlVMTDsKKyAKKyAgIHJldHZhbC0+ZmlsZW5hbWUgPSBhYnNfZmlsZW5hbWU7CistICByZXR2YWwtPmRlY2lkZWQgPSAoX19hcmd6X2NvdW50IChkaXJsaXN0LCBkaXJsaXN0X2xlbikgIT0gMQorKworKyAgLyogV2Ugc2V0IHJldHZhbC0+ZGF0YSB0byBOVUxMIGhlcmU7IGl0IGlzIGZpbGxlZCBpbiBsYXRlci4KKysgICAgIFNldHRpbmcgcmV0dmFsLT5kZWNpZGVkIHRvIDEgaGVyZSBtZWFucyB0aGF0IHJldHZhbCBkb2VzIG5vdAorKyAgICAgY29ycmVzcG9uZCB0byBhIHJlYWwgZmlsZSAoZGlybGlzdF9jb3VudCA+IDEpIG9yIGlzIG5vdCB3b3J0aAorKyAgICAgbG9va2luZyB1cCAoaWYgYW4gdW5ub3JtYWxpemVkIGNvZGVzZXQgd2FzIHNwZWNpZmllZCkuICAqLworKyAgcmV0dmFsLT5kZWNpZGVkID0gKGRpcmxpc3RfY291bnQgPiAxCisgCQkgICAgIHx8ICgobWFzayAmIFhQR19DT0RFU0VUKSAhPSAwCisgCQkJICYmIChtYXNrICYgWFBHX05PUk1fQ09ERVNFVCkgIT0gMCkpOworICAgcmV0dmFsLT5kYXRhID0gTlVMTDsKKyAKKy0gIGlmIChsYXN0ID09IE5VTEwpCistICAgIHsKKy0gICAgICByZXR2YWwtPm5leHQgPSAqbDEwbmZpbGVfbGlzdDsKKy0gICAgICAqbDEwbmZpbGVfbGlzdCA9IHJldHZhbDsKKy0gICAgfQorLSAgZWxzZQorLSAgICB7CistICAgICAgcmV0dmFsLT5uZXh0ID0gbGFzdC0+bmV4dDsKKy0gICAgICBsYXN0LT5uZXh0ID0gcmV0dmFsOworLSAgICB9CisrICByZXR2YWwtPm5leHQgPSAqbGFzdHA7CisrICAqbGFzdHAgPSByZXR2YWw7CisgCisgICBlbnRyaWVzID0gMDsKKy0gIC8qIElmIHRoZSBESVJMSVNUIGlzIGEgcmVhbCBsaXN0IHRoZSBSRVRWQUwgZW50cnkgY29ycmVzcG9uZHMgbm90IHRvCistICAgICBhIHJlYWwgZmlsZS4gIFNvIHdlIGhhdmUgdG8gdXNlIHRoZSBESVJMSVNUIHNlcGFyYXRpb24gbWVjaGFuaXNtCistICAgICBvZiB0aGUgaW5uZXIgbG9vcC4gICovCistICBjbnQgPSBfX2FyZ3pfY291bnQgKGRpcmxpc3QsIGRpcmxpc3RfbGVuKSA9PSAxID8gbWFzayAtIDEgOiBtYXNrOworLSAgZm9yICg7IGNudCA+PSAwOyAtLWNudCkKKysgIC8qIFJlY3Vyc2UgdG8gZmlsbCB0aGUgaW5oZXJpdGFuY2UgbGlzdCBvZiBSRVRWQUwuCisrICAgICBJZiB0aGUgRElSTElTVCBpcyBhIHJlYWwgbGlzdCAoaS5lLiBESVJMSVNUX0NPVU5UID4gMSksIHRoZSBSRVRWQUwKKysgICAgIGVudHJ5IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSByZWFsIGZpbGU7IHJldHZhbC0+ZmlsZW5hbWUgY29udGFpbnMKKysgICAgIGNvbG9ucy4gIEluIHRoaXMgY2FzZSB3ZSBsb29wIGFjcm9zcyBhbGwgZWxlbWVudHMgb2YgRElSTElTVCBhbmQKKysgICAgIGFjcm9zcyBhbGwgYml0IHBhdHRlcm5zIGRvbWluYXRlZCBieSBNQVNLLgorKyAgICAgSWYgdGhlIERJUkxJU1QgaXMgYSBzaW5nbGUgZGlyZWN0b3J5IG9yIGVudGlyZWx5IHJlZHVuZGFudCAoaS5lLgorKyAgICAgRElSTElTVF9DT1VOVCA9PSAxKSwgd2UgbG9vcCBhY3Jvc3MgYWxsIGJpdCBwYXR0ZXJucyBkb21pbmF0ZWQgYnkKKysgICAgIE1BU0ssIGV4Y2x1ZGluZyBNQVNLIGl0c2VsZi4KKysgICAgIEluIGVpdGhlciBjYXNlLCB3ZSBsb29wIGRvd24gZnJvbSBNQVNLIHRvIDAuICBUaGlzIGhhcyB0aGUgZWZmZWN0CisrICAgICB0aGF0IHRoZSBleHRyYSBiaXRzIGluIHRoZSBsb2NhbGUgbmFtZSBhcmUgZHJvcHBlZCBpbiB0aGlzIG9yZGVyOgorKyAgICAgZmlyc3QgdGhlIG1vZGlmaWVyLCB0aGVuIHRoZSB0ZXJyaXRvcnksIHRoZW4gdGhlIGNvZGVzZXQsIHRoZW4gdGhlCisrICAgICBub3JtYWxpemVkX2NvZGVzZXQuICAqLworKyAgZm9yIChjbnQgPSBkaXJsaXN0X2NvdW50ID4gMSA/IG1hc2sgOiBtYXNrIC0gMTsgY250ID49IDA7IC0tY250KQorICAgICBpZiAoKGNudCAmIH5tYXNrKSA9PSAwCisgCSYmICgoY250ICYgQ0VOX1NQRUNJRklDKSA9PSAwIHx8IChjbnQgJiBYUEdfU1BFQ0lGSUMpID09IDApCisgCSYmICgoY250ICYgWFBHX0NPREVTRVQpID09IDAgfHwgKGNudCAmIFhQR19OT1JNX0NPREVTRVQpID09IDApKQorICAgICAgIHsKKy0JLyogSXRlcmF0ZSBvdmVyIGFsbCBlbGVtZW50cyBvZiB0aGUgRElSTElTVC4gICovCistCWNoYXIgKmRpciA9IE5VTEw7CisrCWlmIChkaXJsaXN0X2NvdW50ID4gMSkKKysJICB7CisrCSAgICAvKiBJdGVyYXRlIG92ZXIgYWxsIGVsZW1lbnRzIG9mIHRoZSBESVJMSVNULiAgKi8KKysJICAgIGNoYXIgKmRpciA9IE5VTEw7CisgCistCXdoaWxlICgoZGlyID0gX19hcmd6X25leHQgKChjaGFyICopIGRpcmxpc3QsIGRpcmxpc3RfbGVuLCBkaXIpKQorLQkgICAgICAgIT0gTlVMTCkKKysJICAgIHdoaWxlICgoZGlyID0gX19hcmd6X25leHQgKChjaGFyICopIGRpcmxpc3QsIGRpcmxpc3RfbGVuLCBkaXIpKQorKwkJICAgIT0gTlVMTCkKKysJICAgICAgcmV0dmFsLT5zdWNjZXNzb3JbZW50cmllcysrXQorKwkJPSBfbmxfbWFrZV9sMTBuZmxpc3QgKGwxMG5maWxlX2xpc3QsIGRpciwgc3RybGVuIChkaXIpICsgMSwKKysJCQkJICAgICAgY250LCBsYW5ndWFnZSwgdGVycml0b3J5LCBjb2Rlc2V0LAorKwkJCQkgICAgICBub3JtYWxpemVkX2NvZGVzZXQsIG1vZGlmaWVyLCBzcGVjaWFsLAorKwkJCQkgICAgICBzcG9uc29yLCByZXZpc2lvbiwgZmlsZW5hbWUsIDEpOworKwkgIH0KKysJZWxzZQorIAkgIHJldHZhbC0+c3VjY2Vzc29yW2VudHJpZXMrK10KKy0JICAgID0gX25sX21ha2VfbDEwbmZsaXN0IChsMTBuZmlsZV9saXN0LCBkaXIsIHN0cmxlbiAoZGlyKSArIDEsIGNudCwKKy0JCQkJICBsYW5ndWFnZSwgdGVycml0b3J5LCBjb2Rlc2V0LAorKwkgICAgPSBfbmxfbWFrZV9sMTBuZmxpc3QgKGwxMG5maWxlX2xpc3QsIGRpcmxpc3QsIGRpcmxpc3RfbGVuLAorKwkJCQkgIGNudCwgbGFuZ3VhZ2UsIHRlcnJpdG9yeSwgY29kZXNldCwKKyAJCQkJICBub3JtYWxpemVkX2NvZGVzZXQsIG1vZGlmaWVyLCBzcGVjaWFsLAorIAkJCQkgIHNwb25zb3IsIHJldmlzaW9uLCBmaWxlbmFtZSwgMSk7CisgICAgICAgfQorQEAgLTM0NywxMSArMzYyLDEwIEBACisgDAorIC8qIE5vcm1hbGl6ZSBjb2Rlc2V0IG5hbWUuICBUaGVyZSBpcyBubyBzdGFuZGFyZCBmb3IgdGhlIGNvZGVzZXQKKyAgICBuYW1lcy4gIE5vcm1hbGl6YXRpb24gYWxsb3dzIHRoZSB1c2VyIHRvIHVzZSBhbnkgb2YgdGhlIGNvbW1vbgorLSAgIG5hbWVzLiAgKi8KKysgICBuYW1lcy4gIFRoZSByZXR1cm4gdmFsdWUgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBoYXMgdG8gYmUKKysgICBmcmVlZCBieSB0aGUgY2FsbGVyLiAgKi8KKyBjb25zdCBjaGFyICoKKy1fbmxfbm9ybWFsaXplX2NvZGVzZXQgKGNvZGVzZXQsIG5hbWVfbGVuKQorLSAgICAgY29uc3QgY2hhciAqY29kZXNldDsKKy0gICAgIHNpemVfdCBuYW1lX2xlbjsKKytfbmxfbm9ybWFsaXplX2NvZGVzZXQgKGNvbnN0IGNoYXIgKmNvZGVzZXQsIHNpemVfdCBuYW1lX2xlbikKKyB7CisgICBpbnQgbGVuID0gMDsKKyAgIGludCBvbmx5X2RpZ2l0ID0gMTsKK0BAIC0zNjAsMTEgKzM3NCwxMSBAQAorICAgc2l6ZV90IGNudDsKKyAKKyAgIGZvciAoY250ID0gMDsgY250IDwgbmFtZV9sZW47ICsrY250KQorLSAgICBpZiAoaXNhbG51bSAoY29kZXNldFtjbnRdKSkKKysgICAgaWYgKGlzYWxudW0gKCh1bnNpZ25lZCBjaGFyKSBjb2Rlc2V0W2NudF0pKQorICAgICAgIHsKKyAJKytsZW47CisgCistCWlmIChpc2FscGhhIChjb2Rlc2V0W2NudF0pKQorKwlpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIGNvZGVzZXRbY250XSkpCisgCSAgb25seV9kaWdpdCA9IDA7CisgICAgICAgfQorIAorQEAgLTM3OCw5ICszOTIsOSBAQAorIAl3cCA9IHJldHZhbDsKKyAKKyAgICAgICBmb3IgKGNudCA9IDA7IGNudCA8IG5hbWVfbGVuOyArK2NudCkKKy0JaWYgKGlzYWxwaGEgKGNvZGVzZXRbY250XSkpCistCSAgKndwKysgPSB0b2xvd2VyIChjb2Rlc2V0W2NudF0pOworLQllbHNlIGlmIChpc2RpZ2l0IChjb2Rlc2V0W2NudF0pKQorKwlpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIGNvZGVzZXRbY250XSkpCisrCSAgKndwKysgPSB0b2xvd2VyICgodW5zaWduZWQgY2hhcikgY29kZXNldFtjbnRdKTsKKysJZWxzZSBpZiAoaXNkaWdpdCAoKHVuc2lnbmVkIGNoYXIpIGNvZGVzZXRbY250XSkpCisgCSAgKndwKysgPSBjb2Rlc2V0W2NudF07CisgCisgICAgICAgKndwID0gJ1wwJzsKK0BAIC0zOTgsOSArNDEyLDcgQEAKKyAgICB0byBiZSBkZWZpbmVkLiAgKi8KKyAjaWYgIV9MSUJDICYmICFIQVZFX1NUUENQWQorIHN0YXRpYyBjaGFyICoKKy1zdHBjcHkgKGRlc3QsIHNyYykKKy0gICAgIGNoYXIgKmRlc3Q7CistICAgICBjb25zdCBjaGFyICpzcmM7Cisrc3RwY3B5IChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpCisgeworICAgd2hpbGUgKCgqZGVzdCsrID0gKnNyYysrKSAhPSAnXDAnKQorICAgICAvKiBEbyBub3RoaW5nLiAqLyA7CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbGliZ2V0dGV4dC5oCTE5OTgtMDQtMjYgMDk6MjI6MzYuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xpYmdldHRleHQuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorQEAgLTEsMTgyICswLDAgQEAKKy0vKiBNZXNzYWdlIGNhdGFsb2dzIGZvciBpbnRlcm5hdGlvbmFsaXphdGlvbi4KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKy0gICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKy0KKy0vKiBCZWNhdXNlIG9uIHNvbWUgc3lzdGVtcyAoZS5nLiBTb2xhcmlzKSB3ZSBzb21ldGltZXMgaGF2ZSB0byBpbmNsdWRlCistICAgdGhlIHN5c3RlbXMgbGliaW50bC5oIGFzIHdlbGwgYXMgdGhpcyBmaWxlIHdlIGhhdmUgbW9yZSBjb21wbGV4CistICAgaW5jbHVkZSBwcm90ZWN0aW9uIGFib3ZlLiAgQnV0IHRoZSBzeXN0ZW1zIGhlYWRlciBtaWdodCBwZXJoYXBzIGFsc28KKy0gICBkZWZpbmUgX0xJQklOVExfSCBhbmQgdGhlcmVmb3JlIHdlIGhhdmUgdG8gcHJvdGVjdCB0aGUgZGVmaW5pdGlvbiBoZXJlLiAgKi8KKy0KKy0jaWYgIWRlZmluZWQgKF9MSUJJTlRMX0gpIHx8ICFkZWZpbmVkIChfTElCR0VUVEVYVF9IKQorLSNpZiAhZGVmaW5lZCAoX0xJQklOVExfSCkKKy0jIGRlZmluZSBfTElCSU5UTF9ICTEKKy0jZW5kaWYKKy0jZGVmaW5lIF9MSUJHRVRURVhUX0gJMQorLQorLS8qIFdlIGRlZmluZSBhbiBhZGRpdGlvbmFsIHN5bWJvbCB0byBzaWduYWwgdGhhdCB3ZSB1c2UgdGhlIEdOVQorLSAgIGltcGxlbWVudGF0aW9uIG9mIGdldHRleHQuICAqLworLSNkZWZpbmUgX19VU0VfR05VX0dFVFRFWFQgMQorLQorLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0KKy0jaWYgSEFWRV9MT0NBTEVfSAorLSMgaW5jbHVkZSA8bG9jYWxlLmg+CistI2VuZGlmCistCistCistI2lmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7CistI2VuZGlmCistCistLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworLQorLSNpZm5kZWYgUEFSQU1TCistIyBpZiBfX1NURENfXworLSMgIGRlZmluZSBQQVJBTVMoYXJncykgYXJncworLSMgZWxzZQorLSMgIGRlZmluZSBQQVJBTVMoYXJncykgKCkKKy0jIGVuZGlmCistI2VuZGlmCistCistI2lmbmRlZiBOVUxMCistIyBpZiAhZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9fR05VQ19fCistIyAgZGVmaW5lIE5VTEwgKCh2b2lkICopIDApCistIyBlbHNlCistIyAgZGVmaW5lIE5VTEwgKDApCistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpZiAhSEFWRV9MQ19NRVNTQUdFUworLS8qIFRoaXMgdmFsdWUgZGV0ZXJtaW5lcyB0aGUgYmVoYXZpb3VyIG9mIHRoZSBnZXR0ZXh0KCkgYW5kIGRnZXR0ZXh0KCkKKy0gICBmdW5jdGlvbi4gIEJ1dCBzb21lIHN5c3RlbSBkb2VzIG5vdCBoYXZlIHRoaXMgZGVmaW5lZC4gIERlZmluZSBpdAorLSAgIHRvIGEgZGVmYXVsdCB2YWx1ZS4gICovCistIyBkZWZpbmUgTENfTUVTU0FHRVMgKC0xKQorLSNlbmRpZgorLQorLQorLS8qIERlY2xhcmF0aW9ucyBmb3IgZ2V0dGV4dC11c2luZy1jYXRnZXRzIGludGVyZmFjZS4gIERlcml2ZWQgZnJvbQorLSAgIEppbSBNZXllcmluZydzIGxpYmludGwuaC4gICovCistc3RydWN0IF9tc2dfZW50CisteworLSAgY29uc3QgY2hhciAqX21zZzsKKy0gIGludCBfbXNnX251bWJlcjsKKy19OworLQorLQorLSNpZiBIQVZFX0NBVEdFVFMKKy0vKiBUaGVzZSB0d28gdmFyaWFibGVzIGFyZSBkZWZpbmVkIGluIHRoZSBhdXRvbWF0aWNhbGx5IGJ5IHBvLXRvLXRibC5zZWQKKy0gICBnZW5lcmF0ZWQgZmlsZSBgY2F0LWlkLXRibC5jJy4gICovCistZXh0ZXJuIGNvbnN0IHN0cnVjdCBfbXNnX2VudCBfbXNnX3RibFtdOworLWV4dGVybiBpbnQgX21zZ190YmxfbGVuZ3RoOworLSNlbmRpZgorLQorLQorLS8qIEZvciBhdXRvbWF0aWNhbCBleHRyYWN0aW9uIG9mIG1lc3NhZ2VzIHNvbWV0aW1lcyBubyByZWFsCistICAgdHJhbnNsYXRpb24gaXMgbmVlZGVkLiAgSW5zdGVhZCB0aGUgc3RyaW5nIGl0c2VsZiBpcyB0aGUgcmVzdWx0LiAgKi8KKy0jZGVmaW5lIGdldHRleHRfbm9vcChTdHIpIChTdHIpCistCistLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQKKy0gICBMQ19NRVNTQUdFUyBsb2NhbGUuICBJZiBub3QgZm91bmQsIHJldHVybnMgTVNHSUQgaXRzZWxmICh0aGUgZGVmYXVsdAorLSAgIHRleHQpLiAgKi8KKy1leHRlcm4gY2hhciAqZ2V0dGV4dCBQQVJBTVMgKChjb25zdCBjaGFyICpfX21zZ2lkKSk7CistZXh0ZXJuIGNoYXIgKmdldHRleHRfXyBQQVJBTVMgKChjb25zdCBjaGFyICpfX21zZ2lkKSk7CistCistLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50CistICAgTENfTUVTU0FHRVMgbG9jYWxlLiAgKi8KKy1leHRlcm4gY2hhciAqZGdldHRleHQgUEFSQU1TICgoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkKSk7CistZXh0ZXJuIGNoYXIgKmRnZXR0ZXh0X18gUEFSQU1TICgoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorLQkJCQkgY29uc3QgY2hhciAqX19tc2dpZCkpOworLQorLS8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudCBDQVRFR09SWQorLSAgIGxvY2FsZS4gICovCistZXh0ZXJuIGNoYXIgKmRjZ2V0dGV4dCBQQVJBTVMgKChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQsCistCQkJCWludCBfX2NhdGVnb3J5KSk7CistZXh0ZXJuIGNoYXIgKmRjZ2V0dGV4dF9fIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKy0JCQkJICBjb25zdCBjaGFyICpfX21zZ2lkLCBpbnQgX19jYXRlZ29yeSkpOworLQorLQorLS8qIFNldCB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyB0byBET01BSU5OQU1FLgorLSAgIElmIERPTUFJTk5BTUUgaXMgbnVsbCwgcmV0dXJuIHRoZSBjdXJyZW50IGRlZmF1bHQuCistICAgSWYgRE9NQUlOTkFNRSBpcyAiIiwgcmVzZXQgdG8gdGhlIGRlZmF1bHQgb2YgIm1lc3NhZ2VzIi4gICovCistZXh0ZXJuIGNoYXIgKnRleHRkb21haW4gUEFSQU1TICgoY29uc3QgY2hhciAqX19kb21haW5uYW1lKSk7CistZXh0ZXJuIGNoYXIgKnRleHRkb21haW5fXyBQQVJBTVMgKChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUpKTsKKy0KKy0vKiBTcGVjaWZ5IHRoYXQgdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIHdpbGwgYmUgZm91bmQKKy0gICBpbiBESVJOQU1FIHJhdGhlciB0aGFuIGluIHRoZSBzeXN0ZW0gbG9jYWxlIGRhdGEgYmFzZS4gICovCistZXh0ZXJuIGNoYXIgKmJpbmR0ZXh0ZG9tYWluIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKy0JCQkJICBjb25zdCBjaGFyICpfX2Rpcm5hbWUpKTsKKy1leHRlcm4gY2hhciAqYmluZHRleHRkb21haW5fXyBQQVJBTVMgKChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCistCQkJCSAgICBjb25zdCBjaGFyICpfX2Rpcm5hbWUpKTsKKy0KKy0jaWYgRU5BQkxFX05MUworLQorLS8qIFNvbGFyaXMgMi4zIGhhcyB0aGUgZ2V0dGV4dCBmdW5jdGlvbiBidXQgZGNnZXR0ZXh0IGlzIG1pc3NpbmcuCistICAgU28gd2Ugb21pdCB0aGlzIG9wdGltaXphdGlvbiBmb3IgU29sYXJpcyAyLjMuICBCVFcsIFNvbGFyaXMgMi40CistICAgaGFzIGRjZ2V0dGV4dC4gICovCistIyBpZiAhSEFWRV9DQVRHRVRTICYmICghSEFWRV9HRVRURVhUIHx8IEhBVkVfRENHRVRURVhUKQorLQorLSMgIGRlZmluZSBnZXR0ZXh0KE1zZ2lkKQkJCQkJCSAgICAgIFwKKy0gICAgIGRnZXR0ZXh0IChOVUxMLCBNc2dpZCkKKy0KKy0jICBkZWZpbmUgZGdldHRleHQoRG9tYWlubmFtZSwgTXNnaWQpCQkJCQkgICAgICBcCistICAgICBkY2dldHRleHQgKERvbWFpbm5hbWUsIE1zZ2lkLCBMQ19NRVNTQUdFUykKKy0KKy0jICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gNworLS8qIFRoaXMgZ2xvYmFsIHZhcmlhYmxlIGlzIGRlZmluZWQgaW4gbG9hZG1zZ2NhdC5jLiAgV2UgbmVlZCBhIHNpZ24sCistICAgd2hldGhlciBhIG5ldyBjYXRhbG9nIHdhcyBsb2FkZWQsIHdoaWNoIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggYWxsCistICAgdHJhbnNsYXRpb25zLiAgKi8KKy1leHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CistCistIyAgIGRlZmluZSBkY2dldHRleHQoRG9tYWlubmFtZSwgTXNnaWQsIENhdGVnb3J5KQkJCSAgICAgIFwKKy0gIChfX2V4dGVuc2lvbl9fCQkJCQkJCSAgICAgIFwKKy0gICAoewkJCQkJCQkJCSAgICAgIFwKKy0gICAgIGNoYXIgKl9fcmVzdWx0OwkJCQkJCQkgICAgICBcCistICAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKE1zZ2lkKSkJCQkJCSAgICAgIFwKKy0gICAgICAgewkJCQkJCQkJICAgICAgXAorLQkgc3RhdGljIGNoYXIgKl9fdHJhbnNsYXRpb25fXzsJCQkJCSAgICAgIFwKKy0JIHN0YXRpYyBpbnQgX19jYXRhbG9nX2NvdW50ZXJfXzsJCQkJICAgICAgXAorLQkgaWYgKCEgX190cmFuc2xhdGlvbl9fIHx8IF9fY2F0YWxvZ19jb3VudGVyX18gIT0gX25sX21zZ19jYXRfY250cikgICAgXAorLQkgICB7CQkJCQkJCQkgICAgICBcCistCSAgICAgX190cmFuc2xhdGlvbl9fID0JCQkJCQkgICAgICBcCistCSAgICAgICBkY2dldHRleHRfXyAoRG9tYWlubmFtZSwgTXNnaWQsIENhdGVnb3J5KTsJCSAgICAgIFwKKy0JICAgICBfX2NhdGFsb2dfY291bnRlcl9fID0gX25sX21zZ19jYXRfY250cjsJCQkgICAgICBcCistCSAgIH0JCQkJCQkJCSAgICAgIFwKKy0JIF9fcmVzdWx0ID0gX190cmFuc2xhdGlvbl9fOwkJCQkJICAgICAgXAorLSAgICAgICB9CQkJCQkJCQkgICAgICBcCistICAgICBlbHNlCQkJCQkJCQkgICAgICBcCistICAgICAgIF9fcmVzdWx0ID0gZGNnZXR0ZXh0X18gKERvbWFpbm5hbWUsIE1zZ2lkLCBDYXRlZ29yeSk7CQkgICAgICBcCistICAgICBfX3Jlc3VsdDsJCQkJCQkJCSAgICAgIFwKKy0gICAgfSkpCistIyAgZW5kaWYKKy0jIGVuZGlmCistCistI2Vsc2UKKy0KKy0jIGRlZmluZSBnZXR0ZXh0KE1zZ2lkKSAoTXNnaWQpCistIyBkZWZpbmUgZGdldHRleHQoRG9tYWlubmFtZSwgTXNnaWQpIChNc2dpZCkKKy0jIGRlZmluZSBkY2dldHRleHQoRG9tYWlubmFtZSwgTXNnaWQsIENhdGVnb3J5KSAoTXNnaWQpCistIyBkZWZpbmUgdGV4dGRvbWFpbihEb21haW5uYW1lKSB3aGlsZSAoMCkgLyogbm90aGluZyAqLworLSMgZGVmaW5lIGJpbmR0ZXh0ZG9tYWluKERvbWFpbm5hbWUsIERpcm5hbWUpIHdoaWxlICgwKSAvKiBub3RoaW5nICovCistCistI2VuZGlmCistCistLyogQEAgYmVnaW4gb2YgZXBpbG9nIEBAICovCistCistI2lmZGVmIF9fY3BsdXNwbHVzCistfQorLSNlbmRpZgorLQorLSNlbmRpZgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2xpYmdudWludGwuaC5pbgkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9saWJnbnVpbnRsLmguaW4JMjAwNC0wOS0xMiAxNDo0MDozNC40NjI3MzE4MjQgLTA0MDAKK0BAIC0wLDAgKzEsMzgzIEBACisrLyogTWVzc2FnZSBjYXRhbG9ncyBmb3IgaW50ZXJuYXRpb25hbGl6YXRpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfTElCSU5UTF9ICisrI2RlZmluZSBfTElCSU5UTF9ICTEKKysKKysjaW5jbHVkZSA8bG9jYWxlLmg+CisrCisrLyogVGhlIExDX01FU1NBR0VTIGxvY2FsZSBjYXRlZ29yeSBpcyB0aGUgY2F0ZWdvcnkgdXNlZCBieSB0aGUgZnVuY3Rpb25zCisrICAgZ2V0dGV4dCgpIGFuZCBkZ2V0dGV4dCgpLiAgSXQgaXMgc3BlY2lmaWVkIGluIFBPU0lYLCBidXQgbm90IGluIEFOU0kgQy4KKysgICBPbiBzeXN0ZW1zIHRoYXQgZG9uJ3QgZGVmaW5lIGl0LCB1c2UgYW4gYXJiaXRyYXJ5IHZhbHVlIGluc3RlYWQuCisrICAgT24gU29sYXJpcywgPGxvY2FsZS5oPiBkZWZpbmVzIF9fTE9DQUxFX0ggKG9yIF9MT0NBTEVfSCBpbiBTb2xhcmlzIDIuNSkKKysgICB0aGVuIGluY2x1ZGVzIDxsaWJpbnRsLmg+IChpLmUuIHRoaXMgZmlsZSEpIGFuZCB0aGVuIG9ubHkgZGVmaW5lcworKyAgIExDX01FU1NBR0VTLiAgVG8gYXZvaWQgYSByZWRlZmluaXRpb24gd2FybmluZywgZG9uJ3QgZGVmaW5lIExDX01FU1NBR0VTCisrICAgaW4gdGhpcyBjYXNlLiAgKi8KKysjaWYgIWRlZmluZWQgTENfTUVTU0FHRVMgJiYgIShkZWZpbmVkIF9fTE9DQUxFX0ggfHwgKGRlZmluZWQgX0xPQ0FMRV9IICYmIGRlZmluZWQgX19zdW4pKQorKyMgZGVmaW5lIExDX01FU1NBR0VTIDE3MjkKKysjZW5kaWYKKysKKysvKiBXZSBkZWZpbmUgYW4gYWRkaXRpb25hbCBzeW1ib2wgdG8gc2lnbmFsIHRoYXQgd2UgdXNlIHRoZSBHTlUKKysgICBpbXBsZW1lbnRhdGlvbiBvZiBnZXR0ZXh0LiAgKi8KKysjZGVmaW5lIF9fVVNFX0dOVV9HRVRURVhUIDEKKysKKysvKiBQcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdXBwb3J0ZWQgZmlsZSBmb3JtYXRzLiAgUmV0dXJucyB0aGUKKysgICBtYXhpbXVtIG1pbm9yIHJldmlzaW9uIG51bWJlciBzdXBwb3J0ZWQgZm9yIGEgZ2l2ZW4gbWFqb3IgcmV2aXNpb24uICAqLworKyNkZWZpbmUgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04obWFqb3IpIFwKKysgICgobWFqb3IpID09IDAgPyAxIDogLTEpCisrCisrLyogUmVzb2x2ZSBhIHBsYXRmb3JtIHNwZWNpZmljIGNvbmZsaWN0IG9uIERKR1BQLiAgR05VIGdldHRleHQgdGFrZXMKKysgICBwcmVjZWRlbmNlIG92ZXIgX2NvbmlvX2dldHRleHQuICAqLworKyNpZmRlZiBfX0RKR1BQX18KKysjIHVuZGVmIGdldHRleHQKKysjZW5kaWYKKysKKysjaWZkZWYgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKysKKysvKiBXZSByZWRpcmVjdCB0aGUgZnVuY3Rpb25zIHRvIHRob3NlIHByZWZpeGVkIHdpdGggImxpYmludGxfIi4gIFRoaXMgaXMKKysgICBuZWNlc3NhcnksIGJlY2F1c2Ugc29tZSBzeXN0ZW1zIGRlZmluZSBnZXR0ZXh0L3RleHRkb21haW4vLi4uIGluIHRoZSBDCisrICAgbGlicmFyeSAobmFtZWx5LCBTb2xhcmlzIDIuNCBhbmQgbmV3ZXIsIGFuZCBHTlUgbGliYyAyLjAgYW5kIG5ld2VyKS4KKysgICBJZiB3ZSB1c2VkIHRoZSB1bnByZWZpeGVkIG5hbWVzLCB0aGVyZSB3b3VsZCBiZSBjYXNlcyB3aGVyZSB0aGUKKysgICBkZWZpbml0aW9uIGluIHRoZSBDIGxpYnJhcnkgd291bGQgb3ZlcnJpZGUgdGhlIG9uZSBpbiB0aGUgbGliaW50bC5zbworKyAgIHNoYXJlZCBsaWJyYXJ5LiAgUmVjYWxsIHRoYXQgb24gRUxGIHN5c3RlbXMsIHRoZSBzeW1ib2xzIGFyZSBsb29rZWQKKysgICB1cCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgorKyAgICAgMS4gaW4gdGhlIGV4ZWN1dGFibGUsCisrICAgICAyLiBpbiB0aGUgc2hhcmVkIGxpYnJhcmllcyBzcGVjaWZpZWQgb24gdGhlIGxpbmsgY29tbWFuZCBsaW5lLCBpbiBvcmRlciwKKysgICAgIDMuIGluIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIHNoYXJlZCBsaWJyYXJpZXMgc3BlY2lmaWVkIG9uIHRoZSBsaW5rCisrICAgICAgICBjb21tYW5kIGxpbmUsCisrICAgICA0LiBpbiB0aGUgZGxvcGVuKCllZCBzaGFyZWQgbGlicmFyaWVzLCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlCisrICAgICAgICBkbG9wZW4oKWVkLgorKyAgIFRoZSBkZWZpbml0aW9uIGluIHRoZSBDIGxpYnJhcnkgd291bGQgb3ZlcnJpZGUgdGhlIG9uZSBpbiBsaWJpbnRsLnNvIGlmCisrICAgZWl0aGVyCisrICAgICAqIC1sYyBpcyBnaXZlbiBvbiB0aGUgbGluayBjb21tYW5kIGxpbmUgYW5kIC1saW50bCBpc24ndCwgb3IKKysgICAgICogLWxjIGlzIGdpdmVuIG9uIHRoZSBsaW5rIGNvbW1hbmQgbGluZSBiZWZvcmUgLWxpbnRsLCBvcgorKyAgICAgKiBsaWJpbnRsLnNvIGlzIGEgZGVwZW5kZW5jeSBvZiBhIGRsb3BlbigpZWQgc2hhcmVkIGxpYnJhcnkgYnV0IG5vdAorKyAgICAgICBsaW5rZWQgdG8gdGhlIGV4ZWN1dGFibGUgYXQgbGluayB0aW1lLgorKyAgIFNpbmNlIFNvbGFyaXMgZ2V0dGV4dCgpIGJlaGF2ZXMgZGlmZmVyZW50bHkgdGhhbiBHTlUgZ2V0dGV4dCgpLCB0aGlzCisrICAgd291bGQgYmUgdW5hY2NlcHRhYmxlLgorKworKyAgIFRoZSByZWRpcmVjdGlvbiBoYXBwZW5zIGJ5IGRlZmF1bHQgdGhyb3VnaCBtYWNyb3MgaW4gQywgc28gdGhhdCAmZ2V0dGV4dAorKyAgIGlzIGluZGVwZW5kZW50IG9mIHRoZSBjb21waWxhdGlvbiB1bml0LCBidXQgdGhyb3VnaCBpbmxpbmUgZnVuY3Rpb25zIGluCisrICAgQysrLCBpbiBvcmRlciBub3QgdG8gaW50ZXJmZXJlIHdpdGggdGhlIG5hbWUgbWFuZ2xpbmcgb2YgY2xhc3MgZmllbGRzIG9yCisrICAgY2xhc3MgbWV0aG9kcyBjYWxsZWQgJ2dldHRleHQnLiAgKi8KKysKKysvKiBUaGUgdXNlciBjYW4gZGVmaW5lIF9JTlRMX1JFRElSRUNUX0lOTElORSBvciBfSU5UTF9SRURJUkVDVF9NQUNST1MuCisrICAgSWYgaGUgZG9lc24ndCwgd2UgY2hvb3NlIHRoZSBtZXRob2QuICBBIHRoaXJkIHBvc3NpYmxlIG1ldGhvZCBpcworKyAgIF9JTlRMX1JFRElSRUNUX0FTTSwgc3VwcG9ydGVkIG9ubHkgYnkgR0NDLiAgKi8KKysjaWYgIShkZWZpbmVkIF9JTlRMX1JFRElSRUNUX0lOTElORSB8fCBkZWZpbmVkIF9JTlRMX1JFRElSRUNUX01BQ1JPUykKKysjIGlmIF9fR05VQ19fID49IDIgJiYgIWRlZmluZWQgX19BUFBMRV9DQ19fICYmICFkZWZpbmVkIF9fTUlOR1czMl9fICYmICEoX19HTlVDX18gPT0gMiAmJiBkZWZpbmVkIF9BSVgpICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMpCisrIyAgZGVmaW5lIF9JTlRMX1JFRElSRUNUX0FTTQorKyMgZWxzZQorKyMgIGlmZGVmIF9fY3BsdXNwbHVzCisrIyAgIGRlZmluZSBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKysjICBlbHNlCisrIyAgIGRlZmluZSBfSU5UTF9SRURJUkVDVF9NQUNST1MKKysjICBlbmRpZgorKyMgZW5kaWYKKysjZW5kaWYKKysvKiBBdXhpbGlhcnkgbWFjcm9zLiAgKi8KKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfQVNNCisrIyBkZWZpbmUgX0lOVExfQVNNKGNuYW1lKSBfX2FzbV9fIChfSU5UTF9BU01OQU1FIChfX1VTRVJfTEFCRUxfUFJFRklYX18sICNjbmFtZSkpCisrIyBkZWZpbmUgX0lOVExfQVNNTkFNRShwcmVmaXgsY25hbWVzdHJpbmcpIF9JTlRMX1NUUklOR0lGWSAocHJlZml4KSBjbmFtZXN0cmluZworKyMgZGVmaW5lIF9JTlRMX1NUUklOR0lGWShwcmVmaXgpICNwcmVmaXgKKysjZWxzZQorKyMgZGVmaW5lIF9JTlRMX0FTTShjbmFtZSkKKysjZW5kaWYKKysKKysvKiBMb29rIHVwIE1TR0lEIGluIHRoZSBjdXJyZW50IGRlZmF1bHQgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudAorKyAgIExDX01FU1NBR0VTIGxvY2FsZS4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBNU0dJRCBpdHNlbGYgKHRoZSBkZWZhdWx0CisrICAgdGV4dCkuICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9nZXR0ZXh0IChjb25zdCBjaGFyICpfX21zZ2lkKTsKKytzdGF0aWMgaW5saW5lIGNoYXIgKmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQpCisreworKyAgcmV0dXJuIGxpYmludGxfZ2V0dGV4dCAoX19tc2dpZCk7CisrfQorKyNlbHNlCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgZGVmaW5lIGdldHRleHQgbGliaW50bF9nZXR0ZXh0CisrI2VuZGlmCisrZXh0ZXJuIGNoYXIgKmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQpCisrICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9nZXR0ZXh0KTsKKysjZW5kaWYKKysKKysvKiBMb29rIHVwIE1TR0lEIGluIHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQKKysgICBMQ19NRVNTQUdFUyBsb2NhbGUuICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9kZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkKTsKKytzdGF0aWMgaW5saW5lIGNoYXIgKmRnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQpCisreworKyAgcmV0dXJuIGxpYmludGxfZGdldHRleHQgKF9fZG9tYWlubmFtZSwgX19tc2dpZCk7CisrfQorKyNlbHNlCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgZGVmaW5lIGRnZXR0ZXh0IGxpYmludGxfZGdldHRleHQKKysjZW5kaWYKKytleHRlcm4gY2hhciAqZGdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCkKKysgICAgICAgX0lOVExfQVNNIChsaWJpbnRsX2RnZXR0ZXh0KTsKKysjZW5kaWYKKysKKysvKiBMb29rIHVwIE1TR0lEIGluIHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQgQ0FURUdPUlkKKysgICBsb2NhbGUuICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9kY2dldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCwKKysJCQkJaW50IF9fY2F0ZWdvcnkpOworK3N0YXRpYyBpbmxpbmUgY2hhciAqZGNnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQsCisrCQkJICAgICAgIGludCBfX2NhdGVnb3J5KQorK3sKKysgIHJldHVybiBsaWJpbnRsX2RjZ2V0dGV4dCAoX19kb21haW5uYW1lLCBfX21zZ2lkLCBfX2NhdGVnb3J5KTsKKyt9CisrI2Vsc2UKKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisrIyBkZWZpbmUgZGNnZXR0ZXh0IGxpYmludGxfZGNnZXR0ZXh0CisrI2VuZGlmCisrZXh0ZXJuIGNoYXIgKmRjZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkLAorKwkJCWludCBfX2NhdGVnb3J5KQorKyAgICAgICBfSU5UTF9BU00gKGxpYmludGxfZGNnZXR0ZXh0KTsKKysjZW5kaWYKKysKKysKKysvKiBTaW1pbGFyIHRvIGBnZXR0ZXh0JyBidXQgc2VsZWN0IHRoZSBwbHVyYWwgZm9ybSBjb3JyZXNwb25kaW5nIHRvIHRoZQorKyAgIG51bWJlciBOLiAgKi8KKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCisrZXh0ZXJuIGNoYXIgKmxpYmludGxfbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKysJCQkgICAgICAgdW5zaWduZWQgbG9uZyBpbnQgX19uKTsKKytzdGF0aWMgaW5saW5lIGNoYXIgKm5nZXR0ZXh0IChjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisrCQkJICAgICAgdW5zaWduZWQgbG9uZyBpbnQgX19uKQorK3sKKysgIHJldHVybiBsaWJpbnRsX25nZXR0ZXh0IChfX21zZ2lkMSwgX19tc2dpZDIsIF9fbik7CisrfQorKyNlbHNlCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgZGVmaW5lIG5nZXR0ZXh0IGxpYmludGxfbmdldHRleHQKKysjZW5kaWYKKytleHRlcm4gY2hhciAqbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKysJCSAgICAgICB1bnNpZ25lZCBsb25nIGludCBfX24pCisrICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9uZ2V0dGV4dCk7CisrI2VuZGlmCisrCisrLyogU2ltaWxhciB0byBgZGdldHRleHQnIGJ1dCBzZWxlY3QgdGhlIHBsdXJhbCBmb3JtIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisrICAgbnVtYmVyIE4uICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9kbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZDEsCisrCQkJCWNvbnN0IGNoYXIgKl9fbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBfX24pOworK3N0YXRpYyBpbmxpbmUgY2hhciAqZG5nZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQxLAorKwkJCSAgICAgICBjb25zdCBjaGFyICpfX21zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgX19uKQorK3sKKysgIHJldHVybiBsaWJpbnRsX2RuZ2V0dGV4dCAoX19kb21haW5uYW1lLCBfX21zZ2lkMSwgX19tc2dpZDIsIF9fbik7CisrfQorKyNlbHNlCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgZGVmaW5lIGRuZ2V0dGV4dCBsaWJpbnRsX2RuZ2V0dGV4dAorKyNlbmRpZgorK2V4dGVybiBjaGFyICpkbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQljb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisrCQkJdW5zaWduZWQgbG9uZyBpbnQgX19uKQorKyAgICAgICBfSU5UTF9BU00gKGxpYmludGxfZG5nZXR0ZXh0KTsKKysjZW5kaWYKKysKKysvKiBTaW1pbGFyIHRvIGBkY2dldHRleHQnIGJ1dCBzZWxlY3QgdGhlIHBsdXJhbCBmb3JtIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisrICAgbnVtYmVyIE4uICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9kY25nZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJCSBjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisrCQkJCSB1bnNpZ25lZCBsb25nIGludCBfX24sIGludCBfX2NhdGVnb3J5KTsKKytzdGF0aWMgaW5saW5lIGNoYXIgKmRjbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQkJY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorKwkJCQl1bnNpZ25lZCBsb25nIGludCBfX24sIGludCBfX2NhdGVnb3J5KQorK3sKKysgIHJldHVybiBsaWJpbnRsX2RjbmdldHRleHQgKF9fZG9tYWlubmFtZSwgX19tc2dpZDEsIF9fbXNnaWQyLCBfX24sIF9fY2F0ZWdvcnkpOworK30KKysjZWxzZQorKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKysjIGRlZmluZSBkY25nZXR0ZXh0IGxpYmludGxfZGNuZ2V0dGV4dAorKyNlbmRpZgorK2V4dGVybiBjaGFyICpkY25nZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJIGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKysJCQkgdW5zaWduZWQgbG9uZyBpbnQgX19uLCBpbnQgX19jYXRlZ29yeSkKKysgICAgICAgX0lOVExfQVNNIChsaWJpbnRsX2RjbmdldHRleHQpOworKyNlbmRpZgorKworKworKy8qIFNldCB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyB0byBET01BSU5OQU1FLgorKyAgIElmIERPTUFJTk5BTUUgaXMgbnVsbCwgcmV0dXJuIHRoZSBjdXJyZW50IGRlZmF1bHQuCisrICAgSWYgRE9NQUlOTkFNRSBpcyAiIiwgcmVzZXQgdG8gdGhlIGRlZmF1bHQgb2YgIm1lc3NhZ2VzIi4gICovCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorK2V4dGVybiBjaGFyICpsaWJpbnRsX3RleHRkb21haW4gKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSk7Cisrc3RhdGljIGlubGluZSBjaGFyICp0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUpCisreworKyAgcmV0dXJuIGxpYmludGxfdGV4dGRvbWFpbiAoX19kb21haW5uYW1lKTsKKyt9CisrI2Vsc2UKKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisrIyBkZWZpbmUgdGV4dGRvbWFpbiBsaWJpbnRsX3RleHRkb21haW4KKysjZW5kaWYKKytleHRlcm4gY2hhciAqdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lKQorKyAgICAgICBfSU5UTF9BU00gKGxpYmludGxfdGV4dGRvbWFpbik7CisrI2VuZGlmCisrCisrLyogU3BlY2lmeSB0aGF0IHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyB3aWxsIGJlIGZvdW5kCisrICAgaW4gRElSTkFNRSByYXRoZXIgdGhhbiBpbiB0aGUgc3lzdGVtIGxvY2FsZSBkYXRhIGJhc2UuICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9iaW5kdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCQkgICAgIGNvbnN0IGNoYXIgKl9fZGlybmFtZSk7Cisrc3RhdGljIGlubGluZSBjaGFyICpiaW5kdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCQkgICAgY29uc3QgY2hhciAqX19kaXJuYW1lKQorK3sKKysgIHJldHVybiBsaWJpbnRsX2JpbmR0ZXh0ZG9tYWluIChfX2RvbWFpbm5hbWUsIF9fZGlybmFtZSk7CisrfQorKyNlbHNlCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgZGVmaW5lIGJpbmR0ZXh0ZG9tYWluIGxpYmludGxfYmluZHRleHRkb21haW4KKysjZW5kaWYKKytleHRlcm4gY2hhciAqYmluZHRleHRkb21haW4gKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19kaXJuYW1lKQorKyAgICAgICBfSU5UTF9BU00gKGxpYmludGxfYmluZHRleHRkb21haW4pOworKyNlbmRpZgorKworKy8qIFNwZWNpZnkgdGhlIGNoYXJhY3RlciBlbmNvZGluZyBpbiB3aGljaCB0aGUgbWVzc2FnZXMgZnJvbSB0aGUKKysgICBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyB3aWxsIGJlIHJldHVybmVkLiAgKi8KKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCisrZXh0ZXJuIGNoYXIgKmxpYmludGxfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQkJCSAgICAgIGNvbnN0IGNoYXIgKl9fY29kZXNldCk7Cisrc3RhdGljIGlubGluZSBjaGFyICpiaW5kX3RleHRkb21haW5fY29kZXNldCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCQkJICAgICBjb25zdCBjaGFyICpfX2NvZGVzZXQpCisreworKyAgcmV0dXJuIGxpYmludGxfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKF9fZG9tYWlubmFtZSwgX19jb2Rlc2V0KTsKKyt9CisrI2Vsc2UKKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisrIyBkZWZpbmUgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgbGliaW50bF9iaW5kX3RleHRkb21haW5fY29kZXNldAorKyNlbmRpZgorK2V4dGVybiBjaGFyICpiaW5kX3RleHRkb21haW5fY29kZXNldCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCQkgICAgICBjb25zdCBjaGFyICpfX2NvZGVzZXQpCisrICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9iaW5kX3RleHRkb21haW5fY29kZXNldCk7CisrI2VuZGlmCisrCisrCisrLyogU3VwcG9ydCBmb3IgZm9ybWF0IHN0cmluZ3Mgd2l0aCBwb3NpdGlvbnMgaW4gKnByaW50ZigpLCBmb2xsb3dpbmcgdGhlCisrICAgUE9TSVgvWFNJIHNwZWNpZmljYXRpb24uCisrICAgTm90ZTogVGhlc2UgcmVwbGFjZW1lbnRzIGZvciB0aGUgKnByaW50ZigpIGZ1bmN0aW9ucyBhcmUgdmlzaWJsZSBvbmx5CisrICAgaW4gc291cmNlIGZpbGVzIHRoYXQgI2luY2x1ZGUgPGxpYmludGwuaD4gb3IgI2luY2x1ZGUgImdldHRleHQuaCIuCisrICAgUGFja2FnZXMgdGhhdCB1c2UgKnByaW50ZigpIGluIHNvdXJjZSBmaWxlcyB0aGF0IGRvbid0IHJlZmVyIHRvIF8oKQorKyAgIG9yIGdldHRleHQoKSBidXQgZm9yIHdoaWNoIHRoZSBmb3JtYXQgc3RyaW5nIGNvdWxkIGJlIHRoZSByZXR1cm4gdmFsdWUKKysgICBvZiBfKCkgb3IgZ2V0dGV4dCgpIG5lZWQgdG8gYWRkIHRoaXMgI2luY2x1ZGUuICBPaCB3ZWxsLiAgKi8KKysKKysjaWYgIUBIQVZFX1BPU0lYX1BSSU5URkAKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrLyogR2V0IHZhX2xpc3QuICAqLworKyNpZiBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIKKysjIGluY2x1ZGUgPHN0ZGFyZy5oPgorKyNlbHNlCisrIyBpbmNsdWRlIDx2YXJhcmdzLmg+CisrI2VuZGlmCisrCisrI3VuZGVmIGZwcmludGYKKysjZGVmaW5lIGZwcmludGYgbGliaW50bF9mcHJpbnRmCisrZXh0ZXJuIGludCBmcHJpbnRmIChGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKKysjdW5kZWYgdmZwcmludGYKKysjZGVmaW5lIHZmcHJpbnRmIGxpYmludGxfdmZwcmludGYKKytleHRlcm4gaW50IHZmcHJpbnRmIChGSUxFICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisrCisrI3VuZGVmIHByaW50ZgorKyNkZWZpbmUgcHJpbnRmIGxpYmludGxfcHJpbnRmCisrZXh0ZXJuIGludCBwcmludGYgKGNvbnN0IGNoYXIgKiwgLi4uKTsKKysjdW5kZWYgdnByaW50ZgorKyNkZWZpbmUgdnByaW50ZiBsaWJpbnRsX3ZwcmludGYKKytleHRlcm4gaW50IHZwcmludGYgKGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisrCisrI3VuZGVmIHNwcmludGYKKysjZGVmaW5lIHNwcmludGYgbGliaW50bF9zcHJpbnRmCisrZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKKysjdW5kZWYgdnNwcmludGYKKysjZGVmaW5lIHZzcHJpbnRmIGxpYmludGxfdnNwcmludGYKKytleHRlcm4gaW50IHZzcHJpbnRmIChjaGFyICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisrCisrI2lmIEBIQVZFX1NOUFJJTlRGQAorKworKyN1bmRlZiBzbnByaW50ZgorKyNkZWZpbmUgc25wcmludGYgbGliaW50bF9zbnByaW50ZgorK2V4dGVybiBpbnQgc25wcmludGYgKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIC4uLik7CisrI3VuZGVmIHZzbnByaW50ZgorKyNkZWZpbmUgdnNucHJpbnRmIGxpYmludGxfdnNucHJpbnRmCisrZXh0ZXJuIGludCB2c25wcmludGYgKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIHZhX2xpc3QpOworKworKyNlbmRpZgorKworKyNpZiBASEFWRV9BU1BSSU5URkAKKysKKysjdW5kZWYgYXNwcmludGYKKysjZGVmaW5lIGFzcHJpbnRmIGxpYmludGxfYXNwcmludGYKKytleHRlcm4gaW50IGFzcHJpbnRmIChjaGFyICoqLCBjb25zdCBjaGFyICosIC4uLik7CisrI3VuZGVmIHZhc3ByaW50ZgorKyNkZWZpbmUgdmFzcHJpbnRmIGxpYmludGxfdmFzcHJpbnRmCisrZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisrCisrI2VuZGlmCisrCisrI2lmIEBIQVZFX1dQUklOVEZACisrCisrI3VuZGVmIGZ3cHJpbnRmCisrI2RlZmluZSBmd3ByaW50ZiBsaWJpbnRsX2Z3cHJpbnRmCisrZXh0ZXJuIGludCBmd3ByaW50ZiAoRklMRSAqLCBjb25zdCB3Y2hhcl90ICosIC4uLik7CisrI3VuZGVmIHZmd3ByaW50ZgorKyNkZWZpbmUgdmZ3cHJpbnRmIGxpYmludGxfdmZ3cHJpbnRmCisrZXh0ZXJuIGludCB2ZndwcmludGYgKEZJTEUgKiwgY29uc3Qgd2NoYXJfdCAqLCB2YV9saXN0KTsKKysKKysjdW5kZWYgd3ByaW50ZgorKyNkZWZpbmUgd3ByaW50ZiBsaWJpbnRsX3dwcmludGYKKytleHRlcm4gaW50IHdwcmludGYgKGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKKysjdW5kZWYgdndwcmludGYKKysjZGVmaW5lIHZ3cHJpbnRmIGxpYmludGxfdndwcmludGYKKytleHRlcm4gaW50IHZ3cHJpbnRmIChjb25zdCB3Y2hhcl90ICosIHZhX2xpc3QpOworKworKyN1bmRlZiBzd3ByaW50ZgorKyNkZWZpbmUgc3dwcmludGYgbGliaW50bF9zd3ByaW50ZgorK2V4dGVybiBpbnQgc3dwcmludGYgKHdjaGFyX3QgKiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90ICosIC4uLik7CisrI3VuZGVmIHZzd3ByaW50ZgorKyNkZWZpbmUgdnN3cHJpbnRmIGxpYmludGxfdnN3cHJpbnRmCisrZXh0ZXJuIGludCB2c3dwcmludGYgKHdjaGFyX3QgKiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90ICosIHZhX2xpc3QpOworKworKyNlbmRpZgorKworKyNlbmRpZgorKworKworKy8qIFN1cHBvcnQgZm9yIHJlbG9jYXRhYmxlIHBhY2thZ2VzLiAgKi8KKysKKysvKiBTZXRzIHRoZSBvcmlnaW5hbCBhbmQgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeCBvZiB0aGUgcGFja2FnZS4KKysgICBSZWxvY2F0aW9uIHNpbXBseSByZXBsYWNlcyBhIHBhdGhuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsIHByZWZpeAorKyAgIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHBhdGhuYW1lIHdpdGggdGhlIGN1cnJlbnQgcHJlZml4IGluc3RlYWQuICBCb3RoCisrICAgcHJlZml4ZXMgc2hvdWxkIGJlIGRpcmVjdG9yeSBuYW1lcyB3aXRob3V0IHRyYWlsaW5nIHNsYXNoIChpLmUuIHVzZSAiIgorKyAgIGluc3RlYWQgb2YgIi8iKS4gICovCisrI2RlZmluZSBsaWJpbnRsX3NldF9yZWxvY2F0aW9uX3ByZWZpeCBsaWJpbnRsX3NldF9yZWxvY2F0aW9uX3ByZWZpeAorK2V4dGVybiB2b2lkCisrICAgICAgIGxpYmludGxfc2V0X3JlbG9jYXRpb25fcHJlZml4IChjb25zdCBjaGFyICpvcmlnX3ByZWZpeCwKKysJCQkJICAgICAgY29uc3QgY2hhciAqY3Vycl9wcmVmaXgpOworKworKworKyNpZmRlZiBfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKysKKysjZW5kaWYgLyogbGliaW50bC5oICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbGludXgtbXNnLnNlZAkxOTk4LTA0LTI2IDA5OjIwOjUyLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9saW51eC1tc2cuc2VkCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCitAQCAtMSwxMDAgKzAsMCBAQAorLSMgcG8ybXNnLnNlZCAtIENvbnZlcnQgVW5pZm9ydW0gc3R5bGUgLnBvIGZpbGUgdG8gTGludXggc3R5bGUgLm1zZyBmaWxlCistIyBDb3B5cmlnaHQgKEMpIDE5OTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistIyBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4sIDE5OTUuCistIworLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0jCistIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLSMKKy0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKy0jCistIworLSMgVGhlIGZpcnN0IGRpcmVjdGl2ZSBpbiB0aGUgLm1zZyBzaG91bGQgYmUgdGhlIGRlZmluaXRpb24gb2YgdGhlCistIyBtZXNzYWdlIHNldCBudW1iZXIuICBXZSB1c2UgYWx3YXlzIHNldCBudW1iZXIgMS4KKy0jCistMSB7CistICBpXAorLSRzZXQgMSAjIEF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSBwbzJtc2cuc2VkCistICBoCistICBzLy4qLzAvCistICB4CistfQorLSMKKy0jIE1pdGNoJ3Mgb2xkIGNhdGFsb2cgZm9ybWF0IGRvZXMgbm90IGFsbG93IGNvbW1lbnRzLgorLSMKKy0jIFdlIGNvcHkgdGhlIG9yaWdpbmFsIG1lc3NhZ2UgYXMgYSBjb21tZW50IGludG8gdGhlIC5tc2cgZmlsZS4KKy0jCistL15tc2dpZC8geworLSAgcy9tc2dpZFsgCV0qIi8vCistIworLSMgVGhpcyBkb2VzIG5vdCB3b3JrIG5vdyB3aXRoIHRoZSBuZXcgZm9ybWF0LgorLSMgLyIkLyEgeworLSMgICBzL1xcJC8vCistIyAgIHMvJC8gLi4uIChtb3JlIGxpbmVzIGZvbGxvd2luZykiLworLSMgfQorLSAgeAorLSMgVGhlIGZvbGxvd2luZyBuaWNlIHNvbHV0aW9uIGlzIGJ5CistIyBCcnVubyA8SGFpYmxlQG1hMnMyLm1hdGhlbWF0aWsudW5pLWthcmxzcnVoZS5kZT4KKy0gIHRkCistIyBJbmNyZW1lbnQgYSBkZWNpbWFsIG51bWJlciBpbiBwYXR0ZXJuIHNwYWNlLgorLSMgRmlyc3QgaGlkZSB0cmFpbGluZyBgOScgZGlnaXRzLgorLSAgOmQKKy0gIHMvOVwoXypcKSQvX1wxLworLSAgdGQKKy0jIEFzc3VyZSBhdCBsZWFzdCBvbmUgZGlnaXQgaXMgYXZhaWxhYmxlLgorLSAgcy9eXChfKlwpJC8wXDEvCistIyBJbmNyZW1lbnQgdGhlIGxhc3QgZGlnaXQuCistICBzLzhcKF8qXCkkLzlcMS8KKy0gIHMvN1woXypcKSQvOFwxLworLSAgcy82XChfKlwpJC83XDEvCistICBzLzVcKF8qXCkkLzZcMS8KKy0gIHMvNFwoXypcKSQvNVwxLworLSAgcy8zXChfKlwpJC80XDEvCistICBzLzJcKF8qXCkkLzNcMS8KKy0gIHMvMVwoXypcKSQvMlwxLworLSAgcy8wXChfKlwpJC8xXDEvCistIyBDb252ZXJ0IHRoZSBoaWRkZW4gYDknIGRpZ2l0cyB0byBgMCdzLgorLSAgcy9fLzAvZworLSAgeAorLSAgRworLSAgcy9cKC4qXCkiXG5cKFswLTldKlwpLyQgI1wyIE9yaWdpbmFsIE1lc3NhZ2U6KFwxKS9wCistfQorLSMKKy0jIFRoZSAubXNnIGZpbGUgY29udGFpbnMsIG90aGVyIHRoZW4gdGhlIC5wbyBmaWxlLCBvbmx5IHRoZSB0cmFuc2xhdGlvbnMKKy0jIGJ1dCBlYWNoIGdpdmVuIGEgdW5pcXVlIElELiAgU3RhcnRpbmcgZnJvbSAxIGFuZCBpbmNyZW1lbnRpbmcgYnkgMSBmb3IKKy0jIGVhY2ggbWVzc2FnZSB3ZSBhc3NpZ24gdGhlbSB0byB0aGUgbWVzc2FnZXMuCistIyBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgLnBvIGZpbGUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgY2F0LWlkLXRibC5jIGZpbGUKKy0jICh3aXRoIHBvLXRvLXRibCkgaXMgdGhlIHNhbWUgYXMgdGhlIG9uZSB1c2VkIGhlcmUuICAoQXQgbGVhc3QgdGhlIG9yZGVyCistIyBvZiBkZWNsYXJhdGlvbnMgbXVzdCBub3QgYmUgY2hhbmdlZC4pCistIworLS9ebXNnc3RyLyB7CistICBzL21zZ3N0clsgCV0qIlwoLipcKSIvIyBcMS8KKy0jIENsZWFyIHN1YnN0aXR1dGlvbiBmbGFnLgorLSAgdGIKKy0jIEFwcGVuZCB0aGUgbmV4dCBsaW5lLgorLSAgOmIKKy0gIE4KKy0jIExvb2sgd2hldGhlciBzZWNvbmQgcGFydCBpcyBjb250aW51YXRpb24gbGluZS4KKy0gIHMvXCguKlxuXCkiXCguKlwpIi9cMVwyLworLSMgWWVzLCB0aGVuIGJyYW5jaC4KKy0gIHRhCistICBQCistICBECistIyBOb3RlIHRoYXQgRCBpbmNsdWRlcyBhIGp1bXAgdG8gdGhlIHN0YXJ0ISEKKy0jIFdlIGZvdW5kIGEgY29udGludWF0aW9uIGxpbmUuICBCdXQgYmVmb3JlIHByaW50aW5nIGluc2VydCAnXCcuCistICA6YQorLSAgcy9cKC4qXClcKFxuLipcKS9cMVxcXDIvCistICBQCistIyBXZSBjYW5ub3QgdXNlIEQgaGVyZS4KKy0gIHMvLipcblwoLipcKS9cMS8KKy0gIHRiCistfQorLWQKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9sb2FkaW5mby5oCTE5OTgtMDQtMjYgMDk6MjA6NTIuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xvYWRpbmZvLmgJMjAwNC0wOS0xMiAxNDo0MDozNC40Njg3MzA5MTIgLTA0MDAKK0BAIC0xLDkgKzEsNTQgQEAKKy0jaWZuZGVmIFBBUkFNUworLSMgaWYgX19TVERDX18KKy0jICBkZWZpbmUgUEFSQU1TKGFyZ3MpIGFyZ3MKKy0jIGVsc2UKKy0jICBkZWZpbmUgUEFSQU1TKGFyZ3MpICgpCistIyBlbmRpZgorKy8qIENvcHlyaWdodCAoQykgMTk5Ni0xOTk5LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgQ29udHJpYnV0ZWQgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTYuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX0xPQURJTkZPX0gKKysjZGVmaW5lIF9MT0FESU5GT19ICTEKKysKKysvKiBEZWNsYXJhdGlvbnMgb2YgbG9jYWxlIGRlcGVuZGVudCBjYXRhbG9nIGxvb2t1cCBmdW5jdGlvbnMuCisrICAgSW1wbGVtZW50ZWQgaW4KKysKKysgICAgIGxvY2FsZWFsaWFzLmMgICAgUG9zc2libHkgcmVwbGFjZSBhIGxvY2FsZSBuYW1lIGJ5IGFub3RoZXIuCisrICAgICBleHBsb2RlbmFtZS5jICAgIFNwbGl0IGEgbG9jYWxlIG5hbWUgaW50byBpdHMgdmFyaW91cyBmaWVsZHMuCisrICAgICBsMTBuZmxpc3QuYyAgICAgIEdlbmVyYXRlIGEgbGlzdCBvZiBmaWxlbmFtZXMgb2YgcG9zc2libGUgbWVzc2FnZSBjYXRhbG9ncy4KKysgICAgIGZpbmRkb21haW4uYyAgICAgRmluZCBhbmQgb3BlbiB0aGUgcmVsZXZhbnQgbWVzc2FnZSBjYXRhbG9ncy4KKysKKysgICBUaGUgbWFpbiBmdW5jdGlvbiBfbmxfZmluZF9kb21haW4oKSBpbiBmaW5kZG9tYWluLmMgaXMgZGVjbGFyZWQKKysgICBpbiBnZXR0ZXh0UC5oLgorKyAqLworKworKyNpZm5kZWYgaW50ZXJuYWxfZnVuY3Rpb24KKysjIGRlZmluZSBpbnRlcm5hbF9mdW5jdGlvbgorKyNlbmRpZgorKworKy8qIFRlbGwgdGhlIGNvbXBpbGVyIHdoZW4gYSBjb25kaXRpb25hbCBvciBpbnRlZ2VyIGV4cHJlc3Npb24gaXMKKysgICBhbG1vc3QgYWx3YXlzIHRydWUgb3IgYWxtb3N0IGFsd2F5cyBmYWxzZS4gICovCisrI2lmbmRlZiBIQVZFX0JVSUxUSU5fRVhQRUNUCisrIyBkZWZpbmUgX19idWlsdGluX2V4cGVjdChleHByLCB2YWwpIChleHByKQorKyNlbmRpZgorKworKy8qIFNlcGFyYXRvciBpbiBQQVRIIGxpa2UgbGlzdHMgb2YgcGF0aG5hbWVzLiAgKi8KKysjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0VNWF9fIHx8IGRlZmluZWQgX19ESkdQUF9fCisrICAvKiBXaW4zMiwgT1MvMiwgRE9TICovCisrIyBkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJzsnCisrI2Vsc2UKKysgIC8qIFVuaXggKi8KKysjIGRlZmluZSBQQVRIX1NFUEFSQVRPUiAnOicKKyAjZW5kaWYKKyAKKyAvKiBFbmNvZGluZyBvZiBsb2NhbGUgbmFtZSBwYXJ0cy4gICovCitAQCAtMzIsMjcgKzc3LDY5IEBACisgfTsKKyAKKyAKKy1leHRlcm4gY29uc3QgY2hhciAqX25sX25vcm1hbGl6ZV9jb2Rlc2V0IFBBUkFNUyAoKGNvbnN0IGNoYXIgKmNvZGVzZXQsCistCQkJCQkJICBzaXplX3QgbmFtZV9sZW4pKTsKKysvKiBOb3JtYWxpemUgY29kZXNldCBuYW1lLiAgVGhlcmUgaXMgbm8gc3RhbmRhcmQgZm9yIHRoZSBjb2Rlc2V0CisrICAgbmFtZXMuICBOb3JtYWxpemF0aW9uIGFsbG93cyB0aGUgdXNlciB0byB1c2UgYW55IG9mIHRoZSBjb21tb24KKysgICBuYW1lcy4gIFRoZSByZXR1cm4gdmFsdWUgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBoYXMgdG8gYmUKKysgICBmcmVlZCBieSB0aGUgY2FsbGVyLiAgKi8KKytleHRlcm4gY29uc3QgY2hhciAqX25sX25vcm1hbGl6ZV9jb2Rlc2V0IChjb25zdCBjaGFyICpjb2Rlc2V0LAorKwkJCQkJICBzaXplX3QgbmFtZV9sZW4pOworIAorKy8qIExvb2t1cCBhIGxvY2FsZSBkZXBlbmRlbnQgZmlsZS4KKysgICAqTDEwTkZJTEVfTElTVCBkZW5vdGVzIGEgcG9vbCBvZiBsb29rdXAgcmVzdWx0cyBvZiBsb2NhbGUgZGVwZW5kZW50CisrICAgZmlsZXMgb2YgdGhlIHNhbWUga2luZCwgc29ydGVkIGluIGRlY3JlYXNpbmcgb3JkZXIgb2YgLT5maWxlbmFtZS4KKysgICBESVJMSVNUIGFuZCBESVJMSVNUX0xFTiBhcmUgYW4gYXJneiBsaXN0IG9mIGRpcmVjdG9yaWVzIGluIHdoaWNoIHRvCisrICAgbG9vaywgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgZGlyZWN0b3J5IChpLmUuIERJUkxJU1RfTEVOID4gMCkuCisrICAgTUFTSywgTEFOR1VBR0UsIFRFUlJJVE9SWSwgQ09ERVNFVCwgTk9STUFMSVpFRF9DT0RFU0VULCBNT0RJRklFUiwKKysgICBTUEVDSUFMLCBTUE9OU09SLCBSRVZJU0lPTiBhcmUgdGhlIHBpZWNlcyBvZiB0aGUgbG9jYWxlIG5hbWUsIGFzCisrICAgcHJvZHVjZWQgYnkgX25sX2V4cGxvZGVfbmFtZSgpLiAgRklMRU5BTUUgaXMgdGhlIGZpbGVuYW1lIHN1ZmZpeC4KKysgICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBsb29rdXAgcmVzdWx0LCBlaXRoZXIgZm91bmQgaW4gKkwxME5GSUxFX0xJU1QsCisrICAgb3IgLSBpZiBET19BTExPQ0FURSBpcyBub256ZXJvIC0gZnJlc2hseSBhbGxvY2F0ZWQsIG9yIHBvc3NpYmx5IE5VTEwuCisrICAgSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBub24tTlVMTCwgaXQgaXMgYWRkZWQgdG8gKkwxME5GSUxFX0xJU1QsIGFuZAorKyAgIGl0cyAtPm5leHQgZmllbGQgZGVub3RlcyB0aGUgY2hhaW5pbmcgaW5zaWRlICpMMTBORklMRV9MSVNULCBhbmQKKysgICBmdXJ0aGVybW9yZSBpdHMgLT5zdWNjZXNzb3JbXSBmaWVsZCBjb250YWlucyBhIGxpc3Qgb2Ygb3RoZXIgbG9va3VwCisrICAgcmVzdWx0cyBmcm9tIHdoaWNoIHRoaXMgbG9va3VwIHJlc3VsdCBpbmhlcml0cy4gICovCisgZXh0ZXJuIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKgorLV9ubF9tYWtlX2wxMG5mbGlzdCBQQVJBTVMgKChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICoqbDEwbmZpbGVfbGlzdCwKKy0JCQkgICAgY29uc3QgY2hhciAqZGlybGlzdCwgc2l6ZV90IGRpcmxpc3RfbGVuLCBpbnQgbWFzaywKKy0JCQkgICAgY29uc3QgY2hhciAqbGFuZ3VhZ2UsIGNvbnN0IGNoYXIgKnRlcnJpdG9yeSwKKy0JCQkgICAgY29uc3QgY2hhciAqY29kZXNldCwKKy0JCQkgICAgY29uc3QgY2hhciAqbm9ybWFsaXplZF9jb2Rlc2V0LAorLQkJCSAgICBjb25zdCBjaGFyICptb2RpZmllciwgY29uc3QgY2hhciAqc3BlY2lhbCwKKy0JCQkgICAgY29uc3QgY2hhciAqc3BvbnNvciwgY29uc3QgY2hhciAqcmV2aXNpb24sCistCQkJICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZG9fYWxsb2NhdGUpKTsKKytfbmxfbWFrZV9sMTBuZmxpc3QgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKipsMTBuZmlsZV9saXN0LAorKwkJICAgIGNvbnN0IGNoYXIgKmRpcmxpc3QsIHNpemVfdCBkaXJsaXN0X2xlbiwgaW50IG1hc2ssCisrCQkgICAgY29uc3QgY2hhciAqbGFuZ3VhZ2UsIGNvbnN0IGNoYXIgKnRlcnJpdG9yeSwKKysJCSAgICBjb25zdCBjaGFyICpjb2Rlc2V0LCBjb25zdCBjaGFyICpub3JtYWxpemVkX2NvZGVzZXQsCisrCQkgICAgY29uc3QgY2hhciAqbW9kaWZpZXIsIGNvbnN0IGNoYXIgKnNwZWNpYWwsCisrCQkgICAgY29uc3QgY2hhciAqc3BvbnNvciwgY29uc3QgY2hhciAqcmV2aXNpb24sCisrCQkgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBkb19hbGxvY2F0ZSk7CisgCisrLyogTG9va3VwIHRoZSByZWFsIGxvY2FsZSBuYW1lIGZvciBhIGxvY2FsZSBhbGlhcyBOQU1FLCBvciBOVUxMIGlmCisrICAgTkFNRSBpcyBub3QgYSBsb2NhbGUgYWxpYXMgKGJ1dCBwb3NzaWJseSBhIHJlYWwgbG9jYWxlIG5hbWUpLgorKyAgIFRoZSByZXR1cm4gdmFsdWUgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIG11c3Qgbm90IGJlIGZyZWVkLiAgKi8KKytleHRlcm4gY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyAoY29uc3QgY2hhciAqbmFtZSk7CisgCistZXh0ZXJuIGNvbnN0IGNoYXIgKl9ubF9leHBhbmRfYWxpYXMgUEFSQU1TICgoY29uc3QgY2hhciAqbmFtZSkpOworKy8qIFNwbGl0IGEgbG9jYWxlIG5hbWUgTkFNRSBpbnRvIGl0cyBwaWVjZXM6IGxhbmd1YWdlLCBtb2RpZmllciwKKysgICB0ZXJyaXRvcnksIGNvZGVzZXQsIHNwZWNpYWwsIHNwb25zb3IsIHJldmlzaW9uLgorKyAgIE5BTUUgZ2V0cyBkZXN0cnVjdGl2ZWx5IG1vZGlmaWVkOiBOVUwgYnl0ZXMgYXJlIGluc2VydGVkIGhlcmUgYW5kCisrICAgdGhlcmUuICAqTEFOR1VBR0UgZ2V0cyBhc3NpZ25lZCBOQU1FLiAgRWFjaCBvZiAqTU9ESUZJRVIsICpURVJSSVRPUlksCisrICAgKkNPREVTRVQsICpTUEVDSUFMLCAqU1BPTlNPUiwgKlJFVklTSU9OIGdldHMgYXNzaWduZWQgZWl0aGVyIGEKKysgICBwb2ludGVyIGludG8gdGhlIG9sZCBOQU1FIHN0cmluZywgb3IgTlVMTC4gICpOT1JNQUxJWkVEX0NPREVTRVQKKysgICBnZXRzIGFzc2lnbmVkIHRoZSBleHBhbmRlZCAqQ09ERVNFVCwgaWYgaXQgaXMgZGlmZmVyZW50IGZyb20gKkNPREVTRVQ7CisrICAgdGhpcyBvbmUgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBoYXMgdG8gYmUgZnJlZWQgYnkgdGhlIGNhbGxlci4KKysgICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgYml0bWFzaywgd2hlcmUgZWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gb25lCisrICAgZmlsbGVkLWluIHZhbHVlOgorKyAgICAgWFBHX01PRElGSUVSLCBDRU5fQVVESUVOQ0UgIGZvciAqTU9ESUZJRVIsCisrICAgICBURVJSSVRPUlkgICAgICAgICAgICAgICAgICAgZm9yICpURVJSSVRPUlksCisrICAgICBYUEdfQ09ERVNFVCAgICAgICAgICAgICAgICAgZm9yICpDT0RFU0VULAorKyAgICAgWFBHX05PUk1fQ09ERVNFVCAgICAgICAgICAgIGZvciAqTk9STUFMSVpFRF9DT0RFU0VULAorKyAgICAgQ0VOX1NQRUNJQUwgICAgICAgICAgICAgICAgIGZvciAqU1BFQ0lBTCwKKysgICAgIENFTl9TUE9OU09SICAgICAgICAgICAgICAgICBmb3IgKlNQT05TT1IsCisrICAgICBDRU5fUkVWSVNJT04gICAgICAgICAgICAgICAgZm9yICpSRVZJU0lPTi4KKysgKi8KKytleHRlcm4gaW50IF9ubF9leHBsb2RlX25hbWUgKGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKipsYW5ndWFnZSwKKysJCQkgICAgIGNvbnN0IGNoYXIgKiptb2RpZmllciwgY29uc3QgY2hhciAqKnRlcnJpdG9yeSwKKysJCQkgICAgIGNvbnN0IGNoYXIgKipjb2Rlc2V0LAorKwkJCSAgICAgY29uc3QgY2hhciAqKm5vcm1hbGl6ZWRfY29kZXNldCwKKysJCQkgICAgIGNvbnN0IGNoYXIgKipzcGVjaWFsLCBjb25zdCBjaGFyICoqc3BvbnNvciwKKysJCQkgICAgIGNvbnN0IGNoYXIgKipyZXZpc2lvbik7CisgCistZXh0ZXJuIGludCBfbmxfZXhwbG9kZV9uYW1lIFBBUkFNUyAoKGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKipsYW5ndWFnZSwKKy0JCQkJICAgICBjb25zdCBjaGFyICoqbW9kaWZpZXIsCistCQkJCSAgICAgY29uc3QgY2hhciAqKnRlcnJpdG9yeSwKKy0JCQkJICAgICBjb25zdCBjaGFyICoqY29kZXNldCwKKy0JCQkJICAgICBjb25zdCBjaGFyICoqbm9ybWFsaXplZF9jb2Rlc2V0LAorLQkJCQkgICAgIGNvbnN0IGNoYXIgKipzcGVjaWFsLAorLQkJCQkgICAgIGNvbnN0IGNoYXIgKipzcG9uc29yLAorLQkJCQkgICAgIGNvbnN0IGNoYXIgKipyZXZpc2lvbikpOworKy8qIFNwbGl0IGEgbG9jYWxlIG5hbWUgTkFNRSBpbnRvIGEgbGVhZGluZyBsYW5ndWFnZSBwYXJ0IGFuZCBhbGwgdGhlCisrICAgcmVzdC4gIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgbGFuZ3VhZ2UsCisrICAgaS5lLiB0byB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgcmVzdC4gICovCisrZXh0ZXJuIGNoYXIgKl9ubF9maW5kX2xhbmd1YWdlIChjb25zdCBjaGFyICpuYW1lKTsKKysKKysjZW5kaWYJLyogbG9hZGluZm8uaCAqLworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2xvYWRtc2djYXQuYwkxOTk4LTA0LTI2IDA5OjIyOjM3LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9sb2FkbXNnY2F0LmMJMjAwNC0wOS0xMiAxNDo0MDozNC40NzM3MzAxNTIgLTA0MDAKK0BAIC0xLDQyICsxLDQ1NSBAQAorLS8qIExvYWQgbmVlZGVkIG1lc3NhZ2UgY2F0YWxvZ3MKKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLyogTG9hZCBuZWVkZWQgbWVzc2FnZSBjYXRhbG9ncy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysvKiBUZWxsIGdsaWJjJ3MgPHN0cmluZy5oPiB0byBwcm92aWRlIGEgcHJvdG90eXBlIGZvciBtZW1wY3B5KCkuCisrICAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4gYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlCisrICAgPGZlYXR1cmVzLmg+LCBhbmQgb25jZSA8ZmVhdHVyZXMuaD4gaGFzIGJlZW4gaW5jbHVkZWQsIGl0J3MgdG9vIGxhdGUuICAqLworKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjIGRlZmluZSBfR05VX1NPVVJDRSAgICAxCisrI2VuZGlmCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAKKy0jaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBfTElCQworLSMgaW5jbHVkZSA8c3RkbGliLmg+CisrI2lmZGVmIF9fR05VQ19fCisrIyB1bmRlZiAgYWxsb2NhCisrIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKysjIGRlZmluZSBIQVZFX0FMTE9DQSAxCisrI2Vsc2UKKysjIGlmZGVmIF9NU0NfVkVSCisrIyAgaW5jbHVkZSA8bWFsbG9jLmg+CisrIyAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisrIyBlbHNlCisrIyAgaWYgZGVmaW5lZCBIQVZFX0FMTE9DQV9IIHx8IGRlZmluZWQgX0xJQkMKKysjICAgaW5jbHVkZSA8YWxsb2NhLmg+CisrIyAgZWxzZQorKyMgICBpZmRlZiBfQUlYCisrICNwcmFnbWEgYWxsb2NhCisrIyAgIGVsc2UKKysjICAgIGlmbmRlZiBhbGxvY2EKKytjaGFyICphbGxvY2EgKCk7CisrIyAgICBlbmRpZgorKyMgICBlbmRpZgorKyMgIGVuZGlmCisrIyBlbmRpZgorICNlbmRpZgorIAorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrCisgI2lmIGRlZmluZWQgSEFWRV9VTklTVERfSCB8fCBkZWZpbmVkIF9MSUJDCisgIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyAjZW5kaWYKKyAKKy0jaWYgKGRlZmluZWQgSEFWRV9NTUFQICYmIGRlZmluZWQgSEFWRV9NVU5NQVApIHx8IGRlZmluZWQgX0xJQkMKKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGxhbmdpbmZvLmg+CisrIyBpbmNsdWRlIDxsb2NhbGUuaD4KKysjZW5kaWYKKysKKysjaWYgKGRlZmluZWQgSEFWRV9NTUFQICYmIGRlZmluZWQgSEFWRV9NVU5NQVAgJiYgIWRlZmluZWQgRElTQUxMT1dfTU1BUCkgXAorKyAgICB8fCAoZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIF9QT1NJWF9NQVBQRURfRklMRVMpCisgIyBpbmNsdWRlIDxzeXMvbW1hbi5oPgorKyMgdW5kZWYgSEFWRV9NTUFQCisrIyBkZWZpbmUgSEFWRV9NTUFQCTEKKysjZWxzZQorKyMgdW5kZWYgSEFWRV9NTUFQCisgI2VuZGlmCisgCistI2luY2x1ZGUgImdldHRleHQuaCIKKysjaWYgZGVmaW5lZCBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCB8fCBkZWZpbmVkIF9MSUJDCisrIyBpbmNsdWRlIDxzdGRpbnQuaD4KKysjZW5kaWYKKysjaWYgZGVmaW5lZCBIQVZFX0lOVFRZUEVTX0ggfHwgZGVmaW5lZCBfTElCQworKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSAiZ21vLmgiCisgI2luY2x1ZGUgImdldHRleHRQLmgiCisrI2luY2x1ZGUgImhhc2gtc3RyaW5nLmgiCisrI2luY2x1ZGUgInBsdXJhbC1leHAuaCIKKysKKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgIi4uL2xvY2FsZS9sb2NhbGVpbmZvLmgiCisrI2VuZGlmCisrCisrLyogUHJvdmlkZSBmYWxsYmFjayB2YWx1ZXMgZm9yIG1hY3JvcyB0aGF0IG91Z2h0IHRvIGJlIGRlZmluZWQgaW4gPGludHR5cGVzLmg+LgorKyAgIE5vdGUgdGhhdCBvdXIgZmFsbGJhY2sgdmFsdWVzIG5lZWQgbm90IGJlIGxpdGVyYWwgc3RyaW5ncywgYmVjYXVzZSB3ZSBkb24ndAorKyAgIHVzZSB0aGVtIHdpdGggcHJlcHJvY2Vzc29yIHN0cmluZyBjb25jYXRlbmF0aW9uLiAgKi8KKysjaWYgIWRlZmluZWQgUFJJZDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWQ4CisrIyBkZWZpbmUgUFJJZDggImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWk4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpOAorKyMgZGVmaW5lIFBSSWk4ICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJbzgKKysjIGRlZmluZSBQUklvOCAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdTggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXU4CisrIyBkZWZpbmUgUFJJdTggInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXg4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4OAorKyMgZGVmaW5lIFBSSXg4ICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWDgKKysjIGRlZmluZSBQUklYOCAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkMTYKKysjIGRlZmluZSBQUklkMTYgImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWkxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJaTE2CisrIyBkZWZpbmUgUFJJaTE2ICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW8xNgorKyMgZGVmaW5lIFBSSW8xNiAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdTE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1MTYKKysjIGRlZmluZSBQUkl1MTYgInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXgxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJeDE2CisrIyBkZWZpbmUgUFJJeDE2ICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVgxNgorKyMgZGVmaW5lIFBSSVgxNiAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkMzIKKysjIGRlZmluZSBQUklkMzIgImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWkzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJaTMyCisrIyBkZWZpbmUgUFJJaTMyICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW8zMgorKyMgZGVmaW5lIFBSSW8zMiAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdTMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1MzIKKysjIGRlZmluZSBQUkl1MzIgInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXgzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJeDMyCisrIyBkZWZpbmUgUFJJeDMyICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVgzMgorKyMgZGVmaW5lIFBSSVgzMiAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkNjQKKysjIGRlZmluZSBQUklkNjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJsZCIgOiAibGxkIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJaTY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpNjQKKysjIGRlZmluZSBQUklpNjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJsaSIgOiAibGxpIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJbzY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvNjQKKysjIGRlZmluZSBQUklvNjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJsbyIgOiAibGxvIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdTY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1NjQKKysjIGRlZmluZSBQUkl1NjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJsdSIgOiAibGx1IikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJeDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4NjQKKysjIGRlZmluZSBQUkl4NjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJseCIgOiAibGx4IikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJWDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYNjQKKysjIGRlZmluZSBQUklYNjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJsWCIgOiAibGxYIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZExFQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZExFQVNUOAorKyMgZGVmaW5lIFBSSWRMRUFTVDggImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlMRUFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWlMRUFTVDgKKysjIGRlZmluZSBQUklpTEVBU1Q4ICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvTEVBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvTEVBU1Q4CisrIyBkZWZpbmUgUFJJb0xFQVNUOCAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUxFQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdUxFQVNUOAorKyMgZGVmaW5lIFBSSXVMRUFTVDggInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhMRUFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXhMRUFTVDgKKysjIGRlZmluZSBQUkl4TEVBU1Q4ICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYTEVBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYTEVBU1Q4CisrIyBkZWZpbmUgUFJJWExFQVNUOCAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZExFQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWRMRUFTVDE2CisrIyBkZWZpbmUgUFJJZExFQVNUMTYgImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlMRUFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpTEVBU1QxNgorKyMgZGVmaW5lIFBSSWlMRUFTVDE2ICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvTEVBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJb0xFQVNUMTYKKysjIGRlZmluZSBQUklvTEVBU1QxNiAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUxFQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXVMRUFTVDE2CisrIyBkZWZpbmUgUFJJdUxFQVNUMTYgInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhMRUFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4TEVBU1QxNgorKyMgZGVmaW5lIFBSSXhMRUFTVDE2ICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYTEVBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWExFQVNUMTYKKysjIGRlZmluZSBQUklYTEVBU1QxNiAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZExFQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWRMRUFTVDMyCisrIyBkZWZpbmUgUFJJZExFQVNUMzIgImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlMRUFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpTEVBU1QzMgorKyMgZGVmaW5lIFBSSWlMRUFTVDMyICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvTEVBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJb0xFQVNUMzIKKysjIGRlZmluZSBQUklvTEVBU1QzMiAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUxFQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXVMRUFTVDMyCisrIyBkZWZpbmUgUFJJdUxFQVNUMzIgInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhMRUFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4TEVBU1QzMgorKyMgZGVmaW5lIFBSSXhMRUFTVDMyICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYTEVBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWExFQVNUMzIKKysjIGRlZmluZSBQUklYTEVBU1QzMiAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZExFQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWRMRUFTVDY0CisrIyBkZWZpbmUgUFJJZExFQVNUNjQgUFJJZDY0CisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlMRUFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpTEVBU1Q2NAorKyMgZGVmaW5lIFBSSWlMRUFTVDY0IFBSSWk2NAorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvTEVBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJb0xFQVNUNjQKKysjIGRlZmluZSBQUklvTEVBU1Q2NCBQUklvNjQKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUxFQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXVMRUFTVDY0CisrIyBkZWZpbmUgUFJJdUxFQVNUNjQgUFJJdTY0CisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhMRUFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4TEVBU1Q2NAorKyMgZGVmaW5lIFBSSXhMRUFTVDY0IFBSSXg2NAorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYTEVBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWExFQVNUNjQKKysjIGRlZmluZSBQUklYTEVBU1Q2NCBQUklYNjQKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZEZBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkRkFTVDgKKysjIGRlZmluZSBQUklkRkFTVDggImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlGQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJaUZBU1Q4CisrIyBkZWZpbmUgUFJJaUZBU1Q4ICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvRkFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW9GQVNUOAorKyMgZGVmaW5lIFBSSW9GQVNUOCAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUZBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1RkFTVDgKKysjIGRlZmluZSBQUkl1RkFTVDggInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhGQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJeEZBU1Q4CisrIyBkZWZpbmUgUFJJeEZBU1Q4ICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYRkFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVhGQVNUOAorKyMgZGVmaW5lIFBSSVhGQVNUOCAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZEZBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZEZBU1QxNgorKyMgZGVmaW5lIFBSSWRGQVNUMTYgImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlGQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWlGQVNUMTYKKysjIGRlZmluZSBQUklpRkFTVDE2ICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvRkFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvRkFTVDE2CisrIyBkZWZpbmUgUFJJb0ZBU1QxNiAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUZBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdUZBU1QxNgorKyMgZGVmaW5lIFBSSXVGQVNUMTYgInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhGQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXhGQVNUMTYKKysjIGRlZmluZSBQUkl4RkFTVDE2ICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYRkFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYRkFTVDE2CisrIyBkZWZpbmUgUFJJWEZBU1QxNiAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZEZBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZEZBU1QzMgorKyMgZGVmaW5lIFBSSWRGQVNUMzIgImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlGQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWlGQVNUMzIKKysjIGRlZmluZSBQUklpRkFTVDMyICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvRkFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvRkFTVDMyCisrIyBkZWZpbmUgUFJJb0ZBU1QzMiAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUZBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdUZBU1QzMgorKyMgZGVmaW5lIFBSSXVGQVNUMzIgInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhGQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXhGQVNUMzIKKysjIGRlZmluZSBQUkl4RkFTVDMyICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYRkFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYRkFTVDMyCisrIyBkZWZpbmUgUFJJWEZBU1QzMiAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZEZBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZEZBU1Q2NAorKyMgZGVmaW5lIFBSSWRGQVNUNjQgUFJJZDY0CisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlGQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWlGQVNUNjQKKysjIGRlZmluZSBQUklpRkFTVDY0IFBSSWk2NAorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvRkFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvRkFTVDY0CisrIyBkZWZpbmUgUFJJb0ZBU1Q2NCBQUklvNjQKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUZBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdUZBU1Q2NAorKyMgZGVmaW5lIFBSSXVGQVNUNjQgUFJJdTY0CisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhGQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXhGQVNUNjQKKysjIGRlZmluZSBQUkl4RkFTVDY0IFBSSXg2NAorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYRkFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYRkFTVDY0CisrIyBkZWZpbmUgUFJJWEZBU1Q2NCBQUklYNjQKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZE1BWCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZE1BWAorKyMgZGVmaW5lIFBSSWRNQVggKHNpemVvZiAodWludG1heF90KSA9PSBzaXplb2YgKGxvbmcpID8gImxkIiA6ICJsbGQiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklpTUFYIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpTUFYCisrIyBkZWZpbmUgUFJJaU1BWCAoc2l6ZW9mICh1aW50bWF4X3QpID09IHNpemVvZiAobG9uZykgPyAibGkiIDogImxsaSIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSW9NQVggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW9NQVgKKysjIGRlZmluZSBQUklvTUFYIChzaXplb2YgKHVpbnRtYXhfdCkgPT0gc2l6ZW9mIChsb25nKSA/ICJsbyIgOiAibGxvIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdU1BWCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdU1BWAorKyMgZGVmaW5lIFBSSXVNQVggKHNpemVvZiAodWludG1heF90KSA9PSBzaXplb2YgKGxvbmcpID8gImx1IiA6ICJsbHUiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl4TUFYIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4TUFYCisrIyBkZWZpbmUgUFJJeE1BWCAoc2l6ZW9mICh1aW50bWF4X3QpID09IHNpemVvZiAobG9uZykgPyAibHgiIDogImxseCIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSVhNQVggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVhNQVgKKysjIGRlZmluZSBQUklYTUFYIChzaXplb2YgKHVpbnRtYXhfdCkgPT0gc2l6ZW9mIChsb25nKSA/ICJsWCIgOiAibGxYIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZFBUUiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZFBUUgorKyMgZGVmaW5lIFBSSWRQVFIgXAorKyAgKHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGxvbmcpID8gImxkIiA6IFwKKysgICBzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChpbnQpID8gImQiIDogXAorKyAgICJsbGQiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklpUFRSIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpUFRSCisrIyBkZWZpbmUgUFJJaVBUUiBcCisrICAoc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAobG9uZykgPyAibGkiIDogXAorKyAgIHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGludCkgPyAiaSIgOiBcCisrICAgImxsaSIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSW9QVFIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW9QVFIKKysjIGRlZmluZSBQUklvUFRSIFwKKysgIChzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChsb25nKSA/ICJsbyIgOiBcCisrICAgc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAoaW50KSA/ICJvIiA6IFwKKysgICAibGxvIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdVBUUiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdVBUUgorKyMgZGVmaW5lIFBSSXVQVFIgXAorKyAgKHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGxvbmcpID8gImx1IiA6IFwKKysgICBzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChpbnQpID8gInUiIDogXAorKyAgICJsbHUiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl4UFRSIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4UFRSCisrIyBkZWZpbmUgUFJJeFBUUiBcCisrICAoc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAobG9uZykgPyAibHgiIDogXAorKyAgIHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGludCkgPyAieCIgOiBcCisrICAgImxseCIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSVhQVFIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVhQVFIKKysjIGRlZmluZSBQUklYUFRSIFwKKysgIChzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChsb25nKSA/ICJsWCIgOiBcCisrICAgc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAoaW50KSA/ICJYIiA6IFwKKysgICAibGxYIikKKysjZW5kaWYKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCitAQCAtNDQsNyArNDU3LDYgQEAKKyAvKiBSZW5hbWUgdGhlIG5vbiBJU08gQyBmdW5jdGlvbnMuICBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBzdGFuZGFyZAorICAgIGJlY2F1c2Ugc29tZSBJU08gQyBmdW5jdGlvbnMgd2lsbCByZXF1aXJlIGxpbmtpbmcgd2l0aCB0aGlzIG9iamVjdAorICAgIGZpbGUgYW5kIHRoZSBuYW1lIHNwYWNlIG11c3Qgbm90IGJlIHBvbGx1dGVkLiAgKi8KKy0jIGRlZmluZSBmc3RhdCAgX19mc3RhdAorICMgZGVmaW5lIG9wZW4gICBfX29wZW4KKyAjIGRlZmluZSBjbG9zZSAgX19jbG9zZQorICMgZGVmaW5lIHJlYWQgICBfX3JlYWQKK0BAIC01MiwzMCArNDY0LDQ3MSBAQAorICMgZGVmaW5lIG11bm1hcCBfX211bm1hcAorICNlbmRpZgorIAorKy8qIEZvciB0aG9zZSBsb3Npbmcgc3lzdGVtcyB3aGljaCBkb24ndCBoYXZlIGBhbGxvY2EnIHdlIGhhdmUgdG8gYWRkCisrICAgc29tZSBhZGRpdGlvbmFsIGNvZGUgZW11bGF0aW5nIGl0LiAgKi8KKysjaWZkZWYgSEFWRV9BTExPQ0EKKysjIGRlZmluZSBmcmVlYShwKSAvKiBub3RoaW5nICovCisrI2Vsc2UKKysjIGRlZmluZSBhbGxvY2EobikgbWFsbG9jIChuKQorKyMgZGVmaW5lIGZyZWVhKHApIGZyZWUgKHApCisrI2VuZGlmCisrCisrLyogRm9yIHN5c3RlbXMgdGhhdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRleHQgYW5kIGJpbmFyeSBJL08uCisrICAgT19CSU5BUlkgaXMgdXN1YWxseSBkZWNsYXJlZCBpbiA8ZmNudGwuaD4uICovCisrI2lmICFkZWZpbmVkIE9fQklOQVJZICYmIGRlZmluZWQgX09fQklOQVJZCisrICAvKiBGb3IgTVNDLWNvbXBhdGlibGUgY29tcGlsZXJzLiAgKi8KKysjIGRlZmluZSBPX0JJTkFSWSBfT19CSU5BUlkKKysjIGRlZmluZSBPX1RFWFQgX09fVEVYVAorKyNlbmRpZgorKyNpZmRlZiBfX0JFT1NfXworKyAgLyogQmVPUyA1IGhhcyBPX0JJTkFSWSBhbmQgT19URVhULCBidXQgdGhleSBoYXZlIG5vIGVmZmVjdC4gICovCisrIyB1bmRlZiBPX0JJTkFSWQorKyMgdW5kZWYgT19URVhUCisrI2VuZGlmCisrLyogT24gcmVhc29uYWJsZSBzeXN0ZW1zLCBiaW5hcnkgSS9PIGlzIHRoZSBkZWZhdWx0LiAgKi8KKysjaWZuZGVmIE9fQklOQVJZCisrIyBkZWZpbmUgT19CSU5BUlkgMAorKyNlbmRpZgorKworKworIC8qIFdlIG5lZWQgYSBzaWduLCB3aGV0aGVyIGEgbmV3IGNhdGFsb2cgd2FzIGxvYWRlZCwgd2hpY2ggY2FuIGJlIGFzc29jaWF0ZWQKKyAgICB3aXRoIGFsbCB0cmFuc2xhdGlvbnMuICBUaGlzIGlzIGltcG9ydGFudCBpZiB0aGUgdHJhbnNsYXRpb25zIGFyZQorICAgIGNhY2hlZCBieSBvbmUgb2YgR0NDJ3MgZmVhdHVyZXMuICAqLworLWludCBfbmxfbXNnX2NhdF9jbnRyID0gMDsKKytpbnQgX25sX21zZ19jYXRfY250cjsKKyAKKyAKKysvKiBFeHBhbmQgYSBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZyBzZWdtZW50LiAgUmV0dXJuIE5VTEwgaWYgdW5zdXBwb3J0ZWQuICAqLworK3N0YXRpYyBjb25zdCBjaGFyICoKKytnZXRfc3lzZGVwX3NlZ21lbnRfdmFsdWUgKGNvbnN0IGNoYXIgKm5hbWUpCisreworKyAgLyogVGVzdCBmb3IgYW4gSVNPIEMgOTkgc2VjdGlvbiA3LjguMSBmb3JtYXQgc3RyaW5nIGRpcmVjdGl2ZS4KKysgICAgIFN5bnRheDoKKysgICAgIFAgUiBJIHsgZCB8IGkgfCBvIHwgdSB8IHggfCBYIH0KKysgICAgIHsgeyB8IExFQVNUIHwgRkFTVCB9IHsgOCB8IDE2IHwgMzIgfCA2NCB9IHwgTUFYIHwgUFRSIH0gICovCisrICAvKiBXZSBkb24ndCB1c2UgYSB0YWJsZSBvZiAxNCB0aW1lcyA2ICdjb25zdCBjaGFyIConIHN0cmluZ3MgaGVyZSwgYmVjYXVzZQorKyAgICAgZGF0YSByZWxvY2F0aW9ucyBjb3N0IHN0YXJ0dXAgdGltZS4gICovCisrICBpZiAobmFtZVswXSA9PSAnUCcgJiYgbmFtZVsxXSA9PSAnUicgJiYgbmFtZVsyXSA9PSAnSScpCisrICAgIHsKKysgICAgICBpZiAobmFtZVszXSA9PSAnZCcgfHwgbmFtZVszXSA9PSAnaScgfHwgbmFtZVszXSA9PSAnbycgfHwgbmFtZVszXSA9PSAndScKKysJICB8fCBuYW1lWzNdID09ICd4JyB8fCBuYW1lWzNdID09ICdYJykKKysJeworKwkgIGlmIChuYW1lWzRdID09ICc4JyAmJiBuYW1lWzVdID09ICdcMCcpCisrCSAgICB7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdkJykKKysJCXJldHVybiBQUklkODsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ2knKQorKwkJcmV0dXJuIFBSSWk4OworKwkgICAgICBpZiAobmFtZVszXSA9PSAnbycpCisrCQlyZXR1cm4gUFJJbzg7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd1JykKKysJCXJldHVybiBQUkl1ODsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ3gnKQorKwkJcmV0dXJuIFBSSXg4OworKwkgICAgICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQlyZXR1cm4gUFJJWDg7CisrCSAgICAgIGFib3J0ICgpOworKwkgICAgfQorKwkgIGlmIChuYW1lWzRdID09ICcxJyAmJiBuYW1lWzVdID09ICc2JyAmJiBuYW1lWzZdID09ICdcMCcpCisrCSAgICB7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdkJykKKysJCXJldHVybiBQUklkMTY7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKysJCXJldHVybiBQUklpMTY7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdvJykKKysJCXJldHVybiBQUklvMTY7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd1JykKKysJCXJldHVybiBQUkl1MTY7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKysJCXJldHVybiBQUkl4MTY7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdYJykKKysJCXJldHVybiBQUklYMTY7CisrCSAgICAgIGFib3J0ICgpOworKwkgICAgfQorKwkgIGlmIChuYW1lWzRdID09ICczJyAmJiBuYW1lWzVdID09ICcyJyAmJiBuYW1lWzZdID09ICdcMCcpCisrCSAgICB7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdkJykKKysJCXJldHVybiBQUklkMzI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKysJCXJldHVybiBQUklpMzI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdvJykKKysJCXJldHVybiBQUklvMzI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd1JykKKysJCXJldHVybiBQUkl1MzI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKysJCXJldHVybiBQUkl4MzI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdYJykKKysJCXJldHVybiBQUklYMzI7CisrCSAgICAgIGFib3J0ICgpOworKwkgICAgfQorKwkgIGlmIChuYW1lWzRdID09ICc2JyAmJiBuYW1lWzVdID09ICc0JyAmJiBuYW1lWzZdID09ICdcMCcpCisrCSAgICB7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdkJykKKysJCXJldHVybiBQUklkNjQ7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKysJCXJldHVybiBQUklpNjQ7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdvJykKKysJCXJldHVybiBQUklvNjQ7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd1JykKKysJCXJldHVybiBQUkl1NjQ7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKysJCXJldHVybiBQUkl4NjQ7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdYJykKKysJCXJldHVybiBQUklYNjQ7CisrCSAgICAgIGFib3J0ICgpOworKwkgICAgfQorKwkgIGlmIChuYW1lWzRdID09ICdMJyAmJiBuYW1lWzVdID09ICdFJyAmJiBuYW1lWzZdID09ICdBJworKwkgICAgICAmJiBuYW1lWzddID09ICdTJyAmJiBuYW1lWzhdID09ICdUJykKKysJICAgIHsKKysJICAgICAgaWYgKG5hbWVbOV0gPT0gJzgnICYmIG5hbWVbMTBdID09ICdcMCcpCisrCQl7CisrCQkgIGlmIChuYW1lWzNdID09ICdkJykKKysJCSAgICByZXR1cm4gUFJJZExFQVNUODsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2knKQorKwkJICAgIHJldHVybiBQUklpTEVBU1Q4OworKwkJICBpZiAobmFtZVszXSA9PSAnbycpCisrCQkgICAgcmV0dXJuIFBSSW9MRUFTVDg7CisrCQkgIGlmIChuYW1lWzNdID09ICd1JykKKysJCSAgICByZXR1cm4gUFJJdUxFQVNUODsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3gnKQorKwkJICAgIHJldHVybiBQUkl4TEVBU1Q4OworKwkJICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQkgICAgcmV0dXJuIFBSSVhMRUFTVDg7CisrCQkgIGFib3J0ICgpOworKwkJfQorKwkgICAgICBpZiAobmFtZVs5XSA9PSAnMScgJiYgbmFtZVsxMF0gPT0gJzYnICYmIG5hbWVbMTFdID09ICdcMCcpCisrCQl7CisrCQkgIGlmIChuYW1lWzNdID09ICdkJykKKysJCSAgICByZXR1cm4gUFJJZExFQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICdpJykKKysJCSAgICByZXR1cm4gUFJJaUxFQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICdvJykKKysJCSAgICByZXR1cm4gUFJJb0xFQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICd1JykKKysJCSAgICByZXR1cm4gUFJJdUxFQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICd4JykKKysJCSAgICByZXR1cm4gUFJJeExFQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICdYJykKKysJCSAgICByZXR1cm4gUFJJWExFQVNUMTY7CisrCQkgIGFib3J0ICgpOworKwkJfQorKwkgICAgICBpZiAobmFtZVs5XSA9PSAnMycgJiYgbmFtZVsxMF0gPT0gJzInICYmIG5hbWVbMTFdID09ICdcMCcpCisrCQl7CisrCQkgIGlmIChuYW1lWzNdID09ICdkJykKKysJCSAgICByZXR1cm4gUFJJZExFQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICdpJykKKysJCSAgICByZXR1cm4gUFJJaUxFQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICdvJykKKysJCSAgICByZXR1cm4gUFJJb0xFQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICd1JykKKysJCSAgICByZXR1cm4gUFJJdUxFQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICd4JykKKysJCSAgICByZXR1cm4gUFJJeExFQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICdYJykKKysJCSAgICByZXR1cm4gUFJJWExFQVNUMzI7CisrCQkgIGFib3J0ICgpOworKwkJfQorKwkgICAgICBpZiAobmFtZVs5XSA9PSAnNicgJiYgbmFtZVsxMF0gPT0gJzQnICYmIG5hbWVbMTFdID09ICdcMCcpCisrCQl7CisrCQkgIGlmIChuYW1lWzNdID09ICdkJykKKysJCSAgICByZXR1cm4gUFJJZExFQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICdpJykKKysJCSAgICByZXR1cm4gUFJJaUxFQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICdvJykKKysJCSAgICByZXR1cm4gUFJJb0xFQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICd1JykKKysJCSAgICByZXR1cm4gUFJJdUxFQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICd4JykKKysJCSAgICByZXR1cm4gUFJJeExFQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICdYJykKKysJCSAgICByZXR1cm4gUFJJWExFQVNUNjQ7CisrCQkgIGFib3J0ICgpOworKwkJfQorKwkgICAgfQorKwkgIGlmIChuYW1lWzRdID09ICdGJyAmJiBuYW1lWzVdID09ICdBJyAmJiBuYW1lWzZdID09ICdTJworKwkgICAgICAmJiBuYW1lWzddID09ICdUJykKKysJICAgIHsKKysJICAgICAgaWYgKG5hbWVbOF0gPT0gJzgnICYmIG5hbWVbOV0gPT0gJ1wwJykKKysJCXsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJICAgIHJldHVybiBQUklkRkFTVDg7CisrCQkgIGlmIChuYW1lWzNdID09ICdpJykKKysJCSAgICByZXR1cm4gUFJJaUZBU1Q4OworKwkJICBpZiAobmFtZVszXSA9PSAnbycpCisrCQkgICAgcmV0dXJuIFBSSW9GQVNUODsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJICAgIHJldHVybiBQUkl1RkFTVDg7CisrCQkgIGlmIChuYW1lWzNdID09ICd4JykKKysJCSAgICByZXR1cm4gUFJJeEZBU1Q4OworKwkJICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQkgICAgcmV0dXJuIFBSSVhGQVNUODsKKysJCSAgYWJvcnQgKCk7CisrCQl9CisrCSAgICAgIGlmIChuYW1lWzhdID09ICcxJyAmJiBuYW1lWzldID09ICc2JyAmJiBuYW1lWzEwXSA9PSAnXDAnKQorKwkJeworKwkJICBpZiAobmFtZVszXSA9PSAnZCcpCisrCQkgICAgcmV0dXJuIFBSSWRGQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICdpJykKKysJCSAgICByZXR1cm4gUFJJaUZBU1QxNjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ28nKQorKwkJICAgIHJldHVybiBQUklvRkFTVDE2OworKwkJICBpZiAobmFtZVszXSA9PSAndScpCisrCQkgICAgcmV0dXJuIFBSSXVGQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICd4JykKKysJCSAgICByZXR1cm4gUFJJeEZBU1QxNjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ1gnKQorKwkJICAgIHJldHVybiBQUklYRkFTVDE2OworKwkJICBhYm9ydCAoKTsKKysJCX0KKysJICAgICAgaWYgKG5hbWVbOF0gPT0gJzMnICYmIG5hbWVbOV0gPT0gJzInICYmIG5hbWVbMTBdID09ICdcMCcpCisrCQl7CisrCQkgIGlmIChuYW1lWzNdID09ICdkJykKKysJCSAgICByZXR1cm4gUFJJZEZBU1QzMjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2knKQorKwkJICAgIHJldHVybiBQUklpRkFTVDMyOworKwkJICBpZiAobmFtZVszXSA9PSAnbycpCisrCQkgICAgcmV0dXJuIFBSSW9GQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICd1JykKKysJCSAgICByZXR1cm4gUFJJdUZBU1QzMjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3gnKQorKwkJICAgIHJldHVybiBQUkl4RkFTVDMyOworKwkJICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQkgICAgcmV0dXJuIFBSSVhGQVNUMzI7CisrCQkgIGFib3J0ICgpOworKwkJfQorKwkgICAgICBpZiAobmFtZVs4XSA9PSAnNicgJiYgbmFtZVs5XSA9PSAnNCcgJiYgbmFtZVsxMF0gPT0gJ1wwJykKKysJCXsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJICAgIHJldHVybiBQUklkRkFTVDY0OworKwkJICBpZiAobmFtZVszXSA9PSAnaScpCisrCQkgICAgcmV0dXJuIFBSSWlGQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICdvJykKKysJCSAgICByZXR1cm4gUFJJb0ZBU1Q2NDsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJICAgIHJldHVybiBQUkl1RkFTVDY0OworKwkJICBpZiAobmFtZVszXSA9PSAneCcpCisrCQkgICAgcmV0dXJuIFBSSXhGQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICdYJykKKysJCSAgICByZXR1cm4gUFJJWEZBU1Q2NDsKKysJCSAgYWJvcnQgKCk7CisrCQl9CisrCSAgICB9CisrCSAgaWYgKG5hbWVbNF0gPT0gJ00nICYmIG5hbWVbNV0gPT0gJ0EnICYmIG5hbWVbNl0gPT0gJ1gnCisrCSAgICAgICYmIG5hbWVbN10gPT0gJ1wwJykKKysJICAgIHsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJcmV0dXJuIFBSSWRNQVg7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKysJCXJldHVybiBQUklpTUFYOworKwkgICAgICBpZiAobmFtZVszXSA9PSAnbycpCisrCQlyZXR1cm4gUFJJb01BWDsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJcmV0dXJuIFBSSXVNQVg7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKysJCXJldHVybiBQUkl4TUFYOworKwkgICAgICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQlyZXR1cm4gUFJJWE1BWDsKKysJICAgICAgYWJvcnQgKCk7CisrCSAgICB9CisrCSAgaWYgKG5hbWVbNF0gPT0gJ1AnICYmIG5hbWVbNV0gPT0gJ1QnICYmIG5hbWVbNl0gPT0gJ1InCisrCSAgICAgICYmIG5hbWVbN10gPT0gJ1wwJykKKysJICAgIHsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJcmV0dXJuIFBSSWRQVFI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKysJCXJldHVybiBQUklpUFRSOworKwkgICAgICBpZiAobmFtZVszXSA9PSAnbycpCisrCQlyZXR1cm4gUFJJb1BUUjsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJcmV0dXJuIFBSSXVQVFI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKysJCXJldHVybiBQUkl4UFRSOworKwkgICAgICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQlyZXR1cm4gUFJJWFBUUjsKKysJICAgICAgYWJvcnQgKCk7CisrCSAgICB9CisrCX0KKysgICAgfQorKyAgLyogVGVzdCBmb3IgYSBnbGliYyBzcGVjaWZpYyBwcmludGYoKSBmb3JtYXQgZGlyZWN0aXZlIGZsYWcuICAqLworKyAgaWYgKG5hbWVbMF0gPT0gJ0knICYmIG5hbWVbMV0gPT0gJ1wwJykKKysgICAgeworKyNpZiBkZWZpbmVkIF9MSUJDIHx8IF9fR0xJQkNfXyA+IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAyKQorKyAgICAgIC8qIFRoZSAnSScgZmxhZywgaW4gbnVtZXJpYyBmb3JtYXQgZGlyZWN0aXZlcywgcmVwbGFjZXMgQVNDSUkgZGlnaXRzCisrCSB3aXRoIHRoZSAnb3V0ZGlnaXRzJyBkZWZpbmVkIGluIHRoZSBMQ19DVFlQRSBsb2NhbGUgZmFjZXQuICBUaGlzIGlzCisrCSB1c2VkIGZvciBGYXJzaSAoUGVyc2lhbikgYW5kIG1heWJlIEFyYWJpYy4gICovCisrICAgICAgcmV0dXJuICJJIjsKKysjZWxzZQorKyAgICAgIHJldHVybiAiIjsKKysjZW5kaWYKKysgICAgfQorKyAgLyogT3RoZXIgc3lzdGVtIGRlcGVuZGVudCBzdHJpbmdzIGFyZSBub3QgdmFsaWQuICAqLworKyAgcmV0dXJuIE5VTEw7CisrfQorKworKy8qIEluaXRpYWxpemUgdGhlIGNvZGVzZXQgZGVwZW5kZW50IHBhcnRzIG9mIGFuIG9wZW5lZCBtZXNzYWdlIGNhdGFsb2cuCisrICAgUmV0dXJuIHRoZSBoZWFkZXIgZW50cnkuICAqLworK2NvbnN0IGNoYXIgKgorK2ludGVybmFsX2Z1bmN0aW9uCisrX25sX2luaXRfZG9tYWluX2NvbnYgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbl9maWxlLAorKwkJICAgICAgc3RydWN0IGxvYWRlZF9kb21haW4gKmRvbWFpbiwKKysJCSAgICAgIHN0cnVjdCBiaW5kaW5nICpkb21haW5iaW5kaW5nKQorK3sKKysgIC8qIEZpbmQgb3V0IGFib3V0IHRoZSBjaGFyYWN0ZXIgc2V0IHRoZSBmaWxlIGlzIGVuY29kZWQgd2l0aC4KKysgICAgIFRoaXMgY2FuIGJlIGZvdW5kIChpbiB0ZXh0dWFsIGZvcm0pIGluIHRoZSBlbnRyeSAiIi4gIElmIHRoaXMKKysgICAgIGVudHJ5IGRvZXMgbm90IGV4aXN0IG9yIGlmIHRoaXMgZG9lcyBub3QgY29udGFpbiB0aGUgYGNoYXJzZXQ9JworKyAgICAgaW5mb3JtYXRpb24sIHdlIHdpbGwgYXNzdW1lIHRoZSBjaGFyc2V0IG1hdGNoZXMgdGhlIG9uZSB0aGUKKysgICAgIGN1cnJlbnQgbG9jYWxlIGFuZCB3ZSBkb24ndCBoYXZlIHRvIHBlcmZvcm0gYW55IGNvbnZlcnNpb24uICAqLworKyAgY2hhciAqbnVsbGVudHJ5OworKyAgc2l6ZV90IG51bGxlbnRyeWxlbjsKKysKKysgIC8qIFByZWluaXRpYWxpemUgZmllbGRzLCB0byBhdm9pZCByZWN1cnNpb24gZHVyaW5nIF9ubF9maW5kX21zZy4gICovCisrICBkb21haW4tPmNvZGVzZXRfY250ciA9CisrICAgIChkb21haW5iaW5kaW5nICE9IE5VTEwgPyBkb21haW5iaW5kaW5nLT5jb2Rlc2V0X2NudHIgOiAwKTsKKysjaWZkZWYgX0xJQkMKKysgIGRvbWFpbi0+Y29udiA9IChfX2djb252X3QpIC0xOworKyNlbHNlCisrIyBpZiBIQVZFX0lDT05WCisrICBkb21haW4tPmNvbnYgPSAoaWNvbnZfdCkgLTE7CisrIyBlbmRpZgorKyNlbmRpZgorKyAgZG9tYWluLT5jb252X3RhYiA9IE5VTEw7CisrCisrICAvKiBHZXQgdGhlIGhlYWRlciBlbnRyeS4gICovCisrICBudWxsZW50cnkgPSBfbmxfZmluZF9tc2cgKGRvbWFpbl9maWxlLCBkb21haW5iaW5kaW5nLCAiIiwgJm51bGxlbnRyeWxlbik7CisrCisrICBpZiAobnVsbGVudHJ5ICE9IE5VTEwpCisrICAgIHsKKysjaWYgZGVmaW5lZCBfTElCQyB8fCBIQVZFX0lDT05WCisrICAgICAgY29uc3QgY2hhciAqY2hhcnNldHN0cjsKKysKKysgICAgICBjaGFyc2V0c3RyID0gc3Ryc3RyIChudWxsZW50cnksICJjaGFyc2V0PSIpOworKyAgICAgIGlmIChjaGFyc2V0c3RyICE9IE5VTEwpCisrCXsKKysJICBzaXplX3QgbGVuOworKwkgIGNoYXIgKmNoYXJzZXQ7CisrCSAgY29uc3QgY2hhciAqb3V0Y2hhcnNldDsKKysKKysJICBjaGFyc2V0c3RyICs9IHN0cmxlbiAoImNoYXJzZXQ9Iik7CisrCSAgbGVuID0gc3RyY3NwbiAoY2hhcnNldHN0ciwgIiBcdFxuIik7CisrCisrCSAgY2hhcnNldCA9IChjaGFyICopIGFsbG9jYSAobGVuICsgMSk7CisrIyBpZiBkZWZpbmVkIF9MSUJDIHx8IEhBVkVfTUVNUENQWQorKwkgICooKGNoYXIgKikgbWVtcGNweSAoY2hhcnNldCwgY2hhcnNldHN0ciwgbGVuKSkgPSAnXDAnOworKyMgZWxzZQorKwkgIG1lbWNweSAoY2hhcnNldCwgY2hhcnNldHN0ciwgbGVuKTsKKysJICBjaGFyc2V0W2xlbl0gPSAnXDAnOworKyMgZW5kaWYKKysKKysJICAvKiBUaGUgb3V0cHV0IGNoYXJzZXQgc2hvdWxkIG5vcm1hbGx5IGJlIGRldGVybWluZWQgYnkgdGhlCisrCSAgICAgbG9jYWxlLiAgQnV0IHNvbWV0aW1lcyB0aGUgbG9jYWxlIGlzIG5vdCB1c2VkIG9yIG5vdCBjb3JyZWN0bHkKKysJICAgICBzZXQgdXAsIHNvIHdlIHByb3ZpZGUgYSBwb3NzaWJpbGl0eSBmb3IgdGhlIHVzZXIgdG8gb3ZlcnJpZGUKKysJICAgICB0aGlzLiAgTW9yZW92ZXIsIHRoZSB2YWx1ZSBzcGVjaWZpZWQgdGhyb3VnaAorKwkgICAgIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IG92ZXJyaWRlcyBib3RoLiAgKi8KKysJICBpZiAoZG9tYWluYmluZGluZyAhPSBOVUxMICYmIGRvbWFpbmJpbmRpbmctPmNvZGVzZXQgIT0gTlVMTCkKKysJICAgIG91dGNoYXJzZXQgPSBkb21haW5iaW5kaW5nLT5jb2Rlc2V0OworKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgb3V0Y2hhcnNldCA9IGdldGVudiAoIk9VVFBVVF9DSEFSU0VUIik7CisrCSAgICAgIGlmIChvdXRjaGFyc2V0ID09IE5VTEwgfHwgb3V0Y2hhcnNldFswXSA9PSAnXDAnKQorKwkJeworKyMgaWZkZWYgX0xJQkMKKysJCSAgb3V0Y2hhcnNldCA9IF9OTF9DVVJSRU5UIChMQ19DVFlQRSwgQ09ERVNFVCk7CisrIyBlbHNlCisrIyAgaWYgSEFWRV9JQ09OVgorKwkJICBleHRlcm4gY29uc3QgY2hhciAqbG9jYWxlX2NoYXJzZXQgKHZvaWQpOworKwkJICBvdXRjaGFyc2V0ID0gbG9jYWxlX2NoYXJzZXQgKCk7CisrIyAgZW5kaWYKKysjIGVuZGlmCisrCQl9CisrCSAgICB9CisrCisrIyBpZmRlZiBfTElCQworKwkgIC8qIFdlIGFsd2F5cyB3YW50IHRvIHVzZSB0cmFuc2xpdGVyYXRpb24uICAqLworKwkgIG91dGNoYXJzZXQgPSBub3JtX2FkZF9zbGFzaGVzIChvdXRjaGFyc2V0LCAiVFJBTlNMSVQiKTsKKysJICBjaGFyc2V0ID0gbm9ybV9hZGRfc2xhc2hlcyAoY2hhcnNldCwgTlVMTCk7CisrCSAgaWYgKF9fZ2NvbnZfb3BlbiAob3V0Y2hhcnNldCwgY2hhcnNldCwgJmRvbWFpbi0+Y29udiwKKysJCQkgICAgR0NPTlZfQVZPSURfTk9DT05WKQorKwkgICAgICAhPSBfX0dDT05WX09LKQorKwkgICAgZG9tYWluLT5jb252ID0gKF9fZ2NvbnZfdCkgLTE7CisrIyBlbHNlCisrIyAgaWYgSEFWRV9JQ09OVgorKwkgIC8qIFdoZW4gdXNpbmcgR05VIGxpYmMgPj0gMi4yIG9yIEdOVSBsaWJpY29udiA+PSAxLjUsCisrCSAgICAgd2Ugd2FudCB0byB1c2UgdHJhbnNsaXRlcmF0aW9uLiAgKi8KKysjICAgaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAyKSB8fCBfX0dMSUJDX18gPiAyIFwKKysgICAgICAgfHwgX0xJQklDT05WX1ZFUlNJT04gPj0gMHgwMTA1CisrCSAgaWYgKHN0cmNociAob3V0Y2hhcnNldCwgJy8nKSA9PSBOVUxMKQorKwkgICAgeworKwkgICAgICBjaGFyICp0bXA7CisrCisrCSAgICAgIGxlbiA9IHN0cmxlbiAob3V0Y2hhcnNldCk7CisrCSAgICAgIHRtcCA9IChjaGFyICopIGFsbG9jYSAobGVuICsgMTAgKyAxKTsKKysJICAgICAgbWVtY3B5ICh0bXAsIG91dGNoYXJzZXQsIGxlbik7CisrCSAgICAgIG1lbWNweSAodG1wICsgbGVuLCAiLy9UUkFOU0xJVCIsIDEwICsgMSk7CisrCSAgICAgIG91dGNoYXJzZXQgPSB0bXA7CisrCisrCSAgICAgIGRvbWFpbi0+Y29udiA9IGljb252X29wZW4gKG91dGNoYXJzZXQsIGNoYXJzZXQpOworKworKwkgICAgICBmcmVlYSAob3V0Y2hhcnNldCk7CisrCSAgICB9CisrCSAgZWxzZQorKyMgICBlbmRpZgorKwkgICAgZG9tYWluLT5jb252ID0gaWNvbnZfb3BlbiAob3V0Y2hhcnNldCwgY2hhcnNldCk7CisrIyAgZW5kaWYKKysjIGVuZGlmCisrCisrCSAgZnJlZWEgKGNoYXJzZXQpOworKwl9CisrI2VuZGlmIC8qIF9MSUJDIHx8IEhBVkVfSUNPTlYgKi8KKysgICAgfQorKworKyAgcmV0dXJuIG51bGxlbnRyeTsKKyt9CisrCisrLyogRnJlZXMgdGhlIGNvZGVzZXQgZGVwZW5kZW50IHBhcnRzIG9mIGFuIG9wZW5lZCBtZXNzYWdlIGNhdGFsb2cuICAqLworK3ZvaWQKKytpbnRlcm5hbF9mdW5jdGlvbgorK19ubF9mcmVlX2RvbWFpbl9jb252IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqZG9tYWluKQorK3sKKysgIGlmIChkb21haW4tPmNvbnZfdGFiICE9IE5VTEwgJiYgZG9tYWluLT5jb252X3RhYiAhPSAoY2hhciAqKikgLTEpCisrICAgIGZyZWUgKGRvbWFpbi0+Y29udl90YWIpOworKworKyNpZmRlZiBfTElCQworKyAgaWYgKGRvbWFpbi0+Y29udiAhPSAoX19nY29udl90KSAtMSkKKysgICAgX19nY29udl9jbG9zZSAoZG9tYWluLT5jb252KTsKKysjZWxzZQorKyMgaWYgSEFWRV9JQ09OVgorKyAgaWYgKGRvbWFpbi0+Y29udiAhPSAoaWNvbnZfdCkgLTEpCisrICAgIGljb252X2Nsb3NlIChkb21haW4tPmNvbnYpOworKyMgZW5kaWYKKysjZW5kaWYKKyt9CisrCisgLyogTG9hZCB0aGUgbWVzc2FnZSBjYXRhbG9ncyBzcGVjaWZpZWQgYnkgRklMRU5BTUUuICBJZiBpdCBpcyBubyB2YWxpZAorICAgIG1lc3NhZ2UgY2F0YWxvZyBkbyBub3RoaW5nLiAgKi8KKyB2b2lkCistX25sX2xvYWRfZG9tYWluIChkb21haW5fZmlsZSkKKy0gICAgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbl9maWxlOworK2ludGVybmFsX2Z1bmN0aW9uCisrX25sX2xvYWRfZG9tYWluIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW5fZmlsZSwKKysJCSBzdHJ1Y3QgYmluZGluZyAqZG9tYWluYmluZGluZykKKyB7CisgICBpbnQgZmQ7CisrICBzaXplX3Qgc2l6ZTsKKysjaWZkZWYgX0xJQkMKKysgIHN0cnVjdCBzdGF0NjQgc3Q7CisrI2Vsc2UKKyAgIHN0cnVjdCBzdGF0IHN0OworKyNlbmRpZgorICAgc3RydWN0IG1vX2ZpbGVfaGVhZGVyICpkYXRhID0gKHN0cnVjdCBtb19maWxlX2hlYWRlciAqKSAtMTsKKy0jaWYgKGRlZmluZWQgSEFWRV9NTUFQICYmIGRlZmluZWQgSEFWRV9NVU5NQVAgJiYgIWRlZmluZWQgRElTQUxMT1dfTU1BUCkgXAorLSAgICB8fCBkZWZpbmVkIF9MSUJDCisgICBpbnQgdXNlX21tYXAgPSAwOworLSNlbmRpZgorICAgc3RydWN0IGxvYWRlZF9kb21haW4gKmRvbWFpbjsKKysgIGludCByZXZpc2lvbjsKKysgIGNvbnN0IGNoYXIgKm51bGxlbnRyeTsKKyAKKyAgIGRvbWFpbl9maWxlLT5kZWNpZGVkID0gMTsKKyAgIGRvbWFpbl9maWxlLT5kYXRhID0gTlVMTDsKKyAKKysgIC8qIE5vdGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VsZXNzIHRvIHN0b3JlIGRvbWFpbmJpbmRpbmcgaW4gZG9tYWluX2ZpbGUKKysgICAgIGJlY2F1c2UgZG9tYWluYmluZGluZyBtaWdodCBiZSA9PSBOVUxMIG5vdyBidXQgIT0gTlVMTCBsYXRlciAoYWZ0ZXIKKysgICAgIGEgY2FsbCB0byBiaW5kX3RleHRkb21haW5fY29kZXNldCkuICAqLworKworICAgLyogSWYgdGhlIHJlY29yZCBkb2VzIG5vdCByZXByZXNlbnQgYSB2YWxpZCBsb2NhbGUgdGhlIEZJTEVOQU1FCisgICAgICBtaWdodCBiZSBOVUxMLiAgVGhpcyBjYW4gaGFwcGVuIHdoZW4gYWNjb3JkaW5nIHRvIHRoZSBnaXZlbgorICAgICAgc3BlY2lmaWNhdGlvbiB0aGUgbG9jYWxlIGZpbGUgbmFtZSBpcyBkaWZmZXJlbnQgZm9yIFhQRyBhbmQgQ0VOCitAQCAtODQsMjcgKzkzNywzMiBAQAorICAgICByZXR1cm47CisgCisgICAvKiBUcnkgdG8gb3BlbiB0aGUgYWRkcmVzc2VkIGZpbGUuICAqLworLSAgZmQgPSBvcGVuIChkb21haW5fZmlsZS0+ZmlsZW5hbWUsIE9fUkRPTkxZKTsKKysgIGZkID0gb3BlbiAoZG9tYWluX2ZpbGUtPmZpbGVuYW1lLCBPX1JET05MWSB8IE9fQklOQVJZKTsKKyAgIGlmIChmZCA9PSAtMSkKKyAgICAgcmV0dXJuOworIAorICAgLyogV2UgbXVzdCBrbm93IGFib3V0IHRoZSBzaXplIG9mIHRoZSBmaWxlLiAgKi8KKy0gIGlmIChmc3RhdCAoZmQsICZzdCkgIT0gMAorLSAgICAgICYmIHN0LnN0X3NpemUgPCAob2ZmX3QpIHNpemVvZiAoc3RydWN0IG1vX2ZpbGVfaGVhZGVyKSkKKysgIGlmICgKKysjaWZkZWYgX0xJQkMKKysgICAgICBfX2J1aWx0aW5fZXhwZWN0IChmc3RhdDY0IChmZCwgJnN0KSAhPSAwLCAwKQorKyNlbHNlCisrICAgICAgX19idWlsdGluX2V4cGVjdCAoZnN0YXQgKGZkLCAmc3QpICE9IDAsIDApCisrI2VuZGlmCisrICAgICAgfHwgX19idWlsdGluX2V4cGVjdCAoKHNpemUgPSAoc2l6ZV90KSBzdC5zdF9zaXplKSAhPSBzdC5zdF9zaXplLCAwKQorKyAgICAgIHx8IF9fYnVpbHRpbl9leHBlY3QgKHNpemUgPCBzaXplb2YgKHN0cnVjdCBtb19maWxlX2hlYWRlciksIDApKQorICAgICB7CisgICAgICAgLyogU29tZXRoaW5nIHdlbnQgd3JvbmcuICAqLworICAgICAgIGNsb3NlIChmZCk7CisgICAgICAgcmV0dXJuOworICAgICB9CisgCistI2lmIChkZWZpbmVkIEhBVkVfTU1BUCAmJiBkZWZpbmVkIEhBVkVfTVVOTUFQICYmICFkZWZpbmVkIERJU0FMTE9XX01NQVApIFwKKy0gICAgfHwgZGVmaW5lZCBfTElCQworKyNpZmRlZiBIQVZFX01NQVAKKyAgIC8qIE5vdyB3ZSBhcmUgcmVhZHkgdG8gbG9hZCB0aGUgZmlsZS4gIElmIG1tYXAoKSBpcyBhdmFpbGFibGUgd2UgdHJ5CisgICAgICB0aGlzIGZpcnN0LiAgSWYgbm90IGF2YWlsYWJsZSBvciBpdCBmYWlsZWQgd2UgdHJ5IHRvIGxvYWQgaXQuICAqLworLSAgZGF0YSA9IChzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIgKikgbW1hcCAoTlVMTCwgc3Quc3Rfc2l6ZSwgUFJPVF9SRUFELAorKyAgZGF0YSA9IChzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIgKikgbW1hcCAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFELAorIAkJCQkJIE1BUF9QUklWQVRFLCBmZCwgMCk7CisgCistICBpZiAoZGF0YSAhPSAoc3RydWN0IG1vX2ZpbGVfaGVhZGVyICopIC0xKQorKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGRhdGEgIT0gKHN0cnVjdCBtb19maWxlX2hlYWRlciAqKSAtMSwgMSkpCisgICAgIHsKKyAgICAgICAvKiBtbWFwKCkgY2FsbCB3YXMgc3VjY2Vzc2Z1bC4gICovCisgICAgICAgY2xvc2UgKGZkKTsKK0BAIC0xMTYsMjQgKzk3NCwyNyBAQAorICAgICAgaXQgbWFudWFsbHkuICAqLworICAgaWYgKGRhdGEgPT0gKHN0cnVjdCBtb19maWxlX2hlYWRlciAqKSAtMSkKKyAgICAgeworLSAgICAgIG9mZl90IHRvX3JlYWQ7CisrICAgICAgc2l6ZV90IHRvX3JlYWQ7CisgICAgICAgY2hhciAqcmVhZF9wdHI7CisgCistICAgICAgZGF0YSA9IChzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIgKikgbWFsbG9jIChzdC5zdF9zaXplKTsKKysgICAgICBkYXRhID0gKHN0cnVjdCBtb19maWxlX2hlYWRlciAqKSBtYWxsb2MgKHNpemUpOworICAgICAgIGlmIChkYXRhID09IE5VTEwpCisgCXJldHVybjsKKyAKKy0gICAgICB0b19yZWFkID0gc3Quc3Rfc2l6ZTsKKysgICAgICB0b19yZWFkID0gc2l6ZTsKKyAgICAgICByZWFkX3B0ciA9IChjaGFyICopIGRhdGE7CisgICAgICAgZG8KKyAJeworIAkgIGxvbmcgaW50IG5iID0gKGxvbmcgaW50KSByZWFkIChmZCwgcmVhZF9wdHIsIHRvX3JlYWQpOworLQkgIGlmIChuYiA9PSAtMSkKKysJICBpZiAobmIgPD0gMCkKKyAJICAgIHsKKysjaWZkZWYgRUlOVFIKKysJICAgICAgaWYgKG5iID09IC0xICYmIGVycm5vID09IEVJTlRSKQorKwkJY29udGludWU7CisrI2VuZGlmCisgCSAgICAgIGNsb3NlIChmZCk7CisgCSAgICAgIHJldHVybjsKKyAJICAgIH0KKy0KKyAJICByZWFkX3B0ciArPSBuYjsKKyAJICB0b19yZWFkIC09IG5iOworIAl9CitAQCAtMTQ0LDQ3ICsxMDA1LDM3OCBAQAorIAorICAgLyogVXNpbmcgdGhlIG1hZ2ljIG51bWJlciB3ZSBjYW4gdGVzdCB3aGV0aGVyIGl0IHJlYWxseSBpcyBhIG1lc3NhZ2UKKyAgICAgIGNhdGFsb2cgZmlsZS4gICovCistICBpZiAoZGF0YS0+bWFnaWMgIT0gX01BR0lDICYmIGRhdGEtPm1hZ2ljICE9IF9NQUdJQ19TV0FQUEVEKQorKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGRhdGEtPm1hZ2ljICE9IF9NQUdJQyAmJiBkYXRhLT5tYWdpYyAhPSBfTUFHSUNfU1dBUFBFRCwKKysJCQkwKSkKKyAgICAgeworICAgICAgIC8qIFRoZSBtYWdpYyBudW1iZXIgaXMgd3Jvbmc6IG5vdCBhIG1lc3NhZ2UgY2F0YWxvZyBmaWxlLiAgKi8KKy0jaWYgKGRlZmluZWQgSEFWRV9NTUFQICYmIGRlZmluZWQgSEFWRV9NVU5NQVAgJiYgIWRlZmluZWQgRElTQUxMT1dfTU1BUCkgXAorLSAgICB8fCBkZWZpbmVkIF9MSUJDCisrI2lmZGVmIEhBVkVfTU1BUAorICAgICAgIGlmICh1c2VfbW1hcCkKKy0JbXVubWFwICgoY2FkZHJfdCkgZGF0YSwgc3Quc3Rfc2l6ZSk7CisrCW11bm1hcCAoKGNhZGRyX3QpIGRhdGEsIHNpemUpOworICAgICAgIGVsc2UKKyAjZW5kaWYKKyAJZnJlZSAoZGF0YSk7CisgICAgICAgcmV0dXJuOworICAgICB9CisgCistICBkb21haW5fZmlsZS0+ZGF0YQorLSAgICA9IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqKSBtYWxsb2MgKHNpemVvZiAoc3RydWN0IGxvYWRlZF9kb21haW4pKTsKKy0gIGlmIChkb21haW5fZmlsZS0+ZGF0YSA9PSBOVUxMKQorKyAgZG9tYWluID0gKHN0cnVjdCBsb2FkZWRfZG9tYWluICopIG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgbG9hZGVkX2RvbWFpbikpOworKyAgaWYgKGRvbWFpbiA9PSBOVUxMKQorICAgICByZXR1cm47CisrICBkb21haW5fZmlsZS0+ZGF0YSA9IGRvbWFpbjsKKyAKKy0gIGRvbWFpbiA9IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqKSBkb21haW5fZmlsZS0+ZGF0YTsKKyAgIGRvbWFpbi0+ZGF0YSA9IChjaGFyICopIGRhdGE7CisrICBkb21haW4tPnVzZV9tbWFwID0gdXNlX21tYXA7CisrICBkb21haW4tPm1tYXBfc2l6ZSA9IHNpemU7CisgICBkb21haW4tPm11c3Rfc3dhcCA9IGRhdGEtPm1hZ2ljICE9IF9NQUdJQzsKKysgIGRvbWFpbi0+bWFsbG9jZWQgPSBOVUxMOworIAorICAgLyogRmlsbCBpbiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGF2YWlsYWJsZSB0YWJsZXMuICAqLworLSAgc3dpdGNoIChXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+cmV2aXNpb24pKQorKyAgcmV2aXNpb24gPSBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+cmV2aXNpb24pOworKyAgLyogV2Ugc3VwcG9ydCBvbmx5IHRoZSBtYWpvciByZXZpc2lvbnMgMCBhbmQgMS4gICovCisrICBzd2l0Y2ggKHJldmlzaW9uID4+IDE2KQorICAgICB7CisgICAgIGNhc2UgMDoKKysgICAgY2FzZSAxOgorICAgICAgIGRvbWFpbi0+bnN0cmluZ3MgPSBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+bnN0cmluZ3MpOworLSAgICAgIGRvbWFpbi0+b3JpZ190YWIgPSAoc3RydWN0IHN0cmluZ19kZXNjICopCisrICAgICAgZG9tYWluLT5vcmlnX3RhYiA9IChjb25zdCBzdHJ1Y3Qgc3RyaW5nX2Rlc2MgKikKKyAJKChjaGFyICopIGRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+b3JpZ190YWJfb2Zmc2V0KSk7CistICAgICAgZG9tYWluLT50cmFuc190YWIgPSAoc3RydWN0IHN0cmluZ19kZXNjICopCisrICAgICAgZG9tYWluLT50cmFuc190YWIgPSAoY29uc3Qgc3RydWN0IHN0cmluZ19kZXNjICopCisgCSgoY2hhciAqKSBkYXRhICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRhdGEtPnRyYW5zX3RhYl9vZmZzZXQpKTsKKyAgICAgICBkb21haW4tPmhhc2hfc2l6ZSA9IFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT5oYXNoX3RhYl9zaXplKTsKKy0gICAgICBkb21haW4tPmhhc2hfdGFiID0gKG5sc191aW50MzIgKikKKy0JKChjaGFyICopIGRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+aGFzaF90YWJfb2Zmc2V0KSk7CisrICAgICAgZG9tYWluLT5oYXNoX3RhYiA9CisrCShkb21haW4tPmhhc2hfc2l6ZSA+IDIKKysJID8gKGNvbnN0IG5sc191aW50MzIgKikKKysJICAgKChjaGFyICopIGRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+aGFzaF90YWJfb2Zmc2V0KSkKKysJIDogTlVMTCk7CisrICAgICAgZG9tYWluLT5tdXN0X3N3YXBfaGFzaF90YWIgPSBkb21haW4tPm11c3Rfc3dhcDsKKysKKysgICAgICAvKiBOb3cgZGlzcGF0Y2ggb24gdGhlIG1pbm9yIHJldmlzaW9uLiAgKi8KKysgICAgICBzd2l0Y2ggKHJldmlzaW9uICYgMHhmZmZmKQorKwl7CisrCWNhc2UgMDoKKysJICBkb21haW4tPm5fc3lzZGVwX3N0cmluZ3MgPSAwOworKwkgIGRvbWFpbi0+b3JpZ19zeXNkZXBfdGFiID0gTlVMTDsKKysJICBkb21haW4tPnRyYW5zX3N5c2RlcF90YWIgPSBOVUxMOworKwkgIGJyZWFrOworKwljYXNlIDE6CisrCWRlZmF1bHQ6CisrCSAgeworKwkgICAgbmxzX3VpbnQzMiBuX3N5c2RlcF9zdHJpbmdzOworKworKwkgICAgaWYgKGRvbWFpbi0+aGFzaF90YWIgPT0gTlVMTCkKKysJICAgICAgLyogVGhpcyBpcyBpbnZhbGlkLiAgVGhlc2UgbWlub3IgcmV2aXNpb25zIG5lZWQgYSBoYXNoIHRhYmxlLiAgKi8KKysJICAgICAgZ290byBpbnZhbGlkOworKworKwkgICAgbl9zeXNkZXBfc3RyaW5ncyA9CisrCSAgICAgIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT5uX3N5c2RlcF9zdHJpbmdzKTsKKysJICAgIGlmIChuX3N5c2RlcF9zdHJpbmdzID4gMCkKKysJICAgICAgeworKwkJbmxzX3VpbnQzMiBuX3N5c2RlcF9zZWdtZW50czsKKysJCWNvbnN0IHN0cnVjdCBzeXNkZXBfc2VnbWVudCAqc3lzZGVwX3NlZ21lbnRzOworKwkJY29uc3QgY2hhciAqKnN5c2RlcF9zZWdtZW50X3ZhbHVlczsKKysJCWNvbnN0IG5sc191aW50MzIgKm9yaWdfc3lzZGVwX3RhYjsKKysJCWNvbnN0IG5sc191aW50MzIgKnRyYW5zX3N5c2RlcF90YWI7CisrCQlubHNfdWludDMyIG5faW5tZW1fc3lzZGVwX3N0cmluZ3M7CisrCQlzaXplX3QgbWVtbmVlZDsKKysJCWNoYXIgKm1lbTsKKysJCXN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MgKmlubWVtX29yaWdfc3lzZGVwX3RhYjsKKysJCXN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MgKmlubWVtX3RyYW5zX3N5c2RlcF90YWI7CisrCQlubHNfdWludDMyICppbm1lbV9oYXNoX3RhYjsKKysJCXVuc2lnbmVkIGludCBpLCBqOworKworKwkJLyogR2V0IHRoZSB2YWx1ZXMgb2YgdGhlIHN5c3RlbSBkZXBlbmRlbnQgc2VnbWVudHMuICAqLworKwkJbl9zeXNkZXBfc2VnbWVudHMgPQorKwkJICBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+bl9zeXNkZXBfc2VnbWVudHMpOworKwkJc3lzZGVwX3NlZ21lbnRzID0gKGNvbnN0IHN0cnVjdCBzeXNkZXBfc2VnbWVudCAqKQorKwkJICAoKGNoYXIgKikgZGF0YQorKwkJICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+c3lzZGVwX3NlZ21lbnRzX29mZnNldCkpOworKwkJc3lzZGVwX3NlZ21lbnRfdmFsdWVzID0KKysJCSAgYWxsb2NhIChuX3N5c2RlcF9zZWdtZW50cyAqIHNpemVvZiAoY29uc3QgY2hhciAqKSk7CisrCQlmb3IgKGkgPSAwOyBpIDwgbl9zeXNkZXBfc2VnbWVudHM7IGkrKykKKysJCSAgeworKwkJICAgIGNvbnN0IGNoYXIgKm5hbWUgPQorKwkJICAgICAgKGNoYXIgKikgZGF0YQorKwkJICAgICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgc3lzZGVwX3NlZ21lbnRzW2ldLm9mZnNldCk7CisrCQkgICAgbmxzX3VpbnQzMiBuYW1lbGVuID0KKysJCSAgICAgIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBzeXNkZXBfc2VnbWVudHNbaV0ubGVuZ3RoKTsKKysKKysJCSAgICBpZiAoIShuYW1lbGVuID4gMCAmJiBuYW1lW25hbWVsZW4gLSAxXSA9PSAnXDAnKSkKKysJCSAgICAgIHsKKysJCQlmcmVlYSAoc3lzZGVwX3NlZ21lbnRfdmFsdWVzKTsKKysJCQlnb3RvIGludmFsaWQ7CisrCQkgICAgICB9CisrCisrCQkgICAgc3lzZGVwX3NlZ21lbnRfdmFsdWVzW2ldID0gZ2V0X3N5c2RlcF9zZWdtZW50X3ZhbHVlIChuYW1lKTsKKysJCSAgfQorKworKwkJb3JpZ19zeXNkZXBfdGFiID0gKGNvbnN0IG5sc191aW50MzIgKikKKysJCSAgKChjaGFyICopIGRhdGEKKysJCSAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRhdGEtPm9yaWdfc3lzZGVwX3RhYl9vZmZzZXQpKTsKKysJCXRyYW5zX3N5c2RlcF90YWIgPSAoY29uc3QgbmxzX3VpbnQzMiAqKQorKwkJICAoKGNoYXIgKikgZGF0YQorKwkJICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+dHJhbnNfc3lzZGVwX3RhYl9vZmZzZXQpKTsKKysKKysJCS8qIENvbXB1dGUgdGhlIGFtb3VudCBvZiBhZGRpdGlvbmFsIG1lbW9yeSBuZWVkZWQgZm9yIHRoZQorKwkJICAgc3lzdGVtIGRlcGVuZGVudCBzdHJpbmdzIGFuZCB0aGUgYXVnbWVudGVkIGhhc2ggdGFibGUuCisrCQkgICBBdCB0aGUgc2FtZSB0aW1lLCBhbHNvIGRyb3Agc3RyaW5nIHBhaXJzIHdoaWNoIHJlZmVyIHRvCisrCQkgICBhbiB1bmRlZmluZWQgc3lzdGVtIGRlcGVuZGVudCBzZWdtZW50LiAgKi8KKysJCW5faW5tZW1fc3lzZGVwX3N0cmluZ3MgPSAwOworKwkJbWVtbmVlZCA9IGRvbWFpbi0+aGFzaF9zaXplICogc2l6ZW9mIChubHNfdWludDMyKTsKKysJCWZvciAoaSA9IDA7IGkgPCBuX3N5c2RlcF9zdHJpbmdzOyBpKyspCisrCQkgIHsKKysJCSAgICBpbnQgdmFsaWQgPSAxOworKwkJICAgIHNpemVfdCBuZWVkc1syXTsKKysKKysJCSAgICBmb3IgKGogPSAwOyBqIDwgMjsgaisrKQorKwkJICAgICAgeworKwkJCWNvbnN0IHN0cnVjdCBzeXNkZXBfc3RyaW5nICpzeXNkZXBfc3RyaW5nID0KKysJCQkgIChjb25zdCBzdHJ1Y3Qgc3lzZGVwX3N0cmluZyAqKQorKwkJCSAgKChjaGFyICopIGRhdGEKKysJCQkgICArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAorKwkJCQlqID09IDAKKysJCQkJPyBvcmlnX3N5c2RlcF90YWJbaV0KKysJCQkJOiB0cmFuc19zeXNkZXBfdGFiW2ldKSk7CisrCQkJc2l6ZV90IG5lZWQgPSAwOworKwkJCWNvbnN0IHN0cnVjdCBzZWdtZW50X3BhaXIgKnAgPSBzeXNkZXBfc3RyaW5nLT5zZWdtZW50czsKKysKKysJCQlpZiAoVyAoZG9tYWluLT5tdXN0X3N3YXAsIHAtPnN5c2RlcHJlZikgIT0gU0VHTUVOVFNfRU5EKQorKwkJCSAgZm9yIChwID0gc3lzZGVwX3N0cmluZy0+c2VnbWVudHM7OyBwKyspCisrCQkJICAgIHsKKysJCQkgICAgICBubHNfdWludDMyIHN5c2RlcHJlZjsKKysKKysJCQkgICAgICBuZWVkICs9IFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBwLT5zZWdzaXplKTsKKysKKysJCQkgICAgICBzeXNkZXByZWYgPSBXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c3lzZGVwcmVmKTsKKysJCQkgICAgICBpZiAoc3lzZGVwcmVmID09IFNFR01FTlRTX0VORCkKKysJCQkJYnJlYWs7CisrCisrCQkJICAgICAgaWYgKHN5c2RlcHJlZiA+PSBuX3N5c2RlcF9zZWdtZW50cykKKysJCQkJeworKwkJCQkgIC8qIEludmFsaWQuICAqLworKwkJCQkgIGZyZWVhIChzeXNkZXBfc2VnbWVudF92YWx1ZXMpOworKwkJCQkgIGdvdG8gaW52YWxpZDsKKysJCQkJfQorKworKwkJCSAgICAgIGlmIChzeXNkZXBfc2VnbWVudF92YWx1ZXNbc3lzZGVwcmVmXSA9PSBOVUxMKQorKwkJCQl7CisrCQkJCSAgLyogVGhpcyBwYXJ0aWN1bGFyIHN0cmluZyBwYWlyIGlzIGludmFsaWQuICAqLworKwkJCQkgIHZhbGlkID0gMDsKKysJCQkJICBicmVhazsKKysJCQkJfQorKworKwkJCSAgICAgIG5lZWQgKz0gc3RybGVuIChzeXNkZXBfc2VnbWVudF92YWx1ZXNbc3lzZGVwcmVmXSk7CisrCQkJICAgIH0KKysKKysJCQluZWVkc1tqXSA9IG5lZWQ7CisrCQkJaWYgKCF2YWxpZCkKKysJCQkgIGJyZWFrOworKwkJICAgICAgfQorKworKwkJICAgIGlmICh2YWxpZCkKKysJCSAgICAgIHsKKysJCQluX2lubWVtX3N5c2RlcF9zdHJpbmdzKys7CisrCQkJbWVtbmVlZCArPSBuZWVkc1swXSArIG5lZWRzWzFdOworKwkJICAgICAgfQorKwkJICB9CisrCQltZW1uZWVkICs9IDIgKiBuX2lubWVtX3N5c2RlcF9zdHJpbmdzCisrCQkJICAgKiBzaXplb2YgKHN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MpOworKworKwkJaWYgKG5faW5tZW1fc3lzZGVwX3N0cmluZ3MgPiAwKQorKwkJICB7CisrCQkgICAgdW5zaWduZWQgaW50IGs7CisrCisrCQkgICAgLyogQWxsb2NhdGUgYWRkaXRpb25hbCBtZW1vcnkuICAqLworKwkJICAgIG1lbSA9IChjaGFyICopIG1hbGxvYyAobWVtbmVlZCk7CisrCQkgICAgaWYgKG1lbSA9PSBOVUxMKQorKwkJICAgICAgZ290byBpbnZhbGlkOworKworKwkJICAgIGRvbWFpbi0+bWFsbG9jZWQgPSBtZW07CisrCQkgICAgaW5tZW1fb3JpZ19zeXNkZXBfdGFiID0gKHN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MgKikgbWVtOworKwkJICAgIG1lbSArPSBuX2lubWVtX3N5c2RlcF9zdHJpbmdzCisrCQkJICAgKiBzaXplb2YgKHN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MpOworKwkJICAgIGlubWVtX3RyYW5zX3N5c2RlcF90YWIgPSAoc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyAqKSBtZW07CisrCQkgICAgbWVtICs9IG5faW5tZW1fc3lzZGVwX3N0cmluZ3MKKysJCQkgICAqIHNpemVvZiAoc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyk7CisrCQkgICAgaW5tZW1faGFzaF90YWIgPSAobmxzX3VpbnQzMiAqKSBtZW07CisrCQkgICAgbWVtICs9IGRvbWFpbi0+aGFzaF9zaXplICogc2l6ZW9mIChubHNfdWludDMyKTsKKysKKysJCSAgICAvKiBDb21wdXRlIHRoZSBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZ3MuICAqLworKwkJICAgIGsgPSAwOworKwkJICAgIGZvciAoaSA9IDA7IGkgPCBuX3N5c2RlcF9zdHJpbmdzOyBpKyspCisrCQkgICAgICB7CisrCQkJaW50IHZhbGlkID0gMTsKKysKKysJCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKQorKwkJCSAgeworKwkJCSAgICBjb25zdCBzdHJ1Y3Qgc3lzZGVwX3N0cmluZyAqc3lzZGVwX3N0cmluZyA9CisrCQkJICAgICAgKGNvbnN0IHN0cnVjdCBzeXNkZXBfc3RyaW5nICopCisrCQkJICAgICAgKChjaGFyICopIGRhdGEKKysJCQkgICAgICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwKKysJCQkJICAgIGogPT0gMAorKwkJCQkgICAgPyBvcmlnX3N5c2RlcF90YWJbaV0KKysJCQkJICAgIDogdHJhbnNfc3lzZGVwX3RhYltpXSkpOworKwkJCSAgICBjb25zdCBzdHJ1Y3Qgc2VnbWVudF9wYWlyICpwID0KKysJCQkgICAgICBzeXNkZXBfc3RyaW5nLT5zZWdtZW50czsKKysKKysJCQkgICAgaWYgKFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBwLT5zeXNkZXByZWYpCisrCQkJCSE9IFNFR01FTlRTX0VORCkKKysJCQkgICAgICBmb3IgKHAgPSBzeXNkZXBfc3RyaW5nLT5zZWdtZW50czs7IHArKykKKysJCQkJeworKwkJCQkgIG5sc191aW50MzIgc3lzZGVwcmVmOworKworKwkJCQkgIHN5c2RlcHJlZiA9CisrCQkJCSAgICBXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c3lzZGVwcmVmKTsKKysJCQkJICBpZiAoc3lzZGVwcmVmID09IFNFR01FTlRTX0VORCkKKysJCQkJICAgIGJyZWFrOworKworKwkJCQkgIGlmIChzeXNkZXBfc2VnbWVudF92YWx1ZXNbc3lzZGVwcmVmXSA9PSBOVUxMKQorKwkJCQkgICAgeworKwkJCQkgICAgICAvKiBUaGlzIHBhcnRpY3VsYXIgc3RyaW5nIHBhaXIgaXMKKysJCQkJCSBpbnZhbGlkLiAgKi8KKysJCQkJICAgICAgdmFsaWQgPSAwOworKwkJCQkgICAgICBicmVhazsKKysJCQkJICAgIH0KKysJCQkJfQorKworKwkJCSAgICBpZiAoIXZhbGlkKQorKwkJCSAgICAgIGJyZWFrOworKwkJCSAgfQorKworKwkJCWlmICh2YWxpZCkKKysJCQkgIHsKKysJCQkgICAgZm9yIChqID0gMDsgaiA8IDI7IGorKykKKysJCQkgICAgICB7CisrCQkJCWNvbnN0IHN0cnVjdCBzeXNkZXBfc3RyaW5nICpzeXNkZXBfc3RyaW5nID0KKysJCQkJICAoY29uc3Qgc3RydWN0IHN5c2RlcF9zdHJpbmcgKikKKysJCQkJICAoKGNoYXIgKikgZGF0YQorKwkJCQkgICArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAorKwkJCQkJaiA9PSAwCisrCQkJCQk/IG9yaWdfc3lzZGVwX3RhYltpXQorKwkJCQkJOiB0cmFuc19zeXNkZXBfdGFiW2ldKSk7CisrCQkJCWNvbnN0IGNoYXIgKnN0YXRpY19zZWdtZW50cyA9CisrCQkJCSAgKGNoYXIgKikgZGF0YQorKwkJCQkgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIHN5c2RlcF9zdHJpbmctPm9mZnNldCk7CisrCQkJCWNvbnN0IHN0cnVjdCBzZWdtZW50X3BhaXIgKnAgPQorKwkJCQkgIHN5c2RlcF9zdHJpbmctPnNlZ21lbnRzOworKworKwkJCQkvKiBDb25jYXRlbmF0ZSB0aGUgc2VnbWVudHMsIGFuZCBmaWxsCisrCQkJCSAgIGlubWVtX29yaWdfc3lzZGVwX3RhYltrXSAoZm9yIGogPT0gMCkgYW5kCisrCQkJCSAgIGlubWVtX3RyYW5zX3N5c2RlcF90YWJba10gKGZvciBqID09IDEpLiAgKi8KKysKKysJCQkJc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyAqaW5tZW1fdGFiX2VudHJ5ID0KKysJCQkJICAoaiA9PSAwCisrCQkJCSAgID8gaW5tZW1fb3JpZ19zeXNkZXBfdGFiCisrCQkJCSAgIDogaW5tZW1fdHJhbnNfc3lzZGVwX3RhYikKKysJCQkJICArIGs7CisrCisrCQkJCWlmIChXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c3lzZGVwcmVmKQorKwkJCQkgICAgPT0gU0VHTUVOVFNfRU5EKQorKwkJCQkgIHsKKysJCQkJICAgIC8qIE9ubHkgb25lIHN0YXRpYyBzZWdtZW50LiAgKi8KKysJCQkJICAgIGlubWVtX3RhYl9lbnRyeS0+bGVuZ3RoID0KKysJCQkJICAgICAgVyAoZG9tYWluLT5tdXN0X3N3YXAsIHAtPnNlZ3NpemUpOworKwkJCQkgICAgaW5tZW1fdGFiX2VudHJ5LT5wb2ludGVyID0gc3RhdGljX3NlZ21lbnRzOworKwkJCQkgIH0KKysJCQkJZWxzZQorKwkJCQkgIHsKKysJCQkJICAgIGlubWVtX3RhYl9lbnRyeS0+cG9pbnRlciA9IG1lbTsKKysKKysJCQkJICAgIGZvciAocCA9IHN5c2RlcF9zdHJpbmctPnNlZ21lbnRzOzsgcCsrKQorKwkJCQkgICAgICB7CisrCQkJCQlubHNfdWludDMyIHNlZ3NpemUgPQorKwkJCQkJICBXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c2Vnc2l6ZSk7CisrCQkJCQlubHNfdWludDMyIHN5c2RlcHJlZiA9CisrCQkJCQkgIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBwLT5zeXNkZXByZWYpOworKwkJCQkJc2l6ZV90IG47CisrCisrCQkJCQlpZiAoc2Vnc2l6ZSA+IDApCisrCQkJCQkgIHsKKysJCQkJCSAgICBtZW1jcHkgKG1lbSwgc3RhdGljX3NlZ21lbnRzLCBzZWdzaXplKTsKKysJCQkJCSAgICBtZW0gKz0gc2Vnc2l6ZTsKKysJCQkJCSAgICBzdGF0aWNfc2VnbWVudHMgKz0gc2Vnc2l6ZTsKKysJCQkJCSAgfQorKworKwkJCQkJaWYgKHN5c2RlcHJlZiA9PSBTRUdNRU5UU19FTkQpCisrCQkJCQkgIGJyZWFrOworKworKwkJCQkJbiA9IHN0cmxlbiAoc3lzZGVwX3NlZ21lbnRfdmFsdWVzW3N5c2RlcHJlZl0pOworKwkJCQkJbWVtY3B5IChtZW0sIHN5c2RlcF9zZWdtZW50X3ZhbHVlc1tzeXNkZXByZWZdLCBuKTsKKysJCQkJCW1lbSArPSBuOworKwkJCQkgICAgICB9CisrCisrCQkJCSAgICBpbm1lbV90YWJfZW50cnktPmxlbmd0aCA9CisrCQkJCSAgICAgIG1lbSAtIGlubWVtX3RhYl9lbnRyeS0+cG9pbnRlcjsKKysJCQkJICB9CisrCQkJICAgICAgfQorKworKwkJCSAgICBrKys7CisrCQkJICB9CisrCQkgICAgICB9CisrCQkgICAgaWYgKGsgIT0gbl9pbm1lbV9zeXNkZXBfc3RyaW5ncykKKysJCSAgICAgIGFib3J0ICgpOworKworKwkJICAgIC8qIENvbXB1dGUgdGhlIGF1Z21lbnRlZCBoYXNoIHRhYmxlLiAgKi8KKysJCSAgICBmb3IgKGkgPSAwOyBpIDwgZG9tYWluLT5oYXNoX3NpemU7IGkrKykKKysJCSAgICAgIGlubWVtX2hhc2hfdGFiW2ldID0KKysJCQlXIChkb21haW4tPm11c3Rfc3dhcF9oYXNoX3RhYiwgZG9tYWluLT5oYXNoX3RhYltpXSk7CisrCQkgICAgZm9yIChpID0gMDsgaSA8IG5faW5tZW1fc3lzZGVwX3N0cmluZ3M7IGkrKykKKysJCSAgICAgIHsKKysJCQljb25zdCBjaGFyICptc2dpZCA9IGlubWVtX29yaWdfc3lzZGVwX3RhYltpXS5wb2ludGVyOworKwkJCW5sc191aW50MzIgaGFzaF92YWwgPSBoYXNoX3N0cmluZyAobXNnaWQpOworKwkJCW5sc191aW50MzIgaWR4ID0gaGFzaF92YWwgJSBkb21haW4tPmhhc2hfc2l6ZTsKKysJCQlubHNfdWludDMyIGluY3IgPQorKwkJCSAgMSArIChoYXNoX3ZhbCAlIChkb21haW4tPmhhc2hfc2l6ZSAtIDIpKTsKKysKKysJCQlmb3IgKDs7KQorKwkJCSAgeworKwkJCSAgICBpZiAoaW5tZW1faGFzaF90YWJbaWR4XSA9PSAwKQorKwkJCSAgICAgIHsKKysJCQkJLyogSGFzaCB0YWJsZSBlbnRyeSBpcyBlbXB0eS4gIFVzZSBpdC4gICovCisrCQkJCWlubWVtX2hhc2hfdGFiW2lkeF0gPSAxICsgZG9tYWluLT5uc3RyaW5ncyArIGk7CisrCQkJCWJyZWFrOworKwkJCSAgICAgIH0KKysKKysJCQkgICAgaWYgKGlkeCA+PSBkb21haW4tPmhhc2hfc2l6ZSAtIGluY3IpCisrCQkJICAgICAgaWR4IC09IGRvbWFpbi0+aGFzaF9zaXplIC0gaW5jcjsKKysJCQkgICAgZWxzZQorKwkJCSAgICAgIGlkeCArPSBpbmNyOworKwkJCSAgfQorKwkJICAgICAgfQorKworKwkJICAgIGRvbWFpbi0+bl9zeXNkZXBfc3RyaW5ncyA9IG5faW5tZW1fc3lzZGVwX3N0cmluZ3M7CisrCQkgICAgZG9tYWluLT5vcmlnX3N5c2RlcF90YWIgPSBpbm1lbV9vcmlnX3N5c2RlcF90YWI7CisrCQkgICAgZG9tYWluLT50cmFuc19zeXNkZXBfdGFiID0gaW5tZW1fdHJhbnNfc3lzZGVwX3RhYjsKKysKKysJCSAgICBkb21haW4tPmhhc2hfdGFiID0gaW5tZW1faGFzaF90YWI7CisrCQkgICAgZG9tYWluLT5tdXN0X3N3YXBfaGFzaF90YWIgPSAwOworKwkJICB9CisrCQllbHNlCisrCQkgIHsKKysJCSAgICBkb21haW4tPm5fc3lzZGVwX3N0cmluZ3MgPSAwOworKwkJICAgIGRvbWFpbi0+b3JpZ19zeXNkZXBfdGFiID0gTlVMTDsKKysJCSAgICBkb21haW4tPnRyYW5zX3N5c2RlcF90YWIgPSBOVUxMOworKwkJICB9CisrCisrCQlmcmVlYSAoc3lzZGVwX3NlZ21lbnRfdmFsdWVzKTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlkb21haW4tPm5fc3lzZGVwX3N0cmluZ3MgPSAwOworKwkJZG9tYWluLT5vcmlnX3N5c2RlcF90YWIgPSBOVUxMOworKwkJZG9tYWluLT50cmFuc19zeXNkZXBfdGFiID0gTlVMTDsKKysJICAgICAgfQorKwkgIH0KKysJICBicmVhazsKKysJfQorICAgICAgIGJyZWFrOworICAgICBkZWZhdWx0OgorLSAgICAgIC8qIFRoaXMgaXMgYW4gaWxsZWdhbCByZXZpc2lvbi4gICovCistI2lmIChkZWZpbmVkIEhBVkVfTU1BUCAmJiBkZWZpbmVkIEhBVkVfTVVOTUFQICYmICFkZWZpbmVkIERJU0FMTE9XX01NQVApIFwKKy0gICAgfHwgZGVmaW5lZCBfTElCQworKyAgICAgIC8qIFRoaXMgaXMgYW4gaW52YWxpZCByZXZpc2lvbi4gICovCisrICAgIGludmFsaWQ6CisrICAgICAgLyogVGhpcyBpcyBhbiBpbnZhbGlkIC5tbyBmaWxlLiAgKi8KKysgICAgICBpZiAoZG9tYWluLT5tYWxsb2NlZCkKKysJZnJlZSAoZG9tYWluLT5tYWxsb2NlZCk7CisrI2lmZGVmIEhBVkVfTU1BUAorICAgICAgIGlmICh1c2VfbW1hcCkKKy0JbXVubWFwICgoY2FkZHJfdCkgZGF0YSwgc3Quc3Rfc2l6ZSk7CisrCW11bm1hcCAoKGNhZGRyX3QpIGRhdGEsIHNpemUpOworICAgICAgIGVsc2UKKyAjZW5kaWYKKyAJZnJlZSAoZGF0YSk7CitAQCAtMTkzLDcgKzEzODUsMzYgQEAKKyAgICAgICByZXR1cm47CisgICAgIH0KKyAKKy0gIC8qIFNob3cgdGhhdCBvbmUgZG9tYWluIGlzIGNoYW5nZWQuICBUaGlzIG1pZ2h0IG1ha2Ugc29tZSBjYWNoZWQKKy0gICAgIHRyYW5zbGF0aW9ucyBpbnZhbGlkLiAgKi8KKy0gICsrX25sX21zZ19jYXRfY250cjsKKysgIC8qIE5vdyBpbml0aWFsaXplIHRoZSBjaGFyYWN0ZXIgc2V0IGNvbnZlcnRlciBmcm9tIHRoZSBjaGFyYWN0ZXIgc2V0CisrICAgICB0aGUgZmlsZSBpcyBlbmNvZGVkIHdpdGggKGZvdW5kIGluIHRoZSBoZWFkZXIgZW50cnkpIHRvIHRoZSBkb21haW4ncworKyAgICAgc3BlY2lmaWVkIGNoYXJhY3RlciBzZXQgb3IgdGhlIGxvY2FsZSdzIGNoYXJhY3RlciBzZXQuICAqLworKyAgbnVsbGVudHJ5ID0gX25sX2luaXRfZG9tYWluX2NvbnYgKGRvbWFpbl9maWxlLCBkb21haW4sIGRvbWFpbmJpbmRpbmcpOworKworKyAgLyogQWxzbyBsb29rIGZvciBhIHBsdXJhbCBzcGVjaWZpY2F0aW9uLiAgKi8KKysgIEVYVFJBQ1RfUExVUkFMX0VYUFJFU1NJT04gKG51bGxlbnRyeSwgJmRvbWFpbi0+cGx1cmFsLCAmZG9tYWluLT5ucGx1cmFscyk7CisgfQorKworKworKyNpZmRlZiBfTElCQworK3ZvaWQKKytpbnRlcm5hbF9mdW5jdGlvbgorK19ubF91bmxvYWRfZG9tYWluIChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqZG9tYWluKQorK3sKKysgIGlmIChkb21haW4tPnBsdXJhbCAhPSAmX19nZXR0ZXh0X2dlcm1hbmljX3BsdXJhbCkKKysgICAgX19nZXR0ZXh0X2ZyZWVfZXhwIChkb21haW4tPnBsdXJhbCk7CisrCisrICBfbmxfZnJlZV9kb21haW5fY29udiAoZG9tYWluKTsKKysKKysgIGlmIChkb21haW4tPm1hbGxvY2VkKQorKyAgICBmcmVlIChkb21haW4tPm1hbGxvY2VkKTsKKysKKysjIGlmZGVmIF9QT1NJWF9NQVBQRURfRklMRVMKKysgIGlmIChkb21haW4tPnVzZV9tbWFwKQorKyAgICBtdW5tYXAgKChjYWRkcl90KSBkb21haW4tPmRhdGEsIGRvbWFpbi0+bW1hcF9zaXplKTsKKysgIGVsc2UKKysjIGVuZGlmCS8qIF9QT1NJWF9NQVBQRURfRklMRVMgKi8KKysgICAgZnJlZSAoKHZvaWQgKikgZG9tYWluLT5kYXRhKTsKKysKKysgIGZyZWUgKGRvbWFpbik7CisrfQorKyNlbmRpZgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2xvY2FsY2hhcnNldC5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xvY2FsY2hhcnNldC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNDc4NzI5MzkyIC0wNDAwCitAQCAtMCwwICsxLDM5OCBAQAorKy8qIERldGVybWluZSBhIGNhbm9uaWNhbCBuYW1lIGZvciB0aGUgY3VycmVudCBsb2NhbGUncyBjaGFyYWN0ZXIgZW5jb2RpbmcuCisrCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrLyogU3BlY2lmaWNhdGlvbi4gICovCisrI2luY2x1ZGUgImxvY2FsY2hhcnNldC5oIgorKworKyNpZiBIQVZFX1NURERFRl9ICisrIyBpbmNsdWRlIDxzdGRkZWYuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaWYgSEFWRV9TVFJJTkdfSAorKyMgaW5jbHVkZSA8c3RyaW5nLmg+CisrI2Vsc2UKKysjIGluY2x1ZGUgPHN0cmluZ3MuaD4KKysjZW5kaWYKKysjaWYgSEFWRV9TVERMSUJfSAorKyMgaW5jbHVkZSA8c3RkbGliLmg+CisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fCisrIyB1bmRlZiBXSU4zMiAgIC8qIGF2b2lkIHdhcm5pbmcgb24gbWluZ3czMiAqLworKyMgZGVmaW5lIFdJTjMyCisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX19FTVhfXworKy8qIEFzc3VtZSBFTVggcHJvZ3JhbSBydW5zIG9uIE9TLzIsIGV2ZW4gaWYgY29tcGlsZWQgdW5kZXIgRE9TLiAgKi8KKysjIGRlZmluZSBPUzIKKysjZW5kaWYKKysKKysjaWYgIWRlZmluZWQgV0lOMzIKKysjIGlmIEhBVkVfTEFOR0lORk9fQ09ERVNFVAorKyMgIGluY2x1ZGUgPGxhbmdpbmZvLmg+CisrIyBlbHNlCisrIyAgaWYgSEFWRV9TRVRMT0NBTEUKKysjICAgaW5jbHVkZSA8bG9jYWxlLmg+CisrIyAgZW5kaWYKKysjIGVuZGlmCisrI2VsaWYgZGVmaW5lZCBXSU4zMgorKyMgZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKysjIGluY2x1ZGUgPHdpbmRvd3MuaD4KKysjZW5kaWYKKysjaWYgZGVmaW5lZCBPUzIKKysjIGRlZmluZSBJTkNMX0RPUworKyMgaW5jbHVkZSA8b3MyLmg+CisrI2VuZGlmCisrCisrI2lmIEVOQUJMRV9SRUxPQ0FUQUJMRQorKyMgaW5jbHVkZSAicmVsb2NhdGFibGUuaCIKKysjZWxzZQorKyMgZGVmaW5lIHJlbG9jYXRlKHBhdGhuYW1lKSAocGF0aG5hbWUpCisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fIHx8IGRlZmluZWQgX19FTVhfXyB8fCBkZWZpbmVkIF9fREpHUFBfXworKyAgLyogV2luMzIsIE9TLzIsIERPUyAqLworKyMgZGVmaW5lIElTU0xBU0goQykgKChDKSA9PSAnLycgfHwgKEMpID09ICdcXCcpCisrI2VuZGlmCisrCisrI2lmbmRlZiBESVJFQ1RPUllfU0VQQVJBVE9SCisrIyBkZWZpbmUgRElSRUNUT1JZX1NFUEFSQVRPUiAnLycKKysjZW5kaWYKKysKKysjaWZuZGVmIElTU0xBU0gKKysjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gRElSRUNUT1JZX1NFUEFSQVRPUikKKysjZW5kaWYKKysKKysjaWYgSEFWRV9ERUNMX0dFVENfVU5MT0NLRUQKKysjIHVuZGVmIGdldGMKKysjIGRlZmluZSBnZXRjIGdldGNfdW5sb2NrZWQKKysjZW5kaWYKKysKKysvKiBUaGUgZm9sbG93aW5nIHN0YXRpYyB2YXJpYWJsZSBpcyBkZWNsYXJlZCAndm9sYXRpbGUnIHRvIGF2b2lkIGEKKysgICBwb3NzaWJsZSBtdWx0aXRocmVhZCBwcm9ibGVtIGluIHRoZSBmdW5jdGlvbiBnZXRfY2hhcnNldF9hbGlhc2VzLiBJZiB3ZQorKyAgIGFyZSBydW5uaW5nIGluIGEgdGhyZWFkZWQgZW52aXJvbm1lbnQsIGFuZCBpZiB0d28gdGhyZWFkcyBpbml0aWFsaXplCisrICAgJ2NoYXJzZXRfYWxpYXNlcycgc2ltdWx0YW5lb3VzbHksIGJvdGggd2lsbCBwcm9kdWNlIHRoZSBzYW1lIHZhbHVlLAorKyAgIGFuZCBldmVyeXRoaW5nIHdpbGwgYmUgb2sgaWYgdGhlIHR3byBhc3NpZ25tZW50cyB0byAnY2hhcnNldF9hbGlhc2VzJworKyAgIGFyZSBhdG9taWMuIEJ1dCBJIGRvbid0IGtub3cgd2hhdCB3aWxsIGhhcHBlbiBpZiB0aGUgdHdvIGFzc2lnbm1lbnRzIG1peC4gICovCisrI2lmIF9fU1REQ19fICE9IDEKKysjIGRlZmluZSB2b2xhdGlsZSAvKiBlbXB0eSAqLworKyNlbmRpZgorKy8qIFBvaW50ZXIgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUsIGlmIGl0IGhhcyBhbHJlYWR5IGJlZW4KKysgICByZWFkLCBlbHNlIE5VTEwuICBJdHMgZm9ybWF0IGlzOgorKyAgIEFMSUFTXzEgJ1wwJyBDQU5PTklDQUxfMSAnXDAnIC4uLiBBTElBU19uICdcMCcgQ0FOT05JQ0FMX24gJ1wwJyAnXDAnICAqLworK3N0YXRpYyBjb25zdCBjaGFyICogdm9sYXRpbGUgY2hhcnNldF9hbGlhc2VzOworKworKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUuICAqLworK3N0YXRpYyBjb25zdCBjaGFyICoKKytnZXRfY2hhcnNldF9hbGlhc2VzICgpCisreworKyAgY29uc3QgY2hhciAqY3A7CisrCisrICBjcCA9IGNoYXJzZXRfYWxpYXNlczsKKysgIGlmIChjcCA9PSBOVUxMKQorKyAgICB7CisrI2lmICEoZGVmaW5lZCBWTVMgfHwgZGVmaW5lZCBXSU4zMikKKysgICAgICBGSUxFICpmcDsKKysgICAgICBjb25zdCBjaGFyICpkaXIgPSByZWxvY2F0ZSAoTElCRElSKTsKKysgICAgICBjb25zdCBjaGFyICpiYXNlID0gImNoYXJzZXQuYWxpYXMiOworKyAgICAgIGNoYXIgKmZpbGVfbmFtZTsKKysKKysgICAgICAvKiBDb25jYXRlbmF0ZSBkaXIgYW5kIGJhc2UgaW50byBmcmVzaGx5IGFsbG9jYXRlZCBmaWxlX25hbWUuICAqLworKyAgICAgIHsKKysJc2l6ZV90IGRpcl9sZW4gPSBzdHJsZW4gKGRpcik7CisrCXNpemVfdCBiYXNlX2xlbiA9IHN0cmxlbiAoYmFzZSk7CisrCWludCBhZGRfc2xhc2ggPSAoZGlyX2xlbiA+IDAgJiYgIUlTU0xBU0ggKGRpcltkaXJfbGVuIC0gMV0pKTsKKysJZmlsZV9uYW1lID0gKGNoYXIgKikgbWFsbG9jIChkaXJfbGVuICsgYWRkX3NsYXNoICsgYmFzZV9sZW4gKyAxKTsKKysJaWYgKGZpbGVfbmFtZSAhPSBOVUxMKQorKwkgIHsKKysJICAgIG1lbWNweSAoZmlsZV9uYW1lLCBkaXIsIGRpcl9sZW4pOworKwkgICAgaWYgKGFkZF9zbGFzaCkKKysJICAgICAgZmlsZV9uYW1lW2Rpcl9sZW5dID0gRElSRUNUT1JZX1NFUEFSQVRPUjsKKysJICAgIG1lbWNweSAoZmlsZV9uYW1lICsgZGlyX2xlbiArIGFkZF9zbGFzaCwgYmFzZSwgYmFzZV9sZW4gKyAxKTsKKysJICB9CisrICAgICAgfQorKworKyAgICAgIGlmIChmaWxlX25hbWUgPT0gTlVMTCB8fCAoZnAgPSBmb3BlbiAoZmlsZV9uYW1lLCAiciIpKSA9PSBOVUxMKQorKwkvKiBPdXQgb2YgbWVtb3J5IG9yIGZpbGUgbm90IGZvdW5kLCB0cmVhdCBpdCBhcyBlbXB0eS4gICovCisrCWNwID0gIiI7CisrICAgICAgZWxzZQorKwl7CisrCSAgLyogUGFyc2UgdGhlIGZpbGUncyBjb250ZW50cy4gICovCisrCSAgaW50IGM7CisrCSAgY2hhciBidWYxWzUwKzFdOworKwkgIGNoYXIgYnVmMls1MCsxXTsKKysJICBjaGFyICpyZXNfcHRyID0gTlVMTDsKKysJICBzaXplX3QgcmVzX3NpemUgPSAwOworKwkgIHNpemVfdCBsMSwgbDI7CisrCisrCSAgZm9yICg7OykKKysJICAgIHsKKysJICAgICAgYyA9IGdldGMgKGZwKTsKKysJICAgICAgaWYgKGMgPT0gRU9GKQorKwkJYnJlYWs7CisrCSAgICAgIGlmIChjID09ICdcbicgfHwgYyA9PSAnICcgfHwgYyA9PSAnXHQnKQorKwkJY29udGludWU7CisrCSAgICAgIGlmIChjID09ICcjJykKKysJCXsKKysJCSAgLyogU2tpcCBjb21tZW50LCB0byBlbmQgb2YgbGluZS4gICovCisrCQkgIGRvCisrCQkgICAgYyA9IGdldGMgKGZwKTsKKysJCSAgd2hpbGUgKCEoYyA9PSBFT0YgfHwgYyA9PSAnXG4nKSk7CisrCQkgIGlmIChjID09IEVPRikKKysJCSAgICBicmVhazsKKysJCSAgY29udGludWU7CisrCQl9CisrCSAgICAgIHVuZ2V0YyAoYywgZnApOworKwkgICAgICBpZiAoZnNjYW5mIChmcCwgIiU1MHMgJTUwcyIsIGJ1ZjEsIGJ1ZjIpIDwgMikKKysJCWJyZWFrOworKwkgICAgICBsMSA9IHN0cmxlbiAoYnVmMSk7CisrCSAgICAgIGwyID0gc3RybGVuIChidWYyKTsKKysJICAgICAgaWYgKHJlc19zaXplID09IDApCisrCQl7CisrCQkgIHJlc19zaXplID0gbDEgKyAxICsgbDIgKyAxOworKwkJICByZXNfcHRyID0gKGNoYXIgKikgbWFsbG9jIChyZXNfc2l6ZSArIDEpOworKwkJfQorKwkgICAgICBlbHNlCisrCQl7CisrCQkgIHJlc19zaXplICs9IGwxICsgMSArIGwyICsgMTsKKysJCSAgcmVzX3B0ciA9IChjaGFyICopIHJlYWxsb2MgKHJlc19wdHIsIHJlc19zaXplICsgMSk7CisrCQl9CisrCSAgICAgIGlmIChyZXNfcHRyID09IE5VTEwpCisrCQl7CisrCQkgIC8qIE91dCBvZiBtZW1vcnkuICovCisrCQkgIHJlc19zaXplID0gMDsKKysJCSAgYnJlYWs7CisrCQl9CisrCSAgICAgIHN0cmNweSAocmVzX3B0ciArIHJlc19zaXplIC0gKGwyICsgMSkgLSAobDEgKyAxKSwgYnVmMSk7CisrCSAgICAgIHN0cmNweSAocmVzX3B0ciArIHJlc19zaXplIC0gKGwyICsgMSksIGJ1ZjIpOworKwkgICAgfQorKwkgIGZjbG9zZSAoZnApOworKwkgIGlmIChyZXNfc2l6ZSA9PSAwKQorKwkgICAgY3AgPSAiIjsKKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgICoocmVzX3B0ciArIHJlc19zaXplKSA9ICdcMCc7CisrCSAgICAgIGNwID0gcmVzX3B0cjsKKysJICAgIH0KKysJfQorKworKyAgICAgIGlmIChmaWxlX25hbWUgIT0gTlVMTCkKKysJZnJlZSAoZmlsZV9uYW1lKTsKKysKKysjZWxzZQorKworKyMgaWYgZGVmaW5lZCBWTVMKKysgICAgICAvKiBUbyBhdm9pZCB0aGUgdHJvdWJsZXMgb2YgYW4gZXh0cmEgZmlsZSBjaGFyc2V0LmFsaWFzX3ZtcyBpbiB0aGUKKysJIHNvdXJjZXMgb2YgbWFueSBHTlUgcGFja2FnZXMsIHNpbXBseSBpbmxpbmUgdGhlIGFsaWFzZXMgaGVyZS4gICovCisrICAgICAgLyogVGhlIGxpc3Qgb2YgZW5jb2RpbmdzIGlzIHRha2VuIGZyb20gdGhlIE9wZW5WTVMgNy4zLTEgZG9jdW1lbnRhdGlvbgorKwkgIkNvbXBhcSBDIFJ1bi1UaW1lIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCBmb3IgT3BlblZNUyBzeXN0ZW1zIgorKwkgc2VjdGlvbiAxMC43ICJIYW5kbGluZyBEaWZmZXJlbnQgQ2hhcmFjdGVyIFNldHMiLiAgKi8KKysgICAgICBjcCA9ICJJU084ODU5LTEiICJcMCIgIklTTy04ODU5LTEiICJcMCIKKysJICAgIklTTzg4NTktMiIgIlwwIiAiSVNPLTg4NTktMiIgIlwwIgorKwkgICAiSVNPODg1OS01IiAiXDAiICJJU08tODg1OS01IiAiXDAiCisrCSAgICJJU084ODU5LTciICJcMCIgIklTTy04ODU5LTciICJcMCIKKysJICAgIklTTzg4NTktOCIgIlwwIiAiSVNPLTg4NTktOCIgIlwwIgorKwkgICAiSVNPODg1OS05IiAiXDAiICJJU08tODg1OS05IiAiXDAiCisrCSAgIC8qIEphcGFuZXNlICovCisrCSAgICJldWNKUCIgIlwwIiAiRVVDLUpQIiAiXDAiCisrCSAgICJTSklTIiAiXDAiICJTSElGVF9KSVMiICJcMCIKKysJICAgIkRFQ0tBTkpJIiAiXDAiICJERUMtS0FOSkkiICJcMCIKKysJICAgIlNERUNLQU5KSSIgIlwwIiAiRVVDLUpQIiAiXDAiCisrCSAgIC8qIENoaW5lc2UgKi8KKysJICAgImV1Y1RXIiAiXDAiICJFVUMtVFciICJcMCIKKysJICAgIkRFQ0hBTllVIiAiXDAiICJERUMtSEFOWVUiICJcMCIKKysJICAgIkRFQ0hBTlpJIiAiXDAiICJHQjIzMTIiICJcMCIKKysJICAgLyogS29yZWFuICovCisrCSAgICJERUNLT1JFQU4iICJcMCIgIkVVQy1LUiIgIlwwIjsKKysjIGVuZGlmCisrCisrIyBpZiBkZWZpbmVkIFdJTjMyCisrICAgICAgLyogVG8gYXZvaWQgdGhlIHRyb3VibGVzIG9mIGluc3RhbGxpbmcgYSBzZXBhcmF0ZSBmaWxlIGluIHRoZSBzYW1lCisrCSBkaXJlY3RvcnkgYXMgdGhlIERMTCBhbmQgb2YgcmV0cmlldmluZyB0aGUgRExMJ3MgZGlyZWN0b3J5IGF0CisrCSBydW50aW1lLCBzaW1wbHkgaW5saW5lIHRoZSBhbGlhc2VzIGhlcmUuICAqLworKworKyAgICAgIGNwID0gIkNQOTM2IiAiXDAiICJHQksiICJcMCIKKysJICAgIkNQMTM2MSIgIlwwIiAiSk9IQUIiICJcMCIKKysJICAgIkNQMjAxMjciICJcMCIgIkFTQ0lJIiAiXDAiCisrCSAgICJDUDIwODY2IiAiXDAiICJLT0k4LVIiICJcMCIKKysJICAgIkNQMjE4NjYiICJcMCIgIktPSTgtUlUiICJcMCIKKysJICAgIkNQMjg1OTEiICJcMCIgIklTTy04ODU5LTEiICJcMCIKKysJICAgIkNQMjg1OTIiICJcMCIgIklTTy04ODU5LTIiICJcMCIKKysJICAgIkNQMjg1OTMiICJcMCIgIklTTy04ODU5LTMiICJcMCIKKysJICAgIkNQMjg1OTQiICJcMCIgIklTTy04ODU5LTQiICJcMCIKKysJICAgIkNQMjg1OTUiICJcMCIgIklTTy04ODU5LTUiICJcMCIKKysJICAgIkNQMjg1OTYiICJcMCIgIklTTy04ODU5LTYiICJcMCIKKysJICAgIkNQMjg1OTciICJcMCIgIklTTy04ODU5LTciICJcMCIKKysJICAgIkNQMjg1OTgiICJcMCIgIklTTy04ODU5LTgiICJcMCIKKysJICAgIkNQMjg1OTkiICJcMCIgIklTTy04ODU5LTkiICJcMCIKKysJICAgIkNQMjg2MDUiICJcMCIgIklTTy04ODU5LTE1IiAiXDAiOworKyMgZW5kaWYKKysjZW5kaWYKKysKKysgICAgICBjaGFyc2V0X2FsaWFzZXMgPSBjcDsKKysgICAgfQorKworKyAgcmV0dXJuIGNwOworK30KKysKKysvKiBEZXRlcm1pbmUgdGhlIGN1cnJlbnQgbG9jYWxlJ3MgY2hhcmFjdGVyIGVuY29kaW5nLCBhbmQgY2Fub25pY2FsaXplIGl0CisrICAgaW50byBvbmUgb2YgdGhlIGNhbm9uaWNhbCBuYW1lcyBsaXN0ZWQgaW4gY29uZmlnLmNoYXJzZXQuCisrICAgVGhlIHJlc3VsdCBtdXN0IG5vdCBiZSBmcmVlZDsgaXQgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQuCisrICAgSWYgdGhlIGNhbm9uaWNhbCBuYW1lIGNhbm5vdCBiZSBkZXRlcm1pbmVkLCB0aGUgcmVzdWx0IGlzIGEgbm9uLWNhbm9uaWNhbAorKyAgIG5hbWUuICAqLworKworKyNpZmRlZiBTVEFUSUMKKytTVEFUSUMKKysjZW5kaWYKKytjb25zdCBjaGFyICoKKytsb2NhbGVfY2hhcnNldCAoKQorK3sKKysgIGNvbnN0IGNoYXIgKmNvZGVzZXQ7CisrICBjb25zdCBjaGFyICphbGlhc2VzOworKworKyNpZiAhKGRlZmluZWQgV0lOMzIgfHwgZGVmaW5lZCBPUzIpCisrCisrIyBpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKysKKysgIC8qIE1vc3Qgc3lzdGVtcyBzdXBwb3J0IG5sX2xhbmdpbmZvIChDT0RFU0VUKSBub3dhZGF5cy4gICovCisrICBjb2Rlc2V0ID0gbmxfbGFuZ2luZm8gKENPREVTRVQpOworKworKyMgZWxzZQorKworKyAgLyogT24gb2xkIHN5c3RlbXMgd2hpY2ggbGFjayBpdCwgdXNlIHNldGxvY2FsZSBvciBnZXRlbnYuICAqLworKyAgY29uc3QgY2hhciAqbG9jYWxlID0gTlVMTDsKKysKKysgIC8qIEJ1dCBtb3N0IG9sZCBzeXN0ZW1zIGRvbid0IGhhdmUgYSBjb21wbGV0ZSBzZXQgb2YgbG9jYWxlcy4gIFNvbWUKKysgICAgIChsaWtlIFN1bk9TIDQgb3IgREpHUFApIGhhdmUgb25seSB0aGUgQyBsb2NhbGUuICBUaGVyZWZvcmUgd2UgZG9uJ3QKKysgICAgIHVzZSBzZXRsb2NhbGUgaGVyZTsgaXQgd291bGQgcmV0dXJuICJDIiB3aGVuIGl0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUKKysgICAgIGxvY2FsZSBuYW1lIHRoZSB1c2VyIGhhcyBzZXQuICAqLworKyMgIGlmIEhBVkVfU0VUTE9DQUxFICYmIDAKKysgIGxvY2FsZSA9IHNldGxvY2FsZSAoTENfQ1RZUEUsIE5VTEwpOworKyMgIGVuZGlmCisrICBpZiAobG9jYWxlID09IE5VTEwgfHwgbG9jYWxlWzBdID09ICdcMCcpCisrICAgIHsKKysgICAgICBsb2NhbGUgPSBnZXRlbnYgKCJMQ19BTEwiKTsKKysgICAgICBpZiAobG9jYWxlID09IE5VTEwgfHwgbG9jYWxlWzBdID09ICdcMCcpCisrCXsKKysJICBsb2NhbGUgPSBnZXRlbnYgKCJMQ19DVFlQRSIpOworKwkgIGlmIChsb2NhbGUgPT0gTlVMTCB8fCBsb2NhbGVbMF0gPT0gJ1wwJykKKysJICAgIGxvY2FsZSA9IGdldGVudiAoIkxBTkciKTsKKysJfQorKyAgICB9CisrCisrICAvKiBPbiBzb21lIG9sZCBzeXN0ZW1zLCBvbmUgdXNlZCB0byBzZXQgbG9jYWxlID0gImlzbzg4NTlfMSIuIE9uIG90aGVycywKKysgICAgIHlvdSBzZXQgaXQgdG8gImxhbmd1YWdlX0NPVU5UUlkuY2hhcnNldCIuIEluIGFueSBjYXNlLCB3ZSByZXNvbHZlIGl0CisrICAgICB0aHJvdWdoIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUuICAqLworKyAgY29kZXNldCA9IGxvY2FsZTsKKysKKysjIGVuZGlmCisrCisrI2VsaWYgZGVmaW5lZCBXSU4zMgorKworKyAgc3RhdGljIGNoYXIgYnVmWzIgKyAxMCArIDFdOworKworKyAgLyogV29lMzIgaGFzIGEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBsb2NhbGUncyBjb2RlcGFnZSBhcyBhIG51bWJlci4gICovCisrICBzcHJpbnRmIChidWYsICJDUCV1IiwgR2V0QUNQICgpKTsKKysgIGNvZGVzZXQgPSBidWY7CisrCisrI2VsaWYgZGVmaW5lZCBPUzIKKysKKysgIGNvbnN0IGNoYXIgKmxvY2FsZTsKKysgIHN0YXRpYyBjaGFyIGJ1ZlsyICsgMTAgKyAxXTsKKysgIFVMT05HIGNwWzNdOworKyAgVUxPTkcgY3BsZW47CisrCisrICAvKiBBbGxvdyB1c2VyIHRvIG92ZXJyaWRlIHRoZSBjb2Rlc2V0LCBhcyBzZXQgaW4gdGhlIG9wZXJhdGluZyBzeXN0ZW0sCisrICAgICB3aXRoIHN0YW5kYXJkIGxhbmd1YWdlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gICovCisrICBsb2NhbGUgPSBnZXRlbnYgKCJMQ19BTEwiKTsKKysgIGlmIChsb2NhbGUgPT0gTlVMTCB8fCBsb2NhbGVbMF0gPT0gJ1wwJykKKysgICAgeworKyAgICAgIGxvY2FsZSA9IGdldGVudiAoIkxDX0NUWVBFIik7CisrICAgICAgaWYgKGxvY2FsZSA9PSBOVUxMIHx8IGxvY2FsZVswXSA9PSAnXDAnKQorKwlsb2NhbGUgPSBnZXRlbnYgKCJMQU5HIik7CisrICAgIH0KKysgIGlmIChsb2NhbGUgIT0gTlVMTCAmJiBsb2NhbGVbMF0gIT0gJ1wwJykKKysgICAgeworKyAgICAgIC8qIElmIHRoZSBsb2NhbGUgbmFtZSBjb250YWlucyBhbiBlbmNvZGluZyBhZnRlciB0aGUgZG90LCByZXR1cm4gaXQuICAqLworKyAgICAgIGNvbnN0IGNoYXIgKmRvdCA9IHN0cmNociAobG9jYWxlLCAnLicpOworKworKyAgICAgIGlmIChkb3QgIT0gTlVMTCkKKysJeworKwkgIGNvbnN0IGNoYXIgKm1vZGlmaWVyOworKworKwkgIGRvdCsrOworKwkgIC8qIExvb2sgZm9yIHRoZSBwb3NzaWJsZSBALi4uIHRyYWlsZXIgYW5kIHJlbW92ZSBpdCwgaWYgYW55LiAgKi8KKysJICBtb2RpZmllciA9IHN0cmNociAoZG90LCAnQCcpOworKwkgIGlmIChtb2RpZmllciA9PSBOVUxMKQorKwkgICAgcmV0dXJuIGRvdDsKKysJICBpZiAobW9kaWZpZXIgLSBkb3QgPCBzaXplb2YgKGJ1ZikpCisrCSAgICB7CisrCSAgICAgIG1lbWNweSAoYnVmLCBkb3QsIG1vZGlmaWVyIC0gZG90KTsKKysJICAgICAgYnVmIFttb2RpZmllciAtIGRvdF0gPSAnXDAnOworKwkgICAgICByZXR1cm4gYnVmOworKwkgICAgfQorKwl9CisrCisrICAgICAgLyogUmVzb2x2ZSB0aHJvdWdoIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUuICAqLworKyAgICAgIGNvZGVzZXQgPSBsb2NhbGU7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIC8qIE9TLzIgaGFzIGEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBsb2NhbGUncyBjb2RlcGFnZSBhcyBhIG51bWJlci4gICovCisrICAgICAgaWYgKERvc1F1ZXJ5Q3AgKHNpemVvZiAoY3ApLCBjcCwgJmNwbGVuKSkKKysJY29kZXNldCA9ICIiOworKyAgICAgIGVsc2UKKysJeworKwkgIHNwcmludGYgKGJ1ZiwgIkNQJXUiLCBjcFswXSk7CisrCSAgY29kZXNldCA9IGJ1ZjsKKysJfQorKyAgICB9CisrCisrI2VuZGlmCisrCisrICBpZiAoY29kZXNldCA9PSBOVUxMKQorKyAgICAvKiBUaGUgY2Fub25pY2FsIG5hbWUgY2Fubm90IGJlIGRldGVybWluZWQuICAqLworKyAgICBjb2Rlc2V0ID0gIiI7CisrCisrICAvKiBSZXNvbHZlIGFsaWFzLiAqLworKyAgZm9yIChhbGlhc2VzID0gZ2V0X2NoYXJzZXRfYWxpYXNlcyAoKTsKKysgICAgICAgKmFsaWFzZXMgIT0gJ1wwJzsKKysgICAgICAgYWxpYXNlcyArPSBzdHJsZW4gKGFsaWFzZXMpICsgMSwgYWxpYXNlcyArPSBzdHJsZW4gKGFsaWFzZXMpICsgMSkKKysgICAgaWYgKHN0cmNtcCAoY29kZXNldCwgYWxpYXNlcykgPT0gMAorKwl8fCAoYWxpYXNlc1swXSA9PSAnKicgJiYgYWxpYXNlc1sxXSA9PSAnXDAnKSkKKysgICAgICB7CisrCWNvZGVzZXQgPSBhbGlhc2VzICsgc3RybGVuIChhbGlhc2VzKSArIDE7CisrCWJyZWFrOworKyAgICAgIH0KKysKKysgIC8qIERvbid0IHJldHVybiBhbiBlbXB0eSBzdHJpbmcuICBHTlUgbGliYyBhbmQgR05VIGxpYmljb252IGludGVycHJldAorKyAgICAgdGhlIGVtcHR5IHN0cmluZyBhcyBkZW5vdGluZyAidGhlIGxvY2FsZSdzIGNoYXJhY3RlciBlbmNvZGluZyIsCisrICAgICB0aHVzIEdOVSBsaWJpY29udiB3b3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gYSBzZWNvbmQgdGltZS4gICovCisrICBpZiAoY29kZXNldFswXSA9PSAnXDAnKQorKyAgICBjb2Rlc2V0ID0gIkFTQ0lJIjsKKysKKysgIHJldHVybiBjb2Rlc2V0OworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9sb2NhbGNoYXJzZXQuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9sb2NhbGNoYXJzZXQuaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjQ4MzcyODYzMiAtMDQwMAorQEAgLTAsMCArMSw0MiBAQAorKy8qIERldGVybWluZSBhIGNhbm9uaWNhbCBuYW1lIGZvciB0aGUgY3VycmVudCBsb2NhbGUncyBjaGFyYWN0ZXIgZW5jb2RpbmcuCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDSEFSU0VUIExpYnJhcnkuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX0xPQ0FMQ0hBUlNFVF9ICisrI2RlZmluZSBfTE9DQUxDSEFSU0VUX0gKKysKKysKKysjaWZkZWYgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKysKKysvKiBEZXRlcm1pbmUgdGhlIGN1cnJlbnQgbG9jYWxlJ3MgY2hhcmFjdGVyIGVuY29kaW5nLCBhbmQgY2Fub25pY2FsaXplIGl0CisrICAgaW50byBvbmUgb2YgdGhlIGNhbm9uaWNhbCBuYW1lcyBsaXN0ZWQgaW4gY29uZmlnLmNoYXJzZXQuCisrICAgVGhlIHJlc3VsdCBtdXN0IG5vdCBiZSBmcmVlZDsgaXQgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQuCisrICAgSWYgdGhlIGNhbm9uaWNhbCBuYW1lIGNhbm5vdCBiZSBkZXRlcm1pbmVkLCB0aGUgcmVzdWx0IGlzIGEgbm9uLWNhbm9uaWNhbAorKyAgIG5hbWUuICAqLworK2V4dGVybiBjb25zdCBjaGFyICogbG9jYWxlX2NoYXJzZXQgKHZvaWQpOworKworKworKyNpZmRlZiBfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKysKKysKKysjZW5kaWYgLyogX0xPQ0FMQ0hBUlNFVF9IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbG9jYWxlLmFsaWFzCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xvY2FsZS5hbGlhcwkyMDA0LTA5LTEyIDE0OjQwOjM0LjQ5OTcyNjIwMCAtMDQwMAorQEAgLTAsMCArMSw3OCBAQAorKyMgTG9jYWxlIG5hbWUgYWxpYXMgZGF0YSBiYXNlLgorKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDEsMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyMgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgYW55IGxhdGVyIHZlcnNpb24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysjIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyMKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrIyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysjIFVTQS4KKysKKysjIFRoZSBmb3JtYXQgb2YgdGhpcyBmaWxlIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgY29ycmVzcG9uZGluZyBmaWxlIG9mCisrIyB0aGUgWCBXaW5kb3cgU3lzdGVtLCB3aGljaCBub3JtYWxseSBjYW4gYmUgZm91bmQgaW4KKysjCS91c3IvbGliL1gxMS9sb2NhbGUvbG9jYWxlLmFsaWFzCisrIyBBIHNpbmdsZSBsaW5lIGNvbnRhaW5zIHR3byBmaWVsZHM6IGFuIGFsaWFzIGFuZCBhIHN1YnN0aXR1dGlvbiB2YWx1ZS4KKysjIEFsbCBlbnRyaWVzIGFyZSBjYXNlIGluZGVwZW5kZW50LgorKworKyMgTm90ZTogVGhpcyBmaWxlIGlzIGZhciBmcm9tIGJlaW5nIGNvbXBsZXRlLiAgSWYgeW91IGhhdmUgYSB2YWx1ZSBmb3IKKysjIHlvdXIgb3duIHNpdGUgd2hpY2ggeW91IHRoaW5rIG1pZ2h0IGJlIHVzZWZ1bCBmb3Igb3RoZXJzIHRvbywgc2hhcmUKKysjIGl0IHdpdGggdGhlIHJlc3Qgb2YgdXMuICBTZW5kIGl0IHVzaW5nIHRoZSBgZ2xpYmNidWcnIHNjcmlwdCB0bworKyMgYnVnc0BnbnUub3JnLgorKworKyMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAKKysKKytib2ttYWwJCW5iX05PLklTTy04ODU5LTEKKytib2tt5WwJCW5iX05PLklTTy04ODU5LTEKKytjYXRhbGFuCQljYV9FUy5JU08tODg1OS0xCisrY3JvYXRpYW4JaHJfSFIuSVNPLTg4NTktMgorK2N6ZWNoCQljc19DWi5JU08tODg1OS0yCisrZGFuaXNoICAgICAgICAgIGRhX0RLLklTTy04ODU5LTEKKytkYW5zawkJZGFfREsuSVNPLTg4NTktMQorK2RldXRzY2gJCWRlX0RFLklTTy04ODU5LTEKKytkdXRjaAkJbmxfTkwuSVNPLTg4NTktMQorK2Vlc3RpCQlldF9FRS5JU08tODg1OS0xCisrZXN0b25pYW4JZXRfRUUuSVNPLTg4NTktMQorK2Zpbm5pc2ggICAgICAgICBmaV9GSS5JU08tODg1OS0xCisrZnJhbudhaXMJZnJfRlIuSVNPLTg4NTktMQorK2ZyZW5jaAkJZnJfRlIuSVNPLTg4NTktMQorK2dhbGVnbwkJZ2xfRVMuSVNPLTg4NTktMQorK2dhbGljaWFuCWdsX0VTLklTTy04ODU5LTEKKytnZXJtYW4JCWRlX0RFLklTTy04ODU5LTEKKytncmVlayAgICAgICAgICAgZWxfR1IuSVNPLTg4NTktNworK2hlYnJldyAgICAgICAgICBoZV9JTC5JU08tODg1OS04CisraHJ2YXRza2kJaHJfSFIuSVNPLTg4NTktMgorK2h1bmdhcmlhbiAgICAgICBodV9IVS5JU08tODg1OS0yCisraWNlbGFuZGljICAgICAgIGlzX0lTLklTTy04ODU5LTEKKytpdGFsaWFuICAgICAgICAgaXRfSVQuSVNPLTg4NTktMQorK2phcGFuZXNlCWphX0pQLmV1Y0pQCisramFwYW5lc2UuZXVjCWphX0pQLmV1Y0pQCisramFfSlAJCWphX0pQLmV1Y0pQCisramFfSlAudWppcwlqYV9KUC5ldWNKUAorK2phcGFuZXNlLnNqaXMJamFfSlAuU0pJUworK2tvcmVhbgkJa29fS1IuZXVjS1IKKytrb3JlYW4uZXVjIAlrb19LUi5ldWNLUgorK2tvX0tSCQlrb19LUi5ldWNLUgorK2xpdGh1YW5pYW4gICAgICBsdF9MVC5JU08tODg1OS0xMworK25vX05PCQluYl9OTy5JU08tODg1OS0xCisrbm9fTk8uSVNPLTg4NTktMSBuYl9OTy5JU08tODg1OS0xCisrbm9yd2VnaWFuICAgICAgIG5iX05PLklTTy04ODU5LTEKKytueW5vcnNrCQlubl9OTy5JU08tODg1OS0xCisrcG9saXNoICAgICAgICAgIHBsX1BMLklTTy04ODU5LTIKKytwb3J0dWd1ZXNlICAgICAgcHRfUFQuSVNPLTg4NTktMQorK3JvbWFuaWFuICAgICAgICByb19STy5JU08tODg1OS0yCisrcnVzc2lhbiAgICAgICAgIHJ1X1JVLklTTy04ODU5LTUKKytzbG92YWsgICAgICAgICAgc2tfU0suSVNPLTg4NTktMgorK3Nsb3ZlbmUgICAgICAgICBzbF9TSS5JU08tODg1OS0yCisrc2xvdmVuaWFuICAgICAgIHNsX1NJLklTTy04ODU5LTIKKytzcGFuaXNoICAgICAgICAgZXNfRVMuSVNPLTg4NTktMQorK3N3ZWRpc2ggICAgICAgICBzdl9TRS5JU08tODg1OS0xCisrdGhhaQkJdGhfVEguVElTLTYyMAorK3R1cmtpc2ggICAgICAgICB0cl9UUi5JU08tODg1OS05CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbG9jYWxlYWxpYXMuYwkxOTk4LTA0LTI2IDA5OjIyOjM3LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9sb2NhbGVhbGlhcy5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTA1NzI1Mjg4IC0wNDAwCitAQCAtMSwyMCArMSwyNyBAQAorLS8qIEhhbmRsZSBhbGlhc2VzIGZvciBsb2NhbGUgbmFtZXMKKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4sIDE5OTUuCisrLyogSGFuZGxlIGFsaWFzZXMgZm9yIGxvY2FsZSBuYW1lcy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysvKiBUZWxsIGdsaWJjJ3MgPHN0cmluZy5oPiB0byBwcm92aWRlIGEgcHJvdG90eXBlIGZvciBtZW1wY3B5KCkuCisrICAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4gYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlCisrICAgPGZlYXR1cmVzLmg+LCBhbmQgb25jZSA8ZmVhdHVyZXMuaD4gaGFzIGJlZW4gaW5jbHVkZWQsIGl0J3MgdG9vIGxhdGUuICAqLworKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjIGRlZmluZSBfR05VX1NPVVJDRSAgICAxCisrI2VuZGlmCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorQEAgLTIyLDU2ICsyOSw0NSBAQAorIAorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorKyNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9fX0ZTRVRMT0NLSU5HCisrIyBpbmNsdWRlIDxzdGRpb19leHQuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgCisgI2lmZGVmIF9fR05VQ19fCisrIyB1bmRlZiBhbGxvY2EKKyAjIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorICMgZGVmaW5lIEhBVkVfQUxMT0NBIDEKKyAjZWxzZQorLSMgaWYgZGVmaW5lZCBIQVZFX0FMTE9DQV9IIHx8IGRlZmluZWQgX0xJQkMKKy0jICBpbmNsdWRlIDxhbGxvY2EuaD4KKysjIGlmZGVmIF9NU0NfVkVSCisrIyAgaW5jbHVkZSA8bWFsbG9jLmg+CisrIyAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisgIyBlbHNlCistIyAgaWZkZWYgX0FJWAorLSAjcHJhZ21hIGFsbG9jYQorKyMgIGlmIGRlZmluZWQgSEFWRV9BTExPQ0FfSCB8fCBkZWZpbmVkIF9MSUJDCisrIyAgIGluY2x1ZGUgPGFsbG9jYS5oPgorICMgIGVsc2UKKy0jICAgaWZuZGVmIGFsbG9jYQorKyMgICBpZmRlZiBfQUlYCisrICNwcmFnbWEgYWxsb2NhCisrIyAgIGVsc2UKKysjICAgIGlmbmRlZiBhbGxvY2EKKyBjaGFyICphbGxvY2EgKCk7CisrIyAgICBlbmRpZgorICMgICBlbmRpZgorICMgIGVuZGlmCisgIyBlbmRpZgorICNlbmRpZgorIAorLSNpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzdGRsaWIuaD4KKy0jZWxzZQorLWNoYXIgKmdldGVudiAoKTsKKy0jIGlmZGVmIEhBVkVfTUFMTE9DX0gKKy0jICBpbmNsdWRlIDxtYWxsb2MuaD4KKy0jIGVsc2UKKy12b2lkIGZyZWUgKCk7CistIyBlbmRpZgorLSNlbmRpZgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisgCistI2lmIGRlZmluZWQgSEFWRV9TVFJJTkdfSCB8fCBkZWZpbmVkIF9MSUJDCistIyBpZm5kZWYgX0dOVV9TT1VSQ0UKKy0jICBkZWZpbmUgX0dOVV9TT1VSQ0UJMQorLSMgZW5kaWYKKy0jIGluY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorKworKyNpZiBFTkFCTEVfUkVMT0NBVEFCTEUKKysjIGluY2x1ZGUgInJlbG9jYXRhYmxlLmgiCisgI2Vsc2UKKy0jIGluY2x1ZGUgPHN0cmluZ3MuaD4KKy0jIGlmbmRlZiBtZW1jcHkKKy0jICBkZWZpbmUgbWVtY3B5KERzdCwgU3JjLCBOdW0pIGJjb3B5IChTcmMsIERzdCwgTnVtKQorLSMgZW5kaWYKKy0jZW5kaWYKKy0jaWYgIUhBVkVfU1RSQ0hSICYmICFkZWZpbmVkIF9MSUJDCistIyBpZm5kZWYgc3RyY2hyCistIyAgZGVmaW5lIHN0cmNociBpbmRleAorLSMgZW5kaWYKKysjIGRlZmluZSByZWxvY2F0ZShwYXRobmFtZSkgKHBhdGhuYW1lKQorICNlbmRpZgorIAorLSNpbmNsdWRlICJnZXR0ZXh0LmgiCistI2luY2x1ZGUgImdldHRleHRQLmgiCistCisgLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworIAorICNpZmRlZiBfTElCQworQEAgLTc5LDQzICs3NSw0OSBAQAorICAgIGJlY2F1c2Ugc29tZSBBTlNJIEMgZnVuY3Rpb25zIHdpbGwgcmVxdWlyZSBsaW5raW5nIHdpdGggdGhpcyBvYmplY3QKKyAgICBmaWxlIGFuZCB0aGUgbmFtZSBzcGFjZSBtdXN0IG5vdCBiZSBwb2xsdXRlZC4gICovCisgIyBkZWZpbmUgc3RyY2FzZWNtcCBfX3N0cmNhc2VjbXAKKysKKysjIGlmbmRlZiBtZW1wY3B5CisrIyAgZGVmaW5lIG1lbXBjcHkgX19tZW1wY3B5CisrIyBlbmRpZgorKyMgZGVmaW5lIEhBVkVfTUVNUENQWQkxCisrIyBkZWZpbmUgSEFWRV9fX0ZTRVRMT0NLSU5HCTEKKysKKysvKiBXZSBuZWVkIGxvY2tpbmcgaGVyZSBzaW5jZSB3ZSBjYW4gYmUgY2FsbGVkIGZyb20gZGlmZmVyZW50IHBsYWNlcy4gICovCisrIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorKworK19fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZCAoc3RhdGljLCBsb2NrKTsKKysjZW5kaWYKKysKKysjaWZuZGVmIGludGVybmFsX2Z1bmN0aW9uCisrIyBkZWZpbmUgaW50ZXJuYWxfZnVuY3Rpb24KKyAjZW5kaWYKKyAKKysvKiBTb21lIG9wdGltaXphdGlvbnMgZm9yIGdsaWJjLiAgKi8KKysjaWZkZWYgX0xJQkMKKysjIGRlZmluZSBGRU9GKGZwKQkJZmVvZl91bmxvY2tlZCAoZnApCisrIyBkZWZpbmUgRkdFVFMoYnVmLCBuLCBmcCkJZmdldHNfdW5sb2NrZWQgKGJ1ZiwgbiwgZnApCisrI2Vsc2UKKysjIGRlZmluZSBGRU9GKGZwKQkJZmVvZiAoZnApCisrIyBkZWZpbmUgRkdFVFMoYnVmLCBuLCBmcCkJZmdldHMgKGJ1ZiwgbiwgZnApCisrI2VuZGlmCisgCistLyogRm9yIHRob3NlIGxvb3Npbmcgc3lzdGVtcyB3aGljaCBkb24ndCBoYXZlIGBhbGxvY2EnIHdlIGhhdmUgdG8gYWRkCisrLyogRm9yIHRob3NlIGxvc2luZyBzeXN0ZW1zIHdoaWNoIGRvbid0IGhhdmUgYGFsbG9jYScgd2UgaGF2ZSB0byBhZGQKKyAgICBzb21lIGFkZGl0aW9uYWwgY29kZSBlbXVsYXRpbmcgaXQuICAqLworICNpZmRlZiBIQVZFX0FMTE9DQQorLS8qIE5vdGhpbmcgaGFzIHRvIGJlIGRvbmUuICAqLworLSMgZGVmaW5lIEFERF9CTE9DSyhsaXN0LCBhZGRyZXNzKSAvKiBub3RoaW5nICovCistIyBkZWZpbmUgRlJFRV9CTE9DS1MobGlzdCkgLyogbm90aGluZyAqLworKyMgZGVmaW5lIGZyZWVhKHApIC8qIG5vdGhpbmcgKi8KKyAjZWxzZQorLXN0cnVjdCBibG9ja19saXN0CisteworLSAgdm9pZCAqYWRkcmVzczsKKy0gIHN0cnVjdCBibG9ja19saXN0ICpuZXh0OworLX07CistIyBkZWZpbmUgQUREX0JMT0NLKGxpc3QsIGFkZHIpCQkJCQkJICAgICAgXAorLSAgZG8gewkJCQkJCQkJCSAgICAgIFwKKy0gICAgc3RydWN0IGJsb2NrX2xpc3QgKm5ld3AgPSAoc3RydWN0IGJsb2NrX2xpc3QgKikgbWFsbG9jIChzaXplb2YgKCpuZXdwKSk7ICBcCistICAgIC8qIElmIHdlIGNhbm5vdCBnZXQgYSBmcmVlIGJsb2NrIHdlIGNhbm5vdCBhZGQgdGhlIG5ldyBlbGVtZW50IHRvCSAgICAgIFwKKy0gICAgICAgdGhlIGxpc3QuICAqLwkJCQkJCQkgICAgICBcCistICAgIGlmIChuZXdwICE9IE5VTEwpIHsJCQkJCQkJICAgICAgXAorLSAgICAgIG5ld3AtPmFkZHJlc3MgPSAoYWRkcik7CQkJCQkJICAgICAgXAorLSAgICAgIG5ld3AtPm5leHQgPSAobGlzdCk7CQkJCQkJICAgICAgXAorLSAgICAgIChsaXN0KSA9IG5ld3A7CQkJCQkJCSAgICAgIFwKKy0gICAgfQkJCQkJCQkJCSAgICAgIFwKKy0gIH0gd2hpbGUgKDApCistIyBkZWZpbmUgRlJFRV9CTE9DS1MobGlzdCkJCQkJCQkgICAgICBcCistICBkbyB7CQkJCQkJCQkJICAgICAgXAorLSAgICB3aGlsZSAobGlzdCAhPSBOVUxMKSB7CQkJCQkJICAgICAgXAorLSAgICAgIHN0cnVjdCBibG9ja19saXN0ICpvbGQgPSBsaXN0OwkJCQkJICAgICAgXAorLSAgICAgIGxpc3QgPSBsaXN0LT5uZXh0OwkJCQkJCSAgICAgIFwKKy0gICAgICBmcmVlIChvbGQpOwkJCQkJCQkgICAgICBcCistICAgIH0JCQkJCQkJCQkgICAgICBcCistICB9IHdoaWxlICgwKQorLSMgdW5kZWYgYWxsb2NhCistIyBkZWZpbmUgYWxsb2NhKHNpemUpIChtYWxsb2MgKHNpemUpKQorLSNlbmRpZgkvKiBoYXZlIGFsbG9jYSAqLworKyMgZGVmaW5lIGFsbG9jYShuKSBtYWxsb2MgKG4pCisrIyBkZWZpbmUgZnJlZWEocCkgZnJlZSAocCkKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfTElCQ19SRUVOVFJBTlQgfHwgSEFWRV9ERUNMX0ZHRVRTX1VOTE9DS0VECisrIyB1bmRlZiBmZ2V0cworKyMgZGVmaW5lIGZnZXRzKGJ1ZiwgbGVuLCBzKSBmZ2V0c191bmxvY2tlZCAoYnVmLCBsZW4sIHMpCisrI2VuZGlmCisrI2lmIGRlZmluZWQgX0xJQkNfUkVFTlRSQU5UIHx8IEhBVkVfREVDTF9GRU9GX1VOTE9DS0VECisrIyB1bmRlZiBmZW9mCisrIyBkZWZpbmUgZmVvZihzKSBmZW9mX3VubG9ja2VkIChzKQorKyNlbmRpZgorIAorIAorIHN0cnVjdCBhbGlhc19tYXAKK0BAIC0xMjUsMjYgKzEyNyw0MSBAQAorIH07CisgCisgCistc3RhdGljIHN0cnVjdCBhbGlhc19tYXAgKm1hcDsKKy1zdGF0aWMgc2l6ZV90IG5tYXAgPSAwOworLXN0YXRpYyBzaXplX3QgbWF4bWFwID0gMDsKKysjaWZuZGVmIF9MSUJDCisrIyBkZWZpbmUgbGliY19mcmVlcmVzX3B0cihkZWNsKSBkZWNsCisrI2VuZGlmCisrCisrbGliY19mcmVlcmVzX3B0ciAoc3RhdGljIGNoYXIgKnN0cmluZ19zcGFjZSk7Cisrc3RhdGljIHNpemVfdCBzdHJpbmdfc3BhY2VfYWN0OworK3N0YXRpYyBzaXplX3Qgc3RyaW5nX3NwYWNlX21heDsKKytsaWJjX2ZyZWVyZXNfcHRyIChzdGF0aWMgc3RydWN0IGFsaWFzX21hcCAqbWFwKTsKKytzdGF0aWMgc2l6ZV90IG5tYXA7Cisrc3RhdGljIHNpemVfdCBtYXhtYXA7CisgCisgCisgLyogUHJvdG90eXBlcyBmb3IgbG9jYWwgZnVuY3Rpb25zLiAgKi8KKy1zdGF0aWMgc2l6ZV90IHJlYWRfYWxpYXNfZmlsZSBQQVJBTVMgKChjb25zdCBjaGFyICpmbmFtZSwgaW50IGZuYW1lX2xlbikpOworLXN0YXRpYyB2b2lkIGV4dGVuZF9hbGlhc190YWJsZSBQQVJBTVMgKCh2b2lkKSk7Cistc3RhdGljIGludCBhbGlhc19jb21wYXJlIFBBUkFNUyAoKGNvbnN0IHN0cnVjdCBhbGlhc19tYXAgKm1hcDEsCistCQkJCSAgY29uc3Qgc3RydWN0IGFsaWFzX21hcCAqbWFwMikpOworK3N0YXRpYyBzaXplX3QgcmVhZF9hbGlhc19maWxlIChjb25zdCBjaGFyICpmbmFtZSwgaW50IGZuYW1lX2xlbikKKysgICAgIGludGVybmFsX2Z1bmN0aW9uOworK3N0YXRpYyBpbnQgZXh0ZW5kX2FsaWFzX3RhYmxlICh2b2lkKTsKKytzdGF0aWMgaW50IGFsaWFzX2NvbXBhcmUgKGNvbnN0IHN0cnVjdCBhbGlhc19tYXAgKm1hcDEsCisrCQkJICBjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAyKTsKKyAKKyAKKyBjb25zdCBjaGFyICoKKy1fbmxfZXhwYW5kX2FsaWFzIChuYW1lKQorLSAgICBjb25zdCBjaGFyICpuYW1lOworK19ubF9leHBhbmRfYWxpYXMgKGNvbnN0IGNoYXIgKm5hbWUpCisgeworLSAgc3RhdGljIGNvbnN0IGNoYXIgKmxvY2FsZV9hbGlhc19wYXRoID0gTE9DQUxFX0FMSUFTX1BBVEg7CisrICBzdGF0aWMgY29uc3QgY2hhciAqbG9jYWxlX2FsaWFzX3BhdGg7CisgICBzdHJ1Y3QgYWxpYXNfbWFwICpyZXR2YWw7CisrICBjb25zdCBjaGFyICpyZXN1bHQgPSBOVUxMOworICAgc2l6ZV90IGFkZGVkOworIAorKyNpZmRlZiBfTElCQworKyAgX19saWJjX2xvY2tfbG9jayAobG9jayk7CisrI2VuZGlmCisrCisrICBpZiAobG9jYWxlX2FsaWFzX3BhdGggPT0gTlVMTCkKKysgICAgbG9jYWxlX2FsaWFzX3BhdGggPSBMT0NBTEVfQUxJQVNfUEFUSDsKKysKKyAgIGRvCisgICAgIHsKKyAgICAgICBzdHJ1Y3QgYWxpYXNfbWFwIGl0ZW07CitAQCAtMTU0LDE1ICsxNzEsMTggQEAKKyAgICAgICBpZiAobm1hcCA+IDApCisgCXJldHZhbCA9IChzdHJ1Y3QgYWxpYXNfbWFwICopIGJzZWFyY2ggKCZpdGVtLCBtYXAsIG5tYXAsCisgCQkJCQkgICAgICAgc2l6ZW9mIChzdHJ1Y3QgYWxpYXNfbWFwKSwKKy0JCQkJCSAgICAgICAoaW50ICgqKSBQQVJBTVMgKChjb25zdCB2b2lkICosCistCQkJCQkJCQkgY29uc3Qgdm9pZCAqKSkKKysJCQkJCSAgICAgICAoaW50ICgqKSAoY29uc3Qgdm9pZCAqLAorKwkJCQkJCQkgY29uc3Qgdm9pZCAqKQorIAkJCQkJCSkgYWxpYXNfY29tcGFyZSk7CisgICAgICAgZWxzZQorIAlyZXR2YWwgPSBOVUxMOworIAorICAgICAgIC8qIFdlIHJlYWxseSBmb3VuZCBhbiBhbGlhcy4gIFJldHVybiB0aGUgdmFsdWUuICAqLworICAgICAgIGlmIChyZXR2YWwgIT0gTlVMTCkKKy0JcmV0dXJuIHJldHZhbC0+dmFsdWU7CisrCXsKKysJICByZXN1bHQgPSByZXR2YWwtPnZhbHVlOworKwkgIGJyZWFrOworKwl9CisgCisgICAgICAgLyogUGVyaGFwcyB3ZSBjYW4gZmluZCBhbm90aGVyIGFsaWFzIGZpbGUuICAqLworICAgICAgIGFkZGVkID0gMDsKK0BAIC0xNzAsMTEgKzE5MCwxMiBAQAorIAl7CisgCSAgY29uc3QgY2hhciAqc3RhcnQ7CisgCistCSAgd2hpbGUgKGxvY2FsZV9hbGlhc19wYXRoWzBdID09ICc6JykKKysJICB3aGlsZSAobG9jYWxlX2FsaWFzX3BhdGhbMF0gPT0gUEFUSF9TRVBBUkFUT1IpCisgCSAgICArK2xvY2FsZV9hbGlhc19wYXRoOworIAkgIHN0YXJ0ID0gbG9jYWxlX2FsaWFzX3BhdGg7CisgCistCSAgd2hpbGUgKGxvY2FsZV9hbGlhc19wYXRoWzBdICE9ICdcMCcgJiYgbG9jYWxlX2FsaWFzX3BhdGhbMF0gIT0gJzonKQorKwkgIHdoaWxlIChsb2NhbGVfYWxpYXNfcGF0aFswXSAhPSAnXDAnCisrCQkgJiYgbG9jYWxlX2FsaWFzX3BhdGhbMF0gIT0gUEFUSF9TRVBBUkFUT1IpCisgCSAgICArK2xvY2FsZV9hbGlhc19wYXRoOworIAorIAkgIGlmIChzdGFydCA8IGxvY2FsZV9hbGlhc19wYXRoKQorQEAgLTE4Myw3OCArMjA0LDg3IEBACisgICAgIH0KKyAgIHdoaWxlIChhZGRlZCAhPSAwKTsKKyAKKy0gIHJldHVybiBOVUxMOworKyNpZmRlZiBfTElCQworKyAgX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKTsKKysjZW5kaWYKKysKKysgIHJldHVybiByZXN1bHQ7CisgfQorIAorIAorIHN0YXRpYyBzaXplX3QKKy1yZWFkX2FsaWFzX2ZpbGUgKGZuYW1lLCBmbmFtZV9sZW4pCistICAgICBjb25zdCBjaGFyICpmbmFtZTsKKy0gICAgIGludCBmbmFtZV9sZW47CisraW50ZXJuYWxfZnVuY3Rpb24KKytyZWFkX2FsaWFzX2ZpbGUgKGNvbnN0IGNoYXIgKmZuYW1lLCBpbnQgZm5hbWVfbGVuKQorIHsKKy0jaWZuZGVmIEhBVkVfQUxMT0NBCistICBzdHJ1Y3QgYmxvY2tfbGlzdCAqYmxvY2tfbGlzdCA9IE5VTEw7CistI2VuZGlmCisgICBGSUxFICpmcDsKKyAgIGNoYXIgKmZ1bGxfZm5hbWU7CisgICBzaXplX3QgYWRkZWQ7CisgICBzdGF0aWMgY29uc3QgY2hhciBhbGlhc2ZpbGVbXSA9ICIvbG9jYWxlLmFsaWFzIjsKKyAKKyAgIGZ1bGxfZm5hbWUgPSAoY2hhciAqKSBhbGxvY2EgKGZuYW1lX2xlbiArIHNpemVvZiBhbGlhc2ZpbGUpOworLSAgQUREX0JMT0NLIChibG9ja19saXN0LCBmdWxsX2ZuYW1lKTsKKysjaWZkZWYgSEFWRV9NRU1QQ1BZCisrICBtZW1wY3B5IChtZW1wY3B5IChmdWxsX2ZuYW1lLCBmbmFtZSwgZm5hbWVfbGVuKSwKKysJICAgYWxpYXNmaWxlLCBzaXplb2YgYWxpYXNmaWxlKTsKKysjZWxzZQorICAgbWVtY3B5IChmdWxsX2ZuYW1lLCBmbmFtZSwgZm5hbWVfbGVuKTsKKyAgIG1lbWNweSAoJmZ1bGxfZm5hbWVbZm5hbWVfbGVuXSwgYWxpYXNmaWxlLCBzaXplb2YgYWxpYXNmaWxlKTsKKysjZW5kaWYKKyAKKy0gIGZwID0gZm9wZW4gKGZ1bGxfZm5hbWUsICJyIik7CisrICBmcCA9IGZvcGVuIChyZWxvY2F0ZSAoZnVsbF9mbmFtZSksICJyIik7CisrICBmcmVlYSAoZnVsbF9mbmFtZSk7CisgICBpZiAoZnAgPT0gTlVMTCkKKy0gICAgeworLSAgICAgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKy0gICAgICByZXR1cm4gMDsKKy0gICAgfQorKyAgICByZXR1cm4gMDsKKysKKysjaWZkZWYgSEFWRV9fX0ZTRVRMT0NLSU5HCisrICAvKiBObyB0aHJlYWRzIHByZXNlbnQuICAqLworKyAgX19mc2V0bG9ja2luZyAoZnAsIEZTRVRMT0NLSU5HX0JZQ0FMTEVSKTsKKysjZW5kaWYKKyAKKyAgIGFkZGVkID0gMDsKKy0gIHdoaWxlICghZmVvZiAoZnApKQorKyAgd2hpbGUgKCFGRU9GIChmcCkpCisgICAgIHsKKyAgICAgICAvKiBJdCBpcyBhIHJlYXNvbmFibGUgYXBwcm9hY2ggdG8gdXNlIGEgZml4IGJ1ZmZlciBoZXJlIGJlY2F1c2UKKyAJIGEpIHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGZpcnN0IHR3byBmaWVsZHMKKyAJIGIpIHRoZXNlIGZpZWxkcyBtdXN0IGJlIHVzYWJsZSBhcyBmaWxlIG5hbWVzIGFuZCBzbyBtdXN0IG5vdAorIAkgICAgYmUgdGhhdCBsb25nCistICAgICAgICovCistICAgICAgY2hhciBidWZbQlVGU0laXTsKKysJIFdlIGF2b2lkIGEgbXVsdGkta2lsb2J5dGUgYnVmZmVyIGhlcmUgc2luY2UgdGhpcyB3b3VsZCB1c2UgdXAKKysJIHN0YWNrIHNwYWNlIHdoaWNoIHdlIG1pZ2h0IG5vdCBoYXZlIGlmIHRoZSBwcm9ncmFtIHJhbiBvdXQgb2YKKysJIG1lbW9yeS4gICovCisrICAgICAgY2hhciBidWZbNDAwXTsKKyAgICAgICBjaGFyICphbGlhczsKKyAgICAgICBjaGFyICp2YWx1ZTsKKyAgICAgICBjaGFyICpjcDsKKyAKKy0gICAgICBpZiAoZmdldHMgKGJ1ZiwgQlVGU0laLCBmcCkgPT0gTlVMTCkKKysgICAgICBpZiAoRkdFVFMgKGJ1Ziwgc2l6ZW9mIGJ1ZiwgZnApID09IE5VTEwpCisgCS8qIEVPRiByZWFjaGVkLiAgKi8KKyAJYnJlYWs7CisgCisgICAgICAgY3AgPSBidWY7CisgICAgICAgLyogSWdub3JlIGxlYWRpbmcgd2hpdGUgc3BhY2UuICAqLworLSAgICAgIHdoaWxlIChpc3NwYWNlIChjcFswXSkpCisrICAgICAgd2hpbGUgKGlzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSBjcFswXSkpCisgCSsrY3A7CisgCisgICAgICAgLyogQSBsZWFkaW5nICcjJyBzaWduYWxzIGEgY29tbWVudCBsaW5lLiAgKi8KKyAgICAgICBpZiAoY3BbMF0gIT0gJ1wwJyAmJiBjcFswXSAhPSAnIycpCisgCXsKKyAJICBhbGlhcyA9IGNwKys7CistCSAgd2hpbGUgKGNwWzBdICE9ICdcMCcgJiYgIWlzc3BhY2UgKGNwWzBdKSkKKysJICB3aGlsZSAoY3BbMF0gIT0gJ1wwJyAmJiAhaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIpIGNwWzBdKSkKKyAJICAgICsrY3A7CisgCSAgLyogVGVybWluYXRlIGFsaWFzIG5hbWUuICAqLworIAkgIGlmIChjcFswXSAhPSAnXDAnKQorIAkgICAgKmNwKysgPSAnXDAnOworIAorIAkgIC8qIE5vdyBsb29rIGZvciB0aGUgYmVnaW5uaW5nIG9mIHRoZSB2YWx1ZS4gICovCistCSAgd2hpbGUgKGlzc3BhY2UgKGNwWzBdKSkKKysJICB3aGlsZSAoaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIpIGNwWzBdKSkKKyAJICAgICsrY3A7CisgCisgCSAgaWYgKGNwWzBdICE9ICdcMCcpCisgCSAgICB7CistCSAgICAgIGNoYXIgKnRwOworLQkgICAgICBzaXplX3QgbGVuOworKwkgICAgICBzaXplX3QgYWxpYXNfbGVuOworKwkgICAgICBzaXplX3QgdmFsdWVfbGVuOworIAorIAkgICAgICB2YWx1ZSA9IGNwKys7CistCSAgICAgIHdoaWxlIChjcFswXSAhPSAnXDAnICYmICFpc3NwYWNlIChjcFswXSkpCisrCSAgICAgIHdoaWxlIChjcFswXSAhPSAnXDAnICYmICFpc3NwYWNlICgodW5zaWduZWQgY2hhcikgY3BbMF0pKQorIAkJKytjcDsKKyAJICAgICAgLyogVGVybWluYXRlIHZhbHVlLiAgKi8KKyAJICAgICAgaWYgKGNwWzBdID09ICdcbicpCitAQCAtMjY5LDI4ICsyOTksNDQgQEAKKyAJCSpjcCsrID0gJ1wwJzsKKyAKKyAJICAgICAgaWYgKG5tYXAgPj0gbWF4bWFwKQorLQkJZXh0ZW5kX2FsaWFzX3RhYmxlICgpOworLQorLQkgICAgICAvKiBXZSBjYW5ub3QgZGVwZW5kIG9uIHN0cmR1cCBhdmFpbGFibGUgaW4gdGhlIGxpYmMuICBTaWdoISAgKi8KKy0JICAgICAgbGVuID0gc3RybGVuIChhbGlhcykgKyAxOworLQkgICAgICB0cCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKy0JICAgICAgaWYgKHRwID09IE5VTEwpCistCQl7CistCQkgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKysJCWlmIChfX2J1aWx0aW5fZXhwZWN0IChleHRlbmRfYWxpYXNfdGFibGUgKCksIDApKQorIAkJICByZXR1cm4gYWRkZWQ7CistCQl9CistCSAgICAgIG1lbWNweSAodHAsIGFsaWFzLCBsZW4pOworLQkgICAgICBtYXBbbm1hcF0uYWxpYXMgPSB0cDsKKyAKKy0JICAgICAgbGVuID0gc3RybGVuICh2YWx1ZSkgKyAxOworLQkgICAgICB0cCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKy0JICAgICAgaWYgKHRwID09IE5VTEwpCisrCSAgICAgIGFsaWFzX2xlbiA9IHN0cmxlbiAoYWxpYXMpICsgMTsKKysJICAgICAgdmFsdWVfbGVuID0gc3RybGVuICh2YWx1ZSkgKyAxOworKworKwkgICAgICBpZiAoc3RyaW5nX3NwYWNlX2FjdCArIGFsaWFzX2xlbiArIHZhbHVlX2xlbiA+IHN0cmluZ19zcGFjZV9tYXgpCisgCQl7CistCQkgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKy0JCSAgcmV0dXJuIGFkZGVkOworKwkJICAvKiBJbmNyZWFzZSBzaXplIG9mIG1lbW9yeSBwb29sLiAgKi8KKysJCSAgc2l6ZV90IG5ld19zaXplID0gKHN0cmluZ19zcGFjZV9tYXgKKysJCQkJICAgICArIChhbGlhc19sZW4gKyB2YWx1ZV9sZW4gPiAxMDI0CisrCQkJCQk/IGFsaWFzX2xlbiArIHZhbHVlX2xlbiA6IDEwMjQpKTsKKysJCSAgY2hhciAqbmV3X3Bvb2wgPSAoY2hhciAqKSByZWFsbG9jIChzdHJpbmdfc3BhY2UsIG5ld19zaXplKTsKKysJCSAgaWYgKG5ld19wb29sID09IE5VTEwpCisrCQkgICAgcmV0dXJuIGFkZGVkOworKworKwkJICBpZiAoX19idWlsdGluX2V4cGVjdCAoc3RyaW5nX3NwYWNlICE9IG5ld19wb29sLCAwKSkKKysJCSAgICB7CisrCQkgICAgICBzaXplX3QgaTsKKysKKysJCSAgICAgIGZvciAoaSA9IDA7IGkgPCBubWFwOyBpKyspCisrCQkJeworKwkJCSAgbWFwW2ldLmFsaWFzICs9IG5ld19wb29sIC0gc3RyaW5nX3NwYWNlOworKwkJCSAgbWFwW2ldLnZhbHVlICs9IG5ld19wb29sIC0gc3RyaW5nX3NwYWNlOworKwkJCX0KKysJCSAgICB9CisrCisrCQkgIHN0cmluZ19zcGFjZSA9IG5ld19wb29sOworKwkJICBzdHJpbmdfc3BhY2VfbWF4ID0gbmV3X3NpemU7CisgCQl9CistCSAgICAgIG1lbWNweSAodHAsIHZhbHVlLCBsZW4pOworLQkgICAgICBtYXBbbm1hcF0udmFsdWUgPSB0cDsKKysKKysJICAgICAgbWFwW25tYXBdLmFsaWFzID0gbWVtY3B5ICgmc3RyaW5nX3NwYWNlW3N0cmluZ19zcGFjZV9hY3RdLAorKwkJCQkJYWxpYXMsIGFsaWFzX2xlbik7CisrCSAgICAgIHN0cmluZ19zcGFjZV9hY3QgKz0gYWxpYXNfbGVuOworKworKwkgICAgICBtYXBbbm1hcF0udmFsdWUgPSBtZW1jcHkgKCZzdHJpbmdfc3BhY2Vbc3RyaW5nX3NwYWNlX2FjdF0sCisrCQkJCQl2YWx1ZSwgdmFsdWVfbGVuKTsKKysJICAgICAgc3RyaW5nX3NwYWNlX2FjdCArPSB2YWx1ZV9sZW47CisgCisgCSAgICAgICsrbm1hcDsKKyAJICAgICAgKythZGRlZDsKK0BAIC0yOTksMTQgKzM0NSwxMSBAQAorIAorICAgICAgIC8qIFBvc3NpYmx5IG5vdCB0aGUgd2hvbGUgbGluZSBmaXRzIGludG8gdGhlIGJ1ZmZlci4gIElnbm9yZQorIAkgdGhlIHJlc3Qgb2YgdGhlIGxpbmUuICAqLworLSAgICAgIHdoaWxlIChzdHJjaHIgKGNwLCAnXG4nKSA9PSBOVUxMKQorLQl7CistCSAgY3AgPSBidWY7CistCSAgaWYgKGZnZXRzIChidWYsIEJVRlNJWiwgZnApID09IE5VTEwpCistCSAgICAvKiBNYWtlIHN1cmUgdGhlIGlubmVyIGxvb3Agd2lsbCBiZSBsZWZ0LiAgVGhlIG91dGVyIGxvb3AKKy0JICAgICAgIHdpbGwgZXhpdCBhdCB0aGUgYGZlb2YnIHRlc3QuICAqLworLQkgICAgKmNwID0gJ1xuJzsKKy0JfQorKyAgICAgIHdoaWxlIChzdHJjaHIgKGJ1ZiwgJ1xuJykgPT0gTlVMTCkKKysJaWYgKEZHRVRTIChidWYsIHNpemVvZiBidWYsIGZwKSA9PSBOVUxMKQorKwkgIC8qIE1ha2Ugc3VyZSB0aGUgaW5uZXIgbG9vcCB3aWxsIGJlIGxlZnQuICBUaGUgb3V0ZXIgbG9vcAorKwkgICAgIHdpbGwgZXhpdCBhdCB0aGUgYGZlb2YnIHRlc3QuICAqLworKwkgIGJyZWFrOworICAgICB9CisgCisgICAvKiBTaG91bGQgd2UgdGVzdCBmb3IgZmVycm9yKCk/ICBJIHRoaW5rIHdlIGhhdmUgdG8gc2lsZW50bHkgaWdub3JlCitAQCAtMzE1LDQwICszNTgsMzMgQEAKKyAKKyAgIGlmIChhZGRlZCA+IDApCisgICAgIHFzb3J0IChtYXAsIG5tYXAsIHNpemVvZiAoc3RydWN0IGFsaWFzX21hcCksCistCSAgIChpbnQgKCopIFBBUkFNUyAoKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSkpIGFsaWFzX2NvbXBhcmUpOworKwkgICAoaW50ICgqKSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKSBhbGlhc19jb21wYXJlKTsKKyAKKy0gIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKyAgIHJldHVybiBhZGRlZDsKKyB9CisgCisgCistc3RhdGljIHZvaWQKKytzdGF0aWMgaW50CisgZXh0ZW5kX2FsaWFzX3RhYmxlICgpCisgeworICAgc2l6ZV90IG5ld19zaXplOworICAgc3RydWN0IGFsaWFzX21hcCAqbmV3X21hcDsKKyAKKyAgIG5ld19zaXplID0gbWF4bWFwID09IDAgPyAxMDAgOiAyICogbWF4bWFwOworLSAgbmV3X21hcCA9IChzdHJ1Y3QgYWxpYXNfbWFwICopIG1hbGxvYyAobmV3X3NpemUKKy0JCQkJCSAqIHNpemVvZiAoc3RydWN0IGFsaWFzX21hcCkpOworKyAgbmV3X21hcCA9IChzdHJ1Y3QgYWxpYXNfbWFwICopIHJlYWxsb2MgKG1hcCwgKG5ld19zaXplCisrCQkJCQkJKiBzaXplb2YgKHN0cnVjdCBhbGlhc19tYXApKSk7CisgICBpZiAobmV3X21hcCA9PSBOVUxMKQorICAgICAvKiBTaW1wbHkgZG9uJ3QgZXh0ZW5kOiB3ZSBkb24ndCBoYXZlIGFueSBtb3JlIGNvcmUuICAqLworLSAgICByZXR1cm47CistCistICBtZW1jcHkgKG5ld19tYXAsIG1hcCwgbm1hcCAqIHNpemVvZiAoc3RydWN0IGFsaWFzX21hcCkpOworLQorLSAgaWYgKG1heG1hcCAhPSAwKQorLSAgICBmcmVlIChtYXApOworKyAgICByZXR1cm4gLTE7CisgCisgICBtYXAgPSBuZXdfbWFwOworICAgbWF4bWFwID0gbmV3X3NpemU7CisrICByZXR1cm4gMDsKKyB9CisgCisgCisgc3RhdGljIGludAorLWFsaWFzX2NvbXBhcmUgKG1hcDEsIG1hcDIpCistICAgICBjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAxOworLSAgICAgY29uc3Qgc3RydWN0IGFsaWFzX21hcCAqbWFwMjsKKythbGlhc19jb21wYXJlIChjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAxLCBjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAyKQorIHsKKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSQ0FTRUNNUAorICAgcmV0dXJuIHN0cmNhc2VjbXAgKG1hcDEtPmFsaWFzLCBtYXAyLT5hbGlhcyk7CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbG9jYWxlbmFtZS5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xvY2FsZW5hbWUuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjUxMDcyNDUyOCAtMDQwMAorQEAgLTAsMCArMSwxMTQyIEBACisrLyogRGV0ZXJtaW5lIHRoZSBjdXJyZW50IHNlbGVjdGVkIGxvY2FsZS4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysvKiBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5vcmc+LCAxOTk1LiAgKi8KKysvKiBXaW4zMiBjb2RlIHdyaXR0ZW4gYnkgVG9yIExpbGxxdmlzdCA8dG1sQGlraS5maT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGxvY2FsZS5oPgorKworKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXworKyMgdW5kZWYgV0lOMzIgICAvKiBhdm9pZCB3YXJuaW5nIG9uIG1pbmd3MzIgKi8KKysjIGRlZmluZSBXSU4zMgorKyNlbmRpZgorKworKyNpZmRlZiBXSU4zMgorKyMgZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKysjIGluY2x1ZGUgPHdpbmRvd3MuaD4KKysvKiBMaXN0IG9mIGxhbmd1YWdlIGNvZGVzLCBzb3J0ZWQgYnkgdmFsdWU6CisrICAgMHgwMSBMQU5HX0FSQUJJQworKyAgIDB4MDIgTEFOR19CVUxHQVJJQU4KKysgICAweDAzIExBTkdfQ0FUQUxBTgorKyAgIDB4MDQgTEFOR19DSElORVNFCisrICAgMHgwNSBMQU5HX0NaRUNICisrICAgMHgwNiBMQU5HX0RBTklTSAorKyAgIDB4MDcgTEFOR19HRVJNQU4KKysgICAweDA4IExBTkdfR1JFRUsKKysgICAweDA5IExBTkdfRU5HTElTSAorKyAgIDB4MGEgTEFOR19TUEFOSVNICisrICAgMHgwYiBMQU5HX0ZJTk5JU0gKKysgICAweDBjIExBTkdfRlJFTkNICisrICAgMHgwZCBMQU5HX0hFQlJFVworKyAgIDB4MGUgTEFOR19IVU5HQVJJQU4KKysgICAweDBmIExBTkdfSUNFTEFORElDCisrICAgMHgxMCBMQU5HX0lUQUxJQU4KKysgICAweDExIExBTkdfSkFQQU5FU0UKKysgICAweDEyIExBTkdfS09SRUFOCisrICAgMHgxMyBMQU5HX0RVVENICisrICAgMHgxNCBMQU5HX05PUldFR0lBTgorKyAgIDB4MTUgTEFOR19QT0xJU0gKKysgICAweDE2IExBTkdfUE9SVFVHVUVTRQorKyAgIDB4MTcgTEFOR19SSEFFVE9fUk9NQU5DRQorKyAgIDB4MTggTEFOR19ST01BTklBTgorKyAgIDB4MTkgTEFOR19SVVNTSUFOCisrICAgMHgxYSBMQU5HX0NST0FUSUFOID09IExBTkdfU0VSQklBTgorKyAgIDB4MWIgTEFOR19TTE9WQUsKKysgICAweDFjIExBTkdfQUxCQU5JQU4KKysgICAweDFkIExBTkdfU1dFRElTSAorKyAgIDB4MWUgTEFOR19USEFJCisrICAgMHgxZiBMQU5HX1RVUktJU0gKKysgICAweDIwIExBTkdfVVJEVQorKyAgIDB4MjEgTEFOR19JTkRPTkVTSUFOCisrICAgMHgyMiBMQU5HX1VLUkFJTklBTgorKyAgIDB4MjMgTEFOR19CRUxBUlVTSUFOCisrICAgMHgyNCBMQU5HX1NMT1ZFTklBTgorKyAgIDB4MjUgTEFOR19FU1RPTklBTgorKyAgIDB4MjYgTEFOR19MQVRWSUFOCisrICAgMHgyNyBMQU5HX0xJVEhVQU5JQU4KKysgICAweDI4IExBTkdfVEFKSUsKKysgICAweDI5IExBTkdfRkFSU0kKKysgICAweDJhIExBTkdfVklFVE5BTUVTRQorKyAgIDB4MmIgTEFOR19BUk1FTklBTgorKyAgIDB4MmMgTEFOR19BWkVSSQorKyAgIDB4MmQgTEFOR19CQVNRVUUKKysgICAweDJlIExBTkdfU09SQklBTgorKyAgIDB4MmYgTEFOR19NQUNFRE9OSUFOCisrICAgMHgzMCBMQU5HX1NVVFUKKysgICAweDMxIExBTkdfVFNPTkdBCisrICAgMHgzMiBMQU5HX1RTV0FOQQorKyAgIDB4MzMgTEFOR19WRU5EQQorKyAgIDB4MzQgTEFOR19YSE9TQQorKyAgIDB4MzUgTEFOR19aVUxVCisrICAgMHgzNiBMQU5HX0FGUklLQUFOUworKyAgIDB4MzcgTEFOR19HRU9SR0lBTgorKyAgIDB4MzggTEFOR19GQUVST0VTRQorKyAgIDB4MzkgTEFOR19ISU5ESQorKyAgIDB4M2EgTEFOR19NQUxURVNFCisrICAgMHgzYiBMQU5HX1NBQU1JCisrICAgMHgzYyBMQU5HX0dBRUxJQworKyAgIDB4M2QgTEFOR19ZSURESVNICisrICAgMHgzZSBMQU5HX01BTEFZCisrICAgMHgzZiBMQU5HX0tBWkFLCisrICAgMHg0MCBMQU5HX0tZUkdZWgorKyAgIDB4NDEgTEFOR19TV0FISUxJCisrICAgMHg0MiBMQU5HX1RVUktNRU4KKysgICAweDQzIExBTkdfVVpCRUsKKysgICAweDQ0IExBTkdfVEFUQVIKKysgICAweDQ1IExBTkdfQkVOR0FMSQorKyAgIDB4NDYgTEFOR19QVU5KQUJJCisrICAgMHg0NyBMQU5HX0dVSkFSQVRJCisrICAgMHg0OCBMQU5HX09SSVlBCisrICAgMHg0OSBMQU5HX1RBTUlMCisrICAgMHg0YSBMQU5HX1RFTFVHVQorKyAgIDB4NGIgTEFOR19LQU5OQURBCisrICAgMHg0YyBMQU5HX01BTEFZQUxBTQorKyAgIDB4NGQgTEFOR19BU1NBTUVTRQorKyAgIDB4NGUgTEFOR19NQVJBVEhJCisrICAgMHg0ZiBMQU5HX1NBTlNLUklUCisrICAgMHg1MCBMQU5HX01PTkdPTElBTgorKyAgIDB4NTEgTEFOR19USUJFVEFOCisrICAgMHg1MiBMQU5HX1dFTFNICisrICAgMHg1MyBMQU5HX0NBTUJPRElBTgorKyAgIDB4NTQgTEFOR19MQU8KKysgICAweDU1IExBTkdfQlVSTUVTRQorKyAgIDB4NTYgTEFOR19HQUxJQ0lBTgorKyAgIDB4NTcgTEFOR19LT05LQU5JCisrICAgMHg1OCBMQU5HX01BTklQVVJJCisrICAgMHg1OSBMQU5HX1NJTkRISQorKyAgIDB4NWEgTEFOR19TWVJJQUMKKysgICAweDViIExBTkdfU0lOSEFMRVNFCisrICAgMHg1YyBMQU5HX0NIRVJPS0VFCisrICAgMHg1ZCBMQU5HX0lOVUtUSVRVVAorKyAgIDB4NWUgTEFOR19BTUhBUklDCisrICAgMHg1ZiBMQU5HX1RBTUFaSUdIVAorKyAgIDB4NjAgTEFOR19LQVNITUlSSQorKyAgIDB4NjEgTEFOR19ORVBBTEkKKysgICAweDYyIExBTkdfRlJJU0lBTgorKyAgIDB4NjMgTEFOR19QQVNIVE8KKysgICAweDY0IExBTkdfVEFHQUxPRworKyAgIDB4NjUgTEFOR19ESVZFSEkKKysgICAweDY2IExBTkdfRURPCisrICAgMHg2NyBMQU5HX0ZVTEZVTERFCisrICAgMHg2OCBMQU5HX0hBVVNBCisrICAgMHg2OSBMQU5HX0lCSUJJTworKyAgIDB4NmEgTEFOR19ZT1JVQkEKKysgICAweDcwIExBTkdfSUdCTworKyAgIDB4NzEgTEFOR19LQU5VUkkKKysgICAweDcyIExBTkdfT1JPTU8KKysgICAweDczIExBTkdfVElHUklOWUEKKysgICAweDc0IExBTkdfR1VBUkFOSQorKyAgIDB4NzUgTEFOR19IQVdBSUlBTgorKyAgIDB4NzYgTEFOR19MQVRJTgorKyAgIDB4NzcgTEFOR19TT01BTEkKKysgICAweDc4IExBTkdfWUkKKysgICAweDc5IExBTkdfUEFQSUFNRU5UVQorKyovCisrLyogTWluZ3cgaGVhZGVycyBkb24ndCBoYXZlIGxhdGVzdCBsYW5ndWFnZSBhbmQgc3VibGFuZ3VhZ2UgY29kZXMuICAqLworKyMgaWZuZGVmIExBTkdfQUZSSUtBQU5TCisrIyBkZWZpbmUgTEFOR19BRlJJS0FBTlMgMHgzNgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0FMQkFOSUFOCisrIyBkZWZpbmUgTEFOR19BTEJBTklBTiAweDFjCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQU1IQVJJQworKyMgZGVmaW5lIExBTkdfQU1IQVJJQyAweDVlCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQVJBQklDCisrIyBkZWZpbmUgTEFOR19BUkFCSUMgMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0FSTUVOSUFOCisrIyBkZWZpbmUgTEFOR19BUk1FTklBTiAweDJiCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQVNTQU1FU0UKKysjIGRlZmluZSBMQU5HX0FTU0FNRVNFIDB4NGQKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19BWkVSSQorKyMgZGVmaW5lIExBTkdfQVpFUkkgMHgyYworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0JBU1FVRQorKyMgZGVmaW5lIExBTkdfQkFTUVVFIDB4MmQKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19CRUxBUlVTSUFOCisrIyBkZWZpbmUgTEFOR19CRUxBUlVTSUFOIDB4MjMKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19CRU5HQUxJCisrIyBkZWZpbmUgTEFOR19CRU5HQUxJIDB4NDUKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19CVVJNRVNFCisrIyBkZWZpbmUgTEFOR19CVVJNRVNFIDB4NTUKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19DQU1CT0RJQU4KKysjIGRlZmluZSBMQU5HX0NBTUJPRElBTiAweDUzCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQ0FUQUxBTgorKyMgZGVmaW5lIExBTkdfQ0FUQUxBTiAweDAzCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQ0hFUk9LRUUKKysjIGRlZmluZSBMQU5HX0NIRVJPS0VFIDB4NWMKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19ESVZFSEkKKysjIGRlZmluZSBMQU5HX0RJVkVISSAweDY1CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfRURPCisrIyBkZWZpbmUgTEFOR19FRE8gMHg2NgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0VTVE9OSUFOCisrIyBkZWZpbmUgTEFOR19FU1RPTklBTiAweDI1CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfRkFFUk9FU0UKKysjIGRlZmluZSBMQU5HX0ZBRVJPRVNFIDB4MzgKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19GQVJTSQorKyMgZGVmaW5lIExBTkdfRkFSU0kgMHgyOQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0ZSSVNJQU4KKysjIGRlZmluZSBMQU5HX0ZSSVNJQU4gMHg2MgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0ZVTEZVTERFCisrIyBkZWZpbmUgTEFOR19GVUxGVUxERSAweDY3CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfR0FFTElDCisrIyBkZWZpbmUgTEFOR19HQUVMSUMgMHgzYworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0dBTElDSUFOCisrIyBkZWZpbmUgTEFOR19HQUxJQ0lBTiAweDU2CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfR0VPUkdJQU4KKysjIGRlZmluZSBMQU5HX0dFT1JHSUFOIDB4MzcKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19HVUFSQU5JCisrIyBkZWZpbmUgTEFOR19HVUFSQU5JIDB4NzQKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19HVUpBUkFUSQorKyMgZGVmaW5lIExBTkdfR1VKQVJBVEkgMHg0NworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0hBVVNBCisrIyBkZWZpbmUgTEFOR19IQVVTQSAweDY4CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfSEFXQUlJQU4KKysjIGRlZmluZSBMQU5HX0hBV0FJSUFOIDB4NzUKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19IRUJSRVcKKysjIGRlZmluZSBMQU5HX0hFQlJFVyAweDBkCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfSElOREkKKysjIGRlZmluZSBMQU5HX0hJTkRJIDB4MzkKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19JQklCSU8KKysjIGRlZmluZSBMQU5HX0lCSUJJTyAweDY5CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfSUdCTworKyMgZGVmaW5lIExBTkdfSUdCTyAweDcwCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfSU5ET05FU0lBTgorKyMgZGVmaW5lIExBTkdfSU5ET05FU0lBTiAweDIxCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfSU5VS1RJVFVUCisrIyBkZWZpbmUgTEFOR19JTlVLVElUVVQgMHg1ZAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0tBTk5BREEKKysjIGRlZmluZSBMQU5HX0tBTk5BREEgMHg0YgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0tBTlVSSQorKyMgZGVmaW5lIExBTkdfS0FOVVJJIDB4NzEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19LQVNITUlSSQorKyMgZGVmaW5lIExBTkdfS0FTSE1JUkkgMHg2MAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0tBWkFLCisrIyBkZWZpbmUgTEFOR19LQVpBSyAweDNmCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfS09OS0FOSQorKyMgZGVmaW5lIExBTkdfS09OS0FOSSAweDU3CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfS1lSR1laCisrIyBkZWZpbmUgTEFOR19LWVJHWVogMHg0MAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0xBTworKyMgZGVmaW5lIExBTkdfTEFPIDB4NTQKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19MQVRJTgorKyMgZGVmaW5lIExBTkdfTEFUSU4gMHg3NgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0xBVFZJQU4KKysjIGRlZmluZSBMQU5HX0xBVFZJQU4gMHgyNgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0xJVEhVQU5JQU4KKysjIGRlZmluZSBMQU5HX0xJVEhVQU5JQU4gMHgyNworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX01BQ0VET05JQU4KKysjIGRlZmluZSBMQU5HX01BQ0VET05JQU4gMHgyZgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX01BTEFZCisrIyBkZWZpbmUgTEFOR19NQUxBWSAweDNlCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfTUFMQVlBTEFNCisrIyBkZWZpbmUgTEFOR19NQUxBWUFMQU0gMHg0YworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX01BTFRFU0UKKysjIGRlZmluZSBMQU5HX01BTFRFU0UgMHgzYQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX01BTklQVVJJCisrIyBkZWZpbmUgTEFOR19NQU5JUFVSSSAweDU4CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfTUFSQVRISQorKyMgZGVmaW5lIExBTkdfTUFSQVRISSAweDRlCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfTU9OR09MSUFOCisrIyBkZWZpbmUgTEFOR19NT05HT0xJQU4gMHg1MAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX05FUEFMSQorKyMgZGVmaW5lIExBTkdfTkVQQUxJIDB4NjEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19PUklZQQorKyMgZGVmaW5lIExBTkdfT1JJWUEgMHg0OAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX09ST01PCisrIyBkZWZpbmUgTEFOR19PUk9NTyAweDcyCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfUEFQSUFNRU5UVQorKyMgZGVmaW5lIExBTkdfUEFQSUFNRU5UVSAweDc5CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfUEFTSFRPCisrIyBkZWZpbmUgTEFOR19QQVNIVE8gMHg2MworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1BVTkpBQkkKKysjIGRlZmluZSBMQU5HX1BVTkpBQkkgMHg0NgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1JIQUVUT19ST01BTkNFCisrIyBkZWZpbmUgTEFOR19SSEFFVE9fUk9NQU5DRSAweDE3CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfU0FBTUkKKysjIGRlZmluZSBMQU5HX1NBQU1JIDB4M2IKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TQU5TS1JJVAorKyMgZGVmaW5lIExBTkdfU0FOU0tSSVQgMHg0ZgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1NFUkJJQU4KKysjIGRlZmluZSBMQU5HX1NFUkJJQU4gMHgxYQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1NJTkRISQorKyMgZGVmaW5lIExBTkdfU0lOREhJIDB4NTkKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TSU5IQUxFU0UKKysjIGRlZmluZSBMQU5HX1NJTkhBTEVTRSAweDViCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfU0xPVkFLCisrIyBkZWZpbmUgTEFOR19TTE9WQUsgMHgxYgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1NPTUFMSQorKyMgZGVmaW5lIExBTkdfU09NQUxJIDB4NzcKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TT1JCSUFOCisrIyBkZWZpbmUgTEFOR19TT1JCSUFOIDB4MmUKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TVVRVCisrIyBkZWZpbmUgTEFOR19TVVRVIDB4MzAKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TV0FISUxJCisrIyBkZWZpbmUgTEFOR19TV0FISUxJIDB4NDEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TWVJJQUMKKysjIGRlZmluZSBMQU5HX1NZUklBQyAweDVhCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVEFHQUxPRworKyMgZGVmaW5lIExBTkdfVEFHQUxPRyAweDY0CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVEFKSUsKKysjIGRlZmluZSBMQU5HX1RBSklLIDB4MjgKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19UQU1BWklHSFQKKysjIGRlZmluZSBMQU5HX1RBTUFaSUdIVCAweDVmCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVEFNSUwKKysjIGRlZmluZSBMQU5HX1RBTUlMIDB4NDkKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19UQVRBUgorKyMgZGVmaW5lIExBTkdfVEFUQVIgMHg0NAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1RFTFVHVQorKyMgZGVmaW5lIExBTkdfVEVMVUdVIDB4NGEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19USEFJCisrIyBkZWZpbmUgTEFOR19USEFJIDB4MWUKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19USUJFVEFOCisrIyBkZWZpbmUgTEFOR19USUJFVEFOIDB4NTEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19USUdSSU5ZQQorKyMgZGVmaW5lIExBTkdfVElHUklOWUEgMHg3MworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1RTT05HQQorKyMgZGVmaW5lIExBTkdfVFNPTkdBIDB4MzEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19UU1dBTkEKKysjIGRlZmluZSBMQU5HX1RTV0FOQSAweDMyCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVFVSS01FTgorKyMgZGVmaW5lIExBTkdfVFVSS01FTiAweDQyCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVUtSQUlOSUFOCisrIyBkZWZpbmUgTEFOR19VS1JBSU5JQU4gMHgyMgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1VSRFUKKysjIGRlZmluZSBMQU5HX1VSRFUgMHgyMAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1VaQkVLCisrIyBkZWZpbmUgTEFOR19VWkJFSyAweDQzCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVkVOREEKKysjIGRlZmluZSBMQU5HX1ZFTkRBIDB4MzMKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19WSUVUTkFNRVNFCisrIyBkZWZpbmUgTEFOR19WSUVUTkFNRVNFIDB4MmEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19XRUxTSAorKyMgZGVmaW5lIExBTkdfV0VMU0ggMHg1MgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1hIT1NBCisrIyBkZWZpbmUgTEFOR19YSE9TQSAweDM0CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfWUkKKysjIGRlZmluZSBMQU5HX1lJIDB4NzgKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19ZSURESVNICisrIyBkZWZpbmUgTEFOR19ZSURESVNIIDB4M2QKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19ZT1JVQkEKKysjIGRlZmluZSBMQU5HX1lPUlVCQSAweDZhCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfWlVMVQorKyMgZGVmaW5lIExBTkdfWlVMVSAweDM1CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX1NBVURJX0FSQUJJQQorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX1NBVURJX0FSQUJJQSAweDAxCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX0lSQVEKKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19JUkFRIDB4MDIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfRUdZUFQKKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19FR1lQVCAweDAzCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX0xJQllBCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfTElCWUEgMHgwNAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19BTEdFUklBCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfQUxHRVJJQSAweDA1CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX01PUk9DQ08KKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19NT1JPQ0NPIDB4MDYKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfVFVOSVNJQQorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX1RVTklTSUEgMHgwNworKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19PTUFOCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfT01BTiAweDA4CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX1lFTUVOCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfWUVNRU4gMHgwOQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19TWVJJQQorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX1NZUklBIDB4MGEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfSk9SREFOCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfSk9SREFOIDB4MGIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfTEVCQU5PTgorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX0xFQkFOT04gMHgwYworKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19LVVdBSVQKKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19LVVdBSVQgMHgwZAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19VQUUKKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19VQUUgMHgwZQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19CQUhSQUlOCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfQkFIUkFJTiAweDBmCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX1FBVEFSCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfUUFUQVIgMHgxMAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FaRVJJX0xBVElOCisrIyBkZWZpbmUgU1VCTEFOR19BWkVSSV9MQVRJTiAweDAxCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVpFUklfQ1lSSUxMSUMKKysjIGRlZmluZSBTVUJMQU5HX0FaRVJJX0NZUklMTElDIDB4MDIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19CRU5HQUxJX0lORElBCisrIyBkZWZpbmUgU1VCTEFOR19CRU5HQUxJX0lORElBIDB4MDAKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19CRU5HQUxJX0JBTkdMQURFU0gKKysjIGRlZmluZSBTVUJMQU5HX0JFTkdBTElfQkFOR0xBREVTSCAweDAxCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQ0hJTkVTRV9NQUNBVQorKyMgZGVmaW5lIFNVQkxBTkdfQ0hJTkVTRV9NQUNBVSAweDA1CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9TT1VUSF9BRlJJQ0EKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfU09VVEhfQUZSSUNBIDB4MDcKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX0pBTUFJQ0EKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfSkFNQUlDQSAweDA4CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9DQVJJQkJFQU4KKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfQ0FSSUJCRUFOIDB4MDkKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX0JFTElaRQorKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9CRUxJWkUgMHgwYQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfVFJJTklEQUQKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfVFJJTklEQUQgMHgwYgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfWklNQkFCV0UKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfWklNQkFCV0UgMHgwYworKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfUEhJTElQUElORVMKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfUEhJTElQUElORVMgMHgwZAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfSU5ET05FU0lBCisrIyBkZWZpbmUgU1VCTEFOR19FTkdMSVNIX0lORE9ORVNJQSAweDBlCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9IT05HS09ORworKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9IT05HS09ORyAweDBmCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9JTkRJQQorKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9JTkRJQSAweDEwCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9NQUxBWVNJQQorKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9NQUxBWVNJQSAweDExCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9TSU5HQVBPUkUKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfU0lOR0FQT1JFIDB4MTIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfTFVYRU1CT1VSRworKyMgZGVmaW5lIFNVQkxBTkdfRlJFTkNIX0xVWEVNQk9VUkcgMHgwNQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9NT05BQ08KKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9NT05BQ08gMHgwNgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9XRVNUSU5ESUVTCisrIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfV0VTVElORElFUyAweDA3CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX1JFVU5JT04KKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9SRVVOSU9OIDB4MDgKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfQ09OR08KKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9DT05HTyAweDA5CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX1NFTkVHQUwKKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9TRU5FR0FMIDB4MGEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfQ0FNRVJPT04KKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9DQU1FUk9PTiAweDBiCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX0NPVEVESVZPSVJFCisrIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfQ09URURJVk9JUkUgMHgwYworKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9NQUxJCisrIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfTUFMSSAweDBkCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX01PUk9DQ08KKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9NT1JPQ0NPIDB4MGUKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfSEFJVEkKKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9IQUlUSSAweDBmCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfR0VSTUFOX0xVWEVNQk9VUkcKKysjIGRlZmluZSBTVUJMQU5HX0dFUk1BTl9MVVhFTUJPVVJHIDB4MDQKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19HRVJNQU5fTElFQ0hURU5TVEVJTgorKyMgZGVmaW5lIFNVQkxBTkdfR0VSTUFOX0xJRUNIVEVOU1RFSU4gMHgwNQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0tBU0hNSVJJX0lORElBCisrIyBkZWZpbmUgU1VCTEFOR19LQVNITUlSSV9JTkRJQSAweDAyCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfTUFMQVlfTUFMQVlTSUEKKysjIGRlZmluZSBTVUJMQU5HX01BTEFZX01BTEFZU0lBIDB4MDEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19NQUxBWV9CUlVORUlfREFSVVNTQUxBTQorKyMgZGVmaW5lIFNVQkxBTkdfTUFMQVlfQlJVTkVJX0RBUlVTU0FMQU0gMHgwMgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX05FUEFMSV9JTkRJQQorKyMgZGVmaW5lIFNVQkxBTkdfTkVQQUxJX0lORElBIDB4MDIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19QVU5KQUJJX0lORElBCisrIyBkZWZpbmUgU1VCTEFOR19QVU5KQUJJX0lORElBIDB4MDAKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19QVU5KQUJJX1BBS0lTVEFOCisrIyBkZWZpbmUgU1VCTEFOR19QVU5KQUJJX1BBS0lTVEFOIDB4MDEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19ST01BTklBTl9ST01BTklBCisrIyBkZWZpbmUgU1VCTEFOR19ST01BTklBTl9ST01BTklBIDB4MDAKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19ST01BTklBTl9NT0xET1ZBCisrIyBkZWZpbmUgU1VCTEFOR19ST01BTklBTl9NT0xET1ZBIDB4MDEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TRVJCSUFOX0xBVElOCisrIyBkZWZpbmUgU1VCTEFOR19TRVJCSUFOX0xBVElOIDB4MDIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TRVJCSUFOX0NZUklMTElDCisrIyBkZWZpbmUgU1VCTEFOR19TRVJCSUFOX0NZUklMTElDIDB4MDMKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TSU5ESElfSU5ESUEKKysjIGRlZmluZSBTVUJMQU5HX1NJTkRISV9JTkRJQSAweDAwCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU0lOREhJX1BBS0lTVEFOCisrIyBkZWZpbmUgU1VCTEFOR19TSU5ESElfUEFLSVNUQU4gMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfR1VBVEVNQUxBCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0dVQVRFTUFMQSAweDA0CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9DT1NUQV9SSUNBCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0NPU1RBX1JJQ0EgMHgwNQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfUEFOQU1BCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX1BBTkFNQSAweDA2CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9ET01JTklDQU5fUkVQVUJMSUMKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfRE9NSU5JQ0FOX1JFUFVCTElDIDB4MDcKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX1ZFTkVaVUVMQQorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9WRU5FWlVFTEEgMHgwOAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfQ09MT01CSUEKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfQ09MT01CSUEgMHgwOQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfUEVSVQorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9QRVJVIDB4MGEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0FSR0VOVElOQQorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9BUkdFTlRJTkEgMHgwYgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfRUNVQURPUgorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9FQ1VBRE9SIDB4MGMKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0NISUxFCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0NISUxFIDB4MGQKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX1VSVUdVQVkKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfVVJVR1VBWSAweDBlCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9QQVJBR1VBWQorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9QQVJBR1VBWSAweDBmCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9CT0xJVklBCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0JPTElWSUEgMHgxMAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfRUxfU0FMVkFET1IKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfRUxfU0FMVkFET1IgMHgxMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfSE9ORFVSQVMKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfSE9ORFVSQVMgMHgxMgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfTklDQVJBR1VBCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX05JQ0FSQUdVQSAweDEzCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9QVUVSVE9fUklDTworKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9QVUVSVE9fUklDTyAweDE0CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1dFRElTSF9GSU5MQU5ECisrIyBkZWZpbmUgU1VCTEFOR19TV0VESVNIX0ZJTkxBTkQgMHgwMgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1RBTUFaSUdIVF9BUkFCSUMKKysjIGRlZmluZSBTVUJMQU5HX1RBTUFaSUdIVF9BUkFCSUMgMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1RBTUFaSUdIVF9MQVRJTgorKyMgZGVmaW5lIFNVQkxBTkdfVEFNQVpJR0hUX0xBVElOIDB4MDIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19USUdSSU5ZQV9FVEhJT1BJQQorKyMgZGVmaW5lIFNVQkxBTkdfVElHUklOWUFfRVRISU9QSUEgMHgwMAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1RJR1JJTllBX0VSSVRSRUEKKysjIGRlZmluZSBTVUJMQU5HX1RJR1JJTllBX0VSSVRSRUEgMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1VSRFVfUEFLSVNUQU4KKysjIGRlZmluZSBTVUJMQU5HX1VSRFVfUEFLSVNUQU4gMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1VSRFVfSU5ESUEKKysjIGRlZmluZSBTVUJMQU5HX1VSRFVfSU5ESUEgMHgwMgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1VaQkVLX0xBVElOCisrIyBkZWZpbmUgU1VCTEFOR19VWkJFS19MQVRJTiAweDAxCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfVVpCRUtfQ1lSSUxMSUMKKysjIGRlZmluZSBTVUJMQU5HX1VaQkVLX0NZUklMTElDIDB4MDIKKysjIGVuZGlmCisrI2VuZGlmCisrCisrLyogWFBHMyBkZWZpbmVzIHRoZSByZXN1bHQgb2YgJ3NldGxvY2FsZSAoY2F0ZWdvcnksIE5VTEwpJyBhczoKKysgICAiRGlyZWN0cyAnc2V0bG9jYWxlKCknIHRvIHF1ZXJ5ICdjYXRlZ29yeScgYW5kIHJldHVybiB0aGUgY3VycmVudAorKyAgICBzZXR0aW5nIG9mICdsb2NhbCcuIgorKyAgIEhvd2V2ZXIgaXQgZG9lcyBub3Qgc3BlY2lmeSB0aGUgZXhhY3QgZm9ybWF0LiAgTmVpdGhlciBkbyBTVVNWMiBhbmQKKysgICBJU08gQyA5OS4gIFNvIHdlIGNhbiB1c2UgdGhpcyBmZWF0dXJlIG9ubHkgb24gc2VsZWN0ZWQgc3lzdGVtcyAoZS5nLgorKyAgIHRob3NlIHVzaW5nIEdOVSBDIExpYnJhcnkpLiAgKi8KKysjaWYgZGVmaW5lZCBfTElCQyB8fCAoZGVmaW5lZCBfX0dOVV9MSUJSQVJZX18gJiYgX19HTlVfTElCUkFSWV9fID49IDIpCisrIyBkZWZpbmUgSEFWRV9MT0NBTEVfTlVMTAorKyNlbmRpZgorKworKy8qIERldGVybWluZSB0aGUgY3VycmVudCBsb2NhbGUncyBuYW1lLCBhbmQgY2Fub25pY2FsaXplIGl0IGludG8gWFBHIHN5bnRheAorKyAgICAgbGFuZ3VhZ2VbX3RlcnJpdG9yeVsuY29kZXNldF1dW0Btb2RpZmllcl0KKysgICBUaGUgY29kZXNldCBwYXJ0IGluIHRoZSByZXN1bHQgaXMgbm90IHJlbGlhYmxlOyB0aGUgbG9jYWxlX2NoYXJzZXQoKQorKyAgIHNob3VsZCBiZSB1c2VkIGZvciBjb2Rlc2V0IGluZm9ybWF0aW9uIGluc3RlYWQuCisrICAgVGhlIHJlc3VsdCBtdXN0IG5vdCBiZSBmcmVlZDsgaXQgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQuICAqLworKworK2NvbnN0IGNoYXIgKgorK19ubF9sb2NhbGVfbmFtZSAoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpjYXRlZ29yeW5hbWUpCisreworKyAgY29uc3QgY2hhciAqcmV0dmFsOworKworKyNpZm5kZWYgV0lOMzIKKysKKysgIC8qIFVzZSB0aGUgUE9TSVggbWV0aG9kcyBvZiBsb29raW5nIHRvICdMQ19BTEwnLCAnTENfeHh4JywgYW5kICdMQU5HJy4KKysgICAgIE9uIHNvbWUgc3lzdGVtcyB0aGlzIGNhbiBiZSBkb25lIGJ5IHRoZSAnc2V0bG9jYWxlJyBmdW5jdGlvbiBpdHNlbGYuICAqLworKyMgaWYgZGVmaW5lZCBIQVZFX1NFVExPQ0FMRSAmJiBkZWZpbmVkIEhBVkVfTENfTUVTU0FHRVMgJiYgZGVmaW5lZCBIQVZFX0xPQ0FMRV9OVUxMCisrICByZXR2YWwgPSBzZXRsb2NhbGUgKGNhdGVnb3J5LCBOVUxMKTsKKysjIGVsc2UKKysgIC8qIFNldHRpbmcgb2YgTENfQUxMIG92ZXJ3cml0ZXMgYWxsIG90aGVyLiAgKi8KKysgIHJldHZhbCA9IGdldGVudiAoIkxDX0FMTCIpOworKyAgaWYgKHJldHZhbCA9PSBOVUxMIHx8IHJldHZhbFswXSA9PSAnXDAnKQorKyAgICB7CisrICAgICAgLyogTmV4dCBjb21lcyB0aGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBjYXRlZ29yeS4gICovCisrICAgICAgcmV0dmFsID0gZ2V0ZW52IChjYXRlZ29yeW5hbWUpOworKyAgICAgIGlmIChyZXR2YWwgPT0gTlVMTCB8fCByZXR2YWxbMF0gPT0gJ1wwJykKKysJeworKwkgIC8qIExhc3QgcG9zc2liaWxpdHkgaXMgdGhlIExBTkcgZW52aXJvbm1lbnQgdmFyaWFibGUuICAqLworKwkgIHJldHZhbCA9IGdldGVudiAoIkxBTkciKTsKKysJICBpZiAocmV0dmFsID09IE5VTEwgfHwgcmV0dmFsWzBdID09ICdcMCcpCisrCSAgICAvKiBXZSB1c2UgQyBhcyB0aGUgZGVmYXVsdCBkb21haW4uICBQT1NJWCBzYXlzIHRoaXMgaXMKKysJICAgICAgIGltcGxlbWVudGF0aW9uIGRlZmluZWQuICAqLworKwkgICAgcmV0dmFsID0gIkMiOworKwl9CisrICAgIH0KKysjIGVuZGlmCisrCisrICByZXR1cm4gcmV0dmFsOworKworKyNlbHNlIC8qIFdJTjMyICovCisrCisrICAvKiBSZXR1cm4gYW4gWFBHIHN0eWxlIGxvY2FsZSBuYW1lIGxhbmd1YWdlW190ZXJyaXRvcnldW0Btb2RpZmllcl0uCisrICAgICBEb24ndCBldmVuIGJvdGhlciBkZXRlcm1pbmluZyB0aGUgY29kZXNldDsgaXQncyBub3QgdXNlZnVsIGluIHRoaXMKKysgICAgIGNvbnRleHQsIGJlY2F1c2UgbWVzc2FnZSBjYXRhbG9ncyBhcmUgbm90IHNwZWNpZmljIHRvIGEgc2luZ2xlCisrICAgICBjb2Rlc2V0LiAgKi8KKysKKysgIExDSUQgbGNpZDsKKysgIExBTkdJRCBsYW5naWQ7CisrICBpbnQgcHJpbWFyeSwgc3ViOworKworKyAgLyogTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSBzeXN0ZW0gc2V0dGluZ3MgdGhyb3VnaCBlbnZpcm9ubWVudAorKyAgICAgdmFyaWFibGVzLCBhcyBvbiBQT1NJWCBzeXN0ZW1zLiAgKi8KKysgIHJldHZhbCA9IGdldGVudiAoIkxDX0FMTCIpOworKyAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorKyAgICByZXR1cm4gcmV0dmFsOworKyAgcmV0dmFsID0gZ2V0ZW52IChjYXRlZ29yeW5hbWUpOworKyAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorKyAgICByZXR1cm4gcmV0dmFsOworKyAgcmV0dmFsID0gZ2V0ZW52ICgiTEFORyIpOworKyAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorKyAgICByZXR1cm4gcmV0dmFsOworKworKyAgLyogVXNlIG5hdGl2ZSBXaW4zMiBBUEkgbG9jYWxlIElELiAgKi8KKysgIGxjaWQgPSBHZXRUaHJlYWRMb2NhbGUgKCk7CisrCisrICAvKiBTdHJpcCBvZmYgdGhlIHNvcnRpbmcgcnVsZXMsIGtlZXAgb25seSB0aGUgbGFuZ3VhZ2UgcGFydC4gICovCisrICBsYW5naWQgPSBMQU5HSURGUk9NTENJRCAobGNpZCk7CisrCisrICAvKiBTcGxpdCBpbnRvIGxhbmd1YWdlIGFuZCB0ZXJyaXRvcnkgcGFydC4gICovCisrICBwcmltYXJ5ID0gUFJJTUFSWUxBTkdJRCAobGFuZ2lkKTsKKysgIHN1YiA9IFNVQkxBTkdJRCAobGFuZ2lkKTsKKysKKysgIC8qIERpc3BhdGNoIG9uIGxhbmd1YWdlLgorKyAgICAgU2VlIGFsc28gaHR0cDovL3d3dy51bmljb2RlLm9yZy91bmljb2RlL29ubGluZWRhdC9sYW5ndWFnZXMuaHRtbCAuCisrICAgICBGb3IgZGV0YWlscyBhYm91dCBsYW5ndWFnZXMsIHNlZSBodHRwOi8vd3d3LmV0aG5vbG9ndWUuY29tLyAuICAqLworKyAgc3dpdGNoIChwcmltYXJ5KQorKyAgICB7CisrICAgIGNhc2UgTEFOR19BRlJJS0FBTlM6IHJldHVybiAiYWZfWkEiOworKyAgICBjYXNlIExBTkdfQUxCQU5JQU46IHJldHVybiAic3FfQUwiOworKyAgICBjYXNlIExBTkdfQU1IQVJJQzogcmV0dXJuICJhbV9FVCI7CisrICAgIGNhc2UgTEFOR19BUkFCSUM6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19TQVVESV9BUkFCSUE6IHJldHVybiAiYXJfU0EiOworKwljYXNlIFNVQkxBTkdfQVJBQklDX0lSQVE6IHJldHVybiAiYXJfSVEiOworKwljYXNlIFNVQkxBTkdfQVJBQklDX0VHWVBUOiByZXR1cm4gImFyX0VHIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19MSUJZQTogcmV0dXJuICJhcl9MWSI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfQUxHRVJJQTogcmV0dXJuICJhcl9EWiI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfTU9ST0NDTzogcmV0dXJuICJhcl9NQSI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfVFVOSVNJQTogcmV0dXJuICJhcl9UTiI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfT01BTjogcmV0dXJuICJhcl9PTSI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfWUVNRU46IHJldHVybiAiYXJfWUUiOworKwljYXNlIFNVQkxBTkdfQVJBQklDX1NZUklBOiByZXR1cm4gImFyX1NZIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19KT1JEQU46IHJldHVybiAiYXJfSk8iOworKwljYXNlIFNVQkxBTkdfQVJBQklDX0xFQkFOT046IHJldHVybiAiYXJfTEIiOworKwljYXNlIFNVQkxBTkdfQVJBQklDX0tVV0FJVDogcmV0dXJuICJhcl9LVyI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfVUFFOiByZXR1cm4gImFyX0FFIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19CQUhSQUlOOiByZXR1cm4gImFyX0JIIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19RQVRBUjogcmV0dXJuICJhcl9RQSI7CisrCX0KKysgICAgICByZXR1cm4gImFyIjsKKysgICAgY2FzZSBMQU5HX0FSTUVOSUFOOiByZXR1cm4gImh5X0FNIjsKKysgICAgY2FzZSBMQU5HX0FTU0FNRVNFOiByZXR1cm4gImFzX0lOIjsKKysgICAgY2FzZSBMQU5HX0FaRVJJOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCS8qIEZJWE1FOiBBZGp1c3QgdGhpcyB3aGVuIEF6ZXJiYWlqYW5pIGxvY2FsZXMgYXBwZWFyIG9uIFVuaXguICAqLworKwljYXNlIFNVQkxBTkdfQVpFUklfTEFUSU46IHJldHVybiAiYXpfQVpAbGF0aW4iOworKwljYXNlIFNVQkxBTkdfQVpFUklfQ1lSSUxMSUM6IHJldHVybiAiYXpfQVpAY3lyaWxsaWMiOworKwl9CisrICAgICAgcmV0dXJuICJheiI7CisrICAgIGNhc2UgTEFOR19CQVNRVUU6CisrICAgICAgcmV0dXJuICJldSI7IC8qIEFtYmlndW91czogY291bGQgYmUgImV1X0VTIiBvciAiZXVfRlIiLiAgKi8KKysgICAgY2FzZSBMQU5HX0JFTEFSVVNJQU46IHJldHVybiAiYmVfQlkiOworKyAgICBjYXNlIExBTkdfQkVOR0FMSToKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfQkVOR0FMSV9JTkRJQTogcmV0dXJuICJibl9JTiI7CisrCWNhc2UgU1VCTEFOR19CRU5HQUxJX0JBTkdMQURFU0g6IHJldHVybiAiYm5fQkQiOworKwl9CisrICAgICAgcmV0dXJuICJibiI7CisrICAgIGNhc2UgTEFOR19CVUxHQVJJQU46IHJldHVybiAiYmdfQkciOworKyAgICBjYXNlIExBTkdfQlVSTUVTRTogcmV0dXJuICJteV9NTSI7CisrICAgIGNhc2UgTEFOR19DQU1CT0RJQU46IHJldHVybiAia21fS0giOworKyAgICBjYXNlIExBTkdfQ0FUQUxBTjogcmV0dXJuICJjYV9FUyI7CisrICAgIGNhc2UgTEFOR19DSEVST0tFRTogcmV0dXJuICJjaHJfVVMiOworKyAgICBjYXNlIExBTkdfQ0hJTkVTRToKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfQ0hJTkVTRV9UUkFESVRJT05BTDogcmV0dXJuICJ6aF9UVyI7CisrCWNhc2UgU1VCTEFOR19DSElORVNFX1NJTVBMSUZJRUQ6IHJldHVybiAiemhfQ04iOworKwljYXNlIFNVQkxBTkdfQ0hJTkVTRV9IT05HS09ORzogcmV0dXJuICJ6aF9ISyI7CisrCWNhc2UgU1VCTEFOR19DSElORVNFX1NJTkdBUE9SRTogcmV0dXJuICJ6aF9TRyI7CisrCWNhc2UgU1VCTEFOR19DSElORVNFX01BQ0FVOiByZXR1cm4gInpoX01PIjsKKysJfQorKyAgICAgIHJldHVybiAiemgiOworKyAgICBjYXNlIExBTkdfQ1JPQVRJQU46CQkvKiBMQU5HX0NST0FUSUFOID09IExBTkdfU0VSQklBTgorKwkJCQkgKiBXaGF0IHVzZWQgdG8gYmUgY2FsbGVkIFNlcmJvLUNyb2F0aWFuCisrCQkJCSAqIHNob3VsZCByZWFsbHkgbm93IGJlIHR3byBzZXBhcmF0ZQorKwkJCQkgKiBsYW5ndWFnZXMgYmVjYXVzZSBvZiBwb2xpdGljYWwgcmVhc29ucy4KKysJCQkJICogKFNheXMgdG1sLCB3aG8ga25vd3Mgbm90aGluZyBhYm91dCBTZXJiaWFuCisrCQkJCSAqIG9yIENyb2F0aWFuLikKKysJCQkJICogKEkgY2FuIGZlZWwgdGhvc2UgZmxhbWVzIGNvbWluZyBhbHJlYWR5LikKKysJCQkJICovCisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX0RFRkFVTFQ6IHJldHVybiAiaHJfSFIiOworKwljYXNlIFNVQkxBTkdfU0VSQklBTl9MQVRJTjogcmV0dXJuICJzcl9DUyI7CisrCWNhc2UgU1VCTEFOR19TRVJCSUFOX0NZUklMTElDOiByZXR1cm4gInNyX0NTQGN5cmlsbGljIjsKKysJfQorKyAgICAgIHJldHVybiAiaHIiOworKyAgICBjYXNlIExBTkdfQ1pFQ0g6IHJldHVybiAiY3NfQ1oiOworKyAgICBjYXNlIExBTkdfREFOSVNIOiByZXR1cm4gImRhX0RLIjsKKysgICAgY2FzZSBMQU5HX0RJVkVISTogcmV0dXJuICJkdl9NViI7CisrICAgIGNhc2UgTEFOR19EVVRDSDoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfRFVUQ0g6IHJldHVybiAibmxfTkwiOworKwljYXNlIFNVQkxBTkdfRFVUQ0hfQkVMR0lBTjogLyogRkxFTUlTSCwgVkxBQU1TICovIHJldHVybiAibmxfQkUiOworKwl9CisrICAgICAgcmV0dXJuICJubCI7CisrICAgIGNhc2UgTEFOR19FRE86IHJldHVybiAiYmluX05HIjsKKysgICAgY2FzZSBMQU5HX0VOR0xJU0g6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJLyogU1VCTEFOR19FTkdMSVNIX1VTID09IFNVQkxBTkdfREVGQVVMVC4gSGVoLiBJIHRob3VnaHQKKysJICogRW5nbGlzaCB3YXMgdGhlIGxhbmd1YWdlIHNwb2tlbiBpbiBFbmdsYW5kLgorKwkgKiBPaCB3ZWxsLgorKwkgKi8KKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfVVM6IHJldHVybiAiZW5fVVMiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9VSzogcmV0dXJuICJlbl9HQiI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX0FVUzogcmV0dXJuICJlbl9BVSI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX0NBTjogcmV0dXJuICJlbl9DQSI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX05aOiByZXR1cm4gImVuX05aIjsKKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfRUlSRTogcmV0dXJuICJlbl9JRSI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX1NPVVRIX0FGUklDQTogcmV0dXJuICJlbl9aQSI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX0pBTUFJQ0E6IHJldHVybiAiZW5fSk0iOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9DQVJJQkJFQU46IHJldHVybiAiZW5fR0QiOyAvKiBHcmVuYWRhPyAqLworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9CRUxJWkU6IHJldHVybiAiZW5fQloiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9UUklOSURBRDogcmV0dXJuICJlbl9UVCI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX1pJTUJBQldFOiByZXR1cm4gImVuX1pXIjsKKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfUEhJTElQUElORVM6IHJldHVybiAiZW5fUEgiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9JTkRPTkVTSUE6IHJldHVybiAiZW5fSUQiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9IT05HS09ORzogcmV0dXJuICJlbl9ISyI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX0lORElBOiByZXR1cm4gImVuX0lOIjsKKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfTUFMQVlTSUE6IHJldHVybiAiZW5fTVkiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9TSU5HQVBPUkU6IHJldHVybiAiZW5fU0ciOworKwl9CisrICAgICAgcmV0dXJuICJlbiI7CisrICAgIGNhc2UgTEFOR19FU1RPTklBTjogcmV0dXJuICJldF9FRSI7CisrICAgIGNhc2UgTEFOR19GQUVST0VTRTogcmV0dXJuICJmb19GTyI7CisrICAgIGNhc2UgTEFOR19GQVJTSTogcmV0dXJuICJmYV9JUiI7CisrICAgIGNhc2UgTEFOR19GSU5OSVNIOiByZXR1cm4gImZpX0ZJIjsKKysgICAgY2FzZSBMQU5HX0ZSRU5DSDoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfRlJFTkNIOiByZXR1cm4gImZyX0ZSIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9CRUxHSUFOOiAvKiBXQUxMT09OICovIHJldHVybiAiZnJfQkUiOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX0NBTkFESUFOOiByZXR1cm4gImZyX0NBIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9TV0lTUzogcmV0dXJuICJmcl9DSCI7CisrCWNhc2UgU1VCTEFOR19GUkVOQ0hfTFVYRU1CT1VSRzogcmV0dXJuICJmcl9MVSI7CisrCWNhc2UgU1VCTEFOR19GUkVOQ0hfTU9OQUNPOiByZXR1cm4gImZyX01DIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9XRVNUSU5ESUVTOiByZXR1cm4gImZyIjsgLyogQ2FyaWJiZWFuPyAqLworKwljYXNlIFNVQkxBTkdfRlJFTkNIX1JFVU5JT046IHJldHVybiAiZnJfUkUiOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX0NPTkdPOiByZXR1cm4gImZyX0NHIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9TRU5FR0FMOiByZXR1cm4gImZyX1NOIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9DQU1FUk9PTjogcmV0dXJuICJmcl9DTSI7CisrCWNhc2UgU1VCTEFOR19GUkVOQ0hfQ09URURJVk9JUkU6IHJldHVybiAiZnJfQ0kiOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX01BTEk6IHJldHVybiAiZnJfTUwiOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX01PUk9DQ086IHJldHVybiAiZnJfTUEiOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX0hBSVRJOiByZXR1cm4gImZyX0hUIjsKKysJfQorKyAgICAgIHJldHVybiAiZnIiOworKyAgICBjYXNlIExBTkdfRlJJU0lBTjogcmV0dXJuICJmeV9OTCI7CisrICAgIGNhc2UgTEFOR19GVUxGVUxERToKKysgICAgICAvKiBTcG9rZW4gaW4gTmlnZXJpYSwgR3VpbmVhLCBTZW5lZ2FsLCBNYWxpLCBOaWdlciwgQ2FtZXJvb24sIEJlbmluLiAqLworKyAgICAgIHJldHVybiAiZmZfTkciOworKyAgICBjYXNlIExBTkdfR0FFTElDOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgMHgwMTogLyogU0NPVFRJU0ggKi8gcmV0dXJuICJnZF9HQiI7CisrCWNhc2UgMHgwMjogLyogSVJJU0ggKi8gcmV0dXJuICJnYV9JRSI7CisrCX0KKysgICAgICByZXR1cm4gIkMiOworKyAgICBjYXNlIExBTkdfR0FMSUNJQU46IHJldHVybiAiZ2xfRVMiOworKyAgICBjYXNlIExBTkdfR0VPUkdJQU46IHJldHVybiAia2FfR0UiOworKyAgICBjYXNlIExBTkdfR0VSTUFOOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19HRVJNQU46IHJldHVybiAiZGVfREUiOworKwljYXNlIFNVQkxBTkdfR0VSTUFOX1NXSVNTOiByZXR1cm4gImRlX0NIIjsKKysJY2FzZSBTVUJMQU5HX0dFUk1BTl9BVVNUUklBTjogcmV0dXJuICJkZV9BVCI7CisrCWNhc2UgU1VCTEFOR19HRVJNQU5fTFVYRU1CT1VSRzogcmV0dXJuICJkZV9MVSI7CisrCWNhc2UgU1VCTEFOR19HRVJNQU5fTElFQ0hURU5TVEVJTjogcmV0dXJuICJkZV9MSSI7CisrCX0KKysgICAgICByZXR1cm4gImRlIjsKKysgICAgY2FzZSBMQU5HX0dSRUVLOiByZXR1cm4gImVsX0dSIjsKKysgICAgY2FzZSBMQU5HX0dVQVJBTkk6IHJldHVybiAiZ25fUFkiOworKyAgICBjYXNlIExBTkdfR1VKQVJBVEk6IHJldHVybiAiZ3VfSU4iOworKyAgICBjYXNlIExBTkdfSEFVU0E6IHJldHVybiAiaGFfTkciOworKyAgICBjYXNlIExBTkdfSEFXQUlJQU46CisrICAgICAgLyogRklYTUU6IERvIHRoZXkgbWVhbiBIYXdhaWlhbiAoImhhd19VUyIsIDEwMDAgc3BlYWtlcnMpCisrCSBvciBIYXdhaWkgQ3Jlb2xlIEVuZ2xpc2ggKCJjcGVfVVMiLCA2MDAwMDAgc3BlYWtlcnMpPyAgKi8KKysgICAgICByZXR1cm4gImNwZV9VUyI7CisrICAgIGNhc2UgTEFOR19IRUJSRVc6IHJldHVybiAiaGVfSUwiOworKyAgICBjYXNlIExBTkdfSElOREk6IHJldHVybiAiaGlfSU4iOworKyAgICBjYXNlIExBTkdfSFVOR0FSSUFOOiByZXR1cm4gImh1X0hVIjsKKysgICAgY2FzZSBMQU5HX0lCSUJJTzogcmV0dXJuICJuaWNfTkciOworKyAgICBjYXNlIExBTkdfSUNFTEFORElDOiByZXR1cm4gImlzX0lTIjsKKysgICAgY2FzZSBMQU5HX0lHQk86IHJldHVybiAiaWdfTkciOworKyAgICBjYXNlIExBTkdfSU5ET05FU0lBTjogcmV0dXJuICJpZF9JRCI7CisrICAgIGNhc2UgTEFOR19JTlVLVElUVVQ6IHJldHVybiAiaXVfQ0EiOworKyAgICBjYXNlIExBTkdfSVRBTElBTjoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfSVRBTElBTjogcmV0dXJuICJpdF9JVCI7CisrCWNhc2UgU1VCTEFOR19JVEFMSUFOX1NXSVNTOiByZXR1cm4gIml0X0NIIjsKKysJfQorKyAgICAgIHJldHVybiAiaXQiOworKyAgICBjYXNlIExBTkdfSkFQQU5FU0U6IHJldHVybiAiamFfSlAiOworKyAgICBjYXNlIExBTkdfS0FOTkFEQTogcmV0dXJuICJrbl9JTiI7CisrICAgIGNhc2UgTEFOR19LQU5VUkk6IHJldHVybiAia3JfTkciOworKyAgICBjYXNlIExBTkdfS0FTSE1JUkk6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX0RFRkFVTFQ6IHJldHVybiAia3NfUEsiOworKwljYXNlIFNVQkxBTkdfS0FTSE1JUklfSU5ESUE6IHJldHVybiAia3NfSU4iOworKwl9CisrICAgICAgcmV0dXJuICJrcyI7CisrICAgIGNhc2UgTEFOR19LQVpBSzogcmV0dXJuICJra19LWiI7CisrICAgIGNhc2UgTEFOR19LT05LQU5JOgorKyAgICAgIC8qIEZJWE1FOiBBZGp1c3QgdGhpcyB3aGVuIHN1Y2ggbG9jYWxlcyBhcHBlYXIgb24gVW5peC4gICovCisrICAgICAgcmV0dXJuICJrb2tfSU4iOworKyAgICBjYXNlIExBTkdfS09SRUFOOiByZXR1cm4gImtvX0tSIjsKKysgICAgY2FzZSBMQU5HX0tZUkdZWjogcmV0dXJuICJreV9LRyI7CisrICAgIGNhc2UgTEFOR19MQU86IHJldHVybiAibG9fTEEiOworKyAgICBjYXNlIExBTkdfTEFUSU46IHJldHVybiAibGFfVkEiOworKyAgICBjYXNlIExBTkdfTEFUVklBTjogcmV0dXJuICJsdl9MViI7CisrICAgIGNhc2UgTEFOR19MSVRIVUFOSUFOOiByZXR1cm4gImx0X0xUIjsKKysgICAgY2FzZSBMQU5HX01BQ0VET05JQU46IHJldHVybiAibWtfTUsiOworKyAgICBjYXNlIExBTkdfTUFMQVk6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX01BTEFZX01BTEFZU0lBOiByZXR1cm4gIm1zX01ZIjsKKysJY2FzZSBTVUJMQU5HX01BTEFZX0JSVU5FSV9EQVJVU1NBTEFNOiByZXR1cm4gIm1zX0JOIjsKKysJfQorKyAgICAgIHJldHVybiAibXMiOworKyAgICBjYXNlIExBTkdfTUFMQVlBTEFNOiByZXR1cm4gIm1sX0lOIjsKKysgICAgY2FzZSBMQU5HX01BTFRFU0U6IHJldHVybiAibXRfTVQiOworKyAgICBjYXNlIExBTkdfTUFOSVBVUkk6CisrICAgICAgLyogRklYTUU6IEFkanVzdCB0aGlzIHdoZW4gc3VjaCBsb2NhbGVzIGFwcGVhciBvbiBVbml4LiAgKi8KKysgICAgICByZXR1cm4gIm1uaV9JTiI7CisrICAgIGNhc2UgTEFOR19NQVJBVEhJOiByZXR1cm4gIm1yX0lOIjsKKysgICAgY2FzZSBMQU5HX01PTkdPTElBTjoKKysgICAgICByZXR1cm4gIm1uIjsgLyogQW1iaWd1b3VzOiBjb3VsZCBiZSAibW5fQ04iIG9yICJtbl9NTiIuICAqLworKyAgICBjYXNlIExBTkdfTkVQQUxJOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19ERUZBVUxUOiByZXR1cm4gIm5lX05QIjsKKysJY2FzZSBTVUJMQU5HX05FUEFMSV9JTkRJQTogcmV0dXJuICJuZV9JTiI7CisrCX0KKysgICAgICByZXR1cm4gIm5lIjsKKysgICAgY2FzZSBMQU5HX05PUldFR0lBTjoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfTk9SV0VHSUFOX0JPS01BTDogcmV0dXJuICJub19OTyI7CisrCWNhc2UgU1VCTEFOR19OT1JXRUdJQU5fTllOT1JTSzogcmV0dXJuICJubl9OTyI7CisrCX0KKysgICAgICByZXR1cm4gIm5vIjsKKysgICAgY2FzZSBMQU5HX09SSVlBOiByZXR1cm4gIm9yX0lOIjsKKysgICAgY2FzZSBMQU5HX09ST01POiByZXR1cm4gIm9tX0VUIjsKKysgICAgY2FzZSBMQU5HX1BBUElBTUVOVFU6IHJldHVybiAicGFwX0FOIjsKKysgICAgY2FzZSBMQU5HX1BBU0hUTzoKKysgICAgICByZXR1cm4gInBzIjsgLyogQW1iaWd1b3VzOiBjb3VsZCBiZSAicHNfUEsiIG9yICJwc19BRiIuICAqLworKyAgICBjYXNlIExBTkdfUE9MSVNIOiByZXR1cm4gInBsX1BMIjsKKysgICAgY2FzZSBMQU5HX1BPUlRVR1VFU0U6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX1BPUlRVR1VFU0U6IHJldHVybiAicHRfUFQiOworKwkvKiBIbW0uIFNVQkxBTkdfUE9SVFVHVUVTRV9CUkFaSUxJQU4gPT0gU1VCTEFOR19ERUZBVUxULgorKwkgICBTYW1lIHBoZW5vbWVub24gYXMgU1VCTEFOR19FTkdMSVNIX1VTID09IFNVQkxBTkdfREVGQVVMVC4gKi8KKysJY2FzZSBTVUJMQU5HX1BPUlRVR1VFU0VfQlJBWklMSUFOOiByZXR1cm4gInB0X0JSIjsKKysJfQorKyAgICAgIHJldHVybiAicHQiOworKyAgICBjYXNlIExBTkdfUFVOSkFCSToKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfUFVOSkFCSV9JTkRJQTogcmV0dXJuICJwYV9JTiI7IC8qIEd1cm11a2hpIHNjcmlwdCAqLworKwljYXNlIFNVQkxBTkdfUFVOSkFCSV9QQUtJU1RBTjogcmV0dXJuICJwYV9QSyI7IC8qIEFyYWJpYyBzY3JpcHQgKi8KKysJfQorKyAgICAgIHJldHVybiAicGEiOworKyAgICBjYXNlIExBTkdfUkhBRVRPX1JPTUFOQ0U6IHJldHVybiAicm1fQ0giOworKyAgICBjYXNlIExBTkdfUk9NQU5JQU46CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX1JPTUFOSUFOX1JPTUFOSUE6IHJldHVybiAicm9fUk8iOworKwljYXNlIFNVQkxBTkdfUk9NQU5JQU5fTU9MRE9WQTogcmV0dXJuICJyb19NRCI7CisrCX0KKysgICAgICByZXR1cm4gInJvIjsKKysgICAgY2FzZSBMQU5HX1JVU1NJQU46CisrICAgICAgcmV0dXJuICJydSI7IC8qIEFtYmlndW91czogY291bGQgYmUgInJ1X1JVIiBvciAicnVfVUEiIG9yICJydV9NRCIuICAqLworKyAgICBjYXNlIExBTkdfU0FBTUk6IC8qIGFjdHVhbGx5IE5vcnRoZXJuIFNhbWkgKi8gcmV0dXJuICJzZV9OTyI7CisrICAgIGNhc2UgTEFOR19TQU5TS1JJVDogcmV0dXJuICJzYV9JTiI7CisrICAgIGNhc2UgTEFOR19TSU5ESEk6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX1NJTkRISV9JTkRJQTogcmV0dXJuICJzZF9JTiI7CisrCWNhc2UgU1VCTEFOR19TSU5ESElfUEFLSVNUQU46IHJldHVybiAic2RfUEsiOworKwl9CisrICAgICAgcmV0dXJuICJzZCI7CisrICAgIGNhc2UgTEFOR19TSU5IQUxFU0U6IHJldHVybiAic2lfTEsiOworKyAgICBjYXNlIExBTkdfU0xPVkFLOiByZXR1cm4gInNrX1NLIjsKKysgICAgY2FzZSBMQU5HX1NMT1ZFTklBTjogcmV0dXJuICJzbF9TSSI7CisrICAgIGNhc2UgTEFOR19TT01BTEk6IHJldHVybiAic29fU08iOworKyAgICBjYXNlIExBTkdfU09SQklBTjoKKysgICAgICAvKiBGSVhNRTogQWRqdXN0IHRoaXMgd2hlbiBzdWNoIGxvY2FsZXMgYXBwZWFyIG9uIFVuaXguICAqLworKyAgICAgIHJldHVybiAid2VuX0RFIjsKKysgICAgY2FzZSBMQU5HX1NQQU5JU0g6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0g6IHJldHVybiAiZXNfRVMiOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9NRVhJQ0FOOiByZXR1cm4gImVzX01YIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfTU9ERVJOOgorKwkgIHJldHVybiAiZXNfRVNAbW9kZXJuIjsJLyogbm90IHNlZW4gb24gVW5peCAqLworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9HVUFURU1BTEE6IHJldHVybiAiZXNfR1QiOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9DT1NUQV9SSUNBOiByZXR1cm4gImVzX0NSIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfUEFOQU1BOiByZXR1cm4gImVzX1BBIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfRE9NSU5JQ0FOX1JFUFVCTElDOiByZXR1cm4gImVzX0RPIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfVkVORVpVRUxBOiByZXR1cm4gImVzX1ZFIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfQ09MT01CSUE6IHJldHVybiAiZXNfQ08iOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9QRVJVOiByZXR1cm4gImVzX1BFIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfQVJHRU5USU5BOiByZXR1cm4gImVzX0FSIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfRUNVQURPUjogcmV0dXJuICJlc19FQyI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX0NISUxFOiByZXR1cm4gImVzX0NMIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfVVJVR1VBWTogcmV0dXJuICJlc19VWSI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX1BBUkFHVUFZOiByZXR1cm4gImVzX1BZIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfQk9MSVZJQTogcmV0dXJuICJlc19CTyI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX0VMX1NBTFZBRE9SOiByZXR1cm4gImVzX1NWIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfSE9ORFVSQVM6IHJldHVybiAiZXNfSE4iOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9OSUNBUkFHVUE6IHJldHVybiAiZXNfTkkiOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9QVUVSVE9fUklDTzogcmV0dXJuICJlc19QUiI7CisrCX0KKysgICAgICByZXR1cm4gImVzIjsKKysgICAgY2FzZSBMQU5HX1NVVFU6IHJldHVybiAiYm50X1RaIjsgLyogb3IgInN0X0xTIiBvciAibnNvX1pBIj8gKi8KKysgICAgY2FzZSBMQU5HX1NXQUhJTEk6IHJldHVybiAic3dfS0UiOworKyAgICBjYXNlIExBTkdfU1dFRElTSDoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfREVGQVVMVDogcmV0dXJuICJzdl9TRSI7CisrCWNhc2UgU1VCTEFOR19TV0VESVNIX0ZJTkxBTkQ6IHJldHVybiAic3ZfRkkiOworKwl9CisrICAgICAgcmV0dXJuICJzdiI7CisrICAgIGNhc2UgTEFOR19TWVJJQUM6IHJldHVybiAic3lyX1RSIjsgLyogQW4gZXh0aW5jdCBsYW5ndWFnZS4gICovCisrICAgIGNhc2UgTEFOR19UQUdBTE9HOiByZXR1cm4gInRsX1BIIjsKKysgICAgY2FzZSBMQU5HX1RBSklLOiByZXR1cm4gInRnX1RKIjsKKysgICAgY2FzZSBMQU5HX1RBTUFaSUdIVDoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwkvKiBGSVhNRTogQWRqdXN0IHRoaXMgd2hlbiBUYW1hemlnaHQgbG9jYWxlcyBhcHBlYXIgb24gVW5peC4gICovCisrCWNhc2UgU1VCTEFOR19UQU1BWklHSFRfQVJBQklDOiByZXR1cm4gImJlcl9NQUBhcmFiaWMiOworKwljYXNlIFNVQkxBTkdfVEFNQVpJR0hUX0xBVElOOiByZXR1cm4gImJlcl9NQUBsYXRpbiI7CisrCX0KKysgICAgICByZXR1cm4gImJlcl9NQSI7CisrICAgIGNhc2UgTEFOR19UQU1JTDoKKysgICAgICByZXR1cm4gInRhIjsgLyogQW1iaWd1b3VzOiBjb3VsZCBiZSAidGFfSU4iIG9yICJ0YV9MSyIgb3IgInRhX1NHIi4gICovCisrICAgIGNhc2UgTEFOR19UQVRBUjogcmV0dXJuICJ0dF9SVSI7CisrICAgIGNhc2UgTEFOR19URUxVR1U6IHJldHVybiAidGVfSU4iOworKyAgICBjYXNlIExBTkdfVEhBSTogcmV0dXJuICJ0aF9USCI7CisrICAgIGNhc2UgTEFOR19USUJFVEFOOiByZXR1cm4gImJvX0NOIjsKKysgICAgY2FzZSBMQU5HX1RJR1JJTllBOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19USUdSSU5ZQV9FVEhJT1BJQTogcmV0dXJuICJ0aV9FVCI7CisrCWNhc2UgU1VCTEFOR19USUdSSU5ZQV9FUklUUkVBOiByZXR1cm4gInRpX0VSIjsKKysJfQorKyAgICAgIHJldHVybiAidGkiOworKyAgICBjYXNlIExBTkdfVFNPTkdBOiByZXR1cm4gInRzX1pBIjsKKysgICAgY2FzZSBMQU5HX1RTV0FOQTogcmV0dXJuICJ0bl9CVyI7CisrICAgIGNhc2UgTEFOR19UVVJLSVNIOiByZXR1cm4gInRyX1RSIjsKKysgICAgY2FzZSBMQU5HX1RVUktNRU46IHJldHVybiAidGtfVE0iOworKyAgICBjYXNlIExBTkdfVUtSQUlOSUFOOiByZXR1cm4gInVrX1VBIjsKKysgICAgY2FzZSBMQU5HX1VSRFU6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX1VSRFVfUEFLSVNUQU46IHJldHVybiAidXJfUEsiOworKwljYXNlIFNVQkxBTkdfVVJEVV9JTkRJQTogcmV0dXJuICJ1cl9JTiI7CisrCX0KKysgICAgICByZXR1cm4gInVyIjsKKysgICAgY2FzZSBMQU5HX1VaQkVLOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19VWkJFS19MQVRJTjogcmV0dXJuICJ1el9VWiI7CisrCWNhc2UgU1VCTEFOR19VWkJFS19DWVJJTExJQzogcmV0dXJuICJ1el9VWkBjeXJpbGxpYyI7CisrCX0KKysgICAgICByZXR1cm4gInV6IjsKKysgICAgY2FzZSBMQU5HX1ZFTkRBOiByZXR1cm4gInZlX1pBIjsKKysgICAgY2FzZSBMQU5HX1ZJRVROQU1FU0U6IHJldHVybiAidmlfVk4iOworKyAgICBjYXNlIExBTkdfV0VMU0g6IHJldHVybiAiY3lfR0IiOworKyAgICBjYXNlIExBTkdfWEhPU0E6IHJldHVybiAieGhfWkEiOworKyAgICBjYXNlIExBTkdfWUk6IHJldHVybiAic2l0X0NOIjsKKysgICAgY2FzZSBMQU5HX1lJRERJU0g6IHJldHVybiAieWlfSUwiOworKyAgICBjYXNlIExBTkdfWU9SVUJBOiByZXR1cm4gInlvX05HIjsKKysgICAgY2FzZSBMQU5HX1pVTFU6IHJldHVybiAienVfWkEiOworKyAgICBkZWZhdWx0OiByZXR1cm4gIkMiOworKyAgICB9CisrCisrI2VuZGlmCisrfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2xvZy5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xvZy5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTE1NzIzNzY4IC0wNDAwCitAQCAtMCwwICsxLDk4IEBACisrLyogTG9nIGZpbGUgb3V0cHV0LgorKyAgIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrLyogV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworKy8qIFByaW50IGFuIEFTQ0lJIHN0cmluZyB3aXRoIHF1b3RlcyBhbmQgZXNjYXBlIHNlcXVlbmNlcyB3aGVyZSBuZWVkZWQuICAqLworK3N0YXRpYyB2b2lkCisrcHJpbnRfZXNjYXBlZCAoRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpzdHIpCisreworKyAgcHV0YyAoJyInLCBzdHJlYW0pOworKyAgZm9yICg7ICpzdHIgIT0gJ1wwJzsgc3RyKyspCisrICAgIGlmICgqc3RyID09ICdcbicpCisrICAgICAgeworKwlmcHV0cyAoIlxcblwiIiwgc3RyZWFtKTsKKysJaWYgKHN0clsxXSA9PSAnXDAnKQorKwkgIHJldHVybjsKKysJZnB1dHMgKCJcblwiIiwgc3RyZWFtKTsKKysgICAgICB9CisrICAgIGVsc2UKKysgICAgICB7CisrCWlmICgqc3RyID09ICciJyB8fCAqc3RyID09ICdcXCcpCisrCSAgcHV0YyAoJ1xcJywgc3RyZWFtKTsKKysJcHV0YyAoKnN0ciwgc3RyZWFtKTsKKysgICAgICB9CisrICBwdXRjICgnIicsIHN0cmVhbSk7CisrfQorKworKy8qIEFkZCB0byB0aGUgbG9nIGZpbGUgYW4gZW50cnkgZGVub3RpbmcgYSBmYWlsZWQgdHJhbnNsYXRpb24uICAqLworK3ZvaWQKKytfbmxfbG9nX3VudHJhbnNsYXRlZCAoY29uc3QgY2hhciAqbG9nZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCQkgICAgICBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwgaW50IHBsdXJhbCkKKyt7CisrICBzdGF0aWMgY2hhciAqbGFzdF9sb2dmaWxlbmFtZSA9IE5VTEw7CisrICBzdGF0aWMgRklMRSAqbGFzdF9sb2dmaWxlID0gTlVMTDsKKysgIEZJTEUgKmxvZ2ZpbGU7CisrCisrICAvKiBDYW4gd2UgcmV1c2UgdGhlIGxhc3Qgb3BlbmVkIGxvZ2ZpbGU/ICAqLworKyAgaWYgKGxhc3RfbG9nZmlsZW5hbWUgPT0gTlVMTCB8fCBzdHJjbXAgKGxvZ2ZpbGVuYW1lLCBsYXN0X2xvZ2ZpbGVuYW1lKSAhPSAwKQorKyAgICB7CisrICAgICAgLyogQ2xvc2UgdGhlIGxhc3QgdXNlZCBsb2dmaWxlLiAgKi8KKysgICAgICBpZiAobGFzdF9sb2dmaWxlbmFtZSAhPSBOVUxMKQorKwl7CisrCSAgaWYgKGxhc3RfbG9nZmlsZSAhPSBOVUxMKQorKwkgICAgeworKwkgICAgICBmY2xvc2UgKGxhc3RfbG9nZmlsZSk7CisrCSAgICAgIGxhc3RfbG9nZmlsZSA9IE5VTEw7CisrCSAgICB9CisrCSAgZnJlZSAobGFzdF9sb2dmaWxlbmFtZSk7CisrCSAgbGFzdF9sb2dmaWxlbmFtZSA9IE5VTEw7CisrCX0KKysgICAgICAvKiBPcGVuIHRoZSBsb2dmaWxlLiAgKi8KKysgICAgICBsYXN0X2xvZ2ZpbGVuYW1lID0gKGNoYXIgKikgbWFsbG9jIChzdHJsZW4gKGxvZ2ZpbGVuYW1lKSArIDEpOworKyAgICAgIGlmIChsYXN0X2xvZ2ZpbGVuYW1lID09IE5VTEwpCisrCXJldHVybjsKKysgICAgICBzdHJjcHkgKGxhc3RfbG9nZmlsZW5hbWUsIGxvZ2ZpbGVuYW1lKTsKKysgICAgICBsYXN0X2xvZ2ZpbGUgPSBmb3BlbiAobG9nZmlsZW5hbWUsICJhIik7CisrICAgICAgaWYgKGxhc3RfbG9nZmlsZSA9PSBOVUxMKQorKwlyZXR1cm47CisrICAgIH0KKysgIGxvZ2ZpbGUgPSBsYXN0X2xvZ2ZpbGU7CisrCisrICBmcHJpbnRmIChsb2dmaWxlLCAiZG9tYWluICIpOworKyAgcHJpbnRfZXNjYXBlZCAobG9nZmlsZSwgZG9tYWlubmFtZSk7CisrICBmcHJpbnRmIChsb2dmaWxlLCAiXG5tc2dpZCAiKTsKKysgIHByaW50X2VzY2FwZWQgKGxvZ2ZpbGUsIG1zZ2lkMSk7CisrICBpZiAocGx1cmFsKQorKyAgICB7CisrICAgICAgZnByaW50ZiAobG9nZmlsZSwgIlxubXNnaWRfcGx1cmFsICIpOworKyAgICAgIHByaW50X2VzY2FwZWQgKGxvZ2ZpbGUsIG1zZ2lkMik7CisrICAgICAgZnByaW50ZiAobG9nZmlsZSwgIlxubXNnc3RyWzBdIFwiXCJcbiIpOworKyAgICB9CisrICBlbHNlCisrICAgIGZwcmludGYgKGxvZ2ZpbGUsICJcbm1zZ3N0ciBcIlwiXG4iKTsKKysgIHB1dGMgKCdcbicsIGxvZ2ZpbGUpOworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9NYWtlZmlsZS5pbgkxOTk4LTA0LTI2IDA5OjIyOjM1LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9NYWtlZmlsZS5pbgkyMDA0LTA5LTEyIDE0OjQwOjM0LjUyMTcyMjg1NiAtMDQwMAorQEAgLTEsMTkgKzEsMjAgQEAKKy0jIE1ha2VmaWxlIGZvciBkaXJlY3Rvcnkgd2l0aCBtZXNzYWdlIGNhdGFsb2cgaGFuZGxpbmcgaW4gR05VIE5MUyBVdGlsaXRpZXMuCistIyBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyBNYWtlZmlsZSBmb3IgZGlyZWN0b3J5IHdpdGggbWVzc2FnZSBjYXRhbG9nIGhhbmRsaW5nIGxpYnJhcnkgb2YgR05VIGdldHRleHQKKysjIENvcHlyaWdodCAoQykgMTk5NS0xOTk4LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIworLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyMgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICMgYW55IGxhdGVyIHZlcnNpb24uCisgIworICMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrIyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAjCistIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0jIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrIyBVU0EuCisgCisgUEFDS0FHRSA9IEBQQUNLQUdFQAorIFZFUlNJT04gPSBAVkVSU0lPTkAKK0BAIC0yMywxMTggKzI0LDM0MSBAQAorIHNyY2RpciA9IEBzcmNkaXJACisgdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorIHRvcF9idWlsZGRpciA9IC4uCistVlBBVEggPSBAc3JjZGlyQAorKyNWUEFUSCA9ICQoc3JjZGlyKQorIAorIHByZWZpeCA9IEBwcmVmaXhACisgZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACisgdHJhbnNmb3JtID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACistbGliZGlyID0gJChleGVjX3ByZWZpeCkvbGliCistaW5jbHVkZWRpciA9ICQocHJlZml4KS9pbmNsdWRlCistZGF0YWRpciA9ICQocHJlZml4KS9AREFUQURJUk5BTUVACisrbGliZGlyID0gQGxpYmRpckAKKytpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACisrZGF0YWRpciA9IEBkYXRhZGlyQAorIGxvY2FsZWRpciA9ICQoZGF0YWRpcikvbG9jYWxlCistZ251bG9jYWxlZGlyID0gJChwcmVmaXgpL3NoYXJlL2xvY2FsZQorLWdldHRleHRzcmNkaXIgPSBAZGF0YWRpckAvZ2V0dGV4dC9pbnRsCistYWxpYXNwYXRoID0gJChsb2NhbGVkaXIpOi4KKytnZXR0ZXh0c3JjZGlyID0gJChkYXRhZGlyKS9nZXR0ZXh0L2ludGwKKythbGlhc3BhdGggPSAkKGxvY2FsZWRpcikKKyBzdWJkaXIgPSBpbnRsCisgCisgSU5TVEFMTCA9IEBJTlNUQUxMQAorIElOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACisgTUtJTlNUQUxMRElSUyA9IEBNS0lOU1RBTExESVJTQAorK21raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKE1LSU5TVEFMTERJUlMpCisgCistbCA9IEBsQAorK2wgPSBASU5UTF9MSUJUT09MX1NVRkZJWF9QUkVGSVhACisgCisgQVIgPSBhcgorIENDID0gQENDQAorIExJQlRPT0wgPSBATElCVE9PTEAKKyBSQU5MSUIgPSBAUkFOTElCQAorK1lBQ0MgPSBASU5UTEJJU09OQCAteSAtZAorK1lGTEFHUyA9IC0tbmFtZS1wcmVmaXg9X19nZXR0ZXh0CisgCistREVGUyA9IC1ETE9DQUxFRElSPVwiJChsb2NhbGVkaXIpXCIgLURHTlVMT0NBTEVESVI9XCIkKGdudWxvY2FsZWRpcilcIiBcCistLURMT0NBTEVfQUxJQVNfUEFUSD1cIiQoYWxpYXNwYXRoKVwiIEBERUZTQAorK0RFRlMgPSAtRExPQ0FMRURJUj1cIiQobG9jYWxlZGlyKVwiIC1ETE9DQUxFX0FMSUFTX1BBVEg9XCIkKGFsaWFzcGF0aClcIiBcCisrLURMSUJESVI9XCIkKGxpYmRpcilcIiAtRElOX0xJQklOVEwgXAorKy1ERU5BQkxFX1JFTE9DQVRBQkxFPTEgLURJTl9MSUJSQVJZIC1ESU5TVEFMTERJUj1cIiQobGliZGlyKVwiIC1ETk9fWE1BTExPQyBcCisrLURzZXRfcmVsb2NhdGlvbl9wcmVmaXg9bGliaW50bF9zZXRfcmVsb2NhdGlvbl9wcmVmaXggXAorKy1EcmVsb2NhdGU9bGliaW50bF9yZWxvY2F0ZSBcCisrLURERVBFTkRTX09OX0xJQklDT05WPTEgQERFRlNACisgQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACisgQ0ZMQUdTID0gQENGTEFHU0AKKyBMREZMQUdTID0gQExERkxBR1NACisrTElCUyA9IEBMSUJTQAorIAorIENPTVBJTEUgPSAkKENDKSAtYyAkKERFRlMpICQoSU5DTFVERVMpICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKSAkKFhDRkxBR1MpCisgCistSEVBREVSUyA9ICQoQ09NSERSUykgbGliZ2V0dGV4dC5oIGxvYWRpbmZvLmgKKy1DT01IRFJTID0gZ2V0dGV4dC5oIGdldHRleHRQLmggaGFzaC1zdHJpbmcuaAorLVNPVVJDRVMgPSAkKENPTVNSQ1MpIGludGwtY29tcGF0LmMgY2F0LWNvbXBhdC5jCistQ09NU1JDUyA9IGJpbmR0ZXh0ZG9tLmMgZGNnZXR0ZXh0LmMgZGdldHRleHQuYyBnZXR0ZXh0LmMgXAorLWZpbmRkb21haW4uYyBsb2FkbXNnY2F0LmMgbG9jYWxlYWxpYXMuYyB0ZXh0ZG9tYWluLmMgbDEwbmZsaXN0LmMgXAorLWV4cGxvZGVuYW1lLmMKKy1PQkpFQ1RTID0gQElOVExPQkpTQCBiaW5kdGV4dGRvbS4kbG8gZGNnZXR0ZXh0LiRsbyBkZ2V0dGV4dC4kbG8gZ2V0dGV4dC4kbG8gXAorLWZpbmRkb21haW4uJGxvIGxvYWRtc2djYXQuJGxvIGxvY2FsZWFsaWFzLiRsbyB0ZXh0ZG9tYWluLiRsbyBsMTBuZmxpc3QuJGxvIFwKKy1leHBsb2RlbmFtZS4kbG8KKy1DQVRPQkpTID0gY2F0LWNvbXBhdC4kbG8gLi4vcG8vY2F0LWlkLXRibC4kbG8KKy1HRVRUT0JKUyA9IGludGwtY29tcGF0LiRsbworLURJU1RGSUxFUy5jb21tb24gPSBDaGFuZ2VMb2cgTWFrZWZpbGUuaW4gbGludXgtbXNnLnNlZCBwbzJ0Ymwuc2VkLmluIFwKKy14b3Blbi1tc2cuc2VkICQoSEVBREVSUykgJChTT1VSQ0VTKQorK0hFQURFUlMgPSBcCisrICBnbW8uaCBcCisrICBnZXR0ZXh0UC5oIFwKKysgIGhhc2gtc3RyaW5nLmggXAorKyAgbG9hZGluZm8uaCBcCisrICBwbHVyYWwtZXhwLmggXAorKyAgZXZhbC1wbHVyYWwuaCBcCisrICBsb2NhbGNoYXJzZXQuaCBcCisrICByZWxvY2F0YWJsZS5oIFwKKysgIHhzaXplLmggXAorKyAgcHJpbnRmLWFyZ3MuaCBwcmludGYtYXJncy5jIFwKKysgIHByaW50Zi1wYXJzZS5oIHdwcmludGYtcGFyc2UuaCBwcmludGYtcGFyc2UuYyBcCisrICB2YXNucHJpbnRmLmggdmFzbndwcmludGYuaCB2YXNucHJpbnRmLmMgXAorKyAgb3MyY29tcGF0LmggXAorKyAgbGliZ251aW50bC5oLmluCisrU09VUkNFUyA9IFwKKysgIGJpbmR0ZXh0ZG9tLmMgXAorKyAgZGNnZXR0ZXh0LmMgXAorKyAgZGdldHRleHQuYyBcCisrICBnZXR0ZXh0LmMgXAorKyAgZmluZGRvbWFpbi5jIFwKKysgIGxvYWRtc2djYXQuYyBcCisrICBsb2NhbGVhbGlhcy5jIFwKKysgIHRleHRkb21haW4uYyBcCisrICBsMTBuZmxpc3QuYyBcCisrICBleHBsb2RlbmFtZS5jIFwKKysgIGRjaWdldHRleHQuYyBcCisrICBkY25nZXR0ZXh0LmMgXAorKyAgZG5nZXR0ZXh0LmMgXAorKyAgbmdldHRleHQuYyBcCisrICBwbHVyYWwueSBcCisrICBwbHVyYWwtZXhwLmMgXAorKyAgbG9jYWxjaGFyc2V0LmMgXAorKyAgcmVsb2NhdGFibGUuYyBcCisrICBsb2NhbGVuYW1lLmMgXAorKyAgbG9nLmMgXAorKyAgcHJpbnRmLmMgXAorKyAgb3NkZXAuYyBcCisrICBvczJjb21wYXQuYyBcCisrICBpbnRsLWNvbXBhdC5jCisrT0JKRUNUUyA9IFwKKysgIGJpbmR0ZXh0ZG9tLiRsbyBcCisrICBkY2dldHRleHQuJGxvIFwKKysgIGRnZXR0ZXh0LiRsbyBcCisrICBnZXR0ZXh0LiRsbyBcCisrICBmaW5kZG9tYWluLiRsbyBcCisrICBsb2FkbXNnY2F0LiRsbyBcCisrICBsb2NhbGVhbGlhcy4kbG8gXAorKyAgdGV4dGRvbWFpbi4kbG8gXAorKyAgbDEwbmZsaXN0LiRsbyBcCisrICBleHBsb2RlbmFtZS4kbG8gXAorKyAgZGNpZ2V0dGV4dC4kbG8gXAorKyAgZGNuZ2V0dGV4dC4kbG8gXAorKyAgZG5nZXR0ZXh0LiRsbyBcCisrICBuZ2V0dGV4dC4kbG8gXAorKyAgcGx1cmFsLiRsbyBcCisrICBwbHVyYWwtZXhwLiRsbyBcCisrICBsb2NhbGNoYXJzZXQuJGxvIFwKKysgIHJlbG9jYXRhYmxlLiRsbyBcCisrICBsb2NhbGVuYW1lLiRsbyBcCisrICBsb2cuJGxvIFwKKysgIHByaW50Zi4kbG8gXAorKyAgb3NkZXAuJGxvIFwKKysgIGludGwtY29tcGF0LiRsbworK0RJU1RGSUxFUy5jb21tb24gPSBNYWtlZmlsZS5pbiBcCisrY29uZmlnLmNoYXJzZXQgbG9jYWxlLmFsaWFzIHJlZi1hZGQuc2luIHJlZi1kZWwuc2luICQoSEVBREVSUykgJChTT1VSQ0VTKQorK0RJU1RGSUxFUy5nZW5lcmF0ZWQgPSBwbHVyYWwuYworIERJU1RGSUxFUy5ub3JtYWwgPSBWRVJTSU9OCistRElTVEZJTEVTLmdldHRleHQgPSBsaWJpbnRsLmdsaWJjIGludGxoLmluc3QuaW4KKytESVNURklMRVMuZ2V0dGV4dCA9IENPUFlJTkcuTElCLTIuMCBDT1BZSU5HLkxJQi0yLjEgbGliaW50bC5nbGliYyBcCisrbGliZ251aW50bC5oX3ZtcyBNYWtlZmlsZS52bXMgXAorK2xpYmdudWludGwuaC5tc3ZjLXN0YXRpYyBsaWJnbnVpbnRsLmgubXN2Yy1zaGFyZWQgUkVBRE1FLndvZTMyIE1ha2VmaWxlLm1zdmMKKytESVNURklMRVMub2Jzb2xldGUgPSB4b3Blbi1tc2cuc2VkIGxpbnV4LW1zZy5zZWQgcG8ydGJsLnNlZC5pbiBjYXQtY29tcGF0LmMgXAorK0NPUFlJTkcuTElCLTIgZ2V0dGV4dC5oIGxpYmdldHRleHQuaCBwbHVyYWwtZXZhbC5jIGxpYmdudWludGwuaAorKworK2FsbDogYWxsLUBVU0VfSU5DTFVERURfTElCSU5UTEAKKythbGwteWVzOiBsaWJpbnRsLiRsYSBsaWJpbnRsLmggY2hhcnNldC5hbGlhcyByZWYtYWRkLnNlZCByZWYtZGVsLnNlZAorK2FsbC1ubzogYWxsLW5vLUBCVUlMRF9JTkNMVURFRF9MSUJJTlRMQAorK2FsbC1uby15ZXM6IGxpYmdudWludGwuJGxhCisrYWxsLW5vLW5vOgorKworK2xpYmludGwuYSBsaWJnbnVpbnRsLmE6ICQoT0JKRUNUUykKKysJcm0gLWYgJEAKKysJJChBUikgY3J1ICRAICQoT0JKRUNUUykKKysJJChSQU5MSUIpICRACisrCisrbGliaW50bC5sYSBsaWJnbnVpbnRsLmxhOiAkKE9CSkVDVFMpCisrCSQoTElCVE9PTCkgLS1tb2RlPWxpbmsgXAorKwkgICQoQ0MpICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKSAkKFhDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgXAorKwkgICQoT0JKRUNUUykgQExUTElCSUNPTlZAICQoTElCUykgLWxjIFwKKysJICAtdmVyc2lvbi1pbmZvICQoTFRWX0NVUlJFTlQpOiQoTFRWX1JFVklTSU9OKTokKExUVl9BR0UpIFwKKysJICAtcnBhdGggJChsaWJkaXIpIFwKKysJICAtbm8tdW5kZWZpbmVkCisrCisrIyBMaWJ0b29sJ3MgbGlicmFyeSB2ZXJzaW9uIGluZm9ybWF0aW9uIGZvciBsaWJpbnRsLgorKyMgQmVmb3JlIG1ha2luZyBhIGdldHRleHQgcmVsZWFzZSwgdGhlIGdldHRleHQgbWFpbnRhaW5lciBtdXN0IGNoYW5nZSB0aGlzCisrIyBhY2NvcmRpbmcgdG8gdGhlIGxpYnRvb2wgZG9jdW1lbnRhdGlvbiwgc2VjdGlvbiAiTGlicmFyeSBpbnRlcmZhY2UgdmVyc2lvbnMiLgorKyMgTWFpbnRhaW5lcnMgb2Ygb3RoZXIgcGFja2FnZXMgdGhhdCBpbmNsdWRlIHRoZSBpbnRsIGRpcmVjdG9yeSBtdXN0ICpub3QqCisrIyBjaGFuZ2UgdGhlc2UgdmFsdWVzLgorK0xUVl9DVVJSRU5UPTcKKytMVFZfUkVWSVNJT049MAorK0xUVl9BR0U9NAorIAorIC5TVUZGSVhFUzoKKy0uU1VGRklYRVM6IC5jIC5vIC5sbworKy5TVUZGSVhFUzogLmMgLnkgLm8gLmxvIC5zaW4gLnNlZAorKworIC5jLm86CisgCSQoQ09NUElMRSkgJDwKKy0uYy5sbzoKKy0JJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQ8CisgCistSU5DTFVERVMgPSAtSS4uIC1JLiAtSSQodG9wX3NyY2RpcikvaW50bCAtSSQodG9wX3NyY2RpcikvbGliCisrLnkuYzoKKysJJChZQUNDKSAkKFlGTEFHUykgLS1vdXRwdXQgJEAgJDwKKysJcm0gLWYgJCouaAorIAorLWFsbDogYWxsLUBVU0VfSU5DTFVERURfTElCSU5UTEAKKytiaW5kdGV4dGRvbS5sbzogJChzcmNkaXIpL2JpbmR0ZXh0ZG9tLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9iaW5kdGV4dGRvbS5jCisrZGNnZXR0ZXh0LmxvOiAkKHNyY2RpcikvZGNnZXR0ZXh0LmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9kY2dldHRleHQuYworK2RnZXR0ZXh0LmxvOiAkKHNyY2RpcikvZGdldHRleHQuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2RnZXR0ZXh0LmMKKytnZXR0ZXh0LmxvOiAkKHNyY2RpcikvZ2V0dGV4dC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvZ2V0dGV4dC5jCisrZmluZGRvbWFpbi5sbzogJChzcmNkaXIpL2ZpbmRkb21haW4uYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2ZpbmRkb21haW4uYworK2xvYWRtc2djYXQubG86ICQoc3JjZGlyKS9sb2FkbXNnY2F0LmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9sb2FkbXNnY2F0LmMKKytsb2NhbGVhbGlhcy5sbzogJChzcmNkaXIpL2xvY2FsZWFsaWFzLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9sb2NhbGVhbGlhcy5jCisrdGV4dGRvbWFpbi5sbzogJChzcmNkaXIpL3RleHRkb21haW4uYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL3RleHRkb21haW4uYworK2wxMG5mbGlzdC5sbzogJChzcmNkaXIpL2wxMG5mbGlzdC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbDEwbmZsaXN0LmMKKytleHBsb2RlbmFtZS5sbzogJChzcmNkaXIpL2V4cGxvZGVuYW1lLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9leHBsb2RlbmFtZS5jCisrZGNpZ2V0dGV4dC5sbzogJChzcmNkaXIpL2RjaWdldHRleHQuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2RjaWdldHRleHQuYworK2RjbmdldHRleHQubG86ICQoc3JjZGlyKS9kY25nZXR0ZXh0LmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9kY25nZXR0ZXh0LmMKKytkbmdldHRleHQubG86ICQoc3JjZGlyKS9kbmdldHRleHQuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2RuZ2V0dGV4dC5jCisrbmdldHRleHQubG86ICQoc3JjZGlyKS9uZ2V0dGV4dC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbmdldHRleHQuYworK3BsdXJhbC5sbzogJChzcmNkaXIpL3BsdXJhbC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvcGx1cmFsLmMKKytwbHVyYWwtZXhwLmxvOiAkKHNyY2RpcikvcGx1cmFsLWV4cC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvcGx1cmFsLWV4cC5jCisrbG9jYWxjaGFyc2V0LmxvOiAkKHNyY2RpcikvbG9jYWxjaGFyc2V0LmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9sb2NhbGNoYXJzZXQuYworK3JlbG9jYXRhYmxlLmxvOiAkKHNyY2RpcikvcmVsb2NhdGFibGUuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL3JlbG9jYXRhYmxlLmMKKytsb2NhbGVuYW1lLmxvOiAkKHNyY2RpcikvbG9jYWxlbmFtZS5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbG9jYWxlbmFtZS5jCisrbG9nLmxvOiAkKHNyY2RpcikvbG9nLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9sb2cuYworK3ByaW50Zi5sbzogJChzcmNkaXIpL3ByaW50Zi5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvcHJpbnRmLmMKKytvc2RlcC5sbzogJChzcmNkaXIpL29zZGVwLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9vc2RlcC5jCisraW50bC1jb21wYXQubG86ICQoc3JjZGlyKS9pbnRsLWNvbXBhdC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvaW50bC1jb21wYXQuYworIAorLWFsbC15ZXM6IGxpYmludGwuJGxhIGludGxoLmluc3QKKy1hbGwtbm86CisrcmVmLWFkZC5zZWQ6ICQoc3JjZGlyKS9yZWYtYWRkLnNpbgorKwlzZWQgLWUgJy9eIy9kJyAtZSAncy9AJydQQUNLQUdFJydAL0BQQUNLQUdFQC9nJyAkKHNyY2RpcikvcmVmLWFkZC5zaW4gPiB0LXJlZi1hZGQuc2VkCisrCW12IHQtcmVmLWFkZC5zZWQgcmVmLWFkZC5zZWQKKytyZWYtZGVsLnNlZDogJChzcmNkaXIpL3JlZi1kZWwuc2luCisrCXNlZCAtZSAnL14jL2QnIC1lICdzL0AnJ1BBQ0tBR0UnJ0AvQFBBQ0tBR0VAL2cnICQoc3JjZGlyKS9yZWYtZGVsLnNpbiA+IHQtcmVmLWRlbC5zZWQKKysJbXYgdC1yZWYtZGVsLnNlZCByZWYtZGVsLnNlZAorIAorLWxpYmludGwuYTogJChPQkpFQ1RTKQorLQlybSAtZiAkQAorLQkkKEFSKSBjcnUgJEAgJChPQkpFQ1RTKQorLQkkKFJBTkxJQikgJEAKKytJTkNMVURFUyA9IC1JLiAtSSQoc3JjZGlyKSAtSS4uCisgCistbGliaW50bC5sYTogJChPQkpFQ1RTKQorLQkkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpICQoTERGTEFHUykgLW8gJEAgJChPQkpFQ1RTKSBcCistCQkgICAtdmVyc2lvbi1pbmZvIDE6MCAtcnBhdGggJChsaWJkaXIpCisrbGliZ251aW50bC5oOiAkKHNyY2RpcikvbGliZ251aW50bC5oLmluCisrCXNlZCAtZSAncyxAJydIQVZFX1BPU0lYX1BSSU5URicnQCxASEFWRV9QT1NJWF9QUklOVEZALGcnIFwKKysJICAgIC1lICdzLEAnJ0hBVkVfQVNQUklOVEYnJ0AsQEhBVkVfQVNQUklOVEZALGcnIFwKKysJICAgIC1lICdzLEAnJ0hBVkVfU05QUklOVEYnJ0AsQEhBVkVfU05QUklOVEZALGcnIFwKKysJICAgIC1lICdzLEAnJ0hBVkVfV1BSSU5URicnQCxASEFWRV9XUFJJTlRGQCxnJyBcCisrCSAgPCAkKHNyY2RpcikvbGliZ251aW50bC5oLmluID4gbGliZ251aW50bC5oCisgCistLi4vcG8vY2F0LWlkLXRibC4kbG86IC4uL3BvL2NhdC1pZC10YmwuYyAkKHRvcF9zcmNkaXIpL3BvLyQoUEFDS0FHRSkucG90CistCWNkIC4uL3BvICYmICQoTUFLRSkgY2F0LWlkLXRibC4kbG8KKytsaWJpbnRsLmg6IGxpYmdudWludGwuaAorKwljcCBsaWJnbnVpbnRsLmggbGliaW50bC5oCisgCistY2hlY2s6IGFsbAorK2NoYXJzZXQuYWxpYXM6ICQoc3JjZGlyKS9jb25maWcuY2hhcnNldAorKwkkKFNIRUxMKSAkKHNyY2RpcikvY29uZmlnLmNoYXJzZXQgJ0Bob3N0QCcgPiB0LSRACisrCW12IHQtJEAgJEAKKyAKKy0jIFRoaXMgaW5zdGFsbGF0aW9uIGdvYWwgaXMgb25seSB1c2VkIGluIEdOVSBnZXR0ZXh0LiAgUGFja2FnZXMgd2hpY2gKKy0jIG9ubHkgdXNlIHRoZSBsaWJyYXJ5IHNob3VsZCB1c2UgaW5zdGFsbCBpbnN0ZWFkLgorK2NoZWNrOiBhbGwKKyAKKyAjIFdlIG11c3Qgbm90IGluc3RhbGwgdGhlIGxpYmludGwuaC9saWJpbnRsLmEgZmlsZXMgaWYgd2UgYXJlIG9uIGEKKy0jIHN5c3RlbSB3aGljaCBoYXMgdGhlIGdldHRleHQoKSBmdW5jdGlvbiBpbiBpdHMgQyBsaWJyYXJ5IG9yIGluIGEKKy0jIHNlcGFyYXRlIGxpYnJhcnkgb3IgdXNlIHRoZSBjYXRnZXRzIGludGVyZmFjZS4gIEEgc3BlY2lhbCBjYXNlIGlzCistIyB3aGVyZSBjb25maWd1cmUgZm91bmQgYSBwcmV2aW91c2x5IGluc3RhbGxlZCBHTlUgZ2V0dGV4dCBsaWJyYXJ5LgorKyMgc3lzdGVtIHdoaWNoIGhhcyB0aGUgR05VIGdldHRleHQoKSBmdW5jdGlvbiBpbiBpdHMgQyBsaWJyYXJ5IG9yIGluIGEKKysjIHNlcGFyYXRlIGxpYnJhcnkuCisgIyBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIG9uZSB3aGljaCBjb21lcyB3aXRoIHRoaXMgdmVyc2lvbiBvZiB0aGUKKyAjIHBhY2thZ2UsIHlvdSBoYXZlIHRvIHVzZSBgY29uZmlndXJlIC0td2l0aC1pbmNsdWRlZC1nZXR0ZXh0Jy4KKyBpbnN0YWxsOiBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1kYXRhCisgaW5zdGFsbC1leGVjOiBhbGwKKy0JaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dCIgXAorLQkgICAmJiB0ZXN0ICdASU5UTE9CSlNAJyA9ICckKEdFVFRPQkpTKSc7IHRoZW4gXAorLQkgIGlmIHRlc3QgLXIgJChNS0lOU1RBTExESVJTKTsgdGhlbiBcCistCSAgICAkKE1LSU5TVEFMTERJUlMpICQobGliZGlyKSAkKGluY2x1ZGVkaXIpOyBcCistCSAgZWxzZSBcCistCSAgICAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChsaWJkaXIpICQoaW5jbHVkZWRpcik7IFwKKysJaWYgeyB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXJ1bnRpbWUiIHx8IHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB9IFwKKysJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKSAkKERFU1RESVIpJChpbmNsdWRlZGlyKTsgXAorKwkgICQoSU5TVEFMTF9EQVRBKSBsaWJpbnRsLmggJChERVNURElSKSQoaW5jbHVkZWRpcikvbGliaW50bC5oOyBcCisrCSAgJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCBcCisrCSAgICAkKElOU1RBTExfREFUQSkgbGliaW50bC4kbGEgJChERVNURElSKSQobGliZGlyKS9saWJpbnRsLiRsYTsgXAorKwkgIGlmIHRlc3QgIkBSRUxPQ0FUQUJMRUAiID0geWVzOyB0aGVuIFwKKysJICAgIGRlcGVuZGVuY2llcz1gc2VkIC1uIC1lICdzLF5kZXBlbmRlbmN5X2xpYnM9XCguKlwpLFwxLHAnIDwgJChERVNURElSKSQobGliZGlyKS9saWJpbnRsLmxhIHwgc2VkIC1lICJzLF4nLCwiIC1lICJzLCdcJCQsLCJgOyBcCisrCSAgICBpZiB0ZXN0IC1uICIkJGRlcGVuZGVuY2llcyI7IHRoZW4gXAorKwkgICAgICBybSAtZiAkKERFU1RESVIpJChsaWJkaXIpL2xpYmludGwubGE7IFwKKysJICAgIGZpOyBcCisgCSAgZmk7IFwKKy0JICAkKElOU1RBTExfREFUQSkgaW50bGguaW5zdCAkKGluY2x1ZGVkaXIpL2xpYmludGwuaDsgXAorLQkgICQoSU5TVEFMTF9EQVRBKSBsaWJpbnRsLmEgJChsaWJkaXIpL2xpYmludGwuYTsgXAorIAllbHNlIFwKKyAJICA6IDsgXAorIAlmaQorLWluc3RhbGwtZGF0YTogYWxsCistCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQiOyB0aGVuIFwKKy0JICBpZiB0ZXN0IC1yICQoTUtJTlNUQUxMRElSUyk7IHRoZW4gXAorLQkgICAgJChNS0lOU1RBTExESVJTKSAkKGdldHRleHRzcmNkaXIpOyBcCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiIFwKKysJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSBubzsgdGhlbiBcCisrCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsaWJkaXIpOyBcCisrCSAgJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCBcCisrCSAgICAkKElOU1RBTExfREFUQSkgbGliZ251aW50bC4kbGEgJChERVNURElSKSQobGliZGlyKS9saWJnbnVpbnRsLiRsYTsgXAorKwkgIHJtIC1mICQoREVTVERJUikkKGxpYmRpcikvcHJlbG9hZGFibGVfbGliaW50bC5zbzsgXAorKwkgICQoSU5TVEFMTF9EQVRBKSAkKERFU1RESVIpJChsaWJkaXIpL2xpYmdudWludGwuc28gJChERVNURElSKSQobGliZGlyKS9wcmVsb2FkYWJsZV9saWJpbnRsLnNvOyBcCisrCSAgJChMSUJUT09MKSAtLW1vZGU9dW5pbnN0YWxsIFwKKysJICAgIHJtIC1mICQoREVTVERJUikkKGxpYmRpcikvbGliZ251aW50bC4kbGE7IFwKKysJZWxzZSBcCisrCSAgOiA7IFwKKysJZmkKKysJaWYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorKwkgIHRlc3QgQEdMSUJDMjFAICE9IG5vIHx8ICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKTsgXAorKwkgIHRlbXA9JChERVNURElSKSQobGliZGlyKS90LWNoYXJzZXQuYWxpYXM7IFwKKysJICBkZXN0PSQoREVTVERJUikkKGxpYmRpcikvY2hhcnNldC5hbGlhczsgXAorKwkgIGlmIHRlc3QgLWYgJChERVNURElSKSQobGliZGlyKS9jaGFyc2V0LmFsaWFzOyB0aGVuIFwKKysJICAgIG9yaWc9JChERVNURElSKSQobGliZGlyKS9jaGFyc2V0LmFsaWFzOyBcCisrCSAgICBzZWQgLWYgcmVmLWFkZC5zZWQgJCRvcmlnID4gJCR0ZW1wOyBcCisrCSAgICAkKElOU1RBTExfREFUQSkgJCR0ZW1wICQkZGVzdDsgXAorKwkgICAgcm0gLWYgJCR0ZW1wOyBcCisgCSAgZWxzZSBcCistCSAgICAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChnZXR0ZXh0c3JjZGlyKTsgXAorKwkgICAgaWYgdGVzdCBAR0xJQkMyMUAgPSBubzsgdGhlbiBcCisrCSAgICAgIG9yaWc9Y2hhcnNldC5hbGlhczsgXAorKwkgICAgICBzZWQgLWYgcmVmLWFkZC5zZWQgJCRvcmlnID4gJCR0ZW1wOyBcCisrCSAgICAgICQoSU5TVEFMTF9EQVRBKSAkJHRlbXAgJCRkZXN0OyBcCisrCSAgICAgIHJtIC1mICQkdGVtcDsgXAorKwkgICAgZmk7IFwKKyAJICBmaTsgXAorLQkgICQoSU5TVEFMTF9EQVRBKSBWRVJTSU9OICQoZ2V0dGV4dHNyY2RpcikvVkVSU0lPTjsgXAorLQkgIGRpc3RzPSIkKERJU1RGSUxFUy5jb21tb24pIjsgXAorKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobG9jYWxlZGlyKTsgXAorKwkgIHRlc3QgLWYgJChERVNURElSKSQobG9jYWxlZGlyKS9sb2NhbGUuYWxpYXMgXAorKwkgICAgJiYgb3JpZz0kKERFU1RESVIpJChsb2NhbGVkaXIpL2xvY2FsZS5hbGlhcyBcCisrCSAgICB8fCBvcmlnPSQoc3JjZGlyKS9sb2NhbGUuYWxpYXM7IFwKKysJICB0ZW1wPSQoREVTVERJUikkKGxvY2FsZWRpcikvdC1sb2NhbGUuYWxpYXM7IFwKKysJICBkZXN0PSQoREVTVERJUikkKGxvY2FsZWRpcikvbG9jYWxlLmFsaWFzOyBcCisrCSAgc2VkIC1mIHJlZi1hZGQuc2VkICQkb3JpZyA+ICQkdGVtcDsgXAorKwkgICQoSU5TVEFMTF9EQVRBKSAkJHRlbXAgJCRkZXN0OyBcCisrCSAgcm0gLWYgJCR0ZW1wOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisraW5zdGFsbC1kYXRhOiBhbGwKKysJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQoZ2V0dGV4dHNyY2Rpcik7IFwKKysJICAkKElOU1RBTExfREFUQSkgVkVSU0lPTiAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS9WRVJTSU9OOyBcCisrCSAgJChJTlNUQUxMX0RBVEEpIENoYW5nZUxvZy5pbnN0ICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpL0NoYW5nZUxvZzsgXAorKwkgIGRpc3RzPSJDT1BZSU5HLkxJQi0yLjAgQ09QWUlORy5MSUItMi4xICQoRElTVEZJTEVTLmNvbW1vbikiOyBcCisgCSAgZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorLQkgICAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGZpbGUgJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKysJICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRmaWxlIFwKKysJCQkgICAgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisgCSAgZG9uZTsgXAorKwkgIGNobW9kIGEreCAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS9jb25maWcuY2hhcnNldDsgXAorKwkgIGRpc3RzPSIkKERJU1RGSUxFUy5nZW5lcmF0ZWQpIjsgXAorKwkgIGZvciBmaWxlIGluICQkZGlzdHM7IGRvIFwKKysJICAgIGlmIHRlc3QgLWYgJCRmaWxlOyB0aGVuIGRpcj0uOyBlbHNlIGRpcj0kKHNyY2Rpcik7IGZpOyBcCisrCSAgICAkKElOU1RBTExfREFUQSkgJCRkaXIvJCRmaWxlIFwKKysJCQkgICAgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisrCSAgZG9uZTsgXAorKwkgIGRpc3RzPSIkKERJU1RGSUxFUy5vYnNvbGV0ZSkiOyBcCisrCSAgZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorKwkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisrCSAgZG9uZTsgXAorKwllbHNlIFwKKysJICA6IDsgXAorKwlmaQorKworK2luc3RhbGwtc3RyaXA6IGluc3RhbGwKKysKKytpbnN0YWxsZGlyczoKKysJaWYgeyB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXJ1bnRpbWUiIHx8IHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB9IFwKKysJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKSAkKERFU1RESVIpJChpbmNsdWRlZGlyKTsgXAorKwllbHNlIFwKKysJICA6IDsgXAorKwlmaQorKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIiBcCisrCSAgICYmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0gbm87IHRoZW4gXAorKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKTsgXAorKwllbHNlIFwKKysJICA6IDsgXAorKwlmaQorKwlpZiB0ZXN0ICdAVVNFX0lOQ0xVREVEX0xJQklOVExAJyA9IHllczsgdGhlbiBcCisrCSAgdGVzdCBAR0xJQkMyMUAgIT0gbm8gfHwgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsaWJkaXIpOyBcCisrCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsb2NhbGVkaXIpOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKysJICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpOyBcCisgCWVsc2UgXAorIAkgIDogOyBcCisgCWZpCitAQCAtMTQzLDIyICszNjcsNzYgQEAKKyBpbnN0YWxsY2hlY2s6CisgCisgdW5pbnN0YWxsOgorLQlkaXN0cz0iJChESVNURklMRVMuY29tbW9uKSI7IFwKKy0JZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorLQkgIHJtIC1mICQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCistCWRvbmUKKysJaWYgeyB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXJ1bnRpbWUiIHx8IHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB9IFwKKysJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorKwkgIHJtIC1mICQoREVTVERJUikkKGluY2x1ZGVkaXIpL2xpYmludGwuaDsgXAorKwkgICQoTElCVE9PTCkgLS1tb2RlPXVuaW5zdGFsbCBcCisrCSAgICBybSAtZiAkKERFU1RESVIpJChsaWJkaXIpL2xpYmludGwuJGxhOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiIFwKKysJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSBubzsgdGhlbiBcCisrCSAgcm0gLWYgJChERVNURElSKSQobGliZGlyKS9wcmVsb2FkYWJsZV9saWJpbnRsLnNvOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisrCWlmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0geWVzOyB0aGVuIFwKKysJICBpZiB0ZXN0IC1mICQoREVTVERJUikkKGxpYmRpcikvY2hhcnNldC5hbGlhczsgdGhlbiBcCisrCSAgICB0ZW1wPSQoREVTVERJUikkKGxpYmRpcikvdC1jaGFyc2V0LmFsaWFzOyBcCisrCSAgICBkZXN0PSQoREVTVERJUikkKGxpYmRpcikvY2hhcnNldC5hbGlhczsgXAorKwkgICAgc2VkIC1mIHJlZi1kZWwuc2VkICQkZGVzdCA+ICQkdGVtcDsgXAorKwkgICAgaWYgZ3JlcCAnXiMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAkJCcgJCR0ZW1wID4gL2Rldi9udWxsOyB0aGVuIFwKKysJICAgICAgcm0gLWYgJCRkZXN0OyBcCisrCSAgICBlbHNlIFwKKysJICAgICAgJChJTlNUQUxMX0RBVEEpICQkdGVtcCAkJGRlc3Q7IFwKKysJICAgIGZpOyBcCisrCSAgICBybSAtZiAkJHRlbXA7IFwKKysJICBmaTsgXAorKwkgIGlmIHRlc3QgLWYgJChERVNURElSKSQobG9jYWxlZGlyKS9sb2NhbGUuYWxpYXM7IHRoZW4gXAorKwkgICAgdGVtcD0kKERFU1RESVIpJChsb2NhbGVkaXIpL3QtbG9jYWxlLmFsaWFzOyBcCisrCSAgICBkZXN0PSQoREVTVERJUikkKGxvY2FsZWRpcikvbG9jYWxlLmFsaWFzOyBcCisrCSAgICBzZWQgLWYgcmVmLWRlbC5zZWQgJCRkZXN0ID4gJCR0ZW1wOyBcCisrCSAgICBpZiBncmVwICdeIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6ICQkJyAkJHRlbXAgPiAvZGV2L251bGw7IHRoZW4gXAorKwkgICAgICBybSAtZiAkJGRlc3Q7IFwKKysJICAgIGVsc2UgXAorKwkgICAgICAkKElOU1RBTExfREFUQSkgJCR0ZW1wICQkZGVzdDsgXAorKwkgICAgZmk7IFwKKysJICAgIHJtIC1mICQkdGVtcDsgXAorKwkgIGZpOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKysJICBmb3IgZmlsZSBpbiBWRVJTSU9OIENoYW5nZUxvZyBDT1BZSU5HLkxJQi0yLjAgQ09QWUlORy5MSUItMi4xICQoRElTVEZJTEVTLmNvbW1vbikgJChESVNURklMRVMuZ2VuZXJhdGVkKTsgZG8gXAorKwkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisrCSAgZG9uZTsgXAorKwllbHNlIFwKKysJICA6IDsgXAorKwlmaQorIAorLWluZm8gZHZpOgorK2luZm8gZHZpIHBzIHBkZiBodG1sOgorIAorLSQoT0JKRUNUUyk6IC4uL2NvbmZpZy5oIGxpYmdldHRleHQuaAorLWJpbmR0ZXh0ZG9tLiRsbyBmaW5kZG9tYWluLiRsbyBsb2FkbXNnY2F0LiRsbzogZ2V0dGV4dFAuaCBnZXR0ZXh0LmggbG9hZGluZm8uaAorLWRjZ2V0dGV4dC4kbG86IGdldHRleHRQLmggZ2V0dGV4dC5oIGhhc2gtc3RyaW5nLmggbG9hZGluZm8uaAorKyQoT0JKRUNUUyk6IC4uL2NvbmZpZy5oIGxpYmdudWludGwuaAorK2JpbmR0ZXh0ZG9tLiRsbyBkY2dldHRleHQuJGxvIGRjaWdldHRleHQuJGxvIGRjbmdldHRleHQuJGxvIGRnZXR0ZXh0LiRsbyBkbmdldHRleHQuJGxvIGZpbmRkb21haW4uJGxvIGdldHRleHQuJGxvIGludGwtY29tcGF0LiRsbyBsb2FkbXNnY2F0LiRsbyBsb2NhbGVhbGlhcy4kbG8gbmdldHRleHQuJGxvIHRleHRkb21haW4uJGxvOiAkKHNyY2RpcikvZ2V0dGV4dFAuaCAkKHNyY2RpcikvZ21vLmggJChzcmNkaXIpL2xvYWRpbmZvLmgKKytkY2lnZXR0ZXh0LiRsbyBsb2FkbXNnY2F0LiRsbzogJChzcmNkaXIpL2hhc2gtc3RyaW5nLmgKKytleHBsb2RlbmFtZS4kbG8gbDEwbmZsaXN0LiRsbzogJChzcmNkaXIpL2xvYWRpbmZvLmgKKytkY2lnZXR0ZXh0LiRsbyBsb2FkbXNnY2F0LiRsbyBwbHVyYWwuJGxvIHBsdXJhbC1leHAuJGxvOiAkKHNyY2RpcikvcGx1cmFsLWV4cC5oCisrZGNpZ2V0dGV4dC4kbG86ICQoc3JjZGlyKS9ldmFsLXBsdXJhbC5oCisrbG9jYWxjaGFyc2V0LiRsbzogJChzcmNkaXIpL2xvY2FsY2hhcnNldC5oCisrbG9jYWxlYWxpYXMuJGxvIGxvY2FsY2hhcnNldC4kbG8gcmVsb2NhdGFibGUuJGxvOiAkKHNyY2RpcikvcmVsb2NhdGFibGUuaAorK3ByaW50Zi4kbG86ICQoc3JjZGlyKS9wcmludGYtYXJncy5oICQoc3JjZGlyKS9wcmludGYtYXJncy5jICQoc3JjZGlyKS9wcmludGYtcGFyc2UuaCAkKHNyY2Rpcikvd3ByaW50Zi1wYXJzZS5oICQoc3JjZGlyKS94c2l6ZS5oICQoc3JjZGlyKS9wcmludGYtcGFyc2UuYyAkKHNyY2RpcikvdmFzbnByaW50Zi5oICQoc3JjZGlyKS92YXNud3ByaW50Zi5oICQoc3JjZGlyKS92YXNucHJpbnRmLmMKKyAKKyB0YWdzOiBUQUdTCisgCisgVEFHUzogJChIRUFERVJTKSAkKFNPVVJDRVMpCisgCWhlcmU9YHB3ZGA7IGNkICQoc3JjZGlyKSAmJiBldGFncyAtbyAkJGhlcmUvVEFHUyAkKEhFQURFUlMpICQoU09VUkNFUykKKyAKKytjdGFnczogQ1RBR1MKKysKKytDVEFHUzogJChIRUFERVJTKSAkKFNPVVJDRVMpCisrCWhlcmU9YHB3ZGA7IGNkICQoc3JjZGlyKSAmJiBjdGFncyAtbyAkJGhlcmUvQ1RBR1MgJChIRUFERVJTKSAkKFNPVVJDRVMpCisrCisgaWQ6IElECisgCisgSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKQorQEAgLTE2NiwxMiArNDQ0LDE5IEBACisgCisgCisgbW9zdGx5Y2xlYW46CistCXJtIC1mICouYSAqLm8gKi5sbyBjb3JlIGNvcmUuKgorKwlybSAtZiAqLmEgKi5sYSAqLm8gKi5vYmogKi5sbyBjb3JlIGNvcmUuKgorKwlybSAtZiBsaWJnbnVpbnRsLmggbGliaW50bC5oIGNoYXJzZXQuYWxpYXMgcmVmLWFkZC5zZWQgcmVmLWRlbC5zZWQKKysJcm0gLWYgLXIgLmxpYnMgX2xpYnMKKyAKKyBjbGVhbjogbW9zdGx5Y2xlYW4KKyAKKyBkaXN0Y2xlYW46IGNsZWFuCistCXJtIC1mIE1ha2VmaWxlIElEIFRBR1MgcG8ybXNnLnNlZCBwbzJ0Ymwuc2VkIGxpYmludGwuaAorKwlybSAtZiBNYWtlZmlsZSBJRCBUQUdTCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtcnVudGltZSIgfHwgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorKwkgIHJtIC1mIENoYW5nZUxvZy5pbnN0ICQoRElTVEZJTEVTLm5vcm1hbCk7IFwKKysJZWxzZSBcCisrCSAgOiA7IFwKKysJZmkKKyAKKyBtYWludGFpbmVyLWNsZWFuOiBkaXN0Y2xlYW4KKyAJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlOyIKK0BAIC0xODEsMzMgKzQ2NiwyNyBAQAorICMgR05VIGdldHRleHQgbmVlZHMgbm90IGNvbnRhaW4gdGhlIGZpbGUgYFZFUlNJT04nIGJ1dCBjb250YWlucyBzb21lCisgIyBvdGhlciBmaWxlcyB3aGljaCBzaG91bGQgbm90IGJlIGRpc3RyaWJ1dGVkIGluIG90aGVyIHBhY2thZ2VzLgorIGRpc3RkaXIgPSAuLi8kKFBBQ0tBR0UpLSQoVkVSU0lPTikvJChzdWJkaXIpCistZGlzdCBkaXN0ZGlyOiBNYWtlZmlsZSAkKERJU1RGSUxFUykKKy0JaWYgdGVzdCAiJChQQUNLQUdFKSIgPSBnZXR0ZXh0OyB0aGVuIFwKKy0JICBhZGRpdGlvbmFsPSIkKERJU1RGSUxFUy5nZXR0ZXh0KSI7IFwKKytkaXN0IGRpc3RkaXI6IE1ha2VmaWxlCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKysJICA6IDsgXAorIAllbHNlIFwKKy0JICBhZGRpdGlvbmFsPSIkKERJU1RGSUxFUy5ub3JtYWwpIjsgXAorLQlmaTsgXAorLQlmb3IgZmlsZSBpbiAkKERJU1RGSUxFUy5jb21tb24pICQkYWRkaXRpb25hbDsgZG8gXAorLQkgIGxuICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSAyPiAvZGV2L251bGwgXAorLQkgICAgfHwgY3AgLXAgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpOyBcCistCWRvbmUKKy0KKy1kaXN0LWxpYmM6CistCXRhciB6Y3ZmIGludGwtZ2xpYmMudGFyLmd6ICQoQ09NU1JDUykgJChDT01IRFJTKSBsaWJpbnRsLmguZ2xpYmMKKy0KKy1NYWtlZmlsZTogTWFrZWZpbGUuaW4gLi4vY29uZmlnLnN0YXR1cworLQljZCAuLiBcCistCSAgJiYgQ09ORklHX0ZJTEVTPSQoc3ViZGlyKS8kQCBDT05GSUdfSEVBREVSUz0gJChTSEVMTCkgLi9jb25maWcuc3RhdHVzCisrCSAgaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC1ydW50aW1lIjsgdGhlbiBcCisrCSAgICBhZGRpdGlvbmFsPSIkKERJU1RGSUxFUy5nZXR0ZXh0KSI7IFwKKysJICBlbHNlIFwKKysJICAgIGFkZGl0aW9uYWw9IiQoRElTVEZJTEVTLm5vcm1hbCkiOyBcCisrCSAgZmk7IFwKKysJICAkKE1BS0UpICQoRElTVEZJTEVTLmNvbW1vbikgJChESVNURklMRVMuZ2VuZXJhdGVkKSAkJGFkZGl0aW9uYWw7IFwKKysJICBmb3IgZmlsZSBpbiBDaGFuZ2VMb2cgJChESVNURklMRVMuY29tbW9uKSAkKERJU1RGSUxFUy5nZW5lcmF0ZWQpICQkYWRkaXRpb25hbDsgZG8gXAorKwkgICAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gZGlyPS47IGVsc2UgZGlyPSQoc3JjZGlyKTsgZmk7IFwKKysJICAgIGNwIC1wICQkZGlyLyQkZmlsZSAkKGRpc3RkaXIpOyBcCisrCSAgZG9uZTsgXAorKwlmaQorIAorLSMgVGhlIGRlcGVuZGVuY3kgZm9yIGludGxoLmluc3QgaXMgZGlmZmVyZW50IGluIGdldHRleHQgYW5kIGFsbCBvdGhlcgorLSMgcGFja2FnZXMuICBCZWNhdXNlIHdlIGNhbm5vdCB5b3UgR05VIG1ha2UgZmVhdHVyZXMgd2UgaGF2ZSB0byBzb2x2ZQorLSMgdGhlIHByb2JsZW0gd2hpbGUgcmV3cml0aW5nIE1ha2VmaWxlLmluLgorLUBHVF9ZRVNAaW50bGguaW5zdDogaW50bGguaW5zdC5pbiAuLi9jb25maWcuc3RhdHVzCistQEdUX1lFU0AJY2QgLi4gXAorLUBHVF9ZRVNACSYmIENPTkZJR19GSUxFUz0kKHN1YmRpcikvJEAgQ09ORklHX0hFQURFUlM9IFwKKy1AR1RfWUVTQAkgICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cworLUBHVF9OT0AuUEhPTlk6IGludGxoLmluc3QKKy1AR1RfTk9AaW50bGguaW5zdDoKKytNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisrCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMKKysjIFRoaXMgd291bGQgYmUgbW9yZSBlZmZpY2llbnQsIGJ1dCBkb2Vzbid0IHdvcmsgYW55IG1vcmUgd2l0aCBhdXRvY29uZi0yLjU3LAorKyMgd2hlbiBBQ19DT05GSUdfRklMRVMoW2ludGwvTWFrZWZpbGU6c29tZWRpci9NYWtlZmlsZS5pbl0pIGlzIHVzZWQuCisrIwljZCAkKHRvcF9idWlsZGRpcikgJiYgQ09ORklHX0ZJTEVTPSQoc3ViZGlyKS8kQCBDT05GSUdfSEVBREVSUz0gJChTSEVMTCkgLi9jb25maWcuc3RhdHVzCisgCisgIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIG5vdCB0byBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyAjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9uZ2V0dGV4dC5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL25nZXR0ZXh0LmMJMjAwNC0wOS0xMiAxNDo0MDozNC41MzM3MjEwMzIgLTA0MDAKK0BAIC0wLDAgKzEsNjUgQEAKKysvKiBJbXBsZW1lbnRhdGlvbiBvZiBuZ2V0dGV4dCgzKSBmdW5jdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTcsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpZmRlZiBfTElCQworKyMgZGVmaW5lIF9fbmVlZF9OVUxMCisrIyBpbmNsdWRlIDxzdGRkZWYuaD4KKysjZWxzZQorKyMgaW5jbHVkZSA8c3RkbGliLmg+CQkvKiBKdXN0IGZvciBOVUxMLiAgKi8KKysjZW5kaWYKKysKKysjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGxpYmludGwuaD4KKysjZWxzZQorKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxsb2NhbGUuaD4KKysKKysvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisrCisrLyogTmFtZXMgZm9yIHRoZSBsaWJpbnRsIGZ1bmN0aW9ucyBhcmUgYSBwcm9ibGVtLiAgVGhleSBtdXN0IG5vdCBjbGFzaAorKyAgIHdpdGggZXhpc3RpbmcgbmFtZXMgYW5kIHRoZXkgc2hvdWxkIGZvbGxvdyBBTlNJIEMuICBCdXQgdGhpcyBzb3VyY2UKKysgICBjb2RlIGlzIGFsc28gdXNlZCBpbiBHTlUgQyBMaWJyYXJ5IHdoZXJlIHRoZSBuYW1lcyBoYXZlIGEgX18KKysgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworKyNpZmRlZiBfTElCQworKyMgZGVmaW5lIE5HRVRURVhUIF9fbmdldHRleHQKKysjIGRlZmluZSBEQ05HRVRURVhUIF9fZGNuZ2V0dGV4dAorKyNlbHNlCisrIyBkZWZpbmUgTkdFVFRFWFQgbGliaW50bF9uZ2V0dGV4dAorKyMgZGVmaW5lIERDTkdFVFRFWFQgbGliaW50bF9kY25nZXR0ZXh0CisrI2VuZGlmCisrCisrLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQKKysgICBMQ19NRVNTQUdFUyBsb2NhbGUuICBJZiBub3QgZm91bmQsIHJldHVybnMgTVNHSUQgaXRzZWxmICh0aGUgZGVmYXVsdAorKyAgIHRleHQpLiAgKi8KKytjaGFyICoKKytOR0VUVEVYVCAoY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IG4pCisreworKyAgcmV0dXJuIERDTkdFVFRFWFQgKE5VTEwsIG1zZ2lkMSwgbXNnaWQyLCBuLCBMQ19NRVNTQUdFUyk7CisrfQorKworKyNpZmRlZiBfTElCQworKy8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLworK3dlYWtfYWxpYXMgKF9fbmdldHRleHQsIG5nZXR0ZXh0KTsKKysjZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9vczJjb21wYXQuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9vczJjb21wYXQuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjUzOTcyMDEyMCAtMDQwMAorQEAgLTAsMCArMSw5OCBAQAorKy8qIE9TLzIgY29tcGF0aWJpbGl0eSBmdW5jdGlvbnMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNkZWZpbmUgT1MyX0FXQVJFCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisrCisrLyogQSB2ZXJzaW9uIG9mIGdldGVudigpIHRoYXQgd29ya3MgZnJvbSBETExzICovCisrZXh0ZXJuIHVuc2lnbmVkIGxvbmcgRG9zU2NhbkVudiAoY29uc3QgdW5zaWduZWQgY2hhciAqcHN6TmFtZSwgdW5zaWduZWQgY2hhciAqKnBwc3pWYWx1ZSk7CisrCisrY2hhciAqCisrX25sX2dldGVudiAoY29uc3QgY2hhciAqbmFtZSkKKyt7CisrICB1bnNpZ25lZCBjaGFyICp2YWx1ZTsKKysgIGlmIChEb3NTY2FuRW52IChuYW1lLCAmdmFsdWUpKQorKyAgICByZXR1cm4gTlVMTDsKKysgIGVsc2UKKysgICAgcmV0dXJuIHZhbHVlOworK30KKysKKysvKiBBIGZpeGVkIHNpemUgYnVmZmVyLiAgKi8KKytjaGFyIGxpYmludGxfbmxfZGVmYXVsdF9kaXJuYW1lW01BWFBBVEhMRU4rMV07CisrCisrY2hhciAqX25sb3MyX2xpYmRpciA9IE5VTEw7CisrY2hhciAqX25sb3MyX2xvY2FsZWFsaWFzcGF0aCA9IE5VTEw7CisrY2hhciAqX25sb3MyX2xvY2FsZWRpciA9IE5VTEw7CisrCisrc3RhdGljIF9fYXR0cmlidXRlX18oKGNvbnN0cnVjdG9yKSkgdm9pZAorK25sb3MyX2luaXRpYWxpemUgKCkKKyt7CisrICBjaGFyICpyb290ID0gZ2V0ZW52ICgiVU5JWFJPT1QiKTsKKysgIGNoYXIgKmdudWxvY2FsZWRpciA9IGdldGVudiAoIkdOVUxPQ0FMRURJUiIpOworKworKyAgX25sb3MyX2xpYmRpciA9IGdudWxvY2FsZWRpcjsKKysgIGlmICghX25sb3MyX2xpYmRpcikKKysgICAgeworKyAgICAgIGlmIChyb290KQorKyAgICAgICAgeworKyAgICAgICAgICBzaXplX3Qgc2wgPSBzdHJsZW4gKHJvb3QpOworKyAgICAgICAgICBfbmxvczJfbGliZGlyID0gKGNoYXIgKikgbWFsbG9jIChzbCArIHN0cmxlbiAoTElCRElSKSArIDEpOworKyAgICAgICAgICBtZW1jcHkgKF9ubG9zMl9saWJkaXIsIHJvb3QsIHNsKTsKKysgICAgICAgICAgbWVtY3B5IChfbmxvczJfbGliZGlyICsgc2wsIExJQkRJUiwgc3RybGVuIChMSUJESVIpICsgMSk7CisrICAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAgX25sb3MyX2xpYmRpciA9IExJQkRJUjsKKysgICAgfQorKworKyAgX25sb3MyX2xvY2FsZWFsaWFzcGF0aCA9IGdudWxvY2FsZWRpcjsKKysgIGlmICghX25sb3MyX2xvY2FsZWFsaWFzcGF0aCkKKysgICAgeworKyAgICAgIGlmIChyb290KQorKyAgICAgICAgeworKyAgICAgICAgICBzaXplX3Qgc2wgPSBzdHJsZW4gKHJvb3QpOworKyAgICAgICAgICBfbmxvczJfbG9jYWxlYWxpYXNwYXRoID0gKGNoYXIgKikgbWFsbG9jIChzbCArIHN0cmxlbiAoTE9DQUxFX0FMSUFTX1BBVEgpICsgMSk7CisrICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xvY2FsZWFsaWFzcGF0aCwgcm9vdCwgc2wpOworKyAgICAgICAgICBtZW1jcHkgKF9ubG9zMl9sb2NhbGVhbGlhc3BhdGggKyBzbCwgTE9DQUxFX0FMSUFTX1BBVEgsIHN0cmxlbiAoTE9DQUxFX0FMSUFTX1BBVEgpICsgMSk7CisrICAgICAgICB9CisrICAgICBlbHNlCisrICAgICAgICBfbmxvczJfbG9jYWxlYWxpYXNwYXRoID0gTE9DQUxFX0FMSUFTX1BBVEg7CisrICAgIH0KKysKKysgIF9ubG9zMl9sb2NhbGVkaXIgPSBnbnVsb2NhbGVkaXI7CisrICBpZiAoIV9ubG9zMl9sb2NhbGVkaXIpCisrICAgIHsKKysgICAgICBpZiAocm9vdCkKKysgICAgICAgIHsKKysgICAgICAgICAgc2l6ZV90IHNsID0gc3RybGVuIChyb290KTsKKysgICAgICAgICAgX25sb3MyX2xvY2FsZWRpciA9IChjaGFyICopIG1hbGxvYyAoc2wgKyBzdHJsZW4gKExPQ0FMRURJUikgKyAxKTsKKysgICAgICAgICAgbWVtY3B5IChfbmxvczJfbG9jYWxlZGlyLCByb290LCBzbCk7CisrICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xvY2FsZWRpciArIHNsLCBMT0NBTEVESVIsIHN0cmxlbiAoTE9DQUxFRElSKSArIDEpOworKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIF9ubG9zMl9sb2NhbGVkaXIgPSBMT0NBTEVESVI7CisrICAgIH0KKysKKysgIGlmIChzdHJsZW4gKF9ubG9zMl9sb2NhbGVkaXIpIDw9IE1BWFBBVEhMRU4pCisrICAgIHN0cmNweSAobGliaW50bF9ubF9kZWZhdWx0X2Rpcm5hbWUsIF9ubG9zMl9sb2NhbGVkaXIpOworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9vczJjb21wYXQuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9vczJjb21wYXQuaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjU0NDcxOTM2MCAtMDQwMAorQEAgLTAsMCArMSw0NiBAQAorKy8qIE9TLzIgY29tcGF0aWJpbGl0eSBkZWZpbmVzLgorKyAgIFRoaXMgZmlsZSBpcyBpbnRlbmRlZCB0byBiZSBpbmNsdWRlZCBmcm9tIGNvbmZpZy5oCisrICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFdoZW4gaW5jbHVkZWQgZnJvbSBvczJjb21wYXQuaCB3ZSBuZWVkIGFsbCB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbnMgKi8KKysjaWZuZGVmIE9TMl9BV0FSRQorKworKyN1bmRlZiBMSUJESVIKKysjZGVmaW5lIExJQkRJUgkJCV9ubG9zMl9saWJkaXIKKytleHRlcm4gY2hhciAqX25sb3MyX2xpYmRpcjsKKysKKysjdW5kZWYgTE9DQUxFRElSCisrI2RlZmluZSBMT0NBTEVESVIJCV9ubG9zMl9sb2NhbGVkaXIKKytleHRlcm4gY2hhciAqX25sb3MyX2xvY2FsZWRpcjsKKysKKysjdW5kZWYgTE9DQUxFX0FMSUFTX1BBVEgKKysjZGVmaW5lIExPQ0FMRV9BTElBU19QQVRICV9ubG9zMl9sb2NhbGVhbGlhc3BhdGgKKytleHRlcm4gY2hhciAqX25sb3MyX2xvY2FsZWFsaWFzcGF0aDsKKysKKysjZW5kaWYKKysKKysjdW5kZWYgSEFWRV9TVFJDQVNFQ01QCisrI2RlZmluZSBIQVZFX1NUUkNBU0VDTVAgMQorKyNkZWZpbmUgc3RyY2FzZWNtcCBzdHJpY21wCisrI2RlZmluZSBzdHJuY2FzZWNtcCBzdHJuaWNtcAorKworKy8qIFdlIGhhdmUgb3VyIG93biBnZXRlbnYoKSB3aGljaCB3b3JrcyBldmVuIGlmIGxpYnJhcnkgaXMgY29tcGlsZWQgYXMgRExMICovCisrI2RlZmluZSBnZXRlbnYgX25sX2dldGVudgorKworKy8qIE9sZGVyIHZlcnNpb25zIG9mIGdldHRleHQgdXNlZCAtMSBhcyB0aGUgdmFsdWUgb2YgTENfTUVTU0FHRVMgKi8KKysjZGVmaW5lIExDX01FU1NBR0VTX0NPTVBBVCAoLTEpCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvb3NkZXAuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9vc2RlcC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTUwNzE4NDQ4IC0wNDAwCitAQCAtMCwwICsxLDI0IEBACisrLyogT1MgZGVwZW5kZW50IHBhcnRzIG9mIGxpYmludGwuCisrICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZiBkZWZpbmVkIF9fRU1YX18KKysjIGluY2x1ZGUgIm9zMmNvbXBhdC5jIgorKyNlbHNlCisrLyogQXZvaWQgQUlYIGNvbXBpbGVyIHdhcm5pbmcuICAqLworK3R5cGVkZWYgaW50IGR1bW15OworKyNlbmRpZgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3BsdXJhbC5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3BsdXJhbC5jCTIwMDQtMDktMTIgMTQ6NDA6MzYuNTcxNDExMjU2IC0wNDAwCitAQCAtMCwwICsxLDE0OTAgQEAKKysvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBmcm9tIHBsdXJhbC55CisrICAgYnkgR05VIGJpc29uIDEuMzUuICAqLworKworKyNkZWZpbmUgWVlCSVNPTiAxICAvKiBJZGVudGlmeSBCaXNvbiBvdXRwdXQuICAqLworKworKyNkZWZpbmUgeXlwYXJzZSBfX2dldHRleHRwYXJzZQorKyNkZWZpbmUgeXlsZXggX19nZXR0ZXh0bGV4CisrI2RlZmluZSB5eWVycm9yIF9fZ2V0dGV4dGVycm9yCisrI2RlZmluZSB5eWx2YWwgX19nZXR0ZXh0bHZhbAorKyNkZWZpbmUgeXljaGFyIF9fZ2V0dGV4dGNoYXIKKysjZGVmaW5lIHl5ZGVidWcgX19nZXR0ZXh0ZGVidWcKKysjZGVmaW5lIHl5bmVycnMgX19nZXR0ZXh0bmVycnMKKysjIGRlZmluZQlFUVVPUDIJMjU3CisrIyBkZWZpbmUJQ01QT1AyCTI1OAorKyMgZGVmaW5lCUFERE9QMgkyNTkKKysjIGRlZmluZQlNVUxPUDIJMjYwCisrIyBkZWZpbmUJTlVNQkVSCTI2MQorKworKyNsaW5lIDEgInBsdXJhbC55IgorKworKy8qIEV4cHJlc3Npb24gcGFyc2luZyBmb3IgcGx1cmFsIGZvcm0gc2VsZWN0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDIwMDAuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFRoZSBiaXNvbiBnZW5lcmF0ZWQgcGFyc2VyIHVzZXMgYWxsb2NhLiAgQUlYIDMgZm9yY2VzIHVzIHRvIHB1dCB0aGlzCisrICAgZGVjbGFyYXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4gIFRoZSBkZWNsYXJhdGlvbiBpbiBiaXNvbidzCisrICAgc2tlbGV0b24gZmlsZSBjb21lcyB0b28gbGF0ZS4gIFRoaXMgbXVzdCBjb21lIGJlZm9yZSA8Y29uZmlnLmg+CisrICAgYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlIGFyYml0cmFyeSBzeXN0ZW0gaGVhZGVycy4gICovCisrI2lmIGRlZmluZWQgX0FJWCAmJiAhZGVmaW5lZCBfX0dOVUNfXworKyAjcHJhZ21hIGFsbG9jYQorKyNlbmRpZgorKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlICJwbHVyYWwtZXhwLmgiCisrCisrLyogVGhlIG1haW4gZnVuY3Rpb24gZ2VuZXJhdGVkIGJ5IHRoZSBwYXJzZXIgaXMgY2FsbGVkIF9fZ2V0dGV4dHBhcnNlLAorKyAgIGJ1dCB3ZSB3YW50IGl0IHRvIGJlIGNhbGxlZCBQTFVSQUxfUEFSU0UuICAqLworKyNpZm5kZWYgX0xJQkMKKysjIGRlZmluZSBfX2dldHRleHRwYXJzZSBQTFVSQUxfUEFSU0UKKysjZW5kaWYKKysKKysjZGVmaW5lIFlZTEVYX1BBUkFNCSYoKHN0cnVjdCBwYXJzZV9hcmdzICopIGFyZyktPmNwCisrI2RlZmluZSBZWVBBUlNFX1BBUkFNCWFyZworKworKyNsaW5lIDQ5ICJwbHVyYWwueSIKKysjaWZuZGVmIFlZU1RZUEUKKyt0eXBlZGVmIHVuaW9uIHsKKysgIHVuc2lnbmVkIGxvbmcgaW50IG51bTsKKysgIGVudW0gb3BlcmF0b3Igb3A7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqZXhwOworK30geXlzdHlwZTsKKysjIGRlZmluZSBZWVNUWVBFIHl5c3R5cGUKKysjIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorKyNlbmRpZgorKyNsaW5lIDU1ICJwbHVyYWwueSIKKysKKysvKiBQcm90b3R5cGVzIGZvciBsb2NhbCBmdW5jdGlvbnMuICAqLworK3N0YXRpYyBpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWwsIGNvbnN0IGNoYXIgKipwZXhwKTsKKytzdGF0aWMgdm9pZCB5eWVycm9yIChjb25zdCBjaGFyICpzdHIpOworKworKy8qIEFsbG9jYXRpb24gb2YgZXhwcmVzc2lvbnMuICAqLworKworK3N0YXRpYyBzdHJ1Y3QgZXhwcmVzc2lvbiAqCisrbmV3X2V4cCAoaW50IG5hcmdzLCBlbnVtIG9wZXJhdG9yIG9wLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqIGNvbnN0ICphcmdzKQorK3sKKysgIGludCBpOworKyAgc3RydWN0IGV4cHJlc3Npb24gKm5ld3A7CisrCisrICAvKiBJZiBhbnkgb2YgdGhlIGFyZ3VtZW50IGNvdWxkIG5vdCBiZSBtYWxsb2MnZWQsIGp1c3QgcmV0dXJuIE5VTEwuICAqLworKyAgZm9yIChpID0gbmFyZ3MgLSAxOyBpID49IDA7IGktLSkKKysgICAgaWYgKGFyZ3NbaV0gPT0gTlVMTCkKKysgICAgICBnb3RvIGZhaWw7CisrCisrICAvKiBBbGxvY2F0ZSBhIG5ldyBleHByZXNzaW9uLiAgKi8KKysgIG5ld3AgPSAoc3RydWN0IGV4cHJlc3Npb24gKikgbWFsbG9jIChzaXplb2YgKCpuZXdwKSk7CisrICBpZiAobmV3cCAhPSBOVUxMKQorKyAgICB7CisrICAgICAgbmV3cC0+bmFyZ3MgPSBuYXJnczsKKysgICAgICBuZXdwLT5vcGVyYXRpb24gPSBvcDsKKysgICAgICBmb3IgKGkgPSBuYXJncyAtIDE7IGkgPj0gMDsgaS0tKQorKwluZXdwLT52YWwuYXJnc1tpXSA9IGFyZ3NbaV07CisrICAgICAgcmV0dXJuIG5ld3A7CisrICAgIH0KKysKKysgZmFpbDoKKysgIGZvciAoaSA9IG5hcmdzIC0gMTsgaSA+PSAwOyBpLS0pCisrICAgIEZSRUVfRVhQUkVTU0lPTiAoYXJnc1tpXSk7CisrCisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhwcmVzc2lvbiAqCisrbmV3X2V4cF8wIChlbnVtIG9wZXJhdG9yIG9wKQorK3sKKysgIHJldHVybiBuZXdfZXhwICgwLCBvcCwgTlVMTCk7CisrfQorKworK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV4cHJlc3Npb24gKgorK25ld19leHBfMSAoZW51bSBvcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKnJpZ2h0KQorK3sKKysgIHN0cnVjdCBleHByZXNzaW9uICphcmdzWzFdOworKworKyAgYXJnc1swXSA9IHJpZ2h0OworKyAgcmV0dXJuIG5ld19leHAgKDEsIG9wLCBhcmdzKTsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBleHByZXNzaW9uICoKKytuZXdfZXhwXzIgKGVudW0gb3BlcmF0b3Igb3AsIHN0cnVjdCBleHByZXNzaW9uICpsZWZ0LCBzdHJ1Y3QgZXhwcmVzc2lvbiAqcmlnaHQpCisreworKyAgc3RydWN0IGV4cHJlc3Npb24gKmFyZ3NbMl07CisrCisrICBhcmdzWzBdID0gbGVmdDsKKysgIGFyZ3NbMV0gPSByaWdodDsKKysgIHJldHVybiBuZXdfZXhwICgyLCBvcCwgYXJncyk7CisrfQorKworK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV4cHJlc3Npb24gKgorK25ld19leHBfMyAoZW51bSBvcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKmJleHAsCisrCSAgIHN0cnVjdCBleHByZXNzaW9uICp0YnJhbmNoLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqZmJyYW5jaCkKKyt7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqYXJnc1szXTsKKysKKysgIGFyZ3NbMF0gPSBiZXhwOworKyAgYXJnc1sxXSA9IHRicmFuY2g7CisrICBhcmdzWzJdID0gZmJyYW5jaDsKKysgIHJldHVybiBuZXdfZXhwICgzLCBvcCwgYXJncyk7CisrfQorKworKyNpZm5kZWYgWVlERUJVRworKyMgZGVmaW5lIFlZREVCVUcgMAorKyNlbmRpZgorKworKworKworKyNkZWZpbmUJWVlGSU5BTAkJMjcKKysjZGVmaW5lCVlZRkxBRwkJLTMyNzY4CisrI2RlZmluZQlZWU5UQkFTRQkxNgorKworKy8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gKi8KKysjZGVmaW5lIFlZVFJBTlNMQVRFKHgpICgodW5zaWduZWQpKHgpIDw9IDI2MSA/IHl5dHJhbnNsYXRlW3hdIDogMTgpCisrCisrLyogWVlUUkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAqLworK3N0YXRpYyBjb25zdCBjaGFyIHl5dHJhbnNsYXRlW10gPQorK3sKKysgICAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAxMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA1LCAgICAgMiwKKysgICAgICAxNCwgICAgMTUsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgIDEyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAxMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDQsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDYsICAgICA3LCAgICAgOCwKKysgICAgICAgOSwgICAgMTEKKyt9OworKworKyNpZiBZWURFQlVHCisrc3RhdGljIGNvbnN0IHNob3J0IHl5cHJoc1tdID0KKyt7CisrICAgICAgIDAsICAgICAwLCAgICAgMiwgICAgIDgsICAgIDEyLCAgICAxNiwgICAgMjAsICAgIDI0LCAgICAyOCwgICAgMzIsCisrICAgICAgMzUsICAgIDM3LCAgICAzOQorK307Cisrc3RhdGljIGNvbnN0IHNob3J0IHl5cmhzW10gPQorK3sKKysgICAgICAxNywgICAgIDAsICAgIDE3LCAgICAgMywgICAgMTcsICAgIDEyLCAgICAxNywgICAgIDAsICAgIDE3LCAgICAgNCwKKysgICAgICAxNywgICAgIDAsICAgIDE3LCAgICAgNSwgICAgMTcsICAgICAwLCAgICAxNywgICAgIDYsICAgIDE3LCAgICAgMCwKKysgICAgICAxNywgICAgIDcsICAgIDE3LCAgICAgMCwgICAgMTcsICAgICA4LCAgICAxNywgICAgIDAsICAgIDE3LCAgICAgOSwKKysgICAgICAxNywgICAgIDAsICAgIDEwLCAgICAxNywgICAgIDAsICAgIDEzLCAgICAgMCwgICAgMTEsICAgICAwLCAgICAxNCwKKysgICAgICAxNywgICAgMTUsICAgICAwCisrfTsKKysKKysjZW5kaWYKKysKKysjaWYgWVlERUJVRworKy8qIFlZUkxJTkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICovCisrc3RhdGljIGNvbnN0IHNob3J0IHl5cmxpbmVbXSA9CisreworKyAgICAgICAwLCAgIDE1MCwgICAxNTgsICAgMTYyLCAgIDE2NiwgICAxNzAsICAgMTc0LCAgIDE3OCwgICAxODIsICAgMTg2LAorKyAgICAgMTkwLCAgIDE5NCwgICAxOTkKKyt9OworKyNlbmRpZgorKworKworKyNpZiAoWVlERUJVRykgfHwgZGVmaW5lZCBZWUVSUk9SX1ZFUkJPU0UKKysKKysvKiBZWVROQU1FW1RPS0VOX05VTV0gLS0gU3RyaW5nIG5hbWUgb2YgdGhlIHRva2VuIFRPS0VOX05VTS4gKi8KKytzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KKyt7CisrICAiJCIsICJlcnJvciIsICIkdW5kZWZpbmVkLiIsICInPyciLCAiJ3wnIiwgIicmJyIsICJFUVVPUDIiLCAiQ01QT1AyIiwgCisrICAiQURET1AyIiwgIk1VTE9QMiIsICInISciLCAiTlVNQkVSIiwgIic6JyIsICInbiciLCAiJygnIiwgIicpJyIsIAorKyAgInN0YXJ0IiwgImV4cCIsIDAKKyt9OworKyNlbmRpZgorKworKy8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2ZXMuICovCisrc3RhdGljIGNvbnN0IHNob3J0IHl5cjFbXSA9CisreworKyAgICAgICAwLCAgICAxNiwgICAgMTcsICAgIDE3LCAgICAxNywgICAgMTcsICAgIDE3LCAgICAxNywgICAgMTcsICAgIDE3LAorKyAgICAgIDE3LCAgICAxNywgICAgMTcKKyt9OworKworKy8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBjb21wb3NpbmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAqLworK3N0YXRpYyBjb25zdCBzaG9ydCB5eXIyW10gPQorK3sKKysgICAgICAgMCwgICAgIDEsICAgICA1LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMiwKKysgICAgICAgMSwgICAgIDEsICAgICAzCisrfTsKKysKKysvKiBZWURFRkFDVFtTXSAtLSBkZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdpdGggaW4gc3RhdGUgUyB3aGVuIFlZVEFCTEUKKysgICBkb2Vzbid0IHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgdG8gZG8uICBaZXJvIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuCisrICAgZXJyb3IuICovCisrc3RhdGljIGNvbnN0IHNob3J0IHl5ZGVmYWN0W10gPQorK3sKKysgICAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMCwgICAgIDAsICAgICAxLCAgICAgOSwgICAgIDAsICAgICAwLCAgICAgMCwKKysgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAgMCwgICAgIDMsICAgICA0LCAgICAgNSwKKysgICAgICAgNiwgICAgIDcsICAgICA4LCAgICAgMCwgICAgIDIsICAgICAwLCAgICAgMCwgICAgIDAKKyt9OworKworK3N0YXRpYyBjb25zdCBzaG9ydCB5eWRlZmdvdG9bXSA9CisreworKyAgICAgIDI1LCAgICAgNQorK307CisrCisrc3RhdGljIGNvbnN0IHNob3J0IHl5cGFjdFtdID0KKyt7CisrICAgICAgLTksICAgIC05LC0zMjc2OCwtMzI3NjgsICAgIC05LCAgICAzNCwtMzI3NjgsICAgIDExLCAgICAtOSwgICAgLTksCisrICAgICAgLTksICAgIC05LCAgICAtOSwgICAgLTksICAgIC05LC0zMjc2OCwgICAgMjQsICAgIDM5LCAgICA0MywgICAgMTYsCisrICAgICAgMjYsICAgIC0zLC0zMjc2OCwgICAgLTksICAgIDM0LCAgICAyMSwgICAgNTMsLTMyNzY4CisrfTsKKysKKytzdGF0aWMgY29uc3Qgc2hvcnQgeXlwZ290b1tdID0KKyt7CisrICAtMzI3NjgsICAgIC0xCisrfTsKKysKKysKKysjZGVmaW5lCVlZTEFTVAkJNTMKKysKKysKKytzdGF0aWMgY29uc3Qgc2hvcnQgeXl0YWJsZVtdID0KKyt7CisrICAgICAgIDYsICAgICAxLCAgICAgMiwgICAgIDcsICAgICAzLCAgICAgNCwgICAgMTQsICAgIDE2LCAgICAxNywgICAgMTgsCisrICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsCisrICAgICAgMTQsICAgIDI2LCAgICAyNCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgICA4LCAgICAgOSwgICAgMTAsCisrICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDEzLCAgICAxNCwgICAgMjMsICAgICA4LCAgICAgOSwgICAgMTAsCisrICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTEsCisrICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMjcKKyt9OworKworK3N0YXRpYyBjb25zdCBzaG9ydCB5eWNoZWNrW10gPQorK3sKKysgICAgICAgMSwgICAgMTAsICAgIDExLCAgICAgNCwgICAgMTMsICAgIDE0LCAgICAgOSwgICAgIDgsICAgICA5LCAgICAxMCwKKysgICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKKysgICAgICAgOSwgICAgIDAsICAgIDIzLCAgICAgNywgICAgIDgsICAgICA5LCAgICAxNSwgICAgIDMsICAgICA0LCAgICAgNSwKKysgICAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgIDgsICAgICA5LCAgICAxMiwgICAgIDMsICAgICA0LCAgICAgNSwKKysgICAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAgNiwKKysgICAgICAgNywgICAgIDgsICAgICA5LCAgICAgMAorK307CisrI2RlZmluZSBZWVBVUkUgMQorKworKy8qIC0qLUMtKi0gIE5vdGUgc29tZSBjb21waWxlcnMgY2hva2Ugb24gY29tbWVudHMgb24gYCNsaW5lJyBsaW5lcy4gICovCisrI2xpbmUgMyAiL3Vzci9sb2NhbC9zaGFyZS9iaXNvbi9iaXNvbi5zaW1wbGUiCisrCisrLyogU2tlbGV0b24gb3V0cHV0IHBhcnNlciBmb3IgYmlzb24sCisrCisrICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisrICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKworKy8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHdoZW4gdGhpcyBmaWxlIGlzIGNvcGllZCBieSBCaXNvbiBpbnRvIGEKKysgICBCaXNvbiBvdXRwdXQgZmlsZSwgeW91IG1heSB1c2UgdGhhdCBvdXRwdXQgZmlsZSB3aXRob3V0IHJlc3RyaWN0aW9uLgorKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKysgICBpbiB2ZXJzaW9uIDEuMjQgb2YgQmlzb24uICAqLworKworKy8qIFRoaXMgaXMgdGhlIHBhcnNlciBjb2RlIHRoYXQgaXMgd3JpdHRlbiBpbnRvIGVhY2ggYmlzb24gcGFyc2VyIHdoZW4KKysgICB0aGUgJXNlbWFudGljX3BhcnNlciBkZWNsYXJhdGlvbiBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBncmFtbWFyLgorKyAgIEl0IHdhcyB3cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4gYnkgc2ltcGxpZnlpbmcgdGhlIGhhaXJ5IHBhcnNlcgorKyAgIHVzZWQgd2hlbiAlc2VtYW50aWNfcGFyc2VyIGlzIHNwZWNpZmllZC4gICovCisrCisrLyogQWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxvdyBzaG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQKKysgICBpbmZyaW5naW5nIG9uIHVzZXIgbmFtZSBzcGFjZS4gIFRoaXMgc2hvdWxkIGJlIGRvbmUgZXZlbiBmb3IgbG9jYWwKKysgICB2YXJpYWJsZXMsIGFzIHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9zLgorKyAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGluIGluY2x1ZGUgZmlsZXMgdG8KKysgICBkZWZpbmUgbmVjZXNzYXJ5IGxpYnJhcnkgc3ltYm9sczsgdGhleSBhcmUgbm90ZWQgIklORlJJTkdFUyBPTgorKyAgIFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAqLworKworKyNpZiAhIGRlZmluZWQgKHl5b3ZlcmZsb3cpIHx8IGRlZmluZWQgKFlZRVJST1JfVkVSQk9TRSkKKysKKysvKiBUaGUgcGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gICovCisrCisrIyBpZiBZWVNUQUNLX1VTRV9BTExPQ0EKKysjICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKKysjIGVsc2UKKysjICBpZm5kZWYgWVlTVEFDS19VU0VfQUxMT0NBCisrIyAgIGlmIGRlZmluZWQgKGFsbG9jYSkgfHwgZGVmaW5lZCAoX0FMTE9DQV9IKQorKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgYWxsb2NhCisrIyAgIGVsc2UKKysjICAgIGlmZGVmIF9fR05VQ19fCisrIyAgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQorKyMgICAgZW5kaWYKKysjICAgZW5kaWYKKysjICBlbmRpZgorKyMgZW5kaWYKKysKKysjIGlmZGVmIFlZU1RBQ0tfQUxMT0MKKysgICAvKiBQYWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcuICovCisrIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hpbGUgKDApCisrIyBlbHNlCisrIyAgaWYgZGVmaW5lZCAoX19TVERDX18pIHx8IGRlZmluZWQgKF9fY3BsdXNwbHVzKQorKyMgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworKyMgICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CisrIyAgZW5kaWYKKysjICBkZWZpbmUgWVlTVEFDS19BTExPQyBtYWxsb2MKKysjICBkZWZpbmUgWVlTVEFDS19GUkVFIGZyZWUKKysjIGVuZGlmCisrI2VuZGlmIC8qICEgZGVmaW5lZCAoeXlvdmVyZmxvdykgfHwgZGVmaW5lZCAoWVlFUlJPUl9WRVJCT1NFKSAqLworKworKworKyNpZiAoISBkZWZpbmVkICh5eW92ZXJmbG93KSBcCisrICAgICAmJiAoISBkZWZpbmVkIChfX2NwbHVzcGx1cykgXAorKwkgfHwgKFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKKysKKysvKiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVtYmVyLiAgKi8KKyt1bmlvbiB5eWFsbG9jCisreworKyAgc2hvcnQgeXlzczsKKysgIFlZU1RZUEUgeXl2czsKKysjIGlmIFlZTFNQX05FRURFRAorKyAgWVlMVFlQRSB5eWxzOworKyMgZW5kaWYKKyt9OworKworKy8qIFRoZSBzaXplIG9mIHRoZSBtYXhpbXVtIGdhcCBiZXR3ZWVuIG9uZSBhbGlnbmVkIHN0YWNrIGFuZCB0aGUgbmV4dC4gICovCisrIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYIChzaXplb2YgKHVuaW9uIHl5YWxsb2MpIC0gMSkKKysKKysvKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3RhY2tzLCBlYWNoIHdpdGgKKysgICBOIGVsZW1lbnRzLiAgKi8KKysjIGlmIFlZTFNQX05FRURFRAorKyMgIGRlZmluZSBZWVNUQUNLX0JZVEVTKE4pIFwKKysgICAgICgoTikgKiAoc2l6ZW9mIChzaG9ydCkgKyBzaXplb2YgKFlZU1RZUEUpICsgc2l6ZW9mIChZWUxUWVBFKSkJXAorKyAgICAgICsgMiAqIFlZU1RBQ0tfR0FQX01BWCkKKysjIGVsc2UKKysjICBkZWZpbmUgWVlTVEFDS19CWVRFUyhOKSBcCisrICAgICAoKE4pICogKHNpemVvZiAoc2hvcnQpICsgc2l6ZW9mIChZWVNUWVBFKSkJCQkJXAorKyAgICAgICsgWVlTVEFDS19HQVBfTUFYKQorKyMgZW5kaWYKKysKKysvKiBDb3B5IENPVU5UIG9iamVjdHMgZnJvbSBGUk9NIHRvIFRPLiAgVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZG8KKysgICBub3Qgb3ZlcmxhcC4gICovCisrIyBpZm5kZWYgWVlDT1BZCisrIyAgaWYgMSA8IF9fR05VQ19fCisrIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KSBcCisrICAgICAgX19idWlsdGluX21lbWNweSAoVG8sIEZyb20sIChDb3VudCkgKiBzaXplb2YgKCooRnJvbSkpKQorKyMgIGVsc2UKKysjICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpCQlcCisrICAgICAgZG8JCQkJCVwKKysJewkJCQkJXAorKwkgIHJlZ2lzdGVyIFlZU0laRV9UIHl5aTsJCVwKKysJICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5aSsrKQlcCisrCSAgICAoVG8pW3l5aV0gPSAoRnJvbSlbeXlpXTsJCVwKKysJfQkJCQkJXAorKyAgICAgIHdoaWxlICgwKQorKyMgIGVuZGlmCisrIyBlbmRpZgorKworKy8qIFJlbG9jYXRlIFNUQUNLIGZyb20gaXRzIG9sZCBsb2NhdGlvbiB0byB0aGUgbmV3IG9uZS4gIFRoZQorKyAgIGxvY2FsIHZhcmlhYmxlcyBZWVNJWkUgYW5kIFlZU1RBQ0tTSVpFIGdpdmUgdGhlIG9sZCBhbmQgbmV3IG51bWJlciBvZgorKyAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCisrICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJvcGVybHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQKKysgICBzdGFjay4gICovCisrIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFjaykJCQkJCVwKKysgICAgZG8JCQkJCQkJCQlcCisrICAgICAgewkJCQkJCQkJCVwKKysJWVlTSVpFX1QgeXluZXdieXRlczsJCQkJCQlcCisrCVlZQ09QWSAoJnl5cHRyLT5TdGFjaywgU3RhY2ssIHl5c2l6ZSk7CQkJCVwKKysJU3RhY2sgPSAmeXlwdHItPlN0YWNrOwkJCQkJCVwKKysJeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYOwlcCisrCXl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7CQkJCVwKKysgICAgICB9CQkJCQkJCQkJXAorKyAgICB3aGlsZSAoMCkKKysKKysjZW5kaWYKKysKKysKKysjaWYgISBkZWZpbmVkIChZWVNJWkVfVCkgJiYgZGVmaW5lZCAoX19TSVpFX1RZUEVfXykKKysjIGRlZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQRV9fCisrI2VuZGlmCisrI2lmICEgZGVmaW5lZCAoWVlTSVpFX1QpICYmIGRlZmluZWQgKHNpemVfdCkKKysjIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKysjZW5kaWYKKysjaWYgISBkZWZpbmVkIChZWVNJWkVfVCkKKysjIGlmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKKysjICBpbmNsdWRlIDxzdGRkZWYuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworKyMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKysjIGVuZGlmCisrI2VuZGlmCisrI2lmICEgZGVmaW5lZCAoWVlTSVpFX1QpCisrIyBkZWZpbmUgWVlTSVpFX1QgdW5zaWduZWQgaW50CisrI2VuZGlmCisrCisrI2RlZmluZSB5eWVycm9rCQkoeXllcnJzdGF0dXMgPSAwKQorKyNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVNUFRZKQorKyNkZWZpbmUgWVlFTVBUWQkJLTIKKysjZGVmaW5lIFlZRU9GCQkwCisrI2RlZmluZSBZWUFDQ0VQVAlnb3RvIHl5YWNjZXB0bGFiCisrI2RlZmluZSBZWUFCT1JUIAlnb3RvIHl5YWJvcnRsYWIKKysjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJsYWIxCisrLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQorKyAgIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCisrICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICAqLworKyNkZWZpbmUgWVlGQUlMCQlnb3RvIHl5ZXJybGFiCisrI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCisrI2RlZmluZSBZWUJBQ0tVUChUb2tlbiwgVmFsdWUpCQkJCQlcCisrZG8JCQkJCQkJCVwKKysgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSAmJiB5eWxlbiA9PSAxKQkJCQlcCisrICAgIHsJCQkJCQkJCVwKKysgICAgICB5eWNoYXIgPSAoVG9rZW4pOwkJCQkJCVwKKysgICAgICB5eWx2YWwgPSAoVmFsdWUpOwkJCQkJCVwKKysgICAgICB5eWNoYXIxID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CQkJCVwKKysgICAgICBZWVBPUFNUQUNLOwkJCQkJCVwKKysgICAgICBnb3RvIHl5YmFja3VwOwkJCQkJCVwKKysgICAgfQkJCQkJCQkJXAorKyAgZWxzZQkJCQkJCQkJXAorKyAgICB7IAkJCQkJCQkJXAorKyAgICAgIHl5ZXJyb3IgKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIik7CQkJXAorKyAgICAgIFlZRVJST1I7CQkJCQkJCVwKKysgICAgfQkJCQkJCQkJXAorK3doaWxlICgwKQorKworKyNkZWZpbmUgWVlURVJST1IJMQorKyNkZWZpbmUgWVlFUlJDT0RFCTI1NgorKworKworKy8qIFlZTExPQ19ERUZBVUxUIC0tIENvbXB1dGUgdGhlIGRlZmF1bHQgbG9jYXRpb24gKGJlZm9yZSB0aGUgYWN0aW9ucworKyAgIGFyZSBydW4pLgorKworKyAgIFdoZW4gWVlMTE9DX0RFRkFVTFQgaXMgcnVuLCBDVVJSRU5UIGlzIHNldCB0aGUgbG9jYXRpb24gb2YgdGhlCisrICAgZmlyc3QgdG9rZW4uICBCeSBkZWZhdWx0LCB0byBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgcmFuZ2VzLCBleHRlbmQKKysgICBpdHMgcmFuZ2UgdG8gdGhlIGxhc3Qgc3ltYm9sLiAgKi8KKysKKysjaWZuZGVmIFlZTExPQ19ERUZBVUxUCisrIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAgICAgICAJXAorKyAgIEN1cnJlbnQubGFzdF9saW5lICAgPSBSaHNbTl0ubGFzdF9saW5lOwlcCisrICAgQ3VycmVudC5sYXN0X2NvbHVtbiA9IFJoc1tOXS5sYXN0X2NvbHVtbjsKKysjZW5kaWYKKysKKysKKysvKiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcgd2l0aCB0aGUgcmlnaHQgYXJndW1lbnRzLiAgKi8KKysKKysjaWYgWVlQVVJFCisrIyBpZiBZWUxTUF9ORUVERUQKKysjICBpZmRlZiBZWUxFWF9QQVJBTQorKyMgICBkZWZpbmUgWVlMRVgJCXl5bGV4ICgmeXlsdmFsLCAmeXlsbG9jLCBZWUxFWF9QQVJBTSkKKysjICBlbHNlCisrIyAgIGRlZmluZSBZWUxFWAkJeXlsZXggKCZ5eWx2YWwsICZ5eWxsb2MpCisrIyAgZW5kaWYKKysjIGVsc2UgLyogIVlZTFNQX05FRURFRCAqLworKyMgIGlmZGVmIFlZTEVYX1BBUkFNCisrIyAgIGRlZmluZSBZWUxFWAkJeXlsZXggKCZ5eWx2YWwsIFlZTEVYX1BBUkFNKQorKyMgIGVsc2UKKysjICAgZGVmaW5lIFlZTEVYCQl5eWxleCAoJnl5bHZhbCkKKysjICBlbmRpZgorKyMgZW5kaWYgLyogIVlZTFNQX05FRURFRCAqLworKyNlbHNlIC8qICFZWVBVUkUgKi8KKysjIGRlZmluZSBZWUxFWAkJCXl5bGV4ICgpCisrI2VuZGlmIC8qICFZWVBVUkUgKi8KKysKKysKKysvKiBFbmFibGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovCisrI2lmIFlZREVCVUcKKysKKysjIGlmbmRlZiBZWUZQUklOVEYKKysjICBpbmNsdWRlIDxzdGRpby5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisrIyAgZGVmaW5lIFlZRlBSSU5URiBmcHJpbnRmCisrIyBlbmRpZgorKworKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQkJCVwKKytkbyB7CQkJCQkJXAorKyAgaWYgKHl5ZGVidWcpCQkJCQlcCisrICAgIFlZRlBSSU5URiBBcmdzOwkJCQlcCisrfSB3aGlsZSAoMCkKKysvKiBOb256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQgaXMgbGVmdCB1bmluaXRpYWxpemVkIHNvIHRoYXQKKysgICBtdWx0aXBsZSBwYXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8KKytpbnQgeXlkZWJ1ZzsKKysjZWxzZSAvKiAhWVlERUJVRyAqLworKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQorKyNlbmRpZiAvKiAhWVlERUJVRyAqLworKworKy8qIFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KKysjaWZuZGVmCVlZSU5JVERFUFRICisrIyBkZWZpbmUgWVlJTklUREVQVEggMjAwCisrI2VuZGlmCisrCisrLyogWVlNQVhERVBUSCAtLSBtYXhpbXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9ubHkKKysgICBpZiB0aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4KKysKKysgICBEbyBub3QgbWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgorKyAgIFNJWkVfTUFYIDwgWVlTVEFDS19CWVRFUyAoWVlNQVhERVBUSCkKKysgICBldmFsdWF0ZWQgd2l0aCBpbmZpbml0ZS1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1ldGljLiAgKi8KKysKKysjaWYgWVlNQVhERVBUSCA9PSAwCisrIyB1bmRlZiBZWU1BWERFUFRICisrI2VuZGlmCisrCisrI2lmbmRlZiBZWU1BWERFUFRICisrIyBkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAorKyNlbmRpZgorKwwKKysjaWZkZWYgWVlFUlJPUl9WRVJCT1NFCisrCisrIyBpZm5kZWYgeXlzdHJsZW4KKysjICBpZiBkZWZpbmVkIChfX0dMSUJDX18pICYmIGRlZmluZWQgKF9TVFJJTkdfSCkKKysjICAgZGVmaW5lIHl5c3RybGVuIHN0cmxlbgorKyMgIGVsc2UKKysvKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiBZWVNUUi4gICovCisrc3RhdGljIFlZU0laRV9UCisrIyAgIGlmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKKyt5eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpCisrIyAgIGVsc2UKKyt5eXN0cmxlbiAoeXlzdHIpCisrICAgICBjb25zdCBjaGFyICp5eXN0cjsKKysjICAgZW5kaWYKKyt7CisrICByZWdpc3RlciBjb25zdCBjaGFyICp5eXMgPSB5eXN0cjsKKysKKysgIHdoaWxlICgqeXlzKysgIT0gJ1wwJykKKysgICAgY29udGludWU7CisrCisrICByZXR1cm4geXlzIC0geXlzdHIgLSAxOworK30KKysjICBlbmRpZgorKyMgZW5kaWYKKysKKysjIGlmbmRlZiB5eXN0cGNweQorKyMgIGlmIGRlZmluZWQgKF9fR0xJQkNfXykgJiYgZGVmaW5lZCAoX1NUUklOR19IKSAmJiBkZWZpbmVkIChfR05VX1NPVVJDRSkKKysjICAgZGVmaW5lIHl5c3RwY3B5IHN0cGNweQorKyMgIGVsc2UKKysvKiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGluCisrICAgWVlERVNULiAgKi8KKytzdGF0aWMgY2hhciAqCisrIyAgIGlmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKKyt5eXN0cGNweSAoY2hhciAqeXlkZXN0LCBjb25zdCBjaGFyICp5eXNyYykKKysjICAgZWxzZQorK3l5c3RwY3B5ICh5eWRlc3QsIHl5c3JjKQorKyAgICAgY2hhciAqeXlkZXN0OworKyAgICAgY29uc3QgY2hhciAqeXlzcmM7CisrIyAgIGVuZGlmCisreworKyAgcmVnaXN0ZXIgY2hhciAqeXlkID0geXlkZXN0OworKyAgcmVnaXN0ZXIgY29uc3QgY2hhciAqeXlzID0geXlzcmM7CisrCisrICB3aGlsZSAoKCp5eWQrKyA9ICp5eXMrKykgIT0gJ1wwJykKKysgICAgY29udGludWU7CisrCisrICByZXR1cm4geXlkIC0gMTsKKyt9CisrIyAgZW5kaWYKKysjIGVuZGlmCisrI2VuZGlmCisrDAorKyNsaW5lIDMxNSAiL3Vzci9sb2NhbC9zaGFyZS9iaXNvbi9iaXNvbi5zaW1wbGUiCisrCisrCisrLyogVGhlIHVzZXIgY2FuIGRlZmluZSBZWVBBUlNFX1BBUkFNIGFzIHRoZSBuYW1lIG9mIGFuIGFyZ3VtZW50IHRvIGJlIHBhc3NlZAorKyAgIGludG8geXlwYXJzZS4gIFRoZSBhcmd1bWVudCBzaG91bGQgaGF2ZSB0eXBlIHZvaWQgKi4KKysgICBJdCBzaG91bGQgYWN0dWFsbHkgcG9pbnQgdG8gYW4gb2JqZWN0LgorKyAgIEdyYW1tYXIgYWN0aW9ucyBjYW4gYWNjZXNzIHRoZSB2YXJpYWJsZSBieSBjYXN0aW5nIGl0CisrICAgdG8gdGhlIHByb3BlciBwb2ludGVyIHR5cGUuICAqLworKworKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisrIyBpZiBkZWZpbmVkIChfX1NURENfXykgfHwgZGVmaW5lZCAoX19jcGx1c3BsdXMpCisrIyAgZGVmaW5lIFlZUEFSU0VfUEFSQU1fQVJHIHZvaWQgKllZUEFSU0VfUEFSQU0KKysjICBkZWZpbmUgWVlQQVJTRV9QQVJBTV9ERUNMCisrIyBlbHNlCisrIyAgZGVmaW5lIFlZUEFSU0VfUEFSQU1fQVJHIFlZUEFSU0VfUEFSQU0KKysjICBkZWZpbmUgWVlQQVJTRV9QQVJBTV9ERUNMIHZvaWQgKllZUEFSU0VfUEFSQU07CisrIyBlbmRpZgorKyNlbHNlIC8qICFZWVBBUlNFX1BBUkFNICovCisrIyBkZWZpbmUgWVlQQVJTRV9QQVJBTV9BUkcKKysjIGRlZmluZSBZWVBBUlNFX1BBUkFNX0RFQ0wKKysjZW5kaWYgLyogIVlZUEFSU0VfUEFSQU0gKi8KKysKKysvKiBQcmV2ZW50IHdhcm5pbmcgaWYgLVdzdHJpY3QtcHJvdG90eXBlcy4gICovCisrI2lmZGVmIF9fR05VQ19fCisrIyBpZmRlZiBZWVBBUlNFX1BBUkFNCisraW50IHl5cGFyc2UgKHZvaWQgKik7CisrIyBlbHNlCisraW50IHl5cGFyc2UgKHZvaWQpOworKyMgZW5kaWYKKysjZW5kaWYKKysKKysvKiBZWV9ERUNMX1ZBUklBQkxFUyAtLSBkZXBlbmRpbmcgd2hldGhlciB3ZSB1c2UgYSBwdXJlIHBhcnNlciwKKysgICB2YXJpYWJsZXMgYXJlIGdsb2JhbCwgb3IgbG9jYWwgdG8gWVlQQVJTRS4gICovCisrCisrI2RlZmluZSBZWV9ERUNMX05PTl9MU1BfVkFSSUFCTEVTCQkJXAorKy8qIFRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8JCQkJXAorK2ludCB5eWNoYXI7CQkJCQkJXAorKwkJCQkJCQlcCisrLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rYWhlYWQgc3ltYm9sLiAqLwlcCisrWVlTVFlQRSB5eWx2YWw7CQkJCQkJXAorKwkJCQkJCQlcCisrLyogTnVtYmVyIG9mIHBhcnNlIGVycm9ycyBzbyBmYXIuICAqLwkJCVwKKytpbnQgeXluZXJyczsKKysKKysjaWYgWVlMU1BfTkVFREVECisrIyBkZWZpbmUgWVlfREVDTF9WQVJJQUJMRVMJCQlcCisrWVlfREVDTF9OT05fTFNQX1ZBUklBQkxFUwkJCVwKKysJCQkJCQlcCisrLyogTG9jYXRpb24gZGF0YSBmb3IgdGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLwlcCisrWVlMVFlQRSB5eWxsb2M7CisrI2Vsc2UKKysjIGRlZmluZSBZWV9ERUNMX1ZBUklBQkxFUwkJCVwKKytZWV9ERUNMX05PTl9MU1BfVkFSSUFCTEVTCisrI2VuZGlmCisrCisrCisrLyogSWYgbm9ucmVlbnRyYW50LCBnZW5lcmF0ZSB0aGUgdmFyaWFibGVzIGhlcmUuICovCisrCisrI2lmICFZWVBVUkUKKytZWV9ERUNMX1ZBUklBQkxFUworKyNlbmRpZiAgLyogIVlZUFVSRSAqLworKworK2ludAorK3l5cGFyc2UgKFlZUEFSU0VfUEFSQU1fQVJHKQorKyAgICAgWVlQQVJTRV9QQVJBTV9ERUNMCisreworKyAgLyogSWYgcmVlbnRyYW50LCBnZW5lcmF0ZSB0aGUgdmFyaWFibGVzIGhlcmUuICovCisrI2lmIFlZUFVSRQorKyAgWVlfREVDTF9WQVJJQUJMRVMKKysjZW5kaWYgIC8qICFZWVBVUkUgKi8KKysKKysgIHJlZ2lzdGVyIGludCB5eXN0YXRlOworKyAgcmVnaXN0ZXIgaW50IHl5bjsKKysgIGludCB5eXJlc3VsdDsKKysgIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLworKyAgaW50IHl5ZXJyc3RhdHVzOworKyAgLyogTG9va2FoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLworKyAgaW50IHl5Y2hhcjEgPSAwOworKworKyAgLyogVGhyZWUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKKysgICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMsCisrICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLAorKyAgICAgYHl5bHMnOiByZWxhdGVkIHRvIGxvY2F0aW9ucy4KKysKKysgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdworKyAgICAgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZS4gICovCisrCisrICAvKiBUaGUgc3RhdGUgc3RhY2suICovCisrICBzaG9ydAl5eXNzYVtZWUlOSVRERVBUSF07CisrICBzaG9ydCAqeXlzcyA9IHl5c3NhOworKyAgcmVnaXN0ZXIgc2hvcnQgKnl5c3NwOworKworKyAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KKysgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOworKyAgWVlTVFlQRSAqeXl2cyA9IHl5dnNhOworKyAgcmVnaXN0ZXIgWVlTVFlQRSAqeXl2c3A7CisrCisrI2lmIFlZTFNQX05FRURFRAorKyAgLyogVGhlIGxvY2F0aW9uIHN0YWNrLiAgKi8KKysgIFlZTFRZUEUgeXlsc2FbWVlJTklUREVQVEhdOworKyAgWVlMVFlQRSAqeXlscyA9IHl5bHNhOworKyAgWVlMVFlQRSAqeXlsc3A7CisrI2VuZGlmCisrCisrI2lmIFlZTFNQX05FRURFRAorKyMgZGVmaW5lIFlZUE9QU1RBQ0sgICAoeXl2c3AtLSwgeXlzc3AtLSwgeXlsc3AtLSkKKysjZWxzZQorKyMgZGVmaW5lIFlZUE9QU1RBQ0sgICAoeXl2c3AtLSwgeXlzc3AtLSkKKysjZW5kaWYKKysKKysgIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7CisrCisrCisrICAvKiBUaGUgdmFyaWFibGVzIHVzZWQgdG8gcmV0dXJuIHNlbWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQorKyAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KKysgIFlZU1RZUEUgeXl2YWw7CisrI2lmIFlZTFNQX05FRURFRAorKyAgWVlMVFlQRSB5eWxvYzsKKysjZW5kaWYKKysKKysgIC8qIFdoZW4gcmVkdWNpbmcsIHRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkCisrICAgICBydWxlLiAqLworKyAgaW50IHl5bGVuOworKworKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKKysKKysgIHl5c3RhdGUgPSAwOworKyAgeXllcnJzdGF0dXMgPSAwOworKyAgeXluZXJycyA9IDA7CisrICB5eWNoYXIgPSBZWUVNUFRZOwkJLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KKysKKysgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCisrICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2sKKysgICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KKysgICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KKysKKysgIHl5c3NwID0geXlzczsKKysgIHl5dnNwID0geXl2czsKKysjaWYgWVlMU1BfTkVFREVECisrICB5eWxzcCA9IHl5bHM7CisrI2VuZGlmCisrICBnb3RvIHl5c2V0c3RhdGU7CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisrfCB5eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGluIHl5c3RhdGUuICB8CisrYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrIHl5bmV3c3RhdGU6CisrICAvKiBJbiBhbGwgY2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcworKyAgICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiBzbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3RhY2tzLgorKyAgICAgKi8KKysgIHl5c3NwKys7CisrCisrIHl5c2V0c3RhdGU6CisrICAqeXlzc3AgPSB5eXN0YXRlOworKworKyAgaWYgKHl5c3NwID49IHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEpCisrICAgIHsKKysgICAgICAvKiBHZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBzdGFja3MsIGluIGVsZW1lbnRzLiAgKi8KKysgICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOworKworKyNpZmRlZiB5eW92ZXJmbG93CisrICAgICAgeworKwkvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suIFVzZSBjb3BpZXMgb2YKKysJICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50bworKwkgICBtZW1vcnkuICAqLworKwlZWVNUWVBFICp5eXZzMSA9IHl5dnM7CisrCXNob3J0ICp5eXNzMSA9IHl5c3M7CisrCisrCS8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQorKwkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gICovCisrIyBpZiBZWUxTUF9ORUVERUQKKysJWVlMVFlQRSAqeXlsczEgPSB5eWxzOworKwkvKiBUaGlzIHVzZWQgdG8gYmUgYSBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsCisrCSAgIGJ1dCB0aGF0IG1pZ2h0IGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLworKwl5eW92ZXJmbG93ICgicGFyc2VyIHN0YWNrIG92ZXJmbG93IiwKKysJCSAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKKysJCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKKysJCSAgICAmeXlsczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5bHNwKSwKKysJCSAgICAmeXlzdGFja3NpemUpOworKwl5eWxzID0geXlsczE7CisrIyBlbHNlCisrCXl5b3ZlcmZsb3cgKCJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciLAorKwkJICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAorKwkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAorKwkJICAgICZ5eXN0YWNrc2l6ZSk7CisrIyBlbmRpZgorKwl5eXNzID0geXlzczE7CisrCXl5dnMgPSB5eXZzMTsKKysgICAgICB9CisrI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLworKyMgaWZuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKKysgICAgICBnb3RvIHl5b3ZlcmZsb3dsYWI7CisrIyBlbHNlCisrICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCisrICAgICAgaWYgKHl5c3RhY2tzaXplID49IFlZTUFYREVQVEgpCisrCWdvdG8geXlvdmVyZmxvd2xhYjsKKysgICAgICB5eXN0YWNrc2l6ZSAqPSAyOworKyAgICAgIGlmICh5eXN0YWNrc2l6ZSA+IFlZTUFYREVQVEgpCisrCXl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsKKysKKysgICAgICB7CisrCXNob3J0ICp5eXNzMSA9IHl5c3M7CisrCXVuaW9uIHl5YWxsb2MgKnl5cHRyID0KKysJICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOworKwlpZiAoISB5eXB0cikKKysJICBnb3RvIHl5b3ZlcmZsb3dsYWI7CisrCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3MpOworKwlZWVNUQUNLX1JFTE9DQVRFICh5eXZzKTsKKysjIGlmIFlZTFNQX05FRURFRAorKwlZWVNUQUNLX1JFTE9DQVRFICh5eWxzKTsKKysjIGVuZGlmCisrIyB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCisrCWlmICh5eXNzMSAhPSB5eXNzYSkKKysJICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKKysgICAgICB9CisrIyBlbmRpZgorKyNlbmRpZiAvKiBubyB5eW92ZXJmbG93ICovCisrCisrICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsKKysgICAgICB5eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOworKyNpZiBZWUxTUF9ORUVERUQKKysgICAgICB5eWxzcCA9IHl5bHMgKyB5eXNpemUgLSAxOworKyNlbmRpZgorKworKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKKysJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOworKworKyAgICAgIGlmICh5eXNzcCA+PSB5eXNzICsgeXlzdGFja3NpemUgLSAxKQorKwlZWUFCT1JUOworKyAgICB9CisrCisrICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOworKworKyAgZ290byB5eWJhY2t1cDsKKysKKysKKysvKi0tLS0tLS0tLS0tLgorK3wgeXliYWNrdXAuICB8CisrYC0tLS0tLS0tLS0tKi8KKyt5eWJhY2t1cDoKKysKKysvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgKi8KKysvKiBSZWFkIGEgbG9va2FoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKysvKiB5eXJlc3VtZTogKi8KKysKKysgIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rYWhlYWQgdG9rZW4uICAqLworKworKyAgeXluID0geXlwYWN0W3l5c3RhdGVdOworKyAgaWYgKHl5biA9PSBZWUZMQUcpCisrICAgIGdvdG8geXlkZWZhdWx0OworKworKyAgLyogTm90IGtub3duID0+IGdldCBhIGxvb2thaGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKysKKysgIC8qIHl5Y2hhciBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRgorKyAgICAgb3IgYSB2YWxpZCB0b2tlbiBpbiBleHRlcm5hbCBmb3JtLiAgKi8KKysKKysgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKKysgICAgeworKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOworKyAgICAgIHl5Y2hhciA9IFlZTEVYOworKyAgICB9CisrCisrICAvKiBDb252ZXJ0IHRva2VuIHRvIGludGVybmFsIGZvcm0gKGluIHl5Y2hhcjEpIGZvciBpbmRleGluZyB0YWJsZXMgd2l0aCAqLworKworKyAgaWYgKHl5Y2hhciA8PSAwKQkJLyogVGhpcyBtZWFucyBlbmQgb2YgaW5wdXQuICovCisrICAgIHsKKysgICAgICB5eWNoYXIxID0gMDsKKysgICAgICB5eWNoYXIgPSBZWUVPRjsJCS8qIERvbid0IGNhbGwgWVlMRVggYW55IG1vcmUgKi8KKysKKysgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIikpOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICB5eWNoYXIxID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CisrCisrI2lmIFlZREVCVUcKKysgICAgIC8qIFdlIGhhdmUgdG8ga2VlcCB0aGlzIGAjaWYgWVlERUJVRycsIHNpbmNlIHdlIHVzZSB2YXJpYWJsZXMKKysJd2hpY2ggYXJlIGRlZmluZWQgb25seSBpZiBgWVlERUJVRycgaXMgc2V0LiAgKi8KKysgICAgICBpZiAoeXlkZWJ1ZykKKysJeworKwkgIFlZRlBSSU5URiAoc3RkZXJyLCAiTmV4dCB0b2tlbiBpcyAlZCAoJXMiLAorKwkJICAgICB5eWNoYXIsIHl5dG5hbWVbeXljaGFyMV0pOworKwkgIC8qIEdpdmUgdGhlIGluZGl2aWR1YWwgcGFyc2VyIGEgd2F5IHRvIHByaW50IHRoZSBwcmVjaXNlCisrCSAgICAgbWVhbmluZyBvZiBhIHRva2VuLCBmb3IgZnVydGhlciBkZWJ1Z2dpbmcgaW5mby4gICovCisrIyBpZmRlZiBZWVBSSU5UCisrCSAgWVlQUklOVCAoc3RkZXJyLCB5eWNoYXIsIHl5bHZhbCk7CisrIyBlbmRpZgorKwkgIFlZRlBSSU5URiAoc3RkZXJyLCAiKVxuIik7CisrCX0KKysjZW5kaWYKKysgICAgfQorKworKyAgeXluICs9IHl5Y2hhcjE7CisrICBpZiAoeXluIDwgMCB8fCB5eW4gPiBZWUxBU1QgfHwgeXljaGVja1t5eW5dICE9IHl5Y2hhcjEpCisrICAgIGdvdG8geXlkZWZhdWx0OworKworKyAgeXluID0geXl0YWJsZVt5eW5dOworKworKyAgLyogeXluIGlzIHdoYXQgdG8gZG8gZm9yIHRoaXMgdG9rZW4gdHlwZSBpbiB0aGlzIHN0YXRlLgorKyAgICAgTmVnYXRpdmUgPT4gcmVkdWNlLCAteXluIGlzIHJ1bGUgbnVtYmVyLgorKyAgICAgUG9zaXRpdmUgPT4gc2hpZnQsIHl5biBpcyBuZXcgc3RhdGUuCisrICAgICAgIE5ldyBzdGF0ZSBpcyBmaW5hbCBzdGF0ZSA9PiBkb24ndCBib3RoZXIgdG8gc2hpZnQsCisrICAgICAgIGp1c3QgcmV0dXJuIHN1Y2Nlc3MuCisrICAgICAwLCBvciBtb3N0IG5lZ2F0aXZlIG51bWJlciA9PiBlcnJvci4gICovCisrCisrICBpZiAoeXluIDwgMCkKKysgICAgeworKyAgICAgIGlmICh5eW4gPT0gWVlGTEFHKQorKwlnb3RvIHl5ZXJybGFiOworKyAgICAgIHl5biA9IC15eW47CisrICAgICAgZ290byB5eXJlZHVjZTsKKysgICAgfQorKyAgZWxzZSBpZiAoeXluID09IDApCisrICAgIGdvdG8geXllcnJsYWI7CisrCisrICBpZiAoeXluID09IFlZRklOQUwpCisrICAgIFlZQUNDRVBUOworKworKyAgLyogU2hpZnQgdGhlIGxvb2thaGVhZCB0b2tlbi4gICovCisrICBZWURQUklOVEYgKChzdGRlcnIsICJTaGlmdGluZyB0b2tlbiAlZCAoJXMpLCAiLAorKwkgICAgICB5eWNoYXIsIHl5dG5hbWVbeXljaGFyMV0pKTsKKysKKysgIC8qIERpc2NhcmQgdGhlIHRva2VuIGJlaW5nIHNoaWZ0ZWQgdW5sZXNzIGl0IGlzIGVvZi4gICovCisrICBpZiAoeXljaGFyICE9IFlZRU9GKQorKyAgICB5eWNoYXIgPSBZWUVNUFRZOworKworKyAgKisreXl2c3AgPSB5eWx2YWw7CisrI2lmIFlZTFNQX05FRURFRAorKyAgKisreXlsc3AgPSB5eWxsb2M7CisrI2VuZGlmCisrCisrICAvKiBDb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yCisrICAgICBzdGF0dXMuICAqLworKyAgaWYgKHl5ZXJyc3RhdHVzKQorKyAgICB5eWVycnN0YXR1cy0tOworKworKyAgeXlzdGF0ZSA9IHl5bjsKKysgIGdvdG8geXluZXdzdGF0ZTsKKysKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorK3wgeXlkZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUuICB8CisrYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyt5eWRlZmF1bHQ6CisrICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKKysgIGlmICh5eW4gPT0gMCkKKysgICAgZ290byB5eWVycmxhYjsKKysgIGdvdG8geXlyZWR1Y2U7CisrCisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyt8IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfAorK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisreXlyZWR1Y2U6CisrICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLworKyAgeXlsZW4gPSB5eXIyW3l5bl07CisrCisrICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoKKysgICAgIGAkJCA9ICQxJy4KKysKKysgICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gdGhlIHNlbWFudGljIHZhbHVlIG9mCisrICAgICB0aGUgbG9va2FoZWFkIHRva2VuLiAgVGhpcyBiZWhhdmlvciBpcyB1bmRvY3VtZW50ZWQgYW5kIEJpc29uCisrICAgICB1c2VycyBzaG91bGQgbm90IHJlbHkgdXBvbiBpdC4gIEFzc2lnbmluZyB0byBZWVZBTAorKyAgICAgdW5jb25kaXRpb25hbGx5IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0IGF2b2lkcyBhCisrICAgICBHQ0Mgd2FybmluZyB0aGF0IFlZVkFMIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAqLworKyAgeXl2YWwgPSB5eXZzcFsxLXl5bGVuXTsKKysKKysjaWYgWVlMU1BfTkVFREVECisrICAvKiBTaW1pbGFybHkgZm9yIHRoZSBkZWZhdWx0IGxvY2F0aW9uLiAgTGV0IHRoZSB1c2VyIHJ1biBhZGRpdGlvbmFsCisrICAgICBjb21tYW5kcyBpZiBmb3IgaW5zdGFuY2UgbG9jYXRpb25zIGFyZSByYW5nZXMuICAqLworKyAgeXlsb2MgPSB5eWxzcFsxLXl5bGVuXTsKKysgIFlZTExPQ19ERUZBVUxUICh5eWxvYywgKHl5bHNwIC0geXlsZW4pLCB5eWxlbik7CisrI2VuZGlmCisrCisrI2lmIFlZREVCVUcKKysgIC8qIFdlIGhhdmUgdG8ga2VlcCB0aGlzIGAjaWYgWVlERUJVRycsIHNpbmNlIHdlIHVzZSB2YXJpYWJsZXMgd2hpY2gKKysgICAgIGFyZSBkZWZpbmVkIG9ubHkgaWYgYFlZREVCVUcnIGlzIHNldC4gICovCisrICBpZiAoeXlkZWJ1ZykKKysgICAgeworKyAgICAgIGludCB5eWk7CisrCisrICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyB2aWEgcnVsZSAlZCAobGluZSAlZCksICIsCisrCQkgeXluLCB5eXJsaW5lW3l5bl0pOworKworKyAgICAgIC8qIFByaW50IHRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQsIGFuZCB0aGVpciByZXN1bHQuICAqLworKyAgICAgIGZvciAoeXlpID0geXlwcmhzW3l5bl07IHl5cmhzW3l5aV0gPiAwOyB5eWkrKykKKysJWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCB5eXRuYW1lW3l5cmhzW3l5aV1dKTsKKysgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAtPiAlc1xuIiwgeXl0bmFtZVt5eXIxW3l5bl1dKTsKKysgICAgfQorKyNlbmRpZgorKworKyAgc3dpdGNoICh5eW4pIHsKKysKKytjYXNlIDE6CisrI2xpbmUgMTUxICJwbHVyYWwueSIKKyt7CisrCSAgICBpZiAoeXl2c3BbMF0uZXhwID09IE5VTEwpCisrCSAgICAgIFlZQUJPUlQ7CisrCSAgICAoKHN0cnVjdCBwYXJzZV9hcmdzICopIGFyZyktPnJlcyA9IHl5dnNwWzBdLmV4cDsKKysJICB9CisrICAgIGJyZWFrOworK2Nhc2UgMjoKKysjbGluZSAxNTkgInBsdXJhbC55IgorK3sKKysJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMyAocW1vcCwgeXl2c3BbLTRdLmV4cCwgeXl2c3BbLTJdLmV4cCwgeXl2c3BbMF0uZXhwKTsKKysJICB9CisrICAgIGJyZWFrOworK2Nhc2UgMzoKKysjbGluZSAxNjMgInBsdXJhbC55IgorK3sKKysJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMiAobG9yLCB5eXZzcFstMl0uZXhwLCB5eXZzcFswXS5leHApOworKwkgIH0KKysgICAgYnJlYWs7CisrY2FzZSA0OgorKyNsaW5lIDE2NyAicGx1cmFsLnkiCisreworKwkgICAgeXl2YWwuZXhwID0gbmV3X2V4cF8yIChsYW5kLCB5eXZzcFstMl0uZXhwLCB5eXZzcFswXS5leHApOworKwkgIH0KKysgICAgYnJlYWs7CisrY2FzZSA1OgorKyNsaW5lIDE3MSAicGx1cmFsLnkiCisreworKwkgICAgeXl2YWwuZXhwID0gbmV3X2V4cF8yICh5eXZzcFstMV0ub3AsIHl5dnNwWy0yXS5leHAsIHl5dnNwWzBdLmV4cCk7CisrCSAgfQorKyAgICBicmVhazsKKytjYXNlIDY6CisrI2xpbmUgMTc1ICJwbHVyYWwueSIKKyt7CisrCSAgICB5eXZhbC5leHAgPSBuZXdfZXhwXzIgKHl5dnNwWy0xXS5vcCwgeXl2c3BbLTJdLmV4cCwgeXl2c3BbMF0uZXhwKTsKKysJICB9CisrICAgIGJyZWFrOworK2Nhc2UgNzoKKysjbGluZSAxNzkgInBsdXJhbC55IgorK3sKKysJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMiAoeXl2c3BbLTFdLm9wLCB5eXZzcFstMl0uZXhwLCB5eXZzcFswXS5leHApOworKwkgIH0KKysgICAgYnJlYWs7CisrY2FzZSA4OgorKyNsaW5lIDE4MyAicGx1cmFsLnkiCisreworKwkgICAgeXl2YWwuZXhwID0gbmV3X2V4cF8yICh5eXZzcFstMV0ub3AsIHl5dnNwWy0yXS5leHAsIHl5dnNwWzBdLmV4cCk7CisrCSAgfQorKyAgICBicmVhazsKKytjYXNlIDk6CisrI2xpbmUgMTg3ICJwbHVyYWwueSIKKyt7CisrCSAgICB5eXZhbC5leHAgPSBuZXdfZXhwXzEgKGxub3QsIHl5dnNwWzBdLmV4cCk7CisrCSAgfQorKyAgICBicmVhazsKKytjYXNlIDEwOgorKyNsaW5lIDE5MSAicGx1cmFsLnkiCisreworKwkgICAgeXl2YWwuZXhwID0gbmV3X2V4cF8wICh2YXIpOworKwkgIH0KKysgICAgYnJlYWs7CisrY2FzZSAxMToKKysjbGluZSAxOTUgInBsdXJhbC55IgorK3sKKysJICAgIGlmICgoeXl2YWwuZXhwID0gbmV3X2V4cF8wIChudW0pKSAhPSBOVUxMKQorKwkgICAgICB5eXZhbC5leHAtPnZhbC5udW0gPSB5eXZzcFswXS5udW07CisrCSAgfQorKyAgICBicmVhazsKKytjYXNlIDEyOgorKyNsaW5lIDIwMCAicGx1cmFsLnkiCisreworKwkgICAgeXl2YWwuZXhwID0geXl2c3BbLTFdLmV4cDsKKysJICB9CisrICAgIGJyZWFrOworK30KKysKKysjbGluZSA3MDUgIi91c3IvbG9jYWwvc2hhcmUvYmlzb24vYmlzb24uc2ltcGxlIgorKworKwwKKysgIHl5dnNwIC09IHl5bGVuOworKyAgeXlzc3AgLT0geXlsZW47CisrI2lmIFlZTFNQX05FRURFRAorKyAgeXlsc3AgLT0geXlsZW47CisrI2VuZGlmCisrCisrI2lmIFlZREVCVUcKKysgIGlmICh5eWRlYnVnKQorKyAgICB7CisrICAgICAgc2hvcnQgKnl5c3NwMSA9IHl5c3MgLSAxOworKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAic3RhdGUgc3RhY2sgbm93Iik7CisrICAgICAgd2hpbGUgKHl5c3NwMSAhPSB5eXNzcCkKKysJWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCAqKyt5eXNzcDEpOworKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKKysgICAgfQorKyNlbmRpZgorKworKyAgKisreXl2c3AgPSB5eXZhbDsKKysjaWYgWVlMU1BfTkVFREVECisrICAqKyt5eWxzcCA9IHl5bG9jOworKyNlbmRpZgorKworKyAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUKKysgICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQorKyAgICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLworKworKyAgeXluID0geXlyMVt5eW5dOworKworKyAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVEJBU0VdICsgKnl5c3NwOworKyAgaWYgKHl5c3RhdGUgPj0gMCAmJiB5eXN0YXRlIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKKysgICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07CisrICBlbHNlCisrICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXluIC0gWVlOVEJBU0VdOworKworKyAgZ290byB5eW5ld3N0YXRlOworKworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorK3wgeXllcnJsYWIgLS0gaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgfAorK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK3l5ZXJybGFiOgorKyAgLyogSWYgbm90IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZXBvcnQgdGhpcyBlcnJvci4gICovCisrICBpZiAoIXl5ZXJyc3RhdHVzKQorKyAgICB7CisrICAgICAgKyt5eW5lcnJzOworKworKyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKysgICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisrCisrICAgICAgaWYgKHl5biA+IFlZRkxBRyAmJiB5eW4gPCBZWUxBU1QpCisrCXsKKysJICBZWVNJWkVfVCB5eXNpemUgPSAwOworKwkgIGNoYXIgKnl5bXNnOworKwkgIGludCB5eXgsIHl5Y291bnQ7CisrCisrCSAgeXljb3VudCA9IDA7CisrCSAgLyogU3RhcnQgWVlYIGF0IC1ZWU4gaWYgbmVnYXRpdmUgdG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbgorKwkgICAgIFlZQ0hFQ0suICAqLworKwkgIGZvciAoeXl4ID0geXluIDwgMCA/IC15eW4gOiAwOworKwkgICAgICAgeXl4IDwgKGludCkgKHNpemVvZiAoeXl0bmFtZSkgLyBzaXplb2YgKGNoYXIgKikpOyB5eXgrKykKKysJICAgIGlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4KQorKwkgICAgICB5eXNpemUgKz0geXlzdHJsZW4gKHl5dG5hbWVbeXl4XSkgKyAxNSwgeXljb3VudCsrOworKwkgIHl5c2l6ZSArPSB5eXN0cmxlbiAoInBhcnNlIGVycm9yLCB1bmV4cGVjdGVkICIpICsgMTsKKysJICB5eXNpemUgKz0geXlzdHJsZW4gKHl5dG5hbWVbWVlUUkFOU0xBVEUgKHl5Y2hhcildKTsKKysJICB5eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5c2l6ZSk7CisrCSAgaWYgKHl5bXNnICE9IDApCisrCSAgICB7CisrCSAgICAgIGNoYXIgKnl5cCA9IHl5c3RwY3B5ICh5eW1zZywgInBhcnNlIGVycm9yLCB1bmV4cGVjdGVkICIpOworKwkgICAgICB5eXAgPSB5eXN0cGNweSAoeXlwLCB5eXRuYW1lW1lZVFJBTlNMQVRFICh5eWNoYXIpXSk7CisrCisrCSAgICAgIGlmICh5eWNvdW50IDwgNSkKKysJCXsKKysJCSAgeXljb3VudCA9IDA7CisrCQkgIGZvciAoeXl4ID0geXluIDwgMCA/IC15eW4gOiAwOworKwkJICAgICAgIHl5eCA8IChpbnQpIChzaXplb2YgKHl5dG5hbWUpIC8gc2l6ZW9mIChjaGFyICopKTsKKysJCSAgICAgICB5eXgrKykKKysJCSAgICBpZiAoeXljaGVja1t5eXggKyB5eW5dID09IHl5eCkKKysJCSAgICAgIHsKKysJCQljb25zdCBjaGFyICp5eXEgPSAhIHl5Y291bnQgPyAiLCBleHBlY3RpbmcgIiA6ICIgb3IgIjsKKysJCQl5eXAgPSB5eXN0cGNweSAoeXlwLCB5eXEpOworKwkJCXl5cCA9IHl5c3RwY3B5ICh5eXAsIHl5dG5hbWVbeXl4XSk7CisrCQkJeXljb3VudCsrOworKwkJICAgICAgfQorKwkJfQorKwkgICAgICB5eWVycm9yICh5eW1zZyk7CisrCSAgICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHl5ZXJyb3IgKCJwYXJzZSBlcnJvcjsgYWxzbyB2aXJ0dWFsIG1lbW9yeSBleGhhdXN0ZWQiKTsKKysJfQorKyAgICAgIGVsc2UKKysjZW5kaWYgLyogZGVmaW5lZCAoWVlFUlJPUl9WRVJCT1NFKSAqLworKwl5eWVycm9yICgicGFyc2UgZXJyb3IiKTsKKysgICAgfQorKyAgZ290byB5eWVycmxhYjE7CisrCisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyt8IHl5ZXJybGFiMSAtLSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBhbiBhY3Rpb24gfAorK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisreXllcnJsYWIxOgorKyAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCisrICAgIHsKKysgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFuCisrCSBlcnJvciwgZGlzY2FyZCBpdC4gICovCisrCisrICAgICAgLyogcmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0ICovCisrICAgICAgaWYgKHl5Y2hhciA9PSBZWUVPRikKKysJWVlBQk9SVDsKKysgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJEaXNjYXJkaW5nIHRva2VuICVkICglcykuXG4iLAorKwkJICB5eWNoYXIsIHl5dG5hbWVbeXljaGFyMV0pKTsKKysgICAgICB5eWNoYXIgPSBZWUVNUFRZOworKyAgICB9CisrCisrICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKKysgICAgIHRva2VuLiAgKi8KKysKKysgIHl5ZXJyc3RhdHVzID0gMzsJCS8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcyAqLworKworKyAgZ290byB5eWVycmhhbmRsZTsKKysKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisrfCB5eWVycmRlZmF1bHQgLS0gY3VycmVudCBzdGF0ZSBkb2VzIG5vdCBkbyBhbnl0aGluZyBzcGVjaWFsIGZvciB0aGUgfAorK3wgZXJyb3IgdG9rZW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKytgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisreXllcnJkZWZhdWx0OgorKyNpZiAwCisrICAvKiBUaGlzIGlzIHdyb25nOyBvbmx5IHN0YXRlcyB0aGF0IGV4cGxpY2l0bHkgd2FudCBlcnJvciB0b2tlbnMKKysgICAgIHNob3VsZCBzaGlmdCB0aGVtLiAgKi8KKysKKysgIC8qIElmIGl0cyBkZWZhdWx0IGlzIHRvIGFjY2VwdCBhbnkgdG9rZW4sIG9rLiAgT3RoZXJ3aXNlIHBvcCBpdC4gICovCisrICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKKysgIGlmICh5eW4pCisrICAgIGdvdG8geXlkZWZhdWx0OworKyNlbmRpZgorKworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorK3wgeXllcnJwb3AgLS0gcG9wIHRoZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUgfAorK3wgZXJyb3IgdG9rZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK3l5ZXJycG9wOgorKyAgaWYgKHl5c3NwID09IHl5c3MpCisrICAgIFlZQUJPUlQ7CisrICB5eXZzcC0tOworKyAgeXlzdGF0ZSA9ICotLXl5c3NwOworKyNpZiBZWUxTUF9ORUVERUQKKysgIHl5bHNwLS07CisrI2VuZGlmCisrCisrI2lmIFlZREVCVUcKKysgIGlmICh5eWRlYnVnKQorKyAgICB7CisrICAgICAgc2hvcnQgKnl5c3NwMSA9IHl5c3MgLSAxOworKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiRXJyb3I6IHN0YXRlIHN0YWNrIG5vdyIpOworKyAgICAgIHdoaWxlICh5eXNzcDEgIT0geXlzc3ApCisrCVlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgKisreXlzc3AxKTsKKysgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CisrICAgIH0KKysjZW5kaWYKKysKKysvKi0tLS0tLS0tLS0tLS0tLgorK3wgeXllcnJoYW5kbGUuICB8CisrYC0tLS0tLS0tLS0tLS0tKi8KKyt5eWVycmhhbmRsZToKKysgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKysgIGlmICh5eW4gPT0gWVlGTEFHKQorKyAgICBnb3RvIHl5ZXJyZGVmYXVsdDsKKysKKysgIHl5biArPSBZWVRFUlJPUjsKKysgIGlmICh5eW4gPCAwIHx8IHl5biA+IFlZTEFTVCB8fCB5eWNoZWNrW3l5bl0gIT0gWVlURVJST1IpCisrICAgIGdvdG8geXllcnJkZWZhdWx0OworKworKyAgeXluID0geXl0YWJsZVt5eW5dOworKyAgaWYgKHl5biA8IDApCisrICAgIHsKKysgICAgICBpZiAoeXluID09IFlZRkxBRykKKysJZ290byB5eWVycnBvcDsKKysgICAgICB5eW4gPSAteXluOworKyAgICAgIGdvdG8geXlyZWR1Y2U7CisrICAgIH0KKysgIGVsc2UgaWYgKHl5biA9PSAwKQorKyAgICBnb3RvIHl5ZXJycG9wOworKworKyAgaWYgKHl5biA9PSBZWUZJTkFMKQorKyAgICBZWUFDQ0VQVDsKKysKKysgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlNoaWZ0aW5nIGVycm9yIHRva2VuLCAiKSk7CisrCisrICAqKyt5eXZzcCA9IHl5bHZhbDsKKysjaWYgWVlMU1BfTkVFREVECisrICAqKyt5eWxzcCA9IHl5bGxvYzsKKysjZW5kaWYKKysKKysgIHl5c3RhdGUgPSB5eW47CisrICBnb3RvIHl5bmV3c3RhdGU7CisrCisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorK3wgeXlhY2NlcHRsYWIgLS0gWVlBQ0NFUFQgY29tZXMgaGVyZS4gIHwKKytgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisreXlhY2NlcHRsYWI6CisrICB5eXJlc3VsdCA9IDA7CisrICBnb3RvIHl5cmV0dXJuOworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisrfCB5eWFib3J0bGFiIC0tIFlZQUJPUlQgY29tZXMgaGVyZS4gIHwKKytgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK3l5YWJvcnRsYWI6CisrICB5eXJlc3VsdCA9IDE7CisrICBnb3RvIHl5cmV0dXJuOworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorK3wgeXlvdmVyZmxvd2FiIC0tIHBhcnNlciBvdmVyZmxvdyBjb21lcyBoZXJlLiAgfAorK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK3l5b3ZlcmZsb3dsYWI6CisrICB5eWVycm9yICgicGFyc2VyIHN0YWNrIG92ZXJmbG93Iik7CisrICB5eXJlc3VsdCA9IDI7CisrICAvKiBGYWxsIHRocm91Z2guICAqLworKworK3l5cmV0dXJuOgorKyNpZm5kZWYgeXlvdmVyZmxvdworKyAgaWYgKHl5c3MgIT0geXlzc2EpCisrICAgIFlZU1RBQ0tfRlJFRSAoeXlzcyk7CisrI2VuZGlmCisrICByZXR1cm4geXlyZXN1bHQ7CisrfQorKyNsaW5lIDIwNSAicGx1cmFsLnkiCisrCisrCisrdm9pZAorK2ludGVybmFsX2Z1bmN0aW9uCisrRlJFRV9FWFBSRVNTSU9OIChzdHJ1Y3QgZXhwcmVzc2lvbiAqZXhwKQorK3sKKysgIGlmIChleHAgPT0gTlVMTCkKKysgICAgcmV0dXJuOworKworKyAgLyogSGFuZGxlIHRoZSByZWN1cnNpdmUgY2FzZS4gICovCisrICBzd2l0Y2ggKGV4cC0+bmFyZ3MpCisrICAgIHsKKysgICAgY2FzZSAzOgorKyAgICAgIEZSRUVfRVhQUkVTU0lPTiAoZXhwLT52YWwuYXJnc1syXSk7CisrICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKysgICAgY2FzZSAyOgorKyAgICAgIEZSRUVfRVhQUkVTU0lPTiAoZXhwLT52YWwuYXJnc1sxXSk7CisrICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKysgICAgY2FzZSAxOgorKyAgICAgIEZSRUVfRVhQUkVTU0lPTiAoZXhwLT52YWwuYXJnc1swXSk7CisrICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKysgICAgZGVmYXVsdDoKKysgICAgICBicmVhazsKKysgICAgfQorKworKyAgZnJlZSAoZXhwKTsKKyt9CisrCisrCisrc3RhdGljIGludAorK3l5bGV4IChZWVNUWVBFICpsdmFsLCBjb25zdCBjaGFyICoqcGV4cCkKKyt7CisrICBjb25zdCBjaGFyICpleHAgPSAqcGV4cDsKKysgIGludCByZXN1bHQ7CisrCisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIGlmIChleHBbMF0gPT0gJ1wwJykKKysJeworKwkgICpwZXhwID0gZXhwOworKwkgIHJldHVybiBZWUVPRjsKKysJfQorKworKyAgICAgIGlmIChleHBbMF0gIT0gJyAnICYmIGV4cFswXSAhPSAnXHQnKQorKwlicmVhazsKKysKKysgICAgICArK2V4cDsKKysgICAgfQorKworKyAgcmVzdWx0ID0gKmV4cCsrOworKyAgc3dpdGNoIChyZXN1bHQpCisrICAgIHsKKysgICAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgorKyAgICBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisrICAgICAgeworKwl1bnNpZ25lZCBsb25nIGludCBuID0gcmVzdWx0IC0gJzAnOworKwl3aGlsZSAoZXhwWzBdID49ICcwJyAmJiBleHBbMF0gPD0gJzknKQorKwkgIHsKKysJICAgIG4gKj0gMTA7CisrCSAgICBuICs9IGV4cFswXSAtICcwJzsKKysJICAgICsrZXhwOworKwkgIH0KKysJbHZhbC0+bnVtID0gbjsKKysJcmVzdWx0ID0gTlVNQkVSOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnPSc6CisrICAgICAgaWYgKGV4cFswXSA9PSAnPScpCisrCXsKKysJICArK2V4cDsKKysJICBsdmFsLT5vcCA9IGVxdWFsOworKwkgIHJlc3VsdCA9IEVRVU9QMjsKKysJfQorKyAgICAgIGVsc2UKKysJcmVzdWx0ID0gWVlFUlJDT0RFOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICchJzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gbm90X2VxdWFsOworKwkgIHJlc3VsdCA9IEVRVU9QMjsKKysJfQorKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcmJzoKKysgICAgY2FzZSAnfCc6CisrICAgICAgaWYgKGV4cFswXSA9PSByZXN1bHQpCisrCSsrZXhwOworKyAgICAgIGVsc2UKKysJcmVzdWx0ID0gWVlFUlJDT0RFOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICc8JzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gbGVzc19vcl9lcXVhbDsKKysJfQorKyAgICAgIGVsc2UKKysJbHZhbC0+b3AgPSBsZXNzX3RoYW47CisrICAgICAgcmVzdWx0ID0gQ01QT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICc+JzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gZ3JlYXRlcl9vcl9lcXVhbDsKKysJfQorKyAgICAgIGVsc2UKKysJbHZhbC0+b3AgPSBncmVhdGVyX3RoYW47CisrICAgICAgcmVzdWx0ID0gQ01QT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcqJzoKKysgICAgICBsdmFsLT5vcCA9IG11bHQ7CisrICAgICAgcmVzdWx0ID0gTVVMT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcvJzoKKysgICAgICBsdmFsLT5vcCA9IGRpdmlkZTsKKysgICAgICByZXN1bHQgPSBNVUxPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJyUnOgorKyAgICAgIGx2YWwtPm9wID0gbW9kdWxlOworKyAgICAgIHJlc3VsdCA9IE1VTE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnKyc6CisrICAgICAgbHZhbC0+b3AgPSBwbHVzOworKyAgICAgIHJlc3VsdCA9IEFERE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnLSc6CisrICAgICAgbHZhbC0+b3AgPSBtaW51czsKKysgICAgICByZXN1bHQgPSBBRERPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJ24nOgorKyAgICBjYXNlICc/JzoKKysgICAgY2FzZSAnOic6CisrICAgIGNhc2UgJygnOgorKyAgICBjYXNlICcpJzoKKysgICAgICAvKiBOb3RoaW5nLCBqdXN0IHJldHVybiB0aGUgY2hhcmFjdGVyLiAgKi8KKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnOyc6CisrICAgIGNhc2UgJ1xuJzoKKysgICAgY2FzZSAnXDAnOgorKyAgICAgIC8qIEJlIHNhZmUgYW5kIGxldCB0aGUgdXNlciBjYWxsIHRoaXMgZnVuY3Rpb24gYWdhaW4uICAqLworKyAgICAgIC0tZXhwOworKyAgICAgIHJlc3VsdCA9IFlZRU9GOworKyAgICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIHJlc3VsdCA9IFlZRVJSQ09ERTsKKysjaWYgWVlERUJVRyAhPSAwCisrICAgICAgLS1leHA7CisrI2VuZGlmCisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgICpwZXhwID0gZXhwOworKworKyAgcmV0dXJuIHJlc3VsdDsKKyt9CisrCisrCisrc3RhdGljIHZvaWQKKyt5eWVycm9yIChjb25zdCBjaGFyICpzdHIpCisreworKyAgLyogRG8gbm90aGluZy4gIFdlIGRvbid0IHByaW50IGVycm9yIG1lc3NhZ2VzIGhlcmUuICAqLworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9wbHVyYWwtZXhwLmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvcGx1cmFsLWV4cC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTc4NzE0MTkyIC0wNDAwCitAQCAtMCwwICsxLDE1NCBAQAorKy8qIEV4cHJlc3Npb24gcGFyc2luZyBmb3IgcGx1cmFsIGZvcm0gc2VsZWN0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDIwMDAuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworKyNpbmNsdWRlICJwbHVyYWwtZXhwLmgiCisrCisrI2lmIChkZWZpbmVkIF9fR05VQ19fICYmICFkZWZpbmVkIF9fQVBQTEVfQ0NfXykgXAorKyAgICB8fCAoZGVmaW5lZCBfX1NURENfVkVSU0lPTl9fICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkKKysKKysvKiBUaGVzZSBzdHJ1Y3RzIGFyZSB0aGUgY29uc3RhbnQgZXhwcmVzc2lvbiBmb3IgdGhlIGdlcm1hbmljIHBsdXJhbAorKyAgIGZvcm0gZGV0ZXJtaW5hdGlvbi4gIEl0IHJlcHJlc2VudHMgdGhlIGV4cHJlc3Npb24gICJuICE9IDEiLiAgKi8KKytzdGF0aWMgY29uc3Qgc3RydWN0IGV4cHJlc3Npb24gcGx2YXIgPQorK3sKKysgIC5uYXJncyA9IDAsCisrICAub3BlcmF0aW9uID0gdmFyLAorK307Cisrc3RhdGljIGNvbnN0IHN0cnVjdCBleHByZXNzaW9uIHBsb25lID0KKyt7CisrICAubmFyZ3MgPSAwLAorKyAgLm9wZXJhdGlvbiA9IG51bSwKKysgIC52YWwgPQorKyAgeworKyAgICAubnVtID0gMQorKyAgfQorK307Cisrc3RydWN0IGV4cHJlc3Npb24gR0VSTUFOSUNfUExVUkFMID0KKyt7CisrICAubmFyZ3MgPSAyLAorKyAgLm9wZXJhdGlvbiA9IG5vdF9lcXVhbCwKKysgIC52YWwgPQorKyAgeworKyAgICAuYXJncyA9CisrICAgIHsKKysgICAgICBbMF0gPSAoc3RydWN0IGV4cHJlc3Npb24gKikgJnBsdmFyLAorKyAgICAgIFsxXSA9IChzdHJ1Y3QgZXhwcmVzc2lvbiAqKSAmcGxvbmUKKysgICAgfQorKyAgfQorK307CisrCisrIyBkZWZpbmUgSU5JVF9HRVJNQU5JQ19QTFVSQUwoKQorKworKyNlbHNlCisrCisrLyogRm9yIGNvbXBpbGVycyB3aXRob3V0IHN1cHBvcnQgZm9yIElTTyBDIDk5IHN0cnVjdC91bmlvbiBpbml0aWFsaXplcnM6CisrICAgSW5pdGlhbGl6YXRpb24gYXQgcnVuLXRpbWUuICAqLworKworK3N0YXRpYyBzdHJ1Y3QgZXhwcmVzc2lvbiBwbHZhcjsKKytzdGF0aWMgc3RydWN0IGV4cHJlc3Npb24gcGxvbmU7Cisrc3RydWN0IGV4cHJlc3Npb24gR0VSTUFOSUNfUExVUkFMOworKworK3N0YXRpYyB2b2lkCisraW5pdF9nZXJtYW5pY19wbHVyYWwgKCkKKyt7CisrICBpZiAocGxvbmUudmFsLm51bSA9PSAwKQorKyAgICB7CisrICAgICAgcGx2YXIubmFyZ3MgPSAwOworKyAgICAgIHBsdmFyLm9wZXJhdGlvbiA9IHZhcjsKKysKKysgICAgICBwbG9uZS5uYXJncyA9IDA7CisrICAgICAgcGxvbmUub3BlcmF0aW9uID0gbnVtOworKyAgICAgIHBsb25lLnZhbC5udW0gPSAxOworKworKyAgICAgIEdFUk1BTklDX1BMVVJBTC5uYXJncyA9IDI7CisrICAgICAgR0VSTUFOSUNfUExVUkFMLm9wZXJhdGlvbiA9IG5vdF9lcXVhbDsKKysgICAgICBHRVJNQU5JQ19QTFVSQUwudmFsLmFyZ3NbMF0gPSAmcGx2YXI7CisrICAgICAgR0VSTUFOSUNfUExVUkFMLnZhbC5hcmdzWzFdID0gJnBsb25lOworKyAgICB9CisrfQorKworKyMgZGVmaW5lIElOSVRfR0VSTUFOSUNfUExVUkFMKCkgaW5pdF9nZXJtYW5pY19wbHVyYWwgKCkKKysKKysjZW5kaWYKKysKKyt2b2lkCisraW50ZXJuYWxfZnVuY3Rpb24KKytFWFRSQUNUX1BMVVJBTF9FWFBSRVNTSU9OIChjb25zdCBjaGFyICpudWxsZW50cnksIHN0cnVjdCBleHByZXNzaW9uICoqcGx1cmFscCwKKysJCQkgICB1bnNpZ25lZCBsb25nIGludCAqbnBsdXJhbHNwKQorK3sKKysgIGlmIChudWxsZW50cnkgIT0gTlVMTCkKKysgICAgeworKyAgICAgIGNvbnN0IGNoYXIgKnBsdXJhbDsKKysgICAgICBjb25zdCBjaGFyICpucGx1cmFsczsKKysKKysgICAgICBwbHVyYWwgPSBzdHJzdHIgKG51bGxlbnRyeSwgInBsdXJhbD0iKTsKKysgICAgICBucGx1cmFscyA9IHN0cnN0ciAobnVsbGVudHJ5LCAibnBsdXJhbHM9Iik7CisrICAgICAgaWYgKHBsdXJhbCA9PSBOVUxMIHx8IG5wbHVyYWxzID09IE5VTEwpCisrCWdvdG8gbm9fcGx1cmFsOworKyAgICAgIGVsc2UKKysJeworKwkgIGNoYXIgKmVuZHA7CisrCSAgdW5zaWduZWQgbG9uZyBpbnQgbjsKKysJICBzdHJ1Y3QgcGFyc2VfYXJncyBhcmdzOworKworKwkgIC8qIEZpcnN0IGdldCB0aGUgbnVtYmVyLiAgKi8KKysJICBucGx1cmFscyArPSA5OworKwkgIHdoaWxlICgqbnBsdXJhbHMgIT0gJ1wwJyAmJiBpc3NwYWNlICgodW5zaWduZWQgY2hhcikgKm5wbHVyYWxzKSkKKysJICAgICsrbnBsdXJhbHM7CisrCSAgaWYgKCEoKm5wbHVyYWxzID49ICcwJyAmJiAqbnBsdXJhbHMgPD0gJzknKSkKKysJICAgIGdvdG8gbm9fcGx1cmFsOworKyNpZiBkZWZpbmVkIEhBVkVfU1RSVE9VTCB8fCBkZWZpbmVkIF9MSUJDCisrCSAgbiA9IHN0cnRvdWwgKG5wbHVyYWxzLCAmZW5kcCwgMTApOworKyNlbHNlCisrCSAgZm9yIChlbmRwID0gbnBsdXJhbHMsIG4gPSAwOyAqZW5kcCA+PSAnMCcgJiYgKmVuZHAgPD0gJzknOyBlbmRwKyspCisrCSAgICBuID0gbiAqIDEwICsgKCplbmRwIC0gJzAnKTsKKysjZW5kaWYKKysJICBpZiAobnBsdXJhbHMgPT0gZW5kcCkKKysJICAgIGdvdG8gbm9fcGx1cmFsOworKwkgICpucGx1cmFsc3AgPSBuOworKworKwkgIC8qIER1ZSB0byB0aGUgcmVzdHJpY3Rpb25zIGJpc29uIGltcG9zZXMgb250byB0aGUgaW50ZXJmYWNlIG9mIHRoZQorKwkgICAgIHNjYW5uZXIgZnVuY3Rpb24gd2UgaGF2ZSB0byBwdXQgdGhlIGlucHV0IHN0cmluZyBhbmQgdGhlIHJlc3VsdAorKwkgICAgIHBhc3NlZCB1cCBmcm9tIHRoZSBwYXJzZXIgaW50byB0aGUgc2FtZSBzdHJ1Y3R1cmUgd2hpY2ggYWRkcmVzcworKwkgICAgIGlzIHBhc3NlZCBkb3duIHRvIHRoZSBwYXJzZXIuICAqLworKwkgIHBsdXJhbCArPSA3OworKwkgIGFyZ3MuY3AgPSBwbHVyYWw7CisrCSAgaWYgKFBMVVJBTF9QQVJTRSAoJmFyZ3MpICE9IDApCisrCSAgICBnb3RvIG5vX3BsdXJhbDsKKysJICAqcGx1cmFscCA9IGFyZ3MucmVzOworKwl9CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIC8qIEJ5IGRlZmF1bHQgd2UgYXJlIHVzaW5nIHRoZSBHZXJtYW5pYyBmb3JtOiBzaW5ndWxhciBmb3JtIG9ubHkKKysgICAgICAgICBmb3IgYG9uZScsIHRoZSBwbHVyYWwgZm9ybSBvdGhlcndpc2UuICBZZXMsIHRoaXMgaXMgYWxzbyB3aGF0CisrICAgICAgICAgRW5nbGlzaCBpcyB1c2luZyBzaW5jZSBFbmdsaXNoIGlzIGEgR2VybWFuaWMgbGFuZ3VhZ2UuICAqLworKyAgICBub19wbHVyYWw6CisrICAgICAgSU5JVF9HRVJNQU5JQ19QTFVSQUwgKCk7CisrICAgICAgKnBsdXJhbHAgPSAmR0VSTUFOSUNfUExVUkFMOworKyAgICAgICpucGx1cmFsc3AgPSAyOworKyAgICB9CisrfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3BsdXJhbC1leHAuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9wbHVyYWwtZXhwLmgJMjAwNC0wOS0xMiAxNDo0MDozNC41ODQ3MTMyODAgLTA0MDAKK0BAIC0wLDAgKzEsMTE4IEBACisrLyogRXhwcmVzc2lvbiBwYXJzaW5nIGFuZCBldmFsdWF0aW9uIGZvciBwbHVyYWwgZm9ybSBzZWxlY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMjAwMC4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfUExVUkFMX0VYUF9ICisrI2RlZmluZSBfUExVUkFMX0VYUF9ICisrCisrI2lmbmRlZiBpbnRlcm5hbF9mdW5jdGlvbgorKyMgZGVmaW5lIGludGVybmFsX2Z1bmN0aW9uCisrI2VuZGlmCisrCisrI2lmbmRlZiBhdHRyaWJ1dGVfaGlkZGVuCisrIyBkZWZpbmUgYXR0cmlidXRlX2hpZGRlbgorKyNlbmRpZgorKworKworKy8qIFRoaXMgaXMgdGhlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBleHByZXNzaW9ucyB0byBkZXRlcm1pbmUgdGhlCisrICAgcGx1cmFsIGZvcm0uICAqLworK3N0cnVjdCBleHByZXNzaW9uCisreworKyAgaW50IG5hcmdzOwkJCS8qIE51bWJlciBvZiBhcmd1bWVudHMuICAqLworKyAgZW51bSBvcGVyYXRvcgorKyAgeworKyAgICAvKiBXaXRob3V0IGFyZ3VtZW50czogICovCisrICAgIHZhciwJCQkvKiBUaGUgdmFyaWFibGUgIm4iLiAgKi8KKysgICAgbnVtLAkJCS8qIERlY2ltYWwgbnVtYmVyLiAgKi8KKysgICAgLyogVW5hcnkgb3BlcmF0b3JzOiAgKi8KKysgICAgbG5vdCwJCQkvKiBMb2dpY2FsIE5PVC4gICovCisrICAgIC8qIEJpbmFyeSBvcGVyYXRvcnM6ICAqLworKyAgICBtdWx0LAkJCS8qIE11bHRpcGxpY2F0aW9uLiAgKi8KKysgICAgZGl2aWRlLAkJCS8qIERpdmlzaW9uLiAgKi8KKysgICAgbW9kdWxlLAkJCS8qIE1vZHVsbyBvcGVyYXRpb24uICAqLworKyAgICBwbHVzLAkJCS8qIEFkZGl0aW9uLiAgKi8KKysgICAgbWludXMsCQkJLyogU3VidHJhY3Rpb24uICAqLworKyAgICBsZXNzX3RoYW4sCQkJLyogQ29tcGFyaXNvbi4gICovCisrICAgIGdyZWF0ZXJfdGhhbiwJCS8qIENvbXBhcmlzb24uICAqLworKyAgICBsZXNzX29yX2VxdWFsLAkJLyogQ29tcGFyaXNvbi4gICovCisrICAgIGdyZWF0ZXJfb3JfZXF1YWwsCQkvKiBDb21wYXJpc29uLiAgKi8KKysgICAgZXF1YWwsCQkJLyogQ29tcGFyaXNvbiBmb3IgZXF1YWxpdHkuICAqLworKyAgICBub3RfZXF1YWwsCQkJLyogQ29tcGFyaXNvbiBmb3IgaW5lcXVhbGl0eS4gICovCisrICAgIGxhbmQsCQkJLyogTG9naWNhbCBBTkQuICAqLworKyAgICBsb3IsCQkJLyogTG9naWNhbCBPUi4gICovCisrICAgIC8qIFRlcm5hcnkgb3BlcmF0b3JzOiAgKi8KKysgICAgcW1vcAkJCS8qIFF1ZXN0aW9uIG1hcmsgb3BlcmF0b3IuICAqLworKyAgfSBvcGVyYXRpb247CisrICB1bmlvbgorKyAgeworKyAgICB1bnNpZ25lZCBsb25nIGludCBudW07CS8qIE51bWJlciB2YWx1ZSBmb3IgYG51bScuICAqLworKyAgICBzdHJ1Y3QgZXhwcmVzc2lvbiAqYXJnc1szXTsJLyogVXAgdG8gdGhyZWUgYXJndW1lbnRzLiAgKi8KKysgIH0gdmFsOworK307CisrCisrLyogVGhpcyBpcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgdG8gcGFzcyBpbmZvcm1hdGlvbiB0byB0aGUgcGFyc2VyIGFuZCBnZXQKKysgICB0aGUgcmVzdWx0IGluIGEgdGhyZWFkLXNhZmUgd2F5LiAgKi8KKytzdHJ1Y3QgcGFyc2VfYXJncworK3sKKysgIGNvbnN0IGNoYXIgKmNwOworKyAgc3RydWN0IGV4cHJlc3Npb24gKnJlczsKKyt9OworKworKworKy8qIE5hbWVzIGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoaXMgc291cmNlIGNvZGUgaXMgdXNlZAorKyAgIDEuIGluIHRoZSBHTlUgQyBMaWJyYXJ5IGxpYnJhcnksCisrICAgMi4gaW4gdGhlIEdOVSBsaWJpbnRsIGxpYnJhcnksCisrICAgMy4gaW4gdGhlIEdOVSBnZXR0ZXh0IHRvb2xzLgorKyAgIFRoZSBmdW5jdGlvbiBuYW1lcyBpbiBlYWNoIHNpdHVhdGlvbiBtdXN0IGJlIGRpZmZlcmVudCwgdG8gYWxsb3cgZm9yCisrICAgYmluYXJ5IGluY29tcGF0aWJsZSBjaGFuZ2VzIGluICdzdHJ1Y3QgZXhwcmVzc2lvbicuICBGdXJ0aGVybW9yZSwKKysgICAxLiBpbiB0aGUgR05VIEMgTGlicmFyeSBsaWJyYXJ5LCB0aGUgbmFtZXMgaGF2ZSBhIF9fIHByZWZpeCwKKysgICAyLiszLiBpbiB0aGUgR05VIGxpYmludGwgbGlicmFyeSBhbmQgaW4gdGhlIEdOVSBnZXR0ZXh0IHRvb2xzLCB0aGUgbmFtZXMKKysgICAgICAgICBtdXN0IGZvbGxvdyBBTlNJIEMgYW5kIG5vdCBzdGFydCB3aXRoIF9fLgorKyAgIFNvIHdlIGhhdmUgdG8gZGlzdGluZ3Vpc2ggdGhlIHRocmVlIGNhc2VzLiAgKi8KKysjaWZkZWYgX0xJQkMKKysjIGRlZmluZSBGUkVFX0VYUFJFU1NJT04gX19nZXR0ZXh0X2ZyZWVfZXhwCisrIyBkZWZpbmUgUExVUkFMX1BBUlNFIF9fZ2V0dGV4dHBhcnNlCisrIyBkZWZpbmUgR0VSTUFOSUNfUExVUkFMIF9fZ2V0dGV4dF9nZXJtYW5pY19wbHVyYWwKKysjIGRlZmluZSBFWFRSQUNUX1BMVVJBTF9FWFBSRVNTSU9OIF9fZ2V0dGV4dF9leHRyYWN0X3BsdXJhbAorKyNlbGlmIGRlZmluZWQgKElOX0xJQklOVEwpCisrIyBkZWZpbmUgRlJFRV9FWFBSRVNTSU9OIGxpYmludGxfZ2V0dGV4dF9mcmVlX2V4cAorKyMgZGVmaW5lIFBMVVJBTF9QQVJTRSBsaWJpbnRsX2dldHRleHRwYXJzZQorKyMgZGVmaW5lIEdFUk1BTklDX1BMVVJBTCBsaWJpbnRsX2dldHRleHRfZ2VybWFuaWNfcGx1cmFsCisrIyBkZWZpbmUgRVhUUkFDVF9QTFVSQUxfRVhQUkVTU0lPTiBsaWJpbnRsX2dldHRleHRfZXh0cmFjdF9wbHVyYWwKKysjZWxzZQorKyMgZGVmaW5lIEZSRUVfRVhQUkVTU0lPTiBmcmVlX3BsdXJhbF9leHByZXNzaW9uCisrIyBkZWZpbmUgUExVUkFMX1BBUlNFIHBhcnNlX3BsdXJhbF9leHByZXNzaW9uCisrIyBkZWZpbmUgR0VSTUFOSUNfUExVUkFMIGdlcm1hbmljX3BsdXJhbAorKyMgZGVmaW5lIEVYVFJBQ1RfUExVUkFMX0VYUFJFU1NJT04gZXh0cmFjdF9wbHVyYWxfZXhwcmVzc2lvbgorKyNlbmRpZgorKworK2V4dGVybiB2b2lkIEZSRUVfRVhQUkVTU0lPTiAoc3RydWN0IGV4cHJlc3Npb24gKmV4cCkKKysgICAgIGludGVybmFsX2Z1bmN0aW9uOworK2V4dGVybiBpbnQgUExVUkFMX1BBUlNFICh2b2lkICphcmcpOworK2V4dGVybiBzdHJ1Y3QgZXhwcmVzc2lvbiBHRVJNQU5JQ19QTFVSQUwgYXR0cmlidXRlX2hpZGRlbjsKKytleHRlcm4gdm9pZCBFWFRSQUNUX1BMVVJBTF9FWFBSRVNTSU9OIChjb25zdCBjaGFyICpudWxsZW50cnksCisrCQkJCSAgICAgICBzdHJ1Y3QgZXhwcmVzc2lvbiAqKnBsdXJhbHAsCisrCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGludCAqbnBsdXJhbHNwKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisrCisrI2lmICFkZWZpbmVkIChfTElCQykgJiYgIWRlZmluZWQgKElOX0xJQklOVEwpCisrZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHBsdXJhbF9ldmFsIChzdHJ1Y3QgZXhwcmVzc2lvbiAqcGV4cCwKKysJCQkJICAgICAgdW5zaWduZWQgbG9uZyBpbnQgbik7CisrI2VuZGlmCisrCisrI2VuZGlmIC8qIF9QTFVSQUxfRVhQX0ggKi8KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9wbHVyYWwueQkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9wbHVyYWwueQkyMDA0LTA5LTEyIDE0OjQwOjM0LjU4OTcxMjUyMCAtMDQwMAorQEAgLTAsMCArMSwzODEgQEAKKysleworKy8qIEV4cHJlc3Npb24gcGFyc2luZyBmb3IgcGx1cmFsIGZvcm0gc2VsZWN0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDIwMDAuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFRoZSBiaXNvbiBnZW5lcmF0ZWQgcGFyc2VyIHVzZXMgYWxsb2NhLiAgQUlYIDMgZm9yY2VzIHVzIHRvIHB1dCB0aGlzCisrICAgZGVjbGFyYXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4gIFRoZSBkZWNsYXJhdGlvbiBpbiBiaXNvbidzCisrICAgc2tlbGV0b24gZmlsZSBjb21lcyB0b28gbGF0ZS4gIFRoaXMgbXVzdCBjb21lIGJlZm9yZSA8Y29uZmlnLmg+CisrICAgYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlIGFyYml0cmFyeSBzeXN0ZW0gaGVhZGVycy4gICovCisrI2lmIGRlZmluZWQgX0FJWCAmJiAhZGVmaW5lZCBfX0dOVUNfXworKyAjcHJhZ21hIGFsbG9jYQorKyNlbmRpZgorKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlICJwbHVyYWwtZXhwLmgiCisrCisrLyogVGhlIG1haW4gZnVuY3Rpb24gZ2VuZXJhdGVkIGJ5IHRoZSBwYXJzZXIgaXMgY2FsbGVkIF9fZ2V0dGV4dHBhcnNlLAorKyAgIGJ1dCB3ZSB3YW50IGl0IHRvIGJlIGNhbGxlZCBQTFVSQUxfUEFSU0UuICAqLworKyNpZm5kZWYgX0xJQkMKKysjIGRlZmluZSBfX2dldHRleHRwYXJzZSBQTFVSQUxfUEFSU0UKKysjZW5kaWYKKysKKysjZGVmaW5lIFlZTEVYX1BBUkFNCSYoKHN0cnVjdCBwYXJzZV9hcmdzICopIGFyZyktPmNwCisrI2RlZmluZSBZWVBBUlNFX1BBUkFNCWFyZworKyV9CisrJXB1cmVfcGFyc2VyCisrJWV4cGVjdCA3CisrCisrJXVuaW9uIHsKKysgIHVuc2lnbmVkIGxvbmcgaW50IG51bTsKKysgIGVudW0gb3BlcmF0b3Igb3A7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqZXhwOworK30KKysKKysleworKy8qIFByb3RvdHlwZXMgZm9yIGxvY2FsIGZ1bmN0aW9ucy4gICovCisrc3RhdGljIGludCB5eWxleCAoWVlTVFlQRSAqbHZhbCwgY29uc3QgY2hhciAqKnBleHApOworK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKGNvbnN0IGNoYXIgKnN0cik7CisrCisrLyogQWxsb2NhdGlvbiBvZiBleHByZXNzaW9ucy4gICovCisrCisrc3RhdGljIHN0cnVjdCBleHByZXNzaW9uICoKKytuZXdfZXhwIChpbnQgbmFyZ3MsIGVudW0gb3BlcmF0b3Igb3AsIHN0cnVjdCBleHByZXNzaW9uICogY29uc3QgKmFyZ3MpCisreworKyAgaW50IGk7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqbmV3cDsKKysKKysgIC8qIElmIGFueSBvZiB0aGUgYXJndW1lbnQgY291bGQgbm90IGJlIG1hbGxvYydlZCwganVzdCByZXR1cm4gTlVMTC4gICovCisrICBmb3IgKGkgPSBuYXJncyAtIDE7IGkgPj0gMDsgaS0tKQorKyAgICBpZiAoYXJnc1tpXSA9PSBOVUxMKQorKyAgICAgIGdvdG8gZmFpbDsKKysKKysgIC8qIEFsbG9jYXRlIGEgbmV3IGV4cHJlc3Npb24uICAqLworKyAgbmV3cCA9IChzdHJ1Y3QgZXhwcmVzc2lvbiAqKSBtYWxsb2MgKHNpemVvZiAoKm5ld3ApKTsKKysgIGlmIChuZXdwICE9IE5VTEwpCisrICAgIHsKKysgICAgICBuZXdwLT5uYXJncyA9IG5hcmdzOworKyAgICAgIG5ld3AtPm9wZXJhdGlvbiA9IG9wOworKyAgICAgIGZvciAoaSA9IG5hcmdzIC0gMTsgaSA+PSAwOyBpLS0pCisrCW5ld3AtPnZhbC5hcmdzW2ldID0gYXJnc1tpXTsKKysgICAgICByZXR1cm4gbmV3cDsKKysgICAgfQorKworKyBmYWlsOgorKyAgZm9yIChpID0gbmFyZ3MgLSAxOyBpID49IDA7IGktLSkKKysgICAgRlJFRV9FWFBSRVNTSU9OIChhcmdzW2ldKTsKKysKKysgIHJldHVybiBOVUxMOworK30KKysKKytzdGF0aWMgaW5saW5lIHN0cnVjdCBleHByZXNzaW9uICoKKytuZXdfZXhwXzAgKGVudW0gb3BlcmF0b3Igb3ApCisreworKyAgcmV0dXJuIG5ld19leHAgKDAsIG9wLCBOVUxMKTsKKyt9CisrCisrc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhwcmVzc2lvbiAqCisrbmV3X2V4cF8xIChlbnVtIG9wZXJhdG9yIG9wLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqcmlnaHQpCisreworKyAgc3RydWN0IGV4cHJlc3Npb24gKmFyZ3NbMV07CisrCisrICBhcmdzWzBdID0gcmlnaHQ7CisrICByZXR1cm4gbmV3X2V4cCAoMSwgb3AsIGFyZ3MpOworK30KKysKKytzdGF0aWMgc3RydWN0IGV4cHJlc3Npb24gKgorK25ld19leHBfMiAoZW51bSBvcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKmxlZnQsIHN0cnVjdCBleHByZXNzaW9uICpyaWdodCkKKyt7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqYXJnc1syXTsKKysKKysgIGFyZ3NbMF0gPSBsZWZ0OworKyAgYXJnc1sxXSA9IHJpZ2h0OworKyAgcmV0dXJuIG5ld19leHAgKDIsIG9wLCBhcmdzKTsKKyt9CisrCisrc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhwcmVzc2lvbiAqCisrbmV3X2V4cF8zIChlbnVtIG9wZXJhdG9yIG9wLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqYmV4cCwKKysJICAgc3RydWN0IGV4cHJlc3Npb24gKnRicmFuY2gsIHN0cnVjdCBleHByZXNzaW9uICpmYnJhbmNoKQorK3sKKysgIHN0cnVjdCBleHByZXNzaW9uICphcmdzWzNdOworKworKyAgYXJnc1swXSA9IGJleHA7CisrICBhcmdzWzFdID0gdGJyYW5jaDsKKysgIGFyZ3NbMl0gPSBmYnJhbmNoOworKyAgcmV0dXJuIG5ld19leHAgKDMsIG9wLCBhcmdzKTsKKyt9CisrCisrJX0KKysKKysvKiBUaGlzIGRlY2xhcmVzIHRoYXQgYWxsIG9wZXJhdG9ycyBoYXZlIHRoZSBzYW1lIGFzc29jaWF0aXZpdHkgYW5kIHRoZQorKyAgIHByZWNlZGVuY2Ugb3JkZXIgYXMgaW4gQy4gIFNlZSBbSGFyYmlzb24sIFN0ZWVsZTogQywgQSBSZWZlcmVuY2UgTWFudWFsXS4KKysgICBUaGVyZSBpcyBubyB1bmFyeSBtaW51cyBhbmQgbm8gYml0d2lzZSBvcGVyYXRvcnMuCisrICAgT3BlcmF0b3JzIHdpdGggdGhlIHNhbWUgc3ludGFjdGljIGJlaGF2aW91ciBoYXZlIGJlZW4gbWVyZ2VkIGludG8gYSBzaW5nbGUKKysgICB0b2tlbiwgdG8gc2F2ZSBzcGFjZSBpbiB0aGUgYXJyYXkgZ2VuZXJhdGVkIGJ5IGJpc29uLiAgKi8KKyslcmlnaHQgJz8nCQkvKiAgID8JCSovCisrJWxlZnQgJ3wnCQkvKiAgIHx8CQkqLworKyVsZWZ0ICcmJwkJLyogICAmJgkJKi8KKyslbGVmdCBFUVVPUDIJCS8qICAgPT0gIT0JKi8KKyslbGVmdCBDTVBPUDIJCS8qICAgPCA+IDw9ID49CSovCisrJWxlZnQgQURET1AyCQkvKiAgICsgLQkqLworKyVsZWZ0IE1VTE9QMgkJLyogICAqIC8gJQkqLworKyVyaWdodCAnIScJCS8qICAgIQkJKi8KKysKKysldG9rZW4gPG9wPiBFUVVPUDIgQ01QT1AyIEFERE9QMiBNVUxPUDIKKysldG9rZW4gPG51bT4gTlVNQkVSCisrJXR5cGUgPGV4cD4gZXhwCisrCisrJSUKKysKKytzdGFydDoJICBleHAKKysJICB7CisrCSAgICBpZiAoJDEgPT0gTlVMTCkKKysJICAgICAgWVlBQk9SVDsKKysJICAgICgoc3RydWN0IHBhcnNlX2FyZ3MgKikgYXJnKS0+cmVzID0gJDE7CisrCSAgfQorKwk7CisrCisrZXhwOgkgIGV4cCAnPycgZXhwICc6JyBleHAKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMyAocW1vcCwgJDEsICQzLCAkNSk7CisrCSAgfQorKwl8IGV4cCAnfCcgZXhwCisrCSAgeworKwkgICAgJCQgPSBuZXdfZXhwXzIgKGxvciwgJDEsICQzKTsKKysJICB9CisrCXwgZXhwICcmJyBleHAKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMiAobGFuZCwgJDEsICQzKTsKKysJICB9CisrCXwgZXhwIEVRVU9QMiBleHAKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMiAoJDIsICQxLCAkMyk7CisrCSAgfQorKwl8IGV4cCBDTVBPUDIgZXhwCisrCSAgeworKwkgICAgJCQgPSBuZXdfZXhwXzIgKCQyLCAkMSwgJDMpOworKwkgIH0KKysJfCBleHAgQURET1AyIGV4cAorKwkgIHsKKysJICAgICQkID0gbmV3X2V4cF8yICgkMiwgJDEsICQzKTsKKysJICB9CisrCXwgZXhwIE1VTE9QMiBleHAKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMiAoJDIsICQxLCAkMyk7CisrCSAgfQorKwl8ICchJyBleHAKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMSAobG5vdCwgJDIpOworKwkgIH0KKysJfCAnbicKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMCAodmFyKTsKKysJICB9CisrCXwgTlVNQkVSCisrCSAgeworKwkgICAgaWYgKCgkJCA9IG5ld19leHBfMCAobnVtKSkgIT0gTlVMTCkKKysJICAgICAgJCQtPnZhbC5udW0gPSAkMTsKKysJICB9CisrCXwgJygnIGV4cCAnKScKKysJICB7CisrCSAgICAkJCA9ICQyOworKwkgIH0KKysJOworKworKyUlCisrCisrdm9pZAorK2ludGVybmFsX2Z1bmN0aW9uCisrRlJFRV9FWFBSRVNTSU9OIChzdHJ1Y3QgZXhwcmVzc2lvbiAqZXhwKQorK3sKKysgIGlmIChleHAgPT0gTlVMTCkKKysgICAgcmV0dXJuOworKworKyAgLyogSGFuZGxlIHRoZSByZWN1cnNpdmUgY2FzZS4gICovCisrICBzd2l0Y2ggKGV4cC0+bmFyZ3MpCisrICAgIHsKKysgICAgY2FzZSAzOgorKyAgICAgIEZSRUVfRVhQUkVTU0lPTiAoZXhwLT52YWwuYXJnc1syXSk7CisrICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKysgICAgY2FzZSAyOgorKyAgICAgIEZSRUVfRVhQUkVTU0lPTiAoZXhwLT52YWwuYXJnc1sxXSk7CisrICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKysgICAgY2FzZSAxOgorKyAgICAgIEZSRUVfRVhQUkVTU0lPTiAoZXhwLT52YWwuYXJnc1swXSk7CisrICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKysgICAgZGVmYXVsdDoKKysgICAgICBicmVhazsKKysgICAgfQorKworKyAgZnJlZSAoZXhwKTsKKyt9CisrCisrCisrc3RhdGljIGludAorK3l5bGV4IChZWVNUWVBFICpsdmFsLCBjb25zdCBjaGFyICoqcGV4cCkKKyt7CisrICBjb25zdCBjaGFyICpleHAgPSAqcGV4cDsKKysgIGludCByZXN1bHQ7CisrCisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIGlmIChleHBbMF0gPT0gJ1wwJykKKysJeworKwkgICpwZXhwID0gZXhwOworKwkgIHJldHVybiBZWUVPRjsKKysJfQorKworKyAgICAgIGlmIChleHBbMF0gIT0gJyAnICYmIGV4cFswXSAhPSAnXHQnKQorKwlicmVhazsKKysKKysgICAgICArK2V4cDsKKysgICAgfQorKworKyAgcmVzdWx0ID0gKmV4cCsrOworKyAgc3dpdGNoIChyZXN1bHQpCisrICAgIHsKKysgICAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgorKyAgICBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisrICAgICAgeworKwl1bnNpZ25lZCBsb25nIGludCBuID0gcmVzdWx0IC0gJzAnOworKwl3aGlsZSAoZXhwWzBdID49ICcwJyAmJiBleHBbMF0gPD0gJzknKQorKwkgIHsKKysJICAgIG4gKj0gMTA7CisrCSAgICBuICs9IGV4cFswXSAtICcwJzsKKysJICAgICsrZXhwOworKwkgIH0KKysJbHZhbC0+bnVtID0gbjsKKysJcmVzdWx0ID0gTlVNQkVSOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnPSc6CisrICAgICAgaWYgKGV4cFswXSA9PSAnPScpCisrCXsKKysJICArK2V4cDsKKysJICBsdmFsLT5vcCA9IGVxdWFsOworKwkgIHJlc3VsdCA9IEVRVU9QMjsKKysJfQorKyAgICAgIGVsc2UKKysJcmVzdWx0ID0gWVlFUlJDT0RFOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICchJzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gbm90X2VxdWFsOworKwkgIHJlc3VsdCA9IEVRVU9QMjsKKysJfQorKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcmJzoKKysgICAgY2FzZSAnfCc6CisrICAgICAgaWYgKGV4cFswXSA9PSByZXN1bHQpCisrCSsrZXhwOworKyAgICAgIGVsc2UKKysJcmVzdWx0ID0gWVlFUlJDT0RFOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICc8JzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gbGVzc19vcl9lcXVhbDsKKysJfQorKyAgICAgIGVsc2UKKysJbHZhbC0+b3AgPSBsZXNzX3RoYW47CisrICAgICAgcmVzdWx0ID0gQ01QT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICc+JzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gZ3JlYXRlcl9vcl9lcXVhbDsKKysJfQorKyAgICAgIGVsc2UKKysJbHZhbC0+b3AgPSBncmVhdGVyX3RoYW47CisrICAgICAgcmVzdWx0ID0gQ01QT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcqJzoKKysgICAgICBsdmFsLT5vcCA9IG11bHQ7CisrICAgICAgcmVzdWx0ID0gTVVMT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcvJzoKKysgICAgICBsdmFsLT5vcCA9IGRpdmlkZTsKKysgICAgICByZXN1bHQgPSBNVUxPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJyUnOgorKyAgICAgIGx2YWwtPm9wID0gbW9kdWxlOworKyAgICAgIHJlc3VsdCA9IE1VTE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnKyc6CisrICAgICAgbHZhbC0+b3AgPSBwbHVzOworKyAgICAgIHJlc3VsdCA9IEFERE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnLSc6CisrICAgICAgbHZhbC0+b3AgPSBtaW51czsKKysgICAgICByZXN1bHQgPSBBRERPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJ24nOgorKyAgICBjYXNlICc/JzoKKysgICAgY2FzZSAnOic6CisrICAgIGNhc2UgJygnOgorKyAgICBjYXNlICcpJzoKKysgICAgICAvKiBOb3RoaW5nLCBqdXN0IHJldHVybiB0aGUgY2hhcmFjdGVyLiAgKi8KKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnOyc6CisrICAgIGNhc2UgJ1xuJzoKKysgICAgY2FzZSAnXDAnOgorKyAgICAgIC8qIEJlIHNhZmUgYW5kIGxldCB0aGUgdXNlciBjYWxsIHRoaXMgZnVuY3Rpb24gYWdhaW4uICAqLworKyAgICAgIC0tZXhwOworKyAgICAgIHJlc3VsdCA9IFlZRU9GOworKyAgICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIHJlc3VsdCA9IFlZRVJSQ09ERTsKKysjaWYgWVlERUJVRyAhPSAwCisrICAgICAgLS1leHA7CisrI2VuZGlmCisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgICpwZXhwID0gZXhwOworKworKyAgcmV0dXJuIHJlc3VsdDsKKyt9CisrCisrCisrc3RhdGljIHZvaWQKKyt5eWVycm9yIChjb25zdCBjaGFyICpzdHIpCisreworKyAgLyogRG8gbm90aGluZy4gIFdlIGRvbid0IHByaW50IGVycm9yIG1lc3NhZ2VzIGhlcmUuICAqLworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9wbzJ0Ymwuc2VkLmluCTE5OTgtMDQtMjYgMDk6MjA6NTIuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3BvMnRibC5zZWQuaW4JMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKK0BAIC0xLDEwMiArMCwwIEBACistIyBwbzJ0Ymwuc2VkIC0gQ29udmVydCBVbmlmb3J1bSBzdHlsZSAucG8gZmlsZSB0byBsb29rdXAgdGFibGUgZm9yIGNhdGdldHMKKy0jIENvcHlyaWdodCAoQykgMTk5NSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0jIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgMTk5NS4KKy0jCistIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0jIGFueSBsYXRlciB2ZXJzaW9uLgorLSMKKy0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistIworLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorLSMKKy0xIHsKKy0gIGlcCistLyogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgcG8ydGJsLnNlZCBmcm9tIEBQQUNLQUdFIE5BTUVALnBvdC4gICovXAorLVwKKy0jaWYgSEFWRV9DT05GSUdfSFwKKy0jIGluY2x1ZGUgPGNvbmZpZy5oPlwKKy0jZW5kaWZcCistXAorLSNpbmNsdWRlICJsaWJnZXR0ZXh0LmgiXAorLVwKKy1jb25zdCBzdHJ1Y3QgX21zZ19lbnQgX21zZ190YmxbXSA9IHsKKy0gIGgKKy0gIHMvLiovMC8KKy0gIHgKKy19CistIworLSMgV3JpdGUgbXNnaWQgZW50cmllcyBpbiBDIGFycmF5IGZvcm0uCistIworLS9ebXNnaWQvIHsKKy0gIHMvbXNnaWRbIAldKlwoIi4qIlwpLyAge1wxLworLSAgdGIKKy0jIEFwcGVuZCB0aGUgbmV4dCBsaW5lCistICA6YgorLSAgTgorLSMgTG9vayB3aGV0aGVyIHNlY29uZCBwYXJ0IGlzIGNvbnRpbnVhdGlvbiBsaW5lLgorLSAgcy9cKC4qXCkiXChcblwpIlwoLioiXCkvXDFcMlwzLworLSMgWWVzLCB0aGVuIGJyYW5jaC4KKy0gIHRhCistIyBCZWNhdXNlIHdlIGFzc3VtZSB0aGF0IHRoZSBpbnB1dCBmaWxlIGNvcnJlY3RseSBmb3JtZWQgdGhlIGxpbmUKKy0jIGp1c3QgcmVhZCBjYW5ub3QgYmUgYWdhaW4gYmUgYSBtc2dpZCBsaW5lLiAgU28gaXQncyBzYWZlIHRvIGlnbm9yZQorLSMgaXQuCistICBzL1woLipcKVxuLiovXDEvCistICBiYworLSMgV2UgZm91bmQgYSBjb250aW51YXRpb24gbGluZS4gIEJ1dCBiZWZvcmUgcHJpbnRpbmcgaW5zZXJ0ICdcJy4KKy0gIDphCistICBzL1woLipcKVwoXG4uKlwpL1wxXFxcMi8KKy0gIFAKKy0jIFdlIGNhbm5vdCB1c2UgRCBoZXJlLgorLSAgcy8uKlxuXCguKlwpL1wxLworLSMgU29tZSBidWdneSBzZWRzIGRvIG5vdCBjbGVhciB0aGUgYHN1Y2Nlc3NmdWwgc3Vic3RpdHV0aW9uIHNpbmNlIGxhc3QgYGB0JycnCistIyBmbGFnIG9uIGBOJywgc28gd2UgZG8gYSBgdCcgaGVyZSB0byBjbGVhciBpdC4KKy0gIHRiCistIyBOb3QgcmVhY2hlZAorLSAgOmMKKy0gIHgKKy0jIFRoZSBmb2xsb3dpbmcgbmljZSBzb2x1dGlvbiBpcyBieQorLSMgQnJ1bm8gPEhhaWJsZUBtYTJzMi5tYXRoZW1hdGlrLnVuaS1rYXJsc3J1aGUuZGU+CistICB0ZAorLSMgSW5jcmVtZW50IGEgZGVjaW1hbCBudW1iZXIgaW4gcGF0dGVybiBzcGFjZS4KKy0jIEZpcnN0IGhpZGUgdHJhaWxpbmcgYDknIGRpZ2l0cy4KKy0gIDpkCistICBzLzlcKF8qXCkkL19cMS8KKy0gIHRkCistIyBBc3N1cmUgYXQgbGVhc3Qgb25lIGRpZ2l0IGlzIGF2YWlsYWJsZS4KKy0gIHMvXlwoXypcKSQvMFwxLworLSMgSW5jcmVtZW50IHRoZSBsYXN0IGRpZ2l0LgorLSAgcy84XChfKlwpJC85XDEvCistICBzLzdcKF8qXCkkLzhcMS8KKy0gIHMvNlwoXypcKSQvN1wxLworLSAgcy81XChfKlwpJC82XDEvCistICBzLzRcKF8qXCkkLzVcMS8KKy0gIHMvM1woXypcKSQvNFwxLworLSAgcy8yXChfKlwpJC8zXDEvCistICBzLzFcKF8qXCkkLzJcMS8KKy0gIHMvMFwoXypcKSQvMVwxLworLSMgQ29udmVydCB0aGUgaGlkZGVuIGA5JyBkaWdpdHMgdG8gYDAncy4KKy0gIHMvXy8wL2cKKy0gIHgKKy0gIEcKKy0gIHMvXCguKlwpXG5cKFswLTldKlwpL1wxLCBcMn0sLworLSAgcy9cKC4qXCkiJC9cMS8KKy0gIHAKKy19CistIworLSMgTGFzdCBsaW5lLgorLSMKKy0kIHsKKy0gIGlcCistfTtcCistCistICBnCistICBzLzAqXCguKlwpL2ludCBfbXNnX3RibF9sZW5ndGggPSBcMTsvcAorLX0KKy1kCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcHJpbnRmLWFyZ3MuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9wcmludGYtYXJncy5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTk1NzExNjA4IC0wNDAwCitAQCAtMCwwICsxLDExOSBAQAorKy8qIERlY29tcG9zZWQgcHJpbnRmIGFyZ3VtZW50IGxpc3QuCisrICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKysjaW5jbHVkZSAicHJpbnRmLWFyZ3MuaCIKKysKKysjaWZkZWYgU1RBVElDCisrU1RBVElDCisrI2VuZGlmCisraW50CisrcHJpbnRmX2ZldGNoYXJncyAodmFfbGlzdCBhcmdzLCBhcmd1bWVudHMgKmEpCisreworKyAgc2l6ZV90IGk7CisrICBhcmd1bWVudCAqYXA7CisrCisrICBmb3IgKGkgPSAwLCBhcCA9ICZhLT5hcmdbMF07IGkgPCBhLT5jb3VudDsgaSsrLCBhcCsrKQorKyAgICBzd2l0Y2ggKGFwLT50eXBlKQorKyAgICAgIHsKKysgICAgICBjYXNlIFRZUEVfU0NIQVI6CisrCWFwLT5hLmFfc2NoYXIgPSB2YV9hcmcgKGFyZ3MsIC8qc2lnbmVkIGNoYXIqLyBpbnQpOworKwlicmVhazsKKysgICAgICBjYXNlIFRZUEVfVUNIQVI6CisrCWFwLT5hLmFfdWNoYXIgPSB2YV9hcmcgKGFyZ3MsIC8qdW5zaWduZWQgY2hhciovIGludCk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9TSE9SVDoKKysJYXAtPmEuYV9zaG9ydCA9IHZhX2FyZyAoYXJncywgLypzaG9ydCovIGludCk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9VU0hPUlQ6CisrCWFwLT5hLmFfdXNob3J0ID0gdmFfYXJnIChhcmdzLCAvKnVuc2lnbmVkIHNob3J0Ki8gaW50KTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBUWVBFX0lOVDoKKysJYXAtPmEuYV9pbnQgPSB2YV9hcmcgKGFyZ3MsIGludCk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9VSU5UOgorKwlhcC0+YS5hX3VpbnQgPSB2YV9hcmcgKGFyZ3MsIHVuc2lnbmVkIGludCk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9MT05HSU5UOgorKwlhcC0+YS5hX2xvbmdpbnQgPSB2YV9hcmcgKGFyZ3MsIGxvbmcgaW50KTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBUWVBFX1VMT05HSU5UOgorKwlhcC0+YS5hX3Vsb25naW50ID0gdmFfYXJnIChhcmdzLCB1bnNpZ25lZCBsb25nIGludCk7CisrCWJyZWFrOworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICAgIGNhc2UgVFlQRV9MT05HTE9OR0lOVDoKKysJYXAtPmEuYV9sb25nbG9uZ2ludCA9IHZhX2FyZyAoYXJncywgbG9uZyBsb25nIGludCk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9VTE9OR0xPTkdJTlQ6CisrCWFwLT5hLmFfdWxvbmdsb25naW50ID0gdmFfYXJnIChhcmdzLCB1bnNpZ25lZCBsb25nIGxvbmcgaW50KTsKKysJYnJlYWs7CisrI2VuZGlmCisrICAgICAgY2FzZSBUWVBFX0RPVUJMRToKKysJYXAtPmEuYV9kb3VibGUgPSB2YV9hcmcgKGFyZ3MsIGRvdWJsZSk7CisrCWJyZWFrOworKyNpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCisrICAgICAgY2FzZSBUWVBFX0xPTkdET1VCTEU6CisrCWFwLT5hLmFfbG9uZ2RvdWJsZSA9IHZhX2FyZyAoYXJncywgbG9uZyBkb3VibGUpOworKwlicmVhazsKKysjZW5kaWYKKysgICAgICBjYXNlIFRZUEVfQ0hBUjoKKysJYXAtPmEuYV9jaGFyID0gdmFfYXJnIChhcmdzLCBpbnQpOworKwlicmVhazsKKysjaWZkZWYgSEFWRV9XSU5UX1QKKysgICAgICBjYXNlIFRZUEVfV0lERV9DSEFSOgorKwlhcC0+YS5hX3dpZGVfY2hhciA9IHZhX2FyZyAoYXJncywgd2ludF90KTsKKysJYnJlYWs7CisrI2VuZGlmCisrICAgICAgY2FzZSBUWVBFX1NUUklORzoKKysJYXAtPmEuYV9zdHJpbmcgPSB2YV9hcmcgKGFyZ3MsIGNvbnN0IGNoYXIgKik7CisrCWJyZWFrOworKyNpZmRlZiBIQVZFX1dDSEFSX1QKKysgICAgICBjYXNlIFRZUEVfV0lERV9TVFJJTkc6CisrCWFwLT5hLmFfd2lkZV9zdHJpbmcgPSB2YV9hcmcgKGFyZ3MsIGNvbnN0IHdjaGFyX3QgKik7CisrCWJyZWFrOworKyNlbmRpZgorKyAgICAgIGNhc2UgVFlQRV9QT0lOVEVSOgorKwlhcC0+YS5hX3BvaW50ZXIgPSB2YV9hcmcgKGFyZ3MsIHZvaWQgKik7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9DT1VOVF9TQ0hBUl9QT0lOVEVSOgorKwlhcC0+YS5hX2NvdW50X3NjaGFyX3BvaW50ZXIgPSB2YV9hcmcgKGFyZ3MsIHNpZ25lZCBjaGFyICopOworKwlicmVhazsKKysgICAgICBjYXNlIFRZUEVfQ09VTlRfU0hPUlRfUE9JTlRFUjoKKysJYXAtPmEuYV9jb3VudF9zaG9ydF9wb2ludGVyID0gdmFfYXJnIChhcmdzLCBzaG9ydCAqKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBUWVBFX0NPVU5UX0lOVF9QT0lOVEVSOgorKwlhcC0+YS5hX2NvdW50X2ludF9wb2ludGVyID0gdmFfYXJnIChhcmdzLCBpbnQgKik7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9DT1VOVF9MT05HSU5UX1BPSU5URVI6CisrCWFwLT5hLmFfY291bnRfbG9uZ2ludF9wb2ludGVyID0gdmFfYXJnIChhcmdzLCBsb25nIGludCAqKTsKKysJYnJlYWs7CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrICAgICAgY2FzZSBUWVBFX0NPVU5UX0xPTkdMT05HSU5UX1BPSU5URVI6CisrCWFwLT5hLmFfY291bnRfbG9uZ2xvbmdpbnRfcG9pbnRlciA9IHZhX2FyZyAoYXJncywgbG9uZyBsb25nIGludCAqKTsKKysJYnJlYWs7CisrI2VuZGlmCisrICAgICAgZGVmYXVsdDoKKysJLyogVW5rbm93biB0eXBlLiAgKi8KKysJcmV0dXJuIC0xOworKyAgICAgIH0KKysgIHJldHVybiAwOworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9wcmludGYtYXJncy5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3ByaW50Zi1hcmdzLmgJMjAwNC0wOS0xMiAxNDo0MDozNC42MDE3MTA2OTYgLTA0MDAKK0BAIC0wLDAgKzEsMTM3IEBACisrLyogRGVjb21wb3NlZCBwcmludGYgYXJndW1lbnQgbGlzdC4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfUFJJTlRGX0FSR1NfSAorKyNkZWZpbmUgX1BSSU5URl9BUkdTX0gKKysKKysvKiBHZXQgc2l6ZV90LiAgKi8KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrLyogR2V0IHdjaGFyX3QuICAqLworKyNpZmRlZiBIQVZFX1dDSEFSX1QKKysjIGluY2x1ZGUgPHN0ZGRlZi5oPgorKyNlbmRpZgorKworKy8qIEdldCB3aW50X3QuICAqLworKyNpZmRlZiBIQVZFX1dJTlRfVAorKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjZW5kaWYKKysKKysvKiBHZXQgdmFfbGlzdC4gICovCisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorKworKworKy8qIEFyZ3VtZW50IHR5cGVzICovCisrdHlwZWRlZiBlbnVtCisreworKyAgVFlQRV9OT05FLAorKyAgVFlQRV9TQ0hBUiwKKysgIFRZUEVfVUNIQVIsCisrICBUWVBFX1NIT1JULAorKyAgVFlQRV9VU0hPUlQsCisrICBUWVBFX0lOVCwKKysgIFRZUEVfVUlOVCwKKysgIFRZUEVfTE9OR0lOVCwKKysgIFRZUEVfVUxPTkdJTlQsCisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrICBUWVBFX0xPTkdMT05HSU5ULAorKyAgVFlQRV9VTE9OR0xPTkdJTlQsCisrI2VuZGlmCisrICBUWVBFX0RPVUJMRSwKKysjaWZkZWYgSEFWRV9MT05HX0RPVUJMRQorKyAgVFlQRV9MT05HRE9VQkxFLAorKyNlbmRpZgorKyAgVFlQRV9DSEFSLAorKyNpZmRlZiBIQVZFX1dJTlRfVAorKyAgVFlQRV9XSURFX0NIQVIsCisrI2VuZGlmCisrICBUWVBFX1NUUklORywKKysjaWZkZWYgSEFWRV9XQ0hBUl9UCisrICBUWVBFX1dJREVfU1RSSU5HLAorKyNlbmRpZgorKyAgVFlQRV9QT0lOVEVSLAorKyAgVFlQRV9DT1VOVF9TQ0hBUl9QT0lOVEVSLAorKyAgVFlQRV9DT1VOVF9TSE9SVF9QT0lOVEVSLAorKyAgVFlQRV9DT1VOVF9JTlRfUE9JTlRFUiwKKysgIFRZUEVfQ09VTlRfTE9OR0lOVF9QT0lOVEVSCisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrLCBUWVBFX0NPVU5UX0xPTkdMT05HSU5UX1BPSU5URVIKKysjZW5kaWYKKyt9IGFyZ190eXBlOworKworKy8qIFBvbHltb3JwaGljIGFyZ3VtZW50ICovCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBhcmdfdHlwZSB0eXBlOworKyAgdW5pb24KKysgIHsKKysgICAgc2lnbmVkIGNoYXIJCQlhX3NjaGFyOworKyAgICB1bnNpZ25lZCBjaGFyCQlhX3VjaGFyOworKyAgICBzaG9ydAkJCWFfc2hvcnQ7CisrICAgIHVuc2lnbmVkIHNob3J0CQlhX3VzaG9ydDsKKysgICAgaW50CQkJCWFfaW50OworKyAgICB1bnNpZ25lZCBpbnQJCWFfdWludDsKKysgICAgbG9uZyBpbnQJCQlhX2xvbmdpbnQ7CisrICAgIHVuc2lnbmVkIGxvbmcgaW50CQlhX3Vsb25naW50OworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICBsb25nIGxvbmcgaW50CQlhX2xvbmdsb25naW50OworKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50CWFfdWxvbmdsb25naW50OworKyNlbmRpZgorKyAgICBmbG9hdAkJCWFfZmxvYXQ7CisrICAgIGRvdWJsZQkJCWFfZG91YmxlOworKyNpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCisrICAgIGxvbmcgZG91YmxlCQkJYV9sb25nZG91YmxlOworKyNlbmRpZgorKyAgICBpbnQJCQkJYV9jaGFyOworKyNpZmRlZiBIQVZFX1dJTlRfVAorKyAgICB3aW50X3QJCQlhX3dpZGVfY2hhcjsKKysjZW5kaWYKKysgICAgY29uc3QgY2hhcioJCQlhX3N0cmluZzsKKysjaWZkZWYgSEFWRV9XQ0hBUl9UCisrICAgIGNvbnN0IHdjaGFyX3QqCQlhX3dpZGVfc3RyaW5nOworKyNlbmRpZgorKyAgICB2b2lkKgkJCWFfcG9pbnRlcjsKKysgICAgc2lnbmVkIGNoYXIgKgkJYV9jb3VudF9zY2hhcl9wb2ludGVyOworKyAgICBzaG9ydCAqCQkJYV9jb3VudF9zaG9ydF9wb2ludGVyOworKyAgICBpbnQgKgkJCWFfY291bnRfaW50X3BvaW50ZXI7CisrICAgIGxvbmcgaW50ICoJCQlhX2NvdW50X2xvbmdpbnRfcG9pbnRlcjsKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysgICAgbG9uZyBsb25nIGludCAqCQlhX2NvdW50X2xvbmdsb25naW50X3BvaW50ZXI7CisrI2VuZGlmCisrICB9CisrICBhOworK30KKythcmd1bWVudDsKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIHNpemVfdCBjb3VudDsKKysgIGFyZ3VtZW50ICphcmc7CisrfQorK2FyZ3VtZW50czsKKysKKysKKysvKiBGZXRjaCB0aGUgYXJndW1lbnRzLCBwdXR0aW5nIHRoZW0gaW50byBhLiAqLworKyNpZmRlZiBTVEFUSUMKKytTVEFUSUMKKysjZWxzZQorK2V4dGVybgorKyNlbmRpZgorK2ludCBwcmludGZfZmV0Y2hhcmdzICh2YV9saXN0IGFyZ3MsIGFyZ3VtZW50cyAqYSk7CisrCisrI2VuZGlmIC8qIF9QUklOVEZfQVJHU19IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcHJpbnRmLmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvcHJpbnRmLmMJMjAwNC0wOS0xMiAxNDo0MDozNC42MDc3MDk3ODQgLTA0MDAKK0BAIC0wLDAgKzEsMzcxIEBACisrLyogRm9ybWF0dGVkIG91dHB1dCB0byBzdHJpbmdzLCB1c2luZyBQT1NJWC9YU0kgZm9ybWF0IHN0cmluZ3Mgd2l0aCBwb3NpdGlvbnMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDAzLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2lmZGVmIF9fR05VQ19fCisrIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKysjIGRlZmluZSBIQVZFX0FMTE9DQSAxCisrI2Vsc2UKKysjIGlmZGVmIF9NU0NfVkVSCisrIyAgaW5jbHVkZSA8bWFsbG9jLmg+CisrIyAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisrIyBlbHNlCisrIyAgaWYgZGVmaW5lZCBIQVZFX0FMTE9DQV9IIHx8IGRlZmluZWQgX0xJQkMKKysjICAgaW5jbHVkZSA8YWxsb2NhLmg+CisrIyAgZWxzZQorKyMgICBpZmRlZiBfQUlYCisrICNwcmFnbWEgYWxsb2NhCisrIyAgIGVsc2UKKysjICAgIGlmbmRlZiBhbGxvY2EKKytjaGFyICphbGxvY2EgKCk7CisrIyAgICBlbmRpZgorKyMgICBlbmRpZgorKyMgIGVuZGlmCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdGRpby5oPgorKworKyNpZiAhSEFWRV9QT1NJWF9QUklOVEYKKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworKy8qIFdoZW4gYnVpbGRpbmcgYSBETEwsIHdlIG11c3QgZXhwb3J0IHNvbWUgZnVuY3Rpb25zLiAgTm90ZSB0aGF0IGJlY2F1c2UKKysgICB0aGUgZnVuY3Rpb25zIGFyZSBvbmx5IGRlZmluZWQgZm9yIGJpbmFyeSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB3ZQorKyAgIGRvbid0IG5lZWQgdG8gdXNlIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSBpbiBhbnkgY2FzZS4gICovCisrI2lmIGRlZmluZWQgX01TQ19WRVIgJiYgQlVJTERJTkdfRExMCisrIyBkZWZpbmUgRExMX0VYUE9SVEVEIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorKyNlbHNlCisrIyBkZWZpbmUgRExMX0VYUE9SVEVECisrI2VuZGlmCisrCisrI2RlZmluZSBTVEFUSUMgc3RhdGljCisrCisrLyogRGVmaW5lIGF1eGlsaWFyeSBmdW5jdGlvbnMgZGVjbGFyZWQgaW4gInByaW50Zi1hcmdzLmgiLiAgKi8KKysjaW5jbHVkZSAicHJpbnRmLWFyZ3MuYyIKKysKKysvKiBEZWZpbmUgYXV4aWxpYXJ5IGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiAicHJpbnRmLXBhcnNlLmgiLiAgKi8KKysjaW5jbHVkZSAicHJpbnRmLXBhcnNlLmMiCisrCisrLyogRGVmaW5lIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiAidmFzbnByaW50Zi5oIi4gICovCisrI2RlZmluZSB2YXNucHJpbnRmIGxpYmludGxfdmFzbnByaW50ZgorKyNpbmNsdWRlICJ2YXNucHJpbnRmLmMiCisrI2lmIDAgLyogbm90IG5lZWRlZCAqLworKyNkZWZpbmUgYXNucHJpbnRmIGxpYmludGxfYXNucHJpbnRmCisrI2luY2x1ZGUgImFzbnByaW50Zi5jIgorKyNlbmRpZgorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfdmZwcmludGYgKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisreworKyAgaWYgKHN0cmNociAoZm9ybWF0LCAnJCcpID09IE5VTEwpCisrICAgIHJldHVybiB2ZnByaW50ZiAoc3RyZWFtLCBmb3JtYXQsIGFyZ3MpOworKyAgZWxzZQorKyAgICB7CisrICAgICAgc2l6ZV90IGxlbmd0aDsKKysgICAgICBjaGFyICpyZXN1bHQgPSBsaWJpbnRsX3Zhc25wcmludGYgKE5VTEwsICZsZW5ndGgsIGZvcm1hdCwgYXJncyk7CisrICAgICAgaW50IHJldHZhbCA9IC0xOworKyAgICAgIGlmIChyZXN1bHQgIT0gTlVMTCkKKysJeworKwkgIGlmIChmd3JpdGUgKHJlc3VsdCwgMSwgbGVuZ3RoLCBzdHJlYW0pID09IGxlbmd0aCkKKysJICAgIHJldHZhbCA9IGxlbmd0aDsKKysJICBmcmVlIChyZXN1bHQpOworKwl9CisrICAgICAgcmV0dXJuIHJldHZhbDsKKysgICAgfQorK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX2ZwcmludGYgKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgaW50IHJldHZhbDsKKysKKysgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworKyAgcmV0dmFsID0gbGliaW50bF92ZnByaW50ZiAoc3RyZWFtLCBmb3JtYXQsIGFyZ3MpOworKyAgdmFfZW5kIChhcmdzKTsKKysgIHJldHVybiByZXR2YWw7CisrfQorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfdnByaW50ZiAoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisreworKyAgcmV0dXJuIGxpYmludGxfdmZwcmludGYgKHN0ZG91dCwgZm9ybWF0LCBhcmdzKTsKKyt9CisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF9wcmludGYgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorK3sKKysgIHZhX2xpc3QgYXJnczsKKysgIGludCByZXR2YWw7CisrCisrICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKysgIHJldHZhbCA9IGxpYmludGxfdnByaW50ZiAoZm9ybWF0LCBhcmdzKTsKKysgIHZhX2VuZCAoYXJncyk7CisrICByZXR1cm4gcmV0dmFsOworK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3ZzcHJpbnRmIChjaGFyICpyZXN1bHRidWYsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorK3sKKysgIGlmIChzdHJjaHIgKGZvcm1hdCwgJyQnKSA9PSBOVUxMKQorKyAgICByZXR1cm4gdnNwcmludGYgKHJlc3VsdGJ1ZiwgZm9ybWF0LCBhcmdzKTsKKysgIGVsc2UKKysgICAgeworKyAgICAgIHNpemVfdCBsZW5ndGggPSAoc2l6ZV90KSB+MCAvICg0ICogc2l6ZW9mIChjaGFyKSk7CisrICAgICAgY2hhciAqcmVzdWx0ID0gbGliaW50bF92YXNucHJpbnRmIChyZXN1bHRidWYsICZsZW5ndGgsIGZvcm1hdCwgYXJncyk7CisrICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRidWYpCisrCXsKKysJICBmcmVlIChyZXN1bHQpOworKwkgIHJldHVybiAtMTsKKysJfQorKyAgICAgIGVsc2UKKysJcmV0dXJuIGxlbmd0aDsKKysgICAgfQorK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3NwcmludGYgKGNoYXIgKnJlc3VsdGJ1ZiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgaW50IHJldHZhbDsKKysKKysgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworKyAgcmV0dmFsID0gbGliaW50bF92c3ByaW50ZiAocmVzdWx0YnVmLCBmb3JtYXQsIGFyZ3MpOworKyAgdmFfZW5kIChhcmdzKTsKKysgIHJldHVybiByZXR2YWw7CisrfQorKworKyNpZiBIQVZFX1NOUFJJTlRGCisrCisrIyBpZiBIQVZFX0RFQ0xfX1NOUFJJTlRGCisrICAgLyogV2luZG93cy4gICovCisrIyAgZGVmaW5lIHN5c3RlbV92c25wcmludGYgX3ZzbnByaW50ZgorKyMgZWxzZQorKyAgIC8qIFVuaXguICAqLworKyMgIGRlZmluZSBzeXN0ZW1fdnNucHJpbnRmIHZzbnByaW50ZgorKyMgZW5kaWYKKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3ZzbnByaW50ZiAoY2hhciAqcmVzdWx0YnVmLCBzaXplX3QgbGVuZ3RoLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyt7CisrICBpZiAoc3RyY2hyIChmb3JtYXQsICckJykgPT0gTlVMTCkKKysgICAgcmV0dXJuIHN5c3RlbV92c25wcmludGYgKHJlc3VsdGJ1ZiwgbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworKyAgZWxzZQorKyAgICB7CisrICAgICAgc2l6ZV90IG1heGxlbmd0aCA9IGxlbmd0aDsKKysgICAgICBjaGFyICpyZXN1bHQgPSBsaWJpbnRsX3Zhc25wcmludGYgKHJlc3VsdGJ1ZiwgJmxlbmd0aCwgZm9ybWF0LCBhcmdzKTsKKysgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdGJ1ZikKKysJeworKwkgIGlmIChtYXhsZW5ndGggPiAwKQorKwkgICAgeworKwkgICAgICBpZiAobGVuZ3RoIDwgbWF4bGVuZ3RoKQorKwkJYWJvcnQgKCk7CisrCSAgICAgIG1lbWNweSAocmVzdWx0YnVmLCByZXN1bHQsIG1heGxlbmd0aCAtIDEpOworKwkgICAgICByZXN1bHRidWZbbWF4bGVuZ3RoIC0gMV0gPSAnXDAnOworKwkgICAgfQorKwkgIGZyZWUgKHJlc3VsdCk7CisrCSAgcmV0dXJuIC0xOworKwl9CisrICAgICAgZWxzZQorKwlyZXR1cm4gbGVuZ3RoOworKyAgICB9CisrfQorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfc25wcmludGYgKGNoYXIgKnJlc3VsdGJ1Ziwgc2l6ZV90IGxlbmd0aCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgaW50IHJldHZhbDsKKysKKysgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworKyAgcmV0dmFsID0gbGliaW50bF92c25wcmludGYgKHJlc3VsdGJ1ZiwgbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworKyAgdmFfZW5kIChhcmdzKTsKKysgIHJldHVybiByZXR2YWw7CisrfQorKworKyNlbmRpZgorKworKyNpZiBIQVZFX0FTUFJJTlRGCisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF92YXNwcmludGYgKGNoYXIgKipyZXN1bHRwLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyt7CisrICBzaXplX3QgbGVuZ3RoOworKyAgY2hhciAqcmVzdWx0ID0gbGliaW50bF92YXNucHJpbnRmIChOVUxMLCAmbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworKyAgaWYgKHJlc3VsdCA9PSBOVUxMKQorKyAgICByZXR1cm4gLTE7CisrICAqcmVzdWx0cCA9IHJlc3VsdDsKKysgIHJldHVybiBsZW5ndGg7CisrfQorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfYXNwcmludGYgKGNoYXIgKipyZXN1bHRwLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyt7CisrICB2YV9saXN0IGFyZ3M7CisrICBpbnQgcmV0dmFsOworKworKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisrICByZXR2YWwgPSBsaWJpbnRsX3Zhc3ByaW50ZiAocmVzdWx0cCwgZm9ybWF0LCBhcmdzKTsKKysgIHZhX2VuZCAoYXJncyk7CisrICByZXR1cm4gcmV0dmFsOworK30KKysKKysjZW5kaWYKKysKKysjaWYgSEFWRV9GV1BSSU5URgorKworKyNpbmNsdWRlIDx3Y2hhci5oPgorKworKyNkZWZpbmUgV0lERV9DSEFSX1ZFUlNJT04gMQorKworKy8qIERlZmluZSBhdXhpbGlhcnkgZnVuY3Rpb25zIGRlY2xhcmVkIGluICJ3cHJpbnRmLXBhcnNlLmgiLiAgKi8KKysjaW5jbHVkZSAicHJpbnRmLXBhcnNlLmMiCisrCisrLyogRGVmaW5lIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiAidmFzbnByaW50Zi5oIi4gICovCisrI2RlZmluZSB2YXNud3ByaW50ZiBsaWJpbnRsX3Zhc253cHJpbnRmCisrI2luY2x1ZGUgInZhc25wcmludGYuYyIKKysjaWYgMCAvKiBub3QgbmVlZGVkICovCisrI2RlZmluZSBhc253cHJpbnRmIGxpYmludGxfYXNud3ByaW50ZgorKyNpbmNsdWRlICJhc25wcmludGYuYyIKKysjZW5kaWYKKysKKysjIGlmIEhBVkVfREVDTF9fU05XUFJJTlRGCisrICAgLyogV2luZG93cy4gICovCisrIyAgZGVmaW5lIHN5c3RlbV92c3dwcmludGYgX3ZzbndwcmludGYKKysjIGVsc2UKKysgICAvKiBVbml4LiAgKi8KKysjICBkZWZpbmUgc3lzdGVtX3Zzd3ByaW50ZiB2c3dwcmludGYKKysjIGVuZGlmCisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF92ZndwcmludGYgKEZJTEUgKnN0cmVhbSwgY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisreworKyAgaWYgKHdjc2NociAoZm9ybWF0LCAnJCcpID09IE5VTEwpCisrICAgIHJldHVybiB2ZndwcmludGYgKHN0cmVhbSwgZm9ybWF0LCBhcmdzKTsKKysgIGVsc2UKKysgICAgeworKyAgICAgIHNpemVfdCBsZW5ndGg7CisrICAgICAgd2NoYXJfdCAqcmVzdWx0ID0gbGliaW50bF92YXNud3ByaW50ZiAoTlVMTCwgJmxlbmd0aCwgZm9ybWF0LCBhcmdzKTsKKysgICAgICBpbnQgcmV0dmFsID0gLTE7CisrICAgICAgaWYgKHJlc3VsdCAhPSBOVUxMKQorKwl7CisrCSAgc2l6ZV90IGk7CisrCSAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorKwkgICAgaWYgKGZwdXR3YyAocmVzdWx0W2ldLCBzdHJlYW0pID09IFdFT0YpCisrCSAgICAgIGJyZWFrOworKwkgIGlmIChpID09IGxlbmd0aCkKKysJICAgIHJldHZhbCA9IGxlbmd0aDsKKysJICBmcmVlIChyZXN1bHQpOworKwl9CisrICAgICAgcmV0dXJuIHJldHZhbDsKKysgICAgfQorK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX2Z3cHJpbnRmIChGSUxFICpzdHJlYW0sIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgLi4uKQorK3sKKysgIHZhX2xpc3QgYXJnczsKKysgIGludCByZXR2YWw7CisrCisrICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKysgIHJldHZhbCA9IGxpYmludGxfdmZ3cHJpbnRmIChzdHJlYW0sIGZvcm1hdCwgYXJncyk7CisrICB2YV9lbmQgKGFyZ3MpOworKyAgcmV0dXJuIHJldHZhbDsKKyt9CisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF92d3ByaW50ZiAoY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisreworKyAgcmV0dXJuIGxpYmludGxfdmZ3cHJpbnRmIChzdGRvdXQsIGZvcm1hdCwgYXJncyk7CisrfQorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfd3ByaW50ZiAoY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgaW50IHJldHZhbDsKKysKKysgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworKyAgcmV0dmFsID0gbGliaW50bF92d3ByaW50ZiAoZm9ybWF0LCBhcmdzKTsKKysgIHZhX2VuZCAoYXJncyk7CisrICByZXR1cm4gcmV0dmFsOworK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3Zzd3ByaW50ZiAod2NoYXJfdCAqcmVzdWx0YnVmLCBzaXplX3QgbGVuZ3RoLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyt7CisrICBpZiAod2NzY2hyIChmb3JtYXQsICckJykgPT0gTlVMTCkKKysgICAgcmV0dXJuIHN5c3RlbV92c3dwcmludGYgKHJlc3VsdGJ1ZiwgbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworKyAgZWxzZQorKyAgICB7CisrICAgICAgc2l6ZV90IG1heGxlbmd0aCA9IGxlbmd0aDsKKysgICAgICB3Y2hhcl90ICpyZXN1bHQgPSBsaWJpbnRsX3Zhc253cHJpbnRmIChyZXN1bHRidWYsICZsZW5ndGgsIGZvcm1hdCwgYXJncyk7CisrICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRidWYpCisrCXsKKysJICBpZiAobWF4bGVuZ3RoID4gMCkKKysJICAgIHsKKysJICAgICAgaWYgKGxlbmd0aCA8IG1heGxlbmd0aCkKKysJCWFib3J0ICgpOworKwkgICAgICBtZW1jcHkgKHJlc3VsdGJ1ZiwgcmVzdWx0LCAobWF4bGVuZ3RoIC0gMSkgKiBzaXplb2YgKHdjaGFyX3QpKTsKKysJICAgICAgcmVzdWx0YnVmW21heGxlbmd0aCAtIDFdID0gMDsKKysJICAgIH0KKysJICBmcmVlIChyZXN1bHQpOworKwkgIHJldHVybiAtMTsKKysJfQorKyAgICAgIGVsc2UKKysJcmV0dXJuIGxlbmd0aDsKKysgICAgfQorK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3N3cHJpbnRmICh3Y2hhcl90ICpyZXN1bHRidWYsIHNpemVfdCBsZW5ndGgsIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgLi4uKQorK3sKKysgIHZhX2xpc3QgYXJnczsKKysgIGludCByZXR2YWw7CisrCisrICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKysgIHJldHZhbCA9IGxpYmludGxfdnN3cHJpbnRmIChyZXN1bHRidWYsIGxlbmd0aCwgZm9ybWF0LCBhcmdzKTsKKysgIHZhX2VuZCAoYXJncyk7CisrICByZXR1cm4gcmV0dmFsOworK30KKysKKysjZW5kaWYKKysKKysjZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9wcmludGYtcGFyc2UuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9wcmludGYtcGFyc2UuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjYyMjcwNzUwNCAtMDQwMAorQEAgLTAsMCArMSw1MzcgQEAKKysvKiBGb3JtYXR0ZWQgb3V0cHV0IHRvIHN0cmluZ3MuCisrICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAsIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKy8qIFNwZWNpZmljYXRpb24uICAqLworKyNpZiBXSURFX0NIQVJfVkVSU0lPTgorKyMgaW5jbHVkZSAid3ByaW50Zi1wYXJzZS5oIgorKyNlbHNlCisrIyBpbmNsdWRlICJwcmludGYtcGFyc2UuaCIKKysjZW5kaWYKKysKKysvKiBHZXQgc2l6ZV90LCBOVUxMLiAgKi8KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrLyogR2V0IGludG1heF90LiAgKi8KKysjaWYgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVgKKysjIGluY2x1ZGUgPHN0ZGludC5oPgorKyNlbmRpZgorKyNpZiBIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYCisrIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgorKyNlbmRpZgorKworKy8qIG1hbGxvYygpLCByZWFsbG9jKCksIGZyZWUoKS4gICovCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKworKy8qIENoZWNrZWQgc2l6ZV90IGNvbXB1dGF0aW9ucy4gICovCisrI2luY2x1ZGUgInhzaXplLmgiCisrCisrI2lmIFdJREVfQ0hBUl9WRVJTSU9OCisrIyBkZWZpbmUgUFJJTlRGX1BBUlNFIHdwcmludGZfcGFyc2UKKysjIGRlZmluZSBDSEFSX1Qgd2NoYXJfdAorKyMgZGVmaW5lIERJUkVDVElWRSB3Y2hhcl90X2RpcmVjdGl2ZQorKyMgZGVmaW5lIERJUkVDVElWRVMgd2NoYXJfdF9kaXJlY3RpdmVzCisrI2Vsc2UKKysjIGRlZmluZSBQUklOVEZfUEFSU0UgcHJpbnRmX3BhcnNlCisrIyBkZWZpbmUgQ0hBUl9UIGNoYXIKKysjIGRlZmluZSBESVJFQ1RJVkUgY2hhcl9kaXJlY3RpdmUKKysjIGRlZmluZSBESVJFQ1RJVkVTIGNoYXJfZGlyZWN0aXZlcworKyNlbmRpZgorKworKyNpZmRlZiBTVEFUSUMKKytTVEFUSUMKKysjZW5kaWYKKytpbnQKKytQUklOVEZfUEFSU0UgKGNvbnN0IENIQVJfVCAqZm9ybWF0LCBESVJFQ1RJVkVTICpkLCBhcmd1bWVudHMgKmEpCisreworKyAgY29uc3QgQ0hBUl9UICpjcCA9IGZvcm1hdDsJCS8qIHBvaW50ZXIgaW50byBmb3JtYXQgKi8KKysgIHNpemVfdCBhcmdfcG9zbiA9IDA7CQkvKiBudW1iZXIgb2YgcmVndWxhciBhcmd1bWVudHMgY29uc3VtZWQgKi8KKysgIHNpemVfdCBkX2FsbG9jYXRlZDsJCQkvKiBhbGxvY2F0ZWQgZWxlbWVudHMgb2YgZC0+ZGlyICovCisrICBzaXplX3QgYV9hbGxvY2F0ZWQ7CQkJLyogYWxsb2NhdGVkIGVsZW1lbnRzIG9mIGEtPmFyZyAqLworKyAgc2l6ZV90IG1heF93aWR0aF9sZW5ndGggPSAwOworKyAgc2l6ZV90IG1heF9wcmVjaXNpb25fbGVuZ3RoID0gMDsKKysKKysgIGQtPmNvdW50ID0gMDsKKysgIGRfYWxsb2NhdGVkID0gMTsKKysgIGQtPmRpciA9IG1hbGxvYyAoZF9hbGxvY2F0ZWQgKiBzaXplb2YgKERJUkVDVElWRSkpOworKyAgaWYgKGQtPmRpciA9PSBOVUxMKQorKyAgICAvKiBPdXQgb2YgbWVtb3J5LiAgKi8KKysgICAgcmV0dXJuIC0xOworKworKyAgYS0+Y291bnQgPSAwOworKyAgYV9hbGxvY2F0ZWQgPSAwOworKyAgYS0+YXJnID0gTlVMTDsKKysKKysjZGVmaW5lIFJFR0lTVEVSX0FSRyhfaW5kZXhfLF90eXBlXykgXAorKyAgewkJCQkJCQkJCVwKKysgICAgc2l6ZV90IG4gPSAoX2luZGV4Xyk7CQkJCQkJXAorKyAgICBpZiAobiA+PSBhX2FsbG9jYXRlZCkJCQkJCQlcCisrICAgICAgewkJCQkJCQkJCVwKKysJc2l6ZV90IG1lbW9yeV9zaXplOwkJCQkJCVwKKysJYXJndW1lbnQgKm1lbW9yeTsJCQkJCQlcCisrCQkJCQkJCQkJXAorKwlhX2FsbG9jYXRlZCA9IHh0aW1lcyAoYV9hbGxvY2F0ZWQsIDIpOwkJCQlcCisrCWlmIChhX2FsbG9jYXRlZCA8PSBuKQkJCQkJCVwKKysJICBhX2FsbG9jYXRlZCA9IHhzdW0gKG4sIDEpOwkJCQkJXAorKwltZW1vcnlfc2l6ZSA9IHh0aW1lcyAoYV9hbGxvY2F0ZWQsIHNpemVvZiAoYXJndW1lbnQpKTsJCVwKKysJaWYgKHNpemVfb3ZlcmZsb3dfcCAobWVtb3J5X3NpemUpKQkJCQlcCisrCSAgLyogT3ZlcmZsb3csIHdvdWxkIGxlYWQgdG8gb3V0IG9mIG1lbW9yeS4gICovCQkJXAorKwkgIGdvdG8gZXJyb3I7CQkJCQkJCVwKKysJbWVtb3J5ID0gKGEtPmFyZwkJCQkJCVwKKysJCSAgPyByZWFsbG9jIChhLT5hcmcsIG1lbW9yeV9zaXplKQkJCVwKKysJCSAgOiBtYWxsb2MgKG1lbW9yeV9zaXplKSk7CQkJCVwKKysJaWYgKG1lbW9yeSA9PSBOVUxMKQkJCQkJCVwKKysJICAvKiBPdXQgb2YgbWVtb3J5LiAgKi8JCQkJCQlcCisrCSAgZ290byBlcnJvcjsJCQkJCQkJXAorKwlhLT5hcmcgPSBtZW1vcnk7CQkJCQkJXAorKyAgICAgIH0JCQkJCQkJCQlcCisrICAgIHdoaWxlIChhLT5jb3VudCA8PSBuKQkJCQkJCVwKKysgICAgICBhLT5hcmdbYS0+Y291bnQrK10udHlwZSA9IFRZUEVfTk9ORTsJCQkJXAorKyAgICBpZiAoYS0+YXJnW25dLnR5cGUgPT0gVFlQRV9OT05FKQkJCQkJXAorKyAgICAgIGEtPmFyZ1tuXS50eXBlID0gKF90eXBlXyk7CQkJCQlcCisrICAgIGVsc2UgaWYgKGEtPmFyZ1tuXS50eXBlICE9IChfdHlwZV8pKQkJCQlcCisrICAgICAgLyogQW1iaWd1b3VzIHR5cGUgZm9yIHBvc2l0aW9uYWwgYXJndW1lbnQuICAqLwkJCVwKKysgICAgICBnb3RvIGVycm9yOwkJCQkJCQlcCisrICB9CisrCisrICB3aGlsZSAoKmNwICE9ICdcMCcpCisrICAgIHsKKysgICAgICBDSEFSX1QgYyA9ICpjcCsrOworKyAgICAgIGlmIChjID09ICclJykKKysJeworKwkgIHNpemVfdCBhcmdfaW5kZXggPSBBUkdfTk9ORTsKKysJICBESVJFQ1RJVkUgKmRwID0gJmQtPmRpcltkLT5jb3VudF07LyogcG9pbnRlciB0byBuZXh0IGRpcmVjdGl2ZSAqLworKworKwkgIC8qIEluaXRpYWxpemUgdGhlIG5leHQgZGlyZWN0aXZlLiAgKi8KKysJICBkcC0+ZGlyX3N0YXJ0ID0gY3AgLSAxOworKwkgIGRwLT5mbGFncyA9IDA7CisrCSAgZHAtPndpZHRoX3N0YXJ0ID0gTlVMTDsKKysJICBkcC0+d2lkdGhfZW5kID0gTlVMTDsKKysJICBkcC0+d2lkdGhfYXJnX2luZGV4ID0gQVJHX05PTkU7CisrCSAgZHAtPnByZWNpc2lvbl9zdGFydCA9IE5VTEw7CisrCSAgZHAtPnByZWNpc2lvbl9lbmQgPSBOVUxMOworKwkgIGRwLT5wcmVjaXNpb25fYXJnX2luZGV4ID0gQVJHX05PTkU7CisrCSAgZHAtPmFyZ19pbmRleCA9IEFSR19OT05FOworKworKwkgIC8qIFRlc3QgZm9yIHBvc2l0aW9uYWwgYXJndW1lbnQuICAqLworKwkgIGlmICgqY3AgPj0gJzAnICYmICpjcCA8PSAnOScpCisrCSAgICB7CisrCSAgICAgIGNvbnN0IENIQVJfVCAqbnA7CisrCisrCSAgICAgIGZvciAobnAgPSBjcDsgKm5wID49ICcwJyAmJiAqbnAgPD0gJzknOyBucCsrKQorKwkJOworKwkgICAgICBpZiAoKm5wID09ICckJykKKysJCXsKKysJCSAgc2l6ZV90IG4gPSAwOworKworKwkJICBmb3IgKG5wID0gY3A7ICpucCA+PSAnMCcgJiYgKm5wIDw9ICc5JzsgbnArKykKKysJCSAgICBuID0geHN1bSAoeHRpbWVzIChuLCAxMCksICpucCAtICcwJyk7CisrCQkgIGlmIChuID09IDApCisrCQkgICAgLyogUG9zaXRpb25hbCBhcmd1bWVudCAwLiAgKi8KKysJCSAgICBnb3RvIGVycm9yOworKwkJICBpZiAoc2l6ZV9vdmVyZmxvd19wIChuKSkKKysJCSAgICAvKiBuIHRvbyBsYXJnZSwgd291bGQgbGVhZCB0byBvdXQgb2YgbWVtb3J5IGxhdGVyLiAgKi8KKysJCSAgICBnb3RvIGVycm9yOworKwkJICBhcmdfaW5kZXggPSBuIC0gMTsKKysJCSAgY3AgPSBucCArIDE7CisrCQl9CisrCSAgICB9CisrCisrCSAgLyogUmVhZCB0aGUgZmxhZ3MuICAqLworKwkgIGZvciAoOzspCisrCSAgICB7CisrCSAgICAgIGlmICgqY3AgPT0gJ1wnJykKKysJCXsKKysJCSAgZHAtPmZsYWdzIHw9IEZMQUdfR1JPVVA7CisrCQkgIGNwKys7CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKCpjcCA9PSAnLScpCisrCQl7CisrCQkgIGRwLT5mbGFncyB8PSBGTEFHX0xFRlQ7CisrCQkgIGNwKys7CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKCpjcCA9PSAnKycpCisrCQl7CisrCQkgIGRwLT5mbGFncyB8PSBGTEFHX1NIT1dTSUdOOworKwkJICBjcCsrOworKwkJfQorKwkgICAgICBlbHNlIGlmICgqY3AgPT0gJyAnKQorKwkJeworKwkJICBkcC0+ZmxhZ3MgfD0gRkxBR19TUEFDRTsKKysJCSAgY3ArKzsKKysJCX0KKysJICAgICAgZWxzZSBpZiAoKmNwID09ICcjJykKKysJCXsKKysJCSAgZHAtPmZsYWdzIHw9IEZMQUdfQUxUOworKwkJICBjcCsrOworKwkJfQorKwkgICAgICBlbHNlIGlmICgqY3AgPT0gJzAnKQorKwkJeworKwkJICBkcC0+ZmxhZ3MgfD0gRkxBR19aRVJPOworKwkJICBjcCsrOworKwkJfQorKwkgICAgICBlbHNlCisrCQlicmVhazsKKysJICAgIH0KKysKKysJICAvKiBQYXJzZSB0aGUgZmllbGQgd2lkdGguICAqLworKwkgIGlmICgqY3AgPT0gJyonKQorKwkgICAgeworKwkgICAgICBkcC0+d2lkdGhfc3RhcnQgPSBjcDsKKysJICAgICAgY3ArKzsKKysJICAgICAgZHAtPndpZHRoX2VuZCA9IGNwOworKwkgICAgICBpZiAobWF4X3dpZHRoX2xlbmd0aCA8IDEpCisrCQltYXhfd2lkdGhfbGVuZ3RoID0gMTsKKysKKysJICAgICAgLyogVGVzdCBmb3IgcG9zaXRpb25hbCBhcmd1bWVudC4gICovCisrCSAgICAgIGlmICgqY3AgPj0gJzAnICYmICpjcCA8PSAnOScpCisrCQl7CisrCQkgIGNvbnN0IENIQVJfVCAqbnA7CisrCisrCQkgIGZvciAobnAgPSBjcDsgKm5wID49ICcwJyAmJiAqbnAgPD0gJzknOyBucCsrKQorKwkJICAgIDsKKysJCSAgaWYgKCpucCA9PSAnJCcpCisrCQkgICAgeworKwkJICAgICAgc2l6ZV90IG4gPSAwOworKworKwkJICAgICAgZm9yIChucCA9IGNwOyAqbnAgPj0gJzAnICYmICpucCA8PSAnOSc7IG5wKyspCisrCQkJbiA9IHhzdW0gKHh0aW1lcyAobiwgMTApLCAqbnAgLSAnMCcpOworKwkJICAgICAgaWYgKG4gPT0gMCkKKysJCQkvKiBQb3NpdGlvbmFsIGFyZ3VtZW50IDAuICAqLworKwkJCWdvdG8gZXJyb3I7CisrCQkgICAgICBpZiAoc2l6ZV9vdmVyZmxvd19wIChuKSkKKysJCQkvKiBuIHRvbyBsYXJnZSwgd291bGQgbGVhZCB0byBvdXQgb2YgbWVtb3J5IGxhdGVyLiAgKi8KKysJCQlnb3RvIGVycm9yOworKwkJICAgICAgZHAtPndpZHRoX2FyZ19pbmRleCA9IG4gLSAxOworKwkJICAgICAgY3AgPSBucCArIDE7CisrCQkgICAgfQorKwkJfQorKwkgICAgICBpZiAoZHAtPndpZHRoX2FyZ19pbmRleCA9PSBBUkdfTk9ORSkKKysJCXsKKysJCSAgZHAtPndpZHRoX2FyZ19pbmRleCA9IGFyZ19wb3NuKys7CisrCQkgIGlmIChkcC0+d2lkdGhfYXJnX2luZGV4ID09IEFSR19OT05FKQorKwkJICAgIC8qIGFyZ19wb3NuIHdyYXBwZWQgYXJvdW5kLiAgKi8KKysJCSAgICBnb3RvIGVycm9yOworKwkJfQorKwkgICAgICBSRUdJU1RFUl9BUkcgKGRwLT53aWR0aF9hcmdfaW5kZXgsIFRZUEVfSU5UKTsKKysJICAgIH0KKysJICBlbHNlIGlmICgqY3AgPj0gJzAnICYmICpjcCA8PSAnOScpCisrCSAgICB7CisrCSAgICAgIHNpemVfdCB3aWR0aF9sZW5ndGg7CisrCisrCSAgICAgIGRwLT53aWR0aF9zdGFydCA9IGNwOworKwkgICAgICBmb3IgKDsgKmNwID49ICcwJyAmJiAqY3AgPD0gJzknOyBjcCsrKQorKwkJOworKwkgICAgICBkcC0+d2lkdGhfZW5kID0gY3A7CisrCSAgICAgIHdpZHRoX2xlbmd0aCA9IGRwLT53aWR0aF9lbmQgLSBkcC0+d2lkdGhfc3RhcnQ7CisrCSAgICAgIGlmIChtYXhfd2lkdGhfbGVuZ3RoIDwgd2lkdGhfbGVuZ3RoKQorKwkJbWF4X3dpZHRoX2xlbmd0aCA9IHdpZHRoX2xlbmd0aDsKKysJICAgIH0KKysKKysJICAvKiBQYXJzZSB0aGUgcHJlY2lzaW9uLiAgKi8KKysJICBpZiAoKmNwID09ICcuJykKKysJICAgIHsKKysJICAgICAgY3ArKzsKKysJICAgICAgaWYgKCpjcCA9PSAnKicpCisrCQl7CisrCQkgIGRwLT5wcmVjaXNpb25fc3RhcnQgPSBjcCAtIDE7CisrCQkgIGNwKys7CisrCQkgIGRwLT5wcmVjaXNpb25fZW5kID0gY3A7CisrCQkgIGlmIChtYXhfcHJlY2lzaW9uX2xlbmd0aCA8IDIpCisrCQkgICAgbWF4X3ByZWNpc2lvbl9sZW5ndGggPSAyOworKworKwkJICAvKiBUZXN0IGZvciBwb3NpdGlvbmFsIGFyZ3VtZW50LiAgKi8KKysJCSAgaWYgKCpjcCA+PSAnMCcgJiYgKmNwIDw9ICc5JykKKysJCSAgICB7CisrCQkgICAgICBjb25zdCBDSEFSX1QgKm5wOworKworKwkJICAgICAgZm9yIChucCA9IGNwOyAqbnAgPj0gJzAnICYmICpucCA8PSAnOSc7IG5wKyspCisrCQkJOworKwkJICAgICAgaWYgKCpucCA9PSAnJCcpCisrCQkJeworKwkJCSAgc2l6ZV90IG4gPSAwOworKworKwkJCSAgZm9yIChucCA9IGNwOyAqbnAgPj0gJzAnICYmICpucCA8PSAnOSc7IG5wKyspCisrCQkJICAgIG4gPSB4c3VtICh4dGltZXMgKG4sIDEwKSwgKm5wIC0gJzAnKTsKKysJCQkgIGlmIChuID09IDApCisrCQkJICAgIC8qIFBvc2l0aW9uYWwgYXJndW1lbnQgMC4gICovCisrCQkJICAgIGdvdG8gZXJyb3I7CisrCQkJICBpZiAoc2l6ZV9vdmVyZmxvd19wIChuKSkKKysJCQkgICAgLyogbiB0b28gbGFyZ2UsIHdvdWxkIGxlYWQgdG8gb3V0IG9mIG1lbW9yeQorKwkJCSAgICAgICBsYXRlci4gICovCisrCQkJICAgIGdvdG8gZXJyb3I7CisrCQkJICBkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCA9IG4gLSAxOworKwkJCSAgY3AgPSBucCArIDE7CisrCQkJfQorKwkJICAgIH0KKysJCSAgaWYgKGRwLT5wcmVjaXNpb25fYXJnX2luZGV4ID09IEFSR19OT05FKQorKwkJICAgIHsKKysJCSAgICAgIGRwLT5wcmVjaXNpb25fYXJnX2luZGV4ID0gYXJnX3Bvc24rKzsKKysJCSAgICAgIGlmIChkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCA9PSBBUkdfTk9ORSkKKysJCQkvKiBhcmdfcG9zbiB3cmFwcGVkIGFyb3VuZC4gICovCisrCQkJZ290byBlcnJvcjsKKysJCSAgICB9CisrCQkgIFJFR0lTVEVSX0FSRyAoZHAtPnByZWNpc2lvbl9hcmdfaW5kZXgsIFRZUEVfSU5UKTsKKysJCX0KKysJICAgICAgZWxzZQorKwkJeworKwkJICBzaXplX3QgcHJlY2lzaW9uX2xlbmd0aDsKKysKKysJCSAgZHAtPnByZWNpc2lvbl9zdGFydCA9IGNwIC0gMTsKKysJCSAgZm9yICg7ICpjcCA+PSAnMCcgJiYgKmNwIDw9ICc5JzsgY3ArKykKKysJCSAgICA7CisrCQkgIGRwLT5wcmVjaXNpb25fZW5kID0gY3A7CisrCQkgIHByZWNpc2lvbl9sZW5ndGggPSBkcC0+cHJlY2lzaW9uX2VuZCAtIGRwLT5wcmVjaXNpb25fc3RhcnQ7CisrCQkgIGlmIChtYXhfcHJlY2lzaW9uX2xlbmd0aCA8IHByZWNpc2lvbl9sZW5ndGgpCisrCQkgICAgbWF4X3ByZWNpc2lvbl9sZW5ndGggPSBwcmVjaXNpb25fbGVuZ3RoOworKwkJfQorKwkgICAgfQorKworKwkgIHsKKysJICAgIGFyZ190eXBlIHR5cGU7CisrCisrCSAgICAvKiBQYXJzZSBhcmd1bWVudCB0eXBlL3NpemUgc3BlY2lmaWVycy4gICovCisrCSAgICB7CisrCSAgICAgIGludCBmbGFncyA9IDA7CisrCisrCSAgICAgIGZvciAoOzspCisrCQl7CisrCQkgIGlmICgqY3AgPT0gJ2gnKQorKwkJICAgIHsKKysJCSAgICAgIGZsYWdzIHw9ICgxIDw8IChmbGFncyAmIDEpKTsKKysJCSAgICAgIGNwKys7CisrCQkgICAgfQorKwkJICBlbHNlIGlmICgqY3AgPT0gJ0wnKQorKwkJICAgIHsKKysJCSAgICAgIGZsYWdzIHw9IDQ7CisrCQkgICAgICBjcCsrOworKwkJICAgIH0KKysJCSAgZWxzZSBpZiAoKmNwID09ICdsJykKKysJCSAgICB7CisrCQkgICAgICBmbGFncyArPSA4OworKwkJICAgICAgY3ArKzsKKysJCSAgICB9CisrI2lmZGVmIEhBVkVfSU5UTUFYX1QKKysJCSAgZWxzZSBpZiAoKmNwID09ICdqJykKKysJCSAgICB7CisrCQkgICAgICBpZiAoc2l6ZW9mIChpbnRtYXhfdCkgPiBzaXplb2YgKGxvbmcpKQorKwkJCXsKKysJCQkgIC8qIGludG1heF90ID0gbG9uZyBsb25nICovCisrCQkJICBmbGFncyArPSAxNjsKKysJCQl9CisrCQkgICAgICBlbHNlIGlmIChzaXplb2YgKGludG1heF90KSA+IHNpemVvZiAoaW50KSkKKysJCQl7CisrCQkJICAvKiBpbnRtYXhfdCA9IGxvbmcgKi8KKysJCQkgIGZsYWdzICs9IDg7CisrCQkJfQorKwkJICAgICAgY3ArKzsKKysJCSAgICB9CisrI2VuZGlmCisrCQkgIGVsc2UgaWYgKCpjcCA9PSAneicgfHwgKmNwID09ICdaJykKKysJCSAgICB7CisrCQkgICAgICAvKiAneicgaXMgc3RhbmRhcmRpemVkIGluIElTTyBDIDk5LCBidXQgZ2xpYmMgdXNlcyAnWicKKysJCQkgYmVjYXVzZSB0aGUgd2FybmluZyBmYWNpbGl0eSBpbiBnY2MtMi45NS4yIHVuZGVyc3RhbmRzCisrCQkJIG9ubHkgJ1onIChzZWUgZ2NjLTIuOTUuMi9nY2MvYy1jb21tb24uYzoxNzg0KS4gICovCisrCQkgICAgICBpZiAoc2l6ZW9mIChzaXplX3QpID4gc2l6ZW9mIChsb25nKSkKKysJCQl7CisrCQkJICAvKiBzaXplX3QgPSBsb25nIGxvbmcgKi8KKysJCQkgIGZsYWdzICs9IDE2OworKwkJCX0KKysJCSAgICAgIGVsc2UgaWYgKHNpemVvZiAoc2l6ZV90KSA+IHNpemVvZiAoaW50KSkKKysJCQl7CisrCQkJICAvKiBzaXplX3QgPSBsb25nICovCisrCQkJICBmbGFncyArPSA4OworKwkJCX0KKysJCSAgICAgIGNwKys7CisrCQkgICAgfQorKwkJICBlbHNlIGlmICgqY3AgPT0gJ3QnKQorKwkJICAgIHsKKysJCSAgICAgIGlmIChzaXplb2YgKHB0cmRpZmZfdCkgPiBzaXplb2YgKGxvbmcpKQorKwkJCXsKKysJCQkgIC8qIHB0cmRpZmZfdCA9IGxvbmcgbG9uZyAqLworKwkJCSAgZmxhZ3MgKz0gMTY7CisrCQkJfQorKwkJICAgICAgZWxzZSBpZiAoc2l6ZW9mIChwdHJkaWZmX3QpID4gc2l6ZW9mIChpbnQpKQorKwkJCXsKKysJCQkgIC8qIHB0cmRpZmZfdCA9IGxvbmcgKi8KKysJCQkgIGZsYWdzICs9IDg7CisrCQkJfQorKwkJICAgICAgY3ArKzsKKysJCSAgICB9CisrCQkgIGVsc2UKKysJCSAgICBicmVhazsKKysJCX0KKysKKysJICAgICAgLyogUmVhZCB0aGUgY29udmVyc2lvbiBjaGFyYWN0ZXIuICAqLworKwkgICAgICBjID0gKmNwKys7CisrCSAgICAgIHN3aXRjaCAoYykKKysJCXsKKysJCWNhc2UgJ2QnOiBjYXNlICdpJzoKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysJCSAgaWYgKGZsYWdzID49IDE2IHx8IChmbGFncyAmIDQpKQorKwkJICAgIHR5cGUgPSBUWVBFX0xPTkdMT05HSU5UOworKwkJICBlbHNlCisrI2VuZGlmCisrCQkgIGlmIChmbGFncyA+PSA4KQorKwkJICAgIHR5cGUgPSBUWVBFX0xPTkdJTlQ7CisrCQkgIGVsc2UgaWYgKGZsYWdzICYgMikKKysJCSAgICB0eXBlID0gVFlQRV9TQ0hBUjsKKysJCSAgZWxzZSBpZiAoZmxhZ3MgJiAxKQorKwkJICAgIHR5cGUgPSBUWVBFX1NIT1JUOworKwkJICBlbHNlCisrCQkgICAgdHlwZSA9IFRZUEVfSU5UOworKwkJICBicmVhazsKKysJCWNhc2UgJ28nOiBjYXNlICd1JzogY2FzZSAneCc6IGNhc2UgJ1gnOgorKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKwkJICBpZiAoZmxhZ3MgPj0gMTYgfHwgKGZsYWdzICYgNCkpCisrCQkgICAgdHlwZSA9IFRZUEVfVUxPTkdMT05HSU5UOworKwkJICBlbHNlCisrI2VuZGlmCisrCQkgIGlmIChmbGFncyA+PSA4KQorKwkJICAgIHR5cGUgPSBUWVBFX1VMT05HSU5UOworKwkJICBlbHNlIGlmIChmbGFncyAmIDIpCisrCQkgICAgdHlwZSA9IFRZUEVfVUNIQVI7CisrCQkgIGVsc2UgaWYgKGZsYWdzICYgMSkKKysJCSAgICB0eXBlID0gVFlQRV9VU0hPUlQ7CisrCQkgIGVsc2UKKysJCSAgICB0eXBlID0gVFlQRV9VSU5UOworKwkJICBicmVhazsKKysJCWNhc2UgJ2YnOiBjYXNlICdGJzogY2FzZSAnZSc6IGNhc2UgJ0UnOiBjYXNlICdnJzogY2FzZSAnRyc6CisrCQljYXNlICdhJzogY2FzZSAnQSc6CisrI2lmZGVmIEhBVkVfTE9OR19ET1VCTEUKKysJCSAgaWYgKGZsYWdzID49IDE2IHx8IChmbGFncyAmIDQpKQorKwkJICAgIHR5cGUgPSBUWVBFX0xPTkdET1VCTEU7CisrCQkgIGVsc2UKKysjZW5kaWYKKysJCSAgdHlwZSA9IFRZUEVfRE9VQkxFOworKwkJICBicmVhazsKKysJCWNhc2UgJ2MnOgorKwkJICBpZiAoZmxhZ3MgPj0gOCkKKysjaWZkZWYgSEFWRV9XSU5UX1QKKysJCSAgICB0eXBlID0gVFlQRV9XSURFX0NIQVI7CisrI2Vsc2UKKysJCSAgICBnb3RvIGVycm9yOworKyNlbmRpZgorKwkJICBlbHNlCisrCQkgICAgdHlwZSA9IFRZUEVfQ0hBUjsKKysJCSAgYnJlYWs7CisrI2lmZGVmIEhBVkVfV0lOVF9UCisrCQljYXNlICdDJzoKKysJCSAgdHlwZSA9IFRZUEVfV0lERV9DSEFSOworKwkJICBjID0gJ2MnOworKwkJICBicmVhazsKKysjZW5kaWYKKysJCWNhc2UgJ3MnOgorKwkJICBpZiAoZmxhZ3MgPj0gOCkKKysjaWZkZWYgSEFWRV9XQ0hBUl9UCisrCQkgICAgdHlwZSA9IFRZUEVfV0lERV9TVFJJTkc7CisrI2Vsc2UKKysJCSAgICBnb3RvIGVycm9yOworKyNlbmRpZgorKwkJICBlbHNlCisrCQkgICAgdHlwZSA9IFRZUEVfU1RSSU5HOworKwkJICBicmVhazsKKysjaWZkZWYgSEFWRV9XQ0hBUl9UCisrCQljYXNlICdTJzoKKysJCSAgdHlwZSA9IFRZUEVfV0lERV9TVFJJTkc7CisrCQkgIGMgPSAncyc7CisrCQkgIGJyZWFrOworKyNlbmRpZgorKwkJY2FzZSAncCc6CisrCQkgIHR5cGUgPSBUWVBFX1BPSU5URVI7CisrCQkgIGJyZWFrOworKwkJY2FzZSAnbic6CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrCQkgIGlmIChmbGFncyA+PSAxNiB8fCAoZmxhZ3MgJiA0KSkKKysJCSAgICB0eXBlID0gVFlQRV9DT1VOVF9MT05HTE9OR0lOVF9QT0lOVEVSOworKwkJICBlbHNlCisrI2VuZGlmCisrCQkgIGlmIChmbGFncyA+PSA4KQorKwkJICAgIHR5cGUgPSBUWVBFX0NPVU5UX0xPTkdJTlRfUE9JTlRFUjsKKysJCSAgZWxzZSBpZiAoZmxhZ3MgJiAyKQorKwkJICAgIHR5cGUgPSBUWVBFX0NPVU5UX1NDSEFSX1BPSU5URVI7CisrCQkgIGVsc2UgaWYgKGZsYWdzICYgMSkKKysJCSAgICB0eXBlID0gVFlQRV9DT1VOVF9TSE9SVF9QT0lOVEVSOworKwkJICBlbHNlCisrCQkgICAgdHlwZSA9IFRZUEVfQ09VTlRfSU5UX1BPSU5URVI7CisrCQkgIGJyZWFrOworKwkJY2FzZSAnJSc6CisrCQkgIHR5cGUgPSBUWVBFX05PTkU7CisrCQkgIGJyZWFrOworKwkJZGVmYXVsdDoKKysJCSAgLyogVW5rbm93biBjb252ZXJzaW9uIGNoYXJhY3Rlci4gICovCisrCQkgIGdvdG8gZXJyb3I7CisrCQl9CisrCSAgICB9CisrCisrCSAgICBpZiAodHlwZSAhPSBUWVBFX05PTkUpCisrCSAgICAgIHsKKysJCWRwLT5hcmdfaW5kZXggPSBhcmdfaW5kZXg7CisrCQlpZiAoZHAtPmFyZ19pbmRleCA9PSBBUkdfTk9ORSkKKysJCSAgeworKwkJICAgIGRwLT5hcmdfaW5kZXggPSBhcmdfcG9zbisrOworKwkJICAgIGlmIChkcC0+YXJnX2luZGV4ID09IEFSR19OT05FKQorKwkJICAgICAgLyogYXJnX3Bvc24gd3JhcHBlZCBhcm91bmQuICAqLworKwkJICAgICAgZ290byBlcnJvcjsKKysJCSAgfQorKwkJUkVHSVNURVJfQVJHIChkcC0+YXJnX2luZGV4LCB0eXBlKTsKKysJICAgICAgfQorKwkgICAgZHAtPmNvbnZlcnNpb24gPSBjOworKwkgICAgZHAtPmRpcl9lbmQgPSBjcDsKKysJICB9CisrCisrCSAgZC0+Y291bnQrKzsKKysJICBpZiAoZC0+Y291bnQgPj0gZF9hbGxvY2F0ZWQpCisrCSAgICB7CisrCSAgICAgIHNpemVfdCBtZW1vcnlfc2l6ZTsKKysJICAgICAgRElSRUNUSVZFICptZW1vcnk7CisrCisrCSAgICAgIGRfYWxsb2NhdGVkID0geHRpbWVzIChkX2FsbG9jYXRlZCwgMik7CisrCSAgICAgIG1lbW9yeV9zaXplID0geHRpbWVzIChkX2FsbG9jYXRlZCwgc2l6ZW9mIChESVJFQ1RJVkUpKTsKKysJICAgICAgaWYgKHNpemVfb3ZlcmZsb3dfcCAobWVtb3J5X3NpemUpKQorKwkJLyogT3ZlcmZsb3csIHdvdWxkIGxlYWQgdG8gb3V0IG9mIG1lbW9yeS4gICovCisrCQlnb3RvIGVycm9yOworKwkgICAgICBtZW1vcnkgPSByZWFsbG9jIChkLT5kaXIsIG1lbW9yeV9zaXplKTsKKysJICAgICAgaWYgKG1lbW9yeSA9PSBOVUxMKQorKwkJLyogT3V0IG9mIG1lbW9yeS4gICovCisrCQlnb3RvIGVycm9yOworKwkgICAgICBkLT5kaXIgPSBtZW1vcnk7CisrCSAgICB9CisrCX0KKysgICAgfQorKyAgZC0+ZGlyW2QtPmNvdW50XS5kaXJfc3RhcnQgPSBjcDsKKysKKysgIGQtPm1heF93aWR0aF9sZW5ndGggPSBtYXhfd2lkdGhfbGVuZ3RoOworKyAgZC0+bWF4X3ByZWNpc2lvbl9sZW5ndGggPSBtYXhfcHJlY2lzaW9uX2xlbmd0aDsKKysgIHJldHVybiAwOworKworK2Vycm9yOgorKyAgaWYgKGEtPmFyZykKKysgICAgZnJlZSAoYS0+YXJnKTsKKysgIGlmIChkLT5kaXIpCisrICAgIGZyZWUgKGQtPmRpcik7CisrICByZXR1cm4gLTE7CisrfQorKworKyN1bmRlZiBESVJFQ1RJVkVTCisrI3VuZGVmIERJUkVDVElWRQorKyN1bmRlZiBDSEFSX1QKKysjdW5kZWYgUFJJTlRGX1BBUlNFCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcHJpbnRmLXBhcnNlLmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvcHJpbnRmLXBhcnNlLmgJMjAwNC0wOS0xMiAxNDo0MDozNC42Mjg3MDY1OTIgLTA0MDAKK0BAIC0wLDAgKzEsNzUgQEAKKysvKiBQYXJzZSBwcmludGYgZm9ybWF0IHN0cmluZy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfUFJJTlRGX1BBUlNFX0gKKysjZGVmaW5lIF9QUklOVEZfUEFSU0VfSAorKworKyNpbmNsdWRlICJwcmludGYtYXJncy5oIgorKworKworKy8qIEZsYWdzICovCisrI2RlZmluZSBGTEFHX0dST1VQCSAxCS8qICcgZmxhZyAqLworKyNkZWZpbmUgRkxBR19MRUZUCSAyCS8qIC0gZmxhZyAqLworKyNkZWZpbmUgRkxBR19TSE9XU0lHTgkgNAkvKiArIGZsYWcgKi8KKysjZGVmaW5lIEZMQUdfU1BBQ0UJIDgJLyogc3BhY2UgZmxhZyAqLworKyNkZWZpbmUgRkxBR19BTFQJMTYJLyogIyBmbGFnICovCisrI2RlZmluZSBGTEFHX1pFUk8JMzIKKysKKysvKiBhcmdfaW5kZXggdmFsdWUgaW5kaWNhdGluZyB0aGF0IG5vIGFyZ3VtZW50IGlzIGNvbnN1bWVkLiAgKi8KKysjZGVmaW5lIEFSR19OT05FCSh+KHNpemVfdCkwKQorKworKy8qIEEgcGFyc2VkIGRpcmVjdGl2ZS4gICovCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBjb25zdCBjaGFyKiBkaXJfc3RhcnQ7CisrICBjb25zdCBjaGFyKiBkaXJfZW5kOworKyAgaW50IGZsYWdzOworKyAgY29uc3QgY2hhciogd2lkdGhfc3RhcnQ7CisrICBjb25zdCBjaGFyKiB3aWR0aF9lbmQ7CisrICBzaXplX3Qgd2lkdGhfYXJnX2luZGV4OworKyAgY29uc3QgY2hhciogcHJlY2lzaW9uX3N0YXJ0OworKyAgY29uc3QgY2hhciogcHJlY2lzaW9uX2VuZDsKKysgIHNpemVfdCBwcmVjaXNpb25fYXJnX2luZGV4OworKyAgY2hhciBjb252ZXJzaW9uOyAvKiBkIGkgbyB1IHggWCBmIGUgRSBnIEcgYyBzIHAgbiBVICUgYnV0IG5vdCBDIFMgKi8KKysgIHNpemVfdCBhcmdfaW5kZXg7CisrfQorK2NoYXJfZGlyZWN0aXZlOworKworKy8qIEEgcGFyc2VkIGZvcm1hdCBzdHJpbmcuICAqLworK3R5cGVkZWYgc3RydWN0CisreworKyAgc2l6ZV90IGNvdW50OworKyAgY2hhcl9kaXJlY3RpdmUgKmRpcjsKKysgIHNpemVfdCBtYXhfd2lkdGhfbGVuZ3RoOworKyAgc2l6ZV90IG1heF9wcmVjaXNpb25fbGVuZ3RoOworK30KKytjaGFyX2RpcmVjdGl2ZXM7CisrCisrCisrLyogUGFyc2VzIHRoZSBmb3JtYXQgc3RyaW5nLiAgRmlsbHMgaW4gdGhlIG51bWJlciBOIG9mIGRpcmVjdGl2ZXMsIGFuZCBmaWxscworKyAgIGluIGRpcmVjdGl2ZXNbMF0sIC4uLiwgZGlyZWN0aXZlc1tOLTFdLCBhbmQgc2V0cyBkaXJlY3RpdmVzW05dLmRpcl9zdGFydAorKyAgIHRvIHRoZSBlbmQgb2YgdGhlIGZvcm1hdCBzdHJpbmcuICBBbHNvIGZpbGxzIGluIHRoZSBhcmdfdHlwZSBmaWVsZHMgb2YgdGhlCisrICAgYXJndW1lbnRzIGFuZCB0aGUgbmVlZGVkIGNvdW50IG9mIGFyZ3VtZW50cy4gICovCisrI2lmZGVmIFNUQVRJQworK1NUQVRJQworKyNlbHNlCisrZXh0ZXJuCisrI2VuZGlmCisraW50IHByaW50Zl9wYXJzZSAoY29uc3QgY2hhciAqZm9ybWF0LCBjaGFyX2RpcmVjdGl2ZXMgKmQsIGFyZ3VtZW50cyAqYSk7CisrCisrI2VuZGlmIC8qIF9QUklOVEZfUEFSU0VfSCAqLworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3JlZi1hZGQuc2luCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3JlZi1hZGQuc2luCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjMzNzA1ODMyIC0wNDAwCitAQCAtMCwwICsxLDMxIEBACisrIyBBZGQgdGhpcyBwYWNrYWdlIHRvIGEgbGlzdCBvZiByZWZlcmVuY2VzIHN0b3JlZCBpbiBhIHRleHQgZmlsZS4KKysjCisrIyAgIENvcHlyaWdodCAoQykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrIyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysjICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyMgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrIyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrIyAgIFVTQS4KKysjCisrIyBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPi4KKysjCisrL14jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTogLyB7CisrICBzLyMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOi8vCisrICB0YQorKyAgOmEKKysgIHMvIEBQQUNLQUdFQCAvIEBQQUNLQUdFQCAvCisrICB0YgorKyAgcy8gJC8gQFBBQ0tBR0VAIC8KKysgIDpiCisrICBzL14vIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6LworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9yZWYtZGVsLnNpbgkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9yZWYtZGVsLnNpbgkyMDA0LTA5LTEyIDE0OjQwOjM0LjYzODcwNTA3MiAtMDQwMAorQEAgLTAsMCArMSwyNiBAQAorKyMgUmVtb3ZlIHRoaXMgcGFja2FnZSBmcm9tIGEgbGlzdCBvZiByZWZlcmVuY2VzIHN0b3JlZCBpbiBhIHRleHQgZmlsZS4KKysjCisrIyAgIENvcHlyaWdodCAoQykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrIyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysjICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyMgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrIyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrIyAgIFVTQS4KKysjCisrIyBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPi4KKysjCisrL14jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTogLyB7CisrICBzLyMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOi8vCisrICBzLyBAUEFDS0FHRUAgLyAvCisrICBzL14vIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6LworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9yZWxvY2F0YWJsZS5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3JlbG9jYXRhYmxlLmMJMjAwNC0wOS0xMiAxNDo0MDozNC42NDQ3MDQxNjAgLTA0MDAKK0BAIC0wLDAgKzEsNDQ5IEBACisrLyogUHJvdmlkZSByZWxvY2F0YWJsZSBwYWNrYWdlcy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMDMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKworKy8qIFRlbGwgZ2xpYmMncyA8c3RkaW8uaD4gdG8gcHJvdmlkZSBhIHByb3RvdHlwZSBmb3IgZ2V0bGluZSgpLgorKyAgIFRoaXMgbXVzdCBjb21lIGJlZm9yZSA8Y29uZmlnLmg+IGJlY2F1c2UgPGNvbmZpZy5oPiBtYXkgaW5jbHVkZQorKyAgIDxmZWF0dXJlcy5oPiwgYW5kIG9uY2UgPGZlYXR1cmVzLmg+IGhhcyBiZWVuIGluY2x1ZGVkLCBpdCdzIHRvbyBsYXRlLiAgKi8KKysjaWZuZGVmIF9HTlVfU09VUkNFCisrIyBkZWZpbmUgX0dOVV9TT1VSQ0UJMQorKyNlbmRpZgorKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKysKKysvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKysjaW5jbHVkZSAicmVsb2NhdGFibGUuaCIKKysKKysjaWYgRU5BQkxFX1JFTE9DQVRBQkxFCisrCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrCisrI2lmZGVmIE5PX1hNQUxMT0MKKysjIGRlZmluZSB4bWFsbG9jIG1hbGxvYworKyNlbHNlCisrIyBpbmNsdWRlICJ4YWxsb2MuaCIKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18KKysjIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisrIyBpbmNsdWRlIDx3aW5kb3dzLmg+CisrI2VuZGlmCisrCisrI2lmIERFUEVORFNfT05fTElCQ0hBUlNFVAorKyMgaW5jbHVkZSA8bGliY2hhcnNldC5oPgorKyNlbmRpZgorKyNpZiBERVBFTkRTX09OX0xJQklDT05WICYmIEhBVkVfSUNPTlYKKysjIGluY2x1ZGUgPGljb252Lmg+CisrI2VuZGlmCisrI2lmIERFUEVORFNfT05fTElCSU5UTCAmJiBFTkFCTEVfTkxTCisrIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisrI2VuZGlmCisrCisrLyogRmFrZWQgY2hlYXAgJ2Jvb2wnLiAgKi8KKysjdW5kZWYgYm9vbAorKyN1bmRlZiBmYWxzZQorKyN1bmRlZiB0cnVlCisrI2RlZmluZSBib29sIGludAorKyNkZWZpbmUgZmFsc2UgMAorKyNkZWZpbmUgdHJ1ZSAxCisrCisrLyogUGF0aG5hbWUgc3VwcG9ydC4KKysgICBJU1NMQVNIKEMpICAgICAgICAgICB0ZXN0cyB3aGV0aGVyIEMgaXMgYSBkaXJlY3Rvcnkgc2VwYXJhdG9yIGNoYXJhY3Rlci4KKysgICBJU19QQVRIX1dJVEhfRElSKFApICB0ZXN0cyB3aGV0aGVyIFAgY29udGFpbnMgYSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbi4KKysgKi8KKysjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0VNWF9fIHx8IGRlZmluZWQgX19ESkdQUF9fCisrICAvKiBXaW4zMiwgT1MvMiwgRE9TICovCisrIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09ICcvJyB8fCAoQykgPT0gJ1xcJykKKysjIGRlZmluZSBIQVNfREVWSUNFKFApIFwKKysgICAgKCgoKFApWzBdID49ICdBJyAmJiAoUClbMF0gPD0gJ1onKSB8fCAoKFApWzBdID49ICdhJyAmJiAoUClbMF0gPD0gJ3onKSkgXAorKyAgICAgJiYgKFApWzFdID09ICc6JykKKysjIGRlZmluZSBJU19QQVRIX1dJVEhfRElSKFApIFwKKysgICAgKHN0cmNociAoUCwgJy8nKSAhPSBOVUxMIHx8IHN0cmNociAoUCwgJ1xcJykgIT0gTlVMTCB8fCBIQVNfREVWSUNFIChQKSkKKysjIGRlZmluZSBGSUxFU1lTVEVNX1BSRUZJWF9MRU4oUCkgKEhBU19ERVZJQ0UgKFApID8gMiA6IDApCisrI2Vsc2UKKysgIC8qIFVuaXggKi8KKysjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nKQorKyMgZGVmaW5lIElTX1BBVEhfV0lUSF9ESVIoUCkgKHN0cmNociAoUCwgJy8nKSAhPSBOVUxMKQorKyMgZGVmaW5lIEZJTEVTWVNURU1fUFJFRklYX0xFTihQKSAwCisrI2VuZGlmCisrCisrLyogT3JpZ2luYWwgaW5zdGFsbGF0aW9uIHByZWZpeC4gICovCisrc3RhdGljIGNoYXIgKm9yaWdfcHJlZml4OworK3N0YXRpYyBzaXplX3Qgb3JpZ19wcmVmaXhfbGVuOworKy8qIEN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeC4gICovCisrc3RhdGljIGNoYXIgKmN1cnJfcHJlZml4OworK3N0YXRpYyBzaXplX3QgY3Vycl9wcmVmaXhfbGVuOworKy8qIFRoZXNlIHByZWZpeGVzIGRvIG5vdCBlbmQgaW4gYSBzbGFzaC4gIEFueXRoaW5nIHRoYXQgd2lsbCBiZSBjb25jYXRlbmF0ZWQKKysgICB0byB0aGVtIG11c3Qgc3RhcnQgd2l0aCBhIHNsYXNoLiAgKi8KKysKKysvKiBTZXRzIHRoZSBvcmlnaW5hbCBhbmQgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeCBvZiB0aGlzIG1vZHVsZS4KKysgICBSZWxvY2F0aW9uIHNpbXBseSByZXBsYWNlcyBhIHBhdGhuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsIHByZWZpeAorKyAgIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHBhdGhuYW1lIHdpdGggdGhlIGN1cnJlbnQgcHJlZml4IGluc3RlYWQuICBCb3RoCisrICAgcHJlZml4ZXMgc2hvdWxkIGJlIGRpcmVjdG9yeSBuYW1lcyB3aXRob3V0IHRyYWlsaW5nIHNsYXNoIChpLmUuIHVzZSAiIgorKyAgIGluc3RlYWQgb2YgIi8iKS4gICovCisrc3RhdGljIHZvaWQKKytzZXRfdGhpc19yZWxvY2F0aW9uX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19wcmVmaXhfYXJnLAorKwkJCSAgICBjb25zdCBjaGFyICpjdXJyX3ByZWZpeF9hcmcpCisreworKyAgaWYgKG9yaWdfcHJlZml4X2FyZyAhPSBOVUxMICYmIGN1cnJfcHJlZml4X2FyZyAhPSBOVUxMCisrICAgICAgLyogT3B0aW1pemF0aW9uOiBpZiBvcmlnX3ByZWZpeCBhbmQgY3Vycl9wcmVmaXggYXJlIGVxdWFsLCB0aGUKKysJIHJlbG9jYXRpb24gaXMgYSBub3AuICAqLworKyAgICAgICYmIHN0cmNtcCAob3JpZ19wcmVmaXhfYXJnLCBjdXJyX3ByZWZpeF9hcmcpICE9IDApCisrICAgIHsKKysgICAgICAvKiBEdXBsaWNhdGUgdGhlIGFyZ3VtZW50IHN0cmluZ3MuICAqLworKyAgICAgIGNoYXIgKm1lbW9yeTsKKysKKysgICAgICBvcmlnX3ByZWZpeF9sZW4gPSBzdHJsZW4gKG9yaWdfcHJlZml4X2FyZyk7CisrICAgICAgY3Vycl9wcmVmaXhfbGVuID0gc3RybGVuIChjdXJyX3ByZWZpeF9hcmcpOworKyAgICAgIG1lbW9yeSA9IChjaGFyICopIHhtYWxsb2MgKG9yaWdfcHJlZml4X2xlbiArIDEgKyBjdXJyX3ByZWZpeF9sZW4gKyAxKTsKKysjaWZkZWYgTk9fWE1BTExPQworKyAgICAgIGlmIChtZW1vcnkgIT0gTlVMTCkKKysjZW5kaWYKKysJeworKwkgIG1lbWNweSAobWVtb3J5LCBvcmlnX3ByZWZpeF9hcmcsIG9yaWdfcHJlZml4X2xlbiArIDEpOworKwkgIG9yaWdfcHJlZml4ID0gbWVtb3J5OworKwkgIG1lbW9yeSArPSBvcmlnX3ByZWZpeF9sZW4gKyAxOworKwkgIG1lbWNweSAobWVtb3J5LCBjdXJyX3ByZWZpeF9hcmcsIGN1cnJfcHJlZml4X2xlbiArIDEpOworKwkgIGN1cnJfcHJlZml4ID0gbWVtb3J5OworKwkgIHJldHVybjsKKysJfQorKyAgICB9CisrICBvcmlnX3ByZWZpeCA9IE5VTEw7CisrICBjdXJyX3ByZWZpeCA9IE5VTEw7CisrICAvKiBEb24ndCB3b3JyeSBhYm91dCB3YXN0ZWQgbWVtb3J5IGhlcmUgLSB0aGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgb25seQorKyAgICAgY2FsbGVkIG9uY2UuICAqLworK30KKysKKysvKiBTZXRzIHRoZSBvcmlnaW5hbCBhbmQgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeCBvZiB0aGUgcGFja2FnZS4KKysgICBSZWxvY2F0aW9uIHNpbXBseSByZXBsYWNlcyBhIHBhdGhuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsIHByZWZpeAorKyAgIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHBhdGhuYW1lIHdpdGggdGhlIGN1cnJlbnQgcHJlZml4IGluc3RlYWQuICBCb3RoCisrICAgcHJlZml4ZXMgc2hvdWxkIGJlIGRpcmVjdG9yeSBuYW1lcyB3aXRob3V0IHRyYWlsaW5nIHNsYXNoIChpLmUuIHVzZSAiIgorKyAgIGluc3RlYWQgb2YgIi8iKS4gICovCisrdm9pZAorK3NldF9yZWxvY2F0aW9uX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19wcmVmaXhfYXJnLCBjb25zdCBjaGFyICpjdXJyX3ByZWZpeF9hcmcpCisreworKyAgc2V0X3RoaXNfcmVsb2NhdGlvbl9wcmVmaXggKG9yaWdfcHJlZml4X2FyZywgY3Vycl9wcmVmaXhfYXJnKTsKKysKKysgIC8qIE5vdyBub3RpZnkgYWxsIGRlcGVuZGVudCBsaWJyYXJpZXMuICAqLworKyNpZiBERVBFTkRTX09OX0xJQkNIQVJTRVQKKysgIGxpYmNoYXJzZXRfc2V0X3JlbG9jYXRpb25fcHJlZml4IChvcmlnX3ByZWZpeF9hcmcsIGN1cnJfcHJlZml4X2FyZyk7CisrI2VuZGlmCisrI2lmIERFUEVORFNfT05fTElCSUNPTlYgJiYgSEFWRV9JQ09OViAmJiBfTElCSUNPTlZfVkVSU0lPTiA+PSAweDAxMDkKKysgIGxpYmljb252X3NldF9yZWxvY2F0aW9uX3ByZWZpeCAob3JpZ19wcmVmaXhfYXJnLCBjdXJyX3ByZWZpeF9hcmcpOworKyNlbmRpZgorKyNpZiBERVBFTkRTX09OX0xJQklOVEwgJiYgRU5BQkxFX05MUyAmJiBkZWZpbmVkIGxpYmludGxfc2V0X3JlbG9jYXRpb25fcHJlZml4CisrICBsaWJpbnRsX3NldF9yZWxvY2F0aW9uX3ByZWZpeCAob3JpZ19wcmVmaXhfYXJnLCBjdXJyX3ByZWZpeF9hcmcpOworKyNlbmRpZgorK30KKysKKysjaWYgIWRlZmluZWQgSU5fTElCUkFSWSB8fCAoZGVmaW5lZCBQSUMgJiYgZGVmaW5lZCBJTlNUQUxMRElSKQorKworKy8qIENvbnZlbmllbmNlIGZ1bmN0aW9uOgorKyAgIENvbXB1dGVzIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBwcmVmaXgsIGJhc2VkIG9uIHRoZSBvcmlnaW5hbAorKyAgIGluc3RhbGxhdGlvbiBwcmVmaXgsIHRoZSBvcmlnaW5hbCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IG9mIGEgcGFydGljdWxhcgorKyAgIGZpbGUsIGFuZCB0aGUgY3VycmVudCBwYXRobmFtZSBvZiB0aGlzIGZpbGUuICBSZXR1cm5zIE5VTEwgdXBvbiBmYWlsdXJlLiAgKi8KKysjaWZkZWYgSU5fTElCUkFSWQorKyNkZWZpbmUgY29tcHV0ZV9jdXJyX3ByZWZpeCBsb2NhbF9jb21wdXRlX2N1cnJfcHJlZml4Cisrc3RhdGljCisrI2VuZGlmCisrY29uc3QgY2hhciAqCisrY29tcHV0ZV9jdXJyX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19pbnN0YWxscHJlZml4LAorKwkJICAgICBjb25zdCBjaGFyICpvcmlnX2luc3RhbGxkaXIsCisrCQkgICAgIGNvbnN0IGNoYXIgKmN1cnJfcGF0aG5hbWUpCisreworKyAgY29uc3QgY2hhciAqY3Vycl9pbnN0YWxsZGlyOworKyAgY29uc3QgY2hhciAqcmVsX2luc3RhbGxkaXI7CisrCisrICBpZiAoY3Vycl9wYXRobmFtZSA9PSBOVUxMKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIC8qIERldGVybWluZSB0aGUgcmVsYXRpdmUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSwgcmVsYXRpdmUgdG8gdGhlIHByZWZpeC4KKysgICAgIFRoaXMgaXMgc2ltcGx5IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gb3JpZ19pbnN0YWxscHJlZml4IGFuZAorKyAgICAgb3JpZ19pbnN0YWxsZGlyLiAgKi8KKysgIGlmIChzdHJuY21wIChvcmlnX2luc3RhbGxwcmVmaXgsIG9yaWdfaW5zdGFsbGRpciwgc3RybGVuIChvcmlnX2luc3RhbGxwcmVmaXgpKQorKyAgICAgICE9IDApCisrICAgIC8qIFNob3VsZG4ndCBoYXBwZW4gLSBub3RoaW5nIHNob3VsZCBiZSBpbnN0YWxsZWQgb3V0c2lkZSAkKHByZWZpeCkuICAqLworKyAgICByZXR1cm4gTlVMTDsKKysgIHJlbF9pbnN0YWxsZGlyID0gb3JpZ19pbnN0YWxsZGlyICsgc3RybGVuIChvcmlnX2luc3RhbGxwcmVmaXgpOworKworKyAgLyogRGV0ZXJtaW5lIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuICAqLworKyAgeworKyAgICBjb25zdCBjaGFyICpwX2Jhc2UgPSBjdXJyX3BhdGhuYW1lICsgRklMRVNZU1RFTV9QUkVGSVhfTEVOIChjdXJyX3BhdGhuYW1lKTsKKysgICAgY29uc3QgY2hhciAqcCA9IGN1cnJfcGF0aG5hbWUgKyBzdHJsZW4gKGN1cnJfcGF0aG5hbWUpOworKyAgICBjaGFyICpxOworKworKyAgICB3aGlsZSAocCA+IHBfYmFzZSkKKysgICAgICB7CisrCXAtLTsKKysJaWYgKElTU0xBU0ggKCpwKSkKKysJICBicmVhazsKKysgICAgICB9CisrCisrICAgIHEgPSAoY2hhciAqKSB4bWFsbG9jIChwIC0gY3Vycl9wYXRobmFtZSArIDEpOworKyNpZmRlZiBOT19YTUFMTE9DCisrICAgIGlmIChxID09IE5VTEwpCisrICAgICAgcmV0dXJuIE5VTEw7CisrI2VuZGlmCisrICAgIG1lbWNweSAocSwgY3Vycl9wYXRobmFtZSwgcCAtIGN1cnJfcGF0aG5hbWUpOworKyAgICBxW3AgLSBjdXJyX3BhdGhuYW1lXSA9ICdcMCc7CisrICAgIGN1cnJfaW5zdGFsbGRpciA9IHE7CisrICB9CisrCisrICAvKiBDb21wdXRlIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBwcmVmaXggYnkgcmVtb3ZpbmcgdGhlIHRyYWlsaW5nCisrICAgICByZWxfaW5zdGFsbGRpciBmcm9tIGl0LiAgKi8KKysgIHsKKysgICAgY29uc3QgY2hhciAqcnAgPSByZWxfaW5zdGFsbGRpciArIHN0cmxlbiAocmVsX2luc3RhbGxkaXIpOworKyAgICBjb25zdCBjaGFyICpjcCA9IGN1cnJfaW5zdGFsbGRpciArIHN0cmxlbiAoY3Vycl9pbnN0YWxsZGlyKTsKKysgICAgY29uc3QgY2hhciAqY3BfYmFzZSA9CisrICAgICAgY3Vycl9pbnN0YWxsZGlyICsgRklMRVNZU1RFTV9QUkVGSVhfTEVOIChjdXJyX2luc3RhbGxkaXIpOworKworKyAgICB3aGlsZSAocnAgPiByZWxfaW5zdGFsbGRpciAmJiBjcCA+IGNwX2Jhc2UpCisrICAgICAgeworKwlib29sIHNhbWUgPSBmYWxzZTsKKysJY29uc3QgY2hhciAqcnBpID0gcnA7CisrCWNvbnN0IGNoYXIgKmNwaSA9IGNwOworKworKwl3aGlsZSAocnBpID4gcmVsX2luc3RhbGxkaXIgJiYgY3BpID4gY3BfYmFzZSkKKysJICB7CisrCSAgICBycGktLTsKKysJICAgIGNwaS0tOworKwkgICAgaWYgKElTU0xBU0ggKCpycGkpIHx8IElTU0xBU0ggKCpjcGkpKQorKwkgICAgICB7CisrCQlpZiAoSVNTTEFTSCAoKnJwaSkgJiYgSVNTTEFTSCAoKmNwaSkpCisrCQkgIHNhbWUgPSB0cnVlOworKwkJYnJlYWs7CisrCSAgICAgIH0KKysjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0VNWF9fIHx8IGRlZmluZWQgX19ESkdQUF9fCisrCSAgICAvKiBXaW4zMiwgT1MvMiwgRE9TIC0gY2FzZSBpbnNpZ25pZmljYW50IGZpbGVzeXN0ZW0gKi8KKysJICAgIGlmICgoKnJwaSA+PSAnYScgJiYgKnJwaSA8PSAneicgPyAqcnBpIC0gJ2EnICsgJ0EnIDogKnJwaSkKKysJCSE9ICgqY3BpID49ICdhJyAmJiAqY3BpIDw9ICd6JyA/ICpjcGkgLSAnYScgKyAnQScgOiAqY3BpKSkKKysJICAgICAgYnJlYWs7CisrI2Vsc2UKKysJICAgIGlmICgqcnBpICE9ICpjcGkpCisrCSAgICAgIGJyZWFrOworKyNlbmRpZgorKwkgIH0KKysJaWYgKCFzYW1lKQorKwkgIGJyZWFrOworKwkvKiBUaGUgbGFzdCBwYXRobmFtZSBjb21wb25lbnQgd2FzIHRoZSBzYW1lLiAgb3BpIGFuZCBjcGkgbm93IHBvaW50CisrCSAgIHRvIHRoZSBzbGFzaCBiZWZvcmUgaXQuICAqLworKwlycCA9IHJwaTsKKysJY3AgPSBjcGk7CisrICAgICAgfQorKworKyAgICBpZiAocnAgPiByZWxfaW5zdGFsbGRpcikKKysgICAgICAvKiBVbmV4cGVjdGVkOiBUaGUgY3Vycl9pbnN0YWxsZGlyIGRvZXMgbm90IGVuZCB3aXRoIHJlbF9pbnN0YWxsZGlyLiAgKi8KKysgICAgICByZXR1cm4gTlVMTDsKKysKKysgICAgeworKyAgICAgIHNpemVfdCBjdXJyX3ByZWZpeF9sZW4gPSBjcCAtIGN1cnJfaW5zdGFsbGRpcjsKKysgICAgICBjaGFyICpjdXJyX3ByZWZpeDsKKysKKysgICAgICBjdXJyX3ByZWZpeCA9IChjaGFyICopIHhtYWxsb2MgKGN1cnJfcHJlZml4X2xlbiArIDEpOworKyNpZmRlZiBOT19YTUFMTE9DCisrICAgICAgaWYgKGN1cnJfcHJlZml4ID09IE5VTEwpCisrCXJldHVybiBOVUxMOworKyNlbmRpZgorKyAgICAgIG1lbWNweSAoY3Vycl9wcmVmaXgsIGN1cnJfaW5zdGFsbGRpciwgY3Vycl9wcmVmaXhfbGVuKTsKKysgICAgICBjdXJyX3ByZWZpeFtjdXJyX3ByZWZpeF9sZW5dID0gJ1wwJzsKKysKKysgICAgICByZXR1cm4gY3Vycl9wcmVmaXg7CisrICAgIH0KKysgIH0KKyt9CisrCisrI2VuZGlmIC8qICFJTl9MSUJSQVJZIHx8IFBJQyAqLworKworKyNpZiBkZWZpbmVkIFBJQyAmJiBkZWZpbmVkIElOU1RBTExESVIKKysKKysvKiBGdWxsIHBhdGhuYW1lIG9mIHNoYXJlZCBsaWJyYXJ5LCBvciBOVUxMLiAgKi8KKytzdGF0aWMgY2hhciAqc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWU7CisrCisrI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fCisrCisrLyogRGV0ZXJtaW5lIHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeSB3aGVuIGl0IGlzIGxvYWRlZC4gICovCisrCisrQk9PTCBXSU5BUEkKKytEbGxNYWluIChISU5TVEFOQ0UgbW9kdWxlX2hhbmRsZSwgRFdPUkQgZXZlbnQsIExQVk9JRCByZXNlcnZlZCkKKyt7CisrICAodm9pZCkgcmVzZXJ2ZWQ7CisrCisrICBpZiAoZXZlbnQgPT0gRExMX1BST0NFU1NfQVRUQUNIKQorKyAgICB7CisrICAgICAgLyogVGhlIERMTCBpcyBiZWluZyBsb2FkZWQgaW50byBhbiBhcHBsaWNhdGlvbidzIGFkZHJlc3MgcmFuZ2UuICAqLworKyAgICAgIHN0YXRpYyBjaGFyIGxvY2F0aW9uW01BWF9QQVRIXTsKKysKKysgICAgICBpZiAoIUdldE1vZHVsZUZpbGVOYW1lIChtb2R1bGVfaGFuZGxlLCBsb2NhdGlvbiwgc2l6ZW9mIChsb2NhdGlvbikpKQorKwkvKiBTaG91bGRuJ3QgaGFwcGVuLiAgKi8KKysJcmV0dXJuIEZBTFNFOworKworKyAgICAgIGlmICghSVNfUEFUSF9XSVRIX0RJUiAobG9jYXRpb24pKQorKwkvKiBTaG91bGRuJ3QgaGFwcGVuLiAgKi8KKysJcmV0dXJuIEZBTFNFOworKworKyAgICAgIHNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lID0gc3RyZHVwIChsb2NhdGlvbik7CisrICAgIH0KKysKKysgIHJldHVybiBUUlVFOworK30KKysKKysjZWxzZSAvKiBVbml4ICovCisrCisrc3RhdGljIHZvaWQKKytmaW5kX3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lICgpCisreworKyNpZiBkZWZpbmVkIF9fbGludXhfXyAmJiBfX0dMSUJDX18gPj0gMgorKyAgLyogTGludXggaGFzIC9wcm9jL3NlbGYvbWFwcy4gZ2xpYmMgMiBoYXMgdGhlIGdldGxpbmUoKSBmdW5jdGlvbi4gICovCisrICBGSUxFICpmcDsKKysKKysgIC8qIE9wZW4gdGhlIGN1cnJlbnQgcHJvY2VzcycgbWFwcyBmaWxlLiAgSXQgZGVzY3JpYmVzIG9uZSBWTUEgcGVyIGxpbmUuICAqLworKyAgZnAgPSBmb3BlbiAoIi9wcm9jL3NlbGYvbWFwcyIsICJyIik7CisrICBpZiAoZnApCisrICAgIHsKKysgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSAodW5zaWduZWQgbG9uZykgJmZpbmRfc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWU7CisrICAgICAgZm9yICg7OykKKysJeworKwkgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKKysJICBpbnQgYzsKKysKKysJICBpZiAoZnNjYW5mIChmcCwgIiVseC0lbHgiLCAmc3RhcnQsICZlbmQpICE9IDIpCisrCSAgICBicmVhazsKKysJICBpZiAoYWRkcmVzcyA+PSBzdGFydCAmJiBhZGRyZXNzIDw9IGVuZCAtIDEpCisrCSAgICB7CisrCSAgICAgIC8qIEZvdW5kIGl0LiAgTm93IHNlZSBpZiB0aGlzIGxpbmUgY29udGFpbnMgYSBmaWxlbmFtZS4gICovCisrCSAgICAgIHdoaWxlIChjID0gZ2V0YyAoZnApLCBjICE9IEVPRiAmJiBjICE9ICdcbicgJiYgYyAhPSAnLycpCisrCQljb250aW51ZTsKKysJICAgICAgaWYgKGMgPT0gJy8nKQorKwkJeworKwkJICBzaXplX3Qgc2l6ZTsKKysJCSAgaW50IGxlbjsKKysKKysJCSAgdW5nZXRjIChjLCBmcCk7CisrCQkgIHNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lID0gTlVMTDsgc2l6ZSA9IDA7CisrCQkgIGxlbiA9IGdldGxpbmUgKCZzaGFyZWRfbGlicmFyeV9mdWxsbmFtZSwgJnNpemUsIGZwKTsKKysJCSAgaWYgKGxlbiA+PSAwKQorKwkJICAgIHsKKysJCSAgICAgIC8qIFN1Y2Nlc3M6IGZpbGxlZCBzaGFyZWRfbGlicmFyeV9mdWxsbmFtZS4gICovCisrCQkgICAgICBpZiAobGVuID4gMCAmJiBzaGFyZWRfbGlicmFyeV9mdWxsbmFtZVtsZW4gLSAxXSA9PSAnXG4nKQorKwkJCXNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lW2xlbiAtIDFdID0gJ1wwJzsKKysJCSAgICB9CisrCQl9CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKwkgIHdoaWxlIChjID0gZ2V0YyAoZnApLCBjICE9IEVPRiAmJiBjICE9ICdcbicpCisrCSAgICBjb250aW51ZTsKKysJfQorKyAgICAgIGZjbG9zZSAoZnApOworKyAgICB9CisrI2VuZGlmCisrfQorKworKyNlbmRpZiAvKiBXSU4zMiAvIFVuaXggKi8KKysKKysvKiBSZXR1cm4gdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGN1cnJlbnQgc2hhcmVkIGxpYnJhcnkuCisrICAgUmV0dXJuIE5VTEwgaWYgdW5rbm93bi4KKysgICBHdWFyYW50ZWVkIHRvIHdvcmsgb25seSBvbiBMaW51eCBhbmQgV29lMzIuICAqLworK3N0YXRpYyBjaGFyICoKKytnZXRfc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWUgKCkKKyt7CisrI2lmICEoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pCisrICBzdGF0aWMgYm9vbCB0cmllZF9maW5kX3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lOworKyAgaWYgKCF0cmllZF9maW5kX3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lKQorKyAgICB7CisrICAgICAgZmluZF9zaGFyZWRfbGlicmFyeV9mdWxsbmFtZSAoKTsKKysgICAgICB0cmllZF9maW5kX3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lID0gdHJ1ZTsKKysgICAgfQorKyNlbmRpZgorKyAgcmV0dXJuIHNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lOworK30KKysKKysjZW5kaWYgLyogUElDICovCisrCisrLyogUmV0dXJucyB0aGUgcGF0aG5hbWUsIHJlbG9jYXRlZCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uCisrICAgZGlyZWN0b3J5LiAgKi8KKytjb25zdCBjaGFyICoKKytyZWxvY2F0ZSAoY29uc3QgY2hhciAqcGF0aG5hbWUpCisreworKyNpZiBkZWZpbmVkIFBJQyAmJiBkZWZpbmVkIElOU1RBTExESVIKKysgIHN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQ7CisrCisrICAvKiBJbml0aWFsaXphdGlvbiBjb2RlIGZvciBhIHNoYXJlZCBsaWJyYXJ5LiAgKi8KKysgIGlmICghaW5pdGlhbGl6ZWQpCisrICAgIHsKKysgICAgICAvKiBBdCB0aGlzIHBvaW50LCBvcmlnX3ByZWZpeCBhbmQgY3Vycl9wcmVmaXggbGlrZWx5IGhhdmUgYWxyZWFkeSBiZWVuCisrCSBzZXQgdGhyb3VnaCB0aGUgbWFpbiBwcm9ncmFtJ3Mgc2V0X3Byb2dyYW1fbmFtZV9hbmRfaW5zdGFsbGRpcgorKwkgZnVuY3Rpb24uICBUaGlzIGlzIHN1ZmZpY2llbnQgaW4gdGhlIGNhc2UgdGhhdCB0aGUgbGlicmFyeSBoYXMKKysJIGluaXRpYWxseSBiZWVuIGluc3RhbGxlZCBpbiB0aGUgc2FtZSBvcmlnX3ByZWZpeC4gIEJ1dCB3ZSBjYW4gZG8KKysJIGJldHRlciwgdG8gYWxzbyBjb3ZlciB0aGUgY2FzZXMgdGhhdCAxLiBpdCBoYXMgYmVlbiBpbnN0YWxsZWQKKysJIGluIGEgZGlmZmVyZW50IHByZWZpeCBiZWZvcmUgYmVpbmcgbW92ZWQgdG8gb3JpZ19wcmVmaXggYW5kIChsYXRlcikKKysJIHRvIGN1cnJfcHJlZml4LCAyLiB1bmxpa2UgdGhlIHByb2dyYW0sIGl0IGhhcyBub3QgbW92ZWQgYXdheSBmcm9tCisrCSBvcmlnX3ByZWZpeC4gICovCisrICAgICAgY29uc3QgY2hhciAqb3JpZ19pbnN0YWxscHJlZml4ID0gSU5TVEFMTFBSRUZJWDsKKysgICAgICBjb25zdCBjaGFyICpvcmlnX2luc3RhbGxkaXIgPSBJTlNUQUxMRElSOworKyAgICAgIGNvbnN0IGNoYXIgKmN1cnJfcHJlZml4X2JldHRlcjsKKysKKysgICAgICBjdXJyX3ByZWZpeF9iZXR0ZXIgPQorKwljb21wdXRlX2N1cnJfcHJlZml4IChvcmlnX2luc3RhbGxwcmVmaXgsIG9yaWdfaW5zdGFsbGRpciwKKysJCQkgICAgIGdldF9zaGFyZWRfbGlicmFyeV9mdWxsbmFtZSAoKSk7CisrICAgICAgaWYgKGN1cnJfcHJlZml4X2JldHRlciA9PSBOVUxMKQorKwljdXJyX3ByZWZpeF9iZXR0ZXIgPSBjdXJyX3ByZWZpeDsKKysKKysgICAgICBzZXRfcmVsb2NhdGlvbl9wcmVmaXggKG9yaWdfaW5zdGFsbHByZWZpeCwgY3Vycl9wcmVmaXhfYmV0dGVyKTsKKysKKysgICAgICBpbml0aWFsaXplZCA9IDE7CisrICAgIH0KKysjZW5kaWYKKysKKysgIC8qIE5vdGU6IEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gcGVyZm9ybSBjYXNlIGluc2Vuc2l0aXZlIGNvbXBhcmlzb24gaGVyZSwKKysgICAgIGV2ZW4gZm9yIERPUy1saWtlIGZpbGVzeXN0ZW1zLCBiZWNhdXNlIHRoZSBwYXRobmFtZSBhcmd1bWVudCB3YXMKKysgICAgIHR5cGljYWxseSBjcmVhdGVkIGZyb20gdGhlIHNhbWUgTWFrZWZpbGUgdmFyaWFibGUgYXMgb3JpZ19wcmVmaXggY2FtZQorKyAgICAgZnJvbS4gICovCisrICBpZiAob3JpZ19wcmVmaXggIT0gTlVMTCAmJiBjdXJyX3ByZWZpeCAhPSBOVUxMCisrICAgICAgJiYgc3RybmNtcCAocGF0aG5hbWUsIG9yaWdfcHJlZml4LCBvcmlnX3ByZWZpeF9sZW4pID09IDApCisrICAgIHsKKysgICAgICBpZiAocGF0aG5hbWVbb3JpZ19wcmVmaXhfbGVuXSA9PSAnXDAnKQorKwkvKiBwYXRobmFtZSBlcXVhbHMgb3JpZ19wcmVmaXguICAqLworKwlyZXR1cm4gY3Vycl9wcmVmaXg7CisrICAgICAgaWYgKElTU0xBU0ggKHBhdGhuYW1lW29yaWdfcHJlZml4X2xlbl0pKQorKwl7CisrCSAgLyogcGF0aG5hbWUgc3RhcnRzIHdpdGggb3JpZ19wcmVmaXguICAqLworKwkgIGNvbnN0IGNoYXIgKnBhdGhuYW1lX3RhaWwgPSAmcGF0aG5hbWVbb3JpZ19wcmVmaXhfbGVuXTsKKysJICBjaGFyICpyZXN1bHQgPQorKwkgICAgKGNoYXIgKikgeG1hbGxvYyAoY3Vycl9wcmVmaXhfbGVuICsgc3RybGVuIChwYXRobmFtZV90YWlsKSArIDEpOworKworKyNpZmRlZiBOT19YTUFMTE9DCisrCSAgaWYgKHJlc3VsdCAhPSBOVUxMKQorKyNlbmRpZgorKwkgICAgeworKwkgICAgICBtZW1jcHkgKHJlc3VsdCwgY3Vycl9wcmVmaXgsIGN1cnJfcHJlZml4X2xlbik7CisrCSAgICAgIHN0cmNweSAocmVzdWx0ICsgY3Vycl9wcmVmaXhfbGVuLCBwYXRobmFtZV90YWlsKTsKKysJICAgICAgcmV0dXJuIHJlc3VsdDsKKysJICAgIH0KKysJfQorKyAgICB9CisrICAvKiBOb3RoaW5nIHRvIHJlbG9jYXRlLiAgKi8KKysgIHJldHVybiBwYXRobmFtZTsKKyt9CisrCisrI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcmVsb2NhdGFibGUuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9yZWxvY2F0YWJsZS5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjUxNzAzMDk2IC0wNDAwCitAQCAtMCwwICsxLDc3IEBACisrLyogUHJvdmlkZSByZWxvY2F0YWJsZSBwYWNrYWdlcy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMDMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX1JFTE9DQVRBQkxFX0gKKysjZGVmaW5lIF9SRUxPQ0FUQUJMRV9ICisrCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIiB7CisrI2VuZGlmCisrCisrCisrLyogVGhpcyBjYW4gYmUgZW5hYmxlZCB0aHJvdWdoIHRoZSBjb25maWd1cmUgLS1lbmFibGUtcmVsb2NhdGFibGUgb3B0aW9uLiAgKi8KKysjaWYgRU5BQkxFX1JFTE9DQVRBQkxFCisrCisrLyogV2hlbiBidWlsZGluZyBhIERMTCwgd2UgbXVzdCBleHBvcnQgc29tZSBmdW5jdGlvbnMuICBOb3RlIHRoYXQgYmVjYXVzZQorKyAgIHRoaXMgaXMgYSBwcml2YXRlIC5oIGZpbGUsIHdlIGRvbid0IG5lZWQgdG8gdXNlIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorKyAgIGluIGFueSBjYXNlLiAgKi8KKysjaWYgZGVmaW5lZCBfTVNDX1ZFUiAmJiBCVUlMRElOR19ETEwKKysjIGRlZmluZSBSRUxPQ0FUQUJMRV9ETExfRVhQT1JURUQgX19kZWNsc3BlYyhkbGxleHBvcnQpCisrI2Vsc2UKKysjIGRlZmluZSBSRUxPQ0FUQUJMRV9ETExfRVhQT1JURUQKKysjZW5kaWYKKysKKysvKiBTZXRzIHRoZSBvcmlnaW5hbCBhbmQgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeCBvZiB0aGUgcGFja2FnZS4KKysgICBSZWxvY2F0aW9uIHNpbXBseSByZXBsYWNlcyBhIHBhdGhuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsIHByZWZpeAorKyAgIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHBhdGhuYW1lIHdpdGggdGhlIGN1cnJlbnQgcHJlZml4IGluc3RlYWQuICBCb3RoCisrICAgcHJlZml4ZXMgc2hvdWxkIGJlIGRpcmVjdG9yeSBuYW1lcyB3aXRob3V0IHRyYWlsaW5nIHNsYXNoIChpLmUuIHVzZSAiIgorKyAgIGluc3RlYWQgb2YgIi8iKS4gICovCisrZXh0ZXJuIFJFTE9DQVRBQkxFX0RMTF9FWFBPUlRFRCB2b2lkCisrICAgICAgIHNldF9yZWxvY2F0aW9uX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19wcmVmaXgsCisrCQkJICAgICAgY29uc3QgY2hhciAqY3Vycl9wcmVmaXgpOworKworKy8qIFJldHVybnMgdGhlIHBhdGhuYW1lLCByZWxvY2F0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbgorKyAgIGRpcmVjdG9yeS4gICovCisrZXh0ZXJuIGNvbnN0IGNoYXIgKiByZWxvY2F0ZSAoY29uc3QgY2hhciAqcGF0aG5hbWUpOworKworKy8qIE1lbW9yeSBtYW5hZ2VtZW50OiByZWxvY2F0ZSgpIGxlYWtzIG1lbW9yeSwgYmVjYXVzZSBpdCBoYXMgdG8gY29uc3RydWN0CisrICAgYSBmcmVzaCBwYXRobmFtZS4gIElmIHRoaXMgaXMgYSBwcm9ibGVtIGJlY2F1c2UgeW91ciBwcm9ncmFtIGNhbGxzCisrICAgcmVsb2NhdGUoKSBmcmVxdWVudGx5LCB0aGluayBhYm91dCBjYWNoaW5nIHRoZSByZXN1bHQuICAqLworKworKy8qIENvbnZlbmllbmNlIGZ1bmN0aW9uOgorKyAgIENvbXB1dGVzIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBwcmVmaXgsIGJhc2VkIG9uIHRoZSBvcmlnaW5hbAorKyAgIGluc3RhbGxhdGlvbiBwcmVmaXgsIHRoZSBvcmlnaW5hbCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IG9mIGEgcGFydGljdWxhcgorKyAgIGZpbGUsIGFuZCB0aGUgY3VycmVudCBwYXRobmFtZSBvZiB0aGlzIGZpbGUuICBSZXR1cm5zIE5VTEwgdXBvbiBmYWlsdXJlLiAgKi8KKytleHRlcm4gY29uc3QgY2hhciAqIGNvbXB1dGVfY3Vycl9wcmVmaXggKGNvbnN0IGNoYXIgKm9yaWdfaW5zdGFsbHByZWZpeCwKKysJCQkJCSBjb25zdCBjaGFyICpvcmlnX2luc3RhbGxkaXIsCisrCQkJCQkgY29uc3QgY2hhciAqY3Vycl9wYXRobmFtZSk7CisrCisrI2Vsc2UKKysKKysvKiBCeSBkZWZhdWx0LCB3ZSB1c2UgdGhlIGhhcmR3aXJlZCBwYXRobmFtZXMuICAqLworKyNkZWZpbmUgcmVsb2NhdGUocGF0aG5hbWUpIChwYXRobmFtZSkKKysKKysjZW5kaWYKKysKKysKKysjaWZkZWYgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrCisrI2VuZGlmIC8qIF9SRUxPQ0FUQUJMRV9IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvdGV4dGRvbWFpbi5jCTE5OTgtMDQtMjYgMDk6MjI6MzcuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3RleHRkb21haW4uYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjY1NjcwMjMzNiAtMDQwMAorQEAgLTEsNTEgKzEsNjAgQEAKKy0vKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgdGV4dGRvbWFpbigzKSBmdW5jdGlvbgorLSAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0gICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgMTk5NS4KKysvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgdGV4dGRvbWFpbigzKSBmdW5jdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKyAKKyAjaWZkZWYgSEFWRV9DT05GSUdfSAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistI2lmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgX0xJQkMKKy0jIGluY2x1ZGUgPHN0ZGxpYi5oPgorLSNlbmRpZgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisgCistI2lmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgSEFWRV9TVFJJTkdfSCB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzdHJpbmcuaD4KKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGxpYmludGwuaD4KKyAjZWxzZQorLSMgaW5jbHVkZSA8c3RyaW5ncy5oPgorLSMgaWZuZGVmIG1lbWNweQorLSMgIGRlZmluZSBtZW1jcHkoRHN0LCBTcmMsIE51bSkgYmNvcHkgKFNyYywgRHN0LCBOdW0pCistIyBlbmRpZgorKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorICNlbmRpZgorKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorIAorICNpZmRlZiBfTElCQworLSMgaW5jbHVkZSA8bGliaW50bC5oPgorKy8qIFdlIGhhdmUgdG8gaGFuZGxlIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucy4gICovCisrIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorICNlbHNlCistIyBpbmNsdWRlICJsaWJnZXR0ZXh0LmgiCisrLyogUHJvdmlkZSBkdW1teSBpbXBsZW1lbnRhdGlvbiBpZiB0aGlzIGlzIG91dHNpZGUgZ2xpYmMuICAqLworKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfZGVmaW5lKENMQVNTLCBOQU1FKQorKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfd3Jsb2NrKE5BTUUpCisrIyBkZWZpbmUgX19saWJjX3J3bG9ja191bmxvY2soTkFNRSkKKysjZW5kaWYKKysKKysvKiBUaGUgaW50ZXJuYWwgdmFyaWFibGVzIGluIHRoZSBzdGFuZGFsb25lIGxpYmludGwuYSBtdXN0IGhhdmUgZGlmZmVyZW50CisrICAgbmFtZXMgdGhhbiB0aGUgaW50ZXJuYWwgdmFyaWFibGVzIGluIEdOVSBsaWJjLCBvdGhlcndpc2UgcHJvZ3JhbXMKKysgICB1c2luZyBsaWJpbnRsLmEgY2Fubm90IGJlIGxpbmtlZCBzdGF0aWNhbGx5LiAgKi8KKysjaWYgIWRlZmluZWQgX0xJQkMKKysjIGRlZmluZSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbiBsaWJpbnRsX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4KKysjIGRlZmluZSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiBsaWJpbnRsX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4KKyAjZW5kaWYKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCisgLyogTmFtZSBvZiB0aGUgZGVmYXVsdCB0ZXh0IGRvbWFpbi4gICovCistZXh0ZXJuIGNvbnN0IGNoYXIgX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW5bXTsKKytleHRlcm4gY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbltdIGF0dHJpYnV0ZV9oaWRkZW47CisgCisgLyogRGVmYXVsdCB0ZXh0IGRvbWFpbiBpbiB3aGljaCBlbnRyaWVzIGZvciBnZXR0ZXh0KDMpIGFyZSB0byBiZSBmb3VuZC4gICovCistZXh0ZXJuIGNvbnN0IGNoYXIgKl9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworK2V4dGVybiBjb25zdCBjaGFyICpfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiBhdHRyaWJ1dGVfaGlkZGVuOworIAorIAorIC8qIE5hbWVzIGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoZXkgbXVzdCBub3QgY2xhc2gKK0BAIC01NCw1MCArNjMsNzYgQEAKKyAgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworICNpZmRlZiBfTElCQworICMgZGVmaW5lIFRFWFRET01BSU4gX190ZXh0ZG9tYWluCistIyBkZWZpbmUgc3RyZHVwKHN0cikgX19zdHJkdXAgKHN0cikKKysjIGlmbmRlZiBzdHJkdXAKKysjICBkZWZpbmUgc3RyZHVwKHN0cikgX19zdHJkdXAgKHN0cikKKysjIGVuZGlmCisgI2Vsc2UKKy0jIGRlZmluZSBURVhURE9NQUlOIHRleHRkb21haW5fXworKyMgZGVmaW5lIFRFWFRET01BSU4gbGliaW50bF90ZXh0ZG9tYWluCisgI2VuZGlmCisgCisrLyogTG9jayB2YXJpYWJsZSB0byBwcm90ZWN0IHRoZSBnbG9iYWwgZGF0YSBpbiB0aGUgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbi4gICovCisrX19saWJjX3J3bG9ja19kZWZpbmUgKGV4dGVybiwgX25sX3N0YXRlX2xvY2sgYXR0cmlidXRlX2hpZGRlbikKKysKKyAvKiBTZXQgdGhlIGN1cnJlbnQgZGVmYXVsdCBtZXNzYWdlIGNhdGFsb2cgdG8gRE9NQUlOTkFNRS4KKyAgICBJZiBET01BSU5OQU1FIGlzIG51bGwsIHJldHVybiB0aGUgY3VycmVudCBkZWZhdWx0LgorICAgIElmIERPTUFJTk5BTUUgaXMgIiIsIHJlc2V0IHRvIHRoZSBkZWZhdWx0IG9mICJtZXNzYWdlcyIuICAqLworIGNoYXIgKgorLVRFWFRET01BSU4gKGRvbWFpbm5hbWUpCistICAgICBjb25zdCBjaGFyICpkb21haW5uYW1lOworK1RFWFRET01BSU4gKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpCisgeworLSAgY2hhciAqb2xkOworKyAgY2hhciAqbmV3X2RvbWFpbjsKKysgIGNoYXIgKm9sZF9kb21haW47CisgCisgICAvKiBBIE5VTEwgcG9pbnRlciByZXF1ZXN0cyB0aGUgY3VycmVudCBzZXR0aW5nLiAgKi8KKyAgIGlmIChkb21haW5uYW1lID09IE5VTEwpCisgICAgIHJldHVybiAoY2hhciAqKSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbjsKKyAKKy0gIG9sZCA9IChjaGFyICopIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworKyAgX19saWJjX3J3bG9ja193cmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKysKKysgIG9sZF9kb21haW4gPSAoY2hhciAqKSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbjsKKyAKKyAgIC8qIElmIGRvbWFpbiBuYW1lIGlzIHRoZSBudWxsIHN0cmluZyBzZXQgdG8gZGVmYXVsdCBkb21haW4gIm1lc3NhZ2VzIi4gICovCisgICBpZiAoZG9tYWlubmFtZVswXSA9PSAnXDAnCisgICAgICAgfHwgc3RyY21wIChkb21haW5uYW1lLCBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbikgPT0gMCkKKy0gICAgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gPSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbjsKKysgICAgeworKyAgICAgIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluID0gX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW47CisrICAgICAgbmV3X2RvbWFpbiA9IChjaGFyICopIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworKyAgICB9CisrICBlbHNlIGlmIChzdHJjbXAgKGRvbWFpbm5hbWUsIG9sZF9kb21haW4pID09IDApCisrICAgIC8qIFRoaXMgY2FuIGhhcHBlbiBhbmQgcGVvcGxlIHdpbGwgdXNlIGl0IHRvIHNpZ25hbCB0aGF0IHNvbWUKKysgICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGUgY2hhbmdlZC4gICovCisrICAgIG5ld19kb21haW4gPSBvbGRfZG9tYWluOworICAgZWxzZQorICAgICB7CisgICAgICAgLyogSWYgdGhlIGZvbGxvd2luZyBtYWxsb2MgZmFpbHMgYF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluJworIAkgd2lsbCBiZSBOVUxMLiAgVGhpcyB2YWx1ZSB3aWxsIGJlIHJldHVybmVkIGFuZCBzbyBzaWduYWxzIHdlCisgCSBhcmUgb3V0IG9mIGNvcmUuICAqLworICNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9TVFJEVVAKKy0gICAgICBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiA9IHN0cmR1cCAoZG9tYWlubmFtZSk7CisrICAgICAgbmV3X2RvbWFpbiA9IHN0cmR1cCAoZG9tYWlubmFtZSk7CisgI2Vsc2UKKyAgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChkb21haW5uYW1lKSArIDE7CistICAgICAgY2hhciAqY3AgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CistICAgICAgaWYgKGNwICE9IE5VTEwpCistCW1lbWNweSAoY3AsIGRvbWFpbm5hbWUsIGxlbik7CistICAgICAgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gPSBjcDsKKysgICAgICBuZXdfZG9tYWluID0gKGNoYXIgKikgbWFsbG9jIChsZW4pOworKyAgICAgIGlmIChuZXdfZG9tYWluICE9IE5VTEwpCisrCW1lbWNweSAobmV3X2RvbWFpbiwgZG9tYWlubmFtZSwgbGVuKTsKKyAjZW5kaWYKKysKKysgICAgICBpZiAobmV3X2RvbWFpbiAhPSBOVUxMKQorKwlfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiA9IG5ld19kb21haW47CisgICAgIH0KKyAKKy0gIGlmIChvbGQgIT0gX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4pCistICAgIGZyZWUgKG9sZCk7CisrICAvKiBXZSB1c2UgdGhpcyBwb3NzaWJpbGl0eSB0byBzaWduYWwgYSBjaGFuZ2Ugb2YgdGhlIGxvYWRlZCBjYXRhbG9ncworKyAgICAgc2luY2UgdGhpcyBpcyBtb3N0IGxpa2VseSB0aGUgY2FzZSBhbmQgdGhlcmUgaXMgbm8gb3RoZXIgZWFzeSB3ZQorKyAgICAgdG8gZG8gaXQuICBEbyBpdCBvbmx5IHdoZW4gdGhlIGNhbGwgd2FzIHN1Y2Nlc3NmdWwuICAqLworKyAgaWYgKG5ld19kb21haW4gIT0gTlVMTCkKKysgICAgeworKyAgICAgICsrX25sX21zZ19jYXRfY250cjsKKyAKKy0gIHJldHVybiAoY2hhciAqKSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbjsKKysgICAgICBpZiAob2xkX2RvbWFpbiAhPSBuZXdfZG9tYWluICYmIG9sZF9kb21haW4gIT0gX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4pCisrCWZyZWUgKG9sZF9kb21haW4pOworKyAgICB9CisrCisrICBfX2xpYmNfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworKworKyAgcmV0dXJuIG5ld19kb21haW47CisgfQorIAorICNpZmRlZiBfTElCQworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3Zhc25wcmludGYuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC92YXNucHJpbnRmLmMJMjAwNC0wOS0xMiAxNDo0MDozNC42NjI3MDE0MjQgLTA0MDAKK0BAIC0wLDAgKzEsODg3IEBACisrLyogdnNwcmludGYgd2l0aCBhdXRvbWF0aWMgbWVtb3J5IGFsbG9jYXRpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFRlbGwgZ2xpYmMncyA8c3RkaW8uaD4gdG8gcHJvdmlkZSBhIHByb3RvdHlwZSBmb3Igc25wcmludGYoKS4KKysgICBUaGlzIG11c3QgY29tZSBiZWZvcmUgPGNvbmZpZy5oPiBiZWNhdXNlIDxjb25maWcuaD4gbWF5IGluY2x1ZGUKKysgICA8ZmVhdHVyZXMuaD4sIGFuZCBvbmNlIDxmZWF0dXJlcy5oPiBoYXMgYmVlbiBpbmNsdWRlZCwgaXQncyB0b28gbGF0ZS4gICovCisrI2lmbmRlZiBfR05VX1NPVVJDRQorKyMgZGVmaW5lIF9HTlVfU09VUkNFICAgIDEKKysjZW5kaWYKKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrI2lmbmRlZiBJTl9MSUJJTlRMCisrIyBpbmNsdWRlIDxhbGxvY2EuaD4KKysjZW5kaWYKKysKKysvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKysjaWYgV0lERV9DSEFSX1ZFUlNJT04KKysjIGluY2x1ZGUgInZhc253cHJpbnRmLmgiCisrI2Vsc2UKKysjIGluY2x1ZGUgInZhc25wcmludGYuaCIKKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4JLyogc25wcmludGYoKSwgc3ByaW50ZigpICovCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgkvKiBhYm9ydCgpLCBtYWxsb2MoKSwgcmVhbGxvYygpLCBmcmVlKCkgKi8KKysjaW5jbHVkZSA8c3RyaW5nLmg+CS8qIG1lbWNweSgpLCBzdHJsZW4oKSAqLworKyNpbmNsdWRlIDxlcnJuby5oPgkvKiBlcnJubyAqLworKyNpbmNsdWRlIDxsaW1pdHMuaD4JLyogQ0hBUl9CSVQgKi8KKysjaW5jbHVkZSA8ZmxvYXQuaD4JLyogREJMX01BWF9FWFAsIExEQkxfTUFYX0VYUCAqLworKyNpZiBXSURFX0NIQVJfVkVSU0lPTgorKyMgaW5jbHVkZSAid3ByaW50Zi1wYXJzZS5oIgorKyNlbHNlCisrIyBpbmNsdWRlICJwcmludGYtcGFyc2UuaCIKKysjZW5kaWYKKysKKysvKiBDaGVja2VkIHNpemVfdCBjb21wdXRhdGlvbnMuICAqLworKyNpbmNsdWRlICJ4c2l6ZS5oIgorKworKyNpZmRlZiBIQVZFX1dDSEFSX1QKKysjIGlmZGVmIEhBVkVfV0NTTEVOCisrIyAgZGVmaW5lIGxvY2FsX3djc2xlbiB3Y3NsZW4KKysjIGVsc2UKKysgICAvKiBTb2xhcmlzIDIuNS4xIGhhcyB3Y3NsZW4oKSBpbiBhIHNlcGFyYXRlIGxpYnJhcnkgbGlidy5zby4gVG8gYXZvaWQKKysgICAgICBhIGRlcGVuZGVuY3kgdG93YXJkcyB0aGlzIGxpYnJhcnksIGhlcmUgaXMgYSBsb2NhbCBzdWJzdGl0dXRlLgorKyAgICAgIERlZmluZSB0aGlzIHN1YnN0aXR1dGUgb25seSBvbmNlLCBldmVuIGlmIHRoaXMgZmlsZSBpcyBpbmNsdWRlZAorKyAgICAgIHR3aWNlIGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQuICAqLworKyMgIGlmbmRlZiBsb2NhbF93Y3NsZW5fZGVmaW5lZAorKyMgICBkZWZpbmUgbG9jYWxfd2NzbGVuX2RlZmluZWQgMQorK3N0YXRpYyBzaXplX3QKKytsb2NhbF93Y3NsZW4gKGNvbnN0IHdjaGFyX3QgKnMpCisreworKyAgY29uc3Qgd2NoYXJfdCAqcHRyOworKworKyAgZm9yIChwdHIgPSBzOyAqcHRyICE9ICh3Y2hhcl90KSAwOyBwdHIrKykKKysgICAgOworKyAgcmV0dXJuIHB0ciAtIHM7CisrfQorKyMgIGVuZGlmCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpZiBXSURFX0NIQVJfVkVSU0lPTgorKyMgZGVmaW5lIFZBU05QUklOVEYgdmFzbndwcmludGYKKysjIGRlZmluZSBDSEFSX1Qgd2NoYXJfdAorKyMgZGVmaW5lIERJUkVDVElWRSB3Y2hhcl90X2RpcmVjdGl2ZQorKyMgZGVmaW5lIERJUkVDVElWRVMgd2NoYXJfdF9kaXJlY3RpdmVzCisrIyBkZWZpbmUgUFJJTlRGX1BBUlNFIHdwcmludGZfcGFyc2UKKysjIGRlZmluZSBVU0VfU05QUklOVEYgMQorKyMgaWYgSEFWRV9ERUNMX19TTldQUklOVEYKKysgICAvKiBPbiBXaW5kb3dzLCB0aGUgZnVuY3Rpb24gc3dwcmludGYoKSBoYXMgYSBkaWZmZXJlbnQgc2lnbmF0dXJlIHRoYW4KKysgICAgICBvbiBVbml4OyB3ZSB1c2UgdGhlIF9zbndwcmludGYoKSBmdW5jdGlvbiBpbnN0ZWFkLiAgKi8KKysjICBkZWZpbmUgU05QUklOVEYgX3Nud3ByaW50ZgorKyMgZWxzZQorKyAgIC8qIFVuaXguICAqLworKyMgIGRlZmluZSBTTlBSSU5URiBzd3ByaW50ZgorKyMgZW5kaWYKKysjZWxzZQorKyMgZGVmaW5lIFZBU05QUklOVEYgdmFzbnByaW50ZgorKyMgZGVmaW5lIENIQVJfVCBjaGFyCisrIyBkZWZpbmUgRElSRUNUSVZFIGNoYXJfZGlyZWN0aXZlCisrIyBkZWZpbmUgRElSRUNUSVZFUyBjaGFyX2RpcmVjdGl2ZXMKKysjIGRlZmluZSBQUklOVEZfUEFSU0UgcHJpbnRmX3BhcnNlCisrIyBkZWZpbmUgVVNFX1NOUFJJTlRGIChIQVZFX0RFQ0xfX1NOUFJJTlRGIHx8IEhBVkVfU05QUklOVEYpCisrIyBpZiBIQVZFX0RFQ0xfX1NOUFJJTlRGCisrICAgLyogV2luZG93cy4gICovCisrIyAgZGVmaW5lIFNOUFJJTlRGIF9zbnByaW50ZgorKyMgZWxzZQorKyAgIC8qIFVuaXguICAqLworKyMgIGRlZmluZSBTTlBSSU5URiBzbnByaW50ZgorKyMgZW5kaWYKKysjZW5kaWYKKysKKytDSEFSX1QgKgorK1ZBU05QUklOVEYgKENIQVJfVCAqcmVzdWx0YnVmLCBzaXplX3QgKmxlbmd0aHAsIGNvbnN0IENIQVJfVCAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisreworKyAgRElSRUNUSVZFUyBkOworKyAgYXJndW1lbnRzIGE7CisrCisrICBpZiAoUFJJTlRGX1BBUlNFIChmb3JtYXQsICZkLCAmYSkgPCAwKQorKyAgICB7CisrICAgICAgZXJybm8gPSBFSU5WQUw7CisrICAgICAgcmV0dXJuIE5VTEw7CisrICAgIH0KKysKKysjZGVmaW5lIENMRUFOVVAoKSBcCisrICBmcmVlIChkLmRpcik7CQkJCQkJCQlcCisrICBpZiAoYS5hcmcpCQkJCQkJCQlcCisrICAgIGZyZWUgKGEuYXJnKTsKKysKKysgIGlmIChwcmludGZfZmV0Y2hhcmdzIChhcmdzLCAmYSkgPCAwKQorKyAgICB7CisrICAgICAgQ0xFQU5VUCAoKTsKKysgICAgICBlcnJubyA9IEVJTlZBTDsKKysgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorKworKyAgeworKyAgICBzaXplX3QgYnVmX25lZWRlZGxlbmd0aDsKKysgICAgQ0hBUl9UICpidWY7CisrICAgIENIQVJfVCAqYnVmX21hbGxvY2VkOworKyAgICBjb25zdCBDSEFSX1QgKmNwOworKyAgICBzaXplX3QgaTsKKysgICAgRElSRUNUSVZFICpkcDsKKysgICAgLyogT3V0cHV0IHN0cmluZyBhY2N1bXVsYXRvci4gICovCisrICAgIENIQVJfVCAqcmVzdWx0OworKyAgICBzaXplX3QgYWxsb2NhdGVkOworKyAgICBzaXplX3QgbGVuZ3RoOworKworKyAgICAvKiBBbGxvY2F0ZSBhIHNtYWxsIGJ1ZmZlciB0aGF0IHdpbGwgaG9sZCBhIGRpcmVjdGl2ZSBwYXNzZWQgdG8KKysgICAgICAgc3ByaW50ZiBvciBzbnByaW50Zi4gICovCisrICAgIGJ1Zl9uZWVkZWRsZW5ndGggPQorKyAgICAgIHhzdW00ICg3LCBkLm1heF93aWR0aF9sZW5ndGgsIGQubWF4X3ByZWNpc2lvbl9sZW5ndGgsIDYpOworKyNpZiBIQVZFX0FMTE9DQQorKyAgICBpZiAoYnVmX25lZWRlZGxlbmd0aCA8IDQwMDAgLyBzaXplb2YgKENIQVJfVCkpCisrICAgICAgeworKwlidWYgPSAoQ0hBUl9UICopIGFsbG9jYSAoYnVmX25lZWRlZGxlbmd0aCAqIHNpemVvZiAoQ0hBUl9UKSk7CisrCWJ1Zl9tYWxsb2NlZCA9IE5VTEw7CisrICAgICAgfQorKyAgICBlbHNlCisrI2VuZGlmCisrICAgICAgeworKwlzaXplX3QgYnVmX21lbXNpemUgPSB4dGltZXMgKGJ1Zl9uZWVkZWRsZW5ndGgsIHNpemVvZiAoQ0hBUl9UKSk7CisrCWlmIChzaXplX292ZXJmbG93X3AgKGJ1Zl9tZW1zaXplKSkKKysJICBnb3RvIG91dF9vZl9tZW1vcnlfMTsKKysJYnVmID0gKENIQVJfVCAqKSBtYWxsb2MgKGJ1Zl9tZW1zaXplKTsKKysJaWYgKGJ1ZiA9PSBOVUxMKQorKwkgIGdvdG8gb3V0X29mX21lbW9yeV8xOworKwlidWZfbWFsbG9jZWQgPSBidWY7CisrICAgICAgfQorKworKyAgICBpZiAocmVzdWx0YnVmICE9IE5VTEwpCisrICAgICAgeworKwlyZXN1bHQgPSByZXN1bHRidWY7CisrCWFsbG9jYXRlZCA9ICpsZW5ndGhwOworKyAgICAgIH0KKysgICAgZWxzZQorKyAgICAgIHsKKysJcmVzdWx0ID0gTlVMTDsKKysJYWxsb2NhdGVkID0gMDsKKysgICAgICB9CisrICAgIGxlbmd0aCA9IDA7CisrICAgIC8qIEludmFyaWFudHM6CisrICAgICAgIHJlc3VsdCBpcyBlaXRoZXIgPT0gcmVzdWx0YnVmIG9yID09IE5VTEwgb3IgbWFsbG9jLWFsbG9jYXRlZC4KKysgICAgICAgSWYgbGVuZ3RoID4gMCwgdGhlbiByZXN1bHQgIT0gTlVMTC4gICovCisrCisrICAgIC8qIEVuc3VyZXMgdGhhdCBhbGxvY2F0ZWQgPj0gbmVlZGVkLiAgQWJvcnRzIHRocm91Z2ggYSBqdW1wIHRvCisrICAgICAgIG91dF9vZl9tZW1vcnkgaWYgbmVlZGVkIGlzIFNJWkVfTUFYIG9yIG90aGVyd2lzZSB0b28gYmlnLiAgKi8KKysjZGVmaW5lIEVOU1VSRV9BTExPQ0FUSU9OKG5lZWRlZCkgXAorKyAgICBpZiAoKG5lZWRlZCkgPiBhbGxvY2F0ZWQpCQkJCQkJICAgICBcCisrICAgICAgewkJCQkJCQkJCSAgICAgXAorKwlzaXplX3QgbWVtb3J5X3NpemU7CQkJCQkJICAgICBcCisrCUNIQVJfVCAqbWVtb3J5OwkJCQkJCQkgICAgIFwKKysJCQkJCQkJCQkgICAgIFwKKysJYWxsb2NhdGVkID0gKGFsbG9jYXRlZCA+IDAgPyB4dGltZXMgKGFsbG9jYXRlZCwgMikgOiAxMik7CSAgICAgXAorKwlpZiAoKG5lZWRlZCkgPiBhbGxvY2F0ZWQpCQkJCQkgICAgIFwKKysJICBhbGxvY2F0ZWQgPSAobmVlZGVkKTsJCQkJCQkgICAgIFwKKysJbWVtb3J5X3NpemUgPSB4dGltZXMgKGFsbG9jYXRlZCwgc2l6ZW9mIChDSEFSX1QpKTsJCSAgICAgXAorKwlpZiAoc2l6ZV9vdmVyZmxvd19wIChtZW1vcnlfc2l6ZSkpCQkJCSAgICAgXAorKwkgIGdvdG8gb3V0X29mX21lbW9yeTsJCQkJCQkgICAgIFwKKysJaWYgKHJlc3VsdCA9PSByZXN1bHRidWYgfHwgcmVzdWx0ID09IE5VTEwpCQkJICAgICBcCisrCSAgbWVtb3J5ID0gKENIQVJfVCAqKSBtYWxsb2MgKG1lbW9yeV9zaXplKTsJCQkgICAgIFwKKysJZWxzZQkJCQkJCQkJICAgICBcCisrCSAgbWVtb3J5ID0gKENIQVJfVCAqKSByZWFsbG9jIChyZXN1bHQsIG1lbW9yeV9zaXplKTsJCSAgICAgXAorKwlpZiAobWVtb3J5ID09IE5VTEwpCQkJCQkJICAgICBcCisrCSAgZ290byBvdXRfb2ZfbWVtb3J5OwkJCQkJCSAgICAgXAorKwlpZiAocmVzdWx0ID09IHJlc3VsdGJ1ZiAmJiBsZW5ndGggPiAwKQkJCQkgICAgIFwKKysJICBtZW1jcHkgKG1lbW9yeSwgcmVzdWx0LCBsZW5ndGggKiBzaXplb2YgKENIQVJfVCkpOwkJICAgICBcCisrCXJlc3VsdCA9IG1lbW9yeTsJCQkJCQkgICAgIFwKKysgICAgICB9CisrCisrICAgIGZvciAoY3AgPSBmb3JtYXQsIGkgPSAwLCBkcCA9ICZkLmRpclswXTsgOyBjcCA9IGRwLT5kaXJfZW5kLCBpKyssIGRwKyspCisrICAgICAgeworKwlpZiAoY3AgIT0gZHAtPmRpcl9zdGFydCkKKysJICB7CisrCSAgICBzaXplX3QgbiA9IGRwLT5kaXJfc3RhcnQgLSBjcDsKKysJICAgIHNpemVfdCBhdWdtZW50ZWRfbGVuZ3RoID0geHN1bSAobGVuZ3RoLCBuKTsKKysKKysJICAgIEVOU1VSRV9BTExPQ0FUSU9OIChhdWdtZW50ZWRfbGVuZ3RoKTsKKysJICAgIG1lbWNweSAocmVzdWx0ICsgbGVuZ3RoLCBjcCwgbiAqIHNpemVvZiAoQ0hBUl9UKSk7CisrCSAgICBsZW5ndGggPSBhdWdtZW50ZWRfbGVuZ3RoOworKwkgIH0KKysJaWYgKGkgPT0gZC5jb3VudCkKKysJICBicmVhazsKKysKKysJLyogRXhlY3V0ZSBhIHNpbmdsZSBkaXJlY3RpdmUuICAqLworKwlpZiAoZHAtPmNvbnZlcnNpb24gPT0gJyUnKQorKwkgIHsKKysJICAgIHNpemVfdCBhdWdtZW50ZWRfbGVuZ3RoOworKworKwkgICAgaWYgKCEoZHAtPmFyZ19pbmRleCA9PSBBUkdfTk9ORSkpCisrCSAgICAgIGFib3J0ICgpOworKwkgICAgYXVnbWVudGVkX2xlbmd0aCA9IHhzdW0gKGxlbmd0aCwgMSk7CisrCSAgICBFTlNVUkVfQUxMT0NBVElPTiAoYXVnbWVudGVkX2xlbmd0aCk7CisrCSAgICByZXN1bHRbbGVuZ3RoXSA9ICclJzsKKysJICAgIGxlbmd0aCA9IGF1Z21lbnRlZF9sZW5ndGg7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgaWYgKCEoZHAtPmFyZ19pbmRleCAhPSBBUkdfTk9ORSkpCisrCSAgICAgIGFib3J0ICgpOworKworKwkgICAgaWYgKGRwLT5jb252ZXJzaW9uID09ICduJykKKysJICAgICAgeworKwkJc3dpdGNoIChhLmFyZ1tkcC0+YXJnX2luZGV4XS50eXBlKQorKwkJICB7CisrCQkgIGNhc2UgVFlQRV9DT1VOVF9TQ0hBUl9QT0lOVEVSOgorKwkJICAgICphLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfY291bnRfc2NoYXJfcG9pbnRlciA9IGxlbmd0aDsKKysJCSAgICBicmVhazsKKysJCSAgY2FzZSBUWVBFX0NPVU5UX1NIT1JUX1BPSU5URVI6CisrCQkgICAgKmEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9jb3VudF9zaG9ydF9wb2ludGVyID0gbGVuZ3RoOworKwkJICAgIGJyZWFrOworKwkJICBjYXNlIFRZUEVfQ09VTlRfSU5UX1BPSU5URVI6CisrCQkgICAgKmEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9jb3VudF9pbnRfcG9pbnRlciA9IGxlbmd0aDsKKysJCSAgICBicmVhazsKKysJCSAgY2FzZSBUWVBFX0NPVU5UX0xPTkdJTlRfUE9JTlRFUjoKKysJCSAgICAqYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2NvdW50X2xvbmdpbnRfcG9pbnRlciA9IGxlbmd0aDsKKysJCSAgICBicmVhazsKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysJCSAgY2FzZSBUWVBFX0NPVU5UX0xPTkdMT05HSU5UX1BPSU5URVI6CisrCQkgICAgKmEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9jb3VudF9sb25nbG9uZ2ludF9wb2ludGVyID0gbGVuZ3RoOworKwkJICAgIGJyZWFrOworKyNlbmRpZgorKwkJICBkZWZhdWx0OgorKwkJICAgIGFib3J0ICgpOworKwkJICB9CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJYXJnX3R5cGUgdHlwZSA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLnR5cGU7CisrCQlDSEFSX1QgKnA7CisrCQl1bnNpZ25lZCBpbnQgcHJlZml4X2NvdW50OworKwkJaW50IHByZWZpeGVzWzJdOworKyNpZiAhVVNFX1NOUFJJTlRGCisrCQlzaXplX3QgdG1wX2xlbmd0aDsKKysJCUNIQVJfVCB0bXBidWZbNzAwXTsKKysJCUNIQVJfVCAqdG1wOworKworKwkJLyogQWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIG9mIHN1ZmZpY2llbnQgc2l6ZSBmb3IgY2FsbGluZworKwkJICAgc3ByaW50Zi4gICovCisrCQl7CisrCQkgIHNpemVfdCB3aWR0aDsKKysJCSAgc2l6ZV90IHByZWNpc2lvbjsKKysKKysJCSAgd2lkdGggPSAwOworKwkJICBpZiAoZHAtPndpZHRoX3N0YXJ0ICE9IGRwLT53aWR0aF9lbmQpCisrCQkgICAgeworKwkJICAgICAgaWYgKGRwLT53aWR0aF9hcmdfaW5kZXggIT0gQVJHX05PTkUpCisrCQkJeworKwkJCSAgaW50IGFyZzsKKysKKysJCQkgIGlmICghKGEuYXJnW2RwLT53aWR0aF9hcmdfaW5kZXhdLnR5cGUgPT0gVFlQRV9JTlQpKQorKwkJCSAgICBhYm9ydCAoKTsKKysJCQkgIGFyZyA9IGEuYXJnW2RwLT53aWR0aF9hcmdfaW5kZXhdLmEuYV9pbnQ7CisrCQkJICB3aWR0aCA9IChhcmcgPCAwID8gKHVuc2lnbmVkIGludCkgKC1hcmcpIDogYXJnKTsKKysJCQl9CisrCQkgICAgICBlbHNlCisrCQkJeworKwkJCSAgY29uc3QgQ0hBUl9UICpkaWdpdHAgPSBkcC0+d2lkdGhfc3RhcnQ7CisrCisrCQkJICBkbworKwkJCSAgICB3aWR0aCA9IHhzdW0gKHh0aW1lcyAod2lkdGgsIDEwKSwgKmRpZ2l0cCsrIC0gJzAnKTsKKysJCQkgIHdoaWxlIChkaWdpdHAgIT0gZHAtPndpZHRoX2VuZCk7CisrCQkJfQorKwkJICAgIH0KKysKKysJCSAgcHJlY2lzaW9uID0gNjsKKysJCSAgaWYgKGRwLT5wcmVjaXNpb25fc3RhcnQgIT0gZHAtPnByZWNpc2lvbl9lbmQpCisrCQkgICAgeworKwkJICAgICAgaWYgKGRwLT5wcmVjaXNpb25fYXJnX2luZGV4ICE9IEFSR19OT05FKQorKwkJCXsKKysJCQkgIGludCBhcmc7CisrCisrCQkJICBpZiAoIShhLmFyZ1tkcC0+cHJlY2lzaW9uX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCisrCQkJICAgIGFib3J0ICgpOworKwkJCSAgYXJnID0gYS5hcmdbZHAtPnByZWNpc2lvbl9hcmdfaW5kZXhdLmEuYV9pbnQ7CisrCQkJICBwcmVjaXNpb24gPSAoYXJnIDwgMCA/IDAgOiBhcmcpOworKwkJCX0KKysJCSAgICAgIGVsc2UKKysJCQl7CisrCQkJICBjb25zdCBDSEFSX1QgKmRpZ2l0cCA9IGRwLT5wcmVjaXNpb25fc3RhcnQgKyAxOworKworKwkJCSAgcHJlY2lzaW9uID0gMDsKKysJCQkgIGRvCisrCQkJICAgIHByZWNpc2lvbiA9IHhzdW0gKHh0aW1lcyAocHJlY2lzaW9uLCAxMCksICpkaWdpdHArKyAtICcwJyk7CisrCQkJICB3aGlsZSAoZGlnaXRwICE9IGRwLT5wcmVjaXNpb25fZW5kKTsKKysJCQl9CisrCQkgICAgfQorKworKwkJICBzd2l0Y2ggKGRwLT5jb252ZXJzaW9uKQorKwkJICAgIHsKKysKKysJCSAgICBjYXNlICdkJzogY2FzZSAnaSc6IGNhc2UgJ3UnOgorKyMgaWZkZWYgSEFWRV9MT05HX0xPTkcKKysJCSAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HTE9OR0lOVCkKKysJCQl0bXBfbGVuZ3RoID0KKysJCQkgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGxvbmcgbG9uZykgKiBDSEFSX0JJVAorKwkJCQkJICAqIDAuMzAxMDMgLyogYmluYXJ5IC0+IGRlY2ltYWwgKi8KKysJCQkJCSAgKiAyIC8qIGVzdGltYXRlIGZvciBGTEFHX0dST1VQICovCisrCQkJCQkgKQorKwkJCSAgKyAxIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisrCQkJICArIDE7IC8qIGFjY291bnQgZm9yIGxlYWRpbmcgc2lnbiAqLworKwkJICAgICAgZWxzZQorKyMgZW5kaWYKKysJCSAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0lOVCB8fCB0eXBlID09IFRZUEVfVUxPTkdJTlQpCisrCQkJdG1wX2xlbmd0aCA9CisrCQkJICAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBsb25nKSAqIENIQVJfQklUCisrCQkJCQkgICogMC4zMDEwMyAvKiBiaW5hcnkgLT4gZGVjaW1hbCAqLworKwkJCQkJICAqIDIgLyogZXN0aW1hdGUgZm9yIEZMQUdfR1JPVVAgKi8KKysJCQkJCSApCisrCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKysJCQkgICsgMTsgLyogYWNjb3VudCBmb3IgbGVhZGluZyBzaWduICovCisrCQkgICAgICBlbHNlCisrCQkJdG1wX2xlbmd0aCA9CisrCQkJICAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBpbnQpICogQ0hBUl9CSVQKKysJCQkJCSAgKiAwLjMwMTAzIC8qIGJpbmFyeSAtPiBkZWNpbWFsICovCisrCQkJCQkgICogMiAvKiBlc3RpbWF0ZSBmb3IgRkxBR19HUk9VUCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAxOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gKi8KKysJCSAgICAgIGJyZWFrOworKworKwkJICAgIGNhc2UgJ28nOgorKyMgaWZkZWYgSEFWRV9MT05HX0xPTkcKKysJCSAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HTE9OR0lOVCkKKysJCQl0bXBfbGVuZ3RoID0KKysJCQkgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGxvbmcgbG9uZykgKiBDSEFSX0JJVAorKwkJCQkJICAqIDAuMzMzMzM0IC8qIGJpbmFyeSAtPiBvY3RhbCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAxOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gKi8KKysJCSAgICAgIGVsc2UKKysjIGVuZGlmCisrCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HSU5UKQorKwkJCXRtcF9sZW5ndGggPQorKwkJCSAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgbG9uZykgKiBDSEFSX0JJVAorKwkJCQkJICAqIDAuMzMzMzM0IC8qIGJpbmFyeSAtPiBvY3RhbCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAxOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gKi8KKysJCSAgICAgIGVsc2UKKysJCQl0bXBfbGVuZ3RoID0KKysJCQkgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGludCkgKiBDSEFSX0JJVAorKwkJCQkJICAqIDAuMzMzMzM0IC8qIGJpbmFyeSAtPiBvY3RhbCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAxOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gKi8KKysJCSAgICAgIGJyZWFrOworKworKwkJICAgIGNhc2UgJ3gnOiBjYXNlICdYJzoKKysjIGlmZGVmIEhBVkVfTE9OR19MT05HCisrCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdMT05HSU5UIHx8IHR5cGUgPT0gVFlQRV9VTE9OR0xPTkdJTlQpCisrCQkJdG1wX2xlbmd0aCA9CisrCQkJICAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBsb25nIGxvbmcpICogQ0hBUl9CSVQKKysJCQkJCSAgKiAwLjI1IC8qIGJpbmFyeSAtPiBoZXhhZGVjaW1hbCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAyOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gb3IgYWx0ZXJuYXRlIGZvcm0gKi8KKysJCSAgICAgIGVsc2UKKysjIGVuZGlmCisrCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HSU5UKQorKwkJCXRtcF9sZW5ndGggPQorKwkJCSAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgbG9uZykgKiBDSEFSX0JJVAorKwkJCQkJICAqIDAuMjUgLyogYmluYXJ5IC0+IGhleGFkZWNpbWFsICovCisrCQkJCQkgKQorKwkJCSAgKyAxIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisrCQkJICArIDI7IC8qIGFjY291bnQgZm9yIGxlYWRpbmcgc2lnbiBvciBhbHRlcm5hdGUgZm9ybSAqLworKwkJICAgICAgZWxzZQorKwkJCXRtcF9sZW5ndGggPQorKwkJCSAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgaW50KSAqIENIQVJfQklUCisrCQkJCQkgICogMC4yNSAvKiBiaW5hcnkgLT4gaGV4YWRlY2ltYWwgKi8KKysJCQkJCSApCisrCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKysJCQkgICsgMjsgLyogYWNjb3VudCBmb3IgbGVhZGluZyBzaWduIG9yIGFsdGVybmF0ZSBmb3JtICovCisrCQkgICAgICBicmVhazsKKysKKysJCSAgICBjYXNlICdmJzogY2FzZSAnRic6CisrIyBpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCisrCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdET1VCTEUpCisrCQkJdG1wX2xlbmd0aCA9CisrCQkJICAodW5zaWduZWQgaW50KSAoTERCTF9NQVhfRVhQCisrCQkJCQkgICogMC4zMDEwMyAvKiBiaW5hcnkgLT4gZGVjaW1hbCAqLworKwkJCQkJICAqIDIgLyogZXN0aW1hdGUgZm9yIEZMQUdfR1JPVVAgKi8KKysJCQkJCSApCisrCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKysJCQkgICsgMTA7IC8qIHNpZ24sIGRlY2ltYWwgcG9pbnQgZXRjLiAqLworKwkJICAgICAgZWxzZQorKyMgZW5kaWYKKysJCQl0bXBfbGVuZ3RoID0KKysJCQkgICh1bnNpZ25lZCBpbnQpIChEQkxfTUFYX0VYUAorKwkJCQkJICAqIDAuMzAxMDMgLyogYmluYXJ5IC0+IGRlY2ltYWwgKi8KKysJCQkJCSAgKiAyIC8qIGVzdGltYXRlIGZvciBGTEFHX0dST1VQICovCisrCQkJCQkgKQorKwkJCSAgKyAxIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisrCQkJICArIDEwOyAvKiBzaWduLCBkZWNpbWFsIHBvaW50IGV0Yy4gKi8KKysJCSAgICAgIHRtcF9sZW5ndGggPSB4c3VtICh0bXBfbGVuZ3RoLCBwcmVjaXNpb24pOworKwkJICAgICAgYnJlYWs7CisrCisrCQkgICAgY2FzZSAnZSc6IGNhc2UgJ0UnOiBjYXNlICdnJzogY2FzZSAnRyc6CisrCQkgICAgY2FzZSAnYSc6IGNhc2UgJ0EnOgorKwkJICAgICAgdG1wX2xlbmd0aCA9CisrCQkJMTI7IC8qIHNpZ24sIGRlY2ltYWwgcG9pbnQsIGV4cG9uZW50IGV0Yy4gKi8KKysJCSAgICAgIHRtcF9sZW5ndGggPSB4c3VtICh0bXBfbGVuZ3RoLCBwcmVjaXNpb24pOworKwkJICAgICAgYnJlYWs7CisrCisrCQkgICAgY2FzZSAnYyc6CisrIyBpZiBkZWZpbmVkIEhBVkVfV0lOVF9UICYmICFXSURFX0NIQVJfVkVSU0lPTgorKwkJICAgICAgaWYgKHR5cGUgPT0gVFlQRV9XSURFX0NIQVIpCisrCQkJdG1wX2xlbmd0aCA9IE1CX0NVUl9NQVg7CisrCQkgICAgICBlbHNlCisrIyBlbmRpZgorKwkJCXRtcF9sZW5ndGggPSAxOworKwkJICAgICAgYnJlYWs7CisrCisrCQkgICAgY2FzZSAncyc6CisrIyBpZmRlZiBIQVZFX1dDSEFSX1QKKysJCSAgICAgIGlmICh0eXBlID09IFRZUEVfV0lERV9TVFJJTkcpCisrCQkJeworKwkJCSAgdG1wX2xlbmd0aCA9CisrCQkJICAgIGxvY2FsX3djc2xlbiAoYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3dpZGVfc3RyaW5nKTsKKysKKysjICBpZiAhV0lERV9DSEFSX1ZFUlNJT04KKysJCQkgIHRtcF9sZW5ndGggPSB4dGltZXMgKHRtcF9sZW5ndGgsIE1CX0NVUl9NQVgpOworKyMgIGVuZGlmCisrCQkJfQorKwkJICAgICAgZWxzZQorKyMgZW5kaWYKKysJCQl0bXBfbGVuZ3RoID0gc3RybGVuIChhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfc3RyaW5nKTsKKysJCSAgICAgIGJyZWFrOworKworKwkJICAgIGNhc2UgJ3AnOgorKwkJICAgICAgdG1wX2xlbmd0aCA9CisrCQkJKHVuc2lnbmVkIGludCkgKHNpemVvZiAodm9pZCAqKSAqIENIQVJfQklUCisrCQkJCQkqIDAuMjUgLyogYmluYXJ5IC0+IGhleGFkZWNpbWFsICovCisrCQkJCSAgICAgICApCisrCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKysJCQkgICsgMjsgLyogYWNjb3VudCBmb3IgbGVhZGluZyAweCAqLworKwkJICAgICAgYnJlYWs7CisrCisrCQkgICAgZGVmYXVsdDoKKysJCSAgICAgIGFib3J0ICgpOworKwkJICAgIH0KKysKKysJCSAgaWYgKHRtcF9sZW5ndGggPCB3aWR0aCkKKysJCSAgICB0bXBfbGVuZ3RoID0gd2lkdGg7CisrCisrCQkgIHRtcF9sZW5ndGggPSB4c3VtICh0bXBfbGVuZ3RoLCAxKTsgLyogYWNjb3VudCBmb3IgdHJhaWxpbmcgTlVMICovCisrCQl9CisrCisrCQlpZiAodG1wX2xlbmd0aCA8PSBzaXplb2YgKHRtcGJ1ZikgLyBzaXplb2YgKENIQVJfVCkpCisrCQkgIHRtcCA9IHRtcGJ1ZjsKKysJCWVsc2UKKysJCSAgeworKwkJICAgIHNpemVfdCB0bXBfbWVtc2l6ZSA9IHh0aW1lcyAodG1wX2xlbmd0aCwgc2l6ZW9mIChDSEFSX1QpKTsKKysKKysJCSAgICBpZiAoc2l6ZV9vdmVyZmxvd19wICh0bXBfbWVtc2l6ZSkpCisrCQkgICAgICAvKiBPdmVyZmxvdywgd291bGQgbGVhZCB0byBvdXQgb2YgbWVtb3J5LiAgKi8KKysJCSAgICAgIGdvdG8gb3V0X29mX21lbW9yeTsKKysJCSAgICB0bXAgPSAoQ0hBUl9UICopIG1hbGxvYyAodG1wX21lbXNpemUpOworKwkJICAgIGlmICh0bXAgPT0gTlVMTCkKKysJCSAgICAgIC8qIE91dCBvZiBtZW1vcnkuICAqLworKwkJICAgICAgZ290byBvdXRfb2ZfbWVtb3J5OworKwkJICB9CisrI2VuZGlmCisrCisrCQkvKiBDb25zdHJ1Y3QgdGhlIGZvcm1hdCBzdHJpbmcgZm9yIGNhbGxpbmcgc25wcmludGYgb3IKKysJCSAgIHNwcmludGYuICAqLworKwkJcCA9IGJ1ZjsKKysJCSpwKysgPSAnJSc7CisrCQlpZiAoZHAtPmZsYWdzICYgRkxBR19HUk9VUCkKKysJCSAgKnArKyA9ICdcJyc7CisrCQlpZiAoZHAtPmZsYWdzICYgRkxBR19MRUZUKQorKwkJICAqcCsrID0gJy0nOworKwkJaWYgKGRwLT5mbGFncyAmIEZMQUdfU0hPV1NJR04pCisrCQkgICpwKysgPSAnKyc7CisrCQlpZiAoZHAtPmZsYWdzICYgRkxBR19TUEFDRSkKKysJCSAgKnArKyA9ICcgJzsKKysJCWlmIChkcC0+ZmxhZ3MgJiBGTEFHX0FMVCkKKysJCSAgKnArKyA9ICcjJzsKKysJCWlmIChkcC0+ZmxhZ3MgJiBGTEFHX1pFUk8pCisrCQkgICpwKysgPSAnMCc7CisrCQlpZiAoZHAtPndpZHRoX3N0YXJ0ICE9IGRwLT53aWR0aF9lbmQpCisrCQkgIHsKKysJCSAgICBzaXplX3QgbiA9IGRwLT53aWR0aF9lbmQgLSBkcC0+d2lkdGhfc3RhcnQ7CisrCQkgICAgbWVtY3B5IChwLCBkcC0+d2lkdGhfc3RhcnQsIG4gKiBzaXplb2YgKENIQVJfVCkpOworKwkJICAgIHAgKz0gbjsKKysJCSAgfQorKwkJaWYgKGRwLT5wcmVjaXNpb25fc3RhcnQgIT0gZHAtPnByZWNpc2lvbl9lbmQpCisrCQkgIHsKKysJCSAgICBzaXplX3QgbiA9IGRwLT5wcmVjaXNpb25fZW5kIC0gZHAtPnByZWNpc2lvbl9zdGFydDsKKysJCSAgICBtZW1jcHkgKHAsIGRwLT5wcmVjaXNpb25fc3RhcnQsIG4gKiBzaXplb2YgKENIQVJfVCkpOworKwkJICAgIHAgKz0gbjsKKysJCSAgfQorKworKwkJc3dpdGNoICh0eXBlKQorKwkJICB7CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrCQkgIGNhc2UgVFlQRV9MT05HTE9OR0lOVDoKKysJCSAgY2FzZSBUWVBFX1VMT05HTE9OR0lOVDoKKysJCSAgICAqcCsrID0gJ2wnOworKwkJICAgIC8qRkFMTFRIUk9VR0gqLworKyNlbmRpZgorKwkJICBjYXNlIFRZUEVfTE9OR0lOVDoKKysJCSAgY2FzZSBUWVBFX1VMT05HSU5UOgorKyNpZmRlZiBIQVZFX1dJTlRfVAorKwkJICBjYXNlIFRZUEVfV0lERV9DSEFSOgorKyNlbmRpZgorKyNpZmRlZiBIQVZFX1dDSEFSX1QKKysJCSAgY2FzZSBUWVBFX1dJREVfU1RSSU5HOgorKyNlbmRpZgorKwkJICAgICpwKysgPSAnbCc7CisrCQkgICAgYnJlYWs7CisrI2lmZGVmIEhBVkVfTE9OR19ET1VCTEUKKysJCSAgY2FzZSBUWVBFX0xPTkdET1VCTEU6CisrCQkgICAgKnArKyA9ICdMJzsKKysJCSAgICBicmVhazsKKysjZW5kaWYKKysJCSAgZGVmYXVsdDoKKysJCSAgICBicmVhazsKKysJCSAgfQorKwkJKnAgPSBkcC0+Y29udmVyc2lvbjsKKysjaWYgVVNFX1NOUFJJTlRGCisrCQlwWzFdID0gJyUnOworKwkJcFsyXSA9ICduJzsKKysJCXBbM10gPSAnXDAnOworKyNlbHNlCisrCQlwWzFdID0gJ1wwJzsKKysjZW5kaWYKKysKKysJCS8qIENvbnN0cnVjdCB0aGUgYXJndW1lbnRzIGZvciBjYWxsaW5nIHNucHJpbnRmIG9yIHNwcmludGYuICAqLworKwkJcHJlZml4X2NvdW50ID0gMDsKKysJCWlmIChkcC0+d2lkdGhfYXJnX2luZGV4ICE9IEFSR19OT05FKQorKwkJICB7CisrCQkgICAgaWYgKCEoYS5hcmdbZHAtPndpZHRoX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCisrCQkgICAgICBhYm9ydCAoKTsKKysJCSAgICBwcmVmaXhlc1twcmVmaXhfY291bnQrK10gPSBhLmFyZ1tkcC0+d2lkdGhfYXJnX2luZGV4XS5hLmFfaW50OworKwkJICB9CisrCQlpZiAoZHAtPnByZWNpc2lvbl9hcmdfaW5kZXggIT0gQVJHX05PTkUpCisrCQkgIHsKKysJCSAgICBpZiAoIShhLmFyZ1tkcC0+cHJlY2lzaW9uX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCisrCQkgICAgICBhYm9ydCAoKTsKKysJCSAgICBwcmVmaXhlc1twcmVmaXhfY291bnQrK10gPSBhLmFyZ1tkcC0+cHJlY2lzaW9uX2FyZ19pbmRleF0uYS5hX2ludDsKKysJCSAgfQorKworKyNpZiBVU0VfU05QUklOVEYKKysJCS8qIFByZXBhcmUgY2hlY2tpbmcgd2hldGhlciBzbnByaW50ZiByZXR1cm5zIHRoZSBjb3VudAorKwkJICAgdmlhICVuLiAgKi8KKysJCUVOU1VSRV9BTExPQ0FUSU9OICh4c3VtIChsZW5ndGgsIDEpKTsKKysJCXJlc3VsdFtsZW5ndGhdID0gJ1wwJzsKKysjZW5kaWYKKysKKysJCWZvciAoOzspCisrCQkgIHsKKysJCSAgICBzaXplX3QgbWF4bGVuOworKwkJICAgIGludCBjb3VudDsKKysJCSAgICBpbnQgcmV0Y291bnQ7CisrCisrCQkgICAgbWF4bGVuID0gYWxsb2NhdGVkIC0gbGVuZ3RoOworKwkJICAgIGNvdW50ID0gLTE7CisrCQkgICAgcmV0Y291bnQgPSAwOworKworKyNpZiBVU0VfU05QUklOVEYKKysjIGRlZmluZSBTTlBSSU5URl9CVUYoYXJnKSBcCisrCQkgICAgc3dpdGNoIChwcmVmaXhfY291bnQpCQkJCSAgICBcCisrCQkgICAgICB7CQkJCQkJCSAgICBcCisrCQkgICAgICBjYXNlIDA6CQkJCQkJICAgIFwKKysJCQlyZXRjb3VudCA9IFNOUFJJTlRGIChyZXN1bHQgKyBsZW5ndGgsIG1heGxlbiwgYnVmLCAgXAorKwkJCQkJICAgICBhcmcsICZjb3VudCk7CQkgICAgXAorKwkJCWJyZWFrOwkJCQkJCSAgICBcCisrCQkgICAgICBjYXNlIDE6CQkJCQkJICAgIFwKKysJCQlyZXRjb3VudCA9IFNOUFJJTlRGIChyZXN1bHQgKyBsZW5ndGgsIG1heGxlbiwgYnVmLCAgXAorKwkJCQkJICAgICBwcmVmaXhlc1swXSwgYXJnLCAmY291bnQpOwkgICAgXAorKwkJCWJyZWFrOwkJCQkJCSAgICBcCisrCQkgICAgICBjYXNlIDI6CQkJCQkJICAgIFwKKysJCQlyZXRjb3VudCA9IFNOUFJJTlRGIChyZXN1bHQgKyBsZW5ndGgsIG1heGxlbiwgYnVmLCAgXAorKwkJCQkJICAgICBwcmVmaXhlc1swXSwgcHJlZml4ZXNbMV0sIGFyZywgXAorKwkJCQkJICAgICAmY291bnQpOwkJCSAgICBcCisrCQkJYnJlYWs7CQkJCQkJICAgIFwKKysJCSAgICAgIGRlZmF1bHQ6CQkJCQkJICAgIFwKKysJCQlhYm9ydCAoKTsJCQkJCSAgICBcCisrCQkgICAgICB9CisrI2Vsc2UKKysjIGRlZmluZSBTTlBSSU5URl9CVUYoYXJnKSBcCisrCQkgICAgc3dpdGNoIChwcmVmaXhfY291bnQpCQkJCSAgICBcCisrCQkgICAgICB7CQkJCQkJCSAgICBcCisrCQkgICAgICBjYXNlIDA6CQkJCQkJICAgIFwKKysJCQljb3VudCA9IHNwcmludGYgKHRtcCwgYnVmLCBhcmcpOwkJICAgIFwKKysJCQlicmVhazsJCQkJCQkgICAgXAorKwkJICAgICAgY2FzZSAxOgkJCQkJCSAgICBcCisrCQkJY291bnQgPSBzcHJpbnRmICh0bXAsIGJ1ZiwgcHJlZml4ZXNbMF0sIGFyZyk7CSAgICBcCisrCQkJYnJlYWs7CQkJCQkJICAgIFwKKysJCSAgICAgIGNhc2UgMjoJCQkJCQkgICAgXAorKwkJCWNvdW50ID0gc3ByaW50ZiAodG1wLCBidWYsIHByZWZpeGVzWzBdLCBwcmVmaXhlc1sxXSxcCisrCQkJCQkgYXJnKTsJCQkJICAgIFwKKysJCQlicmVhazsJCQkJCQkgICAgXAorKwkJICAgICAgZGVmYXVsdDoJCQkJCQkgICAgXAorKwkJCWFib3J0ICgpOwkJCQkJICAgIFwKKysJCSAgICAgIH0KKysjZW5kaWYKKysKKysJCSAgICBzd2l0Y2ggKHR5cGUpCisrCQkgICAgICB7CisrCQkgICAgICBjYXNlIFRZUEVfU0NIQVI6CisrCQkJeworKwkJCSAgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9zY2hhcjsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrCQkgICAgICBjYXNlIFRZUEVfVUNIQVI6CisrCQkJeworKwkJCSAgdW5zaWduZWQgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV91Y2hhcjsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrCQkgICAgICBjYXNlIFRZUEVfU0hPUlQ6CisrCQkJeworKwkJCSAgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9zaG9ydDsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrCQkgICAgICBjYXNlIFRZUEVfVVNIT1JUOgorKwkJCXsKKysJCQkgIHVuc2lnbmVkIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfdXNob3J0OworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysJCSAgICAgIGNhc2UgVFlQRV9JTlQ6CisrCQkJeworKwkJCSAgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9pbnQ7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKwkJICAgICAgY2FzZSBUWVBFX1VJTlQ6CisrCQkJeworKwkJCSAgdW5zaWduZWQgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV91aW50OworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysJCSAgICAgIGNhc2UgVFlQRV9MT05HSU5UOgorKwkJCXsKKysJCQkgIGxvbmcgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9sb25naW50OworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysJCSAgICAgIGNhc2UgVFlQRV9VTE9OR0lOVDoKKysJCQl7CisrCQkJICB1bnNpZ25lZCBsb25nIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfdWxvbmdpbnQ7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKwkJICAgICAgY2FzZSBUWVBFX0xPTkdMT05HSU5UOgorKwkJCXsKKysJCQkgIGxvbmcgbG9uZyBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2xvbmdsb25naW50OworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysJCSAgICAgIGNhc2UgVFlQRV9VTE9OR0xPTkdJTlQ6CisrCQkJeworKwkJCSAgdW5zaWduZWQgbG9uZyBsb25nIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfdWxvbmdsb25naW50OworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysjZW5kaWYKKysJCSAgICAgIGNhc2UgVFlQRV9ET1VCTEU6CisrCQkJeworKwkJCSAgZG91YmxlIGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9kb3VibGU7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKyNpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCisrCQkgICAgICBjYXNlIFRZUEVfTE9OR0RPVUJMRToKKysJCQl7CisrCQkJICBsb25nIGRvdWJsZSBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfbG9uZ2RvdWJsZTsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrI2VuZGlmCisrCQkgICAgICBjYXNlIFRZUEVfQ0hBUjoKKysJCQl7CisrCQkJICBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2NoYXI7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKyNpZmRlZiBIQVZFX1dJTlRfVAorKwkJICAgICAgY2FzZSBUWVBFX1dJREVfQ0hBUjoKKysJCQl7CisrCQkJICB3aW50X3QgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3dpZGVfY2hhcjsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrI2VuZGlmCisrCQkgICAgICBjYXNlIFRZUEVfU1RSSU5HOgorKwkJCXsKKysJCQkgIGNvbnN0IGNoYXIgKmFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9zdHJpbmc7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKyNpZmRlZiBIQVZFX1dDSEFSX1QKKysJCSAgICAgIGNhc2UgVFlQRV9XSURFX1NUUklORzoKKysJCQl7CisrCQkJICBjb25zdCB3Y2hhcl90ICphcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfd2lkZV9zdHJpbmc7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKyNlbmRpZgorKwkJICAgICAgY2FzZSBUWVBFX1BPSU5URVI6CisrCQkJeworKwkJCSAgdm9pZCAqYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3BvaW50ZXI7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKwkJICAgICAgZGVmYXVsdDoKKysJCQlhYm9ydCAoKTsKKysJCSAgICAgIH0KKysKKysjaWYgVVNFX1NOUFJJTlRGCisrCQkgICAgLyogUG9ydGFiaWxpdHk6IE5vdCBhbGwgaW1wbGVtZW50YXRpb25zIG9mIHNucHJpbnRmKCkKKysJCSAgICAgICBhcmUgSVNPIEMgOTkgY29tcGxpYW50LiAgRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YKKysJCSAgICAgICBieXRlcyB0aGF0IHNucHJpbnRmKCkgaGFzIHByb2R1Y2VkIG9yIHdvdWxkIGhhdmUKKysJCSAgICAgICBwcm9kdWNlZC4gICovCisrCQkgICAgaWYgKGNvdW50ID49IDApCisrCQkgICAgICB7CisrCQkJLyogVmVyaWZ5IHRoYXQgc25wcmludGYoKSBoYXMgTlVMLXRlcm1pbmF0ZWQgaXRzCisrCQkJICAgcmVzdWx0LiAgKi8KKysJCQlpZiAoY291bnQgPCBtYXhsZW4gJiYgcmVzdWx0W2xlbmd0aCArIGNvdW50XSAhPSAnXDAnKQorKwkJCSAgYWJvcnQgKCk7CisrCQkJLyogUG9ydGFiaWxpdHkgaGFjay4gICovCisrCQkJaWYgKHJldGNvdW50ID4gY291bnQpCisrCQkJICBjb3VudCA9IHJldGNvdW50OworKwkJICAgICAgfQorKwkJICAgIGVsc2UKKysJCSAgICAgIHsKKysJCQkvKiBzbnByaW50ZigpIGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgJyVuJworKwkJCSAgIGRpcmVjdGl2ZS4gICovCisrCQkJaWYgKHBbMV0gIT0gJ1wwJykKKysJCQkgIHsKKysJCQkgICAgLyogRG9uJ3QgdXNlIHRoZSAnJW4nIGRpcmVjdGl2ZTsgaW5zdGVhZCwgbG9vaworKwkJCSAgICAgICBhdCB0aGUgc25wcmludGYoKSByZXR1cm4gdmFsdWUuICAqLworKwkJCSAgICBwWzFdID0gJ1wwJzsKKysJCQkgICAgY29udGludWU7CisrCQkJICB9CisrCQkJZWxzZQorKwkJCSAgeworKwkJCSAgICAvKiBMb29rIGF0IHRoZSBzbnByaW50ZigpIHJldHVybiB2YWx1ZS4gICovCisrCQkJICAgIGlmIChyZXRjb3VudCA8IDApCisrCQkJICAgICAgeworKwkJCQkvKiBIUC1VWCAxMC4yMCBzbnByaW50ZigpIGlzIGRvdWJseSBkZWZpY2llbnQ6CisrCQkJCSAgIEl0IGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgJyVuJyBkaXJlY3RpdmUsCisrCQkJCSAgICphbmQqIGl0IHJldHVybnMgLTEgKHJhdGhlciB0aGFuIHRoZSBsZW5ndGgKKysJCQkJICAgdGhhdCB3b3VsZCBoYXZlIGJlZW4gcmVxdWlyZWQpIHdoZW4gdGhlCisrCQkJCSAgIGJ1ZmZlciBpcyB0b28gc21hbGwuICAqLworKwkJCQlzaXplX3QgYmlnZ2VyX25lZWQgPQorKwkJCQkgIHhzdW0gKHh0aW1lcyAoYWxsb2NhdGVkLCAyKSwgMTIpOworKwkJCQlFTlNVUkVfQUxMT0NBVElPTiAoYmlnZ2VyX25lZWQpOworKwkJCQljb250aW51ZTsKKysJCQkgICAgICB9CisrCQkJICAgIGVsc2UKKysJCQkgICAgICBjb3VudCA9IHJldGNvdW50OworKwkJCSAgfQorKwkJICAgICAgfQorKyNlbmRpZgorKworKwkJICAgIC8qIEF0dGVtcHQgdG8gaGFuZGxlIGZhaWx1cmUuICAqLworKwkJICAgIGlmIChjb3VudCA8IDApCisrCQkgICAgICB7CisrCQkJaWYgKCEocmVzdWx0ID09IHJlc3VsdGJ1ZiB8fCByZXN1bHQgPT0gTlVMTCkpCisrCQkJICBmcmVlIChyZXN1bHQpOworKwkJCWlmIChidWZfbWFsbG9jZWQgIT0gTlVMTCkKKysJCQkgIGZyZWUgKGJ1Zl9tYWxsb2NlZCk7CisrCQkJQ0xFQU5VUCAoKTsKKysJCQllcnJubyA9IEVJTlZBTDsKKysJCQlyZXR1cm4gTlVMTDsKKysJCSAgICAgIH0KKysKKysjaWYgIVVTRV9TTlBSSU5URgorKwkJICAgIGlmIChjb3VudCA+PSB0bXBfbGVuZ3RoKQorKwkJICAgICAgLyogdG1wX2xlbmd0aCB3YXMgaW5jb3JyZWN0bHkgY2FsY3VsYXRlZCAtIGZpeCB0aGUKKysJCQkgY29kZSBhYm92ZSEgICovCisrCQkgICAgICBhYm9ydCAoKTsKKysjZW5kaWYKKysKKysJCSAgICAvKiBNYWtlIHJvb20gZm9yIHRoZSByZXN1bHQuICAqLworKwkJICAgIGlmIChjb3VudCA+PSBtYXhsZW4pCisrCQkgICAgICB7CisrCQkJLyogTmVlZCBhdCBsZWFzdCBjb3VudCBieXRlcy4gIEJ1dCBhbGxvY2F0ZQorKwkJCSAgIHByb3BvcnRpb25hbGx5LCB0byBhdm9pZCBsb29waW5nIGV0ZXJuYWxseSBpZgorKwkJCSAgIHNucHJpbnRmKCkgcmVwb3J0cyBhIHRvbyBzbWFsbCBjb3VudC4gICovCisrCQkJc2l6ZV90IG4gPQorKwkJCSAgeG1heCAoeHN1bSAobGVuZ3RoLCBjb3VudCksIHh0aW1lcyAoYWxsb2NhdGVkLCAyKSk7CisrCisrCQkJRU5TVVJFX0FMTE9DQVRJT04gKG4pOworKyNpZiBVU0VfU05QUklOVEYKKysJCQljb250aW51ZTsKKysjZW5kaWYKKysJCSAgICAgIH0KKysKKysjaWYgVVNFX1NOUFJJTlRGCisrCQkgICAgLyogVGhlIHNucHJpbnRmKCkgcmVzdWx0IGRpZCBmaXQuICAqLworKyNlbHNlCisrCQkgICAgLyogQXBwZW5kIHRoZSBzcHJpbnRmKCkgcmVzdWx0LiAgKi8KKysJCSAgICBtZW1jcHkgKHJlc3VsdCArIGxlbmd0aCwgdG1wLCBjb3VudCAqIHNpemVvZiAoQ0hBUl9UKSk7CisrCQkgICAgaWYgKHRtcCAhPSB0bXBidWYpCisrCQkgICAgICBmcmVlICh0bXApOworKyNlbmRpZgorKworKwkJICAgIGxlbmd0aCArPSBjb3VudDsKKysJCSAgICBicmVhazsKKysJCSAgfQorKwkgICAgICB9CisrCSAgfQorKyAgICAgIH0KKysKKysgICAgLyogQWRkIHRoZSBmaW5hbCBOVUwuICAqLworKyAgICBFTlNVUkVfQUxMT0NBVElPTiAoeHN1bSAobGVuZ3RoLCAxKSk7CisrICAgIHJlc3VsdFtsZW5ndGhdID0gJ1wwJzsKKysKKysgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRidWYgJiYgbGVuZ3RoICsgMSA8IGFsbG9jYXRlZCkKKysgICAgICB7CisrCS8qIFNocmluayB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpZiBwb3NzaWJsZS4gICovCisrCUNIQVJfVCAqbWVtb3J5OworKworKwltZW1vcnkgPSAoQ0hBUl9UICopIHJlYWxsb2MgKHJlc3VsdCwgKGxlbmd0aCArIDEpICogc2l6ZW9mIChDSEFSX1QpKTsKKysJaWYgKG1lbW9yeSAhPSBOVUxMKQorKwkgIHJlc3VsdCA9IG1lbW9yeTsKKysgICAgICB9CisrCisrICAgIGlmIChidWZfbWFsbG9jZWQgIT0gTlVMTCkKKysgICAgICBmcmVlIChidWZfbWFsbG9jZWQpOworKyAgICBDTEVBTlVQICgpOworKyAgICAqbGVuZ3RocCA9IGxlbmd0aDsKKysgICAgcmV0dXJuIHJlc3VsdDsKKysKKysgIG91dF9vZl9tZW1vcnk6CisrICAgIGlmICghKHJlc3VsdCA9PSByZXN1bHRidWYgfHwgcmVzdWx0ID09IE5VTEwpKQorKyAgICAgIGZyZWUgKHJlc3VsdCk7CisrICAgIGlmIChidWZfbWFsbG9jZWQgIT0gTlVMTCkKKysgICAgICBmcmVlIChidWZfbWFsbG9jZWQpOworKyAgb3V0X29mX21lbW9yeV8xOgorKyAgICBDTEVBTlVQICgpOworKyAgICBlcnJubyA9IEVOT01FTTsKKysgICAgcmV0dXJuIE5VTEw7CisrICB9CisrfQorKworKyN1bmRlZiBTTlBSSU5URgorKyN1bmRlZiBVU0VfU05QUklOVEYKKysjdW5kZWYgUFJJTlRGX1BBUlNFCisrI3VuZGVmIERJUkVDVElWRVMKKysjdW5kZWYgRElSRUNUSVZFCisrI3VuZGVmIENIQVJfVAorKyN1bmRlZiBWQVNOUFJJTlRGCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvdmFzbnByaW50Zi5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3Zhc25wcmludGYuaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjY2NzcwMDY2NCAtMDQwMAorQEAgLTAsMCArMSw2MSBAQAorKy8qIHZzcHJpbnRmIHdpdGggYXV0b21hdGljIG1lbW9yeSBhbGxvY2F0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZuZGVmIF9WQVNOUFJJTlRGX0gKKysjZGVmaW5lIF9WQVNOUFJJTlRGX0gKKysKKysvKiBHZXQgdmFfbGlzdC4gICovCisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorKworKy8qIEdldCBzaXplX3QuICAqLworKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysKKysjaWZuZGVmIF9fYXR0cmlidXRlX18KKysvKiBUaGlzIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLiAgKi8KKysjIGlmIF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpIHx8IF9fU1RSSUNUX0FOU0lfXworKyMgIGRlZmluZSBfX2F0dHJpYnV0ZV9fKFNwZWMpIC8qIGVtcHR5ICovCisrIyBlbmRpZgorKy8qIFRoZSBfXy1wcm90ZWN0ZWQgdmFyaWFudHMgb2YgYGZvcm1hdCcgYW5kIGBwcmludGYnIGF0dHJpYnV0ZXMKKysgICBhcmUgYWNjZXB0ZWQgYnkgZ2NjIHZlcnNpb25zIDIuNi40IChlZmZlY3RpdmVseSAyLjcpIGFuZCBsYXRlci4gICovCisrIyBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA3KQorKyMgIGRlZmluZSBfX2Zvcm1hdF9fIGZvcm1hdAorKyMgIGRlZmluZSBfX3ByaW50Zl9fIHByaW50ZgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysjaWZkZWYJX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKysvKiBXcml0ZSBmb3JtYXR0ZWQgb3V0cHV0IHRvIGEgc3RyaW5nIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB3aXRoIG1hbGxvYygpLgorKyAgIFlvdSBjYW4gcGFzcyBhIHByZWFsbG9jYXRlZCBidWZmZXIgZm9yIHRoZSByZXN1bHQgaW4gUkVTVUxUQlVGIGFuZCBpdHMKKysgICBzaXplIGluICpMRU5HVEhQOyBvdGhlcndpc2UgeW91IHBhc3MgUkVTVUxUQlVGID0gTlVMTC4KKysgICBJZiBzdWNjZXNzZnVsLCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIHN0cmluZyAodGhpcyBtYXkgYmUgPSBSRVNVTFRCVUYKKysgICBpZiBubyBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIHdhcyBuZWNlc3NhcnkpIGFuZCBzZXQgKkxFTkdUSFAgdG8gdGhlCisrICAgbnVtYmVyIG9mIHJlc3VsdGluZyBieXRlcywgZXhjbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuICBVcG9uIGVycm9yLCBzZXQKKysgICBlcnJubyBhbmQgcmV0dXJuIE5VTEwuICAqLworK2V4dGVybiBjaGFyICogYXNucHJpbnRmIChjaGFyICpyZXN1bHRidWYsIHNpemVfdCAqbGVuZ3RocCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisrICAgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOworK2V4dGVybiBjaGFyICogdmFzbnByaW50ZiAoY2hhciAqcmVzdWx0YnVmLCBzaXplX3QgKmxlbmd0aHAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorKyAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKKysKKysjaWZkZWYJX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrCisrI2VuZGlmIC8qIF9WQVNOUFJJTlRGX0ggKi8KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC92YXNud3ByaW50Zi5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3Zhc253cHJpbnRmLmgJMjAwNC0wOS0xMiAxNDo0MDozNC42NzM2OTk3NTIgLTA0MDAKK0BAIC0wLDAgKzEsNDYgQEAKKysvKiB2c3dwcmludGYgd2l0aCBhdXRvbWF0aWMgbWVtb3J5IGFsbG9jYXRpb24uCisrICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX1ZBU05XUFJJTlRGX0gKKysjZGVmaW5lIF9WQVNOV1BSSU5URl9ICisrCisrLyogR2V0IHZhX2xpc3QuICAqLworKyNpbmNsdWRlIDxzdGRhcmcuaD4KKysKKysvKiBHZXQgd2NoYXJfdCwgc2l6ZV90LiAgKi8KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrI2lmZGVmCV9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIiB7CisrI2VuZGlmCisrCisrLyogV3JpdGUgZm9ybWF0dGVkIG91dHB1dCB0byBhIHN0cmluZyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgd2l0aCBtYWxsb2MoKS4KKysgICBZb3UgY2FuIHBhc3MgYSBwcmVhbGxvY2F0ZWQgYnVmZmVyIGZvciB0aGUgcmVzdWx0IGluIFJFU1VMVEJVRiBhbmQgaXRzCisrICAgc2l6ZSBpbiAqTEVOR1RIUDsgb3RoZXJ3aXNlIHlvdSBwYXNzIFJFU1VMVEJVRiA9IE5VTEwuCisrICAgSWYgc3VjY2Vzc2Z1bCwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBzdHJpbmcgKHRoaXMgbWF5IGJlID0gUkVTVUxUQlVGCisrICAgaWYgbm8gZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiB3YXMgbmVjZXNzYXJ5KSBhbmQgc2V0ICpMRU5HVEhQIHRvIHRoZQorKyAgIG51bWJlciBvZiByZXN1bHRpbmcgYnl0ZXMsIGV4Y2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgVXBvbiBlcnJvciwgc2V0CisrICAgZXJybm8gYW5kIHJldHVybiBOVUxMLiAgKi8KKytleHRlcm4gd2NoYXJfdCAqIGFzbndwcmludGYgKHdjaGFyX3QgKnJlc3VsdGJ1Ziwgc2l6ZV90ICpsZW5ndGhwLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsIC4uLik7CisrZXh0ZXJuIHdjaGFyX3QgKiB2YXNud3ByaW50ZiAod2NoYXJfdCAqcmVzdWx0YnVmLCBzaXplX3QgKmxlbmd0aHAsIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKTsKKysKKysjaWZkZWYJX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrCisrI2VuZGlmIC8qIF9WQVNOV1BSSU5URl9IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvVkVSU0lPTgkxOTk4LTA0LTI2IDA5OjIyOjM3LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9WRVJTSU9OCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjc5Njk4ODQwIC0wNDAwCitAQCAtMSArMSBAQAorLUdOVSBnZXR0ZXh0IGxpYnJhcnkgZnJvbSBnZXR0ZXh0LTAuMTAuMzIKKytHTlUgZ2V0dGV4dCBsaWJyYXJ5IGZyb20gZ2V0dGV4dC0wLjE0LjEKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC93cHJpbnRmLXBhcnNlLmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvd3ByaW50Zi1wYXJzZS5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjk1Njk2NDA4IC0wNDAwCitAQCAtMCwwICsxLDc1IEBACisrLyogUGFyc2UgcHJpbnRmIGZvcm1hdCBzdHJpbmcuCisrICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX1dQUklOVEZfUEFSU0VfSAorKyNkZWZpbmUgX1dQUklOVEZfUEFSU0VfSAorKworKyNpbmNsdWRlICJwcmludGYtYXJncy5oIgorKworKworKy8qIEZsYWdzICovCisrI2RlZmluZSBGTEFHX0dST1VQCSAxCS8qICcgZmxhZyAqLworKyNkZWZpbmUgRkxBR19MRUZUCSAyCS8qIC0gZmxhZyAqLworKyNkZWZpbmUgRkxBR19TSE9XU0lHTgkgNAkvKiArIGZsYWcgKi8KKysjZGVmaW5lIEZMQUdfU1BBQ0UJIDgJLyogc3BhY2UgZmxhZyAqLworKyNkZWZpbmUgRkxBR19BTFQJMTYJLyogIyBmbGFnICovCisrI2RlZmluZSBGTEFHX1pFUk8JMzIKKysKKysvKiBhcmdfaW5kZXggdmFsdWUgaW5kaWNhdGluZyB0aGF0IG5vIGFyZ3VtZW50IGlzIGNvbnN1bWVkLiAgKi8KKysjZGVmaW5lIEFSR19OT05FCSh+KHNpemVfdCkwKQorKworKy8qIEEgcGFyc2VkIGRpcmVjdGl2ZS4gICovCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBjb25zdCB3Y2hhcl90KiBkaXJfc3RhcnQ7CisrICBjb25zdCB3Y2hhcl90KiBkaXJfZW5kOworKyAgaW50IGZsYWdzOworKyAgY29uc3Qgd2NoYXJfdCogd2lkdGhfc3RhcnQ7CisrICBjb25zdCB3Y2hhcl90KiB3aWR0aF9lbmQ7CisrICBzaXplX3Qgd2lkdGhfYXJnX2luZGV4OworKyAgY29uc3Qgd2NoYXJfdCogcHJlY2lzaW9uX3N0YXJ0OworKyAgY29uc3Qgd2NoYXJfdCogcHJlY2lzaW9uX2VuZDsKKysgIHNpemVfdCBwcmVjaXNpb25fYXJnX2luZGV4OworKyAgd2NoYXJfdCBjb252ZXJzaW9uOyAvKiBkIGkgbyB1IHggWCBmIGUgRSBnIEcgYyBzIHAgbiBVICUgYnV0IG5vdCBDIFMgKi8KKysgIHNpemVfdCBhcmdfaW5kZXg7CisrfQorK3djaGFyX3RfZGlyZWN0aXZlOworKworKy8qIEEgcGFyc2VkIGZvcm1hdCBzdHJpbmcuICAqLworK3R5cGVkZWYgc3RydWN0CisreworKyAgc2l6ZV90IGNvdW50OworKyAgd2NoYXJfdF9kaXJlY3RpdmUgKmRpcjsKKysgIHNpemVfdCBtYXhfd2lkdGhfbGVuZ3RoOworKyAgc2l6ZV90IG1heF9wcmVjaXNpb25fbGVuZ3RoOworK30KKyt3Y2hhcl90X2RpcmVjdGl2ZXM7CisrCisrCisrLyogUGFyc2VzIHRoZSBmb3JtYXQgc3RyaW5nLiAgRmlsbHMgaW4gdGhlIG51bWJlciBOIG9mIGRpcmVjdGl2ZXMsIGFuZCBmaWxscworKyAgIGluIGRpcmVjdGl2ZXNbMF0sIC4uLiwgZGlyZWN0aXZlc1tOLTFdLCBhbmQgc2V0cyBkaXJlY3RpdmVzW05dLmRpcl9zdGFydAorKyAgIHRvIHRoZSBlbmQgb2YgdGhlIGZvcm1hdCBzdHJpbmcuICBBbHNvIGZpbGxzIGluIHRoZSBhcmdfdHlwZSBmaWVsZHMgb2YgdGhlCisrICAgYXJndW1lbnRzIGFuZCB0aGUgbmVlZGVkIGNvdW50IG9mIGFyZ3VtZW50cy4gICovCisrI2lmZGVmIFNUQVRJQworK1NUQVRJQworKyNlbHNlCisrZXh0ZXJuCisrI2VuZGlmCisraW50IHdwcmludGZfcGFyc2UgKGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgd2NoYXJfdF9kaXJlY3RpdmVzICpkLCBhcmd1bWVudHMgKmEpOworKworKyNlbmRpZiAvKiBfV1BSSU5URl9QQVJTRV9IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwveG9wZW4tbXNnLnNlZAkxOTk4LTA0LTI2IDA5OjIwOjUyLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC94b3Blbi1tc2cuc2VkCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCitAQCAtMSwxMDQgKzAsMCBAQAorLSMgcG8ybXNnLnNlZCAtIENvbnZlcnQgVW5pZm9ydW0gc3R5bGUgLnBvIGZpbGUgdG8gWC9PcGVuIHN0eWxlIC5tc2cgZmlsZQorLSMgQ29weXJpZ2h0IChDKSAxOTk1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLSMgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+LCAxOTk1LgorLSMKKy0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSMgYW55IGxhdGVyIHZlcnNpb24uCistIworLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0jCistIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0jIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCistIworLSMKKy0jIFRoZSBmaXJzdCBkaXJlY3RpdmUgaW4gdGhlIC5tc2cgc2hvdWxkIGJlIHRoZSBkZWZpbml0aW9uIG9mIHRoZQorLSMgbWVzc2FnZSBzZXQgbnVtYmVyLiAgV2UgdXNlIGFsd2F5cyBzZXQgbnVtYmVyIDEuCistIworLTEgeworLSAgaVwKKy0kc2V0IDEgIyBBdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgcG8ybXNnLnNlZAorLSAgaAorLSAgcy8uKi8wLworLSAgeAorLX0KKy0jCistIyBXZSBjb3B5IGFsbCBjb21tZW50cyBpbnRvIHRoZSAubXNnIGZpbGUuICBQZXJoYXBzIHRoZXkgY2FuIGhlbHAuCistIworLS9eIy8gcy9eI1sgCV0qLyQgL3AKKy0jCistIyBXZSBjb3B5IHRoZSBvcmlnaW5hbCBtZXNzYWdlIGFzIGEgY29tbWVudCBpbnRvIHRoZSAubXNnIGZpbGUuCistIworLS9ebXNnaWQvIHsKKy0jIERvZXMgbm90IHdvcmsgbm93CistIyAgLyIkLyEgeworLSMgICAgcy9cXCQvLworLSMgICAgcy8kLyAuLi4gKG1vcmUgbGluZXMgZm9sbG93aW5nKSIvCistIyAgfQorLSAgcy9ebXNnaWRbIAldKiJcKC4qXCkiJC8kIE9yaWdpbmFsIE1lc3NhZ2U6IFwxLworLSAgcAorLX0KKy0jCistIyBUaGUgLm1zZyBmaWxlIGNvbnRhaW5zLCBvdGhlciB0aGVuIHRoZSAucG8gZmlsZSwgb25seSB0aGUgdHJhbnNsYXRpb25zCistIyBidXQgZWFjaCBnaXZlbiBhIHVuaXF1ZSBJRC4gIFN0YXJ0aW5nIGZyb20gMSBhbmQgaW5jcmVtZW50aW5nIGJ5IDEgZm9yCistIyBlYWNoIG1lc3NhZ2Ugd2UgYXNzaWduIHRoZW0gdG8gdGhlIG1lc3NhZ2VzLgorLSMgSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIC5wbyBmaWxlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGNhdC1pZC10YmwuYyBmaWxlCistIyAod2l0aCBwby10by10YmwpIGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUgdXNlZCBoZXJlLiAgKEF0IGxlYXN0IHRoZSBvcmRlcgorLSMgb2YgZGVjbGFyYXRpb25zIG11c3Qgbm90IGJlIGNoYW5nZWQuKQorLSMKKy0vXm1zZ3N0ci8geworLSAgcy9tc2dzdHJbIAldKiJcKC4qXCkiL1wxLworLSAgeAorLSMgVGhlIGZvbGxvd2luZyBuaWNlIHNvbHV0aW9uIGlzIGJ5CistIyBCcnVubyA8SGFpYmxlQG1hMnMyLm1hdGhlbWF0aWsudW5pLWthcmxzcnVoZS5kZT4KKy0gIHRkCistIyBJbmNyZW1lbnQgYSBkZWNpbWFsIG51bWJlciBpbiBwYXR0ZXJuIHNwYWNlLgorLSMgRmlyc3QgaGlkZSB0cmFpbGluZyBgOScgZGlnaXRzLgorLSAgOmQKKy0gIHMvOVwoXypcKSQvX1wxLworLSAgdGQKKy0jIEFzc3VyZSBhdCBsZWFzdCBvbmUgZGlnaXQgaXMgYXZhaWxhYmxlLgorLSAgcy9eXChfKlwpJC8wXDEvCistIyBJbmNyZW1lbnQgdGhlIGxhc3QgZGlnaXQuCistICBzLzhcKF8qXCkkLzlcMS8KKy0gIHMvN1woXypcKSQvOFwxLworLSAgcy82XChfKlwpJC83XDEvCistICBzLzVcKF8qXCkkLzZcMS8KKy0gIHMvNFwoXypcKSQvNVwxLworLSAgcy8zXChfKlwpJC80XDEvCistICBzLzJcKF8qXCkkLzNcMS8KKy0gIHMvMVwoXypcKSQvMlwxLworLSAgcy8wXChfKlwpJC8xXDEvCistIyBDb252ZXJ0IHRoZSBoaWRkZW4gYDknIGRpZ2l0cyB0byBgMCdzLgorLSAgcy9fLzAvZworLSAgeAorLSMgQnJpbmcgdGhlIGxpbmUgaW4gdGhlIGZvcm1hdCBgPG51bWJlcj4gPG1lc3NhZ2U+JworLSAgRworLSAgcy9eW15cbl0qJC8mIC8KKy0gIHMvXCguKlwpXG5cKFswLTldKlwpL1wyIFwxLworLSMgQ2xlYXIgZmxhZyBmcm9tIGxhc3Qgc3Vic3RpdHV0aW9uLgorLSAgdGIKKy0jIEFwcGVuZCB0aGUgbmV4dCBsaW5lLgorLSAgOmIKKy0gIE4KKy0jIExvb2sgd2hldGhlciBzZWNvbmQgcGFydCBpcyBhIGNvbnRpbnVhdGlvbiBsaW5lLgorLSAgcy9cKC4qXG5cKSJcKC4qXCkiL1wxXDIvCistIyBZZXMsIHRoZW4gYnJhbmNoLgorLSAgdGEKKy0gIFAKKy0gIEQKKy0jIE5vdGUgdGhhdCBgRCcgaW5jbHVkZXMgYSBqdW1wIHRvIHRoZSBzdGFydCEhCistIyBXZSBmb3VuZCBhIGNvbnRpbnVhdGlvbiBsaW5lLiAgQnV0IGJlZm9yZSBwcmludGluZyBpbnNlcnQgJ1wnLgorLSAgOmEKKy0gIHMvXCguKlwpXChcbi4qXCkvXDFcXFwyLworLSAgUAorLSMgV2UgY2Fubm90IHVzZSB0aGUgc2VkIGNvbW1hbmQgYEQnIGhlcmUKKy0gIHMvLipcblwoLipcKS9cMS8KKy0gIHRiCistfQorLWQKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC94c2l6ZS5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3hzaXplLmgJMjAwNC0wOS0xMiAxNDo0MDozNC43MDA2OTU2NDggLTA0MDAKK0BAIC0wLDAgKzEsMTA5IEBACisrLyogeHNpemUuaCAtLSBDaGVja2VkIHNpemVfdCBjb21wdXRhdGlvbnMuCisrCisrICAgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZuZGVmIF9YU0laRV9ICisrI2RlZmluZSBfWFNJWkVfSAorKworKy8qIEdldCBzaXplX3QuICAqLworKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysKKysvKiBHZXQgU0laRV9NQVguICAqLworKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysjaWYgSEFWRV9TVERJTlRfSAorKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisrI2VuZGlmCisrCisrLyogVGhlIHNpemUgb2YgbWVtb3J5IG9iamVjdHMgaXMgb2Z0ZW4gY29tcHV0ZWQgdGhyb3VnaCBleHByZXNzaW9ucyBvZgorKyAgIHR5cGUgc2l6ZV90LiBFeGFtcGxlOgorKyAgICAgIHZvaWQqIHAgPSBtYWxsb2MgKGhlYWRlcl9zaXplICsgbiAqIGVsZW1lbnRfc2l6ZSkuCisrICAgVGhlc2UgY29tcHV0YXRpb25zIGNhbiBsZWFkIHRvIG92ZXJmbG93LiAgV2hlbiB0aGlzIGhhcHBlbnMsIG1hbGxvYygpCisrICAgcmV0dXJucyBhIHBpZWNlIG9mIG1lbW9yeSB0aGF0IGlzIHdheSB0b28gc21hbGwsIGFuZCB0aGUgcHJvZ3JhbSB0aGVuCisrICAgY3Jhc2hlcyB3aGlsZSBhdHRlbXB0aW5nIHRvIGZpbGwgdGhlIG1lbW9yeS4KKysgICBUbyBhdm9pZCB0aGlzLCB0aGUgZnVuY3Rpb25zIGFuZCBtYWNyb3MgaW4gdGhpcyBmaWxlIGNoZWNrIGZvciBvdmVyZmxvdy4KKysgICBUaGUgY29udmVudGlvbiBpcyB0aGF0IFNJWkVfTUFYIHJlcHJlc2VudHMgb3ZlcmZsb3cuCisrICAgbWFsbG9jIChTSVpFX01BWCkgaXMgbm90IGd1YXJhbnRlZWQgdG8gZmFpbCAtLSB0aGluayBvZiBhIG1hbGxvYworKyAgIGltcGxlbWVudGF0aW9uIHRoYXQgdXNlcyBtbWFwIC0tLCBpdCdzIHJlY29tbWVuZGVkIHRvIHVzZSBzaXplX292ZXJmbG93X3AoKQorKyAgIG9yIHNpemVfaW5fYm91bmRzX3AoKSBiZWZvcmUgaW52b2tpbmcgbWFsbG9jKCkuCisrICAgVGhlIGV4YW1wbGUgdGh1cyBiZWNvbWVzOgorKyAgICAgIHNpemVfdCBzaXplID0geHN1bSAoaGVhZGVyX3NpemUsIHh0aW1lcyAobiwgZWxlbWVudF9zaXplKSk7CisrICAgICAgdm9pZCAqcCA9IChzaXplX2luX2JvdW5kc19wIChzaXplKSA/IG1hbGxvYyAoc2l6ZSkgOiBOVUxMKTsKKysqLworKworKy8qIENvbnZlcnQgYW4gYXJiaXRyYXJ5IHZhbHVlID49IDAgdG8gdHlwZSBzaXplX3QuICAqLworKyNkZWZpbmUgeGNhc3Rfc2l6ZV90KE4pIFwKKysgICgoTikgPD0gU0laRV9NQVggPyAoc2l6ZV90KSAoTikgOiBTSVpFX01BWCkKKysKKysvKiBTdW0gb2YgdHdvIHNpemVzLCB3aXRoIG92ZXJmbG93IGNoZWNrLiAgKi8KKytzdGF0aWMgaW5saW5lIHNpemVfdAorKyNpZiBfX0dOVUNfXyA+PSAzCisrX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSkKKysjZW5kaWYKKyt4c3VtIChzaXplX3Qgc2l6ZTEsIHNpemVfdCBzaXplMikKKyt7CisrICBzaXplX3Qgc3VtID0gc2l6ZTEgKyBzaXplMjsKKysgIHJldHVybiAoc3VtID49IHNpemUxID8gc3VtIDogU0laRV9NQVgpOworK30KKysKKysvKiBTdW0gb2YgdGhyZWUgc2l6ZXMsIHdpdGggb3ZlcmZsb3cgY2hlY2suICAqLworK3N0YXRpYyBpbmxpbmUgc2l6ZV90CisrI2lmIF9fR05VQ19fID49IDMKKytfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorKyNlbmRpZgorK3hzdW0zIChzaXplX3Qgc2l6ZTEsIHNpemVfdCBzaXplMiwgc2l6ZV90IHNpemUzKQorK3sKKysgIHJldHVybiB4c3VtICh4c3VtIChzaXplMSwgc2l6ZTIpLCBzaXplMyk7CisrfQorKworKy8qIFN1bSBvZiBmb3VyIHNpemVzLCB3aXRoIG92ZXJmbG93IGNoZWNrLiAgKi8KKytzdGF0aWMgaW5saW5lIHNpemVfdAorKyNpZiBfX0dOVUNfXyA+PSAzCisrX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSkKKysjZW5kaWYKKyt4c3VtNCAoc2l6ZV90IHNpemUxLCBzaXplX3Qgc2l6ZTIsIHNpemVfdCBzaXplMywgc2l6ZV90IHNpemU0KQorK3sKKysgIHJldHVybiB4c3VtICh4c3VtICh4c3VtIChzaXplMSwgc2l6ZTIpLCBzaXplMyksIHNpemU0KTsKKyt9CisrCisrLyogTWF4aW11bSBvZiB0d28gc2l6ZXMsIHdpdGggb3ZlcmZsb3cgY2hlY2suICAqLworK3N0YXRpYyBpbmxpbmUgc2l6ZV90CisrI2lmIF9fR05VQ19fID49IDMKKytfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorKyNlbmRpZgorK3htYXggKHNpemVfdCBzaXplMSwgc2l6ZV90IHNpemUyKQorK3sKKysgIC8qIE5vIGV4cGxpY2l0IGNoZWNrIGlzIG5lZWRlZCBoZXJlLCBiZWNhdXNlIGZvciBhbnkgbjoKKysgICAgIG1heCAoU0laRV9NQVgsIG4pID09IFNJWkVfTUFYIGFuZCBtYXggKG4sIFNJWkVfTUFYKSA9PSBTSVpFX01BWC4gICovCisrICByZXR1cm4gKHNpemUxID49IHNpemUyID8gc2l6ZTEgOiBzaXplMik7CisrfQorKworKy8qIE11bHRpcGxpY2F0aW9uIG9mIGEgY291bnQgd2l0aCBhbiBlbGVtZW50IHNpemUsIHdpdGggb3ZlcmZsb3cgY2hlY2suCisrICAgVGhlIGNvdW50IG11c3QgYmUgPj0gMCBhbmQgdGhlIGVsZW1lbnQgc2l6ZSBtdXN0IGJlID4gMC4KKysgICBUaGlzIGlzIGEgbWFjcm8sIG5vdCBhbiBpbmxpbmUgZnVuY3Rpb24sIHNvIHRoYXQgaXQgd29ya3MgY29ycmVjdGx5IGV2ZW4KKysgICB3aGVuIE4gaXMgb2YgYSB3aWRlciB0dXBlIGFuZCBOID4gU0laRV9NQVguICAqLworKyNkZWZpbmUgeHRpbWVzKE4sIEVMU0laRSkgXAorKyAgKChOKSA8PSBTSVpFX01BWCAvIChFTFNJWkUpID8gKHNpemVfdCkgKE4pICogKEVMU0laRSkgOiBTSVpFX01BWCkKKysKKysvKiBDaGVjayBmb3Igb3ZlcmZsb3cuICAqLworKyNkZWZpbmUgc2l6ZV9vdmVyZmxvd19wKFNJWkUpIFwKKysgICgoU0laRSkgPT0gU0laRV9NQVgpCisrLyogQ2hlY2sgYWdhaW5zdCBvdmVyZmxvdy4gICovCisrI2RlZmluZSBzaXplX2luX2JvdW5kc19wKFNJWkUpIFwKKysgICgoU0laRSkgIT0gU0laRV9NQVgpCisrCisrI2VuZGlmIC8qIF9YU0laRV9IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L0NoYW5nZUxvZwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvQ2hhbmdlTG9nCTIwMDQtMDktMTIgMTQ6NDA6MzUuMDU0NjQxODQwIC0wNDAwCitAQCAtMCwwICsxLDMyIEBACisrMjAwNC0wOS0xMiAgZ2V0dGV4dGl6ZSAgPGJ1Zy1nbnUtZ2V0dGV4dEBnbnUub3JnPgorKworKwkqIGNvZGVzZXQubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGdldHRleHQubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGdsaWJjMjEubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGljb252Lm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBpbnRkaXYwLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBpbnRtYXgubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGludHR5cGVzLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBpbnR0eXBlc19oLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBpbnR0eXBlcy1wcmkubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGlzYy1wb3NpeC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogbGNtZXNzYWdlLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBsaWItbGQubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGxpYi1saW5rLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBsaWItcHJlZml4Lm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBsb25nZG91YmxlLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBsb25nbG9uZy5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogbmxzLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBwby5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogcHJpbnRmLXBvc2l4Lm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBwcm9ndGVzdC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogc2lnbmVkLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBzaXplX21heC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogc3RkaW50X2gubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIHVpbnRtYXhfdC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogdWxvbmdsb25nLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiB3Y2hhcl90Lm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiB3aW50X3QubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIHhzaXplLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBNYWtlZmlsZS5hbTogTmV3IGZpbGUuCisrCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2NvZGVzZXQubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2NvZGVzZXQubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44MjA2Nzc0MDggLTA0MDAKK0BAIC0wLDAgKzEsMjMgQEAKKysjIGNvZGVzZXQubTQgc2VyaWFsIEFNMSAoZ2V0dGV4dC0wLjEwLjQwKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytBQ19ERUZVTihbQU1fTEFOR0lORk9fQ09ERVNFVF0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBubF9sYW5naW5mbyBhbmQgQ09ERVNFVF0sIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQsCisrICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxhbmdpbmZvLmg+XSwKKysgICAgICBbY2hhciogY3MgPSBubF9sYW5naW5mbyhDT0RFU0VUKTtdLAorKyAgICAgIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQ9eWVzLAorKyAgICAgIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQ9bm8pCisrICAgIF0pCisrICBpZiB0ZXN0ICRhbV9jdl9sYW5naW5mb19jb2Rlc2V0ID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX0xBTkdJTkZPX0NPREVTRVQsIDEsCisrICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSA8bGFuZ2luZm8uaD4gYW5kIG5sX2xhbmdpbmZvKENPREVTRVQpLl0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2dldHRleHQubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2dldHRleHQubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44MjY2NzY0OTYgLTA0MDAKK0BAIC0wLDAgKzEsNDg3IEBACisrIyBnZXR0ZXh0Lm00IHNlcmlhbCAyOCAoZ2V0dGV4dC0wLjEzKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorK2RubAorK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCisrZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKytkbmwgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorK2RubCBmdW5jdGlvbmFsaXR5LgorK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCisrZG5sIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQorK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKytkbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisrCisrZG5sIEF1dGhvcnM6CisrZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUtMjAwMC4KKytkbmwgICBCcnVubyBIYWlibGUgPGhhaWJsZUBjbGlzcC5jb25zLm9yZz4sIDIwMDAtMjAwMy4KKysKKytkbmwgTWFjcm8gdG8gYWRkIGZvciB1c2luZyBHTlUgZ2V0dGV4dC4KKysKKytkbmwgVXNhZ2U6IEFNX0dOVV9HRVRURVhUKFtJTlRMU1lNQk9MXSwgW05FRURTWU1CT0xdLCBbSU5UTERJUl0pLgorK2RubCBJTlRMU1lNQk9MIGNhbiBiZSBvbmUgb2YgJ2V4dGVybmFsJywgJ25vLWxpYnRvb2wnLCAndXNlLWxpYnRvb2wnLiBUaGUKKytkbmwgICAgZGVmYXVsdCAoaWYgaXQgaXMgbm90IHNwZWNpZmllZCBvciBlbXB0eSkgaXMgJ25vLWxpYnRvb2wnLgorK2RubCAgICBJTlRMU1lNQk9MIHNob3VsZCBiZSAnZXh0ZXJuYWwnIGZvciBwYWNrYWdlcyB3aXRoIG5vIGludGwgZGlyZWN0b3J5LAorK2RubCAgICBhbmQgJ25vLWxpYnRvb2wnIG9yICd1c2UtbGlidG9vbCcgZm9yIHBhY2thZ2VzIHdpdGggYW4gaW50bCBkaXJlY3RvcnkuCisrZG5sICAgIElmIElOVExTWU1CT0wgaXMgJ3VzZS1saWJ0b29sJywgdGhlbiBhIGxpYnRvb2wgbGlicmFyeQorK2RubCAgICAkKHRvcF9idWlsZGRpcikvaW50bC9saWJpbnRsLmxhIHdpbGwgYmUgY3JlYXRlZCAoc2hhcmVkIGFuZC9vciBzdGF0aWMsCisrZG5sICAgIGRlcGVuZGluZyBvbiAtLXtlbmFibGUsZGlzYWJsZX0te3NoYXJlZCxzdGF0aWN9IGFuZCBvbiB0aGUgcHJlc2VuY2Ugb2YKKytkbmwgICAgQU0tRElTQUJMRS1TSEFSRUQpLiBJZiBJTlRMU1lNQk9MIGlzICduby1saWJ0b29sJywgYSBzdGF0aWMgbGlicmFyeQorK2RubCAgICAkKHRvcF9idWlsZGRpcikvaW50bC9saWJpbnRsLmEgd2lsbCBiZSBjcmVhdGVkLgorK2RubCBJZiBORUVEU1lNQk9MIGlzIHNwZWNpZmllZCBhbmQgaXMgJ25lZWQtbmdldHRleHQnLCB0aGVuIEdOVSBnZXR0ZXh0CisrZG5sICAgIGltcGxlbWVudGF0aW9ucyAoaW4gbGliYyBvciBsaWJpbnRsKSB3aXRob3V0IHRoZSBuZ2V0dGV4dCgpIGZ1bmN0aW9uCisrZG5sICAgIHdpbGwgYmUgaWdub3JlZC4gIElmIE5FRURTWU1CT0wgaXMgc3BlY2lmaWVkIGFuZCBpcworK2RubCAgICAnbmVlZC1mb3JtYXRzdHJpbmctbWFjcm9zJywgdGhlbiBHTlUgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBkb24ndAorK2RubCAgICBzdXBwb3J0IHRoZSBJU08gQyA5OSA8aW50dHlwZXMuaD4gZm9ybWF0c3RyaW5nIG1hY3JvcyB3aWxsIGJlIGlnbm9yZWQuCisrZG5sIElOVExESVIgaXMgdXNlZCB0byBmaW5kIHRoZSBpbnRsIGxpYnJhcmllcy4gIElmIGVtcHR5LAorK2RubCAgICB0aGUgdmFsdWUgYCQodG9wX2J1aWxkZGlyKS9pbnRsLycgaXMgdXNlZC4KKytkbmwKKytkbmwgVGhlIHJlc3VsdCBvZiB0aGUgY29uZmlndXJhdGlvbiBpcyBvbmUgb2YgdGhyZWUgY2FzZXM6CisrZG5sIDEpIEdOVSBnZXR0ZXh0LCBhcyBpbmNsdWRlZCBpbiB0aGUgaW50bCBzdWJkaXJlY3RvcnksIHdpbGwgYmUgY29tcGlsZWQKKytkbmwgICAgYW5kIHVzZWQuCisrZG5sICAgIENhdGFsb2cgZm9ybWF0OiBHTlUgLS0+IGluc3RhbGwgaW4gJChkYXRhZGlyKQorK2RubCAgICBDYXRhbG9nIGV4dGVuc2lvbjogLm1vIGFmdGVyIGluc3RhbGxhdGlvbiwgLmdtbyBpbiBzb3VyY2UgdHJlZQorK2RubCAyKSBHTlUgZ2V0dGV4dCBoYXMgYmVlbiBmb3VuZCBpbiB0aGUgc3lzdGVtJ3MgQyBsaWJyYXJ5LgorK2RubCAgICBDYXRhbG9nIGZvcm1hdDogR05VIC0tPiBpbnN0YWxsIGluICQoZGF0YWRpcikKKytkbmwgICAgQ2F0YWxvZyBleHRlbnNpb246IC5tbyBhZnRlciBpbnN0YWxsYXRpb24sIC5nbW8gaW4gc291cmNlIHRyZWUKKytkbmwgMykgTm8gaW50ZXJuYXRpb25hbGl6YXRpb24sIGFsd2F5cyB1c2UgRW5nbGlzaCBtc2dpZC4KKytkbmwgICAgQ2F0YWxvZyBmb3JtYXQ6IG5vbmUKKytkbmwgICAgQ2F0YWxvZyBleHRlbnNpb246IG5vbmUKKytkbmwgSWYgSU5UTFNZTUJPTCBpcyAnZXh0ZXJuYWwnLCBvbmx5IGNhc2VzIDIgYW5kIDMgY2FuIG9jY3VyLgorK2RubCBUaGUgdXNlIG9mIC5nbW8gaXMgaGlzdG9yaWNhbCAoaXQgd2FzIG5lZWRlZCB0byBhdm9pZCBvdmVyd3JpdGluZyB0aGUKKytkbmwgR05VIGZvcm1hdCBjYXRhbG9ncyB3aGVuIGJ1aWxkaW5nIG9uIGEgcGxhdGZvcm0gd2l0aCBhbiBYL09wZW4gZ2V0dGV4dCksCisrZG5sIGJ1dCB3ZSBrZWVwIGl0IGluIG9yZGVyIG5vdCB0byBmb3JjZSBpcnJlbGV2YW50IGZpbGVuYW1lIGNoYW5nZXMgb24gdGhlCisrZG5sIG1haW50YWluZXJzLgorK2RubAorK0FDX0RFRlVOKFtBTV9HTlVfR0VUVEVYVF0sCisrWworKyAgZG5sIEFyZ3VtZW50IGNoZWNraW5nLgorKyAgaWZlbHNlKFskMV0sIFtdLCAsIFtpZmVsc2UoWyQxXSwgW2V4dGVybmFsXSwgLCBbaWZlbHNlKFskMV0sIFtuby1saWJ0b29sXSwgLCBbaWZlbHNlKFskMV0sIFt1c2UtbGlidG9vbF0sICwKKysgICAgW2VycnByaW50KFtFUlJPUjogaW52YWxpZCBmaXJzdCBhcmd1bWVudCB0byBBTV9HTlVfR0VUVEVYVAorK10pXSldKV0pXSkKKysgIGlmZWxzZShbJDJdLCBbXSwgLCBbaWZlbHNlKFskMl0sIFtuZWVkLW5nZXR0ZXh0XSwgLCBbaWZlbHNlKFskMl0sIFtuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3NdLCAsCisrICAgIFtlcnJwcmludChbRVJST1I6IGludmFsaWQgc2Vjb25kIGFyZ3VtZW50IHRvIEFNX0dOVV9HRVRURVhUCisrXSldKV0pXSkKKysgIGRlZmluZShndF9pbmNsdWRlZF9pbnRsLCBpZmVsc2UoWyQxXSwgW2V4dGVybmFsXSwgW25vXSwgW3llc10pKQorKyAgZGVmaW5lKGd0X2xpYnRvb2xfc3VmZml4X3ByZWZpeCwgaWZlbHNlKFskMV0sIFt1c2UtbGlidG9vbF0sIFtsXSwgW10pKQorKworKyAgQUNfUkVRVUlSRShbQU1fUE9fU1VCRElSU10pZG5sCisrICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCisrICAgIEFDX1JFUVVJUkUoW0FNX0lOVExfU1VCRElSXSlkbmwKKysgIF0pCisrCisrICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBBQ19MSUJfTElOS0ZMQUdTX0JPRFkuCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKysKKysgIGRubCBTb21ldGltZXMgbGliaW50bCByZXF1aXJlcyBsaWJpY29udiwgc28gZmlyc3Qgc2VhcmNoIGZvciBsaWJpY29udi4KKysgIGRubCBJZGVhbGx5IHdlIHdvdWxkIGRvIHRoaXMgc2VhcmNoIG9ubHkgYWZ0ZXIgdGhlCisrICBkbmwgICAgICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgorKyAgZG5sICAgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmMiICE9ICJ5ZXMiOyB0aGVuCisrICBkbmwgdGVzdHMuIEJ1dCBpZiBjb25maWd1cmUuaW4gaW52b2tlcyBBTV9JQ09OViBhZnRlciBBTV9HTlVfR0VUVEVYVAorKyAgZG5sIHRoZSBjb25maWd1cmUgc2NyaXB0IHdvdWxkIG5lZWQgdG8gY29udGFpbiB0aGUgc2FtZSBzaGVsbCBjb2RlCisrICBkbmwgYWdhaW4sIG91dHNpZGUgYW55ICdpZicuIFRoZXJlIGFyZSB0d28gc29sdXRpb25zOgorKyAgZG5sIC0gSW52b2tlIEFNX0lDT05WX0xJTktGTEFHU19CT0RZIGhlcmUsIG91dHNpZGUgYW55ICdpZicuCisrICBkbmwgLSBDb250cm9sIHRoZSBleHBhbnNpb25zIGluIG1vcmUgZGV0YWlsIHVzaW5nIEFDX1BST1ZJREVfSUZFTFNFLgorKyAgZG5sIFNpbmNlIEFDX1BST1ZJREVfSUZFTFNFIGlzIG9ubHkgaW4gYXV0b2NvbmYgPj0gMi41MiBhbmQgbm90CisrICBkbmwgZG9jdW1lbnRlZCwgd2UgYXZvaWQgaXQuCisrICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCAsIFsKKysgICAgQUNfUkVRVUlSRShbQU1fSUNPTlZfTElOS0ZMQUdTX0JPRFldKQorKyAgXSkKKysKKysgIGRubCBTZXQgVVNFX05MUy4KKysgIEFNX05MUworKworKyAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWworKyAgICBCVUlMRF9JTkNMVURFRF9MSUJJTlRMPW5vCisrICAgIFVTRV9JTkNMVURFRF9MSUJJTlRMPW5vCisrICBdKQorKyAgTElCSU5UTD0KKysgIExUTElCSU5UTD0KKysgIFBPU1VCPQorKworKyAgZG5sIElmIHdlIHVzZSBOTFMgZmlndXJlIG91dCB3aGF0IG1ldGhvZAorKyAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KKysgICAgZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0PW5vCisrICAgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsIFsKKysgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgaW5jbHVkZWQgZ2V0dGV4dCBpcyByZXF1ZXN0ZWRdKQorKyAgICAgIEFDX0FSR19XSVRIKGluY2x1ZGVkLWdldHRleHQsCisrICAgICAgICBbICAtLXdpdGgtaW5jbHVkZWQtZ2V0dGV4dCB1c2UgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaW5jbHVkZWQgaGVyZV0sCisrICAgICAgICBubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0PSR3aXRodmFsLAorKyAgICAgICAgbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dD1ubykKKysgICAgICBBQ19NU0dfUkVTVUxUKCRubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0KQorKworKyAgICAgIG5sc19jdl91c2VfZ251X2dldHRleHQ9IiRubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0IgorKyAgICAgIGlmIHRlc3QgIiRubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0IiAhPSAieWVzIjsgdGhlbgorKyAgICBdKQorKyAgICAgICAgZG5sIFVzZXIgZG9lcyBub3QgaW5zaXN0IG9uIHVzaW5nIEdOVSBOTFMgbGlicmFyeS4gIEZpZ3VyZSBvdXQgd2hhdAorKyAgICAgICAgZG5sIHRvIHVzZS4gIElmIEdOVSBnZXR0ZXh0IGlzIGF2YWlsYWJsZSB3ZSB1c2UgdGhpcy4gIEVsc2Ugd2UgaGF2ZQorKyAgICAgICAgZG5sIHRvIGZhbGwgYmFjayB0byBHTlUgTkxTIGxpYnJhcnkuCisrCisrICAgICAgICBkbmwgQWRkIGEgdmVyc2lvbiBudW1iZXIgdG8gdGhlIGNhY2hlIG1hY3Jvcy4KKysgICAgICAgIGRlZmluZShbZ3RfYXBpX3ZlcnNpb25dLCBpZmVsc2UoWyQyXSwgW25lZWQtZm9ybWF0c3RyaW5nLW1hY3Jvc10sIDMsIGlmZWxzZShbJDJdLCBbbmVlZC1uZ2V0dGV4dF0sIDIsIDEpKSkKKysgICAgICAgIGRlZmluZShbZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmNdLCBbZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0XWd0X2FwaV92ZXJzaW9uW19saWJjXSkKKysgICAgICAgIGRlZmluZShbZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGxdLCBbZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0XWd0X2FwaV92ZXJzaW9uW19saWJpbnRsXSkKKysKKysgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgR05VIGdldHRleHQgaW4gbGliY10sIGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJjLAorKyAgICAgICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxpYmludGwuaD4KKytdaWZlbHNlKFskMl0sIFtuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3NdLAorK1sjaWZuZGVmIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OCisrI2RlZmluZSBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTihtYWpvcikgKChtYWpvcikgPT0gMCA/IDAgOiAtMSkKKysjZW5kaWYKKytjaGFuZ2VxdW90ZSgsKWRubAorK3R5cGVkZWYgaW50IGFycmF5IFsyICogKF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKDApID49IDEpIC0gMV07CisrY2hhbmdlcXVvdGUoWyxdKWRubAorK10sIFtdKVtleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CisrZXh0ZXJuIGludCAqX25sX2RvbWFpbl9iaW5kaW5ncztdLAorKyAgICAgICAgICAgIFtiaW5kdGV4dGRvbWFpbiAoIiIsICIiKTsKKytyZXR1cm4gKGludCkgZ2V0dGV4dCAoIiIpXWlmZWxzZShbJDJdLCBbbmVlZC1uZ2V0dGV4dF0sIFsgKyAoaW50KSBuZ2V0dGV4dCAoIiIsICIiLCAwKV0sIFtdKVsgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9kb21haW5fYmluZGluZ3NdLAorKyAgICAgICAgICAgIGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJjPXllcywKKysgICAgICAgICAgICBndF9jdl9mdW5jX2dudWdldHRleHRfbGliYz1ubyldKQorKworKyAgICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJjIiAhPSAieWVzIjsgdGhlbgorKyAgICAgICAgICBkbmwgU29tZXRpbWVzIGxpYmludGwgcmVxdWlyZXMgbGliaWNvbnYsIHNvIGZpcnN0IHNlYXJjaCBmb3IgbGliaWNvbnYuCisrICAgICAgICAgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsICwgWworKyAgICAgICAgICAgIEFNX0lDT05WX0xJTksKKysgICAgICAgICAgXSkKKysgICAgICAgICAgZG5sIFNlYXJjaCBmb3IgbGliaW50bCBhbmQgZGVmaW5lIExJQklOVEwsIExUTElCSU5UTCBhbmQgSU5DSU5UTAorKyAgICAgICAgICBkbmwgYWNjb3JkaW5nbHkuIERvbid0IHVzZSBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoW2ludGxdLFtpY29udl0pCisrICAgICAgICAgIGRubCBiZWNhdXNlIHRoYXQgd291bGQgYWRkICItbGljb252IiB0byBMSUJJTlRMIGFuZCBMVExJQklOVEwKKysgICAgICAgICAgZG5sIGV2ZW4gaWYgbGliaWNvbnYgZG9lc24ndCBleGlzdC4KKysgICAgICAgICAgQUNfTElCX0xJTktGTEFHU19CT0RZKFtpbnRsXSkKKysgICAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBHTlUgZ2V0dGV4dCBpbiBsaWJpbnRsXSwKKysgICAgICAgICAgICBndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bCwKKysgICAgICAgICAgIFtndF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisrICAgICAgICAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkSU5DSU5UTCIKKysgICAgICAgICAgICBndF9zYXZlX0xJQlM9IiRMSUJTIgorKyAgICAgICAgICAgIExJQlM9IiRMSUJTICRMSUJJTlRMIgorKyAgICAgICAgICAgIGRubCBOb3cgc2VlIHdoZXRoZXIgbGliaW50bCBleGlzdHMgYW5kIGRvZXMgbm90IGRlcGVuZCBvbiBsaWJpY29udi4KKysgICAgICAgICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxpYmludGwuaD4KKytdaWZlbHNlKFskMl0sIFtuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3NdLAorK1sjaWZuZGVmIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OCisrI2RlZmluZSBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTihtYWpvcikgKChtYWpvcikgPT0gMCA/IDAgOiAtMSkKKysjZW5kaWYKKytjaGFuZ2VxdW90ZSgsKWRubAorK3R5cGVkZWYgaW50IGFycmF5IFsyICogKF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKDApID49IDEpIC0gMV07CisrY2hhbmdlcXVvdGUoWyxdKWRubAorK10sIFtdKVtleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CisrZXh0ZXJuCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrIkMiCisrI2VuZGlmCisrY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyAoKTtdLAorKyAgICAgICAgICAgICAgW2JpbmR0ZXh0ZG9tYWluICgiIiwgIiIpOworK3JldHVybiAoaW50KSBnZXR0ZXh0ICgiIildaWZlbHNlKFskMl0sIFtuZWVkLW5nZXR0ZXh0XSwgWyArIChpbnQpIG5nZXR0ZXh0ICgiIiwgIiIsIDApXSwgW10pWyArIF9ubF9tc2dfY2F0X2NudHIgKyAqX25sX2V4cGFuZF9hbGlhcyAoMCldLAorKyAgICAgICAgICAgICAgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGw9eWVzLAorKyAgICAgICAgICAgICAgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGw9bm8pCisrICAgICAgICAgICAgZG5sIE5vdyBzZWUgd2hldGhlciBsaWJpbnRsIGV4aXN0cyBhbmQgZGVwZW5kcyBvbiBsaWJpY29udi4KKysgICAgICAgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiICE9IHllcyAmJiB0ZXN0IC1uICIkTElCSUNPTlYiOyB0aGVuCisrICAgICAgICAgICAgICBMSUJTPSIkTElCUyAkTElCSUNPTlYiCisrICAgICAgICAgICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxpYmludGwuaD4KKytdaWZlbHNlKFskMl0sIFtuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3NdLAorK1sjaWZuZGVmIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OCisrI2RlZmluZSBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTihtYWpvcikgKChtYWpvcikgPT0gMCA/IDAgOiAtMSkKKysjZW5kaWYKKytjaGFuZ2VxdW90ZSgsKWRubAorK3R5cGVkZWYgaW50IGFycmF5IFsyICogKF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKDApID49IDEpIC0gMV07CisrY2hhbmdlcXVvdGUoWyxdKWRubAorK10sIFtdKVtleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CisrZXh0ZXJuCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrIkMiCisrI2VuZGlmCisrY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyAoKTtdLAorKyAgICAgICAgICAgICAgICBbYmluZHRleHRkb21haW4gKCIiLCAiIik7CisrcmV0dXJuIChpbnQpIGdldHRleHQgKCIiKV1pZmVsc2UoWyQyXSwgW25lZWQtbmdldHRleHRdLCBbICsgKGludCkgbmdldHRleHQgKCIiLCAiIiwgMCldLCBbXSlbICsgX25sX21zZ19jYXRfY250ciArICpfbmxfZXhwYW5kX2FsaWFzICgwKV0sCisrICAgICAgICAgICAgICAgW0xJQklOVEw9IiRMSUJJTlRMICRMSUJJQ09OViIKKysgICAgICAgICAgICAgICAgTFRMSUJJTlRMPSIkTFRMSUJJTlRMICRMVExJQklDT05WIgorKyAgICAgICAgICAgICAgICBndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bD15ZXMKKysgICAgICAgICAgICAgICBdKQorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgQ1BQRkxBR1M9IiRndF9zYXZlX0NQUEZMQUdTIgorKyAgICAgICAgICAgIExJQlM9IiRndF9zYXZlX0xJQlMiXSkKKysgICAgICAgIGZpCisrCisrICAgICAgICBkbmwgSWYgYW4gYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZCBHTlUgZ2V0dGV4dCgpIGlzIGZvdW5kLAorKyAgICAgICAgZG5sIHVzZSBpdC4gIEJ1dCBpZiB0aGlzIG1hY3JvIGlzIHVzZWQgaW4gR05VIGdldHRleHQsIGFuZCBHTlUKKysgICAgICAgIGRubCBnZXR0ZXh0IGlzIGFscmVhZHkgcHJlaW5zdGFsbGVkIGluIGxpYmludGwsIHdlIHVwZGF0ZSB0aGlzCisrICAgICAgICBkbmwgbGliaW50bC4gIChDZi4gdGhlIGluc3RhbGwgcnVsZSBpbiBpbnRsL01ha2VmaWxlLmluLikKKysgICAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2dudWdldHRleHRfbGliYyIgPSAieWVzIiBcCisrICAgICAgICAgICB8fCB7IHRlc3QgIiRndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bCIgPSAieWVzIiBcCisrICAgICAgICAgICAgICAgICYmIHRlc3QgIiRQQUNLQUdFIiAhPSBnZXR0ZXh0LXJ1bnRpbWUgXAorKyAgICAgICAgICAgICAgICAmJiB0ZXN0ICIkUEFDS0FHRSIgIT0gZ2V0dGV4dC10b29sczsgfTsgdGhlbgorKyAgICAgICAgICBndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQ9eWVzCisrICAgICAgICBlbHNlCisrICAgICAgICAgIGRubCBSZXNldCB0aGUgdmFsdWVzIHNldCBieSBzZWFyY2hpbmcgZm9yIGxpYmludGwuCisrICAgICAgICAgIExJQklOVEw9CisrICAgICAgICAgIExUTElCSU5UTD0KKysgICAgICAgICAgSU5DSU5UTD0KKysgICAgICAgIGZpCisrCisrICAgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsIFsKKysgICAgICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiICE9ICJ5ZXMiOyB0aGVuCisrICAgICAgICAgIGRubCBHTlUgZ2V0dGV4dCBpcyBub3QgZm91bmQgaW4gdGhlIEMgbGlicmFyeS4KKysgICAgICAgICAgZG5sIEZhbGwgYmFjayBvbiBpbmNsdWRlZCBHTlUgZ2V0dGV4dCBsaWJyYXJ5LgorKyAgICAgICAgICBubHNfY3ZfdXNlX2dudV9nZXR0ZXh0PXllcworKyAgICAgICAgZmkKKysgICAgICBmaQorKworKyAgICAgIGlmIHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisrICAgICAgICBkbmwgTWFyayBhY3Rpb25zIHVzZWQgdG8gZ2VuZXJhdGUgR05VIE5MUyBsaWJyYXJ5LgorKyAgICAgICAgQlVJTERfSU5DTFVERURfTElCSU5UTD15ZXMKKysgICAgICAgIFVTRV9JTkNMVURFRF9MSUJJTlRMPXllcworKyAgICAgICAgTElCSU5UTD0iaWZlbHNlKFskM10sW10sXCR7dG9wX2J1aWxkZGlyfS9pbnRsLFskM10pL2xpYmludGwuW11ndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXhbXWEgJExJQklDT05WIgorKyAgICAgICAgTFRMSUJJTlRMPSJpZmVsc2UoWyQzXSxbXSxcJHt0b3BfYnVpbGRkaXJ9L2ludGwsWyQzXSkvbGliaW50bC5bXWd0X2xpYnRvb2xfc3VmZml4X3ByZWZpeFtdYSAkTFRMSUJJQ09OViIKKysgICAgICAgIExJQlM9YGVjaG8gIiAkTElCUyAiIHwgc2VkIC1lICdzLyAtbGludGwgLyAvJyAtZSAncy9eIC8vJyAtZSAncy8gJC8vJ2AKKysgICAgICBmaQorKworKyAgICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyIgXAorKyAgICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisrICAgICAgICBkbmwgTWFyayBhY3Rpb25zIHRvIHVzZSBHTlUgZ2V0dGV4dCB0b29scy4KKysgICAgICAgIENBVE9CSkVYVD0uZ21vCisrICAgICAgZmkKKysgICAgXSkKKysKKysgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIiBcCisrICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisrICAgICAgQUNfREVGSU5FKEVOQUJMRV9OTFMsIDEsCisrICAgICAgICBbRGVmaW5lIHRvIDEgaWYgdHJhbnNsYXRpb24gb2YgcHJvZ3JhbSBtZXNzYWdlcyB0byB0aGUgdXNlcidzIG5hdGl2ZSBsYW5ndWFnZQorKyAgIGlzIHJlcXVlc3RlZC5dKQorKyAgICBlbHNlCisrICAgICAgVVNFX05MUz1ubworKyAgICBmaQorKyAgZmkKKysKKysgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byB1c2UgTkxTXSkKKysgIEFDX01TR19SRVNVTFQoWyRVU0VfTkxTXSkKKysgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCisrICAgIEFDX01TR19DSEVDS0lORyhbd2hlcmUgdGhlIGdldHRleHQgZnVuY3Rpb24gY29tZXMgZnJvbV0pCisrICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyI7IHRoZW4KKysgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiID0gInllcyI7IHRoZW4KKysgICAgICAgIGd0X3NvdXJjZT0iZXh0ZXJuYWwgbGliaW50bCIKKysgICAgICBlbHNlCisrICAgICAgICBndF9zb3VyY2U9ImxpYmMiCisrICAgICAgZmkKKysgICAgZWxzZQorKyAgICAgIGd0X3NvdXJjZT0iaW5jbHVkZWQgaW50bCBkaXJlY3RvcnkiCisrICAgIGZpCisrICAgIEFDX01TR19SRVNVTFQoWyRndF9zb3VyY2VdKQorKyAgZmkKKysKKysgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCisrCisrICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyI7IHRoZW4KKysgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiID0gInllcyI7IHRoZW4KKysgICAgICAgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGxpbmsgd2l0aCBsaWJpbnRsXSkKKysgICAgICAgIEFDX01TR19SRVNVTFQoWyRMSUJJTlRMXSkKKysgICAgICAgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ0lOVExdKQorKyAgICAgIGZpCisrCisrICAgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIHBhY2thZ2VzIG1heSBiZSB1c2luZyB0aGlzLgorKyAgICAgIEFDX0RFRklORShIQVZFX0dFVFRFWFQsIDEsCisrICAgICAgIFtEZWZpbmUgaWYgdGhlIEdOVSBnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC5dKQorKyAgICAgIEFDX0RFRklORShIQVZFX0RDR0VUVEVYVCwgMSwKKysgICAgICAgW0RlZmluZSBpZiB0aGUgR05VIGRjZ2V0dGV4dCgpIGZ1bmN0aW9uIGlzIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQuXSkKKysgICAgZmkKKysKKysgICAgZG5sIFdlIG5lZWQgdG8gcHJvY2VzcyB0aGUgcG8vIGRpcmVjdG9yeS4KKysgICAgUE9TVUI9cG8KKysgIGZpCisrCisrICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCisrICAgIGRubCBJZiB0aGlzIGlzIHVzZWQgaW4gR05VIGdldHRleHQgd2UgaGF2ZSB0byBzZXQgQlVJTERfSU5DTFVERURfTElCSU5UTAorKyAgICBkbmwgdG8gJ3llcycgYmVjYXVzZSBzb21lIG9mIHRoZSB0ZXN0c3VpdGUgcmVxdWlyZXMgaXQuCisrICAgIGlmIHRlc3QgIiRQQUNLQUdFIiA9IGdldHRleHQtcnVudGltZSB8fCB0ZXN0ICIkUEFDS0FHRSIgPSBnZXR0ZXh0LXRvb2xzOyB0aGVuCisrICAgICAgQlVJTERfSU5DTFVERURfTElCSU5UTD15ZXMKKysgICAgZmkKKysKKysgICAgZG5sIE1ha2UgYWxsIHZhcmlhYmxlcyB3ZSB1c2Uga25vd24gdG8gYXV0b2NvbmYuCisrICAgIEFDX1NVQlNUKEJVSUxEX0lOQ0xVREVEX0xJQklOVEwpCisrICAgIEFDX1NVQlNUKFVTRV9JTkNMVURFRF9MSUJJTlRMKQorKyAgICBBQ19TVUJTVChDQVRPQkpFWFQpCisrCisrICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBjb25maWd1cmUuaW5zIG1heSBiZSB1c2luZyB0aGlzLgorKyAgICBubHNfY3ZfaGVhZGVyX2ludGw9CisrICAgIG5sc19jdl9oZWFkZXJfbGliZ3Q9CisrCisrICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBNYWtlZmlsZXMgbWF5IGJlIHVzaW5nIHRoaXMuCisrICAgIERBVEFESVJOQU1FPXNoYXJlCisrICAgIEFDX1NVQlNUKERBVEFESVJOQU1FKQorKworKyAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgorKyAgICBJTlNUT0JKRVhUPS5tbworKyAgICBBQ19TVUJTVChJTlNUT0JKRVhUKQorKworKyAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgorKyAgICBHRU5DQVQ9Z2VuY2F0CisrICAgIEFDX1NVQlNUKEdFTkNBVCkKKysKKysgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKysgICAgaWYgdGVzdCAiJFVTRV9JTkNMVURFRF9MSUJJTlRMIiA9IHllczsgdGhlbgorKyAgICAgIElOVExPQkpTPSJcJChHRVRUT0JKUykiCisrICAgIGZpCisrICAgIEFDX1NVQlNUKElOVExPQkpTKQorKworKyAgICBkbmwgRW5hYmxlIGxpYnRvb2wgc3VwcG9ydCBpZiB0aGUgc3Vycm91bmRpbmcgcGFja2FnZSB3aXNoZXMgaXQuCisrICAgIElOVExfTElCVE9PTF9TVUZGSVhfUFJFRklYPWd0X2xpYnRvb2xfc3VmZml4X3ByZWZpeAorKyAgICBBQ19TVUJTVChJTlRMX0xJQlRPT0xfU1VGRklYX1BSRUZJWCkKKysgIF0pCisrCisrICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgorKyAgSU5UTExJQlM9IiRMSUJJTlRMIgorKyAgQUNfU1VCU1QoSU5UTExJQlMpCisrCisrICBkbmwgTWFrZSBhbGwgZG9jdW1lbnRlZCB2YXJpYWJsZXMga25vd24gdG8gYXV0b2NvbmYuCisrICBBQ19TVUJTVChMSUJJTlRMKQorKyAgQUNfU1VCU1QoTFRMSUJJTlRMKQorKyAgQUNfU1VCU1QoUE9TVUIpCisrXSkKKysKKysKKytkbmwgQ2hlY2tzIGZvciBhbGwgcHJlcmVxdWlzaXRlcyBvZiB0aGUgaW50bCBzdWJkaXJlY3RvcnksCisrZG5sIGV4Y2VwdCBmb3IgSU5UTF9MSUJUT09MX1NVRkZJWF9QUkVGSVggKGFuZCBwb3NzaWJseSBMSUJUT09MKSwgSU5UTE9CSlMsCisrZG5sICAgICAgICAgICAgVVNFX0lOQ0xVREVEX0xJQklOVEwsIEJVSUxEX0lOQ0xVREVEX0xJQklOVEwuCisrQUNfREVGVU4oW0FNX0lOVExfU1VCRElSXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0lOU1RBTExdKWRubAorKyAgQUNfUkVRVUlSRShbQU1fTUtJTlNUQUxMRElSU10pZG5sCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfUkFOTElCXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX0lTQ19QT1NJWF0pZG5sCisrICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pZG5sCisrICBBQ19SRVFVSVJFKFtBQ19DX0NPTlNUXSlkbmwKKysgIEFDX1JFUVVJUkUoW2JoX0NfU0lHTkVEXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX1RZUEVfT0ZGX1RdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfVFlQRV9TSVpFX1RdKWRubAorKyAgQUNfUkVRVUlSRShbam1fQUNfVFlQRV9MT05HX0xPTkddKWRubAorKyAgQUNfUkVRVUlSRShbZ3RfVFlQRV9MT05HRE9VQkxFXSlkbmwKKysgIEFDX1JFUVVJUkUoW2d0X1RZUEVfV0NIQVJfVF0pZG5sCisrICBBQ19SRVFVSVJFKFtndF9UWVBFX1dJTlRfVF0pZG5sCisrICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfSU5UVFlQRVNfSF0pCisrICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfU1RESU5UX0hdKQorKyAgQUNfUkVRVUlSRShbZ3RfVFlQRV9JTlRNQVhfVF0pCisrICBBQ19SRVFVSVJFKFtndF9QUklOVEZfUE9TSVhdKQorKyAgQUNfUkVRVUlSRShbQUNfRlVOQ19BTExPQ0FdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfRlVOQ19NTUFQXSlkbmwKKysgIEFDX1JFUVVJUkUoW2ptX0dMSUJDMjFdKWRubAorKyAgQUNfUkVRVUlSRShbZ3RfSU5URElWMF0pZG5sCisrICBBQ19SRVFVSVJFKFtqbV9BQ19UWVBFX1VJTlRNQVhfVF0pZG5sCisrICBBQ19SRVFVSVJFKFtndF9IRUFERVJfSU5UVFlQRVNfSF0pZG5sCisrICBBQ19SRVFVSVJFKFtndF9JTlRUWVBFU19QUkldKWRubAorKyAgQUNfUkVRVUlSRShbZ2xfWFNJWkVdKWRubAorKworKyAgQUNfQ0hFQ0tfVFlQRShbcHRyZGlmZl90XSwgLAorKyAgICBbQUNfREVGSU5FKFtwdHJkaWZmX3RdLCBbbG9uZ10sCisrICAgICAgIFtEZWZpbmUgYXMgdGhlIHR5cGUgb2YgdGhlIHJlc3VsdCBvZiBzdWJ0cmFjdGluZyB0d28gcG9pbnRlcnMsIGlmIHRoZSBzeXN0ZW0gZG9lc24ndCBkZWZpbmUgaXQuXSkKKysgICAgXSkKKysgIEFDX0NIRUNLX0hFQURFUlMoW2FyZ3ouaCBsaW1pdHMuaCBsb2NhbGUuaCBubF90eXBlcy5oIG1hbGxvYy5oIHN0ZGRlZi5oIFwKKytzdGRsaWIuaCBzdHJpbmcuaCB1bmlzdGQuaCBzeXMvcGFyYW0uaF0pCisrICBBQ19DSEVDS19GVU5DUyhbYXNwcmludGYgZndwcmludGYgZ2V0Y3dkIGdldGVnaWQgZ2V0ZXVpZCBnZXRnaWQgZ2V0dWlkIFwKKyttZW1wY3B5IG11bm1hcCBwdXRlbnYgc2V0ZW52IHNldGxvY2FsZSBzbnByaW50ZiBzdHBjcHkgc3RyY2FzZWNtcCBzdHJkdXAgXAorK3N0cnRvdWwgdHNlYXJjaCB3Y3NsZW4gX19hcmd6X2NvdW50IF9fYXJnel9zdHJpbmdpZnkgX19hcmd6X25leHQgXAorK19fZnNldGxvY2tpbmddKQorKworKyAgZG5sIFVzZSB0aGUgX3NucHJpbnRmIGZ1bmN0aW9uIG9ubHkgaWYgaXQgaXMgZGVjbGFyZWQgKGJlY2F1c2Ugb24gTmV0QlNEIGl0CisrICBkbmwgaXMgZGVmaW5lZCBhcyBhIHdlYWsgYWxpYXMgb2Ygc25wcmludGY7IHdlIHByZWZlciB0byB1c2UgdGhlIGxhdHRlcikuCisrICBndF9DSEVDS19ERUNMKF9zbnByaW50ZiwgWyNpbmNsdWRlIDxzdGRpby5oPl0pCisrICBndF9DSEVDS19ERUNMKF9zbndwcmludGYsIFsjaW5jbHVkZSA8c3RkaW8uaD5dKQorKworKyAgZG5sIFVzZSB0aGUgKl91bmxvY2tlZCBmdW5jdGlvbnMgb25seSBpZiB0aGV5IGFyZSBkZWNsYXJlZC4KKysgIGRubCAoYmVjYXVzZSBzb21lIG9mIHRoZW0gd2VyZSBkZWZpbmVkIHdpdGhvdXQgYmVpbmcgZGVjbGFyZWQgaW4gU29sYXJpcworKyAgZG5sIDIuNS4xIGJ1dCB3ZXJlIHJlbW92ZWQgaW4gU29sYXJpcyAyLjYsIHdoZXJlYXMgd2Ugd2FudCBiaW5hcmllcyBidWlsdAorKyAgZG5sIG9uIFNvbGFyaXMgMi41LjEgdG8gcnVuIG9uIFNvbGFyaXMgMi42KS4KKysgIGRubCBEb24ndCB1c2UgQUNfQ0hFQ0tfREVDTFMgYmVjYXVzZSBpdCBpc24ndCBzdXBwb3J0ZWQgaW4gYXV0b2NvbmYtMi4xMy4KKysgIGd0X0NIRUNLX0RFQ0woZmVvZl91bmxvY2tlZCwgWyNpbmNsdWRlIDxzdGRpby5oPl0pCisrICBndF9DSEVDS19ERUNMKGZnZXRzX3VubG9ja2VkLCBbI2luY2x1ZGUgPHN0ZGlvLmg+XSkKKysgIGd0X0NIRUNLX0RFQ0woZ2V0Y191bmxvY2tlZCwgWyNpbmNsdWRlIDxzdGRpby5oPl0pCisrCisrICBjYXNlICRndF9jdl9mdW5jX3ByaW50Zl9wb3NpeCBpbgorKyAgICAqeWVzKSBIQVZFX1BPU0lYX1BSSU5URj0xIDs7CisrICAgICopIEhBVkVfUE9TSVhfUFJJTlRGPTAgOzsKKysgIGVzYWMKKysgIEFDX1NVQlNUKFtIQVZFX1BPU0lYX1BSSU5URl0pCisrICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19hc3ByaW50ZiIgPSB5ZXM7IHRoZW4KKysgICAgSEFWRV9BU1BSSU5URj0xCisrICBlbHNlCisrICAgIEhBVkVfQVNQUklOVEY9MAorKyAgZmkKKysgIEFDX1NVQlNUKFtIQVZFX0FTUFJJTlRGXSkKKysgIGlmIHRlc3QgIiRhY19jdl9mdW5jX3NucHJpbnRmIiA9IHllczsgdGhlbgorKyAgICBIQVZFX1NOUFJJTlRGPTEKKysgIGVsc2UKKysgICAgSEFWRV9TTlBSSU5URj0wCisrICBmaQorKyAgQUNfU1VCU1QoW0hBVkVfU05QUklOVEZdKQorKyAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfd3ByaW50ZiIgPSB5ZXM7IHRoZW4KKysgICAgSEFWRV9XUFJJTlRGPTEKKysgIGVsc2UKKysgICAgSEFWRV9XUFJJTlRGPTAKKysgIGZpCisrICBBQ19TVUJTVChbSEFWRV9XUFJJTlRGXSkKKysKKysgIEFNX0lDT05WCisrICBBTV9MQU5HSU5GT19DT0RFU0VUCisrICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfbG9jYWxlX2ggPSB5ZXM7IHRoZW4KKysgICAgQU1fTENfTUVTU0FHRVMKKysgIGZpCisrCisrICBkbmwgaW50bC9wbHVyYWwuYyBpcyBnZW5lcmF0ZWQgZnJvbSBpbnRsL3BsdXJhbC55LiBJdCByZXF1aXJlcyBiaXNvbiwKKysgIGRubCBiZWNhdXNlIHBsdXJhbC55IHVzZXMgYmlzb24gc3BlY2lmaWMgZmVhdHVyZXMuIEl0IHJlcXVpcmVzIGF0IGxlYXN0CisrICBkbmwgYmlzb24tMS4yNiBiZWNhdXNlIGVhcmxpZXIgdmVyc2lvbnMgZ2VuZXJhdGUgYSBwbHVyYWwuYyB0aGF0IGRvZXNuJ3QKKysgIGRubCBjb21waWxlLgorKyAgZG5sIGJpc29uIGlzIG9ubHkgbmVlZGVkIGZvciB0aGUgbWFpbnRhaW5lciAod2hvIHRvdWNoZXMgcGx1cmFsLnkpLiBCdXQgaW4KKysgIGRubCBvcmRlciB0byBhdm9pZCBzZXBhcmF0ZSBNYWtlZmlsZXMgb3IgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlLCB3ZSBwdXQKKysgIGRubCB0aGUgcnVsZSBpbiBnZW5lcmFsIE1ha2VmaWxlLiBOb3csIHNvbWUgcGVvcGxlIGNhcmVsZXNzbHkgdG91Y2ggdGhlCisrICBkbmwgZmlsZXMgb3IgaGF2ZSBhIGJyb2tlbiAibWFrZSIgcHJvZ3JhbSwgaGVuY2UgdGhlIHBsdXJhbC5jIHJ1bGUgd2lsbAorKyAgZG5sIHNvbWV0aW1lcyBmaXJlLiBUbyBhdm9pZCBhbiBlcnJvciwgZGVmaW5lcyBCSVNPTiB0byAiOiIgaWYgaXQgaXMgbm90CisrICBkbmwgcHJlc2VudCBvciB0b28gb2xkLgorKyAgQUNfQ0hFQ0tfUFJPR1MoW0lOVExCSVNPTl0sIFtiaXNvbl0pCisrICBpZiB0ZXN0IC16ICIkSU5UTEJJU09OIjsgdGhlbgorKyAgICBhY192ZXJjX2ZhaWw9eWVzCisrICBlbHNlCisrICAgIGRubCBGb3VuZCBpdCwgbm93IGNoZWNrIHRoZSB2ZXJzaW9uLgorKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3ZlcnNpb24gb2YgYmlzb25dKQorK2NoYW5nZXF1b3RlKDw8LD4+KWRubAorKyAgICBhY19wcm9nX3ZlcnNpb249YCRJTlRMQklTT04gLS12ZXJzaW9uIDI+JjEgfCBzZWQgLW4gJ3MvXi4qR05VIEJpc29uLiogXChbMC05XSpcLlswLTkuXSpcKS4qJC9cMS9wJ2AKKysgICAgY2FzZSAkYWNfcHJvZ192ZXJzaW9uIGluCisrICAgICAgJycpIGFjX3Byb2dfdmVyc2lvbj0idi4gPy4/PywgYmFkIjsgYWNfdmVyY19mYWlsPXllczs7CisrICAgICAgMS4yWzYtOV0qIHwgMS5bMy05XVswLTldKiB8IFsyLTldLiopCisrY2hhbmdlcXVvdGUoWyxdKWRubAorKyAgICAgICAgIGFjX3Byb2dfdmVyc2lvbj0iJGFjX3Byb2dfdmVyc2lvbiwgb2siOyBhY192ZXJjX2ZhaWw9bm87OworKyAgICAgICopIGFjX3Byb2dfdmVyc2lvbj0iJGFjX3Byb2dfdmVyc2lvbiwgYmFkIjsgYWNfdmVyY19mYWlsPXllczs7CisrICAgIGVzYWMKKysgICAgQUNfTVNHX1JFU1VMVChbJGFjX3Byb2dfdmVyc2lvbl0pCisrICBmaQorKyAgaWYgdGVzdCAkYWNfdmVyY19mYWlsID0geWVzOyB0aGVuCisrICAgIElOVExCSVNPTj06CisrICBmaQorK10pCisrCisrCisrZG5sIGd0X0NIRUNLX0RFQ0woRlVOQywgSU5DTFVERVMpCisrZG5sIENoZWNrIHdoZXRoZXIgYSBmdW5jdGlvbiBpcyBkZWNsYXJlZC4KKytBQ19ERUZVTihbZ3RfQ0hFQ0tfREVDTF0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgJDEgaXMgZGVjbGFyZWRdLCBhY19jdl9oYXZlX2RlY2xfJDEsCisrICAgIFtBQ19UUllfQ09NUElMRShbJDJdLCBbCisrI2lmbmRlZiAkMQorKyAgY2hhciAqcCA9IChjaGFyICopICQxOworKyNlbmRpZgorK10sIGFjX2N2X2hhdmVfZGVjbF8kMT15ZXMsIGFjX2N2X2hhdmVfZGVjbF8kMT1ubyldKQorKyAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsXyQxID0geWVzOyB0aGVuCisrICAgIGd0X3ZhbHVlPTEKKysgIGVsc2UKKysgICAgZ3RfdmFsdWU9MAorKyAgZmkKKysgIEFDX0RFRklORV9VTlFVT1RFRChbSEFWRV9ERUNMX110cmFuc2xpdCgkMSwgW2Etel0sIFtBLVpdKSwgWyRndF92YWx1ZV0sCisrICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYCQxJywgYW5kIHRvIDAgaWYgeW91IGRvbid0Ll0pCisrXSkKKysKKysKKytkbmwgVXNhZ2U6IEFNX0dOVV9HRVRURVhUX1ZFUlNJT04oW2dldHRleHQtdmVyc2lvbl0pCisrQUNfREVGVU4oW0FNX0dOVV9HRVRURVhUX1ZFUlNJT05dLCBbXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvZ2xpYmMyMS5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvZ2xpYmMyMS5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0LjgzMzY3NTQzMiAtMDQwMAorQEAgLTAsMCArMSwzMiBAQAorKyMgZ2xpYmMyMS5tNCBzZXJpYWwgMiAoZmlsZXV0aWxzLTQuMS4zLCBnZXR0ZXh0LTAuMTAuNDApCisrZG5sIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrIyBUZXN0IGZvciB0aGUgR05VIEMgTGlicmFyeSwgdmVyc2lvbiAyLjEgb3IgbmV3ZXIuCisrIyBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytBQ19ERUZVTihbam1fR0xJQkMyMV0sCisrICBbCisrICAgIEFDX0NBQ0hFX0NIRUNLKHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBMaWJyYXJ5IDIuMSBvciBuZXdlciwKKysgICAgICBhY19jdl9nbnVfbGlicmFyeV8yXzEsCisrICAgICAgW0FDX0VHUkVQX0NQUChbTHVja3kgR05VIHVzZXJdLAorKwlbCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fR05VX0xJQlJBUllfXworKyAjaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxKSB8fCAoX19HTElCQ19fID4gMikKKysgIEx1Y2t5IEdOVSB1c2VyCisrICNlbmRpZgorKyNlbmRpZgorKwldLAorKwlhY19jdl9nbnVfbGlicmFyeV8yXzE9eWVzLAorKwlhY19jdl9nbnVfbGlicmFyeV8yXzE9bm8pCisrICAgICAgXQorKyAgICApCisrICAgIEFDX1NVQlNUKEdMSUJDMjEpCisrICAgIEdMSUJDMjE9IiRhY19jdl9nbnVfbGlicmFyeV8yXzEiCisrICBdCisrKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9pY29udi5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvaWNvbnYubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44Mzk2NzQ1MjAgLTA0MDAKK0BAIC0wLDAgKzEsMTAzIEBACisrIyBpY29udi5tNCBzZXJpYWwgQU00IChnZXR0ZXh0LTAuMTEuMykKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrQUNfREVGVU4oW0FNX0lDT05WX0xJTktGTEFHU19CT0RZXSwKKytbCisrICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBBQ19MSUJfTElOS0ZMQUdTX0JPRFkuCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKysKKysgIGRubCBTZWFyY2ggZm9yIGxpYmljb252IGFuZCBkZWZpbmUgTElCSUNPTlYsIExUTElCSUNPTlYgYW5kIElOQ0lDT05WCisrICBkbmwgYWNjb3JkaW5nbHkuCisrICBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoW2ljb252XSkKKytdKQorKworK0FDX0RFRlVOKFtBTV9JQ09OVl9MSU5LXSwKKytbCisrICBkbmwgU29tZSBzeXN0ZW1zIGhhdmUgaWNvbnYgaW4gbGliYywgc29tZSBoYXZlIGl0IGluIGxpYmljb252IChPU0YvMSBhbmQKKysgIGRubCB0aG9zZSB3aXRoIHRoZSBzdGFuZGFsb25lIHBvcnRhYmxlIEdOVSBsaWJpY29udiBpbnN0YWxsZWQpLgorKworKyAgZG5sIFNlYXJjaCBmb3IgbGliaWNvbnYgYW5kIGRlZmluZSBMSUJJQ09OViwgTFRMSUJJQ09OViBhbmQgSU5DSUNPTlYKKysgIGRubCBhY2NvcmRpbmdseS4KKysgIEFDX1JFUVVJUkUoW0FNX0lDT05WX0xJTktGTEFHU19CT0RZXSkKKysKKysgIGRubCBBZGQgJElOQ0lDT05WIHRvIENQUEZMQUdTIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBmb2xsb3dpbmcgY2hlY2tzLAorKyAgZG5sIGJlY2F1c2UgaWYgdGhlIHVzZXIgaGFzIGluc3RhbGxlZCBsaWJpY29udiBhbmQgbm90IGRpc2FibGVkIGl0cyB1c2UKKysgIGRubCB2aWEgLS13aXRob3V0LWxpYmljb252LXByZWZpeCwgaGUgd2FudHMgdG8gdXNlIGl0LiBUaGUgZmlyc3QKKysgIGRubCBBQ19UUllfTElOSyB3aWxsIHRoZW4gZmFpbCwgdGhlIHNlY29uZCBBQ19UUllfTElOSyB3aWxsIHN1Y2NlZWQuCisrICBhbV9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisrICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNJQ09OVl0pCisrCisrICBBQ19DQUNIRV9DSEVDSyhmb3IgaWNvbnYsIGFtX2N2X2Z1bmNfaWNvbnYsIFsKKysgICAgYW1fY3ZfZnVuY19pY29udj0ibm8sIGNvbnNpZGVyIGluc3RhbGxpbmcgR05VIGxpYmljb252IgorKyAgICBhbV9jdl9saWJfaWNvbnY9bm8KKysgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8aWNvbnYuaD5dLAorKyAgICAgIFtpY29udl90IGNkID0gaWNvbnZfb3BlbigiIiwiIik7CisrICAgICAgIGljb252KGNkLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworKyAgICAgICBpY29udl9jbG9zZShjZCk7XSwKKysgICAgICBhbV9jdl9mdW5jX2ljb252PXllcykKKysgICAgaWYgdGVzdCAiJGFtX2N2X2Z1bmNfaWNvbnYiICE9IHllczsgdGhlbgorKyAgICAgIGFtX3NhdmVfTElCUz0iJExJQlMiCisrICAgICAgTElCUz0iJExJQlMgJExJQklDT05WIgorKyAgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGljb252Lmg+XSwKKysgICAgICAgIFtpY29udl90IGNkID0gaWNvbnZfb3BlbigiIiwiIik7CisrICAgICAgICAgaWNvbnYoY2QsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisrICAgICAgICAgaWNvbnZfY2xvc2UoY2QpO10sCisrICAgICAgICBhbV9jdl9saWJfaWNvbnY9eWVzCisrICAgICAgICBhbV9jdl9mdW5jX2ljb252PXllcykKKysgICAgICBMSUJTPSIkYW1fc2F2ZV9MSUJTIgorKyAgICBmaQorKyAgXSkKKysgIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoSEFWRV9JQ09OViwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgaWNvbnYoKSBmdW5jdGlvbi5dKQorKyAgZmkKKysgIGlmIHRlc3QgIiRhbV9jdl9saWJfaWNvbnYiID0geWVzOyB0aGVuCisrICAgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGxpbmsgd2l0aCBsaWJpY29udl0pCisrICAgIEFDX01TR19SRVNVTFQoWyRMSUJJQ09OVl0pCisrICBlbHNlCisrICAgIGRubCBJZiAkTElCSUNPTlYgZGlkbid0IGxlYWQgdG8gYSB1c2FibGUgbGlicmFyeSwgd2UgZG9uJ3QgbmVlZCAkSU5DSUNPTlYKKysgICAgZG5sIGVpdGhlci4KKysgICAgQ1BQRkxBR1M9IiRhbV9zYXZlX0NQUEZMQUdTIgorKyAgICBMSUJJQ09OVj0KKysgICAgTFRMSUJJQ09OVj0KKysgIGZpCisrICBBQ19TVUJTVChMSUJJQ09OVikKKysgIEFDX1NVQlNUKExUTElCSUNPTlYpCisrXSkKKysKKytBQ19ERUZVTihbQU1fSUNPTlZdLAorK1sKKysgIEFNX0lDT05WX0xJTksKKysgIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiA9IHllczsgdGhlbgorKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBpY29udiBkZWNsYXJhdGlvbl0pCisrICAgIEFDX0NBQ0hFX1ZBTChhbV9jdl9wcm90b19pY29udiwgWworKyAgICAgIEFDX1RSWV9DT01QSUxFKFsKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGljb252Lmg+CisrZXh0ZXJuCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrIkMiCisrI2VuZGlmCisrI2lmIGRlZmluZWQoX19TVERDX18pIHx8IGRlZmluZWQoX19jcGx1c3BsdXMpCisrc2l6ZV90IGljb252IChpY29udl90IGNkLCBjaGFyICogKmluYnVmLCBzaXplX3QgKmluYnl0ZXNsZWZ0LCBjaGFyICogKm91dGJ1Ziwgc2l6ZV90ICpvdXRieXRlc2xlZnQpOworKyNlbHNlCisrc2l6ZV90IGljb252KCk7CisrI2VuZGlmCisrXSwgW10sIGFtX2N2X3Byb3RvX2ljb252X2FyZzE9IiIsIGFtX2N2X3Byb3RvX2ljb252X2FyZzE9ImNvbnN0IikKKysgICAgICBhbV9jdl9wcm90b19pY29udj0iZXh0ZXJuIHNpemVfdCBpY29udiAoaWNvbnZfdCBjZCwgJGFtX2N2X3Byb3RvX2ljb252X2FyZzEgY2hhciAqICppbmJ1Ziwgc2l6ZV90ICppbmJ5dGVzbGVmdCwgY2hhciAqICpvdXRidWYsIHNpemVfdCAqb3V0Ynl0ZXNsZWZ0KTsiXSkKKysgICAgYW1fY3ZfcHJvdG9faWNvbnY9YGVjaG8gIlskXWFtX2N2X3Byb3RvX2ljb252IiB8IHRyIC1zICcgJyB8IHNlZCAtZSAncy8oIC8oLydgCisrICAgIEFDX01TR19SRVNVTFQoWyRde2FjX3Q6LQorKyAgICAgICAgIH1bJF1hbV9jdl9wcm90b19pY29udikKKysgICAgQUNfREVGSU5FX1VOUVVPVEVEKElDT05WX0NPTlNULCAkYW1fY3ZfcHJvdG9faWNvbnZfYXJnMSwKKysgICAgICBbRGVmaW5lIGFzIGNvbnN0IGlmIHRoZSBkZWNsYXJhdGlvbiBvZiBpY29udigpIG5lZWRzIGNvbnN0Ll0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2ludGRpdjAubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2ludGRpdjAubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44NDU2NzM2MDggLTA0MDAKK0BAIC0wLDAgKzEsNzIgQEAKKysjIGludGRpdjAubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMS4zKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrQUNfREVGVU4oW2d0X0lOVERJVjBdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorKworKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaW50ZWdlciBkaXZpc2lvbiBieSB6ZXJvIHJhaXNlcyBTSUdGUEVdLAorKyAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZSwKKysgICAgWworKyAgICAgIEFDX1RSWV9SVU4oWworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c2lnbmFsLmg+CisrCisrc3RhdGljIHZvaWQKKysjaWZkZWYgX19jcGx1c3BsdXMKKytzaWdmcGVfaGFuZGxlciAoaW50IHNpZykKKysjZWxzZQorK3NpZ2ZwZV9oYW5kbGVyIChzaWcpIGludCBzaWc7CisrI2VuZGlmCisreworKyAgLyogRXhpdCB3aXRoIGNvZGUgMCBpZiBTSUdGUEUsIHdpdGggY29kZSAxIGlmIGFueSBvdGhlciBzaWduYWwuICAqLworKyAgZXhpdCAoc2lnICE9IFNJR0ZQRSk7CisrfQorKworK2ludCB4ID0gMTsKKytpbnQgeSA9IDA7CisraW50IHo7CisraW50IG5hbjsKKysKKytpbnQgbWFpbiAoKQorK3sKKysgIHNpZ25hbCAoU0lHRlBFLCBzaWdmcGVfaGFuZGxlcik7CisrLyogSVJJWCBhbmQgQUlYICh3aGVuICJ4bGMgLXFjaGVjayIgaXMgdXNlZCkgeWllbGQgc2lnbmFsIFNJR1RSQVAuICAqLworKyNpZiAoZGVmaW5lZCAoX19zZ2kpIHx8IGRlZmluZWQgKF9BSVgpKSAmJiBkZWZpbmVkIChTSUdUUkFQKQorKyAgc2lnbmFsIChTSUdUUkFQLCBzaWdmcGVfaGFuZGxlcik7CisrI2VuZGlmCisrLyogTGludXgvU1BBUkMgeWllbGRzIHNpZ25hbCBTSUdJTEwuICAqLworKyNpZiBkZWZpbmVkIChfX3NwYXJjX18pICYmIGRlZmluZWQgKF9fbGludXhfXykKKysgIHNpZ25hbCAoU0lHSUxMLCBzaWdmcGVfaGFuZGxlcik7CisrI2VuZGlmCisrCisrICB6ID0geCAvIHk7CisrICBuYW4gPSB5IC8geTsKKysgIGV4aXQgKDEpOworK30KKytdLCBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT15ZXMsIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPW5vLAorKyAgICAgICAgWworKyAgICAgICAgICAjIEd1ZXNzIGJhc2VkIG9uIHRoZSBDUFUuCisrICAgICAgICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKysgICAgICAgICAgICBhbHBoYSogfCBpWzM0NTY3XTg2IHwgbTY4ayB8IHMzOTAqKQorKyAgICAgICAgICAgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9Imd1ZXNzaW5nIHllcyI7OworKyAgICAgICAgICAgICopCisrICAgICAgICAgICAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT0iZ3Vlc3Npbmcgbm8iOzsKKysgICAgICAgICAgZXNhYworKyAgICAgICAgXSkKKysgICAgXSkKKysgIGNhc2UgIiRndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZSIgaW4KKysgICAgKnllcykgdmFsdWU9MTs7CisrICAgICopIHZhbHVlPTA7OworKyAgZXNhYworKyAgQUNfREVGSU5FX1VOUVVPVEVEKElOVERJVjBfUkFJU0VTX1NJR0ZQRSwgJHZhbHVlLAorKyAgICBbRGVmaW5lIGlmIGludGVnZXIgZGl2aXNpb24gYnkgemVybyByYWlzZXMgc2lnbmFsIFNJR0ZQRS5dKQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2ludG1heC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvaW50bWF4Lm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuODU1NjcyMDg4IC0wNDAwCitAQCAtMCwwICsxLDMyIEBACisrIyBpbnRtYXgubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrZG5sIFRlc3Qgd2hldGhlciB0aGUgc3lzdGVtIGhhcyB0aGUgJ2ludG1heF90JyB0eXBlLCBidXQgZG9uJ3QgYXR0ZW1wdCB0bworK2RubCBmaW5kIGEgcmVwbGFjZW1lbnQgaWYgaXQgaXMgbGFja2luZy4KKysKKytBQ19ERUZVTihbZ3RfVFlQRV9JTlRNQVhfVF0sCisrWworKyAgQUNfUkVRVUlSRShbam1fQUNfSEVBREVSX0lOVFRZUEVTX0hdKQorKyAgQUNfUkVRVUlSRShbam1fQUNfSEVBREVSX1NURElOVF9IXSkKKysgIEFDX0NBQ0hFX0NIRUNLKGZvciBpbnRtYXhfdCwgZ3RfY3ZfY19pbnRtYXhfdCwKKysgICAgW0FDX1RSWV9DT01QSUxFKFsKKysjaW5jbHVkZSA8c3RkZGVmLmg+IAorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaWYgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVgKKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrI2VuZGlmCisrI2lmIEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVgKKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysjZW5kaWYKKytdLCBbaW50bWF4X3QgeCA9IC0xO10sIGd0X2N2X2NfaW50bWF4X3Q9eWVzLCBndF9jdl9jX2ludG1heF90PW5vKV0pCisrICBpZiB0ZXN0ICRndF9jdl9jX2ludG1heF90ID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX0lOVE1BWF9ULCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdpbnRtYXhfdCcgdHlwZSBpbiA8c3RkaW50Lmg+IG9yIDxpbnR0eXBlcy5oPi5dKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9pbnR0eXBlc19oLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9pbnR0eXBlc19oLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuODY4NjcwMTEyIC0wNDAwCitAQCAtMCwwICsxLDI4IEBACisrIyBpbnR0eXBlc19oLm00IHNlcmlhbCA1IChnZXR0ZXh0LTAuMTIpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrIyBEZWZpbmUgSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWCBpZiA8aW50dHlwZXMuaD4gZXhpc3RzLAorKyMgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sIGFuZCBkZWNsYXJlcyB1aW50bWF4X3QuCisrCisrQUNfREVGVU4oW2ptX0FDX0hFQURFUl9JTlRUWVBFU19IXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIGludHR5cGVzLmhdLCBqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaCwKKysgIFtBQ19UUllfQ09NUElMRSgKKysgICAgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD5dLAorKyAgICBbdWludG1heF90IGkgPSAodWludG1heF90KSAtMTtdLAorKyAgICBqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaD15ZXMsCisrICAgIGptX2FjX2N2X2hlYWRlcl9pbnR0eXBlc19oPW5vKV0pCisrICBpZiB0ZXN0ICRqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWCwgMSwKKysgICAgICBbRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMsIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LAorKyAgICAgICBhbmQgZGVjbGFyZXMgdWludG1heF90LiBdKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9pbnR0eXBlcy5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvaW50dHlwZXMubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44NjE2NzExNzYgLTA0MDAKK0BAIC0wLDAgKzEsMjcgQEAKKysjIGludHR5cGVzLm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTEuNCkKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKysKKysjIERlZmluZSBIQVZFX0lOVFRZUEVTX0ggaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZG9lc24ndCBjbGFzaCB3aXRoCisrIyA8c3lzL3R5cGVzLmg+LgorKworK0FDX0RFRlVOKFtndF9IRUFERVJfSU5UVFlQRVNfSF0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBpbnR0eXBlcy5oXSwgZ3RfY3ZfaGVhZGVyX2ludHR5cGVzX2gsCisrICBbCisrICAgIEFDX1RSWV9DT01QSUxFKAorKyAgICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+XSwKKysgICAgICBbXSwgZ3RfY3ZfaGVhZGVyX2ludHR5cGVzX2g9eWVzLCBndF9jdl9oZWFkZXJfaW50dHlwZXNfaD1ubykKKysgIF0pCisrICBpZiB0ZXN0ICRndF9jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9JTlRUWVBFU19ILCAxLAorKyAgICAgIFtEZWZpbmUgaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4uXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvaW50dHlwZXMtcHJpLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9pbnR0eXBlcy1wcmkubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44NzQ2NjkyMDAgLTA0MDAKK0BAIC0wLDAgKzEsMzIgQEAKKysjIGludHR5cGVzLXByaS5tNCBzZXJpYWwgMSAoZ2V0dGV4dC0wLjExLjQpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworKyMgRGVmaW5lIFBSSV9NQUNST1NfQlJPS0VOIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMgYW5kIGRlZmluZXMgdGhlIFBSSSoKKysjIG1hY3JvcyB0byBub24tc3RyaW5nIHZhbHVlcy4gIFRoaXMgaXMgdGhlIGNhc2Ugb24gQUlYIDQuMy4zLgorKworK0FDX0RFRlVOKFtndF9JTlRUWVBFU19QUkldLAorK1sKKysgIEFDX1JFUVVJUkUoW2d0X0hFQURFUl9JTlRUWVBFU19IXSkKKysgIGlmIHRlc3QgJGd0X2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuCisrICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBpbnR0eXBlcy5oIFBSSXhOTiBtYWNyb3MgYXJlIGJyb2tlbl0sCisrICAgICAgZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbiwKKysgICAgICBbCisrICAgICAgICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPGludHR5cGVzLmg+CisrI2lmZGVmIFBSSWQzMgorK2NoYXIgKnAgPSBQUklkMzI7CisrI2VuZGlmCisrXSwgW10sIGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW49bm8sIGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW49eWVzKQorKyAgICAgIF0pCisrICBmaQorKyAgaWYgdGVzdCAiJGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW4iID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChQUklfTUFDUk9TX0JST0tFTiwgMSwKKysgICAgICBbRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMgYW5kIGRlZmluZXMgdW51c2FibGUgUFJJKiBtYWNyb3MuXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvaXNjLXBvc2l4Lm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9pc2MtcG9zaXgubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44ODU2Njc1MjggLTA0MDAKK0BAIC0wLDAgKzEsMjYgQEAKKysjIGlzYy1wb3NpeC5tNCBzZXJpYWwgMiAoZ2V0dGV4dC0wLjExLjIpCisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrIyBUaGlzIGZpbGUgaXMgbm90IG5lZWRlZCB3aXRoIGF1dG9jb25mLTIuNTMgYW5kIG5ld2VyLiAgUmVtb3ZlIGl0IGluIDIwMDUuCisrCisrIyBUaGlzIHRlc3QgcmVwbGFjZXMgdGhlIG9uZSBpbiBhdXRvY29uZi4KKysjIEN1cnJlbnRseSB0aGlzIG1hY3JvIHNob3VsZCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGF1dG9jb25mIG1hY3JvCisrIyBiZWNhdXNlIGdldHRleHQncyBnZXR0ZXh0Lm00IChkaXN0cmlidXRlZCBpbiB0aGUgYXV0b21ha2UgcGFja2FnZSkKKysjIHN0aWxsIHVzZXMgaXQuICBPdGhlcndpc2UsIHRoZSB1c2UgaW4gZ2V0dGV4dC5tNCBtYWtlcyBhdXRvaGVhZGVyCisrIyBnaXZlIHRoZXNlIGRpYWdub3N0aWNzOgorKyMgICBjb25maWd1cmUuaW46NTU2OiBBQ19UUllfQ09NUElMRSB3YXMgY2FsbGVkIGJlZm9yZSBBQ19JU0NfUE9TSVgKKysjICAgY29uZmlndXJlLmluOjU1NjogQUNfVFJZX1JVTiB3YXMgY2FsbGVkIGJlZm9yZSBBQ19JU0NfUE9TSVgKKysKKyt1bmRlZmluZShbQUNfSVNDX1BPU0lYXSkKKysKKytBQ19ERUZVTihbQUNfSVNDX1BPU0lYXSwKKysgIFsKKysgICAgZG5sIFRoaXMgdGVzdCByZXBsYWNlcyB0aGUgb2Jzb2xlc2NlbnQgQUNfSVNDX1BPU0lYIGtsdWRnZS4KKysgICAgQUNfQ0hFQ0tfTElCKGNwb3NpeCwgc3RyZXJyb3IsIFtMSUJTPSIkTElCUyAtbGNwb3NpeCJdKQorKyAgXQorKykKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvbGNtZXNzYWdlLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9sY21lc3NhZ2UubTQJMjAwNC0wOS0xMiAxNDo0MDozNC45MDI2NjQ5NDQgLTA0MDAKK0BAIC0wLDAgKzEsMzIgQEAKKysjIGxjbWVzc2FnZS5tNCBzZXJpYWwgMyAoZ2V0dGV4dC0wLjExLjMpCisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrZG5sCisrZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKKytkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CisrZG5sIGZ1bmN0aW9uYWxpdHkuCisrZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKytkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCisrZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKysKKytkbmwgQXV0aG9yczoKKytkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS4KKysKKysjIENoZWNrIHdoZXRoZXIgTENfTUVTU0FHRVMgaXMgYXZhaWxhYmxlIGluIDxsb2NhbGUuaD4uCisrCisrQUNfREVGVU4oW0FNX0xDX01FU1NBR0VTXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIExDX01FU1NBR0VTXSwgYW1fY3ZfdmFsX0xDX01FU1NBR0VTLAorKyAgICBbQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsb2NhbGUuaD5dLCBbcmV0dXJuIExDX01FU1NBR0VTXSwKKysgICAgICAgYW1fY3ZfdmFsX0xDX01FU1NBR0VTPXllcywgYW1fY3ZfdmFsX0xDX01FU1NBR0VTPW5vKV0pCisrICBpZiB0ZXN0ICRhbV9jdl92YWxfTENfTUVTU0FHRVMgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfTENfTUVTU0FHRVMsIDEsCisrICAgICAgW0RlZmluZSBpZiB5b3VyIDxsb2NhbGUuaD4gZmlsZSBkZWZpbmVzIExDX01FU1NBR0VTLl0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2xpYi1sZC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvbGliLWxkLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTA4NjY0MDMyIC0wNDAwCitAQCAtMCwwICsxLDExMiBAQAorKyMgbGliLWxkLm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTMpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ni0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIFN1YnJvdXRpbmVzIG9mIGxpYnRvb2wubTQsCisrZG5sIHdpdGggcmVwbGFjZW1lbnRzIHMvQUNfL0FDX0xJQi8gYW5kIHMvbHRfY3YvYWNsX2N2LyB0byBhdm9pZCBjb2xsaXNpb24KKytkbmwgd2l0aCBsaWJ0b29sLm00LgorKworK2RubCBGcm9tIGxpYnRvb2wtMS40LiBTZXRzIHRoZSB2YXJpYWJsZSB3aXRoX2dudV9sZCB0byB5ZXMgb3Igbm8uCisrQUNfREVGVU4oW0FDX0xJQl9QUk9HX0xEX0dOVV0sCisrW0FDX0NBQ0hFX0NIRUNLKFtpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZF0sIGFjbF9jdl9wcm9nX2dudV9sZCwKKytbIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGQncyBvbmx5IGFjY2VwdCAtdi4KKytjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKypHTlUqIHwgKid3aXRoIEJGRCcqKQorKyAgYWNsX2N2X3Byb2dfZ251X2xkPXllcyA7OworKyopCisrICBhY2xfY3ZfcHJvZ19nbnVfbGQ9bm8gOzsKKytlc2FjXSkKKyt3aXRoX2dudV9sZD0kYWNsX2N2X3Byb2dfZ251X2xkCisrXSkKKysKKytkbmwgRnJvbSBsaWJ0b29sLTEuNC4gU2V0cyB0aGUgdmFyaWFibGUgTEQuCisrQUNfREVGVU4oW0FDX0xJQl9QUk9HX0xEXSwKKytbQUNfQVJHX1dJVEgoZ251LWxkLAorK1sgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub11dLAorK3Rlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllcywgd2l0aF9nbnVfbGQ9bm8pCisrQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCisrQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorKyMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KKysjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KKytpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorKyAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAorKyAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAorKyAgY2htb2QgK3ggY29uZiQkLnNoCisrICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICBQQVRIX1NFUEFSQVRPUj0nOycKKysgIGVsc2UKKysgICAgUEFUSF9TRVBBUkFUT1I9OgorKyAgZmkKKysgIHJtIC1mIGNvbmYkJC5zaAorK2ZpCisrYWNfcHJvZz1sZAorK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKysgIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgR0NDXSkKKysgIGNhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyopCisrICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKysgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OworKyAgKikKKysgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworKyAgZXNhYworKyAgY2FzZSAkYWNfcHJvZyBpbgorKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKysgICAgW1tcXC9dKiB8IFtBLVphLXpdOltcXC9dKildCisrICAgICAgW3JlX2RpcmVsdD0nL1teL11bXi9dKi9cLlwuLyddCisrICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGggb2YgbGQKKysgICAgICBhY19wcm9nPWBlY2hvICRhY19wcm9nfCBzZWQgJ3MlXFxcXCUvJWcnYAorKyAgICAgIHdoaWxlIGVjaG8gJGFjX3Byb2cgfCBncmVwICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworKwlhY19wcm9nPWBlY2hvICRhY19wcm9nfCBzZWQgInMlJHJlX2RpcmVsdCUvJSJgCisrICAgICAgZG9uZQorKyAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgorKyAgICAgIDs7CisrICAiIikKKysgICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCisrICAgIGFjX3Byb2c9bGQKKysgICAgOzsKKysgICopCisrICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKysgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorKyAgICA7OworKyAgZXNhYworK2VsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgR05VIGxkXSkKKytlbHNlCisrICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBub24tR05VIGxkXSkKKytmaQorK0FDX0NBQ0hFX1ZBTChhY2xfY3ZfcGF0aF9MRCwKKytbaWYgdGVzdCAteiAiJExEIjsgdGhlbgorKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JHtQQVRIX1NFUEFSQVRPUi06fSIKKysgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisrICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisrICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorKyAgICAgIGFjbF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgorKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKysgICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkJ3Mgb25seSBhY2NlcHQgLXYuCisrICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCisrICAgICAgY2FzZSBgIiRhY2xfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8IC9kZXYvbnVsbGAgaW4KKysgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKysJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhayA7OworKyAgICAgICopCisrCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrIDs7CisrICAgICAgZXNhYworKyAgICBmaQorKyAgZG9uZQorKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCisrZWxzZQorKyAgYWNsX2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisrZmldKQorK0xEPSIkYWNsX2N2X3BhdGhfTEQiCisraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorKyAgQUNfTVNHX1JFU1VMVCgkTEQpCisrZWxzZQorKyAgQUNfTVNHX1JFU1VMVChubykKKytmaQorK3Rlc3QgLXogIiRMRCIgJiYgQUNfTVNHX0VSUk9SKFtubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSF0pCisrQUNfTElCX1BST0dfTERfR05VCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvbGliLWxpbmsubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2xpYi1saW5rLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTE0NjYzMTIwIC0wNDAwCitAQCAtMCwwICsxLDU1MSBAQAorKyMgbGliLWxpbmsubTQgc2VyaWFsIDQgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrZG5sIEFDX0xJQl9MSU5LRkxBR1MobmFtZSBbLCBkZXBlbmRlbmNpZXNdKSBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQKKytkbmwgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMuCisrZG5sIFNldHMgYW5kIEFDX1NVQlNUcyB0aGUgTElCJHtOQU1FfSBhbmQgTFRMSUIke05BTUV9IHZhcmlhYmxlcyBhbmQKKytkbmwgYXVnbWVudHMgdGhlIENQUEZMQUdTIHZhcmlhYmxlLgorK0FDX0RFRlVOKFtBQ19MSUJfTElOS0ZMQUdTXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKysgIGRlZmluZShbTmFtZV0sW3RyYW5zbGl0KFskMV0sWy4vLV0sIFtfX19dKV0pCisrICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSkKKysgIEFDX0NBQ0hFX0NIRUNLKFtob3cgdG8gbGluayB3aXRoIGxpYltdJDFdLCBbYWNfY3ZfbGliW11OYW1lW11fbGlic10sIFsKKysgICAgQUNfTElCX0xJTktGTEFHU19CT0RZKFskMV0sIFskMl0pCisrICAgIGFjX2N2X2xpYltdTmFtZVtdX2xpYnM9IiRMSUJbXU5BTUUiCisrICAgIGFjX2N2X2xpYltdTmFtZVtdX2x0bGlicz0iJExUTElCW11OQU1FIgorKyAgICBhY19jdl9saWJbXU5hbWVbXV9jcHBmbGFncz0iJElOQ1tdTkFNRSIKKysgIF0pCisrICBMSUJbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9saWJzIgorKyAgTFRMSUJbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9sdGxpYnMiCisrICBJTkNbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9jcHBmbGFncyIKKysgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ11OQU1FKQorKyAgQUNfU1VCU1QoW0xJQl1OQU1FKQorKyAgQUNfU1VCU1QoW0xUTElCXU5BTUUpCisrICBkbmwgQWxzbyBzZXQgSEFWRV9MSUJbXU5BTUUgc28gdGhhdCBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgY2FuIHJldXNlIHRoZQorKyAgZG5sIHJlc3VsdHMgb2YgdGhpcyBzZWFyY2ggd2hlbiB0aGlzIGxpYnJhcnkgYXBwZWFycyBhcyBhIGRlcGVuZGVuY3kuCisrICBIQVZFX0xJQltdTkFNRT15ZXMKKysgIHVuZGVmaW5lKFtOYW1lXSkKKysgIHVuZGVmaW5lKFtOQU1FXSkKKytdKQorKworK2RubCBBQ19MSUJfSEFWRV9MSU5LRkxBR1MobmFtZSwgZGVwZW5kZW5jaWVzLCBpbmNsdWRlcywgdGVzdGNvZGUpCisrZG5sIHNlYXJjaGVzIGZvciBsaWJuYW1lIGFuZCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kCisrZG5sIGltcGxpY2l0IGRlcGVuZGVuY2llcywgdG9nZXRoZXIgd2l0aCB0aGUgc3BlY2lmaWVkIGluY2x1ZGUgZmlsZXMgYW5kCisrZG5sIHRoZSBhYmlsaXR5IHRvIGNvbXBpbGUgYW5kIGxpbmsgdGhlIHNwZWNpZmllZCB0ZXN0Y29kZS4gSWYgZm91bmQsIGl0CisrZG5sIHNldHMgYW5kIEFDX1NVQlNUcyBIQVZFX0xJQiR7TkFNRX09eWVzIGFuZCB0aGUgTElCJHtOQU1FfSBhbmQKKytkbmwgTFRMSUIke05BTUV9IHZhcmlhYmxlcyBhbmQgYXVnbWVudHMgdGhlIENQUEZMQUdTIHZhcmlhYmxlLCBhbmQKKytkbmwgI2RlZmluZXMgSEFWRV9MSUIke05BTUV9IHRvIDEuIE90aGVyd2lzZSwgaXQgc2V0cyBhbmQgQUNfU1VCU1RzCisrZG5sIEhBVkVfTElCJHtOQU1FfT1ubyBhbmQgTElCJHtOQU1FfSBhbmQgTFRMSUIke05BTUV9IHRvIGVtcHR5LgorK0FDX0RFRlVOKFtBQ19MSUJfSEFWRV9MSU5LRkxBR1NdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQorKyAgZGVmaW5lKFtOYW1lXSxbdHJhbnNsaXQoWyQxXSxbLi8tXSwgW19fX10pXSkKKysgIGRlZmluZShbTkFNRV0sW3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSldKQorKworKyAgZG5sIFNlYXJjaCBmb3IgbGliW11OYW1lIGFuZCBkZWZpbmUgTElCW11OQU1FLCBMVExJQltdTkFNRSBhbmQgSU5DW11OQU1FCisrICBkbmwgYWNjb3JkaW5nbHkuCisrICBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoWyQxXSwgWyQyXSkKKysKKysgIGRubCBBZGQgJElOQ1tdTkFNRSB0byBDUFBGTEFHUyBiZWZvcmUgcGVyZm9ybWluZyB0aGUgZm9sbG93aW5nIGNoZWNrcywKKysgIGRubCBiZWNhdXNlIGlmIHRoZSB1c2VyIGhhcyBpbnN0YWxsZWQgbGliW11OYW1lIGFuZCBub3QgZGlzYWJsZWQgaXRzIHVzZQorKyAgZG5sIHZpYSAtLXdpdGhvdXQtbGliW11OYW1lLXByZWZpeCwgaGUgd2FudHMgdG8gdXNlIGl0LgorKyAgYWNfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorKyAgQUNfTElCX0FQUEVORFRPVkFSKFtDUFBGTEFHU10sIFskSU5DXU5BTUUpCisrCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIGxpYltdJDFdLCBbYWNfY3ZfbGliW11OYW1lXSwgWworKyAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgorKyAgICBMSUJTPSIkTElCUyAkTElCW11OQU1FIgorKyAgICBBQ19UUllfTElOSyhbJDNdLCBbJDRdLCBbYWNfY3ZfbGliW11OYW1lPXllc10sIFthY19jdl9saWJbXU5hbWU9bm9dKQorKyAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorKyAgXSkKKysgIGlmIHRlc3QgIiRhY19jdl9saWJbXU5hbWUiID0geWVzOyB0aGVuCisrICAgIEhBVkVfTElCW11OQU1FPXllcworKyAgICBBQ19ERUZJTkUoW0hBVkVfTElCXU5BTUUsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICQxIGxpYnJhcnkuXSkKKysgICAgQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gbGluayB3aXRoIGxpYltdJDFdKQorKyAgICBBQ19NU0dfUkVTVUxUKFskTElCW11OQU1FXSkKKysgIGVsc2UKKysgICAgSEFWRV9MSUJbXU5BTUU9bm8KKysgICAgZG5sIElmICRMSUJbXU5BTUUgZGlkbid0IGxlYWQgdG8gYSB1c2FibGUgbGlicmFyeSwgd2UgZG9uJ3QgbmVlZAorKyAgICBkbmwgJElOQ1tdTkFNRSBlaXRoZXIuCisrICAgIENQUEZMQUdTPSIkYWNfc2F2ZV9DUFBGTEFHUyIKKysgICAgTElCW11OQU1FPQorKyAgICBMVExJQltdTkFNRT0KKysgIGZpCisrICBBQ19TVUJTVChbSEFWRV9MSUJdTkFNRSkKKysgIEFDX1NVQlNUKFtMSUJdTkFNRSkKKysgIEFDX1NVQlNUKFtMVExJQl1OQU1FKQorKyAgdW5kZWZpbmUoW05hbWVdKQorKyAgdW5kZWZpbmUoW05BTUVdKQorK10pCisrCisrZG5sIERldGVybWluZSB0aGUgcGxhdGZvcm0gZGVwZW5kZW50IHBhcmFtZXRlcnMgbmVlZGVkIHRvIHVzZSBycGF0aDoKKytkbmwgbGliZXh0LCBzaGxpYmV4dCwgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwKKytkbmwgaGFyZGNvZGVfZGlyZWN0LCBoYXJkY29kZV9taW51c19MLgorK0FDX0RFRlVOKFtBQ19MSUJfUlBBVEhdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKSAgICAgICAgICAgICAgICBkbmwgd2UgdXNlICRDQywgJEdDQywgJExERkxBR1MKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUk9HX0xEXSkgICAgICAgICAgICBkbmwgd2UgdXNlICRMRCwgJHdpdGhfZ251X2xkCisrICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pICAgICAgICAgZG5sIHdlIHVzZSAkaG9zdAorKyAgQUNfUkVRVUlSRShbQUNfQ09ORklHX0FVWF9ESVJfREVGQVVMVF0pIGRubCB3ZSB1c2UgJGFjX2F1eF9kaXIKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igc2hhcmVkIGxpYnJhcnkgcnVuIHBhdGggb3JpZ2luXSwgYWNsX2N2X3JwYXRoLCBbCisrICAgIENDPSIkQ0MiIEdDQz0iJEdDQyIgTERGTEFHUz0iJExERkxBR1MiIExEPSIkTEQiIHdpdGhfZ251X2xkPSIkd2l0aF9nbnVfbGQiIFwKKysgICAgJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gIiRhY19hdXhfZGlyL2NvbmZpZy5ycGF0aCIgIiRob3N0IiA+IGNvbmZ0ZXN0LnNoCisrICAgIC4gLi9jb25mdGVzdC5zaAorKyAgICBybSAtZiAuL2NvbmZ0ZXN0LnNoCisrICAgIGFjbF9jdl9ycGF0aD1kb25lCisrICBdKQorKyAgd2w9IiRhY2xfY3Zfd2wiCisrICBsaWJleHQ9IiRhY2xfY3ZfbGliZXh0IgorKyAgc2hsaWJleHQ9IiRhY2xfY3Zfc2hsaWJleHQiCisrICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkYWNsX2N2X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiCisrICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSIkYWNsX2N2X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiCisrICBoYXJkY29kZV9kaXJlY3Q9IiRhY2xfY3ZfaGFyZGNvZGVfZGlyZWN0IgorKyAgaGFyZGNvZGVfbWludXNfTD0iJGFjbF9jdl9oYXJkY29kZV9taW51c19MIgorKyAgZG5sIERldGVybWluZSB3aGV0aGVyIHRoZSB1c2VyIHdhbnRzIHJwYXRoIGhhbmRsaW5nIGF0IGFsbC4KKysgIEFDX0FSR19FTkFCTEUocnBhdGgsCisrICAgIFsgIC0tZGlzYWJsZS1ycGF0aCAgICAgICAgIGRvIG5vdCBoYXJkY29kZSBydW50aW1lIGxpYnJhcnkgcGF0aHNdLAorKyAgICA6LCBlbmFibGVfcnBhdGg9eWVzKQorK10pCisrCisrZG5sIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShuYW1lIFssIGRlcGVuZGVuY2llc10pIHNlYXJjaGVzIGZvciBsaWJuYW1lIGFuZAorK2RubCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kIGltcGxpY2l0IGRlcGVuZGVuY2llcy4KKytkbmwgU2V0cyB0aGUgTElCJHtOQU1FfSwgTFRMSUIke05BTUV9IGFuZCBJTkMke05BTUV9IHZhcmlhYmxlcy4KKytBQ19ERUZVTihbQUNfTElCX0xJTktGTEFHU19CT0RZXSwKKytbCisrICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSkKKysgIGRubCBCeSBkZWZhdWx0LCBsb29rIGluICRpbmNsdWRlZGlyIGFuZCAkbGliZGlyLgorKyAgdXNlX2FkZGl0aW9uYWw9eWVzCisrICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworKyAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKysgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorKyAgXSkKKysgIEFDX0xJQl9BUkdfV0lUSChbbGliJDEtcHJlZml4XSwKKytbICAtLXdpdGgtbGliJDEtcHJlZml4Wz1ESVJdICBzZWFyY2ggZm9yIGxpYiQxIGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCisrICAtLXdpdGhvdXQtbGliJDEtcHJlZml4ICAgICBkb24ndCBzZWFyY2ggZm9yIGxpYiQxIGluIGluY2x1ZGVkaXIgYW5kIGxpYmRpcl0sCisrWworKyAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlhubyI7IHRoZW4KKysgICAgICB1c2VfYWRkaXRpb25hbD1ubworKyAgICBlbHNlCisrICAgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYIjsgdGhlbgorKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKysgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisrICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKysgICAgICAgIF0pCisrICAgICAgZWxzZQorKyAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgorKyAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9IiR3aXRodmFsL2xpYiIKKysgICAgICBmaQorKyAgICBmaQorK10pCisrICBkbmwgU2VhcmNoIHRoZSBsaWJyYXJ5IGFuZCBpdHMgZGVwZW5kZW5jaWVzIGluICRhZGRpdGlvbmFsX2xpYmRpciBhbmQKKysgIGRubCAkTERGTEFHUy4gVXNpbmcgYnJlYWR0aC1maXJzdC1zZWFjaC4KKysgIExJQltdTkFNRT0KKysgIExUTElCW11OQU1FPQorKyAgSU5DW11OQU1FPQorKyAgcnBhdGhkaXJzPQorKyAgbHRycGF0aGRpcnM9CisrICBuYW1lc19hbHJlYWR5X2hhbmRsZWQ9CisrICBuYW1lc19uZXh0X3JvdW5kPSckMSAkMicKKysgIHdoaWxlIHRlc3QgLW4gIiRuYW1lc19uZXh0X3JvdW5kIjsgZG8KKysgICAgbmFtZXNfdGhpc19yb3VuZD0iJG5hbWVzX25leHRfcm91bmQiCisrICAgIG5hbWVzX25leHRfcm91bmQ9CisrICAgIGZvciBuYW1lIGluICRuYW1lc190aGlzX3JvdW5kOyBkbworKyAgICAgIGFscmVhZHlfaGFuZGxlZD0KKysgICAgICBmb3IgbiBpbiAkbmFtZXNfYWxyZWFkeV9oYW5kbGVkOyBkbworKyAgICAgICAgaWYgdGVzdCAiJG4iID0gIiRuYW1lIjsgdGhlbgorKyAgICAgICAgICBhbHJlYWR5X2hhbmRsZWQ9eWVzCisrICAgICAgICAgIGJyZWFrCisrICAgICAgICBmaQorKyAgICAgIGRvbmUKKysgICAgICBpZiB0ZXN0IC16ICIkYWxyZWFkeV9oYW5kbGVkIjsgdGhlbgorKyAgICAgICAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPSIkbmFtZXNfYWxyZWFkeV9oYW5kbGVkICRuYW1lIgorKyAgICAgICAgZG5sIFNlZSBpZiBpdCB3YXMgYWxyZWFkeSBsb2NhdGVkIGJ5IGFuIGVhcmxpZXIgQUNfTElCX0xJTktGTEFHUworKyAgICAgICAgZG5sIG9yIEFDX0xJQl9IQVZFX0xJTktGTEFHUyBjYWxsLgorKyAgICAgICAgdXBwZXJuYW1lPWBlY2hvICIkbmFtZSIgfCBzZWQgLWUgJ3l8YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy18QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX198J2AKKysgICAgICAgIGV2YWwgdmFsdWU9XCJcJEhBVkVfTElCJHVwcGVybmFtZVwiCisrICAgICAgICBpZiB0ZXN0IC1uICIkdmFsdWUiOyB0aGVuCisrICAgICAgICAgIGlmIHRlc3QgIiR2YWx1ZSIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgICBldmFsIHZhbHVlPVwiXCRMSUIkdXBwZXJuYW1lXCIKKysgICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JHZhbHVlIgorKyAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExUTElCJHVwcGVybmFtZVwiCisrICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfSR2YWx1ZSIKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGRubCBBbiBlYXJsaWVyIGNhbGwgdG8gQUNfTElCX0hBVkVfTElOS0ZMQUdTIGhhcyBkZXRlcm1pbmVkCisrICAgICAgICAgICAgZG5sIHRoYXQgdGhpcyBsaWJyYXJ5IGRvZXNuJ3QgZXhpc3QuIFNvIGp1c3QgZHJvcCBpdC4KKysgICAgICAgICAgICA6CisrICAgICAgICAgIGZpCisrICAgICAgICBlbHNlCisrICAgICAgICAgIGRubCBTZWFyY2ggdGhlIGxpYnJhcnkgbGliJG5hbWUgaW4gJGFkZGl0aW9uYWxfbGliZGlyIGFuZCAkTERGTEFHUworKyAgICAgICAgICBkbmwgYW5kIHRoZSBhbHJlYWR5IGNvbnN0cnVjdGVkICRMSUJOQU1FLyRMVExJQk5BTUUuCisrICAgICAgICAgIGZvdW5kX2Rpcj0KKysgICAgICAgICAgZm91bmRfbGE9CisrICAgICAgICAgIGZvdW5kX3NvPQorKyAgICAgICAgICBmb3VuZF9hPQorKyAgICAgICAgICBpZiB0ZXN0ICR1c2VfYWRkaXRpb25hbCA9IHllczsgdGhlbgorKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYmV4dCIgJiYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgorKyAgICAgICAgICAgICAgZm91bmRfc289IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kc2hsaWJleHQiCisrICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiOyB0aGVuCisrICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kbGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKKysgICAgICAgICAgICAgICAgZm91bmRfYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRsaWJleHQiCisrICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5sYSI7IHRoZW4KKysgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIgorKyAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBmaQorKyAgICAgICAgICBmaQorKyAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKysgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJbXU5BTUU7IGRvCisrICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgICAgICAgY2FzZSAiJHgiIGluCisrICAgICAgICAgICAgICAgIC1MKikKKysgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkeCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJleHQiICYmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUuJHNobGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorKyAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvbGliJG5hbWUuJHNobGliZXh0IgorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS5sYSI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvbGliJG5hbWUubGEiCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUuJGxpYmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyL2xpYiRuYW1lLiRsaWJleHQiCisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUubGEiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvbGliJG5hbWUubGEiCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICBmaQorKyAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgZG5sIEZvdW5kIHRoZSBsaWJyYXJ5LgorKyAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiCisrICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9zbyIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgICBkbmwgTGlua2luZyB3aXRoIGEgc2hhcmVkIGxpYnJhcnkuIFdlIGF0dGVtcHQgdG8gaGFyZGNvZGUgaXRzCisrICAgICAgICAgICAgICBkbmwgZGlyZWN0b3J5IGludG8gdGhlIGV4ZWN1dGFibGUncyBydW5wYXRoLCB1bmxlc3MgaXQncyB0aGUKKysgICAgICAgICAgICAgIGRubCBzdGFuZGFyZCAvdXNyL2xpYi4KKysgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiID0gbm8gfHwgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgvdXNyL2xpYiI7IHRoZW4KKysgICAgICAgICAgICAgICAgZG5sIE5vIGhhcmRjb2RpbmcgaXMgbmVlZGVkLgorKyAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKysgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgZG5sIFVzZSBhbiBleHBsaWNpdCBvcHRpb24gdG8gaGFyZGNvZGUgRElSIGludG8gdGhlIHJlc3VsdGluZworKyAgICAgICAgICAgICAgICBkbmwgYmluYXJ5LgorKyAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBsdHJwYXRoZGlycy4KKysgICAgICAgICAgICAgICAgZG5sIFRoZSBsdHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMVExJQk5BTUUgYXQgdGhlIGVuZC4KKysgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICBmb3IgeCBpbiAkbHRycGF0aGRpcnM7IGRvCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGZvdW5kX2RpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgIGx0cnBhdGhkaXJzPSIkbHRycGF0aGRpcnMgJGZvdW5kX2RpciIKKysgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgZG5sIFRoZSBoYXJkY29kaW5nIGludG8gJExJQk5BTUUgaXMgc3lzdGVtIGRlcGVuZGVudC4KKysgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgICAgICAgICBkbmwgVXNpbmcgRElSL2xpYk5BTUUuc28gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorKyAgICAgICAgICAgICAgICAgIGRubCByZXN1bHRpbmcgYmluYXJ5LgorKyAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorKyAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiICYmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IG5vOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBkbmwgVXNlIGFuIGV4cGxpY2l0IG9wdGlvbiB0byBoYXJkY29kZSBESVIgaW50byB0aGUgcmVzdWx0aW5nCisrICAgICAgICAgICAgICAgICAgICBkbmwgYmluYXJ5LgorKyAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisrICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBycGF0aGRpcnMuCisrICAgICAgICAgICAgICAgICAgICBkbmwgVGhlIHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMSUJOQU1FIGF0IHRoZSBlbmQuCisrICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbworKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZm91bmRfZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRmb3VuZF9kaXIiCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgIGRubCBSZWx5IG9uICItTCRmb3VuZF9kaXIiLgorKyAgICAgICAgICAgICAgICAgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQgaWYgaXQncyBhbHJlYWR5IGNvbnRhaW5lZCBpbiB0aGUgTERGTEFHUworKyAgICAgICAgICAgICAgICAgICAgZG5sIG9yIHRoZSBhbHJlYWR5IGNvbnN0cnVjdGVkICRMSUJOQU1FCisrICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTElCW11OQU1FOyBkbworKyAgICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRmb3VuZF9kaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1MJGZvdW5kX2RpciIKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZG5sIEZJWE1FOiBOb3Qgc3VyZSB3aGV0aGVyIHdlIHNob3VsZCB1c2UKKysgICAgICAgICAgICAgICAgICAgICAgZG5sICItTCRmb3VuZF9kaXIgLWwkbmFtZSIgb3IgIi1MJGZvdW5kX2RpciAkZm91bmRfc28iCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLgorKyAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIFdlIGNhbm5vdCB1c2UgJGhhcmRjb2RlX3J1bnBhdGhfdmFyIGFuZCBMRF9SVU5fUEFUSAorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgaGVyZSwgYmVjYXVzZSB0aGlzIGRvZXNuJ3QgZml0IGluIGZsYWdzIHBhc3NlZCB0byB0aGUKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIGNvbXBpbGVyLiBTbyBnaXZlIHVwLiBObyBoYXJkY29kaW5nLiBUaGlzIGFmZmVjdHMgb25seQorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgdmVyeSBvbGQgc3lzdGVtcy4KKysgICAgICAgICAgICAgICAgICAgICAgZG5sIEZJWE1FOiBOb3Qgc3VyZSB3aGV0aGVyIHdlIHNob3VsZCB1c2UKKysgICAgICAgICAgICAgICAgICAgICAgZG5sICItTCRmb3VuZF9kaXIgLWwkbmFtZSIgb3IgIi1MJGZvdW5kX2RpciAkZm91bmRfc28iCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLgorKyAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1sJG5hbWUiCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfYSIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgICAgIGRubCBMaW5raW5nIHdpdGggYSBzdGF0aWMgbGlicmFyeS4KKysgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfYSIKKysgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgZG5sIFdlIHNob3VsZG4ndCBjb21lIGhlcmUsIGJ1dCBhbnl3YXkgaXQncyBnb29kIHRvIGhhdmUgYQorKyAgICAgICAgICAgICAgICBkbmwgZmFsbGJhY2suCisrICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZG5sIEFzc3VtZSB0aGUgaW5jbHVkZSBmaWxlcyBhcmUgbmVhcmJ5LgorKyAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0KKysgICAgICAgICAgICBjYXNlICIkZm91bmRfZGlyIiBpbgorKyAgICAgICAgICAgICAgKi9saWIgfCAqL2xpYi8pCisrICAgICAgICAgICAgICAgIGJhc2VkaXI9YGVjaG8gIlgkZm91bmRfZGlyIiB8IHNlZCAtZSAncyxeWCwsJyAtZSAncywvbGliLyokLCwnYAorKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiRiYXNlZGlyL2luY2x1ZGUiCisrICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkSU5DTkFNRS4KKysgICAgICAgICAgICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0CisrICAgICAgICAgICAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2luY2x1ZGUsCisrICAgICAgICAgICAgICBkbmwgICAyLiBpZiBpdCdzIC91c3IvbG9jYWwvaW5jbHVkZSBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKysgICAgICAgICAgICAgIGRubCAgIDMuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRDUFBGTEFHUyBvciB0aGUgYWxyZWFkeQorKyAgICAgICAgICAgICAgZG5sICAgICAgY29uc3RydWN0ZWQgJElOQ05BTUUsCisrICAgICAgICAgICAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorKyAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYL3Vzci9pbmNsdWRlIjsgdGhlbgorKyAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiA9ICJYL3Vzci9sb2NhbC9pbmNsdWRlIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisrICAgICAgICAgICAgICAgICAgICAgIGxpbnV4KikgaGF2ZWl0PXllczs7CisrICAgICAgICAgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkQ1BQRkxBR1MgJElOQ1tdTkFNRTsgZG8KKysgICAgICAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRJTkNOQU1FLgorKyAgICAgICAgICAgICAgICAgICAgICBJTkNbXU5BTUU9IiR7SU5DW11OQU1FfSR7SU5DW11OQU1FOisgfS1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBkbmwgTG9vayBmb3IgZGVwZW5kZW5jaWVzLgorKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRmb3VuZF9sYSI7IHRoZW4KKysgICAgICAgICAgICAgIGRubCBSZWFkIHRoZSAubGEgZmlsZS4gSXQgZGVmaW5lcyB0aGUgdmFyaWFibGVzCisrICAgICAgICAgICAgICBkbmwgZGxuYW1lLCBsaWJyYXJ5X25hbWVzLCBvbGRfbGlicmFyeSwgZGVwZW5kZW5jeV9saWJzLCBjdXJyZW50LAorKyAgICAgICAgICAgICAgZG5sIGFnZSwgcmV2aXNpb24sIGluc3RhbGxlZCwgZGxvcGVuLCBkbHByZW9wZW4sIGxpYmRpci4KKysgICAgICAgICAgICAgIHNhdmVfbGliZGlyPSIkbGliZGlyIgorKyAgICAgICAgICAgICAgY2FzZSAiJGZvdW5kX2xhIiBpbgorKyAgICAgICAgICAgICAgICAqLyogfCAqXFwqKSAuICIkZm91bmRfbGEiIDs7CisrICAgICAgICAgICAgICAgICopIC4gIi4vJGZvdW5kX2xhIiA7OworKyAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgICAgbGliZGlyPSIkc2F2ZV9saWJkaXIiCisrICAgICAgICAgICAgICBkbmwgV2UgdXNlIG9ubHkgZGVwZW5kZW5jeV9saWJzLgorKyAgICAgICAgICAgICAgZm9yIGRlcCBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworKyAgICAgICAgICAgICAgICBjYXNlICIkZGVwIiBpbgorKyAgICAgICAgICAgICAgICAgIC1MKikKKysgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPWBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKysgICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMSUJOQU1FIGFuZCAkTFRMSUJOQU1FLgorKyAgICAgICAgICAgICAgICAgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKysgICAgICAgICAgICAgICAgICAgIGRubCAgIDEuIGlmIGl0J3MgdGhlIHN0YW5kYXJkIC91c3IvbGliLAorKyAgICAgICAgICAgICAgICAgICAgZG5sICAgMi4gaWYgaXQncyAvdXNyL2xvY2FsL2xpYiBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKysgICAgICAgICAgICAgICAgICAgIGRubCAgIDMuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRMREZMQUdTIG9yIHRoZSBhbHJlYWR5CisrICAgICAgICAgICAgICAgICAgICBkbmwgICAgICBjb25zdHJ1Y3RlZCAkTElCTkFNRSwKKysgICAgICAgICAgICAgICAgICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvbGliIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiID0gIlgvdXNyL2xvY2FsL2xpYiI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW51eCopIGhhdmVpdD15ZXM7OworKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJbXU5BTUU7IGRvCisrICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTElCTkFNRS4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExUTElCW11OQU1FOyBkbworKyAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExUTElCTkFNRS4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICAgIC1SKikKKysgICAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLVIvLydgCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiAhPSBubzsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBycGF0aGRpcnMuCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBUaGUgcnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExJQk5BTUUgYXQgdGhlIGVuZC4KKysgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGRpciIKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gbHRycGF0aGRpcnMuCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBUaGUgbHRycGF0aGRpcnMgd2lsbCBiZSBhcHBlbmRlZCB0byAkTFRMSUJOQU1FIGF0IHRoZSBlbmQuCisrICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJGx0cnBhdGhkaXJzOyBkbworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRkaXIiCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAtbCopCisrICAgICAgICAgICAgICAgICAgICBkbmwgSGFuZGxlIHRoaXMgaW4gdGhlIG5leHQgcm91bmQuCisrICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1sLy8nYAorKyAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAqLmxhKQorKyAgICAgICAgICAgICAgICAgICAgZG5sIEhhbmRsZSB0aGlzIGluIHRoZSBuZXh0IHJvdW5kLiBUaHJvdyBhd2F5IHRoZSAubGEncworKyAgICAgICAgICAgICAgICAgICAgZG5sIGRpcmVjdG9yeTsgaXQgaXMgYWxyZWFkeSBjb250YWluZWQgaW4gYSBwcmVjZWRpbmcgLUwKKysgICAgICAgICAgICAgICAgICAgIGRubCBvcHRpb24uCisrICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncyxeWC4qLywsJyAtZSAncyxebGliLCwnIC1lICdzLFwubGEkLCwnYAorKyAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAqKQorKyAgICAgICAgICAgICAgICAgICAgZG5sIE1vc3QgbGlrZWx5IGFuIGltbWVkaWF0ZSBsaWJyYXJ5IG5hbWUuCisrICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRkZXAiCisrICAgICAgICAgICAgICAgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfSRkZXAiCisrICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGRubCBEaWRuJ3QgZmluZCB0aGUgbGlicmFyeTsgYXNzdW1lIGl0IGlzIGluIHRoZSBzeXN0ZW0gZGlyZWN0b3JpZXMKKysgICAgICAgICAgICBkbmwga25vd24gdG8gdGhlIGxpbmtlciBhbmQgcnVudGltZSBsb2FkZXIuIChBbGwgdGhlIHN5c3RlbQorKyAgICAgICAgICAgIGRubCBkaXJlY3RvcmllcyBrbm93biB0byB0aGUgbGlua2VyIHNob3VsZCBhbHNvIGJlIGtub3duIHRvIHRoZQorKyAgICAgICAgICAgIGRubCBydW50aW1lIGxvYWRlciwgb3RoZXJ3aXNlIHRoZSBzeXN0ZW0gaXMgc2V2ZXJlbHkgbWlzY29uZmlndXJlZC4pCisrICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tbCRuYW1lIgorKyAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LWwkbmFtZSIKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgZG9uZQorKyAgZG9uZQorKyAgaWYgdGVzdCAiWCRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorKyAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKysgICAgICBkbmwgV2VpcmQgcGxhdGZvcm06IG9ubHkgdGhlIGxhc3QgLXJwYXRoIG9wdGlvbiBjb3VudHMsIHRoZSB1c2VyIG11c3QKKysgICAgICBkbmwgcGFzcyBhbGwgcGF0aCBlbGVtZW50cyBpbiBvbmUgb3B0aW9uLiBXZSBjYW4gYXJyYW5nZSB0aGF0IGZvciBhCisrICAgICAgZG5sIHNpbmdsZSBsaWJyYXJ5LCBidXQgbm90IHdoZW4gbW9yZSB0aGFuIG9uZSAkTElCTkFNRXMgYXJlIHVzZWQuCisrICAgICAgYWxsZGlycz0KKysgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCisrICAgICAgICBhbGxkaXJzPSIke2FsbGRpcnN9JHthbGxkaXJzOiskaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcn0kZm91bmRfZGlyIgorKyAgICAgIGRvbmUKKysgICAgICBkbmwgTm90ZTogaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyB1c2VzICRsaWJkaXIgYW5kICR3bC4KKysgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisrICAgICAgbGliZGlyPSIkYWxsZGlycyIKKysgICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorKyAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZsYWciCisrICAgIGVsc2UKKysgICAgICBkbmwgVGhlIC1ycGF0aCBvcHRpb25zIGFyZSBjdW11bGF0aXZlLgorKyAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKysgICAgICAgIGxpYmRpcj0iJGZvdW5kX2RpciIKKysgICAgICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysgICAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKysgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZsYWciCisrICAgICAgZG9uZQorKyAgICBmaQorKyAgZmkKKysgIGlmIHRlc3QgIlgkbHRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorKyAgICBkbmwgV2hlbiB1c2luZyBsaWJ0b29sLCB0aGUgb3B0aW9uIHRoYXQgd29ya3MgZm9yIGJvdGggbGlicmFyaWVzIGFuZAorKyAgICBkbmwgZXhlY3V0YWJsZXMgaXMgLVIuIFRoZSAtUiBvcHRpb25zIGFyZSBjdW11bGF0aXZlLgorKyAgICBmb3IgZm91bmRfZGlyIGluICRsdHJwYXRoZGlyczsgZG8KKysgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfS1SJGZvdW5kX2RpciIKKysgICAgZG9uZQorKyAgZmkKKytdKQorKworK2RubCBBQ19MSUJfQVBQRU5EVE9WQVIoVkFSLCBDT05URU5UUykgYXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgQ09OVEVOVFMgdG8gVkFSLAorK2RubCB1bmxlc3MgYWxyZWFkeSBwcmVzZW50IGluIFZBUi4KKytkbmwgV29ya3Mgb25seSBmb3IgQ1BQRkxBR1MsIG5vdCBmb3IgTElCKiB2YXJpYWJsZXMgYmVjYXVzZSB0aGF0IHNvbWV0aW1lcworK2RubCBjb250YWlucyB0d28gb3IgdGhyZWUgY29uc2VjdXRpdmUgZWxlbWVudHMgdGhhdCBiZWxvbmcgdG9nZXRoZXIuCisrQUNfREVGVU4oW0FDX0xJQl9BUFBFTkRUT1ZBUl0sCisrWworKyAgZm9yIGVsZW1lbnQgaW4gWyQyXTsgZG8KKysgICAgaGF2ZWl0PQorKyAgICBmb3IgeCBpbiAkWyQxXTsgZG8KKysgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRlbGVtZW50IjsgdGhlbgorKyAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgYnJlYWsKKysgICAgICBmaQorKyAgICBkb25lCisrICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgWyQxXT0iJHtbJDFdfSR7WyQxXTorIH0kZWxlbWVudCIKKysgICAgZmkKKysgIGRvbmUKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9saWItcHJlZml4Lm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9saWItcHJlZml4Lm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTIxNjYyMDU2IC0wNDAwCitAQCAtMCwwICsxLDE1NSBAQAorKyMgbGliLXByZWZpeC5tNCBzZXJpYWwgMyAoZ2V0dGV4dC0wLjEzKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytkbmwgQUNfTElCX0FSR19XSVRIIGlzIHN5bm9ueW1vdXMgdG8gQUNfQVJHX1dJVEggaW4gYXV0b2NvbmYtMi4xMywgYW5kCisrZG5sIHNpbWlsYXIgdG8gQUNfQVJHX1dJVEggaW4gYXV0b2NvbmYgMi41Mi4uLjIuNTcgZXhjZXB0IHRoYXQgaXMgZG9lc24ndAorK2RubCByZXF1aXJlIGV4Y2Vzc2l2ZSBicmFja2V0aW5nLgorK2lmZGVmKFtBQ19IRUxQX1NUUklOR10sCisrW0FDX0RFRlVOKFtBQ19MSUJfQVJHX1dJVEhdLCBbQUNfQVJHX1dJVEgoWyQxXSxbWyQyXV0sWyQzXSxbJDRdKV0pXSwKKytbQUNfREVGVU4oW0FDX11bTElCX0FSR19XSVRIXSwgW0FDX0FSR19XSVRIKFskMV0sWyQyXSxbJDNdLFskNF0pXSldKQorKworK2RubCBBQ19MSUJfUFJFRklYIGFkZHMgdG8gdGhlIENQUEZMQUdTIGFuZCBMREZMQUdTIHRoZSBmbGFncyB0aGF0IGFyZSBuZWVkZWQKKytkbmwgdG8gYWNjZXNzIHByZXZpb3VzbHkgaW5zdGFsbGVkIGxpYnJhcmllcy4gVGhlIGJhc2ljIGFzc3VtcHRpb24gaXMgdGhhdAorK2RubCBhIHVzZXIgd2lsbCB3YW50IHBhY2thZ2VzIHRvIHVzZSBvdGhlciBwYWNrYWdlcyBoZSBwcmV2aW91c2x5IGluc3RhbGxlZAorK2RubCB3aXRoIHRoZSBzYW1lIC0tcHJlZml4IG9wdGlvbi4KKytkbmwgVGhpcyBtYWNybyBpcyBub3QgbmVlZGVkIGlmIG9ubHkgQUNfTElCX0xJTktGTEFHUyBpcyB1c2VkIHRvIGxvY2F0ZQorK2RubCBsaWJyYXJpZXMsIGJ1dCBpcyBvdGhlcndpc2UgdmVyeSBjb252ZW5pZW50LgorK0FDX0RFRlVOKFtBQ19MSUJfUFJFRklYXSwKKytbCisrICBBQ19CRUZPUkUoWyQwXSwgW0FDX0xJQl9MSU5LRkxBR1NdKQorKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCisrICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorKyAgZG5sIEJ5IGRlZmF1bHQsIGxvb2sgaW4gJGluY2x1ZGVkaXIgYW5kICRsaWJkaXIuCisrICB1c2VfYWRkaXRpb25hbD15ZXMKKysgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisrICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorKyAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisrICBdKQorKyAgQUNfTElCX0FSR19XSVRIKFtsaWItcHJlZml4XSwKKytbICAtLXdpdGgtbGliLXByZWZpeFs9RElSXSBzZWFyY2ggZm9yIGxpYnJhcmllcyBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorKyAgLS13aXRob3V0LWxpYi1wcmVmaXggICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWJyYXJpZXMgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyXSwKKytbCisrICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgorKyAgICAgIHVzZV9hZGRpdGlvbmFsPW5vCisrICAgIGVsc2UKKysgICAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlgiOyB0aGVuCisrICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworKyAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKysgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorKyAgICAgICAgXSkKKysgICAgICBlbHNlCisrICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiR3aXRodmFsL2luY2x1ZGUiCisrICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvbGliIgorKyAgICAgIGZpCisrICAgIGZpCisrXSkKKysgIGlmIHRlc3QgJHVzZV9hZGRpdGlvbmFsID0geWVzOyB0aGVuCisrICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkQ1BQRkxBR1MuCisrICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0CisrICAgIGRubCAgIDEuIGlmIGl0J3MgdGhlIHN0YW5kYXJkIC91c3IvaW5jbHVkZSwKKysgICAgZG5sICAgMi4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJENQUEZMQUdTLAorKyAgICBkbmwgICAzLiBpZiBpdCdzIC91c3IvbG9jYWwvaW5jbHVkZSBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKysgICAgZG5sICAgNC4gaWYgaXQgZG9lc24ndCBleGlzdCBhcyBhIGRpcmVjdG9yeS4KKysgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYL3Vzci9pbmNsdWRlIjsgdGhlbgorKyAgICAgIGhhdmVpdD0KKysgICAgICBmb3IgeCBpbiAkQ1BQRkxBR1M7IGRvCisrICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorKyAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgIGJyZWFrCisrICAgICAgICBmaQorKyAgICAgIGRvbmUKKysgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiID0gIlgvdXNyL2xvY2FsL2luY2x1ZGUiOyB0aGVuCisrICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisrICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKysgICAgICAgICAgICBlc2FjCisrICAgICAgICAgIGZpCisrICAgICAgICBmaQorKyAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKysgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRDUFBGTEFHUy4KKysgICAgICAgICAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30ke0NQUEZMQUdTOisgfS1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgZmkKKysgICAgZG5sIFBvdGVudGlhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExERkxBR1MuCisrICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0CisrICAgIGRubCAgIDEuIGlmIGl0J3MgdGhlIHN0YW5kYXJkIC91c3IvbGliLAorKyAgICBkbmwgICAyLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkTERGTEFHUywKKysgICAgZG5sICAgMy4gaWYgaXQncyAvdXNyL2xvY2FsL2xpYiBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKysgICAgZG5sICAgNC4gaWYgaXQgZG9lc24ndCBleGlzdCBhcyBhIGRpcmVjdG9yeS4KKysgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgIT0gIlgvdXNyL2xpYiI7IHRoZW4KKysgICAgICBoYXZlaXQ9CisrICAgICAgZm9yIHggaW4gJExERkxBR1M7IGRvCisrICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisrICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgYnJlYWsKKysgICAgICAgIGZpCisrICAgICAgZG9uZQorKyAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC9saWIiOyB0aGVuCisrICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisrICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKysgICAgICAgICAgICBlc2FjCisrICAgICAgICAgIGZpCisrICAgICAgICBmaQorKyAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTERGTEFHUy4KKysgICAgICAgICAgICBMREZMQUdTPSIke0xERkxBR1N9JHtMREZMQUdTOisgfS1MJGFkZGl0aW9uYWxfbGliZGlyIgorKyAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICBmaQorKyAgZmkKKytdKQorKworK2RubCBBQ19MSUJfUFJFUEFSRV9QUkVGSVggY3JlYXRlcyB2YXJpYWJsZXMgYWNsX2ZpbmFsX3ByZWZpeCwKKytkbmwgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4LCBjb250YWluaW5nIHRoZSB2YWx1ZXMgdG8gd2hpY2ggJHByZWZpeCBhbmQKKytkbmwgJGV4ZWNfcHJlZml4IHdpbGwgZXhwYW5kIGF0IHRoZSBlbmQgb2YgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisrQUNfREVGVU4oW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0sCisrWworKyAgZG5sIFVuZm9ydHVuYXRlbHksIHByZWZpeCBhbmQgZXhlY19wcmVmaXggZ2V0IG9ubHkgZmluYWxseSBkZXRlcm1pbmVkCisrICBkbmwgYXQgdGhlIGVuZCBvZiBjb25maWd1cmUuCisrICBpZiB0ZXN0ICJYJHByZWZpeCIgPSAiWE5PTkUiOyB0aGVuCisrICAgIGFjbF9maW5hbF9wcmVmaXg9IiRhY19kZWZhdWx0X3ByZWZpeCIKKysgIGVsc2UKKysgICAgYWNsX2ZpbmFsX3ByZWZpeD0iJHByZWZpeCIKKysgIGZpCisrICBpZiB0ZXN0ICJYJGV4ZWNfcHJlZml4IiA9ICJYTk9ORSI7IHRoZW4KKysgICAgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PScke3ByZWZpeH0nCisrICBlbHNlCisrICAgIGFjbF9maW5hbF9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorKyAgZmkKKysgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKysgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisrICBldmFsIGFjbF9maW5hbF9leGVjX3ByZWZpeD1cIiRhY2xfZmluYWxfZXhlY19wcmVmaXhcIgorKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorK10pCisrCisrZG5sIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbc3RhdGVtZW50XSkgZXZhbHVhdGVzIHN0YXRlbWVudCwgd2l0aCB0aGUKKytkbmwgdmFyaWFibGVzIHByZWZpeCBhbmQgZXhlY19wcmVmaXggYm91bmQgdG8gdGhlIHZhbHVlcyB0aGV5IHdpbGwgaGF2ZQorK2RubCBhdCB0aGUgZW5kIG9mIHRoZSBjb25maWd1cmUgc2NyaXB0LgorK0FDX0RFRlVOKFtBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVhdLAorK1sKKysgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKysgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisrICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisrICAkMQorKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKysgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9sb25nZG91YmxlLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9sb25nZG91YmxlLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTQyNjU4ODY0IC0wNDAwCitAQCAtMCwwICsxLDMwIEBACisrIyBsb25nZG91YmxlLm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTIpCisrZG5sIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorK2RubCBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAnbG9uZyBkb3VibGUnIHR5cGUuCisrZG5sIFByZXJlcXVpc2l0ZTogQUNfUFJPR19DQworKworK0FDX0RFRlVOKFtndF9UWVBFX0xPTkdET1VCTEVdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbG9uZyBkb3VibGVdLCBndF9jdl9jX2xvbmdfZG91YmxlLAorKyAgICBbaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICAgICAgZ3RfY3ZfY19sb25nX2RvdWJsZT15ZXMKKysgICAgIGVsc2UKKysgICAgICAgQUNfVFJZX0NPTVBJTEUoWworKyAgICAgICAgIC8qIFRoZSBTdGFyZGVudCBWaXN0cmEga25vd3Mgc2l6ZW9mKGxvbmcgZG91YmxlKSwgYnV0IGRvZXMgbm90IHN1cHBvcnQgaXQuICAqLworKyAgICAgICAgIGxvbmcgZG91YmxlIGZvbyA9IDAuMDsKKysgICAgICAgICAvKiBPbiBVbHRyaXggNC4zIGNjLCBsb25nIGRvdWJsZSBpcyA0IGFuZCBkb3VibGUgaXMgOC4gICovCisrICAgICAgICAgaW50IGFycmF5IFsyKihzaXplb2YobG9uZyBkb3VibGUpID49IHNpemVvZihkb3VibGUpKSAtIDFdOworKyAgICAgICAgIF0sICwKKysgICAgICAgICBndF9jdl9jX2xvbmdfZG91YmxlPXllcywgZ3RfY3ZfY19sb25nX2RvdWJsZT1ubykKKysgICAgIGZpXSkKKysgIGlmIHRlc3QgJGd0X2N2X2NfbG9uZ19kb3VibGUgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfTE9OR19ET1VCTEUsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdsb25nIGRvdWJsZScgdHlwZS5dKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9sb25nbG9uZy5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvbG9uZ2xvbmcubTQJMjAwNC0wOS0xMiAxNDo0MDozNC45NDk2NTc4MDAgLTA0MDAKK0BAIC0wLDAgKzEsMjUgQEAKKysjIGxvbmdsb25nLm00IHNlcmlhbCA0CisrZG5sIENvcHlyaWdodCAoQykgMTk5OS0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrIyBEZWZpbmUgSEFWRV9MT05HX0xPTkcgaWYgJ2xvbmcgbG9uZycgd29ya3MuCisrCisrQUNfREVGVU4oW2ptX0FDX1RZUEVfTE9OR19MT05HXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIGxvbmcgbG9uZ10sIGFjX2N2X3R5cGVfbG9uZ19sb25nLAorKyAgW0FDX1RSWV9MSU5LKFtsb25nIGxvbmcgbGwgPSAxTEw7IGludCBpID0gNjM7XSwKKysgICAgW2xvbmcgbG9uZyBsbG1heCA9IChsb25nIGxvbmcpIC0xOworKyAgICAgcmV0dXJuIGxsIDw8IGkgfCBsbCA+PiBpIHwgbGxtYXggLyBsbCB8IGxsbWF4ICUgbGw7XSwKKysgICAgYWNfY3ZfdHlwZV9sb25nX2xvbmc9eWVzLAorKyAgICBhY19jdl90eXBlX2xvbmdfbG9uZz1ubyldKQorKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9sb25nX2xvbmcgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfTE9OR19MT05HLCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdsb25nIGxvbmcnIHR5cGUuXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvTWFrZWZpbGUuYW0JMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L01ha2VmaWxlLmFtCTIwMDQtMDktMTIgMTQ6NDA6MzUuMDQ4NjQyNzUyIC0wNDAwCitAQCAtMCwwICsxIEBACisrRVhUUkFfRElTVCA9IGNvZGVzZXQubTQgZ2V0dGV4dC5tNCBnbGliYzIxLm00IGljb252Lm00IGludGRpdjAubTQgaW50bWF4Lm00IGludHR5cGVzLm00IGludHR5cGVzX2gubTQgaW50dHlwZXMtcHJpLm00IGlzYy1wb3NpeC5tNCBsY21lc3NhZ2UubTQgbGliLWxkLm00IGxpYi1saW5rLm00IGxpYi1wcmVmaXgubTQgbG9uZ2RvdWJsZS5tNCBsb25nbG9uZy5tNCBubHMubTQgcG8ubTQgcHJpbnRmLXBvc2l4Lm00IHByb2d0ZXN0Lm00IHNpZ25lZC5tNCBzaXplX21heC5tNCBzdGRpbnRfaC5tNCB1aW50bWF4X3QubTQgdWxvbmdsb25nLm00IHdjaGFyX3QubTQgd2ludF90Lm00IHhzaXplLm00CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L25scy5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvbmxzLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTU1NjU2ODg4IC0wNDAwCitAQCAtMCwwICsxLDQ5IEBACisrIyBubHMubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKytkbmwKKytkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKKytkbmwgZnVuY3Rpb25hbGl0eS4KKytkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKKytkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrZG5sIFRoZXkgYXJlICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorKworK2RubCBBdXRob3JzOgorK2RubCAgIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAxOTk1LTIwMDAuCisrZG5sICAgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAwLTIwMDMuCisrCisrQUNfREVGVU4oW0FNX05MU10sCisrWworKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIE5MUyBpcyByZXF1ZXN0ZWRdKQorKyAgZG5sIERlZmF1bHQgaXMgZW5hYmxlZCBOTFMKKysgIEFDX0FSR19FTkFCTEUobmxzLAorKyAgICBbICAtLWRpc2FibGUtbmxzICAgICAgICAgICBkbyBub3QgdXNlIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0XSwKKysgICAgVVNFX05MUz0kZW5hYmxldmFsLCBVU0VfTkxTPXllcykKKysgIEFDX01TR19SRVNVTFQoJFVTRV9OTFMpCisrICBBQ19TVUJTVChVU0VfTkxTKQorK10pCisrCisrQUNfREVGVU4oW0FNX01LSU5TVEFMTERJUlNdLAorK1sKKysgIGRubCBJZiB0aGUgQUNfQ09ORklHX0FVWF9ESVIgbWFjcm8gZm9yIGF1dG9jb25mIGlzIHVzZWQgd2UgcG9zc2libHkKKysgIGRubCBmaW5kIHRoZSBta2luc3RhbGxkaXJzIHNjcmlwdCBpbiBhbm90aGVyIHN1YmRpciBidXQgJCh0b3Bfc3JjZGlyKS4KKysgIGRubCBUcnkgdG8gbG9jYXRlIGl0LgorKyAgTUtJTlNUQUxMRElSUz0KKysgIGlmIHRlc3QgLW4gIiRhY19hdXhfZGlyIjsgdGhlbgorKyAgICBjYXNlICIkYWNfYXV4X2RpciIgaW4KKysgICAgICAvKikgTUtJTlNUQUxMRElSUz0iJGFjX2F1eF9kaXIvbWtpbnN0YWxsZGlycyIgOzsKKysgICAgICAqKSBNS0lOU1RBTExESVJTPSJcJCh0b3BfYnVpbGRkaXIpLyRhY19hdXhfZGlyL21raW5zdGFsbGRpcnMiIDs7CisrICAgIGVzYWMKKysgIGZpCisrICBpZiB0ZXN0IC16ICIkTUtJTlNUQUxMRElSUyI7IHRoZW4KKysgICAgTUtJTlNUQUxMRElSUz0iXCQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyIKKysgIGZpCisrICBBQ19TVUJTVChNS0lOU1RBTExESVJTKQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3BvLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9wby5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0Ljk2MTY1NTk3NiAtMDQwMAorQEAgLTAsMCArMSw0MjYgQEAKKysjIHBvLm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTQpCisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrZG5sCisrZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKKytkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CisrZG5sIGZ1bmN0aW9uYWxpdHkuCisrZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKytkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCisrZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKysKKytkbmwgQXV0aG9yczoKKytkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS0yMDAwLgorK2RubCAgIEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPiwgMjAwMC0yMDAzLgorKworK2RubCBDaGVja3MgZm9yIGFsbCBwcmVyZXF1aXNpdGVzIG9mIHRoZSBwbyBzdWJkaXJlY3RvcnkuCisrQUNfREVGVU4oW0FNX1BPX1NVQkRJUlNdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfTUFLRV9TRVRdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfUFJPR19JTlNUQUxMXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FNX01LSU5TVEFMTERJUlNdKWRubAorKyAgQUNfUkVRVUlSRShbQU1fTkxTXSlkbmwKKysKKysgIGRubCBQZXJmb3JtIHRoZSBmb2xsb3dpbmcgdGVzdHMgYWxzbyBpZiAtLWRpc2FibGUtbmxzIGhhcyBiZWVuIGdpdmVuLAorKyAgZG5sIGJlY2F1c2UgdGhleSBhcmUgbmVlZGVkIGZvciAibWFrZSBkaXN0IiB0byB3b3JrLgorKworKyAgZG5sIFNlYXJjaCBmb3IgR05VIG1zZ2ZtdCBpbiB0aGUgUEFUSC4KKysgIGRubCBUaGUgZmlyc3QgdGVzdCBleGNsdWRlcyBTb2xhcmlzIG1zZ2ZtdCBhbmQgZWFybHkgR05VIG1zZ2ZtdCB2ZXJzaW9ucy4KKysgIGRubCBUaGUgc2Vjb25kIHRlc3QgZXhjbHVkZXMgRnJlZUJTRCBtc2dmbXQuCisrICBBTV9QQVRIX1BST0dfV0lUSF9URVNUKE1TR0ZNVCwgbXNnZm10LAorKyAgICBbJGFjX2Rpci8kYWNfd29yZCAtLXN0YXRpc3RpY3MgL2Rldi9udWxsID4vZGV2L251bGwgMj4mMSAmJgorKyAgICAgKGlmICRhY19kaXIvJGFjX3dvcmQgLS1zdGF0aXN0aWNzIC9kZXYvbnVsbCAyPiYxID4vZGV2L251bGwgfCBncmVwIHVzYWdlID4vZGV2L251bGw7IHRoZW4gZXhpdCAxOyBlbHNlIGV4aXQgMDsgZmkpXSwKKysgICAgOikKKysgIEFDX1BBVEhfUFJPRyhHTVNHRk1ULCBnbXNnZm10LCAkTVNHRk1UKQorKworKyAgZG5sIFNlYXJjaCBmb3IgR05VIHhnZXR0ZXh0IDAuMTIgb3IgbmV3ZXIgaW4gdGhlIFBBVEguCisrICBkbmwgVGhlIGZpcnN0IHRlc3QgZXhjbHVkZXMgU29sYXJpcyB4Z2V0dGV4dCBhbmQgZWFybHkgR05VIHhnZXR0ZXh0IHZlcnNpb25zLgorKyAgZG5sIFRoZSBzZWNvbmQgdGVzdCBleGNsdWRlcyBGcmVlQlNEIHhnZXR0ZXh0LgorKyAgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChYR0VUVEVYVCwgeGdldHRleHQsCisrICAgIFskYWNfZGlyLyRhY193b3JkIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0gL2Rldi9udWxsID4vZGV2L251bGwgMj4mMSAmJgorKyAgICAgKGlmICRhY19kaXIvJGFjX3dvcmQgLS1vbWl0LWhlYWRlciAtLWNvcHlyaWdodC1ob2xkZXI9IC0tbXNnaWQtYnVncy1hZGRyZXNzPSAvZGV2L251bGwgMj4mMSA+L2Rldi9udWxsIHwgZ3JlcCB1c2FnZSA+L2Rldi9udWxsOyB0aGVuIGV4aXQgMTsgZWxzZSBleGl0IDA7IGZpKV0sCisrICAgIDopCisrICBkbmwgUmVtb3ZlIGxlZnRvdmVyIGZyb20gRnJlZUJTRCB4Z2V0dGV4dCBjYWxsLgorKyAgcm0gLWYgbWVzc2FnZXMucG8KKysKKysgIGRubCBTZWFyY2ggZm9yIEdOVSBtc2dtZXJnZSAwLjExIG9yIG5ld2VyIGluIHRoZSBQQVRILgorKyAgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChNU0dNRVJHRSwgbXNnbWVyZ2UsCisrICAgIFskYWNfZGlyLyRhY193b3JkIC0tdXBkYXRlIC1xIC9kZXYvbnVsbCAvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxXSwgOikKKysKKysgIGRubCBUaGlzIGNvdWxkIGdvIGF3YXkgc29tZSBkYXk7IHRoZSBQQVRIX1BST0dfV0lUSF9URVNUIGFscmVhZHkgZG9lcyBpdC4KKysgIGRubCBUZXN0IHdoZXRoZXIgd2UgcmVhbGx5IGZvdW5kIEdOVSBtc2dmbXQuCisrICBpZiB0ZXN0ICIkR01TR0ZNVCIgIT0gIjoiOyB0aGVuCisrICAgIGRubCBJZiBpdCBpcyBubyBHTlUgbXNnZm10IHdlIGRlZmluZSBpdCBhcyA6IHNvIHRoYXQgdGhlCisrICAgIGRubCBNYWtlZmlsZXMgc3RpbGwgY2FuIHdvcmsuCisrICAgIGlmICRHTVNHRk1UIC0tc3RhdGlzdGljcyAvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxICYmCisrICAgICAgIChpZiAkR01TR0ZNVCAtLXN0YXRpc3RpY3MgL2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbCB8IGdyZXAgdXNhZ2UgPi9kZXYvbnVsbDsgdGhlbiBleGl0IDE7IGVsc2UgZXhpdCAwOyBmaSk7IHRoZW4KKysgICAgICA6IDsKKysgICAgZWxzZQorKyAgICAgIEdNU0dGTVQ9YGVjaG8gIiRHTVNHRk1UIiB8IHNlZCAtZSAncyxeLiovLCwnYAorKyAgICAgIEFDX01TR19SRVNVTFQoCisrICAgICAgICBbZm91bmQgJEdNU0dGTVQgcHJvZ3JhbSBpcyBub3QgR05VIG1zZ2ZtdDsgaWdub3JlIGl0XSkKKysgICAgICBHTVNHRk1UPSI6IgorKyAgICBmaQorKyAgZmkKKysKKysgIGRubCBUaGlzIGNvdWxkIGdvIGF3YXkgc29tZSBkYXk7IHRoZSBQQVRIX1BST0dfV0lUSF9URVNUIGFscmVhZHkgZG9lcyBpdC4KKysgIGRubCBUZXN0IHdoZXRoZXIgd2UgcmVhbGx5IGZvdW5kIEdOVSB4Z2V0dGV4dC4KKysgIGlmIHRlc3QgIiRYR0VUVEVYVCIgIT0gIjoiOyB0aGVuCisrICAgIGRubCBJZiBpdCBpcyBubyBHTlUgeGdldHRleHQgd2UgZGVmaW5lIGl0IGFzIDogc28gdGhhdCB0aGUKKysgICAgZG5sIE1ha2VmaWxlcyBzdGlsbCBjYW4gd29yay4KKysgICAgaWYgJFhHRVRURVhUIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0gL2Rldi9udWxsID4vZGV2L251bGwgMj4mMSAmJgorKyAgICAgICAoaWYgJFhHRVRURVhUIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0gL2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbCB8IGdyZXAgdXNhZ2UgPi9kZXYvbnVsbDsgdGhlbiBleGl0IDE7IGVsc2UgZXhpdCAwOyBmaSk7IHRoZW4KKysgICAgICA6IDsKKysgICAgZWxzZQorKyAgICAgIEFDX01TR19SRVNVTFQoCisrICAgICAgICBbZm91bmQgeGdldHRleHQgcHJvZ3JhbSBpcyBub3QgR05VIHhnZXR0ZXh0OyBpZ25vcmUgaXRdKQorKyAgICAgIFhHRVRURVhUPSI6IgorKyAgICBmaQorKyAgICBkbmwgUmVtb3ZlIGxlZnRvdmVyIGZyb20gRnJlZUJTRCB4Z2V0dGV4dCBjYWxsLgorKyAgICBybSAtZiBtZXNzYWdlcy5wbworKyAgZmkKKysKKysgIEFDX09VVFBVVF9DT01NQU5EUyhbCisrICAgIGZvciBhY19maWxlIGluICRDT05GSUdfRklMRVM7IGRvCisrICAgICAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIgorKyAgICAgIGNhc2UgIiRhY19maWxlIiBpbgorKyAgICAgICAgKjoqKSBhY19maWxlPWBlY2hvICIkYWNfZmlsZSJ8c2VkICdzJTouKiUlJ2AgOzsKKysgICAgICBlc2FjCisrICAgICAgIyBQTyBkaXJlY3RvcmllcyBoYXZlIGEgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGZyb20gTWFrZWZpbGUuaW4uaW4uCisrICAgICAgY2FzZSAiJGFjX2ZpbGUiIGluICovTWFrZWZpbGUuaW4pCisrICAgICAgICAjIEFkanVzdCBhIHJlbGF0aXZlIHNyY2Rpci4KKysgICAgICAgIGFjX2Rpcj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyUvW14vXVteL10qJCUlJ2AKKysgICAgICAgIGFjX2Rpcl9zdWZmaXg9Ii9gZWNobyAiJGFjX2RpciJ8c2VkICdzJV5cLi8lJSdgIgorKyAgICAgICAgYWNfZG90cz1gZWNobyAiJGFjX2Rpcl9zdWZmaXgifHNlZCAncyUvW14vXSolLi4vJWcnYAorKyAgICAgICAgIyBJbiBhdXRvY29uZi0yLjEzIGl0IGlzIGNhbGxlZCAkYWNfZ2l2ZW5fc3JjZGlyLgorKyAgICAgICAgIyBJbiBhdXRvY29uZi0yLjUwIGl0IGlzIGNhbGxlZCAkc3JjZGlyLgorKyAgICAgICAgdGVzdCAtbiAiJGFjX2dpdmVuX3NyY2RpciIgfHwgYWNfZ2l2ZW5fc3JjZGlyPSIkc3JjZGlyIgorKyAgICAgICAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KKysgICAgICAgICAgLikgIHRvcF9zcmNkaXI9YGVjaG8gJGFjX2RvdHN8c2VkICdzJS8kJSUnYCA7OworKyAgICAgICAgICAvKikgdG9wX3NyY2Rpcj0iJGFjX2dpdmVuX3NyY2RpciIgOzsKKysgICAgICAgICAgKikgIHRvcF9zcmNkaXI9IiRhY19kb3RzJGFjX2dpdmVuX3NyY2RpciIgOzsKKysgICAgICAgIGVzYWMKKysgICAgICAgIGlmIHRlc3QgLWYgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9QT1RGSUxFUy5pbiI7IHRoZW4KKysgICAgICAgICAgcm0gLWYgIiRhY19kaXIvUE9URklMRVMiCisrICAgICAgICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZGlyL1BPVEZJTEVTIiB8fCBlY2hvICJjcmVhdGluZyAkYWNfZGlyL1BPVEZJTEVTIgorKyAgICAgICAgICBjYXQgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9QT1RGSUxFUy5pbiIgfCBzZWQgLWUgIi9eIy9kIiAtZSAiL15bIAldKlwkL2QiIC1lICJzLC4qLCAgICAgJHRvcF9zcmNkaXIvJiBcXFxcLCIgfCBzZWQgLWUgIlwkcy9cKC4qXCkgXFxcXC9cMS8iID4gIiRhY19kaXIvUE9URklMRVMiCisrICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSJQT1RGSUxFUy5pbiIKKysgICAgICAgICAgIyBBTExfTElOR1VBUywgUE9GSUxFUywgVVBEQVRFUE9GSUxFUywgRFVNTVlQT0ZJTEVTLCBHTU9GSUxFUyBkZXBlbmQKKysgICAgICAgICAgIyBvbiAkYWNfZGlyIGJ1dCBkb24ndCBkZXBlbmQgb24gdXNlci1zcGVjaWZpZWQgY29uZmlndXJhdGlvbgorKyAgICAgICAgICAjIHBhcmFtZXRlcnMuCisrICAgICAgICAgIGlmIHRlc3QgLWYgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9MSU5HVUFTIjsgdGhlbgorKyAgICAgICAgICAgICMgVGhlIExJTkdVQVMgZmlsZSBjb250YWlucyB0aGUgc2V0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMuCisrICAgICAgICAgICAgaWYgdGVzdCAtbiAiJE9CU09MRVRFX0FMTF9MSU5HVUFTIjsgdGhlbgorKyAgICAgICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IHNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIiB8fCBlY2hvICJzZXR0aW5nIEFMTF9MSU5HVUFTIGluIGNvbmZpZ3VyZS5pbiBpcyBvYnNvbGV0ZSIKKysgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9MSU5HVUFTImAKKysgICAgICAgICAgICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9tYWtlLgorKyAgICAgICAgICAgIGV2YWwgJ0FMTF9MSU5HVUFTJyc9JEFMTF9MSU5HVUFTXycKKysgICAgICAgICAgICBQT01BS0VGSUxFREVQUz0iJFBPTUFLRUZJTEVERVBTIExJTkdVQVMiCisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAjIFRoZSBzZXQgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcyB3YXMgZ2l2ZW4gaW4gY29uZmlndXJlLmluLgorKyAgICAgICAgICAgIGV2YWwgJ0FMTF9MSU5HVUFTJyc9JE9CU09MRVRFX0FMTF9MSU5HVUFTJworKyAgICAgICAgICBmaQorKyAgICAgICAgICAjIENvbXB1dGUgUE9GSUxFUworKyAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5wbykKKysgICAgICAgICAgIyBDb21wdXRlIFVQREFURVBPRklMRVMKKysgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5wby11cGRhdGUpCisrICAgICAgICAgICMgQ29tcHV0ZSBEVU1NWVBPRklMRVMKKysgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5ub3ApCisrICAgICAgICAgICMgQ29tcHV0ZSBHTU9GSUxFUworKyAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5nbW8pCisrICAgICAgICAgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCisrICAgICAgICAgICAgLikgc3JjZGlycHJlPSA7OworKyAgICAgICAgICAgICopIHNyY2RpcnByZT0nJChzcmNkaXIpLycgOzsKKysgICAgICAgICAgZXNhYworKyAgICAgICAgICBQT0ZJTEVTPQorKyAgICAgICAgICBVUERBVEVQT0ZJTEVTPQorKyAgICAgICAgICBEVU1NWVBPRklMRVM9CisrICAgICAgICAgIEdNT0ZJTEVTPQorKyAgICAgICAgICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisrICAgICAgICAgICAgUE9GSUxFUz0iJFBPRklMRVMgJHNyY2RpcnByZSRsYW5nLnBvIgorKyAgICAgICAgICAgIFVQREFURVBPRklMRVM9IiRVUERBVEVQT0ZJTEVTICRsYW5nLnBvLXVwZGF0ZSIKKysgICAgICAgICAgICBEVU1NWVBPRklMRVM9IiREVU1NWVBPRklMRVMgJGxhbmcubm9wIgorKyAgICAgICAgICAgIEdNT0ZJTEVTPSIkR01PRklMRVMgJHNyY2RpcnByZSRsYW5nLmdtbyIKKysgICAgICAgICAgZG9uZQorKyAgICAgICAgICAjIENBVEFMT0dTIGRlcGVuZHMgb24gYm90aCAkYWNfZGlyIGFuZCB0aGUgdXNlcidzIExJTkdVQVMKKysgICAgICAgICAgIyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKysgICAgICAgICAgSU5TVF9MSU5HVUFTPQorKyAgICAgICAgICBpZiB0ZXN0IC1uICIkQUxMX0xJTkdVQVMiOyB0aGVuCisrICAgICAgICAgICAgZm9yIHByZXNlbnRsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKysgICAgICAgICAgICAgIHVzZWl0PW5vCisrICAgICAgICAgICAgICBpZiB0ZXN0ICIlVU5TRVQlIiAhPSAiJExJTkdVQVMiOyB0aGVuCisrICAgICAgICAgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRMSU5HVUFTIgorKyAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkQUxMX0xJTkdVQVMiCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgZm9yIGRlc2lyZWRsYW5nIGluICRkZXNpcmVkbGFuZ3VhZ2VzOyBkbworKyAgICAgICAgICAgICAgICAjIFVzZSB0aGUgcHJlc2VudGxhbmcgY2F0YWxvZyBpZiBkZXNpcmVkbGFuZyBpcworKyAgICAgICAgICAgICAgICAjICAgYS4gZXF1YWwgdG8gcHJlc2VudGxhbmcsIG9yCisrICAgICAgICAgICAgICAgICMgICBiLiBhIHZhcmlhbnQgb2YgcHJlc2VudGxhbmcgKGJlY2F1c2UgaW4gdGhpcyBjYXNlLAorKyAgICAgICAgICAgICAgICAjICAgICAgcHJlc2VudGxhbmcgY2FuIGJlIHVzZWQgYXMgYSBmYWxsYmFjayBmb3IgbWVzc2FnZXMKKysgICAgICAgICAgICAgICAgIyAgICAgIHdoaWNoIGFyZSBub3QgdHJhbnNsYXRlZCBpbiB0aGUgZGVzaXJlZGxhbmcgY2F0YWxvZykuCisrICAgICAgICAgICAgICAgIGNhc2UgIiRkZXNpcmVkbGFuZyIgaW4KKysgICAgICAgICAgICAgICAgICAiJHByZXNlbnRsYW5nIiopIHVzZWl0PXllczs7CisrICAgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgIGlmIHRlc3QgJHVzZWl0ID0geWVzOyB0aGVuCisrICAgICAgICAgICAgICAgIElOU1RfTElOR1VBUz0iJElOU1RfTElOR1VBUyAkcHJlc2VudGxhbmciCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgZmkKKysgICAgICAgICAgQ0FUQUxPR1M9CisrICAgICAgICAgIGlmIHRlc3QgLW4gIiRJTlNUX0xJTkdVQVMiOyB0aGVuCisrICAgICAgICAgICAgZm9yIGxhbmcgaW4gJElOU1RfTElOR1VBUzsgZG8KKysgICAgICAgICAgICAgIENBVEFMT0dTPSIkQ0FUQUxPR1MgJGxhbmcuZ21vIgorKyAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgZmkKKysgICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiCisrICAgICAgICAgIHNlZCAtZSAiL15QT1RGSUxFUyA9L3IgJGFjX2Rpci9QT1RGSUxFUyIgLWUgIi9eIyBNYWtldmFycy9yICRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9NYWtldmFycyIgLWUgInN8QFBPRklMRVNAfCRQT0ZJTEVTfGciIC1lICJzfEBVUERBVEVQT0ZJTEVTQHwkVVBEQVRFUE9GSUxFU3xnIiAtZSAic3xARFVNTVlQT0ZJTEVTQHwkRFVNTVlQT0ZJTEVTfGciIC1lICJzfEBHTU9GSUxFU0B8JEdNT0ZJTEVTfGciIC1lICJzfEBDQVRBTE9HU0B8JENBVEFMT0dTfGciIC1lICJzfEBQT01BS0VGSUxFREVQU0B8JFBPTUFLRUZJTEVERVBTfGciICIkYWNfZGlyL01ha2VmaWxlLmluIiA+ICIkYWNfZGlyL01ha2VmaWxlIgorKyAgICAgICAgICBmb3IgZiBpbiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyIi9SdWxlcy0qOyBkbworKyAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgorKyAgICAgICAgICAgICAgY2FzZSAiJGYiIGluCisrICAgICAgICAgICAgICAgICoub3JpZyB8ICouYmFrIHwgKn4pIDs7CisrICAgICAgICAgICAgICAgICopIGNhdCAiJGYiID4+ICIkYWNfZGlyL01ha2VmaWxlIiA7OworKyAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgIGZpCisrICAgICAgICAgIGRvbmUKKysgICAgICAgIGZpCisrICAgICAgICA7OworKyAgICAgIGVzYWMKKysgICAgZG9uZV0sCisrICAgWyMgQ2FwdHVyZSB0aGUgdmFsdWUgb2Ygb2Jzb2xldGUgQUxMX0xJTkdVQVMgYmVjYXVzZSB3ZSBuZWVkIGl0IHRvIGNvbXB1dGUKKysgICAgIyBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTLCBDQVRBTE9HUy4gQnV0IGhpZGUgaXQKKysgICAgIyBmcm9tIGF1dG9tYWtlLgorKyAgICBldmFsICdPQlNPTEVURV9BTExfTElOR1VBUycnPSIkQUxMX0xJTkdVQVMiJworKyAgICAjIENhcHR1cmUgdGhlIHZhbHVlIG9mIExJTkdVQVMgYmVjYXVzZSB3ZSBuZWVkIGl0IHRvIGNvbXB1dGUgQ0FUQUxPR1MuCisrICAgIExJTkdVQVM9IiR7TElOR1VBUy0lVU5TRVQlfSIKKysgICBdKQorK10pCisrCisrZG5sIFBvc3Rwcm9jZXNzZXMgYSBNYWtlZmlsZSBpbiBhIGRpcmVjdG9yeSBjb250YWluaW5nIFBPIGZpbGVzLgorK0FDX0RFRlVOKFtBTV9QT1NUUFJPQ0VTU19QT19NQUtFRklMRV0sCisrWworKyAgIyBXaGVuIHRoaXMgY29kZSBpcyBydW4sIGluIGNvbmZpZy5zdGF0dXMsIHR3byB2YXJpYWJsZXMgaGF2ZSBhbHJlYWR5IGJlZW4KKysgICMgc2V0OgorKyAgIyAtIE9CU09MRVRFX0FMTF9MSU5HVUFTIGlzIHRoZSB2YWx1ZSBvZiBMSU5HVUFTIHNldCBpbiBjb25maWd1cmUuaW4sCisrICAjIC0gTElOR1VBUyBpcyB0aGUgdmFsdWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExJTkdVQVMgYXQgY29uZmlndXJlCisrICAjICAgdGltZS4KKysKKytjaGFuZ2VxdW90ZSgsKWRubAorKyAgIyBBZGp1c3QgYSByZWxhdGl2ZSBzcmNkaXIuCisrICBhY19kaXI9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlL1teL11bXi9dKiQlJSdgCisrICBhY19kaXJfc3VmZml4PSIvYGVjaG8gIiRhY19kaXIifHNlZCAncyVeXC4vJSUnYCIKKysgIGFjX2RvdHM9YGVjaG8gIiRhY19kaXJfc3VmZml4InxzZWQgJ3MlL1teL10qJS4uLyVnJ2AKKysgICMgSW4gYXV0b2NvbmYtMi4xMyBpdCBpcyBjYWxsZWQgJGFjX2dpdmVuX3NyY2Rpci4KKysgICMgSW4gYXV0b2NvbmYtMi41MCBpdCBpcyBjYWxsZWQgJHNyY2Rpci4KKysgIHRlc3QgLW4gIiRhY19naXZlbl9zcmNkaXIiIHx8IGFjX2dpdmVuX3NyY2Rpcj0iJHNyY2RpciIKKysgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCisrICAgIC4pICB0b3Bfc3JjZGlyPWBlY2hvICRhY19kb3RzfHNlZCAncyUvJCUlJ2AgOzsKKysgICAgLyopIHRvcF9zcmNkaXI9IiRhY19naXZlbl9zcmNkaXIiIDs7CisrICAgICopICB0b3Bfc3JjZGlyPSIkYWNfZG90cyRhY19naXZlbl9zcmNkaXIiIDs7CisrICBlc2FjCisrCisrICAjIEZpbmQgYSB3YXkgdG8gZWNobyBzdHJpbmdzIHdpdGhvdXQgaW50ZXJwcmV0aW5nIGJhY2tzbGFzaC4KKysgIGlmIHRlc3QgIlhgKGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnOyB0aGVuCisrICAgIGd0X2VjaG89J2VjaG8nCisrICBlbHNlCisrICAgIGlmIHRlc3QgIlhgKHByaW50ZiAnJXNcbicgJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnOyB0aGVuCisrICAgICAgZ3RfZWNobz0ncHJpbnRmICVzXG4nCisrICAgIGVsc2UKKysgICAgICBlY2hvX2Z1bmMgKCkgeworKyAgICAgICAgY2F0IDw8RU9UCisrJCoKKytFT1QKKysgICAgICB9CisrICAgICAgZ3RfZWNobz0nZWNob19mdW5jJworKyAgICBmaQorKyAgZmkKKysKKysgICMgQSBzZWQgc2NyaXB0IHRoYXQgZXh0cmFjdHMgdGhlIHZhbHVlIG9mIFZBUklBQkxFIGZyb20gYSBNYWtlZmlsZS4KKysgIHNlZF94X3ZhcmlhYmxlPScKKysjIFRlc3QgaWYgdGhlIGhvbGQgc3BhY2UgaXMgZW1wdHkuCisreAorK3MvUC9QLworK3gKKyt0YQorKyMgWWVzIGl0IHdhcyBlbXB0eS4gTG9vayBpZiB3ZSBoYXZlIHRoZSBleHBlY3RlZCB2YXJpYWJsZSBkZWZpbml0aW9uLgorKy9eWwkgXSpWQVJJQUJMRVsJIF0qPS97CisrICAjIFNlZW4gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHZhcmlhYmxlIGRlZmluaXRpb24uCisrICBzL15bCSBdKlZBUklBQkxFWwkgXSo9Ly8KKysgIGJhCisrfQorK2JkCisrOmEKKysjIEhlcmUgd2UgYXJlIHByb2Nlc3NpbmcgYSBsaW5lIGZyb20gdGhlIHZhcmlhYmxlIGRlZmluaXRpb24uCisrIyBSZW1vdmUgY29tbWVudCwgbW9yZSBwcmVjaXNlbHkgcmVwbGFjZSBpdCB3aXRoIGEgc3BhY2UuCisrcy8jLiokLyAvCisrIyBTZWUgaWYgdGhlIGxpbmUgZW5kcyBpbiBhIGJhY2tzbGFzaC4KKyt0YgorKzpiCisrcy9cXCQvLworKyMgUHJpbnQgdGhlIGxpbmUsIHdpdGhvdXQgdGhlIHRyYWlsaW5nIGJhY2tzbGFzaC4KKytwCisrdGMKKysjIFRoZXJlIHdhcyBubyB0cmFpbGluZyBiYWNrc2xhc2guIFRoZSBlbmQgb2YgdGhlIHZhcmlhYmxlIGRlZmluaXRpb24gaXMKKysjIHJlYWNoZWQuIENsZWFyIHRoZSBob2xkIHNwYWNlLgorK3MvXi4qJC8vCisreAorK2JkCisrOmMKKysjIEEgdHJhaWxpbmcgYmFja3NsYXNoIG1lYW5zIHRoYXQgdGhlIHZhcmlhYmxlIGRlZmluaXRpb24gY29udGludWVzIGluIHRoZQorKyMgbmV4dCBsaW5lLiBQdXQgYSBub25lbXB0eSBzdHJpbmcgaW50byB0aGUgaG9sZCBzcGFjZSB0byBpbmRpY2F0ZSB0aGlzLgorK3MvXi4qJC9QLworK3gKKys6ZAorKycKKytjaGFuZ2VxdW90ZShbLF0pZG5sCisrCisrICAjIFNldCBQT1RGSUxFUyB0byB0aGUgdmFsdWUgb2YgdGhlIE1ha2VmaWxlIHZhcmlhYmxlIFBPVEZJTEVTLgorKyAgc2VkX3hfUE9URklMRVM9ImAkZ3RfZWNobyBcIiRzZWRfeF92YXJpYWJsZVwiIHwgc2VkIC1lICcvXiAqIy9kJyAtZSAncy9WQVJJQUJMRS9QT1RGSUxFUy9nJ2AiCisrICBQT1RGSUxFUz1gc2VkIC1uIC1lICIkc2VkX3hfUE9URklMRVMiIDwgIiRhY19maWxlImAKKysgICMgQ29tcHV0ZSBQT1RGSUxFU19ERVBTIGFzCisrICAjICAgJChmb3JlYWNoIGZpbGUsICQoUE9URklMRVMpLCAkKHRvcF9zcmNkaXIpLyQoZmlsZSkpCisrICBQT1RGSUxFU19ERVBTPQorKyAgZm9yIGZpbGUgaW4gJFBPVEZJTEVTOyBkbworKyAgICBQT1RGSUxFU19ERVBTPSIkUE9URklMRVNfREVQUyAiJyQodG9wX3NyY2RpcikvJyIkZmlsZSIKKysgIGRvbmUKKysgIFBPTUFLRUZJTEVERVBTPSIiCisrCisrICBpZiB0ZXN0IC1uICIkT0JTT0xFVEVfQUxMX0xJTkdVQVMiOyB0aGVuCisrICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBzZXR0aW5nIEFMTF9MSU5HVUFTIGluIGNvbmZpZ3VyZS5pbiBpcyBvYnNvbGV0ZSIgfHwgZWNobyAic2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiCisrICBmaQorKyAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL0xJTkdVQVMiOyB0aGVuCisrICAgICMgVGhlIExJTkdVQVMgZmlsZSBjb250YWlucyB0aGUgc2V0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMuCisrICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9MSU5HVUFTImAKKysgICAgUE9NQUtFRklMRURFUFM9IiRQT01BS0VGSUxFREVQUyBMSU5HVUFTIgorKyAgZWxzZQorKyAgICAjIFNldCBBTExfTElOR1VBUyB0byB0aGUgdmFsdWUgb2YgdGhlIE1ha2VmaWxlIHZhcmlhYmxlIExJTkdVQVMuCisrICAgIHNlZF94X0xJTkdVQVM9ImAkZ3RfZWNobyBcIiRzZWRfeF92YXJpYWJsZVwiIHwgc2VkIC1lICcvXiAqIy9kJyAtZSAncy9WQVJJQUJMRS9MSU5HVUFTL2cnYCIKKysgICAgQUxMX0xJTkdVQVNfPWBzZWQgLW4gLWUgIiRzZWRfeF9MSU5HVUFTIiA8ICIkYWNfZmlsZSJgCisrICBmaQorKyAgIyBIaWRlIHRoZSBBTExfTElOR1VBUyBhc3NpZ21lbnQgZnJvbSBhdXRvbWFrZS4KKysgIGV2YWwgJ0FMTF9MSU5HVUFTJyc9JEFMTF9MSU5HVUFTXycKKysgICMgQ29tcHV0ZSBQT0ZJTEVTCisrICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5wbykKKysgICMgQ29tcHV0ZSBVUERBVEVQT0ZJTEVTCisrICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLnBvLXVwZGF0ZSkKKysgICMgQ29tcHV0ZSBEVU1NWVBPRklMRVMKKysgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQobGFuZykubm9wKQorKyAgIyBDb21wdXRlIEdNT0ZJTEVTCisrICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5nbW8pCisrICAjIENvbXB1dGUgUFJPUEVSVElFU0ZJTEVTCisrICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHRvcF9zcmNkaXIpLyQoRE9NQUlOKV8kKGxhbmcpLnByb3BlcnRpZXMpCisrICAjIENvbXB1dGUgQ0xBU1NGSUxFUworKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJCh0b3Bfc3JjZGlyKS8kKERPTUFJTilfJChsYW5nKS5jbGFzcykKKysgICMgQ29tcHV0ZSBRTUZJTEVTCisrICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5xbSkKKysgICMgQ29tcHV0ZSBNU0dGSUxFUworKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQoZnJvYiAkKGxhbmcpKS5tc2cpCisrICAjIENvbXB1dGUgUkVTT1VSQ0VTRExMRklMRVMKKysgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGZyb2IgJChsYW5nKSkvJChET01BSU4pLnJlc291cmNlcy5kbGwpCisrICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgorKyAgICAuKSBzcmNkaXJwcmU9IDs7CisrICAgICopIHNyY2RpcnByZT0nJChzcmNkaXIpLycgOzsKKysgIGVzYWMKKysgIFBPRklMRVM9CisrICBVUERBVEVQT0ZJTEVTPQorKyAgRFVNTVlQT0ZJTEVTPQorKyAgR01PRklMRVM9CisrICBQUk9QRVJUSUVTRklMRVM9CisrICBDTEFTU0ZJTEVTPQorKyAgUU1GSUxFUz0KKysgIE1TR0ZJTEVTPQorKyAgUkVTT1VSQ0VTRExMRklMRVM9CisrICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisrICAgIFBPRklMRVM9IiRQT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5wbyIKKysgICAgVVBEQVRFUE9GSUxFUz0iJFVQREFURVBPRklMRVMgJGxhbmcucG8tdXBkYXRlIgorKyAgICBEVU1NWVBPRklMRVM9IiREVU1NWVBPRklMRVMgJGxhbmcubm9wIgorKyAgICBHTU9GSUxFUz0iJEdNT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5nbW8iCisrICAgIFBST1BFUlRJRVNGSUxFUz0iJFBST1BFUlRJRVNGSUxFUyBcJCh0b3Bfc3JjZGlyKS9cJChET01BSU4pXyRsYW5nLnByb3BlcnRpZXMiCisrICAgIENMQVNTRklMRVM9IiRDTEFTU0ZJTEVTIFwkKHRvcF9zcmNkaXIpL1wkKERPTUFJTilfJGxhbmcuY2xhc3MiCisrICAgIFFNRklMRVM9IiRRTUZJTEVTICRzcmNkaXJwcmUkbGFuZy5xbSIKKysgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXC4uKiQvLycgLWUgJ3kvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovJ2AKKysgICAgTVNHRklMRVM9IiRNU0dGSUxFUyAkc3JjZGlycHJlJGZyb2JiZWRsYW5nLm1zZyIKKysgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXy8tL2cnYAorKyAgICBSRVNPVVJDRVNETExGSUxFUz0iJFJFU09VUkNFU0RMTEZJTEVTICRzcmNkaXJwcmUkZnJvYmJlZGxhbmcvXCQoRE9NQUlOKS5yZXNvdXJjZXMuZGxsIgorKyAgZG9uZQorKyAgIyBDQVRBTE9HUyBkZXBlbmRzIG9uIGJvdGggJGFjX2RpciBhbmQgdGhlIHVzZXIncyBMSU5HVUFTCisrICAjIGVudmlyb25tZW50IHZhcmlhYmxlLgorKyAgSU5TVF9MSU5HVUFTPQorKyAgaWYgdGVzdCAtbiAiJEFMTF9MSU5HVUFTIjsgdGhlbgorKyAgICBmb3IgcHJlc2VudGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworKyAgICAgIHVzZWl0PW5vCisrICAgICAgaWYgdGVzdCAiJVVOU0VUJSIgIT0gIiRMSU5HVUFTIjsgdGhlbgorKyAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJExJTkdVQVMiCisrICAgICAgZWxzZQorKyAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJEFMTF9MSU5HVUFTIgorKyAgICAgIGZpCisrICAgICAgZm9yIGRlc2lyZWRsYW5nIGluICRkZXNpcmVkbGFuZ3VhZ2VzOyBkbworKyAgICAgICAgIyBVc2UgdGhlIHByZXNlbnRsYW5nIGNhdGFsb2cgaWYgZGVzaXJlZGxhbmcgaXMKKysgICAgICAgICMgICBhLiBlcXVhbCB0byBwcmVzZW50bGFuZywgb3IKKysgICAgICAgICMgICBiLiBhIHZhcmlhbnQgb2YgcHJlc2VudGxhbmcgKGJlY2F1c2UgaW4gdGhpcyBjYXNlLAorKyAgICAgICAgIyAgICAgIHByZXNlbnRsYW5nIGNhbiBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgZm9yIG1lc3NhZ2VzCisrICAgICAgICAjICAgICAgd2hpY2ggYXJlIG5vdCB0cmFuc2xhdGVkIGluIHRoZSBkZXNpcmVkbGFuZyBjYXRhbG9nKS4KKysgICAgICAgIGNhc2UgIiRkZXNpcmVkbGFuZyIgaW4KKysgICAgICAgICAgIiRwcmVzZW50bGFuZyIqKSB1c2VpdD15ZXM7OworKyAgICAgICAgZXNhYworKyAgICAgIGRvbmUKKysgICAgICBpZiB0ZXN0ICR1c2VpdCA9IHllczsgdGhlbgorKyAgICAgICAgSU5TVF9MSU5HVUFTPSIkSU5TVF9MSU5HVUFTICRwcmVzZW50bGFuZyIKKysgICAgICBmaQorKyAgICBkb25lCisrICBmaQorKyAgQ0FUQUxPR1M9CisrICBKQVZBQ0FUQUxPR1M9CisrICBRVENBVEFMT0dTPQorKyAgVENMQ0FUQUxPR1M9CisrICBDU0hBUlBDQVRBTE9HUz0KKysgIGlmIHRlc3QgLW4gIiRJTlNUX0xJTkdVQVMiOyB0aGVuCisrICAgIGZvciBsYW5nIGluICRJTlNUX0xJTkdVQVM7IGRvCisrICAgICAgQ0FUQUxPR1M9IiRDQVRBTE9HUyAkbGFuZy5nbW8iCisrICAgICAgSkFWQUNBVEFMT0dTPSIkSkFWQUNBVEFMT0dTIFwkKERPTUFJTilfJGxhbmcucHJvcGVydGllcyIKKysgICAgICBRVENBVEFMT0dTPSIkUVRDQVRBTE9HUyAkbGFuZy5xbSIKKysgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9cLi4qJC8vJyAtZSAneS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8nYAorKyAgICAgIFRDTENBVEFMT0dTPSIkVENMQ0FUQUxPR1MgJGZyb2JiZWRsYW5nLm1zZyIKKysgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9fLy0vZydgCisrICAgICAgQ1NIQVJQQ0FUQUxPR1M9IiRDU0hBUlBDQVRBTE9HUyAkZnJvYmJlZGxhbmcvXCQoRE9NQUlOKS5yZXNvdXJjZXMuZGxsIgorKyAgICBkb25lCisrICBmaQorKworKyAgc2VkIC1lICJzfEBQT1RGSUxFU19ERVBTQHwkUE9URklMRVNfREVQU3xnIiAtZSAic3xAUE9GSUxFU0B8JFBPRklMRVN8ZyIgLWUgInN8QFVQREFURVBPRklMRVNAfCRVUERBVEVQT0ZJTEVTfGciIC1lICJzfEBEVU1NWVBPRklMRVNAfCREVU1NWVBPRklMRVN8ZyIgLWUgInN8QEdNT0ZJTEVTQHwkR01PRklMRVN8ZyIgLWUgInN8QFBST1BFUlRJRVNGSUxFU0B8JFBST1BFUlRJRVNGSUxFU3xnIiAtZSAic3xAQ0xBU1NGSUxFU0B8JENMQVNTRklMRVN8ZyIgLWUgInN8QFFNRklMRVNAfCRRTUZJTEVTfGciIC1lICJzfEBNU0dGSUxFU0B8JE1TR0ZJTEVTfGciIC1lICJzfEBSRVNPVVJDRVNETExGSUxFU0B8JFJFU09VUkNFU0RMTEZJTEVTfGciIC1lICJzfEBDQVRBTE9HU0B8JENBVEFMT0dTfGciIC1lICJzfEBKQVZBQ0FUQUxPR1NAfCRKQVZBQ0FUQUxPR1N8ZyIgLWUgInN8QFFUQ0FUQUxPR1NAfCRRVENBVEFMT0dTfGciIC1lICJzfEBUQ0xDQVRBTE9HU0B8JFRDTENBVEFMT0dTfGciIC1lICJzfEBDU0hBUlBDQVRBTE9HU0B8JENTSEFSUENBVEFMT0dTfGciIC1lICdzLF4jZGlzdGRpcjosZGlzdGRpcjosJyA8ICIkYWNfZmlsZSIgPiAiJGFjX2ZpbGUudG1wIgorKyAgaWYgZ3JlcCAtbCAnQFRDTENBVEFMT0dTQCcgIiRhY19maWxlIiA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICAjIEFkZCBkZXBlbmRlbmNpZXMgdGhhdCBjYW5ub3QgYmUgZm9ybXVsYXRlZCBhcyBhIHNpbXBsZSBzdWZmaXggcnVsZS4KKysgICAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworKyAgICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL1wuLiokLy8nIC1lICd5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LydgCisrICAgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCisrJGZyb2JiZWRsYW5nLm1zZzogJGxhbmcucG8KKysJQGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8iOyBcCisrCVwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgIlwkKHNyY2RpcikiIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyB8fCB7IHJtIC1mICJcJChzcmNkaXIpLyRmcm9iYmVkbGFuZy5tc2ciOyBleGl0IDE7IH0KKytFT0YKKysgICAgZG9uZQorKyAgZmkKKysgIGlmIGdyZXAgLWwgJ0BDU0hBUlBDQVRBTE9HU0AnICIkYWNfZmlsZSIgPiAvZGV2L251bGw7IHRoZW4KKysgICAgIyBBZGQgZGVwZW5kZW5jaWVzIHRoYXQgY2Fubm90IGJlIGZvcm11bGF0ZWQgYXMgYSBzaW1wbGUgc3VmZml4IHJ1bGUuCisrICAgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKysgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9fLy0vZydgCisrICAgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCisrJGZyb2JiZWRsYW5nL1wkKERPTUFJTikucmVzb3VyY2VzLmRsbDogJGxhbmcucG8KKysJQGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS1jc2hhcnAgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gLXIgXCQoRE9NQUlOKSI7IFwKKysJXCQoTVNHRk1UKSAtYyAtLWNzaGFycCAtZCAiXCQoc3JjZGlyKSIgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIC1yICJcJChET01BSU4pIiB8fCB7IHJtIC1mICJcJChzcmNkaXIpLyRmcm9iYmVkbGFuZy5tc2ciOyBleGl0IDE7IH0KKytFT0YKKysgICAgZG9uZQorKyAgZmkKKysgIGlmIHRlc3QgLW4gIiRQT01BS0VGSUxFREVQUyI7IHRoZW4KKysgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCisrTWFrZWZpbGU6ICRQT01BS0VGSUxFREVQUworK0VPRgorKyAgZmkKKysgIG12ICIkYWNfZmlsZS50bXAiICIkYWNfZmlsZSIKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9wcmludGYtcG9zaXgubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L3ByaW50Zi1wb3NpeC5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0Ljk3NDY1NDAwMCAtMDQwMAorQEAgLTAsMCArMSw0NiBAQAorKyMgcHJpbnRmLXBvc2l4Lm00IHNlcmlhbCAyIChnZXR0ZXh0LTAuMTMuMSkKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorK2RubCBUZXN0IHdoZXRoZXIgdGhlIHByaW50ZigpIGZ1bmN0aW9uIHN1cHBvcnRzIFBPU0lYL1hTSSBmb3JtYXQgc3RyaW5ncyB3aXRoCisrZG5sIHBvc2l0aW9ucy4KKysKKytBQ19ERUZVTihbZ3RfUFJJTlRGX1BPU0lYXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKysgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHByaW50ZigpIHN1cHBvcnRzIFBPU0lYL1hTSSBmb3JtYXQgc3RyaW5nc10sCisrICAgIGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4LAorKyAgICBbCisrICAgICAgQUNfVFJZX1JVTihbCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKy8qIFRoZSBzdHJpbmcgIiUyJGQgJTEkZCIsIHdpdGggZG9sbGFyIGNoYXJhY3RlcnMgcHJvdGVjdGVkIGZyb20gdGhlIHNoZWxsJ3MKKysgICBkb2xsYXIgZXhwYW5zaW9uIChwb3NzaWJseSBhbiBhdXRvY29uZiBidWcpLiAgKi8KKytzdGF0aWMgY2hhciBmb3JtYXRbXSA9IHsgJyUnLCAnMicsICckJywgJ2QnLCAnICcsICclJywgJzEnLCAnJCcsICdkJywgJ1wwJyB9OworK3N0YXRpYyBjaGFyIGJ1ZlsxMDBdOworK2ludCBtYWluICgpCisreworKyAgc3ByaW50ZiAoYnVmLCBmb3JtYXQsIDMzLCA1NSk7CisrICByZXR1cm4gKHN0cmNtcCAoYnVmLCAiNTUgMzMiKSAhPSAwKTsKKyt9XSwgZ3RfY3ZfZnVuY19wcmludGZfcG9zaXg9eWVzLCBndF9jdl9mdW5jX3ByaW50Zl9wb3NpeD1ubywKKysgICAgICBbCisrICAgICAgICBBQ19FR1JFUF9DUFAobm90cG9zaXgsIFsKKysjaWYgZGVmaW5lZCBfX05ldEJTRF9fIHx8IGRlZmluZWQgX01TQ19WRVIgfHwgZGVmaW5lZCBfX01JTkdXMzJfXyB8fCBkZWZpbmVkIF9fQ1lHV0lOX18KKysgIG5vdHBvc2l4CisrI2VuZGlmCisrICAgICAgICBdLCBndF9jdl9mdW5jX3ByaW50Zl9wb3NpeD0iZ3Vlc3Npbmcgbm8iLAorKyAgICAgICAgICAgZ3RfY3ZfZnVuY19wcmludGZfcG9zaXg9Imd1ZXNzaW5nIHllcyIpCisrICAgICAgXSkKKysgICAgXSkKKysgIGNhc2UgJGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4IGluCisrICAgICp5ZXMpCisrICAgICAgQUNfREVGSU5FKEhBVkVfUE9TSVhfUFJJTlRGLCAxLAorKyAgICAgICAgW0RlZmluZSBpZiB5b3VyIHByaW50ZigpIGZ1bmN0aW9uIHN1cHBvcnRzIGZvcm1hdCBzdHJpbmdzIHdpdGggcG9zaXRpb25zLl0pCisrICAgICAgOzsKKysgIGVzYWMKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9wcm9ndGVzdC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvcHJvZ3Rlc3QubTQJMjAwNC0wOS0xMiAxNDo0MDozNC45OTA2NTE1NjggLTA0MDAKK0BAIC0wLDAgKzEsOTEgQEAKKysjIHByb2d0ZXN0Lm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTIpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ni0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrZG5sCisrZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKKytkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CisrZG5sIGZ1bmN0aW9uYWxpdHkuCisrZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKytkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCisrZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKysKKytkbmwgQXV0aG9yczoKKytkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5Ni4KKysKKysjIFNlYXJjaCBwYXRoIGZvciBhIHByb2dyYW0gd2hpY2ggcGFzc2VzIHRoZSBnaXZlbiB0ZXN0LgorKworK2RubCBBTV9QQVRIX1BST0dfV0lUSF9URVNUKFZBUklBQkxFLCBQUk9HLVRPLUNIRUNLLUZPUiwKKytkbmwgICBURVNULVBFUkZPUk1FRC1PTi1GT1VORF9QUk9HUkFNIFssIFZBTFVFLUlGLU5PVC1GT1VORCBbLCBQQVRIXV0pCisrQUNfREVGVU4oW0FNX1BBVEhfUFJPR19XSVRIX1RFU1RdLAorK1sKKysjIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCisrIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCisraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKysgIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKysgIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKKysgIGNobW9kICt4IGNvbmYkJC5zaAorKyAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisrICBlbHNlCisrICAgIFBBVEhfU0VQQVJBVE9SPToKKysgIGZpCisrICBybSAtZiBjb25mJCQuc2gKKytmaQorKworKyMgRmluZCBvdXQgaG93IHRvIHRlc3QgZm9yIGV4ZWN1dGFibGUgZmlsZXMuIERvbid0IHVzZSBhIHplcm8tYnl0ZSBmaWxlLAorKyMgYXMgc3lzdGVtcyBtYXkgdXNlIG1ldGhvZHMgb3RoZXIgdGhhbiBtb2RlIGJpdHMgdG8gZGV0ZXJtaW5lIGV4ZWN1dGFiaWxpdHkuCisrY2F0ID5jb25mJCQuZmlsZSA8PF9BU0VPRgorKyMhIC9iaW4vc2gKKytleGl0IDAKKytfQVNFT0YKKytjaG1vZCAreCBjb25mJCQuZmlsZQorK2lmIHRlc3QgLXggY29uZiQkLmZpbGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBhY19leGVjdXRhYmxlX3A9InRlc3QgLXgiCisrZWxzZQorKyAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgorK2ZpCisrcm0gLWYgY29uZiQkLmZpbGUKKysKKysjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiQyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJDI7IGFjX3dvcmQ9WyRdMgorK0FDX01TR19DSEVDS0lORyhbZm9yICRhY193b3JkXSkKKytBQ19DQUNIRV9WQUwoYWNfY3ZfcGF0aF8kMSwKKytbY2FzZSAiWyRdJDEiIGluCisrICBbW1xcL11dKiB8ID86W1tcXC9dXSopCisrICAgIGFjX2N2X3BhdGhfJDE9IlskXSQxIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKysgICAgOzsKKysgICopCisrICAgIGFjX3NhdmVfSUZTPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorKyAgICBmb3IgYWNfZGlyIGluIGlmZWxzZShbJDVdLCAsICRQQVRILCBbJDVdKTsgZG8KKysgICAgICBJRlM9IiRhY19zYXZlX0lGUyIKKysgICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorKyAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgICAgICAgaWYgJGFjX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgICAgICAgICAgaWYgWyQzXTsgdGhlbgorKyAgICAgICAgICAgIGFjX2N2X3BhdGhfJDE9IiRhY19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisrICAgICAgICAgICAgYnJlYWsgMgorKyAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgICBkb25lCisrICAgIGRvbmUKKysgICAgSUZTPSIkYWNfc2F2ZV9JRlMiCisrZG5sIElmIG5vIDR0aCBhcmcgaXMgZ2l2ZW4sIGxlYXZlIHRoZSBjYWNoZSB2YXJpYWJsZSB1bnNldCwKKytkbmwgc28gQUNfUEFUSF9QUk9HUyB3aWxsIGtlZXAgbG9va2luZy4KKytpZmVsc2UoWyQ0XSwgLCAsIFsgIHRlc3QgLXogIlskXWFjX2N2X3BhdGhfJDEiICYmIGFjX2N2X3BhdGhfJDE9IiQ0IgorK10pZG5sCisrICAgIDs7CisrZXNhY10pZG5sCisrJDE9IiRhY19jdl9wYXRoXyQxIgorK2lmIHRlc3QgaWZlbHNlKFskNF0sICwgWy1uICJbJF0kMSJdLCBbIlskXSQxIiAhPSAiJDQiXSk7IHRoZW4KKysgIEFDX01TR19SRVNVTFQoWyRdJDEpCisrZWxzZQorKyAgQUNfTVNHX1JFU1VMVChubykKKytmaQorK0FDX1NVQlNUKCQxKWRubAorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3NpZ25lZC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvc2lnbmVkLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTk2NjUwNjU2IC0wNDAwCitAQCAtMCwwICsxLDE5IEBACisrIyBzaWduZWQubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMC40MCkKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrQUNfREVGVU4oW2JoX0NfU0lHTkVEXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIHNpZ25lZF0sIGJoX2N2X2Nfc2lnbmVkLAorKyAgIFtBQ19UUllfQ09NUElMRSgsIFtzaWduZWQgY2hhciB4O10sIGJoX2N2X2Nfc2lnbmVkPXllcywgYmhfY3ZfY19zaWduZWQ9bm8pXSkKKysgIGlmIHRlc3QgJGJoX2N2X2Nfc2lnbmVkID0gbm87IHRoZW4KKysgICAgQUNfREVGSU5FKHNpZ25lZCwgLAorKyAgICAgICAgICAgICAgW0RlZmluZSB0byBlbXB0eSBpZiB0aGUgQyBjb21waWxlciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBrZXl3b3JkLl0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3NpemVfbWF4Lm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9zaXplX21heC5tNAkyMDA0LTA5LTEyIDE0OjQwOjM1LjAwMzY0OTU5MiAtMDQwMAorQEAgLTAsMCArMSw2MSBAQAorKyMgc2l6ZV9tYXgubTQgc2VyaWFsIDIKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK0FDX0RFRlVOKFtnbF9TSVpFX01BWF0sCisrWworKyAgQUNfQ0hFQ0tfSEVBREVSUyhzdGRpbnQuaCkKKysgIGRubCBGaXJzdCB0ZXN0IHdoZXRoZXIgdGhlIHN5c3RlbSBhbHJlYWR5IGhhcyBTSVpFX01BWC4KKysgIEFDX01TR19DSEVDS0lORyhbZm9yIFNJWkVfTUFYXSkKKysgIHJlc3VsdD0KKysgIEFDX0VHUkVQX0NQUChbRm91bmQgaXRdLCBbCisrI2luY2x1ZGUgPGxpbWl0cy5oPgorKyNpZiBIQVZFX1NURElOVF9ICisrI2luY2x1ZGUgPHN0ZGludC5oPgorKyNlbmRpZgorKyNpZmRlZiBTSVpFX01BWAorK0ZvdW5kIGl0CisrI2VuZGlmCisrXSwgcmVzdWx0PXllcykKKysgIGlmIHRlc3QgLXogIiRyZXN1bHQiOyB0aGVuCisrICAgIGRubCBEZWZpbmUgaXQgb3Vyc2VsdmVzLiBIZXJlIHdlIGFzc3VtZSB0aGF0IHRoZSB0eXBlICdzaXplX3QnIGlzIG5vdCB3aWRlcgorKyAgICBkbmwgdGhhbiB0aGUgdHlwZSAndW5zaWduZWQgbG9uZycuCisrICAgIGRubCBUaGUgX0FDX0NPTVBVVEVfSU5UIG1hY3JvIHdvcmtzIHVwIHRvIExPTkdfTUFYLCBzaW5jZSBpdCB1c2VzICdleHByJywKKysgICAgZG5sIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gd29yayBmcm9tIExPTkdfTUlOIHRvIExPTkdfTUFYLgorKyAgICBfQUNfQ09NUFVURV9JTlQoW34oc2l6ZV90KTAgLyAxMF0sIHJlc19oaSwKKysgICAgICBbI2luY2x1ZGUgPHN0ZGRlZi5oPl0sIHJlc3VsdD0/KQorKyAgICBfQUNfQ09NUFVURV9JTlQoW34oc2l6ZV90KTAgJSAxMF0sIHJlc19sbywKKysgICAgICBbI2luY2x1ZGUgPHN0ZGRlZi5oPl0sIHJlc3VsdD0/KQorKyAgICBfQUNfQ09NUFVURV9JTlQoW3NpemVvZiAoc2l6ZV90KSA8PSBzaXplb2YgKHVuc2lnbmVkIGludCldLCBmaXRzX2luX3VpbnQsCisrICAgICAgWyNpbmNsdWRlIDxzdGRkZWYuaD5dLCByZXN1bHQ9PykKKysgICAgaWYgdGVzdCAiJGZpdHNfaW5fdWludCIgPSAxOyB0aGVuCisrICAgICAgZG5sIEV2ZW4gdGhvdWdoIFNJWkVfTUFYIGZpdHMgaW4gYW4gdW5zaWduZWQgaW50LCBpdCBtdXN0IGJlIG9mIHR5cGUKKysgICAgICBkbmwgJ3Vuc2lnbmVkIGxvbmcnIGlmIHRoZSB0eXBlICdzaXplX3QnIGlzIHRoZSBzYW1lIGFzICd1bnNpZ25lZCBsb25nJy4KKysgICAgICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyAgICAgICAgZXh0ZXJuIHNpemVfdCBmb287CisrICAgICAgICBleHRlcm4gdW5zaWduZWQgbG9uZyBmb287CisrICAgICAgICBdLCBbXSwgZml0c19pbl91aW50PTApCisrICAgIGZpCisrICAgIGlmIHRlc3QgLXogIiRyZXN1bHQiOyB0aGVuCisrICAgICAgaWYgdGVzdCAiJGZpdHNfaW5fdWludCIgPSAxOyB0aGVuCisrICAgICAgICByZXN1bHQ9IiRyZXNfaGkkcmVzX2xvIlUKKysgICAgICBlbHNlCisrICAgICAgICByZXN1bHQ9IiRyZXNfaGkkcmVzX2xvIlVMCisrICAgICAgZmkKKysgICAgZWxzZQorKyAgICAgIGRubCBTaG91bGRuJ3QgaGFwcGVuLCBidXQgd2hvIGtub3dzLi4uCisrICAgICAgcmVzdWx0PSd+KHNpemVfdCkwJworKyAgICBmaQorKyAgZmkKKysgIEFDX01TR19SRVNVTFQoWyRyZXN1bHRdKQorKyAgaWYgdGVzdCAiJHJlc3VsdCIgIT0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChbU0laRV9NQVhdLCBbJHJlc3VsdF0sCisrICAgICAgW0RlZmluZSBhcyB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0eXBlICdzaXplX3QnLCBpZiB0aGUgc3lzdGVtIGRvZXNuJ3QgZGVmaW5lIGl0Ll0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3N0ZGludF9oLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9zdGRpbnRfaC5tNAkyMDA0LTA5LTEyIDE0OjQwOjM1LjAwOTY0ODY4MCAtMDQwMAorQEAgLTAsMCArMSwyOCBAQAorKyMgc3RkaW50X2gubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKysKKysjIERlZmluZSBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCBpZiA8c3RkaW50Lmg+IGV4aXN0cywKKysjIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LCBhbmQgZGVjbGFyZXMgdWludG1heF90LgorKworK0FDX0RFRlVOKFtqbV9BQ19IRUFERVJfU1RESU5UX0hdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igc3RkaW50LmhdLCBqbV9hY19jdl9oZWFkZXJfc3RkaW50X2gsCisrICBbQUNfVFJZX0NPTVBJTEUoCisrICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN0ZGludC5oPl0sCisrICAgIFt1aW50bWF4X3QgaSA9ICh1aW50bWF4X3QpIC0xO10sCisrICAgIGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaD15ZXMsCisrICAgIGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaD1ubyldKQorKyAgaWYgdGVzdCAkam1fYWNfY3ZfaGVhZGVyX3N0ZGludF9oID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCwgMSwKKysgICAgICBbRGVmaW5lIGlmIDxzdGRpbnQuaD4gZXhpc3RzLCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwKKysgICAgICAgYW5kIGRlY2xhcmVzIHVpbnRtYXhfdC4gXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvdWludG1heF90Lm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC91aW50bWF4X3QubTQJMjAwNC0wOS0xMiAxNDo0MDozNS4wMjE2NDY4NTYgLTA0MDAKK0BAIC0wLDAgKzEsMzIgQEAKKysjIHVpbnRtYXhfdC5tNCBzZXJpYWwgNyAoZ2V0dGV4dC0wLjEyKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworK0FDX1BSRVJFUSgyLjEzKQorKworKyMgRGVmaW5lIHVpbnRtYXhfdCB0byAndW5zaWduZWQgbG9uZycgb3IgJ3Vuc2lnbmVkIGxvbmcgbG9uZycKKysjIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGRlZmluZWQgaW4gPHN0ZGludC5oPiBvciA8aW50dHlwZXMuaD4uCisrCisrQUNfREVGVU4oW2ptX0FDX1RZUEVfVUlOVE1BWF9UXSwKKytbCisrICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfSU5UVFlQRVNfSF0pCisrICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfU1RESU5UX0hdKQorKyAgaWYgdGVzdCAkam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSBubyAmJiB0ZXN0ICRqbV9hY19jdl9oZWFkZXJfc3RkaW50X2ggPSBubzsgdGhlbgorKyAgICBBQ19SRVFVSVJFKFtqbV9BQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR10pCisrICAgIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nID0geWVzIFwKKysgICAgICAmJiBhY190eXBlPSd1bnNpZ25lZCBsb25nIGxvbmcnIFwKKysgICAgICB8fCBhY190eXBlPSd1bnNpZ25lZCBsb25nJworKyAgICBBQ19ERUZJTkVfVU5RVU9URUQodWludG1heF90LCAkYWNfdHlwZSwKKysgICAgICBbRGVmaW5lIHRvIHVuc2lnbmVkIGxvbmcgb3IgdW5zaWduZWQgbG9uZyBsb25nCisrICAgICAgIGlmIDxzdGRpbnQuaD4gYW5kIDxpbnR0eXBlcy5oPiBkb24ndCBkZWZpbmUuXSkKKysgIGVsc2UKKysgICAgQUNfREVGSU5FKEhBVkVfVUlOVE1BWF9ULCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICd1aW50bWF4X3QnIHR5cGUgaW4gPHN0ZGludC5oPiBvciA8aW50dHlwZXMuaD4uXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvdWxvbmdsb25nLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC91bG9uZ2xvbmcubTQJMjAwNC0wOS0xMiAxNDo0MDozNS4wMjg2NDU3OTIgLTA0MDAKK0BAIC0wLDAgKzEsMjUgQEAKKysjIHVsb25nbG9uZy5tNCBzZXJpYWwgMworK2RubCBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworKyMgRGVmaW5lIEhBVkVfVU5TSUdORURfTE9OR19MT05HIGlmICd1bnNpZ25lZCBsb25nIGxvbmcnIHdvcmtzLgorKworK0FDX0RFRlVOKFtqbV9BQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR10sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB1bnNpZ25lZCBsb25nIGxvbmddLCBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZywKKysgIFtBQ19UUllfTElOSyhbdW5zaWduZWQgbG9uZyBsb25nIHVsbCA9IDFVTEw7IGludCBpID0gNjM7XSwKKysgICAgW3Vuc2lnbmVkIGxvbmcgbG9uZyB1bGxtYXggPSAodW5zaWduZWQgbG9uZyBsb25nKSAtMTsKKysgICAgIHJldHVybiB1bGwgPDwgaSB8IHVsbCA+PiBpIHwgdWxsbWF4IC8gdWxsIHwgdWxsbWF4ICUgdWxsO10sCisrICAgIGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nPXllcywKKysgICAgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmc9bm8pXSkKKysgIGlmIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX1VOU0lHTkVEX0xPTkdfTE9ORywgMSwKKysgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAndW5zaWduZWQgbG9uZyBsb25nJyB0eXBlLl0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3djaGFyX3QubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L3djaGFyX3QubTQJMjAwNC0wOS0xMiAxNDo0MDozNS4wMzQ2NDQ4ODAgLTA0MDAKK0BAIC0wLDAgKzEsMjIgQEAKKysjIHdjaGFyX3QubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrZG5sIFRlc3Qgd2hldGhlciA8c3RkZGVmLmg+IGhhcyB0aGUgJ3djaGFyX3QnIHR5cGUuCisrZG5sIFByZXJlcXVpc2l0ZTogQUNfUFJPR19DQworKworK0FDX0RFRlVOKFtndF9UWVBFX1dDSEFSX1RdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igd2NoYXJfdF0sIGd0X2N2X2Nfd2NoYXJfdCwKKysgICAgW0FDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3RkZGVmLmg+CisrICAgICAgIHdjaGFyX3QgZm9vID0gKHdjaGFyX3QpJ1wwJztdLCAsCisrICAgICAgIGd0X2N2X2Nfd2NoYXJfdD15ZXMsIGd0X2N2X2Nfd2NoYXJfdD1ubyldKQorKyAgaWYgdGVzdCAkZ3RfY3ZfY193Y2hhcl90ID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX1dDSEFSX1QsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICd3Y2hhcl90JyB0eXBlLl0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3dpbnRfdC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvd2ludF90Lm00CTIwMDQtMDktMTIgMTQ6NDA6MzUuMDQwNjQzOTY4IC0wNDAwCitAQCAtMCwwICsxLDIyIEBACisrIyB3aW50X3QubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorK2RubCBUZXN0IHdoZXRoZXIgPHdjaGFyLmg+IGhhcyB0aGUgJ3dpbnRfdCcgdHlwZS4KKytkbmwgUHJlcmVxdWlzaXRlOiBBQ19QUk9HX0NDCisrCisrQUNfREVGVU4oW2d0X1RZUEVfV0lOVF9UXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIHdpbnRfdF0sIGd0X2N2X2Nfd2ludF90LAorKyAgICBbQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDx3Y2hhci5oPgorKyAgICAgICB3aW50X3QgZm9vID0gKHdjaGFyX3QpJ1wwJztdLCAsCisrICAgICAgIGd0X2N2X2Nfd2ludF90PXllcywgZ3RfY3ZfY193aW50X3Q9bm8pXSkKKysgIGlmIHRlc3QgJGd0X2N2X2Nfd2ludF90ID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX1dJTlRfVCwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3dpbnRfdCcgdHlwZS5dKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC94c2l6ZS5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQveHNpemUubTQJMjAwNC0wOS0xMiAxNDo0MDozNS4wNDc2NDI5MDQgLTA0MDAKK0BAIC0wLDAgKzEsMTQgQEAKKysjIHhzaXplLm00IHNlcmlhbCAyCisrZG5sIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK0FDX0RFRlVOKFtnbF9YU0laRV0sCisrWworKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL3hzaXplLmguCisrICBBQ19SRVFVSVJFKFtnbF9TSVpFX01BWF0pCisrICBBQ19DSEVDS19IRUFERVJTKHN0ZGludC5oKQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL01ha2VmaWxlLmFtCTE5OTgtMTItMzAgMDY6MTk6NDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9NYWtlZmlsZS5hbQkyMDA0LTA5LTEyIDE0OjQwOjM1LjEyMTYzMTY1NiAtMDQwMAorQEAgLTEsNSArMSw1IEBACisgU1VCRElSUyA9IGxpYiBpbnRsIHNyYyBwbyBtYW4gdGVzdHN1aXRlCistRVhUUkFfRElTVCA9IGNoZWNrLmxyenN6IENPTVBBVEFCSUxJVFkgUkVBRE1FLmN2cyBSRUFETUUuaXNkbjRsaW51eCBcCisrRVhUUkFfRElTVCA9IGNvbmZpZy5ycGF0aCAgY2hlY2subHJ6c3ogQ09NUEFUQUJJTElUWSBSRUFETUUuY3ZzIFJFQURNRS5pc2RuNGxpbnV4IFwKKyAJUkVBRE1FLmdldHRleHQgcnBtcmMgYnVpbGRycG0gc3lzdHlwZS5pbiBmYXN0Y2hlY2suc2ggUkVBRE1FLnRlc3RzIFwKKyAJYmVvcy1ydW5waXBlZC5jIGZhc3RjaGVjay5iZW9zCisgbm9pbnN0X1NDUklQVFM9c3lzdHlwZQorQEAgLTgzLDMgKzgzLDUgQEAKKyBycG06ICQoUFIpLnRhci5neiBTcGVjZmlsZQorIAkkKHNyY2RpcikvYnVpbGRycG0gJChzcmNkaXIpCisgCisrCisrQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvTWFrZWZpbGUuaW4JMTk5OC0xMi0zMCAxMTozMTo0MC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL01ha2VmaWxlLmluCTIwMDQtMDktMTIgMTQ6NDA6MzUuMTA5NjMzNDgwIC0wNDAwCitAQCAtMTI1LDcgKzEyNSw3IEBACisgCSAgJiYgQ09ORklHX0ZJTEVTPSRAIENPTkZJR19IRUFERVJTPSAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMKKyAKKyAkKEFDTE9DQUxfTTQpOiAgY29uZmlndXJlLmluICBhY2luY2x1ZGUubTQKKy0JY2QgJChzcmNkaXIpICYmICQoQUNMT0NBTCkKKysJY2QgJChzcmNkaXIpICYmICQoQUNMT0NBTCkgLUkgbTQKKyAKKyBjb25maWcuc3RhdHVzOiAkKHNyY2RpcikvY29uZmlndXJlCisgCSQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAtLXJlY2hlY2sKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbWtpbnN0YWxsZGlycwkxOTk4LTA0LTI2IDA5OjIwOjUyLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvbWtpbnN0YWxsZGlycwkyMDA0LTA5LTEyIDE0OjQwOjM0LjMzNzc1MDgyNCAtMDQwMAorQEAgLTEsMzQgKzEsMTUwIEBACisgIyEgL2Jpbi9zaAorICMgbWtpbnN0YWxsZGlycyAtLS0gbWFrZSBkaXJlY3RvcnkgaGllcmFyY2h5CistIyBBdXRob3I6IE5vYWggRnJpZWRtYW4gPGZyaWVkbWFuQHByZXAuYWkubWl0LmVkdT4KKysKKytzY3JpcHR2ZXJzaW9uPTIwMDQtMDItMTUuMjAKKysKKysjIE9yaWdpbmFsIGF1dGhvcjogTm9haCBGcmllZG1hbiA8ZnJpZWRtYW5AcHJlcC5haS5taXQuZWR1PgorICMgQ3JlYXRlZDogMTk5My0wNS0xNgorLSMgTGFzdCBtb2RpZmllZDogMTk5NS0wMy0wNQorLSMgUHVibGljIGRvbWFpbgorKyMgUHVibGljIGRvbWFpbi4KKysjCisrIyBUaGlzIGZpbGUgaXMgbWFpbnRhaW5lZCBpbiBBdXRvbWFrZSwgcGxlYXNlIHJlcG9ydAorKyMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bworKyMgPGF1dG9tYWtlLXBhdGNoZXNAZ251Lm9yZz4uCisgCisgZXJyc3RhdHVzPTAKKytkaXJtb2RlPSIiCisgCistZm9yIGZpbGUgaW4gJHsxKyIkQCJ9IDsgZG8KKy0gICBzZXQgZm5vcmQgYGVjaG8gIjokZmlsZSIgfCBzZWQgLW5lICdzL146XC8vIy87cy9eOi8vO3MvXC8vIC9nO3MvXiMvXC8vO3AnYAorLSAgIHNoaWZ0CisrdXNhZ2U9IlwKKytVc2FnZTogbWtpbnN0YWxsZGlycyBbLWhdIFstLWhlbHBdIFstLXZlcnNpb25dIFstbSBNT0RFXSBESVIgLi4uCisgCistICAgcGF0aGNvbXA9CistICAgZm9yIGQgaW4gJHsxKyIkQCJ9IDsgZG8KKy0gICAgIHBhdGhjb21wPSIkcGF0aGNvbXAkZCIKKy0gICAgIGNhc2UgIiRwYXRoY29tcCIgaW4KKy0gICAgICAgLSogKSBwYXRoY29tcD0uLyRwYXRoY29tcCA7OworLSAgICAgZXNhYworK0NyZWF0ZSBlYWNoIGRpcmVjdG9yeSBESVIgKHdpdGggbW9kZSBNT0RFLCBpZiBzcGVjaWZpZWQpLCBpbmNsdWRpbmcgYWxsCisrbGVhZGluZyBmaWxlIG5hbWUgY29tcG9uZW50cy4KKyAKKy0gICAgIGlmIHRlc3QgISAtZCAiJHBhdGhjb21wIjsgdGhlbgorLSAgICAgICAgZWNobyAibWtkaXIgJHBhdGhjb21wIiAxPiYyCistICAgICAgICBta2RpciAiJHBhdGhjb21wIiA+IC9kZXYvbnVsbCAyPiYxIHx8IGxhc3RlcnI9JD8KKy0gICAgIGZpCisrUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4iCisgCistICAgICBpZiB0ZXN0ICEgLWQgIiRwYXRoY29tcCI7IHRoZW4KKysjIHByb2Nlc3MgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworK3doaWxlIHRlc3QgJCMgLWd0IDAgOyBkbworKyAgY2FzZSAkMSBpbgorKyAgICAtaCB8IC0taGVscCB8IC0taCopICAgICAgICAgIyAtaCBmb3IgaGVscAorKyAgICAgIGVjaG8gIiR1c2FnZSIKKysgICAgICBleGl0IDAKKysgICAgICA7OworKyAgICAtbSkgICAgICAgICAgICAgICAgICAgICAgICAgIyAtbSBQRVJNIGFyZworKyAgICAgIHNoaWZ0CisrICAgICAgdGVzdCAkIyAtZXEgMCAmJiB7IGVjaG8gIiR1c2FnZSIgMT4mMjsgZXhpdCAxOyB9CisrICAgICAgZGlybW9kZT0kMQorKyAgICAgIHNoaWZ0CisrICAgICAgOzsKKysgICAgLS12ZXJzaW9uKQorKyAgICAgIGVjaG8gIiQwICRzY3JpcHR2ZXJzaW9uIgorKyAgICAgIGV4aXQgMAorKyAgICAgIDs7CisrICAgIC0tKSAgICAgICAgICAgICAgICAgICAgICAgICAjIHN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKKysgICAgICBzaGlmdAorKyAgICAgIGJyZWFrCisrICAgICAgOzsKKysgICAgLSopICAgICAgICAgICAgICAgICAgICAgICAgICMgdW5rbm93biBvcHRpb24KKysgICAgICBlY2hvICIkdXNhZ2UiIDE+JjIKKysgICAgICBleGl0IDEKKysgICAgICA7OworKyAgICAqKSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmaXJzdCBub24tb3B0IGFyZworKyAgICAgIGJyZWFrCisrICAgICAgOzsKKysgIGVzYWMKKytkb25lCisrCisrZm9yIGZpbGUKKytkbworKyAgaWYgdGVzdCAtZCAiJGZpbGUiOyB0aGVuCisrICAgIHNoaWZ0CisrICBlbHNlCisrICAgIGJyZWFrCisrICBmaQorK2RvbmUKKysKKytjYXNlICQjIGluCisrICAwKSBleGl0IDAgOzsKKytlc2FjCisrCisrIyBTb2xhcmlzIDgncyBta2RpciAtcCBpc24ndCB0aHJlYWQtc2FmZS4gIElmIHlvdSBta2RpciAtcCBhL2IgYW5kCisrIyBta2RpciAtcCBhL2MgYXQgdGhlIHNhbWUgdGltZSwgYm90aCB3aWxsIGRldGVjdCB0aGF0IGEgaXMgbWlzc2luZywKKysjIG9uZSB3aWxsIGNyZWF0ZSBhLCB0aGVuIHRoZSBvdGhlciB3aWxsIHRyeSB0byBjcmVhdGUgYSBhbmQgZGllIHdpdGgKKysjIGEgIkZpbGUgZXhpc3RzIiBlcnJvci4gIFRoaXMgaXMgYSBwcm9ibGVtIHdoZW4gY2FsbGluZyBta2luc3RhbGxkaXJzCisrIyBmcm9tIGEgcGFyYWxsZWwgbWFrZS4gIFdlIHVzZSAtLXZlcnNpb24gaW4gdGhlIHByb2JlIHRvIHJlc3RyaWN0CisrIyBvdXJzZWx2ZXMgdG8gR05VIG1rZGlyLCB3aGljaCBpcyB0aHJlYWQtc2FmZS4KKytjYXNlICRkaXJtb2RlIGluCisrICAnJykKKysgICAgaWYgbWtkaXIgLXAgLS12ZXJzaW9uIC4gPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgISAtZCAuLy0tdmVyc2lvbjsgdGhlbgorKyAgICAgIGVjaG8gIm1rZGlyIC1wIC0tICQqIgorKyAgICAgIGV4ZWMgbWtkaXIgLXAgLS0gIiRAIgorKyAgICBlbHNlCisrICAgICAgIyBPbiBOZXh0U3RlcCBhbmQgT3BlblN0ZXAsIHRoZSBgbWtkaXInIGNvbW1hbmQgZG9lcyBub3QKKysgICAgICAjIHJlY29nbml6ZSBhbnkgb3B0aW9uLiAgSXQgd2lsbCBpbnRlcnByZXQgYWxsIG9wdGlvbnMgYXMKKysgICAgICAjIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZSwgYW5kIHRoZW4gYWJvcnQgYmVjYXVzZSBgLicgYWxyZWFkeQorKyAgICAgICMgZXhpc3RzLgorKyAgICAgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCisrICAgICAgdGVzdCAtZCAuLy0tdmVyc2lvbiAmJiBybWRpciAuLy0tdmVyc2lvbgorKyAgICBmaQorKyAgICA7OworKyAgKikKKysgICAgaWYgbWtkaXIgLW0gIiRkaXJtb2RlIiAtcCAtLXZlcnNpb24gLiA+L2Rldi9udWxsIDI+JjEgJiYKKysgICAgICAgdGVzdCAhIC1kIC4vLS12ZXJzaW9uOyB0aGVuCisrICAgICAgZWNobyAibWtkaXIgLW0gJGRpcm1vZGUgLXAgLS0gJCoiCisrICAgICAgZXhlYyBta2RpciAtbSAiJGRpcm1vZGUiIC1wIC0tICIkQCIKKysgICAgZWxzZQorKyAgICAgICMgQ2xlYW4gdXAgYWZ0ZXIgTmV4dFN0ZXAgYW5kIE9wZW5TdGVwIG1rZGlyLgorKyAgICAgIGZvciBkIGluIC4vLW0gLi8tcCAuLy0tdmVyc2lvbiAiLi8kZGlybW9kZSI7CisrICAgICAgZG8KKysgICAgICAgIHRlc3QgLWQgJGQgJiYgcm1kaXIgJGQKKysgICAgICBkb25lCisrICAgIGZpCisrICAgIDs7CisrZXNhYworKworK2ZvciBmaWxlCisrZG8KKysgIHNldCBmbm9yZCBgZWNobyAiOiRmaWxlIiB8IHNlZCAtbmUgJ3MvXjpcLy8jLztzL146Ly87cy9cLy8gL2c7cy9eIy9cLy87cCdgCisrICBzaGlmdAorKworKyAgcGF0aGNvbXA9CisrICBmb3IgZAorKyAgZG8KKysgICAgcGF0aGNvbXA9IiRwYXRoY29tcCRkIgorKyAgICBjYXNlICRwYXRoY29tcCBpbgorKyAgICAgIC0qKSBwYXRoY29tcD0uLyRwYXRoY29tcCA7OworKyAgICBlc2FjCisrCisrICAgIGlmIHRlc3QgISAtZCAiJHBhdGhjb21wIjsgdGhlbgorKyAgICAgIGVjaG8gIm1rZGlyICRwYXRoY29tcCIKKysKKysgICAgICBta2RpciAiJHBhdGhjb21wIiB8fCBsYXN0ZXJyPSQ/CisrCisrICAgICAgaWYgdGVzdCAhIC1kICIkcGF0aGNvbXAiOyB0aGVuCisgCWVycnN0YXR1cz0kbGFzdGVycgorLSAgICAgZmkKKysgICAgICBlbHNlCisrCWlmIHRlc3QgISAteiAiJGRpcm1vZGUiOyB0aGVuCisrCSAgZWNobyAiY2htb2QgJGRpcm1vZGUgJHBhdGhjb21wIgorKwkgIGxhc3RlcnI9IiIKKysJICBjaG1vZCAiJGRpcm1vZGUiICIkcGF0aGNvbXAiIHx8IGxhc3RlcnI9JD8KKyAKKy0gICAgIHBhdGhjb21wPSIkcGF0aGNvbXAvIgorLSAgIGRvbmUKKysJICBpZiB0ZXN0ICEgLXogIiRsYXN0ZXJyIjsgdGhlbgorKwkgICAgZXJyc3RhdHVzPSRsYXN0ZXJyCisrCSAgZmkKKysJZmkKKysgICAgICBmaQorKyAgICBmaQorKworKyAgICBwYXRoY29tcD0iJHBhdGhjb21wLyIKKysgIGRvbmUKKyBkb25lCisgCisgZXhpdCAkZXJyc3RhdHVzCisrCisrIyBMb2NhbCBWYXJpYWJsZXM6CisrIyBtb2RlOiBzaGVsbC1zY3JpcHQKKysjIHNoLWluZGVudGF0aW9uOiAyCisrIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisrIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisrIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKysjIHRpbWUtc3RhbXAtZW5kOiAiJCIKKysjIEVuZDoKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vYm9sZHF1b3Quc2VkCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9ib2xkcXVvdC5zZWQJMjAwNC0wOS0xMiAxNDo0MDozNC43MjM2OTIxNTIgLTA0MDAKK0BAIC0wLDAgKzEsMTAgQEAKKytzLyJcKFteIl0qXCkiL+KAnFwx4oCdL2cKKytzL2BcKFteYCddKlwpJy/igJhcMeKAmS9nCisrcy8gJ1woW15gJ10qXCknIC8g4oCYXDHigJkgL2cKKytzLyAnXChbXmAnXSpcKSckLyDigJhcMeKAmS9nCisrcy9eJ1woW15gJ10qXCknIC/igJhcMeKAmSAvZworK3Mv4oCc4oCdLyIiL2cKKytzL+KAnC/igJwbWzFtL2cKKytzL+KAnS8bWzBt4oCdL2cKKytzL+KAmC/igJgbWzFtL2cKKytzL+KAmS8bWzBt4oCZL2cKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vY2F0LWlkLXRibC5jCTE5OTgtMTItMjkgMDQ6MjQ6MjQuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9jYXQtaWQtdGJsLmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKK0BAIC0xLDIzNCArMCwwIEBACistLyogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgcG8ydGJsLnNlZCBmcm9tIGxyenN6LnBvdC4gICovCistCistI2lmIEhBVkVfQ09ORklHX0gKKy0jIGluY2x1ZGUgPGNvbmZpZy5oPgorLSNlbmRpZgorLQorLSNpbmNsdWRlICJsaWJnZXR0ZXh0LmgiCistCistY29uc3Qgc3RydWN0IF9tc2dfZW50IF9tc2dfdGJsW10gPSB7CistICB7IiIsIDF9LAorLSAgeyJpb19tb2RlKCwyKSBpbiByYnNiLmMgbm90IGltcGxlbWVudGVkXG4iLCAyfSwKKy0gIHsiY2F1Z2h0IHNpZ25hbCAlZDsgZXhpdGluZyIsIDN9LAorLSAgeyJjb21tYW5kIHRyaWVzIiwgNH0sCistICB7InBhY2tldGxlbmd0aCIsIDV9LAorLSAgeyJwYWNrZXRsZW5ndGggb3V0IG9mIHJhbmdlIDI0Li4lbGQiLCA2fSwKKy0gIHsiZnJhbWVsZW5ndGgiLCA3fSwKKy0gIHsiZnJhbWVsZW5ndGggb3V0IG9mIHJhbmdlIDMyLi4lbGQiLCA4fSwKKy0gIHsibWluX2JwcyIsIDl9LAorLSAgeyJtaW5fYnBzIG11c3QgYmUgPj0gMCIsIDEwfSwKKy0gIHsibWluX2Jwc190aW1lIiwgMTF9LAorLSAgeyJtaW5fYnBzX3RpbWUgbXVzdCBiZSA+IDEiLCAxMn0sCistICB7ImhvdXIgdG8gbGFyZ2UgKDAuLjIzKSIsIDEzfSwKKy0gIHsidW5wYXJzYWJsZSBzdG9wIHRpbWVcbiIsIDE0fSwKKy0gIHsibWludXRlIHRvIGxhcmdlICgwLi41OSkiLCAxNX0sCistICB7InN0b3AgdGltZSB0byBzbWFsbCIsIDE2fSwKKy0gIHsic3RvcC1hdCIsIDE3fSwKKy0gIHsidGltZW91dCIsIDE4fSwKKy0gIHsidGltZW91dCBvdXQgb2YgcmFuZ2UgMTAuLjEwMDAiLCAxOX0sCistICB7InNlY3VyaXR5IHZpb2xhdGlvbjogY2FuJ3QgZG8gdGhhdCB1bmRlciByZXN0cmljdGVkIHNoZWxsXG4iLCAyMH0sCistICB7IndpbmRvdyBzaXplIiwgMjF9LAorLSAgeyJjYW5ub3QgdHVybm9mZiBzeXNsb2ciLCAyMn0sCistICB7InN0YXJ0dXAgZGVsYXkiLCAyM30sCistICB7Im91dCBvZiBtZW1vcnkiLCAyNH0sCistICB7InRoaXMgcHJvZ3JhbSB3YXMgbmV2ZXIgaW50ZW5kZWQgdG8gYmUgdXNlZCBzZXR1aWRcbiIsIDI1fSwKKy0gIHsibmVlZCBhdCBsZWFzdCBvbmUgZmlsZSB0byBzZW5kIiwgMjZ9LAorLSAgeyJDYW4ndCBzZW5kIGNvbW1hbmQgaW4gcmVzdHJpY3RlZCBtb2RlXG4iLCAyN30sCistICB7Imhvc3RuYW1lIHRvbyBsb25nXG4iLCAyOH0sCistICB7ImlsbGVnYWwgc2VydmVyIGFkZHJlc3NcbiIsIDI5fSwKKy0gIHsiY2FuIHJlYWQgb25seSBvbmUgZmlsZSBmcm9tIHN0ZGluIiwgMzB9LAorLSAgeyJUcmFuc2ZlciBpbmNvbXBsZXRlXG4iLCAzMX0sCistICB7IlRyYW5zZmVyIGNvbXBsZXRlXG4iLCAzMn0sCistICB7InNlbmRfcHNldWRvICVzOiBjYW5ub3Qgb3BlbiB0bXBmaWxlICVzOiAlcyIsIDMzfSwKKy0gIHsic2VuZF9wc2V1ZG8gJXM6IGNhbm5vdCBsc3RhdCB0bXBmaWxlICVzOiAlcyIsIDM0fSwKKy0gIHsic2VuZF9wc2V1ZG8gJXM6IGF2b2lkaW5nIHN5bWxpbmsgdHJhcCIsIDM1fSwKKy0gIHsic2VuZF9wc2V1ZG8gJXM6IGNhbm5vdCB3cml0ZSB0byB0bXBmaWxlICVzOiAlcyIsIDM2fSwKKy0gIHsic2VuZF9wc2V1ZG8gJXM6IGZhaWxlZCIsIDM3fSwKKy0gIHsic2VuZF9wc2V1ZG8gJXM6IG9rIiwgMzh9LAorLSAgeyJ0Y3AgcHJvdG9jb2wgaW5pdCBmYWlsZWRcbiIsIDM5fSwKKy0gIHsiQW5zd2VyaW5nIFRJTUVTWU5DIGF0ICVzIiwgNDB9LAorLSAgeyJ0aW1lem9uZSIsIDQxfSwKKy0gIHsidGltZXpvbmUgdW5rbm93biIsIDQyfSwKKy0gIHsiQ2FuJ3Qgb3BlbiBhbnkgcmVxdWVzdGVkIGZpbGVzLiIsIDQzfSwKKy0gIHsic2VjdXJpdHkgdmlvbGF0aW9uOiBub3QgYWxsb3dlZCB0byB1cGxvYWQgZnJvbSAlcyIsIDQ0fSwKKy0gIHsiY2Fubm90IG9wZW4gJXMiLCA0NX0sCistICB7ImlzIG5vdCBhIGZpbGU6ICVzIiwgNDZ9LAorLSAgeyIlcy8lczogZXJyb3Igb2NjdXJlZCIsIDQ3fSwKKy0gIHsic2tpcHBlZDogJXMiLCA0OH0sCistICB7IiVzLyVzOiBza2lwcGVkIiwgNDl9LAorLSAgeyJCeXRlcyBTZW50OiU3bGQgICBCUFM6JS04bGQgICAgICAgICAgICAgICAgICAgICAgICBcbiIsIDUwfSwKKy0gIHsiU2VuZGluZyAlcywgJWxkIGJsb2NrczogIiwgNTF9LAorLSAgeyJHaXZlIHlvdXIgbG9jYWwgWE1PREVNIHJlY2VpdmUgY29tbWFuZCBub3cuIiwgNTJ9LAorLSAgeyJTZW5kaW5nOiAlc1xuIiwgNTN9LAorLSAgeyJUaW1lb3V0IG9uIHBhdGhuYW1lIiwgNTR9LAorLSAgeyJSZWNlaXZlciBDYW5jZWxsZWQiLCA1NX0sCistICB7Ik5vIEFDSyBvbiBFT1QiLCA1Nn0sCistICB7Ilhtb2RlbSBzZWN0b3JzL2tieXRlcyBzZW50OiAlM2QvJTJkayIsIDU3fSwKKy0gIHsiWW1vZGVtIHNlY3RvcnMva2J5dGVzIHNlbnQ6ICUzZC8lMmRrIiwgNTh9LAorLSAgeyJDYW5jZWxsZWQiLCA1OX0sCistICB7IlRpbWVvdXQgb24gc2VjdG9yIEFDSyIsIDYwfSwKKy0gIHsiTkFLIG9uIHNlY3RvciIsIDYxfSwKKy0gIHsiR290IGJ1cnN0IGZvciBzZWN0b3IgQUNLIiwgNjJ9LAorLSAgeyJHb3QgJTAyeCBmb3Igc2VjdG9yIEFDSyIsIDYzfSwKKy0gIHsiUmV0cnkgQ291bnQgRXhjZWVkZWQiLCA2NH0sCistICB7IlRyeSBgJXMgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIsIDY1fSwKKy0gIHsiJXMgdmVyc2lvbiAlc1xuIiwgNjZ9LAorLSAgeyJVc2FnZTogJXMgW29wdGlvbnNdIGZpbGUgLi4uXG4iLCA2N30sCistICB7IiAgIG9yOiAlcyBbb3B0aW9uc10gLXtjfGl9IENPTU1BTkRcbiIsIDY4fSwKKy0gIHsiU2VuZCBmaWxlKHMpIHdpdGggWk1PREVNL1lNT0RFTS9YTU9ERU0gcHJvdG9jb2xcbiIsIDY5fSwKKy0gIHsiXAorLSAgICAoWCkgPSBvcHRpb24gYXBwbGllcyB0byBYTU9ERU0gb25seVxuXAorLSAgICAoWSkgPSBvcHRpb24gYXBwbGllcyB0byBZTU9ERU0gb25seVxuXAorLSAgICAoWikgPSBvcHRpb24gYXBwbGllcyB0byBaTU9ERU0gb25seVxuIiwgNzB9LAorLSAgeyJcCistICAtKywgLS1hcHBlbmQgICAgICAgICAgICAgICAgYXBwZW5kIHRvIGV4aXN0aW5nIGRlc3RpbmF0aW9uIGZpbGUgKFopXG5cCistICAtMiwgLS10d29zdG9wICAgICAgICAgICAgICAgdXNlIDIgc3RvcCBiaXRzXG5cCistICAtNCwgLS10cnktNGsgICAgICAgICAgICAgICAgZ28gdXAgdG8gNEsgYmxvY2tzaXplXG5cCistICAgICAgLS1zdGFydC00ayAgICAgICAgICAgICAgc3RhcnQgd2l0aCA0SyBibG9ja3NpemUgKGRvZXNuJ3QgdHJ5IDgpXG5cCistICAtOCwgLS10cnktOGsgICAgICAgICAgICAgICAgZ28gdXAgdG8gOEsgYmxvY2tzaXplXG5cCistICAgICAgLS1zdGFydC04ayAgICAgICAgICAgICAgc3RhcnQgd2l0aCA4SyBibG9ja3NpemVcblwKKy0gIC1hLCAtLWFzY2lpICAgICAgICAgICAgICAgICBBU0NJSSB0cmFuc2ZlciAoY2hhbmdlIENSL0xGIHRvIExGKVxuXAorLSAgLWIsIC0tYmluYXJ5ICAgICAgICAgICAgICAgIGJpbmFyeSB0cmFuc2ZlclxuXAorLSAgLUIsIC0tYnVmc2l6ZSBOICAgICAgICAgICAgIGJ1ZmZlciBOIGJ5dGVzIChOPT1hdXRvOiBidWZmZXIgd2hvbGUgZmlsZSlcblwKKy0gIC1jLCAtLWNvbW1hbmQgQ09NTUFORCAgICAgICBleGVjdXRlIHJlbW90ZSBjb21tYW5kIENPTU1BTkQgKFopXG5cCistICAtQywgLS1jb21tYW5kLXRyaWVzIE4gICAgICAgdHJ5IE4gdGltZXMgdG8gZXhlY3V0ZSBhIGNvbW1hbmQgKFopXG5cCistICAtZCwgLS1kb3QtdG8tc2xhc2ggICAgICAgICAgY2hhbmdlICcuJyB0byAnLycgaW4gcGF0aG5hbWVzIChZL1opXG5cCistICAgICAgLS1kZWxheS1zdGFydHVwIE4gICAgICAgc2xlZXAgTiBzZWNvbmRzIGJlZm9yZSBkb2luZyBhbnl0aGluZ1xuXAorLSAgLWUsIC0tZXNjYXBlICAgICAgICAgICAgICAgIGVzY2FwZSBhbGwgY29udHJvbCBjaGFyYWN0ZXJzIChaKVxuXAorLSAgLUUsIC0tcmVuYW1lICAgICAgICAgICAgICAgIGZvcmNlIHJlY2VpdmVyIHRvIHJlbmFtZSBmaWxlcyBpdCBhbHJlYWR5IGhhc1xuXAorLSAgLWYsIC0tZnVsbC1wYXRoICAgICAgICAgICAgIHNlbmQgZnVsbCBwYXRobmFtZSAoWS9aKVxuXAorLSAgLWksIC0taW1tZWRpYXRlLWNvbW1hbmQgQ01EIHNlbmQgcmVtb3RlIENNRCwgcmV0dXJuIGltbWVkaWF0ZWx5IChaKVxuXAorLSAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgIHByaW50IHRoaXMgdXNhZ2UgbWVzc2FnZVxuXAorLSAgLWssIC0tMWsgICAgICAgICAgICAgICAgICAgIHNlbmQgMTAyNCBieXRlIHBhY2tldHMgKFgpXG5cCistICAtTCwgLS1wYWNrZXRsZW4gTiAgICAgICAgICAgbGltaXQgc3VicGFja2V0IGxlbmd0aCB0byBOIGJ5dGVzIChaKVxuXAorLSAgLWwsIC0tZnJhbWVsZW4gTiAgICAgICAgICAgIGxpbWl0IGZyYW1lIGxlbmd0aCB0byBOIGJ5dGVzIChsPj1MKSAoWilcblwKKy0gIC1tLCAtLW1pbi1icHMgTiAgICAgICAgICAgICBzdG9wIHRyYW5zbWlzc2lvbiBpZiBCUFMgYmVsb3cgTlxuXAorLSAgLU0sIC0tbWluLWJwcy10aW1lIE4gICAgICAgICAgZm9yIGF0IGxlYXN0IE4gc2Vjb25kcyAoZGVmYXVsdDogMTIwKVxuIiwgNzF9LAorLSAgeyJcCistICAtbiwgLS1uZXdlciAgICAgICAgICAgICAgICAgc2VuZCBmaWxlIGlmIHNvdXJjZSBuZXdlciAoWilcblwKKy0gIC1OLCAtLW5ld2VyLW9yLWxvbmdlciAgICAgICBzZW5kIGZpbGUgaWYgc291cmNlIG5ld2VyIG9yIGxvbmdlciAoWilcblwKKy0gIC1vLCAtLTE2LWJpdC1jcmMgICAgICAgICAgICB1c2UgMTYgYml0IENSQyBpbnN0ZWFkIG9mIDMyIGJpdCBDUkMgKFopXG5cCistICAtTywgLS1kaXNhYmxlLXRpbWVvdXRzICAgICAgZGlzYWJsZSB0aW1lb3V0IGNvZGUsIHdhaXQgZm9yZXZlclxuXAorLSAgLXAsIC0tcHJvdGVjdCAgICAgICAgICAgICAgIHByb3RlY3QgZXhpc3RpbmcgZGVzdGluYXRpb24gZmlsZSAoWilcblwKKy0gIC1yLCAtLXJlc3VtZSAgICAgICAgICAgICAgICByZXN1bWUgaW50ZXJydXB0ZWQgZmlsZSB0cmFuc2ZlciAoWilcblwKKy0gIC1SLCAtLXJlc3RyaWN0ZWQgICAgICAgICAgICByZXN0cmljdGVkLCBtb3JlIHNlY3VyZSBtb2RlXG5cCistICAtcSwgLS1xdWlldCAgICAgICAgICAgICAgICAgcXVpZXQgKG5vIHByb2dyZXNzIHJlcG9ydHMpXG5cCistICAtcywgLS1zdG9wLWF0IHtISDpNTXwrTn0gICAgc3RvcCB0cmFuc21pc3Npb24gYXQgSEg6TU0gb3IgaW4gTiBzZWNvbmRzXG5cCistICAgICAgLS10Y3AgICAgICAgICAgICAgICAgICAgYnVpbGQgYSBUQ1AgY29ubmVjdGlvbiB0byB0cmFuc21pdCBmaWxlc1xuXAorLSAgICAgIC0tdGNwLXNlcnZlciAgICAgICAgICAgIG9wZW4gc29ja2V0LCB3YWl0IGZvciBjb25uZWN0aW9uXG5cCistICAtdSwgLS11bmxpbmsgICAgICAgICAgICAgICAgdW5saW5rIGZpbGUgYWZ0ZXIgdHJhbnNtaXNzaW9uXG5cCistICAtVSwgLS11bnJlc3RyaWN0ICAgICAgICAgICAgdHVybiBvZmYgcmVzdHJpY3RlZCBtb2RlIChpZiBhbGxvd2VkIHRvKVxuXAorLSAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgIGJlIHZlcmJvc2UsIHByb3ZpZGUgZGVidWdnaW5nIGluZm9ybWF0aW9uXG5cCistICAtdywgLS13aW5kb3dzaXplIE4gICAgICAgICAgV2luZG93IGlzIE4gYnl0ZXMgKFopXG5cCistICAtWCwgLS14bW9kZW0gICAgICAgICAgICAgICAgdXNlIFhNT0RFTSBwcm90b2NvbFxuXAorLSAgLXksIC0tb3ZlcndyaXRlICAgICAgICAgICAgIG92ZXJ3cml0ZSBleGlzdGluZyBmaWxlc1xuXAorLSAgLVksIC0tb3ZlcndyaXRlLW9yLXNraXAgICAgIG92ZXJ3cml0ZSBleGlzdGluZyBmaWxlcywgZWxzZSBza2lwXG5cCistICAgICAgLS15bW9kZW0gICAgICAgICAgICAgICAgdXNlIFlNT0RFTSBwcm90b2NvbFxuXAorLSAgLVosIC0tem1vZGVtICAgICAgICAgICAgICAgIHVzZSBaTU9ERU0gcHJvdG9jb2xcblwKKy1cblwKKy1zaG9ydCBvcHRpb25zIHVzZSB0aGUgc2FtZSBhcmd1bWVudHMgYXMgdGhlIGxvbmcgb25lc1xuIiwgNzJ9LAorLSAgeyJnb3QgWlJRSU5JVCIsIDczfSwKKy0gIHsiZ290IFpDQU4iLCA3NH0sCistICB7ImJsa2xlbiBub3cgJWRcbiIsIDc1fSwKKy0gIHsienNlbmRmZGF0YTogYnBzIHJhdGUgJWxkIGJlbG93IG1pbiAlbGQiLCA3Nn0sCistICB7InpzZW5kZmRhdGE6IHJlYWNoZWQgc3RvcCB0aW1lIiwgNzd9LAorLSAgeyJCeXRlcyBTZW50OiU3bGQvJTdsZCAgIEJQUzolLThsZCBFVEEgJTAyZDolMDJkICAiLCA3OH0sCistICB7ImNhbGNfYmxrbGVuOiByZWR1Y2VkIHRvICVkIGR1ZSB0byBlcnJvclxuIiwgNzl9LAorLSAgeyJjYWxjX2Jsa2xlbjogcmV0dXJuZWQgb2xkIHZhbHVlICVkIGR1ZSB0byBsb3cgYnBlIGRpZmZcbiIsIDgwfSwKKy0gIHsiY2FsY19ibGtsZW46IG9sZCAlbGQsIG5ldyAlbGQsIGQgJWxkXG4iLCA4MX0sCistICB7ImNhbGNfYmxrbGVuOiBjYWxjIHRvdGFsX2J5dGVzPSVsZCwgYnBlPSVsZCwgZWM9JWxkXG4iLCA4Mn0sCistICB7ImNhbGNfYmxrbGVuOiBibGtsZW4gJWQsIG9rICVsZCwgZmFpbGVkICVsZCAtPiAlbHVcbiIsIDgzfSwKKy0gIHsiY2FsY19ibGtsZW46IHJldHVybmVkICVkIGFzIGJlc3RcbiIsIDg0fSwKKy0gIHsiXAorLVxuXAorLWNvdW50ZW06IFRvdGFsICVkICVsZFxuIiwgODV9LAorLSAgeyJCYWQgZXNjYXBlIHNlcXVlbmNlICV4IiwgODZ9LAorLSAgeyJTZW5kZXIgQ2FuY2VsZWQiLCA4N30sCistICB7IlRJTUVPVVQiLCA4OH0sCistICB7IkJhZCBkYXRhIHN1YnBhY2tldCIsIDg5fSwKKy0gIHsiRGF0YSBzdWJwYWNrZXQgdG9vIGxvbmciLCA5MH0sCistICB7IkdhcmJhZ2UgY291bnQgZXhjZWVkZWQiLCA5MX0sCistICB7IkdvdCAlcyIsIDkyfSwKKy0gIHsiUmV0cnkgJWQ6ICIsIDkzfSwKKy0gIHsiZG9uJ3QgaGF2ZSBzZXR0aW1lb2ZkYXksIHdpbGwgbm90IHNldCB0aW1lXG4iLCA5NH0sCistICB7Im5vdCBydW5uaW5nIGFzIHJvb3QgKHRoaXMgaXMgZ29vZCEpLCBjYW4gbm90IHNldCB0aW1lXG4iLCA5NX0sCistICB7ImJ5dGVzX3Blcl9lcnJvciIsIDk2fSwKKy0gIHsiYnl0ZXMtcGVyLWVycm9yIHNob3VsZCBiZSA+MTAwIiwgOTd9LAorLSAgeyJPX1NZTkMgbm90IHN1cHBvcnRlZCBieSB0aGUga2VybmVsIiwgOTh9LAorLSAgeyJnYXJiYWdlIG9uIGNvbW1hbmRsaW5lIiwgOTl9LAorLSAgeyJVc2FnZTogJXMgW29wdGlvbnNdIFtmaWxlbmFtZS5pZi54bW9kZW1dXG4iLCAxMDB9LAorLSAgeyJSZWNlaXZlIGZpbGVzIHdpdGggWk1PREVNL1lNT0RFTS9YTU9ERU0gcHJvdG9jb2xcbiIsIDEwMX0sCistICB7IlwKKy0gIC0rLCAtLWFwcGVuZCAgICAgICAgICAgICAgICBhcHBlbmQgdG8gZXhpc3RpbmcgZmlsZXNcblwKKy0gIC1hLCAtLWFzY2lpICAgICAgICAgICAgICAgICBBU0NJSSB0cmFuc2ZlciAoY2hhbmdlIENSL0xGIHRvIExGKVxuXAorLSAgLWIsIC0tYmluYXJ5ICAgICAgICAgICAgICAgIGJpbmFyeSB0cmFuc2ZlclxuXAorLSAgLUIsIC0tYnVmc2l6ZSBOICAgICAgICAgICAgIGJ1ZmZlciBOIGJ5dGVzIChOPT1hdXRvOiBidWZmZXIgd2hvbGUgZmlsZSlcblwKKy0gIC1jLCAtLXdpdGgtY3JjICAgICAgICAgICAgICBVc2UgMTYgYml0IENSQyAoWClcblwKKy0gIC1DLCAtLWFsbG93LXJlbW90ZS1jb21tYW5kcyBhbGxvdyBleGVjdXRpb24gb2YgcmVtb3RlIGNvbW1hbmRzIChaKVxuXAorLSAgLUQsIC0tbnVsbCAgICAgICAgICAgICAgICAgIHdyaXRlIGFsbCByZWNlaXZlZCBkYXRhIHRvIC9kZXYvbnVsbFxuXAorLSAgICAgIC0tZGVsYXktc3RhcnR1cCBOICAgICAgIHNsZWVwIE4gc2Vjb25kcyBiZWZvcmUgZG9pbmcgYW55dGhpbmdcblwKKy0gIC1lLCAtLWVzY2FwZSAgICAgICAgICAgICAgICBFc2NhcGUgY29udHJvbCBjaGFyYWN0ZXJzIChaKVxuXAorLSAgLUUsIC0tcmVuYW1lICAgICAgICAgICAgICAgIHJlbmFtZSBhbnkgZmlsZXMgYWxyZWFkeSBleGlzdGluZ1xuXAorLSAgICAgIC0tZXJyb3JzIE4gICAgICAgICAgICAgIGdlbmVyYXRlIENSQyBlcnJvciBldmVyeSBOIGJ5dGVzIChkZWJ1Z2dpbmcpXG5cCistICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICAgSGVscCwgcHJpbnQgdGhpcyB1c2FnZSBtZXNzYWdlXG5cCistICAtbSwgLS1taW4tYnBzIE4gICAgICAgICAgICAgc3RvcCB0cmFuc21pc3Npb24gaWYgQlBTIGJlbG93IE5cblwKKy0gIC1NLCAtLW1pbi1icHMtdGltZSBOICAgICAgICAgIGZvciBhdCBsZWFzdCBOIHNlY29uZHMgKGRlZmF1bHQ6IDEyMClcblwKKy0gIC1PLCAtLWRpc2FibGUtdGltZW91dHMgICAgICBkaXNhYmxlIHRpbWVvdXQgY29kZSwgd2FpdCBmb3JldmVyIGZvciBkYXRhXG5cCistICAgICAgLS1vLXN5bmMgICAgICAgICAgICAgICAgb3BlbiBvdXRwdXQgZmlsZShzKSBpbiBzeW5jaHJvbm91cyB3cml0ZSBtb2RlXG5cCistICAtcCwgLS1wcm90ZWN0ICAgICAgICAgICAgICAgcHJvdGVjdCBleGlzdGluZyBmaWxlc1xuXAorLSAgLXEsIC0tcXVpZXQgICAgICAgICAgICAgICAgIHF1aWV0LCBubyBwcm9ncmVzcyByZXBvcnRzXG5cCistICAtciwgLS1yZXN1bWUgICAgICAgICAgICAgICAgdHJ5IHRvIHJlc3VtZSBpbnRlcnJ1cHRlZCBmaWxlIHRyYW5zZmVyIChaKVxuXAorLSAgLVIsIC0tcmVzdHJpY3RlZCAgICAgICAgICAgIHJlc3RyaWN0ZWQsIG1vcmUgc2VjdXJlIG1vZGVcblwKKy0gIC1zLCAtLXN0b3AtYXQge0hIOk1NfCtOfSAgICBzdG9wIHRyYW5zbWlzc2lvbiBhdCBISDpNTSBvciBpbiBOIHNlY29uZHNcblwKKy0gIC1TLCAtLXRpbWVzeW5jICAgICAgICAgICAgICByZXF1ZXN0IHJlbW90ZSB0aW1lICh0d2ljZTogc2V0IGxvY2FsIHRpbWUpXG5cCistICAgICAgLS1zeXNsb2dbPW9mZl0gICAgICAgICAgdHVybiBzeXNsb2cgb24gb3Igb2ZmLCBpZiBwb3NzaWJsZVxuXAorLSAgLXQsIC0tdGltZW91dCBOICAgICAgICAgICAgIHNldCB0aW1lb3V0IHRvIE4gdGVudGhzIG9mIGEgc2Vjb25kXG5cCistICAtdSwgLS1rZWVwLXVwcGVyY2FzZSAgICAgICAga2VlcCB1cHBlciBjYXNlIGZpbGVuYW1lc1xuXAorLSAgLVUsIC0tdW5yZXN0cmljdCAgICAgICAgICAgIGRpc2FibGUgcmVzdHJpY3RlZCBtb2RlIChpZiBhbGxvd2VkIHRvKVxuXAorLSAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgIGJlIHZlcmJvc2UsIHByb3ZpZGUgZGVidWdnaW5nIGluZm9ybWF0aW9uXG5cCistICAtdywgLS13aW5kb3dzaXplIE4gICAgICAgICAgV2luZG93IGlzIE4gYnl0ZXMgKFopXG5cCistICAtWCAgLS14bW9kZW0gICAgICAgICAgICAgICAgdXNlIFhNT0RFTSBwcm90b2NvbFxuXAorLSAgLXksIC0tb3ZlcndyaXRlICAgICAgICAgICAgIFllcywgY2xvYmJlciBleGlzdGluZyBmaWxlIGlmIGFueVxuXAorLSAgICAgIC0teW1vZGVtICAgICAgICAgICAgICAgIHVzZSBZTU9ERU0gcHJvdG9jb2xcblwKKy0gIC1aLCAtLXptb2RlbSAgICAgICAgICAgICAgICB1c2UgWk1PREVNIHByb3RvY29sXG5cCistXG5cCistc2hvcnQgb3B0aW9ucyB1c2UgdGhlIHNhbWUgYXJndW1lbnRzIGFzIHRoZSBsb25nIG9uZXNcbiIsIDEwMn0sCistICB7IiVzIHdhaXRpbmcgdG8gcmVjZWl2ZS4iLCAxMDN9LAorLSAgeyJcckJ5dGVzIHJlY2VpdmVkOiAlN2xkLyU3bGQgICBCUFM6JS02bGQgICAgICAgICAgICAgICAgXHJcbiIsIDEwNH0sCistICB7IiVzOiByZWFkeSB0byByZWNlaXZlICVzIiwgMTA1fSwKKy0gIHsiXHJCeXRlcyByZWNlaXZlZDogJTdsZCAgIEJQUzolLTZsZCAgICAgICAgICAgICAgICBcclxuIiwgMTA2fSwKKy0gIHsiXAorLVxyXG5cCistJXM6ICVzIHJlbW92ZWQuXHJcbiIsIDEwN30sCistICB7IlBhdGhuYW1lIGZldGNoIHJldHVybmVkIEVPVCIsIDEwOH0sCistICB7IlJlY2VpdmVkIGR1cCBTZWN0b3IiLCAxMDl9LAorLSAgeyJTeW5jIEVycm9yIiwgMTEwfSwKKy0gIHsiQ1JDIiwgMTExfSwKKy0gIHsiQ2hlY2tzdW0iLCAxMTJ9LAorLSAgeyJTZWN0b3IgbnVtYmVyIGdhcmJsZWQiLCAxMTN9LAorLSAgeyJTZW5kZXIgQ2FuY2VsbGVkIiwgMTE0fSwKKy0gIHsiR290IDAlbyBzZWN0b3IgaGVhZGVyIiwgMTE1fSwKKy0gIHsiZmlsZSBuYW1lIGVuZHMgd2l0aCBhIC8sIHNraXBwZWQ6ICVzXG4iLCAxMTZ9LAorLSAgeyJ6bWFuYWc9JWQsIEx6bWFuYWc9JWRcbiIsIDExN30sCistICB7Inpjb252PSVkXG4iLCAxMTh9LAorLSAgeyJmaWxlIGV4aXN0cywgc2tpcHBlZDogJXNcbiIsIDExOX0sCistICB7IlRJTUVTWU5DOiBoZXJlICVsZCwgcmVtb3RlICVsZCwgZGlmZiAlbGQgc2Vjb25kc1xuIiwgMTIwfSwKKy0gIHsiVElNRVNZTkM6IGNhbm5vdCBzZXQgdGltZTogJXNcbiIsIDEyMX0sCistICB7ImNhbm5vdCB0bXBmaWxlKCkgZm9yIHRjcCBwcm90b2NvbCBzeW5jaHJvbml6YXRpb24iLCAxMjJ9LAorLSAgeyJUb3BpcGUiLCAxMjN9LAorLSAgeyJSZWNlaXZpbmc6ICVzXG4iLCAxMjR9LAorLSAgeyJCbG9ja3MgcmVjZWl2ZWQ6ICVkIiwgMTI1fSwKKy0gIHsiJXM6ICVzIGV4aXN0c1xuIiwgMTI2fSwKKy0gIHsiJXM6XHRTZWN1cml0eSBWaW9sYXRpb24iLCAxMjd9LAorLSAgeyJyZW1vdGUgY29tbWFuZCBleGVjdXRpb24gcmVxdWVzdGVkIiwgMTI4fSwKKy0gIHsibm90IGV4ZWN1dGVkIiwgMTI5fSwKKy0gIHsiZ290IFpSSU5JVCIsIDEzMH0sCistICB7IlNraXBwZWQiLCAxMzF9LAorLSAgeyJyemZpbGU6IGJwcyByYXRlICVsZCBiZWxvdyBtaW4gJWxkIiwgMTMyfSwKKy0gIHsicnpmaWxlOiByZWFjaGVkIHN0b3AgdGltZSIsIDEzM30sCistICB7IlxyQnl0ZXMgcmVjZWl2ZWQ6ICU3bGQvJTdsZCAgIEJQUzolLTZsZCBFVEEgJTAyZDolMDJkICAiLCAxMzR9LAorLSAgeyJmZ2V0cyBmb3IgdGNwIHByb3RvY29sIHN5bmNocm9uaXphdGlvbiBmYWlsZWQ6ICIsIDEzNX0sCistICB7ImZpbGUgY2xvc2UgZXJyb3IiLCAxMzZ9LAorLX07CistCistaW50IF9tc2dfdGJsX2xlbmd0aCA9IDEzNjsKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vQ2hhbmdlTG9nCTE5OTgtMDQtMjYgMDk6MjA6NTIuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9DaGFuZ2VMb2cJMjAwNC0wOS0xMiAxNDo0MDozNC43OTM2ODE1MTIgLTA0MDAKK0BAIC0xLDMgKzEsMTUgQEAKKysyMDA0LTA5LTEyICBnZXR0ZXh0aXplICA8YnVnLWdudS1nZXR0ZXh0QGdudS5vcmc+CisrCisrCSogYm9sZHF1b3Quc2VkOiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBlbkBib2xkcXVvdC5oZWFkZXI6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGVuQHF1b3QuaGVhZGVyOiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBpbnNlcnQtaGVhZGVyLnNpbjogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogcXVvdC5zZWQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIHJlbW92ZS1wb3RjZGF0ZS5zaW46IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIFJ1bGVzLXF1b3Q6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGNhdC1pZC10YmwuYzogUmVtb3ZlIGZpbGUuCisrCSogc3RhbXAtY2F0LWlkOiBSZW1vdmUgZmlsZS4KKysKKyAvKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBwbzJ0Ymwuc2VkIGZyb20gbHJ6c3oucG90LiAgKi8KKyAKKyAjaWYgSEFWRV9DT05GSUdfSAorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9wby9lbkBib2xkcXVvdC5oZWFkZXIJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL3BvL2VuQGJvbGRxdW90LmhlYWRlcgkyMDA0LTA5LTEyIDE0OjQwOjM0LjczMTY5MDkzNiAtMDQwMAorQEAgLTAsMCArMSwyNSBAQAorKyMgQWxsIHRoaXMgY2F0YWxvZyAidHJhbnNsYXRlcyIgYXJlIHF1b3RhdGlvbiBjaGFyYWN0ZXJzLgorKyMgVGhlIG1zZ2lkcyBtdXN0IGJlIEFTQ0lJIGFuZCB0aGVyZWZvcmUgY2Fubm90IGNvbnRhaW4gcmVhbCBxdW90YXRpb24KKysjIGNoYXJhY3RlcnMsIG9ubHkgc3Vic3RpdHV0ZXMgbGlrZSBncmF2ZSBhY2NlbnQgKDB4NjApLCBhcG9zdHJvcGhlICgweDI3KQorKyMgYW5kIGRvdWJsZSBxdW90ZSAoMHgyMikuIFRoZXNlIHN1YnN0aXR1dGVzIGxvb2sgc3RyYW5nZTsgc2VlCisrIyBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdWNzL3F1b3Rlcy5odG1sCisrIworKyMgVGhpcyBjYXRhbG9nIHRyYW5zbGF0ZXMgZ3JhdmUgYWNjZW50ICgweDYwKSBhbmQgYXBvc3Ryb3BoZSAoMHgyNykgdG8KKysjIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTgpIGFuZCByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOSkuCisrIyBJdCBhbHNvIHRyYW5zbGF0ZXMgcGFpcnMgb2YgYXBvc3Ryb3BoZSAoMHgyNykgdG8KKysjIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTgpIGFuZCByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOSkKKysjIGFuZCBwYWlycyBvZiBxdW90YXRpb24gbWFyayAoMHgyMikgdG8KKysjIGxlZnQgZG91YmxlIHF1b3RhdGlvbiBtYXJrIChVKzIwMUMpIGFuZCByaWdodCBkb3VibGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxRCkuCisrIworKyMgV2hlbiBvdXRwdXQgdG8gYW4gVVRGLTggdGVybWluYWwsIHRoZSBxdW90YXRpb24gY2hhcmFjdGVycyBhcHBlYXIgcGVyZmVjdGx5LgorKyMgV2hlbiBvdXRwdXQgdG8gYW4gSVNPLTg4NTktMSB0ZXJtaW5hbCwgdGhlIHNpbmdsZSBxdW90YXRpb24gbWFya3MgYXJlCisrIyB0cmFuc2xpdGVyYXRlZCB0byBhcG9zdHJvcGhlcyAoYnkgaWNvbnYgaW4gZ2xpYmMgMi4yIG9yIG5ld2VyKSBvciB0bworKyMgZ3JhdmUvYWN1dGUgYWNjZW50IChieSBsaWJpY29udiksIGFuZCB0aGUgZG91YmxlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKysjIHRyYW5zbGl0ZXJhdGVkIHRvIDB4MjIuCisrIyBXaGVuIG91dHB1dCB0byBhbiBBU0NJSSB0ZXJtaW5hbCwgdGhlIHNpbmdsZSBxdW90YXRpb24gbWFya3MgYXJlCisrIyB0cmFuc2xpdGVyYXRlZCB0byBhcG9zdHJvcGhlcywgYW5kIHRoZSBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorKyMgdHJhbnNsaXRlcmF0ZWQgdG8gMHgyMi4KKysjCisrIyBUaGlzIGNhdGFsb2cgZnVydGhlcm1vcmUgZGlzcGxheXMgdGhlIHRleHQgYmV0d2VlbiB0aGUgcXVvdGF0aW9uIG1hcmtzIGluCisrIyBib2xkIGZhY2UsIGFzc3VtaW5nIHRoZSBWVDEwMC9YVGVybSBlc2NhcGUgc2VxdWVuY2VzLgorKyMKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vZW5AcXVvdC5oZWFkZXIJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL3BvL2VuQHF1b3QuaGVhZGVyCTIwMDQtMDktMTIgMTQ6NDA6MzQuNzM3NjkwMDI0IC0wNDAwCitAQCAtMCwwICsxLDIyIEBACisrIyBBbGwgdGhpcyBjYXRhbG9nICJ0cmFuc2xhdGVzIiBhcmUgcXVvdGF0aW9uIGNoYXJhY3RlcnMuCisrIyBUaGUgbXNnaWRzIG11c3QgYmUgQVNDSUkgYW5kIHRoZXJlZm9yZSBjYW5ub3QgY29udGFpbiByZWFsIHF1b3RhdGlvbgorKyMgY2hhcmFjdGVycywgb25seSBzdWJzdGl0dXRlcyBsaWtlIGdyYXZlIGFjY2VudCAoMHg2MCksIGFwb3N0cm9waGUgKDB4MjcpCisrIyBhbmQgZG91YmxlIHF1b3RlICgweDIyKS4gVGhlc2Ugc3Vic3RpdHV0ZXMgbG9vayBzdHJhbmdlOyBzZWUKKysjIGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35tZ2syNS91Y3MvcXVvdGVzLmh0bWwKKysjCisrIyBUaGlzIGNhdGFsb2cgdHJhbnNsYXRlcyBncmF2ZSBhY2NlbnQgKDB4NjApIGFuZCBhcG9zdHJvcGhlICgweDI3KSB0bworKyMgbGVmdCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOCkgYW5kIHJpZ2h0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE5KS4KKysjIEl0IGFsc28gdHJhbnNsYXRlcyBwYWlycyBvZiBhcG9zdHJvcGhlICgweDI3KSB0bworKyMgbGVmdCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOCkgYW5kIHJpZ2h0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE5KQorKyMgYW5kIHBhaXJzIG9mIHF1b3RhdGlvbiBtYXJrICgweDIyKSB0bworKyMgbGVmdCBkb3VibGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxQykgYW5kIHJpZ2h0IGRvdWJsZSBxdW90YXRpb24gbWFyayAoVSsyMDFEKS4KKysjCisrIyBXaGVuIG91dHB1dCB0byBhbiBVVEYtOCB0ZXJtaW5hbCwgdGhlIHF1b3RhdGlvbiBjaGFyYWN0ZXJzIGFwcGVhciBwZXJmZWN0bHkuCisrIyBXaGVuIG91dHB1dCB0byBhbiBJU08tODg1OS0xIHRlcm1pbmFsLCB0aGUgc2luZ2xlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKysjIHRyYW5zbGl0ZXJhdGVkIHRvIGFwb3N0cm9waGVzIChieSBpY29udiBpbiBnbGliYyAyLjIgb3IgbmV3ZXIpIG9yIHRvCisrIyBncmF2ZS9hY3V0ZSBhY2NlbnQgKGJ5IGxpYmljb252KSwgYW5kIHRoZSBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorKyMgdHJhbnNsaXRlcmF0ZWQgdG8gMHgyMi4KKysjIFdoZW4gb3V0cHV0IHRvIGFuIEFTQ0lJIHRlcm1pbmFsLCB0aGUgc2luZ2xlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKysjIHRyYW5zbGl0ZXJhdGVkIHRvIGFwb3N0cm9waGVzLCBhbmQgdGhlIGRvdWJsZSBxdW90YXRpb24gbWFya3MgYXJlCisrIyB0cmFuc2xpdGVyYXRlZCB0byAweDIyLgorKyMKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vaW5zZXJ0LWhlYWRlci5zaW4JMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL3BvL2luc2VydC1oZWFkZXIuc2luCTIwMDQtMDktMTIgMTQ6NDA6MzQuNzQzNjg5MTEyIC0wNDAwCitAQCAtMCwwICsxLDIzIEBACisrIyBTZWQgc2NyaXB0IHRoYXQgaW5zZXJ0cyB0aGUgZmlsZSBjYWxsZWQgSEVBREVSIGJlZm9yZSB0aGUgaGVhZGVyIGVudHJ5LgorKyMKKysjIEF0IGVhY2ggb2NjdXJyZW5jZSBvZiBhIGxpbmUgc3RhcnRpbmcgd2l0aCAibXNnaWQgIiwgd2UgZXhlY3V0ZSB0aGUgZm9sbG93aW5nCisrIyBjb21tYW5kcy4gQXQgdGhlIGZpcnN0IG9jY3VycmVuY2UsIGluc2VydCB0aGUgZmlsZS4gQXQgdGhlIGZvbGxvd2luZworKyMgb2NjdXJyZW5jZXMsIGRvIG5vdGhpbmcuIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIGZvbGxvd2luZworKyMgb2NjdXJyZW5jZXMgaXMgYWNoaWV2ZWQgYnkgbG9va2luZyBhdCB0aGUgaG9sZCBzcGFjZS4KKysvXm1zZ2lkIC97CisreAorKyMgVGVzdCBpZiB0aGUgaG9sZCBzcGFjZSBpcyBlbXB0eS4KKytzL20vbS8KKyt0YQorKyMgWWVzIGl0IHdhcyBlbXB0eS4gRmlyc3Qgb2NjdXJyZW5jZS4gUmVhZCB0aGUgZmlsZS4KKytyIEhFQURFUgorKyMgT3V0cHV0IHRoZSBmaWxlJ3MgY29udGVudHMgYnkgcmVhZGluZyB0aGUgbmV4dCBsaW5lLiBCdXQgZG9uJ3QgbG9zZSB0aGUKKysjIGN1cnJlbnQgbGluZSB3aGlsZSBkb2luZyB0aGlzLgorK2cKKytOCisrYmIKKys6YQorKyMgVGhlIGhvbGQgc3BhY2Ugd2FzIG5vbmVtcHR5LiBGb2xsb3dpbmcgb2NjdXJyZW5jZXMuIERvIG5vdGhpbmcuCisreAorKzpiCisrfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9wby9NYWtldmFycwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvcG8vTWFrZXZhcnMJMjAwNC0wOS0xMiAxNDo0MDozNC43NDg2ODgzNTIgLTA0MDAKK0BAIC0wLDAgKzEsNDEgQEAKKysjIE1ha2VmaWxlIHZhcmlhYmxlcyBmb3IgUE8gZGlyZWN0b3J5IGluIGFueSBwYWNrYWdlIHVzaW5nIEdOVSBnZXR0ZXh0LgorKworKyMgVXN1YWxseSB0aGUgbWVzc2FnZSBkb21haW4gaXMgdGhlIHNhbWUgYXMgdGhlIHBhY2thZ2UgbmFtZS4KKytET01BSU4gPSAkKFBBQ0tBR0UpCisrCisrIyBUaGVzZSB0d28gdmFyaWFibGVzIGRlcGVuZCBvbiB0aGUgbG9jYXRpb24gb2YgdGhpcyBkaXJlY3RvcnkuCisrc3ViZGlyID0gcG8KKyt0b3BfYnVpbGRkaXIgPSAuLgorKworKyMgVGhlc2Ugb3B0aW9ucyBnZXQgcGFzc2VkIHRvIHhnZXR0ZXh0LgorK1hHRVRURVhUX09QVElPTlMgPSAtLWtleXdvcmQ9XyAtLWtleXdvcmQ9Tl8KKysKKysjIFRoaXMgaXMgdGhlIGNvcHlyaWdodCBob2xkZXIgdGhhdCBnZXRzIGluc2VydGVkIGludG8gdGhlIGhlYWRlciBvZiB0aGUKKysjICQoRE9NQUlOKS5wb3QgZmlsZS4gIFNldCB0aGlzIHRvIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBzdXJyb3VuZGluZworKyMgcGFja2FnZS4gIChOb3RlIHRoYXQgdGhlIG1zZ3N0ciBzdHJpbmdzLCBleHRyYWN0ZWQgZnJvbSB0aGUgcGFja2FnZSdzCisrIyBzb3VyY2VzLCBiZWxvbmcgdG8gdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIHBhY2thZ2UuKSAgVHJhbnNsYXRvcnMgYXJlCisrIyBleHBlY3RlZCB0byB0cmFuc2ZlciB0aGUgY29weXJpZ2h0IGZvciB0aGVpciB0cmFuc2xhdGlvbnMgdG8gdGhpcyBwZXJzb24KKysjIG9yIGVudGl0eSwgb3IgdG8gZGlzY2xhaW0gdGhlaXIgY29weXJpZ2h0LiAgVGhlIGVtcHR5IHN0cmluZyBzdGFuZHMgZm9yCisrIyB0aGUgcHVibGljIGRvbWFpbjsgaW4gdGhpcyBjYXNlIHRoZSB0cmFuc2xhdG9ycyBhcmUgZXhwZWN0ZWQgdG8gZGlzY2xhaW0KKysjIHRoZWlyIGNvcHlyaWdodC4KKytDT1BZUklHSFRfSE9MREVSID0gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrIyBUaGlzIGlzIHRoZSBlbWFpbCBhZGRyZXNzIG9yIFVSTCB0byB3aGljaCB0aGUgdHJhbnNsYXRvcnMgc2hhbGwgcmVwb3J0CisrIyBidWdzIGluIHRoZSB1bnRyYW5zbGF0ZWQgc3RyaW5nczoKKysjIC0gU3RyaW5ncyB3aGljaCBhcmUgbm90IGVudGlyZSBzZW50ZW5jZXMsIHNlZSB0aGUgbWFpbnRhaW5lciBndWlkZWxpbmVzCisrIyAgIGluIHRoZSBHTlUgZ2V0dGV4dCBkb2N1bWVudGF0aW9uLCBzZWN0aW9uICdQcmVwYXJpbmcgU3RyaW5ncycuCisrIyAtIFN0cmluZ3Mgd2hpY2ggdXNlIHVuY2xlYXIgdGVybXMgb3IgcmVxdWlyZSBhZGRpdGlvbmFsIGNvbnRleHQgdG8gYmUKKysjICAgdW5kZXJzdG9vZC4KKysjIC0gU3RyaW5ncyB3aGljaCBtYWtlIGludmFsaWQgYXNzdW1wdGlvbnMgYWJvdXQgbm90YXRpb24gb2YgZGF0ZSwgdGltZSBvcgorKyMgICBtb25leS4KKysjIC0gUGx1cmFsaXNhdGlvbiBwcm9ibGVtcy4KKysjIC0gSW5jb3JyZWN0IEVuZ2xpc2ggc3BlbGxpbmcuCisrIyAtIEluY29ycmVjdCBmb3JtYXR0aW5nLgorKyMgSXQgY2FuIGJlIHlvdXIgZW1haWwgYWRkcmVzcywgb3IgYSBtYWlsaW5nIGxpc3QgYWRkcmVzcyB3aGVyZSB0cmFuc2xhdG9ycworKyMgY2FuIHdyaXRlIHRvIHdpdGhvdXQgYmVpbmcgc3Vic2NyaWJlZCwgb3IgdGhlIFVSTCBvZiBhIHdlYiBwYWdlIHRocm91Z2gKKysjIHdoaWNoIHRoZSB0cmFuc2xhdG9ycyBjYW4gY29udGFjdCB5b3UuCisrTVNHSURfQlVHU19BRERSRVNTID0KKysKKysjIFRoaXMgaXMgdGhlIGxpc3Qgb2YgbG9jYWxlIGNhdGVnb3JpZXMsIGJleW9uZCBMQ19NRVNTQUdFUywgZm9yIHdoaWNoIHRoZQorKyMgbWVzc2FnZSBjYXRhbG9ncyBzaGFsbCBiZSB1c2VkLiAgSXQgaXMgdXN1YWxseSBlbXB0eS4KKytFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyA9CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL3BvL3F1b3Quc2VkCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9xdW90LnNlZAkyMDA0LTA5LTEyIDE0OjQwOjM0Ljc1NDY4NzQ0MCAtMDQwMAorQEAgLTAsMCArMSw2IEBACisrcy8iXChbXiJdKlwpIi/igJxcMeKAnS9nCisrcy9gXChbXmAnXSpcKScv4oCYXDHigJkvZworK3MvICdcKFteYCddKlwpJyAvIOKAmFwx4oCZIC9nCisrcy8gJ1woW15gJ10qXCknJC8g4oCYXDHigJkvZworK3MvXidcKFteYCddKlwpJyAv4oCYXDHigJkgL2cKKytzL+KAnOKAnS8iIi9nCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL3BvL3JlbW92ZS1wb3RjZGF0ZS5zaW4JMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL3BvL3JlbW92ZS1wb3RjZGF0ZS5zaW4JMjAwNC0wOS0xMiAxNDo0MDozNC43NjI2ODYyMjQgLTA0MDAKK0BAIC0wLDAgKzEsMTkgQEAKKysjIFNlZCBzY3JpcHQgdGhhdCByZW1vdmUgdGhlIFBPVC1DcmVhdGlvbi1EYXRlIGxpbmUgaW4gdGhlIGhlYWRlciBlbnRyeQorKyMgZnJvbSBhIFBPVCBmaWxlLgorKyMKKysjIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIGZvbGxvd2luZyBvY2N1cnJlbmNlcyBvZiB0aGUKKysjIHBhdHRlcm4gaXMgYWNoaWV2ZWQgYnkgbG9va2luZyBhdCB0aGUgaG9sZCBzcGFjZS4KKysvXiJQT1QtQ3JlYXRpb24tRGF0ZTogLioiJC97CisreAorKyMgVGVzdCBpZiB0aGUgaG9sZCBzcGFjZSBpcyBlbXB0eS4KKytzL1AvUC8KKyt0YQorKyMgWWVzIGl0IHdhcyBlbXB0eS4gRmlyc3Qgb2NjdXJyZW5jZS4gUmVtb3ZlIHRoZSBsaW5lLgorK2cKKytkCisrYmIKKys6YQorKyMgVGhlIGhvbGQgc3BhY2Ugd2FzIG5vbmVtcHR5LiBGb2xsb3dpbmcgb2NjdXJyZW5jZXMuIERvIG5vdGhpbmcuCisreAorKzpiCisrfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9wby9SdWxlcy1xdW90CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9SdWxlcy1xdW90CTIwMDQtMDktMTIgMTQ6NDA6MzQuNzc4NjgzNzkyIC0wNDAwCitAQCAtMCwwICsxLDQ3IEBACisrIyBTcGVjaWFsIE1ha2VmaWxlIHJ1bGVzIGZvciBFbmdsaXNoIG1lc3NhZ2UgY2F0YWxvZ3Mgd2l0aCBxdW90YXRpb24gbWFya3MuCisrCisrRElTVEZJTEVTLmNvbW1vbi5leHRyYTEgPSBxdW90LnNlZCBib2xkcXVvdC5zZWQgZW5AcXVvdC5oZWFkZXIgZW5AYm9sZHF1b3QuaGVhZGVyIGluc2VydC1oZWFkZXIuc2luIFJ1bGVzLXF1b3QKKysKKysuU1VGRklYRVM6IC5pbnNlcnQtaGVhZGVyIC5wby11cGRhdGUtZW4KKysKKytlbkBxdW90LnBvLWNyZWF0ZToKKysJJChNQUtFKSBlbkBxdW90LnBvLXVwZGF0ZQorK2VuQGJvbGRxdW90LnBvLWNyZWF0ZToKKysJJChNQUtFKSBlbkBib2xkcXVvdC5wby11cGRhdGUKKysKKytlbkBxdW90LnBvLXVwZGF0ZTogZW5AcXVvdC5wby11cGRhdGUtZW4KKytlbkBib2xkcXVvdC5wby11cGRhdGU6IGVuQGJvbGRxdW90LnBvLXVwZGF0ZS1lbgorKworKy5pbnNlcnQtaGVhZGVyLnBvLXVwZGF0ZS1lbjoKKysJQGxhbmc9YGVjaG8gJEAgfCBzZWQgLWUgJ3MvXC5wby11cGRhdGUtZW4kJC8vJ2A7IFwKKysJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dCI7IHRoZW4gUEFUSD1gcHdkYC8uLi9zcmM6JCRQQVRIOyBHRVRURVhUTElCRElSPWBjZCAkKHRvcF9zcmNkaXIpL3NyYyAmJiBwd2RgOyBleHBvcnQgR0VUVEVYVExJQkRJUjsgZmk7IFwKKysJdG1wZGlyPWBwd2RgOyBcCisrCWVjaG8gIiQkbGFuZzoiOyBcCisrCWxsPWBlY2hvICQkbGFuZyB8IHNlZCAtZSAncy9ALiovLydgOyBcCisrCUxDX0FMTD1DOyBleHBvcnQgTENfQUxMOyBcCisrCWNkICQoc3JjZGlyKTsgXAorKwlpZiAkKE1TR0lOSVQpIC1pICQoRE9NQUlOKS5wb3QgLS1uby10cmFuc2xhdG9yIC1sICQkbGwgLW8gLSAyPi9kZXYvbnVsbCB8IHNlZCAtZiAkJHRtcGRpci8kJGxhbmcuaW5zZXJ0LWhlYWRlciB8ICQoTVNHQ09OVikgLXQgVVRGLTggfCAkKE1TR0ZJTFRFUikgc2VkIC1mIGBlY2hvICQkbGFuZyB8IHNlZCAtZSAncy8uKkAvLydgLnNlZCAyPi9kZXYvbnVsbCA+ICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IHRoZW4gXAorKwkgIGlmIGNtcCAkJGxhbmcucG8gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorKwkgICAgcm0gLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgXAorKwkgIGVsc2UgXAorKwkgICAgaWYgbXYgLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyAkJGxhbmcucG87IHRoZW4gXAorKwkgICAgICA6OyBcCisrCSAgICBlbHNlIFwKKysJICAgICAgZWNobyAiY3JlYXRpb24gb2YgJCRsYW5nLnBvIGZhaWxlZDogY2Fubm90IG1vdmUgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyB0byAkJGxhbmcucG8iIDE+JjI7IFwKKysJICAgICAgZXhpdCAxOyBcCisrCSAgICBmaTsgXAorKwkgIGZpOyBcCisrCWVsc2UgXAorKwkgIGVjaG8gImNyZWF0aW9uIG9mICQkbGFuZy5wbyBmYWlsZWQhIiAxPiYyOyBcCisrCSAgcm0gLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgXAorKwlmaQorKworK2VuQHF1b3QuaW5zZXJ0LWhlYWRlcjogaW5zZXJ0LWhlYWRlci5zaW4KKysJc2VkIC1lICcvXiMvZCcgLWUgJ3MvSEVBREVSL2VuQHF1b3QuaGVhZGVyL2cnICQoc3JjZGlyKS9pbnNlcnQtaGVhZGVyLnNpbiA+IGVuQHF1b3QuaW5zZXJ0LWhlYWRlcgorKworK2VuQGJvbGRxdW90Lmluc2VydC1oZWFkZXI6IGluc2VydC1oZWFkZXIuc2luCisrCXNlZCAtZSAnL14jL2QnIC1lICdzL0hFQURFUi9lbkBib2xkcXVvdC5oZWFkZXIvZycgJChzcmNkaXIpL2luc2VydC1oZWFkZXIuc2luID4gZW5AYm9sZHF1b3QuaW5zZXJ0LWhlYWRlcgorKworK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1xdW90CisrbW9zdGx5Y2xlYW4tcXVvdDoKKysJcm0gLWYgKi5pbnNlcnQtaGVhZGVyCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL3BvL3N0YW1wLWNhdC1pZAkxOTk4LTEyLTMwIDAyOjUwOjAxLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvcG8vc3RhbXAtY2F0LWlkCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCitAQCAtMSArMCwwIEBACistdGltZXN0YW1wCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL3NyYy9NYWtlZmlsZS5hbQkxOTk4LTEyLTI4IDAzOjM4OjQ3LjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvc3JjL01ha2VmaWxlLmFtCTIwMDQtMDktMTIgMTQ6NDA6NTMuNjY1ODEyNTEyIC0wNDAwCitAQCAtMiwxMiArMiwxMiBAQAorIGxyel9TT1VSQ0VTPWxyei5jIHRpbWluZy5jIHpwZXJyLmMgenJlYWRsaW5lLmMgY3JjdGFiLmMgcmJzYi5jIHptLmMgcHJvdG5hbWUuYyB0Y3AuYyBsc3lzbG9nLmMgY2FuaXQuYworIGxzel9TT1VSQ0VTPWxzei5jIHRpbWluZy5jIHpwZXJyLmMgenJlYWRsaW5lLmMgY3JjdGFiLmMgcmJzYi5jIHptLmMgcHJvdG5hbWUuYyB0Y3AuYyBsc3lzbG9nLmMgY2FuaXQuYworIG5vaW5zdF9IRUFERVJTID0gdGltaW5nLmggemdsb2JhbC5oIHptb2RlbS5oCistZGF0YWRpciA9ICQocHJlZml4KS9AREFUQURJUk5BTUVACisrZGF0YWRpciA9ICQocHJlZml4KS9zaGFyZQorIGxvY2FsZWRpciA9ICQoZGF0YWRpcikvbG9jYWxlCisgQ0ZMQUdTPUBDRkxBR1NACisgRElTVENMRUFOX0ZJTEVTPWxyenN6YnVnCisgCistTERBREQgPSAuLi9saWIvbGliem1vZGVtLmEgQElOVExMSUJTQAorK0xEQUREID0gLi4vbGliL2xpYnptb2RlbS5hIEBMSUJJTlRMQAorIEFVVE9NQUtFX09QVElPTlM9YW5zaTJrbnIKKyBFWFRSQV9ESVNUID0gYW5zaTJrbnIuMSBhbnNpMmtuci5jIGxyenN6YnVnLmluCisgSU5DTFVERVMgPSAtSS4uIC1JJChzcmNkaXIpIC1JJCh0b3Bfc3JjZGlyKS9zcmMgLUkuLi9pbnRsIC1JJCh0b3Bfc3JjZGlyKS9saWIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2xyenN6LWNoZWNrLWxvY2FsZS5oLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvbHJ6c3otY2hlY2stbG9jYWxlLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0NmRmYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2xyenN6LWNoZWNrLWxvY2FsZS5oLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gMjhiNDczYzNjOTY2ODJhODIwZTI5MmNjMWJlMDA2ZTE5YWVlMTFiYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDI0IE1heSAyMDEzIDAxOjA3OjI0IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGxyenN6IGNoZWNrIGxvY2FsZS5oCisKK2ZpeCB0aGUgYnVpbGQgZmFpbHVyZSB3aGVuIHVzaW5nIC1PMCBpbiBhIGRlYnVnIGJ1aWxkOgorbHJ6LmM6Mjg0OjEzOiBlcnJvcjogJ0xDX0FMTCcgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFt1d2VAb2hzZS5kZV0KKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggNmUyMDY0Yy4uYzEwNDYwYyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtMTMwLDcgKzEzMCw3IEBAIEFDX0NIRUNLX0hFQURFUlMoZmNudGwuaCBsaW1pdHMuaCBzeXMvaW9jdGwuaCBzeXMvdGltZS5oIHVuaXN0ZC5oIHN5cy90aW1lcy5oKQorIExSWlNaX0hFQURFUlNfVEVSTV9JTworIEFDX0NIRUNLX0hFQURFUlModGVybWlvcy5oIHN5cy90ZXJtaW9zLmggdGVybWlvLmggc3lzL3Rlcm1pby5oIHNndHR5LmgpCisgQUNfQ0hFQ0tfSEVBREVSUyhzeXMvbW1hbi5oIHV0aW1lLmggc3lzbG9nLmggc3lzL3N5c2xvZy5oIHN5cy9wYXJhbS5oKQorLUFDX0NIRUNLX0hFQURFUlMoc3lzL3NlbGVjdC5oIHN0cmluZ3MuaCBhcnBhL2luZXQuaCkKKytBQ19DSEVDS19IRUFERVJTKHN5cy9zZWxlY3QuaCBzdHJpbmdzLmggbG9jYWxlLmggYXJwYS9pbmV0LmgpCisgCisgZG5sIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCisgQUNfVFlQRV9TSVpFX1QKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9scnpzel9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9scnpzel9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ1MjlmNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2xyenN6X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhpcyBwYXRjaCBmaXhlcyBmb2xsb3dpbmcgaXNzdWUgd2l0aCBhdXRvbWFrZSAxLjEyCisKK3wgY29uZmlndXJlLmluOjk1OiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCisuLi4KK3wgbGliL01ha2VmaWxlLmFtOjM6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKK3wgbGliL01ha2VmaWxlLmFtOiBpbnN0YWxsaW5nICcuL2RlcGNvbXAnCit8IHNyYy9NYWtlZmlsZS5hbToxMTogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzAzCisKK0luZGV4OiBscnpzei0wLjEyLjIwL2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxyenN6LTAuMTIuMjAub3JpZy9jb25maWd1cmUuaW4KKysrKyBscnpzei0wLjEyLjIwL2NvbmZpZ3VyZS5pbgorQEAgLTkyLDcgKzkyLDYgQEAgQUNfUFJPR19SQU5MSUIKKyBBQ19JU0NfUE9TSVgKKyBBQ19BSVgKKyBBQ19NSU5JWAorLUFNX0NfUFJPVE9UWVBFUworIEFDX0NfQ09OU1QKKyBBQ19DX0lOTElORQorIAorSW5kZXg6IGxyenN6LTAuMTIuMjAvbGliL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbHJ6c3otMC4xMi4yMC5vcmlnL2xpYi9NYWtlZmlsZS5hbQorKysrIGxyenN6LTAuMTIuMjAvbGliL01ha2VmaWxlLmFtCitAQCAtMSw2ICsxLDUgQEAKKyBub2luc3RfTElCUkFSSUVTPWxpYnptb2RlbS5hCisgQ0ZMQUdTPUBDRkxBR1NACistQVVUT01BS0VfT1BUSU9OUz1hbnNpMmtucgorIAorIEVYVFJBX0RJU1QgPSBhbGxvY2EuYyBhbnNpMmtuci4xIGFuc2kya25yLmMgXAorIAlnZXRvcHQuYyBnZXRvcHQxLmMgbWtkaXIuYyBta3RpbWUuYyBcCitJbmRleDogbHJ6c3otMC4xMi4yMC9zcmMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBscnpzei0wLjEyLjIwLm9yaWcvc3JjL01ha2VmaWxlLmFtCisrKysgbHJ6c3otMC4xMi4yMC9zcmMvTWFrZWZpbGUuYW0KK0BAIC04LDcgKzgsNiBAQCBDRkxBR1M9QENGTEFHU0AKKyBESVNUQ0xFQU5fRklMRVM9bHJ6c3pidWcKKyAKKyBMREFERCA9IC4uL2xpYi9saWJ6bW9kZW0uYSBATElCSU5UTEAKKy1BVVRPTUFLRV9PUFRJT05TPWFuc2kya25yCisgRVhUUkFfRElTVCA9IGFuc2kya25yLjEgYW5zaTJrbnIuYyBscnpzemJ1Zy5pbgorIElOQ0xVREVTID0gLUkuLiAtSSQoc3JjZGlyKSAtSSQodG9wX3NyY2Rpcikvc3JjIC1JLi4vaW50bCAtSSQodG9wX3NyY2RpcikvbGliCisgI0RFRlMgPSAtRExPQ0FMRURJUj1cIiQobG9jYWxlZGlyKVwiIC1ET1M9XCJAaG9zdF9vc0BcIiAtRENQVT1cIkBob3N0X2NwdUBcIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvbWFrZWZpbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9tYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2U1OTJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitkaWZmIC1ydU4gbHJ6c3otMC4xMi4yMF9vcmcvc3JjL01ha2VmaWxlLmluIGxyenN6LTAuMTIuMjBfcGF0Y2gvc3JjL01ha2VmaWxlLmluCistLS0gbHJ6c3otMC4xMi4yMF9vcmcvc3JjL01ha2VmaWxlLmluCTE5OTgtMTItMzAgMTc6MzE6NDYuMDAwMDAwMDAwICswMTAwCisrKysgbHJ6c3otMC4xMi4yMF9wYXRjaC9zcmMvTWFrZWZpbGUuaW4JMjAwNC0wNC0yOSAxMzo1NzozMy40MzQ5MDk2NTYgKzAyMDAKK0BAIC0zNzIsMTMgKzM3MiwxMyBAQAorIAlybSAtZiAkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBsc2IgfCBzZWQgLWUgJyQodHJhbnNmb3JtKSdgCisgCWxuICQoREVTVERJUikvJChiaW5kaXIpL2BlY2hvIGxzeiB8c2VkIC1lICckKHRyYW5zZm9ybSknYCBcCisgCQkkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBsc2IgfHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AgCistCXJtIC1mICQoYmluZGlyKS9gZWNobyBsc3ggfCBzZWQgLWUgJyQodHJhbnNmb3JtKSdgCisrCXJtIC1mICQoREVTVERJUikvJChiaW5kaXIpL2BlY2hvIGxzeCB8IHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AKKyAJbG4gJChERVNURElSKS8kKGJpbmRpcikvYGVjaG8gbHN6IHxzZWQgLWUgJyQodHJhbnNmb3JtKSdgIFwKKyAJCSQoREVTVERJUikvJChiaW5kaXIpL2BlY2hvIGxzeCB8c2VkIC1lICckKHRyYW5zZm9ybSknYCAKKy0Jcm0gLWYgJChiaW5kaXIpL2BlY2hvIGxyYiB8IHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AKKysJcm0gLWYgJChERVNURElSKS8kKGJpbmRpcikvYGVjaG8gbHJiIHwgc2VkIC1lICckKHRyYW5zZm9ybSknYAorIAlsbiAkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBscnogfHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AgXAorIAkJJChERVNURElSKS8kKGJpbmRpcikvYGVjaG8gbHJiIHxzZWQgLWUgJyQodHJhbnNmb3JtKSdgIAorLQlybSAtZiAkKGJpbmRpcikvYGVjaG8gbHJ4IHwgc2VkIC1lICckKHRyYW5zZm9ybSknYAorKwlybSAtZiAkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBscnggfCBzZWQgLWUgJyQodHJhbnNmb3JtKSdgCisgCWxuICQoREVTVERJUikvJChiaW5kaXIpL2BlY2hvIGxyeiB8c2VkIC1lICckKHRyYW5zZm9ybSknYCBcCisgCQkkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBscnggfHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AgCisgIwlybSAtZiAkKGJpbmRpcikvYGVjaG8gbHJ6c3pidWcgfCBzZWQgLWUgJyQodHJhbnNmb3JtKSdgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3pfMC4xMi4yMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzel8wLjEyLjIwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwY2U1N2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3pfMC4xMi4yMC5iYgpAQCAtMCwwICsxLDQ2IEBACitTVU1NQVJZID0gIlRvb2xzIGZvciB6bW9kZW0veG1vZGVtL3ltb2RlbSBmaWxlIHRyYW5zZmVyIgorREVTQ1JJUFRJT04gPSAiTHJ6c3ogaXMgYSBjb3NtZXRpY2FsbHkgbW9kaWZpZWQgem1vZGVtL3ltb2RlbS94bW9kZW0gcGFja2FnZSBidWlsdCBmcm9tIFwKK3RoZSBwdWJsaWMtZG9tYWluIHZlcnNpb24gb2YgQ2h1Y2sgRm9yc2JlcmcncyByenN6IHBhY2thZ2UuIFwKK1RoZXNlIHByb2dyYW1zIHVzZSBlcnJvciBjb3JyZWN0aW5nIHByb3RvY29scyAoe3oseCx5fW1vZGVtKSB0byBzZW5kIChzeiwgc3gsIHNiKSBhbmQgXAorcmVjZWl2ZSAocnosIHJ4LCByYikgZmlsZXMgb3ZlciBhIGRpYWwtaW4gc2VyaWFsIHBvcnQgZnJvbSBhIHZhcmlldHkgb2YgcHJvZ3JhbXMgXAorcnVubmluZyB1bmRlciB2YXJpb3VzIG9wZXJhdGluZyBzeXN0ZW1zLiAiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm9oc2UuZGUvdXdlL3NvZnR3YXJlL2xyenN6Lmh0bWwiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIFwKKwkJCWZpbGU6Ly9zcmMvbHJ6LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xMDttZDU9NTI3Njk1NjM3M2ZmN2Q4NzU4ODM3ZjYzOTlhMTA0NWYiCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0RFUEVORFMgPSAiIgorUFIgPSAicjYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5vaHNlLmRlL3V3ZS9yZWxlYXNlcy9scnpzei0ke1BWfS50YXIuZ3ogXAorCSAgIGZpbGU6Ly9hdXRvdG9vbHMucGF0Y2ggXAorCSAgIGZpbGU6Ly9tYWtlZmlsZS5wYXRjaCBcCisJICAgZmlsZTovL2dldHRleHQucGF0Y2ggXAorCSAgIGZpbGU6Ly9hY2RlZmluZS5wYXRjaCBcCisJICAgZmlsZTovL2xyenN6X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9scnpzei1jaGVjay1sb2NhbGUuaC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImI1Y2U2YTc0YWJjOWI5ZWIyYWY5NGRmZmRmZDM3MmE0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImMyOGIzNmIxNGJkZGIwMTRkOWU5Yzk3YzUyNDU5ODUyZjk3YmQ0MDVmODkxMTNmMzBiZWU0NWVkOTI3MjhmZjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IHNyYy9scnogc3JjL2xzeiAke0R9JHtiaW5kaXJ9LworfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJyeiByeCByYiBzeiBzeCBzYiIKKworQUxURVJOQVRJVkVfVEFSR0VUW3J6XSA9ICIke2JpbmRpcn0vbHJ6IgorQUxURVJOQVRJVkVfVEFSR0VUW3J4XSA9ICIke2JpbmRpcn0vbHJ6IgorQUxURVJOQVRJVkVfVEFSR0VUW3JiXSA9ICIke2JpbmRpcn0vbHJ6IgorCitBTFRFUk5BVElWRV9UQVJHRVRbc3pdID0gIiR7YmluZGlyfS9sc3oiCitBTFRFUk5BVElWRV9UQVJHRVRbc3hdID0gIiR7YmluZGlyfS9sc3oiCitBTFRFUk5BVElWRV9UQVJHRVRbc2JdID0gIiR7YmluZGlyfS9sc3oiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNpdXRpbHMvcGNpdXRpbHMvY29uZmlndXJlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL2NvbmZpZ3VyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmM5ZjkxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL2NvbmZpZ3VyZS5wYXRjaApAQCAtMCwwICsxLDEwNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworIworIyBQYXRjaCBtYW5hZ2VkIGJ5IGh0dHA6Ly93d3cubW4tbG9naXN0aWsuZGUvdW5zdXBwb3J0ZWQvcHhhMjUwL3BhdGNoZXIKKyMKKy0tLQorCis3LzMwLzIwMTAgLSByZWJhc2VkIHRvIDMuMS41IGJ5IFFpbmcgSGUgPHFpbmcuaGVAaW50ZWwuY29tPgorMS8yMi8yMDEyIC0gcmViYXNlZCB0byAzLjEuOSBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKworZGlmZiAtciBhZjJiMTBjYzNjMTQgTWFrZWZpbGUKKy0tLSBhL01ha2VmaWxlCVN1biBKYW4gMjIgMTg6MzY6MzQgMjAxMiArMDgwMAorKysrIGIvTWFrZWZpbGUJU3VuIEphbiAyMiAxODozODo1NCAyMDEyICswODAwCitAQCAtMzcsNyArMzcsNiBAQAorICMgQ29tbWFuZHMKKyBJTlNUQUxMPWluc3RhbGwKKyBESVJJTlNUQUxMPWluc3RhbGwgLWQKKy1TVFJJUD0tcworIENDPSQoQ1JPU1NfQ09NUElMRSlnY2MKKyBBUj0kKENST1NTX0NPTVBJTEUpYXIKKyBSQU5MSUI9JChDUk9TU19DT01QSUxFKXJhbmxpYgorQEAgLTg2LDcgKzg1LDcgQEAKKyBleGFtcGxlLm86IGV4YW1wbGUuYyAkKFBDSUlOQykKKyAKKyAlOiAlLm8KKy0JJChDQykgJChMREZMQUdTKSAkKFRBUkdFVF9BUkNIKSAkXiAkKExETElCUykgLW8gJEAKKysJJChDQykgJChMREZMQUdTKSAkKFRBUkdFVF9BUkNIKSAkXiAkKExJQl9MRExJQlMpIC1vICRACisgCisgJS44ICUuNzogJS5tYW4KKyAJTT1gZWNobyAkKERBVEUpIHwgc2VkICdzLy0wMS0vLUphbnVhcnktLztzLy0wMi0vLUZlYnJ1YXJ5LS87cy8tMDMtLy1NYXJjaC0vO3MvLTA0LS8tQXByaWwtLztzLy0wNS0vLU1heS0vO3MvLTA2LS8tSnVuZS0vO3MvLTA3LS8tSnVseS0vO3MvLTA4LS8tQXVndXN0LS87cy8tMDktLy1TZXB0ZW1iZXItLztzLy0xMC0vLU9jdG9iZXItLztzLy0xMS0vLU5vdmVtYmVyLS87cy8tMTItLy1EZWNlbWJlci0vO3MvXCguKlwpLVwoLipcKS1cKC4qXCkvXDMgXDIgXDEvJ2AgOyBzZWQgPCQ8ID4kQCAicy9AVE9EQVlALyQkTS87cy9AVkVSU0lPTkAvcGNpdXRpbHMtJChWRVJTSU9OKS87cyNASURTRElSQCMkKElEU0RJUikjIgorQEAgLTEwMSw3ICsxMDAsNyBAQAorIGluc3RhbGw6IGFsbAorICMgLWMgaXMgaWdub3JlZCBvbiBMaW51eCwgYnV0IHJlcXVpcmVkIG9uIEZyZWVCU0QKKyAJJChESVJJTlNUQUxMKSAtbSA3NTUgJChERVNURElSKSQoU0JJTkRJUikgJChERVNURElSKSQoSURTRElSKSAkKERFU1RESVIpJChNQU5ESVIpL21hbjggJChERVNURElSKSQoTUFORElSKS9tYW43CistCSQoSU5TVEFMTCkgLWMgLW0gNzU1ICQoU1RSSVApIGxzcGNpIHNldHBjaSAkKERFU1RESVIpJChTQklORElSKQorKwkkKElOU1RBTEwpIC1jIC1tIDc1NSBsc3BjaSBzZXRwY2kgJChERVNURElSKSQoU0JJTkRJUikKKyAJJChJTlNUQUxMKSAtYyAtbSA3NTUgdXBkYXRlLXBjaWlkcyAkKERFU1RESVIpJChTQklORElSKQorIAkkKElOU1RBTEwpIC1jIC1tIDY0NCAkKFBDSV9JRFMpICQoREVTVERJUikkKElEU0RJUikKKyAJJChJTlNUQUxMKSAtYyAtbSA2NDQgbHNwY2kuOCBzZXRwY2kuOCB1cGRhdGUtcGNpaWRzLjggJChERVNURElSKSQoTUFORElSKS9tYW44CitkaWZmIC1yIGFmMmIxMGNjM2MxNCBsaWIvY29uZmlndXJlCistLS0gYS9saWIvY29uZmlndXJlCVN1biBKYW4gMjIgMTg6MzY6MzQgMjAxMiArMDgwMAorKysrIGIvbGliL2NvbmZpZ3VyZQlTdW4gSmFuIDIyIDE4OjM4OjU0IDIwMTIgKzA4MDAKK0BAIC0xNCw2ICsxNCwxMCBAQAorIAlmaQorIH0KKyAKKytWRVJTSU9OPSQxCisrSURTRElSPSQyCisrRE5TPXllcworKworIGlmIFsgLXogIiRWRVJTSU9OIiAtbyAteiAiJElEU0RJUiIgXSA7IHRoZW4KKyAJZWNobyA+JjIgIlBsZWFzZSBydW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZnJvbSB0aGUgdG9wLWxldmVsIE1ha2VmaWxlIgorIAlleGl0IDEKK0BAIC0yMSw4ICsyNSw4IEBACisgCisgZWNob19uICJDb25maWd1cmluZyBsaWJwY2kgZm9yIHlvdXIgc3lzdGVtLi4uIgorIGlmIFsgLXogIiRIT1NUIiBdIDsgdGhlbgorLQlzeXM9YHVuYW1lIC1zYAorLQlyZWw9YHVuYW1lIC1yYAorKwlzeXM9JHszOi1gdW5hbWUgLXNgfQorKwlyZWw9CisgCXJlYWxzeXM9IiRzeXMiCisgCWlmIFsgIiRzeXMiID0gIkFJWCIgLWEgLXggL3Vzci9iaW4vb3NsZXZlbCAtYSAteCAvdXNyL3NiaW4vbHNhdHRyIF0KKyAJdGhlbgorQEAgLTMwLDcgKzM0LDcgQEAKKyAJCXByb2M9YC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIC1GIG5hbWUgfCBoZWFkIC0xYAorIAkJY3B1PWAvdXNyL3NiaW4vbHNhdHRyIC1GIHZhbHVlIC1sICRwcm9jIC1hIHR5cGUgfCBzZWQgJ3MvXy4qLy8nYAorIAllbHNlCistCQljcHU9YHVuYW1lIC1tIHwgc2VkICdzL15pLjg2JC9pMzg2LztzL15zdW40dSQvc3BhcmM2NC87cy9eaTg2cGMkL2kzODYvO3MvXkJlUEMkL2kzODYvO3MvXkJlTWFjJC9wb3dlcnBjLztzL15CZUJveCQvcG93ZXJwYy8nYAorKwkJY3B1PSR7NDotYHVuYW1lIC1tIHwgc2VkICdzL15pLjg2JC9pMzg2LztzL15zdW40dSQvc3BhcmM2NC87cy9eaTg2cGMkL2kzODYvO3MvXkJlUEMkL2kzODYvO3MvXkJlTWFjJC9wb3dlcnBjLztzL15CZUJveCQvcG93ZXJwYy8nYH0KKyAJZmkKKyAJaWYgWyAiJHN5cyIgPSAiR05VL2tGcmVlQlNEIiAtbyAiJHN5cyIgPSAiRHJhZ29uRmx5IiBdCisgCXRoZW4KK0BAIC00MCw3ICs0NCw3IEBACisgCXRoZW4KKyAJCXN5cz1jeWd3aW4KKyAJZmkKKy0JSE9TVD0kezM6LSRjcHUtJHN5c30KKysJSE9TVD0kY3B1LSRzeXMKKyBmaQorIFsgLW4gIiRSRUxFQVNFIiBdICYmIHJlbD0iJHtSRUxFQVNFfSIKKyAjIENBVkVBVDogdHIgb24gU29sYXJpcyBpcyBhIGJpdCB3ZWlyZCBhbmQgdGhlIGV4dHJhIFtdIGlzIG90aGVyd2lzZSBoYXJtbGVzcy4KK0BAIC00OSw2ICs1MywyMSBAQAorIHN5cz1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisgZWNobyAiICRob3N0ICRyZWwgJGNwdSAkc3lzIgorIAorK2lmIFsgIiRob3N0IiA9ICJsaW51eC0tZ251ZWFiaSIgXQorK3RoZW4KKysJc3lzPWxpbnV4CisrZmkKKysKKytpZiBbICIkaG9zdCIgPSAibGludXgtLXVjbGliYyIgXQorK3RoZW4KKysJc3lzPWxpbnV4CisrZmkKKysKKytpZiBbICIkaG9zdCIgPSAibGludXgtLXVjbGliY2VhYmkiIF0KKyt0aGVuCisrCXN5cz1saW51eAorK2ZpCisrCisgYz1jb25maWcuaAorIG09Y29uZmlnLm1rCisgZWNobyA+JGMgJyNkZWZpbmUgUENJX0NPTkZJR19IJwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL2d1ZXNzLWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlscy9ndWVzcy1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQwYjRhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlscy9ndWVzcy1maXgucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAordGhlIG9yaWdpbmFsIGd1ZXNzIGFsZ29yaXRobSBpcyBicm9rZW4gZm9yIG1hbnkgYXJjaHMKK2ZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHR3byB3b3VsZCBicmVhazoKKwlhcm0tbGludXgtZ251ZWFiaSAgLS0+IHN5cz1nbnVlYWJpCisJeDg2XzY0LXVua25vd24tcGMtbGludXgtZ251ICAtLT4gc3lzID0gcGMtbGludXgtZ251CisKK3VzZSBhIHNpbXBsZXIgc2NoZW1lIGhlcmUgYW5kIGhvcGUgaXQgd29ya3MgZm9yIGFsbCB0aGUgY2FzZXMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKzcvMzAvMjAxMCAtIGNyZWF0ZWQgYnkgUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9saWIvY29uZmlndXJlIGIvbGliL2NvbmZpZ3VyZQoraW5kZXggNDMxOGIwNS4uODRmNmFjYiAxMDA3NTUKKy0tLSBhL2xpYi9jb25maWd1cmUKKysrKyBiL2xpYi9jb25maWd1cmUKK0BAIC01MywyMCArNTMsNyBAQCBjcHU9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYAorIHN5cz1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisgZWNobyAiICRob3N0ICRyZWwgJGNwdSAkc3lzIgorIAorLWlmIFsgIiRob3N0IiA9ICJsaW51eC0tZ251ZWFiaSIgXQorLXRoZW4KKy0Jc3lzPWxpbnV4CistZmkKKy0KKy1pZiBbICIkaG9zdCIgPSAibGludXgtLXVjbGliYyIgXQorLXRoZW4KKy0Jc3lzPWxpbnV4CistZmkKKy0KKy1pZiBbICIkaG9zdCIgPSAibGludXgtLXVjbGliY2VhYmkiIF0KKy10aGVuCistCXN5cz1saW51eAorLWZpCisreyBlY2hvICIkaG9zdCIgfCBncmVwIGxpbnV4OyB9ICYmIHN5cz1saW51eAorIAorIGM9Y29uZmlnLmgKKyBtPWNvbmZpZy5tawpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL21ha2VmaWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL21ha2VmaWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZmJjNmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNpdXRpbHMvcGNpdXRpbHMvbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBJb251dCBSYWR1IDxpb251dHgucmFkdUBpbnRlbC5jb20+CisKK0luZGV4OiBwY2l1dGlscy0zLjIuMC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBjaXV0aWxzLTMuMi4wLm9yaWcvTWFrZWZpbGUKKysrKyBwY2l1dGlscy0zLjIuMC9NYWtlZmlsZQorQEAgLTM1LDcgKzM1LDcgQEAgU0hBUkVESVI9JChQUkVGSVgpL3NoYXJlCisgSURTRElSPSQoU0hBUkVESVIpCisgTUFORElSOj0kKHNoZWxsIGlmIFsgLWQgJChQUkVGSVgpL3NoYXJlL21hbiBdIDsgdGhlbiBlY2hvICQoUFJFRklYKS9zaGFyZS9tYW4gOyBlbHNlIGVjaG8gJChQUkVGSVgpL21hbiA7IGZpKQorIElOQ0RJUj0kKFBSRUZJWCkvaW5jbHVkZQorLUxJQkRJUj0kKFBSRUZJWCkvbGliCisrTElCRElSPSQobGliZGlyKQorIFBLR0NGRElSPSQoTElCRElSKS9wa2djb25maWcKKyAKKyAjIENvbW1hbmRzCitAQCAtOTQsNyArOTQsNyBAQCBleGFtcGxlOiBleGFtcGxlLm8gbGliLyQoUENJTElCX0RFVikKKyBleGFtcGxlLm86IGV4YW1wbGUuYyAkKFBDSUlOQykKKyAKKyAlOiAlLm8KKy0JJChDQykgJChMREZMQUdTKSAkKFRBUkdFVF9BUkNIKSAkXiAkKExJQl9MRExJQlMpIC1vICRACisrCSQoQ0MpICQoTERGTEFHUykgJChUQVJHRVRfQVJDSCkgJF4gJChMSUJfTERMSUJTKSAkKExETElCUykgLW8gJEAKKyAKKyAlLjggJS43OiAlLm1hbgorIAlNPWBlY2hvICQoREFURSkgfCBzZWQgJ3MvLTAxLS8tSmFudWFyeS0vO3MvLTAyLS8tRmVicnVhcnktLztzLy0wMy0vLU1hcmNoLS87cy8tMDQtLy1BcHJpbC0vO3MvLTA1LS8tTWF5LS87cy8tMDYtLy1KdW5lLS87cy8tMDctLy1KdWx5LS87cy8tMDgtLy1BdWd1c3QtLztzLy0wOS0vLVNlcHRlbWJlci0vO3MvLTEwLS8tT2N0b2Jlci0vO3MvLTExLS8tTm92ZW1iZXItLztzLy0xMi0vLURlY2VtYmVyLS87cy9cKC4qXCktXCguKlwpLVwoLipcKS9cMyBcMiBcMS8nYCA7IHNlZCA8JDwgPiRAICJzL0BUT0RBWUAvJCRNLztzL0BWRVJTSU9OQC9wY2l1dGlscy0kKFZFUlNJT04pLztzI0BJRFNESVJAIyQoSURTRElSKSMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNpdXRpbHMvcGNpdXRpbHNfMy4zLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNpdXRpbHMvcGNpdXRpbHNfMy4zLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFhOGNkMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlsc18zLjMuMS5iYgpAQCAtMCwwICsxLDYwIEBACitTVU1NQVJZID0gIlBDSSB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICdUaGUgUENJIFV0aWxpdGllcyBwYWNrYWdlIGNvbnRhaW5zIGEgbGlicmFyeSBmb3IgcG9ydGFibGUgYWNjZXNzIFwKK3RvIFBDSSBidXMgY29uZmlndXJhdGlvbiBzcGFjZSBhbmQgc2V2ZXJhbCB1dGlsaXRpZXMgYmFzZWQgb24gdGhpcyBsaWJyYXJ5LicKK0hPTUVQQUdFID0gImh0dHA6Ly9hdHJleS5rYXJsaW4ubWZmLmN1bmkuY3ovfm1qL3BjaXV0aWxzLnNodG1sIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorREVQRU5EUyA9ICJ6bGliIGttb2QiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9zb2Z0d2FyZS91dGlscy9wY2l1dGlscy9wY2l1dGlscy0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2d1ZXNzLWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYWtlZmlsZS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjRjMzQwYTMxNzk4N2Q2MWExMWVlMmNmMTM5ZWYxMTkxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUxNGEzYmRiNzdlNGNkYmU5ZTk3MGUxODg1YWY0NmUwYmEyMDExYmY5NzM2NDM2OGM0NTVhZGUwZWRkNGUzYTkiCisKK2luaGVyaXQgbXVsdGlsaWJfaGVhZGVyCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnaHdkYicsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW2h3ZGJdID0gIkhXREI9eWVzLEhXREI9bm8sdWRldiIKKworUENJX0NPTkZfRkxBRyA9ICJaTElCPXllcyBETlM9eWVzIFNIQVJFRD15ZXMiCisKKyMgc2VlIGNvbmZpZ3VyZS5wYXRjaAorZG9fY29uZmlndXJlICgpIHsKKwkoCisJICBjZCBsaWIgJiYgXAorCSAgIyBFWFRSQV9PRUNPTkYgZm9yIHRoaXMgcmVjaXBlIGNvdWxkIG9ubHkgcG9zc2libHkgY29udGFpbiAnSFdEQj15ZXMvbm8nLCBzbyB3ZSBwdXQgaXQKKwkgICMgYmVmb3JlIC4vY29uZmlndXJlCisJICAke1BDSV9DT05GX0ZMQUd9ICR7RVhUUkFfT0VDT05GfSAuL2NvbmZpZ3VyZSAke1BWfSAke2RhdGFkaXJ9ICR7VEFSR0VUX09TfSAke1RBUkdFVF9BUkNIfQorCSkKK30KKworZXhwb3J0IFBSRUZJWCA9ICIke3ByZWZpeH0iCitleHBvcnQgU0JJTkRJUiA9ICIke3NiaW5kaXJ9IgorZXhwb3J0IFNIQVJFRElSID0gIiR7ZGF0YWRpcn0iCitleHBvcnQgTUFORElSID0gIiR7bWFuZGlyfSIKKworRVhUUkFfT0VNQUtFICs9ICIke1BDSV9DT05GX0ZMQUd9IgorCisjIFRoZSBjb25maWd1cmUgc2NyaXB0IGJyZWFrcyBpZiB0aGUgSE9TVCB2YXJpYWJsZSBpcyBzZXQKK0hPU1RbdW5leHBvcnRdID0gIjEiCisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgREVTVERJUj0ke0R9IGluc3RhbGwgaW5zdGFsbC1saWIKKworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWxuIC1zIC4uL3NiaW4vbHNwY2kgJHtEfSR7YmluZGlyfS9sc3BjaQorCisJb2VfbXVsdGlsaWJfaGVhZGVyIHBjaS9jb25maWcuaAorfQorCitQQUNLQUdFUyA9KyAiJHtQTn0taWRzIGxpYnBjaSIKK0ZJTEVTXyR7UE59LWlkcyA9ICIke2RhdGFkaXJ9L3BjaS5pZHMqIgorRklMRVNfbGlicGNpID0gIiR7bGliZGlyfS9saWJwY2kuc28uKiIKK1NVTU1BUllfJHtQTn0taWRzID0gIlBDSSB1dGlsaXRpZXMgLSBkZXZpY2UgSUQgZGF0YWJhc2UiCitERVNDUklQVElPTl8ke1BOfS1pZHMgPSAiUGFja2FnZSBwcm92aWRpbmcgdGhlIFBDSSBkZXZpY2UgSUQgZGF0YWJhc2UgZm9yIHBjaXV0aWxzLiIKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1pZHMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNtY2lhdXRpbHMvcGNtY2lhdXRpbHMtMDE4LzAwMDEtZml4LWEtcGFyYWxsZWwtYnVpbGRpbmctaXNzdWUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNtY2lhdXRpbHMvcGNtY2lhdXRpbHMtMDE4LzAwMDEtZml4LWEtcGFyYWxsZWwtYnVpbGRpbmctaXNzdWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IwMTA0MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY21jaWF1dGlscy9wY21jaWF1dGlscy0wMTgvMDAwMS1maXgtYS1wYXJhbGxlbC1idWlsZGluZy1pc3N1ZS5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitGcm9tIDVhNzkzYTFhOWZiMzQ3NzcxOWFhYmY3ZTI3ZmYyMmVkMWFjZGY1NTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDE5IE1heSAyMDE1IDE1OjU0OjI0ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpeCBhIHBhcmFsbGVsIGJ1aWxkaW5nIGlzc3VlCisKK0ZpeGVkOgorfCAgIHNyYy9sZXhfY29uZmlnLmM6MzQ6MjU6IGZhdGFsIGVycm9yOiB5YWNjX2NvbmZpZy5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Cit8Cit8ICAgICNpbmNsdWRlICJ5YWNjX2NvbmZpZy5oIgorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCit8ICAgY29tcGlsYXRpb24gdGVybWluYXRlZC4KKworQW5kOgorQ29tcGlsaW5nIGxleF9jb25maWcuYy4KKyAgc3JjL2xleF9jb25maWcubDozNDoyNTogZmF0YWwgZXJyb3I6IHlhY2NfY29uZmlnLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK3RoZXJlIGFyZSB0d28gTWFrZWZpbGUgcnVsZXMgdG8gZ2VuZXJhdGUgbGV4X2NvbmZpZy5vLCBvbmUgaXMgdG8gZ2VuZXJhdGUKK2xleF9jb25maWcubyBvdGhlciBpcyB0byBnZW5lcmF0ZSBzcmMvbGV4X2NvbmZpZy5vLCBzbyB3ZSBjYW4gcmVtb3ZlIG9uZS4KK2FuZCBhZGQgdGhlIG5lZWRlZCBkZXBlbmRlbmNlIGZvciBsZXhfY29uZmlnLm8KKworCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZSB8IDMgKy0tCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggZDQ1ZmRjMy4uNGM1M2JjMiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTI0Niw4ICsyNDYsNyBAQCAkKFBDTUNJQV9TT0NLRVRfU1RBUlRVUCk6ICQoTElCQykgc3JjL3N0YXJ0dXAubyBzcmMveWFjY19jb25maWcubyBzcmMvbGV4X2NvbmZpZworIAkkKFFVSUVUKSAkKExEKSAkKExERkxBR1MpIC1vICRAICQoQ1JUMCkgc3JjL3N0YXJ0dXAubyBzcmMveWFjY19jb25maWcubyBzcmMvbGV4X2NvbmZpZy5vICQoTElCX09CSlMpICQoQVJDSF9MSUJfT0JKUykKKyAJJChRVUlFVCkgJChTVFJJUENNRCkgJEAKKyAKKy15YWNjX2NvbmZpZy5vIGxleF9jb25maWcubzogJS5vOiAlLmMKKy0JJChDQykgLWMgLU1EIC1PIC1waXBlICQoQ1BQRkxBR1MpICQ8Cisrc3JjL2xleF9jb25maWcubzpzcmMveWFjY19jb25maWcuaAorIAorIGRlYnVndG9vbHM6IGNjZHYgJChDQkRVTVApICQoQ0lTRFVNUCkKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzLTAxOC9tYWtlZmlsZV9maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNtY2lhdXRpbHMvcGNtY2lhdXRpbHMtMDE4L21ha2VmaWxlX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjBjZTIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzLTAxOC9tYWtlZmlsZV9maXgucGF0Y2gKQEAgLTAsMCArMSwxMDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSGFyZGNvZGVkIHBhdGhzIGFyZSBiYWQuLi4KK1RoaXMgbGV0cyB1cyB1c2UgdGhlIGluc3RhbGwgZnJvbSBPRSdzIG5hdGl2ZSBzeXNyb290CityZWJhc2UgdGhlIHBhdGNoIHRvIDAxOCwgcmVtb3ZpbmcgaGFyZGNvZGVkIHBhdGggZm9yIHRydWUKK2FzIHdlbGwuIFJlbW92aW5nIG9mIC1EIGluIGluc3RhbGwgaW52b2NhdGlvbiBpcyBhIGxpdHRsZQorcXVlc3Rpb25hYmxlLCBpcyBpdCBzb21lIEdOVSBleHRlbnRpb24/CisKKy1LaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogcGNtY2lhdXRpbHMtMDE4L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGNtY2lhdXRpbHMtMDE4Lm9yaWcvTWFrZWZpbGUKKysrKyBwY21jaWF1dGlscy0wMTgvTWFrZWZpbGUKK0BAIC03Niw3ICs3Niw3IEBAIHNiaW5kaXIgPQkke2V4ZWNfcHJlZml4fS9zYmluCisgbWFuZGlyID0JJHtwcmVmaXh9L3Vzci9zaGFyZS9tYW4KKyB1ZGV2ZGlyID0JJHtwcmVmaXh9L2xpYi91ZGV2CisgCistSU5TVEFMTCA9IC91c3IvYmluL2luc3RhbGwgLWMKKytJTlNUQUxMID0gaW5zdGFsbCAtYworIElOU1RBTExfUFJPR1JBTSA9ICR7SU5TVEFMTH0KKyBJTlNUQUxMX0RBVEEgID0gJHtJTlNUQUxMfSAtbSA2NDQKKyBJTlNUQUxMX1NDUklQVCA9ICR7SU5TVEFMTF9QUk9HUkFNfQorQEAgLTE4MCw3ICsxODAsNyBAQCBlbmRpZgorICMgaWYgREVCVUcgaXMgZW5hYmxlZCwgdGhlbiB3ZSBkbyBub3Qgc3RyaXAgb3Igb3B0aW1pemUKKyBpZmVxICgkKHN0cmlwICQoREVCVUcpKSx0cnVlKQorIAlDRkxBR1MgICs9IC1PMSAtZyAtRERFQlVHIC1EX0dOVV9TT1VSQ0UKKy0JU1RSSVBDTUQgPSAvYmluL3RydWUgLVNpbmNlX3dlX2FyZV9kZWJ1Z2dpbmcKKysJU1RSSVBDTUQgPSB0cnVlIC1TaW5jZV93ZV9hcmVfZGVidWdnaW5nCisgZWxzZQorIAlDRkxBR1MgICs9ICQoT1BUSU1JWkFUSU9OKSAtZm9taXQtZnJhbWUtcG9pbnRlciAtRF9HTlVfU09VUkNFCisgCVNUUklQQ01EID0gJChTVFJJUCkgLXMgLS1yZW1vdmUtc2VjdGlvbj0ubm90ZSAtLXJlbW92ZS1zZWN0aW9uPS5jb21tZW50CitAQCAtMjczLDMwICsyNzMsMzIgQEAgY2xlYW46CisgCisgaW5zdGFsbC1ob3RwbHVnOgorIAkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKGhvdHBsdWdkaXIpCistCSQoSU5TVEFMTF9QUk9HUkFNKSAtRCBob3RwbHVnL3BjbWNpYS5hZ2VudCAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWEuYWdlbnQKKy0JJChJTlNUQUxMX1BST0dSQU0pIC1EIGhvdHBsdWcvcGNtY2lhLnJjICQoREVTVERJUikkKGhvdHBsdWdkaXIpL3BjbWNpYS5yYworKwkkKElOU1RBTExfUFJPR1JBTSkgaG90cGx1Zy9wY21jaWEuYWdlbnQgJChERVNURElSKSQoaG90cGx1Z2RpcikvcGNtY2lhLmFnZW50CisrCSQoSU5TVEFMTF9QUk9HUkFNKSBob3RwbHVnL3BjbWNpYS5yYyAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWEucmMKKyAKKyB1bmluc3RhbGwtaG90cGx1ZzoKKyAJLSBybSAtZiAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWEuYWdlbnQgJChERVNURElSKSQoaG90cGx1Z2RpcikvcGNtY2lhLnJjCisgCisgaW5zdGFsbC1zb2NrZXQtaG90cGx1ZzoKKy0JJChJTlNUQUxMX1BST0dSQU0pIC1EIGhvdHBsdWcvcGNtY2lhX3NvY2tldC5hZ2VudCAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWFfc29ja2V0LmFnZW50CistCSQoSU5TVEFMTF9QUk9HUkFNKSAtRCBob3RwbHVnL3BjbWNpYV9zb2NrZXQucmMgJChERVNURElSKSQoaG90cGx1Z2RpcikvcGNtY2lhX3NvY2tldC5yYworKwkkKElOU1RBTExfUFJPR1JBTSkgaG90cGx1Zy9wY21jaWFfc29ja2V0LmFnZW50ICQoREVTVERJUikkKGhvdHBsdWdkaXIpL3BjbWNpYV9zb2NrZXQuYWdlbnQKKysJJChJTlNUQUxMX1BST0dSQU0pIGhvdHBsdWcvcGNtY2lhX3NvY2tldC5yYyAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWFfc29ja2V0LnJjCisgCisgdW5pbnN0YWxsLXNvY2tldC1ob3RwbHVnOgorIAktIHJtIC1mICQoREVTVERJUikkKGhvdHBsdWdkaXIpL3BjbWNpYV9zb2NrZXQuYWdlbnQgJChERVNURElSKSQoaG90cGx1Z2RpcikvcGNtY2lhX3NvY2tldC5yYworIAorIGluc3RhbGwtc29ja2V0LXRvb2xzOgorLQkkKElOU1RBTExfUFJPR1JBTSkgLUQgJChQQ01DSUFfU09DS0VUX1NUQVJUVVApICQoREVTVERJUikkKHVkZXZoZWxwZXJkaXIpLyQoUENNQ0lBX1NPQ0tFVF9TVEFSVFVQKQorKwkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKHVkZXZoZWxwZXJkaXIpCisrCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFBDTUNJQV9TT0NLRVRfU1RBUlRVUCkgJChERVNURElSKSQodWRldmhlbHBlcmRpcikvJChQQ01DSUFfU09DS0VUX1NUQVJUVVApCisgCisgdW5pbnN0YWxsLXNvY2tldC10b29sczoKKyAJLSBybSAtZiAkKERFU1RESVIpJCh1ZGV2aGVscGVyZGlyKS8kKFBDTUNJQV9TT0NLRVRfU1RBUlRVUCkKKyAKKyBpbnN0YWxsLXRvb2xzOgorIAkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKHNiaW5kaXIpCistCSQoSU5TVEFMTF9QUk9HUkFNKSAtRCAkKFBDQ0FSRENUTCkgJChERVNURElSKSQoc2JpbmRpcikvJChQQ0NBUkRDVEwpCisrCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQodWRldmhlbHBlcmRpcikKKysJJChJTlNUQUxMX1BST0dSQU0pICQoUENDQVJEQ1RMKSAkKERFU1RESVIpJChzYmluZGlyKS8kKFBDQ0FSRENUTCkKKyAJJChTWU1MSU5LKSAkKFBDQ0FSRENUTCkgJChERVNURElSKSQoc2JpbmRpcikvJChMU1BDTUNJQSkKKy0JJChJTlNUQUxMX1BST0dSQU0pIC1EICQoUENNQ0lBX0NIRUNLX0JST0tFTl9DSVMpICQoREVTVERJUikkKHVkZXZoZWxwZXJkaXIpLyQoUENNQ0lBX0NIRUNLX0JST0tFTl9DSVMpCisrCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFBDTUNJQV9DSEVDS19CUk9LRU5fQ0lTKSAkKERFU1RESVIpJCh1ZGV2aGVscGVyZGlyKS8kKFBDTUNJQV9DSEVDS19CUk9LRU5fQ0lTKQorIAorIHVuaW5zdGFsbC10b29sczoKKyAJLSBybSAtZiAkKERFU1RESVIpJChzYmluZGlyKS8kKFBDQ0FSRENUTCkKK0BAIC0zMDUsMjIgKzMwNywyNCBAQCB1bmluc3RhbGwtdG9vbHM6CisgCisgaW5zdGFsbC1jb25maWc6CisgCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQocGNtY2lhY29uZmRpcikKKy0JJChJTlNUQUxMX0RBVEEpICAtRCBjb25maWcvY29uZmlnLm9wdHMgJChERVNURElSKSQocGNtY2lhY29uZmRpcikvY29uZmlnLm9wdHMKKysJJChJTlNUQUxMX0RBVEEpICBjb25maWcvY29uZmlnLm9wdHMgJChERVNURElSKSQocGNtY2lhY29uZmRpcikvY29uZmlnLm9wdHMKKyAJaWYgWyAtZiBjb25maWcvY29uZmlnLm9wdHMuJChBUkNIKSBdOyB0aGVuIFwKKy0JCSQoSU5TVEFMTF9EQVRBKSAtRCBjb25maWcvY29uZmlnLm9wdHMuJChBUkNIKSAkKERFU1RESVIpJChwY21jaWFjb25mZGlyKS9jb25maWcub3B0czsgXAorKwkJJChJTlNUQUxMX0RBVEEpIGNvbmZpZy9jb25maWcub3B0cy4kKEFSQ0gpICQoREVTVERJUikkKHBjbWNpYWNvbmZkaXIpL2NvbmZpZy5vcHRzOyBcCisgCWZpCisgCisgdW5pbnN0YWxsLWNvbmZpZzoKKyAjCS0gcm0gLWYgJChERVNURElSKSQocGNtY2lhY29uZmRpcikvY29uZmlnLm9wdHMKKyAKKyBpbnN0YWxsLXVkZXY6CistCSQoSU5TVEFMTF9EQVRBKSAtRCAkKFVERVZfUlVMRVNfRklMRSkgJChERVNURElSKSQodWRldnJ1bGVzZGlyKS82MC1wY21jaWEucnVsZXMKKysJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJCh1ZGV2cnVsZXNkaXIpCisrCSQoSU5TVEFMTF9EQVRBKSAkKFVERVZfUlVMRVNfRklMRSkgJChERVNURElSKSQodWRldnJ1bGVzZGlyKS82MC1wY21jaWEucnVsZXMKKyAKKyB1bmluc3RhbGwtdWRldjoKKyAJLSBybSAtZiAkKERFU1RESVIpJCh1ZGV2cnVsZXNkaXIpLzYwLXBjbWNpYS5ydWxlcworIAorIGluc3RhbGwtbWFuOgorLQkkKElOU1RBTExfREFUQSkgLUQgbWFuL21hbjgvcGNjYXJkY3RsLjggJChERVNURElSKSQobWFuZGlyKS9tYW44L3BjY2FyZGN0bC44CisrCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQobWFuZGlyKS9tYW44CisrCSQoSU5TVEFMTF9EQVRBKSBtYW4vbWFuOC9wY2NhcmRjdGwuOCAkKERFU1RESVIpJChtYW5kaXIpL21hbjgvcGNjYXJkY3RsLjgKKyAJJChTWU1MSU5LKSBwY2NhcmRjdGwuOCAkKERFU1RESVIpJChtYW5kaXIpL21hbjgvbHNwY21jaWEuOAorIAorIHVuaW5zdGFsbC1tYW46CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNtY2lhdXRpbHMvcGNtY2lhdXRpbHMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDFjNTViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzLmluYwpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIkxpbnV4IGtlcm5lbCB1c2VybGFuZCB1dGlsaXRpZXMgZm9yIHRoZSBQQ01DSUEgc3Vic3lzdGVtIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMva2VybmVsL3BjbWNpYS8iCitTRUNUSU9OID0gImtlcm5lbC91c2VybGFuZCIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitERVBFTkRTID0gInVkZXYgc3lzZnN1dGlscyBmbGV4LW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gInVkZXYgbW9kdWxlLWluaXQtdG9vbHMiCisKK1NSQ19VUkkgPSAiaHR0cDovL21pcnJvci5saW51eC5vcmcuYXUvbGludXgvdXRpbHMva2VybmVsL3BjbWNpYS8ke0JQfS50YXIuYnoyIgorCitTID0gIiR7V09SS0RJUn0vcGNtY2lhdXRpbHMtJHtQVn0iCisKK2V4cG9ydCBIT1NUQ0MgPSAiJHtCVUlMRF9DQ30iCitleHBvcnQgZXRjZGlyID0gIiR7c3lzY29uZmRpcn0iCitleHBvcnQgc2JpbmRpciA9ICIke2Jhc2Vfc2JpbmRpcn0iCitleHBvcnQgcGNtY2lhY29uZmRpciA9ICIke3N5c2NvbmZkaXJ9L3BjbWNpYSIKK2V4cG9ydCB1ZGV2ZGlyID0gImBwa2ctY29uZmlnIC0tdmFyaWFibGU9dWRldmRpciB1ZGV2YCIKK2V4cG9ydCB1ZGV2cnVsZXNkaXIgPSAiYHBrZy1jb25maWcgLS12YXJpYWJsZT11ZGV2ZGlyIHVkZXZgL3J1bGVzLmQiCitleHBvcnQgVURFViA9ICIxIgorTEQgPSAiJHtDQ30iCitDRkxBR1MgPSsgIi1JJHtTfS9zcmMiCitDRkxBR1MgPSsgIi1EUENNQ0lBVVRJTFNfVkVSU0lPTj1cXCIke1BWfVxcIiIKKworRVhUUkFfT0VNQUtFID0gIi1lICdTVFJJUD1lY2hvJyAnTElCX09CSlM9LWxjIC1sc3lzZnMnICdMRVg9ZmxleCciCisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorfQorCitDT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vcGNtY2lhL2NvbmZpZy5vcHRzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzXzAxOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY21jaWF1dGlscy9wY21jaWF1dGlsc18wMTguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU3YmQwNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY21jaWF1dGlscy9wY21jaWF1dGlsc18wMTguYmIKQEAgLTAsMCArMSwxMyBAQAorcmVxdWlyZSBwY21jaWF1dGlscy5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL21ha2VmaWxlX2ZpeC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1maXgtYS1wYXJhbGxlbC1idWlsZGluZy1pc3N1ZS5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1ZDg1NjY5YjM0NDBiYWE0NTMyMzYzZGE2Y2FhZjFiNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3OWU2YWU0NDEyNzhlMTc4YzA3NTAxZDQ5MjM5NGVkMmMwMzI2ZmRiNjY4OTRmNmQwNDBlYzgxMWIwZGM4ZWQ1IgorCitQUiA9ICJyMSIKKworRklMRVNfJHtQTn0tZGJnICs9ICIqL3VkZXYvLmRlYnVnICovKi91ZGV2Ly5kZWJ1ZyIKK0ZJTEVTXyR7UE59ICs9ICIqL3VkZXYgKi8qL3VkZXYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG0tdXRpbHMvcG0tdXRpbHNfMS40LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG0tdXRpbHMvcG0tdXRpbHNfMS40LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzNTE4NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wbS11dGlscy9wbS11dGlsc18xLjQuMS5iYgpAQCAtMCwwICsxLDI2IEBACitTRUNUSU9OID0gImJhc2UiCitTVU1NQVJZID0gIlV0aWxpdGllcyBhbmQgc2NyaXB0cyBmb3IgcG93ZXIgbWFuYWdlbWVudCIKK0RFU0NSSVBUSU9OID0gIlNpbXBsZSBzaGVsbCBjb21tYW5kIGxpbmUgdG9vbHMgdG8gc3VzcGVuZCBhbmQgaGliZXJuYXRlLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9wbS11dGlscy5mcmVlZGVza3RvcC5vcmcvd2lraS8iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3BtLXBtdS5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjI7bWQ1PTNjMWRkYmM1NGU3MzVmYjRhMDM4NmUxNGM3OGEzMTQ3IgorCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICJodHRwOi8vcG0tdXRpbHMuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzL3BtLXV0aWxzLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjE3NDJhNTU2MDg5YzM2YzNhODllYjFiOTU3ZGE1YTYwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhlZDg5OTAzMjg2NmQ4OGIyOTMzYTFkMzRjYzc1ZThhZTQyZGNkZTIwZTFjYzIxODM2YmFhYWUzZDQzNzBjMGIiCisKK2luaGVyaXQgcGtnY29uZmlnIGF1dG90b29scworCitSREVQRU5EU18ke1BOfSA9ICJncmVwIGJhc2giCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkoIGNkICR7U307IGF1dG9yZWNvbmYgLWYgLWkgLXMgKQorfQorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyR7QlBOfS8qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vJHtCUE59L2Jpbi8uZGVidWcgXAorCQkgICAgJHtkYXRhZGlyfS9kb2MvcG0tdXRpbHMvUkVBRE1FLmRlYnVnZ2luZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvQ09QWUlORyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2Y1MjkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9DT1BZSU5HCkBAIC0wLDAgKzEsMiBAQAorVGhpcyBpcyBhIGJsYW5rIENPUFlJTkcgZmlsZSwgYW5kIHNob3VsZCBiZSBmaWxsZWQgaW4gYnkgb3JpZ2luYWwgYXV0aG9yIGluIGZ1dHVyZS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9wb2ludGVyY2FsIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9wb2ludGVyY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3BvaW50ZXJjYWwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdWFybS9wb2ludGVyY2FsIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11YXJtL3BvaW50ZXJjYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJkODRjYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdWFybS9wb2ludGVyY2FsCkBAIC0wLDAgKzEgQEAKKzgzMTMgNCAtODUyNiA3IDgzMzQgLTgyNjA0IDY1NTM2CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVhcm12Ni9wb2ludGVyY2FsIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11YXJtdjYvcG9pbnRlcmNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmQ4NGNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11YXJtdjYvcG9pbnRlcmNhbApAQCAtMCwwICsxIEBACis4MzEzIDQgLTg1MjYgNyA4MzM0IC04MjYwNCA2NTUzNgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11YXJtdjcvcG9pbnRlcmNhbCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdWFybXY3L3BvaW50ZXJjYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJkODRjYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdWFybXY3L3BvaW50ZXJjYWwKQEAgLTAsMCArMSBAQAorODMxMyA0IC04NTI2IDcgODMzNCAtODI2MDQgNjU1MzYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdW1pcHMvcG9pbnRlcmNhbCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdW1pcHMvcG9pbnRlcmNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmQ4NGNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11bWlwcy9wb2ludGVyY2FsCkBAIC0wLDAgKzEgQEAKKzgzMTMgNCAtODUyNiA3IDgzMzQgLTgyNjA0IDY1NTM2CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVwcGMvcG9pbnRlcmNhbCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdXBwYy9wb2ludGVyY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZDZlMzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVwcGMvcG9pbnRlcmNhbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXV4ODYtNjQvcG9pbnRlcmNhbCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdXg4Ni02NC9wb2ludGVyY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MDA1M2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXV4ODYtNjQvcG9pbnRlcmNhbApAQCAtMCwwICsxIEBACisxMjgwIDAgMTAwMiAwIDk2MCAzMjggNjU1MzYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdXg4Ni9wb2ludGVyY2FsIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11eDg2L3BvaW50ZXJjYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQwMDUzZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdXg4Ni9wb2ludGVyY2FsCkBAIC0wLDAgKzEgQEAKKzEyODAgMCAxMDAyIDAgOTYwIDMyOCA2NTUzNgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbF8wLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsXzAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjczNWE1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbF8wLjAuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJUb3VjaHNjcmVlbiBjYWxpYnJhdGlvbiBkYXRhIgorU0VDVElPTiA9ICJiYXNlIgorUFIgPSAicjExIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00YjVmY2ZjODdmYjYxNTg2MGQzOThiNWUzODY4NWVkZiIKKworU1JDX1VSSSA9ICJmaWxlOi8vcG9pbnRlcmNhbCBcCisgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJIyBPbmx5IGluc3RhbGwgZmlsZSBpZiBpdCBoYXMgYSBjb250ZW50cworCWlmIFsgLXMgJHtTfS9wb2ludGVyY2FsIF07IHRoZW4KKwkgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vCisJICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9wb2ludGVyY2FsICR7RH0ke3N5c2NvbmZkaXJ9LworCWZpCit9CisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9zZXRzZXJpYWwvc2V0c2VyaWFsL2FkZF9zdGRsaWIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avc2V0c2VyaWFsL3NldHNlcmlhbC9hZGRfc3RkbGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNGYyNjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avc2V0c2VyaWFsL3NldHNlcmlhbC9hZGRfc3RkbGliLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKKyMgVGhpcyBwYXRjaCBhZGRlcyBzdGRsaWIuaCB0byBmaXggY29tcGlsZXIgd2FybmluZ3MgZHVlIHRvIHRoZSBleGl0CisjIGJ1aWx0LWluIG5vdCBiZWluZyBkZWZpbmVkIGFuZCBnZXR0aW5nIGFuIGluY29ycmVjdCBpbXBsaWNpdCBkZWZpbml0aW9uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitDcmVhdGVkLWJ5OiBTYXVsIFdvbGQgPHNhdWwud29sZEBpbnRlbC5jb20+CisKKy0tLSBzZXRzZXJpYWwtMi4xNy9zZXRzZXJpYWwuYwkyMDEwLTA5LTAyIDE0OjExOjI3LjU2OTc2MzA4OCAtMDcwMAorKysrIHNldHNlcmlhbC0yLjE3X2ZpeGVkL3NldHNlcmlhbC5jCTIwMTAtMDktMDIgMTQ6MTE6MDguNTQ2MjY0MTM5IC0wNzAwCitAQCAtMTEsNiArMTEsNyBAQAorICAqLworIAorICNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8dGVybWlvcy5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3NldHNlcmlhbC9zZXRzZXJpYWwvbGRmbGFncy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9zZXRzZXJpYWwvc2V0c2VyaWFsL2xkZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc0YWRjOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9zZXRzZXJpYWwvc2V0c2VyaWFsL2xkZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorT2JleSBMREZMQUdTCisKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIHNldHNlcmlhbC0yLjE3Lm9yaWcvTWFrZWZpbGUuaW4KKysrKyBzZXRzZXJpYWwtMi4xNy9NYWtlZmlsZS5pbgorQEAgLTEzLDYgKzEzLDcgQEAgU1RSSVAgPSBAU1RSSVBACisgQ0MgPSBAQ0NACisgUk0gPSBybSAtZgorIENGTEFHUyA9IEBDRkxBR1NACisrTERGTEFHUyA9IEBMREZMQUdTQAorIERFRlMgPSBAREVGU0AKKyBJTkNTID0gLUkuCisgVEFSID0gdGFyCitAQCAtMjAsNyArMjEsNyBAQCBUQVIgPSB0YXIKKyBhbGw6IHNldHNlcmlhbCBzZXRzZXJpYWwuY2F0CisKKyBzZXRzZXJpYWw6IHNldHNlcmlhbC5jCistCSQoQ0MpICQoQ0ZMQUdTKSAkKERFRlMpICQoSU5DUykgc2V0c2VyaWFsLmMgLW8gc2V0c2VyaWFsCisrCSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpICQoREVGUykgJChJTkNTKSBzZXRzZXJpYWwuYyAtbyBzZXRzZXJpYWwKKworIHNldHNlcmlhbC5jYXQ6IHNldHNlcmlhbC44CisJbnJvZmYgLW1hbiBzZXRzZXJpYWwuOCA+IHNldHNlcmlhbC5jYXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9zZXRzZXJpYWwvc2V0c2VyaWFsXzIuMTcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avc2V0c2VyaWFsL3NldHNlcmlhbF8yLjE3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYmRkZDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avc2V0c2VyaWFsL3NldHNlcmlhbF8yLjE3LmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiQ29udHJvbHMgdGhlIGNvbmZpZ3VyYXRpb24gb2Ygc2VyaWFsIHBvcnRzIgorREVTQ1JJUFRJT04gPSAic2V0c2VyaWFsIGlzIGEgcHJvZ3JhbSBkZXNpZ25lZCB0byBzZXQgYW5kL29yIHJlcG9ydCB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggYSBzZXJpYWwgcG9ydCIKK0hPTUVQQUdFID0gImh0dHA6Ly9zZXRzZXJpYWwuc291cmNlZm9yZ2UubmV0IgorQVVUSE9SID0gIlRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+IgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkdQTHYyLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly92ZXJzaW9uLmg7YmVnaW5saW5lPTE7ZW5kbGluZT02O21kNT0yZTdjNTljYjllNTdlMzU2YWU4MWY1MGY0ZTRkZmQ5OSIKK1BSID0gInIzIgorCitERVBFTkRTICs9ICJncm9mZi1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcAorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9zZXRzZXJpYWwvJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9hZGRfc3RkbGliLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xkZmxhZ3MucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImM0ODY3ZDcyYzQxNTY0MzE4ZTAxMDc3NDVlYjdhMGYyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdlNDQ4N2QzMjBhYzMxNTU4NTYzNDI0MTg5NDM1ZDM5NmRkZjc3OTUzYmIyMzExMWExN2EzZDE0ODdiNTc5NGEiCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisgICAgaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjgKKworICAgIGluc3RhbGwgLW0gMDc1NSAke1N9L3NldHNlcmlhbCAgICR7RH0ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9zZXRzZXJpYWwuOCAke0R9JHttYW5kaXJ9L21hbjgKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LWZ3LXV0aWxzXzIwMTUuMDcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC1mdy11dGlsc18yMDE1LjA3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZjdhMDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC1mdy11dGlsc18yMDE1LjA3LmJiCkBAIC0wLDAgKzEsNDkgQEAKK1NVTU1BUlkgPSAiVS1Cb290IGJvb3Rsb2FkZXIgZndfcHJpbnRlbnYvc2V0ZW52IHV0aWxpdGllcyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTGljZW5zZXMvUkVBRE1FO21kNT0wNTA3Y2Q3ZGE4ZTdhZDZkNjcwMTkyNmVjOWI4NGM5NSIKK1NFQ1RJT04gPSAiYm9vdGxvYWRlciIKK0RFUEVORFMgPSAibXRkLXV0aWxzIgorCisjIFRoaXMgcmV2aXNpb24gY29ycmVzcG9uZHMgdG8gdGhlIHRhZyAidjIwMTUuMDciCisjIFdlIHVzZSB0aGUgcmV2aXNpb24gaW4gb3JkZXIgdG8gYXZvaWQgaGF2aW5nIHRvIGZldGNoIGl0IGZyb20gdGhlCisjIHJlcG8gZHVyaW5nIHBhcnNlCitTUkNSRVYgPSAiMzM3MTFiZGQ0YTRkY2U5NDJmYjVhZTg1YTY4ODk5YTgzNTdiZGQ5NCIKKworUFYgPSAidjIwMTUuMDcrZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LmRlbnguZGUvdS1ib290LmdpdDticmFuY2g9bWFzdGVyIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitJTlNBTkVfU0tJUF8ke1BOfSA9ICJhbHJlYWR5LXN0cmlwcGVkIgorRVhUUkFfT0VNQUtFX2NsYXNzLXRhcmdldCA9ICdDUk9TU19DT01QSUxFPSR7VEFSR0VUX1BSRUZJWH0gQ0M9IiR7Q0N9ICR7Q0ZMQUdTfSAke0xERkxBR1N9IiBWPTEnCitFWFRSQV9PRU1BS0VfY2xhc3MtY3Jvc3MgPSAnQVJDSD0ke1RBUkdFVF9BUkNIfSBDQz0iJHtDQ30gJHtDRkxBR1N9ICR7TERGTEFHU30iIFY9MScKKworaW5oZXJpdCB1Ym9vdC1jb25maWcKKworZG9fY29tcGlsZSAoKSB7CisJb2VfcnVubWFrZSAke1VCT09UX01BQ0hJTkV9CisJb2VfcnVubWFrZSBlbnYKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX3NiaW5kaXJ9CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gNzU1ICR7U30vdG9vbHMvZW52L2Z3X3ByaW50ZW52ICR7RH0ke2Jhc2Vfc2JpbmRpcn0vZndfcHJpbnRlbnYKKwlpbnN0YWxsIC1tIDc1NSAke1N9L3Rvb2xzL2Vudi9md19wcmludGVudiAke0R9JHtiYXNlX3NiaW5kaXJ9L2Z3X3NldGVudgorCWluc3RhbGwgLW0gMDY0NCAke1N9L3Rvb2xzL2Vudi9md19lbnYuY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L2Z3X2Vudi5jb25maWcKK30KKworZG9faW5zdGFsbF9jbGFzcy1jcm9zcyAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJfY3Jvc3N9CisJaW5zdGFsbCAtbSA3NTUgJHtTfS90b29scy9lbnYvZndfcHJpbnRlbnYgJHtEfSR7YmluZGlyX2Nyb3NzfS9md19wcmludGVudgorCWluc3RhbGwgLW0gNzU1ICR7U30vdG9vbHMvZW52L2Z3X3ByaW50ZW52ICR7RH0ke2JpbmRpcl9jcm9zc30vZndfc2V0ZW52Cit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DU19jbGFzcy1jcm9zcyA9ICJ1Ym9vdF9md191dGlsc19jcm9zcyIKK3Vib290X2Z3X3V0aWxzX2Nyb3NzKCkgeworCXN5c3Jvb3Rfc3RhZ2VfZGlyICR7RH0ke2JpbmRpcl9jcm9zc30gJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3N9Cit9CisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCitCQkNMQVNTRVhURU5EID0gImNyb3NzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QtbWtpbWFnZV8yMDE1LjA3LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QtbWtpbWFnZV8yMDE1LjA3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMjliYmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC1ta2ltYWdlXzIwMTUuMDcuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJVLUJvb3QgYm9vdGxvYWRlciBpbWFnZSBjcmVhdGlvbiB0b29sIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MaWNlbnNlcy9SRUFETUU7bWQ1PTA1MDdjZDdkYThlN2FkNmQ2NzAxOTI2ZWM5Yjg0Yzk1IgorU0VDVElPTiA9ICJib290bG9hZGVyIgorCitERVBFTkRTID0gIm9wZW5zc2wiCisKKyMgVGhpcyByZXZpc2lvbiBjb3JyZXNwb25kcyB0byB0aGUgdGFnICJ2MjAxNS4wNyIKKyMgV2UgdXNlIHRoZSByZXZpc2lvbiBpbiBvcmRlciB0byBhdm9pZCBoYXZpbmcgdG8gZmV0Y2ggaXQgZnJvbSB0aGUKKyMgcmVwbyBkdXJpbmcgcGFyc2UKK1NSQ1JFViA9ICIzMzcxMWJkZDRhNGRjZTk0MmZiNWFlODVhNjg4OTlhODM1N2JkZDk0IgorCitQViA9ICJ2MjAxNS4wNytnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQuZGVueC5kZS91LWJvb3QuZ2l0O2JyYW5jaD1tYXN0ZXIiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0VYVFJBX09FTUFLRSA9ICdDUk9TU19DT01QSUxFPSIke1RBUkdFVF9QUkVGSVh9IiBDQz0iJHtDQ30gJHtDRkxBR1N9ICR7TERGTEFHU30iIFNUUklQPXRydWUgVj0xJworCitkb19jb21waWxlICgpIHsKKwlvZV9ydW5tYWtlIHNhbmRib3hfZGVmY29uZmlnCisJb2VfcnVubWFrZSBjcm9zc190b29scyBOT19TREw9MQorfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgdG9vbHMvbWtpbWFnZSAke0R9JHtiaW5kaXJ9L3Vib290LW1raW1hZ2UKKwlsbiAtc2YgdWJvb3QtbWtpbWFnZSAke0R9JHtiaW5kaXJ9L21raW1hZ2UKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NmZmZDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC5pbmMKQEAgLTAsMCArMSwyOTAgQEAKK1NVTU1BUlkgPSAiVW5pdmVyc2FsIEJvb3QgTG9hZGVyIGZvciBlbWJlZGRlZCBkZXZpY2VzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5kZW54LmRlL3dpa2kvVS1Cb290L1dlYkhvbWUiCitTRUNUSU9OID0gImJvb3Rsb2FkZXJzIgorUFJPVklERVMgPSAidmlydHVhbC9ib290bG9hZGVyIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xpY2Vuc2VzL1JFQURNRTttZDU9MDUwN2NkN2RhOGU3YWQ2ZDY3MDE5MjZlYzliODRjOTUiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LmRlbnguZGUvdS1ib290LmdpdDticmFuY2g9bWFzdGVyIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitpbmhlcml0IHVib290LWNvbmZpZyBkZXBsb3kKKworRVhUUkFfT0VNQUtFID0gJ0NST1NTX0NPTVBJTEU9JHtUQVJHRVRfUFJFRklYfSBDQz0iJHtUQVJHRVRfUFJFRklYfWdjYyAke1RPT0xDSEFJTl9PUFRJT05TfSIgVj0xJworRVhUUkFfT0VNQUtFICs9ICdIT1NUQ0M9IiR7QlVJTERfQ0N9ICR7QlVJTERfQ0ZMQUdTfSAke0JVSUxEX0xERkxBR1N9IicKKworUEFDS0FHRUNPTkZJRyA/Pz0gIm9wZW5zc2wiCisjIHUtYm9vdCB3aWxsIGNvbXBpbGUgaXRzIG93biB0b29scyBkdXJpbmcgdGhlIGJ1aWxkLCB3aXRoIHNwZWNpZmljCisjIGNvbmZpZ3VyYXRpb25zIChha2Egd2hlbiBDT05GSUdfRklUX1NJR05BVFVSRSBpcyBlbmFibGVkKSBvcGVuc3NsIGlzIG5lZWRlZCBhcworIyBhIGhvc3QgYnVpbGQgZGVwZW5kZW5jeS4KK1BBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLCxvcGVuc3NsLW5hdGl2ZSIKKworIyBBbGxvdyBzZXR0aW5nIGFuIGFkZGl0aW9uYWwgdmVyc2lvbiBzdHJpbmcgdGhhdCB3aWxsIGJlIHBpY2tlZCB1cCBieSB0aGUKKyMgdS1ib290IGJ1aWxkIHN5c3RlbSBhbmQgYXBwZW5kZWQgdG8gdGhlIHUtYm9vdCB2ZXJzaW9uLiAgSWYgdGhlIC5zY212ZXJzaW9uCisjIGZpbGUgYWxyZWFkeSBleGlzdHMgaXQgd2lsbCBub3QgYmUgb3ZlcndyaXR0ZW4uCitVQk9PVF9MT0NBTFZFUlNJT04gPz0gIiIKKworIyBTb21lIHZlcnNpb25zIG9mIHUtYm9vdCB1c2UgLmJpbiBhbmQgb3RoZXJzIHVzZSAuaW1nLiAgQnkgZGVmYXVsdCB1c2UgLmJpbgorIyBidXQgZW5hYmxlIGluZGl2aWR1YWwgcmVjaXBlcyB0byBjaGFuZ2UgdGhpcyB2YWx1ZS4KK1VCT09UX1NVRkZJWCA/Pz0gImJpbiIKK1VCT09UX0lNQUdFID89ICJ1LWJvb3QtJHtNQUNISU5FfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0iCitVQk9PVF9CSU5BUlkgPz0gInUtYm9vdC4ke1VCT09UX1NVRkZJWH0iCitVQk9PVF9TWU1MSU5LID89ICJ1LWJvb3QtJHtNQUNISU5FfS4ke1VCT09UX1NVRkZJWH0iCitVQk9PVF9NQUtFX1RBUkdFVCA/PSAiYWxsIgorCisjIE91dHB1dCB0aGUgRUxGIGdlbmVyYXRlZC4gU29tZSBwbGF0Zm9ybXMgY2FuIHVzZSB0aGUgRUxGIGZpbGUgYW5kIGRpcmVjdGx5CisjIGxvYWQgaXQgKEpUQUcgYm9vdGluZywgUUVNVSkgYWRkaXRpb25hbGx5IHRoZSBFTEYgY2FuIGJlIHVzZWQgZm9yIGRlYnVnZ2luZworIyBwdXJwb3Nlcy4KK1VCT09UX0VMRiA/PSAiIgorVUJPT1RfRUxGX1NVRkZJWCA/PSAiZWxmIgorVUJPT1RfRUxGX0lNQUdFID89ICJ1LWJvb3QtJHtNQUNISU5FfS0ke1BWfS0ke1BSfS4ke1VCT09UX0VMRl9TVUZGSVh9IgorVUJPT1RfRUxGX0JJTkFSWSA/PSAidS1ib290LiR7VUJPT1RfRUxGX1NVRkZJWH0iCitVQk9PVF9FTEZfU1lNTElOSyA/PSAidS1ib290LSR7TUFDSElORX0uJHtVQk9PVF9FTEZfU1VGRklYfSIKKworIyBTb21lIHZlcnNpb25zIG9mIHUtYm9vdCBidWlsZCBhbiBTUEwgKFNlY29uZCBQcm9ncmFtIExvYWRlcikgaW1hZ2UgdGhhdAorIyBzaG91bGQgYmUgcGFja2FnZWQgYWxvbmcgd2l0aCB0aGUgdS1ib290IGJpbmFyeSBhcyB3ZWxsIGFzIHBsYWNlZCBpbiB0aGUKKyMgZGVwbG95IGRpcmVjdG9yeS4gIEZvciB0aG9zZSB2ZXJzaW9ucyB0aGV5IGNhbiBzZXQgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMKKyMgdG8gYWxsb3cgcGFja2FnaW5nIHRoZSBTUEwuCitTUExfQklOQVJZID89ICIiCitTUExfSU1BR0UgPz0gIiR7U1BMX0JJTkFSWX0tJHtNQUNISU5FfS0ke1BWfS0ke1BSfSIKK1NQTF9TWU1MSU5LID89ICIke1NQTF9CSU5BUll9LSR7TUFDSElORX0iCisKKyMgQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb3IgYSBzY3JpcHQgY2FuIGJlIGluc3RhbGxlZCBhbG9uZ3NpZGUKKyMgdS1ib290IHRvIGJlIHVzZWQgYXV0b21hdGljYWxseSBvbiBib290LiAgVGhpcyBmaWxlLCB0eXBpY2FsbHkgJ3VFbnYudHh0JworIyBvciAnYm9vdC5zY3InLCBzaG91bGQgYmUgcGFja2FnZWQgYWxvbmcgd2l0aCB1LWJvb3QgYXMgd2VsbCBhcyBwbGFjZWQgaW4gdGhlCisjIGRlcGxveSBkaXJlY3RvcnkuICBNYWNoaW5lIGNvbmZpZ3VyYXRpb25zIG5lZWRpbmcgb25lIG9mIHRoZXNlIGZpbGVzIHNob3VsZAorIyBpbmNsdWRlIGl0IGluIHRoZSBTUkNfVVJJIGFuZCBzZXQgdGhlIFVCT09UX0VOViBwYXJhbWV0ZXIuCitVQk9PVF9FTlZfU1VGRklYID89ICJ0eHQiCitVQk9PVF9FTlYgPz0gIiIKK1VCT09UX0VOVl9CSU5BUlkgPz0gIiR7VUJPT1RfRU5WfS4ke1VCT09UX0VOVl9TVUZGSVh9IgorVUJPT1RfRU5WX0lNQUdFID89ICIke1VCT09UX0VOVn0tJHtNQUNISU5FfS0ke1BWfS0ke1BSfS4ke1VCT09UX0VOVl9TVUZGSVh9IgorVUJPT1RfRU5WX1NZTUxJTksgPz0gIiR7VUJPT1RfRU5WfS0ke01BQ0hJTkV9LiR7VUJPT1RfRU5WX1NVRkZJWH0iCisKK2RvX2NvbXBpbGUgKCkgeworCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGQtaXMtZ29sZCcsICdsZC1pcy1nb2xkJywgJycsIGQpfSIgPSAibGQtaXMtZ29sZCIgXSA7IHRoZW4KKwkJc2VkIC1pICdzLyQoQ1JPU1NfQ09NUElMRSlsZCQvJChDUk9TU19DT01QSUxFKWxkLmJmZC9nJyBjb25maWcubWsKKwlmaQorCisJdW5zZXQgTERGTEFHUworCXVuc2V0IENGTEFHUworCXVuc2V0IENQUEZMQUdTCisKKwlpZiBbICEgLWUgJHtCfS8uc2NtdmVyc2lvbiAtYSAhIC1lICR7U30vLnNjbXZlcnNpb24gXQorCXRoZW4KKwkJZWNobyAke1VCT09UX0xPQ0FMVkVSU0lPTn0gPiAke0J9Ly5zY212ZXJzaW9uCisJCWVjaG8gJHtVQk9PVF9MT0NBTFZFUlNJT059ID4gJHtTfS8uc2NtdmVyc2lvbgorCWZpCisgICAgCisgICAgaWYgWyAieCR7VUJPT1RfQ09ORklHfSIgIT0gIngiIF0KKyAgICB0aGVuCisgICAgICAgIGZvciBjb25maWcgaW4gJHtVQk9PVF9NQUNISU5FfTsgZG8KKyAgICAgICAgICAgIGk9YGV4cHIgJGkgKyAxYDsKKyAgICAgICAgICAgIGZvciB0eXBlICBpbiAke1VCT09UX0NPTkZJR307IGRvCisgICAgICAgICAgICAgICAgaj1gZXhwciAkaiArIDFgOworICAgICAgICAgICAgICAgIGlmIFsgJGogLWVxICRpIF0KKyAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgIG9lX3J1bm1ha2UgTz0ke2NvbmZpZ30gJHtjb25maWd9CisgICAgICAgICAgICAgICAgICAgIG9lX3J1bm1ha2UgTz0ke2NvbmZpZ30gJHtVQk9PVF9NQUtFX1RBUkdFVH0KKyAgICAgICAgICAgICAgICAgICAgY3AgICR7U30vJHtjb25maWd9LyR7VUJPT1RfQklOQVJZfSAgJHtTfS8ke2NvbmZpZ30vdS1ib290LSR7dHlwZX0uJHtVQk9PVF9TVUZGSVh9CisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIHVuc2V0ICBqCisgICAgICAgIGRvbmUKKyAgICAgICAgdW5zZXQgIGkKKyAgICBlbHNlCisgICAgICAgIG9lX3J1bm1ha2UgJHtVQk9PVF9NQUNISU5FfQorICAgICAgICBvZV9ydW5tYWtlICR7VUJPT1RfTUFLRV9UQVJHRVR9CisgICAgZmkKKworfQorCitkb19pbnN0YWxsICgpIHsKKyAgICBpZiBbICJ4JHtVQk9PVF9DT05GSUd9IiAhPSAieCIgXQorICAgIHRoZW4KKyAgICAgICAgZm9yIGNvbmZpZyBpbiAke1VCT09UX01BQ0hJTkV9OyBkbworICAgICAgICAgICAgaT1gZXhwciAkaSArIDFgOworICAgICAgICAgICAgZm9yIHR5cGUgaW4gJHtVQk9PVF9DT05GSUd9OyBkbworICAgICAgICAgICAgICAgIGo9YGV4cHIgJGogKyAxYDsKKyAgICAgICAgICAgICAgICBpZiBbICRqIC1lcSAkaSBdCisgICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0vYm9vdAorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsICR7U30vJHtjb25maWd9L3UtYm9vdC0ke3R5cGV9LiR7VUJPT1RfU1VGRklYfSAke0R9L2Jvb3QvdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9TVUZGSVh9CisgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0gJHtEfS9ib290LyR7VUJPT1RfQklOQVJZfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0gJHtEfS9ib290LyR7VUJPT1RfQklOQVJZfQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgICB1bnNldCAgagorICAgICAgICBkb25lCisgICAgICAgIHVuc2V0ICBpCisgICAgZWxzZQorICAgICAgICBpbnN0YWxsIC1kICR7RH0vYm9vdAorICAgICAgICBpbnN0YWxsICR7U30vJHtVQk9PVF9CSU5BUll9ICR7RH0vYm9vdC8ke1VCT09UX0lNQUdFfQorICAgICAgICBsbiAtc2YgJHtVQk9PVF9JTUFHRX0gJHtEfS9ib290LyR7VUJPT1RfQklOQVJZfQorICAgIGZpCisKKyAgICBpZiBbICJ4JHtVQk9PVF9FTEZ9IiAhPSAieCIgXQorICAgIHRoZW4KKyAgICAgICAgaWYgWyAieCR7VUJPT1RfQ09ORklHfSIgIT0gIngiIF0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgZm9yIGNvbmZpZyBpbiAke1VCT09UX01BQ0hJTkV9OyBkbworICAgICAgICAgICAgICAgIGk9YGV4cHIgJGkgKyAxYDsKKyAgICAgICAgICAgICAgICBmb3IgdHlwZSBpbiAke1VCT09UX0NPTkZJR307IGRvCisgICAgICAgICAgICAgICAgICAgIGo9YGV4cHIgJGogKyAxYDsKKyAgICAgICAgICAgICAgICAgICAgaWYgWyAkaiAtZXEgJGkgXQorICAgICAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsICR7U30vJHtjb25maWd9LyR7VUJPT1RfRUxGfSAke0R9L2Jvb3QvdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTEZfU1VGRklYfQorICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfRUxGX1NVRkZJWH0gJHtEfS9ib290LyR7VUJPT1RfQklOQVJZfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTEZfU1VGRklYfSAke0R9L2Jvb3QvJHtVQk9PVF9CSU5BUll9CisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgIHVuc2V0IGoKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIHVuc2V0IGkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW5zdGFsbCAke1N9LyR7VUJPT1RfRUxGfSAke0R9L2Jvb3QvJHtVQk9PVF9FTEZfSU1BR0V9CisgICAgICAgICAgICBsbiAtc2YgJHtVQk9PVF9FTEZfSU1BR0V9ICR7RH0vYm9vdC8ke1VCT09UX0VMRl9CSU5BUll9CisgICAgICAgIGZpCisgICAgZmkKKworICAgIGlmIFsgLWUgJHtXT1JLRElSfS9md19lbnYuY29uZmlnIF0gOyB0aGVuCisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKyAgICAgICAgaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS9md19lbnYuY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L2Z3X2Vudi5jb25maWcKKyAgICBmaQorCisgICAgaWYgWyAieCR7U1BMX0JJTkFSWX0iICE9ICJ4IiBdCisgICAgdGhlbgorICAgICAgICBpZiBbICJ4JHtVQk9PVF9DT05GSUd9IiAhPSAieCIgXSAgIAorICAgICAgICB0aGVuCisgICAgICAgICAgICBmb3IgY29uZmlnIGluICR7VUJPT1RfTUFDSElORX07IGRvCisgICAgICAgICAgICAgICAgaT1gZXhwciAkaSArIDFgOworICAgICAgICAgICAgICAgIGZvciB0eXBlIGluICR7VUJPT1RfQ09ORklHfTsgZG8KKyAgICAgICAgICAgICAgICAgICAgaj1gZXhwciAkaiArIDFgOworICAgICAgICAgICAgICAgICAgICBpZiBbICRqIC1lcSAkaSBdCisgICAgICAgICAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsICR7U30vJHtjb25maWd9LyR7U1BMX0JJTkFSWX0gJHtEfS9ib290LyR7U1BMX0lNQUdFfS0ke3R5cGV9LSR7UFZ9LSR7UFJ9CisgICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmICR7U1BMX0lNQUdFfS0ke3R5cGV9LSR7UFZ9LSR7UFJ9ICR7RH0vYm9vdC8ke1NQTF9CSU5BUll9LSR7dHlwZX0KKyAgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgJHtTUExfSU1BR0V9LSR7dHlwZX0tJHtQVn0tJHtQUn0gJHtEfS9ib290LyR7U1BMX0JJTkFSWX0KKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgdW5zZXQgIGoKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIHVuc2V0ICBpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGluc3RhbGwgJHtTfS8ke1NQTF9CSU5BUll9ICR7RH0vYm9vdC8ke1NQTF9JTUFHRX0KKyAgICAgICAgICAgIGxuIC1zZiAke1NQTF9JTUFHRX0gJHtEfS9ib290LyR7U1BMX0JJTkFSWX0KKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgWyAieCR7VUJPT1RfRU5WfSIgIT0gIngiIF0KKyAgICB0aGVuCisgICAgICAgIGluc3RhbGwgJHtXT1JLRElSfS8ke1VCT09UX0VOVl9CSU5BUll9ICR7RH0vYm9vdC8ke1VCT09UX0VOVl9JTUFHRX0KKyAgICAgICAgbG4gLXNmICR7VUJPT1RfRU5WX0lNQUdFfSAke0R9L2Jvb3QvJHtVQk9PVF9FTlZfQklOQVJZfQorICAgIGZpCit9CisKK0ZJTEVTXyR7UE59ID0gIi9ib290ICR7c3lzY29uZmRpcn0iCisjIEVuc3VyZSB0aGUgc3BsaXQgZGVidWcgcGFydCBvZiBhbnkgZWxmIGZpbGVzIGFyZSBwdXQgaW50byBkYmcKK0ZJTEVTXyR7UE59LWRiZyArPSAiL2Jvb3QvLmRlYnVnIgorCitkb19kZXBsb3kgKCkgeworICAgIGlmIFsgIngke1VCT09UX0NPTkZJR30iICE9ICJ4IiBdCisgICAgdGhlbgorICAgICAgICBmb3IgY29uZmlnIGluICR7VUJPT1RfTUFDSElORX07IGRvCisgICAgICAgICAgICBpPWBleHByICRpICsgMWA7CisgICAgICAgICAgICBmb3IgdHlwZSBpbiAke1VCT09UX0NPTkZJR307IGRvCisgICAgICAgICAgICAgICAgaj1gZXhwciAkaiArIDFgOworICAgICAgICAgICAgICAgIGlmIFsgJGogLWVxICRpIF0KKyAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgLWQgJHtERVBMT1lESVJ9CisgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgJHtTfS8ke2NvbmZpZ30vdS1ib290LSR7dHlwZX0uJHtVQk9PVF9TVUZGSVh9ICR7REVQTE9ZRElSfS91LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0KKyAgICAgICAgICAgICAgICAgICAgY2QgJHtERVBMT1lESVJ9CisgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0gJHtVQk9PVF9TWU1MSU5LfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0gJHtVQk9PVF9TWU1MSU5LfQorICAgICAgICAgICAgICAgICAgICBsbiAtc2YgdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9TVUZGSVh9ICR7VUJPT1RfQklOQVJZfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0gJHtVQk9PVF9CSU5BUll9CisgICAgICAgICAgICAgICAgZmkgCisgICAgICAgICAgICBkb25lIAorICAgICAgICAgICAgdW5zZXQgIGoKKyAgICAgICAgZG9uZQorICAgICAgICB1bnNldCAgaQorICAgIGVsc2UKKyAgICAgICAgaW5zdGFsbCAtZCAke0RFUExPWURJUn0KKyAgICAgICAgaW5zdGFsbCAke1N9LyR7VUJPT1RfQklOQVJZfSAke0RFUExPWURJUn0vJHtVQk9PVF9JTUFHRX0KKyAgICAgICAgY2QgJHtERVBMT1lESVJ9CisgICAgICAgIHJtIC1mICR7VUJPT1RfQklOQVJZfSAke1VCT09UX1NZTUxJTkt9CisgICAgICAgIGxuIC1zZiAke1VCT09UX0lNQUdFfSAke1VCT09UX1NZTUxJTkt9CisgICAgICAgIGxuIC1zZiAke1VCT09UX0lNQUdFfSAke1VCT09UX0JJTkFSWX0KKyAgIGZpCisKKyAgICBpZiBbICJ4JHtVQk9PVF9FTEZ9IiAhPSAieCIgXQorICAgIHRoZW4KKyAgICAgICAgaWYgWyAieCR7VUJPT1RfQ09ORklHfSIgIT0gIngiIF0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgZm9yIGNvbmZpZyBpbiAke1VCT09UX01BQ0hJTkV9OyBkbworICAgICAgICAgICAgICAgIGk9YGV4cHIgJGkgKyAxYDsKKyAgICAgICAgICAgICAgICBmb3IgdHlwZSBpbiAke1VCT09UX0NPTkZJR307IGRvCisgICAgICAgICAgICAgICAgICAgIGo9YGV4cHIgJGogKyAxYDsKKyAgICAgICAgICAgICAgICAgICAgaWYgWyAkaiAtZXEgJGkgXQorICAgICAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsICR7U30vJHtjb25maWd9LyR7VUJPT1RfRUxGfSAke0RFUExPWURJUn0vdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTEZfU1VGRklYfQorICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfRUxGX1NVRkZJWH0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRUxGX0JJTkFSWX0tJHt0eXBlfQorICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfRUxGX1NVRkZJWH0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRUxGX0JJTkFSWX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX0VMRl9TVUZGSVh9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VMRl9TWU1MSU5LfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTEZfU1VGRklYfSAke0RFUExPWURJUn0vJHtVQk9PVF9FTEZfU1lNTElOS30KKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgdW5zZXQgagorICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgdW5zZXQgaQorICAgICAgICBlbHNlCisgICAgICAgICAgICBpbnN0YWxsICR7U30vJHtVQk9PVF9FTEZ9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VMRl9JTUFHRX0KKyAgICAgICAgICAgIGxuIC1zZiAke1VCT09UX0VMRl9JTUFHRX0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRUxGX0JJTkFSWX0KKyAgICAgICAgICAgIGxuIC1zZiAke1VCT09UX0VMRl9JTUFHRX0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRUxGX1NZTUxJTkt9CisgICAgICAgIGZpCisgICAgZmkKKworCisgICAgIGlmIFsgIngke1NQTF9CSU5BUll9IiAhPSAieCIgXQorICAgICB0aGVuCisgICAgICAgICBpZiBbICJ4JHtVQk9PVF9DT05GSUd9IiAhPSAieCIgXSAgIAorICAgICAgICAgdGhlbgorICAgICAgICAgICAgIGZvciBjb25maWcgaW4gJHtVQk9PVF9NQUNISU5FfTsgZG8KKyAgICAgICAgICAgICAgICAgaT1gZXhwciAkaSArIDFgOworICAgICAgICAgICAgICAgICBmb3IgdHlwZSBpbiAke1VCT09UX0NPTkZJR307IGRvCisgICAgICAgICAgICAgICAgICAgICBqPWBleHByICRqICsgMWA7CisgICAgICAgICAgICAgICAgICAgICBpZiBbICRqIC1lcSAkaSBdCisgICAgICAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAke1N9LyR7Y29uZmlnfS8ke1NQTF9CSU5BUll9ICR7REVQTE9ZRElSfS8ke1NQTF9JTUFHRX0tJHt0eXBlfS0ke1BWfS0ke1BSfQorICAgICAgICAgICAgICAgICAgICAgICAgIHJtIC1mICR7REVQTE9ZRElSfS8ke1NQTF9CSU5BUll9ICR7REVQTE9ZRElSfS8ke1NQTF9TWU1MSU5LfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmICR7U1BMX0lNQUdFfS0ke3R5cGV9LSR7UFZ9LSR7UFJ9ICR7REVQTE9ZRElSfS8ke1NQTF9CSU5BUll9LSR7dHlwZX0KKyAgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgJHtTUExfSU1BR0V9LSR7dHlwZX0tJHtQVn0tJHtQUn0gJHtERVBMT1lESVJ9LyR7U1BMX0JJTkFSWX0KKyAgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgJHtTUExfSU1BR0V9LSR7dHlwZX0tJHtQVn0tJHtQUn0gJHtERVBMT1lESVJ9LyR7U1BMX1NZTUxJTkt9LSR7dHlwZX0KKyAgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgJHtTUExfSU1BR0V9LSR7dHlwZX0tJHtQVn0tJHtQUn0gJHtERVBMT1lESVJ9LyR7U1BMX1NZTUxJTkt9CisgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgIHVuc2V0ICBqCisgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgIHVuc2V0ICBpCisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5zdGFsbCAke1N9LyR7U1BMX0JJTkFSWX0gJHtERVBMT1lESVJ9LyR7U1BMX0lNQUdFfQorICAgICAgICAgICAgIHJtIC1mICR7REVQTE9ZRElSfS8ke1NQTF9CSU5BUll9ICR7REVQTE9ZRElSfS8ke1NQTF9TWU1MSU5LfQorICAgICAgICAgICAgIGxuIC1zZiAke1NQTF9JTUFHRX0gJHtERVBMT1lESVJ9LyR7U1BMX0JJTkFSWX0KKyAgICAgICAgICAgICBsbiAtc2YgJHtTUExfSU1BR0V9ICR7REVQTE9ZRElSfS8ke1NQTF9TWU1MSU5LfQorICAgICAgICAgZmkKKyAgICAgZmkKKworCisgICAgaWYgWyAieCR7VUJPT1RfRU5WfSIgIT0gIngiIF0KKyAgICB0aGVuCisgICAgICAgIGluc3RhbGwgJHtXT1JLRElSfS8ke1VCT09UX0VOVl9CSU5BUll9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VOVl9JTUFHRX0KKyAgICAgICAgcm0gLWYgJHtERVBMT1lESVJ9LyR7VUJPT1RfRU5WX0JJTkFSWX0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRU5WX1NZTUxJTkt9CisgICAgICAgIGxuIC1zZiAke1VCT09UX0VOVl9JTUFHRX0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRU5WX0JJTkFSWX0KKyAgICAgICAgbG4gLXNmICR7VUJPT1RfRU5WX0lNQUdFfSAke0RFUExPWURJUn0vJHtVQk9PVF9FTlZfU1lNTElOS30KKyAgICBmaQorfQorCithZGR0YXNrIGRlcGxveSBiZWZvcmUgZG9fYnVpbGQgYWZ0ZXIgZG9fY29tcGlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QvMDAwMS11LWJvb3QtbXBjODV4eC11LWJvb3QtLmxkcy1yZW1vdmUtX0dMT0JBTF9PRkZTRVRfVEFCLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QvMDAwMS11LWJvb3QtbXBjODV4eC11LWJvb3QtLmxkcy1yZW1vdmUtX0dMT0JBTF9PRkZTRVRfVEFCLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYmNkNDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC8wMDAxLXUtYm9vdC1tcGM4NXh4LXUtYm9vdC0ubGRzLXJlbW92ZS1fR0xPQkFMX09GRlNFVF9UQUIucGF0Y2gKQEAgLTAsMCArMSwxODQgQEAKK0Zyb20gOTI1OThlMTUxNWIyZWMzODUxYWYxZjA2NDA3NWQwNDU3ZjAxMjcyZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFpoZW5odWEgTHVvIDx6aGVuaHVhLmx1b0BmcmVlc2NhbGUuY29tPgorRGF0ZTogTW9uLCA5IEZlYiAyMDE1IDE4OjMzOjU2ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHBvd2VycGMvY3B1LyovdS1ib290Ki5sZHM6IHJlbW92ZSBfR0xPQkFMX09GRlNFVF9UQUJMRV8KKyBkZWZpbml0aW9uCitPcmdhbml6YXRpb246IE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorCitJbiBiaW51dGlscy0yLjI1LCB0aGUgX0dMT0JBTF9PRkZTRVRfVEFCTEVfIHN5bWJvbHMgZGVmaW5lZCBieSBQUk9WSURFIGluCit1LWJvb3QubGRzIG92ZXJyaWRlcyB0aGUgbGlua2VyIGJ1aWx0LWluIHN5bWJvbHMKKyhodHRwczovL3NvdXJjZXdhcmUub3JnL2dpdC9naXR3ZWIuY2dpP3A9YmludXRpbHMtZ2RiLmdpdDthPWNvbW1pdGRpZmY7aD1iODkzMzk3YTRiMTMxNjYxMGY0OTgxOTM0NDgxNzcxNWU0MzA1ZGU5KSwKK3NvIHRoZSBsaW5rZXIgaXMgdHJlYXRpbmcgX0dMT0JBTF9PRkZTRVRfVEFCTEVfIGFzIGEgZGVmaW5pdGlvbiBpbnRvIHRoZSAucmVsb2Mgc2VjdGlvbi4KKworVG8gYWxpZ24gd2l0aCB0aGUgY2hhbmdlIG9mIGJpbnV0aWxzLTIuMjUsIHRoZSBfR0xPQkFMX09GRlNFVF9UQUJMRV8gc3ltYm9sCitzaG91bGQgbm90IGJlIGRlZmluZWQgaW4gc2VjdGlvbnMsIGFuZCB0aGUgc3ltYm9scyBpbiBsaW5rZXIgZ2VuZXJhdGVkIC5nb3QKK3NlY3Rpb24gc2hvdWxkIGJlIHVzZWQoaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9tbC9iaW51dGlscy8yMDA4LTA5L21zZzAwMTIyLmh0bWwpLgorCitGaXhlZCB0aGUgZm9sbG93aW5nIGJ1aWxkIGVycm9ycyB3aXRoIGJpbnV0aWxzLTIuMjU6Cit8IHBvd2VycGMtcG9reS1saW51eC1nbnVzcGUtbGQuYmZkOiBfR0xPQkFMX09GRlNFVF9UQUJMRV8gbm90IGRlZmluZWQgaW4gbGlua2VyIGNyZWF0ZWQgLmdvdAorCitTaWduZWQtb2ZmLWJ5OiBaaGVuaHVhIEx1byA8emhlbmh1YS5sdW9AZnJlZXNjYWxlLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBhcmNoL3Bvd2VycGMvY3B1L21wYzUxMngvdS1ib290LmxkcyAgICAgICAgICB8IDEgLQorIGFyY2gvcG93ZXJwYy9jcHUvbXBjNXh4L3UtYm9vdC5sZHMgICAgICAgICAgIHwgMSAtCisgYXJjaC9wb3dlcnBjL2NwdS9tcGM1eHh4L3UtYm9vdC5sZHMgICAgICAgICAgfCAxIC0KKyBhcmNoL3Bvd2VycGMvY3B1L21wYzgyNjAvdS1ib290LmxkcyAgICAgICAgICB8IDEgLQorIGFyY2gvcG93ZXJwYy9jcHUvbXBjODN4eC91LWJvb3Qtc3BsLmxkcyAgICAgIHwgMSAtCisgYXJjaC9wb3dlcnBjL2NwdS9tcGM4M3h4L3UtYm9vdC5sZHMgICAgICAgICAgfCAxIC0KKyBhcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LW5hbmQubGRzICAgICB8IDEgLQorIGFyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZF9zcGwubGRzIHwgMSAtCisgYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1zcGwubGRzICAgICAgfCAxIC0KKyBhcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LmxkcyAgICAgICAgICB8IDEgLQorIGFyY2gvcG93ZXJwYy9jcHUvbXBjODZ4eC91LWJvb3QubGRzICAgICAgICAgIHwgMSAtCisgYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvdS1ib290LmxkcyAgICAgICAgICAgfCAxIC0KKyAxMiBmaWxlcyBjaGFuZ2VkLCAxMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjNTEyeC91LWJvb3QubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM1MTJ4L3UtYm9vdC5sZHMKK2luZGV4IDk2NThiMjEuLmIzMmY3NGUgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzUxMngvdS1ib290LmxkcworKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM1MTJ4L3UtYm9vdC5sZHMKK0BAIC0yNCw3ICsyNCw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgICAgKiguZml4dXApCitkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM1eHgvdS1ib290LmxkcyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjNXh4L3UtYm9vdC5sZHMKK2luZGV4IDcxOTg0NjUuLjZhNTM1NzEgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzV4eC91LWJvb3QubGRzCisrKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzV4eC91LWJvb3QubGRzCitAQCAtMzMsNyArMzMsNiBAQCBTRUNUSU9OUworICAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmdvdDIpKQorICAgICBLRUVQKCooLmdvdCkpCistICAgIFBST1ZJREUoX0dMT0JBTF9PRkZTRVRfVEFCTEVfID0gLiArIDQpOworICAgICBfRklYVVBfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5maXh1cCkpCisgICB9CitkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM1eHh4L3UtYm9vdC5sZHMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzV4eHgvdS1ib290LmxkcworaW5kZXggY2Q5ZTIzZi4uYWE4MGQzZCAxMDA2NDQKKy0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjNXh4eC91LWJvb3QubGRzCisrKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzV4eHgvdS1ib290LmxkcworQEAgLTI4LDcgKzI4LDYgQEAgU0VDVElPTlMKKyAgICAgX0dPVDJfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5nb3QyKSkKKyAgICAgS0VFUCgqKC5nb3QpKQorLSAgICBQUk9WSURFKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyA9IC4gKyA0KTsKKyAgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZml4dXApKQorICAgfQorZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODI2MC91LWJvb3QubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4MjYwL3UtYm9vdC5sZHMKK2luZGV4IDUwY2JmODUuLjQ2OWZjMjkgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzgyNjAvdS1ib290LmxkcworKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4MjYwL3UtYm9vdC5sZHMKK0BAIC0yNyw3ICsyNyw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgIH0KK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvdS1ib290LXNwbC5sZHMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvdS1ib290LXNwbC5sZHMKK2luZGV4IDc3NDc3MmIuLjQxMDFlYWYgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvdS1ib290LXNwbC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODN4eC91LWJvb3Qtc3BsLmxkcworQEAgLTI0LDcgKzI0LDYgQEAgU0VDVElPTlMKKyAJCV9HT1QyX1RBQkxFXyA9IC47CisgCQlLRUVQKCooLmdvdDIpKQorIAkJS0VFUCgqKC5nb3QpKQorLQkJUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgCX0KKyAJX19nb3QyX2VudHJpZXMgPSAoKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4gMikgLSAxOworIAorZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODN4eC91LWJvb3QubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4M3h4L3UtYm9vdC5sZHMKK2luZGV4IDNjMTc3ZmEuLmRiZDhiYmUgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvdS1ib290LmxkcworKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4M3h4L3UtYm9vdC5sZHMKK0BAIC0yNiw3ICsyNiw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgIH0KK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LW5hbmQubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1uYW5kLmxkcworaW5kZXggZjkzM2IyMS4uMDM5OWY5MyAxMDA2NDQKKy0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZC5sZHMKK0BAIC00NCw3ICs0NCw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgIH0KK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LW5hbmRfc3BsLmxkcyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZF9zcGwubGRzCitpbmRleCBiODNjNTUzLi5mMDQ0NTY0IDEwMDY0NAorLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1uYW5kX3NwbC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZF9zcGwubGRzCitAQCAtMjIsNyArMjIsNiBAQCBTRUNUSU9OUworIAkJX0dPVDJfVEFCTEVfID0gLjsKKyAJCUtFRVAoKiguZ290MikpCisgCQlLRUVQKCooLmdvdCkpCistCQlQUk9WSURFKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyA9IC4gKyA0KTsKKyAJCV9GSVhVUF9UQUJMRV8gPSAuOworIAkJS0VFUCgqKC5maXh1cCkpCisgCX0KK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LXNwbC5sZHMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LXNwbC5sZHMKK2luZGV4IDVhZTdiM2UuLjg4OWE0YzIgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LXNwbC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3Qtc3BsLmxkcworQEAgLTI5LDcgKzI5LDYgQEAgU0VDVElPTlMKKyAJCV9HT1QyX1RBQkxFXyA9IC47CisgCQlLRUVQKCooLmdvdDIpKQorIAkJS0VFUCgqKC5nb3QpKQorLQkJUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgCQlfRklYVVBfVEFCTEVfID0gLjsKKyAJCUtFRVAoKiguZml4dXApKQorIAl9CitkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC5sZHMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LmxkcworaW5kZXggMmNmMGIyNS4uZjE1ZWFmMyAxMDA2NDQKKy0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QubGRzCisrKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LmxkcworQEAgLTUwLDcgKzUwLDYgQEAgU0VDVElPTlMKKyAgICAgX0dPVDJfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5nb3QyKSkKKyAgICAgS0VFUCgqKC5nb3QpKQorLSAgICBQUk9WSURFKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyA9IC4gKyA0KTsKKyAgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZml4dXApKQorICAgfQorZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODZ4eC91LWJvb3QubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4Nnh4L3UtYm9vdC5sZHMKK2luZGV4IDU4NDY3YzIuLjZjNDhmNDAgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg2eHgvdS1ib290LmxkcworKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4Nnh4L3UtYm9vdC5sZHMKK0BAIC0zMiw3ICszMiw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgIH0KK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC91LWJvb3QubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvdS1ib290LmxkcworaW5kZXggMTk4MDUwOC4uNTVkZDRlMSAxMDA2NDQKKy0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4L3UtYm9vdC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4L3UtYm9vdC5sZHMKK0BAIC00Niw3ICs0Niw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgIH0KKy0tIAorMi40LjYKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3RfMjAxNS4wNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290XzIwMTUuMDcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc0NmMzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290XzIwMTUuMDcuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSB1LWJvb3QuaW5jCisKK0RFUEVORFMgKz0gImR0Yy1uYXRpdmUiCisKKyMgVGhpcyByZXZpc2lvbiBjb3JyZXNwb25kcyB0byB0aGUgdGFnICJ2MjAxNS4wNyIKKyMgV2UgdXNlIHRoZSByZXZpc2lvbiBpbiBvcmRlciB0byBhdm9pZCBoYXZpbmcgdG8gZmV0Y2ggaXQgZnJvbSB0aGUKKyMgcmVwbyBkdXJpbmcgcGFyc2UKK1NSQ1JFViA9ICIzMzcxMWJkZDRhNGRjZTk0MmZiNWFlODVhNjg4OTlhODM1N2JkZDk0IgorCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS11LWJvb3QtbXBjODV4eC11LWJvb3QtLmxkcy1yZW1vdmUtX0dMT0JBTF9PRkZTRVRfVEFCLnBhdGNoIgorCitQViA9ICJ2MjAxNS4wNytnaXQke1NSQ1BWfSIKKworRVhUUkFfT0VNQUtFX2FwcGVuZCA9ICIgS0NGTEFHUz0tZmdudTg5LWlubGluZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2Jpbml0L3VzYmluaXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNiaW5pdC91c2Jpbml0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYTQ0YjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNiaW5pdC91c2Jpbml0LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiSW5pdHNjcmlwdCBmb3IgZW5hYmxpbmcgVVNCIGdhZGdldCBFdGhlcm5ldCIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7V09SS0RJUn0vQ09QWUlORy5HUEw7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCitQUiA9ICJyMyIKKworU1JDX1VSSSA9ICJmaWxlOi8vdXNiLWdldGhlciBcCisgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkdQTCIKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKyAgICBpbnN0YWxsIHVzYi1nZXRoZXIgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCit9CisKK2luaGVyaXQgdXBkYXRlLXJjLmQgYWxsYXJjaAorCitJTklUU0NSSVBUX05BTUUgPSAidXNiLWdldGhlciIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDk5IDUgMiAuIHN0b3AgMjAgMCAxIDYgLiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2Jpbml0L3VzYmluaXQvQ09QWUlORy5HUEwgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNiaW5pdC91c2Jpbml0L0NPUFlJTkcuR1BMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MTE5MDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNiaW5pdC91c2Jpbml0L0NPUFlJTkcuR1BMCkBAIC0wLDAgKzEsMzM5IEBACisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2Jpbml0L3VzYmluaXQvdXNiLWdldGhlciBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2Jpbml0L3VzYmluaXQvdXNiLWdldGhlcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lODBhMGJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3VzYmluaXQvdXNiaW5pdC91c2ItZ2V0aGVyCkBAIC0wLDAgKzEsMjMgQEAKKyMhIC9iaW4vc2gKKyMKKyMgdXNiLWV0aGVyIAlTdGFydCB1cCB0aGUgZ2FkZ2V0IHVzYiBldGhlcm5ldCBpbnRlcmZhY2UuCisjCisKK2Nhc2UgIiQxIiBpbgorCXN0YXJ0fCIiKQorCQl0ZXN0ICIkVkVSQk9TRSIgIT0gbm8gJiYgZWNobyAiSW5pdGlhbGl6aW5nIGdfZXRoZXIgZ2FkZ2V0Li4uIgorCQltb2Rwcm9iZSBnX2V0aGVyCisJCWlmdXAgdXNiMAorCQk7OworCXN0b3ApCisJCXRlc3QgIiRWRVJCT1NFIiAhPSBubyAmJiBlY2hvICJEaXNhYmxpbmcgZ19ldGhlci4uLiIKKwkJaWZkb3duIHVzYjAKKwkJcm1tb2QgZ19ldGhlcgorCQk7OworCSopCisJCWVjaG8gIlVzYWdlOiB1c2ItZXRoZXIge3N0YXJ0fHN0b3B9IiA+JjIKKwkJZXhpdCAxCisJCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzLTAwOC9pY29udi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy0wMDgvaWNvbnYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ1NTU2NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy0wMDgvaWNvbnYucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGRldGVjdGluZyBpY29udiBzdXBwb3J0IHVzaW5nIGF1dG90b29scwordWNsaWJjIGRvZXMgbm90IGhhdmUgaWNvbnYgaW1wbGVtZW50YXRpb24gaW5zaWRlIGxpYmMgbGlrZSBnbGliYywgdGhlcmVmb3JlCit0aGUgZXhpc3RpbmcgY2hlY2tzIHdlcmUgbm90IHN1ZmZpY2llbnQsIGl0IHdvcmtlZCBmb3IgZ2xpYmMgYnV0IG5vdCBmb3IKK3VjbGliYy4gVGhlIG5ldyBwYXRjaCBwb3J0YWJseSBkZXRlY3RzIHRoZSBpY29udiBzdXBwb3J0IGFuZCBhZGRzIHRoZQorbGliaWNvbnYgdG8gbGlua2VyIGNtZGxpbmUKKworVGhpcyBwYXRjaCBzaG91bGQgYmUgc3VibWl0dGVkIHVwc3RyZWFtIHRvbworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IHVzYnV0aWxzLTAwOC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1c2J1dGlscy0wMDgub3JpZy9jb25maWd1cmUuYWMKKysrKyB1c2J1dGlscy0wMDgvY29uZmlndXJlLmFjCitAQCAtMTAsNyArMTAsOSBAQCBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyBBQ19TWVNfTEFSR0VGSUxFCisgCisgQUNfQ0hFQ0tfSEVBREVSUyhbYnl0ZXN3YXAuaF0pCistQUNfQ0hFQ0tfRlVOQ1MoW25sX2xhbmdpbmZvIGljb252XSkKKysKKytBTV9HTlVfR0VUVEVYVAorK0FNX0lDT05WCisgCisgUEtHX0NIRUNLX01PRFVMRVMoTElCVVNCLCBsaWJ1c2ItMS4wID49IDEuMC4wKQorIAorSW5kZXg6IHVzYnV0aWxzLTAwOC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVzYnV0aWxzLTAwOC5vcmlnL01ha2VmaWxlLmFtCisrKysgdXNidXRpbHMtMDA4L01ha2VmaWxlLmFtCitAQCAtMjksNyArMjksOCBAQCBsc3VzYl9DUFBGTEFHUyA9IFwKKyAKKyBsc3VzYl9MREFERCA9IFwKKyAJJChMSUJVU0JfTElCUykgXAorLQkkKFVERVZfTElCUykKKysJJChVREVWX0xJQlMpIFwKKysJJChMSUJJQ09OVikKKyAKKyBtYW5fTUFOUyA9IFwKKyAJbHN1c2IuOAlcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHMvRml4LU5VTEwtcG9pbnRlci1jcmFzaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy9GaXgtTlVMTC1wb2ludGVyLWNyYXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZmRjNTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHMvRml4LU5VTEwtcG9pbnRlci1jcmFzaC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGaXggTlVMTCBwb2ludGVyIGNyYXNoLgorCitCZWZvcmUgdXNlIHVzYmJ1c2xpc3QsIHdlIHNob3VsZCBjaGVjayBpZiBpdCBpcyB2YWxpZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBsc3VzYi10LmMgfCAgICA0ICsrKysKKyAxIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xzdXNiLXQuYyBiL2xzdXNiLXQuYworaW5kZXggZjYwNDE1NS4uNTgzYTQ2YSAxMDA2NDQKKy0tLSBhL2xzdXNiLXQuYworKysrIGIvbHN1c2ItdC5jCitAQCAtNjQzLDYgKzY0MywxMCBAQCBzdGF0aWMgdm9pZCBzb3J0X2J1c3Nlcyh2b2lkKQorIAkvKiBuZWVkIHRvIHJldmVyc2Ugc29ydCBidXMgbnVtYmVycyAqLworIAlzdHJ1Y3QgdXNiYnVzbm9kZSAqdCwgKnAsICoqcHA7CisgCWludCBzd2FwcGVkOworKworKwlpZiAoIXVzYmJ1c2xpc3QpCisrCQlyZXR1cm47CisrCisgCWRvIHsKKyAJCXAgPSB1c2JidXNsaXN0OworIAkJcHAgPSAmdXNiYnVzbGlzdDsKKy0tIAorMS43LjQuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHMvaWNvbnYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHMvaWNvbnYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU1NzMzNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy9pY29udi5wYXRjaApAQCAtMCwwICsxLDQwIEBACitUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZGV0ZWN0aW5nIGljb252IHN1cHBvcnQgdXNpbmcgYXV0b3Rvb2xzCit1Y2xpYmMgZG9lcyBub3QgaGF2ZSBpY29udiBpbXBsZW1lbnRhdGlvbiBpbnNpZGUgbGliYyBsaWtlIGdsaWJjLCB0aGVyZWZvcmUKK3RoZSBleGlzdGluZyBjaGVja3Mgd2VyZSBub3Qgc3VmZmljaWVudCwgaXQgd29ya2VkIGZvciBnbGliYyBidXQgbm90IGZvcgordWNsaWJjLiBUaGUgbmV3IHBhdGNoIHBvcnRhYmx5IGRldGVjdHMgdGhlIGljb252IHN1cHBvcnQgYW5kIGFkZHMgdGhlCitsaWJpY29udiB0byBsaW5rZXIgY21kbGluZQorCitUaGlzIHBhdGNoIHNob3VsZCBiZSBzdWJtaXR0ZWQgdXBzdHJlYW0gdG9vCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogdXNidXRpbHMtMDA3L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVzYnV0aWxzLTAwNy5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHVzYnV0aWxzLTAwNy9jb25maWd1cmUuYWMKK0BAIC0xMCw3ICsxMCw5IEBAIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUworIEFDX1NZU19MQVJHRUZJTEUKKyAKKyBBQ19DSEVDS19IRUFERVJTKFtieXRlc3dhcC5oXSkKKy1BQ19DSEVDS19GVU5DUyhbbmxfbGFuZ2luZm8gaWNvbnZdKQorKworK0FNX0dOVV9HRVRURVhUCisrQU1fSUNPTlYKKyAKKyBBQ19BUkdfRU5BQkxFKHpsaWIsCisgCUFTX0hFTFBfU1RSSU5HKC0tZGlzYWJsZS16bGliLGRpc2FibGUgc3VwcG9ydCBmb3IgemxpYikpCitJbmRleDogdXNidXRpbHMtMDA3L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdXNidXRpbHMtMDA3Lm9yaWcvTWFrZWZpbGUuYW0KKysrKyB1c2J1dGlscy0wMDcvTWFrZWZpbGUuYW0KK0BAIC0yNyw3ICsyNyw3IEBAIGxzdXNiX0NQUEZMQUdTID0gXAorIAktRERBVEFESVI9XCIkKGRhdGFkaXIpXCIKKyAKKyBsc3VzYl9MREFERCA9IFwKKy0JJChMSUJVU0JfTElCUykKKysJJChMSUJVU0JfTElCUykgJChMSUJJQ09OVikKKyAKKyBpZiBIQVZFX1pMSUIKKyBsc3VzYl9DUFBGTEFHUyArPSAtREhBVkVfTElCWgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzL3VzYi1kZXZpY2VzLWF2b2lkLWRlcGVuZGVuY3ktb24tYmFzaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy91c2ItZGV2aWNlcy1hdm9pZC1kZXBlbmRlbmN5LW9uLWJhc2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZiMjQxZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy91c2ItZGV2aWNlcy1hdm9pZC1kZXBlbmRlbmN5LW9uLWJhc2gucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSAzMzNkNWZiYmMwMzQ4MWYxYWEyMjJiZDY4YzI2MDlkYjE2OGFlM2UwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUaHUsIDI2IEp1bCAyMDEyIDEwOjM3OjMyICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHVzYi1kZXZpY2VzOiBhdm9pZCBkZXBlbmRlbmN5IG9uIGJhc2gKKworQnkgdmlydHVlIG9mIGhhdmluZyAjIS9iaW4vYmFzaCB0aGlzIHNjcmlwdCBkZWNsYXJlZCB0aGF0IGl0IHJlcXVpcmVzCitiYXNoLCBob3dldmVyIG1hbnVhbCBleGFtaW5hdGlvbiwgY2hlY2tiYXNoaXNtcyBhbmQgdGVzdHMgd2l0aCBkYXNoCithbmQgYnVzeWJveCBzaG93IHRoYXQgaXQgZG9lc24ndCBjb250YWluIGFueSBiYXNoaXNtcywgc28gY2hhbmdlIHRoZQoraGVhZGVyIHRvIGF2b2lkIHRoZSBkZXBlbmRlbmN5LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyB1c2ItZGV2aWNlcyB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3VzYi1kZXZpY2VzIGIvdXNiLWRldmljZXMKK2luZGV4IGIyMDUyZTIuLjE0YTUzNTggMTAwNzU1CistLS0gYS91c2ItZGV2aWNlcworKysrIGIvdXNiLWRldmljZXMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgIyBDb3B5cmlnaHQ6IDIwMDkgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KKyAjICAgICAgICAgICAgMjAwOSBSYW5keSBEdW5sYXAgPHJkdW5sYXBAeGVub3RpbWUubmV0PgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlsc18wMDcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHNfMDA3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5M2IyYmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHNfMDA3LmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiSG9zdCBzaWRlIFVTQiBjb25zb2xlIHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIkNvbnRhaW5zIHRoZSBsc3VzYiB1dGlsaXR5IGZvciBpbnNwZWN0aW5nIHRoZSBkZXZpY2VzIGNvbm5lY3RlZCB0byB0aGUgVVNCIGJ1cy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmciCitTRUNUSU9OID0gImJhc2UiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK0RFUEVORFMgPSAibGlidXNiIHpsaWIgdmlydHVhbC9saWJpY29udiIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzL3VzYi91c2J1dGlscy91c2J1dGlscy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vdXNiLWRldmljZXMtYXZvaWQtZGVwZW5kZW5jeS1vbi1iYXNoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0ZpeC1OVUxMLXBvaW50ZXItY3Jhc2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaWNvbnYucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImJlNmM0MjI5NGJlNWM5NDBmMjA4MTkwZDM0NzlkNTBjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU2NWMyMzRjYWRmN2M4MWI2YjE1NjdjNDQwZTNiOWIzMWI0NGY1MWMyN2RmM2U0NTc0MWI4ODg0OGQ4YjM3ZDMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgV2Ugb25seSBuZWVkIHRoZSBjb21wcmVzc2VkIGNvcHksIHJlbW92ZSB0aGUgdW5jb21wcmVzc2VkIHZlcnNpb24KKwlybSAtZiAke0R9JHtkYXRhZGlyfS91c2IuaWRzCit9CisKK1BBQ0tBR0VTICs9ICIke1BOfS1pZHMiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vcGtnY29uZmlnIgorRklMRVNfJHtQTn0taWRzID0gIiR7ZGF0YWRpcn0vdXNiKiIKKworUkRFUEVORFNfJHtQTn0gPSAiJHtQTn0taWRzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzXzAwOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlsc18wMDguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYyZDhkNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlsc18wMDguYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJIb3N0IHNpZGUgVVNCIGNvbnNvbGUgdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiQ29udGFpbnMgdGhlIGxzdXNiIHV0aWxpdHkgZm9yIGluc3BlY3RpbmcgdGhlIGRldmljZXMgY29ubmVjdGVkIHRvIHRoZSBVU0IgYnVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGludXgtdXNiLm9yZyIKK1NFQ1RJT04gPSAiYmFzZSIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKKworREVQRU5EUyA9ICJsaWJ1c2IgemxpYiB2aXJ0dWFsL2xpYmljb252IHN5c3RlbWQiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC91dGlscy91c2IvdXNidXRpbHMvdXNidXRpbHMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3VzYi1kZXZpY2VzLWF2b2lkLWRlcGVuZGVuY3ktb24tYmFzaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9GaXgtTlVMTC1wb2ludGVyLWNyYXNoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ljb252LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjYjIwMTQ4YzJlNzg0NTc3ZTkyNGE3YjRjNTYwYzhmYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2ZDVmMTZjMjk2MWRmMzdlMjJlNDkyYzczNmEzZTE2MmE4ZmRlMjQ0ODBmMjNhNDBkODVmNzlhZjgwZDNmZTk1IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgVGhpcyB2ZXJzaW9uIG9mIHVzYnV0aWxzIHJlbGllcyBvbiB0aGUgdWRldiBmcm9tIHN5c3RlbWQsIHNvIHVubGVzcyAKKyMgd2UgY2FuIGRlY291cGxlIHVkZXYgZnJvbSBzeXN0ZW0sIHdlIHJlcXVpcmUgc3lzdGVtZCBmb3Igbm93LgorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gInN5c3RlbWQiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS9wa2djb25maWciCisKK1JERVBFTkRTXyR7UE59ID0gImxpYnVkZXYiCitSREVQRU5EU18ke1BOfS1wdGVzdCA9ICJsaWJib29zdC1zeXN0ZW0gbGliYm9vc3QtdGhyZWFkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC9VcGRhdGUteDg2ZW11LWZyb20tWC5vcmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL1VwZGF0ZS14ODZlbXUtZnJvbS1YLm9yZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDllMmEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC9VcGRhdGUteDg2ZW11LWZyb20tWC5vcmcucGF0Y2gKQEAgLTAsMCArMSwyMTc2NiBAQAorRnJvbSAxYTQxMGFlNThmMjhlZWFiMzJmYTg3NjI2Y2ZkNWE2NjNiYTMzYzUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQmVybmhhcmQgV2FsbGUgPGJlcm5oYXJkQGJ3YWxsZS5kZT4KK0RhdGU6IFR1ZSwgMTMgTWF5IDIwMTQgMjM6NDA6NTYgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIFVwZGF0ZSB4ODZlbXUgZnJvbSBYLm9yZworCitUaGlzIGNvbW1pdCB1cGRhdGVzIHRoZSB4ODZlbXUgY29weSBmcm9tIFgub3JnIHRhcmJhbGwKKyhmdHA6Ly9taXJyb3IuY3NjbHViLnV3YXRlcmxvby5jYS94Lm9yZy9jdXJyZW50L3NyYy94c2VydmVyL3hvcmctc2VydmVyLTEuMTIuMi50YXIuYnoyKS4KKworVGhpcyBmaXhlcyBhIGNvbXBhdGliaWxpdHkgaXNzdWUgYmV0d2VlbiB2ODZkIGFuZCBTZWFCSU9TIFZHQSBCSU9TIHdoZXJlCit0aGUgbGVhbCBpbnN0cnVjdGlvbiBpcyBub3QgZGVjb2RlZCBwcm9wZXJseS4gUmVhZCB0aGUKK2h0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmNvbXAuZW11bGF0b3JzLnFlbXUvMjcxODA2IHRocmVhZCBmb3IgbW9yZQorZGV0YWlscy4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBCZXJuaGFyZCBXYWxsZSA8YmVybmhhcmRAYndhbGxlLmRlPgorLS0tCisgbGlicy94ODZlbXUvTElDRU5TRSAgICAgICAgICAgICAgIHwgICAxNyAtCisgbGlicy94ODZlbXUvZGVidWcuYyAgICAgICAgICAgICAgIHwgIDUwOSArKystLS0KKyBsaWJzL3g4NmVtdS9kZWNvZGUuYyAgICAgICAgICAgICAgfCAxMDY5ICsrKysrKy0tLS0tLQorIGxpYnMveDg2ZW11L2ZwdS5jICAgICAgICAgICAgICAgICB8ICA0NjMgKysrLS0tCisgbGlicy94ODZlbXUvb3BzLmMgICAgICAgICAgICAgICAgIHwgMjk0MCArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KKyBsaWJzL3g4NmVtdS9vcHMyLmMgICAgICAgICAgICAgICAgfCAxOTI5ICsrKysrKysrKysrLS0tLS0tLS0tLS0KKyBsaWJzL3g4NmVtdS9wcmltX29wcy5jICAgICAgICAgICAgfCAzMjE5ICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0KKyBsaWJzL3g4NmVtdS9zeXMuYyAgICAgICAgICAgICAgICAgfCAgNTgzICsrKy0tLS0KKyBsaWJzL3g4NmVtdS92YWxpZGF0ZS5jICAgICAgICAgICAgfCAgIDUyICstCisgbGlicy94ODZlbXUveDg2ZW11LmggICAgICAgICAgICAgIHwgICA3NSArLQorIGxpYnMveDg2ZW11L3g4NmVtdS9kZWJ1Zy5oICAgICAgICB8ICAxNjMgKy0KKyBsaWJzL3g4NmVtdS94ODZlbXUvZGVjb2RlLmggICAgICAgfCAgIDU3ICstCisgbGlicy94ODZlbXUveDg2ZW11L2ZwdS5oICAgICAgICAgIHwgICAyMyArLQorIGxpYnMveDg2ZW11L3g4NmVtdS9mcHVfcmVncy5oICAgICB8ICAgNDQgKy0KKyBsaWJzL3g4NmVtdS94ODZlbXUvb3BzLmggICAgICAgICAgfCAgICA2ICstCisgbGlicy94ODZlbXUveDg2ZW11L3ByaW1fYXNtLmggICAgIHwgIDI1MSArKy0KKyBsaWJzL3g4NmVtdS94ODZlbXUvcHJpbV9vcHMuaCAgICAgfCAgMTg4ICstLQorIGxpYnMveDg2ZW11L3g4NmVtdS9wcmltX3g4Nl9nY2MuaCB8ICAgNzcgKworIGxpYnMveDg2ZW11L3g4NmVtdS9yZWdzLmggICAgICAgICB8ICAxMDEgKy0KKyBsaWJzL3g4NmVtdS94ODZlbXUvdHlwZXMuaCAgICAgICAgfCAgIDUwICstCisgbGlicy94ODZlbXUveDg2ZW11L3g4NmVtdWkuaCAgICAgIHwgICAzNCArLQorIDIxIGZpbGVzIGNoYW5nZWQsIDYzNzkgaW5zZXJ0aW9ucygrKSwgNTQ3MSBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgbGlicy94ODZlbXUvTElDRU5TRQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzL3g4NmVtdS94ODZlbXUvcHJpbV94ODZfZ2NjLmgKKworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L0xJQ0VOU0UgYi9saWJzL3g4NmVtdS9MSUNFTlNFCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IGEzZWRlNGEuLjAwMDAwMDAKKy0tLSBhL2xpYnMveDg2ZW11L0xJQ0VOU0UKKysrKyAvZGV2L251bGwKK0BAIC0xLDE3ICswLDAgQEAKKy0gICAgICAgICAgICAgICAgICAgICAgICAgTGljZW5zZSBpbmZvcm1hdGlvbgorLSAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tCistCistVGhlIHg4NmVtdSBsaWJyYXJ5IGlzIHVuZGVyIGEgQlNEIHN0eWxlIGxpY2Vuc2UsIGNvbWFwdGlibGUKKy13aXRoIHRoZSBYRnJlZTg2IGFuZCBYIGxpY2Vuc2VzIHVzZWQgYnkgWEZyZWU4Ni4gVGhlCistb3JpZ2luYWwgeDg2ZW11IGxpYnJhcmllcyB3ZXJlIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKy1MaWNlbnNlLiBEdWUgdG8gbGljZW5zZSBpbmNvbXBhdGliaWxpdGllcyBiZXR3ZWVuIHRoZSBHUEwKKy1hbmQgdGhlIFhGcmVlODYgbGljZW5zZSwgdGhlIG9yaWdpbmFsIGF1dGhvcnMgb2YgdGhlIGNvZGUKKy1kZWNpZGVkIHRvIGFsbG93IGEgbGljZW5zZSBjaGFuZ2UuIElmIHlvdSBoYXZlIHN1Ym1pdHRlZAorLWNvZGUgdG8gdGhlIG9yaWdpbmFsIHg4NmVtdSBwcm9qZWN0LCBhbmQgeW91IGRvbid0IGFncmVlCistd2l0aCB0aGUgbGljZW5zZSBjaGFuZ2UsIHBsZWFzZSBjb250YWN0IHVzIGFuZCBsZXQgeW91Cista25vdy4gWW91ciBjb2RlIHdpbGwgYmUgcmVtb3ZlZCB0byBjb21wbHkgd2l0aCB5b3VyIHdpc2hlcy4KKy0KKy1JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIGFib3V0IHRoaXMsIHBsZWFzZSBzZW5kIGVtYWlsIHRvCisteDg2ZW11QGxpbnV4bGFicy5jb20gb3IgS2VuZGFsbEJAc2NpdGVjaHNvZnQuY29tIGZvcgorLWNsYXJpZmljYXRpb24uCistCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUvZGVidWcuYyBiL2xpYnMveDg2ZW11L2RlYnVnLmMKK2luZGV4IDZmZDdmMTEuLjFhOGQxZDYgMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS9kZWJ1Zy5jCisrKysgYi9saWJzL3g4NmVtdS9kZWJ1Zy5jCitAQCAtMzgsNiArMzgsOCBAQAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCisgI2luY2x1ZGUgIng4NmVtdS94ODZlbXVpLmgiCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorICNpZm5kZWYgTk9fU1lTX0hFQURFUlMKKyAjaW5jbHVkZSA8c3RkYXJnLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorQEAgLTQ3LDQ2ICs0OSw1MSBAQAorIAorICNpZmRlZiBERUJVRworIAorLXN0YXRpYyB2b2lkICAgICBwcmludF9lbmNvZGVkX2J5dGVzICh1MTYgcywgdTE2IG8pOworLXN0YXRpYyB2b2lkICAgICBwcmludF9kZWNvZGVkX2luc3RydWN0aW9uICh2b2lkKTsKKy1zdGF0aWMgaW50ICAgICAgcGFyc2VfbGluZSAoY2hhciAqcywgaW50ICpwcywgaW50ICpuKTsKKy0gIAorK3N0YXRpYyB2b2lkIHByaW50X2VuY29kZWRfYnl0ZXModTE2IHMsIHUxNiBvKTsKKytzdGF0aWMgdm9pZCBwcmludF9kZWNvZGVkX2luc3RydWN0aW9uKHZvaWQpOworK3N0YXRpYyBpbnQgcGFyc2VfbGluZShjaGFyICpzLCBpbnQgKnBzLCBpbnQgKm4pOworKworIC8qIHNob3VsZCBsb29rIHNvbWV0aGluZyBsaWtlIGRlYnVnJ3Mgb3V0cHV0LiAqLworLXZvaWQgWDg2RU1VX3RyYWNlX3JlZ3MgKHZvaWQpCisrdm9pZAorK1g4NkVNVV90cmFjZV9yZWdzKHZvaWQpCisgeworLQlpZiAoREVCVUdfVFJBQ0UoKSkgeworLQkJeDg2ZW11X2R1bXBfcmVncygpOworKyAgICBpZiAoREVCVUdfVFJBQ0UoKSkgeworKyAgICAgICAgeDg2ZW11X2R1bXBfcmVncygpOworICAgICB9CistCWlmIChERUJVR19ERUNPREUoKSAmJiAhIERFQlVHX0RFQ09ERV9OT1BSSU5UKCkpIHsKKy0JCXByaW50aygiJTA0eDolMDR4ICIsTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKy0JCXByaW50X2VuY29kZWRfYnl0ZXMoIE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCk7CistCQlwcmludF9kZWNvZGVkX2luc3RydWN0aW9uKCk7CisrICAgIGlmIChERUJVR19ERUNPREUoKSAmJiAhREVCVUdfREVDT0RFX05PUFJJTlQoKSkgeworKyAgICAgICAgcHJpbnRrKCIlMDR4OiUwNHggIiwgTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKysgICAgICAgIHByaW50X2VuY29kZWRfYnl0ZXMoTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKysgICAgICAgIHByaW50X2RlY29kZWRfaW5zdHJ1Y3Rpb24oKTsKKyAgICAgfQorIH0KKyAKKy12b2lkIFg4NkVNVV90cmFjZV94cmVncyAodm9pZCkKKyt2b2lkCisrWDg2RU1VX3RyYWNlX3hyZWdzKHZvaWQpCisgeworLQlpZiAoREVCVUdfVFJBQ0UoKSkgeworLQkJeDg2ZW11X2R1bXBfeHJlZ3MoKTsKKysgICAgaWYgKERFQlVHX1RSQUNFKCkpIHsKKysgICAgICAgIHg4NmVtdV9kdW1wX3hyZWdzKCk7CisgICAgIH0KKyB9CisgCistdm9pZCB4ODZlbXVfanVzdF9kaXNhc3NlbWJsZSAodm9pZCkKKyt2b2lkCisreDg2ZW11X2p1c3RfZGlzYXNzZW1ibGUodm9pZCkKKyB7CisgICAgIC8qCisgICAgICAqIFRoaXMgcm91dGluZSBjYWxsZWQgaWYgdGhlIGZsYWcgREVCVUdfRElTQVNTRU1CTEUgaXMgc2V0IGtpbmQKKyAgICAgICogb2YgYSBoYWNrIQorICAgICAgKi8KKy0JcHJpbnRrKCIlMDR4OiUwNHggIixNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXApOworLQlwcmludF9lbmNvZGVkX2J5dGVzKCBNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXApOworLQlwcmludF9kZWNvZGVkX2luc3RydWN0aW9uKCk7CisrICAgIHByaW50aygiJTA0eDolMDR4ICIsIE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCk7CisrICAgIHByaW50X2VuY29kZWRfYnl0ZXMoTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKysgICAgcHJpbnRfZGVjb2RlZF9pbnN0cnVjdGlvbigpOworIH0KKyAKKy1zdGF0aWMgdm9pZCBkaXNhc3NlbWJsZV9mb3J3YXJkICh1MTYgc2VnLCB1MTYgb2ZmLCBpbnQgbikKKytzdGF0aWMgdm9pZAorK2Rpc2Fzc2VtYmxlX2ZvcndhcmQodTE2IHNlZywgdTE2IG9mZiwgaW50IG4pCisgeworLQlYODZFTVVfc3lzRW52IHRyZWdzOworLQlpbnQgaTsKKy0JdTggb3AxOworKyAgICBYODZFTVVfc3lzRW52IHRyZWdzOworKyAgICBpbnQgaTsKKysgICAgdTggb3AxOworKworICAgICAvKgorICAgICAgKiBoYWNrLCBoYWNrLCBoYWNrLiAgV2hhdCB3ZSBkbyBpcyB1c2UgdGhlIGV4YWN0IG1hY2hpbmVyeSBzZXQgdXAKKyAgICAgICogZm9yIGV4ZWN1dGlvbiwgZXhjZXB0IHRoYXQgbm93IHRoZXJlIGlzIGFuIGFkZGl0aW9uYWwgc3RhdGUKK0BAIC0xMTEsMTcgKzExOCwxNyBAQCBzdGF0aWMgdm9pZCBkaXNhc3NlbWJsZV9mb3J3YXJkICh1MTYgc2VnLCB1MTYgb2ZmLCBpbnQgbikKKyAgICAgICogVGhpcyB3YXMgZG9uZSBmb3IgYW4gZW50aXJlbHkgZGlmZmVyZW50IHJlYXNvbiwgYnV0IG1ha2VzIGEKKyAgICAgICogbmljZSB3YXkgdG8gZ2V0IHRoZSBzeXN0ZW0gdG8gaGVscCBkZWJ1ZyBjb2Rlcy4KKyAgICAgICovCistCXRyZWdzID0gTTsKKysgICAgdHJlZ3MgPSBNOworICAgICB0cmVncy54ODYuUl9JUCA9IG9mZjsKKyAgICAgdHJlZ3MueDg2LlJfQ1MgPSBzZWc7CistICAgIAorKworICAgICAvKiByZXNldCB0aGUgZGVjb2RpbmcgYnVmZmVycyAqLworICAgICB0cmVncy54ODYuZW5jX3N0cl9wb3MgPSAwOworICAgICB0cmVncy54ODYuZW5jX3BvcyA9IDA7CistICAgIAorKworICAgICAvKiB0dXJuIG9uIHRoZSAiZGlzYXNzZW1ibGUgb25seSwgbm8gZXhlY3V0ZSIgZmxhZyAqLworICAgICB0cmVncy54ODYuZGVidWcgfD0gREVCVUdfRElTQVNTRU1CTEVfRjsKKy0gCisrCisgICAgIC8qIERVTVAgTkVYVCBuIGluc3RydWN0aW9ucyB0byBzY3JlZW4gaW4gc3RyYWlnaHRfbGluZSBmYXNoaW9uICovCisgICAgIC8qCisgICAgICAqIFRoaXMgbG9va3MgbGlrZSB0aGUgcmVndWxhciBpbnN0cnVjdGlvbiBmZXRjaCBzdHJlYW0sIGV4Y2VwdAorQEAgLTEzMCwyOTkgKzEzNywzNTkgQEAgc3RhdGljIHZvaWQgZGlzYXNzZW1ibGVfZm9yd2FyZCAodTE2IHNlZywgdTE2IG9mZiwgaW50IG4pCisgICAgICAqIHRoZSBpbnN0cnVjdGlvbi4gIFhYWCAtLS0gQ0hFQ0sgVEhBVCBNRU0gSVMgTk9UIEFGRkVDVEVEISEhCisgICAgICAqIE5vdGUgdGhlIHVzZSBvZiBhIGNvcHkgb2YgdGhlIHJlZ2lzdGVyIHN0cnVjdHVyZS4uLgorICAgICAgKi8KKy0gICAgZm9yIChpPTA7IGk8bjsgaSsrKSB7CistCQlvcDEgPSAoKnN5c19yZGIpKCgodTMyKU0ueDg2LlJfQ1M8PDQpICsgKE0ueDg2LlJfSVArKykpOworLQkJKHg4NmVtdV9vcHRhYltvcDFdKShvcDEpOworKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisrICAgICAgICBvcDEgPSAoKnN5c19yZGIpICgoKHUzMikgTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKyspKTsKKysgICAgICAgICh4ODZlbXVfb3B0YWJbb3AxXSkgKG9wMSk7CisgICAgIH0KKyAgICAgLyogZW5kIG1ham9yIGhhY2sgbW9kZS4gKi8KKyB9CisgCistdm9pZCB4ODZlbXVfY2hlY2tfaXBfYWNjZXNzICh2b2lkKQorK3ZvaWQKKyt4ODZlbXVfY2hlY2tfaXBfYWNjZXNzKHZvaWQpCisgeworICAgICAvKiBOVUxMIGFzIG9mIG5vdyAqLworIH0KKyAKKy12b2lkIHg4NmVtdV9jaGVja19zcF9hY2Nlc3MgKHZvaWQpCisrdm9pZAorK3g4NmVtdV9jaGVja19zcF9hY2Nlc3Modm9pZCkKKyB7CisgfQorIAorLXZvaWQgeDg2ZW11X2NoZWNrX21lbV9hY2Nlc3MgKHUzMiBkdW1teSkKKyt2b2lkCisreDg2ZW11X2NoZWNrX21lbV9hY2Nlc3ModTMyIGR1bW15KQorIHsKKy0JLyogIGNoZWNrIGJvdW5kcywgZXRjICovCisrICAgIC8qICBjaGVjayBib3VuZHMsIGV0YyAqLworIH0KKyAKKy12b2lkIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyAodWludCBkdW1teTEsIHVpbnQgZHVtbXkyKQorK3ZvaWQKKyt4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3ModWludCBkdW1teTEsIHVpbnQgZHVtbXkyKQorIHsKKy0JLyogIGNoZWNrIGJvdW5kcywgZXRjICovCisrICAgIC8qICBjaGVjayBib3VuZHMsIGV0YyAqLworIH0KKyAKKy12b2lkIHg4NmVtdV9pbmNfZGVjb2RlZF9pbnN0X2xlbiAoaW50IHgpCisrdm9pZAorK3g4NmVtdV9pbmNfZGVjb2RlZF9pbnN0X2xlbihpbnQgeCkKKyB7CistCU0ueDg2LmVuY19wb3MgKz0geDsKKysgICAgTS54ODYuZW5jX3BvcyArPSB4OworIH0KKyAKKy12b2lkIHg4NmVtdV9kZWNvZGVfcHJpbnRmIChjaGFyICp4KQorK3ZvaWQKKyt4ODZlbXVfZGVjb2RlX3ByaW50Zihjb25zdCBjaGFyICp4KQorIHsKKy0Jc3ByaW50ZihNLng4Ni5kZWNvZGVkX2J1ZitNLng4Ni5lbmNfc3RyX3BvcywiJXMiLHgpOworLQlNLng4Ni5lbmNfc3RyX3BvcyArPSBzdHJsZW4oeCk7CisrICAgIHNwcmludGYoTS54ODYuZGVjb2RlZF9idWYgKyBNLng4Ni5lbmNfc3RyX3BvcywgIiVzIiwgeCk7CisrICAgIE0ueDg2LmVuY19zdHJfcG9zICs9IHN0cmxlbih4KTsKKyB9CisgCistdm9pZCB4ODZlbXVfZGVjb2RlX3ByaW50ZjIgKGNoYXIgKngsIGludCB5KQorK3ZvaWQKKyt4ODZlbXVfZGVjb2RlX3ByaW50ZjIoY29uc3QgY2hhciAqeCwgaW50IHkpCisgeworLQljaGFyIHRlbXBbMTAwXTsKKy0Jc3ByaW50Zih0ZW1wLHgseSk7CistCXNwcmludGYoTS54ODYuZGVjb2RlZF9idWYrTS54ODYuZW5jX3N0cl9wb3MsIiVzIix0ZW1wKTsKKy0JTS54ODYuZW5jX3N0cl9wb3MgKz0gc3RybGVuKHRlbXApOworKyAgICBjaGFyIHRlbXBbMTAwXTsKKysKKysgICAgc25wcmludGYodGVtcCwgc2l6ZW9mKHRlbXApLCB4LCB5KTsKKysgICAgc3ByaW50ZihNLng4Ni5kZWNvZGVkX2J1ZiArIE0ueDg2LmVuY19zdHJfcG9zLCAiJXMiLCB0ZW1wKTsKKysgICAgTS54ODYuZW5jX3N0cl9wb3MgKz0gc3RybGVuKHRlbXApOworIH0KKyAKKy12b2lkIHg4NmVtdV9lbmRfaW5zdHIgKHZvaWQpCisrdm9pZAorK3g4NmVtdV9lbmRfaW5zdHIodm9pZCkKKyB7CistCU0ueDg2LmVuY19zdHJfcG9zID0gMDsKKy0JTS54ODYuZW5jX3BvcyA9IDA7CisrICAgIE0ueDg2LmVuY19zdHJfcG9zID0gMDsKKysgICAgTS54ODYuZW5jX3BvcyA9IDA7CisgfQorIAorLXN0YXRpYyB2b2lkIHByaW50X2VuY29kZWRfYnl0ZXMgKHUxNiBzLCB1MTYgbykKKytzdGF0aWMgdm9pZAorK3ByaW50X2VuY29kZWRfYnl0ZXModTE2IHMsIHUxNiBvKQorIHsKKyAgICAgaW50IGk7CisgICAgIGNoYXIgYnVmMVs2NF07CistCWZvciAoaT0wOyBpPCBNLng4Ni5lbmNfcG9zOyBpKyspIHsKKy0JCXNwcmludGYoYnVmMSsyKmksIiUwMngiLCBmZXRjaF9kYXRhX2J5dGVfYWJzKHMsbytpKSk7CisrCisrICAgIGZvciAoaSA9IDA7IGkgPCBNLng4Ni5lbmNfcG9zOyBpKyspIHsKKysgICAgICAgIHNwcmludGYoYnVmMSArIDIgKiBpLCAiJTAyeCIsIGZldGNoX2RhdGFfYnl0ZV9hYnMocywgbyArIGkpKTsKKyAgICAgfQorLQlwcmludGsoIiUtMjBzIixidWYxKTsKKysgICAgcHJpbnRrKCIlLTIwcyIsIGJ1ZjEpOworIH0KKyAKKy1zdGF0aWMgdm9pZCBwcmludF9kZWNvZGVkX2luc3RydWN0aW9uICh2b2lkKQorK3N0YXRpYyB2b2lkCisrcHJpbnRfZGVjb2RlZF9pbnN0cnVjdGlvbih2b2lkKQorIHsKKy0JcHJpbnRrKCIlcyIsIE0ueDg2LmRlY29kZWRfYnVmKTsKKysgICAgcHJpbnRrKCIlcyIsIE0ueDg2LmRlY29kZWRfYnVmKTsKKyB9CisgCistdm9pZCB4ODZlbXVfcHJpbnRfaW50X3ZlY3QgKHUxNiBpdikKKyt2b2lkCisreDg2ZW11X3ByaW50X2ludF92ZWN0KHUxNiBpdikKKyB7CistCXUxNiBzZWcsb2ZmOworKyAgICB1MTYgc2VnLCBvZmY7CisgCistCWlmIChpdiA+IDI1NikgcmV0dXJuOworLQlzZWcgICA9IGZldGNoX2RhdGFfd29yZF9hYnMoMCxpdio0KTsKKy0Jb2ZmICAgPSBmZXRjaF9kYXRhX3dvcmRfYWJzKDAsaXYqNCsyKTsKKy0JcHJpbnRrKCIlMDR4OiUwNHggIiwgc2VnLCBvZmYpOworKyAgICBpZiAoaXYgPiAyNTYpCisrICAgICAgICByZXR1cm47CisrICAgIHNlZyA9IGZldGNoX2RhdGFfd29yZF9hYnMoMCwgaXYgKiA0KTsKKysgICAgb2ZmID0gZmV0Y2hfZGF0YV93b3JkX2FicygwLCBpdiAqIDQgKyAyKTsKKysgICAgcHJpbnRrKCIlMDR4OiUwNHggIiwgc2VnLCBvZmYpOworIH0KKyAKKy12b2lkIFg4NkVNVV9kdW1wX21lbW9yeSAodTE2IHNlZywgdTE2IG9mZiwgdTMyIGFtdCkKKyt2b2lkCisrWDg2RU1VX2R1bXBfbWVtb3J5KHUxNiBzZWcsIHUxNiBvZmYsIHUzMiBhbXQpCisgeworLQl1MzIgc3RhcnQgPSBvZmYgJiAweGZmZmZmZmYwOworLQl1MzIgZW5kICA9IChvZmYrMTYpICYgMHhmZmZmZmZmMDsKKy0JdTMyIGk7CistCXUzMiBjdXJyZW50OworLQorLQljdXJyZW50ID0gc3RhcnQ7CistCXdoaWxlIChlbmQgPD0gb2ZmICsgYW10KSB7CistCQlwcmludGsoIiUwNHg6JTA0eCAiLCBzZWcsIHN0YXJ0KTsKKy0JCWZvciAoaT1zdGFydDsgaTwgb2ZmOyBpKyspCistCQkgIHByaW50aygiICAgIik7CistCQlmb3IgKCAgICAgICA7IGk8IGVuZDsgaSsrKQorLQkJICBwcmludGsoIiUwMnggIiwgZmV0Y2hfZGF0YV9ieXRlX2FicyhzZWcsaSkpOworLQkJcHJpbnRrKCJcbiIpOworLQkJc3RhcnQgPSBlbmQ7CistCQllbmQgPSBzdGFydCArIDE2OworLQl9CisrICAgIHUzMiBzdGFydCA9IG9mZiAmIDB4ZmZmZmZmZjA7CisrICAgIHUzMiBlbmQgPSAob2ZmICsgMTYpICYgMHhmZmZmZmZmMDsKKysgICAgdTMyIGk7CisrICAgIHUzMiBjdXJyZW50OworKworKyAgICBjdXJyZW50ID0gc3RhcnQ7CisrICAgIHdoaWxlIChlbmQgPD0gb2ZmICsgYW10KSB7CisrICAgICAgICBwcmludGsoIiUwNHg6JTA0eCAiLCBzZWcsIHN0YXJ0KTsKKysgICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgb2ZmOyBpKyspCisrICAgICAgICAgICAgcHJpbnRrKCIgICAiKTsKKysgICAgICAgIGZvciAoOyBpIDwgZW5kOyBpKyspCisrICAgICAgICAgICAgcHJpbnRrKCIlMDJ4ICIsIGZldGNoX2RhdGFfYnl0ZV9hYnMoc2VnLCBpKSk7CisrICAgICAgICBwcmludGsoIlxuIik7CisrICAgICAgICBzdGFydCA9IGVuZDsKKysgICAgICAgIGVuZCA9IHN0YXJ0ICsgMTY7CisrICAgIH0KKyB9CisgCistdm9pZCB4ODZlbXVfc2luZ2xlX3N0ZXAgKHZvaWQpCisrdm9pZAorK3g4NmVtdV9zaW5nbGVfc3RlcCh2b2lkKQorIHsKKyAgICAgY2hhciBzWzEwMjRdOworICAgICBpbnQgcHNbMTBdOworICAgICBpbnQgbnRvazsKKyAgICAgaW50IGNtZDsKKyAgICAgaW50IGRvbmU7CistCQlpbnQgc2VnbWVudDsKKysgICAgaW50IHNlZ21lbnQ7CisgICAgIGludCBvZmZzZXQ7CisgICAgIHN0YXRpYyBpbnQgYnJlYWtwb2ludDsKKyAgICAgc3RhdGljIGludCBub0RlY29kZSA9IDE7CistICAgIAorKworICAgICBjaGFyICpwOworIAorLQkJaWYgKERFQlVHX0JSRUFLKCkpIHsKKy0JCQkJaWYgKE0ueDg2LnNhdmVkX2lwICE9IGJyZWFrcG9pbnQpIHsKKy0JCQkJCQlyZXR1cm47CistCQkJCX0gZWxzZSB7CistIAkgICAgICAgICAgTS54ODYuZGVidWcgJj0gfkRFQlVHX0RFQ09ERV9OT1BSSU5UX0Y7CistCQkJCQkJTS54ODYuZGVidWcgfD0gREVCVUdfVFJBQ0VfRjsKKy0JCQkJCQlNLng4Ni5kZWJ1ZyAmPSB+REVCVUdfQlJFQUtfRjsKKy0JCQkJCQlwcmludF9kZWNvZGVkX2luc3RydWN0aW9uICgpOworLQkJCQkJCVg4NkVNVV90cmFjZV9yZWdzKCk7CistCQkJCX0KKy0JCX0KKy0gICAgZG9uZT0wOworLQlvZmZzZXQgPSBNLng4Ni5zYXZlZF9pcDsKKysgICAgaWYgKERFQlVHX0JSRUFLKCkpIHsKKysgICAgICAgIGlmIChNLng4Ni5zYXZlZF9pcCAhPSBicmVha3BvaW50KSB7CisrICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgTS54ODYuZGVidWcgJj0gfkRFQlVHX0RFQ09ERV9OT1BSSU5UX0Y7CisrICAgICAgICAgICAgTS54ODYuZGVidWcgfD0gREVCVUdfVFJBQ0VfRjsKKysgICAgICAgICAgICBNLng4Ni5kZWJ1ZyAmPSB+REVCVUdfQlJFQUtfRjsKKysgICAgICAgICAgICBwcmludF9kZWNvZGVkX2luc3RydWN0aW9uKCk7CisrICAgICAgICAgICAgWDg2RU1VX3RyYWNlX3JlZ3MoKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICBkb25lID0gMDsKKysgICAgb2Zmc2V0ID0gTS54ODYuc2F2ZWRfaXA7CisgICAgIHdoaWxlICghZG9uZSkgeworICAgICAgICAgcHJpbnRrKCItIik7CisgICAgICAgICBwID0gZmdldHMocywgMTAyMywgc3RkaW4pOworICAgICAgICAgY21kID0gcGFyc2VfbGluZShzLCBwcywgJm50b2spOworLSAgICAgICAgc3dpdGNoKGNtZCkgeworLSAgICAgICAgICBjYXNlICd1JzoKKy0JCQlkaXNhc3NlbWJsZV9mb3J3YXJkKE0ueDg2LnNhdmVkX2NzLCh1MTYpb2Zmc2V0LDEwKTsKKysgICAgICAgIHN3aXRjaCAoY21kKSB7CisrICAgICAgICBjYXNlICd1JzoKKysgICAgICAgICAgICBkaXNhc3NlbWJsZV9mb3J3YXJkKE0ueDg2LnNhdmVkX2NzLCAodTE2KSBvZmZzZXQsIDEwKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAnZCc6ICAKKy0JCQkJCQkJaWYgKG50b2sgPT0gMikgeworLQkJCQkJCQkJCXNlZ21lbnQgPSBNLng4Ni5zYXZlZF9jczsKKy0JCQkJCQkJCQlvZmZzZXQgPSBwc1sxXTsKKy0JCQkJCQkJCQlYODZFTVVfZHVtcF9tZW1vcnkoc2VnbWVudCwodTE2KW9mZnNldCwxNik7CistCQkJCQkJCQkJb2Zmc2V0ICs9IDE2OworLQkJCQkJCQl9IGVsc2UgaWYgKG50b2sgPT0gMykgeworLQkJCQkJCQkJCXNlZ21lbnQgPSBwc1sxXTsKKy0JCQkJCQkJCQlvZmZzZXQgPSBwc1syXTsKKy0JCQkJCQkJCQlYODZFTVVfZHVtcF9tZW1vcnkoc2VnbWVudCwodTE2KW9mZnNldCwxNik7CistCQkJCQkJCQkJb2Zmc2V0ICs9IDE2OworLQkJCQkJCQl9IGVsc2UgeworLQkJCQkJCQkJCXNlZ21lbnQgPSBNLng4Ni5zYXZlZF9jczsKKy0JCQkJCQkJCQlYODZFTVVfZHVtcF9tZW1vcnkoc2VnbWVudCwodTE2KW9mZnNldCwxNik7CistCQkJCQkJCQkJb2Zmc2V0ICs9IDE2OworLQkJCQkJCQl9CisrICAgICAgICBjYXNlICdkJzoKKysgICAgICAgICAgICBpZiAobnRvayA9PSAyKSB7CisrICAgICAgICAgICAgICAgIHNlZ21lbnQgPSBNLng4Ni5zYXZlZF9jczsKKysgICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHNbMV07CisrICAgICAgICAgICAgICAgIFg4NkVNVV9kdW1wX21lbW9yeShzZWdtZW50LCAodTE2KSBvZmZzZXQsIDE2KTsKKysgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDE2OworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIGlmIChudG9rID09IDMpIHsKKysgICAgICAgICAgICAgICAgc2VnbWVudCA9IHBzWzFdOworKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBwc1syXTsKKysgICAgICAgICAgICAgICAgWDg2RU1VX2R1bXBfbWVtb3J5KHNlZ21lbnQsICh1MTYpIG9mZnNldCwgMTYpOworKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMTY7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgICAgICBzZWdtZW50ID0gTS54ODYuc2F2ZWRfY3M7CisrICAgICAgICAgICAgICAgIFg4NkVNVV9kdW1wX21lbW9yeShzZWdtZW50LCAodTE2KSBvZmZzZXQsIDE2KTsKKysgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDE2OworKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAnYyc6CistCQkJTS54ODYuZGVidWcgXj0gREVCVUdfVFJBQ0VDQUxMX0Y7CisrICAgICAgICBjYXNlICdjJzoKKysgICAgICAgICAgICBNLng4Ni5kZWJ1ZyBePSBERUJVR19UUkFDRUNBTExfRjsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAncyc6CistCQkJTS54ODYuZGVidWcgXj0gREVCVUdfU1ZDX0YgfCBERUJVR19TWVNfRiB8IERFQlVHX1NZU0lOVF9GOworKyAgICAgICAgY2FzZSAncyc6CisrICAgICAgICAgICAgTS54ODYuZGVidWcgXj0gREVCVUdfU1ZDX0YgfCBERUJVR19TWVNfRiB8IERFQlVHX1NZU0lOVF9GOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlICdyJzoKKy0JCQlYODZFTVVfdHJhY2VfcmVncygpOworKyAgICAgICAgY2FzZSAncic6CisrICAgICAgICAgICAgWDg2RU1VX3RyYWNlX3JlZ3MoKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAneCc6CistCQkJWDg2RU1VX3RyYWNlX3hyZWdzKCk7CisrICAgICAgICBjYXNlICd4JzoKKysgICAgICAgICAgICBYODZFTVVfdHJhY2VfeHJlZ3MoKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAnZyc6CisrICAgICAgICBjYXNlICdnJzoKKyAgICAgICAgICAgICBpZiAobnRvayA9PSAyKSB7CisgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQgPSBwc1sxXTsKKy0JCWlmIChub0RlY29kZSkgeworLQkJICAgICAgICAgICAgICAgIE0ueDg2LmRlYnVnIHw9IERFQlVHX0RFQ09ERV9OT1BSSU5UX0Y7CistCQl9IGVsc2UgeworLQkJICAgICAgICAgICAgICAgIE0ueDg2LmRlYnVnICY9IH5ERUJVR19ERUNPREVfTk9QUklOVF9GOworLQkJfQorLQkJTS54ODYuZGVidWcgJj0gfkRFQlVHX1RSQUNFX0Y7CistCQlNLng4Ni5kZWJ1ZyB8PSBERUJVR19CUkVBS19GOworLQkJZG9uZSA9IDE7CisrICAgICAgICAgICAgICAgIGlmIChub0RlY29kZSkgeworKyAgICAgICAgICAgICAgICAgICAgTS54ODYuZGVidWcgfD0gREVCVUdfREVDT0RFX05PUFJJTlRfRjsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICAgICAgICAgIE0ueDg2LmRlYnVnICY9IH5ERUJVR19ERUNPREVfTk9QUklOVF9GOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIE0ueDg2LmRlYnVnICY9IH5ERUJVR19UUkFDRV9GOworKyAgICAgICAgICAgICAgICBNLng4Ni5kZWJ1ZyB8PSBERUJVR19CUkVBS19GOworKyAgICAgICAgICAgICAgICBkb25lID0gMTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgJ3EnOgorLSAgICAgICAgICBNLng4Ni5kZWJ1ZyB8PSBERUJVR19FWElUOworLSAgICAgICAgICByZXR1cm47CistCSAgY2FzZSAnUCc6CistCSAgICAgIG5vRGVjb2RlID0gKG5vRGVjb2RlKT8wOjE7CistCSAgICAgIHByaW50aygiVG9nZ2xlZCBkZWNvZGluZyB0byAlc1xuIiwobm9EZWNvZGUpPyJGQUxTRSI6IlRSVUUiKTsKKy0JICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgJ3QnOgorLQkgIGNhc2UgMDoKKysgICAgICAgIGNhc2UgJ3EnOgorKyAgICAgICAgICAgIE0ueDg2LmRlYnVnIHw9IERFQlVHX0VYSVQ7CisrICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgY2FzZSAnUCc6CisrICAgICAgICAgICAgbm9EZWNvZGUgPSAobm9EZWNvZGUpID8gMCA6IDE7CisrICAgICAgICAgICAgcHJpbnRrKCJUb2dnbGVkIGRlY29kaW5nIHRvICVzXG4iLCAobm9EZWNvZGUpID8gIkZBTFNFIiA6ICJUUlVFIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlICd0JzoKKysgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICBkb25lID0gMTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIH0gICAKKysgICAgICAgIH0KKyAgICAgfQorIH0KKyAKKy1pbnQgWDg2RU1VX3RyYWNlX29uKHZvaWQpCisraW50CisrWDg2RU1VX3RyYWNlX29uKHZvaWQpCisgeworLQlyZXR1cm4gTS54ODYuZGVidWcgfD0gREVCVUdfU1RFUF9GIHwgREVCVUdfREVDT0RFX0YgfCBERUJVR19UUkFDRV9GOworKyAgICByZXR1cm4gTS54ODYuZGVidWcgfD0gREVCVUdfU1RFUF9GIHwgREVCVUdfREVDT0RFX0YgfCBERUJVR19UUkFDRV9GOworIH0KKyAKKy1pbnQgWDg2RU1VX3RyYWNlX29mZih2b2lkKQorK2ludAorK1g4NkVNVV90cmFjZV9vZmYodm9pZCkKKyB7CistCXJldHVybiBNLng4Ni5kZWJ1ZyAmPSB+KERFQlVHX1NURVBfRiB8IERFQlVHX0RFQ09ERV9GIHwgREVCVUdfVFJBQ0VfRik7CisrICAgIHJldHVybiBNLng4Ni5kZWJ1ZyAmPSB+KERFQlVHX1NURVBfRiB8IERFQlVHX0RFQ09ERV9GIHwgREVCVUdfVFJBQ0VfRik7CisgfQorIAorLXN0YXRpYyBpbnQgcGFyc2VfbGluZSAoY2hhciAqcywgaW50ICpwcywgaW50ICpuKQorK3N0YXRpYyBpbnQKKytwYXJzZV9saW5lKGNoYXIgKnMsIGludCAqcHMsIGludCAqbikKKyB7CisgICAgIGludCBjbWQ7CisgCisgICAgICpuID0gMDsKKy0gICAgd2hpbGUoKnMgPT0gJyAnIHx8ICpzID09ICdcdCcpIHMrKzsKKysgICAgd2hpbGUgKCpzID09ICcgJyB8fCAqcyA9PSAnXHQnKQorKyAgICAgICAgcysrOworICAgICBwc1sqbl0gPSAqczsKKyAgICAgc3dpdGNoICgqcykgeworLSAgICAgIGNhc2UgJ1xuJzoKKysgICAgY2FzZSAnXG4nOgorICAgICAgICAgKm4gKz0gMTsKKyAgICAgICAgIHJldHVybiAwOworLSAgICAgIGRlZmF1bHQ6CisrICAgIGRlZmF1bHQ6CisgICAgICAgICBjbWQgPSAqczsKKyAgICAgICAgICpuICs9IDE7CisgICAgIH0KKyAKKy0Jd2hpbGUgKDEpIHsKKy0JCXdoaWxlICgqcyAhPSAnICcgJiYgKnMgIT0gJ1x0JyAmJiAqcyAhPSAnXG4nKSAgcysrOworLQkJCistCQlpZiAoKnMgPT0gJ1xuJykKKy0JCQlyZXR1cm4gY21kOworLQkJCistCQl3aGlsZSgqcyA9PSAnICcgfHwgKnMgPT0gJ1x0JykgcysrOworLQkJCistCQlzc2NhbmYocywiJXgiLCZwc1sqbl0pOworLQkJKm4gKz0gMTsKKy0JfQorKyAgICB3aGlsZSAoMSkgeworKyAgICAgICAgd2hpbGUgKCpzICE9ICcgJyAmJiAqcyAhPSAnXHQnICYmICpzICE9ICdcbicpCisrICAgICAgICAgICAgcysrOworKworKyAgICAgICAgaWYgKCpzID09ICdcbicpCisrICAgICAgICAgICAgcmV0dXJuIGNtZDsKKysKKysgICAgICAgIHdoaWxlICgqcyA9PSAnICcgfHwgKnMgPT0gJ1x0JykKKysgICAgICAgICAgICBzKys7CisrCisrICAgICAgICBzc2NhbmYocywgIiV4IiwgJnBzWypuXSk7CisrICAgICAgICAqbiArPSAxOworKyAgICB9CisgfQorIAorLSNlbmRpZiAvKiBERUJVRyAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogREVCVUcgKi8KKyAKKy12b2lkIHg4NmVtdV9kdW1wX3JlZ3MgKHZvaWQpCisrdm9pZAorK3g4NmVtdV9kdW1wX3JlZ3Modm9pZCkKKyB7CistCXByaW50aygiXHRBWD0lMDR4ICAiLCBNLng4Ni5SX0FYICk7CistCXByaW50aygiQlg9JTA0eCAgIiwgTS54ODYuUl9CWCApOworLQlwcmludGsoIkNYPSUwNHggICIsIE0ueDg2LlJfQ1ggKTsKKy0JcHJpbnRrKCJEWD0lMDR4ICAiLCBNLng4Ni5SX0RYICk7CistCXByaW50aygiU1A9JTA0eCAgIiwgTS54ODYuUl9TUCApOworLQlwcmludGsoIkJQPSUwNHggICIsIE0ueDg2LlJfQlAgKTsKKy0JcHJpbnRrKCJTST0lMDR4ICAiLCBNLng4Ni5SX1NJICk7CistCXByaW50aygiREk9JTA0eFxuIiwgTS54ODYuUl9ESSApOworLQlwcmludGsoIlx0RFM9JTA0eCAgIiwgTS54ODYuUl9EUyApOworLQlwcmludGsoIkVTPSUwNHggICIsIE0ueDg2LlJfRVMgKTsKKy0JcHJpbnRrKCJTUz0lMDR4ICAiLCBNLng4Ni5SX1NTICk7CistCXByaW50aygiQ1M9JTA0eCAgIiwgTS54ODYuUl9DUyApOworLQlwcmludGsoIklQPSUwNHggICAiLCBNLng4Ni5SX0lQICk7CistCWlmIChBQ0NFU1NfRkxBRyhGX09GKSkgICAgcHJpbnRrKCJPViAiKTsgICAgIC8qIENIRUNLRUQuLi4gKi8KKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiTlYgIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAgcHJpbnRrKCJETiAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiVVAgIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX0lGKSkgICAgcHJpbnRrKCJFSSAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiREkgIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX1NGKSkgICAgcHJpbnRrKCJORyAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiUEwgIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX1pGKSkgICAgcHJpbnRrKCJaUiAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiTlogIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX0FGKSkgICAgcHJpbnRrKCJBQyAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiTkEgIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX1BGKSkgICAgcHJpbnRrKCJQRSAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiUE8gIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkgICAgcHJpbnRrKCJDWSAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiTkMgIik7CistCXByaW50aygiXG4iKTsKKysgICAgcHJpbnRrKCJcdEFYPSUwNHggICIsIE0ueDg2LlJfQVgpOworKyAgICBwcmludGsoIkJYPSUwNHggICIsIE0ueDg2LlJfQlgpOworKyAgICBwcmludGsoIkNYPSUwNHggICIsIE0ueDg2LlJfQ1gpOworKyAgICBwcmludGsoIkRYPSUwNHggICIsIE0ueDg2LlJfRFgpOworKyAgICBwcmludGsoIlNQPSUwNHggICIsIE0ueDg2LlJfU1ApOworKyAgICBwcmludGsoIkJQPSUwNHggICIsIE0ueDg2LlJfQlApOworKyAgICBwcmludGsoIlNJPSUwNHggICIsIE0ueDg2LlJfU0kpOworKyAgICBwcmludGsoIkRJPSUwNHhcbiIsIE0ueDg2LlJfREkpOworKyAgICBwcmludGsoIlx0RFM9JTA0eCAgIiwgTS54ODYuUl9EUyk7CisrICAgIHByaW50aygiRVM9JTA0eCAgIiwgTS54ODYuUl9FUyk7CisrICAgIHByaW50aygiU1M9JTA0eCAgIiwgTS54ODYuUl9TUyk7CisrICAgIHByaW50aygiQ1M9JTA0eCAgIiwgTS54ODYuUl9DUyk7CisrICAgIHByaW50aygiSVA9JTA0eCAgICIsIE0ueDg2LlJfSVApOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9PRikpCisrICAgICAgICBwcmludGsoIk9WICIpOyAgICAgICAgICAvKiBDSEVDS0VELi4uICovCisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiTlYgIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkKKysgICAgICAgIHByaW50aygiRE4gIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiVVAgIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0lGKSkKKysgICAgICAgIHByaW50aygiRUkgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiREkgIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX1NGKSkKKysgICAgICAgIHByaW50aygiTkcgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiUEwgIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX1pGKSkKKysgICAgICAgIHByaW50aygiWlIgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiTlogIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0FGKSkKKysgICAgICAgIHByaW50aygiQUMgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiTkEgIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX1BGKSkKKysgICAgICAgIHByaW50aygiUEUgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiUE8gIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKysgICAgICAgIHByaW50aygiQ1kgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiTkMgIik7CisrICAgIHByaW50aygiXG4iKTsKKyB9CisgCistdm9pZCB4ODZlbXVfZHVtcF94cmVncyAodm9pZCkKKyt2b2lkCisreDg2ZW11X2R1bXBfeHJlZ3Modm9pZCkKKyB7CistCXByaW50aygiXHRFQVg9JTA4eCAgIiwgTS54ODYuUl9FQVggKTsKKy0JcHJpbnRrKCJFQlg9JTA4eCAgIiwgTS54ODYuUl9FQlggKTsKKy0JcHJpbnRrKCJFQ1g9JTA4eCAgIiwgTS54ODYuUl9FQ1ggKTsKKy0JcHJpbnRrKCJFRFg9JTA4eCAgXG4iLCBNLng4Ni5SX0VEWCApOworLQlwcmludGsoIlx0RVNQPSUwOHggICIsIE0ueDg2LlJfRVNQICk7CistCXByaW50aygiRUJQPSUwOHggICIsIE0ueDg2LlJfRUJQICk7CistCXByaW50aygiRVNJPSUwOHggICIsIE0ueDg2LlJfRVNJICk7CistCXByaW50aygiRURJPSUwOHhcbiIsIE0ueDg2LlJfRURJICk7CistCXByaW50aygiXHREUz0lMDR4ICAiLCBNLng4Ni5SX0RTICk7CistCXByaW50aygiRVM9JTA0eCAgIiwgTS54ODYuUl9FUyApOworLQlwcmludGsoIlNTPSUwNHggICIsIE0ueDg2LlJfU1MgKTsKKy0JcHJpbnRrKCJDUz0lMDR4ICAiLCBNLng4Ni5SX0NTICk7CistCXByaW50aygiRUlQPSUwOHhcblx0IiwgTS54ODYuUl9FSVAgKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfT0YpKSAgICBwcmludGsoIk9WICIpOyAgICAgLyogQ0hFQ0tFRC4uLiAqLworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJOViAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgICBwcmludGsoIkROICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJVUCAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfSUYpKSAgICBwcmludGsoIkVJICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJESSAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfU0YpKSAgICBwcmludGsoIk5HICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJQTCAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfWkYpKSAgICBwcmludGsoIlpSICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJOWiAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfQUYpKSAgICBwcmludGsoIkFDICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJOQSAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfUEYpKSAgICBwcmludGsoIlBFICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJQTyAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSAgICBwcmludGsoIkNZICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJOQyAiKTsKKy0JcHJpbnRrKCJcbiIpOworKyAgICBwcmludGsoIlx0RUFYPSUwOHggICIsIE0ueDg2LlJfRUFYKTsKKysgICAgcHJpbnRrKCJFQlg9JTA4eCAgIiwgTS54ODYuUl9FQlgpOworKyAgICBwcmludGsoIkVDWD0lMDh4ICAiLCBNLng4Ni5SX0VDWCk7CisrICAgIHByaW50aygiRURYPSUwOHggIFxuIiwgTS54ODYuUl9FRFgpOworKyAgICBwcmludGsoIlx0RVNQPSUwOHggICIsIE0ueDg2LlJfRVNQKTsKKysgICAgcHJpbnRrKCJFQlA9JTA4eCAgIiwgTS54ODYuUl9FQlApOworKyAgICBwcmludGsoIkVTST0lMDh4ICAiLCBNLng4Ni5SX0VTSSk7CisrICAgIHByaW50aygiRURJPSUwOHhcbiIsIE0ueDg2LlJfRURJKTsKKysgICAgcHJpbnRrKCJcdERTPSUwNHggICIsIE0ueDg2LlJfRFMpOworKyAgICBwcmludGsoIkVTPSUwNHggICIsIE0ueDg2LlJfRVMpOworKyAgICBwcmludGsoIlNTPSUwNHggICIsIE0ueDg2LlJfU1MpOworKyAgICBwcmludGsoIkNTPSUwNHggICIsIE0ueDg2LlJfQ1MpOworKyAgICBwcmludGsoIkVJUD0lMDh4XG5cdCIsIE0ueDg2LlJfRUlQKTsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfT0YpKQorKyAgICAgICAgcHJpbnRrKCJPViAiKTsgICAgICAgICAgLyogQ0hFQ0tFRC4uLiAqLworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIk5WICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpCisrICAgICAgICBwcmludGsoIkROICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIlVQICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9JRikpCisrICAgICAgICBwcmludGsoIkVJICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIkRJICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9TRikpCisrICAgICAgICBwcmludGsoIk5HICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIlBMICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9aRikpCisrICAgICAgICBwcmludGsoIlpSICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIk5aICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9BRikpCisrICAgICAgICBwcmludGsoIkFDICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIk5BICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9QRikpCisrICAgICAgICBwcmludGsoIlBFICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIlBPICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpCisrICAgICAgICBwcmludGsoIkNZICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIk5DICIpOworKyAgICBwcmludGsoIlxuIik7CisgfQorZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L2RlY29kZS5jIGIvbGlicy94ODZlbXUvZGVjb2RlLmMKK2luZGV4IDdkOWEzNGEuLjEyZjhmYjggMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS9kZWNvZGUuYworKysrIGIvbGlicy94ODZlbXUvZGVjb2RlLmMKK0BAIC00NiwyNSArNDYsMjcgQEAKKyBSRU1BUktTOgorIEhhbmRsZXMgYW55IHBlbmRpbmcgYXN5Y2hyb25vdXMgaW50ZXJydXB0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdV9pbnRyX2hhbmRsZSh2b2lkKQorK3N0YXRpYyB2b2lkCisreDg2ZW11X2ludHJfaGFuZGxlKHZvaWQpCisgeworLQl1OAlpbnRubzsKKy0KKy0JaWYgKE0ueDg2LmludHIgJiBJTlRSX1NZTkNIKSB7CistCQlpbnRubyA9IE0ueDg2LmludG5vOworLQkJaWYgKF9YODZFTVVfaW50clRhYltpbnRub10pIHsKKy0JCQkoKl9YODZFTVVfaW50clRhYltpbnRub10pKGludG5vKTsKKy0JCX0gZWxzZSB7CistCQkJcHVzaF93b3JkKCh1MTYpTS54ODYuUl9GTEcpOworLQkJCUNMRUFSX0ZMQUcoRl9JRik7CistCQkJQ0xFQVJfRkxBRyhGX1RGKTsKKy0JCQlwdXNoX3dvcmQoTS54ODYuUl9DUyk7CistCQkJTS54ODYuUl9DUyA9IG1lbV9hY2Nlc3Nfd29yZChpbnRubyAqIDQgKyAyKTsKKy0JCQlwdXNoX3dvcmQoTS54ODYuUl9JUCk7CistCQkJTS54ODYuUl9JUCA9IG1lbV9hY2Nlc3Nfd29yZChpbnRubyAqIDQpOworLQkJCU0ueDg2LmludHIgPSAwOworLQkJfQorLQl9CisrICAgIHU4IGludG5vOworKworKyAgICBpZiAoTS54ODYuaW50ciAmIElOVFJfU1lOQ0gpIHsKKysgICAgICAgIGludG5vID0gTS54ODYuaW50bm87CisrICAgICAgICBpZiAoX1g4NkVNVV9pbnRyVGFiW2ludG5vXSkgeworKyAgICAgICAgICAgICgqX1g4NkVNVV9pbnRyVGFiW2ludG5vXSkgKGludG5vKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHB1c2hfd29yZCgodTE2KSBNLng4Ni5SX0ZMRyk7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0lGKTsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfVEYpOworKyAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0NTKTsKKysgICAgICAgICAgICBNLng4Ni5SX0NTID0gbWVtX2FjY2Vzc193b3JkKGludG5vICogNCArIDIpOworKyAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKysgICAgICAgICAgICBNLng4Ni5SX0lQID0gbWVtX2FjY2Vzc193b3JkKGludG5vICogNCk7CisrICAgICAgICAgICAgTS54ODYuaW50ciA9IDA7CisrICAgICAgICB9CisrICAgIH0KKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC03NSwxMSArNzcsMTEgQEAgUkVNQVJLUzoKKyBSYWlzZSB0aGUgc3BlY2lmaWVkIGludGVycnVwdCB0byBiZSBoYW5kbGVkIGJlZm9yZSB0aGUgZXhlY3V0aW9uIG9mIHRoZQorIG5leHQgaW5zdHJ1Y3Rpb24uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIHg4NmVtdV9pbnRyX3JhaXNlKAorLQl1OCBpbnRybnVtKQorK3ZvaWQKKyt4ODZlbXVfaW50cl9yYWlzZSh1OCBpbnRybnVtKQorIHsKKy0JTS54ODYuaW50bm8gPSBpbnRybnVtOworLQlNLng4Ni5pbnRyIHw9IElOVFJfU1lOQ0g7CisrICAgIE0ueDg2LmludG5vID0gaW50cm51bTsKKysgICAgTS54ODYuaW50ciB8PSBJTlRSX1NZTkNIOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTg4LDM5ICs5MCwzOSBAQCBNYWluIGV4ZWN1dGlvbiBsb29wIGZvciB0aGUgZW11bGF0b3IuIFdlIHJldHVybiBmcm9tIGhlcmUgd2hlbiB0aGUgc3lzdGVtCisgaGFsdHMsIHdoaWNoIGlzIG5vcm1hbGx5IGNhdXNlZCBieSBhIHN0YWNrIGZhdWx0IHdoZW4gd2UgcmV0dXJuIGZyb20gdGhlCisgb3JpZ2luYWwgcmVhbCBtb2RlIGNhbGwuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIFg4NkVNVV9leGVjKHZvaWQpCisrdm9pZAorK1g4NkVNVV9leGVjKHZvaWQpCisgeworLQl1OCBvcDE7CistCistCU0ueDg2LmludHIgPSAwOworLQlEQih4ODZlbXVfZW5kX2luc3RyKCk7KQorLQorLSAgICBmb3IgKDs7KSB7CistREIoCQlpZiAoQ0hFQ0tfSVBfRkVUQ0goKSkKKy0JCSAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKy0JCS8qIElmIGRlYnVnZ2luZywgc2F2ZSB0aGUgSVAgYW5kIENTIHZhbHVlcy4gKi8KKy0JCVNBVkVfSVBfQ1MoTS54ODYuUl9DUywgTS54ODYuUl9JUCk7CistCQlJTkNfREVDT0RFRF9JTlNUX0xFTigxKTsKKy0JCWlmIChNLng4Ni5pbnRyKSB7CistCQkJaWYgKE0ueDg2LmludHIgJiBJTlRSX0hBTFRFRCkgeworLURCKCAgICAgICAgICAgICBpZiAoTS54ODYuUl9TUCAhPSAwKSB7CistICAgICAgICAgICAgICAgICAgICBwcmludGsoImhhbHRlZFxuIik7CistICAgICAgICAgICAgICAgICAgICBYODZFTVVfdHJhY2VfcmVncygpOworLSAgICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBlbHNlIHsKKy0gICAgICAgICAgICAgICAgICAgIGlmIChNLng4Ni5kZWJ1ZykKKy0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIlNlcnZpY2UgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVxuIik7CistICAgICAgICAgICAgICAgICAgICB9KQorLQkJCQlyZXR1cm47CisrICAgIHU4IG9wMTsKKysKKysgICAgTS54ODYuaW50ciA9IDA7CisrICAgIERCKHg4NmVtdV9lbmRfaW5zdHIoKTsKKysgICAgICAgICkKKysKKysgICAgICAgIGZvciAoOzspIHsKKysgICAgICAgIERCKGlmIChDSEVDS19JUF9GRVRDSCgpKQorKyAgICAgICAgICAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKysgICAgICAgICAgICAvKiBJZiBkZWJ1Z2dpbmcsIHNhdmUgdGhlIElQIGFuZCBDUyB2YWx1ZXMuICovCisrICAgICAgICAgICAgU0FWRV9JUF9DUyhNLng4Ni5SX0NTLCBNLng4Ni5SX0lQKTsKKysgICAgICAgIElOQ19ERUNPREVEX0lOU1RfTEVOKDEpOworKyAgICAgICAgaWYgKE0ueDg2LmludHIpIHsKKysgICAgICAgICAgICBpZiAoTS54ODYuaW50ciAmIElOVFJfSEFMVEVEKSB7CisrICAgICAgICAgICAgICAgIERCKGlmIChNLng4Ni5SX1NQICE9IDApIHsKKysgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJoYWx0ZWRcbiIpOyBYODZFTVVfdHJhY2VfcmVncygpO30KKysgICAgICAgICAgICAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgICAgICAgIGlmIChNLng4Ni5kZWJ1ZykKKysgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJTZXJ2aWNlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcbiIpO30KKysgICAgICAgICAgICAgICAgKQorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgIH0KKy0JCQlpZiAoKChNLng4Ni5pbnRyICYgSU5UUl9TWU5DSCkgJiYgKE0ueDg2LmludG5vID09IDAgfHwgTS54ODYuaW50bm8gPT0gMikpIHx8CistCQkJCSFBQ0NFU1NfRkxBRyhGX0lGKSkgeworLQkJCQl4ODZlbXVfaW50cl9oYW5kbGUoKTsKKy0JCQl9CistCQl9CistCistCQlvcDEgPSAoKnN5c19yZGIpKCgodTMyKU0ueDg2LlJfQ1MgPDwgNCkgKyAoTS54ODYuUl9JUCsrKSk7CistCQkoKng4NmVtdV9vcHRhYltvcDFdKShvcDEpOworKyAgICAgICAgICAgIGlmICgoKE0ueDg2LmludHIgJiBJTlRSX1NZTkNIKSAmJgorKyAgICAgICAgICAgICAgICAgKE0ueDg2LmludG5vID09IDAgfHwgTS54ODYuaW50bm8gPT0gMikpIHx8CisrICAgICAgICAgICAgICAgICFBQ0NFU1NfRkxBRyhGX0lGKSkgeworKyAgICAgICAgICAgICAgICB4ODZlbXVfaW50cl9oYW5kbGUoKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBvcDEgPSAoKnN5c19yZGIpICgoKHUzMikgTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKyspKTsKKysgICAgICAgICgqeDg2ZW11X29wdGFiW29wMV0pIChvcDEpOworICAgICAgICAgaWYgKE0ueDg2LmRlYnVnICYgREVCVUdfRVhJVCkgeworICAgICAgICAgICAgIE0ueDg2LmRlYnVnICY9IH5ERUJVR19FWElUOworICAgICAgICAgICAgIHJldHVybjsKK0BAIC0xMzIsOSArMTM0LDEwIEBAIERCKCAgICAgICAgICAgICBpZiAoTS54ODYuUl9TUCAhPSAwKSB7CisgUkVNQVJLUzoKKyBIYWx0cyB0aGUgc3lzdGVtIGJ5IHNldHRpbmcgdGhlIGhhbHRlZCBzeXN0ZW0gZmxhZy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgWDg2RU1VX2hhbHRfc3lzKHZvaWQpCisrdm9pZAorK1g4NkVNVV9oYWx0X3N5cyh2b2lkKQorIHsKKy0JTS54ODYuaW50ciB8PSBJTlRSX0hBTFRFRDsKKysgICAgTS54ODYuaW50ciB8PSBJTlRSX0hBTFRFRDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0xNDksMTkgKzE1MiwxNyBAQCBuZXh0IGluc3RydWN0aW9uLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiwgYXMgKCpzeXNfcmRiKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgZmV0Y2hfZGVjb2RlX21vZHJtKAorLQlpbnQgKm1vZCwKKy0JaW50ICpyZWdoLAorLQlpbnQgKnJlZ2wpCisrdm9pZAorK2ZldGNoX2RlY29kZV9tb2RybShpbnQgKm1vZCwgaW50ICpyZWdoLCBpbnQgKnJlZ2wpCisgeworLQlpbnQgZmV0Y2hlZDsKKy0KKy1EQigJaWYgKENIRUNLX0lQX0ZFVENIKCkpCistCSAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKy0JZmV0Y2hlZCA9ICgqc3lzX3JkYikoKCh1MzIpTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKyspKTsKKy0JSU5DX0RFQ09ERURfSU5TVF9MRU4oMSk7CistCSptb2QgID0gKGZldGNoZWQgPj4gNikgJiAweDAzOworLQkqcmVnaCA9IChmZXRjaGVkID4+IDMpICYgMHgwNzsKKysgICAgaW50IGZldGNoZWQ7CisrCisrICAgIERCKGlmIChDSEVDS19JUF9GRVRDSCgpKQorKyAgICAgICB4ODZlbXVfY2hlY2tfaXBfYWNjZXNzKCk7KQorKyAgICAgICAgZmV0Y2hlZCA9ICgqc3lzX3JkYikgKCgodTMyKSBNLng4Ni5SX0NTIDw8IDQpICsgKE0ueDg2LlJfSVArKykpOworKyAgICBJTkNfREVDT0RFRF9JTlNUX0xFTigxKTsKKysgICAgKm1vZCA9IChmZXRjaGVkID4+IDYpICYgMHgwMzsKKysgICAgKnJlZ2ggPSAoZmV0Y2hlZCA+PiAzKSAmIDB4MDc7CisgICAgICpyZWdsID0gKGZldGNoZWQgPj4gMCkgJiAweDA3OworIH0KKyAKK0BAIC0xNzUsMTUgKzE3NiwxNiBAQCBtb3ZlcyB0aGUgaW5zdHJ1Y3Rpb24gcG9pbnRlciB0byB0aGUgbmV4dCB2YWx1ZS4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24sIGFzICgqc3lzX3JkYikgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBmZXRjaF9ieXRlX2ltbSh2b2lkKQorK3U4CisrZmV0Y2hfYnl0ZV9pbW0odm9pZCkKKyB7CistCXU4IGZldGNoZWQ7CisrICAgIHU4IGZldGNoZWQ7CisgCistREIoCWlmIChDSEVDS19JUF9GRVRDSCgpKQorLQkJeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKy0JZmV0Y2hlZCA9ICgqc3lzX3JkYikoKCh1MzIpTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKyspKTsKKy0JSU5DX0RFQ09ERURfSU5TVF9MRU4oMSk7CistCXJldHVybiBmZXRjaGVkOworKyAgICBEQihpZiAoQ0hFQ0tfSVBfRkVUQ0goKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKysgICAgICAgIGZldGNoZWQgPSAoKnN5c19yZGIpICgoKHUzMikgTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKyspKTsKKysgICAgSU5DX0RFQ09ERURfSU5TVF9MRU4oMSk7CisrICAgIHJldHVybiBmZXRjaGVkOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTE5NiwxNiArMTk4LDE3IEBAIG1vdmVzIHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyIHRvIHRoZSBuZXh0IHZhbHVlLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiwgYXMgKCpzeXNfcmR3KSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBmZXRjaF93b3JkX2ltbSh2b2lkKQorK3UxNgorK2ZldGNoX3dvcmRfaW1tKHZvaWQpCisgeworLQl1MTYJZmV0Y2hlZDsKKy0KKy1EQigJaWYgKENIRUNLX0lQX0ZFVENIKCkpCistCQl4ODZlbXVfY2hlY2tfaXBfYWNjZXNzKCk7KQorLQlmZXRjaGVkID0gKCpzeXNfcmR3KSgoKHUzMilNLng4Ni5SX0NTIDw8IDQpICsgKE0ueDg2LlJfSVApKTsKKy0JTS54ODYuUl9JUCArPSAyOworLQlJTkNfREVDT0RFRF9JTlNUX0xFTigyKTsKKy0JcmV0dXJuIGZldGNoZWQ7CisrICAgIHUxNiBmZXRjaGVkOworKworKyAgICBEQihpZiAoQ0hFQ0tfSVBfRkVUQ0goKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKysgICAgICAgIGZldGNoZWQgPSAoKnN5c19yZHcpICgoKHUzMikgTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKSk7CisrICAgIE0ueDg2LlJfSVAgKz0gMjsKKysgICAgSU5DX0RFQ09ERURfSU5TVF9MRU4oMik7CisrICAgIHJldHVybiBmZXRjaGVkOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTIxOCwxNiArMjIxLDE3IEBAIG1vdmVzIHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyIHRvIHRoZSBuZXh0IHZhbHVlLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiwgYXMgKCpzeXNfcmR3KSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBmZXRjaF9sb25nX2ltbSh2b2lkKQorK3UzMgorK2ZldGNoX2xvbmdfaW1tKHZvaWQpCisgeworLQl1MzIgZmV0Y2hlZDsKKy0KKy1EQigJaWYgKENIRUNLX0lQX0ZFVENIKCkpCistCSAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKy0JZmV0Y2hlZCA9ICgqc3lzX3JkbCkoKCh1MzIpTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKSk7CistCU0ueDg2LlJfSVAgKz0gNDsKKy0JSU5DX0RFQ09ERURfSU5TVF9MRU4oNCk7CistCXJldHVybiBmZXRjaGVkOworKyAgICB1MzIgZmV0Y2hlZDsKKysKKysgICAgREIoaWYgKENIRUNLX0lQX0ZFVENIKCkpCisrICAgICAgIHg4NmVtdV9jaGVja19pcF9hY2Nlc3MoKTspCisrICAgICAgICBmZXRjaGVkID0gKCpzeXNfcmRsKSAoKCh1MzIpIE0ueDg2LlJfQ1MgPDwgNCkgKyAoTS54ODYuUl9JUCkpOworKyAgICBNLng4Ni5SX0lQICs9IDQ7CisrICAgIElOQ19ERUNPREVEX0lOU1RfTEVOKDQpOworKyAgICByZXR1cm4gZmV0Y2hlZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0yNTksMzggKzI2MywzOSBAQCBjcHUtc3RhdGUtdmFyaWJsZSBNLng4Ni5tb2RlLiBUaGVyZSBhcmUgc2V2ZXJhbCBwb3RlbnRpYWwgc3RhdGVzOgorIAorIEVhY2ggb2YgdGhlIGFib3ZlIDcgaXRlbXMgYXJlIGhhbmRsZWQgd2l0aCBhIGJpdCBpbiB0aGUgbW9kZSBmaWVsZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLV9JTkxJTkUgdTMyIGdldF9kYXRhX3NlZ21lbnQodm9pZCkKKytfSU5MSU5FIHUzMgorK2dldF9kYXRhX3NlZ21lbnQodm9pZCkKKyB7CisgI2RlZmluZQlHRVRfU0VHTUVOVChzZWdtZW50KQorLQlzd2l0Y2ggKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1NFR01BU0spIHsKKy0JICBjYXNlIDA6CQkJCQkvKiBkZWZhdWx0IGNhc2U6IHVzZSBkcyByZWdpc3RlciAqLworLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRFM6CistCSAgY2FzZSBTWVNNT0RFX1NFR09WUl9EUyB8IFNZU01PREVfU0VHX0RTX1NTOgorLQkJcmV0dXJuICBNLng4Ni5SX0RTOworLQkgIGNhc2UgU1lTTU9ERV9TRUdfRFNfU1M6CS8qIG5vbi1vdmVycmlkZGVuLCB1c2Ugc3MgcmVnaXN0ZXIgKi8KKy0JCXJldHVybiAgTS54ODYuUl9TUzsKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX0NTOgorLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfQ1MgfCBTWVNNT0RFX1NFR19EU19TUzoKKy0JCXJldHVybiAgTS54ODYuUl9DUzsKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX0VTOgorLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRVMgfCBTWVNNT0RFX1NFR19EU19TUzoKKy0JCXJldHVybiAgTS54ODYuUl9FUzsKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX0ZTOgorLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRlMgfCBTWVNNT0RFX1NFR19EU19TUzoKKy0JCXJldHVybiAgTS54ODYuUl9GUzsKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX0dTOgorLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfR1MgfCBTWVNNT0RFX1NFR19EU19TUzoKKy0JCXJldHVybiAgTS54ODYuUl9HUzsKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX1NTOgorLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfU1MgfCBTWVNNT0RFX1NFR19EU19TUzoKKy0JCXJldHVybiAgTS54ODYuUl9TUzsKKy0JICBkZWZhdWx0OgorKyAgICBzd2l0Y2ggKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1NFR01BU0spIHsKKysgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCBjYXNlOiB1c2UgZHMgcmVnaXN0ZXIgKi8KKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9EUzoKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9EUyB8IFNZU01PREVfU0VHX0RTX1NTOgorKyAgICAgICAgcmV0dXJuIE0ueDg2LlJfRFM7CisrICAgIGNhc2UgU1lTTU9ERV9TRUdfRFNfU1M6ICAgIC8qIG5vbi1vdmVycmlkZGVuLCB1c2Ugc3MgcmVnaXN0ZXIgKi8KKysgICAgICAgIHJldHVybiBNLng4Ni5SX1NTOworKyAgICBjYXNlIFNZU01PREVfU0VHT1ZSX0NTOgorKyAgICBjYXNlIFNZU01PREVfU0VHT1ZSX0NTIHwgU1lTTU9ERV9TRUdfRFNfU1M6CisrICAgICAgICByZXR1cm4gTS54ODYuUl9DUzsKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9FUzoKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9FUyB8IFNZU01PREVfU0VHX0RTX1NTOgorKyAgICAgICAgcmV0dXJuIE0ueDg2LlJfRVM7CisrICAgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRlM6CisrICAgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRlMgfCBTWVNNT0RFX1NFR19EU19TUzoKKysgICAgICAgIHJldHVybiBNLng4Ni5SX0ZTOworKyAgICBjYXNlIFNZU01PREVfU0VHT1ZSX0dTOgorKyAgICBjYXNlIFNZU01PREVfU0VHT1ZSX0dTIHwgU1lTTU9ERV9TRUdfRFNfU1M6CisrICAgICAgICByZXR1cm4gTS54ODYuUl9HUzsKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9TUzoKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9TUyB8IFNZU01PREVfU0VHX0RTX1NTOgorKyAgICAgICAgcmV0dXJuIE0ueDg2LlJfU1M7CisrICAgIGRlZmF1bHQ6CisgI2lmZGVmCURFQlVHCistCQlwcmludGsoImVycm9yOiBzaG91bGQgbm90IGhhcHBlbjogIG11bHRpcGxlIG92ZXJyaWRlcy5cbiIpOworKyAgICAgICAgcHJpbnRrKCJlcnJvcjogc2hvdWxkIG5vdCBoYXBwZW46ICBtdWx0aXBsZSBvdmVycmlkZXMuXG4iKTsKKyAjZW5kaWYKKy0JCUhBTFRfU1lTKCk7CistCQlyZXR1cm4gMDsKKy0JfQorKyAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMzAyLDE0ICszMDcsMTQgQEAgQnl0ZSB2YWx1ZSByZWFkIGZyb20gdGhlIGFic29sdXRlIG1lbW9yeSBsb2NhdGlvbi4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24gYXMgKCpzeXNfcmRYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IGZldGNoX2RhdGFfYnl0ZSgKKy0JdWludCBvZmZzZXQpCisrdTgKKytmZXRjaF9kYXRhX2J5dGUodWludCBvZmZzZXQpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KWdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNikgZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworICNlbmRpZgorLQlyZXR1cm4gKCpzeXNfcmRiKSgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0KTsKKysgICAgcmV0dXJuICgqc3lzX3JkYikgKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTMyMSwxNCArMzI2LDE0IEBAIFdvcmQgdmFsdWUgcmVhZCBmcm9tIHRoZSBhYnNvbHV0ZSBtZW1vcnkgbG9jYXRpb24uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3JkWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgZmV0Y2hfZGF0YV93b3JkKAorLQl1aW50IG9mZnNldCkKKyt1MTYKKytmZXRjaF9kYXRhX3dvcmQodWludCBvZmZzZXQpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KWdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNikgZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworICNlbmRpZgorLQlyZXR1cm4gKCpzeXNfcmR3KSgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0KTsKKysgICAgcmV0dXJuICgqc3lzX3JkdykgKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTM0MCwxNCArMzQ1LDE0IEBAIExvbmcgdmFsdWUgcmVhZCBmcm9tIHRoZSBhYnNvbHV0ZSBtZW1vcnkgbG9jYXRpb24uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3JkWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgZmV0Y2hfZGF0YV9sb25nKAorLQl1aW50IG9mZnNldCkKKyt1MzIKKytmZXRjaF9kYXRhX2xvbmcodWludCBvZmZzZXQpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KWdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNikgZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworICNlbmRpZgorLQlyZXR1cm4gKCpzeXNfcmRsKSgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0KTsKKysgICAgcmV0dXJuICgqc3lzX3JkbCkgKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTM2MCwxNSArMzY1LDE0IEBAIEJ5dGUgdmFsdWUgcmVhZCBmcm9tIHRoZSBhYnNvbHV0ZSBtZW1vcnkgbG9jYXRpb24uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3JkWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBmZXRjaF9kYXRhX2J5dGVfYWJzKAorLQl1aW50IHNlZ21lbnQsCistCXVpbnQgb2Zmc2V0KQorK3U4CisrZmV0Y2hfZGF0YV9ieXRlX2Ficyh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0KQorIHsKKyAjaWZkZWYgREVCVUcKKy0JaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCistCQl4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3Moc2VnbWVudCwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3Moc2VnbWVudCwgb2Zmc2V0KTsKKyAjZW5kaWYKKy0JcmV0dXJuICgqc3lzX3JkYikoKCh1MzIpc2VnbWVudCA8PCA0KSArIG9mZnNldCk7CisrICAgIHJldHVybiAoKnN5c19yZGIpICgoKHUzMikgc2VnbWVudCA8PCA0KSArIG9mZnNldCk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMzgxLDE1ICszODUsMTQgQEAgV29yZCB2YWx1ZSByZWFkIGZyb20gdGhlIGFic29sdXRlIG1lbW9yeSBsb2NhdGlvbi4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24gYXMgKCpzeXNfcmRYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBmZXRjaF9kYXRhX3dvcmRfYWJzKAorLQl1aW50IHNlZ21lbnQsCistCXVpbnQgb2Zmc2V0KQorK3UxNgorK2ZldGNoX2RhdGFfd29yZF9hYnModWludCBzZWdtZW50LCB1aW50IG9mZnNldCkKKyB7CisgI2lmZGVmIERFQlVHCistCWlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorLQkJeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKHNlZ21lbnQsIG9mZnNldCk7CisrICAgIGlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorKyAgICAgICAgeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKHNlZ21lbnQsIG9mZnNldCk7CisgI2VuZGlmCistCXJldHVybiAoKnN5c19yZHcpKCgodTMyKXNlZ21lbnQgPDwgNCkgKyBvZmZzZXQpOworKyAgICByZXR1cm4gKCpzeXNfcmR3KSAoKCh1MzIpIHNlZ21lbnQgPDwgNCkgKyBvZmZzZXQpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTQwMiwxNSArNDA1LDE0IEBAIExvbmcgdmFsdWUgcmVhZCBmcm9tIHRoZSBhYnNvbHV0ZSBtZW1vcnkgbG9jYXRpb24uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3JkWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgZmV0Y2hfZGF0YV9sb25nX2FicygKKy0JdWludCBzZWdtZW50LAorLQl1aW50IG9mZnNldCkKKyt1MzIKKytmZXRjaF9kYXRhX2xvbmdfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworICNlbmRpZgorLQlyZXR1cm4gKCpzeXNfcmRsKSgoKHUzMilzZWdtZW50IDw8IDQpICsgb2Zmc2V0KTsKKysgICAgcmV0dXJuICgqc3lzX3JkbCkgKCgodTMyKSBzZWdtZW50IDw8IDQpICsgb2Zmc2V0KTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC00MjQsMTUgKzQyNiwxNCBAQCB0aGUgY3VycmVudCAnZGVmYXVsdCcgc2VnbWVudCwgd2hpY2ggbWF5IGhhdmUgYmVlbiBvdmVycmlkZGVuLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiBhcyAoKnN5c193clgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBzdG9yZV9kYXRhX2J5dGUoCistCXVpbnQgb2Zmc2V0LAorLQl1OCB2YWwpCisrdm9pZAorK3N0b3JlX2RhdGFfYnl0ZSh1aW50IG9mZnNldCwgdTggdmFsKQorIHsKKyAjaWZkZWYgREVCVUcKKy0JaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCistCQl4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNilnZXRfZGF0YV9zZWdtZW50KCksIG9mZnNldCk7CisrICAgIGlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorKyAgICAgICAgeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKCh1MTYpIGdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKyAjZW5kaWYKKy0JKCpzeXNfd3JiKSgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0LCB2YWwpOworKyAgICAoKnN5c193cmIpICgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0LCB2YWwpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTQ0NiwxNSArNDQ3LDE0IEBAIHRoZSBjdXJyZW50ICdkZWZhdWx0JyBzZWdtZW50LCB3aGljaCBtYXkgaGF2ZSBiZWVuIG92ZXJyaWRkZW4uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3dyWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIHN0b3JlX2RhdGFfd29yZCgKKy0JdWludCBvZmZzZXQsCistCXUxNiB2YWwpCisrdm9pZAorK3N0b3JlX2RhdGFfd29yZCh1aW50IG9mZnNldCwgdTE2IHZhbCkKKyB7CisgI2lmZGVmIERFQlVHCistCWlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorLQkJeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKCh1MTYpZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KSBnZXRfZGF0YV9zZWdtZW50KCksIG9mZnNldCk7CisgI2VuZGlmCistCSgqc3lzX3dydykoKGdldF9kYXRhX3NlZ21lbnQoKSA8PCA0KSArIG9mZnNldCwgdmFsKTsKKysgICAgKCpzeXNfd3J3KSAoKGdldF9kYXRhX3NlZ21lbnQoKSA8PCA0KSArIG9mZnNldCwgdmFsKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC00NjgsMTUgKzQ2OCwxNCBAQCB0aGUgY3VycmVudCAnZGVmYXVsdCcgc2VnbWVudCwgd2hpY2ggbWF5IGhhdmUgYmVlbiBvdmVycmlkZGVuLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiBhcyAoKnN5c193clgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBzdG9yZV9kYXRhX2xvbmcoCistCXVpbnQgb2Zmc2V0LAorLQl1MzIgdmFsKQorK3ZvaWQKKytzdG9yZV9kYXRhX2xvbmcodWludCBvZmZzZXQsIHUzMiB2YWwpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KWdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNikgZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworICNlbmRpZgorLQkoKnN5c193cmwpKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisrICAgICgqc3lzX3dybCkgKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNDkwLDE2ICs0ODksMTQgQEAgV3JpdGVzIGEgYnl0ZSB2YWx1ZSB0byBhbiBhYnNvbHV0ZSBtZW1vcnkgbG9jYXRpb24uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3dyWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIHN0b3JlX2RhdGFfYnl0ZV9hYnMoCistCXVpbnQgc2VnbWVudCwKKy0JdWludCBvZmZzZXQsCistCXU4IHZhbCkKKyt2b2lkCisrc3RvcmVfZGF0YV9ieXRlX2Ficyh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0LCB1OCB2YWwpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworICNlbmRpZgorLQkoKnN5c193cmIpKCgodTMyKXNlZ21lbnQgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisrICAgICgqc3lzX3dyYikgKCgodTMyKSBzZWdtZW50IDw8IDQpICsgb2Zmc2V0LCB2YWwpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTUxMywxNiArNTEwLDE0IEBAIFdyaXRlcyBhIHdvcmQgdmFsdWUgdG8gYW4gYWJzb2x1dGUgbWVtb3J5IGxvY2F0aW9uLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiBhcyAoKnN5c193clgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBzdG9yZV9kYXRhX3dvcmRfYWJzKAorLQl1aW50IHNlZ21lbnQsCistCXVpbnQgb2Zmc2V0LAorLQl1MTYgdmFsKQorK3ZvaWQKKytzdG9yZV9kYXRhX3dvcmRfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQsIHUxNiB2YWwpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworICNlbmRpZgorLQkoKnN5c193cncpKCgodTMyKXNlZ21lbnQgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisrICAgICgqc3lzX3dydykgKCgodTMyKSBzZWdtZW50IDw8IDQpICsgb2Zmc2V0LCB2YWwpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTUzNiwxNiArNTMxLDE0IEBAIFdyaXRlcyBhIGxvbmcgdmFsdWUgdG8gYW4gYWJzb2x1dGUgbWVtb3J5IGxvY2F0aW9uLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiBhcyAoKnN5c193clgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBzdG9yZV9kYXRhX2xvbmdfYWJzKAorLQl1aW50IHNlZ21lbnQsCistCXVpbnQgb2Zmc2V0LAorLQl1MzIgdmFsKQorK3ZvaWQKKytzdG9yZV9kYXRhX2xvbmdfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQsIHUzMiB2YWwpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworICNlbmRpZgorLQkoKnN5c193cmwpKCgodTMyKXNlZ21lbnQgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisrICAgICgqc3lzX3dybCkgKCgodTMyKSBzZWdtZW50IDw8IDQpICsgb2Zmc2V0LCB2YWwpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTU1OSwzNyArNTUyLDM3IEBAIFJFTUFSS1M6CisgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcmVnaXN0ZXIgZ2l2ZW4gYnkgdGhlIFIvUk0gZmllbGQgb2YgdGhlCisgbW9kcm0gYnl0ZSwgZm9yIGJ5dGUgb3BlcmFuZHMuIEFsc28gZW5hYmxlcyB0aGUgZGVjb2Rpbmcgb2YgaW5zdHJ1Y3Rpb25zLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTgqIGRlY29kZV9ybV9ieXRlX3JlZ2lzdGVyKAorLQlpbnQgcmVnKQorK3U4ICoKKytkZWNvZGVfcm1fYnl0ZV9yZWdpc3RlcihpbnQgcmVnKQorIHsKKy0Jc3dpdGNoIChyZWcpIHsKKy0gICAgICBjYXNlIDA6CistCQlERUNPREVfUFJJTlRGKCJBTCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0FMOworLQkgIGNhc2UgMToKKy0JCURFQ09ERV9QUklOVEYoIkNMIik7CistCQlyZXR1cm4gJk0ueDg2LlJfQ0w7CistCSAgY2FzZSAyOgorLQkJREVDT0RFX1BSSU5URigiREwiKTsKKy0JCXJldHVybiAmTS54ODYuUl9ETDsKKy0JICBjYXNlIDM6CistCQlERUNPREVfUFJJTlRGKCJCTCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0JMOworLQkgIGNhc2UgNDoKKy0JCURFQ09ERV9QUklOVEYoIkFIIik7CistCQlyZXR1cm4gJk0ueDg2LlJfQUg7CistCSAgY2FzZSA1OgorLQkJREVDT0RFX1BSSU5URigiQ0giKTsKKy0JCXJldHVybiAmTS54ODYuUl9DSDsKKy0JICBjYXNlIDY6CistCQlERUNPREVfUFJJTlRGKCJESCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0RIOworLQkgIGNhc2UgNzoKKy0JCURFQ09ERV9QUklOVEYoIkJIIik7CistCQlyZXR1cm4gJk0ueDg2LlJfQkg7CistCX0KKy0JSEFMVF9TWVMoKTsKKy0JcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIE5PVCBSRUFDSEVEIE9SIFJFQUNIRUQgT04gRVJST1IgKi8KKysgICAgc3dpdGNoIChyZWcpIHsKKysgICAgY2FzZSAwOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQUwiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9BTDsKKysgICAgY2FzZSAxOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQ0wiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9DTDsKKysgICAgY2FzZSAyOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiREwiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9ETDsKKysgICAgY2FzZSAzOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQkwiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9CTDsKKysgICAgY2FzZSA0OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQUgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9BSDsKKysgICAgY2FzZSA1OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQ0giKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9DSDsKKysgICAgY2FzZSA2OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiREgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9ESDsKKysgICAgY2FzZSA3OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQkgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9CSDsKKysgICAgfQorKyAgICBIQUxUX1NZUygpOworKyAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogTk9UIFJFQUNIRUQgT1IgUkVBQ0hFRCBPTiBFUlJPUiAqLworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTYwMywzNiArNTk2LDM2IEBAIFJFTUFSS1M6CisgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcmVnaXN0ZXIgZ2l2ZW4gYnkgdGhlIFIvUk0gZmllbGQgb2YgdGhlCisgbW9kcm0gYnl0ZSwgZm9yIHdvcmQgb3BlcmFuZHMuICBBbHNvIGVuYWJsZXMgdGhlIGRlY29kaW5nIG9mIGluc3RydWN0aW9ucy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiogZGVjb2RlX3JtX3dvcmRfcmVnaXN0ZXIoCistCWludCByZWcpCisrdTE2ICoKKytkZWNvZGVfcm1fd29yZF9yZWdpc3RlcihpbnQgcmVnKQorIHsKKy0Jc3dpdGNoIChyZWcpIHsKKy0JICBjYXNlIDA6CistCQlERUNPREVfUFJJTlRGKCJBWCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0FYOworLQkgIGNhc2UgMToKKy0JCURFQ09ERV9QUklOVEYoIkNYIik7CistCQlyZXR1cm4gJk0ueDg2LlJfQ1g7CistCSAgY2FzZSAyOgorLQkJREVDT0RFX1BSSU5URigiRFgiKTsKKy0JCXJldHVybiAmTS54ODYuUl9EWDsKKy0JICBjYXNlIDM6CistCQlERUNPREVfUFJJTlRGKCJCWCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0JYOworLQkgIGNhc2UgNDoKKy0JCURFQ09ERV9QUklOVEYoIlNQIik7CistCQlyZXR1cm4gJk0ueDg2LlJfU1A7CistCSAgY2FzZSA1OgorLQkJREVDT0RFX1BSSU5URigiQlAiKTsKKy0JCXJldHVybiAmTS54ODYuUl9CUDsKKy0JICBjYXNlIDY6CistCQlERUNPREVfUFJJTlRGKCJTSSIpOworLQkJcmV0dXJuICZNLng4Ni5SX1NJOworLQkgIGNhc2UgNzoKKy0JCURFQ09ERV9QUklOVEYoIkRJIik7CistCQlyZXR1cm4gJk0ueDg2LlJfREk7CistCX0KKy0JSEFMVF9TWVMoKTsKKysgICAgc3dpdGNoIChyZWcpIHsKKysgICAgY2FzZSAwOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQVgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9BWDsKKysgICAgY2FzZSAxOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQ1giKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9DWDsKKysgICAgY2FzZSAyOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRFgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9EWDsKKysgICAgY2FzZSAzOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQlgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9CWDsKKysgICAgY2FzZSA0OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiU1AiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9TUDsKKysgICAgY2FzZSA1OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQlAiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9CUDsKKysgICAgY2FzZSA2OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiU0kiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9TSTsKKysgICAgY2FzZSA3OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiREkiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9ESTsKKysgICAgfQorKyAgICBIQUxUX1NZUygpOworICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogTk9UUkVBQ0hFRCBPUiBSRUFDSEVEIE9OIEVSUk9SICovCisgfQorIAorQEAgLTY0NywzNiArNjQwLDM2IEBAIFJFTUFSS1M6CisgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcmVnaXN0ZXIgZ2l2ZW4gYnkgdGhlIFIvUk0gZmllbGQgb2YgdGhlCisgbW9kcm0gYnl0ZSwgZm9yIGR3b3JkIG9wZXJhbmRzLiAgQWxzbyBlbmFibGVzIHRoZSBkZWNvZGluZyBvZiBpbnN0cnVjdGlvbnMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIqIGRlY29kZV9ybV9sb25nX3JlZ2lzdGVyKAorLQlpbnQgcmVnKQorK3UzMiAqCisrZGVjb2RlX3JtX2xvbmdfcmVnaXN0ZXIoaW50IHJlZykKKyB7CisgICAgIHN3aXRjaCAocmVnKSB7CistICAgICAgY2FzZSAwOgorLQkJREVDT0RFX1BSSU5URigiRUFYIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRUFYOworLQkgIGNhc2UgMToKKy0JCURFQ09ERV9QUklOVEYoIkVDWCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0VDWDsKKy0JICBjYXNlIDI6CistCQlERUNPREVfUFJJTlRGKCJFRFgiKTsKKy0JCXJldHVybiAmTS54ODYuUl9FRFg7CistCSAgY2FzZSAzOgorLQkJREVDT0RFX1BSSU5URigiRUJYIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRUJYOworLQkgIGNhc2UgNDoKKy0JCURFQ09ERV9QUklOVEYoIkVTUCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0VTUDsKKy0JICBjYXNlIDU6CistCQlERUNPREVfUFJJTlRGKCJFQlAiKTsKKy0JCXJldHVybiAmTS54ODYuUl9FQlA7CistCSAgY2FzZSA2OgorLQkJREVDT0RFX1BSSU5URigiRVNJIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRVNJOworLQkgIGNhc2UgNzoKKy0JCURFQ09ERV9QUklOVEYoIkVESSIpOworLQkJcmV0dXJuICZNLng4Ni5SX0VESTsKKy0JfQorLQlIQUxUX1NZUygpOworKyAgICBjYXNlIDA6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJFQVgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9FQVg7CisrICAgIGNhc2UgMToKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkVDWCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0VDWDsKKysgICAgY2FzZSAyOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRURYIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfRURYOworKyAgICBjYXNlIDM6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJFQlgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9FQlg7CisrICAgIGNhc2UgNDoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkVTUCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0VTUDsKKysgICAgY2FzZSA1OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRUJQIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfRUJQOworKyAgICBjYXNlIDY6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJFU0kiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9FU0k7CisrICAgIGNhc2UgNzoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkVESSIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0VESTsKKysgICAgfQorKyAgICBIQUxUX1NZUygpOworICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogTk9UUkVBQ0hFRCBPUiBSRUFDSEVEIE9OIEVSUk9SICovCisgfQorIAorQEAgLTY5MiwxMjYgKzY4NSwxMjkgQEAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcmVnaXN0ZXIgZ2l2ZW4gYnkgdGhlIFIvUk0gZmllbGQgb2YgdGhlCisgbW9kcm0gYnl0ZSwgZm9yIHdvcmQgb3BlcmFuZHMsIG1vZGlmaWVkIGZyb20gYWJvdmUgZm9yIHRoZSB3ZWlyZG8KKyBzcGVjaWFsIGNhc2Ugb2Ygc2VncmVnIG9wZXJhbmRzLiAgQWxzbyBlbmFibGVzIHRoZSBkZWNvZGluZyBvZiBpbnN0cnVjdGlvbnMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYqIGRlY29kZV9ybV9zZWdfcmVnaXN0ZXIoCistCWludCByZWcpCisrdTE2ICoKKytkZWNvZGVfcm1fc2VnX3JlZ2lzdGVyKGludCByZWcpCisgeworLQlzd2l0Y2ggKHJlZykgeworLQkgIGNhc2UgMDoKKy0JCURFQ09ERV9QUklOVEYoIkVTIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRVM7CistCSAgY2FzZSAxOgorLQkJREVDT0RFX1BSSU5URigiQ1MiKTsKKy0JCXJldHVybiAmTS54ODYuUl9DUzsKKy0JICBjYXNlIDI6CistCQlERUNPREVfUFJJTlRGKCJTUyIpOworLQkJcmV0dXJuICZNLng4Ni5SX1NTOworLQkgIGNhc2UgMzoKKy0JCURFQ09ERV9QUklOVEYoIkRTIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRFM7CistCSAgY2FzZSA0OgorLQkJREVDT0RFX1BSSU5URigiRlMiKTsKKy0JCXJldHVybiAmTS54ODYuUl9GUzsKKy0JICBjYXNlIDU6CistCQlERUNPREVfUFJJTlRGKCJHUyIpOworLQkJcmV0dXJuICZNLng4Ni5SX0dTOworLQkgIGNhc2UgNjoKKy0JICBjYXNlIDc6CistCQlERUNPREVfUFJJTlRGKCJJTExFR0FMIFNFR1JFRyIpOworLQkJYnJlYWs7CistCX0KKy0JSEFMVF9TWVMoKTsKKy0JcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIE5PVCBSRUFDSEVEIE9SIFJFQUNIRUQgT04gRVJST1IgKi8KKysgICAgc3dpdGNoIChyZWcpIHsKKysgICAgY2FzZSAwOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRVMiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9FUzsKKysgICAgY2FzZSAxOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQ1MiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9DUzsKKysgICAgY2FzZSAyOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiU1MiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9TUzsKKysgICAgY2FzZSAzOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRFMiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9EUzsKKysgICAgY2FzZSA0OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRlMiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9GUzsKKysgICAgY2FzZSA1OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiR1MiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9HUzsKKysgICAgY2FzZSA2OgorKyAgICBjYXNlIDc6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJJTExFR0FMIFNFR1JFRyIpOworKyAgICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgSEFMVF9TWVMoKTsKKysgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIE5PVCBSRUFDSEVEIE9SIFJFQUNIRUQgT04gRVJST1IgKi8KKyB9CisgCisgLyoKKyAgKgorICAqIHJldHVybiBvZmZzZXQgZnJvbSB0aGUgU0lCIEJ5dGUKKyAgKi8KKy11MzIgZGVjb2RlX3NpYl9hZGRyZXNzKGludCBzaWIsIGludCBtb2QpCisrdTMyCisrZGVjb2RlX3NpYl9hZGRyZXNzKGludCBzaWIsIGludCBtb2QpCisgeworICAgICB1MzIgYmFzZSA9IDAsIGkgPSAwLCBzY2FsZSA9IDE7CisgCistICAgIHN3aXRjaChzaWIgJiAweDA3KSB7CisrICAgIHN3aXRjaCAoc2liICYgMHgwNykgeworICAgICBjYXNlIDA6CistCURFQ09ERV9QUklOVEYoIltFQVhdIik7CistCWJhc2UgPSBNLng4Ni5SX0VBWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRUFYXSIpOworKyAgICAgICAgYmFzZSA9IE0ueDg2LlJfRUFYOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKKy0JREVDT0RFX1BSSU5URigiW0VDWF0iKTsKKy0JYmFzZSA9IE0ueDg2LlJfRUNYOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFQ1hdIik7CisrICAgICAgICBiYXNlID0gTS54ODYuUl9FQ1g7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorLQlERUNPREVfUFJJTlRGKCJbRURYXSIpOworLQliYXNlID0gTS54ODYuUl9FRFg7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiW0VEWF0iKTsKKysgICAgICAgIGJhc2UgPSBNLng4Ni5SX0VEWDsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDM6CistCURFQ09ERV9QUklOVEYoIltFQlhdIik7CistCWJhc2UgPSBNLng4Ni5SX0VCWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRUJYXSIpOworKyAgICAgICAgYmFzZSA9IE0ueDg2LlJfRUJYOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNDoKKy0JREVDT0RFX1BSSU5URigiW0VTUF0iKTsKKy0JYmFzZSA9IE0ueDg2LlJfRVNQOworLQlNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFU1BdIik7CisrICAgICAgICBiYXNlID0gTS54ODYuUl9FU1A7CisrICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNToKKy0JaWYgKG1vZCA9PSAwKSB7CistCSAgICBiYXNlID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0JICAgIERFQ09ERV9QUklOVEYyKCIlMDh4IiwgYmFzZSk7CistCX0gZWxzZSB7CistCSAgICBERUNPREVfUFJJTlRGKCJbRUJQXSIpOworLQkgICAgYmFzZSA9IE0ueDg2LlJfRVNQOworLQkgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKy0JfQorLQlicmVhazsKKysgICAgICAgIGlmIChtb2QgPT0gMCkgeworKyAgICAgICAgICAgIGJhc2UgPSBmZXRjaF9sb25nX2ltbSgpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDh4IiwgYmFzZSk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbRUJQXSIpOworKyAgICAgICAgICAgIGJhc2UgPSBNLng4Ni5SX0VTUDsKKysgICAgICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNjoKKy0JREVDT0RFX1BSSU5URigiW0VTSV0iKTsKKy0JYmFzZSA9IE0ueDg2LlJfRVNJOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFU0ldIik7CisrICAgICAgICBiYXNlID0gTS54ODYuUl9FU0k7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSA3OgorLQlERUNPREVfUFJJTlRGKCJbRURJXSIpOworLQliYXNlID0gTS54ODYuUl9FREk7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiW0VESV0iKTsKKysgICAgICAgIGJhc2UgPSBNLng4Ni5SX0VESTsKKysgICAgICAgIGJyZWFrOworICAgICB9CisgICAgIHN3aXRjaCAoKHNpYiA+PiAzKSAmIDB4MDcpIHsKKyAgICAgY2FzZSAwOgorLQlERUNPREVfUFJJTlRGKCJbRUFYIik7CistCWkgPSBNLng4Ni5SX0VBWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRUFYIik7CisrICAgICAgICBpID0gTS54ODYuUl9FQVg7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorLQlERUNPREVfUFJJTlRGKCJbRUNYIik7CistCWkgPSBNLng4Ni5SX0VDWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRUNYIik7CisrICAgICAgICBpID0gTS54ODYuUl9FQ1g7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorLQlERUNPREVfUFJJTlRGKCJbRURYIik7CistCWkgPSBNLng4Ni5SX0VEWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRURYIik7CisrICAgICAgICBpID0gTS54ODYuUl9FRFg7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAzOgorLQlERUNPREVfUFJJTlRGKCJbRUJYIik7CistCWkgPSBNLng4Ni5SX0VCWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRUJYIik7CisrICAgICAgICBpID0gTS54ODYuUl9FQlg7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSA0OgorLQlpID0gMDsKKy0JYnJlYWs7CisrICAgICAgICBpID0gMDsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDU6CistCURFQ09ERV9QUklOVEYoIltFQlAiKTsKKy0JaSA9IE0ueDg2LlJfRUJQOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFQlAiKTsKKysgICAgICAgIGkgPSBNLng4Ni5SX0VCUDsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDY6CistCURFQ09ERV9QUklOVEYoIltFU0kiKTsKKy0JaSA9IE0ueDg2LlJfRVNJOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFU0kiKTsKKysgICAgICAgIGkgPSBNLng4Ni5SX0VTSTsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDc6CistCURFQ09ERV9QUklOVEYoIltFREkiKTsKKy0JaSA9IE0ueDg2LlJfRURJOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFREkiKTsKKysgICAgICAgIGkgPSBNLng4Ni5SX0VESTsKKysgICAgICAgIGJyZWFrOworICAgICB9CisgICAgIHNjYWxlID0gMSA8PCAoKHNpYiA+PiA2KSAmIDB4MDMpOworICAgICBpZiAoKChzaWIgPj4gMykgJiAweDA3KSAhPSA0KSB7CistCWlmIChzY2FsZSA9PSAxKSB7CistCSAgICBERUNPREVfUFJJTlRGKCJdIik7CistCX0gZWxzZSB7CistCSAgICBERUNPREVfUFJJTlRGMigiKiVkXSIsIHNjYWxlKTsKKy0JfQorKyAgICAgICAgaWYgKHNjYWxlID09IDEpIHsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJdIik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiKiVkXSIsIHNjYWxlKTsKKysgICAgICAgIH0KKyAgICAgfQorICAgICByZXR1cm4gYmFzZSArIChpICogc2NhbGUpOworIH0KK0BAIC04MzYsNzQgKzgzMiw3NSBAQCBOT1RFOiAJVGhlIGNvZGUgd2hpY2ggc3BlY2lmaWVzIHRoZSBjb3JyZXNwb25kaW5nIHNlZ21lbnQgKGRzIHZzIHNzKQorIAkJaWYgYSBTUyBhY2Nlc3MgaXMgbmVlZGVkLCBzZXQgdGhpcyBiaXQuICBPdGhlcndpc2UsIERTIGFjY2VzcworIAkJb2NjdXJzICh1bmxlc3MgYW55IG9mIHRoZSBzZWdtZW50IG92ZXJyaWRlIGJpdHMgYXJlIHNldCkuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgZGVjb2RlX3JtMDBfYWRkcmVzcygKKy0JaW50IHJtKQorK3UzMgorK2RlY29kZV9ybTAwX2FkZHJlc3MoaW50IHJtKQorIHsKKyAgICAgdTMyIG9mZnNldDsKKyAgICAgaW50IHNpYjsKKyAKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9BRERSKSB7CisgICAgICAgICAvKiAzMi1iaXQgYWRkcmVzc2luZyAqLworLQlzd2l0Y2ggKHJtKSB7CistCSAgY2FzZSAwOgorLQkJREVDT0RFX1BSSU5URigiW0VBWF0iKTsKKy0JCXJldHVybiBNLng4Ni5SX0VBWDsKKy0JICBjYXNlIDE6CistCQlERUNPREVfUFJJTlRGKCJbRUNYXSIpOworLQkJcmV0dXJuIE0ueDg2LlJfRUNYOworLQkgIGNhc2UgMjoKKy0JCURFQ09ERV9QUklOVEYoIltFRFhdIik7CistCQlyZXR1cm4gTS54ODYuUl9FRFg7CistCSAgY2FzZSAzOgorLQkJREVDT0RFX1BSSU5URigiW0VCWF0iKTsKKy0JCXJldHVybiBNLng4Ni5SX0VCWDsKKy0JICBjYXNlIDQ6CistCQlzaWIgPSBmZXRjaF9ieXRlX2ltbSgpOworLQkJcmV0dXJuIGRlY29kZV9zaWJfYWRkcmVzcyhzaWIsIDApOworLQkgIGNhc2UgNToKKy0JCW9mZnNldCA9IGZldGNoX2xvbmdfaW1tKCk7CistCQlERUNPREVfUFJJTlRGMigiWyUwOHhdIiwgb2Zmc2V0KTsKKy0JCXJldHVybiBvZmZzZXQ7CistCSAgY2FzZSA2OgorLQkJREVDT0RFX1BSSU5URigiW0VTSV0iKTsKKy0JCXJldHVybiBNLng4Ni5SX0VTSTsKKy0JICBjYXNlIDc6CistCQlERUNPREVfUFJJTlRGKCJbRURJXSIpOworLQkJcmV0dXJuIE0ueDg2LlJfRURJOworLQl9CistCUhBTFRfU1lTKCk7CistICAgIH0gZWxzZSB7CisrICAgICAgICBzd2l0Y2ggKHJtKSB7CisrICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0VBWF0iKTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQVg7CisrICAgICAgICBjYXNlIDE6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0VDWF0iKTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQ1g7CisrICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0VEWF0iKTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FRFg7CisrICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0VCWF0iKTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQlg7CisrICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgc2liID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgICAgICAgICByZXR1cm4gZGVjb2RlX3NpYl9hZGRyZXNzKHNpYiwgMCk7CisrICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgb2Zmc2V0ID0gZmV0Y2hfbG9uZ19pbW0oKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiWyUwOHhdIiwgb2Zmc2V0KTsKKysgICAgICAgICAgICByZXR1cm4gb2Zmc2V0OworKyAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIltFU0ldIik7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRVNJOworKyAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIltFREldIik7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRURJOworKyAgICAgICAgfQorKyAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIC8qIDE2LWJpdCBhZGRyZXNzaW5nICovCistCXN3aXRjaCAocm0pIHsKKy0JICBjYXNlIDA6CistCQlERUNPREVfUFJJTlRGKCJbQlgrU0ldIik7CisrICAgICAgICBzd2l0Y2ggKHJtKSB7CisrICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0JYK1NJXSIpOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CWCArIE0ueDg2LlJfU0kpICYgMHhmZmZmOworLQkgIGNhc2UgMToKKy0JCURFQ09ERV9QUklOVEYoIltCWCtESV0iKTsKKysgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbQlgrREldIik7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JYICsgTS54ODYuUl9ESSkgJiAweGZmZmY7CistCSAgY2FzZSAyOgorLQkJREVDT0RFX1BSSU5URigiW0JQK1NJXSIpOworLQkJTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKysgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbQlArU0ldIik7CisrICAgICAgICAgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlAgKyBNLng4Ni5SX1NJKSAmIDB4ZmZmZjsKKy0JICBjYXNlIDM6CistCQlERUNPREVfUFJJTlRGKCJbQlArREldIik7CistCQlNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIltCUCtESV0iKTsKKysgICAgICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CUCArIE0ueDg2LlJfREkpICYgMHhmZmZmOworLQkgIGNhc2UgNDoKKy0JCURFQ09ERV9QUklOVEYoIltTSV0iKTsKKy0JCXJldHVybiBNLng4Ni5SX1NJOworLQkgIGNhc2UgNToKKy0JCURFQ09ERV9QUklOVEYoIltESV0iKTsKKy0JCXJldHVybiBNLng4Ni5SX0RJOworLQkgIGNhc2UgNjoKKy0JCW9mZnNldCA9IGZldGNoX3dvcmRfaW1tKCk7CistCQlERUNPREVfUFJJTlRGMigiWyUwNHhdIiwgb2Zmc2V0KTsKKy0JCXJldHVybiBvZmZzZXQ7CistCSAgY2FzZSA3OgorLQkJREVDT0RFX1BSSU5URigiW0JYXSIpOworLQkJcmV0dXJuIE0ueDg2LlJfQlg7CistCX0KKy0JSEFMVF9TWVMoKTsKKysgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbU0ldIik7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfU0k7CisrICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0RJXSIpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0RJOworKyAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIG9mZnNldCA9IGZldGNoX3dvcmRfaW1tKCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIlslMDR4XSIsIG9mZnNldCk7CisrICAgICAgICAgICAgcmV0dXJuIG9mZnNldDsKKysgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbQlhdIik7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfQlg7CisrICAgICAgICB9CisrICAgICAgICBIQUxUX1NZUygpOworICAgICB9CisgICAgIHJldHVybiAwOworIH0KK0BAIC05MTksNzkgKzkxNiw4MCBAQCBSRU1BUktTOgorIFJldHVybiB0aGUgb2Zmc2V0IGdpdmVuIGJ5IG1vZD0wMSBhZGRyZXNzaW5nLiAgQWxzbyBlbmFibGVzIHRoZQorIGRlY29kaW5nIG9mIGluc3RydWN0aW9ucy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBkZWNvZGVfcm0wMV9hZGRyZXNzKAorLQlpbnQgcm0pCisrdTMyCisrZGVjb2RlX3JtMDFfYWRkcmVzcyhpbnQgcm0pCisgeworICAgICBpbnQgZGlzcGxhY2VtZW50ID0gMDsKKyAgICAgaW50IHNpYjsKKyAKKyAgICAgLyogRmV0Y2ggZGlzcDggaWYgbm8gU0lCIGJ5dGUgKi8KKyAgICAgaWYgKCEoKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9BRERSKSAmJiAocm0gPT0gNCkpKQorLQlkaXNwbGFjZW1lbnQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgICAgIGRpc3BsYWNlbWVudCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKyAKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9BRERSKSB7CisgICAgICAgICAvKiAzMi1iaXQgYWRkcmVzc2luZyAqLworLQlzd2l0Y2ggKHJtKSB7CistCSAgY2FzZSAwOgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0VBWF0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRUFYICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgMToKKy0JCURFQ09ERV9QUklOVEYyKCIlZFtFQ1hdIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBNLng4Ni5SX0VDWCArIGRpc3BsYWNlbWVudDsKKy0JICBjYXNlIDI6CistCQlERUNPREVfUFJJTlRGMigiJWRbRURYXSIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gTS54ODYuUl9FRFggKyBkaXNwbGFjZW1lbnQ7CistCSAgY2FzZSAzOgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0VCWF0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRUJYICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgNDoKKy0JCXNpYiA9IGZldGNoX2J5dGVfaW1tKCk7CistCQlkaXNwbGFjZW1lbnQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0JCURFQ09ERV9QUklOVEYyKCIlZCIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gZGVjb2RlX3NpYl9hZGRyZXNzKHNpYiwgMSkgKyBkaXNwbGFjZW1lbnQ7CistCSAgY2FzZSA1OgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0VCUF0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRUJQICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgNjoKKy0JCURFQ09ERV9QUklOVEYyKCIlZFtFU0ldIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBNLng4Ni5SX0VTSSArIGRpc3BsYWNlbWVudDsKKy0JICBjYXNlIDc6CistCQlERUNPREVfUFJJTlRGMigiJWRbRURJXSIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gTS54ODYuUl9FREkgKyBkaXNwbGFjZW1lbnQ7CistCX0KKy0JSEFMVF9TWVMoKTsKKy0gICAgfSBlbHNlIHsKKysgICAgICAgIHN3aXRjaCAocm0pIHsKKysgICAgICAgIGNhc2UgMDoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbRUFYXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRUFYICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSAxOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtFQ1hdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQ1ggKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0VEWF0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VEWCArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbRUJYXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRUJYICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSA0OgorKyAgICAgICAgICAgIHNpYiA9IGZldGNoX2J5dGVfaW1tKCk7CisrICAgICAgICAgICAgZGlzcGxhY2VtZW50ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZCIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIGRlY29kZV9zaWJfYWRkcmVzcyhzaWIsIDEpICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtFQlBdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQlAgKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0VTSV0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VTSSArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbRURJXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRURJICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgfQorKyAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIC8qIDE2LWJpdCBhZGRyZXNzaW5nICovCistCXN3aXRjaCAocm0pIHsKKy0JICBjYXNlIDA6CistCQlERUNPREVfUFJJTlRGMigiJWRbQlgrU0ldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgIHN3aXRjaCAocm0pIHsKKysgICAgICAgIGNhc2UgMDoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbQlgrU0ldIiwgZGlzcGxhY2VtZW50KTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlggKyBNLng4Ni5SX1NJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDE6CistCQlERUNPREVfUFJJTlRGMigiJWRbQlgrREldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbQlgrREldIiwgZGlzcGxhY2VtZW50KTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlggKyBNLng4Ni5SX0RJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDI6CistCQlERUNPREVfUFJJTlRGMigiJWRbQlArU0ldIiwgZGlzcGxhY2VtZW50KTsKKy0JCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisrICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0JQK1NJXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlAgKyBNLng4Ni5SX1NJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDM6CistCQlERUNPREVfUFJJTlRGMigiJWRbQlArREldIiwgZGlzcGxhY2VtZW50KTsKKy0JCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisrICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0JQK0RJXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlAgKyBNLng4Ni5SX0RJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDQ6CistCQlERUNPREVfUFJJTlRGMigiJWRbU0ldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbU0ldIiwgZGlzcGxhY2VtZW50KTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfU0kgKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQkgIGNhc2UgNToKKy0JCURFQ09ERV9QUklOVEYyKCIlZFtESV0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtESV0iLCBkaXNwbGFjZW1lbnQpOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9ESSArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSA2OgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0JQXSIsIGRpc3BsYWNlbWVudCk7CistCQlNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtCUF0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIE0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JQICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDc6CistCQlERUNPREVfUFJJTlRGMigiJWRbQlhdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbQlhdIiwgZGlzcGxhY2VtZW50KTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlggKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQl9CistCUhBTFRfU1lTKCk7CisrICAgICAgICB9CisrICAgICAgICBIQUxUX1NZUygpOworICAgICB9CisgICAgIHJldHVybiAwOyAgICAgICAgICAgICAgICAgICAvKiBTSE9VTEQgTk9UIEhBUFBFTiAqLworIH0KK0BAIC0xMDA3LDg2ICsxMDA1LDg3IEBAIFJFTUFSS1M6CisgUmV0dXJuIHRoZSBvZmZzZXQgZ2l2ZW4gYnkgbW9kPTEwIGFkZHJlc3NpbmcuICBBbHNvIGVuYWJsZXMgdGhlCisgZGVjb2Rpbmcgb2YgaW5zdHJ1Y3Rpb25zLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIGRlY29kZV9ybTEwX2FkZHJlc3MoCistCWludCBybSkKKyt1MzIKKytkZWNvZGVfcm0xMF9hZGRyZXNzKGludCBybSkKKyB7CisgICAgIHUzMiBkaXNwbGFjZW1lbnQgPSAwOworICAgICBpbnQgc2liOworIAorICAgICAvKiBGZXRjaCBkaXNwMTYgaWYgMTYtYml0IGFkZHIgbW9kZSAqLworICAgICBpZiAoIShNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfQUREUikpCistCWRpc3BsYWNlbWVudCA9ICh1MTYpZmV0Y2hfd29yZF9pbW0oKTsKKysgICAgICAgIGRpc3BsYWNlbWVudCA9ICh1MTYpIGZldGNoX3dvcmRfaW1tKCk7CisgICAgIGVsc2UgeworLQkvKiBGZXRjaCBkaXNwMzIgaWYgbm8gU0lCIGJ5dGUgKi8KKy0JaWYgKHJtICE9IDQpCistCSAgICBkaXNwbGFjZW1lbnQgPSAodTMyKWZldGNoX2xvbmdfaW1tKCk7CisrICAgICAgICAvKiBGZXRjaCBkaXNwMzIgaWYgbm8gU0lCIGJ5dGUgKi8KKysgICAgICAgIGlmIChybSAhPSA0KQorKyAgICAgICAgICAgIGRpc3BsYWNlbWVudCA9ICh1MzIpIGZldGNoX2xvbmdfaW1tKCk7CisgICAgIH0KKyAKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9BRERSKSB7CisgICAgICAgICAvKiAzMi1iaXQgYWRkcmVzc2luZyAqLworLSAgICAgIHN3aXRjaCAocm0pIHsKKy0JICBjYXNlIDA6CistCQlERUNPREVfUFJJTlRGMigiJTA4eFtFQVhdIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBNLng4Ni5SX0VBWCArIGRpc3BsYWNlbWVudDsKKy0JICBjYXNlIDE6CistCQlERUNPREVfUFJJTlRGMigiJTA4eFtFQ1hdIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBNLng4Ni5SX0VDWCArIGRpc3BsYWNlbWVudDsKKy0JICBjYXNlIDI6CistCQlERUNPREVfUFJJTlRGMigiJTA4eFtFRFhdIiwgZGlzcGxhY2VtZW50KTsKKy0JCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CistCQlyZXR1cm4gTS54ODYuUl9FRFggKyBkaXNwbGFjZW1lbnQ7CistCSAgY2FzZSAzOgorLQkJREVDT0RFX1BSSU5URjIoIiUwOHhbRUJYXSIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gTS54ODYuUl9FQlggKyBkaXNwbGFjZW1lbnQ7CistCSAgY2FzZSA0OgorLQkJc2liID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKy0JCWRpc3BsYWNlbWVudCA9ICh1MzIpZmV0Y2hfbG9uZ19pbW0oKTsKKy0JCURFQ09ERV9QUklOVEYyKCIlMDh4IiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBkZWNvZGVfc2liX2FkZHJlc3Moc2liLCAyKSArIGRpc3BsYWNlbWVudDsKKy0JCWJyZWFrOworLQkgIGNhc2UgNToKKy0JCURFQ09ERV9QUklOVEYyKCIlMDh4W0VCUF0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRUJQICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgNjoKKy0JCURFQ09ERV9QUklOVEYyKCIlMDh4W0VTSV0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRVNJICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgNzoKKy0JCURFQ09ERV9QUklOVEYyKCIlMDh4W0VESV0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRURJICsgZGlzcGxhY2VtZW50OworLQl9CistCUhBTFRfU1lTKCk7CistICAgIH0gZWxzZSB7CisrICAgICAgICBzd2l0Y2ggKHJtKSB7CisrICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwOHhbRUFYXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRUFYICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSAxOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDh4W0VDWF0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VDWCArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA4eFtFRFhdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VEWCArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA4eFtFQlhdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQlggKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgc2liID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgICAgICAgICBkaXNwbGFjZW1lbnQgPSAodTMyKSBmZXRjaF9sb25nX2ltbSgpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDh4IiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gZGVjb2RlX3NpYl9hZGRyZXNzKHNpYiwgMikgKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwOHhbRUJQXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRUJQICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDh4W0VTSV0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VTSSArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA4eFtFREldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FREkgKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICB9CisrICAgICAgICBIQUxUX1NZUygpOworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgLyogMTYtYml0IGFkZHJlc3NpbmcgKi8KKy0gICAgICBzd2l0Y2ggKHJtKSB7CistCSAgY2FzZSAwOgorKyAgICAgICAgc3dpdGNoIChybSkgeworKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4W0JYK1NJXSIsIGRpc3BsYWNlbWVudCk7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JYICsgTS54ODYuUl9TSSArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4W0JYK0RJXSIsIGRpc3BsYWNlbWVudCk7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JYICsgTS54ODYuUl9ESSArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSAyOgorLQkJREVDT0RFX1BSSU5URjIoIiUwNHhbQlArU0ldIiwgZGlzcGxhY2VtZW50KTsKKy0JCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisrICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhbQlArU0ldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CUCArIE0ueDg2LlJfU0kgKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQkgIGNhc2UgMzoKKy0JCURFQ09ERV9QUklOVEYyKCIlMDR4W0JQK0RJXSIsIGRpc3BsYWNlbWVudCk7CistCQlNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4W0JQK0RJXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlAgKyBNLng4Ni5SX0RJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhbU0ldIiwgZGlzcGxhY2VtZW50KTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfU0kgKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQkgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA0eFtESV0iLCBkaXNwbGFjZW1lbnQpOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9ESSArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSA2OgorLQkJREVDT0RFX1BSSU5URjIoIiUwNHhbQlBdIiwgZGlzcGxhY2VtZW50KTsKKy0JCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisrICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhbQlBdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CUCArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSA3OgorKyAgICAgICAgY2FzZSA3OgorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4W0JYXSIsIGRpc3BsYWNlbWVudCk7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JYICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JfQorLQlIQUxUX1NZUygpOworKyAgICAgICAgfQorKyAgICAgICAgSEFMVF9TWVMoKTsKKyAgICAgfQorICAgICByZXR1cm4gMDsKKyAgICAgLypOT1RSRUFDSEVEICovCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUvZnB1LmMgYi9saWJzL3g4NmVtdS9mcHUuYworaW5kZXggYjcyZGUxZS4uMGRhYjA1YyAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L2ZwdS5jCisrKysgYi9saWJzL3g4NmVtdS9mcHUuYworQEAgLTQyLDcgKzQyLDggQEAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEltcGxlbWVudGF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorIC8qIG9wY29kZT0weGQ4ICovCistdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q4KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyt2b2lkCisreDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kOCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJFU0MgRDhcbiIpOworQEAgLTUyLDcgKzUzLDcgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q4KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAKKyAjaWZkZWYgREVCVUcKKyAKKy1zdGF0aWMgY2hhciAqeDg2ZW11X2ZwdV9vcF9kOV90YWJbXSA9IHsKKytzdGF0aWMgY29uc3QgY2hhciAqeDg2ZW11X2ZwdV9vcF9kOV90YWJbXSA9IHsKKyAgICAgIkZMRFx0RFdPUkQgUFRSICIsICJFU0NfRDlcdCIsICJGU1RcdERXT1JEIFBUUiAiLCAiRlNUUFx0RFdPUkQgUFRSICIsCisgICAgICJGTERFTlZcdCIsICJGTERDV1x0IiwgIkZTVEVOVlx0IiwgIkZTVENXXHQiLAorIAorQEAgLTYzLDcgKzY0LDcgQEAgc3RhdGljIGNoYXIgKng4NmVtdV9mcHVfb3BfZDlfdGFiW10gPSB7CisgICAgICJGTERFTlZcdCIsICJGTERDV1x0IiwgIkZTVEVOVlx0IiwgIkZTVENXXHQiLAorIH07CisgCistc3RhdGljIGNoYXIgKng4NmVtdV9mcHVfb3BfZDlfdGFiMVtdID0geworK3N0YXRpYyBjb25zdCBjaGFyICp4ODZlbXVfZnB1X29wX2Q5X3RhYjFbXSA9IHsKKyAgICAgIkZMRFx0IiwgIkZMRFx0IiwgIkZMRFx0IiwgIkZMRFx0IiwKKyAgICAgIkZMRFx0IiwgIkZMRFx0IiwgIkZMRFx0IiwgIkZMRFx0IiwKKyAKK0BAIC04OSwxMCArOTAsMTEgQEAgc3RhdGljIGNoYXIgKng4NmVtdV9mcHVfb3BfZDlfdGFiMVtdID0geworICAgICAiRlJORElOVCIsICJGU0NBTEUiLCAiRVNDX0Q5IiwgIkVTQ19EOSIsCisgfTsKKyAKKy0jZW5kaWYgLyogREVCVUcgKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQlVHICovCisgCisgLyogb3Bjb2RlPTB4ZDkgKi8KKy12b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZDkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3ZvaWQKKyt4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q5KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0ID0gMDsKK0BAIC0xMDMsNTYgKzEwNSw1OCBAQCB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZDkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICNpZmRlZiBERUJVRworICAgICBpZiAobW9kICE9IDMpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVElOU1RSMzIoeDg2ZW11X2ZwdV9vcF9kOV90YWIsIG1vZCwgcmgsIHJsKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoeDg2ZW11X2ZwdV9vcF9kOV90YWIxWyhyaCA8PCAzKSArIHJsXSk7CisgICAgIH0KKyAjZW5kaWYKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDA6CisrICAgIGNhc2UgMDoKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDE6CisrICAgIGNhc2UgMToKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDI6CisrICAgIGNhc2UgMjoKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCistCQlzdGtlbGVtID0gKHU4KXJsOworLQkJaWYgKHJoIDwgNCkgeworLQkJCQlERUNPREVfUFJJTlRGMigiU1QoJWQpXG4iLCBzdGtlbGVtKTsKKy0JCX0gZWxzZSB7CistCQkJCURFQ09ERV9QUklOVEYoIlxuIik7CistCQl9CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBzdGtlbGVtID0gKHU4KSBybDsKKysgICAgICAgIGlmIChyaCA8IDQpIHsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiU1QoJWQpXG4iLCBzdGtlbGVtKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisrICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgfQorICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKKyAgICAgLyogZXhlY3V0ZSAqLworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMzoKKysgICAgY2FzZSAzOgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZsZChYODZFTVVfRlBVX1NUS1RPUCwgc3RrZWxlbSk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnhjaChYODZFTVVfRlBVX1NUS1RPUCwgc3RrZWxlbSk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICBzd2l0Y2ggKHJsKSB7CistICAgICAgICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1Jfbm9wKCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICBjYXNlIDM6CisrICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzdHAoWDg2RU1VX0ZQVV9TVEtUT1AsIHN0a2VsZW0pOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgc3dpdGNoIChybCkgeworICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZjaHMoWDg2RU1VX0ZQVV9TVEtUT1ApOworQEAgLTE3MywxMzMgKzE3NywxMzMgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q5KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CisgCistICAgICAgICAgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICBzd2l0Y2ggKHJsKSB7CistICAgICAgICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmxkMShYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZsZGwydChYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZsZGwyZShYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZsZHBpKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmxkbGcyKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmxkbG4yKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmxkeihYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAvKiA3ICovCisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CisgCistICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICBzd2l0Y2ggKHJsKSB7CistICAgICAgICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZjJ4bTEoWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9meWwyeChYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZwdGFuKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnBhdGFuKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnh0cmFjdChYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2RlY3N0cCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9pbmNzdHAoKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworIAorLSAgICAgICAgICBjYXNlIDc6CisrICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgc3dpdGNoIChybCkgeworLSAgICAgICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZwcmVtKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDE6CisrICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnlsMnhwMShYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzcXJ0KFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnJuZGludChYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzY2FsZShYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA2OgorLSAgICAgICAgICAgICAgY2FzZSA3OgorLSAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CisgCistICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgICAgIGNhc2UgMDoKKysgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mbGQoWDg2RU1VX0ZQVV9GTE9BVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZzdChYODZFTVVfRlBVX0ZMT0FULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN0cChYODZFTVVfRlBVX0ZMT0FULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmxkZW52KFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZsZGN3KFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZzdGVudihYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mc3RjdyhYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgIH0KKyAjZWxzZQorLSAgICAodm9pZClkZXN0b2Zmc2V0OworLSAgICAodm9pZClzdGtlbGVtOworLSNlbmRpZiAvKiBYODZFTVVfRlBVX1BSRVNFTlQgKi8KKysgICAgKHZvaWQpIGRlc3RvZmZzZXQ7CisrICAgICh2b2lkKSBzdGtlbGVtOworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogWDg2RU1VX0ZQVV9QUkVTRU5UICovCisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSX05PX1RSQUNFKCk7CisgfQorIAorICNpZmRlZiBERUJVRworIAorLWNoYXIgKng4NmVtdV9mcHVfb3BfZGFfdGFiW10gPSB7Cisrc3RhdGljIGNvbnN0IGNoYXIgKng4NmVtdV9mcHVfb3BfZGFfdGFiW10gPSB7CisgICAgICJGSUFERFx0RFdPUkQgUFRSICIsICJGSU1VTFx0RFdPUkQgUFRSICIsICJGSUNPTVx0RFdPUkQgUFRSICIsCisgICAgICJGSUNPTVBcdERXT1JEIFBUUiAiLAorICAgICAiRklTVUJcdERXT1JEIFBUUiAiLCAiRklTVUJSXHREV09SRCBQVFIgIiwgIkZJRElWXHREV09SRCBQVFIgIiwKK0BAIC0zMDksNyArMzEzLDcgQEAgY2hhciAqeDg2ZW11X2ZwdV9vcF9kYV90YWJbXSA9IHsKKyAgICAgIkZJQ09NUFx0RFdPUkQgUFRSICIsCisgICAgICJGSVNVQlx0RFdPUkQgUFRSICIsICJGSVNVQlJcdERXT1JEIFBUUiAiLCAiRklESVZcdERXT1JEIFBUUiAiLAorICAgICAiRklESVZSXHREV09SRCBQVFIgIiwKKy0gICAgCisrCisgICAgICJGSUFERFx0RFdPUkQgUFRSICIsICJGSU1VTFx0RFdPUkQgUFRSICIsICJGSUNPTVx0RFdPUkQgUFRSICIsCisgICAgICJGSUNPTVBcdERXT1JEIFBUUiAiLAorICAgICAiRklTVUJcdERXT1JEIFBUUiAiLCAiRklTVUJSXHREV09SRCBQVFIgIiwgIkZJRElWXHREV09SRCBQVFIgIiwKK0BAIC0zMTksMTAgKzMyMywxMSBAQCBjaGFyICp4ODZlbXVfZnB1X29wX2RhX3RhYltdID0geworICAgICAiRVNDX0RBICAgICAiLCAiRVNDX0RBICIsICJFU0NfREEgICAiLCAiRVNDX0RBICIsCisgfTsKKyAKKy0jZW5kaWYgLyogREVCVUcgKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQlVHICovCisgCisgLyogb3Bjb2RlPTB4ZGEgKi8KKy12b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3ZvaWQKKyt4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0ID0gMDsKK0BAIC0zMzIsNTkgKzMzNyw1OSBAQCB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworICAgICBERUNPREVfUFJJTlRJTlNUUjMyKHg4NmVtdV9mcHVfb3BfZGFfdGFiLCBtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAobW9kKSB7CistICAgICAgY2FzZSAwOgorKyAgICBjYXNlIDA6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAxOgorKyAgICBjYXNlIDE6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAyOgorKyAgICBjYXNlIDI6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAzOiAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKy0JCXN0a2VsZW0gPSAodTgpcmw7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBzdGtlbGVtID0gKHU4KSBybDsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJcdFNUKCVkKSxTVFxuIiwgc3RrZWxlbSk7CisgICAgICAgICBicmVhazsKKyAgICAgfQorICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDM6CisrICAgIGNhc2UgMzoKKyAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgYnJlYWs7CistICAgICAgZGVmYXVsdDoKKysgICAgZGVmYXVsdDoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9pYWRkKFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ltdWwoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01faWNvbShYODZFTVVfRlBVX1NIT1JULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9pY29tcChYODZFTVVfRlBVX1NIT1JULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9pc3ViKFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDU6CisrICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2lzdWJyKFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDY6CisrICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2lkaXYoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01faWRpdnIoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgIH0KKyAjZWxzZQorLSAgICAodm9pZClkZXN0b2Zmc2V0OworLSAgICAodm9pZClzdGtlbGVtOworKyAgICAodm9pZCkgZGVzdG9mZnNldDsKKysgICAgKHZvaWQpIHN0a2VsZW07CisgI2VuZGlmCisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSX05PX1RSQUNFKCk7CitAQCAtMzkyLDcgKzM5Nyw3IEBAIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgCisgI2lmZGVmIERFQlVHCisgCistY2hhciAqeDg2ZW11X2ZwdV9vcF9kYl90YWJbXSA9IHsKKytzdGF0aWMgY29uc3QgY2hhciAqeDg2ZW11X2ZwdV9vcF9kYl90YWJbXSA9IHsKKyAgICAgIkZJTERcdERXT1JEIFBUUiAiLCAiRVNDX0RCXHQxOSIsICJGSVNUXHREV09SRCBQVFIgIiwgIkZJU1RQXHREV09SRCBQVFIgIiwKKyAgICAgIkVTQ19EQlx0MUMiLCAiRkxEXHRUQllURSBQVFIgIiwgIkVTQ19EQlx0MUUiLCAiRlNUUFx0VEJZVEUgUFRSICIsCisgCitAQCAtNDAzLDEwICs0MDgsMTEgQEAgY2hhciAqeDg2ZW11X2ZwdV9vcF9kYl90YWJbXSA9IHsKKyAgICAgIkVTQ19EQlx0MUMiLCAiRkxEXHRUQllURSBQVFIgIiwgIkVTQ19EQlx0MUUiLCAiRlNUUFx0VEJZVEUgUFRSICIsCisgfTsKKyAKKy0jZW5kaWYgLyogREVCVUcgKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQlVHICovCisgCisgLyogb3Bjb2RlPTB4ZGIgKi8KKy12b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3ZvaWQKKyt4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RiKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0ID0gMDsKK0BAIC00MTYsMTA0ICs0MjIsMTA2IEBAIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgI2lmZGVmIERFQlVHCisgICAgIGlmIChtb2QgIT0gMykgeworICAgICAgICAgREVDT0RFX1BSSU5USU5TVFIzMih4ODZlbXVfZnB1X29wX2RiX3RhYiwgbW9kLCByaCwgcmwpOworLSAgICB9IGVsc2UgaWYgKHJoID09IDQpIHsgICAgICAgLyogPT09IDExIDEwIDAgbm5uICovCisrICAgIH0KKysgICAgZWxzZSBpZiAocmggPT0gNCkgeyAgICAgICAgIC8qID09PSAxMSAxMCAwIG5ubiAqLworICAgICAgICAgc3dpdGNoIChybCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRkVOSVxuIik7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJGRElTSVxuIik7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJGQ0xFWFxuIik7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJGSU5JVFxuIik7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiRVNDX0RCICUweFxuIiwgKG1vZCA8PCA2KSArIChyaCA8PCAzKSArIChybCkpOworICAgICB9CistI2VuZGlmIC8qIERFQlVHICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUJVRyAqLworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMDoKKysgICAgY2FzZSAwOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAxOgorKyAgICBjYXNlIDE6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDI6CisrICAgIGNhc2UgMjoKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGJyZWFrOworICAgICB9CisgI2lmZGVmIFg4NkVNVV9GUFVfUFJFU0VOVAorICAgICAvKiBleGVjdXRlICovCisgICAgIHN3aXRjaCAobW9kKSB7CistICAgICAgY2FzZSAzOgorKyAgICBjYXNlIDM6CisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICBzd2l0Y2ggKHJsKSB7CistICAgICAgICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmVuaSgpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mZGlzaSgpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mY2xleCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9maW5pdCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgICBkZWZhdWx0OgorKyAgICBkZWZhdWx0OgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpbGQoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maXN0KFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDM6CisrICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2Zpc3RwKFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmxkKFg4NkVNVV9GUFVfTERCTCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgY2FzZSA3OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mc3RwKFg4NkVNVV9GUFVfTERCTCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgIH0KKyAjZWxzZQorLSAgICAodm9pZClkZXN0b2Zmc2V0OworKyAgICAodm9pZCkgZGVzdG9mZnNldDsKKyAjZW5kaWYKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFJfTk9fVFJBQ0UoKTsKKyB9CisgCisgI2lmZGVmIERFQlVHCistY2hhciAqeDg2ZW11X2ZwdV9vcF9kY190YWJbXSA9IHsKKytzdGF0aWMgY29uc3QgY2hhciAqeDg2ZW11X2ZwdV9vcF9kY190YWJbXSA9IHsKKyAgICAgIkZBRERcdFFXT1JEIFBUUiAiLCAiRk1VTFx0UVdPUkQgUFRSICIsICJGQ09NXHRRV09SRCBQVFIgIiwKKyAgICAgIkZDT01QXHRRV09SRCBQVFIgIiwKKyAgICAgIkZTVUJcdFFXT1JEIFBUUiAiLCAiRlNVQlJcdFFXT1JEIFBUUiAiLCAiRkRJVlx0UVdPUkQgUFRSICIsCitAQCAtNTMyLDEwICs1NDAsMTEgQEAgY2hhciAqeDg2ZW11X2ZwdV9vcF9kY190YWJbXSA9IHsKKyAgICAgIkZBRERcdCIsICJGTVVMXHQiLCAiRkNPTVx0IiwgIkZDT01QXHQiLAorICAgICAiRlNVQlJcdCIsICJGU1VCXHQiLCAiRkRJVlJcdCIsICJGRElWXHQiLAorIH07CistI2VuZGlmIC8qIERFQlVHICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUJVRyAqLworIAorIC8qIG9wY29kZT0weGRjICovCistdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RjKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyt2b2lkCisreDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldCA9IDA7CitAQCAtNTQ1LDg1ICs1NTQsODUgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RjKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKyAgICAgREVDT0RFX1BSSU5USU5TVFIzMih4ODZlbXVfZnB1X29wX2RjX3RhYiwgbW9kLCByaCwgcmwpOworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMDoKKysgICAgY2FzZSAwOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMToKKysgICAgY2FzZSAxOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMjoKKysgICAgY2FzZSAyOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKy0JCXN0a2VsZW0gPSAodTgpcmw7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBzdGtlbGVtID0gKHU4KSBybDsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJcdFNUKCVkKSxTVFxuIiwgc3RrZWxlbSk7CisgICAgICAgICBicmVhazsKKyAgICAgfQorICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKKyAgICAgLyogZXhlY3V0ZSAqLworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMzoKKysgICAgY2FzZSAzOgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZhZGQoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZtdWwoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Zjb20oc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDM6CisrICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Zjb21wKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mc3VicihzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnN1YihzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmRpdnIoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDc6CisrICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZkaXYoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgICAgZGVmYXVsdDoKKysgICAgZGVmYXVsdDoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mYWRkKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mbXVsKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mY29tKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mY29tcChYODZFTVVfRlBVX0RPVUJMRSwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN1YihYODZFTVVfRlBVX0RPVUJMRSwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN1YnIoWDg2RU1VX0ZQVV9ET1VCTEUsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDY6CisrICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZkaXYoWDg2RU1VX0ZQVV9ET1VCTEUsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDc6CisrICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZkaXZyKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgfQorICNlbHNlCistICAgICh2b2lkKWRlc3RvZmZzZXQ7CistICAgICh2b2lkKXN0a2VsZW07CisrICAgICh2b2lkKSBkZXN0b2Zmc2V0OworKyAgICAodm9pZCkgc3RrZWxlbTsKKyAjZW5kaWYKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFJfTk9fVFJBQ0UoKTsKK0BAIC02MzEsNyArNjQwLDcgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RjKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAKKyAjaWZkZWYgREVCVUcKKyAKKy1zdGF0aWMgY2hhciAqeDg2ZW11X2ZwdV9vcF9kZF90YWJbXSA9IHsKKytzdGF0aWMgY29uc3QgY2hhciAqeDg2ZW11X2ZwdV9vcF9kZF90YWJbXSA9IHsKKyAgICAgIkZMRFx0UVdPUkQgUFRSICIsICJFU0NfRERcdDI5LCIsICJGU1RcdFFXT1JEIFBUUiAiLCAiRlNUUFx0UVdPUkQgUFRSICIsCisgICAgICJGUlNUT1JcdCIsICJFU0NfRERcdDJELCIsICJGU0FWRVx0IiwgIkZTVFNXXHQiLAorIAorQEAgLTY0NSwxMCArNjU0LDExIEBAIHN0YXRpYyBjaGFyICp4ODZlbXVfZnB1X29wX2RkX3RhYltdID0geworICAgICAiRVNDX0REXHQyQywiLCAiRVNDX0REXHQyRCwiLCAiRVNDX0REXHQyRSwiLCAiRVNDX0REXHQyRiwiLAorIH07CisgCistI2VuZGlmIC8qIERFQlVHICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUJVRyAqLworIAorIC8qIG9wY29kZT0weGRkICovCistdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyt2b2lkCisreDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldCA9IDA7CitAQCAtNjU4LDc1ICs2NjgsNzUgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKyAgICAgREVDT0RFX1BSSU5USU5TVFIzMih4ODZlbXVfZnB1X29wX2RkX3RhYiwgbW9kLCByaCwgcmwpOworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMDoKKysgICAgY2FzZSAwOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMToKKysgICAgY2FzZSAxOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMjoKKysgICAgY2FzZSAyOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKy0JCXN0a2VsZW0gPSAodTgpcmw7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBzdGtlbGVtID0gKHU4KSBybDsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJcdFNUKCVkKSxTVFxuIiwgc3RrZWxlbSk7CisgICAgICAgICBicmVhazsKKyAgICAgfQorICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDM6CisrICAgIGNhc2UgMzoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mZnJlZShzdGtlbGVtKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9meGNoKHN0a2VsZW0pOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzdChzdGtlbGVtKTsgIC8qIHJlZ2lzdGVyIHZlcnNpb24gKi8KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mc3RwKHN0a2VsZW0pOyAvKiByZWdpc3RlciB2ZXJzaW9uICovCisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgICAgZGVmYXVsdDoKKysgICAgZGVmYXVsdDoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mbGQoWDg2RU1VX0ZQVV9ET1VCTEUsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN0KFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mc3RwKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mcnN0b3IoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDY6CisrICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZzYXZlKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN0c3coWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgfQorICNlbHNlCistICAgICh2b2lkKWRlc3RvZmZzZXQ7CistICAgICh2b2lkKXN0a2VsZW07CisrICAgICh2b2lkKSBkZXN0b2Zmc2V0OworKyAgICAodm9pZCkgc3RrZWxlbTsKKyAjZW5kaWYKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFJfTk9fVFJBQ0UoKTsKK0BAIC03MzQsOCArNzQ0LDcgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAKKyAjaWZkZWYgREVCVUcKKyAKKy1zdGF0aWMgY2hhciAqeDg2ZW11X2ZwdV9vcF9kZV90YWJbXSA9CisteworK3N0YXRpYyBjb25zdCBjaGFyICp4ODZlbXVfZnB1X29wX2RlX3RhYltdID0geworICAgICAiRklBRERcdFdPUkQgUFRSICIsICJGSU1VTFx0V09SRCBQVFIgIiwgIkZJQ09NXHRXT1JEIFBUUiAiLAorICAgICAiRklDT01QXHRXT1JEIFBUUiAiLAorICAgICAiRklTVUJcdFdPUkQgUFRSICIsICJGSVNVQlJcdFdPUkQgUFRSICIsICJGSURJVlx0V09SRCBQVFIgIiwKK0BAIC03NTUsMTAgKzc2NCwxMSBAQCBzdGF0aWMgY2hhciAqeDg2ZW11X2ZwdV9vcF9kZV90YWJbXSA9CisgICAgICJGU1VCUlBcdCIsICJGU1VCUFx0IiwgIkZESVZSUFx0IiwgIkZESVZQXHQiLAorIH07CisgCistI2VuZGlmIC8qIERFQlVHICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUJVRyAqLworIAorIC8qIG9wY29kZT0weGRlICovCistdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyt2b2lkCisreDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldCA9IDA7CitAQCAtNzY4LDg3ICs3NzgsODcgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKyAgICAgREVDT0RFX1BSSU5USU5TVFIzMih4ODZlbXVfZnB1X29wX2RlX3RhYiwgbW9kLCByaCwgcmwpOworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMDoKKysgICAgY2FzZSAwOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMToKKysgICAgY2FzZSAxOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMjoKKysgICAgY2FzZSAyOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKy0JCXN0a2VsZW0gPSAodTgpcmw7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBzdGtlbGVtID0gKHU4KSBybDsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJcdFNUKCVkKSxTVFxuIiwgc3RrZWxlbSk7CisgICAgICAgICBicmVhazsKKyAgICAgfQorICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDM6CisrICAgIGNhc2UgMzoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mYWRkcChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZm11bHAoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Zjb21wKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIGlmIChzdGtlbGVtID09IDEpCistICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmNvbXBwKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKysgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Zjb21wcChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisrICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzdWJycChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnN1YnAoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDY6CisrICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZkaXZycChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmRpdnAoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgICAgZGVmYXVsdDoKKysgICAgZGVmYXVsdDoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maWFkZChYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpbXVsKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmljb20oWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maWNvbXAoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maXN1YihYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDU6CisrICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2Zpc3VicihYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDY6CisrICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpZGl2KFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmlkaXZyKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgIH0KKyAjZWxzZQorLSAgICAodm9pZClkZXN0b2Zmc2V0OworLSAgICAodm9pZClzdGtlbGVtOworKyAgICAodm9pZCkgZGVzdG9mZnNldDsKKysgICAgKHZvaWQpIHN0a2VsZW07CisgI2VuZGlmCisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSX05PX1RSQUNFKCk7CitAQCAtODU2LDcgKzg2Niw3IEBAIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgCisgI2lmZGVmIERFQlVHCisgCistc3RhdGljIGNoYXIgKng4NmVtdV9mcHVfb3BfZGZfdGFiW10gPSB7Cisrc3RhdGljIGNvbnN0IGNoYXIgKng4NmVtdV9mcHVfb3BfZGZfdGFiW10gPSB7CisgICAgIC8qIG1vZCA9PSAwMCAqLworICAgICAiRklMRFx0V09SRCBQVFIgIiwgIkVTQ19ERlx0MzlcbiIsICJGSVNUXHRXT1JEIFBUUiAiLCAiRklTVFBcdFdPUkQgUFRSICIsCisgICAgICJGQkxEXHRUQllURSBQVFIgIiwgIkZJTERcdFFXT1JEIFBUUiAiLCAiRkJTVFBcdFRCWVRFIFBUUiAiLAorQEAgLTg3NywxMCArODg3LDExIEBAIHN0YXRpYyBjaGFyICp4ODZlbXVfZnB1X29wX2RmX3RhYltdID0geworICAgICAiRVNDX0RGXHQzQywiLCAiRVNDX0RGXHQzRCwiLCAiRVNDX0RGXHQzRSwiLCAiRVNDX0RGXHQzRiwiCisgfTsKKyAKKy0jZW5kaWYgLyogREVCVUcgKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQlVHICovCisgCisgLyogb3Bjb2RlPTB4ZGYgKi8KKy12b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGYodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3ZvaWQKKyt4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RmKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0ID0gMDsKK0BAIC04OTAsNzUgKzkwMSw3NSBAQCB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGYodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworICAgICBERUNPREVfUFJJTlRJTlNUUjMyKHg4NmVtdV9mcHVfb3BfZGZfdGFiLCBtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAobW9kKSB7CistICAgICAgY2FzZSAwOgorKyAgICBjYXNlIDA6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAxOgorKyAgICBjYXNlIDE6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAyOgorKyAgICBjYXNlIDI6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworLQkJc3RrZWxlbSA9ICh1OClybDsKKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgICAgIHN0a2VsZW0gPSAodTgpIHJsOworICAgICAgICAgREVDT0RFX1BSSU5URjIoIlx0U1QoJWQpXG4iLCBzdGtlbGVtKTsKKyAgICAgICAgIGJyZWFrOworICAgICB9CisgI2lmZGVmIFg4NkVNVV9GUFVfUFJFU0VOVAorICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMzoKKysgICAgY2FzZSAzOgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZmcmVlKHN0a2VsZW0pOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Z4Y2goc3RrZWxlbSk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnN0KHN0a2VsZW0pOyAgLyogcmVnaXN0ZXIgdmVyc2lvbiAqLworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDM6CisrICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzdHAoc3RrZWxlbSk7IC8qIHJlZ2lzdGVyIHZlcnNpb24gKi8KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgICBkZWZhdWx0OgorKyAgICBkZWZhdWx0OgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpbGQoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2Zpc3QoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maXN0cChYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZibGQoWDg2RU1VX0ZQVV9CU0QsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDU6CisrICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpbGQoWDg2RU1VX0ZQVV9MT05HLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mYnN0cChYODZFTVVfRlBVX0JTRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmlzdHAoWDg2RU1VX0ZQVV9MT05HLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgfQorICNlbHNlCistICAgICh2b2lkKWRlc3RvZmZzZXQ7CistICAgICh2b2lkKXN0a2VsZW07CisrICAgICh2b2lkKSBkZXN0b2Zmc2V0OworKyAgICAodm9pZCkgc3RrZWxlbTsKKyAjZW5kaWYKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFJfTk9fVFJBQ0UoKTsKK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS9vcHMuYyBiL2xpYnMveDg2ZW11L29wcy5jCitpbmRleCA0ZjUwNGM5Li43NmI4MzU4IDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUvb3BzLmMKKysrKyBiL2xpYnMveDg2ZW11L29wcy5jCitAQCAtODEsMTcgKzgxLDE3IEBAIG9wMSAtIEluc3RydWN0aW9uIG9wIGNvZGUKKyBSRU1BUktTOgorIEhhbmRsZXMgaWxsZWdhbCBvcGNvZGVzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaWxsZWdhbF9vcCgKKy0gICAgdTggb3AxKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaWxsZWdhbF9vcCh1OCBvcDEpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYuUl9TUCAhPSAwKSB7CistICAgIERFQ09ERV9QUklOVEYoIklMTEVHQUwgWDg2IE9QQ09ERVxuIik7CistICAgIFRSQUNFX1JFR1MoKTsKKy0gICAgcHJpbnRrKCIlMDR4OiUwNHg6ICUwMlggSUxMRUdBTCBYODYgT1BDT0RFIVxuIiwKKy0gICAgICAgIE0ueDg2LlJfQ1MsIE0ueDg2LlJfSVAtMSxvcDEpOworLSAgICBIQUxUX1NZUygpOworLSAgICAgICAgfQorKyAgICAgICAgREVDT0RFX1BSSU5URigiSUxMRUdBTCBYODYgT1BDT0RFXG4iKTsKKysgICAgICAgIFRSQUNFX1JFR1MoKTsKKysgICAgICAgIERCKHByaW50aygiJTA0eDolMDR4OiAlMDJYIElMTEVHQUwgWDg2IE9QQ09ERSFcbiIsCisrICAgICAgICAgICAgICAgICAgTS54ODYuUl9DUywgTS54ODYuUl9JUCAtIDEsIG9wMSkpOworKyAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgfQorICAgICBlbHNlIHsKKyAgICAgICAgIC8qIElmIHdlIGdldCBoZXJlLCBpdCBtZWFucyB0aGUgc3RhY2sgcG9pbnRlciBpcyBiYWNrIHRvIHplcm8KKyAgICAgICAgICAqIHNvIHdlIGFyZSBqdXN0IHJldHVybmluZyBmcm9tIGFuIGVtdWxhdG9yIHNlcnZpY2UgY2FsbAorQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbGxlZ2FsX29wKAorICAgICAgICAgICogY2FsbC4KKyAgICAgICAgICAqLworICAgICAgICAgWDg2RU1VX2hhbHRfc3lzKCk7CistICAgICAgICB9CisrICAgIH0KKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorIAorQEAgLTEwOCw3ICsxMDgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbGxlZ2FsX29wKAorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGRfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTE0OSw3ICsxNTAsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSBhZGRfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CitAQCAtMTY2LDcgKzE2Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTE4OCw3ICsxOTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBhZGRfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMjE1LDcgKzIxOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGFkZF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0yNDIsNyArMjQ2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gYWRkX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTI1Niw5ICsyNjEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjY2LDggKzI3MSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkZF9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjg2LDcgKzI5Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGRfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtMzI0LDcgKzMzMSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0gYWRkX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworQEAgLTM0MSw3ICszNDgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MDMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWRkX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTM2Miw3ICszNzAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGRfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0zODcsNyArMzk2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gYWRkX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtNDEyLDcgKzQyMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkZF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTQyNSw5ICs0MzYsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkZF93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTQzNSw4ICs0NDYsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGRfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTQ1NSw3ICs0NjcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MDQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGRfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggc3JjdmFsOworIAorQEAgLTQ3Myw3ICs0ODYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FkZF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTQ4MSw3ICs0OTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkFERFx0RUFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkFERFx0QVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtNDg5LDggKzUwNCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQVggPSBhZGRfbG9uZyhNLng4Ni5SX0VBWCwgc3JjdmFsKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfQVggPSBhZGRfd29yZChNLng4Ni5SX0FYLCAodTE2KXNyY3ZhbCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0FYID0gYWRkX3dvcmQoTS54ODYuUl9BWCwgKHUxNikgc3JjdmFsKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTUwMCw3ICs1MTYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9FUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX0VTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEVTXG4iKTsKK0BAIC01MTQsNyArNTMxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9FUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDA3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfRVModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX0VTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RVNcbiIpOworQEAgLTUyOCw3ICs1NDYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfRVModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwOAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3JfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29yX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTU2OSw3ICs1ODgsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgZGVzdHZhbCA9IG9yX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworQEAgLTU4Niw3ICs2MDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwOQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC02MDgsNyArNjI4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBvcl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC02MzUsNyArNjU2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBvcl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC02NjIsNyArNjg0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBvcl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC02NzYsOSArNjk5LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjg2LDggKzcwOSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gb3JfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTcwNiw3ICs3MzAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwYQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3JfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29yX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTc0NCw3ICs3NjksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0gb3JfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CitAQCAtNzYxLDcgKzc4Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBiCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtNzgyLDcgKzgwOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gb3JfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC04MDcsNyArODM0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBvcl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTgzMiw3ICs4NjAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IG9yX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtODQ1LDkgKzg3NCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKmRlc3RyZWcgPSBvcl93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTg1NSw4ICs4ODQsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IG9yX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC04NzUsNyArOTA1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29yX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IHNyY3ZhbDsKKyAKK0BAIC04OTMsNyArOTI0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3JfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3Jfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC05MDEsNyArOTMzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk9SXHRFQVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiT1JcdEFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTkwOSw4ICs5NDIsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQVggPSBvcl9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9BWCA9IG9yX3dvcmQoTS54ODYuUl9BWCwgKHUxNilzcmN2YWwpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9BWCA9IG9yX3dvcmQoTS54ODYuUl9BWCwgKHUxNikgc3JjdmFsKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTkyMCw3ICs5NTQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfQ1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0Q1NcbiIpOworQEAgLTkzNCwxOCArOTY5LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfQ1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZi4gRXNjYXBlIGZvciB0d28tYnl0ZSBvcGNvZGUgKDI4NiBvciBiZXR0ZXIpCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF90d29fYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF90d29fYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworLSAgICB1OCBvcDIgPSAoKnN5c19yZGIpKCgodTMyKU0ueDg2LlJfQ1MgPDwgNCkgKyAoTS54ODYuUl9JUCsrKSk7CisrICAgIHU4IG9wMiA9ICgqc3lzX3JkYikgKCgodTMyKSBNLng4Ni5SX0NTIDw8IDQpICsgKE0ueDg2LlJfSVArKykpOworKworICAgICBJTkNfREVDT0RFRF9JTlNUX0xFTigxKTsKKy0gICAgKCp4ODZlbXVfb3B0YWIyW29wMl0pKG9wMik7CisrICAgICgqeDg2ZW11X29wdGFiMltvcDJdKSAob3AyKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MTAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY19ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWRjX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTk4Niw3ICsxMDI0LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBkZXN0dmFsID0gYWRjX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworQEAgLTEwMDMsNyArMTA0MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY19ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGNfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTEwMjUsNyArMTA2NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGFkY19sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0xMDUyLDcgKzEwOTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBhZGNfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMTA3OSw3ICsxMTIwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gYWRjX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTEwOTMsOSArMTEzNSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xMTAzLDggKzExNDUsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGNfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTExMjMsNyArMTE2Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGNfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtMTE2MSw3ICsxMjA1LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBhZGNfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CitAQCAtMTE3OCw3ICsxMjIyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDEzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FkY193b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0xMTk5LDcgKzEyNDQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGNfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0xMjI0LDcgKzEyNzAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGNfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0xMjQ5LDcgKzEyOTYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGNfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0xMjYyLDkgKzEzMTAsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkY193b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTEyNzIsOCArMTMyMCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkY19sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTI5Miw3ICsxMzQxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDE0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWRjX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IHNyY3ZhbDsKKyAKK0BAIC0xMzEwLDcgKzEzNjAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FkY193b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTEzMTgsNyArMTM2OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQURDXHRFQVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQURDXHRBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC0xMzI2LDggKzEzNzgsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0gYWRjX2xvbmcoTS54ODYuUl9FQVgsIHNyY3ZhbCk7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0FYID0gYWRjX3dvcmQoTS54ODYuUl9BWCwgKHUxNilzcmN2YWwpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9BWCA9IGFkY193b3JkKE0ueDg2LlJfQVgsICh1MTYpIHNyY3ZhbCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC0xMzM3LDcgKzEzOTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9TUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX1NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdFNTXG4iKTsKK0BAIC0xMzUxLDcgKzE0MDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX1NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MTcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9TUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BfU1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUE9QXHRTU1xuIik7CitAQCAtMTM2NSw3ICsxNDIwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX1NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MTgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2JiX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTE0MDYsNyArMTQ2Miw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgZGVzdHZhbCA9IHNiYl9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC0xNDIzLDcgKzE0NzksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MTkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2JiX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC0xNDQ1LDcgKzE1MDIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBzYmJfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMTQ3Miw3ICsxNTMwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gc2JiX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTE0OTksNyArMTU1OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHNiYl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0xNTEzLDkgKzE1NzMsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTUyMyw4ICsxNTgzLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc2JiX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xNTQzLDcgKzE2MDQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MWEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2JiX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTE1ODEsNyArMTY0Myw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0gc2JiX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworQEAgLTE1OTgsNyArMTY2MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxYgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zYmJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMTYxOSw3ICsxNjgyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc2JiX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMTY0NCw3ICsxNzA4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc2JiX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMTY2OSw3ICsxNzM0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc2JiX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMTY4Miw5ICsxNzQ4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzYmJfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xNjkyLDggKzE3NTgsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzYmJfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTE3MTIsNyArMTc3OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NiYl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBzcmN2YWw7CisgCitAQCAtMTczMCw3ICsxNzk4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MWQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zYmJfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC0xNzM4LDcgKzE4MDcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNCQlx0RUFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNCQlx0QVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtMTc0Niw4ICsxODE2LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IHNiYl9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9BWCA9IHNiYl93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfQVggPSBzYmJfd29yZChNLng4Ni5SX0FYLCAodTE2KSBzcmN2YWwpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtMTc1Nyw3ICsxODI4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MWUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfRFModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9EUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHREU1xuIik7CitAQCAtMTc3MSw3ICsxODQzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9EUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDFmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfRFModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX0RTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RFNcbiIpOworQEAgLTE3ODUsNyArMTg1OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9EUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDIwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FuZF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC0xODMwLDcgKzE5MDQsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworIAorLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CitAQCAtMTg0Nyw3ICsxOTIxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDIxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FuZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtMTg2OSw3ICsxOTQ0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gYW5kX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTE4OTYsNyArMTk3Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGFuZF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0xOTIzLDcgKzIwMDAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBhbmRfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMTkzNyw5ICsyMDE1LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTE5NDcsOCArMjAyNSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFuZF9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTk2Nyw3ICsyMDQ2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDIyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FuZF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC0yMDA1LDcgKzIwODUsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IGFuZF9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKK0BAIC0yMDIyLDcgKzIxMDIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MjMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYW5kX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTIwNDMsNyArMjEyNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFuZF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTIwNjksNyArMjE1MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhbmRfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0yMDk0LDcgKzIxNzcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhbmRfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0yMTA3LDkgKzIxOTEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFuZF93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTIxMTcsOCArMjIwMSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFuZF9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjEzNyw3ICsyMjIyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDI0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYW5kX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IHNyY3ZhbDsKKyAKK0BAIC0yMTU1LDcgKzIyNDEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FuZF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTIxNjMsNyArMjI1MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQU5EXHRFQVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQU5EXHRBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC0yMTcxLDggKzIyNTksOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0gYW5kX2xvbmcoTS54ODYuUl9FQVgsIHNyY3ZhbCk7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0FYID0gYW5kX3dvcmQoTS54ODYuUl9BWCwgKHUxNilzcmN2YWwpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9BWCA9IGFuZF93b3JkKE0ueDg2LlJfQVgsICh1MTYpIHNyY3ZhbCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC0yMTgyLDcgKzIyNzEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Vnb3ZyX0VTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NlZ292cl9FUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJFUzpcbiIpOworQEAgLTIxOTksNyArMjI4OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9FUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDI3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9kYWEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfZGFhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkRBQVxuIik7CitAQCAtMjIxMyw3ICsyMzA0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZGFhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MjgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3ViX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTIyNTQsNyArMjM0Niw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgZGVzdHZhbCA9IHN1Yl9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC0yMjcxLDcgKzIzNjMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MjkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3ViX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC0yMjkzLDcgKzIzODYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBzdWJfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMjMyMCw3ICsyNDE0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gc3ViX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTIzNDcsNyArMjQ0Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHN1Yl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0yMzYxLDkgKzI0NTcsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjM3MSw4ICsyNDY3LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3ViX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0yMzkxLDcgKzI0ODgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MmEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3ViX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTI0MjksNyArMjUyNyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0gc3ViX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworQEAgLTI0NDYsNyArMjU0NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyYgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zdWJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMjQ2Nyw3ICsyNTY2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3ViX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMjQ5Miw3ICsyNTkyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3ViX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMjUxNyw3ICsyNjE4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3ViX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMjUzMCw5ICsyNjMyLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzdWJfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0yNTQwLDggKzI2NDIsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzdWJfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTI1NjAsNyArMjY2Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3N1Yl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBzcmN2YWw7CisgCitAQCAtMjU3OCw3ICsyNjgyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zdWJfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC0yNTg2LDcgKzI2OTEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNVQlx0RUFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNVQlx0QVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtMjU5NCw4ICsyNzAwLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IHN1Yl9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9BWCA9IHN1Yl93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfQVggPSBzdWJfd29yZChNLng4Ni5SX0FYLCAodTE2KSBzcmN2YWwpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtMjYwNSw3ICsyNzEyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MmUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9DUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zZWdvdnJfQ1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQ1M6XG4iKTsKK0BAIC0yNjE5LDcgKzI3MjcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zZWdvdnJfQ1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfZGFzKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2Rhcyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJEQVNcbiIpOworQEAgLTI2MzMsNyArMjc0Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2Rhcyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDMwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94b3JfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3hvcl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC0yNjc0LDcgKzI3ODQsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3JfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSB4b3JfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CitAQCAtMjY5MSw3ICsyODAxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDMxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3hvcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtMjcxMyw3ICsyODI0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0geG9yX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTI3NDAsNyArMjg1Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHhvcl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0yNzY3LDcgKzI4ODAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSB4b3JfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMjc4MSw5ICsyODk1LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTI3OTEsOCArMjkwNSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHhvcl9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjgxMSw3ICsyOTI2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDMyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94b3JfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3hvcl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC0yODQ5LDcgKzI5NjUsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3JfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IHhvcl9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKK0BAIC0yODY2LDcgKzI5ODIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3JfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MzMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeG9yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTI4ODcsNyArMzAwNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHhvcl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTI5MTIsNyArMzAzMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHhvcl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTI5MzcsNyArMzA1Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHhvcl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTI5NTAsOSArMzA3MCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICpkZXN0cmVnID0geG9yX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjk2MCw4ICszMDgwLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0geG9yX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0yOTgwLDcgKzMxMDEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MzQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94b3JfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggc3JjdmFsOworIAorQEAgLTI5OTgsNyArMzEyMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDM1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeG9yX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtMzAwNiw3ICszMTI5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYT1JcdEVBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYT1JcdEFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTMwMTQsOCArMzEzOCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQVggPSB4b3JfbG9uZyhNLng4Ni5SX0VBWCwgc3JjdmFsKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfQVggPSB4b3Jfd29yZChNLng4Ni5SX0FYLCAodTE2KXNyY3ZhbCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0FYID0geG9yX3dvcmQoTS54ODYuUl9BWCwgKHUxNikgc3JjdmFsKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTMwMjUsNyArMzE1MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDM2CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zZWdvdnJfU1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2Vnb3ZyX1NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlNTOlxuIik7CitAQCAtMzAzOSw3ICszMTY1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Vnb3ZyX1NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MzcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FhYSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hYWEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQUFBXG4iKTsKK0BAIC0zMDUzLDcgKzMxODAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hYWEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgzOAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jbXBfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTMwOTEsNyArMzIxOSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgIGNtcF9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC0zMTA4LDcgKzMyMzYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MzkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY21wX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC0zMTI5LDcgKzMyNTgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgY21wX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMzE1NCw3ICszMjg0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGNtcF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTMxNzksNyArMzMxMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBjbXBfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0zMTkyLDkgKzMzMjQsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBjbXBfd29yZChkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0zMjAyLDggKzMzMzQsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgY21wX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0zMjIyLDcgKzMzNTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4M2EKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY21wX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTMyNjAsNyArMzM5NCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgIGNtcF9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKK0BAIC0zMjc3LDcgKzM0MTEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4M2IKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY21wX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTMyOTgsNyArMzQzMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBjbXBfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0zMzIzLDcgKzM0NTksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgY21wX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMzM0OCw3ICszNDg1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGNtcF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTMzNjEsOSArMzQ5OSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGNtcF93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTMzNzEsOCArMzUwOSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBjbXBfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTMzOTEsNyArMzUzMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgzYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NtcF9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBzcmN2YWw7CisgCitAQCAtMzQwOSw3ICszNTQ5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4M2QKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jbXBfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC0zNDE3LDcgKzM1NTgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNNUFx0RUFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNNUFx0QVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtMzQyNSw4ICszNTY3LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBjbXBfbG9uZyhNLng4Ni5SX0VBWCwgc3JjdmFsKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIGNtcF93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIGNtcF93b3JkKE0ueDg2LlJfQVgsICh1MTYpIHNyY3ZhbCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC0zNDM2LDcgKzM1NzksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgzZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Vnb3ZyX0RTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NlZ292cl9EUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJEUzpcbiIpOworQEAgLTM0NTAsNyArMzU5NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9EUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDNmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hYXModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWFzKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkFBU1xuIik7CitAQCAtMzQ2NCwxOCArMzYwOSwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hYXModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0MAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luY19BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0RUFYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0QVhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQVggPSBpbmNfbG9uZyhNLng4Ni5SX0VBWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0FYID0gaW5jX3dvcmQoTS54ODYuUl9BWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM0ODYsMTggKzM2MzQsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NDEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbmNfQ1godTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdEVDWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdENYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUNYID0gaW5jX2xvbmcoTS54ODYuUl9FQ1gpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9DWCA9IGluY193b3JkKE0ueDg2LlJfQ1gpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNTA4LDE4ICszNjU5LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDQyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5jX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRFRFhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHREWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VEWCA9IGluY19sb25nKE0ueDg2LlJfRURYKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfRFggPSBpbmNfd29yZChNLng4Ni5SX0RYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzUzMCwxOCArMzY4NCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0MworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luY19CWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0RUJYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0QlhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQlggPSBpbmNfbG9uZyhNLng4Ni5SX0VCWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0JYID0gaW5jX3dvcmQoTS54ODYuUl9CWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM1NTIsMTggKzM3MDksMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NDQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbmNfU1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdEVTUFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdFNQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRVNQID0gaW5jX2xvbmcoTS54ODYuUl9FU1ApOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9TUCA9IGluY193b3JkKE0ueDg2LlJfU1ApOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNTc0LDE4ICszNzM0LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDQ1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5jX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRFQlBcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRCUFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VCUCA9IGluY19sb25nKE0ueDg2LlJfRUJQKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQlAgPSBpbmNfd29yZChNLng4Ni5SX0JQKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzU5NiwxOCArMzc1OSwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0NgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luY19TSSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0RVNJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0U0lcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FU0kgPSBpbmNfbG9uZyhNLng4Ni5SX0VTSSk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX1NJID0gaW5jX3dvcmQoTS54ODYuUl9TSSk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM2MTgsMTggKzM3ODQsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NDcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbmNfREkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdEVESVxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdERJXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRURJID0gaW5jX2xvbmcoTS54ODYuUl9FREkpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9ESSA9IGluY193b3JkKE0ueDg2LlJfREkpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNjQwLDE4ICszODA5LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDQ4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfZGVjX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRFQVhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRBWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IGRlY19sb25nKE0ueDg2LlJfRUFYKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBkZWNfd29yZChNLng4Ni5SX0FYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzY2MiwxOCArMzgzNCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0OQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2RlY19DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RUNYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0Q1hcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQ1ggPSBkZWNfbG9uZyhNLng4Ni5SX0VDWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0NYID0gZGVjX3dvcmQoTS54ODYuUl9DWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM2ODQsMTggKzM4NTksMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NGEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9kZWNfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdEVEWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdERYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRURYID0gZGVjX2xvbmcoTS54ODYuUl9FRFgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9EWCA9IGRlY193b3JkKE0ueDg2LlJfRFgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNzA2LDE4ICszODg0LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDRiCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfZGVjX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRFQlhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRCWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VCWCA9IGRlY19sb25nKE0ueDg2LlJfRUJYKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQlggPSBkZWNfd29yZChNLng4Ni5SX0JYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzcyOCwxOCArMzkwOSwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0YworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2RlY19TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RVNQXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0U1BcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FU1AgPSBkZWNfbG9uZyhNLng4Ni5SX0VTUCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX1NQID0gZGVjX3dvcmQoTS54ODYuUl9TUCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM3NTAsMTggKzM5MzQsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NGQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9kZWNfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdEVCUFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdEJQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUJQID0gZGVjX2xvbmcoTS54ODYuUl9FQlApOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9CUCA9IGRlY193b3JkKE0ueDg2LlJfQlApOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNzcyLDE4ICszOTU5LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDRlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfZGVjX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRFU0lcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRTSVxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VTSSA9IGRlY19sb25nKE0ueDg2LlJfRVNJKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfU0kgPSBkZWNfd29yZChNLng4Ni5SX1NJKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzc5NCwxOCArMzk4NCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0ZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2RlY19ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RURJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RElcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FREkgPSBkZWNfbG9uZyhNLng4Ni5SX0VESSk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0RJID0gZGVjX3dvcmQoTS54ODYuUl9ESSk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM4MTYsMTggKzQwMDksMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NTAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEVBWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRBWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FQVgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQVgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zODM4LDE4ICs0MDM0LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1MQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RUNYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdENYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VDWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9DWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM4NjAsMTggKzQwNTksMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDUyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRFRFhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RFhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgcHVzaF9sb25nKE0ueDg2LlJfRURYKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0RYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzg4MiwxOCArNDA4NCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NTMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9CWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEVCWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRCWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FQlgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQlgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zOTA0LDIzICs0MTA5LDI2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1NAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RVNQXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdFNQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkvKiBBbHdheXMgcHVzaCAoRSlTUCwgc2luY2Ugd2UgYXJlIGVtdWxhdGluZyBhbiBpMzg2IGFuZCBhYm92ZQorLQkgKiBwcm9jZXNzb3IuIFRoaXMgaXMgbmVjZXNzYXJ5IGFzIHNvbWUgQklPUydlcyB1c2UgdGhpcyB0byBjaGVjaworLQkgKiB3aGF0IHR5cGUgb2YgcHJvY2Vzc29yIGlzIGluIHRoZSBzeXN0ZW0uCistCSAqLworLQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCXB1c2hfbG9uZyhNLng4Ni5SX0VTUCk7CistCX0gZWxzZSB7CistCQlwdXNoX3dvcmQoKHUxNikoTS54ODYuUl9TUCkpOworKyAgICAvKiBBbHdheXMgcHVzaCAoRSlTUCwgc2luY2Ugd2UgYXJlIGVtdWxhdGluZyBhbiBpMzg2IGFuZCBhYm92ZQorKyAgICAgKiBwcm9jZXNzb3IuIFRoaXMgaXMgbmVjZXNzYXJ5IGFzIHNvbWUgQklPUydlcyB1c2UgdGhpcyB0byBjaGVjaworKyAgICAgKiB3aGF0IHR5cGUgb2YgcHJvY2Vzc29yIGlzIGluIHRoZSBzeXN0ZW0uCisrICAgICAqLworKyAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VTUCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBwdXNoX3dvcmQoKHUxNikgKE0ueDg2LlJfU1ApKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTM5MzAsMTggKzQxMzgsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDU1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRFQlBcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0QlBcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgcHVzaF9sb25nKE0ueDg2LlJfRUJQKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0JQKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzk1MiwxOCArNDE2MywyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NTYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9TSSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEVTSVxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRTSVxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FU0kpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfU0kpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zOTc0LDE4ICs0MTg4LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1NworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RURJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdERJXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VESSk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9ESSk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM5OTYsMTggKzQyMTMsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDU4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRFQVhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRBWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IHBvcF9sb25nKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0FYID0gcG9wX3dvcmQoKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtNDAxOCwxOCArNDIzOCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1OQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3BvcF9DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RUNYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0Q1hcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQ1ggPSBwb3BfbG9uZygpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9DWCA9IHBvcF93b3JkKCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTQwNDAsMTggKzQyNjMsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NWEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEVEWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdERYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRURYID0gcG9wX2xvbmcoKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfRFggPSBwb3Bfd29yZCgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC00MDYyLDE4ICs0Mjg4LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDViCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRFQlhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRCWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VCWCA9IHBvcF9sb25nKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0JYID0gcG9wX3dvcmQoKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtNDA4NCwxOCArNDMxMywyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1YworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3BvcF9TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RVNQXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0U1BcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FU1AgPSBwb3BfbG9uZygpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9TUCA9IHBvcF93b3JkKCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTQxMDYsMTggKzQzMzgsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NWQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEVCUFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEJQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUJQID0gcG9wX2xvbmcoKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQlAgPSBwb3Bfd29yZCgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC00MTI4LDE4ICs0MzYzLDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDVlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRFU0lcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRTSVxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VTSSA9IHBvcF9sb25nKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX1NJID0gcG9wX3dvcmQoKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtNDE1MCwxOCArNDM4OCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1ZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3BvcF9ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RURJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RElcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FREkgPSBwb3BfbG9uZygpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9ESSA9IHBvcF93b3JkKCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTQxNzIsMTIgKzQ0MTMsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NjAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfYWxsKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfYWxsKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSEFEXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hBXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTQxOTIsNyArNDQzNSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfYWxsKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VCUCk7CisgICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FU0kpOworICAgICAgICAgcHVzaF9sb25nKE0ueDg2LlJfRURJKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHUxNiBvbGRfc3AgPSBNLng4Ni5SX1NQOworIAorICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQVgpOworQEAgLTQyMTIsMTIgKzQ0NTYsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9hbGwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2MQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX2FsbCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BfYWxsKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QQURcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QQVxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKK0BAIC00MjI1LDE2ICs0NDcxLDE3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9hbGwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgTS54ODYuUl9FREkgPSBwb3BfbG9uZygpOworICAgICAgICAgTS54ODYuUl9FU0kgPSBwb3BfbG9uZygpOworICAgICAgICAgTS54ODYuUl9FQlAgPSBwb3BfbG9uZygpOworLSAgICAgICAgTS54ODYuUl9FU1AgKz0gNDsgICAgICAgICAgICAgIC8qIHNraXAgRVNQICovCisrICAgICAgICBNLng4Ni5SX0VTUCArPSA0OyAgICAgICAvKiBza2lwIEVTUCAqLworICAgICAgICAgTS54ODYuUl9FQlggPSBwb3BfbG9uZygpOworICAgICAgICAgTS54ODYuUl9FRFggPSBwb3BfbG9uZygpOworICAgICAgICAgTS54ODYuUl9FQ1ggPSBwb3BfbG9uZygpOworICAgICAgICAgTS54ODYuUl9FQVggPSBwb3BfbG9uZygpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9ESSA9IHBvcF93b3JkKCk7CisgICAgICAgICBNLng4Ni5SX1NJID0gcG9wX3dvcmQoKTsKKyAgICAgICAgIE0ueDg2LlJfQlAgPSBwb3Bfd29yZCgpOworLSAgICAgICAgTS54ODYuUl9TUCArPSAyOyAgICAgICAgICAgICAgIC8qIHNraXAgU1AgKi8KKysgICAgICAgIE0ueDg2LlJfU1AgKz0gMjsgICAgICAgIC8qIHNraXAgU1AgKi8KKyAgICAgICAgIE0ueDg2LlJfQlggPSBwb3Bfd29yZCgpOworICAgICAgICAgTS54ODYuUl9EWCA9IHBvcF93b3JkKCk7CisgICAgICAgICBNLng4Ni5SX0NYID0gcG9wX3dvcmQoKTsKK0BAIC00MjUxLDcgKzQ0OTgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfYWxsKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NjQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9GUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zZWdvdnJfRlModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiRlM6XG4iKTsKK0BAIC00MjY4LDcgKzQ1MTYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zZWdvdnJfRlModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2NQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Vnb3ZyX0dTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NlZ292cl9HUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJHUzpcbiIpOworQEAgLTQyODUsNyArNDUzNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9HUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDY2IC0gcHJlZml4IGZvciAzMi1iaXQgcmVnaXN0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3ByZWZpeF9kYXRhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3ByZWZpeF9kYXRhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkRBVEE6XG4iKTsKK0BAIC00Mjk5LDcgKzQ1NDksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wcmVmaXhfZGF0YSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDY3IC0gcHJlZml4IGZvciAzMi1iaXQgYWRkcmVzcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHJlZml4X2FkZHIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHJlZml4X2FkZHIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQUREUjpcbiIpOworQEAgLTQzMTMsMjIgKzQ1NjQsMjUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHJlZml4X2FkZHIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2OAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF93b3JkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBpbW07CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgaW1tID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KKyAgICAgREVDT0RFX1BSSU5URjIoIlBVU0hcdCV4XG4iLCBpbW0pOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIHB1c2hfbG9uZyhpbW0pOworLSAgICB9IGVsc2UgeworLSAgICAgICAgcHVzaF93b3JkKCh1MTYpaW1tKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIHB1c2hfd29yZCgodTE2KSBpbW0pOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtNDMzOCw3ICs0NTkyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF93b3JkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDY5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC00MzUxLDcgKzQ2MDYsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAgICAgICAgICAgICBzMzIgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CitAQCAtNDM1OSwxOCArNDYxNCwyMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgc3JjdmFsLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC00MzgxLDI0ICs0NjM4LDI2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpIHNyY3ZhbCAqKHMxNikgaW1tOworKworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAgICAgICAgICAgICBzMzIgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CitAQCAtNDQwNiwxOCArNDY2NSwyMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgc3JjdmFsLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC00NDI4LDI0ICs0Njg5LDI2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpIHNyY3ZhbCAqKHMxNikgaW1tOworKworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAgICAgICAgICAgICBzMzIgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CitAQCAtNDQ1MywxOCArNDcxNiwyMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgc3JjdmFsLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC00NDc1LDQyICs0NzQwLDQ2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpIHNyY3ZhbCAqKHMxNikgaW1tOworKworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CistICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAgICAgICAgICAgICBzMzIgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMikqc3JjcmVnLChzMzIpaW1tKTsKKysgICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sICZyZXNfaGksIChzMzIpICogc3JjcmVnLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworICAgICAgICAgICAgIHUzMiByZXM7CisgICAgICAgICAgICAgczE2IGltbTsKKyAKK0BAIC00NTE4LDE2ICs0Nzg3LDE3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfd29yZF9pbW0oKTsKKy0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CistICAgICAgICAgICAgcmVzID0gKHMxNikqc3JjcmVnICogKHMxNilpbW07CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMikgaW1tKTsKKysgICAgICAgICAgICByZXMgPSAoczE2KSAqIHNyY3JlZyAqIChzMTYpIGltbTsKKyAgICAgICAgICAgICBpZiAocmVzID4gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpIHJlczsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtNDUzOSwxOCArNDgwOSwyMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NmEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9ieXRlX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzMTYgaW1tOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworLSAgICBpbW0gPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgaW1tID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworICAgICBERUNPREVfUFJJTlRGMigiUFVTSFx0JWRcbiIsIGltbSk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQlwdXNoX2xvbmcoKHMzMilpbW0pOworLSAgICB9IGVsc2UgeworLQlwdXNoX3dvcmQoaW1tKTsKKysgICAgICAgIHB1c2hfbG9uZygoczMyKSBpbW0pOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcHVzaF93b3JkKGltbSk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC00NTYwLDExICs0ODMyLDEyIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2YgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW11bF9ieXRlX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbXVsX2J5dGVfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CistICAgIHM4ICBpbW07CisrICAgIHM4IGltbTsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSU1VTFx0Iik7CitAQCAtNDU3NCwyNSArNDg0NywyNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX2J5dGVfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgc3JjdmFsLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC00NjAyLDQyICs0ODc3LDQ2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpIHNyY3ZhbCAqKHMxNikgaW1tOworKworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgc3JjdmFsLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC00NjQ3LDQyICs0OTI2LDQ2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpIHNyY3ZhbCAqKHMxNikgaW1tOworKworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgc3JjdmFsLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC00NjkyLDU3ICs0OTc1LDYyIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpIHNyY3ZhbCAqKHMxNikgaW1tOworKworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CistICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpKnNyY3JlZywoczMyKWltbSk7CisrICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCAmcmVzX2hpLCAoczMyKSAqIHNyY3JlZywgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmVzX2hpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpcmVzX2xvOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpIHJlc19sbzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAgICAgICAgICAgICB1MzIgcmVzOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KSpzcmNyZWcgKiAoczE2KWltbTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpICogc3JjcmVnICogKHMxNikgaW1tOworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIH0KK0BAIC00NzU0LDcgKzUwNDIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX2J5dGVfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NmMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIklOU0JcbiIpOworQEAgLTQ3NjgsMTMgKzUwNTcsMTUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5zX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2ZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5zX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5zX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTlNEXG4iKTsKKyAgICAgICAgIGlucyg0KTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOU1dcbiIpOworICAgICAgICAgaW5zKDIpOworICAgICB9CitAQCAtNDc4Nyw3ICs1MDc4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5zX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2ZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0c19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX291dHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJPVVRTQlxuIik7CitAQCAtNDgwMSwxMyArNTA5MywxNSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vdXRzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2ZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX291dHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk9VVFNEXG4iKTsKKyAgICAgICAgIG91dHMoNCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJPVVRTV1xuIik7CisgICAgICAgICBvdXRzKDIpOworICAgICB9CitAQCAtNDgyMCw3ICs1MTE0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9PKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9PKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC00ODI4LDggKzUxMjMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgb3ZlcmZsb3cgZmxhZyBpcyBzZXQgKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk9cdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKEFDQ0VTU19GTEFHKEZfT0YpKQorQEAgLTQ4NDIsNyArNTEzNyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9PKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OTyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTk8odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTQ4NTAsOCArNTE0Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OTyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgb3ZlcmZsb3cgaXMgbm90IHNldCAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTk9cdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKCFBQ0NFU1NfRkxBRyhGX09GKSkKK0BAIC00ODY0LDcgKzUxNjAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTk8odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3MgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX0IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTQ4NzIsOCArNTE2OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9CKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgLyoganVtcCB0byBieXRlIG9mZnNldCBpZiBjYXJyeSBmbGFnIGlzIHNldC4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSkJcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQorQEAgLTQ4ODYsNyArNTE4Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9CKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OQih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTkIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTQ4OTQsOCArNTE5Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OQih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgY2FycnkgZmxhZyBpcyBjbGVhci4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk5CXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmICghQUNDRVNTX0ZMQUcoRl9DRikpCitAQCAtNDkwOCw3ICs1MjA2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05CKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9aKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9aKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC00OTE2LDggKzUyMTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfWih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgemVybyBmbGFnIGlzIHNldC4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSlpcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKEFDQ0VTU19GTEFHKEZfWkYpKQorQEAgLTQ5MzAsNyArNTIyOSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9aKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OWih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTloodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTQ5MzgsOCArNTIzOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OWih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgemVybyBmbGFnIGlzIGNsZWFyLiAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTlpcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKCFBQ0NFU1NfRkxBRyhGX1pGKSkKK0BAIC00OTUyLDcgKzUyNTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTloodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3NgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0JFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9CRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNDk2MSw4ICs1MjYyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0JFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgZmxhZyBpcyBzZXQuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpCRVx0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikgfHwgQUNDRVNTX0ZMQUcoRl9aRikpCitAQCAtNDk3NSw3ICs1Mjc2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0JFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OQkUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX05CRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNDk4NCw4ICs1Mjg2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05CRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgIGZsYWcgaXMgY2xlYXIgKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk5CRVx0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoIShBQ0NFU1NfRkxBRyhGX0NGKSB8fCBBQ0NFU1NfRkxBRyhGX1pGKSkpCitAQCAtNDk5OCw3ICs1MzAwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05CRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDc4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNTAwNiw4ICs1MzA5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAvKiBqdW1wIHRvIGJ5dGUgb2Zmc2V0IGlmIHNpZ24gZmxhZyBpcyBzZXQgKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSlNcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKEFDQ0VTU19GTEFHKEZfU0YpKQorQEAgLTUwMjAsNyArNTMyMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9TKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTlModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTUwMjgsOCArNTMzMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgc2lnbiBmbGFnIGlzIGNsZWFyICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpOU1x0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoIUFDQ0VTU19GTEFHKEZfU0YpKQorQEAgLTUwNDIsNyArNTM0Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDdhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNTA1MCw4ICs1MzU1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAvKiBqdW1wIHRvIGJ5dGUgb2Zmc2V0IGlmIHBhcml0eSBmbGFnIGlzIHNldCAoZXZlbiBwYXJpdHkpICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpQXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChBQ0NFU1NfRkxBRyhGX1BGKSkKK0BAIC01MDY0LDcgKzUzNjksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDdiCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX05QKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC01MDcyLDggKzUzNzgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAvKiBqdW1wIHRvIGJ5dGUgb2Zmc2V0IGlmIHBhcml0eSBmbGFnIGlzIGNsZWFyIChvZGQgcGFyaXR5KSAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTlBcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKCFBQ0NFU1NfRkxBRyhGX1BGKSkKK0BAIC01MDg2LDcgKzUzOTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3YworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTUwOTUsOCArNTQwMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9MKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgLyoganVtcCB0byBieXRlIG9mZnNldCBpZiBzaWduIGZsYWcgbm90IGVxdWFsIHRvIG92ZXJmbG93IGZsYWcuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpMXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIHNmID0gQUNDRVNTX0ZMQUcoRl9TRikgIT0gMDsKK0BAIC01MTExLDcgKzU0MTgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDdkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX05MKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC01MTIwLDggKzU0MjgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAvKiBqdW1wIHRvIGJ5dGUgb2Zmc2V0IGlmIHNpZ24gZmxhZyBub3QgZXF1YWwgdG8gb3ZlcmZsb3cgZmxhZy4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk5MXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIHNmID0gQUNDRVNTX0ZMQUcoRl9TRikgIT0gMDsKK0BAIC01MTM3LDcgKzU0NDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3ZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0xFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9MRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNTE0Nyw4ICs1NDU2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0xFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgb3IgdGhlIHplcm8gZmxhZyBpcyBzZXQgKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSkxFXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIHNmID0gQUNDRVNTX0ZMQUcoRl9TRikgIT0gMDsKK0BAIC01MTYzLDcgKzU0NzIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTEUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3ZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05MRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTkxFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC01MTczLDggKzU0ODMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkxFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgYW5kIHRoZSB6ZXJvIGZsYWcgaXMgY2xlYXIgKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk5MRVx0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBzZiA9IEFDQ0VTU19GTEFHKEZfU0YpICE9IDA7CitAQCAtNTE4NSwyMyArNTQ5NSwyMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkxFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorIAorLXN0YXRpYyB1OCAoKm9wYzgwX2J5dGVfb3BlcmF0aW9uW10pKHU4IGQsIHU4IHMpID0KKy17CistICAgIGFkZF9ieXRlLCAgICAgICAgICAgLyogMDAgKi8KKy0gICAgb3JfYnl0ZSwgICAgICAgICAgICAvKiAwMSAqLworLSAgICBhZGNfYnl0ZSwgICAgICAgICAgIC8qIDAyICovCistICAgIHNiYl9ieXRlLCAgICAgICAgICAgLyogMDMgKi8KKy0gICAgYW5kX2J5dGUsICAgICAgICAgICAvKiAwNCAqLworLSAgICBzdWJfYnl0ZSwgICAgICAgICAgIC8qIDA1ICovCistICAgIHhvcl9ieXRlLCAgICAgICAgICAgLyogMDYgKi8KKy0gICAgY21wX2J5dGUsICAgICAgICAgICAvKiAwNyAqLworK3N0YXRpYyB1OCgqb3BjODBfYnl0ZV9vcGVyYXRpb25bXSkgKHU4IGQsIHU4IHMpID0geworKyAgICBhZGRfYnl0ZSwgICAgICAgICAgICAgICAgICAgLyogMDAgKi8KKysgICAgICAgIG9yX2J5dGUsICAgICAgICAgICAgICAgIC8qIDAxICovCisrICAgICAgICBhZGNfYnl0ZSwgICAgICAgICAgICAgICAvKiAwMiAqLworKyAgICAgICAgc2JiX2J5dGUsICAgICAgICAgICAgICAgLyogMDMgKi8KKysgICAgICAgIGFuZF9ieXRlLCAgICAgICAgICAgICAgIC8qIDA0ICovCisrICAgICAgICBzdWJfYnl0ZSwgICAgICAgICAgICAgICAvKiAwNSAqLworKyAgICAgICAgeG9yX2J5dGUsICAgICAgICAgICAgICAgLyogMDYgKi8KKysgICAgICAgIGNtcF9ieXRlLCAgICAgICAgICAgICAgIC8qIDA3ICovCisgfTsKKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4MAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODBfYnl0ZV9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjODBfYnl0ZV9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZzsKK0BAIC01MjkwLDcgKzU2MDAsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4MF9ieXRlX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBpZiAocmggIT0gNykKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKK0BAIC01MzA1LDM1ICs1NjE1LDM0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgwX2J5dGVfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorIAorLXN0YXRpYyB1MTYgKCpvcGM4MV93b3JkX29wZXJhdGlvbltdKSh1MTYgZCwgdTE2IHMpID0KKy17CistICAgIGFkZF93b3JkLCAgICAgICAgICAgLyowMCAqLworLSAgICBvcl93b3JkLCAgICAgICAgICAgIC8qMDEgKi8KKy0gICAgYWRjX3dvcmQsICAgICAgICAgICAvKjAyICovCistICAgIHNiYl93b3JkLCAgICAgICAgICAgLyowMyAqLworLSAgICBhbmRfd29yZCwgICAgICAgICAgIC8qMDQgKi8KKy0gICAgc3ViX3dvcmQsICAgICAgICAgICAvKjA1ICovCistICAgIHhvcl93b3JkLCAgICAgICAgICAgLyowNiAqLworLSAgICBjbXBfd29yZCwgICAgICAgICAgIC8qMDcgKi8KKytzdGF0aWMgdTE2KCpvcGM4MV93b3JkX29wZXJhdGlvbltdKSAodTE2IGQsIHUxNiBzKSA9IHsKKysgICAgYWRkX3dvcmQsICAgICAgICAgICAgICAgICAgIC8qMDAgKi8KKysgICAgICAgIG9yX3dvcmQsICAgICAgICAgICAgICAgIC8qMDEgKi8KKysgICAgICAgIGFkY193b3JkLCAgICAgICAgICAgICAgIC8qMDIgKi8KKysgICAgICAgIHNiYl93b3JkLCAgICAgICAgICAgICAgIC8qMDMgKi8KKysgICAgICAgIGFuZF93b3JkLCAgICAgICAgICAgICAgIC8qMDQgKi8KKysgICAgICAgIHN1Yl93b3JkLCAgICAgICAgICAgICAgIC8qMDUgKi8KKysgICAgICAgIHhvcl93b3JkLCAgICAgICAgICAgICAgIC8qMDYgKi8KKysgICAgICAgIGNtcF93b3JkLCAgICAgICAgICAgICAgIC8qMDcgKi8KKyB9OworIAorLXN0YXRpYyB1MzIgKCpvcGM4MV9sb25nX29wZXJhdGlvbltdKSh1MzIgZCwgdTMyIHMpID0KKy17CistICAgIGFkZF9sb25nLCAgICAgICAgICAgLyowMCAqLworLSAgICBvcl9sb25nLCAgICAgICAgICAgIC8qMDEgKi8KKy0gICAgYWRjX2xvbmcsICAgICAgICAgICAvKjAyICovCistICAgIHNiYl9sb25nLCAgICAgICAgICAgLyowMyAqLworLSAgICBhbmRfbG9uZywgICAgICAgICAgIC8qMDQgKi8KKy0gICAgc3ViX2xvbmcsICAgICAgICAgICAvKjA1ICovCistICAgIHhvcl9sb25nLCAgICAgICAgICAgLyowNiAqLworLSAgICBjbXBfbG9uZywgICAgICAgICAgIC8qMDcgKi8KKytzdGF0aWMgdTMyKCpvcGM4MV9sb25nX29wZXJhdGlvbltdKSAodTMyIGQsIHUzMiBzKSA9IHsKKysgICAgYWRkX2xvbmcsICAgICAgICAgICAgICAgICAgIC8qMDAgKi8KKysgICAgICAgIG9yX2xvbmcsICAgICAgICAgICAgICAgIC8qMDEgKi8KKysgICAgICAgIGFkY19sb25nLCAgICAgICAgICAgICAgIC8qMDIgKi8KKysgICAgICAgIHNiYl9sb25nLCAgICAgICAgICAgICAgIC8qMDMgKi8KKysgICAgICAgIGFuZF9sb25nLCAgICAgICAgICAgICAgIC8qMDQgKi8KKysgICAgICAgIHN1Yl9sb25nLCAgICAgICAgICAgICAgIC8qMDUgKi8KKysgICAgICAgIHhvcl9sb25nLCAgICAgICAgICAgICAgIC8qMDYgKi8KKysgICAgICAgIGNtcF9sb25nLCAgICAgICAgICAgICAgIC8qMDcgKi8KKyB9OworIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDgxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4MV93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcGM4MV93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC01Mzg3LDcgKzU2OTYsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4MV93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLGltbTsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtNTM5OSw4ICs1NzA4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wYzgxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7CisgICAgICAgICAgICAgaWYgKHJoICE9IDcpCisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsaW1tOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtNTQxNiw3ICs1NzI2LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLGltbTsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CitAQCAtNTQyOCw4ICs1NzM4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wYzgxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7CisgICAgICAgICAgICAgaWYgKHJoICE9IDcpCisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsaW1tOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CitAQCAtNTQ0NSw3ICs1NzU2LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLGltbTsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtNTQ1Nyw4ICs1NzY4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wYzgxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7CisgICAgICAgICAgICAgaWYgKHJoICE9IDcpCisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsaW1tOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtNTQ3MiwxMCArNTc4NCwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4MV93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKy0gICAgICAgICAgICB1MzIgZGVzdHZhbCxpbW07CisrICAgICAgICAgICAgdTMyIGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC01NDg1LDkgKzU3OTcsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wYzgxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKCpkZXN0cmVnLCBpbW0pOworICAgICAgICAgICAgIGlmIChyaCAhPSA3KQorICAgICAgICAgICAgICAgICAqZGVzdHJlZyA9IGRlc3R2YWw7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworLSAgICAgICAgICAgIHUxNiBkZXN0dmFsLGltbTsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTU1MDQsMjMgKzU4MTcsMjMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CisgCistc3RhdGljIHU4ICgqb3BjODJfYnl0ZV9vcGVyYXRpb25bXSkodTggcywgdTggZCkgPQorLXsKKy0gICAgYWRkX2J5dGUsICAgICAgICAgICAvKjAwICovCistICAgIG9yX2J5dGUsICAgICAgICAgICAgLyowMSAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIGFkY19ieXRlLCAgICAgICAgICAgLyowMiAqLworLSAgICBzYmJfYnl0ZSwgICAgICAgICAgIC8qMDMgKi8KKy0gICAgYW5kX2J5dGUsICAgICAgICAgICAvKjA0ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKy0gICAgc3ViX2J5dGUsICAgICAgICAgICAvKjA1ICovCistICAgIHhvcl9ieXRlLCAgICAgICAgICAgLyowNiAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIGNtcF9ieXRlLCAgICAgICAgICAgLyowNyAqLworK3N0YXRpYyB1OCgqb3BjODJfYnl0ZV9vcGVyYXRpb25bXSkgKHU4IHMsIHU4IGQpID0geworKyAgICBhZGRfYnl0ZSwgICAgICAgICAgICAgICAgICAgLyowMCAqLworKyAgICAgICAgb3JfYnl0ZSwgICAgICAgICAgICAgICAgLyowMSAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCisrICAgICAgICBhZGNfYnl0ZSwgICAgICAgICAgICAgICAvKjAyICovCisrICAgICAgICBzYmJfYnl0ZSwgICAgICAgICAgICAgICAvKjAzICovCisrICAgICAgICBhbmRfYnl0ZSwgICAgICAgICAgICAgICAvKjA0ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKysgICAgICAgIHN1Yl9ieXRlLCAgICAgICAgICAgICAgIC8qMDUgKi8KKysgICAgICAgIHhvcl9ieXRlLCAgICAgICAgICAgICAgIC8qMDYgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworKyAgICAgICAgY21wX2J5dGUsICAgICAgICAgICAgICAgLyowNyAqLworIH07CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ODIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgyX2J5dGVfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wYzgyX2J5dGVfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWc7CitAQCAtNTYwNiw3ICs1OTE5LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODJfYnl0ZV9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgaWYgKHJoICE9IDcpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBpbW0pOworQEAgLTU2MjAsMzUgKzU5MzMsMzQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODJfYnl0ZV9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CisgCistc3RhdGljIHUxNiAoKm9wYzgzX3dvcmRfb3BlcmF0aW9uW10pKHUxNiBzLCB1MTYgZCkgPQorLXsKKy0gICAgYWRkX3dvcmQsICAgICAgICAgICAvKjAwICovCistICAgIG9yX3dvcmQsICAgICAgICAgICAgLyowMSAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIGFkY193b3JkLCAgICAgICAgICAgLyowMiAqLworLSAgICBzYmJfd29yZCwgICAgICAgICAgIC8qMDMgKi8KKy0gICAgYW5kX3dvcmQsICAgICAgICAgICAvKjA0ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKy0gICAgc3ViX3dvcmQsICAgICAgICAgICAvKjA1ICovCistICAgIHhvcl93b3JkLCAgICAgICAgICAgLyowNiAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIGNtcF93b3JkLCAgICAgICAgICAgLyowNyAqLworK3N0YXRpYyB1MTYoKm9wYzgzX3dvcmRfb3BlcmF0aW9uW10pICh1MTYgcywgdTE2IGQpID0geworKyAgICBhZGRfd29yZCwgICAgICAgICAgICAgICAgICAgLyowMCAqLworKyAgICAgICAgb3Jfd29yZCwgICAgICAgICAgICAgICAgLyowMSAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCisrICAgICAgICBhZGNfd29yZCwgICAgICAgICAgICAgICAvKjAyICovCisrICAgICAgICBzYmJfd29yZCwgICAgICAgICAgICAgICAvKjAzICovCisrICAgICAgICBhbmRfd29yZCwgICAgICAgICAgICAgICAvKjA0ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKysgICAgICAgIHN1Yl93b3JkLCAgICAgICAgICAgICAgIC8qMDUgKi8KKysgICAgICAgIHhvcl93b3JkLCAgICAgICAgICAgICAgIC8qMDYgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworKyAgICAgICAgY21wX3dvcmQsICAgICAgICAgICAgICAgLyowNyAqLworIH07CisgCistc3RhdGljIHUzMiAoKm9wYzgzX2xvbmdfb3BlcmF0aW9uW10pKHUzMiBzLCB1MzIgZCkgPQorLXsKKy0gICAgYWRkX2xvbmcsICAgICAgICAgICAvKjAwICovCistICAgIG9yX2xvbmcsICAgICAgICAgICAgLyowMSAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIGFkY19sb25nLCAgICAgICAgICAgLyowMiAqLworLSAgICBzYmJfbG9uZywgICAgICAgICAgIC8qMDMgKi8KKy0gICAgYW5kX2xvbmcsICAgICAgICAgICAvKjA0ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKy0gICAgc3ViX2xvbmcsICAgICAgICAgICAvKjA1ICovCistICAgIHhvcl9sb25nLCAgICAgICAgICAgLyowNiAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIGNtcF9sb25nLCAgICAgICAgICAgLyowNyAqLworK3N0YXRpYyB1MzIoKm9wYzgzX2xvbmdfb3BlcmF0aW9uW10pICh1MzIgcywgdTMyIGQpID0geworKyAgICBhZGRfbG9uZywgICAgICAgICAgICAgICAgICAgLyowMCAqLworKyAgICAgICAgb3JfbG9uZywgICAgICAgICAgICAgICAgLyowMSAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCisrICAgICAgICBhZGNfbG9uZywgICAgICAgICAgICAgICAvKjAyICovCisrICAgICAgICBzYmJfbG9uZywgICAgICAgICAgICAgICAvKjAzICovCisrICAgICAgICBhbmRfbG9uZywgICAgICAgICAgICAgICAvKjA0ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKysgICAgICAgIHN1Yl9sb25nLCAgICAgICAgICAgICAgIC8qMDUgKi8KKysgICAgICAgIHhvcl9sb25nLCAgICAgICAgICAgICAgIC8qMDYgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworKyAgICAgICAgY21wX2xvbmcsICAgICAgICAgICAgICAgLyowNyAqLworIH07CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ODMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTU2NjcsNyArNTk3OSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgIGdlbmVyYWwsIHNvIHRoYXQgaXQgaXMgaW1wb3J0YW50IHRvIGxlYXZlIHRoZSBzdHJpbmdzCisgICAgICAgICAgICBpbiB0aGUgc2FtZSBmb3JtYXQsIGV2ZW4gdGhvdWdoIHRoZSByZXN1bHQgaXMgdGhhdCB0aGUgCisgICAgICAgICAgICBhYm92ZSB0ZXN0IGlzIGRvbmUgdHdpY2UuICovCistICAgICAgIHN3aXRjaCAocmgpIHsKKysgICAgICAgIHN3aXRjaCAocmgpIHsKKyAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJBRERcdCIpOworICAgICAgICAgICAgIGJyZWFrOworQEAgLTU3MDAsNyArNjAxMiw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgc3dpdGNoIChtb2QpIHsKKyAgICAgY2FzZSAwOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIGRlc3R2YWwsaW1tOworKyAgICAgICAgICAgIHUzMiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKK0BAIC01NzExLDggKzYwMjMsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODNfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmggIT0gNykKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgZGVzdHZhbCxpbW07CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKK0BAIC01NzI3LDcgKzYwNDAsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIGRlc3R2YWwsaW1tOworKyAgICAgICAgICAgIHUzMiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC01NzM4LDggKzYwNTEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODNfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmggIT0gNykKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgZGVzdHZhbCxpbW07CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC01NzU0LDcgKzYwNjgsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIGRlc3R2YWwsaW1tOworKyAgICAgICAgICAgIHUzMiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKK0BAIC01NzY1LDggKzYwNzksOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODNfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmggIT0gNykKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgZGVzdHZhbCxpbW07CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKK0BAIC01Nzc5LDEwICs2MDk0LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLGltbTsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgaW1tID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworQEAgLTU3OTEsOSArNjEwNiwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODNfbG9uZ19vcGVyYXRpb25bcmhdKSAoKmRlc3RyZWcsIGltbSk7CisgICAgICAgICAgICAgaWYgKHJoICE9IDcpCisgICAgICAgICAgICAgICAgICpkZXN0cmVnID0gZGVzdHZhbDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsaW1tOworKyAgICAgICAgICAgIHUxNiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBpbW0gPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CitAQCAtNTgxMyw3ICs2MTI5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODNfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4NAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfdGVzdF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC01ODUxLDcgKzYxNjgsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgdGVzdF9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC01ODY4LDcgKzYxODUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDg1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC01ODg5LDcgKzYyMDcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHRlc3RfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC01OTE0LDcgKzYyMzMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHRlc3RfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC01OTM5LDcgKzYyNTksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHRlc3RfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC01OTUyLDkgKzYyNzMsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgdGVzdF93b3JkKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTU5NjIsOCArNjI4Myw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3Rfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgdGVzdF9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNTk4Miw3ICs2MzA0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4NgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ19ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeGNoZ19ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC02MDMwLDcgKzYzNTMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBkZXN0dmFsID0gdG1wOworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC02MDQ5LDcgKzYzNzIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDg3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC02MDYxLDcgKzYzODUsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGNhc2UgMDoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqc3JjcmVnOworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLHRtcDsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgdG1wOworIAorICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjA3Myw5ICs2Mzk3LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAqc3JjcmVnID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBkZXN0dmFsID0gdG1wOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKy0gICAgICAgICAgICB1MTYgZGVzdHZhbCx0bXA7CisrICAgICAgICAgICAgdTE2IGRlc3R2YWwsIHRtcDsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTYwOTIsNyArNjQxNyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgY2FzZSAxOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpzcmNyZWc7CistICAgICAgICAgICAgdTMyIGRlc3R2YWwsdG1wOworKyAgICAgICAgICAgIHUzMiBkZXN0dmFsLCB0bXA7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC02MTA0LDkgKzY0MjksMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICpzcmNyZWcgPSBkZXN0dmFsOworICAgICAgICAgICAgIGRlc3R2YWwgPSB0bXA7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworLSAgICAgICAgICAgIHUxNiBkZXN0dmFsLHRtcDsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgdG1wOworIAorICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjEyMyw3ICs2NDQ5LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBjYXNlIDI6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKnNyY3JlZzsKKy0gICAgICAgICAgICB1MzIgZGVzdHZhbCx0bXA7CisrICAgICAgICAgICAgdTMyIGRlc3R2YWwsIHRtcDsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTYxMzUsOSArNjQ2MSwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKnNyY3JlZyA9IGRlc3R2YWw7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHRtcDsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsdG1wOworKyAgICAgICAgICAgIHUxNiBkZXN0dmFsLCB0bXA7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC02MTUxLDkgKzY0NzgsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworICAgICAgICAgICAgIHUzMiB0bXA7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKK0BAIC02MTY0LDggKzY0OTEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgdG1wID0gKnNyY3JlZzsKKyAgICAgICAgICAgICAqc3JjcmVnID0gKmRlc3RyZWc7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSB0bXA7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworICAgICAgICAgICAgIHUxNiB0bXA7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKK0BAIC02MTg3LDcgKzY1MTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDg4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC02MjIxLDcgKzY1NTAsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgKnNyY3JlZyk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworQEAgLTYyMzgsNyArNjU2Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4OQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTMyIGRlc3RvZmZzZXQ7CitAQCAtNjI1Nyw3ICs2NTg3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtNjI3OCw3ICs2NjA5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CitAQCAtNjI5OSw3ICs2NjMxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtNjMxMCw5ICs2NjQzLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsICpzcmNyZWcpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTYzMjAsOCArNjY1Myw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9ICpzcmNyZWc7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTYzNDAsNyArNjY3NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4YQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtNjM3OCw3ICs2NzEzLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworQEAgLTYzOTUsNyArNjczMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4YgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtNjQxNiw3ICs2NzUyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTY0NDEsNyArNjc3OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC02NDY2LDcgKzY4MDQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtNjQ3OSw3ICs2ODE4LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCitAQCAtNjQ4OSw3ICs2ODI4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gKnNyY3JlZzsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKK0BAIC02NTA5LDcgKzY4NDksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OGMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX1NSKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX1JNX1NSKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTY1NDcsNyArNjg4OCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX1NSKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSAqc3JjcmVnOworICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IGRlY29kZV9ybV9zZWdfcmVnaXN0ZXIocmgpOworQEAgLTY1NjQsNDcgKzY5MDUsNzcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fU1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4ZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbGVhX3dvcmRfUl9NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2xlYV93b3JkX1JfTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CistICAgIHUxNiAqc3JjcmVnOworICAgICB1aW50IGRlc3RvZmZzZXQ7CisgCistLyoKKy0gKiBUT0RPOiBOZWVkIHRvIGhhbmRsZSBhZGRyZXNzIHNpemUgcHJlZml4IQorLSAqCistICogbGVhICBlYXgsW2VheCtlYngqMl0gPz8KKy0gKi8KKy0gICAgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkxFQVx0Iik7CisgICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKKy0gICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKy0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CistICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgKnNyY3JlZyA9ICh1MTYpZGVzdG9mZnNldDsKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfQUREUikgeworKyAgICAgICAgICAgIHUzMiAqc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgICpzcmNyZWcgPSAodTMyKSBkZXN0b2Zmc2V0OworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrCisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgKnNyY3JlZyA9ICh1MTYpIGRlc3RvZmZzZXQ7CisrICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKy0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAqc3JjcmVnID0gKHUxNilkZXN0b2Zmc2V0OworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9BRERSKSB7CisrICAgICAgICAgICAgdTMyICpzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrCisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgKnNyY3JlZyA9ICh1MzIpIGRlc3RvZmZzZXQ7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKnNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICAqc3JjcmVnID0gKHUxNikgZGVzdG9mZnNldDsKKysgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDI6CistICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CistICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICpzcmNyZWcgPSAodTE2KWRlc3RvZmZzZXQ7CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0FERFIpIHsKKysgICAgICAgICAgICB1MzIgKnNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICAqc3JjcmVnID0gKHUzMikgZGVzdG9mZnNldDsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgICpzcmNyZWcgPSAodTE2KSBkZXN0b2Zmc2V0OworKyAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgLyogdW5kZWZpbmVkLiAgRG8gbm90aGluZy4gKi8KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtNjYxNiw3ICs2OTg3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbGVhX3dvcmRfUl9NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NSX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX1NSX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTY2NTQsNyArNzAyNiw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NSX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBkZWNvZGVfcm1fc2VnX3JlZ2lzdGVyKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKK0BAIC02Njc3LDcgKzcwNDksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9TUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDhmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTY2OTksNyArNzA3Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gcG9wX2xvbmcoKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworQEAgLTY3MTgsNyArNzA5Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gcG9wX2xvbmcoKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworQEAgLTY3MzcsNyArNzExMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gcG9wX2xvbmcoKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworQEAgLTY3NDcsNyArNzEyMyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworIAorQEAgLTY3NTUsNyArNzEzMSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gcG9wX2xvbmcoKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKK0BAIC02NzczLDcgKzcxNTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5MAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfbm9wKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX25vcCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJOT1BcbiIpOworQEAgLTY3ODYsMTQgKzcxNjQsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfbm9wKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQ1godTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRUNYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLENYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY4MDEsMTAgKzcxODEsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VDWDsKKyAgICAgICAgIE0ueDg2LlJfRUNYID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX0NYOworLSAgICAgICAgTS54ODYuUl9DWCA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9DWCA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY4MTQsMTQgKzcxOTUsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRURYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLERYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY4MjksMTAgKzcyMTIsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VEWDsKKyAgICAgICAgIE0ueDg2LlJfRURYID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX0RYOworLSAgICAgICAgTS54ODYuUl9EWCA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9EWCA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY4NDIsMTQgKzcyMjYsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9CWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRUJYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLEJYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY4NTcsMTAgKzcyNDMsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VCWDsKKyAgICAgICAgIE0ueDg2LlJfRUJYID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX0JYOworLSAgICAgICAgTS54ODYuUl9CWCA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9CWCA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY4NzAsMTQgKzcyNTcsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfU1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRVNQXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLFNQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY4ODUsMTAgKzcyNzQsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VTUDsKKyAgICAgICAgIE0ueDg2LlJfRVNQID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX1NQOworLSAgICAgICAgTS54ODYuUl9TUCA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9TUCA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY4OTgsMTQgKzcyODgsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRUJQXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLEJQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY5MTMsMTAgKzczMDUsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VCUDsKKyAgICAgICAgIE0ueDg2LlJfRUJQID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX0JQOworLSAgICAgICAgTS54ODYuUl9CUCA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9CUCA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY5MjYsMTQgKzczMTksMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9TSSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRVNJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLFNJXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY5NDEsMTAgKzczMzYsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VTSTsKKyAgICAgICAgIE0ueDg2LlJfRVNJID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX1NJOworLSAgICAgICAgTS54ODYuUl9TSSA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9TSSA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY5NTQsMTQgKzczNTAsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfREkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRURJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLERJXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY5NjksMTAgKzczNjcsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VESTsKKyAgICAgICAgIE0ueDg2LlJfRURJID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX0RJOworLSAgICAgICAgTS54ODYuUl9ESSA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9ESSA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY5ODIsMjUgKzczODEsMzAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2Nidyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jYncodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJDV0RFXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNCV1xuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBpZiAoTS54ODYuUl9BWCAmIDB4ODAwMCkgeworICAgICAgICAgICAgIE0ueDg2LlJfRUFYIHw9IDB4ZmZmZjAwMDA7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgTS54ODYuUl9FQVggJj0gMHgwMDAwZmZmZjsKKyAgICAgICAgIH0KKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIGlmIChNLng4Ni5SX0FMICYgMHg4MCkgeworICAgICAgICAgICAgIE0ueDg2LlJfQUggPSAweGZmOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIE0ueDg2LlJfQUggPSAweDA7CisgICAgICAgICB9CisgICAgIH0KK0BAIC03MDEyLDEyICs3NDE2LDE0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2Nidyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDk5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jd2QodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY3dkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQ0RRXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNXRFxuIik7CisgICAgIH0KKyAgICAgREVDT0RFX1BSSU5URigiQ1dEXG4iKTsKK0BAIC03MDI1LDEzICs3NDMxLDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2N3ZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgaWYgKE0ueDg2LlJfRUFYICYgMHg4MDAwMDAwMCkgeworICAgICAgICAgICAgIE0ueDg2LlJfRURYID0gMHhmZmZmZmZmZjsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0VEWCA9IDB4MDsKKyAgICAgICAgIH0KKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIGlmIChNLng4Ni5SX0FYICYgMHg4MDAwKSB7CisgICAgICAgICAgICAgTS54ODYuUl9EWCA9IDB4ZmZmZjsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0RYID0gMHgwOworICAgICAgICAgfQorICAgICB9CitAQCAtNzA0MywxNyArNzQ1MiwyNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jd2QodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5YQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY2FsbF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NhbGxfZmFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworLSAgICB1MTYgZmFyc2VnLCBmYXJvZmY7CisrICAgIHUzMiBmYXJzZWcsIGZhcm9mZjsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKy0JREVDT0RFX1BSSU5URigiQ0FMTFx0Iik7CistCWZhcm9mZiA9IGZldGNoX3dvcmRfaW1tKCk7CistCWZhcnNlZyA9IGZldGNoX3dvcmRfaW1tKCk7CistCURFQ09ERV9QUklOVEYyKCIlMDR4OiIsIGZhcnNlZyk7CistCURFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCBmYXJvZmYpOworLQlDQUxMX1RSQUNFKE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCwgZmFyc2VnLCBmYXJvZmYsICJGQVIgIik7CisrICAgIERFQ09ERV9QUklOVEYoIkNBTExcdCIpOworKyAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgIGZhcm9mZiA9IGZldGNoX2xvbmdfaW1tKCk7CisrICAgICAgICBmYXJzZWcgPSBmZXRjaF93b3JkX2ltbSgpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgZmFyb2ZmID0gZmV0Y2hfd29yZF9pbW0oKTsKKysgICAgICAgIGZhcnNlZyA9IGZldGNoX3dvcmRfaW1tKCk7CisrICAgIH0KKysgICAgREVDT0RFX1BSSU5URjIoIiUwNHg6IiwgZmFyc2VnKTsKKysgICAgREVDT0RFX1BSSU5URjIoIiUwNHhcbiIsIGZhcm9mZik7CisrICAgIENBTExfVFJBQ0UoTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwLCBmYXJzZWcsIGZhcm9mZiwgIkZBUiAiKTsKKyAKKyAgICAgLyogWFhYCisgICAgICAqIAorQEAgLTcwNjQsOCArNzQ4MCwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jYWxsX2Zhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBwdXNoX3dvcmQoTS54ODYuUl9DUyk7CisgICAgIE0ueDg2LlJfQ1MgPSBmYXJzZWc7CistICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKy0gICAgTS54ODYuUl9JUCA9IGZhcm9mZjsKKysgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FSVApOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfSVApOworKyAgICB9CisrICAgIE0ueDg2LlJfRUlQID0gZmFyb2ZmICYgMHhmZmZmOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworIH0KK0BAIC03MDc0LDcgKzc0OTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jYWxsX2Zhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5YgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfd2FpdCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF93YWl0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIldBSVQiKTsKK0BAIC03MDg4LDE0ICs3NTEwLDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3dhaXQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5YworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaGZfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoZl93b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBmbGFnczsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIRkRcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSEZcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CitAQCAtNzEwNCw4ICs3NTI4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaGZfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGZsYWdzID0gKE0ueDg2LlJfRUZMRyAmIEZfTVNLKSB8IEZfQUxXQVlTX09OOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIHB1c2hfbG9uZyhmbGFncyk7CistICAgIH0gZWxzZSB7CistICAgICAgICBwdXNoX3dvcmQoKHUxNilmbGFncyk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBwdXNoX3dvcmQoKHUxNikgZmxhZ3MpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtNzExNSwxOCArNzU0MCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoZl93b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OWQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcGZfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BmX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BGRFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BGXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUZMRyA9IHBvcF9sb25nKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0ZMRyA9IHBvcF93b3JkKCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTcxMzcsNyArNzU2NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcGZfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDllCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zYWhmKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NhaGYodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiU0FIRlxuIik7CitAQCAtNzE1NCwxMiArNzU4MywxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYWhmKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OWYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xhaGYodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbGFoZih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJMQUhGXG4iKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JTS54ODYuUl9BSCA9ICh1OCkoTS54ODYuUl9GTEcgJiAweGZmKTsKKysgICAgTS54ODYuUl9BSCA9ICh1OCkgKE0ueDg2LlJfRkxHICYgMHhmZik7CisgICAgIC8qdW5kb2N1bWVudGVkIFRDKysgYmVoYXZpb3I/Pz8gTm9wZS4gIEl0J3MgZG9jdW1lbnRlZCwgYnV0CisgICAgICAgIHlvdSBoYXZlIHRvbyBsb29rIHJlYWwgaGFyZCB0byBub3RpY2UgaXQuICovCisgICAgIE0ueDg2LlJfQUggfD0gMHgyOworQEAgLTcxNzEsNyArNzYwMSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xhaGYodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X0FMX01fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9BTF9NX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MTYgb2Zmc2V0OworIAorQEAgLTcxODksNyArNzYyMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9BTF9NX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGExCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfQVhfTV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X0FYX01fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUxNiBvZmZzZXQ7CisgCitAQCAtNzE5NywxMyArNzYyOSwxNSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfQVhfTV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBvZmZzZXQgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJNT1ZcdEVBWCxbJTA0eF1cbiIsIG9mZnNldCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiTU9WXHRBWCxbJTA0eF1cbiIsIG9mZnNldCk7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IGZldGNoX2RhdGFfbG9uZyhvZmZzZXQpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9BWCA9IGZldGNoX2RhdGFfd29yZChvZmZzZXQpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC03MjE0LDcgKzc2NDgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfQVhfTV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X01fQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9NX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MTYgb2Zmc2V0OworIAorQEAgLTcyMzIsNyArNzY2Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9NX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGEzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfTV9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X01fQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUxNiBvZmZzZXQ7CisgCitAQCAtNzI0MCwxMyArNzY3NiwxNSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfTV9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBvZmZzZXQgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJNT1ZcdFslMDR4XSxFQVhcbiIsIG9mZnNldCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiTU9WXHRbJTA0eF0sQVhcbiIsIG9mZnNldCk7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBzdG9yZV9kYXRhX2xvbmcob2Zmc2V0LCBNLng4Ni5SX0VBWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBzdG9yZV9kYXRhX3dvcmQob2Zmc2V0LCBNLng4Ni5SX0FYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtNzI1NywxNSArNzY5NSwxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfTV9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92c19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdnNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworLSAgICB1OCAgdmFsOworKyAgICB1OCB2YWw7CisgICAgIHUzMiBjb3VudDsKKyAgICAgaW50IGluYzsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiTU9WU1x0QllURVxuIik7CistICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAgICAvKiBkb3duICovCisgICAgICAgICBpbmMgPSAtMTsKKyAgICAgZWxzZQorICAgICAgICAgaW5jID0gMTsKK0BAIC03MjkyLDcgKzc3MzEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdnNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgdmFsOworICAgICBpbnQgaW5jOworQEAgLTczMDEsMTMgKzc3NDEsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZTXHREV09SRFxuIik7CistICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgICAgLyogZG93biAqLworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgLyogZG93biAqLworICAgICAgICAgICAgIGluYyA9IC00OworICAgICAgICAgZWxzZQorICAgICAgICAgICAgIGluYyA9IDQ7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZTXHRXT1JEXG4iKTsKKy0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAgICAvKiBkb3duICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAvKiBkb3duICovCisgICAgICAgICAgICAgaW5jID0gLTI7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5jID0gMjsKK0BAIC03MzI1LDkgKzc3NjYsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHZhbCA9IGZldGNoX2RhdGFfbG9uZyhNLng4Ni5SX1NJKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksIHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdmFsID0gZmV0Y2hfZGF0YV93b3JkKE0ueDg2LlJfU0kpOworLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwgKHUxNil2YWwpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwgKHUxNikgdmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOworICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CitAQCAtNzM0MCw3ICs3NzgyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YTYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jbXBzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggdmFsMSwgdmFsMjsKKyAgICAgaW50IGluYzsKK0BAIC03MzQ4LDcgKzc3OTEsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJDTVBTXHRCWVRFXG4iKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgICAgIC8qIGRvd24gKi8KKyAgICAgICAgIGluYyA9IC0xOworICAgICBlbHNlCisgICAgICAgICBpbmMgPSAxOworQEAgLTczNTksNyArNzgwMiw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICB3aGlsZSAoTS54ODYuUl9DWCAhPSAwKSB7CisgICAgICAgICAgICAgdmFsMSA9IGZldGNoX2RhdGFfYnl0ZShNLng4Ni5SX1NJKTsKKyAgICAgICAgICAgICB2YWwyID0gZmV0Y2hfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKy0gICAgICAgICAgICAgICAgICAgICBjbXBfYnl0ZSh2YWwxLCB2YWwyKTsKKysgICAgICAgICAgICBjbXBfYnl0ZSh2YWwxLCB2YWwyKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0NYIC09IDE7CisgICAgICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CisgICAgICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CitAQCAtNzM2Nyw3ICs3ODEwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBNLng4Ni5tb2RlICY9IH5TWVNNT0RFX1BSRUZJWF9SRVBFOworLSAgICB9IGVsc2UgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9SRVBORSkgeworKyAgICB9CisrICAgIGVsc2UgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9SRVBORSkgeworICAgICAgICAgLyogUkVQTkUgICovCisgICAgICAgICAvKiBtb3ZlIHRoZW0gdW50aWwgQ1ggaXMgWkVSTy4gKi8KKyAgICAgICAgIHdoaWxlIChNLng4Ni5SX0NYICE9IDApIHsKK0BAIC03MzgxLDcgKzc4MjUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogemVybyBmbGFnIHNldCBtZWFucyBlcXVhbCAqLworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQTkU7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICB2YWwxID0gZmV0Y2hfZGF0YV9ieXRlKE0ueDg2LlJfU0kpOworICAgICAgICAgdmFsMiA9IGZldGNoX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CisgICAgICAgICBjbXBfYnl0ZSh2YWwxLCB2YWwyKTsKK0BAIC03Mzk2LDIxICs3ODQxLDIzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGE3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY21wc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CistICAgIHUzMiB2YWwxLHZhbDI7CisrICAgIHUzMiB2YWwxLCB2YWwyOworICAgICBpbnQgaW5jOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNNUFNcdERXT1JEXG4iKTsKKy0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAvKiBkb3duICovCisgICAgICAgICAgICAgaW5jID0gLTQ7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5jID0gNDsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNNUFNcdFdPUkRcbiIpOworLSAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgIC8qIGRvd24gKi8KKyAgICAgICAgICAgICBpbmMgPSAtMjsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBpbmMgPSAyOworQEAgLTc0MjQsMTAgKzc4NzEsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgdmFsMSA9IGZldGNoX2RhdGFfbG9uZyhNLng4Ni5SX1NJKTsKKyAgICAgICAgICAgICAgICAgdmFsMiA9IGZldGNoX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CisgICAgICAgICAgICAgICAgIGNtcF9sb25nKHZhbDEsIHZhbDIpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB2YWwxID0gZmV0Y2hfZGF0YV93b3JkKE0ueDg2LlJfU0kpOworICAgICAgICAgICAgICAgICB2YWwyID0gZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKy0gICAgICAgICAgICAgICAgY21wX3dvcmQoKHUxNil2YWwxLCAodTE2KXZhbDIpOworKyAgICAgICAgICAgICAgICBjbXBfd29yZCgodTE2KSB2YWwxLCAodTE2KSB2YWwyKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgTS54ODYuUl9DWCAtPSAxOworICAgICAgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOworQEAgLTc0MzYsNyArNzg4NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQRTsKKy0gICAgfSBlbHNlIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfUkVQTkUpIHsKKysgICAgfQorKyAgICBlbHNlIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfUkVQTkUpIHsKKyAgICAgICAgIC8qIFJFUE5FICAqLworICAgICAgICAgLyogbW92ZSB0aGVtIHVudGlsIENYIGlzIFpFUk8uICovCisgICAgICAgICB3aGlsZSAoTS54ODYuUl9DWCAhPSAwKSB7CitAQCAtNzQ0NCwxMCArNzg5MywxMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICB2YWwxID0gZmV0Y2hfZGF0YV9sb25nKE0ueDg2LlJfU0kpOworICAgICAgICAgICAgICAgICB2YWwyID0gZmV0Y2hfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKyAgICAgICAgICAgICAgICAgY21wX2xvbmcodmFsMSwgdmFsMik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHZhbDEgPSBmZXRjaF9kYXRhX3dvcmQoTS54ODYuUl9TSSk7CisgICAgICAgICAgICAgICAgIHZhbDIgPSBmZXRjaF9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworLSAgICAgICAgICAgICAgICBjbXBfd29yZCgodTE2KXZhbDEsICh1MTYpdmFsMik7CisrICAgICAgICAgICAgICAgIGNtcF93b3JkKCh1MTYpIHZhbDEsICh1MTYpIHZhbDIpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBNLng4Ni5SX0NYIC09IDE7CisgICAgICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CitAQCAtNzQ1NiwxNSArNzkwNiwxNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogemVybyBmbGFnIHNldCBtZWFucyBlcXVhbCAqLworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQTkU7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB2YWwxID0gZmV0Y2hfZGF0YV9sb25nKE0ueDg2LlJfU0kpOworICAgICAgICAgICAgIHZhbDIgPSBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworICAgICAgICAgICAgIGNtcF9sb25nKHZhbDEsIHZhbDIpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHZhbDEgPSBmZXRjaF9kYXRhX3dvcmQoTS54ODYuUl9TSSk7CisgICAgICAgICAgICAgdmFsMiA9IGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CistICAgICAgICAgICAgY21wX3dvcmQoKHUxNil2YWwxLCAodTE2KXZhbDIpOworKyAgICAgICAgICAgIGNtcF93b3JkKCh1MTYpIHZhbDEsICh1MTYpIHZhbDIpOworICAgICAgICAgfQorICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CisgICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKK0BAIC03NDc3LDcgKzc5MjksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhOAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfdGVzdF9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IGltbTsKKyAKK0BAIC03NDg2LDcgKzc5MzksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCBpbW0pOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworLQl0ZXN0X2J5dGUoTS54ODYuUl9BTCwgKHU4KWltbSk7CisrICAgIHRlc3RfYnl0ZShNLng4Ni5SX0FMLCAodTgpIGltbSk7CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorQEAgLTc0OTUsNyArNzk0OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3RfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YTkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3RfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3Rlc3RfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtNzUwMyw3ICs3OTU3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdEVBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHRBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC03NTExLDggKzc5NjYsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgdGVzdF9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgdGVzdF93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIHRlc3Rfd29yZChNLng4Ni5SX0FYLCAodTE2KSBzcmN2YWwpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtNzUyMiwxMyArNzk3OCwxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGFhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zdG9zX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3Rvc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBpbmM7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlNUT1NcdEJZVEVcbiIpOworLSAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgICAgLyogZG93biAqLworICAgICAgICAgaW5jID0gLTE7CisgICAgIGVsc2UKKyAgICAgICAgIGluYyA9IDE7CitAQCAtNzU0Miw3ICs3OTk5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3Rvc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2Lm1vZGUgJj0gfihTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLCBNLng4Ni5SX0FMKTsKKyAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworICAgICB9CitAQCAtNzU1NCw3ICs4MDEyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3Rvc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YWIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N0b3Nfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zdG9zX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IGluYzsKKyAgICAgdTMyIGNvdW50OworQEAgLTc1NjIsMTMgKzgwMjEsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3Rvc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJTVE9TXHREV09SRFxuIik7CistICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgLyogZG93biAqLworICAgICAgICAgICAgIGluYyA9IC00OworICAgICAgICAgZWxzZQorICAgICAgICAgICAgIGluYyA9IDQ7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJTVE9TXHRXT1JEXG4iKTsKKy0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAvKiBkb3duICovCisgICAgICAgICAgICAgaW5jID0gLTI7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5jID0gMjsKK0BAIC03NTg1LDcgKzgwNDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdG9zX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICB3aGlsZSAoY291bnQtLSkgeworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLCBNLng4Ni5SX0VBWCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLCBNLng4Ni5SX0FYKTsKKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworQEAgLTc1OTgsMTQgKzgwNTksMTUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3Rvc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvZHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9sb2RzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IGluYzsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiTE9EU1x0QllURVxuIik7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAgICAvKiBkb3duICovCisgICAgICAgICBpbmMgPSAtMTsKKyAgICAgZWxzZQorICAgICAgICAgaW5jID0gMTsKK0BAIC03NjE4LDcgKzgwODAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb2RzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+KFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0FMID0gZmV0Y2hfZGF0YV9ieXRlKE0ueDg2LlJfU0kpOworICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CisgICAgIH0KK0BAIC03NjMwLDcgKzgwOTMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb2RzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9kc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2xvZHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgaW5jOworICAgICB1MzIgY291bnQ7CitAQCAtNzYzOCwxMyArODEwMiwxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb2RzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkxPRFNcdERXT1JEXG4iKTsKKy0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAvKiBkb3duICovCisgICAgICAgICAgICAgaW5jID0gLTQ7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5jID0gNDsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkxPRFNcdFdPUkRcbiIpOworLSAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgIC8qIGRvd24gKi8KKyAgICAgICAgICAgICBpbmMgPSAtMjsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBpbmMgPSAyOworQEAgLTc2NjEsNyArODEyNiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvZHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIHdoaWxlIChjb3VudC0tKSB7CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0VBWCA9IGZldGNoX2RhdGFfbG9uZyhNLng4Ni5SX1NJKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0FYID0gZmV0Y2hfZGF0YV93b3JkKE0ueDg2LlJfU0kpOworICAgICAgICAgfQorICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CitAQCAtNzY3NCw3ICs4MTQwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9kc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YWUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NjYXNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zY2FzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggdmFsMjsKKyAgICAgaW50IGluYzsKK0BAIC03NjgyLDcgKzgxNDksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJTQ0FTXHRCWVRFXG4iKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgICAgIC8qIGRvd24gKi8KKyAgICAgICAgIGluYyA9IC0xOworICAgICBlbHNlCisgICAgICAgICBpbmMgPSAxOworQEAgLTc2OTgsNyArODE2NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NjYXNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQRTsKKy0gICAgfSBlbHNlIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfUkVQTkUpIHsKKysgICAgfQorKyAgICBlbHNlIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfUkVQTkUpIHsKKyAgICAgICAgIC8qIFJFUE5FICAqLworICAgICAgICAgLyogbW92ZSB0aGVtIHVudGlsIENYIGlzIFpFUk8uICovCisgICAgICAgICB3aGlsZSAoTS54ODYuUl9DWCAhPSAwKSB7CitAQCAtNzcxMCw3ICs4MTc4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Nhc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIHplcm8gZmxhZyBzZXQgbWVhbnMgZXF1YWwgKi8KKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2Lm1vZGUgJj0gflNZU01PREVfUFJFRklYX1JFUE5FOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdmFsMiA9IGZldGNoX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CisgICAgICAgICBjbXBfYnl0ZShNLng4Ni5SX0FMLCB2YWwyKTsKKyAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworQEAgLTc3MjMsNyArODE5Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NjYXNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGFmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2Nhc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBpbmM7CisgICAgIHUzMiB2YWw7CitAQCAtNzczMSwxMyArODIwMSwxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNDQVNcdERXT1JEXG4iKTsKKy0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAvKiBkb3duICovCisgICAgICAgICAgICAgaW5jID0gLTQ7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5jID0gNDsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNDQVNcdFdPUkRcbiIpOworLSAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgIC8qIGRvd24gKi8KKyAgICAgICAgICAgICBpbmMgPSAtMjsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBpbmMgPSAyOworQEAgLTc3NTAsOSArODIyMSwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgICAgICB2YWwgPSBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworICAgICAgICAgICAgICAgICBjbXBfbG9uZyhNLng4Ni5SX0VBWCwgdmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdmFsID0gZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKy0gICAgICAgICAgICAgICAgY21wX3dvcmQoTS54ODYuUl9BWCwgKHUxNil2YWwpOworKyAgICAgICAgICAgICAgICBjbXBfd29yZChNLng4Ni5SX0FYLCAodTE2KSB2YWwpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBNLng4Ni5SX0NYIC09IDE7CisgICAgICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CitAQCAtNzc2MCwxNiArODIzMiwxOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2Lm1vZGUgJj0gflNZU01PREVfUFJFRklYX1JFUEU7CistICAgIH0gZWxzZSBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX1JFUE5FKSB7CisrICAgIH0KKysgICAgZWxzZSBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX1JFUE5FKSB7CisgICAgICAgICAvKiBSRVBORSAgKi8KKyAgICAgICAgIC8qIG1vdmUgdGhlbSB1bnRpbCBDWCBpcyBaRVJPLiAqLworICAgICAgICAgd2hpbGUgKE0ueDg2LlJfQ1ggIT0gMCkgeworICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgICAgICB2YWwgPSBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworICAgICAgICAgICAgICAgICBjbXBfbG9uZyhNLng4Ni5SX0VBWCwgdmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdmFsID0gZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKy0gICAgICAgICAgICAgICAgY21wX3dvcmQoTS54ODYuUl9BWCwgKHUxNil2YWwpOworKyAgICAgICAgICAgICAgICBjbXBfd29yZChNLng4Ni5SX0FYLCAodTE2KSB2YWwpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBNLng4Ni5SX0NYIC09IDE7CisgICAgICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CitAQCAtNzc3NywxMyArODI1MSwxNSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogemVybyBmbGFnIHNldCBtZWFucyBlcXVhbCAqLworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQTkU7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB2YWwgPSBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworICAgICAgICAgICAgIGNtcF9sb25nKE0ueDg2LlJfRUFYLCB2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHZhbCA9IGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CistICAgICAgICAgICAgY21wX3dvcmQoTS54ODYuUl9BWCwgKHUxNil2YWwpOworKyAgICAgICAgICAgIGNtcF93b3JkKE0ueDg2LlJfQVgsICh1MTYpIHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKKyAgICAgfQorQEAgLTc3OTUsNyArODI3MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NjYXNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGIwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IGltbTsKKyAKK0BAIC03ODEzLDcgKzgyOTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQ0xfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX0NMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBpbW07CisgCitAQCAtNzgzMSw3ICs4MzA5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQ0xfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YjIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0RMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZfYnl0ZV9ETF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggaW1tOworIAorQEAgLTc4NDksNyArODMyOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0RMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGIzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9CTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X2J5dGVfQkxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IGltbTsKKyAKK0BAIC03ODY3LDcgKzgzNDcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9CTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQUhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX0FIX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBpbW07CisgCitAQCAtNzg4NSw3ICs4MzY2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQUhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YjUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0NIX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZfYnl0ZV9DSF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggaW1tOworIAorQEAgLTc5MDMsNyArODM4NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0NIX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGI2CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9ESF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X2J5dGVfREhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IGltbTsKKyAKK0BAIC03OTIxLDcgKzg0MDQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9ESF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiNworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQkhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX0JIX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBpbW07CisgCitAQCAtNzkzOSw3ICs4NDIzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQkhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YjgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC03OTQ3LDcgKzg0MzIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0RUFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0QVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtNzk1NSw4ICs4NDQxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IHNyY3ZhbDsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfQVggPSAodTE2KXNyY3ZhbDsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfQVggPSAodTE2KSBzcmN2YWw7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC03OTY2LDcgKzg0NTMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiOQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQ1hfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX0NYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTc5NzQsNyArODQ2Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0NYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRFQ1gsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRDWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC03OTgyLDggKzg0NzEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9DWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUNYID0gc3JjdmFsOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9DWCA9ICh1MTYpc3JjdmFsOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9DWCA9ICh1MTYpIHNyY3ZhbDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTc5OTMsNyArODQ4Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0NYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGJhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9EWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X3dvcmRfRFhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtODAwMSw3ICs4NDkyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfRFhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdEVEWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdERYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTgwMDksOCArODUwMSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0RYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FRFggPSBzcmN2YWw7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0RYID0gKHUxNilzcmN2YWw7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0RYID0gKHUxNikgc3JjdmFsOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtODAyMCw3ICs4NTEzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfRFhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YmIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0JYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9CWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC04MDI4LDcgKzg1MjIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9CWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0RUJYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0QlgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtODAzNiw4ICs4NTMxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQlhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VCWCA9IHNyY3ZhbDsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfQlggPSAodTE2KXNyY3ZhbDsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfQlggPSAodTE2KSBzcmN2YWw7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC04MDQ3LDcgKzg1NDMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9CWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfU1BfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX1NQX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTgwNTUsNyArODU1Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NQX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRFU1AsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRTUCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC04MDYzLDggKzg1NjEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9TUF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRVNQID0gc3JjdmFsOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9TUCA9ICh1MTYpc3JjdmFsOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9TUCA9ICh1MTYpIHNyY3ZhbDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTgwNzQsNyArODU3Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NQX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGJkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9CUF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X3dvcmRfQlBfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtODA4Miw3ICs4NTgyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQlBfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdEVCUCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdEJQLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTgwOTAsOCArODU5MSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0JQX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQlAgPSBzcmN2YWw7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0JQID0gKHUxNilzcmN2YWw7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0JQID0gKHUxNikgc3JjdmFsOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtODEwMSw3ICs4NjAzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQlBfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YmUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NJX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9TSV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC04MTA5LDcgKzg2MTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9TSV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0RVNJLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0U0ksIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtODExNyw4ICs4NjIxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfU0lfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VTSSA9IHNyY3ZhbDsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfU0kgPSAodTE2KXNyY3ZhbDsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfU0kgPSAodTE2KSBzcmN2YWw7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC04MTI4LDcgKzg2MzMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9TSV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfRElfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX0RJX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTgxMzYsNyArODY0Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0RJX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRFREksIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRESSwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC04MTQ0LDMxICs4NjUxLDI1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0RJX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FREkgPSBzcmN2YWw7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0RJID0gKHUxNilzcmN2YWw7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0RJID0gKHUxNikgc3JjdmFsOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorIAorIC8qIHVzZWQgYnkgb3Bjb2RlcyBjMCwgZDAsIGFuZCBkMi4gKi8KKy1zdGF0aWMgdTgoKm9wY0QwX2J5dGVfb3BlcmF0aW9uW10pKHU4IGQsIHU4IHMpID0KKy17CistICAgIHJvbF9ieXRlLAorLSAgICByb3JfYnl0ZSwKKy0gICAgcmNsX2J5dGUsCistICAgIHJjcl9ieXRlLAorLSAgICBzaGxfYnl0ZSwKKy0gICAgc2hyX2J5dGUsCistICAgIHNobF9ieXRlLCAgICAgICAgICAgLyogc2FsX2J5dGUgPT09IHNobF9ieXRlICBieSBkZWZpbml0aW9uICovCistICAgIHNhcl9ieXRlLAorLX07Cisrc3RhdGljIHU4KCpvcGNEMF9ieXRlX29wZXJhdGlvbltdKSAodTggZCwgdTggcykgPSB7CisrICAgIHJvbF9ieXRlLCByb3JfYnl0ZSwgcmNsX2J5dGUsIHJjcl9ieXRlLCBzaGxfYnl0ZSwgc2hyX2J5dGUsIHNobF9ieXRlLCAgICAgICAvKiBzYWxfYnl0ZSA9PT0gc2hsX2J5dGUgIGJ5IGRlZmluaXRpb24gKi8KKytzYXJfYnl0ZSx9OworIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGMwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMF9ieXRlX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcGNDMF9ieXRlX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnOworQEAgLTgyNTEsNyArODc1Miw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0MwX2J5dGVfUk1fTUVNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QwX2J5dGVfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgYW10ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGFtdCk7CitAQCAtODI2NSwzNiArODc2NiwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMF9ieXRlX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgfQorIAorIC8qIHVzZWQgYnkgb3Bjb2RlcyBjMSwgZDEsIGFuZCBkMy4gKi8KKy1zdGF0aWMgdTE2KCpvcGNEMV93b3JkX29wZXJhdGlvbltdKSh1MTYgcywgdTggZCkgPQorLXsKKy0gICAgcm9sX3dvcmQsCistICAgIHJvcl93b3JkLAorLSAgICByY2xfd29yZCwKKy0gICAgcmNyX3dvcmQsCistICAgIHNobF93b3JkLAorLSAgICBzaHJfd29yZCwKKy0gICAgc2hsX3dvcmQsICAgICAgICAgICAvKiBzYWxfYnl0ZSA9PT0gc2hsX2J5dGUgIGJ5IGRlZmluaXRpb24gKi8KKy0gICAgc2FyX3dvcmQsCistfTsKKytzdGF0aWMgdTE2KCpvcGNEMV93b3JkX29wZXJhdGlvbltdKSAodTE2IHMsIHU4IGQpID0geworKyAgICByb2xfd29yZCwgcm9yX3dvcmQsIHJjbF93b3JkLCByY3Jfd29yZCwgc2hsX3dvcmQsIHNocl93b3JkLCBzaGxfd29yZCwgICAgICAgLyogc2FsX2J5dGUgPT09IHNobF9ieXRlICBieSBkZWZpbml0aW9uICovCisrc2FyX3dvcmQsfTsKKyAKKyAvKiB1c2VkIGJ5IG9wY29kZXMgYzEsIGQxLCBhbmQgZDMuICovCistc3RhdGljIHUzMiAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW10pKHUzMiBzLCB1OCBkKSA9CisteworLSAgICByb2xfbG9uZywKKy0gICAgcm9yX2xvbmcsCistICAgIHJjbF9sb25nLAorLSAgICByY3JfbG9uZywKKy0gICAgc2hsX2xvbmcsCistICAgIHNocl9sb25nLAorLSAgICBzaGxfbG9uZywgICAgICAgICAgIC8qIHNhbF9ieXRlID09PSBzaGxfYnl0ZSAgYnkgZGVmaW5pdGlvbiAqLworLSAgICBzYXJfbG9uZywKKy19OworK3N0YXRpYyB1MzIoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW10pICh1MzIgcywgdTggZCkgPSB7CisrICAgIHJvbF9sb25nLCByb3JfbG9uZywgcmNsX2xvbmcsIHJjcl9sb25nLCBzaGxfbG9uZywgc2hyX2xvbmcsIHNobF9sb25nLCAgICAgICAvKiBzYWxfYnl0ZSA9PT0gc2hsX2J5dGUgIGJ5IGRlZmluaXRpb24gKi8KKytzYXJfbG9uZyx9OworIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGMxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC04MzU3LDcgKzg4NDMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC04MzgyLDcgKzg4NjksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC04NDA3LDcgKzg4OTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC04NDIwLDcgKzg5MDksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworIAorQEAgLTg0MjksNyArODkxOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0MxX3dvcmRfUk1fTUVNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBhbXQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKCpkZXN0cmVnLCBhbXQpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworQEAgLTg0NDgsNyArODkzOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0MxX3dvcmRfUk1fTUVNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YzIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3JldF9uZWFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9yZXRfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTE2IGltbTsKKyAKK0BAIC04NDU2LDggKzg5NDcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXRfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBERUNPREVfUFJJTlRGKCJSRVRcdCIpOworICAgICBpbW0gPSBmZXRjaF93b3JkX2ltbSgpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIGltbSk7CistCVJFVFVSTl9UUkFDRSgiUkVUIixNLng4Ni5zYXZlZF9jcyxNLng4Ni5zYXZlZF9pcCk7CistCVRSQUNFX0FORF9TVEVQKCk7CisrICAgIFJFVFVSTl9UUkFDRSgiUkVUIiwgTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKysgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgTS54ODYuUl9JUCA9IHBvcF93b3JkKCk7CisgICAgIE0ueDg2LlJfU1AgKz0gaW1tOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtODQ2OCwxMiArODk1OSwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXRfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcmV0X25lYXIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcmV0X25lYXIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUkVUXG4iKTsKKy0JUkVUVVJOX1RSQUNFKCJSRVQiLE0ueDg2LnNhdmVkX2NzLE0ueDg2LnNhdmVkX2lwKTsKKy0JVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgUkVUVVJOX1RSQUNFKCJSRVQiLCBNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXApOworKyAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBNLng4Ni5SX0lQID0gcG9wX3dvcmQoKTsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC04NDgzLDcgKzg5NzUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXRfbmVhcih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGM0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9sZXNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbGVzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJoLCBybDsKKyAgICAgdTE2ICpkc3RyZWc7CitAQCAtODUyMCw3ICs5MDEzLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbGVzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICpkc3RyZWcgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKyAgICAgICAgIE0ueDg2LlJfRVMgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgMik7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICAvKiBVTkRFRklORUQhICovCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICB9CitAQCAtODUzMiw3ICs5MDI1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbGVzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YzUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xkc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9sZHNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmgsIHJsOworICAgICB1MTYgKmRzdHJlZzsKK0BAIC04NTY5LDcgKzkwNjMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sZHNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgKmRzdHJlZyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgTS54ODYuUl9EUyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyAyKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIC8qIFVOREVGSU5FRCEgKi8KKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIH0KK0BAIC04NTgxLDcgKzkwNzUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sZHNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnOworQEAgLTg2MjAsNyArOTExNSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGltbSk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJTJ4XG4iLCBpbW0pOworQEAgLTg2MzYsNyArOTEzMSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGM3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTg2NTksNyArOTE1NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgaW1tKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBpbW0pOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CitAQCAtODY4MCw3ICs5MTc3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGltbSk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC04NzAxLDcgKzkxOTksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgaW1tKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworQEAgLTg3MTIsMTkgKzkyMTEsMjAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgaW1tKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkJCXUzMiAqZGVzdHJlZzsKKy0JCQl1MzIgaW1tOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKysgICAgICAgICAgICB1MzIgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfbG9uZ19pbW0oKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBpbW07CistICAgICAgICB9IGVsc2UgeworLQkJCXUxNiAqZGVzdHJlZzsKKy0JCQl1MTYgaW1tOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworKyAgICAgICAgICAgIHUxNiBpbW07CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF93b3JkX2ltbSgpOworQEAgLTg3NDIsMTAgKzkyNDIsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YzgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2VudGVyKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2VudGVyKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CistICAgIHUxNiBsb2NhbCxmcmFtZV9wb2ludGVyOworLSAgICB1OCAgbmVzdGluZzsKKysgICAgdTE2IGxvY2FsLCBmcmFtZV9wb2ludGVyOworKyAgICB1OCBuZXN0aW5nOworICAgICBpbnQgaTsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKK0BAIC04NzYwLDExICs5MjYxLDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2VudGVyKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGZvciAoaSA9IDE7IGkgPCBuZXN0aW5nOyBpKyspIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0JQIC09IDI7CisgICAgICAgICAgICAgcHVzaF93b3JkKGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9TUywgTS54ODYuUl9CUCkpOworLSAgICAgICAgICAgIH0KKy0gICAgICAgIHB1c2hfd29yZChmcmFtZV9wb2ludGVyKTsKKyAgICAgICAgIH0KKysgICAgICAgIHB1c2hfd29yZChmcmFtZV9wb2ludGVyKTsKKysgICAgfQorICAgICBNLng4Ni5SX0JQID0gZnJhbWVfcG9pbnRlcjsKKy0gICAgTS54ODYuUl9TUCA9ICh1MTYpKE0ueDg2LlJfU1AgLSBsb2NhbCk7CisrICAgIE0ueDg2LlJfU1AgPSAodTE2KSAoTS54ODYuUl9TUCAtIGxvY2FsKTsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CitAQCAtODc3Myw3ICs5Mjc0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZW50ZXIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjOQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbGVhdmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbGVhdmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiTEVBVkVcbiIpOworQEAgLTg3ODgsNyArOTI5MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xlYXZlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4Y2EKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3JldF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3JldF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUxNiBpbW07CisgCitAQCAtODc5Niw4ICs5Mjk5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcmV0X2Zhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBERUNPREVfUFJJTlRGKCJSRVRGXHQiKTsKKyAgICAgaW1tID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBpbW0pOworLQlSRVRVUk5fVFJBQ0UoIlJFVEYiLE0ueDg2LnNhdmVkX2NzLE0ueDg2LnNhdmVkX2lwKTsKKy0JVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgUkVUVVJOX1RSQUNFKCJSRVRGIiwgTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKysgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgTS54ODYuUl9JUCA9IHBvcF93b3JkKCk7CisgICAgIE0ueDg2LlJfQ1MgPSBwb3Bfd29yZCgpOworICAgICBNLng4Ni5SX1NQICs9IGltbTsKK0BAIC04ODA5LDEyICs5MzEyLDEzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3JldF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4Y2IKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3JldF9mYXIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcmV0X2Zhcih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJSRVRGXG4iKTsKKy0JUkVUVVJOX1RSQUNFKCJSRVRGIixNLng4Ni5zYXZlZF9jcyxNLng4Ni5zYXZlZF9pcCk7CistCVRSQUNFX0FORF9TVEVQKCk7CisrICAgIFJFVFVSTl9UUkFDRSgiUkVURiIsIE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCk7CisrICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIE0ueDg2LlJfSVAgPSBwb3Bfd29yZCgpOworICAgICBNLng4Ni5SX0NTID0gcG9wX3dvcmQoKTsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTg4MjUsMTUgKzkzMjksMTcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcmV0X2Zhcih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGNjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbnQzKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2ludDModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSU5UIDNcbiIpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoX1g4NkVNVV9pbnRyVGFiWzNdKSB7CistCSgqX1g4NkVNVV9pbnRyVGFiWzNdKSgzKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIHB1c2hfd29yZCgodTE2KU0ueDg2LlJfRkxHKTsKKysgICAgICAgICgqX1g4NkVNVV9pbnRyVGFiWzNdKSAoMyk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBwdXNoX3dvcmQoKHUxNikgTS54ODYuUl9GTEcpOworICAgICAgICAgQ0xFQVJfRkxBRyhGX0lGKTsKKyAgICAgICAgIENMRUFSX0ZMQUcoRl9URik7CisgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9DUyk7CitAQCAtODg0OSw3ICs5MzU1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW50Myh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGNkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbnRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2ludF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggaW50bnVtOworIAorQEAgLTg4NTksOSArOTM2NiwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbnRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBpbnRudW0pOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoX1g4NkVNVV9pbnRyVGFiW2ludG51bV0pIHsKKy0JKCpfWDg2RU1VX2ludHJUYWJbaW50bnVtXSkoaW50bnVtKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIHB1c2hfd29yZCgodTE2KU0ueDg2LlJfRkxHKTsKKysgICAgICAgICgqX1g4NkVNVV9pbnRyVGFiW2ludG51bV0pIChpbnRudW0pOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcHVzaF93b3JkKCh1MTYpIE0ueDg2LlJfRkxHKTsKKyAgICAgICAgIENMRUFSX0ZMQUcoRl9JRik7CisgICAgICAgICBDTEVBUl9GTEFHKEZfVEYpOworICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQ1MpOworQEAgLTg4NzcsMTYgKzkzODUsMTggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW50X0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbnRvKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2ludG8odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSU5UT1xuIik7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChBQ0NFU1NfRkxBRyhGX09GKSkgeworLQlpZiAoX1g4NkVNVV9pbnRyVGFiWzRdKSB7CistCSAgICAoKl9YODZFTVVfaW50clRhYls0XSkoNCk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHB1c2hfd29yZCgodTE2KU0ueDg2LlJfRkxHKTsKKysgICAgICAgIGlmIChfWDg2RU1VX2ludHJUYWJbNF0pIHsKKysgICAgICAgICAgICAoKl9YODZFTVVfaW50clRhYls0XSkgKDQpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcHVzaF93b3JkKCh1MTYpIE0ueDg2LlJfRkxHKTsKKyAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfSUYpOworICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9URik7CisgICAgICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQ1MpOworQEAgLTg5MDMsNyArOTQxMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ludG8odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaXJldCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pcmV0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIklSRVRcbiIpOworQEAgLTg5MjEsNyArOTQzMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2lyZXQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhkMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDBfYnl0ZV9STV8xKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wY0QwX2J5dGVfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnOworQEAgLTg5OTksNyArOTUxMSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QwX2J5dGVfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMF9ieXRlX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCAxKTsKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsMVxuIik7CisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTkwMTUsNyArOTUyNyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QwX2J5dGVfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGQxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEMV93b3JkX1JNXzEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjRDFfd29yZF9STV8xKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTkwNzUsNyArOTU4OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QxX3dvcmRfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCAxKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CitAQCAtOTA5OCw3ICs5NjEyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDFfd29yZF9STV8xKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIDEpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC05MTIxLDcgKzk2MzYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEMV93b3JkX1JNXzEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgMSk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkJZVEUgUFRSICIpOworQEAgLTkxMzMsMTkgKzk2NDksMjAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDFfd29yZF9STV8xKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCQl1MzIgZGVzdHZhbDsKKy0JCQl1MzIgKmRlc3RyZWc7CisrICAgICAgICAgICAgdTMyIGRlc3R2YWw7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLDFcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoKmRlc3RyZWcsIDEpOworICAgICAgICAgICAgICpkZXN0cmVnID0gZGVzdHZhbDsKKy0gICAgICAgIH0gZWxzZSB7CistCQkJdTE2IGRlc3R2YWw7CistCQkJdTE2ICpkZXN0cmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLDFcbiIpOworQEAgLTkxNjMsNyArOTY4MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QxX3dvcmRfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGQyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEMl9ieXRlX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wY0QyX2J5dGVfUk1fQ0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZzsKK0BAIC05MjQzLDcgKzk3NjEsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEMl9ieXRlX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QwX2J5dGVfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CitAQCAtOTI1OSw3ICs5Nzc3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDJfYnl0ZV9STV9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGQzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEM193b3JkX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wY0QzX3dvcmRfUk1fQ0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtOTMyMSw3ICs5ODQwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDNfd29yZF9STV9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC05MzQ0LDcgKzk4NjQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEM193b3JkX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworQEAgLTkzNjcsNyArOTg4OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QzX3dvcmRfUk1fQ0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgYW10KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CitAQCAtOTM3OSw3ICs5OTAxLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDNfd29yZF9STV9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworIAorQEAgLTkzODcsNyArOTkwOSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QzX3dvcmRfUk1fQ0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoKmRlc3RyZWcsIGFtdCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CitAQCAtOTQwNSwxNiArOTkyOCwxNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEM193b3JkX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZDQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FhbSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hYW0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggYTsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQUFNXG4iKTsKKy0gICAgYSA9IGZldGNoX2J5dGVfaW1tKCk7ICAgICAgLyogdGhpcyBpcyBhIHN0dXBpZCBlbmNvZGluZy4gKi8KKysgICAgYSA9IGZldGNoX2J5dGVfaW1tKCk7ICAgICAgIC8qIHRoaXMgaXMgYSBzdHVwaWQgZW5jb2RpbmcuICovCisgICAgIGlmIChhICE9IDEwKSB7CistCS8qIGZpeDogYWRkIGJhc2UgZGVjb2RpbmcKKy0JICAgYWFtX3dvcmQodTggdmFsLCBpbnQgYmFzZSBhKSAqLworKyAgICAgICAgLyogZml4OiBhZGQgYmFzZSBkZWNvZGluZworKyAgICAgICAgICAgYWFtX3dvcmQodTggdmFsLCBpbnQgYmFzZSBhKSAqLworICAgICAgICAgREVDT0RFX1BSSU5URigiRVJST1IgREVDT0RJTkcgQUFNXG4iKTsKKyAgICAgICAgIFRSQUNFX1JFR1MoKTsKKyAgICAgICAgIEhBTFRfU1lTKCk7CitAQCAtOTQzMCw3ICs5OTU0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWFtKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZDUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FhZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hYWQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggYTsKKyAKK0BAIC05NDM4LDggKzk5NjMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hYWQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBERUNPREVfUFJJTlRGKCJBQURcbiIpOworICAgICBhID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgaWYgKGEgIT0gMTApIHsKKy0JLyogZml4OiBhZGQgYmFzZSBkZWNvZGluZworLQkgICBhYWRfd29yZCh1MTYgdmFsLCBpbnQgYmFzZSBhKSAqLworKyAgICAgICAgLyogZml4OiBhZGQgYmFzZSBkZWNvZGluZworKyAgICAgICAgICAgYWFkX3dvcmQodTE2IHZhbCwgaW50IGJhc2UgYSkgKi8KKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkVSUk9SIERFQ09ESU5HIEFBTVxuIik7CisgICAgICAgICBUUkFDRV9SRUdTKCk7CisgICAgICAgICBIQUxUX1NZUygpOworQEAgLTk0NTYsMTQgKzk5ODEsMTUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWFkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZDcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hsYXQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeGxhdCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MTYgYWRkcjsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiWExBVFxuIik7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CistCWFkZHIgPSAodTE2KShNLng4Ni5SX0JYICsgKHU4KU0ueDg2LlJfQUwpOworKyAgICBhZGRyID0gKHUxNikgKE0ueDg2LlJfQlggKyAodTgpIE0ueDg2LlJfQUwpOworICAgICBNLng4Ni5SX0FMID0gZmV0Y2hfZGF0YV9ieXRlKGFkZHIpOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTk0NzUsNyArMTAwMDEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94bGF0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZTAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvb3BuZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9sb29wbmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczE2IGlwOworIAorQEAgLTk0ODYsNyArMTAwMTMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb29wbmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBERUNPREVfUFJJTlRGMigiJTA0eFxuIiwgaXApOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBNLng4Ni5SX0NYIC09IDE7CistICAgIGlmIChNLng4Ni5SX0NYICE9IDAgJiYgIUFDQ0VTU19GTEFHKEZfWkYpKSAgICAgIC8qIENYICE9IDAgYW5kICFaRiAqLworKyAgICBpZiAoTS54ODYuUl9DWCAhPSAwICYmICFBQ0NFU1NfRkxBRyhGX1pGKSkgIC8qIENYICE9IDAgYW5kICFaRiAqLworICAgICAgICAgTS54ODYuUl9JUCA9IGlwOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTk0OTYsNyArMTAwMjMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb29wbmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9vcGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbG9vcGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczE2IGlwOworIAorQEAgLTk1MDcsNyArMTAwMzUsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb29wZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCBpcCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIE0ueDg2LlJfQ1ggLT0gMTsKKy0gICAgaWYgKE0ueDg2LlJfQ1ggIT0gMCAmJiBBQ0NFU1NfRkxBRyhGX1pGKSkgICAgICAgLyogQ1ggIT0gMCBhbmQgWkYgKi8KKysgICAgaWYgKE0ueDg2LlJfQ1ggIT0gMCAmJiBBQ0NFU1NfRkxBRyhGX1pGKSkgICAvKiBDWCAhPSAwIGFuZCBaRiAqLworICAgICAgICAgTS54ODYuUl9JUCA9IGlwOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTk1MTcsNyArMTAwNDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb29wZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGUyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9sb29wKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2xvb3AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczE2IGlwOworIAorQEAgLTk1MzgsMTYgKzEwMDY3LDE3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvb3AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfamN4eih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qY3h6KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUxNiB0YXJnZXQ7CistICAgIHM4ICBvZmZzZXQ7CisrICAgIHM4IG9mZnNldDsKKyAKKyAgICAgLyoganVtcCB0byBieXRlIG9mZnNldCBpZiBvdmVyZmxvdyBmbGFnIGlzIHNldCAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKQ1haXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyBvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYuUl9DWCA9PSAwKQorQEAgLTk1NjAsMTYgKzEwMDkwLDE3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2pjeHoodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5fYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5fYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggcG9ydDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSU5cdCIpOworLQlwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICBwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworICAgICBERUNPREVfUFJJTlRGMigiJXgsQUxcbiIsIHBvcnQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICBNLng4Ni5SX0FMID0gKCpzeXNfaW5iKShwb3J0KTsKKysgICAgTS54ODYuUl9BTCA9ICgqc3lzX2luYikgKHBvcnQpOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworIH0KK0BAIC05NTc4LDIzICsxMDEwOSwyNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGU1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBwb3J0OworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJJTlx0Iik7CistCXBvcnQgPSAodTgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHBvcnQgPSAodTgpIGZldGNoX2J5dGVfaW1tKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URjIoIkVBWCwleFxuIiwgcG9ydCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiQVgsJXhcbiIsIHBvcnQpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgTS54ODYuUl9FQVggPSAoKnN5c19pbmwpKHBvcnQpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9BWCA9ICgqc3lzX2ludykocG9ydCk7CisrICAgICAgICBNLng4Ni5SX0VBWCA9ICgqc3lzX2lubCkgKHBvcnQpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9BWCA9ICgqc3lzX2ludykgKHBvcnQpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtOTYwNCwxNiArMTAxMzgsMTcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5fd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0X2J5dGVfSU1NX0FMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX291dF9ieXRlX0lNTV9BTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBwb3J0OworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJPVVRcdCIpOworLQlwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICBwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworICAgICBERUNPREVfUFJJTlRGMigiJXgsQUxcbiIsIHBvcnQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAoKnN5c19vdXRiKShwb3J0LCBNLng4Ni5SX0FMKTsKKysgICAgKCpzeXNfb3V0YikgKHBvcnQsIE0ueDg2LlJfQUwpOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworIH0KK0BAIC05NjIyLDIzICsxMDE1NywyNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vdXRfYnl0ZV9JTU1fQUwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlNworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0X3dvcmRfSU1NX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX291dF93b3JkX0lNTV9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBwb3J0OworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJPVVRcdCIpOworLQlwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICBwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCIleCxFQVhcbiIsIHBvcnQpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URjIoIiV4LEFYXG4iLCBwb3J0KTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICgqc3lzX291dGwpKHBvcnQsIE0ueDg2LlJfRUFYKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgICgqc3lzX291dHcpKHBvcnQsIE0ueDg2LlJfQVgpOworKyAgICAgICAgKCpzeXNfb3V0bCkgKHBvcnQsIE0ueDg2LlJfRUFYKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgICgqc3lzX291dHcpIChwb3J0LCBNLng4Ni5SX0FYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTk2NDgsMTkgKzEwMTg2LDM1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX291dF93b3JkX0lNTV9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGU4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jYWxsX25lYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NhbGxfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKy0gICAgczE2IGlwOworKyAgICBzMTYgaXAxNjsKKysgICAgczMyIGlwMzI7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CistCURFQ09ERV9QUklOVEYoIkNBTExcdCIpOworLQlpcCA9IChzMTYpIGZldGNoX3dvcmRfaW1tKCk7CistCWlwICs9IChzMTYpIE0ueDg2LlJfSVA7ICAgIC8qIENIRUNLIFNJR04gKi8KKy0JREVDT0RFX1BSSU5URjIoIiUwNHhcbiIsICh1MTYpaXApOworLQlDQUxMX1RSQUNFKE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCwgTS54ODYuUl9DUywgaXAsICIiKTsKKysgICAgREVDT0RFX1BSSU5URigiQ0FMTFx0Iik7CisrICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgaXAzMiA9IChzMzIpIGZldGNoX2xvbmdfaW1tKCk7CisrICAgICAgICBpcDMyICs9IChzMTYpIE0ueDg2LlJfSVA7ICAgICAgIC8qIENIRUNLIFNJR04gKi8KKysgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCAodTE2KSBpcDMyKTsKKysgICAgICAgIENBTExfVFJBQ0UoTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwLCBNLng4Ni5SX0NTLCBpcDMyLCAiIik7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBpcDE2ID0gKHMxNikgZmV0Y2hfd29yZF9pbW0oKTsKKysgICAgICAgIGlwMTYgKz0gKHMxNikgTS54ODYuUl9JUDsgICAgICAgLyogQ0hFQ0sgU0lHTiAqLworKyAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhcbiIsICh1MTYpIGlwMTYpOworKyAgICAgICAgQ0FMTF9UUkFDRShNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXAsIE0ueDg2LlJfQ1MsIGlwMTYsICIiKTsKKysgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CistICAgIE0ueDg2LlJfSVAgPSBpcDsKKysgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FSVApOworKyAgICAgICAgTS54ODYuUl9FSVAgPSBpcDMyICYgMHhmZmZmOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfSVApOworKyAgICAgICAgTS54ODYuUl9FSVAgPSBpcDE2OworKyAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorQEAgLTk2NjksMTcgKzEwMjIzLDI3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NhbGxfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlOQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CistICAgIGludCBpcDsKKysgICAgdTMyIGlwOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTVBcdCIpOworLSAgICBpcCA9IChzMTYpZmV0Y2hfd29yZF9pbW0oKTsKKy0gICAgaXAgKz0gKHMxNilNLng4Ni5SX0lQOworLSAgICBERUNPREVfUFJJTlRGMigiJTA0eFxuIiwgKHUxNilpcCk7CistICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgIE0ueDg2LlJfSVAgPSAodTE2KWlwOworKyAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgIGlwID0gKHUzMikgZmV0Y2hfbG9uZ19pbW0oKTsKKysgICAgICAgIGlwICs9ICh1MzIpIE0ueDg2LlJfRUlQOworKyAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwOHhcbiIsICh1MzIpIGlwKTsKKysgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICBNLng4Ni5SX0VJUCA9ICh1MzIpIGlwOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgaXAgPSAoczE2KSBmZXRjaF93b3JkX2ltbSgpOworKyAgICAgICAgaXAgKz0gKHMxNikgTS54ODYuUl9JUDsKKysgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCAodTE2KSBpcCk7CisrICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgTS54ODYuUl9JUCA9ICh1MTYpIGlwOworKyAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorQEAgLTk2ODgsMTggKzEwMjUyLDI1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlYQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfZmFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworLSAgICB1MTYgY3MsIGlwOworKyAgICB1MTYgY3M7CisrICAgIHUzMiBpcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk1QXHRGQVIgIik7CistICAgIGlwID0gZmV0Y2hfd29yZF9pbW0oKTsKKysgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICBpcCA9IGZldGNoX2xvbmdfaW1tKCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBpcCA9IGZldGNoX3dvcmRfaW1tKCk7CisrICAgIH0KKyAgICAgY3MgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICBERUNPREVfUFJJTlRGMigiJTA0eDoiLCBjcyk7CisgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCBpcCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgIE0ueDg2LlJfSVAgPSBpcDsKKysgICAgTS54ODYuUl9FSVAgPSBpcCAmIDB4ZmZmZjsKKyAgICAgTS54ODYuUl9DUyA9IGNzOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTk3MDksMTUgKzEwMjgwLDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfZmFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGViCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX2J5dGVfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTE2IHRhcmdldDsKKyAgICAgczggb2Zmc2V0OworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTVBcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIG9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIE0ueDg2LlJfSVAgPSB0YXJnZXQ7CitAQCAtOTcyOSwxMiArMTAzMDEsMTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9ieXRlX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGVjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbl9ieXRlX0FMX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luX2J5dGVfQUxfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSU5cdEFMLERYXG4iKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgTS54ODYuUl9BTCA9ICgqc3lzX2luYikoTS54ODYuUl9EWCk7CisrICAgIE0ueDg2LlJfQUwgPSAoKnN5c19pbmIpIChNLng4Ni5SX0RYKTsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CitAQCAtOTc0MywxOSArMTAzMTYsMjIgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5fYnl0ZV9BTF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGVkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbl93b3JkX0FYX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luX3dvcmRfQVhfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTlx0RUFYLERYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOXHRBWCxEWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICBNLng4Ni5SX0VBWCA9ICgqc3lzX2lubCkoTS54ODYuUl9EWCk7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0FYID0gKCpzeXNfaW53KShNLng4Ni5SX0RYKTsKKysgICAgICAgIE0ueDg2LlJfRUFYID0gKCpzeXNfaW5sKSAoTS54ODYuUl9EWCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0FYID0gKCpzeXNfaW53KSAoTS54ODYuUl9EWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC05NzY1LDEyICsxMDM0MSwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbl93b3JkX0FYX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZWUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX291dF9ieXRlX0RYX0FMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX291dF9ieXRlX0RYX0FMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIk9VVFx0RFgsQUxcbiIpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAoKnN5c19vdXRiKShNLng4Ni5SX0RYLCBNLng4Ni5SX0FMKTsKKysgICAgKCpzeXNfb3V0YikgKE0ueDg2LlJfRFgsIE0ueDg2LlJfQUwpOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworIH0KK0BAIC05Nzc5LDE5ICsxMDM1NiwyMiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vdXRfYnl0ZV9EWF9BTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGVmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vdXRfd29yZF9EWF9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vdXRfd29yZF9EWF9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk9VVFx0RFgsRUFYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk9VVFx0RFgsQVhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgKCpzeXNfb3V0bCkoTS54ODYuUl9EWCwgTS54ODYuUl9FQVgpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgKCpzeXNfb3V0dykoTS54ODYuUl9EWCwgTS54ODYuUl9BWCk7CisrICAgICAgICAoKnN5c19vdXRsKSAoTS54ODYuUl9EWCwgTS54ODYuUl9FQVgpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgKCpzeXNfb3V0dykgKE0ueDg2LlJfRFgsIE0ueDg2LlJfQVgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtOTgwMSw3ICsxMDM4MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX291dF93b3JkX0RYX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZjAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvY2sodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbG9jayh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJMT0NLOlxuIik7CitAQCAtOTgxNiw3ICsxMDM5Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvY2sodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcmVwbmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcmVwbmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUkVQTkVcbiIpOworQEAgLTk4MzAsNyArMTA0MTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXBuZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGYzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXBlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3JlcGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUkVQRVxuIik7CitAQCAtOTg0NCw3ICsxMDQyNyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3JlcGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaGFsdCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9oYWx0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkhBTFRcbiIpOworQEAgLTk4NTgsNyArMTA0NDIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9oYWx0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZjUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtYyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jbWModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgLyogY29tcGxlbWVudCB0aGUgY2FycnkgZmxhZy4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKK0BAIC05ODczLDcgKzEwNDU4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21jKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZjYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y2X2J5dGVfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjRjZfYnl0ZV9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnOworQEAgLTk4ODUsOSArMTA0NzEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGNl9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgIC8qIG1vZD0wMCAqLworKyAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MDAgKi8KKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgIGNhc2UgMDogICAgICAgICAvKiB0ZXN0IGJ5dGUgaW1tICovCisrICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgIC8qIHRlc3QgYnl0ZSBpbW0gKi8KKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHRCWVRFIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTk5NTMsOSArMTA1MzksOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGNl9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGVuZCBtb2Q9PTAwICovCistICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MDEgKi8KKysgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgLyogbW9kPTAxICovCisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICBjYXNlIDA6ICAgICAgICAgLyogdGVzdCBieXRlIGltbSAqLworKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAvKiB0ZXN0IGJ5dGUgaW1tICovCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0QllURSBQVFIgIik7CisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xMDAyMSw5ICsxMDYwNyw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y2X2J5dGVfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogZW5kIG1vZD09MDEgKi8KKy0gICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgIC8qIG1vZD0xMCAqLworKyAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MTAgKi8KKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgIGNhc2UgMDogICAgICAgICAvKiB0ZXN0IGJ5dGUgaW1tICovCisrICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgIC8qIHRlc3QgYnl0ZSBpbW0gKi8KKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHRCWVRFIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTEwMDg5LDkgKzEwNjc1LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjZfYnl0ZV9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBlbmQgbW9kPT0xMCAqLworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogbW9kPTExICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIG1vZD0xMSAqLworICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgY2FzZSAwOiAgICAgICAgIC8qIHRlc3QgYnl0ZSBpbW0gKi8KKysgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgLyogdGVzdCBieXRlIGltbSAqLworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdCIpOworICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTEwMTIzLDcgKzEwNzA5LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjZfYnl0ZV9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgbXVsX2J5dGUoKmRlc3RyZWcpOyAgICAgIC8qISEhICAqLworKyAgICAgICAgICAgIG11bF9ieXRlKCpkZXN0cmVnKTsgLyohISEgICovCisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSU1VTFx0Iik7CitAQCAtMTAxNTcsNyArMTA3NDMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGNl9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZjcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC0xMDE2NywxMSArMTA3NTQsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAobW9kKSB7CistICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MDAgKi8KKysgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgLyogbW9kPTAwICovCisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICBjYXNlIDA6ICAgICAgICAgLyogdGVzdCB3b3JkIGltbSAqLworKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAvKiB0ZXN0IHdvcmQgaW1tICovCisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsLHNyY3ZhbDsKKysgICAgICAgICAgICAgICAgdTMyIGRlc3R2YWwsIHNyY3ZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0RFdPUkQgUFRSICIpOworICAgICAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtMTAxODEsOCArMTA3NjgsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgdGVzdF9sb25nKGRlc3R2YWwsIHNyY3ZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICAgICAgdTE2IGRlc3R2YWwsc3JjdmFsOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWwsIHNyY3ZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0V09SRCBQVFIgIik7CisgICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKK0BAIC0xMDIwOSw3ICsxMDc5Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gbm90X2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5PVFx0V09SRCBQVFIgIik7CitAQCAtMTAyMzIsNyArMTA4MjEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IG5lZ19sb25nKGRlc3R2YWwpOworICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJORUdcdFdPUkQgUFRSICIpOworQEAgLTEwMjU0LDcgKzEwODQ0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIG11bF9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTVVMXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDI3NSw3ICsxMDg2Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBpbXVsX2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJTVVMXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDI5Niw3ICsxMDg4OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkaXZfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRJVlx0V09SRCBQVFIgIik7CitAQCAtMTAzMTcsNyArMTA5MTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgaWRpdl9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSURJVlx0V09SRCBQVFIgIik7CitAQCAtMTAzMzAsMTEgKzEwOTI0LDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogZW5kIG1vZD09MDAgKi8KKy0gICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgIC8qIG1vZD0wMSAqLworKyAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MDEgKi8KKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgIGNhc2UgMDogICAgICAgICAvKiB0ZXN0IHdvcmQgaW1tICovCisrICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgIC8qIHRlc3Qgd29yZCBpbW0gKi8KKyAgICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICAgICAgdTMyIGRlc3R2YWwsc3JjdmFsOworKyAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbCwgc3JjdmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHREV09SRCBQVFIgIik7CisgICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC0xMDM0NCw4ICsxMDkzOCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICB0ZXN0X2xvbmcoZGVzdHZhbCwgc3JjdmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbCxzcmN2YWw7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbCwgc3JjdmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworQEAgLTEwMzcyLDcgKzEwOTY3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBub3RfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTk9UXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDM5NSw3ICsxMDk5MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gbmVnX2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5FR1x0V09SRCBQVFIgIik7CitAQCAtMTA0MTcsNyArMTEwMTQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgbXVsX2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJNVUxcdFdPUkQgUFRSICIpOworQEAgLTEwNDM4LDcgKzExMDM2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGltdWxfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklNVUxcdFdPUkQgUFRSICIpOworQEAgLTEwNDU5LDcgKzExMDU4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRpdl9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRElWXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDQ4MCw3ICsxMTA4MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBpZGl2X2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJRElWXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDQ5MywxMSArMTEwOTQsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBlbmQgbW9kPT0wMSAqLworLSAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgICAgLyogbW9kPTEwICovCisrICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgIC8qIG1vZD0xMCAqLworICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgY2FzZSAwOiAgICAgICAgIC8qIHRlc3Qgd29yZCBpbW0gKi8KKysgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgLyogdGVzdCB3b3JkIGltbSAqLworICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbCxzcmN2YWw7CisrICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsLCBzcmN2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdERXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworQEAgLTEwNTA3LDggKzExMTA4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIHRlc3RfbG9uZyhkZXN0dmFsLCBzcmN2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsLHNyY3ZhbDsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsLCBzcmN2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdFdPUkQgUFRSICIpOworICAgICAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtMTA1MzUsNyArMTExMzcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IG5vdF9sb25nKGRlc3R2YWwpOworICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJOT1RcdFdPUkQgUFRSICIpOworQEAgLTEwNTU4LDcgKzExMTYxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBuZWdfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTkVHXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDU4MCw3ICsxMTE4NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBtdWxfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk1VTFx0V09SRCBQVFIgIik7CitAQCAtMTA2MDEsNyArMTEyMDYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgaW11bF9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSU1VTFx0V09SRCBQVFIgIik7CitAQCAtMTA2MjIsNyArMTEyMjgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGl2X2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJESVZcdFdPUkQgUFRSICIpOworQEAgLTEwNjQzLDcgKzExMjUwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGlkaXZfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklESVZcdFdPUkQgUFRSICIpOworQEAgLTEwNjU2LDkgKzExMjY0LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBlbmQgbW9kPT0xMCAqLworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogbW9kPTExICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIG1vZD0xMSAqLworICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgY2FzZSAwOiAgICAgICAgIC8qIHRlc3Qgd29yZCBpbW0gKi8KKysgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgLyogdGVzdCB3b3JkIGltbSAqLworICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CisgICAgICAgICAgICAgICAgIHUzMiBzcmN2YWw7CitAQCAtMTA2NzAsNyArMTEyNzgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBzcmN2YWwpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICB0ZXN0X2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0xMDY5Niw3ICsxMTMwNSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICAqZGVzdHJlZyA9IG5vdF9sb25nKCpkZXN0cmVnKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJOT1RcdCIpOworQEAgLTEwNzE1LDcgKzExMzI1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgICpkZXN0cmVnID0gbmVnX2xvbmcoKmRlc3RyZWcpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5FR1x0Iik7CitAQCAtMTA3MzMsMTUgKzExMzQ0LDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgICAgICBtdWxfbG9uZygqZGVzdHJlZyk7ICAgICAgLyohISEgICovCistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAgICAgbXVsX2xvbmcoKmRlc3RyZWcpOyAgICAgLyohISEgICovCisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk1VTFx0Iik7CisgICAgICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgICAgIG11bF93b3JkKCpkZXN0cmVnKTsgICAgICAvKiEhISAgKi8KKysgICAgICAgICAgICAgICAgbXVsX3dvcmQoKmRlc3RyZWcpOyAgICAgLyohISEgICovCisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgY2FzZSA1OgorQEAgLTEwNzUzLDcgKzExMzY1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGltdWxfbG9uZygqZGVzdHJlZyk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSU1VTFx0Iik7CitAQCAtMTA3NzIsNyArMTEzODUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGl2X2xvbmcoKmRlc3RyZWcpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRJVlx0Iik7CitAQCAtMTA3OTEsNyArMTE0MDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgaWRpdl9sb25nKCpkZXN0cmVnKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJRElWXHQiKTsKK0BAIC0xMDgxMiw3ICsxMTQyNyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmOAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY2xjKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NsYyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICAvKiBjbGVhciB0aGUgY2FycnkgZmxhZy4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKK0BAIC0xMDgyNyw3ICsxMTQ0Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NsYyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGY5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zdGModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3RjKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIC8qIHNldCB0aGUgY2FycnkgZmxhZy4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKK0BAIC0xMDg0Miw3ICsxMTQ1OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N0Yyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGZhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jbGkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY2xpKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIC8qIGNsZWFyIGludGVycnVwdHMuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CitAQCAtMTA4NTcsNyArMTE0NzUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbGkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmYgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3RpKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3N0aSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICAvKiBlbmFibGUgIGludGVycnVwdHMuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CitAQCAtMTA4NzIsNyArMTE0OTEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdGkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY2xkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NsZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICAvKiBjbGVhciBpbnRlcnJ1cHRzLiAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworQEAgLTEwODg3LDcgKzExNTA3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY2xkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N0ZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zdGQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgLyogY2xlYXIgaW50ZXJydXB0cy4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKK0BAIC0xMDkwMiw3ICsxMTUyMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N0ZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGZlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRV9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wY0ZFX2J5dGVfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmgsIHJsOworICAgICB1OCBkZXN0dmFsOworQEAgLTEwOTQ0LDEzICsxMTU2NiwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRV9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICBjYXNlIDA6ICAgICAgICAgLyogaW5jIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAvKiBpbmMgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBpbmNfYnl0ZShkZXN0dmFsKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDE6ICAgICAgICAgLyogZGVjIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAvKiBkZWMgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBkZWNfYnl0ZShkZXN0dmFsKTsKK0BAIC0xMTAxOSwxMiArMTE2NDEsMTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkVfYnl0ZV9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGZmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmgsIHJsOworICAgICB1aW50IGRlc3RvZmZzZXQgPSAwOworLQl1MTYgKmRlc3RyZWc7CistCXUxNiBkZXN0dmFsLGRlc3R2YWwyOworKyAgICB1MTYgKmRlc3RyZWc7CisrICAgIHUxNiBkZXN0dmFsLCBkZXN0dmFsMjsKKyAKKyAgICAgLyogWWV0IGFub3RoZXIgc3BlY2lhbCBjYXNlIGluc3RydWN0aW9uLiAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworQEAgLTExMDQwLDE0ICsxMTY2MywxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHREV09SRCBQVFIgIik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0V09SRCBQVFIgIik7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdERXT1JEIFBUUiAiKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CitAQCAtMTEwNzgsNyArMTE3MDMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICBjYXNlIDA6ICAgICAgICAgLyogaW5jIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAvKiBpbmMgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsOworIAorQEAgLTExMDg2LDcgKzExNzExLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBpbmNfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKK0BAIC0xMTA5NSw3ICsxMTcyMSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSAxOiAgICAgICAgIC8qIGRlYyB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgLyogZGVjIHdvcmQgcHRyIC4uLiAqLworICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbDsKKyAKK0BAIC0xMTEwMyw3ICsxMTcyOSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZGVjX2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CitAQCAtMTExMTIsMTMgKzExNzM5LDEzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSAyOiAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgMzogICAgICAgICAvKiBjYWxsIGZhciBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgIC8qIGNhbGwgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTExMTI3LDI2ICsxMTc1NCwyNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CisgICAgICAgICAgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDQ6ICAgICAgICAgLyogam1wIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAvKiBqbXAgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSA1OiAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA1OiAgICAgICAgICAgICAgICAvKiBqbXAgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIE0ueDg2LlJfQ1MgPSBkZXN0dmFsMjsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgNjogICAgICAgICAvKiAgcHVzaCB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgNjogICAgICAgICAgICAgICAgLyogIHB1c2ggd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBwdXNoX2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworQEAgLTExMTY4LDcgKzExNzk2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBpbmNfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKK0BAIC0xMTE4NSw3ICsxMTgxNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZGVjX2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CitAQCAtMTExOTQsMTMgKzExODI0LDEzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSAyOiAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgMzogICAgICAgICAvKiBjYWxsIGZhciBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgIC8qIGNhbGwgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTExMjA5LDI2ICsxMTgzOSwyNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CisgICAgICAgICAgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDQ6ICAgICAgICAgLyogam1wIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAvKiBqbXAgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSA1OiAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA1OiAgICAgICAgICAgICAgICAvKiBqbXAgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIE0ueDg2LlJfQ1MgPSBkZXN0dmFsMjsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgNjogICAgICAgICAvKiAgcHVzaCB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgNjogICAgICAgICAgICAgICAgLyogIHB1c2ggd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBwdXNoX2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworQEAgLTExMjUwLDcgKzExODgxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBpbmNfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKK0BAIC0xMTI2Nyw3ICsxMTg5OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZGVjX2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CitAQCAtMTEyNzYsMTMgKzExOTA5LDEzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSAyOiAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgMzogICAgICAgICAvKiBjYWxsIGZhciBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgIC8qIGNhbGwgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTExMjkxLDI2ICsxMTkyNCwyNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CisgICAgICAgICAgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDQ6ICAgICAgICAgLyogam1wIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAvKiBqbXAgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSA1OiAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA1OiAgICAgICAgICAgICAgICAvKiBqbXAgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIE0ueDg2LlJfQ1MgPSBkZXN0dmFsMjsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgNjogICAgICAgICAvKiAgcHVzaCB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgNjogICAgICAgICAgICAgICAgLyogIHB1c2ggd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBwdXNoX2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworQEAgLTExMzMwLDcgKzExOTY0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgICpkZXN0cmVnID0gaW5jX2xvbmcoKmRlc3RyZWcpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CitAQCAtMTEzNDcsNyArMTE5ODIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgKmRlc3RyZWcgPSBkZWNfbG9uZygqZGVzdHJlZyk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKK0BAIC0xMTM1NiwyNiArMTE5OTIsMjYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgICpkZXN0cmVnID0gZGVjX3dvcmQoKmRlc3RyZWcpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgMjogICAgICAgICAvKiBjYWxsIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAvKiBjYWxsIHdvcmQgcHRyIC4uLiAqLworICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gKmRlc3RyZWc7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDM6ICAgICAgICAgLyogam1wIGZhciBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk9QRVJBVElPTiBVTkRFRklORUQgMFhGRiBcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgSEFMVF9TWVMoKTsKKyAgICAgICAgICAgICBicmVhazsKKyAKKy0gICAgICAgIGNhc2UgNDogICAgICAgICAvKiBqbXAgIC4uLiAqLworKyAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAvKiBqbXAgIC4uLiAqLworICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSAodTE2KSAoKmRlc3RyZWcpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSA1OiAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA1OiAgICAgICAgICAgICAgICAvKiBqbXAgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJPUEVSQVRJT04gVU5ERUZJTkVEIDBYRkYgXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIEhBTFRfU1lTKCk7CitAQCAtMTEzODgsNyArMTIwMjQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgcHVzaF9sb25nKCpkZXN0cmVnKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworQEAgLTExNDA3LDggKzEyMDQ0LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIFNpbmdsZSBieXRlIG9wZXJhdGlvbiBjb2RlIHRhYmxlOgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisteworK3ZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkgKHU4KSA9IHsKKyAvKiAgMHgwMCAqLyB4ODZlbXVPcF9hZGRfYnl0ZV9STV9SLAorIC8qICAweDAxICovIHg4NmVtdU9wX2FkZF93b3JkX1JNX1IsCisgLyogIDB4MDIgKi8geDg2ZW11T3BfYWRkX2J5dGVfUl9STSwKK0BAIC0xMTQxNyw3ICsxMjA1Myw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHgwNSAqLyB4ODZlbXVPcF9hZGRfd29yZF9BWF9JTU0sCisgLyogIDB4MDYgKi8geDg2ZW11T3BfcHVzaF9FUywKKyAvKiAgMHgwNyAqLyB4ODZlbXVPcF9wb3BfRVMsCistCisgLyogIDB4MDggKi8geDg2ZW11T3Bfb3JfYnl0ZV9STV9SLAorIC8qICAweDA5ICovIHg4NmVtdU9wX29yX3dvcmRfUk1fUiwKKyAvKiAgMHgwYSAqLyB4ODZlbXVPcF9vcl9ieXRlX1JfUk0sCitAQCAtMTE0MjYsNyArMTIwNjEsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4MGQgKi8geDg2ZW11T3Bfb3Jfd29yZF9BWF9JTU0sCisgLyogIDB4MGUgKi8geDg2ZW11T3BfcHVzaF9DUywKKyAvKiAgMHgwZiAqLyB4ODZlbXVPcF90d29fYnl0ZSwKKy0KKyAvKiAgMHgxMCAqLyB4ODZlbXVPcF9hZGNfYnl0ZV9STV9SLAorIC8qICAweDExICovIHg4NmVtdU9wX2FkY193b3JkX1JNX1IsCisgLyogIDB4MTIgKi8geDg2ZW11T3BfYWRjX2J5dGVfUl9STSwKK0BAIC0xMTQzNSw3ICsxMjA2OSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHgxNSAqLyB4ODZlbXVPcF9hZGNfd29yZF9BWF9JTU0sCisgLyogIDB4MTYgKi8geDg2ZW11T3BfcHVzaF9TUywKKyAvKiAgMHgxNyAqLyB4ODZlbXVPcF9wb3BfU1MsCistCisgLyogIDB4MTggKi8geDg2ZW11T3Bfc2JiX2J5dGVfUk1fUiwKKyAvKiAgMHgxOSAqLyB4ODZlbXVPcF9zYmJfd29yZF9STV9SLAorIC8qICAweDFhICovIHg4NmVtdU9wX3NiYl9ieXRlX1JfUk0sCitAQCAtMTE0NDQsNyArMTIwNzcsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4MWQgKi8geDg2ZW11T3Bfc2JiX3dvcmRfQVhfSU1NLAorIC8qICAweDFlICovIHg4NmVtdU9wX3B1c2hfRFMsCisgLyogIDB4MWYgKi8geDg2ZW11T3BfcG9wX0RTLAorLQorIC8qICAweDIwICovIHg4NmVtdU9wX2FuZF9ieXRlX1JNX1IsCisgLyogIDB4MjEgKi8geDg2ZW11T3BfYW5kX3dvcmRfUk1fUiwKKyAvKiAgMHgyMiAqLyB4ODZlbXVPcF9hbmRfYnl0ZV9SX1JNLAorQEAgLTExNDUzLDcgKzEyMDg1LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDI1ICovIHg4NmVtdU9wX2FuZF93b3JkX0FYX0lNTSwKKyAvKiAgMHgyNiAqLyB4ODZlbXVPcF9zZWdvdnJfRVMsCisgLyogIDB4MjcgKi8geDg2ZW11T3BfZGFhLAorLQorIC8qICAweDI4ICovIHg4NmVtdU9wX3N1Yl9ieXRlX1JNX1IsCisgLyogIDB4MjkgKi8geDg2ZW11T3Bfc3ViX3dvcmRfUk1fUiwKKyAvKiAgMHgyYSAqLyB4ODZlbXVPcF9zdWJfYnl0ZV9SX1JNLAorQEAgLTExNDYyLDcgKzEyMDkzLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDJkICovIHg4NmVtdU9wX3N1Yl93b3JkX0FYX0lNTSwKKyAvKiAgMHgyZSAqLyB4ODZlbXVPcF9zZWdvdnJfQ1MsCisgLyogIDB4MmYgKi8geDg2ZW11T3BfZGFzLAorLQorIC8qICAweDMwICovIHg4NmVtdU9wX3hvcl9ieXRlX1JNX1IsCisgLyogIDB4MzEgKi8geDg2ZW11T3BfeG9yX3dvcmRfUk1fUiwKKyAvKiAgMHgzMiAqLyB4ODZlbXVPcF94b3JfYnl0ZV9SX1JNLAorQEAgLTExNDcxLDcgKzEyMTAxLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDM1ICovIHg4NmVtdU9wX3hvcl93b3JkX0FYX0lNTSwKKyAvKiAgMHgzNiAqLyB4ODZlbXVPcF9zZWdvdnJfU1MsCisgLyogIDB4MzcgKi8geDg2ZW11T3BfYWFhLAorLQorIC8qICAweDM4ICovIHg4NmVtdU9wX2NtcF9ieXRlX1JNX1IsCisgLyogIDB4MzkgKi8geDg2ZW11T3BfY21wX3dvcmRfUk1fUiwKKyAvKiAgMHgzYSAqLyB4ODZlbXVPcF9jbXBfYnl0ZV9SX1JNLAorQEAgLTExNDgwLDcgKzEyMTA5LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDNkICovIHg4NmVtdU9wX2NtcF93b3JkX0FYX0lNTSwKKyAvKiAgMHgzZSAqLyB4ODZlbXVPcF9zZWdvdnJfRFMsCisgLyogIDB4M2YgKi8geDg2ZW11T3BfYWFzLAorLQorIC8qICAweDQwICovIHg4NmVtdU9wX2luY19BWCwKKyAvKiAgMHg0MSAqLyB4ODZlbXVPcF9pbmNfQ1gsCisgLyogIDB4NDIgKi8geDg2ZW11T3BfaW5jX0RYLAorQEAgLTExNDg5LDcgKzEyMTE3LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDQ1ICovIHg4NmVtdU9wX2luY19CUCwKKyAvKiAgMHg0NiAqLyB4ODZlbXVPcF9pbmNfU0ksCisgLyogIDB4NDcgKi8geDg2ZW11T3BfaW5jX0RJLAorLQorIC8qICAweDQ4ICovIHg4NmVtdU9wX2RlY19BWCwKKyAvKiAgMHg0OSAqLyB4ODZlbXVPcF9kZWNfQ1gsCisgLyogIDB4NGEgKi8geDg2ZW11T3BfZGVjX0RYLAorQEAgLTExNDk4LDcgKzEyMTI1LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDRkICovIHg4NmVtdU9wX2RlY19CUCwKKyAvKiAgMHg0ZSAqLyB4ODZlbXVPcF9kZWNfU0ksCisgLyogIDB4NGYgKi8geDg2ZW11T3BfZGVjX0RJLAorLQorIC8qICAweDUwICovIHg4NmVtdU9wX3B1c2hfQVgsCisgLyogIDB4NTEgKi8geDg2ZW11T3BfcHVzaF9DWCwKKyAvKiAgMHg1MiAqLyB4ODZlbXVPcF9wdXNoX0RYLAorQEAgLTExNTA3LDcgKzEyMTMzLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDU1ICovIHg4NmVtdU9wX3B1c2hfQlAsCisgLyogIDB4NTYgKi8geDg2ZW11T3BfcHVzaF9TSSwKKyAvKiAgMHg1NyAqLyB4ODZlbXVPcF9wdXNoX0RJLAorLQorIC8qICAweDU4ICovIHg4NmVtdU9wX3BvcF9BWCwKKyAvKiAgMHg1OSAqLyB4ODZlbXVPcF9wb3BfQ1gsCisgLyogIDB4NWEgKi8geDg2ZW11T3BfcG9wX0RYLAorQEAgLTExNTE2LDE2ICsxMjE0MSwxNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4NWQgKi8geDg2ZW11T3BfcG9wX0JQLAorIC8qICAweDVlICovIHg4NmVtdU9wX3BvcF9TSSwKKyAvKiAgMHg1ZiAqLyB4ODZlbXVPcF9wb3BfREksCistCisgLyogIDB4NjAgKi8geDg2ZW11T3BfcHVzaF9hbGwsCisgLyogIDB4NjEgKi8geDg2ZW11T3BfcG9wX2FsbCwKKy0vKiAgMHg2MiAqLyB4ODZlbXVPcF9pbGxlZ2FsX29wLCAgIC8qIGJvdW5kICovCistLyogIDB4NjMgKi8geDg2ZW11T3BfaWxsZWdhbF9vcCwgICAvKiBhcnBsICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4NjIgKi8geDg2ZW11T3BfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBib3VuZCAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDYzICovIHg4NmVtdU9wX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYXJwbCAqLworIC8qICAweDY0ICovIHg4NmVtdU9wX3NlZ292cl9GUywKKyAvKiAgMHg2NSAqLyB4ODZlbXVPcF9zZWdvdnJfR1MsCisgLyogIDB4NjYgKi8geDg2ZW11T3BfcHJlZml4X2RhdGEsCisgLyogIDB4NjcgKi8geDg2ZW11T3BfcHJlZml4X2FkZHIsCistCisgLyogIDB4NjggKi8geDg2ZW11T3BfcHVzaF93b3JkX0lNTSwKKyAvKiAgMHg2OSAqLyB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NLAorIC8qICAweDZhICovIHg4NmVtdU9wX3B1c2hfYnl0ZV9JTU0sCitAQCAtMTE1MzQsNyArMTIxNTksNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4NmQgKi8geDg2ZW11T3BfaW5zX3dvcmQsCisgLyogIDB4NmUgKi8geDg2ZW11T3Bfb3V0c19ieXRlLAorIC8qICAweDZmICovIHg4NmVtdU9wX291dHNfd29yZCwKKy0KKyAvKiAgMHg3MCAqLyB4ODZlbXVPcF9qdW1wX25lYXJfTywKKyAvKiAgMHg3MSAqLyB4ODZlbXVPcF9qdW1wX25lYXJfTk8sCisgLyogIDB4NzIgKi8geDg2ZW11T3BfanVtcF9uZWFyX0IsCitAQCAtMTE1NDMsNyArMTIxNjcsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4NzUgKi8geDg2ZW11T3BfanVtcF9uZWFyX05aLAorIC8qICAweDc2ICovIHg4NmVtdU9wX2p1bXBfbmVhcl9CRSwKKyAvKiAgMHg3NyAqLyB4ODZlbXVPcF9qdW1wX25lYXJfTkJFLAorLQorIC8qICAweDc4ICovIHg4NmVtdU9wX2p1bXBfbmVhcl9TLAorIC8qICAweDc5ICovIHg4NmVtdU9wX2p1bXBfbmVhcl9OUywKKyAvKiAgMHg3YSAqLyB4ODZlbXVPcF9qdW1wX25lYXJfUCwKK0BAIC0xMTU1Miw3ICsxMjE3NSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHg3ZCAqLyB4ODZlbXVPcF9qdW1wX25lYXJfTkwsCisgLyogIDB4N2UgKi8geDg2ZW11T3BfanVtcF9uZWFyX0xFLAorIC8qICAweDdmICovIHg4NmVtdU9wX2p1bXBfbmVhcl9OTEUsCistCisgLyogIDB4ODAgKi8geDg2ZW11T3Bfb3BjODBfYnl0ZV9STV9JTU0sCisgLyogIDB4ODEgKi8geDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0sCisgLyogIDB4ODIgKi8geDg2ZW11T3Bfb3BjODJfYnl0ZV9STV9JTU0sCitAQCAtMTE1NjEsNyArMTIxODMsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4ODUgKi8geDg2ZW11T3BfdGVzdF93b3JkX1JNX1IsCisgLyogIDB4ODYgKi8geDg2ZW11T3BfeGNoZ19ieXRlX1JNX1IsCisgLyogIDB4ODcgKi8geDg2ZW11T3BfeGNoZ193b3JkX1JNX1IsCistCisgLyogIDB4ODggKi8geDg2ZW11T3BfbW92X2J5dGVfUk1fUiwKKyAvKiAgMHg4OSAqLyB4ODZlbXVPcF9tb3Zfd29yZF9STV9SLAorIC8qICAweDhhICovIHg4NmVtdU9wX21vdl9ieXRlX1JfUk0sCitAQCAtMTE1NzAsNyArMTIxOTEsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4OGQgKi8geDg2ZW11T3BfbGVhX3dvcmRfUl9NLAorIC8qICAweDhlICovIHg4NmVtdU9wX21vdl93b3JkX1NSX1JNLAorIC8qICAweDhmICovIHg4NmVtdU9wX3BvcF9STSwKKy0KKyAvKiAgMHg5MCAqLyB4ODZlbXVPcF9ub3AsCisgLyogIDB4OTEgKi8geDg2ZW11T3BfeGNoZ193b3JkX0FYX0NYLAorIC8qICAweDkyICovIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9EWCwKK0BAIC0xMTU3OSw3ICsxMjE5OSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHg5NSAqLyB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQlAsCisgLyogIDB4OTYgKi8geDg2ZW11T3BfeGNoZ193b3JkX0FYX1NJLAorIC8qICAweDk3ICovIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9ESSwKKy0KKyAvKiAgMHg5OCAqLyB4ODZlbXVPcF9jYncsCisgLyogIDB4OTkgKi8geDg2ZW11T3BfY3dkLAorIC8qICAweDlhICovIHg4NmVtdU9wX2NhbGxfZmFyX0lNTSwKK0BAIC0xMTU4OCw3ICsxMjIwNyw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHg5ZCAqLyB4ODZlbXVPcF9wb3BmX3dvcmQsCisgLyogIDB4OWUgKi8geDg2ZW11T3Bfc2FoZiwKKyAvKiAgMHg5ZiAqLyB4ODZlbXVPcF9sYWhmLAorLQorIC8qICAweGEwICovIHg4NmVtdU9wX21vdl9BTF9NX0lNTSwKKyAvKiAgMHhhMSAqLyB4ODZlbXVPcF9tb3ZfQVhfTV9JTU0sCisgLyogIDB4YTIgKi8geDg2ZW11T3BfbW92X01fQUxfSU1NLAorQEAgLTExNjA1LDggKzEyMjIzLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGFkICovIHg4NmVtdU9wX2xvZHNfd29yZCwKKyAvKiAgMHhhYyAqLyB4ODZlbXVPcF9zY2FzX2J5dGUsCisgLyogIDB4YWQgKi8geDg2ZW11T3Bfc2Nhc193b3JkLAorLQorLQorIC8qICAweGIwICovIHg4NmVtdU9wX21vdl9ieXRlX0FMX0lNTSwKKyAvKiAgMHhiMSAqLyB4ODZlbXVPcF9tb3ZfYnl0ZV9DTF9JTU0sCisgLyogIDB4YjIgKi8geDg2ZW11T3BfbW92X2J5dGVfRExfSU1NLAorQEAgLTExNjE1LDcgKzEyMjMxLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGI1ICovIHg4NmVtdU9wX21vdl9ieXRlX0NIX0lNTSwKKyAvKiAgMHhiNiAqLyB4ODZlbXVPcF9tb3ZfYnl0ZV9ESF9JTU0sCisgLyogIDB4YjcgKi8geDg2ZW11T3BfbW92X2J5dGVfQkhfSU1NLAorLQorIC8qICAweGI4ICovIHg4NmVtdU9wX21vdl93b3JkX0FYX0lNTSwKKyAvKiAgMHhiOSAqLyB4ODZlbXVPcF9tb3Zfd29yZF9DWF9JTU0sCisgLyogIDB4YmEgKi8geDg2ZW11T3BfbW92X3dvcmRfRFhfSU1NLAorQEAgLTExNjI0LDcgKzEyMjM5LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGJkICovIHg4NmVtdU9wX21vdl93b3JkX0JQX0lNTSwKKyAvKiAgMHhiZSAqLyB4ODZlbXVPcF9tb3Zfd29yZF9TSV9JTU0sCisgLyogIDB4YmYgKi8geDg2ZW11T3BfbW92X3dvcmRfRElfSU1NLAorLQorIC8qICAweGMwICovIHg4NmVtdU9wX29wY0MwX2J5dGVfUk1fTUVNLAorIC8qICAweGMxICovIHg4NmVtdU9wX29wY0MxX3dvcmRfUk1fTUVNLAorIC8qICAweGMyICovIHg4NmVtdU9wX3JldF9uZWFyX0lNTSwKK0BAIC0xMTY0MSwxNCArMTIyNTUsMTQgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGNkICovIHg4NmVtdU9wX2ludF9JTU0sCisgLyogIDB4Y2UgKi8geDg2ZW11T3BfaW50bywKKyAvKiAgMHhjZiAqLyB4ODZlbXVPcF9pcmV0LAorLQorIC8qICAweGQwICovIHg4NmVtdU9wX29wY0QwX2J5dGVfUk1fMSwKKyAvKiAgMHhkMSAqLyB4ODZlbXVPcF9vcGNEMV93b3JkX1JNXzEsCisgLyogIDB4ZDIgKi8geDg2ZW11T3Bfb3BjRDJfYnl0ZV9STV9DTCwKKyAvKiAgMHhkMyAqLyB4ODZlbXVPcF9vcGNEM193b3JkX1JNX0NMLAorIC8qICAweGQ0ICovIHg4NmVtdU9wX2FhbSwKKyAvKiAgMHhkNSAqLyB4ODZlbXVPcF9hYWQsCistLyogIDB4ZDYgKi8geDg2ZW11T3BfaWxsZWdhbF9vcCwgICAvKiBVbmRvY3VtZW50ZWQgU0VUQUxDIGluc3RydWN0aW9uICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4ZDYgKi8geDg2ZW11T3BfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmRvY3VtZW50ZWQgU0VUQUxDIGluc3RydWN0aW9uICovCisgLyogIDB4ZDcgKi8geDg2ZW11T3BfeGxhdCwKKyAvKiAgMHhkOCAqLyB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q4LAorIC8qICAweGQ5ICovIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZDksCitAQCAtMTE2NTgsNyArMTIyNzIsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4ZGQgKi8geDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZCwKKyAvKiAgMHhkZSAqLyB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RlLAorIC8qICAweGRmICovIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGYsCistCisgLyogIDB4ZTAgKi8geDg2ZW11T3BfbG9vcG5lLAorIC8qICAweGUxICovIHg4NmVtdU9wX2xvb3BlLAorIC8qICAweGUyICovIHg4NmVtdU9wX2xvb3AsCitAQCAtMTE2NjcsNyArMTIyODAsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4ZTUgKi8geDg2ZW11T3BfaW5fd29yZF9BWF9JTU0sCisgLyogIDB4ZTYgKi8geDg2ZW11T3Bfb3V0X2J5dGVfSU1NX0FMLAorIC8qICAweGU3ICovIHg4NmVtdU9wX291dF93b3JkX0lNTV9BWCwKKy0KKyAvKiAgMHhlOCAqLyB4ODZlbXVPcF9jYWxsX25lYXJfSU1NLAorIC8qICAweGU5ICovIHg4NmVtdU9wX2p1bXBfbmVhcl9JTU0sCisgLyogIDB4ZWEgKi8geDg2ZW11T3BfanVtcF9mYXJfSU1NLAorQEAgLTExNjc2LDcgKzEyMjg4LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGVkICovIHg4NmVtdU9wX2luX3dvcmRfQVhfRFgsCisgLyogIDB4ZWUgKi8geDg2ZW11T3Bfb3V0X2J5dGVfRFhfQUwsCisgLyogIDB4ZWYgKi8geDg2ZW11T3Bfb3V0X3dvcmRfRFhfQVgsCistCisgLyogIDB4ZjAgKi8geDg2ZW11T3BfbG9jaywKKyAvKiAgMHhmMSAqLyB4ODZlbXVPcF9pbGxlZ2FsX29wLAorIC8qICAweGYyICovIHg4NmVtdU9wX3JlcG5lLAorQEAgLTExNjg1LDcgKzEyMjk2LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGY1ICovIHg4NmVtdU9wX2NtYywKKyAvKiAgMHhmNiAqLyB4ODZlbXVPcF9vcGNGNl9ieXRlX1JNLAorIC8qICAweGY3ICovIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0sCistCisgLyogIDB4ZjggKi8geDg2ZW11T3BfY2xjLAorIC8qICAweGY5ICovIHg4NmVtdU9wX3N0YywKKyAvKiAgMHhmYSAqLyB4ODZlbXVPcF9jbGksCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUvb3BzMi5jIGIvbGlicy94ODZlbXUvb3BzMi5jCitpbmRleCAwNmI3ZjU2Li41ZWQyYmY2IDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUvb3BzMi5jCisrKysgYi9saWJzL3g4NmVtdS9vcHMyLmMKK0BAIC01NSwxNiArNTUsMTQgQEAgb3AxIC0gSW5zdHJ1Y3Rpb24gb3AgY29kZQorIFJFTUFSS1M6CisgSGFuZGxlcyBpbGxlZ2FsIG9wY29kZXMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfaWxsZWdhbF9vcCgKKy0JdTggb3AyKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2lsbGVnYWxfb3AodTggb3AyKQorIHsKKy0JaW50IG1vZCwgcmwsIHJoOworLQlTVEFSVF9PRl9JTlNUUigpOworLQlGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworLQlERUNPREVfUFJJTlRGKCJJTExFR0FMIEVYVEVOREVEIFg4NiBPUENPREVcbiIpOworLQlUUkFDRV9SRUdTKCk7CistCXByaW50aygiJTA0eDolMDR4OiAlMDJYIC8lZCBJTExFR0FMIEVYVEVOREVEIFg4NiBPUENPREUhIChtb2Q9JWQgcmw9JWQpXG4iLAorLQkJTS54ODYuUl9DUywgTS54ODYuUl9JUC0yLG9wMiwgcmgsIG1vZCwgcmwpOworKyAgICBTVEFSVF9PRl9JTlNUUigpOworKyAgICBERUNPREVfUFJJTlRGKCJJTExFR0FMIEVYVEVOREVEIFg4NiBPUENPREVcbiIpOworKyAgICBUUkFDRV9SRUdTKCk7CisrICAgIHByaW50aygiJTA0eDolMDR4OiAlMDJYIElMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERSFcbiIsCisrICAgICAgICAgICBNLng4Ni5SX0NTLCBNLng4Ni5SX0lQIC0gMiwgb3AyKTsKKyAgICAgSEFMVF9TWVMoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorQEAgLTczLDU1ICs3MSwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfaWxsZWdhbF9vcCgKKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CistSGFuZGxlcyBvcGNvZGUgMHgwZiwweDAxCistKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfZ3JvdXBfZyh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisteworLQlpbnQgbW9kLCBybCwgcmg7CistCXUxNiAqZGVzdHJlZzsKKy0JdWludCBkZXN0b2Zmc2V0OworLQorLQlTVEFSVF9PRl9JTlNUUigpOworLQlGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworLQlzd2l0Y2ggKHJoKSB7CistCQljYXNlIDQ6IC8vIFNNU1cgKFN0b3JlIE1hY2hpbmUgU3RhdHVzIFdvcmQpCistCQkJLy8gRGVjb2RlIHRoZSBtb2QgYnl0ZSB0byBmaW5kIHRoZSBhZGRyZXNzaW5nCistCQkJLy8gQWx3YXlzIHJldHVybnMgMHgxMCAoaW5pdGlhbCB2YWx1ZSBhcyBwZXIgaW50ZWwgbWFudWFsIHZvbHVtZSAzLCBmaWd1cmUgOC0xCistCQkJc3dpdGNoIChtb2QpIHsKKy0JCQkJY2FzZSAwOgorLQkJCQkJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLQkJCQkJc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIDB4MTApOworLQkJCQkJYnJlYWs7CistCQkJCWNhc2UgMToKKy0JCQkJCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0JCQkJCXN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCAweDEwKTsKKy0JCQkJCWJyZWFrOworLQkJCQljYXNlIDI6CistCQkJCQlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistCQkJCQlzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgMHgxMCk7CistCQkJCQlicmVhazsKKy0JCQkJY2FzZSAzOgorLQkJCQkJZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKy0JCQkJCSpkZXN0cmVnID0gMHgxMDsKKy0JCQkJCWJyZWFrOworLQkJCX0KKy0JCQlicmVhazsKKy0JCWRlZmF1bHQ6CistCQkJREVDT0RFX1BSSU5URigiSUxMRUdBTCBFWFRFTkRFRCBYODYgT1BDT0RFIElOIDBGIDAxXG4iKTsKKy0JCQlUUkFDRV9SRUdTKCk7CistCQkJcHJpbnRrKCIlMDR4OiUwNHg6IDBGICUwMlggLyVkIElMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERSEgKG1vZD0lZCBybD0lZClcbiIsCistCQkJCU0ueDg2LlJfQ1MsIE0ueDg2LlJfSVAtMixvcDIsIHJoLCBtb2QsIHJsKTsKKy0JCQlIQUxUX1NZUygpOworLQkJCWJyZWFrOworLQl9CistCUVORF9PRl9JTlNUUigpOworLX0KKy0KKy0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLVJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweDMxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfcmR0c2ModTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX3JkdHNjKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgI2lmZGVmIF9fSEFTX0xPTkdfTE9OR19fCisgICAgIHN0YXRpYyB1NjQgY291bnRlciA9IDA7CitAQCAtMTU1LDkwICsxMDgsOTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3JkdHNjKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHg4MC0weDhGCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfbG9uZ19qdW1wKHU4IG9wMikKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9sb25nX2p1bXAodTggb3AyKQorIHsKKyAgICAgczMyIHRhcmdldDsKKy0gICAgY2hhciAqbmFtZSA9IDA7CisrICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOworICAgICBpbnQgY29uZCA9IDA7CisgCisgICAgIC8qIGNvbmRpdGlvbmFsIGp1bXAgdG8gd29yZCBvZmZzZXQuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIHN3aXRjaCAob3AyKSB7CistICAgICAgY2FzZSAweDgwOgorKyAgICBjYXNlIDB4ODA6CisgICAgICAgICBuYW1lID0gIkpPXHQiOworLSAgICAgICAgY29uZCA9ICBBQ0NFU1NfRkxBRyhGX09GKTsKKysgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX09GKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4MToKKysgICAgY2FzZSAweDgxOgorICAgICAgICAgbmFtZSA9ICJKTk9cdCI7CisgICAgICAgICBjb25kID0gIUFDQ0VTU19GTEFHKEZfT0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDgyOgorKyAgICBjYXNlIDB4ODI6CisgICAgICAgICBuYW1lID0gIkpCXHQiOworICAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfQ0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDgzOgorKyAgICBjYXNlIDB4ODM6CisgICAgICAgICBuYW1lID0gIkpOQlx0IjsKKyAgICAgICAgIGNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9DRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4ODQ6CisrICAgIGNhc2UgMHg4NDoKKyAgICAgICAgIG5hbWUgPSAiSlpcdCI7CisgICAgICAgICBjb25kID0gQUNDRVNTX0ZMQUcoRl9aRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4ODU6CisrICAgIGNhc2UgMHg4NToKKyAgICAgICAgIG5hbWUgPSAiSk5aXHQiOworICAgICAgICAgY29uZCA9ICFBQ0NFU1NfRkxBRyhGX1pGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4NjoKKysgICAgY2FzZSAweDg2OgorICAgICAgICAgbmFtZSA9ICJKQkVcdCI7CisgICAgICAgICBjb25kID0gQUNDRVNTX0ZMQUcoRl9DRikgfHwgQUNDRVNTX0ZMQUcoRl9aRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4ODc6CisrICAgIGNhc2UgMHg4NzoKKyAgICAgICAgIG5hbWUgPSAiSk5CRVx0IjsKKyAgICAgICAgIGNvbmQgPSAhKEFDQ0VTU19GTEFHKEZfQ0YpIHx8IEFDQ0VTU19GTEFHKEZfWkYpKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4ODoKKysgICAgY2FzZSAweDg4OgorICAgICAgICAgbmFtZSA9ICJKU1x0IjsKKyAgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX1NGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4OToKKysgICAgY2FzZSAweDg5OgorICAgICAgICAgbmFtZSA9ICJKTlNcdCI7CisgICAgICAgICBjb25kID0gIUFDQ0VTU19GTEFHKEZfU0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDhhOgorKyAgICBjYXNlIDB4OGE6CisgICAgICAgICBuYW1lID0gIkpQXHQiOworICAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfUEYpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDhiOgorKyAgICBjYXNlIDB4OGI6CisgICAgICAgICBuYW1lID0gIkpOUFx0IjsKKyAgICAgICAgIGNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9QRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OGM6CisrICAgIGNhc2UgMHg4YzoKKyAgICAgICAgIG5hbWUgPSAiSkxcdCI7CisgICAgICAgICBjb25kID0geG9ybChBQ0NFU1NfRkxBRyhGX1NGKSwgQUNDRVNTX0ZMQUcoRl9PRikpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDhkOgorKyAgICBjYXNlIDB4OGQ6CisgICAgICAgICBuYW1lID0gIkpOTFx0IjsKKyAgICAgICAgIGNvbmQgPSAhKHhvcmwoQUNDRVNTX0ZMQUcoRl9TRiksIEFDQ0VTU19GTEFHKEZfT0YpKSk7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OGU6CisrICAgIGNhc2UgMHg4ZToKKyAgICAgICAgIG5hbWUgPSAiSkxFXHQiOworICAgICAgICAgY29uZCA9ICh4b3JsKEFDQ0VTU19GTEFHKEZfU0YpLCBBQ0NFU1NfRkxBRyhGX09GKSkgfHwKKyAgICAgICAgICAgICAgICAgQUNDRVNTX0ZMQUcoRl9aRikpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDhmOgorKyAgICBjYXNlIDB4OGY6CisgICAgICAgICBuYW1lID0gIkpOTEVcdCI7CisgICAgICAgICBjb25kID0gISh4b3JsKEFDQ0VTU19GTEFHKEZfU0YpLCBBQ0NFU1NfRkxBRyhGX09GKSkgfHwKKyAgICAgICAgICAgICAgICAgIEFDQ0VTU19GTEFHKEZfWkYpKTsKKyAgICAgICAgIGJyZWFrOworICAgICB9CisgICAgIERFQ09ERV9QUklOVEYobmFtZSk7CistICAgICh2b2lkKW5hbWU7CisrICAgICh2b2lkKSBuYW1lOworICAgICB0YXJnZXQgPSAoczE2KSBmZXRjaF93b3JkX2ltbSgpOworICAgICB0YXJnZXQgKz0gKHMxNikgTS54ODYuUl9JUDsKKyAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChjb25kKQorLSAgICAgICAgTS54ODYuUl9JUCA9ICh1MTYpdGFyZ2V0OworKyAgICAgICAgTS54ODYuUl9JUCA9ICh1MTYpIHRhcmdldDsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CitAQCAtMjQ3LDg1ICsyMDEsODYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2xvbmdfanVtcCh1OCBvcDIpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4OTAtMHg5RgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NldF9ieXRlKHU4IG9wMikKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9zZXRfYnl0ZSh1OCBvcDIpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKKy0gICAgdTggICpkZXN0cmVnOworLSAgICBjaGFyICpuYW1lID0gMDsKKysgICAgdTggKmRlc3RyZWc7CisrICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOworICAgICBpbnQgY29uZCA9IDA7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIHN3aXRjaCAob3AyKSB7CistICAgICAgY2FzZSAweDkwOgorKyAgICBjYXNlIDB4OTA6CisgICAgICAgICBuYW1lID0gIlNFVE9cdCI7CistICAgICAgICBjb25kID0gIEFDQ0VTU19GTEFHKEZfT0YpOworKyAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfT0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDkxOgorKyAgICBjYXNlIDB4OTE6CisgICAgICAgICBuYW1lID0gIlNFVE5PXHQiOworICAgICAgICAgY29uZCA9ICFBQ0NFU1NfRkxBRyhGX09GKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5MjoKKysgICAgY2FzZSAweDkyOgorICAgICAgICAgbmFtZSA9ICJTRVRCXHQiOworICAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfQ0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDkzOgorKyAgICBjYXNlIDB4OTM6CisgICAgICAgICBuYW1lID0gIlNFVE5CXHQiOworICAgICAgICAgY29uZCA9ICFBQ0NFU1NfRkxBRyhGX0NGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5NDoKKysgICAgY2FzZSAweDk0OgorICAgICAgICAgbmFtZSA9ICJTRVRaXHQiOworICAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfWkYpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDk1OgorKyAgICBjYXNlIDB4OTU6CisgICAgICAgICBuYW1lID0gIlNFVE5aXHQiOworICAgICAgICAgY29uZCA9ICFBQ0NFU1NfRkxBRyhGX1pGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5NjoKKysgICAgY2FzZSAweDk2OgorICAgICAgICAgbmFtZSA9ICJTRVRCRVx0IjsKKyAgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX0NGKSB8fCBBQ0NFU1NfRkxBRyhGX1pGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5NzoKKysgICAgY2FzZSAweDk3OgorICAgICAgICAgbmFtZSA9ICJTRVROQkVcdCI7CisgICAgICAgICBjb25kID0gIShBQ0NFU1NfRkxBRyhGX0NGKSB8fCBBQ0NFU1NfRkxBRyhGX1pGKSk7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OTg6CisrICAgIGNhc2UgMHg5ODoKKyAgICAgICAgIG5hbWUgPSAiU0VUU1x0IjsKKyAgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX1NGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5OToKKysgICAgY2FzZSAweDk5OgorICAgICAgICAgbmFtZSA9ICJTRVROU1x0IjsKKyAgICAgICAgIGNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9TRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OWE6CisrICAgIGNhc2UgMHg5YToKKyAgICAgICAgIG5hbWUgPSAiU0VUUFx0IjsKKyAgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX1BGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5YjoKKysgICAgY2FzZSAweDliOgorICAgICAgICAgbmFtZSA9ICJTRVROUFx0IjsKKyAgICAgICAgIGNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9QRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OWM6CisrICAgIGNhc2UgMHg5YzoKKyAgICAgICAgIG5hbWUgPSAiU0VUTFx0IjsKKyAgICAgICAgIGNvbmQgPSB4b3JsKEFDQ0VTU19GTEFHKEZfU0YpLCBBQ0NFU1NfRkxBRyhGX09GKSk7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OWQ6CisrICAgIGNhc2UgMHg5ZDoKKyAgICAgICAgIG5hbWUgPSAiU0VUTkxcdCI7CisgICAgICAgICBjb25kID0geG9ybChBQ0NFU1NfRkxBRyhGX1NGKSwgQUNDRVNTX0ZMQUcoRl9PRikpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDllOgorKyAgICBjYXNlIDB4OWU6CisgICAgICAgICBuYW1lID0gIlNFVExFXHQiOworICAgICAgICAgY29uZCA9ICh4b3JsKEFDQ0VTU19GTEFHKEZfU0YpLCBBQ0NFU1NfRkxBRyhGX09GKSkgfHwKKyAgICAgICAgICAgICAgICAgQUNDRVNTX0ZMQUcoRl9aRikpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDlmOgorKyAgICBjYXNlIDB4OWY6CisgICAgICAgICBuYW1lID0gIlNFVE5MRVx0IjsKKyAgICAgICAgIGNvbmQgPSAhKHhvcmwoQUNDRVNTX0ZMQUcoRl9TRiksIEFDQ0VTU19GTEFHKEZfT0YpKSB8fAorICAgICAgICAgICAgICAgICAgQUNDRVNTX0ZMQUcoRl9aRikpOworICAgICAgICAgYnJlYWs7CisgICAgIH0KKyAgICAgREVDT0RFX1BSSU5URihuYW1lKTsKKy0gICAgKHZvaWQpbmFtZTsKKysgICAgKHZvaWQpIG5hbWU7CisgICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKK0BAIC0zNDMsNyArMjk4LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NldF9ieXRlKHU4IG9wMikKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgY29uZCA/IDB4MDEgOiAweDAwKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBjb25kID8gMHgwMSA6IDB4MDA7CitAQCAtMzU3LDcgKzMxMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zZXRfYnl0ZSh1OCBvcDIpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YTAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9wdXNoX0ZTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9wdXNoX0ZTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEZTXG4iKTsKK0BAIC0zNzEsNyArMzI3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3B1c2hfRlModTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGExCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfcG9wX0ZTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9wb3BfRlModTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUE9QXHRGU1xuIik7CitAQCAtMzg1LDcgKzM0Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9wb3BfRlModTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6IENQVUlEIHRha2VzIEVBWC9FQ1ggYXMgaW5wdXRzLCB3cml0ZXMgRUFYL0VCWC9FQ1gvRURYIGFzIG91dHB1dAorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhhMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX2NwdWlkKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9jcHVpZCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJDUFVJRFxuIik7CitAQCAtMzk5LDExICszNTcsMTIgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2NwdWlkKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhhMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0X1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2J0X1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKKy0gICAgaW50IGJpdCxkaXNwOworKyAgICBpbnQgYml0LCBkaXNwOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJCVFx0Iik7CitAQCAtNDE5LDEwICszNzgsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0X1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSxGX0NGKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgKDB4MSA8PCBiaXQpLCBGX0NGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC00MzEsOSArMzkxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0X1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgKDB4MSA8PCBiaXQpLEZfQ0YpOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSwgRl9DRik7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorQEAgLTQ0NiwxMCArNDA2LDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idF9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksRl9DRik7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDU7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSwgRl9DRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtNDU4LDkgKzQxOSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idF9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSxGX0NGKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA0OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksIEZfQ0YpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKK0BAIC00NzMsMTAgKzQzNCwxMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgKDB4MSA8PCBiaXQpLEZfQ0YpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA1OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksIEZfQ0YpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTQ4NSwzMCArNDQ3LDMxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idF9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSxGX0NGKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA0OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksIEZfQ0YpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpzcmNyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiAqc3JjcmVnLCAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmICgweDEgPDwgYml0KSxGX0NGKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpzcmNyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiAoMHgxIDw8IGJpdCksIEZfQ0YpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpzcmNyZWcsICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiAoMHgxIDw8IGJpdCksRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmICgweDEgPDwgYml0KSwgRl9DRik7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgfQorQEAgLTUyMCwxMSArNDgzLDEyIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idF9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhhNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9zaGxkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKKy0JdTggc2hpZnQ7CisrICAgIHU4IHNoaWZ0OworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJTSExEXHQiKTsKK0BAIC01NDMsOSArNTA3LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtNTU3LDcgKzUyMiw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CitAQCAtNTc0LDkgKzUzOSwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTU4OCw3ICs1NTQsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworQEAgLTYwNSw5ICs1NzEsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC02MTksMTMgKzU4NiwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjM0LDkgKzYwMSwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgICpkZXN0cmVnID0gc2hsZF9sb25nKCpkZXN0cmVnLCpzaGlmdHJlZyxzaGlmdCk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSBzaGxkX2xvbmcoKmRlc3RyZWcsICpzaGlmdHJlZywgc2hpZnQpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjQ1LDcgKzYxMyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgKmRlc3RyZWcgPSBzaGxkX3dvcmQoKmRlc3RyZWcsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICAqZGVzdHJlZyA9IHNobGRfd29yZCgqZGVzdHJlZywgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgfQorQEAgLTY1Nyw3ICs2MjUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGE1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfc2hsZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC02NzcsOSArNjQ2LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC02ODksNyArNjU5LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfd29yZChkZXN0dmFsLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworQEAgLTcwNCw5ICs2NzQsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTcxNiw3ICs2ODcsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CitAQCAtNzMxLDkgKzcwMiwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtNzQzLDI5ICs3MTUsMzAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfd29yZChkZXN0dmFsLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgICpkZXN0cmVnID0gc2hsZF9sb25nKCpkZXN0cmVnLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzaGlmdHJlZzsKKysgICAgICAgICAgICAqZGVzdHJlZyA9IHNobGRfbG9uZygqZGVzdHJlZywgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICAqZGVzdHJlZyA9IHNobGRfd29yZCgqZGVzdHJlZywqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSBzaGxkX3dvcmQoKmRlc3RyZWcsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgfQorQEAgLTc3Nyw3ICs3NTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YTgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9wdXNoX0dTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9wdXNoX0dTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEdTXG4iKTsKK0BAIC03OTEsNyArNzY1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3B1c2hfR1ModTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGE5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfcG9wX0dTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9wb3BfR1ModTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUE9QXHRHU1xuIik7CitAQCAtODA1LDExICs3ODAsMTIgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3BvcF9HUyh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YWIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idHNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfYnRzX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKKy0gICAgaW50IGJpdCxkaXNwOworKyAgICBpbnQgYml0LCBkaXNwOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJCVFNcdCIpOworQEAgLTgxNyw3ICs3OTMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRzX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICBzd2l0Y2ggKG1vZCkgeworICAgICBjYXNlIDA6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgc3JjdmFsLG1hc2s7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1MzIgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworQEAgLTgyNSwxMyArODAxLDE0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idHNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCk7CisgICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCwgc3JjdmFsIHwgbWFzayk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiBzcmN2YWwsbWFzazsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCwgc3JjdmFsIHwgbWFzayk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtODM5LDE2ICs4MTYsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0c19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLQkJCW1hc2sgPSAodTE2KSgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCwgc3JjdmFsIHwgbWFzayk7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNDsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgbWFzayA9ICh1MTYpICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCwgc3JjdmFsIHwgbWFzayk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIHNyY3ZhbCxtYXNrOworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTMyICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC04NTYsMTMgKzgzMywxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRzX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDU7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3ApOworICAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCB8IG1hc2spOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgc3JjdmFsLG1hc2s7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworQEAgLTg3MCwxNiArODQ4LDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idHNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0gICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCB8IG1hc2spOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBzcmN2YWwsbWFzazsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHUzMiAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtODg3LDUxICs4NjUsNTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0c19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA1OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwKTsKKyAgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgfCBtYXNrKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IHNyY3ZhbCxtYXNrOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwLCBzcmN2YWwgfCBtYXNrKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKKy0JCQlzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0JCQlERUNPREVfUFJJTlRGKCIsIik7CistCQkJc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCQkJVFJBQ0VfQU5EX1NURVAoKTsKKy0JCQliaXQgPSAqc2hpZnRyZWcgJiAweEY7CistCQkJZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CistCQkJc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCB8IG1hc2spOworLQkJfQorLQkJYnJlYWs7CistCWNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworLQkJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCQkJdTMyICpzcmNyZWcsKnNoaWZ0cmVnOworLQkJCXUzMiBtYXNrOworLQorLQkJCXNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKy0JCQlERUNPREVfUFJJTlRGKCIsIik7CistCQkJc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCQkJVFJBQ0VfQU5EX1NURVAoKTsKKy0JCQliaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLQkJCW1hc2sgPSAoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssRl9DRik7CistCQkJKnNyY3JlZyB8PSBtYXNrOworLQkJfSBlbHNlIHsKKy0JCQl1MTYgKnNyY3JlZywqc2hpZnRyZWc7CistCQkJdTE2IG1hc2s7CistCistCQkJc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssRl9DRik7CisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgKnNyY3JlZywgKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiBtYXNrOworKworKyAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgICpzcmNyZWcgfD0gbWFzazsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqc3JjcmVnLCAqc2hpZnRyZWc7CisrICAgICAgICAgICAgdTE2IG1hc2s7CisrCisrICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKysgICAgICAgICAgICBtYXNrID0gKHUxNikgKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiBtYXNrLCBGX0NGKTsKKyAgICAgICAgICAgICAqc3JjcmVnIHw9IG1hc2s7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKK0BAIC05NDQsMTEgKzkyNCwxMiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRzX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGFjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworLQl1OCBzaGlmdDsKKysgICAgdTggc2hpZnQ7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlNITERcdCIpOworQEAgLTk2Nyw5ICs5NDgsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfbG9uZyhkZXN0dmFsLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC05ODEsNyArOTYzLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKK0BAIC05OTgsOSArOTgwLDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtMTAxMiw3ICs5OTUsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworQEAgLTEwMjksOSArMTAxMiwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTEwNDMsMTMgKzEwMjcsMTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTEwNTgsOSArMTA0MiwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgICpkZXN0cmVnID0gc2hyZF9sb25nKCpkZXN0cmVnLCpzaGlmdHJlZyxzaGlmdCk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSBzaHJkX2xvbmcoKmRlc3RyZWcsICpzaGlmdHJlZywgc2hpZnQpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTA2OSw3ICsxMDU0LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICAqZGVzdHJlZyA9IHNocmRfd29yZCgqZGVzdHJlZywqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgICpkZXN0cmVnID0gc2hyZF93b3JkKCpkZXN0cmVnLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtMTA4MSw3ICsxMDY2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhhZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX3NocmRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtMTEwMSw5ICsxMDg3LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC0xMTEzLDcgKzExMDAsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CitAQCAtMTEyOCw5ICsxMTE1LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC0xMTQwLDcgKzExMjgsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CitAQCAtMTE1NSw5ICsxMTQzLDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC0xMTY3LDI5ICsxMTU2LDMwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX3dvcmQoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICAqZGVzdHJlZyA9IHNocmRfbG9uZygqZGVzdHJlZywqc2hpZnRyZWcsTS54ODYuUl9DTCk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSBzaHJkX2xvbmcoKmRlc3RyZWcsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgKmRlc3RyZWcgPSBzaHJkX3dvcmQoKmRlc3RyZWcsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgICpkZXN0cmVnID0gc2hyZF93b3JkKCpkZXN0cmVnLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIH0KK0BAIC0xMjAxLDcgKzExOTEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YWYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9pbXVsX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2ltdWxfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTEyMTQsMjMgKzEyMDUsMjUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2ltdWxfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTMyIHNyY3ZhbDsKKy0gICAgICAgICAgICB1MzIgcmVzX2xvLHJlc19oaTsKKysgICAgICAgICAgICB1MzIgcmVzX2xvLCByZXNfaGk7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sJnJlc19oaSwoczMyKSpkZXN0cmVnLChzMzIpc3JjdmFsKTsKKysgICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sICZyZXNfaGksIChzMzIpICogZGVzdHJlZywgKHMzMikgc3JjdmFsKTsKKyAgICAgICAgICAgICBpZiAocmVzX2hpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpcmVzX2xvOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpIHJlc19sbzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworICAgICAgICAgICAgIHUzMiByZXM7CitAQCAtMTI0MCwzOCArMTIzMyw0MSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfaW11bF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIHJlcyA9IChzMTYpKmRlc3RyZWcgKiAoczE2KXNyY3ZhbDsKKysgICAgICAgICAgICByZXMgPSAoczE2KSAqIGRlc3RyZWcgKiAoczE2KSBzcmN2YWw7CisgICAgICAgICAgICAgaWYgKHJlcyA+IDB4RkZGRikgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNilyZXM7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KSByZXM7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworICAgICAgICAgICAgIHUzMiBzcmN2YWw7CistICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7CisrICAgICAgICAgICAgdTMyIHJlc19sbywgcmVzX2hpOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMikqZGVzdHJlZywoczMyKXNyY3ZhbCk7CisrICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCAmcmVzX2hpLCAoczMyKSAqIGRlc3RyZWcsIChzMzIpIHNyY3ZhbCk7CisgICAgICAgICAgICAgaWYgKHJlc19oaSAhPSAwKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKSByZXNfbG87CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAgICAgICAgICAgICB1MzIgcmVzOworQEAgLTEyODEsMzggKzEyNzcsNDEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2ltdWxfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KSpkZXN0cmVnICogKHMxNilzcmN2YWw7CisrICAgICAgICAgICAgcmVzID0gKHMxNikgKiBkZXN0cmVnICogKHMxNikgc3JjdmFsOworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpKmRlc3RyZWcsKHMzMilzcmN2YWwpOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgKiBkZXN0cmVnLCAoczMyKSBzcmN2YWwpOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC0xMzIyLDUxICsxMzIxLDU1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9pbXVsX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgcmVzID0gKHMxNikqZGVzdHJlZyAqIChzMTYpc3JjdmFsOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpICogZGVzdHJlZyAqIChzMTYpIHNyY3ZhbDsKKyAgICAgICAgICAgICBpZiAocmVzID4gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpIHJlczsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgcmVzX2xvLCByZXNfaGk7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMikqZGVzdHJlZywoczMyKSpzcmNyZWcpOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgKiBkZXN0cmVnLCAoczMyKSAqIHNyY3JlZyk7CisgICAgICAgICAgICAgaWYgKHJlc19oaSAhPSAwKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKSByZXNfbG87CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgICAgICAgICAgICAgdTMyIHJlczsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CistICAgICAgICAgICAgcmVzID0gKHMxNikqZGVzdHJlZyAqIChzMTYpKnNyY3JlZzsKKysgICAgICAgICAgICByZXMgPSAoczE2KSAqIGRlc3RyZWcgKiAoczE2KSAqIHNyY3JlZzsKKyAgICAgICAgICAgICBpZiAocmVzID4gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpIHJlczsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtMTM3OCw5ICsxMzgxLDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9pbXVsX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGIyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfbHNzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9sc3NfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKy0JaW50IG1vZCwgcmgsIHJsOworKyAgICBpbnQgbW9kLCByaCwgcmw7CisgICAgIHUxNiAqZHN0cmVnOworICAgICB1aW50IHNyY29mZnNldDsKKyAKK0BAIC0xNDE1LDcgKzE0MTksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbHNzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICpkc3RyZWcgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKyAgICAgICAgIE0ueDg2LlJfU1MgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgMik7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICAvKiBVTkRFRklORUQhICovCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICB9CitAQCAtMTQyNywxNDggKzE0MzEsMTU0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sc3NfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGIzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRyX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2J0cl9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CistCWludCBtb2QsIHJsLCByaDsKKy0JdWludCBzcmNvZmZzZXQ7CistCWludCBiaXQsZGlzcDsKKy0KKy0JU1RBUlRfT0ZfSU5TVFIoKTsKKy0JREVDT0RFX1BSSU5URigiQlRSXHQiKTsKKy0JRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKy0Jc3dpdGNoIChtb2QpIHsKKy0JY2FzZSAwOgorLQkJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCQkJdTMyIHNyY3ZhbCxtYXNrOworLQkJCXUzMiAqc2hpZnRyZWc7CistCistCQkJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CistCQkJREVDT0RFX1BSSU5URigiLCIpOworLQkJCXNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworLQkJCVRSQUNFX0FORF9TVEVQKCk7CistCQkJYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0JCQlkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKy0JCQlzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworLQkJCW1hc2sgPSAoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCAmIH5tYXNrKTsKKy0JCX0gZWxzZSB7CistCQkJdTE2IHNyY3ZhbCxtYXNrOworLQkJCXUxNiAqc2hpZnRyZWc7CistCistCQkJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CistCQkJREVDT0RFX1BSSU5URigiLCIpOworLQkJCXNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkJCVRSQUNFX0FORF9TVEVQKCk7CistCQkJYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLQkJCWRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OworLQkJCXNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CistCQkJbWFzayA9ICh1MTYpKDB4MSA8PCBiaXQpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwLCAodTE2KShzcmN2YWwgJiB+bWFzaykpOworLQkJfQorLQkJYnJlYWs7CistCWNhc2UgMToKKy0JCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkJCXUzMiBzcmN2YWwsbWFzazsKKy0JCQl1MzIgKnNoaWZ0cmVnOworLQorLQkJCXNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistCQkJZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CistCQkJc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKDB4MSA8PCBiaXQpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCQkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgJiB+bWFzayk7CistCQl9IGVsc2UgeworLQkJCXUxNiBzcmN2YWwsbWFzazsKKy0JCQl1MTYgKnNoaWZ0cmVnOworLQorLQkJCXNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0JCQlkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0JCQlzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLQkJCW1hc2sgPSAodTE2KSgweDEgPDwgYml0KTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkJCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCwgKHUxNikoc3JjdmFsICYgfm1hc2spKTsKKy0JCX0KKy0JCWJyZWFrOworLQljYXNlIDI6CistCQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCQl1MzIgc3JjdmFsLG1hc2s7CistCQkJdTMyICpzaGlmdHJlZzsKKy0KKy0JCQlzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0JCQlERUNPREVfUFJJTlRGKCIsIik7CistCQkJc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCQkJVFJBQ0VfQU5EX1NURVAoKTsKKy0JCQliaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLQkJCWRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworLQkJCXNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CistCQkJbWFzayA9ICgweDEgPDwgYml0KTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkJCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCwgc3JjdmFsICYgfm1hc2spOworLQkJfSBlbHNlIHsKKy0JCQl1MTYgc3JjdmFsLG1hc2s7CistCQkJdTE2ICpzaGlmdHJlZzsKKy0KKy0JCQlzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0JCQlERUNPREVfUFJJTlRGKCIsIik7CistCQkJc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCQkJVFJBQ0VfQU5EX1NURVAoKTsKKy0JCQliaXQgPSAqc2hpZnRyZWcgJiAweEY7CistCQkJZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CistCQkJc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3AsICh1MTYpKHNyY3ZhbCAmIH5tYXNrKSk7CistCQl9CistCQlicmVhazsKKy0JY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCistCQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCQl1MzIgKnNyY3JlZywqc2hpZnRyZWc7CistCQkJdTMyIG1hc2s7CistCistCQkJc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistCQkJbWFzayA9ICgweDEgPDwgYml0KTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzayxGX0NGKTsKKy0JCQkqc3JjcmVnICY9IH5tYXNrOworLQkJfSBlbHNlIHsKKy0JCQl1MTYgKnNyY3JlZywqc2hpZnRyZWc7CistCQkJdTE2IG1hc2s7CistCistCQkJc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssRl9DRik7CistCQkJKnNyY3JlZyAmPSB+bWFzazsKKy0JCX0KKy0JCWJyZWFrOworLQl9CistCURFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKy0JRU5EX09GX0lOU1RSKCk7CisrICAgIGludCBtb2QsIHJsLCByaDsKKysgICAgdWludCBzcmNvZmZzZXQ7CisrICAgIGludCBiaXQsIGRpc3A7CisrCisrICAgIFNUQVJUX09GX0lOU1RSKCk7CisrICAgIERFQ09ERV9QUklOVEYoIkJUUlx0Iik7CisrICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisrICAgIHN3aXRjaCAobW9kKSB7CisrICAgIGNhc2UgMDoKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsIG1hc2s7CisrICAgICAgICAgICAgdTMyICpzaGlmdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDU7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCAmIH5tYXNrKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsIG1hc2s7CisrICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNDsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgbWFzayA9ICh1MTYpICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCwgKHUxNikgKHNyY3ZhbCAmIH5tYXNrKSk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAxOgorKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgbWFzazsKKysgICAgICAgICAgICB1MzIgKnNoaWZ0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCwgc3JjdmFsICYgfm1hc2spOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgbWFzazsKKysgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA0OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBtYXNrID0gKHUxNikgKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwLCAodTE2KSAoc3JjdmFsICYgfm1hc2spKTsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICBjYXNlIDI6CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCBtYXNrOworKyAgICAgICAgICAgIHUzMiAqc2hpZnRyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA1OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwLCBzcmN2YWwgJiB+bWFzayk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCBtYXNrOworKyAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3AsICh1MTYpIChzcmN2YWwgJiB+bWFzaykpOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgKnNyY3JlZywgKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiBtYXNrOworKworKyAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgICpzcmNyZWcgJj0gfm1hc2s7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKnNyY3JlZywgKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUxNiBtYXNrOworKworKyAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CisrICAgICAgICAgICAgbWFzayA9ICh1MTYpICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgKnNyY3JlZyAmPSB+bWFzazsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICB9CisrICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKysgICAgRU5EX09GX0lOU1RSKCk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YjQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sZnNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2xmc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworLQlpbnQgbW9kLCByaCwgcmw7CisrICAgIGludCBtb2QsIHJoLCBybDsKKyAgICAgdTE2ICpkc3RyZWc7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworIAorQEAgLTE2MDMsNyArMTYxMyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sZnNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgKmRzdHJlZyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgTS54ODYuUl9GUyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyAyKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIC8qIFVOREVGSU5FRCEgKi8KKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIH0KK0BAIC0xNjE1LDkgKzE2MjUsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2xmc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YjUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sZ3NfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2xnc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworLQlpbnQgbW9kLCByaCwgcmw7CisrICAgIGludCBtb2QsIHJoLCBybDsKKyAgICAgdTE2ICpkc3RyZWc7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworIAorQEAgLTE2NTIsNyArMTY2Myw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sZ3NfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgKmRzdHJlZyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgTS54ODYuUl9HUyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyAyKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIC8qIFVOREVGSU5FRCEgKi8KKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIH0KK0BAIC0xNjY0LDcgKzE2NzUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbGdzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhiNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnp4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfbW92enhfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMTY4NSw3ICsxNjk3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnp4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTE3MTAsNyArMTcyMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3Z6eF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0xNzM1LDcgKzE3NDksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92enhfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMTc0OCwxMCArMTc2MywxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92enhfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKy0gICAgICAgICAgICB1OCAgKnNyY3JlZzsKKysgICAgICAgICAgICB1OCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTE3NTksOSArMTc3NCwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92enhfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSAqc3JjcmVnOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKy0gICAgICAgICAgICB1OCAgKnNyY3JlZzsKKysgICAgICAgICAgICB1OCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTE3ODAsNyArMTc5Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3Z6eF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGI3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92enhfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9tb3Z6eF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0xODE5LDcgKzE4MzYsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92enhfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CitAQCAtMTgzNiw3ICsxODUzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnp4X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YmEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idFhfSSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfYnRYX0kodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0xODQ2LDIzICsxODY0LDIzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idFhfSSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAocmgpIHsKKyAgICAgY2FzZSA0OgorLQlERUNPREVfUFJJTlRGKCJCVFx0Iik7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiQlRcdCIpOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNToKKy0JREVDT0RFX1BSSU5URigiQlRTXHQiKTsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJCVFNcdCIpOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNjoKKy0JREVDT0RFX1BSSU5URigiQlRSXHQiKTsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJCVFJcdCIpOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNzoKKy0JREVDT0RFX1BSSU5URigiQlRDXHQiKTsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJCVENcdCIpOworKyAgICAgICAgYnJlYWs7CisgICAgIGRlZmF1bHQ6CistCURFQ09ERV9QUklOVEYoIklMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERVxuIik7CistCVRSQUNFX1JFR1MoKTsKKy0JcHJpbnRrKCIlMDR4OiUwNHg6ICUwMlglMDJYIElMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERSBFWFRFTlNJT04hXG4iLAorLQkJTS54ODYuUl9DUywgTS54ODYuUl9JUC0zLG9wMiwgKG1vZDw8Nil8KHJoPDwzKXxybCk7CistCUhBTFRfU1lTKCk7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJJTExFR0FMIEVYVEVOREVEIFg4NiBPUENPREVcbiIpOworKyAgICAgICAgVFJBQ0VfUkVHUygpOworKyAgICAgICAgcHJpbnRrKCIlMDR4OiUwNHg6ICUwMlglMDJYIElMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERSBFWFRFTlNJT04hXG4iLAorKyAgICAgICAgICAgICAgIE0ueDg2LlJfQ1MsIE0ueDg2LlJfSVAgLSAzLCBvcDIsIChtb2QgPDwgNikgfCAocmggPDwgMykgfCBybCk7CisrICAgICAgICBIQUxUX1NZUygpOworICAgICB9CisgICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKK0BAIC0xODc2LDIyICsxODk0LDIzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idFhfSSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSBzaGlmdCAmIDB4MUY7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CistCSAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCSAgICBzd2l0Y2ggKHJoKSB7CistCSAgICBjYXNlIDU6CistCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA2OgorLQkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworLQkJYnJlYWs7CistCSAgICBjYXNlIDc6CistCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKy0JCWJyZWFrOworLQkgICAgZGVmYXVsdDoKKy0JCWJyZWFrOworLQkgICAgfQorLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN3aXRjaCAocmgpIHsKKysgICAgICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1OCBzaGlmdDsKKyAKK0BAIC0xOTAxLDIxICsxOTIwLDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idFhfSSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSBzaGlmdCAmIDB4RjsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKy0JICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JICAgIHN3aXRjaCAocmgpIHsKKy0JICAgIGNhc2UgNToKKy0JCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworLQkJYnJlYWs7CistCSAgICBjYXNlIDY6CistCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CistCQlicmVhazsKKy0JICAgIGNhc2UgNzoKKy0JCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworLQkJYnJlYWs7CistCSAgICBkZWZhdWx0OgorLQkJYnJlYWs7CistCSAgICB9CisrICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzd2l0Y2ggKHJoKSB7CisrICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDE6CitAQCAtMTkyOSwyMiArMTk0OCwyMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRYX0kodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gc2hpZnQgJiAweDFGOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworLQkgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkgICAgc3dpdGNoIChyaCkgeworLQkgICAgY2FzZSA1OgorLQkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CistCQlicmVhazsKKy0JICAgIGNhc2UgNjoKKy0JCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA3OgorLQkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CistCQlicmVhazsKKy0JICAgIGRlZmF1bHQ6CistCQlicmVhazsKKy0JICAgIH0KKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzd2l0Y2ggKHJoKSB7CisrICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTggc2hpZnQ7CisgCitAQCAtMTk1NCwyMSArMTk3NCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRYX0kodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gc2hpZnQgJiAweEY7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CistCSAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCSAgICBzd2l0Y2ggKHJoKSB7CistCSAgICBjYXNlIDU6CistCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA2OgorLQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworLQkJYnJlYWs7CistCSAgICBjYXNlIDc6CistCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKy0JCWJyZWFrOworLQkgICAgZGVmYXVsdDoKKy0JCWJyZWFrOworLQkgICAgfQorKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3dpdGNoIChyaCkgeworKyAgICAgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDc6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorQEAgLTE5ODIsMjIgKzIwMDIsMjMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0WF9JKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9IHNoaWZ0ICYgMHgxRjsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKy0JICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JICAgIHN3aXRjaCAocmgpIHsKKy0JICAgIGNhc2UgNToKKy0JCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworLQkJYnJlYWs7CistCSAgICBjYXNlIDY6CistCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CistCQlicmVhazsKKy0JICAgIGNhc2UgNzoKKy0JCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworLQkJYnJlYWs7CistCSAgICBkZWZhdWx0OgorLQkJYnJlYWs7CistCSAgICB9CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3dpdGNoIChyaCkgeworKyAgICAgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDc6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHU4IHNoaWZ0OworIAorQEAgLTIwMDcsNzQgKzIwMjgsNzUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0WF9JKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9IHNoaWZ0ICYgMHhGOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworLQkgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkgICAgc3dpdGNoIChyaCkgeworLQkgICAgY2FzZSA1OgorLQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CistCQlicmVhazsKKy0JICAgIGNhc2UgNjoKKy0JCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA3OgorLQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CistCQlicmVhazsKKy0JICAgIGRlZmF1bHQ6CistCQlicmVhazsKKy0JICAgIH0KKy0gICAgICAgIH0KKy0gICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN3aXRjaCAocmgpIHsKKysgICAgICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKnNyY3JlZzsKKy0JICAgIHUzMiBtYXNrOworLQkgICAgdTggc2hpZnQ7CisrICAgICAgICAgICAgdTMyIG1hc2s7CisrICAgICAgICAgICAgdTggc2hpZnQ7CisgCisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSBzaGlmdCAmIDB4MUY7CistCSAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiBtYXNrLEZfQ0YpOworLQkgICAgc3dpdGNoIChyaCkgeworLQkgICAgY2FzZSA1OgorLQkJKnNyY3JlZyB8PSBtYXNrOworLQkJYnJlYWs7CistCSAgICBjYXNlIDY6CistCQkqc3JjcmVnICY9IH5tYXNrOworLQkJYnJlYWs7CistCSAgICBjYXNlIDc6CistCQkqc3JjcmVnIF49IG1hc2s7CistCQlicmVhazsKKy0JICAgIGRlZmF1bHQ6CistCQlicmVhazsKKy0JICAgIH0KKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3dpdGNoIChyaCkgeworKyAgICAgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICAgICAgKnNyY3JlZyB8PSBtYXNrOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgICAgICpzcmNyZWcgJj0gfm1hc2s7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICAgICAgKnNyY3JlZyBePSBtYXNrOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKy0JICAgIHUxNiBtYXNrOworLQkgICAgdTggc2hpZnQ7CisrICAgICAgICAgICAgdTE2IG1hc2s7CisrICAgICAgICAgICAgdTggc2hpZnQ7CisgCisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSBzaGlmdCAmIDB4RjsKKy0JICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssRl9DRik7CistCSAgICBzd2l0Y2ggKHJoKSB7CistCSAgICBjYXNlIDU6CistCQkqc3JjcmVnIHw9IG1hc2s7CistCQlicmVhazsKKy0JICAgIGNhc2UgNjoKKy0JCSpzcmNyZWcgJj0gfm1hc2s7CistCQlicmVhazsKKy0JICAgIGNhc2UgNzoKKy0JCSpzcmNyZWcgXj0gbWFzazsKKy0JCWJyZWFrOworLQkgICAgZGVmYXVsdDoKKy0JCWJyZWFrOworLQkgICAgfQorKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN3aXRjaCAocmgpIHsKKysgICAgICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgICAgICpzcmNyZWcgfD0gbWFzazsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgICAgICAqc3JjcmVnICY9IH5tYXNrOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDc6CisrICAgICAgICAgICAgICAgICpzcmNyZWcgXj0gbWFzazsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIH0KK0BAIC0yMDg2LDExICsyMTA4LDEyIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idFhfSSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YmIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfYnRjX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKKy0gICAgaW50IGJpdCxkaXNwOworKyAgICBpbnQgYml0LCBkaXNwOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJCVENcdCIpOworQEAgLTIwOTgsNyArMjEyMSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBzcmN2YWwsbWFzazsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHUzMiAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtMjEwNiwxMyArMjEyOSwxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRjX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDU7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3ApOworICAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCBeIG1hc2spOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgc3JjdmFsLG1hc2s7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCBeIG1hc2spOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworQEAgLTIxMjAsMTYgKzIxNDQsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0Y19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLQkJCW1hc2sgPSAodTE2KSgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkJCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCwgKHUxNikoc3JjdmFsIF4gbWFzaykpOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3AsICh1MTYpIChzcmN2YWwgXiBtYXNrKSk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIHNyY3ZhbCxtYXNrOworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTMyICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC0yMTM3LDEzICsyMTYxLDE0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCk7CisgICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCwgc3JjdmFsIF4gbWFzayk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiBzcmN2YWwsbWFzazsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCwgc3JjdmFsIF4gbWFzayk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CitAQCAtMjE1MSwxNiArMjE3NiwxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRjX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CistCQkJbWFzayA9ICh1MTYpKDB4MSA8PCBiaXQpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwLCAodTE2KShzcmN2YWwgXiBtYXNrKSk7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNDsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgbWFzayA9ICh1MTYpICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCwgKHUxNikgKHNyY3ZhbCBeIG1hc2spKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDI6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgc3JjdmFsLG1hc2s7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1MzIgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworQEAgLTIxNjgsMTMgKzIxOTMsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0Y19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA1OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwKTsKKyAgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgXiBtYXNrKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IHNyY3ZhbCxtYXNrOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwLCBzcmN2YWwgXiBtYXNrKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKK0BAIC0yMTgyLDE2ICsyMjA4LDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3AsICh1MTYpKHNyY3ZhbCBeIG1hc2spKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA0OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBtYXNrID0gKHUxNikgKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwLCAodTE2KSAoc3JjdmFsIF4gbWFzaykpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCQkJdTMyICpzcmNyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiAqc3JjcmVnLCAqc2hpZnRyZWc7CisgICAgICAgICAgICAgdTMyIG1hc2s7CisgCisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworQEAgLTIyMDAsMTkgKzIyMjYsMjAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0Y19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CisgICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzayxGX0NGKTsKKy0JCQkqc3JjcmVnIF49IG1hc2s7CistCQl9IGVsc2UgeworLQkJCXUxNiAqc3JjcmVnLCpzaGlmdHJlZzsKKy0JCQl1MTYgbWFzazsKKy0KKy0JCQlzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CistCQkJREVDT0RFX1BSSU5URigiLCIpOworLQkJCXNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkJCVRSQUNFX0FORF9TVEVQKCk7CistCQkJYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLQkJCW1hc2sgPSAodTE2KSgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzayxGX0NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgKnNyY3JlZyBePSBtYXNrOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpzcmNyZWcsICpzaGlmdHJlZzsKKysgICAgICAgICAgICB1MTYgbWFzazsKKysKKysgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssIEZfQ0YpOworICAgICAgICAgICAgICpzcmNyZWcgXj0gbWFzazsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworQEAgLTIyMjUsNyArMjI1Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YmMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9ic2YodTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2JzZih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTIyMzMsMTA1ICsyMjYxLDExNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnNmKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQlNGXHQiKTsKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKy0gICAgc3dpdGNoKG1vZCkgeworKyAgICBzd2l0Y2ggKG1vZCkgeworICAgICBjYXNlIDA6CistCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAwOyAqZHN0cmVnIDwgMzI7ICgqZHN0cmVnKSsrKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfSBlbHNlIHsKKy0JICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDE2OyAoKmRzdHJlZykrKykKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0KKy0JYnJlYWs7CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDMyOyAoKmRzdHJlZykrKykKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDE2OyAoKmRzdHJlZykrKykKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorLQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDMyOyAoKmRzdHJlZykrKykKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0gZWxzZSB7CistCSAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAxNjsgKCpkc3RyZWcpKyspCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9CistCWJyZWFrOworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAzMjsgKCpkc3RyZWcpKyspCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAxNjsgKCpkc3RyZWcpKyspCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKy0JaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCSAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAzMjsgKCpkc3RyZWcpKyspCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9IGVsc2UgeworLQkgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAwOyAqZHN0cmVnIDwgMTY7ICgqZHN0cmVnKSsrKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfQorLQlicmVhazsKKy0gICAgY2FzZSAzOgkJCQkvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworLQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmN2YWwgPSAqREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDMyOyAoKmRzdHJlZykrKykKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0gZWxzZSB7CistCSAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3JjdmFsID0gKkRFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAxNjsgKCpkc3RyZWcpKyspCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9CistCWJyZWFrOworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAzMjsgKCpkc3RyZWcpKyspCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAxNjsgKCpkc3RyZWcpKyspCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY3ZhbCA9ICpERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBmb3IgKCpkc3RyZWcgPSAwOyAqZHN0cmVnIDwgMzI7ICgqZHN0cmVnKSsrKQorKyAgICAgICAgICAgICAgICBpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3JjdmFsID0gKkRFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAxNjsgKCpkc3RyZWcpKyspCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC0yMzQxLDcgKzIzODEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnNmKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhiZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX2Jzcih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfYnNyKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMjM0OSwxMDUgKzIzOTAsMTE3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9ic3IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJCU1JcdCIpOworICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworLSAgICBzd2l0Y2gobW9kKSB7CisrICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKKy0JaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCSAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDMxOyAqZHN0cmVnID4gMDsgKCpkc3RyZWcpLS0pCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9IGVsc2UgeworLQkgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAxNTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfQorLQlicmVhazsKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBmb3IgKCpkc3RyZWcgPSAzMTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorKyAgICAgICAgICAgICAgICBpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBmb3IgKCpkc3RyZWcgPSAxNTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorKyAgICAgICAgICAgICAgICBpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDE6CistCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAzMTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfSBlbHNlIHsKKy0JICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMTU7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0KKy0JYnJlYWs7CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMzE7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMTU7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorLQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMzE7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0gZWxzZSB7CistCSAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDE1OyAqZHN0cmVnID4gMDsgKCpkc3RyZWcpLS0pCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9CistCWJyZWFrOworLSAgICBjYXNlIDM6CQkJCS8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCistCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY3ZhbCA9ICpERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAzMTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfSBlbHNlIHsKKy0JICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmN2YWwgPSAqREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMTU7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0KKy0JYnJlYWs7CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMzE7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMTU7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3JjdmFsID0gKkRFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDMxOyAqZHN0cmVnID4gMDsgKCpkc3RyZWcpLS0pCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmN2YWwgPSAqREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMTU7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTI0NTcsNyArMjUxMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9ic3IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGJlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92c3hfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9tb3ZzeF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0yNDc0LDE4ICsyNTI4LDE5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3ZzeF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLSAgICAgICAgICAgIHNyY3ZhbCA9IChzMzIpKChzOClmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7CisrICAgICAgICAgICAgc3JjdmFsID0gKHMzMikgKChzOCkgZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKy0gICAgICAgICAgICBzcmN2YWwgPSAoczE2KSgoczgpZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IChzMTYpICgoczgpIGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CitAQCAtMjQ5OSwxOCArMjU1NCwxOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92c3hfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0gICAgICAgICAgICBzcmN2YWwgPSAoczMyKSgoczgpZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IChzMzIpICgoczgpIGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CistICAgICAgICAgICAgc3JjdmFsID0gKHMxNikoKHM4KWZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKKysgICAgICAgICAgICBzcmN2YWwgPSAoczE2KSAoKHM4KSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworQEAgLTI1MjQsNDQgKzI1ODAsNDYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnN4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistICAgICAgICAgICAgc3JjdmFsID0gKHMzMikoKHM4KWZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKKysgICAgICAgICAgICBzcmN2YWwgPSAoczMyKSAoKHM4KSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworLSAgICAgICAgICAgIHNyY3ZhbCA9IChzMTYpKChzOClmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7CisrICAgICAgICAgICAgc3JjdmFsID0gKHMxNikgKChzOCkgZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKy0gICAgICAgICAgICB1OCAgKnNyY3JlZzsKKysgICAgICAgICAgICB1OCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgKmRlc3RyZWcgPSAoczMyKSgoczgpKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHMzMikgKChzOCkgKiBzcmNyZWcpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworLSAgICAgICAgICAgIHU4ICAqc3JjcmVnOworKyAgICAgICAgICAgIHU4ICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICAqZGVzdHJlZyA9IChzMTYpKChzOCkqc3JjcmVnKTsKKysgICAgICAgICAgICAqZGVzdHJlZyA9IChzMTYpICgoczgpICogc3JjcmVnKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtMjU3Myw3ICsyNjMxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnN4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YmYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3ZzeF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX21vdnN4X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTI1ODksNyArMjY0OCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3ZzeF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLSAgICAgICAgc3JjdmFsID0gKHMzMikoKHMxNilmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KSk7CisrICAgICAgICBzcmN2YWwgPSAoczMyKSAoKHMxNikgZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCkpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKK0BAIC0yNTk4LDcgKzI2NTcsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92c3hfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0gICAgICAgIHNyY3ZhbCA9IChzMzIpKChzMTYpZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCkpOworKyAgICAgICAgc3JjdmFsID0gKHMzMikgKChzMTYpIGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CitAQCAtMjYwNywxOCArMjY2NiwxOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92c3hfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0gICAgICAgIHNyY3ZhbCA9IChzMzIpKChzMTYpZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCkpOworKyAgICAgICAgc3JjdmFsID0gKHMzMikgKChzMTYpIGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAqZGVzdHJlZyA9IChzMzIpKChzMTYpKnNyY3JlZyk7CisrICAgICAgICAqZGVzdHJlZyA9IChzMzIpICgoczE2KSAqIHNyY3JlZyk7CisgICAgICAgICBicmVhazsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMjYyNiw0MCArMjY4NSw0MSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92c3hfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB9CisgCisgLyogSGFuZGxlcyBvcGNvZGVzIDB4YzgtMHhjZiAqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9ic3dhcCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfYnN3YXAodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQlNXQVBcbiIpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworIAorICAgICBzd2l0Y2ggKG9wMikgeworLQljYXNlIDB4Yzg6CistCSAgICBNLng4Ni5SX0VBWCA9IGJzd2FwXzMyKE0ueDg2LlJfRUFYKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Yzk6CistCSAgICBNLng4Ni5SX0VDWCA9IGJzd2FwXzMyKE0ueDg2LlJfRUNYKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Y2E6CistCSAgICBNLng4Ni5SX0VEWCA9IGJzd2FwXzMyKE0ueDg2LlJfRURYKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Y2I6CistCSAgICBNLng4Ni5SX0VCWCA9IGJzd2FwXzMyKE0ueDg2LlJfRUJYKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Y2M6CistCSAgICBNLng4Ni5SX0VTUCA9IGJzd2FwXzMyKE0ueDg2LlJfRVNQKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Y2Q6CistCSAgICBNLng4Ni5SX0VCUCA9IGJzd2FwXzMyKE0ueDg2LlJfRUJQKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Y2U6CistCSAgICBNLng4Ni5SX0VTSSA9IGJzd2FwXzMyKE0ueDg2LlJfRVNJKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Y2Y6CistCSAgICBNLng4Ni5SX0VESSA9IGJzd2FwXzMyKE0ueDg2LlJfRURJKTsKKy0JICAgIGJyZWFrOworLQlkZWZhdWx0OgorLQkgICAgLyogY2FuJ3QgaGFwcGVuICovCistCSAgICBicmVhazsKKysgICAgY2FzZSAweGM4OgorKyAgICAgICAgTS54ODYuUl9FQVggPSBic3dhcF8zMihNLng4Ni5SX0VBWCk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGM5OgorKyAgICAgICAgTS54ODYuUl9FQ1ggPSBic3dhcF8zMihNLng4Ni5SX0VDWCk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGNhOgorKyAgICAgICAgTS54ODYuUl9FRFggPSBic3dhcF8zMihNLng4Ni5SX0VEWCk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGNiOgorKyAgICAgICAgTS54ODYuUl9FQlggPSBic3dhcF8zMihNLng4Ni5SX0VCWCk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGNjOgorKyAgICAgICAgTS54ODYuUl9FU1AgPSBic3dhcF8zMihNLng4Ni5SX0VTUCk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGNkOgorKyAgICAgICAgTS54ODYuUl9FQlAgPSBic3dhcF8zMihNLng4Ni5SX0VCUCk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGNlOgorKyAgICAgICAgTS54ODYuUl9FU0kgPSBic3dhcF8zMihNLng4Ni5SX0VTSSk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGNmOgorKyAgICAgICAgTS54ODYuUl9FREkgPSBic3dhcF8zMihNLng4Ni5SX0VESSk7CisrICAgICAgICBicmVhazsKKysgICAgZGVmYXVsdDoKKysgICAgICAgIC8qIGNhbid0IGhhcHBlbiAqLworKyAgICAgICAgYnJlYWs7CisgICAgIH0KKyAKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTI2NjksMjUgKzI3MjksMzIgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2Jzd2FwKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogRG91YmxlIGJ5dGUgb3BlcmF0aW9uIGNvZGUgdGFibGU6CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisteworLS8qICAweDAwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogR3JvdXAgRiAocmluZyAwIFBNKSAgICAgICovCistLyogIDB4MDEgKi8geDg2ZW11T3AyX2dyb3VwX2csICAgICAvKiBHcm91cCBHIChyaW5nIDAgUE0pICAgICAgKi8KKy0vKiAgMHgwMiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIGxhciAocmluZyAwIFBNKSAgICAgICAgICAqLworLS8qICAweDAzICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogbHNsIChyaW5nIDAgUE0pICAgICAgICAgICovCisrdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkgKHU4KSA9IHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4MDAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdyb3VwIEYgKHJpbmcgMCBQTSkgICAgICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDAxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdyb3VwIEcgKHJpbmcgMCBQTSkgICAgICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDAyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxhciAocmluZyAwIFBNKSAgICAgICAgICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDAzICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxzbCAocmluZyAwIFBNKSAgICAgICAgICAqLworIC8qICAweDA0ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorLS8qICAweDA1ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogbG9hZGFsbCAodW5kb2N1bWVudGVkKSAgICovCistLyogIDB4MDYgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBjbHRzIChyaW5nIDAgUE0pICAgICAgICAgKi8KKy0vKiAgMHgwNyAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIGxvYWRhbGwgKHVuZG9jdW1lbnRlZCkgICAqLworLS8qICAweDA4ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogaW52ZCAocmluZyAwIFBNKSAgICAgICAgICovCistLyogIDB4MDkgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiB3YmludmQgKHJpbmcgMCBQTSkgICAgICAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgwNSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsb2FkYWxsICh1bmRvY3VtZW50ZWQpICAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgwNiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjbHRzIChyaW5nIDAgUE0pICAgICAgICAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgwNyAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsb2FkYWxsICh1bmRvY3VtZW50ZWQpICAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgwOCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbnZkIChyaW5nIDAgUE0pICAgICAgICAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgwOSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3YmludmQgKHJpbmcgMCBQTSkgICAgICAgKi8KKyAvKiAgMHgwYSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgwYiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgwYyAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgwZCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgwZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgwZiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0KKyAvKiAgMHgxMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgxMSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgxMiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKK0BAIC0yNzA0LDE0ICsyNzcxLDE5IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4MWQgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MWUgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MWYgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCistCistLyogIDB4MjAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBtb3YgcmVnMzIsY3JlZyAocmluZyAwIFBNKSAqLworLS8qICAweDIxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogbW92IHJlZzMyLGRyZWcgKHJpbmcgMCBQTSkgKi8KKy0vKiAgMHgyMiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIG1vdiBjcmVnLHJlZzMyIChyaW5nIDAgUE0pICovCistLyogIDB4MjMgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBtb3YgZHJlZyxyZWczMiAocmluZyAwIFBNKSAqLworLS8qICAweDI0ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogbW92IHJlZzMyLHRyZWcgKHJpbmcgMCBQTSkgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgyMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtb3YgcmVnMzIsY3JlZyAocmluZyAwIFBNKSAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDIxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vdiByZWczMixkcmVnIChyaW5nIDAgUE0pICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4MjIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbW92IGNyZWcscmVnMzIgKHJpbmcgMCBQTSkgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgyMyAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtb3YgZHJlZyxyZWczMiAocmluZyAwIFBNKSAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDI0ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vdiByZWczMix0cmVnIChyaW5nIDAgUE0pICovCisgLyogIDB4MjUgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCistLyogIDB4MjYgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBtb3YgdHJlZyxyZWczMiAocmluZyAwIFBNKSAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDI2ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vdiB0cmVnLHJlZzMyIChyaW5nIDAgUE0pICovCisgLyogIDB4MjcgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MjggKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MjkgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCitAQCAtMjcyMSw3ICsyNzkzLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHgyZCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgyZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgyZiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0KKyAvKiAgMHgzMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgzMSAqLyB4ODZlbXVPcDJfcmR0c2MsCisgLyogIDB4MzIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCitAQCAtMjczOCw3ICsyODA5LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHgzZCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgzZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgzZiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0KKyAvKiAgMHg0MCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg0MSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg0MiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKK0BAIC0yNzU1LDcgKzI4MjUsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiMlsyNTZdKSh1OCkgPQorIC8qICAweDRkICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDRlICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDRmICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorLQorIC8qICAweDUwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDUxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDUyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorQEAgLTI3NzIsNyArMjg0MSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4NWQgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NWUgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NWYgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCistCisgLyogIDB4NjAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NjEgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NjIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCitAQCAtMjc4OSw3ICsyODU3LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHg2ZCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg2ZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg2ZiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0KKyAvKiAgMHg3MCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg3MSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg3MiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKK0BAIC0yODA2LDcgKzI4NzMsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiMlsyNTZdKSh1OCkgPQorIC8qICAweDdkICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDdlICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDdmICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorLQorIC8qICAweDgwICovIHg4NmVtdU9wMl9sb25nX2p1bXAsCisgLyogIDB4ODEgKi8geDg2ZW11T3AyX2xvbmdfanVtcCwKKyAvKiAgMHg4MiAqLyB4ODZlbXVPcDJfbG9uZ19qdW1wLAorQEAgLTI4MjMsNyArMjg4OSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4OGQgKi8geDg2ZW11T3AyX2xvbmdfanVtcCwKKyAvKiAgMHg4ZSAqLyB4ODZlbXVPcDJfbG9uZ19qdW1wLAorIC8qICAweDhmICovIHg4NmVtdU9wMl9sb25nX2p1bXAsCistCisgLyogIDB4OTAgKi8geDg2ZW11T3AyX3NldF9ieXRlLAorIC8qICAweDkxICovIHg4NmVtdU9wMl9zZXRfYnl0ZSwKKyAvKiAgMHg5MiAqLyB4ODZlbXVPcDJfc2V0X2J5dGUsCitAQCAtMjg0MCw3ICsyOTA1LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHg5ZCAqLyB4ODZlbXVPcDJfc2V0X2J5dGUsCisgLyogIDB4OWUgKi8geDg2ZW11T3AyX3NldF9ieXRlLAorIC8qICAweDlmICovIHg4NmVtdU9wMl9zZXRfYnl0ZSwKKy0KKyAvKiAgMHhhMCAqLyB4ODZlbXVPcDJfcHVzaF9GUywKKyAvKiAgMHhhMSAqLyB4ODZlbXVPcDJfcG9wX0ZTLAorIC8qICAweGEyICovIHg4NmVtdU9wMl9jcHVpZCwKK0BAIC0yODU3LDkgKzI5MjEsMTAgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHhhZCAqLyB4ODZlbXVPcDJfc2hyZF9DTCwKKyAvKiAgMHhhZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhhZiAqLyB4ODZlbXVPcDJfaW11bF9SX1JNLAorLQorLS8qICAweGIwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogVE9ETzogY21weGNoZyAqLworLS8qICAweGIxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogVE9ETzogY21weGNoZyAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweGIwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRPRE86IGNtcHhjaGcgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHhiMSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUT0RPOiBjbXB4Y2hnICovCisgLyogIDB4YjIgKi8geDg2ZW11T3AyX2xzc19SX0lNTSwKKyAvKiAgMHhiMyAqLyB4ODZlbXVPcDJfYnRyX1IsCisgLyogIDB4YjQgKi8geDg2ZW11T3AyX2xmc19SX0lNTSwKK0BAIC0yODc0LDkgKzI5MzksMTAgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHhiZCAqLyB4ODZlbXVPcDJfYnNyLAorIC8qICAweGJlICovIHg4NmVtdU9wMl9tb3ZzeF9ieXRlX1JfUk0sCisgLyogIDB4YmYgKi8geDg2ZW11T3AyX21vdnN4X3dvcmRfUl9STSwKKy0KKy0vKiAgMHhjMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIFRPRE86IHhhZGQgKi8KKy0vKiAgMHhjMSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIFRPRE86IHhhZGQgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHhjMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUT0RPOiB4YWRkICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4YzEgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVE9ETzogeGFkZCAqLworIC8qICAweGMyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGMzICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGM0ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorQEAgLTI4OTEsNyArMjk1Nyw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4Y2QgKi8geDg2ZW11T3AyX2Jzd2FwLAorIC8qICAweGNlICovIHg4NmVtdU9wMl9ic3dhcCwKKyAvKiAgMHhjZiAqLyB4ODZlbXVPcDJfYnN3YXAsCistCisgLyogIDB4ZDAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4ZDEgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4ZDIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCitAQCAtMjkwOCw3ICsyOTczLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHhkZCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhkZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhkZiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0KKyAvKiAgMHhlMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhlMSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhlMiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKK0BAIC0yOTI1LDcgKzI5ODksNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiMlsyNTZdKSh1OCkgPQorIC8qICAweGVkICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGVlICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGVmICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorLQorIC8qICAweGYwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGYxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGYyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3ByaW1fb3BzLmMgYi9saWJzL3g4NmVtdS9wcmltX29wcy5jCitpbmRleCBmZjE3YzNmLi4yNGY3NmI0IDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUvcHJpbV9vcHMuYworKysrIGIvbGlicy94ODZlbXUvcHJpbV9vcHMuYworQEAgLTEwMiwxOCArMTAyLDIzIEBACisgI2RlZmluZQlQUklNX09QU19OT19SRURFRklORV9BU00KKyAjaW5jbHVkZSAieDg2ZW11L3g4NmVtdWkuaCIKKyAKKysjaWYgZGVmaW5lZChfX0dOVUNfXykKKysjaWYgZGVmaW5lZCAoX19pMzg2X18pIHx8IGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9fQU1ENjRfXykgfHwgZGVmaW5lZChfX2FtZDY0X18pCisrI2luY2x1ZGUgIng4NmVtdS9wcmltX3g4Nl9nY2MuaCIKKysjZW5kaWYKKysjZW5kaWYKKysKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsIFZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorLXN0YXRpYyB1MzIgeDg2ZW11X3Bhcml0eV90YWJbOF0gPQorLXsKKy0JMHg5NjY5Njk5NiwKKy0JMHg2OTk2OTY2OSwKKy0JMHg2OTk2OTY2OSwKKy0JMHg5NjY5Njk5NiwKKy0JMHg2OTk2OTY2OSwKKy0JMHg5NjY5Njk5NiwKKy0JMHg5NjY5Njk5NiwKKy0JMHg2OTk2OTY2OSwKKytzdGF0aWMgdTMyIHg4NmVtdV9wYXJpdHlfdGFiWzhdID0geworKyAgICAweDk2Njk2OTk2LAorKyAgICAweDY5OTY5NjY5LAorKyAgICAweDY5OTY5NjY5LAorKyAgICAweDk2Njk2OTk2LAorKyAgICAweDY5OTY5NjY5LAorKyAgICAweDk2Njk2OTk2LAorKyAgICAweDk2Njk2OTk2LAorKyAgICAweDY5OTY5NjY5LAorIH07CisgCisgI2RlZmluZSBQQVJJVFkoeCkgICAoKCh4ODZlbXVfcGFyaXR5X3RhYlsoeCkgLyAzMl0gPj4gKCh4KSAlIDMyKSkgJiAxKSA9PSAwKQorQEAgLTEyNSw4OCArMTMwLDk2IEBAIHN0YXRpYyB1MzIgeDg2ZW11X3Bhcml0eV90YWJbOF0gPQorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQUFBIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgYWFhX3dvcmQodTE2IGQpCisrdTE2CisrYWFhX3dvcmQodTE2IGQpCisgeworLQl1MTYJcmVzOworLQlpZiAoKGQgJiAweGYpID4gMHg5IHx8IEFDQ0VTU19GTEFHKEZfQUYpKSB7CistCQlkICs9IDB4NjsKKy0JCWQgKz0gMHgxMDA7CistCQlTRVRfRkxBRyhGX0FGKTsKKy0JCVNFVF9GTEFHKEZfQ0YpOworLQl9IGVsc2UgeworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9BRik7CistCX0KKy0JcmVzID0gKHUxNikoZCAmIDB4RkYwRik7CistCUNMRUFSX0ZMQUcoRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgdTE2IHJlczsKKysKKysgICAgaWYgKChkICYgMHhmKSA+IDB4OSB8fCBBQ0NFU1NfRkxBRyhGX0FGKSkgeworKyAgICAgICAgZCArPSAweDY7CisrICAgICAgICBkICs9IDB4MTAwOworKyAgICAgICAgU0VUX0ZMQUcoRl9BRik7CisrICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICB9CisrICAgIHJlcyA9ICh1MTYpIChkICYgMHhGRjBGKTsKKysgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQUFBIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgYWFzX3dvcmQodTE2IGQpCisrdTE2CisrYWFzX3dvcmQodTE2IGQpCisgeworLQl1MTYJcmVzOworLQlpZiAoKGQgJiAweGYpID4gMHg5IHx8IEFDQ0VTU19GTEFHKEZfQUYpKSB7CistCQlkIC09IDB4NjsKKy0JCWQgLT0gMHgxMDA7CistCQlTRVRfRkxBRyhGX0FGKTsKKy0JCVNFVF9GTEFHKEZfQ0YpOworLQl9IGVsc2UgeworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9BRik7CistCX0KKy0JcmVzID0gKHUxNikoZCAmIDB4RkYwRik7CistCUNMRUFSX0ZMQUcoRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgdTE2IHJlczsKKysKKysgICAgaWYgKChkICYgMHhmKSA+IDB4OSB8fCBBQ0NFU1NfRkxBRyhGX0FGKSkgeworKyAgICAgICAgZCAtPSAweDY7CisrICAgICAgICBkIC09IDB4MTAwOworKyAgICAgICAgU0VUX0ZMQUcoRl9BRik7CisrICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICB9CisrICAgIHJlcyA9ICh1MTYpIChkICYgMHhGRjBGKTsKKysgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQUFEIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgYWFkX3dvcmQodTE2IGQpCisrdTE2CisrYWFkX3dvcmQodTE2IGQpCisgeworLQl1MTYgbDsKKy0JdTggaGIsIGxiOworKyAgICB1MTYgbDsKKysgICAgdTggaGIsIGxiOworIAorLQloYiA9ICh1OCkoKGQgPj4gOCkgJiAweGZmKTsKKy0JbGIgPSAodTgpKChkICYgMHhmZikpOworLQlsID0gKHUxNikoKGxiICsgMTAgKiBoYikgJiAweEZGKTsKKysgICAgaGIgPSAodTgpICgoZCA+PiA4KSAmIDB4ZmYpOworKyAgICBsYiA9ICh1OCkgKChkICYgMHhmZikpOworKyAgICBsID0gKHUxNikgKChsYiArIDEwICogaGIpICYgMHhGRik7CisgCistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGwgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcobCA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKGwgJiAweGZmKSwgRl9QRik7CistCXJldHVybiBsOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhsICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGwgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShsICYgMHhmZiksIEZfUEYpOworKyAgICByZXR1cm4gbDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIEFBTSBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IGFhbV93b3JkKHU4IGQpCisrdTE2CisrYWFtX3dvcmQodTggZCkKKyB7CisgICAgIHUxNiBoLCBsOworIAorLQloID0gKHUxNikoZCAvIDEwKTsKKy0JbCA9ICh1MTYpKGQgJSAxMCk7CistCWwgfD0gKHUxNikoaCA8PCA4KTsKKysgICAgaCA9ICh1MTYpIChkIC8gMTApOworKyAgICBsID0gKHUxNikgKGQgJSAxMCk7CisrICAgIGwgfD0gKHUxNikgKGggPDwgOCk7CisgCistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGwgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcobCA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKGwgJiAweGZmKSwgRl9QRik7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9BRik7CisrICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGwgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcobCA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKGwgJiAweGZmKSwgRl9QRik7CisgICAgIHJldHVybiBsOworIH0KKyAKK0BAIC0yMTQsMTU1ICsyMjcsMTYxIEBAIHUxNiBhYW1fd29yZCh1OCBkKQorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQURDIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBhZGNfYnl0ZSh1OCBkLCB1OCBzKQorK3U4CisrYWRjX2J5dGUodTggZCwgdTggcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBjYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgY2M7CisgCistCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKy0JCXJlcyA9IDEgKyBkICsgczsKKy0JZWxzZQorLQkJcmVzID0gZCArIHM7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKysgICAgICAgIHJlcyA9IDEgKyBkICsgczsKKysgICAgZWxzZQorKyAgICAgICAgcmVzID0gZCArIHM7CisgCistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MTAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxMDAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCistCWNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiA2KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1OClyZXM7CisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKysgICAgY2MgPSAocyAmIGQpIHwgKCh+cmVzKSAmIChzIHwgZCkpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDYpLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBREMgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBhZGNfd29yZCh1MTYgZCwgdTE2IHMpCisrdTE2CisrYWRjX3dvcmQodTE2IGQsIHUxNiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGNjOworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiBjYzsKKyAKKy0JaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQorLQkJcmVzID0gMSArIGQgKyBzOworLQllbHNlCistCQlyZXMgPSBkICsgczsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQorKyAgICAgICAgcmVzID0gMSArIGQgKyBzOworKyAgICBlbHNlCisrICAgICAgICByZXMgPSBkICsgczsKKyAKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxMDAwMCwgRl9DRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEwMDAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKy0JY2MgPSAocyAmIGQpIHwgKCh+cmVzKSAmIChzIHwgZCkpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAxNCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBREMgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBhZGNfbG9uZyh1MzIgZCwgdTMyIHMpCisrdTMyCisrYWRjX2xvbmcodTMyIGQsIHUzMiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIGxvOwkvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGhpOworLQlyZWdpc3RlciB1MzIgcmVzOworLQlyZWdpc3RlciB1MzIgY2M7CisrICAgIHJlZ2lzdGVyIHUzMiBsbzsgICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGhpOworKyAgICByZWdpc3RlciB1MzIgcmVzOworKyAgICByZWdpc3RlciB1MzIgY2M7CisgCistCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkgeworLQkJbG8gPSAxICsgKGQgJiAweEZGRkYpICsgKHMgJiAweEZGRkYpOworLQkJcmVzID0gMSArIGQgKyBzOworLQkJfQorLQllbHNlIHsKKy0JCWxvID0gKGQgJiAweEZGRkYpICsgKHMgJiAweEZGRkYpOworLQkJcmVzID0gZCArIHM7CistCQl9CistCWhpID0gKGxvID4+IDE2KSArIChkID4+IDE2KSArIChzID4+IDE2KTsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7CisrICAgICAgICBsbyA9IDEgKyAoZCAmIDB4RkZGRikgKyAocyAmIDB4RkZGRik7CisrICAgICAgICByZXMgPSAxICsgZCArIHM7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBsbyA9IChkICYgMHhGRkZGKSArIChzICYgMHhGRkZGKTsKKysgICAgICAgIHJlcyA9IGQgKyBzOworKyAgICB9CisrICAgIGhpID0gKGxvID4+IDE2KSArIChkID4+IDE2KSArIChzID4+IDE2KTsKKyAKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoaGkgJiAweDEwMDAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoaGkgJiAweDEwMDAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworLQljYyA9IChzICYgZCkgfCAoKH5yZXMpICYgKHMgfCBkKSk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gMzApLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAzMCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBREQgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IGFkZF9ieXRlKHU4IGQsIHU4IHMpCisrdTgKKythZGRfYnl0ZSh1OCBkLCB1OCBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGNjOworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiBjYzsKKyAKKy0JcmVzID0gZCArIHM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MTAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVzID0gZCArIHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MTAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworLQljYyA9IChzICYgZCkgfCAoKH5yZXMpICYgKHMgfCBkKSk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gNiksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CistCXJldHVybiAodTgpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiA2KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQUREIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgYWRkX3dvcmQodTE2IGQsIHUxNiBzKQorK3UxNgorK2FkZF93b3JkKHUxNiBkLCB1MTYgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBjYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgY2M7CisgCistCXJlcyA9IGQgKyBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEwMDAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIHJlcyA9IGQgKyBzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEwMDAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKy0JY2MgPSAocyAmIGQpIHwgKCh+cmVzKSAmIChzIHwgZCkpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAxNCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBREQgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBhZGRfbG9uZyh1MzIgZCwgdTMyIHMpCisrdTMyCisrYWRkX2xvbmcodTMyIGQsIHUzMiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIGxvOwkvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGhpOworLQlyZWdpc3RlciB1MzIgcmVzOworLQlyZWdpc3RlciB1MzIgY2M7CisrICAgIHJlZ2lzdGVyIHUzMiBsbzsgICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGhpOworKyAgICByZWdpc3RlciB1MzIgcmVzOworKyAgICByZWdpc3RlciB1MzIgY2M7CisgCistCWxvID0gKGQgJiAweEZGRkYpICsgKHMgJiAweEZGRkYpOworLQlyZXMgPSBkICsgczsKKy0JaGkgPSAobG8gPj4gMTYpICsgKGQgPj4gMTYpICsgKHMgPj4gMTYpOworKyAgICBsbyA9IChkICYgMHhGRkZGKSArIChzICYgMHhGRkZGKTsKKysgICAgcmVzID0gZCArIHM7CisrICAgIGhpID0gKGxvID4+IDE2KSArIChkID4+IDE2KSArIChzID4+IDE2KTsKKyAKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoaGkgJiAweDEwMDAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoaGkgJiAweDEwMDAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKyAgICAgLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworICAgICBjYyA9IChzICYgZCkgfCAoKH5yZXMpICYgKHMgfCBkKSk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gMzApLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDMwKSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKyAKKyAgICAgcmV0dXJuIHJlczsKKyB9CitAQCAtMzcxLDM5ICszOTAsNDEgQEAgdTMyIGFkZF9sb25nKHUzMiBkLCB1MzIgcykKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIEFORCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggYW5kX2J5dGUodTggZCwgdTggcykKKyt1OAorK2FuZF9ieXRlKHU4IGQsIHU4IHMpCisgeworLQlyZWdpc3RlciB1OCByZXM7ICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1OCByZXM7ICAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgCistCXJlcyA9IGQgJiBzOworKyAgICByZXMgPSBkICYgczsKKyAKKy0JLyogc2V0IHRoZSBmbGFncyAgKi8KKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyksIEZfUEYpOworLQlyZXR1cm4gcmVzOworKyAgICAvKiBzZXQgdGhlIGZsYWdzICAqLworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzKSwgRl9QRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBTkQgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBhbmRfd29yZCh1MTYgZCwgdTE2IHMpCisrdTE2CisrYW5kX3dvcmQodTE2IGQsIHUxNiBzKQorIHsKKy0gICAgcmVnaXN0ZXIgdTE2IHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTE2IHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworIAorICAgICByZXMgPSBkICYgczsKKyAKKyAgICAgLyogc2V0IHRoZSBmbGFncyAgKi8KKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgICAgIHJldHVybiByZXM7CisgfQorIAorQEAgLTQxMSw0MzMgKzQzMiw0NTYgQEAgdTE2IGFuZF93b3JkKHUxNiBkLCB1MTYgcykKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIEFORCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIGFuZF9sb25nKHUzMiBkLCB1MzIgcykKKyt1MzIKKythbmRfbG9uZyh1MzIgZCwgdTMyIHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgCistCXJlcyA9IGQgJiBzOworKyAgICByZXMgPSBkICYgczsKKyAKKy0JLyogc2V0IHRoZSBmbGFncyAgKi8KKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgLyogc2V0IHRoZSBmbGFncyAgKi8KKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIENNUCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggY21wX2J5dGUodTggZCwgdTggcykKKyt1OAorK2NtcF9ieXRlKHU4IGQsIHU4IHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgYmM7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorLQlyZXMgPSBkIC0gczsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVzID0gZCAtIHM7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCistCWJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDYpLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gZDsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKysgICAgYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gNiksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiBkOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQ01QIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgY21wX3dvcmQodTE2IGQsIHUxNiBzKQorK3UxNgorK2NtcF93b3JkKHUxNiBkLCB1MTYgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBiYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgYmM7CisgCistCXJlcyA9IGQgLSBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVzID0gZCAtIHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworICAgICBiYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIGQ7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAxNCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiBkOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQ01QIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgY21wX2xvbmcodTMyIGQsIHUzMiBzKQorK3UzMgorK2NtcF9sb25nKHUzMiBkLCB1MzIgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBiYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgYmM7CisgCistCXJlcyA9IGQgLSBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXMgPSBkIC0gczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKy0JYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwMDAwMCwgRl9DRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gZDsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKysgICAgYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwMDAwMCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIERBQSBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggZGFhX2J5dGUodTggZCkKKyt1OAorK2RhYV9ieXRlKHU4IGQpCisgeworLQl1MzIgcmVzID0gZDsKKy0JaWYgKChkICYgMHhmKSA+IDkgfHwgQUNDRVNTX0ZMQUcoRl9BRikpIHsKKy0JCXJlcyArPSA2OworLQkJU0VUX0ZMQUcoRl9BRik7CistCX0KKy0JaWYgKHJlcyA+IDB4OUYgfHwgQUNDRVNTX0ZMQUcoRl9DRikpIHsKKy0JCXJlcyArPSAweDYwOworLQkJU0VUX0ZMQUcoRl9DRik7CistCX0KKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweEZGKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuICh1OClyZXM7CisrICAgIHUzMiByZXMgPSBkOworKworKyAgICBpZiAoKGQgJiAweGYpID4gOSB8fCBBQ0NFU1NfRkxBRyhGX0FGKSkgeworKyAgICAgICAgcmVzICs9IDY7CisrICAgICAgICBTRVRfRkxBRyhGX0FGKTsKKysgICAgfQorKyAgICBpZiAocmVzID4gMHg5RiB8fCBBQ0NFU1NfRkxBRyhGX0NGKSkgeworKyAgICAgICAgcmVzICs9IDB4NjA7CisrICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgfQorKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4RkYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBEQVMgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IGRhc19ieXRlKHU4IGQpCisrdTgKKytkYXNfYnl0ZSh1OCBkKQorIHsKKy0JaWYgKChkICYgMHhmKSA+IDkgfHwgQUNDRVNTX0ZMQUcoRl9BRikpIHsKKy0JCWQgLT0gNjsKKy0JCVNFVF9GTEFHKEZfQUYpOworLQl9CistCWlmIChkID4gMHg5RiB8fCBBQ0NFU1NfRkxBRyhGX0NGKSkgeworLQkJZCAtPSAweDYwOworLQkJU0VUX0ZMQUcoRl9DRik7CistCX0KKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoZCAmIDB4ODAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhkID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkoZCAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuIGQ7CisrICAgIGlmICgoZCAmIDB4ZikgPiA5IHx8IEFDQ0VTU19GTEFHKEZfQUYpKSB7CisrICAgICAgICBkIC09IDY7CisrICAgICAgICBTRVRfRkxBRyhGX0FGKTsKKysgICAgfQorKyAgICBpZiAoZCA+IDB4OUYgfHwgQUNDRVNTX0ZMQUcoRl9DRikpIHsKKysgICAgICAgIGQgLT0gMHg2MDsKKysgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworKyAgICB9CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGQgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoZCA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKGQgJiAweGZmKSwgRl9QRik7CisrICAgIHJldHVybiBkOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgREVDIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBkZWNfYnl0ZSh1OCBkKQorK3U4CisrZGVjX2J5dGUodTggZCkKKyB7CistICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorICAgICByZXMgPSBkIC0gMTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKy0JLyogYmFzZWQgb24gc3ViX2J5dGUsIHVzZXMgcz09MS4gICovCistCWJjID0gKHJlcyAmICh+ZCB8IDEpKSB8ICh+ZCAmIDEpOworLQkvKiBjYXJyeSBmbGFnIHVuY2hhbmdlZCAqLworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDYpLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gKHU4KXJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKysgICAgLyogYmFzZWQgb24gc3ViX2J5dGUsIHVzZXMgcz09MS4gICovCisrICAgIGJjID0gKHJlcyAmICh+ZCB8IDEpKSB8ICh+ZCAmIDEpOworKyAgICAvKiBjYXJyeSBmbGFnIHVuY2hhbmdlZCAqLworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDYpLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBERUMgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBkZWNfd29yZCh1MTYgZCkKKyt1MTYKKytkZWNfd29yZCh1MTYgZCkKKyB7CistICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorICAgICByZXMgPSBkIC0gMTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorICAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworICAgICAvKiBiYXNlZCBvbiB0aGUgc3ViX2J5dGUgcm91dGluZSwgd2l0aCBzPT0xICovCisgICAgIGJjID0gKHJlcyAmICh+ZCB8IDEpKSB8ICh+ZCAmIDEpOworICAgICAvKiBjYXJyeSBmbGFnIHVuY2hhbmdlZCAqLworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIERFQyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIGRlY19sb25nKHUzMiBkKQorK3UzMgorK2RlY19sb25nKHUzMiBkKQorIHsKKy0gICAgcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworICAgICByZWdpc3RlciB1MzIgYmM7CisgCisgICAgIHJlcyA9IGQgLSAxOworIAorLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorICAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworLQliYyA9IChyZXMgJiAofmQgfCAxKSkgfCAofmQgJiAxKTsKKy0JLyogY2FycnkgZmxhZyB1bmNoYW5nZWQgKi8KKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAzMCksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CistCXJldHVybiByZXM7CisrICAgIGJjID0gKHJlcyAmICh+ZCB8IDEpKSB8ICh+ZCAmIDEpOworKyAgICAvKiBjYXJyeSBmbGFnIHVuY2hhbmdlZCAqLworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDMwKSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElOQyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggaW5jX2J5dGUodTggZCkKKyt1OAorK2luY19ieXRlKHU4IGQpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgY2M7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGNjOworIAorLQlyZXMgPSBkICsgMTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVzID0gZCArIDE7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKy0JY2MgPSAoKDEgJiBkKSB8ICh+cmVzKSkgJiAoMSB8IGQpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDYpLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gKHU4KXJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworKyAgICBjYyA9ICgoMSAmIGQpIHwgKH5yZXMpKSAmICgxIHwgZCk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gNiksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiAodTgpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElOQyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IGluY193b3JkKHUxNiBkKQorK3UxNgorK2luY193b3JkKHUxNiBkKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGNjOworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiBjYzsKKyAKKy0JcmVzID0gZCArIDE7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXMgPSBkICsgMTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKy0JY2MgPSAoMSAmIGQpIHwgKCh+cmVzKSAmICgxIHwgZCkpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKDEgJiBkKSB8ICgofnJlcykgJiAoMSB8IGQpKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAxNCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBJTkMgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBpbmNfbG9uZyh1MzIgZCkKKyt1MzIKKytpbmNfbG9uZyh1MzIgZCkKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBjYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgY2M7CisgCistCXJlcyA9IGQgKyAxOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXMgPSBkICsgMTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworLQljYyA9ICgxICYgZCkgfCAoKH5yZXMpICYgKDEgfCBkKSk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gMzApLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKDEgJiBkKSB8ICgofnJlcykgJiAoMSB8IGQpKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAzMCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggb3JfYnl0ZSh1OCBkLCB1OCBzKQorK3U4Cisrb3JfYnl0ZSh1OCBkLCB1OCBzKQorIHsKKy0JcmVnaXN0ZXIgdTggcmVzOyAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTggcmVzOyAgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworIAorLQlyZXMgPSBkIHwgczsKKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyksIEZfUEYpOworLQlyZXR1cm4gcmVzOworKyAgICByZXMgPSBkIHwgczsKKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyksIEZfUEYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgT1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBvcl93b3JkKHUxNiBkLCB1MTYgcykKKyt1MTYKKytvcl93b3JkKHUxNiBkLCB1MTYgcykKKyB7CistCXJlZ2lzdGVyIHUxNiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUxNiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAKKy0JcmVzID0gZCB8IHM7CistCS8qIHNldCB0aGUgY2FycnkgZmxhZyB0byBiZSBiaXQgOCAqLworLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDTEVBUl9GTEFHKEZfQ0YpOworLQlDTEVBUl9GTEFHKEZfQUYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCXJldHVybiByZXM7CisrICAgIHJlcyA9IGQgfCBzOworKyAgICAvKiBzZXQgdGhlIGNhcnJ5IGZsYWcgdG8gYmUgYml0IDggKi8KKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgT1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBvcl9sb25nKHUzMiBkLCB1MzIgcykKKyt1MzIKKytvcl9sb25nKHUzMiBkLCB1MzIgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAKKy0JcmVzID0gZCB8IHM7CisrICAgIHJlcyA9IGQgfCBzOworIAorLQkvKiBzZXQgdGhlIGNhcnJ5IGZsYWcgdG8gYmUgYml0IDggKi8KKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgLyogc2V0IHRoZSBjYXJyeSBmbGFnIHRvIGJlIGJpdCA4ICovCisrICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9BRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggbmVnX2J5dGUodTggcykKKyt1OAorK25lZ19ieXRlKHU4IHMpCisgeworICAgICByZWdpc3RlciB1OCByZXM7CisgICAgIHJlZ2lzdGVyIHU4IGJjOworIAorLQlDT05ESVRJT05BTF9TRVRfRkxBRyhzICE9IDAsIEZfQ0YpOworLQlyZXMgPSAodTgpLXM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMpLCBGX1BGKTsKKy0JLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4gLS0tIG1vZGlmaWVkIHN1Y2ggdGhhdCBkPTAuCistCSAgIHN1YnN0aXR1dGlpbmcgZD0wIGludG8gICAgIGJjPSByZXMmKH5kfHMpfCh+ZCZzKTsKKy0JICAgKHRoZSBvbmUgdXNlZCBmb3Igc3ViKSBhbmQgc2ltcGxpZnlpbmcsIHNpbmNlIH5kPTB4ZmYuLi4sCistCSAgIH5kfHMgPT0gMHhmZmZmLi4uLCBhbmQgcmVzJjB4ZmZmLi4uID09IHJlcy4gIFNpbWlsYXJseQorLQkgICB+ZCZzID09IHMuICBTbyB0aGUgc2ltcGxpZmllZCByZXN1bHQgaXM6ICovCistCWJjID0gcmVzIHwgczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiA2KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocyAhPSAwLCBGX0NGKTsKKysgICAgcmVzID0gKHU4KSAtIHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMpLCBGX1BGKTsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4gLS0tIG1vZGlmaWVkIHN1Y2ggdGhhdCBkPTAuCisrICAgICAgIHN1YnN0aXR1dGlpbmcgZD0wIGludG8gICAgIGJjPSByZXMmKH5kfHMpfCh+ZCZzKTsKKysgICAgICAgKHRoZSBvbmUgdXNlZCBmb3Igc3ViKSBhbmQgc2ltcGxpZnlpbmcsIHNpbmNlIH5kPTB4ZmYuLi4sCisrICAgICAgIH5kfHMgPT0gMHhmZmZmLi4uLCBhbmQgcmVzJjB4ZmZmLi4uID09IHJlcy4gIFNpbWlsYXJseQorKyAgICAgICB+ZCZzID09IHMuICBTbyB0aGUgc2ltcGxpZmllZCByZXN1bHQgaXM6ICovCisrICAgIGJjID0gcmVzIHwgczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiA2KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIE9SIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgbmVnX3dvcmQodTE2IHMpCisteworLQlyZWdpc3RlciB1MTYgcmVzOworLQlyZWdpc3RlciB1MTYgYmM7CistCistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHMgIT0gMCwgRl9DRik7CistCXJlcyA9ICh1MTYpLXM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbiAtLS0gbW9kaWZpZWQgc3VjaCB0aGF0IGQ9MC4KKy0JICAgc3Vic3RpdHV0aWluZyBkPTAgaW50byAgICAgYmM9IHJlcyYofmR8cyl8KH5kJnMpOworLQkgICAodGhlIG9uZSB1c2VkIGZvciBzdWIpIGFuZCBzaW1wbGlmeWluZywgc2luY2UgfmQ9MHhmZi4uLiwKKy0JICAgfmR8cyA9PSAweGZmZmYuLi4sIGFuZCByZXMmMHhmZmYuLi4gPT0gcmVzLiAgU2ltaWxhcmx5CistCSAgIH5kJnMgPT0gcy4gIFNvIHRoZSBzaW1wbGlmaWVkIHJlc3VsdCBpczogKi8KKy0JYmMgPSByZXMgfCBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIHJlczsKKyt1MTYKKytuZWdfd29yZCh1MTYgcykKKyt7CisrICAgIHJlZ2lzdGVyIHUxNiByZXM7CisrICAgIHJlZ2lzdGVyIHUxNiBiYzsKKysKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocyAhPSAwLCBGX0NGKTsKKysgICAgcmVzID0gKHUxNikgLSBzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4gLS0tIG1vZGlmaWVkIHN1Y2ggdGhhdCBkPTAuCisrICAgICAgIHN1YnN0aXR1dGlpbmcgZD0wIGludG8gICAgIGJjPSByZXMmKH5kfHMpfCh+ZCZzKTsKKysgICAgICAgKHRoZSBvbmUgdXNlZCBmb3Igc3ViKSBhbmQgc2ltcGxpZnlpbmcsIHNpbmNlIH5kPTB4ZmYuLi4sCisrICAgICAgIH5kfHMgPT0gMHhmZmZmLi4uLCBhbmQgcmVzJjB4ZmZmLi4uID09IHJlcy4gIFNpbWlsYXJseQorKyAgICAgICB+ZCZzID09IHMuICBTbyB0aGUgc2ltcGxpZmllZCByZXN1bHQgaXM6ICovCisrICAgIGJjID0gcmVzIHwgczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAxNCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIG5lZ19sb25nKHUzMiBzKQorK3UzMgorK25lZ19sb25nKHUzMiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsKKy0JcmVnaXN0ZXIgdTMyIGJjOworLQorLQlDT05ESVRJT05BTF9TRVRfRkxBRyhzICE9IDAsIEZfQ0YpOworLQlyZXMgPSAodTMyKS1zOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZWdpc3RlciB1MzIgcmVzOworKyAgICByZWdpc3RlciB1MzIgYmM7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluIC0tLSBtb2RpZmllZCBzdWNoIHRoYXQgZD0wLgorLQkgICBzdWJzdGl0dXRpaW5nIGQ9MCBpbnRvICAgICBiYz0gcmVzJih+ZHxzKXwofmQmcyk7CistCSAgICh0aGUgb25lIHVzZWQgZm9yIHN1YikgYW5kIHNpbXBsaWZ5aW5nLCBzaW5jZSB+ZD0weGZmLi4uLAorLQkgICB+ZHxzID09IDB4ZmZmZi4uLiwgYW5kIHJlcyYweGZmZi4uLiA9PSByZXMuICBTaW1pbGFybHkKKy0JICAgfmQmcyA9PSBzLiAgU28gdGhlIHNpbXBsaWZpZWQgcmVzdWx0IGlzOiAqLworLQliYyA9IHJlcyB8IHM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gcmVzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzICE9IDAsIEZfQ0YpOworKyAgICByZXMgPSAodTMyKSAtIHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrCisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluIC0tLSBtb2RpZmllZCBzdWNoIHRoYXQgZD0wLgorKyAgICAgICBzdWJzdGl0dXRpaW5nIGQ9MCBpbnRvICAgICBiYz0gcmVzJih+ZHxzKXwofmQmcyk7CisrICAgICAgICh0aGUgb25lIHVzZWQgZm9yIHN1YikgYW5kIHNpbXBsaWZ5aW5nLCBzaW5jZSB+ZD0weGZmLi4uLAorKyAgICAgICB+ZHxzID09IDB4ZmZmZi4uLiwgYW5kIHJlcyYweGZmZi4uLiA9PSByZXMuICBTaW1pbGFybHkKKysgICAgICAgfmQmcyA9PSBzLiAgU28gdGhlIHNpbXBsaWZpZWQgcmVzdWx0IGlzOiAqLworKyAgICBiYyA9IHJlcyB8IHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgTk9UIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBub3RfYnl0ZSh1OCBzKQorK3U4Cisrbm90X2J5dGUodTggcykKKyB7CistCXJldHVybiB+czsKKysgICAgcmV0dXJuIH5zOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgTk9UIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgbm90X3dvcmQodTE2IHMpCisrdTE2Cisrbm90X3dvcmQodTE2IHMpCisgeworLQlyZXR1cm4gfnM7CisrICAgIHJldHVybiB+czsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIE5PVCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIG5vdF9sb25nKHUzMiBzKQorK3UzMgorK25vdF9sb25nKHUzMiBzKQorIHsKKy0JcmV0dXJuIH5zOworKyAgICByZXR1cm4gfnM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBSQ0wgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IHJjbF9ieXRlKHU4IGQsIHU4IHMpCisrdTgKKytyY2xfYnl0ZSh1OCBkLCB1OCBzKQorIHsKKyAgICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IHJlcywgY250LCBtYXNrLCBjZjsKKyAKKyAgICAgLyogcyBpcyB0aGUgcm90YXRlIGRpc3RhbmNlLiAgSXQgdmFyaWVzIGZyb20gMCAtIDguICovCistCS8qIGhhdmUKKysgICAgLyogaGF2ZQorIAorICAgICAgICBDRiAgQl83IEJfNiBCXzUgQl80IEJfMyBCXzIgQl8xIEJfMCAKKyAKK0BAIC04NjEsOSArOTA1LDkgQEAgdTggcmNsX2J5dGUodTggZCwgdTggcykKKyAgICAgICAgMikgQl8oNykgLi4gQl8obikgIDwtICBiXyg4LShuKzEpKSAuLiBiXzAKKyAgICAgICAgMykgQl8obi0xKSA8LSBjZgorICAgICAgICA0KSBCXyhuLTIpIC4uIEJfMCA8LSAgYl83IC4uIGJfKDgtKG4tMSkpCistCSAqLworLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSA5KSAhPSAwKSB7CisrICAgICAqLworKyAgICByZXMgPSBkOworKyAgICBpZiAoKGNudCA9IHMgJSA5KSAhPSAwKSB7CisgICAgICAgICAvKiBleHRyYWN0IHRoZSBuZXcgQ0FSUlkgRkxBRy4gKi8KKyAgICAgICAgIC8qIENGIDwtICBiXyg4LW4pICAgICAgICAgICAgICovCisgICAgICAgICBjZiA9IChkID4+ICg4IC0gY250KSkgJiAweDE7CitAQCAtODcyLDcgKzkxNiw3IEBAIHU4IHJjbF9ieXRlKHU4IGQsIHU4IHMpCisgICAgICAgICAgICBpbnRvIHRoZSByYW5nZSBCXzcgLi4gQl9jbnQgKi8KKyAgICAgICAgIC8qIEJfKDcpIC4uIEJfKG4pICA8LSAgYl8oOC0obisxKSkgLi4gYl8wICAqLworICAgICAgICAgLyogbm90ZSB0aGF0IHRoZSByaWdodCBoYW5kIHNpZGUgZG9uZSBieSB0aGUgbWFzayAqLworLQkJcmVzID0gKGQgPDwgY250KSAmIDB4ZmY7CisrICAgICAgICByZXMgPSAoZCA8PCBjbnQpICYgMHhmZjsKKyAKKyAgICAgICAgIC8qIG5vdyB0aGUgaGlnaCBzdHVmZiB3aGljaCByb3RhdGVkIGFyb3VuZCAKKyAgICAgICAgICAgIGludG8gdGhlIHBvc2l0aW9ucyBCX2NudC0yIC4uIEJfMCAqLworQEAgLTg4NCw4MSArOTI4LDgxIEBAIHU4IHJjbF9ieXRlKHU4IGQsIHU4IHMpCisgICAgICAgICByZXMgfD0gKGQgPj4gKDkgLSBjbnQpKSAmIG1hc2s7CisgCisgICAgICAgICAvKiBpZiB0aGUgY2FycnkgZmxhZyB3YXMgc2V0LCBvciBpdCBpbi4gICovCistCQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsgICAgIC8qIGNhcnJ5IGZsYWcgaXMgc2V0ICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsgICAgICAgIC8qIGNhcnJ5IGZsYWcgaXMgc2V0ICovCisgICAgICAgICAgICAgLyogIEJfKG4tMSkgPC0gY2YgKi8KKyAgICAgICAgICAgICByZXMgfD0gMSA8PCAoY250IC0gMSk7CisgICAgICAgICB9CisgICAgICAgICAvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBiYXNlZCBvbiB0aGUgdmFyaWFibGUgImNmIiAqLworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworICAgICAgICAgLyogT1ZFUkZMT1cgaXMgc2V0ICpJRkYqIGNudD09MSwgdGhlbiBpdCBpcyB0aGUgCisgICAgICAgICAgICB4b3Igb2YgQ0YgYW5kIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdC4gIEJsZWNjay4gKi8KKyAgICAgICAgIC8qIHBhcmVudGhlc2l6ZWQgdGhpcyBleHByZXNzaW9uIHNpbmNlIGl0IGFwcGVhcnMgdG8KKyAgICAgICAgICAgIGJlIGNhdXNpbmcgT0YgdG8gYmUgbWlzc2V0ICovCistICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjbnQgPT0gMSAmJiBYT1IyKGNmICsgKChyZXMgPj4gNikgJiAweDIpKSwKKy0JCQkJCQkJIEZfT0YpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY250ID09IDEgJiYgWE9SMihjZiArICgocmVzID4+IDYpICYgMHgyKSksIEZfT0YpOworIAorICAgICB9CistCXJldHVybiAodTgpcmVzOworKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBSQ0wgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiByY2xfd29yZCh1MTYgZCwgdTggcykKKyt1MTYKKytyY2xfd29yZCh1MTYgZCwgdTggcykKKyB7CistCXJlZ2lzdGVyIHVuc2lnbmVkIGludCByZXMsIGNudCwgbWFzaywgY2Y7CisrICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCByZXMsIGNudCwgbWFzaywgY2Y7CisgCistCXJlcyA9IGQ7CistCWlmICgoY250ID0gcyAlIDE3KSAhPSAwKSB7CistCQljZiA9IChkID4+ICgxNiAtIGNudCkpICYgMHgxOworLQkJcmVzID0gKGQgPDwgY250KSAmIDB4ZmZmZjsKKy0JCW1hc2sgPSAoMSA8PCAoY250IC0gMSkpIC0gMTsKKy0JCXJlcyB8PSAoZCA+PiAoMTcgLSBjbnQpKSAmIG1hc2s7CistCQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsKKy0JCQlyZXMgfD0gMSA8PCAoY250IC0gMSk7CistCQl9CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjbnQgPT0gMSAmJiBYT1IyKGNmICsgKChyZXMgPj4gMTQpICYgMHgyKSksCistCQkJCQkJCSBGX09GKTsKKy0JfQorLQlyZXR1cm4gKHUxNilyZXM7CisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDE3KSAhPSAwKSB7CisrICAgICAgICBjZiA9IChkID4+ICgxNiAtIGNudCkpICYgMHgxOworKyAgICAgICAgcmVzID0gKGQgPDwgY250KSAmIDB4ZmZmZjsKKysgICAgICAgIG1hc2sgPSAoMSA8PCAoY250IC0gMSkpIC0gMTsKKysgICAgICAgIHJlcyB8PSAoZCA+PiAoMTcgLSBjbnQpKSAmIG1hc2s7CisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsKKysgICAgICAgICAgICByZXMgfD0gMSA8PCAoY250IC0gMSk7CisrICAgICAgICB9CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjbnQgPT0gMSAmJiBYT1IyKGNmICsgKChyZXMgPj4gMTQpICYgMHgyKSksIEZfT0YpOworKyAgICB9CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBSQ0wgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiByY2xfbG9uZyh1MzIgZCwgdTggcykKKyt1MzIKKytyY2xfbG9uZyh1MzIgZCwgdTggcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXMsIGNudCwgbWFzaywgY2Y7CisrICAgIHJlZ2lzdGVyIHUzMiByZXMsIGNudCwgbWFzaywgY2Y7CisgCistCXJlcyA9IGQ7CistCWlmICgoY250ID0gcyAlIDMzKSAhPSAwKSB7CistCQljZiA9IChkID4+ICgzMiAtIGNudCkpICYgMHgxOworLQkJcmVzID0gKGQgPDwgY250KSAmIDB4ZmZmZmZmZmY7CistCQltYXNrID0gKDEgPDwgKGNudCAtIDEpKSAtIDE7CistCQlyZXMgfD0gKGQgPj4gKDMzIC0gY250KSkgJiBtYXNrOworLQkJaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworLQkJCXJlcyB8PSAxIDw8IChjbnQgLSAxKTsKKy0JCX0KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNudCA9PSAxICYmIFhPUjIoY2YgKyAoKHJlcyA+PiAzMCkgJiAweDIpKSwKKy0JCQkJCQkJIEZfT0YpOworLQl9CistCXJldHVybiByZXM7CisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDMzKSAhPSAwKSB7CisrICAgICAgICBjZiA9IChkID4+ICgzMiAtIGNudCkpICYgMHgxOworKyAgICAgICAgcmVzID0gKGQgPDwgY250KSAmIDB4ZmZmZmZmZmY7CisrICAgICAgICBtYXNrID0gKDEgPDwgKGNudCAtIDEpKSAtIDE7CisrICAgICAgICByZXMgfD0gKGQgPj4gKDMzIC0gY250KSkgJiBtYXNrOworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworKyAgICAgICAgICAgIHJlcyB8PSAxIDw8IChjbnQgLSAxKTsKKysgICAgICAgIH0KKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNudCA9PSAxICYmIFhPUjIoY2YgKyAoKHJlcyA+PiAzMCkgJiAweDIpKSwgRl9PRik7CisrICAgIH0KKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFJDUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggcmNyX2J5dGUodTggZCwgdTggcykKKyt1OAorK3Jjcl9ieXRlKHU4IGQsIHU4IHMpCisgeworLQl1MzIJcmVzLCBjbnQ7CistCXUzMgltYXNrLCBjZiwgb2NmID0gMDsKKysgICAgdTMyIHJlcywgY250OworKyAgICB1MzIgbWFzaywgY2YsIG9jZiA9IDA7CisgCistCS8qIHJvdGF0ZSByaWdodCB0aHJvdWdoIGNhcnJ5ICovCisrICAgIC8qIHJvdGF0ZSByaWdodCB0aHJvdWdoIGNhcnJ5ICovCisgICAgIC8qIAorICAgICAgICBzIGlzIHRoZSByb3RhdGUgZGlzdGFuY2UuICBJdCB2YXJpZXMgZnJvbSAwIC0gOC4KKyAgICAgICAgZCBpcyB0aGUgYnl0ZSBvYmplY3Qgcm90YXRlZC4gIAorQEAgLTk3OSw5ICsxMDIzLDkgQEAgdTggcmNyX2J5dGUodTggZCwgdTggcykKKyAgICAgICAgMikgQl8oOC0obisxKSkgLi4gQl8oMCkgIDwtICBiXyg3KSAuLiBiXyhuKQorICAgICAgICAzKSBCXyg4LW4pIDwtIGNmCisgICAgICAgIDQpIEJfKDcpIC4uIEJfKDgtKG4tMSkpIDwtICBiXyhuLTIpIC4uIGJfKDApCistCSAqLworLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSA5KSAhPSAwKSB7CisrICAgICAqLworKyAgICByZXMgPSBkOworKyAgICBpZiAoKGNudCA9IHMgJSA5KSAhPSAwKSB7CisgICAgICAgICAvKiBleHRyYWN0IHRoZSBuZXcgQ0FSUlkgRkxBRy4gKi8KKyAgICAgICAgIC8qIENGIDwtICBiXyhuLTEpICAgICAgICAgICAgICAqLworICAgICAgICAgaWYgKGNudCA9PSAxKSB7CitAQCAtOTkwLDExICsxMDM0LDEyIEBAIHU4IHJjcl9ieXRlKHU4IGQsIHU4IHMpCisgICAgICAgICAgICAgICAgMCBpZiBmbGFnIG5vdCBzZXQKKyAgICAgICAgICAgICAgICBub24temVybyBpZiBmbGFnIGlzIHNldC4KKyAgICAgICAgICAgICAgICBkb2luZyBhY2Nlc3NfZmxhZyguLikgIT0gMCBjYXN0cyB0aGF0IGludG8gZWl0aGVyIAorLQkJCSAgIDAuLjEgaW4gYW55IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmbGFncyByZWdpc3RlcgorKyAgICAgICAgICAgICAgIDAuLjEgaW4gYW55IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmbGFncyByZWdpc3RlcgorICAgICAgICAgICAgICAgIChpLmUuIHBhY2tlZCBiaXQgYXJyYXkgb3IgdW5wYWNrZWQuKQorICAgICAgICAgICAgICAqLworLQkJCW9jZiA9IEFDQ0VTU19GTEFHKEZfQ0YpICE9IDA7CistICAgICAgICB9IGVsc2UKKysgICAgICAgICAgICBvY2YgPSBBQ0NFU1NfRkxBRyhGX0NGKSAhPSAwOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorICAgICAgICAgICAgIGNmID0gKGQgPj4gKGNudCAtIDEpKSAmIDB4MTsKKyAKKyAgICAgICAgIC8qIEJfKDgtKG4rMSkpIC4uIEJfKDApICA8LSAgYl8oNykgLi4gYl9uICAqLworQEAgLTEwMTYsOTMgKzEwNjEsOTUgQEAgdTggcmNyX2J5dGUodTggZCwgdTggcykKKyAgICAgICAgIHJlcyB8PSAoZCA8PCAoOSAtIGNudCkpOworIAorICAgICAgICAgLyogaWYgdGhlIGNhcnJ5IGZsYWcgd2FzIHNldCwgb3IgaXQgaW4uICAqLworLQkJaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworICAgICAgICAgICAgIC8qICBCXyg4LW4pIDwtIGNmICovCisgICAgICAgICAgICAgcmVzIHw9IDEgPDwgKDggLSBjbnQpOworICAgICAgICAgfQorICAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgYmFzZWQgb24gdGhlIHZhcmlhYmxlICJjZiIgKi8KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKyAgICAgICAgIC8qIE9WRVJGTE9XIGlzIHNldCAqSUZGKiBjbnQ9PTEsIHRoZW4gaXQgaXMgdGhlIAorICAgICAgICAgICAgeG9yIG9mIENGIGFuZCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQuICBCbGVjY2suICovCisgICAgICAgICAvKiBwYXJlbnRoZXNpemVkLi4uICovCistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKG9jZiArICgoZCA+PiA2KSAmIDB4MikpLAorLQkJCQkJCQkJIEZfT0YpOworLQkJfQorLQl9CistCXJldHVybiAodTgpcmVzOworKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihvY2YgKyAoKGQgPj4gNikgJiAweDIpKSwgRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgUkNSIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgcmNyX3dvcmQodTE2IGQsIHU4IHMpCisrdTE2CisrcmNyX3dvcmQodTE2IGQsIHU4IHMpCisgeworLQl1MzIgcmVzLCBjbnQ7CistCXUzMgltYXNrLCBjZiwgb2NmID0gMDsKKysgICAgdTMyIHJlcywgY250OworKyAgICB1MzIgbWFzaywgY2YsIG9jZiA9IDA7CisgCistCS8qIHJvdGF0ZSByaWdodCB0aHJvdWdoIGNhcnJ5ICovCistCXJlcyA9IGQ7CistCWlmICgoY250ID0gcyAlIDE3KSAhPSAwKSB7CistCQlpZiAoY250ID09IDEpIHsKKy0JCQljZiA9IGQgJiAweDE7CistCQkJb2NmID0gQUNDRVNTX0ZMQUcoRl9DRikgIT0gMDsKKy0JCX0gZWxzZQorLQkJCWNmID0gKGQgPj4gKGNudCAtIDEpKSAmIDB4MTsKKy0JCW1hc2sgPSAoMSA8PCAoMTYgLSBjbnQpKSAtIDE7CistCQlyZXMgPSAoZCA+PiBjbnQpICYgbWFzazsKKy0JCXJlcyB8PSAoZCA8PCAoMTcgLSBjbnQpKTsKKy0JCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkgeworLQkJCXJlcyB8PSAxIDw8ICgxNiAtIGNudCk7CistCQl9CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKG9jZiArICgoZCA+PiAxNCkgJiAweDIpKSwKKy0JCQkJCQkJCSBGX09GKTsKKy0JCX0KKy0JfQorLQlyZXR1cm4gKHUxNilyZXM7CisrICAgIC8qIHJvdGF0ZSByaWdodCB0aHJvdWdoIGNhcnJ5ICovCisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDE3KSAhPSAwKSB7CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBjZiA9IGQgJiAweDE7CisrICAgICAgICAgICAgb2NmID0gQUNDRVNTX0ZMQUcoRl9DRikgIT0gMDsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBjZiA9IChkID4+IChjbnQgLSAxKSkgJiAweDE7CisrICAgICAgICBtYXNrID0gKDEgPDwgKDE2IC0gY250KSkgLSAxOworKyAgICAgICAgcmVzID0gKGQgPj4gY250KSAmIG1hc2s7CisrICAgICAgICByZXMgfD0gKGQgPDwgKDE3IC0gY250KSk7CisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsKKysgICAgICAgICAgICByZXMgfD0gMSA8PCAoMTYgLSBjbnQpOworKyAgICAgICAgfQorKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihvY2YgKyAoKGQgPj4gMTQpICYgMHgyKSksIEZfT0YpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBSQ1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiByY3JfbG9uZyh1MzIgZCwgdTggcykKKy17CistCXUzMiByZXMsIGNudDsKKy0JdTMyIG1hc2ssIGNmLCBvY2YgPSAwOworLQorLQkvKiByb3RhdGUgcmlnaHQgdGhyb3VnaCBjYXJyeSAqLworLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSAzMykgIT0gMCkgeworLQkJaWYgKGNudCA9PSAxKSB7CistCQkJY2YgPSBkICYgMHgxOworLQkJCW9jZiA9IEFDQ0VTU19GTEFHKEZfQ0YpICE9IDA7CistCQl9IGVsc2UKKy0JCQljZiA9IChkID4+IChjbnQgLSAxKSkgJiAweDE7CistCQltYXNrID0gKDEgPDwgKDMyIC0gY250KSkgLSAxOworLQkJcmVzID0gKGQgPj4gY250KSAmIG1hc2s7CistCQlpZiAoY250ICE9IDEpCistCQkJcmVzIHw9IChkIDw8ICgzMyAtIGNudCkpOworLQkJaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworLQkJCXJlcyB8PSAxIDw8ICgzMiAtIGNudCk7CistCQl9CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKG9jZiArICgoZCA+PiAzMCkgJiAweDIpKSwKKy0JCQkJCQkJCSBGX09GKTsKKy0JCX0KKy0JfQorLQlyZXR1cm4gcmVzOworK3UzMgorK3Jjcl9sb25nKHUzMiBkLCB1OCBzKQorK3sKKysgICAgdTMyIHJlcywgY250OworKyAgICB1MzIgbWFzaywgY2YsIG9jZiA9IDA7CisrCisrICAgIC8qIHJvdGF0ZSByaWdodCB0aHJvdWdoIGNhcnJ5ICovCisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDMzKSAhPSAwKSB7CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBjZiA9IGQgJiAweDE7CisrICAgICAgICAgICAgb2NmID0gQUNDRVNTX0ZMQUcoRl9DRikgIT0gMDsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBjZiA9IChkID4+IChjbnQgLSAxKSkgJiAweDE7CisrICAgICAgICBtYXNrID0gKDEgPDwgKDMyIC0gY250KSkgLSAxOworKyAgICAgICAgcmVzID0gKGQgPj4gY250KSAmIG1hc2s7CisrICAgICAgICBpZiAoY250ICE9IDEpCisrICAgICAgICAgICAgcmVzIHw9IChkIDw8ICgzMyAtIGNudCkpOworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworKyAgICAgICAgICAgIHJlcyB8PSAxIDw8ICgzMiAtIGNudCk7CisrICAgICAgICB9CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKG9jZiArICgoZCA+PiAzMCkgJiAweDIpKSwgRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFJPTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggcm9sX2J5dGUodTggZCwgdTggcykKKyt1OAorK3JvbF9ieXRlKHU4IGQsIHU4IHMpCisgeworICAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgcmVzLCBjbnQsIG1hc2s7CisgCitAQCAtMTEyMSw4NyArMTE2OCw5MCBAQCB1OCByb2xfYnl0ZSh1OCBkLCB1OCBzKQorICAgICAgICBJRiBuID4gMCAKKyAgICAgICAgMSkgQl8oNykgLi4gQl8obikgIDwtICBiXyg4LShuKzEpKSAuLiBiXygwKQorICAgICAgICAyKSBCXyhuLTEpIC4uIEJfKDApIDwtICBiXyg3KSAuLiBiXyg4LW4pCistCSAqLworKyAgICAgKi8KKyAgICAgcmVzID0gZDsKKy0JaWYgKChjbnQgPSBzICUgOCkgIT0gMCkgeworLQkJLyogQl8oNykgLi4gQl8obikgIDwtICBiXyg4LShuKzEpKSAuLiBiXygwKSAqLworLQkJcmVzID0gKGQgPDwgY250KTsKKysgICAgaWYgKChjbnQgPSBzICUgOCkgIT0gMCkgeworKyAgICAgICAgLyogQl8oNykgLi4gQl8obikgIDwtICBiXyg4LShuKzEpKSAuLiBiXygwKSAqLworKyAgICAgICAgcmVzID0gKGQgPDwgY250KTsKKyAKKy0JCS8qIEJfKG4tMSkgLi4gQl8oMCkgPC0gIGJfKDcpIC4uIGJfKDgtbikgKi8KKy0JCW1hc2sgPSAoMSA8PCBjbnQpIC0gMTsKKy0JCXJlcyB8PSAoZCA+PiAoOCAtIGNudCkpICYgbWFzazsKKysgICAgICAgIC8qIEJfKG4tMSkgLi4gQl8oMCkgPC0gIGJfKDcpIC4uIGJfKDgtbikgKi8KKysgICAgICAgIG1hc2sgPSAoMSA8PCBjbnQpIC0gMTsKKysgICAgICAgIHJlcyB8PSAoZCA+PiAoOCAtIGNudCkpICYgbWFzazsKKyAKKy0JCS8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyCistCQkgICBiaXQgb2YgdGhlIHJlc3VsdCEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKy0JCS8qIE9WRVJGTE9XIGlzIHNldCAqSUZGKiBzPT0xLCB0aGVuIGl0IGlzIHRoZQorLQkJICAgeG9yIG9mIENGIGFuZCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQuICBCbGVjY2suICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhzID09IDEgJiYKKy0JCQkJCQkJIFhPUjIoKHJlcyAmIDB4MSkgKyAoKHJlcyA+PiA2KSAmIDB4MikpLAorLQkJCQkJCQkgRl9PRik7CistCX0gaWYgKHMgIT0gMCkgeworLQkJLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKy0JCSAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEsIEZfQ0YpOworLQl9CistCXJldHVybiAodTgpcmVzOworKyAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKysgICAgICAgICAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEsIEZfQ0YpOworKyAgICAgICAgLyogT1ZFUkZMT1cgaXMgc2V0ICpJRkYqIHM9PTEsIHRoZW4gaXQgaXMgdGhlCisrICAgICAgICAgICB4b3Igb2YgQ0YgYW5kIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdC4gIEJsZWNjay4gKi8KKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE9SMigocmVzICYgMHgxKSArICgocmVzID4+IDYpICYgMHgyKSksIEZfT0YpOworKyAgICB9CisrICAgIGlmIChzICE9IDApIHsKKysgICAgICAgIC8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyCisrICAgICAgICAgICBiaXQgb2YgdGhlIHJlc3VsdCEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKysgICAgfQorKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBST0wgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiByb2xfd29yZCh1MTYgZCwgdTggcykKKyt1MTYKKytyb2xfd29yZCh1MTYgZCwgdTggcykKKyB7CisgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCByZXMsIGNudCwgbWFzazsKKyAKKy0JcmVzID0gZDsKKy0JaWYgKChjbnQgPSBzICUgMTYpICE9IDApIHsKKy0JCXJlcyA9IChkIDw8IGNudCk7CistCQltYXNrID0gKDEgPDwgY250KSAtIDE7CistCQlyZXMgfD0gKGQgPj4gKDE2IC0gY250KSkgJiBtYXNrOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJgorLQkJCQkJCQkgWE9SMigocmVzICYgMHgxKSArICgocmVzID4+IDE0KSAmIDB4MikpLAorLQkJCQkJCQkgRl9PRik7CistCX0gaWYgKHMgIT0gMCkgeworLQkJLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKy0JCSAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEsIEZfQ0YpOworLQl9CistCXJldHVybiAodTE2KXJlczsKKysgICAgcmVzID0gZDsKKysgICAgaWYgKChjbnQgPSBzICUgMTYpICE9IDApIHsKKysgICAgICAgIHJlcyA9IChkIDw8IGNudCk7CisrICAgICAgICBtYXNrID0gKDEgPDwgY250KSAtIDE7CisrICAgICAgICByZXMgfD0gKGQgPj4gKDE2IC0gY250KSkgJiBtYXNrOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE9SMigocmVzICYgMHgxKSArICgocmVzID4+IDE0KSAmIDB4MikpLCBGX09GKTsKKysgICAgfQorKyAgICBpZiAocyAhPSAwKSB7CisrICAgICAgICAvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBOb3RlIHRoYXQgaXQgaXMgdGhlIGxvdyBvcmRlcgorKyAgICAgICAgICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MSwgRl9DRik7CisrICAgIH0KKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFJPTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIHJvbF9sb25nKHUzMiBkLCB1OCBzKQorK3UzMgorK3JvbF9sb25nKHUzMiBkLCB1OCBzKQorIHsKKyAgICAgcmVnaXN0ZXIgdTMyIHJlcywgY250LCBtYXNrOworIAorLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSAzMikgIT0gMCkgeworLQkJcmVzID0gKGQgPDwgY250KTsKKy0JCW1hc2sgPSAoMSA8PCBjbnQpIC0gMTsKKy0JCXJlcyB8PSAoZCA+PiAoMzIgLSBjbnQpKSAmIG1hc2s7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEsIEZfQ0YpOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocyA9PSAxICYmCistCQkJCQkJCSBYT1IyKChyZXMgJiAweDEpICsgKChyZXMgPj4gMzApICYgMHgyKSksCistCQkJCQkJCSBGX09GKTsKKy0JfSBpZiAocyAhPSAwKSB7CistCQkvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBOb3RlIHRoYXQgaXQgaXMgdGhlIGxvdyBvcmRlcgorLQkJICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MSwgRl9DRik7CistCX0KKy0JcmV0dXJuIHJlczsKKysgICAgcmVzID0gZDsKKysgICAgaWYgKChjbnQgPSBzICUgMzIpICE9IDApIHsKKysgICAgICAgIHJlcyA9IChkIDw8IGNudCk7CisrICAgICAgICBtYXNrID0gKDEgPDwgY250KSAtIDE7CisrICAgICAgICByZXMgfD0gKGQgPj4gKDMyIC0gY250KSkgJiBtYXNrOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE9SMigocmVzICYgMHgxKSArICgocmVzID4+IDMwKSAmIDB4MikpLCBGX09GKTsKKysgICAgfQorKyAgICBpZiAocyAhPSAwKSB7CisrICAgICAgICAvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBOb3RlIHRoYXQgaXQgaXMgdGhlIGxvdyBvcmRlcgorKyAgICAgICAgICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MSwgRl9DRik7CisrICAgIH0KKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFJPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggcm9yX2J5dGUodTggZCwgdTggcykKKyt1OAorK3Jvcl9ieXRlKHU4IGQsIHU4IHMpCisgeworICAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgcmVzLCBjbnQsIG1hc2s7CisgCitAQCAtMTIxOSw5ICsxMjY5LDkgQEAgdTggcm9yX2J5dGUodTggZCwgdTggcykKKyAgICAgICAgSUYgbiA+IDAgCisgICAgICAgIDEpIEJfKDgtKG4rMSkpIC4uIEJfKDApICA8LSAgYl8oNykgLi4gYl8obikKKyAgICAgICAgMikgQl8oNykgLi4gQl8oOC1uKSA8LSAgYl8obi0xKSAuLiBiXygwKQorLQkgKi8KKy0JcmVzID0gZDsKKy0JaWYgKChjbnQgPSBzICUgOCkgIT0gMCkgeyAgICAgICAgICAgLyogbm90IGEgdHlwbywgZG8gbmFkYSBpZiBjbnQ9PTAgKi8KKysgICAgICovCisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDgpICE9IDApIHsgICAvKiBub3QgYSB0eXBvLCBkbyBuYWRhIGlmIGNudD09MCAqLworICAgICAgICAgLyogQl8oNykgLi4gQl8oOC1uKSA8LSAgYl8obi0xKSAuLiBiXygwKSAqLworICAgICAgICAgcmVzID0gKGQgPDwgKDggLSBjbnQpKTsKKyAKK0BAIC0xMjMxLDI5MSArMTI4MSwzMTcgQEAgdTggcm9yX2J5dGUodTggZCwgdTggcykKKyAKKyAgICAgICAgIC8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyIAorICAgICAgICAgICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfQ0YpOworLQkJLyogT1ZFUkZMT1cgaXMgc2V0ICpJRkYqIHM9PTEsIHRoZW4gaXQgaXMgdGhlCisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX0NGKTsKKysgICAgICAgIC8qIE9WRVJGTE9XIGlzIHNldCAqSUZGKiBzPT0xLCB0aGVuIGl0IGlzIHRoZQorICAgICAgICAgICAgeG9yIG9mIHRoZSB0d28gbW9zdCBzaWduaWZpY2FudCBiaXRzLiAgQmxlY2NrLiAqLworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocyA9PSAxICYmIFhPUjIocmVzID4+IDYpLCBGX09GKTsKKy0JfSBlbHNlIGlmIChzICE9IDApIHsKKy0JCS8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyCistCQkgICBiaXQgb2YgdGhlIHJlc3VsdCEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9DRik7CistCX0KKy0JcmV0dXJuICh1OClyZXM7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzID09IDEgJiYgWE9SMihyZXMgPj4gNiksIEZfT0YpOworKyAgICB9CisrICAgIGVsc2UgaWYgKHMgIT0gMCkgeworKyAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKysgICAgICAgICAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX0NGKTsKKysgICAgfQorKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBST1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiByb3Jfd29yZCh1MTYgZCwgdTggcykKKyt1MTYKKytyb3Jfd29yZCh1MTYgZCwgdTggcykKKyB7CisgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCByZXMsIGNudCwgbWFzazsKKyAKKy0JcmVzID0gZDsKKy0JaWYgKChjbnQgPSBzICUgMTYpICE9IDApIHsKKy0JCXJlcyA9IChkIDw8ICgxNiAtIGNudCkpOworLQkJbWFzayA9ICgxIDw8ICgxNiAtIGNudCkpIC0gMTsKKy0JCXJlcyB8PSAoZCA+PiAoY250KSkgJiBtYXNrOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX0NGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJiBYT1IyKHJlcyA+PiAxNCksIEZfT0YpOworLQl9IGVsc2UgaWYgKHMgIT0gMCkgeworLQkJLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKy0JCSAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfQ0YpOworLQl9CistCXJldHVybiAodTE2KXJlczsKKysgICAgcmVzID0gZDsKKysgICAgaWYgKChjbnQgPSBzICUgMTYpICE9IDApIHsKKysgICAgICAgIHJlcyA9IChkIDw8ICgxNiAtIGNudCkpOworKyAgICAgICAgbWFzayA9ICgxIDw8ICgxNiAtIGNudCkpIC0gMTsKKysgICAgICAgIHJlcyB8PSAoZCA+PiAoY250KSkgJiBtYXNrOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJiBYT1IyKHJlcyA+PiAxNCksIEZfT0YpOworKyAgICB9CisrICAgIGVsc2UgaWYgKHMgIT0gMCkgeworKyAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKysgICAgICAgICAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfQ0YpOworKyAgICB9CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBST1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiByb3JfbG9uZyh1MzIgZCwgdTggcykKKyt1MzIKKytyb3JfbG9uZyh1MzIgZCwgdTggcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXMsIGNudCwgbWFzazsKKysgICAgcmVnaXN0ZXIgdTMyIHJlcywgY250LCBtYXNrOworIAorLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSAzMikgIT0gMCkgeworLQkJcmVzID0gKGQgPDwgKDMyIC0gY250KSk7CistCQltYXNrID0gKDEgPDwgKDMyIC0gY250KSkgLSAxOworLQkJcmVzIHw9IChkID4+IChjbnQpKSAmIG1hc2s7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX0NGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJiBYT1IyKHJlcyA+PiAzMCksIEZfT0YpOworLQl9IGVsc2UgaWYgKHMgIT0gMCkgeworLQkJLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKy0JCSAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX0NGKTsKKy0JfQorLQlyZXR1cm4gcmVzOworKyAgICByZXMgPSBkOworKyAgICBpZiAoKGNudCA9IHMgJSAzMikgIT0gMCkgeworKyAgICAgICAgcmVzID0gKGQgPDwgKDMyIC0gY250KSk7CisrICAgICAgICBtYXNrID0gKDEgPDwgKDMyIC0gY250KSkgLSAxOworKyAgICAgICAgcmVzIHw9IChkID4+IChjbnQpKSAmIG1hc2s7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJiBYT1IyKHJlcyA+PiAzMCksIEZfT0YpOworKyAgICB9CisrICAgIGVsc2UgaWYgKHMgIT0gMCkgeworKyAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKysgICAgICAgICAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX0NGKTsKKysgICAgfQorKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0hMIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBzaGxfYnl0ZSh1OCBkLCB1OCBzKQorK3U4Cisrc2hsX2J5dGUodTggZCwgdTggcykKKyB7CistCXVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CistCistCWlmIChzIDwgOCkgeworLQkJY250ID0gcyAlIDg7CisrICAgIHVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisgCistCQkvKiBsYXN0IGJpdCBzaGlmdGVkIG91dCBnb2VzIGludG8gY2FycnkgZmxhZyAqLworLQkJaWYgKGNudCA+IDApIHsKKy0JCQlyZXMgPSBkIDw8IGNudDsKKy0JCQljZiA9IGQgJiAoMSA8PCAoOCAtIGNudCkpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JCX0gZWxzZSB7CistCQkJcmVzID0gKHU4KSBkOworLQkJfQorKyAgICBpZiAocyA8IDgpIHsKKysgICAgICAgIGNudCA9IHMgJSA4OworKworKyAgICAgICAgLyogbGFzdCBiaXQgc2hpZnRlZCBvdXQgZ29lcyBpbnRvIGNhcnJ5IGZsYWcgKi8KKysgICAgICAgIGlmIChjbnQgPiAwKSB7CisrICAgICAgICAgICAgcmVzID0gZCA8PCBjbnQ7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKDggLSBjbnQpKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICByZXMgPSAodTgpIGQ7CisrICAgICAgICB9CisgCistCQlpZiAoY250ID09IDEpIHsKKy0JCQkvKiBOZWVkcyBzaW1wbGlmaWNhdGlvbi4gKi8KKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygKKy0JCQkJCQkJCQkoKChyZXMgJiAweDgwKSA9PSAweDgwKSBeCistCQkJCQkJCQkJIChBQ0NFU1NfRkxBRyhGX0NGKSAhPSAwKSksCistCQkJLyogd2FzIChNLng4Ni5SX0ZMRyZGX0NGKT09Rl9DRikpLCAqLworLQkJCQkJCQkJCUZfT0YpOworLQkJfSBlbHNlIHsKKy0JCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJfQorLQl9IGVsc2UgeworLQkJcmVzID0gMDsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKChkIDw8IChzLTEpKSAmIDB4ODAsIEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCUNMRUFSX0ZMQUcoRl9TRik7CistCQlTRVRfRkxBRyhGX1BGKTsKKy0JCVNFVF9GTEFHKEZfWkYpOworKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgLyogTmVlZHMgc2ltcGxpZmljYXRpb24uICovCisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKCgocmVzICYgMHg4MCkgPT0gMHg4MCkgXgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdhcyAoTS54ODYuUl9GTEcmRl9DRik9PUZfQ0YpKSwgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICB9CisgICAgIH0KKy0JcmV0dXJuICh1OClyZXM7CisrICAgIGVsc2UgeworKyAgICAgICAgcmVzID0gMDsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChkIDw8IChzIC0gMSkpICYgMHg4MCwgRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfUEYpOworKyAgICAgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgIH0KKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0hMIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgc2hsX3dvcmQodTE2IGQsIHU4IHMpCisrdTE2Cisrc2hsX3dvcmQodTE2IGQsIHU4IHMpCisgeworICAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworIAorLQlpZiAocyA8IDE2KSB7CistCQljbnQgPSBzICUgMTY7CistCQlpZiAoY250ID4gMCkgeworLQkJCXJlcyA9IGQgPDwgY250OworLQkJCWNmID0gZCAmICgxIDw8ICgxNiAtIGNudCkpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9ICh1MTYpIGQ7CistCQl9CistCistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygKKy0JCQkJCQkJCQkoKChyZXMgJiAweDgwMDApID09IDB4ODAwMCkgXgorLQkJCQkJCQkJCSAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLAorLQkJCQkJCQkJCUZfT0YpOworLSAgICAgICAgfSBlbHNlIHsKKy0JCQlDTEVBUl9GTEFHKEZfT0YpOworLSAgICAgICAgfQorLSAgICB9IGVsc2UgeworLQkJcmVzID0gMDsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKChkIDw8IChzLTEpKSAmIDB4ODAwMCwgRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJQ0xFQVJfRkxBRyhGX1NGKTsKKy0JCVNFVF9GTEFHKEZfUEYpOworLQkJU0VUX0ZMQUcoRl9aRik7CistCX0KKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICBpZiAocyA8IDE2KSB7CisrICAgICAgICBjbnQgPSBzICUgMTY7CisrICAgICAgICBpZiAoY250ID4gMCkgeworKyAgICAgICAgICAgIHJlcyA9IGQgPDwgY250OworKyAgICAgICAgICAgIGNmID0gZCAmICgxIDw8ICgxNiAtIGNudCkpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICByZXMgPSAodTE2KSBkOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKCgocmVzICYgMHg4MDAwKSA9PSAweDgwMDApIF4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFDQ0VTU19GTEFHKEZfQ0YpICE9IDApKSwgRl9PRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcmVzID0gMDsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChkIDw8IChzIC0gMSkpICYgMHg4MDAwLCBGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9QRik7CisrICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgfQorKyAgICByZXR1cm4gKHUxNikgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0hMIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgc2hsX2xvbmcodTMyIGQsIHU4IHMpCisteworLQl1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworLQorLQlpZiAocyA8IDMyKSB7CistCQljbnQgPSBzICUgMzI7CistCQlpZiAoY250ID4gMCkgeworLQkJCXJlcyA9IGQgPDwgY250OworLQkJCWNmID0gZCAmICgxIDw8ICgzMiAtIGNudCkpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JCX0gZWxzZSB7CistCQkJcmVzID0gZDsKKy0JCX0KKy0JCWlmIChjbnQgPT0gMSkgeworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKCgoKHJlcyAmIDB4ODAwMDAwMDApID09IDB4ODAwMDAwMDApIF4KKy0JCQkJCQkJCSAgKEFDQ0VTU19GTEFHKEZfQ0YpICE9IDApKSwgRl9PRik7CistCQl9IGVsc2UgeworLQkJCUNMRUFSX0ZMQUcoRl9PRik7CistCQl9CistCX0gZWxzZSB7CistCQlyZXMgPSAwOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPDwgKHMtMSkpICYgMHg4MDAwMDAwMCwgRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJQ0xFQVJfRkxBRyhGX1NGKTsKKy0JCVNFVF9GTEFHKEZfUEYpOworLQkJU0VUX0ZMQUcoRl9aRik7CistCX0KKy0JcmV0dXJuIHJlczsKKyt1MzIKKytzaGxfbG9uZyh1MzIgZCwgdTggcykKKyt7CisrICAgIHVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisrCisrICAgIGlmIChzIDwgMzIpIHsKKysgICAgICAgIGNudCA9IHMgJSAzMjsKKysgICAgICAgIGlmIChjbnQgPiAwKSB7CisrICAgICAgICAgICAgcmVzID0gZCA8PCBjbnQ7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKDMyIC0gY250KSk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcmVzID0gZDsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChjbnQgPT0gMSkgeworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCgoKHJlcyAmIDB4ODAwMDAwMDApID09IDB4ODAwMDAwMDApIF4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFDQ0VTU19GTEFHKEZfQ0YpICE9IDApKSwgRl9PRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcmVzID0gMDsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChkIDw8IChzIC0gMSkpICYgMHg4MDAwMDAwMCwgRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfUEYpOworKyAgICAgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgIH0KKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNIUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggc2hyX2J5dGUodTggZCwgdTggcykKKy17CistCXVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CistCistCWlmIChzIDwgOCkgeworLQkJY250ID0gcyAlIDg7CistCQlpZiAoY250ID4gMCkgeworLQkJCWNmID0gZCAmICgxIDw8IChjbnQgLSAxKSk7CistCQkJcmVzID0gZCA+PiBjbnQ7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQkJfSBlbHNlIHsKKy0JCQlyZXMgPSAodTgpIGQ7CistCQl9CistCistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKHJlcyA+PiA2KSwgRl9PRik7CistCQl9IGVsc2UgeworLQkJCUNMRUFSX0ZMQUcoRl9PRik7CistCQl9CistCX0gZWxzZSB7CistCQlyZXMgPSAwOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPj4gKHMtMSkpICYgMHgxLCBGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJU0VUX0ZMQUcoRl9QRik7CistCQlTRVRfRkxBRyhGX1pGKTsKKy0JfQorLQlyZXR1cm4gKHU4KXJlczsKKyt1OAorK3Nocl9ieXRlKHU4IGQsIHU4IHMpCisreworKyAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworKworKyAgICBpZiAocyA8IDgpIHsKKysgICAgICAgIGNudCA9IHMgJSA4OworKyAgICAgICAgaWYgKGNudCA+IDApIHsKKysgICAgICAgICAgICBjZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworKyAgICAgICAgICAgIHJlcyA9IGQgPj4gY250OworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHJlcyA9ICh1OCkgZDsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmIChjbnQgPT0gMSkgeworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIocmVzID4+IDYpLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICByZXMgPSAwOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPj4gKHMgLSAxKSkgJiAweDEsIEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICBTRVRfRkxBRyhGX1BGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICB9CisrICAgIHJldHVybiAodTgpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNIUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IHNocl93b3JkKHUxNiBkLCB1OCBzKQorK3UxNgorK3Nocl93b3JkKHUxNiBkLCB1OCBzKQorIHsKKy0JdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKysgICAgdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKyAKKy0JaWYgKHMgPCAxNikgeworLQkJY250ID0gcyAlIDE2OworLQkJaWYgKGNudCA+IDApIHsKKy0JCQljZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworLQkJCXJlcyA9IGQgPj4gY250OworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9IGQ7CistCQl9CisrICAgIGlmIChzIDwgMTYpIHsKKysgICAgICAgIGNudCA9IHMgJSAxNjsKKysgICAgICAgIGlmIChjbnQgPiAwKSB7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKysgICAgICAgICAgICByZXMgPSBkID4+IGNudDsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcmVzID0gZDsKKysgICAgICAgIH0KKyAKKy0JCWlmIChjbnQgPT0gMSkgeworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIocmVzID4+IDE0KSwgRl9PRik7CistICAgICAgICB9IGVsc2UgeworLQkJCUNMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKHJlcyA+PiAxNCksIEZfT0YpOworICAgICAgICAgfQorLQl9IGVsc2UgeworLQkJcmVzID0gMDsKKy0JCUNMRUFSX0ZMQUcoRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJU0VUX0ZMQUcoRl9aRik7CistCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJQ0xFQVJfRkxBRyhGX1BGKTsKKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICByZXMgPSAwOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfUEYpOworICAgICB9CistCXJldHVybiAodTE2KXJlczsKKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNIUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIHNocl9sb25nKHUzMiBkLCB1OCBzKQorK3UzMgorK3Nocl9sb25nKHUzMiBkLCB1OCBzKQorIHsKKy0JdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKysgICAgdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKyAKKy0JaWYgKHMgPCAzMikgeworLQkJY250ID0gcyAlIDMyOworLQkJaWYgKGNudCA+IDApIHsKKy0JCQljZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworLQkJCXJlcyA9IGQgPj4gY250OworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgIGlmIChzIDwgMzIpIHsKKysgICAgICAgIGNudCA9IHMgJSAzMjsKKysgICAgICAgIGlmIChjbnQgPiAwKSB7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKysgICAgICAgICAgICByZXMgPSBkID4+IGNudDsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICByZXMgPSBkOworICAgICAgICAgfQorICAgICAgICAgaWYgKGNudCA9PSAxKSB7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihyZXMgPj4gMzApLCBGX09GKTsKKy0gICAgICAgIH0gZWxzZSB7CistCQkJQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKHJlcyA+PiAzMCksIEZfT0YpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgIH0KKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHJlcyA9IDA7CistCQlDTEVBUl9GTEFHKEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCVNFVF9GTEFHKEZfWkYpOworLQkJQ0xFQVJfRkxBRyhGX1NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9QRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9QRik7CisgICAgIH0KKyAgICAgcmV0dXJuIHJlczsKKyB9CitAQCAtMTUyNCw1OTIgKzE2MDAsNjM0IEBAIHUzMiBzaHJfbG9uZyh1MzIgZCwgdTggcykKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNBUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggc2FyX2J5dGUodTggZCwgdTggcykKKyt1OAorK3Nhcl9ieXRlKHU4IGQsIHU4IHMpCisgeworLQl1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmLCBtYXNrLCBzZjsKKysgICAgdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZiwgbWFzaywgc2Y7CisgCistCXJlcyA9IGQ7CistCXNmID0gZCAmIDB4ODA7CisrICAgIHJlcyA9IGQ7CisrICAgIHNmID0gZCAmIDB4ODA7CisgICAgIGNudCA9IHMgJSA4OworLQlpZiAoY250ID4gMCAmJiBjbnQgPCA4KSB7CistCQltYXNrID0gKDEgPDwgKDggLSBjbnQpKSAtIDE7CistCQljZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworLQkJcmVzID0gKGQgPj4gY250KSAmIG1hc2s7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQlpZiAoc2YpIHsKKy0JCQlyZXMgfD0gfm1hc2s7CistCQl9CistCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistICAgIH0gZWxzZSBpZiAoY250ID49IDgpIHsKKysgICAgaWYgKGNudCA+IDAgJiYgY250IDwgOCkgeworKyAgICAgICAgbWFzayA9ICgxIDw8ICg4IC0gY250KSkgLSAxOworKyAgICAgICAgY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKysgICAgICAgIHJlcyA9IChkID4+IGNudCkgJiBtYXNrOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgaWYgKHNmKSB7CisrICAgICAgICAgICAgcmVzIHw9IH5tYXNrOworKyAgICAgICAgfQorKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICB9CisrICAgIGVsc2UgaWYgKGNudCA+PSA4KSB7CisgICAgICAgICBpZiAoc2YpIHsKKyAgICAgICAgICAgICByZXMgPSAweGZmOworLQkJCVNFVF9GTEFHKEZfQ0YpOworLQkJCUNMRUFSX0ZMQUcoRl9aRik7CistCQkJU0VUX0ZMQUcoRl9TRik7CistCQkJU0VUX0ZMQUcoRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9IDA7CistCQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCQlTRVRfRkxBRyhGX1pGKTsKKy0JCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJCUNMRUFSX0ZMQUcoRl9QRik7CistCQl9CistCX0KKy0JcmV0dXJuICh1OClyZXM7CisrICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX1pGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1NGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHJlcyA9IDA7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9QRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0FSIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgc2FyX3dvcmQodTE2IGQsIHU4IHMpCisrdTE2Cisrc2FyX3dvcmQodTE2IGQsIHU4IHMpCisgeworICAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmLCBtYXNrLCBzZjsKKyAKKyAgICAgc2YgPSBkICYgMHg4MDAwOworICAgICBjbnQgPSBzICUgMTY7CistCXJlcyA9IGQ7CistCWlmIChjbnQgPiAwICYmIGNudCA8IDE2KSB7CisrICAgIHJlcyA9IGQ7CisrICAgIGlmIChjbnQgPiAwICYmIGNudCA8IDE2KSB7CisgICAgICAgICBtYXNrID0gKDEgPDwgKDE2IC0gY250KSkgLSAxOworICAgICAgICAgY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKyAgICAgICAgIHJlcyA9IChkID4+IGNudCkgJiBtYXNrOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworICAgICAgICAgaWYgKHNmKSB7CisgICAgICAgICAgICAgcmVzIHw9IH5tYXNrOworICAgICAgICAgfQorLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0gICAgfSBlbHNlIGlmIChjbnQgPj0gMTYpIHsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIH0KKysgICAgZWxzZSBpZiAoY250ID49IDE2KSB7CisgICAgICAgICBpZiAoc2YpIHsKKyAgICAgICAgICAgICByZXMgPSAweGZmZmY7CistCQkJU0VUX0ZMQUcoRl9DRik7CistCQkJQ0xFQVJfRkxBRyhGX1pGKTsKKy0JCQlTRVRfRkxBRyhGX1NGKTsKKy0JCQlTRVRfRkxBRyhGX1BGKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX1pGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1NGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHJlcyA9IDA7CistCQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCQlTRVRfRkxBRyhGX1pGKTsKKy0JCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJCUNMRUFSX0ZMQUcoRl9QRik7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9QRik7CisgICAgICAgICB9CisgICAgIH0KKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICByZXR1cm4gKHUxNikgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0FSIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgc2FyX2xvbmcodTMyIGQsIHU4IHMpCisrdTMyCisrc2FyX2xvbmcodTMyIGQsIHU4IHMpCisgeworICAgICB1MzIgY250LCByZXMsIGNmLCBtYXNrLCBzZjsKKyAKKyAgICAgc2YgPSBkICYgMHg4MDAwMDAwMDsKKyAgICAgY250ID0gcyAlIDMyOworLQlyZXMgPSBkOworLQlpZiAoY250ID4gMCAmJiBjbnQgPCAzMikgeworKyAgICByZXMgPSBkOworKyAgICBpZiAoY250ID4gMCAmJiBjbnQgPCAzMikgeworICAgICAgICAgbWFzayA9ICgxIDw8ICgzMiAtIGNudCkpIC0gMTsKKy0JCWNmID0gZCAmICgxIDw8IChjbnQgLSAxKSk7CisrICAgICAgICBjZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworICAgICAgICAgcmVzID0gKGQgPj4gY250KSAmIG1hc2s7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisgICAgICAgICBpZiAoc2YpIHsKKyAgICAgICAgICAgICByZXMgfD0gfm1hc2s7CisgICAgICAgICB9CistCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistICAgIH0gZWxzZSBpZiAoY250ID49IDMyKSB7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIH0KKysgICAgZWxzZSBpZiAoY250ID49IDMyKSB7CisgICAgICAgICBpZiAoc2YpIHsKKyAgICAgICAgICAgICByZXMgPSAweGZmZmZmZmZmOworLQkJCVNFVF9GTEFHKEZfQ0YpOworLQkJCUNMRUFSX0ZMQUcoRl9aRik7CistCQkJU0VUX0ZMQUcoRl9TRik7CistCQkJU0VUX0ZMQUcoRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9IDA7CistCQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCQlTRVRfRkxBRyhGX1pGKTsKKy0JCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJCUNMRUFSX0ZMQUcoRl9QRik7CistCQl9CistCX0KKy0JcmV0dXJuIHJlczsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfWkYpOworKyAgICAgICAgICAgIFNFVF9GTEFHKEZfU0YpOworKyAgICAgICAgICAgIFNFVF9GTEFHKEZfUEYpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcmVzID0gMDsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX1BGKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0hMRCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IHNobGRfd29yZCAodTE2IGQsIHUxNiBmaWxsLCB1OCBzKQorLXsKKy0JdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKy0KKy0JaWYgKHMgPCAxNikgeworLQkJY250ID0gcyAlIDE2OworLQkJaWYgKGNudCA+IDApIHsKKy0JCQlyZXMgPSAoZCA8PCBjbnQpIHwgKGZpbGwgPj4gKDE2LWNudCkpOworLQkJCWNmID0gZCAmICgxIDw8ICgxNiAtIGNudCkpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9IGQ7CistCQl9CistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygoKChyZXMgJiAweDgwMDApID09IDB4ODAwMCkgXgorLQkJCQkJCQkJICAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLCBGX09GKTsKKy0JCX0gZWxzZSB7CistCQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCX0KKy0JfSBlbHNlIHsKKy0JCXJlcyA9IDA7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRygoZCA8PCAocy0xKSkgJiAweDgwMDAsIEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCUNMRUFSX0ZMQUcoRl9TRik7CistCQlTRVRfRkxBRyhGX1BGKTsKKy0JCVNFVF9GTEFHKEZfWkYpOworLQl9CistCXJldHVybiAodTE2KXJlczsKKyt1MTYKKytzaGxkX3dvcmQodTE2IGQsIHUxNiBmaWxsLCB1OCBzKQorK3sKKysgICAgdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKysKKysgICAgaWYgKHMgPCAxNikgeworKyAgICAgICAgY250ID0gcyAlIDE2OworKyAgICAgICAgaWYgKGNudCA+IDApIHsKKysgICAgICAgICAgICByZXMgPSAoZCA8PCBjbnQpIHwgKGZpbGwgPj4gKDE2IC0gY250KSk7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKDE2IC0gY250KSk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHJlcyA9IGQ7CisrICAgICAgICB9CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygoKChyZXMgJiAweDgwMDApID09IDB4ODAwMCkgXgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICByZXMgPSAwOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPDwgKHMgLSAxKSkgJiAweDgwMDAsIEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICBTRVRfRkxBRyhGX1BGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICB9CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTSExEIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgc2hsZF9sb25nICh1MzIgZCwgdTMyIGZpbGwsIHU4IHMpCisteworLQl1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworLQorLQlpZiAocyA8IDMyKSB7CistCQljbnQgPSBzICUgMzI7CistCQlpZiAoY250ID4gMCkgeworLQkJCXJlcyA9IChkIDw8IGNudCkgfCAoZmlsbCA+PiAoMzItY250KSk7CistCQkJY2YgPSBkICYgKDEgPDwgKDMyIC0gY250KSk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQkJfSBlbHNlIHsKKy0JCQlyZXMgPSBkOworLQkJfQorLQkJaWYgKGNudCA9PSAxKSB7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKCgocmVzICYgMHg4MDAwMDAwMCkgPT0gMHg4MDAwMDAwMCkgXgorLQkJCQkJCQkJICAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLCBGX09GKTsKKy0JCX0gZWxzZSB7CistCQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCX0KKy0JfSBlbHNlIHsKKy0JCXJlcyA9IDA7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRygoZCA8PCAocy0xKSkgJiAweDgwMDAwMDAwLCBGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJU0VUX0ZMQUcoRl9QRik7CistCQlTRVRfRkxBRyhGX1pGKTsKKy0JfQorLQlyZXR1cm4gcmVzOworK3UzMgorK3NobGRfbG9uZyh1MzIgZCwgdTMyIGZpbGwsIHU4IHMpCisreworKyAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworKworKyAgICBpZiAocyA8IDMyKSB7CisrICAgICAgICBjbnQgPSBzICUgMzI7CisrICAgICAgICBpZiAoY250ID4gMCkgeworKyAgICAgICAgICAgIHJlcyA9IChkIDw8IGNudCkgfCAoZmlsbCA+PiAoMzIgLSBjbnQpKTsKKysgICAgICAgICAgICBjZiA9IGQgJiAoMSA8PCAoMzIgLSBjbnQpKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICByZXMgPSBkOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKCgocmVzICYgMHg4MDAwMDAwMCkgPT0gMHg4MDAwMDAwMCkgXgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICByZXMgPSAwOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPDwgKHMgLSAxKSkgJiAweDgwMDAwMDAwLCBGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9QRik7CisrICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgfQorKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0hSRCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IHNocmRfd29yZCAodTE2IGQsIHUxNiBmaWxsLCB1OCBzKQorK3UxNgorK3NocmRfd29yZCh1MTYgZCwgdTE2IGZpbGwsIHU4IHMpCisgeworLQl1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworKyAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworIAorLQlpZiAocyA8IDE2KSB7CistCQljbnQgPSBzICUgMTY7CistCQlpZiAoY250ID4gMCkgeworLQkJCWNmID0gZCAmICgxIDw8IChjbnQgLSAxKSk7CistCQkJcmVzID0gKGQgPj4gY250KSB8IChmaWxsIDw8ICgxNiAtIGNudCkpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9IGQ7CistCQl9CisrICAgIGlmIChzIDwgMTYpIHsKKysgICAgICAgIGNudCA9IHMgJSAxNjsKKysgICAgICAgIGlmIChjbnQgPiAwKSB7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKysgICAgICAgICAgICByZXMgPSAoZCA+PiBjbnQpIHwgKGZpbGwgPDwgKDE2IC0gY250KSk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHJlcyA9IGQ7CisrICAgICAgICB9CisgCistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKHJlcyA+PiAxNCksIEZfT0YpOworLSAgICAgICAgfSBlbHNlIHsKKy0JCQlDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihyZXMgPj4gMTQpLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICB9CistCX0gZWxzZSB7CistCQlyZXMgPSAwOworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCQlTRVRfRkxBRyhGX1pGKTsKKy0JCUNMRUFSX0ZMQUcoRl9TRik7CistCQlDTEVBUl9GTEFHKEZfUEYpOworICAgICB9CistCXJldHVybiAodTE2KXJlczsKKysgICAgZWxzZSB7CisrICAgICAgICByZXMgPSAwOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfUEYpOworKyAgICB9CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTSFJEIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgc2hyZF9sb25nICh1MzIgZCwgdTMyIGZpbGwsIHU4IHMpCisrdTMyCisrc2hyZF9sb25nKHUzMiBkLCB1MzIgZmlsbCwgdTggcykKKyB7CistCXVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisrICAgIHVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisgCistCWlmIChzIDwgMzIpIHsKKy0JCWNudCA9IHMgJSAzMjsKKy0JCWlmIChjbnQgPiAwKSB7CistCQkJY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKy0JCQlyZXMgPSAoZCA+PiBjbnQpIHwgKGZpbGwgPDwgKDMyIC0gY250KSk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQkJfSBlbHNlIHsKKy0JCQlyZXMgPSBkOworLQkJfQorLQkJaWYgKGNudCA9PSAxKSB7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihyZXMgPj4gMzApLCBGX09GKTsKKy0gICAgICAgIH0gZWxzZSB7CistCQkJQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgaWYgKHMgPCAzMikgeworKyAgICAgICAgY250ID0gcyAlIDMyOworKyAgICAgICAgaWYgKGNudCA+IDApIHsKKysgICAgICAgICAgICBjZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworKyAgICAgICAgICAgIHJlcyA9IChkID4+IGNudCkgfCAoZmlsbCA8PCAoMzIgLSBjbnQpKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICByZXMgPSBkOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihyZXMgPj4gMzApLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICB9CistCX0gZWxzZSB7CistCQlyZXMgPSAwOworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCQlTRVRfRkxBRyhGX1pGKTsKKy0JCUNMRUFSX0ZMQUcoRl9TRik7CistCQlDTEVBUl9GTEFHKEZfUEYpOworICAgICB9CistCXJldHVybiByZXM7CisrICAgIGVsc2UgeworKyAgICAgICAgcmVzID0gMDsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1BGKTsKKysgICAgfQorKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0JCIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBzYmJfYnl0ZSh1OCBkLCB1OCBzKQorK3U4Cisrc2JiX2J5dGUodTggZCwgdTggcykKKyB7CistICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorLQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpCistCQlyZXMgPSBkIC0gcyAtIDE7CistCWVsc2UKKy0JCXJlcyA9IGQgLSBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpCisrICAgICAgICByZXMgPSBkIC0gcyAtIDE7CisrICAgIGVsc2UKKysgICAgICAgIHJlcyA9IGQgLSBzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworLQliYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiA2KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1OClyZXM7CisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCisrICAgIGJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDYpLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTQkIgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBzYmJfd29yZCh1MTYgZCwgdTE2IHMpCisrdTE2Cisrc2JiX3dvcmQodTE2IGQsIHUxNiBzKQorIHsKKy0gICAgcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworICAgICByZWdpc3RlciB1MzIgYmM7CisgCistCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQorICAgICAgICAgcmVzID0gZCAtIHMgLSAxOworICAgICBlbHNlCisgICAgICAgICByZXMgPSBkIC0gczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworLQliYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworKyAgICBiYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNCQiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIHNiYl9sb25nKHUzMiBkLCB1MzIgcykKKyt1MzIKKytzYmJfbG9uZyh1MzIgZCwgdTMyIHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgYmM7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorLQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpCisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKyAgICAgICAgIHJlcyA9IGQgLSBzIC0gMTsKKyAgICAgZWxzZQorICAgICAgICAgcmVzID0gZCAtIHM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCistCWJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAwMDAwMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDMwKSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKysgICAgYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwMDAwMCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU1VCIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBzdWJfYnl0ZSh1OCBkLCB1OCBzKQorK3U4Cisrc3ViX2J5dGUodTggZCwgdTggcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBiYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgYmM7CisgCistCXJlcyA9IGQgLSBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXMgPSBkIC0gczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKy0JYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MCwgRl9DRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gNiksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CistCXJldHVybiAodTgpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworKyAgICBiYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiA2KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU1VCIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgc3ViX3dvcmQodTE2IGQsIHUxNiBzKQorK3UxNgorK3N1Yl93b3JkKHUxNiBkLCB1MTYgcykKKyB7CistICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorICAgICByZXMgPSBkIC0gczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworLQliYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworKyAgICBiYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNVQiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIHN1Yl9sb25nKHUzMiBkLCB1MzIgcykKKyt1MzIKKytzdWJfbG9uZyh1MzIgZCwgdTMyIHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgYmM7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorLQlyZXMgPSBkIC0gczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVzID0gZCAtIHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCistCWJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAwMDAwMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDMwKSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKysgICAgYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwMDAwMCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgVEVTVCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCB0ZXN0X2J5dGUodTggZCwgdTggcykKKyt2b2lkCisrdGVzdF9ieXRlKHU4IGQsIHU4IHMpCisgeworLSAgICByZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgCisgICAgIHJlcyA9IGQgJiBzOworIAorLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworICAgICAvKiBBRiA9PSBkb250IGNhcmUgKi8KKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFRFU1QgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgdGVzdF93b3JkKHUxNiBkLCB1MTYgcykKKyt2b2lkCisrdGVzdF93b3JkKHUxNiBkLCB1MTYgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAKKy0JcmVzID0gZCAmIHM7CisrICAgIHJlcyA9IGQgJiBzOworIAorLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCS8qIEFGID09IGRvbnQgY2FyZSAqLworLQlDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIC8qIEFGID09IGRvbnQgY2FyZSAqLworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgVEVTVCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCB0ZXN0X2xvbmcodTMyIGQsIHUzMiBzKQorK3ZvaWQKKyt0ZXN0X2xvbmcodTMyIGQsIHUzMiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworIAorLQlyZXMgPSBkICYgczsKKysgICAgcmVzID0gZCAmIHM7CisgCistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCS8qIEFGID09IGRvbnQgY2FyZSAqLworLQlDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICAvKiBBRiA9PSBkb250IGNhcmUgKi8KKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFhPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggeG9yX2J5dGUodTggZCwgdTggcykKKyt1OAorK3hvcl9ieXRlKHU4IGQsIHU4IHMpCisgeworLQlyZWdpc3RlciB1OCByZXM7ICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1OCByZXM7ICAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgCistCXJlcyA9IGQgXiBzOworLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzKSwgRl9QRik7CistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCXJldHVybiByZXM7CisrICAgIHJlcyA9IGQgXiBzOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzKSwgRl9QRik7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9BRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBYT1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiB4b3Jfd29yZCh1MTYgZCwgdTE2IHMpCisrdTE2CisreG9yX3dvcmQodTE2IGQsIHUxNiBzKQorIHsKKy0JcmVnaXN0ZXIgdTE2IHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTE2IHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworIAorLQlyZXMgPSBkIF4gczsKKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQlDTEVBUl9GTEFHKEZfQ0YpOworLQlDTEVBUl9GTEFHKEZfQUYpOworLQlyZXR1cm4gcmVzOworKyAgICByZXMgPSBkIF4gczsKKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgWE9SIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgeG9yX2xvbmcodTMyIGQsIHUzMiBzKQorK3UzMgorK3hvcl9sb25nKHUzMiBkLCB1MzIgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAKKy0JcmVzID0gZCBeIHM7CistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCXJldHVybiByZXM7CisrICAgIHJlcyA9IGQgXiBzOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgSU1VTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBpbXVsX2J5dGUodTggcykKKyt2b2lkCisraW11bF9ieXRlKHU4IHMpCisgeworLQlzMTYgcmVzID0gKHMxNikoKHM4KU0ueDg2LlJfQUwgKiAoczgpcyk7CisrICAgIHMxNiByZXMgPSAoczE2KSAoKHM4KSBNLng4Ni5SX0FMICogKHM4KSBzKTsKKyAKKy0JTS54ODYuUl9BWCA9IHJlczsKKy0JaWYgKCgoTS54ODYuUl9BTCAmIDB4ODApID09IDAgJiYgTS54ODYuUl9BSCA9PSAweDAwKSB8fAorLQkJKChNLng4Ni5SX0FMICYgMHg4MCkgIT0gMCAmJiBNLng4Ni5SX0FIID09IDB4RkYpKSB7CistCQlDTEVBUl9GTEFHKEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JfSBlbHNlIHsKKy0JCVNFVF9GTEFHKEZfQ0YpOworLQkJU0VUX0ZMQUcoRl9PRik7CistCX0KKysgICAgTS54ODYuUl9BWCA9IHJlczsKKysgICAgaWYgKCgoTS54ODYuUl9BTCAmIDB4ODApID09IDAgJiYgTS54ODYuUl9BSCA9PSAweDAwKSB8fAorKyAgICAgICAgKChNLng4Ni5SX0FMICYgMHg4MCkgIT0gMCAmJiBNLng4Ni5SX0FIID09IDB4RkYpKSB7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9PRik7CisrICAgIH0KKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElNVUwgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgaW11bF93b3JkKHUxNiBzKQorK3ZvaWQKKytpbXVsX3dvcmQodTE2IHMpCisgeworLQlzMzIgcmVzID0gKHMxNilNLng4Ni5SX0FYICogKHMxNilzOworKyAgICBzMzIgcmVzID0gKHMxNikgTS54ODYuUl9BWCAqIChzMTYpIHM7CisgCistCU0ueDg2LlJfQVggPSAodTE2KXJlczsKKy0JTS54ODYuUl9EWCA9ICh1MTYpKHJlcyA+PiAxNik7CistCWlmICgoKE0ueDg2LlJfQVggJiAweDgwMDApID09IDAgJiYgTS54ODYuUl9EWCA9PSAweDAwKSB8fAorLQkJKChNLng4Ni5SX0FYICYgMHg4MDAwKSAhPSAwICYmIE0ueDg2LlJfRFggPT0gMHhGRikpIHsKKy0JCUNMRUFSX0ZMQUcoRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQl9IGVsc2UgeworLQkJU0VUX0ZMQUcoRl9DRik7CistCQlTRVRfRkxBRyhGX09GKTsKKy0JfQorKyAgICBNLng4Ni5SX0FYID0gKHUxNikgcmVzOworKyAgICBNLng4Ni5SX0RYID0gKHUxNikgKHJlcyA+PiAxNik7CisrICAgIGlmICgoKE0ueDg2LlJfQVggJiAweDgwMDApID09IDAgJiYgTS54ODYuUl9EWCA9PSAweDAwKSB8fAorKyAgICAgICAgKChNLng4Ni5SX0FYICYgMHg4MDAwKSAhPSAwICYmIE0ueDg2LlJfRFggPT0gMHhGRikpIHsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisrICAgICAgICBTRVRfRkxBRyhGX09GKTsKKysgICAgfQorIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgSU1VTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBpbXVsX2xvbmdfZGlyZWN0KHUzMiAqcmVzX2xvLCB1MzIqIHJlc19oaSx1MzIgZCwgdTMyIHMpCisrdm9pZAorK2ltdWxfbG9uZ19kaXJlY3QodTMyICogcmVzX2xvLCB1MzIgKiByZXNfaGksIHUzMiBkLCB1MzIgcykKKyB7CisgI2lmZGVmCV9fSEFTX0xPTkdfTE9OR19fCistCXM2NCByZXMgPSAoczMyKWQgKiAoczMyKXM7CisrICAgIHM2NCByZXMgPSAoczY0KSAoczMyKSBkICogKHMzMikgczsKKyAKKy0JKnJlc19sbyA9ICh1MzIpcmVzOworLQkqcmVzX2hpID0gKHUzMikocmVzID4+IDMyKTsKKysgICAgKnJlc19sbyA9ICh1MzIpIHJlczsKKysgICAgKnJlc19oaSA9ICh1MzIpIChyZXMgPj4gMzIpOworICNlbHNlCistCXUzMglkX2xvLGRfaGksZF9zaWduOworLQl1MzIJc19sbyxzX2hpLHNfc2lnbjsKKy0JdTMyCXJsb19sbyxybG9faGkscmhpX2xvOworLQorLQlpZiAoKGRfc2lnbiA9IGQgJiAweDgwMDAwMDAwKSAhPSAwKQorLQkJZCA9IC1kOworLQlkX2xvID0gZCAmIDB4RkZGRjsKKy0JZF9oaSA9IGQgPj4gMTY7CistCWlmICgoc19zaWduID0gcyAmIDB4ODAwMDAwMDApICE9IDApCistCQlzID0gLXM7CistCXNfbG8gPSBzICYgMHhGRkZGOworLQlzX2hpID0gcyA+PiAxNjsKKy0JcmxvX2xvID0gZF9sbyAqIHNfbG87CistCXJsb19oaSA9IChkX2hpICogc19sbyArIGRfbG8gKiBzX2hpKSArIChybG9fbG8gPj4gMTYpOworLQlyaGlfbG8gPSBkX2hpICogc19oaSArIChybG9faGkgPj4gMTYpOworLQkqcmVzX2xvID0gKHJsb19oaSA8PCAxNikgfCAocmxvX2xvICYgMHhGRkZGKTsKKy0JKnJlc19oaSA9IHJoaV9sbzsKKy0JaWYgKGRfc2lnbiAhPSBzX3NpZ24pIHsKKy0JCWQgPSB+KnJlc19sbzsKKy0JCXMgPSAoKChkICYgMHhGRkZGKSArIDEpID4+IDE2KSArIChkID4+IDE2KTsKKy0JCSpyZXNfbG8gPSB+KnJlc19sbysxOworLQkJKnJlc19oaSA9IH4qcmVzX2hpKyhzID4+IDE2KTsKKy0JCX0KKysgICAgdTMyIGRfbG8sIGRfaGksIGRfc2lnbjsKKysgICAgdTMyIHNfbG8sIHNfaGksIHNfc2lnbjsKKysgICAgdTMyIHJsb19sbywgcmxvX2hpLCByaGlfbG87CisrCisrICAgIGlmICgoZF9zaWduID0gZCAmIDB4ODAwMDAwMDApICE9IDApCisrICAgICAgICBkID0gLWQ7CisrICAgIGRfbG8gPSBkICYgMHhGRkZGOworKyAgICBkX2hpID0gZCA+PiAxNjsKKysgICAgaWYgKChzX3NpZ24gPSBzICYgMHg4MDAwMDAwMCkgIT0gMCkKKysgICAgICAgIHMgPSAtczsKKysgICAgc19sbyA9IHMgJiAweEZGRkY7CisrICAgIHNfaGkgPSBzID4+IDE2OworKyAgICBybG9fbG8gPSBkX2xvICogc19sbzsKKysgICAgcmxvX2hpID0gKGRfaGkgKiBzX2xvICsgZF9sbyAqIHNfaGkpICsgKHJsb19sbyA+PiAxNik7CisrICAgIHJoaV9sbyA9IGRfaGkgKiBzX2hpICsgKHJsb19oaSA+PiAxNik7CisrICAgICpyZXNfbG8gPSAocmxvX2hpIDw8IDE2KSB8IChybG9fbG8gJiAweEZGRkYpOworKyAgICAqcmVzX2hpID0gcmhpX2xvOworKyAgICBpZiAoZF9zaWduICE9IHNfc2lnbikgeworKyAgICAgICAgZCA9IH4qcmVzX2xvOworKyAgICAgICAgcyA9ICgoKGQgJiAweEZGRkYpICsgMSkgPj4gMTYpICsgKGQgPj4gMTYpOworKyAgICAgICAgKnJlc19sbyA9IH4qcmVzX2xvICsgMTsKKysgICAgICAgICpyZXNfaGkgPSB+KnJlc19oaSArIChzID4+IDE2KTsKKysgICAgfQorICNlbmRpZgorIH0KKyAKK0BAIC0yMTE3LDUzICsyMjM1LDU5IEBAIHZvaWQgaW11bF9sb25nX2RpcmVjdCh1MzIgKnJlc19sbywgdTMyKiByZXNfaGksdTMyIGQsIHUzMiBzKQorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgSU1VTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBpbXVsX2xvbmcodTMyIHMpCisrdm9pZAorK2ltdWxfbG9uZyh1MzIgcykKKyB7CistCWltdWxfbG9uZ19kaXJlY3QoJk0ueDg2LlJfRUFYLCZNLng4Ni5SX0VEWCxNLng4Ni5SX0VBWCxzKTsKKy0JaWYgKCgoTS54ODYuUl9FQVggJiAweDgwMDAwMDAwKSA9PSAwICYmIE0ueDg2LlJfRURYID09IDB4MDApIHx8CistCQkoKE0ueDg2LlJfRUFYICYgMHg4MDAwMDAwMCkgIT0gMCAmJiBNLng4Ni5SX0VEWCA9PSAweEZGKSkgeworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCX0gZWxzZSB7CistCQlTRVRfRkxBRyhGX0NGKTsKKy0JCVNFVF9GTEFHKEZfT0YpOworLQl9CisrICAgIGltdWxfbG9uZ19kaXJlY3QoJk0ueDg2LlJfRUFYLCAmTS54ODYuUl9FRFgsIE0ueDg2LlJfRUFYLCBzKTsKKysgICAgaWYgKCgoTS54ODYuUl9FQVggJiAweDgwMDAwMDAwKSA9PSAwICYmIE0ueDg2LlJfRURYID09IDB4MDApIHx8CisrICAgICAgICAoKE0ueDg2LlJfRUFYICYgMHg4MDAwMDAwMCkgIT0gMCAmJiBNLng4Ni5SX0VEWCA9PSAweEZGKSkgeworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfT0YpOworKyAgICB9CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBNVUwgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgbXVsX2J5dGUodTggcykKKyt2b2lkCisrbXVsX2J5dGUodTggcykKKyB7CistCXUxNiByZXMgPSAodTE2KShNLng4Ni5SX0FMICogcyk7CisrICAgIHUxNiByZXMgPSAodTE2KSAoTS54ODYuUl9BTCAqIHMpOworIAorLQlNLng4Ni5SX0FYID0gcmVzOworLQlpZiAoTS54ODYuUl9BSCA9PSAwKSB7CistCQlDTEVBUl9GTEFHKEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JfSBlbHNlIHsKKy0JCVNFVF9GTEFHKEZfQ0YpOworLQkJU0VUX0ZMQUcoRl9PRik7CistCX0KKysgICAgTS54ODYuUl9BWCA9IHJlczsKKysgICAgaWYgKE0ueDg2LlJfQUggPT0gMCkgeworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfT0YpOworKyAgICB9CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBNVUwgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgbXVsX3dvcmQodTE2IHMpCisrdm9pZAorK211bF93b3JkKHUxNiBzKQorIHsKKy0JdTMyIHJlcyA9IE0ueDg2LlJfQVggKiBzOworKyAgICB1MzIgcmVzID0gTS54ODYuUl9BWCAqIHM7CisgCistCU0ueDg2LlJfQVggPSAodTE2KXJlczsKKy0JTS54ODYuUl9EWCA9ICh1MTYpKHJlcyA+PiAxNik7CistCWlmIChNLng4Ni5SX0RYID09IDApIHsKKy0JCUNMRUFSX0ZMQUcoRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLSAgICB9IGVsc2UgeworLQkJU0VUX0ZMQUcoRl9DRik7CistCQlTRVRfRkxBRyhGX09GKTsKKysgICAgTS54ODYuUl9BWCA9ICh1MTYpIHJlczsKKysgICAgTS54ODYuUl9EWCA9ICh1MTYpIChyZXMgPj4gMTYpOworKyAgICBpZiAoTS54ODYuUl9EWCA9PSAwKSB7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9PRik7CisgICAgIH0KKyB9CisgCitAQCAtMjE3MSwzNiArMjI5NSwzOCBAQCB2b2lkIG11bF93b3JkKHUxNiBzKQorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgTVVMIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIG11bF9sb25nKHUzMiBzKQorK3ZvaWQKKyttdWxfbG9uZyh1MzIgcykKKyB7CisgI2lmZGVmCV9fSEFTX0xPTkdfTE9OR19fCistCXU2NCByZXMgPSAodTMyKU0ueDg2LlJfRUFYICogKHUzMilzOworKyAgICB1NjQgcmVzID0gKHU2NCkgTS54ODYuUl9FQVggKiBzOworIAorLQlNLng4Ni5SX0VBWCA9ICh1MzIpcmVzOworLQlNLng4Ni5SX0VEWCA9ICh1MzIpKHJlcyA+PiAzMik7CisrICAgIE0ueDg2LlJfRUFYID0gKHUzMikgcmVzOworKyAgICBNLng4Ni5SX0VEWCA9ICh1MzIpIChyZXMgPj4gMzIpOworICNlbHNlCistCXUzMglhLGFfbG8sYV9oaTsKKy0JdTMyCXNfbG8sc19oaTsKKy0JdTMyCXJsb19sbyxybG9faGkscmhpX2xvOworLQorLQlhID0gTS54ODYuUl9FQVg7CistCWFfbG8gPSBhICYgMHhGRkZGOworLQlhX2hpID0gYSA+PiAxNjsKKy0Jc19sbyA9IHMgJiAweEZGRkY7CistCXNfaGkgPSBzID4+IDE2OworLQlybG9fbG8gPSBhX2xvICogc19sbzsKKy0JcmxvX2hpID0gKGFfaGkgKiBzX2xvICsgYV9sbyAqIHNfaGkpICsgKHJsb19sbyA+PiAxNik7CistCXJoaV9sbyA9IGFfaGkgKiBzX2hpICsgKHJsb19oaSA+PiAxNik7CistCU0ueDg2LlJfRUFYID0gKHJsb19oaSA8PCAxNikgfCAocmxvX2xvICYgMHhGRkZGKTsKKy0JTS54ODYuUl9FRFggPSByaGlfbG87CisrICAgIHUzMiBhLCBhX2xvLCBhX2hpOworKyAgICB1MzIgc19sbywgc19oaTsKKysgICAgdTMyIHJsb19sbywgcmxvX2hpLCByaGlfbG87CisrCisrICAgIGEgPSBNLng4Ni5SX0VBWDsKKysgICAgYV9sbyA9IGEgJiAweEZGRkY7CisrICAgIGFfaGkgPSBhID4+IDE2OworKyAgICBzX2xvID0gcyAmIDB4RkZGRjsKKysgICAgc19oaSA9IHMgPj4gMTY7CisrICAgIHJsb19sbyA9IGFfbG8gKiBzX2xvOworKyAgICBybG9faGkgPSAoYV9oaSAqIHNfbG8gKyBhX2xvICogc19oaSkgKyAocmxvX2xvID4+IDE2KTsKKysgICAgcmhpX2xvID0gYV9oaSAqIHNfaGkgKyAocmxvX2hpID4+IDE2KTsKKysgICAgTS54ODYuUl9FQVggPSAocmxvX2hpIDw8IDE2KSB8IChybG9fbG8gJiAweEZGRkYpOworKyAgICBNLng4Ni5SX0VEWCA9IHJoaV9sbzsKKyAjZW5kaWYKKyAKKy0JaWYgKE0ueDg2LlJfRURYID09IDApIHsKKy0JCUNMRUFSX0ZMQUcoRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQl9IGVsc2UgeworLQkJU0VUX0ZMQUcoRl9DRik7CistCQlTRVRfRkxBRyhGX09GKTsKKysgICAgaWYgKE0ueDg2LlJfRURYID09IDApIHsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisrICAgICAgICBTRVRfRkxBRyhGX09GKTsKKyAgICAgfQorIH0KKyAKK0BAIC0yMjA4LDMwOSArMjMzNCwzMTkgQEAgdm9pZCBtdWxfbG9uZyh1MzIgcykKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElESVYgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgaWRpdl9ieXRlKHU4IHMpCisrdm9pZAorK2lkaXZfYnl0ZSh1OCBzKQorIHsKKyAgICAgczMyIGR2ZCwgZGl2LCBtb2Q7CisgCistCWR2ZCA9IChzMTYpTS54ODYuUl9BWDsKKy0JaWYgKHMgPT0gMCkgeworLQkJeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgIGR2ZCA9IChzMTYpIE0ueDg2LlJfQVg7CisrICAgIGlmIChzID09IDApIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIGRpdiA9IGR2ZCAvIChzOCkgczsKKysgICAgbW9kID0gZHZkICUgKHM4KSBzOworKyAgICBpZiAoYWJzKGRpdikgPiAweDdmKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKyAgICAgICAgIHJldHVybjsKKy0JfQorLQlkaXYgPSBkdmQgLyAoczgpczsKKy0JbW9kID0gZHZkICUgKHM4KXM7CistCWlmIChhYnMoZGl2KSA+IDB4N2YpIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCU0ueDg2LlJfQUwgPSAoczgpIGRpdjsKKy0JTS54ODYuUl9BSCA9IChzOCkgbW9kOworKyAgICB9CisrICAgIE0ueDg2LlJfQUwgPSAoczgpIGRpdjsKKysgICAgTS54ODYuUl9BSCA9IChzOCkgbW9kOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgSURJViBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBpZGl2X3dvcmQodTE2IHMpCisrdm9pZAorK2lkaXZfd29yZCh1MTYgcykKKyB7CistCXMzMiBkdmQsIGRpdiwgbW9kOworKyAgICBzMzIgZHZkLCBkaXYsIG1vZDsKKyAKKy0JZHZkID0gKCgoczMyKU0ueDg2LlJfRFgpIDw8IDE2KSB8IE0ueDg2LlJfQVg7CistCWlmIChzID09IDApIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCWRpdiA9IGR2ZCAvIChzMTYpczsKKy0JbW9kID0gZHZkICUgKHMxNilzOworLQlpZiAoYWJzKGRpdikgPiAweDdmZmYpIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGRpdiA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKG1vZCAmIDB4ZmYpLCBGX1BGKTsKKysgICAgZHZkID0gKCgoczMyKSBNLng4Ni5SX0RYKSA8PCAxNikgfCBNLng4Ni5SX0FYOworKyAgICBpZiAocyA9PSAwKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKyAgICBkaXYgPSBkdmQgLyAoczE2KSBzOworKyAgICBtb2QgPSBkdmQgJSAoczE2KSBzOworKyAgICBpZiAoYWJzKGRpdikgPiAweDdmZmYpIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGRpdiA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKG1vZCAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JTS54ODYuUl9BWCA9ICh1MTYpZGl2OworLQlNLng4Ni5SX0RYID0gKHUxNiltb2Q7CisrICAgIE0ueDg2LlJfQVggPSAodTE2KSBkaXY7CisrICAgIE0ueDg2LlJfRFggPSAodTE2KSBtb2Q7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBJRElWIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIGlkaXZfbG9uZyh1MzIgcykKKyt2b2lkCisraWRpdl9sb25nKHUzMiBzKQorIHsKKyAjaWZkZWYJX19IQVNfTE9OR19MT05HX18KKy0JczY0IGR2ZCwgZGl2LCBtb2Q7CistCistCWR2ZCA9ICgoKHM2NClNLng4Ni5SX0VEWCkgPDwgMzIpIHwgTS54ODYuUl9FQVg7CistCWlmIChzID09IDApIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCWRpdiA9IGR2ZCAvIChzMzIpczsKKy0JbW9kID0gZHZkICUgKHMzMilzOworLQlpZiAoYWJzKGRpdikgPiAweDdmZmZmZmZmKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKy0JCXJldHVybjsKKy0JfQorKyAgICBzNjQgZHZkLCBkaXYsIG1vZDsKKysKKysgICAgZHZkID0gKCgoczY0KSBNLng4Ni5SX0VEWCkgPDwgMzIpIHwgTS54ODYuUl9FQVg7CisrICAgIGlmIChzID09IDApIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIGRpdiA9IGR2ZCAvIChzMzIpIHM7CisrICAgIG1vZCA9IGR2ZCAlIChzMzIpIHM7CisrICAgIGlmIChhYnMoZGl2KSA+IDB4N2ZmZmZmZmYpIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisgI2Vsc2UKKy0JczMyIGRpdiA9IDAsIG1vZDsKKy0JczMyIGhfZHZkID0gTS54ODYuUl9FRFg7CistCXUzMiBsX2R2ZCA9IE0ueDg2LlJfRUFYOworLQl1MzIgYWJzX3MgPSBzICYgMHg3RkZGRkZGRjsKKy0JdTMyIGFic19oX2R2ZCA9IGhfZHZkICYgMHg3RkZGRkZGRjsKKy0JdTMyIGhfcyA9IGFic19zID4+IDE7CistCXUzMiBsX3MgPSBhYnNfcyA8PCAzMTsKKy0JaW50IGNvdW50ZXIgPSAzMTsKKy0JaW50IGNhcnJ5OworLQorLQlpZiAocyA9PSAwKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKy0JCXJldHVybjsKKy0JfQorLQlkbyB7CistCQlkaXYgPDw9IDE7CistCQljYXJyeSA9IChsX2R2ZCA+PSBsX3MpID8gMCA6IDE7CistCQkKKy0JCWlmIChhYnNfaF9kdmQgPCAoaF9zICsgY2FycnkpKSB7CistCQkJaF9zID4+PSAxOworLQkJCWxfcyA9IGFic19zIDw8ICgtLWNvdW50ZXIpOworLQkJCWNvbnRpbnVlOworLQkJfSBlbHNlIHsKKy0JCQlhYnNfaF9kdmQgLT0gKGhfcyArIGNhcnJ5KTsKKy0JCQlsX2R2ZCA9IGNhcnJ5ID8gKCgweEZGRkZGRkZGIC0gbF9zKSArIGxfZHZkICsgMSkKKy0JCQkJOiAobF9kdmQgLSBsX3MpOworLQkJCWhfcyA+Pj0gMTsKKy0JCQlsX3MgPSBhYnNfcyA8PCAoLS1jb3VudGVyKTsKKy0JCQlkaXYgfD0gMTsKKy0JCQljb250aW51ZTsKKy0JCX0KKy0JCQorLQl9IHdoaWxlIChjb3VudGVyID4gLTEpOworLQkvKiBvdmVyZmxvdyAqLworLQlpZiAoYWJzX2hfZHZkIHx8IChsX2R2ZCA+IGFic19zKSkgeworLQkJeDg2ZW11X2ludHJfcmFpc2UoMCk7CistCQlyZXR1cm47CistCX0KKy0JLyogc2lnbiAqLworLQlkaXYgfD0gKChoX2R2ZCAmIDB4MTAwMDAwMDApIF4gKHMgJiAweDEwMDAwMDAwKSk7CistCW1vZCA9IGxfZHZkOworKyAgICBzMzIgZGl2ID0gMCwgbW9kOworKyAgICBzMzIgaF9kdmQgPSBNLng4Ni5SX0VEWDsKKysgICAgdTMyIGxfZHZkID0gTS54ODYuUl9FQVg7CisrICAgIHUzMiBhYnNfcyA9IHMgJiAweDdGRkZGRkZGOworKyAgICB1MzIgYWJzX2hfZHZkID0gaF9kdmQgJiAweDdGRkZGRkZGOworKyAgICB1MzIgaF9zID0gYWJzX3MgPj4gMTsKKysgICAgdTMyIGxfcyA9IGFic19zIDw8IDMxOworKyAgICBpbnQgY291bnRlciA9IDMxOworKyAgICBpbnQgY2Fycnk7CisrCisrICAgIGlmIChzID09IDApIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIGRvIHsKKysgICAgICAgIGRpdiA8PD0gMTsKKysgICAgICAgIGNhcnJ5ID0gKGxfZHZkID49IGxfcykgPyAwIDogMTsKKysKKysgICAgICAgIGlmIChhYnNfaF9kdmQgPCAoaF9zICsgY2FycnkpKSB7CisrICAgICAgICAgICAgaF9zID4+PSAxOworKyAgICAgICAgICAgIGxfcyA9IGFic19zIDw8ICgtLWNvdW50ZXIpOworKyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgYWJzX2hfZHZkIC09IChoX3MgKyBjYXJyeSk7CisrICAgICAgICAgICAgbF9kdmQgPSBjYXJyeSA/ICgoMHhGRkZGRkZGRiAtIGxfcykgKyBsX2R2ZCArIDEpCisrICAgICAgICAgICAgICAgIDogKGxfZHZkIC0gbF9zKTsKKysgICAgICAgICAgICBoX3MgPj49IDE7CisrICAgICAgICAgICAgbF9zID0gYWJzX3MgPDwgKC0tY291bnRlcik7CisrICAgICAgICAgICAgZGl2IHw9IDE7CisrICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICB9CisrCisrICAgIH0gd2hpbGUgKGNvdW50ZXIgPiAtMSk7CisrICAgIC8qIG92ZXJmbG93ICovCisrICAgIGlmIChhYnNfaF9kdmQgfHwgKGxfZHZkID4gYWJzX3MpKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKyAgICAvKiBzaWduICovCisrICAgIGRpdiB8PSAoKGhfZHZkICYgMHgxMDAwMDAwMCkgXiAocyAmIDB4MTAwMDAwMDApKTsKKysgICAgbW9kID0gbF9kdmQ7CisgCisgI2VuZGlmCistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCUNMRUFSX0ZMQUcoRl9TRik7CistCVNFVF9GTEFHKEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkobW9kICYgMHhmZiksIEZfUEYpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKG1vZCAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JTS54ODYuUl9FQVggPSAodTMyKWRpdjsKKy0JTS54ODYuUl9FRFggPSAodTMyKW1vZDsKKysgICAgTS54ODYuUl9FQVggPSAodTMyKSBkaXY7CisrICAgIE0ueDg2LlJfRURYID0gKHUzMikgbW9kOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgRElWIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIGRpdl9ieXRlKHU4IHMpCisrdm9pZAorK2Rpdl9ieXRlKHU4IHMpCisgeworLQl1MzIgZHZkLCBkaXYsIG1vZDsKKysgICAgdTMyIGR2ZCwgZGl2LCBtb2Q7CisgCistCWR2ZCA9IE0ueDg2LlJfQVg7CisrICAgIGR2ZCA9IE0ueDg2LlJfQVg7CisgICAgIGlmIChzID09IDApIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisgICAgICAgICByZXR1cm47CisgICAgIH0KKy0JZGl2ID0gZHZkIC8gKHU4KXM7CistCW1vZCA9IGR2ZCAlICh1OClzOworLQlpZiAoYWJzKGRpdikgPiAweGZmKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgZGl2ID0gZHZkIC8gKHU4KSBzOworKyAgICBtb2QgPSBkdmQgJSAodTgpIHM7CisrICAgIGlmIChhYnMoZGl2KSA+IDB4ZmYpIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworICAgICAgICAgcmV0dXJuOworLQl9CistCU0ueDg2LlJfQUwgPSAodTgpZGl2OworLQlNLng4Ni5SX0FIID0gKHU4KW1vZDsKKysgICAgfQorKyAgICBNLng4Ni5SX0FMID0gKHU4KSBkaXY7CisrICAgIE0ueDg2LlJfQUggPSAodTgpIG1vZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIERJViBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBkaXZfd29yZCh1MTYgcykKKyt2b2lkCisrZGl2X3dvcmQodTE2IHMpCisgeworLQl1MzIgZHZkLCBkaXYsIG1vZDsKKysgICAgdTMyIGR2ZCwgZGl2LCBtb2Q7CisgCistCWR2ZCA9ICgoKHUzMilNLng4Ni5SX0RYKSA8PCAxNikgfCBNLng4Ni5SX0FYOworLQlpZiAocyA9PSAwKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgZHZkID0gKCgodTMyKSBNLng4Ni5SX0RYKSA8PCAxNikgfCBNLng4Ni5SX0FYOworKyAgICBpZiAocyA9PSAwKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKyAgICBkaXYgPSBkdmQgLyAodTE2KSBzOworKyAgICBtb2QgPSBkdmQgJSAodTE2KSBzOworKyAgICBpZiAoYWJzKGRpdikgPiAweGZmZmYpIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworICAgICAgICAgcmV0dXJuOworICAgICB9CistCWRpdiA9IGR2ZCAvICh1MTYpczsKKy0JbW9kID0gZHZkICUgKHUxNilzOworLQlpZiAoYWJzKGRpdikgPiAweGZmZmYpIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGRpdiA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKG1vZCAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoZGl2ID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkobW9kICYgMHhmZiksIEZfUEYpOworIAorLQlNLng4Ni5SX0FYID0gKHUxNilkaXY7CistCU0ueDg2LlJfRFggPSAodTE2KW1vZDsKKysgICAgTS54ODYuUl9BWCA9ICh1MTYpIGRpdjsKKysgICAgTS54ODYuUl9EWCA9ICh1MTYpIG1vZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIERJViBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBkaXZfbG9uZyh1MzIgcykKKyt2b2lkCisrZGl2X2xvbmcodTMyIHMpCisgeworICNpZmRlZglfX0hBU19MT05HX0xPTkdfXworLQl1NjQgZHZkLCBkaXYsIG1vZDsKKy0KKy0JZHZkID0gKCgodTY0KU0ueDg2LlJfRURYKSA8PCAzMikgfCBNLng4Ni5SX0VBWDsKKy0JaWYgKHMgPT0gMCkgeworLQkJeDg2ZW11X2ludHJfcmFpc2UoMCk7CistCQlyZXR1cm47CistCX0KKy0JZGl2ID0gZHZkIC8gKHUzMilzOworLQltb2QgPSBkdmQgJSAodTMyKXM7CistCWlmIChhYnMoZGl2KSA+IDB4ZmZmZmZmZmYpIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CisrICAgIHU2NCBkdmQsIGRpdiwgbW9kOworKworKyAgICBkdmQgPSAoKCh1NjQpIE0ueDg2LlJfRURYKSA8PCAzMikgfCBNLng4Ni5SX0VBWDsKKysgICAgaWYgKHMgPT0gMCkgeworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysgICAgZGl2ID0gZHZkIC8gKHUzMikgczsKKysgICAgbW9kID0gZHZkICUgKHUzMikgczsKKysgICAgaWYgKGFicyhkaXYpID4gMHhmZmZmZmZmZikgeworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKyAjZWxzZQorLQlzMzIgZGl2ID0gMCwgbW9kOworLQlzMzIgaF9kdmQgPSBNLng4Ni5SX0VEWDsKKy0JdTMyIGxfZHZkID0gTS54ODYuUl9FQVg7CistCistCXUzMiBoX3MgPSBzOworLQl1MzIgbF9zID0gMDsKKy0JaW50IGNvdW50ZXIgPSAzMjsKKy0JaW50IGNhcnJ5OworLQkJCistCWlmIChzID09IDApIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCWRvIHsKKy0JCWRpdiA8PD0gMTsKKy0JCWNhcnJ5ID0gKGxfZHZkID49IGxfcykgPyAwIDogMTsKKy0JCQorLQkJaWYgKGhfZHZkIDwgKGhfcyArIGNhcnJ5KSkgeworLQkJCWhfcyA+Pj0gMTsKKy0JCQlsX3MgPSBzIDw8ICgtLWNvdW50ZXIpOworLQkJCWNvbnRpbnVlOworLQkJfSBlbHNlIHsKKy0JCQloX2R2ZCAtPSAoaF9zICsgY2FycnkpOworLQkJCWxfZHZkID0gY2FycnkgPyAoKDB4RkZGRkZGRkYgLSBsX3MpICsgbF9kdmQgKyAxKQorLQkJCQk6IChsX2R2ZCAtIGxfcyk7CistCQkJaF9zID4+PSAxOworLQkJCWxfcyA9IHMgPDwgKC0tY291bnRlcik7CistCQkJZGl2IHw9IDE7CistCQkJY29udGludWU7CistCQl9CistCQkKKy0JfSB3aGlsZSAoY291bnRlciA+IC0xKTsKKy0JLyogb3ZlcmZsb3cgKi8KKy0JaWYgKGhfZHZkIHx8IChsX2R2ZCA+IHMpKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKy0JCXJldHVybjsKKy0JfQorLQltb2QgPSBsX2R2ZDsKKysgICAgczMyIGRpdiA9IDAsIG1vZDsKKysgICAgczMyIGhfZHZkID0gTS54ODYuUl9FRFg7CisrICAgIHUzMiBsX2R2ZCA9IE0ueDg2LlJfRUFYOworKworKyAgICB1MzIgaF9zID0gczsKKysgICAgdTMyIGxfcyA9IDA7CisrICAgIGludCBjb3VudGVyID0gMzI7CisrICAgIGludCBjYXJyeTsKKysKKysgICAgaWYgKHMgPT0gMCkgeworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysgICAgZG8geworKyAgICAgICAgZGl2IDw8PSAxOworKyAgICAgICAgY2FycnkgPSAobF9kdmQgPj0gbF9zKSA/IDAgOiAxOworKworKyAgICAgICAgaWYgKGhfZHZkIDwgKGhfcyArIGNhcnJ5KSkgeworKyAgICAgICAgICAgIGhfcyA+Pj0gMTsKKysgICAgICAgICAgICBsX3MgPSBzIDw8ICgtLWNvdW50ZXIpOworKyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgaF9kdmQgLT0gKGhfcyArIGNhcnJ5KTsKKysgICAgICAgICAgICBsX2R2ZCA9IGNhcnJ5ID8gKCgweEZGRkZGRkZGIC0gbF9zKSArIGxfZHZkICsgMSkKKysgICAgICAgICAgICAgICAgOiAobF9kdmQgLSBsX3MpOworKyAgICAgICAgICAgIGhfcyA+Pj0gMTsKKysgICAgICAgICAgICBsX3MgPSBzIDw8ICgtLWNvdW50ZXIpOworKyAgICAgICAgICAgIGRpdiB8PSAxOworKyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgfQorKworKyAgICB9IHdoaWxlIChjb3VudGVyID4gLTEpOworKyAgICAvKiBvdmVyZmxvdyAqLworKyAgICBpZiAoaF9kdmQgfHwgKGxfZHZkID4gcykpIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIG1vZCA9IGxfZHZkOworICNlbmRpZgorLQlDTEVBUl9GTEFHKEZfQ0YpOworLQlDTEVBUl9GTEFHKEZfQUYpOworLQlDTEVBUl9GTEFHKEZfU0YpOworLQlTRVRfRkxBRyhGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKG1vZCAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShtb2QgJiAweGZmKSwgRl9QRik7CisgCistCU0ueDg2LlJfRUFYID0gKHUzMilkaXY7CistCU0ueDg2LlJfRURYID0gKHUzMiltb2Q7CisrICAgIE0ueDg2LlJfRUFYID0gKHUzMikgZGl2OworKyAgICBNLng4Ni5SX0VEWCA9ICh1MzIpIG1vZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElOIHN0cmluZyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBpbnMoaW50IHNpemUpCisrdm9pZAorK2lucyhpbnQgc2l6ZSkKKyB7CistCWludCBpbmMgPSBzaXplOworKyAgICBpbnQgaW5jID0gc2l6ZTsKKyAKKy0JaWYgKEFDQ0VTU19GTEFHKEZfREYpKSB7CistCQlpbmMgPSAtc2l6ZTsKKy0JfQorLQlpZiAoTS54ODYubW9kZSAmIChTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpKSB7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgeworKyAgICAgICAgaW5jID0gLXNpemU7CisrICAgIH0KKysgICAgaWYgKE0ueDg2Lm1vZGUgJiAoU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKSkgeworICAgICAgICAgLyogZG9udCBjYXJlIHdoZXRoZXIgUkVQRSBvciBSRVBORSAqLworICAgICAgICAgLyogaW4gdW50aWwgQ1ggaXMgWkVSTy4gKi8KKy0JCXUzMiBjb3VudCA9ICgoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpID8KKy0JCQkJCSBNLng4Ni5SX0VDWCA6IE0ueDg2LlJfQ1gpOworKyAgICAgICAgdTMyIGNvdW50ID0gKChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgPworKyAgICAgICAgICAgICAgICAgICAgIE0ueDg2LlJfRUNYIDogTS54ODYuUl9DWCk7CisgICAgICAgICBzd2l0Y2ggKHNpemUpIHsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7CistCQkJCXN0b3JlX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKy0JCQkJCQkJCQkoKnN5c19pbmIpKE0ueDg2LlJfRFgpKTsKKy0JCQkJTS54ODYuUl9ESSArPSBpbmM7CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKnN5c19pbmIpIChNLng4Ni5SX0RYKSk7CisrICAgICAgICAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKyAKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7CistCQkJCXN0b3JlX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKy0JCQkJCQkJCQkoKnN5c19pbncpKE0ueDg2LlJfRFgpKTsKKy0JCQkJTS54ODYuUl9ESSArPSBpbmM7CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKnN5c19pbncpIChNLng4Ni5SX0RYKSk7CisrICAgICAgICAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7CistCQkJCXN0b3JlX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKy0JCQkJCQkJCQkoKnN5c19pbmwpKE0ueDg2LlJfRFgpKTsKKy0JCQkJTS54ODYuUl9ESSArPSBpbmM7CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKnN5c19pbmwpIChNLng4Ni5SX0RYKSk7CisrICAgICAgICAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CistCQlNLng4Ni5SX0NYID0gMDsKKy0JCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkJCU0ueDg2LlJfRUNYID0gMDsKKysgICAgICAgIE0ueDg2LlJfQ1ggPSAwOworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgTS54ODYuUl9FQ1ggPSAwOworICAgICAgICAgfQorLQkJTS54ODYubW9kZSAmPSB+KFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSk7CistICAgIH0gZWxzZSB7CisrICAgICAgICBNLng4Ni5tb2RlICY9IH4oU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKTsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHN3aXRjaCAoc2l6ZSkgeworLSAgICAgICAgICBjYXNlIDE6CistCQkJc3RvcmVfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorLQkJCQkJCQkJKCpzeXNfaW5iKShNLng4Ni5SX0RYKSk7CisrICAgICAgICBjYXNlIDE6CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpzeXNfaW5iKSAoTS54ODYuUl9EWCkpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CistCQkJc3RvcmVfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorLQkJCQkJCQkJKCpzeXNfaW53KShNLng4Ni5SX0RYKSk7CisrICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpzeXNfaW53KSAoTS54ODYuUl9EWCkpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CistCQkJc3RvcmVfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorLQkJCQkJCQkJKCpzeXNfaW5sKShNLng4Ni5SX0RYKSk7CisrICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpzeXNfaW5sKSAoTS54ODYuUl9EWCkpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorLQkJTS54ODYuUl9ESSArPSBpbmM7CisrICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKKyAgICAgfQorIH0KKyAKK0BAIC0yNTE4LDYzICsyNjU0LDY1IEBAIHZvaWQgaW5zKGludCBzaXplKQorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgT1VUIHN0cmluZyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBvdXRzKGludCBzaXplKQorK3ZvaWQKKytvdXRzKGludCBzaXplKQorIHsKKyAgICAgaW50IGluYyA9IHNpemU7CisgCistCWlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgeworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpIHsKKyAgICAgICAgIGluYyA9IC1zaXplOworICAgICB9CistCWlmIChNLng4Ni5tb2RlICYgKFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSkpIHsKKysgICAgaWYgKE0ueDg2Lm1vZGUgJiAoU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKSkgeworICAgICAgICAgLyogZG9udCBjYXJlIHdoZXRoZXIgUkVQRSBvciBSRVBORSAqLworICAgICAgICAgLyogb3V0IHVudGlsIENYIGlzIFpFUk8uICovCistCQl1MzIgY291bnQgPSAoKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSA/CistCQkJCQkgTS54ODYuUl9FQ1ggOiBNLng4Ni5SX0NYKTsKKysgICAgICAgIHUzMiBjb3VudCA9ICgoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpID8KKysgICAgICAgICAgICAgICAgICAgICBNLng4Ni5SX0VDWCA6IE0ueDg2LlJfQ1gpOworICAgICAgICAgc3dpdGNoIChzaXplKSB7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkgeworLQkJCQkoKnN5c19vdXRiKShNLng4Ni5SX0RYLAorLQkJCQkJCSBmZXRjaF9kYXRhX2J5dGVfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKKy0JCQkJTS54ODYuUl9TSSArPSBpbmM7CisrICAgICAgICAgICAgICAgICgqc3lzX291dGIpIChNLng4Ni5SX0RYLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7CisrICAgICAgICAgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKyAKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7CistCQkJCSgqc3lzX291dHcpKE0ueDg2LlJfRFgsCistCQkJCQkJIGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9TSSkpOworLQkJCQlNLng4Ni5SX1NJICs9IGluYzsKKysgICAgICAgICAgICAgICAgKCpzeXNfb3V0dykgKE0ueDg2LlJfRFgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZXRjaF9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKKysgICAgICAgICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pIHsKKy0JCQkJKCpzeXNfb3V0bCkoTS54ODYuUl9EWCwKKy0JCQkJCQkgZmV0Y2hfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7CistCQkJCU0ueDg2LlJfU0kgKz0gaW5jOworKyAgICAgICAgICAgICAgICAoKnN5c19vdXRsKSAoTS54ODYuUl9EWCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9TSSkpOworKyAgICAgICAgICAgICAgICBNLng4Ni5SX1NJICs9IGluYzsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorLQkJTS54ODYuUl9DWCA9IDA7CistCQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCQlNLng4Ni5SX0VDWCA9IDA7CisrICAgICAgICBNLng4Ni5SX0NYID0gMDsKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIE0ueDg2LlJfRUNYID0gMDsKKyAgICAgICAgIH0KKy0JCU0ueDg2Lm1vZGUgJj0gfihTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpOworLSAgICB9IGVsc2UgeworKyAgICAgICAgTS54ODYubW9kZSAmPSB+KFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSk7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBzd2l0Y2ggKHNpemUpIHsKKy0gICAgICAgICAgY2FzZSAxOgorLQkJCSgqc3lzX291dGIpKE0ueDg2LlJfRFgsCistCQkJCQkgZmV0Y2hfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7CisrICAgICAgICBjYXNlIDE6CisrICAgICAgICAgICAgKCpzeXNfb3V0YikgKE0ueDg2LlJfRFgsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9TSSkpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CistCQkJKCpzeXNfb3V0dykoTS54ODYuUl9EWCwKKy0JCQkJCSBmZXRjaF9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKKysgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICAoKnN5c19vdXR3KSAoTS54ODYuUl9EWCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNDoKKy0JCQkoKnN5c19vdXRsKShNLng4Ni5SX0RYLAorLQkJCQkJIGZldGNoX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9TSSkpOworKyAgICAgICAgY2FzZSA0OgorKyAgICAgICAgICAgICgqc3lzX291dGwpIChNLng4Ni5SX0RYLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKy0JCU0ueDg2LlJfU0kgKz0gaW5jOworKyAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CisgICAgIH0KKyB9CisgCitAQCAtMjU4NSwxMSArMjcyMywxMiBAQCBhZGRyCS0gQWRkcmVzcyB0byBmZXRjaCB3b3JkIGZyb20KKyBSRU1BUktTOgorIEZldGNoZXMgYSB3b3JkIGZyb20gZW11bGF0b3IgbWVtb3J5IHVzaW5nIGFuIGFic29sdXRlIGFkZHJlc3MuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgbWVtX2FjY2Vzc193b3JkKGludCBhZGRyKQorK3UxNgorK21lbV9hY2Nlc3Nfd29yZChpbnQgYWRkcikKKyB7CistREIoCWlmIChDSEVDS19NRU1fQUNDRVNTKCkpCistCSAgeDg2ZW11X2NoZWNrX21lbV9hY2Nlc3MoYWRkcik7KQorLQlyZXR1cm4gKCpzeXNfcmR3KShhZGRyKTsKKysgICAgREIoaWYgKENIRUNLX01FTV9BQ0NFU1MoKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX21lbV9hY2Nlc3MoYWRkcik7KQorKyAgICAgICAgcmV0dXJuICgqc3lzX3JkdykgKGFkZHIpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTI1OTgsMTIgKzI3MzcsMTMgQEAgUHVzaGVzIGEgd29yZCBvbnRvIHRoZSBzdGFjay4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMsIGFzICgqc3lzX3dyWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIHB1c2hfd29yZCh1MTYgdykKKyt2b2lkCisrcHVzaF93b3JkKHUxNiB3KQorIHsKKy1EQigJaWYgKENIRUNLX1NQX0FDQ0VTUygpKQorLQkgIHg4NmVtdV9jaGVja19zcF9hY2Nlc3MoKTspCistCU0ueDg2LlJfU1AgLT0gMjsKKy0JKCpzeXNfd3J3KSgoKHUzMilNLng4Ni5SX1NTIDw8IDQpICArIE0ueDg2LlJfU1AsIHcpOworKyAgICBEQihpZiAoQ0hFQ0tfU1BfQUNDRVNTKCkpCisrICAgICAgIHg4NmVtdV9jaGVja19zcF9hY2Nlc3MoKTspCisrICAgICAgICBNLng4Ni5SX1NQIC09IDI7CisrICAgICgqc3lzX3dydykgKCgodTMyKSBNLng4Ni5SX1NTIDw8IDQpICsgTS54ODYuUl9TUCwgdyk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMjYxMiwxMiArMjc1MiwxMyBAQCBQdXNoZXMgYSBsb25nIG9udG8gdGhlIHN0YWNrLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcywgYXMgKCpzeXNfd3JYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgcHVzaF9sb25nKHUzMiB3KQorK3ZvaWQKKytwdXNoX2xvbmcodTMyIHcpCisgeworLURCKAlpZiAoQ0hFQ0tfU1BfQUNDRVNTKCkpCistCSAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKy0JTS54ODYuUl9TUCAtPSA0OworLQkoKnN5c193cmwpKCgodTMyKU0ueDg2LlJfU1MgPDwgNCkgICsgTS54ODYuUl9TUCwgdyk7CisrICAgIERCKGlmIChDSEVDS19TUF9BQ0NFU1MoKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKysgICAgICAgIE0ueDg2LlJfU1AgLT0gNDsKKysgICAgKCpzeXNfd3JsKSAoKCh1MzIpIE0ueDg2LlJfU1MgPDwgNCkgKyBNLng4Ni5SX1NQLCB3KTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0yNjI2LDE1ICsyNzY3LDE2IEBAIFBvcHMgYSB3b3JkIGZyb20gdGhlIHN0YWNrLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcywgYXMgKCpzeXNfcmRYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBwb3Bfd29yZCh2b2lkKQorK3UxNgorK3BvcF93b3JkKHZvaWQpCisgeworLQlyZWdpc3RlciB1MTYgcmVzOworKyAgICByZWdpc3RlciB1MTYgcmVzOworIAorLURCKAlpZiAoQ0hFQ0tfU1BfQUNDRVNTKCkpCistCSAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKy0JcmVzID0gKCpzeXNfcmR3KSgoKHUzMilNLng4Ni5SX1NTIDw8IDQpICArIE0ueDg2LlJfU1ApOworLQlNLng4Ni5SX1NQICs9IDI7CistCXJldHVybiByZXM7CisrICAgIERCKGlmIChDSEVDS19TUF9BQ0NFU1MoKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKysgICAgICAgIHJlcyA9ICgqc3lzX3JkdykgKCgodTMyKSBNLng4Ni5SX1NTIDw8IDQpICsgTS54ODYuUl9TUCk7CisrICAgIE0ueDg2LlJfU1AgKz0gMjsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0yNjQzLDE0ICsyNzg1LDE1IEBAIFBvcHMgYSBsb25nIGZyb20gdGhlIHN0YWNrLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcywgYXMgKCpzeXNfcmRYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBwb3BfbG9uZyh2b2lkKQorK3UzMgorK3BvcF9sb25nKHZvaWQpCisgeworICAgICByZWdpc3RlciB1MzIgcmVzOworIAorLURCKAlpZiAoQ0hFQ0tfU1BfQUNDRVNTKCkpCistCSAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKy0JcmVzID0gKCpzeXNfcmRsKSgoKHUzMilNLng4Ni5SX1NTIDw8IDQpICArIE0ueDg2LlJfU1ApOworLQlNLng4Ni5SX1NQICs9IDQ7CisrICAgIERCKGlmIChDSEVDS19TUF9BQ0NFU1MoKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKysgICAgICAgIHJlcyA9ICgqc3lzX3JkbCkgKCgodTMyKSBNLng4Ni5SX1NTIDw8IDQpICsgTS54ODYuUl9TUCk7CisrICAgIE0ueDg2LlJfU1AgKz0gNDsKKyAgICAgcmV0dXJuIHJlczsKKyB9CisgCitAQCAtMjY1OCw0NSArMjgwMSw1OSBAQCBEQigJaWYgKENIRUNLX1NQX0FDQ0VTUygpKQorIFJFTUFSS1M6CisgQ1BVSUQgdGFrZXMgRUFYL0VDWCBhcyBpbnB1dHMsIHdyaXRlcyBFQVgvRUJYL0VDWC9FRFggYXMgb3V0cHV0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIGNwdWlkICh2b2lkKQorLXsKKy0JdTMyIGZlYXR1cmUgPSBNLng4Ni5SX0VBWDsKKy0KKy0Jc3dpdGNoIChmZWF0dXJlKSB7CistCWNhc2UgMDoKKy0JCS8qIFJlZ2FyZGxlc3MgaWYgd2UgaGF2ZSByZWFsIGRhdGEgZnJvbSB0aGUgaGFyZHdhcmUsIHRoZSBlbXVsYXRvcgorLQkJICogd2lsbCBvbmx5IHN1cHBvcnQgdXB0byBmZWF0dXJlIDEsIHdoaWNoIHdlIHNldCBpbiByZWdpc3RlciBFQVguCistCQkgKiBSZWdpc3RlcnMgRUJYOkVEWDpFQ1ggY29udGFpbiBhIHN0cmluZyBpZGVudGlmeWluZyB0aGUgQ1BVLgorLQkJICovCistCQlNLng4Ni5SX0VBWCA9IDE7CistCQkvKiBFQlg6RURYOkVDWCA9ICJHZW51aW5lSW50ZWwiICovCistCQlNLng4Ni5SX0VCWCA9IDB4NzU2ZTY1NDc7CistCQlNLng4Ni5SX0VEWCA9IDB4NDk2NTZlNjk7CistCQlNLng4Ni5SX0VDWCA9IDB4NmM2NTc0NmU7CistCQlicmVhazsKKy0JY2FzZSAxOgorLQkJLyogSWYgd2UgZG9uJ3QgaGF2ZSB4ODYgY29tcGF0aWJsZSBoYXJkd2FyZSwgd2UgcmV0dXJuIHZhbHVlcyBmcm9tIGFuCistCQkgKiBJbnRlbCA0ODZkeDQ7IHdoaWNoIHdhcyBvbmUgb2YgdGhlIGZpcnN0IHByb2Nlc3NvcnMgdG8gaGF2ZSBDUFVJRC4KKy0JCSAqLworLQkJTS54ODYuUl9FQVggPSAweDAwMDAwNDgwOworLQkJTS54ODYuUl9FQlggPSAweDAwMDAwMDAwOworLQkJTS54ODYuUl9FQ1ggPSAweDAwMDAwMDAwOworLQkJTS54ODYuUl9FRFggPSAweDAwMDAwMDAyOwkvKiBWTUUgKi8KKy0JCS8qIEluIHRoZSBjYXNlIHRoYXQgd2UgaGF2ZSBoYXJkd2FyZSBDUFVJRCBpbnN0cnVjdGlvbiwgd2UgbWFrZSBzdXJlCistCQkgKiB0aGF0IHRoZSBmZWF0dXJlcyByZXBvcnRlZCBhcmUgbGltaXRlZCB0byBUU0MgYW5kIFZNRS4KKy0JCSAqLworLQkJTS54ODYuUl9FRFggJj0gMHgwMDAwMDAxMjsKKy0JCWJyZWFrOworLQlkZWZhdWx0OgorLQkJLyogRmluYWxseSwgd2UgZG9uJ3Qgc3VwcG9ydCBhbnkgYWRkaXRpb25hbCBmZWF0dXJlcy4gIE1vc3QgQ1BVcworLQkJICogcmV0dXJuIGFsbCB6ZXJvcyB3aGVuIHF1ZXJpZWQgZm9yIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQgZmVhdHVyZQorLQkJICogbnVtYmVycy4KKy0JCSAqLworLQkJTS54ODYuUl9FQVggPSAwOworLQkJTS54ODYuUl9FQlggPSAwOworLQkJTS54ODYuUl9FQ1ggPSAwOworLQkJTS54ODYuUl9FRFggPSAwOworLQkJYnJlYWs7CistCX0KKy19Cisrdm9pZAorK2NwdWlkKHZvaWQpCisreworKyAgICB1MzIgZmVhdHVyZSA9IE0ueDg2LlJfRUFYOworIAorKyNpZmRlZiBYODZFTVVfSEFTX0hXX0NQVUlECisrICAgIC8qIElmIHRoZSBwbGF0Zm9ybSBhbGxvd3MgaXQsIHdlIHdpbGwgYmFzZSBvdXIgdmFsdWVzIG9uIHRoZSByZWFsCisrICAgICAqIHJlc3VsdHMgZnJvbSB0aGUgQ1BVSUQgaW5zdHJ1Y3Rpb24uICBXZSBsaW1pdCBzdXBwb3J0IHRvIHRoZQorKyAgICAgKiBmaXJzdCB0d28gZmVhdHVyZXMsIGFuZCB0aGUgcmVzdWx0cyBvZiB0aG9zZSBhcmUgc2FuaXRpemVkLgorKyAgICAgKi8KKysgICAgaWYgKGZlYXR1cmUgPD0gMSkKKysgICAgICAgIGh3X2NwdWlkKCZNLng4Ni5SX0VBWCwgJk0ueDg2LlJfRUJYLCAmTS54ODYuUl9FQ1gsICZNLng4Ni5SX0VEWCk7CisrI2VuZGlmCisrCisrICAgIHN3aXRjaCAoZmVhdHVyZSkgeworKyAgICBjYXNlIDA6CisrICAgICAgICAvKiBSZWdhcmRsZXNzIGlmIHdlIGhhdmUgcmVhbCBkYXRhIGZyb20gdGhlIGhhcmR3YXJlLCB0aGUgZW11bGF0b3IKKysgICAgICAgICAqIHdpbGwgb25seSBzdXBwb3J0IHVwdG8gZmVhdHVyZSAxLCB3aGljaCB3ZSBzZXQgaW4gcmVnaXN0ZXIgRUFYLgorKyAgICAgICAgICogUmVnaXN0ZXJzIEVCWDpFRFg6RUNYIGNvbnRhaW4gYSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIENQVS4KKysgICAgICAgICAqLworKyAgICAgICAgTS54ODYuUl9FQVggPSAxOworKyNpZm5kZWYgWDg2RU1VX0hBU19IV19DUFVJRAorKyAgICAgICAgLyogRUJYOkVEWDpFQ1ggPSAiR2VudWluZUludGVsIiAqLworKyAgICAgICAgTS54ODYuUl9FQlggPSAweDc1NmU2NTQ3OworKyAgICAgICAgTS54ODYuUl9FRFggPSAweDQ5NjU2ZTY5OworKyAgICAgICAgTS54ODYuUl9FQ1ggPSAweDZjNjU3NDZlOworKyNlbmRpZgorKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMToKKysjaWZuZGVmIFg4NkVNVV9IQVNfSFdfQ1BVSUQKKysgICAgICAgIC8qIElmIHdlIGRvbid0IGhhdmUgeDg2IGNvbXBhdGlibGUgaGFyZHdhcmUsIHdlIHJldHVybiB2YWx1ZXMgZnJvbSBhbgorKyAgICAgICAgICogSW50ZWwgNDg2ZHg0OyB3aGljaCB3YXMgb25lIG9mIHRoZSBmaXJzdCBwcm9jZXNzb3JzIHRvIGhhdmUgQ1BVSUQuCisrICAgICAgICAgKi8KKysgICAgICAgIE0ueDg2LlJfRUFYID0gMHgwMDAwMDQ4MDsKKysgICAgICAgIE0ueDg2LlJfRUJYID0gMHgwMDAwMDAwMDsKKysgICAgICAgIE0ueDg2LlJfRUNYID0gMHgwMDAwMDAwMDsKKysgICAgICAgIE0ueDg2LlJfRURYID0gMHgwMDAwMDAwMjsgICAgICAgLyogVk1FICovCisrI2Vsc2UKKysgICAgICAgIC8qIEluIHRoZSBjYXNlIHRoYXQgd2UgaGF2ZSBoYXJkd2FyZSBDUFVJRCBpbnN0cnVjdGlvbiwgd2UgbWFrZSBzdXJlCisrICAgICAgICAgKiB0aGF0IHRoZSBmZWF0dXJlcyByZXBvcnRlZCBhcmUgbGltaXRlZCB0byBUU0MgYW5kIFZNRS4KKysgICAgICAgICAqLworKyAgICAgICAgTS54ODYuUl9FRFggJj0gMHgwMDAwMDAxMjsKKysjZW5kaWYKKysgICAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgICAgLyogRmluYWxseSwgd2UgZG9uJ3Qgc3VwcG9ydCBhbnkgYWRkaXRpb25hbCBmZWF0dXJlcy4gIE1vc3QgQ1BVcworKyAgICAgICAgICogcmV0dXJuIGFsbCB6ZXJvcyB3aGVuIHF1ZXJpZWQgZm9yIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQgZmVhdHVyZQorKyAgICAgICAgICogbnVtYmVycy4KKysgICAgICAgICAqLworKyAgICAgICAgTS54ODYuUl9FQVggPSAwOworKyAgICAgICAgTS54ODYuUl9FQlggPSAwOworKyAgICAgICAgTS54ODYuUl9FQ1ggPSAwOworKyAgICAgICAgTS54ODYuUl9FRFggPSAwOworKyAgICAgICAgYnJlYWs7CisrICAgIH0KKyt9CitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUvc3lzLmMgYi9saWJzL3g4NmVtdS9zeXMuYworaW5kZXggNGQ5MGVhMy4uYzUxNGRkZSAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3N5cy5jCisrKysgYi9saWJzL3g4NmVtdS9zeXMuYworQEAgLTQ3LDIyMyArNDcsMTMzIEBACisgI2luY2x1ZGUgIng4NmVtdS9wcmltX29wcy5oIgorICNpZm5kZWYgTk9fU1lTX0hFQURFUlMKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CistI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHbG9iYWwgVmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrI2VuZGlmCisgCistWDg2RU1VX3N5c0VudgkJX1g4NkVNVV9lbnY7CQkvKiBHbG9iYWwgZW11bGF0b3IgbWFjaGluZSBzdGF0ZSAqLworLVg4NkVNVV9pbnRyRnVuY3MJX1g4NkVNVV9pbnRyVGFiWzI1Nl07CisrI2lmZGVmIF9fR05VQ19fCisgCistLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJbXBsZW1lbnRhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy0jaWYgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19hbHBoYSkKKy0vKiB0byBjb3BlIHdpdGggYnJva2VuIGVnY3MtMS4xLjIgOi0oKCgoICovCistCistI2RlZmluZSBBTFBIQV9VQUxPQURTCistLyoKKy0gKiBpbmxpbmUgZnVuY3Rpb25zIHRvIGRvIHVuYWxpZ25lZCBhY2Nlc3NlcworLSAqIGZyb20gbGludXgvaW5jbHVkZS9hc20tYWxwaGEvdW5hbGlnbmVkLmgKKy0gKi8KKy0KKy0vKgorLSAqIEVHQ1MgMS4xIGtub3dzIGFib3V0IGFyYml0cmFyeSB1bmFsaWduZWQgbG9hZHMuICBEZWZpbmUgc29tZQorLSAqIHBhY2tlZCBzdHJ1Y3R1cmVzIHRvIHRhbGsgYWJvdXQgc3VjaCB0aGluZ3Mgd2l0aC4KKy0gKi8KKy0KKy0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKChfX0dOVUNfXyA+IDIpIHx8IChfX0dOVUNfTUlOT1JfXyA+PSA5MSkpCistc3RydWN0IF9fdW5hX3U2NCB7IHVuc2lnbmVkIGxvbmcgIHggX19hdHRyaWJ1dGVfXygocGFja2VkKSk7IH07Cistc3RydWN0IF9fdW5hX3UzMiB7IHVuc2lnbmVkIGludCAgIHggX19hdHRyaWJ1dGVfXygocGFja2VkKSk7IH07Cistc3RydWN0IF9fdW5hX3UxNiB7IHVuc2lnbmVkIHNob3J0IHggX19hdHRyaWJ1dGVfXygocGFja2VkKSk7IH07CistI2VuZGlmCisrLyogRGVmaW5lIHNvbWUgcGFja2VkIHN0cnVjdHVyZXMgdG8gdXNlIHdpdGggdW5hbGlnbmVkIGFjY2Vzc2VzICovCisrCisrc3RydWN0IF9fdW5hX3U2NCB7CisrICAgIHU2NCB4IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKyt9OworK3N0cnVjdCBfX3VuYV91MzIgeworKyAgICB1MzIgeCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisrfTsKKytzdHJ1Y3QgX191bmFfdTE2IHsKKysgICAgdTE2IHggX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworK307CisrCisrLyogRWxlbWVudGFsIHVuYWxpZ25lZCBsb2FkcyAqLworIAorLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbGRxX3UodW5zaWduZWQgbG9uZyAqIHIxMSkKKytzdGF0aWMgX19pbmxpbmVfXyB1NjQKKytsZHFfdSh1NjQgKiBwKQorIHsKKy0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKChfX0dOVUNfXyA+IDIpIHx8IChfX0dOVUNfTUlOT1JfXyA+PSA5MSkpCistCWNvbnN0IHN0cnVjdCBfX3VuYV91NjQgKnB0ciA9IChjb25zdCBzdHJ1Y3QgX191bmFfdTY0ICopIHIxMTsKKy0JcmV0dXJuIHB0ci0+eDsKKy0jZWxzZQorLQl1bnNpZ25lZCBsb25nIHIxLHIyOworLQlfX2FzbV9fKCJsZHFfdSAlMCwlM1xuXHQiCistCQkibGRxX3UgJTEsJTRcblx0IgorLQkJImV4dHFsICUwLCUyLCUwXG5cdCIKKy0JCSJleHRxaCAlMSwlMiwlMSIKKy0JCToiPSZyIiAocjEpLCAiPSZyIiAocjIpCistCQk6InIiIChyMTEpLAorLQkJICJtIiAoKnIxMSksCistCQkgIm0iICgqKGNvbnN0IHVuc2lnbmVkIGxvbmcgKikoNysoY2hhciAqKSByMTEpKSk7CistCXJldHVybiByMSB8IHIyOworLSNlbmRpZgorKyAgICBjb25zdCBzdHJ1Y3QgX191bmFfdTY0ICpwdHIgPSAoY29uc3Qgc3RydWN0IF9fdW5hX3U2NCAqKSBwOworKworKyAgICByZXR1cm4gcHRyLT54OworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxkbF91KHVuc2lnbmVkIGludCAqIHIxMSkKKytzdGF0aWMgX19pbmxpbmVfXyB1MzIKKytsZGxfdSh1MzIgKiBwKQorIHsKKy0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKChfX0dOVUNfXyA+IDIpIHx8IChfX0dOVUNfTUlOT1JfXyA+PSA5MSkpCistCWNvbnN0IHN0cnVjdCBfX3VuYV91MzIgKnB0ciA9IChjb25zdCBzdHJ1Y3QgX191bmFfdTMyICopIHIxMTsKKy0JcmV0dXJuIHB0ci0+eDsKKy0jZWxzZQorLQl1bnNpZ25lZCBsb25nIHIxLHIyOworLQlfX2FzbV9fKCJsZHFfdSAlMCwlM1xuXHQiCistCQkibGRxX3UgJTEsJTRcblx0IgorLQkJImV4dGxsICUwLCUyLCUwXG5cdCIKKy0JCSJleHRsaCAlMSwlMiwlMSIKKy0JCToiPSZyIiAocjEpLCAiPSZyIiAocjIpCistCQk6InIiIChyMTEpLAorLQkJICJtIiAoKnIxMSksCistCQkgIm0iICgqKGNvbnN0IHVuc2lnbmVkIGxvbmcgKikoMysoY2hhciAqKSByMTEpKSk7CistCXJldHVybiByMSB8IHIyOworLSNlbmRpZgorKyAgICBjb25zdCBzdHJ1Y3QgX191bmFfdTMyICpwdHIgPSAoY29uc3Qgc3RydWN0IF9fdW5hX3UzMiAqKSBwOworKworKyAgICByZXR1cm4gcHRyLT54OworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxkd191KHVuc2lnbmVkIHNob3J0ICogcjExKQorK3N0YXRpYyBfX2lubGluZV9fIHUxNgorK2xkd191KHUxNiAqIHApCisgeworLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKF9fR05VQ19fID4gMikgfHwgKF9fR05VQ19NSU5PUl9fID49IDkxKSkKKy0JY29uc3Qgc3RydWN0IF9fdW5hX3UxNiAqcHRyID0gKGNvbnN0IHN0cnVjdCBfX3VuYV91MTYgKikgcjExOworLQlyZXR1cm4gcHRyLT54OworLSNlbHNlCistCXVuc2lnbmVkIGxvbmcgcjEscjI7CistCV9fYXNtX18oImxkcV91ICUwLCUzXG5cdCIKKy0JCSJsZHFfdSAlMSwlNFxuXHQiCistCQkiZXh0d2wgJTAsJTIsJTBcblx0IgorLQkJImV4dHdoICUxLCUyLCUxIgorLQkJOiI9JnIiIChyMSksICI9JnIiIChyMikKKy0JCToiciIgKHIxMSksCistCQkgIm0iICgqcjExKSwKKy0JCSAibSIgKCooY29uc3QgdW5zaWduZWQgbG9uZyAqKSgxKyhjaGFyICopIHIxMSkpKTsKKy0JcmV0dXJuIHIxIHwgcjI7CistI2VuZGlmCisrICAgIGNvbnN0IHN0cnVjdCBfX3VuYV91MTYgKnB0ciA9IChjb25zdCBzdHJ1Y3QgX191bmFfdTE2ICopIHA7CisrCisrICAgIHJldHVybiBwdHItPng7CisgfQorIAorLS8qCistICogRWxlbWVudGFsIHVuYWxpZ25lZCBzdG9yZXMgCistICovCisrLyogRWxlbWVudGFsIHVuYWxpZ25lZCBzdG9yZXMgKi8KKyAKKy1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHN0cV91KHVuc2lnbmVkIGxvbmcgcjUsIHVuc2lnbmVkIGxvbmcgKiByMTEpCisrc3RhdGljIF9faW5saW5lX18gdm9pZAorK3N0cV91KHU2NCB2YWwsIHU2NCAqIHApCisgeworLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKF9fR05VQ19fID4gMikgfHwgKF9fR05VQ19NSU5PUl9fID49IDkxKSkKKy0Jc3RydWN0IF9fdW5hX3U2NCAqcHRyID0gKHN0cnVjdCBfX3VuYV91NjQgKikgcjExOworLQlwdHItPnggPSByNTsKKy0jZWxzZQorLQl1bnNpZ25lZCBsb25nIHIxLHIyLHIzLHI0OworLQorLQlfX2FzbV9fKCJsZHFfdSAlMywlMVxuXHQiCistCQkibGRxX3UgJTIsJTBcblx0IgorLQkJImluc3FoICU2LCU3LCU1XG5cdCIKKy0JCSJpbnNxbCAlNiwlNywlNFxuXHQiCistCQkibXNrcWggJTMsJTcsJTNcblx0IgorLQkJIm1za3FsICUyLCU3LCUyXG5cdCIKKy0JCSJiaXMgJTMsJTUsJTNcblx0IgorLQkJImJpcyAlMiwlNCwlMlxuXHQiCistCQkic3RxX3UgJTMsJTFcblx0IgorLQkJInN0cV91ICUyLCUwIgorLQkJOiI9bSIgKCpyMTEpLAorLQkJICI9bSIgKCoodW5zaWduZWQgbG9uZyAqKSg3KyhjaGFyICopIHIxMSkpLAorLQkJICI9JnIiIChyMSksICI9JnIiIChyMiksICI9JnIiIChyMyksICI9JnIiIChyNCkKKy0JCToiciIgKHI1KSwgInIiIChyMTEpKTsKKy0jZW5kaWYKKysgICAgc3RydWN0IF9fdW5hX3U2NCAqcHRyID0gKHN0cnVjdCBfX3VuYV91NjQgKikgcDsKKysKKysgICAgcHRyLT54ID0gdmFsOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHN0bF91KHVuc2lnbmVkIGxvbmcgcjUsIHVuc2lnbmVkIGludCAqIHIxMSkKKytzdGF0aWMgX19pbmxpbmVfXyB2b2lkCisrc3RsX3UodTMyIHZhbCwgdTMyICogcCkKKyB7CistI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoX19HTlVDX18gPiAyKSB8fCAoX19HTlVDX01JTk9SX18gPj0gOTEpKQorLQlzdHJ1Y3QgX191bmFfdTMyICpwdHIgPSAoc3RydWN0IF9fdW5hX3UzMiAqKSByMTE7CistCXB0ci0+eCA9IHI1OworLSNlbHNlCistCXVuc2lnbmVkIGxvbmcgcjEscjIscjMscjQ7CistCistCV9fYXNtX18oImxkcV91ICUzLCUxXG5cdCIKKy0JCSJsZHFfdSAlMiwlMFxuXHQiCistCQkiaW5zbGggJTYsJTcsJTVcblx0IgorLQkJImluc2xsICU2LCU3LCU0XG5cdCIKKy0JCSJtc2tsaCAlMywlNywlM1xuXHQiCistCQkibXNrbGwgJTIsJTcsJTJcblx0IgorLQkJImJpcyAlMywlNSwlM1xuXHQiCistCQkiYmlzICUyLCU0LCUyXG5cdCIKKy0JCSJzdHFfdSAlMywlMVxuXHQiCistCQkic3RxX3UgJTIsJTAiCistCQk6Ij1tIiAoKnIxMSksCistCQkgIj1tIiAoKih1bnNpZ25lZCBsb25nICopKDMrKGNoYXIgKikgcjExKSksCistCQkgIj0mciIgKHIxKSwgIj0mciIgKHIyKSwgIj0mciIgKHIzKSwgIj0mciIgKHI0KQorLQkJOiJyIiAocjUpLCAiciIgKHIxMSkpOworLSNlbmRpZgorKyAgICBzdHJ1Y3QgX191bmFfdTMyICpwdHIgPSAoc3RydWN0IF9fdW5hX3UzMiAqKSBwOworKworKyAgICBwdHItPnggPSB2YWw7CisgfQorIAorLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgc3R3X3UodW5zaWduZWQgbG9uZyByNSwgdW5zaWduZWQgc2hvcnQgKiByMTEpCisrc3RhdGljIF9faW5saW5lX18gdm9pZAorK3N0d191KHUxNiB2YWwsIHUxNiAqIHApCisgeworLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKF9fR05VQ19fID4gMikgfHwgKF9fR05VQ19NSU5PUl9fID49IDkxKSkKKy0Jc3RydWN0IF9fdW5hX3UxNiAqcHRyID0gKHN0cnVjdCBfX3VuYV91MTYgKikgcjExOworLQlwdHItPnggPSByNTsKKy0jZWxzZQorLQl1bnNpZ25lZCBsb25nIHIxLHIyLHIzLHI0OworLQorLQlfX2FzbV9fKCJsZHFfdSAlMywlMVxuXHQiCistCQkibGRxX3UgJTIsJTBcblx0IgorLQkJImluc3doICU2LCU3LCU1XG5cdCIKKy0JCSJpbnN3bCAlNiwlNywlNFxuXHQiCistCQkibXNrd2ggJTMsJTcsJTNcblx0IgorLQkJIm1za3dsICUyLCU3LCUyXG5cdCIKKy0JCSJiaXMgJTMsJTUsJTNcblx0IgorLQkJImJpcyAlMiwlNCwlMlxuXHQiCistCQkic3RxX3UgJTMsJTFcblx0IgorLQkJInN0cV91ICUyLCUwIgorLQkJOiI9bSIgKCpyMTEpLAorLQkJICI9bSIgKCoodW5zaWduZWQgbG9uZyAqKSgxKyhjaGFyICopIHIxMSkpLAorLQkJICI9JnIiIChyMSksICI9JnIiIChyMiksICI9JnIiIChyMyksICI9JnIiIChyNCkKKy0JCToiciIgKHI1KSwgInIiIChyMTEpKTsKKy0jZW5kaWYKKysgICAgc3RydWN0IF9fdW5hX3UxNiAqcHRyID0gKHN0cnVjdCBfX3VuYV91MTYgKikgcDsKKysKKysgICAgcHRyLT54ID0gdmFsOworIH0KKysjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFfX0dOVUNfXyAqLworIAorLSNlbGlmIGRlZmluZWQoX19HTlVDX18pICYmICgoX19HTlVDX18gPCAzKSkgJiYgXAorLSAgICAgICAgICAgICAoZGVmaW5lZCAoX19pYTY0X18pIHx8IGRlZmluZWQgKGlhNjRfXykpCistI2RlZmluZSBJQTY0X1VBTE9BRFMKKy0vKgorLSAqIEVHQ1MgMS4xIGtub3dzIGFib3V0IGFyYml0cmFyeSB1bmFsaWduZWQgbG9hZHMuICBEZWZpbmUgc29tZQorLSAqIHBhY2tlZCBzdHJ1Y3R1cmVzIHRvIHRhbGsgYWJvdXQgc3VjaCB0aGluZ3Mgd2l0aC4KKy0gKi8KKy1zdHJ1Y3QgX191bmFfdTY0IHsgdW5zaWduZWQgbG9uZyAgeCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsgfTsKKy1zdHJ1Y3QgX191bmFfdTMyIHsgdW5zaWduZWQgaW50ICAgeCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsgfTsKKy1zdHJ1Y3QgX191bmFfdTE2IHsgdW5zaWduZWQgc2hvcnQgeCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsgfTsKKy0KKy1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nCistX191bGRxIChjb25zdCB1bnNpZ25lZCBsb25nICogcjExKQorK3N0YXRpYyBfX2lubGluZV9fIHU2NAorK2xkcV91KHU2NCAqIHApCisgeworLSAgICBjb25zdCBzdHJ1Y3QgX191bmFfdTY0ICpwdHIgPSAoY29uc3Qgc3RydWN0IF9fdW5hX3U2NCAqKSByMTE7CistICAgIHJldHVybiBwdHItPng7CisrICAgIHU2NCByZXQ7CisrCisrICAgIG1lbW1vdmUoJnJldCwgcCwgc2l6ZW9mKCpwKSk7CisrICAgIHJldHVybiByZXQ7CisgfQorIAorLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKKy11bGRsIChjb25zdCB1bnNpZ25lZCBpbnQgKiByMTEpCisrc3RhdGljIF9faW5saW5lX18gdTMyCisrbGRsX3UodTMyICogcCkKKyB7CistICAgIGNvbnN0IHN0cnVjdCBfX3VuYV91MzIgKnB0ciA9IChjb25zdCBzdHJ1Y3QgX191bmFfdTMyICopIHIxMTsKKy0gICAgcmV0dXJuIHB0ci0+eDsKKysgICAgdTMyIHJldDsKKysKKysgICAgbWVtbW92ZSgmcmV0LCBwLCBzaXplb2YoKnApKTsKKysgICAgcmV0dXJuIHJldDsKKyB9CisgCistc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZworLXVsZHcgKGNvbnN0IHVuc2lnbmVkIHNob3J0ICogcjExKQorK3N0YXRpYyBfX2lubGluZV9fIHUxNgorK2xkd191KHUxNiAqIHApCisgeworLSAgICBjb25zdCBzdHJ1Y3QgX191bmFfdTE2ICpwdHIgPSAoY29uc3Qgc3RydWN0IF9fdW5hX3UxNiAqKSByMTE7CistICAgIHJldHVybiBwdHItPng7CisrICAgIHUxNiByZXQ7CisrCisrICAgIG1lbW1vdmUoJnJldCwgcCwgc2l6ZW9mKCpwKSk7CisrICAgIHJldHVybiByZXQ7CisgfQorIAorIHN0YXRpYyBfX2lubGluZV9fIHZvaWQKKy11c3RxICh1bnNpZ25lZCBsb25nIHI1LCB1bnNpZ25lZCBsb25nICogcjExKQorK3N0cV91KHU2NCB2YWwsIHU2NCAqIHApCisgeworLSAgICBzdHJ1Y3QgX191bmFfdTY0ICpwdHIgPSAoc3RydWN0IF9fdW5hX3U2NCAqKSByMTE7CistICAgIHB0ci0+eCA9IHI1OworKyAgICB1NjQgdG1wID0gdmFsOworKworKyAgICBtZW1tb3ZlKHAsICZ0bXAsIHNpemVvZigqcCkpOworIH0KKyAKKyBzdGF0aWMgX19pbmxpbmVfXyB2b2lkCistdXN0bCAodW5zaWduZWQgbG9uZyByNSwgdW5zaWduZWQgaW50ICogcjExKQorK3N0bF91KHUzMiB2YWwsIHUzMiAqIHApCisgeworLSAgICBzdHJ1Y3QgX191bmFfdTMyICpwdHIgPSAoc3RydWN0IF9fdW5hX3UzMiAqKSByMTE7CistICAgIHB0ci0+eCA9IHI1OworKyAgICB1MzIgdG1wID0gdmFsOworKworKyAgICBtZW1tb3ZlKHAsICZ0bXAsIHNpemVvZigqcCkpOworIH0KKyAKKyBzdGF0aWMgX19pbmxpbmVfXyB2b2lkCistdXN0dyAodW5zaWduZWQgbG9uZyByNSwgdW5zaWduZWQgc2hvcnQgKiByMTEpCisrc3R3X3UodTE2IHZhbCwgdTE2ICogcCkKKyB7CistICAgIHN0cnVjdCBfX3VuYV91MTYgKnB0ciA9IChzdHJ1Y3QgX191bmFfdTE2ICopIHIxMTsKKy0gICAgcHRyLT54ID0gcjU7CisrICAgIHUxNiB0bXAgPSB2YWw7CisrCisrICAgIG1lbW1vdmUocCwgJnRtcCwgc2l6ZW9mKCpwKSk7CisgfQorIAorLSNlbmRpZgorKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19HTlVDX18gKi8KKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsIFZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKworK1g4NkVNVV9zeXNFbnYgX1g4NkVNVV9lbnY7ICAgICAgLyogR2xvYmFsIGVtdWxhdG9yIG1hY2hpbmUgc3RhdGUgKi8KKytYODZFTVVfaW50ckZ1bmNzIF9YODZFTVVfaW50clRhYlsyNTZdOworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSW1wbGVtZW50YXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBQQVJBTUVURVJTOgorQEAgLTI3NSwxOSArMTg1LDIwIEBAIEJ5dGUgdmFsdWUgcmVhZCBmcm9tIGVtdWxhdG9yIG1lbW9yeS4KKyBSRU1BUktTOgorIFJlYWRzIGEgYnl0ZSB2YWx1ZSBmcm9tIHRoZSBlbXVsYXRvciBtZW1vcnkuIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggWDg2QVBJIHJkYigKKy0gICAgdTMyIGFkZHIpCisrdTggWDg2QVBJCisrcmRiKHUzMiBhZGRyKQorIHsKKy0JdTggdmFsOworLQorLQlpZiAoYWRkciA+IE0ubWVtX3NpemUgLSAxKSB7CistCQlEQihwcmludGsoIm1lbV9yZWFkOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7KQorLQkJSEFMVF9TWVMoKTsKKy0JCX0KKy0JdmFsID0gKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyKTsKKy1EQigJaWYgKERFQlVHX01FTV9UUkFDRSgpKQorLQkJcHJpbnRrKCIlIzA4eCAxIC0+ICUjeFxuIiwgYWRkciwgdmFsKTspCistCXJldHVybiB2YWw7CisrICAgIHU4IHZhbDsKKysKKysgICAgaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gMSkgeworKyAgICAgICAgREIocHJpbnRrKCJtZW1fcmVhZDogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOworKyAgICAgICAgICAgICkKKysgICAgICAgICAgICBIQUxUX1NZUygpOworKyAgICB9CisrICAgIHZhbCA9ICoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyKTsKKysgICAgREIoaWYgKERFQlVHX01FTV9UUkFDRSgpKQorKyAgICAgICBwcmludGsoIiUjMDh4IDEgLT4gJSN4XG4iLCBhZGRyLCB2YWwpOykKKysgICAgICAgIHJldHVybiB2YWw7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMzAwLDMyICsyMTEsMjcgQEAgV29yZCB2YWx1ZSByZWFkIGZyb20gZW11bGF0b3IgbWVtb3J5LgorIFJFTUFSS1M6CisgUmVhZHMgYSB3b3JkIHZhbHVlIGZyb20gdGhlIGVtdWxhdG9yIG1lbW9yeS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBYODZBUEkgcmR3KAorLQl1MzIgYWRkcikKKyt1MTYgWDg2QVBJCisrcmR3KHUzMiBhZGRyKQorIHsKKy0JdTE2IHZhbCA9IDA7CisrICAgIHUxNiB2YWwgPSAwOworIAorLQlpZiAoYWRkciA+IE0ubWVtX3NpemUgLSAyKSB7CistCQlEQihwcmludGsoIm1lbV9yZWFkOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7KQorLQkJSEFMVF9TWVMoKTsKKy0JCX0KKysgICAgaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gMikgeworKyAgICAgICAgREIocHJpbnRrKCJtZW1fcmVhZDogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOworKyAgICAgICAgICAgICkKKysgICAgICAgICAgICBIQUxUX1NZUygpOworKyAgICB9CisgI2lmZGVmIF9fQklHX0VORElBTl9fCistCWlmIChhZGRyICYgMHgxKSB7CistCQl2YWwgPSAoKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyKSB8CistCQkJICAoKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMSkgPDwgOCkpOworLQkJfQorLQllbHNlCistI2VuZGlmCistI2lmIGRlZmluZWQoQUxQSEFfVUFMT0FEUykKKy0JCXZhbCA9IGxkd191KCh1MTYqKShNLm1lbV9iYXNlICsgYWRkcikpOworLSNlbGlmICBkZWZpbmVkKElBNjRfVUFMT0FEUykKKy0gICAgICB2YWwgPSB1bGR3KCh1MTYqKShNLm1lbV9iYXNlICsgYWRkcikpOworLSNlbHNlCistCQl2YWwgPSAqKHUxNiopKE0ubWVtX2Jhc2UgKyBhZGRyKTsKKysgICAgaWYgKGFkZHIgJiAweDEpIHsKKysgICAgICAgIHZhbCA9ICgqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkcikgfAorKyAgICAgICAgICAgICAgICgqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkciArIDEpIDw8IDgpKTsKKysgICAgfQorKyAgICBlbHNlCisgI2VuZGlmCistCQlEQigJaWYgKERFQlVHX01FTV9UUkFDRSgpKQorLQkJcHJpbnRrKCIlIzA4eCAyIC0+ICUjeFxuIiwgYWRkciwgdmFsKTspCistICAgIHJldHVybiB2YWw7CisrICAgICAgICB2YWwgPSBsZHdfdSgodTE2ICopIChNLm1lbV9iYXNlICsgYWRkcikpOworKyAgICBEQihpZiAoREVCVUdfTUVNX1RSQUNFKCkpCisrICAgICAgIHByaW50aygiJSMwOHggMiAtPiAlI3hcbiIsIGFkZHIsIHZhbCk7KQorKyAgICAgICAgcmV0dXJuIHZhbDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0zMzcsMzQgKzI0MywyOSBAQCBMb25nIHZhbHVlIHJlYWQgZnJvbSBlbXVsYXRvciBtZW1vcnkuCisgUkVNQVJLUzoKKyBSZWFkcyBhIGxvbmcgdmFsdWUgZnJvbSB0aGUgZW11bGF0b3IgbWVtb3J5LiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBYODZBUEkgcmRsKAorLQl1MzIgYWRkcikKKyt1MzIgWDg2QVBJCisrcmRsKHUzMiBhZGRyKQorIHsKKy0JdTMyIHZhbCA9IDA7CisrICAgIHUzMiB2YWwgPSAwOworIAorLQlpZiAoYWRkciA+IE0ubWVtX3NpemUgLSA0KSB7CistCQlEQihwcmludGsoIm1lbV9yZWFkOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7KQorLQkJSEFMVF9TWVMoKTsKKy0JCX0KKysgICAgaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gNCkgeworKyAgICAgICAgREIocHJpbnRrKCJtZW1fcmVhZDogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOworKyAgICAgICAgICAgICkKKysgICAgICAgICAgICBIQUxUX1NZUygpOworKyAgICB9CisgI2lmZGVmIF9fQklHX0VORElBTl9fCistCWlmIChhZGRyICYgMHgzKSB7CistCQl2YWwgPSAoKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMCkgfAorLQkJCSAgKCoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDEpIDw8IDgpIHwKKy0JCQkgICgqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAyKSA8PCAxNikgfAorLQkJCSAgKCoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDMpIDw8IDI0KSk7CistCQl9CistCWVsc2UKKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChBTFBIQV9VQUxPQURTKQorLQkJdmFsID0gbGRsX3UoKHUzMiopKE0ubWVtX2Jhc2UgKyBhZGRyKSk7CistI2VsaWYgIGRlZmluZWQoSUE2NF9VQUxPQURTKQorLSAgICAgICAgdmFsID0gdWxkbCgodTMyKikoTS5tZW1fYmFzZSArIGFkZHIpKTsKKy0jZWxzZQorLQkJdmFsID0gKih1MzIqKShNLm1lbV9iYXNlICsgYWRkcik7CisrICAgIGlmIChhZGRyICYgMHgzKSB7CisrICAgICAgICB2YWwgPSAoKih1OCAqKSAoTS5tZW1fYmFzZSArIGFkZHIgKyAwKSB8CisrICAgICAgICAgICAgICAgKCoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMSkgPDwgOCkgfAorKyAgICAgICAgICAgICAgICgqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkciArIDIpIDw8IDE2KSB8CisrICAgICAgICAgICAgICAgKCoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMykgPDwgMjQpKTsKKysgICAgfQorKyAgICBlbHNlCisgI2VuZGlmCistREIoCWlmIChERUJVR19NRU1fVFJBQ0UoKSkKKy0JCXByaW50aygiJSMwOHggNCAtPiAlI3hcbiIsIGFkZHIsIHZhbCk7KQorLQlyZXR1cm4gdmFsOworKyAgICAgICAgdmFsID0gbGRsX3UoKHUzMiAqKSAoTS5tZW1fYmFzZSArIGFkZHIpKTsKKysgICAgREIoaWYgKERFQlVHX01FTV9UUkFDRSgpKQorKyAgICAgICBwcmludGsoIiUjMDh4IDQgLT4gJSN4XG4iLCBhZGRyLCB2YWwpOykKKysgICAgICAgIHJldHVybiB2YWw7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMzc1LDE3ICsyNzYsMTcgQEAgdmFsCQktIFZhbHVlIHRvIHN0b3JlCisgUkVNQVJLUzoKKyBXcml0ZXMgYSBieXRlIHZhbHVlIHRvIGVtdWxhdG9yIG1lbW9yeS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgWDg2QVBJIHdyYigKKy0JdTMyIGFkZHIsCistCXU4IHZhbCkKKyt2b2lkIFg4NkFQSQorK3dyYih1MzIgYWRkciwgdTggdmFsKQorIHsKKy1EQigJaWYgKERFQlVHX01FTV9UUkFDRSgpKQorLQkJcHJpbnRrKCIlIzA4eCAxIDwtICUjeFxuIiwgYWRkciwgdmFsKTspCistICAgIGlmIChhZGRyID4gTS5tZW1fc2l6ZSAtIDEpIHsKKy0JCURCKHByaW50aygibWVtX3dyaXRlOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7KQorLQkJSEFMVF9TWVMoKTsKKy0JCX0KKy0JKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyKSA9IHZhbDsKKysgICAgREIoaWYgKERFQlVHX01FTV9UUkFDRSgpKQorKyAgICAgICBwcmludGsoIiUjMDh4IDEgPC0gJSN4XG4iLCBhZGRyLCB2YWwpOykKKysgICAgICAgIGlmIChhZGRyID4gTS5tZW1fc2l6ZSAtIDEpIHsKKysgICAgICAgICAgICBEQihwcmludGsoIm1lbV93cml0ZTogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOworKyAgICAgICAgICAgICAgICApCisrICAgICAgICAgICAgICAgIEhBTFRfU1lTKCk7CisrICAgICAgICB9CisrICAgICoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyKSA9IHZhbDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0zOTYsMzAgKzI5NywyNCBAQCB2YWwJCS0gVmFsdWUgdG8gc3RvcmUKKyBSRU1BUktTOgorIFdyaXRlcyBhIHdvcmQgdmFsdWUgdG8gZW11bGF0b3IgbWVtb3J5LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBYODZBUEkgd3J3KAorLQl1MzIgYWRkciwKKy0JdTE2IHZhbCkKKyt2b2lkIFg4NkFQSQorK3dydyh1MzIgYWRkciwgdTE2IHZhbCkKKyB7CistREIoCWlmIChERUJVR19NRU1fVFJBQ0UoKSkKKy0JCXByaW50aygiJSMwOHggMiA8LSAlI3hcbiIsIGFkZHIsIHZhbCk7KQorLQlpZiAoYWRkciA+IE0ubWVtX3NpemUgLSAyKSB7CistCQlEQihwcmludGsoIm1lbV93cml0ZTogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOykKKy0JCUhBTFRfU1lTKCk7CistCQl9CisrICAgIERCKGlmIChERUJVR19NRU1fVFJBQ0UoKSkKKysgICAgICAgcHJpbnRrKCIlIzA4eCAyIDwtICUjeFxuIiwgYWRkciwgdmFsKTspCisrICAgICAgICBpZiAoYWRkciA+IE0ubWVtX3NpemUgLSAyKSB7CisrICAgICAgICAgICAgREIocHJpbnRrKCJtZW1fd3JpdGU6IGFkZHJlc3MgJSNseCBvdXQgb2YgcmFuZ2UhXG4iLCBhZGRyKTsKKysgICAgICAgICAgICAgICAgKQorKyAgICAgICAgICAgICAgICBIQUxUX1NZUygpOworKyAgICAgICAgfQorICNpZmRlZiBfX0JJR19FTkRJQU5fXworLQlpZiAoYWRkciAmIDB4MSkgeworLQkJKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMCkgPSAodmFsID4+IDApICYgMHhmZjsKKy0JCSoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDEpID0gKHZhbCA+PiA4KSAmIDB4ZmY7CistCQl9CistCWVsc2UKKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChBTFBIQV9VQUxPQURTKQorLQkgc3R3X3UodmFsLCh1MTYqKShNLm1lbV9iYXNlICsgYWRkcikpOworLSNlbGlmIGRlZmluZWQoSUE2NF9VQUxPQURTKQorLSAgICAgdXN0dyh2YWwsKHUxNiopKE0ubWVtX2Jhc2UgKyBhZGRyKSk7CistI2Vsc2UKKy0JICoodTE2KikoTS5tZW1fYmFzZSArIGFkZHIpID0gdmFsOworKyAgICBpZiAoYWRkciAmIDB4MSkgeworKyAgICAgICAgKih1OCAqKSAoTS5tZW1fYmFzZSArIGFkZHIgKyAwKSA9ICh2YWwgPj4gMCkgJiAweGZmOworKyAgICAgICAgKih1OCAqKSAoTS5tZW1fYmFzZSArIGFkZHIgKyAxKSA9ICh2YWwgPj4gOCkgJiAweGZmOworKyAgICB9CisrICAgIGVsc2UKKyAjZW5kaWYKKysgICAgICAgIHN0d191KHZhbCwgKHUxNiAqKSAoTS5tZW1fYmFzZSArIGFkZHIpKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC00MzAsMzIgKzMyNSwyNiBAQCB2YWwJCS0gVmFsdWUgdG8gc3RvcmUKKyBSRU1BUktTOgorIFdyaXRlcyBhIGxvbmcgdmFsdWUgdG8gZW11bGF0b3IgbWVtb3J5LiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgWDg2QVBJIHdybCgKKy0JdTMyIGFkZHIsCistCXUzMiB2YWwpCisrdm9pZCBYODZBUEkKKyt3cmwodTMyIGFkZHIsIHUzMiB2YWwpCisgeworLURCKAlpZiAoREVCVUdfTUVNX1RSQUNFKCkpCistCQlwcmludGsoIiUjMDh4IDQgPC0gJSN4XG4iLCBhZGRyLCB2YWwpOykKKy0JaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gNCkgeworLQkJREIocHJpbnRrKCJtZW1fd3JpdGU6IGFkZHJlc3MgJSNseCBvdXQgb2YgcmFuZ2UhXG4iLCBhZGRyKTspCistCQlIQUxUX1NZUygpOworLQkJfQorKyAgICBEQihpZiAoREVCVUdfTUVNX1RSQUNFKCkpCisrICAgICAgIHByaW50aygiJSMwOHggNCA8LSAlI3hcbiIsIGFkZHIsIHZhbCk7KQorKyAgICAgICAgaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gNCkgeworKyAgICAgICAgICAgIERCKHByaW50aygibWVtX3dyaXRlOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7CisrICAgICAgICAgICAgICAgICkKKysgICAgICAgICAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgICAgIH0KKyAjaWZkZWYgX19CSUdfRU5ESUFOX18KKy0JaWYgKGFkZHIgJiAweDEpIHsKKy0JCSoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDApID0gKHZhbCA+PiAgMCkgJiAweGZmOworLQkJKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMSkgPSAodmFsID4+ICA4KSAmIDB4ZmY7CistCQkqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAyKSA9ICh2YWwgPj4gMTYpICYgMHhmZjsKKy0JCSoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDMpID0gKHZhbCA+PiAyNCkgJiAweGZmOworLQkJfQorLQllbHNlCistI2VuZGlmCistI2lmIGRlZmluZWQoQUxQSEFfVUFMT0FEUykKKy0JIHN0bF91KHZhbCwodTMyKikoTS5tZW1fYmFzZSArIGFkZHIpKTsKKy0jZWxpZiBkZWZpbmVkKElBNjRfVUFMT0FEUykKKy0gICAgIHVzdGwodmFsLCh1MzIqKShNLm1lbV9iYXNlICsgYWRkcikpOworLSNlbHNlCistCSAqKHUzMiopKE0ubWVtX2Jhc2UgKyBhZGRyKSA9IHZhbDsKKysgICAgaWYgKGFkZHIgJiAweDEpIHsKKysgICAgICAgICoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMCkgPSAodmFsID4+IDApICYgMHhmZjsKKysgICAgICAgICoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMSkgPSAodmFsID4+IDgpICYgMHhmZjsKKysgICAgICAgICoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMikgPSAodmFsID4+IDE2KSAmIDB4ZmY7CisrICAgICAgICAqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkciArIDMpID0gKHZhbCA+PiAyNCkgJiAweGZmOworKyAgICB9CisrICAgIGVsc2UKKyAjZW5kaWYKKysgICAgICAgIHN0bF91KHZhbCwgKHUzMiAqKSAoTS5tZW1fYmFzZSArIGFkZHIpKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC00NjYsMTIgKzM1NSwxMiBAQCBSRVRVUk46CisgUkVNQVJLUzoKKyBEZWZhdWx0IFBJTyBieXRlIHJlYWQgZnVuY3Rpb24uIERvZXNuJ3QgcGVyZm9ybSByZWFsIGluYi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB1OCBYODZBUEkgcF9pbmIoCistCVg4NkVNVV9waW9BZGRyIGFkZHIpCisrc3RhdGljIHU4IFg4NkFQSQorK3BfaW5iKFg4NkVNVV9waW9BZGRyIGFkZHIpCisgeworLURCKAlpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKy0JCXByaW50aygiaW5iICUjMDR4IFxuIiwgYWRkcik7KQorLQlyZXR1cm4gMDsKKysgICAgREIoaWYgKERFQlVHX0lPX1RSQUNFKCkpCisrICAgICAgIHByaW50aygiaW5iICUjMDR4IFxuIiwgYWRkcik7KQorKyAgICAgICAgcmV0dXJuIDA7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNDgyLDEyICszNzEsMTIgQEAgUkVUVVJOOgorIFJFTUFSS1M6CisgRGVmYXVsdCBQSU8gd29yZCByZWFkIGZ1bmN0aW9uLiBEb2Vzbid0IHBlcmZvcm0gcmVhbCBpbncuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdTE2IFg4NkFQSSBwX2ludygKKy0JWDg2RU1VX3Bpb0FkZHIgYWRkcikKKytzdGF0aWMgdTE2IFg4NkFQSQorK3BfaW53KFg4NkVNVV9waW9BZGRyIGFkZHIpCisgeworLURCKAlpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKy0JCXByaW50aygiaW53ICUjMDR4IFxuIiwgYWRkcik7KQorLQlyZXR1cm4gMDsKKysgICAgREIoaWYgKERFQlVHX0lPX1RSQUNFKCkpCisrICAgICAgIHByaW50aygiaW53ICUjMDR4IFxuIiwgYWRkcik7KQorKyAgICAgICAgcmV0dXJuIDA7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNDk4LDEyICszODcsMTIgQEAgUkVUVVJOOgorIFJFTUFSS1M6CisgRGVmYXVsdCBQSU8gbG9uZyByZWFkIGZ1bmN0aW9uLiBEb2Vzbid0IHBlcmZvcm0gcmVhbCBpbmwuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdTMyIFg4NkFQSSBwX2lubCgKKy0JWDg2RU1VX3Bpb0FkZHIgYWRkcikKKytzdGF0aWMgdTMyIFg4NkFQSQorK3BfaW5sKFg4NkVNVV9waW9BZGRyIGFkZHIpCisgeworLURCKAlpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKy0JCXByaW50aygiaW5sICUjMDR4IFxuIiwgYWRkcik7KQorLQlyZXR1cm4gMDsKKysgICAgREIoaWYgKERFQlVHX0lPX1RSQUNFKCkpCisrICAgICAgIHByaW50aygiaW5sICUjMDR4IFxuIiwgYWRkcik7KQorKyAgICAgICAgcmV0dXJuIDA7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNTEzLDEzICs0MDIsMTIgQEAgdmFsICAgICAtIFZhbHVlIHRvIHN0b3JlCisgUkVNQVJLUzoKKyBEZWZhdWx0IFBJTyBieXRlIHdyaXRlIGZ1bmN0aW9uLiBEb2Vzbid0IHBlcmZvcm0gcmVhbCBvdXRiLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgWDg2QVBJIHBfb3V0YigKKy0JWDg2RU1VX3Bpb0FkZHIgYWRkciwKKy0JdTggdmFsKQorK3N0YXRpYyB2b2lkIFg4NkFQSQorK3Bfb3V0YihYODZFTVVfcGlvQWRkciBhZGRyLCB1OCB2YWwpCisgeworLURCKAlpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKy0JCXByaW50aygib3V0YiAlIzAyeCAtPiAlIzA0eCBcbiIsIHZhbCwgYWRkcik7KQorLSAgICByZXR1cm47CisrICAgIERCKGlmIChERUJVR19JT19UUkFDRSgpKQorKyAgICAgICBwcmludGsoIm91dGIgJSMwMnggLT4gJSMwNHggXG4iLCB2YWwsIGFkZHIpOykKKysgICAgICAgIHJldHVybjsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC01MjksMTMgKzQxNywxMiBAQCB2YWwgICAgIC0gVmFsdWUgdG8gc3RvcmUKKyBSRU1BUktTOgorIERlZmF1bHQgUElPIHdvcmQgd3JpdGUgZnVuY3Rpb24uIERvZXNuJ3QgcGVyZm9ybSByZWFsIG91dHcuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCBYODZBUEkgcF9vdXR3KAorLQlYODZFTVVfcGlvQWRkciBhZGRyLAorLQl1MTYgdmFsKQorK3N0YXRpYyB2b2lkIFg4NkFQSQorK3Bfb3V0dyhYODZFTVVfcGlvQWRkciBhZGRyLCB1MTYgdmFsKQorIHsKKy1EQigJaWYgKERFQlVHX0lPX1RSQUNFKCkpCistCQlwcmludGsoIm91dHcgJSMwNHggLT4gJSMwNHggXG4iLCB2YWwsIGFkZHIpOykKKy0JcmV0dXJuOworKyAgICBEQihpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKysgICAgICAgcHJpbnRrKCJvdXR3ICUjMDR4IC0+ICUjMDR4IFxuIiwgdmFsLCBhZGRyKTspCisrICAgICAgICByZXR1cm47CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNTQ1LDI5ICs0MzIsMjkgQEAgdmFsICAgICAtIFZhbHVlIHRvIHN0b3JlCisgUkVNQVJLUzoKKyBEZWZhdWx0IFBJTyA7b25nIHdyaXRlIGZ1bmN0aW9uLiBEb2Vzbid0IHBlcmZvcm0gcmVhbCBvdXRsLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgWDg2QVBJIHBfb3V0bCgKKy0JWDg2RU1VX3Bpb0FkZHIgYWRkciwKKy0JdTMyIHZhbCkKKytzdGF0aWMgdm9pZCBYODZBUEkKKytwX291dGwoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTMyIHZhbCkKKyB7CistREIoCWlmIChERUJVR19JT19UUkFDRSgpKQorLQkJcHJpbnRrKCJvdXRsICUjMDh4IC0+ICUjMDR4IFxuIiwgdmFsLCBhZGRyKTspCistICAgIHJldHVybjsKKysgICAgREIoaWYgKERFQlVHX0lPX1RSQUNFKCkpCisrICAgICAgIHByaW50aygib3V0bCAlIzA4eCAtPiAlIzA0eCBcbiIsIHZhbCwgYWRkcik7KQorKyAgICAgICAgcmV0dXJuOworIH0KKyAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsIFZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorLXU4ICAJKFg4NkFQSVAgc3lzX3JkYikodTMyIGFkZHIpIAkJCSAgICAgICAgICAgID0gcmRiOworLXUxNiAJKFg4NkFQSVAgc3lzX3JkdykodTMyIGFkZHIpIAkJCSAgICAgICAgICAgID0gcmR3OworLXUzMiAJKFg4NkFQSVAgc3lzX3JkbCkodTMyIGFkZHIpIAkJCSAgICAgICAgICAgID0gcmRsOworLXZvaWQgCShYODZBUElQIHN5c193cmIpKHUzMiBhZGRyLHU4IHZhbCkgCQkgICAgICAgICAgICA9IHdyYjsKKy12b2lkIAkoWDg2QVBJUCBzeXNfd3J3KSh1MzIgYWRkcix1MTYgdmFsKSAJICAgICAgICAgICAgPSB3cnc7Cistdm9pZCAJKFg4NkFQSVAgc3lzX3dybCkodTMyIGFkZHIsdTMyIHZhbCkgCSAgICAgICAgICAgID0gd3JsOworLXU4ICAJKFg4NkFQSVAgc3lzX2luYikoWDg2RU1VX3Bpb0FkZHIgYWRkcikJICAgICAgICAgICAgPSBwX2luYjsKKy11MTYgCShYODZBUElQIHN5c19pbncpKFg4NkVNVV9waW9BZGRyIGFkZHIpCSAgICAgICAgICAgID0gcF9pbnc7CistdTMyIAkoWDg2QVBJUCBzeXNfaW5sKShYODZFTVVfcGlvQWRkciBhZGRyKSAgICAgICAgICAgICAgPSBwX2lubDsKKy12b2lkIAkoWDg2QVBJUCBzeXNfb3V0YikoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTggdmFsKSAJPSBwX291dGI7Cistdm9pZCAJKFg4NkFQSVAgc3lzX291dHcpKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUxNiB2YWwpCT0gcF9vdXR3OworLXZvaWQgCShYODZBUElQIHN5c19vdXRsKShYODZFTVVfcGlvQWRkciBhZGRyLCB1MzIgdmFsKQk9IHBfb3V0bDsKKyt1OChYODZBUElQIHN5c19yZGIpICh1MzIgYWRkcikgPSByZGI7CisrdTE2KFg4NkFQSVAgc3lzX3JkdykgKHUzMiBhZGRyKSA9IHJkdzsKKyt1MzIoWDg2QVBJUCBzeXNfcmRsKSAodTMyIGFkZHIpID0gcmRsOworK3ZvaWQgKFg4NkFQSVAgc3lzX3dyYikgKHUzMiBhZGRyLCB1OCB2YWwpID0gd3JiOworK3ZvaWQgKFg4NkFQSVAgc3lzX3dydykgKHUzMiBhZGRyLCB1MTYgdmFsKSA9IHdydzsKKyt2b2lkIChYODZBUElQIHN5c193cmwpICh1MzIgYWRkciwgdTMyIHZhbCkgPSB3cmw7CisrCisrdTgoWDg2QVBJUCBzeXNfaW5iKSAoWDg2RU1VX3Bpb0FkZHIgYWRkcikgPSBwX2luYjsKKyt1MTYoWDg2QVBJUCBzeXNfaW53KSAoWDg2RU1VX3Bpb0FkZHIgYWRkcikgPSBwX2ludzsKKyt1MzIoWDg2QVBJUCBzeXNfaW5sKSAoWDg2RU1VX3Bpb0FkZHIgYWRkcikgPSBwX2lubDsKKyt2b2lkIChYODZBUElQIHN5c19vdXRiKSAoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTggdmFsKSA9IHBfb3V0YjsKKyt2b2lkIChYODZBUElQIHN5c19vdXR3KSAoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTE2IHZhbCkgPSBwX291dHc7Cisrdm9pZCAoWDg2QVBJUCBzeXNfb3V0bCkgKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUzMiB2YWwpID0gcF9vdXRsOworIAorIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU2V0dXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCitAQCAtNTgwLDggKzQ2Nyw4IEBAIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgdGhlIHBvaW50ZXJzIHRvIGZ1bmN0aW9ucyB3aGljaCBhY2Nlc3MKKyBtZW1vcnkgc3BhY2UsIGFsbG93aW5nIHRoZSB1c2VyIGFwcGxpY2F0aW9uIHRvIG92ZXJyaWRlIHRoZXNlIGZ1bmN0aW9ucworIGFuZCBob29rIHRoZW0gb3V0IGFzIG5lY2Vzc2FyeSBmb3IgdGhlaXIgYXBwbGljYXRpb24uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIFg4NkVNVV9zZXR1cE1lbUZ1bmNzKAorLQlYODZFTVVfbWVtRnVuY3MgKmZ1bmNzKQorK3ZvaWQKKytYODZFTVVfc2V0dXBNZW1GdW5jcyhYODZFTVVfbWVtRnVuY3MgKiBmdW5jcykKKyB7CisgICAgIHN5c19yZGIgPSBmdW5jcy0+cmRiOworICAgICBzeXNfcmR3ID0gZnVuY3MtPnJkdzsKK0BAIC02MDAsOCArNDg3LDggQEAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCB0aGUgcG9pbnRlcnMgdG8gZnVuY3Rpb25zIHdoaWNoIGFjY2VzcworIEkvTyBzcGFjZSwgYWxsb3dpbmcgdGhlIHVzZXIgYXBwbGljYXRpb24gdG8gb3ZlcnJpZGUgdGhlc2UgZnVuY3Rpb25zCisgYW5kIGhvb2sgdGhlbSBvdXQgYXMgbmVjZXNzYXJ5IGZvciB0aGVpciBhcHBsaWNhdGlvbi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgWDg2RU1VX3NldHVwUGlvRnVuY3MoCistCVg4NkVNVV9waW9GdW5jcyAqZnVuY3MpCisrdm9pZAorK1g4NkVNVV9zZXR1cFBpb0Z1bmNzKFg4NkVNVV9waW9GdW5jcyAqIGZ1bmNzKQorIHsKKyAgICAgc3lzX2luYiA9IGZ1bmNzLT5pbmI7CisgICAgIHN5c19pbncgPSBmdW5jcy0+aW53OworQEAgLTYyNCwxNyArNTExLDE3IEBAIGluIHRoZSBlbXVsYXRvciB2aWEgdGhlIGludGVycnVwdCB2ZWN0b3IgdGFibGUuIFRoaXMgYWxsb3dzIHRoZSBhcHBsaWNhdGlvbgorIHRvIGdldCBjb250cm9sIHdoZW4gdGhlIGNvZGUgYmVpbmcgZW11bGF0ZWQgZXhlY3V0ZXMgc3BlY2lmaWMgc29mdHdhcmUKKyBpbnRlcnJ1cHRzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBYODZFTVVfc2V0dXBJbnRyRnVuY3MoCistCVg4NkVNVV9pbnRyRnVuY3MgZnVuY3NbXSkKKyt2b2lkCisrWDg2RU1VX3NldHVwSW50ckZ1bmNzKFg4NkVNVV9pbnRyRnVuY3MgZnVuY3NbXSkKKyB7CisgICAgIGludCBpOworLSAgICAKKy0JZm9yIChpPTA7IGkgPCAyNTY7IGkrKykKKy0JCV9YODZFTVVfaW50clRhYltpXSA9IE5VTEw7CistCWlmIChmdW5jcykgeworLQkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorLQkJCV9YODZFTVVfaW50clRhYltpXSA9IGZ1bmNzW2ldOworLQkJfQorKworKyAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisrICAgICAgICBfWDg2RU1VX2ludHJUYWJbaV0gPSBOVUxMOworKyAgICBpZiAoZnVuY3MpIHsKKysgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKysgICAgICAgICAgICBfWDg2RU1VX2ludHJUYWJbaV0gPSBmdW5jc1tpXTsKKysgICAgfQorIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTY0OSwxNSArNTM2LDE1IEBAIHNvIHRoYXQgdGhlIGNvZGUgaW4gdGhlIGVtdWxhdG9yIHdpbGwgY29udGludWUgcHJvY2Vzc2luZyB0aGUgc29mdHdhcmUKKyBpbnRlcnJ1cHQgYXMgcGVyIG5vcm1hbC4gVGhpcyBlc3NlbnRpYWxseSBhbGxvd3Mgc3lzdGVtIGNvZGUgdG8gYWN0aXZlbHkKKyBob29rIGFuZCBoYW5kbGUgY2VydGFpbiBzb2Z0d2FyZSBpbnRlcnJ1cHRzIGFzIG5lY2Vzc2FyeS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgWDg2RU1VX3ByZXBhcmVGb3JJbnQoCistCWludCBudW0pCisrdm9pZAorK1g4NkVNVV9wcmVwYXJlRm9ySW50KGludCBudW0pCisgeworLSAgICBwdXNoX3dvcmQoKHUxNilNLng4Ni5SX0ZMRyk7CisrICAgIHB1c2hfd29yZCgodTE2KSBNLng4Ni5SX0ZMRyk7CisgICAgIENMRUFSX0ZMQUcoRl9JRik7CisgICAgIENMRUFSX0ZMQUcoRl9URik7CisgICAgIHB1c2hfd29yZChNLng4Ni5SX0NTKTsKKyAgICAgTS54ODYuUl9DUyA9IG1lbV9hY2Nlc3Nfd29yZChudW0gKiA0ICsgMik7CisgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKyAgICAgTS54ODYuUl9JUCA9IG1lbV9hY2Nlc3Nfd29yZChudW0gKiA0KTsKKy0JTS54ODYuaW50ciA9IDA7CisrICAgIE0ueDg2LmludHIgPSAwOworIH0KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS92YWxpZGF0ZS5jIGIvbGlicy94ODZlbXUvdmFsaWRhdGUuYworaW5kZXggMjM5ZjZjMS4uNGMzNmUxZCAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3ZhbGlkYXRlLmMKKysrKyBiL2xpYnMveDg2ZW11L3ZhbGlkYXRlLmMKK0BAIC01OTEsNTggKzU5MSw2MiBAQAorICAgICAgICAgcHJpbnRrKCJwYXNzZWRcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgfQorIAorLXZvaWQgcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorK3ZvaWQKKytwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCisgeworICAgICB2YV9saXN0IGFyZ3B0cjsKKysKKyAgICAgdmFfc3RhcnQoYXJncHRyLCBmbXQpOworICAgICB2ZnByaW50ZihzdGRvdXQsIGZtdCwgYXJncHRyKTsKKyAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgIHZhX2VuZChhcmdwdHIpOworIH0KKyAKKy1jaGFyICogcHJpbnRfZmxhZ3MoY2hhciAqYnVmLHVsb25nIGZsYWdzKQorK2NoYXIgKgorK3ByaW50X2ZsYWdzKGNoYXIgKmJ1ZiwgdWxvbmcgZmxhZ3MpCisgeworICAgICBjaGFyICpzZXBhcmF0b3IgPSAiIjsKKyAKKyAgICAgYnVmWzBdID0gMDsKKyAgICAgaWYgKGZsYWdzICYgRl9DRikgeworLSAgICAgICAgc3RyY2F0KGJ1ZixzZXBhcmF0b3IpOworLSAgICAgICAgc3RyY2F0KGJ1ZiwiQ0YiKTsKKysgICAgICAgIHN0cmNhdChidWYsIHNlcGFyYXRvcik7CisrICAgICAgICBzdHJjYXQoYnVmLCAiQ0YiKTsKKyAgICAgICAgIHNlcGFyYXRvciA9ICIsIjsKKy0gICAgICAgIH0KKysgICAgfQorICAgICBpZiAoZmxhZ3MgJiBGX1BGKSB7CistICAgICAgICBzdHJjYXQoYnVmLHNlcGFyYXRvcik7CistICAgICAgICBzdHJjYXQoYnVmLCJQRiIpOworKyAgICAgICAgc3RyY2F0KGJ1Ziwgc2VwYXJhdG9yKTsKKysgICAgICAgIHN0cmNhdChidWYsICJQRiIpOworICAgICAgICAgc2VwYXJhdG9yID0gIiwiOworLSAgICAgICAgfQorKyAgICB9CisgICAgIGlmIChmbGFncyAmIEZfQUYpIHsKKy0gICAgICAgIHN0cmNhdChidWYsc2VwYXJhdG9yKTsKKy0gICAgICAgIHN0cmNhdChidWYsIkFGIik7CisrICAgICAgICBzdHJjYXQoYnVmLCBzZXBhcmF0b3IpOworKyAgICAgICAgc3RyY2F0KGJ1ZiwgIkFGIik7CisgICAgICAgICBzZXBhcmF0b3IgPSAiLCI7CistICAgICAgICB9CisrICAgIH0KKyAgICAgaWYgKGZsYWdzICYgRl9aRikgeworLSAgICAgICAgc3RyY2F0KGJ1ZixzZXBhcmF0b3IpOworLSAgICAgICAgc3RyY2F0KGJ1ZiwiWkYiKTsKKysgICAgICAgIHN0cmNhdChidWYsIHNlcGFyYXRvcik7CisrICAgICAgICBzdHJjYXQoYnVmLCAiWkYiKTsKKyAgICAgICAgIHNlcGFyYXRvciA9ICIsIjsKKy0gICAgICAgIH0KKysgICAgfQorICAgICBpZiAoZmxhZ3MgJiBGX1NGKSB7CistICAgICAgICBzdHJjYXQoYnVmLHNlcGFyYXRvcik7CistICAgICAgICBzdHJjYXQoYnVmLCJTRiIpOworKyAgICAgICAgc3RyY2F0KGJ1Ziwgc2VwYXJhdG9yKTsKKysgICAgICAgIHN0cmNhdChidWYsICJTRiIpOworICAgICAgICAgc2VwYXJhdG9yID0gIiwiOworLSAgICAgICAgfQorKyAgICB9CisgICAgIGlmIChmbGFncyAmIEZfT0YpIHsKKy0gICAgICAgIHN0cmNhdChidWYsc2VwYXJhdG9yKTsKKy0gICAgICAgIHN0cmNhdChidWYsIk9GIik7CisrICAgICAgICBzdHJjYXQoYnVmLCBzZXBhcmF0b3IpOworKyAgICAgICAgc3RyY2F0KGJ1ZiwgIk9GIik7CisgICAgICAgICBzZXBhcmF0b3IgPSAiLCI7CistICAgICAgICB9CisrICAgIH0KKyAgICAgaWYgKHNlcGFyYXRvclswXSA9PSAwKQorLSAgICAgICAgc3RyY3B5KGJ1ZiwiTm9uZSIpOworKyAgICAgICAgc3RyY3B5KGJ1ZiwgIk5vbmUiKTsKKyAgICAgcmV0dXJuIGJ1ZjsKKyB9CisgCistaW50IG1haW4oaW50IGFyZ2MpCisraW50CisrbWFpbihpbnQgYXJnYykKKyB7CistICAgIHVsb25nICAgZGVmX2ZsYWdzOworKyAgICB1bG9uZyBkZWZfZmxhZ3M7CisgICAgIGludCB0cmFjZSA9IGZhbHNlOworIAorICAgICBpZiAoYXJnYyA+IDEpCitAQCAtNjczLDcgKzY3Nyw3IEBAIGludCBtYWluKGludCBhcmdjKQorICAgICBWQUxfTE9OR19MT05HX0JJTkFSWShjbXBfbG9uZyk7CisgCisgICAgIFZBTF9CWVRFX1VOQVJZKGRhYV9ieXRlKTsKKy0gICAgVkFMX0JZVEVfVU5BUlkoZGFzX2J5dGUpOyAgIC8vIEZhaWxzIGZvciAweDlBIChvdXQgb2YgcmFuZ2UgYW55d2F5KQorKyAgICBWQUxfQllURV9VTkFSWShkYXNfYnl0ZSk7ICAgLyogRmFpbHMgZm9yIDB4OUEgKG91dCBvZiByYW5nZSBhbnl3YXkpICovCisgCisgICAgIFZBTF9CWVRFX1VOQVJZKGRlY19ieXRlKTsKKyAgICAgVkFMX1dPUkRfVU5BUlkoZGVjX3dvcmQpOworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS5oIGIvbGlicy94ODZlbXUveDg2ZW11LmgKK2luZGV4IDc5NWUyZDYuLjUwMWRkOTEgMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS94ODZlbXUuaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11LmgKK0BAIC01Niw3ICs1Niw3IEBAIHR5cGVkZWYgaW50IFg4NkVNVV9waW9BZGRyOworIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNYWNyb3MgYW5kIHR5cGUgZGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCisgI2lmZGVmIFBBQ0sKKy0jIHByYWdtYQlQQUNLICAgLyogRG9uJ3QgcGFjayBzdHJ1Y3RzIHdpdGggZnVuY3Rpb24gcG9pbnRlcnMhICovCisrI3ByYWdtYQlQQUNLICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBwYWNrIHN0cnVjdHMgd2l0aCBmdW5jdGlvbiBwb2ludGVycyEgKi8KKyAjZW5kaWYKKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTgxLDEzICs4MSwxMyBAQCBvdXR3ICAgIC0gRnVuY3Rpb24gdG8gd3JpdGUgYSB3b3JkIHRvIGFuIEkvTyBwb3J0Cisgb3V0bCAgICAtIEZ1bmN0aW9uIHRvIHdyaXRlIGEgZHdvcmQgdG8gYW4gSS9PIHBvcnQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIHR5cGVkZWYgc3RydWN0IHsKKy0JdTggIAkoWDg2QVBJUCBpbmIpKFg4NkVNVV9waW9BZGRyIGFkZHIpOworLQl1MTYgCShYODZBUElQIGludykoWDg2RU1VX3Bpb0FkZHIgYWRkcik7CistCXUzMiAJKFg4NkFQSVAgaW5sKShYODZFTVVfcGlvQWRkciBhZGRyKTsKKy0Jdm9pZCAJKFg4NkFQSVAgb3V0YikoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTggdmFsKTsKKy0Jdm9pZCAJKFg4NkFQSVAgb3V0dykoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTE2IHZhbCk7CistCXZvaWQgCShYODZBUElQIG91dGwpKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUzMiB2YWwpOworLQl9IFg4NkVNVV9waW9GdW5jczsKKysgICAgdTgoWDg2QVBJUCBpbmIpIChYODZFTVVfcGlvQWRkciBhZGRyKTsKKysgICAgdTE2KFg4NkFQSVAgaW53KSAoWDg2RU1VX3Bpb0FkZHIgYWRkcik7CisrICAgIHUzMihYODZBUElQIGlubCkgKFg4NkVNVV9waW9BZGRyIGFkZHIpOworKyAgICB2b2lkIChYODZBUElQIG91dGIpIChYODZFTVVfcGlvQWRkciBhZGRyLCB1OCB2YWwpOworKyAgICB2b2lkIChYODZBUElQIG91dHcpIChYODZFTVVfcGlvQWRkciBhZGRyLCB1MTYgdmFsKTsKKysgICAgdm9pZCAoWDg2QVBJUCBvdXRsKSAoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTMyIHZhbCk7CisrfSBYODZFTVVfcGlvRnVuY3M7CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorQEAgLTExMiwxMyArMTEyLDEzIEBAIHdydyAgICAJLSBGdW5jdGlvbiB0byB3cml0ZSBhIHdvcmQgdG8gYW4gYWRkcmVzcworIHdybCAgICAJLSBGdW5jdGlvbiB0byB3cml0ZSBhIGR3b3JkIHRvIGFuIGFkZHJlc3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIHR5cGVkZWYgc3RydWN0IHsKKy0JdTggIAkoWDg2QVBJUCByZGIpKHUzMiBhZGRyKTsKKy0JdTE2IAkoWDg2QVBJUCByZHcpKHUzMiBhZGRyKTsKKy0JdTMyIAkoWDg2QVBJUCByZGwpKHUzMiBhZGRyKTsKKy0Jdm9pZCAJKFg4NkFQSVAgd3JiKSh1MzIgYWRkciwgdTggdmFsKTsKKy0Jdm9pZCAJKFg4NkFQSVAgd3J3KSh1MzIgYWRkciwgdTE2IHZhbCk7CistCXZvaWQJKFg4NkFQSVAgd3JsKSh1MzIgYWRkciwgdTMyIHZhbCk7CistCX0gWDg2RU1VX21lbUZ1bmNzOworKyAgICB1OChYODZBUElQIHJkYikgKHUzMiBhZGRyKTsKKysgICAgdTE2KFg4NkFQSVAgcmR3KSAodTMyIGFkZHIpOworKyAgICB1MzIoWDg2QVBJUCByZGwpICh1MzIgYWRkcik7CisrICAgIHZvaWQgKFg4NkFQSVAgd3JiKSAodTMyIGFkZHIsIHU4IHZhbCk7CisrICAgIHZvaWQgKFg4NkFQSVAgd3J3KSAodTMyIGFkZHIsIHUxNiB2YWwpOworKyAgICB2b2lkIChYODZBUElQIHdybCkgKHUzMiBhZGRyLCB1MzIgdmFsKTsKKyt9IFg4NkVNVV9tZW1GdW5jczsKKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgSGVyZSBhcmUgdGhlIGRlZmF1bHQgbWVtb3J5IHJlYWQgYW5kIHdyaXRlCitAQCAtMTMyLDI5ICsxMzIsMjkgQEAgZXh0ZXJuIHZvaWQgWDg2QVBJIHdydyh1MzIgYWRkciwgdTE2IHZhbCk7CisgZXh0ZXJuIHZvaWQgWDg2QVBJIHdybCh1MzIgYWRkciwgdTMyIHZhbCk7CisgCisgI2lmZGVmIEVORF9QQUNLCistIyBwcmFnbWEJRU5EX1BBQ0sKKysjcHJhZ21hCUVORF9QQUNLCisgI2VuZGlmCisgCisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gdHlwZSBkZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCistdHlwZWRlZiB2b2lkIChYODZBUElQIFg4NkVNVV9pbnRyRnVuY3MpKGludCBudW0pOworK3R5cGVkZWYgdm9pZCAoWDg2QVBJUCBYODZFTVVfaW50ckZ1bmNzKSAoaW50IG51bSk7CisgZXh0ZXJuIFg4NkVNVV9pbnRyRnVuY3MgX1g4NkVNVV9pbnRyVGFiWzI1Nl07CisgCisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7ICAgICAgICAgICAgCQkJLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKytleHRlcm4gIkMiIHsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisgI2VuZGlmCisgCistdm9pZCAJWDg2RU1VX3NldHVwTWVtRnVuY3MoWDg2RU1VX21lbUZ1bmNzICpmdW5jcyk7Cistdm9pZCAJWDg2RU1VX3NldHVwUGlvRnVuY3MoWDg2RU1VX3Bpb0Z1bmNzICpmdW5jcyk7Cistdm9pZCAJWDg2RU1VX3NldHVwSW50ckZ1bmNzKFg4NkVNVV9pbnRyRnVuY3MgZnVuY3NbXSk7Cistdm9pZCAJWDg2RU1VX3ByZXBhcmVGb3JJbnQoaW50IG51bSk7CisrICAgIHZvaWQgWDg2RU1VX3NldHVwTWVtRnVuY3MoWDg2RU1VX21lbUZ1bmNzICogZnVuY3MpOworKyAgICB2b2lkIFg4NkVNVV9zZXR1cFBpb0Z1bmNzKFg4NkVNVV9waW9GdW5jcyAqIGZ1bmNzKTsKKysgICAgdm9pZCBYODZFTVVfc2V0dXBJbnRyRnVuY3MoWDg2RU1VX2ludHJGdW5jcyBmdW5jc1tdKTsKKysgICAgdm9pZCBYODZFTVVfcHJlcGFyZUZvckludChpbnQgbnVtKTsKKyAKKyAvKiBkZWNvZGUuYyAqLworIAorLXZvaWQgCVg4NkVNVV9leGVjKHZvaWQpOworLXZvaWQgCVg4NkVNVV9oYWx0X3N5cyh2b2lkKTsKKysgICAgdm9pZCBYODZFTVVfZXhlYyh2b2lkKTsKKysgICAgdm9pZCBYODZFTVVfaGFsdF9zeXModm9pZCk7CisgCisgI2lmZGVmCURFQlVHCisgI2RlZmluZQlIQUxUX1NZUygpCVwKK0BAIC0xNjYsOCArMTY2LDggQEAgdm9pZCAJWDg2RU1VX2hhbHRfc3lzKHZvaWQpOworIAorIC8qIERlYnVnIG9wdGlvbnMgKi8KKyAKKy0jZGVmaW5lIERFQlVHX0RFQ09ERV9GICAgICAgICAgIDB4MDAwMDAxIC8qIHByaW50IGRlY29kZWQgaW5zdHJ1Y3Rpb24gICovCistI2RlZmluZSBERUJVR19UUkFDRV9GICAgICAgICAgICAweDAwMDAwMiAvKiBkdW1wIHJlZ3MgYmVmb3JlL2FmdGVyIGV4ZWN1dGlvbiAqLworKyNkZWZpbmUgREVCVUdfREVDT0RFX0YgICAgICAgICAgMHgwMDAwMDEgICAgICAgIC8qIHByaW50IGRlY29kZWQgaW5zdHJ1Y3Rpb24gICovCisrI2RlZmluZSBERUJVR19UUkFDRV9GICAgICAgICAgICAweDAwMDAwMiAgICAgICAgLyogZHVtcCByZWdzIGJlZm9yZS9hZnRlciBleGVjdXRpb24gKi8KKyAjZGVmaW5lIERFQlVHX1NURVBfRiAgICAgICAgICAgIDB4MDAwMDA0CisgI2RlZmluZSBERUJVR19ESVNBU1NFTUJMRV9GICAgICAweDAwMDAwOAorICNkZWZpbmUgREVCVUdfQlJFQUtfRiAgICAgICAgICAgMHgwMDAwMTAKK0BAIC0xNzUsMjQgKzE3NSwyMyBAQCB2b2lkIAlYODZFTVVfaGFsdF9zeXModm9pZCk7CisgI2RlZmluZSBERUJVR19TQVZFX0lQX0NTX0YgICAgICAweDAwMDA0MAorICNkZWZpbmUgREVCVUdfRlNfRiAgICAgICAgICAgICAgMHgwMDAwODAKKyAjZGVmaW5lIERFQlVHX1BST0NfRiAgICAgICAgICAgIDB4MDAwMTAwCistI2RlZmluZSBERUJVR19TWVNJTlRfRiAgICAgICAgICAweDAwMDIwMCAvKiBiaW9zIHN5c3RlbSBpbnRlcnJ1cHRzLiAqLworKyNkZWZpbmUgREVCVUdfU1lTSU5UX0YgICAgICAgICAgMHgwMDAyMDAgICAgICAgIC8qIGJpb3Mgc3lzdGVtIGludGVycnVwdHMuICovCisgI2RlZmluZSBERUJVR19UUkFDRUNBTExfRiAgICAgICAweDAwMDQwMAorICNkZWZpbmUgREVCVUdfSU5TVFJVTUVOVF9GICAgICAgMHgwMDA4MDAKKy0jZGVmaW5lIERFQlVHX01FTV9UUkFDRV9GICAgICAgIDB4MDAxMDAwIAorLSNkZWZpbmUgREVCVUdfSU9fVFJBQ0VfRiAgICAgICAgMHgwMDIwMDAgCisrI2RlZmluZSBERUJVR19NRU1fVFJBQ0VfRiAgICAgICAweDAwMTAwMAorKyNkZWZpbmUgREVCVUdfSU9fVFJBQ0VfRiAgICAgICAgMHgwMDIwMDAKKyAjZGVmaW5lIERFQlVHX1RSQUNFQ0FMTF9SRUdTX0YgIDB4MDA0MDAwCistI2RlZmluZSBERUJVR19ERUNPREVfTk9QUklOVF9GICAweDAwODAwMCAKKysjZGVmaW5lIERFQlVHX0RFQ09ERV9OT1BSSU5UX0YgIDB4MDA4MDAwCisgI2RlZmluZSBERUJVR19FWElUICAgICAgICAgICAgICAweDAxMDAwMAorICNkZWZpbmUgREVCVUdfU1lTX0YgICAgICAgICAgICAgKERFQlVHX1NWQ19GfERFQlVHX0ZTX0Z8REVCVUdfUFJPQ19GKQorIAorLXZvaWQgCVg4NkVNVV90cmFjZV9yZWdzKHZvaWQpOworLXZvaWQgCVg4NkVNVV90cmFjZV94cmVncyh2b2lkKTsKKy12b2lkIAlYODZFTVVfZHVtcF9tZW1vcnkodTE2IHNlZywgdTE2IG9mZiwgdTMyIGFtdCk7CistaW50IAlYODZFTVVfdHJhY2Vfb24odm9pZCk7CistaW50IAlYODZFTVVfdHJhY2Vfb2ZmKHZvaWQpOworKyAgICB2b2lkIFg4NkVNVV90cmFjZV9yZWdzKHZvaWQpOworKyAgICB2b2lkIFg4NkVNVV90cmFjZV94cmVncyh2b2lkKTsKKysgICAgdm9pZCBYODZFTVVfZHVtcF9tZW1vcnkodTE2IHNlZywgdTE2IG9mZiwgdTMyIGFtdCk7CisrICAgIGludCBYODZFTVVfdHJhY2Vfb24odm9pZCk7CisrICAgIGludCBYODZFTVVfdHJhY2Vfb2ZmKHZvaWQpOworIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy19ICAgICAgICAgICAgICAgICAgICAgICAJCQkvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgIAkqLworK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAgICAgICAgICovCisgI2VuZGlmCistCistI2VuZGlmIC8qIF9fWDg2RU1VX1g4NkVNVV9IICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX1g4NkVNVV9YODZFTVVfSCAqLworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS9kZWJ1Zy5oIGIvbGlicy94ODZlbXUveDg2ZW11L2RlYnVnLmgKK2luZGV4IDQ3YWFjYjYuLjM4NWI4MDQgMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS94ODZlbXUvZGVidWcuaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11L2RlYnVnLmgKK0BAIC00NSw2NSArNDUsNjUgQEAKKyAKKyAjZGVmaW5lIENIRUNLX0lQX0ZFVENIX0YgICAgICAgICAgICAgICAgMHgxCisgI2RlZmluZSBDSEVDS19TUF9BQ0NFU1NfRiAgICAgICAgICAgICAgIDB4MgorLSNkZWZpbmUgQ0hFQ0tfTUVNX0FDQ0VTU19GICAgICAgICAgICAgICAweDQgLyp1c2luZyByZWd1bGFyIGxpbmVhciBwb2ludGVyICovCistI2RlZmluZSBDSEVDS19EQVRBX0FDQ0VTU19GICAgICAgICAgICAgIDB4OCAvKnVzaW5nIHNlZ21lbnQ6b2Zmc2V0Ki8KKysjZGVmaW5lIENIRUNLX01FTV9BQ0NFU1NfRiAgICAgICAgICAgICAgMHg0ICAgICAvKnVzaW5nIHJlZ3VsYXIgbGluZWFyIHBvaW50ZXIgKi8KKysjZGVmaW5lIENIRUNLX0RBVEFfQUNDRVNTX0YgICAgICAgICAgICAgMHg4ICAgICAvKnVzaW5nIHNlZ21lbnQ6b2Zmc2V0ICovCisgCisgI2lmZGVmIERFQlVHCistIyBkZWZpbmUgQ0hFQ0tfSVBfRkVUQ0goKSAgICAgICAgICAgICAgCShNLng4Ni5jaGVjayAmIENIRUNLX0lQX0ZFVENIX0YpCistIyBkZWZpbmUgQ0hFQ0tfU1BfQUNDRVNTKCkgICAgICAgICAgICAgCShNLng4Ni5jaGVjayAmIENIRUNLX1NQX0FDQ0VTU19GKQorLSMgZGVmaW5lIENIRUNLX01FTV9BQ0NFU1MoKSAgICAgICAgICAgIAkoTS54ODYuY2hlY2sgJiBDSEVDS19NRU1fQUNDRVNTX0YpCistIyBkZWZpbmUgQ0hFQ0tfREFUQV9BQ0NFU1MoKSAgICAgICAgICAgCShNLng4Ni5jaGVjayAmIENIRUNLX0RBVEFfQUNDRVNTX0YpCisrI2RlZmluZSBDSEVDS19JUF9GRVRDSCgpICAgICAgICAgICAgICAJKE0ueDg2LmNoZWNrICYgQ0hFQ0tfSVBfRkVUQ0hfRikKKysjZGVmaW5lIENIRUNLX1NQX0FDQ0VTUygpICAgICAgICAgICAgIAkoTS54ODYuY2hlY2sgJiBDSEVDS19TUF9BQ0NFU1NfRikKKysjZGVmaW5lIENIRUNLX01FTV9BQ0NFU1MoKSAgICAgICAgICAgIAkoTS54ODYuY2hlY2sgJiBDSEVDS19NRU1fQUNDRVNTX0YpCisrI2RlZmluZSBDSEVDS19EQVRBX0FDQ0VTUygpICAgICAgICAgICAJKE0ueDg2LmNoZWNrICYgQ0hFQ0tfREFUQV9BQ0NFU1NfRikKKyAjZWxzZQorLSMgZGVmaW5lIENIRUNLX0lQX0ZFVENIKCkKKy0jIGRlZmluZSBDSEVDS19TUF9BQ0NFU1MoKQorLSMgZGVmaW5lIENIRUNLX01FTV9BQ0NFU1MoKQorLSMgZGVmaW5lIENIRUNLX0RBVEFfQUNDRVNTKCkKKysjZGVmaW5lIENIRUNLX0lQX0ZFVENIKCkKKysjZGVmaW5lIENIRUNLX1NQX0FDQ0VTUygpCisrI2RlZmluZSBDSEVDS19NRU1fQUNDRVNTKCkKKysjZGVmaW5lIENIRUNLX0RBVEFfQUNDRVNTKCkKKyAjZW5kaWYKKyAKKyAjaWZkZWYgREVCVUcKKy0jIGRlZmluZSBERUJVR19JTlNUUlVNRU5UKCkgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX0lOU1RSVU1FTlRfRikKKy0jIGRlZmluZSBERUJVR19ERUNPREUoKSAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX0RFQ09ERV9GKQorLSMgZGVmaW5lIERFQlVHX1RSQUNFKCkgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfVFJBQ0VfRikKKy0jIGRlZmluZSBERUJVR19TVEVQKCkgICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1NURVBfRikKKy0jIGRlZmluZSBERUJVR19ESVNBU1NFTUJMRSgpICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX0RJU0FTU0VNQkxFX0YpCistIyBkZWZpbmUgREVCVUdfQlJFQUsoKSAgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19CUkVBS19GKQorLSMgZGVmaW5lIERFQlVHX1NWQygpICAgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfU1ZDX0YpCistIyBkZWZpbmUgREVCVUdfU0FWRV9JUF9DUygpICAgICAoTS54ODYuZGVidWcgJiBERUJVR19TQVZFX0lQX0NTX0YpCistCistIyBkZWZpbmUgREVCVUdfRlMoKSAgICAgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19GU19GKQorLSMgZGVmaW5lIERFQlVHX1BST0MoKSAgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfUFJPQ19GKQorLSMgZGVmaW5lIERFQlVHX1NZU0lOVCgpICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfU1lTSU5UX0YpCistIyBkZWZpbmUgREVCVUdfVFJBQ0VDQUxMKCkgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19UUkFDRUNBTExfRikKKy0jIGRlZmluZSBERUJVR19UUkFDRUNBTExSRUdTKCkgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1RSQUNFQ0FMTF9SRUdTX0YpCistIyBkZWZpbmUgREVCVUdfU1lTKCkgICAgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19TWVNfRikKKy0jIGRlZmluZSBERUJVR19NRU1fVFJBQ0UoKSAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX01FTV9UUkFDRV9GKQorLSMgZGVmaW5lIERFQlVHX0lPX1RSQUNFKCkgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfSU9fVFJBQ0VfRikKKy0jIGRlZmluZSBERUJVR19ERUNPREVfTk9QUklOVCgpIChNLng4Ni5kZWJ1ZyAmIERFQlVHX0RFQ09ERV9OT1BSSU5UX0YpCisrI2RlZmluZSBERUJVR19JTlNUUlVNRU5UKCkgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX0lOU1RSVU1FTlRfRikKKysjZGVmaW5lIERFQlVHX0RFQ09ERSgpICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfREVDT0RFX0YpCisrI2RlZmluZSBERUJVR19UUkFDRSgpICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1RSQUNFX0YpCisrI2RlZmluZSBERUJVR19TVEVQKCkgICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1NURVBfRikKKysjZGVmaW5lIERFQlVHX0RJU0FTU0VNQkxFKCkgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfRElTQVNTRU1CTEVfRikKKysjZGVmaW5lIERFQlVHX0JSRUFLKCkgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfQlJFQUtfRikKKysjZGVmaW5lIERFQlVHX1NWQygpICAgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfU1ZDX0YpCisrI2RlZmluZSBERUJVR19TQVZFX0lQX0NTKCkgICAgIChNLng4Ni5kZWJ1ZyAmIERFQlVHX1NBVkVfSVBfQ1NfRikKKysKKysjZGVmaW5lIERFQlVHX0ZTKCkgICAgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfRlNfRikKKysjZGVmaW5lIERFQlVHX1BST0MoKSAgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfUFJPQ19GKQorKyNkZWZpbmUgREVCVUdfU1lTSU5UKCkgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19TWVNJTlRfRikKKysjZGVmaW5lIERFQlVHX1RSQUNFQ0FMTCgpICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfVFJBQ0VDQUxMX0YpCisrI2RlZmluZSBERUJVR19UUkFDRUNBTExSRUdTKCkgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1RSQUNFQ0FMTF9SRUdTX0YpCisrI2RlZmluZSBERUJVR19TWVMoKSAgICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1NZU19GKQorKyNkZWZpbmUgREVCVUdfTUVNX1RSQUNFKCkgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19NRU1fVFJBQ0VfRikKKysjZGVmaW5lIERFQlVHX0lPX1RSQUNFKCkgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfSU9fVFJBQ0VfRikKKysjZGVmaW5lIERFQlVHX0RFQ09ERV9OT1BSSU5UKCkgKE0ueDg2LmRlYnVnICYgREVCVUdfREVDT0RFX05PUFJJTlRfRikKKyAjZWxzZQorLSMgZGVmaW5lIERFQlVHX0lOU1RSVU1FTlQoKSAgICAJMAorLSMgZGVmaW5lIERFQlVHX0RFQ09ERSgpICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1RSQUNFKCkgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1NURVAoKSAgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX0RJU0FTU0VNQkxFKCkgICAJMAorLSMgZGVmaW5lIERFQlVHX0JSRUFLKCkgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1NWQygpICAgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1NBVkVfSVBfQ1MoKSAgICAgMAorLSMgZGVmaW5lIERFQlVHX0ZTKCkgICAgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1BST0MoKSAgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1NZU0lOVCgpICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1RSQUNFQ0FMTCgpICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1RSQUNFQ0FMTFJFR1MoKSAJMAorLSMgZGVmaW5lIERFQlVHX1NZUygpICAgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX01FTV9UUkFDRSgpICAgICAJMAorLSMgZGVmaW5lIERFQlVHX0lPX1RSQUNFKCkgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX0RFQ09ERV9OT1BSSU5UKCkgMAorKyNkZWZpbmUgREVCVUdfSU5TVFJVTUVOVCgpICAgIAkwCisrI2RlZmluZSBERUJVR19ERUNPREUoKSAgICAgICAgCTAKKysjZGVmaW5lIERFQlVHX1RSQUNFKCkgICAgICAgICAJMAorKyNkZWZpbmUgREVCVUdfU1RFUCgpICAgICAgICAgIAkwCisrI2RlZmluZSBERUJVR19ESVNBU1NFTUJMRSgpICAgCTAKKysjZGVmaW5lIERFQlVHX0JSRUFLKCkgICAgICAgICAJMAorKyNkZWZpbmUgREVCVUdfU1ZDKCkgICAgICAgICAgIAkwCisrI2RlZmluZSBERUJVR19TQVZFX0lQX0NTKCkgICAgIDAKKysjZGVmaW5lIERFQlVHX0ZTKCkgICAgICAgICAgICAJMAorKyNkZWZpbmUgREVCVUdfUFJPQygpICAgICAgICAgIAkwCisrI2RlZmluZSBERUJVR19TWVNJTlQoKSAgICAgICAgCTAKKysjZGVmaW5lIERFQlVHX1RSQUNFQ0FMTCgpICAgICAJMAorKyNkZWZpbmUgREVCVUdfVFJBQ0VDQUxMUkVHUygpIAkwCisrI2RlZmluZSBERUJVR19TWVMoKSAgICAgICAgICAgCTAKKysjZGVmaW5lIERFQlVHX01FTV9UUkFDRSgpICAgICAJMAorKyNkZWZpbmUgREVCVUdfSU9fVFJBQ0UoKSAgICAgIAkwCisrI2RlZmluZSBERUJVR19ERUNPREVfTk9QUklOVCgpIDAKKyAjZW5kaWYKKyAKKyAjaWZkZWYgREVCVUcKKyAKKy0jIGRlZmluZSBERUNPREVfUFJJTlRGKHgpICAgICAJaWYgKERFQlVHX0RFQ09ERSgpKSBcCisrI2RlZmluZSBERUNPREVfUFJJTlRGKHgpICAgICAJaWYgKERFQlVHX0RFQ09ERSgpKSBcCisgCQkJCQkJCQkJeDg2ZW11X2RlY29kZV9wcmludGYoeCkKKy0jIGRlZmluZSBERUNPREVfUFJJTlRGMih4LHkpICAJaWYgKERFQlVHX0RFQ09ERSgpKSBcCisrI2RlZmluZSBERUNPREVfUFJJTlRGMih4LHkpICAJaWYgKERFQlVHX0RFQ09ERSgpKSBcCisgCQkJCQkJCQkJeDg2ZW11X2RlY29kZV9wcmludGYyKHgseSkKKyAKKyAvKgorQEAgLTEyMywxMCArMTIzLDEwIEBACisgCQlNLng4Ni5zYXZlZF9pcCA9IHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAJCQlcCisgCX0KKyAjZWxzZQorLSMgZGVmaW5lIElOQ19ERUNPREVEX0lOU1RfTEVOKHgpCistIyBkZWZpbmUgREVDT0RFX1BSSU5URih4KQorLSMgZGVmaW5lIERFQ09ERV9QUklOVEYyKHgseSkKKy0jIGRlZmluZSBTQVZFX0lQX0NTKHgseSkKKysjZGVmaW5lIElOQ19ERUNPREVEX0lOU1RfTEVOKHgpCisrI2RlZmluZSBERUNPREVfUFJJTlRGKHgpCisrI2RlZmluZSBERUNPREVfUFJJTlRGMih4LHkpCisrI2RlZmluZSBTQVZFX0lQX0NTKHgseSkKKyAjZW5kaWYKKyAKKyAjaWZkZWYgREVCVUcKK0BAIC0xMzcsMTMgKzEzNywxMyBAQAorIAl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKyAJaWYgKERFQlVHX1RSQUNFKCkgfHwgREVCVUdfREVDT0RFKCkpIFg4NkVNVV90cmFjZV9yZWdzKCkKKyAjZWxzZQorLSMgZGVmaW5lIFRSQUNFX1JFR1MoKQorKyNkZWZpbmUgVFJBQ0VfUkVHUygpCisgI2VuZGlmCisgCisgI2lmZGVmIERFQlVHCistIyBkZWZpbmUgU0lOR0xFX1NURVAoKQkJaWYgKERFQlVHX1NURVAoKSkgeDg2ZW11X3NpbmdsZV9zdGVwKCkKKysjZGVmaW5lIFNJTkdMRV9TVEVQKCkJCWlmIChERUJVR19TVEVQKCkpIHg4NmVtdV9zaW5nbGVfc3RlcCgpCisgI2Vsc2UKKy0jIGRlZmluZSBTSU5HTEVfU1RFUCgpCisrI2RlZmluZSBTSU5HTEVfU1RFUCgpCisgI2VuZGlmCisgCisgI2RlZmluZSBUUkFDRV9BTkRfU1RFUCgpCVwKK0BAIC0xNTEsMjkgKzE1MSwyOSBAQAorIAlTSU5HTEVfU1RFUCgpCisgCisgI2lmZGVmIERFQlVHCistIyBkZWZpbmUgU1RBUlRfT0ZfSU5TVFIoKQorLSMgZGVmaW5lIEVORF9PRl9JTlNUUigpCQlFbmRPZlRoZUluc3RydWN0aW9uUHJvY2VkdXJlOiB4ODZlbXVfZW5kX2luc3RyKCk7CistIyBkZWZpbmUgRU5EX09GX0lOU1RSX05PX1RSQUNFKCkJeDg2ZW11X2VuZF9pbnN0cigpOworKyNkZWZpbmUgU1RBUlRfT0ZfSU5TVFIoKQorKyNkZWZpbmUgRU5EX09GX0lOU1RSKCkJCUVuZE9mVGhlSW5zdHJ1Y3Rpb25Qcm9jZWR1cmU6IHg4NmVtdV9lbmRfaW5zdHIoKTsKKysjZGVmaW5lIEVORF9PRl9JTlNUUl9OT19UUkFDRSgpCXg4NmVtdV9lbmRfaW5zdHIoKTsKKyAjZWxzZQorLSMgZGVmaW5lIFNUQVJUX09GX0lOU1RSKCkKKy0jIGRlZmluZSBFTkRfT0ZfSU5TVFIoKQorLSMgZGVmaW5lIEVORF9PRl9JTlNUUl9OT19UUkFDRSgpCisrI2RlZmluZSBTVEFSVF9PRl9JTlNUUigpCisrI2RlZmluZSBFTkRfT0ZfSU5TVFIoKQorKyNkZWZpbmUgRU5EX09GX0lOU1RSX05PX1RSQUNFKCkKKyAjZW5kaWYKKyAKKyAjaWZkZWYgREVCVUcKKy0jIGRlZmluZSAgQ0FMTF9UUkFDRSh1LHYsdyx4LHMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyNkZWZpbmUgIENBTExfVFJBQ0UodSx2LHcseCxzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJaWYgKERFQlVHX1RSQUNFQ0FMTFJFR1MoKSkJCQkJCQkJCQlcCisgCQl4ODZlbXVfZHVtcF9yZWdzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJaWYgKERFQlVHX1RSQUNFQ0FMTCgpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAorIAkJcHJpbnRrKCIlMDR4OiUwNHg6IENBTEwgJXMlMDR4OiUwNHhcbiIsIHUgLCB2LCBzLCB3LCB4KTsKKy0jIGRlZmluZSBSRVRVUk5fVFJBQ0Uobix1LHYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyNkZWZpbmUgUkVUVVJOX1RSQUNFKG4sdSx2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJaWYgKERFQlVHX1RSQUNFQ0FMTFJFR1MoKSkJCQkJCQkJCQlcCisgCQl4ODZlbXVfZHVtcF9yZWdzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJaWYgKERFQlVHX1RSQUNFQ0FMTCgpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAorIAkJcHJpbnRrKCIlMDR4OiUwNHg6ICVzXG4iLHUsdixuKTsKKyAjZWxzZQorLSMgZGVmaW5lIENBTExfVFJBQ0UodSx2LHcseCxzKQorLSMgZGVmaW5lIFJFVFVSTl9UUkFDRShuLHUsdikKKysjZGVmaW5lIENBTExfVFJBQ0UodSx2LHcseCxzKQorKyNkZWZpbmUgUkVUVVJOX1RSQUNFKG4sdSx2KQorICNlbmRpZgorIAorICNpZmRlZiBERUJVRworQEAgLTE4NSwyNiArMTg1LDI1IEBACisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7ICAgICAgICAgICAgCQkJLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKytleHRlcm4gIkMiIHsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisgI2VuZGlmCisgCistZXh0ZXJuIHZvaWQgeDg2ZW11X2luY19kZWNvZGVkX2luc3RfbGVuIChpbnQgeCk7CistZXh0ZXJuIHZvaWQgeDg2ZW11X2RlY29kZV9wcmludGYgKGNoYXIgKngpOworLWV4dGVybiB2b2lkIHg4NmVtdV9kZWNvZGVfcHJpbnRmMiAoY2hhciAqeCwgaW50IHkpOworLWV4dGVybiB2b2lkIHg4NmVtdV9qdXN0X2Rpc2Fzc2VtYmxlICh2b2lkKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVfc2luZ2xlX3N0ZXAgKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9lbmRfaW5zdHIgKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9kdW1wX3JlZ3MgKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9kdW1wX3hyZWdzICh2b2lkKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVfcHJpbnRfaW50X3ZlY3QgKHUxNiBpdik7CistZXh0ZXJuIHZvaWQgeDg2ZW11X2luc3RydW1lbnRfaW5zdHJ1Y3Rpb24gKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9jaGVja19pcF9hY2Nlc3MgKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9jaGVja19zcF9hY2Nlc3MgKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9jaGVja19tZW1fYWNjZXNzICh1MzIgcCk7CistZXh0ZXJuIHZvaWQgeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzICh1aW50IHMsIHVpbnQgbyk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9pbmNfZGVjb2RlZF9pbnN0X2xlbihpbnQgeCk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9kZWNvZGVfcHJpbnRmKGNvbnN0IGNoYXIgKngpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfZGVjb2RlX3ByaW50ZjIoY29uc3QgY2hhciAqeCwgaW50IHkpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfanVzdF9kaXNhc3NlbWJsZSh2b2lkKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11X3NpbmdsZV9zdGVwKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfZW5kX2luc3RyKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfZHVtcF9yZWdzKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfZHVtcF94cmVncyh2b2lkKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11X3ByaW50X2ludF92ZWN0KHUxNiBpdik7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9pbnN0cnVtZW50X2luc3RydWN0aW9uKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfY2hlY2tfaXBfYWNjZXNzKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfY2hlY2tfc3BfYWNjZXNzKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfY2hlY2tfbWVtX2FjY2Vzcyh1MzIgcCk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9jaGVja19kYXRhX2FjY2Vzcyh1aW50IHMsIHVpbnQgbyk7CisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworLX0gICAgICAgICAgICAgICAgICAgICAgIAkJCS8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgCSovCisrfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgICAgICAgICAgKi8KKyAjZW5kaWYKKy0KKy0jZW5kaWYgLyogX19YODZFTVVfREVCVUdfSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfREVCVUdfSCAqLworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS9kZWNvZGUuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS9kZWNvZGUuaAoraW5kZXggNjFjZDRkYy4uNDlhMWY3YiAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3g4NmVtdS9kZWNvZGUuaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11L2RlY29kZS5oCitAQCAtNTIsMzcgKzUyLDM2IEBACisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7ICAgICAgICAgICAgCQkJLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKytleHRlcm4gIkMiIHsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisgI2VuZGlmCisgCistdm9pZCAJeDg2ZW11X2ludHJfcmFpc2UgKHU4IHR5cGUpOworLXZvaWQgICAgZmV0Y2hfZGVjb2RlX21vZHJtIChpbnQgKm1vZCxpbnQgKnJlZ2gsaW50ICpyZWdsKTsKKy11OCAgICAgIGZldGNoX2J5dGVfaW1tICh2b2lkKTsKKy11MTYgICAgIGZldGNoX3dvcmRfaW1tICh2b2lkKTsKKy11MzIgICAgIGZldGNoX2xvbmdfaW1tICh2b2lkKTsKKy11OCAgICAgIGZldGNoX2RhdGFfYnl0ZSAodWludCBvZmZzZXQpOworLXU4ICAgICAgZmV0Y2hfZGF0YV9ieXRlX2FicyAodWludCBzZWdtZW50LCB1aW50IG9mZnNldCk7CistdTE2ICAgICBmZXRjaF9kYXRhX3dvcmQgKHVpbnQgb2Zmc2V0KTsKKy11MTYgICAgIGZldGNoX2RhdGFfd29yZF9hYnMgKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQpOworLXUzMiAgICAgZmV0Y2hfZGF0YV9sb25nICh1aW50IG9mZnNldCk7CistdTMyICAgICBmZXRjaF9kYXRhX2xvbmdfYWJzICh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0KTsKKy12b2lkICAgIHN0b3JlX2RhdGFfYnl0ZSAodWludCBvZmZzZXQsIHU4IHZhbCk7Cistdm9pZCAgICBzdG9yZV9kYXRhX2J5dGVfYWJzICh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0LCB1OCB2YWwpOworLXZvaWQgICAgc3RvcmVfZGF0YV93b3JkICh1aW50IG9mZnNldCwgdTE2IHZhbCk7Cistdm9pZCAgICBzdG9yZV9kYXRhX3dvcmRfYWJzICh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0LCB1MTYgdmFsKTsKKy12b2lkICAgIHN0b3JlX2RhdGFfbG9uZyAodWludCBvZmZzZXQsIHUzMiB2YWwpOworLXZvaWQgICAgc3RvcmVfZGF0YV9sb25nX2FicyAodWludCBzZWdtZW50LCB1aW50IG9mZnNldCwgdTMyIHZhbCk7CistdTgqIAlkZWNvZGVfcm1fYnl0ZV9yZWdpc3RlcihpbnQgcmVnKTsKKy11MTYqIAlkZWNvZGVfcm1fd29yZF9yZWdpc3RlcihpbnQgcmVnKTsKKy11MzIqIAlkZWNvZGVfcm1fbG9uZ19yZWdpc3RlcihpbnQgcmVnKTsKKy11MTYqIAlkZWNvZGVfcm1fc2VnX3JlZ2lzdGVyKGludCByZWcpOworLXUzMglkZWNvZGVfcm0wMF9hZGRyZXNzKGludCBybSk7CistdTMyCWRlY29kZV9ybTAxX2FkZHJlc3MoaW50IHJtKTsKKy11MzIJZGVjb2RlX3JtMTBfYWRkcmVzcyhpbnQgcm0pOworLXUzMglkZWNvZGVfc2liX2FkZHJlc3MoaW50IHNpYiwgaW50IG1vZCk7CisrICAgIHZvaWQgeDg2ZW11X2ludHJfcmFpc2UodTggdHlwZSk7CisrICAgIHZvaWQgZmV0Y2hfZGVjb2RlX21vZHJtKGludCAqbW9kLCBpbnQgKnJlZ2gsIGludCAqcmVnbCk7CisrICAgIHU4IGZldGNoX2J5dGVfaW1tKHZvaWQpOworKyAgICB1MTYgZmV0Y2hfd29yZF9pbW0odm9pZCk7CisrICAgIHUzMiBmZXRjaF9sb25nX2ltbSh2b2lkKTsKKysgICAgdTggZmV0Y2hfZGF0YV9ieXRlKHVpbnQgb2Zmc2V0KTsKKysgICAgdTggZmV0Y2hfZGF0YV9ieXRlX2Ficyh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0KTsKKysgICAgdTE2IGZldGNoX2RhdGFfd29yZCh1aW50IG9mZnNldCk7CisrICAgIHUxNiBmZXRjaF9kYXRhX3dvcmRfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQpOworKyAgICB1MzIgZmV0Y2hfZGF0YV9sb25nKHVpbnQgb2Zmc2V0KTsKKysgICAgdTMyIGZldGNoX2RhdGFfbG9uZ19hYnModWludCBzZWdtZW50LCB1aW50IG9mZnNldCk7CisrICAgIHZvaWQgc3RvcmVfZGF0YV9ieXRlKHVpbnQgb2Zmc2V0LCB1OCB2YWwpOworKyAgICB2b2lkIHN0b3JlX2RhdGFfYnl0ZV9hYnModWludCBzZWdtZW50LCB1aW50IG9mZnNldCwgdTggdmFsKTsKKysgICAgdm9pZCBzdG9yZV9kYXRhX3dvcmQodWludCBvZmZzZXQsIHUxNiB2YWwpOworKyAgICB2b2lkIHN0b3JlX2RhdGFfd29yZF9hYnModWludCBzZWdtZW50LCB1aW50IG9mZnNldCwgdTE2IHZhbCk7CisrICAgIHZvaWQgc3RvcmVfZGF0YV9sb25nKHVpbnQgb2Zmc2V0LCB1MzIgdmFsKTsKKysgICAgdm9pZCBzdG9yZV9kYXRhX2xvbmdfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQsIHUzMiB2YWwpOworKyAgICB1OCAqZGVjb2RlX3JtX2J5dGVfcmVnaXN0ZXIoaW50IHJlZyk7CisrICAgIHUxNiAqZGVjb2RlX3JtX3dvcmRfcmVnaXN0ZXIoaW50IHJlZyk7CisrICAgIHUzMiAqZGVjb2RlX3JtX2xvbmdfcmVnaXN0ZXIoaW50IHJlZyk7CisrICAgIHUxNiAqZGVjb2RlX3JtX3NlZ19yZWdpc3RlcihpbnQgcmVnKTsKKysgICAgdTMyIGRlY29kZV9ybTAwX2FkZHJlc3MoaW50IHJtKTsKKysgICAgdTMyIGRlY29kZV9ybTAxX2FkZHJlc3MoaW50IHJtKTsKKysgICAgdTMyIGRlY29kZV9ybTEwX2FkZHJlc3MoaW50IHJtKTsKKysgICAgdTMyIGRlY29kZV9zaWJfYWRkcmVzcyhpbnQgc2liLCBpbnQgbW9kKTsKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistfSAgICAgICAgICAgICAgICAgICAgICAgCQkJLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAJKi8KKyt9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgICAgICAgICAqLworICNlbmRpZgorLQorLSNlbmRpZiAvKiBfX1g4NkVNVV9ERUNPREVfSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfREVDT0RFX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUvZnB1LmggYi9saWJzL3g4NmVtdS94ODZlbXUvZnB1LmgKK2luZGV4IDVmYjI3MTQuLjFjMTE0OTggMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS94ODZlbXUvZnB1LmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS9mcHUuaAorQEAgLTQwLDIyICs0MCwyMSBAQAorICNkZWZpbmUgX19YODZFTVVfRlBVX0gKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7ICAgICAgICAgICAgCQkJLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKytleHRlcm4gIkMiIHsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisgI2VuZGlmCisgCisgLyogdGhlc2UgaGF2ZSB0byBiZSBkZWZpbmVkLCB3aGV0aGVyIDgwODcgc3VwcG9ydCBjb21waWxlZCBpbiBvciBub3QuICovCisgCistZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kOCAodTggb3AxKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q5ICh1OCBvcDEpOworLWV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGEgKHU4IG9wMSk7CistZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYiAodTggb3AxKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RjICh1OCBvcDEpOworLWV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGQgKHU4IG9wMSk7CistZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZSAodTggb3AxKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RmICh1OCBvcDEpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q4KHU4IG9wMSk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZDkodTggb3AxKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYSh1OCBvcDEpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RiKHU4IG9wMSk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGModTggb3AxKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZCh1OCBvcDEpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RlKHU4IG9wMSk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGYodTggb3AxKTsKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistfSAgICAgICAgICAgICAgICAgICAgICAgCQkJLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAJKi8KKyt9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgICAgICAgICAqLworICNlbmRpZgorLQorLSNlbmRpZiAvKiBfX1g4NkVNVV9GUFVfSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfRlBVX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUvZnB1X3JlZ3MuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS9mcHVfcmVncy5oCitpbmRleCBlNTliODA3Li41YTc4MGU2IDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUveDg2ZW11L2ZwdV9yZWdzLmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS9mcHVfcmVncy5oCitAQCAtNDIsMjMgKzQyLDIzIEBACisgI2lmZGVmIFg4Nl9GUFVfU1VQUE9SVAorIAorICNpZmRlZiBQQUNLCistIyBwcmFnbWEgUEFDSworKyNwcmFnbWEgUEFDSworICNlbmRpZgorIAorIC8qIEJhc2ljIDgwODcgcmVnaXN0ZXIgY2FuIGhvbGQgYW55IG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOiAqLworIAorIHVuaW9uIHg4Nl9mcHVfcmVnX3UgeworLSAgICBzOCAgICAgICAgICAgICAgICAgIHRlbmJ5dGVzWzEwXTsKKy0gICAgZG91YmxlICAgICAgICAgICAgICBkdmFsOworLSAgICBmbG9hdCAgICAgICAgICAgICAgIGZ2YWw7CistICAgIHMxNiAgICAgICAgICAgICAgICAgc3ZhbDsKKy0gICAgczMyICAgICAgICAgICAgICAgICBsdmFsOworLQl9OworKyAgICBzOCB0ZW5ieXRlc1sxMF07CisrICAgIGRvdWJsZSBkdmFsOworKyAgICBmbG9hdCBmdmFsOworKyAgICBzMTYgc3ZhbDsKKysgICAgczMyIGx2YWw7CisrfTsKKyAKKyBzdHJ1Y3QgeDg2X2ZwdV9yZWcgeworLQl1bmlvbiB4ODZfZnB1X3JlZ191IHJlZzsKKy0JY2hhciAgICAgICAgICAgICAgICB0YWc7CistCX07CisrICAgIHVuaW9uIHg4Nl9mcHVfcmVnX3UgcmVnOworKyAgICBjaGFyIHRhZzsKKyt9OworIAorIC8qCisgICogU2luY2Ugd2UgYXJlIG5vdCBnb2luZyB0byB3b3JyeSBhYm91dCB0aGUgcHJvYmxlbXMgb2YgYWxpYXNpbmcKK0BAIC04MywxNCArODMsMTQgQEAgc3RydWN0IHg4Nl9mcHVfcmVnIHsKKyAjZGVmaW5lICBYODZfRlBVX1NUS1RPUCAgMAorIAorIHN0cnVjdCB4ODZfZnB1X3JlZ2lzdGVycyB7CistICAgIHN0cnVjdCB4ODZfZnB1X3JlZyAgeDg2X2ZwdV9zdGFja1s4XTsKKy0gICAgaW50ICAgICAgICAgICAgICAgICB4ODZfZnB1X2ZsYWdzOworLSAgICBpbnQgICAgICAgICAgICAgICAgIHg4Nl9mcHVfY29uZmlnOyAgICAgICAgIC8qIHJvdW5kaW5nIG1vZGVzLCBldGMuICovCistICAgIHNob3J0ICAgICAgICAgICAgICAgeDg2X2ZwdV90b3MsIHg4Nl9mcHVfYm9zOworLQl9OworKyAgICBzdHJ1Y3QgeDg2X2ZwdV9yZWcgeDg2X2ZwdV9zdGFja1s4XTsKKysgICAgaW50IHg4Nl9mcHVfZmxhZ3M7CisrICAgIGludCB4ODZfZnB1X2NvbmZpZzsgICAgICAgICAvKiByb3VuZGluZyBtb2RlcywgZXRjLiAqLworKyAgICBzaG9ydCB4ODZfZnB1X3RvcywgeDg2X2ZwdV9ib3M7CisrfTsKKyAKKyAjaWZkZWYgRU5EX1BBQ0sKKy0jIHByYWdtYSBFTkRfUEFDSworKyNwcmFnbWEgRU5EX1BBQ0sKKyAjZW5kaWYKKyAKKyAvKgorQEAgLTEwNCwxNiArMTA0LDE2IEBAIHN0cnVjdCB4ODZfZnB1X3JlZ2lzdGVycyB7CisgICogaW5zdHJ1Y3Rpb25zLgorICAqLworIAorLSNlbmRpZiAvKiBYODZfRlBVX1NVUFBPUlQgKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFg4Nl9GUFVfU1VQUE9SVCAqLworIAorICNpZmRlZiBERUJVRworLSMgZGVmaW5lIERFQ09ERV9QUklOVElOU1RSMzIodCxtb2QscmgscmwpICAgICAJXAorKyNkZWZpbmUgREVDT0RFX1BSSU5USU5TVFIzMih0LG1vZCxyaCxybCkgICAgIAlcCisgCURFQ09ERV9QUklOVEYodFsobW9kPDwzKSsocmgpXSk7CistIyBkZWZpbmUgREVDT0RFX1BSSU5USU5TVFIyNTYodCxtb2QscmgscmwpICAgIAlcCisrI2RlZmluZSBERUNPREVfUFJJTlRJTlNUUjI1Nih0LG1vZCxyaCxybCkgICAgCVwKKyAJREVDT0RFX1BSSU5URih0Wyhtb2Q8PDYpKyhyaDw8MykrKHJsKV0pOworICNlbHNlCistIyBkZWZpbmUgREVDT0RFX1BSSU5USU5TVFIzMih0LG1vZCxyaCxybCkKKy0jIGRlZmluZSBERUNPREVfUFJJTlRJTlNUUjI1Nih0LG1vZCxyaCxybCkKKysjZGVmaW5lIERFQ09ERV9QUklOVElOU1RSMzIodCxtb2QscmgscmwpCisrI2RlZmluZSBERUNPREVfUFJJTlRJTlNUUjI1Nih0LG1vZCxyaCxybCkKKyAjZW5kaWYKKyAKKy0jZW5kaWYgLyogX19YODZFTVVfRlBVX1JFR1NfSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfRlBVX1JFR1NfSCAqLworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS9vcHMuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS9vcHMuaAoraW5kZXggNjVlYTY3Ni4uMWJjMDdhNCAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3g4NmVtdS9vcHMuaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11L29wcy5oCitAQCAtMzksNyArMzksNyBAQAorICNpZm5kZWYgX19YODZFTVVfT1BTX0gKKyAjZGVmaW5lIF9fWDg2RU1VX09QU19ICisgCistZXh0ZXJuIHZvaWQgKCp4ODZlbXVfb3B0YWJbMHgxMDBdKSh1OCBvcDEpOworLWV4dGVybiB2b2lkICgqeDg2ZW11X29wdGFiMlsweDEwMF0pKHU4IG9wMik7CisrZXh0ZXJuIHZvaWQgKCp4ODZlbXVfb3B0YWJbMHgxMDBdKSAodTggb3AxKTsKKytleHRlcm4gdm9pZCAoKng4NmVtdV9vcHRhYjJbMHgxMDBdKSAodTggb3AyKTsKKyAKKy0jZW5kaWYgLyogX19YODZFTVVfT1BTX0ggKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fWDg2RU1VX09QU19IICovCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUveDg2ZW11L3ByaW1fYXNtLmggYi9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV9hc20uaAoraW5kZXggZTAyM2NmOC4uYWNhMTMyYiAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3g4NmVtdS9wcmltX2FzbS5oCisrKysgYi9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV9hc20uaAorQEAgLTQ5LDE0ICs0OSwxNiBAQAorICNkZWZpbmUJX19IQVZFX0lOTElORV9BU1NFTUJMRVJfXworICNlbmRpZgorIAorLXUzMgkJZ2V0X2ZsYWdzX2FzbSh2b2lkKTsKKyt1MzIgZ2V0X2ZsYWdzX2FzbSh2b2lkKTsKKysKKyAjcHJhZ21hIGF1eCBnZXRfZmxhZ3NfYXNtID0JCQlcCisgCSJwdXNoZiIgICAgICAgICAgICAgICAgICAgICAgICAgXAorIAkicG9wCWVheCIgICAgICAgICAgICAgICAgICAJXAorIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXhdOworIAorLXUxNiAgICAgYWFhX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworK3UxNiBhYWFfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkKTsKKysKKyAjcHJhZ21hIGF1eCBhYWFfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTY3LDcgKzY5LDggQEAgdTE2ICAgICBhYWFfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4XTsKKyAKKy11MTYgICAgIGFhc193b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyt1MTYgYWFzX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCk7CisrCisgI3ByYWdtYSBhdXggYWFzX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC03OCw3ICs4MSw4IEBAIHUxNiAgICAgYWFzX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheF07CisgCistdTE2ICAgICBhYWRfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisrdTE2IGFhZF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQpOworKworICNwcmFnbWEgYXV4IGFhZF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtODksNyArOTMsOCBAQCB1MTYgICAgIGFhZF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXhdOworIAorLXUxNiAgICAgYWFtX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisrdTE2IGFhbV93b3JkX2FzbSh1MzIgKiBmbGFncywgdTggZCk7CisrCisgI3ByYWdtYSBhdXggYWFtX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0xMDAsNyArMTA1LDggQEAgdTE2ICAgICBhYW1fd29yZF9hc20odTMyICpmbGFncyx1OCBkKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXhdOworIAorLXU4ICAgICAgYWRjX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggYWRjX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBhZGNfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTExMSw3ICsxMTcsOCBAQCB1OCAgICAgIGFkY19ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBibF07CisgCistdTE2ICAgICBhZGNfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworK3UxNiBhZGNfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggYWRjX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0xMjIsNyArMTI5LDggQEAgdTE2ICAgICBhZGNfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdTMyICAgICBhZGNfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworK3UzMiBhZGNfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggYWRjX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0xMzMsNyArMTQxLDggQEAgdTMyICAgICBhZGNfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWJ4XTsKKyAKKy11OCAgICAgIGFkZF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworK3U4IGFkZF9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggYWRkX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0xNDQsNyArMTUzLDggQEAgdTggICAgICBhZGRfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWwgYmxdOworIAorLXUxNiAgICAgYWRkX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBzKTsKKyt1MTYgYWRkX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IGFkZF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMTU1LDcgKzE2NSw4IEBAIHUxNiAgICAgYWRkX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBzKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXggYnhdOworIAorLXUzMiAgICAgYWRkX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyt1MzIgYWRkX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTMyIHMpOworKworICNwcmFnbWEgYXV4IGFkZF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMTY2LDcgKzE3Nyw4IEBAIHUzMiAgICAgYWRkX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4IGVieF07CisgCistdTggICAgICBhbmRfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyt1OCBhbmRfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IGFuZF9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMTc3LDcgKzE4OSw4IEBAIHU4ICAgICAgYW5kX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsIGJsXTsKKyAKKy11MTYgICAgIGFuZF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisrdTE2IGFuZF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHUxNiBzKTsKKysKKyAjcHJhZ21hIGF1eCBhbmRfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTE4OCw3ICsyMDEsOCBAQCB1MTYgICAgIGFuZF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGJ4XTsKKyAKKy11MzIgICAgIGFuZF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisrdTMyIGFuZF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHUzMiBzKTsKKysKKyAjcHJhZ21hIGF1eCBhbmRfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTE5OSw3ICsyMTMsOCBAQCB1MzIgICAgIGFuZF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBlYnhdOworIAorLXU4ICAgICAgY21wX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggY21wX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBjbXBfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTIxMCw3ICsyMjUsOCBAQCB1OCAgICAgIGNtcF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBibF07CisgCistdTE2ICAgICBjbXBfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworK3UxNiBjbXBfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggY21wX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0yMjEsNyArMjM3LDggQEAgdTE2ICAgICBjbXBfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdTMyICAgICBjbXBfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworK3UzMiBjbXBfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggY21wX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0yMzIsNyArMjQ5LDggQEAgdTMyICAgICBjbXBfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWJ4XTsKKyAKKy11OCAgICAgIGRhYV9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworK3U4IGRhYV9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCk7CisrCisgI3ByYWdtYSBhdXggZGFhX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0yNDMsNyArMjYxLDggQEAgdTggICAgICBkYWFfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWxdOworIAorLXU4ICAgICAgZGFzX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisrdTggZGFzX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkKTsKKysKKyAjcHJhZ21hIGF1eCBkYXNfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTI1NCw3ICsyNzMsOCBAQCB1OCAgICAgIGRhc19ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbF07CisgCistdTggICAgICBkZWNfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkKTsKKyt1OCBkZWNfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQpOworKworICNwcmFnbWEgYXV4IGRlY19ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMjY1LDcgKzI4NSw4IEBAIHU4ICAgICAgZGVjX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsXTsKKyAKKy11MTYgICAgIGRlY193b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyt1MTYgZGVjX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCk7CisrCisgI3ByYWdtYSBhdXggZGVjX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0yNzYsNyArMjk3LDggQEAgdTE2ICAgICBkZWNfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4XTsKKyAKKy11MzIgICAgIGRlY19sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkKTsKKyt1MzIgZGVjX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCk7CisrCisgI3ByYWdtYSBhdXggZGVjX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0yODcsNyArMzA5LDggQEAgdTMyICAgICBkZWNfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheF07CisgCistdTggICAgICBpbmNfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkKTsKKyt1OCBpbmNfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQpOworKworICNwcmFnbWEgYXV4IGluY19ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMjk4LDcgKzMyMSw4IEBAIHU4ICAgICAgaW5jX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsXTsKKyAKKy11MTYgICAgIGluY193b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyt1MTYgaW5jX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCk7CisrCisgI3ByYWdtYSBhdXggaW5jX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0zMDksNyArMzMzLDggQEAgdTE2ICAgICBpbmNfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4XTsKKyAKKy11MzIgICAgIGluY19sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkKTsKKyt1MzIgaW5jX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCk7CisrCisgI3ByYWdtYSBhdXggaW5jX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0zMjAsNyArMzQ1LDggQEAgdTMyICAgICBpbmNfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheF07CisgCistdTggICAgICBvcl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworK3U4IG9yX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBvcl9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMzMxLDcgKzM1Nyw4IEBAIHU4ICAgICAgb3JfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWwgYmxdOworIAorLXUxNiAgICAgb3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworK3UxNiBvcl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHUxNiBzKTsKKysKKyAjcHJhZ21hIGF1eCBvcl93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMzQyLDcgKzM2OSw4IEBAIHUxNiAgICAgb3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdTMyICAgICBvcl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisrdTMyIG9yX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTMyIHMpOworKworICNwcmFnbWEgYXV4IG9yX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0zNTMsNyArMzgxLDggQEAgdTMyICAgICBvcl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBlYnhdOworIAorLXU4ICAgICAgbmVnX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisrdTggbmVnX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkKTsKKysKKyAjcHJhZ21hIGF1eCBuZWdfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTM2NCw3ICszOTMsOCBAQCB1OCAgICAgIG5lZ19ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbF07CisgCistdTE2ICAgICBuZWdfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisrdTE2IG5lZ193b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQpOworKworICNwcmFnbWEgYXV4IG5lZ193b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMzc1LDcgKzQwNSw4IEBAIHUxNiAgICAgbmVnX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheF07CisgCistdTMyICAgICBuZWdfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCk7CisrdTMyIG5lZ19sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQpOworKworICNwcmFnbWEgYXV4IG5lZ19sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMzg2LDcgKzQxNyw4IEBAIHUzMiAgICAgbmVnX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXhdOworIAorLXU4ICAgICAgbm90X2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisrdTggbm90X2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkKTsKKysKKyAjcHJhZ21hIGF1eCBub3RfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTM5Nyw3ICs0MjksOCBAQCB1OCAgICAgIG5vdF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbF07CisgCistdTE2ICAgICBub3Rfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisrdTE2IG5vdF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQpOworKworICNwcmFnbWEgYXV4IG5vdF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDA4LDcgKzQ0MSw4IEBAIHUxNiAgICAgbm90X3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheF07CisgCistdTMyICAgICBub3RfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCk7CisrdTMyIG5vdF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQpOworKworICNwcmFnbWEgYXV4IG5vdF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDE5LDcgKzQ1Myw4IEBAIHUzMiAgICAgbm90X2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXhdOworIAorLXU4ICAgICAgcmNsX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggcmNsX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCByY2xfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTQzMCw3ICs0NjUsOCBAQCB1OCAgICAgIHJjbF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICByY2xfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHJjbF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJjbF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDQxLDcgKzQ3Nyw4IEBAIHUxNiAgICAgcmNsX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICByY2xfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHJjbF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJjbF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDUyLDcgKzQ4OSw4IEBAIHUzMiAgICAgcmNsX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXU4ICAgICAgcmNyX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggcmNyX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCByY3JfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTQ2Myw3ICs1MDEsOCBAQCB1OCAgICAgIHJjcl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICByY3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHJjcl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJjcl93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDc0LDcgKzUxMyw4IEBAIHUxNiAgICAgcmNyX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICByY3JfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHJjcl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJjcl9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDg1LDcgKzUyNSw4IEBAIHUzMiAgICAgcmNyX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXU4ICAgICAgcm9sX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggcm9sX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCByb2xfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTQ5Niw3ICs1MzcsOCBAQCB1OCAgICAgIHJvbF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICByb2xfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHJvbF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJvbF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTA3LDcgKzU0OSw4IEBAIHUxNiAgICAgcm9sX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICByb2xfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHJvbF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJvbF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTE4LDcgKzU2MSw4IEBAIHUzMiAgICAgcm9sX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXU4ICAgICAgcm9yX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggcm9yX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCByb3JfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTUyOSw3ICs1NzMsOCBAQCB1OCAgICAgIHJvcl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICByb3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHJvcl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJvcl93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTQwLDcgKzU4NSw4IEBAIHUxNiAgICAgcm9yX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICByb3JfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHJvcl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJvcl9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTUxLDcgKzU5Nyw4IEBAIHUzMiAgICAgcm9yX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXU4ICAgICAgc2hsX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggc2hsX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzaGxfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTU2Miw3ICs2MDksOCBAQCB1OCAgICAgIHNobF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICBzaGxfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHNobF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNobF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTczLDcgKzYyMSw4IEBAIHUxNiAgICAgc2hsX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICBzaGxfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHNobF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNobF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTg0LDcgKzYzMyw4IEBAIHUzMiAgICAgc2hsX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXU4ICAgICAgc2hyX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggc2hyX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzaHJfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTU5NSw3ICs2NDUsOCBAQCB1OCAgICAgIHNocl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICBzaHJfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHNocl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNocl93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNjA2LDcgKzY1Nyw4IEBAIHUxNiAgICAgc2hyX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICBzaHJfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHNocl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNocl9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNjE3LDcgKzY2OSw4IEBAIHUzMiAgICAgc2hyX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXU4ICAgICAgc2FyX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggc2FyX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzYXJfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTYyOCw3ICs2ODEsOCBAQCB1OCAgICAgIHNhcl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICBzYXJfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHNhcl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNhcl93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNjM5LDcgKzY5Myw4IEBAIHUxNiAgICAgc2FyX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICBzYXJfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHNhcl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNhcl9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNjUwLDcgKzcwNSw4IEBAIHUzMiAgICAgc2FyX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXUxNgkJc2hsZF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CisrdTE2IHNobGRfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggc2hsZF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNjYxLDcgKzcxNyw4IEBAIHUxNgkJc2hsZF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGR4IGNsXTsKKyAKKy11MzIgICAgIHNobGRfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIGZpbGwsIHU4IHMpOworK3UzMiBzaGxkX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTMyIGZpbGwsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNobGRfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTY3Miw3ICs3MjksOCBAQCB1MzIgICAgIHNobGRfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIGZpbGwsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWR4IGNsXTsKKyAKKy11MTYJCXNocmRfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IGZpbGwsIHU4IHMpOworK3UxNiBzaHJkX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTE2IGZpbGwsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNocmRfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTY4Myw3ICs3NDEsOCBAQCB1MTYJCXNocmRfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IGZpbGwsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBkeCBjbF07CisgCistdTMyICAgICBzaHJkX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBmaWxsLCB1OCBzKTsKKyt1MzIgc2hyZF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHUzMiBmaWxsLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzaHJkX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC02OTQsNyArNzUzLDggQEAgdTMyICAgICBzaHJkX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBmaWxsLCB1OCBzKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4IGVkeCBjbF07CisgCistdTggICAgICBzYmJfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyt1OCBzYmJfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNiYl9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNzA1LDcgKzc2NSw4IEBAIHU4ICAgICAgc2JiX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsIGJsXTsKKyAKKy11MTYgICAgIHNiYl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisrdTE2IHNiYl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHUxNiBzKTsKKysKKyAjcHJhZ21hIGF1eCBzYmJfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTcxNiw3ICs3NzcsOCBAQCB1MTYgICAgIHNiYl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGJ4XTsKKyAKKy11MzIgICAgIHNiYl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisrdTMyIHNiYl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHUzMiBzKTsKKysKKyAjcHJhZ21hIGF1eCBzYmJfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTcyNyw3ICs3ODksOCBAQCB1MzIgICAgIHNiYl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBlYnhdOworIAorLXU4ICAgICAgc3ViX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggc3ViX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzdWJfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTczOCw3ICs4MDEsOCBAQCB1OCAgICAgIHN1Yl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBibF07CisgCistdTE2ICAgICBzdWJfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworK3UxNiBzdWJfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggc3ViX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC03NDksNyArODEzLDggQEAgdTE2ICAgICBzdWJfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdTMyICAgICBzdWJfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworK3UzMiBzdWJfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggc3ViX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC03NjAsNyArODI1LDggQEAgdTMyICAgICBzdWJfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWJ4XTsKKyAKKy12b2lkCXRlc3RfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyt2b2lkIHRlc3RfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHRlc3RfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTc3MCw3ICs4MzYsOCBAQCB2b2lkCXRlc3RfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyAJcGFybSBbZWRpXSBbYWxdIFtibF0gICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWwgYmxdOworIAorLXZvaWQJdGVzdF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7Cisrdm9pZCB0ZXN0X3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IHRlc3Rfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTc4MCw3ICs4NDcsOCBAQCB2b2lkCXRlc3Rfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAlwYXJtIFtlZGldIFtheF0gW2J4XSAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdm9pZAl0ZXN0X2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyt2b2lkIHRlc3RfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggdGVzdF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNzkwLDcgKzg1OCw4IEBAIHZvaWQJdGVzdF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisgCXBhcm0gW2VkaV0gW2VheF0gW2VieF0gICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBlYnhdOworIAorLXU4ICAgICAgeG9yX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggeG9yX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCB4b3JfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTgwMSw3ICs4NzAsOCBAQCB1OCAgICAgIHhvcl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBibF07CisgCistdTE2ICAgICB4b3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworK3UxNiB4b3Jfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggeG9yX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC04MTIsNyArODgyLDggQEAgdTE2ICAgICB4b3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdTMyICAgICB4b3JfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworK3UzMiB4b3JfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggeG9yX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC04MjMsNyArODk0LDggQEAgdTMyICAgICB4b3JfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWJ4XTsKKyAKKy12b2lkICAgIGltdWxfYnl0ZV9hc20odTMyICpmbGFncyx1MTYgKmF4LHU4IGQsdTggcyk7Cisrdm9pZCBpbXVsX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1MTYgKiBheCwgdTggZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggaW11bF9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtODM0LDcgKzkwNiw4IEBAIHZvaWQgICAgaW11bF9ieXRlX2FzbSh1MzIgKmZsYWdzLHUxNiAqYXgsdTggZCx1OCBzKTsKKyAJcGFybSBbZWRpXSBbZXNpXSBbYWxdIFtibF0gICAgICBcCisgCW1vZGlmeSBleGFjdCBbZXNpIGF4IGJsXTsKKyAKKy12b2lkICAgIGltdWxfd29yZF9hc20odTMyICpmbGFncyx1MTYgKmF4LHUxNiAqZHgsdTE2IGQsdTE2IHMpOworK3ZvaWQgaW11bF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2ICogYXgsIHUxNiAqIGR4LCB1MTYgZCwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IGltdWxfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTg0Niw3ICs5MTksOCBAQCB2b2lkICAgIGltdWxfd29yZF9hc20odTMyICpmbGFncyx1MTYgKmF4LHUxNiAqZHgsdTE2IGQsdTE2IHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFtlY3hdIFtheF0gW2J4XVwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgZWRpIGF4IGJ4IGR4XTsKKyAKKy12b2lkICAgIGltdWxfbG9uZ19hc20odTMyICpmbGFncyx1MzIgKmVheCx1MzIgKmVkeCx1MzIgZCx1MzIgcyk7Cisrdm9pZCBpbXVsX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgKiBlYXgsIHUzMiAqIGVkeCwgdTMyIGQsIHUzMiBzKTsKKysKKyAjcHJhZ21hIGF1eCBpbXVsX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC04NTgsNyArOTMyLDggQEAgdm9pZCAgICBpbXVsX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyICplYXgsdTMyICplZHgsdTMyIGQsdTMyIHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFtlY3hdIFtlYXhdIFtlYnhdIFwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgZWRpIGVheCBlYnggZWR4XTsKKyAKKy12b2lkICAgIG11bF9ieXRlX2FzbSh1MzIgKmZsYWdzLHUxNiAqYXgsdTggZCx1OCBzKTsKKyt2b2lkIG11bF9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTE2ICogYXgsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IG11bF9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtODY5LDcgKzk0NCw4IEBAIHZvaWQgICAgbXVsX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTE2ICpheCx1OCBkLHU4IHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFthbF0gW2JsXSAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgYXggYmxdOworIAorLXZvaWQgICAgbXVsX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2ICpheCx1MTYgKmR4LHUxNiBkLHUxNiBzKTsKKyt2b2lkIG11bF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2ICogYXgsIHUxNiAqIGR4LCB1MTYgZCwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IG11bF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtODgxLDcgKzk1Nyw4IEBAIHZvaWQgICAgbXVsX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2ICpheCx1MTYgKmR4LHUxNiBkLHUxNiBzKTsKKyAJcGFybSBbZWRpXSBbZXNpXSBbZWN4XSBbYXhdIFtieF1cCisgCW1vZGlmeSBleGFjdCBbZXNpIGVkaSBheCBieCBkeF07CisgCistdm9pZCAgICBtdWxfbG9uZ19hc20odTMyICpmbGFncyx1MzIgKmVheCx1MzIgKmVkeCx1MzIgZCx1MzIgcyk7Cisrdm9pZCBtdWxfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiAqIGVheCwgdTMyICogZWR4LCB1MzIgZCwgdTMyIHMpOworKworICNwcmFnbWEgYXV4IG11bF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtODkzLDcgKzk3MCw4IEBAIHZvaWQgICAgbXVsX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyICplYXgsdTMyICplZHgsdTMyIGQsdTMyIHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFtlY3hdIFtlYXhdIFtlYnhdIFwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgZWRpIGVheCBlYnggZWR4XTsKKyAKKy12b2lkCWlkaXZfYnl0ZV9hc20odTMyICpmbGFncyx1OCAqYWwsdTggKmFoLHUxNiBkLHU4IHMpOworK3ZvaWQgaWRpdl9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggKiBhbCwgdTggKiBhaCwgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IGlkaXZfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTkwNSw3ICs5ODMsOCBAQCB2b2lkCWlkaXZfYnl0ZV9hc20odTMyICpmbGFncyx1OCAqYWwsdTggKmFoLHUxNiBkLHU4IHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFtlY3hdIFtheF0gW2JsXVwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgZWRpIGF4IGJsXTsKKyAKKy12b2lkCWlkaXZfd29yZF9hc20odTMyICpmbGFncyx1MTYgKmF4LHUxNiAqZHgsdTE2IGRsbyx1MTYgZGhpLHUxNiBzKTsKKyt2b2lkIGlkaXZfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiAqIGF4LCB1MTYgKiBkeCwgdTE2IGRsbywgdTE2IGRoaSwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IGlkaXZfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTkxNyw3ICs5OTYsOCBAQCB2b2lkCWlkaXZfd29yZF9hc20odTMyICpmbGFncyx1MTYgKmF4LHUxNiAqZHgsdTE2IGRsbyx1MTYgZGhpLHUxNiBzKTsKKyAJcGFybSBbZWRpXSBbZXNpXSBbZWN4XSBbYXhdIFtkeF0gW2J4XVwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgZWRpIGF4IGR4IGJ4XTsKKyAKKy12b2lkCWlkaXZfbG9uZ19hc20odTMyICpmbGFncyx1MzIgKmVheCx1MzIgKmVkeCx1MzIgZGxvLHUzMiBkaGksdTMyIHMpOworK3ZvaWQgaWRpdl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyICogZWF4LCB1MzIgKiBlZHgsIHUzMiBkbG8sIHUzMiBkaGksIHUzMiBzKTsKKysKKyAjcHJhZ21hIGF1eCBpZGl2X2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC05MjksNyArMTAwOSw4IEBAIHZvaWQJaWRpdl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiAqZWF4LHUzMiAqZWR4LHUzMiBkbG8sdTMyIGRoaSx1MzIgcyk7CisgCXBhcm0gW2VkaV0gW2VzaV0gW2VjeF0gW2VheF0gW2VkeF0gW2VieF1cCisgCW1vZGlmeSBleGFjdCBbZXNpIGVkaSBlYXggZWR4IGVieF07CisgCistdm9pZAlkaXZfYnl0ZV9hc20odTMyICpmbGFncyx1OCAqYWwsdTggKmFoLHUxNiBkLHU4IHMpOworK3ZvaWQgZGl2X2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCAqIGFsLCB1OCAqIGFoLCB1MTYgZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggZGl2X2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC05NDEsNyArMTAyMiw4IEBAIHZvaWQJZGl2X2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggKmFsLHU4ICphaCx1MTYgZCx1OCBzKTsKKyAJcGFybSBbZWRpXSBbZXNpXSBbZWN4XSBbYXhdIFtibF1cCisgCW1vZGlmeSBleGFjdCBbZXNpIGVkaSBheCBibF07CisgCistdm9pZAlkaXZfd29yZF9hc20odTMyICpmbGFncyx1MTYgKmF4LHUxNiAqZHgsdTE2IGRsbyx1MTYgZGhpLHUxNiBzKTsKKyt2b2lkIGRpdl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2ICogYXgsIHUxNiAqIGR4LCB1MTYgZGxvLCB1MTYgZGhpLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggZGl2X3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC05NTMsNyArMTAzNSw4IEBAIHZvaWQJZGl2X3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2ICpheCx1MTYgKmR4LHUxNiBkbG8sdTE2IGRoaSx1MTYgcyk7CisgCXBhcm0gW2VkaV0gW2VzaV0gW2VjeF0gW2F4XSBbZHhdIFtieF1cCisgCW1vZGlmeSBleGFjdCBbZXNpIGVkaSBheCBkeCBieF07CisgCistdm9pZAlkaXZfbG9uZ19hc20odTMyICpmbGFncyx1MzIgKmVheCx1MzIgKmVkeCx1MzIgZGxvLHUzMiBkaGksdTMyIHMpOworK3ZvaWQgZGl2X2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgKiBlYXgsIHUzMiAqIGVkeCwgdTMyIGRsbywgdTMyIGRoaSwgdTMyIHMpOworKworICNwcmFnbWEgYXV4IGRpdl9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtOTY3LDQgKzEwNTAsNCBAQCB2b2lkCWRpdl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiAqZWF4LHUzMiAqZWR4LHUzMiBkbG8sdTMyIGRoaSx1MzIgcyk7CisgCisgI2VuZGlmCisgCistI2VuZGlmIC8qIF9fWDg2RU1VX1BSSU1fQVNNX0ggKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fWDg2RU1VX1BSSU1fQVNNX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV9vcHMuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS9wcmltX29wcy5oCitpbmRleCBiZWE4MzU3Li4wZjBlNzhkIDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUveDg2ZW11L3ByaW1fb3BzLmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS9wcmltX29wcy5oCitAQCAtNDAsMTAyICs0MCwxMDIgQEAKKyAjZGVmaW5lIF9fWDg2RU1VX1BSSU1fT1BTX0gKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7ICAgICAgICAgICAgCQkJLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKytleHRlcm4gIkMiIHsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisgI2VuZGlmCisgCistdTE2ICAgICBhYWFfd29yZCAodTE2IGQpOworLXUxNiAgICAgYWFzX3dvcmQgKHUxNiBkKTsKKy11MTYgICAgIGFhZF93b3JkICh1MTYgZCk7CistdTE2ICAgICBhYW1fd29yZCAodTggZCk7CistdTggICAgICBhZGNfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICBhZGNfd29yZCAodTE2IGQsIHUxNiBzKTsKKy11MzIgICAgIGFkY19sb25nICh1MzIgZCwgdTMyIHMpOworLXU4ICAgICAgYWRkX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgYWRkX3dvcmQgKHUxNiBkLCB1MTYgcyk7CistdTMyICAgICBhZGRfbG9uZyAodTMyIGQsIHUzMiBzKTsKKy11OCAgICAgIGFuZF9ieXRlICh1OCBkLCB1OCBzKTsKKy11MTYgICAgIGFuZF93b3JkICh1MTYgZCwgdTE2IHMpOworLXUzMiAgICAgYW5kX2xvbmcgKHUzMiBkLCB1MzIgcyk7CistdTggICAgICBjbXBfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICBjbXBfd29yZCAodTE2IGQsIHUxNiBzKTsKKy11MzIgICAgIGNtcF9sb25nICh1MzIgZCwgdTMyIHMpOworLXU4ICAgICAgZGFhX2J5dGUgKHU4IGQpOworLXU4ICAgICAgZGFzX2J5dGUgKHU4IGQpOworLXU4ICAgICAgZGVjX2J5dGUgKHU4IGQpOworLXUxNiAgICAgZGVjX3dvcmQgKHUxNiBkKTsKKy11MzIgICAgIGRlY19sb25nICh1MzIgZCk7CistdTggICAgICBpbmNfYnl0ZSAodTggZCk7CistdTE2ICAgICBpbmNfd29yZCAodTE2IGQpOworLXUzMiAgICAgaW5jX2xvbmcgKHUzMiBkKTsKKy11OCAgICAgIG9yX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgb3Jfd29yZCAodTE2IGQsIHUxNiBzKTsKKy11MzIgICAgIG9yX2xvbmcgKHUzMiBkLCB1MzIgcyk7CistdTggICAgICBuZWdfYnl0ZSAodTggcyk7CistdTE2ICAgICBuZWdfd29yZCAodTE2IHMpOworLXUzMiAgICAgbmVnX2xvbmcgKHUzMiBzKTsKKy11OCAgICAgIG5vdF9ieXRlICh1OCBzKTsKKy11MTYgICAgIG5vdF93b3JkICh1MTYgcyk7CistdTMyICAgICBub3RfbG9uZyAodTMyIHMpOworLXU4ICAgICAgcmNsX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgcmNsX3dvcmQgKHUxNiBkLCB1OCBzKTsKKy11MzIgICAgIHJjbF9sb25nICh1MzIgZCwgdTggcyk7CistdTggICAgICByY3JfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICByY3Jfd29yZCAodTE2IGQsIHU4IHMpOworLXUzMiAgICAgcmNyX2xvbmcgKHUzMiBkLCB1OCBzKTsKKy11OCAgICAgIHJvbF9ieXRlICh1OCBkLCB1OCBzKTsKKy11MTYgICAgIHJvbF93b3JkICh1MTYgZCwgdTggcyk7CistdTMyICAgICByb2xfbG9uZyAodTMyIGQsIHU4IHMpOworLXU4ICAgICAgcm9yX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgcm9yX3dvcmQgKHUxNiBkLCB1OCBzKTsKKy11MzIgICAgIHJvcl9sb25nICh1MzIgZCwgdTggcyk7CistdTggICAgICBzaGxfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICBzaGxfd29yZCAodTE2IGQsIHU4IHMpOworLXUzMiAgICAgc2hsX2xvbmcgKHUzMiBkLCB1OCBzKTsKKy11OCAgICAgIHNocl9ieXRlICh1OCBkLCB1OCBzKTsKKy11MTYgICAgIHNocl93b3JkICh1MTYgZCwgdTggcyk7CistdTMyICAgICBzaHJfbG9uZyAodTMyIGQsIHU4IHMpOworLXU4ICAgICAgc2FyX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgc2FyX3dvcmQgKHUxNiBkLCB1OCBzKTsKKy11MzIgICAgIHNhcl9sb25nICh1MzIgZCwgdTggcyk7CistdTE2ICAgICBzaGxkX3dvcmQgKHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CistdTMyICAgICBzaGxkX2xvbmcgKHUzMiBkLCB1MzIgZmlsbCwgdTggcyk7CistdTE2ICAgICBzaHJkX3dvcmQgKHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CistdTMyICAgICBzaHJkX2xvbmcgKHUzMiBkLCB1MzIgZmlsbCwgdTggcyk7CistdTggICAgICBzYmJfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICBzYmJfd29yZCAodTE2IGQsIHUxNiBzKTsKKy11MzIgICAgIHNiYl9sb25nICh1MzIgZCwgdTMyIHMpOworLXU4ICAgICAgc3ViX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgc3ViX3dvcmQgKHUxNiBkLCB1MTYgcyk7CistdTMyICAgICBzdWJfbG9uZyAodTMyIGQsIHUzMiBzKTsKKy12b2lkICAgIHRlc3RfYnl0ZSAodTggZCwgdTggcyk7Cistdm9pZCAgICB0ZXN0X3dvcmQgKHUxNiBkLCB1MTYgcyk7Cistdm9pZCAgICB0ZXN0X2xvbmcgKHUzMiBkLCB1MzIgcyk7CistdTggICAgICB4b3JfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICB4b3Jfd29yZCAodTE2IGQsIHUxNiBzKTsKKy11MzIgICAgIHhvcl9sb25nICh1MzIgZCwgdTMyIHMpOworLXZvaWQgICAgaW11bF9ieXRlICh1OCBzKTsKKy12b2lkICAgIGltdWxfd29yZCAodTE2IHMpOworLXZvaWQgICAgaW11bF9sb25nICh1MzIgcyk7Cistdm9pZCAJaW11bF9sb25nX2RpcmVjdCh1MzIgKnJlc19sbywgdTMyKiByZXNfaGksdTMyIGQsIHUzMiBzKTsKKy12b2lkICAgIG11bF9ieXRlICh1OCBzKTsKKy12b2lkICAgIG11bF93b3JkICh1MTYgcyk7Cistdm9pZCAgICBtdWxfbG9uZyAodTMyIHMpOworLXZvaWQgICAgaWRpdl9ieXRlICh1OCBzKTsKKy12b2lkICAgIGlkaXZfd29yZCAodTE2IHMpOworLXZvaWQgICAgaWRpdl9sb25nICh1MzIgcyk7Cistdm9pZCAgICBkaXZfYnl0ZSAodTggcyk7Cistdm9pZCAgICBkaXZfd29yZCAodTE2IHMpOworLXZvaWQgICAgZGl2X2xvbmcgKHUzMiBzKTsKKy12b2lkICAgIGlucyAoaW50IHNpemUpOworLXZvaWQgICAgb3V0cyAoaW50IHNpemUpOworLXUxNiAgICAgbWVtX2FjY2Vzc193b3JkIChpbnQgYWRkcik7Cistdm9pZCAgICBwdXNoX3dvcmQgKHUxNiB3KTsKKy12b2lkICAgIHB1c2hfbG9uZyAodTMyIHcpOworLXUxNiAgICAgcG9wX3dvcmQgKHZvaWQpOworLXUzMgkJcG9wX2xvbmcgKHZvaWQpOworKyAgICB1MTYgYWFhX3dvcmQodTE2IGQpOworKyAgICB1MTYgYWFzX3dvcmQodTE2IGQpOworKyAgICB1MTYgYWFkX3dvcmQodTE2IGQpOworKyAgICB1MTYgYWFtX3dvcmQodTggZCk7CisrICAgIHU4IGFkY19ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgYWRjX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIGFkY19sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHU4IGFkZF9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgYWRkX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIGFkZF9sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHU4IGFuZF9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgYW5kX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIGFuZF9sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHU4IGNtcF9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgY21wX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIGNtcF9sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHU4IGRhYV9ieXRlKHU4IGQpOworKyAgICB1OCBkYXNfYnl0ZSh1OCBkKTsKKysgICAgdTggZGVjX2J5dGUodTggZCk7CisrICAgIHUxNiBkZWNfd29yZCh1MTYgZCk7CisrICAgIHUzMiBkZWNfbG9uZyh1MzIgZCk7CisrICAgIHU4IGluY19ieXRlKHU4IGQpOworKyAgICB1MTYgaW5jX3dvcmQodTE2IGQpOworKyAgICB1MzIgaW5jX2xvbmcodTMyIGQpOworKyAgICB1OCBvcl9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgb3Jfd29yZCh1MTYgZCwgdTE2IHMpOworKyAgICB1MzIgb3JfbG9uZyh1MzIgZCwgdTMyIHMpOworKyAgICB1OCBuZWdfYnl0ZSh1OCBzKTsKKysgICAgdTE2IG5lZ193b3JkKHUxNiBzKTsKKysgICAgdTMyIG5lZ19sb25nKHUzMiBzKTsKKysgICAgdTggbm90X2J5dGUodTggcyk7CisrICAgIHUxNiBub3Rfd29yZCh1MTYgcyk7CisrICAgIHUzMiBub3RfbG9uZyh1MzIgcyk7CisrICAgIHU4IHJjbF9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgcmNsX3dvcmQodTE2IGQsIHU4IHMpOworKyAgICB1MzIgcmNsX2xvbmcodTMyIGQsIHU4IHMpOworKyAgICB1OCByY3JfYnl0ZSh1OCBkLCB1OCBzKTsKKysgICAgdTE2IHJjcl93b3JkKHUxNiBkLCB1OCBzKTsKKysgICAgdTMyIHJjcl9sb25nKHUzMiBkLCB1OCBzKTsKKysgICAgdTggcm9sX2J5dGUodTggZCwgdTggcyk7CisrICAgIHUxNiByb2xfd29yZCh1MTYgZCwgdTggcyk7CisrICAgIHUzMiByb2xfbG9uZyh1MzIgZCwgdTggcyk7CisrICAgIHU4IHJvcl9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgcm9yX3dvcmQodTE2IGQsIHU4IHMpOworKyAgICB1MzIgcm9yX2xvbmcodTMyIGQsIHU4IHMpOworKyAgICB1OCBzaGxfYnl0ZSh1OCBkLCB1OCBzKTsKKysgICAgdTE2IHNobF93b3JkKHUxNiBkLCB1OCBzKTsKKysgICAgdTMyIHNobF9sb25nKHUzMiBkLCB1OCBzKTsKKysgICAgdTggc2hyX2J5dGUodTggZCwgdTggcyk7CisrICAgIHUxNiBzaHJfd29yZCh1MTYgZCwgdTggcyk7CisrICAgIHUzMiBzaHJfbG9uZyh1MzIgZCwgdTggcyk7CisrICAgIHU4IHNhcl9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgc2FyX3dvcmQodTE2IGQsIHU4IHMpOworKyAgICB1MzIgc2FyX2xvbmcodTMyIGQsIHU4IHMpOworKyAgICB1MTYgc2hsZF93b3JkKHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CisrICAgIHUzMiBzaGxkX2xvbmcodTMyIGQsIHUzMiBmaWxsLCB1OCBzKTsKKysgICAgdTE2IHNocmRfd29yZCh1MTYgZCwgdTE2IGZpbGwsIHU4IHMpOworKyAgICB1MzIgc2hyZF9sb25nKHUzMiBkLCB1MzIgZmlsbCwgdTggcyk7CisrICAgIHU4IHNiYl9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgc2JiX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIHNiYl9sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHU4IHN1Yl9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgc3ViX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIHN1Yl9sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHZvaWQgdGVzdF9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB2b2lkIHRlc3Rfd29yZCh1MTYgZCwgdTE2IHMpOworKyAgICB2b2lkIHRlc3RfbG9uZyh1MzIgZCwgdTMyIHMpOworKyAgICB1OCB4b3JfYnl0ZSh1OCBkLCB1OCBzKTsKKysgICAgdTE2IHhvcl93b3JkKHUxNiBkLCB1MTYgcyk7CisrICAgIHUzMiB4b3JfbG9uZyh1MzIgZCwgdTMyIHMpOworKyAgICB2b2lkIGltdWxfYnl0ZSh1OCBzKTsKKysgICAgdm9pZCBpbXVsX3dvcmQodTE2IHMpOworKyAgICB2b2lkIGltdWxfbG9uZyh1MzIgcyk7CisrICAgIHZvaWQgaW11bF9sb25nX2RpcmVjdCh1MzIgKiByZXNfbG8sIHUzMiAqIHJlc19oaSwgdTMyIGQsIHUzMiBzKTsKKysgICAgdm9pZCBtdWxfYnl0ZSh1OCBzKTsKKysgICAgdm9pZCBtdWxfd29yZCh1MTYgcyk7CisrICAgIHZvaWQgbXVsX2xvbmcodTMyIHMpOworKyAgICB2b2lkIGlkaXZfYnl0ZSh1OCBzKTsKKysgICAgdm9pZCBpZGl2X3dvcmQodTE2IHMpOworKyAgICB2b2lkIGlkaXZfbG9uZyh1MzIgcyk7CisrICAgIHZvaWQgZGl2X2J5dGUodTggcyk7CisrICAgIHZvaWQgZGl2X3dvcmQodTE2IHMpOworKyAgICB2b2lkIGRpdl9sb25nKHUzMiBzKTsKKysgICAgdm9pZCBpbnMoaW50IHNpemUpOworKyAgICB2b2lkIG91dHMoaW50IHNpemUpOworKyAgICB1MTYgbWVtX2FjY2Vzc193b3JkKGludCBhZGRyKTsKKysgICAgdm9pZCBwdXNoX3dvcmQodTE2IHcpOworKyAgICB2b2lkIHB1c2hfbG9uZyh1MzIgdyk7CisrICAgIHUxNiBwb3Bfd29yZCh2b2lkKTsKKysgICAgdTMyIHBvcF9sb25nKHZvaWQpOworKyAgICB2b2lkIGNwdWlkKHZvaWQpOworIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy19ICAgICAgICAgICAgICAgICAgICAgICAJCQkvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgIAkqLworK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAgICAgICAgICovCisgI2VuZGlmCistCistI2VuZGlmIC8qIF9fWDg2RU1VX1BSSU1fT1BTX0ggKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fWDg2RU1VX1BSSU1fT1BTX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV94ODZfZ2NjLmggYi9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV94ODZfZ2NjLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42NDZlYzlkCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV94ODZfZ2NjLmgKK0BAIC0wLDAgKzEsNzcgQEAKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKyoKKysqIElubGluZSBoZWxwZXJzIGZvciB4ODZlbXUKKysqCisrKiBDb3B5cmlnaHQgKEMpIDIwMDggQmFydCBUcm9qYW5vd3NraSwgU3ltYmlvIFRlY2hub2xvZ2llcywgTExDCisrKgorKyogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyoKKysqICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZAorKyogIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKysqICBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0CisrKiAgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluCisrKiAgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiB0aGUgYXV0aG9ycyBub3QgYmUgdXNlZAorKyogIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUKKysqICB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBUaGUgYXV0aG9ycyBtYWtlcyBubworKyogIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuCisrKiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKysqCisrKiAgVEhFIEFVVEhPUlMgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCisrKiAgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTworKyogIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SCisrKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRgorKyogIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgorKyogIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKKysqICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorKyoKKysqICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysqCisrKiBMYW5ndWFnZTogICAgIEdOVSBDCisrKiBFbnZpcm9ubWVudDogIEdDQyBvbiBpMzg2IG9yIHg4Ni02NAorKyogRGV2ZWxvcGVyOiAgICBCYXJ0IFRyb2phbm93c2tpCisrKgorKyogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgZGVmaW5lcyBhIGZldyB4ODYgbWFjcm9zIHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlCisrKiAgICAgICAgICAgICAgIGVtdWxhdG9yIHRvIGV4ZWN1dGUgbmF0aXZlIGluc3RydWN0aW9ucy4KKysqCisrKiAgICAgICAgICAgICAgIEZvciBQSUMgdnMgbm9uLVBJQyBjb2RlIHJlZmVyIHRvOgorKyogICAgICAgICAgICAgICBodHRwOi8vc2FtLnpveS5vcmcvYmxvZy8yMDA3LTA0LTEzLXNobGliLXdpdGgtbm9uLXBpYy1jb2RlLWhhdmUtaW5saW5lLWFzc2VtYmx5LWFuZC1waWMtbWl4LXdlbGwKKysqCisrKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysjaWZuZGVmIF9fWDg2RU1VX1BSSU1fWDg2X0dDQ19ICisrI2RlZmluZSBfX1g4NkVNVV9QUklNX1g4Nl9HQ0NfSAorKworKyNpbmNsdWRlICJ4ODZlbXUvdHlwZXMuaCIKKysKKysjaWYgIWRlZmluZWQoX19HTlVDX18pIHx8ICEoZGVmaW5lZCAoX19pMzg2X18pIHx8IGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9fQU1ENjRfXykgfHwgZGVmaW5lZChfX2FtZDY0X18pKQorKyNlcnJvciBUaGlzIGZpbGUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBnY2Mgb24gaTM4NiBvciB4ODYtNjQgc3lzdGVtCisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQoX19QSUNfXykgJiYgZGVmaW5lZChfX2kzODZfXykKKysKKysjZGVmaW5lIFg4NkVNVV9IQVNfSFdfQ1BVSUQgMQorK3N0YXRpYyBpbmxpbmUgdm9pZAorK2h3X2NwdWlkKHUzMiAqIGEsIHUzMiAqIGIsIHUzMiAqIGMsIHUzMiAqIGQpCisreworKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGwgJSVlYnggICAgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICAgICAiY3B1aWQgICAgICAgICAgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICAgICAibW92bCAlJWVieCwgJTEgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICAgICAicG9wbCAlJWVieCAgICAgICBcblx0IjoiPWEiKCphKSwgIj1yIigqYiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICI9YyIoKmMpLCAiPWQiKCpkKQorKyAgICAgICAgICAgICAgICAgICAgICAgICA6ImEiKCphKSwgImMiKCpjKQorKyAgICAgICAgICAgICAgICAgICAgICAgICA6ImNjIik7CisrfQorKworKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogISAoX19QSUNfXyAmJiBfX2kzODZfXykgKi8KKysKKysjZGVmaW5lIHg4NkVNVV9IQVNfSFdfQ1BVSUQgMQorK3N0YXRpYyBpbmxpbmUgdm9pZAorK2h3X2NwdWlkKHUzMiAqIGEsIHUzMiAqIGIsIHUzMiAqIGMsIHUzMiAqIGQpCisreworKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY3B1aWQiOiI9YSIoKmEpLCAiPWIiKCpiKSwgIj1jIigqYyksICI9ZCIoKmQpCisrICAgICAgICAgICAgICAgICAgICAgICAgIDoiYSIoKmEpLCAiYyIoKmMpCisrICAgICAgICAgICAgICAgICAgICAgICAgIDoiY2MiKTsKKyt9CisrCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX1BJQ19fICYmIF9faTM4Nl9fICovCisrCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX1g4NkVNVV9QUklNX1g4Nl9HQ0NfSCAqLworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS9yZWdzLmggYi9saWJzL3g4NmVtdS94ODZlbXUvcmVncy5oCitpbmRleCA1MmNmOGU0Li42YmQwNjExIDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUveDg2ZW11L3JlZ3MuaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11L3JlZ3MuaAorQEAgLTQyLDcgKzQyLDcgQEAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTWFjcm9zIGFuZCB0eXBlIGRlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorICNpZmRlZiBQQUNLCistIyBwcmFnbWEgUEFDSworKyNwcmFnbWEgUEFDSworICNlbmRpZgorIAorIC8qCitAQCAtNjQsNDggKzY0LDQ4IEBACisgCisgdHlwZWRlZiBzdHJ1Y3QgeworICAgICB1MzIgZV9yZWc7CistCX0gSTMyX3JlZ190OworK30gSTMyX3JlZ190OworIAorIHR5cGVkZWYgc3RydWN0IHsKKy0JdTE2IGZpbGxlcjAsIHhfcmVnOworLQl9IEkxNl9yZWdfdDsKKysgICAgdTE2IGZpbGxlcjAsIHhfcmVnOworK30gSTE2X3JlZ190OworIAorIHR5cGVkZWYgc3RydWN0IHsKKy0JdTggZmlsbGVyMCwgZmlsbGVyMSwgaF9yZWcsIGxfcmVnOworLQl9IEk4X3JlZ190OworKyAgICB1OCBmaWxsZXIwLCBmaWxsZXIxLCBoX3JlZywgbF9yZWc7CisrfSBJOF9yZWdfdDsKKyAKKy0jZWxzZSAvKiAhX19CSUdfRU5ESUFOX18gKi8KKysjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFfX0JJR19FTkRJQU5fXyAqLworIAorIHR5cGVkZWYgc3RydWN0IHsKKyAgICAgdTMyIGVfcmVnOworLQl9IEkzMl9yZWdfdDsKKyt9IEkzMl9yZWdfdDsKKyAKKyB0eXBlZGVmIHN0cnVjdCB7CistCXUxNiB4X3JlZzsKKy0JfSBJMTZfcmVnX3Q7CisrICAgIHUxNiB4X3JlZzsKKyt9IEkxNl9yZWdfdDsKKyAKKyB0eXBlZGVmIHN0cnVjdCB7CistCXU4IGxfcmVnLCBoX3JlZzsKKy0JfSBJOF9yZWdfdDsKKysgICAgdTggbF9yZWcsIGhfcmVnOworK30gSThfcmVnX3Q7CisgCistI2VuZGlmIC8qIEJJR19FTkRJQU4gKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJJR19FTkRJQU4gKi8KKyAKKyB0eXBlZGVmIHVuaW9uIHsKKy0JSTMyX3JlZ190ICAgSTMyX3JlZzsKKy0JSTE2X3JlZ190ICAgSTE2X3JlZzsKKy0JSThfcmVnX3QgICAgSThfcmVnOworLQl9IGkzODZfZ2VuZXJhbF9yZWdpc3RlcjsKKysgICAgSTMyX3JlZ190IEkzMl9yZWc7CisrICAgIEkxNl9yZWdfdCBJMTZfcmVnOworKyAgICBJOF9yZWdfdCBJOF9yZWc7CisrfSBpMzg2X2dlbmVyYWxfcmVnaXN0ZXI7CisgCisgc3RydWN0IGkzODZfZ2VuZXJhbF9yZWdzIHsKKy0JaTM4Nl9nZW5lcmFsX3JlZ2lzdGVyIEEsIEIsIEMsIEQ7CistCX07CisrICAgIGkzODZfZ2VuZXJhbF9yZWdpc3RlciBBLCBCLCBDLCBEOworK307CisgCisgdHlwZWRlZiBzdHJ1Y3QgaTM4Nl9nZW5lcmFsX3JlZ3MgR2VuX3JlZ190OworIAorIHN0cnVjdCBpMzg2X3NwZWNpYWxfcmVncyB7CistCWkzODZfZ2VuZXJhbF9yZWdpc3RlciBTUCwgQlAsIFNJLCBESSwgSVA7CistCXUzMiBGTEFHUzsKKy0JfTsKKysgICAgaTM4Nl9nZW5lcmFsX3JlZ2lzdGVyIFNQLCBCUCwgU0ksIERJLCBJUDsKKysgICAgdTMyIEZMQUdTOworK307CisgCisgLyogIAorICAqIFNlZ21lbnQgcmVnaXN0ZXJzIGhlcmUgcmVwcmVzZW50IHRoZSAxNiBiaXQgcXVhbnRpdGllcworQEAgLTExNCw3ICsxMTQsNyBAQCBzdHJ1Y3QgaTM4Nl9zcGVjaWFsX3JlZ3MgeworIAorIHN0cnVjdCBpMzg2X3NlZ21lbnRfcmVncyB7CisgICAgIHUxNiBDUywgRFMsIFNTLCBFUywgRlMsIEdTOworLQl9OworK307CisgCisgLyogOCBiaXQgcmVnaXN0ZXJzICovCisgI2RlZmluZSBSX0FIICBnZW4uQS5JOF9yZWcuaF9yZWcKK0BAIC0yNTgsOSArMjU4LDkgQEAgc3RydWN0IGkzODZfc2VnbWVudF9yZWdzIHsKKyAjZGVmaW5lICBJTlRSX0hBTFRFRCAgICAgICAgICAweDQKKyAKKyB0eXBlZGVmIHN0cnVjdCB7CistICAgIHN0cnVjdCBpMzg2X2dlbmVyYWxfcmVncyAgICBnZW47CistICAgIHN0cnVjdCBpMzg2X3NwZWNpYWxfcmVncyAgICBzcGM7CistICAgIHN0cnVjdCBpMzg2X3NlZ21lbnRfcmVncyAgICBzZWc7CisrICAgIHN0cnVjdCBpMzg2X2dlbmVyYWxfcmVncyBnZW47CisrICAgIHN0cnVjdCBpMzg2X3NwZWNpYWxfcmVncyBzcGM7CisrICAgIHN0cnVjdCBpMzg2X3NlZ21lbnRfcmVncyBzZWc7CisgICAgIC8qCisgICAgICAqIE1PREUgY29udGFpbnMgaW5mb3JtYXRpb24gb246CisgICAgICAqICBSRVBFIHByZWZpeCAgICAgICAgICAgICAyIGJpdHMgIHJlcGUscmVwbmUKK0BAIC0yNzMsMjEgKzI3MywyMSBAQCB0eXBlZGVmIHN0cnVjdCB7CisgICAgICAqICBFeHRlcm4gaW50ZXJydXB0ICAgICAgICAxIGJpdHMKKyAgICAgICogIEhhbHRlZCAgICAgICAgICAgICAgICAgIDEgYml0cworICAgICAgKi8KKy0gICAgdTMyICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU7CistICAgIHZvbGF0aWxlIGludCAgICAgICAgICAgICAgICBpbnRyOyAgIC8qIG1hc2sgb2YgcGVuZGluZyBpbnRlcnJ1cHRzICovCistCWludCAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZzsKKysgICAgdTMyIG1vZGU7CisrICAgIHZvbGF0aWxlIGludCBpbnRyOyAgICAgICAgICAvKiBtYXNrIG9mIHBlbmRpbmcgaW50ZXJydXB0cyAqLworKyAgICBpbnQgZGVidWc7CisgI2lmZGVmIERFQlVHCistCWludCAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazsKKy0gICAgdTE2ICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkX2lwOworLSAgICB1MTYgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWRfY3M7CistICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBlbmNfcG9zOworLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgZW5jX3N0cl9wb3M7CistICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVfYnVmWzMyXTsgLyogZW5jb2RlZCBieXRlIHN0cmVhbSAgKi8KKy0gICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWRfYnVmWzI1Nl07IC8qIGRpc2Fzc2VtYmxlZCBzdHJpbmdzICovCisrICAgIGludCBjaGVjazsKKysgICAgdTE2IHNhdmVkX2lwOworKyAgICB1MTYgc2F2ZWRfY3M7CisrICAgIGludCBlbmNfcG9zOworKyAgICBpbnQgZW5jX3N0cl9wb3M7CisrICAgIGNoYXIgZGVjb2RlX2J1ZlszMl07ICAgICAgICAvKiBlbmNvZGVkIGJ5dGUgc3RyZWFtICAqLworKyAgICBjaGFyIGRlY29kZWRfYnVmWzI1Nl07ICAgICAgLyogZGlzYXNzZW1ibGVkIHN0cmluZ3MgKi8KKyAjZW5kaWYKKy0gICAgdTggICAgICAgICAgICAgICAgICAgICAgICAgIGludG5vOworLSAgICB1OCAgICAgICAgICAgICAgICAgICAgICAgICAgX19wYWRbM107CistCX0gWDg2RU1VX3JlZ3M7CisrICAgIHU4IGludG5vOworKyAgICB1OCBfX3BhZFszXTsKKyt9IFg4NkVNVV9yZWdzOworIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKK0BAIC0zMDAsMjAgKzMwMCwyMCBAQCBwcml2YXRlCQkJLSBwcml2YXRlIGRhdGEgcG9pbnRlcgorIHg4NgkJCS0gWDg2IHJlZ2lzdGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgdHlwZWRlZiBzdHJ1Y3QgeworLQl1bnNpZ25lZCBsb25nCW1lbV9iYXNlOworLQl1bnNpZ25lZCBsb25nCW1lbV9zaXplOworLQl2b2lkKiAgICAgICAgCXByaXZhdGU7CistCVg4NkVNVV9yZWdzCQl4ODY7CistCX0gWDg2RU1VX3N5c0VudjsKKysgICAgdW5zaWduZWQgbG9uZyBtZW1fYmFzZTsKKysgICAgdW5zaWduZWQgbG9uZyBtZW1fc2l6ZTsKKysgICAgdm9pZCAqcHJpdmF0ZTsKKysgICAgWDg2RU1VX3JlZ3MgeDg2OworK30gWDg2RU1VX3N5c0VudjsKKyAKKyAjaWZkZWYgRU5EX1BBQ0sKKy0jIHByYWdtYSBFTkRfUEFDSworKyNwcmFnbWEgRU5EX1BBQ0sKKyAjZW5kaWYKKyAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbCBWYXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiIHsgICAgICAgICAgICAJCQkvKiBVc2UgIkMiIGxpbmthZ2Ugd2hlbiBpbiBDKysgbW9kZSAqLworK2V4dGVybiAiQyIgeyAgICAgICAgICAgICAgICAgICAgLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKyAjZW5kaWYKKyAKKyAvKiBHbG9iYWwgZW11bGF0b3IgbWFjaGluZSBzdGF0ZS4KK0BAIC0zMjEsMTcgKzMyMSwxNiBAQCBleHRlcm4gIkMiIHsgICAgICAgICAgICAJCQkvKiBVc2UgIkMiIGxpbmthZ2Ugd2hlbiBpbiBDKysgbW9kZSAqLworICAqIFdlIGtlZXAgaXQgZ2xvYmFsIHRvIGF2b2lkIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIHRoZSBjb2RlIGZvciBzcGVlZC4KKyAgKi8KKyAKKy1leHRlcm4gICAgWDg2RU1VX3N5c0VudglfWDg2RU1VX2VudjsKKysgICAgZXh0ZXJuIFg4NkVNVV9zeXNFbnYgX1g4NkVNVV9lbnY7CisgI2RlZmluZSAgIE0gICAgICAgICAgICAgX1g4NkVNVV9lbnYKKyAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uIFByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorIC8qIEZ1bmN0aW9uIHRvIGxvZyBpbmZvcm1hdGlvbiBhdCBydW50aW1lICovCisgCistdm9pZAlwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pOworKyAgICB2b2lkIHByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7CisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworLX0gICAgICAgICAgICAgICAgICAgICAgIAkJCS8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgCSovCisrfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgICAgICAgICAgKi8KKyAjZW5kaWYKKy0KKy0jZW5kaWYgLyogX19YODZFTVVfUkVHU19IICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX1g4NkVNVV9SRUdTX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUvdHlwZXMuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS90eXBlcy5oCitpbmRleCBjMGMwOWMxLi41YTZlZjAxIDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUveDg2ZW11L3R5cGVzLmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS90eXBlcy5oCitAQCAtMzYsNyArMzYsNiBAQAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAorLQorICNpZm5kZWYgX19YODZFTVVfVFlQRVNfSAorICNkZWZpbmUgX19YODZFTVVfVFlQRVNfSAorIAorQEAgLTYxLDQ2ICs2MCwyMSBAQAorIAorIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNYWNyb3MgYW5kIHR5cGUgZGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCistLyogQ3VycmVudGx5IG9ubHkgZm9yIExpbnV4LzMyYml0ICovCistI3VuZGVmICBfX0hBU19MT05HX0xPTkdfXworLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChOT19MT05HX0xPTkcpCistI2RlZmluZSBfX0hBU19MT05HX0xPTkdfXworLSNlbmRpZgorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyAKKy0vKiBUYWtlbiBmcm9tIFhtZC5oICovCistI3VuZGVmIE5VTTMyCistI2lmIGRlZmluZWQgKF9MUDY0KSB8fCBcCistICAgIGRlZmluZWQoX19hbHBoYSkgfHwgZGVmaW5lZChfX2FscGhhX18pIHx8IFwKKy0gICAgZGVmaW5lZChfX2lhNjRfXykgfHwgZGVmaW5lZChpYTY0KSB8fCBcCistICAgIGRlZmluZWQoX19zcGFyYzY0X18pIHx8IFwKKy0gICAgZGVmaW5lZChfX3MzOTB4X18pIHx8IFwKKy0gICAgKGRlZmluZWQoX19ocHBhX18pICYmIGRlZmluZWQoX19MUDY0KSkgfHwgXAorLSAgICBkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5lZChhbWQ2NCkgfHwgXAorLSAgICAoZGVmaW5lZChfX3NnaSkgJiYgKF9NSVBTX1NaTE9ORyA9PSA2NCkpCistI2RlZmluZSBOVU0zMiBpbnQKKy0jZWxzZQorLSNkZWZpbmUgTlVNMzIgbG9uZworLSNlbmRpZgorK3R5cGVkZWYgdWludDhfdCB1ODsKKyt0eXBlZGVmIHVpbnQxNl90IHUxNjsKKyt0eXBlZGVmIHVpbnQzMl90IHUzMjsKKyt0eXBlZGVmIHVpbnQ2NF90IHU2NDsKKyAKKy10eXBlZGVmIHVuc2lnbmVkIGNoYXIgCQl1ODsKKy10eXBlZGVmIHVuc2lnbmVkIHNob3J0IAkJdTE2OworLXR5cGVkZWYgdW5zaWduZWQgTlVNMzIgCQl1MzI7CistI2lmZGVmIF9fSEFTX0xPTkdfTE9OR19fCistdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgCXU2NDsKKy0jZW5kaWYKKyt0eXBlZGVmIGludDhfdCBzODsKKyt0eXBlZGVmIGludDE2X3QgczE2OworK3R5cGVkZWYgaW50MzJfdCBzMzI7CisrdHlwZWRlZiBpbnQ2NF90IHM2NDsKKyAKKy10eXBlZGVmIGNoYXIgCQkJCXM4OworLXR5cGVkZWYgc2hvcnQgCQkJCXMxNjsKKy10eXBlZGVmIE5VTTMyIAkJCQlzMzI7CistI2lmZGVmIF9fSEFTX0xPTkdfTE9OR19fCistdHlwZWRlZiBsb25nIGxvbmcgCQkJczY0OworLSNlbmRpZgorLQorLXR5cGVkZWYgdW5zaWduZWQgaW50CQkJdWludDsKKy10eXBlZGVmIGludCAJCQkJc2ludDsKKyt0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50OworK3R5cGVkZWYgaW50IHNpbnQ7CisgCisgdHlwZWRlZiB1MTYgWDg2RU1VX3Bpb0FkZHI7CisgCistI3VuZGVmIE5VTTMyCistCistI2VuZGlmCS8qIF9fWDg2RU1VX1RZUEVTX0ggKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fWDg2RU1VX1RZUEVTX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUveDg2ZW11aS5oIGIvbGlicy94ODZlbXUveDg2ZW11L3g4NmVtdWkuaAoraW5kZXggMTEyZWUzNi4uZjExZGMxMCAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3g4NmVtdS94ODZlbXVpLmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS94ODZlbXVpLmgKK0BAIC0zOCw3ICszOCw2IEBACisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCistCisgI2lmbmRlZiBfX1g4NkVNVV9YODZFTVVJX0gKKyAjZGVmaW5lIF9fWDg2RU1VX1g4NkVNVUlfSAorIAorQEAgLTc0LDI5ICs3MywyOCBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CistI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKyNlbmRpZgorIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIElubGluZSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworLWV4dGVybiAiQyIgeyAgICAgICAgICAgIAkJCS8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisrZXh0ZXJuICJDIiB7ICAgICAgICAgICAgICAgICAgICAvKiBVc2UgIkMiIGxpbmthZ2Ugd2hlbiBpbiBDKysgbW9kZSAqLworICNlbmRpZgorIAorLWV4dGVybiB1OCAgCShYODZBUElQIHN5c19yZGIpKHUzMiBhZGRyKTsKKy1leHRlcm4gdTE2IAkoWDg2QVBJUCBzeXNfcmR3KSh1MzIgYWRkcik7CistZXh0ZXJuIHUzMiAJKFg4NkFQSVAgc3lzX3JkbCkodTMyIGFkZHIpOworLWV4dGVybiB2b2lkIChYODZBUElQIHN5c193cmIpKHUzMiBhZGRyLHU4IHZhbCk7CistZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX3dydykodTMyIGFkZHIsdTE2IHZhbCk7CistZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX3dybCkodTMyIGFkZHIsdTMyIHZhbCk7CisrICAgIGV4dGVybiB1OChYODZBUElQIHN5c19yZGIpICh1MzIgYWRkcik7CisrICAgIGV4dGVybiB1MTYoWDg2QVBJUCBzeXNfcmR3KSAodTMyIGFkZHIpOworKyAgICBleHRlcm4gdTMyKFg4NkFQSVAgc3lzX3JkbCkgKHUzMiBhZGRyKTsKKysgICAgZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX3dyYikgKHUzMiBhZGRyLCB1OCB2YWwpOworKyAgICBleHRlcm4gdm9pZCAoWDg2QVBJUCBzeXNfd3J3KSAodTMyIGFkZHIsIHUxNiB2YWwpOworKyAgICBleHRlcm4gdm9pZCAoWDg2QVBJUCBzeXNfd3JsKSAodTMyIGFkZHIsIHUzMiB2YWwpOworIAorLWV4dGVybiB1OCAgCShYODZBUElQIHN5c19pbmIpKFg4NkVNVV9waW9BZGRyIGFkZHIpOworLWV4dGVybiB1MTYgCShYODZBUElQIHN5c19pbncpKFg4NkVNVV9waW9BZGRyIGFkZHIpOworLWV4dGVybiB1MzIgCShYODZBUElQIHN5c19pbmwpKFg4NkVNVV9waW9BZGRyIGFkZHIpOworLWV4dGVybiB2b2lkIChYODZBUElQIHN5c19vdXRiKShYODZFTVVfcGlvQWRkciBhZGRyLHU4IHZhbCk7CistZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX291dHcpKFg4NkVNVV9waW9BZGRyIGFkZHIsdTE2IHZhbCk7CistZXh0ZXJuIHZvaWQJKFg4NkFQSVAgc3lzX291dGwpKFg4NkVNVV9waW9BZGRyIGFkZHIsdTMyIHZhbCk7CisrICAgIGV4dGVybiB1OChYODZBUElQIHN5c19pbmIpIChYODZFTVVfcGlvQWRkciBhZGRyKTsKKysgICAgZXh0ZXJuIHUxNihYODZBUElQIHN5c19pbncpIChYODZFTVVfcGlvQWRkciBhZGRyKTsKKysgICAgZXh0ZXJuIHUzMihYODZBUElQIHN5c19pbmwpIChYODZFTVVfcGlvQWRkciBhZGRyKTsKKysgICAgZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX291dGIpIChYODZFTVVfcGlvQWRkciBhZGRyLCB1OCB2YWwpOworKyAgICBleHRlcm4gdm9pZCAoWDg2QVBJUCBzeXNfb3V0dykgKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUxNiB2YWwpOworKyAgICBleHRlcm4gdm9pZCAoWDg2QVBJUCBzeXNfb3V0bCkgKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUzMiB2YWwpOworIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy19ICAgICAgICAgICAgICAgICAgICAgICAJCQkvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgIAkqLworK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAgICAgICAgICovCisgI2VuZGlmCistCistI2VuZGlmIC8qIF9fWDg2RU1VX1g4NkVNVUlfSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfWDg2RU1VSV9IICovCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmQvYXItZnJvbS1lbnYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL2FyLWZyb20tZW52LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkY2JjNzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL2FyLWZyb20tZW52LnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0ZpeCBjcm9zcyBsaW5rIHVzaW5nIGhvc3QtY3Jvc3MgYXIKKworSWYgYnVpbGRpbmcgb24gMzJiaXQgaG9zdCBhbmQgY3JlYXRpbmcgNjRiaXQgbGlicmFyaWVzLCB0aGUgdGFyZ2V0CitwYWNrYWdlIGJ1aWxkcyBzaG91bGQgbm90IGludm9rZSB0aGUgMzJiaXQgaG9zdHMncyBhci4gIFNwZWNpZmljYWxseQoreW91IHdpbGwgZ2V0IGFuIGVycm9yIG1lc3NhZ2UgbGlrZToKKworeDg2XzY0LWxpbnV4LWdjYyAgLW02NCAtLXN5c3Jvb3Q9L29wdC9xZW11eDg2LTY0L3RtcC9zeXNyb290cy9xZW11eDg2LTY0IC1XbCwtTzEgLVdsLC0taGFzaC1zdHlsZT1nbnUgLVdsLC0tYXMtbmVlZGVkIC1MbGlicy94ODZlbXUgdjg2X3g4NmVtdS5vIHY4Nl9tZW0ubyB2ODZfY29tbW9uLm8gIHY4Ni5vIC1seDg2ZW11IC1vIHY4NmQKK2xpYnMveDg2ZW11L2xpYng4NmVtdS5hOiBjb3VsZCBub3QgcmVhZCBzeW1ib2xzOiBBcmNoaXZlIGhhcyBubyBpbmRleDsgcnVuIHJhbmxpYiB0byBhZGQgb25lCitjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKworU2lnbmVkLW9mZi1ieTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLQorIGxpYnMveDg2ZW11L01ha2VmaWxlIHwgICAgNiArKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL2xpYnMveDg2ZW11L01ha2VmaWxlCisrKysgYi9saWJzL3g4NmVtdS9NYWtlZmlsZQorQEAgLTEsNyArMSwxMSBAQAorIE9CSlMgPSBkZWNvZGUubyBmcHUubyBvcHMubyBvcHMyLm8gcHJpbV9vcHMubyBzeXMubworIAorK2lmZXEgKCQoQVIpLCkKKysJQVIgPSBhcgorK2VuZGlmCisrCisgbGlieDg2ZW11LmE6ICQoT0JKUykKKy0JYXIgcnYgJEAgJCsKKysJJChBUikgcnYgJEAgJCsKKyAKKyAlLm86ICUuYworIAkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmQvZmJzZXR1cCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmQvZmJzZXR1cApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYTQwOWNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC9mYnNldHVwCkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoIAorCisvc2Jpbi9tb2Rwcm9iZSB1dmVzYWZiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL3V2ZXNhZmIuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmQvdXZlc2FmYi5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNzg5NzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL3V2ZXNhZmIuY29uZgpAQCAtMCwwICsxLDIgQEAKKyMgTG9hZCB1dmVzYWZiLmtvIGF0IGJvb3QKK3V2ZXNhZmIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmRfMC4xLjEwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZF8wLjEuMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUwMjA3MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmRfMC4xLjEwLmJiCkBAIC0wLDAgKzEsNjkgQEAKK1NVTU1BUlkgPSAiVXNlciBzdXBwb3J0IGJpbmFyeSBmb3IgdGhlIHV2ZXNhZmIga2VybmVsIG1vZHVsZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9kZXYuZ2VudG9vLm9yZy9+c3BvY2svcHJvamVjdHMvdXZlc2FmYi8iCisKKyMgdGhlIGNvcHlyaWdodCBpbmZvIGlzIGF0IHRoZSBib3R0b20gb2YgUkVBRE1FLCBleHBlY3QgYnJlYWsKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7bWQ1PTk0YWMxOTcxZTRmMjMwOWRjMzIyZDU5OGU3YjFmN2RkIgorCitERVBFTkRTID0gInZpcnR1YWwva2VybmVsIgorUlJFQ09NTUVORFNfJHtQTn0gPSAia2VybmVsLW1vZHVsZS11dmVzYWZiIgorUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rpc3RmaWxlcy5nZW50b28ub3JnL2Rpc3RmaWxlcy8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL1VwZGF0ZS14ODZlbXUtZnJvbS1YLm9yZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9mYnNldHVwIFwKKyAgICAgICAgICAgZmlsZTovL3V2ZXNhZmIuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9hci1mcm9tLWVudi5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjUxYzc5MmJhN2I4NzRhZDhjNDNmMGQzZGE0Y2ZhYmUwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYzNDk2NGFlMThlZjY4Yzg0OTNhZGQyY2UxNTBlM2I0NTAyYmFkZWIwZDkxOTRiNGJkODEyNDFkMjVlNjczNWMiCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCitDT01QQVRJQkxFX0hPU1QgPSAnKGkuODZ8eDg2XzY0KS4qLWxpbnV4JworCitJTklUU0NSSVBUX05BTUUgPSAiZmJzZXR1cCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDAgUyAuIgorCitkb19jb25maWd1cmUgKCkgeworCS4vY29uZmlndXJlIC0td2l0aC14ODZlbXUKK30KKworZG9fY29tcGlsZSAoKSB7CisJS0RJUj0iJHtTVEFHSU5HX0RJUl9IT1NUfS91c3IiIG1ha2UKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX3NiaW5kaXJ9CisJaW5zdGFsbCB2ODZkICR7RH0ke2Jhc2Vfc2JpbmRpcn0vCisKKyAgICAgICAgIyBPbmx5IGluc3RhbGwgZmJzZXR1cCBzY3JpcHQgaWYgJ3N5c3Zpbml0JyBpcyBpbiBESVNUUk9fRkVBVFVSRVMKKyAgICAgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKyAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworICAgICAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vZmJzZXR1cCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvZmJzZXR1cAorICAgICAgICBmaQorCisgICAgICAgICMgSW5zdGFsbCBzeXN0ZW1kIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKyAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vbW9kdWxlcy1sb2FkLmQKKyAgICAgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3V2ZXNhZmIuY29uZiAke0R9JHtzeXNjb25mZGlyfS9tb2R1bGVzLWxvYWQuZAorICAgICAgICBmaQorfQorCisjIEFzIHRoZSByZWNpcGUgZG9lc24ndCBpbmhlcml0IHN5c3RlbWQuYmJjbGFzcywgd2UgbmVlZCB0byBzZXQgdGhpcyB2YXJpYWJsZQorIyBtYW51YWxseSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBwb3N0aW5zdC9wcmVpbnN0IGdlbmVyYXRlZC4KK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgZC5zZXRWYXIoIklOSElCSVRfVVBEQVRFUkNEX0JCQ0xBU1MiLCAiMSIpCit9CisKK2luaGVyaXQgdXBkYXRlLXJjLmQKKworREVQRU5EU19hcHBlbmQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywnc3lzdGVtZC1zeXN0ZW1jdGwtbmF0aXZlJywnJyxkKX0iCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kIHN5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkJaWYgWyAtbiAiJEQiIF07IHRoZW4KKwkJCU9QVFM9Ii0tcm9vdD0kRCIKKwkJZmkKKwkJc3lzdGVtY3RsICRPUFRTIG1hc2sgZmJzZXR1cC5zZXJ2aWNlCisJZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaS11aV8wLjYuMzEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvYXZhaGktdWlfMC42LjMxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYTRkNzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvYXZhaGktdWlfMC42LjMxLmJiCkBAIC0wLDAgKzEsNzIgQEAKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F2YWhpLWNvbW1vbi9hZGRyZXNzLmg7ZW5kbGluZT0yNTttZDU9YjFkMWQyY2RhMWMwN2ViODQ4ZWE3ZDYyMTU3MTJkOWQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXZhaGktY29yZS9kbnMuaDtlbmRsaW5lPTIzO21kNT02ZmU4MjU5MGI4MWFhMGRkZWE1MDk1YjU0OGUyZmRjYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdmFoaS1kYWVtb24vbWFpbi5jO2VuZGxpbmU9MjE7bWQ1PTllZTc3MzY4YzU0MDdhZjc3Y2FhZWYxYjA3Mjg1OTY5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F2YWhpLWNsaWVudC9jbGllbnQuaDtlbmRsaW5lPTIzO21kNT1mNGFjNzQxYTI1YzRmNDM0MDM5YmEzZTE4Yzg2NzRjZiIKKworcmVxdWlyZSBhdmFoaS5pbmMKKworaW5oZXJpdCBweXRob24tZGlyIHB5dGhvbm5hdGl2ZQorCitQQUNLQUdFQ09ORklHID8/PSAicHl0aG9uIgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIi0tZW5hYmxlLXB5dGhvbiwtLWRpc2FibGUtcHl0aG9uLHB5dGhvbi1uYXRpdmUgcHl0aG9uIgorCitQUiA9ICIke0lOQ19QUn0uMCIKKworU1JDX1VSSVttZDVzdW1dID0gIjJmMjI3NDViOGY3MzY4YWQ1YTBhM2ZkZGFjMzQzZjJkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgzNzI3MTliMjRlMmRkNzVkZTZmNTliYjEzMTVlNjAwZGI0ZmQwOTI4MDViZDEyMDFlZDBjYjY1MWEyZGFiNDgiCisKK0RFUEVORFMgKz0gImF2YWhpIGd0aysgbGliZ2xhZGUiCisKK0FWQUhJX0dUSyA9ICItLWVuYWJsZS1ndGsgLS1kaXNhYmxlLWd0azMiCisKK1MgPSAiJHtXT1JLRElSfS9hdmFoaS0ke1BWfSIKKworUEFDS0FHRVMgPSAiJHtQTn0gJHtQTn0tdXRpbHMgJHtQTn0tZGJnICR7UE59LWRldiAke1BOfS1zdGF0aWNkZXYgJHtQTn0tZG9jIHB5dGhvbi1hdmFoaSBhdmFoaS1kaXNjb3ZlciBhdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lIgorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGliYXZhaGktdWkqLnNvLioiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8uZGVidWcvbGliYXZhaC11aSoiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9saWJhdmFoaS11aSR7U09MSUJTREVWfSIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2xpYmF2YWhpLXVpLmEiCisKK0ZJTEVTXyR7UE59LXV0aWxzID0gIiR7YmluZGlyfS9iKiAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9iKiIKKworRklMRVNfcHl0aG9uLWF2YWhpID0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2F2YWhpICR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2F2YWhpX2Rpc2NvdmVyIgorRklMRVNfYXZhaGktZGlzY292ZXIgPSAiJHtiaW5kaXJ9L2F2YWhpLWRpc2NvdmVyIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9hdmFoaS9pbnRlcmZhY2VzL2F2YWhpLWRpc2NvdmVyKiIKK0ZJTEVTX2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUgPSAiJHtiaW5kaXJ9L2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2F2YWhpL2ludGVyZmFjZXMvYXZhaGktZGlzY292ZXIuZ2xhZGUiCisKK1JERVBFTkRTX2F2YWhpLWRpc2NvdmVyID0gInB5dGhvbi1hdmFoaSBweXRob24tcHlndGsiCitSREVQRU5EU19weXRob24tYXZhaGkgPSAicHl0aG9uLWNvcmUgcHl0aG9uLWRidXMiCisKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCXJtICR7RH0ke3N5c2NvbmZkaXJ9IC1yZgorCXJtICR7RH0ke2Jhc2VfbGliZGlyfSAtcmYKKwlybSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9IC1yZgorCSMgVGhlICR7c3lzdGVtZF91bml0ZGlyfSBpcyAvbGliL3N5c3RlbWQsIHNvIHdlIG5lZWQgcm1kaXIgL2xpYiwKKwkjIGJ1dCBub3QgJHtiYXNlX2xpYmRpcn0gaGVyZS4gQW5kIHRoZSAvbGliIG1heSBub3QgZXhpc3QKKwkjIHdoaXRob3V0IHN5c3RlbWQuCisJWyAhIC1kICR7RH0vbGliIF0gfHwgcm1kaXIgJHtEfS9saWIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkKKwlybSAke0R9JHtiaW5kaXJ9L2F2YWhpLWIqCisJcm0gJHtEfSR7YmluZGlyfS9hdmFoaS1wKgorCXJtICR7RH0ke2JpbmRpcn0vYXZhaGktcioKKwlybSAke0R9JHtiaW5kaXJ9L2F2YWhpLXMqCisJcm0gJHtEfSR7aW5jbHVkZWRpcn0vYXZhaGktYyogLXJmCisJcm0gJHtEfSR7aW5jbHVkZWRpcn0vYXZhaGktZyogLXJmCisJcm0gJHtEfSR7bGliZGlyfS9saWJhdmFoaS1jKgorCXJtICR7RH0ke2xpYmRpcn0vbGliYXZhaGktZyoKKwlybSAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9hdmFoaS1jKgorCXJtICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL2F2YWhpLWcqCisJcm0gJHtEfSR7c2JpbmRpcn0gLXJmCisJcm0gJHtEfSR7ZGF0YWRpcn0vYXZhaGkvYSoKKwlybSAke0R9JHtkYXRhZGlyfS9hdmFoaS9zKgorCXJtICR7RH0ke2RhdGFkaXJ9L2xvY2FsZS8gLXJmCisJcm0gJHtEfSR7ZGF0YWRpcn0vZGJ1cyogLXJmCisJcm0gJHtEfSR7bWFuZGlyfS9tYW4xL2EqCisJcm0gJHtEfSR7bWFuZGlyfS9tYW41IC1yZgorCXJtICR7RH0ke21hbmRpcn0vbWFuOCAtcmYKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2F2YWhpLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI1MTk3ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaS5pbmMKQEAgLTAsMCArMSwxNTggQEAKK1NVTU1BUlkgPSAiQXZhaGkgSVB2NExMIG5ldHdvcmsgYWRkcmVzcyBjb25maWd1cmF0aW9uIGRhZW1vbiIKK0RFU0NSSVBUSU9OID0gJ0F2YWhpIGlzIGEgZnVsbHkgTEdQTCBmcmFtZXdvcmsgZm9yIE11bHRpY2FzdCBETlMgU2VydmljZSBEaXNjb3ZlcnkuIEl0IFwKK2FsbG93cyBwcm9ncmFtcyB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBzZXJ2aWNlcyBhbmQgaG9zdHMgcnVubmluZyBvbiBhIGxvY2FsIG5ldHdvcmsgXAord2l0aCBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9uLiBUaGlzIHRvb2wgaW1wbGVtZW50cyBJUHY0TEwsICJEeW5hbWljIENvbmZpZ3VyYXRpb24gb2YgXAorSVB2NCBMaW5rLUxvY2FsIEFkZHJlc3NlcyIgKElFVEYgUkZDMzkyNyksIGEgcHJvdG9jb2wgZm9yIGF1dG9tYXRpYyBJUCBhZGRyZXNzIFwKK2NvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbGluay1sb2NhbCAxNjkuMjU0LjAuMC8xNiByYW5nZSB3aXRob3V0IHRoZSBuZWVkIGZvciBhIGNlbnRyYWwgXAorc2VydmVyLicKK0FVVEhPUiA9ICJMZW5uYXJ0IFBvZXR0ZXJpbmcgPGxlbm5hcnRAcG9ldHRlcmluZy5uZXQ+IgorSE9NRVBBR0UgPSAiaHR0cDovL2F2YWhpLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2F2YWhpLm9yZy9yZXBvcnQiCitTRUNUSU9OID0gIm5ldHdvcmsiCisKKyMgbWFqb3IgcGFydCBpcyB1bmRlciBMR1BMdjIuMSssIGJ1dCBzZXZlcmFsIC5kdGQsIC54c2wsIGluaXRzY3JpcHRzIGFuZAorIyBweXRob24gc2NyaXB0cyBhcmUgdW5kZXIgR1BMdjIrCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xKyIKKworSU5DX1BSID0gInIxMSIKKworREVQRU5EUyA9ICJleHBhdCBsaWJjYXAgbGliZGFlbW9uIGRidXMgZ2xpYi0yLjAiCisKK1NSQ19VUkkgPSAiaHR0cDovL2F2YWhpLm9yZy9kb3dubG9hZC9hdmFoaS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgIGZpbGU6Ly8wMGF2YWhpLWF1dG9pcGQgXAorICAgICAgICAgIGZpbGU6Ly85OWF2YWhpLWF1dG9pcGQgXAorICAgICAgICAgIGZpbGU6Ly9pbml0c2NyaXB0LnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vYXZhaGlfZml4X2luc3RhbGxfaXNzdWUucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9maXhfZm9yX2F1dG9tYWtlXzEuMTIueC5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL291dC1vZi10cmVlLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vMDAwMS1hdmFoaS1maXgtYXZhaGktc3RhdHVzLWNvbW1hbmQtZXJyb3ItcHJvbXB0LnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vcmV1c2Vwb3J0LWNoZWNrLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiYXZhaGktZGFlbW9uIGF2YWhpLWF1dG9pcGQiCitVU0VSQUREX1BBUkFNX2F2YWhpLWRhZW1vbiA9ICItLXN5c3RlbSAtLWhvbWUgL3Zhci9ydW4vYXZhaGktZGFlbW9uIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbm8tY3JlYXRlLWhvbWUgLS1zaGVsbCAvYmluL2ZhbHNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tdXNlci1ncm91cCBhdmFoaSIKKworVVNFUkFERF9QQVJBTV9hdmFoaS1hdXRvaXBkID0gIi0tc3lzdGVtIC0taG9tZSAvdmFyL3J1bi9hdmFoaS1hdXRvaXBkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbm8tY3JlYXRlLWhvbWUgLS1zaGVsbCAvYmluL2ZhbHNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tdXNlci1ncm91cCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtYyBcIkF2YWhpIGF1dG9pcCBkYWVtb25cIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFoaS1hdXRvaXBkIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXBkYXRlLXJjLmQgZ2V0dGV4dCB1c2VyYWRkCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiBcCisgICAgICAgICAgICAgLS13aXRoLWF2YWhpLXByaXYtYWNjZXNzLWdyb3VwPWFkbSBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLXN0YWNrLXByb3RlY3RvciBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLWdkYm0gXAorICAgICAgICAgICAgIC0tZGlzYWJsZS1tb25vIFwKKyAgICAgICAgICAgICAtLWRpc2FibGUtbW9ub2RvYyBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLXF0MyBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLXF0NCBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLXB5dGhvbiBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLWRveHlnZW4tZG9jIFwKKyAgICAgICAgICAgICAke0VYVFJBX09FQ09ORl9TWVNWSU5JVH0gXAorICAgICAgICAgICAgICR7RVhUUkFfT0VDT05GX1NZU1RFTUR9IFwKKyAgICAgICAgICAgICAke0FWQUhJX0dUS30gXAorICAgICAgICAgICAiCisKKyMgVGhlIGRpc3RybyBjaG9pY2UgZGV0ZXJtaW5lcyB3aGF0IGluaXQgc2NyaXB0cyBhcmUgaW5zdGFsbGVkCitFWFRSQV9PRUNPTkZfU1lTVklOSVQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywnLS13aXRoLWRpc3Rybz1kZWJpYW4nLCctLXdpdGgtZGlzdHJvPW5vbmUnLGQpfSIKK0VYVFJBX09FQ09ORl9TWVNURU1EID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywnLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vJywnLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyJyxkKX0iCisKK0FWQUhJX0dUSyA/PSAiLS1kaXNhYmxlLWd0ayAtLWRpc2FibGUtZ3RrMyIKKworTERGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1saW50bCIKK0xERkxBR1NfYXBwZW5kX3VjbGludXgtdWNsaWJjID0gIiAtbGludGwiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHNlZCAnczpBTV9DSEVDS19QWU1PRDplY2hvICJubyBweW1vZCIgI0FNX0NIRUNLX1BZTU9EOmcnIC1pICR7U30vY29uZmlndXJlLmFjCit9CisKKworUEFDS0FHRVMgPSsgImF2YWhpLWRhZW1vbiBsaWJhdmFoaS1jb21tb24gbGliYXZhaGktY29yZSBsaWJhdmFoaS1jbGllbnQgYXZhaGktZG5zY29uZmQgbGliYXZhaGktZ2xpYiBsaWJhdmFoaS11aSBhdmFoaS1hdXRvaXBkIGF2YWhpLXV0aWxzIgorCisjIEFzIGF2YWhpIGRvZXNuJ3QgcHV0IGFueSBmaWxlcyBpbnRvIFBOLCBjbGVhciB0aGUgZmlsZXMgbGlzdCB0byBhdm9pZCBwcm9ibGVtcworIyBpZiBleHRyYSBsaWJyYXJpZXMgYXBwZWFyLgorRklMRVNfJHtQTn0gPSAiIgorRklMRVNfYXZhaGktYXV0b2lwZCA9ICIke3NiaW5kaXJ9L2F2YWhpLWF1dG9pcGQgXAorICAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2F2YWhpL2F2YWhpLWF1dG9pcGQuYWN0aW9uIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9kaGNwLyovYXZhaGktYXV0b2lwZCBcCisgICAgICAgICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vdWRoY3BjLmQvMDBhdmFoaS1hdXRvaXBkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS91ZGhjcGMuZC85OWF2YWhpLWF1dG9pcGQiCitGSUxFU19saWJhdmFoaS1jb21tb24gPSAiJHtsaWJkaXJ9L2xpYmF2YWhpLWNvbW1vbi5zby4qIgorRklMRVNfbGliYXZhaGktY29yZSA9ICIke2xpYmRpcn0vbGliYXZhaGktY29yZS5zby4qIgorRklMRVNfYXZhaGktZGFlbW9uID0gIiR7c2JpbmRpcn0vYXZhaGktZGFlbW9uIFwKKyAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2F2YWhpL2F2YWhpLWRhZW1vbi5jb25mIFwKKyAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2F2YWhpL2hvc3RzIFwKKyAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2F2YWhpL3NlcnZpY2VzIFwKKyAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2RidXMtMSBcCisgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9pbml0LmQvYXZhaGktZGFlbW9uIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2F2YWhpL2ludHJvc3BlY3Rpb24vKi5pbnRyb3NwZWN0IFwKKyAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2F2YWhpL2F2YWhpLXNlcnZpY2UuZHRkIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2F2YWhpL3NlcnZpY2UtdHlwZXMgXAorICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcyIKK0ZJTEVTX2xpYmF2YWhpLWNsaWVudCA9ICIke2xpYmRpcn0vbGliYXZhaGktY2xpZW50LnNvLioiCitGSUxFU19saWJhdmFoaS11aSA9ICIke2xpYmRpcn0vbGliYXZhaGktdWkuc28uKiIKK0ZJTEVTX2F2YWhpLWRuc2NvbmZkID0gIiR7c2JpbmRpcn0vYXZhaGktZG5zY29uZmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9hdmFoaS9hdmFoaS1kbnNjb25mZC5hY3Rpb24gXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9pbml0LmQvYXZhaGktZG5zY29uZmQiCitGSUxFU19saWJhdmFoaS1nbGliID0gIiR7bGliZGlyfS9saWJhdmFoaS1nbGliLnNvLioiCitGSUxFU19saWJhdmFoaS1nb2JqZWN0ID0gIiR7bGliZGlyfS9saWJhdmFoaS1nb2JqZWN0LnNvLioiCitGSUxFU19hdmFoaS11dGlscyA9ICIke2JpbmRpcn0vYXZhaGktKiIKKworUkRFUEVORFNfJHtQTn0tZGV2ID0gImF2YWhpLWRhZW1vbiAoPSAke0VYVEVORFBLR1Z9KSBsaWJhdmFoaS1jb3JlICg9ICR7RVhURU5EUEtHVn0pIGxpYmF2YWhpLWNsaWVudCAoPSAke0VYVEVORFBLR1Z9KSIKKworIyB1Y2xpYmMgaGFzIG5vIG5zcworUlJFQ09NTUVORFNfYXZhaGktZGFlbW9uX2FwcGVuZF9saWJjLWdsaWJjID0gIiBsaWJuc3MtbWRucyIKK1JSRUNPTU1FTkRTXyR7UE59X2FwcGVuZF9saWJjLWdsaWJjID0gIiBsaWJuc3MtbWRucyIKKworUlJFQ09NTUVORFNfYXZhaGktZGV2ID0gImV4cGF0LWRldiBsaWJjYXAtZGV2IGxpYmRhZW1vbi1kZXYgZGJ1cy1kZXYgZ2xpYi0yLjAtZGV2IHVwZGF0ZS1yYy5kLWRldiIKK1JSRUNPTU1FTkRTX2F2YWhpLWRldl9hcHBlbmRfbGliYy1nbGliYyA9ICIgZ2V0dGV4dC1kZXYiCisKK1JSRUNPTU1FTkRTX2F2YWhpLWRldltub2RlcHJyZWNzXSA9ICIxIgorCitDT05GRklMRVNfYXZhaGktZGFlbW9uID0gIiR7c3lzY29uZmRpcn0vYXZhaGkvYXZhaGktZGFlbW9uLmNvbmYiCisKK0lOSVRTQ1JJUFRfUEFDS0FHRVMgPSAiYXZhaGktZGFlbW9uIGF2YWhpLWRuc2NvbmZkIgorSU5JVFNDUklQVF9OQU1FX2F2YWhpLWRhZW1vbiA9ICJhdmFoaS1kYWVtb24iCitJTklUU0NSSVBUX1BBUkFNU19hdmFoaS1kYWVtb24gPSAiZGVmYXVsdHMgMjEgMTkiCitJTklUU0NSSVBUX05BTUVfYXZhaGktZG5zY29uZmQgPSAiYXZhaGktZG5zY29uZmQiCitJTklUU0NSSVBUX1BBUkFNU19hdmFoaS1kbnNjb25mZCA9ICJkZWZhdWx0cyAyMiAxOSIKKworZG9faW5zdGFsbCgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJIyBkb24ndCBpbnN0YWxsIC92YXIvcnVuIHdoZW4gcG9wdWxhdGluZyByb290ZnMuIERvIGl0IHRocm91Z2ggdm9sYXRpbGUKKwkjIC92YXIvcnVuIG9mIGN1cnJlbnQgdmVyc2lvbiBpcyBlbXB0eSwgc28ganVzdCByZW1vdmUgaXQuCisJIyBpZiAvdmFyL3J1biBiZWNvbWUgbm9uLWVtcHR5IGluIHRoZSBmdXR1cmUsIG5lZWQgdG8gaW5zdGFsbCBpdCB2aWEgdm9sYXRpbGUKKwlybSAtcmYgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuCisJcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJHtEfSR7bG9jYWxzdGF0ZWRpcn0KKwlybSAtcmYgJHtEfSR7ZGF0YWRpcn0vZGJ1cy0xL2ludGVyZmFjZXMKKwlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAke0R9JHtkYXRhZGlyfS9kYnVzLTEKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9hdmFoaQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS91ZGhjcGMuZAorCWluc3RhbGwgJHtXT1JLRElSfS8wMGF2YWhpLWF1dG9pcGQgJHtEfSR7c3lzY29uZmRpcn0vdWRoY3BjLmQKKwlpbnN0YWxsICR7V09SS0RJUn0vOTlhdmFoaS1hdXRvaXBkICR7RH0ke3N5c2NvbmZkaXJ9L3VkaGNwYy5kCit9CisKKyMgQXQgdGhlIHRpbWUgdGhlIHBvc3RpbnN0IHJ1bnMsIGRidXMgbWlnaHQgbm90IGJlIHNldHVwIHNvIG9ubHkgcmVzdGFydCBpZiBydW5uaW5nIAorIyBEb24ndCBleGl0IGVhcmx5LCBiZWNhdXNlIHVwZGF0ZS1yYy5kIG5lZWRzIHRvIHJ1biBzdWJzZXF1ZW50bHkuCisKK3BrZ19wb3N0aW5zdF9hdmFoaS1kYWVtb24gKCkgeworaWYgWyAteiAiJEQiIF07IHRoZW4KKwlraWxsYWxsIC1xIC1IVVAgZGJ1cy1kYWVtb24gfHwgdHJ1ZQorZmkKK30KKworcGtnX3Bvc3RybV9hdmFoaS1kYWVtb24gKCkgeworCWRlbHVzZXIgYXZhaGkgfHwgdHJ1ZQorCWRlbGdyb3VwIGF2YWhpIHx8IHRydWUKK30KKworcGtnX3Bvc3RybV9hdmFoaS1hdXRvaXBkICgpIHsKKwlkZWx1c2VyIGF2YWhpLWF1dG9pcGQgfHwgdHJ1ZQorCWRlbGdyb3VwIGF2YWhpLWF1dG9pcGQgfHwgdHJ1ZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2F2YWhpXzAuNi4zMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaV8wLjYuMzEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ3OTZhMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaV8wLjYuMzEuYmIKQEAgLTAsMCArMSwyMiBAQAorcmVxdWlyZSBhdmFoaS5pbmMKKworaW5oZXJpdCBzeXN0ZW1kCisKK1NZU1RFTURfUEFDS0FHRVMgPSAiJHtQTn0tZGFlbW9uICR7UE59LWRuc2NvbmZkIgorU1lTVEVNRF9TRVJWSUNFXyR7UE59LWRhZW1vbiA9ICJhdmFoaS1kYWVtb24uc2VydmljZSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1kbnNjb25mZCA9ICJhdmFoaS1kbnNjb25mZC5zZXJ2aWNlIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdmFoaS1jb21tb24vYWRkcmVzcy5oO2VuZGxpbmU9MjU7bWQ1PWIxZDFkMmNkYTFjMDdlYjg0OGVhN2Q2MjE1NzEyZDlkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F2YWhpLWNvcmUvZG5zLmg7ZW5kbGluZT0yMzttZDU9NmZlODI1OTBiODFhYTBkZGVhNTA5NWI1NDhlMmZkY2IgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXZhaGktZGFlbW9uL21haW4uYztlbmRsaW5lPTIxO21kNT05ZWU3NzM2OGM1NDA3YWY3N2NhYWVmMWIwNzI4NTk2OSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdmFoaS1jbGllbnQvY2xpZW50Lmg7ZW5kbGluZT0yMzttZDU9ZjRhYzc0MWEyNWM0ZjQzNDAzOWJhM2UxOGM4Njc0Y2YiCisKK1BSID0gIiR7SU5DX1BSfS4xIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmYyMjc0NWI4ZjczNjhhZDVhMGEzZmRkYWMzNDNmMmQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODM3MjcxOWIyNGUyZGQ3NWRlNmY1OWJiMTMxNWU2MDBkYjRmZDA5MjgwNWJkMTIwMWVkMGNiNjUxYTJkYWI0OCIKKworREVQRU5EUyArPSAiaW50bHRvb2wtbmF0aXZlIgorCitQQUNLQUdFUyA9KyAibGliYXZhaGktZ29iamVjdCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy8wMDAxLWF2YWhpLWZpeC1hdmFoaS1zdGF0dXMtY29tbWFuZC1lcnJvci1wcm9tcHQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvMDAwMS1hdmFoaS1maXgtYXZhaGktc3RhdHVzLWNvbW1hbmQtZXJyb3ItcHJvbXB0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1OTBkZjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvMDAwMS1hdmFoaS1maXgtYXZhaGktc3RhdHVzLWNvbW1hbmQtZXJyb3ItcHJvbXB0LnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK0Zyb20gZjc3NGFjMjVmNDM2YTc4MmNjY2NjNGRiZTY4Mzc4YTY4NDU5Njc5OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEx1IENob25nIDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCA3IE5vdiAyMDEzIDE0OjM2OjI4ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGF2YWhpOiBmaXggYXZhaGkgc3RhdHVzIGNvbW1hbmQgZXJyb3IgcHJvbXB0CisKK3NlcnZpY2UgLS1zdGF0dXMtYWxsIGNvbW1hbmQgd2lsbCBkaXNwbGF5IHdyb25nIHN0YXR1cyBmb3IgYXZhaGktZGFlbW9uLgorVGhpcyBjb21taXQgZml4IHRoaXMgZXJyb3IgcHJvbXB0IGFuZCBtYWtlIHNlcnZpY2UgZGlzcGxheSByaWdodCBzdGF0dXMKK2ZvciBhdmFoaS1kYWVtb24uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBMdSBDaG9uZyA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGluaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbiB8ICAgMTQgKysrKysrKysrKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbiBiL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbgoraW5kZXggNDc5M2I0Ni4uNDllYzM1OCAxMDA3NTUKKy0tLSBhL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbgorKysrIGIvaW5pdHNjcmlwdC9kZWJpYW4vYXZhaGktZGFlbW9uLmluCitAQCAtMTUzLDcgKzE1MywxNSBAQCBkX3JlbG9hZCgpIHsKKyAjICAgICAgIEZ1bmN0aW9uIHRoYXQgY2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgZGFlbW9uL3NlcnZpY2UuCisgIworIGRfc3RhdHVzKCkgeworLSAgICAkREFFTU9OIC1jICYmIGVjaG8gIiRERVNDIGlzIHJ1bm5pbmciIHx8IGVjaG8gIiRERVNDIGlzIG5vdCBydW5uaW5nIgorKyAgICAkREFFTU9OIC1jCisrICAgIHN0YXR1cz0kPworKyAgICBpZiBbICRzdGF0dXMgPSAwIF07IHRoZW4KKysgICAgICAgIGVjaG8gIiRERVNDIGlzIHJ1bm5pbmciCisrICAgICAgICByZXR1cm4gMAorKyAgICBlbHNlCisrICAgICAgICBlY2hvICIkREVTQyBpcyBub3QgcnVubmluZyIKKysgICAgICAgIHJldHVybiAzCisrICAgIGZpCisgfQorIAorIGNhc2UgIiQxIiBpbgorQEAgLTE4Miw5ICsxOTAsOSBAQCBjYXNlICIkMSIgaW4KKyAgICAgICAgIGRfc3RhdHVzCisgCTs7CisgICAgICopCistICAgICAgICBlY2hvICJVc2FnZTogJFNDUklQVE5BTUUge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR8cmVsb2FkfSIgPiYyCisrICAgICAgICBlY2hvICJVc2FnZTogJFNDUklQVE5BTUUge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR8cmVsb2FkfHN0YXR1c30iID4mMgorICAgICAgICAgZXhpdCAxCisgICAgICAgICA7OworIGVzYWMKKyAKKy1leGl0IDAKKytleGl0ICQ/CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzLzAwYXZhaGktYXV0b2lwZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy8wMGF2YWhpLWF1dG9pcGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBhYjgxNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy8wMGF2YWhpLWF1dG9pcGQKQEAgLTAsMCArMSwxMCBAQAorIyEvYmluL3NoCisKK1sgLXogIiQxIiBdICYmIGVjaG8gIkVycm9yOiBzaG91bGQgYmUgY2FsbGVkIGZyb20gdWRoY3BjIiAmJiBleGl0IDEKKworY2FzZSAiJDEiIGluCisKKwlkZWNvbmZpZ3xyZW5ld3xib3VuZCkKKwkJL3Vzci9zYmluL2F2YWhpLWF1dG9pcGQgLWsgJGludGVyZmFjZSAyPiAvZGV2L251bGwKKwkJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy85OWF2YWhpLWF1dG9pcGQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvOTlhdmFoaS1hdXRvaXBkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNGNkYWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvOTlhdmFoaS1hdXRvaXBkCkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaAorCitbIC16ICIkMSIgXSAmJiBlY2hvICJFcnJvcjogc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHVkaGNwYyIgJiYgZXhpdCAxCisKK2Nhc2UgIiQxIiBpbgorCisJbGVhc2VmYWlsKQorCQkvdXNyL3NiaW4vYXZhaGktYXV0b2lwZCAtd0QgJGludGVyZmFjZSAyPiAvZGV2L251bGwKKwkJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9hdmFoaV9maXhfaW5zdGFsbF9pc3N1ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9hdmFoaV9maXhfaW5zdGFsbF9pc3N1ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmYyMGVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL2F2YWhpX2ZpeF9pbnN0YWxsX2lzc3VlLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGaXhlcyB0aGlzIGluc3RhbGwgaXNzdWUKKyN8IC9iaW4vc2g6IGxpbmUgMDogY2Q6IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2F2YWhpLTAuNi4zMS1yMy4wL2ltYWdlLy91c3IvYmluOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzAzCisKK0luZGV4OiBhdmFoaS0wLjYuMzEvYXZhaGktdXRpbHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdmFoaS0wLjYuMzEub3JpZy9hdmFoaS11dGlscy9NYWtlZmlsZS5hbQorKysrIGF2YWhpLTAuNi4zMS9hdmFoaS11dGlscy9NYWtlZmlsZS5hbQorQEAgLTU0LDYgKzU0LDcgQEAgYXZhaGlfc2V0X2hvc3RfbmFtZV9DRkxBR1MgPSAkKEFNX0NGTEFHUworIGF2YWhpX3NldF9ob3N0X25hbWVfTERBREQgPSAkKEFNX0xEQUREKSAuLi9hdmFoaS1jbGllbnQvbGliYXZhaGktY2xpZW50LmxhIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEKKyAKKyBpbnN0YWxsLWV4ZWMtbG9jYWw6CisrCSQoTUtESVJfUCkgJChERVNURElSKS8kKGJpbmRpcikgJiYgXAorIAljZCAkKERFU1RESVIpLyQoYmluZGlyKSAmJiBcCisgCQlybSAtZiBhdmFoaS1yZXNvbHZlLWhvc3QtbmFtZSBhdmFoaS1yZXNvbHZlLWFkZHJlc3MgYXZhaGktYnJvd3NlLWRvbWFpbnMgYXZhaGktcHVibGlzaC1hZGRyZXNzIGF2YWhpLXB1Ymxpc2gtc2VydmljZSAmJiBcCisgCQkkKExOX1MpIGF2YWhpLXJlc29sdmUgYXZhaGktcmVzb2x2ZS1ob3N0LW5hbWUgJiYgXAorSW5kZXg6IGF2YWhpLTAuNi4zMS9hdmFoaS11dGlscy9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF2YWhpLTAuNi4zMS5vcmlnL2F2YWhpLXV0aWxzL01ha2VmaWxlLmluCisrKysgYXZhaGktMC42LjMxL2F2YWhpLXV0aWxzL01ha2VmaWxlLmluCitAQCAtOTA2LDYgKzkwNiw3IEBAIHVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWJpblBST0dSQU1TCisgCisgCisgQEhBVkVfREJVU19UUlVFQGluc3RhbGwtZXhlYy1sb2NhbDoKKytASEFWRV9EQlVTX1RSVUVACSQoTUtESVJfUCkgJChERVNURElSKS8kKGJpbmRpcikgJiYgXAorIEBIQVZFX0RCVVNfVFJVRUAJY2QgJChERVNURElSKS8kKGJpbmRpcikgJiYgXAorIEBIQVZFX0RCVVNfVFJVRUAJCXJtIC1mIGF2YWhpLXJlc29sdmUtaG9zdC1uYW1lIGF2YWhpLXJlc29sdmUtYWRkcmVzcyBhdmFoaS1icm93c2UtZG9tYWlucyBhdmFoaS1wdWJsaXNoLWFkZHJlc3MgYXZhaGktcHVibGlzaC1zZXJ2aWNlICYmIFwKKyBASEFWRV9EQlVTX1RSVUVACQkkKExOX1MpIGF2YWhpLXJlc29sdmUgYXZhaGktcmVzb2x2ZS1ob3N0LW5hbWUgJiYgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL2ZpeF9mb3JfYXV0b21ha2VfMS4xMi54LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL2ZpeF9mb3JfYXV0b21ha2VfMS4xMi54LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYzRjMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvZml4X2Zvcl9hdXRvbWFrZV8xLjEyLngucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2F1dG9hbWtlIDEuMTIueCBoYXMgZGVwcmljYXRlZCB1c2Ugb2YgbWtkaXJfcCAsIGFuZCByZWNvbW1lbmRzIHVzZSBvZiBNS0RJUl9QCitpbnN0ZWFkLiBGaXhlZCB0aGUgYXV0b21ha2UgZmlsZXMgYWNjb3JkaW5nbHkgdG8gYXZvaWQgd2FybmluZy1lcnJvcnMuCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNy8wOQorCisKK0luZGV4OiBhdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXZhaGktMC42LjMxLm9yaWcvYXZhaGktZGFlbW9uL01ha2VmaWxlLmFtCisrKysgYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9NYWtlZmlsZS5hbQorQEAgLTE2OSw3ICsxNjksNyBAQCB4bWxsaW50OgorIAlkb25lCisgCisgaW5zdGFsbC1kYXRhLWxvY2FsOgorLQl0ZXN0IC16ICIkKGxvY2Fsc3RhdGVkaXIpL3J1biIgfHwgJChta2Rpcl9wKSAiJChERVNURElSKSQobG9jYWxzdGF0ZWRpcikvcnVuIgorKwl0ZXN0IC16ICIkKGxvY2Fsc3RhdGVkaXIpL3J1biIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQobG9jYWxzdGF0ZWRpcikvcnVuIgorIAorIHVwZGF0ZS1zeXN0ZW1kOgorIAljdXJsIGh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9zeXN0ZW1kL3BsYWluL3NyYy9zZC1kYWVtb24uYyA+IHNkLWRhZW1vbi5jCitJbmRleDogYXZhaGktMC42LjMxL2F2YWhpLWF1dG9pcGQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdmFoaS0wLjYuMzEub3JpZy9hdmFoaS1hdXRvaXBkL01ha2VmaWxlLmFtCisrKysgYXZhaGktMC42LjMxL2F2YWhpLWF1dG9pcGQvTWFrZWZpbGUuYW0KK0BAIC03Niw3ICs3Niw3IEBAIGRoY2xpZW50ZW50ZXJkaXIgPSAkKHN5c2NvbmZkaXIpL2RoY3AvZGgKKyBkaGNsaWVudGV4aXRkaXIgPSAkKHN5c2NvbmZkaXIpL2RoY3AvZGhjbGllbnQtZXhpdC1ob29rcy5kCisgCisgaW5zdGFsbC1leGVjLWhvb2s6IGRoY2xpZW50LWV4aXQtaG9vayBkaGNsaWVudC1lbnRlci1ob29rCistCSQobWtkaXJfcCkgJChERVNURElSKSQoZGhjbGllbnRlbnRlcmRpcikgJChERVNURElSKSQoZGhjbGllbnRleGl0ZGlyKQorKwkkKE1LRElSX1ApICQoREVTVERJUikkKGRoY2xpZW50ZW50ZXJkaXIpICQoREVTVERJUikkKGRoY2xpZW50ZXhpdGRpcikKKyAJJChJTlNUQUxMKSBkaGNsaWVudC1lbnRlci1ob29rICQoREVTVERJUikkKGRoY2xpZW50ZW50ZXJkaXIpL2F2YWhpLWF1dG9pcGQKKyAJJChJTlNUQUxMKSBkaGNsaWVudC1leGl0LWhvb2sgJChERVNURElSKSQoZGhjbGllbnRleGl0ZGlyKS9hdmFoaS1hdXRvaXBkCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvaW5pdHNjcmlwdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9pbml0c2NyaXB0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5Mzg4OWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvaW5pdHNjcmlwdC5wYXRjaApAQCAtMCwwICsxLDQxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtLWdpdCBhL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbiBiL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbgoraW5kZXggMzBhMmMyZi4uYjU4NDhhOCAxMDA3NTUKKy0tLSBhL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbgorKysrIGIvaW5pdHNjcmlwdC9kZWJpYW4vYXZhaGktZGFlbW9uLmluCitAQCAtMSwyICsxLDE0IEBACisgIyEvYmluL3NoCistCisrIyMjIEJFR0lOIElOSVQgSU5GTworKyMgUHJvdmlkZXM6ICAgICAgICAgIGF2YWhpCisrIyBSZXF1aXJlZC1TdGFydDogICAgJHJlbW90ZV9mcyBkYnVzCisrIyBSZXF1aXJlZC1TdG9wOiAgICAgJHJlbW90ZV9mcyBkYnVzCisrIyBTaG91bGQtU3RhcnQ6CSAgICAgJHN5c2xvZworKyMgU2hvdWxkLVN0b3A6ICAgICAgICRzeXNsb2cKKysjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNCA1CisrIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKysjIFNob3J0LURlc2NyaXB0aW9uOiBBdmFoaSBtRE5TL0ROUy1TRCBEYWVtb24KKysjIERlc2NyaXB0aW9uOiAgICAgICBaZXJvY29uZiBkYWVtb24gZm9yIGNvbmZpZ3VyaW5nIHlvdXIgbmV0d29yayAKKysjICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5CisrIyMjIEVORCBJTklUIElORk8KKysjCitkaWZmIC0tZ2l0IGEvaW5pdHNjcmlwdC9kZWJpYW4vYXZhaGktZG5zY29uZmQuaW4gYi9pbml0c2NyaXB0L2RlYmlhbi9hdmFoaS1kbnNjb25mZC5pbgoraW5kZXggYWMzNDgwNC4uZjk1YzM0MCAxMDA3NTUKKy0tLSBhL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRuc2NvbmZkLmluCisrKysgYi9pbml0c2NyaXB0L2RlYmlhbi9hdmFoaS1kbnNjb25mZC5pbgorQEAgLTEsMSArMSwxNCBAQAorICMhL2Jpbi9zaAorKyMjIyBCRUdJTiBJTklUIElORk8KKysjIFByb3ZpZGVzOiAgICAgICAgICBhdmFoaS1kbnNjb25mZAorKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRyZW1vdGVfZnMgYXZhaGkKKysjIFJlcXVpcmVkLVN0b3A6ICAgICAkcmVtb3RlX2ZzIGF2YWhpCisrIyBTaG91bGQtU3RhcnQ6CSAgICAgJHN5c2xvZworKyMgU2hvdWxkLVN0b3A6ICAgICAgICRzeXNsb2cKKysjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNCA1CisrIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKysjIFNob3J0LURlc2NyaXB0aW9uOiBBdmFoaSBtRE5TL0ROUy1TRCBETlMgY29uZmlndXJhdGlvbgorKyMgRGVzY3JpcHRpb246ICAgICAgIFplcm9jb25mIGRhZW1vbiBmb3IgY29uZmlndXJpbmcgeW91ciBuZXR3b3JrIAorKyMgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkKKysjIyMgRU5EIElOSVQgSU5GTworKyMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9vdXQtb2YtdHJlZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9vdXQtb2YtdHJlZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzQ3NmNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL291dC1vZi10cmVlLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRnJvbSBhNjJkYzk1ZDc1NjkxZWE0YWVmYTg2ZDhiYmU1NGM2MmFmZDc4ZmY2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMTcgU2VwIDIwMTMgMTI6Mjc6MzYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gYnVpbGQtc3lzOiBmaXggb3V0LW9mLXRyZWUgYnVpbGRzIHdpdGhvdXQgeG1sdG9tYW4KKworSWYgbWFucGFnZXMgYXJlIGVuYWJsZWQgYnV0IHhtbHRvbWFuIGlzbid0IHByZXNlbnQsIG91dC1vZi10cmVlIGJ1aWxkcyBmYWlsCitiZWNhdXNlIGl0IGNoZWNrcyBpbnNpZGUgdGhlIGJ1aWxkIGRpcmVjdG9yeSBmb3IgdGhlIHByZS1nZW5lcmF0ZWQgbWFucGFnZXMuCisKK0ZpeCB0aGlzIGJ5IHVzaW5nICRzcmNkaXIgd2hlbiBsb29raW5nIGZvciBmaWxlcyBpbnNpZGUgdGhlIHNvdXJjZSBkaXJlY3RvcnkuCistLS0KKyBjb25maWd1cmUuYWMgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDlkZWJjZTIuLjA0N2M3YWUgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEwMjEsNyArMTAyMSw3IEBAIGlmIHRlc3QgeCRtYW5wYWdlcyA9IHh5ZXMgOyB0aGVuCisgICAgIGZpCisgCisgICAgIGlmIHRlc3QgeCRoYXZlX3htbHRvbWFuID0geG5vIC1vIHgkeG1sdG9tYW4gPSB4bm87IHRoZW4KKy0gICAgICAgIGlmICEgdGVzdCAtZSBtYW4vYXZhaGktZGFlbW9uLjggOyB0aGVuCisrICAgICAgICBpZiAhIHRlc3QgLWUgJHNyY2Rpci9tYW4vYXZhaGktZGFlbW9uLjggOyB0aGVuCisgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFsqKiogeG1sdG9tYW4gd2FzIG5vdCBmb3VuZCBvciB3YXMgZGlzYWJsZWQsIGl0IGlzIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZSBtYW5wYWdlcyBhcyB0aGV5IGhhdmUgbm90IGJlZW4gcHJlLWJ1aWx0LCBpbnN0YWxsIHhtbHRvbWFuLCBwYXNzIC0tZGlzYWJsZS1tYW5wYWdlcyBvciBkb250IHBhc3MgLS1kaXNhYmxlLXhtbHRvbWFuXSkKKyAgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgIGZpCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9yZXVzZXBvcnQtY2hlY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvcmV1c2Vwb3J0LWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiODFjMmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvcmV1c2Vwb3J0LWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0ZpeCBhdmFoaS1kYWVtb24gd2hlbiBydW5uaW5nIG9uIGtlcm5lbCA8IDMuOSAocGF0Y2ggdGFrZW4gZnJvbSBVYnVudHUpLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgKHVubWFpbnRhaW5lZCB1cHN0cmVhbSkKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK0Rlc2NyaXB0aW9uOiBTT19SRVVTRVBPUlQgbWF5IG5vdCBleGlzdCBpbiBydW5uaW5nIGtlcm5lbAorIFdoZW4gdXNlcnNwYWNlIGRlZmluZXMgU09fUkVVU0VQT1JUIHdlIHdpbGwgYXR0ZW1wdCB0byBlbmFibGUgc29ja2V0CisgcG9ydCBudW1iZXIgcmV1c2UuICBIb3dldmVyIGlmIHRoZSBydW5uaW5nIGtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0CisgdGhpcyBjYWxsIGl0IHdpbGwgZmFpbCBwcmV2ZW50aW5nIGRhZW1vbiBzdGFydHVwLiAgSWYgdGhpcyBjYWxsIGlzCisgcHJlc2VudCBidXQgZmFpbHMgRU5PUFJPVE9PUFQgdGhlbiB3ZSBrbm93IHRoYXQgYWN0dWFsbHkgdGhlIGtlcm5lbAorIGRvZXMgbm90IHN1cHBvcnQgaXQgYW5kIHdlIHNob3VsZCBjb250aW51ZSBhcyBpZiB3ZSBkaWQgbm90IGhhdmUgdGhlCisgY2FsbCBhdCBhbGwuICAoTFA6ICMxMjI4MjA0KQorIC4KKyBUaGlzIHBhdGNoIGNvdWxkIGJlIHJlbW92ZWQgZnJvbSB0aGUgZGViaWFuIHBhY2thZ2UgYWZ0ZXIgamVzc2llIHJlbGVhc2UuCitBdXRob3I6IEFuZHkgV2hpdGNyb2Z0IDxhcHdAY2Fub25pY2FsLmNvbT4KKworSW5kZXg6IGF2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3NvY2tldC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXZhaGktMC42LjMxLm9yaWcvYXZhaGktY29yZS9zb2NrZXQuYwkyMDEzLTA5LTIwIDE2OjM2OjUwLjAwMDAwMDAwMCArMDEwMAorKysrIGF2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3NvY2tldC5jCTIwMTMtMDktMjAgMTY6Mzg6MjMuNzgxODYzNjQ0ICswMTAwCitAQCAtMTc3LDcgKzE3Nyw4IEBACisgICAgIHllcyA9IDE7CisgICAgIGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SRVVTRVBPUlQsICZ5ZXMsIHNpemVvZih5ZXMpKSA8IDApIHsKKyAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJTT19SRVVTRVBPUlQgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CistICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICBpZiAoZXJybm8gIT0gRU5PUFJPVE9PUFQpCisrICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICB9CisgI2VuZGlmCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kLzAwMDEtYnVpbGQtdXNlLXBrZy1jb25maWctdG8tZmluZC1saWJ4bWwyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC8wMDAxLWJ1aWxkLXVzZS1wa2ctY29uZmlnLXRvLWZpbmQtbGlieG1sMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjUyNTFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC8wMDAxLWJ1aWxkLXVzZS1wa2ctY29uZmlnLXRvLWZpbmQtbGlieG1sMi5wYXRjaApAQCAtMCwwICsxLDQyIEBACit4bWwyLWNvbmZpZyBpcyBkaXNhYmxlZCwgc28gY2hhbmdlIHRoZSBjb25maWd1cmUgc2NyaXB0IHRvIHVzZSBwa2djb25maWcgdG8gZmluZAorbGlieG1sMi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCistLS0KKyBjb25maWd1cmUuaW4gfCAxOCArKystLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggZDU2NmUxYy4uYzllZjNhNiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtMjEwMiwyMSArMjEwMiw5IEBAIGNhc2UgIiR1c2VfbGlieG1sMiIgaW4KKyAJCURTVF9MSUJYTUwyX0lOQz0iIgorIAkJOzsKKyAJYXV0b3x5ZXMpCistCQljYXNlIFhgKHhtbDItY29uZmlnIC0tdmVyc2lvbikgMj4vZGV2L251bGxgIGluCistCQlYMi5bWzY3ODldXS4qKQorLQkJCWxpYnhtbDJfbGlicz1geG1sMi1jb25maWcgLS1saWJzYAorLQkJCWxpYnhtbDJfY2ZsYWdzPWB4bWwyLWNvbmZpZyAtLWNmbGFnc2AKKy0JCQk7OworLQkJKikKKy0JCQlsaWJ4bWwyX2xpYnM9CistCQkJbGlieG1sMl9jZmxhZ3M9CistCQkJOzsKKy0JCWVzYWMKKy0JCTs7CistCSopCistCQlpZiB0ZXN0IC1mICIkdXNlX2xpYnhtbDIvYmluL3htbDItY29uZmlnIiA7IHRoZW4KKy0JCQlsaWJ4bWwyX2xpYnM9YCR1c2VfbGlieG1sMi9iaW4veG1sMi1jb25maWcgLS1saWJzYAorLQkJCWxpYnhtbDJfY2ZsYWdzPWAkdXNlX2xpYnhtbDIvYmluL3htbDItY29uZmlnIC0tY2ZsYWdzYAorKwkJaWYgcGtnLWNvbmZpZyAtLWV4aXN0cyBsaWJ4bWwtMi4wIDsgdGhlbgorKwkJCWxpYnhtbDJfbGlicz1gcGtnLWNvbmZpZyBsaWJ4bWwtMi4wIC0tbGlic2AKKysJCQlsaWJ4bWwyX2NmbGFncz1gcGtnLWNvbmZpZyBsaWJ4bWwtMi4wIC0tY2ZsYWdzYAorIAkJZmkKKyAJCTs7CisgZXNhYworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kLzAwMDEtZ2VuLmMtZXh0ZW5kLURJUk5BTUVTSVpFLWZyb20tMjU2LXRvLTUxMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvMDAwMS1nZW4uYy1leHRlbmQtRElSTkFNRVNJWkUtZnJvbS0yNTYtdG8tNTEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMTUwOTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kLzAwMDEtZ2VuLmMtZXh0ZW5kLURJUk5BTUVTSVpFLWZyb20tMjU2LXRvLTUxMi5wYXRjaApAQCAtMCwwICsxLDI1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU3ViamVjdDogZ2VuLmM6IGV4dGVuZCBESVJOQU1FU0laRSBmcm9tIDI1NiB0byA1MTIKKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgbGliL2Rucy9nZW4uYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9kbnMvZ2VuLmMgYi9saWIvZG5zL2dlbi5jCitpbmRleCA3YTdkYWZiLi41MWEwNDM1IDEwMDY0NAorLS0tIGEvbGliL2Rucy9nZW4uYworKysrIGIvbGliL2Rucy9nZW4uYworQEAgLTE0OCw3ICsxNDgsNyBAQCBzdGF0aWMgY29uc3QgY2hhciBjb3B5cmlnaHRbXSA9CisgI2RlZmluZSBUWVBFQ0xBU1NCVUYgKFRZUEVDTEFTU0xFTiArIDEpCisgI2RlZmluZSBUWVBFQ0xBU1NGTVQgIiUiIFNUUihUWVBFQ0xBU1NMRU4pICJbLTAtOWEtel1fJWQiCisgI2RlZmluZSBBVFRSSUJVVEVTSVpFIDI1NgorLSNkZWZpbmUgRElSTkFNRVNJWkUgMjU2CisrI2RlZmluZSBESVJOQU1FU0laRSA1MTIKKyAKKyBzdGF0aWMgc3RydWN0IGNjIHsKKyAJc3RydWN0IGNjICpuZXh0OworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2JpbmQtY29uZmdlbi1idWlsZC11bml4Lm8tb25jZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvYmluZC1jb25mZ2VuLWJ1aWxkLXVuaXguby1vbmNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NmQ1ZDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2JpbmQtY29uZmdlbi1idWlsZC11bml4Lm8tb25jZS5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIDliNDA2MTlmZjZmZGRmZWYyNzU4YmE3OTc3ODlmODQ4N2Y0MTJkZjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMTYgRmViIDIwMTUgMDA6NTA6MDEgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmdlbjogZG9uJ3QgYnVpbGQgdW5peC5vIHR3aWNlCisKK0ZpeGVkOgordW5peC9vcy5vOiBmaWxlIG5vdCByZWNvZ25pemVkOiBGaWxlIHRydW5jYXRlZAorY29sbGVjdDI6IGVycm9yOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCisKK1RoaXMgaXMgYmVjYXVzZSBvcy5vIHdhcyBidWlsdCB0d2ljZToKKyogVGhlIGltcGxpY2l0eSBydWxlIChkZXBlbmRzIG9uIHVuaXgvb3MubykKKyogVGhlICJtYWtlIGFsbCIgaW4gdW5peCBzdWJkaXIgKGRlcGVuZHMgb24gdW5peC9vcy5vKQorCitEZXBlbmQgb24gc3ViZGlycyB3aGljaCBpcyB1bml4IG9ubHkgcmF0aGVyIHRoYW4gdW5peC9vcy5vIHdpbGwgZml4IHRoZQorcHJvYmxlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgYmluL2NvbmZnZW4vTWFrZWZpbGUuaW4gfCAgICA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYmluL2NvbmZnZW4vTWFrZWZpbGUuaW4gYi9iaW4vY29uZmdlbi9NYWtlZmlsZS5pbgoraW5kZXggOGIzZTVhYS4uNDg2OGEyNCAxMDA2NDQKKy0tLSBhL2Jpbi9jb25mZ2VuL01ha2VmaWxlLmluCisrKysgYi9iaW4vY29uZmdlbi9NYWtlZmlsZS5pbgorQEAgLTc0LDExICs3NCwxMSBAQCBybmRjLWNvbmZnZW4uQE9AOiBybmRjLWNvbmZnZW4uYworIGRkbnMtY29uZmdlbi5AT0A6IGRkbnMtY29uZmdlbi5jCisgCSR7TElCVE9PTF9NT0RFX0NPTVBJTEV9ICR7Q0N9ICR7QUxMX0NGTEFHU30gLWMgJHtzcmNkaXJ9L2RkbnMtY29uZmdlbi5jCisgCistcm5kYy1jb25mZ2VuQEVYRUVYVEA6IHJuZGMtY29uZmdlbi5AT0AgdXRpbC5AT0Aga2V5Z2VuLkBPQCAke1VPQkpTfSAke0NPTkZERVBMSUJTfSAKKytybmRjLWNvbmZnZW5ARVhFRVhUQDogcm5kYy1jb25mZ2VuLkBPQCB1dGlsLkBPQCBrZXlnZW4uQE9AICR7Q09ORkRFUExJQlN9ICQoU1VCRElSUykKKyAJZXhwb3J0IEJBU0VPQkpTPSJybmRjLWNvbmZnZW4uQE9AIHV0aWwuQE9AIGtleWdlbi5AT0AgJHtVT0JKU30iOyBcCisgCSR7RklOQUxCVUlMRENNRH0KKyAKKy1kZG5zLWNvbmZnZW5ARVhFRVhUQDogZGRucy1jb25mZ2VuLkBPQCB1dGlsLkBPQCBrZXlnZW4uQE9AICR7VU9CSlN9ICR7Q09ORkRFUExJQlN9IAorK2RkbnMtY29uZmdlbkBFWEVFWFRAOiBkZG5zLWNvbmZnZW4uQE9AIHV0aWwuQE9AIGtleWdlbi5AT0AgJHtDT05GREVQTElCU30gJChTVUJESVJTKQorIAlleHBvcnQgQkFTRU9CSlM9ImRkbnMtY29uZmdlbi5AT0AgdXRpbC5AT0Aga2V5Z2VuLkBPQCAke1VPQkpTfSI7IFwKKyAJJHtGSU5BTEJVSUxEQ01EfQorIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvYmluZC1lbnN1cmUtc2VhcmNoaW5nLWZvci1qc29uLWhlYWRlcnMtc2VhcmNoZXMtc3lzci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvYmluZC1lbnN1cmUtc2VhcmNoaW5nLWZvci1qc29uLWhlYWRlcnMtc2VhcmNoZXMtc3lzci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2RmM2JiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9iaW5kLWVuc3VyZS1zZWFyY2hpbmctZm9yLWpzb24taGVhZGVycy1zZWFyY2hlcy1zeXNyLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK0Zyb20gOTQ3M2QyOTg0MzU3OTgwMmU5NmIwMjkzYTNlOTUzZmVkOTNkZTgyYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCA5IEp1biAyMDE1IDExOjIyOjAwIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGJpbmQ6IGVuc3VyZSBzZWFyY2hpbmcgZm9yIGpzb24gaGVhZGVycyBzZWFyY2hlcyBzeXNyb290CisKK0JpbmQgY2FuIGZhaWwgY29uZmlndXJlIGJ5IGRldGVjdGluZyBoZWFkZXJzIHcvbyBsaWJzWzFdLCBvcgoraXQgY2FuIGZhaWwgdGhlIGhvc3QgY29udGFtaW5hdGlvbiBjaGVjayBhcyBwZXIgYmVsb3c6CisKK0VSUk9SOiBUaGlzIGF1dG9jb25mIGxvZyBpbmRpY2F0ZXMgZXJyb3JzLCBpdCBsb29rZWQgYXQgaG9zdCBpbmNsdWRlIGFuZC9vciBsaWJyYXJ5IHBhdGhzIHdoaWxlIGRldGVybWluaW5nIHN5c3RlbSBjYXBhYmlsaXRpZXMuCitSZXJ1biBjb25maWd1cmUgdGFzayBhZnRlciBmaXhpbmcgdGhpcy4gVGhlIHBhdGggd2FzICdidWlsZC90bXAvd29yay9jb3JlMi02NC1wb2t5LWxpbnV4L2JpbmQvOS4xMC4yLXIxL2J1aWxkJworRVJST1I6IEZ1bmN0aW9uIGZhaWxlZDogZG9fcWFfY29uZmlndXJlCitFUlJPUjogTG9nZmlsZSBvZiBmYWlsdXJlIHN0b3JlZCBpbjogYnVpbGQvdG1wL3dvcmsvY29yZTItNjQtcG9reS1saW51eC9iaW5kLzkuMTAuMi1yMS90ZW1wL2xvZy5kb19jb25maWd1cmUuNTI0MgorRVJST1I6IFRhc2sgNSAobWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmRfOS4xMC4yLmJiLCBkb19jb25maWd1cmUpIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAnMScKK05PVEU6IFRhc2tzIFN1bW1hcnk6IEF0dGVtcHRlZCA3NzMgdGFza3Mgb2Ygd2hpY2ggNzY4IGRpZG4ndCBuZWVkIHRvIGJlIHJlcnVuIGFuZCAxIGZhaWxlZC4KK05vIGN1cnJlbnRseSBydW5uaW5nIHRhc2tzICg3NzMgb2YgNzgxKQorCitTdW1tYXJ5OiAxIHRhc2sgZmFpbGVkOgorICAvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmRfOS4xMC4yLmJiLCBkb19jb25maWd1cmUKKworT25lIHdheSB0byBmaXggaXQgd291bGQgYmUgdG8gdW5jb25kaXRpb25hbGx5IGRpc2FibGUganNvbiBpbiBiaW5kCitjb25maWd1cmVbMl0gYnV0IGhlcmUgd2UgZml4IGl0IGJ5IHVzaW5nIHRoZSBwYXRoIHRvIHdoZXJlIHdlIHdvdWxkCitwdXQgdGhlIGhlYWRlciBpZiB3ZSBoYWQganNvbiBpbiB0aGUgc3lzcm9vdCwgaW4gY2FzZSBzb21lb25lIHdhbnRzCit0byBtYWtlIHVzZSBvZiB0aGUgY29tYmluYXRpb24gc29tZSBkYXkuCisKK1sxXSBodHRwczovL3RyYWMubWFjcG9ydHMub3JnL3RpY2tldC80NTMwNQorWzJdIGh0dHBzOi8vdHJhYy5tYWNwb3J0cy5vcmcvY2hhbmdlc2V0LzEyNjQwNgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIFNwZWNpZmljXQorU2lnbmVkLW9mZi1ieTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuaW4gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KK2luZGV4IGM5ZWYzYTYwMTM0My4uMTdhMWY2MTNlOWFjIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC0yMTM5LDcgKzIxMzksNyBAQCBjYXNlICIkdXNlX2xpYmpzb24iIGluCisgCQlsaWJqc29uX2xpYnM9IiIKKyAJCTs7CisgCWF1dG98eWVzKQorLQkJZm9yIGQgaW4gL3VzciAvdXNyL2xvY2FsIC9vcHQvbG9jYWwKKysJCWZvciBkIGluICIke1NUQUdJTkdfSU5DRElSfSIKKyAJCWRvCisgCQkJaWYgdGVzdCAtZiAiJHtkfS9pbmNsdWRlL2pzb24vanNvbi5oIgorIAkJCXRoZW4KKy0tIAorMi40LjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9iaW5kOSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvYmluZDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY4Njc5ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvYmluZDkKQEAgLTAsMCArMSwyIEBACisjIHN0YXJ0dXAgb3B0aW9ucyBmb3IgdGhlIHNlcnZlcgorT1BUSU9OUz0iLXUgYmluZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvY29uZi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWQzNDVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9jb25mLnBhdGNoCkBAIC0wLDAgKzEsMzMwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK3RoZSBwYXRjaCBpcyBpbXBvcnRlZCBmcm9tIG9wZW5lbWJlZGRlZCBwcm9qZWN0CisKKzExLzMwLzIwMTAgLSBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLjAgYmluZC05LjMuMS9jb25mL2RiLjAKKy0tLSBiaW5kLTkuMy4xLm9yaWcvY29uZi9kYi4wCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9jb25mL2RiLjAJMjAwNS0wNy0xMCAyMjoxNDowMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTIgQEAKKys7CisrOyBCSU5EIHJldmVyc2UgZGF0YSBmaWxlIGZvciBicm9hZGNhc3Qgem9uZQorKzsKKyskVFRMCTYwNDgwMAorK0AJSU4JU09BCWxvY2FsaG9zdC4gcm9vdC5sb2NhbGhvc3QuICgKKysJCQkgICAgICAxCQk7IFNlcmlhbAorKwkJCSA2MDQ4MDAJCTsgUmVmcmVzaAorKwkJCSAgODY0MDAJCTsgUmV0cnkKKysJCQkyNDE5MjAwCQk7IEV4cGlyZQorKwkJCSA2MDQ4MDAgKQk7IE5lZ2F0aXZlIENhY2hlIFRUTAorKzsKKytACUlOCU5TCWxvY2FsaG9zdC4KK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvY29uZi9kYi4xMjcgYmluZC05LjMuMS9jb25mL2RiLjEyNworLS0tIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLjEyNwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvY29uZi9kYi4xMjcJMjAwNS0wNy0xMCAyMjoxNDowMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTMgQEAKKys7CisrOyBCSU5EIHJldmVyc2UgZGF0YSBmaWxlIGZvciBsb2NhbCBsb29wYmFjayBpbnRlcmZhY2UKKys7CisrJFRUTAk2MDQ4MDAKKytACUlOCVNPQQlsb2NhbGhvc3QuIHJvb3QubG9jYWxob3N0LiAoCisrCQkJICAgICAgMQkJOyBTZXJpYWwKKysJCQkgNjA0ODAwCQk7IFJlZnJlc2gKKysJCQkgIDg2NDAwCQk7IFJldHJ5CisrCQkJMjQxOTIwMAkJOyBFeHBpcmUKKysJCQkgNjA0ODAwICkJOyBOZWdhdGl2ZSBDYWNoZSBUVEwKKys7CisrQAlJTglOUwlsb2NhbGhvc3QuCisrMS4wLjAJSU4JUFRSCWxvY2FsaG9zdC4KK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvY29uZi9kYi5lbXB0eSBiaW5kLTkuMy4xL2NvbmYvZGIuZW1wdHkKKy0tLSBiaW5kLTkuMy4xLm9yaWcvY29uZi9kYi5lbXB0eQkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvY29uZi9kYi5lbXB0eQkyMDA1LTA3LTEwIDIyOjE0OjAwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxNCBAQAorKzsgQklORCByZXZlcnNlIGRhdGEgZmlsZSBmb3IgZW1wdHkgcmZjMTkxOCB6b25lCisrOworKzsgRE8gTk9UIEVESVQgVEhJUyBGSUxFIC0gaXQgaXMgdXNlZCBmb3IgbXVsdGlwbGUgem9uZXMuCisrOyBJbnN0ZWFkLCBjb3B5IGl0LCBlZGl0IG5hbWVkLmNvbmYsIGFuZCB1c2UgdGhhdCBjb3B5LgorKzsKKyskVFRMCTg2NDAwCisrQAlJTglTT0EJbG9jYWxob3N0LiByb290LmxvY2FsaG9zdC4gKAorKwkJCSAgICAgIDEJCTsgU2VyaWFsCisrCQkJIDYwNDgwMAkJOyBSZWZyZXNoCisrCQkJICA4NjQwMAkJOyBSZXRyeQorKwkJCTI0MTkyMDAJCTsgRXhwaXJlCisrCQkJICA4NjQwMCApCTsgTmVnYXRpdmUgQ2FjaGUgVFRMCisrOworK0AJSU4JTlMJbG9jYWxob3N0LgorZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLjI1NSBiaW5kLTkuMy4xL2NvbmYvZGIuMjU1CistLS0gYmluZC05LjMuMS5vcmlnL2NvbmYvZGIuMjU1CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9jb25mL2RiLjI1NQkyMDA1LTA3LTEwIDIyOjE0OjAwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxMiBAQAorKzsKKys7IEJJTkQgcmVzZXJ2ZSBkYXRhIGZpbGUgZm9yIGJyb2FkY2FzdCB6b25lCisrOworKyRUVEwJNjA0ODAwCisrQAlJTglTT0EJbG9jYWxob3N0LiByb290LmxvY2FsaG9zdC4gKAorKwkJCSAgICAgIDEJCTsgU2VyaWFsCisrCQkJIDYwNDgwMAkJOyBSZWZyZXNoCisrCQkJICA4NjQwMAkJOyBSZXRyeQorKwkJCTI0MTkyMDAJCTsgRXhwaXJlCisrCQkJIDYwNDgwMCApCTsgTmVnYXRpdmUgQ2FjaGUgVFRMCisrOworK0AJSU4JTlMJbG9jYWxob3N0LgorZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLmxvY2FsIGJpbmQtOS4zLjEvY29uZi9kYi5sb2NhbAorLS0tIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLmxvY2FsCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9jb25mL2RiLmxvY2FsCTIwMDUtMDctMTAgMjI6MTQ6MDAuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDEzIEBACisrOworKzsgQklORCBkYXRhIGZpbGUgZm9yIGxvY2FsIGxvb3BiYWNrIGludGVyZmFjZQorKzsKKyskVFRMCTYwNDgwMAorK0AJSU4JU09BCWxvY2FsaG9zdC4gcm9vdC5sb2NhbGhvc3QuICgKKysJCQkgICAgICAxCQk7IFNlcmlhbAorKwkJCSA2MDQ4MDAJCTsgUmVmcmVzaAorKwkJCSAgODY0MDAJCTsgUmV0cnkKKysJCQkyNDE5MjAwCQk7IEV4cGlyZQorKwkJCSA2MDQ4MDAgKQk7IE5lZ2F0aXZlIENhY2hlIFRUTAorKzsKKytACUlOCU5TCWxvY2FsaG9zdC4KKytACUlOCUEJMTI3LjAuMC4xCitkaWZmIC11ck4gYmluZC05LjMuMS5vcmlnL2NvbmYvZGIucm9vdCBiaW5kLTkuMy4xL2NvbmYvZGIucm9vdAorLS0tIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLnJvb3QJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBiaW5kLTkuMy4xL2NvbmYvZGIucm9vdAkyMDA1LTA3LTEwIDIyOjE0OjAwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw0NSBAQAorKworKzsgPDw+PiBEaUcgOS4yLjMgPDw+PiBucyAuIEBhLnJvb3Qtc2VydmVycy5uZXQuCisrOzsgZ2xvYmFsIG9wdGlvbnM6ICBwcmludGNtZAorKzs7IEdvdCBhbnN3ZXI6CisrOzsgLT4+SEVBREVSPDwtIG9wY29kZTogUVVFUlksIHN0YXR1czogTk9FUlJPUiwgaWQ6IDE4OTQ0CisrOzsgZmxhZ3M6IHFyIGFhIHJkOyBRVUVSWTogMSwgQU5TV0VSOiAxMywgQVVUSE9SSVRZOiAwLCBBRERJVElPTkFMOiAxMworKworKzs7IFFVRVNUSU9OIFNFQ1RJT046CisrOy4JCQkJSU4JTlMKKysKKys7OyBBTlNXRVIgU0VDVElPTjoKKysuCQkJNTE4NDAwCUlOCU5TCUEuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUIuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUMuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUQuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUUuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUYuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUcuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUguUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUkuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUouUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUsuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUwuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCU0uUk9PVC1TRVJWRVJTLk5FVC4KKysKKys7OyBBRERJVElPTkFMIFNFQ1RJT046CisrQS5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTk4LjQxLjAuNAorK0IuUk9PVC1TRVJWRVJTLk5FVC4JMzYwMDAwMAlJTglBCTE5Mi4yMjguNzkuMjAxCisrQy5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTkyLjMzLjQuMTIKKytELlJPT1QtU0VSVkVSUy5ORVQuCTM2MDAwMDAJSU4JQQkxMjguOC4xMC45MAorK0UuUk9PVC1TRVJWRVJTLk5FVC4JMzYwMDAwMAlJTglBCTE5Mi4yMDMuMjMwLjEwCisrRi5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTkyLjUuNS4yNDEKKytHLlJPT1QtU0VSVkVSUy5ORVQuCTM2MDAwMDAJSU4JQQkxOTIuMTEyLjM2LjQKKytILlJPT1QtU0VSVkVSUy5ORVQuCTM2MDAwMDAJSU4JQQkxMjguNjMuMi41MworK0kuUk9PVC1TRVJWRVJTLk5FVC4JMzYwMDAwMAlJTglBCTE5Mi4zNi4xNDguMTcKKytKLlJPT1QtU0VSVkVSUy5ORVQuCTM2MDAwMDAJSU4JQQkxOTIuNTguMTI4LjMwCisrSy5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTkzLjAuMTQuMTI5CisrTC5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTk4LjMyLjY0LjEyCisrTS5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMjAyLjEyLjI3LjMzCisrCisrOzsgUXVlcnkgdGltZTogODEgbXNlYworKzs7IFNFUlZFUjogMTk4LjQxLjAuNCM1MyhhLnJvb3Qtc2VydmVycy5uZXQuKQorKzs7IFdIRU46IFN1biBGZWIgIDEgMTE6Mjc6MTQgMjAwNAorKzs7IE1TRyBTSVpFICByY3ZkOiA0MzYKKysKK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvY29uZi9uYW1lZC5jb25mIGJpbmQtOS4zLjEvY29uZi9uYW1lZC5jb25mCistLS0gYmluZC05LjMuMS5vcmlnL2NvbmYvbmFtZWQuY29uZgkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvY29uZi9uYW1lZC5jb25mCTIwMDUtMDctMTAgMjI6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDQ5IEBACisrLy8gVGhpcyBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBCSU5EIEROUyBzZXJ2ZXIgbmFtZWQuCisrLy8KKysvLyBJZiB5b3UgYXJlIGp1c3QgYWRkaW5nIHpvbmVzLCBwbGVhc2UgZG8gdGhhdCBpbiAvZXRjL2JpbmQvbmFtZWQuY29uZi5sb2NhbAorKworK2luY2x1ZGUgIi9ldGMvYmluZC9uYW1lZC5jb25mLm9wdGlvbnMiOworKworKy8vIHByaW1lIHRoZSBzZXJ2ZXIgd2l0aCBrbm93bGVkZ2Ugb2YgdGhlIHJvb3Qgc2VydmVycworK3pvbmUgIi4iIHsKKysJdHlwZSBoaW50OworKwlmaWxlICIvZXRjL2JpbmQvZGIucm9vdCI7CisrfTsKKysKKysvLyBiZSBhdXRob3JpdGF0aXZlIGZvciB0aGUgbG9jYWxob3N0IGZvcndhcmQgYW5kIHJldmVyc2Ugem9uZXMsIGFuZCBmb3IKKysvLyBicm9hZGNhc3Qgem9uZXMgYXMgcGVyIFJGQyAxOTEyCisrCisrem9uZSAibG9jYWxob3N0IiB7CisrCXR5cGUgbWFzdGVyOworKwlmaWxlICIvZXRjL2JpbmQvZGIubG9jYWwiOworK307CisrCisrem9uZSAiMTI3LmluLWFkZHIuYXJwYSIgeworKwl0eXBlIG1hc3RlcjsKKysJZmlsZSAiL2V0Yy9iaW5kL2RiLjEyNyI7CisrfTsKKysKKyt6b25lICIwLmluLWFkZHIuYXJwYSIgeworKwl0eXBlIG1hc3RlcjsKKysJZmlsZSAiL2V0Yy9iaW5kL2RiLjAiOworK307CisrCisrem9uZSAiMjU1LmluLWFkZHIuYXJwYSIgeworKwl0eXBlIG1hc3RlcjsKKysJZmlsZSAiL2V0Yy9iaW5kL2RiLjI1NSI7CisrfTsKKysKKysvLyB6b25lICJjb20iIHsgdHlwZSBkZWxlZ2F0aW9uLW9ubHk7IH07CisrLy8gem9uZSAibmV0IiB7IHR5cGUgZGVsZWdhdGlvbi1vbmx5OyB9OworKworKy8vIEZyb20gdGhlIHJlbGVhc2Ugbm90ZXM6CisrLy8gIEJlY2F1c2UgbWFueSBvZiBvdXIgdXNlcnMgYXJlIHVuY29tZm9ydGFibGUgcmVjZWl2aW5nIHVuZGVsZWdhdGVkIGFuc3dlcnMKKysvLyAgZnJvbSByb290IG9yIHRvcCBsZXZlbCBkb21haW5zLCBvdGhlciB0aGFuIGEgZmV3IGZvciB3aG9tIHRoYXQgYmVoYXZpb3VyCisrLy8gIGhhcyBiZWVuIHRydXN0ZWQgYW5kIGV4cGVjdGVkIGZvciBxdWl0ZSBzb21lIGxlbmd0aCBvZiB0aW1lLCB3ZSBoYXZlIG5vdworKy8vICBpbnRyb2R1Y2VkIHRoZSAicm9vdC1kZWxlZ2F0aW9ucy1vbmx5IiBmZWF0dXJlIHdoaWNoIGFwcGxpZXMgZGVsZWdhdGlvbi1vbmx5CisrLy8gIGxvZ2ljIHRvIGFsbCB0b3AgbGV2ZWwgZG9tYWlucywgYW5kIHRvIHRoZSByb290IGRvbWFpbi4gIEFuIGV4Y2VwdGlvbiBsaXN0CisrLy8gIHNob3VsZCBiZSBzcGVjaWZpZWQsIGluY2x1ZGluZyAiTVVTRVVNIiBhbmQgIkRFIiwgYW5kIGFueSBvdGhlciB0b3AgbGV2ZWwKKysvLyAgZG9tYWlucyBmcm9tIHdob20gdW5kZWxlZ2F0ZWQgcmVzcG9uc2VzIGFyZSBleHBlY3RlZCBhbmQgdHJ1c3RlZC4KKysvLyByb290LWRlbGVnYXRpb24tb25seSBleGNsdWRlIHsgIkRFIjsgIk1VU0VVTSI7IH07CisrCisraW5jbHVkZSAiL2V0Yy9iaW5kL25hbWVkLmNvbmYubG9jYWwiOworZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9jb25mL25hbWVkLmNvbmYubG9jYWwgYmluZC05LjMuMS9jb25mL25hbWVkLmNvbmYubG9jYWwKKy0tLSBiaW5kLTkuMy4xLm9yaWcvY29uZi9uYW1lZC5jb25mLmxvY2FsCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9jb25mL25hbWVkLmNvbmYubG9jYWwJMjAwNS0wNy0xMCAyMjoxNDowNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsOCBAQAorKy8vCisrLy8gRG8gYW55IGxvY2FsIGNvbmZpZ3VyYXRpb24gaGVyZQorKy8vCisrCisrLy8gQ29uc2lkZXIgYWRkaW5nIHRoZSAxOTE4IHpvbmVzIGhlcmUsIGlmIHRoZXkgYXJlIG5vdCB1c2VkIGluIHlvdXIKKysvLyBvcmdhbml6YXRpb24KKysvL2luY2x1ZGUgIi9ldGMvYmluZC96b25lcy5yZmMxOTE4IjsKKysKK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvY29uZi9uYW1lZC5jb25mLm9wdGlvbnMgYmluZC05LjMuMS9jb25mL25hbWVkLmNvbmYub3B0aW9ucworLS0tIGJpbmQtOS4zLjEub3JpZy9jb25mL25hbWVkLmNvbmYub3B0aW9ucwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvY29uZi9uYW1lZC5jb25mLm9wdGlvbnMJMjAwNS0wNy0xMCAyMjoxNDowNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMjQgQEAKKytvcHRpb25zIHsKKysJZGlyZWN0b3J5ICIvdmFyL2NhY2hlL2JpbmQiOworKworKwkvLyBJZiB0aGVyZSBpcyBhIGZpcmV3YWxsIGJldHdlZW4geW91IGFuZCBuYW1lc2VydmVycyB5b3Ugd2FudAorKwkvLyB0byB0YWxrIHRvLCB5b3UgbWlnaHQgbmVlZCB0byB1bmNvbW1lbnQgdGhlIHF1ZXJ5LXNvdXJjZQorKwkvLyBkaXJlY3RpdmUgYmVsb3cuICBQcmV2aW91cyB2ZXJzaW9ucyBvZiBCSU5EIGFsd2F5cyBhc2tlZAorKwkvLyBxdWVzdGlvbnMgdXNpbmcgcG9ydCA1MywgYnV0IEJJTkQgOC4xIGFuZCBsYXRlciB1c2UgYW4gdW5wcml2aWxlZ2VkCisrCS8vIHBvcnQgYnkgZGVmYXVsdC4KKysKKysJLy8gcXVlcnktc291cmNlIGFkZHJlc3MgKiBwb3J0IDUzOworKworKwkvLyBJZiB5b3VyIElTUCBwcm92aWRlZCBvbmUgb3IgbW9yZSBJUCBhZGRyZXNzZXMgZm9yIHN0YWJsZSAKKysJLy8gbmFtZXNlcnZlcnMsIHlvdSBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGVtIGFzIGZvcndhcmRlcnMuICAKKysJLy8gVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgYmxvY2ssIGFuZCBpbnNlcnQgdGhlIGFkZHJlc3NlcyByZXBsYWNpbmcgCisrCS8vIHRoZSBhbGwtMCdzIHBsYWNlaG9sZGVyLgorKworKwkvLyBmb3J3YXJkZXJzIHsKKysJLy8gCTAuMC4wLjA7CisrCS8vIH07CisrCisrCWF1dGgtbnhkb21haW4gbm87ICAgICMgY29uZm9ybSB0byBSRkMxMDM1CisrCisrfTsKKysKK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvY29uZi96b25lcy5yZmMxOTE4IGJpbmQtOS4zLjEvY29uZi96b25lcy5yZmMxOTE4CistLS0gYmluZC05LjMuMS5vcmlnL2NvbmYvem9uZXMucmZjMTkxOAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvY29uZi96b25lcy5yZmMxOTE4CTIwMDUtMDctMTAgMjI6MTQ6MTAuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDIwIEBACisrem9uZSAiMTAuaW4tYWRkci5hcnBhIiAgICAgIHsgdHlwZSBtYXN0ZXI7IGZpbGUgIi9ldGMvYmluZC9kYi5lbXB0eSI7IH07CisrIAorK3pvbmUgIjE2LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjE3LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjE4LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjE5LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjIwLjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjIxLjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjIyLjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjIzLjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjI0LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjI1LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjI2LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjI3LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjI4LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjI5LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjMwLjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjMxLjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworKworK3pvbmUgIjE2OC4xOTIuaW4tYWRkci5hcnBhIiB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9pbml0LmQgYmluZC05LjMuMS9pbml0LmQKKy0tLSBiaW5kLTkuMy4xLm9yaWcvaW5pdC5kCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9pbml0LmQJMjAwNS0wNy0xMCAyMzowOTo1OC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNzAgQEAKKysjIS9iaW4vc2gKKysKKytQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisrCisrIyBmb3IgYSBjaHJvb3RlZCBzZXJ2ZXI6ICItdSBiaW5kIC10IC92YXIvbGliL25hbWVkIgorKyMgRG9uJ3QgbW9kaWZ5IHRoaXMgbGluZSwgY2hhbmdlIG9yIGNyZWF0ZSAvZXRjL2RlZmF1bHQvYmluZDkuCisrT1BUSU9OUz0iIgorKworK3Rlc3QgLWYgL2V0Yy9kZWZhdWx0L2JpbmQ5ICYmIC4gL2V0Yy9kZWZhdWx0L2JpbmQ5CisrCisrdGVzdCAteCAvdXNyL3NiaW4vcm5kYyB8fCBleGl0IDAKKysKKytjYXNlICIkMSIgaW4KKysgICAgc3RhcnQpCisrCWVjaG8gLW4gIlN0YXJ0aW5nIGRvbWFpbiBuYW1lIHNlcnZpY2U6IG5hbWVkIgorKworKwltb2Rwcm9iZSBjYXBhYmlsaXR5ID4vZGV2L251bGwgMj4mMSB8fCB0cnVlCisrCWlmIFsgISAtZiAvZXRjL2JpbmQvcm5kYy5rZXkgXTsgdGhlbgorKwkgICAgL3Vzci9zYmluL3JuZGMtY29uZmdlbiAtYSAtYiA1MTIgLXIgL2Rldi91cmFuZG9tCisrCSAgICBjaG1vZCAwNjQwIC9ldGMvYmluZC9ybmRjLmtleQorKwlmaQorKwlpZiBbIC1mIC92YXIvcnVuL25hbWVkL25hbWVkLnBpZCBdOyB0aGVuCisrCSAgICBwcyBgY2F0IC92YXIvcnVuL25hbWVkL25hbWVkLnBpZGAgPiAvZGV2L251bGwgJiYgZXhpdCAxCisrCWZpCisrCisrCSMgZGlycyB1bmRlciAvdmFyL3J1biBjYW4gZ28gYXdheSBvbiByZWJvb3RzLgorKwlta2RpciAtcCAvdmFyL3J1bi9uYW1lZAorKwlta2RpciAtcCAvdmFyL2NhY2hlL2JpbmQKKysJY2htb2QgNzc1IC92YXIvcnVuL25hbWVkCisrCWNob3duIHJvb3Q6YmluZCAvdmFyL3J1bi9uYW1lZCA+L2Rldi9udWxsIDI+JjEgfHwgdHJ1ZQorKworKwlpZiBbICEgLXggL3Vzci9zYmluL25hbWVkIF07IHRoZW4KKysJICAgIGVjaG8gIm5hbWVkIGJpbmFyeSBtaXNzaW5nIC0gbm90IHN0YXJ0aW5nIgorKwkgICAgZXhpdCAxCisrCWZpCisrCWlmIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLWV4ZWMgL3Vzci9zYmluL25hbWVkIFwKKysJCS0tcGlkZmlsZSAvdmFyL3J1bi9uYW1lZC9uYW1lZC5waWQgLS0gJE9QVElPTlM7IHRoZW4KKysJICAgIGlmIFsgLXggL3NiaW4vcmVzb2x2Y29uZiBdIDsgdGhlbgorKwkJZWNobyAibmFtZXNlcnZlciAxMjcuMC4wLjEiIHwgL3NiaW4vcmVzb2x2Y29uZiAtYSBsbworKwkgICAgZmkKKysJZmkKKysJZWNobyAiLiIJCisrICAgIDs7CisrCisrICAgIHN0b3ApCisrCWVjaG8gLW4gIlN0b3BwaW5nIGRvbWFpbiBuYW1lIHNlcnZpY2U6IG5hbWVkIgorKwlpZiBbIC14IC9zYmluL3Jlc29sdmNvbmYgXTsgdGhlbgorKwkgICAgL3NiaW4vcmVzb2x2Y29uZiAtZCBsbworKwlmaQorKwkvdXNyL3NiaW4vcm5kYyBzdG9wID4vZGV2L251bGwgMj4mMQorKwllY2hvICIuIgkKKysgICAgOzsKKysKKysgICAgcmVsb2FkKQorKwkvdXNyL3NiaW4vcm5kYyByZWxvYWQKKysgICAgOzsKKysKKysgICAgcmVzdGFydHxmb3JjZS1yZWxvYWQpCisrCSQwIHN0b3AKKysJc2xlZXAgMgorKwkkMCBzdGFydAorKyAgICA7OworKyAgICAKKysgICAgKikKKysJZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kL2JpbmQge3N0YXJ0fHN0b3B8cmVsb2FkfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIgPiYyCisrCWV4aXQgMQorKyAgICA7OworK2VzYWMKKysKKytleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvZG9udC10ZXN0LW9uLWhvc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2RvbnQtdGVzdC1vbi1ob3N0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ODlkNmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2RvbnQtdGVzdC1vbi1ob3N0LnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGJpbmQtOS45LjUvYmluL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYmluZC05LjkuNS5vcmlnL2Jpbi9NYWtlZmlsZS5pbgorKysrIGJpbmQtOS45LjUvYmluL01ha2VmaWxlLmluCitAQCAtMTksNyArMTksNyBAQCBzcmNkaXIgPQlAc3JjZGlyQAorIFZQQVRIID0JCUBzcmNkaXJACisgdG9wX3NyY2RpciA9CUB0b3Bfc3JjZGlyQAorIAorLVNVQkRJUlMgPQluYW1lZCBybmRjIGRpZyBkZWx2IGRuc3NlYyB0b29scyB0ZXN0cyBuc3VwZGF0ZSBcCisrU1VCRElSUyA9CW5hbWVkIHJuZGMgZGlnIGRlbHYgZG5zc2VjIHRvb2xzIG5zdXBkYXRlIFwKKyAJCWNoZWNrIGNvbmZnZW4gQFBZVEhPTl9UT09MU0AgQFBLQ1MxMV9UT09MU0AKKyBUQVJHRVRTID0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvZ2VuZXJhdGUtcm5kYy1rZXkuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2dlbmVyYXRlLXJuZGMta2V5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMjAxMjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2dlbmVyYXRlLXJuZGMta2V5LnNoCkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL3NoCisKK2lmIFsgISAtcyAvZXRjL2JpbmQvcm5kYy5rZXkgXTsgdGhlbgorICAgIGVjaG8gLW4gIkdlbmVyYXRpbmcgL2V0Yy9iaW5kL3JuZGMua2V5OiIKKyAgICAvdXNyL3NiaW4vcm5kYy1jb25mZ2VuIC1hIC1iIDUxMiAtciAvZGV2L3VyYW5kb20KKyAgICBjaG1vZCAwNjQwIC9ldGMvYmluZC9ybmRjLmtleQorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvaW5pdC5kLWFkZC1zdXBwb3J0LWZvci1yZWFkLW9ubHktcm9vdGZzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9pbml0LmQtYWRkLXN1cHBvcnQtZm9yLXJlYWQtb25seS1yb290ZnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFkYjk1ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvaW5pdC5kLWFkZC1zdXBwb3J0LWZvci1yZWFkLW9ubHktcm9vdGZzLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK1N1YmplY3Q6IGluaXQuZDogYWRkIHN1cHBvcnQgZm9yIHJlYWQtb25seSByb290ZnMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgaW5pdC5kIHwgICA0MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDQwIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2luaXQuZCBiL2luaXQuZAoraW5kZXggMDExMWVkNC4uMjQ2NzdjOCAxMDA2NDQKKy0tLSBhL2luaXQuZAorKysrIGIvaW5pdC5kCitAQCAtNiw4ICs2LDQ4IEBAIFBBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKyAjIERvbid0IG1vZGlmeSB0aGlzIGxpbmUsIGNoYW5nZSBvciBjcmVhdGUgL2V0Yy9kZWZhdWx0L2JpbmQ5LgorIE9QVElPTlM9IiIKKyAKKyt0ZXN0IC1mIC9ldGMvZGVmYXVsdC9yY1MgJiYgLiAvZXRjL2RlZmF1bHQvcmNTCisgdGVzdCAtZiAvZXRjL2RlZmF1bHQvYmluZDkgJiYgLiAvZXRjL2RlZmF1bHQvYmluZDkKKyAKKysjIFRoaXMgZnVuY3Rpb24gaXMgaGVyZSBiZWNhdXNlIGl0J3MgcG9zc2libGUgdGhhdCAvdmFyIGFuZCAvIGFyZSBvbiBkaWZmZXJlbnQgcGFydGl0aW9ucy4KKytpc19vbl9yZWFkX29ubHlfcGFydGl0aW9uICgpIHsKKysgICAgRElSRUNUT1JZPSQxCisrICAgIGRpcj1gcmVhZGxpbmsgLWYgJERJUkVDVE9SWWAKKysgICAgd2hpbGUgdHJ1ZTsgZG8KKysJaWYgWyAhIC1kICIkZGlyIiBdOyB0aGVuCisrCSAgICBlY2hvICJFUlJPUjogJGRpciBpcyBub3QgYSBkaXJlY3RvcnkiCisrCSAgICBleGl0IDEKKysJZWxzZQorKwkgICAgZm9yIGZsYWcgaW4gYGF3ayAtdiBkaXI9JGRpciAneyBpZiAoJDIgPT0gZGlyKSB7IHByaW50ICJGT1VORCI7IHNwbGl0KCQ0LEZMQUdTLCIsIikgfSB9OyBcCisrCQlFTkQgeyBmb3IgKGYgaW4gRkxBR1MpIHByaW50IEZMQUdTW2ZdIH0nIDwgL3Byb2MvbW91bnRzYDsgZG8KKysJCVsgIiRmbGFnIiA9ICJGT1VORCIgXSAmJiBwYXJ0aXRpb249InJlYWQtd3JpdGUiCisrCQlbICIkZmxhZyIgPSAicm8iIF0gJiYgeyBwYXJ0aXRpb249InJlYWQtb25seSI7IGJyZWFrOyB9CisrCSAgICBkb25lCisrCSAgICBpZiBbICIkZGlyIiA9ICIvIiAtbyAtbiAiJHBhcnRpdGlvbiIgXTsgdGhlbgorKwkJYnJlYWsKKysJICAgIGVsc2UKKysJCWRpcj1gZGlybmFtZSAkZGlyYAorKwkgICAgZmkKKysJZmkKKysgICAgZG9uZQorKyAgICBbICIkcGFydGl0aW9uIiA9ICJyZWFkLW9ubHkiIF0gJiYgZWNobyAieWVzIiB8fCBlY2hvICJubyIKKyt9CisrCisrYmluZF9tb3VudCAoKSB7CisrICAgIG9sZGRpcj0kMQorKyAgICBuZXdkaXI9JDIKKysgICAgbWtkaXIgLXAgJG9sZGRpcgorKyAgICBjcCAtYSAkbmV3ZGlyLyogJG9sZGRpcgorKyAgICBtb3VudCAtLWJpbmQgJG9sZGRpciAkbmV3ZGlyCisrfQorKworKyMgRGVhbCB3aXRoIHJlYWQtb25seSByb290ZnMKKytpZiBbICIkUk9PVEZTX1JFQURfT05MWSIgPSAieWVzIiBdOyB0aGVuCisrICAgIFsgIiRWRVJCT1NFIiAhPSAibm8iIF0gJiYgZWNobyAiV0FSTjogc3RhcnQgYmluZCBzZXJ2aWNlIGluIHJlYWQtb25seSByb290ZnMiCisrICAgIFsgYGlzX29uX3JlYWRfb25seV9wYXJ0aXRpb24gL2V0Yy9iaW5kYCA9ICJ5ZXMiIF0gJiYgYmluZF9tb3VudCAvdmFyL3ZvbGF0aWxlL2JpbmQvZXRjIC9ldGMvYmluZAorKyAgICBbIGBpc19vbl9yZWFkX29ubHlfcGFydGl0aW9uIC92YXIvbmFtZWRgID0gInllcyIgXSAmJiBiaW5kX21vdW50IC92YXIvdm9sYXRpbGUvYmluZC9uYW1lZCAvdmFyL25hbWVkCisrZmkKKysKKyB0ZXN0IC14IC91c3Ivc2Jpbi9ybmRjIHx8IGV4aXQgMAorIAorIGNhc2UgIiQxIiBpbgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvbWFrZS1ldGMtaW5pdGQtYmluZC1zdG9wLXdvcmsucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL21ha2UtZXRjLWluaXRkLWJpbmQtc3RvcC13b3JrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NmYzZTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL21ha2UtZXRjLWluaXRkLWJpbmQtc3RvcC13b3JrLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK2JpbmQ6IG1ha2UgIi9ldGMvaW5pdC5kL2JpbmQgc3RvcCIgd29yaworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0FkZCBzb21lIGNvbmZpZ3VyYXRpb25zLCBtYWtlIHJuZGMgY29tbWFuZCBiZSBhYmxlIHRvIGNvbnRyb2xzCit0aGUgbmFtZWQgZGFlbW9uLgorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25mL25hbWVkLmNvbmYgfCAgICA1ICsrKysrCisgY29uZi9ybmRjLmNvbmYgIHwgICAgNSArKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgY29uZi9ybmRjLmNvbmYKKworZGlmZiAtLWdpdCBhL2NvbmYvbmFtZWQuY29uZiBiL2NvbmYvbmFtZWQuY29uZgoraW5kZXggOTU4MjljZi4uYzg4OTllNyAxMDA2NDQKKy0tLSBhL2NvbmYvbmFtZWQuY29uZgorKysrIGIvY29uZi9uYW1lZC5jb25mCitAQCAtNDcsMyArNDcsOCBAQCB6b25lICIyNTUuaW4tYWRkci5hcnBhIiB7CisgLy8gcm9vdC1kZWxlZ2F0aW9uLW9ubHkgZXhjbHVkZSB7ICJERSI7ICJNVVNFVU0iOyB9OworIAorIGluY2x1ZGUgIi9ldGMvYmluZC9uYW1lZC5jb25mLmxvY2FsIjsKKytpbmNsdWRlICIvZXRjL2JpbmQvcm5kYy5rZXkiIDsKKytjb250cm9scyB7CisrCWluZXQgMTI3LjAuMC4xIGFsbG93IHsgbG9jYWxob3N0OyB9CisrCWtleXMgeyBybmRjLWtleTsgfTsKKyt9OworZGlmZiAtLWdpdCBhL2NvbmYvcm5kYy5jb25mIGIvY29uZi9ybmRjLmNvbmYKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5hMGI0ODFkCistLS0gL2Rldi9udWxsCisrKysgYi9jb25mL3JuZGMuY29uZgorQEAgLTAsMCArMSw1IEBACisraW5jbHVkZSAiL2V0Yy9iaW5kL3JuZGMua2V5IjsKKytvcHRpb25zIHsKKysJZGVmYXVsdC1zZXJ2ZXIgIGxvY2FsaG9zdDsKKysJZGVmYXVsdC1rZXkgICAgIHJuZGMta2V5OworK307CisKKy0tIAorMS43LjUuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL21pcHMxLW5vdC1zdXBwb3J0LW9wY29kZS5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9taXBzMS1ub3Qtc3VwcG9ydC1vcGNvZGUuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTMwNzk2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9taXBzMS1ub3Qtc3VwcG9ydC1vcGNvZGUuZGlmZgpAQCAtMCwwICsxLDEwNCBAQAorYmluZDogcG9ydCBhIHBhdGNoIHRvIGZpeCBhIGJ1aWxkIGZhaWx1cmUKKworbWlwczEgZG9lcyBub3Qgc3VwcG9ydCBsbCBhbmQgc2MgaW5zdHJ1Y3Rpb25zLCBhbmQgbGVhZCB0byBiZWxvdyBlcnJvciwgbm93Cit3ZSBwb3J0IGEgcGF0Y2ggZnJvbSBkZWJpYW4gdG8gZml4IGl0CitbaHR0cDovL3NlY3VyaXR5LmRlYmlhbi5vcmcvZGViaWFuLXNlY3VyaXR5L3Bvb2wvdXBkYXRlcy9tYWluL2IvYmluZDkvYmluZDlfOS44LjQuZGZzZy5QMS02K25tdTIrZGViN3UxLmRpZmYuZ3pdCisKK3wge3N0YW5kYXJkIGlucHV0fTogQXNzZW1ibGVyIG1lc3NhZ2VzOgorfCB7c3RhbmRhcmQgaW5wdXR9OjQ3OiBFcnJvcjogT3Bjb2RlIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwcm9jZXNzb3I6IG1pcHMxIChtaXBzMSkgYGxsICQzLDAoJDYpJworfCB7c3RhbmRhcmQgaW5wdXR9OjUwOiBFcnJvcjogT3Bjb2RlIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwcm9jZXNzb3I6IG1pcHMxIChtaXBzMSkgYHNjICQzLDAoJDYpJworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorCistLS0gYmluZDktOS44LjQuZGZzZy5QMS5vcmlnL2xpYi9pc2MvbWlwcy9pbmNsdWRlL2lzYy9hdG9taWMuaAorKysrIGJpbmQ5LTkuOC40LmRmc2cuUDEvbGliL2lzYy9taXBzL2luY2x1ZGUvaXNjL2F0b21pYy5oCitAQCAtMzEsMTggKzMxLDIwIEBACisgaXNjX2F0b21pY194YWRkKGlzY19pbnQzMl90ICpwLCBpbnQgdmFsKSB7CisgCWlzY19pbnQzMl90IG9yaWc7CisgCistCS8qIGFkZCBpcyBhIGNoZWF0LCBzaW5jZSBNSVBTIGhhcyBubyBtb3YgaW5zdHJ1Y3Rpb24gKi8KKy0JX19hc21fXyB2b2xhdGlsZSAoCistCSAgICAiMToiCistCSAgICAibGwgJDMsICUxXG4iCistCSAgICAiYWRkICUwLCAkMCwgJDNcbiIKKy0JICAgICJhZGQgJDMsICQzLCAlMlxuIgorLQkgICAgInNjICQzLCAlMVxuIgorLQkgICAgImJlcSAkMywgMCwgMWIiCistCSAgICA6ICI9JnIiKG9yaWcpCistCSAgICA6ICJtIigqcCksICJyIih2YWwpCistCSAgICA6ICJtZW1vcnkiLCAiJDMiCistCQkpOworKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisrCSIJLnNldAlwdXNoCQlcbiIKKysJIgkuc2V0CW1pcHMyCQlcbiIKKysJIgkuc2V0CW5vcmVvcmRlcglcbiIKKysJIgkuc2V0CW5vYXQJCVxuIgorKwkiMToJbGwJJDEsICUxCQlcbiIKKysJIglhZGR1CSUwLCAkMSwgJTIJXG4iCisrCSIJc2MJJTAsICUxCQlcbiIKKysJIgliZXF6CSUwLCAxYgkJXG4iCisrCSIJbW92ZQklMCwgJDEJCVxuIgorKwkiCS5zZXQJcG9wCQlcbiIKKysJOiAiPSZyIiAob3JpZyksICIrUiIgKCpwKQorKwk6ICJyIiAodmFsKQorKwk6ICJtZW1vcnkiKTsKKyAKKyAJcmV0dXJuIChvcmlnKTsKKyB9CitAQCAtNTIsMTYgKzU0LDcgQEAKKyAgKi8KKyBzdGF0aWMgaW5saW5lIHZvaWQKKyBpc2NfYXRvbWljX3N0b3JlKGlzY19pbnQzMl90ICpwLCBpc2NfaW50MzJfdCB2YWwpIHsKKy0JX19hc21fXyB2b2xhdGlsZSAoCistCSAgICAiMToiCistCSAgICAibGwgJDMsICUwXG4iCistCSAgICAiYWRkICQzLCAkMCwgJTFcbiIKKy0JICAgICJzYyAkMywgJTBcbiIKKy0JICAgICJiZXEgJDMsIDAsIDFiIgorLQkgICAgOgorLQkgICAgOiAibSIoKnApLCAiciIodmFsKQorLQkgICAgOiAibWVtb3J5IiwgIiQzIgorLQkJKTsKKysJKnAgPSB2YWw7CisgfQorIAorIC8qCitAQCAtNzIsMjAgKzY1LDIzIEBACisgc3RhdGljIGlubGluZSBpc2NfaW50MzJfdAorIGlzY19hdG9taWNfY21weGNoZyhpc2NfaW50MzJfdCAqcCwgaW50IGNtcHZhbCwgaW50IHZhbCkgeworIAlpc2NfaW50MzJfdCBvcmlnOworKwlpc2NfaW50MzJfdCB0bXA7CisgCistCV9fYXNtX18gdm9sYXRpbGUoCistCSAgICAiMToiCistCSAgICAibGwgJDMsICUxXG4iCistCSAgICAiYWRkICUwLCAkMCwgJDNcbiIKKy0JICAgICJibmUgJDMsICUyLCAyZlxuIgorLQkgICAgImFkZCAkMywgJDAsICUzXG4iCistCSAgICAic2MgJDMsICUxXG4iCistCSAgICAiYmVxICQzLCAwLCAxYlxuIgorLQkgICAgIjI6IgorLQkgICAgOiAiPSZyIihvcmlnKQorLQkgICAgOiAibSIoKnApLCAiciIoY21wdmFsKSwgInIiKHZhbCkKKy0JICAgIDogIm1lbW9yeSIsICIkMyIKKy0JCSk7CisrCV9fYXNtX18gX192b2xhdGlsZV9fICgKKysJIgkuc2V0CXB1c2gJCVxuIgorKwkiCS5zZXQJbWlwczIJCVxuIgorKwkiCS5zZXQJbm9yZW9yZGVyCVxuIgorKwkiCS5zZXQJbm9hdAkJXG4iCisrCSIxOglsbAkkMSwgJTEJCVxuIgorKwkiCWJuZQkkMSwgJTMsIDJmCVxuIgorKwkiCW1vdmUJJTIsICU0CQlcbiIKKysJIglzYwklMiwgJTEJCVxuIgorKwkiCWJlcXoJJTIsIDFiCQlcbiIKKysJIjI6CW1vdmUJJTAsICQxCQlcbiIKKysJIgkuc2V0CXBvcAkJXG4iCisrCTogIj0mciIob3JpZyksICIrUiIgKCpwKSwgIj1yIiAodG1wKQorKwk6ICJyIihjbXB2YWwpLCAiciIodmFsKQorKwk6ICJtZW1vcnkiKTsKKyAKKyAJcmV0dXJuIChvcmlnKTsKKyB9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL25hbWVkLnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL25hbWVkLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RhNTZlZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvbmFtZWQuc2VydmljZQpAQCAtMCwwICsxLDIyIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPUJlcmtlbGV5IEludGVybmV0IE5hbWUgRG9tYWluIChETlMpCitXYW50cz1uc3MtbG9va3VwLnRhcmdldAorQmVmb3JlPW5zcy1sb29rdXAudGFyZ2V0CitBZnRlcj1uZXR3b3JrLnRhcmdldAorCitbU2VydmljZV0KK1R5cGU9Zm9ya2luZworRW52aXJvbm1lbnRGaWxlPS0vZXRjL2RlZmF1bHQvYmluZDkKK1BJREZpbGU9L3J1bi9uYW1lZC9uYW1lZC5waWQKKworRXhlY1N0YXJ0UHJlPUBTQklORElSQC9nZW5lcmF0ZS1ybmRjLWtleS5zaAorRXhlY1N0YXJ0PUBTQklORElSQC9uYW1lZCAkT1BUSU9OUworCitFeGVjUmVsb2FkPUBCQVNFX0JJTkRJUkAvc2ggLWMgJ0BTQklORElSQC9ybmRjIHJlbG9hZCA+IC9kZXYvbnVsbCAyPiYxIHx8IEBCQVNFX0JJTkRJUkAva2lsbCAtSFVQICRNQUlOUElEJworCitFeGVjU3RvcD1AQkFTRV9CSU5ESVJAL3NoIC1jICdAU0JJTkRJUkAvcm5kYyBzdG9wID4gL2Rldi9udWxsIDI+JjEgfHwgQEJBU0VfQklORElSQC9raWxsIC1URVJNICRNQUlOUElEJworCitQcml2YXRlVG1wPXRydWUKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZF85LjEwLjItUDQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kXzkuMTAuMi1QNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmFlMjg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZF85LjEwLjItUDQuYmIKQEAgLTAsMCArMSwxMDIgQEAKK1NVTU1BUlkgPSAiSVNDIEludGVybmV0IERvbWFpbiBOYW1lIFNlcnZlciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuaXNjLm9yZy9zdy9iaW5kLyIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorCitMSUNFTlNFID0gIklTQyAmIEJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlSSUdIVDttZDU9MGE5NWY1MmEwYWI2YzVmNTJkZWRjOWE0NWU3YWJiM2YiCisKK0RFUEVORFMgPSAib3BlbnNzbCBsaWJjYXAiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmlzYy5vcmcvaXNjL2JpbmQ5LyR7UFZ9LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY29uZi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYWtlLWV0Yy1pbml0ZC1iaW5kLXN0b3Atd29yay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9taXBzMS1ub3Qtc3VwcG9ydC1vcGNvZGUuZGlmZiBcCisgICAgICAgICAgIGZpbGU6Ly9kb250LXRlc3Qtb24taG9zdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nZW5lcmF0ZS1ybmRjLWtleS5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9uYW1lZC5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL2JpbmQ5IFwKKyAgICAgICAgICAgZmlsZTovL2luaXQuZC1hZGQtc3VwcG9ydC1mb3ItcmVhZC1vbmx5LXJvb3Rmcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9iaW5kLWNvbmZnZW4tYnVpbGQtdW5peC5vLW9uY2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1idWlsZC11c2UtcGtnLWNvbmZpZy10by1maW5kLWxpYnhtbDIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYmluZC1lbnN1cmUtc2VhcmNoaW5nLWZvci1qc29uLWhlYWRlcnMtc2VhcmNoZXMtc3lzci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWdlbi5jLWV4dGVuZC1ESVJOQU1FU0laRS1mcm9tLTI1Ni10by01MTIucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4YjFmNTA2NDgzNzc1NmM5MzhlYWRjMTUzN2RlYzVjNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjMDBiMjFlYzFkZWYyMTI5NTdmMjhlZmU5ZDEwYWFjNTJkNmVjNTE1ZTg0ZmJmMmM0MjE0M2Y1ZDcxNDI5Y2I4IgorCitFTkFCTEVfSVBWNiA9ICItLWVuYWJsZS1pcHY2PSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICd5ZXMnLCAnbm8nLCBkKX0iCitFWFRSQV9PRUNPTkYgPSAiICR7RU5BQkxFX0lQVjZ9IC0td2l0aC1yYW5kb21kZXY9L2Rldi9yYW5kb20gLS1kaXNhYmxlLXRocmVhZHMgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtZGV2cG9sbCAtLWRpc2FibGUtZXBvbGwgLS13aXRoLWdvc3Q9bm8gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtZ3NzYXBpPW5vIC0td2l0aC1lY2RzYT15ZXMgXAorICAgICAgICAgICAgICAgICAtLXN5c2NvbmZkaXI9JHtzeXNjb25mZGlyfS9iaW5kIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLW9wZW5zc2w9JHtTVEFHSU5HX0xJQkRJUn0vLi4gXAorICAgICAgICAgICAgICAgIgoraW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLXJjLmQgc3lzdGVtZCB1c2VyYWRkIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHID89ICIiCitQQUNLQUdFQ09ORklHW2h0dHBzdGF0c10gPSAiLS13aXRoLWxpYnhtbDIsLS13aXRob3V0LWxpYnhtbDIsbGlieG1sMiIKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK1VTRVJBRERfUEFSQU1fJHtQTn0gPSAiLS1zeXN0ZW0gLS1ob21lIC92YXIvY2FjaGUvYmluZCAtLW5vLWNyZWF0ZS1ob21lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS11c2VyLWdyb3VwIGJpbmQiCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJiaW5kIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJuYW1lZC5zZXJ2aWNlIgorCitQQVJBTExFTF9NQUtFID0gIiIKKworUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uLWNvcmUiCitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorCitQQUNLQUdFX0JFRk9SRV9QTiArPSAiJHtQTn0tdXRpbHMiCitGSUxFU18ke1BOfS11dGlscyA9ICIke2JpbmRpcn0vaG9zdCAke2JpbmRpcn0vZGlnIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vaXNjLWNvbmZpZy5oIgorRklMRVNfJHtQTn0gKz0gIiR7c2JpbmRpcn0vZ2VuZXJhdGUtcm5kYy1rZXkuc2giCisKK2RvX2luc3RhbGxfcHJlcGVuZCgpIHsKKwkjIGNsZWFuIGhvc3QgcGF0aCBpbiBpc2MtY29uZmlnLnNoIGJlZm9yZSB0aGUgaGFyZGxpbmsgY3JlYXRlZAorCSMgYnkgIm1ha2UgaW5zdGFsbCI6CisJIyAgIGJpbmQ5LWNvbmZpZyAtPiBpc2MtY29uZmlnLnNoCisJc2VkIC1pIC1lICJzLCR7U1RBR0lOR19MSUJESVJ9LCR7bGliZGlyfSwiICR7Qn0vaXNjLWNvbmZpZy5zaAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlybSAiJHtEfSR7YmluZGlyfS9uc2xvb2t1cCIKKwlybSAiJHtEfSR7bWFuZGlyfS9tYW4xL25zbG9va3VwLjEiCisJcm1kaXIgIiR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1biIKKwlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAiJHtEfSR7bG9jYWxzdGF0ZWRpcn0iCisJaW5zdGFsbCAtZCAiJHtEfSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvYmluZCIKKwlpbnN0YWxsIC1kICIke0R9JHtzeXNjb25mZGlyfS9iaW5kIgorCWluc3RhbGwgLWQgIiR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZCIKKwlpbnN0YWxsIC1tIDY0NCAke1N9L2NvbmYvKiAiJHtEfSR7c3lzY29uZmRpcn0vYmluZC8iCisJaW5zdGFsbCAtbSA3NTUgIiR7U30vaW5pdC5kIiAiJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2JpbmQiCisJc2VkIC1pIC1lICcxcywjIS4qcHl0aG9uLCMhIC91c3IvYmluL2VudiBweXRob24sJyAke0R9JHtzYmluZGlyfS9kbnNzZWMtY292ZXJhZ2UgJHtEfSR7c2JpbmRpcn0vZG5zc2VjLWNoZWNrZHMKKworCSMgSW5zdGFsbCBzeXN0ZW1kIHJlbGF0ZWQgZmlsZXMKKwlpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL2JpbmQKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtbSA3NTUgJHtXT1JLRElSfS9nZW5lcmF0ZS1ybmRjLWtleS5zaCAke0R9JHtzYmluZGlyfQorCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9uYW1lZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBCQVNFX0JJTkRJUkAsJHtiYXNlX2JpbmRpcn0sZycgXAorCSAgICAgICAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyBcCisJICAgICAgICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL25hbWVkLnNlcnZpY2UKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdAorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2JpbmQ5ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKK30KKworQ09ORkZJTEVTXyR7UE59ID0gIiBcCisJJHtzeXNjb25mZGlyfS9iaW5kL25hbWVkLmNvbmYgXAorCSR7c3lzY29uZmRpcn0vYmluZC9uYW1lZC5jb25mLmxvY2FsIFwKKwkke3N5c2NvbmZkaXJ9L2JpbmQvbmFtZWQuY29uZi5vcHRpb25zIFwKKwkke3N5c2NvbmZkaXJ9L2JpbmQvZGIuMCBcCisJJHtzeXNjb25mZGlyfS9iaW5kL2RiLjEyNyBcCisJJHtzeXNjb25mZGlyfS9iaW5kL2RiLmVtcHR5IFwKKwkke3N5c2NvbmZkaXJ9L2JpbmQvZGIubG9jYWwgXAorCSR7c3lzY29uZmRpcn0vYmluZC9kYi5yb290IFwKKwkiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzljNDQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejUuaW5jCkBAIC0wLDAgKzEsMTA1IEBACitTVU1NQVJZID0gIkxpbnV4IEJsdWV0b290aCBTdGFjayBVc2VybGFuZCBWNSIKK0RFU0NSSVBUSU9OID0gIkxpbnV4IEJsdWV0b290aCBzdGFjayBWNSB1c2VybGFuZCBjb21wb25lbnRzLiAgVGhlc2UgaW5jbHVkZSBhIHN5c3RlbSBjb25maWd1cmF0aW9ucywgZGFlbW9ucywgdG9vbHMgYW5kIHN5c3RlbSBsaWJyYXJpZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ibHVlei5vcmciCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTEyZjg4NGQyYWUxZmY4N2MwOWU1YjdjY2MyYzRjYTdlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT1mYjUwNGI2N2M1MDMzMWZjNzg3MzRmZWQ5MGZiMGUwOSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbWFpbi5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjQ7bWQ1PTliYzU0YjkzY2Q3ZTE3YmYwM2Y1MjUxM2YzOWY5MjZlIgorREVQRU5EUyA9ICJ1ZGV2IGxpYnVzYiBkYnVzLWdsaWIgZ2xpYi0yLjAgbGliY2hlY2sgcmVhZGxpbmUiCitQUk9WSURFUyArPSAiYmx1ZXotaGNpZHVtcCIKK1JQUk9WSURFU18ke1BOfSArPSAiYmx1ZXotaGNpZHVtcCIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJibHVlejQiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJvYmV4LXByb2ZpbGVzIgorUEFDS0FHRUNPTkZJR1tvYmV4LXByb2ZpbGVzXSA9ICItLWVuYWJsZS1vYmV4LC0tZGlzYWJsZS1vYmV4LGxpYmljYWwiCitQQUNLQUdFQ09ORklHW2V4cGVyaW1lbnRhbF0gPSAiLS1lbmFibGUtZXhwZXJpbWVudGFsLC0tZGlzYWJsZS1leHBlcmltZW50YWwsIgorCitTUkNfVVJJID0gIlwKKyAgICAke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L2JsdWV0b290aC9ibHVlei0ke1BWfS50YXIueHogXAorICAgIGZpbGU6Ly9ibHVldG9vdGguY29uZiBcCisiCitTID0gIiR7V09SS0RJUn0vYmx1ZXotJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwa2djb25maWcgc3lzdGVtZAorCitFWFRSQV9PRUNPTkYgPSAiXAorICAtLWVuYWJsZS10b29scyBcCisgIC0tZGlzYWJsZS1jdXBzIFwKKyAgLS1lbmFibGUtdGVzdCBcCisgIC0tZW5hYmxlLWRhdGFmaWxlcyBcCisgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICctLWVuYWJsZS1zeXN0ZW1kJywgJy0tZGlzYWJsZS1zeXN0ZW1kJywgZCl9IFwKKyAgLS1lbmFibGUtbGlicmFyeSBcCisiCisKKyMgYmx1ZXo1IGJ1aWxkcyBhIGxhcmdlIG51bWJlciBvZiB1c2VmdWwgdXRpbGl0aWVzIGJ1dCBkb2VzIG5vdAorIyBpbnN0YWxsIHRoZW0uICBTcGVjaWZ5IHdoaWNoIG9uZXMgd2Ugd2FudCBwdXQgaW50byAke1BOfS1ub2luc3QtdG9vbHMuCitOT0lOU1RfVE9PTFNfUkVBRExJTkUgPz89ICIiCitOT0lOU1RfVE9PTFNfRVhQRVJJTUVOVEFMID8/PSAiIgorTk9JTlNUX1RPT0xTID0gIiBcCisgICAgJHtOT0lOU1RfVE9PTFNfUkVBRExJTkV9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdleHBlcmltZW50YWwnLCAnJHtOT0lOU1RfVE9PTFNfRVhQRVJJTUVOVEFMfScsICcnLCBkKX0gXAorIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2JsdWV0b290aC8KKwlpZiBbIC1mICR7U30vcHJvZmlsZXMvYXVkaW8vYXVkaW8uY29uZiBdOyB0aGVuCisJICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L3Byb2ZpbGVzL2F1ZGlvL2F1ZGlvLmNvbmYgJHtEfS8ke3N5c2NvbmZkaXJ9L2JsdWV0b290aC8KKwlmaQorCWlmIFsgLWYgJHtTfS9wcm9maWxlcy9uZXR3b3JrL25ldHdvcmsuY29uZiBdOyB0aGVuCisJICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L3Byb2ZpbGVzL25ldHdvcmsvbmV0d29yay5jb25mICR7RH0vJHtzeXNjb25mZGlyfS9ibHVldG9vdGgvCisJZmkKKwlpZiBbIC1mICR7U30vcHJvZmlsZXMvaW5wdXQvaW5wdXQuY29uZiBdOyB0aGVuCisJICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L3Byb2ZpbGVzL2lucHV0L2lucHV0LmNvbmYgJHtEfS8ke3N5c2NvbmZkaXJ9L2JsdWV0b290aC8KKwlmaQorCSMgYXRfY29uc29sZSBkb2Vzbid0IHJlYWxseSB3b3JrIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgT0UsIHNvIHB1bmNoIHNvbWUgbW9yZSBob2xlcyBzbyBwZW9wbGUgY2FuIGFjdHVhbGx5IHVzZSBCVAorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2JsdWV0b290aC5jb25mICR7RH0vJHtzeXNjb25mZGlyfS9kYnVzLTEvc3lzdGVtLmQvCisKKwkjIEluc3RhbGwgZGVzaXJlZCB0b29scyB0aGF0IHVwc3RyZWFtIGxlYXZlcyBpbiBidWlsZCBhcmVhCisgICAgICAgIGZvciBmIGluICR7Tk9JTlNUX1RPT0xTfSA7IGRvCisJICAgIGluc3RhbGwgLW0gNzU1ICR7Qn0vJGYgJHtEfS8ke2JpbmRpcn0KKwlkb25lCit9CisKK0FMTE9XX0VNUFRZX2xpYmFzb3VuZC1tb2R1bGUtYmx1ZXogPSAiMSIKK1BBQ0tBR0VTID0rICJsaWJhc291bmQtbW9kdWxlLWJsdWV6ICR7UE59LXRlc3R0b29scyAke1BOfS1vYmV4ICR7UE59LW5vaW5zdC10b29scyIKKworRklMRVNfbGliYXNvdW5kLW1vZHVsZS1ibHVleiA9ICIke2xpYmRpcn0vYWxzYS1saWIvbGliKi5zbyAke2RhdGFkaXJ9L2Fsc2EiCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2JsdWV0b290aC9wbHVnaW5zLyouc28gJHtiYXNlX2xpYmRpcn0vdWRldi8gJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2LyAke3N5c3RlbWRfdW5pdGRpcn0vICR7ZGF0YWRpcn0vZGJ1cy0xIgorRklMRVNfJHtQTn0tZGV2ICs9ICJcCisgICR7bGliZGlyfS9ibHVldG9vdGgvcGx1Z2lucy8qLmxhIFwKKyAgJHtsaWJkaXJ9L2Fsc2EtbGliLyoubGEgXAorIgorCitGSUxFU18ke1BOfS1vYmV4ID0gIiR7bGliZXhlY2Rpcn0vYmx1ZXRvb3RoL29iZXhkIFwKKyAgICAgICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL3N5c3RlbWQvdXNlci9vYmV4LnNlcnZpY2UgXAorICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zZXJ2aWNlcy9vcmcuYmx1ZXoub2JleC5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAgICAiCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tb2JleCA9ICJvYmV4LnNlcnZpY2UiCisKK0ZJTEVTXyR7UE59LXRlc3R0b29scyA9ICIke2xpYmRpcn0vYmx1ZXovdGVzdC8qIgorCitkZWYgZ2V0X25vaW5zdF90b29sc19wYXRocyAoZCwgYmIsIHRvb2xzKToKKyAgICBzID0gbGlzdCgpCisgICAgYmluZGlyID0gZC5nZXRWYXIoImJpbmRpciIsIFRydWUpCisgICAgZm9yIGJkcCBpbiB0b29scy5zcGxpdCgpOgorICAgICAgICBmID0gb3MucGF0aC5iYXNlbmFtZShiZHApCisgICAgICAgIHMuYXBwZW5kKCIlcy8lcyIgJSAoYmluZGlyLCBmKSkKKyAgICByZXR1cm4gIlxuIi5qb2luKHMpCisKK0ZJTEVTXyR7UE59LW5vaW5zdC10b29scyA9ICIke0BnZXRfbm9pbnN0X3Rvb2xzX3BhdGhzKGQsIGJiLCBkLmdldFZhcignTk9JTlNUX1RPT0xTJywgVHJ1ZSkpfSIKKworRklMRVNfJHtQTn0tZGJnICs9ICJcCisgICR7bGliZXhlY2Rpcn0vYmx1ZXRvb3RoLy5kZWJ1ZyBcCisgICR7bGliZGlyfS9ibHVldG9vdGgvcGx1Z2lucy8uZGVidWcgXAorICAke2xpYmRpcn0vKi8uZGVidWcgXAorICAqL3VkZXYvLmRlYnVnIFwKKyAgKi8qL3VkZXYvLmRlYnVnIFwKKyAgIgorCitSREVQRU5EU18ke1BOfS10ZXN0dG9vbHMgKz0gInB5dGhvbiBweXRob24tZGJ1cyBweXRob24tcHlnb2JqZWN0IgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiYmx1ZXRvb3RoLnNlcnZpY2UiCisKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejUvYmx1ZXRvb3RoLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZXo1L2JsdWV6NS9ibHVldG9vdGguY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjg0NWJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejUvYmx1ZXRvb3RoLmNvbmYKQEAgLTAsMCArMSwxNyBAQAorPCEtLSBUaGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBzcGVjaWZpZXMgdGhlIHJlcXVpcmVkIHNlY3VyaXR5IHBvbGljaWVzCisgICAgIGZvciBCbHVldG9vdGggY29yZSBkYWVtb24gdG8gd29yay4gLS0+CisKKzwhRE9DVFlQRSBidXNjb25maWcgUFVCTElDICItLy9mcmVlZGVza3RvcC8vRFREIEQtQlVTIEJ1cyBDb25maWd1cmF0aW9uIDEuMC8vRU4iCisgImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3N0YW5kYXJkcy9kYnVzLzEuMC9idXNjb25maWcuZHRkIj4KKzxidXNjb25maWc+CisKKyAgPCEtLSAuLi9zeXN0ZW0uY29uZiBoYXZlIGRlbmllZCBldmVyeXRoaW5nLCBzbyB3ZSBqdXN0IHB1bmNoIHNvbWUgaG9sZXMgLS0+CisKKyAgPHBvbGljeSBjb250ZXh0PSJkZWZhdWx0Ij4KKyAgICA8YWxsb3cgb3duPSJvcmcuYmx1ZXoiLz4KKyAgICA8YWxsb3cgc2VuZF9kZXN0aW5hdGlvbj0ib3JnLmJsdWV6Ii8+CisgICAgPGFsbG93IHNlbmRfaW50ZXJmYWNlPSJvcmcuYmx1ZXouQWdlbnQxIi8+CisgICAgPGFsbG93IHNlbmRfdHlwZT0ibWV0aG9kX2NhbGwiLz4KKyAgPC9wb2xpY3k+CisKKzwvYnVzY29uZmlnPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejVfNS4zMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1XzUuMzMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNjNzM5NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1XzUuMzMuYmIKQEAgLTAsMCArMSw1MiBAQAorcmVxdWlyZSBibHVlejUuaW5jCitTUkNfVVJJW21kNXN1bV0gPSAiNzg3ODJkYzMzZDlhOGI2MzQ0YzRjYzFhZjcwYzhhOTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTgwMTgwN2ExMzUwNjY3OGNiZmViMTVjNmE0Yjg5ZWNiNTczOWVmZTEwNjdlYjQ2NGRhNjY0MWQ3MzE0MzZkMyIKKworIyBub2luc3QgcHJvZ3JhbXMgaW4gTWFrZWZpbGUudG9vbHMgdGhhdCBhcmUgY29uZGl0aW9uYWwgb24gUkVBRExJTkUKKyMgc3VwcG9ydAorTk9JTlNUX1RPT0xTX1JFQURMSU5FID89ICIgXAorICAgIGF0dHJpYi9nYXR0dG9vbCBcCisgICAgdG9vbHMvb2JleC1jbGllbnQtdG9vbCBcCisgICAgdG9vbHMvb2JleC1zZXJ2ZXItdG9vbCBcCisgICAgdG9vbHMvYmx1ZXRvb3RoLXBsYXllciBcCisgICAgdG9vbHMvb2JleGN0bCBcCisiCisKKyMgbm9pbnN0IHByb2dyYW1zIGluIE1ha2VmaWxlLnRvb2xzIHRoYXQgYXJlIGNvbmRpdGlvbmFsIG9uIEVYUEVSSU1FTlRBTAorIyBzdXBwb3J0CitOT0lOU1RfVE9PTFNfRVhQRVJJTUVOVEFMID89ICIgXAorICAgIGVtdWxhdG9yL2J0dmlydCBcCisgICAgZW11bGF0b3IvYjFlZSBcCisgICAgZW11bGF0b3IvaGZwIFwKKyAgICB0b29scy8zZHNwIFwKKyAgICB0b29scy9tZ210LXRlc3RlciBcCisgICAgdG9vbHMvZ2FwLXRlc3RlciBcCisgICAgdG9vbHMvbDJjYXAtdGVzdGVyIFwKKyAgICB0b29scy9zY28tdGVzdGVyIFwKKyAgICB0b29scy9zbXAtdGVzdGVyIFwKKyAgICB0b29scy9oY2ktdGVzdGVyIFwKKyAgICB0b29scy9yZmNvbW0tdGVzdGVyIFwKKyAgICB0b29scy9iZGFkZHIgXAorICAgIHRvb2xzL2F2aW5mbyBcCisgICAgdG9vbHMvYXZ0ZXN0IFwKKyAgICB0b29scy9zY290ZXN0IFwKKyAgICB0b29scy9hbXB0ZXN0IFwKKyAgICB0b29scy9od2RiIFwKKyAgICB0b29scy9oY2lldmVudG1hc2sgXAorICAgIHRvb2xzL2hjaXNlY2ZpbHRlciBcCisgICAgdG9vbHMvYnRtZ210IFwKKyAgICB0b29scy9idGluZm8gXAorICAgIHRvb2xzL2J0YXR0YWNoIFwKKyAgICB0b29scy9idHNub29wIFwKKyAgICB0b29scy9idHByb3h5IFwKKyAgICB0b29scy9idGlvdGVzdCBcCisgICAgdG9vbHMvbWNhcHRlc3QgXAorICAgIHRvb2xzL2NsdGVzdCBcCisgICAgdG9vbHMvb29idGVzdCBcCisgICAgdG9vbHMvc2VxMmJzZXEgXAorICAgIHRvb2xzL2liZWFjb24gXAorICAgIHRvb2xzL2J0Z2F0dC1jbGllbnQgXAorICAgIHRvb2xzL2J0Z2F0dC1zZXJ2ZXIgXAorICAgIHRvb2xzL2dhdHQtc2VydmljZSBcCisgICAgcHJvZmlsZXMvaWFwL2lhcGQgXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1jb25mLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1jb25mLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNGMyOGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWNvbmYuYmIKQEAgLTAsMCArMSwyNiBAQAorU1VNTUFSWSA9ICJDb25ubWFuIGNvbmZpZyB0byBzZXR1cCB3aXJlZCBpbnRlcmZhY2Ugb24gcWVtdSBtYWNoaW5lcyIKK0RFU0NSSVBUSU9OID0gIlRoaXMgaXMgdGhlIENvbm5NYW4gY29uZmlndXJhdGlvbiB0byBzZXQgdXAgYSBXaXJlZCBcCituZXR3b3JrIGludGVyZmFjZSBmb3IgYSBxZW11IG1hY2hpbmUuIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjA7bWQ1PTgwMWY4MDk4MGQxNzFkZDY0MjU2MTA4MzNhMjJkYmU2IgorCitTUkNfVVJJX2FwcGVuZF9xZW11YWxsID0gIiBmaWxlOi8vd2lyZWQuY29uZmlnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly93aXJlZC1zZXR1cCBcCisiCitQUiA9ICJyMiIKKworUyA9ICIke1dPUktESVJ9IgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitGSUxFU18ke1BOfSA9ICIke2xvY2Fsc3RhdGVkaXJ9LyogJHtsaWJkaXJ9LyoiCisKK2RvX2luc3RhbGwoKSB7CisgICAgI0NvbmZpZ3VyZSBXaXJlZCBuZXR3b3JrIGludGVyZmFjZSBpbiBjYXNlIG9mIHFlbXUqIG1hY2hpbmVzCisgICAgaWYgdGVzdCAtZSAke1dPUktESVJ9L3dpcmVkLmNvbmZpZyAmJiB0ZXN0IC1lICR7V09SS0RJUn0vd2lyZWQtc2V0dXA7IHRoZW4KKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvY29ubm1hbgorICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS93aXJlZC5jb25maWcgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2Nvbm5tYW4KKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L2Nvbm5tYW4KKyAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vd2lyZWQtc2V0dXAgJHtEfSR7bGliZGlyfS9jb25ubWFuCisgICAgZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tY29uZi9xZW11YWxsL3dpcmVkLXNldHVwIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1jb25mL3FlbXVhbGwvd2lyZWQtc2V0dXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ2ODk5ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tY29uZi9xZW11YWxsL3dpcmVkLXNldHVwCkBAIC0wLDAgKzEsMTYgQEAKKyMhL2Jpbi9zaAorCitDT05GSUdGPS92YXIvbGliL2Nvbm5tYW4vd2lyZWQuY29uZmlnCisKKyMgRXh0cmFjdCB3aXJlZCBuZXR3b3JrIGNvbmZpZyBmcm9tIC9wcm9jL2NtZGxpbmUKK05FVF9DT05GPWBjYXQgL3Byb2MvY21kbGluZSB8c2VkIC1uZSAncy9eLippcD1cKFteIF0qXCk6XChbXiBdKlwpOlwoW14gXSpcKTpcKFteIF0qXCkuKiQvXDFcL1w0XC9cMy9wJ2AKKworIyBDaGVjayBpZiBldGgwIGlzIGFscmVhZHkgc2V0IHZpYSBrZXJuZWwgY21kbGluZQoraWYgWyAieCRORVRfQ09ORiIgPSAieCIgXTsgdGhlbgorCSMgV2lyZWQgaW50ZXJmYWNlIGlzIG5vdCBjb25maWd1cmVkIHZpYSBrZXJuZWwgY21kbGluZQorCSMgUmVtb3ZlIGNvbm5tYW4gY29uZmlnIGZpbGUgdGVtcGxhdGUKKwlybSAtZiAke0NPTkZJR0Z9CitlbHNlCisJIyBTZXR1cCBhIGNvbm5tYW4gY29uZmlnIGFjY29yZGluZ2x5CisJc2VkIC1pIC1lICJzfF5JUHY0ID0uKnxJUHY0ID0gJHtORVRfQ09ORn18IiAke0NPTkZJR0Z9CitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1jb25mL3FlbXVhbGwvd2lyZWQuY29uZmlnIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1jb25mL3FlbXVhbGwvd2lyZWQuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyOTk4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWNvbmYvcWVtdWFsbC93aXJlZC5jb25maWcKQEAgLTAsMCArMSw5IEBACitbZ2xvYmFsXQorTmFtZSA9IFdpcmVkCitEZXNjcmlwdGlvbiA9IFdpcmVkIG5ldHdvcmsgY29uZmlndXJhdGlvbgorCitbc2VydmljZV9ldGhlcm5ldF0KK1R5cGUgPSBldGhlcm5ldAorSVB2NCA9CitNQUMgPSA1Mjo1NDowMDoxMjozNDo1NgorTmFtZXNlcnZlcnMgPSA4LjguOC44CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lLzAwMDEtUmVtb3ZlZC1pY29uLWZyb20tY29ubm1hbi1nbm9tZS1hYm91dC1hcHBsZXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lLzAwMDEtUmVtb3ZlZC1pY29uLWZyb20tY29ubm1hbi1nbm9tZS1hYm91dC1hcHBsZXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk1NzUwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvMDAwMS1SZW1vdmVkLWljb24tZnJvbS1jb25ubWFuLWdub21lLWFib3V0LWFwcGxldC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDU5MDdhMjNhZDJmNDk3MDI5NjBhMzNmOWUyMDM5NTUyNjczZWFiYzcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZWkgRGludSA8YW5kcmVpLmFkcmlhbnguZGludUBpbnRlbC5jb20+CitEYXRlOiBNb24sIDE3IERlYyAyMDEyIDE0OjAxOjE4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIFJlbW92ZWQgaWNvbiBmcm9tIGNvbm5tYW4tZ25vbWUgImFib3V0IiBhcHBsZXQKKworVGhlIGNvbm5tYW4tZ25vbWUgImFib3V0IiBhcHBsZXQgc2hvd2VkIGEgcGljdHVyZSB0aGF0CitjYW4gbm90IGJlIGRpc3BsYXllZC4gVGhlcmUgaXMgbm8gZGVzaWduYXRlZCBwaWN0dXJlCitpbiBjb25ubWFuLWdub21lIHRvIGJlIHVzZWQgaW4gdGhlIGFib3V0IHNlY3Rpb24sIHNvCitpdCB3YXMgcmVtb3ZlZC4KKworW09FLUNvcmUgIzI1MDldCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgRGludSA8YW5kcmVpLmFkcmlhbnguZGludUBpbnRlbC5jb20+CistLS0KKyBhcHBsZXQvbWFpbi5jIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYXBwbGV0L21haW4uYyBiL2FwcGxldC9tYWluLmMKK2luZGV4IGYxMmQzNzEuLmM3YjNjN2YgMTAwNjQ0CistLS0gYS9hcHBsZXQvbWFpbi5jCisrKysgYi9hcHBsZXQvbWFpbi5jCitAQCAtMjEyLDcgKzIxMiw3IEBAIHN0YXRpYyB2b2lkIGFib3V0X2NhbGxiYWNrKEd0a1dpZGdldCAqaXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQorIAkJCSJjb21tZW50cyIsIF8oIkEgY29ubmVjdGlvbiBtYW5hZ2VyIGZvciB0aGUgR05PTUUgZGVza3RvcCIpLAorIAkJCSJhdXRob3JzIiwgYXV0aG9ycywKKyAJCQkidHJhbnNsYXRvci1jcmVkaXRzIiwgXygidHJhbnNsYXRvci1jcmVkaXRzIiksCistCQkJImxvZ28taWNvbi1uYW1lIiwgIm5ldHdvcmstd2lyZWxlc3MiLCBOVUxMKTsKKysJCQlOVUxMKTsKKyB9CisgCisgc3RhdGljIHZvaWQgc2V0dGluZ3NfY2FsbGJhY2soR3RrV2lkZ2V0ICppdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9jb25ubWFuLWdub21lLWZpeC1kYnVzLWludGVyZmFjZS1uYW1lLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9jb25ubWFuLWdub21lLWZpeC1kYnVzLWludGVyZmFjZS1uYW1lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MDQ5ZmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2Nvbm5tYW4tZ25vbWUtZml4LWRidXMtaW50ZXJmYWNlLW5hbWUucGF0Y2gKQEAgLTAsMCArMSwxODcgQEAKK2Nvbm5tYW4tZ25vbWU6IGZpeCBkYnVzIGludGVyZmFjZSBuYW1lCisKK1RoaXMgcGF0Y2ggcmVzb2x2ZXMgZm9sbG93aW5nIGVycm9yOgorCisiY29ubm1hbi1kYnVzLnhtbCI6ICJjb25ubWFuIiBpcyBub3QgYSB2YWxpZCBELUJ1cyBpbnRlcmZhY2UgbmFtZQorCitodHRwczovLzUwMjU1Mi5idWdzLmdlbnRvby5vcmcvYXR0YWNobWVudC5jZ2k/aWQ9MzgwNjUyCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyBjb21tb24vY29ubm1hbi1jbGllbnQuYyB8IDI0ICsrKysrKysrKysrKy0tLS0tLS0tLS0tLQorIGNvbW1vbi9jb25ubWFuLWNsaWVudC5oIHwgIDQgKystLQorIGNvbW1vbi9jb25ubWFuLWRidXMuYyAgIHwgIDYgKysrLS0tCisgY29tbW9uL2Nvbm5tYW4tZGJ1cy54bWwgfCAgMiArLQorIDQgZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb21tb24vY29ubm1hbi1jbGllbnQuYyBiL2NvbW1vbi9jb25ubWFuLWNsaWVudC5jCitpbmRleCBjNTVlMjVjLi45ZDgxOGIyIDEwMDY0NAorLS0tIGEvY29tbW9uL2Nvbm5tYW4tY2xpZW50LmMKKysrKyBiL2NvbW1vbi9jb25ubWFuLWNsaWVudC5jCitAQCAtMjg5LDcgKzI4OSw3IEBAIGdib29sZWFuIGNvbm5tYW5fY2xpZW50X3NldF9pcHY0KENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKyAKKyAJZ192YWx1ZV9pbml0KCZ2YWx1ZSwgREJVU19UWVBFX0dfRElDVElPTkFSWSk7CisgCWdfdmFsdWVfc2V0X2JveGVkKCZ2YWx1ZSwgaXB2NCk7CistCXJldCA9IGNvbm5tYW5fc2V0X3Byb3BlcnR5KHByb3h5LCAiSVB2NC5Db25maWd1cmF0aW9uIiwgJnZhbHVlLCBOVUxMKTsKKysJcmV0ID0gbmV0X2Nvbm5tYW5fc2V0X3Byb3BlcnR5KHByb3h5LCAiSVB2NC5Db25maWd1cmF0aW9uIiwgJnZhbHVlLCBOVUxMKTsKKyAKKyAJZ19vYmplY3RfdW5yZWYocHJveHkpOworIAorQEAgLTMxNyw3ICszMTcsNyBAQCB2b2lkIGNvbm5tYW5fY2xpZW50X3NldF9wb3dlcmVkKENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKyAJZ192YWx1ZV9zZXRfYm9vbGVhbigmdmFsdWUsIHBvd2VyZWQpOworIAorIAllcnJvciA9IE5VTEw7CistCWNvbm5tYW5fc2V0X3Byb3BlcnR5KHByb3h5LCAiUG93ZXJlZCIsICZ2YWx1ZSwgJmVycm9yKTsKKysJbmV0X2Nvbm5tYW5fc2V0X3Byb3BlcnR5KHByb3h5LCAiUG93ZXJlZCIsICZ2YWx1ZSwgJmVycm9yKTsKKyAJaWYoIGVycm9yICkKKyAJCWZwcmludGYgKHN0ZGVyciwgImVycm9yOiAlc1xuIiwgZXJyb3ItPm1lc3NhZ2UpOworIAorQEAgLTMyNSw3ICszMjUsNyBAQCB2b2lkIGNvbm5tYW5fY2xpZW50X3NldF9wb3dlcmVkKENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKyB9CisgCisgdm9pZCBjb25ubWFuX2NsaWVudF9zY2FuKENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKy0JCQkJCQljb25ubWFuX3NjYW5fcmVwbHkgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJfZGF0YSkKKysJCQkJCQluZXRfY29ubm1hbl9zY2FuX3JlcGx5IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyX2RhdGEpCisgeworIAlDb25ubWFuQ2xpZW50UHJpdmF0ZSAqcHJpdiA9IENPTk5NQU5fQ0xJRU5UX0dFVF9QUklWQVRFKGNsaWVudCk7CisgCURCdXNHUHJveHkgKnByb3h5OworQEAgLTMzOSw3ICszMzksNyBAQCB2b2lkIGNvbm5tYW5fY2xpZW50X3NjYW4oQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqZGV2aWNlLAorIAlpZiAocHJveHkgPT0gTlVMTCkKKyAJCXJldHVybjsKKyAKKy0JY29ubm1hbl9zY2FuX2FzeW5jKHByb3h5LCBjYWxsYmFjaywgdXNlcl9kYXRhKTsKKysJbmV0X2Nvbm5tYW5fc2Nhbl9hc3luYyhwcm94eSwgY2FsbGJhY2ssIHVzZXJfZGF0YSk7CisgCisgCWdfb2JqZWN0X3VucmVmKHByb3h5KTsKKyB9CitAQCAtMzUzLDcgKzM1Myw3IEBAIGdib29sZWFuIGNvbm5tYW5fY2xpZW50X2dldF9vZmZsaW5lX3N0YXR1cyhDb25ubWFuQ2xpZW50ICpjbGllbnQpCisgCisgCURCRygiY2xpZW50ICVwIiwgY2xpZW50KTsKKyAKKy0JcmV0ID0gY29ubm1hbl9nZXRfcHJvcGVydGllcyhwcml2LT5tYW5hZ2VyLCAmaGFzaCwgTlVMTCk7CisrCXJldCA9IG5ldF9jb25ubWFuX2dldF9wcm9wZXJ0aWVzKHByaXYtPm1hbmFnZXIsICZoYXNoLCBOVUxMKTsKKyAKKyAJaWYgKHJldCA9PSBGQUxTRSkKKyAJCWdvdG8gZG9uZTsKK0BAIC0zNzUsNyArMzc1LDcgQEAgdm9pZCBjb25ubWFuX2NsaWVudF9zZXRfb2ZmbGluZW1vZGUoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBnYm9vbGVhbiBzdGF0dXMpCisgCWdfdmFsdWVfaW5pdCgmdmFsdWUsIEdfVFlQRV9CT09MRUFOKTsKKyAJZ192YWx1ZV9zZXRfYm9vbGVhbigmdmFsdWUsIHN0YXR1cyk7CisgCistCWNvbm5tYW5fc2V0X3Byb3BlcnR5KHByaXYtPm1hbmFnZXIsICJPZmZsaW5lTW9kZSIsICZ2YWx1ZSwgTlVMTCk7CisrCW5ldF9jb25ubWFuX3NldF9wcm9wZXJ0eShwcml2LT5tYW5hZ2VyLCAiT2ZmbGluZU1vZGUiLCAmdmFsdWUsIE5VTEwpOworIH0KKyAKKyBzdGF0aWMgZ2Jvb2xlYW4gbmV0d29ya19kaXNjb25uZWN0KEd0a1RyZWVNb2RlbCAqbW9kZWwsIEd0a1RyZWVQYXRoICpwYXRoLAorQEAgLTM5OCw3ICszOTgsNyBAQCBzdGF0aWMgZ2Jvb2xlYW4gbmV0d29ya19kaXNjb25uZWN0KEd0a1RyZWVNb2RlbCAqbW9kZWwsIEd0a1RyZWVQYXRoICpwYXRoLAorIAkJcmV0dXJuIFRSVUU7CisgCisgCWlmICh0eXBlID09IENPTk5NQU5fVFlQRV9XSUZJKQorLQkJY29ubm1hbl9kaXNjb25uZWN0KHByb3h5LCBOVUxMKTsKKysJCW5ldF9jb25ubWFuX2Rpc2Nvbm5lY3QocHJveHksIE5VTEwpOworIAorIAlnX29iamVjdF91bnJlZihwcm94eSk7CisgCitAQCAtNDIyLDEzICs0MjIsMTMgQEAgdm9pZCBjb25ubWFuX2NsaWVudF9jb25uZWN0KENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKm5ldHdvcmspCisgCWlmIChwcm94eSA9PSBOVUxMKQorIAkJcmV0dXJuOworIAorLQljb25ubWFuX2Nvbm5lY3QocHJveHksIE5VTEwpOworKwluZXRfY29ubm1hbl9jb25uZWN0KHByb3h5LCBOVUxMKTsKKyAKKyAJZ19vYmplY3RfdW5yZWYocHJveHkpOworIH0KKyAKKyB2b2lkIGNvbm5tYW5fY2xpZW50X2Nvbm5lY3RfYXN5bmMoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqbmV0d29yaywKKy0JCWNvbm5tYW5fY29ubmVjdF9yZXBseSBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlcmRhdGEpCisrCQluZXRfY29ubm1hbl9jb25uZWN0X3JlcGx5IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyZGF0YSkKKyB7CisgCUNvbm5tYW5DbGllbnRQcml2YXRlICpwcml2ID0gQ09OTk1BTl9DTElFTlRfR0VUX1BSSVZBVEUoY2xpZW50KTsKKyAJREJ1c0dQcm94eSAqcHJveHk7CitAQCAtNDQ2LDcgKzQ0Niw3IEBAIHZvaWQgY29ubm1hbl9jbGllbnRfY29ubmVjdF9hc3luYyhDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpuZXR3b3JrLAorIAlpZiAocHJveHkgPT0gTlVMTCkKKyAJCWdvdG8gZG9uZTsKKyAKKy0JY29ubm1hbl9jb25uZWN0X2FzeW5jKHByb3h5LCBjYWxsYmFjaywgdXNlcmRhdGEpOworKwluZXRfY29ubm1hbl9jb25uZWN0X2FzeW5jKHByb3h5LCBjYWxsYmFjaywgdXNlcmRhdGEpOworIAorIGRvbmU6CisgCXJldHVybjsKK0BAIC00NzYsNyArNDc2LDcgQEAgdm9pZCBjb25ubWFuX2NsaWVudF9kaXNjb25uZWN0KENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKm5ldHdvcmspCisgCWlmIChwcm94eSA9PSBOVUxMKQorIAkJcmV0dXJuOworIAorLQljb25ubWFuX2Rpc2Nvbm5lY3QocHJveHksIE5VTEwpOworKwluZXRfY29ubm1hbl9kaXNjb25uZWN0KHByb3h5LCBOVUxMKTsKKyAKKyAJZ19vYmplY3RfdW5yZWYocHJveHkpOworIH0KK0BAIC01MzIsNyArNTMyLDcgQEAgdm9pZCBjb25ubWFuX2NsaWVudF9yZW1vdmUoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqbmV0d29yaykKKyAJaWYgKHByb3h5ID09IE5VTEwpCisgCQlyZXR1cm47CisgCistCWNvbm5tYW5fcmVtb3ZlKHByb3h5LCBOVUxMKTsKKysJbmV0X2Nvbm5tYW5fcmVtb3ZlKHByb3h5LCBOVUxMKTsKKyAKKyAJZ19vYmplY3RfdW5yZWYocHJveHkpOworIH0KK2RpZmYgLS1naXQgYS9jb21tb24vY29ubm1hbi1jbGllbnQuaCBiL2NvbW1vbi9jb25ubWFuLWNsaWVudC5oCitpbmRleCA5ZTJlNmQ1Li45ODI0MWRlIDEwMDY0NAorLS0tIGEvY29tbW9uL2Nvbm5tYW4tY2xpZW50LmgKKysrKyBiL2NvbW1vbi9jb25ubWFuLWNsaWVudC5oCitAQCAtNzAsMTMgKzcwLDEzIEBAIHZvaWQgY29ubm1hbl9jbGllbnRfc2V0X3Bvd2VyZWQoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqZGV2aWNlLAorIGdib29sZWFuIGNvbm5tYW5fY2xpZW50X3NldF9pcHY0KENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKyAJCQkJc3RydWN0IGlwdjRfY29uZmlnICppcHY0X2NvbmZpZyk7Cisgdm9pZCBjb25ubWFuX2NsaWVudF9zY2FuKENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKy0JCQkJCQkJY29ubm1hbl9zY2FuX3JlcGx5IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyX2RhdGEpOworKwkJCQkJCQluZXRfY29ubm1hbl9zY2FuX3JlcGx5IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyX2RhdGEpOworIAorIHZvaWQgY29ubm1hbl9jbGllbnRfY29ubmVjdChDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpuZXR3b3JrKTsKKyB2b2lkIGNvbm5tYW5fY2xpZW50X2Rpc2Nvbm5lY3QoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqbmV0d29yayk7CisgZ2NoYXIgKmNvbm5tYW5fY2xpZW50X2dldF9zZWN1cml0eShDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpuZXR3b3JrKTsKKyB2b2lkIGNvbm5tYW5fY2xpZW50X2Nvbm5lY3RfYXN5bmMoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqbmV0d29yaywKKy0JCQkJY29ubm1hbl9jb25uZWN0X3JlcGx5IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyZGF0YSk7CisrCQkJCW5ldF9jb25ubWFuX2Nvbm5lY3RfcmVwbHkgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJkYXRhKTsKKyB2b2lkIGNvbm5tYW5fY2xpZW50X3NldF9yZW1lbWJlcihDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpuZXR3b3JrLAorIAkJCQkJCQlnYm9vbGVhbiByZW1lbWJlcik7CisgCitkaWZmIC0tZ2l0IGEvY29tbW9uL2Nvbm5tYW4tZGJ1cy5jIGIvY29tbW9uL2Nvbm5tYW4tZGJ1cy5jCitpbmRleCBiODJiM2UxLi41NDNlYjQzIDEwMDY0NAorLS0tIGEvY29tbW9uL2Nvbm5tYW4tZGJ1cy5jCisrKysgYi9jb21tb24vY29ubm1hbi1kYnVzLmMKK0BAIC02NTUsMTUgKzY1NSwxNSBAQCBEQnVzR1Byb3h5ICpjb25ubWFuX2RidXNfY3JlYXRlX21hbmFnZXIoREJ1c0dDb25uZWN0aW9uICpjb25uLAorIAorIAlEQkcoImdldHRpbmcgbWFuYWdlciBwcm9wZXJ0aWVzIik7CisgCistCWNvbm5tYW5fZ2V0X3Byb3BlcnRpZXNfYXN5bmMocHJveHksIG1hbmFnZXJfcHJvcGVydGllcywgc3RvcmUpOworKwluZXRfY29ubm1hbl9nZXRfcHJvcGVydGllc19hc3luYyhwcm94eSwgbWFuYWdlcl9wcm9wZXJ0aWVzLCBzdG9yZSk7CisgCisgCURCRygiZ2V0dGluZyB0ZWNobm9sb2dpZXMiKTsKKyAKKy0JY29ubm1hbl9nZXRfdGVjaG5vbG9naWVzX2FzeW5jKHByb3h5LCBtYW5hZ2VyX3RlY2hub2xvZ2llcywgc3RvcmUpOworKwluZXRfY29ubm1hbl9nZXRfdGVjaG5vbG9naWVzX2FzeW5jKHByb3h5LCBtYW5hZ2VyX3RlY2hub2xvZ2llcywgc3RvcmUpOworIAorIAlEQkcoImdldHRpbmcgc2VydmljZXMiKTsKKyAKKy0JY29ubm1hbl9nZXRfc2VydmljZXNfYXN5bmMocHJveHksIG1hbmFnZXJfc2VydmljZXMsIHN0b3JlKTsKKysJbmV0X2Nvbm5tYW5fZ2V0X3NlcnZpY2VzX2FzeW5jKHByb3h5LCBtYW5hZ2VyX3NlcnZpY2VzLCBzdG9yZSk7CisgCisgCXJldHVybiBwcm94eTsKKyB9CitkaWZmIC0tZ2l0IGEvY29tbW9uL2Nvbm5tYW4tZGJ1cy54bWwgYi9jb21tb24vY29ubm1hbi1kYnVzLnhtbAoraW5kZXggNTZiOTU4Mi4uMDE5OWQ1MiAxMDA2NDQKKy0tLSBhL2NvbW1vbi9jb25ubWFuLWRidXMueG1sCisrKysgYi9jb21tb24vY29ubm1hbi1kYnVzLnhtbAorQEAgLTEsNyArMSw3IEBACisgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+CisgCisgPG5vZGUgbmFtZT0iLyI+CistICA8aW50ZXJmYWNlIG5hbWU9ImNvbm5tYW4iPgorKyAgPGludGVyZmFjZSBuYW1lPSJuZXQuY29ubm1hbiI+CisgICAgIDxtZXRob2QgbmFtZT0iR2V0UHJvcGVydGllcyI+CisgICAgICAgPGFyZyB0eXBlPSJhe3N2fSIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICAgPC9tZXRob2Q+CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTAxLnBuZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTAxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzI0N2MxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTAyLnBuZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTAyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTRmYjk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTAzLnBuZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTAzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWViNDA1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTA0LnBuZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTA0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTU0NDE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTA1LnBuZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTA1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzQwYWM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvbnVsbF9jaGVja19mb3JfaXB2NF9jb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL251bGxfY2hlY2tfZm9yX2lwdjRfY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MjFjZGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL251bGxfY2hlY2tfZm9yX2lwdjRfY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0luIG5ldHdvcmtzIHRoYXQgZG9uJ3QgaGF2ZSBhIERIQ1Agc2VydmVyIGNvbmZpZ3VyZWQsIGlwdjQgYWRkcmVzcworYWxsb2NhdGlvbiBmYWlscyBhbmQgdGhlIGlwdjQgc3RydWN0dXJlIGRvZXNuJ3QgZ2V0IHBvcHVsYXRlZC4gV2hlbgordGhlIEdVSSBpcyB0cnlpbmcgdG8gcmVhZCB0aGUgaXB2NF9jb25maWcubWV0aG9kIGZpZWxkIHRvIHNlZSB3aGV0aGVyCitpdCBjb250YWlucyAiZGhjcCIgc3RyaW5nLCBhIHNlZ21lbnRhdGlvbiBmYXVsdCBpcyBnZW5lcmF0ZWQuCisKK0V0aGVybmV0IG1hbnVhbCBjb25maWd1cmF0aW9uIGJlaGF2aW9yIHJlbWFpbnMgdW5jaGFuZ2VkIGFmdGVyIHRoaXMgZml4LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRW1pbGlhIENpb2JhbnUgPGVtaWxpYS5tYXJpYS5zaWx2aWEuY2lvYmFudUBpbnRlbC5jb20+CitJbmRleDogZ2l0L3Byb3BlcnRpZXMvZXRoZXJuZXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3Byb3BlcnRpZXMvZXRoZXJuZXQuYworKysrIGdpdC9wcm9wZXJ0aWVzL2V0aGVybmV0LmMKK0BAIC0xOTQsNyArMTk0LDcgQEAgdm9pZCBhZGRfZXRoZXJuZXRfc2VydmljZShHdGtXaWRnZXQgKm1haQorCisgCWRhdGEtPmJ1dHRvbiA9IGJ1dHRvbjsKKworLQlpZiAoZ19zdHJfZXF1YWwoaXB2NF9jb25maWcubWV0aG9kLCAiZGhjcCIpID09IFRSVUUpCisrCWlmICghaXB2NF9jb25maWcubWV0aG9kIHx8IGdfc3RyX2VxdWFsKGlwdjRfY29uZmlnLm1ldGhvZCwgImRoY3AiKSA9PSBUUlVFKQorIAkJdXBkYXRlX2V0aGVybmV0X2lwdjQoZGF0YSwgQ09OTk1BTl9QT0xJQ1lfREhDUCk7CisgCWVsc2UKKyAJCXVwZGF0ZV9ldGhlcm5ldF9pcHY0KGRhdGEsIENPTk5NQU5fUE9MSUNZX01BTlVBTCk7CitJbmRleDogZ2l0L3Byb3BlcnRpZXMvd2lmaS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvcHJvcGVydGllcy93aWZpLmMKKysrKyBnaXQvcHJvcGVydGllcy93aWZpLmMKK0BAIC0yMzAsNyArMjMwLDcgQEAgc3RhdGljIHZvaWQgd2lmaV9pcGNvbmZpZyhHdGtXaWRnZXQgKnRhYgorCisgCWRhdGEtPmlwdjRfY29uZmlnID0gaXB2NF9jb25maWc7CisKKy0JaWYgKGdfc3RyX2VxdWFsKGlwdjRfY29uZmlnLm1ldGhvZCwgImRoY3AiKSA9PSBUUlVFKQorKwlpZiAoIWlwdjRfY29uZmlnLm1ldGhvZCB8fCBnX3N0cl9lcXVhbChpcHY0X2NvbmZpZy5tZXRob2QsICJkaGNwIikgPT0gVFJVRSkKKyAJCXVwZGF0ZV93aWZpX2lwdjQoZGF0YSwgQ09OTk1BTl9QT0xJQ1lfREhDUCk7CisgCWVsc2UKKyAJCXVwZGF0ZV93aWZpX2lwdjQoZGF0YSwgQ09OTk1BTl9QT0xJQ1lfTUFOVUFMKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWVfMC43LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZV8wLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU1NzVkMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWVfMC43LmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiR1RLKyBmcm9udGVuZCBmb3IgdGhlIENvbm5NYW4gbmV0d29yayBjb25uZWN0aW9uIG1hbmFnZXIiCitIT01FUEFHRSA9ICJodHRwOi8vY29ubm1hbi5uZXQvIgorU0VDVElPTiA9ICJsaWJzL25ldHdvcmsiCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lYjcyM2I2MTUzOWZlZWYwMTNkZTQ3NmU2OGI1YzUwYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wcm9wZXJ0aWVzL21haW4uYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT01MGM3N2M4MTg3MTMwOGIwMzNhYjdhMTUwNDYyNmFmYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jb21tb24vY29ubm1hbi1kYnVzLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9ZGU2YjQ4NWMwZTcxN2EwMjM2NDAyZDIyMDE4NzcxN2EiCisKK0RFUEVORFMgPSAiZ3RrKyBkYnVzLWdsaWIgaW50bHRvb2wtbmF0aXZlIgorCisjIDAuNyB0YWcKK1NSQ1JFViA9ICJjZjNjMzI1YjIzZGFlODQzYzU0OTlhMTEzNTkxY2ZiYzk4YWNiMTQzIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2Nvbm5lY3Rpdml0eS9jb25ubWFuLWdub21lLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVJlbW92ZWQtaWNvbi1mcm9tLWNvbm5tYW4tZ25vbWUtYWJvdXQtYXBwbGV0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL251bGxfY2hlY2tfZm9yX2lwdjRfY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ltYWdlcy8qIFwKKyAgICAgICAgICAgZmlsZTovL2Nvbm5tYW4tZ25vbWUtZml4LWRidXMtaW50ZXJmYWNlLW5hbWUucGF0Y2ggXAorICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGd0ay1pY29uLWNhY2hlIHBrZ2NvbmZpZworCitSREVQRU5EU18ke1BOfSA9ICJjb25ubWFuIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9pbWFnZXMvKiAke0R9L3Vzci9zaGFyZS9pY29ucy9oaWNvbG9yLzIyeDIyL2FwcHMvCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZGM0YjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLmluYwpAQCAtMCwwICsxLDIxMSBAQAorU1VNTUFSWSA9ICJBIGRhZW1vbiBmb3IgbWFuYWdpbmcgaW50ZXJuZXQgY29ubmVjdGlvbnMgd2l0aGluIGVtYmVkZGVkIGRldmljZXMiCitERVNDUklQVElPTiA9ICJUaGUgQ29ubk1hbiBwcm9qZWN0IHByb3ZpZGVzIGEgZGFlbW9uIGZvciBtYW5hZ2luZyBcCitpbnRlcm5ldCBjb25uZWN0aW9ucyB3aXRoaW4gZW1iZWRkZWQgZGV2aWNlcyBydW5uaW5nIHRoZSBMaW51eCBcCitvcGVyYXRpbmcgc3lzdGVtLiAgVGhlIENvbm5lY3Rpb24gTWFuYWdlciBpcyBkZXNpZ25lZCB0byBiZSBzbGltIGFuZCBcCit0byB1c2UgYXMgZmV3IHJlc291cmNlcyBhcyBwb3NzaWJsZSwgc28gaXQgY2FuIGJlIGVhc2lseSBpbnRlZ3JhdGVkLiBcCitJdCBpcyBhIGZ1bGx5IG1vZHVsYXIgc3lzdGVtIHRoYXQgY2FuIGJlIGV4dGVuZGVkLCB0aHJvdWdoIHBsdWctaW5zLCBcCit0byBzdXBwb3J0IGFsbCBraW5kcyBvZiB3aXJlZCBvciB3aXJlbGVzcyB0ZWNobm9sb2dpZXMuIEFsc28sIFwKK2NvbmZpZ3VyYXRpb24gbWV0aG9kcywgbGlrZSBESENQIGFuZCBkb21haW4gbmFtZSByZXNvbHZpbmcsIGFyZSBcCitpbXBsZW1lbnRlZCB1c2luZyBwbHVnLWlucy4iCitIT01FUEFHRSA9ICJodHRwOi8vY29ubm1hbi5uZXQvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovLzAxLm9yZy9qaXJhL2Jyb3dzZS9DTSIKK0xJQ0VOU0UgID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTJmODg0ZDJhZTFmZjg3YzA5ZTViN2NjYzJjNGNhN2UgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT00ODZhMjc5YTZhYjBjOGQxNTJiY2RhM2E1YjVlZGMzNiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHN5c3RlbWQgdXBkYXRlLXJjLmQgYmx1ZXRvb3RoCisKK0RFUEVORFMgID0gImRidXMgZ2xpYi0yLjAgcHBwIGlwdGFibGVzIgorCitJTkNfUFIgPSAicjIwIgorCitFWFRSQV9PRUNPTkYgKz0gIlwKKyAgICBhY19jdl9wYXRoX1dQQVNVUFBMSUNBTlQ9JHtzYmluZGlyfS93cGFfc3VwcGxpY2FudCBcCisgICAgYWNfY3ZfcGF0aF9QUFBEPSR7c2JpbmRpcn0vcHBwZCBcCisgICAgLS1lbmFibGUtZGVidWcgXAorICAgIC0tZW5hYmxlLWxvb3BiYWNrIFwKKyAgICAtLWVuYWJsZS1ldGhlcm5ldCBcCisgICAgLS1lbmFibGUtdG9vbHMgXAorICAgIC0tZW5hYmxlLXRlc3QgXAorICAgIC0tZGlzYWJsZS1wb2xraXQgXAorICAgIC0tZW5hYmxlLWNsaWVudCBcCisiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ3aXNwciBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywnc3lzdGVtZCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2lmaScsJ3dpZmknLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsICdibHVleicsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnM2cnLCczZycsICcnLCBkKX0gXAorIgorCisjIElmIHlvdSB3YW50IENvbm5NYW4gdG8gc3VwcG9ydCBWUE4sIGFkZCBmb2xsb3dpbmcgc3RhdGVtZW50IGludG8KKyMgbG9jYWwuY29uZiBvciBkaXN0cm8gY29uZmlnCisjIFBBQ0tBR0VDT05GSUdfYXBwZW5kX3BuLWNvbm5tYW4gPSAiIG9wZW52cG4gdnBuYyBsMnRwIHBwdHAiCisKK1BBQ0tBR0VDT05GSUdbc3lzdGVtZF0gPSAiLS13aXRoLXN5c3RlbWR1bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vLC0td2l0aC1zeXN0ZW1kdW5pdGRpcj0iCitQQUNLQUdFQ09ORklHW3dpZmldID0gIi0tZW5hYmxlLXdpZmksIC0tZGlzYWJsZS13aWZpLCB3cGEtc3VwcGxpY2FudCwgd3BhLXN1cHBsaWNhbnQiCitQQUNLQUdFQ09ORklHW2JsdWV6XSA9ICItLWVuYWJsZS1ibHVldG9vdGgsIC0tZGlzYWJsZS1ibHVldG9vdGgsICR7QkxVRVp9LCAke0JMVUVafSIKK1BBQ0tBR0VDT05GSUdbM2ddID0gIi0tZW5hYmxlLW9mb25vLCAtLWRpc2FibGUtb2Zvbm8sIG9mb25vLCBvZm9ubyIKK1BBQ0tBR0VDT05GSUdbdGlzdF0gPSAiLS1lbmFibGUtdGlzdCwtLWRpc2FibGUtdGlzdCwiCitQQUNLQUdFQ09ORklHW29wZW52cG5dID0gIi0tZW5hYmxlLW9wZW52cG4gLS13aXRoLW9wZW52cG49JHtzYmluZGlyfS9vcGVudnBuLC0tZGlzYWJsZS1vcGVudnBuLCxvcGVudnBuIgorUEFDS0FHRUNPTkZJR1t2cG5jXSA9ICItLWVuYWJsZS12cG5jIC0td2l0aC12cG5jPSR7c2JpbmRpcn0vdnBuYywtLWRpc2FibGUtdnBuYywsdnBuYyIKK1BBQ0tBR0VDT05GSUdbbDJ0cF0gPSAiLS1lbmFibGUtbDJ0cCAtLXdpdGgtbDJ0cD0ke3NiaW5kaXJ9L3hsMnRwZCwtLWRpc2FibGUtbDJ0cCwseGwydHBkIgorUEFDS0FHRUNPTkZJR1twcHRwXSA9ICItLWVuYWJsZS1wcHRwIC0td2l0aC1wcHRwPSR7c2JpbmRpcn0vcHB0cCwtLWRpc2FibGUtcHB0cCwscHB0cC1saW51eCIKKyMgV0lTUHIgc3VwcG9ydCBmb3IgbG9nZ2luZyBpbnRvIGhvdHNwb3RzLCByZXF1aXJlcyBUTFMKK1BBQ0tBR0VDT05GSUdbd2lzcHJdID0gIi0tZW5hYmxlLXdpc3ByLC0tZGlzYWJsZS13aXNwcixnbnV0bHMsIgorCitJTklUU0NSSVBUX05BTUUgPSAiY29ubm1hbiIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDA1IDUgMiAzIC4gc3RvcCAyMiAwIDEgNiAuIgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIHN5c3RlbWRfcGFja2FnZXMgPSAiJHtQTn0iCisgICAgcGtnY29uZmlnID0gZC5nZXRWYXIoJ1BBQ0tBR0VDT05GSUcnLCBUcnVlKQorICAgIGlmICgnb3BlbnZwbicgb3IgJ3ZwbmMnIG9yICdsMnRwJyBvciAncHB0cCcpIGluIHBrZ2NvbmZpZy5zcGxpdCgpOgorICAgICAgICBzeXN0ZW1kX3BhY2thZ2VzICs9ICIgJHtQTn0tdnBuIgorICAgIGQuc2V0VmFyKCdTWVNURU1EX1BBQ0tBR0VTJywgc3lzdGVtZF9wYWNrYWdlcykKK30KKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gImNvbm5tYW4uc2VydmljZSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS12cG4gPSAiY29ubm1hbi12cG4uc2VydmljZSIKK1NZU1RFTURfV0lSRURfU0VUVVAgPSAiRXhlY1N0YXJ0UHJlPS0ke2xpYmRpcn0vY29ubm1hbi93aXJlZC1zZXR1cCIKKworIyBUaGlzIGFsbG93cyAqZXZlcnlvbmUqIHRvIGFjY2VzcyBDb25uTWFuIG92ZXIgREJ1cywgd2l0aG91dCBhbnkgYWNjZXNzCisjIGNvbnRyb2wuICBSZWFsbHkgdGhlIGF0X2NvbnNvbGUgZmxhZyBzaG91bGQgd29yaywgd2hpY2ggd291bGQgbWVhbiB0aGF0CisjIGJvdGggdGhpcyBhbmQgdGhlIHh1c2VyIHBhdGNoIGNhbiBiZSBkcm9wcGVkLgorZG9fY29tcGlsZV9hcHBlbmQoKSB7CisJc2VkIC1pIC1lIHM6ZGVueTphbGxvdzpnICR7U30vc3JjL2Nvbm5tYW4tZGJ1cy5jb25mCisJc2VkIC1pIC1lIHM6ZGVueTphbGxvdzpnICR7U30vdnBuL3Zwbi1kYnVzLmNvbmYKKworCXNlZCAtaSAicyNFeGVjU3RhcnQ9IyR7U1lTVEVNRF9XSVJFRF9TRVRVUH1cbkV4ZWNTdGFydD0jIiAke0J9L3NyYy9jb25ubWFuLnNlcnZpY2UKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vY29ubm1hbiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvY29ubm1hbgorCQlzZWQgLWkgcyVATElCRElSQCUke2xpYmRpcn0lICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9jb25ubWFuCisJZmkKKworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke0J9L3Rvb2xzLyotdGVzdCAke0R9JHtiaW5kaXJ9CisJaWYgWyAtZSAke0J9L3Rvb2xzL3dpc3ByIF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vdG9vbHMvd2lzcHIgJHtEfSR7YmluZGlyfQorCWZpCisJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vY2xpZW50L2Nvbm5tYW5jdGwgJHtEfSR7YmluZGlyfQorCisJIyBXZSBkb24ndCBuZWVkIHRvIHBhY2thZ2UgYW4gZW1wdHkgZGlyZWN0b3J5CisJcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJHtEfSR7bGliZGlyfS9jb25ubWFuL3NjcmlwdHMKKworCSMgQXV0b21ha2UgMS4xMiB3b24ndCBpbnN0YWxsIGVtcHR5IGRpcmVjdG9yaWVzLCBidXQgd2UgbmVlZCB0aGUKKwkjIHBsdWdpbnMgZGlyZWN0b3J5IHRvIGJlIHByZXNlbnQgZm9yIG93bmVyc2hpcAorCW1rZGlyIC1wICR7RH0ke2xpYmRpcn0vY29ubm1hbi9wbHVnaW5zCit9CisKKyMgVGhlc2UgdXNlZCB0byBiZSBwbHVnaW5zLCBidXQgbm93IHRoZXkgYXJlIGNvcmUKK1JQUk9WSURFU18ke1BOfSA9ICJcCisJY29ubm1hbi1wbHVnaW4tbG9vcGJhY2sgXAorCWNvbm5tYW4tcGx1Z2luLWV0aGVybmV0IFwKKwkke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdibHVldG9vdGgnLCdjb25ubWFuLXBsdWdpbi1ibHVldG9vdGgnLCAnJywgZCl9IFwKKwkke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd3aWZpJywnY29ubm1hbi1wbHVnaW4td2lmaScsICcnLCBkKX0gXAorCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJzNnJywnY29ubm1hbi1wbHVnaW4tb2Zvbm8nLCAnJywgZCl9IFwKKwkiCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKwlkYnVzIFwKKwkke0BiYXNlX2NvbmRpdGlvbmFsKCdST09UTEVTU19YJywgJzEnLCAneHVzZXItYWNjb3VudCcsICcnLCBkKX0gXAorCSIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXiR7UE59LXBsdWdpbi0uKiIKKworZGVmIGFkZF9yZGVwZW5kcyhiYiwgZCwgZmlsZSwgcGtnLCBkZXBtYXAsIG11bHRpbGliX3ByZWZpeCwgYWRkX2luc2FuZV9za2lwKToKKyAgICBwbHVnaW50eXBlID0gcGtnLnNwbGl0KCAnLScgKVstMV0KKyAgICBpZiBwbHVnaW50eXBlIGluIGRlcG1hcDoKKyAgICAgICAgcmRlcGVuZHMgPSBtYXAobGFtYmRhIHg6IG11bHRpbGliX3ByZWZpeCArIHgsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgZGVwbWFwW3BsdWdpbnR5cGVdLnNwbGl0KCkpCisgICAgICAgIGQuc2V0VmFyKCJSREVQRU5EU18lcyIgJSBwa2csICIgIi5qb2luKHJkZXBlbmRzKSkKKyAgICBpZiBhZGRfaW5zYW5lX3NraXA6CisgICAgICAgIGQuYXBwZW5kVmFyKCJJTlNBTkVfU0tJUF8lcyIgJSBwa2csICJkZXYtc28iKQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCgpIHsKKyAgICBkZXBtYXAgPSBkaWN0KHBwcGQ9InBwcCIpCisgICAgbXVsdGlsaWJfcHJlZml4ID0gKGQuZ2V0VmFyKCJNTFBSRUZJWCIsIFRydWUpIG9yICIiKQorCisgICAgaG9vayA9IGxhbWJkYSBmaWxlLHBrZyx4LHksejogXAorICAgICAgICBhZGRfcmRlcGVuZHMoYmIsIGQsIGZpbGUsIHBrZywgZGVwbWFwLCBtdWx0aWxpYl9wcmVmaXgsIEZhbHNlKQorICAgIHBsdWdpbl9kaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L2Nvbm5tYW4vcGx1Z2lucy8nKQorICAgIHBsdWdpbl9uYW1lID0gZC5leHBhbmQoJyR7UE59LXBsdWdpbi0lcycpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcGx1Z2luX2RpciwgJ14oLiopLnNvJCcsIHBsdWdpbl9uYW1lLCBcCisgICAgICAgICcke1BOfSBwbHVnaW4gZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJywgaG9vaz1ob29rLCBwcmVwZW5kPVRydWUgKQorCisgICAgaG9vayA9IGxhbWJkYSBmaWxlLHBrZyx4LHksejogXAorICAgICAgICBhZGRfcmRlcGVuZHMoYmIsIGQsIGZpbGUsIHBrZywgZGVwbWFwLCBtdWx0aWxpYl9wcmVmaXgsIFRydWUpCisgICAgcGx1Z2luX2RpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vY29ubm1hbi9wbHVnaW5zLXZwbi8nKQorICAgIHBsdWdpbl9uYW1lID0gZC5leHBhbmQoJyR7UE59LXBsdWdpbi12cG4tJXMnKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBsdWdpbl9kaXIsICdeKC4qKS5zbyQnLCBwbHVnaW5fbmFtZSwgXAorICAgICAgICAnJHtQTn0gVlBOIHBsdWdpbiBmb3IgJXMnLCBleHRyYV9kZXBlbmRzPScnLCBob29rPWhvb2ssIHByZXBlbmQ9VHJ1ZSApCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS10b29scyAke1BOfS10ZXN0cyAke1BOfS1jbGllbnQiCisKK0ZJTEVTXyR7UE59LXRvb2xzID0gIiR7YmluZGlyfS93aXNwciIKKworRklMRVNfJHtQTn0tdGVzdHMgPSAiJHtiaW5kaXJ9LyotdGVzdCAke2xpYmRpcn0vJHtCUE59L3Rlc3QvKiIKK1JERVBFTkRTXyR7UE59LXRlc3RzID0gInB5dGhvbi1kYnVzIHB5dGhvbi1weWdvYmplY3QgcHl0aG9uLXRleHR1dGlscyBweXRob24tc3VicHJvY2VzcyBweXRob24tZmNudGwgcHl0aG9uLW5ldGNsaWVudCIKKworRklMRVNfJHtQTn0tY2xpZW50ID0gIiR7YmluZGlyfS9jb25ubWFuY3RsIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vKiAke3NiaW5kaXJ9LyogJHtsaWJleGVjZGlyfS8qICR7bGliZGlyfS9saWIqLnNvLiogXAorICAgICAgICAgICAgJHtsaWJkaXJ9L2Nvbm5tYW4vcGx1Z2lucyBcCisgICAgICAgICAgICAke3N5c2NvbmZkaXJ9ICR7c2hhcmVkc3RhdGVkaXJ9ICR7bG9jYWxzdGF0ZWRpcn0gXAorICAgICAgICAgICAgJHtiYXNlX2JpbmRpcn0vKiAke2Jhc2Vfc2JpbmRpcn0vKiAke2Jhc2VfbGliZGlyfS8qLnNvKiAke2RhdGFkaXJ9LyR7UE59IFwKKyAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcy8qIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9jb25ubWFuLyovLmRlYnVnIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9jb25ubWFuLyovKi5sYSIKKworUEFDS0FHRVMgPSsgIiR7UE59LXZwbiIKKworU1VNTUFSWV8ke1BOfS12cG4gPSAiQSBkYWVtb24gZm9yIG1hbmFnaW5nIFZQTiBjb25uZWN0aW9ucyB3aXRoaW4gZW1iZWRkZWQgZGV2aWNlcyIKK0RFU0NSSVBUSU9OXyR7UE59LXZwbiA9ICJUaGUgQ29ubk1hbiBWUE4gcHJvdmlkZXMgYSBkYWVtb24gZm9yIFwKK21hbmFnaW5nIFZQTiBjb25uZWN0aW9ucyB3aXRoaW4gZW1iZWRkZWQgZGV2aWNlcyBydW5uaW5nIHRoZSBMaW51eCBcCitvcGVyYXRpbmcgc3lzdGVtLiAgVGhlIGNvbm5tYW4tdnBuZCBoYW5kbGVzIGFsbCB0aGUgVlBOIGNvbm5lY3Rpb25zIFwKK2FuZCBzdGFydHMvc3RvcHMgVlBOIGNsaWVudCBwcm9jZXNzZXMgd2hlbiBuZWNlc3NhcnkuIFRoZSBjb25ubWFuLXZwbmQgXAorcHJvdmlkZXMgYSBEQnVzIEFQSSBmb3IgbWFuYWdpbmcgVlBOIGNvbm5lY3Rpb25zLiBBbGwgdGhlIGRpZmZlcmVudCBcCitWUE4gdGVjaG5vZ2llcyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgcGx1Zy1pbnMuIgorRklMRVNfJHtQTn0tdnBuICs9ICIke3NiaW5kaXJ9L2Nvbm5tYW4tdnBuZCBcCisgICAgICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vZGJ1cy0xL3N5c3RlbS5kL2Nvbm5tYW4tdnBuLWRidXMuY29uZiBcCisgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcy9uZXQuY29ubm1hbi52cG4uc2VydmljZSBcCisgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vY29ubm1hbi12cG4uc2VydmljZSIKKworU1VNTUFSWV8ke1BOfS1wbHVnaW4tdnBuLW9wZW52cG4gPSAiQW4gT3BlblZQTiBwbHVnaW4gZm9yIENvbm5NYW4gVlBOIgorREVTQ1JJUFRJT05fJHtQTn0tcGx1Z2luLXZwbi1vcGVudnBuID0gIlRoZSBDb25uTWFuIE9wZW5WUE4gcGx1Z2luIHVzZXMgb3BlbnZwbiBjbGllbnQgXAordG8gY3JlYXRlIGEgVlBOIGNvbm5lY3Rpb24gdG8gT3BlblZQTiBzZXJ2ZXIuIgorRklMRVNfJHtQTn0tcGx1Z2luLXZwbi1vcGVudnBuICs9ICIke2xpYmRpcn0vY29ubm1hbi9zY3JpcHRzL29wZW52cG4tc2NyaXB0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2Nvbm5tYW4vcGx1Z2lucy12cG4vb3BlbnZwbi5zbyIKK1JERVBFTkRTXyR7UE59LXBsdWdpbi12cG4tb3BlbnZwbiArPSAiJHtQTn0tdnBuIgorUlJFQ09NTUVORFNfJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywnb3BlbnZwbicsJyR7UE59LXBsdWdpbi12cG4tb3BlbnZwbicsICcnLCBkKX0iCisKK1NVTU1BUllfJHtQTn0tcGx1Z2luLXZwbi12cG5jID0gIkEgdnBuYyBwbHVnaW4gZm9yIENvbm5NYW4gVlBOIgorREVTQ1JJUFRJT05fJHtQTn0tcGx1Z2luLXZwbi12cG5jID0gIlRoZSBDb25uTWFuIHZwbmMgcGx1Z2luIHVzZXMgdnBuYyBjbGllbnQgXAordG8gY3JlYXRlIGEgVlBOIGNvbm5lY3Rpb24gdG8gQ2lzY28zMDAwIFZQTiBDb25jZW50cmF0b3IuIgorRklMRVNfJHtQTn0tcGx1Z2luLXZwbi12cG5jICs9ICIke2xpYmRpcn0vY29ubm1hbi9zY3JpcHRzL29wZW5jb25uZWN0LXNjcmlwdCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jb25ubWFuL3BsdWdpbnMtdnBuL3ZwbmMuc28iCitSREVQRU5EU18ke1BOfS1wbHVnaW4tdnBuLXZwbmMgKz0gIiR7UE59LXZwbiIKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsJ3ZwbmMnLCcke1BOfS1wbHVnaW4tdnBuLXZwbmMnLCAnJywgZCl9IgorCitTVU1NQVJZXyR7UE59LXBsdWdpbi12cG4tbDJ0cCA9ICJBIEwyVFAgcGx1Z2luIGZvciBDb25uTWFuIFZQTiIKK0RFU0NSSVBUSU9OXyR7UE59LXBsdWdpbi12cG4tbDJ0cCA9ICJUaGUgQ29ubk1hbiBMMlRQIHBsdWdpbiB1c2VzIHhsMnRwZCBkYWVtb24gXAordG8gY3JlYXRlIGEgVlBOIGNvbm5lY3Rpb24gdG8gTDJUUCBzZXJ2ZXIuIgorRklMRVNfJHtQTn0tcGx1Z2luLXZwbi1sMnRwICs9ICIke2xpYmRpcn0vY29ubm1hbi9zY3JpcHRzL2xpYnBwcC1wbHVnaW4uc28qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2Nvbm5tYW4vcGx1Z2lucy12cG4vbDJ0cC5zbyIKK1JERVBFTkRTXyR7UE59LXBsdWdpbi12cG4tbDJ0cCArPSAiJHtQTn0tdnBuIgorUlJFQ09NTUVORFNfJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywnbDJ0cCcsJyR7UE59LXBsdWdpbi12cG4tbDJ0cCcsICcnLCBkKX0iCisKK1NVTU1BUllfJHtQTn0tcGx1Z2luLXZwbi1wcHRwID0gIkEgUFBUUCBwbHVnaW4gZm9yIENvbm5NYW4gVlBOIgorREVTQ1JJUFRJT05fJHtQTn0tcGx1Z2luLXZwbi1wcHRwID0gIlRoZSBDb25uTWFuIFBQVFAgcGx1Z2luIHVzZXMgcHB0cC1saW51eCBjbGllbnQgXAordG8gY3JlYXRlIGEgVlBOIGNvbm5lY3Rpb24gdG8gUFBUUCBzZXJ2ZXIuIgorRklMRVNfJHtQTn0tcGx1Z2luLXZwbi1wcHRwICs9ICIke2xpYmRpcn0vY29ubm1hbi9zY3JpcHRzL2xpYnBwcC1wbHVnaW4uc28qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2Nvbm5tYW4vcGx1Z2lucy12cG4vcHB0cC5zbyIKK1JERVBFTkRTXyR7UE59LXBsdWdpbi12cG4tcHB0cCArPSAiJHtQTn0tdnBuIgorUlJFQ09NTUVORFNfJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywncHB0cCcsJyR7UE59LXBsdWdpbi12cG4tcHB0cCcsICcnLCBkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLzAwMDEtcGx1Z2luLmgtQ2hhbmdlLXZpc2liaWxpdHktdG8tZGVmYXVsdC1mb3ItZGVidWctc3ltYi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vMDAwMS1wbHVnaW4uaC1DaGFuZ2UtdmlzaWJpbGl0eS10by1kZWZhdWx0LWZvci1kZWJ1Zy1zeW1iLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZjAzZTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLzAwMDEtcGx1Z2luLmgtQ2hhbmdlLXZpc2liaWxpdHktdG8tZGVmYXVsdC1mb3ItZGVidWctc3ltYi5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDRkZGFmNzhkYWQ1YTllZTRhMDY1ODIzNWY3MWI3NTEzMjE5MjEyM2UgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCA3IEFwciAyMDEyIDE4OjUyOjEyIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHBsdWdpbi5oOiBDaGFuZ2UgdmlzaWJpbGl0eSB0byBkZWZhdWx0IGZvciBkZWJ1ZyBzeW1ib2xzCisKK2dvbGQgcmVmdXNlcyB0byBsaW5rIGluIHVuZGVmaW5lZCB3ZWFrIHN5bWJvbHMgd2hpY2gKK2hhdmUgaGlkZGVuIHZpc2liaWxpdHkKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGluY2x1ZGUvcGx1Z2luLmggfCAgICA0ICsrLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGx1Z2luLmggYi9pbmNsdWRlL3BsdWdpbi5oCitpbmRleCA2OTJhNGU1Li5hOTM2MWMzIDEwMDY0NAorLS0tIGEvaW5jbHVkZS9wbHVnaW4uaAorKysrIGIvaW5jbHVkZS9wbHVnaW4uaAorQEAgLTg5LDkgKzg5LDkgQEAgc3RydWN0IGNvbm5tYW5fcGx1Z2luX2Rlc2MgeworICNlbHNlCisgI2RlZmluZSBDT05OTUFOX1BMVUdJTl9ERUZJTkUobmFtZSwgZGVzY3JpcHRpb24sIHZlcnNpb24sIHByaW9yaXR5LCBpbml0LCBleGl0KSBcCisgCQlleHRlcm4gc3RydWN0IGNvbm5tYW5fZGVidWdfZGVzYyBfX3N0YXJ0X19fZGVidWdbXSBcCistCQkJCV9fYXR0cmlidXRlX18gKCh3ZWFrLCB2aXNpYmlsaXR5KCJoaWRkZW4iKSkpOyBcCisrCQkJCV9fYXR0cmlidXRlX18gKCh3ZWFrLCB2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsgXAorIAkJZXh0ZXJuIHN0cnVjdCBjb25ubWFuX2RlYnVnX2Rlc2MgX19zdG9wX19fZGVidWdbXSBcCistCQkJCV9fYXR0cmlidXRlX18gKCh3ZWFrLCB2aXNpYmlsaXR5KCJoaWRkZW4iKSkpOyBcCisrCQkJCV9fYXR0cmlidXRlX18gKCh3ZWFrLCB2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsgXAorIAkJZXh0ZXJuIHN0cnVjdCBjb25ubWFuX3BsdWdpbl9kZXNjIGNvbm5tYW5fcGx1Z2luX2Rlc2MgXAorIAkJCQlfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7IFwKKyAJCXN0cnVjdCBjb25ubWFuX3BsdWdpbl9kZXNjIGNvbm5tYW5fcGx1Z2luX2Rlc2MgPSB7IFwKKy0tIAorMS43LjUuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuL2FkZF94dXNlcl9kYnVzX3Blcm1pc3Npb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuL2FkZF94dXNlcl9kYnVzX3Blcm1pc3Npb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA3YjNjYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vYWRkX3h1c2VyX2RidXNfcGVybWlzc2lvbi5wYXRjaApAQCAtMCwwICsxLDIxIEBACitCZWNhdXNlIFBva3kgZG9lc24ndCBzdXBwb3J0IGF0X2NvbnNvbGUgd2UgbmVlZCB0byBzcGVjaWFsLWNhc2UgdGhlIHNlc3Npb24KK3VzZXIuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3NyYy9jb25ubWFuLWRidXMuY29uZiBiL3NyYy9jb25ubWFuLWRidXMuY29uZgoraW5kZXggOThhNzczZS4uNDY2ODA5YyAxMDA2NDQKKy0tLSBhL3NyYy9jb25ubWFuLWRidXMuY29uZgorKysrIGIvc3JjL2Nvbm5tYW4tZGJ1cy5jb25mCitAQCAtOCw2ICs4LDkgQEAKKyAgICAgICAgIDxhbGxvdyBzZW5kX2ludGVyZmFjZT0ibmV0LmNvbm5tYW4uQ291bnRlciIvPgorICAgICAgICAgPGFsbG93IHNlbmRfaW50ZXJmYWNlPSJuZXQuY29ubm1hbi5Ob3RpZmljYXRpb24iLz4KKyAgICAgPC9wb2xpY3k+CisrICAgIDxwb2xpY3kgdXNlcj0ieHVzZXIiPgorKyAgICAgICAgPGFsbG93IHNlbmRfZGVzdGluYXRpb249Im5ldC5jb25ubWFuIi8+CisrICAgIDwvcG9saWN5PgorICAgICA8cG9saWN5IGF0X2NvbnNvbGU9InRydWUiPgorICAgICAgICAgPGFsbG93IHNlbmRfZGVzdGluYXRpb249Im5ldC5jb25ubWFuIi8+CisgICAgIDwvcG9saWN5PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi9jb25ubWFuIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi9jb25ubWFuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmN2E5NGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuL2Nvbm5tYW4KQEAgLTAsMCArMSw4MyBAQAorIyEvYmluL3NoCisKK0RBRU1PTj0vdXNyL3NiaW4vY29ubm1hbmQKK1BJREZJTEU9L3Zhci9ydW4vY29ubm1hbmQucGlkCitERVNDPSJDb25uZWN0aW9uIE1hbmFnZXIiCisKK2lmIFsgLWYgL2V0Yy9kZWZhdWx0L2Nvbm5tYW4gXSA7IHRoZW4KKwkuIC9ldGMvZGVmYXVsdC9jb25ubWFuCitmaQorCitzZXQgLWUKKworbmZzcm9vdD0wCisKK2V4ZWMgOTwmMCA8IC9wcm9jL21vdW50cword2hpbGUgcmVhZCBkZXYgbXRwdCBmc3R5cGUgcmVzdDsgZG8KKwlpZiB0ZXN0ICRtdHB0ID0gIi8iIDsgdGhlbgorCQljYXNlICRmc3R5cGUgaW4KKwkJICAgIG5mcyB8IG5mczQpCisJCQluZnNyb290PTEKKwkJCWJyZWFrCisJCQk7OworCQkgICAgKikKKwkJCTs7CisJCWVzYWMKKwlmaQorZG9uZQorCitkb19zdGFydCgpIHsKKwlFWFRSQV9QQVJBTT0iIgorCWlmIHRlc3QgJG5mc3Jvb3QgLWVxIDEgOyB0aGVuCisJICAgIE5FVF9ERVZTPWBjYXQgL3Byb2MvbmV0L2RldiB8IHNlZCAtbmUgJ3MvXlwoW2EtekEtWjAtOSBdKlwpOi4qJC9cMS9wJ2AKKwkgICAgTkVUX0FERFI9YGNhdCAvcHJvYy9jbWRsaW5lIHwgc2VkIC1uZSAncy9eLippcD1cKFteIDpdKlwpLiokL1wxL3AnYAorCisJICAgIGlmIFsgISAteiAiJE5FVF9BRERSIiBdOyB0aGVuCisJCWlmIFsgIiRORVRfQUREUiIgPSBkaGNwIF07IHRoZW4KKwkJICAgIGV0aG49YGlmY29uZmlnIHwgZ3JlcCAiXmV0aCIgfCBzZWQgLWUgInMvXChldGhbMC05XVwpXCguKlwpL1wxLyJgCisJCSAgICBpZiBbICEgLXogIiRldGhuIiBdOyB0aGVuCisJCQlFWFRSQV9QQVJBTT0iLUkgJGV0aG4iCisJCSAgICBmaQorCQllbHNlCisJCSAgICBmb3IgaSBpbiAkTkVUX0RFVlM7IGRvCisJCQlBRERSPWBpZmNvbmZpZyAkaSB8IHNlZCAncy9hZGRyOi8vZycgfCBzZWQgLW5lICdzL14uKmluZXQgXChbMC05Ll0qXCkgLiokL1wxL3AnYAorCQkJaWYgWyAiJE5FVF9BRERSIiA9ICIkQUREUiIgXTsgdGhlbgorCQkJICAgIEVYVFJBX1BBUkFNPSItSSAkaSIKKwkJCSAgICBicmVhaworCQkJZmkKKwkJICAgIGRvbmUKKwkJZmkKKwkgICAgZmkKKwlmaQorCWlmIFsgLWYgQExJQkRJUkAvY29ubm1hbi93aXJlZC1zZXR1cCBdIDsgdGhlbgorCQkuIEBMSUJESVJAL2Nvbm5tYW4vd2lyZWQtc2V0dXAKKwlmaQorCSREQUVNT04gJEVYVFJBX1BBUkFNCit9CisKK2RvX3N0b3AoKSB7CisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tbmFtZSBjb25ubWFuZCAtLXF1aWV0Cit9CisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwllY2hvICJTdGFydGluZyAkREVTQyIKKwlkb19zdGFydAorCTs7CisgIHN0b3ApCisJZWNobyAiU3RvcHBpbmcgJERFU0MiCisJZG9fc3RvcAorCTs7CisgIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorCWVjaG8gIlJlc3RhcnRpbmcgJERFU0MiCisJZG9fc3RvcAorCXNsZWVwIDEKKwlkb19zdGFydAorCTs7CisgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuXzEuMzAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuXzEuMzAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM0NzM1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW5fMS4zMC5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIGNvbm5tYW4uaW5jCisKK1NSQ19VUkkgID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvbmV0d29yay8ke0JQTn0vJHtCUH0udGFyLnh6IFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXBsdWdpbi5oLUNoYW5nZS12aXNpYmlsaXR5LXRvLWRlZmF1bHQtZm9yLWRlYnVnLXN5bWIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2FkZF94dXNlcl9kYnVzX3Blcm1pc3Npb24ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2Nvbm5tYW4gXAorICAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjRhM2VmZGJkNjc5NjkyMmRiOWM2ZjY2ZGE1Nzg4N2ZhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVjNWU0NjRiYWNjOWMyN2VkNGU3MjY5ZmI5YjUwNTlmMDc5NDdmNWJlMjY0MzNiNTkyMTIxMzM2NjNmZmE5OTEiCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gImNvbm5tYW4tY29uZiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODgzYThkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC5pbmMKQEAgLTAsMCArMSwxMTUgQEAKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorU1VNTUFSWSA9ICJJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtIERIQ1AgcGFja2FnZSIKK0RFU0NSSVBUSU9OID0gIkRIQ1AgKER5bmFtaWMgSG9zdCBDb25maWd1cmF0aW9uIFByb3RvY29sKSBpcyBhIHByb3RvY29sIFwKK3doaWNoIGFsbG93cyBpbmRpdmlkdWFsIGRldmljZXMgb24gYW4gSVAgbmV0d29yayB0byBnZXQgdGhlaXIgb3duIFwKK25ldHdvcmsgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmcm9tIGEgc2VydmVyLiAgREhDUCBoZWxwcyBtYWtlIGl0IFwKK2Vhc2llciB0byBhZG1pbmlzdGVyIGRldmljZXMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmlzYy5vcmcvIgorCitMSUNFTlNFID0gIklTQyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7YmVnaW5saW5lPTQ7bWQ1PWM1YzY0ZDY5NjEwN2Y4NGI1NmZlMzM3ZDE0ZGExNzUzIgorCitERVBFTkRTID0gIm9wZW5zc2wgYmluZCIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuaXNjLm9yZy9pc2MvZGhjcC8ke1BWfS9kaGNwLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9kZWZpbmUtbWFjcm8tX1BBVEhfREhDUERfQ09ORi1hbmQtX1BBVEhfREhDTElFTlRfQ09OLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2luaXQtcmVsYXkgZmlsZTovL2RlZmF1bHQtcmVsYXkgXAorICAgICAgICAgICBmaWxlOi8vaW5pdC1zZXJ2ZXIgZmlsZTovL2RlZmF1bHQtc2VydmVyIFwKKyAgICAgICAgICAgZmlsZTovL2RoY2xpZW50LmNvbmYgZmlsZTovL2RoY3BkLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vZGhjcGQuc2VydmljZSBmaWxlOi8vZGhjcmVsYXkuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly9kaGNwZDYuc2VydmljZSAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHN5c3RlbWQKKworU1lTVEVNRF9QQUNLQUdFUyA9ICIke1BOfS1zZXJ2ZXIgJHtQTn0tcmVsYXkiCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tc2VydmVyID0gImRoY3BkLnNlcnZpY2UgZGhjcGQ2LnNlcnZpY2UiCitTWVNURU1EX0FVVE9fRU5BQkxFXyR7UE59LXNlcnZlciA9ICJkaXNhYmxlIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tcmVsYXkgPSAiZGhjcmVsYXkuc2VydmljZSIKK1NZU1RFTURfQVVUT19FTkFCTEVfJHtQTn0tcmVsYXkgPSAiZGlzYWJsZSIKKworVEFSR0VUX0NGTEFHUyArPSAiLURfR05VX1NPVVJDRSIKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtc3J2LWxlYXNlLWZpbGU9JHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNwZC5sZWFzZXMgXAorICAgICAgICAgICAgICAgIC0td2l0aC1zcnY2LWxlYXNlLWZpbGU9JHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNwZDYubGVhc2VzIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtY2xpLWxlYXNlLWZpbGU9JHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNsaWVudC5sZWFzZXMgXAorICAgICAgICAgICAgICAgIC0td2l0aC1jbGk2LWxlYXNlLWZpbGU9JHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNsaWVudDYubGVhc2VzIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtbGliYmluZD0ke1NUQUdJTkdfTElCRElSfS8gXAorICAgICAgICAgICAgICAgIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RoY3AKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0LXJlbGF5ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9kaGNwLXJlbGF5CisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZGVmYXVsdC1yZWxheSAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L2RoY3AtcmVsYXkKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0LXNlcnZlciAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvZGhjcC1zZXJ2ZXIKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kZWZhdWx0LXNlcnZlciAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L2RoY3Atc2VydmVyCisKKwlybSAtZiAke0R9JHtzeXNjb25mZGlyfS9kaGNsaWVudC5jb25mKgorCXJtIC1mICR7RH0ke3N5c2NvbmZkaXJ9L2RoY3BkLmNvbmYqCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZGhjbGllbnQuY29uZiAke0R9JHtzeXNjb25mZGlyfS9kaGNwL2RoY2xpZW50LmNvbmYKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kaGNwZC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L2RoY3AvZGhjcGQuY29uZgorCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX3NiaW5kaXJ9LworCWlmIFsgIiR7c2JpbmRpcn0iICE9ICIke2Jhc2Vfc2JpbmRpcn0iIF07IHRoZW4KKwkJbXYgJHtEfSR7c2JpbmRpcn0vZGhjbGllbnQgJHtEfSR7YmFzZV9zYmluZGlyfS8KKwlmaQorCWluc3RhbGwgLW0gMDc1NSAke1N9L2NsaWVudC9zY3JpcHRzL2xpbnV4ICR7RH0ke2Jhc2Vfc2JpbmRpcn0vZGhjbGllbnQtc2NyaXB0CisKKwkjIEluc3RhbGwgc3lzdGVtZCB1bml0IGZpbGVzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2RoY3BkLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kaGNwZDYuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2RoY3JlbGF5LnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZGhjcGQqLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZGhjcmVsYXkuc2VydmljZQorCXNlZCAtaSAtZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kaGNwZCouc2VydmljZQorCXNlZCAtaSAtZSAncyxAYmFzZV9iaW5kaXJALCR7YmFzZV9iaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2RoY3BkKi5zZXJ2aWNlCisJc2VkIC1pIC1lICdzLEBsb2NhbHN0YXRlZGlyQCwke2xvY2Fsc3RhdGVkaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2RoY3BkKi5zZXJ2aWNlCit9CisKK1BBQ0tBR0VTICs9ICJkaGNwLXNlcnZlciBkaGNwLXNlcnZlci1jb25maWcgZGhjcC1jbGllbnQgZGhjcC1yZWxheSBkaGNwLW9tc2hlbGwiCisKK0ZJTEVTXyR7UE59ID0gIiIKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCitSREVQRU5EU18ke1BOfS1zdGF0aWNkZXYgPSAiIgorCitGSUxFU18ke1BOfS1zZXJ2ZXIgPSAiJHtzYmluZGlyfS9kaGNwZCAke3N5c2NvbmZkaXJ9L2luaXQuZC9kaGNwLXNlcnZlciIKK1JSRUNPTU1FTkRTXyR7UE59LXNlcnZlciA9ICJkaGNwLXNlcnZlci1jb25maWciCisKK0ZJTEVTXyR7UE59LXNlcnZlci1jb25maWcgPSAiJHtzeXNjb25mZGlyfS9kZWZhdWx0L2RoY3Atc2VydmVyICR7c3lzY29uZmRpcn0vZGhjcC9kaGNwZC5jb25mIgorCitGSUxFU18ke1BOfS1yZWxheSA9ICIke3NiaW5kaXJ9L2RoY3JlbGF5ICR7c3lzY29uZmRpcn0vaW5pdC5kL2RoY3AtcmVsYXkgJHtzeXNjb25mZGlyfS9kZWZhdWx0L2RoY3AtcmVsYXkiCisKK0ZJTEVTXyR7UE59LWNsaWVudCA9ICIke2Jhc2Vfc2JpbmRpcn0vZGhjbGllbnQgJHtiYXNlX3NiaW5kaXJ9L2RoY2xpZW50LXNjcmlwdCAke3N5c2NvbmZkaXJ9L2RoY3AvZGhjbGllbnQuY29uZiIKK1JERVBFTkRTXyR7UE59LWNsaWVudCA9ICJiYXNoIgorCitGSUxFU18ke1BOfS1vbXNoZWxsID0gIiR7YmluZGlyfS9vbXNoZWxsIgorCitwa2dfcG9zdGluc3RfZGhjcC1zZXJ2ZXIoKSB7CisgICAgbWtkaXIgLXAgJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcAorICAgIHRvdWNoICRELyR7bG9jYWxzdGF0ZWRpcn0vbGliL2RoY3AvZGhjcGQubGVhc2VzCisgICAgdG91Y2ggJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNwZDYubGVhc2VzCit9CisKK3BrZ19wb3N0aW5zdF9kaGNwLWNsaWVudCgpIHsKKyAgICBta2RpciAtcCAkRC8ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwCit9CisKK3BrZ19wb3N0cm1fZGhjcC1zZXJ2ZXIoKSB7CisgICAgcm0gLWYgJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNwZC5sZWFzZXMKKyAgICBybSAtZiAkRC8ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwL2RoY3BkNi5sZWFzZXMKKworICAgIGlmICEgcm1kaXIgJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcCAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBlY2hvICJOb3QgcmVtb3ZpbmcgJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcCBhcyBpdCBpcyBub24tZW1wdHkuIgorICAgIGZpCit9CisKK3BrZ19wb3N0cm1fZGhjcC1jbGllbnQoKSB7CisgICAgcm0gLWYgJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNsaWVudC5sZWFzZXMKKyAgICBybSAtZiAkRC8ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwL2RoY2xpZW50Ni5sZWFzZXMKKworICAgIGlmICEgcm1kaXIgJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcCAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBlY2hvICJOb3QgcmVtb3ZpbmcgJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcCBhcyBpdCBpcyBub24tZW1wdHkuIgorICAgIGZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2RlZmluZS1tYWNyby1fUEFUSF9ESENQRF9DT05GLWFuZC1fUEFUSF9ESENMSUVOVF9DT04ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2RlZmluZS1tYWNyby1fUEFUSF9ESENQRF9DT05GLWFuZC1fUEFUSF9ESENMSUVOVF9DT04ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJkM2M5YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZGVmaW5lLW1hY3JvLV9QQVRIX0RIQ1BEX0NPTkYtYW5kLV9QQVRIX0RIQ0xJRU5UX0NPTi5wYXRjaApAQCAtMCwwICsxLDI2IEBACitkZWZpbmUgbWFjcm8gX1BBVEhfREhDUERfQ09ORiBhbmQgX1BBVEhfREhDTElFTlRfQ09ORgorCitVcHN0cmVhbS1TdGF0dXM6IGluYXBwcm9wcmlhdGUgPG9lIHNwZWNpZmljPgorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBpbmNsdWRlcy9zaXRlLmggfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2luY2x1ZGVzL3NpdGUuaCBiL2luY2x1ZGVzL3NpdGUuaAoraW5kZXggZDg3YjMwOS4uMTdiYzQwZCAxMDA2NDQKKy0tLSBhL2luY2x1ZGVzL3NpdGUuaAorKysrIGIvaW5jbHVkZXMvc2l0ZS5oCitAQCAtMTM5LDcgKzEzOSw4IEBACisgLyogRGVmaW5lIHRoaXMgaWYgeW91IHdhbnQgdGhlIGRoY3BkLmNvbmYgZmlsZSB0byBnbyBzb21ld2hlcmUgb3RoZXIgdGhhbgorICAgIHRoZSBkZWZhdWx0IGxvY2F0aW9uLiAgIEJ5IGRlZmF1bHQsIGl0IGdvZXMgaW4gL2V0Yy9kaGNwZC5jb25mLiAqLworIAorLS8qICNkZWZpbmUgX1BBVEhfREhDUERfQ09ORgkiL2V0Yy9kaGNwZC5jb25mIiAqLworKyNkZWZpbmUgX1BBVEhfREhDUERfQ09ORgkiL2V0Yy9kaGNwL2RoY3BkLmNvbmYiCisrI2RlZmluZSBfUEFUSF9ESENMSUVOVF9DT05GCSIvZXRjL2RoY3AvZGhjbGllbnQuY29uZiIKKyAKKyAvKiBOZXR3b3JrIEFQSSBkZWZpbml0aW9ucy4gICBZb3UgZG8gbm90IG5lZWQgdG8gY2hvb3NlIG9uZSBvZiB0aGVzZSAtIGlmCisgICAgeW91IGRvbid0IGNob29zZSwgb25lIHdpbGwgYmUgY2hvc2VuIGZvciB5b3UgaW4geW91ciBzeXN0ZW0ncyBjb25maWcKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9kaGNsaWVudC1zY3JpcHQtZHJvcC1yZXNvbHYuY29uZi5kaGNsaWVudC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZGhjbGllbnQtc2NyaXB0LWRyb3AtcmVzb2x2LmNvbmYuZGhjbGllbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdlYTU1NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZGhjbGllbnQtc2NyaXB0LWRyb3AtcmVzb2x2LmNvbmYuZGhjbGllbnQucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorZGhjcC1jbGllbnQ6IGZpeCBpbnZva2UgZGhjbGllbnQtc2NyaXB0IGZhaWxlZCBvbiBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0KKworSW4gcmVhZC1vbmx5IGZpbGUgc3lzdGVtLCAnL2V0YycgaXMgb24gdGhlIHJlYWRvbmx5IHBhcnRpdGlvbiwKK2FuZCAnL2V0Yy9yZXNvbHYuY29uZicgaXMgc3ltbGlua2VkIHRvIGEgc2VwYXJhdGUgd3JpdGFibGUKK3BhcnRpdGlvbi4KKworSW4gdGhpcyBzaXR1YXRpb24sIHdlIHNob3VsZCB1c2Ugc2hlbGwgdmFyaWFibGUgdG8gaW5zdGVhZCBvZgordGVtcCBmaWxlcyAnL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudCcgYW5kICcvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50NicuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgY2xpZW50L3NjcmlwdHMvbGludXggfCAyMCArKysrKysrKystLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY2xpZW50L3NjcmlwdHMvbGludXggYi9jbGllbnQvc2NyaXB0cy9saW51eAorLS0tIGEvY2xpZW50L3NjcmlwdHMvbGludXgKKysrKyBiL2NsaWVudC9zY3JpcHRzL2xpbnV4CitAQCAtMjcsMjcgKzI3LDI1IEBAIGlwPS9zYmluL2lwCisgCisgbWFrZV9yZXNvbHZfY29uZigpIHsKKyAgIGlmIFsgeCIkbmV3X2RvbWFpbl9uYW1lX3NlcnZlcnMiICE9IHggXTsgdGhlbgorLSAgICBjYXQgL2Rldi9udWxsID4gL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudAorLSAgICBjaG1vZCA2NDQgL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudAorKyAgICByZXNvbHZfY29uZj0iIgorICAgICBpZiBbIHgiJG5ld19kb21haW5fc2VhcmNoIiAhPSB4IF07IHRoZW4KKy0gICAgICBlY2hvIHNlYXJjaCAkbmV3X2RvbWFpbl9zZWFyY2ggPj4gL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudAorKyAgICAgIHJlc29sdl9jb25mPSJzZWFyY2ggJHtuZXdfZG9tYWluX3NlYXJjaH1cbiIKKyAgICAgZWxpZiBbIHgiJG5ld19kb21haW5fbmFtZSIgIT0geCBdOyB0aGVuCisgICAgICAgIyBOb3RlIHRoYXQgdGhlIERIQ1AgJ0RvbWFpbiBOYW1lIE9wdGlvbicgaXMgcmVhbGx5IGp1c3QgYSBkb21haW4KKyAgICAgICAjIG5hbWUsIGFuZCB0aGF0IHRoaXMgcHJhY3RpY2Ugb2YgdXNpbmcgdGhlIGRvbWFpbiBuYW1lIG9wdGlvbiBhcworICAgICAgICMgYSBzZWFyY2ggcGF0aCBpcyBib3RoIG5vbnN0YW5kYXJkIGFuZCBkZXByZWNhdGVkLgorLSAgICAgIGVjaG8gc2VhcmNoICRuZXdfZG9tYWluX25hbWUgPj4gL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudAorKyAgICAgIHJlc29sdl9jb25mPSJzZWFyY2ggJHtuZXdfZG9tYWluX25hbWV9XG4iCisgICAgIGZpCisgICAgIGZvciBuYW1lc2VydmVyIGluICRuZXdfZG9tYWluX25hbWVfc2VydmVyczsgZG8KKy0gICAgICBlY2hvIG5hbWVzZXJ2ZXIgJG5hbWVzZXJ2ZXIgPj4vZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50CisrICAgICAgcmVzb2x2X2NvbmY9IiR7cmVzb2x2X2NvbmZ9bmFtZXNlcnZlciAke25hbWVzZXJ2ZXJ9XG4iCisgICAgIGRvbmUKKyAKKy0gICAgbXYgL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudCAvZXRjL3Jlc29sdi5jb25mCisrICAgIGVjaG8gLWUgIiR7cmVzb2x2X2NvbmZ9IiA+IC9ldGMvcmVzb2x2LmNvbmYKKyAgIGVsaWYgWyAieCR7bmV3X2RoY3A2X25hbWVfc2VydmVyc30iICE9IHggXSA7IHRoZW4KKy0gICAgY2F0IC9kZXYvbnVsbCA+IC9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQ2CistICAgIGNobW9kIDY0NCAvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50NgorKyAgICByZXNvbHZfY29uZj0iIgorIAorICAgICBpZiBbICJ4JHtuZXdfZGhjcDZfZG9tYWluX3NlYXJjaH0iICE9IHggXSA7IHRoZW4KKy0gICAgICBlY2hvIHNlYXJjaCAke25ld19kaGNwNl9kb21haW5fc2VhcmNofSA+PiAvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50NgorKyAgICAgIHJlc29sdl9jb25mPSJzZWFyY2ggJHtuZXdfZGhjcDZfZG9tYWluX3NlYXJjaH1cbiIKKyAgICAgZmkKKyAgICAgc2hvcHQgLXMgbm9jYXNlbWF0Y2ggCisgICAgIGZvciBuYW1lc2VydmVyIGluICR7bmV3X2RoY3A2X25hbWVfc2VydmVyc30gOyBkbworQEAgLTU5LDExICs1NywxMSBAQCBtYWtlX3Jlc29sdl9jb25mKCkgeworICAgICAgIGVsc2UKKyAJem9uZV9pZD0KKyAgICAgICBmaQorLSAgICAgIGVjaG8gbmFtZXNlcnZlciAke25hbWVzZXJ2ZXJ9JHpvbmVfaWQgPj4gL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudDYKKysgICAgICByZXNvbHZfY29uZj0iJHtyZXNvbHZfY29uZn1uYW1lc2VydmVyICR7bmFtZXNlcnZlcn0kem9uZV9pZFxuIgorICAgICBkb25lCisgICAgIHNob3B0IC11IG5vY2FzZW1hdGNoIAorIAorLSAgICBtdiAvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50NiAvZXRjL3Jlc29sdi5jb25mCisrICAgIGVjaG8gLWUgIiR7cmVzb2x2X2NvbmZ9IiA+IC9ldGMvcmVzb2x2LmNvbmYKKyAgIGZpCisgfQorIAorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZGhjcC0zLjAuMy1kaGNsaWVudC1kYnVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9kaGNwLTMuMC4zLWRoY2xpZW50LWRidXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRhNjY2ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZGhjcC0zLjAuMy1kaGNsaWVudC1kYnVzLnBhdGNoCkBAIC0wLDAgKzEsODYgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uXQorCistLS0gY2xpZW50L3NjcmlwdHMvYnNkb3MKKysrKyBjbGllbnQvc2NyaXB0cy9ic2RvcworQEAgLTQ3LDYgKzQ3LDExIEBACisgICAgIC4gL2V0Yy9kaGNwL2RoY2xpZW50LWV4aXQtaG9va3MKKyAgIGZpCisgIyBwcm9iYWJseSBzaG91bGQgZG8gc29tZXRoaW5nIHdpdGggZXhpdCBzdGF0dXMgb2YgdGhlIGxvY2FsIHNjcmlwdAorKyAgaWYgWyB4JGRoY19kYnVzICE9IHggLWEgJGV4aXRfc3RhdHVzIC1lcSAwIF07IHRoZW4KKysgICAgZGJ1cy1zZW5kIC0tc3lzdGVtIC0tZGVzdD1jb20ucmVkaGF0LmRoY3AgXAorKyAgICAgIC0tdHlwZT1tZXRob2RfY2FsbCAvY29tL3JlZGhhdC9kaGNwLyRpbnRlcmZhY2UgY29tLnJlZGhhdC5kaGNwLnNldCBcCisrICAgICAgJ3N0cmluZzonImBlbnYgfCBncmVwIC1FdiAnXihQQVRIfFNITFZMfF98UFdEfGRoY19kYnVzKVw9J2AiCisrICBmaQorICAgZXhpdCAkZXhpdF9zdGF0dXMKKyB9CisgCistLS0gY2xpZW50L3NjcmlwdHMvZnJlZWJzZAorKysrIGNsaWVudC9zY3JpcHRzL2ZyZWVic2QKK0BAIC01Nyw2ICs1NywxMSBAQAorICAgICAuIC9ldGMvZGhjcC9kaGNsaWVudC1leGl0LWhvb2tzCisgICBmaQorICMgcHJvYmFibHkgc2hvdWxkIGRvIHNvbWV0aGluZyB3aXRoIGV4aXQgc3RhdHVzIG9mIHRoZSBsb2NhbCBzY3JpcHQKKysgIGlmIFsgeCRkaGNfZGJ1cyAhPSB4IC1hICRleGl0X3N0YXR1cyAtZXEgMCBdOyB0aGVuCisrICAgIGRidXMtc2VuZCAtLXN5c3RlbSAtLWRlc3Q9Y29tLnJlZGhhdC5kaGNwIFwKKysgICAgICAtLXR5cGU9bWV0aG9kX2NhbGwgL2NvbS9yZWRoYXQvZGhjcC8kaW50ZXJmYWNlIGNvbS5yZWRoYXQuZGhjcC5zZXQgXAorKyAgICAgICdzdHJpbmc6JyJgZW52IHwgZ3JlcCAtRXYgJ14oUEFUSHxTSExWTHxffFBXRHxkaGNfZGJ1cylcPSdgIgorKyAgZmkKKyAgIGV4aXQgJGV4aXRfc3RhdHVzCisgfQorIAorLS0tIGNsaWVudC9zY3JpcHRzL2xpbnV4CisrKysgY2xpZW50L3NjcmlwdHMvbGludXgKK0BAIC02OSw2ICs2OSwxMSBAQAorICAgICAuIC9ldGMvZGhjcC9kaGNsaWVudC1leGl0LWhvb2tzCisgICBmaQorICMgcHJvYmFibHkgc2hvdWxkIGRvIHNvbWV0aGluZyB3aXRoIGV4aXQgc3RhdHVzIG9mIHRoZSBsb2NhbCBzY3JpcHQKKysgIGlmIFsgeCRkaGNfZGJ1cyAhPSB4IC1hICRleGl0X3N0YXR1cyAtZXEgMCBdOyB0aGVuCisrICAgIGRidXMtc2VuZCAtLXN5c3RlbSAtLWRlc3Q9Y29tLnJlZGhhdC5kaGNwIFwKKysgICAgICAtLXR5cGU9bWV0aG9kX2NhbGwgL2NvbS9yZWRoYXQvZGhjcC8kaW50ZXJmYWNlIGNvbS5yZWRoYXQuZGhjcC5zZXQgXAorKyAgICAgICdzdHJpbmc6JyJgZW52IHwgZ3JlcCAtRXYgJ14oUEFUSHxTSExWTHxffFBXRHxkaGNfZGJ1cylcPSdgIgorKyAgZmkKKyAgIGV4aXQgJGV4aXRfc3RhdHVzCisgfQorIAorLS0tIGNsaWVudC9zY3JpcHRzL25ldGJzZAorKysrIGNsaWVudC9zY3JpcHRzL25ldGJzZAorQEAgLTQ3LDYgKzQ3LDExIEBACisgICAgIC4gL2V0Yy9kaGNwL2RoY2xpZW50LWV4aXQtaG9va3MKKyAgIGZpCisgIyBwcm9iYWJseSBzaG91bGQgZG8gc29tZXRoaW5nIHdpdGggZXhpdCBzdGF0dXMgb2YgdGhlIGxvY2FsIHNjcmlwdAorKyAgaWYgWyB4JGRoY19kYnVzICE9IHggLWEgJGV4aXRfc3RhdHVzIC1lcSAwIF07IHRoZW4KKysgICAgZGJ1cy1zZW5kIC0tc3lzdGVtIC0tZGVzdD1jb20ucmVkaGF0LmRoY3AgXAorKyAgICAgIC0tdHlwZT1tZXRob2RfY2FsbCAvY29tL3JlZGhhdC9kaGNwLyRpbnRlcmZhY2UgY29tLnJlZGhhdC5kaGNwLnNldCBcCisrICAgICAgJ3N0cmluZzonImBlbnYgfCBncmVwIC1FdiAnXihQQVRIfFNITFZMfF98UFdEfGRoY19kYnVzKVw9J2AiCisrICBmaQorICAgZXhpdCAkZXhpdF9zdGF0dXMKKyB9CisgCistLS0gY2xpZW50L3NjcmlwdHMvb3BlbmJzZAorKysrIGNsaWVudC9zY3JpcHRzL29wZW5ic2QKK0BAIC00Nyw2ICs0NywxMSBAQAorICAgICAuIC9ldGMvZGhjcC9kaGNsaWVudC1leGl0LWhvb2tzCisgICBmaQorICMgcHJvYmFibHkgc2hvdWxkIGRvIHNvbWV0aGluZyB3aXRoIGV4aXQgc3RhdHVzIG9mIHRoZSBsb2NhbCBzY3JpcHQKKysgIGlmIFsgeCRkaGNfZGJ1cyAhPSB4IC1hICRleGl0X3N0YXR1cyAtZXEgMCBdOyB0aGVuCisrICAgIGRidXMtc2VuZCAtLXN5c3RlbSAtLWRlc3Q9Y29tLnJlZGhhdC5kaGNwIFwKKysgICAgICAtLXR5cGU9bWV0aG9kX2NhbGwgL2NvbS9yZWRoYXQvZGhjcC8kaW50ZXJmYWNlIGNvbS5yZWRoYXQuZGhjcC5zZXQgXAorKyAgICAgICdzdHJpbmc6JyJgZW52IHwgZ3JlcCAtRXYgJ14oUEFUSHxTSExWTHxffFBXRHxkaGNfZGJ1cylcPSdgIgorKyAgZmkKKyAgIGV4aXQgJGV4aXRfc3RhdHVzCisgfQorIAorLS0tIGNsaWVudC9zY3JpcHRzL3NvbGFyaXMKKysrKyBjbGllbnQvc2NyaXB0cy9zb2xhcmlzCitAQCAtNDcsNiArNDcsMTEgQEAKKyAgICAgLiAvZXRjL2RoY3AvZGhjbGllbnQtZXhpdC1ob29rcworICAgZmkKKyAjIHByb2JhYmx5IHNob3VsZCBkbyBzb21ldGhpbmcgd2l0aCBleGl0IHN0YXR1cyBvZiB0aGUgbG9jYWwgc2NyaXB0CisrICBpZiBbIHgkZGhjX2RidXMgIT0geCAtYSAkZXhpdF9zdGF0dXMgLWVxIDAgXTsgdGhlbgorKyAgICBkYnVzLXNlbmQgLS1zeXN0ZW0gLS1kZXN0PWNvbS5yZWRoYXQuZGhjcCBcCisrICAgICAgLS10eXBlPW1ldGhvZF9jYWxsIC9jb20vcmVkaGF0L2RoY3AvJGludGVyZmFjZSBjb20ucmVkaGF0LmRoY3Auc2V0IFwKKysgICAgICAnc3RyaW5nOiciYGVudiB8IGdyZXAgLUV2ICdeKFBBVEh8U0hMVkx8X3xQV0R8ZGhjX2RidXMpXD0nYCIKKysgIGZpCisgICBleGl0ICRleGl0X3N0YXR1cworIH0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZml4LWV4dGVybmFsLWJpbmQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2ZpeC1leHRlcm5hbC1iaW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyOTFmZGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2ZpeC1leHRlcm5hbC1iaW5kLnBhdGNoCkBAIC0wLDAgKzEsMTEyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworMTEvMzAvMjAxMAorLS13aXRoLWxpYmJpbmQ9UEFUSCBpcyBhdmFpbGFibGUgYnV0IG5vdCB1c2VkIGJ5IE1ha2VmaWxlLAordGhpcyBwYXRjaCBpcyB0byBhbGxvdyBidWlsZGluZyB3aXRoIGV4dGVybmFsIGJpbmQKKworU2lnbmVkLW9mZi1ieTogUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CisKK0luZGV4OiBkaGNwLTQuMy4wL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGhjcC00LjMuMC5vcmlnL01ha2VmaWxlLmFtCisrKysgZGhjcC00LjMuMC9NYWtlZmlsZS5hbQorQEAgLTI1LDcgKzI1LDcgQEAgRVhUUkFfRElTVCA9IFJFTE5PVEVTIExJQ0VOU0UgXAorIAkgICAgIGJpbmQvTWFrZWZpbGUgYmluZC9iaW5kLnRhci5neiBiaW5kL3ZlcnNpb24udG1wIFwKKyAJICAgICBjb21tb24vdGVzdHMvQXRmZmlsZSBzZXJ2ZXIvdGVzdHMvQXRmZmlsZQorIAorLVNVQkRJUlMgPSBiaW5kIGluY2x1ZGVzIHRlc3RzIGNvbW1vbiBkc3Qgb21hcGlwIGNsaWVudCBkaGNwY3RsIHJlbGF5IHNlcnZlcgorK1NVQkRJUlMgPSBpbmNsdWRlcyB0ZXN0cyBjb21tb24gZHN0IG9tYXBpcCBjbGllbnQgZGhjcGN0bCByZWxheSBzZXJ2ZXIKKyAKKyBub2Jhc2VfaW5jbHVkZV9IRUFERVJTID0gZGhjcGN0bC9kaGNwY3RsLmgKKyAKK0luZGV4OiBkaGNwLTQuMy4wL2NsaWVudC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRoY3AtNC4zLjAub3JpZy9jbGllbnQvTWFrZWZpbGUuYW0KKysrKyBkaGNwLTQuMy4wL2NsaWVudC9NYWtlZmlsZS5hbQorQEAgLTQsOCArNCw4IEBAIGRoY2xpZW50X1NPVVJDRVMgPSBjbHBhcnNlLmMgZGhjbGllbnQuYworIAkJICAgc2NyaXB0cy9ic2RvcyBzY3JpcHRzL2ZyZWVic2Qgc2NyaXB0cy9saW51eCBzY3JpcHRzL21hY29zIFwKKyAJCSAgIHNjcmlwdHMvbmV0YnNkIHNjcmlwdHMvbmV4dHN0ZXAgc2NyaXB0cy9vcGVuYnNkIFwKKyAJCSAgIHNjcmlwdHMvc29sYXJpcyBzY3JpcHRzL29wZW53cnQKKy1kaGNsaWVudF9MREFERCA9IC4uL2NvbW1vbi9saWJkaGNwLmEgLi4vb21hcGlwL2xpYm9tYXBpLmEgLi4vYmluZC9saWIvbGliaXJzLmEgXAorLQkJIC4uL2JpbmQvbGliL2xpYmRucy5hIC4uL2JpbmQvbGliL2xpYmlzY2NmZy5hIC4uL2JpbmQvbGliL2xpYmlzYy5hCisrZGhjbGllbnRfTERBREQgPSAuLi9jb21tb24vbGliZGhjcC5hIC4uL29tYXBpcC9saWJvbWFwaS5hICQobGliYmluZCkvbGliaXJzLmEgXAorKwkJICQobGliYmluZCkvbGliZG5zLmEgJChsaWJiaW5kKS9saWJpc2NjZmcuYSAkKGxpYmJpbmQpL2xpYmlzYy5hCisgbWFuX01BTlMgPSBkaGNsaWVudC44IGRoY2xpZW50LXNjcmlwdC44IGRoY2xpZW50LmNvbmYuNSBkaGNsaWVudC5sZWFzZXMuNQorIEVYVFJBX0RJU1QgPSAkKG1hbl9NQU5TKQorIAorSW5kZXg6IGRoY3AtNC4zLjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGhjcC00LjMuMC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGRoY3AtNC4zLjAvY29uZmlndXJlLmFjCitAQCAtNTY2LDYgKzU2Niw3IEBAIG5vKQorIAlsaWJiaW5kPSIkdXNlX2xpYmJpbmQiCisgCTs7CisgZXNhYworK0FDX1NVQlNUKFtsaWJiaW5kXSkKKyAKKyAjIE9wZW5MREFQIHN1cHBvcnQuCisgQUNfQVJHX1dJVEgobGRhcCwKK0luZGV4OiBkaGNwLTQuMy4wL2RoY3BjdGwvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkaGNwLTQuMy4wLm9yaWcvZGhjcGN0bC9NYWtlZmlsZS5hbQorKysrIGRoY3AtNC4zLjAvZGhjcGN0bC9NYWtlZmlsZS5hbQorQEAgLTYsMTIgKzYsMTIgQEAgRVhUUkFfRElTVCA9ICQobWFuX01BTlMpCisgCisgb21zaGVsbF9TT1VSQ0VTID0gb21zaGVsbC5jCisgb21zaGVsbF9MREFERCA9IGxpYmRoY3BjdGwuYSAuLi9jb21tb24vbGliZGhjcC5hIC4uL29tYXBpcC9saWJvbWFwaS5hIFwKKy0JICAgICAgICAuLi9iaW5kL2xpYi9saWJpcnMuYSAuLi9iaW5kL2xpYi9saWJkbnMuYSBcCistCSAgICAgICAgLi4vYmluZC9saWIvbGliaXNjY2ZnLmEgLi4vYmluZC9saWIvbGliaXNjLmEKKysJICAgICAgICAkKGxpYmJpbmQpL2xpYmlycy5hICQobGliYmluZCkvbGliZG5zLmEgXAorKwkgICAgICAgICQobGliYmluZCkvbGliaXNjY2ZnLmEgJChsaWJiaW5kKS9saWJpc2MuYQorIAorIGxpYmRoY3BjdGxfYV9TT1VSQ0VTID0gZGhjcGN0bC5jIGNhbGxiYWNrLmMgcmVtb3RlLmMKKyAKKyBjbHRlc3RfU09VUkNFUyA9IGNsdGVzdC5jCisgY2x0ZXN0X0xEQUREID0gbGliZGhjcGN0bC5hIC4uL2NvbW1vbi9saWJkaGNwLmEgLi4vb21hcGlwL2xpYm9tYXBpLmEgXAorLQkgICAgICAgLi4vYmluZC9saWIvbGliaXJzLmEgLi4vYmluZC9saWIvbGliZG5zLmEgXAorLSAgICAgICAgICAgICAgIC4uL2JpbmQvbGliL2xpYmlzY2NmZy5hIC4uL2JpbmQvbGliL2xpYmlzYy5hCisrCSAgICAgICAkKGxpYmJpbmQpL2xpYmlycy5hICQobGliYmluZCkvbGliZG5zLmEgXAorKyAgICAgICAgICAgICAgICQobGliYmluZCkvbGliaXNjY2ZnLmEgJChsaWJiaW5kKS9saWJpc2MuYQorSW5kZXg6IGRoY3AtNC4zLjAvb21hcGlwL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGhjcC00LjMuMC5vcmlnL29tYXBpcC9NYWtlZmlsZS5hbQorKysrIGRoY3AtNC4zLjAvb21hcGlwL01ha2VmaWxlLmFtCitAQCAtMTAsNiArMTAsNiBAQCBtYW5fTUFOUyA9IG9tYXBpLjMKKyBFWFRSQV9ESVNUID0gJChtYW5fTUFOUykKKyAKKyBzdnRlc3RfU09VUkNFUyA9IHRlc3QuYworLXN2dGVzdF9MREFERCA9IGxpYm9tYXBpLmEgLi4vYmluZC9saWIvbGliaXJzLmEgLi4vYmluZC9saWIvbGliZG5zLmEgXAorLQkJLi4vYmluZC9saWIvbGliaXNjY2ZnLmEgLi4vYmluZC9saWIvbGliaXNjLmEKKytzdnRlc3RfTERBREQgPSBsaWJvbWFwaS5hICQobGliYmluZCkvbGliaXJzLmEgJChsaWJiaW5kKS9saWJkbnMuYSBcCisrCQkkKGxpYmJpbmQpL2xpYmlzY2NmZy5hICQobGliYmluZCkvbGliaXNjLmEKKyAKK0luZGV4OiBkaGNwLTQuMy4wL3JlbGF5L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGhjcC00LjMuMC5vcmlnL3JlbGF5L01ha2VmaWxlLmFtCisrKysgZGhjcC00LjMuMC9yZWxheS9NYWtlZmlsZS5hbQorQEAgLTMsOCArMyw4IEBAIEFNX0NQUEZMQUdTID0gLURMT0NBTFNUQVRFRElSPSciQGxvY2Fsc3QKKyBzYmluX1BST0dSQU1TID0gZGhjcmVsYXkKKyBkaGNyZWxheV9TT1VSQ0VTID0gZGhjcmVsYXkuYworIGRoY3JlbGF5X0xEQUREID0gLi4vY29tbW9uL2xpYmRoY3AuYSAuLi9vbWFwaXAvbGlib21hcGkuYSBcCistCQkgLi4vYmluZC9saWIvbGliaXJzLmEgLi4vYmluZC9saWIvbGliZG5zLmEgXAorLQkJIC4uL2JpbmQvbGliL2xpYmlzY2NmZy5hIC4uL2JpbmQvbGliL2xpYmlzYy5hCisrCQkgJChsaWJiaW5kKS9saWJpcnMuYSAkKGxpYmJpbmQpL2xpYmRucy5hIFwKKysJCSAkKGxpYmJpbmQpL2xpYmlzY2NmZy5hICQobGliYmluZCkvbGliaXNjLmEKKyBtYW5fTUFOUyA9IGRoY3JlbGF5LjgKKyBFWFRSQV9ESVNUID0gJChtYW5fTUFOUykKKyAKK0luZGV4OiBkaGNwLTQuMy4wL3NlcnZlci9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRoY3AtNC4zLjAub3JpZy9zZXJ2ZXIvTWFrZWZpbGUuYW0KKysrKyBkaGNwLTQuMy4wL3NlcnZlci9NYWtlZmlsZS5hbQorQEAgLTE0LDggKzE0LDggQEAgZGhjcGRfU09VUkNFUyA9IGRoY3BkLmMgZGhjcC5jIGJvb3RwLmMgYworIAorIGRoY3BkX0NGTEFHUyA9ICQoTERBUF9DRkxBR1MpCisgZGhjcGRfTERBREQgPSAuLi9jb21tb24vbGliZGhjcC5hIC4uL29tYXBpcC9saWJvbWFwaS5hIFwKKy0JICAgICAgLi4vZGhjcGN0bC9saWJkaGNwY3RsLmEgLi4vYmluZC9saWIvbGliaXJzLmEgXAorLQkgICAgICAuLi9iaW5kL2xpYi9saWJkbnMuYSAuLi9iaW5kL2xpYi9saWJpc2NjZmcuYSAuLi9iaW5kL2xpYi9saWJpc2MuYQorKwkgICAgICAuLi9kaGNwY3RsL2xpYmRoY3BjdGwuYSAkKGxpYmJpbmQpL2xpYmlycy5hIFwKKysJICAgICAgJChsaWJiaW5kKS9saWJkbnMuYSAkKGxpYmJpbmQpL2xpYmlzY2NmZy5hICQobGliYmluZCkvbGliaXNjLmEKKyAKKyBtYW5fTUFOUyA9IGRoY3BkLjggZGhjcGQuY29uZi41IGRoY3BkLmxlYXNlcy41CisgRVhUUkFfRElTVCA9ICQobWFuX01BTlMpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2ZpeHNlcGJ1aWxkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9maXhzZXBidWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGU3NWEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9maXhzZXBidWlsZC5wYXRjaApAQCAtMCwwICsxLDEwOCBAQAorRml4IG91dCBvZiB0cmVlIGJ1aWxkcworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUlAgMjAxMy8wMy8yMQorCitSZWJhc2UgdG8gNC4zLjEKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNsaWVudC9NYWtlZmlsZS5hbSAgfCA2ICsrKystLQorIGNvbW1vbi9NYWtlZmlsZS5hbSAgfCAyICstCisgZGhjcGN0bC9NYWtlZmlsZS5hbSB8IDIgKysKKyBkc3QvTWFrZWZpbGUuYW0gICAgIHwgMiArLQorIG9tYXBpcC9NYWtlZmlsZS5hbSAgfCAyICsrCisgcmVsYXkvTWFrZWZpbGUuYW0gICB8IDIgKy0KKyBzZXJ2ZXIvTWFrZWZpbGUuYW0gIHwgMiArLQorIDcgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NsaWVudC9NYWtlZmlsZS5hbSBiL2NsaWVudC9NYWtlZmlsZS5hbQoraW5kZXggODQxMTk2MC4uMTc0MGY3MiAxMDA2NDQKKy0tLSBhL2NsaWVudC9NYWtlZmlsZS5hbQorKysrIGIvY2xpZW50L01ha2VmaWxlLmFtCitAQCAtNCw2ICs0LDggQEAKKyAjIHByb2R1Y3Rpb24gY29kZS4gU2FkbHksIHdlIGFyZSBub3QgdGhlcmUgeWV0LgorIFNVQkRJUlMgPSAuIHRlc3RzCisgCisrQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMKKysKKyBkaXN0X3N5c2NvbmZfREFUQSA9IGRoY2xpZW50LmNvbmYuZXhhbXBsZQorIHNiaW5fUFJPR1JBTVMgPSBkaGNsaWVudAorIGRoY2xpZW50X1NPVVJDRVMgPSBjbHBhcnNlLmMgZGhjbGllbnQuYyBkaGM2LmMgXAorQEAgLTE3LDggKzE5LDggQEAgRVhUUkFfRElTVCA9ICQobWFuX01BTlMpCisgCisgZGhjbGllbnQubzogZGhjbGllbnQuYworIAkkKENPTVBJTEUpIC1EQ0xJRU5UX1BBVEg9JyJQQVRIPSQoc2JpbmRpcik6L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4iJyBcCistCQkgICAtRExPQ0FMU1RBVEVESVI9JyIkKGxvY2Fsc3RhdGVkaXIpIicgLWMgZGhjbGllbnQuYworKwkJICAgLURMT0NBTFNUQVRFRElSPSciJChsb2NhbHN0YXRlZGlyKSInIC1jICQoc3JjZGlyKS9kaGNsaWVudC5jCisgCisgZGhjNi5vOiBkaGM2LmMKKyAJJChDT01QSUxFKSAtRENMSUVOVF9QQVRIPSciUEFUSD0kKHNiaW5kaXIpOi9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluIicgXAorLQkJICAgLURMT0NBTFNUQVRFRElSPSciJChsb2NhbHN0YXRlZGlyKSInIC1jIGRoYzYuYworKwkJICAgLURMT0NBTFNUQVRFRElSPSciJChsb2NhbHN0YXRlZGlyKSInIC1jICQoc3JjZGlyKS9kaGM2LmMKK2RpZmYgLS1naXQgYS9jb21tb24vTWFrZWZpbGUuYW0gYi9jb21tb24vTWFrZWZpbGUuYW0KK2luZGV4IGVkZGVmMDUuLjVjZTA0NWYgMTAwNjQ0CistLS0gYS9jb21tb24vTWFrZWZpbGUuYW0KKysrKyBiL2NvbW1vbi9NYWtlZmlsZS5hbQorQEAgLTEsNCArMSw0IEBACistQU1fQ1BQRkxBR1MgPSAtSS4uIC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0YXRlZGlyQCInCisrQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMgLUkkKHRvcF9zcmNkaXIpIC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0YXRlZGlyQCInCisgQU1fQ0ZMQUdTID0gJChMREFQX0NGTEFHUykKKyAKKyBub2luc3RfTElCUkFSSUVTID0gbGliZGhjcC5hCitkaWZmIC0tZ2l0IGEvZGhjcGN0bC9NYWtlZmlsZS5hbSBiL2RoY3BjdGwvTWFrZWZpbGUuYW0KK2luZGV4IDI5ODdhNTMuLmNkNzJkNzUgMTAwNjQ0CistLS0gYS9kaGNwY3RsL01ha2VmaWxlLmFtCisrKysgYi9kaGNwY3RsL01ha2VmaWxlLmFtCitAQCAtMSwzICsxLDUgQEAKKytBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcyAtSSQodG9wX3NyY2RpcikKKysKKyBiaW5fUFJPR1JBTVMgPSBvbXNoZWxsCisgbGliX0xJQlJBUklFUyA9IGxpYmRoY3BjdGwuYQorIG5vaW5zdF9QUk9HUkFNUyA9IGNsdGVzdAorZGlmZiAtLWdpdCBhL2RzdC9NYWtlZmlsZS5hbSBiL2RzdC9NYWtlZmlsZS5hbQoraW5kZXggODkzN2ZlOC4uYTE0Nzk4YiAxMDA2NDQKKy0tLSBhL2RzdC9NYWtlZmlsZS5hbQorKysrIGIvZHN0L01ha2VmaWxlLmFtCitAQCAtMSw0ICsxLDQgQEAKKy1BTV9DUFBGTEFHUyA9IC1ETUlOSVJFU19MSUIgLURITUFDX01ENQorK0FNX0NQUEZMQUdTID0gLURNSU5JUkVTX0xJQiAtREhNQUNfTUQ1IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcworIAorIGxpYl9MSUJSQVJJRVMgPSBsaWJkc3QuYQorIAorZGlmZiAtLWdpdCBhL29tYXBpcC9NYWtlZmlsZS5hbSBiL29tYXBpcC9NYWtlZmlsZS5hbQoraW5kZXggNTA3NDQ3OS4uOWMwZmFiMyAxMDA2NDQKKy0tLSBhL29tYXBpcC9NYWtlZmlsZS5hbQorKysrIGIvb21hcGlwL01ha2VmaWxlLmFtCitAQCAtMSwzICsxLDUgQEAKKytBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcworKworIGxpYl9MSUJSQVJJRVMgPSBsaWJvbWFwaS5hCisgbm9pbnN0X1BST0dSQU1TID0gc3Z0ZXN0CisgCitkaWZmIC0tZ2l0IGEvcmVsYXkvTWFrZWZpbGUuYW0gYi9yZWxheS9NYWtlZmlsZS5hbQoraW5kZXggZWM3MmEzMS4uZjg0MjA3MSAxMDA2NDQKKy0tLSBhL3JlbGF5L01ha2VmaWxlLmFtCisrKysgYi9yZWxheS9NYWtlZmlsZS5hbQorQEAgLTEsNCArMSw0IEBACistQU1fQ1BQRkxBR1MgPSAtRExPQ0FMU1RBVEVESVI9JyJAbG9jYWxzdGF0ZWRpckAiJworK0FNX0NQUEZMQUdTID0gLURMT0NBTFNUQVRFRElSPSciQGxvY2Fsc3RhdGVkaXJAIicgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGVzCisgCisgc2Jpbl9QUk9HUkFNUyA9IGRoY3JlbGF5CisgZGhjcmVsYXlfU09VUkNFUyA9IGRoY3JlbGF5LmMKK2RpZmYgLS1naXQgYS9zZXJ2ZXIvTWFrZWZpbGUuYW0gYi9zZXJ2ZXIvTWFrZWZpbGUuYW0KK2luZGV4IGE0NDZmMGIuLmQwYjg3M2EgMTAwNjQ0CistLS0gYS9zZXJ2ZXIvTWFrZWZpbGUuYW0KKysrKyBiL3NlcnZlci9NYWtlZmlsZS5hbQorQEAgLTQsNyArNCw3IEBACisgIyBwcm9kdWN0aW9uIGNvZGUuIFNhZGx5LCB3ZSBhcmUgbm90IHRoZXJlIHlldC4KKyBTVUJESVJTID0gLiB0ZXN0cworIAorLUFNX0NQUEZMQUdTID0gLUkuLiAtRExPQ0FMU1RBVEVESVI9JyJAbG9jYWxzdGF0ZWRpckAiJworK0FNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpIC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0YXRlZGlyQCInIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcworIAorIGRpc3Rfc3lzY29uZl9EQVRBID0gZGhjcGQuY29uZi5leGFtcGxlCisgc2Jpbl9QUk9HUkFNUyA9IGRoY3BkCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvbGluay13aXRoLWxjcnlwdG8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2xpbmstd2l0aC1sY3J5cHRvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZTEwYjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2xpbmstd2l0aC1sY3J5cHRvLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK0F1dGhvcjogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorRGF0ZTogICBUaHUgRmViIDIgMjM6NTk6MTEgMjAxMiArMDIwMAorCitGcm9tIDQuMi4wIGZpbmFsIHJlbGVhc2UsIC1sY3J5cHRvIGNoZWNrIHdhcyByZW1vdmVkIGFuZCB3ZSBjb21waWxlIHN0YXRpYyBsaWJyYXJpZXMKK2Zyb20gYmluZCB0aGF0IGFyZSBsaW5rZWQgdG8gbGliY3J5cHRvLiBUaGlzIGlzIHdoeSBpIGFkZGVkIGEgcGF0Y2ggaW4gb3JkZXIgdG8gYWRkCistbGNyeXB0byB0byBMSUJTLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGRoY3AtNC4yLjMtUDItcjAvZGhjcC00LjIuMy1QMi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkaGNwLTQuMi4zLVAyLm9yaWcvY29uZmlndXJlLmFjCTIwMTItMDItMDIgMTg6MDQ6MjAuODQzMDIzMTk2ICswMjAwCisrKysgZGhjcC00LjIuMy1QMi9jb25maWd1cmUuYWMJMjAxMi0wMi0wMiAxNzo1ODoxNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC00NTYsNiArNDU2LDEwIEBACisgIyBMb29rIGZvciBvcHRpb25hbCBoZWFkZXJzLgorIEFDX0NIRUNLX0hFQURFUlMoc3lzL3NvY2tldC5oIG5ldC9pZl9kbC5oIG5ldC9pZjYuaCByZWdleC5oKQorIAorKyMgZmluZCBhbiBNRDUgbGlicmFyeQorK0FDX1NFQVJDSF9MSUJTKE1ENV9Jbml0LCBbY3J5cHRvXSkKKytBQ19TRUFSQ0hfTElCUyhNRDVJbml0LCBbY3J5cHRvXSkKKysKKyAjIFNvbGFyaXMgbmVlZHMgc29tZSBsaWJyYXJpZXMgZm9yIGZ1bmN0aW9ucworIEFDX1NFQVJDSF9MSUJTKHNvY2tldCwgW3NvY2tldF0pCisgQUNfU0VBUkNIX0xJQlMoaW5ldF9udG9hLCBbbnNsXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvcmVwbGFjZS1pZmNvbmZpZy1yb3V0ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvcmVwbGFjZS1pZmNvbmZpZy1yb3V0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWRkNmE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9yZXBsYWNlLWlmY29uZmlnLXJvdXRlLnBhdGNoCkBAIC0wLDAgKzEsMTc2IEBACitGb3VuZCB0aGlzIHBhdGNoIGhlcmU6CitodHRwczovL2xpc3RzLmlzYy5vcmcvcGlwZXJtYWlsL2RoY3AtdXNlcnMvMjAxMS1KYW51YXJ5LzAxMjkxMC5odG1sCisKK2FuZCBtYWRlIHNvbWUgYWRqdXN0bWVudHMvdXBkYXRlcyB0byBtYWtlIGl0IHdvcmsgd2l0aCB0aGlzIHZlcnNpb24uCitXYXNuJ3QgYWJsZSB0byBmaW5kIHRoYXQgd2h5IHRoaXMgcGF0Y2ggd2FzIG5vdCBhY2NlcHRlZCBieSBJU0MgREhDUCBkZXZlbG9wZXJzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTXVoYW1tYWQgU2hha2VlbCA8bXVoYW1tYWRfc2hha2VlbEBtZW50b3IuY29tPgorCistLS0gZGhjcC00LjIuNS1QMS9jbGllbnQvc2NyaXB0cy9saW51eC5vcmlnCTIwMTMtMDktMDQgMTI6MjI6NTUuMDAwMDAwMDAwICswNTAwCisrKysgZGhjcC00LjIuNS1QMS9jbGllbnQvc2NyaXB0cy9saW51eAkyMDEzLTA5LTA0IDEyOjUyOjE5LjA2ODc2MTUxOCArMDUwMAorQEAgLTEwMywxNyArMTAzLDExIEBACisgaWYgWyB4JG9sZF9icm9hZGNhc3RfYWRkcmVzcyAhPSB4IF07IHRoZW4KKyAgIG9sZF9icm9hZGNhc3RfYXJnPSJicm9hZGNhc3QgJG9sZF9icm9hZGNhc3RfYWRkcmVzcyIKKyBmaQorLWlmIFsgeCRuZXdfc3VibmV0X21hc2sgIT0geCBdOyB0aGVuCistICBuZXdfc3VibmV0X2FyZz0ibmV0bWFzayAkbmV3X3N1Ym5ldF9tYXNrIgorLWZpCistaWYgWyB4JG9sZF9zdWJuZXRfbWFzayAhPSB4IF07IHRoZW4KKy0gIG9sZF9zdWJuZXRfYXJnPSJuZXRtYXNrICRvbGRfc3VibmV0X21hc2siCistZmkKKy1pZiBbIHgkYWxpYXNfc3VibmV0X21hc2sgIT0geCBdOyB0aGVuCistICBhbGlhc19zdWJuZXRfYXJnPSJuZXRtYXNrICRhbGlhc19zdWJuZXRfbWFzayIKKytpZiBbIC1uICIkbmV3X3N1Ym5ldF9tYXNrIiBdOyB0aGVuCisrICAgIG5ld19tYXNrPSIvJG5ld19zdWJuZXRfbWFzayIKKyBmaQorLWlmIFsgeCRuZXdfaW50ZXJmYWNlX210dSAhPSB4IF07IHRoZW4KKy0gIG10dV9hcmc9Im10dSAkbmV3X2ludGVyZmFjZV9tdHUiCisraWYgWyAtbiAiJGFsaWFzX3N1Ym5ldF9tYXNrIiBdOyB0aGVuCisrICAgIGFsaWFzX21hc2s9Ii8kYWxpYXNfc3VibmV0X21hc2siCisgZmkKKyBpZiBbIHgkSUZfTUVUUklDICE9IHggXTsgdGhlbgorICAgbWV0cmljX2FyZz0ibWV0cmljICRJRl9NRVRSSUMiCitAQCAtMTI3LDkgKzEyMSw5IEBACisgaWYgWyB4JHJlYXNvbiA9IHhQUkVJTklUIF07IHRoZW4KKyAgIGlmIFsgeCRhbGlhc19pcF9hZGRyZXNzICE9IHggXTsgdGhlbgorICAgICAjIEJyaW5nIGRvd24gYWxpYXMgaW50ZXJmYWNlLiBJdHMgcm91dGVzIHdpbGwgZGlzYXBwZWFyIHRvby4KKy0gICAgaWZjb25maWcgJGludGVyZmFjZTowLSBpbmV0IDAKKysgICAgJHtpcH0gLTQgYWRkciBmbHVzaCBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfTowCisgICBmaQorLSAgaWZjb25maWcgJGludGVyZmFjZSAwIHVwCisrICAke2lwfSBsaW5rIHNldCBkZXYgJHtpbnRlcmZhY2V9IHVwCisgCisgICAjIFdlIG5lZWQgdG8gZ2l2ZSB0aGUga2VybmVsIHNvbWUgdGltZSB0byBnZXQgdGhlIGludGVyZmFjZSB1cC4KKyAgIHNsZWVwIDEKK0BAIC0xNTYsMjUgKzE1MCwzMCBAQAorICAgaWYgWyB4JG9sZF9pcF9hZGRyZXNzICE9IHggXSAmJiBbIHgkYWxpYXNfaXBfYWRkcmVzcyAhPSB4IF0gJiYgXAorIAkJWyB4JGFsaWFzX2lwX2FkZHJlc3MgIT0geCRvbGRfaXBfYWRkcmVzcyBdOyB0aGVuCisgICAgICMgUG9zc2libGUgbmV3IGFsaWFzLiBSZW1vdmUgb2xkIGFsaWFzLgorLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlOjAtIGluZXQgMAorKyAgICAke2lwfSAtNCBhZGRyIGZsdXNoIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9OjAKKyAgIGZpCisgICBpZiBbIHgkb2xkX2lwX2FkZHJlc3MgIT0geCBdICYmIFsgeCRvbGRfaXBfYWRkcmVzcyAhPSB4JG5ld19pcF9hZGRyZXNzIF07IHRoZW4KKyAgICAgIyBJUCBhZGRyZXNzIGNoYW5nZWQuIEJyaW5naW5nIGRvd24gdGhlIGludGVyZmFjZSB3aWxsIGRlbGV0ZSBhbGwgcm91dGVzLAorICAgICAjIGFuZCBjbGVhciB0aGUgQVJQIGNhY2hlLgorLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlIGluZXQgMCBkb3duCisrICAgICR7aXB9IC00IGFkZHIgZmx1c2ggZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX0KKyAKKyAgIGZpCisgICBpZiBbIHgkb2xkX2lwX2FkZHJlc3MgPSB4IF0gfHwgWyB4JG9sZF9pcF9hZGRyZXNzICE9IHgkbmV3X2lwX2FkZHJlc3MgXSB8fCBcCisgICAgICBbIHgkcmVhc29uID0geEJPVU5EIF0gfHwgWyB4JHJlYXNvbiA9IHhSRUJPT1QgXTsgdGhlbgorIAorLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlIGluZXQgJG5ld19pcF9hZGRyZXNzICRuZXdfc3VibmV0X2FyZyBcCistCQkJCQkkbmV3X2Jyb2FkY2FzdF9hcmcgJG10dV9hcmcKKysgICAgJHtpcH0gLTQgYWRkciBhZGQgJHtuZXdfaXBfYWRkcmVzc30ke25ld19tYXNrfSAke25ld19icm9hZGNhc3RfYXJnfSBcCisrICAgICAgICAgICAgICAgIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9CisrICAgIGlmIFsgLW4gIiRuZXdfaW50ZXJmYWNlX210dSIgXTsgdGhlbgorKyAgICAgICMgc2V0IE1UVQorKyAgICAgICR7aXB9IGxpbmsgc2V0IGRldiAke2ludGVyZmFjZX0gbXR1ICR7bmV3X2ludGVyZmFjZV9tdHV9CisrICAgIGZpCisgICAgICMgQWRkIGEgbmV0d29yayByb3V0ZSB0byB0aGUgY29tcHV0ZWQgbmV0d29yayBhZGRyZXNzLgorICAgICBmb3Igcm91dGVyIGluICRuZXdfcm91dGVyczsgZG8KKyAgICAgICBpZiBbICJ4JG5ld19zdWJuZXRfbWFzayIgPSAieDI1NS4yNTUuMjU1LjI1NSIgXSA7IHRoZW4KKy0Jcm91dGUgYWRkIC1ob3N0ICRyb3V0ZXIgZGV2ICRpbnRlcmZhY2UKKysgICAgICAgICR7aXB9IC00IHJvdXRlIGFkZCAke3JvdXRlcn0gZGV2ICRpbnRlcmZhY2UgPi9kZXYvbnVsbCAyPiYxCisgICAgICAgZmkKKy0gICAgICByb3V0ZSBhZGQgZGVmYXVsdCBndyAkcm91dGVyICRtZXRyaWNfYXJnIGRldiAkaW50ZXJmYWNlCisrICAgICAgJHtpcH0gLTQgcm91dGUgYWRkIGRlZmF1bHQgdmlhICR7cm91dGVyfSBkZXYgJHtpbnRlcmZhY2V9IFwKKysgICAgICAgICR7bWV0cmljX2FyZ30gPi9kZXYvbnVsbCAyPiYxCisgICAgIGRvbmUKKyAgIGVsc2UKKyAgICAgIyB3ZSBoYXZlbid0IGNoYW5nZWQgdGhlIGFkZHJlc3MsIGhhdmUgd2UgY2hhbmdlZCBvdGhlciBvcHRpb25zICAgICAgICAgICAKK0BAIC0xODIsMjEgKzE4MSwyMyBAQAorICAgICBpZiBbIHgkbmV3X3JvdXRlcnMgIT0geCBdICYmIFsgeCRuZXdfcm91dGVycyAhPSB4JG9sZF9yb3V0ZXJzIF0gOyB0aGVuCisgICAgICAgIyBpZiB3ZSd2ZSBjaGFuZ2VkIHJvdXRlcnMgZGVsZXRlIHRoZSBvbGQgYW5kIGFkZCB0aGUgbmV3LgorICAgICAgIGZvciByb3V0ZXIgaW4gJG9sZF9yb3V0ZXJzOyBkbworLSAgICAgICAgcm91dGUgZGVsIGRlZmF1bHQgZ3cgJHJvdXRlcgorKyAgICAgICAgJHtpcH0gLTQgcm91dGUgZGVsZXRlIGRlZmF1bHQgdmlhICR7cm91dGVyfQorICAgICAgIGRvbmUKKyAgICAgICBmb3Igcm91dGVyIGluICRuZXdfcm91dGVyczsgZG8KKyAgICAgICAgIGlmIFsgIngkbmV3X3N1Ym5ldF9tYXNrIiA9ICJ4MjU1LjI1NS4yNTUuMjU1IiBdIDsgdGhlbgorLQkgIHJvdXRlIGFkZCAtaG9zdCAkcm91dGVyIGRldiAkaW50ZXJmYWNlCistCWZpCistCXJvdXRlIGFkZCBkZWZhdWx0IGd3ICRyb3V0ZXIgJG1ldHJpY19hcmcgZGV2ICRpbnRlcmZhY2UKKysJICAgICAgJHtpcH0gLTQgcm91dGUgYWRkICR7cm91dGVyfSBkZXYgJGludGVyZmFjZSA+L2Rldi9udWxsIDI+JjEKKysJICAgIGZpCisrICAgICAgICAke2lwfSAtNCByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgJHtyb3V0ZXJ9IGRldiAke2ludGVyZmFjZX0gXAorKyAgICAgICAgICAke21ldHJpY19hcmd9ID4vZGV2L251bGwgMj4mMQorICAgICAgIGRvbmUKKyAgICAgZmkKKyAgIGZpCisgICBpZiBbIHgkbmV3X2lwX2FkZHJlc3MgIT0geCRhbGlhc19pcF9hZGRyZXNzIF0gJiYgWyB4JGFsaWFzX2lwX2FkZHJlc3MgIT0geCBdOworICAgIHRoZW4KKy0gICAgaWZjb25maWcgJGludGVyZmFjZTowLSBpbmV0IDAKKy0gICAgaWZjb25maWcgJGludGVyZmFjZTowIGluZXQgJGFsaWFzX2lwX2FkZHJlc3MgJGFsaWFzX3N1Ym5ldF9hcmcKKy0gICAgcm91dGUgYWRkIC1ob3N0ICRhbGlhc19pcF9hZGRyZXNzICRpbnRlcmZhY2U6MAorKyAgICAke2lwfSAtNCBhZGRyIGZsdXNoIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9OjAKKysgICAgJHtpcH0gLTQgYWRkciBhZGQgJHthbGlhc19pcF9hZGRyZXNzfSR7YWxpYXNfbWFza30gXAorKyAgICAgICAgZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX06MAorKyAgICAke2lwfSAtNCByb3V0ZSBhZGQgJHthbGlhc19pcF9hZGRyZXNzfSBkZXYgJHtpbnRlcmZhY2V9ID4vZGV2L251bGwgMj4mMQorICAgZmkKKyAgIG1ha2VfcmVzb2x2X2NvbmYKKyAgIGV4aXRfd2l0aF9ob29rcyAwCitAQCAtMjA2LDQyICsyMDcsNDkgQEAKKyAgICB8fCBbIHgkcmVhc29uID0geFNUT1AgXTsgdGhlbgorICAgaWYgWyB4JGFsaWFzX2lwX2FkZHJlc3MgIT0geCBdOyB0aGVuCisgICAgICMgVHVybiBvZmYgYWxpYXMgaW50ZXJmYWNlLgorLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlOjAtIGluZXQgMAorKyAgICAke2lwfSAtNCBhZGRyIGZsdXNoIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9OjAKKyAgIGZpCisgICBpZiBbIHgkb2xkX2lwX2FkZHJlc3MgIT0geCBdOyB0aGVuCisgICAgICMgU2h1dCBkb3duIGludGVyZmFjZSwgd2hpY2ggd2lsbCBkZWxldGUgcm91dGVzIGFuZCBjbGVhciBhcnAgY2FjaGUuCistICAgIGlmY29uZmlnICRpbnRlcmZhY2UgaW5ldCAwIGRvd24KKysgICAgJHtpcH0gLTQgYWRkciBmbHVzaCBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfQorICAgZmkKKyAgIGlmIFsgeCRhbGlhc19pcF9hZGRyZXNzICE9IHggXTsgdGhlbgorLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlOjAgaW5ldCAkYWxpYXNfaXBfYWRkcmVzcyAkYWxpYXNfc3VibmV0X2FyZworLSAgICByb3V0ZSBhZGQgLWhvc3QgJGFsaWFzX2lwX2FkZHJlc3MgJGludGVyZmFjZTowCisrICAgICR7aXB9IC00IGFkZHIgYWRkICR7YWxpYXNfaXBfYWRkcmVzc30ke2FsaWFzX25ldHdvcmtfYXJnfSBcCisrICAgICAgICBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfTowCisrICAgICR7aXB9IC00IHJvdXRlIGFkZCAke2FsaWFzX2lwX2FkZHJlc3N9IGRldiAke2ludGVyZmFjZX0gPi9kZXYvbnVsbCAyPiYxCisgICBmaQorICAgZXhpdF93aXRoX2hvb2tzIDAKKyBmaQorIAorIGlmIFsgeCRyZWFzb24gPSB4VElNRU9VVCBdOyB0aGVuCisgICBpZiBbIHgkYWxpYXNfaXBfYWRkcmVzcyAhPSB4IF07IHRoZW4KKy0gICAgaWZjb25maWcgJGludGVyZmFjZTowLSBpbmV0IDAKKysgICAgJHtpcH0gLTQgYWRkciBmbHVzaCBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfTowCisrICBmaQorKyAgJHtpcH0gLTQgYWRkciBhZGQgJHtuZXdfaXBfYWRkcmVzc30ke25ld19tYXNrfSAke25ld19icm9hZGNhc3RfYXJnfSBcCisrICAgICAgICAgICAgZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX0KKysgIGlmIFsgLW4gIiRuZXdfaW50ZXJmYWNlX210dSIgXTsgdGhlbgorKyAgICAjIHNldCBNVFUKKysgICAgaXAgbGluayBzZXQgZGV2ICR7aW50ZXJmYWNlfSBtdHUgJHtuZXdfaW50ZXJmYWNlX210dX0KKyAgIGZpCistICBpZmNvbmZpZyAkaW50ZXJmYWNlIGluZXQgJG5ld19pcF9hZGRyZXNzICRuZXdfc3VibmV0X2FyZyBcCistCQkJCQkkbmV3X2Jyb2FkY2FzdF9hcmcgJG10dV9hcmcKKyAgIHNldCAkbmV3X3JvdXRlcnMKKyAgIGlmIHBpbmcgLXEgLWMgMSAkMTsgdGhlbgorICAgICBpZiBbIHgkbmV3X2lwX2FkZHJlc3MgIT0geCRhbGlhc19pcF9hZGRyZXNzIF0gJiYgXAorIAkJCVsgeCRhbGlhc19pcF9hZGRyZXNzICE9IHggXTsgdGhlbgorLSAgICAgIGlmY29uZmlnICRpbnRlcmZhY2U6MCBpbmV0ICRhbGlhc19pcF9hZGRyZXNzICRhbGlhc19zdWJuZXRfYXJnCistICAgICAgcm91dGUgYWRkIC1ob3N0ICRhbGlhc19pcF9hZGRyZXNzIGRldiAkaW50ZXJmYWNlOjAKKysgICAgICAke2lwfSAtNCBhZGRyIGFkZCAke2FsaWFzX2lwX2FkZHJlc3N9JHthbGlhc19tYXNrfSBcCisrICAgICAgICAgICAgZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX06MAorKyAgICAgICR7aXB9IC00IHJvdXRlIGFkZCAke2FsaWFzX2lwX2FkZHJlc3N9IGRldiAke2ludGVyZmFjZX0gPi9kZXYvbnVsbCAyPiYxCisgICAgIGZpCisgICAgIGZvciByb3V0ZXIgaW4gJG5ld19yb3V0ZXJzOyBkbworICAgICAgIGlmIFsgIngkbmV3X3N1Ym5ldF9tYXNrIiA9ICJ4MjU1LjI1NS4yNTUuMjU1IiBdIDsgdGhlbgorLQlyb3V0ZSBhZGQgLWhvc3QgJHJvdXRlciBkZXYgJGludGVyZmFjZQorKwkgICAgJHtpcH0gLTQgcm91dGUgYWRkICR7cm91dGVyfSBkZXYgJGludGVyZmFjZSA+L2Rldi9udWxsIDI+JjEKKyAgICAgICBmaQorLSAgICAgIHJvdXRlIGFkZCBkZWZhdWx0IGd3ICRyb3V0ZXIgJG1ldHJpY19hcmcgZGV2ICRpbnRlcmZhY2UKKysgICAgICAke2lwfSAtNCByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgJHtyb3V0ZXJ9IGRldiAke2ludGVyZmFjZX0gXAorKyAgICAgICAgJHttZXRyaWNfYXJnfSA+L2Rldi9udWxsIDI+JjEKKyAgICAgZG9uZQorICAgICBtYWtlX3Jlc29sdl9jb25mCisgICAgIGV4aXRfd2l0aF9ob29rcyAwCisgICBmaQorLSAgaWZjb25maWcgJGludGVyZmFjZSBpbmV0IDAgZG93bgorKyAgJHtpcH0gLTQgYWRkciBmbHVzaCBkZXYgJHtpbnRlcmZhY2V9CisgICBleGl0X3dpdGhfaG9va3MgMQorIGZpCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwXzQuMy4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcF80LjMuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGEwNWZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcF80LjMuMi5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIGRoY3AuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kaGNwLTMuMC4zLWRoY2xpZW50LWRidXMucGF0Y2g7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtZXh0ZXJuYWwtYmluZC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vbGluay13aXRoLWxjcnlwdG8ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2ZpeHNlcGJ1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kaGNsaWVudC1zY3JpcHQtZHJvcC1yZXNvbHYuY29uZi5kaGNsaWVudC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcmVwbGFjZS1pZmNvbmZpZy1yb3V0ZS5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjVhMjg0ODc1ZGQyYzEyZGRkMzg4NDE2ZDY5MTU2YTY3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYyNDZjOWIzNTg3NTlmNmNkY2M0NTEwNGNhYWY3NmU3MzJhMjExZGJiYmJmNjRhMjFmNDk5YzhkYjEyOTgxNjUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kZWZhdWx0LXJlbGF5IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGVmYXVsdC1yZWxheQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTYxZjAxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGVmYXVsdC1yZWxheQpAQCAtMCwwICsxLDEyIEBACisjIERlZmF1bHRzIGZvciBkaGNwLXJlbGF5IGluaXRzY3JpcHQKKyMgc291cmNlZCBieSAvZXRjL2luaXQuZC9kaGNwLXJlbGF5CisKKyMgV2hhdCBzZXJ2ZXJzIHNob3VsZCB0aGUgREhDUCByZWxheSBmb3J3YXJkIHJlcXVlc3RzIHRvPworIyBlLmc6IFNFUlZFUlM9IjE5Mi4xNjguMC4xIgorU0VSVkVSUz0iIgorCisjIE9uIHdoYXQgaW50ZXJmYWNlcyBzaG91bGQgdGhlIERIQ1AgcmVsYXkgKGRocmVsYXkpIHNlcnZlIERIQ1AgcmVxdWVzdHM/CitJTlRFUkZBQ0VTPSIiCisKKyMgQWRkaXRpb25hbCBvcHRpb25zIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUgREhDUCByZWxheSBkYWVtb24/CitPUFRJT05TPSIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kZWZhdWx0LXNlcnZlciBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RlZmF1bHQtc2VydmVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzODVkMTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kZWZhdWx0LXNlcnZlcgpAQCAtMCwwICsxLDcgQEAKKyMgRGVmYXVsdHMgZm9yIGRoY3AgaW5pdHNjcmlwdAorIyBzb3VyY2VkIGJ5IC9ldGMvaW5pdC5kL2RoY3Atc2VydmVyCisjIGluc3RhbGxlZCBhdCAvZXRjL2RlZmF1bHQvZGhjcC1zZXJ2ZXIgYnkgdGhlIG1haW50YWluZXIgc2NyaXB0cworCisjIE9uIHdoYXQgaW50ZXJmYWNlcyBzaG91bGQgdGhlIERIQ1Agc2VydmVyIChkaGNwZCkgc2VydmUgREhDUCByZXF1ZXN0cz8KKyMgICAgICAgU2VwYXJhdGUgbXVsdGlwbGUgaW50ZXJmYWNlcyB3aXRoIHNwYWNlcywgZS5nLiAiZXRoMCBldGgxIi4KK0lOVEVSRkFDRVM9IiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY2xpZW50LmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNsaWVudC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNmRjZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNsaWVudC5jb25mCkBAIC0wLDAgKzEsNTAgQEAKKyMgQ29uZmlndXJhdGlvbiBmaWxlIGZvciAvc2Jpbi9kaGNsaWVudCwgd2hpY2ggaXMgaW5jbHVkZWQgaW4gRGViaWFuJ3MKKyMJZGhjcDMtY2xpZW50IHBhY2thZ2UuCisjCisjIFRoaXMgaXMgYSBzYW1wbGUgY29uZmlndXJhdGlvbiBmaWxlIGZvciBkaGNsaWVudC4gU2VlIGRoY2xpZW50LmNvbmYncworIwltYW4gcGFnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3ludGF4IG9mIHRoaXMgZmlsZQorIwlhbmQgYSBtb3JlIGNvbXByZWhlbnNpdmUgbGlzdCBvZiB0aGUgcGFyYW1ldGVycyB1bmRlcnN0b29kIGJ5CisjCWRoY2xpZW50LgorIworIyBOb3JtYWxseSwgaWYgdGhlIERIQ1Agc2VydmVyIHByb3ZpZGVzIHJlYXNvbmFibGUgaW5mb3JtYXRpb24gYW5kIGRvZXMKKyMJbm90IGxlYXZlIGFueXRoaW5nIG91dCAobGlrZSB0aGUgZG9tYWluIG5hbWUsIGZvciBleGFtcGxlKSwgdGhlbgorIwlmZXcgY2hhbmdlcyBtdXN0IGJlIG1hZGUgdG8gdGhpcyBmaWxlLCBpZiBhbnkuCisjCisKKyNzZW5kIGhvc3QtbmFtZSAiYW5kYXJlLmZ1Z3VlLmNvbSI7Cisjc2VuZCBkaGNwLWNsaWVudC1pZGVudGlmaWVyIDE6MDphMDoyNDphYjpmYjo5YzsKKyNzZW5kIGRoY3AtbGVhc2UtdGltZSAzNjAwOworI3N1cGVyc2VkZSBkb21haW4tbmFtZSAiZnVndWUuY29tIGhvbWUudml4LmNvbSI7CisjcHJlcGVuZCBkb21haW4tbmFtZS1zZXJ2ZXJzIDEyNy4wLjAuMTsKK3JlcXVlc3Qgc3VibmV0LW1hc2ssIGJyb2FkY2FzdC1hZGRyZXNzLCB0aW1lLW9mZnNldCwgcm91dGVycywKKwlkb21haW4tbmFtZSwgZG9tYWluLW5hbWUtc2VydmVycywgaG9zdC1uYW1lLAorCW5ldGJpb3MtbmFtZS1zZXJ2ZXJzLCBuZXRiaW9zLXNjb3BlOworI3JlcXVpcmUgc3VibmV0LW1hc2ssIGRvbWFpbi1uYW1lLXNlcnZlcnM7CisjdGltZW91dCA2MDsKKyNyZXRyeSA2MDsKKyNyZWJvb3QgMTA7Cisjc2VsZWN0LXRpbWVvdXQgNTsKKyNpbml0aWFsLWludGVydmFsIDI7Cisjc2NyaXB0ICIvZXRjL2RoY3AzL2RoY2xpZW50LXNjcmlwdCI7CisjbWVkaWEgIi1saW5rMCAtbGluazEgLWxpbmsyIiwgImxpbmswIGxpbmsxIjsKKyNyZWplY3QgMTkyLjMzLjEzNy4yMDk7CisKKyNhbGlhcyB7CisjICBpbnRlcmZhY2UgImV0aDAiOworIyAgZml4ZWQtYWRkcmVzcyAxOTIuNS41LjIxMzsKKyMgIG9wdGlvbiBzdWJuZXQtbWFzayAyNTUuMjU1LjI1NS4yNTU7CisjfQorCisjbGVhc2UgeworIyAgaW50ZXJmYWNlICJldGgwIjsKKyMgIGZpeGVkLWFkZHJlc3MgMTkyLjMzLjEzNy4yMDA7CisjICBtZWRpdW0gImxpbmswIGxpbmsxIjsKKyMgIG9wdGlvbiBob3N0LW5hbWUgImFuZGFyZS5zd2lmdG1lZGlhLmNvbSI7CisjICBvcHRpb24gc3VibmV0LW1hc2sgMjU1LjI1NS4yNTUuMDsKKyMgIG9wdGlvbiBicm9hZGNhc3QtYWRkcmVzcyAxOTIuMzMuMTM3LjI1NTsKKyMgIG9wdGlvbiByb3V0ZXJzIDE5Mi4zMy4xMzcuMjUwOworIyAgb3B0aW9uIGRvbWFpbi1uYW1lLXNlcnZlcnMgMTI3LjAuMC4xOworIyAgcmVuZXcgMiAyMDAwLzEvMTIgMDA6MDA6MDE7CisjICByZWJpbmQgMiAyMDAwLzEvMTIgMDA6MDA6MDE7CisjICBleHBpcmUgMiAyMDAwLzEvMTIgMDA6MDA6MDE7CisjfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjcGQuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3BkLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwMWMwZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3BkLmNvbmYKQEAgLTAsMCArMSwxMDggQEAKKyMKKyMgU2FtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgSVNDIGRoY3BkIGZvciBEZWJpYW4KKyMKKyMgJElkOiBkaGNwZC5jb25mLHYgMS4xLjEuMSAyMDAyLzA1LzIxIDAwOjA3OjQ0IHBlbG95IEV4cCAkCisjCisKKyMgVGhlIGRkbnMtdXBkYXRlcy1zdHlsZSBwYXJhbWV0ZXIgY29udHJvbHMgd2hldGhlciBvciBub3QgdGhlIHNlcnZlciB3aWxsCisjIGF0dGVtcHQgdG8gZG8gYSBETlMgdXBkYXRlIHdoZW4gYSBsZWFzZSBpcyBjb25maXJtZWQuIFdlIGRlZmF1bHQgdG8gdGhlCisjIGJlaGF2aW9yIG9mIHRoZSB2ZXJzaW9uIDIgcGFja2FnZXMgKCdub25lJywgc2luY2UgREhDUCB2MiBkaWRuJ3QKKyMgaGF2ZSBzdXBwb3J0IGZvciBERE5TLikKK2RkbnMtdXBkYXRlLXN0eWxlIG5vbmU7CisKKyMgb3B0aW9uIGRlZmluaXRpb25zIGNvbW1vbiB0byBhbGwgc3VwcG9ydGVkIG5ldHdvcmtzLi4uCitvcHRpb24gZG9tYWluLW5hbWUgImV4YW1wbGUub3JnIjsKK29wdGlvbiBkb21haW4tbmFtZS1zZXJ2ZXJzIG5zMS5leGFtcGxlLm9yZywgbnMyLmV4YW1wbGUub3JnOworCitkZWZhdWx0LWxlYXNlLXRpbWUgNjAwOworbWF4LWxlYXNlLXRpbWUgNzIwMDsKKworIyBJZiB0aGlzIERIQ1Agc2VydmVyIGlzIHRoZSBvZmZpY2lhbCBESENQIHNlcnZlciBmb3IgdGhlIGxvY2FsCisjIG5ldHdvcmssIHRoZSBhdXRob3JpdGF0aXZlIGRpcmVjdGl2ZSBzaG91bGQgYmUgdW5jb21tZW50ZWQuCisjYXV0aG9yaXRhdGl2ZTsKKworIyBVc2UgdGhpcyB0byBzZW5kIGRoY3AgbG9nIG1lc3NhZ2VzIHRvIGEgZGlmZmVyZW50IGxvZyBmaWxlICh5b3UgYWxzbworIyBoYXZlIHRvIGhhY2sgc3lzbG9nLmNvbmYgdG8gY29tcGxldGUgdGhlIHJlZGlyZWN0aW9uKS4KK2xvZy1mYWNpbGl0eSBsb2NhbDc7CisKKyMgTm8gc2VydmljZSB3aWxsIGJlIGdpdmVuIG9uIHRoaXMgc3VibmV0LCBidXQgZGVjbGFyaW5nIGl0IGhlbHBzIHRoZSAKKyMgREhDUCBzZXJ2ZXIgdG8gdW5kZXJzdGFuZCB0aGUgbmV0d29yayB0b3BvbG9neS4KKworI3N1Ym5ldCAxMC4xNTIuMTg3LjAgbmV0bWFzayAyNTUuMjU1LjI1NS4wIHsKKyN9CisKKyMgVGhpcyBpcyBhIHZlcnkgYmFzaWMgc3VibmV0IGRlY2xhcmF0aW9uLgorCisjc3VibmV0IDEwLjI1NC4yMzkuMCBuZXRtYXNrIDI1NS4yNTUuMjU1LjIyNCB7CisjICByYW5nZSAxMC4yNTQuMjM5LjEwIDEwLjI1NC4yMzkuMjA7CisjICBvcHRpb24gcm91dGVycyBydHItMjM5LTAtMS5leGFtcGxlLm9yZywgcnRyLTIzOS0wLTIuZXhhbXBsZS5vcmc7CisjfQorCisjIFRoaXMgZGVjbGFyYXRpb24gYWxsb3dzIEJPT1RQIGNsaWVudHMgdG8gZ2V0IGR5bmFtaWMgYWRkcmVzc2VzLAorIyB3aGljaCB3ZSBkb24ndCByZWFsbHkgcmVjb21tZW5kLgorCisjc3VibmV0IDEwLjI1NC4yMzkuMzIgbmV0bWFzayAyNTUuMjU1LjI1NS4yMjQgeworIyAgcmFuZ2UgZHluYW1pYy1ib290cCAxMC4yNTQuMjM5LjQwIDEwLjI1NC4yMzkuNjA7CisjICBvcHRpb24gYnJvYWRjYXN0LWFkZHJlc3MgMTAuMjU0LjIzOS4zMTsKKyMgIG9wdGlvbiByb3V0ZXJzIHJ0ci0yMzktMzItMS5leGFtcGxlLm9yZzsKKyN9CisKKyMgQSBzbGlnaHRseSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBmb3IgYW4gaW50ZXJuYWwgc3VibmV0LgorI3N1Ym5ldCAxMC41LjUuMCBuZXRtYXNrIDI1NS4yNTUuMjU1LjIyNCB7CisjICByYW5nZSAxMC41LjUuMjYgMTAuNS41LjMwOworIyAgb3B0aW9uIGRvbWFpbi1uYW1lLXNlcnZlcnMgbnMxLmludGVybmFsLmV4YW1wbGUub3JnOworIyAgb3B0aW9uIGRvbWFpbi1uYW1lICJpbnRlcm5hbC5leGFtcGxlLm9yZyI7CisjICBvcHRpb24gcm91dGVycyAxMC41LjUuMTsKKyMgIG9wdGlvbiBicm9hZGNhc3QtYWRkcmVzcyAxMC41LjUuMzE7CisjICBkZWZhdWx0LWxlYXNlLXRpbWUgNjAwOworIyAgbWF4LWxlYXNlLXRpbWUgNzIwMDsKKyN9CisKKyMgSG9zdHMgd2hpY2ggcmVxdWlyZSBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBjYW4gYmUgbGlzdGVkIGluCisjIGhvc3Qgc3RhdGVtZW50cy4gICBJZiBubyBhZGRyZXNzIGlzIHNwZWNpZmllZCwgdGhlIGFkZHJlc3Mgd2lsbCBiZQorIyBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgKGlmIHBvc3NpYmxlKSwgYnV0IHRoZSBob3N0LXNwZWNpZmljIGluZm9ybWF0aW9uCisjIHdpbGwgc3RpbGwgY29tZSBmcm9tIHRoZSBob3N0IGRlY2xhcmF0aW9uLgorCisjaG9zdCBwYXNzYWNhZ2xpYSB7CisjICBoYXJkd2FyZSBldGhlcm5ldCAwOjA6YzA6NWQ6YmQ6OTU7CisjICBmaWxlbmFtZSAidm11bml4LnBhc3NhY2FnbGlhIjsKKyMgIHNlcnZlci1uYW1lICJ0b2NjYXRhLmZ1Z3VlLmNvbSI7CisjfQorCisjIEZpeGVkIElQIGFkZHJlc3NlcyBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgZm9yIGhvc3RzLiAgIFRoZXNlIGFkZHJlc3NlcworIyBzaG91bGQgbm90IGFsc28gYmUgbGlzdGVkIGFzIGJlaW5nIGF2YWlsYWJsZSBmb3IgZHluYW1pYyBhc3NpZ25tZW50LgorIyBIb3N0cyBmb3Igd2hpY2ggZml4ZWQgSVAgYWRkcmVzc2VzIGhhdmUgYmVlbiBzcGVjaWZpZWQgY2FuIGJvb3QgdXNpbmcKKyMgQk9PVFAgb3IgREhDUC4gICBIb3N0cyBmb3Igd2hpY2ggbm8gZml4ZWQgYWRkcmVzcyBpcyBzcGVjaWZpZWQgY2FuIG9ubHkKKyMgYmUgYm9vdGVkIHdpdGggREhDUCwgdW5sZXNzIHRoZXJlIGlzIGFuIGFkZHJlc3MgcmFuZ2Ugb24gdGhlIHN1Ym5ldAorIyB0byB3aGljaCBhIEJPT1RQIGNsaWVudCBpcyBjb25uZWN0ZWQgd2hpY2ggaGFzIHRoZSBkeW5hbWljLWJvb3RwIGZsYWcKKyMgc2V0LgorI2hvc3QgZmFudGFzaWEgeworIyAgaGFyZHdhcmUgZXRoZXJuZXQgMDg6MDA6MDc6MjY6YzA6YTU7CisjICBmaXhlZC1hZGRyZXNzIGZhbnRhc2lhLmZ1Z3VlLmNvbTsKKyN9CisKKyMgWW91IGNhbiBkZWNsYXJlIGEgY2xhc3Mgb2YgY2xpZW50cyBhbmQgdGhlbiBkbyBhZGRyZXNzIGFsbG9jYXRpb24KKyMgYmFzZWQgb24gdGhhdC4gICBUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyBhIGNhc2Ugd2hlcmUgYWxsIGNsaWVudHMKKyMgaW4gYSBjZXJ0YWluIGNsYXNzIGdldCBhZGRyZXNzZXMgb24gdGhlIDEwLjE3LjIyNC8yNCBzdWJuZXQsIGFuZCBhbGwKKyMgb3RoZXIgY2xpZW50cyBnZXQgYWRkcmVzc2VzIG9uIHRoZSAxMC4wLjI5LzI0IHN1Ym5ldC4KKworI2NsYXNzICJmb28iIHsKKyMgIG1hdGNoIGlmIHN1YnN0cmluZyAob3B0aW9uIHZlbmRvci1jbGFzcy1pZGVudGlmaWVyLCAwLCA0KSA9ICJTVU5XIjsKKyN9CisKKyNzaGFyZWQtbmV0d29yayAyMjQtMjkgeworIyAgc3VibmV0IDEwLjE3LjIyNC4wIG5ldG1hc2sgMjU1LjI1NS4yNTUuMCB7CisjICAgIG9wdGlvbiByb3V0ZXJzIHJ0ci0yMjQuZXhhbXBsZS5vcmc7CisjICB9CisjICBzdWJuZXQgMTAuMC4yOS4wIG5ldG1hc2sgMjU1LjI1NS4yNTUuMCB7CisjICAgIG9wdGlvbiByb3V0ZXJzIHJ0ci0yOS5leGFtcGxlLm9yZzsKKyMgIH0KKyMgIHBvb2wgeworIyAgICBhbGxvdyBtZW1iZXJzIG9mICJmb28iOworIyAgICByYW5nZSAxMC4xNy4yMjQuMTAgMTAuMTcuMjI0LjI1MDsKKyMgIH0KKyMgIHBvb2wgeworIyAgICBkZW55IG1lbWJlcnMgb2YgImZvbyI7CisjICAgIHJhbmdlIDEwLjAuMjkuMTAgMTAuMC4yOS4yMzA7CisjICB9CisjfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjcGQuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3BkLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU0ZjkzZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3BkLnNlcnZpY2UKQEAgLTAsMCArMSwxNSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1ESENQdjQgU2VydmVyIERhZW1vbgorRG9jdW1lbnRhdGlvbj1tYW46ZGhjcGQoOCkgbWFuOmRoY3BkLmNvbmYoNSkKK0FmdGVyPW5ldHdvcmsudGFyZ2V0CitBZnRlcj10aW1lLXN5bmMudGFyZ2V0CisKK1tTZXJ2aWNlXQorUElERmlsZT1AbG9jYWxzdGF0ZWRpckAvcnVuL2RoY3BkLnBpZAorRW52aXJvbm1lbnRGaWxlPUBTWVNDT05GRElSQC9kZWZhdWx0L2RoY3Atc2VydmVyCitFbnZpcm9ubWVudEZpbGU9LUBTWVNDT05GRElSQC9zeXNjb25maWcvZGhjcC1zZXJ2ZXIKK0V4ZWNTdGFydFByZT1AYmFzZV9iaW5kaXJAL3RvdWNoIEBsb2NhbHN0YXRlZGlyQC9saWIvZGhjcC9kaGNwZC5sZWFzZXMKK0V4ZWNTdGFydD1AU0JJTkRJUkAvZGhjcGQgLWYgLWNmIEBTWVNDT05GRElSQC9kaGNwL2RoY3BkLmNvbmYgLXBmIEBsb2NhbHN0YXRlZGlyQC9ydW4vZGhjcGQucGlkICRESENQREFSR1MgLXEgJElOVEVSRkFDRVMKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjcGQ2LnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNwZDYuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTk2YWJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjcGQ2LnNlcnZpY2UKQEAgLTAsMCArMSwxNSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1ESENQdjYgU2VydmVyIERhZW1vbgorRG9jdW1lbnRhdGlvbj1tYW46ZGhjcGQoOCkgbWFuOmRoY3BkLmNvbmYoNSkKK0FmdGVyPW5ldHdvcmsudGFyZ2V0CitBZnRlcj10aW1lLXN5bmMudGFyZ2V0CisKK1tTZXJ2aWNlXQorUElERmlsZT1AbG9jYWxzdGF0ZWRpckAvcnVuL2RoY3BkNi5waWQKK0Vudmlyb25tZW50RmlsZT1AU1lTQ09ORkRJUkAvZGVmYXVsdC9kaGNwLXNlcnZlcgorRW52aXJvbm1lbnRGaWxlPS1AU1lTQ09ORkRJUkAvc3lzY29uZmlnL2RoY3BkNgorRXhlY1N0YXJ0UHJlPUBiYXNlX2JpbmRpckAvdG91Y2ggQGxvY2Fsc3RhdGVkaXJAL2xpYi9kaGNwL2RoY3BkNi5sZWFzZXMKK0V4ZWNTdGFydD1AU0JJTkRJUkAvZGhjcGQgLWYgLTYgLWNmIEBTWVNDT05GRElSQC9kaGNwL2RoY3BkLmNvbmYgLXBmIEBsb2NhbHN0YXRlZGlyQC9ydW4vZGhjcGQ2LnBpZCAkREhDUERBUkdTIC1xICRJTlRFUkZBQ0VTCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3JlbGF5LnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNyZWxheS5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZDgxODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNyZWxheS5zZXJ2aWNlCkBAIC0wLDAgKzEsOSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1ESENQIFJlbGF5IEFnZW50IERhZW1vbgorQWZ0ZXI9bmV0d29yay50YXJnZXQKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9QFNCSU5ESVJAL2RoY3JlbGF5IC1kIC0tbm8tcGlkCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2luaXQtcmVsYXkgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9pbml0LXJlbGF5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOWE3ZTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9pbml0LXJlbGF5CkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorIworIyAkSWQ6IGRoY3AzLXJlbGF5LHYgMS4xIDIwMDQvMDQvMTYgMTU6NDE6MDggbWwgRXhwICQKKyMKKworIyBJdCBpcyBub3Qgc2FmZSB0byBzdGFydCBpZiB3ZSBkb24ndCBoYXZlIGEgZGVmYXVsdCBjb25maWd1cmF0aW9uLi4uCitpZiBbICEgLWYgL2V0Yy9kZWZhdWx0L2RoY3AtcmVsYXkgXTsgdGhlbgorCWVjaG8gIi9ldGMvZGVmYXVsdC9kaGNwLXJlbGF5IGRvZXMgbm90IGV4aXN0ISAtIEFib3J0aW5nLi4uIgorCWVjaG8gImNyZWF0ZSB0aGlzIGZpbGUgdG8gZml4IHRoZSBwcm9ibGVtLiIKKwlleGl0IDEKK2ZpCisKKyMgUmVhZCBpbml0IHNjcmlwdCBjb25maWd1cmF0aW9uIChpbnRlcmZhY2VzIHRoZSBkYWVtb24gc2hvdWxkIGxpc3RlbiBvbgorIyBhbmQgdGhlIERIQ1Agc2VydmVyIHdlIHNob3VsZCBmb3J3YXJkIHJlcXVlc3RzIHRvLikKKy4gL2V0Yy9kZWZhdWx0L2RoY3AtcmVsYXkKKworIyBCdWlsZCBjb21tYW5kIGxpbmUgZm9yIGludGVyZmFjZXMgKHdpbGwgYmUgcGFzc2VkIHRvIGRocmVsYXkgYmVsb3cuKQorSUZDTUQ9IiIKK2lmIHRlc3QgIiRJTlRFUkZBQ0VTIiAhPSAiIjsgdGhlbgorCWZvciBJIGluICRJTlRFUkZBQ0VTOyBkbworCQlJRkNNRD0ke0lGQ01EfSItaSAiJHtJfSIgIgorCWRvbmUKK2ZpCisKK0RIQ1JFTEFZUElEPS92YXIvcnVuL2RoY3JlbGF5LnBpZAorCitjYXNlICIkMSIgaW4KKwlzdGFydCkKKwkJc3RhcnQtc3RvcC1kYWVtb24gLVMgLXggL3Vzci9zYmluL2RoY3JlbGF5IC0tIC1xICRPUFRJT05TICRJRkNNRCAkU0VSVkVSUworCQk7OworCXN0b3ApCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC14IC91c3Ivc2Jpbi9kaGNyZWxheQorCQk7OworCXJlc3RhcnQgfCBmb3JjZS1yZWxvYWQpCisJCSQwIHN0b3AKKwkJc2xlZXAgMgorCQkkMCBzdGFydAorCQk7OworCSopCisJCWVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9kaGNwLXJlbGF5IHtzdGFydHxzdG9wfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIKKwkJZXhpdCAxIAorZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2luaXQtc2VydmVyIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvaW5pdC1zZXJ2ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRjMjA4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2luaXQtc2VydmVyCkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorIworIyAkSWQ6IGRoY3AzLXNlcnZlci5pbml0LmQsdiAxLjQgMjAwMy8wNy8xMyAxOToxMjo0MSBtZHogRXhwICQKKyMKKwordGVzdCAtZiAvdXNyL3NiaW4vZGhjcGQgfHwgZXhpdCAwCisKKyMgSXQgaXMgbm90IHNhZmUgdG8gc3RhcnQgaWYgd2UgZG9uJ3QgaGF2ZSBhIGRlZmF1bHQgY29uZmlndXJhdGlvbi4uLgoraWYgWyAhIC1mIC9ldGMvZGVmYXVsdC9kaGNwLXNlcnZlciBdOyB0aGVuCisJZWNobyAiL2V0Yy9kZWZhdWx0L2RoY3Atc2VydmVyIGRvZXMgbm90IGV4aXN0ISAtIEFib3J0aW5nLi4uIgorCWV4aXQgMAorZmkKKworIyBSZWFkIGluaXQgc2NyaXB0IGNvbmZpZ3VyYXRpb24gKHNvIGZhciBvbmx5IGludGVyZmFjZXMgdGhlIGRhZW1vbgorIyBzaG91bGQgbGlzdGVuIG9uLikKKy4gL2V0Yy9kZWZhdWx0L2RoY3Atc2VydmVyCisKK2Nhc2UgIiQxIiBpbgorCXN0YXJ0KQorCQllY2hvIC1uICJTdGFydGluZyBESENQIHNlcnZlcjogIgorCQl0ZXN0IC1kIC92YXIvbGliL2RoY3AvIHx8IG1rZGlyIC1wIC92YXIvbGliL2RoY3AvCisJCXRlc3QgLWYgL3Zhci9saWIvZGhjcC9kaGNwZC5sZWFzZXMgfHwgdG91Y2ggL3Zhci9saWIvZGhjcC9kaGNwZC5sZWFzZXMJCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC1TIC14IC91c3Ivc2Jpbi9kaGNwZCAtLSAtcSAkSU5URVJGQUNFUworCQllY2hvICIuIgorCQk7OworCXN0b3ApCisJCWVjaG8gLW4gIlN0b3BwaW5nIERIQ1Agc2VydmVyOiBkaGNwZDMiCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC14IC91c3Ivc2Jpbi9kaGNwZAorCQllY2hvICIuIgorCQk7OworCXJlc3RhcnQgfCBmb3JjZS1yZWxvYWQpCisJCSQwIHN0b3AKKwkJc2xlZXAgMgorCQkkMCBzdGFydAorCQlpZiBbICIkPyIgIT0gIjAiIF07IHRoZW4KKwkJCWV4aXQgMQorCQlmaQorCQk7OworCSopCisJCWVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9kaGNwLXNlcnZlciB7c3RhcnR8c3RvcHxyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iCisJCWV4aXQgMSAKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTIuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTNhNGU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyLmluYwpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIlRDUCAvIElQIG5ldHdvcmtpbmcgYW5kIHRyYWZmaWMgY29udHJvbCB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJJcHJvdXRlMiBpcyBhIGNvbGxlY3Rpb24gb2YgdXRpbGl0aWVzIGZvciBjb250cm9sbGluZyBcCitUQ1AgLyBJUCBuZXR3b3JraW5nIGFuZCB0cmFmZmljIGNvbnRyb2wgaW4gTGludXguICBPZiB0aGUgdXRpbGl0aWVzIGlwIFwKK2FuZCB0YyBhcmUgdGhlIG1vc3QgaW1wb3J0YW50LiAgaXAgY29udHJvbHMgSVB2NCBhbmQgSVB2NiBcCitjb25maWd1cmF0aW9uIGFuZCB0YyBzdGFuZHMgZm9yIHRyYWZmaWMgY29udHJvbC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpbnV4Zm91bmRhdGlvbi5vcmcvY29sbGFib3JhdGUvd29ya2dyb3Vwcy9uZXR3b3JraW5nL2lwcm91dGUyIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lYjcyM2I2MTUzOWZlZWYwMTNkZTQ3NmU2OGI1YzUwYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pcC9pcC5jO2JlZ2lubGluZT0zO2VuZGxpbmU9ODttZDU9Njg5ZDY5MWQwNDEwYTRiNjRkMzg5OWY4ZDZlMzE4MTciCisKK0RFUEVORFMgPSAiZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIGlwdGFibGVzIGVsZnV0aWxzIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworRVhUUkFfT0VNQUtFID0gIkNDPScke0NDfScgS0VSTkVMX0lOQ0xVREU9JHtTVEFHSU5HX0lOQ0RJUn0gRE9DRElSPSR7ZG9jZGlyfS9pcHJvdXRlMiBTVUJESVJTPSdsaWIgdGMgaXAnIFNCSU5ESVI9JyR7YmFzZV9zYmluZGlyfScgTElCRElSPScke2xpYmRpcn0nIgorCitkb19pbnN0YWxsICgpIHsKKyAgICBvZV9ydW5tYWtlIERFU1RESVI9JHtEfSBpbnN0YWxsCisgICAgbXYgJHtEfSR7YmFzZV9zYmluZGlyfS9pcCAke0R9JHtiYXNlX3NiaW5kaXJ9L2lwLmlwcm91dGUyCisgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfQorICAgIG12ICR7RH0vc2hhcmUvKiAke0R9JHtkYXRhZGlyfS8gfHwgdHJ1ZQorICAgIHJtICR7RH0vc2hhcmUgLXJmIHx8IHRydWUKK30KKworIyBUaGUgLnNvIGZpbGVzIGluIGlwcm91dGUyLXRjIGFyZSBtb2R1bGVzLCBub3QgdHJhZGl0aW9uYWwgbGlicmFyaWVzCitJTlNBTkVfU0tJUF8ke1BOfS10YyA9ICJkZXYtc28iCisKK1BBQ0tBR0VTID0rICIke1BOfS10YyIKK0ZJTEVTXyR7UE59LXRjID0gIiR7YmFzZV9zYmluZGlyfS90YyogXAorICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3RjLyouc28iCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3RjLy5kZWJ1ZyIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiaXAiCitBTFRFUk5BVElWRV9UQVJHRVRbaXBdID0gIiR7YmFzZV9zYmluZGlyfS9pcC4ke0JQTn0iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaXBdID0gIiR7YmFzZV9zYmluZGlyfS9pcCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMi8wMDAxLWlwcm91dGUyLWRlLWJhc2gtc2NyaXB0cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMi8wMDAxLWlwcm91dGUyLWRlLWJhc2gtc2NyaXB0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWM3ZDQwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyLzAwMDEtaXByb3V0ZTItZGUtYmFzaC1zY3JpcHRzLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK1N1YmplY3Q6IFtQQVRDSF0gaXByb3V0ZTI6IGRlLWJhc2ggc2NyaXB0cworCitkZS1iYXNoIHRoZXNlIHR3byBzY3JpcHRzIHRvIG1ha2UgaXByb3V0ZTIgbm90IGRlcGVuZCBvbiBiYXNoLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorCistLS0KKyBpcC9pZmNmZyB8ICAgMTUgKysrKysrKystLS0tLS0tCisgaXAvcnRwciAgfCAgICAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9pcC9pZmNmZyBiL2lwL2lmY2ZnCitpbmRleCAwODNkOWRmLi42MGJjZjFmIDEwMDY0NAorLS0tIGEvaXAvaWZjZmcKKysrKyBiL2lwL2lmY2ZnCitAQCAtMSwxMiArMSwxMyBAQAorLSMhIC9iaW4vYmFzaAorKyMhIC9iaW4vc2gKKyAKKyBDaGVja0ZvcndhcmRpbmcgKCkgeworLSAgbG9jYWwgc2Jhc2UgZndkCisrICBsb2NhbCBzYmFzZSBmd2QgZm9yd2FyZGluZworICAgc2Jhc2U9L3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYKKyAgIGZ3ZD0wCisgICBpZiBbIC1kICRzYmFzZSBdOyB0aGVuCisgICAgIGZvciBkaXIgaW4gJHNiYXNlLyovZm9yd2FyZGluZzsgZG8KKy0gICAgICBmd2Q9JFskZndkICsgYGNhdCAkZGlyYF0KKysgICAgICBmb3J3YXJkaW5nPWBjYXQgJGRpcmAKKysgICAgICBmd2Q9JCgoJGZ3ZCskZm9yd2FyZGluZykpCisgICAgIGRvbmUKKyAgIGVsc2UKKyAgICAgZndkPTIKK0BAIC0xMjcsMTIgKzEyOCwxMiBAQCBmaQorIGFycGluZyAtcSAtQSAtYyAxIC1JICRkZXYgJGlwYWRkcgorIG5vYXJwPSQ/CisgKCBzbGVlcCAyIDsKKy0gIGFycGluZyAtcSAtVSAtYyAxIC1JICRkZXYgJGlwYWRkciApID4mIC9kZXYvbnVsbCA8L2Rldi9udWxsICYKKysgIGFycGluZyAtcSAtVSAtYyAxIC1JICRkZXYgJGlwYWRkciApID4gL2Rldi9udWxsIDI+JjEgPC9kZXYvbnVsbCAmCisgCistaXAgcm91dGUgYWRkIHVucmVhY2hhYmxlIDIyNC4wLjAuMC8yNCA+JiAvZGV2L251bGwKKy1pcCByb3V0ZSBhZGQgdW5yZWFjaGFibGUgMjU1LjI1NS4yNTUuMjU1ID4mIC9kZXYvbnVsbAorK2lwIHJvdXRlIGFkZCB1bnJlYWNoYWJsZSAyMjQuMC4wLjAvMjQgPiAvZGV2L251bGwgMj4mMQorK2lwIHJvdXRlIGFkZCB1bnJlYWNoYWJsZSAyNTUuMjU1LjI1NS4yNTUgPiAvZGV2L251bGwgMj4mMQorIGlmIFsgYGlwIGxpbmsgbHMgJGRldiB8IGdyZXAgLWMgTVVMVElDQVNUYCAtZ2UgMSBdOyB0aGVuCistICBpcCByb3V0ZSBhZGQgMjI0LjAuMC4wLzQgZGV2ICRkZXYgc2NvcGUgZ2xvYmFsID4mIC9kZXYvbnVsbAorKyAgaXAgcm91dGUgYWRkIDIyNC4wLjAuMC80IGRldiAkZGV2IHNjb3BlIGdsb2JhbCA+IC9kZXYvbnVsbCAyPiYxCisgZmkKKyAKKyBpZiBbICRmd2QgLWVxIDAgXTsgdGhlbgorZGlmZiAtLWdpdCBhL2lwL3J0cHIgYi9pcC9ydHByCitpbmRleCBjMzYyOWZkLi42NzQxOThkIDEwMDY0NAorLS0tIGEvaXAvcnRwcgorKysrIGIvaXAvcnRwcgorQEAgLTEsNCArMSw0IEBACistIyEgL2Jpbi9iYXNoCisrIyEgL2Jpbi9zaAorIAorIGV4ZWMgdHIgIltcXFxcXSIgIlsKKyBdIgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMi9jb25maWd1cmUtY3Jvc3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTIvY29uZmlndXJlLWNyb3NzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NjYwOWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTIvY29uZmlndXJlLWNyb3NzLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gODViMDU4OWI0ODQzYzAzZThlNmZkOTQxNmQ3MWVhNDQ5YTczYzVjMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitEYXRlOiBUaHUsIDMgTm92IDIwMTEgMTA6NDY6MTYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gbWFrZSBjb25maWd1cmUgY3Jvc3MgY29tcGlsZSBzYWZlCisKK0FjY29yZGluZyB0byBLZXZpbiBUaWFuOgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKworSW5kZXg6IGlwcm91dGUyLTMuNy4wL2NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGlwcm91dGUyLTMuNy4wLm9yaWcvY29uZmlndXJlCisrKysgaXByb3V0ZTItMy43LjAvY29uZmlndXJlCitAQCAtMiw2ICsyLDcgQEAKKyAjIFRoaXMgaXMgbm90IGFuIGF1dGNvbmYgZ2VuZXJhdGVkIGNvbmZpZ3VyZQorICMKKyBJTkNMVURFPSR7MTotIiRQV0QvaW5jbHVkZSJ9CisrU1lTUk9PVD0kMQorIAorICMgTWFrZSBhIHRlbXAgZGlyZWN0b3J5IGluIGJ1aWxkIHRyZWUuCisgVE1QRElSPSQobWt0ZW1wIC1kIGNvbmZpZy5YWFhYWFgpCitAQCAtMTU4LDcgKzE1OSw3IEBAIGNoZWNrX2lwdF9saWJfZGlyKCkKKyAJCXJldHVybgorIAlmaQorIAorLQlmb3IgZGlyIGluIC9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIKKysJZm9yIGRpciBpbiAkU1lTUk9PVC9saWIgJFNZU1JPT1QvdXNyL2xpYiAkU1lTUk9PVC91c3IvbG9jYWwvbGliCisgCWRvCisgCQlmb3IgZmlsZSBpbiAkZGlyL3t4dGFibGVzLGlwdGFibGVzfS9saWIqdF8qc28gOyBkbworIAkJCWlmIFsgLWYgJGZpbGUgXTsgdGhlbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyXzQuMS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyXzQuMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZGIwYmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTJfNC4xLjEuYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSBpcHJvdXRlMi5pbmMKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzL25ldC8ke0JQTn0vJHtCUH0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS1jcm9zcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWlwcm91dGUyLWRlLWJhc2gtc2NyaXB0cy5wYXRjaCBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjM5MjkwY2IzYTU1ZDM4ZGQ4ZDEwZTE5YTMwOTQxMDlmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjczMDc3YTk4OWVmYjkzNDQ1MGJkNjU1Y2JkOWFhZGRhYTc0N2NiNjk2YzY0ZDBjOWEzMzIzNzY4YTZhOGU2NmYiCisKKyMgQ0ZMQUdTIGFyZSBjb21wdXRlZCBpbiBNYWtlZmlsZSBhbmQgcmVmZXJlbmNlIENDT1BUUworIworRVhUUkFfT0VNQUtFX2FwcGVuZCA9ICIgQ0NPUFRTPScke0NGTEFHU30nIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lyZGEtdXRpbHMvaXJkYS11dGlscy0wLjkuMTgvaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcmRhLXV0aWxzL2lyZGEtdXRpbHMtMC45LjE4L2luaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmYyOWU5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcmRhLXV0aWxzL2lyZGEtdXRpbHMtMC45LjE4L2luaXQKQEAgLTAsMCArMSw3OCBAQAorIyEgL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgaXJkYQorIyBSZXF1aXJlZC1TdGFydDogICAgJG5ldHdvcmsgJHJlbW90ZV9mcworIyBSZXF1aXJlZC1TdG9wOiAgICAgJG5ldHdvcmsgJHJlbW90ZV9mcworIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IEluZnJhcmVkIHBvcnQgc3VwcG9ydAorIyMjIEVORCBJTklUIElORk8KKworTkFNRT0iaXJhdHRhY2giCit0ZXN0IC14ICIkSVJEQV9EQUVNT04iIHx8IElSREFfREFFTU9OPS91c3Ivc2Jpbi9pcmF0dGFjaAordGVzdCAteiAiJElSQVRUQUNIX1BJRCIgJiYgSVJBVFRBQ0hfUElEPS92YXIvcnVuL2lyYXR0YWNoLnBpZAorCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworbW9kdWxlX2lkKCkgeworICAgICAgICBhd2sgJ0JFR0lOIHsgRlM9IjogIiB9IC9IYXJkd2FyZS8geyBwcmludCAkMiB9ICcgPC9wcm9jL2NwdWluZm8KK30KKworaWYgWyAhIC1mIC9ldGMvc3lzY29uZmlnL2lyZGEgXTsgdGhlbgorICAgIGNhc2UgYG1vZHVsZV9pZGAgaW4KKwkiSFAgaVBBUSBIMjIwMCIgfCAiSFAgaVBBUSBIWDQ3MDAiIHwgIkhUQyBVbml2ZXJzYWwiKQorCSAgICBJUkRBPXllcworCSAgICBERVZJQ0U9L2Rldi90dHlTMgorCSAgICBET05HTEU9CisJICAgIERJU0NPVkVSWT0KKwkgICAgOzsKKwkqKQorCSAgICBJUkRBPXllcworCSAgICBERVZJQ0U9L2Rldi90dHlTMQorCSAgICBET05HTEU9CisJICAgIERJU0NPVkVSWT0KKwkgICAgOzsKKyAgICBlc2FjCitlbHNlCisgICAgLiAvZXRjL3N5c2NvbmZpZy9pcmRhCitmaQorCisjIENoZWNrIHRoYXQgaXJkYSBpcyB1cC4KK1sgJHtJUkRBfSA9ICJubyIgXSAmJiBleGl0IDAKKworWyAtZiAvdXNyL3NiaW4vaXJhdHRhY2ggXSB8fCBleGl0IDAKKworQVJHUz0KK2lmIFsgJERPTkdMRSBdOyB0aGVuCisJQVJHUz0iJEFSR1MgLWQgJERPTkdMRSIKK2ZpCitpZiBbICIkRElTQ09WRVJZIiA9ICJ5ZXMiIF07dGhlbgorCUFSR1M9IiRBUkdTIC1zIgorZmkKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWVjaG8gLW4gIlN0YXJ0aW5nIElyREE6ICROQU1FIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLWV4ZWMgIiRJUkRBX0RBRU1PTiIgJHtERVZJQ0V9ICR7QVJHU30gLS1waWRmaWxlICIkSVJBVFRBQ0hfUElEIgorCXNsZWVwIDEKKwlbIC1mIC92YXIvcnVuL2lyYXR0YWNoLnBpZCBdICYmIGVjaG8gIiBkb25lIiB8fCBlY2hvICIgZmFpbCIKKwk7OworICBzdG9wKQorCWVjaG8gIlN0b3BwaW5nIElyREE6ICROQU1FIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tZXhlYyAiJElSREFfREFFTU9OIiAtLXBpZGZpbGUgIiRJUkFUVEFDSF9QSUQiCisJOzsKKyAgcmVzdGFydHxmb3JjZS1yZWxvYWQpCisJJDAgc3RvcAorCSQwIHN0YXJ0CisJOzsKKyAgc3RhdHVzKQorCXN0YXR1cyBpcmF0dGFjaAorCWV4aXQgJD8KKwk7OworICAqKQorCU49L2V0Yy9pbml0LmQvJE5BTUUKKwllY2hvICJVc2FnZTogJE4ge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR8c3RhdHVzfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcmRhLXV0aWxzL2lyZGEtdXRpbHMtMC45LjE4L2xkZmxhZ3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXJkYS11dGlscy9pcmRhLXV0aWxzLTAuOS4xOC9sZGZsYWdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NWZlMzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXJkYS11dGlscy9pcmRhLXV0aWxzLTAuOS4xOC9sZGZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsNzUgQEAKK09iZXkgTERGTEFHUworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBpcmRhLXV0aWxzLTAuOS4xOC5vcmlnL2ZpbmRjaGlwL01ha2VmaWxlCisrKysgaXJkYS11dGlscy0wLjkuMTgvZmluZGNoaXAvTWFrZWZpbGUKK0BAIC02NSw1ICs2NSw1IEBAIGluc3RhbGw6IGZpbmRjaGlwCisKKyBnZmluZGNoaXA6IGdmaW5kY2hpcC5jCisJJChwcm5fY2MpCistCSQoRUNNRCkpJChDQykgJChDRkxBR1MpIGBndGstY29uZmlnIC0tY2ZsYWdzYCAgJDwgLW8gJEAgYGd0ay1jb25maWcgLS1saWJzYAorKwkkKEVDTUQpJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgYGd0ay1jb25maWcgLS1jZmxhZ3NgICAkPCAtbyAkQCBgZ3RrLWNvbmZpZyAtLWxpYnNgCisKKy0tLSBpcmRhLXV0aWxzLTAuOS4xOC5vcmlnL2lyYXR0YWNoL01ha2VmaWxlCisrKysgaXJkYS11dGlscy0wLjkuMTgvaXJhdHRhY2gvTWFrZWZpbGUKK0BAIC00OSwxMyArNDksMTMgQEAgYWxsOiAkKFRBUkdFVFMpCisKKyBpcmF0dGFjaDogaXJhdHRhY2gubyB1dGlsLm8KKwkkKHBybl9jY19vKQorLQkkKEVDTUQpJChDQykgJChDRkxBR1MpIGlyYXR0YWNoLm8gdXRpbC5vIC1vICRACisrCSQoRUNNRCkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSBpcmF0dGFjaC5vIHV0aWwubyAtbyAkQAorCisKKworIGRvbmdsZV9hdHRhY2g6IGRvbmdsZV9hdHRhY2gubworCSQocHJuX2NjX28pCistCSQoRUNNRCkkKENDKSAkKENGTEFHUykgZG9uZ2xlX2F0dGFjaC5vIC1vICRACisrCSQoRUNNRCkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSBkb25nbGVfYXR0YWNoLm8gLW8gJEAKKworCisgaW5zdGFsbDogJChUQVJHRVRTKQorLS0tIGlyZGEtdXRpbHMtMC45LjE4Lm9yaWcvaXJkYWR1bXAvTWFrZWZpbGUKKysrKyBpcmRhLXV0aWxzLTAuOS4xOC9pcmRhZHVtcC9NYWtlZmlsZQorQEAgLTQwLDcgKzQwLDcgQEAgbGliX2lyZGFkdW1wLmE6ICQoTElCSVJEQURVTVBfT0JKUykKKworIGlyZGFkdW1wOiAkKElSREFEVU1QX09CSlMpICQoTElCSVJEQURVTVBfVEFSR0VUKQorCSQocHJuX2NjX28pCistCSQoRUNNRCkkKENDKSAkKENGTEFHUykgYHBrZy1jb25maWcgLS1saWJzIGdsaWItMi4wYCAtbyAgJChJUkRBRFVNUF9UQVJHRVQpICQ8ICQoTElCSVJEQURVTVBfVEFSR0VUKQorKwkkKEVDTUQpJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgYHBrZy1jb25maWcgLS1saWJzIGdsaWItMi4wYCAtbyAgJChJUkRBRFVNUF9UQVJHRVQpICQ8ICQoTElCSVJEQURVTVBfVEFSR0VUKQorCisKKyAuYy5vOgorLS0tIGlyZGEtdXRpbHMtMC45LjE4Lm9yaWcvaXJkYXBpbmcvTWFrZWZpbGUKKysrKyBpcmRhLXV0aWxzLTAuOS4xOC9pcmRhcGluZy9NYWtlZmlsZQorQEAgLTU2LDcgKzU2LDcgQEAgYWxsOiAkKFRBUkdFVFMpCisKKyBpcmRhcGluZzogJChPQkpTKQorCSQocHJuX2NjX28pCistCSQoRUNNRCkkKENDKSAkKENGTEFHUykgJChPQkpTKSAtbyAkQAorKwkkKEVDTUQpJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgJChPQkpTKSAtbyAkQAorCisKKyAuYy5vOgorLS0tIGlyZGEtdXRpbHMtMC45LjE4Lm9yaWcvaXJuZXRkL01ha2VmaWxlCisrKysgaXJkYS11dGlscy0wLjkuMTgvaXJuZXRkL01ha2VmaWxlCitAQCAtNTAsNyArNTAsNyBAQCBhbGw6ICQoVEFSR0VUUykKKworIGlybmV0ZDogJChPQkpTKQorCSQocHJuX2NjX28pCistCSQoRUNNRCkkKENDKSAkKENGTEFHUykgJChPQkpTKSAtbyAkQAorKwkkKEVDTUQpJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgJChPQkpTKSAtbyAkQAorCisKKyBpbnN0YWxsOiBpcm5ldGQKKy0tLSBpcmRhLXV0aWxzLTAuOS4xOC5vcmlnL3BzaW9uL01ha2VmaWxlCisrKysgaXJkYS11dGlscy0wLjkuMTgvcHNpb24vTWFrZWZpbGUKK0BAIC0yNSw0ICsyNSw0IEBAIGluc3RhbGw6ICQoUFNJT05fVEFSR0VUUykKKyBDRkxBR1MgKz0gLWcgLUkuLi9pbmNsdWRlIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgJChSUE1fT1BUX0ZMQUdTKQorIGlycHNpb241OgorCSQocHJuX2NjX28pCistCSQoRUNNRCkkKENDKSAkKENGTEFHUykgJChQU0lPTl9TUkMpIC1vICRACitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKysJJChFQ01EKSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpICQoUFNJT05fU1JDKSAtbyAkQAorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXJkYS11dGlscy9pcmRhLXV0aWxzXzAuOS4xOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcmRhLXV0aWxzL2lyZGEtdXRpbHNfMC45LjE4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYzNiMTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXJkYS11dGlscy9pcmRhLXV0aWxzXzAuOS4xOC5iYgpAQCAtMCwwICsxLDUwIEBACitTVU1NQVJZID0gIkNvbW1vbiBmaWxlcyBmb3IgSXJEQSIKK0RFU0NSSVBUSU9OID0gIlByb3ZpZGVzIGNvbW1vbiBmaWxlcyBuZWVkZWQgdG8gdXNlIElyREEuIFwKK0lyREEgYWxsb3dzIGNvbW11bmljYXRpb24gb3ZlciBJbmZyYXJlZCB3aXRoIG90aGVyIGRldmljZXMgXAorc3VjaCBhcyBwaG9uZXMgYW5kIGxhcHRvcHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL2lyZGEuc291cmNlZm9yZ2UubmV0LyIKK0JVR1RSQUNLRVIgPSAiaXJkYS11c2Vyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2lyZGFkdW1wL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NtY2luaXQvQ09QWUlORzttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWFuL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2lyZGFkdW1wL2lyZGFkdW1wLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yNDttZDU9ZDc4YjlkY2UzY2Q3OGMyMjIwMjUwYzljN2EyYmUxNzgiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2lyZGEvaXJkYS11dGlscy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbGRmbGFncy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IgorCitTUkNfVVJJW21kNXN1bV0gPSAiODRkYzEyYWE0YzNmNjFmY2NiOGQ4OTE5YmY0MDc5YmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjE5ODA1NTFlNDZiMmVhYTllMTdhZDMxY2JjMWE2MzgwNzQ2MTFmYzMzYmZmMzQxNjNkMTBjN2E2N2E5ZmRjNiIKKworaW5oZXJpdCB1cGRhdGUtcmMuZAorCitFWFRSQV9PRU1BS0UgPSAiXAorICAgICdDQz0ke0NDfScgXAorICAgICdMRD0ke0xEfScgXAorICAgICdDRkxBR1M9JHtDRkxBR1N9JyBcCisgICAgJ0xERkxBR1M9JHtMREZMQUdTfScgXAorICAgICdTWVNfSU5DTFVERVM9JyBcCisgICAgJ1Y9MScgXAorIgorCitJTklUU0NSSVBUX05BTUUgPSAiaXJhdHRhY2giCitJTklUU0NSSVBUX1BBUkFNUyA9ICJkZWZhdWx0cyAyMCIKKworVEFSR0VUUyA/Pz0gImlyYXR0YWNoIGlyZGFwaW5nIgorZG9fY29tcGlsZSAoKSB7CisJZm9yIHQgaW4gJHtUQVJHRVRTfTsgZG8KKwkJb2VfcnVubWFrZSAtQyAkdAorCWRvbmUKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCWZvciB0IGluICR7VEFSR0VUU307IGRvCisJCW9lX3J1bm1ha2UgLUMgJHQgUk9PVD0iJHtEfSIgaW5zdGFsbAorCWRvbmUKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvJHtJTklUU0NSSVBUX05BTUV9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXcvaXcvMDAwMS1pdy12ZXJzaW9uLnNoLWRvbi10LXVzZS1naXQtZGVzY3JpYmUtZm9yLXZlcnNpb25pbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXcvaXcvMDAwMS1pdy12ZXJzaW9uLnNoLWRvbi10LXVzZS1naXQtZGVzY3JpYmUtZm9yLXZlcnNpb25pbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBhNzdiMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pdy9pdy8wMDAxLWl3LXZlcnNpb24uc2gtZG9uLXQtdXNlLWdpdC1kZXNjcmliZS1mb3ItdmVyc2lvbmluZy5wYXRjaApAQCAtMCwwICsxLDQzIEBACitGcm9tIDUzMTBhYmJhODY0Y2ZlM2E4YjY1YWYxMzA3Mjk0NDc2MDQxOTBiMjkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorRGF0ZTogVHVlLCAyOSBOb3YgMjAxMSAxNzowMzoyNyArMDEwMAorU3ViamVjdDogW1BBVENIXSBpdzogdmVyc2lvbi5zaDogZG9uJ3QgdXNlIGdpdCBkZXNjcmliZSBmb3IgdmVyc2lvbmluZworCitJdCB3aWxsIGRldGVjdCB0b3AtbGV2ZWwgZ2l0IHJlcG9zaXRvcmllcyBsaWtlIHRoZSBBbmdzdHJvbSBzZXR1cC1zY3JpcHRzIGFuZCBicmVhay4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CistLS0KKyB2ZXJzaW9uLnNoIHwgMTYgKy0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMTUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS92ZXJzaW9uLnNoIGIvdmVyc2lvbi5zaAoraW5kZXggMTFkMTI0Yi4uNWQ0MjNjNCAxMDA3NTUKKy0tLSBhL3ZlcnNpb24uc2gKKysrKyBiL3ZlcnNpb24uc2gKK0BAIC0zLDIxICszLDcgQEAKKyBWRVJTSU9OPSIzLjE1IgorIE9VVD0iJDEiCisgCistaWYgWyAtZCAuZ2l0IF0gJiYgaGVhZD1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEIDI+L2Rldi9udWxsYDsgdGhlbgorLQlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAtLXVubWVyZ2VkID4gL2Rldi9udWxsCistCWRlc2NyPSQoZ2l0IGRlc2NyaWJlKQorLQorLQkjIG9uIGdpdCBidWlsZHMgY2hlY2sgdGhhdCB0aGUgdmVyc2lvbiBudW1iZXIgYWJvdmUKKy0JIyBpcyBjb3JyZWN0Li4uCistCVsgIiR7ZGVzY3IlJS0qfSIgPSAidiRWRVJTSU9OIiBdIHx8IGV4aXQgMgorLQorLQl2PSIke2Rlc2NyI3Z9IgorLQlpZiBnaXQgZGlmZi1pbmRleCAtLW5hbWUtb25seSBIRUFEIHwgcmVhZCBkdW1teSA7IHRoZW4KKy0JCXY9IiR2Ii1kaXJ0eQorLQlmaQorLWVsc2UKKy0Jdj0iJFZFUlNJT04iCistZmkKKyt2PSIkVkVSU0lPTiIKKyAKKyBlY2hvICcjaW5jbHVkZSAiaXcuaCInID4gIiRPVVQiCisgZWNobyAiY29uc3QgY2hhciBpd192ZXJzaW9uW10gPSBcIiR2XCI7IiA+PiAiJE9VVCIKKy0tIAorMS43LjcuMwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2l3L2l3L3NlcGFyYXRlLW9iamRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pdy9pdy9zZXBhcmF0ZS1vYmpkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgzZjhiMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pdy9pdy9zZXBhcmF0ZS1vYmpkaXIucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorRnJvbSA5ZTI3ZmMyZTFiM2RjOGMzNmVmNmE1MDJlZGZmYzNhM2Q4NGQ5ZGQ5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hyaXN0b3BoZXIgTGFyc29uIDxjaHJpc19sYXJzb25AbWVudG9yLmNvbT4KK0RhdGU6IFdlZCwgMjYgQXVnIDIwMTUgMTc6MjM6NDggLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gU3VwcG9ydCBzZXBhcmF0aW9uIG9mIFNSQ0RJUiBhbmQgT0JKRElSCisKK1R5cGljYWwgdXNlIG9mIFZQQVRIIHRvIGxvY2F0ZSB0aGUgc291cmNlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CisKKy0tLQorIE1ha2VmaWxlICAgfCA3ICsrKysrLS0KKyB2ZXJzaW9uLnNoIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggNTQ4NTkxYS4uZGE4ZDMzYSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTEsNSArMSw4IEBACisgTUFLRUZMQUdTICs9IC0tbm8tcHJpbnQtZGlyZWN0b3J5CisgCisrU1JDRElSID89ICQoZGlyICQobGFzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkpCisrT0JKRElSID89ICQoUFdEKQorK1ZQQVRIID0gJChTUkNESVIpCisgUFJFRklYID89IC91c3IKKyBTQklORElSID89ICQoUFJFRklYKS9zYmluCisgTUFORElSID89ICQoUFJFRklYKS9zaGFyZS9tYW4KK0BAIC05NSwxMSArOTgsMTEgQEAgVkVSU0lPTl9PQkpTIDo9ICQoZmlsdGVyLW91dCB2ZXJzaW9uLm8sICQoT0JKUykpCisgdmVyc2lvbi5jOiB2ZXJzaW9uLnNoICQocGF0c3Vic3QgJS5vLCUuYywkKFZFUlNJT05fT0JKUykpIG5sODAyMTEuaCBpdy5oIE1ha2VmaWxlIFwKKyAJCSQod2lsZGNhcmQgLmdpdC9pbmRleCAuZ2l0L3JlZnMvdGFncykKKyAJQCQoTlEpICcgR0VOICcgJEAKKy0JJChRKS4vdmVyc2lvbi5zaCAkQAorKwkkKFEpY2QgJChTUkNESVIpICYmIC4vdmVyc2lvbi5zaCAkKE9CSkRJUikvJEAKKyAKKyAlLm86ICUuYyBpdy5oIG5sODAyMTEuaAorIAlAJChOUSkgJyBDQyAgJyAkQAorLQkkKFEpJChDQykgJChDRkxBR1MpIC1jIC1vICRAICQ8CisrCSQoUSkkKENDKSAtSSQoU1JDRElSKSAkKENGTEFHUykgLWMgLW8gJEAgJDwKKyAKKyBpZmVxICgkKElXX0FORFJPSURfQlVJTEQpLCkKKyBpdzoJJChPQkpTKQorZGlmZiAtLWdpdCBhL3ZlcnNpb24uc2ggYi92ZXJzaW9uLnNoCitpbmRleCA1MzU0MzgzLi5mYTk1NGNmIDEwMDc1NQorLS0tIGEvdmVyc2lvbi5zaAorKysrIGIvdmVyc2lvbi5zaAorQEAgLTUsNSArNSw1IEBAIE9VVD0iJDEiCisgCisgdj0iJFZFUlNJT04iCisgCistZWNobyAnI2luY2x1ZGUgIml3LmgiJyA+ICIkT1VUIgorK2VjaG8gJyNpbmNsdWRlIDxpdy5oPicgPiAiJE9VVCIKKyBlY2hvICJjb25zdCBjaGFyIGl3X3ZlcnNpb25bXSA9IFwiJHZcIjsiID4+ICIkT1VUIgorLS0gCisyLjIuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXcvaXdfNC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2l3L2l3XzQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWZiMGUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2l3L2l3XzQuMS5iYgpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gIm5sODAyMTEgYmFzZWQgQ0xJIGNvbmZpZ3VyYXRpb24gdXRpbGl0eSBmb3Igd2lyZWxlc3MgZGV2aWNlcyIKK0RFU0NSSVBUSU9OID0gIml3IGlzIGEgbmV3IG5sODAyMTEgYmFzZWQgQ0xJIGNvbmZpZ3VyYXRpb24gdXRpbGl0eSBmb3IgXAord2lyZWxlc3MgZGV2aWNlcy4gSXQgc3VwcG9ydHMgYWxtb3N0IGFsbCBuZXcgZHJpdmVycyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBcCit0byB0aGUga2VybmVsIHJlY2VudGx5LiAiCitIT01FUEFHRSA9ICJodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi91c2Vycy9Eb2N1bWVudGF0aW9uL2l3IgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04Nzg2MThhNWM0YWYyNWU5YjkzZWYwYmUxYTkzZjc3NCIKKworREVQRU5EUyA9ICJsaWJubCIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL25ldHdvcmsvaXcvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaXctdmVyc2lvbi5zaC1kb24tdC11c2UtZ2l0LWRlc2NyaWJlLWZvci12ZXJzaW9uaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NlcGFyYXRlLW9iamRpci5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2OGMyODIyODVjNzFjOTU2MDY5OTU3ZTljYTEwYTZhNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxNGJmYzYyN2IzN2Y3ZjYwN2U0ZmZhNjNhNzBkZWQxNWZhMmVhODUxNzdmNzAzY2IxN2Q3ZmUzNmY5YzhmMzNkIgorCitpbmhlcml0IHBrZ2NvbmZpZworCitFWFRSQV9PRU1BS0UgPSAiXAorICAgIC1mICcke1N9L01ha2VmaWxlJyBcCisgICAgXAorICAgICdQUkVGSVg9JHtwcmVmaXh9JyBcCisgICAgJ1NCSU5ESVI9JHtzYmluZGlyfScgXAorICAgICdNQU5ESVI9JHttYW5kaXJ9JyBcCisiCitCID0gIiR7V09SS0RJUn0vYnVpbGQiCisKK2RvX2luc3RhbGwoKSB7CisgICAgb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlibnNzLW1kbnMvbGlibnNzLW1kbnNfMC4xMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJuc3MtbWRucy9saWJuc3MtbWRuc18wLjEwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiOTM2ZWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlibnNzLW1kbnMvbGlibnNzLW1kbnNfMC4xMC5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIk5hbWUgU2VydmljZSBTd2l0Y2ggbW9kdWxlIGZvciBNdWx0aWNhc3QgRE5TICh6ZXJvY29uZikgbmFtZSByZXNvbHV0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovLzBwb2ludGVyLmRlL2xlbm5hcnQvcHJvamVjdHMvbnNzLW1kbnMvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIgorCitERVBFTkRTID0gImF2YWhpIgorUFIgPSAicjciCisKK1NSQ19VUkkgPSAiaHR0cDovLzBwb2ludGVyLmRlL2xlbm5hcnQvcHJvamVjdHMvbnNzLW1kbnMvbnNzLW1kbnMtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDM5MzhmMTc2NDZlZmJiNTBhYTcwYmE1Zjk5ZjUxZDciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWU2ODNjMmU3YzM5MjE4MTQ3MDZkNjJmYmJkM2U5Y2JmNDkzYTc1ZmEwMDI1NWUwZTcxNTUwOGQ4MTM0ZmE2ZCIKKworUyA9ICIke1dPUktESVJ9L25zcy1tZG5zLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scworCitFWFRSQV9PRUNPTkYgPSAiLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0gLS1kaXNhYmxlLWx5bnggLS1lbmFibGUtYXZhaGkiCisKKyMgc3VwcHJlc3Mgd2FybmluZywgYnV0IGRvbid0IGJvdGhlciB3aXRoIGF1dG9uYW1lcgorTEVBRF9TT05BTUUgPSAibGlibnNzX21kbnMuc28iCitERUJJQU5OQU1FXyR7UE59ID0gImxpYm5zcy1tZG5zIgorCitSREVQRU5EU18ke1BOfSA9ICJhdmFoaS1kYWVtb24iCisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJc2VkIC1lICcvXmhvc3RzOi9zL1xzKlw8bWRuc1w+Ly8nIFwKKwkJLWUgJ3MvXCheaG9zdHM6LipcKVwoXDxmaWxlc1w+XClcKC4qXClcKFw8ZG5zXD5cKVwoLipcKS9cMVwyIG1kbnM0X21pbmltYWwgW05PVEZPVU5EPXJldHVybl1cM1w0IG1kbnNcNS8nIFwKKwkJLWkgJEQke3N5c2NvbmZkaXJ9L25zc3dpdGNoLmNvbmYKK30KKworcGtnX3ByZXJtXyR7UE59ICgpIHsKKwlzZWQgLWUgJy9eaG9zdHM6L3MvXHMqXDxtZG5zXD4vLycgXAorCQktZSAnL15ob3N0czovcy9ccyptZG5zNF9taW5pbWFsXHNcK1xbTk9URk9VTkQ9cmV0dXJuXF0vLycgXAorCQktaSAkRCR7c3lzY29uZmRpcn0vbnNzd2l0Y2guY29uZgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicGNhcC9saWJwY2FwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODczYzI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcC5pbmMKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJJbnRlcmZhY2UgZm9yIHVzZXItbGV2ZWwgbmV0d29yayBwYWNrZXQgY2FwdHVyZSIKK0RFU0NSSVBUSU9OID0gIkxpYnBjYXAgcHJvdmlkZXMgYSBwb3J0YWJsZSBmcmFtZXdvcmsgZm9yIGxvdy1sZXZlbCBuZXR3b3JrIFwKK21vbml0b3JpbmcuICBMaWJwY2FwIGNhbiBwcm92aWRlIG5ldHdvcmsgc3RhdGlzdGljcyBjb2xsZWN0aW9uLCBcCitzZWN1cml0eSBtb25pdG9yaW5nIGFuZCBuZXR3b3JrIGRlYnVnZ2luZy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnRjcGR1bXAub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD01MzA2NyZhdGlkPTQ2OTU3NyIKK1NFQ1RJT04gPSAibGlicy9uZXR3b3JrIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0xZDRiMDM2NjU1Nzk1MWM4NGE5NGZhYmUzNTI5Zjg2NyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wY2FwLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0zMjttZDU9MzlhZjM1MTBlMDExZjM0Yjg4NzJmMTIwYjFkYzMxZDIiCitERVBFTkRTID0gImZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSIKKworSU5DX1BSID0gInI1IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cudGNwZHVtcC5vcmcvcmVsZWFzZS8ke0JQfS50YXIuZ3oiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vcGNhcC1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcgYmx1ZXRvb3RoCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtcGNhcD1saW51eCIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXRvb3RoJywgJyR7QkxVRVp9JywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbYmx1ZXo0XSA9ICItLWVuYWJsZS1ibHVldG9vdGgsLS1kaXNhYmxlLWJsdWV0b290aCxibHVlejQiCisjIEFkZCBhIGR1bW15IFBBQ0tBR0VDT05GSUcgZm9yIGJsdWV6NSBzaW5jZSBpdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGxpYnBjYXAuCitQQUNLQUdFQ09ORklHW2JsdWV6NV0gPSAiLCwiCitQQUNLQUdFQ09ORklHW2NhbnVzYl0gPSAiLS1lbmFibGUtY2FudXNiLC0tZW5hYmxlLWNhbnVzYj1ubyxsaWJ1c2IiCitQQUNLQUdFQ09ORklHW2RidXNdID0gIi0tZW5hYmxlLWRidXMsLS1kaXNhYmxlLWRidXMsZGJ1cyIKK1BBQ0tBR0VDT05GSUdbbGlibmxdID0gIi0td2l0aC1saWJubCwtLXdpdGhvdXQtbGlibmwsbGlibmwiCisKK0NQUEZMQUdTX3ByZXBlbmQgPSAiLUkke1N9ICIKK0NGTEFHU19wcmVwZW5kID0gIi1JJHtTfSAiCitDWFhGTEFHU19wcmVwZW5kID0gIi1JJHtTfSAiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgICBpZiBbICEgLWUgJHtTfS9hY2luY2x1ZGUubTQgXTsgdGhlbgorICAgICAgICBjYXQgJHtTfS9hY2xvY2FsLm00ID4gJHtTfS9hY2luY2x1ZGUubTQKKyAgICBmaQorICAgIHNlZCAtaSAtZSdzLF5WX1JQQVRIX09QVD0uKiQsVl9SUEFUSF9PUFQ9LCcgJHtTfS9wY2FwLWNvbmZpZy5pbgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcC9hY2xvY2FsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcC9hY2xvY2FsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNTE5ODIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicGNhcC9saWJwY2FwL2FjbG9jYWwucGF0Y2gKQEAgLTAsMCArMSwxNjcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworZGlmZiAtcnVOIGxpYnBjYXAtMS4xLjEtb3JpZy9hY2xvY2FsLm00IGxpYnBjYXAtMS4xLjEvYWNsb2NhbC5tNAorLS0tIGxpYnBjYXAtMS4xLjEtb3JpZy9hY2xvY2FsLm00CTIwMTAtMDYtMjkgMTA6NDY6MzIuODE1MTE3NTY5ICswODAwCisrKysgbGlicGNhcC0xLjEuMS9hY2xvY2FsLm00CTIwMTAtMDYtMjkgMTA6NDk6MTcuMTUwMTQ5OTQ5ICswODAwCitAQCAtMzcsNyArMzcsNyBAQAorIGRubCBBQ19MQkxfQ19JTklULiAgTm93LCB3ZSBydW4gQUNfTEJMX0NfSU5JVF9CRUZPUkVfQ0MsIEFDX1BST0dfQ0MsCisgZG5sIGFuZCBBQ19MQkxfQ19JTklUIGF0IHRoZSB0b3AgbGV2ZWwuCisgZG5sCistQUNfREVGVU4oQUNfTEJMX0NfSU5JVF9CRUZPUkVfQ0MsCisrQUNfREVGVU4oW0FDX0xCTF9DX0lOSVRfQkVGT1JFX0NDXSwKKyBbCisgICAgIEFDX0JFRk9SRShbJDBdLCBbQUNfTEJMX0NfSU5JVF0pCisgICAgIEFDX0JFRk9SRShbJDBdLCBbQUNfUFJPR19DQ10pCitAQCAtOTAsNyArOTAsNyBAQAorIGRubCAgICAgTERGTEFHUworIGRubCAgICAgTEJMX0NGTEFHUworIGRubAorLUFDX0RFRlVOKEFDX0xCTF9DX0lOSVQsCisrQUNfREVGVU4oW0FDX0xCTF9DX0lOSVRdLAorIFsKKyAgICAgQUNfQkVGT1JFKFskMF0sIFtBQ19MQkxfRklYSU5DTFVERVNdKQorICAgICBBQ19CRUZPUkUoWyQwXSwgW0FDX0xCTF9ERVZFTF0pCitAQCAtMjE3LDcgKzIxNyw3IEBACisgZG5sCVZfU09OQU1FX09QVAorIGRubAlWX1JQQVRIX09QVAorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9TSExJQlNfSU5JVCwKKytBQ19ERUZVTihbQUNfTEJMX1NITElCU19JTklUXSwKKyAgICAgW0FDX1BSRVJFUSgyLjUwKQorICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KKyAJICAgICMKK0BAIC0zNjEsNyArMzYxLDcgQEAKKyAjIE1ha2Ugc3VyZSB3ZSB1c2UgdGhlIFZfQ0NPUFQgZmxhZ3MsIGJlY2F1c2Ugc29tZSBvZiB0aG9zZSBtaWdodAorICMgZGlzYWJsZSBpbmxpbmluZy4KKyAjCistQUNfREVGVU4oQUNfTEJMX0NfSU5MSU5FLAorK0FDX0RFRlVOKFtBQ19MQkxfQ19JTkxJTkVdLAorICAgICBbQUNfTVNHX0NIRUNLSU5HKGZvciBpbmxpbmUpCisgICAgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICBDRkxBR1M9IiRWX0NDT1BUIgorQEAgLTQwNyw3ICs0MDcsNyBAQAorIGRubAorIGRubAlBQ19MQkxfRklYSU5DTFVERVMKKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfRklYSU5DTFVERVMsCisrQUNfREVGVU4oW0FDX0xCTF9GSVhJTkNMVURFU10sCisgICAgIFtpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KKyAJICAgIEFDX01TR19DSEVDS0lORyhmb3IgQU5TSSBpb2N0bCBkZWZpbml0aW9ucykKKyAJICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9sYmxfZ2NjX2ZpeGluY2x1ZGVzLAorQEAgLTQ1Myw3ICs0NTMsNyBAQAorIGRubAkkMiAoeWFjYyBhcHBlbmRlZCkKKyBkbmwJJDMgKG9wdGlvbmFsIGZsZXggYW5kIGJpc29uIC1QIHByZWZpeCkKKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfTEVYX0FORF9ZQUNDLAorK0FDX0RFRlVOKFtBQ19MQkxfTEVYX0FORF9ZQUNDXSwKKyAgICAgW0FDX0FSR19XSVRIKGZsZXgsIFsgIC0td2l0aG91dC1mbGV4ICAgICAgICAgIGRvbid0IHVzZSBmbGV4XSkKKyAgICAgQUNfQVJHX1dJVEgoYmlzb24sIFsgIC0td2l0aG91dC1iaXNvbiAgICAgICAgIGRvbid0IHVzZSBiaXNvbl0pCisgICAgIGlmIHRlc3QgIiR3aXRoX2ZsZXgiID0gbm8gOyB0aGVuCitAQCAtNTA2LDcgKzUwNiw3IEBACisgZG5sCisgZG5sCURFQ0xXQUlUU1RBVFVTIChkZWZpbmVkKQorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9VTklPTl9XQUlULAorK0FDX0RFRlVOKFtBQ19MQkxfVU5JT05fV0FJVF0sCisgICAgIFtBQ19NU0dfQ0hFQ0tJTkcoaWYgdW5pb24gd2FpdCBpcyB1c2VkKQorICAgICBBQ19DQUNIRV9WQUwoYWNfY3ZfbGJsX3VuaW9uX3dhaXQsCisgCUFDX1RSWV9DT01QSUxFKFsKK0BAIC01MzUsNyArNTM1LDcgQEAKKyBkbmwKKyBkbmwJSEFWRV9TT0NLQUREUl9TQV9MRU4gKGRlZmluZWQpCisgZG5sCistQUNfREVGVU4oQUNfTEJMX1NPQ0tBRERSX1NBX0xFTiwKKytBQ19ERUZVTihbQUNfTEJMX1NPQ0tBRERSX1NBX0xFTl0sCisgICAgIFtBQ19NU0dfQ0hFQ0tJTkcoaWYgc29ja2FkZHIgc3RydWN0IGhhcyB0aGUgc2FfbGVuIG1lbWJlcikKKyAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xibF9zb2NrYWRkcl9oYXNfc2FfbGVuLAorIAlBQ19UUllfQ09NUElMRShbCitAQCAtNTYwLDcgKzU2MCw3IEBACisgZG5sCisgZG5sCUhBVkVfU09DS0FERFJfU1RPUkFHRSAoZGVmaW5lZCkKKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfU09DS0FERFJfU1RPUkFHRSwKKytBQ19ERUZVTihbQUNfTEJMX1NPQ0tBRERSX1NUT1JBR0VdLAorICAgICBbQUNfTVNHX0NIRUNLSU5HKGlmIHNvY2thZGRyX3N0b3JhZ2Ugc3RydWN0IGV4aXN0cykKKyAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xibF9oYXNfc29ja2FkZHJfc3RvcmFnZSwKKyAJQUNfVFJZX0NPTVBJTEUoWworQEAgLTU5Myw3ICs1OTMsNyBAQAorIGRubCB3b24ndCBiZSB1c2luZyBjb2RlIHRoYXQgd291bGQgdXNlIHRoYXQgbWVtYmVyLCBvciB3ZSB3b3VsZG4ndAorIGRubCBjb21waWxlIGluIGFueSBjYXNlKS4KKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfSFBfUFBBX0lORk9fVF9ETF9NT0RVTEVfSURfMSwKKytBQ19ERUZVTihbQUNfTEJMX0hQX1BQQV9JTkZPX1RfRExfTU9EVUxFX0lEXzFdLAorICAgICBbQUNfTVNHX0NIRUNLSU5HKGlmIGRsX2hwX3BwYV9pbmZvX3Qgc3RydWN0IGhhcyBkbF9tb2R1bGVfaWRfMSBtZW1iZXIpCisgICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9sYmxfZGxfaHBfcHBhX2luZm9fdF9oYXNfZGxfbW9kdWxlX2lkXzEsCisgCUFDX1RSWV9DT01QSUxFKFsKK0BAIC02MTksNyArNjE5LDcgQEAKKyBkbmwKKyBkbmwJYWNfY3ZfbGJsX2hhdmVfcnVuX3BhdGggKHllcyBvciBubykKKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfSEFWRV9SVU5fUEFUSCwKKytBQ19ERUZVTihbQUNfTEJMX0hBVkVfUlVOX1BBVEhdLAorICAgICBbQUNfTVNHX0NIRUNLSU5HKGZvciAke0NDLWNjfSAtUikKKyAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xibF9oYXZlX3J1bl9wYXRoLAorIAlbZWNobyAnbWFpbigpe30nID4gY29uZnRlc3QuYworQEAgLTY0NCw3ICs2NDQsNyBAQAorIGRubAorIGRubAlMQkxfQUxJR04gKERFRklORUQpCisgZG5sCistQUNfREVGVU4oQUNfTEJMX1VOQUxJR05FRF9BQ0NFU1MsCisrQUNfREVGVU4oW0FDX0xCTF9VTkFMSUdORURfQUNDRVNTXSwKKyAgICAgW0FDX01TR19DSEVDS0lORyhpZiB1bmFsaWduZWQgYWNjZXNzZXMgZmFpbCkKKyAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xibF91bmFsaWduZWRfZmFpbCwKKyAJW2Nhc2UgIiRob3N0X2NwdSIgaW4KK0BAIC03NDksNyArNzQ5LDcgQEAKKyBkbmwJSEFWRV9PU19QUk9UT19IIChkZWZpbmVkKQorIGRubAlvcy1wcm90by5oIChzeW1saW5rZWQpCisgZG5sCistQUNfREVGVU4oQUNfTEJMX0RFVkVMLAorK0FDX0RFRlVOKFtBQ19MQkxfREVWRUxdLAorICAgICBbcm0gLWYgb3MtcHJvdG8uaAorICAgICBpZiB0ZXN0ICIke0xCTF9DRkxBR1Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAJICAgICQxPSIkJDEgJHtMQkxfQ0ZMQUdTfSIKK0BAIC04ODYsNyArODg2LDcgQEAKKyBkbmwgc3RhdGljYWxseSBhbmQgaGFwcGVuIHRvIGhhdmUgYSBsaWJyZXNvbHYuYSBseWluZyBhcm91bmQgKGFuZCBubworIGRubCBsaWJuc2wuYSkuCisgZG5sCistQUNfREVGVU4oQUNfTEJMX0xJQlJBUllfTkVULCBbCisrQUNfREVGVU4oW0FDX0xCTF9MSUJSQVJZX05FVF0sIFsKKyAgICAgIyBNb3N0IG9wZXJhdGluZyBzeXN0ZW1zIGhhdmUgZ2V0aG9zdGJ5bmFtZSgpIGluIHRoZSBkZWZhdWx0IHNlYXJjaGVkCisgICAgICMgbGlicmFyaWVzIChpLmUuIGxpYmMpOgorICAgICAjIFNvbWUgT1NlcyAoZWcuIFNvbGFyaXMpIHBsYWNlIGl0IGluIGxpYm5zbAorQEAgLTkwOSw3ICs5MDksNyBAQAorIGRubCBUZXN0IGZvciBfX2F0dHJpYnV0ZV9fCisgZG5sCisgCistQUNfREVGVU4oQUNfQ19fX0FUVFJJQlVURV9fLCBbCisrQUNfREVGVU4oW0FDX0NfX19BVFRSSUJVVEVfX10sIFsKKyBBQ19NU0dfQ0hFQ0tJTkcoZm9yIF9fYXR0cmlidXRlX18pCisgQUNfQ0FDSEVfVkFMKGFjX2N2X19fYXR0cmlidXRlX18sIFsKKyBBQ19DT01QSUxFX0lGRUxTRSgKK0BAIC05NDcsNyArOTQ3LDcgQEAKKyBkbmwKKyBkbmwgLVNjb3R0IEJhcnJvbgorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9UUEFDS0VUX1NUQVRTLAorK0FDX0RFRlVOKFtBQ19MQkxfVFBBQ0tFVF9TVEFUU10sCisgICAgW0FDX01TR19DSEVDS0lORyhpZiBpZl9wYWNrZXQuaCBoYXMgdHBhY2tldF9zdGF0cyBkZWZpbmVkKQorICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9sYmxfdHBhY2tldF9zdGF0cywKKyAgICBBQ19UUllfQ09NUElMRShbCitAQCAtOTc2LDcgKzk3Niw3IEBACisgZG5sIGRvZXNuJ3QgaGF2ZSB0aGF0IG1lbWJlciAod2hpY2ggaXMgT0ssIGFzIGVpdGhlciB3ZSB3b24ndCBiZSB1c2luZworIGRubCBjb2RlIHRoYXQgd291bGQgdXNlIHRoYXQgbWVtYmVyLCBvciB3ZSB3b3VsZG4ndCBjb21waWxlIGluIGFueSBjYXNlKS4KKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfTElOVVhfVFBBQ0tFVF9BVVhEQVRBX1RQX1ZMQU5fVENJLAorK0FDX0RFRlVOKFtBQ19MQkxfTElOVVhfVFBBQ0tFVF9BVVhEQVRBX1RQX1ZMQU5fVENJXSwKKyAgICAgW0FDX01TR19DSEVDS0lORyhpZiB0cGFja2V0X2F1eGRhdGEgc3RydWN0IGhhcyB0cF92bGFuX3RjaSBtZW1iZXIpCisgICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9sYmxfZGxfaHBfcHBhX2luZm9fdF9oYXNfZGxfbW9kdWxlX2lkXzEsCisgCUFDX1RSWV9DT01QSUxFKFsKK0BAIC0xMDAzLDcgKzEwMDMsNyBAQAorIGRubCAKKyBkbmwgCUhBVkVfRExQSV9QQVNTSVZFIChkZWZpbmVkKQorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9ETF9QQVNTSVZFX1JFUV9ULAorK0FDX0RFRlVOKFtBQ19MQkxfRExfUEFTU0lWRV9SRVFfVF0sCisgICAgICAgICBbQUNfTVNHX0NIRUNLSU5HKGlmIGRsX3Bhc3NpdmVfcmVxX3Qgc3RydWN0IGV4aXN0cykKKyAgICAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xibF9oYXNfZGxfcGFzc2l2ZV9yZXFfdCwKKyAgICAgICAgICAgICAgICAgQUNfVFJZX0NPTVBJTEUoWwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcC9saWJwY2FwLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcC9saWJwY2FwLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NjE1MTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicGNhcC9saWJwY2FwL2xpYnBjYXAtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSw3MSBAQAorRnJvbSA4ODg3MTMyZTg1ODkyYTcyYTg0Y2EzODc4ZTYwZjI1NGFkMmNlOTM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm9lIE1hY0RvbmFsZCA8am9lX21hY2RvbmFsZEBtZW50b3IuY29tPgorRGF0ZTogVHVlLCAyNCBGZWIgMjAxNSAxNTo1NjowNiAtMDUwMAorU3ViamVjdDogW1BBVENIXSBsaWJwY2FwOiBwa2djb25maWcgc3VwcG9ydAorCitBZGRpbmcgYmFzaWMgc3RydWN0dXJlIHRvIHN1cHBvcnQgcGtnLWNvbmZpZy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSm9lIE1hY0RvbmFsZCA8am9lX21hY2RvbmFsZEBtZW50b3IuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gICB8ICA1ICsrKysrCisgY29uZmlndXJlLmluICB8ICAxICsKKyBsaWJwY2FwLnBjLmluIHwgMTAgKysrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJwY2FwLnBjLmluCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCAxYzJkNzQ1Li4xZjI1ZmFmIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNjAsNiArNjAsMTAgQEAgVl9SUEFUSF9PUFQgPSBAVl9SUEFUSF9PUFRACisgREVQRU5ERU5DWV9DRkxBRyA9IEBERVBFTkRFTkNZX0NGTEFHQAorIFBST0c9bGlicGNhcAorIAorKyMgcGtnY29uZmlnIHN1cHBvcnQKKytwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisrcGtnY29uZmlnX0RBVEEgPSBsaWJwY2FwLnBjCisrCisgIyBTdGFuZGFyZCBDRkxBR1MKKyBGVUxMX0NGTEFHUyA9ICQoQ0NPUFQpICQoSU5DTFMpICQoREVGUykgJChDRkxBR1MpCisgCitAQCAtMjc1LDYgKzI3OSw3IEBAIEVYVFJBX0RJU1QgPSBcCisgCWxibC9vcy1zb2xhcmlzMi5oIFwKKyAJbGJsL29zLXN1bm9zNC5oIFwKKyAJbGJsL29zLXVsdHJpeDQuaCBcCisrCWxpYnBjYXAucGMgXAorIAltaXNzaW5nL3NucHJpbnRmLmMgXAorIAlta2RlcCBcCisgCW1zZG9zL2JpbjJjLmMgXAorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggOGY1Yzg2Yi4uZmI1MWIzNSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtMTcwMCw2ICsxNzAwLDcgQEAgZXNhYworIEFDX1BST0dfSU5TVEFMTAorIAorIEFDX0NPTkZJR19IRUFERVIoY29uZmlnLmgpCisrQUNfQ09ORklHX0ZJTEVTKFtsaWJwY2FwLnBjXSkKKyAKKyBBQ19PVVRQVVRfQ09NTUFORFMoW2lmIHRlc3QgLWYgLmRldmVsOyB0aGVuCisgCWVjaG8gdGltZXN0YW1wID4gc3RhbXAtaAorZGlmZiAtLWdpdCBhL2xpYnBjYXAucGMuaW4gYi9saWJwY2FwLnBjLmluCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNGY3OGFkOAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlicGNhcC5wYy5pbgorQEAgLTAsMCArMSwxMCBAQAorK3ByZWZpeD1AcHJlZml4QAorK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKytpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorKworK05hbWU6IGxpYnBjYXAKKytEZXNjcmlwdGlvbjogU3lzdGVtLWluZGVwZW5kZW50IGludGVyZmFjZSBmb3IgdXNlci1sZXZlbCBwYWNrZXQgY2FwdHVyZS4KKytWZXJzaW9uOiBAVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbHBjYXAKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicGNhcC9saWJwY2FwXzEuNi4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcF8xLjYuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTE1NDNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcF8xLjYuMi5iYgpAQCAtMCwwICsxLDI2IEBACityZXF1aXJlIGxpYnBjYXAuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9hY2xvY2FsLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9saWJwY2FwLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjVmMTQxOTFjMWE2ODRhNzU1MzJjNzM5YzJjNDA1OWZhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVkYjNlMjk5OGYxZWViYTJjNzZkYTU1ZGE1ZDQ3NDI0OGZlMTljNDRmNDllMTVjYWM4YTc5NmEyYzdlMTk2OTAiCisKKyMKKyMgbWFrZSBpbnN0YWxsIGRvZXNuJ3QgY292ZXIgdGhlIHNoYXJlZCBsaWIKKyMgbWFrZSBpbnN0YWxsLXNoYXJlZCBpcyBqdXN0IGJyb2tlbiAobm8gc3ltbGlua3MpCisjCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgICAjcmVtb3ZlIGhhcmRjb2RlZCByZWZlcmVuY2VzIHRvIC91c3IvaW5jbHVkZQorICAgIHNlZCAnc3xcKFsgIl4nXCcnSV1cK1wpL3Vzci9pbmNsdWRlL3xcMSR7U1RBR0lOR19JTkNESVJ9L3xnJyAtaSAke1N9L2NvbmZpZ3VyZS5pbgorfQorCitkb19pbnN0YWxsX3ByZXBlbmQgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7bGliZGlyfQorICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorICAgIG9lX3J1bm1ha2UgaW5zdGFsbC1zaGFyZWQgREVTVERJUj0ke0R9CisgICAgb2VfbGliaW5zdGFsbCAtYSAtc28gbGlicGNhcCAke0R9JHtsaWJkaXJ9CisgICAgc2VkICJzfEBWRVJTSU9OQHwke1BWfXwiIC1pICR7Qn0vbGlicGNhcC5wYworICAgIGluc3RhbGwgLUQgLW0gMDY0NCBsaWJwY2FwLnBjICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL2xpYnBjYXAucGMKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9tb2JpbGUtYnJvYWRiYW5kLXByb3ZpZGVyLWluZm8vbW9iaWxlLWJyb2FkYmFuZC1wcm92aWRlci1pbmZvX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9tb2JpbGUtYnJvYWRiYW5kLXByb3ZpZGVyLWluZm8vbW9iaWxlLWJyb2FkYmFuZC1wcm92aWRlci1pbmZvX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWNmMmJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L21vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mby9tb2JpbGUtYnJvYWRiYW5kLXByb3ZpZGVyLWluZm9fZ2l0LmJiCkBAIC0wLDAgKzEsMTIgQEAKK1NVTU1BUlkgPSAiTW9iaWxlIEJyb2FkYmFuZCBTZXJ2aWNlIFByb3ZpZGVyIERhdGFiYXNlIgorU0VDVElPTiA9ICJuZXR3b3JrIgorTElDRU5TRSA9ICJQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTg3OTY0NTc5YjJhOGVjZTRiYzY3NDRkMmRjOWE4YjA0IgorU1JDUkVWID0gImQwNmViZDMxNGE3Y2RkMDg3ZDM4ZTQ5NjZjMTlkZTQyYzhjNTUyNDYiCitQViA9ICIyMDE0MDYxOCtnaXRyJHtTUkNQVn0iCitQRSA9ICIxIgorCitTUkNfVVJJID0gImdpdDovL2dpdC5nbm9tZS5vcmcvbW9iaWxlLWJyb2FkYmFuZC1wcm92aWRlci1pbmZvIgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZC9NYWtlZmlsZS5hbS1kby1ub3Qtc2hpcC12ZXJzaW9uLmgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQvTWFrZWZpbGUuYW0tZG8tbm90LXNoaXAtdmVyc2lvbi5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ODc1ZTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQvTWFrZWZpbGUuYW0tZG8tbm90LXNoaXAtdmVyc2lvbi5oLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0Zyb20gYmZkMzJkNjhjZmM5ZjFlMzFkYWI4OGUwNzQ0NmQxYzAyYmM4MGI1ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAxMiBGZWIgMjAxNSAwMDozOToyOSAtMDgwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZS5hbTogZG8gbm90IHNoaXAgdmVyc2lvbi5oCisKK1RoZSBIRUFERVJTJyBuYW1lIGhhcyBiZWVuIGNoYW5nZWQgdG8gcGtnaW5jbHVkZV9IRUFERVJTLCBzbyB1c2UKK25vZGlzdF9wa2dpbmNsdWRlX0hFQURFUlMsIG90aGVyd2lzZSB2ZXJzaW9uLmggd291bGQgYmUgc2hpcHBlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuYW0gfCAgICA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggMzMzNDc5MC4uNjljZDU4ZiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTEwLDExICsxMCwxMSBAQCBwa2dpbmNsdWRlX0hFQURFUlMgPSBpbmNsdWRlL3R5cGVzLmggaW5jbHVkZS9sb2cuaCBpbmNsdWRlL3BsdWdpbi5oIFwKKyAJCQlpbmNsdWRlL3Rsdi5oIGluY2x1ZGUvc2V0dGluZy5oIGluY2x1ZGUvZGV2aWNlLmggXAorIAkJCWluY2x1ZGUvbmZjX2NvcHkuaCBpbmNsdWRlL3NuZXAuaAorIAorLW5vZGlzdF9pbmNsdWRlX0hFQURFUlMgPSBpbmNsdWRlL3ZlcnNpb24uaAorK25vZGlzdF9wa2dpbmNsdWRlX0hFQURFUlMgPSBpbmNsdWRlL3ZlcnNpb24uaAorIAorIG5vaW5zdF9IRUFERVJTID0gaW5jbHVkZS9kYnVzLmgKKyAKKy1sb2NhbF9oZWFkZXJzID0gJChmb3JlYWNoIGZpbGUsJChwa2dpbmNsdWRlX0hFQURFUlMpICQobm9kaXN0X2luY2x1ZGVfSEVBREVSUykgXAorK2xvY2FsX2hlYWRlcnMgPSAkKGZvcmVhY2ggZmlsZSwkKHBrZ2luY2x1ZGVfSEVBREVSUykgJChub2Rpc3RfcGtnaW5jbHVkZV9IRUFERVJTKSBcCisgCQkJJChub2luc3RfSEVBREVSUyksIGluY2x1ZGUvbmVhci8kKG5vdGRpciAkKGZpbGUpKSkKKyAKKyBnZGJ1c19zb3VyY2VzID0gZ2RidXMvZ2RidXMuaCBnZGJ1cy9tYWlubG9vcC5jIGdkYnVzL3dhdGNoLmMgXAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZC9NYWtlZmlsZS5hbS1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQvTWFrZWZpbGUuYW0tZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NjA2NzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQvTWFrZWZpbGUuYW0tZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gNDNhY2M1NmQ1NTA2YzdlMzE4ZjcxN2ZiMzYzNGJjMTZlMzQzODkxMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAxNSBKYW4gMjAxNSAxODoxMjowNyAtMDgwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZS5hbTogZml4IHBhcmFsbGVsIGlzc3VlCisKK1RoZXJlIG1pZ2h0IGJlIG5vIHNyYyBkaXIgaWYgc3JjL2J1aWx0aW4uaCBydW5zIGVhcmxpZXIsIGNyZWF0ZSBpdCB0bworZml4IHRoZSByYWNlIGlzc3VlOgorCitzcmMvZ2VuYnVpbHRpbiBuZmN0eXBlMSBuZmN0eXBlMiBuZmN0eXBlMyBuZmN0eXBlNCBwMnAgPiBzcmMvYnVpbHRpbi5oCisvYmluL3NoOiBzcmMvYnVpbHRpbi5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmFtIHwgICAgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCAzMjQxMzExLi5hNDNlYWEyIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMTY0LDYgKzE2NCw3IEBAIE1BSU5UQUlORVJDTEVBTkZJTEVTID0gTWFrZWZpbGUuaW4gXAorIHNyYy9wbHVnaW4uJChPQkpFWFQpOiBzcmMvYnVpbHRpbi5oCisgCisgc3JjL2J1aWx0aW4uaDogc3JjL2dlbmJ1aWx0aW4gJChidWlsdGluX3NvdXJjZXMpCisrCSQoQU1fVl9hdCkkKE1LRElSX1ApIHNyYworIAkkKEFNX1ZfR0VOKSQoc3JjZGlyKS9zcmMvZ2VuYnVpbHRpbiAkKGJ1aWx0aW5fbW9kdWxlcykgPiAkQAorIAorICQoc3JjX25lYXJkX09CSkVDVFMpIFwKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQvbmVhcmQuaW4gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQvbmVhcmQuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ3ZDRkOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZC9uZWFyZC5pbgpAQCAtMCwwICsxLDU0IEBACisjIS9iaW4vc2gKKyMKKyMgc3RhcnQvc3RvcCBuZWFyZCBkYWVtb24uCisKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIG5lYXJkCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkbmV0d29yaworIyBSZXF1aXJlZC1TdG9wOiAgICAgJG5ldHdvcmsKKyMgRGVmYXVsdC1TdGFydDogICAgIFMgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IE5GQyBkYWVtb24KKyMgRGVzY3JpcHRpb246ICAgICAgIG5lYXJkIGlzIGEgZGFlbW9uIHVzZWQgdG8gZW5hYmxlIE5GQyBmZWF0dXJlcworIyMjIEVORCBJTklUIElORk8KKworREFFTU9OPUBpbnN0YWxscGF0aEAvbmVhcmQKK1BJREZJTEU9L3Zhci9ydW4vbmVhcmQucGlkCitERVNDPSJMaW51eCBORkMgZGFlbW9uIgorCitpZiBbIC1mIC9ldGMvZGVmYXVsdC9uZWFyZCBdIDsgdGhlbgorCS4gL2V0Yy9kZWZhdWx0L25lYXJkCitmaQorCitzZXQgLWUKKworZG9fc3RhcnQoKSB7CisJJERBRU1PTgorfQorCitkb19zdG9wKCkgeworCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLW5hbWUgbmVhcmQgLS1xdWlldAorfQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisJZWNobyAiU3RhcnRpbmcgJERFU0MiCisJZG9fc3RhcnQKKwk7OworICBzdG9wKQorCWVjaG8gIlN0b3BwaW5nICRERVNDIgorCWRvX3N0b3AKKwk7OworICByZXN0YXJ0fGZvcmNlLXJlbG9hZCkKKwllY2hvICJSZXN0YXJ0aW5nICRERVNDIgorCWRvX3N0b3AKKwlzbGVlcCAxCisJZG9fc3RhcnQKKwk7OworICAqKQorCWVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iID4mMgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25lYXJkL25lYXJkXzAuMTUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmRfMC4xNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWRmNzBjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25lYXJkL25lYXJkXzAuMTUuYmIKQEAgLTAsMCArMSw2MSBAQAorU1VNTUFSWSA9ICJMaW51eCBORkMgZGFlbW9uIgorREVTQ1JJUFRJT04gPSAiQSBkYWVtb24gZm9yIHRoZSBMaW51eCBOZWFyIEZpZWxkIENvbW11bmljYXRpb24gc3RhY2siCitIT01FUEFHRSA9ICJodHRwOi8vMDEub3JnL2xpbnV4LW5mYyIKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK0RFUEVORFMgPSAiZGJ1cyBnbGliLTIuMCBsaWJubCIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L25ldHdvcmsvbmZjLyR7QlB9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9uZWFyZC5pbiBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS5hbS1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUuYW0tZG8tbm90LXNoaXAtdmVyc2lvbi5oLnBhdGNoIFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiYjc0NmNlNjJlZWVmODhlOGRlOTA3NjVlMDBhNzVhMWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjUxZjY1MTNkMzJjZGFmOGE0MjYyNTVkMDNhZmYzOGE2NjIwYTg5YjA1NjdlYzJiMzY2MDZjNjMzMGE5MzM1MyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTJmODg0ZDJhZTFmZjg3YzA5ZTViN2NjYzJjNGNhN2UgXAorIGZpbGU6Ly9zcmMvbmVhci5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PTM1OGU0ZGVlZmVmMjUxYTQ3NjFlMWZmYWNjOTY1ZDEzIFwKKyAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBzeXN0ZW1kIHVwZGF0ZS1yYy5kIGJsdWV0b290aAorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3N5c3RlbWQnLCAnJywgZCl9IgorCitQQUNLQUdFQ09ORklHW3N5c3RlbWRdID0gIi0tZW5hYmxlLXN5c3RlbWQgLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vIC0td2l0aC1zeXN0ZW1kdXNlcnVuaXRkaXI9JHtzeXN0ZW1kX3VuaXRkaXJ9L3VzZXIvLC0tZGlzYWJsZS1zeXN0ZW1kIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLXRvb2xzIgorCisjIFRoaXMgd291bGQgY29weSBuZWFyZCBzdGFydC1zdG9wIHNoZWxsIGFuZCB0ZXN0IHNjcmlwdHMKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwkJc2VkICJzOkBpbnN0YWxscGF0aEA6JHtsaWJleGVjZGlyfS9uZmM6IiAke1dPUktESVJ9L25lYXJkLmluIFwKKwkJICA+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9uZWFyZAorCQljaG1vZCAwNzU1ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9uZWFyZAorCWZpCisKKwkjIEluc3RhbGwgdGhlIHRlc3RzIGZvciBuZWFyZC10ZXN0cworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9uZWFyZAorCWluc3RhbGwgLW0gMDc1NSAke1N9L3Rlc3QvKiAke0R9JHtsaWJkaXJ9LyR7QlBOfS8KKwlpbnN0YWxsIC1tIDA3NTUgJHtCfS90b29scy9uZmN0b29sL25mY3Rvb2wgJHtEfSR7bGliZGlyfS8ke0JQTn0vCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS10ZXN0cyIKKworRklMRVNfJHtQTn0tdGVzdHMgPSAiJHtsaWJkaXJ9LyR7QlBOfS8qLXRlc3QiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8ke0JQTn0vKi8uZGVidWciCisKK1JERVBFTkRTXyR7UE59ID0gImRidXMgcHl0aG9uIHB5dGhvbi1kYnVzIHB5dGhvbi1weWdvYmplY3QiCisKKyMgQmx1ZXogJiBXaWZpIGFyZSBub3QgbWFuZGF0b3J5IGV4Y2VwdCBmb3IgaGFuZG92ZXIKK1JSRUNPTU1FTkRTXyR7UE59ID0gIlwKKyAgICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXRvb3RoJywgJyR7QkxVRVp9JywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dpZmknLCd3cGEtc3VwcGxpY2FudCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICAiCisKK1JERVBFTkRTXyR7UE59LXRlc3RzID0gInB5dGhvbiBweXRob24tZGJ1cyBweXRob24tcHlnb2JqZWN0IgorCitJTklUU0NSSVBUX05BTUUgPSAibmVhcmQiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJkZWZhdWx0cyA2NCIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIm5lYXJkLnNlcnZpY2UiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2ZpbGVzL25mcy11dGlscy1kZWJpYW5pemUtc3RhcnQtc3RhdGQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2ZpbGVzL25mcy11dGlscy1kZWJpYW5pemUtc3RhcnQtc3RhdGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUwMDIyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvZmlsZXMvbmZzLXV0aWxzLWRlYmlhbml6ZS1zdGFydC1zdGF0ZC5wYXRjaApAQCAtMCwwICsxLDQxIEBACitbUEFUQ0hdIG5mcy11dGlsczogZGViaWFuaXplIHN0YXJ0LXN0YXRkCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCittYWtlIHN0YXJ0LXN0YXRkIGNvbW1hbmQgdG8gdXNlIG5mc2NvbW1vbiBjb25maWd1cmUsIHRvby4KKworU2lnbmVkLW9mZi1ieTogSGVucmlrIFJpb21hciA8aGVucmlrLnJpb21hckBlcmljc3Nvbi5jb20+CitTaWduZWQtb2ZmLWJ5OiBMaSBXYW5nIDxsaS53YW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHV0aWxzL3N0YXRkL3N0YXJ0LXN0YXRkIHwgOSArKysrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS91dGlscy9zdGF0ZC9zdGFydC1zdGF0ZCBiL3V0aWxzL3N0YXRkL3N0YXJ0LXN0YXRkCitpbmRleCBlYzkzODNiLi4zOTY5YjhjIDEwMDc1NQorLS0tIGEvdXRpbHMvc3RhdGQvc3RhcnQtc3RhdGQKKysrKyBiL3V0aWxzL3N0YXRkL3N0YXJ0LXN0YXRkCitAQCAtNiw2ICs2LDEzIEBACisgIyBzaXRlLgorIFBBVEg9Ii9zYmluOi91c3Ivc2JpbjovYmluOi91c3IvYmluIgorIAorKyMgUmVhZCBjb25maWcKKytERUZBVUxURklMRT0vZXRjL2RlZmF1bHQvbmZzLWNvbW1vbgorK05FRURfSURNQVBEPQorK2lmIFsgLWYgJERFRkFVTFRGSUxFIF07IHRoZW4KKysgICAgLiAkREVGQVVMVEZJTEUKKytmaQorKworICMgRmlyc3QgdHJ5IHN5c3RlbWQgaWYgaXQncyBpbnN0YWxsZWQuCisgaWYgc3lzdGVtY3RsIC0taGVscCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIyBRdWl0IG9ubHkgaWYgdGhlIGNhbGwgd29ya2VkLgorQEAgLTEzLDQgKzIwLDQgQEAgaWYgc3lzdGVtY3RsIC0taGVscCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyBmaQorIAorICMgRmFsbCBiYWNrIHRvIGxhdW5jaGluZyBpdCBvdXJzZWx2ZXMuCistZXhlYyBycGMuc3RhdGQgLS1uby1ub3RpZnkKKytleGVjIHJwYy5zdGF0ZCAtLW5vLW5vdGlmeSAkU1RBVERPUFRTCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXAvMDAwMS1pbmNsdWRlLXN5cy10eXBlcy5oLWZvci1nZXR0aW5nLXVfLXR5cGVkZWZzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9saWJuZnNpZG1hcC8wMDAxLWluY2x1ZGUtc3lzLXR5cGVzLmgtZm9yLWdldHRpbmctdV8tdHlwZWRlZnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFjNTI5MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXAvMDAwMS1pbmNsdWRlLXN5cy10eXBlcy5oLWZvci1nZXR0aW5nLXVfLXR5cGVkZWZzLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK0Zyb20gYTVlOTVhNDJlN2JjZWRkYzllY2FkMDY2OTRjMWEwNTg4ZjRiYWZjOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDE0IEFwciAyMDE1IDA3OjIyOjQ3IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGluY2x1ZGUgc3lzL3R5cGVzLmggZm9yIGdldHRpbmcgdV8qIHR5cGVkZWZzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgY2ZnLmggfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2NmZy5oIGIvY2ZnLmgKK2luZGV4IGQ0ZDRjYWIuLmZlNDllOGYgMTAwNjQ0CistLS0gYS9jZmcuaAorKysrIGIvY2ZnLmgKK0BAIC0zMyw2ICszMyw3IEBACisgI2lmbmRlZiBfQ09ORl9IXworICNkZWZpbmUgX0NPTkZfSF8KKyAKKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgInF1ZXVlLmgiCisgCisgc3RydWN0IGNvbmZfbGlzdF9ub2RlIHsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9saWJuZnNpZG1hcC9TZXRfbm9ib2R5X3VzZXJfZ3JvdXAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2xpYm5mc2lkbWFwL1NldF9ub2JvZHlfdXNlcl9ncm91cC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjMzZGE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9saWJuZnNpZG1hcC9TZXRfbm9ib2R5X3VzZXJfZ3JvdXAucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorU2V0IG5vYm9keSB1c2VyIGFuZCBncm91cAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFJveS5MaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLSBhL2lkbWFwZC5jb25mCisrKysgYi9pZG1hcGQuY29uZgorQEAgLTE3LDggKzE3LDggQEAKKyAKKyBbTWFwcGluZ10KKyAKKy0jTm9ib2R5LVVzZXIgPSBub2JvZHkKKy0jTm9ib2R5LUdyb3VwID0gbm9ib2R5CisrTm9ib2R5LVVzZXIgPSBub2JvZHkKKytOb2JvZHktR3JvdXAgPSBub2dyb3VwCisgCisgW1RyYW5zbGF0aW9uXQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9saWJuZnNpZG1hcC9maXgtYWMtcHJlcmVxLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9saWJuZnNpZG1hcC9maXgtYWMtcHJlcmVxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MWM3YzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2xpYm5mc2lkbWFwL2ZpeC1hYy1wcmVyZXEucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTEsNyArMSw3IEBACisgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorICMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KKyAKKy1BQ19QUkVSRVEoWzIuNjhdKQorK0FDX1BSRVJFUShbMi42NV0pCisgQUNfSU5JVChbbGlibmZzaWRtYXBdLFswLjI1XSxbbGludXgtbmZzQHZnZXIua2VybmVsLm9yZ10pCisgQUNfQ09ORklHX1NSQ0RJUihbbmZzaWRtYXAuaF0pCisgQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9saWJuZnNpZG1hcF8wLjI1LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9saWJuZnNpZG1hcF8wLjI1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNTc4ZTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2xpYm5mc2lkbWFwXzAuMjUuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJORlMgaWQgbWFwcGluZyBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5jaXRpLnVtaWNoLmVkdS9wcm9qZWN0cy9uZnN2NC9saW51eC8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDljNmEyYTBjYTYwMTdmZGE3Y2Q5MDVlZDI3MzliMzciCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5jaXRpLnVtaWNoLmVkdS9wcm9qZWN0cy9uZnN2NC9saW51eC9saWJuZnNpZG1hcC8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1hYy1wcmVyZXEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vU2V0X25vYm9keV91c2VyX2dyb3VwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaW5jbHVkZS1zeXMtdHlwZXMuaC1mb3ItZ2V0dGluZy11Xy10eXBlZGVmcy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmFjNDg5M2M5MjcxNmFkZDFhMTQ0N2FlMDFkZjc3YWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjU2ZDI0NWQ4NDQwMGUxMDMwZjhmNDBhNWEyN2RhNzYzNzA2OTBjNGE5MzJiYWYyNDkxMTBmMDQ3ZmU3ZWZjZiIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1sZGFwIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS8ke0JQTn0tJHtQVn0vaWRtYXBkLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vaWRtYXBkLmNvbmYKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvMDAwMS1jb25maWd1cmUtQWxsb3ctdG8tZXhwbGljaXRseS1kaXNhYmxlLW5mc2lkbWFwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvMDAwMS1jb25maWd1cmUtQWxsb3ctdG8tZXhwbGljaXRseS1kaXNhYmxlLW5mc2lkbWFwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMjVmYjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy8wMDAxLWNvbmZpZ3VyZS1BbGxvdy10by1leHBsaWNpdGx5LWRpc2FibGUtbmZzaWRtYXAucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSA5Yjg0Y2ZmMzA1ODY2YWJkMTUwY2YxYTRjNmU3ZTVlYmY4YTdlYjNhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorRGF0ZTogRnJpLCAxNSBOb3YgMjAxMyAyMzoyMTozNSArMDEwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmU6IEFsbG93IHRvIGV4cGxpY2l0bHkgZGlzYWJsZSBuZnNpZG1hcAorCisqIGtleXV0aWxzIGF2YWlsYWJpbGl0eSBpcyBhdXRvZGV0ZWN0ZWQgYW5kIGJ1aWxkcyBhcmVuJ3QgcmVwcm9kdWNpYmxlCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAxMCArKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiZjQzM2Q2Li4yOGE4ZjYyIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02OSw2ICs2OSwxMiBAQCBBQ19BUkdfRU5BQkxFKG5mc3Y0LAorIAlBQ19TVUJTVChlbmFibGVfbmZzdjQpCisgCUFNX0NPTkRJVElPTkFMKENPTkZJR19ORlNWNCwgW3Rlc3QgIiRlbmFibGVfbmZzdjQiID0gInllcyJdKQorIAorK0FDX0FSR19FTkFCTEUobmZzaWRtYXAsCisrICAgICAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW5mc2lkbWFwXSwKKysgICAgICAgICAgICAgICAgICAgICAgICBbZW5hYmxlIHN1cHBvcnQgZm9yIE5GU3Y0IGlkbWFwcGVyIEA8OkBkZWZhdWx0PXllc0A6PkBdKV0sCisrICAgICAgICBlbmFibGVfbmZzaWRtYXA9JGVuYWJsZXZhbCwKKysgICAgICAgIGVuYWJsZV9uZnNpZG1hcD15ZXMpCisrCisgQUNfQVJHX0VOQUJMRShuZnN2NDEsCisgCVtBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtbmZzdjQxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbZW5hYmxlIHN1cHBvcnQgZm9yIE5GU3Y0MSBAPDpAZGVmYXVsdD15ZXNAOj5AXSldLAorQEAgLTI5Niw3ICszMDIsNyBAQCBmaQorIAorIGRubCBlbmFibGUgbmZzaWRtYXAgd2hlbiBpdHMgc3VwcG9ydCBieSBsaWJuZnNpZG1hcAorIEFNX0NPTkRJVElPTkFMKENPTkZJR19ORlNEQ0xUUkFDSywgW3Rlc3QgIiRlbmFibGVfbmZzZGNsdHJhY2siID0gInllcyIgXSkKKy1BTV9DT05ESVRJT05BTChDT05GSUdfTkZTSURNQVAsIFt0ZXN0ICIkYWNfY3ZfaGVhZGVyX2tleXV0aWxzX2gkYWNfY3ZfbGliX25mc2lkbWFwX25mczRfb3duZXJfdG9fdWlkIiA9ICJ5ZXN5ZXMiXSkKKytBTV9DT05ESVRJT05BTChDT05GSUdfTkZTSURNQVAsIFt0ZXN0ICIkZW5hYmxlX25mc2lkbWFwJGFjX2N2X2hlYWRlcl9rZXl1dGlsc19oJGFjX2N2X2xpYl9uZnNpZG1hcF9uZnM0X293bmVyX3RvX3VpZCIgPSAieWVzeWVzeWVzIl0pCisgCisgCisgaWYgdGVzdCAiJGtuZnNkX2N2X2dsaWJjMiIgPSBubzsgdGhlbgorLS0gCisxLjguNC4zCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy1tb3VudGQuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy1tb3VudGQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTNkZGMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLW1vdW50ZC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTEgQEAKK1tVbml0XQorRGVzY3JpcHRpb249TkZTIE1vdW50IERhZW1vbgorQWZ0ZXI9cnBjYmluZC5zZXJ2aWNlIG5mcy1zZXJ2ZXIuc2VydmljZQorUmVxdWlyZXM9cnBjYmluZC5zZXJ2aWNlIG5mcy1zZXJ2ZXIuc2VydmljZQorCitbU2VydmljZV0KK0Vudmlyb25tZW50RmlsZT0tQFNZU0NPTkZESVJAL25mcy11dGlscy5jb25mCitFeGVjU3RhcnQ9QFNCSU5ESVJAL3JwYy5tb3VudGQgLUYgJE1PVU5URF9PUFRTCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy1zZXJ2ZXIuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy1zZXJ2ZXIuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDdkN2E3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLXNlcnZlci5zZXJ2aWNlCkBAIC0wLDAgKzEsMTggQEAKK1tVbml0XQorRGVzY3JpcHRpb249TkZTIFNlcnZlcgorUmVxdWlyZXM9cnBjYmluZC5zZXJ2aWNlIG5mcy1tb3VudGQuc2VydmljZQorQWZ0ZXI9cnBjYmluZC5zZXJ2aWNlCisKK1tTZXJ2aWNlXQorVHlwZT1vbmVzaG90CitFbnZpcm9ubWVudEZpbGU9LUBTWVNDT05GRElSQC9uZnMtdXRpbHMuY29uZgorRXhlY1N0YXJ0UHJlPUBTQklORElSQC9leHBvcnRmcyAtcgorRXhlY1N0YXJ0PUBTQklORElSQC9ycGMubmZzZCAkTkZTRF9PUFRTICRORlNEX0NPVU5UCitFeGVjU3RvcD1AU0JJTkRJUkAvcnBjLm5mc2QgMAorRXhlY1N0b3BQb3N0PUBTQklORElSQC9leHBvcnRmcyAtZgorRXhlY1JlbG9hZD1AU0JJTkRJUkAvZXhwb3J0ZnMgLXIKK1N0YW5kYXJkRXJyb3I9c3lzbG9nCitSZW1haW5BZnRlckV4aXQ9eWVzCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy1zdGF0ZC5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLXN0YXRkLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ2ZGFjZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy1zdGF0ZC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTIgQEAKK1tVbml0XQorRGVzY3JpcHRpb249TkZTIGZpbGUgbG9ja2luZyBzZXJ2aWNlCitBZnRlcj1ycGNiaW5kLnNlcnZpY2UKK1JlcXVpcmVzPXJwY2JpbmQuc2VydmljZQorQmVmb3JlPXJlbW90ZS1mcy1wcmUudGFyZ2V0CisKK1tTZXJ2aWNlXQorRW52aXJvbm1lbnRGaWxlPS1AU1lTQ09ORkRJUkAvbmZzLXV0aWxzLmNvbmYKK0V4ZWNTdGFydD1AU0JJTkRJUkAvcnBjLnN0YXRkIC1GICRTVEFURF9PUFRTCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy11dGlscy0xLjIuMy1zbS1ub3RpZnktcmVzX2luaXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtdXRpbHMtMS4yLjMtc20tbm90aWZ5LXJlc19pbml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZjgxODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtdXRpbHMtMS4yLjMtc20tbm90aWZ5LXJlc19pbml0LnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0ZpeGVzIGVycm9ycyBsaWtlCitzbS1ub3RpZnlbMTA3MF06IEROUyByZXNvbHV0aW9uIG9mIGEuYi5jLmQuLmNvbSBmYWlsZWQ7IHJldHJ5aW5nIGxhdGVyCitUaGlzIGVycm9yIHdpbGwgb2NjdXIgYW55dGltZSBzbS1ub3RpZnkgaXMgcnVuIGJlZm9yZSB0aGUgbmV0d29yayBpZiBmdWxseSB1cCwKK3doaWNoIGlzIGhhcHBlbmluZyBtb3JlIGFuZCBtb3JlIHdpdGggcGFyYWxsZWwgc3RhcnR1cCBzeXN0ZW1zLgorVGhlIHJlc19pbml0KCkgY2FsbCBpcyBzaW1wbGUsIHNhZmUsIHF1aWNrLCBhbmQgYSBwYXRjaCB0byB1c2UgaXQgc2hvdWxkIGJlCithYmxlIHRvIGdvIHVwc3RyZWFtLiAgUHJlc3VtYWJseSB0aGUgd2hvbGUgcmVhc29uIHNtLW5vdGlmeSB0cmllcyBzZXZlcmFsCit0aW1lcyBpcyB0byB3YWl0IGZvciBwb3NzaWJsZSBjaGFuZ2VzIHRvIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIGJ1dCB3aXRob3V0CitjYWxsaW5nIHJlc19pbml0KCkgaXQgd2lsbCBuZXZlciBiZSBhd2FyZSBvZiB0aG9zZSBjaGFuZ2VzCisKK0JhY2twb3J0ZWQgZHJvbSBGZWRvcmEKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCisKK2RpZmYgLXVwIG5mcy11dGlscy0xLjIuMy91dGlscy9zdGF0ZC9zbS1ub3RpZnkuYy5vcmlnIG5mcy11dGlscy0xLjIuMy91dGlscy9zdGF0ZC9zbS1ub3RpZnkuYworLS0tIG5mcy11dGlscy0xLjIuMy91dGlscy9zdGF0ZC9zbS1ub3RpZnkuYy5vcmlnCTIwMTAtMDktMjggMDg6MjQ6MTYuMDAwMDAwMDAwIC0wNDAwCisrKysgbmZzLXV0aWxzLTEuMi4zL3V0aWxzL3N0YXRkL3NtLW5vdGlmeS5jCTIwMTAtMTAtMTUgMTY6NDQ6NDMuNDg3MTE5NjAxIC0wNDAwCitAQCAtMjgsNiArMjgsOSBAQAorICNpbmNsdWRlIDxuZXRkYi5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxncnAuaD4KKysjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKysjaW5jbHVkZSA8cmVzb2x2Lmg+CisgCisgI2luY2x1ZGUgInNvY2thZGRyLmgiCisgI2luY2x1ZGUgInhsb2cuaCIKK0BAIC04NCw2ICs4Nyw3IEBAIHNtbl9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKKyAJfTsKKyAJaW50IGVycm9yOworIAorKwlyZXNfaW5pdCgpOworIAllcnJvciA9IGdldGFkZHJpbmZvKG5hbWUsIE5VTEwsICZoaW50LCAmYWkpOworIAlpZiAoZXJyb3IgIT0gMCkgeworIAkJeGxvZyhEX0dFTkVSQUwsICJnZXRhZGRyaW5mbygzKTogJXMiLCBnYWlfc3RyZXJyb3IoZXJyb3IpKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy11dGlscy1Eby1ub3QtcGFzcy1DRkxBR1MtdG8tZ2NjLXdoaWxlLWJ1aWxkaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLXV0aWxzLURvLW5vdC1wYXNzLUNGTEFHUy10by1nY2Mtd2hpbGUtYnVpbGRpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkzZjFlNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy11dGlscy1Eby1ub3QtcGFzcy1DRkxBR1MtdG8tZ2NjLXdoaWxlLWJ1aWxkaW5nLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK25mcy11dGlsczogRG8gbm90IHBhc3MgQ0ZMQUdTIHRvIGdjYyB3aGlsZSBidWlsZGluZworCitEbyBub3QgcGFzcyBDRkxBR1MvTERGTEFHUyB0byBnY2Mgd2hpbGUgYnVpbGRpbmcsIFRoZSBuZWVkZWQgZmxhZ3MgaGFzCitiZWVuIHBhc3NlZCBieSB4eHhfQ0ZMQUdTPSQoQ0ZMQUdTX0ZPUl9CVUlMRCkuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIHRvb2xzL2xvY2t0ZXN0L01ha2VmaWxlLmFtIHwgICAgMiArKworIHRvb2xzL3JwY2dlbi9NYWtlZmlsZS5hbSAgIHwgICAgMiArKworIDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS90b29scy9sb2NrdGVzdC9NYWtlZmlsZS5hbSBiL3Rvb2xzL2xvY2t0ZXN0L01ha2VmaWxlLmFtCitpbmRleCAzMTU2ODE1Li4xNzI5ZmQxIDEwMDY0NAorLS0tIGEvdG9vbHMvbG9ja3Rlc3QvTWFrZWZpbGUuYW0KKysrKyBiL3Rvb2xzL2xvY2t0ZXN0L01ha2VmaWxlLmFtCitAQCAtMSw2ICsxLDggQEAKKyAjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KKyAKKyBDQz0kKENDX0ZPUl9CVUlMRCkKKytDRkxBR1M9CisrTERGTEFHUz0KKyBMSUJUT09MID0gQExJQlRPT0xAIC0tdGFnPUNDCisgCisgbm9pbnN0X1BST0dSQU1TID0gdGVzdGxrCitkaWZmIC0tZ2l0IGEvdG9vbHMvcnBjZ2VuL01ha2VmaWxlLmFtIGIvdG9vbHMvcnBjZ2VuL01ha2VmaWxlLmFtCitpbmRleCA4YTllYzg5Li44YmFjZGFhIDEwMDY0NAorLS0tIGEvdG9vbHMvcnBjZ2VuL01ha2VmaWxlLmFtCisrKysgYi90b29scy9ycGNnZW4vTWFrZWZpbGUuYW0KK0BAIC0xLDYgKzEsOCBAQAorICMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbgorIAorIENDPSQoQ0NfRk9SX0JVSUxEKQorK0NGTEFHUz0KKytMREZMQUdTPQorIExJQlRPT0wgPSBATElCVE9PTEAgLS10YWc9Q0MKKyAKKyBub2luc3RfUFJPR1JBTVMgPSBycGNnZW4KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtdXRpbHMuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy11dGlscy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMDA3YTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtdXRpbHMuY29uZgpAQCAtMCwwICsxLDM1IEBACisjIFBhcmFtZXRlcnMgdG8gYmUgcGFzc2VkIHRvIG5mcy11dGlscyAoY2xpZW50cyAmIHNlcnZlcikgc2VydmljZSBmaWxlcy4KKyMKKworIyBPcHRpb25zIHRvIHBhc3MgdG8gcnBjLm5mc2QuCitORlNEX09QVFM9IiIKKworIyBOdW1iZXIgb2Ygc2VydmVycyB0byBzdGFydCB1cDsgdGhlIGRlZmF1bHQgaXMgOCBzZXJ2ZXJzLgorTkZTRF9DT1VOVD0iIgorCisjIFdoZXJlIHRvIG1vdW50IG5mc2QgZmlsZXN5c3RlbTsgdGhlIGRlZmF1bHQgaXMgIi9wcm9jL2ZzL25mc2QiLgorUFJPQ05GU0RfTU9VTlRQT0lOVD0iIgorCisjIE9wdGlvbnMgdXNlZCB0byBtb3VudCBuZnNkIGZpbGVzeXN0ZW07IHRoZSBkZWZhdWx0IGlzICJydyxub2Rldixub2V4ZWMsbm9zdWlkIi4KK1BST0NORlNEX01PVU5UT1BUUz0iIgorCisjIE9wdGlvbnMgZm9yIHJwYy5tb3VudGQuCisjIElmIHlvdSBoYXZlIGEgcG9ydC1iYXNlZCBmaXJld2FsbCwgeW91IG1pZ2h0IHdhbnQgdG8gc2V0IHVwCisjIGEgZml4ZWQgcG9ydCBoZXJlIHVzaW5nIHRoZSAtLXBvcnQgb3B0aW9uLgorTU9VTlREX09QVFM9IiIKKworIyBQYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCB0byBuZnMtY29tbW9uIChuZnMgY2xpZW50cyAmIHNlcnZlcikgaW5pdCBzY3JpcHQuCisjCisKKyMgSWYgeW91IGRvIG5vdCBzZXQgdmFsdWVzIGZvciB0aGUgTkVFRF8gb3B0aW9ucywgdGhleSB3aWxsIGJlIGF0dGVtcHRlZAorIyBhdXRvZGV0ZWN0ZWQ7IHRoaXMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIG1vc3QgcGVvcGxlLiBWYWxpZCBhbHRlcm5hdGl2ZXMKKyMgZm9yIHRoZSBORUVEXyBvcHRpb25zIGFyZSAieWVzIiBhbmQgIm5vIi4KKworIyBEbyB5b3Ugd2FudCB0byBzdGFydCB0aGUgc3RhdGQgZGFlbW9uPyBJdCBpcyBub3QgbmVlZGVkIGZvciBORlN2NC4KK05FRURfU1RBVEQ9IiIKKworIyBPcHRpb25zIHRvIHBhc3MgdG8gcnBjLnN0YXRkLgorIyBOLkIuIHN0YXRkIG5vcm1hbGx5IHJ1bnMgb24gYm90aCBjbGllbnQgYW5kIHNlcnZlciwgYW5kIHJ1bi10aW1lCisjIG9wdGlvbnMgc2hvdWxkIGJlIHNwZWNpZmllZCBhY2NvcmRpbmdseS4KKyMgU1RBVERfT1BUUz0iLXAgMzI3NjUgLW8gMzI3NjYiCitTVEFURF9PUFRTPSIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnNjb21tb24gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnNjb21tb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkyMjY3ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mc2NvbW1vbgpAQCAtMCwwICsxLDYzIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIG5mcy1jb21tb24KKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRwb3J0bWFwIGh3Y2xvY2sKKyMgUmVxdWlyZWQtU3RvcDogICAgICRwb3J0bWFwIGh3Y2xvY2sKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBORlMgc3VwcG9ydCBmb3IgYm90aCBjbGllbnQgYW5kIHNlcnZlcgorIyBEZXNjcmlwdGlvbjogICAgICAgTkZTIGlzIGEgcG9wdWxhciBwcm90b2NvbCBmb3IgZmlsZSBzaGFyaW5nIGFjcm9zcworIyAgICAgICAgICAgICAgICAgICAgVENQL0lQIG5ldHdvcmtzLiBUaGlzIHNlcnZpY2UgcHJvdmlkZXMgdmFyaW91cworIyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIE5GUyBtb3VudHMuCisjIyMgRU5EIElOSVQgSU5GTworIworIyBTdGFydHVwIHNjcmlwdCBmb3IgbmZzLXV0aWxzCisjCisjCisjIExvY2F0aW9uIG9mIGV4ZWN1dGFibGVzOgorCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKwordGVzdCAteCAiJE5GU19TVEFURCIgfHwgTkZTX1NUQVREPS91c3Ivc2Jpbi9ycGMuc3RhdGQKK3Rlc3QgLXogIiRTVEFURF9QSUQiICYmIFNUQVREX1BJRD0vdmFyL3J1bi9ycGMuc3RhdGQucGlkCisjCisjIFRoZSBkZWZhdWx0IHN0YXRlIGRpcmVjdG9yeSBpcyAvdmFyL2xpYi9uZnMKK3Rlc3QgLW4gIiRORlNfU1RBVEVESVIiIHx8IE5GU19TVEFURURJUj0vdmFyL2xpYi9uZnMKKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFN0YXJ0dXAgYW5kIHNodXRkb3duIGZ1bmN0aW9ucy4KKyMgIEFjdHVhbCBzdGFydHVwL3NodXRkb3duIGlzIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLgorCitzdGFydF9zdGF0ZCgpeworCWVjaG8gLW4gInN0YXJ0aW5nIHN0YXRkOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLWV4ZWMgIiRORlNfU1RBVEQiIC0tcGlkZmlsZSAiJFNUQVREX1BJRCIKKwllY2hvIGRvbmUKK30KK3N0b3Bfc3RhdGQoKXsKKwllY2hvIC1uICdzdG9wcGluZyBzdGF0ZDogJworCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tc2lnbmFsIDEgLS1waWRmaWxlICIkU1RBVERfUElEIgorCWVjaG8gZG9uZQorfQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgc3VwcG9ydGVkIG9wdGlvbnM6CisjICBzdGFydAorIyAgc3RvcAorIyAgcmVzdGFydDogc3RvcHMgYW5kIHN0YXJ0cyBtb3VudGQKKyNGSVhNRTogbmVlZCB0byBjcmVhdGUgdGhlIC92YXIvbGliL25mcy8uLi4gZGlyZWN0b3JpZXMKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwlzdGFydF9zdGF0ZDs7CisgIHN0b3ApCisJc3RvcF9zdGF0ZDs7CisgIHN0YXR1cykKKwlzdGF0dXMgJE5GU19TVEFURAorCWV4aXQgJD87OworICByZXN0YXJ0KQorCSQwIHN0b3AKKwkkMCBzdGFydDs7CisgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHN0YXR1c3xyZXN0YXJ0fSIKKwlleGl0IDE7OworZXNhYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzc2VydmVyIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzc2VydmVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZDkzYTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnNzZXJ2ZXIKQEAgLTAsMCArMSwxMzAgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgbmZzLWtlcm5lbC1zZXJ2ZXIKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRyZW1vdGVfZnMgbmZzLWNvbW1vbiAkcG9ydG1hcCBod2Nsb2NrCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkcmVtb3RlX2ZzIG5mcy1jb21tb24gJHBvcnRtYXAgaHdjbG9jaworIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IEtlcm5lbCBORlMgc2VydmVyIHN1cHBvcnQKKyMgRGVzY3JpcHRpb246ICAgICAgIE5GUyBpcyBhIHBvcHVsYXIgcHJvdG9jb2wgZm9yIGZpbGUgc2hhcmluZyBhY3Jvc3MKKyMgICAgICAgICAgICAgICAgICAgIFRDUC9JUCBuZXR3b3Jrcy4gVGhpcyBzZXJ2aWNlIHByb3ZpZGVzIE5GUyBzZXJ2ZXIKKyMgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGNvbmZpZ3VyZWQgdmlhIHRoZQorIyAgICAgICAgICAgICAgICAgICAgL2V0Yy9leHBvcnRzIGZpbGUuCisjIyMgRU5EIElOSVQgSU5GTworIworIyBTdGFydHVwIHNjcmlwdCBmb3IgbmZzLXV0aWxzCisjCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKyMKKyMgVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIE5GU19TRVJWRVJTIG1heSBiZSBzZXQgaW4gL2V0Yy9kZWZhdWx0L25mc2QKKyMgT3RoZXIgY29udHJvbCB2YXJpYWJsZXMgbWF5IGJlIG92ZXJyaWRkZW4gaGVyZSB0b28KK3Rlc3QgLXIgL2V0Yy9kZWZhdWx0L25mc2QgJiYgLiAvZXRjL2RlZmF1bHQvbmZzZAorIworIyBMb2NhdGlvbiBvZiBleGVjdXRhYmxlczoKK3Rlc3QgLXggIiRORlNfTU9VTlREIiB8fCBORlNfTU9VTlREPS91c3Ivc2Jpbi9ycGMubW91bnRkCit0ZXN0IC14ICIkTkZTX05GU0QiIHx8IE5GU19ORlNEPS91c3Ivc2Jpbi9ycGMubmZzZAorIworIyBUaGUgdXNlciBtb2RlIHByb2dyYW0gbXVzdCBhbHNvIGV4aXN0IChpdCBqdXN0IHN0YXJ0cyB0aGUga2VybmVsCisjIHRocmVhZHMgdXNpbmcgdGhlIGtlcm5lbCBtb2R1bGUgY29kZSkuCit0ZXN0IC14ICIkTkZTX01PVU5URCIgfHwgZXhpdCAwCit0ZXN0IC14ICIkTkZTX05GU0QiIHx8IGV4aXQgMAorIworIyBEZWZhdWx0IGlzIDggdGhyZWFkcywgdmFsdWUgaXMgc2V0dGFibGUgYmV0d2VlbiAxIGFuZCB0aGUgdHJ1ZWx5CisjIHJpZGljdWxvdXMgOTkKK3Rlc3QgIiRORlNfU0VSVkVSUyIgIT0gIiIgJiYgdGVzdCAiJE5GU19TRVJWRVJTIiAtZ3QgMCAmJiB0ZXN0ICIkTkZTX1NFUlZFUlMiIC1sdCAxMDAgfHwgTkZTX1NFUlZFUlM9OAorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU3RhcnR1cCBhbmQgc2h1dGRvd24gZnVuY3Rpb25zLgorIyAgQWN0dWFsIHN0YXJ0dXAvc2h1dGRvd24gaXMgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCisjbW91bnRkCitzdGFydF9tb3VudGQoKXsKKwllY2hvIC1uICdzdGFydGluZyBtb3VudGQ6ICcKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tZXhlYyAiJE5GU19NT1VOVEQiIC0tICItZiAvZXRjL2V4cG9ydHMgJEAiCisJZWNobyBkb25lCit9CitzdG9wX21vdW50ZCgpeworCWVjaG8gLW4gJ3N0b3BwaW5nIG1vdW50ZDogJworCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tZXhlYyAiJE5GU19NT1VOVEQiCisJZWNobyBkb25lCit9CisjCisjbmZzZAorc3RhcnRfbmZzZCgpeworICAgICAgICBtb2Rwcm9iZSAtcSBuZnNkCisJZ3JlcCAtcSBuZnNkIC9wcm9jL2ZpbGVzeXN0ZW1zIHx8IHsKKwkJZWNobyBORlMgZGFlbW9uIHN1cHBvcnQgbm90IGVuYWJsZWQgaW4ga2VybmVsCisJCWV4aXQgMQorICAgICAgICB9CisJZ3JlcCAtcSBuZnNkIC9wcm9jL21vdW50cyB8fCBtb3VudCAtdCBuZnNkIG5mc2QgL3Byb2MvZnMvbmZzZAorCWdyZXAgLXEgbmZzZCAvcHJvYy9tb3VudHMgfHwgeworCQllY2hvIG5mc2QgZmlsZXN5c3RlbSBjb3VsZCBub3QgYmUgbW91bnRlZCBhdCAvcHJvYy9mcy9uZnNkCisJCWV4aXQgMQorICAgICAgICB9CisKKwllY2hvIC1uICJzdGFydGluZyAkMSBuZnNkIGtlcm5lbCB0aHJlYWRzOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLWV4ZWMgIiRORlNfTkZTRCIgLS0gIiRAIgorCWVjaG8gZG9uZQorfQorZGVsYXlfbmZzZCgpeworCWZvciBkZWxheSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5IAorCWRvCisJCWlmIHBpZG9mIG5mc2QgPi9kZXYvbnVsbAorCQl0aGVuCisJCQllY2hvIC1uIC4KKwkJCXNsZWVwIDEKKwkJZWxzZQorCQkJcmV0dXJuIDAKKwkJZmkKKwlkb25lCisJcmV0dXJuIDEKK30KK3N0b3BfbmZzZCgpeworCSMgV0FSTklORzogdGhpcyBraWxscyBhbnkgcHJvY2VzcyB3aXRoIHRoZSBleGVjdXRhYmxlCisJIyBuYW1lICduZnNkJy4KKwllY2hvIC1uICdzdG9wcGluZyBuZnNkOiAnCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1zaWduYWwgMSAtLW5hbWUgbmZzZAorCWlmIGRlbGF5X25mc2QgfHwgeworCQllY2hvIGZhaWxlZAorCQllY2hvICcgdXNpbmcgc2lnbmFsIDk6ICcKKwkJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1zaWduYWwgOSAtLW5hbWUgbmZzZAorCQlkZWxheV9uZnNkCisJfQorCXRoZW4KKwkJZWNobyBkb25lCisJZWxzZQorCQllY2hvIGZhaWxlZAorCWZpCit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIHN1cHBvcnRlZCBvcHRpb25zOgorIyAgc3RhcnQKKyMgIHN0b3AKKyMgIHJlbG9hZDogcmVsb2FkcyB0aGUgZXhwb3J0cyBmaWxlCisjICByZXN0YXJ0OiBzdG9wcyBhbmQgc3RhcnRzIG1vdW50ZAorI0ZJWE1FOiBuZWVkIHRvIGNyZWF0ZSB0aGUgL3Zhci9saWIvbmZzLy4uLiBkaXJlY3RvcmllcworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWV4cG9ydGZzIC1yCisJc3RhcnRfbmZzZCAiJE5GU19TRVJWRVJTIgorCXN0YXJ0X21vdW50ZAorCXRlc3QgLXIgL2V0Yy9leHBvcnRzICYmIGV4cG9ydGZzIC1hOzsKKyAgc3RvcCkJZXhwb3J0ZnMgLXVhCisJc3RvcF9tb3VudGQKKwlzdG9wX25mc2Q7OworICBzdGF0dXMpCisJc3RhdHVzIC91c3Ivc2Jpbi9ycGMubW91bnRkCisJUkVUVkFMPSQ/CisJc3RhdHVzIG5mc2QKKwlydmFsPSQ/CisJWyAkUkVUVkFMIC1lcSAwIF0gJiYgZXhpdCAkcnZhbAorCWV4aXQgJFJFVFZBTDs7CisgIHJlbG9hZCkJdGVzdCAtciAvZXRjL2V4cG9ydHMgJiYgZXhwb3J0ZnMgLXI7OworICByZXN0YXJ0KQorCSQwIHN0b3AKKwkkMCBzdGFydDs7CisgICopCWVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVsb2FkfHJlc3RhcnR9IgorCWV4aXQgMTs7Citlc2FjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9wcm9jLWZzLW5mc2QubW91bnQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9wcm9jLWZzLW5mc2QubW91bnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMwODAxYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL3Byb2MtZnMtbmZzZC5tb3VudApAQCAtMCwwICsxLDggQEAKK1tVbml0XQorRGVzY3JpcHRpb249TkZTRCBjb25maWd1cmF0aW9uIGZpbGVzeXN0ZW0KK0FmdGVyPXN5c3RlbWQtbW9kdWxlcy1sb2FkLnNlcnZpY2UKKworW01vdW50XQorV2hhdD1uZnNkCitXaGVyZT0vcHJvYy9mcy9uZnNkCitUeXBlPW5mc2QKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzXzEuMy4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHNfMS4zLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIxMDFkZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzXzEuMy4xLmJiCkBAIC0wLDAgKzEsMTQxIEBACitTVU1NQVJZID0gInVzZXJzcGFjZSB1dGlsaXRpZXMgZm9yIGtlcm5lbCBuZnMiCitERVNDUklQVElPTiA9ICJUaGUgbmZzLXV0aWxzIHBhY2thZ2UgcHJvdmlkZXMgYSBkYWVtb24gZm9yIHRoZSBrZXJuZWwgXAorTkZTIHNlcnZlciBhbmQgcmVsYXRlZCB0b29scy4iCitIT01FUEFHRSA9ICJodHRwOi8vbmZzLnNvdXJjZWZvcmdlLm5ldC8iCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKKworTElDRU5TRSA9ICJNSVQgJiBHUEx2MisgJiBCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NWYzYTkzYTVjM2M3ODg4ZGU2MjNiNDZlYTA4NWE4NCIKKworIyB1dGlsLWxpbnV4IGZvciBsaWJibGtpZAorREVQRU5EUyA9ICJsaWJjYXAgbGlibmZzaWRtYXAgbGliZXZlbnQgdXRpbC1saW51eCBzcWxpdGUzIgorUkRFUEVORFNfJHtQTn0tY2xpZW50ID0gInJwY2JpbmQgYmFzaCIKK1JERVBFTkRTXyR7UE59ID0gIiR7UE59LWNsaWVudCBiYXNoIgorUlJFQ09NTUVORFNfJHtQTn0gPSAia2VybmVsLW1vZHVsZS1uZnNkIgorCitpbmhlcml0IHVzZXJhZGQKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfS1jbGllbnQiCitVU0VSQUREX1BBUkFNXyR7UE59LWNsaWVudCA9ICItLXN5c3RlbSAgLS1ob21lLWRpciAvdmFyL2xpYi9uZnMgXAorCQkJICAgICAgLS1zaGVsbCAvYmluL2ZhbHNlIC0tdXNlci1ncm91cCBycGN1c2VyIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvdXRpbHMvbmZzLXV0aWxzLyR7UFZ9L25mcy11dGlscy0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUtQWxsb3ctdG8tZXhwbGljaXRseS1kaXNhYmxlLW5mc2lkbWFwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25mcy11dGlscy0xLjIuMy1zbS1ub3RpZnktcmVzX2luaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbmZzc2VydmVyIFwKKyAgICAgICAgICAgZmlsZTovL25mc2NvbW1vbiBcCisgICAgICAgICAgIGZpbGU6Ly9uZnMtdXRpbHMuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9uZnMtc2VydmVyLnNlcnZpY2UgXAorICAgICAgICAgICBmaWxlOi8vbmZzLW1vdW50ZC5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL25mcy1zdGF0ZC5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL3Byb2MtZnMtbmZzZC5tb3VudCBcCisgICAgICAgICAgIGZpbGU6Ly9uZnMtdXRpbHMtRG8tbm90LXBhc3MtQ0ZMQUdTLXRvLWdjYy13aGlsZS1idWlsZGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9uZnMtdXRpbHMtZGViaWFuaXplLXN0YXJ0LXN0YXRkLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjhkZTY3NmI5ZmYzNGI4ZjlhZGRjMWQwODAwZmFiZGY4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZmNzlkNzBiN2I1OGIyYzhmOWI3OThjNTg3MjExMjdlODJiYjk2MDIyYWRjMDRhNWM0Y2IyNTE2MzBlNjk2YjgiCisKKyMgT25seSBrZXJuZWwtbW9kdWxlLW5mc2QgaXMgcmVxdWlyZWQgaGVyZSAoYnV0IGNhbiBiZSBidWlsdC1pbikgIC0gdGhlIG5mc2QgbW9kdWxlIHdpbGwKKyMgcHVsbCBpbiB0aGUgcmVtYWluZGVyIG9mIHRoZSBkZXBlbmRlbmNpZXMuCisKK0lOSVRTQ1JJUFRfUEFDS0FHRVMgPSAiJHtQTn0gJHtQTn0tY2xpZW50IgorSU5JVFNDUklQVF9OQU1FID0gIm5mc3NlcnZlciIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIgorSU5JVFNDUklQVF9OQU1FXyR7UE59LWNsaWVudCA9ICJuZnNjb21tb24iCitJTklUU0NSSVBUX1BBUkFNU18ke1BOfS1jbGllbnQgPSAiZGVmYXVsdHMgMTkgMjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCB1cGRhdGUtcmMuZCBzeXN0ZW1kIHBrZ2NvbmZpZworCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAibmZzLXNlcnZlci5zZXJ2aWNlIG5mcy1tb3VudGQuc2VydmljZSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1jbGllbnQgPSAibmZzLXN0YXRkLnNlcnZpY2UiCitTWVNURU1EX0FVVE9fRU5BQkxFID0gImRpc2FibGUiCisKKyMgLS1lbmFibGUtdXVpZCBpcyBuZWVkIGZvciBjcm9zcy1jb21waWxpbmcKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtc3RhdGR1c2VyPXJwY3VzZXIgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLW1vdW50Y29uZmlnIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1saWJtb3VudC1tb3VudCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLW5mc3Y0MSBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtdXVpZCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWdzcyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXRpcnBjIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtbmZzZGNsdHJhY2sgXAorICAgICAgICAgICAgICAgIC0td2l0aC1zdGF0ZHBhdGg9L3Zhci9saWIvbmZzL3N0YXRkIFwKKyAgICAgICAgICAgICAgICIKKworUEFDS0FHRUNPTkZJRyA/Pz0gInRjcC13cmFwcGVycyIKK1BBQ0tBR0VDT05GSUdbdGNwLXdyYXBwZXJzXSA9ICItLXdpdGgtdGNwLXdyYXBwZXJzLC0td2l0aG91dC10Y3Atd3JhcHBlcnMsdGNwLXdyYXBwZXJzIgorUEFDS0FHRUNPTkZJR1tuZnNpZG1hcF0gPSAiLS1lbmFibGUtbmZzaWRtYXAsLS1kaXNhYmxlLW5mc2lkbWFwLGtleXV0aWxzIgorCitJTkhJQklUX0FVVE9fU1RBR0UgPSAiMSIKKworUEFDS0FHRVMgPSsgIiR7UE59LWNsaWVudCAke1BOfS1zdGF0cyIKKworQ09ORkZJTEVTXyR7UE59LWNsaWVudCArPSAiJHtsb2NhbHN0YXRlZGlyfS9saWIvbmZzL2V0YWIgXAorCQkJICAgJHtsb2NhbHN0YXRlZGlyfS9saWIvbmZzL3JtdGFiIFwKKwkJCSAgICR7bG9jYWxzdGF0ZWRpcn0vbGliL25mcy94dGFiIFwKKwkJCSAgICR7bG9jYWxzdGF0ZWRpcn0vbGliL25mcy9zdGF0ZC9zdGF0ZSBcCisJCQkgICAke3N5c2NvbmZkaXJ9L25mc21vdW50LmNvbmYiCisKK0ZJTEVTXyR7UE59LWNsaWVudCA9ICIke2Jhc2Vfc2JpbmRpcn0vKm1vdW50Lm5mcyogJHtzYmluZGlyfS8qc3RhdGQgXAorCQkgICAgICAke3NiaW5kaXJ9L3JwYy5pZG1hcGQgJHtzYmluZGlyfS9zbS1ub3RpZnkgXAorCQkgICAgICAke3NiaW5kaXJ9L3Nob3dtb3VudCAke3NiaW5kaXJ9L25mc3N0YXQgXAorCQkgICAgICAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9uZnMgXAorCQkgICAgICAke3N5c2NvbmZkaXJ9L25mcy11dGlscy5jb25mIFwKKwkJICAgICAgJHtzeXNjb25mZGlyfS9uZnNtb3VudC5jb25mIFwKKwkJICAgICAgJHtzeXNjb25mZGlyfS9pbml0LmQvbmZzY29tbW9uIFwKKwkJICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9uZnMtc3RhdGQuc2VydmljZSIKK0ZJTEVTXyR7UE59LXN0YXRzID0gIiR7c2JpbmRpcn0vbW91bnRzdGF0cyAke3NiaW5kaXJ9L25mc2lvc3RhdCIKK1JERVBFTkRTXyR7UE59LXN0YXRzID0gInB5dGhvbiIKKworRklMRVNfJHtQTn0gKz0gIiR7c3lzdGVtZF91bml0ZGlyfSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgICAgIHNlZCAtaSAtZSAncyxzYmluZGlyID0gL3NiaW4sc2JpbmRpciA9ICR7YmFzZV9zYmluZGlyfSxnJyBcCisgICAgICAgICAgICAke1N9L3V0aWxzL21vdW50L01ha2VmaWxlLmFtCisKKyAgICAgICAgc2VkIC1pIC1lICdzLHNiaW5kaXIgPSAvc2JpbixzYmluZGlyID0gJHtiYXNlX3NiaW5kaXJ9LGcnIFwKKyAgICAgICAgICAgICR7U30vdXRpbHMvb3NkX2xvZ2luL01ha2VmaWxlLmFtCit9CisKKyMgTWFrZSBjbGVhbiBuZWVkZWQgYmVjYXVzZSB0aGUgcGFja2FnZSBjb21lcyB3aXRoCisjIHByZWNvbXBpbGVkIDY0LWJpdCBvYmplY3RzIHRoYXQgYnJlYWsgdGhlIGJ1aWxkCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisJbWFrZSBjbGVhbgorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9uZnNzZXJ2ZXIgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL25mc3NlcnZlcgorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L25mc2NvbW1vbiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvbmZzY29tbW9uCisKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9uZnMtdXRpbHMuY29uZiAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke1N9L3V0aWxzL21vdW50L25mc21vdW50LmNvbmYgJHtEfSR7c3lzY29uZmRpcn0KKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9uZnMtc2VydmVyLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbmZzLW1vdW50ZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L25mcy1zdGF0ZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCXNlZCAtaSAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyBcCisJCS1lICdzLEBTWVNDT05GRElSQCwke3N5c2NvbmZkaXJ9LGcnIFwKKwkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vKi5zZXJ2aWNlCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorCSAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L21vZHVsZXMtbG9hZC5kCisJICAgIGVjaG8gIm5mc2QiID4gJHtEfSR7c3lzY29uZmRpcn0vbW9kdWxlcy1sb2FkLmQvbmZzZC5jb25mCisJICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Byb2MtZnMtbmZzZC5tb3VudCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKwkgICAgaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXNpbml0LnRhcmdldC53YW50cy8KKwkgICAgbG4gLXNmIC4uL3Byb2MtZnMtbmZzZC5tb3VudCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXNpbml0LnRhcmdldC53YW50cy9wcm9jLWZzLW5mc2QubW91bnQKKwlmaQorCisJIyBrZXJuZWwgY29kZSBhcyBvZiAzLjggaGFyZC1jb2RlcyB0aGlzIHBhdGggYXMgYSBkZWZhdWx0CisJaW5zdGFsbCAtZCAke0R9L3Zhci9saWIvbmZzL3Y0cmVjb3ZlcnkKKworCSMgY2hvd24gdGhlIGRpcmVjdG9yaWVzIGFuZCBmaWxlcworCWNob3duIC1SIHJwY3VzZXI6cnBjdXNlciAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvbmZzL3N0YXRkCisJY2htb2QgMDY0NCAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvbmZzL3N0YXRkL3N0YXRlCisKKwkjIHRoZSBmb2xsb3dpbmcgYXJlIGJ1aWx0IGJ5IENDX0ZPUl9CVUlMRAorCXJtIC1mICR7RH0ke3NiaW5kaXJ9L3JwY2RlYnVnCisJcm0gLWYgJHtEfSR7c2JpbmRpcn0vcnBjZ2VuCisJcm0gLWYgJHtEfSR7c2JpbmRpcn0vbG9ja3Rlc3QKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9uby5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MTVhMzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8uaW5jCkBAIC0wLDAgKzEsMzcgQEAKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cub2Zvbm8ub3JnIgorU1VNTUFSWSAgPSAib3BlbiBzb3VyY2UgdGVsZXBob255IgorREVTQ1JJUFRJT04gPSAib0Zvbm8gaXMgYSBzdGFjayBmb3IgbW9iaWxlIHRlbGVwaG9ueSBkZXZpY2VzIG9uIExpbnV4LiBvRm9ubyBzdXBwb3J0cyBzcGVha2luZyB0byB0ZWxlcGhvbnkgZGV2aWNlcyB0aHJvdWdoIHNwZWNpZmljIGRyaXZlcnMsIG9yIHdpdGggZ2VuZXJpYyBBVCBjb21tYW5kcy4iCitMSUNFTlNFICA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9vZm9uby5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PTNjZTE3ZDU5NzhlZjM0NDVkZWYyNjViOTg4OTljMmVlIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXBkYXRlLXJjLmQgc3lzdGVtZCBibHVldG9vdGgKKworREVQRU5EUyAgPSAiZGJ1cyBnbGliLTIuMCB1ZGV2IG1vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mbyIKKworSU5JVFNDUklQVF9OQU1FID0gIm9mb25vIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMgMjIiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3N5c3RlbWQnLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsICdibHVleicsICcnLCBkKX0gXAorICAgICIKK1BBQ0tBR0VDT05GSUdbc3lzdGVtZF0gPSAiLS13aXRoLXN5c3RlbWR1bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vLC0td2l0aC1zeXN0ZW1kdW5pdGRpcj0iCitQQUNLQUdFQ09ORklHW2JsdWV6XSA9ICItLWVuYWJsZS1ibHVldG9vdGgsIC0tZGlzYWJsZS1ibHVldG9vdGgsICR7QkxVRVp9IgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLXRlc3QiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJvZm9uby5zZXJ2aWNlIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L29mb25vICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9vZm9ubworfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tdGVzdHMiCisKK1JERVBFTkRTXyR7UE59ICs9ICJkYnVzIgorCitGSUxFU18ke1BOfSArPSAiJHtiYXNlX2xpYmRpcn0vdWRldiAke3N5c3RlbWRfdW5pdGRpcn0iCitGSUxFU18ke1BOfS10ZXN0cyA9ICIke2xpYmRpcn0vJHtCUE59L3Rlc3QiCitSREVQRU5EU18ke1BOfS10ZXN0cyA9ICJweXRob24gcHl0aG9uLXB5Z29iamVjdCBweXRob24tZGJ1cyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9uby8wMDAxLWJhY2t0cmFjZS1EaXNhYmxlLWZvci1ub24tZ2xpYmMtQy1saWJyYXJpZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vMDAwMS1iYWNrdHJhY2UtRGlzYWJsZS1mb3Itbm9uLWdsaWJjLUMtbGlicmFyaWVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNmI2ZGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vMDAwMS1iYWNrdHJhY2UtRGlzYWJsZS1mb3Itbm9uLWdsaWJjLUMtbGlicmFyaWVzLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gMmQ3MjlhZjA4OTdkN2Q3MmI4M2QxMTE4NzZmZWJmOWUwZWVjMWE2OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDMgQXByIDIwMTUgMjA6NTA6NTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gYmFja3RyYWNlOiBEaXNhYmxlIGZvciBub24tZ2xpYmMgQyBsaWJyYXJpZXMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0KKyBzcmMvbG9nLmMgfCA1ICsrKystCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2xvZy5jIGIvc3JjL2xvZy5jCitpbmRleCBmZWJjODc0Li45ZGI0YWU3IDEwMDY0NAorLS0tIGEvc3JjL2xvZy5jCisrKysgYi9zcmMvbG9nLmMKK0BAIC0zMCw3ICszMCw5IEBACisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3lzbG9nLmg+CisrI2lmZGVmIF9fR0xJQkNfXworICNpbmNsdWRlIDxleGVjaW5mby5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxkbGZjbi5oPgorIAorICNpbmNsdWRlICJvZm9uby5oIgorQEAgLTIxOSw4ICsyMjEsOSBAQCBzdGF0aWMgdm9pZCBzaWduYWxfaGFuZGxlcihpbnQgc2lnbm8pCisgeworIAlvZm9ub19lcnJvcigiQWJvcnRpbmcgKHNpZ25hbCAlZCkgWyVzXSIsIHNpZ25vLCBwcm9ncmFtX2V4ZWMpOworIAorKyNpZmRlZiBfX0dMSUJDX18KKyAJcHJpbnRfYmFja3RyYWNlKDIpOworLQorKyNlbmRpZgorIAlleGl0KEVYSVRfRkFJTFVSRSk7CisgfQorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vUmV2ZXJ0LXRlc3QtQ29udmVydC10by1QeXRob24tMy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9uby9SZXZlcnQtdGVzdC1Db252ZXJ0LXRvLVB5dGhvbi0zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmOGNhNzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vUmV2ZXJ0LXRlc3QtQ29udmVydC10by1QeXRob24tMy5wYXRjaApAQCAtMCwwICsxLDEyNzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworRnJvbSA1NzJmYzIzZjZlZmQ2NWEyZWY5ZTZjOTU3YjI1MDYxMDg3Mzg2NzJiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4KK0RhdGU6IE1vbiwgMjUgQXVnIDIwMTQgMTY6NTk6MzkgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gUmV2ZXJ0ICJ0ZXN0OiBDb252ZXJ0IHRvIFB5dGhvbiAzIgorCitUaGlzIHJldmVydHMgY29tbWl0IGMwMjdhYjlmYmMxYThlOGM5ZTc2YmNkMTIzZGYxYWQ3Njk2MzA3YzIuCistLS0KKyB0ZXN0L2FjdGl2YXRlLWNvbnRleHQgICAgICAgICAgfCAgMiArLQorIHRlc3QvYW5zd2VyLWNhbGxzICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9iYWNrdHJhY2UgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2NhbmNlbC11c3NkICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvY2RtYS1jb25ubWFuLWRpc2FibGUgICAgICB8ICAyICstCisgdGVzdC9jZG1hLWNvbm5tYW4tZW5hYmxlICAgICAgIHwgIDIgKy0KKyB0ZXN0L2NkbWEtZGlhbC1udW1iZXIgICAgICAgICAgfCAgMiArLQorIHRlc3QvY2RtYS1oYW5ndXAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9jZG1hLWxpc3QtY2FsbCAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2NkbWEtc2V0LWNyZWRlbnRpYWxzICAgICAgfCAgMiArLQorIHRlc3QvY2hhbmdlLXBpbiAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9jcmVhdGUtaW50ZXJuZXQtY29udGV4dCAgIHwgIDIgKy0KKyB0ZXN0L2NyZWF0ZS1tbXMtY29udGV4dCAgICAgICAgfCAgMiArLQorIHRlc3QvY3JlYXRlLW11bHRpcGFydHkgICAgICAgICB8ICAyICstCisgdGVzdC9kZWFjdGl2YXRlLWFsbCAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2RlYWN0aXZhdGUtY29udGV4dCAgICAgICAgfCAgMiArLQorIHRlc3QvZGlhbC1udW1iZXIgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9kaXNhYmxlLWNhbGwtZm9yd2FyZGluZyAgIHwgIDIgKy0KKyB0ZXN0L2Rpc2FibGUtZ3BycyAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvZGlzYWJsZS1tb2RlbSAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9kaXNwbGF5LWljb24gICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2VuYWJsZS1jYnMgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvZW5hYmxlLWdwcnMgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9lbmFibGUtbW9kZW0gICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2VudGVyLXBpbiAgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvZ2V0LWljb24gICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9nZXQtb3BlcmF0b3JzICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2dldC10ZWNoLXByZWZlcmVuY2UgICAgICAgfCAgMiArLQorIHRlc3QvaGFuZ3VwLWFjdGl2ZSAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9oYW5ndXAtYWxsICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2hhbmd1cC1jYWxsICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvaGFuZ3VwLW11bHRpcGFydHkgICAgICAgICB8ICAyICstCisgdGVzdC9ob2xkLWFuZC1hbnN3ZXIgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2luaXRpYXRlLXVzc2QgICAgICAgICAgICAgfCAgNCArKy0tCisgdGVzdC9saXN0LWNhbGxzICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2xpc3QtY29udGV4dHMgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvbGlzdC1tZXNzYWdlcyAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9saXN0LW1vZGVtcyAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2xpc3Qtb3BlcmF0b3JzICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvbG9jay1waW4gICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9sb2NrZG93bi1tb2RlbSAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L21vbml0b3Itb2Zvbm8gICAgICAgICAgICAgfCAgNCArKy0tCisgdGVzdC9vZmZsaW5lLW1vZGVtICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L29ubGluZS1tb2RlbSAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvcHJpdmF0ZS1jaGF0ICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9wcm9jZXNzLWNvbnRleHQtc2V0dGluZ3MgIHwgIDIgKy0KKyB0ZXN0L3JlY2VpdmUtc21zICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvcmVqZWN0LWNhbGxzICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9yZWxlYXNlLWFuZC1hbnN3ZXIgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3JlbGVhc2UtYW5kLXN3YXAgICAgICAgICAgfCAgMiArLQorIHRlc3QvcmVtb3ZlLWNvbnRleHRzICAgICAgICAgICB8ICAyICstCisgdGVzdC9yZXNldC1waW4gICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NjYW4tZm9yLW9wZXJhdG9ycyAgICAgICAgfCAgMiArLQorIHRlc3Qvc2VuZC1zbXMgICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9zZW5kLXVzc2QgICAgICAgICAgICAgICAgIHwgIDQgKystLQorIHRlc3Qvc2VuZC12Y2FsICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9zZW5kLXZjYXJkICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC1jYWxsLWZvcndhcmRpbmcgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LWNicy10b3BpY3MgICAgICAgICAgICB8ICAyICstCisgdGVzdC9zZXQtY29udGV4dC1wcm9wZXJ0eSAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC1mYXN0LWRvcm1hbmN5ICAgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LWdzbS1iYW5kICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9zZXQtbWljLXZvbHVtZSAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC1tbXMtZGV0YWlscyAgICAgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LW1zaXNkbiAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9zZXQtcm9hbWluZy1hbGxvd2VkICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC1zcGVha2VyLXZvbHVtZSAgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LXRlY2gtcHJlZmVyZW5jZSAgICAgICB8ICAyICstCisgdGVzdC9zZXQtdHR5ICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC11bXRzLWJhbmQgICAgICAgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LXVzZS1zbXMtcmVwb3J0cyAgICAgICB8ICAyICstCisgdGVzdC9zd2FwLWNhbGxzICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3QtYWR2aWNlLW9mLWNoYXJnZSAgICAgfCAgMiArLQorIHRlc3QvdGVzdC1jYWxsLWJhcnJpbmcgICAgICAgICB8ICAyICstCisgdGVzdC90ZXN0LWNhbGwtZm9yd2FyZGluZyAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3QtY2FsbC1zZXR0aW5ncyAgICAgICAgfCAgMiArLQorIHRlc3QvdGVzdC1jYnMgICAgICAgICAgICAgICAgICB8ICA0ICsrLS0KKyB0ZXN0L3Rlc3QtZ25zcyAgICAgICAgICAgICAgICAgfCAgNCArKy0tCisgdGVzdC90ZXN0LW1lc3NhZ2Utd2FpdGluZyAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3QtbW9kZW0gICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvdGVzdC1uZXR3b3JrLXJlZ2lzdHJhdGlvbiB8ICAyICstCisgdGVzdC90ZXN0LXBob25lYm9vayAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3QtcHVzaC1ub3RpZmljYXRpb24gICAgfCAgMiArLQorIHRlc3QvdGVzdC1zbWFydC1tZXNzYWdpbmcgICAgICB8ICAyICstCisgdGVzdC90ZXN0LXNtcyAgICAgICAgICAgICAgICAgIHwgMTggKysrKysrKysrLS0tLS0tLS0tCisgdGVzdC90ZXN0LXNzICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3Qtc3MtY29udHJvbC1jYiAgICAgICAgfCAgMiArLQorIHRlc3QvdGVzdC1zcy1jb250cm9sLWNmICAgICAgICB8ICAyICstCisgdGVzdC90ZXN0LXNzLWNvbnRyb2wtY3MgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3Qtc3RrLW1lbnUgICAgICAgICAgICAgfCAzNCArKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCisgdGVzdC91bmxvY2stcGluICAgICAgICAgICAgICAgIHwgIDIgKy0KKyA5NCBmaWxlcyBjaGFuZ2VkLCAxMjQgaW5zZXJ0aW9ucygrKSwgMTI0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdGVzdC9hY3RpdmF0ZS1jb250ZXh0IGIvdGVzdC9hY3RpdmF0ZS1jb250ZXh0CitpbmRleCBlNGZjNzAyLi40MjQxMzk2IDEwMDc1NQorLS0tIGEvdGVzdC9hY3RpdmF0ZS1jb250ZXh0CisrKysgYi90ZXN0L2FjdGl2YXRlLWNvbnRleHQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9hbnN3ZXItY2FsbHMgYi90ZXN0L2Fuc3dlci1jYWxscworaW5kZXggZGFhNzk0Yi4uNDVmZjA4ZiAxMDA3NTUKKy0tLSBhL3Rlc3QvYW5zd2VyLWNhbGxzCisrKysgYi90ZXN0L2Fuc3dlci1jYWxscworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIAorZGlmZiAtLWdpdCBhL3Rlc3QvYmFja3RyYWNlIGIvdGVzdC9iYWNrdHJhY2UKK2luZGV4IDAzYzc2MzIuLmM2MjQ3MDkgMTAwNzU1CistLS0gYS90ZXN0L2JhY2t0cmFjZQorKysrIGIvdGVzdC9iYWNrdHJhY2UKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IG9zCisgaW1wb3J0IHJlCitkaWZmIC0tZ2l0IGEvdGVzdC9jYW5jZWwtdXNzZCBiL3Rlc3QvY2FuY2VsLXVzc2QKK2luZGV4IGU3NTU5YmEuLjE3OTdmMjYgMTAwNzU1CistLS0gYS90ZXN0L2NhbmNlbC11c3NkCisrKysgYi90ZXN0L2NhbmNlbC11c3NkCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvY2RtYS1jb25ubWFuLWRpc2FibGUgYi90ZXN0L2NkbWEtY29ubm1hbi1kaXNhYmxlCitpbmRleCAzYWRjMTRkLi4wZGRjMGNkIDEwMDc1NQorLS0tIGEvdGVzdC9jZG1hLWNvbm5tYW4tZGlzYWJsZQorKysrIGIvdGVzdC9jZG1hLWNvbm5tYW4tZGlzYWJsZQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2NkbWEtY29ubm1hbi1lbmFibGUgYi90ZXN0L2NkbWEtY29ubm1hbi1lbmFibGUKK2luZGV4IGFjMTZhMmQuLmEzY2NhMDEgMTAwNzU1CistLS0gYS90ZXN0L2NkbWEtY29ubm1hbi1lbmFibGUKKysrKyBiL3Rlc3QvY2RtYS1jb25ubWFuLWVuYWJsZQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2NkbWEtZGlhbC1udW1iZXIgYi90ZXN0L2NkbWEtZGlhbC1udW1iZXIKK2luZGV4IDY4MzQzMWUuLjljZGZiMjQgMTAwNzU1CistLS0gYS90ZXN0L2NkbWEtZGlhbC1udW1iZXIKKysrKyBiL3Rlc3QvY2RtYS1kaWFsLW51bWJlcgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2NkbWEtaGFuZ3VwIGIvdGVzdC9jZG1hLWhhbmd1cAoraW5kZXggNDFmZmE2MC4uNDkzZWNlNCAxMDA3NTUKKy0tLSBhL3Rlc3QvY2RtYS1oYW5ndXAKKysrKyBiL3Rlc3QvY2RtYS1oYW5ndXAKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9jZG1hLWxpc3QtY2FsbCBiL3Rlc3QvY2RtYS1saXN0LWNhbGwKK2luZGV4IGIxMzIzNTMuLjVkMzZhNjkgMTAwNzU1CistLS0gYS90ZXN0L2NkbWEtbGlzdC1jYWxsCisrKysgYi90ZXN0L2NkbWEtbGlzdC1jYWxsCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9jZG1hLXNldC1jcmVkZW50aWFscyBiL3Rlc3QvY2RtYS1zZXQtY3JlZGVudGlhbHMKK2luZGV4IGE2MGM4NmUuLmEyODZiMGUgMTAwNzU1CistLS0gYS90ZXN0L2NkbWEtc2V0LWNyZWRlbnRpYWxzCisrKysgYi90ZXN0L2NkbWEtc2V0LWNyZWRlbnRpYWxzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvY2hhbmdlLXBpbiBiL3Rlc3QvY2hhbmdlLXBpbgoraW5kZXggMzAxYzZjZS4uMDAwY2U1MyAxMDA3NTUKKy0tLSBhL3Rlc3QvY2hhbmdlLXBpbgorKysrIGIvdGVzdC9jaGFuZ2UtcGluCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvY3JlYXRlLWludGVybmV0LWNvbnRleHQgYi90ZXN0L2NyZWF0ZS1pbnRlcm5ldC1jb250ZXh0CitpbmRleCAxMDg5MDUzLi5lZmQwOTk4IDEwMDc1NQorLS0tIGEvdGVzdC9jcmVhdGUtaW50ZXJuZXQtY29udGV4dAorKysrIGIvdGVzdC9jcmVhdGUtaW50ZXJuZXQtY29udGV4dAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2NyZWF0ZS1tbXMtY29udGV4dCBiL3Rlc3QvY3JlYXRlLW1tcy1jb250ZXh0CitpbmRleCA1OTgzMzZmLi5lNWJlMDhkIDEwMDc1NQorLS0tIGEvdGVzdC9jcmVhdGUtbW1zLWNvbnRleHQKKysrKyBiL3Rlc3QvY3JlYXRlLW1tcy1jb250ZXh0CitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvY3JlYXRlLW11bHRpcGFydHkgYi90ZXN0L2NyZWF0ZS1tdWx0aXBhcnR5CitpbmRleCAxYjc2MDEwLi45NzA0N2MzIDEwMDc1NQorLS0tIGEvdGVzdC9jcmVhdGUtbXVsdGlwYXJ0eQorKysrIGIvdGVzdC9jcmVhdGUtbXVsdGlwYXJ0eQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2RlYWN0aXZhdGUtYWxsIGIvdGVzdC9kZWFjdGl2YXRlLWFsbAoraW5kZXggNWFhODU4Ny4uNDI3MDA5ZSAxMDA3NTUKKy0tLSBhL3Rlc3QvZGVhY3RpdmF0ZS1hbGwKKysrKyBiL3Rlc3QvZGVhY3RpdmF0ZS1hbGwKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9kZWFjdGl2YXRlLWNvbnRleHQgYi90ZXN0L2RlYWN0aXZhdGUtY29udGV4dAoraW5kZXggNWM4NmE3MS4uZGY0N2QyZSAxMDA3NTUKKy0tLSBhL3Rlc3QvZGVhY3RpdmF0ZS1jb250ZXh0CisrKysgYi90ZXN0L2RlYWN0aXZhdGUtY29udGV4dAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2RpYWwtbnVtYmVyIGIvdGVzdC9kaWFsLW51bWJlcgoraW5kZXggZmU1YWRhZC4uZWU2NzRkOSAxMDA3NTUKKy0tLSBhL3Rlc3QvZGlhbC1udW1iZXIKKysrKyBiL3Rlc3QvZGlhbC1udW1iZXIKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9kaXNhYmxlLWNhbGwtZm9yd2FyZGluZyBiL3Rlc3QvZGlzYWJsZS1jYWxsLWZvcndhcmRpbmcKK2luZGV4IDgxMWU0ZmEuLjM2MDk4MTYgMTAwNzU1CistLS0gYS90ZXN0L2Rpc2FibGUtY2FsbC1mb3J3YXJkaW5nCisrKysgYi90ZXN0L2Rpc2FibGUtY2FsbC1mb3J3YXJkaW5nCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKK2RpZmYgLS1naXQgYS90ZXN0L2Rpc2FibGUtZ3BycyBiL3Rlc3QvZGlzYWJsZS1ncHJzCitpbmRleCA2MWNlMjE2Li5jNmM0MGE1IDEwMDc1NQorLS0tIGEvdGVzdC9kaXNhYmxlLWdwcnMKKysrKyBiL3Rlc3QvZGlzYWJsZS1ncHJzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvZGlzYWJsZS1tb2RlbSBiL3Rlc3QvZGlzYWJsZS1tb2RlbQoraW5kZXggNmZiYTg1Ny4uY2E4YzhkOCAxMDA3NTUKKy0tLSBhL3Rlc3QvZGlzYWJsZS1tb2RlbQorKysrIGIvdGVzdC9kaXNhYmxlLW1vZGVtCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvZGlzcGxheS1pY29uIGIvdGVzdC9kaXNwbGF5LWljb24KK2luZGV4IGFjNDA4MTguLjc1M2QxNGQgMTAwNzU1CistLS0gYS90ZXN0L2Rpc3BsYXktaWNvbgorKysrIGIvdGVzdC9kaXNwbGF5LWljb24KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9lbmFibGUtY2JzIGIvdGVzdC9lbmFibGUtY2JzCitpbmRleCA0YThiZjY2Li5jMDhiZjJiIDEwMDc1NQorLS0tIGEvdGVzdC9lbmFibGUtY2JzCisrKysgYi90ZXN0L2VuYWJsZS1jYnMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9lbmFibGUtZ3BycyBiL3Rlc3QvZW5hYmxlLWdwcnMKK2luZGV4IDY4ZDVlZjAuLjg2NjQ4OTEgMTAwNzU1CistLS0gYS90ZXN0L2VuYWJsZS1ncHJzCisrKysgYi90ZXN0L2VuYWJsZS1ncHJzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvZW5hYmxlLW1vZGVtIGIvdGVzdC9lbmFibGUtbW9kZW0KK2luZGV4IGZjNTk1OGEuLmRmYWFhYTggMTAwNzU1CistLS0gYS90ZXN0L2VuYWJsZS1tb2RlbQorKysrIGIvdGVzdC9lbmFibGUtbW9kZW0KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9lbnRlci1waW4gYi90ZXN0L2VudGVyLXBpbgoraW5kZXggOTU1NjM2My4uYzZlZTY2OSAxMDA3NTUKKy0tLSBhL3Rlc3QvZW50ZXItcGluCisrKysgYi90ZXN0L2VudGVyLXBpbgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2dldC1pY29uIGIvdGVzdC9nZXQtaWNvbgoraW5kZXggNTU2OWEzMy4uZmRhYWVlNyAxMDA3NTUKKy0tLSBhL3Rlc3QvZ2V0LWljb24KKysrKyBiL3Rlc3QvZ2V0LWljb24KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9nZXQtb3BlcmF0b3JzIGIvdGVzdC9nZXQtb3BlcmF0b3JzCitpbmRleCAwZjM1YzgwLi42MjM1NGM1IDEwMDc1NQorLS0tIGEvdGVzdC9nZXQtb3BlcmF0b3JzCisrKysgYi90ZXN0L2dldC1vcGVyYXRvcnMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9nZXQtdGVjaC1wcmVmZXJlbmNlIGIvdGVzdC9nZXQtdGVjaC1wcmVmZXJlbmNlCitpbmRleCA3YmE2MzY1Li43N2QyMGQwIDEwMDc1NQorLS0tIGEvdGVzdC9nZXQtdGVjaC1wcmVmZXJlbmNlCisrKysgYi90ZXN0L2dldC10ZWNoLXByZWZlcmVuY2UKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMsIHN5cworIAorZGlmZiAtLWdpdCBhL3Rlc3QvaGFuZ3VwLWFjdGl2ZSBiL3Rlc3QvaGFuZ3VwLWFjdGl2ZQoraW5kZXggODJlMGViMC4uNWFmNjJhYiAxMDA3NTUKKy0tLSBhL3Rlc3QvaGFuZ3VwLWFjdGl2ZQorKysrIGIvdGVzdC9oYW5ndXAtYWN0aXZlCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvaGFuZ3VwLWFsbCBiL3Rlc3QvaGFuZ3VwLWFsbAoraW5kZXggM2EwMTM4ZC4uMzI5MzNkYiAxMDA3NTUKKy0tLSBhL3Rlc3QvaGFuZ3VwLWFsbAorKysrIGIvdGVzdC9oYW5ndXAtYWxsCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvaGFuZ3VwLWNhbGwgYi90ZXN0L2hhbmd1cC1jYWxsCitpbmRleCA1YTJkZTIwLi40NDcwMjBjIDEwMDc1NQorLS0tIGEvdGVzdC9oYW5ndXAtY2FsbAorKysrIGIvdGVzdC9oYW5ndXAtY2FsbAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2hhbmd1cC1tdWx0aXBhcnR5IGIvdGVzdC9oYW5ndXAtbXVsdGlwYXJ0eQoraW5kZXggMjQ3NTFjMy4uNDhmZTM0MiAxMDA3NTUKKy0tLSBhL3Rlc3QvaGFuZ3VwLW11bHRpcGFydHkKKysrKyBiL3Rlc3QvaGFuZ3VwLW11bHRpcGFydHkKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9ob2xkLWFuZC1hbnN3ZXIgYi90ZXN0L2hvbGQtYW5kLWFuc3dlcgoraW5kZXggZGEzYmU1Ny4uMmM0N2UyNyAxMDA3NTUKKy0tLSBhL3Rlc3QvaG9sZC1hbmQtYW5zd2VyCisrKysgYi90ZXN0L2hvbGQtYW5kLWFuc3dlcgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2luaXRpYXRlLXVzc2QgYi90ZXN0L2luaXRpYXRlLXVzc2QKK2luZGV4IGZhZjUwZDAuLmQ3MDIyZjEgMTAwNzU1CistLS0gYS90ZXN0L2luaXRpYXRlLXVzc2QKKysrKyBiL3Rlc3QvaW5pdGlhdGUtdXNzZAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK0BAIC00NSw3ICs0NSw3IEBAIGlmIHN0YXRlID09ICJpZGxlIjoKKyBwcmludCgiU3RhdGU6ICVzIiAlIChzdGF0ZSkpCisgCisgd2hpbGUgc3RhdGUgPT0gInVzZXItcmVzcG9uc2UiOgorLQlyZXNwb25zZSA9IGlucHV0KCJFbnRlciByZXNwb25zZTogIikKKysJcmVzcG9uc2UgPSByYXdfaW5wdXQoIkVudGVyIHJlc3BvbnNlOiAiKQorIAorIAlyZXN1bHQgPSB1c3NkLlJlc3BvbmQocmVzcG9uc2UsIHRpbWVvdXQ9MTAwKQorIAorZGlmZiAtLWdpdCBhL3Rlc3QvbGlzdC1jYWxscyBiL3Rlc3QvbGlzdC1jYWxscworaW5kZXggZjNlZTk5MS4uMDg2NjhjNiAxMDA3NTUKKy0tLSBhL3Rlc3QvbGlzdC1jYWxscworKysrIGIvdGVzdC9saXN0LWNhbGxzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9saXN0LWNvbnRleHRzIGIvdGVzdC9saXN0LWNvbnRleHRzCitpbmRleCA3ODI3OGNhLi5mMGQ0MDk0IDEwMDc1NQorLS0tIGEvdGVzdC9saXN0LWNvbnRleHRzCisrKysgYi90ZXN0L2xpc3QtY29udGV4dHMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyAKK2RpZmYgLS1naXQgYS90ZXN0L2xpc3QtbWVzc2FnZXMgYi90ZXN0L2xpc3QtbWVzc2FnZXMKK2luZGV4IDlmNWJjZTMuLmNmY2NiZWEgMTAwNzU1CistLS0gYS90ZXN0L2xpc3QtbWVzc2FnZXMKKysrKyBiL3Rlc3QvbGlzdC1tZXNzYWdlcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIAorZGlmZiAtLWdpdCBhL3Rlc3QvbGlzdC1tb2RlbXMgYi90ZXN0L2xpc3QtbW9kZW1zCitpbmRleCBiOWY1MTBhLi5lZDY2MTI0IDEwMDc1NQorLS0tIGEvdGVzdC9saXN0LW1vZGVtcworKysrIGIvdGVzdC9saXN0LW1vZGVtcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIAorZGlmZiAtLWdpdCBhL3Rlc3QvbGlzdC1vcGVyYXRvcnMgYi90ZXN0L2xpc3Qtb3BlcmF0b3JzCitpbmRleCAwNjRjNGUzLi4zNDliZjQxIDEwMDc1NQorLS0tIGEvdGVzdC9saXN0LW9wZXJhdG9ycworKysrIGIvdGVzdC9saXN0LW9wZXJhdG9ycworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2xvY2stcGluIGIvdGVzdC9sb2NrLXBpbgoraW5kZXggOTZlYTljMi4uNTU3OTczNSAxMDA3NTUKKy0tLSBhL3Rlc3QvbG9jay1waW4KKysrKyBiL3Rlc3QvbG9jay1waW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9sb2NrZG93bi1tb2RlbSBiL3Rlc3QvbG9ja2Rvd24tbW9kZW0KK2luZGV4IDRlMDQyMDUuLjc4MWFiYjYgMTAwNzU1CistLS0gYS90ZXN0L2xvY2tkb3duLW1vZGVtCisrKysgYi90ZXN0L2xvY2tkb3duLW1vZGVtCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvbW9uaXRvci1vZm9ubyBiL3Rlc3QvbW9uaXRvci1vZm9ubworaW5kZXggODgzMDc1Ny4uYmQzMTYxNyAxMDA3NTUKKy0tLSBhL3Rlc3QvbW9uaXRvci1vZm9ubworKysrIGIvdGVzdC9tb25pdG9yLW9mb25vCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorQEAgLTYsNyArNiw3IEBAIGltcG9ydCBkYnVzCisgaW1wb3J0IGRidXMubWFpbmxvb3AuZ2xpYgorIAorIF9kYnVzMnB5ID0geworLQlkYnVzLlN0cmluZyA6IHN0ciwKKysJZGJ1cy5TdHJpbmcgOiB1bmljb2RlLAorIAlkYnVzLlVJbnQzMiA6IGludCwKKyAJZGJ1cy5JbnQzMiA6IGludCwKKyAJZGJ1cy5JbnQxNiA6IGludCwKK2RpZmYgLS1naXQgYS90ZXN0L29mZmxpbmUtbW9kZW0gYi90ZXN0L29mZmxpbmUtbW9kZW0KK2luZGV4IGU4YzA0M2EuLmVhMWY1MjIgMTAwNzU1CistLS0gYS90ZXN0L29mZmxpbmUtbW9kZW0KKysrKyBiL3Rlc3Qvb2ZmbGluZS1tb2RlbQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cywgc3lzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9vbmxpbmUtbW9kZW0gYi90ZXN0L29ubGluZS1tb2RlbQoraW5kZXggMDI5YzRhNS4uMzEwZWQ3ZCAxMDA3NTUKKy0tLSBhL3Rlc3Qvb25saW5lLW1vZGVtCisrKysgYi90ZXN0L29ubGluZS1tb2RlbQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cywgc3lzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9wcml2YXRlLWNoYXQgYi90ZXN0L3ByaXZhdGUtY2hhdAoraW5kZXggZTdlNTQwNi4uZWYyZWY2YyAxMDA3NTUKKy0tLSBhL3Rlc3QvcHJpdmF0ZS1jaGF0CisrKysgYi90ZXN0L3ByaXZhdGUtY2hhdAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3Byb2Nlc3MtY29udGV4dC1zZXR0aW5ncyBiL3Rlc3QvcHJvY2Vzcy1jb250ZXh0LXNldHRpbmdzCitpbmRleCA4YTNlY2ZhLi4wZjA1OGIyIDEwMDc1NQorLS0tIGEvdGVzdC9wcm9jZXNzLWNvbnRleHQtc2V0dGluZ3MKKysrKyBiL3Rlc3QvcHJvY2Vzcy1jb250ZXh0LXNldHRpbmdzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBvcworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9yZWNlaXZlLXNtcyBiL3Rlc3QvcmVjZWl2ZS1zbXMKK2luZGV4IGEwYzY5MTUuLmMyM2ViMTQgMTAwNzU1CistLS0gYS90ZXN0L3JlY2VpdmUtc21zCisrKysgYi90ZXN0L3JlY2VpdmUtc21zCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorZGlmZiAtLWdpdCBhL3Rlc3QvcmVqZWN0LWNhbGxzIGIvdGVzdC9yZWplY3QtY2FsbHMKK2luZGV4IDcxYjI0M2UuLjllZGYxZmYgMTAwNzU1CistLS0gYS90ZXN0L3JlamVjdC1jYWxscworKysrIGIvdGVzdC9yZWplY3QtY2FsbHMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyAKK2RpZmYgLS1naXQgYS90ZXN0L3JlbGVhc2UtYW5kLWFuc3dlciBiL3Rlc3QvcmVsZWFzZS1hbmQtYW5zd2VyCitpbmRleCBkZWM4ZTE3Li4yNWZkODE4IDEwMDc1NQorLS0tIGEvdGVzdC9yZWxlYXNlLWFuZC1hbnN3ZXIKKysrKyBiL3Rlc3QvcmVsZWFzZS1hbmQtYW5zd2VyCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvcmVsZWFzZS1hbmQtc3dhcCBiL3Rlc3QvcmVsZWFzZS1hbmQtc3dhcAoraW5kZXggY2I4Yzg0ZS4uN2IzNTY5ZiAxMDA3NTUKKy0tLSBhL3Rlc3QvcmVsZWFzZS1hbmQtc3dhcAorKysrIGIvdGVzdC9yZWxlYXNlLWFuZC1zd2FwCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvcmVtb3ZlLWNvbnRleHRzIGIvdGVzdC9yZW1vdmUtY29udGV4dHMKK2luZGV4IGI1NDE4NGUuLmM1MDgyY2IgMTAwNzU1CistLS0gYS90ZXN0L3JlbW92ZS1jb250ZXh0cworKysrIGIvdGVzdC9yZW1vdmUtY29udGV4dHMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyAKK2RpZmYgLS1naXQgYS90ZXN0L3Jlc2V0LXBpbiBiL3Rlc3QvcmVzZXQtcGluCitpbmRleCAzZmJkMTI2Li5iNDI5MjU0IDEwMDc1NQorLS0tIGEvdGVzdC9yZXNldC1waW4KKysrKyBiL3Rlc3QvcmVzZXQtcGluCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2Nhbi1mb3Itb3BlcmF0b3JzIGIvdGVzdC9zY2FuLWZvci1vcGVyYXRvcnMKK2luZGV4IGI0ZmMwNWUuLjc0OWM3MTAgMTAwNzU1CistLS0gYS90ZXN0L3NjYW4tZm9yLW9wZXJhdG9ycworKysrIGIvdGVzdC9zY2FuLWZvci1vcGVyYXRvcnMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9zZW5kLXNtcyBiL3Rlc3Qvc2VuZC1zbXMKK2luZGV4IDk4ODA4YWEuLmUwNjQ0NGQgMTAwNzU1CistLS0gYS90ZXN0L3NlbmQtc21zCisrKysgYi90ZXN0L3NlbmQtc21zCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2VuZC11c3NkIGIvdGVzdC9zZW5kLXVzc2QKK2luZGV4IGEyMGUwOTguLmU1ODU4ODMgMTAwNzU1CistLS0gYS90ZXN0L3NlbmQtdXNzZAorKysrIGIvdGVzdC9zZW5kLXVzc2QKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitAQCAtNDYsNyArNDYsNyBAQCBpZiBzdGF0ZSA9PSAiaWRsZSI6CisgcHJpbnQoIlN0YXRlOiAlcyIgJSAoc3RhdGUpKQorIAorIHdoaWxlIHN0YXRlID09ICJ1c2VyLXJlc3BvbnNlIjoKKy0JcmVzcG9uc2UgPSBpbnB1dCgiRW50ZXIgcmVzcG9uc2U6ICIpCisrCXJlc3BvbnNlID0gcmF3X2lucHV0KCJFbnRlciByZXNwb25zZTogIikKKyAKKyAJcHJpbnQodXNzZC5SZXNwb25kKHJlc3BvbnNlLCB0aW1lb3V0PTEwMCkpCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9zZW5kLXZjYWwgYi90ZXN0L3NlbmQtdmNhbAoraW5kZXggNTY2ZGFlZi4uN2Y4MjcyYiAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2VuZC12Y2FsCisrKysgYi90ZXN0L3NlbmQtdmNhbAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3NlbmQtdmNhcmQgYi90ZXN0L3NlbmQtdmNhcmQKK2luZGV4IDRkZWRmNTEuLjI1MGIzNmYgMTAwNzU1CistLS0gYS90ZXN0L3NlbmQtdmNhcmQKKysrKyBiL3Rlc3Qvc2VuZC12Y2FyZAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1jYWxsLWZvcndhcmRpbmcgYi90ZXN0L3NldC1jYWxsLWZvcndhcmRpbmcKK2luZGV4IDQ5ZDFjZTAuLjlmZDM1OGIgMTAwNzU1CistLS0gYS90ZXN0L3NldC1jYWxsLWZvcndhcmRpbmcKKysrKyBiL3Rlc3Qvc2V0LWNhbGwtZm9yd2FyZGluZworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCitkaWZmIC0tZ2l0IGEvdGVzdC9zZXQtY2JzLXRvcGljcyBiL3Rlc3Qvc2V0LWNicy10b3BpY3MKK2luZGV4IGRiOTVlMTYuLjc4ZDZkNDQgMTAwNzU1CistLS0gYS90ZXN0L3NldC1jYnMtdG9waWNzCisrKysgYi90ZXN0L3NldC1jYnMtdG9waWNzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LWNvbnRleHQtcHJvcGVydHkgYi90ZXN0L3NldC1jb250ZXh0LXByb3BlcnR5CitpbmRleCA1ZmY3YTY3Li42NGE2ZmI4IDEwMDc1NQorLS0tIGEvdGVzdC9zZXQtY29udGV4dC1wcm9wZXJ0eQorKysrIGIvdGVzdC9zZXQtY29udGV4dC1wcm9wZXJ0eQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1mYXN0LWRvcm1hbmN5IGIvdGVzdC9zZXQtZmFzdC1kb3JtYW5jeQoraW5kZXggZWY3N2JjZC4uN2JmNzcxNSAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LWZhc3QtZG9ybWFuY3kKKysrKyBiL3Rlc3Qvc2V0LWZhc3QtZG9ybWFuY3kKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9zZXQtZ3NtLWJhbmQgYi90ZXN0L3NldC1nc20tYmFuZAoraW5kZXggYjM3YmNiNS4uM2MxN2MxMCAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LWdzbS1iYW5kCisrKysgYi90ZXN0L3NldC1nc20tYmFuZAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1taWMtdm9sdW1lIGIvdGVzdC9zZXQtbWljLXZvbHVtZQoraW5kZXggY2Q2YzczZi4uZTBiZmY0OSAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LW1pYy12b2x1bWUKKysrKyBiL3Rlc3Qvc2V0LW1pYy12b2x1bWUKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9zZXQtbW1zLWRldGFpbHMgYi90ZXN0L3NldC1tbXMtZGV0YWlscworaW5kZXggNmVlNTlmYS4uZDJkMDgzOCAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LW1tcy1kZXRhaWxzCisrKysgYi90ZXN0L3NldC1tbXMtZGV0YWlscworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1tc2lzZG4gYi90ZXN0L3NldC1tc2lzZG4KK2luZGV4IGI1ZmU4MTkuLjAxZjI4NGQgMTAwNzU1CistLS0gYS90ZXN0L3NldC1tc2lzZG4KKysrKyBiL3Rlc3Qvc2V0LW1zaXNkbgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1yb2FtaW5nLWFsbG93ZWQgYi90ZXN0L3NldC1yb2FtaW5nLWFsbG93ZWQKK2luZGV4IDY5OGM4YjYuLjllM2UwNTggMTAwNzU1CistLS0gYS90ZXN0L3NldC1yb2FtaW5nLWFsbG93ZWQKKysrKyBiL3Rlc3Qvc2V0LXJvYW1pbmctYWxsb3dlZAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1zcGVha2VyLXZvbHVtZSBiL3Rlc3Qvc2V0LXNwZWFrZXItdm9sdW1lCitpbmRleCA2ZDRlMzAxLi43OTYyZjM5IDEwMDc1NQorLS0tIGEvdGVzdC9zZXQtc3BlYWtlci12b2x1bWUKKysrKyBiL3Rlc3Qvc2V0LXNwZWFrZXItdm9sdW1lCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LXRlY2gtcHJlZmVyZW5jZSBiL3Rlc3Qvc2V0LXRlY2gtcHJlZmVyZW5jZQoraW5kZXggYjU0OWFiYy4uMjY2NmNiZCAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LXRlY2gtcHJlZmVyZW5jZQorKysrIGIvdGVzdC9zZXQtdGVjaC1wcmVmZXJlbmNlCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LXR0eSBiL3Rlc3Qvc2V0LXR0eQoraW5kZXggZWVkMWZiYS4uNTNkNmI5OSAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LXR0eQorKysrIGIvdGVzdC9zZXQtdHR5CitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LXVtdHMtYmFuZCBiL3Rlc3Qvc2V0LXVtdHMtYmFuZAoraW5kZXggMGJhZTVjNC4uYzFlNjQ0OCAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LXVtdHMtYmFuZAorKysrIGIvdGVzdC9zZXQtdW10cy1iYW5kCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LXVzZS1zbXMtcmVwb3J0cyBiL3Rlc3Qvc2V0LXVzZS1zbXMtcmVwb3J0cworaW5kZXggMjg4ZDRlMS4uYTRlZmU0ZiAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LXVzZS1zbXMtcmVwb3J0cworKysrIGIvdGVzdC9zZXQtdXNlLXNtcy1yZXBvcnRzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc3dhcC1jYWxscyBiL3Rlc3Qvc3dhcC1jYWxscworaW5kZXggMDE4YThkMy4uZWViMjU3YiAxMDA3NTUKKy0tLSBhL3Rlc3Qvc3dhcC1jYWxscworKysrIGIvdGVzdC9zd2FwLWNhbGxzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1hZHZpY2Utb2YtY2hhcmdlIGIvdGVzdC90ZXN0LWFkdmljZS1vZi1jaGFyZ2UKK2luZGV4IDZlODdlNjEuLjBmMWY1N2YgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3QtYWR2aWNlLW9mLWNoYXJnZQorKysrIGIvdGVzdC90ZXN0LWFkdmljZS1vZi1jaGFyZ2UKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1jYWxsLWJhcnJpbmcgYi90ZXN0L3Rlc3QtY2FsbC1iYXJyaW5nCitpbmRleCBlZWRiNjlmLi5iZTRhYjU3IDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LWNhbGwtYmFycmluZworKysrIGIvdGVzdC90ZXN0LWNhbGwtYmFycmluZworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LWNhbGwtZm9yd2FyZGluZyBiL3Rlc3QvdGVzdC1jYWxsLWZvcndhcmRpbmcKK2luZGV4IDVkYjg0ZDcuLjAxYTcyOTQgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3QtY2FsbC1mb3J3YXJkaW5nCisrKysgYi90ZXN0L3Rlc3QtY2FsbC1mb3J3YXJkaW5nCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1jYWxsLXNldHRpbmdzIGIvdGVzdC90ZXN0LWNhbGwtc2V0dGluZ3MKK2luZGV4IDQzNTU5NGMuLjVkN2VlNDkgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3QtY2FsbC1zZXR0aW5ncworKysrIGIvdGVzdC90ZXN0LWNhbGwtc2V0dGluZ3MKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LWNicyBiL3Rlc3QvdGVzdC1jYnMKK2luZGV4IGE1Y2VjMDYuLjEzY2RkODAgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3QtY2JzCisrKysgYi90ZXN0L3Rlc3QtY2JzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IGRidXMubWFpbmxvb3AuZ2xpYgorQEAgLTc4LDcgKzc4LDcgQEAgZGVmIHNldF90b3BpY3MoY2JzKToKKyAJaW52YWxpZERhdGEgPSBGYWxzZTsKKyAJaW5kZXggPSAwCisgCistCXRvcGljcyA9IGlucHV0KCdFbnRlciB0aGUgdG9waWMgSUQocykgeW91IHdhbnQgdG8gcmVnaXN0ZXIgdG86ICcpCisrCXRvcGljcyA9IHJhd19pbnB1dCgnRW50ZXIgdGhlIHRvcGljIElEKHMpIHlvdSB3YW50IHRvIHJlZ2lzdGVyIHRvOiAnKQorIAorIAl3aGlsZSBpbmRleCA8IGxlbih0b3BpY3MpOgorIAkJaWYgdG9waWNzW2luZGV4XSA9PSAnLCcgb3IgdG9waWNzW2luZGV4XSA9PSAnLSc6CitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LWduc3MgYi90ZXN0L3Rlc3QtZ25zcworaW5kZXggNmFlNjRkYi4uYWEwYjE2MCAxMDA3NTUKKy0tLSBhL3Rlc3QvdGVzdC1nbnNzCisrKysgYi90ZXN0L3Rlc3QtZ25zcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyBpbXBvcnQgc3lzCitAQCAtNDAsNyArNDAsNyBAQCBkZWYgcHJpbnRfbWVudSgpOgorIGRlZiBzdGRpbl9oYW5kbGVyKGNoYW5uZWwsIGNvbmRpdGlvbiwgZ25zcywgcGF0aCk6CisgCWluX2tleSA9IG9zLnJlYWQoY2hhbm5lbC51bml4X2dldF9mZCgpLCAxNjApLnJzdHJpcCgpLmRlY29kZSgnVVRGLTgnKQorIAlpZiBpbl9rZXkgPT0gJzAnOgorLQkJeG1sID0gaW5wdXQoJ3R5cGUgdGhlIGVsZW1lbnQgYW5kIHByZXNzIGVudGVyOiAnKQorKwkJeG1sID0gcmF3X2lucHV0KCd0eXBlIHRoZSBlbGVtZW50IGFuZCBwcmVzcyBlbnRlcjogJykKKyAJCXRyeToKKyAJCQlnbnNzLlNlbmRQb3NpdGlvbmluZ0VsZW1lbnQoZGJ1cy5TdHJpbmcoeG1sKSkKKyAJCQlwcmludCgib2siKQorZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1tZXNzYWdlLXdhaXRpbmcgYi90ZXN0L3Rlc3QtbWVzc2FnZS13YWl0aW5nCitpbmRleCA0MzI4NjJlLi5iOTNmYmYzIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LW1lc3NhZ2Utd2FpdGluZworKysrIGIvdGVzdC90ZXN0LW1lc3NhZ2Utd2FpdGluZworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LW1vZGVtIGIvdGVzdC90ZXN0LW1vZGVtCitpbmRleCBhYTM4YjFmLi4yOWRiZjE0IDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LW1vZGVtCisrKysgYi90ZXN0L3Rlc3QtbW9kZW0KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LW5ldHdvcmstcmVnaXN0cmF0aW9uIGIvdGVzdC90ZXN0LW5ldHdvcmstcmVnaXN0cmF0aW9uCitpbmRleCA2OGI0MzQ3Li5jNWFkNTg2IDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LW5ldHdvcmstcmVnaXN0cmF0aW9uCisrKysgYi90ZXN0L3Rlc3QtbmV0d29yay1yZWdpc3RyYXRpb24KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1waG9uZWJvb2sgYi90ZXN0L3Rlc3QtcGhvbmVib29rCitpbmRleCA0MjY0NmQzLi4xMTZmZDRmIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LXBob25lYm9vaworKysrIGIvdGVzdC90ZXN0LXBob25lYm9vaworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cywgc3lzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LXB1c2gtbm90aWZpY2F0aW9uIGIvdGVzdC90ZXN0LXB1c2gtbm90aWZpY2F0aW9uCitpbmRleCBkOTcyYWQzLi5lY2M2YWZiIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LXB1c2gtbm90aWZpY2F0aW9uCisrKysgYi90ZXN0L3Rlc3QtcHVzaC1ub3RpZmljYXRpb24KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LXNtYXJ0LW1lc3NhZ2luZyBiL3Rlc3QvdGVzdC1zbWFydC1tZXNzYWdpbmcKK2luZGV4IGYyMmVmZDIuLjE4OGFjMWUgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3Qtc21hcnQtbWVzc2FnaW5nCisrKysgYi90ZXN0L3Rlc3Qtc21hcnQtbWVzc2FnaW5nCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1zbXMgYi90ZXN0L3Rlc3Qtc21zCitpbmRleCAzMGFjNjUxLi40OTkzNWUxIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LXNtcworKysrIGIvdGVzdC90ZXN0LXNtcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorQEAgLTEzMiw3ICsxMzIsNyBAQCBkZWYgc3RkaW5faGFuZGxlcihjaGFubmVsLCBjb25kaXRpb24sIHNtcywgdmFsdWUsIG51bWJlcik6CisgCQlsb2NrID0gIm9uIgorIAkJaWYgaW5fa2V5ID09ICcwJzoKKyAJCQlwcmludF9zZW5kX3Ntc19tZW51KCkKKy0JCQlzbXNfdHlwZSA9IGlucHV0KCdTZWxlY3QgU01TIHR5cGU6ICcpCisrCQkJc21zX3R5cGUgPSByYXdfaW5wdXQoJ1NlbGVjdCBTTVMgdHlwZTogJykKKyAKKyAJCQlpZiBzbXNfdHlwZSA9PSAnMSc6CisgCQkJCW1lc3NhZ2Vfc2VuZChzbXMsIG51bWJlciwgdmFsdWUpCitAQCAtMTUwLDQ5ICsxNTAsNDkgQEAgZGVmIHN0ZGluX2hhbmRsZXIoY2hhbm5lbCwgY29uZGl0aW9uLCBzbXMsIHZhbHVlLCBudW1iZXIpOgorIAorIAkJZWxpZiBpbl9rZXkgPT0gJzEnOgorIAkJCW1lc3NhZ2VfZGVsaXZlcnlfcmVwb3J0KHNtcywgMSkKKy0JCQlzZW5kX21zZyA9IGlucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKKysJCQlzZW5kX21zZyA9IHJhd19pbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisgCQkJaWYgc2VuZF9tc2cgPT0gJ3knOgorIAkJCQltZXNzYWdlX3NlbmQoc21zLCBudW1iZXIsICgiKDEpIiArIHZhbHVlICsKKyAJCQkJCQkiOiBVc2VEZWxpdmVyeVJlcG9ydHNbVFJVRV0iKSkKKyAKKyAJCWVsaWYgaW5fa2V5ID09ICcyJzoKKyAJCQltZXNzYWdlX2RlbGl2ZXJ5X3JlcG9ydChzbXMsIDApCistCQkJc2VuZF9tc2cgPSBpbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisrCQkJc2VuZF9tc2cgPSByYXdfaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorIAkJCWlmIHNlbmRfbXNnID09ICd5JzoKKyAJCQkJbWVzc2FnZV9zZW5kKHNtcywgbnVtYmVyLCAoIigyKSAiICsgdmFsdWUgKworIAkJCQkJCSI6IFVzZURlbGl2ZXJ5UmVwb3J0c1tGQUxTRV0iKSkKKyAKKyAJCWVsaWYgaW5fa2V5ID09ICczJzoKKyAJCQltZXNzYWdlX3NlcnZpY2VfY2VudGVyX2FkZHJlc3Moc21zLCBTQ0EpCistCQkJc2VuZF9tc2cgPSBpbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisrCQkJc2VuZF9tc2cgPSByYXdfaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorIAkJCWlmIHNlbmRfbXNnID09ICd5JzoKKyAJCQkJbWVzc2FnZV9zZW5kKHNtcywgbnVtYmVyLCAoIigzKSAiICsgdmFsdWUgKworIAkJCQkJCSI6IFNlcnZpY2VDZW50ZXJBZGRyZXNzIikpCisgCisgCQllbGlmIGluX2tleSA9PSAnNCc6CisgCQkJbWVzc2FnZV9iZWFyZXIoc21zLCAicHMtb25seSIpCistCQkJc2VuZF9tc2cgPSBpbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisrCQkJc2VuZF9tc2cgPSByYXdfaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorIAkJCWlmIHNlbmRfbXNnID09ICd5JzoKKyAJCQkJbWVzc2FnZV9zZW5kKHNtcywgbnVtYmVyLCAoIig0KSAiICsgdmFsdWUgKworIAkJCQkJCSI6IEJlYXJlcltwcy1vbmx5XSIpKQorIAorIAkJZWxpZiBpbl9rZXkgPT0gJzUnOgorIAkJCW1lc3NhZ2VfYmVhcmVyKHNtcywgImNzLW9ubHkiKQorLQkJCXNlbmRfbXNnID0gaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorKwkJCXNlbmRfbXNnID0gcmF3X2lucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKKyAJCQlpZiBzZW5kX21zZyA9PSAneSc6CisgCQkJCW1lc3NhZ2Vfc2VuZChzbXMsIG51bWJlciwgKCIoNSkgIiArIHZhbHVlICsKKyAJCQkJCQkiOiBCZWFyZXJbY3Mtb25seV0iKSkKKyAKKyAJCWVsaWYgaW5fa2V5ID09ICc2JzoKKyAJCQltZXNzYWdlX2JlYXJlcihzbXMsICJwcy1wcmVmZXJyZWQiKQorLQkJCXNlbmRfbXNnID0gaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorKwkJCXNlbmRfbXNnID0gcmF3X2lucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKKyAJCQlpZiBzZW5kX21zZyA9PSAneSc6CisgCQkJCW1lc3NhZ2Vfc2VuZChzbXMsIG51bWJlciwgKCIoNikgIiArIHZhbHVlICsKKyAJCQkJCQkiOiBCZWFyZXJbcHMtcHJlZmVycmVkXSIpKQorIAorIAkJZWxpZiBpbl9rZXkgPT0gJzcnOgorIAkJCW1lc3NhZ2VfYmVhcmVyKHNtcywgImNzLXByZWZlcnJlZCIpCistCQkJc2VuZF9tc2cgPSBpbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisrCQkJc2VuZF9tc2cgPSByYXdfaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorIAkJCWlmIHNlbmRfbXNnID09ICd5JzoKKyAJCQkJbWVzc2FnZV9zZW5kKHNtcyxudW1iZXIsICgiKDcpICIgKyB2YWx1ZSArCisgCQkJCQkJIjogQmVhcmVyW2NzLXByZWZlcnJlZF0iKSkKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3Qtc3MgYi90ZXN0L3Rlc3Qtc3MKK2luZGV4IDRjZDg3MzIuLjJjODA4MDYgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3Qtc3MKKysrKyBiL3Rlc3QvdGVzdC1zcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jYiBiL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNiCitpbmRleCBkZGFlNmQzLi44NmJhYzliIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY2IKKysrKyBiL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNiCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNmIGIvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY2YKK2luZGV4IDA5NWViNWQuLmQzMGJmNGYgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jZgorKysrIGIvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY2YKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY3MgYi90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jcworaW5kZXggODE4MDQ3NC4uZTBlZDFkMSAxMDA3NTUKKy0tLSBhL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNzCisrKysgYi90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyAKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3Qtc3RrLW1lbnUgYi90ZXN0L3Rlc3Qtc3RrLW1lbnUKK2luZGV4IDBjZjhmYTIuLmFjMGE1YmQgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3Qtc3RrLW1lbnUKKysrKyBiL3Rlc3QvdGVzdC1zdGstbWVudQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyAKK0BAIC01OCw3ICs1OCw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAkJCWluZGV4ICs9IDEKKyAKKyAJCXByaW50KCJcbkRlZmF1bHQ6ICVkIiAlIChkZWZhdWx0KSkKKy0JCXNlbGVjdCA9IGlucHV0KCJFbnRlciBTZWxlY3Rpb24gKHQsIGIpOiIpCisrCQlzZWxlY3QgPSByYXdfaW5wdXQoIkVudGVyIFNlbGVjdGlvbiAodCwgYik6IikKKyAKKyAJCWlmIHNlbGVjdCA9PSAnYic6CisgCQkJcmFpc2UgR29CYWNrKCJVc2VyIHdpc2hlcyB0byBnbyBiYWNrIikKK0BAIC03NSw3ICs3NSw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAkJcHJpbnQoIkRpc3BsYXlUZXh0ICglcykiICUgKHRpdGxlKSkKKyAJCXByaW50KCJJY29uOiAoJWQpIiAlIChpbnQoaWNvbikpKQorIAkJcHJpbnQoIlVyZ2VudDogKCVkKSIgJSAodXJnZW50KSkKKy0JCWtleSA9IGlucHV0KCJQcmVzcyByZXR1cm4gdG8gY2xlYXIgKCd0JyB0ZXJtaW5hdGVzLCAiCisrCQlrZXkgPSByYXdfaW5wdXQoIlByZXNzIHJldHVybiB0byBjbGVhciAoJ3QnIHRlcm1pbmF0ZXMsICIKKyAJCQkJCQkiJ2InIGdvZXMgYmFjaywgJ24nIGJ1c3ksICIKKyAJCQkJCQkiJ3cnIHJldHVybiBhbmQgd2FpdCk6IikKKyAKK0BAIC0xMDgsNyArMTA4LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCQlwcmludCgiSGlkZSB0eXBpbmc6ICglcykiICUgKGhpZGVfdHlwaW5nKSkKKyAJCXByaW50KCJFbnRlciBjaGFyYWN0ZXJzLCBtaW46ICVkLCBtYXg6ICVkOiIgJSAobWluX2NoYXJzLAorIAkJCQkJCQkJbWF4X2NoYXJzKSkKKy0JCXVzZXJpbiA9IGlucHV0KCIiKQorKwkJdXNlcmluID0gcmF3X2lucHV0KCIiKQorIAorIAkJcmV0dXJuIHVzZXJpbgorIAorQEAgLTEyMiw3ICsxMjIsNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJCXByaW50KCJIaWRlIHR5cGluZzogKCVzKSIgJSAoaGlkZV90eXBpbmcpKQorIAkJcHJpbnQoIkVudGVyIGRpZ2l0cywgbWluOiAlZCwgbWF4OiAlZDoiICUgKG1pbl9jaGFycywKKyAJCQkJCQkJCW1heF9jaGFycykpCistCQl1c2VyaW4gPSBpbnB1dCgiJ3QnIHRlcm1pbmF0ZXMsICdiJyBnb2VzIGJhY2s6IikKKysJCXVzZXJpbiA9IHJhd19pbnB1dCgiJ3QnIHRlcm1pbmF0ZXMsICdiJyBnb2VzIGJhY2s6IikKKyAKKyAJCWlmIHVzZXJpbiA9PSAnYic6CisgCQkJcmFpc2UgR29CYWNrKCJVc2VyIHdpc2hlcyB0byBnbyBiYWNrIikKK0BAIC0xMzYsNyArMTM2LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCWRlZiBSZXF1ZXN0S2V5KHNlbGYsIHRpdGxlLCBpY29uKToKKyAJCXByaW50KCJUaXRsZTogKCVzKSIgJSAodGl0bGUpKQorIAkJcHJpbnQoIkljb246ICglZCkiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiRW50ZXIgS2V5ICh0LCBiKToiKQorKwkJa2V5ID0gcmF3X2lucHV0KCJFbnRlciBLZXkgKHQsIGIpOiIpCisgCisgCQlpZiBrZXkgPT0gJ2InOgorIAkJCXJhaXNlIEdvQmFjaygiVXNlciB3aXNoZXMgdG8gZ28gYmFjayIpCitAQCAtMTUwLDcgKzE1MCw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAlkZWYgUmVxdWVzdERpZ2l0KHNlbGYsIHRpdGxlLCBpY29uKToKKyAJCXByaW50KCJUaXRsZTogKCVzKSIgJSAodGl0bGUpKQorIAkJcHJpbnQoIkljb246ICglZCkiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiRW50ZXIgRGlnaXQgKHQsIGIpOiIpCisrCQlrZXkgPSByYXdfaW5wdXQoIkVudGVyIERpZ2l0ICh0LCBiKToiKQorIAorIAkJaWYga2V5ID09ICdiJzoKKyAJCQlyYWlzZSBHb0JhY2soIlVzZXIgd2lzaGVzIHRvIGdvIGJhY2siKQorQEAgLTE2NCw3ICsxNjQsNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJZGVmIFJlcXVlc3RRdWlja0RpZ2l0KHNlbGYsIHRpdGxlLCBpY29uKToKKyAJCXByaW50KCJUaXRsZTogKCVzKSIgJSAodGl0bGUpKQorIAkJcHJpbnQoIkljb246ICglZCkiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiUXVpY2sgZGlnaXQgKDAtOSwgKiwgIywgdCwgYik6IikKKysJCWtleSA9IHJhd19pbnB1dCgiUXVpY2sgZGlnaXQgKDAtOSwgKiwgIywgdCwgYik6IikKKyAKKyAJCWlmIGtleSA9PSAnYic6CisgCQkJcmFpc2UgR29CYWNrKCJVc2VyIHdpc2hlcyB0byBnbyBiYWNrIikKK0BAIC0xNzgsNyArMTc4LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCWRlZiBSZXF1ZXN0Q29uZmlybWF0aW9uKHNlbGYsIHRpdGxlLCBpY29uKToKKyAJCXByaW50KCJUaXRsZTogKCVzKSIgJSAodGl0bGUpKQorIAkJcHJpbnQoIkljb246ICglZCkiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiRW50ZXIgQ29uZmlybWF0aW9uICh0LCBiLCB5LCBuKToiKQorKwkJa2V5ID0gcmF3X2lucHV0KCJFbnRlciBDb25maXJtYXRpb24gKHQsIGIsIHksIG4pOiIpCisgCisgCQlpZiBrZXkgPT0gJ2InOgorIAkJCXJhaXNlIEdvQmFjaygiVXNlciB3aXNoZXMgdG8gZ28gYmFjayIpCitAQCAtMTk0LDcgKzE5NCw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAlkZWYgQ29uZmlybUNhbGxTZXR1cChzZWxmLCBpbmZvLCBpY29uKToKKyAJCXByaW50KCJJbmZvcm1hdGlvbjogKCVzKSIgJSAoaW5mbykpCisgCQlwcmludCgiSWNvbjogKCVkKSIgJSAoaW50KGljb24pKSkKKy0JCWtleSA9IGlucHV0KCJFbnRlciBDb25maXJtYXRpb24gKHQsIHksIG4pOiIpCisrCQlrZXkgPSByYXdfaW5wdXQoIkVudGVyIENvbmZpcm1hdGlvbiAodCwgeSwgbik6IikKKyAKKyAJCWlmIGtleSA9PSAndCc6CisgCQkJcmFpc2UgRW5kU2Vzc2lvbigiVXNlciB3aXNoZXMgdG8gdGVybWluYXRlIHNlc3Npb24iKQorQEAgLTIwOSw3ICsyMDksNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJCXByaW50KCJJbmZvcm1hdGlvbjogKCVzKSIgJSAoaW5mbykpCisgCQlwcmludCgiSWNvbjogKCVkKSIgJSAoaW50KGljb24pKSkKKyAJCXByaW50KCJVUkwgKCVzKSIgJSAodXJsKSkKKy0JCWtleSA9IGlucHV0KCJFbnRlciBDb25maXJtYXRpb24gKHksIG4pOiIpCisrCQlrZXkgPSByYXdfaW5wdXQoIkVudGVyIENvbmZpcm1hdGlvbiAoeSwgbik6IikKKyAKKyAJCWlmIGtleSA9PSAneSc6CisgCQkJcmV0dXJuIFRydWUKK0BAIC0yMzIsNyArMjMyLDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCQlzaWduYWwuYWxhcm0oNSkKKyAKKyAJCXRyeToKKy0JCQlrZXkgPSBpbnB1dCgiUHJlc3MgcmV0dXJuIHRvIGVuZCBiZWZvcmUgZW5kIG9mIgorKwkJCWtleSA9IHJhd19pbnB1dCgiUHJlc3MgcmV0dXJuIHRvIGVuZCBiZWZvcmUgZW5kIG9mIgorIAkJCQkJCQkgIiBzaW5nbGUgdG9uZSAodCk6IikKKyAJCQlzaWduYWwuYWxhcm0oMCkKKyAKK0BAIC0yNTAsNyArMjUwLDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCQlwcmludCgiTG9vcFRvbmU6ICVzIiAlICh0b25lKSkKKyAJCXByaW50KCJUZXh0OiAlcyIgJSAodGV4dCkpCisgCQlwcmludCgiSWNvbjogJWQiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiUHJlc3MgcmV0dXJuIHRvIGVuZCBiZWZvcmUgdGltZW91dCAiCisrCQlrZXkgPSByYXdfaW5wdXQoIlByZXNzIHJldHVybiB0byBlbmQgYmVmb3JlIHRpbWVvdXQgIgorIAkJCQkiKCd0JyB0ZXJtaW5hdGVzLCAndycgcmV0dXJuIGFuZCB3YWl0KToiKQorIAorIAkJaWYga2V5ID09ICd3JzoKK0BAIC0yNzksNyArMjc5LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCWRlZiBEaXNwbGF5QWN0aW9uKHNlbGYsIHRleHQsIGljb24pOgorIAkJcHJpbnQoIlRleHQ6ICglcykiICUgKHRleHQpKQorIAkJcHJpbnQoIkljb246ICglZCkiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiUHJlc3MgJ3QnIHRvIHRlcm1pbmF0ZSB0aGUgc2Vzc2lvbiAiKQorKwkJa2V5ID0gcmF3X2lucHV0KCJQcmVzcyAndCcgdG8gdGVybWluYXRlIHRoZSBzZXNzaW9uICIpCisgCisgCQlpZiBrZXkgPT0gJ3QnOgorIAkJCXJhaXNlIEVuZFNlc3Npb24oIlVzZXIgd2lzaGVzIHRvIHRlcm1pbmF0ZSBzZXNzaW9uIikKK0BAIC0yODksNyArMjg5LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCWRlZiBDb25maXJtT3BlbkNoYW5uZWwoc2VsZiwgaW5mbywgaWNvbik6CisgCQlwcmludCgiT3BlbiBjaGFubmVsIGNvbmZpcm1hdGlvbjogKCVzKSIgJSAoaW5mbykpCisgCQlwcmludCgiSWNvbjogKCVkKSIgJSAoaW50KGljb24pKSkKKy0JCWtleSA9IGlucHV0KCJFbnRlciBDb25maXJtYXRpb24gKHQsIHksIG4pOiIpCisrCQlrZXkgPSByYXdfaW5wdXQoIkVudGVyIENvbmZpcm1hdGlvbiAodCwgeSwgbik6IikKKyAKKyAJCWlmIGtleSA9PSAndCc6CisgCQkJcmFpc2UgRW5kU2Vzc2lvbigiVXNlciB3aXNoZXMgdG8gdGVybWluYXRlIHNlc3Npb24iKQorQEAgLTI5OSw3ICsyOTksNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJCQlyZXR1cm4gRmFsc2UKKyAKKyBfZGJ1czJweSA9IHsKKy0JZGJ1cy5TdHJpbmcgOiBzdHIsCisrCWRidXMuU3RyaW5nIDogdW5pY29kZSwKKyAJZGJ1cy5VSW50MzIgOiBpbnQsCisgCWRidXMuSW50MzIgOiBpbnQsCisgCWRidXMuSW50MTYgOiBpbnQsCitAQCAtMzk2LDcgKzM5Niw3IEBAIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgCQlleGNlcHQ6CisgCQkJcGFzcworIAorLQkJc2VsZWN0ID0gaW50KGlucHV0KCJFbnRlciBTZWxlY3Rpb246ICIpKQorKwkJc2VsZWN0ID0gaW50KHJhd19pbnB1dCgiRW50ZXIgU2VsZWN0aW9uOiAiKSkKKyAJCXN0ay5TZWxlY3RJdGVtKHNlbGVjdCwgcGF0aCkKKyAJZWxpZiBtb2RlID09ICdhZ2VudCc6CisgCQlwYXRoID0gIi90ZXN0L2FnZW50IgorZGlmZiAtLWdpdCBhL3Rlc3QvdW5sb2NrLXBpbiBiL3Rlc3QvdW5sb2NrLXBpbgoraW5kZXggNjFmNDc2NS4uMTBiNjYyNiAxMDA3NTUKKy0tLSBhL3Rlc3QvdW5sb2NrLXBpbgorKysrIGIvdGVzdC91bmxvY2stcGluCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vb2Zvbm8gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vb2Zvbm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M5OTcwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9uby9vZm9ubwpAQCAtMCwwICsxLDQyIEBACisjIS9iaW4vc2gKKworREFFTU9OPS91c3Ivc2Jpbi9vZm9ub2QKK1BJREZJTEU9L3Zhci9ydW4vb2Zvbm9kLnBpZAorREVTQz0iVGVsZXBob255IGRhZW1vbiIKKworaWYgWyAtZiAvZXRjL2RlZmF1bHQvb2Zvbm8gXSA7IHRoZW4KKwkuIC9ldGMvZGVmYXVsdC9vZm9ubworZmkKKworc2V0IC1lCisKK2RvX3N0YXJ0KCkgeworCSREQUVNT04KK30KKworZG9fc3RvcCgpIHsKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1uYW1lIG9mb25vZCAtLXF1aWV0Cit9CisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwllY2hvICJTdGFydGluZyAkREVTQyIKKwlkb19zdGFydAorCTs7CisgIHN0b3ApCisJZWNobyAiU3RvcHBpbmcgJERFU0MiCisJZG9fc3RvcAorCTs7CisgIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorCWVjaG8gIlJlc3RhcnRpbmcgJERFU0MiCisJZG9fc3RvcAorCXNsZWVwIDEKKwlkb19zdGFydAorCTs7CisgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm9fMS4xNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9ub18xLjE2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZjEzZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm9fMS4xNi5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIG9mb25vLmluYworCitTUkNfVVJJICA9ICJcCisgICR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvbmV0d29yay8ke0JQTn0vJHtCUH0udGFyLnh6IFwKKyAgZmlsZTovL29mb25vIFwKKyAgZmlsZTovL1JldmVydC10ZXN0LUNvbnZlcnQtdG8tUHl0aG9uLTMucGF0Y2ggXAorICBmaWxlOi8vMDAwMS1iYWNrdHJhY2UtRGlzYWJsZS1mb3Itbm9uLWdsaWJjLUMtbGlicmFyaWVzLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJjMzFiNWI1NWExZDY4MzU0YmZmNzcxZDNlZGYwMjgyOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0MDNiOThkYWRlY2U4YmM4MDRjMGJkMTZiOTZkM2RiNWEzYmIwZjg0YWY2NGIzZDY3OTI0ZGEyZDFhNzU0YjA3IgorCitDRkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtRF9HTlVfU09VUkNFIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9ub19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVhZmI3NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9ub19naXQuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSBvZm9uby5pbmMKKworUwkgPSAiJHtXT1JLRElSfS9naXQiCitTUkNSRVYgPSAiMTQ1NDRkNTk5NjgzNmY2Mjg2MTNjMmNlNTQ0MzgwZWU2ZmM4ZjUxNCIKK1BWCSA9ICIwLjEyLWdpdCR7U1JDUFZ9IgorUFIgPSAicjUiCisKK1NSQ19VUkkgID0gImdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbmV0d29yay9vZm9uby9vZm9uby5naXQgXAorCSAgICBmaWxlOi8vb2Zvbm8iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgJHtTfS9ib290c3RyYXAKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9hZGQtdGVzdC1zdXBwb3J0LWZvci1idXN5Ym94LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9hZGQtdGVzdC1zdXBwb3J0LWZvci1idXN5Ym94LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYzI1YzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL2FkZC10ZXN0LXN1cHBvcnQtZm9yLWJ1c3lib3gucGF0Y2gKQEAgLTAsMCArMSw2OSBAQAorQWRqdXN0IHRlc3QgY2FzZXMgdG8gd29yayB3aXRoIGJ1c3lib3guCisKKy0gUmVwbGFjZSBkZCBwYXJhbWV0ZXIgIm9icyIgd2l0aCAiYnMiLgorLSBSZXBsYWNlICJoZWFkIC08bnVtPiIgd2l0aCAiaGVhZCAtbiA8bnVtPiIuCisKK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IG9wZW5zc2gtNi44cDEvcmVncmVzcy9jaXBoZXItc3BlZWQuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NoLTYuOHAxLm9yaWcvcmVncmVzcy9jaXBoZXItc3BlZWQuc2gKKysrKyBvcGVuc3NoLTYuOHAxL3JlZ3Jlc3MvY2lwaGVyLXNwZWVkLnNoCitAQCAtMTcsNyArMTcsNyBAQCBmb3IgYyBpbiBgJHtTU0h9IC1RIGNpcGhlcmA7IGRvIG49MDsgZm9yCisgCQlwcmludGYgIiUtNjBzIiAiJGMvJG06IgorIAkJKCAke1NTSH0gLW8gJ2NvbXByZXNzaW9uIG5vJyBcCisgCQkJLUYgJE9CSi9zc2hfcHJveHkgLTIgLW0gJG0gLWMgJGMgc29tZWhvc3QgXAorLQkJCWV4ZWMgc2ggLWMgXCciZGQgb2Y9L2Rldi9udWxsIG9icz0zMmsiXCcgXAorKwkJCWV4ZWMgc2ggLWMgXCciZGQgb2Y9L2Rldi9udWxsIGJzPTMyayJcJyBcCisgCQk8ICR7REFUQX0gKSAyPiYxIHwgZ2V0Ynl0ZXMKKyAKKyAJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorQEAgLTQyLDcgKzQyLDcgQEAgZm9yIGMgaW4gJGNpcGhlcnM7IGRvCisgCQlwcmludGYgIiUtNjBzIiAiJGM6IgorIAkJKCAke1NTSH0gLW8gJ2NvbXByZXNzaW9uIG5vJyBcCisgCQkJLUYgJE9CSi9zc2hfcHJveHkgLTEgLWMgJGMgc29tZWhvc3QgXAorLQkJCWV4ZWMgc2ggLWMgXCciZGQgb2Y9L2Rldi9udWxsIG9icz0zMmsiXCcgXAorKwkJCWV4ZWMgc2ggLWMgXCciZGQgb2Y9L2Rldi9udWxsIGJzPTMyayJcJyBcCisgCQk8ICR7REFUQX0gKSAyPiYxIHwgZ2V0Ynl0ZXMKKyAJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorIAkJCWZhaWwgInNzaCAtMSBmYWlsZWQgd2l0aCBjaXBoZXIgJGMiCitJbmRleDogb3BlbnNzaC02LjhwMS9yZWdyZXNzL3RyYW5zZmVyLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzaC02LjhwMS5vcmlnL3JlZ3Jlc3MvdHJhbnNmZXIuc2gKKysrKyBvcGVuc3NoLTYuOHAxL3JlZ3Jlc3MvdHJhbnNmZXIuc2gKK0BAIC0xNSw3ICsxNSw3IEBAIGZvciBwIGluICR7U1NIX1BST1RPQ09MU307IGRvCisgCWZvciBzIGluIDEwIDEwMCAxayAzMmsgNjRrIDEyOGsgMjU2azsgZG8KKyAJCXRyYWNlICJwcm90byAkcCBkZC1zaXplICR7c30iCisgCQlybSAtZiAke0NPUFl9CistCQlkZCBpZj0kREFUQSBvYnM9JHtzfSAyPiAvZGV2L251bGwgfCBcCisrCQlkZCBpZj0kREFUQSBicz0ke3N9IDI+IC9kZXYvbnVsbCB8IFwKKyAJCQkke1NTSH0gLXEgLSRwIC1GICRPQkovc3NoX3Byb3h5IHNvbWVob3N0ICJjYXQgPiAke0NPUFl9IgorIAkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisgCQkJZmFpbCAic3NoIGNhdCAkREFUQSBmYWlsZWQiCitJbmRleDogb3BlbnNzaC02LjhwMS9yZWdyZXNzL3llcy1oZWFkLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzaC02LjhwMS5vcmlnL3JlZ3Jlc3MveWVzLWhlYWQuc2gKKysrKyBvcGVuc3NoLTYuOHAxL3JlZ3Jlc3MveWVzLWhlYWQuc2gKK0BAIC00LDcgKzQsNyBAQAorIHRpZD0ieWVzIHBpcGUgaGVhZCIKKyAKKyBmb3IgcCBpbiAke1NTSF9QUk9UT0NPTFN9OyBkbworLQlsaW5lcz1gJHtTU0h9IC0kcCAtRiAkT0JKL3NzaF9wcm94eSB0aGlzaG9zdCAnc2ggLWMgIndoaWxlIHRydWU7ZG8gZWNobyB5ZXM7ZG9uZSB8IF9QT1NJWDJfVkVSU0lPTj0xOTkyMDkgaGVhZCAtMjAwMCInIHwgKHNsZWVwIDMgOyB3YyAtbClgCisrCWxpbmVzPWAke1NTSH0gLSRwIC1GICRPQkovc3NoX3Byb3h5IHRoaXNob3N0ICdzaCAtYyAid2hpbGUgdHJ1ZTtkbyBlY2hvIHllcztkb25lIHwgX1BPU0lYMl9WRVJTSU9OPTE5OTIwOSBoZWFkIC1uIDIwMDAiJyB8IChzbGVlcCAzIDsgd2MgLWwpYAorIAlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKyAJCWZhaWwgInllc3xoZWFkIHRlc3QgZmFpbGVkIgorIAkJbGluZXMgPSAwOworSW5kZXg6IG9wZW5zc2gtNi44cDEvcmVncmVzcy9rZXktb3B0aW9ucy5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2gtNi44cDEub3JpZy9yZWdyZXNzL2tleS1vcHRpb25zLnNoCisrKysgb3BlbnNzaC02LjhwMS9yZWdyZXNzL2tleS1vcHRpb25zLnNoCitAQCAtNTQsNyArNTQsNyBAQCBmb3IgcCBpbiAke1NTSF9QUk9UT0NPTFN9OyBkbworIAlmaQorIAorIAlzZWQgJ3MvLiovZnJvbT0iJyIkZiInIiAmLycgJG9yaWdrZXlzID4kYXV0aGtleXMKKy0JZnJvbT1gaGVhZCAtMSAkYXV0aGtleXMgfCBjdXQgLWYxIC1kICcgJ2AKKysJZnJvbT1gaGVhZCAtbiAxICRhdXRoa2V5cyB8IGN1dCAtZjEgLWQgJyAnYAorIAl2ZXJib3NlICJrZXkgb3B0aW9uIHByb3RvICRwICRmcm9tIgorIAlyPWAke1NTSH0gLSRwIC1xIC1GICRPQkovc3NoX3Byb3h5IHNvbWVob3N0ICdlY2hvIHRydWUnYAorIAlpZiBbICIkciIgPSAidHJ1ZSIgXTsgdGhlbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9pbml0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZDRhMzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL2luaXQKQEAgLTAsMCArMSwxMTUgQEAKKyMhIC9iaW4vc2gKK3NldCAtZQorCitQSURGSUxFPS92YXIvcnVuL3NzaGQucGlkCisKKyMgc291cmNlIGZ1bmN0aW9uIGxpYnJhcnkKKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKKyMgL2V0Yy9pbml0LmQvc3NoOiBzdGFydCBhbmQgc3RvcCB0aGUgT3BlbkJTRCAic2VjdXJlIHNoZWxsIiBkYWVtb24KKwordGVzdCAteCAvdXNyL3NiaW4vc3NoZCB8fCBleGl0IDAKKyggL3Vzci9zYmluL3NzaGQgLVw/IDI+JjEgfCBncmVwIC1xIE9wZW5TU0ggKSAyPi9kZXYvbnVsbCB8fCBleGl0IDAKKworIyAvZXRjL2RlZmF1bHQvc3NoIG1heSBzZXQgU1lTQ09ORkRJUiBhbmQgU1NIRF9PUFRTCitpZiB0ZXN0IC1mIC9ldGMvZGVmYXVsdC9zc2g7IHRoZW4KKyAgICAuIC9ldGMvZGVmYXVsdC9zc2gKK2ZpCisKK1sgLXogIiRTWVNDT05GRElSIiBdICYmIFNZU0NPTkZESVI9L2V0Yy9zc2gKK21rZGlyIC1wICRTWVNDT05GRElSCisKK0hPU1RfS0VZX1JTQT0kU1lTQ09ORkRJUi9zc2hfaG9zdF9yc2Ffa2V5CitIT1NUX0tFWV9EU0E9JFNZU0NPTkZESVIvc3NoX2hvc3RfZHNhX2tleQorSE9TVF9LRVlfRUNEU0E9JFNZU0NPTkZESVIvc3NoX2hvc3RfZWNkc2Ffa2V5CitIT1NUX0tFWV9FRDI1NTE5PSRTWVNDT05GRElSL3NzaF9ob3N0X2VkMjU1MTlfa2V5CisKK2NoZWNrX2Zvcl9ub19zdGFydCgpIHsKKyAgICAjIGZvcmdldCBpdCBpZiB3ZSdyZSB0cnlpbmcgdG8gc3RhcnQsIGFuZCAvZXRjL3NzaC9zc2hkX25vdF90b19iZV9ydW4gZXhpc3RzCisgICAgaWYgWyAtZSAkU1lTQ09ORkRJUi9zc2hkX25vdF90b19iZV9ydW4gXTsgdGhlbgorCWVjaG8gIk9wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlciBub3QgaW4gdXNlICgkU1lTQ09ORkRJUi9zc2hkX25vdF90b19iZV9ydW4pIgorCWV4aXQgMAorICAgIGZpCit9CisKK2NoZWNrX3ByaXZzZXBfZGlyKCkgeworICAgICMgQ3JlYXRlIHRoZSBQcml2U2VwIGVtcHR5IGRpciBpZiBuZWNlc3NhcnkKKyAgICBpZiBbICEgLWQgL3Zhci9ydW4vc3NoZCBdOyB0aGVuCisJbWtkaXIgL3Zhci9ydW4vc3NoZAorCWNobW9kIDA3NTUgL3Zhci9ydW4vc3NoZAorICAgIGZpCit9CisKK2NoZWNrX2NvbmZpZygpIHsKKwkvdXNyL3NiaW4vc3NoZCAtdCB8fCBleGl0IDEKK30KKworY2hlY2tfa2V5cygpIHsKKwkjIGNyZWF0ZSBrZXlzIGlmIG5lY2Vzc2FyeQorCWlmIFsgISAtZiAkSE9TVF9LRVlfUlNBIF07IHRoZW4KKwkJZWNobyAiICBnZW5lcmF0aW5nIHNzaCBSU0Ega2V5Li4uIgorCQlzc2gta2V5Z2VuIC1xIC1mICRIT1NUX0tFWV9SU0EgLU4gJycgLXQgcnNhCisJZmkKKwlpZiBbICEgLWYgJEhPU1RfS0VZX0VDRFNBIF07IHRoZW4KKwkJZWNobyAiICBnZW5lcmF0aW5nIHNzaCBFQ0RTQSBrZXkuLi4iCisJCXNzaC1rZXlnZW4gLXEgLWYgJEhPU1RfS0VZX0VDRFNBIC1OICcnIC10IGVjZHNhCisJZmkKKwlpZiBbICEgLWYgJEhPU1RfS0VZX0RTQSBdOyB0aGVuCisJCWVjaG8gIiAgZ2VuZXJhdGluZyBzc2ggRFNBIGtleS4uLiIKKwkJc3NoLWtleWdlbiAtcSAtZiAkSE9TVF9LRVlfRFNBIC1OICcnIC10IGRzYQorCWZpCisJaWYgWyAhIC1mICRIT1NUX0tFWV9FRDI1NTE5IF07IHRoZW4KKwkJZWNobyAiICBnZW5lcmF0aW5nIHNzaCBFRDI1NTE5IGtleS4uLiIKKwkJc3NoLWtleWdlbiAtcSAtZiAkSE9TVF9LRVlfRUQyNTUxOSAtTiAnJyAtdCBlZDI1NTE5CisJZmkKK30KKworZXhwb3J0IFBBVEg9IiR7UEFUSDorJFBBVEg6fS91c3Ivc2Jpbjovc2JpbiIKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWNoZWNrX2Zvcl9ub19zdGFydAorCWVjaG8gIlN0YXJ0aW5nIE9wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlcjogc3NoZCIKKwljaGVja19rZXlzCisJY2hlY2tfcHJpdnNlcF9kaXIKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAtcCAkUElERklMRSAteCAvdXNyL3NiaW4vc3NoZCAtLSAkU1NIRF9PUFRTCisgICAgICAgIGVjaG8gImRvbmUuIgorCTs7CisgIHN0b3ApCisgICAgICAgIGVjaG8gLW4gIlN0b3BwaW5nIE9wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlcjogc3NoZCIKKwlzdGFydC1zdG9wLWRhZW1vbiAtSyAtcCAkUElERklMRSAteCAvdXNyL3NiaW4vc3NoZAorICAgICAgICBlY2hvICIuIgorCTs7CisKKyAgcmVsb2FkfGZvcmNlLXJlbG9hZCkKKwljaGVja19mb3Jfbm9fc3RhcnQKKwljaGVja19rZXlzCisJY2hlY2tfY29uZmlnCisgICAgICAgIGVjaG8gLW4gIlJlbG9hZGluZyBPcGVuQlNEIFNlY3VyZSBTaGVsbCBzZXJ2ZXIncyBjb25maWd1cmF0aW9uIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC1wICRQSURGSUxFIC1zIDEgLXggL3Vzci9zYmluL3NzaGQKKwllY2hvICIuIgorCTs7CisKKyAgcmVzdGFydCkKKyAgCWNoZWNrX2tleXMKKwljaGVja19jb25maWcKKyAgICAgICAgZWNobyAtbiAiUmVzdGFydGluZyBPcGVuQlNEIFNlY3VyZSBTaGVsbCBzZXJ2ZXI6IHNzaGQiCisJc3RhcnQtc3RvcC1kYWVtb24gLUsgLXAgJFBJREZJTEUgLS1va25vZG8gLXggL3Vzci9zYmluL3NzaGQKKwljaGVja19mb3Jfbm9fc3RhcnQKKwljaGVja19wcml2c2VwX2RpcgorCXNsZWVwIDIKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAtcCAkUElERklMRSAteCAvdXNyL3NiaW4vc3NoZCAtLSAkU1NIRF9PUFRTCisJZWNobyAiLiIKKwk7OworCisgIHN0YXR1cykKKwlzdGF0dXMgL3Vzci9zYmluL3NzaGQKKwlleGl0ICQ/CisgIDs7CisKKyAgKikKKwllY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvc3NoIHtzdGFydHxzdG9wfHN0YXR1c3xyZWxvYWR8Zm9yY2UtcmVsb2FkfHJlc3RhcnR9IgorCWV4aXQgMQorZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTY0YzBjOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL3NoCisKK2V4cG9ydCBURVNUX1NIRUxMPXNoCisKK2NkIHJlZ3Jlc3MKK21ha2UgLWsgLk9CSkRJUj1gcHdkYCAuQ1VSRElSPWBwd2RgIFNVRE89InN1ZG8iIHRlc3RzIFwKKyAgICAgICAgfCBzZWQgLWUgJ3MvXnNraXBwZWQvU0tJUDogL2cnIC1lICdzL15vayAvUEFTUzogL2cnIC1lICdzL15mYWlsZWQvRkFJTDogL2cnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaF9jb25maWcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaF9jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU5MTkxNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoX2NvbmZpZwpAQCAtMCwwICsxLDQ4IEBACisjCSRPcGVuQlNEOiBzc2hfY29uZmlnLHYgMS4yOCAyMDEzLzA5LzE2IDExOjM1OjQzIHN0aGVuIEV4cCAkCisKKyMgVGhpcyBpcyB0aGUgc3NoIGNsaWVudCBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUuICBTZWUKKyMgc3NoX2NvbmZpZyg1KSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gIFRoaXMgZmlsZSBwcm92aWRlcyBkZWZhdWx0cyBmb3IKKyMgdXNlcnMsIGFuZCB0aGUgdmFsdWVzIGNhbiBiZSBjaGFuZ2VkIGluIHBlci11c2VyIGNvbmZpZ3VyYXRpb24gZmlsZXMKKyMgb3Igb24gdGhlIGNvbW1hbmQgbGluZS4KKworIyBDb25maWd1cmF0aW9uIGRhdGEgaXMgcGFyc2VkIGFzIGZvbGxvd3M6CisjICAxLiBjb21tYW5kIGxpbmUgb3B0aW9ucworIyAgMi4gdXNlci1zcGVjaWZpYyBmaWxlCisjICAzLiBzeXN0ZW0td2lkZSBmaWxlCisjIEFueSBjb25maWd1cmF0aW9uIHZhbHVlIGlzIG9ubHkgY2hhbmdlZCB0aGUgZmlyc3QgdGltZSBpdCBpcyBzZXQuCisjIFRodXMsIGhvc3Qtc3BlY2lmaWMgZGVmaW5pdGlvbnMgc2hvdWxkIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCisjIGNvbmZpZ3VyYXRpb24gZmlsZSwgYW5kIGRlZmF1bHRzIGF0IHRoZSBlbmQuCisKKyMgU2l0ZS13aWRlIGRlZmF1bHRzIGZvciBzb21lIGNvbW1vbmx5IHVzZWQgb3B0aW9ucy4gIEZvciBhIGNvbXByZWhlbnNpdmUKKyMgbGlzdCBvZiBhdmFpbGFibGUgb3B0aW9ucywgdGhlaXIgbWVhbmluZ3MgYW5kIGRlZmF1bHRzLCBwbGVhc2Ugc2VlIHRoZQorIyBzc2hfY29uZmlnKDUpIG1hbiBwYWdlLgorCitIb3N0ICoKKyAgRm9yd2FyZEFnZW50IHllcworICBGb3J3YXJkWDExIHllcworIyAgIFJob3N0c1JTQUF1dGhlbnRpY2F0aW9uIG5vCisjICAgUlNBQXV0aGVudGljYXRpb24geWVzCisjICAgUGFzc3dvcmRBdXRoZW50aWNhdGlvbiB5ZXMKKyMgICBIb3N0YmFzZWRBdXRoZW50aWNhdGlvbiBubworIyAgIEdTU0FQSUF1dGhlbnRpY2F0aW9uIG5vCisjICAgR1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscyBubworIyAgIEJhdGNoTW9kZSBubworIyAgIENoZWNrSG9zdElQIHllcworIyAgIEFkZHJlc3NGYW1pbHkgYW55CisjICAgQ29ubmVjdFRpbWVvdXQgMAorIyAgIFN0cmljdEhvc3RLZXlDaGVja2luZyBhc2sKKyMgICBJZGVudGl0eUZpbGUgfi8uc3NoL2lkZW50aXR5CisjICAgSWRlbnRpdHlGaWxlIH4vLnNzaC9pZF9yc2EKKyMgICBJZGVudGl0eUZpbGUgfi8uc3NoL2lkX2RzYQorIyAgIFBvcnQgMjIKKyMgICBQcm90b2NvbCAyLDEKKyMgICBDaXBoZXIgM2RlcworIyAgIENpcGhlcnMgYWVzMTI4LWN0cixhZXMxOTItY3RyLGFlczI1Ni1jdHIsYXJjZm91cjI1NixhcmNmb3VyMTI4LGFlczEyOC1jYmMsM2Rlcy1jYmMKKyMgICBNQUNzIGhtYWMtbWQ1LGhtYWMtc2hhMSx1bWFjLTY0QG9wZW5zc2guY29tLGhtYWMtcmlwZW1kMTYwCisjICAgRXNjYXBlQ2hhciB+CisjICAgVHVubmVsIG5vCisjICAgVHVubmVsRGV2aWNlIGFueTphbnkKKyMgICBQZXJtaXRMb2NhbENvbW1hbmQgbm8KKyMgICBWaXN1YWxIb3N0S2V5IG5vCisjICAgUHJveHlDb21tYW5kIHNzaCAtcSAtVyAlaDolcCBnYXRld2F5LmV4YW1wbGUuY29tCisjICAgUmVrZXlMaW1pdCAxRyAxaApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ODJlNTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGQKQEAgLTAsMCArMSwxMCBAQAorIyVQQU0tMS4wCisKK2F1dGggICAgICAgaW5jbHVkZSAgICAgIGNvbW1vbi1hdXRoCithY2NvdW50ICAgIHJlcXVpcmVkICAgICBwYW1fbm9sb2dpbi5zbworYWNjb3VudCAgICBpbmNsdWRlICAgICAgY29tbW9uLWFjY291bnQKK3Bhc3N3b3JkICAgaW5jbHVkZSAgICAgIGNvbW1vbi1wYXNzd29yZAorc2Vzc2lvbiAgICBvcHRpb25hbCAgICAgcGFtX2tleWluaXQuc28gZm9yY2UgcmV2b2tlCitzZXNzaW9uICAgIGluY2x1ZGUgICAgICBjb21tb24tc2Vzc2lvbgorc2Vzc2lvbiAgICByZXF1aXJlZCAgICAgcGFtX2xvZ2ludWlkLnNvCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZC5zb2NrZXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGQuc29ja2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYzM5YjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGQuc29ja2V0CkBAIC0wLDAgKzEsMTAgQEAKK1tVbml0XQorQ29uZmxpY3RzPXNzaGQuc2VydmljZQorCitbU29ja2V0XQorRXhlY1N0YXJ0UHJlPUBCQVNFX0JJTkRJUkAvbWtkaXIgLXAgL3Zhci9ydW4vc3NoZAorTGlzdGVuU3RyZWFtPTIyCitBY2NlcHQ9eWVzCisKK1tJbnN0YWxsXQorV2FudGVkQnk9c29ja2V0cy50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZEAuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZEAuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjJkNjhlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkQC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTEgQEAKK1tVbml0XQorRGVzY3JpcHRpb249T3BlblNTSCBQZXItQ29ubmVjdGlvbiBEYWVtb24KK1dhbnRzPXNzaGRnZW5rZXlzLnNlcnZpY2UKK0FmdGVyPXNzaGRnZW5rZXlzLnNlcnZpY2UKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9LUBTQklORElSQC9zc2hkIC1pCitFeGVjUmVsb2FkPUBCQVNFX0JJTkRJUkAva2lsbCAtSFVQICRNQUlOUElECitTdGFuZGFyZElucHV0PXNvY2tldAorU3RhbmRhcmRFcnJvcj1zeXNsb2cKK0tpbGxNb2RlPXByb2Nlc3MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZF9jb25maWcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGRfY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0OGJkMmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGRfY29uZmlnCkBAIC0wLDAgKzEsMTMzIEBACisjCSRPcGVuQlNEOiBzc2hkX2NvbmZpZyx2IDEuODAgMjAwOC8wNy8wMiAwMjoyNDoxOCBkam0gRXhwICQKKworIyBUaGlzIGlzIHRoZSBzc2hkIHNlcnZlciBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUuICBTZWUKKyMgc3NoZF9jb25maWcoNSkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyMgVGhpcyBzc2hkIHdhcyBjb21waWxlZCB3aXRoIFBBVEg9L3Vzci9iaW46L2JpbjovdXNyL3NiaW46L3NiaW4KKworIyBUaGUgc3RyYXRlZ3kgdXNlZCBmb3Igb3B0aW9ucyBpbiB0aGUgZGVmYXVsdCBzc2hkX2NvbmZpZyBzaGlwcGVkIHdpdGgKKyMgT3BlblNTSCBpcyB0byBzcGVjaWZ5IG9wdGlvbnMgd2l0aCB0aGVpciBkZWZhdWx0IHZhbHVlIHdoZXJlCisjIHBvc3NpYmxlLCBidXQgbGVhdmUgdGhlbSBjb21tZW50ZWQuICBVbmNvbW1lbnRlZCBvcHRpb25zIGNoYW5nZSBhCisjIGRlZmF1bHQgdmFsdWUuCisKKyNQb3J0IDIyCisjQWRkcmVzc0ZhbWlseSBhbnkKKyNMaXN0ZW5BZGRyZXNzIDAuMC4wLjAKKyNMaXN0ZW5BZGRyZXNzIDo6CisKKyMgVGhlIGRlZmF1bHQgcmVxdWlyZXMgZXhwbGljaXQgYWN0aXZhdGlvbiBvZiBwcm90b2NvbCAxCitQcm90b2NvbCAyCisKKyMgSG9zdEtleSBmb3IgcHJvdG9jb2wgdmVyc2lvbiAxCisjSG9zdEtleSAvZXRjL3NzaC9zc2hfaG9zdF9rZXkKKyMgSG9zdEtleXMgZm9yIHByb3RvY29sIHZlcnNpb24gMgorI0hvc3RLZXkgL2V0Yy9zc2gvc3NoX2hvc3RfcnNhX2tleQorI0hvc3RLZXkgL2V0Yy9zc2gvc3NoX2hvc3RfZHNhX2tleQorI0hvc3RLZXkgL2V0Yy9zc2gvc3NoX2hvc3RfZWNkc2Ffa2V5CisjSG9zdEtleSAvZXRjL3NzaC9zc2hfaG9zdF9lZDI1NTE5X2tleQorCisjIExpZmV0aW1lIGFuZCBzaXplIG9mIGVwaGVtZXJhbCB2ZXJzaW9uIDEgc2VydmVyIGtleQorI0tleVJlZ2VuZXJhdGlvbkludGVydmFsIDFoCisjU2VydmVyS2V5Qml0cyAxMDI0CisKKyMgQ2lwaGVycyBhbmQga2V5aW5nCisjUmVrZXlMaW1pdCBkZWZhdWx0IG5vbmUKKworIyBMb2dnaW5nCisjIG9ic29sZXRlcyBRdWlldE1vZGUgYW5kIEZhc2Npc3RMb2dnaW5nCisjU3lzbG9nRmFjaWxpdHkgQVVUSAorI0xvZ0xldmVsIElORk8KKworIyBBdXRoZW50aWNhdGlvbjoKKworI0xvZ2luR3JhY2VUaW1lIDJtCisjUGVybWl0Um9vdExvZ2luIHllcworI1N0cmljdE1vZGVzIHllcworI01heEF1dGhUcmllcyA2CisjTWF4U2Vzc2lvbnMgMTAKKworI1JTQUF1dGhlbnRpY2F0aW9uIHllcworI1B1YmtleUF1dGhlbnRpY2F0aW9uIHllcworCisjIFRoZSBkZWZhdWx0IGlzIHRvIGNoZWNrIGJvdGggLnNzaC9hdXRob3JpemVkX2tleXMgYW5kIC5zc2gvYXV0aG9yaXplZF9rZXlzMgorIyBidXQgdGhpcyBpcyBvdmVycmlkZGVuIHNvIGluc3RhbGxhdGlvbnMgd2lsbCBvbmx5IGNoZWNrIC5zc2gvYXV0aG9yaXplZF9rZXlzCitBdXRob3JpemVkS2V5c0ZpbGUgLnNzaC9hdXRob3JpemVkX2tleXMKKworI0F1dGhvcml6ZWRQcmluY2lwYWxzRmlsZSBub25lCisKKyNBdXRob3JpemVkS2V5c0NvbW1hbmQgbm9uZQorI0F1dGhvcml6ZWRLZXlzQ29tbWFuZFVzZXIgbm9ib2R5CisKKyMgRm9yIHRoaXMgdG8gd29yayB5b3Ugd2lsbCBhbHNvIG5lZWQgaG9zdCBrZXlzIGluIC9ldGMvc3NoL3NzaF9rbm93bl9ob3N0cworI1Job3N0c1JTQUF1dGhlbnRpY2F0aW9uIG5vCisjIHNpbWlsYXIgZm9yIHByb3RvY29sIHZlcnNpb24gMgorI0hvc3RiYXNlZEF1dGhlbnRpY2F0aW9uIG5vCisjIENoYW5nZSB0byB5ZXMgaWYgeW91IGRvbid0IHRydXN0IH4vLnNzaC9rbm93bl9ob3N0cyBmb3IKKyMgUmhvc3RzUlNBQXV0aGVudGljYXRpb24gYW5kIEhvc3RiYXNlZEF1dGhlbnRpY2F0aW9uCisjSWdub3JlVXNlcktub3duSG9zdHMgbm8KKyMgRG9uJ3QgcmVhZCB0aGUgdXNlcidzIH4vLnJob3N0cyBhbmQgfi8uc2hvc3RzIGZpbGVzCisjSWdub3JlUmhvc3RzIHllcworCisjIFRvIGRpc2FibGUgdHVubmVsZWQgY2xlYXIgdGV4dCBwYXNzd29yZHMsIGNoYW5nZSB0byBubyBoZXJlIQorI1Bhc3N3b3JkQXV0aGVudGljYXRpb24geWVzCisjUGVybWl0RW1wdHlQYXNzd29yZHMgbm8KKworIyBDaGFuZ2UgdG8gbm8gdG8gZGlzYWJsZSBzL2tleSBwYXNzd29yZHMKK0NoYWxsZW5nZVJlc3BvbnNlQXV0aGVudGljYXRpb24gbm8KKworIyBLZXJiZXJvcyBvcHRpb25zCisjS2VyYmVyb3NBdXRoZW50aWNhdGlvbiBubworI0tlcmJlcm9zT3JMb2NhbFBhc3N3ZCB5ZXMKKyNLZXJiZXJvc1RpY2tldENsZWFudXAgeWVzCisjS2VyYmVyb3NHZXRBRlNUb2tlbiBubworCisjIEdTU0FQSSBvcHRpb25zCisjR1NTQVBJQXV0aGVudGljYXRpb24gbm8KKyNHU1NBUElDbGVhbnVwQ3JlZGVudGlhbHMgeWVzCisKKyMgU2V0IHRoaXMgdG8gJ3llcycgdG8gZW5hYmxlIFBBTSBhdXRoZW50aWNhdGlvbiwgYWNjb3VudCBwcm9jZXNzaW5nLAorIyBhbmQgc2Vzc2lvbiBwcm9jZXNzaW5nLiBJZiB0aGlzIGlzIGVuYWJsZWQsIFBBTSBhdXRoZW50aWNhdGlvbiB3aWxsCisjIGJlIGFsbG93ZWQgdGhyb3VnaCB0aGUgQ2hhbGxlbmdlUmVzcG9uc2VBdXRoZW50aWNhdGlvbiBhbmQKKyMgUGFzc3dvcmRBdXRoZW50aWNhdGlvbi4gIERlcGVuZGluZyBvbiB5b3VyIFBBTSBjb25maWd1cmF0aW9uLAorIyBQQU0gYXV0aGVudGljYXRpb24gdmlhIENoYWxsZW5nZVJlc3BvbnNlQXV0aGVudGljYXRpb24gbWF5IGJ5cGFzcworIyB0aGUgc2V0dGluZyBvZiAiUGVybWl0Um9vdExvZ2luIHdpdGhvdXQtcGFzc3dvcmQiLgorIyBJZiB5b3UganVzdCB3YW50IHRoZSBQQU0gYWNjb3VudCBhbmQgc2Vzc2lvbiBjaGVja3MgdG8gcnVuIHdpdGhvdXQKKyMgUEFNIGF1dGhlbnRpY2F0aW9uLCB0aGVuIGVuYWJsZSB0aGlzIGJ1dCBzZXQgUGFzc3dvcmRBdXRoZW50aWNhdGlvbgorIyBhbmQgQ2hhbGxlbmdlUmVzcG9uc2VBdXRoZW50aWNhdGlvbiB0byAnbm8nLgorI1VzZVBBTSBubworCisjQWxsb3dBZ2VudEZvcndhcmRpbmcgeWVzCisjQWxsb3dUY3BGb3J3YXJkaW5nIHllcworI0dhdGV3YXlQb3J0cyBubworI1gxMUZvcndhcmRpbmcgbm8KKyNYMTFEaXNwbGF5T2Zmc2V0IDEwCisjWDExVXNlTG9jYWxob3N0IHllcworI1Blcm1pdFRUWSB5ZXMKKyNQcmludE1vdGQgeWVzCisjUHJpbnRMYXN0TG9nIHllcworI1RDUEtlZXBBbGl2ZSB5ZXMKKyNVc2VMb2dpbiBubworVXNlUHJpdmlsZWdlU2VwYXJhdGlvbiBzYW5kYm94ICMgRGVmYXVsdCBmb3IgbmV3IGluc3RhbGxhdGlvbnMuCisjUGVybWl0VXNlckVudmlyb25tZW50IG5vCitDb21wcmVzc2lvbiBubworQ2xpZW50QWxpdmVJbnRlcnZhbCAxNQorQ2xpZW50QWxpdmVDb3VudE1heCA0CisjVXNlRE5TIHllcworI1BpZEZpbGUgL3Zhci9ydW4vc3NoZC5waWQKKyNNYXhTdGFydHVwcyAxMDozMDoxMDAKKyNQZXJtaXRUdW5uZWwgbm8KKyNDaHJvb3REaXJlY3Rvcnkgbm9uZQorI1ZlcnNpb25BZGRlbmR1bSBub25lCisKKyMgbm8gZGVmYXVsdCBiYW5uZXIgcGF0aAorI0Jhbm5lciBub25lCisKKyMgb3ZlcnJpZGUgZGVmYXVsdCBvZiBubyBzdWJzeXN0ZW1zCitTdWJzeXN0ZW0Jc2Z0cAkvdXNyL2xpYmV4ZWMvc2Z0cC1zZXJ2ZXIKKworIyBFeGFtcGxlIG9mIG92ZXJyaWRpbmcgc2V0dGluZ3Mgb24gYSBwZXItdXNlciBiYXNpcworI01hdGNoIFVzZXIgYW5vbmN2cworIwlYMTFGb3J3YXJkaW5nIG5vCisjCUFsbG93VGNwRm9yd2FyZGluZyBubworIwlQZXJtaXRUVFkgbm8KKyMJRm9yY2VDb21tYW5kIGN2cyBzZXJ2ZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZGdlbmtleXMuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZGdlbmtleXMuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjUwODZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkZ2Vua2V5cy5zZXJ2aWNlCkBAIC0wLDAgKzEsMTEgQEAKK1tVbml0XQorRGVzY3JpcHRpb249T3BlblNTSCBLZXkgR2VuZXJhdGlvbgorQ29uZGl0aW9uUGF0aEV4aXN0cz18IS9ldGMvc3NoL3NzaF9ob3N0X3JzYV9rZXkKK0NvbmRpdGlvblBhdGhFeGlzdHM9fCEvZXRjL3NzaC9zc2hfaG9zdF9kc2Ffa2V5CitDb25kaXRpb25QYXRoRXhpc3RzPXwhL2V0Yy9zc2gvc3NoX2hvc3RfZWNkc2Ffa2V5CitDb25kaXRpb25QYXRoRXhpc3RzPXwhL2V0Yy9zc2gvc3NoX2hvc3RfZWQyNTUxOV9rZXkKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9QEJJTkRJUkAvc3NoLWtleWdlbiAtQQorVHlwZT1vbmVzaG90CitSZW1haW5BZnRlckV4aXQ9eWVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3ZvbGF0aWxlcy45OV9zc2hkIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC92b2xhdGlsZXMuOTlfc3NoZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGQyYWYzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC92b2xhdGlsZXMuOTlfc3NoZApAQCAtMCwwICsxLDIgQEAKK2Qgcm9vdCByb290IDA3NTUgL3Zhci9ydW4vc3NoZCBub25lCitmIHJvb3Qgcm9vdCAwNjQ0IC92YXIvbG9nL2xhc3Rsb2cgbm9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaF83LjFwMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2hfNy4xcDEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVlYjRiNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2hfNy4xcDEuYmIKQEAgLTAsMCArMSwxNTQgQEAKK1NVTU1BUlkgPSAiU2VjdXJlIHJsb2dpbi9yc2gvcmNwL3RlbG5ldCByZXBsYWNlbWVudCIKK0RFU0NSSVBUSU9OID0gIlNlY3VyZSBybG9naW4vcnNoL3JjcC90ZWxuZXQgcmVwbGFjZW1lbnQgKE9wZW5TU0gpIFwKK1NzaCAoU2VjdXJlIFNoZWxsKSBpcyBhIHByb2dyYW0gZm9yIGxvZ2dpbmcgaW50byBhIHJlbW90ZSBtYWNoaW5lIFwKK2FuZCBmb3IgZXhlY3V0aW5nIGNvbW1hbmRzIG9uIGEgcmVtb3RlIG1hY2hpbmUuIgorSE9NRVBBR0UgPSAiaHR0cDovL29wZW5zc2gub3JnIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOQ0U7bWQ1PWUzMjYwNDU2NTdlODQyNTQxZDNmMzVhYWRhNDQyNTA3IgorCitERVBFTkRTID0gInpsaWIgb3BlbnNzbCIKK0RFUEVORFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2xpYnBhbScsICcnLCBkKX0iCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLm9wZW5ic2Qub3JnL3B1Yi9PcGVuQlNEL09wZW5TU0gvcG9ydGFibGUvb3BlbnNzaC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vc3NoZF9jb25maWcgXAorICAgICAgICAgICBmaWxlOi8vc3NoX2NvbmZpZyBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fU1JDX1VSSX0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgZmlsZTovL3NzaGQuc29ja2V0IFwKKyAgICAgICAgICAgZmlsZTovL3NzaGRALnNlcnZpY2UgXAorICAgICAgICAgICBmaWxlOi8vc3NoZGdlbmtleXMuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly92b2xhdGlsZXMuOTlfc3NoZCBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtdGVzdC1zdXBwb3J0LWZvci1idXN5Ym94LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCIKKworUEFNX1NSQ19VUkkgPSAiZmlsZTovL3NzaGQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NzA5NzM2YmM4YThjMjUzYmM0ZWViNDgyOTg4OGNhNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmYzBhNmQyZDFkMDYzZDVjNjZkZmZkOTUyNDkzZDBjZGEyNTZjYWQyMDRmNjgxZGUwZjg0ZWY4NWIyYWQ4NDI4IgorCitpbmhlcml0IHVzZXJhZGQgdXBkYXRlLXJjLmQgdXBkYXRlLWFsdGVybmF0aXZlcyBzeXN0ZW1kCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0tc3NoZCIKK1VTRVJBRERfUEFSQU1fJHtQTn0tc3NoZCA9ICItLXN5c3RlbSAtLW5vLWNyZWF0ZS1ob21lIC0taG9tZS1kaXIgL3Zhci9ydW4vc3NoZCAtLXNoZWxsIC9iaW4vZmFsc2UgLS11c2VyLWdyb3VwIHNzaGQiCitJTklUU0NSSVBUX1BBQ0tBR0VTID0gIiR7UE59LXNzaGQiCitJTklUU0NSSVBUX05BTUVfJHtQTn0tc3NoZCA9ICJzc2hkIgorSU5JVFNDUklQVF9QQVJBTVNfJHtQTn0tc3NoZCA9ICJkZWZhdWx0cyA5IgorCitTWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59LXNzaGQiCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tc3NoZCA9ICJzc2hkLnNvY2tldCIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHB0ZXN0CisKKyMgTEZTIHN1cHBvcnQ6CitDRkxBR1MgKz0gIi1EX19GSUxFX09GRlNFVF9CSVRTPTY0IgorCisjIGxvZ2luIHBhdGggaXMgaGFyZGNvZGVkIGluIHNzaGQKK0VYVFJBX09FQ09ORiA9ICInTE9HSU5fUFJPR1JBTT0ke2Jhc2VfYmluZGlyfS9sb2dpbicgXAorICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJy0td2l0aC1wYW0nLCAnLS13aXRob3V0LXBhbScsIGQpfSBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LXpsaWItdmVyc2lvbi1jaGVjayBcCisgICAgICAgICAgICAgICAgLS13aXRoLXByaXZzZXAtcGF0aD0vdmFyL3J1bi9zc2hkIFwKKyAgICAgICAgICAgICAgICAtLXN5c2NvbmZkaXI9JHtzeXNjb25mZGlyfS9zc2ggXAorICAgICAgICAgICAgICAgIC0td2l0aC14YXV0aD0vdXNyL2Jpbi94YXV0aCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXN0cmlwIFwKKyAgICAgICAgICAgICAgICAiCisKKyMgU2luY2Ugd2UgZG8gbm90IGRlcGVuZCBvbiBsaWJic2QsIHdlIGRvIG5vdCB3YW50IGNvbmZpZ3VyZSB0byB1c2UgaXQKKyMganVzdCBiZWNhdXNlIGl0IGZpbmRzIGxpYnV0aWwuaC4gIEJ1dCwgc3BlY2lmeWluZyAtLWRpc2FibGUtbGlidXRpbAorIyBjYXVzZXMgY29tcGlsZSBlcnJvcnMsIHNvLi4uCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfaGVhZGVyX2JzZF9saWJ1dGlsX2g9bm8gYWNfY3ZfaGVhZGVyX2xpYnV0aWxfaD1ubyIKKworIyBwYXNzd2QgcGF0aCBpcyBoYXJkY29kZWQgaW4gc3NoZAorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfUEFUSF9QQVNTV0RfUFJPRz0ke2JpbmRpcn0vcGFzc3dkIgorCisjIFdlIGRvbid0IHdhbnQgdG8gZGVwZW5kIG9uIGxpYmJsb2NrZmlsZQorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X2hlYWRlcl9tYWlsbG9ja19oPW5vIgorCisjIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciB1Y2xpYmMgYmVjYXVzZSBpbmNsdWRpbmcgc3RkaW8uaAorIyBwdWxscyBpbiBwdGhyZWFkcy5oIGFuZCBjYXVzZXMgY29uZmxpY3RzIGluIGZ1bmN0aW9uIHByb3RvdHlwZXMuCisjIFRoaXMgcmVzdWx0cyBpbiBjb21waWxhdGlvbiBmYWlsdXJlLCBzbyB1bmxlc3MgdGhpcyBpcyBmaXhlZCwKKyMgZGlzYWJsZSBwYW0gZm9yIHVjbGliYy4KK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmM9IiAtLXdpdGhvdXQtcGFtIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJZXhwb3J0IExEPSIke0NDfSIKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zc2hkX2NvbmZpZyAke0J9LworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NzaF9jb25maWcgJHtCfS8KKwlpZiBbICEgLWUgYWNpbmNsdWRlLm00IC1hIC1lIGFjbG9jYWwubTQgXTsgdGhlbgorCQljcCBhY2xvY2FsLm00IGFjaW5jbHVkZS5tNAorCWZpCit9CisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisgICAgICAgICMgc2tpcCByZWdyZXNzL3VuaXR0ZXN0cy8gYmluYXJpZXM6IHRoaXMgd2lsbCBzaWxlbnRseSBza2lwCisgICAgICAgICMgdW5pdHRlc3RzIGluIHJ1bi1wdGVzdHMgd2hpY2ggaXMgZ29vZCBiZWNhdXNlIHRoZXkgYXJlIHNvIHNsb3cuCisgICAgICAgIG9lX3J1bm1ha2UgcmVncmVzcy9tb2RwaXBlIHJlZ3Jlc3Mvc2V0dWlkLWFsbG93ZWQgcmVncmVzcy9uZXRjYXQKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0iID0gInBhbSIgXTsgdGhlbgorCQlpbnN0YWxsIC1EIC1tIDA3NTUgJHtXT1JLRElSfS9zc2hkICR7RH0ke3N5c2NvbmZkaXJ9L3BhbS5kL3NzaGQKKwkJc2VkIC1pIC1lICdzOiNVc2VQQU0gbm86VXNlUEFNIHllczonICR7V09SS0RJUn0vc3NoZF9jb25maWcgJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnCisJZmkKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvc3NoZAorCXJtIC1mICR7RH0ke2JpbmRpcn0vc2xvZ2luICR7RH0ke2RhdGFkaXJ9L1NzaC5iaW4KKwlybWRpciAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4vc3NoZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4gJHtEfSR7bG9jYWxzdGF0ZWRpcn0KKwlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCWluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vdm9sYXRpbGVzLjk5X3NzaGQgJHtEfS8ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzLzk5X3NzaGQKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9jb250cmliL3NzaC1jb3B5LWlkICR7RH0ke2JpbmRpcn0KKworCSMgQ3JlYXRlIGNvbmZpZyBmaWxlcyBmb3IgcmVhZC1vbmx5IHJvb3RmcworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vc3NoCisJaW5zdGFsbCAtbSA2NDQgJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQorCXNlZCAtaSAnL0hvc3RLZXkvZCcgJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnX3JlYWRvbmx5CisJZWNobyAiSG9zdEtleSAvdmFyL3J1bi9zc2gvc3NoX2hvc3RfcnNhX2tleSIgPj4gJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnX3JlYWRvbmx5CisJZWNobyAiSG9zdEtleSAvdmFyL3J1bi9zc2gvc3NoX2hvc3RfZHNhX2tleSIgPj4gJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnX3JlYWRvbmx5CisJZWNobyAiSG9zdEtleSAvdmFyL3J1bi9zc2gvc3NoX2hvc3RfZWNkc2Ffa2V5IiA+PiAke0R9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWdfcmVhZG9ubHkKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1jIC1tIDA2NDQgJHtXT1JLRElSfS9zc2hkLnNvY2tldCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLWMgLW0gMDY0NCAke1dPUktESVJ9L3NzaGRALnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1jIC1tIDA2NDQgJHtXT1JLRElSfS9zc2hkZ2Vua2V5cy5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBCQVNFX0JJTkRJUkAsJHtiYXNlX2JpbmRpcn0sZycgXAorCQktZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyBcCisJCS1lICdzLEBCSU5ESVJALCR7YmluZGlyfSxnJyBcCisJCSR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NzaGQuc29ja2V0ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyouc2VydmljZQorfQorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKwlzZWQgLWkgLWUgInN8XlNGVFBTRVJWRVI9Lip8U0ZUUFNFUlZFUj0ke2xpYmRpcn0vJHtQTn0vc2Z0cC1zZXJ2ZXJ8IiByZWdyZXNzL3Rlc3QtZXhlYy5zaAorCWNwIC1yIHJlZ3Jlc3MgJHtEfSR7UFRFU1RfUEFUSH0KK30KKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworUEFDS0FHRVMgPSsgIiR7UE59LWtleWdlbiAke1BOfS1zY3AgJHtQTn0tc3NoICR7UE59LXNzaGQgJHtQTn0tc2Z0cCAke1BOfS1taXNjICR7UE59LXNmdHAtc2VydmVyIgorRklMRVNfJHtQTn0tc2NwID0gIiR7YmluZGlyfS9zY3AuJHtCUE59IgorRklMRVNfJHtQTn0tc3NoID0gIiR7YmluZGlyfS9zc2guJHtCUE59ICR7c3lzY29uZmRpcn0vc3NoL3NzaF9jb25maWciCitGSUxFU18ke1BOfS1zc2hkID0gIiR7c2JpbmRpcn0vc3NoZCAke3N5c2NvbmZkaXJ9L2luaXQuZC9zc2hkICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0iCitGSUxFU18ke1BOfS1zc2hkICs9ICIke3N5c2NvbmZkaXJ9L3NzaC9tb2R1bGkgJHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWcgJHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWdfcmVhZG9ubHkgJHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcy85OV9zc2hkICR7c3lzY29uZmRpcn0vcGFtLmQvc3NoZCIKK0ZJTEVTXyR7UE59LXNmdHAgPSAiJHtiaW5kaXJ9L3NmdHAiCitGSUxFU18ke1BOfS1zZnRwLXNlcnZlciA9ICIke2xpYmV4ZWNkaXJ9L3NmdHAtc2VydmVyIgorRklMRVNfJHtQTn0tbWlzYyA9ICIke2JpbmRpcn0vc3NoKiAke2xpYmV4ZWNkaXJ9L3NzaCoiCitGSUxFU18ke1BOfS1rZXlnZW4gPSAiJHtiaW5kaXJ9L3NzaC1rZXlnZW4iCisKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1zY3AgJHtQTn0tc3NoICR7UE59LXNzaGQgJHtQTn0ta2V5Z2VuIgorUkRFUEVORFNfJHtQTn0tc3NoZCArPSAiJHtQTn0ta2V5Z2VuICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbS1wbHVnaW4ta2V5aW5pdCBwYW0tcGx1Z2luLWxvZ2ludWlkJywgJycsIGQpfSIKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICIke1BOfS1zZnRwICR7UE59LW1pc2MgJHtQTn0tc2Z0cC1zZXJ2ZXIgbWFrZSIKKworUlBST1ZJREVTXyR7UE59LXNzaCA9ICJzc2giCitSUFJPVklERVNfJHtQTn0tc3NoZCA9ICJzc2hkIgorCitSQ09ORkxJQ1RTXyR7UE59ID0gImRyb3BiZWFyIgorUkNPTkZMSUNUU18ke1BOfS1zc2hkID0gImRyb3BiZWFyIgorUkNPTkZMSUNUU18ke1BOfS1rZXlnZW4gPSAic3NoLWtleWdlbiIKKworQ09ORkZJTEVTXyR7UE59LXNzaGQgPSAiJHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWciCitDT05GRklMRVNfJHtQTn0tc3NoID0gIiR7c3lzY29uZmRpcn0vc3NoL3NzaF9jb25maWciCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjkwIgorQUxURVJOQVRJVkVfJHtQTn0tc2NwID0gInNjcCIKK0FMVEVSTkFUSVZFXyR7UE59LXNzaCA9ICJzc2giCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNkY2ZkOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wuaW5jCkBAIC0wLDAgKzEsMjE0IEBACitTVU1NQVJZID0gIlNlY3VyZSBTb2NrZXQgTGF5ZXIiCitERVNDUklQVElPTiA9ICJTZWN1cmUgU29ja2V0IExheWVyIChTU0wpIGJpbmFyeSBhbmQgcmVsYXRlZCBjcnlwdG9ncmFwaGljIHRvb2xzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cub3BlbnNzbC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vd3d3Lm9wZW5zc2wub3JnL25ld3MvdnVsbmVyYWJpbGl0aWVzLmh0bWwiCitTRUNUSU9OID0gImxpYnMvbmV0d29yayIKKworIyAib3BlbnNzbCB8IFNTTGVheSIgZHVhbCBsaWNlbnNlCitMSUNFTlNFID0gIm9wZW5zc2wiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1mOWE4Zjk2ODEwNzM0NWUwYjc1YWE4YzJlY2FhN2VjOCIKKworREVQRU5EUyA9ICJwZXJsLW5hdGl2ZS1ydW50aW1lIgorREVQRU5EU19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBvcGVuc3NsLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm9wZW5zc2wub3JnL3NvdXJjZS9vcGVuc3NsLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIgorUyA9ICIke1dPUktESVJ9L29wZW5zc2wtJHtQVn0iCisKK1BBQ0tBR0VDT05GSUdbcGVybF0gPSAiLCwsIgorCitBUl9hcHBlbmQgPSAiIHIiCisjIEF2b2lkIGJpbmFyaWVzIGJlaW5nIG1hcmtlZCBhcyByZXF1aXJpbmcgYW4gZXhlY3V0YWJsZSBzdGFjayBzaW5jZSBpdCAKKyMgZG9lc24ndCh3aGljaCBjYXVzZXMgYW5kIHRoaXMgY2F1c2VzIGlzc3VlcyB3aXRoIFNFTGludXgKK0NGTEFHID0gIiR7QGJhc2VfY29uZGl0aW9uYWwoJ1NJVEVJTkZPX0VORElBTk5FU1MnLCAnbGUnLCAnLURMX0VORElBTicsICctREJfRU5ESUFOJywgZCl9IFwKKwktRFRFUk1JTyAke0NGTEFHU30gLVdhbGwgLVdhLC0tbm9leGVjc3RhY2siCisKKyMgLTAyIGRvZXMgbm90IHdvcmsgb24gbWlwc2VsOiBzc2ggaGFuZ3Mgd2hlbiBpdCB0cmllcyB0byByZWFkIC9kZXYvdXJhbmRvbQorQ0ZMQUdfbXR4LTEgOj0gIiR7QCcke0NGTEFHfScucmVwbGFjZSgnLU8yJywgJycpfSIKK0NGTEFHX210eC0yIDo9ICIke0AnJHtDRkxBR30nLnJlcGxhY2UoJy1PMicsICcnKX0iCisKK2V4cG9ydCBESVJTID0gImNyeXB0byBzc2wgYXBwcyIKK2V4cG9ydCBFWF9MSUJTID0gIi1sZ2NjIC1sZGwiCitleHBvcnQgQVMgPSAiJHtDQ30gLWMiCisKK2luaGVyaXQgcGtnY29uZmlnIHNpdGVpbmZvIG11bHRpbGliX2hlYWRlciBwdGVzdAorCitQQUNLQUdFUyA9KyAibGliY3J5cHRvIGxpYnNzbCAke1BOfS1taXNjIG9wZW5zc2wtY29uZiIKK0ZJTEVTX2xpYmNyeXB0byA9ICIke2Jhc2VfbGliZGlyfS9saWJjcnlwdG8ke1NPTElCU30iCitGSUxFU19saWJzc2wgPSAiJHtsaWJkaXJ9L2xpYnNzbC5zby4qIgorRklMRVNfJHtQTn0gPSsgIiAke2xpYmRpcn0vc3NsLyoiCitGSUxFU18ke1BOfS1taXNjID0gIiR7bGliZGlyfS9zc2wvbWlzYyAke2JpbmRpcn0vY19yZWhhc2giCitSREVQRU5EU18ke1BOfS1taXNjID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3BlcmwnLCAncGVybCcsICcnLCBkKX0iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmFzZV9saWJkaXJ9L2xpYmNyeXB0byR7U09MSUJTREVWfSIKKworIyBBZGQgdGhlIG9wZW5zc2wuY25mIGZpbGUgdG8gdGhlIG9wZW5zc2wtY29uZiBwYWNrYWdlLiAgTWFrZSB0aGUgbGliY3J5cHRvCisjIHBhY2thZ2UgUlJFQ09NTUVORFMgb24gdGhpcyBwYWNrYWdlLiAgVGhpcyB3aWxsIGVuYWJsZSB0aGUgY29uZmlndXJhdGlvbgorIyBmaWxlIHRvIGJlIGluc3RhbGxlZCBmb3IgYm90aCB0aGUgYmFzZSBvcGVuc3NsIHBhY2thZ2UgYW5kIHRoZSBsaWJjcnlwdG8KKyMgcGFja2FnZSBzaW5jZSB0aGUgYmFzZSBvcGVuc3NsIHBhY2thZ2UgZGVwZW5kcyBvbiB0aGUgbGliY3J5cHRvIHBhY2thZ2UuCitGSUxFU19vcGVuc3NsLWNvbmYgPSAiJHtsaWJkaXJ9L3NzbC9vcGVuc3NsLmNuZiIKK0NPTkZGSUxFU19vcGVuc3NsLWNvbmYgPSAiJHtsaWJkaXJ9L3NzbC9vcGVuc3NsLmNuZiIKK1JSRUNPTU1FTkRTX2xpYmNyeXB0byArPSAib3BlbnNzbC1jb25mIgorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIiR7UE59LW1pc2MgbWFrZSBwZXJsIHBlcmwtbW9kdWxlLWZpbGVoYW5kbGUgYmMiCisKKyMgUmVtb3ZlIHRoaXMgdG8gZW5hYmxlIFNTTHYzLiBTU0x2MyBpcyBkZWZhdWx0ZWQgdG8gZGlzYWJsZWQgZHVlIHRvIHRoZSBQT09ETEUKKyMgdnVsbmVyYWJpbGl0eQorRVhUUkFfT0VDT05GID0gIiAtbm8tc3NsMyIKKworZG9fY29uZmlndXJlX3ByZXBlbmRfZGFyd2luICgpIHsKKwlzZWQgLWkgLWUgJy92ZXJzaW9uLXNjcmlwdD1vcGVuc3NsXC5sZC9kJyBDb25maWd1cmUKK30KKworZG9fY29uZmlndXJlICgpIHsKKwljZCB1dGlsCisJcGVybCBwZXJscGF0aC5wbCAke1NUQUdJTkdfQklORElSX05BVElWRX0KKwljZCAuLgorCWxuIC1zZiBhcHBzL29wZW5zc2wucG9kIGNyeXB0by9jcnlwdG8ucG9kIHNzbC9zc2wucG9kIGRvYy8KKworCW9zPSR7SE9TVF9PU30KKwljYXNlICRvcyBpbgorCWxpbnV4LXVjbGliYyB8XAorCWxpbnV4LXVjbGliY2VhYmkgfFwKKwlsaW51eC1nbnVlYWJpIHxcCisJbGludXgtdWNsaWJjc3BlIHxcCisJbGludXgtZ251c3BlIHxcCisJbGludXgtbXVzbCopCisJCW9zPWxpbnV4CisJCTs7CisJCSopCisJCTs7CisJZXNhYworCXRhcmdldD0iJG9zLSR7SE9TVF9BUkNIfSIKKwljYXNlICR0YXJnZXQgaW4KKwlsaW51eC1hcm0pCisJCXRhcmdldD1saW51eC1hcm12NAorCQk7OworCWxpbnV4LWFybWViKQorCQl0YXJnZXQ9bGludXgtZWxmLWFybWViCisJCTs7CisJbGludXgtYWFyY2g2NCopCisJCXRhcmdldD1saW51eC1nZW5lcmljNjQKKwkJOzsKKwlsaW51eC1zaDMpCisJCXRhcmdldD1kZWJpYW4tc2gzCisJCTs7CisJbGludXgtc2g0KQorCQl0YXJnZXQ9ZGViaWFuLXNoNAorCQk7OworCWxpbnV4LWk0ODYpCisJCXRhcmdldD1kZWJpYW4taTM4Ni1pNDg2CisJCTs7CisJbGludXgtaTU4NiB8IGxpbnV4LXZpYWMzKQorCQl0YXJnZXQ9ZGViaWFuLWkzODYtaTU4NgorCQk7OworCWxpbnV4LWk2ODYpCisJCXRhcmdldD1kZWJpYW4taTM4Ni1pNjg2L2Ntb3YKKwkJOzsKKwlsaW51eC1nbnV4MzIteDg2XzY0KQorCQl0YXJnZXQ9bGludXgteDMyCisJCTs7CisJbGludXgtZ251NjQteDg2XzY0KQorCQl0YXJnZXQ9bGludXgteDg2XzY0CisJCTs7CisJbGludXgtbWlwcykKKwkJdGFyZ2V0PWRlYmlhbi1taXBzCisJCTs7CisJbGludXgtbWlwc2VsKQorCQl0YXJnZXQ9ZGViaWFuLW1pcHNlbAorCQk7OworICAgICAgICBsaW51eC0qLW1pcHM2NCkKKyAgICAgICAgICAgICAgIHRhcmdldD1saW51eC1taXBzCisgICAgICAgICAgICAgICAgOzsKKwlsaW51eC1taWNyb2JsYXplKikKKwkJdGFyZ2V0PWxpbnV4LWdlbmVyaWMzMgorCQk7OworCWxpbnV4LXBvd2VycGMpCisJCXRhcmdldD1saW51eC1wcGMKKwkJOzsKKwlsaW51eC1wb3dlcnBjNjQpCisJCXRhcmdldD1saW51eC1wcGM2NAorCQk7OworCWxpbnV4LXN1cGVyc3BhcmMpCisJCXRhcmdldD1saW51eC1zcGFyY3Y4CisJCTs7CisJbGludXgtc3BhcmMpCisJCXRhcmdldD1saW51eC1zcGFyY3Y4CisJCTs7CisJZGFyd2luLWkzODYpCisJCXRhcmdldD1kYXJ3aW4taTM4Ni1jYworCQk7OworCWVzYWMKKwkjIGluamVjdCBtYWNoaW5lLXNwZWNpZmljIGZsYWdzCisJc2VkIC1pIC1lICJzfF5cKFwiJHRhcmdldFwiLFxzKlwiW146XVwrXCk6XChbXjpdXCtcKXxcMToke0NGTEFHfXxnIiBDb25maWd1cmUKKyAgICAgICAgdXNlcHJlZml4PSR7cHJlZml4fQorICAgICAgICBpZiBbICJ4JHVzZXByZWZpeCIgPSAieCIgXTsgdGhlbgorICAgICAgICAgICAgICAgIHVzZXByZWZpeD0vCisgICAgICAgIGZpICAgICAgICAKKwlwZXJsIC4vQ29uZmlndXJlICR7RVhUUkFfT0VDT05GfSBzaGFyZWQgLS1wcmVmaXg9JHVzZXByZWZpeCAtLW9wZW5zc2xkaXI9JHtsaWJkaXJ9L3NzbCAtLWxpYmRpcj1gYmFzZW5hbWUgJHtsaWJkaXJ9YCAkdGFyZ2V0Cit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy10YXJnZXQgKCkgeworICAgIHNlZCAtaSAncy9cKChPUEVOU1NMPVwpIi4qIi9cMSJvcGVuc3NsIi8nIE1ha2VmaWxlCit9CisKK2RvX2NvbXBpbGUgKCkgeworCW9lX3J1bm1ha2UKK30KKworZG9fY29tcGlsZV9wdGVzdCAoKSB7CisJb2VfcnVubWFrZSBidWlsZHRlc3QKK30KKworZG9faW5zdGFsbCAoKSB7CisJIyBDcmVhdGUgJHtEfS8ke3ByZWZpeH0gdG8gZml4IHBhcmFsbGVsIGlzc3VlcworCW1rZGlyIC1wICR7RH0vJHtwcmVmaXh9LworCisJb2VfcnVubWFrZSBJTlNUQUxMX1BSRUZJWD0iJHtEfSIgTUFORElSPSIke21hbmRpcn0iIGluc3RhbGwKKworCW9lX2xpYmluc3RhbGwgLXNvIGxpYmNyeXB0byAke0R9JHtsaWJkaXJ9CisJb2VfbGliaW5zdGFsbCAtc28gbGlic3NsICR7RH0ke2xpYmRpcn0KKworCSMgTW92aW5nIGxpYmNyeXB0byB0byAvbGliCisJaWYgWyAhICR7RH0ke2xpYmRpcn0gLWVmICR7RH0ke2Jhc2VfbGliZGlyfSBdOyB0aGVuCisJCW1rZGlyIC1wICR7RH0vJHtiYXNlX2xpYmRpcn0vCisJCW12ICR7RH0ke2xpYmRpcn0vbGliY3J5cHRvKiAke0R9JHtiYXNlX2xpYmRpcn0vCisJCXNlZCAtaSBzI2xpYmRpcj1cJFx7ZXhlY19wcmVmaXhcfVwvbGliI2xpYmRpcj0ke2Jhc2VfbGliZGlyfSMgJHtEfS8ke2xpYmRpcn0vcGtnY29uZmlnL2xpYmNyeXB0by5wYworCWZpCisKKwlpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9CisJY3AgLS1kZXJlZmVyZW5jZSAtUiBpbmNsdWRlL29wZW5zc2wgJHtEfSR7aW5jbHVkZWRpcn0KKworCW9lX211bHRpbGliX2hlYWRlciBvcGVuc3NsL29wZW5zc2xjb25mLmgKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdwZXJsJywgJ3BlcmwnLCAnJywgZCl9IiA9ICJwZXJsIiBdOyB0aGVuCisJCWluc3RhbGwgLW0gMDc1NSAke1N9L3Rvb2xzL2NfcmVoYXNoICR7RH0ke2JpbmRpcn0KKwkJc2VkIC1pIC1lICcxcywuKiwjISR7YmluZGlyfS9lbnYgcGVybCwnICR7RH0ke2JpbmRpcn0vY19yZWhhc2gKKwkJc2VkIC1pIC1lICcxcywuKiwjISR7YmluZGlyfS9lbnYgcGVybCwnICR7RH0ke2xpYmRpcn0vc3NsL21pc2MvQ0EucGwKKwkJc2VkIC1pIC1lICcxcywuKiwjISR7YmluZGlyfS9lbnYgcGVybCwnICR7RH0ke2xpYmRpcn0vc3NsL21pc2MvdHNnZXQKKwkJIyBUaGUgY19yZWhhc2ggdXRpbGl0eSBpc24ndCBpbnN0YWxsZWQgYnkgdGhlIG5vcm1hbCBpbnN0YWxsYXRpb24gcHJvY2Vzcy4KKwllbHNlCisJCXJtIC1mICR7RH0ke2JpbmRpcn0vY19yZWhhc2gKKwkJcm0gLWYgJHtEfSR7bGliZGlyfS9zc2wvbWlzYy9DQS5wbCAke0R9JHtsaWJkaXJ9L3NzbC9taXNjL3RzZ2V0CisJZmkKK30KKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisJY3AgLXIgTWFrZWZpbGUgdGVzdCAke0R9JHtQVEVTVF9QQVRIfQorCWNwIC1yIGNlcnRzICR7RH0ke1BURVNUX1BBVEh9CisJbWtkaXIgLXAgJHtEfSR7UFRFU1RfUEFUSH0vYXBwcworCWxuIC1zZiAvdXNyL2xpYi9zc2wvbWlzYy9DQS5zaCAgJHtEfSR7UFRFU1RfUEFUSH0vYXBwcworCWxuIC1zZiAvdXNyL2xpYi9zc2wvb3BlbnNzbC5jbmYgJHtEfSR7UFRFU1RfUEFUSH0vYXBwcworCWxuIC1zZiAvdXNyL2Jpbi9vcGVuc3NsICAgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0vYXBwcworCWNwIGFwcHMvc2VydmVyMi5wZW0gICAgICAgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0vYXBwcworCW1rZGlyIC1wICR7RH0ke1BURVNUX1BBVEh9L3V0aWwKKwlpbnN0YWxsIHV0aWwvb3BlbnNzbHdyYXAuc2ggICAgJHtEfSR7UFRFU1RfUEFUSH0vdXRpbAorCWluc3RhbGwgdXRpbC9zaGxpYl93cmFwLnNoICAgICAke0R9JHtQVEVTVF9QQVRIfS91dGlsCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwljcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L29wZW5zc2wgXAorCSAgICBPUEVOU1NMX0NPTkY9JHtsaWJkaXJ9L3NzbC9vcGVuc3NsLmNuZiBcCisJICAgIFNTTF9DRVJUX0RJUj0ke2xpYmRpcn0vc3NsL2NlcnRzIFwKKwkgICAgU1NMX0NFUlRfRklMRT0ke2xpYmRpcn0vc3NsL2NlcnQucGVtIFwKKwkgICAgT1BFTlNTTF9FTkdJTkVTPSR7bGliZGlyfS9zc2wvZW5naW5lcworfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL01ha2VmaWxlcy1wdGVzdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvTWFrZWZpbGVzLXB0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0OTQ0NmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL01ha2VmaWxlcy1wdGVzdC5wYXRjaApAQCAtMCwwICsxLDc3IEBACitBZGQgJ2J1aWxkdGVzdCcgYW5kICdydW50ZXN0JyB0YXJnZXRzIHRvIE1ha2VmaWxlLCB0byBidWlsZCBhbmQgcnVuIHRlc3RzCitjcm9zcy1jb21waWxlZC4KKworU2lnbmVkLW9mZi1ieTogQW5kZXJzIFJveGVsbCA8YW5kZXJzLnJveGVsbEBlbmVhLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorSW5kZXg6IG9wZW5zc2wtMS4wLjIvTWFrZWZpbGUub3JnCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMi5vcmlnL01ha2VmaWxlLm9yZworKysrIG9wZW5zc2wtMS4wLjIvTWFrZWZpbGUub3JnCitAQCAtNDUxLDggKzQ1MSwxNiBAQCByZWhhc2gudGltZTogY2VydHMgYXBwcworIHRlc3Q6ICAgdGVzdHMKKyAKKyB0ZXN0czogcmVoYXNoCisrCSQoTUFLRSkgYnVpbGR0ZXN0CisrCSQoTUFLRSkgcnVudGVzdAorKworK2J1aWxkdGVzdDoKKysJQChjZCB0ZXN0ICYmIFwKKysJJChDTEVBUkVOVikgJiYgJChNQUtFKSAtZSAkKEJVSUxERU5WKSBUT1A9Li4gVEVTVFM9JyQoVEVTVFMpJyBPUEVOU1NMX0RFQlVHX01FTU9SWT1vbiBPUEVOU1NMX0NPTkY9Li4vYXBwcy9vcGVuc3NsLmNuZiBleGUgYXBwcyk7CisrCisrcnVudGVzdDoKKyAJQChjZCB0ZXN0ICYmIGVjaG8gInRlc3RpbmcuLi4iICYmIFwKKy0JJChDTEVBUkVOVikgJiYgJChNQUtFKSAtZSAkKEJVSUxERU5WKSBUT1A9Li4gVEVTVFM9JyQoVEVTVFMpJyBPUEVOU1NMX0RFQlVHX01FTU9SWT1vbiBPUEVOU1NMX0NPTkY9Li4vYXBwcy9vcGVuc3NsLmNuZiB0ZXN0cyApOworKwkkKENMRUFSRU5WKSAmJiAkKE1BS0UpIC1lICQoQlVJTERFTlYpIFRPUD0uLiBURVNUUz0nJChURVNUUyknIE9QRU5TU0xfREVCVUdfTUVNT1JZPW9uIE9QRU5TU0xfQ09ORj0uLi9hcHBzL29wZW5zc2wuY25mIGFsbHRlc3RzICk7CisgCU9QRU5TU0xfQ09ORj1hcHBzL29wZW5zc2wuY25mIHV0aWwvb3BlbnNzbHdyYXAuc2ggdmVyc2lvbiAtYQorIAorIHJlcG9ydDoKK0luZGV4OiBvcGVuc3NsLTEuMC4yL3Rlc3QvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yLm9yaWcvdGVzdC9NYWtlZmlsZQorKysrIG9wZW5zc2wtMS4wLjIvdGVzdC9NYWtlZmlsZQorQEAgLTEzNyw3ICsxMzcsNyBAQCB0ZXN0czoJZXhlIGFwcHMgJChURVNUUykKKyBhcHBzOgorIAlAKGNkIC4uOyAkKE1BS0UpIERJUlM9YXBwcyBhbGwpCisgCistYWxsdGVzdHM6IFwKKythbGwtdGVzdHM9IFwKKyAJdGVzdF9kZXMgdGVzdF9pZGVhIHRlc3Rfc2hhIHRlc3RfbWQ0IHRlc3RfbWQ1IHRlc3RfaG1hYyBcCisgCXRlc3RfbWQyIHRlc3RfbWRjMiB0ZXN0X3dwIFwKKyAJdGVzdF9ybWQgdGVzdF9yYzIgdGVzdF9yYzQgdGVzdF9yYzUgdGVzdF9iZiB0ZXN0X2Nhc3QgdGVzdF9hZXMgXAorQEAgLTE0OCw2ICsxNDgsMTEgQEAgYWxsdGVzdHM6IFwKKyAJdGVzdF9qcGFrZSB0ZXN0X3NycCB0ZXN0X2NtcyB0ZXN0X29jc3AgdGVzdF92M25hbWUgdGVzdF9oZWFydGJlYXQgXAorIAl0ZXN0X2NvbnN0YW50X3RpbWUKKyAKKythbGx0ZXN0czoKKysJQChmb3IgaSBpbiAkKGFsbC10ZXN0cyk7IGRvIFwKKysJKCAkKE1BS0UpICQkaSAmJiBlY2hvICJQQVNTOiAkJGkiICkgfHwgZWNobyAiRkFJTDogJCRpIjsgXAorKwlkb25lKQorKworIHRlc3RfZXZwOiAkKEVWUFRFU1QpJChFWEVfRVhUKSBldnB0ZXN0cy50eHQKKyAJLi4vdXRpbC9zaGxpYl93cmFwLnNoIC4vJChFVlBURVNUKSBldnB0ZXN0cy50eHQKKyAKK0BAIC0yMTMsNyArMjE4LDcgQEAgdGVzdF94NTA5OiAuLi9hcHBzL29wZW5zc2wkKEVYRV9FWFQpIHR4NQorIAllY2hvIHRlc3Qgc2Vjb25kIHg1MDl2MyBjZXJ0aWZpY2F0ZQorIAlzaCAuL3R4NTA5IHYzLWNlcnQyLnBlbSAyPi9kZXYvbnVsbAorIAorLXRlc3RfcnNhOiAkKFJTQVRFU1QpJChFWEVfRVhUKSAuLi9hcHBzL29wZW5zc2wkKEVYRV9FWFQpIHRyc2EgdGVzdHJzYS5wZW0KKyt0ZXN0X3JzYTogLi4vYXBwcy9vcGVuc3NsJChFWEVfRVhUKSB0cnNhIHRlc3Ryc2EucGVtCisgCUBzaCAuL3Ryc2EgMj4vZGV2L251bGwKKyAJLi4vdXRpbC9zaGxpYl93cmFwLnNoIC4vJChSU0FURVNUKQorIAorQEAgLTMxMywxMSArMzE4LDExIEBAIHRlc3RfdHNhOiAuLi9hcHBzL29wZW5zc2wkKEVYRV9FWFQpIHRlc3QKKyAJICBzaCAuL3Rlc3R0c2E7IFwKKyAJZmkKKyAKKy10ZXN0X2lnZTogJChJR0VURVNUKSQoRVhFX0VYVCkKKyt0ZXN0X2lnZToKKyAJQGVjaG8gIlRlc3QgSUdFIG1vZGUiCisgCS4uL3V0aWwvc2hsaWJfd3JhcC5zaCAuLyQoSUdFVEVTVCkKKyAKKy10ZXN0X2pwYWtlOiAkKEpQQUtFVEVTVCkkKEVYRV9FWFQpCisrdGVzdF9qcGFrZToKKyAJQGVjaG8gIlRlc3QgSlBBS0UiCisgCS4uL3V0aWwvc2hsaWJfd3JhcC5zaCAuLyQoSlBBS0VURVNUKQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9jb25maWd1cmUtdGFyZ2V0cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvY29uZmlndXJlLXRhcmdldHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxZTc0YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvY29uZmlndXJlLXRhcmdldHMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworVGhlIG51bWJlciBvZiBjb2xvbnMgYXJlIGltcG9ydGFudCA6KQorCisKKy0tLQorIENvbmZpZ3VyZSB8ICAgMTYgKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspCisKK0luZGV4OiBvcGVuc3NsLTEuMC4yYS9Db25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yYS5vcmlnL0NvbmZpZ3VyZQorKysrIG9wZW5zc2wtMS4wLjJhL0NvbmZpZ3VyZQorQEAgLTQ0Myw2ICs0NDMsMjMgQEAgbXkgJXRhYmxlPSgKKyAibGludXgtYWxwaGEtY2NjIiwiY2NjOi1mYXN0IC1yZWFkb25seV9zdHJpbmdzIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX0iLAorICJsaW51eC1hbHBoYStid3gtY2NjIiwiY2NjOi1mYXN0IC1yZWFkb25seV9zdHJpbmdzIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX0iLAorIAorKyAKKysjIExpbnV4IG9uIEFSTQorKyJsaW51eC1lbGYtYXJtIiwiJEVOVnsnQ0MnfTotRExfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxpbnV4LWVsZi1hcm1lYiIsIiRFTlZ7J0NDJ306LURCX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1nbnVlYWJpLWFybSIsIiRFTlZ7J0NDJ306LURMX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1nbnVlYWJpLWFybWViIiwiJEVOVnsnQ0MnfTotREJfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxpbnV4LXVjbGliY2VhYmktYXJtIiwiJEVOVnsnQ0MnfTotRExfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxpbnV4LXVjbGliY2VhYmktYXJtZWIiLCIkRU5WeydDQyd9Oi1EQl9FTkRJQU4gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgREVTX1JJU0MxOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysKKysibGludXgtYXZyMzIiLCIkRU5WeydDQyd9Oi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLiIsCisrCisrIyMjIyBMaW51eCBvbiBNSVBTL01JUFM2NAorKyJsaW51eC1taXBzIiwiJEVOVnsnQ0MnfTotREJfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysibGludXgtbWlwczY0IiwiJEVOVnsnQ0MnfTotREJfRU5ESUFOIC1tYWJpPTY0IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTCBERVNfUklTQzI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1taXBzNjRlbCIsIiRFTlZ7J0NDJ306LURMX0VORElBTiAtbWFiaT02NCAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysibGludXgtbWlwc2VsIiwiJEVOVnsnQ0MnfTotRExfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysKKyAjIEFuZHJvaWQ6IGxpbnV4LSogYnV0IHdpdGhvdXQgcG9pbnRlcnMgdG8gaGVhZGVycyBhbmQgbGlicy4KKyAiYW5kcm9pZCIsImdjYzotbWFuZHJvaWQgLUlcJChBTkRST0lEX0RFVikvaW5jbHVkZSAtQlwkKEFORFJPSURfREVWKS9saWIgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorICJhbmRyb2lkLXg4NiIsImdjYzotbWFuZHJvaWQgLUlcJChBTkRST0lEX0RFVikvaW5jbHVkZSAtQlwkKEFORFJPSURfREVWKS9saWIgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiIuZXZhbHtteSAkYXNtPSR7eDg2X2VsZl9hc219OyRhc209fnMvOmVsZi86YW5kcm9pZC87JGFzbX0uIjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvY3J5cHRvX3VzZV9iaWdpbnRfaW5feDg2LTY0X3BlcmwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2NyeXB0b191c2VfYmlnaW50X2luX3g4Ni02NF9wZXJsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzOTdhZjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2NyeXB0b191c2VfYmlnaW50X2luX3g4Ni02NF9wZXJsLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1Vwc3RlcmFtIFN0YXR1czogQmFja3BvcnQKKworV2hlbiBidWlsZGluZyBvbiB4MzIgc3lzdGVtcyB3aGVyZSB0aGUgZGVmYXVsdCB0eXBlIGlzIDMyYml0LCBtYWtlIHN1cmUKK3dlIGNhbiB0cmFuc3BhcmVudGx5IHJlcHJlc2VudCA2NGJpdCBpbnRlZ2Vycy4gIE90aGVyd2lzZSB3ZSBlbmQgdXAgd2l0aAorYnVpbGQgZXJyb3JzIGxpa2U6CisvdXNyL2Jpbi9wZXJsIGFzbS9naGFzaC14ODZfNjQucGwgZWxmID4gZ2hhc2gteDg2XzY0LnMKK0ludGVnZXIgb3ZlcmZsb3cgaW4gaGV4YWRlY2ltYWwgbnVtYmVyIGF0IGFzbS8uLi8uLi9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbCBsaW5lIDIwMSwgPD4gbGluZSA4OTAuCisuLi4KK2doYXNoLXg4Nl82NC5zOiBBc3NlbWJsZXIgbWVzc2FnZXM6CitnaGFzaC14ODZfNjQuczo4OTA6IEVycm9yOiBqdW5rICcuMTU0NzMzNTU0Nzk5OTVlKzE5JyBhZnRlciBleHByZXNzaW9uCisKK1dlIGRvbid0IGVuYWJsZSB0aGlzIGdsb2JhbGx5IGFzIHRoZXJlIGFyZSBzb21lIGNhc2VzIHdoZXJlIHdlJ2QgZ2V0CiszMmJpdCB2YWx1ZXMgaW50ZXJwcmV0ZWQgYXMgdW5zaWduZWQgd2hlbiB3ZSBuZWVkIHRoZW0gYXMgc2lnbmVkLgorCitSZXBvcnRlZC1ieTogQmVydHJhbmQgSmFjcXVpbiA8YmVydHJhbmRAamFjcXVpbi5iemg+CitVUkw6IGh0dHBzOi8vYnVncy5nZW50b28ub3JnLzU0MjYxOAorCitTaWduZWQtb2ZmLUJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KKworSW5kZXg6IG9wZW5zc2wtMS4wLjJhL2NyeXB0by9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjJhLm9yaWcvY3J5cHRvL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsCisrKysgb3BlbnNzbC0xLjAuMmEvY3J5cHRvL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsCitAQCAtMTk0LDcgKzE5NCwxMCBAQCBteSAlZ2xvYmFsczsKKyAgICAgfQorICAgICBzdWIgb3V0IHsKKyAgICAgCW15ICRzZWxmID0gc2hpZnQ7CistCisrCSMgV2hlbiBidWlsZGluZyBvbiB4MzIgQUJJcywgdGhlIGV4cGFuZGVkIGhleCB2YWx1ZSBtaWdodCBiZSB0b28KKysJIyBiaWcgdG8gZml0IGludG8gMzJiaXRzLiBFbmFibGUgdHJhbnNwYXJlbnQgNjRiaXQgc3VwcG9ydCBoZXJlCisrCSMgc28gd2UgY2FuIHNhZmVseSBwcmludCBpdCBvdXQuCisrCXVzZSBiaWdpbnQ7CisgCWlmICgkZ2FzKSB7CisgCSAgICAjIFNvbGFyaXMgL3Vzci9jY3MvYmluL2FzIGNhbid0IGhhbmRsZSBtdWx0aXBsaWNhdGlvbnMKKyAJICAgICMgaW4gJHNlbGYtPnt2YWx1ZX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2NfcmVoYXNoLWNvbXBhdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2NfcmVoYXNoLWNvbXBhdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGU1NGQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vY19yZWhhc2gtY29tcGF0LnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK0Zyb20gODNmMzE4ZDY4YmJkYWIxY2E4OThjOTQ1NzZhODM4Y2M5N2RmNDcwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEx1ZHdpZyBOdXNzZWwgPGx1ZHdpZy5udXNzZWxAc3VzZS5kZT4KK0RhdGU6IFdlZCwgMjEgQXByIDIwMTAgMTU6NTI6MTAgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gYWxzbyBjcmVhdGUgb2xkIGhhc2ggZm9yIGNvbXBhdGliaWxpdHkKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZGViaWFuXQorCitkaWZmIC0tZ2l0IGEvdG9vbHMvY19yZWhhc2guaW4gYi90b29scy9jX3JlaGFzaC5pbgoraW5kZXggYjA4NmZmOS4uYjc3N2Q3OSAxMDA2NDQKKy0tLSBhL3Rvb2xzL2NfcmVoYXNoLmluCisrKysgYi90b29scy9jX3JlaGFzaC5pbgorQEAgLTgsOCArOCw2IEBAIG15ICRwcmVmaXg7CisgCisgbXkgJG9wZW5zc2wgPSAkRU5We09QRU5TU0x9IHx8ICJvcGVuc3NsIjsKKyBteSAkcHdkOworLW15ICR4NTA5aGFzaCA9ICItc3ViamVjdF9oYXNoIjsKKy1teSAkY3JsaGFzaCA9ICItaGFzaCI7CisgbXkgJHZlcmJvc2UgPSAwOworIG15ICRzeW1saW5rX2V4aXN0cz1ldmFsIHtzeW1saW5rKCIiLCIiKTsgMX07CisgbXkgJHJlbW92ZWxpbmtzID0gMTsKK0BAIC0xOCwxMCArMTYsNyBAQCBteSAkcmVtb3ZlbGlua3MgPSAxOworIHdoaWxlICggJEFSR1ZbMF0gPX4gL14tLyApIHsKKyAgICAgbXkgJGZsYWcgPSBzaGlmdCBAQVJHVjsKKyAgICAgbGFzdCBpZiAoICRmbGFnIGVxICctLScpOworLSAgICBpZiAoICRmbGFnIGVxICctb2xkJykgeworLQkgICAgJHg1MDloYXNoID0gIi1zdWJqZWN0X2hhc2hfb2xkIjsKKy0JICAgICRjcmxoYXNoID0gIi1oYXNoX29sZCI7CistICAgIH0gZWxzaWYgKCAkZmxhZyBlcSAnLWgnKSB7CisrICAgIGlmICggJGZsYWcgZXEgJy1oJykgeworIAkgICAgaGVscCgpOworICAgICB9IGVsc2lmICggJGZsYWcgZXEgJy1uJyApIHsKKyAJICAgICRyZW1vdmVsaW5rcyA9IDA7CitAQCAtMTEzLDcgKzEwOCw5IEBAIHN1YiBoYXNoX2RpciB7CisgCQkJbmV4dDsKKyAJCX0KKyAJCWxpbmtfaGFzaF9jZXJ0KCRmbmFtZSkgaWYoJGNlcnQpOworKwkJbGlua19oYXNoX2NlcnRfb2xkKCRmbmFtZSkgaWYoJGNlcnQpOworIAkJbGlua19oYXNoX2NybCgkZm5hbWUpIGlmKCRjcmwpOworKwkJbGlua19oYXNoX2NybF9vbGQoJGZuYW1lKSBpZigkY3JsKTsKKyAJfQorIH0KKyAKK0BAIC0xNDYsNiArMTQzLDcgQEAgc3ViIGNoZWNrX2ZpbGUgeworIAorIHN1YiBsaW5rX2hhc2hfY2VydCB7CisgCQlteSAkZm5hbWUgPSAkX1swXTsKKysJCW15ICR4NTA5aGFzaCA9ICRfWzFdIHx8ICctc3ViamVjdF9oYXNoJzsKKyAJCSRmbmFtZSA9fiBzLycvJ1xcJycvZzsKKyAJCW15ICgkaGFzaCwgJGZwcmludCkgPSBgIiRvcGVuc3NsIiB4NTA5ICR4NTA5aGFzaCAtZmluZ2VycHJpbnQgLW5vb3V0IC1pbiAiJGZuYW1lImA7CisgCQljaG9tcCAkaGFzaDsKK0BAIC0xNzYsMTEgKzE3NCwyMSBAQCBzdWIgbGlua19oYXNoX2NlcnQgeworIAkJJGhhc2hsaXN0eyRoYXNofSA9ICRmcHJpbnQ7CisgfQorIAorK3N1YiBsaW5rX2hhc2hfY2VydF9vbGQgeworKwkJbGlua19oYXNoX2NlcnQoJF9bMF0sICctc3ViamVjdF9oYXNoX29sZCcpOworK30KKysKKytzdWIgbGlua19oYXNoX2NybF9vbGQgeworKwkJbGlua19oYXNoX2NybCgkX1swXSwgJy1oYXNoX29sZCcpOworK30KKysKKysKKyAjIFNhbWUgYXMgYWJvdmUgZXhjZXB0IGZvciBhIENSTC4gQ1JMIGxpbmtzIGFyZSBvZiB0aGUgZm9ybSA8aGFzaD4ucjxuPgorIAorIHN1YiBsaW5rX2hhc2hfY3JsIHsKKyAJCW15ICRmbmFtZSA9ICRfWzBdOworKwkJbXkgJGNybGhhc2ggPSAkX1sxXSB8fCAiLWhhc2giOworIAkJJGZuYW1lID1+IHMvJy8nXFwnJy9nOworIAkJbXkgKCRoYXNoLCAkZnByaW50KSA9IGAiJG9wZW5zc2wiIGNybCAkY3JsaGFzaCAtZmluZ2VycHJpbnQgLW5vb3V0IC1pbiAnJGZuYW1lJ2A7CisgCQljaG9tcCAkaGFzaDsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2NhLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vY2EucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJhNGQ0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2NhLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworSW5kZXg6IG9wZW5zc2wtMC45LjhtL2FwcHMvQ0EucGwuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTAuOS44bS5vcmlnL2FwcHMvQ0EucGwuaW4JMjAwNi0wNC0yOCAwMDoyODo1MS4wMDAwMDAwMDAgKzAwMDAKKysrKyBvcGVuc3NsLTAuOS44bS9hcHBzL0NBLnBsLmluCTIwMTAtMDItMjcgMDA6MzY6NTEuMDAwMDAwMDAwICswMDAwCitAQCAtNjUsNiArNjUsNyBAQAorIGZvcmVhY2ggKEBBUkdWKSB7CisgCWlmICggL14oLVw/fC1ofC1oZWxwKSQvICkgeworIAkgICAgcHJpbnQgU1RERVJSICJ1c2FnZTogQ0EgLW5ld2NlcnR8LW5ld3JlcXwtbmV3cmVxLW5vZGVzfC1uZXdjYXwtc2lnbnwtdmVyaWZ5XG4iOworKwkgICAgcHJpbnQgU1RERVJSICJ1c2FnZTogQ0EgLXNpZ25jZXJ0IGNlcnRmaWxlIGtleWZpbGV8LW5ld2NlcnR8LW5ld3JlcXwtbmV3Y2F8LXNpZ258LXZlcmlmeVxuIjsKKyAJICAgIGV4aXQgMDsKKyAJfSBlbHNpZiAoL14tbmV3Y2VydCQvKSB7CisgCSAgICAjIGNyZWF0ZSBhIGNlcnRpZmljYXRlCitAQCAtMTY1LDYgKzE2Niw3IEBACisgCX0gZWxzZSB7CisgCSAgICBwcmludCBTVERFUlIgIlVua25vd24gYXJnICRfXG4iOworIAkgICAgcHJpbnQgU1RERVJSICJ1c2FnZTogQ0EgLW5ld2NlcnR8LW5ld3JlcXwtbmV3cmVxLW5vZGVzfC1uZXdjYXwtc2lnbnwtdmVyaWZ5XG4iOworKwkgICAgcHJpbnQgU1RERVJSICJ1c2FnZTogQ0EgLXNpZ25jZXJ0IGNlcnRmaWxlIGtleWZpbGV8LW5ld2NlcnR8LW5ld3JlcXwtbmV3Y2F8LXNpZ258LXZlcmlmeVxuIjsKKyAJICAgIGV4aXQgMTsKKyAJfQorIH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2RlYmlhbi10YXJnZXRzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vZGViaWFuLXRhcmdldHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlkNDMyOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2RlYmlhbi10YXJnZXRzLnBhdGNoCkBAIC0wLDAgKzEsNzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworSW5kZXg6IG9wZW5zc2wtMS4wLjIvQ29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMi5vcmlnL0NvbmZpZ3VyZQorKysrIG9wZW5zc2wtMS4wLjIvQ29uZmlndXJlCitAQCAtMTA3LDYgKzEwNywxMCBAQCBteSAkZ2NjX2RldnRlYW1fd2FybiA9ICItV2FsbCAtcGVkYW50aWMKKyAKKyBteSAkY2xhbmdfZGlzYWJsZWRfd2FybmluZ3MgPSAiLVduby1sYW5ndWFnZS1leHRlbnNpb24tdG9rZW4gLVduby1leHRlbmRlZC1vZmZzZXRvZiAtV25vLXBhZGRlZCAtV25vLXNob3J0ZW4tNjQtdG8tMzIgLVduby1mb3JtYXQtbm9ubGl0ZXJhbCAtV25vLW1pc3Npbmctbm9yZXR1cm4gLVduby11bnVzZWQtcGFyYW1ldGVyIC1Xbm8tc2lnbi1jb252ZXJzaW9uIC1Xbm8tdW5yZWFjaGFibGUtY29kZSAtV25vLWNvbnZlcnNpb24gLVduby1kb2N1bWVudGF0aW9uIC1Xbm8tbWlzc2luZy12YXJpYWJsZS1kZWNsYXJhdGlvbnMgLVduby1jYXN0LWFsaWduIC1Xbm8taW5jb21wYXRpYmxlLXBvaW50ZXItdHlwZXMtZGlzY2FyZHMtcXVhbGlmaWVycyAtV25vLW1pc3NpbmctdmFyaWFibGUtZGVjbGFyYXRpb25zIC1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMgLVduby11bnVzZWQtbWFjcm9zIC1Xbm8tZGlzYWJsZWQtbWFjcm8tZXhwYW5zaW9uIC1Xbm8tY29uZGl0aW9uYWwtdW5pbml0aWFsaXplZCAtV25vLXN3aXRjaC1lbnVtIjsKKyAKKysjIFRoZXJlIGFyZSBubyBzZXBhcmF0ZSBDRkxBR1MvQ1BQRkxBR1MvTERGTEFHUywgc2V0IGV2ZXJ5dGhpbmcgaW4gQ0ZMQUdTCisrbXkgJGRlYmlhbl9jZmxhZ3MgPSBgZHBrZy1idWlsZGZsYWdzIC0tZ2V0IENGTEFHU2AgLiBgZHBrZy1idWlsZGZsYWdzIC0tZ2V0IENQUEZMQUdTYCAuIGBkcGtnLWJ1aWxkZmxhZ3MgLS1nZXQgTERGTEFHU2AgLiAiLVdhLC0tbm9leGVjc3RhY2sgLVdhbGwiOworKyRkZWJpYW5fY2ZsYWdzID1+IHMvXG4vIC9nOworKworIG15ICRzdHJpY3Rfd2FybmluZ3MgPSAwOworIAorIG15ICR4ODZfZ2NjX2Rlcz0iREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCI7CitAQCAtMzQzLDYgKzM0Nyw1NSBAQCBteSAldGFibGU9KAorICJvc2YxLWFscGhhLWNjIiwgICJjYzotc3RkMSAtdHVuZSBob3N0IC1PNCAtcmVhZG9ubHlfc3RyaW5nczo6KHVua25vd24pOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTks6JHthbHBoYV9hc219OmRsZmNuOmFscGhhLW9zZjEtc2hhcmVkOjo6LnNvIiwKKyAidHJ1NjQtYWxwaGEtY2MiLCAiY2M6LXN0ZDEgLXR1bmUgaG9zdCAtZmFzdCAtcmVhZG9ubHlfc3RyaW5nczo6LXB0aHJlYWQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSzoke2FscGhhX2FzbX06ZGxmY246YWxwaGEtb3NmMS1zaGFyZWQ6Oi1tc3ltOi5zbyIsCisgCisrIyBEZWJpYW4gR05VLyogKHZhcmlvdXMgYXJjaGl0ZWN0dXJlcykKKysiZGViaWFuLWFscGhhIiwiZ2NjOi1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1hbHBoYS1ldjQiLCJnY2M6LURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtbWNwdT1ldjQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1hbHBoYS1ldjUiLCJnY2M6LURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtbWNwdT1ldjU6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1hcm02NCIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWFybWVsIiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7YXJtdjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWFybWhmIiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7YXJtdjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWFtZDY0IiwgImdjYzotbTY0IC1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtRE1EMzJfUkVHX1Q9aW50OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6IiwKKysiZGViaWFuLWF2cjMyIiwgImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc30gLWZvbWl0LWZyYW1lLXBvaW50ZXI6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9OR19CRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4ta2ZyZWVic2QtYW1kNjQiLCJnY2M6LW02NCAtRExfRU5ESUFOIC1EVEVSTUlPUyAke2RlYmlhbl9jZmxhZ3N9IC1ETUQzMl9SRUdfVD1pbnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4ta2ZyZWVic2QtaTM4NiIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAke2RlYmlhbl9jZmxhZ3N9IC1tYXJjaD1pNDg2OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4taHBwYSIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVg6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4taHVyZC1pMzg2IiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtV2EsLS1ub2V4ZWNzdGFjayAtZyAtbXR1bmU9aTQ4NiAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWlhNjQiLCJnY2M6LURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19VTlJPTEwgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWkzODYiLCJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4taTM4Ni1pNDg2IiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtbWFyY2g9aTQ4Njo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWkzODYtaTU4NiIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc30gLW1hcmNoPWk1ODY6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1pMzg2LWk2ODYvY21vdiIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc30gLW1hcmNoPWk2ODY6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1tNjhrIiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIE1EMl9DSEFSIFJDNF9JTkRFWDoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1taXBzIiwgICAiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLW1pcHNlbCIsICAgImdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMIERFU19SSVNDMjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1taXBzbjMyIiwgICAibWlwczY0LWxpbnV4LWdudWFiaW4zMi1nY2M6LURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTCBERVNfUklTQzI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tbWlwc24zMmVsIiwgICAibWlwczY0ZWwtbGludXgtZ251YWJpbjMyLWdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMIERFU19SSVNDMjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1taXBzNjQiLCAgICJtaXBzNjQtbGludXgtZ251YWJpNjQtZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLW1pcHM2NGVsIiwgICAibWlwczY0ZWwtbGludXgtZ251YWJpNjQtZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLW5ldGJzZC1pMzg2IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAke2RlYmlhbl9jZmxhZ3N9IC1tNDg2OjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1uZXRic2QtbTY4ayIsCSJnY2M6LURCX0VORElBTiAtRFRFUk1JT1MgJHtkZWJpYW5fY2ZsYWdzfTo6KHVua25vd24pOjo6Qk5fTExPTkcgTUQyX0NIQVIgUkM0X0lOREVYIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1uZXRic2Qtc3BhcmMiLAkiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU9TICR7ZGViaWFuX2NmbGFnc30gLW12ODo6KHVua25vd24pOjo6Qk5fTExPTkcgTUQyX0NIQVIgUkM0X0lOREVYIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1vcGVuYnNkLWFscGhhIiwiZ2NjOi1EVEVSTUlPUyAke2RlYmlhbl9jZmxhZ3N9OjoodW5rbm93bik6OjpTSVhUWV9GT1VSX0JJVF9MT05HIERFU19JTlQgREVTX1BUUiBERVNfUklTQzI6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1vcGVuYnNkLWkzODYiLCAgImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAke2RlYmlhbl9jZmxhZ3N9IC1tNDg2OjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfYXNtfTphLm91dDpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tb3BlbmJzZC1taXBzIiwiZ2NjOi1ETF9FTkRJQU4gJHtkZWJpYW5fY2ZsYWdzfTo6KHVua25vd24pOjpCTl9MTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzIgREVTX1BUUiBCRl9QVFI6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1vcjFrIiwgImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tcG93ZXJwYyIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtwcGMzMl9hc219OmxpbnV4MzI6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1wb3dlcnBjc3BlIiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke3BwYzMyX2FzbX06bGludXgzMjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXBwYzY0IiwiZ2NjOi1tNjQgLURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtwcGM2NF9hc219OmxpbnV4NjQ6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tcHBjNjRlbCIsImdjYzotbTY0IC1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7cHBjNjRfYXNtfTpsaW51eDY0bGU6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tczM5MCIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwgCisrImRlYmlhbi1zMzkweCIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tc2gzIiwgICAiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXNoNCIsICAgImdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORzoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1zaDNlYiIsICAgImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORzoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1zaDRlYiIsICAgImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORzoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1tMzJyIiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXNwYXJjIiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXNwYXJjLXY4IiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtbWNwdT12OCAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tc3BhcmMtdjkiLCJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9IC1tY3B1PXY5IC1XYSwtQXY4cGx1cyAtRFVMVFJBU1BBUkMgLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXNwYXJjNjQiLCJnY2M6LW02NCAtREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc30gLURVTFRSQVNQQVJDIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi14MzIiLCJnY2M6LW14MzIgLURMX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9IC1ETUQzMl9SRUdfVD1pbnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVCBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbXgzMjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OngzMiIsCisrCisgIyMjIworICMjIyMgVmFyaWV0eSBvZiBMSU5VWDotKQorICMjIyMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL21hbi1kaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9tYW4tZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwODVlM2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9tYW4tZGlyLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworSW5kZXg6IG9wZW5zc2wtMS4wLjBjL01ha2VmaWxlLm9yZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjBjLm9yaWcvTWFrZWZpbGUub3JnCTIwMTAtMTItMTIgMTY6MTE6MjcuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGMvTWFrZWZpbGUub3JnCTIwMTAtMTItMTIgMTY6MTE6MzcuMDAwMDAwMDAwICswMTAwCitAQCAtMTMxLDcgKzEzMSw3IEBACisgCisgTUFLRUZJTEU9IE1ha2VmaWxlCisgCistTUFORElSPSQoT1BFTlNTTERJUikvbWFuCisrTUFORElSPS91c3Ivc2hhcmUvbWFuCisgTUFOMT0xCisgTUFOMz0zCisgTUFOU1VGRklYPQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vbWFuLXNlY3Rpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9tYW4tc2VjdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWMxZDFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vbWFuLXNlY3Rpb24ucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZGViaWFuXQorCitJbmRleDogb3BlbnNzbC0xLjAuMGMvTWFrZWZpbGUub3JnCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMGMub3JpZy9NYWtlZmlsZS5vcmcJMjAxMC0xMi0xMiAxNjoxMTozNy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wYy9NYWtlZmlsZS5vcmcJMjAxMC0xMi0xMiAxNjoxMzoyOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNjAsNyArMTYwLDggQEAKKyBNQU5ESVI9L3Vzci9zaGFyZS9tYW4KKyBNQU4xPTEKKyBNQU4zPTMKKy1NQU5TVUZGSVg9CisrTUFOU1VGRklYPXNzbAorK01BTlNFQ1RJT049U1NMCisgSFRNTFNVRkZJWD1odG1sCisgSFRNTERJUj0kKE9QRU5TU0xESVIpL2h0bWwKKyBTSEVMTD0vYmluL3NoCitAQCAtNjUxLDcgKzY1Miw3IEBACisgCQllY2hvICJpbnN0YWxsaW5nIG1hbiQkc2VjLyQkZm4uJCR7c2VjfSQoTUFOU1VGRklYKSI7IFwKKyAJCShjZCBgJChQRVJMKSB1dGlsL2Rpcm5hbWUucGwgJCRpYDsgXAorIAkJc2ggLWMgIiQkcG9kMm1hbiBcCistCQkJLS1zZWN0aW9uPSQkc2VjIC0tY2VudGVyPU9wZW5TU0wgXAorKwkJCS0tc2VjdGlvbj0kJHtzZWN9JChNQU5TRUNUSU9OKSAtLWNlbnRlcj1PcGVuU1NMIFwKKyAJCQktLXJlbGVhc2U9JChWRVJTSU9OKSBgYmFzZW5hbWUgJCRpYCIpIFwKKyAJCQk+ICAkKElOU1RBTExfUFJFRklYKSQoTUFORElSKS9tYW4kJHNlYy8kJGZuLiQke3NlY30kKE1BTlNVRkZJWCk7IFwKKyAJCSQoUEVSTCkgdXRpbC9leHRyYWN0LW5hbWVzLnBsIDwgJCRpIHwgXAorQEAgLTY2OCw3ICs2NjksNyBAQAorIAkJZWNobyAiaW5zdGFsbGluZyBtYW4kJHNlYy8kJGZuLiQke3NlY30kKE1BTlNVRkZJWCkiOyBcCisgCQkoY2QgYCQoUEVSTCkgdXRpbC9kaXJuYW1lLnBsICQkaWA7IFwKKyAJCXNoIC1jICIkJHBvZDJtYW4gXAorLQkJCS0tc2VjdGlvbj0kJHNlYyAtLWNlbnRlcj1PcGVuU1NMIFwKKysJCQktLXNlY3Rpb249JCR7c2VjfSQoTUFOU0VDVElPTikgLS1jZW50ZXI9T3BlblNTTCBcCisgCQkJLS1yZWxlYXNlPSQoVkVSU0lPTikgYGJhc2VuYW1lICQkaWAiKSBcCisgCQkJPiAgJChJTlNUQUxMX1BSRUZJWCkkKE1BTkRJUikvbWFuJCRzZWMvJCRmbi4kJHtzZWN9JChNQU5TVUZGSVgpOyBcCisgCQkkKFBFUkwpIHV0aWwvZXh0cmFjdC1uYW1lcy5wbCA8ICQkaSB8IFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL25vLXJwYXRoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vbm8tcnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNjYjNiOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL25vLXJwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworSW5kZXg6IG9wZW5zc2wtMS4wLjBjL01ha2VmaWxlLnNoYXJlZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjBjLm9yaWcvTWFrZWZpbGUuc2hhcmVkCTIwMTAtMDgtMjEgMTM6MzY6NDkuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGMvTWFrZWZpbGUuc2hhcmVkCTIwMTAtMTItMTIgMTY6MTM6MzYuMDAwMDAwMDAwICswMTAwCitAQCAtMTUzLDcgKzE1Myw3IEBACisgCU5PQUxMU1lNU0ZMQUdTPSctV2wsLS1uby13aG9sZS1hcmNoaXZlJzsgXAorIAlTSEFSRURGTEFHUz0iJChDRkxBR1MpICQoU0hBUkVEX0xERkxBR1MpIC1zaGFyZWQgLVdsLC1Cc3ltYm9saWMgLVdsLC1zb25hbWU9JCRTSExJQiQkU0hMSUJfU09WRVIkJFNITElCX1NVRkZJWCIKKyAKKy1ET19HTlVfQVBQPUxERkxBR1M9IiQoQ0ZMQUdTKSAtV2wsLXJwYXRoLCQoTElCUlBBVEgpIgorK0RPX0dOVV9BUFA9TERGTEFHUz0iJChDRkxBR1MpIgorIAorICNUaGlzIGlzIHJhdGhlciBzcGVjaWFsLiAgSXQncyBhIHNwZWNpYWwgdGFyZ2V0IHdpdGggd2hpY2ggb25lIGNhbiBsaW5rCisgI2FwcGxpY2F0aW9ucyB3aXRob3V0IGJvdGhlcmluZyB3aXRoIGFueSBmZWF0dXJlcyB0aGF0IGhhdmUgYW55dGhpbmcgdG8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL25vLXN5bWJvbGljLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vbm8tc3ltYm9saWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M0NDA4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL25vLXN5bWJvbGljLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworSW5kZXg6IG9wZW5zc2wtMS4wLjBjL01ha2VmaWxlLnNoYXJlZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjBjLm9yaWcvTWFrZWZpbGUuc2hhcmVkCTIwMTAtMTItMTIgMTY6MTM6MzYuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGMvTWFrZWZpbGUuc2hhcmVkCTIwMTAtMTItMTIgMTY6MTM6NDQuMDAwMDAwMDAwICswMTAwCitAQCAtMTUxLDcgKzE1MSw3IEBACisgCVNITElCX1NVRkZJWD07IFwKKyAJQUxMU1lNU0ZMQUdTPSctV2wsLS13aG9sZS1hcmNoaXZlJzsgXAorIAlOT0FMTFNZTVNGTEFHUz0nLVdsLC0tbm8td2hvbGUtYXJjaGl2ZSc7IFwKKy0JU0hBUkVERkxBR1M9IiQoQ0ZMQUdTKSAkKFNIQVJFRF9MREZMQUdTKSAtc2hhcmVkIC1XbCwtQnN5bWJvbGljIC1XbCwtc29uYW1lPSQkU0hMSUIkJFNITElCX1NPVkVSJCRTSExJQl9TVUZGSVgiCisrCVNIQVJFREZMQUdTPSIkKENGTEFHUykgJChTSEFSRURfTERGTEFHUykgLXNoYXJlZCAtV2wsLXNvbmFtZT0kJFNITElCJCRTSExJQl9TT1ZFUiQkU0hMSUJfU1VGRklYIgorIAorIERPX0dOVV9BUFA9TERGTEFHUz0iJChDRkxBR1MpIgorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vcGljLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vcGljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZGEzODgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9waWMucGF0Y2gKQEAgLTAsMCArMSwxNzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworSW5kZXg6IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9kZXMvYXNtL2Rlc2JvdGgucGwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4xYy5vcmlnL2NyeXB0by9kZXMvYXNtL2Rlc2JvdGgucGwJMjAwMS0xMC0yNCAyMzoyMDo1Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZGVzL2FzbS9kZXNib3RoLnBsCTIwMTItMDctMjkgMTQ6MTU6MjYuMDAwMDAwMDAwICswMjAwCitAQCAtMTYsNiArMTYsMTEgQEAKKyAKKyAJJnB1c2goImVkaSIpOworIAorKwkmY2FsbCAgICgmbGFiZWwoInBpY19wb2ludDAiKSk7CisrCSZzZXRfbGFiZWwoInBpY19wb2ludDAiKTsKKysJJmJsaW5kcG9wKCJlYnAiKTsKKysJJmFkZCAgICAoImVicCIsICJcJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXytbLi0iIC4gJmxhYmVsKCJwaWNfcG9pbnQwIikgLiAiXSIpOworKworIAkmY29tbWVudCgiIik7CisgCSZjb21tZW50KCJMb2FkIHRoZSBkYXRhIHdvcmRzIik7CisgCSZtb3YoJEwsJkRXUCgwLCJlYngiLCIiLDApKTsKK0BAIC00NywxNSArNTIsMjEgQEAKKyAJJm1vdigmc3d0bXAoMiksCShEV0MoKCRlbmMpPyIxIjoiMCIpKSk7CisgCSZtb3YoJnN3dG1wKDEpLAkiZWF4Iik7CisgCSZtb3YoJnN3dG1wKDApLAkiZWJ4Iik7CistCSZjYWxsKCJERVNfZW5jcnlwdDIiKTsKKysJJmV4Y2goImVieCIsICJlYnAiKTsKKysJJmNhbGwoIkRFU19lbmNyeXB0MlxAUExUIik7CisrCSZleGNoKCJlYngiLCAiZWJwIik7CisgCSZtb3YoJnN3dG1wKDIpLAkoRFdDKCgkZW5jKT8iMCI6IjEiKSkpOworIAkmbW92KCZzd3RtcCgxKSwJImVkaSIpOworIAkmbW92KCZzd3RtcCgwKSwJImVieCIpOworLQkmY2FsbCgiREVTX2VuY3J5cHQyIik7CisrCSZleGNoKCJlYngiLCAiZWJwIik7CisrCSZjYWxsKCJERVNfZW5jcnlwdDJcQFBMVCIpOworKwkmZXhjaCgiZWJ4IiwgImVicCIpOworIAkmbW92KCZzd3RtcCgyKSwJKERXQygoJGVuYyk/IjEiOiIwIikpKTsKKyAJJm1vdigmc3d0bXAoMSksCSJlc2kiKTsKKyAJJm1vdigmc3d0bXAoMCksCSJlYngiKTsKKy0JJmNhbGwoIkRFU19lbmNyeXB0MiIpOworKwkmZXhjaCgiZWJ4IiwgImVicCIpOworKwkmY2FsbCgiREVTX2VuY3J5cHQyXEBQTFQiKTsKKysJJmV4Y2goImVieCIsICJlYnAiKTsKKyAKKyAJJnN0YWNrX3BvcCgzKTsKKyAJJm1vdigkTCwmRFdQKDAsImVieCIsIiIsMCkpOworSW5kZXg6IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9wZXJsYXNtL2NiYy5wbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjFjLm9yaWcvY3J5cHRvL3Blcmxhc20vY2JjLnBsCTIwMTEtMDctMTMgMDg6MjI6NDYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3Blcmxhc20vY2JjLnBsCTIwMTItMDctMjkgMTQ6MTU6MjYuMDAwMDAwMDAwICswMjAwCitAQCAtMTIyLDcgKzEyMiwxMSBAQAorIAkmbW92KCZEV1AoJGRhdGFfb2ZmLCJlc3AiLCIiLDApLAkiZWF4Iik7CSMgcHV0IGluIGFycmF5IGZvciBjYWxsCisgCSZtb3YoJkRXUCgkZGF0YV9vZmYrNCwiZXNwIiwiIiwwKSwJImVieCIpOwkjCisgCistCSZjYWxsKCRlbmNfZnVuYyk7CisrCSZjYWxsCSgmbGFiZWwoInBpY19wb2ludDAiKSk7CisrCSZzZXRfbGFiZWwoInBpY19wb2ludDAiKTsKKysJJmJsaW5kcG9wKCJlYngiKTsKKysJJmFkZAkoImVieCIsICJcJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXytbLi0iIC4gJmxhYmVsKCJwaWNfcG9pbnQwIikgLiAiXSIpOworKwkmY2FsbCgiJGVuY19mdW5jXEBQTFQiKTsKKyAKKyAJJm1vdigiZWF4IiwJJkRXUCgkZGF0YV9vZmYsImVzcCIsIiIsMCkpOworIAkmbW92KCJlYngiLAkmRFdQKCRkYXRhX29mZis0LCJlc3AiLCIiLDApKTsKK0BAIC0xODUsNyArMTg5LDExIEBACisgCSZtb3YoJkRXUCgkZGF0YV9vZmYsImVzcCIsIiIsMCksCSJlYXgiKTsJIyBwdXQgaW4gYXJyYXkgZm9yIGNhbGwKKyAJJm1vdigmRFdQKCRkYXRhX29mZis0LCJlc3AiLCIiLDApLAkiZWJ4Iik7CSMKKyAKKy0JJmNhbGwoJGVuY19mdW5jKTsKKysJJmNhbGwJKCZsYWJlbCgicGljX3BvaW50MSIpKTsKKysJJnNldF9sYWJlbCgicGljX3BvaW50MSIpOworKwkmYmxpbmRwb3AoImVieCIpOworKwkmYWRkCSgiZWJ4IiwgIlwkX0dMT0JBTF9PRkZTRVRfVEFCTEVfK1suLSIgLiAmbGFiZWwoInBpY19wb2ludDEiKSAuICJdIik7CisrCSZjYWxsKCIkZW5jX2Z1bmNcQFBMVCIpOworIAorIAkmbW92KCJlYXgiLAkmRFdQKCRkYXRhX29mZiwiZXNwIiwiIiwwKSk7CisgCSZtb3YoImVieCIsCSZEV1AoJGRhdGFfb2ZmKzQsImVzcCIsIiIsMCkpOworQEAgLTIxOCw3ICsyMjYsMTEgQEAKKyAJJm1vdigmRFdQKCRkYXRhX29mZiwiZXNwIiwiIiwwKSwJImVheCIpOwkjIHB1dCBiYWNrCisgCSZtb3YoJkRXUCgkZGF0YV9vZmYrNCwiZXNwIiwiIiwwKSwJImVieCIpOwkjCisgCistCSZjYWxsKCRkZWNfZnVuYyk7CisrCSZjYWxsCSgmbGFiZWwoInBpY19wb2ludDIiKSk7CisrCSZzZXRfbGFiZWwoInBpY19wb2ludDIiKTsKKysJJmJsaW5kcG9wKCJlYngiKTsKKysJJmFkZAkoImVieCIsICJcJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXytbLi0iIC4gJmxhYmVsKCJwaWNfcG9pbnQyIikgLiAiXSIpOworKwkmY2FsbCgiJGRlY19mdW5jXEBQTFQiKTsKKyAKKyAJJm1vdigiZWF4IiwJJkRXUCgkZGF0YV9vZmYsImVzcCIsIiIsMCkpOwkjIGdldCByZXR1cm4KKyAJJm1vdigiZWJ4IiwJJkRXUCgkZGF0YV9vZmYrNCwiZXNwIiwiIiwwKSk7CSMKK0BAIC0yNjEsNyArMjczLDExIEBACisgCSZtb3YoJkRXUCgkZGF0YV9vZmYsImVzcCIsIiIsMCksCSJlYXgiKTsJIyBwdXQgYmFjaworIAkmbW92KCZEV1AoJGRhdGFfb2ZmKzQsImVzcCIsIiIsMCksCSJlYngiKTsJIworIAorLQkmY2FsbCgkZGVjX2Z1bmMpOworKwkmY2FsbAkoJmxhYmVsKCJwaWNfcG9pbnQzIikpOworKwkmc2V0X2xhYmVsKCJwaWNfcG9pbnQzIik7CisrCSZibGluZHBvcCgiZWJ4Iik7CisrCSZhZGQJKCJlYngiLCAiXCRfR0xPQkFMX09GRlNFVF9UQUJMRV8rWy4tIiAuICZsYWJlbCgicGljX3BvaW50MyIpIC4gIl0iKTsKKysJJmNhbGwoIiRkZWNfZnVuY1xAUExUIik7CisgCisgCSZtb3YoImVheCIsCSZEV1AoJGRhdGFfb2ZmLCJlc3AiLCIiLDApKTsJIyBnZXQgcmV0dXJuCisgCSZtb3YoImVieCIsCSZEV1AoJGRhdGFfb2ZmKzQsImVzcCIsIiIsMCkpOwkjCitJbmRleDogb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3Blcmxhc20veDg2Z2FzLnBsCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMWMub3JpZy9jcnlwdG8vcGVybGFzbS94ODZnYXMucGwJMjAxMS0xMi0wOSAyMDoxNjozNS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcGVybGFzbS94ODZnYXMucGwJMjAxMi0wNy0yOSAxNDoxNToyNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNjEsNiArMTYxLDcgQEAKKyAJaWYgKCQ6Om1hY29zeCkJeyBwdXNoIChAb3V0LCIkdG1wLDJcbiIpOyB9CisgCWVsc2lmICgkOjplbGYpCXsgcHVzaCAoQG91dCwiJHRtcCw0XG4iKTsgfQorIAllbHNlCQl7IHB1c2ggKEBvdXQsIiR0bXBcbiIpOyB9CisrCWlmICgkOjplbGYpCXsgcHVzaCAoQG91dCwiLmhpZGRlblx0T1BFTlNTTF9pYTMyY2FwX1BcbiIpOyB9CisgICAgIH0KKyAgICAgcHVzaChAb3V0LCRpbml0c2VnKSBpZiAoJGluaXRzZWcpOworIH0KK0BAIC0yMTgsOCArMjE5LDIzIEBACisgICAgIGVsc2lmICgkOjplbGYpCisgICAgIHsJJGluaXRzZWcuPTw8X19fOworIC5zZWN0aW9uCS5pbml0CisrX19fCisrICAgICAgICBpZiAoJDo6cGljKQorKwl7ICAgJGluaXRzZWcuPTw8X19fOworKwlwdXNobAklZWJ4CisrCWNhbGwJLnBpY19wb2ludDAKKysucGljX3BvaW50MDoKKysJcG9wbAklZWJ4CisrCWFkZGwJXCRfR0xPQkFMX09GRlNFVF9UQUJMRV8rWy4tLnBpY19wb2ludDBdLCVlYngKKysJY2FsbAkkZlxAUExUCisrCXBvcGwJJWVieAorK19fXworKwl9CisrCWVsc2UKKysJeyAgICRpbml0c2VnLj08PF9fXzsKKyAJY2FsbAkkZgorIF9fXworKwl9CisgICAgIH0KKyAgICAgZWxzaWYgKCQ6OmNvZmYpCisgICAgIHsgICAkaW5pdHNlZy49PDxfX187CSMgYXBwbGllcyB0byBib3RoIEN5Z3dpbiBhbmQgTWluZ3cKK0luZGV4OiBvcGVuc3NsLTEuMC4xYy9jcnlwdG8veDg2Y3B1aWQucGwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4xYy5vcmlnL2NyeXB0by94ODZjcHVpZC5wbAkyMDEyLTAyLTI4IDE1OjIwOjM0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by94ODZjcHVpZC5wbAkyMDEyLTA3LTI5IDE0OjE1OjI2LjAwMDAwMDAwMCArMDIwMAorQEAgLTgsNiArOCw4IEBACisgCisgZm9yIChAQVJHVikgeyAkc3NlMj0xIGlmICgvLURPUEVOU1NMX0lBMzJfU1NFMi8pOyB9CisgCisrcHVzaChAb3V0LCAiLmhpZGRlbiBPUEVOU1NMX2lhMzJjYXBfUFxuIik7CisrCisgJmZ1bmN0aW9uX2JlZ2luKCJPUEVOU1NMX2lhMzJfY3B1aWQiKTsKKyAJJnhvcgkoImVkeCIsImVkeCIpOworIAkmcHVzaGYJKCk7CitAQCAtMTM5LDkgKzE0MSw3IEBACisgJnNldF9sYWJlbCgibm9jcHVpZCIpOworICZmdW5jdGlvbl9lbmQoIk9QRU5TU0xfaWEzMl9jcHVpZCIpOworIAorLSZleHRlcm5hbF9sYWJlbCgiT1BFTlNTTF9pYTMyY2FwX1AiKTsKKy0KKy0mZnVuY3Rpb25fYmVnaW5fQigiT1BFTlNTTF9yZHRzYyIsIkVYVFJOXHRfT1BFTlNTTF9pYTMyY2FwX1A6RFdPUkQiKTsKKysmZnVuY3Rpb25fYmVnaW5fQigiT1BFTlNTTF9yZHRzYyIpOworIAkmeG9yCSgiZWF4IiwiZWF4Iik7CisgCSZ4b3IJKCJlZHgiLCJlZHgiKTsKKyAJJnBpY21ldXAoImVjeCIsIk9QRU5TU0xfaWEzMmNhcF9QIik7CitAQCAtMTU1LDcgKzE1NSw3IEBACisgIyBUaGlzIHdvcmtzIGluIFJpbmcgMCBvbmx5IFtyZWFkIERKR1BQK01TLURPUytwcml2aWxlZ2VkIERQTUkgaG9zdF0sCisgIyBidXQgaXQncyBzYWZlIHRvIGNhbGwgaXQgb24gYW55IFtzdXBwb3J0ZWRdIDMyLWJpdCBwbGF0Zm9ybS4uLgorICMgSnVzdCBjaGVjayBmb3IgW25vbi1demVybyByZXR1cm4gdmFsdWUuLi4KKy0mZnVuY3Rpb25fYmVnaW5fQigiT1BFTlNTTF9pbnN0cnVtZW50X2hhbHQiLCJFWFRSTlx0X09QRU5TU0xfaWEzMmNhcF9QOkRXT1JEIik7CisrJmZ1bmN0aW9uX2JlZ2luX0IoIk9QRU5TU0xfaW5zdHJ1bWVudF9oYWx0Iik7CisgCSZwaWNtZXVwKCJlY3giLCJPUEVOU1NMX2lhMzJjYXBfUCIpOworIAkmYnQJKCZEV1AoMCwiZWN4IiksNCk7CisgCSZqbmMJKCZsYWJlbCgibm9oYWx0IikpOwkjIG5vIFRTQworQEAgLTIyMiw3ICsyMjIsNyBAQAorIAkmcmV0CSgpOworICZmdW5jdGlvbl9lbmRfQigiT1BFTlNTTF9mYXJfc3BpbiIpOworIAorLSZmdW5jdGlvbl9iZWdpbl9CKCJPUEVOU1NMX3dpcGVfY3B1IiwiRVhUUk5cdF9PUEVOU1NMX2lhMzJjYXBfUDpEV09SRCIpOworKyZmdW5jdGlvbl9iZWdpbl9CKCJPUEVOU1NMX3dpcGVfY3B1Iik7CisgCSZ4b3IJKCJlYXgiLCJlYXgiKTsKKyAJJnhvcgkoImVkeCIsImVkeCIpOworIAkmcGljbWV1cCgiZWN4IiwiT1BFTlNTTF9pYTMyY2FwX1AiKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL3ZlcnNpb24tc2NyaXB0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vdmVyc2lvbi1zY3JpcHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI0OTE4MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL3ZlcnNpb24tc2NyaXB0LnBhdGNoCkBAIC0wLDAgKzEsNDY2MyBAQAorSW5kZXg6IG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L0NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1Lm9yaWcvQ29uZmlndXJlCTIwMTQtMDItMjQgMjE6MDI6MzAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvQ29uZmlndXJlCTIwMTQtMDItMjQgMjE6MDI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMTY1MSw2ICsxNjUxLDggQEAKKyAJCX0KKyAJfQorIAorKyRzaGFyZWRfbGRmbGFnIC49ICIgLVdsLC0tdmVyc2lvbi1zY3JpcHQ9b3BlbnNzbC5sZCI7CisrCisgb3BlbihJTiwnPE1ha2VmaWxlLm9yZycpIHx8IGRpZSAidW5hYmxlIHRvIHJlYWQgTWFrZWZpbGUub3JnOiQhXG4iOworIHVubGluaygiJE1ha2VmaWxlLm5ldyIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbW92ZSBvbGQgJE1ha2VmaWxlLm5ldzokIVxuIiBpZiAtZSAiJE1ha2VmaWxlLm5ldyI7Cisgb3BlbihPVVQsIj4kTWFrZWZpbGUubmV3IikgfHwgZGllICJ1bmFibGUgdG8gY3JlYXRlICRNYWtlZmlsZS5uZXc6JCFcbiI7CitJbmRleDogb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvb3BlbnNzbC5sZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L29wZW5zc2wubGQJMjAxNC0wMi0yNCAyMjoxOTowOC42MDE4MjcyNjYgKzAxMDAKK0BAIC0wLDAgKzEsNDYxNSBAQAorK09QRU5TU0xfMS4wLjAgeworKwlnbG9iYWw6CisrCQlCSU9fZl9zc2w7CisrCQlCSU9fbmV3X2J1ZmZlcl9zc2xfY29ubmVjdDsKKysJCUJJT19uZXdfc3NsOworKwkJQklPX25ld19zc2xfY29ubmVjdDsKKysJCUJJT19wcm94eV9zc2xfY29weV9zZXNzaW9uX2lkOworKwkJQklPX3NzbF9jb3B5X3Nlc3Npb25faWQ7CisrCQlCSU9fc3NsX3NodXRkb3duOworKwkJZDJpX1NTTF9TRVNTSU9OOworKwkJRFRMU3YxX2NsaWVudF9tZXRob2Q7CisrCQlEVExTdjFfbWV0aG9kOworKwkJRFRMU3YxX3NlcnZlcl9tZXRob2Q7CisrCQlFUlJfbG9hZF9TU0xfc3RyaW5nczsKKysJCWkyZF9TU0xfU0VTU0lPTjsKKysJCWtzc2xfYnVpbGRfcHJpbmNpcGFsXzI7CisrCQlrc3NsX2NnZXRfdGt0OworKwkJa3NzbF9jaGVja19hdXRoZW50OworKwkJa3NzbF9jdHhfZnJlZTsKKysJCWtzc2xfY3R4X25ldzsKKysJCWtzc2xfY3R4X3NldGtleTsKKysJCWtzc2xfY3R4X3NldHByaW5jOworKwkJa3NzbF9jdHhfc2V0c3RyaW5nOworKwkJa3NzbF9jdHhfc2hvdzsKKysJCWtzc2xfZXJyX3NldDsKKysJCWtzc2xfa3JiNV9mcmVlX2RhdGFfY29udGVudHM7CisrCQlrc3NsX3NnZXRfdGt0OworKwkJa3NzbF9za2lwX2NvbmZvdW5kOworKwkJa3NzbF92YWxpZGF0ZV90aW1lczsKKysJCVBFTV9yZWFkX2Jpb19TU0xfU0VTU0lPTjsKKysJCVBFTV9yZWFkX1NTTF9TRVNTSU9OOworKwkJUEVNX3dyaXRlX2Jpb19TU0xfU0VTU0lPTjsKKysJCVBFTV93cml0ZV9TU0xfU0VTU0lPTjsKKysJCVNTTF9hY2NlcHQ7CisrCQlTU0xfYWRkX2NsaWVudF9DQTsKKysJCVNTTF9hZGRfZGlyX2NlcnRfc3ViamVjdHNfdG9fc3RhY2s7CisrCQlTU0xfYWRkX2Rpcl9jZXJ0X3N1YmpzX3RvX3N0azsKKysJCVNTTF9hZGRfZmlsZV9jZXJ0X3N1YmplY3RzX3RvX3N0YWNrOworKwkJU1NMX2FkZF9maWxlX2NlcnRfc3VianNfdG9fc3RrOworKwkJU1NMX2FsZXJ0X2Rlc2Nfc3RyaW5nOworKwkJU1NMX2FsZXJ0X2Rlc2Nfc3RyaW5nX2xvbmc7CisrCQlTU0xfYWxlcnRfdHlwZV9zdHJpbmc7CisrCQlTU0xfYWxlcnRfdHlwZV9zdHJpbmdfbG9uZzsKKysJCVNTTF9jYWxsYmFja19jdHJsOworKwkJU1NMX2NoZWNrX3ByaXZhdGVfa2V5OworKwkJU1NMX0NJUEhFUl9kZXNjcmlwdGlvbjsKKysJCVNTTF9DSVBIRVJfZ2V0X2JpdHM7CisrCQlTU0xfQ0lQSEVSX2dldF9uYW1lOworKwkJU1NMX0NJUEhFUl9nZXRfdmVyc2lvbjsKKysJCVNTTF9jbGVhcjsKKysJCVNTTF9DT01QX2FkZF9jb21wcmVzc2lvbl9tZXRob2Q7CisrCQlTU0xfQ09NUF9nZXRfY29tcHJlc3Npb25fbWV0aG9kczsKKysJCVNTTF9DT01QX2dldF9jb21wcmVzc19tZXRob2RzOworKwkJU1NMX0NPTVBfZ2V0X25hbWU7CisrCQlTU0xfY29ubmVjdDsKKysJCVNTTF9jb3B5X3Nlc3Npb25faWQ7CisrCQlTU0xfY3RybDsKKysJCVNTTF9DVFhfYWRkX2NsaWVudF9DQTsKKysJCVNTTF9DVFhfYWRkX3Nlc3Npb247CisrCQlTU0xfQ1RYX2NhbGxiYWNrX2N0cmw7CisrCQlTU0xfQ1RYX2NoZWNrX3ByaXZhdGVfa2V5OworKwkJU1NMX0NUWF9jdHJsOworKwkJU1NMX0NUWF9mbHVzaF9zZXNzaW9uczsKKysJCVNTTF9DVFhfZnJlZTsKKysJCVNTTF9DVFhfZ2V0X2NlcnRfc3RvcmU7CisrCQlTU0xfQ1RYX2dldF9jbGllbnRfQ0FfbGlzdDsKKysJCVNTTF9DVFhfZ2V0X2NsaWVudF9jZXJ0X2NiOworKwkJU1NMX0NUWF9nZXRfZXhfZGF0YTsKKysJCVNTTF9DVFhfZ2V0X2V4X25ld19pbmRleDsKKysJCVNTTF9DVFhfZ2V0X2luZm9fY2FsbGJhY2s7CisrCQlTU0xfQ1RYX2dldF9xdWlldF9zaHV0ZG93bjsKKysJCVNTTF9DVFhfZ2V0X3RpbWVvdXQ7CisrCQlTU0xfQ1RYX2dldF92ZXJpZnlfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX2dldF92ZXJpZnlfZGVwdGg7CisrCQlTU0xfQ1RYX2dldF92ZXJpZnlfbW9kZTsKKysJCVNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zOworKwkJU1NMX0NUWF9uZXc7CisrCQlTU0xfQ1RYX3JlbW92ZV9zZXNzaW9uOworKwkJU1NMX0NUWF9zZXNzX2dldF9nZXRfY2I7CisrCQlTU0xfQ1RYX3Nlc3NfZ2V0X25ld19jYjsKKysJCVNTTF9DVFhfc2Vzc19nZXRfcmVtb3ZlX2NiOworKwkJU1NMX0NUWF9zZXNzaW9uczsKKysJCVNTTF9DVFhfc2Vzc19zZXRfZ2V0X2NiOworKwkJU1NMX0NUWF9zZXNzX3NldF9uZXdfY2I7CisrCQlTU0xfQ1RYX3Nlc3Nfc2V0X3JlbW92ZV9jYjsKKysJCVNTTF9DVFhfc2V0MV9wYXJhbTsKKysJCVNTTF9DVFhfc2V0X2NlcnRfc3RvcmU7CisrCQlTU0xfQ1RYX3NldF9jZXJ0X3ZlcmlmeV9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X2NlcnRfdmVyaWZ5X2NiOworKwkJU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3Q7CisrCQlTU0xfQ1RYX3NldF9jbGllbnRfQ0FfbGlzdDsKKysJCVNTTF9DVFhfc2V0X2NsaWVudF9jZXJ0X2NiOworKwkJU1NMX0NUWF9zZXRfY2xpZW50X2NlcnRfZW5naW5lOworKwkJU1NMX0NUWF9zZXRfY29va2llX2dlbmVyYXRlX2NiOworKwkJU1NMX0NUWF9zZXRfY29va2llX3ZlcmlmeV9jYjsKKysJCVNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiOworKwkJU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2JfdXNlcmRhdGE7CisrCQlTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRoczsKKysJCVNTTF9DVFhfc2V0X2RlZl9wYXNzd2RfY2JfdWQ7CisrCQlTU0xfQ1RYX3NldF9kZWZfdmVyaWZ5X3BhdGhzOworKwkJU1NMX0NUWF9zZXRfZXhfZGF0YTsKKysJCVNTTF9DVFhfc2V0X2dlbmVyYXRlX3Nlc3Npb25faWQ7CisrCQlTU0xfQ1RYX3NldF9pbmZvX2NhbGxiYWNrOworKwkJU1NMX0NUWF9zZXRfbXNnX2NhbGxiYWNrOworKwkJU1NMX0NUWF9zZXRfcHNrX2NsaWVudF9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3Bza19zZXJ2ZXJfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF9wdXJwb3NlOworKwkJU1NMX0NUWF9zZXRfcXVpZXRfc2h1dGRvd247CisrCQlTU0xfQ1RYX3NldF9zZXNzaW9uX2lkX2NvbnRleHQ7CisrCQlTU0xfQ1RYX3NldF9zc2xfdmVyc2lvbjsKKysJCVNTTF9DVFhfc2V0X3RpbWVvdXQ7CisrCQlTU0xfQ1RYX3NldF90bXBfZGhfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF90bXBfZWNkaF9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3RtcF9yc2FfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF90cnVzdDsKKysJCVNTTF9DVFhfc2V0X3ZlcmlmeTsKKysJCVNTTF9DVFhfc2V0X3ZlcmlmeV9kZXB0aDsKKysJCVNTTF9DVFhfdXNlX2NlcnRfY2hhaW5fZmlsZTsKKysJCVNTTF9DVFhfdXNlX2NlcnRpZmljYXRlOworKwkJU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfQVNOMTsKKysJCVNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGU7CisrCQlTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9maWxlOworKwkJU1NMX0NUWF91c2VfUHJpdmF0ZUtleTsKKysJCVNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfQVNOMTsKKysJCVNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfZmlsZTsKKysJCVNTTF9DVFhfdXNlX3Bza19pZGVudGl0eV9oaW50OworKwkJU1NMX0NUWF91c2VfUlNBUHJpdmF0ZUtleTsKKysJCVNTTF9DVFhfdXNlX1JTQVByaXZhdGVLZXlfQVNOMTsKKysJCVNTTF9DVFhfdXNlX1JTQVByaXZhdGVLZXlfZmlsZTsKKysJCVNTTF9kb19oYW5kc2hha2U7CisrCQlTU0xfZHVwOworKwkJU1NMX2R1cF9DQV9saXN0OworKwkJU1NMZWF5X2FkZF9zc2xfYWxnb3JpdGhtczsKKysJCVNTTF9mcmVlOworKwkJU1NMX2dldDFfc2Vzc2lvbjsKKysJCVNTTF9nZXRfY2VydGlmaWNhdGU7CisrCQlTU0xfZ2V0X2NpcGhlcl9saXN0OworKwkJU1NMX2dldF9jaXBoZXJzOworKwkJU1NMX2dldF9jbGllbnRfQ0FfbGlzdDsKKysJCVNTTF9nZXRfY3VycmVudF9jaXBoZXI7CisrCQlTU0xfZ2V0X2N1cnJlbnRfY29tcHJlc3Npb247CisrCQlTU0xfZ2V0X2N1cnJlbnRfZXhwYW5zaW9uOworKwkJU1NMX2dldF9kZWZhdWx0X3RpbWVvdXQ7CisrCQlTU0xfZ2V0X2Vycm9yOworKwkJU1NMX2dldF9leF9kYXRhOworKwkJU1NMX2dldF9leF9kYXRhX1g1MDlfU1RPUkVfQ1RYX2lkeDsKKysJCVNTTF9nZXRfZXhfZF9YNTA5X1NUT1JFX0NUWF9pZHg7CisrCQlTU0xfZ2V0X2V4X25ld19pbmRleDsKKysJCVNTTF9nZXRfZmQ7CisrCQlTU0xfZ2V0X2ZpbmlzaGVkOworKwkJU1NMX2dldF9pbmZvX2NhbGxiYWNrOworKwkJU1NMX2dldF9wZWVyX2NlcnRfY2hhaW47CisrCQlTU0xfZ2V0X3BlZXJfY2VydGlmaWNhdGU7CisrCQlTU0xfZ2V0X3BlZXJfZmluaXNoZWQ7CisrCQlTU0xfZ2V0X3ByaXZhdGVrZXk7CisrCQlTU0xfZ2V0X3Bza19pZGVudGl0eTsKKysJCVNTTF9nZXRfcHNrX2lkZW50aXR5X2hpbnQ7CisrCQlTU0xfZ2V0X3F1aWV0X3NodXRkb3duOworKwkJU1NMX2dldF9yYmlvOworKwkJU1NMX2dldF9yZWFkX2FoZWFkOworKwkJU1NMX2dldF9yZmQ7CisrCQlTU0xfZ2V0X3NlcnZlcm5hbWU7CisrCQlTU0xfZ2V0X3NlcnZlcm5hbWVfdHlwZTsKKysJCVNTTF9nZXRfc2Vzc2lvbjsKKysJCVNTTF9nZXRfc2hhcmVkX2NpcGhlcnM7CisrCQlTU0xfZ2V0X3NodXRkb3duOworKwkJU1NMX2dldF9TU0xfQ1RYOworKwkJU1NMX2dldF9zc2xfbWV0aG9kOworKwkJU1NMX2dldF92ZXJpZnlfY2FsbGJhY2s7CisrCQlTU0xfZ2V0X3ZlcmlmeV9kZXB0aDsKKysJCVNTTF9nZXRfdmVyaWZ5X21vZGU7CisrCQlTU0xfZ2V0X3ZlcmlmeV9yZXN1bHQ7CisrCQlTU0xfZ2V0X3ZlcnNpb247CisrCQlTU0xfZ2V0X3diaW87CisrCQlTU0xfZ2V0X3dmZDsKKysJCVNTTF9oYXNfbWF0Y2hpbmdfc2Vzc2lvbl9pZDsKKysJCVNTTF9saWJyYXJ5X2luaXQ7CisrCQlTU0xfbG9hZF9jbGllbnRfQ0FfZmlsZTsKKysJCVNTTF9sb2FkX2Vycm9yX3N0cmluZ3M7CisrCQlTU0xfbmV3OworKwkJU1NMX3BlZWs7CisrCQlTU0xfcGVuZGluZzsKKysJCVNTTF9yZWFkOworKwkJU1NMX3JlbmVnb3RpYXRlOworKwkJU1NMX3JlbmVnb3RpYXRlX3BlbmRpbmc7CisrCQlTU0xfcnN0YXRlX3N0cmluZzsKKysJCVNTTF9yc3RhdGVfc3RyaW5nX2xvbmc7CisrCQlTU0xfU0VTU0lPTl9jbXA7CisrCQlTU0xfU0VTU0lPTl9mcmVlOworKwkJU1NMX1NFU1NJT05fZ2V0X2V4X2RhdGE7CisrCQlTU0xfU0VTU0lPTl9nZXRfZXhfbmV3X2luZGV4OworKwkJU1NMX1NFU1NJT05fZ2V0X2lkOworKwkJU1NMX1NFU1NJT05fZ2V0X3RpbWU7CisrCQlTU0xfU0VTU0lPTl9nZXRfdGltZW91dDsKKysJCVNTTF9TRVNTSU9OX2hhc2g7CisrCQlTU0xfU0VTU0lPTl9uZXc7CisrCQlTU0xfU0VTU0lPTl9wcmludDsKKysJCVNTTF9TRVNTSU9OX3ByaW50X2ZwOworKwkJU1NMX1NFU1NJT05fc2V0X2V4X2RhdGE7CisrCQlTU0xfU0VTU0lPTl9zZXRfdGltZTsKKysJCVNTTF9TRVNTSU9OX3NldF90aW1lb3V0OworKwkJU1NMX3NldDFfcGFyYW07CisrCQlTU0xfc2V0X2FjY2VwdF9zdGF0ZTsKKysJCVNTTF9zZXRfYmlvOworKwkJU1NMX3NldF9jaXBoZXJfbGlzdDsKKysJCVNTTF9zZXRfY2xpZW50X0NBX2xpc3Q7CisrCQlTU0xfc2V0X2Nvbm5lY3Rfc3RhdGU7CisrCQlTU0xfc2V0X2V4X2RhdGE7CisrCQlTU0xfc2V0X2ZkOworKwkJU1NMX3NldF9nZW5lcmF0ZV9zZXNzaW9uX2lkOworKwkJU1NMX3NldF9pbmZvX2NhbGxiYWNrOworKwkJU1NMX3NldF9tc2dfY2FsbGJhY2s7CisrCQlTU0xfc2V0X3Bza19jbGllbnRfY2FsbGJhY2s7CisrCQlTU0xfc2V0X3Bza19zZXJ2ZXJfY2FsbGJhY2s7CisrCQlTU0xfc2V0X3B1cnBvc2U7CisrCQlTU0xfc2V0X3F1aWV0X3NodXRkb3duOworKwkJU1NMX3NldF9yZWFkX2FoZWFkOworKwkJU1NMX3NldF9yZmQ7CisrCQlTU0xfc2V0X3Nlc3Npb247CisrCQlTU0xfc2V0X3Nlc3Npb25faWRfY29udGV4dDsKKysJCVNTTF9zZXRfc2Vzc2lvbl9zZWNyZXRfY2I7CisrCQlTU0xfc2V0X3Nlc3Npb25fdGlja2V0X2V4dDsKKysJCVNTTF9zZXRfc2Vzc2lvbl90aWNrZXRfZXh0X2NiOworKwkJU1NMX3NldF9zaHV0ZG93bjsKKysJCVNTTF9zZXRfU1NMX0NUWDsKKysJCVNTTF9zZXRfc3NsX21ldGhvZDsKKysJCVNTTF9zZXRfdG1wX2RoX2NhbGxiYWNrOworKwkJU1NMX3NldF90bXBfZWNkaF9jYWxsYmFjazsKKysJCVNTTF9zZXRfdG1wX3JzYV9jYWxsYmFjazsKKysJCVNTTF9zZXRfdHJ1c3Q7CisrCQlTU0xfc2V0X3ZlcmlmeTsKKysJCVNTTF9zZXRfdmVyaWZ5X2RlcHRoOworKwkJU1NMX3NldF92ZXJpZnlfcmVzdWx0OworKwkJU1NMX3NldF93ZmQ7CisrCQlTU0xfc2h1dGRvd247CisrCQlTU0xfc3RhdGU7CisrCQlTU0xfc3RhdGVfc3RyaW5nOworKwkJU1NMX3N0YXRlX3N0cmluZ19sb25nOworKwkJU1NMX3VzZV9jZXJ0aWZpY2F0ZTsKKysJCVNTTF91c2VfY2VydGlmaWNhdGVfQVNOMTsKKysJCVNTTF91c2VfY2VydGlmaWNhdGVfZmlsZTsKKysJCVNTTF91c2VfUHJpdmF0ZUtleTsKKysJCVNTTF91c2VfUHJpdmF0ZUtleV9BU04xOworKwkJU1NMX3VzZV9Qcml2YXRlS2V5X2ZpbGU7CisrCQlTU0xfdXNlX3Bza19pZGVudGl0eV9oaW50OworKwkJU1NMX3VzZV9SU0FQcml2YXRlS2V5OworKwkJU1NMX3VzZV9SU0FQcml2YXRlS2V5X0FTTjE7CisrCQlTU0xfdXNlX1JTQVByaXZhdGVLZXlfZmlsZTsKKysJCVNTTHYyM19jbGllbnRfbWV0aG9kOworKwkJU1NMdjIzX21ldGhvZDsKKysJCVNTTHYyM19zZXJ2ZXJfbWV0aG9kOworKwkJU1NMdjJfY2xpZW50X21ldGhvZDsKKysJCVNTTHYyX21ldGhvZDsKKysJCVNTTHYyX3NlcnZlcl9tZXRob2Q7CisrCQlTU0x2M19jbGllbnRfbWV0aG9kOworKwkJU1NMdjNfbWV0aG9kOworKwkJU1NMdjNfc2VydmVyX21ldGhvZDsKKysJCVNTTF92ZXJzaW9uOworKwkJU1NMX3dhbnQ7CisrCQlTU0xfd3JpdGU7CisrCQlUTFN2MV9jbGllbnRfbWV0aG9kOworKwkJVExTdjFfbWV0aG9kOworKwkJVExTdjFfc2VydmVyX21ldGhvZDsKKysKKysKKysJCVNTTGVheTsKKysJCVNTTGVheV92ZXJzaW9uOworKwkJQVNOMV9CSVRfU1RSSU5HX2FzbjFfbWV0aDsKKysJCUFTTjFfSEVBREVSX2ZyZWU7CisrCQlBU04xX0hFQURFUl9uZXc7CisrCQlBU04xX0lBNVNUUklOR19hc24xX21ldGg7CisrCQlBU04xX0lOVEVHRVJfZ2V0OworKwkJQVNOMV9JTlRFR0VSX3NldDsKKysJCUFTTjFfSU5URUdFUl90b19CTjsKKysJCUFTTjFfT0JKRUNUX2NyZWF0ZTsKKysJCUFTTjFfT0JKRUNUX2ZyZWU7CisrCQlBU04xX09CSkVDVF9uZXc7CisrCQlBU04xX1BSSU5UQUJMRV90eXBlOworKwkJQVNOMV9TVFJJTkdfY21wOworKwkJQVNOMV9TVFJJTkdfZHVwOworKwkJQVNOMV9TVFJJTkdfZnJlZTsKKysJCUFTTjFfU1RSSU5HX25ldzsKKysJCUFTTjFfU1RSSU5HX3ByaW50OworKwkJQVNOMV9TVFJJTkdfc2V0OworKwkJQVNOMV9TVFJJTkdfdHlwZV9uZXc7CisrCQlBU04xX1RZUEVfZnJlZTsKKysJCUFTTjFfVFlQRV9uZXc7CisrCQlBU04xX1VOSVZFUlNBTFNUUklOR190b19zdHJpbmc7CisrCQlBU04xX1VUQ1RJTUVfY2hlY2s7CisrCQlBU04xX1VUQ1RJTUVfcHJpbnQ7CisrCQlBU04xX1VUQ1RJTUVfc2V0OworKwkJQVNOMV9jaGVja19pbmZpbml0ZV9lbmQ7CisrCQlBU04xX2QyaV9iaW87CisrCQlBU04xX2QyaV9mcDsKKysJCUFTTjFfZGlnZXN0OworKwkJQVNOMV9kdXA7CisrCQlBU04xX2dldF9vYmplY3Q7CisrCQlBU04xX2kyZF9iaW87CisrCQlBU04xX2kyZF9mcDsKKysJCUFTTjFfb2JqZWN0X3NpemU7CisrCQlBU04xX3BhcnNlOworKwkJQVNOMV9wdXRfb2JqZWN0OworKwkJQVNOMV9zaWduOworKwkJQVNOMV92ZXJpZnk7CisrCQlCRl9jYmNfZW5jcnlwdDsKKysJCUJGX2NmYjY0X2VuY3J5cHQ7CisrCQlCRl9lY2JfZW5jcnlwdDsKKysJCUJGX2VuY3J5cHQ7CisrCQlCRl9vZmI2NF9lbmNyeXB0OworKwkJQkZfb3B0aW9uczsKKysJCUJGX3NldF9rZXk7CisrCQlCSU9fQ09OTkVDVF9mcmVlOworKwkJQklPX0NPTk5FQ1RfbmV3OworKwkJQklPX2FjY2VwdDsKKysJCUJJT19jdHJsOworKwkJQklPX2ludF9jdHJsOworKwkJQklPX2RlYnVnX2NhbGxiYWNrOworKwkJQklPX2R1bXA7CisrCQlCSU9fZHVwX2NoYWluOworKwkJQklPX2ZfYmFzZTY0OworKwkJQklPX2ZfYnVmZmVyOworKwkJQklPX2ZfY2lwaGVyOworKwkJQklPX2ZfbWQ7CisrCQlCSU9fZl9udWxsOworKwkJQklPX2ZfcHJveHlfc2VydmVyOworKwkJQklPX2ZkX25vbl9mYXRhbF9lcnJvcjsKKysJCUJJT19mZF9zaG91bGRfcmV0cnk7CisrCQlCSU9fZmluZF90eXBlOworKwkJQklPX2ZyZWU7CisrCQlCSU9fZnJlZV9hbGw7CisrCQlCSU9fZ2V0X2FjY2VwdF9zb2NrZXQ7CisrCQlCSU9fZ2V0X2ZpbHRlcl9iaW87CisrCQlCSU9fZ2V0X2hvc3RfaXA7CisrCQlCSU9fZ2V0X3BvcnQ7CisrCQlCSU9fZ2V0X3JldHJ5X0JJTzsKKysJCUJJT19nZXRfcmV0cnlfcmVhc29uOworKwkJQklPX2dldGhvc3RieW5hbWU7CisrCQlCSU9fZ2V0czsKKysJCUJJT19uZXc7CisrCQlCSU9fbmV3X2FjY2VwdDsKKysJCUJJT19uZXdfY29ubmVjdDsKKysJCUJJT19uZXdfZmQ7CisrCQlCSU9fbmV3X2ZpbGU7CisrCQlCSU9fbmV3X2ZwOworKwkJQklPX25ld19zb2NrZXQ7CisrCQlCSU9fcG9wOworKwkJQklPX3ByaW50ZjsKKysJCUJJT19wdXNoOworKwkJQklPX3B1dHM7CisrCQlCSU9fcmVhZDsKKysJCUJJT19zX2FjY2VwdDsKKysJCUJJT19zX2Nvbm5lY3Q7CisrCQlCSU9fc19mZDsKKysJCUJJT19zX2ZpbGU7CisrCQlCSU9fc19tZW07CisrCQlCSU9fc19udWxsOworKwkJQklPX3NfcHJveHlfY2xpZW50OworKwkJQklPX3Nfc29ja2V0OworKwkJQklPX3NldDsKKysJCUJJT19zZXRfY2lwaGVyOworKwkJQklPX3NldF90Y3BfbmRlbGF5OworKwkJQklPX3NvY2tfY2xlYW51cDsKKysJCUJJT19zb2NrX2Vycm9yOworKwkJQklPX3NvY2tfaW5pdDsKKysJCUJJT19zb2NrX25vbl9mYXRhbF9lcnJvcjsKKysJCUJJT19zb2NrX3Nob3VsZF9yZXRyeTsKKysJCUJJT19zb2NrZXRfaW9jdGw7CisrCQlCSU9fd3JpdGU7CisrCQlCTl9DVFhfZnJlZTsKKysJCUJOX0NUWF9uZXc7CisrCQlCTl9NT05UX0NUWF9mcmVlOworKwkJQk5fTU9OVF9DVFhfbmV3OworKwkJQk5fTU9OVF9DVFhfc2V0OworKwkJQk5fYWRkOworKwkJQk5fYWRkX3dvcmQ7CisrCQlCTl9oZXgyYm47CisrCQlCTl9iaW4yYm47CisrCQlCTl9ibjJoZXg7CisrCQlCTl9ibjJiaW47CisrCQlCTl9jbGVhcjsKKysJCUJOX2NsZWFyX2JpdDsKKysJCUJOX2NsZWFyX2ZyZWU7CisrCQlCTl9jbXA7CisrCQlCTl9jb3B5OworKwkJQk5fZGl2OworKwkJQk5fZGl2X3dvcmQ7CisrCQlCTl9kdXA7CisrCQlCTl9mcmVlOworKwkJQk5fZnJvbV9tb250Z29tZXJ5OworKwkJQk5fZ2NkOworKwkJQk5fZ2VuZXJhdGVfcHJpbWU7CisrCQlCTl9nZXRfd29yZDsKKysJCUJOX2lzX2JpdF9zZXQ7CisrCQlCTl9pc19wcmltZTsKKysJCUJOX2xzaGlmdDsKKysJCUJOX2xzaGlmdDE7CisrCQlCTl9tYXNrX2JpdHM7CisrCQlCTl9tb2Q7CisrCQlCTl9tb2RfZXhwOworKwkJQk5fbW9kX2V4cF9tb250OworKwkJQk5fbW9kX2V4cF9zaW1wbGU7CisrCQlCTl9tb2RfaW52ZXJzZTsKKysJCUJOX21vZF9tdWw7CisrCQlCTl9tb2RfbXVsX21vbnRnb21lcnk7CisrCQlCTl9tb2Rfd29yZDsKKysJCUJOX211bDsKKysJCUJOX25ldzsKKysJCUJOX251bV9iaXRzOworKwkJQk5fbnVtX2JpdHNfd29yZDsKKysJCUJOX29wdGlvbnM7CisrCQlCTl9wcmludDsKKysJCUJOX3ByaW50X2ZwOworKwkJQk5fcmFuZDsKKysJCUJOX3JlY2lwcm9jYWw7CisrCQlCTl9yc2hpZnQ7CisrCQlCTl9yc2hpZnQxOworKwkJQk5fc2V0X2JpdDsKKysJCUJOX3NldF93b3JkOworKwkJQk5fc3FyOworKwkJQk5fc3ViOworKwkJQk5fdG9fQVNOMV9JTlRFR0VSOworKwkJQk5fdWNtcDsKKysJCUJOX3ZhbHVlX29uZTsKKysJCUJVRl9NRU1fZnJlZTsKKysJCUJVRl9NRU1fZ3JvdzsKKysJCUJVRl9NRU1fbmV3OworKwkJQlVGX3N0cmR1cDsKKysJCUNPTkZfZnJlZTsKKysJCUNPTkZfZ2V0X251bWJlcjsKKysJCUNPTkZfZ2V0X3NlY3Rpb247CisrCQlDT05GX2dldF9zdHJpbmc7CisrCQlDT05GX2xvYWQ7CisrCQlDUllQVE9fYWRkX2xvY2s7CisrCQlDUllQVE9fZGJnX2ZyZWU7CisrCQlDUllQVE9fZGJnX21hbGxvYzsKKysJCUNSWVBUT19kYmdfcmVhbGxvYzsKKysJCUNSWVBUT19kYmdfcmVtYWxsb2M7CisrCQlDUllQVE9fZnJlZTsKKysJCUNSWVBUT19nZXRfYWRkX2xvY2tfY2FsbGJhY2s7CisrCQlDUllQVE9fZ2V0X2lkX2NhbGxiYWNrOworKwkJQ1JZUFRPX2dldF9sb2NrX25hbWU7CisrCQlDUllQVE9fZ2V0X2xvY2tpbmdfY2FsbGJhY2s7CisrCQlDUllQVE9fZ2V0X21lbV9mdW5jdGlvbnM7CisrCQlDUllQVE9fbG9jazsKKysJCUNSWVBUT19tYWxsb2M7CisrCQlDUllQVE9fbWVtX2N0cmw7CisrCQlDUllQVE9fbWVtX2xlYWtzOworKwkJQ1JZUFRPX21lbV9sZWFrc19jYjsKKysJCUNSWVBUT19tZW1fbGVha3NfZnA7CisrCQlDUllQVE9fcmVhbGxvYzsKKysJCUNSWVBUT19yZW1hbGxvYzsKKysJCUNSWVBUT19zZXRfYWRkX2xvY2tfY2FsbGJhY2s7CisrCQlDUllQVE9fc2V0X2lkX2NhbGxiYWNrOworKwkJQ1JZUFRPX3NldF9sb2NraW5nX2NhbGxiYWNrOworKwkJQ1JZUFRPX3NldF9tZW1fZnVuY3Rpb25zOworKwkJQ1JZUFRPX3RocmVhZF9pZDsKKysJCURIX2NoZWNrOworKwkJREhfY29tcHV0ZV9rZXk7CisrCQlESF9mcmVlOworKwkJREhfZ2VuZXJhdGVfa2V5OworKwkJREhfZ2VuZXJhdGVfcGFyYW1ldGVyczsKKysJCURIX25ldzsKKysJCURIX3NpemU7CisrCQlESHBhcmFtc19wcmludDsKKysJCURIcGFyYW1zX3ByaW50X2ZwOworKwkJRFNBX2ZyZWU7CisrCQlEU0FfZ2VuZXJhdGVfa2V5OworKwkJRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnM7CisrCQlEU0FfaXNfcHJpbWU7CisrCQlEU0FfbmV3OworKwkJRFNBX3ByaW50OworKwkJRFNBX3ByaW50X2ZwOworKwkJRFNBX3NpZ247CisrCQlEU0Ffc2lnbl9zZXR1cDsKKysJCURTQV9zaXplOworKwkJRFNBX3ZlcmlmeTsKKysJCURTQXBhcmFtc19wcmludDsKKysJCURTQXBhcmFtc19wcmludF9mcDsKKysJCUVSUl9jbGVhcl9lcnJvcjsKKysJCUVSUl9lcnJvcl9zdHJpbmc7CisrCQlFUlJfZnJlZV9zdHJpbmdzOworKwkJRVJSX2Z1bmNfZXJyb3Jfc3RyaW5nOworKwkJRVJSX2dldF9lcnJfc3RhdGVfdGFibGU7CisrCQlFUlJfZ2V0X2Vycm9yOworKwkJRVJSX2dldF9lcnJvcl9saW5lOworKwkJRVJSX2dldF9zdGF0ZTsKKysJCUVSUl9nZXRfc3RyaW5nX3RhYmxlOworKwkJRVJSX2xpYl9lcnJvcl9zdHJpbmc7CisrCQlFUlJfbG9hZF9BU04xX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9CSU9fc3RyaW5nczsKKysJCUVSUl9sb2FkX0JOX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9CVUZfc3RyaW5nczsKKysJCUVSUl9sb2FkX0NPTkZfc3RyaW5nczsKKysJCUVSUl9sb2FkX0RIX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9EU0Ffc3RyaW5nczsKKysJCUVSUl9sb2FkX0VSUl9zdHJpbmdzOworKwkJRVJSX2xvYWRfRVZQX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9PQkpfc3RyaW5nczsKKysJCUVSUl9sb2FkX1BFTV9zdHJpbmdzOworKwkJRVJSX2xvYWRfUFJPWFlfc3RyaW5nczsKKysJCUVSUl9sb2FkX1JTQV9zdHJpbmdzOworKwkJRVJSX2xvYWRfWDUwOV9zdHJpbmdzOworKwkJRVJSX2xvYWRfY3J5cHRvX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9zdHJpbmdzOworKwkJRVJSX3BlZWtfZXJyb3I7CisrCQlFUlJfcGVla19lcnJvcl9saW5lOworKwkJRVJSX3ByaW50X2Vycm9yczsKKysJCUVSUl9wcmludF9lcnJvcnNfZnA7CisrCQlFUlJfcHV0X2Vycm9yOworKwkJRVJSX3JlYXNvbl9lcnJvcl9zdHJpbmc7CisrCQlFUlJfcmVtb3ZlX3N0YXRlOworKwkJRVZQX0J5dGVzVG9LZXk7CisrCQlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwOworKwkJRVZQX0NpcGhlckZpbmFsOworKwkJRVZQX0NpcGhlckluaXQ7CisrCQlFVlBfQ2lwaGVyVXBkYXRlOworKwkJRVZQX0RlY29kZUJsb2NrOworKwkJRVZQX0RlY29kZUZpbmFsOworKwkJRVZQX0RlY29kZUluaXQ7CisrCQlFVlBfRGVjb2RlVXBkYXRlOworKwkJRVZQX0RlY3J5cHRGaW5hbDsKKysJCUVWUF9EZWNyeXB0SW5pdDsKKysJCUVWUF9EZWNyeXB0VXBkYXRlOworKwkJRVZQX0RpZ2VzdEZpbmFsOworKwkJRVZQX0RpZ2VzdEluaXQ7CisrCQlFVlBfRGlnZXN0VXBkYXRlOworKwkJRVZQX0VuY29kZUJsb2NrOworKwkJRVZQX0VuY29kZUZpbmFsOworKwkJRVZQX0VuY29kZUluaXQ7CisrCQlFVlBfRW5jb2RlVXBkYXRlOworKwkJRVZQX0VuY3J5cHRGaW5hbDsKKysJCUVWUF9FbmNyeXB0SW5pdDsKKysJCUVWUF9FbmNyeXB0VXBkYXRlOworKwkJRVZQX09wZW5GaW5hbDsKKysJCUVWUF9PcGVuSW5pdDsKKysJCUVWUF9QS0VZX2Fzc2lnbjsKKysJCUVWUF9QS0VZX2NvcHlfcGFyYW1ldGVyczsKKysJCUVWUF9QS0VZX2ZyZWU7CisrCQlFVlBfUEtFWV9taXNzaW5nX3BhcmFtZXRlcnM7CisrCQlFVlBfUEtFWV9uZXc7CisrCQlFVlBfUEtFWV9zYXZlX3BhcmFtZXRlcnM7CisrCQlFVlBfUEtFWV9zaXplOworKwkJRVZQX1BLRVlfdHlwZTsKKysJCUVWUF9TZWFsRmluYWw7CisrCQlFVlBfU2VhbEluaXQ7CisrCQlFVlBfU2lnbkZpbmFsOworKwkJRVZQX1ZlcmlmeUZpbmFsOworKwkJRVZQX2FkZF9hbGlhczsKKysJCUVWUF9hZGRfY2lwaGVyOworKwkJRVZQX2FkZF9kaWdlc3Q7CisrCQlFVlBfYmZfY2JjOworKwkJRVZQX2JmX2NmYjY0OworKwkJRVZQX2JmX2VjYjsKKysJCUVWUF9iZl9vZmI7CisrCQlFVlBfY2xlYW51cDsKKysJCUVWUF9kZXNfY2JjOworKwkJRVZQX2Rlc19jZmI2NDsKKysJCUVWUF9kZXNfZWNiOworKwkJRVZQX2Rlc19lZGU7CisrCQlFVlBfZGVzX2VkZTM7CisrCQlFVlBfZGVzX2VkZTNfY2JjOworKwkJRVZQX2Rlc19lZGUzX2NmYjY0OworKwkJRVZQX2Rlc19lZGUzX29mYjsKKysJCUVWUF9kZXNfZWRlX2NiYzsKKysJCUVWUF9kZXNfZWRlX2NmYjY0OworKwkJRVZQX2Rlc19lZGVfb2ZiOworKwkJRVZQX2Rlc19vZmI7CisrCQlFVlBfZGVzeF9jYmM7CisrCQlFVlBfZHNzOworKwkJRVZQX2RzczE7CisrCQlFVlBfZW5jX251bGw7CisrCQlFVlBfZ2V0X2NpcGhlcmJ5bmFtZTsKKysJCUVWUF9nZXRfZGlnZXN0YnluYW1lOworKwkJRVZQX2dldF9wd19wcm9tcHQ7CisrCQlFVlBfaWRlYV9jYmM7CisrCQlFVlBfaWRlYV9jZmI2NDsKKysJCUVWUF9pZGVhX2VjYjsKKysJCUVWUF9pZGVhX29mYjsKKysJCUVWUF9tZDI7CisrCQlFVlBfbWQ1OworKwkJRVZQX21kX251bGw7CisrCQlFVlBfcmMyX2NiYzsKKysJCUVWUF9yYzJfY2ZiNjQ7CisrCQlFVlBfcmMyX2VjYjsKKysJCUVWUF9yYzJfb2ZiOworKwkJRVZQX3JjNDsKKysJCUVWUF9yZWFkX3B3X3N0cmluZzsKKysJCUVWUF9zZXRfcHdfcHJvbXB0OworKwkJRVZQX3NoYTsKKysJCUVWUF9zaGExOworKwkJTUQyOworKwkJTUQyX0ZpbmFsOworKwkJTUQyX0luaXQ7CisrCQlNRDJfVXBkYXRlOworKwkJTUQyX29wdGlvbnM7CisrCQlNRDU7CisrCQlNRDVfRmluYWw7CisrCQlNRDVfSW5pdDsKKysJCU1ENV9VcGRhdGU7CisrCQlNREMyOworKwkJTURDMl9GaW5hbDsKKysJCU1EQzJfSW5pdDsKKysJCU1EQzJfVXBkYXRlOworKwkJTkVUU0NBUEVfU1BLQUNfZnJlZTsKKysJCU5FVFNDQVBFX1NQS0FDX25ldzsKKysJCU5FVFNDQVBFX1NQS0lfZnJlZTsKKysJCU5FVFNDQVBFX1NQS0lfbmV3OworKwkJTkVUU0NBUEVfU1BLSV9zaWduOworKwkJTkVUU0NBUEVfU1BLSV92ZXJpZnk7CisrCQlPQkpfYWRkX29iamVjdDsKKysJCU9CSl9ic2VhcmNoOworKwkJT0JKX2NsZWFudXA7CisrCQlPQkpfY21wOworKwkJT0JKX2NyZWF0ZTsKKysJCU9CSl9kdXA7CisrCQlPQkpfbG4ybmlkOworKwkJT0JKX25ld19uaWQ7CisrCQlPQkpfbmlkMmxuOworKwkJT0JKX25pZDJvYmo7CisrCQlPQkpfbmlkMnNuOworKwkJT0JKX29iajJuaWQ7CisrCQlPQkpfc24ybmlkOworKwkJT0JKX3R4dDJuaWQ7CisrCQlQRU1fQVNOMV9yZWFkOworKwkJUEVNX0FTTjFfcmVhZF9iaW87CisrCQlQRU1fQVNOMV93cml0ZTsKKysJCVBFTV9BU04xX3dyaXRlX2JpbzsKKysJCVBFTV9TZWFsRmluYWw7CisrCQlQRU1fU2VhbEluaXQ7CisrCQlQRU1fU2VhbFVwZGF0ZTsKKysJCVBFTV9TaWduRmluYWw7CisrCQlQRU1fU2lnbkluaXQ7CisrCQlQRU1fU2lnblVwZGF0ZTsKKysJCVBFTV9YNTA5X0lORk9fcmVhZDsKKysJCVBFTV9YNTA5X0lORk9fcmVhZF9iaW87CisrCQlQRU1fWDUwOV9JTkZPX3dyaXRlX2JpbzsKKysJCVBFTV9kZWtfaW5mbzsKKysJCVBFTV9kb19oZWFkZXI7CisrCQlQRU1fZ2V0X0VWUF9DSVBIRVJfSU5GTzsKKysJCVBFTV9wcm9jX3R5cGU7CisrCQlQRU1fcmVhZDsKKysJCVBFTV9yZWFkX0RIcGFyYW1zOworKwkJUEVNX3JlYWRfRFNBUHJpdmF0ZUtleTsKKysJCVBFTV9yZWFkX0RTQXBhcmFtczsKKysJCVBFTV9yZWFkX1BLQ1M3OworKwkJUEVNX3JlYWRfUHJpdmF0ZUtleTsKKysJCVBFTV9yZWFkX1JTQVByaXZhdGVLZXk7CisrCQlQRU1fcmVhZF9YNTA5OworKwkJUEVNX3JlYWRfWDUwOV9DUkw7CisrCQlQRU1fcmVhZF9YNTA5X1JFUTsKKysJCVBFTV9yZWFkX2JpbzsKKysJCVBFTV9yZWFkX2Jpb19ESHBhcmFtczsKKysJCVBFTV9yZWFkX2Jpb19EU0FQcml2YXRlS2V5OworKwkJUEVNX3JlYWRfYmlvX0RTQXBhcmFtczsKKysJCVBFTV9yZWFkX2Jpb19QS0NTNzsKKysJCVBFTV9yZWFkX2Jpb19Qcml2YXRlS2V5OworKwkJUEVNX3JlYWRfYmlvX1JTQVByaXZhdGVLZXk7CisrCQlQRU1fcmVhZF9iaW9fWDUwOTsKKysJCVBFTV9yZWFkX2Jpb19YNTA5X0NSTDsKKysJCVBFTV9yZWFkX2Jpb19YNTA5X1JFUTsKKysJCVBFTV93cml0ZTsKKysJCVBFTV93cml0ZV9ESHBhcmFtczsKKysJCVBFTV93cml0ZV9EU0FQcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX0RTQXBhcmFtczsKKysJCVBFTV93cml0ZV9QS0NTNzsKKysJCVBFTV93cml0ZV9Qcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX1JTQVByaXZhdGVLZXk7CisrCQlQRU1fd3JpdGVfWDUwOTsKKysJCVBFTV93cml0ZV9YNTA5X0NSTDsKKysJCVBFTV93cml0ZV9YNTA5X1JFUTsKKysJCVBFTV93cml0ZV9iaW87CisrCQlQRU1fd3JpdGVfYmlvX0RIcGFyYW1zOworKwkJUEVNX3dyaXRlX2Jpb19EU0FQcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX2Jpb19EU0FwYXJhbXM7CisrCQlQRU1fd3JpdGVfYmlvX1BLQ1M3OworKwkJUEVNX3dyaXRlX2Jpb19Qcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX2Jpb19SU0FQcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX2Jpb19YNTA5OworKwkJUEVNX3dyaXRlX2Jpb19YNTA5X0NSTDsKKysJCVBFTV93cml0ZV9iaW9fWDUwOV9SRVE7CisrCQlQS0NTN19ESUdFU1RfZnJlZTsKKysJCVBLQ1M3X0RJR0VTVF9uZXc7CisrCQlQS0NTN19FTkNSWVBUX2ZyZWU7CisrCQlQS0NTN19FTkNSWVBUX25ldzsKKysJCVBLQ1M3X0VOQ19DT05URU5UX2ZyZWU7CisrCQlQS0NTN19FTkNfQ09OVEVOVF9uZXc7CisrCQlQS0NTN19FTlZFTE9QRV9mcmVlOworKwkJUEtDUzdfRU5WRUxPUEVfbmV3OworKwkJUEtDUzdfSVNTVUVSX0FORF9TRVJJQUxfZGlnZXN0OworKwkJUEtDUzdfSVNTVUVSX0FORF9TRVJJQUxfZnJlZTsKKysJCVBLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMX25ldzsKKysJCVBLQ1M3X1JFQ0lQX0lORk9fZnJlZTsKKysJCVBLQ1M3X1JFQ0lQX0lORk9fbmV3OworKwkJUEtDUzdfU0lHTkVEX2ZyZWU7CisrCQlQS0NTN19TSUdORURfbmV3OworKwkJUEtDUzdfU0lHTkVSX0lORk9fZnJlZTsKKysJCVBLQ1M3X1NJR05FUl9JTkZPX25ldzsKKysJCVBLQ1M3X1NJR05fRU5WRUxPUEVfZnJlZTsKKysJCVBLQ1M3X1NJR05fRU5WRUxPUEVfbmV3OworKwkJUEtDUzdfZHVwOworKwkJUEtDUzdfZnJlZTsKKysJCVBLQ1M3X25ldzsKKysJCVBST1hZX0VOVFJZX2FkZF9ub3Byb3h5OworKwkJUFJPWFlfRU5UUllfY2xlYXJfbm9wcm94eTsKKysJCVBST1hZX0VOVFJZX2ZyZWU7CisrCQlQUk9YWV9FTlRSWV9nZXRfbm9wcm94eTsKKysJCVBST1hZX0VOVFJZX25ldzsKKysJCVBST1hZX0VOVFJZX3NldF9zZXJ2ZXI7CisrCQlQUk9YWV9hZGRfbm9wcm94eTsKKysJCVBST1hZX2FkZF9zZXJ2ZXI7CisrCQlQUk9YWV9jaGVja19ieV9ob3N0OworKwkJUFJPWFlfY2hlY2tfdXJsOworKwkJUFJPWFlfY2xlYXJfbm9wcm94eTsKKysJCVBST1hZX2ZyZWU7CisrCQlQUk9YWV9nZXRfbm9wcm94eTsKKysJCVBST1hZX2dldF9wcm94aWVzOworKwkJUFJPWFlfZ2V0X3Byb3h5X2VudHJ5OworKwkJUFJPWFlfbG9hZF9jb25mOworKwkJUFJPWFlfbmV3OworKwkJUFJPWFlfcHJpbnQ7CisrCQlSQU5EX2J5dGVzOworKwkJUkFORF9jbGVhbnVwOworKwkJUkFORF9maWxlX25hbWU7CisrCQlSQU5EX2xvYWRfZmlsZTsKKysJCVJBTkRfc2NyZWVuOworKwkJUkFORF9zZWVkOworKwkJUkFORF93cml0ZV9maWxlOworKwkJUkMyX2NiY19lbmNyeXB0OworKwkJUkMyX2NmYjY0X2VuY3J5cHQ7CisrCQlSQzJfZWNiX2VuY3J5cHQ7CisrCQlSQzJfZW5jcnlwdDsKKysJCVJDMl9vZmI2NF9lbmNyeXB0OworKwkJUkMyX3NldF9rZXk7CisrCQlSQzQ7CisrCQlSQzRfb3B0aW9uczsKKysJCVJDNF9zZXRfa2V5OworKwkJUlNBUHJpdmF0ZUtleV9hc24xX21ldGg7CisrCQlSU0FQcml2YXRlS2V5X2R1cDsKKysJCVJTQVB1YmxpY0tleV9kdXA7CisrCQlSU0FfUEtDUzFfU1NMZWF5OworKwkJUlNBX2ZyZWU7CisrCQlSU0FfZ2VuZXJhdGVfa2V5OworKwkJUlNBX25ldzsKKysJCVJTQV9uZXdfbWV0aG9kOworKwkJUlNBX3ByaW50OworKwkJUlNBX3ByaW50X2ZwOworKwkJUlNBX3ByaXZhdGVfZGVjcnlwdDsKKysJCVJTQV9wcml2YXRlX2VuY3J5cHQ7CisrCQlSU0FfcHVibGljX2RlY3J5cHQ7CisrCQlSU0FfcHVibGljX2VuY3J5cHQ7CisrCQlSU0Ffc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJUlNBX3NpZ247CisrCQlSU0Ffc2lnbl9BU04xX09DVEVUX1NUUklORzsKKysJCVJTQV9zaXplOworKwkJUlNBX3ZlcmlmeTsKKysJCVJTQV92ZXJpZnlfQVNOMV9PQ1RFVF9TVFJJTkc7CisrCQlTSEE7CisrCQlTSEExOworKwkJU0hBMV9GaW5hbDsKKysJCVNIQTFfSW5pdDsKKysJCVNIQTFfVXBkYXRlOworKwkJU0hBX0ZpbmFsOworKwkJU0hBX0luaXQ7CisrCQlTSEFfVXBkYXRlOworKwkJT3BlblNTTF9hZGRfYWxsX2FsZ29yaXRobXM7CisrCQlPcGVuU1NMX2FkZF9hbGxfY2lwaGVyczsKKysJCU9wZW5TU0xfYWRkX2FsbF9kaWdlc3RzOworKwkJVFhUX0RCX2NyZWF0ZV9pbmRleDsKKysJCVRYVF9EQl9mcmVlOworKwkJVFhUX0RCX2dldF9ieV9pbmRleDsKKysJCVRYVF9EQl9pbnNlcnQ7CisrCQlUWFRfREJfcmVhZDsKKysJCVRYVF9EQl93cml0ZTsKKysJCVg1MDlfQUxHT1JfZnJlZTsKKysJCVg1MDlfQUxHT1JfbmV3OworKwkJWDUwOV9BVFRSSUJVVEVfZnJlZTsKKysJCVg1MDlfQVRUUklCVVRFX25ldzsKKysJCVg1MDlfQ0lORl9mcmVlOworKwkJWDUwOV9DSU5GX25ldzsKKysJCVg1MDlfQ1JMX0lORk9fZnJlZTsKKysJCVg1MDlfQ1JMX0lORk9fbmV3OworKwkJWDUwOV9DUkxfYWRkX2V4dDsKKysJCVg1MDlfQ1JMX2NtcDsKKysJCVg1MDlfQ1JMX2RlbGV0ZV9leHQ7CisrCQlYNTA5X0NSTF9kdXA7CisrCQlYNTA5X0NSTF9mcmVlOworKwkJWDUwOV9DUkxfZ2V0X2V4dDsKKysJCVg1MDlfQ1JMX2dldF9leHRfYnlfTklEOworKwkJWDUwOV9DUkxfZ2V0X2V4dF9ieV9PQko7CisrCQlYNTA5X0NSTF9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJWDUwOV9DUkxfZ2V0X2V4dF9jb3VudDsKKysJCVg1MDlfQ1JMX25ldzsKKysJCVg1MDlfQ1JMX3NpZ247CisrCQlYNTA5X0NSTF92ZXJpZnk7CisrCQlYNTA5X0VYVEVOU0lPTl9jcmVhdGVfYnlfTklEOworKwkJWDUwOV9FWFRFTlNJT05fY3JlYXRlX2J5X09CSjsKKysJCVg1MDlfRVhURU5TSU9OX2R1cDsKKysJCVg1MDlfRVhURU5TSU9OX2ZyZWU7CisrCQlYNTA5X0VYVEVOU0lPTl9nZXRfY3JpdGljYWw7CisrCQlYNTA5X0VYVEVOU0lPTl9nZXRfZGF0YTsKKysJCVg1MDlfRVhURU5TSU9OX2dldF9vYmplY3Q7CisrCQlYNTA5X0VYVEVOU0lPTl9uZXc7CisrCQlYNTA5X0VYVEVOU0lPTl9zZXRfY3JpdGljYWw7CisrCQlYNTA5X0VYVEVOU0lPTl9zZXRfZGF0YTsKKysJCVg1MDlfRVhURU5TSU9OX3NldF9vYmplY3Q7CisrCQlYNTA5X0lORk9fZnJlZTsKKysJCVg1MDlfSU5GT19uZXc7CisrCQlYNTA5X0xPT0tVUF9ieV9hbGlhczsKKysJCVg1MDlfTE9PS1VQX2J5X2ZpbmdlcnByaW50OworKwkJWDUwOV9MT09LVVBfYnlfaXNzdWVyX3NlcmlhbDsKKysJCVg1MDlfTE9PS1VQX2J5X3N1YmplY3Q7CisrCQlYNTA5X0xPT0tVUF9jdHJsOworKwkJWDUwOV9MT09LVVBfZmlsZTsKKysJCVg1MDlfTE9PS1VQX2ZyZWU7CisrCQlYNTA5X0xPT0tVUF9oYXNoX2RpcjsKKysJCVg1MDlfTE9PS1VQX2luaXQ7CisrCQlYNTA5X0xPT0tVUF9uZXc7CisrCQlYNTA5X0xPT0tVUF9zaHV0ZG93bjsKKysJCVg1MDlfTkFNRV9FTlRSWV9jcmVhdGVfYnlfTklEOworKwkJWDUwOV9OQU1FX0VOVFJZX2NyZWF0ZV9ieV9PQko7CisrCQlYNTA5X05BTUVfRU5UUllfZHVwOworKwkJWDUwOV9OQU1FX0VOVFJZX2ZyZWU7CisrCQlYNTA5X05BTUVfRU5UUllfZ2V0X2RhdGE7CisrCQlYNTA5X05BTUVfRU5UUllfZ2V0X29iamVjdDsKKysJCVg1MDlfTkFNRV9FTlRSWV9uZXc7CisrCQlYNTA5X05BTUVfRU5UUllfc2V0X2RhdGE7CisrCQlYNTA5X05BTUVfRU5UUllfc2V0X29iamVjdDsKKysJCVg1MDlfTkFNRV9hZGRfZW50cnk7CisrCQlYNTA5X05BTUVfY21wOworKwkJWDUwOV9OQU1FX2RlbGV0ZV9lbnRyeTsKKysJCVg1MDlfTkFNRV9kaWdlc3Q7CisrCQlYNTA5X05BTUVfZHVwOworKwkJWDUwOV9OQU1FX2VudHJ5X2NvdW50OworKwkJWDUwOV9OQU1FX2ZyZWU7CisrCQlYNTA5X05BTUVfZ2V0X2VudHJ5OworKwkJWDUwOV9OQU1FX2dldF9pbmRleF9ieV9OSUQ7CisrCQlYNTA5X05BTUVfZ2V0X2luZGV4X2J5X09CSjsKKysJCVg1MDlfTkFNRV9nZXRfdGV4dF9ieV9OSUQ7CisrCQlYNTA5X05BTUVfZ2V0X3RleHRfYnlfT0JKOworKwkJWDUwOV9OQU1FX2hhc2g7CisrCQlYNTA5X05BTUVfbmV3OworKwkJWDUwOV9OQU1FX29uZWxpbmU7CisrCQlYNTA5X05BTUVfcHJpbnQ7CisrCQlYNTA5X05BTUVfc2V0OworKwkJWDUwOV9PQkpFQ1RfZnJlZV9jb250ZW50czsKKysJCVg1MDlfT0JKRUNUX3JldHJpZXZlX2J5X3N1YmplY3Q7CisrCQlYNTA5X09CSkVDVF91cF9yZWZfY291bnQ7CisrCQlYNTA5X1BLRVlfZnJlZTsKKysJCVg1MDlfUEtFWV9uZXc7CisrCQlYNTA5X1BVQktFWV9mcmVlOworKwkJWDUwOV9QVUJLRVlfZ2V0OworKwkJWDUwOV9QVUJLRVlfbmV3OworKwkJWDUwOV9QVUJLRVlfc2V0OworKwkJWDUwOV9SRVFfSU5GT19mcmVlOworKwkJWDUwOV9SRVFfSU5GT19uZXc7CisrCQlYNTA5X1JFUV9kdXA7CisrCQlYNTA5X1JFUV9mcmVlOworKwkJWDUwOV9SRVFfZ2V0X3B1YmtleTsKKysJCVg1MDlfUkVRX25ldzsKKysJCVg1MDlfUkVRX3ByaW50OworKwkJWDUwOV9SRVFfcHJpbnRfZnA7CisrCQlYNTA5X1JFUV9zZXRfcHVia2V5OworKwkJWDUwOV9SRVFfc2V0X3N1YmplY3RfbmFtZTsKKysJCVg1MDlfUkVRX3NldF92ZXJzaW9uOworKwkJWDUwOV9SRVFfc2lnbjsKKysJCVg1MDlfUkVRX3RvX1g1MDk7CisrCQlYNTA5X1JFUV92ZXJpZnk7CisrCQlYNTA5X1JFVk9LRURfYWRkX2V4dDsKKysJCVg1MDlfUkVWT0tFRF9kZWxldGVfZXh0OworKwkJWDUwOV9SRVZPS0VEX2ZyZWU7CisrCQlYNTA5X1JFVk9LRURfZ2V0X2V4dDsKKysJCVg1MDlfUkVWT0tFRF9nZXRfZXh0X2J5X05JRDsKKysJCVg1MDlfUkVWT0tFRF9nZXRfZXh0X2J5X09CSjsKKysJCVg1MDlfUkVWT0tFRF9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJWDUwOV9SRVZPS0VEX2dldF9leHRfYnlfY3JpdGljOworKwkJWDUwOV9SRVZPS0VEX2dldF9leHRfY291bnQ7CisrCQlYNTA5X1JFVk9LRURfbmV3OworKwkJWDUwOV9TSUdfZnJlZTsKKysJCVg1MDlfU0lHX25ldzsKKysJCVg1MDlfU1RPUkVfQ1RYX2NsZWFudXA7CisrCQlYNTA5X1NUT1JFX0NUWF9pbml0OworKwkJWDUwOV9TVE9SRV9hZGRfY2VydDsKKysJCVg1MDlfU1RPUkVfYWRkX2xvb2t1cDsKKysJCVg1MDlfU1RPUkVfZnJlZTsKKysJCVg1MDlfU1RPUkVfZ2V0X2J5X3N1YmplY3Q7CisrCQlYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25zOworKwkJWDUwOV9TVE9SRV9uZXc7CisrCQlYNTA5X1NUT1JFX3NldF9kZWZhdWx0X3BhdGhzOworKwkJWDUwOV9WQUxfZnJlZTsKKysJCVg1MDlfVkFMX25ldzsKKysJCVg1MDlfYWRkX2V4dDsKKysJCVg1MDlfYXNuMV9tZXRoOworKwkJWDUwOV9jZXJ0aWZpY2F0ZV90eXBlOworKwkJWDUwOV9jaGVja19wcml2YXRlX2tleTsKKysJCVg1MDlfY21wX2N1cnJlbnRfdGltZTsKKysJCVg1MDlfZGVsZXRlX2V4dDsKKysJCVg1MDlfZGlnZXN0OworKwkJWDUwOV9kdXA7CisrCQlYNTA5X2ZyZWU7CisrCQlYNTA5X2dldF9kZWZhdWx0X2NlcnRfYXJlYTsKKysJCVg1MDlfZ2V0X2RlZmF1bHRfY2VydF9kaXI7CisrCQlYNTA5X2dldF9kZWZhdWx0X2NlcnRfZGlyX2VudjsKKysJCVg1MDlfZ2V0X2RlZmF1bHRfY2VydF9maWxlOworKwkJWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2ZpbGVfZW52OworKwkJWDUwOV9nZXRfZGVmYXVsdF9wcml2YXRlX2RpcjsKKysJCVg1MDlfZ2V0X2V4dDsKKysJCVg1MDlfZ2V0X2V4dF9ieV9OSUQ7CisrCQlYNTA5X2dldF9leHRfYnlfT0JKOworKwkJWDUwOV9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJWDUwOV9nZXRfZXh0X2NvdW50OworKwkJWDUwOV9nZXRfaXNzdWVyX25hbWU7CisrCQlYNTA5X2dldF9wdWJrZXk7CisrCQlYNTA5X2dldF9wdWJrZXlfcGFyYW1ldGVyczsKKysJCVg1MDlfZ2V0X3NlcmlhbE51bWJlcjsKKysJCVg1MDlfZ2V0X3N1YmplY3RfbmFtZTsKKysJCVg1MDlfZ210aW1lX2FkajsKKysJCVg1MDlfaXNzdWVyX2FuZF9zZXJpYWxfY21wOworKwkJWDUwOV9pc3N1ZXJfYW5kX3NlcmlhbF9oYXNoOworKwkJWDUwOV9pc3N1ZXJfbmFtZV9jbXA7CisrCQlYNTA5X2lzc3Vlcl9uYW1lX2hhc2g7CisrCQlYNTA5X2xvYWRfY2VydF9maWxlOworKwkJWDUwOV9uZXc7CisrCQlYNTA5X3ByaW50OworKwkJWDUwOV9wcmludF9mcDsKKysJCVg1MDlfc2V0X2lzc3Vlcl9uYW1lOworKwkJWDUwOV9zZXRfbm90QWZ0ZXI7CisrCQlYNTA5X3NldF9ub3RCZWZvcmU7CisrCQlYNTA5X3NldF9wdWJrZXk7CisrCQlYNTA5X3NldF9zZXJpYWxOdW1iZXI7CisrCQlYNTA5X3NldF9zdWJqZWN0X25hbWU7CisrCQlYNTA5X3NldF92ZXJzaW9uOworKwkJWDUwOV9zaWduOworKwkJWDUwOV9zdWJqZWN0X25hbWVfY21wOworKwkJWDUwOV9zdWJqZWN0X25hbWVfaGFzaDsKKysJCVg1MDlfdG9fWDUwOV9SRVE7CisrCQlYNTA5X3ZlcmlmeTsKKysJCVg1MDlfdmVyaWZ5X2NlcnQ7CisrCQlYNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZzsKKysJCVg1MDl2M19hZGRfZXh0OworKwkJWDUwOXYzX2FkZF9leHRlbnNpb247CisrCQlYNTA5djNfYWRkX25ldHNjYXBlX2V4dGVuc2lvbnM7CisrCQlYNTA5djNfYWRkX3N0YW5kYXJkX2V4dGVuc2lvbnM7CisrCQlYNTA5djNfY2xlYW51cF9leHRlbnNpb25zOworKwkJWDUwOXYzX2RhdGFfdHlwZV9ieV9OSUQ7CisrCQlYNTA5djNfZGF0YV90eXBlX2J5X09CSjsKKysJCVg1MDl2M19kZWxldGVfZXh0OworKwkJWDUwOXYzX2dldF9leHQ7CisrCQlYNTA5djNfZ2V0X2V4dF9ieV9OSUQ7CisrCQlYNTA5djNfZ2V0X2V4dF9ieV9PQko7CisrCQlYNTA5djNfZ2V0X2V4dF9ieV9jcml0aWNhbDsKKysJCVg1MDl2M19nZXRfZXh0X2NvdW50OworKwkJWDUwOXYzX3BhY2tfc3RyaW5nOworKwkJWDUwOXYzX3BhY2tfdHlwZV9ieV9OSUQ7CisrCQlYNTA5djNfcGFja190eXBlX2J5X09CSjsKKysJCVg1MDl2M191bnBhY2tfc3RyaW5nOworKwkJX2Rlc19jcnlwdDsKKysJCWEyZF9BU04xX09CSkVDVDsKKysJCWEyaV9BU04xX0lOVEVHRVI7CisrCQlhMmlfQVNOMV9TVFJJTkc7CisrCQlhc24xX0ZpbmlzaDsKKysJCWFzbjFfR2V0U2VxdWVuY2U7CisrCQlibl9kaXZfd29yZHM7CisrCQlibl9leHBhbmQyOworKwkJYm5fbXVsX2FkZF93b3JkczsKKysJCWJuX211bF93b3JkczsKKysJCUJOX3VhZGQ7CisrCQlCTl91c3ViOworKwkJYm5fc3FyX3dvcmRzOworKwkJX29zc2xfb2xkX2NyeXB0OworKwkJZDJpX0FTTjFfQklUX1NUUklORzsKKysJCWQyaV9BU04xX0JPT0xFQU47CisrCQlkMmlfQVNOMV9IRUFERVI7CisrCQlkMmlfQVNOMV9JQTVTVFJJTkc7CisrCQlkMmlfQVNOMV9JTlRFR0VSOworKwkJZDJpX0FTTjFfT0JKRUNUOworKwkJZDJpX0FTTjFfT0NURVRfU1RSSU5HOworKwkJZDJpX0FTTjFfUFJJTlRBQkxFOworKwkJZDJpX0FTTjFfUFJJTlRBQkxFU1RSSU5HOworKwkJZDJpX0FTTjFfU0VUOworKwkJZDJpX0FTTjFfVDYxU1RSSU5HOworKwkJZDJpX0FTTjFfVFlQRTsKKysJCWQyaV9BU04xX1VUQ1RJTUU7CisrCQlkMmlfQVNOMV9ieXRlczsKKysJCWQyaV9BU04xX3R5cGVfYnl0ZXM7CisrCQlkMmlfREhwYXJhbXM7CisrCQlkMmlfRFNBUHJpdmF0ZUtleTsKKysJCWQyaV9EU0FQcml2YXRlS2V5X2JpbzsKKysJCWQyaV9EU0FQcml2YXRlS2V5X2ZwOworKwkJZDJpX0RTQVB1YmxpY0tleTsKKysJCWQyaV9EU0FwYXJhbXM7CisrCQlkMmlfTkVUU0NBUEVfU1BLQUM7CisrCQlkMmlfTkVUU0NBUEVfU1BLSTsKKysJCWQyaV9OZXRzY2FwZV9SU0E7CisrCQlkMmlfUEtDUzc7CisrCQlkMmlfUEtDUzdfRElHRVNUOworKwkJZDJpX1BLQ1M3X0VOQ1JZUFQ7CisrCQlkMmlfUEtDUzdfRU5DX0NPTlRFTlQ7CisrCQlkMmlfUEtDUzdfRU5WRUxPUEU7CisrCQlkMmlfUEtDUzdfSVNTVUVSX0FORF9TRVJJQUw7CisrCQlkMmlfUEtDUzdfUkVDSVBfSU5GTzsKKysJCWQyaV9QS0NTN19TSUdORUQ7CisrCQlkMmlfUEtDUzdfU0lHTkVSX0lORk87CisrCQlkMmlfUEtDUzdfU0lHTl9FTlZFTE9QRTsKKysJCWQyaV9QS0NTN19iaW87CisrCQlkMmlfUEtDUzdfZnA7CisrCQlkMmlfUHJpdmF0ZUtleTsKKysJCWQyaV9QdWJsaWNLZXk7CisrCQlkMmlfUlNBUHJpdmF0ZUtleTsKKysJCWQyaV9SU0FQcml2YXRlS2V5X2JpbzsKKysJCWQyaV9SU0FQcml2YXRlS2V5X2ZwOworKwkJZDJpX1JTQVB1YmxpY0tleTsKKysJCWQyaV9YNTA5OworKwkJZDJpX1g1MDlfQUxHT1I7CisrCQlkMmlfWDUwOV9BVFRSSUJVVEU7CisrCQlkMmlfWDUwOV9DSU5GOworKwkJZDJpX1g1MDlfQ1JMOworKwkJZDJpX1g1MDlfQ1JMX0lORk87CisrCQlkMmlfWDUwOV9DUkxfYmlvOworKwkJZDJpX1g1MDlfQ1JMX2ZwOworKwkJZDJpX1g1MDlfRVhURU5TSU9OOworKwkJZDJpX1g1MDlfTkFNRTsKKysJCWQyaV9YNTA5X05BTUVfRU5UUlk7CisrCQlkMmlfWDUwOV9QS0VZOworKwkJZDJpX1g1MDlfUFVCS0VZOworKwkJZDJpX1g1MDlfUkVROworKwkJZDJpX1g1MDlfUkVRX0lORk87CisrCQlkMmlfWDUwOV9SRVFfYmlvOworKwkJZDJpX1g1MDlfUkVRX2ZwOworKwkJZDJpX1g1MDlfUkVWT0tFRDsKKysJCWQyaV9YNTA5X1NJRzsKKysJCWQyaV9YNTA5X1ZBTDsKKysJCWQyaV9YNTA5X2JpbzsKKysJCWQyaV9YNTA5X2ZwOworKwkJREVTX2NiY19ja3N1bTsKKysJCURFU19jYmNfZW5jcnlwdDsKKysJCURFU19jYmxvY2tfcHJpbnRfZmlsZTsKKysJCURFU19jZmI2NF9lbmNyeXB0OworKwkJREVTX2NmYl9lbmNyeXB0OworKwkJREVTX2RlY3J5cHQzOworKwkJREVTX2VjYjNfZW5jcnlwdDsKKysJCURFU19lY2JfZW5jcnlwdDsKKysJCURFU19lZGUzX2NiY19lbmNyeXB0OworKwkJREVTX2VkZTNfY2ZiNjRfZW5jcnlwdDsKKysJCURFU19lZGUzX29mYjY0X2VuY3J5cHQ7CisrCQlERVNfZW5jX3JlYWQ7CisrCQlERVNfZW5jX3dyaXRlOworKwkJREVTX2VuY3J5cHQxOworKwkJREVTX2VuY3J5cHQyOworKwkJREVTX2VuY3J5cHQzOworKwkJREVTX2ZjcnlwdDsKKysJCURFU19pc193ZWFrX2tleTsKKysJCURFU19rZXlfc2NoZWQ7CisrCQlERVNfbmNiY19lbmNyeXB0OworKwkJREVTX29mYjY0X2VuY3J5cHQ7CisrCQlERVNfb2ZiX2VuY3J5cHQ7CisrCQlERVNfb3B0aW9uczsKKysJCURFU19wY2JjX2VuY3J5cHQ7CisrCQlERVNfcXVhZF9ja3N1bTsKKysJCURFU19yYW5kb21fa2V5OworKwkJX29zc2xfb2xkX2Rlc19yYW5kb21fc2VlZDsKKysJCV9vc3NsX29sZF9kZXNfcmVhZF8ycGFzc3dvcmRzOworKwkJX29zc2xfb2xkX2Rlc19yZWFkX3Bhc3N3b3JkOworKwkJX29zc2xfb2xkX2Rlc19yZWFkX3B3OworKwkJX29zc2xfb2xkX2Rlc19yZWFkX3B3X3N0cmluZzsKKysJCURFU19zZXRfa2V5OworKwkJREVTX3NldF9vZGRfcGFyaXR5OworKwkJREVTX3N0cmluZ190b18ya2V5czsKKysJCURFU19zdHJpbmdfdG9fa2V5OworKwkJREVTX3hjYmNfZW5jcnlwdDsKKysJCURFU194d2hpdGVfaW4yb3V0OworKwkJZmNyeXB0X2JvZHk7CisrCQlpMmFfQVNOMV9JTlRFR0VSOworKwkJaTJhX0FTTjFfT0JKRUNUOworKwkJaTJhX0FTTjFfU1RSSU5HOworKwkJaTJkX0FTTjFfQklUX1NUUklORzsKKysJCWkyZF9BU04xX0JPT0xFQU47CisrCQlpMmRfQVNOMV9IRUFERVI7CisrCQlpMmRfQVNOMV9JQTVTVFJJTkc7CisrCQlpMmRfQVNOMV9JTlRFR0VSOworKwkJaTJkX0FTTjFfT0JKRUNUOworKwkJaTJkX0FTTjFfT0NURVRfU1RSSU5HOworKwkJaTJkX0FTTjFfUFJJTlRBQkxFOworKwkJaTJkX0FTTjFfU0VUOworKwkJaTJkX0FTTjFfVFlQRTsKKysJCWkyZF9BU04xX1VUQ1RJTUU7CisrCQlpMmRfQVNOMV9ieXRlczsKKysJCWkyZF9ESHBhcmFtczsKKysJCWkyZF9EU0FQcml2YXRlS2V5OworKwkJaTJkX0RTQVByaXZhdGVLZXlfYmlvOworKwkJaTJkX0RTQVByaXZhdGVLZXlfZnA7CisrCQlpMmRfRFNBUHVibGljS2V5OworKwkJaTJkX0RTQXBhcmFtczsKKysJCWkyZF9ORVRTQ0FQRV9TUEtBQzsKKysJCWkyZF9ORVRTQ0FQRV9TUEtJOworKwkJaTJkX05ldHNjYXBlX1JTQTsKKysJCWkyZF9QS0NTNzsKKysJCWkyZF9QS0NTN19ESUdFU1Q7CisrCQlpMmRfUEtDUzdfRU5DUllQVDsKKysJCWkyZF9QS0NTN19FTkNfQ09OVEVOVDsKKysJCWkyZF9QS0NTN19FTlZFTE9QRTsKKysJCWkyZF9QS0NTN19JU1NVRVJfQU5EX1NFUklBTDsKKysJCWkyZF9QS0NTN19SRUNJUF9JTkZPOworKwkJaTJkX1BLQ1M3X1NJR05FRDsKKysJCWkyZF9QS0NTN19TSUdORVJfSU5GTzsKKysJCWkyZF9QS0NTN19TSUdOX0VOVkVMT1BFOworKwkJaTJkX1BLQ1M3X2JpbzsKKysJCWkyZF9QS0NTN19mcDsKKysJCWkyZF9Qcml2YXRlS2V5OworKwkJaTJkX1B1YmxpY0tleTsKKysJCWkyZF9SU0FQcml2YXRlS2V5OworKwkJaTJkX1JTQVByaXZhdGVLZXlfYmlvOworKwkJaTJkX1JTQVByaXZhdGVLZXlfZnA7CisrCQlpMmRfUlNBUHVibGljS2V5OworKwkJaTJkX1g1MDk7CisrCQlpMmRfWDUwOV9BTEdPUjsKKysJCWkyZF9YNTA5X0FUVFJJQlVURTsKKysJCWkyZF9YNTA5X0NJTkY7CisrCQlpMmRfWDUwOV9DUkw7CisrCQlpMmRfWDUwOV9DUkxfSU5GTzsKKysJCWkyZF9YNTA5X0NSTF9iaW87CisrCQlpMmRfWDUwOV9DUkxfZnA7CisrCQlpMmRfWDUwOV9FWFRFTlNJT047CisrCQlpMmRfWDUwOV9OQU1FOworKwkJaTJkX1g1MDlfTkFNRV9FTlRSWTsKKysJCWkyZF9YNTA5X1BLRVk7CisrCQlpMmRfWDUwOV9QVUJLRVk7CisrCQlpMmRfWDUwOV9SRVE7CisrCQlpMmRfWDUwOV9SRVFfSU5GTzsKKysJCWkyZF9YNTA5X1JFUV9iaW87CisrCQlpMmRfWDUwOV9SRVFfZnA7CisrCQlpMmRfWDUwOV9SRVZPS0VEOworKwkJaTJkX1g1MDlfU0lHOworKwkJaTJkX1g1MDlfVkFMOworKwkJaTJkX1g1MDlfYmlvOworKwkJaTJkX1g1MDlfZnA7CisrCQlpZGVhX2NiY19lbmNyeXB0OworKwkJaWRlYV9jZmI2NF9lbmNyeXB0OworKwkJaWRlYV9lY2JfZW5jcnlwdDsKKysJCWlkZWFfZW5jcnlwdDsKKysJCWlkZWFfb2ZiNjRfZW5jcnlwdDsKKysJCWlkZWFfb3B0aW9uczsKKysJCWlkZWFfc2V0X2RlY3J5cHRfa2V5OworKwkJaWRlYV9zZXRfZW5jcnlwdF9rZXk7CisrCQlsaF9kZWxldGU7CisrCQlsaF9kb2FsbDsKKysJCWxoX2RvYWxsX2FyZzsKKysJCWxoX2ZyZWU7CisrCQlsaF9pbnNlcnQ7CisrCQlsaF9uZXc7CisrCQlsaF9ub2RlX3N0YXRzOworKwkJbGhfbm9kZV9zdGF0c19iaW87CisrCQlsaF9ub2RlX3VzYWdlX3N0YXRzOworKwkJbGhfbm9kZV91c2FnZV9zdGF0c19iaW87CisrCQlsaF9yZXRyaWV2ZTsKKysJCWxoX3N0YXRzOworKwkJbGhfc3RhdHNfYmlvOworKwkJbGhfc3RyaGFzaDsKKysJCXNrX2RlbGV0ZTsKKysJCXNrX2RlbGV0ZV9wdHI7CisrCQlza19kdXA7CisrCQlza19maW5kOworKwkJc2tfZnJlZTsKKysJCXNrX2luc2VydDsKKysJCXNrX25ldzsKKysJCXNrX3BvcDsKKysJCXNrX3BvcF9mcmVlOworKwkJc2tfcHVzaDsKKysJCXNrX3NldF9jbXBfZnVuYzsKKysJCXNrX3NoaWZ0OworKwkJc2tfdW5zaGlmdDsKKysJCXNrX3plcm87CisrCQlCSU9fZl9uYmlvX3Rlc3Q7CisrCQlBU04xX1RZUEVfZ2V0OworKwkJQVNOMV9UWVBFX3NldDsKKysJCVBLQ1M3X2NvbnRlbnRfZnJlZTsKKysJCUVSUl9sb2FkX1BLQ1M3X3N0cmluZ3M7CisrCQlYNTA5X2ZpbmRfYnlfaXNzdWVyX2FuZF9zZXJpYWw7CisrCQlYNTA5X2ZpbmRfYnlfc3ViamVjdDsKKysJCVBLQ1M3X2N0cmw7CisrCQlQS0NTN19zZXRfdHlwZTsKKysJCVBLQ1M3X3NldF9jb250ZW50OworKwkJUEtDUzdfU0lHTkVSX0lORk9fc2V0OworKwkJUEtDUzdfYWRkX3NpZ25lcjsKKysJCVBLQ1M3X2FkZF9jZXJ0aWZpY2F0ZTsKKysJCVBLQ1M3X2FkZF9jcmw7CisrCQlQS0NTN19jb250ZW50X25ldzsKKysJCVBLQ1M3X2RhdGFTaWduOworKwkJUEtDUzdfZGF0YVZlcmlmeTsKKysJCVBLQ1M3X2RhdGFJbml0OworKwkJUEtDUzdfYWRkX3NpZ25hdHVyZTsKKysJCVBLQ1M3X2NlcnRfZnJvbV9zaWduZXJfaW5mbzsKKysJCVBLQ1M3X2dldF9zaWduZXJfaW5mbzsKKysJCUVWUF9kZWxldGVfYWxpYXM7CisrCQlFVlBfbWRjMjsKKysJCVBFTV9yZWFkX2Jpb19SU0FQdWJsaWNLZXk7CisrCQlQRU1fd3JpdGVfYmlvX1JTQVB1YmxpY0tleTsKKysJCWQyaV9SU0FQdWJsaWNLZXlfYmlvOworKwkJaTJkX1JTQVB1YmxpY0tleV9iaW87CisrCQlQRU1fcmVhZF9SU0FQdWJsaWNLZXk7CisrCQlQRU1fd3JpdGVfUlNBUHVibGljS2V5OworKwkJZDJpX1JTQVB1YmxpY0tleV9mcDsKKysJCWkyZF9SU0FQdWJsaWNLZXlfZnA7CisrCQlCSU9fY29weV9uZXh0X3JldHJ5OworKwkJUlNBX2ZsYWdzOworKwkJWDUwOV9TVE9SRV9hZGRfY3JsOworKwkJWDUwOV9sb2FkX2NybF9maWxlOworKwkJRVZQX3JjMl80MF9jYmM7CisrCQlFVlBfcmM0XzQwOworKwkJRVZQX0NJUEhFUl9DVFhfaW5pdDsKKysJCUhNQUM7CisrCQlITUFDX0luaXQ7CisrCQlITUFDX1VwZGF0ZTsKKysJCUhNQUNfRmluYWw7CisrCQlFUlJfZ2V0X25leHRfZXJyb3JfbGlicmFyeTsKKysJCUVWUF9QS0VZX2NtcF9wYXJhbWV0ZXJzOworKwkJSE1BQ19jbGVhbnVwOworKwkJQklPX3B0cl9jdHJsOworKwkJQklPX25ld19maWxlX2ludGVybmFsOworKwkJQklPX25ld19mcF9pbnRlcm5hbDsKKysJCUJJT19zX2ZpbGVfaW50ZXJuYWw7CisrCQlCTl9CTElORElOR19jb252ZXJ0OworKwkJQk5fQkxJTkRJTkdfaW52ZXJ0OworKwkJQk5fQkxJTkRJTkdfdXBkYXRlOworKwkJUlNBX2JsaW5kaW5nX29uOworKwkJUlNBX2JsaW5kaW5nX29mZjsKKysJCWkydF9BU04xX09CSkVDVDsKKysJCUJOX0JMSU5ESU5HX25ldzsKKysJCUJOX0JMSU5ESU5HX2ZyZWU7CisrCQlFVlBfY2FzdDVfY2JjOworKwkJRVZQX2Nhc3Q1X2NmYjY0OworKwkJRVZQX2Nhc3Q1X2VjYjsKKysJCUVWUF9jYXN0NV9vZmI7CisrCQlCRl9kZWNyeXB0OworKwkJQ0FTVF9zZXRfa2V5OworKwkJQ0FTVF9lbmNyeXB0OworKwkJQ0FTVF9kZWNyeXB0OworKwkJQ0FTVF9lY2JfZW5jcnlwdDsKKysJCUNBU1RfY2JjX2VuY3J5cHQ7CisrCQlDQVNUX2NmYjY0X2VuY3J5cHQ7CisrCQlDQVNUX29mYjY0X2VuY3J5cHQ7CisrCQlSQzJfZGVjcnlwdDsKKysJCU9CSl9jcmVhdGVfb2JqZWN0czsKKysJCUJOX2V4cDsKKysJCUJOX211bF93b3JkOworKwkJQk5fc3ViX3dvcmQ7CisrCQlCTl9kZWMyYm47CisrCQlCTl9ibjJkZWM7CisrCQlCSU9fZ2hibl9jdHJsOworKwkJQ1JZUFRPX2ZyZWVfZXhfZGF0YTsKKysJCUNSWVBUT19nZXRfZXhfZGF0YTsKKysJCUNSWVBUT19zZXRfZXhfZGF0YTsKKysJCUVSUl9sb2FkX0NSWVBUT19zdHJpbmdzOworKwkJRVJSX2xvYWRfQ1JZUFRPbGliX3N0cmluZ3M7CisrCQlFVlBfUEtFWV9iaXRzOworKwkJTUQ1X1RyYW5zZm9ybTsKKysJCVNIQTFfVHJhbnNmb3JtOworKwkJU0hBX1RyYW5zZm9ybTsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldF9jaGFpbjsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldF9jdXJyZW50X2NlcnQ7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXRfZXJyb3I7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXRfZXJyb3JfZGVwdGg7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXRfZXhfZGF0YTsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF9jZXJ0OworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2NoYWluOworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2Vycm9yOworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2V4X2RhdGE7CisrCQlDUllQVE9fZHVwX2V4X2RhdGE7CisrCQlDUllQVE9fZ2V0X25ld19sb2NraWQ7CisrCQlDUllQVE9fbmV3X2V4X2RhdGE7CisrCQlSU0Ffc2V0X2V4X2RhdGE7CisrCQlSU0FfZ2V0X2V4X2RhdGE7CisrCQlSU0FfZ2V0X2V4X25ld19pbmRleDsKKysJCVJTQV9wYWRkaW5nX2FkZF9QS0NTMV90eXBlXzE7CisrCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfdHlwZV8yOworKwkJUlNBX3BhZGRpbmdfYWRkX1NTTHYyMzsKKysJCVJTQV9wYWRkaW5nX2FkZF9ub25lOworKwkJUlNBX3BhZGRpbmdfY2hlY2tfUEtDUzFfdHlwZV8xOworKwkJUlNBX3BhZGRpbmdfY2hlY2tfUEtDUzFfdHlwZV8yOworKwkJUlNBX3BhZGRpbmdfY2hlY2tfU1NMdjIzOworKwkJUlNBX3BhZGRpbmdfY2hlY2tfbm9uZTsKKysJCWJuX2FkZF93b3JkczsKKysJCWQyaV9OZXRzY2FwZV9SU0FfMjsKKysJCUNSWVBUT19nZXRfZXhfbmV3X2luZGV4OworKwkJUklQRU1EMTYwX0luaXQ7CisrCQlSSVBFTUQxNjBfVXBkYXRlOworKwkJUklQRU1EMTYwX0ZpbmFsOworKwkJUklQRU1EMTYwOworKwkJUklQRU1EMTYwX1RyYW5zZm9ybTsKKysJCVJDNV8zMl9zZXRfa2V5OworKwkJUkM1XzMyX2VjYl9lbmNyeXB0OworKwkJUkM1XzMyX2VuY3J5cHQ7CisrCQlSQzVfMzJfZGVjcnlwdDsKKysJCVJDNV8zMl9jYmNfZW5jcnlwdDsKKysJCVJDNV8zMl9jZmI2NF9lbmNyeXB0OworKwkJUkM1XzMyX29mYjY0X2VuY3J5cHQ7CisrCQlCTl9ibjJtcGk7CisrCQlCTl9tcGkyYm47CisrCQlBU04xX0JJVF9TVFJJTkdfZ2V0X2JpdDsKKysJCUFTTjFfQklUX1NUUklOR19zZXRfYml0OworKwkJQklPX2dldF9leF9kYXRhOworKwkJQklPX2dldF9leF9uZXdfaW5kZXg7CisrCQlCSU9fc2V0X2V4X2RhdGE7CisrCQlYNTA5djNfZ2V0X2tleV91c2FnZTsKKysJCVg1MDl2M19zZXRfa2V5X3VzYWdlOworKwkJYTJpX1g1MDl2M19rZXlfdXNhZ2U7CisrCQlpMmFfWDUwOXYzX2tleV91c2FnZTsKKysJCUVWUF9QS0VZX2RlY3J5cHQ7CisrCQlFVlBfUEtFWV9lbmNyeXB0OworKwkJUEtDUzdfUkVDSVBfSU5GT19zZXQ7CisrCQlQS0NTN19hZGRfcmVjaXBpZW50OworKwkJUEtDUzdfYWRkX3JlY2lwaWVudF9pbmZvOworKwkJUEtDUzdfc2V0X2NpcGhlcjsKKysJCUFTTjFfVFlQRV9nZXRfaW50X29jdGV0c3RyaW5nOworKwkJQVNOMV9UWVBFX2dldF9vY3RldHN0cmluZzsKKysJCUFTTjFfVFlQRV9zZXRfaW50X29jdGV0c3RyaW5nOworKwkJQVNOMV9UWVBFX3NldF9vY3RldHN0cmluZzsKKysJCUFTTjFfVVRDVElNRV9zZXRfc3RyaW5nOworKwkJRVJSX2FkZF9lcnJvcl9kYXRhOworKwkJRVJSX3NldF9lcnJvcl9kYXRhOworKwkJRVZQX0NJUEhFUl9hc24xX3RvX3BhcmFtOworKwkJRVZQX0NJUEhFUl9wYXJhbV90b19hc24xOworKwkJRVZQX0NJUEhFUl9nZXRfYXNuMV9pdjsKKysJCUVWUF9DSVBIRVJfc2V0X2FzbjFfaXY7CisrCQlFVlBfcmM1XzMyXzEyXzE2X2NiYzsKKysJCUVWUF9yYzVfMzJfMTJfMTZfY2ZiNjQ7CisrCQlFVlBfcmM1XzMyXzEyXzE2X2VjYjsKKysJCUVWUF9yYzVfMzJfMTJfMTZfb2ZiOworKwkJYXNuMV9hZGRfZXJyb3I7CisrCQlkMmlfQVNOMV9CTVBTVFJJTkc7CisrCQlpMmRfQVNOMV9CTVBTVFJJTkc7CisrCQlCSU9fZl9iZXI7CisrCQlCTl9pbml0OworKwkJQ09NUF9DVFhfbmV3OworKwkJQ09NUF9DVFhfZnJlZTsKKysJCUNPTVBfQ1RYX2NvbXByZXNzX2Jsb2NrOworKwkJQ09NUF9DVFhfZXhwYW5kX2Jsb2NrOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0X2V4X25ld19pbmRleDsKKysJCU9CSl9OQU1FX2FkZDsKKysJCUJJT19zb2NrZXRfbmJpbzsKKysJCUVWUF9yYzJfNjRfY2JjOworKwkJT0JKX05BTUVfY2xlYW51cDsKKysJCU9CSl9OQU1FX2dldDsKKysJCU9CSl9OQU1FX2luaXQ7CisrCQlPQkpfTkFNRV9uZXdfaW5kZXg7CisrCQlPQkpfTkFNRV9yZW1vdmU7CisrCQlCTl9NT05UX0NUWF9jb3B5OworKwkJQklPX25ld19zb2NrczRhX2Nvbm5lY3Q7CisrCQlCSU9fc19zb2NrczRhX2Nvbm5lY3Q7CisrCQlQUk9YWV9zZXRfY29ubmVjdF9tb2RlOworKwkJUkFORF9TU0xlYXk7CisrCQlSQU5EX3NldF9yYW5kX21ldGhvZDsKKysJCVJTQV9tZW1vcnlfbG9jazsKKysJCWJuX3N1Yl93b3JkczsKKysJCWJuX211bF9ub3JtYWw7CisrCQlibl9tdWxfY29tYmE4OworKwkJYm5fbXVsX2NvbWJhNDsKKysJCWJuX3Nxcl9ub3JtYWw7CisrCQlibl9zcXJfY29tYmE4OworKwkJYm5fc3FyX2NvbWJhNDsKKysJCWJuX2NtcF93b3JkczsKKysJCWJuX211bF9yZWN1cnNpdmU7CisrCQlibl9tdWxfcGFydF9yZWN1cnNpdmU7CisrCQlibl9zcXJfcmVjdXJzaXZlOworKwkJYm5fbXVsX2xvd19ub3JtYWw7CisrCQlCTl9SRUNQX0NUWF9pbml0OworKwkJQk5fUkVDUF9DVFhfbmV3OworKwkJQk5fUkVDUF9DVFhfZnJlZTsKKysJCUJOX1JFQ1BfQ1RYX3NldDsKKysJCUJOX21vZF9tdWxfcmVjaXByb2NhbDsKKysJCUJOX21vZF9leHBfcmVjcDsKKysJCUJOX2Rpdl9yZWNwOworKwkJQk5fQ1RYX2luaXQ7CisrCQlCTl9NT05UX0NUWF9pbml0OworKwkJUkFORF9nZXRfcmFuZF9tZXRob2Q7CisrCQlQS0NTN19hZGRfYXR0cmlidXRlOworKwkJUEtDUzdfYWRkX3NpZ25lZF9hdHRyaWJ1dGU7CisrCQlQS0NTN19kaWdlc3RfZnJvbV9hdHRyaWJ1dGVzOworKwkJUEtDUzdfZ2V0X2F0dHJpYnV0ZTsKKysJCVBLQ1M3X2dldF9pc3N1ZXJfYW5kX3NlcmlhbDsKKysJCVBLQ1M3X2dldF9zaWduZWRfYXR0cmlidXRlOworKwkJQ09NUF9jb21wcmVzc19ibG9jazsKKysJCUNPTVBfZXhwYW5kX2Jsb2NrOworKwkJQ09NUF9ybGU7CisrCQlDT01QX3psaWI7CisrCQltc190aW1lX2RpZmY7CisrCQltc190aW1lX25ldzsKKysJCW1zX3RpbWVfZnJlZTsKKysJCW1zX3RpbWVfY21wOworKwkJbXNfdGltZV9nZXQ7CisrCQlQS0NTN19zZXRfYXR0cmlidXRlczsKKysJCVBLQ1M3X3NldF9zaWduZWRfYXR0cmlidXRlczsKKysJCVg1MDlfQVRUUklCVVRFX2NyZWF0ZTsKKysJCVg1MDlfQVRUUklCVVRFX2R1cDsKKysJCUFTTjFfR0VORVJBTElaRURUSU1FX2NoZWNrOworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfcHJpbnQ7CisrCQlBU04xX0dFTkVSQUxJWkVEVElNRV9zZXQ7CisrCQlBU04xX0dFTkVSQUxJWkVEVElNRV9zZXRfc3RyaW5nOworKwkJQVNOMV9USU1FX3ByaW50OworKwkJQkFTSUNfQ09OU1RSQUlOVFNfZnJlZTsKKysJCUJBU0lDX0NPTlNUUkFJTlRTX25ldzsKKysJCUVSUl9sb2FkX1g1MDlWM19zdHJpbmdzOworKwkJTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRV9mcmVlOworKwkJTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRV9uZXc7CisrCQlPQkpfdHh0Mm9iajsKKysJCVBFTV9yZWFkX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0U7CisrCQlQRU1fcmVhZF9OU19DRVJUX1NFUTsKKysJCVBFTV9yZWFkX2Jpb19ORVRTQ0FQRV9DRVJUX1NFUVVFTkNFOworKwkJUEVNX3JlYWRfYmlvX05TX0NFUlRfU0VROworKwkJUEVNX3dyaXRlX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0U7CisrCQlQRU1fd3JpdGVfTlNfQ0VSVF9TRVE7CisrCQlQRU1fd3JpdGVfYmlvX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0U7CisrCQlQRU1fd3JpdGVfYmlvX05TX0NFUlRfU0VROworKwkJWDUwOVYzX0VYVF9hZGQ7CisrCQlYNTA5VjNfRVhUX2FkZF9hbGlhczsKKysJCVg1MDlWM19FWFRfYWRkX2NvbmY7CisrCQlYNTA5VjNfRVhUX2NsZWFudXA7CisrCQlYNTA5VjNfRVhUX2NvbmY7CisrCQlYNTA5VjNfRVhUX2NvbmZfbmlkOworKwkJWDUwOVYzX0VYVF9nZXQ7CisrCQlYNTA5VjNfRVhUX2dldF9uaWQ7CisrCQlYNTA5VjNfRVhUX3ByaW50OworKwkJWDUwOVYzX0VYVF9wcmludF9mcDsKKysJCVg1MDlWM19hZGRfc3RhbmRhcmRfZXh0ZW5zaW9uczsKKysJCVg1MDlWM19hZGRfdmFsdWU7CisrCQlYNTA5VjNfYWRkX3ZhbHVlX2Jvb2w7CisrCQlYNTA5VjNfYWRkX3ZhbHVlX2ludDsKKysJCVg1MDlWM19jb25mX2ZyZWU7CisrCQlYNTA5VjNfZ2V0X3ZhbHVlX2Jvb2w7CisrCQlYNTA5VjNfZ2V0X3ZhbHVlX2ludDsKKysJCVg1MDlWM19wYXJzZV9saXN0OworKwkJZDJpX0FTTjFfR0VORVJBTElaRURUSU1FOworKwkJZDJpX0FTTjFfVElNRTsKKysJCWQyaV9CQVNJQ19DT05TVFJBSU5UUzsKKysJCWQyaV9ORVRTQ0FQRV9DRVJUX1NFUVVFTkNFOworKwkJZDJpX2V4dF9rdTsKKysJCWV4dF9rdV9mcmVlOworKwkJZXh0X2t1X25ldzsKKysJCWkyZF9BU04xX0dFTkVSQUxJWkVEVElNRTsKKysJCWkyZF9BU04xX1RJTUU7CisrCQlpMmRfQkFTSUNfQ09OU1RSQUlOVFM7CisrCQlpMmRfTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRTsKKysJCWkyZF9leHRfa3U7CisrCQlFVlBfTURfQ1RYX2NvcHk7CisrCQlpMmRfQVNOMV9FTlVNRVJBVEVEOworKwkJZDJpX0FTTjFfRU5VTUVSQVRFRDsKKysJCUFTTjFfRU5VTUVSQVRFRF9zZXQ7CisrCQlBU04xX0VOVU1FUkFURURfZ2V0OworKwkJQk5fdG9fQVNOMV9FTlVNRVJBVEVEOworKwkJQVNOMV9FTlVNRVJBVEVEX3RvX0JOOworKwkJaTJhX0FTTjFfRU5VTUVSQVRFRDsKKysJCWEyaV9BU04xX0VOVU1FUkFURUQ7CisrCQlpMmRfR0VORVJBTF9OQU1FOworKwkJZDJpX0dFTkVSQUxfTkFNRTsKKysJCUdFTkVSQUxfTkFNRV9uZXc7CisrCQlHRU5FUkFMX05BTUVfZnJlZTsKKysJCUdFTkVSQUxfTkFNRVNfbmV3OworKwkJR0VORVJBTF9OQU1FU19mcmVlOworKwkJZDJpX0dFTkVSQUxfTkFNRVM7CisrCQlpMmRfR0VORVJBTF9OQU1FUzsKKysJCWkydl9HRU5FUkFMX05BTUVTOworKwkJaTJzX0FTTjFfT0NURVRfU1RSSU5HOworKwkJczJpX0FTTjFfT0NURVRfU1RSSU5HOworKwkJWDUwOVYzX0VYVF9jaGVja19jb25mOworKwkJaGV4X3RvX3N0cmluZzsKKysJCXN0cmluZ190b19oZXg7CisrCQlERVNfZWRlM19jYmNtX2VuY3J5cHQ7CisrCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfT0FFUDsKKysJCVJTQV9wYWRkaW5nX2NoZWNrX1BLQ1MxX09BRVA7CisrCQlYNTA5X0NSTF9wcmludF9mcDsKKysJCVg1MDlfQ1JMX3ByaW50OworKwkJaTJ2X0dFTkVSQUxfTkFNRTsKKysJCXYyaV9HRU5FUkFMX05BTUU7CisrCQlpMmRfUEtFWV9VU0FHRV9QRVJJT0Q7CisrCQlkMmlfUEtFWV9VU0FHRV9QRVJJT0Q7CisrCQlQS0VZX1VTQUdFX1BFUklPRF9uZXc7CisrCQlQS0VZX1VTQUdFX1BFUklPRF9mcmVlOworKwkJdjJpX0dFTkVSQUxfTkFNRVM7CisrCQlpMnNfQVNOMV9JTlRFR0VSOworKwkJWDUwOVYzX0VYVF9kMmk7CisrCQluYW1lX2NtcDsKKysJCXN0cl9kdXA7CisrCQlpMnNfQVNOMV9FTlVNRVJBVEVEOworKwkJaTJzX0FTTjFfRU5VTUVSQVRFRF9UQUJMRTsKKysJCUJJT19zX2xvZzsKKysJCUJJT19mX3JlbGlhYmxlOworKwkJUEtDUzdfZGF0YUZpbmFsOworKwkJUEtDUzdfZGF0YURlY29kZTsKKysJCVg1MDlWM19FWFRfQ1JMX2FkZF9jb25mOworKwkJQk5fc2V0X3BhcmFtczsKKysJCUJOX2dldF9wYXJhbXM7CisrCQlCSU9fZ2V0X2V4X251bTsKKysJCUJJT19zZXRfZXhfZnJlZV9mdW5jOworKwkJRVZQX3JpcGVtZDE2MDsKKysJCUFTTjFfVElNRV9zZXQ7CisrCQlpMmRfQVVUSE9SSVRZX0tFWUlEOworKwkJZDJpX0FVVEhPUklUWV9LRVlJRDsKKysJCUFVVEhPUklUWV9LRVlJRF9uZXc7CisrCQlBVVRIT1JJVFlfS0VZSURfZnJlZTsKKysJCUFTTjFfc2VxX3VucGFjazsKKysJCUFTTjFfc2VxX3BhY2s7CisrCQlBU04xX3VucGFja19zdHJpbmc7CisrCQlBU04xX3BhY2tfc3RyaW5nOworKwkJUEtDUzEyX3BhY2tfc2FmZWJhZzsKKysJCVBLQ1MxMl9NQUtFX0tFWUJBRzsKKysJCVBLQ1M4X2VuY3J5cHQ7CisrCQlQS0NTMTJfTUFLRV9TSEtFWUJBRzsKKysJCVBLQ1MxMl9wYWNrX3A3ZGF0YTsKKysJCVBLQ1MxMl9wYWNrX3A3ZW5jZGF0YTsKKysJCVBLQ1MxMl9hZGRfbG9jYWxrZXlpZDsKKysJCVBLQ1MxMl9hZGRfZnJpZW5kbHluYW1lX2FzYzsKKysJCVBLQ1MxMl9hZGRfZnJpZW5kbHluYW1lX3VuaTsKKysJCVBLQ1MxMl9nZXRfZnJpZW5kbHluYW1lOworKwkJUEtDUzEyX3BiZV9jcnlwdDsKKysJCVBLQ1MxMl9kZWNyeXB0X2QyaTsKKysJCVBLQ1MxMl9pMmRfZW5jcnlwdDsKKysJCVBLQ1MxMl9pbml0OworKwkJUEtDUzEyX2tleV9nZW5fYXNjOworKwkJUEtDUzEyX2tleV9nZW5fdW5pOworKwkJUEtDUzEyX2dlbl9tYWM7CisrCQlQS0NTMTJfdmVyaWZ5X21hYzsKKysJCVBLQ1MxMl9zZXRfbWFjOworKwkJUEtDUzEyX3NldHVwX21hYzsKKysJCU9QRU5TU0xfYXNjMnVuaTsKKysJCU9QRU5TU0xfdW5pMmFzYzsKKysJCWkyZF9QS0NTMTJfQkFHUzsKKysJCVBLQ1MxMl9CQUdTX25ldzsKKysJCWQyaV9QS0NTMTJfQkFHUzsKKysJCVBLQ1MxMl9CQUdTX2ZyZWU7CisrCQlpMmRfUEtDUzEyOworKwkJZDJpX1BLQ1MxMjsKKysJCVBLQ1MxMl9uZXc7CisrCQlQS0NTMTJfZnJlZTsKKysJCWkyZF9QS0NTMTJfTUFDX0RBVEE7CisrCQlQS0NTMTJfTUFDX0RBVEFfbmV3OworKwkJZDJpX1BLQ1MxMl9NQUNfREFUQTsKKysJCVBLQ1MxMl9NQUNfREFUQV9mcmVlOworKwkJaTJkX1BLQ1MxMl9TQUZFQkFHOworKwkJUEtDUzEyX1NBRkVCQUdfbmV3OworKwkJZDJpX1BLQ1MxMl9TQUZFQkFHOworKwkJUEtDUzEyX1NBRkVCQUdfZnJlZTsKKysJCUVSUl9sb2FkX1BLQ1MxMl9zdHJpbmdzOworKwkJUEtDUzEyX1BCRV9hZGQ7CisrCQlQS0NTOF9hZGRfa2V5dXNhZ2U7CisrCQlQS0NTMTJfZ2V0X2F0dHJfZ2VuOworKwkJUEtDUzEyX3BhcnNlOworKwkJUEtDUzEyX2NyZWF0ZTsKKysJCWkyZF9QS0NTMTJfYmlvOworKwkJaTJkX1BLQ1MxMl9mcDsKKysJCWQyaV9QS0NTMTJfYmlvOworKwkJZDJpX1BLQ1MxMl9mcDsKKysJCWkyZF9QQkVQQVJBTTsKKysJCVBCRVBBUkFNX25ldzsKKysJCWQyaV9QQkVQQVJBTTsKKysJCVBCRVBBUkFNX2ZyZWU7CisrCQlpMmRfUEtDUzhfUFJJVl9LRVlfSU5GTzsKKysJCVBLQ1M4X1BSSVZfS0VZX0lORk9fbmV3OworKwkJZDJpX1BLQ1M4X1BSSVZfS0VZX0lORk87CisrCQlQS0NTOF9QUklWX0tFWV9JTkZPX2ZyZWU7CisrCQlFVlBfUEtDUzgyUEtFWTsKKysJCUVWUF9QS0VZMlBLQ1M4OworKwkJUEtDUzhfc2V0X2Jyb2tlbjsKKysJCUVWUF9QQkVfQUxHT1JfQ2lwaGVySW5pdDsKKysJCUVWUF9QQkVfYWxnX2FkZDsKKysJCVBLQ1M1X3BiZV9zZXQ7CisrCQlFVlBfUEJFX2NsZWFudXA7CisrCQlpMmRfU1hORVQ7CisrCQlkMmlfU1hORVQ7CisrCQlTWE5FVF9uZXc7CisrCQlTWE5FVF9mcmVlOworKwkJaTJkX1NYTkVUSUQ7CisrCQlkMmlfU1hORVRJRDsKKysJCVNYTkVUSURfbmV3OworKwkJU1hORVRJRF9mcmVlOworKwkJRFNBX1NJR19uZXc7CisrCQlEU0FfU0lHX2ZyZWU7CisrCQlEU0FfZG9fc2lnbjsKKysJCURTQV9kb192ZXJpZnk7CisrCQlkMmlfRFNBX1NJRzsKKysJCWkyZF9EU0FfU0lHOworKwkJaTJkX0FTTjFfVklTSUJMRVNUUklORzsKKysJCWQyaV9BU04xX1ZJU0lCTEVTVFJJTkc7CisrCQlpMmRfQVNOMV9VVEY4U1RSSU5HOworKwkJZDJpX0FTTjFfVVRGOFNUUklORzsKKysJCWkyZF9ESVJFQ1RPUllTVFJJTkc7CisrCQlkMmlfRElSRUNUT1JZU1RSSU5HOworKwkJaTJkX0RJU1BMQVlURVhUOworKwkJZDJpX0RJU1BMQVlURVhUOworKwkJZDJpX0FTTjFfU0VUX09GX1g1MDk7CisrCQlpMmRfQVNOMV9TRVRfT0ZfWDUwOTsKKysJCWkyZF9QQktERjJQQVJBTTsKKysJCVBCS0RGMlBBUkFNX25ldzsKKysJCWQyaV9QQktERjJQQVJBTTsKKysJCVBCS0RGMlBBUkFNX2ZyZWU7CisrCQlpMmRfUEJFMlBBUkFNOworKwkJUEJFMlBBUkFNX25ldzsKKysJCWQyaV9QQkUyUEFSQU07CisrCQlQQkUyUEFSQU1fZnJlZTsKKysJCWQyaV9BU04xX1NFVF9PRl9HRU5FUkFMX05BTUU7CisrCQlpMmRfQVNOMV9TRVRfT0ZfR0VORVJBTF9OQU1FOworKwkJZDJpX0FTTjFfU0VUX09GX1NYTkVUSUQ7CisrCQlpMmRfQVNOMV9TRVRfT0ZfU1hORVRJRDsKKysJCWQyaV9BU04xX1NFVF9PRl9QT0xJQ1lRVUFMSU5GTzsKKysJCWkyZF9BU04xX1NFVF9PRl9QT0xJQ1lRVUFMSU5GTzsKKysJCWQyaV9BU04xX1NFVF9PRl9QT0xJQ1lJTkZPOworKwkJaTJkX0FTTjFfU0VUX09GX1BPTElDWUlORk87CisrCQlTWE5FVF9hZGRfaWRfYXNjOworKwkJU1hORVRfYWRkX2lkX3Vsb25nOworKwkJU1hORVRfYWRkX2lkX0lOVEVHRVI7CisrCQlTWE5FVF9nZXRfaWRfYXNjOworKwkJU1hORVRfZ2V0X2lkX3Vsb25nOworKwkJU1hORVRfZ2V0X2lkX0lOVEVHRVI7CisrCQlYNTA5VjNfc2V0X2NvbmZfbGhhc2g7CisrCQlpMmRfQ0VSVElGSUNBVEVQT0xJQ0lFUzsKKysJCUNFUlRJRklDQVRFUE9MSUNJRVNfbmV3OworKwkJQ0VSVElGSUNBVEVQT0xJQ0lFU19mcmVlOworKwkJZDJpX0NFUlRJRklDQVRFUE9MSUNJRVM7CisrCQlpMmRfUE9MSUNZSU5GTzsKKysJCVBPTElDWUlORk9fbmV3OworKwkJZDJpX1BPTElDWUlORk87CisrCQlQT0xJQ1lJTkZPX2ZyZWU7CisrCQlpMmRfUE9MSUNZUVVBTElORk87CisrCQlQT0xJQ1lRVUFMSU5GT19uZXc7CisrCQlkMmlfUE9MSUNZUVVBTElORk87CisrCQlQT0xJQ1lRVUFMSU5GT19mcmVlOworKwkJaTJkX1VTRVJOT1RJQ0U7CisrCQlVU0VSTk9USUNFX25ldzsKKysJCWQyaV9VU0VSTk9USUNFOworKwkJVVNFUk5PVElDRV9mcmVlOworKwkJaTJkX05PVElDRVJFRjsKKysJCU5PVElDRVJFRl9uZXc7CisrCQlkMmlfTk9USUNFUkVGOworKwkJTk9USUNFUkVGX2ZyZWU7CisrCQlYNTA5VjNfZ2V0X3N0cmluZzsKKysJCVg1MDlWM19nZXRfc2VjdGlvbjsKKysJCVg1MDlWM19zdHJpbmdfZnJlZTsKKysJCVg1MDlWM19zZWN0aW9uX2ZyZWU7CisrCQlYNTA5VjNfc2V0X2N0eDsKKysJCXMyaV9BU04xX0lOVEVHRVI7CisrCQlDUllQVE9fc2V0X2xvY2tlZF9tZW1fZnVuY3Rpb25zOworKwkJQ1JZUFRPX2dldF9sb2NrZWRfbWVtX2Z1bmN0aW9uczsKKysJCUNSWVBUT19tYWxsb2NfbG9ja2VkOworKwkJQ1JZUFRPX2ZyZWVfbG9ja2VkOworKwkJQk5fbW9kX2V4cDJfbW9udDsKKysJCUVSUl9nZXRfZXJyb3JfbGluZV9kYXRhOworKwkJRVJSX3BlZWtfZXJyb3JfbGluZV9kYXRhOworKwkJUEtDUzEyX1BCRV9rZXlpdmdlbjsKKysJCVg1MDlfQUxHT1JfZHVwOworKwkJZDJpX0FTTjFfU0VUX09GX0RJU1RfUE9JTlQ7CisrCQlpMmRfQVNOMV9TRVRfT0ZfRElTVF9QT0lOVDsKKysJCWkyZF9DUkxfRElTVF9QT0lOVFM7CisrCQlDUkxfRElTVF9QT0lOVFNfbmV3OworKwkJQ1JMX0RJU1RfUE9JTlRTX2ZyZWU7CisrCQlkMmlfQ1JMX0RJU1RfUE9JTlRTOworKwkJaTJkX0RJU1RfUE9JTlQ7CisrCQlESVNUX1BPSU5UX25ldzsKKysJCWQyaV9ESVNUX1BPSU5UOworKwkJRElTVF9QT0lOVF9mcmVlOworKwkJaTJkX0RJU1RfUE9JTlRfTkFNRTsKKysJCURJU1RfUE9JTlRfTkFNRV9uZXc7CisrCQlESVNUX1BPSU5UX05BTUVfZnJlZTsKKysJCWQyaV9ESVNUX1BPSU5UX05BTUU7CisrCQlYNTA5VjNfYWRkX3ZhbHVlX3VjaGFyOworKwkJZDJpX0FTTjFfU0VUX09GX1g1MDlfQVRUUklCVVRFOworKwkJaTJkX0FTTjFfU0VUX09GX0FTTjFfVFlQRTsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5X0VYVEVOU0lPTjsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5X05BTUVfRU5UUlk7CisrCQlkMmlfQVNOMV9TRVRfT0ZfQVNOMV9UWVBFOworKwkJaTJkX0FTTjFfU0VUX09GX1g1MDlfQVRUUklCVVRFOworKwkJaTJkX0FTTjFfU0VUX09GX1g1MDlfRVhURU5TSU9OOworKwkJaTJkX0FTTjFfU0VUX09GX1g1MDlfTkFNRV9FTlRSWTsKKysJCVg1MDlWM19FWFRfaTJkOworKwkJWDUwOVYzX0VYVF92YWxfcHJuOworKwkJWDUwOVYzX0VYVF9hZGRfbGlzdDsKKysJCUVWUF9DSVBIRVJfdHlwZTsKKysJCUVWUF9QQkVfQ2lwaGVySW5pdDsKKysJCVg1MDlWM19hZGRfdmFsdWVfYm9vbF9uZjsKKysJCWQyaV9BU04xX1VJTlRFR0VSOworKwkJc2tfdmFsdWU7CisrCQlza19udW07CisrCQlza19zZXQ7CisrCQlpMmRfQVNOMV9TRVRfT0ZfWDUwOV9SRVZPS0VEOworKwkJc2tfc29ydDsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5X1JFVk9LRUQ7CisrCQlpMmRfQVNOMV9TRVRfT0ZfWDUwOV9BTEdPUjsKKysJCWkyZF9BU04xX1NFVF9PRl9YNTA5X0NSTDsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5X0FMR09SOworKwkJZDJpX0FTTjFfU0VUX09GX1g1MDlfQ1JMOworKwkJaTJkX0FTTjFfU0VUX09GX1BLQ1M3X1NJR05FUl9JTkZPOworKwkJaTJkX0FTTjFfU0VUX09GX1BLQ1M3X1JFQ0lQX0lORk87CisrCQlkMmlfQVNOMV9TRVRfT0ZfUEtDUzdfU0lHTkVSX0lORk87CisrCQlkMmlfQVNOMV9TRVRfT0ZfUEtDUzdfUkVDSVBfSU5GTzsKKysJCVBLQ1M1X1BCRV9hZGQ7CisrCQlQRU1fd3JpdGVfYmlvX1BLQ1M4OworKwkJaTJkX1BLQ1M4X2ZwOworKwkJUEVNX3JlYWRfYmlvX1BLQ1M4X1BSSVZfS0VZX0lORk87CisrCQlQRU1fcmVhZF9iaW9fUDhfUFJJVl9LRVlfSU5GTzsKKysJCWQyaV9QS0NTOF9iaW87CisrCQlkMmlfUEtDUzhfUFJJVl9LRVlfSU5GT19mcDsKKysJCVBFTV93cml0ZV9iaW9fUEtDUzhfUFJJVl9LRVlfSU5GTzsKKysJCVBFTV93cml0ZV9iaW9fUDhfUFJJVl9LRVlfSU5GTzsKKysJCVBFTV9yZWFkX1BLQ1M4OworKwkJZDJpX1BLQ1M4X1BSSVZfS0VZX0lORk9fYmlvOworKwkJZDJpX1BLQ1M4X2ZwOworKwkJUEVNX3dyaXRlX1BLQ1M4OworKwkJUEVNX3JlYWRfUEtDUzhfUFJJVl9LRVlfSU5GTzsKKysJCVBFTV9yZWFkX1A4X1BSSVZfS0VZX0lORk87CisrCQlQRU1fcmVhZF9iaW9fUEtDUzg7CisrCQlQRU1fd3JpdGVfUEtDUzhfUFJJVl9LRVlfSU5GTzsKKysJCVBFTV93cml0ZV9QOF9QUklWX0tFWV9JTkZPOworKwkJUEtDUzVfUEJFX2tleWl2Z2VuOworKwkJaTJkX1BLQ1M4X2JpbzsKKysJCWkyZF9QS0NTOF9QUklWX0tFWV9JTkZPX2ZwOworKwkJaTJkX1BLQ1M4X1BSSVZfS0VZX0lORk9fYmlvOworKwkJQklPX3NfYmlvOworKwkJUEtDUzVfcGJlMl9zZXQ7CisrCQlQS0NTNV9QQktERjJfSE1BQ19TSEExOworKwkJUEtDUzVfdjJfUEJFX2tleWl2Z2VuOworKwkJUEVNX3dyaXRlX2Jpb19QS0NTOFByaXZhdGVLZXk7CisrCQlQRU1fd3JpdGVfUEtDUzhQcml2YXRlS2V5OworKwkJQklPX2N0cmxfZ2V0X3JlYWRfcmVxdWVzdDsKKysJCUJJT19jdHJsX3BlbmRpbmc7CisrCQlCSU9fY3RybF93cGVuZGluZzsKKysJCUJJT19uZXdfYmlvX3BhaXI7CisrCQlCSU9fY3RybF9nZXRfd3JpdGVfZ3VhcmFudGVlOworKwkJQ1JZUFRPX251bV9sb2NrczsKKysJCUNPTkZfbG9hZF9iaW87CisrCQlDT05GX2xvYWRfZnA7CisrCQlpMmRfQVNOMV9TRVRfT0ZfQVNOMV9PQkpFQ1Q7CisrCQlkMmlfQVNOMV9TRVRfT0ZfQVNOMV9PQkpFQ1Q7CisrCQlQS0NTN19zaWduYXR1cmVWZXJpZnk7CisrCQlSU0Ffc2V0X21ldGhvZDsKKysJCVJTQV9nZXRfbWV0aG9kOworKwkJUlNBX2dldF9kZWZhdWx0X21ldGhvZDsKKysJCVJTQV9jaGVja19rZXk7CisrCQlPQkpfb2JqMnR4dDsKKysJCURTQV9kdXBfREg7CisrCQlYNTA5X1JFUV9nZXRfZXh0ZW5zaW9uczsKKysJCVg1MDlfUkVRX3NldF9leHRlbnNpb25fbmlkczsKKysJCUJJT19ud3JpdGU7CisrCQlYNTA5X1JFUV9leHRlbnNpb25fbmlkOworKwkJQklPX25yZWFkOworKwkJWDUwOV9SRVFfZ2V0X2V4dGVuc2lvbl9uaWRzOworKwkJQklPX253cml0ZTA7CisrCQlYNTA5X1JFUV9hZGRfZXh0ZW5zaW9uc19uaWQ7CisrCQlCSU9fbnJlYWQwOworKwkJWDUwOV9SRVFfYWRkX2V4dGVuc2lvbnM7CisrCQlCSU9fbmV3X21lbV9idWY7CisrCQlESF9zZXRfZXhfZGF0YTsKKysJCURIX3NldF9tZXRob2Q7CisrCQlEU0FfT3BlblNTTDsKKysJCURIX2dldF9leF9kYXRhOworKwkJREhfZ2V0X2V4X25ld19pbmRleDsKKysJCURTQV9uZXdfbWV0aG9kOworKwkJREhfbmV3X21ldGhvZDsKKysJCURIX09wZW5TU0w7CisrCQlEU0FfZ2V0X2V4X25ld19pbmRleDsKKysJCURIX2dldF9kZWZhdWx0X21ldGhvZDsKKysJCURTQV9zZXRfZXhfZGF0YTsKKysJCURIX3NldF9kZWZhdWx0X21ldGhvZDsKKysJCURTQV9nZXRfZXhfZGF0YTsKKysJCVg1MDlWM19FWFRfUkVRX2FkZF9jb25mOworKwkJTkVUU0NBUEVfU1BLSV9wcmludDsKKysJCU5FVFNDQVBFX1NQS0lfc2V0X3B1YmtleTsKKysJCU5FVFNDQVBFX1NQS0lfYjY0X2VuY29kZTsKKysJCU5FVFNDQVBFX1NQS0lfZ2V0X3B1YmtleTsKKysJCU5FVFNDQVBFX1NQS0lfYjY0X2RlY29kZTsKKysJCVVURjhfcHV0YzsKKysJCVVURjhfZ2V0YzsKKysJCVJTQV9udWxsX21ldGhvZDsKKysJCUFTTjFfdGFnMnN0cjsKKysJCUJJT19jdHJsX3Jlc2V0X3JlYWRfcmVxdWVzdDsKKysJCURJU1BMQVlURVhUX25ldzsKKysJCUFTTjFfR0VORVJBTElaRURUSU1FX2ZyZWU7CisrCQlYNTA5X1JFVk9LRURfZ2V0X2V4dF9kMmk7CisrCQlYNTA5X3NldF9leF9kYXRhOworKwkJWDUwOV9yZWplY3Rfc2V0X2JpdF9hc2M7CisrCQlYNTA5X05BTUVfYWRkX2VudHJ5X2J5X3R4dDsKKysJCVg1MDlfTkFNRV9hZGRfZW50cnlfYnlfTklEOworKwkJWDUwOV9QVVJQT1NFX2dldDA7CisrCQlQRU1fcmVhZF9YNTA5X0FVWDsKKysJCWQyaV9BVVRIT1JJVFlfSU5GT19BQ0NFU1M7CisrCQlQRU1fd3JpdGVfUFVCS0VZOworKwkJQUNDRVNTX0RFU0NSSVBUSU9OX25ldzsKKysJCVg1MDlfQ0VSVF9BVVhfZnJlZTsKKysJCWQyaV9BQ0NFU1NfREVTQ1JJUFRJT047CisrCQlYNTA5X3RydXN0X2NsZWFyOworKwkJWDUwOV9UUlVTVF9hZGQ7CisrCQlBU04xX1ZJU0lCTEVTVFJJTkdfbmV3OworKwkJWDUwOV9hbGlhc19zZXQxOworKwkJQVNOMV9QUklOVEFCTEVTVFJJTkdfZnJlZTsKKysJCUVWUF9QS0VZX2dldDFfRFNBOworKwkJQVNOMV9CTVBTVFJJTkdfbmV3OworKwkJQVNOMV9tYnN0cmluZ19jb3B5OworKwkJQVNOMV9VVEY4U1RSSU5HX25ldzsKKysJCURTQV9nZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlpMmRfQVNOMV9TRVRfT0ZfQUNDRVNTX0RFU0NSSVBUSU9OOworKwkJQVNOMV9UNjFTVFJJTkdfZnJlZTsKKysJCURTQV9zZXRfbWV0aG9kOworKwkJWDUwOV9nZXRfZXhfZGF0YTsKKysJCUFTTjFfU1RSSU5HX3R5cGU7CisrCQlYNTA5X1BVUlBPU0VfZ2V0X2J5X3NuYW1lOworKwkJQVNOMV9USU1FX2ZyZWU7CisrCQlBU04xX09DVEVUX1NUUklOR19jbXA7CisrCQlBU04xX0JJVF9TVFJJTkdfbmV3OworKwkJWDUwOV9nZXRfZXh0X2QyaTsKKysJCVBFTV9yZWFkX2Jpb19YNTA5X0FVWDsKKysJCUFTTjFfU1RSSU5HX3NldF9kZWZhdWx0X21hc2tfYXNjOworKwkJQVNOMV9TVFJJTkdfc2V0X2RlZl9tYXNrX2FzYzsKKysJCVBFTV93cml0ZV9iaW9fUlNBX1BVQktFWTsKKysJCUFTTjFfSU5URUdFUl9jbXA7CisrCQlkMmlfUlNBX1BVQktFWV9mcDsKKysJCVg1MDlfdHJ1c3Rfc2V0X2JpdF9hc2M7CisrCQlQRU1fd3JpdGVfYmlvX0RTQV9QVUJLRVk7CisrCQlYNTA5X1NUT1JFX0NUWF9mcmVlOworKwkJRVZQX1BLRVlfc2V0MV9EU0E7CisrCQlpMmRfRFNBX1BVQktFWV9mcDsKKysJCVg1MDlfbG9hZF9jZXJ0X2NybF9maWxlOworKwkJQVNOMV9USU1FX25ldzsKKysJCWkyZF9SU0FfUFVCS0VZOworKwkJWDUwOV9TVE9SRV9DVFhfcHVycG9zZV9pbmhlcml0OworKwkJUEVNX3JlYWRfUlNBX1BVQktFWTsKKysJCWQyaV9YNTA5X0FVWDsKKysJCWkyZF9EU0FfUFVCS0VZOworKwkJWDUwOV9DRVJUX0FVWF9wcmludDsKKysJCVBFTV9yZWFkX0RTQV9QVUJLRVk7CisrCQlpMmRfUlNBX1BVQktFWV9iaW87CisrCQlBU04xX0JJVF9TVFJJTkdfbnVtX2FzYzsKKysJCWkyZF9QVUJLRVk7CisrCQlBU04xX1VUQ1RJTUVfZnJlZTsKKysJCURTQV9zZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlYNTA5X1BVUlBPU0VfZ2V0X2J5X2lkOworKwkJQUNDRVNTX0RFU0NSSVBUSU9OX2ZyZWU7CisrCQlQRU1fcmVhZF9iaW9fUFVCS0VZOworKwkJQVNOMV9TVFJJTkdfc2V0X2J5X05JRDsKKysJCVg1MDlfUFVSUE9TRV9nZXRfaWQ7CisrCQlESVNQTEFZVEVYVF9mcmVlOworKwkJT1RIRVJOQU1FX25ldzsKKysJCVg1MDlfQ0VSVF9BVVhfbmV3OworKwkJWDUwOV9UUlVTVF9jbGVhbnVwOworKwkJWDUwOV9OQU1FX2FkZF9lbnRyeV9ieV9PQko7CisrCQlYNTA5X0NSTF9nZXRfZXh0X2QyaTsKKysJCVg1MDlfUFVSUE9TRV9nZXQwX25hbWU7CisrCQlQRU1fcmVhZF9QVUJLRVk7CisrCQlpMmRfRFNBX1BVQktFWV9iaW87CisrCQlpMmRfT1RIRVJOQU1FOworKwkJQVNOMV9PQ1RFVF9TVFJJTkdfZnJlZTsKKysJCUFTTjFfQklUX1NUUklOR19zZXRfYXNjOworKwkJWDUwOV9nZXRfZXhfbmV3X2luZGV4OworKwkJQVNOMV9TVFJJTkdfVEFCTEVfY2xlYW51cDsKKysJCVg1MDlfVFJVU1RfZ2V0X2J5X2lkOworKwkJWDUwOV9QVVJQT1NFX2dldF90cnVzdDsKKysJCUFTTjFfU1RSSU5HX2xlbmd0aDsKKysJCWQyaV9BU04xX1NFVF9PRl9BQ0NFU1NfREVTQ1JJUFRJT047CisrCQlBU04xX1BSSU5UQUJMRVNUUklOR19uZXc7CisrCQlYNTA5VjNfZ2V0X2QyaTsKKysJCUFTTjFfRU5VTUVSQVRFRF9mcmVlOworKwkJaTJkX1g1MDlfQ0VSVF9BVVg7CisrCQlYNTA5X1NUT1JFX0NUWF9zZXRfdHJ1c3Q7CisrCQlBU04xX1NUUklOR19zZXRfZGVmYXVsdF9tYXNrOworKwkJWDUwOV9TVE9SRV9DVFhfbmV3OworKwkJRVZQX1BLRVlfZ2V0MV9SU0E7CisrCQlESVJFQ1RPUllTVFJJTkdfZnJlZTsKKysJCVBFTV93cml0ZV9YNTA5X0FVWDsKKysJCUFTTjFfT0NURVRfU1RSSU5HX3NldDsKKysJCWQyaV9EU0FfUFVCS0VZX2ZwOworKwkJZDJpX1JTQV9QVUJLRVk7CisrCQlYNTA5X1RSVVNUX2dldDBfbmFtZTsKKysJCVg1MDlfVFJVU1RfZ2V0MDsKKysJCUFVVEhPUklUWV9JTkZPX0FDQ0VTU19mcmVlOworKwkJQVNOMV9JQTVTVFJJTkdfbmV3OworKwkJZDJpX0RTQV9QVUJLRVk7CisrCQlYNTA5X2NoZWNrX3B1cnBvc2U7CisrCQlBU04xX0VOVU1FUkFURURfbmV3OworKwkJZDJpX1JTQV9QVUJLRVlfYmlvOworKwkJZDJpX1BVQktFWTsKKysJCVg1MDlfVFJVU1RfZ2V0X3RydXN0OworKwkJWDUwOV9UUlVTVF9nZXRfZmxhZ3M7CisrCQlBU04xX0JNUFNUUklOR19mcmVlOworKwkJQVNOMV9UNjFTVFJJTkdfbmV3OworKwkJQVNOMV9VVENUSU1FX25ldzsKKysJCWkyZF9BVVRIT1JJVFlfSU5GT19BQ0NFU1M7CisrCQlFVlBfUEtFWV9zZXQxX1JTQTsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF9wdXJwb3NlOworKwkJQVNOMV9JQTVTVFJJTkdfZnJlZTsKKysJCVBFTV93cml0ZV9iaW9fWDUwOV9BVVg7CisrCQlYNTA5X1BVUlBPU0VfZ2V0X2NvdW50OworKwkJQ1JZUFRPX2FkZF9pbmZvOworKwkJWDUwOV9OQU1FX0VOVFJZX2NyZWF0ZV9ieV90eHQ7CisrCQlBU04xX1NUUklOR19nZXRfZGVmYXVsdF9tYXNrOworKwkJWDUwOV9hbGlhc19nZXQwOworKwkJQVNOMV9TVFJJTkdfZGF0YTsKKysJCWkyZF9BQ0NFU1NfREVTQ1JJUFRJT047CisrCQlYNTA5X3RydXN0X3NldF9iaXQ7CisrCQlBU04xX0JJVF9TVFJJTkdfZnJlZTsKKysJCVBFTV9yZWFkX2Jpb19SU0FfUFVCS0VZOworKwkJWDUwOV9hZGQxX3JlamVjdF9vYmplY3Q7CisrCQlYNTA5X2NoZWNrX3RydXN0OworKwkJUEVNX3JlYWRfYmlvX0RTQV9QVUJLRVk7CisrCQlYNTA5X1BVUlBPU0VfYWRkOworKwkJQVNOMV9TVFJJTkdfVEFCTEVfZ2V0OworKwkJQVNOMV9VVEY4U1RSSU5HX2ZyZWU7CisrCQlkMmlfRFNBX1BVQktFWV9iaW87CisrCQlQRU1fd3JpdGVfUlNBX1BVQktFWTsKKysJCWQyaV9PVEhFUk5BTUU7CisrCQlYNTA5X3JlamVjdF9zZXRfYml0OworKwkJUEVNX3dyaXRlX0RTQV9QVUJLRVk7CisrCQlYNTA5X1BVUlBPU0VfZ2V0MF9zbmFtZTsKKysJCUVWUF9QS0VZX3NldDFfREg7CisrCQlBU04xX09DVEVUX1NUUklOR19kdXA7CisrCQlBU04xX0JJVF9TVFJJTkdfc2V0OworKwkJWDUwOV9UUlVTVF9nZXRfY291bnQ7CisrCQlBU04xX0lOVEVHRVJfZnJlZTsKKysJCU9USEVSTkFNRV9mcmVlOworKwkJaTJkX1JTQV9QVUJLRVlfZnA7CisrCQlBU04xX0lOVEVHRVJfZHVwOworKwkJZDJpX1g1MDlfQ0VSVF9BVVg7CisrCQlQRU1fd3JpdGVfYmlvX1BVQktFWTsKKysJCUFTTjFfVklTSUJMRVNUUklOR19mcmVlOworKwkJWDUwOV9QVVJQT1NFX2NsZWFudXA7CisrCQlBU04xX21ic3RyaW5nX25jb3B5OworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfbmV3OworKwkJRVZQX1BLRVlfZ2V0MV9ESDsKKysJCUFTTjFfT0NURVRfU1RSSU5HX25ldzsKKysJCUFTTjFfSU5URUdFUl9uZXc7CisrCQlpMmRfWDUwOV9BVVg7CisrCQlBU04xX0JJVF9TVFJJTkdfbmFtZV9wcmludDsKKysJCVg1MDlfY21wOworKwkJQVNOMV9TVFJJTkdfbGVuZ3RoX3NldDsKKysJCURJUkVDVE9SWVNUUklOR19uZXc7CisrCQlYNTA5X2FkZDFfdHJ1c3Rfb2JqZWN0OworKwkJUEtDUzEyX25ld3Bhc3M7CisrCQlTTUlNRV93cml0ZV9QS0NTNzsKKysJCVNNSU1FX3JlYWRfUEtDUzc7CisrCQlERVNfc2V0X2tleV9jaGVja2VkOworKwkJUEtDUzdfdmVyaWZ5OworKwkJUEtDUzdfZW5jcnlwdDsKKysJCURFU19zZXRfa2V5X3VuY2hlY2tlZDsKKysJCVNNSU1FX2NybGZfY29weTsKKysJCWkyZF9BU04xX1BSSU5UQUJMRVNUUklORzsKKysJCVBLQ1M3X2dldDBfc2lnbmVyczsKKysJCVBLQ1M3X2RlY3J5cHQ7CisrCQlTTUlNRV90ZXh0OworKwkJUEtDUzdfc2ltcGxlX3NtaW1lY2FwOworKwkJUEtDUzdfZ2V0X3NtaW1lY2FwOworKwkJUEtDUzdfc2lnbjsKKysJCVBLQ1M3X2FkZF9hdHRyaWJfc21pbWVjYXA7CisrCQlDUllQVE9fZGJnX3NldF9vcHRpb25zOworKwkJQ1JZUFRPX3JlbW92ZV9hbGxfaW5mbzsKKysJCUNSWVBUT19nZXRfbWVtX2RlYnVnX2Z1bmN0aW9uczsKKysJCUNSWVBUT19pc19tZW1fY2hlY2tfb247CisrCQlDUllQVE9fc2V0X21lbV9kZWJ1Z19mdW5jdGlvbnM7CisrCQlDUllQVE9fcG9wX2luZm87CisrCQlDUllQVE9fcHVzaF9pbmZvXzsKKysJCUNSWVBUT19zZXRfbWVtX2RlYnVnX29wdGlvbnM7CisrCQlQRU1fd3JpdGVfUEtDUzhQcml2YXRlS2V5X25pZDsKKysJCVBFTV93cml0ZV9iaW9fUEtDUzhQcml2YXRlS2V5X25pZDsKKysJCVBFTV93cml0ZV9iaW9fUEtDUzhQcml2S2V5X25pZDsKKysJCWQyaV9QS0NTOFByaXZhdGVLZXlfYmlvOworKwkJQVNOMV9OVUxMX2ZyZWU7CisrCQlkMmlfQVNOMV9OVUxMOworKwkJQVNOMV9OVUxMX25ldzsKKysJCWkyZF9QS0NTOFByaXZhdGVLZXlfYmlvOworKwkJaTJkX1BLQ1M4UHJpdmF0ZUtleV9mcDsKKysJCWkyZF9BU04xX05VTEw7CisrCQlpMmRfUEtDUzhQcml2YXRlS2V5X25pZF9mcDsKKysJCWQyaV9QS0NTOFByaXZhdGVLZXlfZnA7CisrCQlpMmRfUEtDUzhQcml2YXRlS2V5X25pZF9iaW87CisrCQlpMmRfUEtDUzhQcml2YXRlS2V5SW5mb19mcDsKKysJCWkyZF9QS0NTOFByaXZhdGVLZXlJbmZvX2JpbzsKKysJCVBFTV9jYjsKKysJCWkyZF9Qcml2YXRlS2V5X2ZwOworKwkJZDJpX1ByaXZhdGVLZXlfYmlvOworKwkJZDJpX1ByaXZhdGVLZXlfZnA7CisrCQlpMmRfUHJpdmF0ZUtleV9iaW87CisrCQlYNTA5X3JlamVjdF9jbGVhcjsKKysJCVg1MDlfVFJVU1Rfc2V0X2RlZmF1bHQ7CisrCQlkMmlfQXV0b1ByaXZhdGVLZXk7CisrCQlYNTA5X0FUVFJJQlVURV9nZXQwX3R5cGU7CisrCQlYNTA5X0FUVFJJQlVURV9zZXQxX2RhdGE7CisrCQlYNTA5YXRfZ2V0X2F0dHI7CisrCQlYNTA5YXRfZ2V0X2F0dHJfY291bnQ7CisrCQlYNTA5X0FUVFJJQlVURV9jcmVhdGVfYnlfTklEOworKwkJWDUwOV9BVFRSSUJVVEVfc2V0MV9vYmplY3Q7CisrCQlYNTA5X0FUVFJJQlVURV9jb3VudDsKKysJCVg1MDlfQVRUUklCVVRFX2NyZWF0ZV9ieV9PQko7CisrCQlYNTA5X0FUVFJJQlVURV9nZXQwX29iamVjdDsKKysJCVg1MDlhdF9nZXRfYXR0cl9ieV9OSUQ7CisrCQlYNTA5YXRfYWRkMV9hdHRyOworKwkJWDUwOV9BVFRSSUJVVEVfZ2V0MF9kYXRhOworKwkJWDUwOWF0X2RlbGV0ZV9hdHRyOworKwkJWDUwOWF0X2dldF9hdHRyX2J5X09CSjsKKysJCVJBTkRfYWRkOworKwkJQklPX251bWJlcl93cml0dGVuOworKwkJQklPX251bWJlcl9yZWFkOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MV9jaGFpbjsKKysJCUVSUl9sb2FkX1JBTkRfc3RyaW5nczsKKysJCVJBTkRfcHNldWRvX2J5dGVzOworKwkJWDUwOV9SRVFfZ2V0X2F0dHJfYnlfTklEOworKwkJWDUwOV9SRVFfZ2V0X2F0dHI7CisrCQlYNTA5X1JFUV9hZGQxX2F0dHJfYnlfTklEOworKwkJWDUwOV9SRVFfZ2V0X2F0dHJfYnlfT0JKOworKwkJWDUwOWF0X2FkZDFfYXR0cl9ieV9OSUQ7CisrCQlYNTA5X1JFUV9hZGQxX2F0dHJfYnlfT0JKOworKwkJWDUwOV9SRVFfZ2V0X2F0dHJfY291bnQ7CisrCQlYNTA5X1JFUV9hZGQxX2F0dHI7CisrCQlYNTA5X1JFUV9kZWxldGVfYXR0cjsKKysJCVg1MDlhdF9hZGQxX2F0dHJfYnlfT0JKOworKwkJWDUwOV9SRVFfYWRkMV9hdHRyX2J5X3R4dDsKKysJCVg1MDlfQVRUUklCVVRFX2NyZWF0ZV9ieV90eHQ7CisrCQlYNTA5YXRfYWRkMV9hdHRyX2J5X3R4dDsKKysJCUJOX3BzZXVkb19yYW5kOworKwkJQk5faXNfcHJpbWVfZmFzdHRlc3Q7CisrCQlCTl9DVFhfZW5kOworKwkJQk5fQ1RYX3N0YXJ0OworKwkJQk5fQ1RYX2dldDsKKysJCUVWUF9QS0VZMlBLQ1M4X2Jyb2tlbjsKKysJCUFTTjFfU1RSSU5HX1RBQkxFX2FkZDsKKysJCUNSWVBUT19kYmdfZ2V0X29wdGlvbnM7CisrCQlBVVRIT1JJVFlfSU5GT19BQ0NFU1NfbmV3OworKwkJQ1JZUFRPX2dldF9tZW1fZGVidWdfb3B0aW9uczsKKysJCURFU19jcnlwdDsKKysJCVBFTV93cml0ZV9iaW9fWDUwOV9SRVFfTkVXOworKwkJUEVNX3dyaXRlX1g1MDlfUkVRX05FVzsKKysJCUJJT19jYWxsYmFja19jdHJsOworKwkJUkFORF9lZ2Q7CisrCQlSQU5EX3N0YXR1czsKKysJCWJuX2R1bXAxOworKwkJREVTX2NoZWNrX2tleV9wYXJpdHk7CisrCQlsaF9udW1faXRlbXM7CisrCQlSQU5EX2V2ZW50OworKwkJRFNPX25ldzsKKysJCURTT19uZXdfbWV0aG9kOworKwkJRFNPX2ZyZWU7CisrCQlEU09fZmxhZ3M7CisrCQlEU09fdXA7CisrCQlEU09fc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJRFNPX2dldF9kZWZhdWx0X21ldGhvZDsKKysJCURTT19nZXRfbWV0aG9kOworKwkJRFNPX3NldF9tZXRob2Q7CisrCQlEU09fbG9hZDsKKysJCURTT19iaW5kX3ZhcjsKKysJCURTT19NRVRIT0RfbnVsbDsKKysJCURTT19NRVRIT0Rfb3BlbnNzbDsKKysJCURTT19NRVRIT0RfZGxmY247CisrCQlEU09fTUVUSE9EX3dpbjMyOworKwkJRVJSX2xvYWRfRFNPX3N0cmluZ3M7CisrCQlEU09fTUVUSE9EX2RsOworKwkJTkNPTkZfbG9hZDsKKysJCU5DT05GX2xvYWRfZnA7CisrCQlOQ09ORl9uZXc7CisrCQlOQ09ORl9nZXRfc3RyaW5nOworKwkJTkNPTkZfZnJlZTsKKysJCU5DT05GX2dldF9udW1iZXI7CisrCQlDT05GX2R1bXBfZnA7CisrCQlOQ09ORl9sb2FkX2JpbzsKKysJCU5DT05GX2R1bXBfZnA7CisrCQlOQ09ORl9nZXRfc2VjdGlvbjsKKysJCU5DT05GX2R1bXBfYmlvOworKwkJQ09ORl9kdW1wX2JpbzsKKysJCU5DT05GX2ZyZWVfZGF0YTsKKysJCUNPTkZfc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJRVJSX2Vycm9yX3N0cmluZ19uOworKwkJQklPX3NucHJpbnRmOworKwkJRFNPX2N0cmw7CisrCQlpMmRfQVNOMV9TRVRfT0ZfQVNOMV9JTlRFR0VSOworKwkJaTJkX0FTTjFfU0VUX09GX1BLQ1MxMl9TQUZFQkFHOworKwkJaTJkX0FTTjFfU0VUX09GX1BLQ1M3OworKwkJQklPX3ZmcmVlOworKwkJZDJpX0FTTjFfU0VUX09GX0FTTjFfSU5URUdFUjsKKysJCWQyaV9BU04xX1NFVF9PRl9QS0NTMTJfU0FGRUJBRzsKKysJCUFTTjFfVVRDVElNRV9nZXQ7CisrCQlYNTA5X1JFUV9kaWdlc3Q7CisrCQlYNTA5X0NSTF9kaWdlc3Q7CisrCQlkMmlfQVNOMV9TRVRfT0ZfUEtDUzc7CisrCQlFVlBfQ0lQSEVSX0NUWF9zZXRfa2V5X2xlbmd0aDsKKysJCUVWUF9DSVBIRVJfQ1RYX2N0cmw7CisrCQlCTl9tb2RfZXhwX21vbnRfd29yZDsKKysJCVJBTkRfZWdkX2J5dGVzOworKwkJWDUwOV9SRVFfZ2V0MV9lbWFpbDsKKysJCVg1MDlfZ2V0MV9lbWFpbDsKKysJCVg1MDlfZW1haWxfZnJlZTsKKysJCWkyZF9SU0FfTkVUOworKwkJZDJpX1JTQV9ORVRfMjsKKysJCWQyaV9SU0FfTkVUOworKwkJRFNPX2JpbmRfZnVuYzsKKysJCUNSWVBUT19nZXRfbmV3X2R5bmxvY2tpZDsKKysJCXNrX25ld19udWxsOworKwkJQ1JZUFRPX3NldF9keW5sb2NrX2Rlc3Ryb3lfY2FsbGJhY2s7CisrCQlDUllQVE9fc2V0X2R5bmxvY2tfZGVzdHJveV9jYjsKKysJCUNSWVBUT19kZXN0cm95X2R5bmxvY2tpZDsKKysJCUNSWVBUT19zZXRfZHlubG9ja19zaXplOworKwkJQ1JZUFRPX3NldF9keW5sb2NrX2NyZWF0ZV9jYWxsYmFjazsKKysJCUNSWVBUT19zZXRfZHlubG9ja19jcmVhdGVfY2I7CisrCQlDUllQVE9fc2V0X2R5bmxvY2tfbG9ja19jYWxsYmFjazsKKysJCUNSWVBUT19zZXRfZHlubG9ja19sb2NrX2NiOworKwkJQ1JZUFRPX2dldF9keW5sb2NrX2xvY2tfY2FsbGJhY2s7CisrCQlDUllQVE9fZ2V0X2R5bmxvY2tfbG9ja19jYjsKKysJCUNSWVBUT19nZXRfZHlubG9ja19kZXN0cm95X2NhbGxiYWNrOworKwkJQ1JZUFRPX2dldF9keW5sb2NrX2Rlc3Ryb3lfY2I7CisrCQlDUllQVE9fZ2V0X2R5bmxvY2tfdmFsdWU7CisrCQlDUllQVE9fZ2V0X2R5bmxvY2tfY3JlYXRlX2NhbGxiYWNrOworKwkJQ1JZUFRPX2dldF9keW5sb2NrX2NyZWF0ZV9jYjsKKysJCWMyaV9BU04xX0JJVF9TVFJJTkc7CisrCQlpMmNfQVNOMV9CSVRfU1RSSU5HOworKwkJUkFORF9wb2xsOworKwkJYzJpX0FTTjFfSU5URUdFUjsKKysJCWkyY19BU04xX0lOVEVHRVI7CisrCQlCSU9fZHVtcF9pbmRlbnQ7CisrCQlBU04xX3BhcnNlX2R1bXA7CisrCQljMmlfQVNOMV9PQkpFQ1Q7CisrCQlYNTA5X05BTUVfcHJpbnRfZXhfZnA7CisrCQlBU04xX1NUUklOR19wcmludF9leF9mcDsKKysJCVg1MDlfTkFNRV9wcmludF9leDsKKysJCUFTTjFfU1RSSU5HX3ByaW50X2V4OworKwkJTUQ0OworKwkJTUQ0X1RyYW5zZm9ybTsKKysJCU1ENF9GaW5hbDsKKysJCU1ENF9VcGRhdGU7CisrCQlNRDRfSW5pdDsKKysJCUVWUF9tZDQ7CisrCQlpMmRfUFVCS0VZX2JpbzsKKysJCWkyZF9QVUJLRVlfZnA7CisrCQlkMmlfUFVCS0VZX2JpbzsKKysJCUFTTjFfU1RSSU5HX3RvX1VURjg7CisrCQlCSU9fdnByaW50ZjsKKysJCUJJT192c25wcmludGY7CisrCQlkMmlfUFVCS0VZX2ZwOworKwkJWDUwOV9jbXBfdGltZTsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF90aW1lOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MV9pc3N1ZXI7CisrCQlYNTA5X09CSkVDVF9yZXRyaWV2ZV9tYXRjaDsKKysJCVg1MDlfT0JKRUNUX2lkeF9ieV9zdWJqZWN0OworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2ZsYWdzOworKwkJWDUwOV9TVE9SRV9DVFhfdHJ1c3RlZF9zdGFjazsKKysJCVg1MDlfdGltZV9hZGo7CisrCQlYNTA5X2NoZWNrX2lzc3VlZDsKKysJCUFTTjFfVVRDVElNRV9jbXBfdGltZV90OworKwkJREVTX3NldF93ZWFrX2tleV9mbGFnOworKwkJREVTX2NoZWNrX2tleTsKKysJCURFU19yd19tb2RlOworKwkJUlNBX1BLQ1MxX1JTQXJlZjsKKysJCVg1MDlfa2V5aWRfc2V0MTsKKysJCUJJT19uZXh0OworKwkJRFNPX01FVEhPRF92bXM7CisrCQlCSU9fZl9saW5lYnVmZmVyOworKwkJQk5fYm50ZXN0X3JhbmQ7CisrCQlPUEVOU1NMX2lzc2V0dWdpZDsKKysJCUJOX3JhbmRfcmFuZ2U7CisrCQlFUlJfbG9hZF9FTkdJTkVfc3RyaW5nczsKKysJCUVOR0lORV9zZXRfRFNBOworKwkJRU5HSU5FX2dldF9maW5pc2hfZnVuY3Rpb247CisrCQlFTkdJTkVfZ2V0X2RlZmF1bHRfUlNBOworKwkJRU5HSU5FX2dldF9CTl9tb2RfZXhwOworKwkJRFNBX2dldF9kZWZhdWx0X29wZW5zc2xfbWV0aG9kOworKwkJRU5HSU5FX3NldF9ESDsKKysJCUVOR0lORV9zZXRfZGVmX0JOX21vZF9leHBfY3J0OworKwkJRU5HSU5FX3NldF9kZWZhdWx0X0JOX21vZF9leHBfY3J0OworKwkJRU5HSU5FX2luaXQ7CisrCQlESF9nZXRfZGVmYXVsdF9vcGVuc3NsX21ldGhvZDsKKysJCVJTQV9zZXRfZGVmYXVsdF9vcGVuc3NsX21ldGhvZDsKKysJCUVOR0lORV9maW5pc2g7CisrCQlFTkdJTkVfbG9hZF9wdWJsaWNfa2V5OworKwkJRU5HSU5FX2dldF9ESDsKKysJCUVOR0lORV9jdHJsOworKwkJRU5HSU5FX2dldF9pbml0X2Z1bmN0aW9uOworKwkJRU5HSU5FX3NldF9pbml0X2Z1bmN0aW9uOworKwkJRU5HSU5FX3NldF9kZWZhdWx0X0RTQTsKKysJCUVOR0lORV9nZXRfbmFtZTsKKysJCUVOR0lORV9nZXRfbGFzdDsKKysJCUVOR0lORV9nZXRfcHJldjsKKysJCUVOR0lORV9nZXRfZGVmYXVsdF9ESDsKKysJCUVOR0lORV9nZXRfUlNBOworKwkJRU5HSU5FX3NldF9kZWZhdWx0OworKwkJRU5HSU5FX2dldF9SQU5EOworKwkJRU5HSU5FX2dldF9maXJzdDsKKysJCUVOR0lORV9ieV9pZDsKKysJCUVOR0lORV9zZXRfZmluaXNoX2Z1bmN0aW9uOworKwkJRU5HSU5FX2dldF9kZWZfQk5fbW9kX2V4cF9jcnQ7CisrCQlFTkdJTkVfZ2V0X2RlZmF1bHRfQk5fbW9kX2V4cF9jcnQ7CisrCQlSU0FfZ2V0X2RlZmF1bHRfb3BlbnNzbF9tZXRob2Q7CisrCQlFTkdJTkVfc2V0X1JTQTsKKysJCUVOR0lORV9sb2FkX3ByaXZhdGVfa2V5OworKwkJRU5HSU5FX3NldF9kZWZhdWx0X1JBTkQ7CisrCQlFTkdJTkVfc2V0X0JOX21vZF9leHA7CisrCQlFTkdJTkVfcmVtb3ZlOworKwkJRU5HSU5FX2ZyZWU7CisrCQlFTkdJTkVfZ2V0X0JOX21vZF9leHBfY3J0OworKwkJRU5HSU5FX2dldF9uZXh0OworKwkJRU5HSU5FX3NldF9uYW1lOworKwkJRU5HSU5FX2dldF9kZWZhdWx0X0RTQTsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9CTl9tb2RfZXhwOworKwkJRU5HSU5FX3NldF9kZWZhdWx0X1JTQTsKKysJCUVOR0lORV9nZXRfZGVmYXVsdF9SQU5EOworKwkJRU5HSU5FX2dldF9kZWZhdWx0X0JOX21vZF9leHA7CisrCQlFTkdJTkVfc2V0X1JBTkQ7CisrCQlFTkdJTkVfc2V0X2lkOworKwkJRU5HSU5FX3NldF9CTl9tb2RfZXhwX2NydDsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9ESDsKKysJCUVOR0lORV9uZXc7CisrCQlFTkdJTkVfZ2V0X2lkOworKwkJRFNBX3NldF9kZWZhdWx0X29wZW5zc2xfbWV0aG9kOworKwkJRU5HSU5FX2FkZDsKKysJCURIX3NldF9kZWZhdWx0X29wZW5zc2xfbWV0aG9kOworKwkJRU5HSU5FX2dldF9EU0E7CisrCQlFTkdJTkVfZ2V0X2N0cmxfZnVuY3Rpb247CisrCQlFTkdJTkVfc2V0X2N0cmxfZnVuY3Rpb247CisrCQlCTl9wc2V1ZG9fcmFuZF9yYW5nZTsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF92ZXJpZnlfY2I7CisrCQlFUlJfbG9hZF9DT01QX3N0cmluZ3M7CisrCQlQS0NTMTJfaXRlbV9kZWNyeXB0X2QyaTsKKysJCUFTTjFfVVRGOFNUUklOR19pdDsKKysJCUVOR0lORV91bnJlZ2lzdGVyX2NpcGhlcnM7CisrCQlFTkdJTkVfZ2V0X2NpcGhlcnM7CisrCQlkMmlfT0NTUF9CQVNJQ1JFU1A7CisrCQlLUkI1X0NIRUNLU1VNX2l0OworKwkJRUNfUE9JTlRfYWRkOworKwkJQVNOMV9pdGVtX2V4X2kyZDsKKysJCU9DU1BfQ0VSVElEX2l0OworKwkJZDJpX09DU1BfUkVTUEJZVEVTOworKwkJWDUwOVYzX2FkZDFfaTJkOworKwkJUEtDUzdfRU5WRUxPUEVfaXQ7CisrCQlVSV9hZGRfaW5wdXRfYm9vbGVhbjsKKysJCUVOR0lORV91bnJlZ2lzdGVyX1JTQTsKKysJCVg1MDlWM19FWFRfbmNvbmY7CisrCQlBU04xX0dFTkVSQUxTVFJJTkdfZnJlZTsKKysJCWQyaV9PQ1NQX0NFUlRTVEFUVVM7CisrCQlYNTA5X1JFVk9LRURfc2V0X3NlcmlhbE51bWJlcjsKKysJCVg1MDlfcHJpbnRfZXg7CisrCQlPQ1NQX09ORVJFUV9nZXQxX2V4dF9kMmk7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX1JBTkQ7CisrCQlFTkdJTkVfbG9hZF9keW5hbWljOworKwkJUEJLREYyUEFSQU1faXQ7CisrCQlFWFRFTkRFRF9LRVlfVVNBR0VfbmV3OworKwkJRUNfR1JPVVBfY2xlYXJfZnJlZTsKKysJCU9DU1Bfc2VuZHJlcV9iaW87CisrCQlBU04xX2l0ZW1fZGlnZXN0OworKwkJT0NTUF9CQVNJQ1JFU1BfZGVsZXRlX2V4dDsKKysJCU9DU1BfU0lHTkFUVVJFX2l0OworKwkJWDUwOV9DUkxfaXQ7CisrCQlPQ1NQX0JBU0lDUkVTUF9hZGRfZXh0OworKwkJS1JCNV9FTkNLRVlfaXQ7CisrCQlVSV9tZXRob2Rfc2V0X2Nsb3NlcjsKKysJCVg1MDlfU1RPUkVfc2V0X3B1cnBvc2U7CisrCQlpMmRfQVNOMV9HRU5FUkFMU1RSSU5HOworKwkJT0NTUF9yZXNwb25zZV9zdGF0dXM7CisrCQlpMmRfT0NTUF9TRVJWSUNFTE9DOworKwkJRU5HSU5FX2dldF9kaWdlc3RfZW5naW5lOworKwkJRUNfR1JPVVBfc2V0X2N1cnZlX0dGcDsKKysJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2J5X09CSjsKKysJCV9vc3NsX29sZF9kZXNfcmFuZG9tX2tleTsKKysJCUFTTjFfVDYxU1RSSU5HX2l0OworKwkJRUNfR1JPVVBfbWV0aG9kX29mOworKwkJaTJkX0tSQjVfQVBSRVE7CisrCQlfb3NzbF9vbGRfZGVzX2VuY3J5cHQ7CisrCQlBU04xX1BSSU5UQUJMRV9uZXc7CisrCQlITUFDX0luaXRfZXg7CisrCQlkMmlfS1JCNV9BVVRIRU5UOworKwkJT0NTUF9hcmNoaXZlX2N1dG9mZl9uZXc7CisrCQlFQ19QT0lOVF9zZXRfSnByb2plY3RpdmVfY29vcmRpbmF0ZXNfR0ZwOworKwkJRUNfUE9JTlRfc2V0X0pwcm9qX2Nvb3Jkc19HRnA7CisrCQlfb3NzbF9vbGRfZGVzX2lzX3dlYWtfa2V5OworKwkJT0NTUF9CQVNJQ1JFU1BfZ2V0X2V4dF9ieV9PQko7CisrCQlFQ19QT0lOVF9vY3QycG9pbnQ7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZ2V0X2V4dF9jb3VudDsKKysJCVVJX2N0cmw7CisrCQlfc2hhZG93X0RFU19yd19tb2RlOworKwkJYXNuMV9kb19hZGI7CisrCQlBU04xX3RlbXBsYXRlX2kyZDsKKysJCUVOR0lORV9yZWdpc3Rlcl9ESDsKKysJCVVJX2NvbnN0cnVjdF9wcm9tcHQ7CisrCQlYNTA5X1NUT1JFX3NldF90cnVzdDsKKysJCVVJX2R1cF9pbnB1dF9zdHJpbmc7CisrCQlkMmlfS1JCNV9BUFJFUTsKKysJCUVWUF9NRF9DVFhfY29weV9leDsKKysJCU9DU1BfcmVxdWVzdF9pc19zaWduZWQ7CisrCQlpMmRfT0NTUF9SRVFJTkZPOworKwkJS1JCNV9FTkNLRVlfZnJlZTsKKysJCU9DU1BfcmVzcF9nZXQwOworKwkJR0VORVJBTF9OQU1FX2l0OworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfaXQ7CisrCQlYNTA5X1NUT1JFX3NldF9mbGFnczsKKysJCUVDX1BPSU5UX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzX0dGcDsKKysJCUVDX1BPSU5UX3NldF9jb21wcl9jb29yZHNfR0ZwOworKwkJT0NTUF9yZXNwb25zZV9zdGF0dXNfc3RyOworKwkJZDJpX09DU1BfUkVWT0tFRElORk87CisrCQlPQ1NQX2Jhc2ljX2FkZDFfY2VydDsKKysJCUVSUl9nZXRfaW1wbGVtZW50YXRpb247CisrCQlFVlBfQ2lwaGVyRmluYWxfZXg7CisrCQlPQ1NQX0NFUlRTVEFUVVNfbmV3OworKwkJQ1JZUFRPX2NsZWFudXBfYWxsX2V4X2RhdGE7CisrCQlPQ1NQX3Jlc3BfZmluZDsKKysJCUJOX25ubW9kOworKwkJWDUwOV9DUkxfc29ydDsKKysJCVg1MDlfUkVWT0tFRF9zZXRfcmV2b2NhdGlvbkRhdGU7CisrCQlFTkdJTkVfcmVnaXN0ZXJfUkFORDsKKysJCU9DU1BfU0VSVklDRUxPQ19uZXc7CisrCQlFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGcDsKKysJCUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRzX0dGcDsKKysJCV9vc3NsX29sZF9kZXNfb3B0aW9uczsKKysJCVNYTkVUX2l0OworKwkJVUlfZHVwX2lucHV0X2Jvb2xlYW47CisrCQlQS0NTMTJfYWRkX0NTUE5hbWVfYXNjOworKwkJRUNfUE9JTlRfaXNfYXRfaW5maW5pdHk7CisrCQlFTkdJTkVfbG9hZF9jcnlwdG9kZXY7CisrCQlEU09fY29udmVydF9maWxlbmFtZTsKKysJCVBPTElDWVFVQUxJTkZPX2l0OworKwkJRU5HSU5FX3JlZ2lzdGVyX2NpcGhlcnM7CisrCQlCTl9tb2RfbHNoaWZ0X3F1aWNrOworKwkJRFNPX3NldF9maWxlbmFtZTsKKysJCUFTTjFfaXRlbV9mcmVlOworKwkJS1JCNV9US1RCT0RZX2ZyZWU7CisrCQlBVVRIT1JJVFlfS0VZSURfaXQ7CisrCQlLUkI1X0FQUkVRQk9EWV9uZXc7CisrCQlYNTA5VjNfRVhUX1JFUV9hZGRfbmNvbmY7CisrCQlFTkdJTkVfY3RybF9jbWRfc3RyaW5nOworKwkJaTJkX09DU1BfUkVTUERBVEE7CisrCQlFVlBfTURfQ1RYX2luaXQ7CisrCQlFWFRFTkRFRF9LRVlfVVNBR0VfZnJlZTsKKysJCVBLQ1M3X0FUVFJfU0lHTl9pdDsKKysJCVVJX2FkZF9lcnJvcl9zdHJpbmc7CisrCQlLUkI1X0NIRUNLU1VNX2ZyZWU7CisrCQlPQ1NQX1JFUVVFU1RfZ2V0X2V4dDsKKysJCUVOR0lORV9sb2FkX3Vic2VjOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9kaWdlc3RzOworKwkJUEtFWV9VU0FHRV9QRVJJT0RfaXQ7CisrCQlQS0NTMTJfdW5wYWNrX2F1dGhzYWZlczsKKysJCUFTTjFfaXRlbV91bnBhY2s7CisrCQlORVRTQ0FQRV9TUEtBQ19pdDsKKysJCVg1MDlfUkVWT0tFRF9pdDsKKysJCUFTTjFfU1RSSU5HX2VuY29kZTsKKysJCUVWUF9hZXNfMTI4X2VjYjsKKysJCUtSQjVfQVVUSEVOVF9mcmVlOworKwkJT0NTUF9CQVNJQ1JFU1BfZ2V0X2V4dF9ieV9jcml0aWNhbDsKKysJCU9DU1BfQkFTSUNSRVNQX2dldF9leHRfYnlfY3JpdDsKKysJCU9DU1BfY2VydF9zdGF0dXNfc3RyOworKwkJZDJpX09DU1BfUkVRVUVTVDsKKysJCVVJX2R1cF9pbmZvX3N0cmluZzsKKysJCV9vc3NsX29sZF9kZXNfeHdoaXRlX2luMm91dDsKKysJCVBLQ1MxMl9pdDsKKysJCU9DU1BfU0lOR0xFUkVTUF9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJT0NTUF9TSU5HTEVSRVNQX2dldF9leHRfYnlfY3JpdDsKKysJCU9DU1BfQ0VSVFNUQVRVU19mcmVlOworKwkJX29zc2xfb2xkX2Rlc19jcnlwdDsKKysJCUFTTjFfaXRlbV9pMmQ7CisrCQlFVlBfRGVjcnlwdEZpbmFsX2V4OworKwkJRU5HSU5FX2xvYWRfb3BlbnNzbDsKKysJCUVOR0lORV9nZXRfY21kX2RlZm5zOworKwkJRU5HSU5FX3NldF9sb2FkX3ByaXZrZXlfZnVuY3Rpb247CisrCQlFTkdJTkVfc2V0X2xvYWRfcHJpdmtleV9mbjsKKysJCUVWUF9FbmNyeXB0RmluYWxfZXg7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfZGlnZXN0czsKKysJCVg1MDlfZ2V0MF9wdWJrZXlfYml0c3RyOworKwkJYXNuMV9leF9pMmM7CisrCQlFTkdJTkVfcmVnaXN0ZXJfUlNBOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfRFNBOworKwkJX29zc2xfb2xkX2Rlc19rZXlfc2NoZWQ7CisrCQlYNTA5X0VYVEVOU0lPTl9pdDsKKysJCWkyZF9LUkI1X0FVVEhFTlQ7CisrCQlTWE5FVElEX2l0OworKwkJZDJpX09DU1BfU0lOR0xFUkVTUDsKKysJCUVESVBBUlRZTkFNRV9uZXc7CisrCQlQS0NTMTJfY2VydGJhZzJ4NTA5OworKwkJX29zc2xfb2xkX2Rlc19vZmI2NF9lbmNyeXB0OworKwkJZDJpX0VYVEVOREVEX0tFWV9VU0FHRTsKKysJCUVSUl9wcmludF9lcnJvcnNfY2I7CisrCQlFTkdJTkVfc2V0X2NpcGhlcnM7CisrCQlkMmlfS1JCNV9BUFJFUUJPRFk7CisrCQlVSV9tZXRob2RfZ2V0X2ZsdXNoZXI7CisrCQlYNTA5X1BVQktFWV9pdDsKKysJCV9vc3NsX29sZF9kZXNfZW5jX3JlYWQ7CisrCQlQS0NTN19FTkNSWVBUX2l0OworKwkJaTJkX09DU1BfUkVTUE9OU0U7CisrCQlFQ19HUk9VUF9nZXRfY29mYWN0b3I7CisrCQlQS0NTMTJfdW5wYWNrX3A3ZGF0YTsKKysJCWQyaV9LUkI1X0FVVEhEQVRBOworKwkJT0NTUF9jb3B5X25vbmNlOworKwkJS1JCNV9BVVRIREFUQV9uZXc7CisrCQlPQ1NQX1JFU1BEQVRBX25ldzsKKysJCUVDX0dGcF9tb250X21ldGhvZDsKKysJCU9DU1BfUkVWT0tFRElORk9fZnJlZTsKKysJCVVJX2dldF9leF9kYXRhOworKwkJS1JCNV9BUFJFUUJPRFlfZnJlZTsKKysJCUVDX0dST1VQX2dldDBfZ2VuZXJhdG9yOworKwkJVUlfZ2V0X2RlZmF1bHRfbWV0aG9kOworKwkJWDUwOVYzX3NldF9uY29uZjsKKysJCVBLQ1MxMl9pdGVtX2kyZF9lbmNyeXB0OworKwkJWDUwOV9hZGQxX2V4dF9pMmQ7CisrCQlQS0NTN19TSUdORVJfSU5GT19pdDsKKysJCUtSQjVfUFJJTkNOQU1FX25ldzsKKysJCVBLQ1MxMl9TQUZFQkFHX2l0OworKwkJRUNfR1JPVVBfZ2V0X29yZGVyOworKwkJZDJpX09DU1BfUkVTUElEOworKwkJT0NTUF9yZXF1ZXN0X3ZlcmlmeTsKKysJCU5DT05GX2dldF9udW1iZXJfZTsKKysJCV9vc3NsX29sZF9kZXNfZGVjcnlwdDM7CisrCQlYNTA5X3NpZ25hdHVyZV9wcmludDsKKysJCU9DU1BfU0lOR0xFUkVTUF9mcmVlOworKwkJRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzOworKwkJaTJkX09DU1BfT05FUkVROworKwkJT0NTUF9SRVFVRVNUX2FkZF9leHQ7CisrCQlPQ1NQX1JFU1BCWVRFU19uZXc7CisrCQlFVlBfTURfQ1RYX2NyZWF0ZTsKKysJCU9DU1BfcmVzcF9maW5kX3N0YXR1czsKKysJCVg1MDlfQUxHT1JfaXQ7CisrCQlBU04xX1RJTUVfaXQ7CisrCQlPQ1NQX3JlcXVlc3Rfc2V0MV9uYW1lOworKwkJT0NTUF9PTkVSRVFfZ2V0X2V4dF9jb3VudDsKKysJCVVJX2dldDBfcmVzdWx0OworKwkJUEtDUzEyX0FVVEhTQUZFU19pdDsKKysJCUVWUF9hZXNfMjU2X2VjYjsKKysJCVBLQ1MxMl9wYWNrX2F1dGhzYWZlczsKKysJCUFTTjFfSUE1U1RSSU5HX2l0OworKwkJVUlfZ2V0X2lucHV0X2ZsYWdzOworKwkJRUNfR1JPVVBfc2V0X2dlbmVyYXRvcjsKKysJCV9vc3NsX29sZF9kZXNfc3RyaW5nX3RvXzJrZXlzOworKwkJT0NTUF9DRVJUSURfZnJlZTsKKysJCVg1MDlfQ0VSVF9BVVhfaXQ7CisrCQlDRVJUSUZJQ0FURVBPTElDSUVTX2l0OworKwkJX29zc2xfb2xkX2Rlc19lZGUzX2NiY19lbmNyeXB0OworKwkJUkFORF9zZXRfcmFuZF9lbmdpbmU7CisrCQlEU09fZ2V0X2xvYWRlZF9maWxlbmFtZTsKKysJCVg1MDlfQVRUUklCVVRFX2l0OworKwkJT0NTUF9PTkVSRVFfZ2V0X2V4dF9ieV9OSUQ7CisrCQlQS0NTMTJfZGVjcnlwdF9za2V5OworKwkJS1JCNV9BVVRIRU5UX2l0OworKwkJVUlfZHVwX2Vycm9yX3N0cmluZzsKKysJCVJTQVB1YmxpY0tleV9pdDsKKysJCWkyZF9PQ1NQX1JFUVVFU1Q7CisrCQlQS0NTMTJfeDUwOWNybDJjZXJ0YmFnOworKwkJT0NTUF9TRVJWSUNFTE9DX2l0OworKwkJQVNOMV9pdGVtX3NpZ247CisrCQlYNTA5X0NSTF9zZXRfaXNzdWVyX25hbWU7CisrCQlPQkpfTkFNRV9kb19hbGxfc29ydGVkOworKwkJaTJkX09DU1BfQkFTSUNSRVNQOworKwkJaTJkX09DU1BfUkVTUEJZVEVTOworKwkJUEtDUzEyX3VucGFja19wN2VuY2RhdGE7CisrCQlITUFDX0NUWF9pbml0OworKwkJRU5HSU5FX2dldF9kaWdlc3Q7CisrCQlPQ1NQX1JFU1BPTlNFX3ByaW50OworKwkJS1JCNV9US1RCT0RZX2l0OworKwkJQUNDRVNTX0RFU0NSSVBUSU9OX2l0OworKwkJUEtDUzdfSVNTVUVSX0FORF9TRVJJQUxfaXQ7CisrCQlQQkUyUEFSQU1faXQ7CisrCQlQS0NTMTJfY2VydGJhZzJ4NTA5Y3JsOworKwkJUEtDUzdfU0lHTkVEX2l0OworKwkJRU5HSU5FX2dldF9jaXBoZXI7CisrCQlpMmRfT0NTUF9DUkxJRDsKKysJCU9DU1BfU0lOR0xFUkVTUF9uZXc7CisrCQlFTkdJTkVfY21kX2lzX2V4ZWN1dGFibGU7CisrCQlSU0FfdXBfcmVmOworKwkJQVNOMV9HRU5FUkFMU1RSSU5HX2l0OworKwkJRU5HSU5FX3JlZ2lzdGVyX0RTQTsKKysJCVg1MDlWM19FWFRfYWRkX25jb25mX3NrOworKwkJRU5HSU5FX3NldF9sb2FkX3B1YmtleV9mdW5jdGlvbjsKKysJCVBLQ1M4X2RlY3J5cHQ7CisrCQlQRU1fYnl0ZXNfcmVhZF9iaW87CisrCQlESVJFQ1RPUllTVFJJTkdfaXQ7CisrCQlkMmlfT0NTUF9DUkxJRDsKKysJCUVDX1BPSU5UX2lzX29uX2N1cnZlOworKwkJQ1JZUFRPX3NldF9sb2NrZWRfbWVtX2V4X2Z1bmN0aW9uczsKKysJCUNSWVBUT19zZXRfbG9ja2VkX21lbV9leF9mdW5jczsKKysJCWQyaV9LUkI1X0NIRUNLU1VNOworKwkJQVNOMV9pdGVtX2R1cDsKKysJCVg1MDlfaXQ7CisrCQlCTl9tb2RfYWRkOworKwkJS1JCNV9BVVRIREFUQV9mcmVlOworKwkJX29zc2xfb2xkX2Rlc19jYmNfY2tzdW07CisrCQlBU04xX2l0ZW1fdmVyaWZ5OworKwkJQ1JZUFRPX3NldF9tZW1fZXhfZnVuY3Rpb25zOworKwkJRUNfUE9JTlRfZ2V0X0pwcm9qZWN0aXZlX2Nvb3JkaW5hdGVzX0dGcDsKKysJCUVDX1BPSU5UX2dldF9KcHJval9jb29yZHNfR0ZwOworKwkJWkxPTkdfaXQ7CisrCQlDUllQVE9fZ2V0X2xvY2tlZF9tZW1fZXhfZnVuY3Rpb25zOworKwkJQ1JZUFRPX2dldF9sb2NrZWRfbWVtX2V4X2Z1bmNzOworKwkJQVNOMV9USU1FX2NoZWNrOworKwkJVUlfZ2V0MF91c2VyX2RhdGE7CisrCQlITUFDX0NUWF9jbGVhbnVwOworKwkJRFNBX3VwX3JlZjsKKysJCV9vc3NsX29sZF9kZXNfZWRlM19jZmI2NF9lbmNyeXB0OworKwkJX29zc2xfb2Rlc19lZGUzX2NmYjY0X2VuY3J5cHQ7CisrCQlBU04xX0JNUFNUUklOR19pdDsKKysJCUFTTjFfdGFnMmJpdDsKKysJCVVJX21ldGhvZF9zZXRfZmx1c2hlcjsKKysJCVg1MDlfb2NzcGlkX3ByaW50OworKwkJS1JCNV9FTkNEQVRBX2l0OworKwkJRU5HSU5FX2dldF9sb2FkX3B1YmtleV9mdW5jdGlvbjsKKysJCVVJX2FkZF91c2VyX2RhdGE7CisrCQlPQ1NQX1JFUVVFU1RfZGVsZXRlX2V4dDsKKysJCVVJX2dldF9tZXRob2Q7CisrCQlPQ1NQX09ORVJFUV9mcmVlOworKwkJQVNOMV9QUklOVEFCTEVTVFJJTkdfaXQ7CisrCQlYNTA5X0NSTF9zZXRfbmV4dFVwZGF0ZTsKKysJCU9DU1BfUkVRVUVTVF9pdDsKKysJCU9DU1BfQkFTSUNSRVNQX2l0OworKwkJQUVTX2VjYl9lbmNyeXB0OworKwkJQk5fbW9kX3NxcjsKKysJCU5FVFNDQVBFX0NFUlRfU0VRVUVOQ0VfaXQ7CisrCQlHRU5FUkFMX05BTUVTX2l0OworKwkJQVVUSE9SSVRZX0lORk9fQUNDRVNTX2l0OworKwkJQVNOMV9GQk9PTEVBTl9pdDsKKysJCVVJX3NldF9leF9kYXRhOworKwkJX29zc2xfb2xkX2Rlc19zdHJpbmdfdG9fa2V5OworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9SU0E7CisrCQlkMmlfS1JCNV9QUklOQ05BTUU7CisrCQlPQ1NQX1JFU1BCWVRFU19pdDsKKysJCVg1MDlfQ0lORl9pdDsKKysJCUVOR0lORV91bnJlZ2lzdGVyX2RpZ2VzdHM7CisrCQlkMmlfRURJUEFSVFlOQU1FOworKwkJZDJpX09DU1BfU0VSVklDRUxPQzsKKysJCUVOR0lORV9nZXRfZGlnZXN0czsKKysJCV9vc3NsX29sZF9kZXNfc2V0X29kZF9wYXJpdHk7CisrCQlPQ1NQX1JFU1BEQVRBX2ZyZWU7CisrCQlkMmlfS1JCNV9USUNLRVQ7CisrCQlPVEhFUk5BTUVfaXQ7CisrCQlFVlBfTURfQ1RYX2NsZWFudXA7CisrCQlkMmlfQVNOMV9HRU5FUkFMU1RSSU5HOworKwkJWDUwOV9DUkxfc2V0X3ZlcnNpb247CisrCQlCTl9tb2Rfc3ViOworKwkJT0NTUF9TSU5HTEVSRVNQX2dldF9leHRfYnlfTklEOworKwkJRU5HSU5FX2dldF9leF9uZXdfaW5kZXg7CisrCQlPQ1NQX1JFUVVFU1RfZnJlZTsKKysJCU9DU1BfUkVRVUVTVF9hZGQxX2V4dF9pMmQ7CisrCQlYNTA5X1ZBTF9pdDsKKysJCUVDX1BPSU5Uc19tYWtlX2FmZmluZTsKKysJCUVDX1BPSU5UX211bDsKKysJCVg1MDlWM19FWFRfYWRkX25jb25mOworKwkJWDUwOV9UUlVTVF9zZXQ7CisrCQlYNTA5X0NSTF9hZGQxX2V4dF9pMmQ7CisrCQlfb3NzbF9vbGRfZGVzX2ZjcnlwdDsKKysJCURJU1BMQVlURVhUX2l0OworKwkJWDUwOV9DUkxfc2V0X2xhc3RVcGRhdGU7CisrCQlPQ1NQX0JBU0lDUkVTUF9mcmVlOworKwkJT0NTUF9CQVNJQ1JFU1BfYWRkMV9leHRfaTJkOworKwkJZDJpX0tSQjVfQVVUSEVOVEJPRFk7CisrCQlDUllQVE9fc2V0X2V4X2RhdGFfaW1wbGVtZW50YXRpb247CisrCQlDUllQVE9fc2V0X2V4X2RhdGFfaW1wbDsKKysJCUtSQjVfRU5DREFUQV9uZXc7CisrCQlEU09fdXBfcmVmOworKwkJT0NTUF9jcmxfcmVhc29uX3N0cjsKKysJCVVJX2dldDBfcmVzdWx0X3N0cmluZzsKKysJCUFTTjFfR0VORVJBTFNUUklOR19uZXc7CisrCQlYNTA5X1NJR19pdDsKKysJCUVSUl9zZXRfaW1wbGVtZW50YXRpb247CisrCQlFUlJfbG9hZF9FQ19zdHJpbmdzOworKwkJVUlfZ2V0MF9hY3Rpb25fc3RyaW5nOworKwkJT0NTUF9PTkVSRVFfZ2V0X2V4dDsKKysJCUVDX1BPSU5UX21ldGhvZF9vZjsKKysJCWkyZF9LUkI1X0FQUkVRQk9EWTsKKysJCV9vc3NsX29sZF9kZXNfZWNiM19lbmNyeXB0OworKwkJQ1JZUFRPX2dldF9tZW1fZXhfZnVuY3Rpb25zOworKwkJRU5HSU5FX2dldF9leF9kYXRhOworKwkJVUlfZGVzdHJveV9tZXRob2Q7CisrCQlBU04xX2l0ZW1faTJkX2JpbzsKKysJCU9DU1BfT05FUkVRX2dldF9leHRfYnlfT0JKOworKwkJQVNOMV9wcmltaXRpdmVfbmV3OworKwkJQVNOMV9QUklOVEFCTEVfaXQ7CisrCQlFVlBfYWVzXzE5Ml9lY2I7CisrCQlPQ1NQX1NJR05BVFVSRV9uZXc7CisrCQlMT05HX2l0OworKwkJQVNOMV9WSVNJQkxFU1RSSU5HX2l0OworKwkJT0NTUF9TSU5HTEVSRVNQX2FkZDFfZXh0X2kyZDsKKysJCWQyaV9PQ1NQX0NFUlRJRDsKKysJCUFTTjFfaXRlbV9kMmlfZnA7CisrCQlDUkxfRElTVF9QT0lOVFNfaXQ7CisrCQlHRU5FUkFMX05BTUVfcHJpbnQ7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZGVsZXRlX2V4dDsKKysJCVBLQ1MxMl9TQUZFQkFHU19pdDsKKysJCWQyaV9PQ1NQX1NJR05BVFVSRTsKKysJCU9DU1BfcmVxdWVzdF9hZGQxX25vbmNlOworKwkJRU5HSU5FX3NldF9jbWRfZGVmbnM7CisrCQlPQ1NQX1NFUlZJQ0VMT0NfZnJlZTsKKysJCUVDX0dST1VQX2ZyZWU7CisrCQlBU04xX0JJVF9TVFJJTkdfaXQ7CisrCQlYNTA5X1JFUV9pdDsKKysJCV9vc3NsX29sZF9kZXNfY2JjX2VuY3J5cHQ7CisrCQlFUlJfdW5sb2FkX3N0cmluZ3M7CisrCQlQS0NTN19TSUdOX0VOVkVMT1BFX2l0OworKwkJRURJUEFSVFlOQU1FX2ZyZWU7CisrCQlPQ1NQX1JFUUlORk9fZnJlZTsKKysJCUVDX0dST1VQX25ld19jdXJ2ZV9HRnA7CisrCQlPQ1NQX1JFUVVFU1RfZ2V0MV9leHRfZDJpOworKwkJUEtDUzEyX2l0ZW1fcGFja19zYWZlYmFnOworKwkJYXNuMV9leF9jMmk7CisrCQlFTkdJTkVfcmVnaXN0ZXJfZGlnZXN0czsKKysJCWkyZF9PQ1NQX1JFVk9LRURJTkZPOworKwkJYXNuMV9lbmNfcmVzdG9yZTsKKysJCVVJX2ZyZWU7CisrCQlVSV9uZXdfbWV0aG9kOworKwkJRVZQX0VuY3J5cHRJbml0X2V4OworKwkJWDUwOV9wdWJrZXlfZGlnZXN0OworKwkJRUNfUE9JTlRfaW52ZXJ0OworKwkJT0NTUF9iYXNpY19zaWduOworKwkJaTJkX09DU1BfUkVTUElEOworKwkJT0NTUF9jaGVja19ub25jZTsKKysJCUVOR0lORV9jdHJsX2NtZDsKKysJCWQyaV9LUkI1X0VOQ0tFWTsKKysJCU9DU1BfcGFyc2VfdXJsOworKwkJT0NTUF9TSU5HTEVSRVNQX2dldF9leHQ7CisrCQlPQ1NQX0NSTElEX2ZyZWU7CisrCQlPQ1NQX0JBU0lDUkVTUF9nZXQxX2V4dF9kMmk7CisrCQlSU0FQcml2YXRlS2V5X2l0OworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9ESDsKKysJCWkyZF9FRElQQVJUWU5BTUU7CisrCQlFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGcDsKKysJCUVDX1BPSU5UX2dldF9hZmZpbmVfY29vcmRzX0dGcDsKKysJCU9DU1BfQ1JMSURfbmV3OworKwkJRU5HSU5FX2dldF9mbGFnczsKKysJCU9DU1BfT05FUkVRX2l0OworKwkJVUlfcHJvY2VzczsKKysJCUFTTjFfSU5URUdFUl9pdDsKKysJCUVWUF9DaXBoZXJJbml0X2V4OworKwkJVUlfZ2V0X3N0cmluZ190eXBlOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfREg7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX0RTQTsKKysJCU9DU1BfT05FUkVRX2dldF9leHRfYnlfY3JpdGljYWw7CisrCQlibl9kdXBfZXhwYW5kOworKwkJT0NTUF9jZXJ0X2lkX25ldzsKKysJCUJBU0lDX0NPTlNUUkFJTlRTX2l0OworKwkJQk5fbW9kX2FkZF9xdWljazsKKysJCUVDX1BPSU5UX25ldzsKKysJCUVWUF9NRF9DVFhfZGVzdHJveTsKKysJCU9DU1BfUkVTUEJZVEVTX2ZyZWU7CisrCQlFVlBfYWVzXzEyOF9jYmM7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZ2V0MV9leHRfZDJpOworKwkJRUNfUE9JTlRfZnJlZTsKKysJCURIX3VwX3JlZjsKKysJCVg1MDlfTkFNRV9FTlRSWV9pdDsKKysJCVVJX2dldF9leF9uZXdfaW5kZXg7CisrCQlCTl9tb2Rfc3ViX3F1aWNrOworKwkJT0NTUF9PTkVSRVFfYWRkX2V4dDsKKysJCU9DU1BfcmVxdWVzdF9zaWduOworKwkJRVZQX0RpZ2VzdEZpbmFsX2V4OworKwkJRU5HSU5FX3NldF9kaWdlc3RzOworKwkJT0NTUF9pZF9pc3N1ZXJfY21wOworKwkJT0JKX05BTUVfZG9fYWxsOworKwkJRUNfUE9JTlRzX211bDsKKysJCUVOR0lORV9yZWdpc3Rlcl9jb21wbGV0ZTsKKysJCVg1MDlWM19FWFRfbmNvbmZfbmlkOworKwkJQVNOMV9TRVFVRU5DRV9pdDsKKysJCVVJX3NldF9kZWZhdWx0X21ldGhvZDsKKysJCVJBTkRfcXVlcnlfZWdkX2J5dGVzOworKwkJVUlfbWV0aG9kX2dldF93cml0ZXI7CisrCQlVSV9PcGVuU1NMOworKwkJUEVNX2RlZl9jYWxsYmFjazsKKysJCUVOR0lORV9jbGVhbnVwOworKwkJRElTVF9QT0lOVF9pdDsKKysJCU9DU1BfU0lOR0xFUkVTUF9pdDsKKysJCWQyaV9LUkI1X1RLVEJPRFk7CisrCQlFQ19QT0lOVF9jbXA7CisrCQlPQ1NQX1JFVk9LRURJTkZPX25ldzsKKysJCWkyZF9PQ1NQX0NFUlRTVEFUVVM7CisrCQlPQ1NQX2Jhc2ljX2FkZDFfbm9uY2U7CisrCQlBU04xX2l0ZW1fZXhfZDJpOworKwkJQk5fbW9kX2xzaGlmdDFfcXVpY2s7CisrCQlVSV9zZXRfbWV0aG9kOworKwkJT0NTUF9pZF9nZXQwX2luZm87CisrCQlCTl9tb2Rfc3FydDsKKysJCUVDX0dST1VQX2NvcHk7CisrCQlLUkI1X0VOQ0RBVEFfZnJlZTsKKysJCV9vc3NsX29sZF9kZXNfY2ZiX2VuY3J5cHQ7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZ2V0X2V4dF9ieV9PQko7CisrCQlPQ1NQX2NlcnRfdG9faWQ7CisrCQlPQ1NQX1JFU1BJRF9uZXc7CisrCQlPQ1NQX1JFU1BEQVRBX2l0OworKwkJZDJpX09DU1BfUkVTUERBVEE7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX2NvbXBsZXRlOworKwkJT0NTUF9jaGVja192YWxpZGl0eTsKKysJCVBLQ1MxMl9CQUdTX2l0OworKwkJT0NTUF91cmxfc3ZjbG9jX25ldzsKKysJCUFTTjFfdGVtcGxhdGVfZnJlZTsKKysJCU9DU1BfU0lOR0xFUkVTUF9hZGRfZXh0OworKwkJS1JCNV9BVVRIRU5UQk9EWV9pdDsKKysJCVg1MDlfc3VwcG9ydGVkX2V4dGVuc2lvbjsKKysJCWkyZF9LUkI1X0FVVEhEQVRBOworKwkJVUlfbWV0aG9kX2dldF9vcGVuZXI7CisrCQlFTkdJTkVfc2V0X2V4X2RhdGE7CisrCQlPQ1NQX1JFUVVFU1RfcHJpbnQ7CisrCQlDQklHTlVNX2l0OworKwkJS1JCNV9USUNLRVRfbmV3OworKwkJS1JCNV9BUFJFUV9uZXc7CisrCQlFQ19HUk9VUF9nZXRfY3VydmVfR0ZwOworKwkJS1JCNV9FTkNLRVlfbmV3OworKwkJQVNOMV90ZW1wbGF0ZV9kMmk7CisrCQlfb3NzbF9vbGRfZGVzX3F1YWRfY2tzdW07CisrCQlPQ1NQX3NpbmdsZV9nZXQwX3N0YXR1czsKKysJCUJOX3N3YXA7CisrCQlQT0xJQ1lJTkZPX2l0OworKwkJRU5HSU5FX3NldF9kZXN0cm95X2Z1bmN0aW9uOworKwkJYXNuMV9lbmNfZnJlZTsKKysJCU9DU1BfUkVTUElEX2l0OworKwkJRUNfR1JPVVBfbmV3OworKwkJRVZQX2Flc18yNTZfY2JjOworKwkJaTJkX0tSQjVfUFJJTkNOQU1FOworKwkJX29zc2xfb2xkX2Rlc19lbmNyeXB0MjsKKysJCV9vc3NsX29sZF9kZXNfZW5jcnlwdDM7CisrCQlQS0NTOF9QUklWX0tFWV9JTkZPX2l0OworKwkJT0NTUF9SRVFJTkZPX2l0OworKwkJUEJFUEFSQU1faXQ7CisrCQlLUkI1X0FVVEhFTlRCT0RZX25ldzsKKysJCVg1MDlfQ1JMX2FkZDBfcmV2b2tlZDsKKysJCUVESVBBUlRZTkFNRV9pdDsKKysJCU5FVFNDQVBFX1NQS0lfaXQ7CisrCQlVSV9nZXQwX3Rlc3Rfc3RyaW5nOworKwkJRU5HSU5FX2dldF9jaXBoZXJfZW5naW5lOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9jaXBoZXJzOworKwkJRUNfUE9JTlRfY29weTsKKysJCUJOX2tyb25lY2tlcjsKKysJCV9vc3NsX29sZF9kZXNfZWRlM19vZmI2NF9lbmNyeXB0OworKwkJX29zc2xfb2Rlc19lZGUzX29mYjY0X2VuY3J5cHQ7CisrCQlVSV9tZXRob2RfZ2V0X3JlYWRlcjsKKysJCU9DU1BfQkFTSUNSRVNQX2dldF9leHRfY291bnQ7CisrCQlBU04xX0VOVU1FUkFURURfaXQ7CisrCQlVSV9zZXRfcmVzdWx0OworKwkJaTJkX0tSQjVfVElDS0VUOworKwkJWDUwOV9wcmludF9leF9mcDsKKysJCUVWUF9DSVBIRVJfQ1RYX3NldF9wYWRkaW5nOworKwkJZDJpX09DU1BfUkVTUE9OU0U7CisrCQlBU04xX1VUQ1RJTUVfaXQ7CisrCQlfb3NzbF9vbGRfZGVzX2VuY193cml0ZTsKKysJCU9DU1BfUkVTUE9OU0VfbmV3OworKwkJQUVTX3NldF9lbmNyeXB0X2tleTsKKysJCU9DU1BfcmVzcF9jb3VudDsKKysJCUtSQjVfQ0hFQ0tTVU1fbmV3OworKwkJRU5HSU5FX2xvYWRfY3N3aWZ0OworKwkJT0NTUF9vbmVyZXFfZ2V0MF9pZDsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9jaXBoZXJzOworKwkJTk9USUNFUkVGX2l0OworKwkJWDUwOVYzX0VYVF9DUkxfYWRkX25jb25mOworKwkJT0NTUF9SRVZPS0VESU5GT19pdDsKKysJCUFFU19lbmNyeXB0OworKwkJT0NTUF9SRVFVRVNUX25ldzsKKysJCUFTTjFfQU5ZX2l0OworKwkJQ1JZUFRPX2V4X2RhdGFfbmV3X2NsYXNzOworKwkJX29zc2xfb2xkX2Rlc19uY2JjX2VuY3J5cHQ7CisrCQlpMmRfS1JCNV9US1RCT0RZOworKwkJRUNfUE9JTlRfY2xlYXJfZnJlZTsKKysJCUFFU19kZWNyeXB0OworKwkJYXNuMV9lbmNfaW5pdDsKKysJCVVJX2dldF9yZXN1bHRfbWF4c2l6ZTsKKysJCU9DU1BfQ0VSVElEX25ldzsKKysJCUVOR0lORV91bnJlZ2lzdGVyX1JBTkQ7CisrCQlVSV9tZXRob2RfZ2V0X2Nsb3NlcjsKKysJCWQyaV9LUkI1X0VOQ0RBVEE7CisrCQlPQ1NQX3JlcXVlc3Rfb25lcmVxX2NvdW50OworKwkJT0NTUF9iYXNpY192ZXJpZnk7CisrCQlLUkI1X0FVVEhFTlRCT0RZX2ZyZWU7CisrCQlBU04xX2l0ZW1fZDJpOworKwkJQVNOMV9wcmltaXRpdmVfZnJlZTsKKysJCWkyZF9FWFRFTkRFRF9LRVlfVVNBR0U7CisrCQlpMmRfT0NTUF9TSUdOQVRVUkU7CisrCQlhc24xX2VuY19zYXZlOworKwkJRU5HSU5FX2xvYWRfbnVyb247CisrCQlfb3NzbF9vbGRfZGVzX3BjYmNfZW5jcnlwdDsKKysJCVBLQ1MxMl9NQUNfREFUQV9pdDsKKysJCU9DU1BfYWNjZXB0X3Jlc3BvbnNlc19uZXc7CisrCQlhc24xX2RvX2xvY2s7CisrCQlQS0NTN19BVFRSX1ZFUklGWV9pdDsKKysJCUtSQjVfQVBSRVFCT0RZX2l0OworKwkJaTJkX09DU1BfU0lOR0xFUkVTUDsKKysJCUFTTjFfaXRlbV9leF9uZXc7CisrCQlVSV9hZGRfdmVyaWZ5X3N0cmluZzsKKysJCV9vc3NsX29sZF9kZXNfc2V0X2tleTsKKysJCUtSQjVfUFJJTkNOQU1FX2l0OworKwkJRVZQX0RlY3J5cHRJbml0X2V4OworKwkJaTJkX09DU1BfQ0VSVElEOworKwkJQVNOMV9pdGVtX2QyaV9iaW87CisrCQlFQ19QT0lOVF9kYmw7CisrCQlhc24xX2dldF9jaG9pY2Vfc2VsZWN0b3I7CisrCQlpMmRfS1JCNV9DSEVDS1NVTTsKKysJCUVOR0lORV9zZXRfdGFibGVfZmxhZ3M7CisrCQlBRVNfb3B0aW9uczsKKysJCUVOR0lORV9sb2FkX2NoaWw7CisrCQlPQ1NQX2lkX2NtcDsKKysJCU9DU1BfQkFTSUNSRVNQX25ldzsKKysJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2J5X05JRDsKKysJCUtSQjVfQVBSRVFfaXQ7CisrCQlFTkdJTkVfZ2V0X2Rlc3Ryb3lfZnVuY3Rpb247CisrCQlDT05GX3NldF9uY29uZjsKKysJCUFTTjFfUFJJTlRBQkxFX2ZyZWU7CisrCQlPQ1NQX0JBU0lDUkVTUF9nZXRfZXh0X2J5X05JRDsKKysJCURJU1RfUE9JTlRfTkFNRV9pdDsKKysJCVg1MDlWM19leHRlbnNpb25zX3ByaW50OworKwkJX29zc2xfb2xkX2Rlc19jZmI2NF9lbmNyeXB0OworKwkJWDUwOV9SRVZPS0VEX2FkZDFfZXh0X2kyZDsKKysJCV9vc3NsX29sZF9kZXNfb2ZiX2VuY3J5cHQ7CisrCQlLUkI1X1RLVEJPRFlfbmV3OworKwkJQVNOMV9PQ1RFVF9TVFJJTkdfaXQ7CisrCQlFUlJfbG9hZF9VSV9zdHJpbmdzOworKwkJaTJkX0tSQjVfRU5DS0VZOworKwkJQVNOMV90ZW1wbGF0ZV9uZXc7CisrCQlPQ1NQX1NJR05BVFVSRV9mcmVlOworKwkJQVNOMV9pdGVtX2kyZF9mcDsKKysJCUtSQjVfUFJJTkNOQU1FX2ZyZWU7CisrCQlQS0NTN19SRUNJUF9JTkZPX2l0OworKwkJRVhURU5ERURfS0VZX1VTQUdFX2l0OworKwkJRUNfR0ZwX3NpbXBsZV9tZXRob2Q7CisrCQlFQ19HUk9VUF9wcmVjb21wdXRlX211bHQ7CisrCQlPQ1NQX3JlcXVlc3Rfb25lcmVxX2dldDA7CisrCQlVSV9tZXRob2Rfc2V0X3dyaXRlcjsKKysJCUtSQjVfQVVUSEVOVF9uZXc7CisrCQlYNTA5X0NSTF9JTkZPX2l0OworKwkJRFNPX3NldF9uYW1lX2NvbnZlcnRlcjsKKysJCUFFU19zZXRfZGVjcnlwdF9rZXk7CisrCQlQS0NTN19ESUdFU1RfaXQ7CisrCQlQS0NTMTJfeDUwOTJjZXJ0YmFnOworKwkJRVZQX0RpZ2VzdEluaXRfZXg7CisrCQlpMmFfQUNDRVNTX0RFU0NSSVBUSU9OOworKwkJT0NTUF9SRVNQT05TRV9pdDsKKysJCVBLQ1M3X0VOQ19DT05URU5UX2l0OworKwkJT0NTUF9yZXF1ZXN0X2FkZDBfaWQ7CisrCQlFQ19QT0lOVF9tYWtlX2FmZmluZTsKKysJCURTT19nZXRfZmlsZW5hbWU7CisrCQlPQ1NQX0NFUlRTVEFUVVNfaXQ7CisrCQlPQ1NQX3JlcXVlc3RfYWRkMV9jZXJ0OworKwkJVUlfZ2V0MF9vdXRwdXRfc3RyaW5nOworKwkJVUlfZHVwX3ZlcmlmeV9zdHJpbmc7CisrCQlCTl9tb2RfbHNoaWZ0OworKwkJS1JCNV9BVVRIREFUQV9pdDsKKysJCWFzbjFfc2V0X2Nob2ljZV9zZWxlY3RvcjsKKysJCU9DU1BfYmFzaWNfYWRkMV9zdGF0dXM7CisrCQlPQ1NQX1JFU1BJRF9mcmVlOworKwkJYXNuMV9nZXRfZmllbGRfcHRyOworKwkJVUlfYWRkX2lucHV0X3N0cmluZzsKKysJCU9DU1BfQ1JMSURfaXQ7CisrCQlpMmRfS1JCNV9BVVRIRU5UQk9EWTsKKysJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2NvdW50OworKwkJRU5HSU5FX2xvYWRfYXRhbGxhOworKwkJWDUwOV9OQU1FX2l0OworKwkJVVNFUk5PVElDRV9pdDsKKysJCU9DU1BfUkVRSU5GT19uZXc7CisrCQlPQ1NQX0JBU0lDUkVTUF9nZXRfZXh0OworKwkJQ1JZUFRPX2dldF9leF9kYXRhX2ltcGxlbWVudGF0aW9uOworKwkJQ1JZUFRPX2dldF9leF9kYXRhX2ltcGw7CisrCQlBU04xX2l0ZW1fcGFjazsKKysJCWkyZF9LUkI1X0VOQ0RBVEE7CisrCQlYNTA5X1BVUlBPU0Vfc2V0OworKwkJWDUwOV9SRVFfSU5GT19pdDsKKysJCVVJX21ldGhvZF9zZXRfb3BlbmVyOworKwkJQVNOMV9pdGVtX2V4X2ZyZWU7CisrCQlBU04xX0JPT0xFQU5faXQ7CisrCQlFTkdJTkVfZ2V0X3RhYmxlX2ZsYWdzOworKwkJVUlfY3JlYXRlX21ldGhvZDsKKysJCU9DU1BfT05FUkVRX2FkZDFfZXh0X2kyZDsKKysJCV9zaGFkb3dfREVTX2NoZWNrX2tleTsKKysJCWQyaV9PQ1NQX1JFUUlORk87CisrCQlVSV9hZGRfaW5mb19zdHJpbmc7CisrCQlVSV9nZXRfcmVzdWx0X21pbnNpemU7CisrCQlBU04xX05VTExfaXQ7CisrCQlCTl9tb2RfbHNoaWZ0MTsKKysJCWQyaV9PQ1NQX09ORVJFUTsKKysJCU9DU1BfT05FUkVRX25ldzsKKysJCUtSQjVfVElDS0VUX2l0OworKwkJRVZQX2Flc18xOTJfY2JjOworKwkJS1JCNV9USUNLRVRfZnJlZTsKKysJCVVJX25ldzsKKysJCU9DU1BfcmVzcG9uc2VfY3JlYXRlOworKwkJX29zc2xfb2xkX2Rlc194Y2JjX2VuY3J5cHQ7CisrCQlQS0NTN19pdDsKKysJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJT0NTUF9SRVFVRVNUX2dldF9leHRfYnlfY3JpdDsKKysJCUVOR0lORV9zZXRfZmxhZ3M7CisrCQlfb3NzbF9vbGRfZGVzX2VjYl9lbmNyeXB0OworKwkJT0NTUF9yZXNwb25zZV9nZXQxX2Jhc2ljOworKwkJRVZQX0RpZ2VzdDsKKysJCU9DU1BfT05FUkVRX2RlbGV0ZV9leHQ7CisrCQlBU04xX1RCT09MRUFOX2l0OworKwkJQVNOMV9pdGVtX25ldzsKKysJCUFTTjFfVElNRV90b19nZW5lcmFsaXplZHRpbWU7CisrCQlCSUdOVU1faXQ7CisrCQlBRVNfY2JjX2VuY3J5cHQ7CisrCQlFTkdJTkVfZ2V0X2xvYWRfcHJpdmtleV9mdW5jdGlvbjsKKysJCUVOR0lORV9nZXRfbG9hZF9wcml2a2V5X2ZuOworKwkJT0NTUF9SRVNQT05TRV9mcmVlOworKwkJVUlfbWV0aG9kX3NldF9yZWFkZXI7CisrCQlpMmRfQVNOMV9UNjFTVFJJTkc7CisrCQlFQ19QT0lOVF9zZXRfdG9faW5maW5pdHk7CisrCQlFUlJfbG9hZF9PQ1NQX3N0cmluZ3M7CisrCQlFQ19QT0lOVF9wb2ludDJvY3Q7CisrCQlLUkI1X0FQUkVRX2ZyZWU7CisrCQlBU04xX09CSkVDVF9pdDsKKysJCU9DU1BfY3JsSURfbmV3OworKwkJT0NTUF9jcmxJRDJfbmV3OworKwkJQ09ORl9tb2R1bGVzX2xvYWRfZmlsZTsKKysJCUNPTkZfaW1vZHVsZV9zZXRfdXNyX2RhdGE7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfc3RyaW5nOworKwkJQ09ORl9tb2R1bGVfZ2V0X3Vzcl9kYXRhOworKwkJQVNOMV9hZGRfb2lkX21vZHVsZTsKKysJCUNPTkZfbW9kdWxlc19maW5pc2g7CisrCQlPUEVOU1NMX2NvbmZpZzsKKysJCUNPTkZfbW9kdWxlc191bmxvYWQ7CisrCQlDT05GX2ltb2R1bGVfZ2V0X3ZhbHVlOworKwkJQ09ORl9tb2R1bGVfc2V0X3Vzcl9kYXRhOworKwkJQ09ORl9wYXJzZV9saXN0OworKwkJQ09ORl9tb2R1bGVfYWRkOworKwkJQ09ORl9nZXQxX2RlZmF1bHRfY29uZmlnX2ZpbGU7CisrCQlDT05GX2ltb2R1bGVfZ2V0X2ZsYWdzOworKwkJQ09ORl9pbW9kdWxlX2dldF9tb2R1bGU7CisrCQlDT05GX21vZHVsZXNfbG9hZDsKKysJCUNPTkZfaW1vZHVsZV9nZXRfbmFtZTsKKysJCUVSUl9wZWVrX3RvcF9lcnJvcjsKKysJCUNPTkZfaW1vZHVsZV9nZXRfdXNyX2RhdGE7CisrCQlDT05GX2ltb2R1bGVfc2V0X2ZsYWdzOworKwkJRU5HSU5FX2FkZF9jb25mX21vZHVsZTsKKysJCUVSUl9wZWVrX2xhc3RfZXJyb3JfbGluZTsKKysJCUVSUl9wZWVrX2xhc3RfZXJyb3JfbGluZV9kYXRhOworKwkJRVJSX3BlZWtfbGFzdF9lcnJvcjsKKysJCURFU19yZWFkXzJwYXNzd29yZHM7CisrCQlERVNfcmVhZF9wYXNzd29yZDsKKysJCVVJX1VUSUxfcmVhZF9wdzsKKysJCVVJX1VUSUxfcmVhZF9wd19zdHJpbmc7CisrCQlFTkdJTkVfbG9hZF9hZXA7CisrCQlFTkdJTkVfbG9hZF9zdXJld2FyZTsKKysJCU9QRU5TU0xfYWRkX2FsbF9hbGdvcml0aG1zX25vY29uZjsKKysJCU9QRU5TU0xfYWRkX2FsbF9hbGdvX25vY29uZjsKKysJCU9QRU5TU0xfYWRkX2FsbF9hbGdvcml0aG1zX2NvbmY7CisrCQlPUEVOU1NMX2FkZF9hbGxfYWxnb19jb25mOworKwkJT1BFTlNTTF9sb2FkX2J1aWx0aW5fbW9kdWxlczsKKysJCUFFU19vZmIxMjhfZW5jcnlwdDsKKysJCUFFU19jdHIxMjhfZW5jcnlwdDsKKysJCUFFU19jZmIxMjhfZW5jcnlwdDsKKysJCUVOR0lORV9sb2FkXzQ3NThjY2E7CisrCQlfb3NzbF8wOTZfZGVzX3JhbmRvbV9zZWVkOworKwkJRVZQX2Flc18yNTZfb2ZiOworKwkJRVZQX2Flc18xOTJfb2ZiOworKwkJRVZQX2Flc18xMjhfY2ZiMTI4OworKwkJRVZQX2Flc18yNTZfY2ZiMTI4OworKwkJRVZQX2Flc18xMjhfb2ZiOworKwkJRVZQX2Flc18xOTJfY2ZiMTI4OworKwkJQ09ORl9tb2R1bGVzX2ZyZWU7CisrCQlOQ09ORl9kZWZhdWx0OworKwkJT1BFTlNTTF9ub19jb25maWc7CisrCQlOQ09ORl9XSU4zMjsKKysJCUFTTjFfVU5JVkVSU0FMU1RSSU5HX25ldzsKKysJCUVWUF9kZXNfZWRlX2VjYjsKKysJCWkyZF9BU04xX1VOSVZFUlNBTFNUUklORzsKKysJCUFTTjFfVU5JVkVSU0FMU1RSSU5HX2ZyZWU7CisrCQlBU04xX1VOSVZFUlNBTFNUUklOR19pdDsKKysJCWQyaV9BU04xX1VOSVZFUlNBTFNUUklORzsKKysJCUVWUF9kZXNfZWRlM19lY2I7CisrCQlYNTA5X1JFUV9wcmludF9leDsKKysJCUVOR0lORV91cF9yZWY7CisrCQlCVUZfTUVNX2dyb3dfY2xlYW47CisrCQlDUllQVE9fcmVhbGxvY19jbGVhbjsKKysJCUJVRl9zdHJsY2F0OworKwkJQklPX2luZGVudDsKKysJCUJVRl9zdHJsY3B5OworKwkJT3BlblNTTERpZTsKKysJCU9QRU5TU0xfY2xlYW5zZTsKKysJCUVOR0lORV9zZXR1cF9ic2RfY3J5cHRvZGV2OworKwkJRVJSX3JlbGVhc2VfZXJyX3N0YXRlX3RhYmxlOworKwkJRVZQX2Flc18xMjhfY2ZiODsKKysJCUZJUFNfY29ycnVwdF9yc2E7CisrCQlGSVBTX3NlbGZ0ZXN0X2RlczsKKysJCUVWUF9hZXNfMTI4X2NmYjE7CisrCQlFVlBfYWVzXzE5Ml9jZmI4OworKwkJRklQU19tb2RlX3NldDsKKysJCUZJUFNfc2VsZnRlc3RfZHNhOworKwkJRVZQX2Flc18yNTZfY2ZiODsKKysJCUZJUFNfYWxsb3dfbWQ1OworKwkJREVTX2VkZTNfY2ZiX2VuY3J5cHQ7CisrCQlFVlBfZGVzX2VkZTNfY2ZiODsKKysJCUZJUFNfcmFuZF9zZWVkZWQ7CisrCQlBRVNfY2Zicl9lbmNyeXB0X2Jsb2NrOworKwkJQUVTX2NmYjhfZW5jcnlwdDsKKysJCUZJUFNfcmFuZF9zZWVkOworKwkJRklQU19jb3JydXB0X2RlczsKKysJCUVWUF9hZXNfMTkyX2NmYjE7CisrCQlGSVBTX3NlbGZ0ZXN0X2FlczsKKysJCUZJUFNfc2V0X3Bybmdfa2V5OworKwkJRVZQX2Rlc19jZmI4OworKwkJRklQU19jb3JydXB0X2RzYTsKKysJCUZJUFNfdGVzdF9tb2RlOworKwkJRklQU19yYW5kX21ldGhvZDsKKysJCUVWUF9hZXNfMjU2X2NmYjE7CisrCQlFUlJfbG9hZF9GSVBTX3N0cmluZ3M7CisrCQlGSVBTX2NvcnJ1cHRfYWVzOworKwkJRklQU19zZWxmdGVzdF9zaGExOworKwkJRklQU19zZWxmdGVzdF9yc2E7CisrCQlGSVBTX2NvcnJ1cHRfc2hhMTsKKysJCUVWUF9kZXNfY2ZiMTsKKysJCUZJUFNfZHNhX2NoZWNrOworKwkJQUVTX2NmYjFfZW5jcnlwdDsKKysJCUVWUF9kZXNfZWRlM19jZmIxOworKwkJRklQU19yYW5kX2NoZWNrOworKwkJRklQU19tZDVfYWxsb3dlZDsKKysJCUZJUFNfbW9kZTsKKysJCUZJUFNfc2VsZnRlc3RfZmFpbGVkOworKwkJc2tfaXNfc29ydGVkOworKwkJWDUwOV9jaGVja19jYTsKKysJCUhNQUNfQ1RYX3NldF9mbGFnczsKKysJCWQyaV9QUk9YWV9DRVJUX0lORk9fRVhURU5TSU9OOworKwkJUFJPWFlfUE9MSUNZX2l0OworKwkJaTJkX1BST1hZX1BPTElDWTsKKysJCWkyZF9QUk9YWV9DRVJUX0lORk9fRVhURU5TSU9OOworKwkJZDJpX1BST1hZX1BPTElDWTsKKysJCVBST1hZX0NFUlRfSU5GT19FWFRFTlNJT05fbmV3OworKwkJUFJPWFlfQ0VSVF9JTkZPX0VYVEVOU0lPTl9mcmVlOworKwkJUFJPWFlfQ0VSVF9JTkZPX0VYVEVOU0lPTl9pdDsKKysJCVBST1hZX1BPTElDWV9mcmVlOworKwkJUFJPWFlfUE9MSUNZX25ldzsKKysJCUJOX01PTlRfQ1RYX3NldF9sb2NrZWQ7CisrCQlGSVBTX3NlbGZ0ZXN0X3JuZzsKKysJCUVWUF9zaGEzODQ7CisrCQlFVlBfc2hhNTEyOworKwkJRVZQX3NoYTIyNDsKKysJCUVWUF9zaGEyNTY7CisrCQlGSVBTX3NlbGZ0ZXN0X2htYWM7CisrCQlGSVBTX2NvcnJ1cHRfcm5nOworKwkJQk5fbW9kX2V4cF9tb250X2NvbnN0dGltZTsKKysJCVJTQV9YOTMxX2hhc2hfaWQ7CisrCQlSU0FfcGFkZGluZ19jaGVja19YOTMxOworKwkJUlNBX3ZlcmlmeV9QS0NTMV9QU1M7CisrCQlSU0FfcGFkZGluZ19hZGRfWDkzMTsKKysJCVJTQV9wYWRkaW5nX2FkZF9QS0NTMV9QU1M7CisrCQlQS0NTMV9NR0YxOworKwkJQk5fWDkzMV9nZW5lcmF0ZV9YcHE7CisrCQlSU0FfWDkzMV9nZW5lcmF0ZV9rZXk7CisrCQlCTl9YOTMxX2Rlcml2ZV9wcmltZTsKKysJCUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWU7CisrCQlSU0FfWDkzMV9kZXJpdmU7CisrCQlCSU9fbmV3X2RncmFtOworKwkJQk5fZ2V0MF9uaXN0X3ByaW1lXzM4NDsKKysJCUVSUl9zZXRfbWFyazsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldDBfY3JsczsKKysJCUVOR0lORV9zZXRfU1RPUkU7CisrCQlFTkdJTkVfcmVnaXN0ZXJfRUNEU0E7CisrCQlTVE9SRV9tZXRoX3NldF9saXN0X3N0YXJ0X2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9saXN0X3N0YXJ0X2Z1bmN0aW9uOworKwkJQk5fQkxJTkRJTkdfaW52ZXJ0X2V4OworKwkJTkFNRV9DT05TVFJBSU5UU19mcmVlOworKwkJU1RPUkVfQVRUUl9JTkZPX3NldF9udW1iZXI7CisrCQlCTl9CTElORElOR19nZXRfdGhyZWFkX2lkOworKwkJWDUwOV9TVE9SRV9DVFhfc2V0MF9wYXJhbTsKKysJCVBPTElDWV9NQVBQSU5HX2l0OworKwkJU1RPUkVfcGFyc2VfYXR0cnNfc3RhcnQ7CisrCQlQT0xJQ1lfQ09OU1RSQUlOVFNfZnJlZTsKKysJCUVWUF9QS0VZX2FkZDFfYXR0cl9ieV9OSUQ7CisrCQlCTl9uaXN0X21vZF8xOTI7CisrCQlFQ19HUk9VUF9nZXRfdHJpbm9taWFsX2Jhc2lzOworKwkJU1RPUkVfc2V0X21ldGhvZDsKKysJCUdFTkVSQUxfU1VCVFJFRV9mcmVlOworKwkJTkFNRV9DT05TVFJBSU5UU19pdDsKKysJCUVDREhfZ2V0X2RlZmF1bHRfbWV0aG9kOworKwkJUEtDUzEyX2FkZF9zYWZlOworKwkJRUNfS0VZX25ld19ieV9jdXJ2ZV9uYW1lOworKwkJU1RPUkVfbWV0aF9nZXRfdXBkYXRlX3N0b3JlX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF91cGRhdGVfc3RvcmVfZnVuY3Rpb247CisrCQlFTkdJTkVfcmVnaXN0ZXJfRUNESDsKKysJCVNIQTUxMl9VcGRhdGU7CisrCQlpMmRfRUNQcml2YXRlS2V5OworKwkJQk5fZ2V0MF9uaXN0X3ByaW1lXzE5MjsKKysJCVNUT1JFX21vZGlmeV9jZXJ0aWZpY2F0ZTsKKysJCUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0YybTsKKysJCUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRzX0dGMm07CisrCQlCTl9HRjJtX21vZF9leHBfYXJyOworKwkJU1RPUkVfQVRUUl9JTkZPX21vZGlmeV9udW1iZXI7CisrCQlYNTA5X2tleWlkX2dldDA7CisrCQlFTkdJTkVfbG9hZF9nbXA7CisrCQlwaXRlbV9uZXc7CisrCQlCTl9HRjJtX21vZF9tdWxfYXJyOworKwkJU1RPUkVfbGlzdF9wdWJsaWNfa2V5X2VuZHA7CisrCQlvMmlfRUNQdWJsaWNLZXk7CisrCQlFQ19LRVlfY29weTsKKysJCUJJT19kdW1wX2ZwOworKwkJWDUwOV9wb2xpY3lfbm9kZV9nZXQwX3BhcmVudDsKKysJCUVDX0dST1VQX2NoZWNrX2Rpc2NyaW1pbmFudDsKKysJCWkyb19FQ1B1YmxpY0tleTsKKysJCUVDX0tFWV9wcmVjb21wdXRlX211bHQ7CisrCQlhMmlfSVBBRERSRVNTOworKwkJU1RPUkVfbWV0aF9zZXRfaW5pdGlhbGlzZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfaW5pdGlhbGlzZV9mdW5jdGlvbjsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF9kZXB0aDsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX2luaGVyaXQ7CisrCQlFQ19QT0lOVF9wb2ludDJibjsKKysJCVNUT1JFX0FUVFJfSU5GT19zZXRfZG47CisrCQlYNTA5X3BvbGljeV90cmVlX2dldDBfcG9saWNpZXM7CisrCQlFQ19HUk9VUF9uZXdfY3VydmVfR0YybTsKKysJCVNUT1JFX2Rlc3Ryb3lfbWV0aG9kOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfU1RPUkU7CisrCQlFVlBfUEtFWV9nZXQxX0VDX0tFWTsKKysJCVNUT1JFX0FUVFJfSU5GT19nZXQwX251bWJlcjsKKysJCUVOR0lORV9nZXRfZGVmYXVsdF9FQ0RIOworKwkJRUNfS0VZX2dldF9jb252X2Zvcm07CisrCQlBU04xX09DVEVUX1NUUklOR19OREVGX2l0OworKwkJU1RPUkVfZGVsZXRlX3B1YmxpY19rZXk7CisrCQlTVE9SRV9nZXRfcHVibGljX2tleTsKKysJCVNUT1JFX21vZGlmeV9hcmJpdHJhcnk7CisrCQlFTkdJTkVfZ2V0X3N0YXRpY19zdGF0ZTsKKysJCXBxdWV1ZV9pdGVyYXRvcjsKKysJCUVDRFNBX1NJR19uZXc7CisrCQlPUEVOU1NMX0RJUl9lbmQ7CisrCQlCTl9HRjJtX21vZF9zcXI7CisrCQlFQ19QT0lOVF9ibjJwb2ludDsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3NldF9kZXB0aDsKKysJCUVDX0tFWV9zZXRfYXNuMV9mbGFnOworKwkJU1RPUkVfZ2V0X21ldGhvZDsKKysJCUVDX0tFWV9nZXRfa2V5X21ldGhvZF9kYXRhOworKwkJRUNEU0Ffc2lnbl9leDsKKysJCVNUT1JFX3BhcnNlX2F0dHJzX2VuZDsKKysJCUVDX0dST1VQX2dldF9wb2ludF9jb252ZXJzaW9uX2Zvcm07CisrCQlFQ19HUk9VUF9nZXRfcG9pbnRfY29udl9mb3JtOworKwkJU1RPUkVfbWV0aG9kX3NldF9zdG9yZV9mdW5jdGlvbjsKKysJCVNUT1JFX0FUVFJfSU5GT19pbjsKKysJCVBFTV9yZWFkX2Jpb19FQ1BLUGFyYW1ldGVyczsKKysJCUVDX0dST1VQX2dldF9wZW50YW5vbWlhbF9iYXNpczsKKysJCUVWUF9QS0VZX2FkZDFfYXR0cl9ieV90eHQ7CisrCQlCTl9CTElORElOR19zZXRfZmxhZ3M7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX3BvbGljaWVzOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0MV9uYW1lOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0X3B1cnBvc2U7CisrCQlTVE9SRV9nZXRfbnVtYmVyOworKwkJRUNEU0Ffc2lnbl9zZXR1cDsKKysJCUJOX0dGMm1fbW9kX3NvbHZlX3F1YWRfYXJyOworKwkJRUNfS0VZX3VwX3JlZjsKKysJCVBPTElDWV9NQVBQSU5HX2ZyZWU7CisrCQlCTl9HRjJtX21vZF9kaXY7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfZmxhZ3M7CisrCQlFQ19LRVlfZnJlZTsKKysJCVNUT1JFX21ldGhfc2V0X2xpc3RfbmV4dF9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfbGlzdF9uZXh0X2Z1bmN0aW9uOworKwkJUEVNX3dyaXRlX2Jpb19FQ1ByaXZhdGVLZXk7CisrCQlkMmlfRUNfUFVCS0VZOworKwkJU1RPUkVfbWV0aF9nZXRfZ2VuZXJhdGVfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X2dlbmVyYXRlX2Z1bmN0aW9uOworKwkJU1RPUkVfbWV0aF9zZXRfbGlzdF9lbmRfZm47CisrCQlTVE9SRV9tZXRob2Rfc2V0X2xpc3RfZW5kX2Z1bmN0aW9uOworKwkJcHF1ZXVlX3ByaW50OworKwkJRUNfR1JPVVBfaGF2ZV9wcmVjb21wdXRlX211bHQ7CisrCQlFQ19LRVlfcHJpbnRfZnA7CisrCQlCTl9HRjJtX21vZF9hcnI7CisrCQlQRU1fd3JpdGVfYmlvX1g1MDlfQ0VSVF9QQUlSOworKwkJRVZQX1BLRVlfY21wOworKwkJWDUwOV9wb2xpY3lfbGV2ZWxfbm9kZV9jb3VudDsKKysJCVNUT1JFX25ld19lbmdpbmU7CisrCQlTVE9SRV9saXN0X3B1YmxpY19rZXlfc3RhcnQ7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9uZXc7CisrCQlFQ0RIX2dldF9leF9kYXRhOworKwkJRVZQX1BLRVlfZ2V0X2F0dHI7CisrCQlFQ0RTQV9kb19zaWduOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfRUNESDsKKysJCUVDREhfT3BlblNTTDsKKysJCUVDX0tFWV9zZXRfY29udl9mb3JtOworKwkJRUNfUE9JTlRfZHVwOworKwkJR0VORVJBTF9TVUJUUkVFX25ldzsKKysJCVNUT1JFX2xpc3RfY3JsX2VuZHA7CisrCQlFQ19nZXRfYnVpbHRpbl9jdXJ2ZXM7CisrCQlYNTA5X3BvbGljeV9ub2RlX2dldDBfcXVhbGlmaWVyczsKKysJCVg1MDlfcGN5X25vZGVfZ2V0MF9xdWFsaWZpZXJzOworKwkJU1RPUkVfbGlzdF9jcmxfZW5kOworKwkJRVZQX1BLRVlfc2V0MV9FQ19LRVk7CisrCQlCTl9HRjJtX21vZF9zcXJ0X2FycjsKKysJCWkyZF9FQ1ByaXZhdGVLZXlfYmlvOworKwkJRUNQS1BhcmFtZXRlcnNfcHJpbnRfZnA7CisrCQlwcXVldWVfZmluZDsKKysJCUVDRFNBX1NJR19mcmVlOworKwkJUEVNX3dyaXRlX2Jpb19FQ1BLUGFyYW1ldGVyczsKKysJCVNUT1JFX21ldGhvZF9zZXRfY3RybF9mdW5jdGlvbjsKKysJCVNUT1JFX2xpc3RfcHVibGljX2tleV9lbmQ7CisrCQlFQ19LRVlfc2V0X3ByaXZhdGVfa2V5OworKwkJcHF1ZXVlX3BlZWs7CisrCQlTVE9SRV9nZXRfYXJiaXRyYXJ5OworKwkJU1RPUkVfc3RvcmVfY3JsOworKwkJWDUwOV9wb2xpY3lfbm9kZV9nZXQwX3BvbGljeTsKKysJCVBLQ1MxMl9hZGRfc2FmZXM7CisrCQlCTl9CTElORElOR19jb252ZXJ0X2V4OworKwkJWDUwOV9wb2xpY3lfdHJlZV9mcmVlOworKwkJT1BFTlNTTF9pYTMyY2FwX2xvYzsKKysJCUJOX0dGMm1fcG9seTJhcnI7CisrCQlTVE9SRV9jdHJsOworKwkJU1RPUkVfQVRUUl9JTkZPX2NvbXBhcmU7CisrCQlCTl9nZXQwX25pc3RfcHJpbWVfMjI0OworKwkJaTJkX0VDUGFyYW1ldGVyczsKKysJCWkyZF9FQ1BLUGFyYW1ldGVyczsKKysJCUJOX0dFTkNCX2NhbGw7CisrCQlkMmlfRUNQS1BhcmFtZXRlcnM7CisrCQlTVE9SRV9tZXRoX3NldF9nZW5lcmF0ZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfZ2VuZXJhdGVfZnVuY3Rpb247CisrCQlFTkdJTkVfc2V0X0VDREg7CisrCQlOQU1FX0NPTlNUUkFJTlRTX25ldzsKKysJCVNIQTI1Nl9Jbml0OworKwkJRUNfS0VZX2dldDBfcHVibGljX2tleTsKKysJCVBFTV93cml0ZV9iaW9fRUNfUFVCS0VZOworKwkJU1RPUkVfQVRUUl9JTkZPX3NldF9jc3RyOworKwkJU1RPUkVfbGlzdF9jcmxfbmV4dDsKKysJCVNUT1JFX0FUVFJfSU5GT19pbl9yYW5nZTsKKysJCUVDUGFyYW1ldGVyc19wcmludDsKKysJCVNUT1JFX21ldGhfc2V0X2RlbGV0ZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfZGVsZXRlX2Z1bmN0aW9uOworKwkJU1RPUkVfbGlzdF9jZXJ0aWZpY2F0ZV9uZXh0OworKwkJQVNOMV9nZW5lcmF0ZV9uY29uZjsKKysJCUJVRl9tZW1kdXA7CisrCQlCTl9HRjJtX21vZF9tdWw7CisrCQlTVE9SRV9tZXRoX2dldF9saXN0X25leHRfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X2xpc3RfbmV4dF9mdW5jdGlvbjsKKysJCVNUT1JFX0FUVFJfSU5GT19nZXQwX2RuOworKwkJU1RPUkVfbGlzdF9wcml2YXRlX2tleV9uZXh0OworKwkJRUNfR1JPVVBfc2V0X3NlZWQ7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfdHJ1c3Q7CisrCQlTVE9SRV9BVFRSX0lORk9fZnJlZTsKKysJCVNUT1JFX2dldF9wcml2YXRlX2tleTsKKysJCUVWUF9QS0VZX2dldF9hdHRyX2NvdW50OworKwkJU1RPUkVfQVRUUl9JTkZPX25ldzsKKysJCUVDX0dST1VQX2dldF9jdXJ2ZV9HRjJtOworKwkJU1RPUkVfbWV0aF9zZXRfcmV2b2tlX2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9yZXZva2VfZnVuY3Rpb247CisrCQlTVE9SRV9zdG9yZV9udW1iZXI7CisrCQlCTl9pc19wcmltZV9leDsKKysJCVNUT1JFX3Jldm9rZV9wdWJsaWNfa2V5OworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MF9wYXJhbTsKKysJCVNUT1JFX2RlbGV0ZV9hcmJpdHJhcnk7CisrCQlQRU1fcmVhZF9YNTA5X0NFUlRfUEFJUjsKKysJCVg1MDlfU1RPUkVfc2V0X2RlcHRoOworKwkJRUNEU0FfZ2V0X2V4X2RhdGE7CisrCQlTSEEyMjQ7CisrCQlCSU9fZHVtcF9pbmRlbnRfZnA7CisrCQlFQ19LRVlfc2V0X2dyb3VwOworKwkJQlVGX3N0cm5kdXA7CisrCQlTVE9SRV9saXN0X2NlcnRpZmljYXRlX3N0YXJ0OworKwkJQk5fR0YybV9tb2Q7CisrCQlYNTA5X1JFUV9jaGVja19wcml2YXRlX2tleTsKKysJCUVDX0dST1VQX2dldF9zZWVkX2xlbjsKKysJCUVSUl9sb2FkX1NUT1JFX3N0cmluZ3M7CisrCQlQRU1fcmVhZF9iaW9fRUNfUFVCS0VZOworKwkJU1RPUkVfbGlzdF9wcml2YXRlX2tleV9lbmQ7CisrCQlpMmRfRUNfUFVCS0VZOworKwkJRUNEU0FfZ2V0X2RlZmF1bHRfbWV0aG9kOworKwkJQVNOMV9wdXRfZW9jOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0X2V4cGxpY2l0X3BvbGljeTsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldF9leHBsX3BvbGljeTsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3RhYmxlX2NsZWFudXA7CisrCQlTVE9SRV9tb2RpZnlfcHJpdmF0ZV9rZXk7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9mcmVlOworKwkJRUNfTUVUSE9EX2dldF9maWVsZF90eXBlOworKwkJRUNfR0ZwX25pc3RfbWV0aG9kOworKwkJU1RPUkVfbWV0aF9zZXRfbW9kaWZ5X2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9tb2RpZnlfZnVuY3Rpb247CisrCQlTVE9SRV9wYXJzZV9hdHRyc19uZXh0OworKwkJRU5HSU5FX2xvYWRfcGFkbG9jazsKKysJCUVDX0dST1VQX3NldF9jdXJ2ZV9uYW1lOworKwkJWDUwOV9DRVJUX1BBSVJfaXQ7CisrCQlTVE9SRV9tZXRoX2dldF9yZXZva2VfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X3Jldm9rZV9mdW5jdGlvbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfZ2V0X2Z1bmN0aW9uOworKwkJU1RPUkVfbW9kaWZ5X251bWJlcjsKKysJCVNUT1JFX21ldGhvZF9nZXRfc3RvcmVfZnVuY3Rpb247CisrCQlTVE9SRV9zdG9yZV9wcml2YXRlX2tleTsKKysJCUJOX0dGMm1fbW9kX3Nxcl9hcnI7CisrCQlSU0Ffc2V0dXBfYmxpbmRpbmc7CisrCQlCSU9fc19kYXRhZ3JhbTsKKysJCVNUT1JFX01lbW9yeTsKKysJCXNrX2ZpbmRfZXg7CisrCQlFQ19HUk9VUF9zZXRfY3VydmVfR0YybTsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9FQ0RTQTsKKysJCVBPTElDWV9DT05TVFJBSU5UU19uZXc7CisrCQlCTl9HRjJtX21vZF9zcXJ0OworKwkJRUNESF9zZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlFQ19LRVlfZ2VuZXJhdGVfa2V5OworKwkJU0hBMzg0X1VwZGF0ZTsKKysJCUJOX0dGMm1fYXJyMnBvbHk7CisrCQlTVE9SRV9tZXRob2RfZ2V0X2dldF9mdW5jdGlvbjsKKysJCVNUT1JFX21ldGhfc2V0X2NsZWFudXBfZm47CisrCQlTVE9SRV9tZXRob2Rfc2V0X2NsZWFudXBfZnVuY3Rpb247CisrCQlFQ19HUk9VUF9jaGVjazsKKysJCWQyaV9FQ1ByaXZhdGVLZXlfYmlvOworKwkJRUNfS0VZX2luc2VydF9rZXlfbWV0aG9kX2RhdGE7CisrCQlTVE9SRV9tZXRoX2dldF9sb2NrX3N0b3JlX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9sb2NrX3N0b3JlX2Z1bmN0aW9uOworKwkJWDUwOV9WRVJJRllfUEFSQU1fZ2V0X2RlcHRoOworKwkJU0hBMjI0X0ZpbmFsOworKwkJU1RPUkVfbWV0aF9zZXRfdXBkYXRlX3N0b3JlX2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF91cGRhdGVfc3RvcmVfZnVuY3Rpb247CisrCQlTSEEyMjRfVXBkYXRlOworKwkJZDJpX0VDUHJpdmF0ZUtleTsKKysJCUFTTjFfaXRlbV9uZGVmX2kyZDsKKysJCVNUT1JFX2RlbGV0ZV9wcml2YXRlX2tleTsKKysJCUVSUl9wb3BfdG9fbWFyazsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfU1RPUkU7CisrCQlYNTA5X3BvbGljeV9sZXZlbF9nZXQwX25vZGU7CisrCQlpMmRfUEtDUzdfTkRFRjsKKysJCUVDX0dST1VQX2dldF9kZWdyZWU7CisrCQlBU04xX2dlbmVyYXRlX3YzOworKwkJU1RPUkVfQVRUUl9JTkZPX21vZGlmeV9jc3RyOworKwkJWDUwOV9wb2xpY3lfdHJlZV9sZXZlbF9jb3VudDsKKysJCUJOX0dGMm1fYWRkOworKwkJRUNfS0VZX2dldDBfZ3JvdXA7CisrCQlTVE9SRV9nZW5lcmF0ZV9jcmw7CisrCQlTVE9SRV9zdG9yZV9wdWJsaWNfa2V5OworKwkJWDUwOV9DRVJUX1BBSVJfZnJlZTsKKysJCVNUT1JFX3Jldm9rZV9wcml2YXRlX2tleTsKKysJCUJOX25pc3RfbW9kXzIyNDsKKysJCVNIQTUxMl9GaW5hbDsKKysJCVNUT1JFX0FUVFJfSU5GT19tb2RpZnlfZG47CisrCQlTVE9SRV9tZXRoX2dldF9pbml0aWFsaXNlX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9pbml0aWFsaXNlX2Z1bmN0aW9uOworKwkJU1RPUkVfZGVsZXRlX251bWJlcjsKKysJCWkyZF9FQ19QVUJLRVlfYmlvOworKwkJQklPX2RncmFtX25vbl9mYXRhbF9lcnJvcjsKKysJCUVDX0dST1VQX2dldF9hc24xX2ZsYWc7CisrCQlTVE9SRV9BVFRSX0lORk9faW5fZXg7CisrCQlTVE9SRV9saXN0X2NybF9zdGFydDsKKysJCUVDREhfZ2V0X2V4X25ld19pbmRleDsKKysJCVNUT1JFX21ldGhfZ2V0X21vZGlmeV9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfbW9kaWZ5X2Z1bmN0aW9uOworKwkJdjJpX0FTTjFfQklUX1NUUklORzsKKysJCVNUT1JFX3N0b3JlX2NlcnRpZmljYXRlOworKwkJT0JKX2JzZWFyY2hfZXg7CisrCQlYNTA5X1NUT1JFX0NUWF9zZXRfZGVmYXVsdDsKKysJCVNUT1JFX0FUVFJfSU5GT19zZXRfc2hhMXN0cjsKKysJCUJOX0dGMm1fbW9kX2ludjsKKysJCUJOX0dGMm1fbW9kX2V4cDsKKysJCVNUT1JFX21vZGlmeV9wdWJsaWNfa2V5OworKwkJU1RPUkVfbWV0aF9nZXRfbGlzdF9zdGFydF9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfbGlzdF9zdGFydF9mdW5jdGlvbjsKKysJCUVDX0dST1VQX2dldDBfc2VlZDsKKysJCVNUT1JFX3N0b3JlX2FyYml0cmFyeTsKKysJCVNUT1JFX21ldGhfc2V0X3VubG9ja19zdG9yZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfdW5sb2NrX3N0b3JlX2Z1bmN0aW9uOworKwkJQk5fR0YybV9tb2RfZGl2X2FycjsKKysJCUVOR0lORV9zZXRfRUNEU0E7CisrCQlTVE9SRV9jcmVhdGVfbWV0aG9kOworKwkJRUNQS1BhcmFtZXRlcnNfcHJpbnQ7CisrCQlFQ19LRVlfZ2V0MF9wcml2YXRlX2tleTsKKysJCVBFTV93cml0ZV9FQ19QVUJLRVk7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxOworKwkJRUNESF9zZXRfbWV0aG9kOworKwkJdjJpX0dFTkVSQUxfTkFNRV9leDsKKysJCUVDREhfc2V0X2V4X2RhdGE7CisrCQlTVE9SRV9nZW5lcmF0ZV9rZXk7CisrCQlCTl9uaXN0X21vZF81MjE7CisrCQlYNTA5X3BvbGljeV90cmVlX2dldDBfbGV2ZWw7CisrCQlFQ19HUk9VUF9zZXRfcG9pbnRfY29udmVyc2lvbl9mb3JtOworKwkJRUNfR1JPVVBfc2V0X3BvaW50X2NvbnZfZm9ybTsKKysJCVBFTV9yZWFkX0VDX1BVQktFWTsKKysJCWkyZF9FQ0RTQV9TSUc7CisrCQlFQ0RTQV9PcGVuU1NMOworKwkJU1RPUkVfZGVsZXRlX2NybDsKKysJCUVDX0tFWV9nZXRfZW5jX2ZsYWdzOworKwkJQVNOMV9jb25zdF9jaGVja19pbmZpbml0ZV9lbmQ7CisrCQlFVlBfUEtFWV9kZWxldGVfYXR0cjsKKysJCUVDRFNBX3NldF9kZWZhdWx0X21ldGhvZDsKKysJCUVDX1BPSU5UX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzX0dGMm07CisrCQlFQ19QT0lOVF9zZXRfY29tcHJfY29vcmRzX0dGMm07CisrCQlFQ19HUk9VUF9jbXA7CisrCQlTVE9SRV9yZXZva2VfY2VydGlmaWNhdGU7CisrCQlCTl9nZXQwX25pc3RfcHJpbWVfMjU2OworKwkJU1RPUkVfbWV0aF9nZXRfZGVsZXRlX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9kZWxldGVfZnVuY3Rpb247CisrCQlTSEEyMjRfSW5pdDsKKysJCVBFTV9yZWFkX0VDUHJpdmF0ZUtleTsKKysJCVNIQTUxMl9Jbml0OworKwkJU1RPUkVfcGFyc2VfYXR0cnNfZW5kcDsKKysJCUJOX3NldF9uZWdhdGl2ZTsKKysJCUVSUl9sb2FkX0VDRFNBX3N0cmluZ3M7CisrCQlFQ19HUk9VUF9nZXRfYmFzaXNfdHlwZTsKKysJCVNUT1JFX2xpc3RfcHVibGljX2tleV9uZXh0OworKwkJaTJ2X0FTTjFfQklUX1NUUklORzsKKysJCVNUT1JFX09CSkVDVF9mcmVlOworKwkJQk5fbmlzdF9tb2RfMzg0OworKwkJaTJkX1g1MDlfQ0VSVF9QQUlSOworKwkJUEVNX3dyaXRlX0VDUEtQYXJhbWV0ZXJzOworKwkJRUNESF9jb21wdXRlX2tleTsKKysJCVNUT1JFX0FUVFJfSU5GT19nZXQwX3NoYTFzdHI7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX0VDREg7CisrCQlwcXVldWVfcG9wOworKwkJU1RPUkVfQVRUUl9JTkZPX2dldDBfY3N0cjsKKysJCVBPTElDWV9DT05TVFJBSU5UU19pdDsKKysJCVNUT1JFX2dldF9leF9uZXdfaW5kZXg7CisrCQlFVlBfUEtFWV9nZXRfYXR0cl9ieV9PQko7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9hZGQwX3BvbGljeTsKKysJCUJOX0dGMm1fbW9kX3NvbHZlX3F1YWQ7CisrCQlTSEEyNTY7CisrCQlpMmRfRUNQcml2YXRlS2V5X2ZwOworKwkJWDUwOV9wb2xpY3lfdHJlZV9nZXQwX3VzZXJfcG9saWNpZXM7CisrCQlYNTA5X3BjeV90cmVlX2dldDBfdXNyX3BvbGljaWVzOworKwkJT1BFTlNTTF9ESVJfcmVhZDsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfRUNEU0E7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9sb29rdXA7CisrCQlFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGMm07CisrCQlFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3Jkc19HRjJtOworKwkJRUNfR1JPVVBfZHVwOworKwkJRU5HSU5FX2dldF9kZWZhdWx0X0VDRFNBOworKwkJRUNfS0VZX25ldzsKKysJCVNIQTI1Nl9UcmFuc2Zvcm07CisrCQlFQ19LRVlfc2V0X2VuY19mbGFnczsKKysJCUVDRFNBX3ZlcmlmeTsKKysJCUVDX1BPSU5UX3BvaW50MmhleDsKKysJCUVOR0lORV9nZXRfU1RPUkU7CisrCQlTSEE1MTI7CisrCQlTVE9SRV9nZXRfY2VydGlmaWNhdGU7CisrCQlFQ0RTQV9kb19zaWduX2V4OworKwkJRUNEU0FfZG9fdmVyaWZ5OworKwkJZDJpX0VDUHJpdmF0ZUtleV9mcDsKKysJCVNUT1JFX2RlbGV0ZV9jZXJ0aWZpY2F0ZTsKKysJCVNIQTUxMl9UcmFuc2Zvcm07CisrCQlYNTA5X1NUT1JFX3NldDFfcGFyYW07CisrCQlTVE9SRV9tZXRob2RfZ2V0X2N0cmxfZnVuY3Rpb247CisrCQlTVE9SRV9mcmVlOworKwkJUEVNX3dyaXRlX0VDUHJpdmF0ZUtleTsKKysJCVNUT1JFX21ldGhfZ2V0X3VubG9ja19zdG9yZV9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfdW5sb2NrX3N0b3JlX2Z1bmN0aW9uOworKwkJU1RPUkVfZ2V0X2V4X2RhdGE7CisrCQlFQ19LRVlfc2V0X3B1YmxpY19rZXk7CisrCQlQRU1fcmVhZF9FQ1BLUGFyYW1ldGVyczsKKysJCVg1MDlfQ0VSVF9QQUlSX25ldzsKKysJCUVOR0lORV9yZWdpc3Rlcl9TVE9SRTsKKysJCVJTQV9nZW5lcmF0ZV9rZXlfZXg7CisrCQlEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leDsKKysJCUVDUGFyYW1ldGVyc19wcmludF9mcDsKKysJCVg1MDlWM19OQU1FX2Zyb21fc2VjdGlvbjsKKysJCUVWUF9QS0VZX2FkZDFfYXR0cjsKKysJCVNUT1JFX21vZGlmeV9jcmw7CisrCQlTVE9SRV9saXN0X3ByaXZhdGVfa2V5X3N0YXJ0OworKwkJUE9MSUNZX01BUFBJTkdTX2l0OworKwkJR0VORVJBTF9TVUJUUkVFX2l0OworKwkJRUNfR1JPVVBfZ2V0X2N1cnZlX25hbWU7CisrCQlQRU1fd3JpdGVfWDUwOV9DRVJUX1BBSVI7CisrCQlCSU9fZHVtcF9pbmRlbnRfY2I7CisrCQlkMmlfWDUwOV9DRVJUX1BBSVI7CisrCQlTVE9SRV9saXN0X3ByaXZhdGVfa2V5X2VuZHA7CisrCQlhc24xX2NvbnN0X0ZpbmlzaDsKKysJCWkyZF9FQ19QVUJLRVlfZnA7CisrCQlCTl9uaXN0X21vZF8yNTY7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9hZGQwX3RhYmxlOworKwkJcHF1ZXVlX2ZyZWU7CisrCQlCTl9CTElORElOR19jcmVhdGVfcGFyYW07CisrCQlFQ0RTQV9zaXplOworKwkJZDJpX0VDX1BVQktFWV9iaW87CisrCQlCTl9nZXQwX25pc3RfcHJpbWVfNTIxOworKwkJU1RPUkVfQVRUUl9JTkZPX21vZGlmeV9zaGExc3RyOworKwkJQk5fZ2VuZXJhdGVfcHJpbWVfZXg7CisrCQlFQ19HUk9VUF9uZXdfYnlfY3VydmVfbmFtZTsKKysJCVNIQTI1Nl9GaW5hbDsKKysJCURIX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXg7CisrCQlQRU1fcmVhZF9iaW9fRUNQcml2YXRlS2V5OworKwkJU1RPUkVfbWV0aF9nZXRfY2xlYW51cF9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfY2xlYW51cF9mdW5jdGlvbjsKKysJCUVOR0lORV9nZXRfRUNESDsKKysJCWQyaV9FQ0RTQV9TSUc7CisrCQlCTl9pc19wcmltZV9mYXN0dGVzdF9leDsKKysJCUVDRFNBX3NpZ247CisrCQlYNTA5X3BvbGljeV9jaGVjazsKKysJCUVWUF9QS0VZX2dldF9hdHRyX2J5X05JRDsKKysJCVNUT1JFX3NldF9leF9kYXRhOworKwkJRU5HSU5FX2dldF9FQ0RTQTsKKysJCUVWUF9lY2RzYTsKKysJCUJOX0JMSU5ESU5HX2dldF9mbGFnczsKKysJCVBLQ1MxMl9hZGRfY2VydDsKKysJCVNUT1JFX09CSkVDVF9uZXc7CisrCQlFUlJfbG9hZF9FQ0RIX3N0cmluZ3M7CisrCQlFQ19LRVlfZHVwOworKwkJRVZQX0NJUEhFUl9DVFhfcmFuZF9rZXk7CisrCQlFQ0RTQV9zZXRfbWV0aG9kOworKwkJYTJpX0lQQUREUkVTU19OQzsKKysJCWQyaV9FQ1BhcmFtZXRlcnM7CisrCQlTVE9SRV9saXN0X2NlcnRpZmljYXRlX2VuZDsKKysJCVNUT1JFX2dldF9jcmw7CisrCQlYNTA5X1BPTElDWV9OT0RFX3ByaW50OworKwkJU0hBMzg0X0luaXQ7CisrCQlFQ19HRjJtX3NpbXBsZV9tZXRob2Q7CisrCQlFQ0RTQV9zZXRfZXhfZGF0YTsKKysJCVNIQTM4NF9GaW5hbDsKKysJCVBLQ1M3X3NldF9kaWdlc3Q7CisrCQlFQ19LRVlfcHJpbnQ7CisrCQlTVE9SRV9tZXRoX3NldF9sb2NrX3N0b3JlX2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9sb2NrX3N0b3JlX2Z1bmN0aW9uOworKwkJRUNEU0FfZ2V0X2V4X25ld19pbmRleDsKKysJCVNIQTM4NDsKKysJCVBPTElDWV9NQVBQSU5HX25ldzsKKysJCVNUT1JFX2xpc3RfY2VydGlmaWNhdGVfZW5kcDsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDBfcG9saWN5X3RyZWU7CisrCQlFQ19HUk9VUF9zZXRfYXNuMV9mbGFnOworKwkJRUNfS0VZX2NoZWNrX2tleTsKKysJCWQyaV9FQ19QVUJLRVlfZnA7CisrCQlQS0NTN19zZXQwX3R5cGVfb3RoZXI7CisrCQlQRU1fcmVhZF9iaW9fWDUwOV9DRVJUX1BBSVI7CisrCQlwcXVldWVfbmV4dDsKKysJCVNUT1JFX21ldGhfZ2V0X2xpc3RfZW5kX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9saXN0X2VuZF9mdW5jdGlvbjsKKysJCUVWUF9QS0VZX2FkZDFfYXR0cl9ieV9PQko7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfdGltZTsKKysJCXBxdWV1ZV9uZXc7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfRUNESDsKKysJCVNUT1JFX25ld19tZXRob2Q7CisrCQlQS0NTMTJfYWRkX2tleTsKKysJCURTT19tZXJnZTsKKysJCUVDX1BPSU5UX2hleDJwb2ludDsKKysJCUJJT19kdW1wX2NiOworKwkJU0hBMjU2X1VwZGF0ZTsKKysJCXBxdWV1ZV9pbnNlcnQ7CisrCQlwaXRlbV9mcmVlOworKwkJQk5fR0YybV9tb2RfaW52X2FycjsKKysJCUVOR0lORV91bnJlZ2lzdGVyX0VDRFNBOworKwkJQk5fQkxJTkRJTkdfc2V0X3RocmVhZF9pZDsKKysJCWdldF9yZmMzNTI2X3ByaW1lXzgxOTI7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9jbGVhcl9mbGFnczsKKysJCWdldF9yZmMyNDA5X3ByaW1lXzEwMjQ7CisrCQlESF9jaGVja19wdWJfa2V5OworKwkJZ2V0X3JmYzM1MjZfcHJpbWVfMjA0ODsKKysJCWdldF9yZmMzNTI2X3ByaW1lXzYxNDQ7CisrCQlnZXRfcmZjMzUyNl9wcmltZV8xNTM2OworKwkJZ2V0X3JmYzM1MjZfcHJpbWVfMzA3MjsKKysJCWdldF9yZmMzNTI2X3ByaW1lXzQwOTY7CisrCQlnZXRfcmZjMjQwOV9wcmltZV83Njg7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXRfZmxhZ3M7CisrCQlFVlBfQ0lQSEVSX0NUWF9uZXc7CisrCQlFVlBfQ0lQSEVSX0NUWF9mcmVlOworKwkJQ2FtZWxsaWFfY2JjX2VuY3J5cHQ7CisrCQlDYW1lbGxpYV9jZmIxMjhfZW5jcnlwdDsKKysJCUNhbWVsbGlhX2NmYjFfZW5jcnlwdDsKKysJCUNhbWVsbGlhX2NmYjhfZW5jcnlwdDsKKysJCUNhbWVsbGlhX2N0cjEyOF9lbmNyeXB0OworKwkJQ2FtZWxsaWFfY2Zicl9lbmNyeXB0X2Jsb2NrOworKwkJQ2FtZWxsaWFfZGVjcnlwdDsKKysJCUNhbWVsbGlhX2VjYl9lbmNyeXB0OworKwkJQ2FtZWxsaWFfZW5jcnlwdDsKKysJCUNhbWVsbGlhX29mYjEyOF9lbmNyeXB0OworKwkJQ2FtZWxsaWFfc2V0X2tleTsKKysJCUVWUF9jYW1lbGxpYV8xMjhfY2JjOworKwkJRVZQX2NhbWVsbGlhXzEyOF9jZmIxMjg7CisrCQlFVlBfY2FtZWxsaWFfMTI4X2NmYjE7CisrCQlFVlBfY2FtZWxsaWFfMTI4X2NmYjg7CisrCQlFVlBfY2FtZWxsaWFfMTI4X2VjYjsKKysJCUVWUF9jYW1lbGxpYV8xMjhfb2ZiOworKwkJRVZQX2NhbWVsbGlhXzE5Ml9jYmM7CisrCQlFVlBfY2FtZWxsaWFfMTkyX2NmYjEyODsKKysJCUVWUF9jYW1lbGxpYV8xOTJfY2ZiMTsKKysJCUVWUF9jYW1lbGxpYV8xOTJfY2ZiODsKKysJCUVWUF9jYW1lbGxpYV8xOTJfZWNiOworKwkJRVZQX2NhbWVsbGlhXzE5Ml9vZmI7CisrCQlFVlBfY2FtZWxsaWFfMjU2X2NiYzsKKysJCUVWUF9jYW1lbGxpYV8yNTZfY2ZiMTI4OworKwkJRVZQX2NhbWVsbGlhXzI1Nl9jZmIxOworKwkJRVZQX2NhbWVsbGlhXzI1Nl9jZmI4OworKwkJRVZQX2NhbWVsbGlhXzI1Nl9lY2I7CisrCQlFVlBfY2FtZWxsaWFfMjU2X29mYjsKKysJCWEyaV9pcGFkZDsKKysJCUFTSWRlbnRpZmllcnNfZnJlZTsKKysJCWkyZF9BU0lkT3JSYW5nZTsKKysJCUVWUF9DSVBIRVJfYmxvY2tfc2l6ZTsKKysJCXYzX2FzaWRfaXNfY2Fub25pY2FsOworKwkJSVBBZGRyZXNzQ2hvaWNlX2ZyZWU7CisrCQlFVlBfQ0lQSEVSX0NUWF9zZXRfYXBwX2RhdGE7CisrCQlCSU9fc2V0X2NhbGxiYWNrX2FyZzsKKysJCXYzX2FkZHJfYWRkX3ByZWZpeDsKKysJCUlQQWRkcmVzc09yUmFuZ2VfaXQ7CisrCQlCSU9fc2V0X2ZsYWdzOworKwkJQVNJZGVudGlmaWVyc19pdDsKKysJCXYzX2FkZHJfZ2V0X3JhbmdlOworKwkJQklPX21ldGhvZF90eXBlOworKwkJdjNfYWRkcl9pbmhlcml0czsKKysJCUlQQWRkcmVzc0Nob2ljZV9pdDsKKysJCUFFU19pZ2VfZW5jcnlwdDsKKysJCXYzX2FkZHJfYWRkX3JhbmdlOworKwkJRVZQX0NJUEhFUl9DVFhfbmlkOworKwkJZDJpX0FTUmFuZ2U7CisrCQl2M19hZGRyX2FkZF9pbmhlcml0OworKwkJdjNfYXNpZF9hZGRfaWRfb3JfcmFuZ2U7CisrCQl2M19hZGRyX3ZhbGlkYXRlX3Jlc291cmNlX3NldDsKKysJCUVWUF9DSVBIRVJfaXZfbGVuZ3RoOworKwkJRVZQX01EX3R5cGU7CisrCQl2M19hc2lkX2Nhbm9uaXplOworKwkJSVBBZGRyZXNzUmFuZ2VfZnJlZTsKKysJCXYzX2FzaWRfYWRkX2luaGVyaXQ7CisrCQlFVlBfQ0lQSEVSX0NUWF9rZXlfbGVuZ3RoOworKwkJSVBBZGRyZXNzUmFuZ2VfbmV3OworKwkJQVNJZE9yUmFuZ2VfbmV3OworKwkJRVZQX01EX3NpemU7CisrCQlFVlBfTURfQ1RYX3Rlc3RfZmxhZ3M7CisrCQlCSU9fY2xlYXJfZmxhZ3M7CisrCQlpMmRfQVNSYW5nZTsKKysJCUlQQWRkcmVzc1JhbmdlX2l0OworKwkJSVBBZGRyZXNzQ2hvaWNlX25ldzsKKysJCUFTSWRlbnRpZmllckNob2ljZV9uZXc7CisrCQlBU1JhbmdlX2ZyZWU7CisrCQlFVlBfTURfcGtleV90eXBlOworKwkJRVZQX01EX0NUWF9jbGVhcl9mbGFnczsKKysJCUlQQWRkcmVzc0ZhbWlseV9mcmVlOworKwkJaTJkX0lQQWRkcmVzc0ZhbWlseTsKKysJCUlQQWRkcmVzc09yUmFuZ2VfbmV3OworKwkJRVZQX0NJUEhFUl9mbGFnczsKKysJCXYzX2FzaWRfdmFsaWRhdGVfcmVzb3VyY2Vfc2V0OworKwkJZDJpX0lQQWRkcmVzc1JhbmdlOworKwkJQUVTX2JpX2lnZV9lbmNyeXB0OworKwkJQklPX2dldF9jYWxsYmFjazsKKysJCUlQQWRkcmVzc09yUmFuZ2VfZnJlZTsKKysJCXYzX2FkZHJfc3Vic2V0OworKwkJZDJpX0lQQWRkcmVzc0ZhbWlseTsKKysJCXYzX2FzaWRfc3Vic2V0OworKwkJQklPX3Rlc3RfZmxhZ3M7CisrCQlpMmRfQVNJZGVudGlmaWVyQ2hvaWNlOworKwkJQVNSYW5nZV9pdDsKKysJCWQyaV9BU0lkZW50aWZpZXJzOworKwkJQVNSYW5nZV9uZXc7CisrCQlkMmlfSVBBZGRyZXNzQ2hvaWNlOworKwkJdjNfYWRkcl9nZXRfYWZpOworKwkJRVZQX0NJUEhFUl9rZXlfbGVuZ3RoOworKwkJRVZQX0NpcGhlcjsKKysJCWkyZF9JUEFkZHJlc3NPclJhbmdlOworKwkJQVNJZE9yUmFuZ2VfaXQ7CisrCQlFVlBfQ0lQSEVSX25pZDsKKysJCWkyZF9JUEFkZHJlc3NDaG9pY2U7CisrCQlFVlBfQ0lQSEVSX0NUWF9ibG9ja19zaXplOworKwkJQVNJZGVudGlmaWVyc19uZXc7CisrCQl2M19hZGRyX3ZhbGlkYXRlX3BhdGg7CisrCQlJUEFkZHJlc3NGYW1pbHlfbmV3OworKwkJRVZQX01EX0NUWF9zZXRfZmxhZ3M7CisrCQl2M19hZGRyX2lzX2Nhbm9uaWNhbDsKKysJCWkyZF9JUEFkZHJlc3NSYW5nZTsKKysJCUlQQWRkcmVzc0ZhbWlseV9pdDsKKysJCXYzX2FzaWRfaW5oZXJpdHM7CisrCQlFVlBfQ0lQSEVSX0NUWF9jaXBoZXI7CisrCQlFVlBfQ0lQSEVSX0NUWF9nZXRfYXBwX2RhdGE7CisrCQlFVlBfTURfYmxvY2tfc2l6ZTsKKysJCUVWUF9DSVBIRVJfQ1RYX2ZsYWdzOworKwkJdjNfYXNpZF92YWxpZGF0ZV9wYXRoOworKwkJZDJpX0lQQWRkcmVzc09yUmFuZ2U7CisrCQl2M19hZGRyX2Nhbm9uaXplOworKwkJQVNJZGVudGlmaWVyQ2hvaWNlX2l0OworKwkJRVZQX01EX0NUWF9tZDsKKysJCWQyaV9BU0lkZW50aWZpZXJDaG9pY2U7CisrCQlCSU9fbWV0aG9kX25hbWU7CisrCQlFVlBfQ0lQSEVSX0NUWF9pdl9sZW5ndGg7CisrCQlBU0lkT3JSYW5nZV9mcmVlOworKwkJQVNJZGVudGlmaWVyQ2hvaWNlX2ZyZWU7CisrCQlCSU9fZ2V0X2NhbGxiYWNrX2FyZzsKKysJCUJJT19zZXRfY2FsbGJhY2s7CisrCQlkMmlfQVNJZE9yUmFuZ2U7CisrCQlpMmRfQVNJZGVudGlmaWVyczsKKysJCVNFRURfZGVjcnlwdDsKKysJCVNFRURfZW5jcnlwdDsKKysJCVNFRURfY2JjX2VuY3J5cHQ7CisrCQlFVlBfc2VlZF9vZmI7CisrCQlTRUVEX2NmYjEyOF9lbmNyeXB0OworKwkJU0VFRF9vZmIxMjhfZW5jcnlwdDsKKysJCUVWUF9zZWVkX2NiYzsKKysJCVNFRURfZWNiX2VuY3J5cHQ7CisrCQlFVlBfc2VlZF9lY2I7CisrCQlTRUVEX3NldF9rZXk7CisrCQlFVlBfc2VlZF9jZmIxMjg7CisrCQlYNTA5X0VYVEVOU0lPTlNfaXQ7CisrCQlYNTA5X2dldDFfb2NzcDsKKysJCU9DU1BfUkVRX0NUWF9mcmVlOworKwkJaTJkX1g1MDlfRVhURU5TSU9OUzsKKysJCU9DU1Bfc2VuZHJlcV9uYmlvOworKwkJT0NTUF9zZW5kcmVxX25ldzsKKysJCWQyaV9YNTA5X0VYVEVOU0lPTlM7CisrCQlYNTA5X0FMR09SU19pdDsKKysJCVg1MDlfQUxHT1JfZ2V0MDsKKysJCVg1MDlfQUxHT1Jfc2V0MDsKKysJCUFFU191bndyYXBfa2V5OworKwkJQUVTX3dyYXBfa2V5OworKwkJWDUwOWF0X2dldDBfZGF0YV9ieV9PQko7CisrCQlBU04xX1RZUEVfc2V0MTsKKysJCUFTTjFfU1RSSU5HX3NldDA7CisrCQlpMmRfWDUwOV9BTEdPUlM7CisrCQlCSU9fZl96bGliOworKwkJQ09NUF96bGliX2NsZWFudXA7CisrCQlkMmlfWDUwOV9BTEdPUlM7CisrCQlDTVNfUmVjZWlwdFJlcXVlc3RfZnJlZTsKKysJCVBFTV93cml0ZV9DTVM7CisrCQlDTVNfYWRkMF9DZXJ0aWZpY2F0ZUNob2ljZXM7CisrCQlDTVNfdW5zaWduZWRfYWRkMV9hdHRyX2J5X09CSjsKKysJCUVSUl9sb2FkX0NNU19zdHJpbmdzOworKwkJQ01TX3NpZ25fcmVjZWlwdDsKKysJCWkyZF9DTVNfQ29udGVudEluZm87CisrCQlDTVNfc2lnbmVkX2RlbGV0ZV9hdHRyOworKwkJZDJpX0NNU19iaW87CisrCQlDTVNfdW5zaWduZWRfZ2V0X2F0dHJfYnlfTklEOworKwkJQ01TX3ZlcmlmeTsKKysJCVNNSU1FX3JlYWRfQ01TOworKwkJQ01TX2RlY3J5cHRfc2V0MV9rZXk7CisrCQlDTVNfU2lnbmVySW5mb19nZXQwX2FsZ3M7CisrCQlDTVNfYWRkMV9jZXJ0OworKwkJQ01TX3NldF9kZXRhY2hlZDsKKysJCUNNU19lbmNyeXB0OworKwkJQ01TX0VudmVsb3BlZERhdGFfY3JlYXRlOworKwkJQ01TX3VuY29tcHJlc3M7CisrCQlDTVNfYWRkMF9jcmw7CisrCQlDTVNfU2lnbmVySW5mb192ZXJpZnlfY29udGVudDsKKysJCUNNU191bnNpZ25lZF9nZXQwX2RhdGFfYnlfT0JKOworKwkJUEVNX3dyaXRlX2Jpb19DTVM7CisrCQlDTVNfdW5zaWduZWRfZ2V0X2F0dHI7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rdHJpX2NlcnRfY21wOworKwkJQ01TX1JlY2lwaWVudEluZm9fa3RyaV9nZXQwX2FsZ3M7CisrCQlDTVNfUmVjaXBJbmZvX2t0cmlfZ2V0MF9hbGdzOworKwkJQ01TX0NvbnRlbnRJbmZvX2ZyZWU7CisrCQlDTVNfZmluYWw7CisrCQlDTVNfYWRkX3NpbXBsZV9zbWltZWNhcDsKKysJCUNNU19TaWduZXJJbmZvX3ZlcmlmeTsKKysJCUNNU19kYXRhOworKwkJQ01TX0NvbnRlbnRJbmZvX2l0OworKwkJZDJpX0NNU19SZWNlaXB0UmVxdWVzdDsKKysJCUNNU19jb21wcmVzczsKKysJCUNNU19kaWdlc3RfY3JlYXRlOworKwkJQ01TX1NpZ25lckluZm9fY2VydF9jbXA7CisrCQlDTVNfU2lnbmVySW5mb19zaWduOworKwkJQ01TX2RhdGFfY3JlYXRlOworKwkJaTJkX0NNU19iaW87CisrCQlDTVNfRW5jcnlwdGVkRGF0YV9zZXQxX2tleTsKKysJCUNNU19kZWNyeXB0OworKwkJaW50X3NtaW1lX3dyaXRlX0FTTjE7CisrCQlDTVNfdW5zaWduZWRfZGVsZXRlX2F0dHI7CisrCQlDTVNfdW5zaWduZWRfZ2V0X2F0dHJfY291bnQ7CisrCQlDTVNfYWRkX3NtaW1lY2FwOworKwkJUEVNX3JlYWRfQ01TOworKwkJQ01TX3NpZ25lZF9nZXRfYXR0cl9ieV9PQko7CisrCQlkMmlfQ01TX0NvbnRlbnRJbmZvOworKwkJQ01TX2FkZF9zdGFuZGFyZF9zbWltZWNhcDsKKysJCUNNU19Db250ZW50SW5mb19uZXc7CisrCQlDTVNfUmVjaXBpZW50SW5mb190eXBlOworKwkJQ01TX2dldDBfdHlwZTsKKysJCUNNU19pc19kZXRhY2hlZDsKKysJCUNNU19zaWduOworKwkJQ01TX3NpZ25lZF9hZGQxX2F0dHI7CisrCQlDTVNfdW5zaWduZWRfZ2V0X2F0dHJfYnlfT0JKOworKwkJU01JTUVfd3JpdGVfQ01TOworKwkJQ01TX0VuY3J5cHRlZERhdGFfZGVjcnlwdDsKKysJCUNNU19nZXQwX1JlY2lwaWVudEluZm9zOworKwkJQ01TX2FkZDBfUmV2b2NhdGlvbkluZm9DaG9pY2U7CisrCQlDTVNfZGVjcnlwdF9zZXQxX3BrZXk7CisrCQlDTVNfU2lnbmVySW5mb19zZXQxX3NpZ25lcl9jZXJ0OworKwkJQ01TX2dldDBfc2lnbmVyczsKKysJCUNNU19SZWNlaXB0UmVxdWVzdF9nZXQwX3ZhbHVlczsKKysJCUNNU19zaWduZWRfZ2V0MF9kYXRhX2J5X09CSjsKKysJCUNNU19nZXQwX1NpZ25lckluZm9zOworKwkJQ01TX2FkZDBfY2VydDsKKysJCUNNU19FbmNyeXB0ZWREYXRhX2VuY3J5cHQ7CisrCQlDTVNfZGlnZXN0X3ZlcmlmeTsKKysJCUNNU19zZXQxX3NpZ25lcnNfY2VydHM7CisrCQlDTVNfc2lnbmVkX2dldF9hdHRyOworKwkJQ01TX1JlY2lwaWVudEluZm9fc2V0MF9rZXk7CisrCQlDTVNfU2lnbmVkRGF0YV9pbml0OworKwkJQ01TX1JlY2lwaWVudEluZm9fa2VrcmlfZ2V0MF9pZDsKKysJCUNNU192ZXJpZnlfcmVjZWlwdDsKKysJCUNNU19SZWNlaXB0UmVxdWVzdF9pdDsKKysJCVBFTV9yZWFkX2Jpb19DTVM7CisrCQlDTVNfZ2V0MV9jcmxzOworKwkJQ01TX2FkZDBfcmVjaXBpZW50X2tleTsKKysJCVNNSU1FX3JlYWRfQVNOMTsKKysJCUNNU19SZWNlaXB0UmVxdWVzdF9uZXc7CisrCQlDTVNfZ2V0MF9jb250ZW50OworKwkJQ01TX2dldDFfUmVjZWlwdFJlcXVlc3Q7CisrCQlDTVNfc2lnbmVkX2FkZDFfYXR0cl9ieV9PQko7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rZWtyaV9pZF9jbXA7CisrCQlDTVNfYWRkMV9SZWNlaXB0UmVxdWVzdDsKKysJCUNNU19TaWduZXJJbmZvX2dldDBfc2lnbmVyX2lkOworKwkJQ01TX3Vuc2lnbmVkX2FkZDFfYXR0cl9ieV9OSUQ7CisrCQlDTVNfdW5zaWduZWRfYWRkMV9hdHRyOworKwkJQ01TX3NpZ25lZF9nZXRfYXR0cl9ieV9OSUQ7CisrCQlDTVNfZ2V0MV9jZXJ0czsKKysJCUNNU19zaWduZWRfYWRkMV9hdHRyX2J5X05JRDsKKysJCUNNU191bnNpZ25lZF9hZGQxX2F0dHJfYnlfdHh0OworKwkJQ01TX2RhdGFGaW5hbDsKKysJCUNNU19SZWNpcGllbnRJbmZvX2t0cmlfZ2V0MF9zaWduZXJfaWQ7CisrCQlDTVNfUmVjaXBJbmZvX2t0cmlfZ2V0MF9zaWdyX2lkOworKwkJaTJkX0NNU19SZWNlaXB0UmVxdWVzdDsKKysJCUNNU19hZGQxX3JlY2lwaWVudF9jZXJ0OworKwkJQ01TX2RhdGFJbml0OworKwkJQ01TX3NpZ25lZF9hZGQxX2F0dHJfYnlfdHh0OworKwkJQ01TX1JlY2lwaWVudEluZm9fZGVjcnlwdDsKKysJCUNNU19zaWduZWRfZ2V0X2F0dHJfY291bnQ7CisrCQlDTVNfZ2V0MF9lQ29udGVudFR5cGU7CisrCQlDTVNfc2V0MV9lQ29udGVudFR5cGU7CisrCQlDTVNfUmVjZWlwdFJlcXVlc3RfY3JlYXRlMDsKKysJCUNNU19hZGQxX3NpZ25lcjsKKysJCUNNU19SZWNpcGllbnRJbmZvX3NldDBfcGtleTsKKysJCUVOR0lORV9zZXRfbG9hZF9zc2xfY2xpZW50X2NlcnRfZnVuY3Rpb247CisrCQlFTkdJTkVfc2V0X2xkX3NzbF9jbG50X2NlcnRfZm47CisrCQlFTkdJTkVfZ2V0X3NzbF9jbGllbnRfY2VydF9mdW5jdGlvbjsKKysJCUVOR0lORV9nZXRfc3NsX2NsaWVudF9jZXJ0X2ZuOworKwkJRU5HSU5FX2xvYWRfc3NsX2NsaWVudF9jZXJ0OworKwkJRU5HSU5FX2xvYWRfY2FwaTsKKysJCU9QRU5TU0xfaXNzZXJ2aWNlOworKwkJRklQU19kc2Ffc2lnX2RlY29kZTsKKysJCUVWUF9DSVBIRVJfQ1RYX2NsZWFyX2ZsYWdzOworKwkJRklQU19yYW5kX3N0YXR1czsKKysJCUZJUFNfcmFuZF9zZXRfa2V5OworKwkJQ1JZUFRPX3NldF9tZW1faW5mb19mdW5jdGlvbnM7CisrCQlSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXg7CisrCQlpbnRfRVJSX3NldF9zdGF0ZV9mdW5jOworKwkJaW50X0VWUF9NRF9zZXRfZW5naW5lX2NhbGxiYWNrczsKKysJCWludF9DUllQVE9fc2V0X2RvX2R5bmxvY2tfY2FsbGJhY2s7CisrCQlGSVBTX3JuZ19zdGljazsKKysJCUVWUF9DSVBIRVJfQ1RYX3NldF9mbGFnczsKKysJCUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXg7CisrCQlGSVBTX3NlbGZ0ZXN0X2NoZWNrOworKwkJRklQU19yYW5kX3NldF9kdDsKKysJCUNSWVBUT19kYmdfcG9wX2luZm87CisrCQlGSVBTX2RzYV9mcmVlOworKwkJUlNBX1g5MzFfZGVyaXZlX2V4OworKwkJRklQU19yc2FfbmV3OworKwkJRklQU19yYW5kX2J5dGVzOworKwkJZmlwc19jaXBoZXJfdGVzdDsKKysJCUVWUF9DSVBIRVJfQ1RYX3Rlc3RfZmxhZ3M7CisrCQlDUllQVE9fbWFsbG9jX2RlYnVnX2luaXQ7CisrCQlDUllQVE9fZGJnX3B1c2hfaW5mbzsKKysJCUZJUFNfY29ycnVwdF9yc2Ffa2V5Z2VuOworKwkJRklQU19kaF9uZXc7CisrCQlGSVBTX2NvcnJ1cHRfZHNhX2tleWdlbjsKKysJCUZJUFNfZGhfZnJlZTsKKysJCWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdDsKKysJCUVWUF9hZGRfYWxnX21vZHVsZTsKKysJCWludF9SQU5EX2luaXRfZW5naW5lX2NhbGxiYWNrczsKKysJCWludF9FVlBfQ0lQSEVSX3NldF9lbmdpbmVfY2FsbGJhY2tzOworKwkJaW50X0VWUF9NRF9pbml0X2VuZ2luZV9jYWxsYmFja3M7CisrCQlGSVBTX3JhbmRfdGVzdF9tb2RlOworKwkJRklQU19yYW5kX3Jlc2V0OworKwkJRklQU19kc2FfbmV3OworKwkJaW50X1JBTkRfc2V0X2NhbGxiYWNrczsKKysJCUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4OworKwkJaW50X0VSUl9saWJfaW5pdDsKKysJCWludF9FVlBfQ0lQSEVSX2luaXRfZW5naW5lX2NhbGxiYWNrczsKKysJCUZJUFNfcnNhX2ZyZWU7CisrCQlGSVBTX2RzYV9zaWdfZW5jb2RlOworKwkJQ1JZUFRPX2RiZ19yZW1vdmVfYWxsX2luZm87CisrCQlPUEVOU1NMX2luaXQ7CisrCQlDUllQVE9fc3RyZHVwOworKwkJSlBBS0VfU1RFUDNBX3Byb2Nlc3M7CisrCQlKUEFLRV9TVEVQMV9yZWxlYXNlOworKwkJSlBBS0VfZ2V0X3NoYXJlZF9rZXk7CisrCQlKUEFLRV9TVEVQM0JfaW5pdDsKKysJCUpQQUtFX1NURVAxX2dlbmVyYXRlOworKwkJSlBBS0VfU1RFUDFfaW5pdDsKKysJCUpQQUtFX1NURVAzQl9wcm9jZXNzOworKwkJSlBBS0VfU1RFUDJfZ2VuZXJhdGU7CisrCQlKUEFLRV9DVFhfbmV3OworKwkJSlBBS0VfQ1RYX2ZyZWU7CisrCQlKUEFLRV9TVEVQM0JfcmVsZWFzZTsKKysJCUpQQUtFX1NURVAzQV9yZWxlYXNlOworKwkJSlBBS0VfU1RFUDJfcHJvY2VzczsKKysJCUpQQUtFX1NURVAzQl9nZW5lcmF0ZTsKKysJCUpQQUtFX1NURVAxX3Byb2Nlc3M7CisrCQlKUEFLRV9TVEVQM0FfZ2VuZXJhdGU7CisrCQlKUEFLRV9TVEVQMl9yZWxlYXNlOworKwkJSlBBS0VfU1RFUDNBX2luaXQ7CisrCQlFUlJfbG9hZF9KUEFLRV9zdHJpbmdzOworKwkJSlBBS0VfU1RFUDJfaW5pdDsKKysJCXBxdWV1ZV9zaXplOworKwkJaTJkX1RTX0FDQ1VSQUNZOworKwkJaTJkX1RTX01TR19JTVBSSU5UX2ZwOworKwkJaTJkX1RTX01TR19JTVBSSU5UOworKwkJRVZQX1BLRVlfcHJpbnRfcHVibGljOworKwkJRVZQX1BLRVlfQ1RYX25ldzsKKysJCWkyZF9UU19UU1RfSU5GTzsKKysJCUVWUF9QS0VZX2FzbjFfZmluZDsKKysJCURTT19NRVRIT0RfYmVvczsKKysJCVRTX0NPTkZfbG9hZF9jZXJ0OworKwkJVFNfUkVRX2dldF9leHQ7CisrCQlFVlBfUEtFWV9zaWduX2luaXQ7CisrCQlBU04xX2l0ZW1fcHJpbnQ7CisrCQlUU19UU1RfSU5GT19zZXRfbm9uY2U7CisrCQlUU19SRVNQX2R1cDsKKysJCUVOR0lORV9yZWdpc3Rlcl9wa2V5X21ldGhzOworKwkJRVZQX1BLRVlfYXNuMV9hZGQwOworKwkJUEtDUzdfYWRkMF9hdHRyaWJfc2lnbmluZ190aW1lOworKwkJaTJkX1RTX1RTVF9JTkZPX2ZwOworKwkJQklPX2FzbjFfZ2V0X3ByZWZpeDsKKysJCVRTX1RTVF9JTkZPX3NldF90aW1lOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfZGVjcnlwdDsKKysJCUVWUF9QS0VZX3NldF90eXBlX3N0cjsKKysJCUVWUF9QS0VZX0NUWF9nZXRfa2V5Z2VuX2luZm87CisrCQlUU19SRVFfc2V0X3BvbGljeV9pZDsKKysJCWQyaV9UU19SRVNQX2ZwOworKwkJRU5HSU5FX2dldF9wa2V5X2FzbjFfbWV0aF9lbmdpbmU7CisrCQlFTkdJTkVfZ2V0X3BrZXlfYXNuMV9tZXRoX2VuZzsKKysJCVdISVJMUE9PTF9Jbml0OworKwkJVFNfUkVTUF9zZXRfc3RhdHVzX2luZm87CisrCQlFVlBfUEtFWV9rZXlnZW47CisrCQlFVlBfRGlnZXN0U2lnbkluaXQ7CisrCQlUU19BQ0NVUkFDWV9zZXRfbWlsbGlzOworKwkJVFNfUkVRX2R1cDsKKysJCUdFTkVSQUxfTkFNRV9kdXA7CisrCQlBU04xX1NFUVVFTkNFX0FOWV9pdDsKKysJCVdISVJMUE9PTDsKKysJCVg1MDlfU1RPUkVfZ2V0MV9jcmxzOworKwkJRU5HSU5FX2dldF9wa2V5X2FzbjFfbWV0aDsKKysJCUVWUF9QS0VZX2FzbjFfbmV3OworKwkJQklPX25ld19OREVGOworKwkJRU5HSU5FX2dldF9wa2V5X21ldGg7CisrCQlUU19NU0dfSU1QUklOVF9zZXRfYWxnbzsKKysJCWkyZF9UU19UU1RfSU5GT19iaW87CisrCQlUU19UU1RfSU5GT19zZXRfb3JkZXJpbmc7CisrCQlUU19UU1RfSU5GT19nZXRfZXh0X2J5X09CSjsKKysJCUNSWVBUT19USFJFQURJRF9zZXRfcG9pbnRlcjsKKysJCVRTX0NPTkZfZ2V0X3RzYV9zZWN0aW9uOworKwkJU01JTUVfd3JpdGVfQVNOMTsKKysJCVRTX1JFU1BfQ1RYX3NldF9zaWduZXJfa2V5OworKwkJRVZQX1BLRVlfZW5jcnlwdF9vbGQ7CisrCQlFVlBfUEtFWV9lbmNyeXB0X2luaXQ7CisrCQlDUllQVE9fVEhSRUFESURfY3B5OworKwkJQVNOMV9QQ1RYX2dldF9jZXJ0X2ZsYWdzOworKwkJaTJkX0VTU19TSUdOSU5HX0NFUlQ7CisrCQlUU19DT05GX2xvYWRfa2V5OworKwkJaTJkX0FTTjFfU0VRVUVOQ0VfQU5ZOworKwkJZDJpX1RTX01TR19JTVBSSU5UX2JpbzsKKysJCUVWUF9QS0VZX2FzbjFfc2V0X3B1YmxpYzsKKysJCWIyaV9QdWJsaWNLZXlfYmlvOworKwkJQklPX2FzbjFfc2V0X3ByZWZpeDsKKysJCUVWUF9QS0VZX25ld19tYWNfa2V5OworKwkJQklPX25ld19DTVM7CisrCQlDUllQVE9fVEhSRUFESURfY21wOworKwkJVFNfUkVRX2V4dF9mcmVlOworKwkJRVZQX1BLRVlfYXNuMV9zZXRfZnJlZTsKKysJCUVWUF9QS0VZX2dldDBfYXNuMTsKKysJCWQyaV9ORVRTQ0FQRV9YNTA5OworKwkJRVZQX1BLRVlfdmVyaWZ5X3JlY292ZXJfaW5pdDsKKysJCUVWUF9QS0VZX0NUWF9zZXRfZGF0YTsKKysJCUVWUF9QS0VZX2tleWdlbl9pbml0OworKwkJVFNfUkVTUF9DVFhfc2V0X3N0YXR1c19pbmZvOworKwkJVFNfTVNHX0lNUFJJTlRfZ2V0X2FsZ287CisrCQlUU19SRVFfcHJpbnRfYmlvOworKwkJRVZQX1BLRVlfQ1RYX2N0cmxfc3RyOworKwkJRVZQX1BLRVlfZ2V0X2RlZmF1bHRfZGlnZXN0X25pZDsKKysJCVBFTV93cml0ZV9iaW9fUEtDUzdfc3RyZWFtOworKwkJVFNfTVNHX0lNUFJJTlRfcHJpbnRfYmlvOworKwkJQk5fYXNjMmJuOworKwkJVFNfUkVRX2dldF9wb2xpY3lfaWQ7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfcGtleV9hc24xX21ldGhzOworKwkJRU5HSU5FX3NldF9kZWZfcGtleV9hc24xX21ldGhzOworKwkJZDJpX1RTX0FDQ1VSQUNZOworKwkJRFNPX2dsb2JhbF9sb29rdXA7CisrCQlUU19DT05GX3NldF90c2FfbmFtZTsKKysJCWkyZF9BU04xX1NFVF9BTlk7CisrCQlFTkdJTkVfbG9hZF9nb3N0OworKwkJV0hJUkxQT09MX0JpdFVwZGF0ZTsKKysJCUFTTjFfUENUWF9nZXRfZmxhZ3M7CisrCQlUU19UU1RfSU5GT19nZXRfZXh0X2J5X05JRDsKKysJCVRTX1JFU1BfbmV3OworKwkJRVNTX0NFUlRfSURfZHVwOworKwkJVFNfU1RBVFVTX0lORk9fZHVwOworKwkJVFNfUkVRX2RlbGV0ZV9leHQ7CisrCQlFVlBfRGlnZXN0VmVyaWZ5RmluYWw7CisrCQlFVlBfUEtFWV9wcmludF9wYXJhbXM7CisrCQlpMmRfQ01TX2Jpb19zdHJlYW07CisrCQlUU19SRVFfZ2V0X21zZ19pbXByaW50OworKwkJT0JKX2ZpbmRfc2lnaWRfYnlfYWxnczsKKysJCVRTX1RTVF9JTkZPX2dldF9zZXJpYWw7CisrCQlUU19SRVFfZ2V0X25vbmNlOworKwkJWDUwOV9QVUJLRVlfc2V0MF9wYXJhbTsKKysJCUVWUF9QS0VZX0NUWF9zZXQwX2tleWdlbl9pbmZvOworKwkJRElTVF9QT0lOVF9zZXRfZHBuYW1lOworKwkJaTJkX0lTU1VJTkdfRElTVF9QT0lOVDsKKysJCUFTTjFfU0VUX0FOWV9pdDsKKysJCUVWUF9QS0VZX0NUWF9nZXRfZGF0YTsKKysJCVRTX1NUQVRVU19JTkZPX3ByaW50X2JpbzsKKysJCUVWUF9QS0VZX2Rlcml2ZV9pbml0OworKwkJZDJpX1RTX1RTVF9JTkZPOworKwkJRVZQX1BLRVlfYXNuMV9hZGRfYWxpYXM7CisrCQlkMmlfVFNfUkVTUF9iaW87CisrCQlPVEhFUk5BTUVfY21wOworKwkJR0VORVJBTF9OQU1FX3NldDBfdmFsdWU7CisrCQlQS0NTN19SRUNJUF9JTkZPX2dldDBfYWxnOworKwkJVFNfUkVTUF9DVFhfbmV3OworKwkJVFNfUkVTUF9zZXRfdHN0X2luZm87CisrCQlQS0NTN19maW5hbDsKKysJCUVWUF9QS0VZX2Jhc2VfaWQ7CisrCQlUU19SRVNQX0NUWF9zZXRfc2lnbmVyX2NlcnQ7CisrCQlUU19SRVFfc2V0X21zZ19pbXByaW50OworKwkJRVZQX1BLRVlfQ1RYX2N0cmw7CisrCQlUU19DT05GX3NldF9kaWdlc3RzOworKwkJZDJpX1RTX01TR19JTVBSSU5UOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfY3RybDsKKysJCVRTX1JFUV9nZXRfZXh0X2J5X05JRDsKKysJCVBLQ1M1X3BiZV9zZXQwX2FsZ29yOworKwkJQk5fQkxJTkRJTkdfdGhyZWFkX2lkOworKwkJVFNfQUNDVVJBQ1lfbmV3OworKwkJWDUwOV9DUkxfTUVUSE9EX2ZyZWU7CisrCQlBU04xX1BDVFhfZ2V0X25tX2ZsYWdzOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfc2lnbjsKKysJCUNSWVBUT19USFJFQURJRF9jdXJyZW50OworKwkJRVZQX1BLRVlfZGVjcnlwdF9pbml0OworKwkJTkVUU0NBUEVfWDUwOV9mcmVlOworKwkJaTJiX1BWS19iaW87CisrCQlFVlBfUEtFWV9wcmludF9wcml2YXRlOworKwkJR0VORVJBTF9OQU1FX2dldDBfdmFsdWU7CisrCQliMmlfUFZLX2JpbzsKKysJCUFTTjFfVVRDVElNRV9hZGo7CisrCQlUU19UU1RfSU5GT19uZXc7CisrCQlFVlBfTURfZG9fYWxsX3NvcnRlZDsKKysJCVRTX0NPTkZfc2V0X2RlZmF1bHRfZW5naW5lOworKwkJVFNfQUNDVVJBQ1lfc2V0X3NlY29uZHM7CisrCQlUU19UU1RfSU5GT19nZXRfdGltZTsKKysJCVBLQ1M4X3BrZXlfZ2V0MDsKKysJCUVWUF9QS0VZX2FzbjFfZ2V0MDsKKysJCU9CSl9hZGRfc2lnaWQ7CisrCQlQS0NTN19TSUdORVJfSU5GT19zaWduOworKwkJRVZQX1BLRVlfcGFyYW1nZW5faW5pdDsKKysJCUVWUF9QS0VZX3NpZ247CisrCQlPQkpfc2lnaWRfZnJlZTsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2luaXQ7CisrCQlkMmlfRVNTX0lTU1VFUl9TRVJJQUw7CisrCQlJU1NVSU5HX0RJU1RfUE9JTlRfbmV3OworKwkJQVNOMV9USU1FX2FkajsKKysJCVRTX09CSl9wcmludF9iaW87CisrCQlFVlBfUEtFWV9tZXRoX3NldF92ZXJpZnlfcmVjb3ZlcjsKKysJCUVWUF9QS0VZX21ldGhfc2V0X3ZyZnlfcmVjb3ZlcjsKKysJCVRTX1JFU1BfZ2V0X3N0YXR1c19pbmZvOworKwkJQ01TX3N0cmVhbTsKKysJCUVWUF9QS0VZX0NUWF9zZXRfY2I7CisrCQlQS0NTN190b19UU19UU1RfSU5GTzsKKysJCUFTTjFfUENUWF9nZXRfb2lkX2ZsYWdzOworKwkJVFNfVFNUX0lORk9fYWRkX2V4dDsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2Rlcml2ZTsKKysJCWkyZF9UU19SRVNQX2ZwOworKwkJaTJkX1RTX01TR19JTVBSSU5UX2JpbzsKKysJCVRTX1JFU1BfQ1RYX3NldF9hY2N1cmFjeTsKKysJCVRTX1JFUV9zZXRfbm9uY2U7CisrCQlFU1NfQ0VSVF9JRF9uZXc7CisrCQlFTkdJTkVfcGtleV9hc24xX2ZpbmRfc3RyOworKwkJVFNfUkVRX2dldF9leHRfY291bnQ7CisrCQlCVUZfcmV2ZXJzZTsKKysJCVRTX1RTVF9JTkZPX3ByaW50X2JpbzsKKysJCWQyaV9JU1NVSU5HX0RJU1RfUE9JTlQ7CisrCQlFTkdJTkVfZ2V0X3BrZXlfbWV0aHM7CisrCQlpMmJfUHJpdmF0ZUtleV9iaW87CisrCQlpMmRfVFNfUkVTUDsKKysJCWIyaV9QdWJsaWNLZXk7CisrCQlUU19WRVJJRllfQ1RYX2NsZWFudXA7CisrCQlUU19TVEFUVVNfSU5GT19mcmVlOworKwkJVFNfUkVTUF92ZXJpZnlfdG9rZW47CisrCQlPQkpfYnNlYXJjaF9leF87CisrCQlBU04xX2JuX3ByaW50OworKwkJRVZQX1BLRVlfYXNuMV9nZXRfY291bnQ7CisrCQlFTkdJTkVfcmVnaXN0ZXJfcGtleV9hc24xX21ldGhzOworKwkJQVNOMV9QQ1RYX3NldF9ubV9mbGFnczsKKysJCUVWUF9EaWdlc3RWZXJpZnlJbml0OworKwkJRU5HSU5FX3NldF9kZWZhdWx0X3BrZXlfbWV0aHM7CisrCQlUU19UU1RfSU5GT19nZXRfcG9saWN5X2lkOworKwkJVFNfUkVRX2dldF9jZXJ0X3JlcTsKKysJCVg1MDlfQ1JMX3NldF9tZXRoX2RhdGE7CisrCQlQS0NTOF9wa2V5X3NldDA7CisrCQlBU04xX1NUUklOR19jb3B5OworKwkJZDJpX1RTX1RTVF9JTkZPX2ZwOworKwkJWDUwOV9DUkxfbWF0Y2g7CisrCQlFVlBfUEtFWV9hc24xX3NldF9wcml2YXRlOworKwkJVFNfVFNUX0lORk9fZ2V0X2V4dF9kMmk7CisrCQlUU19SRVNQX0NUWF9hZGRfcG9saWN5OworKwkJZDJpX1RTX1JFU1A7CisrCQlUU19DT05GX2xvYWRfY2VydHM7CisrCQlUU19UU1RfSU5GT19nZXRfbXNnX2ltcHJpbnQ7CisrCQlFUlJfbG9hZF9UU19zdHJpbmdzOworKwkJVFNfVFNUX0lORk9fZ2V0X3ZlcnNpb247CisrCQlFVlBfUEtFWV9DVFhfZHVwOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfdmVyaWZ5OworKwkJaTJiX1B1YmxpY0tleV9iaW87CisrCQlUU19DT05GX3NldF9jZXJ0czsKKysJCUVWUF9QS0VZX2FzbjFfZ2V0MF9pbmZvOworKwkJVFNfVkVSSUZZX0NUWF9mcmVlOworKwkJVFNfUkVRX2dldF9leHRfYnlfY3JpdGljYWw7CisrCQlUU19SRVNQX0NUWF9zZXRfc2VyaWFsX2NiOworKwkJWDUwOV9DUkxfZ2V0X21ldGhfZGF0YTsKKysJCVRTX1JFU1BfQ1RYX3NldF90aW1lX2NiOworKwkJVFNfTVNHX0lNUFJJTlRfZ2V0X21zZzsKKysJCVRTX1RTVF9JTkZPX2V4dF9mcmVlOworKwkJVFNfUkVRX2dldF92ZXJzaW9uOworKwkJVFNfUkVRX2FkZF9leHQ7CisrCQlFVlBfUEtFWV9DVFhfc2V0X2FwcF9kYXRhOworKwkJT0JKX2JzZWFyY2hfOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfdmVyaWZ5Y3R4OworKwkJaTJkX1BLQ1M3X2Jpb19zdHJlYW07CisrCQlDUllQVE9fVEhSRUFESURfc2V0X251bWVyaWM7CisrCQlQS0NTN19zaWduX2FkZF9zaWduZXI7CisrCQlkMmlfVFNfVFNUX0lORk9fYmlvOworKwkJVFNfVFNUX0lORk9fZ2V0X29yZGVyaW5nOworKwkJVFNfUkVTUF9wcmludF9iaW87CisrCQlUU19UU1RfSU5GT19nZXRfZXh0czsKKysJCUhNQUNfQ1RYX2NvcHk7CisrCQlQS0NTNV9wYmUyX3NldF9pdjsKKysJCUVOR0lORV9nZXRfcGtleV9hc24xX21ldGhzOworKwkJYjJpX1ByaXZhdGVLZXk7CisrCQlFVlBfUEtFWV9DVFhfZ2V0X2FwcF9kYXRhOworKwkJVFNfUkVRX3NldF9jZXJ0X3JlcTsKKysJCUNSWVBUT19USFJFQURJRF9zZXRfY2FsbGJhY2s7CisrCQlUU19DT05GX3NldF9zZXJpYWw7CisrCQlUU19UU1RfSU5GT19mcmVlOworKwkJZDJpX1RTX1JFUV9mcDsKKysJCVRTX1JFU1BfdmVyaWZ5X3Jlc3BvbnNlOworKwkJaTJkX0VTU19JU1NVRVJfU0VSSUFMOworKwkJVFNfQUNDVVJBQ1lfZ2V0X3NlY29uZHM7CisrCQlFVlBfQ0lQSEVSX2RvX2FsbDsKKysJCWIyaV9Qcml2YXRlS2V5X2JpbzsKKysJCU9DU1BfQ0VSVElEX2R1cDsKKysJCVg1MDlfUFVCS0VZX2dldDBfcGFyYW07CisrCQlUU19NU0dfSU1QUklOVF9kdXA7CisrCQlQS0NTN19wcmludF9jdHg7CisrCQlpMmRfVFNfUkVRX2JpbzsKKysJCUVWUF93aGlybHBvb2w7CisrCQlFVlBfUEtFWV9hc24xX3NldF9wYXJhbTsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2VuY3J5cHQ7CisrCQlBU04xX1BDVFhfc2V0X2ZsYWdzOworKwkJaTJkX0VTU19DRVJUX0lEOworKwkJVFNfVkVSSUZZX0NUWF9uZXc7CisrCQlUU19SRVNQX0NUWF9zZXRfZXh0ZW5zaW9uX2NiOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9wa2V5X21ldGhzOworKwkJVFNfUkVTUF9DVFhfc2V0X3N0YXR1c19pbmZvX2NvbmQ7CisrCQlUU19SRVNQX0NUWF9zZXRfc3RhdF9pbmZvX2NvbmQ7CisrCQlFVlBfUEtFWV92ZXJpZnk7CisrCQlXSElSTFBPT0xfRmluYWw7CisrCQlYNTA5X0NSTF9NRVRIT0RfbmV3OworKwkJRVZQX0RpZ2VzdFNpZ25GaW5hbDsKKysJCVRTX1JFU1BfQ1RYX3NldF9kZWZfcG9saWN5OworKwkJTkVUU0NBUEVfWDUwOV9pdDsKKysJCVRTX1JFU1BfY3JlYXRlX3Jlc3BvbnNlOworKwkJUEtDUzdfU0lHTkVSX0lORk9fZ2V0MF9hbGdzOworKwkJVFNfVFNUX0lORk9fZ2V0X25vbmNlOworKwkJRVZQX1BLRVlfZGVjcnlwdF9vbGQ7CisrCQlUU19UU1RfSU5GT19zZXRfcG9saWN5X2lkOworKwkJVFNfQ09ORl9zZXRfZXNzX2NlcnRfaWRfY2hhaW47CisrCQlFVlBfUEtFWV9DVFhfZ2V0MF9wa2V5OworKwkJZDJpX1RTX1JFUTsKKysJCUVWUF9QS0VZX2FzbjFfZmluZF9zdHI7CisrCQlCSU9fZl9hc24xOworKwkJRVNTX1NJR05JTkdfQ0VSVF9uZXc7CisrCQlFVlBfUEJFX2ZpbmQ7CisrCQlYNTA5X0NSTF9nZXQwX2J5X2NlcnQ7CisrCQlFVlBfUEtFWV9kZXJpdmU7CisrCQlpMmRfVFNfUkVROworKwkJVFNfVFNUX0lORk9fZGVsZXRlX2V4dDsKKysJCUVTU19JU1NVRVJfU0VSSUFMX2ZyZWU7CisrCQlBU04xX1BDVFhfc2V0X3N0cl9mbGFnczsKKysJCUVOR0lORV9nZXRfcGtleV9hc24xX21ldGhfc3RyOworKwkJVFNfQ09ORl9zZXRfc2lnbmVyX2tleTsKKysJCVRTX0FDQ1VSQUNZX2dldF9taWxsaXM7CisrCQlUU19SRVNQX2dldF90b2tlbjsKKysJCVRTX0FDQ1VSQUNZX2R1cDsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfcGtleV9hc24xX21ldGhzOworKwkJRU5HSU5FX3JlZ19hbGxfcGtleV9hc24xX21ldGhzOworKwkJWDUwOV9DUkxfc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJQ1JZUFRPX1RIUkVBRElEX2hhc2g7CisrCQlDTVNfQ29udGVudEluZm9fcHJpbnRfY3R4OworKwkJVFNfUkVTUF9mcmVlOworKwkJSVNTVUlOR19ESVNUX1BPSU5UX2ZyZWU7CisrCQlFU1NfSVNTVUVSX1NFUklBTF9uZXc7CisrCQlDTVNfYWRkMV9jcmw7CisrCQlQS0NTN19hZGQxX2F0dHJpYl9kaWdlc3Q7CisrCQlUU19SRVNQX0NUWF9hZGRfbWQ7CisrCQlUU19UU1RfSU5GT19kdXA7CisrCQlFTkdJTkVfc2V0X3BrZXlfYXNuMV9tZXRoczsKKysJCVBFTV93cml0ZV9iaW9fUGFyYW1ldGVyczsKKysJCVRTX1RTVF9JTkZPX2dldF9hY2N1cmFjeTsKKysJCVg1MDlfQ1JMX2dldDBfYnlfc2VyaWFsOworKwkJVFNfVFNUX0lORk9fc2V0X3ZlcnNpb247CisrCQlUU19SRVNQX0NUWF9nZXRfdHN0X2luZm87CisrCQlUU19SRVNQX3ZlcmlmeV9zaWduYXR1cmU7CisrCQlDUllQVE9fVEhSRUFESURfZ2V0X2NhbGxiYWNrOworKwkJVFNfVFNUX0lORk9fZ2V0X3RzYTsKKysJCVRTX1NUQVRVU19JTkZPX25ldzsKKysJCUVWUF9QS0VZX0NUWF9nZXRfY2I7CisrCQlUU19SRVFfZ2V0X2V4dF9kMmk7CisrCQlHRU5FUkFMX05BTUVfc2V0MF9vdGhlcm5hbWU7CisrCQlUU19UU1RfSU5GT19nZXRfZXh0X2NvdW50OworKwkJVFNfUkVTUF9DVFhfZ2V0X3JlcXVlc3Q7CisrCQlpMmRfTkVUU0NBUEVfWDUwOTsKKysJCUVOR0lORV9nZXRfcGtleV9tZXRoX2VuZ2luZTsKKysJCUVWUF9QS0VZX21ldGhfc2V0X3NpZ25jdHg7CisrCQlFVlBfUEtFWV9hc24xX2NvcHk7CisrCQlBU04xX1RZUEVfY21wOworKwkJRVZQX0NJUEhFUl9kb19hbGxfc29ydGVkOworKwkJRVZQX1BLRVlfQ1RYX2ZyZWU7CisrCQlJU1NVSU5HX0RJU1RfUE9JTlRfaXQ7CisrCQlkMmlfVFNfTVNHX0lNUFJJTlRfZnA7CisrCQlYNTA5X1NUT1JFX2dldDFfY2VydHM7CisrCQlFVlBfUEtFWV9DVFhfZ2V0X29wZXJhdGlvbjsKKysJCWQyaV9FU1NfU0lHTklOR19DRVJUOworKwkJVFNfQ09ORl9zZXRfb3JkZXJpbmc7CisrCQlFVlBfUEJFX2FsZ19hZGRfdHlwZTsKKysJCVRTX1JFUV9zZXRfdmVyc2lvbjsKKysJCUVWUF9QS0VZX2dldDA7CisrCQlCSU9fYXNuMV9zZXRfc3VmZml4OworKwkJaTJkX1RTX1NUQVRVU19JTkZPOworKwkJRVZQX01EX2RvX2FsbDsKKysJCVRTX1RTVF9JTkZPX3NldF9hY2N1cmFjeTsKKysJCVBLQ1M3X2FkZF9hdHRyaWJfY29udGVudF90eXBlOworKwkJRVJSX3JlbW92ZV90aHJlYWRfc3RhdGU7CisrCQlFVlBfUEtFWV9tZXRoX2FkZDA7CisrCQlUU19UU1RfSU5GT19zZXRfdHNhOworKwkJRVZQX1BLRVlfbWV0aF9uZXc7CisrCQlXSElSTFBPT0xfVXBkYXRlOworKwkJVFNfQ09ORl9zZXRfYWNjdXJhY3k7CisrCQlBU04xX1BDVFhfc2V0X29pZF9mbGFnczsKKysJCUVTU19TSUdOSU5HX0NFUlRfZHVwOworKwkJZDJpX1RTX1JFUV9iaW87CisrCQlYNTA5X3RpbWVfYWRqX2V4OworKwkJVFNfUkVTUF9DVFhfYWRkX2ZsYWdzOworKwkJZDJpX1RTX1NUQVRVU19JTkZPOworKwkJVFNfTVNHX0lNUFJJTlRfc2V0X21zZzsKKysJCUJJT19hc24xX2dldF9zdWZmaXg7CisrCQlUU19SRVFfZnJlZTsKKysJCUVWUF9QS0VZX21ldGhfZnJlZTsKKysJCVRTX1JFUV9nZXRfZXh0czsKKysJCVRTX1JFU1BfQ1RYX3NldF9jbG9ja19wcmVjaXNpb25fZGlnaXRzOworKwkJVFNfUkVTUF9DVFhfc2V0X2Nsa19wcmVjX2RpZ2l0czsKKysJCVRTX1JFU1BfQ1RYX2FkZF9mYWlsdXJlX2luZm87CisrCQlpMmRfVFNfUkVTUF9iaW87CisrCQlFVlBfUEtFWV9DVFhfZ2V0MF9wZWVya2V5OworKwkJUEVNX3dyaXRlX2Jpb19DTVNfc3RyZWFtOworKwkJVFNfUkVRX25ldzsKKysJCVRTX01TR19JTVBSSU5UX25ldzsKKysJCUVWUF9QS0VZX21ldGhfZmluZDsKKysJCUVWUF9QS0VZX2lkOworKwkJVFNfVFNUX0lORk9fc2V0X3NlcmlhbDsKKysJCWEyaV9HRU5FUkFMX05BTUU7CisrCQlUU19DT05GX3NldF9jcnlwdG9fZGV2aWNlOworKwkJRVZQX1BLRVlfdmVyaWZ5X2luaXQ7CisrCQlUU19DT05GX3NldF9wb2xpY2llczsKKysJCUFTTjFfUENUWF9uZXc7CisrCQlFU1NfQ0VSVF9JRF9mcmVlOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfcGtleV9tZXRoczsKKysJCVRTX01TR19JTVBSSU5UX2ZyZWU7CisrCQlUU19WRVJJRllfQ1RYX2luaXQ7CisrCQlQS0NTN19zdHJlYW07CisrCQlUU19SRVNQX0NUWF9zZXRfY2VydHM7CisrCQlUU19DT05GX3NldF9kZWZfcG9saWN5OworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfYWRqOworKwkJTkVUU0NBUEVfWDUwOV9uZXc7CisrCQlUU19BQ0NVUkFDWV9mcmVlOworKwkJVFNfUkVTUF9nZXRfdHN0X2luZm87CisrCQlFVlBfUEtFWV9kZXJpdmVfc2V0X3BlZXI7CisrCQlQRU1fcmVhZF9iaW9fUGFyYW1ldGVyczsKKysJCVRTX0NPTkZfc2V0X2Nsb2NrX3ByZWNpc2lvbl9kaWdpdHM7CisrCQlUU19DT05GX3NldF9jbGtfcHJlY19kaWdpdHM7CisrCQlFU1NfSVNTVUVSX1NFUklBTF9kdXA7CisrCQlUU19BQ0NVUkFDWV9nZXRfbWljcm9zOworKwkJQVNOMV9QQ1RYX2dldF9zdHJfZmxhZ3M7CisrCQlOQU1FX0NPTlNUUkFJTlRTX2NoZWNrOworKwkJQVNOMV9CSVRfU1RSSU5HX2NoZWNrOworKwkJWDUwOV9jaGVja19ha2lkOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfcGtleV9hc24xX21ldGhzOworKwkJRU5HSU5FX3VucmVnX3BrZXlfYXNuMV9tZXRoczsKKysJCUFTTjFfUENUWF9mcmVlOworKwkJUEVNX3dyaXRlX2Jpb19BU04xX3N0cmVhbTsKKysJCWkyZF9BU04xX2Jpb19zdHJlYW07CisrCQlUU19YNTA5X0FMR09SX3ByaW50X2JpbzsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2NsZWFudXA7CisrCQlFVlBfUEtFWV9hc24xX2ZyZWU7CisrCQlFU1NfU0lHTklOR19DRVJUX2ZyZWU7CisrCQlUU19UU1RfSU5GT19zZXRfbXNnX2ltcHJpbnQ7CisrCQlHRU5FUkFMX05BTUVfY21wOworKwkJZDJpX0FTTjFfU0VUX0FOWTsKKysJCUVOR0lORV9zZXRfcGtleV9tZXRoczsKKysJCWkyZF9UU19SRVFfZnA7CisrCQlkMmlfQVNOMV9TRVFVRU5DRV9BTlk7CisrCQlHRU5FUkFMX05BTUVfZ2V0MF9vdGhlck5hbWU7CisrCQlkMmlfRVNTX0NFUlRfSUQ7CisrCQlPQkpfZmluZF9zaWdpZF9hbGdzOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfa2V5Z2VuOworKwkJUEtDUzVfUEJLREYyX0hNQUM7CisrCQlFVlBfUEtFWV9wYXJhbWdlbjsKKysJCUVWUF9QS0VZX21ldGhfc2V0X3BhcmFtZ2VuOworKwkJQklPX25ld19QS0NTNzsKKysJCUVWUF9QS0VZX3ZlcmlmeV9yZWNvdmVyOworKwkJVFNfZXh0X3ByaW50X2JpbzsKKysJCVRTX0FTTjFfSU5URUdFUl9wcmludF9iaW87CisrCQljaGVja19kZWZlcjsKKysJCURTT19wYXRoYnlhZGRyOworKwkJRVZQX1BLRVlfc2V0X3R5cGU7CisrCQlUU19BQ0NVUkFDWV9zZXRfbWljcm9zOworKwkJVFNfUkVRX3RvX1RTX1ZFUklGWV9DVFg7CisrCQlFVlBfUEtFWV9tZXRoX3NldF9jb3B5OworKwkJQVNOMV9QQ1RYX3NldF9jZXJ0X2ZsYWdzOworKwkJVFNfVFNUX0lORk9fZ2V0X2V4dDsKKysJCUVWUF9QS0VZX2FzbjFfc2V0X2N0cmw7CisrCQlUU19UU1RfSU5GT19nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJRVZQX1BLRVlfQ1RYX25ld19pZDsKKysJCVRTX1JFUV9nZXRfZXh0X2J5X09CSjsKKysJCVRTX0NPTkZfc2V0X3NpZ25lcl9jZXJ0OworKwkJWDUwOV9OQU1FX2hhc2hfb2xkOworKwkJQVNOMV9USU1FX3NldF9zdHJpbmc7CisrCQlFVlBfTURfZmxhZ3M7CisrCQlUU19SRVNQX0NUWF9mcmVlOworKwkJRFNBcGFyYW1zX2R1cDsKKysJCURIcGFyYW1zX2R1cDsKKysJCU9DU1BfUkVRX0NUWF9hZGQxX2hlYWRlcjsKKysJCU9DU1BfUkVRX0NUWF9zZXQxX3JlcTsKKysJCVg1MDlfU1RPUkVfc2V0X3ZlcmlmeV9jYjsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDBfY3VycmVudF9jcmw7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXQwX3BhcmVudF9jdHg7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXQwX2N1cnJlbnRfaXNzdWVyOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MF9jdXJfaXNzdWVyOworKwkJWDUwOV9pc3N1ZXJfbmFtZV9oYXNoX29sZDsKKysJCVg1MDlfc3ViamVjdF9uYW1lX2hhc2hfb2xkOworKwkJRVZQX0NJUEhFUl9DVFhfY29weTsKKysJCVVJX21ldGhvZF9nZXRfcHJvbXB0X2NvbnN0cnVjdG9yOworKwkJVUlfbWV0aG9kX2dldF9wcm9tcHRfY29uc3RydWN0cjsKKysJCVVJX21ldGhvZF9zZXRfcHJvbXB0X2NvbnN0cnVjdG9yOworKwkJVUlfbWV0aG9kX3NldF9wcm9tcHRfY29uc3RydWN0cjsKKysJCUVWUF9yZWFkX3B3X3N0cmluZ19taW47CisrCQlDUllQVE9fY3RzMTI4X2VuY3J5cHQ7CisrCQlDUllQVE9fY3RzMTI4X2RlY3J5cHRfYmxvY2s7CisrCQlDUllQVE9fY2ZiMTI4XzFfZW5jcnlwdDsKKysJCUNSWVBUT19jYmMxMjhfZW5jcnlwdDsKKysJCUNSWVBUT19jdHIxMjhfZW5jcnlwdDsKKysJCUNSWVBUT19vZmIxMjhfZW5jcnlwdDsKKysJCUNSWVBUT19jdHMxMjhfZGVjcnlwdDsKKysJCUNSWVBUT19jdHMxMjhfZW5jcnlwdF9ibG9jazsKKysJCUNSWVBUT19jYmMxMjhfZGVjcnlwdDsKKysJCUNSWVBUT19jZmIxMjhfZW5jcnlwdDsKKysJCUNSWVBUT19jZmIxMjhfOF9lbmNyeXB0OworKworKwlsb2NhbDoKKysJCSo7CisrfTsKKysKKysKKytPUEVOU1NMXzEuMC4xIHsKKysJZ2xvYmFsOgorKwkJU1NMX3JlbmVnb3RpYXRlX2FiYnJldmlhdGVkOworKwkJVExTdjFfMV9tZXRob2Q7CisrCQlUTFN2MV8xX2NsaWVudF9tZXRob2Q7CisrCQlUTFN2MV8xX3NlcnZlcl9tZXRob2Q7CisrCQlTU0xfQ1RYX3NldF9zcnBfY2xpZW50X3B3ZF9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3NycF9jbGllbnRfcHdkX2NiOworKwkJU1NMX2dldF9zcnBfZzsKKysJCVNTTF9DVFhfc2V0X3NycF91c2VybmFtZV9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3NycF91bl9jYjsKKysJCVNTTF9nZXRfc3JwX3VzZXJpbmZvOworKwkJU1NMX3NldF9zcnBfc2VydmVyX3BhcmFtOworKwkJU1NMX3NldF9zcnBfc2VydmVyX3BhcmFtX3B3OworKwkJU1NMX2dldF9zcnBfTjsKKysJCVNTTF9nZXRfc3JwX3VzZXJuYW1lOworKwkJU1NMX0NUWF9zZXRfc3JwX3Bhc3N3b3JkOworKwkJU1NMX0NUWF9zZXRfc3JwX3N0cmVuZ3RoOworKwkJU1NMX0NUWF9zZXRfc3JwX3ZlcmlmeV9wYXJhbV9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3NycF92ZnlfcGFyYW1fY2I7CisrCQlTU0xfQ1RYX3NldF9zcnBfY2JfYXJnOworKwkJU1NMX0NUWF9zZXRfc3JwX3VzZXJuYW1lOworKwkJU1NMX0NUWF9TUlBfQ1RYX2luaXQ7CisrCQlTU0xfU1JQX0NUWF9pbml0OworKwkJU1JQX0NhbGNfQV9wYXJhbTsKKysJCVNSUF9nZW5lcmF0ZV9zZXJ2ZXJfbWFzdGVyX3NlY3JldDsKKysJCVNSUF9nZW5fc2VydmVyX21hc3Rlcl9zZWNyZXQ7CisrCQlTU0xfQ1RYX1NSUF9DVFhfZnJlZTsKKysJCVNSUF9nZW5lcmF0ZV9jbGllbnRfbWFzdGVyX3NlY3JldDsKKysJCVNSUF9nZW5fY2xpZW50X21hc3Rlcl9zZWNyZXQ7CisrCQlTU0xfc3JwX3NlcnZlcl9wYXJhbV93aXRoX3VzZXJuYW1lOworKwkJU1NMX3NycF9zZXJ2ZXJfcGFyYW1fd2l0aF91bjsKKysJCVNTTF9TUlBfQ1RYX2ZyZWU7CisrCQlTU0xfc2V0X2RlYnVnOworKwkJU1NMX1NFU1NJT05fZ2V0MF9wZWVyOworKwkJVExTdjFfMl9jbGllbnRfbWV0aG9kOworKwkJU1NMX1NFU1NJT05fc2V0MV9pZF9jb250ZXh0OworKwkJVExTdjFfMl9zZXJ2ZXJfbWV0aG9kOworKwkJU1NMX2NhY2hlX2hpdDsKKysJCVNTTF9nZXQwX2tzc2xfY3R4OworKwkJU1NMX3NldDBfa3NzbF9jdHg7CisrCQlTU0xfc2V0X3N0YXRlOworKwkJU1NMX0NJUEhFUl9nZXRfaWQ7CisrCQlUTFN2MV8yX21ldGhvZDsKKysJCWtzc2xfY3R4X2dldDBfY2xpZW50X3ByaW5jOworKwkJU1NMX2V4cG9ydF9rZXlpbmdfbWF0ZXJpYWw7CisrCQlTU0xfc2V0X3Rsc2V4dF91c2Vfc3J0cDsKKysJCVNTTF9DVFhfc2V0X25leHRfcHJvdG9zX2FkdmVydGlzZWRfY2I7CisrCQlTU0xfQ1RYX3NldF9uZXh0X3Byb3Rvc19hZHZfY2I7CisrCQlTU0xfZ2V0MF9uZXh0X3Byb3RvX25lZ290aWF0ZWQ7CisrCQlTU0xfZ2V0X3NlbGVjdGVkX3NydHBfcHJvZmlsZTsKKysJCVNTTF9DVFhfc2V0X3Rsc2V4dF91c2Vfc3J0cDsKKysJCVNTTF9zZWxlY3RfbmV4dF9wcm90bzsKKysJCVNTTF9nZXRfc3J0cF9wcm9maWxlczsKKysJCVNTTF9DVFhfc2V0X25leHRfcHJvdG9fc2VsZWN0X2NiOworKwkJU1NMX0NUWF9zZXRfbmV4dF9wcm90b19zZWxfY2I7CisrCQlTU0xfU0VTU0lPTl9nZXRfY29tcHJlc3NfaWQ7CisrCisrCQlTUlBfVkJBU0VfZ2V0X2J5X3VzZXI7CisrCQlTUlBfQ2FsY19zZXJ2ZXJfa2V5OworKwkJU1JQX2NyZWF0ZV92ZXJpZmllcjsKKysJCVNSUF9jcmVhdGVfdmVyaWZpZXJfQk47CisrCQlTUlBfQ2FsY191OworKwkJU1JQX1ZCQVNFX2ZyZWU7CisrCQlTUlBfQ2FsY19jbGllbnRfa2V5OworKwkJU1JQX2dldF9kZWZhdWx0X2dOOworKwkJU1JQX0NhbGNfeDsKKysJCVNSUF9DYWxjX0I7CisrCQlTUlBfVkJBU0VfbmV3OworKwkJU1JQX2NoZWNrX2tub3duX2dOX3BhcmFtOworKwkJU1JQX0NhbGNfQTsKKysJCVNSUF9WZXJpZnlfQV9tb2RfTjsKKysJCVNSUF9WQkFTRV9pbml0OworKwkJU1JQX1ZlcmlmeV9CX21vZF9OOworKwkJRUNfS0VZX3NldF9wdWJsaWNfa2V5X2FmZmluZV9jb29yZGluYXRlczsKKysJCUVDX0tFWV9zZXRfcHViX2tleV9hZmZfY29vcmRzOworKwkJRVZQX2Flc18xOTJfY3RyOworKwkJRVZQX1BLRVlfbWV0aF9nZXQwX2luZm87CisrCQlFVlBfUEtFWV9tZXRoX2NvcHk7CisrCQlFUlJfYWRkX2Vycm9yX3ZkYXRhOworKwkJRVZQX2Flc18xMjhfY3RyOworKwkJRVZQX2Flc18yNTZfY3RyOworKwkJRUNfR0ZwX25pc3RwMjI0X21ldGhvZDsKKysJCUVDX0tFWV9nZXRfZmxhZ3M7CisrCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfUFNTX21nZjE7CisrCQlFVlBfYWVzXzEyOF94dHM7CisrCQlFVlBfYWVzXzI1Nl94dHM7CisrCQlFVlBfYWVzXzEyOF9nY207CisrCQlFQ19LRVlfY2xlYXJfZmxhZ3M7CisrCQlFQ19LRVlfc2V0X2ZsYWdzOworKwkJRVZQX2Flc18yNTZfY2NtOworKwkJUlNBX3ZlcmlmeV9QS0NTMV9QU1NfbWdmMTsKKysJCUVWUF9hZXNfMTI4X2NjbTsKKysJCUVWUF9hZXNfMTkyX2djbTsKKysJCVg1MDlfQUxHT1Jfc2V0X21kOworKwkJUkFORF9pbml0X2ZpcHM7CisrCQlFVlBfYWVzXzI1Nl9nY207CisrCQlFVlBfYWVzXzE5Ml9jY207CisrCQlDTUFDX0NUWF9jb3B5OworKwkJQ01BQ19DVFhfZnJlZTsKKysJCUNNQUNfQ1RYX2dldDBfY2lwaGVyX2N0eDsKKysJCUNNQUNfQ1RYX2NsZWFudXA7CisrCQlDTUFDX0luaXQ7CisrCQlDTUFDX1VwZGF0ZTsKKysJCUNNQUNfcmVzdW1lOworKwkJQ01BQ19DVFhfbmV3OworKwkJQ01BQ19GaW5hbDsKKysJCUNSWVBUT19jdHIxMjhfZW5jcnlwdF9jdHIzMjsKKysJCUNSWVBUT19nY20xMjhfcmVsZWFzZTsKKysJCUNSWVBUT19jY20xMjhfZGVjcnlwdF9jY202NDsKKysJCUNSWVBUT19jY20xMjhfZW5jcnlwdDsKKysJCUNSWVBUT19nY20xMjhfZW5jcnlwdDsKKysJCUNSWVBUT194dHMxMjhfZW5jcnlwdDsKKysJCUVWUF9yYzRfaG1hY19tZDU7CisrCQlDUllQVE9fbmlzdGN0czEyOF9kZWNyeXB0X2Jsb2NrOworKwkJQ1JZUFRPX2djbTEyOF9zZXRpdjsKKysJCUNSWVBUT19uaXN0Y3RzMTI4X2VuY3J5cHQ7CisrCQlFVlBfYWVzXzEyOF9jYmNfaG1hY19zaGExOworKwkJQ1JZUFRPX2djbTEyOF90YWc7CisrCQlDUllQVE9fY2NtMTI4X2VuY3J5cHRfY2NtNjQ7CisrCQlFTkdJTkVfbG9hZF9yZHJhbmQ7CisrCQlDUllQVE9fY2NtMTI4X3NldGl2OworKwkJQ1JZUFRPX25pc3RjdHMxMjhfZW5jcnlwdF9ibG9jazsKKysJCUNSWVBUT19nY20xMjhfYWFkOworKwkJQ1JZUFRPX2NjbTEyOF9pbml0OworKwkJQ1JZUFRPX25pc3RjdHMxMjhfZGVjcnlwdDsKKysJCUNSWVBUT19nY20xMjhfbmV3OworKwkJQ1JZUFRPX2NjbTEyOF90YWc7CisrCQlDUllQVE9fY2NtMTI4X2RlY3J5cHQ7CisrCQlDUllQVE9fY2NtMTI4X2FhZDsKKysJCUNSWVBUT19nY20xMjhfaW5pdDsKKysJCUNSWVBUT19nY20xMjhfZGVjcnlwdDsKKysJCUVOR0lORV9sb2FkX3JzYXg7CisrCQlDUllQVE9fZ2NtMTI4X2RlY3J5cHRfY3RyMzI7CisrCQlDUllQVE9fZ2NtMTI4X2VuY3J5cHRfY3RyMzI7CisrCQlDUllQVE9fZ2NtMTI4X2ZpbmlzaDsKKysJCUVWUF9hZXNfMjU2X2NiY19obWFjX3NoYTE7CisrCQlQS0NTNV9wYmtkZjJfc2V0OworKwkJQ01TX2FkZDBfcmVjaXBpZW50X3Bhc3N3b3JkOworKwkJQ01TX2RlY3J5cHRfc2V0MV9wYXNzd29yZDsKKysJCUNNU19SZWNpcGllbnRJbmZvX3NldDBfcGFzc3dvcmQ7CisrCQlSQU5EX3NldF9maXBzX2RyYmdfdHlwZTsKKysJCVg1MDlfUkVRX3NpZ25fY3R4OworKwkJUlNBX1BTU19QQVJBTVNfbmV3OworKwkJWDUwOV9DUkxfc2lnbl9jdHg7CisrCQlYNTA5X3NpZ25hdHVyZV9kdW1wOworKwkJZDJpX1JTQV9QU1NfUEFSQU1TOworKwkJUlNBX1BTU19QQVJBTVNfaXQ7CisrCQlSU0FfUFNTX1BBUkFNU19mcmVlOworKwkJWDUwOV9zaWduX2N0eDsKKysJCWkyZF9SU0FfUFNTX1BBUkFNUzsKKysJCUFTTjFfaXRlbV9zaWduX2N0eDsKKysJCUVDX0dGcF9uaXN0cDUyMV9tZXRob2Q7CisrCQlFQ19HRnBfbmlzdHAyNTZfbWV0aG9kOworKwkJT1BFTlNTTF9zdGRlcnI7CisrCQlPUEVOU1NMX2NwdWlkX3NldHVwOworKwkJT1BFTlNTTF9zaG93ZmF0YWw7CisrCQlCSU9fbmV3X2RncmFtX3NjdHA7CisrCQlCSU9fZGdyYW1fc2N0cF9tc2dfd2FpdGluZzsKKysJCUJJT19kZ3JhbV9zY3RwX3dhaXRfZm9yX2RyeTsKKysJCUJJT19zX2RhdGFncmFtX3NjdHA7CisrCQlCSU9fZGdyYW1faXNfc2N0cDsKKysJCUJJT19kZ3JhbV9zY3RwX25vdGlmaWNhdGlvbl9jYjsKKyt9IE9QRU5TU0xfMS4wLjA7CisrCisrT1BFTlNTTF8xLjAuMWQgeworKwlnbG9iYWw6CisrCQlDUllQVE9fbWVtY21wOworK30gT1BFTlNTTF8xLjAuMTsKKysKKytPUEVOU1NMXzEuMC4yIHsKKysJZ2xvYmFsOgorKwkJU1NMX0NUWF9zZXRfYWxwbl9wcm90b3M7CisrCQlTU0xfc2V0X2FscG5fcHJvdG9zOworKwkJU1NMX0NUWF9zZXRfYWxwbl9zZWxlY3RfY2I7CisrCQlTU0xfZ2V0MF9hbHBuX3NlbGVjdGVkOworKwkJU1NMX0NUWF9zZXRfY3VzdG9tX2NsaV9leHQ7CisrCQlTU0xfQ1RYX3NldF9jdXN0b21fc3J2X2V4dDsKKysJCVNTTF9DVFhfc2V0X3Nydl9zdXBwX2RhdGE7CisrCQlTU0xfQ1RYX3NldF9jbGlfc3VwcF9kYXRhOworKwkJU1NMX3NldF9jZXJ0X2NiOworKwkJU1NMX0NUWF91c2Vfc2VydmVyaW5mbzsKKysJCVNTTF9DVFhfdXNlX3NlcnZlcmluZm9fZmlsZTsKKysJCVNTTF9DVFhfc2V0X2NlcnRfY2I7CisrCQlTU0xfQ1RYX2dldDBfcGFyYW07CisrCQlTU0xfZ2V0MF9wYXJhbTsKKysJCVNTTF9jZXJ0c19jbGVhcjsKKysJCURUTFN2MV8yX21ldGhvZDsKKysJCURUTFN2MV8yX3NlcnZlcl9tZXRob2Q7CisrCQlEVExTdjFfMl9jbGllbnRfbWV0aG9kOworKwkJRFRMU19tZXRob2Q7CisrCQlEVExTX3NlcnZlcl9tZXRob2Q7CisrCQlEVExTX2NsaWVudF9tZXRob2Q7CisrCQlTU0xfQ1RYX2dldF9zc2xfbWV0aG9kOworKwkJU1NMX0NUWF9nZXQwX2NlcnRpZmljYXRlOworKwkJU1NMX0NUWF9nZXQwX3ByaXZhdGVrZXk7CisrCQlTU0xfQ09NUF9zZXQwX2NvbXByZXNzaW9uX21ldGhvZHM7CisrCQlTU0xfQ09NUF9mcmVlX2NvbXByZXNzaW9uX21ldGhvZHM7CisrCQlTU0xfQ0lQSEVSX2ZpbmQ7CisrCQlTU0xfaXNfc2VydmVyOworKwkJU1NMX0NPTkZfQ1RYX25ldzsKKysJCVNTTF9DT05GX0NUWF9maW5pc2g7CisrCQlTU0xfQ09ORl9DVFhfZnJlZTsKKysJCVNTTF9DT05GX0NUWF9zZXRfZmxhZ3M7CisrCQlTU0xfQ09ORl9DVFhfY2xlYXJfZmxhZ3M7CisrCQlTU0xfQ09ORl9DVFhfc2V0MV9wcmVmaXg7CisrCQlTU0xfQ09ORl9DVFhfc2V0X3NzbDsKKysJCVNTTF9DT05GX0NUWF9zZXRfc3NsX2N0eDsKKysJCVNTTF9DT05GX2NtZDsKKysJCVNTTF9DT05GX2NtZF9hcmd2OworKwkJU1NMX0NPTkZfY21kX3ZhbHVlX3R5cGU7CisrCQlTU0xfdHJhY2U7CisrCQlTU0xfQ0lQSEVSX3N0YW5kYXJkX25hbWU7CisrCQlTU0xfZ2V0X3Rsc2FfcmVjb3JkX2J5bmFtZTsKKysJCUFTTjFfVElNRV9kaWZmOworKwkJQklPX2hleF9zdHJpbmc7CisrCQlDTVNfUmVjaXBpZW50SW5mb19nZXQwX3BrZXlfY3R4OworKwkJQ01TX1JlY2lwaWVudEluZm9fZW5jcnlwdDsKKysJCUNNU19TaWduZXJJbmZvX2dldDBfcGtleV9jdHg7CisrCQlDTVNfU2lnbmVySW5mb19nZXQwX21kX2N0eDsKKysJCUNNU19TaWduZXJJbmZvX2dldDBfc2lnbmF0dXJlOworKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9nZXQwX2FsZzsKKysJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfZ2V0MF9yZWtzOworKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9nZXQwX29yaWdfaWQ7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rYXJpX29yaWdfaWRfY21wOworKwkJQ01TX1JlY2lwaWVudEVuY3J5cHRlZEtleV9nZXQwX2lkOworKwkJQ01TX1JlY2lwaWVudEVuY3J5cHRlZEtleV9jZXJ0X2NtcDsKKysJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfc2V0MF9wa2V5OworKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9nZXQwX2N0eDsKKysJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfZGVjcnlwdDsKKysJCUNNU19TaGFyZWRJbmZvX2VuY29kZTsKKysJCURIX2NvbXB1dGVfa2V5X3BhZGRlZDsKKysJCWQyaV9ESHhwYXJhbXM7CisrCQlpMmRfREh4cGFyYW1zOworKwkJREhfZ2V0XzEwMjRfMTYwOworKwkJREhfZ2V0XzIwNDhfMjI0OworKwkJREhfZ2V0XzIwNDhfMjU2OworKwkJREhfS0RGX1g5XzQyOworKwkJRUNESF9LREZfWDlfNjI7CisrCQlFQ0RTQV9NRVRIT0RfbmV3OworKwkJRUNEU0FfTUVUSE9EX2ZyZWU7CisrCQlFQ0RTQV9NRVRIT0Rfc2V0X2FwcF9kYXRhOworKwkJRUNEU0FfTUVUSE9EX2dldF9hcHBfZGF0YTsKKysJCUVDRFNBX01FVEhPRF9zZXRfc2lnbjsKKysJCUVDRFNBX01FVEhPRF9zZXRfc2lnbl9zZXR1cDsKKysJCUVDRFNBX01FVEhPRF9zZXRfdmVyaWZ5OworKwkJRUNEU0FfTUVUSE9EX3NldF9mbGFnczsKKysJCUVDRFNBX01FVEhPRF9zZXRfbmFtZTsKKysJCUVWUF9kZXNfZWRlM193cmFwOworKwkJRVZQX2Flc18xMjhfd3JhcDsKKysJCUVWUF9hZXNfMTkyX3dyYXA7CisrCQlFVlBfYWVzXzI1Nl93cmFwOworKwkJRVZQX2Flc18xMjhfY2JjX2htYWNfc2hhMjU2OworKwkJRVZQX2Flc18yNTZfY2JjX2htYWNfc2hhMjU2OworKwkJQ1JZUFRPXzEyOF93cmFwOworKwkJQ1JZUFRPXzEyOF91bndyYXA7CisrCQlPQ1NQX1JFUV9DVFhfbmJpbzsKKysJCU9DU1BfUkVRX0NUWF9uZXc7CisrCQlPQ1NQX3NldF9tYXhfcmVzcG9uc2VfbGVuZ3RoOworKwkJT0NTUF9SRVFfQ1RYX2kyZDsKKysJCU9DU1BfUkVRX0NUWF9uYmlvX2QyaTsKKysJCU9DU1BfUkVRX0NUWF9nZXQwX21lbV9iaW87CisrCQlPQ1NQX1JFUV9DVFhfaHR0cDsKKysJCVJTQV9wYWRkaW5nX2FkZF9QS0NTMV9PQUVQX21nZjE7CisrCQlSU0FfcGFkZGluZ19jaGVja19QS0NTMV9PQUVQX21nZjE7CisrCQlSU0FfT0FFUF9QQVJBTVNfZnJlZTsKKysJCVJTQV9PQUVQX1BBUkFNU19pdDsKKysJCVJTQV9PQUVQX1BBUkFNU19uZXc7CisrCQlTU0xfZ2V0X3NpZ2FsZ3M7CisrCQlTU0xfZ2V0X3NoYXJlZF9zaWdhbGdzOworKwkJU1NMX2NoZWNrX2NoYWluOworKwkJWDUwOV9jaGFpbl91cF9yZWY7CisrCQlYNTA5X2h0dHBfbmJpbzsKKysJCVg1MDlfQ1JMX2h0dHBfbmJpbzsKKysJCVg1MDlfUkVWT0tFRF9kdXA7CisrCQlpMmRfcmVfWDUwOV90YnM7CisrCQlYNTA5X2dldDBfc2lnbmF0dXJlOworKwkJWDUwOV9nZXRfc2lnbmF0dXJlX25pZDsKKysJCVg1MDlfQ1JMX2RpZmY7CisrCQlYNTA5X2NoYWluX2NoZWNrX3N1aXRlYjsKKysJCVg1MDlfQ1JMX2NoZWNrX3N1aXRlYjsKKysJCVg1MDlfY2hlY2tfaG9zdDsKKysJCVg1MDlfY2hlY2tfZW1haWw7CisrCQlYNTA5X2NoZWNrX2lwOworKwkJWDUwOV9jaGVja19pcF9hc2M7CisrCQlYNTA5X1NUT1JFX3NldF9sb29rdXBfY3Jsc19jYjsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDBfc3RvcmU7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX2hvc3Q7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9hZGQxX2hvc3Q7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfaG9zdGZsYWdzOworKwkJWDUwOV9WRVJJRllfUEFSQU1fZ2V0MF9wZWVybmFtZTsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3NldDFfZW1haWw7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX2lwOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0MV9pcF9hc2M7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXQwX25hbWU7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXRfY291bnQ7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXQwOworKwkJWDUwOVYzX0VYVF9mcmVlOworKwkJRUNfR1JPVVBfZ2V0X21vbnRfZGF0YTsKKysJCUVDX2N1cnZlX25pZDJuaXN0OworKwkJRUNfY3VydmVfbmlzdDJuaWQ7CisrCQlQRU1fd3JpdGVfYmlvX0RIeHBhcmFtczsKKysJCVBFTV93cml0ZV9ESHhwYXJhbXM7CisrCQlTU0xfQ1RYX2FkZF9jbGllbnRfY3VzdG9tX2V4dDsKKysJCVNTTF9DVFhfYWRkX3NlcnZlcl9jdXN0b21fZXh0OworKwkJU1NMX2V4dGVuc2lvbl9zdXBwb3J0ZWQ7CisrCQlCVUZfc3RybmxlbjsKKysJCXNrX2RlZXBfY29weTsKKysJCVNTTF90ZXN0X2Z1bmN0aW9uczsKKyt9IE9QRU5TU0xfMS4wLjFkOworKworSW5kZXg6IG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L2VuZ2luZXMvb3BlbnNzbC5sZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L2VuZ2luZXMvb3BlbnNzbC5sZAkyMDE0LTAyLTI0IDIxOjAyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwxMCBAQAorK09QRU5TU0xfMS4wLjAgeworKwlnbG9iYWw6CisrCQliaW5kX2VuZ2luZTsKKysJCXZfY2hlY2s7CisrCQlPUEVOU1NMX2luaXQ7CisrCQlPUEVOU1NMX2ZpbmlzaDsKKysJbG9jYWw6CisrCQkqOworK307CisrCitJbmRleDogb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvZW5naW5lcy9jY2dvc3Qvb3BlbnNzbC5sZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L2VuZ2luZXMvY2Nnb3N0L29wZW5zc2wubGQJMjAxNC0wMi0yNCAyMTowMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMTAgQEAKKytPUEVOU1NMXzEuMC4wIHsKKysJZ2xvYmFsOgorKwkJYmluZF9lbmdpbmU7CisrCQl2X2NoZWNrOworKwkJT1BFTlNTTF9pbml0OworKwkJT1BFTlNTTF9maW5pc2g7CisrCWxvY2FsOgorKwkJKjsKKyt9OworKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4xLjAuMi9ibG9ja19kaWdpY2VydF9tYWxheXNpYS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuMS4wLjIvYmxvY2tfZGlnaWNlcnRfbWFsYXlzaWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQzYmNkMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuMS4wLjIvYmxvY2tfZGlnaWNlcnRfbWFsYXlzaWEucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbTogUmFwaGFlbCBHZWlzc2VydCA8Z2Vpc3NlcnRAZGViaWFuLm9yZz4KK0Rlc2NyaXB0aW9uOiBtYWtlIFg1MDlfdmVyaWZ5X2NlcnQgaW5kaWNhdGUgdGhhdCBhbnkgY2VydGlmaWNhdGUgd2hvc2UKKyBuYW1lIGNvbnRhaW5zICJEaWdpY2VydCBTZG4uIEJoZC4iIChmcm9tIE1hbGF5c2lhKSBpcyByZXZva2VkLgorRm9yd2FyZGVkOiBub3QtbmVlZGVkCitPcmlnaW46IHZlbmRvcgorTGFzdC1VcGRhdGU6IDIwMTEtMTEtMDUKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZGViaWFuXQorCisKK0luZGV4OiBvcGVuc3NsLTEuMC4yfmJldGExL2NyeXB0by94NTA5L3g1MDlfdmZ5LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yfmJldGExLm9yaWcvY3J5cHRvL3g1MDkveDUwOV92ZnkuYwkyMDE0LTAyLTI1IDAwOjE2OjEyLjQ4ODAyODg0NCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJ+YmV0YTEvY3J5cHRvL3g1MDkveDUwOV92ZnkuYwkyMDE0LTAyLTI1IDAwOjE2OjEyLjQ4NDAyODkyOSArMDEwMAorQEAgLTk2NCwxMCArOTY0LDExIEBACisgCWZvciAoaSA9IHNrX1g1MDlfbnVtKGN0eC0+Y2hhaW4pIC0gMTsgaSA+PSAwOyBpLS0pCisgCQl7CisgCQl4ID0gc2tfWDUwOV92YWx1ZShjdHgtPmNoYWluLCBpKTsKKy0JCS8qIE1hcmsgRGlnaU5vdGFyIGNlcnRpZmljYXRlcyBhcyByZXZva2VkLCBubyBtYXR0ZXIKKy0JCSAqIHdoZXJlIGluIHRoZSBjaGFpbiB0aGV5IGFyZS4KKysJCS8qIE1hcmsgY2VydGlmaWNhdGVzIGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBuYW1lcyBhcworKwkJICogcmV2b2tlZCwgbm8gbWF0dGVyIHdoZXJlIGluIHRoZSBjaGFpbiB0aGV5IGFyZS4KKyAJCSAqLworLQkJaWYgKHgtPm5hbWUgJiYgc3Ryc3RyKHgtPm5hbWUsICJEaWdpTm90YXIiKSkKKysJCWlmICh4LT5uYW1lICYmIChzdHJzdHIoeC0+bmFtZSwgIkRpZ2lOb3RhciIpIHx8CisrCQkJc3Ryc3RyKHgtPm5hbWUsICJEaWdpY2VydCBTZG4uIEJoZC4iKSkpCisgCQkJeworIAkJCWN0eC0+ZXJyb3IgPSBYNTA5X1ZfRVJSX0NFUlRfUkVWT0tFRDsKKyAJCQljdHgtPmVycm9yX2RlcHRoID0gaTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuMS4wLjIvYmxvY2tfZGlnaW5vdGFyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4xLjAuMi9ibG9ja19kaWdpbm90YXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMxYTBiNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuMS4wLjIvYmxvY2tfZGlnaW5vdGFyLnBhdGNoCkBAIC0wLDAgKzEsNjcgQEAKK0Zyb206IFJhcGhhZWwgR2Vpc3NlcnQgPGdlaXNzZXJ0QGRlYmlhbi5vcmc+CitEZXNjcmlwdGlvbjogbWFrZSBYNTA5X3ZlcmlmeV9jZXJ0IGluZGljYXRlIHRoYXQgYW55IGNlcnRpZmljYXRlIHdob3NlCisgbmFtZSBjb250YWlucyAiRGlnaU5vdGFyIiBpcyByZXZva2VkLgorRm9yd2FyZGVkOiBub3QtbmVlZGVkCitPcmlnaW46IHZlbmRvcgorTGFzdC1VcGRhdGU6IDIwMTEtMDktMDgKK0J1ZzogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy82Mzk3NDQKK1Jldmlld2VkLWJ5OiBLdXJ0IFJvZWNreCA8a3VydEByb2Vja3guYmU+CitSZXZpZXdlZC1ieTogRHIgU3RlcGhlbiBOIEhlbnNvbiA8c2hlbnNvbkBkcmgtY29uc3VsdGFuY3kuY28udWs+CisKK1RoaXMgaXMgbm90IG1lYW50IGFzIGZpbmFsIHBhdGNoLiAgCisgCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtkZWJpYW5dCisKKworSW5kZXg6IG9wZW5zc2wtMS4wLjIvY3J5cHRvL3g1MDkveDUwOV92ZnkuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjIub3JpZy9jcnlwdG8veDUwOS94NTA5X3ZmeS5jCisrKysgb3BlbnNzbC0xLjAuMi9jcnlwdG8veDUwOS94NTA5X3ZmeS5jCitAQCAtMTE5LDYgKzExOSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfdHJ1c3QoWDUwOV9TVE9SRV9DVFggKmMKKyBzdGF0aWMgaW50IGNoZWNrX3Jldm9jYXRpb24oWDUwOV9TVE9SRV9DVFggKmN0eCk7Cisgc3RhdGljIGludCBjaGVja19jZXJ0KFg1MDlfU1RPUkVfQ1RYICpjdHgpOworIHN0YXRpYyBpbnQgY2hlY2tfcG9saWN5KFg1MDlfU1RPUkVfQ1RYICpjdHgpOworK3N0YXRpYyBpbnQgY2hlY2tfY2FfYmxhY2tsaXN0KFg1MDlfU1RPUkVfQ1RYICpjdHgpOworIAorIHN0YXRpYyBpbnQgZ2V0X2NybF9zY29yZShYNTA5X1NUT1JFX0NUWCAqY3R4LCBYNTA5ICoqcGlzc3VlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpwcmVhc29ucywgWDUwOV9DUkwgKmNybCwgWDUwOSAqeCk7CitAQCAtNDM4LDYgKzQzOSw5IEBAIGludCBYNTA5X3ZlcmlmeV9jZXJ0KFg1MDlfU1RPUkVfQ1RYICpjdHgKKyAgICAgaWYgKCFvaykKKyAgICAgICAgIGdvdG8gZW5kOworIAorKwlvayA9IGNoZWNrX2NhX2JsYWNrbGlzdChjdHgpOworKwlpZighb2spIGdvdG8gZW5kOworKworICNpZm5kZWYgT1BFTlNTTF9OT19SRkMzNzc5CisgICAgIC8qIFJGQyAzNzc5IHBhdGggdmFsaWRhdGlvbiwgbm93IHRoYXQgQ1JMIGNoZWNrIGhhcyBiZWVuIGRvbmUgKi8KKyAgICAgb2sgPSB2M19hc2lkX3ZhbGlkYXRlX3BhdGgoY3R4KTsKK0BAIC05MzgsNiArOTQyLDI5IEBAIHN0YXRpYyBpbnQgY2hlY2tfY3JsX3RpbWUoWDUwOV9TVE9SRV9DVFgKKyAgICAgcmV0dXJuIDE7CisgfQorIAorK3N0YXRpYyBpbnQgY2hlY2tfY2FfYmxhY2tsaXN0KFg1MDlfU1RPUkVfQ1RYICpjdHgpCisrCXsKKysJWDUwOSAqeDsKKysJaW50IGk7CisrCS8qIENoZWNrIGFsbCBjZXJ0aWZpY2F0ZXMgYWdhaW5zdCB0aGUgYmxhY2tsaXN0ICovCisrCWZvciAoaSA9IHNrX1g1MDlfbnVtKGN0eC0+Y2hhaW4pIC0gMTsgaSA+PSAwOyBpLS0pCisrCQl7CisrCQl4ID0gc2tfWDUwOV92YWx1ZShjdHgtPmNoYWluLCBpKTsKKysJCS8qIE1hcmsgRGlnaU5vdGFyIGNlcnRpZmljYXRlcyBhcyByZXZva2VkLCBubyBtYXR0ZXIKKysJCSAqIHdoZXJlIGluIHRoZSBjaGFpbiB0aGV5IGFyZS4KKysJCSAqLworKwkJaWYgKHgtPm5hbWUgJiYgc3Ryc3RyKHgtPm5hbWUsICJEaWdpTm90YXIiKSkKKysJCQl7CisrCQkJY3R4LT5lcnJvciA9IFg1MDlfVl9FUlJfQ0VSVF9SRVZPS0VEOworKwkJCWN0eC0+ZXJyb3JfZGVwdGggPSBpOworKwkJCWN0eC0+Y3VycmVudF9jZXJ0ID0geDsKKysJCQlpZiAoIWN0eC0+dmVyaWZ5X2NiKDAsY3R4KSkKKysJCQkJcmV0dXJuIDA7CisrCQkJfQorKwkJfQorKwlyZXR1cm4gMTsKKysJfQorKworIHN0YXRpYyBpbnQgZ2V0X2NybF9zayhYNTA5X1NUT1JFX0NUWCAqY3R4LCBYNTA5X0NSTCAqKnBjcmwsIFg1MDlfQ1JMICoqcGRjcmwsCisgICAgICAgICAgICAgICAgICAgICAgIFg1MDkgKipwaXNzdWVyLCBpbnQgKnBzY29yZSwgdW5zaWduZWQgaW50ICpwcmVhc29ucywKKyAgICAgICAgICAgICAgICAgICAgICAgU1RBQ0tfT0YoWDUwOV9DUkwpICpjcmxzKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9lbmdpbmVzLWluc3RhbGwtaW4tbGliZGlyLXNzbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZW5naW5lcy1pbnN0YWxsLWluLWxpYmRpci1zc2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU3NDY0OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZW5naW5lcy1pbnN0YWxsLWluLWxpYmRpci1zc2wucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCisKK0luZGV4OiBvcGVuc3NsLTEuMC4yL2VuZ2luZXMvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yLm9yaWcvZW5naW5lcy9NYWtlZmlsZQorKysrIG9wZW5zc2wtMS4wLjIvZW5naW5lcy9NYWtlZmlsZQorQEAgLTEwNywxMyArMTA3LDEzIEBAIGluc3RhbGw6CisgCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KKyAJQGlmIFsgLW4gIiQoU0hBUkVEX0xJQlMpIiBdOyB0aGVuIFwKKyAJCXNldCAtZTsgXAorLQkJJChQRVJMKSAkKFRPUCkvdXRpbC9ta2Rpci1wLnBsICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lczsgXAorKwkJJChQRVJMKSAkKFRPUCkvdXRpbC9ta2Rpci1wLnBsICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvc3NsL2VuZ2luZXM7IFwKKyAJCWZvciBsIGluICQoTElCTkFNRVMpOyBkbyBcCisgCQkJKCBlY2hvIGluc3RhbGxpbmcgJCRsOyBcCisgCQkJICBwZng9bGliOyBcCisgCQkJICBpZiBleHByICIkKFBMQVRGT1JNKSIgOiAiQ3lnd2luIiA+L2Rldi9udWxsOyB0aGVuIFwKKyAJCQkJc2Z4PSIuc28iOyBcCistCQkJCWNwIGN5ZyQkbC5kbGwgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3OyBcCisrCQkJCWNwIGN5ZyQkbC5kbGwgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9zc2wvZW5naW5lcy8kJHBmeCQkbCQkc2Z4Lm5ldzsgXAorIAkJCSAgZWxzZSBcCisgCQkJCWNhc2UgIiQoQ0ZMQUdTKSIgaW4gXAorIAkJCQkqRFNPX0JFT1MqKQlzZng9Ii5zbyI7OwlcCitAQCAtMTIyLDEwICsxMjIsMTAgQEAgaW5zdGFsbDoKKyAJCQkJKkRTT19XSU4zMiopCXNmeD0iZWF5MzIuZGxsIjsgcGZ4PTs7CVwKKyAJCQkJKikJCXNmeD0iLmJhZCI7OwlcCisgCQkJCWVzYWM7IFwKKy0JCQkJY3AgJCRwZngkJGwkJHNmeCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL2VuZ2luZXMvJCRwZngkJGwkJHNmeC5uZXc7IFwKKysJCQkJY3AgJCRwZngkJGwkJHNmeCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3OyBcCisgCQkJICBmaTsgXAorLQkJCSAgY2htb2QgNTU1ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHBmeCQkbCQkc2Z4Lm5ldzsgXAorLQkJCSAgbXYgLWYgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHBmeCQkbCQkc2Z4ICk7IFwKKysJCQkgIGNobW9kIDU1NSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3OyBcCisrCQkJICBtdiAtZiAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvc3NsL2VuZ2luZXMvJCRwZngkJGwkJHNmeCApOyBcCisgCQlkb25lOyBcCisgCWZpCisgCUB0YXJnZXQ9aW5zdGFsbDsgJChSRUNVUlNJVkVfTUFLRSkKK0luZGV4OiBvcGVuc3NsLTEuMC4yL2VuZ2luZXMvY2Nnb3N0L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMi5vcmlnL2VuZ2luZXMvY2Nnb3N0L01ha2VmaWxlCisrKysgb3BlbnNzbC0xLjAuMi9lbmdpbmVzL2NjZ29zdC9NYWtlZmlsZQorQEAgLTQ3LDcgKzQ3LDcgQEAgaW5zdGFsbDoKKyAJCXBmeD1saWI7IFwKKyAJCWlmIGV4cHIgIiQoUExBVEZPUk0pIiA6ICJDeWd3aW4iID4vZGV2L251bGw7IHRoZW4gXAorIAkJCXNmeD0iLnNvIjsgXAorLQkJCWNwIGN5ZyQoTElCTkFNRSkuZGxsICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHtwZnh9JChMSUJOQU1FKSQkc2Z4Lm5ldzsgXAorKwkJCWNwIGN5ZyQoTElCTkFNRSkuZGxsICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvc3NsL2VuZ2luZXMvJCR7cGZ4fSQoTElCTkFNRSkkJHNmeC5uZXc7IFwKKyAJCWVsc2UgXAorIAkJCWNhc2UgIiQoQ0ZMQUdTKSIgaW4gXAorIAkJCSpEU09fQkVPUyopIHNmeD0iLnNvIjs7IFwKK0BAIC01NiwxMCArNTYsMTAgQEAgaW5zdGFsbDoKKyAJCQkqRFNPX1dJTjMyKikgc2Z4PSJlYXkzMi5kbGwiOyBwZng9OzsgXAorIAkJCSopIHNmeD0iLmJhZCI7OyBcCisgCQkJZXNhYzsgXAorLQkJCWNwICQke3BmeH0kKExJQk5BTUUpJCRzZnggJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQke3BmeH0kKExJQk5BTUUpJCRzZngubmV3OyBcCisrCQkJY3AgJCR7cGZ4fSQoTElCTkFNRSkkJHNmeCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQke3BmeH0kKExJQk5BTUUpJCRzZngubmV3OyBcCisgCQlmaTsgXAorLQkJY2htb2QgNTU1ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHtwZnh9JChMSUJOQU1FKSQkc2Z4Lm5ldzsgXAorLQkJbXYgLWYgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQke3BmeH0kKExJQk5BTUUpJCRzZngubmV3ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHtwZnh9JChMSUJOQU1FKSQkc2Z4OyBcCisrCQljaG1vZCA1NTUgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9zc2wvZW5naW5lcy8kJHtwZnh9JChMSUJOQU1FKSQkc2Z4Lm5ldzsgXAorKwkJbXYgLWYgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9zc2wvZW5naW5lcy8kJHtwZnh9JChMSUJOQU1FKSQkc2Z4Lm5ldyAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQke3BmeH0kKExJQk5BTUUpJCRzZng7IFwKKyAJZmkKKyAKKyBsaW5rczoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZmluZC5wbCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZmluZC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTFiNDJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9maW5kLnBsCkBAIC0wLDAgKzEsNTQgQEAKK3dhcm4gIkxlZ2FjeSBsaWJyYXJ5IEB7WyhjYWxsZXIoMCkpWzZdXX0gd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIFBlcmwgY29yZSBkaXN0cmlidXRpb24gaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS4gUGxlYXNlIGluc3RhbGwgaXQgZnJvbSB0aGUgQ1BBTiBkaXN0cmlidXRpb24gUGVybDQ6OkNvcmVMaWJzLiBJdCBpcyBiZWluZyB1c2VkIGF0IEB7WyhjYWxsZXIpWzFdXX0sIGxpbmUgQHtbKGNhbGxlcilbMl1dfS5cbiI7CisKKyMgVGhpcyBsaWJyYXJ5IGlzIGRlcHJlY2F0ZWQgYW5kIHVubWFpbnRhaW5lZC4gSXQgaXMgaW5jbHVkZWQgZm9yCisjIGNvbXBhdGliaWxpdHkgd2l0aCBQZXJsIDQgc2NyaXB0cyB3aGljaCBtYXkgdXNlIGl0LCBidXQgaXQgd2lsbCBiZQorIyByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgUGVybC4gUGxlYXNlIHVzZSB0aGUgRmlsZTo6RmluZCBtb2R1bGUKKyMgaW5zdGVhZC4KKworIyBVc2FnZToKKyMJcmVxdWlyZSAiZmluZC5wbCI7CisjCisjCSZmaW5kKCcvZm9vJywnL2JhcicpOworIworIwlzdWIgd2FudGVkIHsgLi4uIH0KKyMJCXdoZXJlIHdhbnRlZCBkb2VzIHdoYXRldmVyIHlvdSB3YW50LiAgJGRpciBjb250YWlucyB0aGUKKyMJCWN1cnJlbnQgZGlyZWN0b3J5IG5hbWUsIGFuZCAkXyB0aGUgY3VycmVudCBmaWxlbmFtZSB3aXRoaW4KKyMJCXRoYXQgZGlyZWN0b3J5LiAgJG5hbWUgY29udGFpbnMgIiRkaXIvJF8iLiAgWW91IGFyZSBjZCdlZAorIwkJdG8gJGRpciB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuICBUaGUgZnVuY3Rpb24gbWF5CisjCQlzZXQgJHBydW5lIHRvIHBydW5lIHRoZSB0cmVlLgorIworIyBGb3IgZXhhbXBsZSwKKyMKKyMgICBmaW5kIC8gLW5hbWUgLm5mc1wqIC1tdGltZSArNyAtZXhlYyBybSAtZiB7fSBcOyAtbyAtZnN0eXBlIG5mcyAtcHJ1bmUKKyMKKyMgY29ycmVzcG9uZHMgdG8gdGhpcworIworIwlzdWIgd2FudGVkIHsKKyMJICAgIC9eXC5uZnMuKiQvICYmCisjCSAgICAoKCRkZXYsJGlubywkbW9kZSwkbmxpbmssJHVpZCwkZ2lkKSA9IGxzdGF0KCRfKSkgJiYKKyMJICAgIGludCgtTSBfKSA+IDcgJiYKKyMJICAgIHVubGluaygkXykKKyMJICAgIHx8CisjCSAgICAoJG5saW5rIHx8ICgoJGRldiwkaW5vLCRtb2RlLCRubGluaywkdWlkLCRnaWQpID0gbHN0YXQoJF8pKSkgJiYKKyMJICAgICRkZXYgPCAwICYmCisjCSAgICAoJHBydW5lID0gMSk7CisjCX0KKyMKKyMgU2V0IHRoZSB2YXJpYWJsZSAkZG9udF91c2VfbmxpbmsgaWYgeW91J3JlIHVzaW5nIEFGUywgc2luY2UgQUZTIGNoZWF0cy4KKwordXNlIEZpbGU6OkZpbmQgKCk7CisKKypuYW1lCQk9ICpGaWxlOjpGaW5kOjpuYW1lOworKnBydW5lCQk9ICpGaWxlOjpGaW5kOjpwcnVuZTsKKypkaXIJCT0gKkZpbGU6OkZpbmQ6OmRpcjsKKyp0b3BkaXIJCT0gKkZpbGU6OkZpbmQ6OnRvcGRpcjsKKyp0b3BkZXYJCT0gKkZpbGU6OkZpbmQ6OnRvcGRldjsKKyp0b3Bpbm8JCT0gKkZpbGU6OkZpbmQ6OnRvcGlubzsKKyp0b3Btb2RlCT0gKkZpbGU6OkZpbmQ6OnRvcG1vZGU7CisqdG9wbmxpbmsJPSAqRmlsZTo6RmluZDo6dG9wbmxpbms7CisKK3N1YiBmaW5kIHsKKyAgICAmRmlsZTo6RmluZDo6ZmluZChcJndhbnRlZCwgQF8pOworfQorCisxOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9maXgtY2lwaGVyLWRlcy1lZGUzLWNmYjEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2ZpeC1jaXBoZXItZGVzLWVkZTMtY2ZiMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmQxZWE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9maXgtY2lwaGVyLWRlcy1lZGUzLWNmYjEucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworVGhpcyBwYXRjaCBhZGRzIHRoZSBmaXggZm9yIG9uZSBvZiB0aGUgY2lwaGVycyB1c2VkIGluIG9wZW5zc2wsIG5hbWVseQordGhlIGNpcGhlciBkZXMtZWRlMy1jZmIxLiBDb21wbGV0ZSBidWcgbG9nIGFuZCBwYXRjaCBpcyBwcmVzZW50IGhlcmU6CitodHRwOi8vcnQub3BlbnNzbC5vcmcvVGlja2V0L0Rpc3BsYXkuaHRtbD9pZD0yODY3CisKK1NpZ25lZC1PZmYtQnk6IE11aGFtbWFkIFNoYWtlZWwgPG11aGFtbWFkX3NoYWtlZWxAbWVudG9yLmNvbT4KKworSW5kZXg6IG9wZW5zc2wtMS4wLjIvY3J5cHRvL2V2cC9lX2RlczMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjIub3JpZy9jcnlwdG8vZXZwL2VfZGVzMy5jCisrKysgb3BlbnNzbC0xLjAuMi9jcnlwdG8vZXZwL2VfZGVzMy5jCitAQCAtMjExLDcgKzIxMSw3IEBAIHN0YXRpYyBpbnQgZGVzX2VkZTNfY2ZiMV9jaXBoZXIoRVZQX0NJUEgKKyAgICAgc2l6ZV90IG47CisgICAgIHVuc2lnbmVkIGNoYXIgY1sxXSwgZFsxXTsKKyAKKy0gICAgZm9yIChuID0gMDsgbiA8IGlubDsgKytuKSB7CisrICAgIGZvciAobiA9IDA7IG4gKiA4IDwgaW5sOyArK24pIHsKKyAgICAgICAgIGNbMF0gPSAoaW5bbiAvIDhdICYgKDEgPDwgKDcgLSBuICUgOCkpKSA/IDB4ODAgOiAwOworICAgICAgICAgREVTX2VkZTNfY2ZiX2VuY3J5cHQoYywgZCwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhKGN0eCktPmtzMSwgJmRhdGEoY3R4KS0+a3MyLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vZS1sZGZsYWdzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vZS1sZGZsYWdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MmUxM2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29lLWxkZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvcGVuLWVtYmVkZGVkXQorCitJbmRleDogb3BlbnNzbC0xLjAuMC9NYWtlZmlsZS5zaGFyZWQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4wLm9yaWcvTWFrZWZpbGUuc2hhcmVkCisrKysgb3BlbnNzbC0xLjAuMC9NYWtlZmlsZS5zaGFyZWQKK0BAIC05Miw3ICs5Miw3IEBACisgTElOS19BUFA9CVwKKyAgICggJChTRVRfWCk7ICAgXAorICAgICBMSUJERVBTPSIkJHtMSUJERVBTOi0kKExJQkRFUFMpfSI7IFwKKy0gICAgTERDTUQ9IiQke0xEQ01EOi0kKENDKX0iOyBMREZMQUdTPSIkJHtMREZMQUdTOi0kKENGTEFHUyl9IjsgXAorKyAgICBMRENNRD0iJCR7TERDTUQ6LSQoQ0MpfSI7IExERkxBR1M9IiQoT0VfTERGTEFHUykgJCR7TERGTEFHUzotJChDRkxBR1MpfSI7IFwKKyAgICAgTElCUEFUSD1gZm9yIHggaW4gJCRMSUJERVBTOyBkbyBlY2hvICQkeDsgZG9uZSB8IHNlZCAtZSAncy9eICotTC8vO3QnIC1lIGQgfCB1bmlxYDsgXAorICAgICBMSUJQQVRIPWBlY2hvICQkTElCUEFUSCB8IHNlZCAtZSAncy8gLzovZydgOyBcCisgICAgIExEX0xJQlJBUllfUEFUSD0kJExJQlBBVEg6JCRMRF9MSUJSQVJZX1BBVEggXAorQEAgLTEwMiw3ICsxMDIsNyBAQAorICAgKCAkKFNFVF9YKTsgICBcCisgICAgIExJQkRFUFM9IiQke0xJQkRFUFM6LSQoTElCREVQUyl9IjsgXAorICAgICBTSEFSRURDTUQ9IiQke1NIQVJFRENNRDotJChDQyl9IjsgXAorLSAgICBTSEFSRURGTEFHUz0iJCR7U0hBUkVERkxBR1M6LSQoQ0ZMQUdTKSAkKFNIQVJFRF9MREZMQUdTKX0iOyBcCisrICAgIFNIQVJFREZMQUdTPSIkKE9FX0xERkxBR1MpICQke1NIQVJFREZMQUdTOi0kKENGTEFHUykgJChTSEFSRURfTERGTEFHUyl9IjsgXAorICAgICBMSUJQQVRIPWBmb3IgeCBpbiAkJExJQkRFUFM7IGRvIGVjaG8gJCR4OyBkb25lIHwgc2VkIC1lICdzL14gKi1MLy87dCcgLWUgZCB8IHVuaXFgOyBcCisgICAgIExJQlBBVEg9YGVjaG8gJCRMSUJQQVRIIHwgc2VkIC1lICdzLyAvOi9nJ2A7IFwKKyAgICAgTERfTElCUkFSWV9QQVRIPSQkTElCUEFUSDokJExEX0xJQlJBUllfUEFUSCBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2wtMS4wLjJhLXgzMi1hc20ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2wtMS4wLjJhLXgzMi1hc20ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU1YmZhMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC0xLjAuMmEteDMyLWFzbS5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitodHRwczovL3J0Lm9wZW5zc2wub3JnL1RpY2tldC9EaXNwbGF5Lmh0bWw/aWQ9Mzc1OSZ1c2VyPWd1ZXN0JnBhc3M9Z3Vlc3QKKworRnJvbSA2MjU3ZDU5YjNhNjhkMmZlYjlkNjQzMTdhMWM1NTZkYzM4MTNlZTYxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgorRGF0ZTogU2F0LCAyMSBNYXIgMjAxNSAwNjowMToyNSAtMDQwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IHVzZSBiaWdpbnQgaW4geDg2LTY0IHBlcmwKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPgorCitXaGVuIGJ1aWxkaW5nIG9uIHgzMiBzeXN0ZW1zIHdoZXJlIHRoZSBkZWZhdWx0IHR5cGUgaXMgMzJiaXQsIG1ha2Ugc3VyZQord2UgY2FuIHRyYW5zcGFyZW50bHkgcmVwcmVzZW50IDY0Yml0IGludGVnZXJzLiAgT3RoZXJ3aXNlIHdlIGVuZCB1cCB3aXRoCitidWlsZCBlcnJvcnMgbGlrZToKKy91c3IvYmluL3BlcmwgYXNtL2doYXNoLXg4Nl82NC5wbCBlbGYgPiBnaGFzaC14ODZfNjQucworSW50ZWdlciBvdmVyZmxvdyBpbiBoZXhhZGVjaW1hbCBudW1iZXIgYXQgYXNtLy4uLy4uL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsIGxpbmUgMjAxLCA8PiBsaW5lIDg5MC4KKy4uLgorZ2hhc2gteDg2XzY0LnM6IEFzc2VtYmxlciBtZXNzYWdlczoKK2doYXNoLXg4Nl82NC5zOjg5MDogRXJyb3I6IGp1bmsgJy4xNTQ3MzM1NTQ3OTk5NWUrMTknIGFmdGVyIGV4cHJlc3Npb24KKworV2UgZG9uJ3QgZW5hYmxlIHRoaXMgZ2xvYmFsbHkgYXMgdGhlcmUgYXJlIHNvbWUgY2FzZXMgd2hlcmUgd2UnZCBnZXQKKzMyYml0IHZhbHVlcyBpbnRlcnByZXRlZCBhcyB1bnNpZ25lZCB3aGVuIHdlIG5lZWQgdGhlbSBhcyBzaWduZWQuCisKK1JlcG9ydGVkLWJ5OiBCZXJ0cmFuZCBKYWNxdWluIDxiZXJ0cmFuZEBqYWNxdWluLmJ6aD4KK1VSTDogaHR0cHM6Ly9idWdzLmdlbnRvby5vcmcvNTQyNjE4CistLS0KKyBjcnlwdG8vcGVybGFzbS94ODZfNjQteGxhdGUucGwgfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jcnlwdG8vcGVybGFzbS94ODZfNjQteGxhdGUucGwgYi9jcnlwdG8vcGVybGFzbS94ODZfNjQteGxhdGUucGwKK2luZGV4IGFhZTgyODguLjBiZjk3NzQgMTAwNzU1CistLS0gYS9jcnlwdG8vcGVybGFzbS94ODZfNjQteGxhdGUucGwKKysrKyBiL2NyeXB0by9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbAorQEAgLTE5NSw2ICsxOTUsMTAgQEAgbXkgJWdsb2JhbHM7CisgICAgIHN1YiBvdXQgeworICAgICAJbXkgJHNlbGYgPSBzaGlmdDsKKyAKKysJIyBXaGVuIGJ1aWxkaW5nIG9uIHgzMiBBQklzLCB0aGUgZXhwYW5kZWQgaGV4IHZhbHVlIG1pZ2h0IGJlIHRvbworKwkjIGJpZyB0byBmaXQgaW50byAzMmJpdHMuICBFbmFibGUgdHJhbnNwYXJlbnQgNjRiaXQgc3VwcG9ydCBoZXJlCisrCSMgc28gd2UgY2FuIHNhZmVseSBwcmludCBpdCBvdXQuCisrCXVzZSBiaWdpbnQ7CisgCWlmICgkZ2FzKSB7CisgCSAgICAjIFNvbGFyaXMgL3Vzci9jY3MvYmluL2FzIGNhbid0IGhhbmRsZSBtdWx0aXBsaWNhdGlvbnMKKyAJICAgICMgaW4gJHNlbGYtPnt2YWx1ZX0KKy0tIAorMi4zLjMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsLWF2b2lkLU5VTEwtcG9pbnRlci1kZXJlZmVyZW5jZS1pbi1FVlBfRGlnZXN0SW5pdF9leC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC1hdm9pZC1OVUxMLXBvaW50ZXItZGVyZWZlcmVuY2UtaW4tRVZQX0RpZ2VzdEluaXRfZXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ViYzhjZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC1hdm9pZC1OVUxMLXBvaW50ZXItZGVyZWZlcmVuY2UtaW4tRVZQX0RpZ2VzdEluaXRfZXgucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorb3BlbnNzbDogYXZvaWQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIEVWUF9EaWdlc3RJbml0X2V4KCkKKworV2Ugc2hvdWxkIGF2b2lkIGFjY2Vzc2luZyB0aGUgdHlwZSBwb2ludGVyIGlmIGl0J3MgTlVMTCwKK3RoaXMgY291bGQgaGFwcGVuIGlmIGN0eC0+ZGlnZXN0IGlzIG5vdCBOVUxMLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAoraHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL29wZW5zc2wtZGV2QG9wZW5zc2wub3JnL21zZzMyODYwLmh0bWwKKworU2lnbmVkLW9mZi1ieTogWHVmZW5nIFpoYW5nIDx4dWZlbmcuemhhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorSW5kZXg6IG9wZW5zc2wtMS4wLjIvY3J5cHRvL2V2cC9kaWdlc3QuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjIub3JpZy9jcnlwdG8vZXZwL2RpZ2VzdC5jCisrKysgb3BlbnNzbC0xLjAuMi9jcnlwdG8vZXZwL2RpZ2VzdC5jCitAQCAtMjA4LDcgKzIwOCw3IEBAIGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpjdHgsIGMKKyAgICAgICAgIHJldHVybiAwOworICAgICB9CisgI2VuZGlmCistICAgIGlmIChjdHgtPmRpZ2VzdCAhPSB0eXBlKSB7CisrICAgIGlmICh0eXBlICYmIChjdHgtPmRpZ2VzdCAhPSB0eXBlKSkgeworICAgICAgICAgaWYgKGN0eC0+ZGlnZXN0ICYmIGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSkKKyAgICAgICAgICAgICBPUEVOU1NMX2ZyZWUoY3R4LT5tZF9kYXRhKTsKKyAgICAgICAgIGN0eC0+ZGlnZXN0ID0gdHlwZTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC1maXgtZGVzLnBvZC1lcnJvci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC1maXgtZGVzLnBvZC1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTQ5NzI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsLWZpeC1kZXMucG9kLWVycm9yLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK29wZW5zc2w6IEZpeCBwb2QybWFuIGRlcy5wb2QgZXJyb3Igb24gVWJ1bnR1IDEyLjA0CisKK1RoaXMgaXMgYSBmb3JtYXR0aW5nIGZpeCwgJz1iYWNrJyBpcyByZXF1aXJlZCBiZWZvcmUKKyc9aGVhZDEnIG9uIFVidW50dSAxMi4wNC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBCYW9nZW4gU2hhbmcgPGJhb2dlbi5zaGFuZ0B3aW5kcml2ZXIuY29tPgorZGlmZiAtdXJwTiBhX29yaWdpbi9kZXMucG9kIGJfbW9kaWZ5L2Rlcy5wb2QKKy0tLSBhX29yaWdpbi9jcnlwdG8vZGVzL2Rlcy5wb2QJMjAxMy0wOC0xNSAxNTowMjo1Ni4yMTE2NzQ1ODkgKzA4MDAKKysrKyBiX21vZGlmeS9jcnlwdG8vZGVzL2Rlcy5wb2QJMjAxMy0wOC0xNSAxNTowNDoxNC40Mzk2NzQ1ODAgKzA4MDAKK0BAIC0xODEsNiArMTgxLDggQEAgdGhlIHV1ZW5jb2RlZCBmaWxlIHRvIGVtYmVkIGluIHRoZSBiZWdpbgorIG91dHB1dC4gIElmIHRoZXJlIGlzIG5vIG5hbWUgc3BlY2lmaWVkIGFmdGVyIHRoZSBCPC11PiwgdGhlIG5hbWUgdGV4dC5kZXMKKyB3aWxsIGJlIGVtYmVkZGVkIGluIHRoZSBoZWFkZXIuCisgCisrPWJhY2sKKysKKyA9aGVhZDEgU0VFIEFMU08KKyAKKyBwcygxKSwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbF9maXhfZm9yX3gzMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbF9maXhfZm9yX3gzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmNlMzJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsX2ZpeF9mb3JfeDMyLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitSZWNlaXZlZCBmcm9tIEggSiBMaXUgQCBJbnRlbAorTWFrZSB0aGUgYXNzZW1ibHkgc3ludGF4IGNvbXBhdGlibGUgd2l0aCB4MzIgZ2NjLiBPdGhld2lzZSB4MzIgZ2NjIHRocm93cyBlcnJvcnMuCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzA3LzEzCisKK3BvcnRlZCB0aGUgcGF0Y2ggdG8gdGhlIDEuMC4wZSB2ZXJzaW9uCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzEyLzAxCitJbmRleDogb3BlbnNzbC0xLjAuMi9jcnlwdG8vYm4vYm4uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjIub3JpZy9jcnlwdG8vYm4vYm4uaAorKysrIG9wZW5zc2wtMS4wLjIvY3J5cHRvL2JuL2JuLmgKK0BAIC0xNzMsNiArMTczLDEzIEBAIGV4dGVybiAiQyIgeworICMgIGVuZGlmCisgIyBlbmRpZgorIAorKy8qIEFkZHJlc3MgdHlwZS4gICovCisrI2lmZGVmIF9XSU42NAorKyNkZWZpbmUgQk5fQUREUiB1bnNpZ25lZCBsb25nIGxvbmcKKysjZWxzZQorKyNkZWZpbmUgQk5fQUREUiB1bnNpZ25lZCBsb25nCisrI2VuZGlmCisrCisgLyoKKyAgKiBhc3N1bWluZyBsb25nIGlzIDY0Yml0IC0gdGhpcyBpcyB0aGUgREVDIEFscGhhIHVuc2lnbmVkIGxvbmcgbG9uZyBpcyBvbmx5CisgICogNjQgYml0cyA6LSgsIGRvbid0IGRlZmluZSBCTl9MTE9ORyBmb3IgdGhlIERFQyBBbHBoYQorSW5kZXg6IG9wZW5zc2wtMS4wLjIvY3J5cHRvL2JuL2JuX2V4cC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMi5vcmlnL2NyeXB0by9ibi9ibl9leHAuYworKysrIG9wZW5zc2wtMS4wLjIvY3J5cHRvL2JuL2JuX2V4cC5jCitAQCAtNjM4LDcgKzYzOCw3IEBAIHN0YXRpYyBpbnQgTU9EX0VYUF9DVElNRV9DT1BZX0ZST01fUFJFQlUKKyAgKiBtdWx0aXBsZS4KKyAgKi8KKyAjZGVmaW5lIE1PRF9FWFBfQ1RJTUVfQUxJR04oeF8pIFwKKy0gICAgICAgICgodW5zaWduZWQgY2hhciopKHhfKSArIChNT0RfRVhQX0NUSU1FX01JTl9DQUNIRV9MSU5FX1dJRFRIIC0gKCgoc2l6ZV90KSh4XykpICYgKE1PRF9FWFBfQ1RJTUVfTUlOX0NBQ0hFX0xJTkVfTUFTSykpKSkKKysJKCh1bnNpZ25lZCBjaGFyKikoeF8pICsgKE1PRF9FWFBfQ1RJTUVfTUlOX0NBQ0hFX0xJTkVfV0lEVEggLSAoKChCTl9BRERSKSh4XykpICYgKE1PRF9FWFBfQ1RJTUVfTUlOX0NBQ0hFX0xJTkVfTUFTSykpKSkKKyAKKyAvKgorICAqIFRoaXMgdmFyaWFudCBvZiBCTl9tb2RfZXhwX21vbnQoKSB1c2VzIGZpeGVkIHdpbmRvd3MgYW5kIHRoZSBzcGVjaWFsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL3B0ZXN0LWRlcHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL3B0ZXN0LWRlcHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY2ZDE3OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvcHRlc3QtZGVwcy5wYXRjaApAQCAtMCwwICsxLDM0IEBACitSZW1vdmUgTWFrZWZpbGUgZGVwZW5kZW5jaWVzIGZvciB0ZXN0IHRhcmdldHMKKworVGhlc2UgYXJlIHByb2JhYmx5IGhlcmUgYmVjYXVzZSB0aGUgZXhlY3V0YWJsZXMgYXJlbid0IGFsd2F5cyBidWlsdCBmb3IKK290aGVyIHBsYXRmb3JtcyAoZS5nLiBXaW5kb3dzKTsgaG93ZXZlciB3ZSBjYW4gc2FmZWx5IGFzc3VtZSB0aGV5J2xsCithbHdheXMgYmUgdGhlcmUuIE5vbmUgb2YgdGhlIG90aGVyIHRlc3QgdGFyZ2V0cyBoYXZlIHN1Y2ggZGVwZW5kZW5jaWVzCithbmQgaWYgd2UgZG9uJ3QgcmVtb3ZlIHRoZW0sIG1ha2UgdHJpZXMgdG8gcmVidWlsZCB0aGUgZXhlY3V0YWJsZXMgYW5kCitmYWlscyBkdXJpbmcgcnVuLXB0ZXN0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ10KKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBvcGVuc3NsLTEuMC4yL3Rlc3QvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yLm9yaWcvdGVzdC9NYWtlZmlsZQorKysrIG9wZW5zc2wtMS4wLjIvdGVzdC9NYWtlZmlsZQorQEAgLTMzMCw3ICszMzAsNyBAQCB0ZXN0X2NtczogLi4vYXBwcy9vcGVuc3NsJChFWEVfRVhUKSBjbXMtCisgCUBlY2hvICJDTVMgY29uc2lzdGVuY3kgdGVzdCIKKyAJJChQRVJMKSBjbXMtdGVzdC5wbAorIAorLXRlc3Rfc3JwOiAkKFNSUFRFU1QpJChFWEVfRVhUKQorK3Rlc3Rfc3JwOgorIAlAZWNobyAiVGVzdCBTUlAiCisgCS4uL3V0aWwvc2hsaWJfd3JhcC5zaCAuL3NycHRlc3QKKyAKK0BAIC0zNDIsNyArMzQyLDcgQEAgdGVzdF92M25hbWU6ICQoVjNOQU1FVEVTVCkkKEVYRV9FWFQpCisgCUBlY2hvICJUZXN0IFg1MDl2M19jaGVja18qIgorIAkuLi91dGlsL3NobGliX3dyYXAuc2ggLi8kKFYzTkFNRVRFU1QpCisgCistdGVzdF9oZWFydGJlYXQ6ICQoSEVBUlRCRUFUVEVTVCkkKEVYRV9FWFQpCisrdGVzdF9oZWFydGJlYXQ6CisgCS4uL3V0aWwvc2hsaWJfd3JhcC5zaCAuLyQoSEVBUlRCRUFUVEVTVCkKKyAKKyB0ZXN0X2NvbnN0YW50X3RpbWU6ICQoQ09OU1RUSU1FVEVTVCkkKEVYRV9FWFQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNiMjBmY2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL3J1bi1wdGVzdApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9zaAorbWFrZSAtayBydW50ZXN0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL3NoYXJlZC1saWJzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9zaGFyZWQtbGlicy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2NhMGEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9zaGFyZWQtbGlicy5wYXRjaApAQCAtMCwwICsxLDQxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4xZS5vcmlnL2NyeXB0by9NYWtlZmlsZQorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9NYWtlZmlsZQorQEAgLTEwOCw3ICsxMDgsNyBAQCAkKExJQik6CSQoTElCT0JKKQorIAorIHNoYXJlZDogYnVpbGRpbmYuaCBsaWIgc3ViZGlycworIAlpZiBbIC1uICIkKFNIQVJFRF9MSUJTKSIgXTsgdGhlbiBcCistCQkoY2QgLi47ICQoTUFLRSkgJChTSEFSRURfTElCKSk7IFwKKysJCShjZCAuLjsgJChNQUtFKSAtZSAkKFNIQVJFRF9MSUIpKTsgXAorIAlmaQorIAorIGxpYnM6CitJbmRleDogb3BlbnNzbC0xLjAuMWUvTWFrZWZpbGUub3JnCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMWUub3JpZy9NYWtlZmlsZS5vcmcKKysrKyBvcGVuc3NsLTEuMC4xZS9NYWtlZmlsZS5vcmcKK0BAIC0zMTAsNyArMzEwLDcgQEAgbGliY3J5cHRvJChTSExJQl9FWFQpOiBsaWJjcnlwdG8uYSBmaXBzXworIAorIGxpYnNzbCQoU0hMSUJfRVhUKTogbGliY3J5cHRvJChTSExJQl9FWFQpIGxpYnNzbC5hCisgCUBpZiBbICIkKFNITElCX1RBUkdFVCkiICE9ICIiIF07IHRoZW4gXAorLQkJJChNQUtFKSBTSExJQkRJUlM9c3NsIFNITElCREVQUz0nLWxjcnlwdG8nIGJ1aWxkLXNoYXJlZDsgXAorKwkJJChNQUtFKSAtZSBTSExJQkRJUlM9c3NsIFNITElCREVQUz0nLWxjcnlwdG8nIGJ1aWxkLXNoYXJlZDsgXAorIAllbHNlIFwKKyAJCWVjaG8gIlRoZXJlJ3Mgbm8gc3VwcG9ydCBmb3Igc2hhcmVkIGxpYnJhcmllcyBvbiB0aGlzIHBsYXRmb3JtIiA+JjI7IFwKKyAJCWV4aXQgMTsgXAorSW5kZXg6IG9wZW5zc2wtMS4wLjFlL3NzbC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjFlLm9yaWcvc3NsL01ha2VmaWxlCisrKysgb3BlbnNzbC0xLjAuMWUvc3NsL01ha2VmaWxlCitAQCAtNjIsNyArNjIsNyBAQCBsaWI6CSQoTElCT0JKKQorIAorIHNoYXJlZDogbGliCisgCWlmIFsgLW4gIiQoU0hBUkVEX0xJQlMpIiBdOyB0aGVuIFwKKy0JCShjZCAuLjsgJChNQUtFKSAkKFNIQVJFRF9MSUIpKTsgXAorKwkJKGNkIC4uOyAkKE1BS0UpIC1lICQoU0hBUkVEX0xJQikpOyBcCisgCWZpCisgCisgZmlsZXM6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsXzEuMC4yZC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2xfMS4wLjJkLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZDhkY2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsXzEuMC4yZC5iYgpAQCAtMCwwICsxLDU3IEBACityZXF1aXJlIG9wZW5zc2wuaW5jCisKKyMgRm9yIHRhcmdldCBzaWRlIHZlcnNpb25zIG9mIG9wZW5zc2wgZW5hYmxlIHN1cHBvcnQgZm9yIE9DRiBMaW51eCBkcml2ZXIKKyMgaWYgdGhleSBhcmUgYXZhaWxhYmxlLgorREVQRU5EUyArPSAiY3J5cHRvZGV2LWxpbnV4IgorCitDRkxBRyArPSAiLURIQVZFX0NSWVBUT0RFViAtRFVTRV9DUllQVE9ERVZfRElHRVNUUyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZjlhOGY5NjgxMDczNDVlMGI3NWFhOGMyZWNhYTdlYzgiCisKK2V4cG9ydCBESVJTID0gImNyeXB0byBzc2wgYXBwcyBlbmdpbmVzIgorZXhwb3J0IE9FX0xERkxBR1M9IiR7TERGTEFHU30iCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9jb25maWd1cmUtdGFyZ2V0cy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc2hhcmVkLWxpYnMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL29lLWxkZmxhZ3MucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2VuZ2luZXMtaW5zdGFsbC1pbi1saWJkaXItc3NsLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4xLjAuMi9ibG9ja19kaWdpbm90YXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbjEuMC4yL2Jsb2NrX2RpZ2ljZXJ0X21hbGF5c2lhLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vY2EucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9jX3JlaGFzaC1jb21wYXQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9kZWJpYW4tdGFyZ2V0cy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGViaWFuL21hbi1kaXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9tYW4tc2VjdGlvbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGViaWFuL25vLXJwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vbm8tc3ltYm9saWMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9waWMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi92ZXJzaW9uLXNjcmlwdC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vb3BlbnNzbF9maXhfZm9yX3gzMi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZml4LWNpcGhlci1kZXMtZWRlMy1jZmIxLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9vcGVuc3NsLWF2b2lkLU5VTEwtcG9pbnRlci1kZXJlZmVyZW5jZS1pbi1FVlBfRGlnZXN0SW5pdF9leC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZmluZC5wbCBcCisgICAgICAgICAgICBmaWxlOi8vb3BlbnNzbC1maXgtZGVzLnBvZC1lcnJvci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGVzLXB0ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9wdGVzdC1kZXBzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAgZmlsZTovL2NyeXB0b191c2VfYmlnaW50X2luX3g4Ni02NF9wZXJsLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9vcGVuc3NsLTEuMC4yYS14MzItYXNtLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzhkZDYxOWIyZTc3Y2JhYzY5Yjk5ZjUyYTA1M2QyNWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjcxYzM2NDg3Nzg1NjI4YTcwMzM3NGM2NTJhZDJjZWJlYTQ1ZmE5MjBhZTU2ODE1MTVkZjI1ZDlmMmM5YThjOCIKKworUEFDS0FHRVMgPSsgIiBcCisJJHtQTn0tZW5naW5lcyBcCisJJHtQTn0tZW5naW5lcy1kYmcgXAorCSIKKworRklMRVNfJHtQTn0tZW5naW5lcyA9ICIke2xpYmRpcn0vc3NsL2VuZ2luZXMvKi5zbyAke2xpYmRpcn0vZW5naW5lcyIKK0ZJTEVTXyR7UE59LWVuZ2luZXMtZGJnID0gIiR7bGliZGlyfS9zc2wvZW5naW5lcy8uZGVidWciCisKK1BBUkFMTEVMX01BS0UgPSAiIgorUEFSQUxMRUxfTUFLRUlOU1QgPSAiIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgY3AgJHtXT1JLRElSfS9maW5kLnBsICR7U30vdXRpbC9maW5kLnBsCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOGFmMzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwLmluYwpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIlJQQyBwcm9ncmFtIG51bWJlciBtYXBwZXIiCitIT01FUEFHRSA9ICJodHRwOi8vbmVpbC5icm93bi5uYW1lL3BvcnRtYXAvIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3BvcnRtYXAuYztiZWdpbmxpbmU9MjtlbmRsaW5lPTMxO21kNT01MWZmNjdlNjZlYzg0YjIwMDliMDE3YjFmOTRhZmJmNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9mcm9tX2xvY2FsLmM7YmVnaW5saW5lPTk7ZW5kbGluZT0zNTttZDU9MWJlYzkzOGEyMjY4YjhiNDIzYzU4ODAxYWNlM2FkYzEiCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJwb3J0bWFwIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgMTAgMiAzIDQgNSAuIHN0b3AgMzIgMCAxIDYgLiIKKworaW5oZXJpdCB1cGRhdGUtcmMuZCBzeXN0ZW1kCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJwb3J0bWFwLnNlcnZpY2UiCisKK1BBQ0tBR0VTID0rICJwb3J0bWFwLXV0aWxzIgorRklMRVNfcG9ydG1hcC11dGlscyA9ICIke2Jhc2Vfc2JpbmRpcn0vcG1hcF9zZXQgJHtiYXNlX3NiaW5kaXJ9L3BtYXBfZHVtcCIKK0ZJTEVTXyR7UE59LWRvYyArPSAiJHtkb2NkaXJ9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC9kZXN0ZGlyLW5vLXN0cmlwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC9kZXN0ZGlyLW5vLXN0cmlwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYmY3ODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL2Rlc3RkaXItbm8tc3RyaXAucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitGcm9tOiBNaWtlIEZyeXNpbmdlciA8dmFwaWVyQGdlbnRvby5vcmc+CitEYXRlOiBTdW4sIDEzIE1heSAyMDA3IDIxOjE1OjEyICswMDAwICgtMDQwMCkKK1N1YmplY3Q6IHJlc3BlY3QgREVTVERJUiBhbmQgZG9udCB1c2UgLXMgd2l0aCBpbnN0YWxsCitYLUdpdC1Vcmw6IGh0dHA6Ly9uZWlsLmJyb3duLm5hbWUvZ2l0P3A9cG9ydG1hcDthPWNvbW1pdGRpZmZfcGxhaW47aD02MDNjNTliOTc4YzA0ZGYyMzU0ZjY4ZDRhMmRjNjc2YTc1OGZmNDZkCisKK3Jlc3BlY3QgREVTVERJUiBhbmQgZG9udCB1c2UgLXMgd2l0aCBpbnN0YWxsCisKKyQoREVTVERJUikgaXMgdGhlIHN0YW5kYXJkIGZvciBpbnN0YWxsaW5nIGludG8gb3RoZXIgdHJlZXMsIG5vdCAkKEJBU0VESVIpIC4uLgorc28gSSd2ZSBjb252ZXJ0ZWQgdGhlIE1ha2VmaWxlIHRvIHVzZSB0aGF0LiAgSSd2ZSBhbHNvIGxlZnQgaW4gJChCQVNFRElSKSBhcyBhCitkZWZhdWx0IHRvIHN1cHBvcnQgb2xkIGluc3RhbGxzOyBub3Qgc3VyZSBpZiB5b3UnZCBqdXN0IGN1dCBpdC4KKworU3RyaXBwaW5nIHNob3VsZCBiZSBsZWZ0IHRvIHRoZSBwZXJzb24gdG8gaGFuZGxlLCBub3QgYXV0b21hdGljYWxseSBkb25lIGJ5Cit0aGUgaW5zdGFsbCBzdGVwLiAgQWxzbywgYGluc3RhbGwgLXNgIGFsd2F5cyBjYWxscyBgc3RyaXBgIHdoaWNoIGlzCit3cm9uZy91bmRlc2lyZWQgaW4gY3Jvc3MtY29tcGlsaW5nIHNjZW5hcmlvcy4KKworU2lnbmVkLW9mZi1ieTogTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgorU2lnbmVkLW9mZi1ieTogTmVpbCBCcm93biA8bmVpbGJAc3VzZS5kZT4KKy0tLQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggOWU5YTRiNC4uNTM0MzQyOCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTEzNSwxMyArMTM1LDE0IEBAIGZyb21fbG9jYWw6IENQUEZMQUdTICs9IC1EVEVTVAorIHBvcnRtYXAubWFuIDogcG9ydG1hcC44CisgCXNlZCAkKE1BTl9TRUQpIDwgcG9ydG1hcC44ID4gcG9ydG1hcC5tYW4KKyAKKytERVNURElSID0gJChCQVNFRElSKQorIGluc3RhbGw6IGFsbAorLQlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNzU1IC1zIHBvcnRtYXAgJHtCQVNFRElSfS9zYmluCistCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA3NTUgLXMgcG1hcF9kdW1wICR7QkFTRURJUn0vc2JpbgorLQlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNzU1IC1zIHBtYXBfc2V0ICR7QkFTRURJUn0vc2JpbgorLQlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNjQ0IHBvcnRtYXAubWFuICR7QkFTRURJUn0vdXNyL3NoYXJlL21hbi9tYW44L3BvcnRtYXAuOAorLQlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNjQ0IHBtYXBfZHVtcC44ICR7QkFTRURJUn0vdXNyL3NoYXJlL21hbi9tYW44CistCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA2NDQgcG1hcF9zZXQuOCAke0JBU0VESVJ9L3Vzci9zaGFyZS9tYW4vbWFuOAorKwlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNzU1IHBvcnRtYXAgJChERVNURElSKS9zYmluCisrCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA3NTUgcG1hcF9kdW1wICQoREVTVERJUikvc2JpbgorKwlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNzU1IHBtYXBfc2V0ICQoREVTVERJUikvc2JpbgorKwlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNjQ0IHBvcnRtYXAubWFuICQoREVTVERJUikvdXNyL3NoYXJlL21hbi9tYW44L3BvcnRtYXAuOAorKwlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNjQ0IHBtYXBfZHVtcC44ICQoREVTVERJUikvdXNyL3NoYXJlL21hbi9tYW44CisrCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA2NDQgcG1hcF9zZXQuOCAkKERFU1RESVIpL3Vzci9zaGFyZS9tYW4vbWFuOAorIAorIGNsZWFuOgorIAlybSAtZiAqLm8gcG9ydG1hcCBwbWFwX2R1bXAgcG1hcF9zZXQgZnJvbV9sb2NhbCBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL3BvcnRtYXAuaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXAvcG9ydG1hcC5pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYyMWFhMTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL3BvcnRtYXAuaW5pdApAQCAtMCwwICsxLDY3IEBACisjIS9iaW4vc2gKKyMKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHBvcnRtYXAKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRuZXR3b3JrCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbmV0d29yaworIyBEZWZhdWx0LVN0YXJ0OiAgICAgUyAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAwIDEgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogVGhlIFJQQyBwb3J0bWFwcGVyCisjIERlc2NyaXB0aW9uOiAgICAgICBQb3J0bWFwIGlzIGEgc2VydmVyIHRoYXQgY29udmVydHMgUlBDIChSZW1vdGUKKyMgICAgICAgICAgICAgICAgICAgIFByb2NlZHVyZSBDYWxsKSBwcm9ncmFtIG51bWJlcnMgaW50byBEQVJQQQorIyAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgcG9ydCBudW1iZXJzLiBJdCBtdXN0IGJlIHJ1bm5pbmcgaW4KKyMgICAgICAgICAgICAgICAgICAgIG9yZGVyIHRvIG1ha2UgUlBDIGNhbGxzLiBTZXJ2aWNlcyB0aGF0IHVzZQorIyAgICAgICAgICAgICAgICAgICAgUlBDIGluY2x1ZGUgTkZTIGFuZCBOSVMuCisjIyMgRU5EIElOSVQgSU5GTworCit0ZXN0IC1mIC9zYmluL3BvcnRtYXAgfHwgZXhpdCAwCisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorCWVjaG8gIlN0YXJ0aW5nIHBvcnRtYXAgZGFlbW9uLi4uIgorICAgICAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1leGVjIC9zYmluL3BvcnRtYXAKKworCWlmIFsgLWYgL3Zhci9ydW4vcG9ydG1hcC51cGdyYWRlLXN0YXRlIF07IHRoZW4KKyAgICAgICAgICBlY2hvICJSZXN0b3Jpbmcgb2xkIFJQQyBzZXJ2aWNlIGluZm9ybWF0aW9uLi4uIgorICAgICAgICAgIHNsZWVwIDEgIyBuZWVkcyBhIHNob3J0IHBhdXNlIG9yIHBtYXBfc2V0IHdvbid0IHdvcmsuIDooCisJICBwbWFwX3NldCA8L3Zhci9ydW4vcG9ydG1hcC51cGdyYWRlLXN0YXRlCisJICBybSAtZiAvdmFyL3J1bi9wb3J0bWFwLnVwZ3JhZGUtc3RhdGUKKyAgICAgICAgICBlY2hvICJkb25lLiIKKyAgICAgICAgZmkKKworCTs7CisgICAgc3RvcCkKKyAgICAgICAgZWNobyAiU3RvcHBpbmcgcG9ydG1hcCBkYWVtb24uLi4iCisgICAgICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tZXhlYyAvc2Jpbi9wb3J0bWFwCisJOzsKKyAgICByZWxvYWQpCisJOzsKKyAgICBmb3JjZS1yZWxvYWQpCisgICAgICAgICQwIHJlc3RhcnQKKwk7OworICAgIHJlc3RhcnQpCisJIyBwbWFwX2R1bXAgYW5kIHBtYXBfc2V0IG1heSBiZSBpbiBhIGRpZmZlcmVudCBwYWNrYWdlIGFuZCBub3QgaW5zdGFsbGVkLi4uCisJaWYgWyAtZiAvc2Jpbi9wbWFwX2R1bXAgLWEgLWYgL3NiaW4vcG1hcF9zZXQgXTsgdGhlbgorCQlkb19zdGF0ZT0xCisJZWxzZQorCQlkb19zdGF0ZT0wCisJZmkKKwlbICRkb19zdGF0ZSAtZXEgMSBdICYmIHBtYXBfZHVtcCA+L3Zhci9ydW4vcG9ydG1hcC5zdGF0ZQorICAgICAgICAkMCBzdG9wCisgICAgICAgICQwIHN0YXJ0CisJaWYgWyAkZG9fc3RhdGUgLWVxIDEgXTsgdGhlbgorCSAgaWYgWyAhIC1mIC92YXIvcnVuL3BvcnRtYXAudXBncmFkZS1zdGF0ZSBdOyB0aGVuCisgICAgICAgICAgICBzbGVlcCAxCisJICAgIHBtYXBfc2V0IDwvdmFyL3J1bi9wb3J0bWFwLnN0YXRlCisJICBmaQorCSAgcm0gLWYgL3Zhci9ydW4vcG9ydG1hcC5zdGF0ZQorCWZpCisJOzsKKyAgICAqKQorCWVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9wb3J0bWFwIHtzdGFydHxzdG9wfHJlbG9hZHxyZXN0YXJ0fSIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC9wb3J0bWFwLnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL3BvcnRtYXAuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWY5ZDdiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC9wb3J0bWFwLnNlcnZpY2UKQEAgLTAsMCArMSwxMCBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1UaGUgUlBDIHBvcnRtYXBwZXIKK0FmdGVyPW5ldHdvcmsudGFyZ2V0CisKK1tTZXJ2aWNlXQorVHlwZT1mb3JraW5nCitFeGVjU3RhcnQ9QEJBU0VfU0JJTkRJUkAvcG9ydG1hcAorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL3RjcGQtY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC90Y3BkLWNvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjI1MDU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC90Y3BkLWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDMwIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0Zyb206IE1pa2UgRnJ5c2luZ2VyIDx2YXBpZXJAZ2VudG9vLm9yZz4KK0RhdGU6IFN1biwgMTMgTWF5IDIwMDcgMjE6MTc6MzIgKzAwMDAgKC0wNDAwKQorU3ViamVjdDogZml4IGJ1aWxkaW5nIHdpdGggdGNwZCBzdXBwb3J0IGRpc2FibGVkCitYLUdpdC1Vcmw6IGh0dHA6Ly9uZWlsLmJyb3duLm5hbWUvZ2l0P3A9cG9ydG1hcDthPWNvbW1pdGRpZmZfcGxhaW47aD03ODQ3MjA3YWVkMWI0NGZhZjA3N2VlZDE0YTlhYzljNjgyNDRlYmE1CisKK2ZpeCBidWlsZGluZyB3aXRoIHRjcGQgc3VwcG9ydCBkaXNhYmxlZAorCitNYWtlIHN1cmUgcG1hcF9jaGVjay5jIG9ubHkgaW5jbHVkZXMgdGNwZC5oIHdoZW4gSE9TVFNfQUNDRVNTIGlzIGRlZmluZWQuCisKK1NpZ25lZC1vZmYtYnk6IFRpbW90aHkgUmVkYWVsbGkgPGRyaXp6dEBnZW50b28ub3JnPgorU2lnbmVkLW9mZi1ieTogTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgorU2lnbmVkLW9mZi1ieTogTmVpbCBCcm93biA8bmVpbGJAc3VzZS5kZT4KKy0tLQorCitkaWZmIC0tZ2l0IGEvcG1hcF9jaGVjay5jIGIvcG1hcF9jaGVjay5jCitpbmRleCA4NGYyYzEyLi40NDNhODIyIDEwMDY0NAorLS0tIGEvcG1hcF9jaGVjay5jCisrKysgYi9wbWFwX2NoZWNrLmMKK0BAIC00NCw3ICs0NCw5IEBACisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8cnBjL3JwY2VudC5oPgorICNlbmRpZgorKyNpZmRlZiBIT1NUU19BQ0NFU1MKKyAjaW5jbHVkZSA8dGNwZC5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyAjaW5jbHVkZSA8Z3JwLmg+CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwXzYuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXBfNi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MjdmZTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwXzYuMC5iYgpAQCAtMCwwICsxLDMxIEBACityZXF1aXJlIHBvcnRtYXAuaW5jCisKK1BSID0gInI5IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuc291cmNlZmlsZXMub3JnL05ldHdvcmtpbmcvVG9vbHMvTWlzY2VsbGFuZW5vdXMvcG9ydG1hcC02LjAudGd6IFwKKyAgICAgICAgICAgZmlsZTovL2Rlc3RkaXItbm8tc3RyaXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdGNwZC1jb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcG9ydG1hcC5pbml0IFwKKyAgICAgICAgICAgZmlsZTovL3BvcnRtYXAuc2VydmljZSIKKworU1JDX1VSSVttZDVzdW1dID0gImFjMTA4YWI2OGJmMGYzNDQ3N2Y4MzE3NzkxYWFmMWZmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAyYzgyMGQzOWYzZTZlNzI5ZDFiZWEzMjg3YTJkOGE2YzY4NGYxMDA2ZmI5NjEyZjk3ZGNhZDRhMjgxZDQxZGUiCisKK1MgPSAiJHtXT1JLRElSfS8ke0JQTn1fJHtQVn0vIgorCitQQUNLQUdFQ09ORklHID8/PSAidGNwLXdyYXBwZXJzIgorUEFDS0FHRUNPTkZJR1t0Y3Atd3JhcHBlcnNdID0gIiwsdGNwLXdyYXBwZXJzIgorCitDUFBGTEFHUyArPSAiLURGQUNJTElUWT1MT0dfREFFTU9OIC1ERU5BQkxFX0ROUyAtREhPU1RTX0FDQ0VTUyIKK0NGTEFHUyArPSAiLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtZlBJQyIKK0VYVFJBX09FTUFLRSArPSAiJ05PX1RDUF9XUkFQUEVSPSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3RjcC13cmFwcGVycycsICcnLCAnMScsIGQpfSciCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjgvICR7RH0ke2Jhc2Vfc2JpbmRpcn0gJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcG9ydG1hcC5pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9wb3J0bWFwCisgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfQorCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3BvcnRtYXAuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorICAgIHNlZCAtaSAtZSAncyxAQkFTRV9TQklORElSQCwke2Jhc2Vfc2JpbmRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcG9ydG1hcC5zZXJ2aWNlCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwLWRpYWxpbi9maWxlcy9ob3N0LXBlZXIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwLWRpYWxpbi9maWxlcy9ob3N0LXBlZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdlMmUxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAtZGlhbGluL2ZpbGVzL2hvc3QtcGVlcgpAQCAtMCwwICsxLDExIEBACistZGV0YWNoCitkZWZhdWx0cm91dGUKK25vY3J0c2N0cworbG9jaworbm9hdXRoCitsY3AtZWNoby1pbnRlcnZhbCA1CitsY3AtZWNoby1mYWlsdXJlIDMKK3VzZXBlZXJkbnMKKzExNTIwMAorbG9jYWwKK2FzeW5jbWFwIDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAtZGlhbGluL2ZpbGVzL3BwcC1kaWFsaW4gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwLWRpYWxpbi9maWxlcy9wcHAtZGlhbGluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMjc3MTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwLWRpYWxpbi9maWxlcy9wcHAtZGlhbGluCkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKKy91c3Ivc2Jpbi9wcHBkIGNhbGwgaG9zdApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC1kaWFsaW4vcHBwLWRpYWxpbl8wLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwLWRpYWxpbi9wcHAtZGlhbGluXzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWE3NmI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC1kaWFsaW4vcHBwLWRpYWxpbl8wLjEuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJFbmFibGVzIFBQUCBkaWFsLWluIHRocm91Z2ggYSBzZXJpYWwgY29ubmVjdGlvbiIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorREVQRU5EUyA9ICJwcHAiCitSREVQRU5EU18ke1BOfSA9ICJwcHAiCitQUiA9ICJyOCIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1NSQ19VUkkgPSAiZmlsZTovL2hvc3QtcGVlciBcCisgICAgICAgICAgIGZpbGU6Ly9wcHAtZGlhbGluIgorCitpbmhlcml0IGFsbGFyY2ggdXNlcmFkZAorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9wcHAvcGVlcnMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9ob3N0LXBlZXIgJHtEfSR7c3lzY29uZmRpcn0vcHBwL3BlZXJzL2hvc3QKKworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wcHAtZGlhbGluICR7RH0ke3NiaW5kaXJ9Cit9CisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitVU0VSQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIC0taG9tZSAvZGV2L251bGwgXAorICAgICAgICAgICAgICAgICAgICAgICAtLW5vLWNyZWF0ZS1ob21lIC0tc2hlbGwgJHtzYmluZGlyfS9wcHAtZGlhbGluIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1uby11c2VyLWdyb3VwIC0tZ2lkIG5vZ3JvdXAgcHBwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvMDAwMS1wcHAtRml4LWNvbXBpbGF0aW9uLWVycm9ycy1pbi1NYWtlZmlsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzAwMDEtcHBwLUZpeC1jb21waWxhdGlvbi1lcnJvcnMtaW4tTWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFhMmQyZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzAwMDEtcHBwLUZpeC1jb21waWxhdGlvbi1lcnJvcnMtaW4tTWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSw3NSBAQAorRnJvbSBiYTBmNjA1OGQxZjI1YjJiNjBmYzMxYWIyNjU2YmYxMmE3MWZmZGFiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTHUgQ2hvbmcgPENob25nLkx1QHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDUgTm92IDIwMTMgMTc6MzI6NTYgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gcHBwOiBGaXggY29tcGlsYXRpb24gZXJyb3JzIGluIE1ha2VmaWxlCisKK1RoaXMgcGF0Y2ggZml4ZXMgYmVsb3cgaXNzdWVzOgorCisxLiBNYWtlIGNhbid0IGV4aXQgd2hpbGUgY29tcGlsYXRpb24gZXJyb3Igb2NjdXJzIGluIHN1YmRpciBmb3IgcGx1Z2lucyBidWlsZGluZy4KKworMi4gSWYgYnVpbGQgcHBwIHdpdGggbmV3ZXIga2VybmVsICgzLjEwLjEwKSwgaXQgd2lsbCBwaWNrICdpZl9wcHBveC5oJyBmcm9tIHN5c3Jvb3QtZGlyIGFuZAorICAgJ2lmX3BwcG9sMnRwLmgnIGZyb20gaXRzIG93biBzb3VyY2UgZGlyLCB0aGlzIGNhdXNlIGJlbG93IGJ1aWxkIGVycm9yczoKKworICAgICAgICBiaXRiYWtlX2J1aWxkL3RtcC9zeXNyb290cy9pbnRlbC14ODYtNjQvdXNyL2luY2x1ZGUvbGludXgvaWZfcHBwb3guaDo4NDoyNjoKKyAgICAgICAgZXJyb3I6IGZpZWxkICdwcHBvbDJ0cCcgaGFzIGluY29tcGxldGUgdHlwZQorICAgICAgICAgIHN0cnVjdCBwcHBvbDJ0cGluNl9hZGRyIHBwcG9sMnRwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKyAgICAgICAgYml0YmFrZV9idWlsZC90bXAvc3lzcm9vdHMvaW50ZWwteDg2LTY0L3Vzci9pbmNsdWRlL2xpbnV4L2lmX3BwcG94Lmg6OTk6Mjg6CisgICAgICAgIGVycm9yOiBmaWVsZCAncHBwb2wydHAnIGhhcyBpbmNvbXBsZXRlIHR5cGUKKyAgICAgICAgICBzdHJ1Y3QgcHBwb2wydHB2M2luNl9hZGRyIHBwcG9sMnRwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorCitUaGUgJ3N5c3Jvb3QtZGlyL2lmX3BwcG94LmgnIGVuYWJsZWQgaXB2NiBzdXBwb3J0IGJ1dCB0aGUgJ3NvdXJjZS1kaXIvaWZfcHBwb2wydHAuaCcgbG9zdAorcmVsYXRlZCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMsIHdlIHNob3VsZCB1c2UgYm90aCBoZWFkZXIgZmlsZXMgZnJvbSBzeXNyb290cyB0byBmaXggdGhpcworYnVpbGQgZmFpbHVyZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEx1IENob25nIDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgcHBwZC9wbHVnaW5zL01ha2VmaWxlLmxpbnV4ICAgICAgICAgIHwgICAgMiArLQorIHBwcGQvcGx1Z2lucy9wcHBvbDJ0cC9NYWtlZmlsZS5saW51eCB8ICAgIDIgKy0KKyBwcHBkL3BsdWdpbnMvcnAtcHBwb2UvTWFrZWZpbGUubGludXggfCAgICAyICstCisgMyBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9wcHBkL3BsdWdpbnMvTWFrZWZpbGUubGludXggYi9wcHBkL3BsdWdpbnMvTWFrZWZpbGUubGludXgKK2luZGV4IDBhN2VjN2IuLjJhMmMxNWEgMTAwNjQ0CistLS0gYS9wcHBkL3BsdWdpbnMvTWFrZWZpbGUubGludXgKKysrKyBiL3BwcGQvcGx1Z2lucy9NYWtlZmlsZS5saW51eAorQEAgLTIwLDcgKzIwLDcgQEAgaW5jbHVkZSAuZGVwZW5kCisgZW5kaWYKKyAKKyBhbGw6CSQoUExVR0lOUykKKy0JZm9yIGQgaW4gJChTVUJESVJTKTsgZG8gJChNQUtFKSAkKE1GTEFHUykgLUMgJCRkIGFsbDsgZG9uZQorKwlmb3IgZCBpbiAkKFNVQkRJUlMpOyBkbyAkKE1BS0UpICQoTUZMQUdTKSAtQyAkJGQgYWxsIHx8IGV4aXQgMTsgZG9uZQorIAorICUuc286ICUuYworIAkkKENDKSAtbyAkQCAkKExERkxBR1MpICQoQ0ZMQUdTKSAkXgorZGlmZiAtLWdpdCBhL3BwcGQvcGx1Z2lucy9wcHBvbDJ0cC9NYWtlZmlsZS5saW51eCBiL3BwcGQvcGx1Z2lucy9wcHBvbDJ0cC9NYWtlZmlsZS5saW51eAoraW5kZXggMTllZmY2Ny4uZmViMmY1MiAxMDA2NDQKKy0tLSBhL3BwcGQvcGx1Z2lucy9wcHBvbDJ0cC9NYWtlZmlsZS5saW51eAorKysrIGIvcHBwZC9wbHVnaW5zL3BwcG9sMnRwL01ha2VmaWxlLmxpbnV4CitAQCAtMSw2ICsxLDYgQEAKKyAjQ0MJPSBnY2MKKyBDT1BUUwk9IC1PMiAtZworLUNGTEFHUwk9ICQoQ09QVFMpIC1JLiAtSS4uLy4uIC1JLi4vLi4vLi4vaW5jbHVkZSAtZlBJQworK0NGTEFHUwk9ICQoQ09QVFMpIC1JLiAtSS4uLy4uIC1mUElDCisgTERGTEFHUwk9IC1zaGFyZWQKKyBJTlNUQUxMCT0gaW5zdGFsbAorIAorZGlmZiAtLWdpdCBhL3BwcGQvcGx1Z2lucy9ycC1wcHBvZS9NYWtlZmlsZS5saW51eCBiL3BwcGQvcGx1Z2lucy9ycC1wcHBvZS9NYWtlZmlsZS5saW51eAoraW5kZXggZjA3ODk5MS4uMTViOTExOCAxMDA2NDQKKy0tLSBhL3BwcGQvcGx1Z2lucy9ycC1wcHBvZS9NYWtlZmlsZS5saW51eAorKysrIGIvcHBwZC9wbHVnaW5zL3JwLXBwcG9lL01ha2VmaWxlLmxpbnV4CitAQCAtMjYsNyArMjYsNyBAQCBJTlNUQUxMCT0gaW5zdGFsbAorIFJQX1ZFUlNJT049My44cAorIAorIENPUFRTPS1PMiAtZworLUNGTEFHUz0kKENPUFRTKSAtSS4uLy4uLy4uL2luY2x1ZGUgJy1EUlBfVkVSU0lPTj0iJChSUF9WRVJTSU9OKSInCisrQ0ZMQUdTPSQoQ09QVFMpICctRFJQX1ZFUlNJT049IiQoUlBfVkVSU0lPTikiJworIGFsbDogcnAtcHBwb2Uuc28gcHBwb2UtZGlzY292ZXJ5CisgCisgcHBwb2UtZGlzY292ZXJ5OiBwcHBvZS1kaXNjb3ZlcnkubyBkZWJ1Zy5vCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvMDhzZXR1cGRucyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzA4c2V0dXBkbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk4MjE5ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzA4c2V0dXBkbnMKQEAgLTAsMCArMSwxMiBAQAorIyEvYmluL3NoCitBQ1RVQUxDT05GPS92YXIvcnVuL3Jlc29sdi5jb25mCitQUFBDT05GPS92YXIvcnVuL3BwcC9yZXNvbHYuY29uZgoraWYgWyAtZiAkUFBQQ09ORiBdIDsgdGhlbgorCWlmIFsgLWYgJEFDVFVBTENPTkYgXSA7IHRoZW4KKwkJaWYgWyAhIC1oICRBQ1RVQUxDT05GIC1vICEgImByZWFkbGluayAkQUNUVUFMQ09ORiAyPiYxYCIgPSAiJFBQUENPTkYiIF0gOyB0aGVuCisJCQltdiAkQUNUVUFMQ09ORiAkQUNUVUFMQ09ORi5wcHBvcmlnCisJCWZpCisJZmkKKworCWxuIC1zZiAkUFBQQ09ORiAkQUNUVUFMQ09ORgorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzkycmVtb3ZlZG5zIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvOTJyZW1vdmVkbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVhZGVjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzkycmVtb3ZlZG5zCkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCitBQ1RVQUxDT05GPS92YXIvcnVuL3Jlc29sdi5jb25mCitpZiBbIC1mICRBQ1RVQUxDT05GLnBwcG9yaWcgXSA7IHRoZW4KKwltdiAkQUNUVUFMQ09ORi5wcHBvcmlnICRBQ1RVQUxDT05GCitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvY2lmZGVmcm91dGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9jaWZkZWZyb3V0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjRkYmMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvY2lmZGVmcm91dGUucGF0Y2gKQEAgLTAsMCArMSwyOTIgQEAKK1RoaXMgcGF0Y2ggY29tZXMgZnJvbSBPcGVuRW1iZWRkZWQuCitUaGUgb3JpZ2luYWwgcGF0Y2ggaXMgZnJvbSBEZWJpYW4gLyBTdVNFIHRvIGltcGxlbWVudCByZXBsYWNlZGVmYXVsdHJvdXRlCitSZWJhc2VkIGl0IHRvIGZpdCBwcHAtMi40LjUuIERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGViaWFuL3N1c2UgcGF0Y2hlc10KKworZGlmZiAtdXJOIHBwcC0yLjQuNS1vcmlnL3BwcGQvaXBjcC5jIHBwcC0yLjQuNS9wcHBkL2lwY3AuYworLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvaXBjcC5jCTIwMTAtMDYtMzAgMTU6NTE6MTIuMDUwMTY2Mzk4ICswODAwCisrKysgcHBwLTIuNC41L3BwcGQvaXBjcC5jCTIwMTAtMDYtMzAgMTY6NDA6MDAuNDc4NzE2ODU1ICswODAwCitAQCAtMTk4LDYgKzE5OCwxNiBAQAorICAgICAgICJkaXNhYmxlIGRlZmF1bHRyb3V0ZSBvcHRpb24iLCBPUFRfQUxJQVMgfCBPUFRfQTJDTFIsCisgICAgICAgJmlwY3Bfd2FudG9wdGlvbnNbMF0uZGVmYXVsdF9yb3V0ZSB9LAorIAorKyNpZmRlZiBfX2xpbnV4X18KKysgICAgeyAicmVwbGFjZWRlZmF1bHRyb3V0ZSIsIG9fYm9vbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlwY3Bfd2FudG9wdGlvbnNbMF0ucmVwbGFjZV9kZWZhdWx0X3JvdXRlLAorKyAgICAgICJSZXBsYWNlIGRlZmF1bHQgcm91dGUiLCAxCisrICAgIH0sCisrICAgIHsgIm5vcmVwbGFjZWRlZmF1bHRyb3V0ZSIsIG9fYm9vbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlwY3BfYWxsb3dvcHRpb25zWzBdLnJlcGxhY2VfZGVmYXVsdF9yb3V0ZSwKKysgICAgICAiTmV2ZXIgcmVwbGFjZSBkZWZhdWx0IHJvdXRlIiwgT1BUX0EyQ09QWSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlwY3Bfd2FudG9wdGlvbnNbMF0ucmVwbGFjZV9kZWZhdWx0X3JvdXRlIH0sCisrI2VuZGlmCisgICAgIHsgInByb3h5YXJwIiwgb19ib29sLCAmaXBjcF93YW50b3B0aW9uc1swXS5wcm94eV9hcnAsCisgICAgICAgIkFkZCBwcm94eSBBUlAgZW50cnkiLCBPUFRfRU5BQkxFfDEsICZpcGNwX2FsbG93b3B0aW9uc1swXS5wcm94eV9hcnAgfSwKKyAgICAgeyAibm9wcm94eWFycCIsIG9fYm9vbCwgJmlwY3BfYWxsb3dvcHRpb25zWzBdLnByb3h5X2FycCwKK0BAIC0yNzEsNyArMjgxLDcgQEAKKyAgICAgaXBfYWN0aXZlX3BrdAorIH07CisgCistc3RhdGljIHZvaWQgaXBjcF9jbGVhcl9hZGRycyBfX1AoKGludCwgdV9pbnQzMl90LCB1X2ludDMyX3QpKTsKKytzdGF0aWMgdm9pZCBpcGNwX2NsZWFyX2FkZHJzIF9fUCgoaW50LCB1X2ludDMyX3QsIHVfaW50MzJfdCwgYm9vbCkpOworIHN0YXRpYyB2b2lkIGlwY3Bfc2NyaXB0IF9fUCgoY2hhciAqLCBpbnQpKTsJLyogUnVuIGFuIHVwL2Rvd24gc2NyaXB0ICovCisgc3RhdGljIHZvaWQgaXBjcF9zY3JpcHRfZG9uZSBfX1AoKHZvaWQgKikpOworIAorQEAgLTE3NDIsNyArMTc1MiwxMiBAQAorICAgICBpZiAoIXNpZm5wbW9kZSh1LCBQUFBfSVAsIE5QTU9ERV9RVUVVRSkpCisgCXJldHVybiAwOworICAgICBpZiAod28tPmRlZmF1bHRfcm91dGUpCisrI2lmbmRlZiBfX2xpbnV4X18KKyAJaWYgKHNpZmRlZmF1bHRyb3V0ZSh1LCB3by0+b3VyYWRkciwgd28tPmhpc2FkZHIpKQorKyNlbHNlCisrCWlmIChzaWZkZWZhdWx0cm91dGUodSwgd28tPm91cmFkZHIsIHdvLT5oaXNhZGRyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd28tPnJlcGxhY2VfZGVmYXVsdF9yb3V0ZSkpCisrI2VuZGlmCisgCSAgICBkZWZhdWx0X3JvdXRlX3NldFt1XSA9IDE7CisgICAgIGlmICh3by0+cHJveHlfYXJwKQorIAlpZiAoc2lmcHJveHlhcnAodSwgd28tPmhpc2FkZHIpKQorQEAgLTE4MzAsNyArMTg0NSw4IEBACisgICAgICAqLworICAgICBpZiAoZGVtYW5kKSB7CisgCWlmIChnby0+b3VyYWRkciAhPSB3by0+b3VyYWRkciB8fCBoby0+aGlzYWRkciAhPSB3by0+aGlzYWRkcikgeworLQkgICAgaXBjcF9jbGVhcl9hZGRycyhmLT51bml0LCB3by0+b3VyYWRkciwgd28tPmhpc2FkZHIpOworKwkgICAgaXBjcF9jbGVhcl9hZGRycyhmLT51bml0LCB3by0+b3VyYWRkciwgd28tPmhpc2FkZHIsIAorKwkJCQkgICAgICB3by0+cmVwbGFjZV9kZWZhdWx0X3JvdXRlKTsKKyAJICAgIGlmIChnby0+b3VyYWRkciAhPSB3by0+b3VyYWRkcikgeworIAkJd2FybigiTG9jYWwgSVAgYWRkcmVzcyBjaGFuZ2VkIHRvICVJIiwgZ28tPm91cmFkZHIpOworIAkJc2NyaXB0X3NldGVudigiT0xESVBMT0NBTCIsIGlwX250b2Eod28tPm91cmFkZHIpLCAwKTsKK0BAIC0xODU1LDcgKzE4NzEsMTIgQEAKKyAKKyAJICAgIC8qIGFzc2lnbiBhIGRlZmF1bHQgcm91dGUgdGhyb3VnaCB0aGUgaW50ZXJmYWNlIGlmIHJlcXVpcmVkICovCisgCSAgICBpZiAoaXBjcF93YW50b3B0aW9uc1tmLT51bml0XS5kZWZhdWx0X3JvdXRlKSAKKysjaWZuZGVmIF9fbGludXhfXworIAkJaWYgKHNpZmRlZmF1bHRyb3V0ZShmLT51bml0LCBnby0+b3VyYWRkciwgaG8tPmhpc2FkZHIpKQorKyNlbHNlCisrCQlpZiAoc2lmZGVmYXVsdHJvdXRlKGYtPnVuaXQsIGdvLT5vdXJhZGRyLCBoby0+aGlzYWRkciwKKysJCQkJCSAgICAgd28tPnJlcGxhY2VfZGVmYXVsdF9yb3V0ZSkpCisrI2VuZGlmCisgCQkgICAgZGVmYXVsdF9yb3V0ZV9zZXRbZi0+dW5pdF0gPSAxOworIAorIAkgICAgLyogTWFrZSBhIHByb3h5IEFSUCBlbnRyeSBpZiByZXF1ZXN0ZWQuICovCitAQCAtMTkwNSw3ICsxOTI2LDEyIEBACisgCisgCS8qIGFzc2lnbiBhIGRlZmF1bHQgcm91dGUgdGhyb3VnaCB0aGUgaW50ZXJmYWNlIGlmIHJlcXVpcmVkICovCisgCWlmIChpcGNwX3dhbnRvcHRpb25zW2YtPnVuaXRdLmRlZmF1bHRfcm91dGUpIAorKyNpZm5kZWYgX19saW51eF9fCisgCSAgICBpZiAoc2lmZGVmYXVsdHJvdXRlKGYtPnVuaXQsIGdvLT5vdXJhZGRyLCBoby0+aGlzYWRkcikpCisrI2Vsc2UKKysJICAgIGlmIChzaWZkZWZhdWx0cm91dGUoZi0+dW5pdCwgZ28tPm91cmFkZHIsIGhvLT5oaXNhZGRyLAorKwkJCQkJIHdvLT5yZXBsYWNlX2RlZmF1bHRfcm91dGUpKQorKyNlbmRpZgorIAkJZGVmYXVsdF9yb3V0ZV9zZXRbZi0+dW5pdF0gPSAxOworIAorIAkvKiBNYWtlIGEgcHJveHkgQVJQIGVudHJ5IGlmIHJlcXVlc3RlZC4gKi8KK0BAIC0xOTgzLDcgKzIwMDksNyBAQAorIAlzaWZucG1vZGUoZi0+dW5pdCwgUFBQX0lQLCBOUE1PREVfRFJPUCk7CisgCXNpZmRvd24oZi0+dW5pdCk7CisgCWlwY3BfY2xlYXJfYWRkcnMoZi0+dW5pdCwgaXBjcF9nb3RvcHRpb25zW2YtPnVuaXRdLm91cmFkZHIsCistCQkJIGlwY3BfaGlzb3B0aW9uc1tmLT51bml0XS5oaXNhZGRyKTsKKysJCQkgaXBjcF9oaXNvcHRpb25zW2YtPnVuaXRdLmhpc2FkZHIsIDApOworICAgICB9CisgCisgICAgIC8qIEV4ZWN1dGUgdGhlIGlwLWRvd24gc2NyaXB0ICovCitAQCAtMTk5OSwxMiArMjAyNSwyMSBAQAorICAqIHByb3h5IGFycCBlbnRyaWVzLCBldGMuCisgICovCisgc3RhdGljIHZvaWQKKy1pcGNwX2NsZWFyX2FkZHJzKHVuaXQsIG91cmFkZHIsIGhpc2FkZHIpCisraXBjcF9jbGVhcl9hZGRycyh1bml0LCBvdXJhZGRyLCBoaXNhZGRyLCByZXBsYWNlZGVmYXVsdHJvdXRlKQorICAgICBpbnQgdW5pdDsKKyAgICAgdV9pbnQzMl90IG91cmFkZHI7ICAvKiBsb2NhbCBhZGRyZXNzICovCisgICAgIHVfaW50MzJfdCBoaXNhZGRyOyAgLyogcmVtb3RlIGFkZHJlc3MgKi8KKysgICAgYm9vbCByZXBsYWNlZGVmYXVsdHJvdXRlOworIHsKKy0gICAgaWYgKHByb3h5X2FycF9zZXRbdW5pdF0pIHsKKysgICAgLyogSWYgcmVwbGFjZWRlZmF1bHRyb3V0ZSwgc2lmZGVmYXVsdHJvdXRlIHdpbGwgYmUgY2FsbGVkIHNvb24KKysgICAgICogd2l0aCByZXBsYWNlZGVmYXVsdHJvdXRlIHNldCBhbmQgdGhhdCB3aWxsIG92ZXJ3cml0ZSB0aGUgY3VycmVudAorKyAgICAgKiBkZWZhdWx0IHJvdXRlLiBUaGlzIGlzIHRoZSBjYXNlIG9ubHkgd2hlbiBkb2luZyBkZW1hbmQsIG90aGVyd2lzZQorKyAgICAgKiBkdXJpbmcgZGVtYW5kLCB0aGlzIGNpZmRlZmF1bHRyb3V0ZSB3b3VsZCByZXN0b3JlIHRoZSBvbGQgZGVmYXVsdAorKyAgICAgKiByb3V0ZSB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50IGluIHRoaXMgY2FzZS4gSW4gdGhlIG5vbi1kZW1hbmQKKysgICAgICogY2FzZSwgd2UnbGwgZGVsZXRlIHRoZSBkZWZhdWx0IHJvdXRlIGFuZCByZXN0b3JlIHRoZSBvbGQgaWYgdGhlcmUKKysgICAgICogaXMgb25lIHNhdmVkIGJ5IGFuIHNpZmRlZmF1bHRyb3V0ZSB3aXRoIHJlcGxhY2VkZWZhdWx0cm91dGUuCisrICAgICAqLworKyAgICBpZiAoIXJlcGxhY2VkZWZhdWx0cm91dGUgJiYgZGVmYXVsdF9yb3V0ZV9zZXRbdW5pdF0pIHsKKyAJY2lmcHJveHlhcnAodW5pdCwgaGlzYWRkcik7CisgCXByb3h5X2FycF9zZXRbdW5pdF0gPSAwOworICAgICB9CitkaWZmIC11ck4gcHBwLTIuNC41LW9yaWcvcHBwZC9pcGNwLmggcHBwLTIuNC41L3BwcGQvaXBjcC5oCistLS0gcHBwLTIuNC41LW9yaWcvcHBwZC9pcGNwLmgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNDM2ODIwNjMgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9pcGNwLmgJMjAxMC0wNi0zMCAxNjo0MDo0OS41ODYyMDMxMjkgKzA4MDAKK0BAIC03MCw2ICs3MCw3IEBACisgICAgIGJvb2wgb2xkX2FkZHJzOwkJLyogVXNlIG9sZCAoSVAtQWRkcmVzc2VzKSBvcHRpb24/ICovCisgICAgIGJvb2wgcmVxX2FkZHI7CQkvKiBBc2sgcGVlciB0byBzZW5kIElQIGFkZHJlc3M/ICovCisgICAgIGJvb2wgZGVmYXVsdF9yb3V0ZTsJCS8qIEFzc2lnbiBkZWZhdWx0IHJvdXRlIHRocm91Z2ggaW50ZXJmYWNlPyAqLworKyAgICBib29sIHJlcGxhY2VfZGVmYXVsdF9yb3V0ZTsgLyogUmVwbGFjZSBkZWZhdWx0IHJvdXRlIHRocm91Z2ggaW50ZXJmYWNlPyAqLworICAgICBib29sIHByb3h5X2FycDsJCS8qIE1ha2UgcHJveHkgQVJQIGVudHJ5IGZvciBwZWVyPyAqLworICAgICBib29sIG5lZ192ajsJCS8qIFZhbiBKYWNvYnNvbiBDb21wcmVzc2lvbj8gKi8KKyAgICAgYm9vbCBvbGRfdmo7CQkvKiB1c2Ugb2xkIChzaG9ydCkgZm9ybSBvZiBWSiBvcHRpb24/ICovCitkaWZmIC11ck4gcHBwLTIuNC41LW9yaWcvcHBwZC9wcHBkLjggcHBwLTIuNC41L3BwcGQvcHBwZC44CistLS0gcHBwLTIuNC41LW9yaWcvcHBwZC9wcHBkLjgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNDM2ODIwNjMgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9wcHBkLjgJMjAxMC0wNi0zMCAxNjo0Mjo0Ny4xMDI0MTM4NTkgKzA4MDAKK0BAIC0xMjEsNiArMTIxLDEzIEBACisgVGhpcyBlbnRyeSBpcyByZW1vdmVkIHdoZW4gdGhlIFBQUCBjb25uZWN0aW9uIGlzIGJyb2tlbi4gIFRoaXMgb3B0aW9uCisgaXMgcHJpdmlsZWdlZCBpZiB0aGUgXGZJbm9kZWZhdWx0cm91dGVcZlIgb3B0aW9uIGhhcyBiZWVuIHNwZWNpZmllZC4KKyAuVFAKKysuQiByZXBsYWNlZGVmYXVsdHJvdXRlCisrVGhpcyBvcHRpb24gaXMgYSBmbGFnIHRvIHRoZSBkZWZhdWx0cm91dGUgb3B0aW9uLiBJZiBkZWZhdWx0cm91dGUgaXMKKytzZXQgYW5kIHRoaXMgZmxhZyBpcyBhbHNvIHNldCwgcHBwZCByZXBsYWNlcyBhbiBleGlzdGluZyBkZWZhdWx0IHJvdXRlCisrd2l0aCB0aGUgbmV3IGRlZmF1bHQgcm91dGUuCisrCisrCisrLlRQCisgLkIgZGlzY29ubmVjdCBcZklzY3JpcHQKKyBFeGVjdXRlIHRoZSBjb21tYW5kIHNwZWNpZmllZCBieSBcZklzY3JpcHRcZlIsIGJ5IHBhc3NpbmcgaXQgdG8gYQorIHNoZWxsLCBhZnRlcgorQEAgLTcxNyw3ICs3MjQsMTIgQEAKKyAuVFAKKyAuQiBub2RlZmF1bHRyb3V0ZQorIERpc2FibGUgdGhlIFxmSWRlZmF1bHRyb3V0ZVxmUiBvcHRpb24uICBUaGUgc3lzdGVtIGFkbWluaXN0cmF0b3Igd2hvCistd2lzaGVzIHRvIHByZXZlbnQgdXNlcnMgZnJvbSBjcmVhdGluZyBkZWZhdWx0IHJvdXRlcyB3aXRoIHBwcGQKKyt3aXNoZXMgdG8gcHJldmVudCB1c2VycyBmcm9tIGFkZGluZyBhIGRlZmF1bHQgcm91dGUgd2l0aCBwcHBkCisrY2FuIGRvIHNvIGJ5IHBsYWNpbmcgdGhpcyBvcHRpb24gaW4gdGhlIC9ldGMvcHBwL29wdGlvbnMgZmlsZS4KKysuVFAKKysuQiBub3JlcGxhY2VkZWZhdWx0cm91dGUKKytEaXNhYmxlIHRoZSBcZklyZXBsYWNlZGVmYXVsdHJvdXRlXGZSIG9wdGlvbi4gVGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHdobworK3dpc2hlcyB0byBwcmV2ZW50IHVzZXJzIGZyb20gcmVwbGFjaW5nIGEgZGVmYXVsdCByb3V0ZSB3aXRoIHBwcGQKKyBjYW4gZG8gc28gYnkgcGxhY2luZyB0aGlzIG9wdGlvbiBpbiB0aGUgL2V0Yy9wcHAvb3B0aW9ucyBmaWxlLgorIC5UUAorIC5CIG5vZGVmbGF0ZQorZGlmZiAtdXJOIHBwcC0yLjQuNS1vcmlnL3BwcGQvcHBwZC5oIHBwcC0yLjQuNS9wcHBkL3BwcGQuaAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvcHBwZC5oCTIwMTAtMDYtMzAgMTU6NTE6MTIuMDUwMTY2Mzk4ICswODAwCisrKysgcHBwLTIuNC41L3BwcGQvcHBwZC5oCTIwMTAtMDYtMzAgMTY6NDM6MzYuNTE0MTQ4MzI3ICswODAwCitAQCAtNjQzLDcgKzY0MywxMSBAQAorIGludCAgY2lmNmFkZHIgX19QKChpbnQsIGV1aTY0X3QsIGV1aTY0X3QpKTsKKyAJCQkJLyogUmVtb3ZlIGFuIElQdjYgYWRkcmVzcyBmcm9tIGkvZiAqLworICNlbmRpZgorKyNpZm5kZWYgX19saW51eF9fCisgaW50ICBzaWZkZWZhdWx0cm91dGUgX19QKChpbnQsIHVfaW50MzJfdCwgdV9pbnQzMl90KSk7CisrI2Vsc2UKKytpbnQgIHNpZmRlZmF1bHRyb3V0ZSBfX1AoKGludCwgdV9pbnQzMl90LCB1X2ludDMyX3QsIGJvb2wgcmVwbGFjZV9kZWZhdWx0X3J0KSk7CisrI2VuZGlmCisgCQkJCS8qIENyZWF0ZSBkZWZhdWx0IHJvdXRlIHRocm91Z2ggaS9mICovCisgaW50ICBjaWZkZWZhdWx0cm91dGUgX19QKChpbnQsIHVfaW50MzJfdCwgdV9pbnQzMl90KSk7CisgCQkJCS8qIERlbGV0ZSBkZWZhdWx0IHJvdXRlIHRocm91Z2ggaS9mICovCitkaWZmIC11ck4gcHBwLTIuNC41LW9yaWcvcHBwZC9zeXMtbGludXguYyBwcHAtMi40LjUvcHBwZC9zeXMtbGludXguYworLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvc3lzLWxpbnV4LmMJMjAxMC0wNi0zMCAxNTo1MToxMi4wNTAxNjYzOTggKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9zeXMtbGludXguYwkyMDEwLTA2LTMwIDE2OjU0OjAwLjM2MjcxNjIzMSArMDgwMAorQEAgLTIwNiw2ICsyMDYsOCBAQAorIAorIHN0YXRpYyBpbnQJaWZfaXNfdXA7CS8qIEludGVyZmFjZSBoYXMgYmVlbiBtYXJrZWQgdXAgKi8KKyBzdGF0aWMgaW50CWhhdmVfZGVmYXVsdF9yb3V0ZTsJLyogR2F0ZXdheSBmb3IgZGVmYXVsdCByb3V0ZSBhZGRlZCAqLworK3N0YXRpYyBzdHJ1Y3QgcnRlbnRyeSBvbGRfZGVmX3J0OyAgICAgICAvKiBPbGQgZGVmYXVsdCByb3V0ZSAqLworK3N0YXRpYyBpbnQgICAgICAgZGVmYXVsdF9ydF9yZXBsX3Jlc3Q7ICAvKiByZXBsYWNlIGFuZCByZXN0b3JlIG9sZCBkZWZhdWx0IHJ0ICovCisgc3RhdGljIHVfaW50MzJfdCBwcm94eV9hcnBfYWRkcjsJLyogQWRkciBmb3IgcHJveHkgYXJwIGVudHJ5IGFkZGVkICovCisgc3RhdGljIGNoYXIgcHJveHlfYXJwX2RldlsxNl07CQkvKiBEZXZpY2UgZm9yIHByb3h5IGFycCBlbnRyeSAqLworIHN0YXRpYyB1X2ludDMyX3Qgb3VyX29sZF9hZGRyOwkJLyogZm9yIGRldGVjdGluZyBhZGRyZXNzIGNoYW5nZXMgKi8KK0BAIC0xNTM3LDYgKzE1MzksOSBAQAorIAlwID0gTlVMTDsKKyAgICAgfQorIAorKyAgICBTRVRfU0FfRkFNSUxZIChydC0+cnRfZHN0LCAgICAgQUZfSU5FVCk7CisrICAgIFNFVF9TQV9GQU1JTFkgKHJ0LT5ydF9nYXRld2F5LCBBRl9JTkVUKTsKKysKKyAgICAgU0lOX0FERFIocnQtPnJ0X2RzdCkgPSBzdHJ0b3VsKGNvbHNbcm91dGVfZGVzdF9jb2xdLCBOVUxMLCAxNik7CisgICAgIFNJTl9BRERSKHJ0LT5ydF9nYXRld2F5KSA9IHN0cnRvdWwoY29sc1tyb3V0ZV9nd19jb2xdLCBOVUxMLCAxNik7CisgICAgIFNJTl9BRERSKHJ0LT5ydF9nZW5tYXNrKSA9IHN0cnRvdWwoY29sc1tyb3V0ZV9tYXNrX2NvbF0sIE5VTEwsIDE2KTsKK0BAIC0xNjA2LDIwICsxNjExLDUxIEBACisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICoKKyAgKiBzaWZkZWZhdWx0cm91dGUgLSBhc3NpZ24gYSBkZWZhdWx0IHJvdXRlIHRocm91Z2ggdGhlIGFkZHJlc3MgZ2l2ZW4uCistICovCistCistaW50IHNpZmRlZmF1bHRyb3V0ZSAoaW50IHVuaXQsIHVfaW50MzJfdCBvdXJhZGRyLCB1X2ludDMyX3QgZ2F0ZXdheSkKKy17CistICAgIHN0cnVjdCBydGVudHJ5IHJ0OworLQorLSAgICBpZiAoZGVmYXVsdHJvdXRlX2V4aXN0cygmcnQpICYmIHN0cmNtcChydC5ydF9kZXYsIGlmbmFtZSkgIT0gMCkgeworLQlpZiAocnQucnRfZmxhZ3MgJiBSVEZfR0FURVdBWSkKKy0JICAgIGVycm9yKCJub3QgcmVwbGFjaW5nIGV4aXN0aW5nIGRlZmF1bHQgcm91dGUgdmlhICVJIiwKKy0JCSAgU0lOX0FERFIocnQucnRfZ2F0ZXdheSkpOworLQllbHNlCistCSAgICBlcnJvcigibm90IHJlcGxhY2luZyBleGlzdGluZyBkZWZhdWx0IHJvdXRlIHRocm91Z2ggJXMiLAorLQkJICBydC5ydF9kZXYpOworLQlyZXR1cm4gMDsKKysgKgorKyAqIElmIHRoZSBnbG9iYWwgZGVmYXVsdF9ydF9yZXBsX3Jlc3QgZmxhZyBpcyBzZXQsIHRoZW4gdGhpcyBmdW5jdGlvbgorKyAqIGFscmVhZHkgcmVwbGFjZWQgdGhlIG9yaWdpbmFsIHN5c3RlbSBkZWZhdWx0cm91dGUgd2l0aCBzb21lIG90aGVyCisrICogcm91dGUgYW5kIGl0IHNob3VsZCBqdXN0IHJlcGxhY2UgdGhlIGN1cnJlbnQgZGVmYXVsdHJvdXRlIHdpdGgKKysgKiBhbm90aGVyIG9uZSwgd2l0aG91dCBzYXZpbmcgdGhlIGN1cnJlbnQgcm91dGUuIFVzZTogZGVtYW5kIG1vZGUsCisrICogd2hlbiBwcHBkIHNldHMgZmlyc3QgYSBkZWZhdWx0cm91dGUgaXQgaXQncyB0ZW1wb3JhcnkgcHBwMCBhZGRyZXNzZXMKKysgKiBhbmQgdGhlbiBjaGFuZ2VzIHRoZSB0ZW1wb3JhcnkgYWRkcmVzc2VzIHRvIHRoZSBhZGRyZXNzZXMgZm9yIHRoZSByZWFsCisrICogcHBwIGNvbm5lY3Rpb24gd2hlbiBpdCBoYXMgY29tZSB1cC4KKysgKi8KKysKKytpbnQgc2lmZGVmYXVsdHJvdXRlIChpbnQgdW5pdCwgdV9pbnQzMl90IG91cmFkZHIsIHVfaW50MzJfdCBnYXRld2F5LCBib29sIHJlcGxhY2UpCisreworKyAgICBzdHJ1Y3QgcnRlbnRyeSBydCwgdG1wX3J0OworKyAgICBzdHJ1Y3QgcnRlbnRyeSAqZGVsX3J0ID0gTlVMTDsKKysKKysgICAgaWYgKGRlZmF1bHRfcnRfcmVwbF9yZXN0KSB7CisrCS8qIFdlIGhhdmUgYWxyZWFkeSByZWNsYWNlZCB0aGUgb3JpZ2luYWwgZGVmYXVsdHJvdXRlLCBpZiB3ZQorKyAgICAgICAgICogYXJlIGNhbGxlZCBhZ2Fpbiwgd2Ugd2lsbCBkZWxldGUgdGhlIGN1cnJlbnQgZGVmYXVsdCByb3V0ZQorKyAgICAgICAgICogYW5kIHNldCB0aGUgbmV3IGRlZmF1bHQgcm91dGUgaW4gdGhpcyBmdW5jdGlvbi4gIAorKyAgICAgICAgICogLSB0aGlzIGlzIG5vcm1hbGx5IG9ubHkgdGhlIGNhc2UgdGhlIGRvaW5nIGRlbWFuZDogKi8KKysJaWYgKGRlZmF1bHRyb3V0ZV9leGlzdHMoICZ0bXBfcnQgKSkKKysJCWRlbF9ydCA9ICZ0bXBfcnQ7CisrICAgIH0gZWxzZSBpZiAoIGRlZmF1bHRyb3V0ZV9leGlzdHMoICZvbGRfZGVmX3J0ICAgICAgICAgICAgICAgICkgJiYKKysJICAgICAgICAgICAgICAgICAgICAgc3RyY21wKCAgb2xkX2RlZl9ydC5ydF9kZXYsIGlmbmFtZSApICE9IDApIHsKKysJLyogV2UgZGlkIG5vdCB5ZXQgcmVwbGFjZSBhbiBleGlzdGluZyBkZWZhdWx0IHJvdXRlLCBsZXQncworKwkgKiBjaGVjayBpZiB3ZSBzaG91bGQgc2F2ZSBhbmQgcmVwbGFjZSBhIGRlZmF1bHQgcm91dGU6CisrICAgICAgICAgKi8KKysJdV9pbnQzMl90IG9sZF9nYXRld2F5ID0gU0lOX0FERFIob2xkX2RlZl9ydC5ydF9nYXRld2F5KTsKKysJaWYgKG9sZF9nYXRld2F5ICE9IGdhdGV3YXkpIHsKKysJICAgIGlmICghcmVwbGFjZSkgeworKwkgICAgICAgIGVycm9yKCJub3QgcmVwbGFjaW5nIGRlZmF1bHQgcm91dGUgdG8gJXMgWyVJXSIsCisrCQkJb2xkX2RlZl9ydC5ydF9kZXYsIG9sZF9nYXRld2F5KTsKKysJCXJldHVybiAwOworKwkgICAgfSBlbHNlIHsKKysJCS8vIHdlIG5lZWQgdG8gY29weSBydF9kZXYgYmVjYXVzZSB3ZSBuZWVkIGl0IHBlcm1hbmVudCB0b286CisrCQljaGFyICogdG1wX2RldiA9IG1hbGxvYyhzdHJsZW4ob2xkX2RlZl9ydC5ydF9kZXYpKzEpOworKwkJc3RyY3B5KHRtcF9kZXYsIG9sZF9kZWZfcnQucnRfZGV2KTsKKysJCW9sZF9kZWZfcnQucnRfZGV2ID0gdG1wX2RldjsKKysKKysJCW5vdGljZSgicmVwbGFjaW5nIG9sZCBkZWZhdWx0IHJvdXRlIHRvICVzIFslSV0iLAorKwkJCW9sZF9kZWZfcnQucnRfZGV2LCBvbGRfZ2F0ZXdheSk7CisrCSAgICAgICAgZGVmYXVsdF9ydF9yZXBsX3Jlc3QgPSAxOworKwkJZGVsX3J0ID0gJm9sZF9kZWZfcnQ7CisrCSAgICB9CisrCX0KKyAgICAgfQorIAorICAgICBtZW1zZXQgKCZydCwgMCwgc2l6ZW9mIChydCkpOworQEAgLTE2MzgsNiArMTY3NCwxMiBAQAorIAkgICAgZXJyb3IoImRlZmF1bHQgcm91dGUgaW9jdGwoU0lPQ0FERFJUKTogJW0iKTsKKyAJcmV0dXJuIDA7CisgICAgIH0KKysgICAgaWYgKGRlZmF1bHRfcnRfcmVwbF9yZXN0ICYmIGRlbF9ydCkKKysgICAgICAgIGlmIChpb2N0bChzb2NrX2ZkLCBTSU9DREVMUlQsIGRlbF9ydCkgPCAwKSB7CisrCSAgICBpZiAoICEgb2tfZXJyb3IgKCBlcnJubyApKQorKwkgICAgICAgIGVycm9yKCJkZWwgb2xkIGRlZmF1bHQgcm91dGUgaW9jdGwoU0lPQ0RFTFJUKTogJW0oJWQpIiwgZXJybm8pOworKwkgICAgcmV0dXJuIDA7CisrICAgICAgICB9CisgCisgICAgIGhhdmVfZGVmYXVsdF9yb3V0ZSA9IDE7CisgICAgIHJldHVybiAxOworQEAgLTE2NzMsNiArMTcxNSwxNiBAQAorIAkgICAgcmV0dXJuIDA7CisgCX0KKyAgICAgfQorKyAgICBpZiAoZGVmYXVsdF9ydF9yZXBsX3Jlc3QpIHsKKysJbm90aWNlKCJyZXN0b3Jpbmcgb2xkIGRlZmF1bHQgcm91dGUgdG8gJXMgWyVJXSIsCisrCQkJb2xkX2RlZl9ydC5ydF9kZXYsIFNJTl9BRERSKG9sZF9kZWZfcnQucnRfZ2F0ZXdheSkpOworKyAgICAgICAgaWYgKGlvY3RsKHNvY2tfZmQsIFNJT0NBRERSVCwgJm9sZF9kZWZfcnQpIDwgMCkgeworKwkgICAgaWYgKCAhIG9rX2Vycm9yICggZXJybm8gKSkKKysJICAgICAgICBlcnJvcigicmVzdG9yZSBkZWZhdWx0IHJvdXRlIGlvY3RsKFNJT0NBRERSVCk6ICVtKCVkKSIsIGVycm5vKTsKKysJICAgIHJldHVybiAwOworKyAgICAgICAgfQorKyAgICAgICAgZGVmYXVsdF9ydF9yZXBsX3Jlc3QgPSAwOworKyAgICB9CisgCisgICAgIHJldHVybiAxOworIH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2NvcHRzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvY29wdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNmZjA2ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2NvcHRzLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK3BwcDogdXNlIGJ1aWxkIHN5c3RlbSBDRkxBR1Mgd2hlbiBjb21waWxpbmcKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK092ZXJyaWRlIHRoZSBoYXJkLWNvZGVkIENPUFRTIG1ha2UgdmFyaWFibGVzIHdpdGgKK0NGTEFHUy4gIEFkZCBDT1BUUyBpbnRvIG9uZSBNYWtlZmlsZSB0aGF0IGRpZCBub3QKK3VzZSBpdC4KKworU2lnbmVkLW9mZi1ieTogSm9lIFNsYXRlciA8anNsYXRlckB3aW5kcml2ZXIuY29tPgorCistLS0gYS9wcHBkL3BsdWdpbnMvcmFkaXVzL01ha2VmaWxlLmxpbnV4CisrKysgYi9wcHBkL3BsdWdpbnMvcmFkaXVzL01ha2VmaWxlLmxpbnV4CitAQCAtMTIsNyArMTIsNyBAQCBWRVJTSU9OID0gJChzaGVsbCBhd2sgLUYgJyInICcvVkVSU0lPTi8gCisgSU5TVEFMTAk9IGluc3RhbGwKKyAKKyBQTFVHSU49cmFkaXVzLnNvIHJhZGF0dHIuc28gcmFkcmVhbG1zLnNvCistQ0ZMQUdTPS1JLiAtSS4uLy4uIC1JLi4vLi4vLi4vaW5jbHVkZSAtTzIgLWZQSUMgLURSQ19MT0dfRkFDSUxJVFk9TE9HX0RBRU1PTgorK0NGTEFHUz0tSS4gLUkuLi8uLiAtSS4uLy4uLy4uL2luY2x1ZGUgJChDT1BUUykgLWZQSUMgLURSQ19MT0dfRkFDSUxJVFk9TE9HX0RBRU1PTgorIAorICMgVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBNaWNyb3NvZnQncworICMgTVMtQ0hBUCBhdXRoZW50aWNhdGlvbiBwcm90b2NvbC4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2ZpeC1DVkUtMjAxNS0zMzEwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvZml4LUNWRS0yMDE1LTMzMTAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzllZGIzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2ZpeC1DVkUtMjAxNS0zMzEwLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK3BwcDogQnVmZmVyIG92ZXJmbG93IGluIHJhZGl1cyBwbHVnaW4KKworRnJvbTogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvY2dpLWJpbi9idWdyZXBvcnQuY2dpP21zZz01O2J1Zz03ODI0NTAKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitPbiBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIDY1NTM1IHByb2Nlc3NlcyBydW5uaW5nLCBwcHBkIGFib3J0cyB3aGVuCitzZW5kaW5nIGEgInN0YXJ0IiBhY2NvdW50aW5nIG1lc3NhZ2UgdG8gdGhlIFJBRElVUyBzZXJ2ZXIgYmVjYXVzZSBvZiBhCitidWZmZXIgb3ZlcmZsb3cgaW4gcmNfbWtzaWQuCisKK1RoZSBwcm9jZXNzIGlkIGlzIHVzZWQgaW4gcmNfbWtzaWQgdG8gZ2VuZXJhdGUgYSBwc2V1ZG8tdW5pcXVlIHN0cmluZywKK2Fzc3VtaW5nIHRoYXQgdGhlIGhleCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGlkIHdpbGwgYmUgYXQgbW9zdCA0CitjaGFyYWN0ZXJzIChGRkZGKS4gX19zcHJpbnRmX2NoaygpLCB1c2VkIHdoZW4gY29tcGlsaW5nIHdpdGgKK29wdGltaXphdGlvbiBsZXZlbHMgZ3JlYXRlciB0aGFuIDAgYW5kIEZPUlRJRllfU09VUkNFLCBkZXRlY3RzIHRoZQorYnVmZmVyIG92ZXJmbG93IGFuZCBtYWtlcyBwcHBkIGNyYXNoLgorCitUaGUgZm9sbG93aW5nIHBhdGNoIGZpeGVzIHRoZSBwcm9ibGVtLgorCistLS0gcHBwLTIuNC42Lm9yaWcvcHBwZC9wbHVnaW5zL3JhZGl1cy91dGlsLmMKKysrKyBwcHAtMi40LjYvcHBwZC9wbHVnaW5zL3JhZGl1cy91dGlsLmMKK0BAIC03Nyw3ICs3Nyw3IEBAIHJjX21rc2lkICh2b2lkKQorICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGludCBjbnQgPSAwOworICAgc3ByaW50ZiAoYnVmLCAiJTA4bFglMDRYJTAyaFgiLAorIAkgICAodW5zaWduZWQgbG9uZyBpbnQpIHRpbWUgKE5VTEwpLAorLQkgICAodW5zaWduZWQgaW50KSBnZXRwaWQgKCksCisrCSAgICh1bnNpZ25lZCBpbnQpIGdldHBpZCAoKSAlIDY1NTM1LAorIAkgICBjbnQgJiAweEZGKTsKKyAgIGNudCsrOworICAgcmV0dXJuIGJ1ZjsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2luaXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBjMDEzNjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9pbml0CkBAIC0wLDAgKzEsNTcgQEAKKyMhL2Jpbi9zaAorIworIyAgIC9ldGMvaW5pdC5kL3BwcDogc3RhcnQgb3Igc3RvcCBQUFAgbGluay4KKyMKKyMgSWYgeW91IHdhbnQgUFBQIHN0YXJ0ZWQgb24gYm9vdCB0aW1lIChtb3N0IGRpYWx1cCBzeXN0ZW1zIHdvbid0IG5lZWQgaXQpCisjIHJlbmFtZSB0aGUgL2V0Yy9wcHAvbm9fcHBwX29uX2Jvb3QgZmlsZSB0byAvZXRjL3BwcC9wcHBfb25fYm9vdCwgYW5kCisjIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoZSBjb21tZW50cyBpbiB0aGF0IGZpbGUuCisKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCit0ZXN0IC14IC91c3Ivc2Jpbi9wcHBkIC1hIC1mIC9ldGMvcHBwL3BwcF9vbl9ib290IHx8IGV4aXQgMAoraWYgWyAteCAvZXRjL3BwcC9wcHBfb25fYm9vdCBdOyB0aGVuIFJVTkZJTEU9MTsgZmkKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgICAgZWNobyAtbiAiU3RhcnRpbmcgdXAgUFBQIGxpbms6IHBwcGQiCisgICAgICBpZiBbICIkUlVORklMRSIgPSAiMSIgXTsgdGhlbgorICAgICAgICAvZXRjL3BwcC9wcHBfb25fYm9vdAorICAgICAgZWxzZQorICAgICAgICBwcHBkIGNhbGwgcHJvdmlkZXIKKyAgICAgIGZpCisgICAgICBlY2hvICIuIgorICAgIDs7CisgIHN0b3ApCisgICAgICBlY2hvIC1uICJTaHV0dGluZyBkb3duIFBQUCBsaW5rOiBwcHBkIgorICAgICAgaWYgWyAiJFJVTkZJTEUiID0gIjEiIF07IHRoZW4KKyAgICAgICAgcG9mZgorICAgICAgZWxzZQorICAgICAgICBwb2ZmIHByb3ZpZGVyCisgICAgICBmaQorICAgICAgZWNobyAiLiIKKyAgICA7OworICBzdGF0dXMpCisgICAgc3RhdHVzIC91c3Ivc2Jpbi9wcHBkOworICAgIGV4aXQgJD8KKyAgICA7OworICByZXN0YXJ0fGZvcmNlLXJlbG9hZCkKKyAgICBlY2hvIC1uICJSZXN0YXJ0aW5nIFBQUCBsaW5rOiBwcHBkIgorICAgIGlmIFsgIiRSVU5GSUxFIiA9ICIxIiBdOyB0aGVuICAgICAgCisgICAgICBwb2ZmCisgICAgICBzbGVlcCA1CisgICAgICAvZXRjL3BwcC9wcHBfb25fYm9vdAorICAgIGVsc2UgICAgICAgICAgICAgICAgICAKKyAgICAgIHBvZmYgcHJvdmlkZXIKKyAgICAgIHNsZWVwIDUKKyAgICAgIHBwcGQgY2FsbCBwcm92aWRlcgorICAgIGZpCisgICAgZWNobyAiLiIKKyAgICA7OworICAqKQorICAgICAgZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kL3BwcCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydHxmb3JjZS1yZWxvYWR9IgorICAgICAgZXhpdCAxCisgICAgOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9pcC1kb3duIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvaXAtZG93bgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNmQzNTQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvaXAtZG93bgpAQCAtMCwwICsxLDQzIEBACisjIS9iaW4vc2gKKyMKKyMgJElkOiBpcC1kb3duLHYgMS4yIDE5OTgvMDIvMTAgMjE6MjE6NTUgcGhpbCBFeHAgJAorIworIyBUaGlzIHNjcmlwdCBpcyBydW4gYnkgdGhlIHBwcGQgX2FmdGVyXyB0aGUgbGluayBpcyBicm91Z2h0IGRvd24uCisjIEl0IHVzZXMgcnVuLXBhcnRzIHRvIHJ1biBzY3JpcHRzIGluIC9ldGMvcHBwL2lwLWRvd24uZCwgc28gdG8gZGVsZXRlCisjIHJvdXRlcywgdW5zZXQgSVAgYWRkcmVzc2VzIGV0Yy4geW91IHNob3VsZCBjcmVhdGUgc2NyaXB0KHMpIHRoZXJlLgorIworIyBCZSBhd2FyZSB0aGF0IG90aGVyIHBhY2thZ2VzIG1heSBpbmNsdWRlIC9ldGMvcHBwL2lwLWRvd24uZCBzY3JpcHRzIChuYW1lZAorIyBhZnRlciB0aGF0IHBhY2thZ2UpLCBzbyBjaG9vc2UgbG9jYWwgc2NyaXB0IG5hbWVzIHdpdGggdGhhdCBpbiBtaW5kLgorIworIyBUaGlzIHNjcmlwdCBpcyBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czoKKyMgICAgQXJnICBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICBFeGFtcGxlCisjICAgICQxICAgSW50ZXJmYWNlIG5hbWUgICAgICAgICAgICAgICAgcHBwMAorIyAgICAkMiAgIFRoZSB0dHkgICAgICAgICAgICAgICAgICAgICAgIHR0eVMxCisjICAgICQzICAgVGhlIGxpbmsgc3BlZWQgICAgICAgICAgICAgICAgMzg0MDAKKyMgICAgJDQgICBMb2NhbCBJUCBudW1iZXIgICAgICAgICAgICAgICAxMi4zNC41Ni43OAorIyAgICAkNSAgIFBlZXIgIElQIG51bWJlciAgICAgICAgICAgICAgIDEyLjM0LjU2Ljk5CisjICAgICQ2ICAgT3B0aW9uYWwgYGBpcHBhcmFtJycgdmFsdWUgICAgZm9vCisKKyMgVGhlICBlbnZpcm9ubWVudCBpcyBjbGVhcmVkIGJlZm9yZSBleGVjdXRpbmcgdGhpcyBzY3JpcHQKKyMgc28gdGhlIHBhdGggbXVzdCBiZSByZXNldAorUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9zYmluOi9zYmluOi91c3IvbG9jYWwvYmluOi91c3IvYmluOi9iaW4KK2V4cG9ydCBQQVRICisjIFRoZXNlIHZhcmlhYmxlcyBhcmUgZm9yIHRoZSB1c2Ugb2YgdGhlIHNjcmlwdHMgcnVuIGJ5IHJ1bi1wYXJ0cworUFBQX0lGQUNFPSIkMSIKK1BQUF9UVFk9IiQyIgorUFBQX1NQRUVEPSIkMyIKK1BQUF9MT0NBTD0iJDQiCitQUFBfUkVNT1RFPSIkNSIKK1BQUF9JUFBBUkFNPSIkNiIKK2V4cG9ydCBQUFBfSUZBQ0UgUFBQX1RUWSBQUFBfU1BFRUQgUFBQX0xPQ0FMIFBQUF9SRU1PVEUgUFBQX0lQUEFSQU0KKworIyBhcyBhbiBhZGRpdGlvbmFsIGNvbnZlbmllbmNlLCAkUFBQX1RUWU5BTUUgaXMgc2V0IHRvIHRoZSB0dHkgbmFtZSwKKyMgc3RyaXBwZWQgb2YgL2Rldi8gKGlmIHByZXNlbnQpIGZvciBlYXNpZXIgbWF0Y2hpbmcuCitQUFBfVFRZTkFNRT1gL3Vzci9iaW4vYmFzZW5hbWUgIiQyImAKK2V4cG9ydCBQUFBfVFRZTkFNRSAKKworIyBNYWluIFNjcmlwdCBzdGFydHMgaGVyZQorCitydW4tcGFydHMgL2V0Yy9wcHAvaXAtZG93bi5kCisKKyMgbGFzdCBsaW5lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9pcC11cCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2lwLXVwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZjMmZhZTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9pcC11cApAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vc2gKKyMKKyMgJElkOiBpcC11cCx2IDEuMiAxOTk4LzAyLzEwIDIxOjI1OjM0IHBoaWwgRXhwICQKKyMKKyMgVGhpcyBzY3JpcHQgaXMgcnVuIGJ5IHRoZSBwcHBkIGFmdGVyIHRoZSBsaW5rIGlzIGVzdGFibGlzaGVkLgorIyBJdCB1c2VzIHJ1bi1wYXJ0cyB0byBydW4gc2NyaXB0cyBpbiAvZXRjL3BwcC9pcC11cC5kLCBzbyB0byBhZGQgcm91dGVzLAorIyBzZXQgSVAgYWRkcmVzcywgcnVuIHRoZSBtYWlscSBldGMuIHlvdSBzaG91bGQgY3JlYXRlIHNjcmlwdChzKSB0aGVyZS4KKyMKKyMgQmUgYXdhcmUgdGhhdCBvdGhlciBwYWNrYWdlcyBtYXkgaW5jbHVkZSAvZXRjL3BwcC9pcC11cC5kIHNjcmlwdHMgKG5hbWVkCisjIGFmdGVyIHRoYXQgcGFja2FnZSksIHNvIGNob29zZSBsb2NhbCBzY3JpcHQgbmFtZXMgd2l0aCB0aGF0IGluIG1pbmQuCisjCisjIFRoaXMgc2NyaXB0IGlzIGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzOgorIyAgICBBcmcgIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgIEV4YW1wbGUKKyMgICAgJDEgICBJbnRlcmZhY2UgbmFtZSAgICAgICAgICAgICAgICBwcHAwCisjICAgICQyICAgVGhlIHR0eSAgICAgICAgICAgICAgICAgICAgICAgdHR5UzEKKyMgICAgJDMgICBUaGUgbGluayBzcGVlZCAgICAgICAgICAgICAgICAzODQwMAorIyAgICAkNCAgIExvY2FsIElQIG51bWJlciAgICAgICAgICAgICAgIDEyLjM0LjU2Ljc4CisjICAgICQ1ICAgUGVlciAgSVAgbnVtYmVyICAgICAgICAgICAgICAgMTIuMzQuNTYuOTkKKyMgICAgJDYgICBPcHRpb25hbCBgYGlwcGFyYW0nJyB2YWx1ZSAgICBmb28KKworIyBUaGUgIGVudmlyb25tZW50IGlzIGNsZWFyZWQgYmVmb3JlIGV4ZWN1dGluZyB0aGlzIHNjcmlwdAorIyBzbyB0aGUgcGF0aCBtdXN0IGJlIHJlc2V0CitQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL3NiaW46L3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9iaW46L2JpbgorZXhwb3J0IFBBVEgKKyMgVGhlc2UgdmFyaWFibGVzIGFyZSBmb3IgdGhlIHVzZSBvZiB0aGUgc2NyaXB0cyBydW4gYnkgcnVuLXBhcnRzCitQUFBfSUZBQ0U9IiQxIgorUFBQX1RUWT0iJDIiCitQUFBfU1BFRUQ9IiQzIgorUFBQX0xPQ0FMPSIkNCIKK1BQUF9SRU1PVEU9IiQ1IgorUFBQX0lQUEFSQU09IiQ2IgorZXhwb3J0IFBQUF9JRkFDRSBQUFBfVFRZIFBQUF9TUEVFRCBQUFBfTE9DQUwgUFBQX1JFTU9URSBQUFBfSVBQQVJBTQorCisKKyMgYXMgYW4gYWRkaXRpb25hbCBjb252ZW5pZW5jZSwgJFBQUF9UVFlOQU1FIGlzIHNldCB0byB0aGUgdHR5IG5hbWUsCisjIHN0cmlwcGVkIG9mIC9kZXYvIChpZiBwcmVzZW50KSBmb3IgZWFzaWVyIG1hdGNoaW5nLgorUFBQX1RUWU5BTUU9YC91c3IvYmluL2Jhc2VuYW1lICIkMiJgCitleHBvcnQgUFBQX1RUWU5BTUUgCisKKyMgTWFpbiBTY3JpcHQgc3RhcnRzIGhlcmUKKworcnVuLXBhcnRzIC9ldGMvcHBwL2lwLXVwLmQKKworIyBsYXN0IGxpbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL21ha2VmaWxlLXJlbW92ZS1oYXJkLXVzci1yZWZlcmVuY2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9tYWtlZmlsZS1yZW1vdmUtaGFyZC11c3ItcmVmZXJlbmNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1OTcxN2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9tYWtlZmlsZS1yZW1vdmUtaGFyZC11c3ItcmVmZXJlbmNlLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK1RoZSBwYXRjaCBjb21lcyBmcm9tIE9wZW5FbWJlZGRlZC4KK1JlYmFzZWQgZm9yIHBwcC0yLjQuNS4gRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKworVXBkYXRlZCBmcm9tIE9FLUNsYXNzaWMgdG8gaW5jbHVkZSB0aGUgcGNhcCBodW5rLgorU2lnbmVkLW9mZi1ieTogQW5kcmVhcyBPYmVycml0dGVyIDxvYmlAb3BlbmRyZWFtYm94Lm9yZz4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitkaWZmIC11ck4gcHBwLTIuNC41LW9yaWcvcHBwZC9NYWtlZmlsZS5saW51eCBwcHAtMi40LjUvcHBwZC9NYWtlZmlsZS5saW51eAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNDM2ODIwNjMgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE3OjA4OjIxLjgwNjM2MzA0MiArMDgwMAorQEAgLTExNywxMCArMTE3LDEwIEBACisgI0xJQlMgICAgICs9IC1sc2hhZG93ICQoTElCUykKKyBlbmRpZgorIAorLWlmbmVxICgkKHdpbGRjYXJkIC91c3IvaW5jbHVkZS9jcnlwdC5oKSwpCisrI2lmbmVxICgkKHdpbGRjYXJkIC91c3IvaW5jbHVkZS9jcnlwdC5oKSwpCisgQ0ZMQUdTICArPSAtREhBVkVfQ1JZUFRfSD0xCisgTElCUwkrPSAtbGNyeXB0CistZW5kaWYKKysjZW5kaWYKKyAKKyBpZmRlZiBORUVEREVTCisgaWZuZGVmIFVTRV9DUllQVAorQEAgLTE2OSwxMCArMTY5LDEwIEBACisgZW5kaWYKKyAKKyBpZmRlZiBGSUxURVIKKy1pZm5lcSAoJCh3aWxkY2FyZCAvdXNyL2luY2x1ZGUvcGNhcC1icGYuaCksKQorKyNpZm5lcSAoJCh3aWxkY2FyZCAvdXNyL2luY2x1ZGUvcGNhcC1icGYuaCksKQorIExJQlMgICAgKz0gLWxwY2FwCisgQ0ZMQUdTICArPSAtRFBQUF9GSUxURVIKKy1lbmRpZgorKyNlbmRpZgorIGVuZGlmCisgCisgaWZkZWYgSEFWRV9JTkVUNgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvbWFrZWZpbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9tYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDA5YmFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSw5NSBAQAorVGhlIHBhdGNoIGNvbWVzIGZyb20gT3BlbkVtYmVkZGVkCitSZWJhc2VkIGZvciBwcHAtMi40LjUuIERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworZGlmZiAtcnVOIHBwcC0yLjQuNS1vcmlnL2NoYXQvTWFrZWZpbGUubGludXggcHBwLTIuNC41L2NoYXQvTWFrZWZpbGUubGludXgKKy0tLSBwcHAtMi40LjUtb3JpZy9jaGF0L01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTE6MTIuMDUwMTY2Mzk4ICswODAwCisrKysgcHBwLTIuNC41L2NoYXQvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MTozMC40NTAxMTg0NDYgKzA4MDAKK0BAIC0yNSw3ICsyNSw3IEBACisgCisgaW5zdGFsbDogY2hhdAorIAlta2RpciAtcCAkKEJJTkRJUikgJChNQU5ESVIpCistCSQoSU5TVEFMTCkgLXMgLWMgY2hhdCAkKEJJTkRJUikKKysJJChJTlNUQUxMKSAtYyBjaGF0ICQoQklORElSKQorIAkkKElOU1RBTEwpIC1jIC1tIDY0NCBjaGF0LjggJChNQU5ESVIpCisgCisgY2xlYW46CitkaWZmIC1ydU4gcHBwLTIuNC41LW9yaWcvcHBwZC9NYWtlZmlsZS5saW51eCBwcHAtMi40LjUvcHBwZC9NYWtlZmlsZS5saW51eAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNDM2ODIwNjMgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE1OjUyOjExLjIxNDE3MDYwNyArMDgwMAorQEAgLTk5LDcgKzk5LDcgQEAKKyBDRkxBR1MJKz0gLURVU0VfU1JQIC1ET1BFTlNTTCAtSS91c3IvbG9jYWwvc3NsL2luY2x1ZGUKKyBMSUJTCSs9IC1sc3JwIC1ML3Vzci9sb2NhbC9zc2wvbGliIC1sY3J5cHRvCisgVEFSR0VUUwkrPSBzcnAtZW50cnkKKy1FWFRSQUlOU1RBTEwgPSAkKElOU1RBTEwpIC1zIC1jIC1tIDU1NSBzcnAtZW50cnkgJChCSU5ESVIpL3NycC1lbnRyeQorK0VYVFJBSU5TVEFMTCA9ICQoSU5TVEFMTCkgLWMgLW0gNTU1IHNycC1lbnRyeSAkKEJJTkRJUikvc3JwLWVudHJ5CisgTUFOUEFHRVMgKz0gc3JwLWVudHJ5LjgKKyBFWFRSQUNMRUFOICs9IHNycC1lbnRyeS5vCisgTkVFRERFUz15CitAQCAtMjAwLDcgKzIwMCw3IEBACisgaW5zdGFsbDogcHBwZAorIAlta2RpciAtcCAkKEJJTkRJUikgJChNQU5ESVIpCisgCSQoRVhUUkFJTlNUQUxMKQorLQkkKElOU1RBTEwpIC1zIC1jIC1tIDU1NSBwcHBkICQoQklORElSKS9wcHBkCisrCSQoSU5TVEFMTCkgLWMgLW0gNTU1IHBwcGQgJChCSU5ESVIpL3BwcGQKKyAJaWYgY2hncnAgcHBwdXNlcnMgJChCSU5ESVIpL3BwcGQgMj4vZGV2L251bGw7IHRoZW4gXAorIAkgIGNobW9kIG8tcngsdStzICQoQklORElSKS9wcHBkOyBmaQorIAkkKElOU1RBTEwpIC1jIC1tIDQ0NCBwcHBkLjggJChNQU5ESVIpCitkaWZmIC1ydU4gcHBwLTIuNC41LW9yaWcvcHBwZC9wbHVnaW5zL3JhZGl1cy9NYWtlZmlsZS5saW51eCBwcHAtMi40LjUvcHBwZC9wbHVnaW5zL3JhZGl1cy9NYWtlZmlsZS5saW51eAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvcGx1Z2lucy9yYWRpdXMvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNDc2NzYxODcgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9wbHVnaW5zL3JhZGl1cy9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE1OjUzOjQ3Ljc1MDE4MjI2NyArMDgwMAorQEAgLTM2LDExICszNiwxMSBAQAorIAorIGluc3RhbGw6IGFsbAorIAkkKElOU1RBTEwpIC1kIC1tIDc1NSAkKExJQkRJUikKKy0JJChJTlNUQUxMKSAtcyAtYyAtbSA3NTUgcmFkaXVzLnNvICQoTElCRElSKQorLQkkKElOU1RBTEwpIC1zIC1jIC1tIDc1NSByYWRhdHRyLnNvICQoTElCRElSKQorLQkkKElOU1RBTEwpIC1zIC1jIC1tIDc1NSByYWRyZWFsbXMuc28gJChMSUJESVIpCistCSQoSU5TVEFMTCkgLWMgLW0gNDQ0IHBwcGQtcmFkaXVzLjggJChNQU5ESVIpCistCSQoSU5TVEFMTCkgLWMgLW0gNDQ0IHBwcGQtcmFkYXR0ci44ICQoTUFORElSKQorKwkkKElOU1RBTEwpIC1jIC1tIDc1NSByYWRpdXMuc28gJChMSUJESVIpCisrCSQoSU5TVEFMTCkgLWMgLW0gNzU1IHJhZGF0dHIuc28gJChMSUJESVIpCisrCSQoSU5TVEFMTCkgLWMgLW0gNzU1IHJhZHJlYWxtcy5zbyAkKExJQkRJUikKKysJJChJTlNUQUxMKSAtbSA0NDQgcHBwZC1yYWRpdXMuOCAkKE1BTkRJUikKKysJJChJTlNUQUxMKSAtbSA0NDQgcHBwZC1yYWRhdHRyLjggJChNQU5ESVIpCisgCisgcmFkaXVzLnNvOiByYWRpdXMubyBsaWJyYWRpdXNjbGllbnQuYQorIAkkKENDKSAtbyByYWRpdXMuc28gLXNoYXJlZCByYWRpdXMubyBsaWJyYWRpdXNjbGllbnQuYQorZGlmZiAtcnVOIHBwcC0yLjQuNS1vcmlnL3BwcGQvcGx1Z2lucy9ycC1wcHBvZS9NYWtlZmlsZS5saW51eCBwcHAtMi40LjUvcHBwZC9wbHVnaW5zL3JwLXBwcG9lL01ha2VmaWxlLmxpbnV4CistLS0gcHBwLTIuNC41LW9yaWcvcHBwZC9wbHVnaW5zL3JwLXBwcG9lL01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTE6MTIuMDQ3Njc2MTg3ICswODAwCisrKysgcHBwLTIuNC41L3BwcGQvcGx1Z2lucy9ycC1wcHBvZS9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE1OjUzOjE1LjQ1NDQ4Njg3NyArMDgwMAorQEAgLTQzLDkgKzQzLDkgQEAKKyAKKyBpbnN0YWxsOiBhbGwKKyAJJChJTlNUQUxMKSAtZCAtbSA3NTUgJChMSUJESVIpCistCSQoSU5TVEFMTCkgLXMgLWMgLW0gNDU1MCBycC1wcHBvZS5zbyAkKExJQkRJUikKKysJJChJTlNUQUxMKSAtYyAtbSA0NTUwIHJwLXBwcG9lLnNvICQoTElCRElSKQorIAkkKElOU1RBTEwpIC1kIC1tIDc1NSAkKEJJTkRJUikKKy0JJChJTlNUQUxMKSAtcyAtYyAtbSA1NTUgcHBwb2UtZGlzY292ZXJ5ICQoQklORElSKQorKwkkKElOU1RBTEwpIC1jIC1tIDU1NSBwcHBvZS1kaXNjb3ZlcnkgJChCSU5ESVIpCisgCisgY2xlYW46CisgCXJtIC1mICoubyAqLnNvIHBwcG9lLWRpc2NvdmVyeQorZGlmZiAtcnVOIHBwcC0yLjQuNS1vcmlnL3BwcGR1bXAvTWFrZWZpbGUubGludXggcHBwLTIuNC41L3BwcGR1bXAvTWFrZWZpbGUubGludXgKKy0tLSBwcHAtMi40LjUtb3JpZy9wcHBkdW1wL01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTE6MTIuMDU4MTgzMzgzICswODAwCisrKysgcHBwLTIuNC41L3BwcGR1bXAvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MjoyNS43NjIxODM1MzcgKzA4MDAKK0BAIC0xNyw1ICsxNyw1IEBACisgCisgaW5zdGFsbDoKKyAJbWtkaXIgLXAgJChCSU5ESVIpICQoTUFORElSKQorLQkkKElOU1RBTEwpIC1zIC1jIHBwcGR1bXAgJChCSU5ESVIpCisrCSQoSU5TVEFMTCkgLWMgcHBwZHVtcCAkKEJJTkRJUikKKyAJJChJTlNUQUxMKSAtYyAtbSA0NDQgcHBwZHVtcC44ICQoTUFORElSKQorZGlmZiAtcnVOIHBwcC0yLjQuNS1vcmlnL3BwcHN0YXRzL01ha2VmaWxlLmxpbnV4IHBwcC0yLjQuNS9wcHBzdGF0cy9NYWtlZmlsZS5saW51eAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcHN0YXRzL01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTE6MTIuMDU4MTgzMzgzICswODAwCisrKysgcHBwLTIuNC41L3BwcHN0YXRzL01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTI6NDIuNDg2MzQxMDgxICswODAwCitAQCAtMjIsNyArMjIsNyBAQAorIAorIGluc3RhbGw6IHBwcHN0YXRzCisgCS1ta2RpciAtcCAkKE1BTkRJUikKKy0JJChJTlNUQUxMKSAtcyAtYyBwcHBzdGF0cyAkKEJJTkRJUikKKysJJChJTlNUQUxMKSAtYyBwcHBzdGF0cyAkKEJJTkRJUikKKyAJJChJTlNUQUxMKSAtYyAtbSA0NDQgcHBwc3RhdHMuOCAkKE1BTkRJUikKKyAKKyBwcHBzdGF0czogJChQUFBTVEFUU1JDUykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BhcCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTNjMzI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcGFwCkBAIC0wLDAgKzEsMjIgQEAKKyMgWW91IGNhbiB1c2UgdGhpcyBzY3JpcHQgdW5tb2RpZmllZCB0byBjb25uZWN0IHRvIHNpdGVzIHdoaWNoIGFsbG93CisjIGF1dGhlbnRpY2F0aW9uIHZpYSBQQVAsIENIQVAgYW5kIHNpbWlsYXIgcHJvdG9jb2xzLgorIyBUaGlzIHNjcmlwdCBjYW4gYmUgc2hhcmVkIGFtb25nIGRpZmZlcmVudCBwcHBkIHBlZXIgY29uZmlndXJhdGlvbnMuCisjIFRvIHVzZSBpdCwgYWRkIHNvbWV0aGluZyBsaWtlIHRoaXMgdG8geW91ciAvZXRjL3BwcC9wZWVycy8gZmlsZToKKyMKKyMgY29ubmVjdCAiL3Vzci9zYmluL2NoYXQgLXYgLWYgL2V0Yy9jaGF0c2NyaXB0cy9wYXAgLVQgUEhPTkUtTlVNQkVSIgorIyB1c2VyIFlPVVItVVNFUk5BTUUtSU4tUEFQLVNFQ1JFVFMKKyMgbm9hdXRoCisKKyMgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSB0byBzZWUgdGhlIGNvbm5lY3Qgc3BlZWQuCisjIEl0IHdpbGwgYmUgbG9nZ2VkIHRvIHN0ZGVyciBvciB0byB0aGUgZmlsZSBzcGVjaWZpZWQgd2l0aCB0aGUgLXIgY2hhdCBvcHRpb24uCisjUkVQT1JUCQlDT05ORUNUCisKK0FCT1JUCQlCVVNZCitBQk9SVAkJVk9JQ0UKK0FCT1JUCQkiTk8gQ0FSUklFUiIKK0FCT1JUCQkiTk8gRElBTFRPTkUiCitBQk9SVAkJIk5PIERJQUwgVE9ORSIKKyIiCQlBVFoKK09LCQlBVERUXFQKK0NPTk5FQ1QJCSIiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BvZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wb2ZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MjFhOTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wb2ZmCkBAIC0wLDAgKzEsMjYgQEAKKyMhL2Jpbi9zaAorCisjIExldHMgc2VlIGhvdyBtYW55IHBwcGRzIGFyZSBydW5uaW5nLi4uLgorc2V0IC0tIGBjYXQgL3Zhci9ydW4vcHBwKi5waWQgMj4vZGV2L251bGxgCisKK2Nhc2UgJCMgaW4KKyAgMCkgIyBwcHBkIG9ubHkgY3JlYXRlcyBhIHBpZCBmaWxlIG9uY2UgcHBwIGlzIHVwLCBzbyBsZXQncyB0cnkga2lsbGluZyBwcHBkCisgICAgICMgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB3ZSd2ZSBub3QgZ290IHRoYXQgZmFyIHlldC4KKyAgICAga2lsbGFsbCBwcHBkCisgICAgIDs7CisgIDEpICMgSWYgb25seSBvbmUgd2FzIHJ1bm5pbmcgdGhlbiBpdCBjYW4gYmUga2lsbGVkIChhcHBhcmVudGx5IGtpbGxhbGwKKyAgICAgIyBjYXVzZWQgcHJvYmxlbXMgZm9yIHNvbWUsIHNvIGxldHMgdHJ5IGtpbGxpbmcgdGhlIHBpZCBmcm9tIHRoZSBmaWxlKQorICAgICBraWxsICQxCisgICAgIDs7CisgICopICMgTW9yZSB0aGFuIG9uZSEgQWllZWhoLi4gRG9udCBrbm93IHdoaWNoIG9uZSB0byBraWxsLgorICAgICBlY2hvICJNb3JlIHRoYW4gb25lIHBwcGQgcnVubmluZy4gTm9uZSBzdG9wcGVkIgorICAgICBleGl0IDEKKyAgICAgOzsKK2VzYWMKKworaWYgWyAtciAvdmFyL3J1bi9wcHAtcXVpY2sgXQordGhlbgorICAgIHJtIC1mIC92YXIvcnVuL3BwcC1xdWljaworZmkKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wb24gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFjMDU5NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BvbgpAQCAtMCwwICsxLDkgQEAKKyMhL2Jpbi9zaAorCitpZiBbICIkMSIgPSAicXVpY2siIF0KK3RoZW4KKyAgICB0b3VjaCAvdmFyL3J1bi9wcHAtcXVpY2sKKyAgICBzaGlmdAorZmkKKworL3Vzci9zYmluL3BwcGQgY2FsbCAkezE6LXByb3ZpZGVyfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcHBwQC5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcHBwQC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZjBiNWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcHBALnNlcnZpY2UKQEAgLTAsMCArMSw5IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVBQUCBsaW5rIHRvICVJCitCZWZvcmU9bmV0d29yay50YXJnZXQKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9QFNCSU5ESVJAL3BwcGQgY2FsbCAlSSBub2RldGFjaCBub2xvZworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcHBfb25fYm9vdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BwcF9vbl9ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OTM3NjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcHBfb25fYm9vdApAQCAtMCwwICsxLDIxIEBACisjIyMhL2Jpbi9zaAorIworIyAgIFJlbmFtZSB0aGlzIGZpbGUgdG8gcHBwX29uX2Jvb3QgYW5kIHBwcGQgd2lsbCBiZSBmaXJlZCB1cCBhcworIyAgIHNvb24gYXMgdGhlIHN5c3RlbSBjb21lcyB1cCwgY29ubmVjdGluZyB0byBgcHJvdmlkZXInLgorIworIyAgIElmIHlvdSBhbHNvIG1ha2UgdGhpcyBmaWxlIGV4ZWN1dGFibGUsIGFuZCByZXBsYWNlIHRoZSBmaXJzdCBsaW5lCisjICAgd2l0aCBqdXN0ICIjIS9iaW4vc2giLCB0aGUgY29tbWFuZHMgYmVsb3cgd2lsbCBiZSBleGVjdXRlZCBpbnN0ZWFkLgorIworCisjIFRoZSBsb2NhdGlvbiBvZiB0aGUgcHBwIGRhZW1vbiBpdHNlbGYgKHNob3VsZG4ndCBuZWVkIHRvIGJlIGNoYW5nZWQpCitQUFBEPS91c3Ivc2Jpbi9wcHBkCisKKyMgVGhlIGRlZmF1bHQgcHJvdmlkZXIgdG8gY29ubmVjdCB0bworJFBQUEQgY2FsbCBwcm92aWRlcgorCisjIEFkZGl0aW9uYWwgY29ubmVjdGlvbnMsIHdoaWNoIHdvdWxkIGp1c3QgdXNlIHNldHRpbmdzIGZyb20KKyMgL2V0Yy9wcHAvb3B0aW9ucy48dHR5PgorIyRQUFBEIHR0eVMwCisjJFBQUEQgdHR5UzEKKyMkUFBQRCB0dHlTMgorIyRQUFBEIHR0eVMzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcHBkLXJlc29sdi12YXJydW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcHBkLXJlc29sdi12YXJydW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcyNDE0ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BwcGQtcmVzb2x2LXZhcnJ1bi5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitUaGUgcGF0Y2ggY29tZXMgZnJvbSBPcGVuRW1iZWRkZWQKK1JlYmFzZWQgZm9yIHBwcC0yLjQuNS4gRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworZGlmZiAtcnVOIHBwcC0yLjQuNS1vcmlnL3BwcGQvaXBjcC5jIHBwcC0yLjQuNS9wcHBkL2lwY3AuYworLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvaXBjcC5jCTIwMTAtMDYtMzAgMTU6NTE6MTIuMDUwMTY2Mzk4ICswODAwCisrKysgcHBwLTIuNC41L3BwcGQvaXBjcC5jCTIwMTAtMDYtMzAgMTc6MDI6MzMuOTMwMzkzMjgzICswODAwCitAQCAtNTUsNiArNTUsOCBAQAorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrI2luY2x1ZGUgPHVuaXN0ZC5oPgorIAorICNpbmNsdWRlICJwcHBkLmgiCisgI2luY2x1ZGUgImZzbS5oIgorQEAgLTIwOTUsNiArMjA5NywxNCBAQAorICAgICB1X2ludDMyX3QgcGVlcmRuczEsIHBlZXJkbnMyOworIHsKKyAgICAgRklMRSAqZjsKKysgICAgc3RydWN0IHN0YXQgZGlyaW5mbzsKKysKKysgICAgaWYoc3RhdChfUEFUSF9PVVRESVIsICZkaXJpbmZvKSkgeworKyAgICAgICAgaWYobWtkaXIoX1BBVEhfT1VURElSLCAwNzc1KSkgeworKyAgICAgICAgICAgIGVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAlczogJW0iLCBfUEFUSF9PVVRESVIpOworKyAgICAgICAgICAgIHJldHVybjsKKysgICAgICAgIH0KKysgICAgfQorIAorICAgICBmID0gZm9wZW4oX1BBVEhfUkVTT0xWLCAidyIpOworICAgICBpZiAoZiA9PSBOVUxMKSB7CitkaWZmIC1ydU4gcHBwLTIuNC41LW9yaWcvcHBwZC9wYXRobmFtZXMuaCBwcHAtMi40LjUvcHBwZC9wYXRobmFtZXMuaAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvcGF0aG5hbWVzLmgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNDM2ODIwNjMgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9wYXRobmFtZXMuaAkyMDEwLTA2LTMwIDE3OjAzOjIwLjU5NDM3MTA1NSArMDgwMAorQEAgLTMwLDcgKzMwLDggQEAKKyAjZGVmaW5lIF9QQVRIX1RUWU9QVAkgX1JPT1RfUEFUSCAiL2V0Yy9wcHAvb3B0aW9ucy4iCisgI2RlZmluZSBfUEFUSF9DT05ORVJSUwkgX1JPT1RfUEFUSCAiL2V0Yy9wcHAvY29ubmVjdC1lcnJvcnMiCisgI2RlZmluZSBfUEFUSF9QRUVSRklMRVMJIF9ST09UX1BBVEggIi9ldGMvcHBwL3BlZXJzLyIKKy0jZGVmaW5lIF9QQVRIX1JFU09MVgkgX1JPT1RfUEFUSCAiL2V0Yy9wcHAvcmVzb2x2LmNvbmYiCisrI2RlZmluZSBfUEFUSF9PVVRESVIJX1JPT1RfUEFUSCBfUEFUSF9WQVJSVU4gIi9wcHAiCisrI2RlZmluZSBfUEFUSF9SRVNPTFYJX1BBVEhfT1VURElSICIvcmVzb2x2LmNvbmYiCisgCisgI2RlZmluZSBfUEFUSF9VU0VST1BUCSAiLnBwcHJjIgorICNkZWZpbmUJX1BBVEhfUFNFVURPTllNCSAiLnBwcF9wc2V1ZG9ueW0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcm92aWRlciBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3Byb3ZpZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NGQ3MWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcm92aWRlcgpAQCAtMCwwICsxLDM1IEBACisjIGV4YW1wbGUgY29uZmlndXJhdGlvbiBmb3IgYSBkaWFsdXAgY29ubmVjdGlvbiBhdXRoZW50aWNhdGVkIHdpdGggUEFQIG9yIENIQVAKKyMKKyMgVGhpcyBpcyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHVzZWQgYnkgcG9uKDEpIGFuZCBwb2ZmKDEpLgorIyBTZWUgdGhlIG1hbnVhbCBwYWdlIHBwcGQoOCkgZm9yIGluZm9ybWF0aW9uIG9uIGFsbCB0aGUgb3B0aW9ucy4KKworIyBNVVNUIENIQU5HRTogcmVwbGFjZSBteXVzZXJuYW1lQHJlYWxtIHdpdGggdGhlIFBQUCBsb2dpbiBuYW1lIGdpdmVuIHRvCisjIHlvdXIgYnkgeW91ciBwcm92aWRlci4KKyMgVGhlcmUgc2hvdWxkIGJlIGEgbWF0Y2hpbmcgZW50cnkgd2l0aCB0aGUgcGFzc3dvcmQgaW4gL2V0Yy9wcHAvcGFwLXNlY3JldHMKKyMgYW5kL29yIC9ldGMvcHBwL2NoYXAtc2VjcmV0cy4KK3VzZXIgIm15dXNlcm5hbWVAcmVhbG0iCisKKyMgTVVTVCBDSEFOR0U6IHJlcGxhY2UgKioqKioqKiogd2l0aCB0aGUgcGhvbmUgbnVtYmVyIG9mIHlvdXIgcHJvdmlkZXIuCisjIFRoZSAvZXRjL2NoYXRzY3JpcHRzL3BhcCBjaGF0IHNjcmlwdCBtYXkgYmUgbW9kaWZpZWQgdG8gY2hhbmdlIHRoZQorIyBtb2RlbSBpbml0aWFsaXphdGlvbiBzdHJpbmcuCitjb25uZWN0ICIvdXNyL3NiaW4vY2hhdCAtdiAtZiAvZXRjL2NoYXRzY3JpcHRzL3BhcCAtVCAqKioqKioqKiIKKworIyBTZXJpYWwgZGV2aWNlIHRvIHdoaWNoIHRoZSBtb2RlbSBpcyBjb25uZWN0ZWQuCisvZGV2L21vZGVtCisKKyMgU3BlZWQgb2YgdGhlIHNlcmlhbCBsaW5lLgorMTE1MjAwCisKKyMgQXNzdW1lcyB0aGF0IHlvdXIgSVAgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgYnkgdGhlIElTUC4KK25vaXBkZWZhdWx0CisjIFRyeSB0byBnZXQgdGhlIG5hbWUgc2VydmVyIGFkZHJlc3NlcyBmcm9tIHRoZSBJU1AuCit1c2VwZWVyZG5zCisjIFVzZSB0aGlzIGNvbm5lY3Rpb24gYXMgdGhlIGRlZmF1bHQgcm91dGUuCitkZWZhdWx0cm91dGUKKworIyBNYWtlcyBwcHBkICJkaWFsIGFnYWluIiB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGxvc3QuCitwZXJzaXN0CisKKyMgRG8gbm90IGFzayB0aGUgcmVtb3RlIHRvIGF1dGhlbnRpY2F0ZS4KK25vYXV0aAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcF8yLjQuNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwXzIuNC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYzM4ZTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcF8yLjQuNy5iYgpAQCAtMCwwICsxLDk3IEBACitTVU1NQVJZID0gIlBvaW50LXRvLVBvaW50IFByb3RvY29sIChQUFApIHN1cHBvcnQiCitERVNDUklQVElPTiA9ICJwcHAgKFBhdWwncyBQUFAgUGFja2FnZSkgaXMgYW4gb3BlbiBzb3VyY2UgcGFja2FnZSB3aGljaCBpbXBsZW1lbnRzIFwKK3RoZSBQb2ludC10by1Qb2ludCBQcm90b2NvbCAoUFBQKSBvbiBMaW51eCBhbmQgU29sYXJpcyBzeXN0ZW1zLiIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorSE9NRVBBR0UgPSAiaHR0cDovL3NhbWJhLm9yZy9wcHAvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vcHBwLnNhbWJhLm9yZy9jZ2ktYmluL3BwcC1idWdzIgorREVQRU5EUyA9ICJsaWJwY2FwIgorTElDRU5TRSA9ICJCU0QgJiBHUEx2MisgJiBMR1BMdjIrICYgUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9wcHBkL2NjcC5jO2JlZ2lubGluZT0xO2VuZGxpbmU9Mjk7bWQ1PWUyYzQzZmU2ZTgxZmY3N2Q4N2RjOWMyOTBhNDI0ZGVhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3BwcGQvcGx1Z2lucy9wYXNzcHJvbXB0LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xMDttZDU9M2JjYmNkYmYwZTM2OWM5YTNlMGI4YzgyNzViMDY1ZDggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcHBwZC90ZGIuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTI3O21kNT00Y2EzYTk5OTFiMDExMDM4ZDA4NWQ2Njc1YWU3YzRlNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jaGF0L2NoYXQuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTE1O21kNT0wZDM3NGI4NTQ1ZWU1YzYyZDdhZmYxYWNiZDM4YWRkMiIKKworU1JDX1VSSSA9ICJodHRwOi8vcHBwLnNhbWJhLm9yZy9mdHAvcHBwL3BwcC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbWFrZWZpbGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2lmZGVmcm91dGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcHBwZC1yZXNvbHYtdmFycnVuLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21ha2VmaWxlLXJlbW92ZS1oYXJkLXVzci1yZWZlcmVuY2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcG9uIFwKKyAgICAgICAgICAgZmlsZTovL3BvZmYgXAorICAgICAgICAgICBmaWxlOi8vaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9pcC11cCBcCisgICAgICAgICAgIGZpbGU6Ly9pcC1kb3duIFwKKyAgICAgICAgICAgZmlsZTovLzA4c2V0dXBkbnMgXAorICAgICAgICAgICBmaWxlOi8vOTJyZW1vdmVkbnMgXAorICAgICAgICAgICBmaWxlOi8vY29wdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGFwIFwKKyAgICAgICAgICAgZmlsZTovL3BwcF9vbl9ib290IFwKKyAgICAgICAgICAgZmlsZTovL3Byb3ZpZGVyIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcHBwLUZpeC1jb21waWxhdGlvbi1lcnJvcnMtaW4tTWFrZWZpbGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcHBwQC5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1DVkUtMjAxNS0zMzEwLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjc4ODE4ZjQwZTZkMzNhMWQxZGU2OGExNTUxZjY1OTVhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAyZTBhM2RkM2U0Nzk5ZTMzMTAzZjcwZWM3ZGY3NTM0OGM4NTQwOTY2ZWU3Yzk0OGU0ZWQ4YTQyYmJjY2ZiMzAiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBzeXN0ZW1kCisKK1RBUkdFVF9DQ19BUkNIICs9ICIgJHtMREZMQUdTfSIKK0VYVFJBX09FTUFLRSA9ICJTVFJJUFBST0c9JHtTVFJJUH0gTUFORElSPSR7RH0ke2RhdGFkaXJ9L21hbi9tYW44IElOQ0RJUj0ke0R9JHtpbmNsdWRlZGlyfSBMSUJESVI9JHtEfSR7bGliZGlyfS9wcHBkLyR7UFZ9IEJJTkRJUj0ke0R9JHtzYmluZGlyfSIKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtc3RyaXAiCisKKyMgUGFja2FnZSBNYWtlZmlsZSBjb21wdXRlcyBDRkxBR1MsIHJlZmVyZW5jaW5nIENPUFRTLgorIyBUeXBpY2FsbHkgaGFyZC1jb2RlZCB0byAnLU8yIC1nJyBpbiB0aGUgTWFrZWZpbGUncy4KKyMKK0VYVFJBX09FTUFLRSArPSAnIENPUFRTPSIke0NGTEFHU30gLUkke1N9L2luY2x1ZGUiJworCitkb19jb25maWd1cmUgKCkgeworCW9lX3J1bmNvbmYKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCW1ha2UgaW5zdGFsbC1ldGNwcHAgRVRDRElSPSR7RH0vJHtzeXNjb25mZGlyfS9wcHAKKwlta2RpciAtcCAke0R9JHtiaW5kaXJ9LyAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9wcHAvaXAtdXAuZC8KKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9wcHAvaXAtZG93bi5kLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3BvbiAke0R9JHtiaW5kaXJ9L3BvbgorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3BvZmYgJHtEfSR7YmluZGlyfS9wb2ZmCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvcHBwCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaXAtdXAgJHtEfSR7c3lzY29uZmRpcn0vcHBwLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2lwLWRvd24gJHtEfSR7c3lzY29uZmRpcn0vcHBwLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9LzA4c2V0dXBkbnMgJHtEfSR7c3lzY29uZmRpcn0vcHBwL2lwLXVwLmQvCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vOTJyZW1vdmVkbnMgJHtEfSR7c3lzY29uZmRpcn0vcHBwL2lwLWRvd24uZC8KKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9jaGF0c2NyaXB0cworCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L3BwcC9wZWVycworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3BhcCAke0R9JHtzeXNjb25mZGlyfS9jaGF0c2NyaXB0cworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3BwcF9vbl9ib290ICR7RH0ke3N5c2NvbmZkaXJ9L3BwcC9wcHBfb25fYm9vdAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3Byb3ZpZGVyICR7RH0ke3N5c2NvbmZkaXJ9L3BwcC9wZWVycy9wcm92aWRlcgorCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9wcHBALnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgXAorCSAgICAgICAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9wcHBALnNlcnZpY2UKKwlybSAtcmYgJHtEfS8ke21hbmRpcn0vbWFuOC9tYW44CisJY2htb2QgdStzICR7RH0ke3NiaW5kaXJ9L3BwcGQKK30KKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vcHBwL3BhcC1zZWNyZXRzICR7c3lzY29uZmRpcn0vcHBwL2NoYXAtc2VjcmV0cyAke3N5c2NvbmZkaXJ9L3BwcC9vcHRpb25zIgorUEFDS0FHRVMgPSsgIiR7UE59LW9hICR7UE59LW9lICR7UE59LXJhZGl1cyAke1BOfS13aW5iaW5kICR7UE59LW1pbmNvbm4gJHtQTn0tcGFzc3dvcmQgJHtQTn0tbDJ0cCAke1BOfS10b29scyIKK0ZJTEVTXyR7UE59ICAgICAgICA9ICIke3N5c2NvbmZkaXJ9ICR7YmluZGlyfSAke3NiaW5kaXJ9L2NoYXQgJHtzYmluZGlyfS9wcHBkICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcHBwQC5zZXJ2aWNlIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcHBwZC8ke1BWfS8uZGVidWciCitGSUxFU18ke1BOfS1vYSAgICAgICA9ICIke2xpYmRpcn0vcHBwZC8ke1BWfS9wcHBvYXRtLnNvIgorRklMRVNfJHtQTn0tb2UgICAgICAgPSAiJHtzYmluZGlyfS9wcHBvZS1kaXNjb3ZlcnkgJHtsaWJkaXJ9L3BwcGQvJHtQVn0vcnAtcHBwb2Uuc28iCitGSUxFU18ke1BOfS1yYWRpdXMgICA9ICIke2xpYmRpcn0vcHBwZC8ke1BWfS9yYWRpdXMuc28gJHtsaWJkaXJ9L3BwcGQvJHtQVn0vcmFkYXR0ci5zbyAke2xpYmRpcn0vcHBwZC8ke1BWfS9yYWRyZWFsbXMuc28iCitGSUxFU18ke1BOfS13aW5iaW5kICA9ICIke2xpYmRpcn0vcHBwZC8ke1BWfS93aW5iaW5kLnNvIgorRklMRVNfJHtQTn0tbWluY29ubiAgPSAiJHtsaWJkaXJ9L3BwcGQvJHtQVn0vbWluY29ubi5zbyIKK0ZJTEVTXyR7UE59LXBhc3N3b3JkID0gIiR7bGliZGlyfS9wcHBkLyR7UFZ9L3Bhc3MqLnNvIgorRklMRVNfJHtQTn0tbDJ0cCAgICAgPSAiJHtsaWJkaXJ9L3BwcGQvJHtQVn0vKmwydHAuc28iCitGSUxFU18ke1BOfS10b29scyAgICA9ICIke3NiaW5kaXJ9L3BwcHN0YXRzICR7c2JpbmRpcn0vcHBwZHVtcCIKK1NVTU1BUllfJHtQTn0tb2EgICAgICAgPSAiUGx1Z2luIGZvciBQUFAgZm9yIFBQUC1vdmVyLUFUTSBzdXBwb3J0IgorU1VNTUFSWV8ke1BOfS1vZSAgICAgICA9ICJQbHVnaW4gZm9yIFBQUCBmb3IgUFBQLW92ZXItRXRoZXJuZXQgc3VwcG9ydCIKK1NVTU1BUllfJHtQTn0tcmFkaXVzICAgPSAiUGx1Z2luIGZvciBQUFAgZm9yIFJBRElVUyBzdXBwb3J0IgorU1VNTUFSWV8ke1BOfS13aW5iaW5kICA9ICJQbHVnaW4gZm9yIFBQUCB0byBhdXRoZW50aWNhdGUgYWdhaW5zdCBTYW1iYSBvciBXaW5kb3dzIgorU1VNTUFSWV8ke1BOfS1taW5jb25uICA9ICJQbHVnaW4gZm9yIFBQUCB0byBzZXQgYSBkZWxheSBiZWZvcmUgdGhlIGlkbGUgdGltZW91dCBhcHBsaWVzIgorU1VNTUFSWV8ke1BOfS1wYXNzd29yZCA9ICJQbHVnaW4gZm9yIFBQUCB0byBnZXQgcGFzc3dvcmRzIHZpYSBhIHBpcGUiCitTVU1NQVJZXyR7UE59LWwydHAgICAgID0gIlBsdWdpbiBmb3IgUFBQIGZvciBsMnRwIHN1cHBvcnQiCitTVU1NQVJZXyR7UE59LXRvb2xzICAgID0gIkFkZGl0aW9uYWwgdG9vbHMgZm9yIHRoZSBQUFAgcGFja2FnZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9yZXNvbHZjb25mL3Jlc29sdmNvbmYvOTlfcmVzb2x2Y29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9yZXNvbHZjb25mL3Jlc29sdmNvbmYvOTlfcmVzb2x2Y29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzkwZDc3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3Jlc29sdmNvbmYvcmVzb2x2Y29uZi85OV9yZXNvbHZjb25mCkBAIC0wLDAgKzEsNCBAQAorZCByb290IHJvb3QgMDc1NSAvdmFyL3J1bi9yZXNvbHZjb25mL2ludGVyZmFjZSBub25lCitmIHJvb3Qgcm9vdCAwNjQ0IC9ldGMvcmVzb2x2Y29uZi9ydW4vcmVzb2x2LmNvbmYgbm9uZQorZiByb290IHJvb3QgMDY0NCAvZXRjL3Jlc29sdmNvbmYvcnVuL2VuYWJsZS11cGRhdGVzIG5vbmUKK2wgcm9vdCByb290IDA2NDQgL2V0Yy9yZXNvbHYuY29uZiAvZXRjL3Jlc29sdmNvbmYvcnVuL3Jlc29sdi5jb25mCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcmVzb2x2Y29uZi9yZXNvbHZjb25mL2ZpeC1wYXRoLWZvci1idXN5Ym94LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3Jlc29sdmNvbmYvcmVzb2x2Y29uZi9maXgtcGF0aC1mb3ItYnVzeWJveC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWVhZDA3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3Jlc29sdmNvbmYvcmVzb2x2Y29uZi9maXgtcGF0aC1mb3ItYnVzeWJveC5wYXRjaApAQCAtMCwwICsxLDIwIEBACisKK2J1c3lib3ggaW5zdGFsbHMgcmVhZGxpbmsgaW50byAvdXNyL2Jpbiwgc28gZW5zdXJlIC91c3IvYmluCitpcyBpbiB0aGUgcGF0aC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IHJlc29sdmNvbmYtMS43Ni9ldGMvcmVzb2x2Y29uZi91cGRhdGUuZC9saWJjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcmVzb2x2Y29uZi0xLjc2Lm9yaWcvZXRjL3Jlc29sdmNvbmYvdXBkYXRlLmQvbGliYworKysrIHJlc29sdmNvbmYtMS43Ni9ldGMvcmVzb2x2Y29uZi91cGRhdGUuZC9saWJjCitAQCAtMTYsNyArMTYsNyBAQAorICMKKyAKKyBzZXQgLWUKKy1QQVRIPS9zYmluOi9iaW4KKytQQVRIPS9zYmluOi9iaW46L3Vzci9iaW4KKyAKKyBbIC14IC9saWIvcmVzb2x2Y29uZi9saXN0LXJlY29yZHMgXSB8fCBleGl0IDEKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9yZXNvbHZjb25mL3Jlc29sdmNvbmZfMS43Ny5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9yZXNvbHZjb25mL3Jlc29sdmNvbmZfMS43Ny5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTZiOWYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3Jlc29sdmNvbmYvcmVzb2x2Y29uZl8xLjc3LmJiCkBAIC0wLDAgKzEsNjMgQEAKK1NVTU1BUlkgPSAibmFtZSBzZXJ2ZXIgaW5mb3JtYXRpb24gaGFuZGxlciIKK0RFU0NSSVBUSU9OID0gIlJlc29sdmNvbmYgaXMgYSBmcmFtZXdvcmsgZm9yIGtlZXBpbmcgdHJhY2sgb2YgdGhlIHN5c3RlbSdzIFwKK2luZm9ybWF0aW9uIGFib3V0IGN1cnJlbnRseSBhdmFpbGFibGUgbmFtZXNlcnZlcnMuIEl0IHNldHMgXAoraXRzZWxmIHVwIGFzIHRoZSBpbnRlcm1lZGlhcnkgYmV0d2VlbiBwcm9ncmFtcyB0aGF0IHN1cHBseSBcCituYW1lc2VydmVyIGluZm9ybWF0aW9uIGFuZCBwcm9ncmFtcyB0aGF0IG5lZWQgbmFtZXNlcnZlciBcCitpbmZvcm1hdGlvbi4iCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzkzYzA1NTBiZDMxNzNmNDUwNGIyY2JkODk5MWU1MGIiCitBVVRIT1IgPSAiVGhvbWFzIEhvb2QiCitIT01FUEFHRSA9ICJodHRwOi8vcGFja2FnZXMuZGViaWFuLm9yZy9yZXNvbHZjb25mIgorUkRFUEVORFNfJHtQTn0gPSAiYmFzaCIKKworU1JDX1VSSSA9ICJodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi8yMDE1MDUxMVQyMTQ3MThaL3Bvb2wvbWFpbi9yLyR7QlBOfS8ke0JQTn1fJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1wYXRoLWZvci1idXN5Ym94LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzk5X3Jlc29sdmNvbmYgXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjczNjJkNzY2ZTQ3YmZjMjUzNTAwZjQyYjMwMzMwZDlmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVhNmUyMWU4YmE2ODIyYTVmOTMwNzVjOGM4ZmU3OTc3ZTM0NzgwYmE1NTFhZjUxOTMwZDBiMzFmZGQ5OWFiNTYiCisKK2luaGVyaXQgYWxsYXJjaAorCitkb19jb21waWxlICgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS85OV9yZXNvbHZjb25mICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kCisJCWVjaG8gImQgL3J1bi8ke0JQTn0vaW50ZXJmYWNlIC0gLSAtIC0iIFwKKwkJICAgICA+ICR7RH0ke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQvcmVzb2x2Y29uZi5jb25mCisJZmkKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfbGliZGlyfS8ke0JQTn0KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9LyR7QlBOfQorCWxuIC1zbmYgJHtsb2NhbHN0YXRlZGlyfS9ydW4vJHtCUE59ICR7RH0ke3N5c2NvbmZkaXJ9LyR7QlBOfS9ydW4KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9ICR7RH0ke2Jhc2Vfc2JpbmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuOCAke0R9JHtkb2NkaXJ9LyR7UH0KKwljcCAtcFBSIGV0Yy8qICR7RH0ke3N5c2NvbmZkaXJ9LworCWNob3duIC1SIHJvb3Q6cm9vdCAke0R9JHtzeXNjb25mZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL3Jlc29sdmNvbmYgJHtEfSR7YmFzZV9zYmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2xpc3QtcmVjb3JkcyAke0R9JHtiYXNlX2xpYmRpcn0vJHtCUE59CisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vbmV0d29yay9pZi11cC5kCisJaW5zdGFsbCAtbSAwNzU1IGRlYmlhbi9yZXNvbHZjb25mLjAwMHJlc29sdmNvbmYuaWYtdXAgJHtEfS8ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtdXAuZC8wMDByZXNvbHZjb25mCisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1kb3duLmQKKwlpbnN0YWxsIC1tIDA3NTUgZGViaWFuL3Jlc29sdmNvbmYucmVzb2x2Y29uZi5pZi1kb3duICR7RH0vJHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLWRvd24uZC9yZXNvbHZjb25mCisJaW5zdGFsbCAtbSAwNjQ0IFJFQURNRSAke0R9JHtkb2NkaXJ9LyR7UH0vCisJaW5zdGFsbCAtbSAwNjQ0IG1hbi9yZXNvbHZjb25mLjggJHtEfSR7bWFuZGlyfS9tYW44LworfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWlmIFsgLXogIiREIiBdOyB0aGVuCisJCWlmIGNvbW1hbmQgLXYgc3lzdGVtZC10bXBmaWxlcyA+L2Rldi9udWxsOyB0aGVuCisJCQlzeXN0ZW1kLXRtcGZpbGVzIC0tY3JlYXRlICR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZC9yZXNvbHZjb25mLmNvbmYKKwkJZWxpZiBbIC1lICR7c3lzY29uZmRpcn0vaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIF07IHRoZW4KKwkJCSR7c3lzY29uZmRpcn0vaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIHVwZGF0ZQorCQlmaQorCWZpCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2Jhc2VfbGliZGlyfS8ke0JQTn0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvc29jYXQvc29jYXQvTWFrZWZpbGUuaW4tZml4LWZvci1wYXJhbGxlbC1idWlsZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9zb2NhdC9zb2NhdC9NYWtlZmlsZS5pbi1maXgtZm9yLXBhcmFsbGVsLWJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNGRiNjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvc29jYXQvc29jYXQvTWFrZWZpbGUuaW4tZml4LWZvci1wYXJhbGxlbC1idWlsZC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIGM2ZjAwODBiNTU2NzliNmU4YjVkMzMyZDZlMDVmZGNiZGExZTQwNjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgNCBNYXkgMjAxNSAwMDo1ODo0NyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZS5pbjogZml4IGZvciBwYXJhbGxlbCBidWlsZAorCitGaXhlZDoKK3ZzbnByaW50Zl9yLm86IGZpbGUgbm90IHJlY29nbml6ZWQ6IEZpbGUgdHJ1bmNhdGVkCitjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDMgZXhpdCBzdGF0dXMKK01ha2VmaWxlOjEyMjogcmVjaXBlIGZvciB0YXJnZXQgJ2ZpbGFuJyBmYWlsZWQKKworTGV0IGZpbGFuIGRlcGVuZCBvbiB2c25wcmludGZfci5vIGFuZCBzbnByaW50ZXJyLm8gdG8gZml4IHRoZSBpc3N1ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCBmMmE2ZWRiLi44OGI3ODRiIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMTE4LDcgKzExOCw3IEBAIFBST0NBTl9PQkpTPXByb2Nhbl9tYWluLm8gcHJvY2FuLm8gcHJvY2FuLWNkZWZzLm8gaG9zdGFuLm8gZXJyb3IubyBzeWNscy5vIHN5c3V0CisgcHJvY2FuOiAkKFBST0NBTl9PQkpTKQorIAkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQCAkKFBST0NBTl9PQkpTKSAkKENMSUJTKQorIAorLWZpbGFuOiBmaWxhbl9tYWluLm8gZmlsYW4ubyBmZG5hbWUubyBlcnJvci5vIHN5Y2xzLm8gc3lzdXRpbHMubyB1dGlscy5vCisrZmlsYW46IGZpbGFuX21haW4ubyBmaWxhbi5vIGZkbmFtZS5vIGVycm9yLm8gc3ljbHMubyBzeXN1dGlscy5vIHV0aWxzLm8gdnNucHJpbnRmX3IubyBzbnByaW50ZXJyLm8KKyAJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgZmlsYW5fbWFpbi5vIGZpbGFuLm8gZmRuYW1lLm8gZXJyb3IubyBzeWNscy5vIHN5c3V0aWxzLm8gdXRpbHMubyB2c25wcmludGZfci5vIHNucHJpbnRlcnIubyAkKENMSUJTKQorIAorIGxpYnhpby5hOiAkKFhJT09CSlMpICQoVVRMT0JKUykKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvc29jYXQvc29jYXRfMS43LjMuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9zb2NhdC9zb2NhdF8xLjcuMy4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1OGUwYTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvc29jYXQvc29jYXRfMS43LjMuMC5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIk11bHRpcHVycG9zZSByZWxheSBmb3IgYmlkaXJlY3Rpb25hbCBkYXRhIHRyYW5zZmVyIgorREVTQ1JJUFRJT04gPSAiU29jYXQgaXMgYSByZWxheSBmb3IgYmlkaXJlY3Rpb25hbCBkYXRhIFwKK3RyYW5zZmVyIGJldHdlZW4gdHdvIGluZGVwZW5kZW50IGRhdGEgY2hhbm5lbHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5kZXN0LXVucmVhY2gub3JnL3NvY2F0LyIKKworU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCisKK0RFUEVORFMgPSAib3BlbnNzbCByZWFkbGluZSIKKworTElDRU5TRSA9ICJHUEwtMi4wKy13aXRoLU9wZW5TU0wtZXhjZXB0aW9uIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0yNTc7ZW5kbGluZT0yODc7bWQ1PTMzOGMwNWVhZGQwMTM4NzJhYmIxZDZlMTk4ZTEwYTNmIgorCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5kZXN0LXVucmVhY2gub3JnL3NvY2F0L2Rvd25sb2FkL3NvY2F0LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUuaW4tZml4LWZvci1wYXJhbGxlbC1idWlsZC5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiNjA3ZWRiNjViYzZjNTdmNGE0M2YwNjI0NzUwNDI3NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwNzY3ZTg1MGMwMzI5YjlmZGY3MTFjNmNkNDY4NTY1Y2JiYjI4Nzg2YmExYThhMWNiZDU1MzFkNDAxNmIzZTA0IgorCitpbmhlcml0IGF1dG90b29scworCitFWFRSQV9BVVRPUkVDT05GICs9ICItLWV4Y2x1ZGU9YXV0b2hlYWRlciIKKworRVhUUkFfT0VDT05GICs9ICJhY19jdl9oYXZlX3pfbW9kaWZpZXI9eWVzIHNjX2N2X3N5c19jcmRseV9zaGlmdD05IFwKKyAgICAgICAgc2NfY3Zfc3lzX3RhYmRseV9zaGlmdD0xMSBzY19jdl9zeXNfY3NpemVfc2hpZnQ9NCBcCisgICAgICAgIGFjX2N2X2lzcGVlZF9vZmZzZXQ9MTMgXAorICAgICAgICBhY19jdl9oZWFkZXJfYnNkX2xpYnV0aWxfaD1ubyBcCisiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ0Y3Atd3JhcHBlcnMiCitQQUNLQUdFQ09ORklHW3RjcC13cmFwcGVyc10gPSAiLS1lbmFibGUtbGlid3JhcCwtLWRpc2FibGUtbGlid3JhcCx0Y3Atd3JhcHBlcnMiCisKK2RvX2luc3RhbGxfcHJlcGVuZCAoKSB7CisgICAgbWtkaXIgLXAgJHtEfSR7YmluZGlyfQorICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfSAke0R9JHttYW5kaXJ9L21hbjEKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9hdm9pZF9zdHJpcC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9hdm9pZF9zdHJpcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzRlMjQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzL2F2b2lkX3N0cmlwLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK3dpcmVsZXNzX3Rvb2xzOiBBdm9pZCBzdHJpcHBpbmcgaXdtdWx0aWNhbGwKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvdGhlcl0KKyAgVGhlIHJlbW92ZWQgY29kZSB3YXMgZnJvbSB1cHN0cmVhbS4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC11ciB3aXJlbGVzc190b29scy4yOS5vcmlnL01ha2VmaWxlIHdpcmVsZXNzX3Rvb2xzLjI5L01ha2VmaWxlCistLS0gd2lyZWxlc3NfdG9vbHMuMjkub3JpZy9NYWtlZmlsZQkyMDExLTA2LTE4IDExOjM1OjEyLjE4MzkwNzQ1MyAtMDUwMAorKysrIHdpcmVsZXNzX3Rvb2xzLjI5L01ha2VmaWxlCTIwMTEtMDYtMTggMTE6Mzg6MDkuOTk1OTA3OTg1IC0wNTAwCitAQCAtMTM1LDkgKzEzNSw4IEBACisgCisgbWFjYWRkcjogbWFjYWRkci5vICQoSVdMSUIpCisgCistIyBBbHdheXMgZG8gc3ltYm9sIHN0cmlwcGluZyBoZXJlCisgaXdtdWx0aWNhbGw6IGl3bXVsdGljYWxsLm8KKy0JJChDQykgJChMREZMQUdTKSAtV2wsLXMgJChYQ0ZMQUdTKSAtbyAkQCAkXiAkKExJQlMpCisrCSQoQ0MpICQoTERGTEFHUykgJChTVFJJUEZMQUdTKSAkKFhDRkxBR1MpIC1vICRAICReICQoTElCUykKKyAKKyAjIEl0J3MgYSBraW5kIG9mIG1hZ2ljLi4uCisgd2lyZWxlc3MuaDoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9sZGZsYWdzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzL2xkZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMwZDhjYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9sZGZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK3dpcmVsZXNzLXRvb2xzOiBSZW1vdmUgUUEgd2FybmluZzogTm8gR05VX0hBU0ggaW4gdGhlIGVsZiBiaW5hcnkKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvdGhlcl0KKyAgVXNlZnVsIHdpdGhpbiBiaXRiYWtlIGVudmlyb25tZW50IG9ubHkuCisKK1NpZ25lZC1vZmYtYnk6IE11aGFtbWFkIFNoYWtlZWwgPG11aGFtbWFkX3NoYWtlZWxAbWVudG9yLmNvbT4KKworLS0tCisgTWFrZWZpbGUgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSB3aXJlbGVzc190b29scy4yOS5vcmlnL01ha2VmaWxlCisrKysgd2lyZWxlc3NfdG9vbHMuMjkvTWFrZWZpbGUKK0BAIC0xNDQsNyArMTQ0LDcgQEAgd2lyZWxlc3MuaDoKKyAKKyAjIENvbXBpbGF0aW9uIG9mIHRoZSBkeW5hbWljIGxpYnJhcnkKKyAkKERZTkFNSUMpOiAkKE9CSlM6Lm89LnNvKQorLQkkKENDKSAtc2hhcmVkIC1vICRAIC1XbCwtc29uYW1lLCRAICQoU1RSSVBGTEFHUykgJChMSUJTKSAtbGMgJF4KKysJJChDQykgLXNoYXJlZCAtbyAkQCAtV2wsLXNvbmFtZSwkQCAkKExERkxBR1MpICQoU1RSSVBGTEFHUykgJChMSUJTKSAtbGMgJF4KKyAKKyAjIENvbXBpbGF0aW9uIG9mIHRoZSBzdGF0aWMgbGlicmFyeQorICQoU1RBVElDKTogJChPQkpTOi5vPS5zbykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9tYW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvbWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNzU3ZGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvbWFuLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IHdpcmVsZXNzX3Rvb2xzLjMwL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2lyZWxlc3NfdG9vbHMuMzAub3JpZy9NYWtlZmlsZQkyMDE0LTAyLTAxIDAwOjIxOjA0LjE0ODQ2MzM4MiAtMDgwMAorKysrIHdpcmVsZXNzX3Rvb2xzLjMwL01ha2VmaWxlCTIwMTQtMDItMDEgMDA6MjM6MzUuNDQ4MDcyMjc5IC0wODAwCitAQCAtNzYsNyArNzYsNyBAQAorIElOU1RBTExfRElSPSAkKFBSRUZJWCkvc2JpbgorIElOU1RBTExfTElCPSAkKFBSRUZJWCkvbGliCisgSU5TVEFMTF9JTkM9ICQoUFJFRklYKS9pbmNsdWRlCistSU5TVEFMTF9NQU49ICQoUFJFRklYKS9tYW4KKytJTlNUQUxMX01BTj0gJChQUkVGSVgpL3NoYXJlL21hbgorIAorICMgVmFyaW91cyBjb21tYW5kcworIFJNID0gcm0gLWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTIyYzNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzL3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1doZW4gL2V0Yy9sZC5zby5jYWNoZSBpcyB3cml0ZWFibGUgYnkgdXNlciBydW5uaW5nIGJpdGJha2UgdGhlbiBpdCBjcmVhdGVzIGludmFsaWQgY2FjaGUgCisoaW4gbXkgY2FzZSBsaWJzdGRjKysuc28gY2Fubm90IGJlIGZvdW5kIGFmdGVyIGJ1aWxkaW5nIHpsaWIoLW5hdGl2ZSkgYW5kIEkgaGF2ZSB0byBjYWxsIAordG91Y2ggKi9saWJzdGRjKysuc28gJiYgL3NiaW4vbGRjb25maWcgdG8gZml4IGl0LgorCitTbyByZW1vdmUgbGRjb25maWcgY2FsbCBmcm9tIG1ha2UgaW5zdGFsbC1saWJzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitkaWZmIC11TnIgd2lyZWxlc3NfdG9vbHMuMjkub3JpZy9NYWtlZmlsZSB3aXJlbGVzc190b29scy4yOS9NYWtlZmlsZQorLS0tIHdpcmVsZXNzX3Rvb2xzLjI5Lm9yaWcvTWFrZWZpbGUJMjAwNy0wOS0xOCAwMTo1Njo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyB3aXJlbGVzc190b29scy4yOS9NYWtlZmlsZQkyMDEyLTAyLTE1IDIwOjQ2OjQxLjc4MDc2MzUxNCArMDEwMAorQEAgLTE2Myw3ICsxNjMsNiBAQAorIAlpbnN0YWxsIC1tIDc1NSAkKERZTkFNSUMpICQoSU5TVEFMTF9MSUIpCisgCWxuIC1zZm4gJChEWU5BTUlDKSAkKElOU1RBTExfTElCKS8kKERZTkFNSUNfTElOSykKKyAJQGVjaG8gIioqKiBEb24ndCBmb3JnZXQgdG8gYWRkICQoSU5TVEFMTF9MSUIpIHRvIC9ldGMvbGQuc28uY29uZiwgYW5kIHJ1biBsZGNvbmZpZyBhcyByb290LiAqKioiCistCUAkKExEQ09ORklHKSB8fCBlY2hvICIqKiogQ291bGQgbm90IHJ1biBsZGNvbmZpZyAhICoqKiIKKyAKKyAjIEluc3RhbGwgdGhlIHN0YXRpYyBsaWJyYXJ5CisgaW5zdGFsbC1zdGF0aWM6OiAkKFNUQVRJQykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy5pZi1wcmUtdXAgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMuaWYtcHJlLXVwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI1MThhNWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMuaWYtcHJlLXVwCkBAIC0wLDAgKzEsMTIyIEBACisjIS9iaW4vc2gKKworY2FzZSAiJE1FVEhPRCIgaW4gbG9vcGJhY2spIGV4aXQgMCA7OyBlc2FjCisKK0lXQ09ORklHPS9zYmluL2l3Y29uZmlnCitJV1BSSVY9L3NiaW4vaXdwcml2CisKK2lmIFsgISAteCAkSVdDT05GSUcgXTsgdGhlbgorICBleGl0IDAKK2ZpCisKKyMgRGV0ZWN0IGFuZCBkbyBub3RoaW5nIGZvciBsaW51eC13bGFuLW5nIGludGVyZmFjZXM7CisjIHdoaWNoIGFyZSBjb25maWd1cmVkIGJ5IHRoaWVyIG93biBpZi1wcmUtdXAgc2NyaXB0LgoraWYgWyAtbiAiJElGX1dJUkVMRVNTX1RZUEUiIC1hICIkSUZfV0lSRUxFU1NfVFlQRSIgPSAid2xhbi1uZyIgXTsgdGhlbgorICBleGl0IDAKK2ZpCisKK2lmIFsgLW4gIiRJRl9ORUVEU19SRVNFVCIgXTsgdGhlbgorICAkSVdQUklWICIkSUZBQ0UiIHJlc2V0IDEKKyAgc2xlZXAgMQorZmkKKworaWYgWyAtbiAiJElGX05FRURTX0ZJUk1XQVJFIiBdOyB0aGVuCisgICRJRl9ORUVEU19GSVJNV0FSRSAiJElGQUNFIgorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX1NFTlMiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIHNlbnMgJElGX1dJUkVMRVNTX1NFTlMKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19SQVRFIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiByYXRlICRJRl9XSVJFTEVTU19SQVRFCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfUlRTIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBydHMgJElGX1dJUkVMRVNTX1JUUworZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX0ZSQUciIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIGZyYWcgJElGX1dJUkVMRVNTX0ZSQUcKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19QT1dFUiIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgcG93ZXIgJElGX1dJUkVMRVNTX1BPV0VSCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfUE9XRVJQRVJJT0QiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIHBvd2VyIHBlcmlvZCAkSUZfV0lSRUxFU1NfUE9XRVJQRVJJT0QKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19QT1dFUlRJTUVPVVQiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIHBvd2VyIHRpbWVvdXQgJElGX1dJUkVMRVNTX1BPV0VSVElNRU9VVAorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX1RYUE9XRVIiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIHR4cG93ZXIgJElGX1dJUkVMRVNTX1RYUE9XRVIKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19SRVRSWSIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgcmV0cnkgJElGX1dJUkVMRVNTX1JFVFJZCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfTklDSyIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgbmljayAiJElGX1dJUkVMRVNTX05JQ0siCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfTldJRCIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgbndpZCAiJElGX1dJUkVMRVNTX05XSUQiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfRU5DIiBdOyB0aGVuCisgIGV2YWwgJElXQ09ORklHICIkSUZBQ0UiIGVuYyAkSUZfV0lSRUxFU1NfRU5DCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfS0VZIiBdOyB0aGVuCisgIGV2YWwgJElXQ09ORklHICIkSUZBQ0UiIGtleSAkSUZfV0lSRUxFU1NfS0VZCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfS0VZMSIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIga2V5IFsxXSAiJElGX1dJUkVMRVNTX0tFWTEiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfS0VZMiIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIga2V5IFsyXSAiJElGX1dJUkVMRVNTX0tFWTIiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfS0VZMyIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIga2V5IFszXSAiJElGX1dJUkVMRVNTX0tFWTMiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfS0VZNCIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIga2V5IFs0XSAiJElGX1dJUkVMRVNTX0tFWTQiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfREVGQVVMVEtFWSIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIga2V5IFsiJElGX1dJUkVMRVNTX0RFRkFVTFRLRVkiXQorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX0tFWU1PREUiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIGtleSAiJElGX1dJUkVMRVNTX0tFWU1PREUiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfTU9ERSIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgbW9kZSAkSUZfV0lSRUxFU1NfTU9ERQorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX0ZSRVEiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIGZyZXEgJElGX1dJUkVMRVNTX0ZSRVEKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19DSEFOTkVMIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBjaGFubmVsICRJRl9XSVJFTEVTU19DSEFOTkVMCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfRVNTSUQiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIGVzc2lkICIkSUZfV0lSRUxFU1NfRVNTSUQiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfQ09NTUlUIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBjb21taXQKK2ZpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy96enotd2lyZWxlc3MuaWYtcHJlLXVwIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzL3p6ei13aXJlbGVzcy5pZi1wcmUtdXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM4ZTk1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy96enotd2lyZWxlc3MuaWYtcHJlLXVwCkBAIC0wLDAgKzEsMzQgQEAKKyMhL2Jpbi9zaAorIworIyAvZXRjL25ldHdvcmsvaWYtcHJlLXVwLmQvenp6LXdpcmVsZXNzCisjIGJ5IFN0ZWZhbiBUb21hbmVrIChzdGVmYW5AcGljby5ydWhyLmRlKQorCisKK0lXQ09ORklHPS9zYmluL2l3Y29uZmlnCitJRkNPTkZJRz0vc2Jpbi9pZmNvbmZpZworR1JFUD0vYmluL2dyZXAKK0xPR0dFUj0vdXNyL2Jpbi9sb2dnZXIKK1NMRUVQPS9iaW4vc2xlZXAKKworIyBIb3cgbG9uZyBkbyB3ZSB3YWl0IGZvciBhc3NvY2lhdGlvbj8KK1JFVFJJRVM9MTUKK1NMRUVQVElNRT0xCisKKyMgT25seSBzbGVlcCBpZiB3ZSB1c2UgREhDUCAoYWRkIG90aGVycyBtZXRob2RzIHNlcGVyYXRlZCBieSBzcGFjZXMpCitPTkxZX0ZPUj0ic3RhdGljIGRoY3AiCisKK2lmIFsgLXogIiRJRl9XSVJFTEVTU19UWVBFIiBdICYmIGVjaG8gIiRPTkxZX0ZPUiIgfCBncmVwIC1xICIkTUVUSE9EIiA7IHRoZW4KKwkkSUZDT05GSUcgJElGQUNFIHVwCisJJExPR0dFUiBDaGVja2luZyBmb3IgV0xBTiBhc3NvY2lhdGlvbi4uLgorCXdoaWxlICggWyAkUkVUUklFUyAtZ3QgMCBdICYmICgkSVdDT05GSUcgIiRJRkFDRSIgfCAkR1JFUCAtcSAiQWNjZXNzIFBvaW50OiBOb3QtQXNzb2NpYXRlZCIpICk7IGRvCisJCSRMT0dHRVIgTm8gYXNzb2NpYXRpb24geWV0LCAkUkVUUklFUyByZXRyaWVzIHVudGlsIHRpbWVvdXQKKwkJUkVUUklFUz0kKCgkUkVUUklFUy0xKSkKKwkJJFNMRUVQICRTTEVFUFRJTUUKKwlkb25lCisJCisJaWYgWyAkUkVUUklFUyAtZXEgMCBdOyB0aGVuCisJCSRMT0dHRVIgVGltZW91dCB3YWl0aW5nIGZvciBhc3NvY2lhdGlvbiwgY29udGludWluZyBhbnl3YXkuLi4KKwllbHNlCisJCSRMT0dHRVIgRm91bmQgYXNzb2NpYXRpb24hCisJZmkKK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHNfMzAucHJlOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29sc18zMC5wcmU5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZWNkZjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHNfMzAucHJlOS5iYgpAQCAtMCwwICsxLDU2IEBACitTVU1NQVJZID0gIlRvb2xzIGZvciB0aGUgTGludXggU3RhbmRhcmQgV2lyZWxlc3MgRXh0ZW5zaW9uIFN1YnN5c3RlbSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuaHBsLmhwLmNvbS9wZXJzb25hbC9KZWFuX1RvdXJyaWxoZXMvTGludXgvVG9vbHMuaHRtbCIKK0xJQ0VOU0UgPSAiR1BMdjIgJiAoTEdQTHYyLjEgfCBNUEwtMS4xIHwgQlNEKSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKwkJCWZpbGU6Ly9pd2NvbmZpZy5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTI7bWQ1PWNmNzEwZWIxNzk1YzM3NmViMTBlYTRmZjA0NjQ5Y2FmIFwKKwkJCWZpbGU6Ly9pd2V2ZW50LmM7YmVnaW5saW5lPTU5O2VuZGxpbmU9NzI7bWQ1PWQ2NmExMDAyNmQ0Mzk0ZjBhNWIxYzU1ODdiY2U0NTM3IFwKKwkJCWZpbGU6Ly9zYW1wbGVfZW5jLmM7YmVnaW5saW5lPTE7ZW5kbGluZT00O21kNT04MzgzNzJiZTA3ODc0MjYwYjU2NmJhZTJmNmVkMzNiNiIKK1NFQ1RJT04gPSAiYmFzZSIKK1BFID0gIjEiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5ocGwuaHAuY29tL3BlcnNvbmFsL0plYW5fVG91cnJpbGhlcy9MaW51eC93aXJlbGVzc190b29scy4ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vd2lyZWxlc3MtdG9vbHMuaWYtcHJlLXVwIFwKKyAgICAgICAgICAgZmlsZTovL3p6ei13aXJlbGVzcy5pZi1wcmUtdXAgXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLmxkY29uZmlnLmNhbGwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2F2b2lkX3N0cmlwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xkZmxhZ3MucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJjYTkxYmE3YzdlZmY5YmZmZjY5MjZiMWEzNGE0Njk3ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhYmQ5YzVjOThhYmYxZmRkMTE4OTJhYzJmOGE1NjczNzU0NGZlMTAxZTFiZTI3YzYyNDFhNTY0OTQ4ZjM0YzYzIgorCitTID0gIiR7V09SS0RJUn0vd2lyZWxlc3NfdG9vbHMuMzAiCisKK0NGTEFHUyA9KyAiLUkke1N9IgorRVhUUkFfT0VNQUtFID0gIi1lICdCVUlMRF9TSEFSRUQ9eScgXAorCQknSU5TVEFMTF9ESVI9JHtEfSR7YmFzZV9zYmluZGlyfScgXAorCQknSU5TVEFMTF9MSUI9JHtEfSR7bGliZGlyfScgXAorCQknSU5TVEFMTF9JTkM9JHtEfSR7aW5jbHVkZWRpcn0nIFwKKwkJJ0lOU1RBTExfTUFOPSR7RH0ke21hbmRpcn0nIgorCitkb19jb21waWxlKCkgeworCW9lX3J1bm1ha2UgYWxsIGxpYml3LmEKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIFBSRUZJWD0ke0R9IGluc3RhbGwtaXdtdWx0aWNhbGwgaW5zdGFsbC1keW5hbWljIGluc3RhbGwtbWFuIGluc3RhbGwtaGRyCisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSBpZnJlbmFtZSAke0R9JHtzYmluZGlyfS9pZnJlbmFtZQorCSMgRGlzYWJsZWQgYnkgUlAgLSAyMC84LzA4IC0gV2UgZG9uJ3Qgc2VlbSB0byBuZWVkL3VzZSB0aGVzZQorCSNpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtcHJlLXVwLmQKKwkjaW5zdGFsbCAke1dPUktESVJ9L3dpcmVsZXNzLXRvb2xzLmlmLXByZS11cCAke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXByZS11cC5kL3dpcmVsZXNzLXRvb2xzCisJI2luc3RhbGwgJHtXT1JLRElSfS96enotd2lyZWxlc3MuaWYtcHJlLXVwICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtcHJlLXVwLmQvenp6LXdpcmVsZXNzCit9CisKK1BBQ0tBR0VTID0gImxpYml3LWRiZyBpZnJlbmFtZS1kYmcgJHtQTn0tZGJnIFwKK2xpYml3IGxpYml3LWRldiBsaWJpdy1kb2MgaWZyZW5hbWUtZG9jIGlmcmVuYW1lICR7UE59ICR7UE59LWRvYyIKKworRklMRVNfbGliaXctZGJnID0gIiR7bGliZGlyfS8uZGVidWcvKi5zby4qIgorRklMRVNfaWZyZW5hbWUtZGJnID0gIiR7c2JpbmRpcn0vLmRlYnVnL2lmcmVuYW1lIgorRklMRVNfbGliaXcgPSAiJHtsaWJkaXJ9Lyouc28uKiIKK0ZJTEVTX2xpYml3LWRldiA9ICIke2xpYmRpcn0vKi5hICR7bGliZGlyfS8qLnNvICR7aW5jbHVkZWRpcn0iCitGSUxFU19saWJpdy1kb2MgPSAiJHttYW5kaXJ9L21hbjciCitGSUxFU19pZnJlbmFtZSA9ICIke3NiaW5kaXJ9L2lmcmVuYW1lIgorRklMRVNfaWZyZW5hbWUtZG9jID0gIiR7bWFuZGlyfS9tYW44L2lmcmVuYW1lLjggJHttYW5kaXJ9L21hbjUvaWZ0YWIuNSIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfSAke3NiaW5kaXJ9L2l3KiAke2Jhc2Vfc2JpbmRpcn0gJHtiYXNlX2JpbmRpcn0gJHtzeXNjb25mZGlyfS9uZXR3b3JrIgorRklMRVNfJHtQTn0tZG9jID0gIiR7bWFuZGlyfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLUFQLVdNTS1GaXgtaW50ZWdlci11bmRlcmZsb3ctaW4tV01NLUFjdGlvbi1mcmFtZS1wYXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1BUC1XTU0tRml4LWludGVnZXItdW5kZXJmbG93LWluLVdNTS1BY3Rpb24tZnJhbWUtcGFyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MjY3NGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1BUC1XTU0tRml4LWludGVnZXItdW5kZXJmbG93LWluLVdNTS1BY3Rpb24tZnJhbWUtcGFyLnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogRmFuIFhpbiA8ZmFuLnhpbkBqcC5mdWppdHN1LmNvbT4KKworRnJvbSBlZjU2NmE0ZDRmNzQwMjJlMWZkYjBhMmFkZGZlODFlNmRlOWY0YWFlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KK0RhdGU6IFdlZCwgMjkgQXByIDIwMTUgMDI6MjE6NTMgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gQVAgV01NOiBGaXggaW50ZWdlciB1bmRlcmZsb3cgaW4gV01NIEFjdGlvbiBmcmFtZSBwYXJzZXIKKworVGhlIGxlbmd0aCBvZiB0aGUgV01NIEFjdGlvbiBmcmFtZSB3YXMgbm90IHByb3Blcmx5IHZhbGlkYXRlZCBhbmQgdGhlCitsZW5ndGggb2YgdGhlIGluZm9ybWF0aW9uIGVsZW1lbnRzIChpbnQgbGVmdCkgY291bGQgZW5kIHVwIGJlaW5nCituZWdhdGl2ZS4gVGhpcyB3b3VsZCByZXN1bHQgaW4gcmVhZGluZyBzaWduaWZpY2FudGx5IHBhc3QgdGhlIHN0YWNrCitidWZmZXIgd2hpbGUgcGFyc2luZyB0aGUgSUVzIGluIGllZWU4MDJfMTFfcGFyc2VfZWxlbXMoKSBhbmQgd2hpbGUgZG9pbmcKK3NvLCByZXN1bHRpbmcgaW4gc2VnbWVudGF0aW9uIGZhdWx0LgorCitUaGlzIGNhbiByZXN1bHQgaW4gYW4gaW52YWxpZCBmcmFtZSBiZWluZyB1c2VkIGZvciBhIGRlbmlhbCBvZiBzZXJ2aWNlCithdHRhY2sgKGhvc3RhcGQgcHJvY2VzcyBraWxsZWQpIGFnYWluc3QgYW4gQVAgd2l0aCBhIGRyaXZlciB0aGF0IHVzZXMKK2hvc3RhcGQgZm9yIG1hbmFnZW1lbnQgZnJhbWUgcHJvY2Vzc2luZyAoZS5nLiwgYWxsIG1hYzgwMjExLWJhc2VkCitkcml2ZXJzKS4KKworVGhhbmtzIHRvIEtvc3R5YSBLb3J0Y2hpbnNreSBvZiBHb29nbGUgc2VjdXJpdHkgdGVhbSBmb3IgZGlzY292ZXJpbmcgYW5kCityZXBvcnRpbmcgdGhpcyBpc3N1ZS4KKworU2lnbmVkLW9mZi1ieTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKy0tLQorIHNyYy9hcC93bW0uYyB8IDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2FwL3dtbS5jIGIvc3JjL2FwL3dtbS5jCitpbmRleCA2ZDQxNzdjLi4zMTRlMjQ0IDEwMDY0NAorLS0tIGEvc3JjL2FwL3dtbS5jCisrKysgYi9zcmMvYXAvd21tLmMKK0BAIC0yNzQsNiArMjc0LDkgQEAgdm9pZCBob3N0YXBkX3dtbV9hY3Rpb24oc3RydWN0IGhvc3RhcGRfZGF0YSAqaGFwZCwKKyAJCXJldHVybjsKKyAJfQorIAorKwlpZiAobGVmdCA8IDApCisrCQlyZXR1cm47IC8qIG5vdCBhIHZhbGlkIFdNTSBBY3Rpb24gZnJhbWUgKi8KKysKKyAJLyogZXh0cmFjdCB0aGUgdHNwZWMgaW5mbyBlbGVtZW50ICovCisgCWlmIChpZWVlODAyXzExX3BhcnNlX2VsZW1zKHBvcywgbGVmdCwgJmVsZW1zLCAxKSA9PSBQYXJzZUZhaWxlZCkgeworIAkJaG9zdGFwZF9sb2dnZXIoaGFwZCwgbWdtdC0+c2EsIEhPU1RBUERfTU9EVUxFX0lFRUU4MDIxMSwKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDEtRUFQLXB3ZC1wZWVyLUZpeC1wYXlsb2FkLWxlbmd0aC12YWxpZGF0aW9uLWZvci1Db21taS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLUVBUC1wd2QtcGVlci1GaXgtcGF5bG9hZC1sZW5ndGgtdmFsaWRhdGlvbi1mb3ItQ29tbWkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJiYWZjOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLUVBUC1wd2QtcGVlci1GaXgtcGF5bG9hZC1sZW5ndGgtdmFsaWRhdGlvbi1mb3ItQ29tbWkucGF0Y2gKQEAgLTAsMCArMSw3NyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBGYW4gWGluIDxmYW4ueGluQGpwLmZ1aml0c3UuY29tPgorCitGcm9tIGRkMmYwNDNjOWM0M2QxNTY0OTRlMzNkN2NlMjJkYjk2ZTZlZjQyYzcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorRGF0ZTogRnJpLCAxIE1heSAyMDE1IDE2OjM3OjQ1ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMS81XSBFQVAtcHdkIHBlZXI6IEZpeCBwYXlsb2FkIGxlbmd0aCB2YWxpZGF0aW9uIGZvciBDb21taXQKKyBhbmQgQ29uZmlybQorCitUaGUgbGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBDb21taXQgYW5kIENvbmZpcm0gbWVzc2FnZSBwYXlsb2FkcyB3YXMgbm90CitjaGVja2VkIGJlZm9yZSByZWFkaW5nIHRoZW0uIFRoaXMgY291bGQgcmVzdWx0IGluIGEgYnVmZmVyIHJlYWQKK292ZXJmbG93IHdoZW4gcHJvY2Vzc2luZyBhbiBpbnZhbGlkIG1lc3NhZ2UuCisKK0ZpeCB0aGlzIGJ5IHZlcmlmeWluZyB0aGF0IHRoZSBwYXlsb2FkIGlzIG9mIGV4cGVjdGVkIGxlbmd0aCBiZWZvcmUKK3Byb2Nlc3NpbmcgaXQuIEluIGFkZGl0aW9uLCBlbmZvcmNlIGNvcnJlY3Qgc3RhdGUgdHJhbnNpdGlvbiBzZXF1ZW5jZSB0bworbWFrZSBzdXJlIHRoZXJlIGlzIG5vIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaWYgcmVjZWl2aW5nIGEgQ29tbWl0L0NvbmZpcm0KK21lc3NhZ2UgYmVmb3JlIHRoZSBwcmV2aW91cyBleGNoYW5nZXMgaGF2ZSBiZWVuIGNvbXBsZXRlZC4KKworVGhhbmtzIHRvIEtvc3R5YSBLb3J0Y2hpbnNreSBvZiBHb29nbGUgc2VjdXJpdHkgdGVhbSBmb3IgZGlzY292ZXJpbmcgYW5kCityZXBvcnRpbmcgdGhpcyBpc3N1ZS4KKworU2lnbmVkLW9mZi1ieTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKy0tLQorIHNyYy9lYXBfcGVlci9lYXBfcHdkLmMgfCAyOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvZWFwX3BlZXIvZWFwX3B3ZC5jIGIvc3JjL2VhcF9wZWVyL2VhcF9wd2QuYworaW5kZXggZjJiMDkyNi4uYTYyOTQzNyAxMDA2NDQKKy0tLSBhL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMKKysrKyBiL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMKK0BAIC0zNTUsNiArMzU1LDIzIEBAIGVhcF9wd2RfcGVyZm9ybV9jb21taXRfZXhjaGFuZ2Uoc3RydWN0IGVhcF9zbSAqc20sIHN0cnVjdCBlYXBfcHdkX2RhdGEgKmRhdGEsCisgCUJJR05VTSAqbWFzayA9IE5VTEwsICp4ID0gTlVMTCwgKnkgPSBOVUxMLCAqY29mYWN0b3IgPSBOVUxMOworIAl1MTYgb2Zmc2V0OworIAl1OCAqcHRyLCAqc2NhbGFyID0gTlVMTCwgKmVsZW1lbnQgPSBOVUxMOworKwlzaXplX3QgcHJpbWVfbGVuLCBvcmRlcl9sZW47CisrCisrCWlmIChkYXRhLT5zdGF0ZSAhPSBQV0RfQ29tbWl0X1JlcSkgeworKwkJcmV0LT5pZ25vcmUgPSBUUlVFOworKwkJZ290byBmaW47CisrCX0KKysKKysJcHJpbWVfbGVuID0gQk5fbnVtX2J5dGVzKGRhdGEtPmdycC0+cHJpbWUpOworKwlvcmRlcl9sZW4gPSBCTl9udW1fYnl0ZXMoZGF0YS0+Z3JwLT5vcmRlcik7CisrCisrCWlmIChwYXlsb2FkX2xlbiAhPSAyICogcHJpbWVfbGVuICsgb3JkZXJfbGVuKSB7CisrCQl3cGFfcHJpbnRmKE1TR19JTkZPLAorKwkJCSAgICJFQVAtcHdkOiBVbmV4cGVjdGVkIENvbW1pdCBwYXlsb2FkIGxlbmd0aCAldSAoZXhwZWN0ZWQgJXUpIiwKKysJCQkgICAodW5zaWduZWQgaW50KSBwYXlsb2FkX2xlbiwKKysJCQkgICAodW5zaWduZWQgaW50KSAoMiAqIHByaW1lX2xlbiArIG9yZGVyX2xlbikpOworKwkJZ290byBmaW47CisrCX0KKyAKKyAJaWYgKCgoZGF0YS0+cHJpdmF0ZV92YWx1ZSA9IEJOX25ldygpKSA9PSBOVUxMKSB8fAorIAkgICAgKChkYXRhLT5teV9lbGVtZW50ID0gRUNfUE9JTlRfbmV3KGRhdGEtPmdycC0+Z3JvdXApKSA9PSBOVUxMKSB8fAorQEAgLTU1NCw2ICs1NzEsMTggQEAgZWFwX3B3ZF9wZXJmb3JtX2NvbmZpcm1fZXhjaGFuZ2Uoc3RydWN0IGVhcF9zbSAqc20sIHN0cnVjdCBlYXBfcHdkX2RhdGEgKmRhdGEsCisgCXU4IGNvbmZbU0hBMjU2X01BQ19MRU5dLCAqY3J1ZnQgPSBOVUxMLCAqcHRyOworIAlpbnQgb2Zmc2V0OworIAorKwlpZiAoZGF0YS0+c3RhdGUgIT0gUFdEX0NvbmZpcm1fUmVxKSB7CisrCQlyZXQtPmlnbm9yZSA9IFRSVUU7CisrCQlnb3RvIGZpbjsKKysJfQorKworKwlpZiAocGF5bG9hZF9sZW4gIT0gU0hBMjU2X01BQ19MRU4pIHsKKysJCXdwYV9wcmludGYoTVNHX0lORk8sCisrCQkJICAgIkVBUC1wd2Q6IFVuZXhwZWN0ZWQgQ29uZmlybSBwYXlsb2FkIGxlbmd0aCAldSAoZXhwZWN0ZWQgJXUpIiwKKysJCQkgICAodW5zaWduZWQgaW50KSBwYXlsb2FkX2xlbiwgU0hBMjU2X01BQ19MRU4pOworKwkJZ290byBmaW47CisrCX0KKysKKyAJLyoKKyAJICogZmlyc3QgYnVpbGQgdXAgdGhlIGNpcGhlcnN1aXRlIHdoaWNoIGlzIGdyb3VwIHwgcmFuZG9tX2Z1bmN0aW9uIHwKKyAJICoJcHJmCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLVAyUC1WYWxpZGF0ZS1TU0lELWVsZW1lbnQtbGVuZ3RoLWJlZm9yZS1jb3B5aW5nLWl0LUMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1QMlAtVmFsaWRhdGUtU1NJRC1lbGVtZW50LWxlbmd0aC1iZWZvcmUtY29weWluZy1pdC1DLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMDhhOTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1QMlAtVmFsaWRhdGUtU1NJRC1lbGVtZW50LWxlbmd0aC1iZWZvcmUtY29weWluZy1pdC1DLnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0Zyb20gOWVkNGVlZTM0NWY4NWUzMDI1YzMzYzZlMjBhYTI1Njk2ZTM0MWNjZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvdW5pIE1hbGluZW4gPGpvdW5pQHFjYS5xdWFsY29tbS5jb20+CitEYXRlOiBUdWUsIDcgQXByIDIwMTUgMTE6MzI6MTEgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gUDJQOiBWYWxpZGF0ZSBTU0lEIGVsZW1lbnQgbGVuZ3RoIGJlZm9yZSBjb3B5aW5nIGl0CisgKENWRS0yMDE1LTE4NjMpCisKK1RoaXMgZml4ZXMgYSBwb3NzaWJsZSBtZW1jcHkgb3ZlcmZsb3cgZm9yIFAyUCBkZXYtPm9wZXJfc3NpZCBpbgorcDJwX2FkZF9kZXZpY2UoKS4gVGhlIGxlbmd0aCBwcm92aWRlZCBieSB0aGUgcGVlciBkZXZpY2UgKDAuLjI1NSBieXRlcykKK3dhcyB1c2VkIHdpdGhvdXQgcHJvcGVyIGJvdW5kcyBjaGVja2luZyBhbmQgdGhhdCBjb3VsZCBoYXZlIHJlc3VsdGVkIGluCithcmJpdHJhcnkgZGF0YSBvZiB1cCB0byAyMjMgYnl0ZXMgYmVpbmcgd3JpdHRlbiBiZXlvbmQgdGhlIGVuZCBvZiB0aGUKK2Rldi0+b3Blcl9zc2lkW10gYXJyYXkgKG9mIHdoaWNoIGFib3V0IDE1MCBieXRlcyB3b3VsZCBiZSBiZXlvbmQgdGhlCitoZWFwIGFsbG9jYXRpb24pIHdoZW4gcHJvY2Vzc2luZyBhIGNvcnJ1cHRlZCBtYW5hZ2VtZW50IGZyYW1lIGZvciBQMlAKK3BlZXIgZGlzY292ZXJ5IHB1cnBvc2VzLgorCitUaGlzIGNvdWxkIHJlc3VsdCBpbiBjb3JydXB0ZWQgc3RhdGUgaW4gaGVhcCwgdW5leHBlY3RlZCBwcm9ncmFtCitiZWhhdmlvciBkdWUgdG8gY29ycnVwdGVkIFAyUCBwZWVyIGRldmljZSBpbmZvcm1hdGlvbiwgZGVuaWFsIG9mIHNlcnZpY2UKK2R1ZSB0byBwcm9jZXNzIGNyYXNoLCBleHBvc3VyZSBvZiBtZW1vcnkgY29udGVudHMgZHVyaW5nIEdPIE5lZ290aWF0aW9uLAorYW5kIHBvdGVudGlhbGx5IGFyYml0cmFyeSBjb2RlIGV4ZWN1dGlvbi4KKworVGhhbmtzIHRvIEdvb2dsZSBzZWN1cml0eSB0ZWFtIGZvciByZXBvcnRpbmcgdGhpcyBpc3N1ZSBhbmQgc21hcnQKK2hhcmR3YXJlIHJlc2VhcmNoIGdyb3VwIG9mIEFsaWJhYmEgc2VjdXJpdHkgdGVhbSBmb3IgZGlzY292ZXJpbmcgaXQuCisKK1NpZ25lZC1vZmYtYnk6IEpvdW5pIE1hbGluZW4gPGpvdW5pQHFjYS5xdWFsY29tbS5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogWXVlIFRhbyA8eXVlLnRhb0B3aW5kcml2ZXIuY29tPgorCistLS0KKyBzcmMvcDJwL3AycC5jIHwgICAgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9zcmMvcDJwL3AycC5jIGIvc3JjL3AycC9wMnAuYworaW5kZXggZjU4NGZhZS4uYTQ1ZmU3MyAxMDA2NDQKKy0tLSBhL3NyYy9wMnAvcDJwLmMKKysrKyBiL3NyYy9wMnAvcDJwLmMKK0BAIC03NzgsNiArNzc4LDcgQEAgaW50IHAycF9hZGRfZGV2aWNlKHN0cnVjdCBwMnBfZGF0YSAqcDJwLCBjb25zdCB1OCAqYWRkciwgaW50IGZyZXEsCisgCWlmIChvc19tZW1jbXAoYWRkciwgcDJwX2Rldl9hZGRyLCBFVEhfQUxFTikgIT0gMCkKKyAJCW9zX21lbWNweShkZXYtPmludGVyZmFjZV9hZGRyLCBhZGRyLCBFVEhfQUxFTik7CisgCWlmIChtc2cuc3NpZCAmJgorKwkgICAgbXNnLnNzaWRbMV0gPD0gc2l6ZW9mKGRldi0+b3Blcl9zc2lkKSAmJgorIAkgICAgKG1zZy5zc2lkWzFdICE9IFAyUF9XSUxEQ0FSRF9TU0lEX0xFTiB8fAorIAkgICAgIG9zX21lbWNtcChtc2cuc3NpZCArIDIsIFAyUF9XSUxEQ0FSRF9TU0lELCBQMlBfV0lMRENBUkRfU1NJRF9MRU4pCisgCSAgICAgIT0gMCkpIHsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1XUFMtRml4LUhUVFAtY2h1bmtlZC10cmFuc2Zlci1lbmNvZGluZy1wYXJzZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1XUFMtRml4LUhUVFAtY2h1bmtlZC10cmFuc2Zlci1lbmNvZGluZy1wYXJzZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU2OGVhMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLVdQUy1GaXgtSFRUUC1jaHVua2VkLXRyYW5zZmVyLWVuY29kaW5nLXBhcnNlci5wYXRjaApAQCAtMCwwICsxLDUzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEZhbiBYaW4gPGZhbi54aW5AanAuZnVqaXRzdS5jb20+CisKK0Zyb20gNWFjZDIzZjQ1ODFkYTU4NjgzZjNjZjVlMzZjYjcxYmJlNDA3MGJkNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CitEYXRlOiBUdWUsIDI4IEFwciAyMDE1IDE3OjA4OjMzICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFdQUzogRml4IEhUVFAgY2h1bmtlZCB0cmFuc2ZlciBlbmNvZGluZyBwYXJzZXIKKworc3RydG91bCgpIHJldHVybiB2YWx1ZSBtYXkgZW5kIHVwIG92ZXJmbG93aW5nIHRoZSBpbnQgaC0+Y2h1bmtfc2l6ZSBhbmQKK3Jlc3VsdGluZyBpbiBhIG5lZ2F0aXZlIHZhbHVlIHRvIGJlIHN0b3JlZCBhcyB0aGUgY2h1bmtfc2l6ZS4gVGhpcyBjb3VsZAorcmVzdWx0IGluIHRoZSBmb2xsb3dpbmcgbWVtY3B5IG9wZXJhdGlvbiB1c2luZyBhIHZlcnkgbGFyZ2UgbGVuZ3RoCithcmd1bWVudCB3aGljaCB3b3VsZCByZXN1bHQgaW4gYSBidWZmZXIgb3ZlcmZsb3cgYW5kIHNlZ21lbnRhdGlvbiBmYXVsdC4KKworVGhpcyBjb3VsZCBoYXZlIGJlZW4gdXNlZCB0byBjYXVzZSBhIGRlbmlhbCBzZXJ2aWNlIGJ5IGFueSBkZXZpY2UgdGhhdAoraGFzIGJlZW4gYXV0aG9yaXplZCBmb3IgbmV0d29yayBhY2Nlc3MgKGVpdGhlciB3aXJlbGVzcyBvciB3aXJlZCkuIFRoaXMKK3dvdWxkIGFmZmVjdCBib3RoIHRoZSBXUFMgVVBuUCBmdW5jdGlvbmFsaXR5IGluIGEgV1BTIEFQIChob3N0YXBkIHdpdGgKK3VwbnBfaWZhY2UgcGFyYW1ldGVyIHNldCBpbiB0aGUgY29uZmlndXJhdGlvbikgYW5kIFdQUyBFUgorKHdwYV9zdXBwbGljYW50IHdpdGggV1BTX0VSX1NUQVJUIGNvbnRyb2wgaW50ZXJmYWNlIGNvbW1hbmQgdXNlZCkuCisKK1ZhbGlkYXRlIHRoZSBwYXJzZWQgY2h1bmsgbGVuZ3RoIHZhbHVlIHRvIGF2b2lkIHRoaXMuIEluIGFkZGl0aW9uIHRvCityZWplY3RpbmcgbmVnYXRpdmUgdmFsdWVzLCB3ZSBjYW4gYWxzbyByZWplY3QgY2h1bmsgc2l6ZSB0aGF0IHdvdWxkIGJlCitsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBjb25maWd1cmVkIGJvZHkgbGVuZ3RoLgorCitUaGFua3MgdG8gS29zdHlhIEtvcnRjaGluc2t5IG9mIEdvb2dsZSBzZWN1cml0eSB0ZWFtIGZvciBkaXNjb3ZlcmluZyBhbmQKK3JlcG9ydGluZyB0aGlzIGlzc3VlLgorCitTaWduZWQtb2ZmLWJ5OiBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorLS0tCisgc3JjL3dwcy9odHRwcmVhZC5jIHwgNyArKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL3dwcy9odHRwcmVhZC5jIGIvc3JjL3dwcy9odHRwcmVhZC5jCitpbmRleCAyZjA4ZjM3Li5kMjg1NWUzIDEwMDY0NAorLS0tIGEvc3JjL3dwcy9odHRwcmVhZC5jCisrKysgYi9zcmMvd3BzL2h0dHByZWFkLmMKK0BAIC01MzMsNiArNTMzLDEzIEBAIHN0YXRpYyB2b2lkIGh0dHByZWFkX3JlYWRfaGFuZGxlcihpbnQgc2QsIHZvaWQgKmVsb29wX2N0eCwgdm9pZCAqc29ja19jdHgpCisgCQkJCQlpZiAoIWlzeGRpZ2l0KCpjYnApKQorIAkJCQkJCWdvdG8gYmFkOworIAkJCQkJaC0+Y2h1bmtfc2l6ZSA9IHN0cnRvdWwoY2JwLCBOVUxMLCAxNik7CisrCQkJCQlpZiAoaC0+Y2h1bmtfc2l6ZSA8IDAgfHwKKysJCQkJCSAgICBoLT5jaHVua19zaXplID4gaC0+bWF4X2J5dGVzKSB7CisrCQkJCQkJd3BhX3ByaW50ZihNU0dfREVCVUcsCisrCQkJCQkJCSAgICJodHRwcmVhZDogSW52YWxpZCBjaHVuayBzaXplICVkIiwKKysJCQkJCQkJICAgaC0+Y2h1bmtfc2l6ZSk7CisrCQkJCQkJZ290byBiYWQ7CisrCQkJCQl9CisgCQkJCQkvKiB0aHJvdyBhd2F5IGNodW5rIGhlYWRlcgorIAkJCQkJICogc28gd2UgaGF2ZSBvbmx5IHJlYWwgZGF0YQorIAkJCQkJICovCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAyLUVBUC1wd2Qtc2VydmVyLUZpeC1wYXlsb2FkLWxlbmd0aC12YWxpZGF0aW9uLWZvci1Db20ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMi1FQVAtcHdkLXNlcnZlci1GaXgtcGF5bG9hZC1sZW5ndGgtdmFsaWRhdGlvbi1mb3ItQ29tLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NzdjMmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMi1FQVAtcHdkLXNlcnZlci1GaXgtcGF5bG9hZC1sZW5ndGgtdmFsaWRhdGlvbi1mb3ItQ29tLnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogRmFuIFhpbiA8ZmFuLnhpbkBqcC5mdWppdHN1LmNvbT4KKworRnJvbSBlMjhhNThiZTI2MTg0YzJhMjNmODBiNDEwZTA5OTdlZjFiZDVkNTc4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KK0RhdGU6IEZyaSwgMSBNYXkgMjAxNSAxNjo0MDo0NCArMDMwMAorU3ViamVjdDogW1BBVENIIDIvNV0gRUFQLXB3ZCBzZXJ2ZXI6IEZpeCBwYXlsb2FkIGxlbmd0aCB2YWxpZGF0aW9uIGZvciBDb21taXQKKyBhbmQgQ29uZmlybQorCitUaGUgbGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBDb21taXQgYW5kIENvbmZpcm0gbWVzc2FnZSBwYXlsb2FkcyB3YXMgbm90CitjaGVja2VkIGJlZm9yZSByZWFkaW5nIHRoZW0uIFRoaXMgY291bGQgcmVzdWx0IGluIGEgYnVmZmVyIHJlYWQKK292ZXJmbG93IHdoZW4gcHJvY2Vzc2luZyBhbiBpbnZhbGlkIG1lc3NhZ2UuCisKK0ZpeCB0aGlzIGJ5IHZlcmlmeWluZyB0aGF0IHRoZSBwYXlsb2FkIGlzIG9mIGV4cGVjdGVkIGxlbmd0aCBiZWZvcmUKK3Byb2Nlc3NpbmcgaXQuIEluIGFkZGl0aW9uLCBlbmZvcmNlIGNvcnJlY3Qgc3RhdGUgdHJhbnNpdGlvbiBzZXF1ZW5jZSB0bworbWFrZSBzdXJlIHRoZXJlIGlzIG5vIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaWYgcmVjZWl2aW5nIGEgQ29tbWl0L0NvbmZpcm0KK21lc3NhZ2UgYmVmb3JlIHRoZSBwcmV2aW91cyBleGNoYW5nZXMgaGF2ZSBiZWVuIGNvbXBsZXRlZC4KKworVGhhbmtzIHRvIEtvc3R5YSBLb3J0Y2hpbnNreSBvZiBHb29nbGUgc2VjdXJpdHkgdGVhbSBmb3IgZGlzY292ZXJpbmcgYW5kCityZXBvcnRpbmcgdGhpcyBpc3N1ZS4KKworU2lnbmVkLW9mZi1ieTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKy0tLQorIHNyYy9lYXBfc2VydmVyL2VhcF9zZXJ2ZXJfcHdkLmMgfCAxOSArKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9lYXBfc2VydmVyL2VhcF9zZXJ2ZXJfcHdkLmMgYi9zcmMvZWFwX3NlcnZlci9lYXBfc2VydmVyX3B3ZC5jCitpbmRleCA2NmJkNWQyLi4zMTg5MTA1IDEwMDY0NAorLS0tIGEvc3JjL2VhcF9zZXJ2ZXIvZWFwX3NlcnZlcl9wd2QuYworKysrIGIvc3JjL2VhcF9zZXJ2ZXIvZWFwX3NlcnZlcl9wd2QuYworQEAgLTY1Niw5ICs2NTYsMjEgQEAgZWFwX3B3ZF9wcm9jZXNzX2NvbW1pdF9yZXNwKHN0cnVjdCBlYXBfc20gKnNtLCBzdHJ1Y3QgZWFwX3B3ZF9kYXRhICpkYXRhLAorIAlCSUdOVU0gKnggPSBOVUxMLCAqeSA9IE5VTEwsICpjb2ZhY3RvciA9IE5VTEw7CisgCUVDX1BPSU5UICpLID0gTlVMTCwgKnBvaW50ID0gTlVMTDsKKyAJaW50IHJlcyA9IDA7CisrCXNpemVfdCBwcmltZV9sZW4sIG9yZGVyX2xlbjsKKyAKKyAJd3BhX3ByaW50ZihNU0dfREVCVUcsICJFQVAtcHdkOiBSZWNlaXZlZCBjb21taXQgcmVzcG9uc2UiKTsKKyAKKysJcHJpbWVfbGVuID0gQk5fbnVtX2J5dGVzKGRhdGEtPmdycC0+cHJpbWUpOworKwlvcmRlcl9sZW4gPSBCTl9udW1fYnl0ZXMoZGF0YS0+Z3JwLT5vcmRlcik7CisrCisrCWlmIChwYXlsb2FkX2xlbiAhPSAyICogcHJpbWVfbGVuICsgb3JkZXJfbGVuKSB7CisrCQl3cGFfcHJpbnRmKE1TR19JTkZPLAorKwkJCSAgICJFQVAtcHdkOiBVbmV4cGVjdGVkIENvbW1pdCBwYXlsb2FkIGxlbmd0aCAldSAoZXhwZWN0ZWQgJXUpIiwKKysJCQkgICAodW5zaWduZWQgaW50KSBwYXlsb2FkX2xlbiwKKysJCQkgICAodW5zaWduZWQgaW50KSAoMiAqIHByaW1lX2xlbiArIG9yZGVyX2xlbikpOworKwkJZ290byBmaW47CisrCX0KKysKKyAJaWYgKCgoZGF0YS0+cGVlcl9zY2FsYXIgPSBCTl9uZXcoKSkgPT0gTlVMTCkgfHwKKyAJICAgICgoZGF0YS0+ayA9IEJOX25ldygpKSA9PSBOVUxMKSB8fAorIAkgICAgKChjb2ZhY3RvciA9IEJOX25ldygpKSA9PSBOVUxMKSB8fAorQEAgLTc3NCw2ICs3ODYsMTMgQEAgZWFwX3B3ZF9wcm9jZXNzX2NvbmZpcm1fcmVzcChzdHJ1Y3QgZWFwX3NtICpzbSwgc3RydWN0IGVhcF9wd2RfZGF0YSAqZGF0YSwKKyAJdTggY29uZltTSEEyNTZfTUFDX0xFTl0sICpjcnVmdCA9IE5VTEwsICpwdHI7CisgCWludCBvZmZzZXQ7CisgCisrCWlmIChwYXlsb2FkX2xlbiAhPSBTSEEyNTZfTUFDX0xFTikgeworKwkJd3BhX3ByaW50ZihNU0dfSU5GTywKKysJCQkgICAiRUFQLXB3ZDogVW5leHBlY3RlZCBDb25maXJtIHBheWxvYWQgbGVuZ3RoICV1IChleHBlY3RlZCAldSkiLAorKwkJCSAgICh1bnNpZ25lZCBpbnQpIHBheWxvYWRfbGVuLCBTSEEyNTZfTUFDX0xFTik7CisrCQlnb3RvIGZpbjsKKysJfQorKworIAkvKiBidWlsZCB1cCB0aGUgY2lwaGVyc3VpdGU6IGdyb3VwIHwgcmFuZG9tX2Z1bmN0aW9uIHwgcHJmICovCisgCWdycCA9IGh0b25zKGRhdGEtPmdyb3VwX251bSk7CisgCXB0ciA9ICh1OCAqKSAmY3M7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAzLUVBUC1wd2QtcGVlci1GaXgtVG90YWwtTGVuZ3RoLXBhcnNpbmctZm9yLWZyYWdtZW50LXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMy1FQVAtcHdkLXBlZXItRml4LVRvdGFsLUxlbmd0aC1wYXJzaW5nLWZvci1mcmFnbWVudC1yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NmNlNDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMy1FQVAtcHdkLXBlZXItRml4LVRvdGFsLUxlbmd0aC1wYXJzaW5nLWZvci1mcmFnbWVudC1yLnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogRmFuIFhpbiA8ZmFuLnhpbkBqcC5mdWppdHN1LmNvbT4KKworRnJvbSA0NzdjNzQzOTVhY2QwMTIzMzQwNDU3YmE2ZjE1YWIzNDVkNDIwMTZlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KK0RhdGU6IFNhdCwgMiBNYXkgMjAxNSAxOToyMzowNCArMDMwMAorU3ViamVjdDogW1BBVENIIDMvNV0gRUFQLXB3ZCBwZWVyOiBGaXggVG90YWwtTGVuZ3RoIHBhcnNpbmcgZm9yIGZyYWdtZW50CisgcmVhc3NlbWJseQorCitUaGUgcmVtYWluaW5nIG51bWJlciBvZiBieXRlcyBpbiB0aGUgbWVzc2FnZSBjb3VsZCBiZSBzbWFsbGVyIHRoYW4gdGhlCitUb3RhbC1MZW5ndGggZmllbGQgc2l6ZSwgc28gdGhlIGxlbmd0aCBuZWVkcyB0byBiZSBleHBsaWNpdGx5IGNoZWNrZWQKK3ByaW9yIHRvIHJlYWRpbmcgdGhlIGZpZWxkIGFuZCBkZWNyZW1lbnRpbmcgdGhlIGxlbiB2YXJpYWJsZS4gVGhpcyBjb3VsZAoraGF2ZSByZXN1bHRlZCBpbiB0aGUgcmVtYWluaW5nIGxlbmd0aCBiZWNvbWluZyBuZWdhdGl2ZSBhbmQgaW50ZXJwcmV0ZWQKK2FzIGEgaHVnZSBwb3NpdGl2ZSBpbnRlZ2VyLgorCitJbiBhZGRpdGlvbiwgY2hlY2sgdGhhdCB0aGVyZSBpcyBubyBhbHJlYWR5IHN0YXJ0ZWQgZnJhZ21lbnQgaW4gcHJvZ3Jlc3MKK2JlZm9yZSBhbGxvY2F0aW5nIGEgbmV3IGJ1ZmZlciBmb3IgcmVhc3NlbWJsaW5nIGZyYWdtZW50cy4gVGhpcyBhdm9pZCBhCitwb3RlbnRpYWwgbWVtb3J5IGxlYWsgd2hlbiBwcm9jZXNzaW5nIGludmFsaWQgbWVzc2FnZS4KKworU2lnbmVkLW9mZi1ieTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKy0tLQorIHNyYy9lYXBfcGVlci9lYXBfcHdkLmMgfCAxMiArKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2VhcF9wZWVyL2VhcF9wd2QuYyBiL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMKK2luZGV4IGE2Mjk0MzcuLjFkMjA3OWIgMTAwNjQ0CistLS0gYS9zcmMvZWFwX3BlZXIvZWFwX3B3ZC5jCisrKysgYi9zcmMvZWFwX3BlZXIvZWFwX3B3ZC5jCitAQCAtODY2LDExICs4NjYsMjMgQEAgZWFwX3B3ZF9wcm9jZXNzKHN0cnVjdCBlYXBfc20gKnNtLCB2b2lkICpwcml2LCBzdHJ1Y3QgZWFwX21ldGhvZF9yZXQgKnJldCwKKyAJICogaWYgaXQncyB0aGUgZmlyc3QgZnJhZ21lbnQgdGhlcmUnbGwgYmUgYSBsZW5ndGggZmllbGQKKyAJICovCisgCWlmIChFQVBfUFdEX0dFVF9MRU5HVEhfQklUKGxtX2V4Y2gpKSB7CisrCQlpZiAobGVuIDwgMikgeworKwkJCXdwYV9wcmludGYoTVNHX0RFQlVHLAorKwkJCQkgICAiRUFQLXB3ZDogRnJhbWUgdG9vIHNob3J0IHRvIGNvbnRhaW4gVG90YWwtTGVuZ3RoIGZpZWxkIik7CisrCQkJcmV0LT5pZ25vcmUgPSBUUlVFOworKwkJCXJldHVybiBOVUxMOworKwkJfQorIAkJdG90X2xlbiA9IFdQQV9HRVRfQkUxNihwb3MpOworIAkJd3BhX3ByaW50ZihNU0dfREVCVUcsICJFQVAtcHdkOiBJbmNvbWluZyBmcmFnbWVudHMgd2hvc2UgIgorIAkJCSAgICJ0b3RhbCBsZW5ndGggPSAlZCIsIHRvdF9sZW4pOworIAkJaWYgKHRvdF9sZW4gPiAxNTAwMCkKKyAJCQlyZXR1cm4gTlVMTDsKKysJCWlmIChkYXRhLT5pbmJ1ZikgeworKwkJCXdwYV9wcmludGYoTVNHX0RFQlVHLAorKwkJCQkgICAiRUFQLXB3ZDogVW5leHBlY3RlZCBuZXcgZnJhZ21lbnQgc3RhcnQgd2hlbiBwcmV2aW91cyBmcmFnbWVudCBpcyBzdGlsbCBpbiB1c2UiKTsKKysJCQlyZXQtPmlnbm9yZSA9IFRSVUU7CisrCQkJcmV0dXJuIE5VTEw7CisrCQl9CisgCQlkYXRhLT5pbmJ1ZiA9IHdwYWJ1Zl9hbGxvYyh0b3RfbGVuKTsKKyAJCWlmIChkYXRhLT5pbmJ1ZiA9PSBOVUxMKSB7CisgCQkJd3BhX3ByaW50ZihNU0dfSU5GTywgIk91dCBvZiBtZW1vcnkgdG8gYnVmZmVyICIKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDQtRUFQLXB3ZC1zZXJ2ZXItRml4LVRvdGFsLUxlbmd0aC1wYXJzaW5nLWZvci1mcmFnbWVudC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDA0LUVBUC1wd2Qtc2VydmVyLUZpeC1Ub3RhbC1MZW5ndGgtcGFyc2luZy1mb3ItZnJhZ21lbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRjMDJiNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDA0LUVBUC1wd2Qtc2VydmVyLUZpeC1Ub3RhbC1MZW5ndGgtcGFyc2luZy1mb3ItZnJhZ21lbnQucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBGYW4gWGluIDxmYW4ueGluQGpwLmZ1aml0c3UuY29tPgorCitGcm9tIDMwMzVjYzI4OTRlMDgzMTliOTA1YmQ2NTYxZThiZGRjOGMyZGI5ZmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorRGF0ZTogU2F0LCAyIE1heSAyMDE1IDE5OjI2OjA2ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggNC81XSBFQVAtcHdkIHNlcnZlcjogRml4IFRvdGFsLUxlbmd0aCBwYXJzaW5nIGZvciBmcmFnbWVudAorIHJlYXNzZW1ibHkKKworVGhlIHJlbWFpbmluZyBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIG1lc3NhZ2UgY291bGQgYmUgc21hbGxlciB0aGFuIHRoZQorVG90YWwtTGVuZ3RoIGZpZWxkIHNpemUsIHNvIHRoZSBsZW5ndGggbmVlZHMgdG8gYmUgZXhwbGljaXRseSBjaGVja2VkCitwcmlvciB0byByZWFkaW5nIHRoZSBmaWVsZCBhbmQgZGVjcmVtZW50aW5nIHRoZSBsZW4gdmFyaWFibGUuIFRoaXMgY291bGQKK2hhdmUgcmVzdWx0ZWQgaW4gdGhlIHJlbWFpbmluZyBsZW5ndGggYmVjb21pbmcgbmVnYXRpdmUgYW5kIGludGVycHJldGVkCithcyBhIGh1Z2UgcG9zaXRpdmUgaW50ZWdlci4KKworSW4gYWRkaXRpb24sIGNoZWNrIHRoYXQgdGhlcmUgaXMgbm8gYWxyZWFkeSBzdGFydGVkIGZyYWdtZW50IGluIHByb2dyZXNzCitiZWZvcmUgYWxsb2NhdGluZyBhIG5ldyBidWZmZXIgZm9yIHJlYXNzZW1ibGluZyBmcmFnbWVudHMuIFRoaXMgYXZvaWQgYQorcG90ZW50aWFsIG1lbW9yeSBsZWFrIHdoZW4gcHJvY2Vzc2luZyBpbnZhbGlkIG1lc3NhZ2UuCisKK1NpZ25lZC1vZmYtYnk6IEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CistLS0KKyBzcmMvZWFwX3NlcnZlci9lYXBfc2VydmVyX3B3ZC5jIHwgMTAgKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvZWFwX3NlcnZlci9lYXBfc2VydmVyX3B3ZC5jIGIvc3JjL2VhcF9zZXJ2ZXIvZWFwX3NlcnZlcl9wd2QuYworaW5kZXggMzE4OTEwNS4uMmJmYzNjMiAxMDA2NDQKKy0tLSBhL3NyYy9lYXBfc2VydmVyL2VhcF9zZXJ2ZXJfcHdkLmMKKysrKyBiL3NyYy9lYXBfc2VydmVyL2VhcF9zZXJ2ZXJfcHdkLmMKK0BAIC05NDIsMTEgKzk0MiwyMSBAQCBzdGF0aWMgdm9pZCBlYXBfcHdkX3Byb2Nlc3Moc3RydWN0IGVhcF9zbSAqc20sIHZvaWQgKnByaXYsCisgCSAqIHRoZSBmaXJzdCBmcmFnbWVudCBoYXMgYSB0b3RhbCBsZW5ndGgKKyAJICovCisgCWlmIChFQVBfUFdEX0dFVF9MRU5HVEhfQklUKGxtX2V4Y2gpKSB7CisrCQlpZiAobGVuIDwgMikgeworKwkJCXdwYV9wcmludGYoTVNHX0RFQlVHLAorKwkJCQkgICAiRUFQLXB3ZDogRnJhbWUgdG9vIHNob3J0IHRvIGNvbnRhaW4gVG90YWwtTGVuZ3RoIGZpZWxkIik7CisrCQkJcmV0dXJuOworKwkJfQorIAkJdG90X2xlbiA9IFdQQV9HRVRfQkUxNihwb3MpOworIAkJd3BhX3ByaW50ZihNU0dfREVCVUcsICJFQVAtcHdkOiBJbmNvbWluZyBmcmFnbWVudHMsIHRvdGFsICIKKyAJCQkgICAibGVuZ3RoID0gJWQiLCB0b3RfbGVuKTsKKyAJCWlmICh0b3RfbGVuID4gMTUwMDApCisgCQkJcmV0dXJuOworKwkJaWYgKGRhdGEtPmluYnVmKSB7CisrCQkJd3BhX3ByaW50ZihNU0dfREVCVUcsCisrCQkJCSAgICJFQVAtcHdkOiBVbmV4cGVjdGVkIG5ldyBmcmFnbWVudCBzdGFydCB3aGVuIHByZXZpb3VzIGZyYWdtZW50IGlzIHN0aWxsIGluIHVzZSIpOworKwkJCXJldHVybjsKKysJCX0KKyAJCWRhdGEtPmluYnVmID0gd3BhYnVmX2FsbG9jKHRvdF9sZW4pOworIAkJaWYgKGRhdGEtPmluYnVmID09IE5VTEwpIHsKKyAJCQl3cGFfcHJpbnRmKE1TR19JTkZPLCAiRUFQLXB3ZDogT3V0IG9mIG1lbW9yeSB0byAiCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDA1LUVBUC1wd2QtcGVlci1GaXgtYXN5bW1ldHJpYy1mcmFnbWVudGF0aW9uLWJlaGF2aW9yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDUtRUFQLXB3ZC1wZWVyLUZpeC1hc3ltbWV0cmljLWZyYWdtZW50YXRpb24tYmVoYXZpb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA3MzYwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDA1LUVBUC1wd2QtcGVlci1GaXgtYXN5bW1ldHJpYy1mcmFnbWVudGF0aW9uLWJlaGF2aW9yLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogRmFuIFhpbiA8ZmFuLnhpbkBqcC5mdWppdHN1LmNvbT4KKworRnJvbSAyOGEwNjlhNTQ1YjA2Yjk5ZWI1NWFkNTNmNjNmMmM5OWU2NWE5OGY2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KK0RhdGU6IFNhdCwgMiBNYXkgMjAxNSAxOToyNjoyOCArMDMwMAorU3ViamVjdDogW1BBVENIIDUvNV0gRUFQLXB3ZCBwZWVyOiBGaXggYXN5bW1ldHJpYyBmcmFnbWVudGF0aW9uIGJlaGF2aW9yCisKK1RoZSBMIChMZW5ndGgpIGFuZCBNIChNb3JlKSBmbGFncyBuZWVkcyB0byBiZSBjbGVhcmVkIGJlZm9yZSBkZWNpZGluZword2hldGhlciB0aGUgbG9jYWxseSBnZW5lcmF0ZWQgcmVzcG9uc2UgcmVxdWlyZXMgZnJhZ21lbnRhdGlvbi4gVGhpcworZml4ZXMgYW4gaXNzdWUgd2hlcmUgdGhlc2UgZmxhZ3MgZnJvbSB0aGUgc2VydmVyIGNvdWxkIGhhdmUgYmVlbiBpbnZhbGlkCitmb3IgdGhlIGZvbGxvd2luZyBtZXNzYWdlLiBJbiBzb21lIGNhc2VzLCB0aGlzIGNvdWxkIGhhdmUgcmVzdWx0ZWQgaW4KK3RyaWdnZXJpbmcgdGhlIHdwYWJ1ZiBzZWN1cml0eSBjaGVjayB0aGF0IHdvdWxkIHRlcm1pbmF0ZSB0aGUgcHJvY2VzcworZHVlIHRvIGludmFsaWQgYnVmZmVyIGFsbG9jYXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CistLS0KKyBzcmMvZWFwX3BlZXIvZWFwX3B3ZC5jIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9zcmMvZWFwX3BlZXIvZWFwX3B3ZC5jIGIvc3JjL2VhcF9wZWVyL2VhcF9wd2QuYworaW5kZXggMWQyMDc5Yi4uZTU4YjEzYSAxMDA2NDQKKy0tLSBhL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMKKysrKyBiL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMKK0BAIC05NjgsNiArOTY4LDcgQEAgZWFwX3B3ZF9wcm9jZXNzKHN0cnVjdCBlYXBfc20gKnNtLCB2b2lkICpwcml2LCBzdHJ1Y3QgZWFwX21ldGhvZF9yZXQgKnJldCwKKyAJLyoKKyAJICogd2UgaGF2ZSBvdXRwdXQhIERvIHdlIG5lZWQgdG8gZnJhZ21lbnQgaXQ/CisgCSAqLworKwlsbV9leGNoID0gRUFQX1BXRF9HRVRfRVhDSEFOR0UobG1fZXhjaCk7CisgCWxlbiA9IHdwYWJ1Zl9sZW4oZGF0YS0+b3V0YnVmKTsKKyAJaWYgKChsZW4gKyBFQVBfUFdEX0hEUl9TSVpFKSA+IGRhdGEtPm10dSkgeworIAkJcmVzcCA9IGVhcF9tc2dfYWxsb2MoRUFQX1ZFTkRPUl9JRVRGLCBFQVBfVFlQRV9QV0QsIGRhdGEtPm10dSwKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50Lzk5X3dwYV9zdXBwbGljYW50IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50Lzk5X3dwYV9zdXBwbGljYW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZjRkZDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvOTlfd3BhX3N1cHBsaWNhbnQKQEAgLTAsMCArMSBAQAorZCByb290IHJvb3QgMDcwMCAvdmFyL3J1bi93cGFfc3VwcGxpY2FudCBub25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvZGVmY29uZmlnIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDRlMzk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L2RlZmNvbmZpZwpAQCAtMCwwICsxLDU1MiBAQAorIyBFeGFtcGxlIHdwYV9zdXBwbGljYW50IGJ1aWxkIHRpbWUgY29uZmlndXJhdGlvbgorIworIyBUaGlzIGZpbGUgbGlzdHMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSB1c2VkIHdoZW4gYnVpbGRpbmcgdGhlCisjIGhvc3RhcGQgYmluYXJ5LiBBbGwgbGluZXMgc3RhcnRpbmcgd2l0aCAjIGFyZSBpZ25vcmVkLiBDb25maWd1cmF0aW9uIG9wdGlvbgorIyBsaW5lcyBtdXN0IGJlIGNvbW1lbnRlZCBvdXQgY29tcGxldGUsIGlmIHRoZXkgYXJlIG5vdCB0byBiZSBpbmNsdWRlZCwgaS5lLiwKKyMganVzdCBzZXR0aW5nIFZBUklBQkxFPW4gaXMgbm90IGRpc2FibGluZyB0aGF0IHZhcmlhYmxlLgorIworIyBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgaW4gTWFrZWZpbGUsIHNvIHZhcmlhYmxlcyBsaWtlIENGTEFHUyBhbmQgTElCUyBjYW4gYWxzbworIyBiZSBtb2RpZmllZCBmcm9tIGhlcmUuIEluIG1vc3QgY2FzZXMsIHRoZXNlIGxpbmVzIHNob3VsZCB1c2UgKz0gaW4gb3JkZXIgbm90CisjIHRvIG92ZXJyaWRlIHByZXZpb3VzIHZhbHVlcyBvZiB0aGUgdmFyaWFibGVzLgorCisKKyMgVW5jb21tZW50IGZvbGxvd2luZyB0d28gbGluZXMgYW5kIGZpeCB0aGUgcGF0aHMgaWYgeW91IGhhdmUgaW5zdGFsbGVkIE9wZW5TU0wKKyMgb3IgR251VExTIGluIG5vbi1kZWZhdWx0IGxvY2F0aW9uCisjQ0ZMQUdTICs9IC1JL3Vzci9sb2NhbC9vcGVuc3NsL2luY2x1ZGUKKyNMSUJTICs9IC1ML3Vzci9sb2NhbC9vcGVuc3NsL2xpYgorCisjIFNvbWUgUmVkIEhhdCB2ZXJzaW9ucyBzZWVtIHRvIGluY2x1ZGUga2VyYmVyb3MgaGVhZGVyIGZpbGVzIGZyb20gT3BlblNTTCwgYnV0CisjIHRoZSBrZXJiZXJvcyBmaWxlcyBhcmUgbm90IGluIHRoZSBkZWZhdWx0IGluY2x1ZGUgcGF0aC4gRm9sbG93aW5nIGxpbmUgY2FuIGJlCisjIHVzZWQgdG8gZml4IGJ1aWxkIGlzc3VlcyBvbiBzdWNoIHN5c3RlbXMgKGtyYjUuaCBub3QgZm91bmQpLgorI0NGTEFHUyArPSAtSS91c3IvaW5jbHVkZS9rZXJiZXJvcworCisjIEV4YW1wbGUgY29uZmlndXJhdGlvbiBmb3IgdmFyaW91cyBjcm9zcy1jb21waWxhdGlvbiBwbGF0Zm9ybXMKKworIyMjIyBzdmVhc29mdCAoZS5nLiwgZm9yIExpbmtzeXMgV1JUNTRHKSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworI0NDPW1pcHNlbC11Y2xpYmMtZ2NjCisjQ0M9L29wdC9icmNtL2huZHRvb2xzLW1pcHNlbC11Y2xpYmMvYmluL21pcHNlbC11Y2xpYmMtZ2NjCisjQ0ZMQUdTICs9IC1PcworI0NQUEZMQUdTICs9IC1JLi4vc3JjL2luY2x1ZGUgLUkuLi8uLi9zcmMvcm91dGVyL29wZW5zc2wvaW5jbHVkZQorI0xJQlMgKz0gLUwvb3B0L2JyY20vaG5kdG9vbHMtbWlwc2VsLXVjbGliYy0wLjkuMTkvbGliIC1sc3NsCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyMgb3BlbndydCAoZS5nLiwgZm9yIExpbmtzeXMgV1JUNTRHKSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyNDQz1taXBzZWwtdWNsaWJjLWdjYworI0NDPS9vcHQvYnJjbS9obmR0b29scy1taXBzZWwtdWNsaWJjL2Jpbi9taXBzZWwtdWNsaWJjLWdjYworI0NGTEFHUyArPSAtT3MKKyNDUFBGTEFHUz0tSS4uL3NyYy9pbmNsdWRlIC1JLi4vb3BlbnNzbC0wLjkuN2QvaW5jbHVkZSBcCisjCS1JLi4vV1JUNTRHUy9yZWxlYXNlL3NyYy9pbmNsdWRlCisjTElCUyA9IC1sc3NsCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBIb3N0IEFQIGRyaXZlcgorQ09ORklHX0RSSVZFUl9IT1NUQVA9eQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIEFnZXJlIGRyaXZlcgorI0NPTkZJR19EUklWRVJfSEVSTUVTPXkKKyMgQ2hhbmdlIGluY2x1ZGUgZGlyZWN0b3JpZXMgdG8gbWF0Y2ggd2l0aCB0aGUgbG9jYWwgc2V0dXAKKyNDRkxBR1MgKz0gLUkuLi8uLi9oY2YgLUkuLi8uLi9pbmNsdWRlIC1JLi4vLi4vaW5jbHVkZS9oY2YKKyNDRkxBR1MgKz0gLUkuLi8uLi9pbmNsdWRlL3dpcmVsZXNzCisKKyMgRHJpdmVyIGludGVyZmFjZSBmb3IgbWFkd2lmaSBkcml2ZXIKKyMgRGVwcmVjYXRlZDsgdXNlIENPTkZJR19EUklWRVJfV0VYVD15IGluc3RlYWQuCisjQ09ORklHX0RSSVZFUl9NQURXSUZJPXkKKyMgU2V0IGluY2x1ZGUgZGlyZWN0b3J5IHRvIHRoZSBtYWR3aWZpIHNvdXJjZSB0cmVlCisjQ0ZMQUdTICs9IC1JLi4vLi4vbWFkd2lmaQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIG5kaXN3cmFwcGVyCisjIERlcHJlY2F0ZWQ7IHVzZSBDT05GSUdfRFJJVkVSX1dFWFQ9eSBpbnN0ZWFkLgorI0NPTkZJR19EUklWRVJfTkRJU1dSQVBQRVI9eQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIEF0bWVsIGRyaXZlcgorIyBDT05GSUdfRFJJVkVSX0FUTUVMPXkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBvbGQgQnJvYWRjb20gZHJpdmVyCisjIFBsZWFzZSBub3RlIHRoYXQgdGhlIG5ld2VyIEJyb2FkY29tIGRyaXZlciAoImh5YnJpZCBMaW51eCBkcml2ZXIiKSBzdXBwb3J0cworIyBMaW51eCB3aXJlbGVzcyBleHRlbnNpb25zIGFuZCBkb2VzIG5vdCBuZWVkIChvciBldmVuIHdvcmspIHdpdGggdGhlIG9sZAorIyBkcml2ZXIgd3JhcHBlci4gVXNlIENPTkZJR19EUklWRVJfV0VYVD15IHdpdGggdGhhdCBkcml2ZXIuCisjQ09ORklHX0RSSVZFUl9CUk9BRENPTT15CisjIEV4YW1wbGUgcGF0aCBmb3Igd2xpb2N0bC5oOyBjaGFuZ2UgdG8gbWF0Y2ggeW91ciBjb25maWd1cmF0aW9uCisjQ0ZMQUdTICs9IC1JL29wdC9XUlQ1NEdTL3JlbGVhc2Uvc3JjL2luY2x1ZGUKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBJbnRlbCBpcHcyMTAwLzIyMDAgZHJpdmVyCisjIERlcHJlY2F0ZWQ7IHVzZSBDT05GSUdfRFJJVkVSX1dFWFQ9eSBpbnN0ZWFkLgorI0NPTkZJR19EUklWRVJfSVBXPXkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBSYWxpbmsgZHJpdmVyCisjQ09ORklHX0RSSVZFUl9SQUxJTks9eQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIGdlbmVyaWMgTGludXggd2lyZWxlc3MgZXh0ZW5zaW9ucworIyBOb3RlOiBXRVhUIGlzIGRlcHJlY2F0ZWQgaW4gdGhlIGN1cnJlbnQgTGludXgga2VybmVsIHZlcnNpb24gYW5kIG5vIG5ldworIyBmdW5jdGlvbmFsaXR5IGlzIGFkZGVkIHRvIGl0LiBubDgwMjExLWJhc2VkIGludGVyZmFjZSBpcyB0aGUgbmV3CisjIHJlcGxhY2VtZW50IGZvciBXRVhUIGFuZCBpdHMgdXNlIGFsbG93cyB3cGFfc3VwcGxpY2FudCB0byBwcm9wZXJseSBjb250cm9sCisjIHRoZSBkcml2ZXIgdG8gaW1wcm92ZSBleGlzdGluZyBmdW5jdGlvbmFsaXR5IGxpa2Ugcm9hbWluZyBhbmQgdG8gc3VwcG9ydCBuZXcKKyMgZnVuY3Rpb25hbGl0eS4KK0NPTkZJR19EUklWRVJfV0VYVD15CisKKyMgRHJpdmVyIGludGVyZmFjZSBmb3IgTGludXggZHJpdmVycyB1c2luZyB0aGUgbmw4MDIxMSBrZXJuZWwgaW50ZXJmYWNlCitDT05GSUdfRFJJVkVSX05MODAyMTE9eQorCisjIGRyaXZlcl9ubDgwMjExLmMgcmVxdWlyZXMgbGlibmwuIElmIHlvdSBhcmUgY29tcGlsaW5nIGl0IHlvdXJzZWxmCisjIHlvdSBtYXkgbmVlZCB0byBwb2ludCBob3N0YXBkIHRvIHlvdXIgdmVyc2lvbiBvZiBsaWJubC4KKyMKKyNDRkxBR1MgKz0gLUkkPHBhdGggdG8gbGlibmwgaW5jbHVkZSBmaWxlcz4KKyNMSUJTICs9IC1MJDxwYXRoIHRvIGxpYm5sIGxpYnJhcnkgZmlsZXM+CisKKyMgVXNlIGxpYm5sIHYyLjAgKG9yIDMuMCkgbGlicmFyaWVzLgorI0NPTkZJR19MSUJOTDIwPXkKKworIyBVc2UgbGlibmwgMy4yIGxpYnJhcmllcyAoaWYgdGhpcyBpcyBzZWxlY3RlZCwgQ09ORklHX0xJQk5MMjAgaXMgaWdub3JlZCkKK0NPTkZJR19MSUJOTDMyPXkKKworCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIEZyZWVCU0QgbmV0ODAyMTEgbGF5ZXIgKGUuZy4sIEF0aGVyb3MgZHJpdmVyKQorI0NPTkZJR19EUklWRVJfQlNEPXkKKyNDRkxBR1MgKz0gLUkvdXNyL2xvY2FsL2luY2x1ZGUKKyNMSUJTICs9IC1ML3Vzci9sb2NhbC9saWIKKyNMSUJTX3AgKz0gLUwvdXNyL2xvY2FsL2xpYgorI0xJQlNfYyArPSAtTC91c3IvbG9jYWwvbGliCisKKyMgRHJpdmVyIGludGVyZmFjZSBmb3IgV2luZG93cyBORElTCisjQ09ORklHX0RSSVZFUl9ORElTPXkKKyNDRkxBR1MgKz0gLUkvdXNyL2luY2x1ZGUvdzMyYXBpL2RkaworI0xJQlMgKz0gLUwvdXNyL2xvY2FsL2xpYgorIyBGb3IgbmF0aXZlIGJ1aWxkIHVzaW5nIG1pbmd3CisjQ09ORklHX05BVElWRV9XSU5ET1dTPXkKKyMgQWRkaXRpb25hbCBkaXJlY3RvcmllcyBmb3IgY3Jvc3MtY29tcGlsYXRpb24gb24gTGludXggaG9zdCBmb3IgbWluZ3cgdGFyZ2V0CisjQ0ZMQUdTICs9IC1JL29wdC9taW5ndy9taW5ndzMyL2luY2x1ZGUvZGRrCisjTElCUyArPSAtTC9vcHQvbWluZ3cvbWluZ3czMi9saWIKKyNDQz1taW5ndzMyLWdjYworIyBCeSBkZWZhdWx0LCBkcml2ZXJfbmRpcyB1c2VzIFdpblBjYXAgZm9yIGxvdy1sZXZlbCBvcGVyYXRpb25zLiBUaGlzIGNhbiBiZQorIyByZXBsYWNlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3B0aW9uIHdoaWNoIHJlcGxhY2VzIFdpblBjYXAgY2FsbHMgd2l0aCBORElTVUlPLgorIyBIb3dldmVyLCB0aGlzIHJlcXVpcmVzIHRoYXQgV1pDIGlzIGRpc2FibGVkIChuZXQgc3RvcCB3emNzdmMpIGJlZm9yZSBzdGFydGluZworIyB3cGFfc3VwcGxpY2FudC4KKyMgQ09ORklHX1VTRV9ORElTVUlPPXkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBkZXZlbG9wbWVudCB0ZXN0aW5nCisjQ09ORklHX0RSSVZFUl9URVNUPXkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciB3aXJlZCBFdGhlcm5ldCBkcml2ZXJzCitDT05GSUdfRFJJVkVSX1dJUkVEPXkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciB0aGUgQnJvYWRjb20gUm9ib1N3aXRjaCBmYW1pbHkKKyNDT05GSUdfRFJJVkVSX1JPQk9TV0lUQ0g9eQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIG5vIGRyaXZlciAoZS5nLiwgV1BTIEVSIG9ubHkpCisjQ09ORklHX0RSSVZFUl9OT05FPXkKKworIyBFbmFibGUgSUVFRSA4MDIuMVggU3VwcGxpY2FudCAoYXV0b21hdGljYWxseSBpbmNsdWRlZCBpZiBhbnkgRUFQIG1ldGhvZCBpcworIyBpbmNsdWRlZCkKK0NPTkZJR19JRUVFODAyMVhfRUFQT0w9eQorCisjIEVBUC1NRDUKK0NPTkZJR19FQVBfTUQ1PXkKKworIyBFQVAtTVNDSEFQdjIKK0NPTkZJR19FQVBfTVNDSEFQVjI9eQorCisjIEVBUC1UTFMKK0NPTkZJR19FQVBfVExTPXkKKworIyBFQUwtUEVBUAorQ09ORklHX0VBUF9QRUFQPXkKKworIyBFQVAtVFRMUworQ09ORklHX0VBUF9UVExTPXkKKworIyBFQVAtRkFTVAorIyBOb3RlOiBJZiBPcGVuU1NMIGlzIHVzZWQgYXMgdGhlIFRMUyBsaWJyYXJ5LCBPcGVuU1NMIDEuMCBvciBuZXdlciBpcyBuZWVkZWQKKyMgZm9yIEVBUC1GQVNUIHN1cHBvcnQuIE9sZGVyIE9wZW5TU0wgcmVsZWFzZXMgd291bGQgbmVlZCB0byBiZSBwYXRjaGVkLCBlLmcuLAorIyB3aXRoIG9wZW5zc2wtMC45Ljh4LXRscy1leHRlbnNpb25zLnBhdGNoLCB0byBhZGQgdGhlIG5lZWRlZCBmdW5jdGlvbnMuCisjQ09ORklHX0VBUF9GQVNUPXkKKworIyBFQVAtR1RDCitDT05GSUdfRUFQX0dUQz15CisKKyMgRUFQLU9UUAorQ09ORklHX0VBUF9PVFA9eQorCisjIEVBUC1TSU0gKGVuYWJsZSBDT05GSUdfUENTQywgaWYgRUFQLVNJTSBpcyB1c2VkKQorI0NPTkZJR19FQVBfU0lNPXkKKworIyBFQVAtUFNLIChleHBlcmltZW50YWw7IHRoaXMgaXMgX25vdF8gbmVlZGVkIGZvciBXUEEtUFNLKQorI0NPTkZJR19FQVBfUFNLPXkKKworIyBFQVAtcHdkIChzZWN1cmUgYXV0aGVudGljYXRpb24gdXNpbmcgb25seSBhIHBhc3N3b3JkKQorI0NPTkZJR19FQVBfUFdEPXkKKworIyBFQVAtUEFYCisjQ09ORklHX0VBUF9QQVg9eQorCisjIExFQVAKK0NPTkZJR19FQVBfTEVBUD15CisKKyMgRUFQLUFLQSAoZW5hYmxlIENPTkZJR19QQ1NDLCBpZiBFQVAtQUtBIGlzIHVzZWQpCisjQ09ORklHX0VBUF9BS0E9eQorCisjIEVBUC1BS0EnIChlbmFibGUgQ09ORklHX1BDU0MsIGlmIEVBUC1BS0EnIGlzIHVzZWQpLgorIyBUaGlzIHJlcXVpcmVzIENPTkZJR19FQVBfQUtBIHRvIGJlIGVuYWJsZWQsIHRvby4KKyNDT05GSUdfRUFQX0FLQV9QUklNRT15CisKKyMgRW5hYmxlIFVTSU0gc2ltdWxhdG9yIChNaWxlbmFnZSkgZm9yIEVBUC1BS0EKKyNDT05GSUdfVVNJTV9TSU1VTEFUT1I9eQorCisjIEVBUC1TQUtFCisjQ09ORklHX0VBUF9TQUtFPXkKKworIyBFQVAtR1BTSworI0NPTkZJR19FQVBfR1BTSz15CisjIEluY2x1ZGUgc3VwcG9ydCBmb3Igb3B0aW9uYWwgU0hBMjU2IGNpcGhlciBzdWl0ZSBpbiBFQVAtR1BTSworI0NPTkZJR19FQVBfR1BTS19TSEEyNTY9eQorCisjIEVBUC1UTkMgYW5kIHJlbGF0ZWQgVHJ1c3RlZCBOZXR3b3JrIENvbm5lY3Qgc3VwcG9ydCAoZXhwZXJpbWVudGFsKQorI0NPTkZJR19FQVBfVE5DPXkKKworIyBXaS1GaSBQcm90ZWN0ZWQgU2V0dXAgKFdQUykKK0NPTkZJR19XUFM9eQorIyBFbmFibGUgV1NDIDIuMCBzdXBwb3J0CisjQ09ORklHX1dQUzI9eQorIyBFbmFibGUgV1BTIGV4dGVybmFsIHJlZ2lzdHJhciBmdW5jdGlvbmFsaXR5CisjQ09ORklHX1dQU19FUj15CisjIERpc2FibGUgY3JlZGVudGlhbHMgZm9yIGFuIG9wZW4gbmV0d29yayBieSBkZWZhdWx0IHdoZW4gYWN0aW5nIGFzIGEgV1BTCisjIHJlZ2lzdHJhci4KKyNDT05GSUdfV1BTX1JFR19ESVNBQkxFX09QRU49eQorIyBFbmFibGUgV1BTIHN1cHBvcnQgd2l0aCBORkMgY29uZmlnIG1ldGhvZAorI0NPTkZJR19XUFNfTkZDPXkKKworIyBFQVAtSUtFdjIKKyNDT05GSUdfRUFQX0lLRVYyPXkKKworIyBFQVAtRUtFCisjQ09ORklHX0VBUF9FS0U9eQorCisjIFBLQ1MjMTIgKFBGWCkgc3VwcG9ydCAodXNlZCB0byByZWFkIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZSBmaWxlIGZyb20KKyMgYSBmaWxlIHRoYXQgdXN1YWxseSBoYXMgZXh0ZW5zaW9uIC5wMTIgb3IgLnBmeCkKK0NPTkZJR19QS0NTMTI9eQorCisjIFNtYXJ0Y2FyZCBzdXBwb3J0IChpLmUuLCBwcml2YXRlIGtleSBvbiBhIHNtYXJ0Y2FyZCksIGUuZy4sIHdpdGggb3BlbnNzbAorIyBlbmdpbmUuCitDT05GSUdfU01BUlRDQVJEPXkKKworIyBQQy9TQyBpbnRlcmZhY2UgZm9yIHNtYXJ0Y2FyZHMgKFVTSU0sIEdTTSBTSU0pCisjIEVuYWJsZSB0aGlzIGlmIEVBUC1TSU0gb3IgRUFQLUFLQSBpcyBpbmNsdWRlZAorI0NPTkZJR19QQ1NDPXkKKworIyBTdXBwb3J0IEhUIG92ZXJyaWRlcyAoZGlzYWJsZSBIVC9IVDQwLCBtYXNrIE1DUyByYXRlcywgZXRjLikKKyNDT05GSUdfSFRfT1ZFUlJJREVTPXkKKworIyBTdXBwb3J0IFZIVCBvdmVycmlkZXMgKGRpc2FibGUgVkhULCBtYXNrIE1DUyByYXRlcywgZXRjLikKKyNDT05GSUdfVkhUX09WRVJSSURFUz15CisKKyMgRGV2ZWxvcG1lbnQgdGVzdGluZworI0NPTkZJR19FQVBPTF9URVNUPXkKKworIyBTZWxlY3QgY29udHJvbCBpbnRlcmZhY2UgYmFja2VuZCBmb3IgZXh0ZXJuYWwgcHJvZ3JhbXMsIGUuZywgd3BhX2NsaToKKyMgdW5peCA9IFVOSVggZG9tYWluIHNvY2tldHMgKGRlZmF1bHQgZm9yIExpbnV4LypCU0QpCisjIHVkcCA9IFVEUCBzb2NrZXRzIHVzaW5nIGxvY2FsaG9zdCAoMTI3LjAuMC4xKQorIyBuYW1lZF9waXBlID0gV2luZG93cyBOYW1lZCBQaXBlIChkZWZhdWx0IGZvciBXaW5kb3dzKQorIyB1ZHAtcmVtb3RlID0gVURQIHNvY2tldHMgd2l0aCByZW1vdGUgYWNjZXNzIChvbmx5IGZvciB0ZXN0cyBzeXN0ZW1zL3B1cnBvc2UpCisjIHkgPSB1c2UgZGVmYXVsdCAoYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpCisjIElmIHRoaXMgb3B0aW9uIGlzIGNvbW1lbnRlZCBvdXQsIGNvbnRyb2wgaW50ZXJmYWNlIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUKKyMgYnVpbGQuCitDT05GSUdfQ1RSTF9JRkFDRT15CisKKyMgSW5jbHVkZSBzdXBwb3J0IGZvciBHTlUgUmVhZGxpbmUgYW5kIEhpc3RvcnkgTGlicmFyaWVzIGluIHdwYV9jbGkuCisjIFdoZW4gYnVpbGRpbmcgYSB3cGFfY2xpIGJpbmFyeSBmb3IgZGlzdHJpYnV0aW9uLCBwbGVhc2Ugbm90ZSB0aGF0IHRoZXNlCisjIGxpYnJhcmllcyBhcmUgbGljZW5zZWQgdW5kZXIgR1BMIGFuZCBhcyBzdWNoLCBCU0QgbGljZW5zZSBtYXkgbm90IGFwcGx5IGZvcgorIyB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KKyNDT05GSUdfUkVBRExJTkU9eQorCisjIEluY2x1ZGUgaW50ZXJuYWwgbGluZSBlZGl0IG1vZGUgaW4gd3BhX2NsaS4gVGhpcyBjYW4gYmUgdXNlZCBhcyBhIHJlcGxhY2VtZW50CisjIGZvciBHTlUgUmVhZGxpbmUgdG8gcHJvdmlkZSBsaW1pdGVkIGNvbW1hbmQgbGluZSBlZGl0aW5nIGFuZCBoaXN0b3J5IHN1cHBvcnQuCisjQ09ORklHX1dQQV9DTElfRURJVD15CisKKyMgUmVtb3ZlIGRlYnVnZ2luZyBjb2RlIHRoYXQgaXMgcHJpbnRpbmcgb3V0IGRlYnVnIG1lc3NhZ2UgdG8gc3Rkb3V0LgorIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgd3BhX3N1cHBsaWNhbnQgY29uc2lkZXJhYmx5CisjIGlmIGRlYnVnZ2luZyBjb2RlIGlzIG5vdCBuZWVkZWQuIFRoZSBzaXplIHJlZHVjdGlvbiBjYW4gYmUgYXJvdW5kIDM1JQorIyAoZS5nLiwgOTAga0IpLgorI0NPTkZJR19OT19TVERPVVRfREVCVUc9eQorCisjIFJlbW92ZSBXUEEgc3VwcG9ydCwgZS5nLiwgZm9yIHdpcmVkLW9ubHkgSUVFRSA4MDIuMVggc3VwcGxpY2FudCwgdG8gc2F2ZQorIyAzNS01MCBrQiBpbiBjb2RlIHNpemUuCisjQ09ORklHX05PX1dQQT15CisKKyMgUmVtb3ZlIElFRUUgODAyLjExaS9XUEEtUGVyc29uYWwgQVNDSUkgcGFzc3BocmFzZSBzdXBwb3J0CisjIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHJlZHVjZSBjb2RlIHNpemUgYnkgcmVtb3Zpbmcgc3VwcG9ydCBmb3IKKyMgY29udmVydGluZyBBU0NJSSBwYXNzcGhyYXNlcyBpbnRvIFBTSy4gSWYgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIHJlbW92ZWQsIHRoZQorIyBQU0sgY2FuIG9ubHkgYmUgY29uZmlndXJlZCBhcyB0aGUgNjQtb2N0ZXQgaGV4c3RyaW5nIChlLmcuLCBmcm9tCisjIHdwYV9wYXNzcGhyYXNlKS4gVGhpcyBzYXZlcyBhYm91dCAwLjUga0IgaW4gY29kZSBzaXplLgorI0NPTkZJR19OT19XUEFfUEFTU1BIUkFTRT15CisKKyMgRGlzYWJsZSBzY2FuIHJlc3VsdCBwcm9jZXNzaW5nIChhcF9tb2RlPTEpIHRvIHNhdmUgY29kZSBzaXplIGJ5IGFib3V0IDEga0IuCisjIFRoaXMgY2FuIGJlIHVzZWQgaWYgYXBfc2Nhbj0xIG1vZGUgaXMgbmV2ZXIgZW5hYmxlZC4KKyNDT05GSUdfTk9fU0NBTl9QUk9DRVNTSU5HPXkKKworIyBTZWxlY3QgY29uZmlndXJhdGlvbiBiYWNrZW5kOgorIyBmaWxlID0gdGV4dCBmaWxlIChlLmcuLCB3cGFfc3VwcGxpY2FudC5jb25mOyBub3RlOiB0aGUgY29uZmlndXJhdGlvbiBmaWxlCisjCXBhdGggaXMgZ2l2ZW4gb24gY29tbWFuZCBsaW5lLCBub3QgaGVyZTsgdGhpcyBvcHRpb24gaXMganVzdCB1c2VkIHRvCisjCXNlbGVjdCB0aGUgYmFja2VuZCB0aGF0IGFsbG93cyBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGJlIHVzZWQpCisjIHdpbnJlZyA9IFdpbmRvd3MgcmVnaXN0cnkgKHNlZSB3aW5fZXhhbXBsZS5yZWcgZm9yIGFuIGV4YW1wbGUpCitDT05GSUdfQkFDS0VORD1maWxlCisKKyMgUmVtb3ZlIGNvbmZpZ3VyYXRpb24gd3JpdGUgZnVuY3Rpb25hbGl0eSAoaS5lLiwgdG8gYWxsb3cgdGhlIGNvbmZpZ3VyYXRpb24KKyMgZmlsZSB0byBiZSB1cGRhdGVkIGJhc2VkIG9uIHJ1bnRpbWUgY29uZmlndXJhdGlvbiBjaGFuZ2VzKS4gVGhlIHJ1bnRpbWUKKyMgY29uZmlndXJhdGlvbiBjYW4gc3RpbGwgYmUgY2hhbmdlZCwgdGhlIGNoYW5nZXMgYXJlIGp1c3Qgbm90IGdvaW5nIHRvIGJlCisjIHBlcnNpc3RlbnQgb3ZlciByZXN0YXJ0cy4gVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcmVkdWNlIGNvZGUgc2l6ZSBieQorIyBhYm91dCAzLjUga0IuCisjQ09ORklHX05PX0NPTkZJR19XUklURT15CisKKyMgUmVtb3ZlIHN1cHBvcnQgZm9yIGNvbmZpZ3VyYXRpb24gYmxvYnMgdG8gcmVkdWNlIGNvZGUgc2l6ZSBieSBhYm91dCAxLjUga0IuCisjQ09ORklHX05PX0NPTkZJR19CTE9CUz15CisKKyMgU2VsZWN0IHByb2dyYW0gZW50cnkgcG9pbnQgaW1wbGVtZW50YXRpb246CisjIG1haW4gPSBVTklYL1BPU0lYIGxpa2UgbWFpbigpIGZ1bmN0aW9uIChkZWZhdWx0KQorIyBtYWluX3dpbnN2YyA9IFdpbmRvd3Mgc2VydmljZSAocmVhZCBwYXJhbWV0ZXJzIGZyb20gcmVnaXN0cnkpCisjIG1haW5fbm9uZSA9IFZlcnkgYmFzaWMgZXhhbXBsZSAoZGV2ZWxvcG1lbnQgdXNlIG9ubHkpCisjQ09ORklHX01BSU49bWFpbgorCisjIFNlbGVjdCB3cmFwcGVyIGZvciBvcGVyYXRpbnMgc3lzdGVtIGFuZCBDIGxpYnJhcnkgc3BlY2lmaWMgZnVuY3Rpb25zCisjIHVuaXggPSBVTklYL1BPU0lYIGxpa2Ugc3lzdGVtcyAoZGVmYXVsdCkKKyMgd2luMzIgPSBXaW5kb3dzIHN5c3RlbXMKKyMgbm9uZSA9IEVtcHR5IHRlbXBsYXRlCisjQ09ORklHX09TPXVuaXgKKworIyBTZWxlY3QgZXZlbnQgbG9vcCBpbXBsZW1lbnRhdGlvbgorIyBlbG9vcCA9IHNlbGVjdCgpIGxvb3AgKGRlZmF1bHQpCisjIGVsb29wX3dpbiA9IFdpbmRvd3MgZXZlbnRzIGFuZCBXYWl0Rm9yTXVsdGlwbGVPYmplY3QoKSBsb29wCisjQ09ORklHX0VMT09QPWVsb29wCisKKyMgU2hvdWxkIHdlIHVzZSBwb2xsIGluc3RlYWQgb2Ygc2VsZWN0PyBTZWxlY3QgaXMgdXNlZCBieSBkZWZhdWx0LgorI0NPTkZJR19FTE9PUF9QT0xMPXkKKworIyBTZWxlY3QgbGF5ZXIgMiBwYWNrZXQgaW1wbGVtZW50YXRpb24KKyMgbGludXggPSBMaW51eCBwYWNrZXQgc29ja2V0IChkZWZhdWx0KQorIyBwY2FwID0gbGlicGNhcC9saWJkbmV0L1dpblBjYXAKKyMgZnJlZWJzZCA9IEZyZWVCU0QgbGlicGNhcAorIyB3aW5wY2FwID0gV2luUGNhcCB3aXRoIHJlY2VpdmUgdGhyZWFkCisjIG5kaXMgPSBXaW5kb3dzIE5ESVNVSU8gKG5vdGU6IHJlcXVpcmVzIENPTkZJR19VU0VfTkRJU1VJTz15KQorIyBub25lID0gRW1wdHkgdGVtcGxhdGUKKyNDT05GSUdfTDJfUEFDS0VUPWxpbnV4CisKKyMgUGVlcktleSBoYW5kc2hha2UgZm9yIFN0YXRpb24gdG8gU3RhdGlvbiBMaW5rIChJRUVFIDgwMi4xMWUgRExTKQorQ09ORklHX1BFRVJLRVk9eQorCisjIElFRUUgODAyLjExdyAobWFuYWdlbWVudCBmcmFtZSBwcm90ZWN0aW9uKSwgYWxzbyBrbm93biBhcyBQTUYKKyMgRHJpdmVyIHN1cHBvcnQgaXMgYWxzbyBuZWVkZWQgZm9yIElFRUUgODAyLjExdy4KKyNDT05GSUdfSUVFRTgwMjExVz15CisKKyMgU2VsZWN0IFRMUyBpbXBsZW1lbnRhdGlvbgorIyBvcGVuc3NsID0gT3BlblNTTCAoZGVmYXVsdCkKKyMgZ251dGxzID0gR251VExTCisjIGludGVybmFsID0gSW50ZXJuYWwgVExTdjEgaW1wbGVtZW50YXRpb24gKGV4cGVyaW1lbnRhbCkKKyMgbm9uZSA9IEVtcHR5IHRlbXBsYXRlCisjQ09ORklHX1RMUz1vcGVuc3NsCisKKyMgVExTLWJhc2VkIEVBUCBtZXRob2RzIHJlcXVpcmUgYXQgbGVhc3QgVExTIHYxLjAuIE5ld2VyIHZlcnNpb24gb2YgVExTICh2MS4xKQorIyBjYW4gYmUgZW5hYmxlZCB0byBnZXQgYSBzdHJvbmdlciBjb25zdHJ1Y3Rpb24gb2YgbWVzc2FnZXMgd2hlbiBibG9jayBjaXBoZXJzCisjIGFyZSB1c2VkLiBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBzb21lIGV4aXN0aW5nIFRMUyB2MS4wIC1iYXNlZAorIyBpbXBsZW1lbnRhdGlvbiBtYXkgbm90IGJlIGNvbXBhdGlibGUgd2l0aCBUTFMgdjEuMSBtZXNzYWdlIChDbGllbnRIZWxsbyBpcworIyBzZW50IHByaW9yIHRvIG5lZ290aWF0aW5nIHdoaWNoIHZlcnNpb24gd2lsbCBiZSB1c2VkKQorI0NPTkZJR19UTFNWMTE9eQorCisjIFRMUy1iYXNlZCBFQVAgbWV0aG9kcyByZXF1aXJlIGF0IGxlYXN0IFRMUyB2MS4wLiBOZXdlciB2ZXJzaW9uIG9mIFRMUyAodjEuMikKKyMgY2FuIGJlIGVuYWJsZWQgdG8gZW5hYmxlIHVzZSBvZiBzdHJvbmdlciBjcnlwdG8gYWxnb3JpdGhtcy4gSXQgc2hvdWxkIGJlCisjIG5vdGVkIHRoYXQgc29tZSBleGlzdGluZyBUTFMgdjEuMCAtYmFzZWQgaW1wbGVtZW50YXRpb24gbWF5IG5vdCBiZSBjb21wYXRpYmxlCisjIHdpdGggVExTIHYxLjIgbWVzc2FnZSAoQ2xpZW50SGVsbG8gaXMgc2VudCBwcmlvciB0byBuZWdvdGlhdGluZyB3aGljaCB2ZXJzaW9uCisjIHdpbGwgYmUgdXNlZCkKKyNDT05GSUdfVExTVjEyPXkKKworIyBJZiBDT05GSUdfVExTPWludGVybmFsIGlzIHVzZWQsIGFkZGl0aW9uYWwgbGlicmFyeSBhbmQgaW5jbHVkZSBwYXRocyBhcmUKKyMgbmVlZGVkIGZvciBMaWJUb21NYXRoLiBBbHRlcm5hdGl2ZWx5LCBhbiBpbnRlZ3JhdGVkLCBtaW5pbWFsIHZlcnNpb24gb2YKKyMgTGliVG9tTWF0aCBjYW4gYmUgdXNlZC4gU2VlIGJlZ2lubmluZyBvZiBsaWJ0b21tYXRoLmMgZm9yIGRldGFpbHMgb24gYmVuZWZpdHMKKyMgYW5kIGRyYXdiYWNrcyBvZiB0aGlzIG9wdGlvbi4KKyNDT05GSUdfSU5URVJOQUxfTElCVE9NTUFUSD15CisjaWZuZGVmIENPTkZJR19JTlRFUk5BTF9MSUJUT01NQVRICisjTFRNX1BBVEg9L3Vzci9zcmMvbGlidG9tbWF0aC0wLjM5CisjQ0ZMQUdTICs9IC1JJChMVE1fUEFUSCkKKyNMSUJTICs9IC1MJChMVE1fUEFUSCkKKyNMSUJTX3AgKz0gLUwkKExUTV9QQVRIKQorI2VuZGlmCisjIEF0IHRoZSBjb3N0IG9mIGFib3V0IDQga0Igb2YgYWRkaXRpb25hbCBiaW5hcnkgc2l6ZSwgdGhlIGludGVybmFsIExpYlRvbU1hdGgKKyMgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gaW5jbHVkZSBmYXN0ZXIgcm91dGluZXMgZm9yIGV4cHRtb2QsIHNxciwgYW5kIGRpdiB0bworIyBzcGVlZCB1cCBESCBhbmQgUlNBIGNhbGN1bGF0aW9uIGNvbnNpZGVyYWJseQorI0NPTkZJR19JTlRFUk5BTF9MSUJUT01NQVRIX0ZBU1Q9eQorCisjIEluY2x1ZGUgTkRJUyBldmVudCBwcm9jZXNzaW5nIHRocm91Z2ggV01JIGludG8gd3BhX3N1cHBsaWNhbnQvd3Bhc3ZjLgorIyBUaGlzIGlzIG9ubHkgZm9yIFdpbmRvd3MgYnVpbGRzIGFuZCByZXF1aXJlcyBXTUktcmVsYXRlZCBoZWFkZXIgZmlsZXMgYW5kCisjIFdiZW1VdWlkLkxpYiBmcm9tIFBsYXRmb3JtIFNESyBldmVuIHdoZW4gYnVpbGRpbmcgd2l0aCBNaW5HVy4KKyNDT05GSUdfTkRJU19FVkVOVFNfSU5URUdSQVRFRD15CisjUExBVEZPUk1TREtMSUI9Ii9vcHQvUHJvZ3JhbSBGaWxlcy9NaWNyb3NvZnQgUGxhdGZvcm0gU0RLL0xpYiIKKworIyBBZGQgc3VwcG9ydCBmb3Igb2xkIERCdXMgY29udHJvbCBpbnRlcmZhY2UKKyMgKGZpLmVwaXRlc3QuaG9zdGFwLldQQVN1cHBsaWNhbnQpCisjQ09ORklHX0NUUkxfSUZBQ0VfREJVUz15CisKKyMgQWRkIHN1cHBvcnQgZm9yIG5ldyBEQnVzIGNvbnRyb2wgaW50ZXJmYWNlCisjIChmaS53MS5ob3N0YXAud3BhX3N1cHBsaWNhbnQxKQorQ09ORklHX0NUUkxfSUZBQ0VfREJVU19ORVc9eQorCisjIEFkZCBpbnRyb3NwZWN0aW9uIHN1cHBvcnQgZm9yIG5ldyBEQnVzIGNvbnRyb2wgaW50ZXJmYWNlCisjQ09ORklHX0NUUkxfSUZBQ0VfREJVU19JTlRSTz15CisKKyMgQWRkIHN1cHBvcnQgZm9yIGxvYWRpbmcgRUFQIG1ldGhvZHMgZHluYW1pY2FsbHkgYXMgc2hhcmVkIGxpYnJhcmllcy4KKyMgV2hlbiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCBlYWNoIEVBUCBtZXRob2QgY2FuIGJlIGVpdGhlciBpbmNsdWRlZAorIyBzdGF0aWNhbGx5IChDT05GSUdfRUFQXzxtZXRob2Q+PXkpIG9yIGR5bmFtaWNhbGx5IChDT05GSUdfRUFQXzxtZXRob2Q+PWR5bikuCisjIER5bmFtaWMgRUFQIG1ldGhvZHMgYXJlIGJ1aWxkIGFzIHNoYXJlZCBvYmplY3RzIChlYXBfKi5zbykgYW5kIHRoZXkgbmVlZCB0bworIyBiZSBsb2FkZWQgaW4gdGhlIGJlZ2lubmluZyBvZiB0aGUgd3BhX3N1cHBsaWNhbnQgY29uZmlndXJhdGlvbiBmaWxlCisjIChzZWUgbG9hZF9keW5hbWljX2VhcCBwYXJhbWV0ZXIgaW4gdGhlIGV4YW1wbGUgZmlsZSkgYmVmb3JlIGJlaW5nIHVzZWQgaW4KKyMgdGhlIG5ldHdvcmsgYmxvY2tzLgorIworIyBOb3RlIHRoYXQgc29tZSBzaGFyZWQgcGFydHMgb2YgRUFQIG1ldGhvZHMgYXJlIGluY2x1ZGVkIGluIHRoZSBtYWluIHByb2dyYW0KKyMgYW5kIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gdXNlIGR5bmFtaWMgRUFQIG1ldGhvZHMgdXNpbmcgdGhlc2UgcGFydHMsIHRoZQorIyBtYWluIHByb2dyYW0gbXVzdCBoYXZlIGJlZW4gYnVpbGQgd2l0aCB0aGUgRUFQIG1ldGhvZCBlbmFibGVkICg9eSBvciA9ZHluKS4KKyMgVGhpcyBtZWFucyB0aGF0IEVBUC1UTFMvUEVBUC9UVExTL0ZBU1QgY2Fubm90IGJlIGFkZGVkIGFzIGR5bmFtaWMgbGlicmFyaWVzCisjIHVubGVzcyBhdCBsZWFzdCBvbmUgb2YgdGhlbSB3YXMgaW5jbHVkZWQgaW4gdGhlIG1haW4gYnVpbGQgdG8gZm9yY2UgaW5jbHVzaW9uCisjIG9mIHRoZSBzaGFyZWQgY29kZS4gU2ltaWxhcmx5LCBhdCBsZWFzdCBvbmUgb2YgRUFQLVNJTS9BS0EgbXVzdCBiZSBpbmNsdWRlZAorIyBpbiB0aGUgbWFpbiBidWlsZCB0byBiZSBhYmxlIHRvIGxvYWQgdGhlc2UgbWV0aG9kcyBkeW5hbWljYWxseS4KKyMKKyMgUGxlYXNlIGFsc28gbm90ZSB0aGF0IHVzaW5nIGR5bmFtaWMgbGlicmFyaWVzIHdpbGwgaW5jcmVhc2UgdGhlIHRvdGFsIGJpbmFyeQorIyBzaXplLiBUaHVzLCBpdCBtYXkgbm90IGJlIHRoZSBiZXN0IG9wdGlvbiBmb3IgdGFyZ2V0cyB0aGF0IGhhdmUgbGltaXRlZAorIyBhbW91bnQgb2YgbWVtb3J5L2ZsYXNoLgorI0NPTkZJR19EWU5BTUlDX0VBUF9NRVRIT0RTPXkKKworIyBJRUVFIFN0ZCA4MDIuMTFyLTIwMDggKEZhc3QgQlNTIFRyYW5zaXRpb24pCisjQ09ORklHX0lFRUU4MDIxMVI9eQorCisjIEFkZCBzdXBwb3J0IGZvciB3cml0aW5nIGRlYnVnIGxvZyB0byBhIGZpbGUgKC90bXAvd3BhX3N1cHBsaWNhbnQtbG9nLSMudHh0KQorI0NPTkZJR19ERUJVR19GSUxFPXkKKworIyBTZW5kIGRlYnVnIG1lc3NhZ2VzIHRvIHN5c2xvZyBpbnN0ZWFkIG9mIHN0ZG91dAorI0NPTkZJR19ERUJVR19TWVNMT0c9eQorIyBTZXQgc3lzbG9nIGZhY2lsaXR5IGZvciBkZWJ1ZyBtZXNzYWdlcworI0NPTkZJR19ERUJVR19TWVNMT0dfRkFDSUxJVFk9TE9HX0RBRU1PTgorCisjIEFkZCBzdXBwb3J0IGZvciBzZW5kaW5nIGFsbCBkZWJ1ZyBtZXNzYWdlcyAocmVnYXJkbGVzcyBvZiBkZWJ1ZyB2ZXJib3NpdHkpCisjIHRvIHRoZSBMaW51eCBrZXJuZWwgdHJhY2luZyBmYWNpbGl0eS4gVGhpcyBoZWxwcyBkZWJ1ZyB0aGUgZW50aXJlIHN0YWNrIGJ5CisjIG1ha2luZyBpdCBlYXN5IHRvIHJlY29yZCBldmVyeXRoaW5nIGhhcHBlbmluZyBmcm9tIHRoZSBkcml2ZXIgdXAgaW50byB0aGUKKyMgc2FtZSBmaWxlLCBlLmcuLCB1c2luZyB0cmFjZS1jbWQuCisjQ09ORklHX0RFQlVHX0xJTlVYX1RSQUNJTkc9eQorCisjIEVuYWJsZSBwcml2aWxlZ2Ugc2VwYXJhdGlvbiAoc2VlIFJFQURNRSAnUHJpdmlsZWdlIHNlcGFyYXRpb24nIGZvciBkZXRhaWxzKQorI0NPTkZJR19QUklWU0VQPXkKKworIyBFbmFibGUgbWl0aWdhdGlvbiBhZ2FpbnN0IGNlcnRhaW4gYXR0YWNrcyBhZ2FpbnN0IFRLSVAgYnkgZGVsYXlpbmcgTWljaGFlbAorIyBNSUMgZXJyb3IgcmVwb3J0cyBieSBhIHJhbmRvbSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIDAgYW5kIDYwIHNlY29uZHMKKyNDT05GSUdfREVMQVlFRF9NSUNfRVJST1JfUkVQT1JUPXkKKworIyBFbmFibGUgdHJhY2luZyBjb2RlIGZvciBkZXZlbG9wZXIgZGVidWdnaW5nCisjIFRoaXMgdHJhY2tzIHVzZSBvZiBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIG90aGVyIHJlZ2lzdHJhdGlvbnMgYW5kIHJlcG9ydHMKKyMgaW5jb3JyZWN0IHVzZSB3aXRoIGEgYmFja3RyYWNlIG9mIGNhbGwgKG9yIGFsbG9jYXRpb24pIGxvY2F0aW9uLgorI0NPTkZJR19XUEFfVFJBQ0U9eQorIyBGb3IgQlNELCB1bmNvbW1lbnQgdGhlc2UuCisjTElCUyArPSAtbGV4ZWNpbmZvCisjTElCU19wICs9IC1sZXhlY2luZm8KKyNMSUJTX2MgKz0gLWxleGVjaW5mbworCisjIFVzZSBsaWJiZmQgdG8gZ2V0IG1vcmUgZGV0YWlscyBmb3IgZGV2ZWxvcGVyIGRlYnVnZ2luZworIyBUaGlzIGVuYWJsZXMgdXNlIG9mIGxpYmJmZCB0byBnZXQgbW9yZSBkZXRhaWxlZCBzeW1ib2xzIGZvciB0aGUgYmFja3RyYWNlcworIyBnZW5lcmF0ZWQgYnkgQ09ORklHX1dQQV9UUkFDRT15LgorI0NPTkZJR19XUEFfVFJBQ0VfQkZEPXkKKyMgRm9yIEJTRCwgdW5jb21tZW50IHRoZXNlLgorI0xJQlMgKz0gLWxiZmQgLWxpYmVydHkgLWx6CisjTElCU19wICs9IC1sYmZkIC1saWJlcnR5IC1segorI0xJQlNfYyArPSAtbGJmZCAtbGliZXJ0eSAtbHoKKworQ09ORklHX1RMUyA9ICVzc2wlCitDT05GSUdfQ1RSTF9JRkFDRV9EQlVTPXkKK0NPTkZJR19DVFJMX0lGQUNFX0RCVVNfTkVXPXkKKworIyB3cGFfc3VwcGxpY2FudCBkZXBlbmRzIG9uIHN0cm9uZyByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gYmVpbmcgYXZhaWxhYmxlCisjIGZyb20gdGhlIG9wZXJhdGluZyBzeXN0ZW0uIG9zX2dldF9yYW5kb20oKSBmdW5jdGlvbiBpcyB1c2VkIHRvIGZldGNoIHJhbmRvbQorIyBkYXRhIHdoZW4gbmVlZGVkLCBlLmcuLCBmb3Iga2V5IGdlbmVyYXRpb24uIE9uIExpbnV4IGFuZCBCU0Qgc3lzdGVtcywgdGhpcworIyB3b3JrcyBieSByZWFkaW5nIC9kZXYvdXJhbmRvbS4gSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgdGhlIE9TIGVudHJvcHkgcG9vbAorIyBuZWVkcyB0byBiZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgd3BhX3N1cHBsaWNhbnQgaXMgc3RhcnRlZC4gVGhpcyBpcworIyBpbXBvcnRhbnQgZXNwZWNpYWxseSBvbiBlbWJlZGRlZCBkZXZpY2VzIHRoYXQgZG8gbm90IGhhdmUgYSBoYXJkd2FyZSByYW5kb20KKyMgbnVtYmVyIGdlbmVyYXRvciBhbmQgbWF5IGJ5IGRlZmF1bHQgc3RhcnQgdXAgd2l0aCBtaW5pbWFsIGVudHJvcHkgYXZhaWxhYmxlCisjIGZvciByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24uCisjCisjIEFzIGEgc2FmZXR5IG5ldCwgd3BhX3N1cHBsaWNhbnQgaXMgYnkgZGVmYXVsdCB0cnlpbmcgdG8gaW50ZXJuYWxseSBjb2xsZWN0CisjIGFkZGl0aW9uYWwgZW50cm9weSBmb3IgZ2VuZXJhdGluZyByYW5kb20gZGF0YSB0byBtaXggaW4gd2l0aCB0aGUgZGF0YSBmZXRjaGVkCisjIGZyb20gdGhlIE9TLiBUaGlzIGJ5IGl0c2VsZiBpcyBub3QgY29uc2lkZXJlZCB0byBiZSB2ZXJ5IHN0cm9uZywgYnV0IGl0IG1heQorIyBoZWxwIGluIGNhc2VzIHdoZXJlIHRoZSBzeXN0ZW0gcG9vbCBpcyBub3QgaW5pdGlhbGl6ZWQgcHJvcGVybHkuIEhvd2V2ZXIsIGl0CisjIGlzIHZlcnkgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB0aGUgc3lzdGVtIHBvb2wgaXMgaW5pdGlhbGl6ZWQgd2l0aCBlbm91Z2gKKyMgZW50cm9weSBlaXRoZXIgYnkgdXNpbmcgaGFyZHdhcmUgYXNzaXN0ZWQgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb3IgYnkKKyMgc3RvcmluZyBzdGF0ZSBvdmVyIGRldmljZSByZWJvb3RzLgorIworIyB3cGFfc3VwcGxpY2FudCBjYW4gYmUgY29uZmlndXJlZCB0byBtYWludGFpbiBpdHMgb3duIGVudHJvcHkgc3RvcmUgb3ZlcgorIyByZXN0YXJ0cyB0byBlbmhhbmNlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbi4gVGhpcyBpcyBub3QgcGVyZmVjdCwgYnV0IGl0IGlzCisjIG11Y2ggbW9yZSBzZWN1cmUgdGhhbiB1c2luZyB0aGUgc2FtZSBzZXF1ZW5jZSBvZiByYW5kb20gbnVtYmVycyBhZnRlciBldmVyeQorIyByZWJvb3QuIFRoaXMgY2FuIGJlIGVuYWJsZWQgd2l0aCAtZTxlbnRyb3B5IGZpbGU+IGNvbW1hbmQgbGluZSBvcHRpb24uIFRoZQorIyBzcGVjaWZpZWQgZmlsZSBuZWVkcyB0byBiZSByZWFkYWJsZSBhbmQgd3JpdGFibGUgYnkgd3BhX3N1cHBsaWNhbnQuCisjCisjIElmIHRoZSBvc19nZXRfcmFuZG9tKCkgaXMga25vd24gdG8gcHJvdmlkZSBzdHJvbmcgcmFuZG9tIGRhdGEgKGUuZy4sIG9uCisjIExpbnV4L0JTRCwgdGhlIGJvYXJkIGluIHF1ZXN0aW9uIGlzIGtub3duIHRvIGhhdmUgcmVsaWFibGUgc291cmNlIG9mIHJhbmRvbQorIyBkYXRhIGZyb20gL2Rldi91cmFuZG9tKSwgdGhlIGludGVybmFsIHdwYV9zdXBwbGljYW50IHJhbmRvbSBwb29sIGNhbiBiZQorIyBkaXNhYmxlZC4gVGhpcyB3aWxsIHNhdmUgc29tZSBpbiBiaW5hcnkgc2l6ZSBhbmQgQ1BVIHVzZS4gSG93ZXZlciwgdGhpcworIyBzaG91bGQgb25seSBiZSBjb25zaWRlcmVkIGZvciBidWlsZHMgdGhhdCBhcmUga25vd24gdG8gYmUgdXNlZCBvbiBkZXZpY2VzCisjIHRoYXQgbWVldCB0aGUgcmVxdWlyZW1lbnRzIGRlc2NyaWJlZCBhYm92ZS4KKyNDT05GSUdfTk9fUkFORE9NX1BPT0w9eQorCisjIElFRUUgODAyLjExbiAoSGlnaCBUaHJvdWdocHV0KSBzdXBwb3J0IChtYWlubHkgZm9yIEFQIG1vZGUpCisjQ09ORklHX0lFRUU4MDIxMU49eQorCisjIElFRUUgODAyLjExYWMgKFZlcnkgSGlnaCBUaHJvdWdocHV0KSBzdXBwb3J0IChtYWlubHkgZm9yIEFQIG1vZGUpCisjIChkZXBlbmRzIG9uIENPTkZJR19JRUVFODAyMTFOKQorI0NPTkZJR19JRUVFODAyMTFBQz15CisKKyMgV2lyZWxlc3MgTmV0d29yayBNYW5hZ2VtZW50IChJRUVFIFN0ZCA4MDIuMTF2LTIwMTEpCisjIE5vdGU6IFRoaXMgaXMgZXhwZXJpbWVudGFsIGFuZCBub3QgY29tcGxldGUgaW1wbGVtZW50YXRpb24uCisjQ09ORklHX1dOTT15CisKKyMgSW50ZXJ3b3JraW5nIChJRUVFIDgwMi4xMXUpCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIGZ1bmN0aW9uYWxpdHkgdG8gaW1wcm92ZSBpbnRlcndvcmtpbmcgd2l0aAorIyBleHRlcm5hbCBuZXR3b3JrcyAoR0FTL0FOUVAgdG8gbGVhcm4gbW9yZSBhYm91dCB0aGUgbmV0d29ya3MgYW5kIG5ldHdvcmsKKyMgc2VsZWN0aW9uIGJhc2VkIG9uIGF2YWlsYWJsZSBjcmVkZW50aWFscykuCisjQ09ORklHX0lOVEVSV09SS0lORz15CisKKyMgSG90c3BvdCAyLjAKKyNDT05GSUdfSFMyMD15CisKKyMgRGlzYWJsZSByb2FtaW5nIGluIHdwYV9zdXBwbGljYW50CisjQ09ORklHX05PX1JPQU1JTkc9eQorCisjIEFQIG1vZGUgb3BlcmF0aW9ucyB3aXRoIHdwYV9zdXBwbGljYW50CisjIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGNvbnRyb2xsaW5nIEFQIG1vZGUgb3BlcmF0aW9ucyB3aXRoIHdwYV9zdXBwbGljYW50LiBJdAorIyBzaG91bGQgYmUgbm90ZWQgdGhhdCB0aGlzIGlzIG1haW5seSBhaW1lZCBhdCBzaW1wbGUgY2FzZXMgbGlrZQorIyBXUEEyLVBlcnNvbmFsIHdoaWxlIG1vcmUgY29tcGxleCBjb25maWd1cmF0aW9ucyBsaWtlIFdQQTItRW50ZXJwcmlzZSB3aXRoIGFuCisjIGV4dGVybmFsIFJBRElVUyBzZXJ2ZXIgY2FuIGJlIHN1cHBvcnRlZCB3aXRoIGhvc3RhcGQuCitDT05GSUdfQVA9eQorCitDT05GSUdfQkdTQ0FOX1NJTVBMRT15CisKKyMgUDJQIChXaS1GaSBEaXJlY3QpCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIFAyUCBzdXBwb3J0IGluIHdwYV9zdXBwbGljYW50LiBTZWUgUkVBRE1FLVAyUCBmb3IKKyMgbW9yZSBpbmZvcm1hdGlvbiBvbiBQMlAgb3BlcmF0aW9ucy4KKyNDT05GSUdfUDJQPXkKKworIyBFbmFibGUgVERMUyBzdXBwb3J0CisjQ09ORklHX1RETFM9eQorCisjIFdpLUZpIERpcmVjdAorIyBUaGlzIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSBXaS1GaSBEaXJlY3QgZXh0ZW5zaW9ucyBmb3IgUDJQIHVzaW5nIGFuIGV4dGVybmFsCisjIHByb2dyYW0gdG8gY29udHJvbCB0aGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBleGNoYW5nZXMgaW4gdGhlIG1lc3NhZ2VzLgorI0NPTkZJR19XSUZJX0RJU1BMQVk9eQorCisjIEF1dG9zY2FuCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIGF1dG9tYXRpYyBzY2FuIHN1cHBvcnQgaW4gd3BhX3N1cHBsaWNhbnQuCisjIFNlZSB3cGFfc3VwcGxpY2FudC5jb25mIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGF1dG9zY2FuIHVzYWdlLgorIworIyBFbmFibGluZyBkaXJlY3RseSBhIG1vZHVsZSB3aWxsIGVuYWJsZSBhdXRvc2NhbiBzdXBwb3J0LgorIyBGb3IgZXhwb25lbnRpYWwgbW9kdWxlOgorQ09ORklHX0FVVE9TQ0FOX0VYUE9ORU5USUFMPXkKKyMgRm9yIHBlcmlvZGljIG1vZHVsZToKKyNDT05GSUdfQVVUT1NDQU5fUEVSSU9ESUM9eQorCisjIFBhc3N3b3JkIChhbmQgcGFzc3BocmFzZSwgZXRjLikgYmFja2VuZCBmb3IgZXh0ZXJuYWwgc3RvcmFnZQorIyBUaGVzZSBvcHRpb25hbCBtZWNoYW5pc21zIGNhbiBiZSB1c2VkIHRvIGFkZCBzdXBwb3J0IGZvciBzdG9yaW5nIHBhc3N3b3JkcworIyBhbmQgb3RoZXIgc2VjcmV0cyBpbiBleHRlcm5hbCAodG8gd3BhX3N1cHBsaWNhbnQpIGxvY2F0aW9uLiBUaGlzIGFsbG93cywgZm9yCisjIGV4YW1wbGUsIG9wZXJhdGluZyBzeXN0ZW0gc3BlY2lmaWMga2V5IHN0b3JhZ2UgdG8gYmUgdXNlZAorIworIyBFeHRlcm5hbCBwYXNzd29yZCBiYWNrZW5kIGZvciB0ZXN0aW5nIHB1cnBvc2VzIChkZXZlbG9wZXIgdXNlKQorI0NPTkZJR19FWFRfUEFTU1dPUkRfVEVTVD15CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM5ZTVkMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC5zaApAQCAtMCwwICsxLDg1IEBACisjIS9iaW4vc2gKKworCitXUEFfU1VQX0JJTj0iL3Vzci9zYmluL3dwYV9zdXBwbGljYW50IgorV1BBX1NVUF9QTkFNRT0id3BhX3N1cHBsaWNhbnQiCitXUEFfU1VQX1BJREZJTEU9Ii92YXIvcnVuL3dwYV9zdXBwbGljYW50LiRJRkFDRS5waWQiCitXUEFfU1VQX09QVElPTlM9Ii1CIC1QICRXUEFfU1VQX1BJREZJTEUgLWkgJElGQUNFIgorCitWRVJCT1NJVFk9MAorCisKK2lmIFsgLXMgIiRJRl9XUEFfQ09ORiIgXTsgdGhlbgorCVdQQV9TVVBfQ09ORj0iLWMgJElGX1dQQV9DT05GIgorZWxzZQorCWV4aXQgMAorZmkKKworaWYgWyAhIC14ICIkV1BBX1NVUF9CSU4iIF07IHRoZW4KKwkKKwlpZiBbICIkVkVSQk9TSVRZIiA9ICIxIiBdOyB0aGVuCisJCWVjaG8gIiRXUEFfU1VQX1BOQU1FOiBiaW5hcmllcyBub3QgZXhlY3V0YWJsZSBvciBtaXNzaW5nIGZyb20gJFdQQV9TVVBfQklOIgorCWZpCisJCisJZXhpdCAxCitmaQorCitpZiBbICIkTU9ERSIgPSAic3RhcnQiIF0gOyB0aGVuCisJIyBkcml2ZXIgdHlwZSBvZiBpbnRlcmZhY2UsIGRlZmF1bHRzIHRvIHdleHQgd2hlbiB1bmRlZmluZWQKKwlpZiBbIC1zICIvZXRjL3dwYV9zdXBwbGljYW50L2RyaXZlci4kSUZBQ0UiIF07IHRoZW4KKwkJSUZfV1BBX0RSSVZFUj0kKGNhdCAiL2V0Yy93cGFfc3VwcGxpY2FudC9kcml2ZXIuJElGQUNFIikKKwllbGlmIFsgLXogIiRJRl9XUEFfRFJJVkVSIiBdOyB0aGVuCisJCQorCQlpZiBbICIkVkVSQk9TSVRZIiA9ICIxIiBdOyB0aGVuCisJCQllY2hvICIkV1BBX1NVUF9QTkFNRTogd3BhLWRyaXZlciBub3QgcHJvdmlkZWQsIHVzaW5nIFwid2V4dFwiIgorCQlmaQorCQkKKwkJSUZfV1BBX0RSSVZFUj0id2V4dCIKKwlmaQorCQorCSMgaWYgd2UgaGF2ZSBwYXNzZWQgdGhlIGNyaXRlcmlhLCBzdGFydCB3cGFfc3VwcGxpY2FudAorCWlmIFsgLW4gIiRXUEFfU1VQX0NPTkYiIF07IHRoZW4KKwkJCisJCWlmIFsgIiRWRVJCT1NJVFkiID0gIjEiIF07IHRoZW4KKwkJCWVjaG8gIiRXUEFfU1VQX1BOQU1FOiAkV1BBX1NVUF9CSU4gJFdQQV9TVVBfT1BUSU9OUyAkV1BBX1NVUF9DT05GIC1EICRJRl9XUEFfRFJJVkVSIgorCQlmaQorCQkKKwkJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IFwKKwkJCS0tbmFtZSAkV1BBX1NVUF9QTkFNRSAtLXN0YXJ0YXMgJFdQQV9TVVBfQklOIC0tcGlkZmlsZSAkV1BBX1NVUF9QSURGSUxFIFwKKwkJCS0tICAkV1BBX1NVUF9PUFRJT05TICRXUEFfU1VQX0NPTkYgLUQgJElGX1dQQV9EUklWRVIKKwlmaQorCisJIyBpZiB0aGUgaW50ZXJmYWNlIHNvY2tldCBleGlzdHMsIHRoZW4gd3BhX3N1cHBsaWNhbnQgd2FzIGludm9rZWQgc3VjY2Vzc2Z1bGx5CisJaWYgWyAtUyAiJFdQQV9DT01NT05fQ1RSTF9JRkFDRS8kSUZBQ0UiIF07IHRoZW4KKwkKKwkJaWYgWyAiJFZFUkJPU0lUWSIgPSAiMSIgXTsgdGhlbgorCQkJZWNobyAiJFdQQV9TVVBfUE5BTUU6IGN0cmxfaW50ZXJmYWNlIHNvY2tldCBsb2NhdGVkIGF0ICRXUEFfQ09NTU9OX0NUUkxfSUZBQ0UvJElGQUNFIgorCQlmaQorCisJCWV4aXQgMAorCQkKKwlmaQorCQorZWxpZiBbICIkTU9ERSIgPSAic3RvcCIgXTsgdGhlbgorCisJaWYgWyAtZiAiJFdQQV9TVVBfUElERklMRSIgXTsgdGhlbgorCQkKKwkJaWYgWyAiJFZFUkJPU0lUWSIgPSAiMSIgXTsgdGhlbgorCQkJZWNobyAiJFdQQV9TVVBfUE5BTUU6IHRlcm1pbmF0aW5nICRXUEFfU1VQX1BOQU1FIGRhZW1vbiIKKwkJZmkKKwkJCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IFwKKwkJCS0tbmFtZSAkV1BBX1NVUF9QTkFNRSAtLXBpZGZpbGUJJFdQQV9TVVBfUElERklMRQorCQkJCisJCWlmIFsgLVMgIiRXUEFfQ09NTU9OX0NUUkxfSUZBQ0UvJElGQUNFIiBdOyB0aGVuCisJCQlybSAtZiAkV1BBX0NPTU1PTl9DVFJMX0lGQUNFLyRJRkFDRQorCQlmaQorCQkJCisJCWlmIFsgLWYgIiRXUEFfU1VQX1BJREZJTEUiIF07IHRoZW4KKwkJCXJtIC1mICRXUEFfU1VQX1BJREZJTEUKKwkJZmkKKwlmaQorCitmaQorCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC93cGFfc3VwcGxpY2FudC5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L3dwYV9zdXBwbGljYW50LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgyNThmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC93cGFfc3VwcGxpY2FudC5jb25mCkBAIC0wLDAgKzEsNjkwIEBACisjIyMjIyBFeGFtcGxlIHdwYV9zdXBwbGljYW50IGNvbmZpZ3VyYXRpb24gZmlsZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFRoaXMgZmlsZSBkZXNjcmliZXMgY29uZmlndXJhdGlvbiBmaWxlIGZvcm1hdCBhbmQgbGlzdHMgYWxsIGF2YWlsYWJsZSBvcHRpb24uCisjIFBsZWFzZSBhbHNvIHRha2UgYSBsb29rIGF0IHNpbXBsZXIgY29uZmlndXJhdGlvbiBleGFtcGxlcyBpbiAnZXhhbXBsZXMnCisjIHN1YmRpcmVjdG9yeS4KKyMKKyMgRW1wdHkgbGluZXMgYW5kIGxpbmVzIHN0YXJ0aW5nIHdpdGggIyBhcmUgaWdub3JlZAorCisjIE5PVEUhIFRoaXMgZmlsZSBtYXkgY29udGFpbiBwYXNzd29yZCBpbmZvcm1hdGlvbiBhbmQgc2hvdWxkIHByb2JhYmx5IGJlIG1hZGUKKyMgcmVhZGFibGUgb25seSBieSByb290IHVzZXIgb24gbXVsdGl1c2VyIHN5c3RlbXMuCisKKyMgTm90ZTogQWxsIGZpbGUgcGF0aHMgaW4gdGhpcyBjb25maWd1cmF0aW9uIGZpbGUgc2hvdWxkIHVzZSBmdWxsIChhYnNvbHV0ZSwKKyMgbm90IHJlbGF0aXZlIHRvIHdvcmtpbmcgZGlyZWN0b3J5KSBwYXRoIGluIG9yZGVyIHRvIGFsbG93IHdvcmtpbmcgZGlyZWN0b3J5CisjIHRvIGJlIGNoYW5nZWQuIFRoaXMgY2FuIGhhcHBlbiBpZiB3cGFfc3VwcGxpY2FudCBpcyBydW4gaW4gdGhlIGJhY2tncm91bmQuCisKKyMgV2hldGhlciB0byBhbGxvdyB3cGFfc3VwcGxpY2FudCB0byB1cGRhdGUgKG92ZXJ3cml0ZSkgY29uZmlndXJhdGlvbgorIworIyBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBhbGxvdyB3cGFfc3VwcGxpY2FudCB0byBvdmVyd3JpdGUgY29uZmlndXJhdGlvbgorIyBmaWxlIHdoZW5ldmVyIGNvbmZpZ3VyYXRpb24gaXMgY2hhbmdlZCAoZS5nLiwgbmV3IG5ldHdvcmsgYmxvY2sgaXMgYWRkZWQgd2l0aAorIyB3cGFfY2xpIG9yIHdwYV9ndWksIG9yIGEgcGFzc3dvcmQgaXMgY2hhbmdlZCkuIFRoaXMgaXMgcmVxdWlyZWQgZm9yCisjIHdwYV9jbGkvd3BhX2d1aSB0byBiZSBhYmxlIHRvIHN0b3JlIHRoZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgcGVybWFuZW50bHkuCisjIFBsZWFzZSBub3RlIHRoYXQgb3ZlcndyaXRpbmcgY29uZmlndXJhdGlvbiBmaWxlIHdpbGwgcmVtb3ZlIHRoZSBjb21tZW50cyBmcm9tCisjIGl0LgorI3VwZGF0ZV9jb25maWc9MQorCisjIGdsb2JhbCBjb25maWd1cmF0aW9uIChzaGFyZWQgYnkgYWxsIG5ldHdvcmsgYmxvY2tzKQorIworIyBQYXJhbWV0ZXJzIGZvciB0aGUgY29udHJvbCBpbnRlcmZhY2UuIElmIHRoaXMgaXMgc3BlY2lmaWVkLCB3cGFfc3VwcGxpY2FudAorIyB3aWxsIG9wZW4gYSBjb250cm9sIGludGVyZmFjZSB0aGF0IGlzIGF2YWlsYWJsZSBmb3IgZXh0ZXJuYWwgcHJvZ3JhbXMgdG8KKyMgbWFuYWdlIHdwYV9zdXBwbGljYW50LiBUaGUgbWVhbmluZyBvZiB0aGlzIHN0cmluZyBkZXBlbmRzIG9uIHdoaWNoIGNvbnRyb2wKKyMgaW50ZXJmYWNlIG1lY2hhbmlzbSBpcyB1c2VkLiBGb3IgYWxsIGNhc2VzLCB0aGUgZXhpc3RlbmNlIG9mIHRoaXMgcGFyYW1ldGVyCisjIGluIGNvbmZpZ3VyYXRpb24gaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY29udHJvbCBpbnRlcmZhY2UgaXMKKyMgZW5hYmxlZC4KKyMKKyMgRm9yIFVOSVggZG9tYWluIHNvY2tldHMgKGRlZmF1bHQgb24gTGludXggYW5kIEJTRCk6IFRoaXMgaXMgYSBkaXJlY3RvcnkgdGhhdAorIyB3aWxsIGJlIGNyZWF0ZWQgZm9yIFVOSVggZG9tYWluIHNvY2tldHMgZm9yIGxpc3RlbmluZyB0byByZXF1ZXN0cyBmcm9tCisjIGV4dGVybmFsIHByb2dyYW1zIChDTEkvR1VJLCBldGMuKSBmb3Igc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBjb25maWd1cmF0aW9uLgorIyBUaGUgc29ja2V0IGZpbGUgd2lsbCBiZSBuYW1lZCBiYXNlZCBvbiB0aGUgaW50ZXJmYWNlIG5hbWUsIHNvIG11bHRpcGxlCisjIHdwYV9zdXBwbGljYW50IHByb2Nlc3NlcyBjYW4gYmUgcnVuIGF0IHRoZSBzYW1lIHRpbWUgaWYgbW9yZSB0aGFuIG9uZQorIyBpbnRlcmZhY2UgaXMgdXNlZC4KKyMgL3Zhci9ydW4vd3BhX3N1cHBsaWNhbnQgaXMgdGhlIHJlY29tbWVuZGVkIGRpcmVjdG9yeSBmb3Igc29ja2V0cyBhbmQgYnkKKyMgZGVmYXVsdCwgd3BhX2NsaSB3aWxsIHVzZSBpdCB3aGVuIHRyeWluZyB0byBjb25uZWN0IHdpdGggd3BhX3N1cHBsaWNhbnQuCisjCisjIEFjY2VzcyBjb250cm9sIGZvciB0aGUgY29udHJvbCBpbnRlcmZhY2UgY2FuIGJlIGNvbmZpZ3VyZWQgYnkgc2V0dGluZyB0aGUKKyMgZGlyZWN0b3J5IHRvIGFsbG93IG9ubHkgbWVtYmVycyBvZiBhIGdyb3VwIHRvIHVzZSBzb2NrZXRzLiBUaGlzIHdheSwgaXQgaXMKKyMgcG9zc2libGUgdG8gcnVuIHdwYV9zdXBwbGljYW50IGFzIHJvb3QgKHNpbmNlIGl0IG5lZWRzIHRvIGNoYW5nZSBuZXR3b3JrCisjIGNvbmZpZ3VyYXRpb24gYW5kIG9wZW4gcmF3IHNvY2tldHMpIGFuZCBzdGlsbCBhbGxvdyBHVUkvQ0xJIGNvbXBvbmVudHMgdG8gYmUKKyMgcnVuIGFzIG5vbi1yb290IHVzZXJzLiBIb3dldmVyLCBzaW5jZSB0aGUgY29udHJvbCBpbnRlcmZhY2UgY2FuIGJlIHVzZWQgdG8KKyMgY2hhbmdlIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHRoaXMgYWNjZXNzIG5lZWRzIHRvIGJlIHByb3RlY3RlZCBpbiBtYW55CisjIGNhc2VzLiBCeSBkZWZhdWx0LCB3cGFfc3VwcGxpY2FudCBpcyBjb25maWd1cmVkIHRvIHVzZSBnaWQgMCAocm9vdCkuIElmIHlvdQorIyB3YW50IHRvIGFsbG93IG5vbi1yb290IHVzZXJzIHRvIHVzZSB0aGUgY29udHJvbCBpbnRlcmZhY2UsIGFkZCBhIG5ldyBncm91cAorIyBhbmQgY2hhbmdlIHRoaXMgdmFsdWUgdG8gbWF0Y2ggd2l0aCB0aGF0IGdyb3VwLiBBZGQgdXNlcnMgdGhhdCBzaG91bGQgaGF2ZQorIyBjb250cm9sIGludGVyZmFjZSBhY2Nlc3MgdG8gdGhpcyBncm91cC4gSWYgdGhpcyB2YXJpYWJsZSBpcyBjb21tZW50ZWQgb3V0IG9yCisjIG5vdCBpbmNsdWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCBncm91cCB3aWxsIG5vdCBiZSBjaGFuZ2VkIGZyb20gdGhlCisjIHZhbHVlIGl0IGdvdCBieSBkZWZhdWx0IHdoZW4gdGhlIGRpcmVjdG9yeSBvciBzb2NrZXQgd2FzIGNyZWF0ZWQuCisjCisjIFdoZW4gY29uZmlndXJpbmcgYm90aCB0aGUgZGlyZWN0b3J5IGFuZCBncm91cCwgdXNlIGZvbGxvd2luZyBmb3JtYXQ6CisjIERJUj0vdmFyL3J1bi93cGFfc3VwcGxpY2FudCBHUk9VUD13aGVlbAorIyBESVI9L3Zhci9ydW4vd3BhX3N1cHBsaWNhbnQgR1JPVVA9MAorIyAoZ3JvdXAgY2FuIGJlIGVpdGhlciBncm91cCBuYW1lIG9yIGdpZCkKKyMKKyMgRm9yIFVEUCBjb25uZWN0aW9ucyAoZGVmYXVsdCBvbiBXaW5kb3dzKTogVGhlIHZhbHVlIHdpbGwgYmUgaWdub3JlZC4gVGhpcworIyB2YXJpYWJsZSBpcyBqdXN0IHVzZWQgdG8gc2VsZWN0IHRoYXQgdGhlIGNvbnRyb2wgaW50ZXJmYWNlIGlzIHRvIGJlIGNyZWF0ZWQuCisjIFRoZSB2YWx1ZSBjYW4gYmUgc2V0IHRvLCBlLmcuLCB1ZHAgKGN0cmxfaW50ZXJmYWNlPXVkcCkKKyMKKyMgRm9yIFdpbmRvd3MgTmFtZWQgUGlwZTogVGhpcyB2YWx1ZSBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHNlY3VyaXR5IGRlc2NyaXB0b3IKKyMgZm9yIGNvbnRyb2xsaW5nIGFjY2VzcyB0byB0aGUgY29udHJvbCBpbnRlcmZhY2UuIFNlY3VyaXR5IGRlc2NyaXB0b3IgY2FuIGJlCisjIHNldCB1c2luZyBTZWN1cml0eSBEZXNjcmlwdG9yIFN0cmluZyBGb3JtYXQgKHNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tLworIyBsaWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9zZWNhdXRoei9zZWN1cml0eS8KKyMgc2VjdXJpdHlfZGVzY3JpcHRvcl9zdHJpbmdfZm9ybWF0LmFzcCkuIFRoZSBkZXNjcmlwdG9yIHN0cmluZyBuZWVkcyB0byBiZQorIyBwcmVmaXhlZCB3aXRoIFNEREw9LiBGb3IgZXhhbXBsZSwgY3RybF9pbnRlcmZhY2U9U0RETD1EOiB3b3VsZCBzZXQgYW4gZW1wdHkKKyMgREFDTCAod2hpY2ggd2lsbCByZWplY3QgYWxsIGNvbm5lY3Rpb25zKS4gU2VlIFJFQURNRS1XaW5kb3dzLnR4dCBmb3IgbW9yZQorIyBpbmZvcm1hdGlvbiBhYm91dCBTRERMIHN0cmluZyBmb3JtYXQuCisjCitjdHJsX2ludGVyZmFjZT0vdmFyL3J1bi93cGFfc3VwcGxpY2FudAorCisjIElFRUUgODAyLjFYL0VBUE9MIHZlcnNpb24KKyMgd3BhX3N1cHBsaWNhbnQgaXMgaW1wbGVtZW50ZWQgYmFzZWQgb24gSUVFRSBTdGQgODAyLjFYLTIwMDQgd2hpY2ggZGVmaW5lcworIyBFQVBPTCB2ZXJzaW9uIDIuIEhvd2V2ZXIsIHRoZXJlIGFyZSBtYW55IEFQcyB0aGF0IGRvIG5vdCBoYW5kbGUgdGhlIG5ldworIyB2ZXJzaW9uIG51bWJlciBjb3JyZWN0bHkgKHRoZXkgc2VlbSB0byBkcm9wIHRoZSBmcmFtZXMgY29tcGxldGVseSkuIEluIG9yZGVyCisjIHRvIG1ha2Ugd3BhX3N1cHBsaWNhbnQgaW50ZXJvcGVyYXRlIHdpdGggdGhlc2UgQVBzLCB0aGUgdmVyc2lvbiBudW1iZXIgaXMgc2V0CisjIHRvIDEgYnkgZGVmYXVsdC4gVGhpcyBjb25maWd1cmF0aW9uIHZhbHVlIGNhbiBiZSB1c2VkIHRvIHNldCBpdCB0byB0aGUgbmV3CisjIHZlcnNpb24gKDIpLgorZWFwb2xfdmVyc2lvbj0xCisKKyMgQVAgc2Nhbm5pbmcvc2VsZWN0aW9uCisjIEJ5IGRlZmF1bHQsIHdwYV9zdXBwbGljYW50IHJlcXVlc3RzIGRyaXZlciB0byBwZXJmb3JtIEFQIHNjYW5uaW5nIGFuZCB0aGVuCisjIHVzZXMgdGhlIHNjYW4gcmVzdWx0cyB0byBzZWxlY3QgYSBzdWl0YWJsZSBBUC4gQW5vdGhlciBhbHRlcm5hdGl2ZSBpcyB0bworIyBhbGxvdyB0aGUgZHJpdmVyIHRvIHRha2UgY2FyZSBvZiBBUCBzY2FubmluZyBhbmQgc2VsZWN0aW9uIGFuZCB1c2UKKyMgd3BhX3N1cHBsaWNhbnQganVzdCB0byBwcm9jZXNzIEVBUE9MIGZyYW1lcyBiYXNlZCBvbiBJRUVFIDgwMi4xMSBhc3NvY2lhdGlvbgorIyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBkcml2ZXIuCisjIDE6IHdwYV9zdXBwbGljYW50IGluaXRpYXRlcyBzY2FubmluZyBhbmQgQVAgc2VsZWN0aW9uCisjIDA6IGRyaXZlciB0YWtlcyBjYXJlIG9mIHNjYW5uaW5nLCBBUCBzZWxlY3Rpb24sIGFuZCBJRUVFIDgwMi4xMSBhc3NvY2lhdGlvbgorIyAgICBwYXJhbWV0ZXJzIChlLmcuLCBXUEEgSUUgZ2VuZXJhdGlvbik7IHRoaXMgbW9kZSBjYW4gYWxzbyBiZSB1c2VkIHdpdGgKKyMgICAgbm9uLVdQQSBkcml2ZXJzIHdoZW4gdXNpbmcgSUVFRSA4MDIuMVggbW9kZTsgZG8gbm90IHRyeSB0byBhc3NvY2lhdGUgd2l0aAorIyAgICBBUHMgKGkuZS4sIGV4dGVybmFsIHByb2dyYW0gbmVlZHMgdG8gY29udHJvbCBhc3NvY2lhdGlvbikuIFRoaXMgbW9kZSBtdXN0CisjICAgIGFsc28gYmUgdXNlZCB3aGVuIHVzaW5nIHdpcmVkIEV0aGVybmV0IGRyaXZlcnMuCisjIDI6IGxpa2UgMCwgYnV0IGFzc29jaWF0ZSB3aXRoIEFQcyB1c2luZyBzZWN1cml0eSBwb2xpY3kgYW5kIFNTSUQgKGJ1dCBub3QKKyMgICAgQlNTSUQpOyB0aGlzIGNhbiBiZSB1c2VkLCBlLmcuLCB3aXRoIG5kaXN3cmFwcGVyIGFuZCBORElTIGRyaXZlcnMgdG8KKyMgICAgZW5hYmxlIG9wZXJhdGlvbiB3aXRoIGhpZGRlbiBTU0lEcyBhbmQgb3B0aW1pemVkIHJvYW1pbmc7IGluIHRoaXMgbW9kZSwKKyMgICAgdGhlIG5ldHdvcmsgYmxvY2tzIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgYXJlIHRyaWVkIG9uZSBieSBvbmUgdW50aWwKKyMgICAgdGhlIGRyaXZlciByZXBvcnRzIHN1Y2Nlc3NmdWwgYXNzb2NpYXRpb247IGVhY2ggbmV0d29yayBibG9jayBzaG91bGQgaGF2ZQorIyAgICBleHBsaWNpdCBzZWN1cml0eSBwb2xpY3kgKGkuZS4sIG9ubHkgb25lIG9wdGlvbiBpbiB0aGUgbGlzdHMpIGZvcgorIyAgICBrZXlfbWdtdCwgcGFpcndpc2UsIGdyb3VwLCBwcm90byB2YXJpYWJsZXMKK2FwX3NjYW49MQorCisjIEVBUCBmYXN0IHJlLWF1dGhlbnRpY2F0aW9uCisjIEJ5IGRlZmF1bHQsIGZhc3QgcmUtYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZCBmb3IgYWxsIEVBUCBtZXRob2RzIHRoYXQKKyMgc3VwcG9ydCBpdC4gVGhpcyB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBkaXNhYmxlIGZhc3QgcmUtYXV0aGVudGljYXRpb24uCisjIE5vcm1hbGx5LCB0aGVyZSBpcyBubyBuZWVkIHRvIGRpc2FibGUgdGhpcy4KK2Zhc3RfcmVhdXRoPTEKKworIyBPcGVuU1NMIEVuZ2luZSBzdXBwb3J0CisjIFRoZXNlIG9wdGlvbnMgY2FuIGJlIHVzZWQgdG8gbG9hZCBPcGVuU1NMIGVuZ2luZXMuCisjIFRoZSB0d28gZW5naW5lcyB0aGF0IGFyZSBzdXBwb3J0ZWQgY3VycmVudGx5IGFyZSBzaG93biBiZWxvdzoKKyMgVGhleSBhcmUgYm90aCBmcm9tIHRoZSBvcGVuc2MgcHJvamVjdCAoaHR0cDovL3d3dy5vcGVuc2Mub3JnLykKKyMgQnkgZGVmYXVsdCBubyBlbmdpbmVzIGFyZSBsb2FkZWQuCisjIG1ha2UgdGhlIG9wZW5zYyBlbmdpbmUgYXZhaWxhYmxlCisjb3BlbnNjX2VuZ2luZV9wYXRoPS91c3IvbGliL29wZW5zYy9lbmdpbmVfb3BlbnNjLnNvCisjIG1ha2UgdGhlIHBrY3MxMSBlbmdpbmUgYXZhaWxhYmxlCisjcGtjczExX2VuZ2luZV9wYXRoPS91c3IvbGliL29wZW5zYy9lbmdpbmVfcGtjczExLnNvCisjIGNvbmZpZ3VyZSB0aGUgcGF0aCB0byB0aGUgcGtjczExIG1vZHVsZSByZXF1aXJlZCBieSB0aGUgcGtjczExIGVuZ2luZQorI3BrY3MxMV9tb2R1bGVfcGF0aD0vdXNyL2xpYi9wa2NzMTEvb3BlbnNjLXBrY3MxMS5zbworCisjIER5bmFtaWMgRUFQIG1ldGhvZHMKKyMgSWYgRUFQIG1ldGhvZHMgd2VyZSBidWlsdCBkeW5hbWljYWxseSBhcyBzaGFyZWQgb2JqZWN0IGZpbGVzLCB0aGV5IG5lZWQgdG8gYmUKKyMgbG9hZGVkIGhlcmUgYmVmb3JlIGJlaW5nIHVzZWQgaW4gdGhlIG5ldHdvcmsgYmxvY2tzLiBCeSBkZWZhdWx0LCBFQVAgbWV0aG9kcworIyBhcmUgaW5jbHVkZWQgc3RhdGljYWxseSBpbiB0aGUgYnVpbGQsIHNvIHRoZXNlIGxpbmVzIGFyZSBub3QgbmVlZGVkCisjbG9hZF9keW5hbWljX2VhcD0vdXNyL2xpYi93cGFfc3VwcGxpY2FudC9lYXBfdGxzLnNvCisjbG9hZF9keW5hbWljX2VhcD0vdXNyL2xpYi93cGFfc3VwcGxpY2FudC9lYXBfbWQ1LnNvCisKKyMgRHJpdmVyIGludGVyZmFjZSBwYXJhbWV0ZXJzCisjIFRoaXMgZmllbGQgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIGFyYml0cmFyeSBkcml2ZXIgaW50ZXJhY2UgcGFyYW1ldGVycy4gVGhlCisjIGZvcm1hdCBpcyBzcGVjaWZpYyB0byB0aGUgc2VsZWN0ZWQgZHJpdmVyIGludGVyZmFjZS4gVGhpcyBmaWVsZCBpcyBub3QgdXNlZAorIyBpbiBtb3N0IGNhc2VzLgorI2RyaXZlcl9wYXJhbT0iZmllbGQ9dmFsdWUiCisKKyMgTWF4aW11bSBsaWZldGltZSBmb3IgUE1LU0EgaW4gc2Vjb25kczsgZGVmYXVsdCA0MzIwMAorI2RvdDExUlNOQUNvbmZpZ1BNS0xpZmV0aW1lPTQzMjAwCisjIFRocmVzaG9sZCBmb3IgcmVhdXRoZW50aWNhdGlvbiAocGVyY2VudGFnZSBvZiBQTUsgbGlmZXRpbWUpOyBkZWZhdWx0IDcwCisjZG90MTFSU05BQ29uZmlnUE1LUmVhdXRoVGhyZXNob2xkPTcwCisjIFRpbWVvdXQgZm9yIHNlY3VyaXR5IGFzc29jaWF0aW9uIG5lZ290aWF0aW9uIGluIHNlY29uZHM7IGRlZmF1bHQgNjAKKyNkb3QxMVJTTkFDb25maWdTQVRpbWVvdXQ9NjAKKworIyBuZXR3b3JrIGJsb2NrCisjCisjIEVhY2ggbmV0d29yayAodXN1YWxseSBBUCdzIHNoYXJpbmcgdGhlIHNhbWUgU1NJRCkgaXMgY29uZmlndXJlZCBhcyBhIHNlcGFyYXRlCisjIGJsb2NrIGluIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlLiBUaGUgbmV0d29yayBibG9ja3MgYXJlIGluIHByZWZlcmVuY2Ugb3JkZXIKKyMgKHRoZSBmaXJzdCBtYXRjaCBpcyB1c2VkKS4KKyMKKyMgbmV0d29yayBibG9jayBmaWVsZHM6CisjCisjIGRpc2FibGVkOgorIwkwID0gdGhpcyBuZXR3b3JrIGNhbiBiZSB1c2VkIChkZWZhdWx0KQorIwkxID0gdGhpcyBuZXR3b3JrIGJsb2NrIGlzIGRpc2FibGVkIChjYW4gYmUgZW5hYmxlZCB0aHJvdWdoIGN0cmxfaWZhY2UsCisjCSAgICBlLmcuLCB3aXRoIHdwYV9jbGkgb3Igd3BhX2d1aSkKKyMKKyMgaWRfc3RyOiBOZXR3b3JrIGlkZW50aWZpZXIgc3RyaW5nIGZvciBleHRlcm5hbCBzY3JpcHRzLiBUaGlzIHZhbHVlIGlzIHBhc3NlZAorIwl0byBleHRlcm5hbCBhY3Rpb24gc2NyaXB0IHRocm91Z2ggd3BhX2NsaSBhcyBXUEFfSURfU1RSIGVudmlyb25tZW50CisjCXZhcmlhYmxlIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRvIG5ldHdvcmsgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4KKyMKKyMgc3NpZDogU1NJRCAobWFuZGF0b3J5KTsgZWl0aGVyIGFzIGFuIEFTQ0lJIHN0cmluZyB3aXRoIGRvdWJsZSBxdW90YXRpb24gb3IKKyMJYXMgaGV4IHN0cmluZzsgbmV0d29yayBuYW1lCisjCisjIHNjYW5fc3NpZDoKKyMJMCA9IGRvIG5vdCBzY2FuIHRoaXMgU1NJRCB3aXRoIHNwZWNpZmljIFByb2JlIFJlcXVlc3QgZnJhbWVzIChkZWZhdWx0KQorIwkxID0gc2NhbiB3aXRoIFNTSUQtc3BlY2lmaWMgUHJvYmUgUmVxdWVzdCBmcmFtZXMgKHRoaXMgY2FuIGJlIHVzZWQgdG8KKyMJICAgIGZpbmQgQVBzIHRoYXQgZG8gbm90IGFjY2VwdCBicm9hZGNhc3QgU1NJRCBvciB1c2UgbXVsdGlwbGUgU1NJRHM7CisjCSAgICB0aGlzIHdpbGwgYWRkIGxhdGVuY3kgdG8gc2Nhbm5pbmcsIHNvIGVuYWJsZSB0aGlzIG9ubHkgd2hlbiBuZWVkZWQpCisjCisjIGJzc2lkOiBCU1NJRCAob3B0aW9uYWwpOyBpZiBzZXQsIHRoaXMgbmV0d29yayBibG9jayBpcyB1c2VkIG9ubHkgd2hlbgorIwlhc3NvY2lhdGluZyB3aXRoIHRoZSBBUCB1c2luZyB0aGUgY29uZmlndXJlZCBCU1NJRAorIworIyBwcmlvcml0eTogcHJpb3JpdHkgZ3JvdXAgKGludGVnZXIpCisjIEJ5IGRlZmF1bHQsIGFsbCBuZXR3b3JrcyB3aWxsIGdldCBzYW1lIHByaW9yaXR5IGdyb3VwICgwKS4gSWYgc29tZSBvZiB0aGUKKyMgbmV0d29ya3MgYXJlIG1vcmUgZGVzaXJhYmxlLCB0aGlzIGZpZWxkIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgb3JkZXIgaW4KKyMgd2hpY2ggd3BhX3N1cHBsaWNhbnQgZ29lcyB0aHJvdWdoIHRoZSBuZXR3b3JrcyB3aGVuIHNlbGVjdGluZyBhIEJTUy4gVGhlCisjIHByaW9yaXR5IGdyb3VwcyB3aWxsIGJlIGl0ZXJhdGVkIGluIGRlY3JlYXNpbmcgcHJpb3JpdHkgKGkuZS4sIHRoZSBsYXJnZXIgdGhlCisjIHByaW9yaXR5IHZhbHVlLCB0aGUgc29vbmVyIHRoZSBuZXR3b3JrIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgc2NhbiByZXN1bHRzKS4KKyMgV2l0aGluIGVhY2ggcHJpb3JpdHkgZ3JvdXAsIG5ldHdvcmtzIHdpbGwgYmUgc2VsZWN0ZWQgYmFzZWQgb24gc2VjdXJpdHkKKyMgcG9saWN5LCBzaWduYWwgc3RyZW5ndGgsIGV0Yy4KKyMgUGxlYXNlIG5vdGUgdGhhdCBBUCBzY2FubmluZyB3aXRoIHNjYW5fc3NpZD0xIGFuZCBhcF9zY2FuPTIgbW9kZSBhcmUgbm90CisjIHVzaW5nIHRoaXMgcHJpb3JpdHkgdG8gc2VsZWN0IHRoZSBvcmRlciBmb3Igc2Nhbm5pbmcuIEluc3RlYWQsIHRoZXkgdHJ5IHRoZQorIyBuZXR3b3JrcyBpbiB0aGUgb3JkZXIgdGhhdCB1c2VkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCisjCisjIG1vZGU6IElFRUUgODAyLjExIG9wZXJhdGlvbiBtb2RlCisjIDAgPSBpbmZyYXN0cnVjdHVyZSAoTWFuYWdlZCkgbW9kZSwgaS5lLiwgYXNzb2NpYXRlIHdpdGggYW4gQVAgKGRlZmF1bHQpCisjIDEgPSBJQlNTIChhZC1ob2MsIHBlZXItdG8tcGVlcikKKyMgTm90ZTogSUJTUyBjYW4gb25seSBiZSB1c2VkIHdpdGgga2V5X21nbXQgTk9ORSAocGxhaW50ZXh0IGFuZCBzdGF0aWMgV0VQKQorIyBhbmQga2V5X21nbXQ9V1BBLU5PTkUgKGZpeGVkIGdyb3VwIGtleSBUS0lQL0NDTVApLiBJbiBhZGRpdGlvbiwgYXBfc2NhbiBoYXMKKyMgdG8gYmUgc2V0IHRvIDIgZm9yIElCU1MuIFdQQS1Ob25lIHJlcXVpcmVzIGZvbGxvd2luZyBuZXR3b3JrIGJsb2NrIG9wdGlvbnM6CisjIHByb3RvPVdQQSwga2V5X21nbXQ9V1BBLU5PTkUsIHBhaXJ3aXNlPU5PTkUsIGdyb3VwPVRLSVAgKG9yIENDTVAsIGJ1dCBub3QKKyMgYm90aCksIGFuZCBwc2sgbXVzdCBhbHNvIGJlIHNldC4KKyMKKyMgcHJvdG86IGxpc3Qgb2YgYWNjZXB0ZWQgcHJvdG9jb2xzCisjIFdQQSA9IFdQQS9JRUVFIDgwMi4xMWkvRDMuMAorIyBSU04gPSBXUEEyL0lFRUUgODAyLjExaSAoYWxzbyBXUEEyIGNhbiBiZSB1c2VkIGFzIGFuIGFsaWFzIGZvciBSU04pCisjIElmIG5vdCBzZXQsIHRoaXMgZGVmYXVsdHMgdG86IFdQQSBSU04KKyMKKyMga2V5X21nbXQ6IGxpc3Qgb2YgYWNjZXB0ZWQgYXV0aGVudGljYXRlZCBrZXkgbWFuYWdlbWVudCBwcm90b2NvbHMKKyMgV1BBLVBTSyA9IFdQQSBwcmUtc2hhcmVkIGtleSAodGhpcyByZXF1aXJlcyAncHNrJyBmaWVsZCkKKyMgV1BBLUVBUCA9IFdQQSB1c2luZyBFQVAgYXV0aGVudGljYXRpb24gKHRoaXMgY2FuIHVzZSBhbiBleHRlcm5hbAorIwlwcm9ncmFtLCBlLmcuLCBYc3VwcGxpY2FudCwgZm9yIElFRUUgODAyLjFYIEVBUCBBdXRoZW50aWNhdGlvbgorIyBJRUVFODAyMVggPSBJRUVFIDgwMi4xWCB1c2luZyBFQVAgYXV0aGVudGljYXRpb24gYW5kIChvcHRpb25hbGx5KSBkeW5hbWljYWxseQorIwlnZW5lcmF0ZWQgV0VQIGtleXMKKyMgTk9ORSA9IFdQQSBpcyBub3QgdXNlZDsgcGxhaW50ZXh0IG9yIHN0YXRpYyBXRVAgY291bGQgYmUgdXNlZAorIyBJZiBub3Qgc2V0LCB0aGlzIGRlZmF1bHRzIHRvOiBXUEEtUFNLIFdQQS1FQVAKKyMKKyMgYXV0aF9hbGc6IGxpc3Qgb2YgYWxsb3dlZCBJRUVFIDgwMi4xMSBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG1zCisjIE9QRU4gPSBPcGVuIFN5c3RlbSBhdXRoZW50aWNhdGlvbiAocmVxdWlyZWQgZm9yIFdQQS9XUEEyKQorIyBTSEFSRUQgPSBTaGFyZWQgS2V5IGF1dGhlbnRpY2F0aW9uIChyZXF1aXJlcyBzdGF0aWMgV0VQIGtleXMpCisjIExFQVAgPSBMRUFQL05ldHdvcmsgRUFQIChvbmx5IHVzZWQgd2l0aCBMRUFQKQorIyBJZiBub3Qgc2V0LCBhdXRvbWF0aWMgc2VsZWN0aW9uIGlzIHVzZWQgKE9wZW4gU3lzdGVtIHdpdGggTEVBUCBlbmFibGVkIGlmCisjIExFQVAgaXMgYWxsb3dlZCBhcyBvbmUgb2YgdGhlIEVBUCBtZXRob2RzKS4KKyMKKyMgcGFpcndpc2U6IGxpc3Qgb2YgYWNjZXB0ZWQgcGFpcndpc2UgKHVuaWNhc3QpIGNpcGhlcnMgZm9yIFdQQQorIyBDQ01QID0gQUVTIGluIENvdW50ZXIgbW9kZSB3aXRoIENCQy1NQUMgW1JGQyAzNjEwLCBJRUVFIDgwMi4xMWkvRDcuMF0KKyMgVEtJUCA9IFRlbXBvcmFsIEtleSBJbnRlZ3JpdHkgUHJvdG9jb2wgW0lFRUUgODAyLjExaS9ENy4wXQorIyBOT05FID0gVXNlIG9ubHkgR3JvdXAgS2V5cyAoZGVwcmVjYXRlZCwgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBpZiBBUHMgc3VwcG9ydAorIwlwYWlyd2lzZSBrZXlzKQorIyBJZiBub3Qgc2V0LCB0aGlzIGRlZmF1bHRzIHRvOiBDQ01QIFRLSVAKKyMKKyMgZ3JvdXA6IGxpc3Qgb2YgYWNjZXB0ZWQgZ3JvdXAgKGJyb2FkY2FzdC9tdWx0aWNhc3QpIGNpcGhlcnMgZm9yIFdQQQorIyBDQ01QID0gQUVTIGluIENvdW50ZXIgbW9kZSB3aXRoIENCQy1NQUMgW1JGQyAzNjEwLCBJRUVFIDgwMi4xMWkvRDcuMF0KKyMgVEtJUCA9IFRlbXBvcmFsIEtleSBJbnRlZ3JpdHkgUHJvdG9jb2wgW0lFRUUgODAyLjExaS9ENy4wXQorIyBXRVAxMDQgPSBXRVAgKFdpcmVkIEVxdWl2YWxlbnQgUHJpdmFjeSkgd2l0aCAxMDQtYml0IGtleQorIyBXRVA0MCA9IFdFUCAoV2lyZWQgRXF1aXZhbGVudCBQcml2YWN5KSB3aXRoIDQwLWJpdCBrZXkgW0lFRUUgODAyLjExXQorIyBJZiBub3Qgc2V0LCB0aGlzIGRlZmF1bHRzIHRvOiBDQ01QIFRLSVAgV0VQMTA0IFdFUDQwCisjCisjIHBzazogV1BBIHByZXNoYXJlZCBrZXk7IDI1Ni1iaXQgcHJlLXNoYXJlZCBrZXkKKyMgVGhlIGtleSB1c2VkIGluIFdQQS1QU0sgbW9kZSBjYW4gYmUgZW50ZXJlZCBlaXRoZXIgYXMgNjQgaGV4LWRpZ2l0cywgaS5lLiwKKyMgMzIgYnl0ZXMgb3IgYXMgYW4gQVNDSUkgcGFzc3BocmFzZSAoaW4gd2hpY2ggY2FzZSwgdGhlIHJlYWwgUFNLIHdpbGwgYmUKKyMgZ2VuZXJhdGVkIHVzaW5nIHRoZSBwYXNzcGhyYXNlIGFuZCBTU0lEKS4gQVNDSUkgcGFzc3BocmFzZSBtdXN0IGJlIGJldHdlZW4KKyMgOCBhbmQgNjMgY2hhcmFjdGVycyAoaW5jbHVzaXZlKS4KKyMgVGhpcyBmaWVsZCBpcyBub3QgbmVlZGVkLCBpZiBXUEEtRUFQIGlzIHVzZWQuCisjIE5vdGU6IFNlcGFyYXRlIHRvb2wsIHdwYV9wYXNzcGhyYXNlLCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSAyNTYtYml0IGtleXMKKyMgZnJvbSBBU0NJSSBwYXNzcGhyYXNlLiBUaGlzIHByb2Nlc3MgdXNlcyBsb3Qgb2YgQ1BVIGFuZCB3cGFfc3VwcGxpY2FudAorIyBzdGFydHVwIGFuZCByZWNvbmZpZ3VyYXRpb24gdGltZSBjYW4gYmUgb3B0aW1pemVkIGJ5IGdlbmVyYXRpbmcgdGhlIFBTSyBvbmx5CisjIG9ubHkgd2hlbiB0aGUgcGFzc3BocmFzZSBvciBTU0lEIGhhcyBhY3R1YWxseSBjaGFuZ2VkLgorIworIyBlYXBvbF9mbGFnczogSUVFRSA4MDIuMVgvRUFQT0wgb3B0aW9ucyAoYml0IGZpZWxkKQorIyBEeW5hbWljIFdFUCBrZXkgcmVxdWlyZWQgZm9yIG5vbi1XUEEgbW9kZQorIyBiaXQwICgxKTogcmVxdWlyZSBkeW5hbWljYWxseSBnZW5lcmF0ZWQgdW5pY2FzdCBXRVAga2V5CisjIGJpdDEgKDIpOiByZXF1aXJlIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBicm9hZGNhc3QgV0VQIGtleQorIyAJKDMgPSByZXF1aXJlIGJvdGgga2V5czsgZGVmYXVsdCkKKyMgTm90ZTogV2hlbiB1c2luZyB3aXJlZCBhdXRoZW50aWNhdGlvbiwgZWFwb2xfZmxhZ3MgbXVzdCBiZSBzZXQgdG8gMCBmb3IgdGhlCisjIGF1dGhlbnRpY2F0aW9uIHRvIGJlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuCisjCisjIHByb2FjdGl2ZV9rZXlfY2FjaGluZzoKKyMgRW5hYmxlL2Rpc2FibGUgb3Bwb3J0dW5pc3RpYyBQTUtTQSBjYWNoaW5nIGZvciBXUEEyLgorIyAwID0gZGlzYWJsZWQgKGRlZmF1bHQpCisjIDEgPSBlbmFibGVkCisjCisjIHdlcF9rZXkwLi4zOiBTdGF0aWMgV0VQIGtleSAoQVNDSUkgaW4gZG91YmxlIHF1b3RhdGlvbiwgZS5nLiAiYWJjZGUiIG9yCisjIGhleCB3aXRob3V0IHF1b3RhdGlvbiwgZS5nLiwgMDEwMjAzMDQwNSkKKyMgd2VwX3R4X2tleWlkeDogRGVmYXVsdCBXRVAga2V5IGluZGV4IChUWCkgKDAuLjMpCisjCisjIHBlZXJrZXk6IFdoZXRoZXIgUGVlcktleSBuZWdvdGlhdGlvbiBmb3IgZGlyZWN0IGxpbmtzIChJRUVFIDgwMi4xMWUgRExTKSBpcworIyBhbGxvd2VkLiBUaGlzIGlzIG9ubHkgdXNlZCB3aXRoIFJTTi9XUEEyLgorIyAwID0gZGlzYWJsZWQgKGRlZmF1bHQpCisjIDEgPSBlbmFibGVkCisjcGVlcmtleT0xCisjCisjIEZvbGxvd2luZyBmaWVsZHMgYXJlIG9ubHkgdXNlZCB3aXRoIGludGVybmFsIEVBUCBpbXBsZW1lbnRhdGlvbi4KKyMgZWFwOiBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBhY2NlcHRlZCBFQVAgbWV0aG9kcworIwlNRDUgPSBFQVAtTUQ1ICh1bnNlY3VyZSBhbmQgZG9lcyBub3QgZ2VuZXJhdGUga2V5aW5nIG1hdGVyaWFsIC0+CisjCQkJY2Fubm90IGJlIHVzZWQgd2l0aCBXUEE7IHRvIGJlIHVzZWQgYXMgYSBQaGFzZSAyIG1ldGhvZAorIwkJCXdpdGggRUFQLVBFQVAgb3IgRUFQLVRUTFMpCisjICAgICAgIE1TQ0hBUFYyID0gRUFQLU1TQ0hBUHYyIChjYW5ub3QgYmUgdXNlZCBzZXBhcmF0ZWx5IHdpdGggV1BBOyB0byBiZSB1c2VkCisjCQlhcyBhIFBoYXNlIDIgbWV0aG9kIHdpdGggRUFQLVBFQVAgb3IgRUFQLVRUTFMpCisjICAgICAgIE9UUCA9IEVBUC1PVFAgKGNhbm5vdCBiZSB1c2VkIHNlcGFyYXRlbHkgd2l0aCBXUEE7IHRvIGJlIHVzZWQKKyMJCWFzIGEgUGhhc2UgMiBtZXRob2Qgd2l0aCBFQVAtUEVBUCBvciBFQVAtVFRMUykKKyMgICAgICAgR1RDID0gRUFQLUdUQyAoY2Fubm90IGJlIHVzZWQgc2VwYXJhdGVseSB3aXRoIFdQQTsgdG8gYmUgdXNlZAorIwkJYXMgYSBQaGFzZSAyIG1ldGhvZCB3aXRoIEVBUC1QRUFQIG9yIEVBUC1UVExTKQorIwlUTFMgPSBFQVAtVExTIChjbGllbnQgYW5kIHNlcnZlciBjZXJ0aWZpY2F0ZSkKKyMJUEVBUCA9IEVBUC1QRUFQICh3aXRoIHR1bm5lbGxlZCBFQVAgYXV0aGVudGljYXRpb24pCisjCVRUTFMgPSBFQVAtVFRMUyAod2l0aCB0dW5uZWxsZWQgRUFQIG9yIFBBUC9DSEFQL01TQ0hBUC9NU0NIQVBWMgorIwkJCSBhdXRoZW50aWNhdGlvbikKKyMJSWYgbm90IHNldCwgYWxsIGNvbXBpbGVkIGluIG1ldGhvZHMgYXJlIGFsbG93ZWQuCisjCisjIGlkZW50aXR5OiBJZGVudGl0eSBzdHJpbmcgZm9yIEVBUAorIyBhbm9ueW1vdXNfaWRlbnRpdHk6IEFub255bW91cyBpZGVudGl0eSBzdHJpbmcgZm9yIEVBUCAodG8gYmUgdXNlZCBhcyB0aGUKKyMJdW5lbmNyeXB0ZWQgaWRlbnRpdHkgd2l0aCBFQVAgdHlwZXMgdGhhdCBzdXBwb3J0IGRpZmZlcmVudCB0dW5uZWxsZWQKKyMJaWRlbnRpdHksIGUuZy4sIEVBUC1UVExTKQorIyBwYXNzd29yZDogUGFzc3dvcmQgc3RyaW5nIGZvciBFQVAKKyMgY2FfY2VydDogRmlsZSBwYXRoIHRvIENBIGNlcnRpZmljYXRlIGZpbGUgKFBFTS9ERVIpLiBUaGlzIGZpbGUgY2FuIGhhdmUgb25lCisjCW9yIG1vcmUgdHJ1c3RlZCBDQSBjZXJ0aWZpY2F0ZXMuIElmIGNhX2NlcnQgYW5kIGNhX3BhdGggYXJlIG5vdAorIwlpbmNsdWRlZCwgc2VydmVyIGNlcnRpZmljYXRlIHdpbGwgbm90IGJlIHZlcmlmaWVkLiBUaGlzIGlzIGluc2VjdXJlIGFuZAorIwlhIHRydXN0ZWQgQ0EgY2VydGlmaWNhdGUgc2hvdWxkIGFsd2F5cyBiZSBjb25maWd1cmVkIHdoZW4gdXNpbmcKKyMJRUFQLVRMUy9UVExTL1BFQVAuIEZ1bGwgcGF0aCBzaG91bGQgYmUgdXNlZCBzaW5jZSB3b3JraW5nIGRpcmVjdG9yeSBtYXkKKyMJY2hhbmdlIHdoZW4gd3BhX3N1cHBsaWNhbnQgaXMgcnVuIGluIHRoZSBiYWNrZ3JvdW5kLgorIwlPbiBXaW5kb3dzLCB0cnVzdGVkIENBIGNlcnRpZmljYXRlcyBjYW4gYmUgbG9hZGVkIGZyb20gdGhlIHN5c3RlbQorIwljZXJ0aWZpY2F0ZSBzdG9yZSBieSBzZXR0aW5nIHRoaXMgdG8gY2VydF9zdG9yZTovLzxuYW1lPiwgZS5nLiwKKyMJY2FfY2VydD0iY2VydF9zdG9yZTovL0NBIiBvciBjYV9jZXJ0PSJjZXJ0X3N0b3JlOi8vUk9PVCIuCisjCU5vdGUgdGhhdCB3aGVuIHJ1bm5pbmcgd3BhX3N1cHBsaWNhbnQgYXMgYW4gYXBwbGljYXRpb24sIHRoZSB1c2VyCisjCWNlcnRpZmljYXRlIHN0b3JlIChNeSB1c2VyIGFjY291bnQpIGlzIHVzZWQsIHdoZXJlYXMgY29tcHV0ZXIgc3RvcmUKKyMJKENvbXB1dGVyIGFjY291bnQpIGlzIHVzZWQgd2hlbiBydW5uaW5nIHdwYXN2YyBhcyBhIHNlcnZpY2UuCisjIGNhX3BhdGg6IERpcmVjdG9yeSBwYXRoIGZvciBDQSBjZXJ0aWZpY2F0ZSBmaWxlcyAoUEVNKS4gVGhpcyBwYXRoIG1heQorIwljb250YWluIG11bHRpcGxlIENBIGNlcnRpZmljYXRlcyBpbiBPcGVuU1NMIGZvcm1hdC4gQ29tbW9uIHVzZSBmb3IgdGhpcworIwlpcyB0byBwb2ludCB0byBzeXN0ZW0gdHJ1c3RlZCBDQSBsaXN0IHdoaWNoIGlzIG9mdGVuIGluc3RhbGxlZCBpbnRvCisjCWRpcmVjdG9yeSBsaWtlIC9ldGMvc3NsL2NlcnRzLiBJZiBjb25maWd1cmVkLCB0aGVzZSBjZXJ0aWZpY2F0ZXMgYXJlCisjCWFkZGVkIHRvIHRoZSBsaXN0IG9mIHRydXN0ZWQgQ0FzLiBjYV9jZXJ0IG1heSBhbHNvIGJlIGluY2x1ZGVkIGluIHRoYXQKKyMJY2FzZSwgYnV0IGl0IGlzIG5vdCByZXF1aXJlZC4KKyMgY2xpZW50X2NlcnQ6IEZpbGUgcGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgZmlsZSAoUEVNL0RFUikKKyMJRnVsbCBwYXRoIHNob3VsZCBiZSB1c2VkIHNpbmNlIHdvcmtpbmcgZGlyZWN0b3J5IG1heSBjaGFuZ2Ugd2hlbgorIwl3cGFfc3VwcGxpY2FudCBpcyBydW4gaW4gdGhlIGJhY2tncm91bmQuCisjCUFsdGVybmF0aXZlbHksIGEgbmFtZWQgY29uZmlndXJhdGlvbiBibG9iIGNhbiBiZSB1c2VkIGJ5IHNldHRpbmcgdGhpcworIwl0byBibG9iOi8vPGJsb2IgbmFtZT4uCisjIHByaXZhdGVfa2V5OiBGaWxlIHBhdGggdG8gY2xpZW50IHByaXZhdGUga2V5IGZpbGUgKFBFTS9ERVIvUEZYKQorIwlXaGVuIFBLQ1MjMTIvUEZYIGZpbGUgKC5wMTIvLnBmeCkgaXMgdXNlZCwgY2xpZW50X2NlcnQgc2hvdWxkIGJlCisjCWNvbW1lbnRlZCBvdXQuIEJvdGggdGhlIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZSB3aWxsIGJlIHJlYWQgZnJvbQorIwl0aGUgUEtDUyMxMiBmaWxlIGluIHRoaXMgY2FzZS4gRnVsbCBwYXRoIHNob3VsZCBiZSB1c2VkIHNpbmNlIHdvcmtpbmcKKyMJZGlyZWN0b3J5IG1heSBjaGFuZ2Ugd2hlbiB3cGFfc3VwcGxpY2FudCBpcyBydW4gaW4gdGhlIGJhY2tncm91bmQuCisjCVdpbmRvd3MgY2VydGlmaWNhdGUgc3RvcmUgY2FuIGJlIHVzZWQgYnkgbGVhdmluZyBjbGllbnRfY2VydCBvdXQgYW5kCisjCWNvbmZpZ3VyaW5nIHByaXZhdGVfa2V5IGluIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdHM6CisjCWNlcnQ6Ly9zdWJzdHJpbmdfdG9fbWF0Y2gKKyMJaGFzaDovL2NlcnRpZmljYXRlX3RodW1icHJpbnRfaW5faGV4CisjCWZvciBleGFtcGxlOiBwcml2YXRlX2tleT0iaGFzaDovLzYzMDkzYWE5YzQ3ZjU2YWU4ODMzNGM3YjY1YTQiCisjCU5vdGUgdGhhdCB3aGVuIHJ1bm5pbmcgd3BhX3N1cHBsaWNhbnQgYXMgYW4gYXBwbGljYXRpb24sIHRoZSB1c2VyCisjCWNlcnRpZmljYXRlIHN0b3JlIChNeSB1c2VyIGFjY291bnQpIGlzIHVzZWQsIHdoZXJlYXMgY29tcHV0ZXIgc3RvcmUKKyMJKENvbXB1dGVyIGFjY291bnQpIGlzIHVzZWQgd2hlbiBydW5uaW5nIHdwYXN2YyBhcyBhIHNlcnZpY2UuCisjCUFsdGVybmF0aXZlbHksIGEgbmFtZWQgY29uZmlndXJhdGlvbiBibG9iIGNhbiBiZSB1c2VkIGJ5IHNldHRpbmcgdGhpcworIwl0byBibG9iOi8vPGJsb2IgbmFtZT4uCisjIHByaXZhdGVfa2V5X3Bhc3N3ZDogUGFzc3dvcmQgZm9yIHByaXZhdGUga2V5IGZpbGUgKGlmIGxlZnQgb3V0LCB0aGlzIHdpbGwgYmUKKyMJYXNrZWQgdGhyb3VnaCBjb250cm9sIGludGVyZmFjZSkKKyMgZGhfZmlsZTogRmlsZSBwYXRoIHRvIERIL0RTQSBwYXJhbWV0ZXJzIGZpbGUgKGluIFBFTSBmb3JtYXQpCisjCVRoaXMgaXMgYW4gb3B0aW9uYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciBzZXR0aW5nIHBhcmFtZXRlcnMgZm9yIGFuCisjCWVwaGVtZXJhbCBESCBrZXkgZXhjaGFuZ2UuIEluIG1vc3QgY2FzZXMsIHRoZSBkZWZhdWx0IFJTQQorIwlhdXRoZW50aWNhdGlvbiBkb2VzIG5vdCB1c2UgdGhpcyBjb25maWd1cmF0aW9uLiBIb3dldmVyLCBpdCBpcyBwb3NzaWJsZQorIwlzZXR1cCBSU0EgdG8gdXNlIGVwaGVtZXJhbCBESCBrZXkgZXhjaGFuZ2UuIEluIGFkZGl0aW9uLCBjaXBoZXJzIHdpdGgKKyMJRFNBIGtleXMgYWx3YXlzIHVzZSBlcGhlbWVyYWwgREgga2V5cy4gVGhpcyBjYW4gYmUgdXNlZCB0byBhY2hpZXZlCisjCWZvcndhcmQgc2VjcmVjeS4gSWYgdGhlIGZpbGUgaXMgaW4gRFNBIHBhcmFtZXRlcnMgZm9ybWF0LCBpdCB3aWxsIGJlCisjCWF1dG9tYXRpY2FsbHkgY29udmVydGVkIGludG8gREggcGFyYW1zLgorIyBzdWJqZWN0X21hdGNoOiBTdWJzdHJpbmcgdG8gYmUgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBzdWJqZWN0IG9mIHRoZQorIwlhdXRoZW50aWNhdGlvbiBzZXJ2ZXIgY2VydGlmaWNhdGUuIElmIHRoaXMgc3RyaW5nIGlzIHNldCwgdGhlIHNlcnZlcgorIwlzZXJ0aWZpY2F0ZSBpcyBvbmx5IGFjY2VwdGVkIGlmIGl0IGNvbnRhaW5zIHRoaXMgc3RyaW5nIGluIHRoZSBzdWJqZWN0LgorIwlUaGUgc3ViamVjdCBzdHJpbmcgaXMgaW4gZm9sbG93aW5nIGZvcm1hdDoKKyMJL0M9VVMvU1Q9Q0EvTD1TYW4gRnJhbmNpc2NvL0NOPVRlc3QgQVMvZW1haWxBZGRyZXNzPWFzQGV4YW1wbGUuY29tCisjIGFsdHN1YmplY3RfbWF0Y2g6IFNlbWljb2xvbiBzZXBhcmF0ZWQgc3RyaW5nIG9mIGVudHJpZXMgdG8gYmUgbWF0Y2hlZCBhZ2FpbnN0CisjCXRoZSBhbHRlcm5hdGl2ZSBzdWJqZWN0IG5hbWUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHNlcnZlciBjZXJ0aWZpY2F0ZS4KKyMJSWYgdGhpcyBzdHJpbmcgaXMgc2V0LCB0aGUgc2VydmVyIHNlcnRpZmljYXRlIGlzIG9ubHkgYWNjZXB0ZWQgaWYgaXQKKyMJY29udGFpbnMgb25lIG9mIHRoZSBlbnRyaWVzIGluIGFuIGFsdGVybmF0aXZlIHN1YmplY3QgbmFtZSBleHRlbnNpb24uCisjCWFsdFN1YmplY3ROYW1lIHN0cmluZyBpcyBpbiBmb2xsb3dpbmcgZm9ybWF0OiBUWVBFOlZBTFVFCisjCUV4YW1wbGU6IEVNQUlMOnNlcnZlckBleGFtcGxlLmNvbQorIwlFeGFtcGxlOiBETlM6c2VydmVyLmV4YW1wbGUuY29tO0ROUzpzZXJ2ZXIyLmV4YW1wbGUuY29tCisjCUZvbGxvd2luZyB0eXBlcyBhcmUgc3VwcG9ydGVkOiBFTUFJTCwgRE5TLCBVUkkKKyMgcGhhc2UxOiBQaGFzZTEgKG91dGVyIGF1dGhlbnRpY2F0aW9uLCBpLmUuLCBUTFMgdHVubmVsKSBwYXJhbWV0ZXJzCisjCShzdHJpbmcgd2l0aCBmaWVsZC12YWx1ZSBwYWlycywgZS5nLiwgInBlYXB2ZXI9MCIgb3IKKyMJInBlYXB2ZXI9MSBwZWFwbGFiZWw9MSIpCisjCSdwZWFwdmVyJyBjYW4gYmUgdXNlZCB0byBmb3JjZSB3aGljaCBQRUFQIHZlcnNpb24gKDAgb3IgMSkgaXMgdXNlZC4KKyMJJ3BlYXBsYWJlbD0xJyBjYW4gYmUgdXNlZCB0byBmb3JjZSBuZXcgbGFiZWwsICJjbGllbnQgUEVBUCBlbmNyeXB0aW9uIiwKKyMJdG8gYmUgdXNlZCBkdXJpbmcga2V5IGRlcml2YXRpb24gd2hlbiBQRUFQdjEgb3IgbmV3ZXIuIE1vc3QgZXhpc3RpbmcKKyMJUEVBUHYxIGltcGxlbWVudGF0aW9uIHNlZW0gdG8gYmUgdXNpbmcgdGhlIG9sZCBsYWJlbCwgImNsaWVudCBFQVAKKyMJZW5jcnlwdGlvbiIsIGFuZCB3cGFfc3VwcGxpY2FudCBpcyBub3cgdXNpbmcgdGhhdCBhcyB0aGUgZGVmYXVsdCB2YWx1ZS4KKyMJU29tZSBzZXJ2ZXJzLCBlLmcuLCBSYWRpYXRvciwgbWF5IHJlcXVpcmUgcGVhcGxhYmVsPTEgY29uZmlndXJhdGlvbiB0bworIwlpbnRlcm9wZXJhdGUgd2l0aCBQRUFQdjE7IHNlZSBlYXBfdGVzdGluZy50eHQgZm9yIG1vcmUgZGV0YWlscy4KKyMJJ3BlYXBfb3V0ZXJfc3VjY2Vzcz0wJyBjYW4gYmUgdXNlZCB0byB0ZXJtaW5hdGUgUEVBUCBhdXRoZW50aWNhdGlvbiBvbgorIwl0dW5uZWxlZCBFQVAtU3VjY2Vzcy4gVGhpcyBpcyByZXF1aXJlZCB3aXRoIHNvbWUgUkFESVVTIHNlcnZlcnMgdGhhdAorIwlpbXBsZW1lbnQgZHJhZnQtam9zZWZzc29uLXBwcGV4dC1lYXAtdGxzLWVhcC0wNS50eHQgKGUuZy4sCisjCUx1Y2VudCBOYXZpc1JhZGl1cyB2NC40LjAgd2l0aCBQRUFQIGluICJJRVRGIERyYWZ0IDUiIG1vZGUpCisjCWluY2x1ZGVfdGxzX2xlbmd0aD0xIGNhbiBiZSB1c2VkIHRvIGZvcmNlIHdwYV9zdXBwbGljYW50IHRvIGluY2x1ZGUKKyMJVExTIE1lc3NhZ2UgTGVuZ3RoIGZpZWxkIGluIGFsbCBUTFMgbWVzc2FnZXMgZXZlbiBpZiB0aGV5IGFyZSBub3QKKyMJZnJhZ21lbnRlZC4KKyMJc2ltX21pbl9udW1fY2hhbD0zIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSBFQVAtU0lNIHRvIHJlcXVpcmUgdGhyZWUKKyMJY2hhbGxlbmdlcyAoYnkgZGVmYXVsdCwgaXQgYWNjZXB0cyAyIG9yIDMpCisjIHBoYXNlMjogUGhhc2UyIChpbm5lciBhdXRoZW50aWNhdGlvbiB3aXRoIFRMUyB0dW5uZWwpIHBhcmFtZXRlcnMKKyMJKHN0cmluZyB3aXRoIGZpZWxkLXZhbHVlIHBhaXJzLCBlLmcuLCAiYXV0aD1NU0NIQVBWMiIgZm9yIEVBUC1QRUFQIG9yCisjCSJhdXRoZWFwPU1TQ0hBUFYyIGF1dGhlYXA9TUQ1IiBmb3IgRUFQLVRUTFMpCisjIEZvbGxvd2luZyBjZXJ0aWZpY2F0ZS9wcml2YXRlIGtleSBmaWVsZHMgYXJlIHVzZWQgaW4gaW5uZXIgUGhhc2UyCisjIGF1dGhlbnRpY2F0aW9uIHdoZW4gdXNpbmcgRUFQLVRUTFMgb3IgRUFQLVBFQVAuCisjIGNhX2NlcnQyOiBGaWxlIHBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZS4gVGhpcyBmaWxlIGNhbiBoYXZlIG9uZSBvciBtb3JlCisjCXRydXN0ZWQgQ0EgY2VydGlmaWNhdGVzLiBJZiBjYV9jZXJ0MiBhbmQgY2FfcGF0aDIgYXJlIG5vdCBpbmNsdWRlZCwKKyMJc2VydmVyIGNlcnRpZmljYXRlIHdpbGwgbm90IGJlIHZlcmlmaWVkLiBUaGlzIGlzIGluc2VjdXJlIGFuZCBhIHRydXN0ZWQKKyMJQ0EgY2VydGlmaWNhdGUgc2hvdWxkIGFsd2F5cyBiZSBjb25maWd1cmVkLgorIyBjYV9wYXRoMjogRGlyZWN0b3J5IHBhdGggZm9yIENBIGNlcnRpZmljYXRlIGZpbGVzIChQRU0pCisjIGNsaWVudF9jZXJ0MjogRmlsZSBwYXRoIHRvIGNsaWVudCBjZXJ0aWZpY2F0ZSBmaWxlCisjIHByaXZhdGVfa2V5MjogRmlsZSBwYXRoIHRvIGNsaWVudCBwcml2YXRlIGtleSBmaWxlCisjIHByaXZhdGVfa2V5Ml9wYXNzd2Q6IFBhc3N3b3JkIGZvciBwcml2YXRlIGtleSBmaWxlCisjIGRoX2ZpbGUyOiBGaWxlIHBhdGggdG8gREgvRFNBIHBhcmFtZXRlcnMgZmlsZSAoaW4gUEVNIGZvcm1hdCkKKyMgc3ViamVjdF9tYXRjaDI6IFN1YnN0cmluZyB0byBiZSBtYXRjaGVkIGFnYWluc3QgdGhlIHN1YmplY3Qgb2YgdGhlCisjCWF1dGhlbnRpY2F0aW9uIHNlcnZlciBjZXJ0aWZpY2F0ZS4KKyMgYWx0c3ViamVjdF9tYXRjaDI6IFN1YnN0cmluZyB0byBiZSBtYXRjaGVkIGFnYWluc3QgdGhlIGFsdGVybmF0aXZlIHN1YmplY3QKKyMJbmFtZSBvZiB0aGUgYXV0aGVudGljYXRpb24gc2VydmVyIGNlcnRpZmljYXRlLgorIworIyBmcmFnbWVudF9zaXplOiBNYXhpbXVtIEVBUCBmcmFnbWVudCBzaXplIGluIGJ5dGVzIChkZWZhdWx0IDEzOTgpLgorIwlUaGlzIHZhbHVlIGxpbWl0cyB0aGUgZnJhZ21lbnQgc2l6ZSBmb3IgRUFQIG1ldGhvZHMgdGhhdCBzdXBwb3J0CisjCWZyYWdtZW50YXRpb24gKGUuZy4sIEVBUC1UTFMgYW5kIEVBUC1QRUFQKS4gVGhpcyB2YWx1ZSBzaG91bGQgYmUgc2V0CisjCXNtYWxsIGVub3VnaCB0byBtYWtlIHRoZSBFQVAgbWVzc2FnZXMgZml0IGluIE1UVSBvZiB0aGUgbmV0d29yaworIwlpbnRlcmZhY2UgdXNlZCBmb3IgRUFQT0wuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHN1aXRhYmxlIGZvciBtb3N0CisjCWNhc2VzLgorIworIyBFQVAtUFNLIHZhcmlhYmxlczoKKyMgZWFwcHNrOiAxNi1ieXRlICgxMjgtYml0LCAzMiBoZXggZGlnaXRzKSBwcmUtc2hhcmVkIGtleSBpbiBoZXggZm9ybWF0CisjIG5haTogdXNlciBOQUkKKyMKKyMgRUFQLVBBWCB2YXJpYWJsZXM6CisjIGVhcHBzazogMTYtYnl0ZSAoMTI4LWJpdCwgMzIgaGV4IGRpZ2l0cykgcHJlLXNoYXJlZCBrZXkgaW4gaGV4IGZvcm1hdAorIworIyBFQVAtU0FLRSB2YXJpYWJsZXM6CisjIGVhcHBzazogMzItYnl0ZSAoMjU2LWJpdCwgNjQgaGV4IGRpZ2l0cykgcHJlLXNoYXJlZCBrZXkgaW4gaGV4IGZvcm1hdAorIwkodGhpcyBpcyBjb25jYXRlbmF0aW9uIG9mIFJvb3QtU2VjcmV0LUEgYW5kIFJvb3QtU2VjcmV0LUIpCisjIG5haTogdXNlciBOQUkgKFBFRVJJRCkKKyMKKyMgRUFQLUdQU0sgdmFyaWFibGVzOgorIyBlYXBwc2s6IFByZS1zaGFyZWQga2V5IGluIGhleCBmb3JtYXQgKGF0IGxlYXN0IDEyOCBiaXRzLCBpLmUuLCAzMiBoZXggZGlnaXRzKQorIyBuYWk6IHVzZXIgTkFJIChJRF9DbGllbnQpCisjCisjIEVBUC1GQVNUIHZhcmlhYmxlczoKKyMgcGFjX2ZpbGU6IEZpbGUgcGF0aCBmb3IgdGhlIFBBQyBlbnRyaWVzLiB3cGFfc3VwcGxpY2FudCB3aWxsIG5lZWQgdG8gYmUgYWJsZQorIwl0byBjcmVhdGUgdGhpcyBmaWxlIGFuZCB3cml0ZSB1cGRhdGVzIHRvIGl0IHdoZW4gUEFDIGlzIGJlaW5nCisjCXByb3Zpc2lvbmVkIG9yIHJlZnJlc2hlZC4gRnVsbCBwYXRoIHRvIHRoZSBmaWxlIHNob3VsZCBiZSB1c2VkIHNpbmNlCisjCXdvcmtpbmcgZGlyZWN0b3J5IG1heSBjaGFuZ2Ugd2hlbiB3cGFfc3VwcGxpY2FudCBpcyBydW4gaW4gdGhlCisjCWJhY2tncm91bmQuIEFsdGVybmF0aXZlbHksIGEgbmFtZWQgY29uZmlndXJhdGlvbiBibG9iIGNhbiBiZSB1c2VkIGJ5CisjCXNldHRpbmcgdGhpcyB0byBibG9iOi8vPGJsb2IgbmFtZT4KKyMgcGhhc2UxOiBmYXN0X3Byb3Zpc2lvbmluZz0xIG9wdGlvbiBlbmFibGVzIGluLWxpbmUgcHJvdmlzaW9uaW5nIG9mIEVBUC1GQVNUCisjCWNyZWRlbnRpYWxzIChQQUMpCisjCisjIHdwYV9zdXBwbGljYW50IHN1cHBvcnRzIG51bWJlciBvZiAiRUFQIHdvcmthcm91bmRzIiB0byB3b3JrIGFyb3VuZAorIyBpbnRlcm9wZXJhYmlsaXR5IGlzc3VlcyB3aXRoIGluY29ycmVjdGx5IGJlaGF2aW5nIGF1dGhlbnRpY2F0aW9uIHNlcnZlcnMuCisjIFRoZXNlIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgYmVjYXVzZSBzb21lIG9mIHRoZSBpc3N1ZXMgYXJlIHByZXNlbnQgaW4gbGFyZ2UKKyMgbnVtYmVyIG9mIGF1dGhlbnRpY2F0aW9uIHNlcnZlcnMuIFN0cmljdCBFQVAgY29uZm9ybWFuY2UgbW9kZSBjYW4gYmUKKyMgY29uZmlndXJlZCBieSBkaXNhYmxpbmcgd29ya2Fyb3VuZHMgd2l0aCBlYXBfd29ya2Fyb3VuZD0wLgorCisjIEV4YW1wbGUgYmxvY2tzOgorCisjIFNpbXBsZSBjYXNlOiBXUEEtUFNLLCBQU0sgYXMgYW4gQVNDSUkgcGFzc3BocmFzZSwgYWxsb3cgYWxsIHZhbGlkIGNpcGhlcnMKK25ldHdvcms9eworCXNzaWQ9InNpbXBsZSIKKwlwc2s9InZlcnkgc2VjcmV0IHBhc3NwaHJhc2UiCisJcHJpb3JpdHk9NQorfQorCisjIFNhbWUgYXMgcHJldmlvdXMsIGJ1dCByZXF1ZXN0IFNTSUQtc3BlY2lmaWMgc2Nhbm5pbmcgKGZvciBBUHMgdGhhdCByZWplY3QKKyMgYnJvYWRjYXN0IFNTSUQpCituZXR3b3JrPXsKKwlzc2lkPSJzZWNvbmQgc3NpZCIKKwlzY2FuX3NzaWQ9MQorCXBzaz0idmVyeSBzZWNyZXQgcGFzc3BocmFzZSIKKwlwcmlvcml0eT0yCit9CisKKyMgT25seSBXUEEtUFNLIGlzIHVzZWQuIEFueSB2YWxpZCBjaXBoZXIgY29tYmluYXRpb24gaXMgYWNjZXB0ZWQuCituZXR3b3JrPXsKKwlzc2lkPSJleGFtcGxlIgorCXByb3RvPVdQQQorCWtleV9tZ210PVdQQS1QU0sKKwlwYWlyd2lzZT1DQ01QIFRLSVAKKwlncm91cD1DQ01QIFRLSVAgV0VQMTA0IFdFUDQwCisJcHNrPTA2YjRiZTE5ZGEyODlmNDc1YWE0NmEzM2NiNzkzMDI5ZDRhYjNkYjdhMjNlZTkyMzgyZWIwMTA2YzcyYWM3YmIKKwlwcmlvcml0eT0yCit9CisKKyMgT25seSBXUEEtRUFQIGlzIHVzZWQuIEJvdGggQ0NNUCBhbmQgVEtJUCBpcyBhY2NlcHRlZC4gQW4gQVAgdGhhdCB1c2VkIFdFUDEwNAorIyBvciBXRVA0MCBhcyB0aGUgZ3JvdXAgY2lwaGVyIHdpbGwgbm90IGJlIGFjY2VwdGVkLgorbmV0d29yaz17CisJc3NpZD0iZXhhbXBsZSIKKwlwcm90bz1SU04KKwlrZXlfbWdtdD1XUEEtRUFQCisJcGFpcndpc2U9Q0NNUCBUS0lQCisJZ3JvdXA9Q0NNUCBUS0lQCisJZWFwPVRMUworCWlkZW50aXR5PSJ1c2VyQGV4YW1wbGUuY29tIgorCWNhX2NlcnQ9Ii9ldGMvY2VydC9jYS5wZW0iCisJY2xpZW50X2NlcnQ9Ii9ldGMvY2VydC91c2VyLnBlbSIKKwlwcml2YXRlX2tleT0iL2V0Yy9jZXJ0L3VzZXIucHJ2IgorCXByaXZhdGVfa2V5X3Bhc3N3ZD0icGFzc3dvcmQiCisJcHJpb3JpdHk9MQorfQorCisjIEVBUC1QRUFQL01TQ0hBUHYyIGNvbmZpZ3VyYXRpb24gZm9yIFJBRElVUyBzZXJ2ZXJzIHRoYXQgdXNlIHRoZSBuZXcgcGVhcGxhYmVsCisjIChlLmcuLCBSYWRpYXRvcikKK25ldHdvcms9eworCXNzaWQ9ImV4YW1wbGUiCisJa2V5X21nbXQ9V1BBLUVBUAorCWVhcD1QRUFQCisJaWRlbnRpdHk9InVzZXJAZXhhbXBsZS5jb20iCisJcGFzc3dvcmQ9ImZvb2JhciIKKwljYV9jZXJ0PSIvZXRjL2NlcnQvY2EucGVtIgorCXBoYXNlMT0icGVhcGxhYmVsPTEiCisJcGhhc2UyPSJhdXRoPU1TQ0hBUFYyIgorCXByaW9yaXR5PTEwCit9CisKKyMgRUFQLVRUTFMvRUFQLU1ENS1DaGFsbGVuZ2UgY29uZmlndXJhdGlvbiB3aXRoIGFub255bW91cyBpZGVudGl0eSBmb3IgdGhlCisjIHVuZW5jcnlwdGVkIHVzZS4gUmVhbCBpZGVudGl0eSBpcyBzZW50IG9ubHkgd2l0aGluIGFuIGVuY3J5cHRlZCBUTFMgdHVubmVsLgorbmV0d29yaz17CisJc3NpZD0iZXhhbXBsZSIKKwlrZXlfbWdtdD1XUEEtRUFQCisJZWFwPVRUTFMKKwlpZGVudGl0eT0idXNlckBleGFtcGxlLmNvbSIKKwlhbm9ueW1vdXNfaWRlbnRpdHk9ImFub255bW91c0BleGFtcGxlLmNvbSIKKwlwYXNzd29yZD0iZm9vYmFyIgorCWNhX2NlcnQ9Ii9ldGMvY2VydC9jYS5wZW0iCisJcHJpb3JpdHk9MgorfQorCisjIEVBUC1UVExTL01TQ0hBUHYyIGNvbmZpZ3VyYXRpb24gd2l0aCBhbm9ueW1vdXMgaWRlbnRpdHkgZm9yIHRoZSB1bmVuY3J5cHRlZAorIyB1c2UuIFJlYWwgaWRlbnRpdHkgaXMgc2VudCBvbmx5IHdpdGhpbiBhbiBlbmNyeXB0ZWQgVExTIHR1bm5lbC4KK25ldHdvcms9eworCXNzaWQ9ImV4YW1wbGUiCisJa2V5X21nbXQ9V1BBLUVBUAorCWVhcD1UVExTCisJaWRlbnRpdHk9InVzZXJAZXhhbXBsZS5jb20iCisJYW5vbnltb3VzX2lkZW50aXR5PSJhbm9ueW1vdXNAZXhhbXBsZS5jb20iCisJcGFzc3dvcmQ9ImZvb2JhciIKKwljYV9jZXJ0PSIvZXRjL2NlcnQvY2EucGVtIgorCXBoYXNlMj0iYXV0aD1NU0NIQVBWMiIKK30KKworIyBXUEEtRUFQLCBFQVAtVFRMUyB3aXRoIGRpZmZlcmVudCBDQSBjZXJ0aWZpY2F0ZSB1c2VkIGZvciBvdXRlciBhbmQgaW5uZXIKKyMgYXV0aGVudGljYXRpb24uCituZXR3b3JrPXsKKwlzc2lkPSJleGFtcGxlIgorCWtleV9tZ210PVdQQS1FQVAKKwllYXA9VFRMUworCSMgUGhhc2UxIC8gb3V0ZXIgYXV0aGVudGljYXRpb24KKwlhbm9ueW1vdXNfaWRlbnRpdHk9ImFub255bW91c0BleGFtcGxlLmNvbSIKKwljYV9jZXJ0PSIvZXRjL2NlcnQvY2EucGVtIgorCSMgUGhhc2UgMiAvIGlubmVyIGF1dGhlbnRpY2F0aW9uCisJcGhhc2UyPSJhdXRoZWFwPVRMUyIKKwljYV9jZXJ0Mj0iL2V0Yy9jZXJ0L2NhMi5wZW0iCisJY2xpZW50X2NlcnQyPSIvZXRjL2Nlci91c2VyLnBlbSIKKwlwcml2YXRlX2tleTI9Ii9ldGMvY2VyL3VzZXIucHJ2IgorCXByaXZhdGVfa2V5Ml9wYXNzd2Q9InBhc3N3b3JkIgorCXByaW9yaXR5PTIKK30KKworIyBCb3RoIFdQQS1QU0sgYW5kIFdQQS1FQVAgaXMgYWNjZXB0ZWQuIE9ubHkgQ0NNUCBpcyBhY2NlcHRlZCBhcyBwYWlyd2lzZSBhbmQKKyMgZ3JvdXAgY2lwaGVyLgorbmV0d29yaz17CisJc3NpZD0iZXhhbXBsZSIKKwlic3NpZD0wMDoxMToyMjozMzo0NDo1NQorCXByb3RvPVdQQSBSU04KKwlrZXlfbWdtdD1XUEEtUFNLIFdQQS1FQVAKKwlwYWlyd2lzZT1DQ01QCisJZ3JvdXA9Q0NNUAorCXBzaz0wNmI0YmUxOWRhMjg5ZjQ3NWFhNDZhMzNjYjc5MzAyOWQ0YWIzZGI3YTIzZWU5MjM4MmViMDEwNmM3MmFjN2JiCit9CisKKyMgU3BlY2lhbCBjaGFyYWN0ZXJzIGluIFNTSUQsIHNvIHVzZSBoZXggc3RyaW5nLiBEZWZhdWx0IHRvIFdQQS1QU0ssIFdQQS1FQVAKKyMgYW5kIGFsbCB2YWxpZCBjaXBoZXJzLgorbmV0d29yaz17CisJc3NpZD0wMDAxMDIwMworCXBzaz0wMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmCit9CisKKworIyBJRUVFIDgwMi4xWC9FQVBPTCB3aXRoIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBXRVAga2V5cyAoaS5lLiwgbm8gV1BBKSB1c2luZworIyBFQVAtVExTIGZvciBhdXRoZW50aWNhdGlvbiBhbmQga2V5IGdlbmVyYXRpb247IHJlcXVpcmUgYm90aCB1bmljYXN0IGFuZAorIyBicm9hZGNhc3QgV0VQIGtleXMuCituZXR3b3JrPXsKKwlzc2lkPSIxeC10ZXN0IgorCWtleV9tZ210PUlFRUU4MDIxWAorCWVhcD1UTFMKKwlpZGVudGl0eT0idXNlckBleGFtcGxlLmNvbSIKKwljYV9jZXJ0PSIvZXRjL2NlcnQvY2EucGVtIgorCWNsaWVudF9jZXJ0PSIvZXRjL2NlcnQvdXNlci5wZW0iCisJcHJpdmF0ZV9rZXk9Ii9ldGMvY2VydC91c2VyLnBydiIKKwlwcml2YXRlX2tleV9wYXNzd2Q9InBhc3N3b3JkIgorCWVhcG9sX2ZsYWdzPTMKK30KKworCisjIExFQVAgd2l0aCBkeW5hbWljIFdFUCBrZXlzCituZXR3b3JrPXsKKwlzc2lkPSJsZWFwLWV4YW1wbGUiCisJa2V5X21nbXQ9SUVFRTgwMjFYCisJZWFwPUxFQVAKKwlpZGVudGl0eT0idXNlciIKKwlwYXNzd29yZD0iZm9vYmFyIgorfQorCisjIFBsYWludGV4dCBjb25uZWN0aW9uIChubyBXUEEsIG5vIElFRUUgODAyLjFYKQorbmV0d29yaz17CisJc3NpZD0icGxhaW50ZXh0LXRlc3QiCisJa2V5X21nbXQ9Tk9ORQorfQorCisKKyMgU2hhcmVkIFdFUCBrZXkgY29ubmVjdGlvbiAobm8gV1BBLCBubyBJRUVFIDgwMi4xWCkKK25ldHdvcms9eworCXNzaWQ9InN0YXRpYy13ZXAtdGVzdCIKKwlrZXlfbWdtdD1OT05FCisJd2VwX2tleTA9ImFiY2RlIgorCXdlcF9rZXkxPTAxMDIwMzA0MDUKKwl3ZXBfa2V5Mj0iMTIzNDU2Nzg5MDEyMyIKKwl3ZXBfdHhfa2V5aWR4PTAKKwlwcmlvcml0eT01Cit9CisKKworIyBTaGFyZWQgV0VQIGtleSBjb25uZWN0aW9uIChubyBXUEEsIG5vIElFRUUgODAyLjFYKSB1c2luZyBTaGFyZWQgS2V5CisjIElFRUUgODAyLjExIGF1dGhlbnRpY2F0aW9uCituZXR3b3JrPXsKKwlzc2lkPSJzdGF0aWMtd2VwLXRlc3QyIgorCWtleV9tZ210PU5PTkUKKwl3ZXBfa2V5MD0iYWJjZGUiCisJd2VwX2tleTE9MDEwMjAzMDQwNQorCXdlcF9rZXkyPSIxMjM0NTY3ODkwMTIzIgorCXdlcF90eF9rZXlpZHg9MAorCXByaW9yaXR5PTUKKwlhdXRoX2FsZz1TSEFSRUQKK30KKworCisjIElCU1MvYWQtaG9jIG5ldHdvcmsgd2l0aCBXUEEtTm9uZS9US0lQLgorbmV0d29yaz17CisJc3NpZD0idGVzdCBhZGhvYyIKKwltb2RlPTEKKwlwcm90bz1XUEEKKwlrZXlfbWdtdD1XUEEtTk9ORQorCXBhaXJ3aXNlPU5PTkUKKwlncm91cD1US0lQCisJcHNrPSJzZWNyZXQgcGFzc3BocmFzZSIKK30KKworCisjIENhdGNoIGFsbCBleGFtcGxlIHRoYXQgYWxsb3dzIG1vcmUgb3IgbGVzcyBhbGwgY29uZmlndXJhdGlvbiBtb2RlcworbmV0d29yaz17CisJc3NpZD0iZXhhbXBsZSIKKwlzY2FuX3NzaWQ9MQorCWtleV9tZ210PVdQQS1FQVAgV1BBLVBTSyBJRUVFODAyMVggTk9ORQorCXBhaXJ3aXNlPUNDTVAgVEtJUAorCWdyb3VwPUNDTVAgVEtJUCBXRVAxMDQgV0VQNDAKKwlwc2s9InZlcnkgc2VjcmV0IHBhc3NwaHJhc2UiCisJZWFwPVRUTFMgUEVBUCBUTFMKKwlpZGVudGl0eT0idXNlckBleGFtcGxlLmNvbSIKKwlwYXNzd29yZD0iZm9vYmFyIgorCWNhX2NlcnQ9Ii9ldGMvY2VydC9jYS5wZW0iCisJY2xpZW50X2NlcnQ9Ii9ldGMvY2VydC91c2VyLnBlbSIKKwlwcml2YXRlX2tleT0iL2V0Yy9jZXJ0L3VzZXIucHJ2IgorCXByaXZhdGVfa2V5X3Bhc3N3ZD0icGFzc3dvcmQiCisJcGhhc2UxPSJwZWFwbGFiZWw9MCIKK30KKworIyBFeGFtcGxlIG9mIEVBUC1UTFMgd2l0aCBzbWFydGNhcmQgKG9wZW5zc2wgZW5naW5lKQorbmV0d29yaz17CisJc3NpZD0iZXhhbXBsZSIKKwlrZXlfbWdtdD1XUEEtRUFQCisJZWFwPVRMUworCXByb3RvPVJTTgorCXBhaXJ3aXNlPUNDTVAgVEtJUAorCWdyb3VwPUNDTVAgVEtJUAorCWlkZW50aXR5PSJ1c2VyQGV4YW1wbGUuY29tIgorCWNhX2NlcnQ9Ii9ldGMvY2VydC9jYS5wZW0iCisJY2xpZW50X2NlcnQ9Ii9ldGMvY2VydC91c2VyLnBlbSIKKworCWVuZ2luZT0xCisKKwkjIFRoZSBlbmdpbmUgY29uZmlndXJlZCBoZXJlIG11c3QgYmUgYXZhaWxhYmxlLiBMb29rIGF0CisJIyBPcGVuU1NMIGVuZ2luZSBzdXBwb3J0IGluIHRoZSBnbG9iYWwgc2VjdGlvbi4KKwkjIFRoZSBrZXkgYXZhaWxhYmxlIHRocm91Z2ggdGhlIGVuZ2luZSBtdXN0IGJlIHRoZSBwcml2YXRlIGtleQorCSMgbWF0Y2hpbmcgdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSBjb25maWd1cmVkIGFib3ZlLgorCisJIyB1c2UgdGhlIG9wZW5zYyBlbmdpbmUKKwkjZW5naW5lX2lkPSJvcGVuc2MiCisJI2tleV9pZD0iNDUiCisKKwkjIHVzZSB0aGUgcGtjczExIGVuZ2luZQorCWVuZ2luZV9pZD0icGtjczExIgorCWtleV9pZD0iaWRfNDUiCisKKwkjIE9wdGlvbmFsIFBJTiBjb25maWd1cmF0aW9uOyB0aGlzIGNhbiBiZSBsZWZ0IG91dCBhbmQgUElOIHdpbGwgYmUKKwkjIGFza2VkIHRocm91Z2ggdGhlIGNvbnRyb2wgaW50ZXJmYWNlCisJcGluPSIxMjM0IgorfQorCisjIEV4YW1wbGUgY29uZmlndXJhdGlvbiBzaG93aW5nIGhvdyB0byB1c2UgYW4gaW5saW5lZCBibG9iIGFzIGEgQ0EgY2VydGlmaWNhdGUKKyMgZGF0YSBpbnN0ZWFkIG9mIHVzaW5nIGV4dGVybmFsIGZpbGUKK25ldHdvcms9eworCXNzaWQ9ImV4YW1wbGUiCisJa2V5X21nbXQ9V1BBLUVBUAorCWVhcD1UVExTCisJaWRlbnRpdHk9InVzZXJAZXhhbXBsZS5jb20iCisJYW5vbnltb3VzX2lkZW50aXR5PSJhbm9ueW1vdXNAZXhhbXBsZS5jb20iCisJcGFzc3dvcmQ9ImZvb2JhciIKKwljYV9jZXJ0PSJibG9iOi8vZXhhbXBsZWJsb2IiCisJcHJpb3JpdHk9MjAKK30KKworYmxvYi1iYXNlNjQtZXhhbXBsZWJsb2I9eworU0dWc2JHOGdWMjl5YkdRaENnPT0KK30KKworCisjIFdpbGRjYXJkIG1hdGNoIGZvciBTU0lEIChwbGFpbnRleHQgQVBzIG9ubHkpLiBUaGlzIGV4YW1wbGUgc2VsZWN0IGFueQorIyBvcGVuIEFQIHJlZ2FyZGxlc3Mgb2YgaXRzIFNTSUQuCituZXR3b3JrPXsKKwlrZXlfbWdtdD1OT05FCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvd3BhX3N1cHBsaWNhbnQuY29uZi1zYW5lIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L3dwYV9zdXBwbGljYW50LmNvbmYtc2FuZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTFmZmUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L3dwYV9zdXBwbGljYW50LmNvbmYtc2FuZQpAQCAtMCwwICsxLDcgQEAKK2N0cmxfaW50ZXJmYWNlPS92YXIvcnVuL3dwYV9zdXBwbGljYW50CitjdHJsX2ludGVyZmFjZV9ncm91cD0wCit1cGRhdGVfY29uZmlnPTEKKworbmV0d29yaz17CisgICAgICAgIGtleV9tZ210PU5PTkUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudF8yLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnRfMi40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMjRjZjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnRfMi40LmJiCkBAIC0wLDAgKzEsMTE2IEBACitTVU1NQVJZID0gIkNsaWVudCBmb3IgV2ktRmkgUHJvdGVjdGVkIEFjY2VzcyAoV1BBKSIKK0hPTUVQQUdFID0gImh0dHA6Ly9ob3N0YXAuZXBpdGVzdC5maS93cGFfc3VwcGxpY2FudC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9ob3N0YXAuZXBpdGVzdC5maS9idWd6LyIKK1NFQ1RJT04gPSAibmV0d29yayIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MzZiMjc4MDE0NDdlMDY2MmVlMDEzOGQxN2ZlOTM4ODAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0xO2VuZGxpbmU9NTY7bWQ1PTdmMzkzNTc5ZjhiMTA5ZmU5MWYzYjk3NjVkMjZjN2QzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3dwYV9zdXBwbGljYW50L3dwYV9zdXBwbGljYW50LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xMjttZDU9MzQzMGZkYTc5ZjJiYTFkZDU0NWYwYjNjNGQ2ZTRkMjQgIgorREVQRU5EUyA9ICJkYnVzIGxpYm5sIGxpYmdjcnlwdCIKK1JSRUNPTU1FTkRTXyR7UE59ID0gIndwYS1zdXBwbGljYW50LXBhc3NwaHJhc2Ugd3BhLXN1cHBsaWNhbnQtY2xpIgorCitQQUNLQUdFQ09ORklHID8/PSAiZ251dGxzIgorUEFDS0FHRUNPTkZJR1tnbnV0bHNdID0gIiwsZ251dGxzIgorUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICIsLG9wZW5zc2wiCisKK2luaGVyaXQgc3lzdGVtZAorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAid3BhX3N1cHBsaWNhbnQuc2VydmljZSB3cGFfc3VwcGxpY2FudC1ubDgwMjExQC5zZXJ2aWNlIHdwYV9zdXBwbGljYW50LXdpcmVkQC5zZXJ2aWNlIgorU1lTVEVNRF9BVVRPX0VOQUJMRSA9ICJkaXNhYmxlIgorCitTUkNfVVJJID0gImh0dHA6Ly9ob3N0YXAuZXBpdGVzdC5maS9yZWxlYXNlcy93cGFfc3VwcGxpY2FudC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZGVmY29uZmlnIFwKKyAgICAgICAgICAgZmlsZTovL3dwYS1zdXBwbGljYW50LnNoIFwKKyAgICAgICAgICAgZmlsZTovL3dwYV9zdXBwbGljYW50LmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vd3BhX3N1cHBsaWNhbnQuY29uZi1zYW5lIFwKKyAgICAgICAgICAgZmlsZTovLzk5X3dwYV9zdXBwbGljYW50IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtQVAtV01NLUZpeC1pbnRlZ2VyLXVuZGVyZmxvdy1pbi1XTU0tQWN0aW9uLWZyYW1lLXBhci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVAyUC1WYWxpZGF0ZS1TU0lELWVsZW1lbnQtbGVuZ3RoLWJlZm9yZS1jb3B5aW5nLWl0LUMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1XUFMtRml4LUhUVFAtY2h1bmtlZC10cmFuc2Zlci1lbmNvZGluZy1wYXJzZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1FQVAtcHdkLXBlZXItRml4LXBheWxvYWQtbGVuZ3RoLXZhbGlkYXRpb24tZm9yLUNvbW1pLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItRUFQLXB3ZC1zZXJ2ZXItRml4LXBheWxvYWQtbGVuZ3RoLXZhbGlkYXRpb24tZm9yLUNvbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLUVBUC1wd2QtcGVlci1GaXgtVG90YWwtTGVuZ3RoLXBhcnNpbmctZm9yLWZyYWdtZW50LXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC1FQVAtcHdkLXNlcnZlci1GaXgtVG90YWwtTGVuZ3RoLXBhcnNpbmctZm9yLWZyYWdtZW50LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtRUFQLXB3ZC1wZWVyLUZpeC1hc3ltbWV0cmljLWZyYWdtZW50YXRpb24tYmVoYXZpb3IucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJmMDAzN2RiZTAzODk3ZGNhZjJhZDI3MjJlNjU5MDk1ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwNThkYzgzMmMwOTYxMzlhMDU5ZTZkZjgxNDA4MGY1MDI1MWE4ZDMxM2MyMWIxMzM2NGM1NGExZTcwMTA5MTIyIgorCitTID0gIiR7V09SS0RJUn0vd3BhX3N1cHBsaWNhbnQtJHtQVn0iCisKK1BBQ0tBR0VTX3ByZXBlbmQgPSAid3BhLXN1cHBsaWNhbnQtcGFzc3BocmFzZSB3cGEtc3VwcGxpY2FudC1jbGkgIgorRklMRVNfd3BhLXN1cHBsaWNhbnQtcGFzc3BocmFzZSA9ICIke2JpbmRpcn0vd3BhX3Bhc3NwaHJhc2UiCitGSUxFU193cGEtc3VwcGxpY2FudC1jbGkgPSAiJHtzYmluZGlyfS93cGFfY2xpIgorRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcy8qIgorQ09ORkZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L3dwYV9zdXBwbGljYW50LmNvbmYiCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJJHtNQUtFfSAtQyB3cGFfc3VwcGxpY2FudCBjbGVhbgorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2RlZmNvbmZpZyB3cGFfc3VwcGxpY2FudC8uY29uZmlnCisJZWNobyAiQ0ZMQUdTICs9XCItSSR7U1RBR0lOR19JTkNESVJ9L2xpYm5sM1wiIiA+PiB3cGFfc3VwcGxpY2FudC8uY29uZmlnCisJZWNobyAiRFJWX0NGTEFHUyArPVwiLUkke1NUQUdJTkdfSU5DRElSfS9saWJubDNcIiIgPj4gd3BhX3N1cHBsaWNhbnQvLmNvbmZpZworCQorCWlmIGVjaG8gIiR7UEFDS0FHRUNPTkZJR30iIHwgZ3JlcCAtcXcgIm9wZW5zc2wiOyB0aGVuCisgICAgICAgIAlzc2w9b3BlbnNzbAorCWVsaWYgZWNobyAiJHtQQUNLQUdFQ09ORklHfSIgfCBncmVwIC1xdyAiZ251dGxzIjsgdGhlbgorICAgICAgICAJc3NsPWdudXRscworCWZpCisJaWYgWyAtbiAiJHNzbCIgXTsgdGhlbgorICAgICAgICAJc2VkIC1pICJzLyVzc2wlLyRzc2wvIiB3cGFfc3VwcGxpY2FudC8uY29uZmlnCisJZmkKKworCSMgRm9yIHJlYnVpbGQKKwlybSAtZiB3cGFfc3VwcGxpY2FudC8qLmQgd3BhX3N1cHBsaWNhbnQvZGJ1cy8qLmQKK30KKworZXhwb3J0IEVYVFJBX0NGTEFHUyA9ICIke0NGTEFHU30iCitleHBvcnQgQklORElSID0gIiR7c2JpbmRpcn0iCisKK2RvX2NvbXBpbGUgKCkgeworCXVuc2V0IENGTEFHUyBDUFBGTEFHUyBDWFhGTEFHUworCXNlZCAtZSAiczpDRkxBR1NcID0uKjomIFwkKEVYVFJBX0NGTEFHUyk6ZyIgLWkgJHtTfS9zcmMvbGliLnJ1bGVzCisJb2VfcnVubWFrZSAtQyB3cGFfc3VwcGxpY2FudAorfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtbSA3NTUgd3BhX3N1cHBsaWNhbnQvd3BhX3N1cHBsaWNhbnQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1tIDc1NSB3cGFfc3VwcGxpY2FudC93cGFfY2xpICAgICAgICAke0R9JHtzYmluZGlyfQorCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSA3NTUgd3BhX3N1cHBsaWNhbnQvd3BhX3Bhc3NwaHJhc2UgJHtEfSR7YmluZGlyfQorCisJaW5zdGFsbCAtZCAke0R9JHtkb2NkaXJ9L3dwYV9zdXBwbGljYW50CisJaW5zdGFsbCAtbSA2NDQgd3BhX3N1cHBsaWNhbnQvUkVBRE1FICR7V09SS0RJUn0vd3BhX3N1cHBsaWNhbnQuY29uZiAke0R9JHtkb2NkaXJ9L3dwYV9zdXBwbGljYW50CisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisJaW5zdGFsbCAtbSA2MDAgJHtXT1JLRElSfS93cGFfc3VwcGxpY2FudC5jb25mLXNhbmUgJHtEfSR7c3lzY29uZmRpcn0vd3BhX3N1cHBsaWNhbnQuY29uZgorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXByZS11cC5kLworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1wb3N0LWRvd24uZC8KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtZG93bi5kLworCWluc3RhbGwgLW0gNzU1ICR7V09SS0RJUn0vd3BhLXN1cHBsaWNhbnQuc2ggJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1wcmUtdXAuZC93cGEtc3VwcGxpY2FudAorCWNkICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvICYmIFwKKwlsbiAtc2YgLi4vaWYtcHJlLXVwLmQvd3BhLXN1cHBsaWNhbnQgaWYtcG9zdC1kb3duLmQvd3BhLXN1cHBsaWNhbnQKKworCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L2RidXMtMS9zeXN0ZW0uZAorCWluc3RhbGwgLW0gNjQ0ICR7U30vd3BhX3N1cHBsaWNhbnQvZGJ1cy9kYnVzLXdwYV9zdXBwbGljYW50LmNvbmYgJHtEfS8ke3N5c2NvbmZkaXJ9L2RidXMtMS9zeXN0ZW0uZAorCWluc3RhbGwgLWQgJHtEfS8ke2RhdGFkaXJ9L2RidXMtMS9zeXN0ZW0tc2VydmljZXMKKwlpbnN0YWxsIC1tIDY0NCAke1N9L3dwYV9zdXBwbGljYW50L2RidXMvKi5zZXJ2aWNlICR7RH0vJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfS8ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJCWluc3RhbGwgLW0gNjQ0ICR7U30vd3BhX3N1cHBsaWNhbnQvc3lzdGVtZC8qLnNlcnZpY2UgJHtEfS8ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJZmkKKworCWluc3RhbGwgLWQgJHtEfS9ldGMvZGVmYXVsdC92b2xhdGlsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS85OV93cGFfc3VwcGxpY2FudCAke0R9L2V0Yy9kZWZhdWx0L3ZvbGF0aWxlcworfQorCitwa2dfcG9zdGluc3Rfd3BhLXN1cHBsaWNhbnQgKCkgeworCSMgSWYgd2UncmUgb2ZmbGluZSwgd2UgZG9uJ3QgbmVlZCB0byBkbyB0aGlzLgorCWlmIFsgIngkRCIgPSAieCIgXTsgdGhlbgorCQlraWxsYWxsIC1xIC1IVVAgZGJ1cy1kYWVtb24gfHwgdHJ1ZQorCWZpCisKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2ZpbGVzeXN0ZW1zIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvZmlsZXN5c3RlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U2YzQxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2ZpbGVzeXN0ZW1zCkBAIC0wLDAgKzEsOCBAQAorZXh0NAorZXh0MworZXh0MgordmZhdAorZmF0CitidHJmcworbWluaXgKKyoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2ZzdGFiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvZnN0YWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc5YTAxNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2ZzdGFiCkBAIC0wLDAgKzEsMTEgQEAKKyMgc3RvY2sgZnN0YWIgLSB5b3UgcHJvYmFibHkgd2FudCB0byBvdmVycmlkZSB0aGlzIHdpdGggYSBtYWNoaW5lIHNwZWNpZmljIG9uZQorCisvZGV2L3Jvb3QgICAgICAgICAgICAvICAgICAgICAgICAgICAgICAgICBhdXRvICAgICAgIGRlZmF1bHRzICAgICAgICAgICAgICAxICAxCitwcm9jICAgICAgICAgICAgICAgICAvcHJvYyAgICAgICAgICAgICAgICBwcm9jICAgICAgIGRlZmF1bHRzICAgICAgICAgICAgICAwICAwCitkZXZwdHMgICAgICAgICAgICAgICAvZGV2L3B0cyAgICAgICAgICAgICBkZXZwdHMgICAgIG1vZGU9MDYyMCxnaWQ9NSAgICAgICAwICAwCit0bXBmcyAgICAgICAgICAgICAgICAvcnVuICAgICAgICAgICAgICAgICB0bXBmcyAgICAgIG1vZGU9MDc1NSxub2Rldixub3N1aWQsc3RyaWN0YXRpbWUgMCAgMAordG1wZnMgICAgICAgICAgICAgICAgL3Zhci92b2xhdGlsZSAgICAgICAgdG1wZnMgICAgICBkZWZhdWx0cyAgICAgICAgICAgICAgMCAgMAorCisjIHVuY29tbWVudCB0aGlzIGlmIHlvdXIgZGV2aWNlIGhhcyBhIFNEL01NQy9UcmFuc2ZsYXNoIHNsb3QKKyMvZGV2L21tY2JsazBwMSAgICAgICAvbWVkaWEvY2FyZCAgICAgICAgICBhdXRvICAgICAgIGRlZmF1bHRzLHN5bmMsbm9hdXRvICAwICAwCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2hvc3QuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2hvc3QuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYThjMWUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvaG9zdC5jb25mCkBAIC0wLDAgKzEsMiBAQAorb3JkZXIgaG9zdHMsYmluZAorbXVsdGkgb24KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2lucHV0cmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9pbnB1dHJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YzRjOGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9pbnB1dHJjCkBAIC0wLDAgKzEsNjEgQEAKKyMgL2V0Yy9pbnB1dHJjIC0gZ2xvYmFsIGlucHV0cmMgZm9yIGxpYnJlYWRsaW5lCisjIFNlZSByZWFkbGluZSgzcmVhZGxpbmUpIGFuZCBgaW5mbyBybHVzZXJtYW4nIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisjIEJlIDggYml0IGNsZWFuLgorc2V0IGlucHV0LW1ldGEgb24KK3NldCBvdXRwdXQtbWV0YSBvbgorCisjIFRvIGFsbG93IHRoZSB1c2Ugb2YgOGJpdC1jaGFyYWN0ZXJzIGxpa2UgdGhlIGdlcm1hbiB1bWxhdXRzLCBjb21tZW50IG91dAorIyB0aGUgbGluZSBiZWxvdy4gSG93ZXZlciB0aGlzIG1ha2VzIHRoZSBtZXRhIGtleSBub3Qgd29yayBhcyBhIG1ldGEga2V5LAorIyB3aGljaCBpcyBhbm5veWluZyB0byB0aG9zZSB3aGljaCBkb24ndCBuZWVkIHRvIHR5cGUgaW4gOC1iaXQgY2hhcmFjdGVycy4KKworIyBzZXQgY29udmVydC1tZXRhIG9mZgorCisjIHRyeSB0byBlbmFibGUgdGhlIGFwcGxpY2F0aW9uIGtleXBhZCB3aGVuIGl0IGlzIGNhbGxlZC4gIFNvbWUgc3lzdGVtcworIyBuZWVkIHRoaXMgdG8gZW5hYmxlIHRoZSBhcnJvdyBrZXlzLgorIyBzZXQgZW5hYmxlLWtleXBhZCBvbgorCisjIHNlZSAvdXNyL3NoYXJlL2RvYy9iYXNoL2lucHV0cmMuYXJyb3dzIGZvciBvdGhlciBjb2RlcyBvZiBhcnJvdyBrZXlzCisKKyMgZG8gbm90IGJlbGwgb24gdGFiLWNvbXBsZXRpb24gCisjIHNldCBiZWxsLXN0eWxlIG5vbmUgCisKKyMgc29tZSBkZWZhdWx0cyAvIG1vZGlmaWNhdGlvbnMgZm9yIHRoZSBlbWFjcyBtb2RlCiskaWYgbW9kZT1lbWFjcworCisjIGFsbG93IHRoZSB1c2Ugb2YgdGhlIEhvbWUvRW5kIGtleXMKKyMgIlxlWzF+IjogYmVnaW5uaW5nLW9mLWxpbmUKKyMgIlxlWzR+IjogZW5kLW9mLWxpbmUKKworIyBhbGxvdyB0aGUgdXNlIG9mIHRoZSBEZWxldGUvSW5zZXJ0IGtleXMKKyMgIlxlWzN+IjogZGVsZXRlLWNoYXIKKyMgIlxlWzJ+IjogcXVvdGVkLWluc2VydAorCisjIG1hcHBpbmdzIGZvciAicGFnZSB1cCIgYW5kICJwYWdlIGRvd24iIHRvIHN0ZXAgdG8gdGhlIGJlZ2lubmluZy9lbmQgCisjIG9mIHRoZSBoaXN0b3J5CisjICJcZVs1fiI6IGJlZ2lubmluZy1vZi1oaXN0b3J5CisjICJcZVs2fiI6IGVuZC1vZi1oaXN0b3J5CisKKyMgYWx0ZXJuYXRlIG1hcHBpbmdzIGZvciAicGFnZSB1cCIgYW5kICJwYWdlIGRvd24iIHRvIHNlYXJjaCB0aGUgaGlzdG9yeQorIyAiXGVbNX4iOiBoaXN0b3J5LXNlYXJjaC1iYWNrd2FyZAorIyAiXGVbNn4iOiBoaXN0b3J5LXNlYXJjaC1mb3J3YXJkCisKKyMgIyBtYXBwaW5ncyBmb3IgQ3RybC1sZWZ0LWFycm93IGFuZCBDdHJsLXJpZ2h0LWFycm93IGZvciB3b3JkIG1vdmluZworIyAiXGVbNUMiOiBmb3J3YXJkLXdvcmQKKyMgIlxlWzVEIjogYmFja3dhcmQtd29yZAorIyAiXGVcZVtDIjogZm9yd2FyZC13b3JkCisjICJcZVxlW0QiOiBiYWNrd2FyZC13b3JkCisKKyMgJGlmIHRlcm09cnh2dAorIyAiXGVbOH4iOiBlbmQtb2YtbGluZQorIyAkZW5kaWYKKworIyBmb3Igbm9uIFJIL0RlYmlhbiB4dGVybSwgY2FuJ3QgaHVydCBmb3IgUkgvREViaWFuIHh0ZXJtCisjICJcZU9IIjogYmVnaW5uaW5nLW9mLWxpbmUKKyMgIlxlT0YiOiBlbmQtb2YtbGluZQorCisjIGZvciBmcmVlYnNkIGNvbnNvbGUKKyMgIlxlW0giOiBiZWdpbm5pbmctb2YtbGluZQorIyAiXGVbRiI6IGVuZC1vZi1saW5lCisKKyRlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvaXNzdWUgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9pc3N1ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvaXNzdWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2lzc3VlLm5ldCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2lzc3VlLm5ldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvaXNzdWUubmV0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9saWNlbnNlcy9HUEwtMiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2xpY2Vuc2VzL0dQTC0yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MGMzMWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9saWNlbnNlcy9HUEwtMgpAQCAtMCwwICsxLDM0MCBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisMCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisMCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKwwKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKwwKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9tb3RkIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvbW90ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvbW90ZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvbnNzd2l0Y2guY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL25zc3dpdGNoLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZmMDNkMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL25zc3dpdGNoLmNvbmYKQEAgLTAsMCArMSwxOSBAQAorIyAvZXRjL25zc3dpdGNoLmNvbmYKKyMKKyMgRXhhbXBsZSBjb25maWd1cmF0aW9uIG9mIEdOVSBOYW1lIFNlcnZpY2UgU3dpdGNoIGZ1bmN0aW9uYWxpdHkuCisjIElmIHlvdSBoYXZlIHRoZSBgZ2xpYmMtZG9jJyBhbmQgYGluZm8nIHBhY2thZ2VzIGluc3RhbGxlZCwgdHJ5OgorIyBgaW5mbyBsaWJjICJOYW1lIFNlcnZpY2UgU3dpdGNoIicgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZmlsZS4KKworcGFzc3dkOiAgICAgICAgIGNvbXBhdAorZ3JvdXA6ICAgICAgICAgIGNvbXBhdAorc2hhZG93OiAgICAgICAgIGNvbXBhdAorCitob3N0czogICAgICAgICAgZmlsZXMgZG5zCituZXR3b3JrczogICAgICAgZmlsZXMKKworcHJvdG9jb2xzOiAgICAgIGRiIGZpbGVzCitzZXJ2aWNlczogICAgICAgZGIgZmlsZXMKK2V0aGVyczogICAgICAgICBkYiBmaWxlcworcnBjOiAgICAgICAgICAgIGRiIGZpbGVzCisKK25ldGdyb3VwOiAgICAgICBuaXMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3Byb2ZpbGUgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9wcm9maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYzI2ODAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9wcm9maWxlCkBAIC0wLDAgKzEsMzYgQEAKKyMgL2V0Yy9wcm9maWxlOiBzeXN0ZW0td2lkZSAucHJvZmlsZSBmaWxlIGZvciB0aGUgQm91cm5lIHNoZWxsIChzaCgxKSkKKyMgYW5kIEJvdXJuZSBjb21wYXRpYmxlIHNoZWxscyAoYmFzaCgxKSwga3NoKDEpLCBhc2goMSksIC4uLikuCisKK1BBVEg9Ii91c3IvbG9jYWwvYmluOi91c3IvYmluOi9iaW4iCitFRElUT1I9InZpIgkJCSMgbmVlZGVkIGZvciBwYWNrYWdlcyBsaWtlIGNyb24sIGdpdC1jb21taXQKK3Rlc3QgLXogIiRURVJNIiAmJiBURVJNPSJ2dDEwMCIJIyBCYXNpYyB0ZXJtaW5hbCBjYXBhYi4gRm9yIHNjcmVlbiBldGMuCisKK2lmIFsgISAtZSAvZXRjL2xvY2FsdGltZSAtYSAhIC1lIC9ldGMvVFogXTsgdGhlbgorCVRaPSJVVEMiCQkjIFRpbWUgWm9uZS4gTG9vayBhdCBodHRwOi8vdGhlb3J5LnV3aW5uaXBlZy5jYS9nbnUvZ2xpYmMvbGliY18zMDMuaHRtbCAKKwkJCQkjIGZvciBhbiBleHBsYW5hdGlvbiBvZiBob3cgdG8gc2V0IHRoaXMgdG8geW91ciBsb2NhbCB0aW1lem9uZS4KKwlleHBvcnQgVFoKK2ZpCisKK2lmIFsgIiRIT01FIiA9ICJST09USE9NRSIgXTsgdGhlbgorICAgUEFUSD0kUEFUSDovdXNyL2xvY2FsL3NiaW46L3Vzci9zYmluOi9zYmluCitmaQoraWYgWyAiJFBTMSIgXTsgdGhlbgorIyB3b3JrcyBmb3IgYmFzaCBhbmQgYXNoIChubyBvdGhlciBzaGVsbHMga25vd24gdG8gYmUgaW4gdXNlIGhlcmUpCisgICBQUzE9J1x1QFxoOlx3XCQgJworZmkKKworaWYgWyAtZCAvZXRjL3Byb2ZpbGUuZCBdOyB0aGVuCisgIGZvciBpIGluIC9ldGMvcHJvZmlsZS5kLyogOyBkbworICAgIC4gJGkKKyAgZG9uZQorICB1bnNldCBpCitmaQorCitpZiBbIC14IC91c3IvYmluL3Jlc2l6ZSBdO3RoZW4KKyAgL3Vzci9iaW4vcmVzaXplID4vZGV2L251bGwKK2ZpCisKK2V4cG9ydCBQQVRIIFBTMSBPUElFRElSIFFQRURJUiBRVERJUiBFRElUT1IgVEVSTQorCit1bWFzayAwMjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvcm90YXRpb24gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9yb3RhdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjI3MDgzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvcm90YXRpb24KQEAgLTAsMCArMSBAQAorMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3NoYXJlL2RvdC5iYXNocmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9zaGFyZS9kb3QuYmFzaHJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZTYzNjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9zaGFyZS9kb3QuYmFzaHJjCkBAIC0wLDAgKzEsMTYgQEAKKyMgfi8uYmFzaHJjOiBleGVjdXRlZCBieSBiYXNoKDEpIGZvciBub24tbG9naW4gc2hlbGxzLgorCitleHBvcnQgUFMxPSdcaDpcd1wkICcKK3VtYXNrIDAyMgorCisjIFlvdSBtYXkgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXMgaWYgeW91IHdhbnQgYGxzJyB0byBiZSBjb2xvcml6ZWQ6CisjIGV4cG9ydCBMU19PUFRJT05TPSctLWNvbG9yPWF1dG8nCisjIGV2YWwgYGRpcmNvbG9yc2AKKyMgYWxpYXMgbHM9J2xzICRMU19PUFRJT05TJworIyBhbGlhcyBsbD0nbHMgJExTX09QVElPTlMgLWwnCisjIGFsaWFzIGw9J2xzICRMU19PUFRJT05TIC1sQScKKyMKKyMgU29tZSBtb3JlIGFsaWFzIHRvIGF2b2lkIG1ha2luZyBtaXN0YWtlczoKKyMgYWxpYXMgcm09J3JtIC1pJworIyBhbGlhcyBjcD0nY3AgLWknCisjIGFsaWFzIG12PSdtdiAtaScKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3NoYXJlL2RvdC5wcm9maWxlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvc2hhcmUvZG90LnByb2ZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc5NzkzZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3NoYXJlL2RvdC5wcm9maWxlCkBAIC0wLDAgKzEsMTAgQEAKKyMgfi8ucHJvZmlsZTogZXhlY3V0ZWQgYnkgQm91cm5lLWNvbXBhdGlibGUgbG9naW4gc2hlbGxzLgorCitpZiBbIC1mIH4vLmJhc2hyYyBdOyB0aGVuCisgIC4gfi8uYmFzaHJjCitmaQorCisjIHBhdGggc2V0IGJ5IC9ldGMvcHJvZmlsZQorIyBleHBvcnQgUEFUSAorCittZXNnIG4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3NoZWxscyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3NoZWxscwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjYzOTg3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvc2hlbGxzCkBAIC0wLDAgKzEsMiBAQAorIyAvZXRjL3NoZWxsczogdmFsaWQgbG9naW4gc2hlbGxzCisvYmluL3NoCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy91c2JkIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvdXNiZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvdXNiZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXNfMy4wLjE0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXNfMy4wLjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmZlNzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlc18zLjAuMTQuYmIKQEAgLTAsMCArMSwxNzggQEAKK1NVTU1BUlkgPSAiTWlzY2VsbGFuZW91cyBmaWxlcyBmb3IgdGhlIGJhc2Ugc3lzdGVtIgorREVTQ1JJUFRJT04gPSAiVGhlIGJhc2UtZmlsZXMgcGFja2FnZSBjcmVhdGVzIHRoZSBiYXNpYyBzeXN0ZW0gZGlyZWN0b3J5IHN0cnVjdHVyZSBhbmQgcHJvdmlkZXMgYSBzbWFsbCBzZXQgb2Yga2V5IGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHRoZSBzeXN0ZW0uIgorU0VDVElPTiA9ICJiYXNlIgorUFIgPSAicjg5IgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2xpY2Vuc2VzL0dQTC0yO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKyMgUmVtb3ZlZCBhbGwgbGljZW5zZSByZWxhdGVkIHRhc2tzIGluIHRoaXMgcmVjaXBlIGFzIGxpY2Vuc2UuYmJjbGFzcyAKKyMgbm93IGRlYWxzIHdpdGggdGhpcy4gSW4gb3JkZXIgdG8gZ2V0IGFjY3VyYXRlIGxpY2Vuc2luZyBvbiB0byB0aGUgaW1hZ2U6CisjIFNldCBDT1BZX0xJQ19NQU5JRkVTVCB0byBqdXN0IGNvcHkganVzdCB0aGUgbGljZW5zZS5tYW5pZmVzdCB0byB0aGUgaW1hZ2UKKyMgRm9yIHRoZSBtYW5pZmVzdCBhbmQgdGhlIGxpY2Vuc2UgdGV4dCBmb3IgZWFjaCBwYWNrYWdlOgorIyBTZXQgQ09QWV9MSUNfTUFOSUZFU1QgYW5kIENPUFlfTElDX0RJUlMKKworU1JDX1VSSSA9ICJmaWxlOi8vcm90YXRpb24gXAorICAgICAgICAgICBmaWxlOi8vbnNzd2l0Y2guY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9tb3RkIFwKKyAgICAgICAgICAgZmlsZTovL2lucHV0cmMgXAorICAgICAgICAgICBmaWxlOi8vaG9zdC5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL3Byb2ZpbGUgXAorICAgICAgICAgICBmaWxlOi8vc2hlbGxzIFwKKyAgICAgICAgICAgZmlsZTovL2ZzdGFiIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbGVzeXN0ZW1zIFwKKyAgICAgICAgICAgZmlsZTovL2lzc3VlLm5ldCBcCisgICAgICAgICAgIGZpbGU6Ly9pc3N1ZSBcCisgICAgICAgICAgIGZpbGU6Ly91c2JkIFwKKyAgICAgICAgICAgZmlsZTovL3NoYXJlL2RvdC5iYXNocmMgXAorICAgICAgICAgICBmaWxlOi8vc2hhcmUvZG90LnByb2ZpbGUgXAorICAgICAgICAgICBmaWxlOi8vbGljZW5zZXMvR1BMLTIgXAorICAgICAgICAgICAiCitTID0gIiR7V09SS0RJUn0iCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK2RvY2Rpcl9hcHBlbmQgPSAiLyR7UH0iCitkaXJzMTc3NyA9ICIvdG1wICR7bG9jYWxzdGF0ZWRpcn0vdm9sYXRpbGUvdG1wIgorZGlyczI3NzUgPSAiIgorZGlyczc1NSA9ICIvYmluIC9ib290IC9kZXYgJHtzeXNjb25mZGlyfSAke3N5c2NvbmZkaXJ9L2RlZmF1bHQgXAorICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3NrZWwgL2xpYiAvbW50IC9wcm9jICR7Uk9PVF9IT01FfSAvcnVuIC9zYmluIFwKKyAgICAgICAgICAgJHtwcmVmaXh9ICR7YmluZGlyfSAke2RvY2Rpcn0gL3Vzci9nYW1lcyAke2luY2x1ZGVkaXJ9IFwKKyAgICAgICAgICAgJHtsaWJkaXJ9ICR7c2JpbmRpcn0gJHtkYXRhZGlyfSBcCisgICAgICAgICAgICR7ZGF0YWRpcn0vY29tbW9uLWxpY2Vuc2VzICR7ZGF0YWRpcn0vZGljdCAke2luZm9kaXJ9IFwKKyAgICAgICAgICAgJHttYW5kaXJ9ICR7ZGF0YWRpcn0vbWlzYyAke2xvY2Fsc3RhdGVkaXJ9IFwKKyAgICAgICAgICAgJHtsb2NhbHN0YXRlZGlyfS9iYWNrdXBzICR7bG9jYWxzdGF0ZWRpcn0vbGliIFwKKyAgICAgICAgICAgL3N5cyAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9taXNjICR7bG9jYWxzdGF0ZWRpcn0vc3Bvb2wgXAorICAgICAgICAgICAke2xvY2Fsc3RhdGVkaXJ9L3ZvbGF0aWxlIFwKKyAgICAgICAgICAgJHtsb2NhbHN0YXRlZGlyfS92b2xhdGlsZS9sb2cgXAorICAgICAgICAgICAvaG9tZSAke3ByZWZpeH0vc3JjICR7bG9jYWxzdGF0ZWRpcn0vbG9jYWwgXAorICAgICAgICAgICAvbWVkaWEiCisKK2RpcnM3NTUtbHNiID0gIi9zcnYgIFwKKyAgICAgICAgICAgICAgICR7cHJlZml4fS9sb2NhbCAke3ByZWZpeH0vbG9jYWwvYmluICR7cHJlZml4fS9sb2NhbC9nYW1lcyBcCisgICAgICAgICAgICAgICAke3ByZWZpeH0vbG9jYWwvaW5jbHVkZSAke3ByZWZpeH0vbG9jYWwvbGliICR7cHJlZml4fS9sb2NhbC9zYmluIFwKKyAgICAgICAgICAgICAgICR7cHJlZml4fS9sb2NhbC9zaGFyZSAke3ByZWZpeH0vbG9jYWwvc3JjIFwKKyAgICAgICAgICAgICAgICR7cHJlZml4fS9saWIvbG9jYWxlIgorZGlyczI3NzUtbHNiID0gIi92YXIvbWFpbCIKKwordm9sYXRpbGVzID0gImxvZyB0bXAiCitjb25mZmlsZXMgPSAiJHtzeXNjb25mZGlyfS9kZWJpYW5fdmVyc2lvbiAke3N5c2NvbmZkaXJ9L2hvc3QuY29uZiBcCisgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9pbnB1dHJjICR7c3lzY29uZmRpcn0vaXNzdWUgLyR7c3lzY29uZmRpcn0vaXNzdWUubmV0IFwKKyAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L25zc3dpdGNoLmNvbmYgJHtzeXNjb25mZGlyfS9wcm9maWxlIFwKKyAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2RlZmF1bHQiCisKKyMgQnkgZGVmYXVsdCB0aGUgaG9zdG5hbWUgaXMgdGhlIG1hY2hpbmUgbmFtZS4gSWYgdGhlIGhvc3RuYW1lIGlzIHVuc2V0IHRoZW4gYQorIyAvZXRjL2hvc3RuYW1lIGZpbGUgaXNuJ3Qgd3JpdHRlbiwgc3VpdGFibGUgZm9yIGVudmlyb25tZW50cyB3aXRoIGR5bmFtaWMKKyMgaG9zdG5hbWVzLgorIworIyBUaGUgaG9zdG5hbWUgY2FuIGJlIGNoYW5nZWQgb3V0c2lkZSBvZiB0aGlzIHJlY2lwZSBieSB1c2luZworIyBob3N0bmFtZV9wbi1iYXNlLWZpbGVzID0gIm15LWhvc3QtbmFtZSIuCitob3N0bmFtZSA9ICIke01BQ0hJTkV9IgorCitCQVNFRklMRVNJU1NVRUlOU1RBTEwgPz0gImRvX2luc3RhbGxfYmFzZWZpbGVzaXNzdWUiCisKKyMgSW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgYmFzZS1maWxlcywgL3J1biB3YXMgYSBzb2Z0bGluayB0byAvdmFyL3J1biBhbmQgdGhlCisjIGRpcmVjdG9yeSB3YXMgbG9jYXRlZCBpbiAvdmFyL3ZvbGF0bGllL3J1bi4gIEFsc28sIC92YXIvbG9jayB3YXMgYSBzb2Z0bGluaworIyB0byAvdmFyL3ZvbGF0aWxlL2xvY2sgd2hpY2ggaXMgd2hlcmUgdGhlIHJlYWwgZGlyZWN0b3J5IHdhcyBsb2NhdGVkLiAgTm93LAorIyAvcnVuIGFuZCAvcnVuL2xvY2sgYXJlIHRoZSByZWFsIGRpcmVjdG9yaWVzLiAgSWYgd2UgYXJlIHVwZ3JhZGluZywgd2UgbWF5CisjIG5lZWQgdG8gcmVtb3ZlIHRoZSBzeW1ib2xpYyBsaW5rcyBmaXJzdCBiZWZvcmUgd2UgY3JlYXRlIHRoZSBkaXJlY3Rvcmllcy4KKyMgT3RoZXJ3aXNlIHRoZSBkaXJlY3RvcnkgY3JlYXRpb24gd2lsbCBmYWlsIGFuZCB3ZSB3aWxsIGhhdmUgY2lyY3VsYXIgc3ltYm9saWMKKyMgbGlua3MuCisjIAorcGtnX3ByZWluc3RfJHtQTn0gKCkgeworICAgICMhL2Jpbi9zaCAtZQorICAgIGlmIFsgeCIkRCIgPSAieCIgXTsgdGhlbgorICAgICAgICBpZiBbIC1oICIvdmFyL2xvY2siIF07IHRoZW4KKyAgICAgICAgICAgICMgUmVtb3ZlIHRoZSBzeW1ib2xpYyBsaW5rCisgICAgICAgICAgICBybSAtZiAvdmFyL2xvY2sKKyAgICAgICAgZmkKKworICAgICAgICBpZiBbIC1oICIvcnVuIiBdOyB0aGVuCisgICAgICAgICAgICAjIFJlbW92ZSB0aGUgc3ltYm9saWMgbGluaworICAgICAgICAgICAgcm0gLWYgL3J1bgorICAgICAgICBmaQorICAgIGZpICAgICAKK30KKworZG9faW5zdGFsbCAoKSB7CisJZm9yIGQgaW4gJHtkaXJzNzU1fTsgZG8KKwkJaW5zdGFsbCAtbSAwNzU1IC1kICR7RH0kZAorCWRvbmUKKwlmb3IgZCBpbiAke2RpcnMxNzc3fTsgZG8KKwkJaW5zdGFsbCAtbSAxNzc3IC1kICR7RH0kZAorCWRvbmUKKwlmb3IgZCBpbiAke2RpcnMyNzc1fTsgZG8KKwkJaW5zdGFsbCAtbSAyNzc1IC1kICR7RH0kZAorCWRvbmUKKwlmb3IgZCBpbiAke3ZvbGF0aWxlc307IGRvCisJCWxuIC1zZiB2b2xhdGlsZS8kZCAke0R9JHtsb2NhbHN0YXRlZGlyfS8kZAorCWRvbmUKKworCWxuIC1zbmYgLi4vcnVuICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1bgorCWxuIC1zbmYgLi4vcnVuL2xvY2sgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbG9jaworCisJJHtCQVNFRklMRVNJU1NVRUlOU1RBTEx9CisKKwlyb3RhdGlvbj1gY2F0ICR7V09SS0RJUn0vcm90YXRpb25gCisJaWYgWyAiJHJvdGF0aW9uIiAhPSAiMCIgXTsgdGhlbgorIAkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcm90YXRpb24gJHtEfSR7c3lzY29uZmRpcn0vcm90YXRpb24KKwlmaQorCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZnN0YWIgJHtEfSR7c3lzY29uZmRpcn0vZnN0YWIKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9maWxlc3lzdGVtcyAke0R9JHtzeXNjb25mZGlyfS9maWxlc3lzdGVtcworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3VzYmQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC91c2JkCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcHJvZmlsZSAke0R9JHtzeXNjb25mZGlyfS9wcm9maWxlCisJc2VkIC1pICdzI1JPT1RIT01FIyR7Uk9PVF9IT01FfSMnICR7RH0ke3N5c2NvbmZkaXJ9L3Byb2ZpbGUKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zaGVsbHMgJHtEfSR7c3lzY29uZmRpcn0vc2hlbGxzCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vc2hhcmUvZG90LnByb2ZpbGUgJHtEfSR7c3lzY29uZmRpcn0vc2tlbC8ucHJvZmlsZQorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3NoYXJlL2RvdC5iYXNocmMgJHtEfSR7c3lzY29uZmRpcn0vc2tlbC8uYmFzaHJjCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vaW5wdXRyYyAke0R9JHtzeXNjb25mZGlyfS9pbnB1dHJjCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbnNzd2l0Y2guY29uZiAke0R9JHtzeXNjb25mZGlyfS9uc3N3aXRjaC5jb25mCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vaG9zdC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L2hvc3QuY29uZgorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L21vdGQgJHtEfSR7c3lzY29uZmRpcn0vbW90ZAorCisJaWYgWyAiL3Vzci9iaW4iICE9ICIke2JpbmRpcn0iIF07IHRoZW4KKwkJc2VkIC1pICJzLC91c3IvYmluL3Jlc2l6ZSwke2JpbmRpcn0vcmVzaXplLCIgJHtEfSR7c3lzY29uZmRpcn0vcHJvZmlsZQorCWZpCisKKwlsbiAtc2YgL3Byb2MvbW91bnRzICR7RH0ke3N5c2NvbmZkaXJ9L210YWIKK30KKworRElTVFJPX1ZFUlNJT05bdmFyZGVwc2V4Y2x1ZGVdICs9ICJEQVRFIgorZG9faW5zdGFsbF9iYXNlZmlsZXNpc3N1ZSAoKSB7CisJaWYgWyAiJHtob3N0bmFtZX0iIF07IHRoZW4KKwkJZWNobyAke2hvc3RuYW1lfSA+ICR7RH0ke3N5c2NvbmZkaXJ9L2hvc3RuYW1lCisJZmkKKworCWluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vaXNzdWUqICAke0R9JHtzeXNjb25mZGlyfQorICAgICAgICBpZiBbIC1uICIke0RJU1RST19OQU1FfSIgXTsgdGhlbgorCQlwcmludGYgIiR7RElTVFJPX05BTUV9ICIgPj4gJHtEfSR7c3lzY29uZmRpcn0vaXNzdWUKKwkJcHJpbnRmICIke0RJU1RST19OQU1FfSAiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2lzc3VlLm5ldAorCQlpZiBbIC1uICIke0RJU1RST19WRVJTSU9OfSIgXTsgdGhlbgorCQkJcHJpbnRmICIke0RJU1RST19WRVJTSU9OfSAiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2lzc3VlCisJCQlwcmludGYgIiR7RElTVFJPX1ZFUlNJT059ICIgPj4gJHtEfSR7c3lzY29uZmRpcn0vaXNzdWUubmV0CisJCWZpCisJCXByaW50ZiAiXFxcbiBcXFxsXG4iID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2lzc3VlCisJCWVjaG8gPj4gJHtEfSR7c3lzY29uZmRpcn0vaXNzdWUKKwkJZWNobyAiJWgiICAgID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2lzc3VlLm5ldAorCQllY2hvID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2lzc3VlLm5ldAorIAlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9saW51eHN0ZGJhc2UoKSB7CisJZm9yIGQgaW4gJHtkaXJzNzU1LWxzYn07IGRvCisgICAgICAgICAgICAgICAgaW5zdGFsbCAtbSAwNzU1IC1kICR7RH0kZAorICAgICAgICBkb25lCisKKwlmb3IgZCBpbiAke2RpcnMyNzc1LWxzYn07IGRvCisgICAgICAgICAgICAgICAgaW5zdGFsbCAtbSAyNzc1IC1kICR7RH0kZAorICAgICAgICBkb25lCit9CisKK1BBQ0tBR0VTID0gIiR7UE59LWRvYyAke1BOfSAke1BOfS1kZXYgJHtQTn0tZGJnIgorRklMRVNfJHtQTn0gPSAiLyIKK0ZJTEVTXyR7UE59LWRvYyA9ICIke2RvY2Rpcn0gJHtkYXRhZGlyfS9jb21tb24tbGljZW5zZXMiCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L2ZzdGFiICR7QFsnJywgJyR7c3lzY29uZmRpcn0vaG9zdG5hbWUnXVsoZC5nZXRWYXIoJ2hvc3RuYW1lJywgVHJ1ZSkgIT0gJycpXX0gJHtzeXNjb25mZGlyfS9zaGVsbHMiCitDT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vbW90ZCAke3N5c2NvbmZkaXJ9L25zc3dpdGNoLmNvbmYgJHtzeXNjb25mZGlyfS9wcm9maWxlIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkL2FkZF9zaHV0ZG93bi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2QvYWRkX3NodXRkb3duLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMzU3ZDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkL2FkZF9zaHV0ZG93bi5wYXRjaApAQCAtMCwwICsxLDE5IEBACisKK1dlIG5lZWQgdG8gaGF2ZSBhIHNodXRkb3duIGdyb3VwIHRvIGFsbG93IHRoZSBzaHV0ZG93biBpY29uCit0byB3b3JrIGNvcnJlY3RseS4gQW55IHVzZXJzIHRoYXQgd2FudCB0byB1c2Ugc2h1dGRvd24gbGlrZQordGhlIHh1c2VyIHNob3VsZCBiZSBhZGRlZCB0byB0aGlzIGdyb3VwLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW0VtYmVkZGVkXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitJbmRleDogYmFzZS1wYXNzd2QtMy41LjI2L2dyb3VwLm1hc3RlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJhc2UtcGFzc3dkLTMuNS4yNi5vcmlnL2dyb3VwLm1hc3RlcgorKysrIGJhc2UtcGFzc3dkLTMuNS4yNi9ncm91cC5tYXN0ZXIKK0BAIC0zNiw1ICszNiw2IEBAIHNhc2w6Kjo0NToKKyBwbHVnZGV2Oio6NDY6Cisgc3RhZmY6Kjo1MDoKKyBnYW1lczoqOjYwOgorK3NodXRkb3duOio6NzA6CisgdXNlcnM6KjoxMDA6Cisgbm9ncm91cDoqOjY1NTM0OgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9kaXNhYmxlLWRvY3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkL2Rpc2FibGUtZG9jcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGMwOGI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9kaXNhYmxlLWRvY3MucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorRGlzYWJsZSBkb2N1bWVudGF0aW9uIGZvciBub3cgYXMgaXQgdXNlcyB0b29scyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZAorYnkgT0UtQ29yZS4gSXQgdXNlcyBzZ21sdG9vbHMgYW5kIHBvNGEuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtQ29yZSBzcGVjaWZpY10KK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGJhc2UtcGFzc3dkLTMuNS4yOC9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJhc2UtcGFzc3dkLTMuNS4yOC5vcmlnL01ha2VmaWxlLmluCisrKysgYmFzZS1wYXNzd2QtMy41LjI4L01ha2VmaWxlLmluCitAQCAtMjUsMTMgKzI1LDEwIEBAIGdlbl9jb25maWd1cmUJPSBjb25maWcuY2FjaGUgY29uZmlnLnN0YXQKKyAJCSAgY29uZmRlZmhzLmggY29uZmlnLmggTWFrZWZpbGUKKyAKKyBhbGw6IHVwZGF0ZS1wYXNzd2QKKy0JJChNQUtFKSAtQyBkb2MgYWxsCistCSQoTUFLRSkgLUMgbWFuIGFsbAorIAorIGluc3RhbGw6IGFsbAorIAlta2RpciAtcCAkKERFU1RESVIpJChzYmluZGlyKQorIAkkKElOU1RBTEwpIHVwZGF0ZS1wYXNzd2QgJChERVNURElSKSQoc2JpbmRpcikvCistCSQoTUFLRSkgLUMgbWFuIGluc3RhbGwKKyAKKyB1cGRhdGUtcGFzc3dkLm86IHZlcnNpb24uaAorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9pbnB1dC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2QvaW5wdXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FiYmNhZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2QvaW5wdXQucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorQWRkIGFuIGlucHV0IGdyb3VwIGZvciB0aGUgL2Rldi9pbnB1dC8qIGRldmljZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CisKKy0tLQorIGdyb3VwLm1hc3RlciB8ICAgIDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitJbmRleDogYmFzZS1wYXNzd2QtMy41LjI2L2dyb3VwLm1hc3RlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJhc2UtcGFzc3dkLTMuNS4yNi5vcmlnL2dyb3VwLm1hc3RlcgorKysrIGJhc2UtcGFzc3dkLTMuNS4yNi9ncm91cC5tYXN0ZXIKK0BAIC0xMiw2ICsxMiw3IEBAIHV1Y3A6KjoxMDoKKyBtYW46KjoxMjoKKyBwcm94eToqOjEzOgorIGttZW06KjoxNToKKytpbnB1dDoqOjE5OgorIGRpYWxvdXQ6KjoyMDoKKyBmYXg6KjoyMToKKyB2b2ljZToqOjIyOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9ub2Jhc2gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkL25vYmFzaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWE2OTIyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9ub2Jhc2gucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAordXNlIC9iaW4vc2ggaW5zdGVhZCBvZiAvYmluL2Jhc2gsIHNpbmNlIHRoZSBsYXR0ZXIgbWF5IG5vdCBiZSBpbmNsdWRlZCBpbgorc29tZSBpbWFnZXMgc3VjaCBhcyBtaW5pbWFsCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBiYXNlLXBhc3N3ZC9wYXNzd2QubWFzdGVyfm5vYmFzaAorKysrIGJhc2UtcGFzc3dkL3Bhc3N3ZC5tYXN0ZXIKK0BAIC0xLDQgKzEsNCBAQAorLXJvb3Q6KjowOjA6cm9vdDovcm9vdDovYmluL2Jhc2gKKytyb290Oio6MDowOnJvb3Q6L3Jvb3Q6L2Jpbi9zaAorIGRhZW1vbjoqOjE6MTpkYWVtb246L3Vzci9zYmluOi9iaW4vc2gKKyBiaW46KjoyOjI6YmluOi9iaW46L2Jpbi9zaAorIHN5czoqOjM6MzpzeXM6L2RldjovYmluL3NoCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkL25vc2hhZG93LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9ub3NoYWRvdy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjdiZjdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9ub3NoYWRvdy5wYXRjaApAQCAtMCwwICsxLDE0IEBACityZW1vdmUgIioiIGZvciByb290IHNpbmNlIHdlIGRvbid0IGhhdmUgYSAvZXRjL3NoYWRvdyBzbyBmYXIuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBiYXNlLXBhc3N3ZC9wYXNzd2QubWFzdGVyfm5vYmFzaAorKysrIGJhc2UtcGFzc3dkL3Bhc3N3ZC5tYXN0ZXIKK0BAIC0xLDQgKzEsNCBAQAorLXJvb3Q6KjowOjA6cm9vdDovcm9vdDovYmluL3NoCisrcm9vdDo6MDowOnJvb3Q6L3Jvb3Q6L2Jpbi9zaAorIGRhZW1vbjoqOjE6MTpkYWVtb246L3Vzci9zYmluOi9iaW4vc2gKKyBiaW46KjoyOjI6YmluOi9iaW46L2Jpbi9zaAorIHN5czoqOjM6MzpzeXM6L2RldjovYmluL3NoCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkXzMuNS4yOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2RfMy41LjI5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOWJkODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkXzMuNS4yOS5iYgpAQCAtMCwwICsxLDEwNCBAQAorU1VNTUFSWSA9ICJCYXNlIHN5c3RlbSBtYXN0ZXIgcGFzc3dvcmQvZ3JvdXAgZmlsZXMiCitERVNDUklQVElPTiA9ICJUaGUgbWFzdGVyIGNvcGllcyBvZiB0aGUgdXNlciBkYXRhYmFzZSBmaWxlcyAoL2V0Yy9wYXNzd2QgYW5kIC9ldGMvZ3JvdXApLiAgVGhlIHVwZGF0ZS1wYXNzd2QgdG9vbCBpcyBhbHNvIHByb3ZpZGVkIHRvIGtlZXAgdGhlIHN5c3RlbSBkYXRhYmFzZXMgc3luY2hyb25pemVkIHdpdGggdGhlc2UgbWFzdGVyIGZpbGVzLiIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWI3MjNiNjE1MzlmZWVmMDEzZGU0NzZlNjhiNWM1MGEiCisKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIlZlcnNpb24gMy41LjM4IHJlcXVpcmVzIGNkZWJjb25mIGZvciB1cGRhdGUtcGFzc3dkIHV0aWxpdHkiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9sYXVuY2hwYWQubmV0L2RlYmlhbi8rYXJjaGl2ZS9wcmltYXJ5LytmaWxlcy8ke0JQTn1fJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2FkZF9zaHV0ZG93bi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ub2Jhc2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9zaGFkb3cucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaW5wdXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZS1kb2NzLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2YmVjY2FjNDgwODNmZThhZTUwNDhhY2QwNjJlNTQyMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmMGI2NjM4OGIyYzhlNDljMTU2OTI0MzlkMmJlZTYzYmNkZDRiYmJmN2E3ODJjN2Y2NGFjY2M1NTk4NmI2YTM2IgorCitpbmhlcml0IGF1dG90b29scworCitTU1RBVEVQT1NUSU5TVEZVTkNTICs9ICJiYXNlX3Bhc3N3ZF9zc3RhdGVfcG9zdGluc3QiCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgLW0gNzU1ICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLXAgLW0gNzU1ICR7Qn0vdXBkYXRlLXBhc3N3ZCAke0R9JHtzYmluZGlyfS8KKwlpbnN0YWxsIC1kIC1tIDc1NSAke0R9JHttYW5kaXJ9L21hbjggJHtEfSR7bWFuZGlyfS9wbC9tYW44CisJaW5zdGFsbCAtcCAtbSA2NDQgJHtTfS9tYW4vdXBkYXRlLXBhc3N3ZC44ICR7RH0ke21hbmRpcn0vbWFuOC8KKwlpbnN0YWxsIC1wIC1tIDY0NCAke1N9L21hbi91cGRhdGUtcGFzc3dkLnBsLjggXAorCQkke0R9JHttYW5kaXJ9L3BsL21hbjgvdXBkYXRlLXBhc3N3ZC44CisJZ3ppcCAtOSAke0R9JHttYW5kaXJ9L21hbjgvKiAke0R9JHttYW5kaXJ9L3BsL21hbjgvKgorCWluc3RhbGwgLWQgLW0gNzU1ICR7RH0ke2RhdGFkaXJ9L2Jhc2UtcGFzc3dkCisJaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLXAgLW0gNjQ0ICR7U30vcGFzc3dkLm1hc3RlciAke0R9JHtkYXRhZGlyfS9iYXNlLXBhc3N3ZC8KKwlzZWQgLWkgJ3MjOi9yb290OiM6JHtST09UX0hPTUV9OiMnICR7RH0ke2RhdGFkaXJ9L2Jhc2UtcGFzc3dkL3Bhc3N3ZC5tYXN0ZXIKKwlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtcCAtbSA2NDQgJHtTfS9ncm91cC5tYXN0ZXIgJHtEfSR7ZGF0YWRpcn0vYmFzZS1wYXNzd2QvCisKKwlpbnN0YWxsIC1kIC1tIDc1NSAke0R9JHtkb2NkaXJ9LyR7QlBOfQorCWluc3RhbGwgLXAgLW0gNjQ0ICR7U30vZGViaWFuL2NoYW5nZWxvZyAke0R9JHtkb2NkaXJ9LyR7QlBOfS8KKwlnemlwIC05ICR7RH0ke2RvY2Rpcn0vJHtCUE59LyoKKwlpbnN0YWxsIC1wIC1tIDY0NCAke1N9L1JFQURNRSAke0R9JHtkb2NkaXJ9LyR7QlBOfS8KKwlpbnN0YWxsIC1wIC1tIDY0NCAke1N9L2RlYmlhbi9jb3B5cmlnaHQgJHtEfSR7ZG9jZGlyfS8ke0JQTn0vCit9CisKK2Jhc2VfcGFzc3dkX3NzdGF0ZV9wb3N0aW5zdCgpIHsKKwlpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgLW8gIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCisJdGhlbgorCQkjIFN0YWdpbmcgZG9lcyBub3QgY29weSAke3N5c2NvbmZkaXJ9IGZpbGVzIGludG8gdGhlCisJCSMgdGFyZ2V0IHN5c3Jvb3QsIHNvIHdlIG5lZWQgdG8gZG8gc28gbWFudWFsbHkuIFdlCisJCSMgcHV0IHRoZXNlIGZpbGVzIGluIHRoZSB0YXJnZXQgc3lzcm9vdCBzbyB0aGV5IGNhbgorCQkjIGJlIHVzZWQgYnkgcmVjaXBlcyB3aGljaCB1c2UgY3VzdG9tIHVzZXIvZ3JvdXAKKwkJIyBwZXJtaXNzaW9ucy4KKwkJIyBJbnN0YWxsIHBhc3N3ZC5tYXN0ZXIgYW5kIGdyb3VwLm1hc3RlciB0byBzeXNjb25mZGlyIGFuZCBtdgorCQkjIHRoZW0gdG8gbWFrZSBzdXJlIHRoZXkgYXJlIGF0b21pY2FsbHkgaW5zdGFsbC4KKwkJaW5zdGFsbCAtZCAtbSA3NTUgJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtzeXNjb25mZGlyfQorCQlmb3IgaSBpbiBwYXNzd2QgZ3JvdXA7IGRvCisJCQlpbnN0YWxsIC1wIC1tIDY0NCAke1NUQUdJTkdfRElSX1RBUkdFVH0ke2RhdGFkaXJ9L2Jhc2UtcGFzc3dkLyRpLm1hc3RlciBcCisJCQkJJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtzeXNjb25mZGlyfS8KKwkJCW12ICR7U1RBR0lOR19ESVJfVEFSR0VUfSR7c3lzY29uZmRpcn0vJGkubWFzdGVyICR7U1RBR0lOR19ESVJfVEFSR0VUfSR7c3lzY29uZmRpcn0vJGkKKwkJZG9uZQorCWZpCit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgICMgQWRkIGluIHRoZSBwcmVpbnN0IGZ1bmN0aW9uIGZvciAke1BOfQorICAgICMgV2UgaGF2ZSB0byBkbyB0aGlzIGhlcmUgYXMgcHJpb3IgdG8gdGhpcywgcGFzc3dkL2dyb3VwLm1hc3RlcgorICAgICMgd291bGQgYmUgdW5hdmFpbGFibGUuIFdlIG5lZWQgdG8gY3JlYXRlIHRoZXNlIGZpbGVzIGF0IHByZWluc3QKKyAgICAjIHRpbWUgYmVmb3JlIHRoZSBmaWxlcyBmcm9tIHRoZSBwYWNrYWdlIG1heSBiZSBhdmFpbGFibGUsIGhlbmNlCisgICAgIyBzdG9yaW5nIHRoZSBkYXRhIGZyb20gdGhlIGZpbGVzIGluIHRoZSBwcmVpbnN0IGRpcmVjdGx5LgorCisgICAgZiA9IG9wZW4oZC5leHBhbmQoIiR7U1RBR0lOR19EQVRBRElSfS9iYXNlLXBhc3N3ZC9wYXNzd2QubWFzdGVyIiksICdyJykKKyAgICBwYXNzd2QgPSAiIi5qb2luKGYucmVhZGxpbmVzKCkpCisgICAgZi5jbG9zZSgpCisgICAgZiA9IG9wZW4oZC5leHBhbmQoIiR7U1RBR0lOR19EQVRBRElSfS9iYXNlLXBhc3N3ZC9ncm91cC5tYXN0ZXIiKSwgJ3InKQorICAgIGdyb3VwID0gIiIuam9pbihmLnJlYWRsaW5lcygpKQorICAgIGYuY2xvc2UoKQorCisgICAgcHJlaW5zdCA9ICIiIiMhL2Jpbi9zaAorbWtkaXIgLXAgJEQke3N5c2NvbmZkaXJ9CitpZiBbICEgLWUgJEQke3N5c2NvbmZkaXJ9L3Bhc3N3ZCBdOyB0aGVuCitcdGNhdCA8PCAnRU9GJyA+ICREJHtzeXNjb25mZGlyfS9wYXNzd2QKKyIiIiArIHBhc3N3ZCArICIiIkVPRgorZmkKK2lmIFsgISAtZSAkRCR7c3lzY29uZmRpcn0vZ3JvdXAgXTsgdGhlbgorXHRjYXQgPDwgJ0VPRicgPiAkRCR7c3lzY29uZmRpcn0vZ3JvdXAKKyIiIiArIGdyb3VwICsgIiIiRU9GCitmaQorIiIiCisgICAgZC5zZXRWYXIoJ3BrZ19wcmVpbnN0XyR7UE59JywgcHJlaW5zdCkKK30KKworYWRkdGFzayBkb19wYWNrYWdlIGFmdGVyIGRvX3BvcHVsYXRlX3N5c3Jvb3QKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworUEFDS0FHRVMgPSsgIiR7UE59LXVwZGF0ZSIKK0ZJTEVTXyR7UE59LXVwZGF0ZSA9ICIke3NiaW5kaXJ9LyogJHtkYXRhZGlyfS8ke1BOfSIKKworcGtnX3Bvc3RpbnN0XyR7UE59LXVwZGF0ZSAoKSB7CisjIS9iaW4vc2gKK2lmIFsgLW4gIiREIiBdOyB0aGVuCisJZXhpdCAwCitmaQorJHtzYmluZGlyfS91cGRhdGUtcGFzc3dkCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ4ZjlmZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94LmluYwpAQCAtMCwwICsxLDQxNiBAQAorU1VNTUFSWSA9ICJUaW55IHZlcnNpb25zIG9mIG1hbnkgY29tbW9uIFVOSVggdXRpbGl0aWVzIGluIGEgc2luZ2xlIHNtYWxsIGV4ZWN1dGFibGUiCitERVNDUklQVElPTiA9ICJCdXN5Qm94IGNvbWJpbmVzIHRpbnkgdmVyc2lvbnMgb2YgbWFueSBjb21tb24gVU5JWCB1dGlsaXRpZXMgaW50byBhIHNpbmdsZSBzbWFsbCBleGVjdXRhYmxlLiBJdCBwcm92aWRlcyBtaW5pbWFsaXN0IHJlcGxhY2VtZW50cyBmb3IgbW9zdCBvZiB0aGUgdXRpbGl0aWVzIHlvdSB1c3VhbGx5IGZpbmQgaW4gR05VIGZpbGV1dGlscywgc2hlbGx1dGlscywgZXRjLiBUaGUgdXRpbGl0aWVzIGluIEJ1c3lCb3ggZ2VuZXJhbGx5IGhhdmUgZmV3ZXIgb3B0aW9ucyB0aGFuIHRoZWlyIGZ1bGwtZmVhdHVyZWQgR05VIGNvdXNpbnM7IGhvd2V2ZXIsIHRoZSBvcHRpb25zIHRoYXQgYXJlIGluY2x1ZGVkIHByb3ZpZGUgdGhlIGV4cGVjdGVkIGZ1bmN0aW9uYWxpdHkgYW5kIGJlaGF2ZSB2ZXJ5IG11Y2ggbGlrZSB0aGVpciBHTlUgY291bnRlcnBhcnRzLiBCdXN5Qm94IHByb3ZpZGVzIGEgZmFpcmx5IGNvbXBsZXRlIFBPU0lYIGVudmlyb25tZW50IGZvciBhbnkgc21hbGwgb3IgZW1iZWRkZWQgc3lzdGVtLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuYnVzeWJveC5uZXQiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5idXN5Ym94Lm5ldC8iCisKK0RFUEVORFMgKz0gImtlcm4tdG9vbHMtbmF0aXZlIgorCisjIGJ6aXAyIGFwcGxldCBpbiBidXN5Ym94IGlzIGJhc2VkIG9uIGxpZ2h0bHktbW9kaWZpZWQgYnppcDIgc291cmNlCisjIHRoZSBHUEwgaXMgdmVyc2lvbiAyIG9ubHkKK0xJQ0VOU0UgPSAiR1BMdjIgJiBiemlwMiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWRlMTBkZTQ4NjQyYWI3NDMxOGU4OTNhNjExMDVhZmJiIgorCitTRUNUSU9OID0gImJhc2UiCisKKyMgV2hldGhlciB0byBzcGxpdCB0aGUgc3VpZCBhcHBzIGludG8gYSBzZXBlcmF0ZSBiaW5hcnkKK0JVU1lCT1hfU1BMSVRfU1VJRCA/PSAiMSIKKworZXhwb3J0IEVYVFJBX0NGTEFHUyA9ICIke0NGTEFHU30iCitleHBvcnQgRVhUUkFfTERGTEFHUyA9ICIke0xERkxBR1N9IgorZXhwb3J0IEVYVFJBX09FTUFLRSArPSAiJ0xEPSR7Q0NMRH0nIgorCitQQUNLQUdFUyA9KyAiJHtQTn0taHR0cGQgJHtQTn0tdWRoY3BkICR7UE59LXVkaGNwYyAke1BOfS1zeXNsb2cgJHtQTn0tbWRldiAke1BOfS1od2Nsb2NrIgorCitGSUxFU18ke1BOfS1odHRwZCA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9idXN5Ym94LWh0dHBkIC9zcnYvd3d3IgorRklMRVNfJHtQTn0tc3lzbG9nID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c2xvZyogJHtzeXNjb25mZGlyfS9zeXNsb2ctc3RhcnR1cC5jb25mKiAke3N5c2NvbmZkaXJ9L3N5c2xvZy5jb25mKiAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c2xvZy5zZXJ2aWNlICR7c3lzY29uZmRpcn0vZGVmYXVsdC9idXN5Ym94LXN5c2xvZyIKK0ZJTEVTXyR7UE59LW1kZXYgPSAiJHtzeXNjb25mZGlyfS9pbml0LmQvbWRldiAke3N5c2NvbmZkaXJ9L21kZXYuY29uZiAke3N5c2NvbmZkaXJ9L21kZXYvKiIKK0ZJTEVTXyR7UE59LXVkaGNwZCA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9idXN5Ym94LXVkaGNwZCIKK0ZJTEVTXyR7UE59LXVkaGNwYyA9ICIke3N5c2NvbmZkaXJ9L3VkaGNwYy5kICR7ZGF0YWRpcn0vdWRoY3BjIgorRklMRVNfJHtQTn0taHdjbG9jayA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9od2Nsb2NrLnNoIgorCitJTklUU0NSSVBUX1BBQ0tBR0VTID0gIiR7UE59LWh0dHBkICR7UE59LXN5c2xvZyAke1BOfS11ZGhjcGQgJHtQTn0tbWRldiAke1BOfS1od2Nsb2NrIgorCitJTklUU0NSSVBUX05BTUVfJHtQTn0taHR0cGQgPSAiYnVzeWJveC1odHRwZCIKK0lOSVRTQ1JJUFRfTkFNRV8ke1BOfS1od2Nsb2NrID0gImh3Y2xvY2suc2giCitJTklUU0NSSVBUX05BTUVfJHtQTn0tbWRldiA9ICJtZGV2IgorSU5JVFNDUklQVF9QQVJBTVNfJHtQTn0tbWRldiA9ICJzdGFydCAwMyBTIC4iCitJTklUU0NSSVBUX05BTUVfJHtQTn0tc3lzbG9nID0gInN5c2xvZyIKK0lOSVRTQ1JJUFRfTkFNRV8ke1BOfS11ZGhjcGQgPSAiYnVzeWJveC11ZGhjcGQiIAorCitTWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59LXN5c2xvZyIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1zeXNsb2cgPSAiYnVzeWJveC1zeXNsb2cuc2VydmljZSIKKworQ09ORkZJTEVTXyR7UE59LXN5c2xvZyA9ICIke3N5c2NvbmZkaXJ9L3N5c2xvZy1zdGFydHVwLmNvbmYuJHtCUE59IgorQ09ORkZJTEVTXyR7UE59LW1kZXYgPSAiJHtzeXNjb25mZGlyfS9tZGV2LmNvbmYiCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gIiR7UE59LXN5c2xvZyAke1BOfS11ZGhjcGMiCisKK2luaGVyaXQgY21sMSBzeXN0ZW1kIHVwZGF0ZS1yYy5kIHB0ZXN0CisKKyMgaW50ZXJuYWwgaGVscGVyCitkZWYgYnVzeWJveF9jZmcoZmVhdHVyZSwgdG9rZW5zLCBjbmYsIHJlbSk6CisJaWYgdHlwZSh0b2tlbnMpID09IHR5cGUoIiIpOgorCQl0b2tlbnMgPSBbdG9rZW5zXQorCXJlbS5leHRlbmQoWycvXlsjIF0qJyArIHRva2VuICsgJ1sgPV0vZCcgZm9yIHRva2VuIGluIHRva2Vuc10pCisJaWYgZmVhdHVyZToKKwkJY25mLmV4dGVuZChbdG9rZW4gKyAnPXknIGZvciB0b2tlbiBpbiB0b2tlbnNdKQorCWVsc2U6CisJCWNuZi5leHRlbmQoWycjICcgKyB0b2tlbiArICcgaXMgbm90IHNldCcgZm9yIHRva2VuIGluIHRva2Vuc10pCisKKyMgTWFwIGRpc3RybyBmZWF0dXJlcyB0byBjb25maWcgc2V0dGluZ3MKK2RlZiBmZWF0dXJlc190b19idXN5Ym94X3NldHRpbmdzKGQpOgorCWNuZiwgcmVtID0gKFtdLCBbXSkKKwlidXN5Ym94X2NmZyhiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCBUcnVlLCBGYWxzZSwgZCksICdDT05GSUdfRkVBVFVSRV9JUFY2JywgY25mLCByZW0pCisJYnVzeWJveF9jZmcoYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCBUcnVlLCBGYWxzZSwgZCksICdDT05GSUdfTEZTJywgY25mLCByZW0pCisJYnVzeWJveF9jZmcoYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCBUcnVlLCBGYWxzZSwgZCksICdDT05GSUdfRkRJU0tfU1VQUE9SVF9MQVJHRV9ESVNLUycsIGNuZiwgcmVtKQorCWJ1c3lib3hfY2ZnKGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbmxzJywgVHJ1ZSwgRmFsc2UsIGQpLCAnQ09ORklHX0xPQ0FMRV9TVVBQT1JUJywgY25mLCByZW0pCisJYnVzeWJveF9jZmcoYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY0JywgVHJ1ZSwgRmFsc2UsIGQpLCAnQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVBWNCcsIGNuZiwgcmVtKQorCWJ1c3lib3hfY2ZnKGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsIFRydWUsIEZhbHNlLCBkKSwgJ0NPTkZJR19GRUFUVVJFX0lGVVBET1dOX0lQVjYnLCBjbmYsIHJlbSkKKwlidXN5Ym94X2NmZyhiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dpZmknLCBUcnVlLCBGYWxzZSwgZCksICdDT05GSUdfUkZLSUxMJywgY25mLCByZW0pCisJYnVzeWJveF9jZmcoYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCBUcnVlLCBGYWxzZSwgZCksICdDT05GSUdfUkZLSUxMJywgY25mLCByZW0pCisJcmV0dXJuICJcbiIuam9pbihjbmYpLCAiXG4iLmpvaW4ocmVtKQorCisjIFgsIFkgPSAke0BmZWF0dXJlc190b191Y2xpYmNfc2V0dGluZ3MoZCl9CisjIHVuZm9ydHVuYXRlbHkgZG9lc24ndCBzZWVtIHRvIHdvcmsgd2l0aCBiaXRiYWtlLCB3b3JrYXJvdW5kOgorZGVmIGZlYXR1cmVzX3RvX2J1c3lib3hfY29uZihkKToKKwljbmYsIHJlbSA9IGZlYXR1cmVzX3RvX2J1c3lib3hfc2V0dGluZ3MoZCkKKwlyZXR1cm4gY25mCitkZWYgZmVhdHVyZXNfdG9fYnVzeWJveF9kZWwoZCk6CisJY25mLCByZW0gPSBmZWF0dXJlc190b19idXN5Ym94X3NldHRpbmdzKGQpCisJcmV0dXJuIHJlbQorCitjb25maWdtYW5nbGUgPSAnL0NST1NTX0NPTVBJTEVSX1BSRUZJWC9kOyBcCisJCS9DT05GSUdfRVhUUkFfQ0ZMQUdTL2Q7IFwKKwkJJworT0VfRkVBVFVSRVMgOj0gIiR7QGZlYXR1cmVzX3RvX2J1c3lib3hfY29uZihkKX0iCitPRV9ERUwgICAgICA6PSAiJHtAZmVhdHVyZXNfdG9fYnVzeWJveF9kZWwoZCl9IgorRE9fSVB2NCA6PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY0JywgMSwgMCwgZCl9IgorRE9fSVB2NiA6PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgMSwgMCwgZCl9IgorCitweXRob24gKCkgeworICBpZiAiJHtPRV9ERUx9IjoKKyAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsICIke09FX0RFTH0iICsgIlxuIikKKyAgaWYgIiR7T0VfRkVBVFVSRVN9IjoKKyAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsCisgICAgICAgICAgICAgICAgICAgIi9eIyMjIERJU1RSTyBGRUFUVVJFUyQvYVxcXG4lc1xuXG4iICUKKyAgICAgICAgICAgICAgICAgICAoIlxcbiIuam9pbigoZC5leHBhbmQoIiR7T0VfRkVBVFVSRVN9Iikuc3BsaXQoIlxuIikpKSkpCisgIGQuc2V0VmFyKCdjb25maWdtYW5nbGVfYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgIi9eIyMjIENST1NTJC9hXFxcbiVzXG4iICUKKyAgICAgICAgICAgICAgICAgICgiXFxuIi5qb2luKFsiQ09ORklHX0NST1NTX0NPTVBJTEVSX1BSRUZJWD1cIiR7VEFSR0VUX1BSRUZJWH1cIiIsCisJCQkgICAgICAgIkNPTkZJR19FWFRSQV9DRkxBR1M9XCIke0NGTEFHU31cIiBcIiR7SE9TVF9DQ19BUkNIfVwiIgorICAgICAgICAgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgICAgICAgICkpCit9CisKK2RvX3ByZXBhcmVfY29uZmlnICgpIHsKKwlzZWQgLWUgJ3MjQERBVEFESVJAIyR7ZGF0YWRpcn0jZycgXAorCQk8ICR7V09SS0RJUn0vZGVmY29uZmlnID4gJHtTfS8uY29uZmlnCisJc2VkIC1pIC1lICcvQ09ORklHX1NUQVRJQy9kJyAuY29uZmlnCisJZWNobyAiIyBDT05GSUdfU1RBVElDIGlzIG5vdCBzZXQiID4+IC5jb25maWcKKwlmb3IgaSBpbiAnQ1JPU1MnICdESVNUUk8gRkVBVFVSRVMnOyBkbyBlY2hvICIjIyMgJGkiOyBkb25lID4+IFwKKwkJJHtTfS8uY29uZmlnCisJc2VkIC1pIC1lICcke2NvbmZpZ21hbmdsZX0nICR7U30vLmNvbmZpZworCWlmIHRlc3QgJHtET19JUHY0fSAtZXEgMCAmJiB0ZXN0ICR7RE9fSVB2Nn0gLWVxIDA7IHRoZW4KKwkgICMgZGlzYWJsZSBuZXR3b3JraW5nIGFwcGxldHMKKwkgIG12ICR7U30vLmNvbmZpZyAke1N9Ly5jb25maWcub2UtdG1wCisJICBhd2sgJ0JFR0lOe25ldD0wfQorCSAgL14jIE5ldHdvcmtpbmcgVXRpbGl0aWVzL3tuZXQ9MX0KKwkgIC9eIyQve2lmKG5ldCl7bmV0PW5ldCsxfX0KKwkgIHtpZihuZXQ9PTImJiQwICF+IC9eIy8mJiQxKXtwcmludCgiIyAiJDEiIGlzIG5vdCBzZXQiKX1lbHNle3ByaW50fX0nIFwKKwkJICAke1N9Ly5jb25maWcub2UtdG1wID4gJHtTfS8uY29uZmlnCisJZmkKKwlzZWQgLWkgJ3MvQ09ORklHX0lGVVBET1dOX1VESENQQ19DTURfT1BUSU9OUz0iLVIgLW4iL0NPTkZJR19JRlVQRE9XTl9VREhDUENfQ01EX09QVElPTlM9Ii1SIC1iIi8nICR7U30vLmNvbmZpZworfQorCisjIHJldHVybnMgYWxsIHRoZSBlbGVtZW50cyBmcm9tIHRoZSBzcmMgdXJpIHRoYXQgYXJlIC5jZmcgZmlsZXMKK2RlZiBmaW5kX2NmZ3MoZCk6CisgICAgc291cmNlcz1zcmNfcGF0Y2hlcyhkLCBUcnVlKQorICAgIHNvdXJjZXNfbGlzdD1bXQorICAgIGZvciBzIGluIHNvdXJjZXM6CisgICAgICAgIGlmIHMuZW5kc3dpdGgoJy5jZmcnKToKKyAgICAgICAgICAgIHNvdXJjZXNfbGlzdC5hcHBlbmQocykKKworICAgIHJldHVybiBzb3VyY2VzX2xpc3QKKworZG9fY29uZmlndXJlICgpIHsKKwlkb19wcmVwYXJlX2NvbmZpZworCW1lcmdlX2NvbmZpZy5zaCAtbSAuY29uZmlnICR7QCIgIi5qb2luKGZpbmRfY2ZncyhkKSl9CisJY21sMV9kb19jb25maWd1cmUKK30KKworZG9fY29tcGlsZSgpIHsKKwl1bnNldCBDRkxBR1MgQ1BQRkxBR1MgQ1hYRkxBR1MgTERGTEFHUworCWlmIFsgIiR7QlVTWUJPWF9TUExJVF9TVUlEfSIgPSAiMSIgLWEgeGBncmVwICJDT05GSUdfRkVBVFVSRV9JTkRJVklEVUFMPXkiIC5jb25maWdgID0geCBdOyB0aGVuCisJIyBzcGxpdCB0aGUgLmNvbmZpZyBpbnRvIHR3byBwYXJ0cywgYW5kIG1ha2UgdHdvIGJ1c3lib3ggYmluYXJpZXMKKwkJY3AgLmNvbmZpZyAuY29uZmlnLm9yaWcKKwkJb2VfcnVubWFrZSBidXN5Ym94LmNmZy5zdWlkCisJCW9lX3J1bm1ha2UgYnVzeWJveC5jZmcubm9zdWlkCisJCWZvciBpIGluIGBjYXQgYnVzeWJveC5jZmcuc3VpZCBidXN5Ym94LmNmZy5ub3N1aWRgOyBkbworCQkJZWNobyAiIyAkaSBpcyBub3Qgc2V0IiA+PiAuY29uZmlnLmRpc2FibGUuYXBwcworCQlkb25lCisJCW1lcmdlX2NvbmZpZy5zaCAtbSAuY29uZmlnLm9yaWcgLmNvbmZpZy5kaXNhYmxlLmFwcHMKKwkJY3AgLmNvbmZpZyAuY29uZmlnLm5vbmFwcHMKKwkJZm9yIHMgaW4gc3VpZCBub3N1aWQ7IGRvCisJCQljYXQgYnVzeWJveC5jZmcuJHMgfCB3aGlsZSByZWFkIGl0ZW07IGRvCisJCQkJZ3JlcCAtdyAiJGl0ZW0iIC5jb25maWcub3JpZworCQkJZG9uZSA+IC5jb25maWcuYXBwLiRzCisJCQltZXJnZV9jb25maWcuc2ggLW0gLmNvbmZpZy5ub25hcHBzIC5jb25maWcuYXBwLiRzCisJCQlvZV9ydW5tYWtlIGJ1c3lib3hfdW5zdHJpcHBlZAorCQkJbXYgYnVzeWJveF91bnN0cmlwcGVkIGJ1c3lib3guJHMKKwkJCW9lX3J1bm1ha2UgYnVzeWJveC5saW5rcworCQkJbXYgYnVzeWJveC5saW5rcyBidXN5Ym94LmxpbmtzLiRzCisJCWRvbmUKKwkJIyBjb3B5IC5jb25maWcub3JpZyBiYWNrIHRvIC5jb25maWcsIGJlY2F1c2UgdGhlIGluc3RhbGwgcHJvY2VzcyBtYXkgY2hlY2sgdGhpcyBmaWxlCisJCWNwIC5jb25maWcub3JpZyAuY29uZmlnCisJCSMgY2xlYW51cAorCQlybSAuY29uZmlnLm9yaWcgLmNvbmZpZy5hcHAuc3VpZCAuY29uZmlnLmFwcC5ub3N1aWQgLmNvbmZpZy5kaXNhYmxlLmFwcHMgLmNvbmZpZy5ub25hcHBzCisJZWxzZQorCQlvZV9ydW5tYWtlIGJ1c3lib3hfdW5zdHJpcHBlZAorCQljcCBidXN5Ym94X3Vuc3RyaXBwZWQgYnVzeWJveAorCQlvZV9ydW5tYWtlIGJ1c3lib3gubGlua3MKKwlmaQorfQorCitkb19pbnN0YWxsICgpIHsKKwlpZiBbICIke3ByZWZpeH0iICE9ICIvdXNyIiBdOyB0aGVuCisJCXNlZCAtaSAiczpeL3Vzci86JHtwcmVmaXh9LzoiIGJ1c3lib3gubGlua3MqCisJZmkKKwlpZiBbICIke2Jhc2Vfc2JpbmRpcn0iICE9ICIvc2JpbiIgXTsgdGhlbgorCQlzZWQgLWkgInM6Xi9zYmluLzoke2Jhc2Vfc2JpbmRpcn0vOiIgYnVzeWJveC5saW5rcyoKKwlmaQorCWlmIFsgIiR7YmFzZV9iaW5kaXJ9IiAhPSAiL2JpbiIgXTsgdGhlbgorCQlzZWQgLWkgInM6Xi9iaW4vOiR7YmFzZV9iaW5kaXJ9LzoiIGJ1c3lib3gubGlua3MqCisJZmkKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisKKwlpZiAhIGdyZXAgLXEgIkNPTkZJR19GRUFUVVJFX0lORElWSURVQUw9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCSMgSW5zdGFsbCAvYmluL2J1c3lib3gsIGFuZCB0aGUgL2Jpbi9zaCBsaW5rIHNvIHRoZSBwb3N0aW5zdCBzY3JpcHQKKwkJIyBjYW4gcnVuLiBMZXQgdXBkYXRlLWFsdGVybmF0aXZlcyBoYW5kbGUgdGhlIHJlc3QuCisJCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJCWlmIFsgIiR7QlVTWUJPWF9TUExJVF9TVUlEfSIgPSAiMSIgXTsgdGhlbgorCQkJaW5zdGFsbCAtbSA0NzU1ICR7Qn0vYnVzeWJveC5zdWlkICR7RH0ke2Jhc2VfYmluZGlyfQorCQkJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vYnVzeWJveC5ub3N1aWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJCQlpbnN0YWxsIC1tIDA2NDQgJHtTfS9idXN5Ym94LmxpbmtzLnN1aWQgJHtEfSR7c3lzY29uZmRpcn0KKwkJCWluc3RhbGwgLW0gMDY0NCAke1N9L2J1c3lib3gubGlua3Mubm9zdWlkICR7RH0ke3N5c2NvbmZkaXJ9CisJCQlpZiBncmVwIC1xICJDT05GSUdfRkVBVFVSRV9TSF9JU19BU0g9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCQkJbG4gLXNmIGJ1c3lib3gubm9zdWlkICR7RH0ke2Jhc2VfYmluZGlyfS9zaAorCQkJZmkKKwkJCSMgS2VlcCBhIGRlZmF1bHQgYnVzeWJveCBmb3IgcGVvcGxlIHdobyB3YW50IHRvIGludm9rZSBidXN5Ym94IGRpcmVjdGx5LgorCQkJIyBUaGlzIGlzIGFsc28gdXNlZnVsIGZvciB0aGUgb24gZGV2aWNlIHVwZ3JhZGUuIEJlY2F1c2Ugd2Ugd2FudAorCQkJIyB0byB1c2UgdGhlIGJ1c3lib3ggY29tbWFuZCBpbiBwb3N0aW5zdC4KKwkJCWxuIC1zZiBidXN5Ym94Lm5vc3VpZCAke0R9JHtiYXNlX2JpbmRpcn0vYnVzeWJveAorCQllbHNlCisJCQlpZiBncmVwIC1xICJDT05GSUdfRkVBVFVSRV9TVUlEPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorCQkJCWluc3RhbGwgLW0gNDc1NSAke0J9L2J1c3lib3ggJHtEfSR7YmFzZV9iaW5kaXJ9CisJCQllbHNlCisJCQkJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vYnVzeWJveCAke0R9JHtiYXNlX2JpbmRpcn0KKwkJCWZpCisJCQlpbnN0YWxsIC1tIDA2NDQgJHtTfS9idXN5Ym94LmxpbmtzICR7RH0ke3N5c2NvbmZkaXJ9CisJCQlpZiBncmVwIC1xICJDT05GSUdfRkVBVFVSRV9TSF9JU19BU0g9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCQkJbG4gLXNmIGJ1c3lib3ggJHtEfSR7YmFzZV9iaW5kaXJ9L3NoCisJCQlmaQorCQkJIyBXZSBtYWtlIHRoaXMgc3ltbGluayBoZXJlIHRvIGVsaW1pbmF0ZSB0aGUgZXJyb3Igd2hlbiB1cGdyYWRpbmcgdG9nZXRoZXIKKwkJCSMgd2l0aCBidXN5Ym94LXN5c2xvZy4gV2l0aG91dCB0aGlzIHN5bWxpbmssIHRoZSBvcGtnIG1heSB0aGluayBvZiB0aGUKKwkJCSMgYnVzeWJveC5ub3N1aWQgYXMgb2Jzb2xldGUgYW5kIHJlbW92ZSBpdCwgcmVzdWx0aW5nIGluIGRlYWQgbGlua3MgbGlrZQorCQkJIyAvYmluL3NlZCAtPiAvYmluL2J1c3lib3gubm9zdWlkLiBUaGlzIHdpbGwgbWFrZSB1cGdyYWRpbmcgYnVzeWJveC1zeXNsb2cgZmFpbC4KKwkJCSMgVGhpcyBzeW1saW5rIHdpbGwgYmUgc2FmZWx5IGRlbGV0ZWQgaW4gcG9zdGluc3QsIHRodXMgbm8gbmVnYXRpdmUgZWZmZWN0LgorCQkJbG4gLXNmIGJ1c3lib3ggJHtEfSR7YmFzZV9iaW5kaXJ9L2J1c3lib3gubm9zdWlkCisJCWZpCisJZWxzZQorCQlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfSAke0R9JHtiYXNlX3NiaW5kaXJ9CisJCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfSAke0R9JHtiaW5kaXJ9ICR7RH0ke3NiaW5kaXJ9CisJCWNhdCBidXN5Ym94LmxpbmtzIHwgd2hpbGUgcmVhZCBGSUxFOyBkbworCQkJTkFNRT1gYmFzZW5hbWUgIiRGSUxFImAKKwkJCWluc3RhbGwgLW0gMDc1NSAiMF9saWIvJE5BTUUiICIke0R9JEZJTEUuJHtCUE59IgorCQlkb25lCisJCSMgYWRkIHN1aWQgYml0IHdoZXJlIG5lZWRlZAorCQlmb3IgaSBpbiBgZ3JlcCAtRSAiQVBQTEVULipCQl9TVUlEXygoTUFZQkV8UkVRVUlSRSkpIiBpbmNsdWRlL2FwcGxldHMuaCB8IGdyZXAgLXYgX0JCX1NVSURfRFJPUCB8IGN1dCAtZiAzIC1kICcoJyB8IGN1dCAtZiAxIC1kICcsJ2A7IGRvCisJCQlmaW5kICR7RH0gLW5hbWUgJGkuJHtCUE59IC1leGVjIGNobW9kIGErcyB7fSBcOworCQlkb25lCisJCWluc3RhbGwgLW0gMDc1NSAwX2xpYi9saWJidXN5Ym94LnNvLiR7UFZ9ICR7RH0ke2xpYmRpcn0vbGliYnVzeWJveC5zby4ke1BWfQorCQlsbiAtc2Ygc2guJHtCUE59ICR7RH0ke2Jhc2VfYmluZGlyfS9zaAorCQlsbiAtc2YgbG4uJHtCUE59ICR7RH0ke2Jhc2VfYmluZGlyfS9sbgorCQlsbiAtc2YgdGVzdC4ke0JQTn0gJHtEfSR7YmluZGlyfS90ZXN0CisJCWlmIFsgLWYgJHtEfS9saW51eHJjLiR7QlBOfSBdOyB0aGVuCisJCQltdiAke0R9L2xpbnV4cmMuJHtCUE59ICR7RH0vbGludXhyYworCQlmaQorCQlpbnN0YWxsIC1tIDA2NDQgJHtTfS9idXN5Ym94LmxpbmtzICR7RH0ke3N5c2NvbmZkaXJ9CisJZmkKKworCWlmIGdyZXAgLXEgIkNPTkZJR19TWVNMT0dEPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorCQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9zeXNsb2cgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c2xvZy4ke0JQTn0KKwkJaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS9zeXNsb2ctc3RhcnR1cC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2xvZy1zdGFydHVwLmNvbmYuJHtCUE59CisJCWluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vc3lzbG9nLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vc3lzbG9nLmNvbmYuJHtCUE59CisJZmkKKwlpZiBncmVwICJDT05GSUdfQ1JPTkQ9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2J1c3lib3gtY3JvbiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisJZmkKKwlpZiBncmVwICJDT05GSUdfSFRUUEQ9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2J1c3lib3gtaHR0cGQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCQlpbnN0YWxsIC1kICR7RH0vc3J2L3d3dworCWZpCisJaWYgZ3JlcCAiQ09ORklHX1VESENQRD15IiAke0J9Ly5jb25maWc7IHRoZW4KKwkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vYnVzeWJveC11ZGhjcGQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWZpCisJaWYgZ3JlcCAiQ09ORklHX0hXQ0xPQ0s9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2h3Y2xvY2suc2ggJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWZpCisJaWYgZ3JlcCAiQ09ORklHX1VESENQQz15IiAke0J9Ly5jb25maWc7IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS91ZGhjcGMuZAorCQlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L3VkaGNwYworICAgICAgICAgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3NpbXBsZS5zY3JpcHQgJHtEfSR7c3lzY29uZmRpcn0vdWRoY3BjLmQvNTBkZWZhdWx0CisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2RlZmF1bHQuc2NyaXB0ICR7RH0ke2RhdGFkaXJ9L3VkaGNwYy9kZWZhdWx0LnNjcmlwdAorCWZpCisJaWYgZ3JlcCAiQ09ORklHX0lORVREPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorCQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbmV0ZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvaW5ldGQuJHtCUE59CisJCXNlZCAtaSAiczovdXNyL3NiaW4vOiR7c2JpbmRpcn0vOiIgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2luZXRkLiR7QlBOfQorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9pbmV0ZC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9LworCWZpCisgICAgICAgIGlmIGdyZXAgIkNPTkZJR19NREVWPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorICAgICAgICAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vbWRldiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvbWRldgorICAgICAgICAgICAgICAgaWYgZ3JlcCAiQ09ORklHX0ZFQVRVUkVfTURFVl9DT05GPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L21kZXYuY29uZiAke0R9JHtzeXNjb25mZGlyfS9tZGV2LmNvbmYKKyAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9tZGV2CisgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2ZpbmQtdG91Y2hzY3JlZW4uc2ggJHtEfSR7c3lzY29uZmRpcn0vbWRldgorICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9tZGV2LW1vdW50LnNoICR7RH0ke3N5c2NvbmZkaXJ9L21kZXYKKyAgICAgICAgICAgICAgIGZpCisJZmkKKworICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKyAgICAgICAgaWYgZ3JlcCAtcSAiQ09ORklHX1NZU0xPR0Q9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisgICAgICAgICAgICBzZWQgJ3MsQGJhc2Vfc2JpbmRpckAsJHtiYXNlX3NiaW5kaXJ9LGcnIDwgJHtXT1JLRElSfS9idXN5Ym94LXN5c2xvZy5zZXJ2aWNlLmluIFwKKwkJPiAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9idXN5Ym94LXN5c2xvZy5zZXJ2aWNlCisgICAgICAgICAgICBpZiBbIC1mICR7V09SS0RJUn0vYnVzeWJveC1zeXNsb2cuZGVmYXVsdCBdIDsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKwkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vYnVzeWJveC1zeXNsb2cuZGVmYXVsdCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L2J1c3lib3gtc3lzbG9nCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgbG4gLXNmIC9kZXYvbnVsbCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXNsb2cuc2VydmljZQorICAgICAgICBmaQorICAgICAgICBpZiBncmVwIC1xICJDT05GSUdfS0xPR0Q9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisgICAgICAgICAgICBzZWQgJ3MsQGJhc2Vfc2JpbmRpckAsJHtiYXNlX3NiaW5kaXJ9LGcnIDwgJHtXT1JLRElSfS9idXN5Ym94LWtsb2dkLnNlcnZpY2UuaW4gXAorCQk+ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2J1c3lib3gta2xvZ2Quc2VydmljZQorICAgICAgICBmaQorICAgIGZpCisKKyAgICAjIFJlbW92ZSB0aGUgc3lzdmluaXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlIGZvciBzeXN0ZW1kIHN5c3RlbXMgdG8gYXZvaWQgY29uZnVzaW9uCisgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsICdmYWxzZScsICd0cnVlJywgZCl9OyB0aGVuCisJcm0gLWYgJHtEfSR7c3lzY29uZmRpcn0vc3lzbG9nLXN0YXJ0dXAuY29uZi4ke0JQTn0KKyAgICBmaQorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiNTAiCisKK0FMVEVSTkFUSVZFXyR7UE59LXN5c2xvZyArPSAic3lzbG9nLWNvbmYiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3lzbG9nLWNvbmZdID0gIiR7c3lzY29uZmRpcn0vc3lzbG9nLmNvbmYiCisKK3B5dGhvbiAoKSB7CisgICAgaWYgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICBkLmFwcGVuZFZhcignQUxURVJOQVRJVkVfJXMtc3lzbG9nJyAlIChwbiksICcgc3lzbG9nLWluaXQnKQorICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsICdzeXNsb2ctaW5pdCcsICclcy9pbml0LmQvc3lzbG9nJyAlIChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpKSkKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCAnc3lzbG9nLWluaXQnLCAnJXMvaW5pdC5kL3N5c2xvZy4lcycgJSAoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ0JQTicsIFRydWUpKSkKKyAgICAgICAgZC5hcHBlbmRWYXIoJ0FMVEVSTkFUSVZFXyVzLXN5c2xvZycgJSAocG4pLCAnIHN5c2xvZy1zdGFydHVwLWNvbmYnKQorICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsICdzeXNsb2ctc3RhcnR1cC1jb25mJywgJyVzL3N5c2xvZy1zdGFydHVwLmNvbmYnICUgKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSkpKQorICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsICdzeXNsb2ctc3RhcnR1cC1jb25mJywgJyVzL3N5c2xvZy1zdGFydHVwLmNvbmYuJXMnICUgKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdCUE4nLCBUcnVlKSkpCit9CisKK3B5dGhvbiBkb19wYWNrYWdlX3ByZXBlbmQgKCkgeworICAgICMgV2UgbmVlZCB0byBsb2FkIHRoZSBmdWxsIHNldCBvZiBidXN5Ym94IHByb3ZpZGVzIGZyb20gdGhlIC9ldGMvYnVzeWJveC5saW5rcworICAgICMgVXNlIHRoaXMgdG8gc2VlIHRoZSB1cGRhdGUtYWx0ZXJuYXRpdmVzIHdpdGggdGhlIHJpZ2h0IGluZm9ybWF0aW9uCisKKyAgICBkdmFyID0gZC5nZXRWYXIoJ0QnLCBUcnVlKQorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBkZWYgc2V0X2FsdGVybmF0aXZlX3ZhcnMobGlua3MsIHRhcmdldCk6CisgICAgICAgIGYgPSBvcGVuKCclcyVzJyAlIChkdmFyLCBsaW5rcyksICdyJykKKyAgICAgICAgZm9yIGFsdF9saW5rX25hbWUgaW4gZjoKKyAgICAgICAgICAgIGFsdF9saW5rX25hbWUgPSBhbHRfbGlua19uYW1lLnN0cmlwKCkKKyAgICAgICAgICAgIGFsdF9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShhbHRfbGlua19uYW1lKQorICAgICAgICAgICAgIyBNYXRjaCBjb3JldXRpbHMKKyAgICAgICAgICAgIGlmIGFsdF9uYW1lID09ICdbJzoKKyAgICAgICAgICAgICAgICBhbHRfbmFtZSA9ICdsYnJhY2tldCcKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdBTFRFUk5BVElWRV8lcycgJSAocG4pLCAnICcgKyBhbHRfbmFtZSkKKyAgICAgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgYWx0X25hbWUsIGFsdF9saW5rX25hbWUpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygnJXMlcycgJSAoZHZhciwgdGFyZ2V0KSk6CisgICAgICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBhbHRfbmFtZSwgdGFyZ2V0KQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cygnJXMvZXRjL2J1c3lib3gubGlua3MnICUgKGR2YXIpKToKKyAgICAgICAgc2V0X2FsdGVybmF0aXZlX3ZhcnMoIiR7c3lzY29uZmRpcn0vYnVzeWJveC5saW5rcyIsICIke2Jhc2VfYmluZGlyfS9idXN5Ym94IikKKyAgICBlbHNlOgorICAgICAgICBzZXRfYWx0ZXJuYXRpdmVfdmFycygiJHtzeXNjb25mZGlyfS9idXN5Ym94LmxpbmtzLm5vc3VpZCIsICIke2Jhc2VfYmluZGlyfS9idXN5Ym94Lm5vc3VpZCIpCisgICAgICAgIHNldF9hbHRlcm5hdGl2ZV92YXJzKCIke3N5c2NvbmZkaXJ9L2J1c3lib3gubGlua3Muc3VpZCIsICIke2Jhc2VfYmluZGlyfS9idXN5Ym94LnN1aWQiKQorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCSMgVGhpcyBwYXJ0IG9mIGNvZGUgaXMgZGVkaWNhdGVkIHRvIHRoZSBvbiB0YXJnZXQgdXBncmFkZSBwcm9ibGVtLgorCSMgSXQncyBrbm93biB0aGF0IGlmIHdlIGRvbid0IG1ha2UgYXBwcm9wcmlhdGUgc3ltbGlua3MgYmVmb3JlIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgY2FsbHMsCisJIyB0aGVyZSB3aWxsIGJlIGVycm9ycyBpbmRpY2F0aW5nIG1pc3NpbmcgY29tbWFuZHMgc3VjaCBhcyAnc2VkJy4KKwkjIFRoZXNlIHN5bWxpbmtzIHdpbGwgbGF0ZXIgYmUgdXBkYXRlZCBieSB1cGRhdGUtYWx0ZXJuYXRpdmVzIGNhbGxzLgorCXRlc3QgLW4gMiA+IC9kZXYvbnVsbCB8fCBhbGlhcyB0ZXN0PSdidXN5Ym94IHRlc3QnCisJaWYgdGVzdCAieCREIiA9ICJ4IjsgdGhlbgorCQkjIFJlbW92ZSBidXN5Ym94Lm5vc3VpZCBpZiBpdCdzIGEgc3ltbGluaywgYmVjYXVzZSB0aGlzIHNpdHVhdGlvbiBpbmRpY2F0ZXMKKwkJIyB0aGF0IHdlJ3JlIGluc3RhbGxpbmcgb3IgdXBncmFkaW5nIHRvIGEgb25lLWJpbmFyeSBidXN5Ym94LgorCQlpZiB0ZXN0IC1oICR7YmFzZV9iaW5kaXJ9L2J1c3lib3gubm9zdWlkOyB0aGVuCisJCQlybSAtZiAke2Jhc2VfYmluZGlyfS9idXN5Ym94Lm5vc3VpZAorCQlmaQorCQlmb3Igc3VmZml4IGluICIiICIubm9zdWlkIiAiLnN1aWQiOyBkbworCQkJaWYgdGVzdCAtZSAke3N5c2NvbmZkaXJ9L2J1c3lib3gubGlua3Mkc3VmZml4OyB0aGVuCisJCQkJd2hpbGUgcmVhZCBsaW5rOyBkbworCQkJCQlpZiB0ZXN0ICEgLWUgIiRsaW5rIjsgdGhlbgorCQkJCQkJY2FzZSAiJGxpbmsiIGluCisJCQkJCQkJLyovKi8qKQorCQkJCQkJCQl0bz0iLi4vLi4ke2Jhc2VfYmluZGlyfS9idXN5Ym94JHN1ZmZpeCIKKwkJCQkJCQkJOzsKKwkJCQkJCQkvYmluLyopCisJCQkJCQkJCXRvPSJidXN5Ym94JHN1ZmZpeCIKKwkJCQkJCQkJOzsKKwkJCQkJCQkvKi8qKQorCQkJCQkJCQl0bz0iLi4ke2Jhc2VfYmluZGlyfS9idXN5Ym94JHN1ZmZpeCIKKwkJCQkJCQkJOzsKKwkJCQkJCWVzYWMKKwkJCQkJCSMgd2UgY2FuIHVzZSBidXN5Ym94IGhlcmUgYmVjYXVzZSBldmVuIGlmIHdlIGFyZSB1c2luZyBzcGxpdHRlZCBidXN5Ym94CisJCQkJCQkjIHdlJ3ZlIG1hZGUgYSBzeW1saW5rIGZyb20gL2Jpbi9idXN5Ym94IHRvIC9iaW4vYnVzeWJveC5ub3N1aWQuCisJCQkJCQlidXN5Ym94IHJtIC1mICRsaW5rCisJCQkJCQlidXN5Ym94IGxuIC1zICR0byAkbGluaworCQkJCQlmaQorCQkJCWRvbmUgPCAke3N5c2NvbmZkaXJ9L2J1c3lib3gubGlua3Mkc3VmZml4CisJCQlmaQorCQlkb25lCisJZmkKK30KKworcGtnX3ByZXJtXyR7UE59ICgpIHsKKwkjIFRoaXMgaXMgc28geW91IGNhbiBtYWtlIGJ1c3lib3ggY29tbWl0IHN1aWNpZGUgLSByZW1vdmluZyBidXN5Ym94IHdpdGggbm8gb3RoZXIgcGFja2FnZXMKKwkjIHByb3ZpZGluZyBpdHMgZmlsZXMsIHRoaXMgd2lsbCBtYWtlIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgd29yaywgYnV0IHRoZSB1cGRhdGUtcmMuZCBwYXJ0CisJIyBmb3Igc3lzbG9nLCBodHRwZCBhbmQvb3IgdWRoY3BkIHdpbGwgZmFpbCBpZiB0aGVyZSBpcyBubyBvdGhlciBwYWNrYWdlIHByb3ZpZGluZyBzaAorCXRtcGRpcj1gbWt0ZW1wIC1kIC90bXAvYnVzeWJveHJtLVhYWFhYWGAKKwlsbiAtcyAke2Jhc2VfYmluZGlyfS9idXN5Ym94ICR0bXBkaXIvWworCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci90ZXN0CisJbG4gLXMgJHtiYXNlX2JpbmRpcn0vYnVzeWJveCAkdG1wZGlyL2hlYWQKKwlsbiAtcyAke2Jhc2VfYmluZGlyfS9idXN5Ym94ICR0bXBkaXIvc2gKKwlsbiAtcyAke2Jhc2VfYmluZGlyfS9idXN5Ym94ICR0bXBkaXIvYmFzZW5hbWUKKwlsbiAtcyAke2Jhc2VfYmluZGlyfS9idXN5Ym94ICR0bXBkaXIvZWNobworCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci9tdgorCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci9sbgorCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci9kaXJuYW1lCisJbG4gLXMgJHtiYXNlX2JpbmRpcn0vYnVzeWJveCAkdG1wZGlyL3JtCisJbG4gLXMgJHtiYXNlX2JpbmRpcn0vYnVzeWJveCAkdG1wZGlyL3NlZAorCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci9zb3J0CisJbG4gLXMgJHtiYXNlX2JpbmRpcn0vYnVzeWJveCAkdG1wZGlyL2dyZXAKKwlleHBvcnQgUEFUSD0kUEFUSDokdG1wZGlyCit9CisKK3BrZ19wcmVybV8ke1BOfS1zeXNsb2cgKCkgeworCSMgcmVtb3ZlIHN5c2xvZworCWlmIHRlc3QgIngkRCIgPSAieCI7IHRoZW4KKwkJaWYgdGVzdCAiJDEiID0gInVwZ3JhZGUiIC1vICIkMSIgPSAicmVtb3ZlIjsgdGhlbgorCQkJJHtzeXNjb25mZGlyfS9pbml0LmQvc3lzbG9nIHN0b3AKKwkJZmkKKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvMDAwMS1jaG93bi1maXgtaGVscC10ZXh0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvMDAwMS1jaG93bi1maXgtaGVscC10ZXh0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyOTk3OTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC8wMDAxLWNob3duLWZpeC1oZWxwLXRleHQucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSBkMjkxYzJmZGQ1Y2I4NjE2NjA1YzY3ZWNiZmIwNDI3NGZhMDk0MjQyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVubGluZyBaaGVuZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CitEYXRlOiBTdW4sIDcgSnVuIDIwMTUgMDI6MzI6MjMgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gY2hvd246IGZpeCBoZWxwIHRleHQKKworRGVyaXZlZCBmcm9tOgoraHR0cDovL2dpdC5idXN5Ym94Lm5ldC9idXN5Ym94L2NvbW1pdC8/aWQ9ZDI5MWMyZmRkNWNiODYxNjYwNWM2N2VjYmZiMDQyNzRmYTA5NDI0Mi4KKworT25seSB3aGVuIERFU0tUT1AgaXMgZW5hYmxlZCwgY2hvd24gaGFzIC1MLCAtSCBhbmQgLVAgb3B0aW9ucy4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBKdW5saW5nIFpoZW5nIDx6aGVuZ2p1bmxpbmdAaHVhd2VpLmNvbT4KK1NpZ25lZC1vZmYtYnk6IERlbnlzIFZsYXNlbmtvIDx2ZGEubGludXhAZ29vZ2xlbWFpbC5jb20+CistLS0KKyBjb3JldXRpbHMvY2hvd24uYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvcmV1dGlscy9jaG93bi5jIGIvY29yZXV0aWxzL2Nob3duLmMKK2luZGV4IGNiMDdiYmMuLjY3OWMwZDggMTAwNjQ0CistLS0gYS9jb3JldXRpbHMvY2hvd24uYworKysrIGIvY29yZXV0aWxzL2Nob3duLmMKK0BAIC0xMSw3ICsxMSw3IEBACisgLyogaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA3OTA0OTc1L3V0aWxpdGllcy9jaG93bi5odG1sICovCisgCisgLy91c2FnZTojZGVmaW5lIGNob3duX3RyaXZpYWxfdXNhZ2UKKy0vL3VzYWdlOiAgICAgICAiWy1SaExIUCJJRl9ERVNLVE9QKCJjdmYiKSJdLi4uIE9XTkVSWzwufDo+W0dST1VQXV0gRklMRS4uLiIKKysvL3VzYWdlOiAgICAgICAiWy1SaCJJRl9ERVNLVE9QKCJMSFBjdmYiKSJdLi4uIE9XTkVSWzwufDo+W0dST1VQXV0gRklMRS4uLiIKKyAvL3VzYWdlOiNkZWZpbmUgY2hvd25fZnVsbF91c2FnZSAiXG5cbiIKKyAvL3VzYWdlOiAgICAgICAiQ2hhbmdlIHRoZSBvd25lciBhbmQvb3IgZ3JvdXAgb2YgZWFjaCBGSUxFIHRvIE9XTkVSIGFuZC9vciBHUk9VUFxuIgorIC8vdXNhZ2U6ICAgICAiXG4JLVIJUmVjdXJzZSIKKy0tIAorMS44LjMuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC8wMDAxLWlmY29uZmlnLWZpeC1kb3VibGUtZnJlZS1mYXRhbC1lcnJvci1pbi1JTkVUX3NwcmludC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94LzAwMDEtaWZjb25maWctZml4LWRvdWJsZS1mcmVlLWZhdGFsLWVycm9yLWluLUlORVRfc3ByaW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNzI5YjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC8wMDAxLWlmY29uZmlnLWZpeC1kb3VibGUtZnJlZS1mYXRhbC1lcnJvci1pbi1JTkVUX3NwcmludC5wYXRjaApAQCAtMCwwICsxLDY3IEBACitGcm9tIGE5Nzc3Nzg4OTMyODE1N2JiN2QwNmVjNjE4YmFkMTY3MTJhOWMzNDUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEZW55cyBWbGFzZW5rbyA8dmRhLmxpbnV4QGdvb2dsZW1haWwuY29tPgorRGF0ZTogVHVlLCAzIEZlYiAyMDE1IDEyOjExOjMwICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGlmY29uZmlnOiBmaXggZG91YmxlIGZyZWUgZmF0YWwgZXJyb3IgaW4gSU5FVF9zcHJpbnQKKworRGVyaXZlZCBmcm9tOgoraHR0cDovL2dpdC5idXN5Ym94Lm5ldC9idXN5Ym94L2NvbW1pdC8/aWQ9YTk3Nzc3ODg5MzI4MTU3YmI3ZDA2ZWM2MThiYWQxNjcxMmE5YzM0NS4KKworV2hpbGUgSU5FVF9zcHJpbnQgb3IgSU5FVDZfc3ByaW50IGlzIGNhbGxlZCBjaXJjdWxhcmx5IGJ5IGtlZXBpbmcKK2lmY29uZmlnaW5nLCBzYXAtPnNhX2ZhbWlseSB3b3VsZCBiZSBjbGVhbmVkIGJ5IG90aGVyIHBhcmFsbGVsIHByb2Nlc3Nlcworc3VjaCBhcyBkaGNsaWVudCBzb21ldGltZXMsIGFuZCB0aGVuIHRoZXJlIHdvdWxkIGJlIGEgZG91YmxlIGZyZWUgZXJyb3IKK2xpa2UgdGhlIGZvbGxvd2luZzoKKworICAqKiogZ2xpYmMgZGV0ZWN0ZWQgKioqIGlmY29uZmlnOiBkb3VibGUgZnJlZSBvciBjb3JydXB0aW9uIChmYXN0dG9wKTogMHgwMDBhNjAwOCAqKioKKyAgPT09PT09PSBCYWNrdHJhY2U6ID09PT09PT09PQorICAvbGliL2xpYmMuc28uNigrMHg2YmM4NClbMHg0MDEzM2M4NF0KKyAgL2xpYi9saWJjLnNvLjYoY2ZyZWUrMHg5NClbMHg0MDEzODY4NF0KKyAgaWZjb25maWdbMHgxYzQ2MF0KKyAgaWZjb25maWdbMHgxYzZhMF0KKyAgaWZjb25maWdbMHgxY2NmNF0KKyAgaWZjb25maWdbMHgxODdjOF0KKyAgaWZjb25maWdbMHhkNTQ0XQorICBpZmNvbmZpZ1sweGQ1ZGNdCisgIGlmY29uZmlnWzB4ZGNhOF0KKyAgL2xpYi9saWJjLnNvLjYoX19saWJjX3N0YXJ0X21haW4rMHgxMTApWzB4NDAwZGYyNThdCisgID09PT09PT0gTWVtb3J5IG1hcDogPT09PT09PT0KKyAgMDAwMDgwMDAtMDAwOWMwMDAgci14cCAwMDAwMDAwMCAxZjowNSA0NDQzMjggICAgIC9iaW4vYnVzeWJveAorICAwMDBhMzAwMC0wMDBhNDAwMCBydy1wIDAwMDkzMDAwIDFmOjA1IDQ0NDMyOCAgICAgL2Jpbi9idXN5Ym94CisKK1RoaXMgcGF0Y2ggbW92ZWQgZnJlZSgpIHR3byBsaW5lcyBkb3duIHRvIGFkZHJlc3MgdGhpcyBwcm9ibGVtLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IERlbnlzIFZsYXNlbmtvIDx2ZGEubGludXhAZ29vZ2xlbWFpbC5jb20+CistLS0KKyBuZXR3b3JraW5nL2ludGVyZmFjZS5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL25ldHdvcmtpbmcvaW50ZXJmYWNlLmMgYi9uZXR3b3JraW5nL2ludGVyZmFjZS5jCitpbmRleCBiZjdkMmIxLi5iMDU3MmQwIDEwMDY0NAorLS0tIGEvbmV0d29ya2luZy9pbnRlcmZhY2UuYworKysrIGIvbmV0d29ya2luZy9pbnRlcmZhY2UuYworQEAgLTkxLDkgKzkxLDkgQEAgc3RhdGljIGNvbnN0IGNoYXIqIEZBU1RfRlVOQyBJTkVUX3NwcmludChzdHJ1Y3Qgc29ja2FkZHIgKnNhcCwgaW50IG51bWVyaWMpCisgeworIAlzdGF0aWMgY2hhciAqYnVmZjsgLyogZGVmYXVsdHMgdG8gTlVMTCAqLworIAorLQlmcmVlKGJ1ZmYpOworIAlpZiAoc2FwLT5zYV9mYW1pbHkgPT0gMHhGRkZGIHx8IHNhcC0+c2FfZmFtaWx5ID09IDApCisgCQlyZXR1cm4gIltOT05FIFNFVF0iOworKwlmcmVlKGJ1ZmYpOworIAlidWZmID0gSU5FVF9ycmVzb2x2ZSgoc3RydWN0IHNvY2thZGRyX2luICopIHNhcCwgbnVtZXJpYywgMHhmZmZmZmYwMCk7CisgCXJldHVybiBidWZmOworIH0KK0BAIC0xNzMsOSArMTczLDkgQEAgc3RhdGljIGNvbnN0IGNoYXIqIEZBU1RfRlVOQyBJTkVUNl9zcHJpbnQoc3RydWN0IHNvY2thZGRyICpzYXAsIGludCBudW1lcmljKQorIHsKKyAJc3RhdGljIGNoYXIgKmJ1ZmY7CisgCistCWZyZWUoYnVmZik7CisgCWlmIChzYXAtPnNhX2ZhbWlseSA9PSAweEZGRkYgfHwgc2FwLT5zYV9mYW1pbHkgPT0gMCkKKyAJCXJldHVybiAiW05PTkUgU0VUXSI7CisrCWZyZWUoYnVmZik7CisgCWJ1ZmYgPSBJTkVUNl9ycmVzb2x2ZSgoc3RydWN0IHNvY2thZGRyX2luNiAqKSBzYXAsIG51bWVyaWMpOworIAlyZXR1cm4gYnVmZjsKKyB9CistLSAKKzEuOC4zLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvYnVzeWJveC1hcHBsZXRsaWItZGVwZW5kZW5jeS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2J1c3lib3gtYXBwbGV0bGliLWRlcGVuZGVuY3kucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUyZGJjYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2J1c3lib3gtYXBwbGV0bGliLWRlcGVuZGVuY3kucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyMgY29weSBjb21taXQgbWVzc2FnZSBmcm9tIE9FIGFzIHRoZSBwYXRjaCBjb21tZW50OgorIyAgICBjb21taXQgOThjMjQyOTFhYTE2NWY1MzQyM2MyN2FlMDMzODMxY2UwYjNiYjY3NgorIyAgICBBdXRob3I6IFJvbWFuIEkgS2hpbW92IDxraGltb3ZAYWx0ZWxsLnJ1PgorIyAgICBEYXRlOiAgIFRodSBNYXIgMjYgMjM6MDM6NTggMjAwOSArMDAwMAorIworIyAgICBidXN5Ym94OiB1cGRhdGUgYXBwbGV0bGliIGRlcGVuZGVuY3kgcGF0Y2gKKyMgICAgCisjICAgIFByZXZpb3VzIHZlcnNpb24gc3RpbGwgZmFpbGVkIGZyb20gdGltZSB0byB0aW1lIG9uIGNsZWFuLXN0YXJ0IGJ1aWxkcworIyAgICB3aXRoIDQgYml0YmFrZSB0aHJlYWRzIGFuZCAnLWoxNicuIEJ1aWxkaW5nIGJ1c3lib3ggYXMgc29sZSB0YXJnZXQgd29ya2VkCisjICAgIHdlbGwuCisjICAgIAorIyAgICBUaGUgcmVhc29uIGlzIHRoYXQgcHJldmlvdXMgdmVyc2lvbiBpbnRyb2R1Y2VkIGEgcmFjZSBiZXR3ZWVuIGFwcGxldHMgbWFrZQorIyAgICBwcm9jZXNzZXMgc3Bhd25lZCBmcm9tIHRvcC1sZXZlbCBNYWtlZmlsZSBhbmQgZnJvbSBsaWJiYiBNYWtlZmlsZS4KKyMgICAgCisjICAgIEZpeCBpdCB3aXRoIGhpZ2gtbGV2ZWwgZGVwZW5kZW5jeSB0aGF0IGRvZXNuJ3QgY3JlYXRlIHJhY2VzLgorIyAgICAKKyMgICAgU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuQG9wZW5lbWJlZGRlZC5vcmc+CisjCisjIGFib3ZlIGNvbW1lbnQgYWRkZWQgYnkgS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+LCAyMDEwLTA3LTA2CisKK0luZGV4OiBidXN5Ym94LTEuMTMuMi9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJ1c3lib3gtMS4xMy4yLm9yaWcvTWFrZWZpbGUJMjAwOS0wMy0xOSAxNTo0NDozNy40MTkyNzAyNjUgKzAzMDAKKysrKyBidXN5Ym94LTEuMTMuMi9NYWtlZmlsZQkyMDA5LTAzLTE5IDE1OjQ1OjU3LjczNzUyMTI5NiArMDMwMAorQEAgLTQ3MSw2ICs0NzEsMTAgQEAKKyAJCXV0aWwtbGludXgvIFwKKyAJCXV0aWwtbGludXgvdm9sdW1lX2lkLyBcCisgCisrIyBMaWIgaW50ZXJkZXBzCisrIyBsaWJiYiB1c2VzIGhlYWRlcnMgZ2VuZXJhdGVkIGluIGFwcGxldHMKKytsaWJiYjogYXBwbGV0cworKworIGVuZGlmICMgS0JVSUxEX0VYVE1PRAorIAorIGlmZXEgKCQoZG90LWNvbmZpZyksMSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2J1c3lib3gtY3Jvc3MtbWVudWNvbmZpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2J1c3lib3gtY3Jvc3MtbWVudWNvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGE4Njg1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvYnVzeWJveC1jcm9zcy1tZW51Y29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK0Zyb206IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CitEYXRlOiBTdW4sIDMgTWFyIDIwMTMgMTI6MzE6NDAgLTA2MDAKK1N1YmplY3Q6IFtQQVRDSF0gbWVudWNvbmZpZyxjaGVjay1seGRpYWdsb2cuc2g6IEFsbG93IHNwZWNpZmljYXRpb24gb2YgbmN1cnNlcyBsb2NhdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitbIGJhc2VkIG9uOiBodHRwczovL2xrbWwub3JnL2xrbWwvMjAxMy8zLzMvMTAzIF0KKworVGhpcyBwYXRjaCBzeW5jcyB1cCB3aXRoIHRoZSB3YXkgdGhlIG1lbnVjb25maWcgbmN1cnNlcyAvIGN1cnNlcworaXMgZGV0ZWN0ZWQgYW5kIHRoZSBIT1NUX0VYVFJBQ0ZMQUdTIHdvcmtzIGluIHRoZSBMaW51eCBrZXJuZWwKK2FuZCBpdCBhbGxvd3MgdGhlIG1lbnVjb25maWcgdG8gd29yayB3aXRoIGEgc3lzcm9vdCB2ZXJzaW9uCitvZiB0aGUgY3Vyc2VzIGxpYnJhcmllcy4KKworLS0tCisKK0luIHNvbWUgY3Jvc3MgYnVpbGQgZW52aXJvbm1lbnRzIHN1Y2ggYXMgdGhlIFlvY3RvIFByb2plY3QgYnVpbGQKK2Vudmlyb25tZW50IGl0IHByb3ZpZGVzIGFuIG5jdXJzZXMgbGlicmFyeSB0aGF0IGlzIGNvbXBpbGVkCitkaWZmZXJlbnRseSB0aGFuIHRoZSBob3N0J3MgdmVyc2lvbi4gIFRoaXMgY2F1c2VzIGRpc3BsYXkgY29ycnVwdGlvbgorcHJvYmxlbXMgd2hlbiB0aGUgaG9zdCdzIGN1cnNlcyBpbmNsdWRlcyBhcmUgdXNlZCBpbnN0ZWFkIG9mIHRoZQoraW5jbHVkZXMgZnJvbSB0aGUgcHJvdmlkZWQgY29tcGlsZXIgYXJlIG92ZXJyaWRkZW4uICBUaGVyZSBpcyBhIHNlY29uZAorY2FzZSB3aGVyZSB0aGVyZSBpcyBubyBjdXJzZXMgbGlicmFyaWVzIGF0IGFsbCBvbiB0aGUgaG9zdCBzeXN0ZW0gYW5kCittZW51Y29uZmlnIHdpbGwganVzdCBmYWlsIGVudGlyZWx5LgorCitUaGUgc29sdXRpb24gaXMgc2ltcGx5IHRvIGFsbG93IGFuIG92ZXJyaWRlIHZhcmlhYmxlIGluCitjaGVjay1seGRpYWxvZy5zaCBmb3IgZW52aXJvbm1lbnRzIHN1Y2ggYXMgdGhlIFlvY3RvIFByb2plY3QuICBBZGRpbmcKK2EgQ1JPU1NfQ1VSU0VTX0xJQiBhbmQgQ1JPU1NfQ1VSU0VTX0lOQyBzb2x2ZXMgdGhlIGlzc3VlIGFuZCBhbGxvd2luZworY29tcGlsaW5nIGFuZCBsaW5raW5nIGFnYWluc3QgdGhlIHJpZ2h0IGhlYWRlcnMgYW5kIGxpYnJhcmllcy4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KK2NjOiBNaWNoYWwgTWFyZWsgPG1tYXJla0BzdXNlLmN6PgorY2M6IGxpbnV4LWtidWlsZEB2Z2VyLmtlcm5lbC5vcmcKKy0tLQorIHNjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9NYWtlZmlsZSAgICAgICAgICB8ICAgIDIgKy0KKyBzY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvY2hlY2stbHhkaWFsb2cuc2ggfCAgICA4ICsrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrLWx4ZGlhbG9nLnNoCisrKysgYi9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvY2hlY2stbHhkaWFsb2cuc2gKK0BAIC00LDYgKzQsMTAgQEAKKyAjIFdoYXQgbGlicmFyeSB0byBsaW5rCisgbGRmbGFncygpCisgeworKwlpZiBbIHgiJENST1NTX0NVUlNFU19MSUIiICE9IHggXTsgdGhlbgorKwkJZWNobyAiJENST1NTX0NVUlNFU19MSUIiCisrCQlleGl0CisrCWZpCisgCWZvciBleHQgaW4gc28gYSBkeWxpYiA7IGRvCisgCQlmb3IgbGliIGluIG5jdXJzZXN3IG5jdXJzZXMgY3Vyc2VzIDsgZG8KKyAJCQkkY2MgLXByaW50LWZpbGUtbmFtZT1saWIke2xpYn0uJHtleHR9IHwgZ3JlcCAtcSAvCitAQCAtMTksNiArMjMsMTAgQEAgbGRmbGFncygpCisgIyBXaGVyZSBpcyBuY3Vyc2VzLmg/CisgY2NmbGFncygpCisgeworKwlpZiBbIHgiJENST1NTX0NVUlNFU19JTkMiICE9IHggXTsgdGhlbgorKwkJZWNobyAiJENST1NTX0NVUlNFU19JTkMiCisrCQlleGl0CisrCWZpCisgCWlmIFsgLWYgL3Vzci9pbmNsdWRlL25jdXJzZXN3L25jdXJzZXMuaCBdOyB0aGVuCisgCQllY2hvICctSS91c3IvaW5jbHVkZS9uY3Vyc2VzdyAtRENVUlNFU19MT0M9IjxuY3Vyc2VzLmg+IicKKyAJZWxpZiBbIC1mIC91c3IvaW5jbHVkZS9uY3Vyc2Vzdy9jdXJzZXMuaCBdOyB0aGVuCistLS0gYS9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvTWFrZWZpbGUKKysrKyBiL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9NYWtlZmlsZQorQEAgLTUsNyArNSw3IEBAIGNoZWNrLWx4ZGlhbG9nICA6PSAkKHNyY3RyZWUpLyQoc3JjKS9jaGUKKyAKKyAjIFVzZSByZXVyc2l2ZWx5IGV4cGFuZGVkIHZhcmlhYmxlcyBzbyB3ZSBkbyBub3QgY2FsbCBnY2MgdW5sZXNzCisgIyB3ZSByZWFsbHkgbmVlZCB0byBkbyBzby4gKERvIG5vdCBjYWxsIGdjYyBhcyBwYXJ0IG9mIG1ha2UgbXJwcm9wZXIpCistSE9TVF9FWFRSQUNGTEFHUyA9ICQoc2hlbGwgJChDT05GSUdfU0hFTEwpICQoY2hlY2stbHhkaWFsb2cpIC1jY2ZsYWdzKQorK0hPU1RfRVhUUkFDRkxBR1MgKz0gJChzaGVsbCAkKENPTkZJR19TSEVMTCkgJChjaGVjay1seGRpYWxvZykgLWNjZmxhZ3MpCisgSE9TVF9MT0FETElCRVMgICA9ICQoc2hlbGwgJChDT05GSUdfU0hFTEwpICQoY2hlY2stbHhkaWFsb2cpIC1sZGZsYWdzICQoSE9TVENDKSkKKyAKKyBIT1NUX0VYVFJBQ0ZMQUdTICs9IC1ETE9DQUxFCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9idXN5Ym94LXVkaGNwYy1ub19kZWNvbmZpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2J1c3lib3gtdWRoY3BjLW5vX2RlY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOWNlM2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9idXN5Ym94LXVkaGNwYy1ub19kZWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDEzNyBAQAorRnJvbSA1MzYyNmNkMDZhM2VmMDVlZDg0N2RhZWE4MDJlZjBhYTk2NjFjYWE3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5kZXJzIERhcmFuZGVyIDxhbmRlcnNAY2hhcmdlc3Rvcm0uc2U+CitEYXRlOiBUaHUsIDMgTm92IDIwMTEgMDg6NTE6MzEgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gYnVzeWJveC11ZGhjcGMtbm9fZGVjb25maWcucGF0Y2gKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0FkZCBhIG5ldyBvcHRpb24gLUQgdG8gdGhlIHVkaGNwYyBjbGllbnQgdGhhdCBhbGxvd3MgZm9yCitkaGNwIHJlbmV3YWwgdG8gb2NjdXIgd2l0aG91dCBoYXZpbmcgdG8gZG93biB0aGUgaW50ZXJmYWNlCitpbiB0aGUgcHJvY2Vzcy4KKworU2lnbmVkLW9mZi1ieTogR3JlZyBNb2ZmYXR0IDxncmVnLm1vZmZhdHRAd2luZHJpdmVyLmNvbT4KKworVXBkYXRlZCB0byBsYXRlc3QgQnVzeWJveCAxLjE3LjMKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitVcGRhdGVkIHRvIEJ1c3lib3ggMS4xOC40CitvcHRpb24gc3BlYyBpcyBjaGFuZ2VkCisKK1NpZ25lZC1vZmYtYnk6IFFpbmcgSGUgPHFpbmcuaGVAaW50ZWwuY29tPgorCitVcGRhdGVkIHRvIEJ1c3lib3ggMS4xOS4zCisKK1NpZ25lZC1vZmYtYnk6IEFuZGVycyBEYXJhbmRlciA8YW5kZXJzQGNoYXJnZXN0b3JtLnNlPgorCitGaXhlZCBvcHRpb25zIC1iLCAtYSBhbmQgLVAuCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlYXMgT2JlcnJpdHRlciA8b2JpQG9wZW5kcmVhbWJveC5vcmc+CistLS0KKyBuZXR3b3JraW5nL3VkaGNwL2RoY3BjLmMgfCAgIDI5ICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitJbmRleDogYnVzeWJveC0xLjIwLjIvbmV0d29ya2luZy91ZGhjcC9kaGNwYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYnVzeWJveC0xLjIwLjIub3JpZy9uZXR3b3JraW5nL3VkaGNwL2RoY3BjLmMKKysrKyBidXN5Ym94LTEuMjAuMi9uZXR3b3JraW5nL3VkaGNwL2RoY3BjLmMKK0BAIC0yOSw2ICsyOSw5IEBACisgI2luY2x1ZGUgPG5ldHBhY2tldC9wYWNrZXQuaD4KKyAjaW5jbHVkZSA8bGludXgvZmlsdGVyLmg+CisgCisrLyogb3B0aW9uIHdoZXRoZXIgdG8gZG93biB0aGUgaW50ZXJmYWNlIHdoZW4gcmVjb25maWd1cmluZyAqLworK3N0YXRpYyBpbnQgYWxsb3dfZGVjb25maWcgPSAxOworKworIC8qICJzdHJ1Y3QgY2xpZW50X2NvbmZpZ190IGNsaWVudF9jb25maWciIGlzIGluIGJiX2NvbW1vbl9idWZzaXoxICovCisgCisgCitAQCAtODEsOCArODQsOSBAQCBlbnVtIHsKKyAJT1BUX3ggPSAxIDw8IDE4LAorIAlPUFRfZiA9IDEgPDwgMTksCisgCU9QVF9CID0gMSA8PCAyMCwKKysJT1BUX0QgPSAxIDw8IDIxLAorIC8qIFRoZSByZXN0IGhhcyB2YXJpYWJsZSBiaXQgcG9zaXRpb25zLCBuZWVkIHRvIGJlIGNsZXZlciAqLworLQlPUFRCSVRfQiA9IDIwLAorKwlPUFRCSVRfRCA9IDIxLAorIAlVU0VfRk9SX01NVSggICAgICAgICAgICAgT1BUQklUX2IsKQorIAlJRl9GRUFUVVJFX1VESENQQ19BUlBJTkcoT1BUQklUX2EsKQorIAlJRl9GRUFUVVJFX1VESENQX1BPUlQoICAgT1BUQklUX1AsKQorQEAgLTEwNDAsNyArMTA0NCw4IEBAIHN0YXRpYyB2b2lkIHBlcmZvcm1fcmVuZXcodm9pZCkKKyAJCXN0YXRlID0gUkVORVdfUkVRVUVTVEVEOworIAkJYnJlYWs7CisgCWNhc2UgUkVORVdfUkVRVUVTVEVEOiAvKiBpbXBhdGllbnQgYXJlIHdlPyBmaW5lLCBzcXVhcmUgMSAqLworLQkJdWRoY3BfcnVuX3NjcmlwdChOVUxMLCAiZGVjb25maWciKTsKKysJCWlmIChhbGxvd19kZWNvbmZpZykKKysJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworIAljYXNlIFJFUVVFU1RJTkc6CisgCWNhc2UgUkVMRUFTRUQ6CisgCQljaGFuZ2VfbGlzdGVuX21vZGUoTElTVEVOX1JBVyk7CitAQCAtMTA2NCw3ICsxMDY5LDggQEAgc3RhdGljIHZvaWQgcGVyZm9ybV9yZWxlYXNlKHVpbnQzMl90IHNlcgorIAkJYmJfaW5mb19tc2coIlVuaWNhc3RpbmcgYSByZWxlYXNlIG9mICVzIHRvICVzIiwKKyAJCQkJaW5ldF9udG9hKHRlbXBfYWRkciksIGJ1ZmZlcik7CisgCQlzZW5kX3JlbGVhc2Uoc2VydmVyX2FkZHIsIHJlcXVlc3RlZF9pcCk7IC8qIHVuaWNhc3QgKi8KKy0JCXVkaGNwX3J1bl9zY3JpcHQoTlVMTCwgImRlY29uZmlnIik7CisrCQlpZiAoYWxsb3dfZGVjb25maWcpCisrCQkJdWRoY3BfcnVuX3NjcmlwdChOVUxMLCAiZGVjb25maWciKTsKKyAJfQorIAliYl9pbmZvX21zZygiRW50ZXJpbmcgcmVsZWFzZWQgc3RhdGUiKTsKKyAKK0BAIC0xMjE1LDcgKzEyMjEsNyBAQCBpbnQgdWRoY3BjX21haW4oaW50IGFyZ2MgVU5VU0VEX1BBUkFNLCBjCisgCS8qIE8seDogbGlzdDsgLVQsLXQsLUEgdGFrZSBudW1lcmljIHBhcmFtICovCisgCW9wdF9jb21wbGVtZW50YXJ5ID0gIk86Ong6OlQrOnQrOkErIiBJRl9VREhDUF9WRVJCT1NFKCI6dnYiKSA7CisgCUlGX0xPTkdfT1BUUyhhcHBsZXRfbG9uZ19vcHRpb25zID0gdWRoY3BjX2xvbmdvcHRzOykKKy0Jb3B0ID0gZ2V0b3B0MzIoYXJndiwgIkNWOkg6aDpGOmk6bnA6cVJyOnM6VDp0OlNBOk86b3g6ZkIiCisrCW9wdCA9IGdldG9wdDMyKGFyZ3YsICJDVjpIOmg6RjppOm5wOnFScjpzOlQ6dDpTQTpPOm94OmZCRCIKKyAJCVVTRV9GT1JfTU1VKCJiIikKKyAJCUlGX0ZFQVRVUkVfVURIQ1BDX0FSUElORygiYSIpCisgCQlJRl9GRUFUVVJFX1VESENQX1BPUlQoIlA6IikKK0BAIC0xMzE2LDYgKzEzMjIsOSBAQCBpbnQgdWRoY3BjX21haW4oaW50IGFyZ2MgVU5VU0VEX1BBUkFNLCBjCisgCQlsb2dtb2RlIHw9IExPR01PREVfU1lTTE9HOworIAl9CisgCisrCWlmIChvcHQgJiBPUFRfRCkKKysJCWFsbG93X2RlY29uZmlnID0gMDsKKysKKyAJLyogTWFrZSBzdXJlIGZkIDAsMSwyIGFyZSBvcGVuICovCisgCWJiX3Nhbml0aXplX3N0ZGlvKCk7CisgCS8qIEVxdWl2YWxlbnQgb2YgZG9pbmcgYSBmZmx1c2ggYWZ0ZXIgZXZlcnkgXG4gKi8KK0BAIC0xMzMwLDcgKzEzMzksOCBAQCBpbnQgdWRoY3BjX21haW4oaW50IGFyZ2MgVU5VU0VEX1BBUkFNLCBjCisgCXNyYW5kKG1vbm90b25pY191cygpKTsKKyAKKyAJc3RhdGUgPSBJTklUX1NFTEVDVElORzsKKy0JdWRoY3BfcnVuX3NjcmlwdChOVUxMLCAiZGVjb25maWciKTsKKysJaWYgKGFsbG93X2RlY29uZmlnKQorKwkJdWRoY3BfcnVuX3NjcmlwdChOVUxMLCAiZGVjb25maWciKTsKKyAJY2hhbmdlX2xpc3Rlbl9tb2RlKExJU1RFTl9SQVcpOworIAlwYWNrZXRfbnVtID0gMDsKKyAJdGltZW91dCA9IDA7CitAQCAtMTQ4NCw3ICsxNDk0LDggQEAgaW50IHVkaGNwY19tYWluKGludCBhcmdjIFVOVVNFRF9QQVJBTSwgYworIAkJCQl9CisgCQkJCS8qIFRpbWVkIG91dCwgZW50ZXIgaW5pdCBzdGF0ZSAqLworIAkJCQliYl9pbmZvX21zZygiTGVhc2UgbG9zdCwgZW50ZXJpbmcgaW5pdCBzdGF0ZSIpOworLQkJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworKwkJCQlpZiAoYWxsb3dfZGVjb25maWcpCisrCQkJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworIAkJCQlzdGF0ZSA9IElOSVRfU0VMRUNUSU5HOworIAkJCQljbGllbnRfY29uZmlnLmZpcnN0X3NlY3MgPSAwOyAvKiBtYWtlIHNlY3MgZmllbGQgY291bnQgZnJvbSAwICovCisgCQkJCS8qdGltZW91dCA9IDA7IC0gYWxyZWFkeSBpcyAqLworQEAgLTE2NjcsNyArMTY3OCw4IEBAIGludCB1ZGhjcGNfbWFpbihpbnQgYXJnYyBVTlVTRURfUEFSQU0sIGMKKyAJCQkJCQlzZW5kX2RlY2xpbmUoLyp4aWQsKi8gc2VydmVyX2FkZHIsIHBhY2tldC55aWFkZHIpOworIAorIAkJCQkJCWlmIChzdGF0ZSAhPSBSRVFVRVNUSU5HKQorLQkJCQkJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworKwkJCQkJCQlpZiAoYWxsb3dfZGVjb25maWcpCisrCQkJCQkJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworIAkJCQkJCWNoYW5nZV9saXN0ZW5fbW9kZShMSVNURU5fUkFXKTsKKyAJCQkJCQlzdGF0ZSA9IElOSVRfU0VMRUNUSU5HOworIAkJCQkJCWNsaWVudF9jb25maWcuZmlyc3Rfc2VjcyA9IDA7IC8qIG1ha2Ugc2VjcyBmaWVsZCBjb3VudCBmcm9tIDAgKi8KK0BAIC0xNzExLDcgKzE3MjMsOCBAQCBpbnQgdWRoY3BjX21haW4oaW50IGFyZ2MgVU5VU0VEX1BBUkFNLCBjCisgCQkJCWJiX2luZm9fbXNnKCJSZWNlaXZlZCBESENQIE5BSyIpOworIAkJCQl1ZGhjcF9ydW5fc2NyaXB0KCZwYWNrZXQsICJuYWsiKTsKKyAJCQkJaWYgKHN0YXRlICE9IFJFUVVFU1RJTkcpCistCQkJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworKwkJCQkJaWYgKGFsbG93X2RlY29uZmlnKQorKwkJCQkJCXVkaGNwX3J1bl9zY3JpcHQoTlVMTCwgImRlY29uZmlnIik7CisgCQkJCWNoYW5nZV9saXN0ZW5fbW9kZShMSVNURU5fUkFXKTsKKyAJCQkJc2xlZXAoMyk7IC8qIGF2b2lkIGV4Y2Vzc2l2ZSBuZXR3b3JrIHRyYWZmaWMgKi8KKyAJCQkJc3RhdGUgPSBJTklUX1NFTEVDVElORzsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2RlZmNvbmZpZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjVkZjllCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZGVmY29uZmlnCkBAIC0wLDAgKzEsMTA1NCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBCdXN5Ym94IHZlcnNpb246IDEuMjMuMgorIyBUaHUgSnVsIDMwIDExOjAwOjAwIDIwMTUKKyMKK0NPTkZJR19IQVZFX0RPVF9DT05GSUc9eQorCisjCisjIEJ1c3lib3ggU2V0dGluZ3MKKyMKKworIworIyBHZW5lcmFsIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0RFU0tUT1AgaXMgbm90IHNldAorIyBDT05GSUdfRVhUUkFfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOQ0xVREVfU1VTdjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNFX1BPUlRBQkxFX0NPREUgaXMgbm90IHNldAorQ09ORklHX1BMQVRGT1JNX0xJTlVYPXkKK0NPTkZJR19GRUFUVVJFX0JVRkZFUlNfVVNFX01BTExPQz15CisjIENPTkZJR19GRUFUVVJFX0JVRkZFUlNfR09fT05fU1RBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CVUZGRVJTX0dPX0lOX0JTUyBpcyBub3Qgc2V0CitDT05GSUdfU0hPV19VU0FHRT15CisjIENPTkZJR19GRUFUVVJFX1ZFUkJPU0VfVVNBR0UgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfQ09NUFJFU1NfVVNBR0U9eQorIyBDT05GSUdfRkVBVFVSRV9JTlNUQUxMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSU5TVEFMTF9OT19VU1IgaXMgbm90IHNldAorIyBDT05GSUdfTE9DQUxFX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVU5JQ09ERV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSUNPREVfVVNJTkdfTE9DQUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hFQ0tfVU5JQ09ERV9JTl9FTlYgaXMgbm90IHNldAorQ09ORklHX1NVQlNUX1dDSEFSPTAKK0NPTkZJR19MQVNUX1NVUFBPUlRFRF9XQ0hBUj0wCisjIENPTkZJR19VTklDT0RFX0NPTUJJTklOR19XQ0hBUlMgaXMgbm90IHNldAorIyBDT05GSUdfVU5JQ09ERV9XSURFX1dDSEFSUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTklDT0RFX0JJRElfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VTklDT0RFX05FVVRSQUxfVEFCTEUgaXMgbm90IHNldAorIyBDT05GSUdfVU5JQ09ERV9QUkVTRVJWRV9CUk9LRU4gaXMgbm90IHNldAorIyBDT05GSUdfUEFNIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1VTRV9TRU5ERklMRT15CitDT05GSUdfTE9OR19PUFRTPXkKK0NPTkZJR19GRUFUVVJFX0RFVlBUUz15CisjIENPTkZJR19GRUFUVVJFX0NMRUFOX1VQIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1VUTVA9eQorIyBDT05GSUdfRkVBVFVSRV9XVE1QIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1BJREZJTEU9eQorQ09ORklHX1BJRF9GSUxFX1BBVEg9Ii92YXIvcnVuIgorQ09ORklHX0ZFQVRVUkVfU1VJRD15CitDT05GSUdfRkVBVFVSRV9TVUlEX0NPTkZJRz15CitDT05GSUdfRkVBVFVSRV9TVUlEX0NPTkZJR19RVUlFVD15CisjIENPTkZJR19TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUFJFRkVSX0FQUExFVFMgaXMgbm90IHNldAorQ09ORklHX0JVU1lCT1hfRVhFQ19QQVRIPSIvcHJvYy9zZWxmL2V4ZSIKK0NPTkZJR19GRUFUVVJFX1NZU0xPRz15CitDT05GSUdfRkVBVFVSRV9IQVZFX1JQQz15CisKKyMKKyMgQnVpbGQgT3B0aW9ucworIworIyBDT05GSUdfU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRSBpcyBub3Qgc2V0CisjIENPTkZJR19OT01NVSBpcyBub3Qgc2V0CisjIENPTkZJR19CVUlMRF9MSUJCVVNZQk9YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5ESVZJRFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NIQVJFRF9CVVNZQk9YIGlzIG5vdCBzZXQKK0NPTkZJR19MRlM9eQorIyBDT05GSUdfQ1JPU1NfQ09NUElMRVJfUFJFRklYIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNST09UPSIiCisjIENPTkZJR19FWFRSQV9DRkxBR1MgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX0xERkxBR1M9IiIKK0NPTkZJR19FWFRSQV9MRExJQlM9IiIKKworIworIyBEZWJ1Z2dpbmcgT3B0aW9ucworIworIyBDT05GSUdfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEVTU0lNSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVRfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19XRVJST1IgaXMgbm90IHNldAorQ09ORklHX05PX0RFQlVHX0xJQj15CisjIENPTkZJR19ETUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGRU5DRSBpcyBub3Qgc2V0CisKKyMKKyMgSW5zdGFsbGF0aW9uIE9wdGlvbnMgKCJtYWtlIGluc3RhbGwiIGJlaGF2aW9yKQorIworQ09ORklHX0lOU1RBTExfQVBQTEVUX1NZTUxJTktTPXkKKyMgQ09ORklHX0lOU1RBTExfQVBQTEVUX0hBUkRMSU5LUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlNUQUxMX0FQUExFVF9TQ1JJUFRfV1JBUFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSU5TVEFMTF9BUFBMRVRfRE9OVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlNUQUxMX1NIX0FQUExFVF9TWU1MSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTExfU0hfQVBQTEVUX0hBUkRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTExfU0hfQVBQTEVUX1NDUklQVF9XUkFQUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVGSVg9Ii4vX2luc3RhbGwiCisKKyMKKyMgQnVzeWJveCBMaWJyYXJ5IFR1bmluZworIworQ09ORklHX0ZFQVRVUkVfU1lTVEVNRD15CitDT05GSUdfRkVBVFVSRV9SVE1JTk1BWD15CitDT05GSUdfUEFTU1dPUkRfTUlOTEVOPTYKK0NPTkZJR19NRDVfU01BTEw9MQorQ09ORklHX1NIQTNfU01BTEw9MQorQ09ORklHX0ZFQVRVUkVfRkFTVF9UT1A9eQorIyBDT05GSUdfRkVBVFVSRV9FVENfTkVUV09SS1MgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVVNFX1RFUk1JT1M9eQorQ09ORklHX0ZFQVRVUkVfRURJVElORz15CitDT05GSUdfRkVBVFVSRV9FRElUSU5HX01BWF9MRU49MTAyNAorIyBDT05GSUdfRkVBVFVSRV9FRElUSU5HX1ZJIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0VESVRJTkdfSElTVE9SWT0xNQorQ09ORklHX0ZFQVRVUkVfRURJVElOR19TQVZFSElTVE9SWT15CisjIENPTkZJR19GRUFUVVJFX0VESVRJTkdfU0FWRV9PTl9FWElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUkVWRVJTRV9TRUFSQ0ggaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVEFCX0NPTVBMRVRJT049eQorQ09ORklHX0ZFQVRVUkVfVVNFUk5BTUVfQ09NUExFVElPTj15CitDT05GSUdfRkVBVFVSRV9FRElUSU5HX0ZBTkNZX1BST01QVD15CisjIENPTkZJR19GRUFUVVJFX0VESVRJTkdfQVNLX1RFUk1JTkFMIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX05PTl9QT1NJWF9DUD15CisjIENPTkZJR19GRUFUVVJFX1ZFUkJPU0VfQ1BfTUVTU0FHRSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9DT1BZQlVGX0tCPTQKK0NPTkZJR19GRUFUVVJFX1NLSVBfUk9PVEZTPXkKK0NPTkZJR19NT05PVE9OSUNfU1lTQ0FMTD15CitDT05GSUdfSU9DVExfSEVYMlNUUl9FUlJPUj15CitDT05GSUdfRkVBVFVSRV9IV0lCPXkKKworIworIyBBcHBsZXRzCisjCisKKyMKKyMgQXJjaGl2YWwgVXRpbGl0aWVzCisjCitDT05GSUdfRkVBVFVSRV9TRUFNTEVTU19YWj15CitDT05GSUdfRkVBVFVSRV9TRUFNTEVTU19MWk1BPXkKK0NPTkZJR19GRUFUVVJFX1NFQU1MRVNTX0JaMj15CitDT05GSUdfRkVBVFVSRV9TRUFNTEVTU19HWj15CitDT05GSUdfRkVBVFVSRV9TRUFNTEVTU19aPXkKK0NPTkZJR19BUj15CisjIENPTkZJR19GRUFUVVJFX0FSX0xPTkdfRklMRU5BTUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQVJfQ1JFQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOQ09NUFJFU1MgaXMgbm90IHNldAorQ09ORklHX0dVTlpJUD15CitDT05GSUdfQlVOWklQMj15CisjIENPTkZJR19VTkxaTUEgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MWk1BX0ZBU1QgaXMgbm90IHNldAorIyBDT05GSUdfTFpNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlhaIGlzIG5vdCBzZXQKKyMgQ09ORklHX1haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JaSVAyIGlzIG5vdCBzZXQKK0NPTkZJR19DUElPPXkKKyMgQ09ORklHX0ZFQVRVUkVfQ1BJT19PIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ1BJT19QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RQS0cgaXMgbm90IHNldAorIyBDT05GSUdfRFBLR19ERUIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9EUEtHX0RFQl9FWFRSQUNUX09OTFkgaXMgbm90IHNldAorQ09ORklHX0daSVA9eQorIyBDT05GSUdfRkVBVFVSRV9HWklQX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfR1pJUF9GQVNUPTAKKyMgQ09ORklHX0xaT1AgaXMgbm90IHNldAorIyBDT05GSUdfTFpPUF9DT01QUl9ISUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQTSBpcyBub3Qgc2V0CisjIENPTkZJR19SUE0yQ1BJTyBpcyBub3Qgc2V0CitDT05GSUdfVEFSPXkKK0NPTkZJR19GRUFUVVJFX1RBUl9DUkVBVEU9eQorQ09ORklHX0ZFQVRVUkVfVEFSX0FVVE9ERVRFQ1Q9eQorQ09ORklHX0ZFQVRVUkVfVEFSX0ZST009eQorQ09ORklHX0ZFQVRVUkVfVEFSX09MREdOVV9DT01QQVRJQklMSVRZPXkKKyMgQ09ORklHX0ZFQVRVUkVfVEFSX09MRFNVTl9DT01QQVRJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1RBUl9HTlVfRVhURU5TSU9OUz15CisjIENPTkZJR19GRUFUVVJFX1RBUl9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UQVJfVE9fQ09NTUFORCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RBUl9VTkFNRV9HTkFNRSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9UQVJfTk9QUkVTRVJWRV9USU1FPXkKKyMgQ09ORklHX0ZFQVRVUkVfVEFSX1NFTElOVVggaXMgbm90IHNldAorQ09ORklHX1VOWklQPXkKKworIworIyBDb3JldXRpbHMKKyMKK0NPTkZJR19CQVNFTkFNRT15CitDT05GSUdfQ0FUPXkKK0NPTkZJR19EQVRFPXkKKyMgQ09ORklHX0ZFQVRVUkVfREFURV9JU09GTVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9EQVRFX05BTk8gaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfREFURV9DT01QQVQ9eQorIyBDT05GSUdfSE9TVElEIGlzIG5vdCBzZXQKK0NPTkZJR19JRD15CitDT05GSUdfR1JPVVBTPXkKK0NPTkZJR19TSFVGPXkKK0NPTkZJR19URVNUPXkKK0NPTkZJR19GRUFUVVJFX1RFU1RfNjQ9eQorQ09ORklHX1RPVUNIPXkKK0NPTkZJR19GRUFUVVJFX1RPVUNIX05PREVSRUY9eQorQ09ORklHX0ZFQVRVUkVfVE9VQ0hfU1VTVjM9eQorQ09ORklHX1RSPXkKK0NPTkZJR19GRUFUVVJFX1RSX0NMQVNTRVM9eQorIyBDT05GSUdfRkVBVFVSRV9UUl9FUVVJViBpcyBub3Qgc2V0CitDT05GSUdfVU5MSU5LPXkKKyMgQ09ORklHX0JBU0U2NCBpcyBub3Qgc2V0CitDT05GSUdfV0hPPXkKK0NPTkZJR19VU0VSUz15CisjIENPTkZJR19DQUwgaXMgbm90IHNldAorIyBDT05GSUdfQ0FUViBpcyBub3Qgc2V0CitDT05GSUdfQ0hHUlA9eQorQ09ORklHX0NITU9EPXkKK0NPTkZJR19DSE9XTj15CisjIENPTkZJR19GRUFUVVJFX0NIT1dOX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfQ0hST09UPXkKKyMgQ09ORklHX0NLU1VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTU0gaXMgbm90IHNldAorQ09ORklHX0NQPXkKKyMgQ09ORklHX0ZFQVRVUkVfQ1BfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19DVVQ9eQorQ09ORklHX0REPXkKK0NPTkZJR19GRUFUVVJFX0REX1NJR05BTF9IQU5ETElORz15CisjIENPTkZJR19GRUFUVVJFX0REX1RISVJEX1NUQVRVU19MSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRERfSUJTX09CUyBpcyBub3Qgc2V0CitDT05GSUdfREY9eQorIyBDT05GSUdfRkVBVFVSRV9ERl9GQU5DWSBpcyBub3Qgc2V0CitDT05GSUdfRElSTkFNRT15CisjIENPTkZJR19ET1MyVU5JWCBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYMkRPUyBpcyBub3Qgc2V0CitDT05GSUdfRFU9eQorQ09ORklHX0ZFQVRVUkVfRFVfREVGQVVMVF9CTE9DS1NJWkVfMUs9eQorQ09ORklHX0VDSE89eQorQ09ORklHX0ZFQVRVUkVfRkFOQ1lfRUNITz15CitDT05GSUdfRU5WPXkKK0NPTkZJR19GRUFUVVJFX0VOVl9MT05HX09QVElPTlM9eQorIyBDT05GSUdfRVhQQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRVhQQU5EX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfRVhQUj15CitDT05GSUdfRVhQUl9NQVRIX1NVUFBPUlRfNjQ9eQorQ09ORklHX0ZBTFNFPXkKKyMgQ09ORklHX0ZPTEQgaXMgbm90IHNldAorIyBDT05GSUdfRlNZTkMgaXMgbm90IHNldAorQ09ORklHX0hFQUQ9eQorIyBDT05GSUdfRkVBVFVSRV9GQU5DWV9IRUFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTlNUQUxMX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTE49eQorQ09ORklHX0xPR05BTUU9eQorQ09ORklHX0xTPXkKK0NPTkZJR19GRUFUVVJFX0xTX0ZJTEVUWVBFUz15CitDT05GSUdfRkVBVFVSRV9MU19GT0xMT1dMSU5LUz15CitDT05GSUdfRkVBVFVSRV9MU19SRUNVUlNJVkU9eQorQ09ORklHX0ZFQVRVUkVfTFNfU09SVEZJTEVTPXkKK0NPTkZJR19GRUFUVVJFX0xTX1RJTUVTVEFNUFM9eQorQ09ORklHX0ZFQVRVUkVfTFNfVVNFUk5BTUU9eQorQ09ORklHX0ZFQVRVUkVfTFNfQ09MT1I9eQorIyBDT05GSUdfRkVBVFVSRV9MU19DT0xPUl9JU19ERUZBVUxUIGlzIG5vdCBzZXQKK0NPTkZJR19NRDVTVU09eQorQ09ORklHX01LRElSPXkKK0NPTkZJR19GRUFUVVJFX01LRElSX0xPTkdfT1BUSU9OUz15CitDT05GSUdfTUtGSUZPPXkKK0NPTkZJR19NS05PRD15CitDT05GSUdfTVY9eQorIyBDT05GSUdfRkVBVFVSRV9NVl9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTklDRSBpcyBub3Qgc2V0CitDT05GSUdfTk9IVVA9eQorQ09ORklHX09EPXkKKyMgQ09ORklHX1BSSU5URU5WIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEY9eQorQ09ORklHX1BXRD15CitDT05GSUdfUkVBRExJTks9eQorQ09ORklHX0ZFQVRVUkVfUkVBRExJTktfRk9MTE9XPXkKK0NPTkZJR19SRUFMUEFUSD15CitDT05GSUdfUk09eQorQ09ORklHX1JNRElSPXkKKyMgQ09ORklHX0ZFQVRVUkVfUk1ESVJfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19TRVE9eQorIyBDT05GSUdfU0hBMVNVTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSEEyNTZTVU0gaXMgbm90IHNldAorIyBDT05GSUdfU0hBNTEyU1VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQTNTVU0gaXMgbm90IHNldAorQ09ORklHX1NMRUVQPXkKK0NPTkZJR19GRUFUVVJFX0ZBTkNZX1NMRUVQPXkKKyMgQ09ORklHX0ZFQVRVUkVfRkxPQVRfU0xFRVAgaXMgbm90IHNldAorQ09ORklHX1NPUlQ9eQorQ09ORklHX0ZFQVRVUkVfU09SVF9CSUc9eQorIyBDT05GSUdfU1BMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TUExJVF9GQU5DWSBpcyBub3Qgc2V0CitDT05GSUdfU1RBVD15CitDT05GSUdfRkVBVFVSRV9TVEFUX0ZPUk1BVD15CitDT05GSUdfU1RUWT15CisjIENPTkZJR19TVU0gaXMgbm90IHNldAorQ09ORklHX1NZTkM9eQorIyBDT05GSUdfVEFDIGlzIG5vdCBzZXQKK0NPTkZJR19UQUlMPXkKK0NPTkZJR19GRUFUVVJFX0ZBTkNZX1RBSUw9eQorQ09ORklHX1RFRT15CisjIENPTkZJR19GRUFUVVJFX1RFRV9VU0VfQkxPQ0tfSU8gaXMgbm90IHNldAorQ09ORklHX1RSVUU9eQorQ09ORklHX1RUWT15CitDT05GSUdfVU5BTUU9eQorIyBDT05GSUdfVU5FWFBBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9VTkVYUEFORF9MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX1VOSVE9eQorQ09ORklHX1VTTEVFUD15CisjIENPTkZJR19VVURFQ09ERSBpcyBub3Qgc2V0CisjIENPTkZJR19VVUVOQ09ERSBpcyBub3Qgc2V0CitDT05GSUdfV0M9eQorIyBDT05GSUdfRkVBVFVSRV9XQ19MQVJHRSBpcyBub3Qgc2V0CitDT05GSUdfV0hPQU1JPXkKK0NPTkZJR19ZRVM9eQorCisjCisjIENvbW1vbiBvcHRpb25zCisjCitDT05GSUdfRkVBVFVSRV9WRVJCT1NFPXkKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgY3AgYW5kIG12CisjCisjIENPTkZJR19GRUFUVVJFX1BSRVNFUlZFX0hBUkRMSU5LUyBpcyBub3Qgc2V0CisKKyMKKyMgQ29tbW9uIG9wdGlvbnMgZm9yIGxzLCBtb3JlIGFuZCB0ZWxuZXQKKyMKK0NPTkZJR19GRUFUVVJFX0FVVE9XSURUSD15CisKKyMKKyMgQ29tbW9uIG9wdGlvbnMgZm9yIGRmLCBkdSwgbHMKKyMKK0NPTkZJR19GRUFUVVJFX0hVTUFOX1JFQURBQkxFPXkKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgbWQ1c3VtLCBzaGExc3VtLCBzaGEyNTZzdW0sIHNoYTUxMnN1bSwgc2hhM3N1bQorIworQ09ORklHX0ZFQVRVUkVfTUQ1X1NIQTFfU1VNX0NIRUNLPXkKKworIworIyBDb25zb2xlIFV0aWxpdGllcworIworQ09ORklHX0NIVlQ9eQorIyBDT05GSUdfRkdDT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19DTEVBUj15CitDT05GSUdfREVBTExPQ1ZUPXkKK0NPTkZJR19EVU1QS01BUD15CisjIENPTkZJR19LQkRfTU9ERSBpcyBub3Qgc2V0CitDT05GSUdfTE9BREZPTlQ9eQorQ09ORklHX0xPQURLTUFQPXkKK0NPTkZJR19PUEVOVlQ9eQorQ09ORklHX1JFU0VUPXkKKyMgQ09ORklHX1JFU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1JFU0laRV9QUklOVCBpcyBub3Qgc2V0CitDT05GSUdfU0VUQ09OU09MRT15CisjIENPTkZJR19GRUFUVVJFX1NFVENPTlNPTEVfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFVEZPTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TRVRGT05UX1RFWFRVQUxfTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFVEZPTlRfRElSPSIiCisjIENPTkZJR19TRVRLRVlDT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRMT0dDT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIT1dLRVkgaXMgbm90IHNldAorCisjCisjIENvbW1vbiBvcHRpb25zIGZvciBsb2FkZm9udCBhbmQgc2V0Zm9udAorIworIyBDT05GSUdfRkVBVFVSRV9MT0FERk9OVF9QU0YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTE9BREZPTlRfUkFXIGlzIG5vdCBzZXQKKworIworIyBEZWJpYW4gVXRpbGl0aWVzCisjCitDT05GSUdfTUtURU1QPXkKKyMgQ09ORklHX1BJUEVfUFJPR1JFU1MgaXMgbm90IHNldAorQ09ORklHX1JVTl9QQVJUUz15CitDT05GSUdfRkVBVFVSRV9SVU5fUEFSVFNfTE9OR19PUFRJT05TPXkKKyMgQ09ORklHX0ZFQVRVUkVfUlVOX1BBUlRTX0ZBTkNZIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFSVF9TVE9QX0RBRU1PTj15CitDT05GSUdfRkVBVFVSRV9TVEFSVF9TVE9QX0RBRU1PTl9GQU5DWT15CitDT05GSUdfRkVBVFVSRV9TVEFSVF9TVE9QX0RBRU1PTl9MT05HX09QVElPTlM9eQorQ09ORklHX1dISUNIPXkKKworIworIyBFZGl0b3JzCisjCitDT05GSUdfQVdLPXkKK0NPTkZJR19GRUFUVVJFX0FXS19MSUJNPXkKK0NPTkZJR19GRUFUVVJFX0FXS19HTlVfRVhURU5TSU9OUz15CitDT05GSUdfQ01QPXkKK0NPTkZJR19ESUZGPXkKKyMgQ09ORklHX0ZFQVRVUkVfRElGRl9MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfRElGRl9ESVI9eQorIyBDT05GSUdfRUQgaXMgbm90IHNldAorQ09ORklHX1BBVENIPXkKK0NPTkZJR19TRUQ9eQorQ09ORklHX1ZJPXkKK0NPTkZJR19GRUFUVVJFX1ZJX01BWF9MRU49MTAyNAorQ09ORklHX0ZFQVRVUkVfVklfOEJJVD15CitDT05GSUdfRkVBVFVSRV9WSV9DT0xPTj15CitDT05GSUdfRkVBVFVSRV9WSV9ZQU5LTUFSSz15CitDT05GSUdfRkVBVFVSRV9WSV9TRUFSQ0g9eQorIyBDT05GSUdfRkVBVFVSRV9WSV9SRUdFWF9TRUFSQ0ggaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVklfVVNFX1NJR05BTFM9eQorIyBDT05GSUdfRkVBVFVSRV9WSV9ET1RfQ01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVklfUkVBRE9OTFkgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WSV9TRVRPUFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVklfU0VUIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1ZJX1dJTl9SRVNJWkU9eQorIyBDT05GSUdfRkVBVFVSRV9WSV9BU0tfVEVSTUlOQUwgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVklfVU5ETz15CitDT05GSUdfRkVBVFVSRV9WSV9VTkRPX1FVRVVFPXkKK0NPTkZJR19GRUFUVVJFX1ZJX1VORE9fUVVFVUVfTUFYPTI1NgorQ09ORklHX0ZFQVRVUkVfQUxMT1dfRVhFQz15CisKKyMKKyMgRmluZGluZyBVdGlsaXRpZXMKKyMKK0NPTkZJR19GSU5EPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfUFJJTlQwPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfTVRJTUU9eQorQ09ORklHX0ZFQVRVUkVfRklORF9NTUlOPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfUEVSTT15CitDT05GSUdfRkVBVFVSRV9GSU5EX1RZUEU9eQorQ09ORklHX0ZFQVRVUkVfRklORF9YREVWPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfTUFYREVQVEg9eQorQ09ORklHX0ZFQVRVUkVfRklORF9ORVdFUj15CisjIENPTkZJR19GRUFUVVJFX0ZJTkRfSU5VTSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9GSU5EX0VYRUM9eQorQ09ORklHX0ZFQVRVUkVfRklORF9FWEVDX1BMVVM9eQorQ09ORklHX0ZFQVRVUkVfRklORF9VU0VSPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfR1JPVVA9eQorQ09ORklHX0ZFQVRVUkVfRklORF9OT1Q9eQorQ09ORklHX0ZFQVRVUkVfRklORF9ERVBUSD15CitDT05GSUdfRkVBVFVSRV9GSU5EX1BBUkVOPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfU0laRT15CitDT05GSUdfRkVBVFVSRV9GSU5EX1BSVU5FPXkKKyMgQ09ORklHX0ZFQVRVUkVfRklORF9ERUxFVEUgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfRklORF9QQVRIPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfUkVHRVg9eQorIyBDT05GSUdfRkVBVFVSRV9GSU5EX0NPTlRFWFQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9GSU5EX0xJTktTIGlzIG5vdCBzZXQKK0NPTkZJR19HUkVQPXkKK0NPTkZJR19GRUFUVVJFX0dSRVBfRUdSRVBfQUxJQVM9eQorQ09ORklHX0ZFQVRVUkVfR1JFUF9GR1JFUF9BTElBUz15CitDT05GSUdfRkVBVFVSRV9HUkVQX0NPTlRFWFQ9eQorQ09ORklHX1hBUkdTPXkKKyMgQ09ORklHX0ZFQVRVUkVfWEFSR1NfU1VQUE9SVF9DT05GSVJNQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9YQVJHU19TVVBQT1JUX1FVT1RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1hBUkdTX1NVUFBPUlRfVEVSTU9QVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1hBUkdTX1NVUFBPUlRfWkVST19URVJNIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1hBUkdTX1NVUFBPUlRfUkVQTF9TVFI9eQorCisjCisjIEluaXQgVXRpbGl0aWVzCisjCisjIENPTkZJR19CT09UQ0hBUlREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQk9PVENIQVJURF9CTE9BVEVEX0hFQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JPT1RDSEFSVERfQ09ORklHX0ZJTEUgaXMgbm90IHNldAorQ09ORklHX0hBTFQ9eQorIyBDT05GSUdfRkVBVFVSRV9DQUxMX1RFTElOSVQgaXMgbm90IHNldAorQ09ORklHX1RFTElOSVRfUEFUSD0iIgorIyBDT05GSUdfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1VTRV9JTklUVEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfS0lMTF9SRU1PVkVEIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0tJTExfREVMQVk9MAorIyBDT05GSUdfRkVBVFVSRV9JTklUX1NDVFRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5JVF9TWVNMT0cgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9FWFRSQV9RVUlFVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOSVRfQ09SRURVTVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUX1RFUk1JTkFMX1RZUEU9IiIKK0NPTkZJR19NRVNHPXkKKyMgQ09ORklHX0ZFQVRVUkVfTUVTR19FTkFCTEVfT05MWV9HUk9VUCBpcyBub3Qgc2V0CisKKyMKKyMgTG9naW4vUGFzc3dvcmQgTWFuYWdlbWVudCBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0FERF9TSEVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRU1PVkVfU0hFTEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TSEFET1dQQVNTV0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRV9CQl9QV0RfR1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRV9CQl9TSEFET1cgaXMgbm90IHNldAorQ09ORklHX1VTRV9CQl9DUllQVD15CisjIENPTkZJR19VU0VfQkJfQ1JZUFRfU0hBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FERFVTRVIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9BRERVU0VSX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIRUNLX05BTUVTIGlzIG5vdCBzZXQKK0NPTkZJR19MQVNUX0lEPTYwMDAwCitDT05GSUdfRklSU1RfU1lTVEVNX0lEPTEwMAorQ09ORklHX0xBU1RfU1lTVEVNX0lEPTk5OQorIyBDT05GSUdfQURER1JPVVAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9BRERHUk9VUF9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9BRERVU0VSX1RPX0dST1VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFTFVTRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVMR1JPVVAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9ERUxfVVNFUl9GUk9NX0dST1VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFVFRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lOX1NFU1NJT05fQVNfQ0hJTEQgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSU5fU0NSSVBUUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX05PTE9HSU4gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TRUNVUkVUVFkgaXMgbm90IHNldAorIyBDT05GSUdfUEFTU1dEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUEFTU1dEX1dFQUtfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRQVyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFBBU1NXRCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9ERUZBVUxUX1BBU1NXRF9BTEdPPSIiCisjIENPTkZJR19TVSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NVX1NZU0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NVX0NIRUNLU19TSEVMTFMgaXMgbm90IHNldAorIyBDT05GSUdfU1VMT0dJTiBpcyBub3Qgc2V0CisjIENPTkZJR19WTE9DSyBpcyBub3Qgc2V0CisKKyMKKyMgTGludXggRXh0MiBGUyBQcm9ncworIworQ09ORklHX0NIQVRUUj15CitDT05GSUdfRlNDSz15CisjIENPTkZJR19MU0FUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVFVORTJGUyBpcyBub3Qgc2V0CisKKyMKKyMgTGludXggTW9kdWxlIFV0aWxpdGllcworIworIyBDT05GSUdfTU9ESU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RQUk9CRV9TTUFMTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01PRFBST0JFX1NNQUxMX09QVElPTlNfT05fQ01ETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01PRFBST0JFX1NNQUxMX0NIRUNLX0FMUkVBRFlfTE9BREVEIGlzIG5vdCBzZXQKK0NPTkZJR19JTlNNT0Q9eQorQ09ORklHX1JNTU9EPXkKK0NPTkZJR19MU01PRD15CisjIENPTkZJR19GRUFUVVJFX0xTTU9EX1BSRVRUWV8yXzZfT1VUUFVUIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RQUk9CRT15CisjIENPTkZJR19GRUFUVVJFX01PRFBST0JFX0JMQUNLTElTVCBpcyBub3Qgc2V0CitDT05GSUdfREVQTU9EPXkKKworIworIyBPcHRpb25zIGNvbW1vbiB0byBtdWx0aXBsZSBtb2R1dGlscworIworIyBDT05GSUdfRkVBVFVSRV8yXzRfTU9EVUxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9UUllfTU1BUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9WRVJTSU9OX0NIRUNLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5TTU9EX0tTWU1PT1BTX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTlNNT0RfTE9BRElOS01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9MT0FEX01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9MT0FEX01BUF9GVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0NIRUNLX1RBSU5URURfTU9EVUxFPXkKK0NPTkZJR19GRUFUVVJFX01PRFVUSUxTX0FMSUFTPXkKK0NPTkZJR19GRUFUVVJFX01PRFVUSUxTX1NZTUJPTFM9eQorQ09ORklHX0RFRkFVTFRfTU9EVUxFU19ESVI9Ii9saWIvbW9kdWxlcyIKK0NPTkZJR19ERUZBVUxUX0RFUE1PRF9GSUxFPSJtb2R1bGVzLmRlcCIKKworIworIyBMaW51eCBTeXN0ZW0gVXRpbGl0aWVzCisjCisjIENPTkZJR19CTE9DS0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19GQVRBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19GU1RSSU09eQorIyBDT05GSUdfTURFViBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01ERVZfQ09ORiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01ERVZfUkVOQU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTURFVl9SRU5BTUVfUkVHRVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTURFVl9FWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTURFVl9MT0FEX0ZJUk1XQVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFViBpcyBub3Qgc2V0CisjIENPTkZJR19BQ1BJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0FDUElEX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JMS0lEX1RZUEUgaXMgbm90IHNldAorQ09ORklHX0RNRVNHPXkKK0NPTkZJR19GRUFUVVJFX0RNRVNHX1BSRVRUWT15CitDT05GSUdfRkJTRVQ9eQorQ09ORklHX0ZFQVRVUkVfRkJTRVRfRkFOQ1k9eQorQ09ORklHX0ZFQVRVUkVfRkJTRVRfUkVBRE1PREU9eQorIyBDT05GSUdfRkRGTFVTSCBpcyBub3Qgc2V0CisjIENPTkZJR19GREZPUk1BVCBpcyBub3Qgc2V0CitDT05GSUdfRkRJU0s9eQorIyBDT05GSUdfRkRJU0tfU1VQUE9SVF9MQVJHRV9ESVNLUyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9GRElTS19XUklUQUJMRT15CisjIENPTkZJR19GRUFUVVJFX0FJWF9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NHSV9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NVTl9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX09TRl9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0dQVF9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0ZESVNLX0FEVkFOQ0VEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJTkRGUyBpcyBub3Qgc2V0CitDT05GSUdfRkxPQ0s9eQorIyBDT05GSUdfRlJFRVJBTURJU0sgaXMgbm90IHNldAorIyBDT05GSUdfRlNDS19NSU5JWCBpcyBub3Qgc2V0CisjIENPTkZJR19NS0ZTX0VYVDIgaXMgbm90IHNldAorIyBDT05GSUdfTUtGU19NSU5JWCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01JTklYMiBpcyBub3Qgc2V0CisjIENPTkZJR19NS0ZTX1JFSVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19NS0ZTX1ZGQVQgaXMgbm90IHNldAorIyBDT05GSUdfR0VUT1BUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfR0VUT1BUX0xPTkcgaXMgbm90IHNldAorQ09ORklHX0hFWERVTVA9eQorIyBDT05GSUdfRkVBVFVSRV9IRVhEVU1QX1JFVkVSU0UgaXMgbm90IHNldAorIyBDT05GSUdfSEQgaXMgbm90IHNldAorQ09ORklHX0hXQ0xPQ0s9eQorQ09ORklHX0ZFQVRVUkVfSFdDTE9DS19MT05HX09QVElPTlM9eQorQ09ORklHX0ZFQVRVUkVfSFdDTE9DS19BREpUSU1FX0ZIUz15CisjIENPTkZJR19JUENSTSBpcyBub3Qgc2V0CisjIENPTkZJR19JUENTIGlzIG5vdCBzZXQKK0NPTkZJR19MT1NFVFVQPXkKKyMgQ09ORklHX0xTUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19NS1NXQVA9eQorIyBDT05GSUdfRkVBVFVSRV9NS1NXQVBfVVVJRCBpcyBub3Qgc2V0CitDT05GSUdfTU9SRT15CitDT05GSUdfTU9VTlQ9eQorIyBDT05GSUdfRkVBVFVSRV9NT1VOVF9GQUtFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTU9VTlRfVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01PVU5UX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NT1VOVF9MQUJFTCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9NT1VOVF9ORlM9eQorIyBDT05GSUdfRkVBVFVSRV9NT1VOVF9DSUZTIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX01PVU5UX0ZMQUdTPXkKK0NPTkZJR19GRUFUVVJFX01PVU5UX0ZTVEFCPXkKK0NPTkZJR19QSVZPVF9ST09UPXkKK0NPTkZJR19SREFURT15CisjIENPTkZJR19SREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQURQUk9GSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ1dBS0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NSSVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDUklQVFJFUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRBUkNIIGlzIG5vdCBzZXQKK0NPTkZJR19TV0FQT05PRkY9eQorQ09ORklHX0ZFQVRVUkVfU1dBUE9OX0RJU0NBUkQ9eQorQ09ORklHX0ZFQVRVUkVfU1dBUE9OX1BSST15CitDT05GSUdfU1dJVENIX1JPT1Q9eQorQ09ORklHX1VNT1VOVD15CitDT05GSUdfRkVBVFVSRV9VTU9VTlRfQUxMPXkKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgbW91bnQvdW1vdW50CisjCitDT05GSUdfRkVBVFVSRV9NT1VOVF9MT09QPXkKK0NPTkZJR19GRUFUVVJFX01PVU5UX0xPT1BfQ1JFQVRFPXkKKyMgQ09ORklHX0ZFQVRVUkVfTVRBQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZPTFVNRUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfQlRSRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9FWEZBVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0YyRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9GQVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9IRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9JU085NjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfSkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfTElOVVhSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfTElOVVhTV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfTFVLUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX05JTEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfTlRGUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX09DRlMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfUkVJU0VSRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9ST01GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfU1lTViBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX1VERiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX1hGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0NPTlNQWSBpcyBub3Qgc2V0CisjIENPTkZJR19DUk9ORCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NST05EX0QgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DUk9ORF9DQUxMX1NFTkRNQUlMIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0NST05EX0RJUj0iIgorQ09ORklHX0xFU1M9eQorQ09ORklHX0ZFQVRVUkVfTEVTU19NQVhMSU5FUz05OTk5OTk5CitDT05GSUdfRkVBVFVSRV9MRVNTX0JSQUNLRVRTPXkKK0NPTkZJR19GRUFUVVJFX0xFU1NfRkxBR1M9eQorIyBDT05GSUdfRkVBVFVSRV9MRVNTX01BUktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTEVTU19SRUdFWFAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MRVNTX1dJTkNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTEVTU19BU0tfVEVSTUlOQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MRVNTX0RBU0hDTUQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MRVNTX0xJTkVOVU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTkRXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU5ERFVNUCBpcyBub3Qgc2V0CitDT05GSUdfUkZLSUxMPXkKKyMgQ09ORklHX1NFVFNFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEFTS1NFVF9GQU5DWSBpcyBub3Qgc2V0CisjIENPTkZJR19VQklBVFRBQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVUJJREVUQUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSU1LVk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSVJNVk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSVJTVk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSVVQREFURVZPTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FESlRJTUVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JCQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ09NUFJFU1NfQkJDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfQkVFUCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9CRUVQX0ZSRVE9MAorQ09ORklHX0ZFQVRVUkVfQkVFUF9MRU5HVEhfTVM9MAorIyBDT05GSUdfQ0hBVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfTk9GQUlMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hBVF9UVFlfSElGSSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfSU1QTElDSVRfQ1IgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DSEFUX1NXQUxMT1dfT1BUUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfU0VORF9FU0NBUEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hBVF9WQVJfQUJPUlRfTEVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hBVF9DTFJfQUJPUlQgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUk9OVEFCIGlzIG5vdCBzZXQKK0NPTkZJR19EQz15CisjIENPTkZJR19GRUFUVVJFX0RDX0xJQk0gaXMgbm90IHNldAorIyBDT05GSUdfREVWRlNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVkZTRF9NT0RMT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVkZTRF9GR19OUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZGU0RfVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0RFVkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVk1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19FSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0VKRUNUX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfRkJTUExBU0ggaXMgbm90IHNldAorIyBDT05GSUdfRkxBU0hDUCBpcyBub3Qgc2V0CisjIENPTkZJR19GTEFTSF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZMQVNIX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19GTEFTSF9FUkFTRUFMTCBpcyBub3Qgc2V0CisjIENPTkZJR19JT05JQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5PVElGWUQgaXMgbm90IHNldAorIyBDT05GSUdfTEFTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xBU1RfU01BTEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MQVNUX0ZBTkNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hEUEFSTSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hEUEFSTV9HRVRfSURFTlRJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IRFBBUk1fSERJT19TQ0FOX0hXSUYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IRFBBUk1fSERJT19VTlJFR0lTVEVSX0hXSUYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IRFBBUk1fSERJT19EUklWRV9SRVNFVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hEUEFSTV9IRElPX1RSSVNUQVRFX0hXSUYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IRFBBUk1fSERJT19HRVRTRVRfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BS0VERVZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTUFLRURFVlNfTEVBRiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01BS0VERVZTX1RBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BTiBpcyBub3Qgc2V0CitDT05GSUdfTUlDUk9DT009eQorIyBDT05GSUdfTU9VTlRQT0lOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQUlEQVVUT1JVTiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFEQUhFQUQgaXMgbm90IHNldAorIyBDT05GSUdfUlVOTEVWRUwgaXMgbm90IHNldAorIyBDT05GSUdfUlggaXMgbm90IHNldAorIyBDT05GSUdfU0VUU0lEIGlzIG5vdCBzZXQKK0NPTkZJR19TVFJJTkdTPXkKK0NPTkZJR19USU1FPXkKKyMgQ09ORklHX1RJTUVPVVQgaXMgbm90IHNldAorIyBDT05GSUdfVFRZU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19WT0xOQU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JraW5nIFV0aWxpdGllcworIworIyBDT05GSUdfTkFNRUlGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTkFNRUlGX0VYVEVOREVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05CRENMSUVOVCBpcyBub3Qgc2V0CitDT05GSUdfTkM9eQorIyBDT05GSUdfTkNfU0VSVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DX0VYVFJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DXzExMF9DT01QQVQgaXMgbm90IHNldAorQ09ORklHX1BJTkc9eQorQ09ORklHX1BJTkc2PXkKK0NPTkZJR19GRUFUVVJFX0ZBTkNZX1BJTkc9eQorIyBDT05GSUdfV0hPSVMgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfSVBWNj15CisjIENPTkZJR19GRUFUVVJFX1VOSVhfTE9DQUwgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfUFJFRkVSX0lQVjRfQUREUkVTUz15CisjIENPTkZJR19WRVJCT1NFX1JFU09MVVRJT05fRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBJTkcgaXMgbm90IHNldAorIyBDT05GSUdfQlJDVEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CUkNUTF9GQU5DWSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JSQ1RMX1NIT1cgaXMgbm90IHNldAorIyBDT05GSUdfRE5TRCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhFUl9XQUtFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBS0VJREVOVEQgaXMgbm90IHNldAorIyBDT05GSUdfRlRQRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0ZUUF9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0ZUUERfQUNDRVBUX0JST0tFTl9MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRlRQX0FVVEhFTlRJQ0FUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUEdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFBQVVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9GVFBHRVRQVVRfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19IT1NUTkFNRT15CisjIENPTkZJR19IVFRQRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX1JBTkdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX1NFVFVJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0JBU0lDX0FVVEggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IVFRQRF9BVVRIX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0NHSSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0NPTkZJR19XSVRIX1NDUklQVF9JTlRFUlBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfU0VUX1JFTU9URV9QT1JUX1RPX0VOViBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0VOQ09ERV9VUkxfU1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfRVJST1JfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IVFRQRF9QUk9YWSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0daSVAgaXMgbm90IHNldAorQ09ORklHX0lGQ09ORklHPXkKK0NPTkZJR19GRUFUVVJFX0lGQ09ORklHX1NUQVRVUz15CisjIENPTkZJR19GRUFUVVJFX0lGQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JRkNPTkZJR19NRU1TVEFSVF9JT0FERFJfSVJRIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0lGQ09ORklHX0hXPXkKKyMgQ09ORklHX0ZFQVRVUkVfSUZDT05GSUdfQlJPQURDQVNUX1BMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSUZFTlNMQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lGUExVR0QgaXMgbm90IHNldAorQ09ORklHX0lGVVBET1dOPXkKK0NPTkZJR19JRlVQRE9XTl9JRlNUQVRFX1BBVEg9Ii92YXIvcnVuL2lmc3RhdGUiCisjIENPTkZJR19GRUFUVVJFX0lGVVBET1dOX0lQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVBfQlVJTFRJTiBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9JRkNPTkZJR19CVUlMVElOPXkKK0NPTkZJR19GRUFUVVJFX0lGVVBET1dOX0lQVjQ9eQorQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVBWNj15CitDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9NQVBQSU5HPXkKK0NPTkZJR19GRUFUVVJFX0lGVVBET1dOX0VYVEVSTkFMX0RIQ1A9eQorIyBDT05GSUdfSU5FVEQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTkVURF9TVVBQT1JUX0JVSUxUSU5fRUNITyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lORVREX1NVUFBPUlRfQlVJTFRJTl9ESVNDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5FVERfU1VQUE9SVF9CVUlMVElOX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTkVURF9TVVBQT1JUX0JVSUxUSU5fREFZVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lORVREX1NVUFBPUlRfQlVJTFRJTl9DSEFSR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5FVERfUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19JUD15CitDT05GSUdfRkVBVFVSRV9JUF9BRERSRVNTPXkKK0NPTkZJR19GRUFUVVJFX0lQX0xJTks9eQorQ09ORklHX0ZFQVRVUkVfSVBfUk9VVEU9eQorQ09ORklHX0ZFQVRVUkVfSVBfVFVOTkVMPXkKKyMgQ09ORklHX0ZFQVRVUkVfSVBfUlVMRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lQX1NIT1JUX0ZPUk1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSVBfUkFSRV9QUk9UT0NPTFMgaXMgbm90IHNldAorIyBDT05GSUdfSVBBRERSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQUlVMRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUENBTEMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JUENBTENfRkFOQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JUENBTENfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRTVEFUPXkKKyMgQ09ORklHX0ZFQVRVUkVfTkVUU1RBVF9XSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTkVUU1RBVF9QUkcgaXMgbm90IHNldAorQ09ORklHX05TTE9PS1VQPXkKKyMgQ09ORklHX05UUEQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9OVFBEX1NFUlZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX05UUERfQ09ORiBpcyBub3Qgc2V0CisjIENPTkZJR19QU0NBTiBpcyBub3Qgc2V0CitDT05GSUdfUk9VVEU9eQorIyBDT05GSUdfU0xBVFRBQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVENQU1ZEIGlzIG5vdCBzZXQKK0NPTkZJR19URUxORVQ9eQorIyBDT05GSUdfRkVBVFVSRV9URUxORVRfVFRZUEUgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVEVMTkVUX0FVVE9MT0dJTj15CisjIENPTkZJR19URUxORVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEVMTkVURF9TVEFOREFMT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEVMTkVURF9JTkVURF9XQUlUIGlzIG5vdCBzZXQKK0NPTkZJR19URlRQPXkKKyMgQ09ORklHX1RGVFBEIGlzIG5vdCBzZXQKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgdGZ0cC90ZnRwZAorIworQ09ORklHX0ZFQVRVUkVfVEZUUF9HRVQ9eQorQ09ORklHX0ZFQVRVUkVfVEZUUF9QVVQ9eQorIyBDT05GSUdfRkVBVFVSRV9URlRQX0JMT0NLU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RGVFBfUFJPR1JFU1NfQkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RGVFBfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1RSQUNFUk9VVEU9eQorIyBDT05GSUdfVFJBQ0VST1VURTYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UUkFDRVJPVVRFX1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UUkFDRVJPVVRFX1NPVVJDRV9ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RSQUNFUk9VVEVfVVNFX0lDTVAgaXMgbm90IHNldAorIyBDT05GSUdfVFVOQ1RMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVFVOQ1RMX1VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VESENQQzYgaXMgbm90IHNldAorQ09ORklHX1VESENQRD15CisjIENPTkZJR19ESENQUkVMQVkgaXMgbm90IHNldAorQ09ORklHX0RVTVBMRUFTRVM9eQorIyBDT05GSUdfRkVBVFVSRV9VREhDUERfV1JJVEVfTEVBU0VTX0VBUkxZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVURIQ1BEX0JBU0VfSVBfT05fTUFDIGlzIG5vdCBzZXQKK0NPTkZJR19ESENQRF9MRUFTRVNfRklMRT0iL3Zhci9saWIvbWlzYy91ZGhjcGQubGVhc2VzIgorQ09ORklHX1VESENQQz15CitDT05GSUdfRkVBVFVSRV9VREhDUENfQVJQSU5HPXkKK0NPTkZJR19GRUFUVVJFX1VESENQQ19TQU5JVElaRU9QVD15CisjIENPTkZJR19GRUFUVVJFX1VESENQX1BPUlQgaXMgbm90IHNldAorQ09ORklHX1VESENQX0RFQlVHPTAKKyMgQ09ORklHX0ZFQVRVUkVfVURIQ1BfUkZDMzM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1VESENQXzgwMjFRIGlzIG5vdCBzZXQKK0NPTkZJR19VREhDUENfREVGQVVMVF9TQ1JJUFQ9Ii91c3Ivc2hhcmUvdWRoY3BjL2RlZmF1bHQuc2NyaXB0IgorQ09ORklHX1VESENQQ19TTEFDS19GT1JfQlVHR1lfU0VSVkVSUz04MAorQ09ORklHX0lGVVBET1dOX1VESENQQ19DTURfT1BUSU9OUz0iLVIgLW4iCisjIENPTkZJR19VRFBTVkQgaXMgbm90IHNldAorIyBDT05GSUdfVkNPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfV0dFVD15CitDT05GSUdfRkVBVFVSRV9XR0VUX1NUQVRVU0JBUj15CitDT05GSUdfRkVBVFVSRV9XR0VUX0FVVEhFTlRJQ0FUSU9OPXkKK0NPTkZJR19GRUFUVVJFX1dHRVRfTE9OR19PUFRJT05TPXkKK0NPTkZJR19GRUFUVVJFX1dHRVRfVElNRU9VVD15CisjIENPTkZJR19aQ0lQIGlzIG5vdCBzZXQKKworIworIyBQcmludCBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0xQRCBpcyBub3Qgc2V0CisjIENPTkZJR19MUFIgaXMgbm90IHNldAorIyBDT05GSUdfTFBRIGlzIG5vdCBzZXQKKworIworIyBNYWlsIFV0aWxpdGllcworIworIyBDT05GSUdfTUFLRU1JTUUgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfTUlNRV9DSEFSU0VUPSIiCisjIENPTkZJR19QT1BNQUlMRElSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUE9QTUFJTERJUl9ERUxJVkVSWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUZPUk1JTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9SRUZPUk1JTUVfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTkRNQUlMIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzIFV0aWxpdGllcworIworIyBDT05GSUdfSU9TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTT0YgaXMgbm90IHNldAorIyBDT05GSUdfTVBTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05NRVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BTVFJFRSBpcyBub3Qgc2V0CisjIENPTkZJR19QV0RYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNRU1DQVAgaXMgbm90IHNldAorQ09ORklHX1RPUD15CitDT05GSUdfRkVBVFVSRV9UT1BfQ1BVX1VTQUdFX1BFUkNFTlRBR0U9eQorQ09ORklHX0ZFQVRVUkVfVE9QX0NQVV9HTE9CQUxfUEVSQ0VOVFM9eQorIyBDT05GSUdfRkVBVFVSRV9UT1BfU01QX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RPUF9ERUNJTUFMUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RPUF9TTVBfUFJPQ0VTUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RPUE1FTSBpcyBub3Qgc2V0CitDT05GSUdfVVBUSU1FPXkKKyMgQ09ORklHX0ZFQVRVUkVfVVBUSU1FX1VUTVBfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRlJFRT15CitDT05GSUdfRlVTRVI9eQorQ09ORklHX0tJTEw9eQorQ09ORklHX0tJTExBTEw9eQorIyBDT05GSUdfS0lMTEFMTDUgaXMgbm90IHNldAorIyBDT05GSUdfUEdSRVAgaXMgbm90IHNldAorQ09ORklHX1BJRE9GPXkKKyMgQ09ORklHX0ZFQVRVUkVfUElET0ZfU0lOR0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUElET0ZfT01JVCBpcyBub3Qgc2V0CisjIENPTkZJR19QS0lMTCBpcyBub3Qgc2V0CitDT05GSUdfUFM9eQorQ09ORklHX0ZFQVRVUkVfUFNfV0lERT15CitDT05GSUdfRkVBVFVSRV9QU19MT05HPXkKKyMgQ09ORklHX0ZFQVRVUkVfUFNfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1BTX0FERElUSU9OQUxfQ09MVU1OUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1BTX1VOVVNVQUxfU1lTVEVNUyBpcyBub3Qgc2V0CitDT05GSUdfUkVOSUNFPXkKK0NPTkZJR19CQl9TWVNDVEw9eQorIyBDT05GSUdfRkVBVFVSRV9TSE9XX1RIUkVBRFMgaXMgbm90IHNldAorQ09ORklHX1dBVENIPXkKKworIworIyBSdW5pdCBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX1JVTlNWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTlNWRElSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUlVOU1ZESVJfTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NWIGlzIG5vdCBzZXQKK0NPTkZJR19TVl9ERUZBVUxUX1NFUlZJQ0VfRElSPSIiCisjIENPTkZJR19TVkxPR0QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hQU1QgaXMgbm90IHNldAorIyBDT05GSUdfU0VUVUlER0lEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOVlVJREdJRCBpcyBub3Qgc2V0CisjIENPTkZJR19FTlZESVIgaXMgbm90IHNldAorIyBDT05GSUdfU09GVExJTUlUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIQ09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hDT05fTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFVEVORk9SQ0UgaXMgbm90IHNldAorIyBDT05GSUdfR0VUU0VCT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQURfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BVENIUEFUSENPTiBpcyBub3Qgc2V0CisjIENPTkZJR19SRVNUT1JFQ09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTkNPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1JVTkNPTl9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VMSU5VWEVOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VURU5GT1JDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRGSUxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NFVEZJTEVTX0NIRUNLX09QVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRTRUJPT0wgaXMgbm90IHNldAorIyBDT05GSUdfU0VTVEFUVVMgaXMgbm90IHNldAorCisjCisjIFNoZWxscworIworQ09ORklHX0FTSD15CitDT05GSUdfQVNIX0JBU0hfQ09NUEFUPXkKKyMgQ09ORklHX0FTSF9JRExFX1RJTUVPVVQgaXMgbm90IHNldAorQ09ORklHX0FTSF9KT0JfQ09OVFJPTD15CitDT05GSUdfQVNIX0FMSUFTPXkKK0NPTkZJR19BU0hfR0VUT1BUUz15CitDT05GSUdfQVNIX0JVSUxUSU5fRUNITz15CitDT05GSUdfQVNIX0JVSUxUSU5fUFJJTlRGPXkKK0NPTkZJR19BU0hfQlVJTFRJTl9URVNUPXkKK0NPTkZJR19BU0hfSEVMUD15CisjIENPTkZJR19BU0hfQ01EQ01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FTSF9NQUlMIGlzIG5vdCBzZXQKK0NPTkZJR19BU0hfT1BUSU1JWkVfRk9SX1NJWkU9eQorIyBDT05GSUdfQVNIX1JBTkRPTV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19BU0hfRVhQQU5EX1BSTVQ9eQorIyBDT05GSUdfQ1RUWUhBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSCBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0JBU0hfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfQlJBQ0VfRVhQQU5TSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfSEVMUCBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0lOVEVSQUNUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfU0FWRUhJU1RPUlkgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9KT0IgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9USUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfSUYgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9MT09QUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0NBU0UgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9GVU5DVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9MT0NBTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX1JBTkRPTV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfRVhQT1JUX04gaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9NT0RFX1ggaXMgbm90IHNldAorIyBDT05GSUdfTVNIIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1NIX0lTX0FTSD15CisjIENPTkZJR19GRUFUVVJFX1NIX0lTX0hVU0ggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TSF9JU19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQkFTSF9JU19BU0ggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CQVNIX0lTX0hVU0ggaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfQkFTSF9JU19OT05FPXkKK0NPTkZJR19TSF9NQVRIX1NVUFBPUlQ9eQorIyBDT05GSUdfU0hfTUFUSF9TVVBQT1JUXzY0IGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1NIX0VYVFJBX1FVSUVUPXkKKyMgQ09ORklHX0ZFQVRVUkVfU0hfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NIX05PRk9SSyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9TSF9ISVNURklMRVNJWkU9eQorCisjCisjIFN5c3RlbSBMb2dnaW5nIFV0aWxpdGllcworIworQ09ORklHX1NZU0xPR0Q9eQorQ09ORklHX0ZFQVRVUkVfUk9UQVRFX0xPR0ZJTEU9eQorQ09ORklHX0ZFQVRVUkVfUkVNT1RFX0xPRz15CitDT05GSUdfRkVBVFVSRV9TWVNMT0dEX0RVUD15CitDT05GSUdfRkVBVFVSRV9TWVNMT0dEX0NGRz15CitDT05GSUdfRkVBVFVSRV9TWVNMT0dEX1JFQURfQlVGRkVSX1NJWkU9MjU2CitDT05GSUdfRkVBVFVSRV9JUENfU1lTTE9HPXkKK0NPTkZJR19GRUFUVVJFX0lQQ19TWVNMT0dfQlVGRkVSX1NJWkU9NjQKK0NPTkZJR19MT0dSRUFEPXkKK0NPTkZJR19GRUFUVVJFX0xPR1JFQURfUkVEVUNFRF9MT0NLSU5HPXkKK0NPTkZJR19GRUFUVVJFX0tNU0dfU1lTTE9HPXkKK0NPTkZJR19LTE9HRD15CisKKyMKKyMga2xvZ2Qgc2hvdWxkIG5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggc3lzbG9nIHRvIGtlcm5lbCBwcmludGsgYnVmZmVyCisjCitDT05GSUdfRkVBVFVSRV9LTE9HRF9LTE9HQ1RMPXkKK0NPTkZJR19MT0dHRVI9eQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZmFpbF9vbl9ub19tZWRpYS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2ZhaWxfb25fbm9fbWVkaWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc0NWYxNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2ZhaWxfb25fbm9fbWVkaWEucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoZSBjdXJyZW50IGJlaGF2aW91ciBvZiBidXN5Ym94IGlzIHRvIHRyeSBhbGwgZnN0eXBlIHdoZW4gYXV0b21vdW50aW5nCitldmVuIHdoZW4gbm8gbWVkaWEgZXhpc3RzLiAgVGhlIHV0aWwtbGludXggbW91bnQgY29tbWFuZCBiYWlscyB3aGVuIG5vCittZWRpYSBleGlzdHMsIHNvIGNoYW5nZSB0aGUgYmVoYXZpb3VyIG9mIGJ1c3lib3ggdG8gZG8gdGhlIHNhbWUuCisKK0l0IGNvdWxkIGFsc28gYmUgYXJndWVkIHRoYXQgdGhlIEtFUk5fSU5GTyBtZXNzYWdlIGZyb20gYnRyZnMgY291bGQgYmUKK3JlbW92ZWQsIGJ1dCB0aGF0IHdvdWxkIGJlIGhhcmRlciB0byBhY2NvbXBsaXNoLgorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKKworSW5kZXg6IGJ1c3lib3gtMS4yMC4yL3V0aWwtbGludXgvbW91bnQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJ1c3lib3gtMS4yMC4yLm9yaWcvdXRpbC1saW51eC9tb3VudC5jCisrKysgYnVzeWJveC0xLjIwLjIvdXRpbC1saW51eC9tb3VudC5jCitAQCAtNTk4LDcgKzU5OCwxMyBAQCBzdGF0aWMgaW50IG1vdW50X2l0X25vdyhzdHJ1Y3QgbW50ZW50ICptCisgCQkJCWJyZWFrOworIAkJCWVycm5vID0gZXJybm9fc2F2ZTsKKyAJCX0KKy0KKysJCS8qCisrCQkgKiBCcmVhayBpZiB0aGVyZSBpcyBubyBtZWRpYSwgbm8gcG9pbnQgcmV0cnlpbmcgZm9yIGFsbAorKwkJICogZnMgdHlwZXMgc2luY2UgdGhlcmUgaXMgbm8gbWVkaWEgYXZhaWxhYmxlCisrCQkgKi8KKysJCWlmIChyYyA9PSAtMSAmJiBlcnJubyA9PSBFTk9NRURJVU0pIHsKKysJCQliYl9wZXJyb3JfbXNnX2FuZF9kaWUoIm1vdW50aW5nICVzIG9uICVzIGZhaWxlZCIsIG1wLT5tbnRfZnNuYW1lLCBtcC0+bW50X2Rpcik7CisrCQl9CisgCQlpZiAoIXJjIHx8ICh2ZnNmbGFncyAmIE1TX1JET05MWSkgfHwgKGVycm5vICE9IEVBQ0NFUyAmJiBlcnJubyAhPSBFUk9GUykpCisgCQkJYnJlYWs7CisgCQlpZiAoISh2ZnNmbGFncyAmIE1TX1NJTEVOVCkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9nZXRfaGVhZGVyX3Rhci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2dldF9oZWFkZXJfdGFyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNTI4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9nZXRfaGVhZGVyX3Rhci5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIyBjb3B5IGNvbW1pdCBtZXNzYWdlIGZyb20gT0UgYXMgdGhlIHBhdGNoIGNvbW1lbnQ6CisjICAgIGNvbW1pdCA1YTBlMWQ0NzNjYTdhY2E1ZmZlZmZmZTlhMmVjNDRhZTdhMWYzNWJjCisjICAgIEF1dGhvcjogRnJhbnMgTWV1bGVuYnJvZWtzIDxmcmFuc21ldWxlbmJyb2Vrc0BnbWFpbC5jb20+CisjICAgIERhdGU6ICAgV2VkIEZlYiAxMSAyMjo0MDoyMSAyMDA5ICswMTAwCisjCisjICAgIGJ1c3lib3g6IGZpeCB0YXIgcHJvYmxlbSB3aXRoIGZpbGVuYW1lcyB0aGF0IGFyZSBleGFjdGx5IDEwMCBieXRlcworIworIyBhYm92ZSBjb21tZW50IGFkZGVkIGJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMjAxMC0wNy0wNgorCistLS0gYnVzeWJveC0xLjEzLjIvYXJjaGl2YWwvbGliYXJjaGl2ZS9nZXRfaGVhZGVyX3Rhci5jLm9yaWcJMjAwOC0xMS0wOSAxODoyODowMi4wMDAwMDAwMDAgKzAxMDAKKysrKyBidXN5Ym94LTEuMTMuMi9hcmNoaXZhbC9saWJhcmNoaXZlL2dldF9oZWFkZXJfdGFyLmMJMjAwOS0wMi0xMSAyMjozNDo1Mi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNTIsNiArMjUyLDggQEAKKyAJCQlmaWxlX2hlYWRlci0+bmFtZSA9IGNvbmNhdF9wYXRoX2ZpbGUodGFyLnByZWZpeCwgdGFyLm5hbWUpOworIAkJfSBlbHNlCisgCQkJZmlsZV9oZWFkZXItPm5hbWUgPSB4c3RyZHVwKHRhci5uYW1lKTsKKysJCWlmIChzdHJsZW4oZmlsZV9oZWFkZXItPm5hbWUpID4gMTAwKSAKKysJCQlmaWxlX2hlYWRlci0+bmFtZVsxMDBdID0gMDsKKyAJfQorIAorIAkvKiBTZXQgYml0cyAxMi0xNSBvZiB0aGUgZmlsZXMgbW9kZSAqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZ2V0b3B0cy5jZmcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9nZXRvcHRzLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGIwYTRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZ2V0b3B0cy5jZmcKQEAgLTAsMCArMSwzIEBACitDT05GSUdfR0VUT1BUPXkKK0NPTkZJR19MT05HX09QVFM9eQorQ09ORklHX0ZFQVRVUkVfR0VUT1BUX0xPTkc9eQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvbG9naW4tdXRpbGl0aWVzLmNmZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2xvZ2luLXV0aWxpdGllcy5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M5YjJkYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2xvZ2luLXV0aWxpdGllcy5jZmcKQEAgLTAsMCArMSwxMyBAQAorQ09ORklHX0ZFQVRVUkVfU0hBRE9XUEFTU1dEUz15CitDT05GSUdfQUREVVNFUj15CitDT05GSUdfRkVBVFVSRV9BRERVU0VSX0xPTkdfT1BUSU9OUz15CitDT05GSUdfQURER1JPVVA9eQorQ09ORklHX0ZFQVRVUkVfQURER1JPVVBfTE9OR19PUFRJT05TPXkKK0NPTkZJR19ERUxVU0VSPXkKK0NPTkZJR19ERUxHUk9VUD15CitDT05GSUdfR0VUVFk9eQorQ09ORklHX0xPR0lOPXkKK0NPTkZJR19QQVNTV0Q9eQorQ09ORklHX1NVPXkKK0NPTkZJR19TVUxPR0lOPXkKK0NPTkZJR19WTE9DSz15CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9tb3VudC12aWEtbGFiZWwuY2ZnIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvbW91bnQtdmlhLWxhYmVsLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmU3YWIyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvbW91bnQtdmlhLWxhYmVsLmNmZwpAQCAtMCwwICsxLDkgQEAKK0NPTkZJR19CTEtJRD15CitDT05GSUdfRkVBVFVSRV9CTEtJRF9UWVBFPXkKK0NPTkZJR19GRUFUVVJFX01PVU5UX0xBQkVMPXkKK0NPTkZJR19WT0xVTUVJRD15CitDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9CVFJGUz15CitDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9FWFQ9eQorQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfRjJGUz15CitDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9GQVQ9eQorQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfU1FVQVNIRlM9eQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvcmVjb2duaXplX2Nvbm5tYW5kLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvcmVjb2duaXplX2Nvbm5tYW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MmM3NGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9yZWNvZ25pemVfY29ubm1hbmQucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVGhpcyBhZGRzIGNvbm5tYW5kIHRvIHRoZSBsaXN0IG9mIGtub3cgZGhjcCBjbGllbnRzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtQ29yZV0KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogYnVzeWJveC0xLjIyLjEvbmV0d29ya2luZy9pZnVwZG93bi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYnVzeWJveC0xLjIyLjEub3JpZy9uZXR3b3JraW5nL2lmdXBkb3duLmMKKysrKyBidXN5Ym94LTEuMjIuMS9uZXR3b3JraW5nL2lmdXBkb3duLmMKK0BAIC01MjEsNiArNTIxLDEwIEBAIHN0cnVjdCBkaGNwX2NsaWVudF90IHsKKyB9OworIAorIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGhjcF9jbGllbnRfdCBleHRfZGhjcF9jbGllbnRzW10gPSB7CisrCXsgImNvbm5tYW5kIiwKKysJCSJ0cnVlIiwKKysJCSJ0cnVlIiwKKysJfSwKKyAJeyAiZGhjcGNkIiwKKyAJCSJkaGNwY2RbWyAtaCAlaG9zdG5hbWUlXV1bWyAtaSAldmVuZG9yJV1dW1sgLUkgJWNsaWVudCVdXVtbIC1sICVsZWFzZXRpbWUlXV0gJWlmYWNlJSIsCisgCQkiZGhjcGNkIC1rICVpZmFjZSUiLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvc2hhMXN1bS5jZmcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9zaGExc3VtLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGU3MmQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvc2hhMXN1bS5jZmcKQEAgLTAsMCArMSBAQAorQ09ORklHX1NIQTFTVU09eQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvc2hhMjU2c3VtLmNmZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3NoYTI1NnN1bS5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U2NTJhZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3NoYTI1NnN1bS5jZmcKQEAgLTAsMCArMSBAQAorQ09ORklHX1NIQTI1NlNVTT15CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveF8xLjIzLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveF8xLjIzLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRkOWY5NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94XzEuMjMuMi5iYgpAQCAtMCwwICsxLDUwIEBACityZXF1aXJlIGJ1c3lib3guaW5jCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5idXN5Ym94Lm5ldC9kb3dubG9hZHMvYnVzeWJveC0ke1BWfS50YXIuYnoyO25hbWU9dGFyYmFsbCBcCisgICAgICAgICAgIGZpbGU6Ly9nZXRfaGVhZGVyX3Rhci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LWFwcGxldGxpYi1kZXBlbmRlbmN5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtdWRoY3BjLW5vX2RlY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbmQtdG91Y2hzY3JlZW4uc2ggXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1jcm9uIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtaHR0cGQgXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC11ZGhjcGQgXAorICAgICAgICAgICBmaWxlOi8vZGVmYXVsdC5zY3JpcHQgXAorICAgICAgICAgICBmaWxlOi8vc2ltcGxlLnNjcmlwdCBcCisgICAgICAgICAgIGZpbGU6Ly9od2Nsb2NrLnNoIFwKKyAgICAgICAgICAgZmlsZTovL21vdW50LmJ1c3lib3ggXAorICAgICAgICAgICBmaWxlOi8vc3lzbG9nIFwKKyAgICAgICAgICAgZmlsZTovL3N5c2xvZy1zdGFydHVwLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vc3lzbG9nLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1zeXNsb2cuZGVmYXVsdCBcCisgICAgICAgICAgIGZpbGU6Ly9tZGV2IFwKKyAgICAgICAgICAgZmlsZTovL21kZXYuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9tZGV2LW1vdW50LnNoIFwKKyAgICAgICAgICAgZmlsZTovL3Vtb3VudC5idXN5Ym94IFwKKyAgICAgICAgICAgZmlsZTovL2RlZmNvbmZpZyBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LXN5c2xvZy5zZXJ2aWNlLmluIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gta2xvZ2Quc2VydmljZS5pbiBcCisgICAgICAgICAgIGZpbGU6Ly9mYWlsX29uX25vX21lZGlhLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9pbmV0ZC5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL2luZXRkIFwKKyAgICAgICAgICAgZmlsZTovL2xvZ2luLXV0aWxpdGllcy5jZmcgXAorICAgICAgICAgICBmaWxlOi8vcmVjb2duaXplX2Nvbm5tYW5kLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtY3Jvc3MtbWVudWNvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWlmY29uZmlnLWZpeC1kb3VibGUtZnJlZS1mYXRhbC1lcnJvci1pbi1JTkVUX3NwcmludC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNob3duLWZpeC1oZWxwLXRleHQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbW91bnQtdmlhLWxhYmVsLmNmZyBcCisgICAgICAgICAgIGZpbGU6Ly9zaGExc3VtLmNmZyBcCisgICAgICAgICAgIGZpbGU6Ly9zaGEyNTZzdW0uY2ZnIFwKKyAgICAgICAgICAgZmlsZTovL2dldG9wdHMuY2ZnIFwKKyIKKworU1JDX1VSSVt0YXJiYWxsLm1kNXN1bV0gPSAiNzkyNTY4M2Q3ZGQxMDVhYWJlOWI2YjYxOGQ0OGNjNzMiCitTUkNfVVJJW3RhcmJhbGwuc2hhMjU2c3VtXSA9ICIwNWE2ZjllMjFhYWQ4YzA5OGUzODhhZTc3ZGU3YjIzNjE5NDFhZmE3MTU3ZWY3NDIxNjcwMzM5NWIxNGUzMTlhIgorCitFWFRSQV9PRU1BS0UgKz0gIlY9MSBBUkNIPSR7VEFSR0VUX0FSQ0h9IENST1NTX0NPTVBJTEU9JHtUQVJHRVRfUFJFRklYfSBTS0lQX1NUUklQPXkiCisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworICAgICAgICBjcCAtciAke0J9L3Rlc3RzdWl0ZSAke0R9JHtQVEVTVF9QQVRIfS8KKyAgICAgICAgY3AgJHtCfS8uY29uZmlnICAgICAgJHtEfSR7UFRFU1RfUEFUSH0vCisgICAgICAgIGxuIC1zIC9iaW4vYnVzeWJveCAgICR7RH0ke1BURVNUX1BBVEh9L2J1c3lib3gKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94X2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGU3MmY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3hfZ2l0LmJiCkBAIC0wLDAgKzEsNTQgQEAKK3JlcXVpcmUgYnVzeWJveC5pbmMKKworU1JDUkVWID0gImJlOTQ3YzRkOTdjMGRhY2I3MDNhNmYyNGRkODEzZmY2ZGQzYTMzYjYiCisjIExvb2tvdXQgZm9yIFBWIGJ1bXAgdG9vIHdoZW4gU1JDUkVWIGlzIGNoYW5nZWQKK1BWID0gIjEuMjMuMitnaXQke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9idXN5Ym94Lm5ldC9idXN5Ym94LmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9nZXRfaGVhZGVyX3Rhci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LWFwcGxldGxpYi1kZXBlbmRlbmN5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtdWRoY3BjLW5vX2RlY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbmQtdG91Y2hzY3JlZW4uc2ggXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1jcm9uIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtaHR0cGQgXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC11ZGhjcGQgXAorICAgICAgICAgICBmaWxlOi8vZGVmYXVsdC5zY3JpcHQgXAorICAgICAgICAgICBmaWxlOi8vc2ltcGxlLnNjcmlwdCBcCisgICAgICAgICAgIGZpbGU6Ly9od2Nsb2NrLnNoIFwKKyAgICAgICAgICAgZmlsZTovL21vdW50LmJ1c3lib3ggXAorICAgICAgICAgICBmaWxlOi8vc3lzbG9nIFwKKyAgICAgICAgICAgZmlsZTovL3N5c2xvZy1zdGFydHVwLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vc3lzbG9nLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1zeXNsb2cuZGVmYXVsdCBcCisgICAgICAgICAgIGZpbGU6Ly9tZGV2IFwKKyAgICAgICAgICAgZmlsZTovL21kZXYuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9tZGV2LW1vdW50LnNoIFwKKyAgICAgICAgICAgZmlsZTovL3Vtb3VudC5idXN5Ym94IFwKKyAgICAgICAgICAgZmlsZTovL2RlZmNvbmZpZyBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LXN5c2xvZy5zZXJ2aWNlLmluIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gta2xvZ2Quc2VydmljZS5pbiBcCisgICAgICAgICAgIGZpbGU6Ly9mYWlsX29uX25vX21lZGlhLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9pbmV0ZC5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL2luZXRkIFwKKyAgICAgICAgICAgZmlsZTovL2xvZ2luLXV0aWxpdGllcy5jZmcgXAorICAgICAgICAgICBmaWxlOi8vcmVjb2duaXplX2Nvbm5tYW5kLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtY3Jvc3MtbWVudWNvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWlmY29uZmlnLWZpeC1kb3VibGUtZnJlZS1mYXRhbC1lcnJvci1pbi1JTkVUX3NwcmludC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNob3duLWZpeC1oZWxwLXRleHQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbW91bnQtdmlhLWxhYmVsLmNmZyBcCisgICAgICAgICAgIGZpbGU6Ly9zaGExc3VtLmNmZyBcCisgICAgICAgICAgIGZpbGU6Ly9zaGEyNTZzdW0uY2ZnIFwKKyIKKworRVhUUkFfT0VNQUtFICs9ICJWPTEgQVJDSD0ke1RBUkdFVF9BUkNIfSBDUk9TU19DT01QSUxFPSR7VEFSR0VUX1BSRUZJWH0gU0tJUF9TVFJJUD15IgorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKyAgICAgICAgY3AgLXIgJHtCfS90ZXN0c3VpdGUgJHtEfSR7UFRFU1RfUEFUSH0vCisgICAgICAgIGNwICR7Qn0vLmNvbmZpZyAgICAgICR7RH0ke1BURVNUX1BBVEh9LworICAgICAgICBsbiAtcyAvYmluL2J1c3lib3ggICAke0R9JHtQVEVTVF9QQVRIfS9idXN5Ym94Cit9CisKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LWNyb24gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC1jcm9uCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYwZTZiMTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC1jcm9uCkBAIC0wLDAgKzEsMzkgQEAKKyMhL2Jpbi9zaAorREFFTU9OPS91c3Ivc2Jpbi9jcm9uZAorTkFNRT1jcm9uZAorREVTQz0iQnVzeWJveCBQZXJpb2RpYyBDb21tYW5kIFNjaGVkdWxlciIKK0FSR1M9Ii1jIC9ldGMvY3Jvbi9jcm9udGFicyIKKwordGVzdCAtZiAkREFFTU9OIHx8IGV4aXQgMAorCitzZXQgLWUKKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisgICAgICAgIGVjaG8gLW4gInN0YXJ0aW5nICRERVNDOiAkTkFNRS4uLiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLVMgLWIgLW4gJE5BTUUgLWEgJERBRU1PTiAtLSAkQVJHUworCWVjaG8gImRvbmUuIgorCTs7CisgICAgc3RvcCkKKyAgICAgICAgZWNobyAtbiAic3RvcHBpbmcgJERFU0M6ICROQU1FLi4uICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtSyAtbiAkTkFNRQorCWVjaG8gImRvbmUuIgorCTs7CisgICAgcmVzdGFydCkKKyAgICAgICAgZWNobyAtbiAicmVzdGFydGluZyAkREVTQzogJE5BTUUuLi4gIgorIAkkMCBzdG9wCisJJDAgc3RhcnQKKwllY2hvICJkb25lLiIKKwk7OworICAgIHJlbG9hZCkKKyAgICAJZWNobyAtbiAicmVsb2FkaW5nICRERVNDOiAkTkFNRS4uLiAiCisgICAgCWtpbGxhbGwgLUhVUCAkKGJhc2VuYW1lICR7REFFTU9OfSkKKwllY2hvICJkb25lLiIKKwk7OworICAgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHJlc3RhcnR8cmVsb2FkfSIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LWh0dHBkIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtaHR0cGQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzgzNDhlNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LWh0dHBkCkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorREFFTU9OPS91c3Ivc2Jpbi9odHRwZAorTkFNRT1odHRwZAorREVTQz0iQnVzeWJveCBIVFRQIERhZW1vbiIKK0hUVFBST09UPSIvc3J2L3d3dyIKK0FSR1M9Ii1oICRIVFRQUk9PVCIKKwordGVzdCAtZiAkREFFTU9OIHx8IGV4aXQgMAorCitzZXQgLWUKKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisgICAgICAgIGVjaG8gLW4gInN0YXJ0aW5nICRERVNDOiAkTkFNRS4uLiAiCisJaWYgWyAhIC1kICRIVFRQUk9PVCBdOyB0aGVuCisJCWVjaG8gIiRIVFRQUk9PVCBpcyBtaXNzaW5nLiIKKwkJZXhpdCAxCisJZmkKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAtYiAtbiAkTkFNRSAtYSAkREFFTU9OIC0tICRBUkdTCisJZWNobyAiZG9uZS4iCisJOzsKKyAgICBzdG9wKQorICAgICAgICBlY2hvIC1uICJzdG9wcGluZyAkREVTQzogJE5BTUUuLi4gIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC1uICROQU1FCisJZWNobyAiZG9uZS4iCisJOzsKKyAgICByZXN0YXJ0KQorICAgICAgICBlY2hvICJyZXN0YXJ0aW5nICRERVNDOiAkTkFNRS4uLiAiCisgCSQwIHN0b3AKKwkkMCBzdGFydAorCWVjaG8gImRvbmUuIgorCTs7CisgICAgcmVsb2FkKQorICAgIAllY2hvIC1uICJyZWxvYWRpbmcgJERFU0M6ICROQU1FLi4uICIKKyAgICAJa2lsbGFsbCAtSFVQICQoYmFzZW5hbWUgJHtEQUVNT059KQorCWVjaG8gImRvbmUuIgorCTs7CisgICAgKikKKwllY2hvICJVc2FnZTogJDAge3N0YXJ0fHN0b3B8cmVzdGFydHxyZWxvYWR9IgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gta2xvZ2Quc2VydmljZS5pbiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LWtsb2dkLnNlcnZpY2UuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdjNzc1NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LWtsb2dkLnNlcnZpY2UuaW4KQEAgLTAsMCArMSw4IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPUtlcm5lbCBMb2dnaW5nIFNlcnZpY2UKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9QGJhc2Vfc2JpbmRpckAva2xvZ2QgLW4KKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtc3lzbG9nLmRlZmF1bHQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC1zeXNsb2cuZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTE2Y2FmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtc3lzbG9nLmRlZmF1bHQKQEAgLTAsMCArMSwyNSBAQAorT1BUSU9OUz0iLUMiCisjIFRoZSBhYm92ZSBvcHRpb24gbWVhbnMgc3lzbG9nZCB3aWxsIGxvZyB0byAxNksgc2htIGNpcmN1bGFyIGJ1ZmZlci4KKyMgWW91IGNvdWxkIHVzZSBgbG9ncmVhZCcgdG8gcmVhZCBpdC4KKworIyBBbGwgYXZhaWxhYmxlIG9wdGlvbnMgYXJlOgorIyAtTyBGSUxFICAgICAgIDogICAgICBMb2cgdG8gRklMRSAoZGVmYXVsdDovdmFyL2xvZy9tZXNzYWdlcykKKyMgLWwgTiAgICAgICAgICA6ICAgICAgTG9nIG9ubHkgbWVzc2FnZXMgbW9yZSB1cmdlbnQgdGhhbiBwcmlvIE4gKDEtOCkKKyMgLVMgICAgICAgICAgICA6ICAgICAgU21hbGxlciBvdXRwdXQKKyMgLXMgU0laRSAgICAgICA6ICAgICAgTWF4IHNpemUgKEtCKSBiZWZvcmUgcm90YXRpb24gKGRlZmF1bHQ6MjAwS0IsIDA9b2ZmKQorIyAtYiBOICAgICAgICAgIDogICAgICBOIHJvdGF0ZWQgbG9ncyB0byBrZWVwIChkZWZhdWx0OjEsIG1heD05OSwgMD1wdXJnZSkKKyMgLVIgSE9TVFs6UE9SVF06ICAgICAgTG9nIHRvIEhPU1Q6UE9SVCAoZGVmYXVsdCBQT1JUOjUxNCkKKyMgLUwgICAgICAgICAgICA6ICAgICAgTG9nIGxvY2FsbHkgYW5kIHZpYSBuZXR3b3JrCisjIC1EICAgICAgICAgICAgOiAgICAgIERyb3AgZHVwbGljYXRlcworIyAtQ1tzaXplX2tiXSAgIDogICAgICBMb2cgdG8gc2hhcmVkIG1lbSBidWZmZXIgKHVzZSBsb2dyZWFkIHRvIHJlYWQgaXQpCisjIC1mIEZJTEUgICAgICAgOiAgICAgIFVzZSBGSUxFIGFzIGNvbmZpZyAoZGVmYXVsdDovZXRjL3N5c2xvZy5jb25mKQorIyAtbSBNSU4gICAgICAgIDogICAgICBNaW51dGVzIGJldHdlZW4gbWFyayBsaW5lcyAoZGVmYXVsdDoyMCwgMD1vZmYpCisjIC1LICAgICAgICAgICAgOiAgICAgIExvZyB0byBrZXJuZWwgcHJpbnRrIGJ1ZmZlciAodXNlIGRtZXNnIHRvIHJlYWQgaXQpCisKKyMgRXhhbXBsZSAxOgorIyBMb2cgdG8gbG9jYWwgZmlsZSAvdmFyL2xvZy9teWxvZworIyBPUFRJT05TPSItTyAvdmFyL2xvZy9teWxvZyIKKyMKKyMgRXhhbXBsZSAyOgorIyBMb2cgdG8gcmVtb3RlIGhvc3QKKyMgT1BUSU9OUz0iLVIgMTkyLjE2OC4xLjE6NjAxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtc3lzbG9nLnNlcnZpY2UuaW4gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC1zeXNsb2cuc2VydmljZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTA0MzIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtc3lzbG9nLnNlcnZpY2UuaW4KQEAgLTAsMCArMSwxMyBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1TeXN0ZW0gTG9nZ2luZyBTZXJ2aWNlCitXYW50cz1idXN5Ym94LWtsb2dkLnNlcnZpY2UKKworW1NlcnZpY2VdCitFbnZpcm9ubWVudEZpbGU9LS9ldGMvZGVmYXVsdC9idXN5Ym94LXN5c2xvZworRXhlY1N0YXJ0PUBiYXNlX3NiaW5kaXJAL3N5c2xvZ2QgLW4gJE9QVElPTlMKK1NvY2tldHM9c3lzbG9nLnNvY2tldAorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CitBbHNvPWJ1c3lib3gta2xvZ2Quc2VydmljZQorQWxpYXM9c3lzbG9nLnNlcnZpY2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LXVkaGNwZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LXVkaGNwZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNDM5MDNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtdWRoY3BkCkBAIC0wLDAgKzEsNDMgQEAKKyMhL2Jpbi9zaAorREFFTU9OPS91c3Ivc2Jpbi91ZGhjcGQKK05BTUU9dWRoY3BkCitERVNDPSJCdXN5Ym94IFVESENQIFNlcnZlciIKK0FSR1M9Ii9ldGMvdWRoY3BkLmNvbmYiCisKK3Rlc3QgLWYgJERBRU1PTiB8fCBleGl0IDEKKworc2V0IC1lCisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorICAgICAgICBlY2hvIC1uICJzdGFydGluZyAkREVTQzogJE5BTUUuLi4gIgorCWlmIFsgISAtZiAvZXRjL3VkaGNwZC5jb25mIF07IHRoZW4KKwkJZWNobyAiZXJyb3I6IC9ldGMvdWRoY3BkLmNvbmYgaXMgbWlzc2luZy4iCisJCWV4aXQgMQorCWZpCisJL3NiaW4vc3RhcnQtc3RvcC1kYWVtb24gLVMgLWIgLW4gJE5BTUUgLWEgJERBRU1PTiAtLSAkQVJHUworCWVjaG8gImRvbmUuIgorCTs7CisgICAgc3RvcCkKKyAgICAgICAgZWNobyAtbiAic3RvcHBpbmcgJERFU0M6ICROQU1FLi4uICIKKwkvc2Jpbi9zdGFydC1zdG9wLWRhZW1vbiAtSyAtbiAkTkFNRQorCWVjaG8gImRvbmUuIgorCTs7CisgICAgcmVzdGFydCkKKyAgICAgICAgZWNobyAicmVzdGFydGluZyAkREVTQzogJE5BTUUuLi4gIgorIAkkMCBzdG9wCisJJDAgc3RhcnQKKwllY2hvICJkb25lLiIKKwk7OworICAgIHJlbG9hZCkKKyAgICAJZWNobyAtbiAicmVsb2FkaW5nICRERVNDOiAkTkFNRS4uLiAiCisgICAgCWtpbGxhbGwgLUhVUCAkKGJhc2VuYW1lICR7REFFTU9OfSkKKwllY2hvICJkb25lLiIKKwk7OworICAgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHJlc3RhcnR8cmVsb2FkfSIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9kZWZhdWx0LnNjcmlwdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9kZWZhdWx0LnNjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmFjOTg3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2RlZmF1bHQuc2NyaXB0CkBAIC0wLDAgKzEsNCBAQAorIyEvYmluL3NoCisKK2V4ZWMgcnVuLXBhcnRzIC1hICIkMSIgL2V0Yy91ZGhjcGMuZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvZmluZC10b3VjaHNjcmVlbi5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9maW5kLXRvdWNoc2NyZWVuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYzVlN2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvZmluZC10b3VjaHNjcmVlbi5zaApAQCAtMCwwICsxLDYgQEAKKyMhL2Jpbi9zaAorCitpZiBncmVwIC1xICJpbnB1dDouKi1lMC4qLDMsLiphMCwxLFx8YWRzNzg0NiIgL3N5cy9jbGFzcy8kTURFVi9kZXZpY2UvbW9kYWxpYXMgOyB0aGVuCisJbG4gLXNmIC9kZXYvJE1ERVYgL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAKK2ZpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9od2Nsb2NrLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2h3Y2xvY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1Zjk0ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9od2Nsb2NrLnNoCkBAIC0wLDAgKzEsODMgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgaHdjbG9jaworIyBSZXF1aXJlZC1TdGFydDogICAgCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbG9jYWxfZnMKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogU2V0IHN5c3RlbSBjbG9jaworIyBEZXNjcmlwdGlvbjogICAgICAgU2V0IHN5c3RlbSBjbG9jayB0byBoYXJkd2FyZSBjbG9jaywgYWNjb3JkaW5nIHRvIHRoZSBVVEMKKyMgICAgICAgICAgICAgICAgICAgIHNldHRpbmcgaW4gL2V0Yy9kZWZhdWx0L3JjUyAoc2VlIGFsc28gcmNTKDUpKS4KKyMjIyBFTkQgSU5JVCBJTkZPCisjCisjIFdBUk5JTkc6ICAgICAgSWYgeW91ciBoYXJkd2FyZSBjbG9jayBpcyBub3QgaW4gVVRDL0dNVCwgdGhpcyBzY3JpcHQKKyMgICAgICAgICAgICAgICBtdXN0IGtub3cgdGhlIGxvY2FsIHRpbWUgem9uZS4gVGhpcyBpbmZvcm1hdGlvbiBpcworIyAgICAgICAgICAgICAgIHN0b3JlZCBpbiAvZXRjL2xvY2FsdGltZS4gVGhpcyBtaWdodCBiZSBhIHByb2JsZW0gaWYKKyMgICAgICAgICAgICAgICB5b3VyIC9ldGMvbG9jYWx0aW1lIGlzIGEgc3ltbGluayB0byBzb21ldGhpbmcgaW4KKyMgICAgICAgICAgICAgICAvdXNyL3NoYXJlL3pvbmVpbmZvIEFORCAvdXNyIGlzbid0IGluIHRoZSByb290CisjICAgICAgICAgICAgICAgcGFydGl0aW9uISBUaGUgd29ya2Fyb3VuZCBpcyB0byBkZWZpbmUgVFogZWl0aGVyCisjICAgICAgICAgICAgICAgaW4gL2V0Yy9kZWZhdWx0L3JjUywgb3IgaW4gdGhlIHByb3BlciBwbGFjZSBiZWxvdy4KKworWyAhIC14IC9zYmluL2h3Y2xvY2sgXSAmJiBleGl0IDAKKworWyAtZiAvZXRjL2RlZmF1bHQvcmNTIF0gJiYgLiAvZXRjL2RlZmF1bHQvcmNTCisKK1sgIiRVVEMiID0gInllcyIgXSAmJiB0ej0iLS11dGMiIHx8IHR6PSItLWxvY2FsdGltZSIKK2Nhc2UgIiQxIiBpbgorICAgICAgICBzdGFydCkKKyAgICAgICAgICAgICAgICBpZiBbICIkVkVSQk9TRSIgIT0gbm8gXQorICAgICAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlN5c3RlbSB0aW1lIHdhcyBgZGF0ZWAuIgorICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiU2V0dGluZyB0aGUgU3lzdGVtIENsb2NrIHVzaW5nIHRoZSBIYXJkd2FyZSBDbG9jayBhcyByZWZlcmVuY2UuLi4iCisgICAgICAgICAgICAgICAgZmkKKworCQlpZiBbICIkSFdDTE9DS0FDQ0VTUyIgIT0gbm8gXQorCQl0aGVuCisJCQlpZiBbIC16ICIkVFoiIF0KKwkJCXRoZW4KKwkgICAgICAgICAgICAgICAgICAgaHdjbG9jayAkdHogLS1oY3Rvc3lzCisJCQllbHNlCisJCQkgICBUWj0iJFRaIiBod2Nsb2NrICR0eiAtLWhjdG9zeXMKKwkJCWZpCisJCWZpCisKKyAgICAgICAgICAgICAgICBpZiBbICIkVkVSQk9TRSIgIT0gbm8gXQorICAgICAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlN5c3RlbSBDbG9jayBzZXQuIFN5c3RlbSBsb2NhbCB0aW1lIGlzIG5vdyBgZGF0ZWAuIgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgc3RvcHxyZXN0YXJ0fHJlbG9hZHxmb3JjZS1yZWxvYWQpCisJCSMKKwkJIyBVcGRhdGVzIHRoZSBIYXJkd2FyZSBDbG9jayB3aXRoIHRoZSBTeXN0ZW0gQ2xvY2sgdGltZS4KKwkJIyBUaGlzIHdpbGwgKm92ZXJyaWRlKiBhbnkgY2hhbmdlcyBtYWRlIHRvIHRoZSBIYXJkd2FyZSBDbG9jay4KKwkJIworCQkjIFdBUk5JTkc6IElmIHlvdSBkaXNhYmxlIHRoaXMsIGFueSBjaGFuZ2VzIHRvIHRoZSBzeXN0ZW0KKwkJIyAgICAgICAgICBjbG9jayB3aWxsIG5vdCBiZSBjYXJyaWVkIGFjcm9zcyByZWJvb3RzLgorCQkjCisJCWlmIFsgIiRWRVJCT1NFIiAhPSBubyBdCisJCXRoZW4KKwkJCWVjaG8gIlNhdmluZyB0aGUgU3lzdGVtIENsb2NrIHRpbWUgdG8gdGhlIEhhcmR3YXJlIENsb2NrLi4uIgorCQlmaQorCQlpZiBbICIkSFdDTE9DS0FDQ0VTUyIgIT0gbm8gXQorCQl0aGVuCisJCQlod2Nsb2NrICR0eiAtLXN5c3RvaGMKKwkJZmkKKwkJaWYgWyAiJFZFUkJPU0UiICE9IG5vIF0KKwkJdGhlbgorCQkJZWNobyAiSGFyZHdhcmUgQ2xvY2sgdXBkYXRlZCB0byBgZGF0ZWAuIgorCQlmaQorICAgICAgICAgICAgICAgIGV4aXQgMAorICAgICAgICAgICAgICAgIDs7CisJc2hvdykKKwkJaWYgWyAiJEhXQ0xPQ0tBQ0NFU1MiICE9IG5vIF0KKwkJdGhlbgorCQkJaHdjbG9jayAkdHogLS1zaG93CisJCWZpCisJCTs7CisgICAgICAgICopCisgICAgICAgICAgICAgICAgZWNobyAiVXNhZ2U6IGh3Y2xvY2suc2gge3N0YXJ0fHN0b3B8c2hvd3xyZWxvYWR8cmVzdGFydH0iID4mMgorCQllY2hvICIgICAgICAgc3RhcnQgc2V0cyBrZXJuZWwgKHN5c3RlbSkgY2xvY2sgZnJvbSBoYXJkd2FyZSAoUlRDKSBjbG9jayIgPiYyCisJCWVjaG8gIiAgICAgICBzdG9wIGFuZCByZWxvYWQgc2V0IGhhcmR3YXJlIChSVEMpIGNsb2NrIGZyb20ga2VybmVsIChzeXN0ZW0pIGNsb2NrIiA+JjIKKyAgICAgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgICAgICAgICA7OworZXNhYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2luZXRkIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2luZXRkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNTBiY2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvaW5ldGQKQEAgLTAsMCArMSwzMyBAQAorIyEvYmluL3NoCisjCisjIHN0YXJ0L3N0b3AgaW5ldGQgc3VwZXIgc2VydmVyLgorCitpZiAhIFsgLXggL3Vzci9zYmluL2luZXRkIF07IHRoZW4KKwlleGl0IDAKK2ZpCisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorCWVjaG8gLW4gIlN0YXJ0aW5nIGludGVybmV0IHN1cGVyc2VydmVyOiIKKwllY2hvIC1uICIgaW5ldGQiIDsgc3RhcnQtc3RvcC1kYWVtb24gLVMgLXggL3Vzci9zYmluL2luZXRkID4gL2Rldi9udWxsCisJZWNobyAiLiIKKwk7OworICAgIHN0b3ApCisJZWNobyAtbiAiU3RvcHBpbmcgaW50ZXJuZXQgc3VwZXJzZXJ2ZXI6IgorCWVjaG8gLW4gIiBpbmV0ZCIgOyBzdGFydC1zdG9wLWRhZW1vbiAtSyAteCAvdXNyL3NiaW4vaW5ldGQgPiAvZGV2L251bGwKKwllY2hvICIuIgorCTs7CisgICAgcmVzdGFydCkKKwllY2hvIC1uICJSZXN0YXJ0aW5nIGludGVybmV0IHN1cGVyc2VydmVyOiIKKwllY2hvIC1uICIgaW5ldGQgIgorCWtpbGxhbGwgLUhVUCBpbmV0ZAorCWVjaG8gIi4iCisJOzsKKyAgICAqKQorCWVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9pbmV0ZCB7c3RhcnR8c3RvcHxyZXN0YXJ0fSIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2luZXRkLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvaW5ldGQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDJmZTg1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2luZXRkLmNvbmYKQEAgLTAsMCArMSwyMCBAQAorIyAvZXRjL2luZXRkLmNvbmY6ICBzZWUgaW5ldGQoOCkgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb25zLgorIworIyBJbnRlcm5ldCBzZXJ2ZXIgY29uZmlndXJhdGlvbiBkYXRhYmFzZQorIworIyBJZiB5b3Ugd2FudCB0byBkaXNhYmxlIGFuIGVudHJ5IHNvIGl0IGlzbid0IHRvdWNoZWQgZHVyaW5nCisjIHBhY2thZ2UgdXBkYXRlcyBqdXN0IGNvbW1lbnQgaXQgb3V0IHdpdGggYSBzaW5nbGUgJyMnIGNoYXJhY3Rlci4KKyMKKyMgPHNlcnZpY2VfbmFtZT4gPHNvY2tfdHlwZT4gPHByb3RvPiA8ZmxhZ3M+IDx1c2VyPiA8c2VydmVyX3BhdGg+IDxhcmdzPgorIworIzpJTlRFUk5BTDogSW50ZXJuYWwgc2VydmljZXMKKyNlY2hvCQlzdHJlYW0JdGNwCW5vd2FpdAlyb290CWludGVybmFsCisjZWNobwkJZGdyYW0JdWRwCXdhaXQJcm9vdAlpbnRlcm5hbAorI2NoYXJnZW4Jc3RyZWFtCXRjcAlub3dhaXQJcm9vdAlpbnRlcm5hbAorI2NoYXJnZW4JZGdyYW0JdWRwCXdhaXQJcm9vdAlpbnRlcm5hbAorI2Rpc2NhcmQJCXN0cmVhbQl0Y3AJbm93YWl0CXJvb3QJaW50ZXJuYWwKKyNkaXNjYXJkCQlkZ3JhbQl1ZHAJd2FpdAlyb290CWludGVybmFsCisjZGF5dGltZQkJc3RyZWFtCXRjcAlub3dhaXQJcm9vdAlpbnRlcm5hbAorI2RheXRpbWUJZGdyYW0JdWRwCXdhaXQJcm9vdAlpbnRlcm5hbAorI3RpbWUJCXN0cmVhbQl0Y3AJbm93YWl0CXJvb3QJaW50ZXJuYWwKKyN0aW1lCQlkZ3JhbQl1ZHAJd2FpdAlyb290CWludGVybmFsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9tZGV2Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk2MjUyNDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldgpAQCAtMCwwICsxLDE5IEBACisjIS9iaW4vc2gKKworbW91bnQgLXQgdG1wZnMgdG1wZnMgL2RldiAgLW8gc2l6ZT02NGssbW9kZT0wNzU1Citta2RpciAvZGV2L3B0cyAvZGV2L3NobQorY2htb2QgNzc3IC9kZXYvc2htCittb3VudCAtdCBkZXZwdHMgZGV2cHRzIC9kZXYvcHRzCit0b3VjaCAvZGV2L21kZXYuc2VxCitlY2hvICIvc2Jpbi9tZGV2IiA+IC9wcm9jL3N5cy9rZXJuZWwvaG90cGx1ZworbWRldiAtcworCisjCisjIFdlIG1pZ2h0IGhhdmUgbW91bnRlZCBzb21ldGhpbmcgb3ZlciAvZGV2LCBzZWUgaWYgL2Rldi9pbml0Y3RsIGlzIHRoZXJlLgorIworaWYgdGVzdCAhIC1wIC9kZXYvaW5pdGN0bAordGhlbgorICAgICAgICBybSAtZiAvZGV2L2luaXRjdGwKKyAgICAgICAgbWtub2QgLW0gNjAwIC9kZXYvaW5pdGN0bCBwCitmaQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldi1tb3VudC5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9tZGV2LW1vdW50LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZDY2ZDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldi1tb3VudC5zaApAQCAtMCwwICsxLDYzIEBACisjIS9iaW4vc2gKK01ERVZfQVVUT01PVU5UPXkKK01ERVZfQVVUT01PVU5UX1JPT1Q9L3J1bi9tZWRpYQorWyAtZiAvZXRjL2RlZmF1bHQvbWRldiBdICYmIC4gL2V0Yy9kZWZhdWx0L21kZXYKK2lmIFsgIiR7TURFVl9BVVRPTU9VTlR9IiA9ICJuIiBdIDsgdGhlbgorCWV4aXQgMAorZmkKKworY2FzZSAiJEFDVElPTiIgaW4KKwlhZGR8IiIpCisJCUFDVElPTj0iYWRkIgorCQkjIGNoZWNrIGlmIGFscmVhZHkgbW91bnRlZAorCQlpZiBncmVwIC1xICJeL2Rldi8ke01ERVZ9ICIgL3Byb2MvbW91bnRzIDsgdGhlbgorCQkJIyBBbHJlYWR5IG1vdW50ZWQKKwkJCWV4aXQgMAorCQlmaQorCQlERVZCQVNFPWBleHByIHN1YnN0ciAkTURFViAxIDNgCisJCWlmIFsgIiR7REVWQkFTRX0iID09ICJtbWMiIF0gOyB0aGVuCisJCQlERVZCQVNFPWBleHByIHN1YnN0ciAkTURFViAxIDdgCisJCWZpCisJCSMgY2hlY2sgZm9yICJwbGVhc2UgZG9uJ3QgbW91bnQgaXQiIGZpbGUKKwkJaWYgWyAtZiAiL2Rldi9ub21vdW50LiR7REVWQkFTRX0iIF0gOyB0aGVuCisJCQkjIGJsb2NrZWQKKwkJCWV4aXQgMAorCQlmaQorCQkjIGNoZWNrIGZvciBmdWxsLWRpc2sgcGFydGl0aW9uCisJCWlmIFsgIiR7REVWQkFTRX0iID09ICIke01ERVZ9IiBdIDsgdGhlbgorCQkJaWYgWyAtZCAvc3lzL2Jsb2NrLyR7REVWQkFTRX0vJHtERVZCQVNFfSoxIF0gOyB0aGVuCisJCQkJIyBQYXJ0aXRpb24gZGV0ZWN0ZWQsIGp1c3QgcXVpdAorCQkJCWV4aXQgMAorCQkJZmkKKwkJCWlmIFsgISAtZiAvc3lzL2Jsb2NrLyR7REVWQkFTRX0vc2l6ZSBdIDsgdGhlbgorCQkJCSMgTm8gc2l6ZSBhdCBhbGwKKwkJCQlleGl0IDAKKwkJCWZpCisJCQlpZiBbIGBjYXQgL3N5cy9ibG9jay8ke0RFVkJBU0V9L3NpemVgID09IDAgXSA7IHRoZW4KKwkJCQkjIGVtcHR5IGRldmljZSwgYmFpbCBvdXQKKwkJCQlleGl0IDAKKwkJCWZpCisJCWZpCisJCSMgZmlyc3QgYWxsb3cgZnN0YWIgdG8gZGV0ZXJtaW5lIHRoZSBtb3VudHBvaW50CisJCWlmICEgbW91bnQgL2Rldi8kTURFViA+IC9kZXYvbnVsbCAyPiYxCisJCXRoZW4KKwkJCU1PVU5UUE9JTlQ9IiR7TURFVl9BVVRPTU9VTlRfUk9PVH0vJE1ERVYiCisJCQlta2RpciAiJE1PVU5UUE9JTlQiCisJCQltb3VudCAtdCBhdXRvIC9kZXYvJE1ERVYgIiRNT1VOVFBPSU5UIgorCQlmaQorCQk7OworCXJlbW92ZSkKKwkJTU9VTlRQT0lOVD1gZ3JlcCAiXi9kZXYvJE1ERVZccyIgL3Byb2MvbW91bnRzIHwgY3V0IC1kJyAnIC1mIDJgCisJCWlmIFsgISAteiAiJE1PVU5UUE9JTlQiIF0KKwkJdGhlbgorCQkJdW1vdW50ICIkTU9VTlRQT0lOVCIKKwkJCXJtZGlyICIkTU9VTlRQT0lOVCIKKwkJZWxzZQorCQkJdW1vdW50IC9kZXYvJE1ERVYKKwkJZmkKKwkJOzsKKwkqKQorCQkjIFVuZXhwZWN0ZWQga2V5d29yZAorCQlleGl0IDEKKwkJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9tZGV2LmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldi5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZTkzZGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldi5jb25mCkBAIC0wLDAgKzEsNDIgQEAKKyRNT0RBTElBUz0uKiAwOjAgNjYwIEBtb2Rwcm9iZSAiJE1PREFMSUFTIgorCitjb25zb2xlIDA6MCAwNjAwIAorY3B1X2RtYV9sYXRlbmN5IDA6MCAwNjYwIAorZmIwOjAgNDQgMDY2MCAKK2Z1bGwgMDowIDA2NjYgCitpbml0Y3RsIDA6MCAwNjAwIAoraXJjb21tWzAtOV0uKiAwOjIwIDA2NjAgCitrbWVtIDA6MTUgMDY0MCAKK2ttc2cgMDowIDA2NjAgCitsb2cgMDowIDA2NjYgCitsb29wWzAtOV0uKiAwOjYgMDY0MCAKK21lbSAwOjE1IDA2NDAgCituZXR3b3JrX2xhdGVuY3kgMDowIDA2NjAgCituZXR3b3JrX3Rocm91Z2hwdXQgMDowIDA2NjAgCitudWxsIDA6MCAwNjY2IAorcG9ydCAwOjE1IDA2NDAgCitwdG14IDA6NSAwNjY2IAorcmFtWzAtOV0uKiAwOjYgMDY0MCAKK3JhbmRvbSAwOjAgMDY2NiAKK3NkYSAwOjYgMDY0MCAKK3R0eSAwOjUgMDY2NiAKK3R0eS4qIDA6MCAwNjIwIAordXJhbmRvbSAwOjAgMDY2NiAKK3VzYmRldi4qIDA6MCAwNjYwICovZXRjL21kZXYvdXNiLnNoCit2Y3MuKiAwOjUgMDY2MCAKK3plcm8gMDowIDA2NjYgCisgCitzbmQvcGNtLiogMDowIDA2NjAKK3NuZC9jb250cm9sLiogMDowIDA2NjAKK3NuZC90aW1lciAwOjAgMDY2MAorc25kL3NlcSAwOjAgMDY2MAorc25kL21pbmkuKiAwOjAwIDA2NjAKKworaW5wdXQvZXZlbnQuKiAwOjAgMDY2MCBAL2V0Yy9tZGV2L2ZpbmQtdG91Y2hzY3JlZW4uc2gKK2lucHV0L21pY2UgMDowIDA2NjAKK2lucHV0L21vdXNlLiogMDowIDA2NjAKKwordHVuWzAtOV0qIDA6MCAwNjYwID1uZXQvCisKK1toc11kW2Etel1bMC05XT8gMDowIDY2MCAqL2V0Yy9tZGV2L21kZXYtbW91bnQuc2gKK21tY2Jsa1swLTldLiogMDowIDY2MCAqL2V0Yy9tZGV2L21kZXYtbW91bnQuc2gKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9tb3VudC5idXN5Ym94IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL21vdW50LmJ1c3lib3gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmVmOTQ1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9tb3VudC5idXN5Ym94CkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKK2V4ZWMgL2Jpbi9idXN5Ym94IG1vdW50ICRACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjA4YThlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3J1bi1wdGVzdApAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9zaAorCitjdXJyZW50X2Rpcj0kKHJlYWRsaW5rIC1mICQwKQorZXhwb3J0IGJpbmRpcj0kKGRpcm5hbWUgJGN1cnJlbnRfZGlyKQorCitjZCB0ZXN0c3VpdGUgfHwgZXhpdCAxCisuL3J1bnRlc3QgLXYgfCBzZWQgLXIgJ3MvXihTS0lQUEVEfFVOVEVTVEVEKTovU0tJUDovJwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3NpbXBsZS5zY3JpcHQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc2ltcGxlLnNjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjE2OGIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3NpbXBsZS5zY3JpcHQKQEAgLTAsMCArMSw4OCBAQAorIyEvYmluL3NoCisKKyMgdWRoY3BjIHNjcmlwdCBlZGl0ZWQgYnkgVGltIFJpa2VyIDxUaW1AUmlrZXJzLm9yZz4KKworWyAteiAiJDEiIF0gJiYgZWNobyAiRXJyb3I6IHNob3VsZCBiZSBjYWxsZWQgZnJvbSB1ZGhjcGMiICYmIGV4aXQgMQorCitSRVNPTFZfQ09ORj0iL2V0Yy9yZXNvbHYuY29uZiIKK1sgLW4gIiRzdWJuZXQiIF0gJiYgTkVUTUFTSz0ibmV0bWFzayAkc3VibmV0IgorCisjIHJldHVybiAwIGlmIHJvb3QgaXMgbW91bnRlZCBvbiBhIG5ldHdvcmsgZmlsZXN5c3RlbQorcm9vdF9pc19uZnMoKSB7CisJc2VkIC1uICdzL15bXiBdKiBcKFteIF0qXCkgXChbXiBdKlwpIC4qJC9cMSBcMi9wJyAvcHJvYy9tb3VudHMgfAorCWdyZXAgLXEgIl4vIFwobmZzXHxzbWJmc1x8bmNwXHxjb2RhXCkkIgorfQorCitoYXZlX2Jpbl9pcD0wCitpZiBbIC14IC9zYmluL2lwIF07IHRoZW4KKyAgaGF2ZV9iaW5faXA9MQorICBCUk9BRENBU1Q9ImJyb2FkY2FzdCArIgorZmkKKworWyAtbiAiJGJyb2FkY2FzdCIgXSAmJiBCUk9BRENBU1Q9ImJyb2FkY2FzdCAkYnJvYWRjYXN0IgorCitjYXNlICIkMSIgaW4KKwlkZWNvbmZpZykKKwkJaWYgWyAteCAvc2Jpbi9yZXNvbHZjb25mIF07IHRoZW4KKwkJCS9zYmluL3Jlc29sdmNvbmYgLWQgIiR7aW50ZXJmYWNlfS51ZGhjcGMiCisJCWZpCisJCWlmICEgcm9vdF9pc19uZnMgOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBbICRoYXZlX2Jpbl9pcCAtZXEgMSBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwIGFkZHIgZmx1c2ggZGV2ICRpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXAgbGluayBzZXQgZGV2ICRpbnRlcmZhY2UgdXAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL3NiaW4vaWZjb25maWcgJGludGVyZmFjZSAwLjAuMC4wCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorCQlmaQorCQk7OworCisJcmVuZXd8Ym91bmQpCisgICAgICAgICAgICAgICAgaWYgWyAkaGF2ZV9iaW5faXAgLWVxIDEgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaXAgYWRkciBhZGQgZGV2ICRpbnRlcmZhY2UgbG9jYWwgJGlwLyRtYXNrICRCUk9BRENBU1QKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAvc2Jpbi9pZmNvbmZpZyAkaW50ZXJmYWNlICRpcCAkQlJPQURDQVNUICRORVRNQVNLCisgICAgICAgICAgICAgICAgZmkKKworCQlpZiBbIC1uICIkcm91dGVyIiBdIDsgdGhlbgorCQkJaWYgISByb290X2lzX25mcyA7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgWyAkaGF2ZV9iaW5faXAgLWVxIDEgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIGlwIHJvdXRlIGRlbCBkZWZhdWx0IGRldiAkaW50ZXJmYWNlIDI+L2Rldi9udWxsIDsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSByb3V0ZSBkZWwgZGVmYXVsdCBndyAwLjAuMC4wIGRldiAkaW50ZXJmYWNlIDI+L2Rldi9udWxsIDsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisJCQlmaQorCisJCQltZXRyaWM9MTAKKwkJCWZvciBpIGluICRyb3V0ZXIgOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBbICRoYXZlX2Jpbl9pcCAtZXEgMSBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXAgcm91dGUgYWRkIGRlZmF1bHQgdmlhICRpIG1ldHJpYyAkbWV0cmljCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZSBhZGQgZGVmYXVsdCBndyAkaSBkZXYgJGludGVyZmFjZSBtZXRyaWMgJG1ldHJpYyAyPi9kZXYvbnVsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWM9JCgoJG1ldHJpYyArIDEpKQorCQkJZG9uZQorCQlmaQorCisJCSMgVXBkYXRlIHJlc29sdmVyIGNvbmZpZ3VyYXRpb24gZmlsZQorCQlSPSIiCisJCVsgLW4gIiRkb21haW4iIF0gJiYgUj0iZG9tYWluICRkb21haW4KKyIKKwkJZm9yIGkgaW4gJGRuczsgZG8KKwkJCWVjaG8gIiQwOiBBZGRpbmcgRE5TICRpIgorCQkJUj0iJHtSfW5hbWVzZXJ2ZXIgJGkKKyIKKwkJZG9uZQorCisJCWlmIFsgLXggL3NiaW4vcmVzb2x2Y29uZiBdOyB0aGVuCisJCQllY2hvIC1uICIkUiIgfCAvc2Jpbi9yZXNvbHZjb25mIC1hICIke2ludGVyZmFjZX0udWRoY3BjIgorCQllbHNlCisJCQllY2hvIC1uICIkUiIgPiAiJFJFU09MVl9DT05GIgorCQlmaQorCQk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9zeXNsb2cgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc3lzbG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YzRkMTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc3lzbG9nCkBAIC0wLDAgKzEsNzcgQEAKKyMhIC9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgICAgIHN5c2tsb2dkCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAgICAkcmVtb3RlX2ZzICR0aW1lCisjIFJlcXVpcmVkLVN0b3A6ICAgICAgICAkcmVtb3RlX2ZzICR0aW1lCisjIERlZmF1bHQtU3RhcnQ6ICAgICAgICAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAgICAwIDEgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogICAgU3lzdGVtIGxvZ2dlcgorIyMjIEVORCBJTklUIElORk8KKworc2V0IC1lCisKK2lmIFsgLWYgL2V0Yy9zeXNsb2ctc3RhcnR1cC5jb25mIF07IHRoZW4KKwkuIC9ldGMvc3lzbG9nLXN0YXJ0dXAuY29uZgorCUxPR19MT0NBTD0wCisJTE9HX1JFTU9URT0wCisJZm9yIEQgaW4gJERFU1RJTkFUSU9OOyBkbworCQlpZiBbICIkRCIgPSAiYnVmZmVyIiBdOyB0aGVuCisJCQlTWVNMT0dfQVJHUz0iJFNZU0xPR19BUkdTIC1DJEJVRkZFUlNJWkUiCisJCQlMT0dfTE9DQUw9MQorCQllbGlmIFsgIiREIiA9ICJmaWxlIiBdOyB0aGVuCisJCQlpZiBbIC1uICIkTE9HRklMRSIgXTsgdGhlbgorCQkJCVNZU0xPR19BUkdTPSIkU1lTTE9HX0FSR1MgLU8gJExPR0ZJTEUiCisJCQlmaQorCQkJaWYgWyAtbiAiJFJPVEFURVNJWkUiIF07IHRoZW4KKwkJCQlTWVNMT0dfQVJHUz0iJFNZU0xPR19BUkdTIC1zICRST1RBVEVTSVpFIgorCQkJZmkKKwkJCWlmIFsgLW4gIiRST1RBVEVHRU5TIiBdOyB0aGVuCisJCQkJU1lTTE9HX0FSR1M9IiRTWVNMT0dfQVJHUyAtYiAkUk9UQVRFR0VOUyIKKwkJCWZpCisJCQlMT0dfTE9DQUw9MQorCQllbGlmIFsgIiREIiA9ICJyZW1vdGUiIF07IHRoZW4KKwkJCVNZU0xPR19BUkdTPSIkU1lTTE9HX0FSR1MgLVIgJFJFTU9URSIKKwkJCUxPR19SRU1PVEU9MQorCQlmaQorCWRvbmUKKwlpZiBbICIkTE9HX0xPQ0FMIiA9ICIxIiAtYSAiJExPR19SRU1PVEUiID0gIjEiIF07IHRoZW4KKwkJU1lTTE9HX0FSR1M9IiRTWVNMT0dfQVJHUyAtTCIKKwlmaQorCWlmIFsgIiRSRURVQ0UiID0gInllcyIgXTsgdGhlbgorCQlTWVNMT0dfQVJHUz0iJFNZU0xPR19BUkdTIC1TIgorCWZpCisJaWYgWyAiJERST1BEVVBMSUNBVEVTIiA9ICJ5ZXMiIF07IHRoZW4KKwkgICAgU1lTTE9HX0FSR1M9IiRTWVNMT0dfQVJHUyAtRCIKKwlmaQorCWlmIFsgLW4gIiRMT0dMRVZFTCIgXTsgdGhlbgorCSAgICBTWVNMT0dfQVJHUz0iJFNZU0xPR19BUkdTIC1sICRMT0dMRVZFTCIKKwlmaQorZWxzZQorCSMgZGVmYXVsdDogbG9nIHRvIDE2SyBzaG0gY2lyY3VsYXIgYnVmZmVyCisJU1lTTE9HX0FSR1M9Ii1DIgorZmkKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWVjaG8gLW4gIlN0YXJ0aW5nIHN5c2xvZ2Qva2xvZ2Q6ICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAtYiAtbiBzeXNsb2dkIC1hIC9zYmluL3N5c2xvZ2QgLS0gLW4gJFNZU0xPR19BUkdTCisJc3RhcnQtc3RvcC1kYWVtb24gLVMgLWIgLW4ga2xvZ2QgLWEgL3NiaW4va2xvZ2QgLS0gLW4KKwllY2hvICJkb25lIgorCTs7CisgIHN0b3ApCisJZWNobyAtbiAiU3RvcHBpbmcgc3lzbG9nZC9rbG9nZDogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC1uIHN5c2xvZ2QKKwlzdGFydC1zdG9wLWRhZW1vbiAtSyAtbiBrbG9nZAorCWVjaG8gImRvbmUiCisJOzsKKyAgcmVzdGFydCkKKyAgCSQwIHN0b3AKKwkkMCBzdGFydAorCTs7CisgICopCisJZWNobyAiVXNhZ2U6IHN5c2xvZyB7IHN0YXJ0IHwgc3RvcCB8IHJlc3RhcnQgfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc3lzbG9nLXN0YXJ0dXAuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9zeXNsb2ctc3RhcnR1cC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYTQ1MGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc3lzbG9nLXN0YXJ0dXAuY29uZgpAQCAtMCwwICsxLDEzIEBACisjIFRoaXMgY29uZmlndXJhdGlvbiBmaWxlIGlzIHVzZWQgYnkgdGhlIGJ1c3lib3ggc3lzbG9nIGluaXQgc2NyaXB0LAorIyAvZXRjL2luaXQuZC9zeXNsb2dbLmJ1c3lib3hdIHRvIHNldCBzeXNsb2cgY29uZmlndXJhdGlvbiBhdCBzdGFydCB0aW1lLgorCitERVNUSU5BVElPTj1maWxlCQkjIGxvZyBkZXN0aW5hdGlvbnMgKGJ1ZmZlciBmaWxlIHJlbW90ZSkKK0xPR0ZJTEU9L3Zhci9sb2cvbWVzc2FnZXMJIyB3aGVyZSB0byBsb2cgKGZpbGUpCitSRU1PVEU9bG9naG9zdDo1MTQJCSMgd2hlcmUgdG8gbG9nIChzeXNsb2cgcmVtb3RlKQorUkVEVUNFPW5vCQkJIyByZWR1Y2Utc2l6ZSBsb2dnaW5nCitEUk9QRFVQTElDQVRFUz1ubwkJIyB3aGV0aGVyIHRvIGRyb3AgZHVwbGljYXRlIGxvZyBlbnRyaWVzCisjUk9UQVRFU0laRT0wCQkJIyByb3RhdGUgbG9nIGlmIGdyb3duIGJleW9uZCBYIFtrQnl0ZV0KKyNST1RBVEVHRU5TPTMJCQkjIGtlZXAgWCBnZW5lcmF0aW9ucyBvZiByb3RhdGVkIGxvZ3MKK0JVRkZFUlNJWkU9NjQJCQkjIHNpemUgb2YgY2lyY3VsYXIgYnVmZmVyIFtrQnl0ZV0KK0ZPUkVHUk9VTkQ9bm8JCQkjIHJ1biBpbiBmb3JlZ3JvdW5kIChkb24ndCB1c2UhKQorI0xPR0xFVkVMPTUJCQkjIGxvY2FsIGxvZyBsZXZlbCAoYmV0d2VlbiAxIGFuZCA4KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3N5c2xvZy5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3N5c2xvZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YmI2MzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc3lzbG9nLmNvbmYKQEAgLTAsMCArMSBAQAorIyAgL2V0Yy9zeXNsb2cuY29uZglDb25maWd1cmF0aW9uIGZpbGUgZm9yIGJ1c3lib3gncyBzeXNsb2dkIHV0aWxpdHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy91bW91bnQuYnVzeWJveCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy91bW91bnQuYnVzeWJveApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMzczMTYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3Vtb3VudC5idXN5Ym94CkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKK2V4ZWMgL2Jpbi9idXN5Ym94IHVtb3VudCAkQApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvTWFrZXZhcnMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9NYWtldmFycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjY5MmFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvTWFrZXZhcnMKQEAgLTAsMCArMSw0MSBAQAorIyBNYWtlZmlsZSB2YXJpYWJsZXMgZm9yIFBPIGRpcmVjdG9yeSBpbiBhbnkgcGFja2FnZSB1c2luZyBHTlUgZ2V0dGV4dC4KKworIyBVc3VhbGx5IHRoZSBtZXNzYWdlIGRvbWFpbiBpcyB0aGUgc2FtZSBhcyB0aGUgcGFja2FnZSBuYW1lLgorRE9NQUlOID0gJChQQUNLQUdFKQorCisjIFRoZXNlIHR3byB2YXJpYWJsZXMgZGVwZW5kIG9uIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGRpcmVjdG9yeS4KK3N1YmRpciA9IHBvCit0b3BfYnVpbGRkaXIgPSAuLgorCisjIFRoZXNlIG9wdGlvbnMgZ2V0IHBhc3NlZCB0byB4Z2V0dGV4dC4KK1hHRVRURVhUX09QVElPTlMgPSAtLWtleXdvcmQ9XyAtLWtleXdvcmQ9Tl8KKworIyBUaGlzIGlzIHRoZSBjb3B5cmlnaHQgaG9sZGVyIHRoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIHRoZSBoZWFkZXIgb2YgdGhlCisjICQoRE9NQUlOKS5wb3QgZmlsZS4gIFNldCB0aGlzIHRvIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBzdXJyb3VuZGluZworIyBwYWNrYWdlLiAgKE5vdGUgdGhhdCB0aGUgbXNnc3RyIHN0cmluZ3MsIGV4dHJhY3RlZCBmcm9tIHRoZSBwYWNrYWdlJ3MKKyMgc291cmNlcywgYmVsb25nIHRvIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBwYWNrYWdlLikgIFRyYW5zbGF0b3JzIGFyZQorIyBleHBlY3RlZCB0byB0cmFuc2ZlciB0aGUgY29weXJpZ2h0IGZvciB0aGVpciB0cmFuc2xhdGlvbnMgdG8gdGhpcyBwZXJzb24KKyMgb3IgZW50aXR5LCBvciB0byBkaXNjbGFpbSB0aGVpciBjb3B5cmlnaHQuICBUaGUgZW1wdHkgc3RyaW5nIHN0YW5kcyBmb3IKKyMgdGhlIHB1YmxpYyBkb21haW47IGluIHRoaXMgY2FzZSB0aGUgdHJhbnNsYXRvcnMgYXJlIGV4cGVjdGVkIHRvIGRpc2NsYWltCisjIHRoZWlyIGNvcHlyaWdodC4KK0NPUFlSSUdIVF9IT0xERVIgPSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIGlzIHRoZSBlbWFpbCBhZGRyZXNzIG9yIFVSTCB0byB3aGljaCB0aGUgdHJhbnNsYXRvcnMgc2hhbGwgcmVwb3J0CisjIGJ1Z3MgaW4gdGhlIHVudHJhbnNsYXRlZCBzdHJpbmdzOgorIyAtIFN0cmluZ3Mgd2hpY2ggYXJlIG5vdCBlbnRpcmUgc2VudGVuY2VzLCBzZWUgdGhlIG1haW50YWluZXIgZ3VpZGVsaW5lcworIyAgIGluIHRoZSBHTlUgZ2V0dGV4dCBkb2N1bWVudGF0aW9uLCBzZWN0aW9uICdQcmVwYXJpbmcgU3RyaW5ncycuCisjIC0gU3RyaW5ncyB3aGljaCB1c2UgdW5jbGVhciB0ZXJtcyBvciByZXF1aXJlIGFkZGl0aW9uYWwgY29udGV4dCB0byBiZQorIyAgIHVuZGVyc3Rvb2QuCisjIC0gU3RyaW5ncyB3aGljaCBtYWtlIGludmFsaWQgYXNzdW1wdGlvbnMgYWJvdXQgbm90YXRpb24gb2YgZGF0ZSwgdGltZSBvcgorIyAgIG1vbmV5LgorIyAtIFBsdXJhbGlzYXRpb24gcHJvYmxlbXMuCisjIC0gSW5jb3JyZWN0IEVuZ2xpc2ggc3BlbGxpbmcuCisjIC0gSW5jb3JyZWN0IGZvcm1hdHRpbmcuCisjIEl0IGNhbiBiZSB5b3VyIGVtYWlsIGFkZHJlc3MsIG9yIGEgbWFpbGluZyBsaXN0IGFkZHJlc3Mgd2hlcmUgdHJhbnNsYXRvcnMKKyMgY2FuIHdyaXRlIHRvIHdpdGhvdXQgYmVpbmcgc3Vic2NyaWJlZCwgb3IgdGhlIFVSTCBvZiBhIHdlYiBwYWdlIHRocm91Z2gKKyMgd2hpY2ggdGhlIHRyYW5zbGF0b3JzIGNhbiBjb250YWN0IHlvdS4KK01TR0lEX0JVR1NfQUREUkVTUyA9CisKKyMgVGhpcyBpcyB0aGUgbGlzdCBvZiBsb2NhbGUgY2F0ZWdvcmllcywgYmV5b25kIExDX01FU1NBR0VTLCBmb3Igd2hpY2ggdGhlCisjIG1lc3NhZ2UgY2F0YWxvZ3Mgc2hhbGwgYmUgdXNlZC4gIEl0IGlzIHVzdWFsbHkgZW1wdHkuCitFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyA9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9jb2RlcGFnZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2NvZGVwYWdlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyODcwMTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9jb2RlcGFnZS5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIworIyBQYXRjaCBtYW5hZ2VkIGJ5IGh0dHA6Ly93d3cubW4tbG9naXN0aWsuZGUvdW5zdXBwb3J0ZWQvcHhhMjUwL3BhdGNoZXIKKyMKKworLS0tIGNvbnNvbGUtdG9vbHMtMC4zLjIvY29udHJpYi9jb2RlcGFnZS5jfmNvZGVwYWdlCisrKysgY29uc29sZS10b29scy0wLjMuMi9jb250cmliL2NvZGVwYWdlLmMKK0BAIC0yMjksNyArMjI5LDcgQEAKKyAJICByZXR1cm4gMDsKKyAKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXAorLVdhcm5pbmc6IENQIGZvcm1hdCBpcyBhIGhhY2shXG4KKytXYXJuaW5nOiBDUCBmb3JtYXQgaXMgYSBoYWNrIVxuXAorICAgICAgICAgIFRoZSBmaWxlcyBwcm9kdWNlZCBtYXkgb3IgbWF5IG5vdCBiZSB1c2FibGUhXG4iKTsKKyAKKyAJc3ByaW50ZihvdXRmaWxlLCAiJWQuY3AiLCBDUEVudHJ5SGVhZGVyLmNvZGVwYWdlKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2NvbXBpbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9jb21waWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5M2Y1MTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9jb21waWxlLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gY29uc29sZS10b29scy0wLjMuMi9rYmR0b29scy9zaG93a2V5LmN+Y29tcGlsZQkxOTk5LTA4LTI1IDE3OjIwOjA4LjAwMDAwMDAwMCAtMDQwMAorKysrIGNvbnNvbGUtdG9vbHMtMC4zLjIva2JkdG9vbHMvc2hvd2tleS5jCTIwMDQtMDUtMDkgMDM6MDM6MjMuMDAwMDAwMDAwIC0wNDAwCitAQCAtMjY0LDcgKzI2NCw2IEBACisgCSAgYnJlYWs7CisgCWNhc2UgY21kX2tleW1hcDoKKyAJICBwcmludGYoIilcbiIpOworLQlkZWZhdWx0OgorIAl9CisgICAgIH0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2NvbmZpZ3VyZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2NvbmZpZ3VyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWMxMDBjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gY29uc29sZS10b29scy0wLjMuMi9jb25maWd1cmUuaW5+Y29uZmlndXJlCisrKysgY29uc29sZS10b29scy0wLjMuMi9jb25maWd1cmUuaW4KK0BAIC0yLDEzICsyLDE0IEBACisgZG5sIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCisgCisgIyBJbml0aWFsaXplCistQUNfSU5JVChrYmR0b29scy9sb2Fka2V5cy55KQorK0FDX0lOSVQKKytBQ19DT05GSUdfU1JDRElSKFtrYmR0b29scy9sb2Fka2V5cy55XSkKKyAKKyBkZWZpbmUoY3RfdW5pY29kZWRhdGFfZGVmYXVsdCwvdXNyL3NoYXJlL3VuaWRhdGEvVW5pY29kZURhdGEtMi50eHQpCisgY3RfbG9jYWxkYXRhZGlyX2RlZmF1bHQ9L3Vzci9sb2NhbC9zaGFyZSAgICAgIyBpZmYgLS1lbmFibGUtbG9jYWxkYXRhZGlyIHdpdGhvdXQgc3BlY2lmaWMgZGlyCisgCisgI0FDX0NPTkZJR19BVVhfRElSKGF1dG9jb25mKQorLUFDX0NBTk9OSUNBTF9TWVNURU0KKytBQ19DQU5PTklDQUxfVEFSR0VUKFtdKQorIEFNX0lOSVRfQVVUT01BS0UoY29uc29sZS10b29scywgMC4zLjIpCisgCisgIyBEZWZhdWx0cworQEAgLTI1LDcgKzI2LDYgQEAKKyAjIGkxOG4gc3R1ZmYKKyBBTExfTElOR1VBUz0iY3MgZGUgcnUgZ2EgZnIiCisgQU1fR05VX0dFVFRFWFQKKy1BQ19PVVRQVVRfQ09NTUFORFMoW3NlZCAtZSAiL1BPVEZJTEVTID0vciBwby9QT1RGSUxFUyIgcG8vTWFrZWZpbGUuaW4gPiBwby9NYWtlZmlsZV0pCisgCisgQUNfREVGSU5FX1VOUVVPVEVEKExPQ0FMRURJUiwgIi91c3Ivc2hhcmUvbG9jYWxlIikKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2ZpeC1saWJjb25zb2xlLWxpbmtpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9maXgtbGliY29uc29sZS1saW5raW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNjFlYjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9maXgtbGliY29uc29sZS1saW5raW5nLnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK0ZpeCB0aGUgZm9sbG93aW5nIGVycm9yIGRldGVjdGVkIHdpdGggaTU4Ni1wb2t5bWxsaWIzMi1saW51eC1nY2MgKHRoZQorbXVsdGlsaWIgeDg2LTY0IGxpYjMyIGNvbXBpbGVyKToKKyAgICAuLi9saWIvY3R1dGlscy8ubGlicy9saWJjdHV0aWxzLnNvOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBnZXRfa2VybmVsX3NmbScKKyAgICBjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKworSXQgc2VlbXMgdGhhdCBsaWJjdHV0aWxzLnNvICh0aGUgbGlicmFyeSB0aGF0IHVzZXMgZ2V0X2tlcm5lbF9zZm0pIG11c3QKK2JlIHN0YXRlZCBiZWZvcmUgbGliY29uc29sZS5zbyAodGhlIGxpYnJhcnkgdGhhdCBleHBvcnRzIHRoZSBmdW5jdGlvbikgd2hlbgordXNpbmcgbXVsdGlsaWIgZ2NjCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitJbmRleDogY29uc29sZS10b29scy0wLjMuMi9mb250ZmlsZXRvb2xzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY29uc29sZS10b29scy0wLjMuMi5vcmlnL2ZvbnRmaWxldG9vbHMvTWFrZWZpbGUuYW0KKysrKyBjb25zb2xlLXRvb2xzLTAuMy4yL2ZvbnRmaWxldG9vbHMvTWFrZWZpbGUuYW0KK0BAIC0xMCw1ICsxMCw1IEBAIEVYVFJBX0RJU1QgPSBmb250czJ2aXJmb250LmMgdmlyZm9udC5oCisgCisgIyBsaWJjb25zb2xlIGlzIG5lZWRlZCBieSBjdHV0aWxzCisgTERBREQgPSAuLi9saWIvY3Rsb2NhbC9saWJjdGxvY2FsLmEgLi4vbGliL2Nmb250L2xpYmNmb250LmxhIFwKKy0JLi4vbGliL2NvbnNvbGUvbGliY29uc29sZS5sYSBcCistCS4uL2xpYi9jdHV0aWxzL2xpYmN0dXRpbHMubGEgLi4vbGliL2dlbmVyaWMvbGliY3RnZW5lcmljLmxhCisrCS4uL2xpYi9jdHV0aWxzL2xpYmN0dXRpbHMubGEgXAorKwkuLi9saWIvY29uc29sZS9saWJjb25zb2xlLmxhIC4uL2xpYi9nZW5lcmljL2xpYmN0Z2VuZXJpYy5sYQorSW5kZXg6IGNvbnNvbGUtdG9vbHMtMC4zLjIvdnR0b29scy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNvbnNvbGUtdG9vbHMtMC4zLjIub3JpZy92dHRvb2xzL01ha2VmaWxlLmFtCisrKysgY29uc29sZS10b29scy0wLjMuMi92dHRvb2xzL01ha2VmaWxlLmFtCitAQCAtNyw5ICs3LDkgQEAgYmluX1BST0dSQU1TID0gY2h2dCBkZWFsbG9jdnQgd3JpdGV2dCBmZworIAl2Y3N0aW1lIHZ0LWlzLVVURjggb3BlbnZ0IEBSRVNJWkVDT05TQAorIEVYVFJBX1BST0dSQU1TID0gcmVzaXplY29ucworIAorLUxEQUREID0gLi4vbGliL2N0bG9jYWwvbGliY3Rsb2NhbC5hIC4uL2xpYi9jb25zb2xlL2xpYmNvbnNvbGUubGEgXAorK0xEQUREID0gLi4vbGliL2N0bG9jYWwvbGliY3Rsb2NhbC5hIC4uL2xpYi9jdHV0aWxzL2xpYmN0dXRpbHMubGEgXAorIAkuLi9saWIvY2ZvbnQvbGliY2ZvbnQubGEgXAorLQkuLi9saWIvY3R1dGlscy9saWJjdHV0aWxzLmxhIC4uL2xpYi9nZW5lcmljL2xpYmN0Z2VuZXJpYy5sYQorKwkuLi9saWIvY29uc29sZS9saWJjb25zb2xlLmxhIC4uL2xpYi9nZW5lcmljL2xpYmN0Z2VuZXJpYy5sYQorIAorIHZjc3RpbWVfTERBREQgPSAuLi9saWIvY3Rsb2NhbC9saWJjdGxvY2FsLmEKKyBzY3JlZW5kdW1wX0xEQUREID0gLi4vbGliL2N0bG9jYWwvbGliY3Rsb2NhbC5hCitJbmRleDogY29uc29sZS10b29scy0wLjMuMi9rYmR0b29scy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNvbnNvbGUtdG9vbHMtMC4zLjIub3JpZy9rYmR0b29scy9NYWtlZmlsZS5hbQorKysrIGNvbnNvbGUtdG9vbHMtMC4zLjIva2JkdG9vbHMvTWFrZWZpbGUuYW0KK0BAIC0xNSw5ICsxNSw5IEBAIEVYVFJBX1BST0dSQU1TID0gZ2V0a2V5Y29kZXMgc2V0a2V5Y29kZXMKKyBsb2Fka2V5c19TT1VSQ0VTID0gbG9hZGtleXMueSBhbmFseXplLmwKKyAKKyBZRkxBR1MgPSAtZAorLUxEQUREID0gLi4vbGliL2N0bG9jYWwvbGliY3Rsb2NhbC5hIC4uL2xpYi9jb25zb2xlL2xpYmNvbnNvbGUubGEgXAorK0xEQUREID0gLi4vbGliL2N0bG9jYWwvbGliY3Rsb2NhbC5hIC4uL2xpYi9jdHV0aWxzL2xpYmN0dXRpbHMubGEgXAorIAkuLi9saWIvY2ZvbnQvbGliY2ZvbnQubGEgXAorLQkuLi9saWIvY3R1dGlscy9saWJjdHV0aWxzLmxhIC4uL2xpYi9nZW5lcmljL2xpYmN0Z2VuZXJpYy5sYQorKwkuLi9saWIvY29uc29sZS9saWJjb25zb2xlLmxhIC4uL2xpYi9nZW5lcmljL2xpYmN0Z2VuZXJpYy5sYQorIAorIGxvYWRrZXlzX0xEQUREID0gJChMREFERCkgQExFWExJQkAKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2tiZHJhdGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9rYmRyYXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNzBiZTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9rYmRyYXRlLnBhdGNoCkBAIC0wLDAgKzEsNzUgQEAKK1BhdGNoIGZyb20gTWF0dGhpYXMgR29lYmwgPG9lQG0uZ29lYmwubmV0PgorQWRkZWQgdmlhIE9FIGJ1Z3RyYWNrZXI6IGJ1ZyAjNDc4CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gY29uc29sZS10b29scy0wLjMuMi9rYmR0b29scy9rYmRfbW9kZS5jLm9yaWcKKysrKyBjb25zb2xlLXRvb2xzLTAuMy4yL2tiZHRvb2xzL2tiZF9tb2RlLmMKK0BAIC0yOSwxMSArMjksMTYgQEAKKyAgIE9QVCgiLXUgLS11bmljb2RlICAiLCBfKCJVVEYtOCBtb2RlIChVTklDT0RFKSIpKTsKKyAgIE9QVCgiLXMgLS1zY2FuY29kZSAiLCBfKCJzY2FuY29kZSBtb2RlIChSQVcpIikpOworICAgT1BUKCIgICAtLW1vZGU9ezhiaXQsa2V5Y29kZSx1bmljb2RlLHNjYW5jb2RlfSAiLCBfKCJzZXQgbW9kZSIpKTsKKysgIE9QVCgiLXIgLS1yYXRlPVJBVEUgIiwgXygic2V0IHJlcGVhdCByYXRlIChkZWZhdWx0OiAzMykiKSk7CisrICBPUFQoIi1kIC0tZGVsYXk9REVMQVkgIiwgXygic2V0IHJlcGVhdCBkZWxheSAoZGVmYXVsdDogMjUwKSIpKTsKKyAKKyAgIE9QVCgiLWggLS1oZWxwICAgICAiLCBIRUxQREVTQyk7CisgICBPUFQoIi1WIC0tdmVyc2lvbiAgIiwgVkVSU0lPTkRFU0MpOworIH0KKyAKKytpbnQgcmF0ZT0tMTsKKytpbnQgZGVsYXk9LTE7CisrCisgc3RhdGljIGludCBwYXJzZV9jbWRsaW5lIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIHsKKyAgICAgaW50IG1vZGUgPSAtMTsKK0BAIC00NiwxMSArNTEsMTMgQEAKKyAgICAgICB7ICJtb2RlIiAgICAgLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ20nIH0sCisgICAgICAgeyAic2NhbmNvZGUiICwgbm9fYXJndW1lbnQsIE5VTEwsICdzJyB9LAorICAgICAgIHsgInVuaWNvZGUiICAsIG5vX2FyZ3VtZW50LCBOVUxMLCAndScgfSwKKysgICAgICB7ICJyYXRlIiAgICAgLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3InIH0sCisrICAgICAgeyAiZGVsYXkiICAgICwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdkJyB9LAorICAgICAgIHsgTlVMTCwgMCwgTlVMTCwgMCB9CisgICAgIH07CisgICAgIGludCBjOworIAorLSAgICB3aGlsZSAoIChjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICJWaGFrc3UiLCBsb25nX29wdHMsIE5VTEwpKSAhPSBFT0YpIAorKyAgICB3aGlsZSAoIChjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICJWaGFrc3VyOmQ6IiwgbG9uZ19vcHRzLCBOVUxMKSkgIT0gRU9GKSAKKyAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICBjYXNlICdoJzoKKyAJdXNhZ2UgKCk7CitAQCAtNTgsNiArNjUsMTQgQEAKKyAgICAgICBjYXNlICdWJzoKKyAJdmVyc2lvbiAoKTsKKyAJZXhpdCgwKTsKKysgICAgICBjYXNlICdyJzoKKysJcmF0ZSA9IGF0b2kob3B0YXJnKTsKKysJbW9kZSA9IC0yOworKwlicmVhazsKKysgICAgICBjYXNlICdkJzoKKysJZGVsYXkgPSBhdG9pKG9wdGFyZyk7CisrCW1vZGUgPSAtMjsKKysJYnJlYWs7CisgICAgICAgY2FzZSAnYSc6CisgCW1vZGUgPSBLX1hMQVRFOworIAlicmVhazsKK0BAIC0xMjksNiArMTQ0LDIwIEBACisgICAgICAgZXhpdCgwKTsKKyAgICAgfQorICAgCisrICBpZiAoIHJhdGUgIT0gLTEgfHwgZGVsYXkgIT0gLTEgKQorKyAgICB7CisrICAgIHN0cnVjdCBrYmRfcmVwZWF0IGtiZF9yZXA7CisrICAgIGtiZF9yZXAuZGVsYXkgPSBkZWxheTsKKysgICAga2JkX3JlcC5wZXJpb2QgPSByYXRlOworKyAgICBpZiAoaW9jdGwoZmQsIEtES0JEUkVQLCAma2JkX3JlcCkpCisrICAgICAgeworKwlmcHJpbnRmKHN0ZGVyciwgcHJvZ25hbWUpOworKwlwZXJyb3IoXygiOiBlcnJvciBzZXR0aW5nIGtleWJvYXJkIHJlcGVhdCBtb2RlXG4iKSk7CisrCWV4aXQoMSk7CisrICAgICAgfQorKyAgICBpZihtb2RlPT0tMikgZXhpdCgwKTsKKysgICAgfQorKyAgCisgICBpZiAoaW9jdGwoZmQsIEtEU0tCTU9ERSwgbW9kZSkpCisgICAgIHsKKyAgICAgICBmcHJpbnRmKHN0ZGVyciwgcHJvZ25hbWUpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvbGNtZXNzYWdlLm00IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvbGNtZXNzYWdlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZDQ3YTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9sY21lc3NhZ2UubTQKQEAgLTAsMCArMSwyNCBAQAorIyBDaGVjayB3aGV0aGVyIExDX01FU1NBR0VTIGlzIGF2YWlsYWJsZSBpbiA8bG9jYWxlLmg+LgorIyBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS4KKyMKKyMgVGhpcyBmaWxlIGNhbiBiZSBjb3BpZWQgYW5kIHVzZWQgZnJlZWx5IHdpdGhvdXQgcmVzdHJpY3Rpb25zLiAgSXQgY2FuCisjIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50CisjIHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0IGZ1bmN0aW9uYWxpdHkuCisjIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKyMgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCisjIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorIyBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworIyBzZXJpYWwgMgorCitBQ19ERUZVTihbQU1fTENfTUVTU0FHRVNdLAorICBbaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX2xvY2FsZV9oID0geWVzOyB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBMQ19NRVNTQUdFU10sIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUywKKyAgICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxvY2FsZS5oPl0sIFtyZXR1cm4gTENfTUVTU0FHRVNdLAorICAgICAgIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUz15ZXMsIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUz1ubyldKQorICAgIGlmIHRlc3QgJGFtX2N2X3ZhbF9MQ19NRVNTQUdFUyA9IHllczsgdGhlbgorICAgICAgQUNfREVGSU5FKEhBVkVfTENfTUVTU0FHRVMsIDEsCisgICAgICAgIFtEZWZpbmUgaWYgeW91ciA8bG9jYWxlLmg+IGZpbGUgZGVmaW5lcyBMQ19NRVNTQUdFUy5dKQorICAgIGZpCisgIGZpXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL25vLWRlcC1vbi1saWJmbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL25vLWRlcC1vbi1saWJmbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjczNWE1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvbm8tZGVwLW9uLWxpYmZsLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK05vIHJlYXNvbiB0byBsaW5rIHdpdGggbGliZmwgc2luY2UgJ2xvYWRrZXlzJyBpbXBsZW1lbnRzCitpdHMgb3duIHl5d3JhcCgpL3l5bGV4KCkgZnVuY3Rpb25zLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEphY29iIEtyb29uIDxqYWNvYi5rcm9vbkBtaWtyb2RpZGFrdC5zZT4KKworSW5kZXg6IGNvbnNvbGUtdG9vbHMtMC4zLjIva2JkdG9vbHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjb25zb2xlLXRvb2xzLTAuMy4yLm9yaWcva2JkdG9vbHMvTWFrZWZpbGUuYW0KKysrKyBjb25zb2xlLXRvb2xzLTAuMy4yL2tiZHRvb2xzL01ha2VmaWxlLmFtCitAQCAtMTksOCArMTksNiBAQCBMREFERCA9IC4uL2xpYi9jdGxvY2FsL2xpYmN0bG9jYWwuYSAuLi9sCisgCS4uL2xpYi9jZm9udC9saWJjZm9udC5sYSBcCisgCS4uL2xpYi9jb25zb2xlL2xpYmNvbnNvbGUubGEgLi4vbGliL2dlbmVyaWMvbGliY3RnZW5lcmljLmxhCisgCistbG9hZGtleXNfTERBREQgPSAkKExEQUREKSBATEVYTElCQAorLQorIGJpbl9TQ1JJUFRTID0gbWtfbW9kbWFwCisgCisgbm9pbnN0X0hFQURFUlMgPSBsb2Fka2V5cy5oCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9ub2RvY3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9ub2RvY3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVkNjA5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL25vZG9jcy5wYXRjaApAQCAtMCwwICsxLDIyIEBACitUaGUgZG9jcyBuZWVkIHRvb2xzIHdlIGRvbid0IGhhdmUgdG8gYnVpbGQgc28gZGlzYWJsZSB0aGVtLgorCitBbHNvIHJlbW92ZSBpbnRsIHNpbmNlIHRoZSBNYWtlZmlsZSBkb2Vzbid0IHdvcmsgd2l0aCAzLjgyIGFuZCB3ZQorZG9uJ3Qgd2FudCB0byBidWlsZCBsaWJpbnRsIGFueXdheS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorUlAgMjAxMi8xMC8xNworCitJbmRleDogY29uc29sZS10b29scy0wLjMuMi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNvbnNvbGUtdG9vbHMtMC4zLjIub3JpZy9NYWtlZmlsZS5hbQkxOTk5LTA0LTE1IDAxOjMzOjI0LjAwMDAwMDAwMCArMDAwMAorKysrIGNvbnNvbGUtdG9vbHMtMC4zLjIvTWFrZWZpbGUuYW0JMjAxMi0xMC0xNyAxMTo0ODoxNC4xMDcwNjkxNDUgKzAwMDAKK0BAIC0xLDcgKzEsNyBAQAorICMgLSotIG1ha2VmaWxlIC0qLQorIEFVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduCisgCistU1VCRElSUyA9IGxpYiBmb250ZmlsZXRvb2xzIHZ0dG9vbHMga2JkdG9vbHMgc2NyZWVuZm9udHRvb2xzIGNvbnRyaWIgZG9jIFwKKy0JY29tcGF0IGluY2x1ZGUgZXhhbXBsZXMgcG8gaW50bAorK1NVQkRJUlMgPSBsaWIgZm9udGZpbGV0b29scyB2dHRvb2xzIGtiZHRvb2xzIHNjcmVlbmZvbnR0b29scyBjb250cmliIFwKKysJY29tcGF0IGluY2x1ZGUgZXhhbXBsZXMgcG8KKyAKKyBFWFRSQV9ESVNUID0gQlVHUyBSRUxFQVNFIENSRURJVFMgQ09QWUlORy5rYmQgbG9jYWwtc2NyaXB0cy8qIGRlYmlhbi8qICoubHNtCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi91Y2xpYmMtZmlsZW5vLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvdWNsaWJjLWZpbGVuby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzk1MDY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvdWNsaWJjLWZpbGVuby5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitGaXhpbmcgdGhlIGxvY2FsZSBpc3N1ZXMgaXNuJ3QgZW5vdWdoLCBjb25zb2xlLXRvb2xzIGFsc28gZG9lcyBhIGNvdXBsZSBvZgorb3RoZXIgcHJldHR5IHN0dXBpZCB0aGluZ3MgKGxpa2UgRklMRSAqZjsgZi0+X2ZpbGVubyBpbnN0ZWFkIG9mIGZpbGVubyhmKSksCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gY29uc29sZS10b29scy0wLjMuMi9saWIvY2ZvbnQvZm9udHN0cnVjdC5jLmFyawkyMDA1LTA1LTIyIDE5OjEyOjM4LjAwMDAwMDAwMCArMDAwMAorKysrIGNvbnNvbGUtdG9vbHMtMC4zLjIvbGliL2Nmb250L2ZvbnRzdHJ1Y3QuYwkyMDA1LTA1LTIyIDE5OjEzOjIzLjAwMDAwMDAwMCArMDAwMAorQEAgLTUwLDggKzUwLDcgQEAKKyAgICAqIGdldCBmaWxlc2l6ZQorICAgICovCisgICAKKy0gIC8qIEZJWE1FOiBzaG91bGQgbm90IHVzZSBfZmlsZW5vICEgKi8KKy0gIGlmIChmc3RhdChmb250ZmlsZS0+X2ZpbGVubywgJnN0YnVmKSA9PSAtMSkKKysgIGlmIChmc3RhdChmaWxlbm8oZm9udGZpbGUpLCAmc3RidWYpID09IC0xKQorICAgICBnb3RvIHJzZl9yZXR1cm5fZXJyb3I7CisgICAKKyAgIGlmIChTX0lTUkVHKHN0YnVmLnN0X21vZGUpKQorQEAgLTIxMSw4ICsyMTAsNyBAQAorICAgICogZ2V0IGZpbGVzaXplCisgICAgKi8KKyAgIAorLSAgLyogRklYTUU6IHNob3VsZCBub3QgdXNlIF9maWxlbm8gISAqLworLSAgaWYgKGZzdGF0KGZvbnRmaWxlLT5fZmlsZW5vLCAmc3RidWYpID09IC0xKQorKyAgaWYgKGZzdGF0KGZpbGVubyhmb250ZmlsZSksICZzdGJ1ZikgPT0gLTEpCisgICAgIGdvdG8gcmZnX3JldHVybl9lcnJvcjsKKyAgIAorICAgaWYgKFNfSVNSRUcoc3RidWYuc3RfbW9kZSkpCistLS0gY29uc29sZS10b29scy0wLjMuMi9saWIvY29uc29sZS9hY20uYy5hcmsJMjAwNS0wNS0yMiAxOToxNzoxNS4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb25zb2xlLXRvb2xzLTAuMy4yL2xpYi9jb25zb2xlL2FjbS5jCTIwMDUtMDUtMjIgMTk6MTc6MjMuMDAwMDAwMDAwICswMDAwCitAQCAtMzAsNyArMzAsNyBAQAorICAgbGN0X2Jvb2xlYW4gcGFyc2VfZmFpbGVkID0gRmFsc2U7CisgICBsY3RfYm9vbGVhbiBpc191bmljb2RlOworIAorLSAgaWYgKGZzdGF0KGZwLT5fZmlsZW5vLCAmc3RidWYpKSAKKysgIGlmIChmc3RhdChmaWxlbm8oZnApLCAmc3RidWYpKSAKKyAgICAgcGVycm9yKF8oIkNhbm5vdCBzdGF0IEFDTSBmaWxlIikpLCBleGl0KDEpOworIAorICAgLyogZmlyc3QgdHJ5IGEgd2cxNS1jaGFybWFwIChnbGliYykgZmlsZSBmb3JtYXQgKi8KKy0tLSBjb25zb2xlLXRvb2xzLTAuMy4yL2luY2x1ZGUvbGN0L2xvY2FsLmguYXJrCTIwMDUtMDUtMjIgMTk6MDg6NTQuMDAwMDAwMDAwICswMDAwCisrKysgY29uc29sZS10b29scy0wLjMuMi9pbmNsdWRlL2xjdC9sb2NhbC5oCTIwMDUtMDUtMjIgMTk6MDk6MTIuMDAwMDAwMDAwICswMDAwCitAQCAtOCw3ICs4LDcgQEAKKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgCisgCistI2lmZGVmIEhBVkVfTE9DQUxFX0gKKysjaWYgZGVmaW5lZChIQVZFX0xPQ0FMRV9IKSAmJiBkZWZpbmVkKEhBVkVfTElCSU5UTF9IKQorICMgaW5jbHVkZSA8bGliaW50bC5oPgorICMgZGVmaW5lIF8oU3RyaW5nKSBnZXR0ZXh0IChTdHJpbmcpCisgIyBpZmRlZiBnZXR0ZXh0X25vb3AKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzXzAuMy4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHNfMC4zLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYwYTVhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzXzAuMy4yLmJiCkBAIC0wLDAgKzEsMzcgQEAKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLmtiZDttZDU9OWIyZDkxNTExZDNkODBkNGQyMGFjNmU2YjAxMzdmZTkiCitTVU1NQVJZID0gIkFsbG93cyB5b3UgdG8gc2V0LXVwIGFuZCBtYW5pcHVsYXRlIHRoZSBMaW51eCBjb25zb2xlIgorREVTQ1JJUFRJT04gPSAiUHJvdmlkZXMgdG9vbHMgdGhhdCBlbmFibGUgdGhlIHNldC11cCBhbmQgbWFuaXB1bGF0aW9uIG9mIHRoZSBsaW51eCBjb25zb2xlIGFuZCBjb25zb2xlLWZvbnQgZmlsZXMuIgorUFIgPSAicjgiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2xjdC9jb25zb2xlLXRvb2xzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9jb2RlcGFnZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29tcGlsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9rYmRyYXRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VjbGliYy1maWxlbm8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9kb2NzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1saWJjb25zb2xlLWxpbmtpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm8tZGVwLW9uLWxpYmZsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xjbWVzc2FnZS5tNCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtldmFycyIKKworU1JDX1VSSVttZDVzdW1dID0gImJmMjE1NjRmYzM4YjNhZjg1M2VmNzI0YmFiZGRiYWNkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVlYTZiNDQxNjcyZGFjZDI1MTA3OWZjODVlZDMyMmUxOTYyODJlMGU2NmMxNjMwM2VjNjRjM2EyYjFjMTI2YzIiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlta2RpciAtcCAke1N9L200CisJY3AgJHtXT1JLRElSfS9sY21lc3NhZ2UubTQgJHtTfS9tNC8KKwlybSAtZiAke1N9L2FjaW5jbHVkZS5tNAorCWNwICR7V09SS0RJUn0vTWFrZXZhcnMgJHtTfS9wby8KK30KKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworYmluZGlyX3Byb2dzID0gImNodnQgZGVhbGxvY3Z0IGZnY29uc29sZSBvcGVudnQiCitBTFRFUk5BVElWRV8ke1BOfSA9ICIke2JpbmRpcl9wcm9nc30iCisKK1JERVBFTkRTXyR7UE59ID0gImJhc2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy02LjktY3AtaS11LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtNi45LWNwLWktdS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDUyYjQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtNi45LWNwLWktdS5wYXRjaApAQCAtMCwwICsxLDEyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsZWdhY3kgdmVyc2lvbl0KKworVGhpcyBwYXRjaCB3YXMgaW1wb3J0ZWQgZnJvbSB0aGUgRmVkb3JhIENvcmUgOCBjb3JldXRpbHMtNi45LTkgcGFja2FnZS4KKworVGhlIHBhY2thZ2UgaXMgc3RhdGVkIGFzIGJlaW5nIExpY2Vuc2VkIGFzIEdQTHYyKy4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCistLS0tCisKK1doZW4gImNwIC1pIC0tdXBkYXRlIG9sZCBuZXciIHdvdWxkIGRvIG5vdGhpbmcgYmVjYXVzZSAibmV3IiBpcworbmV3ZXIgdGhhbiAib2xkIiwgY3Agd291bGQgbm9uZXRoZWxlc3MgcHJvbXB0IGZvciB3aGV0aGVyIGl0IGlzCitvayB0byBvdmVyd3JpdGUgIm5ldyIuICBUaGVuLCByZWdhcmRsZXNzIG9mIHRoZSByZXNwb25zZSAoYmVjYXVzZQorb2YgdGhlIC0tdXBkYXRlIG9wdGlvbiksIGNwIHdvdWxkIGRvIG5vdGhpbmcuCisKK1RoZSBmb2xsb3dpbmcgcGF0Y2ggZWxpbWluYXRlcyB0aGUgdW5uZWNlc3NhcnkgcHJvbXB0IGluIHRoYXQgY2FzZS4KKworZGlmZiAtLWdpdCBhL3NyYy9jb3B5LmMgYi9zcmMvY29weS5jCitpbmRleCBiN2JmNzNiLi4wZTU0OWQyIDEwMDY0NAorLS0tIGEvc3JjL2NvcHkuYworKysrIGIvc3JjL2NvcHkuYworQEAgLTEyMTAsNiArMTIxMCwzMCBAQCBjb3B5X2ludGVybmFsIChjaGFyIGNvbnN0ICpzcmNfbmFtZSwgY2hhciBjb25zdCAqZHN0X25hbWUsCisgCSAgICAgIHJldHVybiBmYWxzZTsKKyAJICAgIH0KKworKwkgIGlmICghU19JU0RJUiAoc3JjX21vZGUpICYmIHgtPnVwZGF0ZSkKKysJICAgIHsKKysJICAgICAgLyogV2hlbiBwcmVzZXJ2aW5nIHRpbWUgc3RhbXBzIChidXQgbm90IG1vdmluZyB3aXRoaW4gYSBmaWxlCisrCQkgc3lzdGVtKSwgZG9uJ3Qgd29ycnkgaWYgdGhlIGRlc3RpbmF0aW9uIHRpbWUgc3RhbXAgaXMKKysJCSBsZXNzIHRoYW4gdGhlIHNvdXJjZSBtZXJlbHkgYmVjYXVzZSBvZiB0aW1lIHN0YW1wCisrCQkgdHJ1bmNhdGlvbi4gICovCisrCSAgICAgIGludCBvcHRpb25zID0gKCh4LT5wcmVzZXJ2ZV90aW1lc3RhbXBzCisrCQkJICAgICAgJiYgISAoeC0+bW92ZV9tb2RlCisrCQkJCSAgICAmJiBkc3Rfc2Iuc3RfZGV2ID09IHNyY19zYi5zdF9kZXYpKQorKwkJCSAgICAgPyBVVElNRUNNUF9UUlVOQ0FURV9TT1VSQ0UKKysJCQkgICAgIDogMCk7CisrCisrCSAgICAgIGlmICgwIDw9IHV0aW1lY21wIChkc3RfbmFtZSwgJmRzdF9zYiwgJnNyY19zYiwgb3B0aW9ucykpCisrCQl7CisrCQkgIC8qIFdlJ3JlIHVzaW5nIC0tdXBkYXRlIGFuZCB0aGUgZGVzdGluYXRpb24gaXMgbm90IG9sZGVyCisrCQkgICAgIHRoYW4gdGhlIHNvdXJjZSwgc28gZG8gbm90IGNvcHkgb3IgbW92ZS4gIFByZXRlbmQgdGhlCisrCQkgICAgIHJlbmFtZSBzdWNjZWVkZWQsIHNvIHRoZSBjYWxsZXIgKGlmIGl0J3MgbXYpIGRvZXNuJ3QKKysJCSAgICAgZW5kIHVwIHJlbW92aW5nIHRoZSBzb3VyY2UgZmlsZS4gICovCisrCQkgIGlmIChyZW5hbWVfc3VjY2VlZGVkKQorKwkJICAgICpyZW5hbWVfc3VjY2VlZGVkID0gdHJ1ZTsKKysJCSAgcmV0dXJuIHRydWU7CisrCQl9CisrCSAgICB9CisrCisgCSAgLyogV2hlbiB0aGVyZSBpcyBhbiBleGlzdGluZyBkZXN0aW5hdGlvbiBmaWxlLCB3ZSBtYXkgZW5kIHVwCisgCSAgICAgcmV0dXJuaW5nIGVhcmx5LCBhbmQgaGVuY2Ugbm90IGNvcHlpbmcvbW92aW5nIHRoZSBmaWxlLgorIAkgICAgIFRoaXMgbWF5IGJlIGR1ZSB0byBhbiBpbnRlcmFjdGl2ZSBgbmVnYXRpdmUnIHJlcGx5IHRvIHRoZQorQEAgLTEzMDIsMzAgKzEzMjYsNiBAQCBjb3B5X2ludGVybmFsIChjaGFyIGNvbnN0ICpzcmNfbmFtZSwgY2hhciBjb25zdCAqZHN0X25hbWUsCisgCQkgICAgICByZXR1cm4gZmFsc2U7CisgCQkgICAgfQorIAkJfQorLQorLQkgICAgICBpZiAoeC0+dXBkYXRlKQorLQkJeworLQkJICAvKiBXaGVuIHByZXNlcnZpbmcgdGltZSBzdGFtcHMgKGJ1dCBub3QgbW92aW5nIHdpdGhpbiBhIGZpbGUKKy0JCSAgICAgc3lzdGVtKSwgZG9uJ3Qgd29ycnkgaWYgdGhlIGRlc3RpbmF0aW9uIHRpbWUgc3RhbXAgaXMKKy0JCSAgICAgbGVzcyB0aGFuIHRoZSBzb3VyY2UgbWVyZWx5IGJlY2F1c2Ugb2YgdGltZSBzdGFtcAorLQkJICAgICB0cnVuY2F0aW9uLiAgKi8KKy0JCSAgaW50IG9wdGlvbnMgPSAoKHgtPnByZXNlcnZlX3RpbWVzdGFtcHMKKy0JCQkJICAmJiAhICh4LT5tb3ZlX21vZGUKKy0JCQkJCSYmIGRzdF9zYi5zdF9kZXYgPT0gc3JjX3NiLnN0X2RldikpCistCQkJCSA/IFVUSU1FQ01QX1RSVU5DQVRFX1NPVVJDRQorLQkJCQkgOiAwKTsKKy0KKy0JCSAgaWYgKDAgPD0gdXRpbWVjbXAgKGRzdF9uYW1lLCAmZHN0X3NiLCAmc3JjX3NiLCBvcHRpb25zKSkKKy0JCSAgICB7CistCQkgICAgICAvKiBXZSdyZSB1c2luZyAtLXVwZGF0ZSBhbmQgdGhlIGRlc3RpbmF0aW9uIGlzIG5vdCBvbGRlcgorLQkJCSB0aGFuIHRoZSBzb3VyY2UsIHNvIGRvIG5vdCBjb3B5IG9yIG1vdmUuICBQcmV0ZW5kIHRoZQorLQkJCSByZW5hbWUgc3VjY2VlZGVkLCBzbyB0aGUgY2FsbGVyIChpZiBpdCdzIG12KSBkb2Vzbid0CistCQkJIGVuZCB1cCByZW1vdmluZyB0aGUgc291cmNlIGZpbGUuICAqLworLQkJICAgICAgaWYgKHJlbmFtZV9zdWNjZWVkZWQpCistCQkJKnJlbmFtZV9zdWNjZWVkZWQgPSB0cnVlOworLQkJICAgICAgcmV0dXJuIHRydWU7CistCQkgICAgfQorLQkJfQorIAkgICAgfQorCisgCSAgaWYgKHgtPm1vdmVfbW9kZSkKK2RpZmYgLS1naXQgYS90ZXN0cy9tdi91cGRhdGUgYi90ZXN0cy9tdi91cGRhdGUKK2luZGV4IDBjMDYwMjQuLjZjM2QxNDkgMTAwNzU1CistLS0gYS90ZXN0cy9tdi91cGRhdGUKKysrKyBiL3Rlc3RzL212L3VwZGF0ZQorQEAgLTEsNyArMSw3IEBACisgIyEvYmluL3NoCisgIyBtYWtlIHN1cmUgLS11cGRhdGUgd29ya3MgYXMgYWR2ZXJ0aXNlZAorCistIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDQsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDQsIDIwMDYtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CitAQCAtNDYsMTEgKzQ2LDE2IEBAIGZpCisKKyBmYWlsPTAKKworLWZvciBjcF9vcl9tdiBpbiBjcCBtdjsgZG8KKy0gICMgVGhpcyBpcyBhIG5vLW9wLgorLSAgJGNwX29yX212IC0tdXBkYXRlIG9sZCBuZXcgfHwgZmFpbD0xCistICBjYXNlICJgY2F0IG5ld2AiIGluIG5ldykgOzsgKikgZmFpbD0xIDs7IGVzYWMKKy0gIGNhc2UgImBjYXQgb2xkYCIgaW4gb2xkKSA7OyAqKSBmYWlsPTEgOzsgZXNhYworK2ZvciBpbnRlcmFjdGl2ZSBpbiAnJyAtaTsgZG8KKysgIGZvciBjcF9vcl9tdiBpbiBjcCBtdjsgZG8KKysgICAgIyBUaGlzIGlzIGEgbm8tb3AsIHdpdGggbm8gcHJvbXB0LgorKyAgICAjIFdpdGggY29yZXV0aWxzLTYuOSBhbmQgZWFybGllciwgdXNpbmcgLS11cGRhdGUgd2l0aCAtaSB3b3VsZAorKyAgICAjIG1pc3Rha2VubHkgZWxpY2l0IGEgcHJvbXB0LgorKyAgICAkY3Bfb3JfbXYgJGludGVyYWN0aXZlIC0tdXBkYXRlIG9sZCBuZXcgPCAvZGV2L251bGwgPiBvdXQgMj4mMSB8fCBmYWlsPTEKKysgICAgdGVzdCAtcyBvdXQgJiYgZmFpbD0xCisrICAgIGNhc2UgImBjYXQgbmV3YCIgaW4gbmV3KSA7OyAqKSBmYWlsPTEgOzsgZXNhYworKyAgICBjYXNlICJgY2F0IG9sZGAiIGluIG9sZCkgOzsgKikgZmFpbD0xIDs7IGVzYWMKKysgIGRvbmUKKyBkb25lCisKKyAjIFRoaXMgd2lsbCBhY3R1YWxseSBwZXJmb3JtIHRoZSByZW5hbWUuCistLQorMS41LjMucmMxLjE2Lmc5ZDZmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1idWlsZC13aXRoLWFjbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWJ1aWxkLXdpdGgtYWNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNzNkNzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1idWlsZC13aXRoLWFjbC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitGaXggdGhlIGZvbGxvd2luZyBpc3N1ZSBzbyB0aGF0IGNvcmV1dGlscyBjYW4gYnVpbGQgd2l0aCBBQ0w6CisKK2NvbmZpZ3VyZTogV0FSTklORzogbGliYWNsIGRldmVsb3BtZW50IGxpYnJhcnkgd2FzIG5vdCBmb3VuZCBvciBub3QgdXNhYmxlLgorY29uZmlndXJlOiBXQVJOSU5HOiBHTlUgY29yZXV0aWxzIHdpbGwgYmUgYnVpbHQgd2l0aG91dCBBQ0wgc3VwcG9ydC4KKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIG00L2FjbC5tNCB8ICAgIDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL200L2FjbC5tNCBiL200L2FjbC5tNAoraW5kZXggZDZhNDQ4YS4uYTlkNDgzNiAxMDA2NDQKKy0tLSBhL200L2FjbC5tNAorKysrIGIvbTQvYWNsLm00CitAQCAtMTU5LDcgKzE1OSw3IEBAIEFDX0RFRlVOKFtnbF9BQ0xfR0VUX0ZJTEVdLAorICAgICAgICAgICBdXSldLAorICAgICAgICBbZ2xfY3ZfZnVuY193b3JraW5nX2FjbF9nZXRfZmlsZT15ZXNdLAorICAgICAgICBbZ2xfY3ZfZnVuY193b3JraW5nX2FjbF9nZXRfZmlsZT1ub10sCistICAgICAgIFtnbF9jdl9mdW5jX3dvcmtpbmdfYWNsX2dldF9maWxlPWNyb3NzLWNvbXBpbGluZ10pXSkKKysgICAgICAgW2dsX2N2X2Z1bmNfd29ya2luZ19hY2xfZ2V0X2ZpbGU9eWVzXSldKQorIAorICAgQVNfSUYoW3Rlc3QgJGdsX2N2X2Z1bmNfd29ya2luZ19hY2xfZ2V0X2ZpbGUgPSB5ZXNdLCBbJDFdLCBbJDJdKQorIF0pCistLSAKKzEuNy43CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWZpeC1pbnN0YWxsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtZml4LWluc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhmNjFmYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWZpeC1pbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsMTAxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xlZ2FjeSB2ZXJzaW9uXQorCitUaGUgaW5zdGFsbCBjb21tYW5kIGRvZXNuJ3Qgb3ZlciB3cml0ZSB0aGUgZGFuZ2xpbmcgc3ltbGluaywgZm9yCitleGFtcGxlOgorCiskIGluc3RhbGwgZmlsZUEgL3RtcC9maWxlQQorCitJZiAvdG1wL2ZpbGVBIGlzIGEgZGFuZ2xpbmcgc3ltbGluaywgdGhlcmUgd291bGQgYmUgYW4gZXJyb3I6CisKK2luc3RhbGw6IGNhbm5vdCBjcmVhdGUgcmVndWxhciBmaWxlICcvdG1wL2ZpbGVBJzogRmlsZSBleGlzdHMKKworVGhpcyBpcyBiZWNhdXNlIG9mIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBjb3B5LmM6CisKKyAgaWYgKCFuZXdfZHN0KQorICAgIHsKKyAgICAgIGlmIChYU1RBVCAoeCwgZHN0X25hbWUsICZkc3Rfc2IpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoZXJybm8gIT0gRU5PRU5UKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcnJvciAoMCwgZXJybm8sIF8oImNhbm5vdCBzdGF0ICVzIiksIHF1b3RlIChkc3RfbmFtZSkpOworICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBuZXdfZHN0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCitYU1RBVCgpIHVzZSBzdGF0KCkgZm9yIGRzdF9uYW1lKHRoZSBkYW5nbGluZyBzeW1saW5rIC90bXAvZmlsZUEpIHdoZW4KK2luc3RhbGwuYyBpbnZva2VzIGl0LCBhbmQgc3RhdCB3aWxsIHNldCBlcnJubyB0byBFTk9FTlQsIGFuZCB0aGVuCituZXdfZHN0IHdpbGwgYmUgc2V0IHRvIHRydWUgd2hpY2ggbWVhbnMgdGhhdCAvdG1wL2ZpbGVBIGRvZXNuJ3QgZXhpc3QsCit0aGVuIHdlIHdpbGwgY3JlYXRlIC90bXAvZmlsZUEgd2l0aG91dCByZW1vdmUgaXQgZmlyc3QsIHNvIHRoZSBlcnJvcgorY29tZXMuCisKK1RoaXMgaXMgZml4ZWQgaW4gYSB3YXkgd2hpY2ggYWRkcyB0aGUgbWVtYmVyIGNtZF9pbnN0YWxsIGluCitzdHJ1Y3QgY3Bfb3B0aW9ucyB0byBtYWtlIHN1cmUgbXkgY2hhbmdlIG9ubHkgYWZmZWN0ZWQgdG8gdGhlIGluc3RhbGwKK2NvbW1hbmQgYW5kIHVzZSBsc3RhdCB0byBmaXggdGhlIHByb2JsZW0uCisgICAgCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworLS0tCisgc3JjL2NvcHkuYyAgICB8ICAgMTAgKysrKysrKysrLQorIHNyYy9jb3B5LmggICAgfCAgICAzICsrKworIHNyYy9pbnN0YWxsLmMgfCAgICAxICsKKyAzIGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvY29weS5jIGIvc3JjL2NvcHkuYworLS0tIGEvc3JjL2NvcHkuYworKysrIGIvc3JjL2NvcHkuYworQEAgLTEwMjksNiArMTAyOSw3IEBAIGNvcHlfaW50ZXJuYWwgKGNoYXIgY29uc3QgKnNyY19uYW1lLCBjaGFyIGNvbnN0ICpkc3RfbmFtZSwKKyAgIGJvb2wgZGVsYXllZF9vazsKKyAgIGJvb2wgY29waWVkX2FzX3JlZ3VsYXIgPSBmYWxzZTsKKyAgIGJvb2wgcHJlc2VydmVfbWV0YWRhdGE7CisrICBpbnQgZHN0X3N0YXRfcmVzdWx0OworIAorICAgaWYgKHgtPm1vdmVfbW9kZSAmJiByZW5hbWVfc3VjY2VlZGVkKQorICAgICAqcmVuYW1lX3N1Y2NlZWRlZCA9IGZhbHNlOworQEAgLTEwNjksNyArMTA3MCwxNCBAQCBjb3B5X2ludGVybmFsIChjaGFyIGNvbnN0ICpzcmNfbmFtZSwgY2hhciBjb25zdCAqZHN0X25hbWUsCisgCisgICBpZiAoIW5ld19kc3QpCisgICAgIHsKKy0gICAgICBpZiAoWFNUQVQgKHgsIGRzdF9uYW1lLCAmZHN0X3NiKSAhPSAwKQorKyAgICAgIGlmICggeC0+Y21kX2luc3RhbGwgJiYgKCB4LT5iYWNrdXBfdHlwZSA9PSBub19iYWNrdXBzKSkKKysgICAgICAgIGRzdF9zdGF0X3Jlc3VsdCA9IGxzdGF0IChkc3RfbmFtZSwgJmRzdF9zYik7CisrICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICBkc3Rfc3RhdF9yZXN1bHQgPSBYU1RBVCAoeCwgZHN0X25hbWUsICZkc3Rfc2IpOworKyAgICAgICAgfQorKworKyAgICAgIGlmIChkc3Rfc3RhdF9yZXN1bHQgIT0gMCkKKyAJeworIAkgIGlmIChlcnJubyAhPSBFTk9FTlQpCisgCSAgICB7CitkaWZmIC0tZ2l0IGEvc3JjL2NvcHkuaCBiL3NyYy9jb3B5LmgKKy0tLSBhL3NyYy9jb3B5LmgKKysrKyBiL3NyYy9jb3B5LmgKK0BAIC0xMTQsNiArMTE0LDkgQEAgc3RydWN0IGNwX29wdGlvbnMKKyAgICAgIElmIHRoYXQgZmFpbHMsIHRoZW4gcmVzb3J0IHRvIGNvcHlpbmcuICAqLworICAgYm9vbCBtb3ZlX21vZGU7CisgCisrICAvKiBGb3IgdGhlIGluc3RhbGwgY29tbWFuZCAqLworKyAgYm9vbCBjbWRfaW5zdGFsbDsKKysKKyAgIC8qIFdoZXRoZXIgdGhpcyBwcm9jZXNzIGhhcyBhcHByb3ByaWF0ZSBwcml2aWxlZ2VzIHRvIGNob3duIGEgZmlsZQorICAgICAgd2hvc2Ugb3duZXIgaXMgbm90IHRoZSBlZmZlY3RpdmUgdXNlciBJRC4gICovCisgICBib29sIGNob3duX3ByaXZpbGVnZXM7CitkaWZmIC0tZ2l0IGEvc3JjL2luc3RhbGwuYyBiL3NyYy9pbnN0YWxsLmMKKy0tLSBhL3NyYy9pbnN0YWxsLmMKKysrKyBiL3NyYy9pbnN0YWxsLmMKK0BAIC0xNDksNiArMTQ5LDcgQEAgY3Bfb3B0aW9uX2luaXQgKHN0cnVjdCBjcF9vcHRpb25zICp4KQorICAgeC0+aGFyZF9saW5rID0gZmFsc2U7CisgICB4LT5pbnRlcmFjdGl2ZSA9IElfVU5TUEVDSUZJRUQ7CisgICB4LT5tb3ZlX21vZGUgPSBmYWxzZTsKKysgIHgtPmNtZF9pbnN0YWxsID0gdHJ1ZTsKKyAgIHgtPmNob3duX3ByaXZpbGVnZXMgPSBjaG93bl9wcml2aWxlZ2VzICgpOworICAgeC0+b25lX2ZpbGVfc3lzdGVtID0gZmFsc2U7CisgICB4LT5wcmVzZXJ2ZV9vd25lcnNoaXAgPSBmYWxzZTsKKy0tIAorMS43LjAuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1maXgtdGV4aW5mby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWZpeC10ZXhpbmZvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZTVhMmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1maXgtdGV4aW5mby5wYXRjaApAQCAtMCwwICsxLDM3NSBAQAorRnJvbSAxNzBiZTQwMjNiYmY5ZTk2OThhNzA5ZTAzMjY1OTQ1NTg4YWM4ZTAxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDI2IE5vdiAyMDEzIDAwOjIxOjUwICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGRvYy9jb3JldXRpbHMudGV4aTogVXNlICdAaXRlbScgaW5zdGVhZCBvZiAnQGl0ZW14JworCitVc2UgJ0BpdGVtJyBpbnN0ZWFkIG9mICdAaXRlbXgnIGluIHNldmVyYWwgcGxhY2VzLCBhcyBUZXhpbmZvIDUgcmVmdXNlcwordG8gcHJvY2VzcyBhbiAnQGl0ZW14JyB0aGF0IGlzIG5vdCBwcmVjZWRlZCBieSBhbiAnQGl0ZW0nLiAgRW5zdXJlIHRoYXQKK25vZGUgZXh0ZW5kZWQgbmFtZXMgaW4gbWVudXMgYW5kIHNlY3Rpb25pbmcgYXJlIGNvbnNpc3RlbnQsIGFuZCB0aGF0CitvcmRlcmluZyBhbmQgcHJlc2VuY2Ugb2Ygbm9kZXMgaW4gbWVudXMgYW5kIGluIHRoZSBhY3R1YWwgdGV4dCBhcmUKK2NvbnNpc3RlbnQgYXMgd2VsbC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbRnJvbTogY29yZXV0aWxzLjc2MjAubjcubmFiYmxlLmNvbSwgYnVnIzExODI4XQorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGRvYy9jb3JldXRpbHMudGV4aSB8IDgyICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0MSBpbnNlcnRpb25zKCspLCA0MSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RvYy9jb3JldXRpbHMudGV4aSBiL2RvYy9jb3JldXRpbHMudGV4aQoraW5kZXggNTg4MTQ3Zi4uMmRhZTNmZSAxMDA2NDQKKy0tLSBhL2RvYy9jb3JldXRpbHMudGV4aQorKysrIGIvZG9jL2NvcmV1dGlscy50ZXhpCitAQCAtNTU1LDcgKzU1NSw3IEBAIHN5bWJvbGljIGxpbmsgdG8gYSBkaXJlY3RvcnkuICBAeHJlZntUYXJnZXQgZGlyZWN0b3J5fS4KKyBAZW5kIG1hY3JvCisgCisgQG1hY3JvIG9wdFNpCistQGl0ZW14IC0tc2kKKytAaXRlbSAtLXNpCisgQG9waW5kZXggLS1zaQorIEBjaW5kZXggU0kgb3V0cHV0CisgQXBwZW5kIGFuIFNJLXN0eWxlIGFiYnJldmlhdGlvbiB0byBlYWNoIHNpemUsIHN1Y2ggYXMgQHNhbXB7TX0gZm9yCitAQCAtNTc4LDcgKzU3OCw3IEBAIFVzZSB0aGUgQG9wdGlvbnstLXNpfSBvcHRpb24gaWYgeW91IHByZWZlciBwb3dlcnMgb2YgMTAwMC4KKyBAZW5kIG1hY3JvCisgCisgQG1hY3JvIG9wdFN0cmlwVHJhaWxpbmdTbGFzaGVzCistQGl0ZW14IEB3e0BrYmR7LS1zdHJpcC10cmFpbGluZy1zbGFzaGVzfX0KKytAaXRlbSBAd3tAa2Jkey0tc3RyaXAtdHJhaWxpbmctc2xhc2hlc319CisgQG9waW5kZXggLS1zdHJpcC10cmFpbGluZy1zbGFzaGVzCisgQGNpbmRleCBzdHJpcHBpbmcgdHJhaWxpbmcgc2xhc2hlcworIFJlbW92ZSBhbnkgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIGVhY2ggQHZhcntzb3VyY2V9IGFyZ3VtZW50LgorQEAgLTI0OTYsNyArMjQ5Niw3IEBAIGJ5IDEwNDg1NzYuCisgSG93ZXZlciwgaWYgQHZhcntufSBzdGFydHMgd2l0aCBhIEBzYW1wey19LAorIHByaW50IGFsbCBidXQgdGhlIGxhc3QgQHZhcntufSBieXRlcyBvZiBlYWNoIGZpbGUuCisgCistQGl0ZW14IC1uIEB2YXJ7bn0KKytAaXRlbSAtbiBAdmFye259CisgQGl0ZW14IC0tbGluZXM9QHZhcntufQorIEBvcGluZGV4IC1uCisgQG9waW5kZXggLS1saW5lcworQEAgLTI2MzMsNyArMjYzMyw3IEBAIFRoaXMgb3B0aW9uIGlzIHRoZSBzYW1lIGFzIEBvcHRpb257LS1mb2xsb3c9bmFtZSAtLXJldHJ5fS4gIFRoYXQgaXMsIHRhaWwKKyB3aWxsIGF0dGVtcHQgdG8gcmVvcGVuIGEgZmlsZSB3aGVuIGl0IGlzIHJlbW92ZWQuICBTaG91bGQgdGhpcyBmYWlsLCB0YWlsCisgd2lsbCBrZWVwIHRyeWluZyB1bnRpbCBpdCBiZWNvbWVzIGFjY2Vzc2libGUgYWdhaW4uCisgCistQGl0ZW14IC0tcmV0cnkKKytAaXRlbSAtLXJldHJ5CisgQG9waW5kZXggLS1yZXRyeQorIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBtYWlubHkgd2hlbiBmb2xsb3dpbmcgYnkgbmFtZSAoaS5lLiwgd2l0aAorIEBvcHRpb257LS1mb2xsb3c9bmFtZX0pLgorQEAgLTI2NDEsNyArMjY0MSw3IEBAIFdpdGhvdXQgdGhpcyBvcHRpb24sIHdoZW4gdGFpbCBlbmNvdW50ZXJzIGEgZmlsZSB0aGF0IGRvZXNuJ3QKKyBleGlzdCBvciBpcyBvdGhlcndpc2UgaW5hY2Nlc3NpYmxlLCBpdCByZXBvcnRzIHRoYXQgZmFjdCBhbmQKKyBuZXZlciBjaGVja3MgaXQgYWdhaW4uCisgCistQGl0ZW14IC0tc2xlZXAtaW50ZXJ2YWw9QHZhcntudW1iZXJ9CisrQGl0ZW0gLS1zbGVlcC1pbnRlcnZhbD1AdmFye251bWJlcn0KKyBAb3BpbmRleCAtLXNsZWVwLWludGVydmFsCisgQ2hhbmdlIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJldHdlZW4gaXRlcmF0aW9ucyAodGhlIGRlZmF1bHQgaXMgMS4wKS4KKyBEdXJpbmcgb25lIGl0ZXJhdGlvbiwgZXZlcnkgc3BlY2lmaWVkIGZpbGUgaXMgY2hlY2tlZCB0byBzZWUgaWYgaXQgaGFzCitAQCAtMjY1MSw3ICsyNjUxLDcgQEAgSGlzdG9yaWNhbCBpbXBsZW1lbnRhdGlvbnMgb2YgQGNvbW1hbmR7dGFpbH0gaGF2ZSByZXF1aXJlZCB0aGF0CisgYW4gYXJiaXRyYXJ5IGZsb2F0aW5nIHBvaW50IG51bWJlciAodXNpbmcgYSBwZXJpb2QgYmVmb3JlIGFueQorIGZyYWN0aW9uYWwgZGlnaXRzKS4KKyAKKy1AaXRlbXggLS1waWQ9QHZhcntwaWR9CisrQGl0ZW0gLS1waWQ9QHZhcntwaWR9CisgQG9waW5kZXggLS1waWQKKyBXaGVuIGZvbGxvd2luZyBieSBuYW1lIG9yIGJ5IGRlc2NyaXB0b3IsIHlvdSBtYXkgc3BlY2lmeSB0aGUgcHJvY2VzcyBJRCwKKyBAdmFye3BpZH0sIG9mIHRoZSBzb2xlIHdyaXRlciBvZiBhbGwgQHZhcntmaWxlfSBhcmd1bWVudHMuICBUaGVuLCBzaG9ydGx5CitAQCAtMjY3NCw3ICsyNjc0LDcgQEAgdGVybWluYXRlIHVudGlsIGxvbmcgYWZ0ZXIgdGhlIHJlYWwgd3JpdGVyIGhhcyB0ZXJtaW5hdGVkLgorIE5vdGUgdGhhdCBAb3B0aW9uey0tcGlkfSBjYW5ub3QgYmUgc3VwcG9ydGVkIG9uIHNvbWUgc3lzdGVtczsgQGNvbW1hbmR7dGFpbH0KKyB3aWxsIHByaW50IGEgd2FybmluZyBpZiB0aGlzIGlzIHRoZSBjYXNlLgorIAorLUBpdGVteCAtLW1heC11bmNoYW5nZWQtc3RhdHM9QHZhcntufQorK0BpdGVtIC0tbWF4LXVuY2hhbmdlZC1zdGF0cz1AdmFye259CisgQG9waW5kZXggLS1tYXgtdW5jaGFuZ2VkLXN0YXRzCisgV2hlbiB0YWlsaW5nIGEgZmlsZSBieSBuYW1lLCBpZiB0aGVyZSBoYXZlIGJlZW4gQHZhcntufSAoZGVmYXVsdAorIG49QHZhbHVle0RFRkFVTFRfTUFYX05fVU5DSEFOR0VEX1NUQVRTX0JFVFdFRU5fT1BFTlN9KSBjb25zZWN1dGl2ZQorQEAgLTI2ODYsNyArMjY4Niw3IEBAIG51bWJlciBvZiBzZWNvbmRzIGJldHdlZW4gd2hlbiB0YWlsIHByaW50cyB0aGUgbGFzdCBwcmUtcm90YXRpb24gbGluZXMKKyBhbmQgd2hlbiBpdCBwcmludHMgdGhlIGxpbmVzIHRoYXQgaGF2ZSBhY2N1bXVsYXRlZCBpbiB0aGUgbmV3IGxvZyBmaWxlLgorIFRoaXMgb3B0aW9uIGlzIG1lYW5pbmdmdWwgb25seSB3aGVuIGZvbGxvd2luZyBieSBuYW1lLgorIAorLUBpdGVteCAtbiBAdmFye259CisrQGl0ZW0gLW4gQHZhcntufQorIEBpdGVteCAtLWxpbmVzPUB2YXJ7bn0KKyBAb3BpbmRleCAtbgorIEBvcGluZGV4IC0tbGluZXMKK0BAIC0yODE3LDcgKzI4MTcsNyBAQCBvcHRpb24uCisgQG9waW5kZXggLS1udW1lcmljLXN1ZmZpeGVzCisgVXNlIGRpZ2l0cyBpbiBzdWZmaXhlcyByYXRoZXIgdGhhbiBsb3dlci1jYXNlIGxldHRlcnMuCisgCistQGl0ZW14IC0tdmVyYm9zZQorK0BpdGVtIC0tdmVyYm9zZQorIEBvcGluZGV4IC0tdmVyYm9zZQorIFdyaXRlIGEgZGlhZ25vc3RpYyB0byBzdGFuZGFyZCBlcnJvciBqdXN0IGJlZm9yZSBlYWNoIG91dHB1dCBmaWxlIGlzIG9wZW5lZC4KKyAKK0BAIC0zMDU1LDcgKzMwNTUsNyBAQCBQcmludCBvbmx5IHRoZSBuZXdsaW5lIGNvdW50cy4KKyBAb3BpbmRleCAtLW1heC1saW5lLWxlbmd0aAorIFByaW50IG9ubHkgdGhlIG1heGltdW0gbGluZSBsZW5ndGhzLgorIAorLUBpdGVteCAtLWZpbGVzMC1mcm9tPUB2YXJ7RklMRX0KKytAaXRlbSAtLWZpbGVzMC1mcm9tPUB2YXJ7RklMRX0KKyBAb3BpbmRleCAtLWZpbGVzMC1mcm9tPUB2YXJ7RklMRX0KKyBAY2luZGV4IGluY2x1ZGluZyBmaWxlcyBmcm9tIEBjb21tYW5ke2R1fQorIFJhdGhlciB0aGFuIHByb2Nlc3NpbmcgZmlsZXMgbmFtZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgcHJvY2VzcyB0aG9zZQorQEAgLTMyNTAsNyArMzI1MCw3IEBAIGFuIE1ENSBjaGVja3N1bSBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgYXNzb2NpYXRlZCBmaWxlLCBvciBpZiBubyB2YWxpZAorIGxpbmUgaXMgZm91bmQsIEBjb21tYW5ke21kNXN1bX0gZXhpdHMgd2l0aCBub256ZXJvIHN0YXR1cy4gIE90aGVyd2lzZSwKKyBpdCBleGl0cyBzdWNjZXNzZnVsbHkuCisgCistQGl0ZW14IC0tc3RhdHVzCisrQGl0ZW0gLS1zdGF0dXMKKyBAb3BpbmRleCAtLXN0YXR1cworIEBjaW5kZXggdmVyaWZ5aW5nIE1ENSBjaGVja3N1bXMKKyBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgb25seSB3aGVuIHZlcmlmeWluZyBjaGVja3N1bXMuCitAQCAtNTgzNyw3ICs1ODM3LDcgQEAgY29tbWFuZCBsaW5lIHVubGVzcyB0aGUgQG9wdGlvbnstLWRlcmVmZXJlbmNlLWNvbW1hbmQtbGluZX0gKEBvcHRpb257LUh9KSwKKyBJZiBhIGNvbW1hbmQgbGluZSBhcmd1bWVudCBzcGVjaWZpZXMgYSBzeW1ib2xpYyBsaW5rLCBzaG93IGluZm9ybWF0aW9uCisgZm9yIHRoZSBmaWxlIHRoZSBsaW5rIHJlZmVyZW5jZXMgcmF0aGVyIHRoYW4gZm9yIHRoZSBsaW5rIGl0c2VsZi4KKyAKKy1AaXRlbXggLS1kZXJlZmVyZW5jZS1jb21tYW5kLWxpbmUtc3ltbGluay10by1kaXIKKytAaXRlbSAtLWRlcmVmZXJlbmNlLWNvbW1hbmQtbGluZS1zeW1saW5rLXRvLWRpcgorIEBvcGluZGV4IC0tZGVyZWZlcmVuY2UtY29tbWFuZC1saW5lLXN5bWxpbmstdG8tZGlyCisgQGNpbmRleCBzeW1ib2xpYyBsaW5rcywgZGVyZWZlcmVuY2luZworIERvIG5vdCBkZXJlZmVyZW5jZSBzeW1ib2xpYyBsaW5rcywgd2l0aCBvbmUgZXhjZXB0aW9uOgorQEAgLTcwMTUsMTUgKzcwMTUsMTUgQEAgSWYgc3BlY2lmaWVkLCB0aGUgQHZhcnthdHRyaWJ1dGVfbGlzdH0gbXVzdCBiZSBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0Cisgb2Ygb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBzdHJpbmdzOgorIAorIEB0YWJsZSBAc2FtcAorLUBpdGVteCBtb2RlCisrQGl0ZW0gbW9kZQorIFByZXNlcnZlIHRoZSBmaWxlIG1vZGUgYml0cyBhbmQgYWNjZXNzIGNvbnRyb2wgbGlzdHMuCistQGl0ZW14IG93bmVyc2hpcAorK0BpdGVtIG93bmVyc2hpcAorIFByZXNlcnZlIHRoZSBvd25lciBhbmQgZ3JvdXAuICBPbiBtb3N0IG1vZGVybiBzeXN0ZW1zLAorIG9ubHkgdXNlcnMgd2l0aCBhcHByb3ByaWF0ZSBwcml2aWxlZ2VzIG1heSBjaGFuZ2UgdGhlIG93bmVyIG9mIGEgZmlsZSwKKyBhbmQgb3JkaW5hcnkgdXNlcnMKKyBtYXkgcHJlc2VydmUgdGhlIGdyb3VwIG93bmVyc2hpcCBvZiBhIGZpbGUgb25seSBpZiB0aGV5IGhhcHBlbiB0byBiZQorIGEgbWVtYmVyIG9mIHRoZSBkZXNpcmVkIGdyb3VwLgorLUBpdGVteCB0aW1lc3RhbXBzCisrQGl0ZW0gdGltZXN0YW1wcworIFByZXNlcnZlIHRoZSB0aW1lcyBvZiBsYXN0IGFjY2VzcyBhbmQgbGFzdCBtb2RpZmljYXRpb24sIHdoZW4gcG9zc2libGUuCisgSW4gZ2VuZXJhbCwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHByZXNlcnZlIHRoZXNlIGF0dHJpYnV0ZXMKKyB3aGVuIHRoZSBhZmZlY3RlZCBmaWxlIGlzIGEgc3ltYm9saWMgbGluay4KK0BAIC03MDMxLDEyICs3MDMxLDEyIEBAIEhvd2V2ZXIsIEZyZWVCU0Qgbm93IHByb3ZpZGVzIHRoZSBAY29kZXtsdXRpbWVzfSBmdW5jdGlvbiwgd2hpY2ggbWFrZXMKKyBpdCBwb3NzaWJpbGUgZXZlbiBmb3Igc3ltYm9saWMgbGlua3MuICBIb3dldmVyLCB0aGlzIGltcGxlbWVudGF0aW9uIGRvZXMKKyBub3QgeWV0IHRha2UgYWR2YW50YWdlIG9mIHRoYXQuCisgQGMgRklYTUU6IG9uY2Ugd2UgcHJvdmlkZSBsdXRpbWVzIHN1cHBvcnQsIHVwZGF0ZSB0aGUgYWJvdmUuCistQGl0ZW14IGxpbmtzCisrQGl0ZW0gbGlua3MKKyBQcmVzZXJ2ZSBpbiB0aGUgZGVzdGluYXRpb24gZmlsZXMKKyBhbnkgbGlua3MgYmV0d2VlbiBjb3JyZXNwb25kaW5nIHNvdXJjZSBmaWxlcy4KKyBAYyBHaXZlIGV4YW1wbGVzIGlsbHVzdHJhdGluZyBob3cgaGFyZCBsaW5rcyBhcmUgcHJlc2VydmVkLgorIEBjIEFsc28sIHNob3cgaG93IHNvZnQgbGlua3MgbWFwIHRvIGhhcmQgbGlua3Mgd2l0aCAtTCBhbmQgLUguCistQGl0ZW14IGFsbAorK0BpdGVtIGFsbAorIFByZXNlcnZlIGFsbCBmaWxlIGF0dHJpYnV0ZXMuCisgRXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIGFsbCBvZiB0aGUgYWJvdmUuCisgQGVuZCB0YWJsZQorQEAgLTcwNDksMTIgKzcwNDksMTIgQEAgbW9kZSBiaXRzIG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBmaWxlLCBtaW51cyB0aGUgYml0cyBzZXQgaW4gdGhlCisgdW1hc2sgYW5kIG1pbnVzIHRoZSBzZXQtdXNlci1JRCBhbmQgc2V0LWdyb3VwLUlEIGJpdHMuCisgQHhyZWZ7RmlsZSBwZXJtaXNzaW9uc30uCisgCistQGl0ZW14IEB3e0BrYmR7LS1uby1wcmVzZXJ2ZX09QHZhcnthdHRyaWJ1dGVfbGlzdH19CisrQGl0ZW0gQHd7QGtiZHstLW5vLXByZXNlcnZlfT1AdmFye2F0dHJpYnV0ZV9saXN0fX0KKyBAY2luZGV4IGZpbGUgaW5mb3JtYXRpb24sIHByZXNlcnZpbmcKKyBEbyBub3QgcHJlc2VydmUgdGhlIHNwZWNpZmllZCBhdHRyaWJ1dGVzLiAgVGhlIEB2YXJ7YXR0cmlidXRlX2xpc3R9CisgaGFzIHRoZSBzYW1lIGZvcm0gYXMgZm9yIEBvcHRpb257LS1wcmVzZXJ2ZX0uCisgCistQGl0ZW14IC0tcGFyZW50cworK0BpdGVtIC0tcGFyZW50cworIEBvcGluZGV4IC0tcGFyZW50cworIEBjaW5kZXggcGFyZW50IGRpcmVjdG9yaWVzIGFuZCBAY29tbWFuZHtjcH0KKyBGb3JtIHRoZSBuYW1lIG9mIGVhY2ggZGVzdGluYXRpb24gZmlsZSBieSBhcHBlbmRpbmcgdG8gdGhlIHRhcmdldAorQEAgLTcwNzAsNyArNzA3MCw3IEBAIGNwIC0tcGFyZW50cyBhL2IvYyBleGlzdGluZ19kaXIKKyBjb3BpZXMgdGhlIGZpbGUgQGZpbGV7YS9iL2N9IHRvIEBmaWxle2V4aXN0aW5nX2Rpci9hL2IvY30sIGNyZWF0aW5nCisgYW55IG1pc3NpbmcgaW50ZXJtZWRpYXRlIGRpcmVjdG9yaWVzLgorIAorLUBpdGVteCBAd3tAa2Jkey0tcmVwbHl9PUB2YXJ7aG93fX0KKytAaXRlbSBAd3tAa2Jkey0tcmVwbHl9PUB2YXJ7aG93fX0KKyBAb3BpbmRleCAtLXJlcGx5CisgQGNpbmRleCBpbnRlcmFjdGl2aXR5CisgQGMgRklYTUU6IHJlbW92ZSBpbiAyMDA4CitAQCAtNzc0Miw3ICs3NzQyLDcgQEAgUHJvbXB0IHdoZXRoZXIgdG8gb3ZlcndyaXRlIGVhY2ggZXhpc3RpbmcgZGVzdGluYXRpb24gZmlsZSwgcmVnYXJkbGVzcworIG9mIGl0cyBwZXJtaXNzaW9ucy4KKyBJZiB0aGUgcmVzcG9uc2UgaXMgbm90IGFmZmlybWF0aXZlLCB0aGUgZmlsZSBpcyBza2lwcGVkLgorIAorLUBpdGVteCBAd3tAa2Jkey0tcmVwbHl9PUB2YXJ7aG93fX0KKytAaXRlbSBAd3tAa2Jkey0tcmVwbHl9PUB2YXJ7aG93fX0KKyBAb3BpbmRleCAtLXJlcGx5CisgQGNpbmRleCBpbnRlcmFjdGl2aXR5CisgQGMgRklYTUU6IHJlbW92ZSBpbiAyMDA4CitAQCAtNzg0Nyw3ICs3ODQ3LDcgQEAgZmlsZXMgYXJlIG5hbWVkIG9yIGlmIGEgcmVjdXJzaXZlIHJlbW92YWwgaXMgcmVxdWVzdGVkLiAgSWdub3JlIGFueQorIHByZXZpb3VzIEBvcHRpb257LS1mb3JjZX0gKEBvcHRpb257LWZ9KSBvcHRpb24uICBFcXVpdmFsZW50IHRvCisgQG9wdGlvbnstLWludGVyYWN0aXZlPW9uY2V9LgorIAorLUBpdGVteCAtLWludGVyYWN0aXZlIFs9QHZhcnt3aGVufV0KKytAaXRlbSAtLWludGVyYWN0aXZlIFs9QHZhcnt3aGVufV0KKyBAb3BpbmRleCAtLWludGVyYWN0aXZlCisgU3BlY2lmeSB3aGVuIHRvIGlzc3VlIGFuIGludGVyYWN0aXZlIHByb21wdC4gIEB2YXJ7d2hlbn0gbWF5IGJlCisgb21pdHRlZCwgb3Igb25lIG9mOgorQEAgLTc4NjYsNyArNzg2Niw3IEBAIHJlbW92YWwgaXMgcmVxdWVzdGVkLiAgRXF1aXZhbGVudCB0byBAb3B0aW9uey1JfS4KKyBTcGVjaWZ5aW5nIEBvcHRpb257LS1pbnRlcmFjdGl2ZX0gYW5kIG5vIEB2YXJ7d2hlbn0gaXMgZXF1aXZhbGVudCB0bworIEBvcHRpb257LS1pbnRlcmFjdGl2ZT1hbHdheXN9LgorIAorLUBpdGVteCAtLW9uZS1maWxlLXN5c3RlbQorK0BpdGVtIC0tb25lLWZpbGUtc3lzdGVtCisgQG9waW5kZXggLS1vbmUtZmlsZS1zeXN0ZW0KKyBAY2luZGV4IG9uZSBmaWxlIHN5c3RlbSwgcmVzdHJpY3RpbmcgQGNvbW1hbmR7cm19IHRvCisgV2hlbiByZW1vdmluZyBhIGhpZXJhcmNoeSByZWN1cnNpdmVseSwgc2tpcCBhbnkgZGlyZWN0b3J5IHRoYXQgaXMgb24gYQorQEAgLTc4ODQsNyArNzg4NCw3IEBAIHdhcm4gYWJvdXQgYW5kIHNraXAgZGlyZWN0b3JpZXMgb24gb3RoZXIgZmlsZSBzeXN0ZW1zLgorIE9mIGNvdXJzZSwgdGhpcyB3aWxsIG5vdCBzYXZlIHlvdXIgQGZpbGV7L2hvbWV9IGlmIGl0IGFuZCB5b3VyCisgY2hyb290IGhhcHBlbiB0byBiZSBvbiB0aGUgc2FtZSBmaWxlIHN5c3RlbS4KKyAKKy1AaXRlbXggLS1wcmVzZXJ2ZS1yb290CisrQGl0ZW0gLS1wcmVzZXJ2ZS1yb290CisgQG9waW5kZXggLS1wcmVzZXJ2ZS1yb290CisgQGNpbmRleCByb290IGRpcmVjdG9yeSwgZGlzYWxsb3cgcmVjdXJzaXZlIGRlc3RydWN0aW9uCisgRmFpbCB1cG9uIGFueSBhdHRlbXB0IHRvIHJlbW92ZSB0aGUgcm9vdCBkaXJlY3RvcnksIEBmaWxley99LAorQEAgLTc4OTIsNyArNzg5Miw3IEBAIHdoZW4gdXNlZCB3aXRoIHRoZSBAb3B0aW9uey0tcmVjdXJzaXZlfSBvcHRpb24uCisgVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci4KKyBAeHJlZntUcmVhdGluZyAvIHNwZWNpYWxseX0uCisgCistQGl0ZW14IC0tbm8tcHJlc2VydmUtcm9vdAorK0BpdGVtIC0tbm8tcHJlc2VydmUtcm9vdAorIEBvcGluZGV4IC0tbm8tcHJlc2VydmUtcm9vdAorIEBjaW5kZXggcm9vdCBkaXJlY3RvcnksIGFsbG93IHJlY3Vyc2l2ZSBkZXN0cnVjdGlvbgorIERvIG5vdCB0cmVhdCBAZmlsZXsvfSBzcGVjaWFsbHkgd2hlbiByZW1vdmluZyByZWN1cnNpdmVseS4KK0BAIC04ODc0LDcgKzg4NzQsNyBAQCBhY3R1YWxseSBjaGFuZ2VzLgorIERvIG5vdCBwcmludCBlcnJvciBtZXNzYWdlcyBhYm91dCBmaWxlcyB3aG9zZSBvd25lcnNoaXAgY2Fubm90IGJlCisgY2hhbmdlZC4KKyAKKy1AaXRlbXggQHd7QGtiZHstLWZyb219PUB2YXJ7b2xkLW93bmVyfX0KKytAaXRlbSBAd3tAa2Jkey0tZnJvbX09QHZhcntvbGQtb3duZXJ9fQorIEBvcGluZGV4IC0tZnJvbQorIEBjaW5kZXggc3ltYm9saWMgbGlua3MsIGNoYW5naW5nIG93bmVyCisgQ2hhbmdlIGEgQHZhcntmaWxlfSdzIG93bmVyc2hpcCBvbmx5IGlmIGl0IGhhcyBjdXJyZW50IGF0dHJpYnV0ZXMgc3BlY2lmaWVkCitAQCAtODkyOCwxNCArODkyOCwxNCBAQCBpcyBhIHN5bWJvbGljIGxpbmsuCisgQnkgZGVmYXVsdCwgbm8gZGlhZ25vc3RpYyBpcyBpc3N1ZWQgZm9yIHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkCisgZHVyaW5nIGEgcmVjdXJzaXZlIHRyYXZlcnNhbCwgYnV0IHNlZSBAb3B0aW9uey0tdmVyYm9zZX0uCisgCistQGl0ZW14IC0tcHJlc2VydmUtcm9vdAorK0BpdGVtIC0tcHJlc2VydmUtcm9vdAorIEBvcGluZGV4IC0tcHJlc2VydmUtcm9vdAorIEBjaW5kZXggcm9vdCBkaXJlY3RvcnksIGRpc2FsbG93IHJlY3Vyc2l2ZSBtb2RpZmljYXRpb24KKyBGYWlsIHVwb24gYW55IGF0dGVtcHQgdG8gcmVjdXJzaXZlbHkgY2hhbmdlIHRoZSByb290IGRpcmVjdG9yeSwgQGZpbGV7L30uCisgV2l0aG91dCBAb3B0aW9uey0tcmVjdXJzaXZlfSwgdGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdC4KKyBAeHJlZntUcmVhdGluZyAvIHNwZWNpYWxseX0uCisgCistQGl0ZW14IC0tbm8tcHJlc2VydmUtcm9vdAorK0BpdGVtIC0tbm8tcHJlc2VydmUtcm9vdAorIEBvcGluZGV4IC0tbm8tcHJlc2VydmUtcm9vdAorIEBjaW5kZXggcm9vdCBkaXJlY3RvcnksIGFsbG93IHJlY3Vyc2l2ZSBtb2RpZmljYXRpb24KKyBDYW5jZWwgdGhlIGVmZmVjdCBvZiBhbnkgcHJlY2VkaW5nIEBvcHRpb257LS1wcmVzZXJ2ZS1yb290fSBvcHRpb24uCitAQCAtOTA1NCwxNCArOTA1NCwxNCBAQCBpcyBhIHN5bWJvbGljIGxpbmsuCisgQnkgZGVmYXVsdCwgbm8gZGlhZ25vc3RpYyBpcyBpc3N1ZWQgZm9yIHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkCisgZHVyaW5nIGEgcmVjdXJzaXZlIHRyYXZlcnNhbCwgYnV0IHNlZSBAb3B0aW9uey0tdmVyYm9zZX0uCisgCistQGl0ZW14IC0tcHJlc2VydmUtcm9vdAorK0BpdGVtIC0tcHJlc2VydmUtcm9vdAorIEBvcGluZGV4IC0tcHJlc2VydmUtcm9vdAorIEBjaW5kZXggcm9vdCBkaXJlY3RvcnksIGRpc2FsbG93IHJlY3Vyc2l2ZSBtb2RpZmljYXRpb24KKyBGYWlsIHVwb24gYW55IGF0dGVtcHQgdG8gcmVjdXJzaXZlbHkgY2hhbmdlIHRoZSByb290IGRpcmVjdG9yeSwgQGZpbGV7L30uCisgV2l0aG91dCBAb3B0aW9uey0tcmVjdXJzaXZlfSwgdGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdC4KKyBAeHJlZntUcmVhdGluZyAvIHNwZWNpYWxseX0uCisgCistQGl0ZW14IC0tbm8tcHJlc2VydmUtcm9vdAorK0BpdGVtIC0tbm8tcHJlc2VydmUtcm9vdAorIEBvcGluZGV4IC0tbm8tcHJlc2VydmUtcm9vdAorIEBjaW5kZXggcm9vdCBkaXJlY3RvcnksIGFsbG93IHJlY3Vyc2l2ZSBtb2RpZmljYXRpb24KKyBDYW5jZWwgdGhlIGVmZmVjdCBvZiBhbnkgcHJlY2VkaW5nIEBvcHRpb257LS1wcmVzZXJ2ZS1yb290fSBvcHRpb24uCitAQCAtOTE3NSwxNCArOTE3NSwxNCBAQCBhY3R1YWxseSBjaGFuZ2VzLgorIERvIG5vdCBwcmludCBlcnJvciBtZXNzYWdlcyBhYm91dCBmaWxlcyB3aG9zZSBwZXJtaXNzaW9ucyBjYW5ub3QgYmUKKyBjaGFuZ2VkLgorIAorLUBpdGVteCAtLXByZXNlcnZlLXJvb3QKKytAaXRlbSAtLXByZXNlcnZlLXJvb3QKKyBAb3BpbmRleCAtLXByZXNlcnZlLXJvb3QKKyBAY2luZGV4IHJvb3QgZGlyZWN0b3J5LCBkaXNhbGxvdyByZWN1cnNpdmUgbW9kaWZpY2F0aW9uCisgRmFpbCB1cG9uIGFueSBhdHRlbXB0IHRvIHJlY3Vyc2l2ZWx5IGNoYW5nZSB0aGUgcm9vdCBkaXJlY3RvcnksIEBmaWxley99LgorIFdpdGhvdXQgQG9wdGlvbnstLXJlY3Vyc2l2ZX0sIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QuCisgQHhyZWZ7VHJlYXRpbmcgLyBzcGVjaWFsbHl9LgorIAorLUBpdGVteCAtLW5vLXByZXNlcnZlLXJvb3QKKytAaXRlbSAtLW5vLXByZXNlcnZlLXJvb3QKKyBAb3BpbmRleCAtLW5vLXByZXNlcnZlLXJvb3QKKyBAY2luZGV4IHJvb3QgZGlyZWN0b3J5LCBhbGxvdyByZWN1cnNpdmUgbW9kaWZpY2F0aW9uCisgQ2FuY2VsIHRoZSBlZmZlY3Qgb2YgYW55IHByZWNlZGluZyBAb3B0aW9uey0tcHJlc2VydmUtcm9vdH0gb3B0aW9uLgorQEAgLTk2MDMsNyArOTYwMyw3IEBAIFRoZSBwcm9ncmFtIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBvcHRpb25zLiAgQWxzbyBzZWUgQHJlZntDb21tb24gb3B0aW9uc30uCisgQG9waW5kZXggLS1hbGwKKyBTaG93IGNvdW50cyBmb3IgYWxsIGZpbGVzLCBub3QganVzdCBkaXJlY3Rvcmllcy4KKyAKKy1AaXRlbXggLS1hcHBhcmVudC1zaXplCisrQGl0ZW0gLS1hcHBhcmVudC1zaXplCisgQG9waW5kZXggLS1hcHBhcmVudC1zaXplCisgUHJpbnQgYXBwYXJlbnQgc2l6ZXMsIHJhdGhlciB0aGFuIGRpc2sgdXNhZ2UuICBUaGUgYXBwYXJlbnQgc2l6ZSBvZiBhCisgZmlsZSBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlcG9ydGVkIGJ5IEBjb2Rle3djIC1jfSBvbiByZWd1bGFyIGZpbGVzLAorQEAgLTk2NTQsNyArOTY1NCw3IEBAIERvZXMgbm90IGFmZmVjdCBvdGhlciBzeW1ib2xpYyBsaW5rcy4gIFRoaXMgaXMgaGVscGZ1bCBmb3IgZmluZGluZworIG91dCB0aGUgZGlzayB1c2FnZSBvZiBkaXJlY3Rvcmllcywgc3VjaCBhcyBAZmlsZXsvdXNyL3RtcH0sIHdoaWNoCisgYXJlIG9mdGVuIHN5bWJvbGljIGxpbmtzLgorIAorLUBpdGVteCAtLWZpbGVzMC1mcm9tPUB2YXJ7RklMRX0KKytAaXRlbSAtLWZpbGVzMC1mcm9tPUB2YXJ7RklMRX0KKyBAb3BpbmRleCAtLWZpbGVzMC1mcm9tPUB2YXJ7RklMRX0KKyBAY2luZGV4IGluY2x1ZGluZyBmaWxlcyBmcm9tIEBjb21tYW5ke2R1fQorIFJhdGhlciB0aGFuIHByb2Nlc3NpbmcgZmlsZXMgbmFtZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgcHJvY2VzcyB0aG9zZQorQEAgLTk3MzMsNyArOTczMyw3IEBAIE91dHB1dCBhIG51bGwgYnl0ZSBhdCB0aGUgZW5kIG9mIGVhY2ggbGluZSwgcmF0aGVyIHRoYW4gYSBuZXdsaW5lLgorIFRoaXMgb3B0aW9uIGVuYWJsZXMgb3RoZXIgcHJvZ3JhbXMgdG8gcGFyc2UgdGhlIG91dHB1dCBvZiBAY29tbWFuZHtkdX0KKyBldmVuIHdoZW4gdGhhdCBvdXRwdXQgd291bGQgY29udGFpbiBmaWxlIG5hbWVzIHdpdGggZW1iZWRkZWQgbmV3bGluZXMuCisgCistQGl0ZW14IC0tc2kKKytAaXRlbSAtLXNpCisgQG9waW5kZXggLS1zaQorIEBjaW5kZXggU0kgb3V0cHV0CisgQXBwZW5kIGFuIFNJLXN0eWxlIGFiYnJldmlhdGlvbiB0byBlYWNoIHNpemUsIHN1Y2ggYXMgQHNhbXB7TUJ9IGZvcgorQEAgLTk3NTQsMTMgKzk3NTQsMTMgQEAgRGlzcGxheSBvbmx5IGEgdG90YWwgZm9yIGVhY2ggYXJndW1lbnQuCisgUmVwb3J0IHRoZSBzaXplIG9mIGVhY2ggZGlyZWN0b3J5IHNlcGFyYXRlbHksIG5vdCBpbmNsdWRpbmcgdGhlIHNpemVzCisgb2Ygc3ViZGlyZWN0b3JpZXMuCisgCistQGl0ZW14IC0tdGltZQorK0BpdGVtIC0tdGltZQorIEBvcGluZGV4IC0tdGltZQorIEBjaW5kZXggbGFzdCBtb2RpZmllZCBkYXRlcywgZGlzcGxheWluZyBpbiBAY29tbWFuZHtkdX0KKyBTaG93IHRpbWUgb2YgdGhlIG1vc3QgcmVjZW50IG1vZGlmaWNhdGlvbiBvZiBhbnkgZmlsZSBpbiB0aGUgZGlyZWN0b3J5LAorIG9yIGFueSBvZiBpdHMgc3ViZGlyZWN0b3JpZXMuCisgCistQGl0ZW14IC0tdGltZT1jdGltZQorK0BpdGVtIC0tdGltZT1jdGltZQorIEBpdGVteCAtLXRpbWU9c3RhdHVzCisgQGl0ZW14IC0tdGltZT11c2UKKyBAb3BpbmRleCAtLXRpbWUKK0BAIC05NzcwLDcgKzk3NzAsNyBAQCBvciBhbnkgb2YgaXRzIHN1YmRpcmVjdG9yaWVzLgorIFNob3cgdGhlIG1vc3QgcmVjZW50IHN0YXR1cyBjaGFuZ2UgdGltZSAodGhlIEBzYW1we2N0aW1lfSBpbiB0aGUgaW5vZGUpIG9mCisgYW55IGZpbGUgaW4gdGhlIGRpcmVjdG9yeSwgaW5zdGVhZCBvZiB0aGUgbW9kaWZpY2F0aW9uIHRpbWUuCisgCistQGl0ZW14IC0tdGltZT1hdGltZQorK0BpdGVtIC0tdGltZT1hdGltZQorIEBpdGVteCAtLXRpbWU9YWNjZXNzCisgQG9waW5kZXggLS10aW1lCisgQG9waW5kZXggYXRpbWVAcnssIHNob3cgdGhlIG1vc3QgcmVjZW50fQorQEAgLTk5MTEsNyArOTkxMSw3IEBAICQgc3RhdCAtLWZvcm1hdD0lZDolaSAvIC91c3IKKyAyMDU3OjIKKyBAZW5kIGV4YW1wbGUKKyAKKy1AaXRlbXggLS1wcmludGY9QHZhcntmb3JtYXR9CisrQGl0ZW0gLS1wcmludGY9QHZhcntmb3JtYXR9CisgQG9waW5kZXggLS1wcmludGY9QHZhcntmb3JtYXR9CisgQGNpbmRleCBvdXRwdXQgZm9ybWF0CisgVXNlIEB2YXJ7Zm9ybWF0fSByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBmb3JtYXQuCitAQCAtMTIyNDAsNyArMTIyNDAsNyBAQCBPdmVycmlkZXMgYWxsIG90aGVyIG9wdGlvbnMuCisgQG9waW5kZXggLXMKKyBJZ25vcmVkOyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIHZlcnNpb25zIG9mIEBjb21tYW5ke3dob30uCisgCistQGl0ZW14IC11CisrQGl0ZW0gLXUKKyBAb3BpbmRleCAtdQorIEBjaW5kZXggaWRsZSB0aW1lCisgQWZ0ZXIgdGhlIGxvZ2luIHRpbWUsIHByaW50IHRoZSBudW1iZXIgb2YgaG91cnMgYW5kIG1pbnV0ZXMgdGhhdCB0aGUKK0BAIC0xMjI1NCw3ICsxMjI1NCw3IEBAIHVzZXIgaGFzIGJlZW4gaWRsZS4gIEBzYW1wey59IG1lYW5zIHRoZSB1c2VyIHdhcyBhY3RpdmUgaW4gdGhlIGxhc3QgbWludXRlLgorIExpc3Qgb25seSB0aGUgZW50cmllcyB0aGF0IGNvcnJlc3BvbmQgdG8gcHJvY2Vzc2VzIHZpYSB3aGljaCB0aGUKKyBzeXN0ZW0gaXMgd2FpdGluZyBmb3IgYSB1c2VyIHRvIGxvZ2luLiAgVGhlIHVzZXIgbmFtZSBpcyBhbHdheXMgQHNhbXB7TE9HSU59LgorIAorLUBpdGVteCAtLWxvb2t1cAorK0BpdGVtIC0tbG9va3VwCisgQG9waW5kZXggLS1sb29rdXAKKyBBdHRlbXB0IHRvIGNhbm9uaWNhbGl6ZSBob3N0bmFtZXMgZm91bmQgaW4gdXRtcCB0aHJvdWdoIGEgRE5TIGxvb2t1cC4gIFRoaXMKKyBpcyBub3QgdGhlIGRlZmF1bHQgYmVjYXVzZSBpdCBjYW4gY2F1c2Ugc2lnbmlmaWNhbnQgZGVsYXlzIG9uIHN5c3RlbXMgd2l0aAorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWkxOG4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1pMThuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MzcyMjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1pMThuLnBhdGNoCkBAIC0wLDAgKzEsNDA1MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsZWdhY3kgdmVyc2lvbl0KKworVGhpcyBwYXRjaCB3YXMgaW1wb3J0ZWQgZnJvbSB0aGUgRmVkb3JhIENvcmUgOCBjb3JldXRpbHMtNi45LTkgcGFja2FnZS4KKworVGhlIHBhY2thZ2UgaXMgc3RhdGVkIGFzIGJlaW5nIExpY2Vuc2VkIGFzIEdQTHYyKy4KKworVGhlIGNvbW1lbnQgaW5kaWNhdGVzIHRoYXQgdGhlIHB1cnBvc2UgaXMgbGluMThudXgvbHNiIGNvbXBsaWFuY2UuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworLS0tIC9kZXYvbnVsbAkyMDA3LTAzLTAxIDA5OjE2OjM5LjIxOTQwOTkwOSArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3Rlc3RzL3NvcnQvc29ydC1tYi10ZXN0cwkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw1OCBAQAorKyMhIC9iaW4vc2gKKytjYXNlICQjIGluCisrICAwKSB4eD0nLi4vLi4vc3JjL3NvcnQnOzsKKysgICopIHh4PSIkMSI7OworK2VzYWMKKyt0ZXN0ICIkVkVSQk9TRSIgJiYgZWNobz1lY2hvIHx8IGVjaG89OgorKyRlY2hvIHRlc3RpbmcgcHJvZ3JhbTogJHh4CisrZXJyb3JzPTAKKyt0ZXN0ICIkc3JjZGlyIiB8fCBzcmNkaXI9LgorK3Rlc3QgIiRWRVJCT1NFIiAmJiAkeHggLS12ZXJzaW9uIDI+IC9kZXYvbnVsbAorKworK2V4cG9ydCBMQ19BTEw9ZW5fVVMuVVRGLTgKKytsb2NhbGUgLWsgTENfQ1RZUEUgMj4mMSB8IGdyZXAgLXEgY2hhcm1hcC4qVVRGLTggfHwgZXhpdCA3NworK2Vycm9ycz0wCisrCisrJHh4IC10IO+8oCAtazIgLW4gbWIxLkkgPiBtYjEuTworK2NvZGU9JD8KKytpZiB0ZXN0ICRjb2RlICE9IDA7IHRoZW4KKysgICRlY2hvICJUZXN0IG1iMSBmYWlsZWQ6ICR4eCByZXR1cm4gY29kZSAkY29kZSBkaWZmZXJzIGZyb20gZXhwZWN0ZWQgdmFsdWUgMCIgMT4mMgorKyAgZXJyb3JzPWBleHByICRlcnJvcnMgKyAxYAorK2Vsc2UKKysgIGNtcCBtYjEuTyAkc3JjZGlyL21iMS5YID4gL2Rldi9udWxsIDI+JjEKKysgIGNhc2UgJD8gaW4KKysgICAgMCkgaWYgdGVzdCAiJFZFUkJPU0UiOyB0aGVuICRlY2hvICJwYXNzZWQgbWIxIjsgZmk7OworKyAgICAxKSAkZWNobyAiVGVzdCBtYjEgZmFpbGVkOiBmaWxlcyBtYjEuTyBhbmQgJHNyY2Rpci9tYjEuWCBkaWZmZXIiIDE+JjIKKysgICAgICAgKGRpZmYgLWMgbWIxLk8gJHNyY2Rpci9tYjEuWCkgMj4gL2Rldi9udWxsCisrICAgICAgIGVycm9ycz1gZXhwciAkZXJyb3JzICsgMWA7OworKyAgICAyKSAkZWNobyAiVGVzdCBtYjEgbWF5IGhhdmUgZmFpbGVkLiIgMT4mMgorKyAgICAgICAkZWNobyBUaGUgY29tbWFuZCAiY21wIG1iMS5PICRzcmNkaXIvbWIxLlgiIGZhaWxlZC4gMT4mMgorKyAgICAgICBlcnJvcnM9YGV4cHIgJGVycm9ycyArIDFgOzsKKysgIGVzYWMKKytmaQorKworKyR4eCAtdCDvvKAgLWs0IC1uIG1iMi5JID4gbWIyLk8KKytjb2RlPSQ/CisraWYgdGVzdCAkY29kZSAhPSAwOyB0aGVuCisrICAkZWNobyAiVGVzdCBtYjIgZmFpbGVkOiAkeHggcmV0dXJuIGNvZGUgJGNvZGUgZGlmZmVycyBmcm9tIGV4cGVjdGVkIHZhbHVlIDAiIDE+JjIKKysgIGVycm9ycz1gZXhwciAkZXJyb3JzICsgMWAKKytlbHNlCisrICBjbXAgbWIyLk8gJHNyY2Rpci9tYjIuWCA+IC9kZXYvbnVsbCAyPiYxCisrICBjYXNlICQ/IGluCisrICAgIDApIGlmIHRlc3QgIiRWRVJCT1NFIjsgdGhlbiAkZWNobyAicGFzc2VkIG1iMiI7IGZpOzsKKysgICAgMSkgJGVjaG8gIlRlc3QgbWIyIGZhaWxlZDogZmlsZXMgbWIyLk8gYW5kICRzcmNkaXIvbWIyLlggZGlmZmVyIiAxPiYyCisrICAgICAgIChkaWZmIC1jIG1iMi5PICRzcmNkaXIvbWIyLlgpIDI+IC9kZXYvbnVsbAorKyAgICAgICBlcnJvcnM9YGV4cHIgJGVycm9ycyArIDFgOzsKKysgICAgMikgJGVjaG8gIlRlc3QgbWIyIG1heSBoYXZlIGZhaWxlZC4iIDE+JjIKKysgICAgICAgJGVjaG8gVGhlIGNvbW1hbmQgImNtcCBtYjIuTyAkc3JjZGlyL21iMi5YIiBmYWlsZWQuIDE+JjIKKysgICAgICAgZXJyb3JzPWBleHByICRlcnJvcnMgKyAxYDs7CisrICBlc2FjCisrZmkKKysKKytpZiB0ZXN0ICRlcnJvcnMgPSAwOyB0aGVuCisrICAkZWNobyBQYXNzZWQgYWxsIDExMyB0ZXN0cy4gMT4mMgorK2Vsc2UKKysgICRlY2hvIEZhaWxlZCAkZXJyb3JzIHRlc3RzLiAxPiYyCisrZmkKKyt0ZXN0ICRlcnJvcnMgPSAwIHx8IGVycm9ycz0xCisrZXhpdCAkZXJyb3JzCistLS0gL2Rldi9udWxsCTIwMDctMDMtMDEgMDk6MTY6MzkuMjE5NDA5OTA5ICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvdGVzdHMvc29ydC9tYjIuSQkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw0IEBACisrQXBwbGXvvKDvvKHvvKExMO+8oO+8oDIwCisrQmFuYW5h77yg77yh77yhNe+8oO+8oDMwCisrQ2l0cnVz77yg77yh77yhMjDvvKDvvKA1CisrQ2hlcnJ577yg77yh77yhMzDvvKDvvKAxMAorLS0tIC9kZXYvbnVsbAkyMDA3LTAzLTAxIDA5OjE2OjM5LjIxOTQwOTkwOSArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3Rlc3RzL3NvcnQvbWIyLlgJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsNCBAQAorK0NpdHJ1c++8oO+8oe+8oTIw77yg77ygNQorK0NoZXJyee+8oO+8oe+8oTMw77yg77ygMTAKKytBcHBsZe+8oO+8oe+8oTEw77yg77ygMjAKKytCYW5hbmHvvKDvvKHvvKE177yg77ygMzAKKy0tLSAvZGV2L251bGwJMjAwNy0wMy0wMSAwOToxNjozOS4yMTk0MDk5MDkgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky90ZXN0cy9zb3J0L21iMS5JCTIwMDctMDMtMDEgMTU6MDg6MjQuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDQgQEAKKytBcHBsZe+8oDEwCisrQmFuYW5h77ygNQorK0NpdHJ1c++8oDIwCisrQ2hlcnJ577ygMzAKKy0tLSAvZGV2L251bGwJMjAwNy0wMy0wMSAwOToxNjozOS4yMTk0MDk5MDkgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky90ZXN0cy9zb3J0L21iMS5YCTIwMDctMDMtMDEgMTU6MDg6MjQuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDQgQEAKKytCYW5hbmHvvKA1CisrQXBwbGXvvKAxMAorK0NpdHJ1c++8oDIwCisrQ2hlcnJ577ygMzAKKy0tLSBjb3JldXRpbHMtNi44Ky90ZXN0cy9zb3J0L01ha2VmaWxlLmFtLmkxOG4JMjAwNy0wMS0yNCAwNzo0NzozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky90ZXN0cy9zb3J0L01ha2VmaWxlLmFtCTIwMDctMDMtMDEgMTU6MDk6NTkuMDAwMDAwMDAwICswMDAwCitAQCAtNjYsMTUgKzY2LDE3IEBACisgYmlnZmllbGQuTyBiaWdmaWVsZC5FCisgIyN0ZXN0LWZpbGVzLWVuZAorIAorLUVYVFJBX0RJU1QgPSBUZXN0LnBtICR4LXRlc3RzICQoZXhwbGljaXQpICQobWFpbnRfZ2VuKQorLW5vaW5zdF9TQ1JJUFRTID0gJHgtdGVzdHMKKytydW5fZ2VuICs9IG1iMS4wIG1iMi4wCisrCisrRVhUUkFfRElTVCA9IFRlc3QucG0gJHgtdGVzdHMgJChleHBsaWNpdCkgJChtYWludF9nZW4pIG1iMS5JIG1iMS5YIG1iMi5JIG1iMi5YCisrbm9pbnN0X1NDUklQVFMgPSAkeC10ZXN0cyAjICR4LW1iLXRlc3RzCisgVEVTVFNfRU5WSVJPTk1FTlQgPSBcCisgICBDVV9URVNUX05BTUU9YGJhc2VuYW1lICQoYWJzX3NyY2RpcilgLCQkdHN0IFwKKyAgIFBBVEg9IiQoVkdfUEFUSF9QUkVGSVgpYHB3ZGAvLi4vLi4vc3JjJChQQVRIX1NFUEFSQVRPUikkJFBBVEgiCisgCisgZWRpdHBsID0gc2VkIC1lICdzLEAnJ1BFUkwnJ0AsJChQRVJMKSxnJyAtZSAncyxAJydzcmNkaXInJ0AsJChzcmNkaXIpLGcnCisgCistVEVTVFMgPSAkeC10ZXN0cworK1RFU1RTID0gJHgtdGVzdHMgJHgtbWItdGVzdHMKKyAKKyBta19zY3JpcHQgPSAkKHNyY2RpcikvLi4vbWstc2NyaXB0CisgJChzcmNkaXIpLyR4LXRlc3RzOiAkKG1rX3NjcmlwdCkgVGVzdC5wbSBNYWtlZmlsZS5hbQorLS0tIGNvcmV1dGlscy02LjgrL2xpYi9saW5lYnVmZmVyLmguaTE4bgkyMDA1LTA1LTE0IDA3OjQ0OjI0LjAwMDAwMDAwMCArMDEwMAorKysrIGNvcmV1dGlscy02LjgrL2xpYi9saW5lYnVmZmVyLmgJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yMiw2ICsyMiwxMSBAQAorIAorICMgaW5jbHVkZSA8c3RkaW8uaD4KKyAKKysvKiBHZXQgbWJzdGF0ZV90LiAgKi8KKysjIGlmIEhBVkVfV0NIQVJfSAorKyMgIGluY2x1ZGUgPHdjaGFyLmg+CisrIyBlbmRpZgorKworIC8qIEEgYHN0cnVjdCBsaW5lYnVmZmVyJyBob2xkcyBhIGxpbmUgb2YgdGV4dC4gKi8KKyAKKyBzdHJ1Y3QgbGluZWJ1ZmZlcgorQEAgLTI5LDYgKzM0LDkgQEAKKyAgIHNpemVfdCBzaXplOwkJCS8qIEFsbG9jYXRlZC4gKi8KKyAgIHNpemVfdCBsZW5ndGg7CQkvKiBVc2VkLiAqLworICAgY2hhciAqYnVmZmVyOworKyMgaWYgSEFWRV9XQ0hBUl9ICisrICBtYnN0YXRlX3Qgc3RhdGU7CisrIyBlbmRpZgorIH07CisgCisgLyogSW5pdGlhbGl6ZSBsaW5lYnVmZmVyIExJTkVCVUZGRVIgZm9yIHVzZS4gKi8KKy0tLSBjb3JldXRpbHMtNi44Ky9zcmMvZXhwYW5kLmMuaTE4bgkyMDA3LTAxLTE0IDE1OjQxOjI4LjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3NyYy9leHBhbmQuYwkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTM4LDExICszOCwyOCBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxnZXRvcHQuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCisrLyogR2V0IG1ic3RhdGVfdCwgbWJydG93YygpLCB3Y3dpZHRoKCkuICovCisrI2lmIEhBVkVfV0NIQVJfSAorKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSAic3lzdGVtLmgiCisgI2luY2x1ZGUgImVycm9yLmgiCisgI2luY2x1ZGUgInF1b3RlLmgiCisgI2luY2x1ZGUgInhzdHJuZHVwLmgiCisgCisrLyogTUJfTEVOX01BWCBpcyBpbmNvcnJlY3RseSBkZWZpbmVkIHRvIGJlIDEgaW4gYXQgbGVhc3Qgb25lIEdDQworKyAgIGluc3RhbGxhdGlvbjsgd29yayBhcm91bmQgdGhpcyBjb25maWd1cmF0aW9uIGVycm9yLiAgKi8KKysjaWYgIWRlZmluZWQgTUJfTEVOX01BWCB8fCBNQl9MRU5fTUFYIDwgMgorKyMgZGVmaW5lIE1CX0xFTl9NQVggMTYKKysjZW5kaWYKKysKKysvKiBTb21lIHN5c3RlbXMsIGxpa2UgQmVPUywgaGF2ZSBtdWx0aWJ5dGUgZW5jb2RpbmdzIGJ1dCBsYWNrIG1ic3RhdGVfdC4gICovCisrI2lmIEhBVkVfTUJSVE9XQyAmJiBkZWZpbmVkIG1ic3RhdGVfdAorKyMgZGVmaW5lIG1icnRvd2MocHdjLCBzLCBuLCBwcykgKG1icnRvd2MpIChwd2MsIHMsIG4sIDApCisrI2VuZGlmCisrCisgLyogVGhlIG9mZmljaWFsIG5hbWUgb2YgdGhpcyBwcm9ncmFtIChlLmcuLCBubyBgZycgcHJlZml4KS4gICovCisgI2RlZmluZSBQUk9HUkFNX05BTUUgImV4cGFuZCIKKyAKK0BAIC0xODMsNiArMjAwLDcgQEAKKyAJICAgICAgc3RvcHMgPSBudW1fc3RhcnQgKyBsZW4gLSAxOworIAkgICAgfQorIAl9CisrCisgICAgICAgZWxzZQorIAl7CisgCSAgZXJyb3IgKDAsIDAsIF8oInRhYiBzaXplIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyKHMpOiAlcyIpLAorQEAgLTM2NSw2ICszODMsMTQyIEBACisgICAgIH0KKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyB2b2lkCisrZXhwYW5kX211bHRpYnl0ZSAodm9pZCkKKyt7CisrICBGSUxFICpmcDsJCQkvKiBJbnB1dCBzdHJlbS4gKi8KKysgIG1ic3RhdGVfdCBpX3N0YXRlOwkJLyogQ3VycmVudCBzaGlmdCBzdGF0ZSBvZiB0aGUgaW5wdXQgc3RyZWFtLiAqLworKyAgbWJzdGF0ZV90IGlfc3RhdGVfYmFrOwkvKiBCYWNrIHVwIHRoZSBJX1NUQVRFLiAqLworKyAgbWJzdGF0ZV90IG9fc3RhdGU7CQkvKiBDdXJyZW50IHNoaWZ0IHN0YXRlIG9mIHRoZSBvdXRwdXQgc3RyZWFtLiAqLworKyAgY2hhciBidWZbTUJfTEVOX01BWCArIEJVRlNJWl07ICAvKiBGb3Igc3Bvb2xpbmcgYSByZWFkIGJ5dGUgc2VxdWVuY2UuICovCisrICBjaGFyICpidWZwb3M7CQkJLyogTmV4dCByZWFkIHBvc2l0aW9uIG9mIEJVRi4gKi8KKysgIHNpemVfdCBidWZsZW4gPSAwOwkJLyogVGhlIGxlbmd0aCBvZiB0aGUgYnl0ZSBzZXF1ZW5jZSBpbiBidWYuICovCisrICB3Y2hhcl90IHdjOwkJCS8qIEEgZ290dGVuIHdpZGUgY2hhcmFjdGVyLiAqLworKyAgc2l6ZV90IG1ibGVuZ3RoOwkJLyogVGhlIGJ5dGUgc2l6ZSBvZiBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIKKysJCQkJICAgd2hpY2ggc2hvd3MgYXMgc2FtZSBjaGFyYWN0ZXIgYXMgV0MuICovCisrICBpbnQgdGFiX2luZGV4ID0gMDsJCS8qIEluZGV4IGluIGB0YWJfbGlzdCcgb2YgbmV4dCB0YWJzdG9wLiAqLworKyAgaW50IGNvbHVtbiA9IDA7CQkvKiBDb2x1bW4gb24gc2NyZWVuIG9mIHRoZSBuZXh0IGNoYXIuICovCisrICBpbnQgbmV4dF90YWJfY29sdW1uOwkJLyogQ29sdW1uIHRoZSBuZXh0IHRhYiBzdG9wIGlzIG9uLiAqLworKyAgaW50IGNvbnZlcnQgPSAxOwkJLyogSWYgbm9uemVybywgcGVyZm9ybSB0cmFuc2xhdGlvbnMuICovCisrCisrICBmcCA9IG5leHRfZmlsZSAoKEZJTEUgKikgTlVMTCk7CisrICBpZiAoZnAgPT0gTlVMTCkKKysgICAgcmV0dXJuOworKworKyAgbWVtc2V0ICgmb19zdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKyAgbWVtc2V0ICgmaV9zdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgZm9yICg7OykKKysgICAgeworKyAgICAgIC8qIFJlZmlsbCB0aGUgYnVmZmVyIEJVRi4gKi8KKysgICAgICBpZiAoYnVmbGVuIDwgTUJfTEVOX01BWCAmJiAhZmVvZihmcCkgJiYgIWZlcnJvcihmcCkpCisrCXsKKysJICBtZW1tb3ZlIChidWYsIGJ1ZnBvcywgYnVmbGVuKTsKKysJICBidWZsZW4gKz0gZnJlYWQgKGJ1ZiArIGJ1Zmxlbiwgc2l6ZW9mKGNoYXIpLCBCVUZTSVosIGZwKTsKKysJICBidWZwb3MgPSBidWY7CisrCX0KKysKKysgICAgICAvKiBObyBjaGFyYWN0ZXIgaXMgbGVmdCBpbiBCVUYuICovCisrICAgICAgaWYgKGJ1ZmxlbiA8IDEpCisrCXsKKysJICBmcCA9IG5leHRfZmlsZSAoZnApOworKworKwkgIGlmIChmcCA9PSBOVUxMKQorKwkgICAgYnJlYWs7CQkvKiBObyBtb3JlIGZpbGVzLiAqLworKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgbWVtc2V0ICgmaV9zdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkgICAgICBjb250aW51ZTsKKysJICAgIH0KKysJfQorKworKyAgICAgIC8qIEdldCBhIHdpZGUgY2hhcmFjdGVyLiAqLworKyAgICAgIGlfc3RhdGVfYmFrID0gaV9zdGF0ZTsKKysgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgYnVmcG9zLCBidWZsZW4sICZpX3N0YXRlKTsKKysKKysgICAgICBzd2l0Y2ggKG1ibGVuZ3RoKQorKwl7CisrCWNhc2UgKHNpemVfdCktMToJLyogaWxsZWdhbCBieXRlIHNlcXVlbmNlLiAqLworKwljYXNlIChzaXplX3QpLTI6CisrCSAgbWJsZW5ndGggPSAxOworKwkgIGlfc3RhdGUgPSBpX3N0YXRlX2JhazsKKysJICBpZiAoY29udmVydCkKKysJICAgIHsKKysJICAgICAgKytjb2x1bW47CisrCSAgICAgIGlmIChjb252ZXJ0X2VudGlyZV9saW5lID09IDApCisrCQljb252ZXJ0ID0gMDsKKysJICAgIH0KKysJICBwdXRjaGFyICgqYnVmcG9zKTsKKysJICBicmVhazsKKysKKysJY2FzZSAwOgkJLyogbnVsbC4gKi8KKysJICBtYmxlbmd0aCA9IDE7CisrCSAgaWYgKGNvbnZlcnQgJiYgY29udmVydF9lbnRpcmVfbGluZSA9PSAwKQorKwkgICAgY29udmVydCA9IDA7CisrCSAgcHV0Y2hhciAoJ1wwJyk7CisrCSAgYnJlYWs7CisrCisrCWRlZmF1bHQ6CisrCSAgaWYgKHdjID09IEwnXG4nKSAgIC8qIExGLiAqLworKwkgICAgeworKwkgICAgICB0YWJfaW5kZXggPSAwOworKwkgICAgICBjb2x1bW4gPSAwOworKwkgICAgICBjb252ZXJ0ID0gMTsKKysJICAgICAgcHV0Y2hhciAoJ1xuJyk7CisrCSAgICB9CisrCSAgZWxzZSBpZiAod2MgPT0gTCdcdCcgJiYgY29udmVydCkJLyogVGFiLiAqLworKwkgICAgeworKwkgICAgICBpZiAodGFiX3NpemUgPT0gMCkKKysJCXsKKysJCSAgLyogRG8gbm90IGxldCB0YWJfaW5kZXggPT0gZmlyc3RfZnJlZV90YWI7CisrCQkgICAgIHN0b3Agd2hlbiBpdCBpcyAxIGxlc3MuICovCisrCQkgIHdoaWxlICh0YWJfaW5kZXggPCBmaXJzdF9mcmVlX3RhYiAtIDEKKysJCSAgICAgICYmIGNvbHVtbiA+PSB0YWJfbGlzdFt0YWJfaW5kZXhdKQorKwkJICAgIHRhYl9pbmRleCsrOworKwkJICBuZXh0X3RhYl9jb2x1bW4gPSB0YWJfbGlzdFt0YWJfaW5kZXhdOworKwkJICBpZiAodGFiX2luZGV4IDwgZmlyc3RfZnJlZV90YWIgLSAxKQorKwkJICAgIHRhYl9pbmRleCsrOworKwkJICBpZiAoY29sdW1uID49IG5leHRfdGFiX2NvbHVtbikKKysJCSAgICBuZXh0X3RhYl9jb2x1bW4gPSBjb2x1bW4gKyAxOworKwkJfQorKwkgICAgICBlbHNlCisrCQluZXh0X3RhYl9jb2x1bW4gPSBjb2x1bW4gKyB0YWJfc2l6ZSAtIGNvbHVtbiAlIHRhYl9zaXplOworKworKwkgICAgICB3aGlsZSAoY29sdW1uIDwgbmV4dF90YWJfY29sdW1uKQorKwkJeworKwkJICBwdXRjaGFyICgnICcpOworKwkJICArK2NvbHVtbjsKKysJCX0KKysJICAgIH0KKysJICBlbHNlICAvKiBPdGhlcnMuICovCisrCSAgICB7CisrCSAgICAgIGlmIChjb252ZXJ0KQorKwkJeworKwkJICBpZiAod2MgPT0gTCdcYicpCisrCQkgICAgeworKwkJICAgICAgaWYgKGNvbHVtbiA+IDApCisrCQkJLS1jb2x1bW47CisrCQkgICAgfQorKwkJICBlbHNlCisrCQkgICAgeworKwkJICAgICAgaW50IHdpZHRoOwkJLyogVGhlIHdpZHRoIG9mIFdDLiAqLworKworKwkJICAgICAgd2lkdGggPSB3Y3dpZHRoICh3Yyk7CisrCQkgICAgICBjb2x1bW4gKz0gKHdpZHRoID4gMCkgPyB3aWR0aCA6IDA7CisrCQkgICAgICBpZiAoY29udmVydF9lbnRpcmVfbGluZSA9PSAwKQorKwkJCWNvbnZlcnQgPSAwOworKwkJICAgIH0KKysJCX0KKysJICAgICAgZndyaXRlIChidWZwb3MsIHNpemVvZihjaGFyKSwgbWJsZW5ndGgsIHN0ZG91dCk7CisrCSAgICB9CisrCX0KKysgICAgICBidWZsZW4gLT0gbWJsZW5ndGg7CisrICAgICAgYnVmcG9zICs9IG1ibGVuZ3RoOworKyAgICB9CisrfQorKyNlbmRpZgorKworIGludAorIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyB7CitAQCAtNDI5LDcgKzU4MywxMiBAQAorIAorICAgZmlsZV9saXN0ID0gKG9wdGluZCA8IGFyZ2MgPyAmYXJndltvcHRpbmRdIDogc3RkaW5fYXJndik7CisgCistICBleHBhbmQgKCk7CisrI2lmIEhBVkVfTUJSVE9XQworKyAgaWYgKE1CX0NVUl9NQVggPiAxKQorKyAgICBleHBhbmRfbXVsdGlieXRlICgpOworKyAgZWxzZQorKyNlbmRpZgorKyAgICBleHBhbmQgKCk7CisgCisgICBpZiAoaGF2ZV9yZWFkX3N0ZGluICYmIGZjbG9zZSAoc3RkaW4pICE9IDApCisgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIGVycm5vLCAiLSIpOworLS0tIGNvcmV1dGlscy02LjgrL3NyYy9qb2luLmMuaTE4bgkyMDA3LTAxLTE0IDE1OjQxOjI4LjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3NyYy9qb2luLmMJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yMywxNiArMjMsMzAgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPGdldG9wdC5oPgorIAorKy8qIEdldCBtYnN0YXRlX3QsIG1icnRvd2MoKSwgbWJydG93YygpLCB3Y3dpZHRoKCkuICAqLworKyNpZiBIQVZFX1dDSEFSX0gKKysjIGluY2x1ZGUgPHdjaGFyLmg+CisrI2VuZGlmCisrCisrLyogR2V0IGlzd2JsYW5rKCksIHRvd3VwcGVyLiAgKi8KKysjaWYgSEFWRV9XQ1RZUEVfSAorKyMgaW5jbHVkZSA8d2N0eXBlLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgInN5c3RlbS5oIgorICNpbmNsdWRlICJlcnJvci5oIgorICNpbmNsdWRlICJoYXJkLWxvY2FsZS5oIgorICNpbmNsdWRlICJsaW5lYnVmZmVyLmgiCistI2luY2x1ZGUgIm1lbWNhc2VjbXAuaCIKKyAjaW5jbHVkZSAicXVvdGUuaCIKKyAjaW5jbHVkZSAic3RkaW8tLS5oIgorICNpbmNsdWRlICJ4bWVtY29sbC5oIgorICNpbmNsdWRlICJ4c3RydG9sLmgiCisgCisrLyogU29tZSBzeXN0ZW1zLCBsaWtlIEJlT1MsIGhhdmUgbXVsdGlieXRlIGVuY29kaW5ncyBidXQgbGFjayBtYnN0YXRlX3QuICAqLworKyNpZiBIQVZFX01CUlRPV0MgJiYgZGVmaW5lZCBtYnN0YXRlX3QKKysjIGRlZmluZSBtYnJ0b3djKHB3YywgcywgbiwgcHMpIChtYnJ0b3djKSAocHdjLCBzLCBuLCAwKQorKyNlbmRpZgorKworIC8qIFRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoaXMgcHJvZ3JhbSAoZS5nLiwgbm8gYGcnIHByZWZpeCkuICAqLworICNkZWZpbmUgUFJPR1JBTV9OQU1FICJqb2luIgorIAorQEAgLTEwNCwxMCArMTE4LDEyIEBACisgLyogTGFzdCBlbGVtZW50IGluIGBvdXRsaXN0Jywgd2hlcmUgYSBuZXcgZWxlbWVudCBjYW4gYmUgYWRkZWQuICAqLworIHN0YXRpYyBzdHJ1Y3Qgb3V0bGlzdCAqb3V0bGlzdF9lbmQgPSAmb3V0bGlzdF9oZWFkOworIAorLS8qIFRhYiBjaGFyYWN0ZXIgc2VwYXJhdGluZyBmaWVsZHMuICBJZiBuZWdhdGl2ZSwgZmllbGRzIGFyZSBzZXBhcmF0ZWQKKy0gICBieSBhbnkgbm9uZW1wdHkgc3RyaW5nIG9mIGJsYW5rcywgb3RoZXJ3aXNlIGJ5IGV4YWN0bHkgb25lCistICAgdGFiIGNoYXJhY3RlciB3aG9zZSB2YWx1ZSAod2hlbiBjYXN0IHRvIHVuc2lnbmVkIGNoYXIpIGVxdWFscyBUQUIuICAqLworLXN0YXRpYyBpbnQgdGFiID0gLTE7CisrLyogVGFiIGNoYXJhY3RlciBzZXBhcmF0aW5nIGZpZWxkcy4gIElmIE5VTEwsIGZpZWxkcyBhcmUgc2VwYXJhdGVkCisrICAgYnkgYW55IG5vbmVtcHR5IHN0cmluZyBvZiBibGFua3MuICAqLworK3N0YXRpYyBjaGFyICp0YWIgPSBOVUxMOworKworKy8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgdXNlZCBmb3IgdGFiLiAqLworK3N0YXRpYyBzaXplX3QgdGFibGVuID0gMDsKKyAKKyBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBsb25nb3B0c1tdID0KKyB7CitAQCAtMTkwLDYgKzIwNiw4IEBACisgCisgLyogRmlsbCBpbiB0aGUgYGZpZWxkcycgc3RydWN0dXJlIGluIExJTkUuICAqLworIAorKy8qIEZpbGwgaW4gdGhlIGBmaWVsZHMnIHN0cnVjdHVyZSBpbiBMSU5FLiAgKi8KKysKKyBzdGF0aWMgdm9pZAorIHhmaWVsZHMgKHN0cnVjdCBsaW5lICpsaW5lKQorIHsKK0BAIC0xOTksMTAgKzIxNywxMSBAQAorICAgaWYgKHB0ciA9PSBsaW0pCisgICAgIHJldHVybjsKKyAKKy0gIGlmICgwIDw9IHRhYikKKysgIGlmICh0YWIgIT0gTlVMTCkKKyAgICAgeworKyAgICAgIHVuc2lnbmVkIGNoYXIgdCA9IHRhYlswXTsKKyAgICAgICBjaGFyICpzZXA7CistICAgICAgZm9yICg7IChzZXAgPSBtZW1jaHIgKHB0ciwgdGFiLCBsaW0gLSBwdHIpKSAhPSBOVUxMOyBwdHIgPSBzZXAgKyAxKQorKyAgICAgIGZvciAoOyAoc2VwID0gbWVtY2hyIChwdHIsIHQsIGxpbSAtIHB0cikpICE9IE5VTEw7IHB0ciA9IHNlcCArIDEpCisgCWV4dHJhY3RfZmllbGQgKGxpbmUsIHB0ciwgc2VwIC0gcHRyKTsKKyAgICAgfQorICAgZWxzZQorQEAgLTIyOSw2ICsyNDgsMTQ4IEBACisgICBleHRyYWN0X2ZpZWxkIChsaW5lLCBwdHIsIGxpbSAtIHB0cik7CisgfQorIAorKyNpZiBIQVZFX01CUlRPV0MKKytzdGF0aWMgdm9pZAorK3hmaWVsZHNfbXVsdGlieXRlIChzdHJ1Y3QgbGluZSAqbGluZSkKKyt7CisrICBjaGFyICpwdHIgPSBsaW5lLT5idWYuYnVmZmVyOworKyAgY2hhciBjb25zdCAqbGltID0gcHRyICsgbGluZS0+YnVmLmxlbmd0aCAtIDE7CisrICB3Y2hhcl90IHdjID0gMDsKKysgIHNpemVfdCBtYmxlbmd0aCA9IDE7CisrICBtYnN0YXRlX3Qgc3RhdGUsIHN0YXRlX2JhazsKKysKKysgIG1lbXNldCAoJnN0YXRlLCAwLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKworKyAgaWYgKHB0ciA9PSBsaW0pCisrICAgIHJldHVybjsKKysKKysgIGlmICh0YWIgIT0gTlVMTCkKKysgICAgeworKyAgICAgIHVuc2lnbmVkIGNoYXIgdCA9IHRhYlswXTsKKysgICAgICBjaGFyICpzZXAgPSBwdHI7CisrICAgICAgZm9yICg7IHB0ciA8IGxpbTsgcHRyID0gc2VwICsgbWJsZW5ndGgpCisrCXsKKysJICBzZXAgPSBwdHI7CisrCSAgd2hpbGUgKHNlcCA8IGxpbSkKKysJICAgIHsKKysJICAgICAgc3RhdGVfYmFrID0gc3RhdGU7CisrCSAgICAgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCBzZXAsIGxpbSAtIHNlcCArIDEsICZzdGF0ZSk7CisrCisrCSAgICAgIGlmIChtYmxlbmd0aCA9PSAoc2l6ZV90KS0xIHx8IG1ibGVuZ3RoID09IChzaXplX3QpLTIpCisrCQl7CisrCQkgIG1ibGVuZ3RoID0gMTsKKysJCSAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrCQl9CisrCSAgICAgIG1ibGVuZ3RoID0gKG1ibGVuZ3RoIDwgMSkgPyAxIDogbWJsZW5ndGg7CisrCisrCSAgICAgIGlmIChtYmxlbmd0aCA9PSB0YWJsZW4gJiYgIW1lbWNtcCAoc2VwLCB0YWIsIG1ibGVuZ3RoKSkKKysJCWJyZWFrOworKwkgICAgICBlbHNlCisrCQl7CisrCQkgIHNlcCArPSBtYmxlbmd0aDsKKysJCSAgY29udGludWU7CisrCQl9CisrCSAgICB9CisrCisrCSAgaWYgKHNlcCA9PSBsaW0pCisrCSAgICBicmVhazsKKysKKysJICBleHRyYWN0X2ZpZWxkIChsaW5lLCBwdHIsIHNlcCAtIHB0cik7CisrCX0KKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgLyogU2tpcCBsZWFkaW5nIGJsYW5rcyBiZWZvcmUgdGhlIGZpcnN0IGZpZWxkLiAgKi8KKysgICAgICB3aGlsZShwdHIgPCBsaW0pCisrICAgICAgeworKyAgICAgICAgc3RhdGVfYmFrID0gc3RhdGU7CisrICAgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgcHRyLCBsaW0gLSBwdHIgKyAxLCAmc3RhdGUpOworKworKyAgICAgICAgaWYgKG1ibGVuZ3RoID09IChzaXplX3QpLTEgfHwgbWJsZW5ndGggPT0gKHNpemVfdCktMikKKysgICAgICAgICAgeworKyAgICAgICAgICAgIG1ibGVuZ3RoID0gMTsKKysgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlX2JhazsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgfQorKyAgICAgICAgbWJsZW5ndGggPSAobWJsZW5ndGggPCAxKSA/IDEgOiBtYmxlbmd0aDsKKysKKysgICAgICAgIGlmICghaXN3Ymxhbmsod2MpKQorKyAgICAgICAgICBicmVhazsKKysgICAgICAgIHB0ciArPSBtYmxlbmd0aDsKKysgICAgICB9CisrCisrICAgICAgZG8KKysJeworKwkgIGNoYXIgKnNlcDsKKysJICBzdGF0ZV9iYWsgPSBzdGF0ZTsKKysJICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgcHRyLCBsaW0gLSBwdHIgKyAxLCAmc3RhdGUpOworKwkgIGlmIChtYmxlbmd0aCA9PSAoc2l6ZV90KS0xIHx8IG1ibGVuZ3RoID09IChzaXplX3QpLTIpCisrCSAgICB7CisrCSAgICAgIG1ibGVuZ3RoID0gMTsKKysJICAgICAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKwkgIG1ibGVuZ3RoID0gKG1ibGVuZ3RoIDwgMSkgPyAxIDogbWJsZW5ndGg7CisrCisrCSAgc2VwID0gcHRyICsgbWJsZW5ndGg7CisrCSAgd2hpbGUgKHNlcCAhPSBsaW0pCisrCSAgICB7CisrCSAgICAgIHN0YXRlX2JhayA9IHN0YXRlOworKwkgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3Yywgc2VwLCBsaW0gLSBzZXAgKyAxLCAmc3RhdGUpOworKwkgICAgICBpZiAobWJsZW5ndGggPT0gKHNpemVfdCktMSB8fCBtYmxlbmd0aCA9PSAoc2l6ZV90KS0yKQorKwkJeworKwkJICBtYmxlbmd0aCA9IDE7CisrCQkgIHN0YXRlID0gc3RhdGVfYmFrOworKwkJICBicmVhazsKKysJCX0KKysJICAgICAgbWJsZW5ndGggPSAobWJsZW5ndGggPCAxKSA/IDEgOiBtYmxlbmd0aDsKKysKKysJICAgICAgaWYgKGlzd2JsYW5rICh3YykpCisrCQlicmVhazsKKysKKysJICAgICAgc2VwICs9IG1ibGVuZ3RoOworKwkgICAgfQorKworKwkgIGV4dHJhY3RfZmllbGQgKGxpbmUsIHB0ciwgc2VwIC0gcHRyKTsKKysJICBpZiAoc2VwID09IGxpbSkKKysJICAgIHJldHVybjsKKysKKysJICBzdGF0ZV9iYWsgPSBzdGF0ZTsKKysJICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3Yywgc2VwLCBsaW0gLSBzZXAgKyAxLCAmc3RhdGUpOworKwkgIGlmIChtYmxlbmd0aCA9PSAoc2l6ZV90KS0xIHx8IG1ibGVuZ3RoID09IChzaXplX3QpLTIpCisrCSAgICB7CisrCSAgICAgIG1ibGVuZ3RoID0gMTsKKysJICAgICAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKwkgIG1ibGVuZ3RoID0gKG1ibGVuZ3RoIDwgMSkgPyAxIDogbWJsZW5ndGg7CisrCisrCSAgcHRyID0gc2VwICsgbWJsZW5ndGg7CisrCSAgd2hpbGUgKHB0ciAhPSBsaW0pCisrCSAgICB7CisrCSAgICAgIHN0YXRlX2JhayA9IHN0YXRlOworKwkgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgcHRyLCBsaW0gLSBwdHIgKyAxLCAmc3RhdGUpOworKwkgICAgICBpZiAobWJsZW5ndGggPT0gKHNpemVfdCktMSB8fCBtYmxlbmd0aCA9PSAoc2l6ZV90KS0yKQorKwkJeworKwkJICBtYmxlbmd0aCA9IDE7CisrCQkgIHN0YXRlID0gc3RhdGVfYmFrOworKwkJICBicmVhazsKKysJCX0KKysJICAgICAgbWJsZW5ndGggPSAobWJsZW5ndGggPCAxKSA/IDEgOiBtYmxlbmd0aDsKKysKKysJICAgICAgaWYgKCFpc3dibGFuayAod2MpKQorKwkJYnJlYWs7CisrCisrCSAgICAgIHB0ciArPSBtYmxlbmd0aDsKKysJICAgIH0KKysJfQorKyAgICAgIHdoaWxlIChwdHIgIT0gbGltKTsKKysgICAgfQorKworKyAgZXh0cmFjdF9maWVsZCAobGluZSwgcHRyLCBsaW0gLSBwdHIpOworK30KKysjZW5kaWYKKysKKyAvKiBSZWFkIGEgbGluZSBmcm9tIEZQIGludG8gTElORSBhbmQgc3BsaXQgaXQgaW50byBmaWVsZHMuCisgICAgUmV0dXJuIHRydWUgaWYgc3VjY2Vzc2Z1bC4gICovCisgCitAQCAtMjQ5LDYgKzQxMCwxMSBAQAorICAgbGluZS0+bmZpZWxkc19hbGxvY2F0ZWQgPSAwOworICAgbGluZS0+bmZpZWxkcyA9IDA7CisgICBsaW5lLT5maWVsZHMgPSBOVUxMOworKyNpZiBIQVZFX01CUlRPV0MKKysgIGlmIChNQl9DVVJfTUFYID4gMSkKKysgICAgeGZpZWxkc19tdWx0aWJ5dGUgKGxpbmUpOworKyAgZWxzZQorKyNlbmRpZgorICAgeGZpZWxkcyAobGluZSk7CisgICByZXR1cm4gdHJ1ZTsKKyB9CitAQCAtMzAzLDU2ICs0NjksMTE0IEBACisga2V5Y21wIChzdHJ1Y3QgbGluZSBjb25zdCAqbGluZTEsIHN0cnVjdCBsaW5lIGNvbnN0ICpsaW5lMikKKyB7CisgICAvKiBTdGFydCBvZiBmaWVsZCB0byBjb21wYXJlIGluIGVhY2ggZmlsZS4gICovCistICBjaGFyICpiZWcxOworLSAgY2hhciAqYmVnMjsKKy0KKy0gIHNpemVfdCBsZW4xOworLSAgc2l6ZV90IGxlbjI7CQkvKiBMZW5ndGggb2YgZmllbGRzIHRvIGNvbXBhcmUuICAqLworKyAgY2hhciAqYmVnWzJdOworKyAgY2hhciAqY29weVsyXTsKKysgIHNpemVfdCBsZW5bMl07CS8qIExlbmd0aCBvZiBmaWVsZHMgdG8gY29tcGFyZS4gICovCisgICBpbnQgZGlmZjsKKysgIGludCBpLCBqOworIAorICAgaWYgKGpvaW5fZmllbGRfMSA8IGxpbmUxLT5uZmllbGRzKQorICAgICB7CistICAgICAgYmVnMSA9IGxpbmUxLT5maWVsZHNbam9pbl9maWVsZF8xXS5iZWc7CistICAgICAgbGVuMSA9IGxpbmUxLT5maWVsZHNbam9pbl9maWVsZF8xXS5sZW47CisrICAgICAgYmVnWzBdID0gbGluZTEtPmZpZWxkc1tqb2luX2ZpZWxkXzFdLmJlZzsKKysgICAgICBsZW5bMF0gPSBsaW5lMS0+ZmllbGRzW2pvaW5fZmllbGRfMV0ubGVuOworICAgICB9CisgICBlbHNlCisgICAgIHsKKy0gICAgICBiZWcxID0gTlVMTDsKKy0gICAgICBsZW4xID0gMDsKKysgICAgICBiZWdbMF0gPSBOVUxMOworKyAgICAgIGxlblswXSA9IDA7CisgICAgIH0KKyAKKyAgIGlmIChqb2luX2ZpZWxkXzIgPCBsaW5lMi0+bmZpZWxkcykKKyAgICAgeworLSAgICAgIGJlZzIgPSBsaW5lMi0+ZmllbGRzW2pvaW5fZmllbGRfMl0uYmVnOworLSAgICAgIGxlbjIgPSBsaW5lMi0+ZmllbGRzW2pvaW5fZmllbGRfMl0ubGVuOworKyAgICAgIGJlZ1sxXSA9IGxpbmUyLT5maWVsZHNbam9pbl9maWVsZF8yXS5iZWc7CisrICAgICAgbGVuWzFdID0gbGluZTItPmZpZWxkc1tqb2luX2ZpZWxkXzJdLmxlbjsKKyAgICAgfQorICAgZWxzZQorICAgICB7CistICAgICAgYmVnMiA9IE5VTEw7CistICAgICAgbGVuMiA9IDA7CisrICAgICAgYmVnWzFdID0gTlVMTDsKKysgICAgICBsZW5bMV0gPSAwOworICAgICB9CisgCistICBpZiAobGVuMSA9PSAwKQorLSAgICByZXR1cm4gbGVuMiA9PSAwID8gMCA6IC0xOworLSAgaWYgKGxlbjIgPT0gMCkKKysgIGlmIChsZW5bMF0gPT0gMCkKKysgICAgcmV0dXJuIGxlblsxXSA9PSAwID8gMCA6IC0xOworKyAgaWYgKGxlblsxXSA9PSAwKQorICAgICByZXR1cm4gMTsKKyAKKyAgIGlmIChpZ25vcmVfY2FzZSkKKyAgICAgeworLSAgICAgIC8qIEZJWE1FOiBpZ25vcmVfY2FzZSBkb2VzIG5vdCB3b3JrIHdpdGggTkxTIChpbiBwYXJ0aWN1bGFyLAorLSAgICAgICAgIHdpdGggbXVsdGlieXRlIGNoYXJzKS4gICovCistICAgICAgZGlmZiA9IG1lbWNhc2VjbXAgKGJlZzEsIGJlZzIsIE1JTiAobGVuMSwgbGVuMikpOworKyNpZmRlZiBIQVZFX01CUlRPV0MKKysgICAgICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrICAgICAgeworKyAgICAgICAgc2l6ZV90IG1ibGVuZ3RoOworKyAgICAgICAgd2NoYXJfdCB3YywgdXdjOworKyAgICAgICAgbWJzdGF0ZV90IHN0YXRlLCBzdGF0ZV9iYWs7CisrCisrICAgICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysKKysgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBjb3B5W2ldID0gYWxsb2NhIChsZW5baV0gKyAxKTsKKysKKysgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgTUlOIChsZW5bMF0sIGxlblsxXSk7KQorKyAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBzdGF0ZV9iYWsgPSBzdGF0ZTsKKysgICAgICAgICAgICAgICAgbWJsZW5ndGggPSBtYnJ0b3djICgmd2MsIGJlZ1tpXSArIGosIGxlbltpXSAtIGosICZzdGF0ZSk7CisrCisrICAgICAgICAgICAgICAgIHN3aXRjaCAobWJsZW5ndGgpCisrICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgIGNhc2UgKHNpemVfdCkgLTE6CisrICAgICAgICAgICAgICAgICAgY2FzZSAoc2l6ZV90KSAtMjoKKysgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVfYmFrOworKyAgICAgICAgICAgICAgICAgICAgLyogRmFsbCB0aHJvdWdoICovCisrICAgICAgICAgICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgICAgICAgICAgICAgbWJsZW5ndGggPSAxOworKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgICAgIHV3YyA9IHRvd3VwcGVyICh3Yyk7CisrCisrICAgICAgICAgICAgICAgICAgICBpZiAodXdjICE9IHdjKQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90IHN0YXRlX3djOworKworKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNldCAoJnN0YXRlX3djLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHdjcnRvbWIgKGNvcHlbaV0gKyBqLCB1d2MsICZzdGF0ZV93Yyk7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5IChjb3B5W2ldICsgaiwgYmVnW2ldICsgaiwgbWJsZW5ndGgpOworKyAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgaiArPSBtYmxlbmd0aDsKKysgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICBjb3B5W2ldW2pdID0gJ1wwJzsKKysgICAgICAgICAgfQorKyAgICAgIH0KKysgICAgICBlbHNlCisrI2VuZGlmCisrICAgICAgeworKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKysgICAgICAgICAgeworKyAgICAgICAgICAgIGNvcHlbaV0gPSBhbGxvY2EgKGxlbltpXSArIDEpOworKworKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBNSU4gKGxlblswXSwgbGVuWzFdKTsgaisrKQorKyAgICAgICAgICAgICAgY29weVtpXVtqXSA9IHRvdXBwZXIgKGJlZ1tpXVtqXSk7CisrCisrICAgICAgICAgICAgY29weVtpXVtqXSA9ICdcMCc7CisrICAgICAgICAgIH0KKysgICAgICB9CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworLSAgICAgIGlmIChoYXJkX0xDX0NPTExBVEUpCistCXJldHVybiB4bWVtY29sbCAoYmVnMSwgbGVuMSwgYmVnMiwgbGVuMik7CistICAgICAgZGlmZiA9IG1lbWNtcCAoYmVnMSwgYmVnMiwgTUlOIChsZW4xLCBsZW4yKSk7CisrICAgICAgY29weVswXSA9ICh1bnNpZ25lZCBjaGFyICopIGJlZ1swXTsKKysgICAgICBjb3B5WzFdID0gKHVuc2lnbmVkIGNoYXIgKikgYmVnWzFdOworICAgICB9CisgCisrICBpZiAoaGFyZF9MQ19DT0xMQVRFKQorKyAgICByZXR1cm4geG1lbWNvbGwgKChjaGFyICopIGNvcHlbMF0sIGxlblswXSwgKGNoYXIgKikgY29weVsxXSwgbGVuWzFdKTsKKysgIGRpZmYgPSBtZW1jbXAgKGNvcHlbMF0sIGNvcHlbMV0sIE1JTiAobGVuWzBdLCBsZW5bMV0pKTsKKysKKyAgIGlmIChkaWZmKQorICAgICByZXR1cm4gZGlmZjsKKy0gIHJldHVybiBsZW4xIDwgbGVuMiA/IC0xIDogbGVuMSAhPSBsZW4yOworKyAgcmV0dXJuIGxlblswXSAtIGxlblsxXTsKKyB9CisgCisgLyogUHJpbnQgZmllbGQgTiBvZiBMSU5FIGlmIGl0IGV4aXN0cyBhbmQgaXMgbm9uZW1wdHksIG90aGVyd2lzZQorQEAgLTM3NywxMSArNjAxLDE4IEBACisgCisgLyogUHJpbnQgdGhlIGpvaW4gb2YgTElORTEgYW5kIExJTkUyLiAgKi8KKyAKKysjZGVmaW5lIFBVVF9UQUJfQ0hBUgkJCQkJCQlcCisrICBkbwkJCQkJCQkJCVwKKysgICAgewkJCQkJCQkJCVwKKysgICAgICAodGFiICE9IE5VTEwpID8JCQkJCQkJXAorKwlmd3JpdGUodGFiLCBzaXplb2YoY2hhciksIHRhYmxlbiwgc3Rkb3V0KSA6IHB1dGNoYXIgKCcgJyk7CVwKKysgICAgfQkJCQkJCQkJCVwKKysgIHdoaWxlICgwKQkJCQkJCQkJCisrCisgc3RhdGljIHZvaWQKKyBwcmpvaW4gKHN0cnVjdCBsaW5lIGNvbnN0ICpsaW5lMSwgc3RydWN0IGxpbmUgY29uc3QgKmxpbmUyKQorIHsKKyAgIGNvbnN0IHN0cnVjdCBvdXRsaXN0ICpvdXRsaXN0OworLSAgY2hhciBvdXRwdXRfc2VwYXJhdG9yID0gdGFiIDwgMCA/ICcgJyA6IHRhYjsKKyAKKyAgIG91dGxpc3QgPSBvdXRsaXN0X2hlYWQubmV4dDsKKyAgIGlmIChvdXRsaXN0KQorQEAgLTM5NywxMiArNjI4LDEyIEBACisgCSAgaWYgKG8tPmZpbGUgPT0gMCkKKyAJICAgIHsKKyAJICAgICAgaWYgKGxpbmUxID09ICZ1bmlfYmxhbmspCistCSAgICAgICAgeworKwkJeworIAkJICBsaW5lID0gbGluZTI7CisgCQkgIGZpZWxkID0gam9pbl9maWVsZF8yOworIAkJfQorIAkgICAgICBlbHNlCistCSAgICAgICAgeworKwkJeworIAkJICBsaW5lID0gbGluZTE7CisgCQkgIGZpZWxkID0gam9pbl9maWVsZF8xOworIAkJfQorQEAgLTQxNiw3ICs2NDcsNyBAQAorIAkgIG8gPSBvLT5uZXh0OworIAkgIGlmIChvID09IE5VTEwpCisgCSAgICBicmVhazsKKy0JICBwdXRjaGFyIChvdXRwdXRfc2VwYXJhdG9yKTsKKysJICBQVVRfVEFCX0NIQVI7CisgCX0KKyAgICAgICBwdXRjaGFyICgnXG4nKTsKKyAgICAgfQorQEAgLTQzNCwyMyArNjY1LDIzIEBACisgICAgICAgcHJmaWVsZCAoam9pbl9maWVsZF8xLCBsaW5lMSk7CisgICAgICAgZm9yIChpID0gMDsgaSA8IGpvaW5fZmllbGRfMSAmJiBpIDwgbGluZTEtPm5maWVsZHM7ICsraSkKKyAJeworLQkgIHB1dGNoYXIgKG91dHB1dF9zZXBhcmF0b3IpOworKwkgIFBVVF9UQUJfQ0hBUjsKKyAJICBwcmZpZWxkIChpLCBsaW5lMSk7CisgCX0KKyAgICAgICBmb3IgKGkgPSBqb2luX2ZpZWxkXzEgKyAxOyBpIDwgbGluZTEtPm5maWVsZHM7ICsraSkKKyAJeworLQkgIHB1dGNoYXIgKG91dHB1dF9zZXBhcmF0b3IpOworKwkgIFBVVF9UQUJfQ0hBUjsKKyAJICBwcmZpZWxkIChpLCBsaW5lMSk7CisgCX0KKyAKKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgam9pbl9maWVsZF8yICYmIGkgPCBsaW5lMi0+bmZpZWxkczsgKytpKQorIAl7CistCSAgcHV0Y2hhciAob3V0cHV0X3NlcGFyYXRvcik7CisrCSAgUFVUX1RBQl9DSEFSOworIAkgIHByZmllbGQgKGksIGxpbmUyKTsKKyAJfQorICAgICAgIGZvciAoaSA9IGpvaW5fZmllbGRfMiArIDE7IGkgPCBsaW5lMi0+bmZpZWxkczsgKytpKQorIAl7CistCSAgcHV0Y2hhciAob3V0cHV0X3NlcGFyYXRvcik7CisrCSAgUFVUX1RBQl9DSEFSOworIAkgIHByZmllbGQgKGksIGxpbmUyKTsKKyAJfQorICAgICAgIHB1dGNoYXIgKCdcbicpOworQEAgLTg1OSwyMCArMTA5MCw0MSBAQAorIAorIAljYXNlICd0JzoKKyAJICB7CistCSAgICB1bnNpZ25lZCBjaGFyIG5ld3RhYiA9IG9wdGFyZ1swXTsKKy0JICAgIGlmICghIG5ld3RhYikKKysJICAgIGNoYXIgKm5ld3RhYjsKKysJICAgIHNpemVfdCBuZXd0YWJsZW47CisrCSAgICBpZiAoISBvcHRhcmdbMF0pCisgCSAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsIF8oImVtcHR5IHRhYiIpKTsKKy0JICAgIGlmIChvcHRhcmdbMV0pCisrCSAgICBuZXd0YWIgPSB4c3RyZHVwIChvcHRhcmcpOworKyNpZiBIQVZFX01CUlRPV0MKKysJICAgIGlmIChNQl9DVVJfTUFYID4gMSkKKysJICAgICAgeworKwkJbWJzdGF0ZV90IHN0YXRlOworKworKwkJbWVtc2V0ICgmc3RhdGUsIDAsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQluZXd0YWJsZW4gPSBtYnJ0b3djIChOVUxMLCBuZXd0YWIsCisrCQkJCSAgICAgc3RybmxlbiAobmV3dGFiLCBNQl9MRU5fTUFYKSwKKysJCQkJICAgICAmc3RhdGUpOworKwkJaWYgKG5ld3RhYmxlbiA9PSAoc2l6ZV90KSAwCisrCQkgICAgfHwgbmV3dGFibGVuID09IChzaXplX3QpIC0xCisrCQkgICAgfHwgbmV3dGFibGVuID09IChzaXplX3QpIC0yKQorKwkJICBuZXd0YWJsZW4gPSAxOworKwkgICAgICB9CisrCSAgICBlbHNlCisrI2VuZGlmCisrCSAgICAgIG5ld3RhYmxlbiA9IDE7CisrCQkKKysJICAgIGlmIChuZXd0YWJsZW4gPT0gMSAmJiBuZXd0YWJbMV0pCisrCSAgICAgIHsKKysJCWlmIChTVFJFUSAobmV3dGFiLCAiXFwwIikpCisrCQkgIG5ld3RhYlswXSA9ICdcMCc7CisrCSAgICAgIH0KKysJICAgIGlmICh0YWIgIT0gTlVMTCAmJiBzdHJjbXAgKHRhYiwgbmV3dGFiKSkKKyAJICAgICAgeworLQkJaWYgKFNUUkVRIChvcHRhcmcsICJcXDAiKSkKKy0JCSAgbmV3dGFiID0gJ1wwJzsKKy0JCWVsc2UKKy0JCSAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgXygibXVsdGktY2hhcmFjdGVyIHRhYiAlcyIpLAorLQkJCSBxdW90ZSAob3B0YXJnKSk7CisrCQlmcmVlIChuZXd0YWIpOworKwkJZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgXygiaW5jb21wYXRpYmxlIHRhYnMiKSk7CisgCSAgICAgIH0KKy0JICAgIGlmICgwIDw9IHRhYiAmJiB0YWIgIT0gbmV3dGFiKQorLQkgICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCBfKCJpbmNvbXBhdGlibGUgdGFicyIpKTsKKyAJICAgIHRhYiA9IG5ld3RhYjsKKysJICAgIHRhYmxlbiA9IG5ld3RhYmxlbjsKKyAJICB9CisgCSAgYnJlYWs7CisgCistLS0gY29yZXV0aWxzLTYuOCsvc3JjL3VuaXEuYy5pMThuCTIwMDctMDEtMTQgMTU6NDE6MjguMDAwMDAwMDAwICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvc3JjL3VuaXEuYwkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTIzLDYgKzIzLDE2IEBACisgI2luY2x1ZGUgPGdldG9wdC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAKKysvKiBHZXQgbWJzdGF0ZV90LCBtYnJ0b3djKCkuICovCisrI2lmIEhBVkVfV0NIQVJfSAorKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjZW5kaWYKKysKKysvKiBHZXQgaXN3KiBmdW5jdGlvbnMuICovCisrI2lmIEhBVkVfV0NUWVBFX0gKKysjIGluY2x1ZGUgPHdjdHlwZS5oPgorKyNlbmRpZgorKworICNpbmNsdWRlICJzeXN0ZW0uaCIKKyAjaW5jbHVkZSAiYXJnbWF0Y2guaCIKKyAjaW5jbHVkZSAibGluZWJ1ZmZlci5oIgorQEAgLTMyLDcgKzQyLDE5IEBACisgI2luY2x1ZGUgInF1b3RlLmgiCisgI2luY2x1ZGUgInhtZW1jb2xsLmgiCisgI2luY2x1ZGUgInhzdHJ0b2wuaCIKKy0jaW5jbHVkZSAibWVtY2FzZWNtcC5oIgorKyNpbmNsdWRlICJ4bWVtY29sbC5oIgorKworKy8qIE1CX0xFTl9NQVggaXMgaW5jb3JyZWN0bHkgZGVmaW5lZCB0byBiZSAxIGluIGF0IGxlYXN0IG9uZSBHQ0MKKysgICBpbnN0YWxsYXRpb247IHdvcmsgYXJvdW5kIHRoaXMgY29uZmlndXJhdGlvbiBlcnJvci4gICovCisrI2lmICFkZWZpbmVkIE1CX0xFTl9NQVggfHwgTUJfTEVOX01BWCA8IDIKKysjIGRlZmluZSBNQl9MRU5fTUFYIDE2CisrI2VuZGlmCisrCisrLyogU29tZSBzeXN0ZW1zLCBsaWtlIEJlT1MsIGhhdmUgbXVsdGlieXRlIGVuY29kaW5ncyBidXQgbGFjayBtYnN0YXRlX3QuICAqLworKyNpZiBIQVZFX01CUlRPV0MgJiYgZGVmaW5lZCBtYnN0YXRlX3QKKysjIGRlZmluZSBtYnJ0b3djKHB3YywgcywgbiwgcHMpIChtYnJ0b3djKSAocHdjLCBzLCBuLCAwKQorKyNlbmRpZgorKworIAorIC8qIFRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoaXMgcHJvZ3JhbSAoZS5nLiwgbm8gYGcnIHByZWZpeCkuICAqLworICNkZWZpbmUgUFJPR1JBTV9OQU1FICJ1bmlxIgorQEAgLTEwOSw2ICsxMzEsMTAgQEAKKyAvKiBTZWxlY3Qgd2hldGhlci9ob3cgdG8gZGVsaW1pdCBncm91cHMgb2YgZHVwbGljYXRlIGxpbmVzLiAgKi8KKyBzdGF0aWMgZW51bSBkZWxpbWl0X21ldGhvZCBkZWxpbWl0X2dyb3VwczsKKyAKKysvKiBGdW5jdGlvbiBwb2ludGVycy4gKi8KKytzdGF0aWMgY2hhciAqCisrKCpmaW5kX2ZpZWxkKSAoc3RydWN0IGxpbmVidWZmZXIgKmxpbmUpOworKworIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IGxvbmdvcHRzW10gPQorIHsKKyAgIHsiY291bnQiLCBub19hcmd1bWVudCwgTlVMTCwgJ2MnfSwKK0BAIC0xOTgsNyArMjI0LDcgQEAKKyAgICByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUncyBmaWVsZCB0byBiZSBjb21wYXJlZC4gKi8KKyAKKyBzdGF0aWMgY2hhciAqCistZmluZF9maWVsZCAoY29uc3Qgc3RydWN0IGxpbmVidWZmZXIgKmxpbmUpCisrZmluZF9maWVsZF91bmkgKHN0cnVjdCBsaW5lYnVmZmVyICpsaW5lKQorIHsKKyAgIHNpemVfdCBjb3VudDsKKyAgIGNoYXIgKmxwID0gbGluZS0+YnVmZmVyOworQEAgLTIxOSw2ICsyNDUsODMgQEAKKyAgIHJldHVybiBscCArIGk7CisgfQorIAorKyNpZiBIQVZFX01CUlRPV0MKKysKKysjIGRlZmluZSBNQkNIQVJfVE9fV0NIQVIoV0MsIE1CTEVOR1RILCBMUCwgUE9TLCBTSVpFLCBTVEFURVAsIENPTlZGQUlMKSAgXAorKyAgZG8JCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgbWJzdGF0ZV90IHN0YXRlX2JhazsJCQkJCQlcCisrCQkJCQkJCQkJXAorKyAgICAgIENPTlZGQUlMID0gMDsJCQkJCQkJXAorKyAgICAgIHN0YXRlX2JhayA9ICpTVEFURVA7CQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgICBNQkxFTkdUSCA9IG1icnRvd2MgKCZXQywgTFAgKyBQT1MsIFNJWkUgLSBQT1MsIFNUQVRFUCk7CQlcCisrCQkJCQkJCQkJXAorKyAgICAgIHN3aXRjaCAoTUJMRU5HVEgpCQkJCQkJCVwKKysJewkJCQkJCQkJXAorKwljYXNlIChzaXplX3QpLTI6CQkJCQkJXAorKwljYXNlIChzaXplX3QpLTE6CQkJCQkJXAorKwkgICpTVEFURVAgPSBzdGF0ZV9iYWs7CQkJCQkJXAorKwkgIENPTlZGQUlMKys7CQkJCQkJCVwKKysJICAvKiBGYWxsIHRocm91Z2ggKi8JCQkJCQlcCisrCWNhc2UgMDoJCQkJCQkJCVwKKysJICBNQkxFTkdUSCA9IDE7CQkJCQkJCVwKKysJfQkJCQkJCQkJXAorKyAgICB9CQkJCQkJCQkJXAorKyAgd2hpbGUgKDApCisrCisrc3RhdGljIGNoYXIgKgorK2ZpbmRfZmllbGRfbXVsdGkgKHN0cnVjdCBsaW5lYnVmZmVyICpsaW5lKQorK3sKKysgIHNpemVfdCBjb3VudDsKKysgIGNoYXIgKmxwID0gbGluZS0+YnVmZmVyOworKyAgc2l6ZV90IHNpemUgPSBsaW5lLT5sZW5ndGggLSAxOworKyAgc2l6ZV90IHBvczsKKysgIHNpemVfdCBtYmxlbmd0aDsKKysgIHdjaGFyX3Qgd2M7CisrICBtYnN0YXRlX3QgKnN0YXRlcDsKKysgIGludCBjb252ZmFpbDsKKysKKysgIHBvcyA9IDA7CisrICBzdGF0ZXAgPSAmKGxpbmUtPnN0YXRlKTsKKysKKysgIC8qIHNraXAgZmllbGRzLiAqLworKyAgZm9yIChjb3VudCA9IDA7IGNvdW50IDwgc2tpcF9maWVsZHMgJiYgcG9zIDwgc2l6ZTsgY291bnQrKykKKysgICAgeworKyAgICAgIHdoaWxlIChwb3MgPCBzaXplKQorKwl7CisrCSAgTUJDSEFSX1RPX1dDSEFSICh3YywgbWJsZW5ndGgsIGxwLCBwb3MsIHNpemUsIHN0YXRlcCwgY29udmZhaWwpOworKyAKKysJICBpZiAoY29udmZhaWwgfHwgIWlzd2JsYW5rICh3YykpCisrCSAgICB7CisrCSAgICAgIHBvcyArPSBtYmxlbmd0aDsKKysJICAgICAgYnJlYWs7CisrCSAgICB9CisrCSAgcG9zICs9IG1ibGVuZ3RoOworKwl9CisrCisrICAgICAgd2hpbGUgKHBvcyA8IHNpemUpCisrCXsKKysJICBNQkNIQVJfVE9fV0NIQVIgKHdjLCBtYmxlbmd0aCwgbHAsIHBvcywgc2l6ZSwgc3RhdGVwLCBjb252ZmFpbCk7CisrCisrCSAgaWYgKCFjb252ZmFpbCAmJiBpc3dibGFuayAod2MpKQorKwkgICAgYnJlYWs7CisrCisrCSAgcG9zICs9IG1ibGVuZ3RoOworKwl9CisrICAgIH0KKysKKysgIC8qIHNraXAgZmllbGRzLiAqLworKyAgZm9yIChjb3VudCA9IDA7IGNvdW50IDwgc2tpcF9jaGFycyAmJiBwb3MgPCBzaXplOyBjb3VudCsrKQorKyAgICB7CisrICAgICAgTUJDSEFSX1RPX1dDSEFSICh3YywgbWJsZW5ndGgsIGxwLCBwb3MsIHNpemUsIHN0YXRlcCwgY29udmZhaWwpOworKyAgICAgIHBvcyArPSBtYmxlbmd0aDsKKysgICAgfQorKworKyAgcmV0dXJuIGxwICsgcG9zOworK30KKysjZW5kaWYKKysKKyAvKiBSZXR1cm4gZmFsc2UgaWYgdHdvIHN0cmluZ3MgT0xEIGFuZCBORVcgbWF0Y2gsIHRydWUgaWYgbm90LgorICAgIE9MRCBhbmQgTkVXIHBvaW50IG5vdCB0byB0aGUgYmVnaW5uaW5ncyBvZiB0aGUgbGluZXMKKyAgICBidXQgcmF0aGVyIHRvIHRoZSBiZWdpbm5pbmdzIG9mIHRoZSBmaWVsZHMgdG8gY29tcGFyZS4KK0BAIC0yMjcsNiArMzMwLDggQEAKKyBzdGF0aWMgYm9vbAorIGRpZmZlcmVudCAoY2hhciAqb2xkLCBjaGFyICpuZXcsIHNpemVfdCBvbGRsZW4sIHNpemVfdCBuZXdsZW4pCisgeworKyAgY2hhciAqY29weV9vbGQsICpjb3B5X25ldzsKKysKKyAgIGlmIChjaGVja19jaGFycyA8IG9sZGxlbikKKyAgICAgb2xkbGVuID0gY2hlY2tfY2hhcnM7CisgICBpZiAoY2hlY2tfY2hhcnMgPCBuZXdsZW4pCitAQCAtMjM0LDE0ICszMzksOTIgQEAKKyAKKyAgIGlmIChpZ25vcmVfY2FzZSkKKyAgICAgeworLSAgICAgIC8qIEZJWE1FOiBUaGlzIHNob3VsZCBpbnZva2Ugc3RyY29sbCBzb21laG93LiAgKi8KKy0gICAgICByZXR1cm4gb2xkbGVuICE9IG5ld2xlbiB8fCBtZW1jYXNlY21wIChvbGQsIG5ldywgb2xkbGVuKTsKKysgICAgICBzaXplX3QgaTsKKysKKysgICAgICBjb3B5X29sZCA9IGFsbG9jYSAob2xkbGVuICsgMSk7CisrICAgICAgY29weV9uZXcgPSBhbGxvY2EgKG9sZGxlbiArIDEpOworKworKyAgICAgIGZvciAoaSA9IDA7IGkgPCBvbGRsZW47IGkrKykKKysJeworKwkgIGNvcHlfb2xkW2ldID0gdG91cHBlciAob2xkW2ldKTsKKysJICBjb3B5X25ld1tpXSA9IHRvdXBwZXIgKG5ld1tpXSk7CisrCX0KKyAgICAgfQorLSAgZWxzZSBpZiAoaGFyZF9MQ19DT0xMQVRFKQorLSAgICByZXR1cm4geG1lbWNvbGwgKG9sZCwgb2xkbGVuLCBuZXcsIG5ld2xlbikgIT0gMDsKKyAgIGVsc2UKKy0gICAgcmV0dXJuIG9sZGxlbiAhPSBuZXdsZW4gfHwgbWVtY21wIChvbGQsIG5ldywgb2xkbGVuKTsKKysgICAgeworKyAgICAgIGNvcHlfb2xkID0gKGNoYXIgKilvbGQ7CisrICAgICAgY29weV9uZXcgPSAoY2hhciAqKW5ldzsKKysgICAgfQorKworKyAgcmV0dXJuIHhtZW1jb2xsIChjb3B5X29sZCwgb2xkbGVuLCBjb3B5X25ldywgbmV3bGVuKTsKKyt9CisrCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyBpbnQKKytkaWZmZXJlbnRfbXVsdGkgKGNvbnN0IGNoYXIgKm9sZCwgY29uc3QgY2hhciAqbmV3LCBzaXplX3Qgb2xkbGVuLCBzaXplX3QgbmV3bGVuLCBtYnN0YXRlX3Qgb2xkc3RhdGUsIG1ic3RhdGVfdCBuZXdzdGF0ZSkKKyt7CisrICBzaXplX3QgaSwgaiwgY2hhcnM7CisrICBjb25zdCBjaGFyICpzdHJbMl07CisrICBjaGFyICpjb3B5WzJdOworKyAgc2l6ZV90IGxlblsyXTsKKysgIG1ic3RhdGVfdCBzdGF0ZVsyXTsKKysgIHNpemVfdCBtYmxlbmd0aDsKKysgIHdjaGFyX3Qgd2MsIHV3YzsKKysgIG1ic3RhdGVfdCBzdGF0ZV9iYWs7CisrCisrICBzdHJbMF0gPSBvbGQ7CisrICBzdHJbMV0gPSBuZXc7CisrICBsZW5bMF0gPSBvbGRsZW47CisrICBsZW5bMV0gPSBuZXdsZW47CisrICBzdGF0ZVswXSA9IG9sZHN0YXRlOworKyAgc3RhdGVbMV0gPSBuZXdzdGF0ZTsKKysKKysgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisrICAgIHsKKysgICAgICBjb3B5W2ldID0gYWxsb2NhIChsZW5baV0gKyAxKTsKKysKKysgICAgICBmb3IgKGogPSAwLCBjaGFycyA9IDA7IGogPCBsZW5baV0gJiYgY2hhcnMgPCBjaGVja19jaGFyczsgY2hhcnMrKykKKysJeworKwkgIHN0YXRlX2JhayA9IHN0YXRlW2ldOworKwkgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCBzdHJbaV0gKyBqLCBsZW5baV0gLSBqLCAmKHN0YXRlW2ldKSk7CisrCisrCSAgc3dpdGNoIChtYmxlbmd0aCkKKysJICAgIHsKKysJICAgIGNhc2UgKHNpemVfdCktMToKKysJICAgIGNhc2UgKHNpemVfdCktMjoKKysJICAgICAgc3RhdGVbaV0gPSBzdGF0ZV9iYWs7CisrCSAgICAgIC8qIEZhbGwgdGhyb3VnaCAqLworKwkgICAgY2FzZSAwOgorKwkgICAgICBtYmxlbmd0aCA9IDE7CisrCSAgICAgIGJyZWFrOworKworKwkgICAgZGVmYXVsdDoKKysJICAgICAgaWYgKGlnbm9yZV9jYXNlKQorKwkJeworKwkJICB1d2MgPSB0b3d1cHBlciAod2MpOworKworKwkJICBpZiAodXdjICE9IHdjKQorKwkJICAgIHsKKysJCSAgICAgIG1ic3RhdGVfdCBzdGF0ZV93YzsKKysKKysJCSAgICAgIG1lbXNldCAoJnN0YXRlX3djLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgICAgICB3Y3J0b21iIChjb3B5W2ldICsgaiwgdXdjLCAmc3RhdGVfd2MpOworKwkJICAgIH0KKysJCSAgZWxzZQorKwkJICAgIG1lbWNweSAoY29weVtpXSArIGosIHN0cltpXSArIGosIG1ibGVuZ3RoKTsKKysJCX0KKysJICAgICAgZWxzZQorKwkJbWVtY3B5IChjb3B5W2ldICsgaiwgc3RyW2ldICsgaiwgbWJsZW5ndGgpOworKwkgICAgfQorKwkgIGogKz0gbWJsZW5ndGg7CisrCX0KKysgICAgICBjb3B5W2ldW2pdID0gJ1wwJzsKKysgICAgICBsZW5baV0gPSBqOworKyAgICB9CisrCisrICByZXR1cm4geG1lbWNvbGwgKGNvcHlbMF0sIGxlblswXSwgY29weVsxXSwgbGVuWzFdKTsKKyB9CisrI2VuZGlmCisgCisgLyogT3V0cHV0IHRoZSBsaW5lIGluIGxpbmVidWZmZXIgTElORSB0byBzdGFuZGFyZCBvdXRwdXQKKyAgICBwcm92aWRlZCB0aGF0IHRoZSBzd2l0Y2hlcyBzYXkgaXQgc2hvdWxkIGJlIG91dHB1dC4KK0BAIC0yOTUsMTUgKzQ3OCw0MyBAQAorICAgICB7CisgICAgICAgY2hhciAqcHJldmZpZWxkIElGX0xJTlQgKD0gTlVMTCk7CisgICAgICAgc2l6ZV90IHByZXZsZW4gSUZfTElOVCAoPSAwKTsKKysjaWYgSEFWRV9NQlJUT1dDCisrICAgICAgbWJzdGF0ZV90IHByZXZzdGF0ZTsKKysKKysgICAgICBtZW1zZXQgKCZwcmV2c3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrI2VuZGlmCisgCisgICAgICAgd2hpbGUgKCFmZW9mIChzdGRpbikpCisgCXsKKyAJICBjaGFyICp0aGlzZmllbGQ7CisgCSAgc2l6ZV90IHRoaXNsZW47CisrI2lmIEhBVkVfTUJSVE9XQworKwkgIG1ic3RhdGVfdCB0aGlzc3RhdGU7CisrI2VuZGlmCisrCisgCSAgaWYgKHJlYWRsaW5lYnVmZmVyICh0aGlzbGluZSwgc3RkaW4pID09IDApCisgCSAgICBicmVhazsKKyAJICB0aGlzZmllbGQgPSBmaW5kX2ZpZWxkICh0aGlzbGluZSk7CisgCSAgdGhpc2xlbiA9IHRoaXNsaW5lLT5sZW5ndGggLSAxIC0gKHRoaXNmaWVsZCAtIHRoaXNsaW5lLT5idWZmZXIpOworKyNpZiBIQVZFX01CUlRPV0MKKysJICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgIHRoaXNzdGF0ZSA9IHRoaXNsaW5lLT5zdGF0ZTsKKysKKysgICAgICAgICAgICBpZiAocHJldmxpbmUtPmxlbmd0aCA9PSAwIHx8IGRpZmZlcmVudF9tdWx0aQorKyAgICAgICAgICAgICAgKHRoaXNmaWVsZCwgcHJldmZpZWxkLCB0aGlzbGVuLCBwcmV2bGVuLCB0aGlzc3RhdGUsIHByZXZzdGF0ZSkpCisrICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGZ3cml0ZSAodGhpc2xpbmUtPmJ1ZmZlciwgc2l6ZW9mIChjaGFyKSwKKysgICAgICAgICAgICAgICAgICAgICAgICB0aGlzbGluZS0+bGVuZ3RoLCBzdGRvdXQpOworKworKyAgICAgICAgICAgICAgICBTV0FQX0xJTkVTIChwcmV2bGluZSwgdGhpc2xpbmUpOworKyAgICAgICAgICAgICAgICBwcmV2ZmllbGQgPSB0aGlzZmllbGQ7CisrICAgICAgICAgICAgICAgIHByZXZsZW4gPSB0aGlzbGVuOworKyAgICAgICAgICAgICAgICBwcmV2c3RhdGUgPSB0aGlzc3RhdGU7CisrICAgICAgICAgICAgICB9CisrICAgICAgICAgIH0KKysJZWxzZQorKyNlbmRpZgorIAkgIGlmIChwcmV2bGluZS0+bGVuZ3RoID09IDAKKyAJICAgICAgfHwgZGlmZmVyZW50ICh0aGlzZmllbGQsIHByZXZmaWVsZCwgdGhpc2xlbiwgcHJldmxlbikpCisgCSAgICB7CitAQCAtMzIyLDE3ICs1MzMsMjYgQEAKKyAgICAgICBzaXplX3QgcHJldmxlbjsKKyAgICAgICB1aW50bWF4X3QgbWF0Y2hfY291bnQgPSAwOworICAgICAgIGJvb2wgZmlyc3RfZGVsaW1pdGVyID0gdHJ1ZTsKKysjaWYgSEFWRV9NQlJUT1dDCisrICAgICAgbWJzdGF0ZV90IHByZXZzdGF0ZTsKKysjZW5kaWYKKyAKKyAgICAgICBpZiAocmVhZGxpbmVidWZmZXIgKHByZXZsaW5lLCBzdGRpbikgPT0gMCkKKyAJZ290byBjbG9zZWZpbGVzOworICAgICAgIHByZXZmaWVsZCA9IGZpbmRfZmllbGQgKHByZXZsaW5lKTsKKyAgICAgICBwcmV2bGVuID0gcHJldmxpbmUtPmxlbmd0aCAtIDEgLSAocHJldmZpZWxkIC0gcHJldmxpbmUtPmJ1ZmZlcik7CisrI2lmIEhBVkVfTUJSVE9XQworKyAgICAgIHByZXZzdGF0ZSA9IHByZXZsaW5lLT5zdGF0ZTsKKysjZW5kaWYKKyAKKyAgICAgICB3aGlsZSAoIWZlb2YgKHN0ZGluKSkKKyAJeworIAkgIGJvb2wgbWF0Y2g7CisgCSAgY2hhciAqdGhpc2ZpZWxkOworIAkgIHNpemVfdCB0aGlzbGVuOworKyNpZiBIQVZFX01CUlRPV0MKKysJICBtYnN0YXRlX3QgdGhpc3N0YXRlOworKyNlbmRpZgorIAkgIGlmIChyZWFkbGluZWJ1ZmZlciAodGhpc2xpbmUsIHN0ZGluKSA9PSAwKQorIAkgICAgeworIAkgICAgICBpZiAoZmVycm9yIChzdGRpbikpCitAQCAtMzQxLDYgKzU2MSwxNSBAQAorIAkgICAgfQorIAkgIHRoaXNmaWVsZCA9IGZpbmRfZmllbGQgKHRoaXNsaW5lKTsKKyAJICB0aGlzbGVuID0gdGhpc2xpbmUtPmxlbmd0aCAtIDEgLSAodGhpc2ZpZWxkIC0gdGhpc2xpbmUtPmJ1ZmZlcik7CisrI2lmIEhBVkVfTUJSVE9XQworKwkgIGlmIChNQl9DVVJfTUFYID4gMSkKKysJICAgIHsKKysgICAgICAgICAgICAgIHRoaXNzdGF0ZSA9IHRoaXNsaW5lLT5zdGF0ZTsKKysgICAgICAgICAgICAgIG1hdGNoID0gIWRpZmZlcmVudF9tdWx0aSAodGhpc2ZpZWxkLCBwcmV2ZmllbGQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzbGVuLCBwcmV2bGVuLCB0aGlzc3RhdGUsIHByZXZzdGF0ZSk7CisrICAgICAgICAgICAgfQorKwkgIGVsc2UKKysjZW5kaWYKKyAJICBtYXRjaCA9ICFkaWZmZXJlbnQgKHRoaXNmaWVsZCwgcHJldmZpZWxkLCB0aGlzbGVuLCBwcmV2bGVuKTsKKyAJICBtYXRjaF9jb3VudCArPSBtYXRjaDsKKyAKK0BAIC0zNzMsNiArNjAyLDkgQEAKKyAJICAgICAgU1dBUF9MSU5FUyAocHJldmxpbmUsIHRoaXNsaW5lKTsKKyAJICAgICAgcHJldmZpZWxkID0gdGhpc2ZpZWxkOworIAkgICAgICBwcmV2bGVuID0gdGhpc2xlbjsKKysjaWYgSEFWRV9NQlJUT1dDCisrCSAgICAgIHByZXZzdGF0ZSA9IHRoaXNzdGF0ZTsKKysjZW5kaWYKKyAJICAgICAgaWYgKCFtYXRjaCkKKyAJCW1hdGNoX2NvdW50ID0gMDsKKyAJICAgIH0KK0BAIC00MTcsNiArNjQ5LDE5IEBACisgCisgICBhdGV4aXQgKGNsb3NlX3N0ZG91dCk7CisgCisrI2lmIEhBVkVfTUJSVE9XQworKyAgaWYgKE1CX0NVUl9NQVggPiAxKQorKyAgICB7CisrICAgICAgZmluZF9maWVsZCA9IGZpbmRfZmllbGRfbXVsdGk7CisrICAgIH0KKysgIGVsc2UKKysjZW5kaWYKKysgICAgeworKyAgICAgIGZpbmRfZmllbGQgPSBmaW5kX2ZpZWxkX3VuaTsKKysgICAgfQorKworKworKworICAgc2tpcF9jaGFycyA9IDA7CisgICBza2lwX2ZpZWxkcyA9IDA7CisgICBjaGVja19jaGFycyA9IFNJWkVfTUFYOworLS0tIGNvcmV1dGlscy02LjgrL3NyYy9mb2xkLmMuaTE4bgkyMDA3LTAyLTIzIDEyOjAxOjQ3LjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3NyYy9mb2xkLmMJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yMywxMSArMjMsMzMgQEAKKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIAorKy8qIEdldCBtYnN0YXRlX3QsIG1icnRvd2MoKSwgd2N3aWR0aCgpLiAgKi8KKysjaWYgSEFWRV9XQ0hBUl9ICisrIyBpbmNsdWRlIDx3Y2hhci5oPgorKyNlbmRpZgorKworKy8qIEdldCBpc3dwcmludCgpLCBpc3dibGFuaygpLCB3Y3dpZHRoKCkuICAqLworKyNpZiBIQVZFX1dDVFlQRV9ICisrIyBpbmNsdWRlIDx3Y3R5cGUuaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSAic3lzdGVtLmgiCisgI2luY2x1ZGUgImVycm9yLmgiCisgI2luY2x1ZGUgInF1b3RlLmgiCisgI2luY2x1ZGUgInhzdHJ0b2wuaCIKKyAKKysvKiBNQl9MRU5fTUFYIGlzIGluY29ycmVjdGx5IGRlZmluZWQgdG8gYmUgMSBpbiBhdCBsZWFzdCBvbmUgR0NDCisrICAgICAgaW5zdGFsbGF0aW9uOyB3b3JrIGFyb3VuZCB0aGlzIGNvbmZpZ3VyYXRpb24gZXJyb3IuICAqLworKyNpZiAhZGVmaW5lZCBNQl9MRU5fTUFYIHx8IE1CX0xFTl9NQVggPCAyCisrIyB1bmRlZiBNQl9MRU5fTUFYCisrIyBkZWZpbmUgTUJfTEVOX01BWCAxNgorKyNlbmRpZgorKworKy8qIFNvbWUgc3lzdGVtcywgbGlrZSBCZU9TLCBoYXZlIG11bHRpYnl0ZSBlbmNvZGluZ3MgYnV0IGxhY2sgbWJzdGF0ZV90LiAgKi8KKysjaWYgSEFWRV9NQlJUT1dDICYmIGRlZmluZWQgbWJzdGF0ZV90CisrIyBkZWZpbmUgbWJydG93Yyhwd2MsIHMsIG4sIHBzKSAobWJydG93YykgKHB3YywgcywgbiwgMCkKKysjZW5kaWYKKysKKyAjZGVmaW5lIFRBQl9XSURUSCA4CisgCisgLyogVGhlIG9mZmljaWFsIG5hbWUgb2YgdGhpcyBwcm9ncmFtIChlLmcuLCBubyBgZycgcHJlZml4KS4gICovCitAQCAtMzUsMjMgKzU3LDQ0IEBACisgCisgI2RlZmluZSBBVVRIT1JTICJEYXZpZCBNYWNLZW56aWUiCisgCisrI2RlZmluZSBGQVRBTF9FUlJPUihNZXNzYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgZXJyb3IgKDAsIDAsIChNZXNzYWdlKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIHVzYWdlICgyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB3aGlsZSAoMCkKKysKKytlbnVtIG9wZXJhdGluZ19tb2RlCisreworKyAgLyogRm9sZCB0ZXh0cyBieSBjb2x1bW5zIHRoYXQgYXJlIGF0IHRoZSBnaXZlbiBwb3NpdGlvbnMuICovCisrICBjb2x1bW5fbW9kZSwKKysKKysgIC8qIEZvbGQgdGV4dHMgYnkgYnl0ZXMgdGhhdCBhcmUgYXQgdGhlIGdpdmVuIHBvc2l0aW9ucy4gKi8KKysgIGJ5dGVfbW9kZSwKKysKKysgIC8qIEZvbGQgdGV4dHMgYnkgY2hhcmFjdGVycyB0aGF0IGFyZSBhdCB0aGUgZ2l2ZW4gcG9zaXRpb25zLiAqLworKyAgY2hhcmFjdGVyX21vZGUsCisrfTsKKysKKyAvKiBUaGUgbmFtZSB0aGlzIHByb2dyYW0gd2FzIHJ1biB3aXRoLiAqLworIGNoYXIgKnByb2dyYW1fbmFtZTsKKyAKKysvKiBUaGUgYXJndW1lbnQgc2hvd3MgY3VycmVudCBtb2RlLiAoRGVmYXVsdDogY29sdW1uX21vZGUpICovCisrc3RhdGljIGVudW0gb3BlcmF0aW5nX21vZGUgb3BlcmF0aW5nX21vZGU7CisrCisgLyogSWYgbm9uemVybywgdHJ5IHRvIGJyZWFrIG9uIHdoaXRlc3BhY2UuICovCisgc3RhdGljIGJvb2wgYnJlYWtfc3BhY2VzOworIAorLS8qIElmIG5vbnplcm8sIGNvdW50IGJ5dGVzLCBub3QgY29sdW1uIHBvc2l0aW9ucy4gKi8KKy1zdGF0aWMgYm9vbCBjb3VudF9ieXRlczsKKy0KKyAvKiBJZiBub256ZXJvLCBhdCBsZWFzdCBvbmUgb2YgdGhlIGZpbGVzIHdlIHJlYWQgd2FzIHN0YW5kYXJkIGlucHV0LiAqLworIHN0YXRpYyBib29sIGhhdmVfcmVhZF9zdGRpbjsKKyAKKy1zdGF0aWMgY2hhciBjb25zdCBzaG9ydG9wdHNbXSA9ICJic3c6MDo6MTo6Mjo6Mzo6NDo6NTo6Njo6Nzo6ODo6OTo6IjsKKytzdGF0aWMgY2hhciBjb25zdCBzaG9ydG9wdHNbXSA9ICJiY3N3OjA6OjE6OjI6OjM6OjQ6OjU6OjY6Ojc6Ojg6Ojk6OiI7CisgCisgc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3QgbG9uZ29wdHNbXSA9CisgeworICAgeyJieXRlcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnYid9LAorKyAgeyJjaGFyYWN0ZXJzIiwgbm9fYXJndW1lbnQsIE5VTEwsICdjJ30sCisgICB7InNwYWNlcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncyd9LAorICAgeyJ3aWR0aCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAndyd9LAorICAge0dFVE9QVF9IRUxQX09QVElPTl9ERUNMfSwKK0BAIC04MSw2ICsxMjQsNyBAQAorICIpLCBzdGRvdXQpOworICAgICAgIGZwdXRzIChfKCJcCisgICAtYiwgLS1ieXRlcyAgICAgICAgIGNvdW50IGJ5dGVzIHJhdGhlciB0aGFuIGNvbHVtbnNcblwKKysgIC1jLCAtLWNoYXJhY3RlcnMgICAgY291bnQgY2hhcmFjdGVycyByYXRoZXIgdGhhbiBjb2x1bW5zXG5cCisgICAtcywgLS1zcGFjZXMgICAgICAgIGJyZWFrIGF0IHNwYWNlc1xuXAorICAgLXcsIC0td2lkdGg9V0lEVEggICB1c2UgV0lEVEggY29sdW1ucyBpbnN0ZWFkIG9mIDgwXG5cCisgIiksIHN0ZG91dCk7CitAQCAtOTgsNyArMTQyLDcgQEAKKyBzdGF0aWMgc2l6ZV90CisgYWRqdXN0X2NvbHVtbiAoc2l6ZV90IGNvbHVtbiwgY2hhciBjKQorIHsKKy0gIGlmICghY291bnRfYnl0ZXMpCisrICBpZiAob3BlcmF0aW5nX21vZGUgIT0gYnl0ZV9tb2RlKQorICAgICB7CisgICAgICAgaWYgKGMgPT0gJ1xiJykKKyAJeworQEAgLTEyMSwzMCArMTY1LDE0IEBACisgICAgdG8gc3Rkb3V0LCB3aXRoIG1heGltdW0gbGluZSBsZW5ndGggV0lEVEguCisgICAgUmV0dXJuIHRydWUgaWYgc3VjY2Vzc2Z1bC4gICovCisgCistc3RhdGljIGJvb2wKKy1mb2xkX2ZpbGUgKGNoYXIgY29uc3QgKmZpbGVuYW1lLCBzaXplX3Qgd2lkdGgpCisrc3RhdGljIHZvaWQKKytmb2xkX3RleHQgKEZJTEUgKmlzdHJlYW0sIHNpemVfdCB3aWR0aCwgaW50ICpzYXZlZF9lcnJubykKKyB7CistICBGSUxFICppc3RyZWFtOworICAgaW50IGM7CisgICBzaXplX3QgY29sdW1uID0gMDsJCS8qIFNjcmVlbiBjb2x1bW4gd2hlcmUgbmV4dCBjaGFyIHdpbGwgZ28uICovCisgICBzaXplX3Qgb2Zmc2V0X291dCA9IDA7CS8qIEluZGV4IGluIGBsaW5lX291dCcgZm9yIG5leHQgY2hhci4gKi8KKyAgIHN0YXRpYyBjaGFyICpsaW5lX291dCA9IE5VTEw7CisgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRlZF9vdXQgPSAwOworLSAgaW50IHNhdmVkX2Vycm5vOworLQorLSAgaWYgKFNUUkVRIChmaWxlbmFtZSwgIi0iKSkKKy0gICAgeworLSAgICAgIGlzdHJlYW0gPSBzdGRpbjsKKy0gICAgICBoYXZlX3JlYWRfc3RkaW4gPSB0cnVlOworLSAgICB9CistICBlbHNlCistICAgIGlzdHJlYW0gPSBmb3BlbiAoZmlsZW5hbWUsICJyIik7CistCistICBpZiAoaXN0cmVhbSA9PSBOVUxMKQorLSAgICB7CistICAgICAgZXJyb3IgKDAsIGVycm5vLCAiJXMiLCBmaWxlbmFtZSk7CistICAgICAgcmV0dXJuIGZhbHNlOworLSAgICB9CisgCisgICB3aGlsZSAoKGMgPSBnZXRjIChpc3RyZWFtKSkgIT0gRU9GKQorICAgICB7CitAQCAtMTcyLDYgKzIwMCwxNSBAQAorIAkgICAgICBib29sIGZvdW5kX2JsYW5rID0gZmFsc2U7CisgCSAgICAgIHNpemVfdCBsb2dpY2FsX2VuZCA9IG9mZnNldF9vdXQ7CisgCisrCSAgICAgIC8qIElmIExJTkVfT1VUIGhhcyBubyB3aWRlIGNoYXJhY3RlciwKKysJCSBwdXQgYSBuZXcgd2lkZSBjaGFyYWN0ZXIgaW4gTElORV9PVVQKKysJCSBpZiBjb2x1bW4gaXMgYmlnZ2VyIHRoYW4gd2lkdGguICovCisrCSAgICAgIGlmIChvZmZzZXRfb3V0ID09IDApCisrCQl7CisrCQkgIGxpbmVfb3V0W29mZnNldF9vdXQrK10gPSBjOworKwkJICBjb250aW51ZTsKKysJCX0KKysKKyAJICAgICAgLyogTG9vayBmb3IgdGhlIGxhc3QgYmxhbmsuICovCisgCSAgICAgIHdoaWxlIChsb2dpY2FsX2VuZCkKKyAJCXsKK0BAIC0yMTgsMTEgKzI1NSwyMjUgQEAKKyAgICAgICBsaW5lX291dFtvZmZzZXRfb3V0KytdID0gYzsKKyAgICAgfQorIAorLSAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKysgICpzYXZlZF9lcnJubyA9IGVycm5vOworKworKyAgaWYgKG9mZnNldF9vdXQpCisrICAgIGZ3cml0ZSAobGluZV9vdXQsIHNpemVvZiAoY2hhciksIChzaXplX3QpIG9mZnNldF9vdXQsIHN0ZG91dCk7CisrCisrICBmcmVlKGxpbmVfb3V0KTsKKyt9CisrCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyB2b2lkCisrZm9sZF9tdWx0aWJ5dGVfdGV4dCAoRklMRSAqaXN0cmVhbSwgc2l6ZV90IHdpZHRoLCBpbnQgKnNhdmVkX2Vycm5vKQorK3sKKysgIGNoYXIgYnVmW01CX0xFTl9NQVggKyBCVUZTSVpdOyAgLyogRm9yIHNwb29saW5nIGEgcmVhZCBieXRlIHNlcXVlbmNlLiAqLworKyAgc2l6ZV90IGJ1ZmxlbiA9IDA7CS8qIFRoZSBsZW5ndGggb2YgdGhlIGJ5dGUgc2VxdWVuY2UgaW4gYnVmLiAqLworKyAgY2hhciAqYnVmcG9zOyAgICAgICAgIC8qIE5leHQgcmVhZCBwb3NpdGlvbiBvZiBCVUYuICovCisrICB3aW50X3Qgd2M7CQkvKiBBIGdvdHRlbiB3aWRlIGNoYXJhY3Rlci4gKi8KKysgIHNpemVfdCBtYmxlbmd0aDsJLyogVGhlIGJ5dGUgc2l6ZSBvZiBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIgd2hpY2ggc2hvd3MKKysJCQkgICBhcyBzYW1lIGNoYXJhY3RlciBhcyBXQy4gKi8KKysgIG1ic3RhdGVfdCBzdGF0ZSwgc3RhdGVfYmFrOwkvKiBTdGF0ZSBvZiB0aGUgc3RyZWFtLiAqLworKyAgaW50IGNvbnZmYWlsOwkJLyogMSwgd2hlbiBjb252ZXJzaW9uIGlzIGZhaWxlZC4gT3RoZXJ3aXNlIDAuICovCisrCisrICBjaGFyICpsaW5lX291dCA9IE5VTEw7CisrICBzaXplX3Qgb2Zmc2V0X291dCA9IDA7CS8qIEluZGV4IGluIGBsaW5lX291dCcgZm9yIG5leHQgY2hhci4gKi8KKysgIHNpemVfdCBhbGxvY2F0ZWRfb3V0ID0gMDsKKysKKysgIGludCBpbmNyZW1lbnQ7CisrICBzaXplX3QgY29sdW1uID0gMDsKKysKKysgIHNpemVfdCBsYXN0X2JsYW5rX3BvczsKKysgIHNpemVfdCBsYXN0X2JsYW5rX2NvbHVtbjsKKysgIGludCBpc19ibGFua19zZWVuOworKyAgaW50IGxhc3RfYmxhbmtfaW5jcmVtZW50OworKyAgaW50IGlzX2JzX2ZvbGxvd2luZ19sYXN0X2JsYW5rOworKyAgc2l6ZV90IGJzX2ZvbGxvd2luZ19sYXN0X2JsYW5rX251bTsKKysgIGludCBpc19jcl9hZnRlcl9sYXN0X2JsYW5rOworKworKyNkZWZpbmUgQ0xFQVJfRkxBR1MJCQkJXAorKyAgIGRvCQkJCQkJXAorKyAgICAgewkJCQkJCVwKKysJbGFzdF9ibGFua19wb3MgPSAwOwkJCVwKKysJbGFzdF9ibGFua19jb2x1bW4gPSAwOwkJCVwKKysJaXNfYmxhbmtfc2VlbiA9IDA7CQkJXAorKwlpc19ic19mb2xsb3dpbmdfbGFzdF9ibGFuayA9IDA7CQlcCisrCWJzX2ZvbGxvd2luZ19sYXN0X2JsYW5rX251bSA9IDA7CVwKKysJaXNfY3JfYWZ0ZXJfbGFzdF9ibGFuayA9IDA7CQlcCisrICAgICB9CQkJCQkJXAorKyAgIHdoaWxlICgwKQorKworKyNkZWZpbmUgU1RBUlRfTkVXX0xJTkUJCQlcCisrICAgZG8JCQkJCVwKKysgICAgIHsJCQkJCVwKKysgICAgICBwdXRjaGFyICgnXG4nKTsJCQlcCisrICAgICAgY29sdW1uID0gMDsJCQlcCisrICAgICAgb2Zmc2V0X291dCA9IDA7CQkJXAorKyAgICAgIENMRUFSX0ZMQUdTOwkJCVwKKysgICAgfQkJCQkJXAorKyAgIHdoaWxlICgwKQorKworKyAgQ0xFQVJfRkxBR1M7CisrICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgZm9yICg7OyBidWZwb3MgKz0gbWJsZW5ndGgsIGJ1ZmxlbiAtPSBtYmxlbmd0aCkKKysgICAgeworKyAgICAgIGlmIChidWZsZW4gPCBNQl9MRU5fTUFYICYmICFmZW9mIChpc3RyZWFtKSAmJiAhZmVycm9yIChpc3RyZWFtKSkKKysJeworKwkgIG1lbW1vdmUgKGJ1ZiwgYnVmcG9zLCBidWZsZW4pOworKwkgIGJ1ZmxlbiArPSBmcmVhZCAoYnVmICsgYnVmbGVuLCBzaXplb2YoY2hhciksIEJVRlNJWiwgaXN0cmVhbSk7CisrCSAgYnVmcG9zID0gYnVmOworKwl9CisrCisrICAgICAgaWYgKGJ1ZmxlbiA8IDEpCisrCWJyZWFrOworKworKyAgICAgIC8qIEdldCBhIHdpZGUgY2hhcmFjdGVyLiAqLworKyAgICAgIGNvbnZmYWlsID0gMDsKKysgICAgICBzdGF0ZV9iYWsgPSBzdGF0ZTsKKysgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCh3Y2hhcl90ICopJndjLCBidWZwb3MsIGJ1ZmxlbiwgJnN0YXRlKTsKKysKKysgICAgICBzd2l0Y2ggKG1ibGVuZ3RoKQorKwl7CisrCWNhc2UgKHNpemVfdCktMToKKysJY2FzZSAoc2l6ZV90KS0yOgorKwkgIGNvbnZmYWlsKys7CisrCSAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrCSAgLyogRmFsbCB0aHJvdWdoLiAqLworKworKwljYXNlIDA6CisrCSAgbWJsZW5ndGggPSAxOworKwkgIGJyZWFrOworKwl9CisrCisrcmVzY2FuOgorKyAgICAgIGlmIChvcGVyYXRpbmdfbW9kZSA9PSBieXRlX21vZGUpCQkJLyogYnl0ZSBtb2RlICovCisrCWluY3JlbWVudCA9IG1ibGVuZ3RoOworKyAgICAgIGVsc2UgaWYgKG9wZXJhdGluZ19tb2RlID09IGNoYXJhY3Rlcl9tb2RlKQkvKiBjaGFyYWN0ZXIgbW9kZSAqLworKwlpbmNyZW1lbnQgPSAxOworKyAgICAgIGVsc2UJCQkJCQkvKiBjb2x1bW4gbW9kZSAqLworKwl7CisrCSAgaWYgKGNvbnZmYWlsKQorKwkgICAgaW5jcmVtZW50ID0gMTsKKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIHN3aXRjaCAod2MpCisrCQl7CisrCQljYXNlIEwnXG4nOgorKwkJICBmd3JpdGUgKGxpbmVfb3V0LCBzaXplb2YoY2hhciksIG9mZnNldF9vdXQsIHN0ZG91dCk7CisrCQkgIFNUQVJUX05FV19MSU5FOworKwkJICBjb250aW51ZTsKKysJCSAgCisrCQljYXNlIEwnXGInOgorKwkJICBpbmNyZW1lbnQgPSAoY29sdW1uID4gMCkgPyAtMSA6IDA7CisrCQkgIGJyZWFrOworKworKwkJY2FzZSBMJ1xyJzoKKysJCSAgaW5jcmVtZW50ID0gLTEgKiBjb2x1bW47CisrCQkgIGJyZWFrOworKworKwkJY2FzZSBMJ1x0JzoKKysJCSAgaW5jcmVtZW50ID0gOCAtIGNvbHVtbiAlIDg7CisrCQkgIGJyZWFrOworKworKwkJZGVmYXVsdDoKKysJCSAgaW5jcmVtZW50ID0gd2N3aWR0aCAod2MpOworKwkJICBpbmNyZW1lbnQgPSAoaW5jcmVtZW50IDwgMCkgPyAwIDogaW5jcmVtZW50OworKwkJfQorKwkgICAgfQorKwl9CisrCisrICAgICAgaWYgKGNvbHVtbiArIGluY3JlbWVudCA+IHdpZHRoICYmIGJyZWFrX3NwYWNlcyAmJiBsYXN0X2JsYW5rX3BvcykKKysJeworKwkgIGZ3cml0ZSAobGluZV9vdXQsIHNpemVvZihjaGFyKSwgbGFzdF9ibGFua19wb3MsIHN0ZG91dCk7CisrCSAgcHV0Y2hhciAoJ1xuJyk7CisrCisrCSAgb2Zmc2V0X291dCA9IG9mZnNldF9vdXQgLSBsYXN0X2JsYW5rX3BvczsKKysJICBjb2x1bW4gPSBjb2x1bW4gLSBsYXN0X2JsYW5rX2NvbHVtbiArICgoaXNfY3JfYWZ0ZXJfbGFzdF9ibGFuaykKKysJICAgICAgPyBsYXN0X2JsYW5rX2luY3JlbWVudCA6IGJzX2ZvbGxvd2luZ19sYXN0X2JsYW5rX251bSk7CisrCSAgbWVtbW92ZSAobGluZV9vdXQsIGxpbmVfb3V0ICsgbGFzdF9ibGFua19wb3MsIG9mZnNldF9vdXQpOworKwkgIENMRUFSX0ZMQUdTOworKwkgIGdvdG8gcmVzY2FuOworKwl9CisrCisrICAgICAgaWYgKGNvbHVtbiArIGluY3JlbWVudCA+IHdpZHRoICYmIGNvbHVtbiAhPSAwKQorKwl7CisrCSAgZndyaXRlIChsaW5lX291dCwgc2l6ZW9mKGNoYXIpLCBvZmZzZXRfb3V0LCBzdGRvdXQpOworKwkgIFNUQVJUX05FV19MSU5FOworKwkgIGdvdG8gcmVzY2FuOworKwl9CisrCisrICAgICAgaWYgKGFsbG9jYXRlZF9vdXQgPCBvZmZzZXRfb3V0ICsgbWJsZW5ndGgpCisrCXsKKysJICBhbGxvY2F0ZWRfb3V0ICs9IDEwMjQ7CisrCSAgbGluZV9vdXQgPSB4cmVhbGxvYyAobGluZV9vdXQsIGFsbG9jYXRlZF9vdXQpOworKwl9CisrCisrICAgICAgbWVtY3B5IChsaW5lX291dCArIG9mZnNldF9vdXQsIGJ1ZnBvcywgbWJsZW5ndGgpOworKyAgICAgIG9mZnNldF9vdXQgKz0gbWJsZW5ndGg7CisrICAgICAgY29sdW1uICs9IGluY3JlbWVudDsKKysKKysgICAgICBpZiAoaXNfYmxhbmtfc2VlbiAmJiAhY29udmZhaWwgJiYgd2MgPT0gTCdccicpCisrCWlzX2NyX2FmdGVyX2xhc3RfYmxhbmsgPSAxOworKworKyAgICAgIGlmIChpc19ic19mb2xsb3dpbmdfbGFzdF9ibGFuayAmJiAhY29udmZhaWwgJiYgd2MgPT0gTCdcYicpCisrCSsrYnNfZm9sbG93aW5nX2xhc3RfYmxhbmtfbnVtOworKyAgICAgIGVsc2UKKysJaXNfYnNfZm9sbG93aW5nX2xhc3RfYmxhbmsgPSAwOworKworKyAgICAgIGlmIChicmVha19zcGFjZXMgJiYgIWNvbnZmYWlsICYmIGlzd2JsYW5rICh3YykpCisrCXsKKysJICBsYXN0X2JsYW5rX3BvcyA9IG9mZnNldF9vdXQ7CisrCSAgbGFzdF9ibGFua19jb2x1bW4gPSBjb2x1bW47CisrCSAgaXNfYmxhbmtfc2VlbiA9IDE7CisrCSAgbGFzdF9ibGFua19pbmNyZW1lbnQgPSBpbmNyZW1lbnQ7CisrCSAgaXNfYnNfZm9sbG93aW5nX2xhc3RfYmxhbmsgPSAxOworKwkgIGJzX2ZvbGxvd2luZ19sYXN0X2JsYW5rX251bSA9IDA7CisrCSAgaXNfY3JfYWZ0ZXJfbGFzdF9ibGFuayA9IDA7CisrCX0KKysgICAgfQorKworKyAgKnNhdmVkX2Vycm5vID0gZXJybm87CisgCisgICBpZiAob2Zmc2V0X291dCkKKyAgICAgZndyaXRlIChsaW5lX291dCwgc2l6ZW9mIChjaGFyKSwgKHNpemVfdCkgb2Zmc2V0X291dCwgc3Rkb3V0KTsKKyAKKysgIGZyZWUobGluZV9vdXQpOworK30KKysjZW5kaWYKKysKKysvKiBGb2xkIGZpbGUgRklMRU5BTUUsIG9yIHN0YW5kYXJkIGlucHV0IGlmIEZJTEVOQU1FIGlzICItIiwKKysgICB0byBzdGRvdXQsIHdpdGggbWF4aW11bSBsaW5lIGxlbmd0aCBXSURUSC4KKysgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCAxIGlmIGFuIGVycm9yIG9jY3Vycy4gKi8KKysKKytzdGF0aWMgYm9vbAorK2ZvbGRfZmlsZSAoY2hhciAqZmlsZW5hbWUsIHNpemVfdCB3aWR0aCkKKyt7CisrICBGSUxFICppc3RyZWFtOworKyAgaW50IHNhdmVkX2Vycm5vOworKworKyAgaWYgKFNUUkVRIChmaWxlbmFtZSwgIi0iKSkKKysgICAgeworKyAgICAgIGlzdHJlYW0gPSBzdGRpbjsKKysgICAgICBoYXZlX3JlYWRfc3RkaW4gPSAxOworKyAgICB9CisrICBlbHNlCisrICAgIGlzdHJlYW0gPSBmb3BlbiAoZmlsZW5hbWUsICJyIik7CisrCisrICBpZiAoaXN0cmVhbSA9PSBOVUxMKQorKyAgICB7CisrICAgICAgZXJyb3IgKDAsIGVycm5vLCAiJXMiLCBmaWxlbmFtZSk7CisrICAgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysgIC8qIERlZmluZSBob3cgSVNUUkVBTSBpcyBiZWluZyBmb2xkZWQuICovCisrI2lmIEhBVkVfTUJSVE9XQworKyAgaWYgKE1CX0NVUl9NQVggPiAxKQorKyAgICBmb2xkX211bHRpYnl0ZV90ZXh0IChpc3RyZWFtLCB3aWR0aCwgJnNhdmVkX2Vycm5vKTsKKysgIGVsc2UKKysjZW5kaWYKKysgICAgZm9sZF90ZXh0IChpc3RyZWFtLCB3aWR0aCwgJnNhdmVkX2Vycm5vKTsKKysKKyAgIGlmIChmZXJyb3IgKGlzdHJlYW0pKQorICAgICB7CisgICAgICAgZXJyb3IgKDAsIHNhdmVkX2Vycm5vLCAiJXMiLCBmaWxlbmFtZSk7CitAQCAtMjU1LDcgKzUwNiw4IEBACisgCisgICBhdGV4aXQgKGNsb3NlX3N0ZG91dCk7CisgCistICBicmVha19zcGFjZXMgPSBjb3VudF9ieXRlcyA9IGhhdmVfcmVhZF9zdGRpbiA9IGZhbHNlOworKyAgb3BlcmF0aW5nX21vZGUgPSBjb2x1bW5fbW9kZTsKKysgIGJyZWFrX3NwYWNlcyA9IGhhdmVfcmVhZF9zdGRpbiA9IGZhbHNlOworIAorICAgd2hpbGUgKChvcHRjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsIHNob3J0b3B0cywgbG9uZ29wdHMsIE5VTEwpKSAhPSAtMSkKKyAgICAgeworQEAgLTI2NCw3ICs1MTYsMTUgQEAKKyAgICAgICBzd2l0Y2ggKG9wdGMpCisgCXsKKyAJY2FzZSAnYic6CQkvKiBDb3VudCBieXRlcyByYXRoZXIgdGhhbiBjb2x1bW5zLiAqLworLQkgIGNvdW50X2J5dGVzID0gdHJ1ZTsKKysJICBpZiAob3BlcmF0aW5nX21vZGUgIT0gY29sdW1uX21vZGUpCisrCSAgICBGQVRBTF9FUlJPUiAoXygib25seSBvbmUgd2F5IG9mIGZvbGRpbmcgbWF5IGJlIHNwZWNpZmllZCIpKTsKKysJICBvcGVyYXRpbmdfbW9kZSA9IGJ5dGVfbW9kZTsKKysJICBicmVhazsKKysKKysJY2FzZSAnYyc6CisrCSAgaWYgKG9wZXJhdGluZ19tb2RlICE9IGNvbHVtbl9tb2RlKQorKwkgICAgRkFUQUxfRVJST1IgKF8oIm9ubHkgb25lIHdheSBvZiBmb2xkaW5nIG1heSBiZSBzcGVjaWZpZWQiKSk7CisrCSAgb3BlcmF0aW5nX21vZGUgPSBjaGFyYWN0ZXJfbW9kZTsKKyAJICBicmVhazsKKyAKKyAJY2FzZSAncyc6CQkvKiBCcmVhayBhdCB3b3JkIGJvdW5kYXJpZXMuICovCistLS0gY29yZXV0aWxzLTYuOCsvc3JjL3NvcnQuYy5pMThuCTIwMDctMDItMjQgMTE6MjM6MjMuMDAwMDAwMDAwICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvc3JjL3NvcnQuYwkyMDA3LTAzLTAxIDE1OjEwOjU3LjAwMDAwMDAwMCArMDAwMAorQEAgLTIzLDEwICsyMywxOSBAQAorIAorICNpbmNsdWRlIDxjb25maWcuaD4KKyAKKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPGdldG9wdC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyAjaW5jbHVkZSA8c2lnbmFsLmg+CisrI2lmIEhBVkVfV0NIQVJfSAorKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjZW5kaWYKKysvKiBHZXQgaXN3KiBmdW5jdGlvbnMuICovCisrI2lmIEhBVkVfV0NUWVBFX0gKKysjIGluY2x1ZGUgPHdjdHlwZS5oPgorKyNlbmRpZgorKworICNpbmNsdWRlICJzeXN0ZW0uaCIKKyAjaW5jbHVkZSAiYXJnbWF0Y2guaCIKKyAjaW5jbHVkZSAiZXJyb3IuaCIKK0BAIC0xMTYsMTQgKzEyNSwzOCBAQAorIC8qIFRob3VzYW5kcyBzZXBhcmF0b3I7IGlmIC0xLCB0aGVuIHRoZXJlIGlzbid0IG9uZS4gICovCisgc3RhdGljIGludCB0aG91c2FuZHNfc2VwOworIAorK3N0YXRpYyBpbnQgZm9yY2VfZ2VuZXJhbF9udW1jb21wYXJlID0gMDsKKysKKyAvKiBOb256ZXJvIGlmIHRoZSBjb3JyZXNwb25kaW5nIGxvY2FsZXMgYXJlIGhhcmQuICAqLworIHN0YXRpYyBib29sIGhhcmRfTENfQ09MTEFURTsKKy0jaWYgSEFWRV9OTF9MQU5HSU5GTworKyNpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKyBzdGF0aWMgYm9vbCBoYXJkX0xDX1RJTUU7CisgI2VuZGlmCisgCisgI2RlZmluZSBOT05aRVJPKHgpICgoeCkgIT0gMCkKKyAKKysvKiBnZXQgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyJ3MgYnl0ZSBsZW5ndGguICovCisrI2RlZmluZSBHRVRfQllURUxFTl9PRl9DSEFSKExJTSwgUFRSLCBNQkxFTkdUSCwgU1RBVEUpCQkJXAorKyAgZG8JCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgd2NoYXJfdCB3YzsJCQkJCQkJXAorKyAgICAgIG1ic3RhdGVfdCBzdGF0ZV9iYWs7CQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgICBzdGF0ZV9iYWsgPSBTVEFURTsJCQkJCQlcCisrICAgICAgbWJsZW5ndGggPSBtYnJ0b3djICgmd2MsIFBUUiwgTElNIC0gUFRSLCAmU1RBVEUpOwkJCVwKKysJCQkJCQkJCQlcCisrICAgICAgc3dpdGNoIChNQkxFTkdUSCkJCQkJCQkJXAorKwl7CQkJCQkJCQlcCisrCWNhc2UgKHNpemVfdCktMToJCQkJCQlcCisrCWNhc2UgKHNpemVfdCktMjoJCQkJCQlcCisrCSAgU1RBVEUgPSBzdGF0ZV9iYWs7CQkJCQkJXAorKwkJLyogRmFsbCB0aHJvdWdoLiAqLwkJCQkJXAorKwljYXNlIDA6CQkJCQkJCQlcCisrCSAgTUJMRU5HVEggPSAxOwkJCQkJCQlcCisrICAgICAgfQkJCQkJCQkJCVwKKysgICAgfQkJCQkJCQkJCVwKKysgIHdoaWxlICgwKQorKworIC8qIFRoZSBraW5kIG9mIGJsYW5rcyBmb3IgJy1iJyB0byBza2lwIGluIHZhcmlvdXMgb3B0aW9ucy4gKi8KKyBlbnVtIGJsYW5rdHlwZSB7IGJsX3N0YXJ0LCBibF9lbmQsIGJsX2JvdGggfTsKKyAKK0BAIC0yNjEsMTMgKzI5NCwxMSBAQAorICAgIHRoZXkgd2VyZSByZWFkIGlmIGFsbCBrZXlzIGNvbXBhcmUgZXF1YWwuICAqLworIHN0YXRpYyBib29sIHN0YWJsZTsKKyAKKy0vKiBJZiBUQUIgaGFzIHRoaXMgdmFsdWUsIGJsYW5rcyBzZXBhcmF0ZSBmaWVsZHMuICAqLworLWVudW0geyBUQUJfREVGQVVMVCA9IENIQVJfTUFYICsgMSB9OworLQorLS8qIFRhYiBjaGFyYWN0ZXIgc2VwYXJhdGluZyBmaWVsZHMuICBJZiBUQUJfREVGQVVMVCwgdGhlbiBmaWVsZHMgYXJlCisrLyogVGFiIGNoYXJhY3RlciBzZXBhcmF0aW5nIGZpZWxkcy4gIElmIHRhYl9sZW5ndGggaXMgMCwgdGhlbiBmaWVsZHMgYXJlCisgICAgc2VwYXJhdGVkIGJ5IHRoZSBlbXB0eSBzdHJpbmcgYmV0d2VlbiBhIG5vbi1ibGFuayBjaGFyYWN0ZXIgYW5kIGEgYmxhbmsKKyAgICBjaGFyYWN0ZXIuICovCistc3RhdGljIGludCB0YWIgPSBUQUJfREVGQVVMVDsKKytzdGF0aWMgY2hhciB0YWJbTUJfTEVOX01BWCArIDFdOworK3N0YXRpYyBzaXplX3QgdGFiX2xlbmd0aCA9IDA7CisgCisgLyogRmxhZyB0byByZW1vdmUgY29uc2VjdXRpdmUgZHVwbGljYXRlIGxpbmVzIGZyb20gdGhlIG91dHB1dC4KKyAgICBPbmx5IHRoZSBsYXN0IG9mIGEgc2VxdWVuY2Ugb2YgZXF1YWwgbGluZXMgd2lsbCBiZSBvdXRwdXQuICovCitAQCAtNjM5LDYgKzY3MCw0NCBAQAorICAgICB1cGRhdGVfcHJvYyAocGlkKTsKKyB9CisgCisrLyogRnVuY3Rpb24gcG9pbnRlcnMuICovCisrc3RhdGljIHZvaWQKKysoKmluaXR0YWJsZXMpICh2b2lkKTsKKytzdGF0aWMgY2hhciAqCisrKCpiZWdmaWVsZCkgKGNvbnN0IHN0cnVjdCBsaW5lKiwgY29uc3Qgc3RydWN0IGtleWZpZWxkICopOworK3N0YXRpYyBjaGFyICoKKysoKmxpbWZpZWxkKSAoY29uc3Qgc3RydWN0IGxpbmUqLCBjb25zdCBzdHJ1Y3Qga2V5ZmllbGQgKik7Cisrc3RhdGljIGludAorKygqZ2V0bW9udGgpIChjaGFyIGNvbnN0ICosIHNpemVfdCk7Cisrc3RhdGljIGludAorKygqa2V5Y29tcGFyZSkgKGNvbnN0IHN0cnVjdCBsaW5lICosIGNvbnN0IHN0cnVjdCBsaW5lICopOworK3N0YXRpYyBpbnQKKysoKm51bWNvbXBhcmUpIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisrCisrLyogVGVzdCBmb3Igd2hpdGUgc3BhY2UgbXVsdGlieXRlIGNoYXJhY3Rlci4KKysgICBTZXQgTEVOR1RIIHRoZSBieXRlIGxlbmd0aCBvZiBpbnZlc3RpZ2F0ZWQgbXVsdGlieXRlIGNoYXJhY3Rlci4gKi8KKysjaWYgSEFWRV9NQlJUT1dDCisrc3RhdGljIGludAorK2lzbWJibGFuayAoY29uc3QgY2hhciAqc3RyLCBzaXplX3QgbGVuLCBzaXplX3QgKmxlbmd0aCkKKyt7CisrICBzaXplX3QgbWJsZW5ndGg7CisrICB3Y2hhcl90IHdjOworKyAgbWJzdGF0ZV90IHN0YXRlOworKworKyAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCBzdHIsIGxlbiwgJnN0YXRlKTsKKysKKysgIGlmIChtYmxlbmd0aCA9PSAoc2l6ZV90KS0xIHx8IG1ibGVuZ3RoID09IChzaXplX3QpLTIpCisrICAgIHsKKysgICAgICAqbGVuZ3RoID0gMTsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgKmxlbmd0aCA9IChtYmxlbmd0aCA8IDEpID8gMSA6IG1ibGVuZ3RoOworKyAgcmV0dXJuIGlzd2JsYW5rICh3Yyk7CisrfQorKyNlbmRpZgorKworIC8qIENsZWFuIHVwIGFueSByZW1haW5pbmcgdGVtcG9yYXJ5IGZpbGVzLiAgKi8KKyAKKyBzdGF0aWMgdm9pZAorQEAgLTk3OCw3ICsxMDQ3LDcgQEAKKyAgIGZyZWUgKG5vZGUpOworIH0KKyAKKy0jaWYgSEFWRV9OTF9MQU5HSU5GTworKyNpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKyAKKyBzdGF0aWMgaW50Cisgc3RydWN0X21vbnRoX2NtcCAoY29uc3Qgdm9pZCAqbTEsIGNvbnN0IHZvaWQgKm0yKQorQEAgLTk5Myw3ICsxMDYyLDcgQEAKKyAvKiBJbml0aWFsaXplIHRoZSBjaGFyYWN0ZXIgY2xhc3MgdGFibGVzLiAqLworIAorIHN0YXRpYyB2b2lkCistaW5pdHRhYmxlcyAodm9pZCkKKytpbml0dGFibGVzX3VuaSAodm9pZCkKKyB7CisgICBzaXplX3QgaTsKKyAKK0BAIC0xMDA1LDcgKzEwNzQsNyBAQAorICAgICAgIGZvbGRfdG91cHBlcltpXSA9IHRvdXBwZXIgKGkpOworICAgICB9CisgCistI2lmIEhBVkVfTkxfTEFOR0lORk8KKysjaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisgICAvKiBJZiB3ZSdyZSBub3QgaW4gdGhlICJDIiBsb2NhbGUsIHJlYWQgZGlmZmVyZW50IG5hbWVzIGZvciBtb250aHMuICAqLworICAgaWYgKGhhcmRfTENfVElNRSkKKyAgICAgeworQEAgLTEwMzEsNiArMTEwMCw2NCBAQAorICNlbmRpZgorIH0KKyAKKysjaWYgSEFWRV9NQlJUT1dDCisrc3RhdGljIHZvaWQKKytpbml0dGFibGVzX21iICh2b2lkKQorK3sKKysgIGludCBpLCBqLCBrLCBsOworKyAgY2hhciAqbmFtZSwgKnM7CisrICBzaXplX3Qgc19sZW4sIG1ibGVuZ3RoOworKyAgY2hhciBtYmNbTUJfTEVOX01BWF07CisrICB3Y2hhcl90IHdjLCBwd2M7CisrICBtYnN0YXRlX3Qgc3RhdGVfbWIsIHN0YXRlX3djOworKworKyAgZm9yIChpID0gMDsgaSA8IE1PTlRIU19QRVJfWUVBUjsgaSsrKQorKyAgICB7CisrICAgICAgcyA9IChjaGFyICopIG5sX2xhbmdpbmZvIChBQk1PTl8xICsgaSk7CisrICAgICAgc19sZW4gPSBzdHJsZW4gKHMpOworKyAgICAgIG1vbnRodGFiW2ldLm5hbWUgPSBuYW1lID0gKGNoYXIgKikgeG1hbGxvYyAoc19sZW4gKyAxKTsKKysgICAgICBtb250aHRhYltpXS52YWwgPSBpICsgMTsKKysKKysgICAgICBtZW1zZXQgKCZzdGF0ZV9tYiwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysgICAgICBtZW1zZXQgKCZzdGF0ZV93YywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysKKysgICAgICBmb3IgKGogPSAwOyBqIDwgc19sZW47KQorKwl7CisrCSAgaWYgKCFpc21iYmxhbmsgKHMgKyBqLCBzX2xlbiAtIGosICZtYmxlbmd0aCkpCisrCSAgICBicmVhazsKKysJICBqICs9IG1ibGVuZ3RoOworKwl9CisrCisrICAgICAgZm9yIChrID0gMDsgaiA8IHNfbGVuOykKKysJeworKwkgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCAocyArIGopLCAoc19sZW4gLSBqKSwgJnN0YXRlX21iKTsKKysJICBhc3NlcnQgKG1ibGVuZ3RoICE9IChzaXplX3QpLTEgJiYgbWJsZW5ndGggIT0gKHNpemVfdCktMik7CisrCSAgaWYgKG1ibGVuZ3RoID09IDApCisrCSAgICBicmVhazsKKysKKysJICBwd2MgPSB0b3d1cHBlciAod2MpOworKwkgIGlmIChwd2MgPT0gd2MpCisrCSAgICB7CisrCSAgICAgIG1lbWNweSAobWJjLCBzICsgaiwgbWJsZW5ndGgpOworKwkgICAgICBqICs9IG1ibGVuZ3RoOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgaiArPSBtYmxlbmd0aDsKKysJICAgICAgbWJsZW5ndGggPSB3Y3J0b21iIChtYmMsIHB3YywgJnN0YXRlX3djKTsKKysJICAgICAgYXNzZXJ0IChtYmxlbmd0aCAhPSAoc2l6ZV90KTAgJiYgbWJsZW5ndGggIT0gKHNpemVfdCktMSk7CisrCSAgICB9CisrCisrCSAgZm9yIChsID0gMDsgbCA8IG1ibGVuZ3RoOyBsKyspCisrCSAgICBuYW1lW2srK10gPSBtYmNbbF07CisrCX0KKysgICAgICBuYW1lW2tdID0gJ1wwJzsKKysgICAgfQorKyAgcXNvcnQgKCh2b2lkICopIG1vbnRodGFiLCBNT05USFNfUEVSX1lFQVIsCisrICAgICAgc2l6ZW9mIChzdHJ1Y3QgbW9udGgpLCBzdHJ1Y3RfbW9udGhfY21wKTsKKyt9CisrI2VuZGlmCisrCisgLyogU3BlY2lmeSB0aGUgYW1vdW50IG9mIG1haW4gbWVtb3J5IHRvIHVzZSB3aGVuIHNvcnRpbmcuICAqLworIHN0YXRpYyB2b2lkCisgc3BlY2lmeV9zb3J0X3NpemUgKGNoYXIgY29uc3QgKnMpCitAQCAtMTI0MSw3ICsxMzY4LDcgQEAKKyAgICBieSBLRVkgaW4gTElORS4gKi8KKyAKKyBzdGF0aWMgY2hhciAqCistYmVnZmllbGQgKGNvbnN0IHN0cnVjdCBsaW5lICpsaW5lLCBjb25zdCBzdHJ1Y3Qga2V5ZmllbGQgKmtleSkKKytiZWdmaWVsZF91bmkgKGNvbnN0IHN0cnVjdCBsaW5lICpsaW5lLCBjb25zdCBzdHJ1Y3Qga2V5ZmllbGQgKmtleSkKKyB7CisgICBjaGFyICpwdHIgPSBsaW5lLT50ZXh0LCAqbGltID0gcHRyICsgbGluZS0+bGVuZ3RoIC0gMTsKKyAgIHNpemVfdCBzd29yZCA9IGtleS0+c3dvcmQ7CitAQCAtMTI1MSwxMCArMTM3OCwxMCBAQAorICAgLyogVGhlIGxlYWRpbmcgZmllbGQgc2VwYXJhdG9yIGl0c2VsZiBpcyBpbmNsdWRlZCBpbiBhIGZpZWxkIHdoZW4gLXQKKyAgICAgIGlzIGFic2VudC4gICovCisgCistICBpZiAodGFiICE9IFRBQl9ERUZBVUxUKQorKyAgaWYgKHRhYl9sZW5ndGgpCisgICAgIHdoaWxlIChwdHIgPCBsaW0gJiYgc3dvcmQtLSkKKyAgICAgICB7CistCXdoaWxlIChwdHIgPCBsaW0gJiYgKnB0ciAhPSB0YWIpCisrCXdoaWxlIChwdHIgPCBsaW0gJiYgKnB0ciAhPSB0YWJbMF0pCisgCSAgKytwdHI7CisgCWlmIChwdHIgPCBsaW0pCisgCSAgKytwdHI7CitAQCAtMTI4MiwxMSArMTQwOSw3MCBAQAorICAgcmV0dXJuIHB0cjsKKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyBjaGFyICoKKytiZWdmaWVsZF9tYiAoY29uc3Qgc3RydWN0IGxpbmUgKmxpbmUsIGNvbnN0IHN0cnVjdCBrZXlmaWVsZCAqa2V5KQorK3sKKysgIGludCBpOworKyAgY2hhciAqcHRyID0gbGluZS0+dGV4dCwgKmxpbSA9IHB0ciArIGxpbmUtPmxlbmd0aCAtIDE7CisrICBzaXplX3Qgc3dvcmQgPSBrZXktPnN3b3JkOworKyAgc2l6ZV90IHNjaGFyID0ga2V5LT5zY2hhcjsKKysgIHNpemVfdCBtYmxlbmd0aDsKKysgIG1ic3RhdGVfdCBzdGF0ZTsKKysKKysgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCisrICBpZiAodGFiX2xlbmd0aCkKKysgICAgd2hpbGUgKHB0ciA8IGxpbSAmJiBzd29yZC0tKQorKyAgICAgIHsKKysJd2hpbGUgKHB0ciA8IGxpbSAmJiBtZW1jbXAgKHB0ciwgdGFiLCB0YWJfbGVuZ3RoKSAhPSAwKQorKwkgIHsKKysJICAgIEdFVF9CWVRFTEVOX09GX0NIQVIgKGxpbSwgcHRyLCBtYmxlbmd0aCwgc3RhdGUpOworKwkgICAgcHRyICs9IG1ibGVuZ3RoOworKwkgIH0KKysJaWYgKHB0ciA8IGxpbSkKKysJICB7CisrCSAgICBHRVRfQllURUxFTl9PRl9DSEFSIChsaW0sIHB0ciwgbWJsZW5ndGgsIHN0YXRlKTsKKysJICAgIHB0ciArPSBtYmxlbmd0aDsKKysJICB9CisrICAgICAgfQorKyAgZWxzZQorKyAgICB3aGlsZSAocHRyIDwgbGltICYmIHN3b3JkLS0pCisrICAgICAgeworKwl3aGlsZSAocHRyIDwgbGltICYmIGlzbWJibGFuayAocHRyLCBsaW0gLSBwdHIsICZtYmxlbmd0aCkpCisrCSAgcHRyICs9IG1ibGVuZ3RoOworKwlpZiAocHRyIDwgbGltKQorKwkgIHsKKysJICAgIEdFVF9CWVRFTEVOX09GX0NIQVIgKGxpbSwgcHRyLCBtYmxlbmd0aCwgc3RhdGUpOworKwkgICAgcHRyICs9IG1ibGVuZ3RoOworKwkgIH0KKysJd2hpbGUgKHB0ciA8IGxpbSAmJiAhaXNtYmJsYW5rIChwdHIsIGxpbSAtIHB0ciwgJm1ibGVuZ3RoKSkKKysJICBwdHIgKz0gbWJsZW5ndGg7CisrICAgICAgfQorKworKyAgaWYgKGtleS0+c2tpcHNibGFua3MpCisrICAgIHdoaWxlIChwdHIgPCBsaW0gJiYgaXNtYmJsYW5rIChwdHIsIGxpbSAtIHB0ciwgJm1ibGVuZ3RoKSkKKysgICAgICBwdHIgKz0gbWJsZW5ndGg7CisrCisrICBmb3IgKGkgPSAwOyBpIDwgc2NoYXI7IGkrKykKKysgICAgeworKyAgICAgIEdFVF9CWVRFTEVOX09GX0NIQVIgKGxpbSwgcHRyLCBtYmxlbmd0aCwgc3RhdGUpOworKworKyAgICAgIGlmIChwdHIgKyBtYmxlbmd0aCA+IGxpbSkKKysJYnJlYWs7CisrICAgICAgZWxzZQorKwlwdHIgKz0gbWJsZW5ndGg7CisrICAgIH0KKysKKysgIHJldHVybiBwdHI7CisrfQorKyNlbmRpZgorKworIC8qIFJldHVybiB0aGUgbGltaXQgb2YgKGEgcG9pbnRlciB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyKSB0aGUgZmllbGQKKyAgICBpbiBMSU5FIHNwZWNpZmllZCBieSBLRVkuICovCisgCisgc3RhdGljIGNoYXIgKgorLWxpbWZpZWxkIChjb25zdCBzdHJ1Y3QgbGluZSAqbGluZSwgY29uc3Qgc3RydWN0IGtleWZpZWxkICprZXkpCisrbGltZmllbGRfdW5pIChjb25zdCBzdHJ1Y3QgbGluZSAqbGluZSwgY29uc3Qgc3RydWN0IGtleWZpZWxkICprZXkpCisgeworICAgY2hhciAqcHRyID0gbGluZS0+dGV4dCwgKmxpbSA9IHB0ciArIGxpbmUtPmxlbmd0aCAtIDE7CisgICBzaXplX3QgZXdvcmQgPSBrZXktPmV3b3JkLCBlY2hhciA9IGtleS0+ZWNoYXI7CitAQCAtMTI5OSwxMCArMTQ4NSwxMCBAQAorICAgICAgYGJlZ2lubmluZycgaXMgdGhlIGZpcnN0IGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIGRlbGltaXRpbmcgVEFCLgorICAgICAgT3RoZXJ3aXNlLCBsZWF2ZSBQVFIgcG9pbnRpbmcgYXQgdGhlIGZpcnN0IGBibGFuaycgY2hhcmFjdGVyIGFmdGVyCisgICAgICB0aGUgcHJlY2VkaW5nIGZpZWxkLiAgKi8KKy0gIGlmICh0YWIgIT0gVEFCX0RFRkFVTFQpCisrICBpZiAodGFiX2xlbmd0aCkKKyAgICAgd2hpbGUgKHB0ciA8IGxpbSAmJiBld29yZC0tKQorICAgICAgIHsKKy0Jd2hpbGUgKHB0ciA8IGxpbSAmJiAqcHRyICE9IHRhYikKKysJd2hpbGUgKHB0ciA8IGxpbSAmJiAqcHRyICE9IHRhYlswXSkKKyAJICArK3B0cjsKKyAJaWYgKHB0ciA8IGxpbSAmJiAoZXdvcmQgfCBlY2hhcikpCisgCSAgKytwdHI7CitAQCAtMTM0OCwxMCArMTUzNCwxMCBAQAorICAgICAgKi8KKyAKKyAgIC8qIE1ha2UgTElNIHBvaW50IHRvIHRoZSBlbmQgb2YgKG9uZSBieXRlIHBhc3QpIHRoZSBjdXJyZW50IGZpZWxkLiAgKi8KKy0gIGlmICh0YWIgIT0gVEFCX0RFRkFVTFQpCisrICBpZiAodGFiX2xlbmd0aCkKKyAgICAgeworICAgICAgIGNoYXIgKm5ld2xpbTsKKy0gICAgICBuZXdsaW0gPSBtZW1jaHIgKHB0ciwgdGFiLCBsaW0gLSBwdHIpOworKyAgICAgIG5ld2xpbSA9IG1lbWNociAocHRyLCB0YWJbMF0sIGxpbSAtIHB0cik7CisgICAgICAgaWYgKG5ld2xpbSkKKyAJbGltID0gbmV3bGltOworICAgICB9CitAQCAtMTM4NCw2ICsxNTcwLDEwNyBAQAorICAgcmV0dXJuIHB0cjsKKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyBjaGFyICoKKytsaW1maWVsZF9tYiAoY29uc3Qgc3RydWN0IGxpbmUgKmxpbmUsIGNvbnN0IHN0cnVjdCBrZXlmaWVsZCAqa2V5KQorK3sKKysgIGNoYXIgKnB0ciA9IGxpbmUtPnRleHQsICpsaW0gPSBwdHIgKyBsaW5lLT5sZW5ndGggLSAxOworKyAgc2l6ZV90IGV3b3JkID0ga2V5LT5ld29yZCwgZWNoYXIgPSBrZXktPmVjaGFyOworKyAgaW50IGk7CisrICBzaXplX3QgbWJsZW5ndGg7CisrICBtYnN0YXRlX3Qgc3RhdGU7CisrCisrICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgaWYgKHRhYl9sZW5ndGgpCisrICAgIHdoaWxlIChwdHIgPCBsaW0gJiYgZXdvcmQtLSkKKysgICAgICB7CisrCXdoaWxlIChwdHIgPCBsaW0gJiYgbWVtY21wIChwdHIsIHRhYiwgdGFiX2xlbmd0aCkgIT0gMCkKKysJICB7CisrCSAgICBHRVRfQllURUxFTl9PRl9DSEFSIChsaW0sIHB0ciwgbWJsZW5ndGgsIHN0YXRlKTsKKysJICAgIHB0ciArPSBtYmxlbmd0aDsKKysJICB9CisrCWlmIChwdHIgPCBsaW0gJiYgKGV3b3JkIHwgZWNoYXIpKQorKwkgIHsKKysJICAgIEdFVF9CWVRFTEVOX09GX0NIQVIgKGxpbSwgcHRyLCBtYmxlbmd0aCwgc3RhdGUpOworKwkgICAgcHRyICs9IG1ibGVuZ3RoOworKwkgIH0KKysgICAgICB9CisrICBlbHNlCisrICAgIHdoaWxlIChwdHIgPCBsaW0gJiYgZXdvcmQtLSkKKysgICAgICB7CisrCXdoaWxlIChwdHIgPCBsaW0gJiYgaXNtYmJsYW5rIChwdHIsIGxpbSAtIHB0ciwgJm1ibGVuZ3RoKSkKKysJICBwdHIgKz0gbWJsZW5ndGg7CisrCWlmIChwdHIgPCBsaW0pCisrCSAgeworKwkgICAgR0VUX0JZVEVMRU5fT0ZfQ0hBUiAobGltLCBwdHIsIG1ibGVuZ3RoLCBzdGF0ZSk7CisrCSAgICBwdHIgKz0gbWJsZW5ndGg7CisrCSAgfQorKwl3aGlsZSAocHRyIDwgbGltICYmICFpc21iYmxhbmsgKHB0ciwgbGltIC0gcHRyLCAmbWJsZW5ndGgpKQorKwkgIHB0ciArPSBtYmxlbmd0aDsKKysgICAgICB9CisrCisrCisrIyBpZmRlZiBQT1NJWF9VTlNQRUNJRklFRAorKyAgLyogTWFrZSBMSU0gcG9pbnQgdG8gdGhlIGVuZCBvZiAob25lIGJ5dGUgcGFzdCkgdGhlIGN1cnJlbnQgZmllbGQuICAqLworKyAgaWYgKHRhYl9sZW5ndGgpCisrICAgIHsKKysgICAgICBjaGFyICpuZXdsaW0sICpwOworKworKyAgICAgIG5ld2xpbSA9IE5VTEw7CisrICAgICAgZm9yIChwID0gcHRyOyBwIDwgbGltOykKKysgCXsKKysJICBpZiAobWVtY21wIChwLCB0YWIsIHRhYl9sZW5ndGgpID09IDApCisrCSAgICB7CisrCSAgICAgIG5ld2xpbSA9IHA7CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKworKwkgIEdFVF9CWVRFTEVOX09GX0NIQVIgKGxpbSwgcHRyLCBtYmxlbmd0aCwgc3RhdGUpOworKwkgIHAgKz0gbWJsZW5ndGg7CisrCX0KKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgY2hhciAqbmV3bGltOworKyAgICAgIG5ld2xpbSA9IHB0cjsKKysKKysgICAgICB3aGlsZSAobmV3bGltIDwgbGltICYmIGlzbWJibGFuayAobmV3bGltLCBsaW0gLSBuZXdsaW0sICZtYmxlbmd0aCkpCisrCW5ld2xpbSArPSBtYmxlbmd0aDsKKysgICAgICBpZiAocHRyIDwgbGltKQorKwl7CisrCSAgR0VUX0JZVEVMRU5fT0ZfQ0hBUiAobGltLCBwdHIsIG1ibGVuZ3RoLCBzdGF0ZSk7CisrCSAgcHRyICs9IG1ibGVuZ3RoOworKwl9CisrICAgICAgd2hpbGUgKG5ld2xpbSA8IGxpbSAmJiAhaXNtYmJsYW5rIChuZXdsaW0sIGxpbSAtIG5ld2xpbSwgJm1ibGVuZ3RoKSkKKysJbmV3bGltICs9IG1ibGVuZ3RoOworKyAgICAgIGxpbSA9IG5ld2xpbTsKKysgICAgfQorKyMgZW5kaWYKKysKKysgIC8qIElmIHdlJ3JlIHNraXBwaW5nIGxlYWRpbmcgYmxhbmtzLCBkb24ndCBzdGFydCBjb3VudGluZyBjaGFyYWN0ZXJzCisrICAgKiAgICAgIHVudGlsIGFmdGVyIHNraXBwaW5nIHBhc3QgYW55IGxlYWRpbmcgYmxhbmtzLiAgKi8KKysgIGlmIChrZXktPnNraXBzYmxhbmtzKQorKyAgICB3aGlsZSAocHRyIDwgbGltICYmIGlzbWJibGFuayAocHRyLCBsaW0gLSBwdHIsICZtYmxlbmd0aCkpCisrICAgICAgcHRyICs9IG1ibGVuZ3RoOworKworKyAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysKKysgIC8qIEFkdmFuY2UgUFRSIGJ5IEVDSEFSIChpZiBwb3NzaWJsZSksIGJ1dCBubyBmdXJ0aGVyIHRoYW4gTElNLiAgKi8KKysgIGZvciAoaSA9IDA7IGkgPCBlY2hhcjsgaSsrKQorKyAgICB7CisrICAgICAgR0VUX0JZVEVMRU5fT0ZfQ0hBUiAobGltLCBwdHIsIG1ibGVuZ3RoLCBzdGF0ZSk7CisrCisrICAgICAgaWYgKHB0ciArIG1ibGVuZ3RoID4gbGltKQorKwlicmVhazsKKysgICAgICBlbHNlCisrCXB0ciArPSBtYmxlbmd0aDsKKysgICAgfQorKworKyAgcmV0dXJuIHB0cjsKKyt9CisrI2VuZGlmCisrCisgLyogRmlsbCBCVUYgcmVhZGluZyBmcm9tIEZQLCBtb3ZpbmcgYnVmLT5sZWZ0IGJ5dGVzIGZyb20gdGhlIGVuZAorICAgIG9mIGJ1Zi0+YnVmIHRvIHRoZSBiZWdpbm5pbmcgZmlyc3QuICBJZiBFT0YgaXMgcmVhY2hlZCBhbmQgdGhlCisgICAgZmlsZSB3YXNuJ3QgdGVybWluYXRlZCBieSBhIG5ld2xpbmUsIHN1cHBseSBvbmUuICBTZXQgdXAgQlVGJ3MgbGluZQorQEAgLTE0NjYsOCArMTc1MywyNCBAQAorIAkJICBlbHNlCisgCQkgICAgeworIAkJICAgICAgaWYgKGtleS0+c2tpcHNibGFua3MpCistCQkJd2hpbGUgKGJsYW5rc1t0b191Y2hhciAoKmxpbmVfc3RhcnQpXSkKKy0JCQkgIGxpbmVfc3RhcnQrKzsKKysJCQl7CisrI2lmIEhBVkVfTUJSVE9XQworKwkJCSAgaWYgKE1CX0NVUl9NQVggPiAxKQorKwkJCSAgICB7CisrCQkJICAgICAgc2l6ZV90IG1ibGVuZ3RoOworKwkJCSAgICAgIG1ic3RhdGVfdCBzdGF0ZTsKKysJCQkgICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJCSAgICAgIHdoaWxlIChsaW5lX3N0YXJ0IDwgbGluZS0+a2V5bGltICYmCisrCQkJCSAgICAgaXNtYmJsYW5rIChsaW5lX3N0YXJ0LAorKwkJCQkJCWxpbmUtPmtleWxpbSAtIGxpbmVfc3RhcnQsCisrCQkJCQkJJm1ibGVuZ3RoKSkKKysJCQkJbGluZV9zdGFydCArPSBtYmxlbmd0aDsKKysJCQkgICAgfQorKwkJCSAgZWxzZQorKyNlbmRpZgorKwkJCSAgd2hpbGUgKGJsYW5rc1t0b191Y2hhciAoKmxpbmVfc3RhcnQpXSkKKysJCQkgICAgbGluZV9zdGFydCsrOworKwkJCX0KKyAJCSAgICAgIGxpbmUtPmtleWJlZyA9IGxpbmVfc3RhcnQ7CisgCQkgICAgfQorIAkJfQorQEAgLTE1MDAsNyArMTgwMyw3IEBACisgICAgaGlkZW91c2x5IGZhc3QuICovCisgCisgc3RhdGljIGludAorLW51bWNvbXBhcmUgKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCisrbnVtY29tcGFyZV91bmkgKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCisgeworICAgd2hpbGUgKGJsYW5rc1t0b191Y2hhciAoKmEpXSkKKyAgICAgYSsrOworQEAgLTE1MTAsNiArMTgxMywyNSBAQAorICAgcmV0dXJuIHN0cm51bWNtcCAoYSwgYiwgZGVjaW1hbF9wb2ludCwgdGhvdXNhbmRzX3NlcCk7CisgfQorIAorKyNpZiBIQVZFX01CUlRPV0MKKytzdGF0aWMgaW50CisrbnVtY29tcGFyZV9tYiAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikKKyt7CisrICBzaXplX3QgbWJsZW5ndGgsIGxlbjsKKysgIGxlbiA9IHN0cmxlbiAoYSk7IC8qIG9rYXkgZm9yIFVURi04ICovCisrICB3aGlsZSAoKmEgJiYgaXNtYmJsYW5rIChhLCBsZW4gPiBNQl9DVVJfTUFYID8gTUJfQ1VSX01BWCA6IGxlbiwgJm1ibGVuZ3RoKSkKKysgICAgeworKyAgICAgIGEgKz0gbWJsZW5ndGg7CisrICAgICAgbGVuIC09IG1ibGVuZ3RoOworKyAgICB9CisrICBsZW4gPSBzdHJsZW4gKGIpOyAvKiBva2F5IGZvciBVVEYtOCAqLworKyAgd2hpbGUgKCpiICYmIGlzbWJibGFuayAoYiwgbGVuID4gTUJfQ1VSX01BWCA/IE1CX0NVUl9NQVggOiBsZW4sICZtYmxlbmd0aCkpCisrICAgIGIgKz0gbWJsZW5ndGg7CisrCisrICByZXR1cm4gc3RybnVtY21wIChhLCBiLCBkZWNpbWFsX3BvaW50LCB0aG91c2FuZHNfc2VwKTsKKyt9CisrI2VuZGlmIC8qIEhBVl9FTUJSVE9XQyAqLworKworIHN0YXRpYyBpbnQKKyBnZW5lcmFsX251bWNvbXBhcmUgKGNvbnN0IGNoYXIgKnNhLCBjb25zdCBjaGFyICpzYikKKyB7CitAQCAtMTU0Myw3ICsxODY1LDcgQEAKKyAgICBSZXR1cm4gMCBpZiB0aGUgbmFtZSBpbiBTIGlzIG5vdCByZWNvZ25pemVkLiAgKi8KKyAKKyBzdGF0aWMgaW50CistZ2V0bW9udGggKGNoYXIgY29uc3QgKm1vbnRoLCBzaXplX3QgbGVuKQorK2dldG1vbnRoX3VuaSAoY2hhciBjb25zdCAqbW9udGgsIHNpemVfdCBsZW4pCisgeworICAgc2l6ZV90IGxvID0gMDsKKyAgIHNpemVfdCBoaSA9IE1PTlRIU19QRVJfWUVBUjsKK0BAIC0xNjk4LDExICsyMDIwLDc5IEBACisgICByZXR1cm4gZGlmZjsKKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyBpbnQKKytnZXRtb250aF9tYiAoY29uc3QgY2hhciAqcywgc2l6ZV90IGxlbikKKyt7CisrICBjaGFyICptb250aDsKKysgIHJlZ2lzdGVyIHNpemVfdCBpOworKyAgcmVnaXN0ZXIgaW50IGxvID0gMCwgaGkgPSBNT05USFNfUEVSX1lFQVIsIHJlc3VsdDsKKysgIGNoYXIgKnRtcDsKKysgIHNpemVfdCB3Y2xlbmd0aCwgbWJsZW5ndGg7CisrICBjb25zdCBjaGFyICoqcHA7CisrICBjb25zdCB3Y2hhcl90ICoqd3BwOworKyAgd2NoYXJfdCAqbW9udGhfd2NzOworKyAgbWJzdGF0ZV90IHN0YXRlOworKworKyAgd2hpbGUgKGxlbiA+IDAgJiYgaXNtYmJsYW5rIChzLCBsZW4sICZtYmxlbmd0aCkpCisrICAgIHsKKysgICAgICBzICs9IG1ibGVuZ3RoOworKyAgICAgIGxlbiAtPSBtYmxlbmd0aDsKKysgICAgfQorKworKyAgaWYgKGxlbiA9PSAwKQorKyAgICByZXR1cm4gMDsKKysKKysgIG1vbnRoID0gKGNoYXIgKikgYWxsb2NhIChsZW4gKyAxKTsKKysKKysgIHRtcCA9IChjaGFyICopIGFsbG9jYSAobGVuICsgMSk7CisrICBtZW1jcHkgKHRtcCwgcywgbGVuKTsKKysgIHRtcFtsZW5dID0gJ1wwJzsKKysgIHBwID0gKGNvbnN0IGNoYXIgKiopJnRtcDsKKysgIG1vbnRoX3djcyA9ICh3Y2hhcl90ICopIGFsbG9jYSAoKGxlbiArIDEpICogc2l6ZW9mICh3Y2hhcl90KSk7CisrICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgd2NsZW5ndGggPSBtYnNydG93Y3MgKG1vbnRoX3djcywgcHAsIGxlbiArIDEsICZzdGF0ZSk7CisrICBhc3NlcnQgKHdjbGVuZ3RoICE9IChzaXplX3QpLTEgJiYgKnBwID09IE5VTEwpOworKworKyAgZm9yIChpID0gMDsgaSA8IHdjbGVuZ3RoOyBpKyspCisrICAgIHsKKysgICAgICBtb250aF93Y3NbaV0gPSB0b3d1cHBlcihtb250aF93Y3NbaV0pOworKyAgICAgIGlmIChpc3dibGFuayAobW9udGhfd2NzW2ldKSkKKysJeworKwkgIG1vbnRoX3djc1tpXSA9IEwnXDAnOworKwkgIGJyZWFrOworKwl9CisrICAgIH0KKysKKysgIHdwcCA9IChjb25zdCB3Y2hhcl90ICoqKSZtb250aF93Y3M7CisrCisrICBtYmxlbmd0aCA9IHdjc3J0b21icyAobW9udGgsIHdwcCwgbGVuICsgMSwgJnN0YXRlKTsKKysgIGFzc2VydCAobWJsZW5ndGggIT0gKC0xKSAmJiAqd3BwID09IE5VTEwpOworKworKyAgZG8KKysgICAgeworKyAgICAgIGludCBpeCA9IChsbyArIGhpKSAvIDI7CisrCisrICAgICAgaWYgKHN0cm5jbXAgKG1vbnRoLCBtb250aHRhYltpeF0ubmFtZSwgc3RybGVuIChtb250aHRhYltpeF0ubmFtZSkpIDwgMCkKKysJaGkgPSBpeDsKKysgICAgICBlbHNlCisrCWxvID0gaXg7CisrICAgIH0KKysgIHdoaWxlIChoaSAtIGxvID4gMSk7CisrCisrICByZXN1bHQgPSAoIXN0cm5jbXAgKG1vbnRoLCBtb250aHRhYltsb10ubmFtZSwgc3RybGVuIChtb250aHRhYltsb10ubmFtZSkpCisrICAgICAgPyBtb250aHRhYltsb10udmFsIDogMCk7CisrCisrICByZXR1cm4gcmVzdWx0OworK30KKysjZW5kaWYKKysKKyAvKiBDb21wYXJlIHR3byBsaW5lcyBBIGFuZCBCIHRyeWluZyBldmVyeSBrZXkgaW4gc2VxdWVuY2UgdW50aWwgdGhlcmUKKyAgICBhcmUgbm8gbW9yZSBrZXlzIG9yIGEgZGlmZmVyZW5jZSBpcyBmb3VuZC4gKi8KKyAKKyBzdGF0aWMgaW50Cista2V5Y29tcGFyZSAoY29uc3Qgc3RydWN0IGxpbmUgKmEsIGNvbnN0IHN0cnVjdCBsaW5lICpiKQorK2tleWNvbXBhcmVfdW5pIChjb25zdCBzdHJ1Y3QgbGluZSAqYSwgY29uc3Qgc3RydWN0IGxpbmUgKmIpCisgeworICAgc3RydWN0IGtleWZpZWxkIGNvbnN0ICprZXkgPSBrZXlsaXN0OworIAorQEAgLTE4NzUsNiArMjI2NSwxNzkgQEAKKyAgIHJldHVybiBrZXktPnJldmVyc2UgPyAtZGlmZiA6IGRpZmY7CisgfQorIAorKyNpZiBIQVZFX01CUlRPV0MKKytzdGF0aWMgaW50Cisra2V5Y29tcGFyZV9tYiAoY29uc3Qgc3RydWN0IGxpbmUgKmEsIGNvbnN0IHN0cnVjdCBsaW5lICpiKQorK3sKKysgIHN0cnVjdCBrZXlmaWVsZCAqa2V5ID0ga2V5bGlzdDsKKysKKysgIC8qIEZvciB0aGUgZmlyc3QgaXRlcmF0aW9uIG9ubHksIHRoZSBrZXkgcG9zaXRpb25zIGhhdmUgYmVlbgorKyAgICAgcHJlY29tcHV0ZWQgZm9yIHVzLiAqLworKyAgY2hhciAqdGV4dGEgPSBhLT5rZXliZWc7CisrICBjaGFyICp0ZXh0YiA9IGItPmtleWJlZzsKKysgIGNoYXIgKmxpbWEgPSBhLT5rZXlsaW07CisrICBjaGFyICpsaW1iID0gYi0+a2V5bGltOworKworKyAgc2l6ZV90IG1ibGVuZ3RoX2EsIG1ibGVuZ3RoX2I7CisrICB3Y2hhcl90IHdjX2EsIHdjX2I7CisrICBtYnN0YXRlX3Qgc3RhdGVfYSwgc3RhdGVfYjsKKysKKysgIGludCBkaWZmOworKworKyAgbWVtc2V0ICgmc3RhdGVfYSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKyAgbWVtc2V0ICgmc3RhdGVfYiwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgZm9yICg7OykKKysgICAgeworKyAgICAgIHVuc2lnbmVkIGNoYXIgKnRyYW5zbGF0ZSA9ICh1bnNpZ25lZCBjaGFyICopIGtleS0+dHJhbnNsYXRlOworKyAgICAgIGJvb2wgY29uc3QgKmlnbm9yZSA9IGtleS0+aWdub3JlOworKworKyAgICAgIC8qIEZpbmQgdGhlIGxlbmd0aHMuICovCisrICAgICAgc2l6ZV90IGxlbmEgPSBsaW1hIDw9IHRleHRhID8gMCA6IGxpbWEgLSB0ZXh0YTsKKysgICAgICBzaXplX3QgbGVuYiA9IGxpbWIgPD0gdGV4dGIgPyAwIDogbGltYiAtIHRleHRiOworKworKyAgICAgIC8qIEFjdHVhbGx5IGNvbXBhcmUgdGhlIGZpZWxkcy4gKi8KKysgICAgICBpZiAoa2V5LT5yYW5kb20pCisrICAgICAgICBkaWZmID0gY29tcGFyZV9yYW5kb20gKHRleHRhLCBsZW5hLCB0ZXh0YiwgbGVuYik7CisrICAgICAgZWxzZSBpZiAoa2V5LT5udW1lcmljIHwga2V5LT5nZW5lcmFsX251bWVyaWMpCisrCXsKKysJICBjaGFyIHNhdmVhID0gKmxpbWEsIHNhdmViID0gKmxpbWI7CisrCisrCSAgKmxpbWEgPSAqbGltYiA9ICdcMCc7CisrCSAgaWYgKGZvcmNlX2dlbmVyYWxfbnVtY29tcGFyZSkKKysJICAgIGRpZmYgPSBnZW5lcmFsX251bWNvbXBhcmUgKHRleHRhLCB0ZXh0Yik7CisrCSAgZWxzZQorKwkgICAgZGlmZiA9ICgoa2V5LT5udW1lcmljID8gbnVtY29tcGFyZSA6IGdlbmVyYWxfbnVtY29tcGFyZSkKKysJCSh0ZXh0YSwgdGV4dGIpKTsKKysJICAqbGltYSA9IHNhdmVhLCAqbGltYiA9IHNhdmViOworKwl9CisrICAgICAgZWxzZSBpZiAoa2V5LT5tb250aCkKKysJZGlmZiA9IGdldG1vbnRoICh0ZXh0YSwgbGVuYSkgLSBnZXRtb250aCAodGV4dGIsIGxlbmIpOworKyAgICAgIGVsc2UKKysJeworKwkgIGlmIChpZ25vcmUgfHwgdHJhbnNsYXRlKQorKwkgICAgeworKwkgICAgICBjaGFyICpjb3B5X2EgPSAoY2hhciAqKSBhbGxvY2EgKGxlbmEgKyAxICsgbGVuYiArIDEpOworKwkgICAgICBjaGFyICpjb3B5X2IgPSBjb3B5X2EgKyBsZW5hICsgMTsKKysJICAgICAgc2l6ZV90IG5ld19sZW5fYSwgbmV3X2xlbl9iOworKwkgICAgICBzaXplX3QgaSwgajsKKysKKysJICAgICAgLyogSWdub3JlIGFuZC9vciB0cmFuc2xhdGUgY2hhcnMgYmVmb3JlIGNvbXBhcmluZy4gICovCisrIyBkZWZpbmUgSUdOT1JFX0NIQVJTKE5FV19MRU4sIExFTiwgVEVYVCwgQ09QWSwgV0MsIE1CTEVOR1RILCBTVEFURSkJXAorKyAgZG8JCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgd2NoYXJfdCB1d2M7CQkJCQkJCVwKKysgICAgICBjaGFyIG1iY1tNQl9MRU5fTUFYXTsJCQkJCQlcCisrICAgICAgbWJzdGF0ZV90IHN0YXRlX3djOwkJCQkJCVwKKysJCQkJCQkJCQlcCisrICAgICAgZm9yIChORVdfTEVOID0gaSA9IDA7IGkgPCBMRU47KQkJCQkJXAorKwl7CQkJCQkJCQlcCisrCSAgbWJzdGF0ZV90IHN0YXRlX2JhazsJCQkJCQlcCisrCQkJCQkJCQkJXAorKwkgIHN0YXRlX2JhayA9IFNUQVRFOwkJCQkJCVwKKysJICBNQkxFTkdUSCA9IG1icnRvd2MgKCZXQywgVEVYVCArIGksIExFTiAtIGksICZTVEFURSk7CQlcCisrCQkJCQkJCQkJXAorKwkgIGlmIChNQkxFTkdUSCA9PSAoc2l6ZV90KS0yIHx8IE1CTEVOR1RIID09IChzaXplX3QpLTEJCVwKKysJICAgICAgfHwgTUJMRU5HVEggPT0gMCkJCQkJCQlcCisrCSAgICB7CQkJCQkJCQlcCisrCSAgICAgIGlmIChNQkxFTkdUSCA9PSAoc2l6ZV90KS0yIHx8IE1CTEVOR1RIID09IChzaXplX3QpLTEpCVwKKysJCVNUQVRFID0gc3RhdGVfYmFrOwkJCQkJXAorKwkgICAgICBpZiAoIWlnbm9yZSkJCQkJCQlcCisrCQlDT1BZW05FV19MRU4rK10gPSBURVhUW2krK107CQkJCVwKKysJICAgICAgY29udGludWU7CQkJCQkJCVwKKysJICAgIH0JCQkJCQkJCVwKKysJCQkJCQkJCQlcCisrCSAgaWYgKGlnbm9yZSkJCQkJCQkJXAorKwkgICAgewkJCQkJCQkJXAorKwkgICAgICBpZiAoKGlnbm9yZSA9PSBub25wcmludGluZyAmJiAhaXN3cHJpbnQgKFdDKSkJCVwKKysJCSAgIHx8IChpZ25vcmUgPT0gbm9uZGljdGlvbmFyeQkJCQlcCisrCQkgICAgICAgJiYgIWlzd2FsbnVtIChXQykgJiYgIWlzd2JsYW5rIChXQykpKQkJXAorKwkJewkJCQkJCQlcCisrCQkgIGkgKz0gTUJMRU5HVEg7CQkJCQlcCisrCQkgIGNvbnRpbnVlOwkJCQkJCVwKKysJCX0JCQkJCQkJXAorKwkgICAgfQkJCQkJCQkJXAorKwkJCQkJCQkJCVwKKysJICBpZiAodHJhbnNsYXRlKQkJCQkJCVwKKysJICAgIHsJCQkJCQkJCVwKKysJCQkJCQkJCQlcCisrCSAgICAgIHV3YyA9IHRvd3VwcGVyKFdDKTsJCQkJCVwKKysJICAgICAgaWYgKFdDID09IHV3YykJCQkJCQlcCisrCQl7CQkJCQkJCVwKKysJCSAgbWVtY3B5IChtYmMsIFRFWFQgKyBpLCBNQkxFTkdUSCk7CQkJXAorKwkJICBpICs9IE1CTEVOR1RIOwkJCQkJXAorKwkJfQkJCQkJCQlcCisrCSAgICAgIGVsc2UJCQkJCQkJXAorKwkJewkJCQkJCQlcCisrCQkgIGkgKz0gTUJMRU5HVEg7CQkJCQlcCisrCQkgIFdDID0gdXdjOwkJCQkJCVwKKysJCSAgbWVtc2V0ICgmc3RhdGVfd2MsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CQlcCisrCQkJCQkJCQkJXAorKwkJICBNQkxFTkdUSCA9IHdjcnRvbWIgKG1iYywgV0MsICZzdGF0ZV93Yyk7CQlcCisrCQkgIGFzc2VydCAoTUJMRU5HVEggIT0gKHNpemVfdCktMSAmJiBNQkxFTkdUSCAhPSAwKTsJXAorKwkJfQkJCQkJCQlcCisrCQkJCQkJCQkJXAorKwkgICAgICBmb3IgKGogPSAwOyBqIDwgTUJMRU5HVEg7IGorKykJCQkJXAorKwkJQ09QWVtORVdfTEVOKytdID0gbWJjW2pdOwkJCQlcCisrCSAgICB9CQkJCQkJCQlcCisrCSAgZWxzZQkJCQkJCQkJXAorKwkgICAgZm9yIChqID0gMDsgaiA8IE1CTEVOR1RIOyBqKyspCQkJCVwKKysJICAgICAgQ09QWVtORVdfTEVOKytdID0gVEVYVFtpKytdOwkJCQlcCisrCX0JCQkJCQkJCVwKKysgICAgICBDT1BZW05FV19MRU5dID0gJ1wwJzsJCQkJCQlcCisrICAgIH0JCQkJCQkJCQlcCisrICB3aGlsZSAoMCkKKysJICAgICAgSUdOT1JFX0NIQVJTIChuZXdfbGVuX2EsIGxlbmEsIHRleHRhLCBjb3B5X2EsCisrCQkJICAgIHdjX2EsIG1ibGVuZ3RoX2EsIHN0YXRlX2EpOworKwkgICAgICBJR05PUkVfQ0hBUlMgKG5ld19sZW5fYiwgbGVuYiwgdGV4dGIsIGNvcHlfYiwKKysJCQkgICAgd2NfYiwgbWJsZW5ndGhfYiwgc3RhdGVfYik7CisrCSAgICAgIGRpZmYgPSB4bWVtY29sbCAoY29weV9hLCBuZXdfbGVuX2EsIGNvcHlfYiwgbmV3X2xlbl9iKTsKKysJICAgIH0KKysJICBlbHNlIGlmIChsZW5hID09IDApCisrCSAgICBkaWZmID0gLSBOT05aRVJPIChsZW5iKTsKKysJICBlbHNlIGlmIChsZW5iID09IDApCisrCSAgICBnb3RvIGdyZWF0ZXI7CisrCSAgZWxzZQorKwkgICAgZGlmZiA9IHhtZW1jb2xsICh0ZXh0YSwgbGVuYSwgdGV4dGIsIGxlbmIpOworKwl9CisrCisrICAgICAgaWYgKGRpZmYpCisrCWdvdG8gbm90X2VxdWFsOworKworKyAgICAgIGtleSA9IGtleS0+bmV4dDsKKysgICAgICBpZiAoISBrZXkpCisrCWJyZWFrOworKworKyAgICAgIC8qIEZpbmQgdGhlIGJlZ2lubmluZyBhbmQgbGltaXQgb2YgdGhlIG5leHQgZmllbGQuICAqLworKyAgICAgIGlmIChrZXktPmV3b3JkICE9IC0xKQorKwlsaW1hID0gbGltZmllbGQgKGEsIGtleSksIGxpbWIgPSBsaW1maWVsZCAoYiwga2V5KTsKKysgICAgICBlbHNlCisrCWxpbWEgPSBhLT50ZXh0ICsgYS0+bGVuZ3RoIC0gMSwgbGltYiA9IGItPnRleHQgKyBiLT5sZW5ndGggLSAxOworKworKyAgICAgIGlmIChrZXktPnN3b3JkICE9IC0xKQorKwl0ZXh0YSA9IGJlZ2ZpZWxkIChhLCBrZXkpLCB0ZXh0YiA9IGJlZ2ZpZWxkIChiLCBrZXkpOworKyAgICAgIGVsc2UKKysJeworKwkgIHRleHRhID0gYS0+dGV4dCwgdGV4dGIgPSBiLT50ZXh0OworKwkgIGlmIChrZXktPnNraXBzYmxhbmtzKQorKwkgICAgeworKwkgICAgICB3aGlsZSAodGV4dGEgPCBsaW1hICYmIGlzbWJibGFuayAodGV4dGEsIGxpbWEgLSB0ZXh0YSwgJm1ibGVuZ3RoX2EpKQorKwkJdGV4dGEgKz0gbWJsZW5ndGhfYTsKKysJICAgICAgd2hpbGUgKHRleHRiIDwgbGltYiAmJiBpc21iYmxhbmsgKHRleHRiLCBsaW1iIC0gdGV4dGIsICZtYmxlbmd0aF9iKSkKKysJCXRleHRiICs9IG1ibGVuZ3RoX2I7CisrCSAgICB9CisrCX0KKysgICAgfQorKworKyAgcmV0dXJuIDA7CisrCisrZ3JlYXRlcjoKKysgIGRpZmYgPSAxOworK25vdF9lcXVhbDoKKysgIHJldHVybiBrZXktPnJldmVyc2UgPyAtZGlmZiA6IGRpZmY7CisrfQorKyNlbmRpZgorKworIC8qIENvbXBhcmUgdHdvIGxpbmVzIEEgYW5kIEIsIHJldHVybmluZyBuZWdhdGl2ZSwgemVybywgb3IgcG9zaXRpdmUKKyAgICBkZXBlbmRpbmcgb24gd2hldGhlciBBIGNvbXBhcmVzIGxlc3MgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiBCLiAqLworCitAQCAtMjc0NCw3ICszMzA1LDcgQEAKKyAgIGluaXRpYWxpemVfZXhpdF9mYWlsdXJlIChTT1JUX0ZBSUxVUkUpOworIAorICAgaGFyZF9MQ19DT0xMQVRFID0gaGFyZF9sb2NhbGUgKExDX0NPTExBVEUpOworLSNpZiBIQVZFX05MX0xBTkdJTkZPCisrI2lmIEhBVkVfTEFOR0lORk9fQ09ERVNFVAorICAgaGFyZF9MQ19USU1FID0gaGFyZF9sb2NhbGUgKExDX1RJTUUpOworICNlbmRpZgorIAorQEAgLTI3NjUsNiArMzMyNiwyNyBAQAorICAgICAgIHRob3VzYW5kc19zZXAgPSAtMTsKKyAgIH0KKyAKKysjaWYgSEFWRV9NQlJUT1dDCisrICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrICAgIHsKKysgICAgICBpbml0dGFibGVzID0gaW5pdHRhYmxlc19tYjsKKysgICAgICBiZWdmaWVsZCA9IGJlZ2ZpZWxkX21iOworKyAgICAgIGxpbWZpZWxkID0gbGltZmllbGRfbWI7CisrICAgICAgZ2V0bW9udGggPSBnZXRtb250aF9tYjsKKysgICAgICBrZXljb21wYXJlID0ga2V5Y29tcGFyZV9tYjsKKysgICAgICBudW1jb21wYXJlID0gbnVtY29tcGFyZV9tYjsKKysgICAgfQorKyAgZWxzZQorKyNlbmRpZgorKyAgICB7CisrICAgICAgaW5pdHRhYmxlcyA9IGluaXR0YWJsZXNfdW5pOworKyAgICAgIGJlZ2ZpZWxkID0gYmVnZmllbGRfdW5pOworKyAgICAgIGxpbWZpZWxkID0gbGltZmllbGRfdW5pOworKyAgICAgIGdldG1vbnRoID0gZ2V0bW9udGhfdW5pOworKyAgICAgIGtleWNvbXBhcmUgPSBrZXljb21wYXJlX3VuaTsKKysgICAgICBudW1jb21wYXJlID0gbnVtY29tcGFyZV91bmk7CisrICAgIH0KKysKKyAgIGhhdmVfcmVhZF9zdGRpbiA9IGZhbHNlOworICAgaW5pdHRhYmxlcyAoKTsKKyAKK0BAIC0zMDE1LDEzICszNTk3LDM1IEBACisgCisgCWNhc2UgJ3QnOgorIAkgIHsKKy0JICAgIGNoYXIgbmV3dGFiID0gb3B0YXJnWzBdOworLQkgICAgaWYgKCEgbmV3dGFiKQorKwkgICAgY2hhciBuZXd0YWJbTUJfTEVOX01BWCArIDFdOworKwkgICAgc2l6ZV90IG5ld3RhYl9sZW5ndGggPSAxOworKwkgICAgc3RybmNweSAobmV3dGFiLCBvcHRhcmcsIE1CX0xFTl9NQVgpOworKwkgICAgaWYgKCEgbmV3dGFiWzBdKQorIAkgICAgICBlcnJvciAoU09SVF9GQUlMVVJFLCAwLCBfKCJlbXB0eSB0YWIiKSk7CistCSAgICBpZiAob3B0YXJnWzFdKQorKyNpZiBIQVZFX01CUlRPV0MKKysJICAgIGlmIChNQl9DVVJfTUFYID4gMSkKKysJICAgICAgeworKwkJd2NoYXJfdCB3YzsKKysJCW1ic3RhdGVfdCBzdGF0ZTsKKysJCXNpemVfdCBpOworKworKwkJbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQluZXd0YWJfbGVuZ3RoID0gbWJydG93YyAoJndjLCBuZXd0YWIsIHN0cm5sZW4gKG5ld3RhYiwKKysJCQkJCQkJICAgICAgIE1CX0xFTl9NQVgpLAorKwkJCQkJICZzdGF0ZSk7CisrCQlzd2l0Y2ggKG5ld3RhYl9sZW5ndGgpCisrCQkgIHsKKysJCSAgY2FzZSAoc2l6ZV90KSAtMToKKysJCSAgY2FzZSAoc2l6ZV90KSAtMjoKKysJCSAgY2FzZSAwOgorKwkJICAgIG5ld3RhYl9sZW5ndGggPSAxOworKwkJICB9CisrCSAgICAgIH0KKysjZW5kaWYKKysJICAgIGlmIChuZXd0YWJfbGVuZ3RoID09IDEgJiYgb3B0YXJnWzFdKQorIAkgICAgICB7CisgCQlpZiAoU1RSRVEgKG9wdGFyZywgIlxcMCIpKQorLQkJICBuZXd0YWIgPSAnXDAnOworKwkJICBuZXd0YWJbMF0gPSAnXDAnOworIAkJZWxzZQorIAkJICB7CisgCQkgICAgLyogUHJvdm9rZSB3aXRoIGBzb3J0IC10eHgnLiAgQ29tcGxhaW4gYWJvdXQKK0BAIC0zMDMyLDkgKzM2MzYsMTIgQEAKKyAJCQkgICBxdW90ZSAob3B0YXJnKSk7CisgCQkgIH0KKyAJICAgICAgfQorLQkgICAgaWYgKHRhYiAhPSBUQUJfREVGQVVMVCAmJiB0YWIgIT0gbmV3dGFiKQorKwkgICAgaWYgKHRhYl9sZW5ndGgKKysJCSYmICh0YWJfbGVuZ3RoICE9IG5ld3RhYl9sZW5ndGgKKysJCSAgICB8fCBtZW1jbXAgKHRhYiwgbmV3dGFiLCB0YWJfbGVuZ3RoKSAhPSAwKSkKKyAJICAgICAgZXJyb3IgKFNPUlRfRkFJTFVSRSwgMCwgXygiaW5jb21wYXRpYmxlIHRhYnMiKSk7CistCSAgICB0YWIgPSBuZXd0YWI7CisrCSAgICBtZW1jcHkgKHRhYiwgbmV3dGFiLCBuZXd0YWJfbGVuZ3RoKTsKKysJICAgIHRhYl9sZW5ndGggPSBuZXd0YWJfbGVuZ3RoOworIAkgIH0KKyAJICBicmVhazsKKyAKKy0tLSBjb3JldXRpbHMtNi44Ky9zcmMvdW5leHBhbmQuYy5pMThuCTIwMDctMDEtMTQgMTU6NDE6MjguMDAwMDAwMDAwICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvc3JjL3VuZXhwYW5kLmMJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0zOSwxMSArMzksMjggQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKworKy8qIEdldCBtYnN0YXRlX3QsIG1icnRvd2MoKSwgd2N3aWR0aCgpLiAqLworKyNpZiBIQVZFX1dDSEFSX0gKKysjIGluY2x1ZGUgPHdjaGFyLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgInN5c3RlbS5oIgorICNpbmNsdWRlICJlcnJvci5oIgorICNpbmNsdWRlICJxdW90ZS5oIgorICNpbmNsdWRlICJ4c3RybmR1cC5oIgorIAorKy8qIE1CX0xFTl9NQVggaXMgaW5jb3JyZWN0bHkgZGVmaW5lZCB0byBiZSAxIGluIGF0IGxlYXN0IG9uZSBHQ0MKKysgICAgICBpbnN0YWxsYXRpb247IHdvcmsgYXJvdW5kIHRoaXMgY29uZmlndXJhdGlvbiBlcnJvci4gICovCisrI2lmICFkZWZpbmVkIE1CX0xFTl9NQVggfHwgTUJfTEVOX01BWCA8IDIKKysjIGRlZmluZSBNQl9MRU5fTUFYIDE2CisrI2VuZGlmCisrCisrLyogU29tZSBzeXN0ZW1zLCBsaWtlIEJlT1MsIGhhdmUgbXVsdGlieXRlIGVuY29kaW5ncyBidXQgbGFjayBtYnN0YXRlX3QuICAqLworKyNpZiBIQVZFX01CUlRPV0MgJiYgZGVmaW5lZCBtYnN0YXRlX3QKKysjIGRlZmluZSBtYnJ0b3djKHB3YywgcywgbiwgcHMpIChtYnJ0b3djKSAocHdjLCBzLCBuLCAwKQorKyNlbmRpZgorKworIC8qIFRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoaXMgcHJvZ3JhbSAoZS5nLiwgbm8gYGcnIHByZWZpeCkuICAqLworICNkZWZpbmUgUFJPR1JBTV9OQU1FICJ1bmV4cGFuZCIKKyAKK0BAIC0xMTAsNiArMTI3LDIwOCBAQAorICAge05VTEwsIDAsIE5VTEwsIDB9CisgfTsKKyAKKytzdGF0aWMgRklMRSAqbmV4dF9maWxlIChGSUxFICpmcCk7CisrCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyB2b2lkCisrdW5leHBhbmRfbXVsdGlieXRlICh2b2lkKQorK3sKKysgIEZJTEUgKmZwOwkJCS8qIElucHV0IHN0cmVhbS4gKi8KKysgIG1ic3RhdGVfdCBpX3N0YXRlOwkJLyogQ3VycmVudCBzaGlmdCBzdGF0ZSBvZiB0aGUgaW5wdXQgc3RyZWFtLiAqLworKyAgbWJzdGF0ZV90IGlfc3RhdGVfYmFrOwkvKiBCYWNrIHVwIHRoZSBJX1NUQVRFLiAqLworKyAgbWJzdGF0ZV90IG9fc3RhdGU7CQkvKiBDdXJyZW50IHNoaWZ0IHN0YXRlIG9mIHRoZSBvdXRwdXQgc3RyZWFtLiAqLworKyAgY2hhciBidWZbTUJfTEVOX01BWCArIEJVRlNJWl07ICAvKiBGb3Igc3Bvb2xpbmcgYSByZWFkIGJ5dGUgc2VxdWVuY2UuICovCisrICBjaGFyICpidWZwb3M7CQkJLyogTmV4dCByZWFkIHBvc2l0aW9uIG9mIEJVRi4gKi8KKysgIHNpemVfdCBidWZsZW4gPSAwOwkJLyogVGhlIGxlbmd0aCBvZiB0aGUgYnl0ZSBzZXF1ZW5jZSBpbiBidWYuICovCisrICB3aW50X3Qgd2M7CQkJLyogQSBnb3R0ZW4gd2lkZSBjaGFyYWN0ZXIuICovCisrICBzaXplX3QgbWJsZW5ndGg7CQkvKiBUaGUgYnl0ZSBzaXplIG9mIGEgbXVsdGlieXRlIGNoYXJhY3RlcgorKwkJCQkgICB3aGljaCBzaG93cyBhcyBzYW1lIGNoYXJhY3RlciBhcyBXQy4gKi8KKysKKysgIC8qIEluZGV4IGluIGB0YWJfbGlzdCcgb2YgbmV4dCB0YWJzdG9wOiAqLworKyAgaW50IHRhYl9pbmRleCA9IDA7CQkvKiBGb3IgY2FsY3VsYXRpbmcgd2lkdGggb2YgcGVuZGluZyB0YWJzLiAqLworKyAgaW50IHByaW50X3RhYl9pbmRleCA9IDA7CS8qIEZvciBwcmludGluZyBhcyBtYW55IHRhYnMgYXMgcG9zc2libGUuICovCisrICB1bnNpZ25lZCBpbnQgY29sdW1uID0gMDsJLyogQ29sdW1uIG9uIHNjcmVlbiBvZiBuZXh0IGNoYXIuICovCisrICBpbnQgbmV4dF90YWJfY29sdW1uOwkJLyogQ29sdW1uIHRoZSBuZXh0IHRhYiBzdG9wIGlzIG9uLiAqLworKyAgaW50IGNvbnZlcnQgPSAxOwkJLyogSWYgbm9uemVybywgcGVyZm9ybSB0cmFuc2xhdGlvbnMuICovCisrICB1bnNpZ25lZCBpbnQgcGVuZGluZyA9IDA7CS8qIFBlbmRpbmcgY29sdW1ucyBvZiBibGFua3MuICovCisrCisrICBmcCA9IG5leHRfZmlsZSAoKEZJTEUgKikgTlVMTCk7CisrICBpZiAoZnAgPT0gTlVMTCkKKysgICAgcmV0dXJuOworKworKyAgbWVtc2V0ICgmb19zdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKyAgbWVtc2V0ICgmaV9zdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgZm9yICg7OykKKysgICAgeworKyAgICAgIGlmIChidWZsZW4gPCBNQl9MRU5fTUFYICYmICFmZW9mKGZwKSAmJiAhZmVycm9yKGZwKSkKKysJeworKwkgIG1lbW1vdmUgKGJ1ZiwgYnVmcG9zLCBidWZsZW4pOworKwkgIGJ1ZmxlbiArPSBmcmVhZCAoYnVmICsgYnVmbGVuLCBzaXplb2YoY2hhciksIEJVRlNJWiwgZnApOworKwkgIGJ1ZnBvcyA9IGJ1ZjsKKysJfQorKworKyAgICAgIC8qIEdldCBhIHdpZGUgY2hhcmFjdGVyLiAqLworKyAgICAgIGlmIChidWZsZW4gPCAxKQorKwl7CisrCSAgbWJsZW5ndGggPSAxOworKwkgIHdjID0gV0VPRjsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGlfc3RhdGVfYmFrID0gaV9zdGF0ZTsKKysJICBtYmxlbmd0aCA9IG1icnRvd2MgKCh3Y2hhcl90ICopJndjLCBidWZwb3MsIGJ1ZmxlbiwgJmlfc3RhdGUpOworKwl9CisrCisrICAgICAgaWYgKG1ibGVuZ3RoID09IChzaXplX3QpLTEgfHwgbWJsZW5ndGggPT0gKHNpemVfdCktMikKKysJeworKwkgIGlfc3RhdGUgPSBpX3N0YXRlX2JhazsKKysJICB3YyA9IEwnXDAnOworKwl9CisrCisrICAgICAgaWYgKHdjID09IEwnICcgJiYgY29udmVydCAmJiBjb2x1bW4gPCBJTlRfTUFYKQorKwl7CisrCSAgKytwZW5kaW5nOworKwkgICsrY29sdW1uOworKwl9CisrICAgICAgZWxzZSBpZiAod2MgPT0gTCdcdCcgJiYgY29udmVydCkKKysJeworKwkgIGlmICh0YWJfc2l6ZSA9PSAwKQorKwkgICAgeworKwkgICAgICAvKiBEbyBub3QgbGV0IHRhYl9pbmRleCA9PSBmaXJzdF9mcmVlX3RhYjsKKysJCSBzdG9wIHdoZW4gaXQgaXMgMSBsZXNzLiAqLworKwkgICAgICB3aGlsZSAodGFiX2luZGV4IDwgZmlyc3RfZnJlZV90YWIgLSAxCisrCQkgICYmIGNvbHVtbiA+PSB0YWJfbGlzdFt0YWJfaW5kZXhdKQorKwkJdGFiX2luZGV4Kys7CisrCSAgICAgIG5leHRfdGFiX2NvbHVtbiA9IHRhYl9saXN0W3RhYl9pbmRleF07CisrCSAgICAgIGlmICh0YWJfaW5kZXggPCBmaXJzdF9mcmVlX3RhYiAtIDEpCisrCQl0YWJfaW5kZXgrKzsKKysJICAgICAgaWYgKGNvbHVtbiA+PSBuZXh0X3RhYl9jb2x1bW4pCisrCQl7CisrCQkgIGNvbnZlcnQgPSAwOwkvKiBSYW4gb3V0IG9mIHRhYiBzdG9wcy4gKi8KKysJCSAgZ290byBmbHVzaF9wZW5kX21iOworKwkJfQorKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgbmV4dF90YWJfY29sdW1uID0gY29sdW1uICsgdGFiX3NpemUgLSBjb2x1bW4gJSB0YWJfc2l6ZTsKKysJICAgIH0KKysJICBwZW5kaW5nICs9IG5leHRfdGFiX2NvbHVtbiAtIGNvbHVtbjsKKysJICBjb2x1bW4gPSBuZXh0X3RhYl9jb2x1bW47CisrCX0KKysgICAgICBlbHNlCisrCXsKKytmbHVzaF9wZW5kX21iOgorKwkgIC8qIEZsdXNoIHBlbmRpbmcgc3BhY2VzLiAgUHJpbnQgYXMgbWFueSB0YWJzIGFzIHBvc3NpYmxlLAorKwkgICAgIHRoZW4gcHJpbnQgdGhlIHJlc3QgYXMgc3BhY2VzLiAqLworKwkgIGlmIChwZW5kaW5nID09IDEpCisrCSAgICB7CisrCSAgICAgIHB1dGNoYXIgKCcgJyk7CisrCSAgICAgIHBlbmRpbmcgPSAwOworKwkgICAgfQorKwkgIGNvbHVtbiAtPSBwZW5kaW5nOworKwkgIHdoaWxlIChwZW5kaW5nID4gMCkKKysJICAgIHsKKysJICAgICAgaWYgKHRhYl9zaXplID09IDApCisrCQl7CisrCQkgIC8qIERvIG5vdCBsZXQgcHJpbnRfdGFiX2luZGV4ID09IGZpcnN0X2ZyZWVfdGFiOworKwkJICAgICBzdG9wIHdoZW4gaXQgaXMgMSBsZXNzLiAqLworKwkJICB3aGlsZSAocHJpbnRfdGFiX2luZGV4IDwgZmlyc3RfZnJlZV90YWIgLSAxCisrCQkgICAgICAmJiBjb2x1bW4gPj0gdGFiX2xpc3RbcHJpbnRfdGFiX2luZGV4XSkKKysJCSAgICBwcmludF90YWJfaW5kZXgrKzsKKysJCSAgbmV4dF90YWJfY29sdW1uID0gdGFiX2xpc3RbcHJpbnRfdGFiX2luZGV4XTsKKysJCSAgaWYgKHByaW50X3RhYl9pbmRleCA8IGZpcnN0X2ZyZWVfdGFiIC0gMSkKKysJCSAgICBwcmludF90YWJfaW5kZXgrKzsKKysJCX0KKysJICAgICAgZWxzZQorKwkJeworKwkJICBuZXh0X3RhYl9jb2x1bW4gPQorKwkJICAgIGNvbHVtbiArIHRhYl9zaXplIC0gY29sdW1uICUgdGFiX3NpemU7CisrCQl9CisrCSAgICAgIGlmIChuZXh0X3RhYl9jb2x1bW4gLSBjb2x1bW4gPD0gcGVuZGluZykKKysJCXsKKysJCSAgcHV0Y2hhciAoJ1x0Jyk7CisrCQkgIHBlbmRpbmcgLT0gbmV4dF90YWJfY29sdW1uIC0gY29sdW1uOworKwkJICBjb2x1bW4gPSBuZXh0X3RhYl9jb2x1bW47CisrCQl9CisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgLS1wcmludF90YWJfaW5kZXg7CisrCQkgIGNvbHVtbiArPSBwZW5kaW5nOworKwkJICB3aGlsZSAocGVuZGluZyAhPSAwKQorKwkJICAgIHsKKysJCSAgICAgIHB1dGNoYXIgKCcgJyk7CisrCQkgICAgICBwZW5kaW5nLS07CisrCQkgICAgfQorKwkJfQorKwkgICAgfQorKworKwkgIGlmICh3YyA9PSBXRU9GKQorKwkgICAgeworKwkgICAgICBmcCA9IG5leHRfZmlsZSAoZnApOworKwkgICAgICBpZiAoZnAgPT0gTlVMTCkKKysJCWJyZWFrOyAgICAgICAgICAvKiBObyBtb3JlIGZpbGVzLiAqLworKwkgICAgICBlbHNlCisrCQl7CisrCQkgIG1lbXNldCAoJmlfc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgY29udGludWU7CisrCQl9CisrCSAgICB9CisrCisrCSAgaWYgKG1ibGVuZ3RoID09IChzaXplX3QpLTEgfHwgbWJsZW5ndGggPT0gKHNpemVfdCktMikKKysJICAgIHsKKysJICAgICAgaWYgKGNvbnZlcnQpCisrCQl7CisrCQkgICsrY29sdW1uOworKwkJICBpZiAoY29udmVydF9lbnRpcmVfbGluZSA9PSAwKQorKwkJICAgIGNvbnZlcnQgPSAwOworKwkJfQorKwkgICAgICBtYmxlbmd0aCA9IDE7CisrCSAgICAgIHB1dGNoYXIgKGJ1ZlswXSk7CisrCSAgICB9CisrCSAgZWxzZSBpZiAobWJsZW5ndGggPT0gMCkKKysJICAgIHsKKysJICAgICAgaWYgKGNvbnZlcnQgJiYgY29udmVydF9lbnRpcmVfbGluZSA9PSAwKQorKwkJY29udmVydCA9IDA7CisrCSAgICAgIG1ibGVuZ3RoID0gMTsKKysJICAgICAgcHV0Y2hhciAoJ1wwJyk7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBpZiAoY29udmVydCkKKysJCXsKKysJCSAgaWYgKHdjID09IEwnXGInKQorKwkJICAgIHsKKysJCSAgICAgIGlmIChjb2x1bW4gPiAwKQorKwkJCS0tY29sdW1uOworKwkJICAgIH0KKysJCSAgZWxzZQorKwkJICAgIHsKKysJCSAgICAgIGludCB3aWR0aDsgICAgICAgICAgICAvKiBUaGUgd2lkdGggb2YgV0MuICovCisrCisrCQkgICAgICB3aWR0aCA9IHdjd2lkdGggKHdjKTsKKysJCSAgICAgIGNvbHVtbiArPSAod2lkdGggPiAwKSA/IHdpZHRoIDogMDsKKysJCSAgICAgIGlmIChjb252ZXJ0X2VudGlyZV9saW5lID09IDApCisrCQkJY29udmVydCA9IDA7CisrCQkgICAgfQorKwkJfQorKworKwkgICAgICBpZiAod2MgPT0gTCdcbicpCisrCQl7CisrCQkgIHRhYl9pbmRleCA9IHByaW50X3RhYl9pbmRleCA9IDA7CisrCQkgIGNvbHVtbiA9IHBlbmRpbmcgPSAwOworKwkJICBjb252ZXJ0ID0gMTsKKysJCX0KKysJICAgICAgZndyaXRlIChidWZwb3MsIHNpemVvZihjaGFyKSwgbWJsZW5ndGgsIHN0ZG91dCk7CisrCSAgICB9CisrCX0KKysgICAgICBidWZsZW4gLT0gbWJsZW5ndGg7CisrICAgICAgYnVmcG9zICs9IG1ibGVuZ3RoOworKyAgICB9CisrfQorKyNlbmRpZgorKworKworIHZvaWQKKyB1c2FnZSAoaW50IHN0YXR1cykKKyB7CitAQCAtNTMxLDcgKzc1MCwxMiBAQAorIAorICAgZmlsZV9saXN0ID0gKG9wdGluZCA8IGFyZ2MgPyAmYXJndltvcHRpbmRdIDogc3RkaW5fYXJndik7CisgCistICB1bmV4cGFuZCAoKTsKKysjaWYgSEFWRV9NQlJUT1dDCisrICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrICAgIHVuZXhwYW5kX211bHRpYnl0ZSAoKTsKKysgIGVsc2UKKysjZW5kaWYKKysgICAgdW5leHBhbmQgKCk7CisgCisgICBpZiAoaGF2ZV9yZWFkX3N0ZGluICYmIGZjbG9zZSAoc3RkaW4pICE9IDApCisgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIGVycm5vLCAiLSIpOworLS0tIGNvcmV1dGlscy02LjgrL3NyYy9wci5jLmkxOG4JMjAwNy0wMS0xNCAxNTo0MToyOC4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky9zcmMvcHIuYwkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTMxMyw2ICszMTMsMzIgQEAKKyAKKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKworKy8qIEdldCBNQl9MRU5fTUFYLiAgKi8KKysjaW5jbHVkZSA8bGltaXRzLmg+CisrLyogTUJfTEVOX01BWCBpcyBpbmNvcnJlY3RseSBkZWZpbmVkIHRvIGJlIDEgaW4gYXQgbGVhc3Qgb25lIEdDQworKyAgIGluc3RhbGxhdGlvbjsgd29yayBhcm91bmQgdGhpcyBjb25maWd1cmF0aW9uIGVycm9yLiAgKi8KKysjaWYgIWRlZmluZWQgTUJfTEVOX01BWCB8fCBNQl9MRU5fTUFYID09IDEKKysjIGRlZmluZSBNQl9MRU5fTUFYIDE2CisrI2VuZGlmCisrCisrLyogR2V0IE1CX0NVUl9NQVguICAqLworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysKKysvKiBTb2xhcmlzIDIuNSBoYXMgYSBidWc6IDx3Y2hhci5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSA8d2N0eXBlLmg+LiAgKi8KKysvKiBHZXQgbWJzdGF0ZV90LCBtYnJ0b3djKCksIHdjd2lkdGgoKS4gICovCisrI2lmIEhBVkVfV0NIQVJfSAorKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjZW5kaWYKKysKKysvKiBHZXQgaXN3cHJpbnQoKS4gLS0gZm9yIHdjd2lkdGgoKS4gICovCisrI2lmIEhBVkVfV0NUWVBFX0gKKysjIGluY2x1ZGUgPHdjdHlwZS5oPgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBpc3dwcmludCAmJiAhSEFWRV9JU1dQUklOVAorKyMgZGVmaW5lIGlzd3ByaW50KHdjKSAxCisrI2VuZGlmCisrCisgI2luY2x1ZGUgInN5c3RlbS5oIgorICNpbmNsdWRlICJlcnJvci5oIgorICNpbmNsdWRlICJoYXJkLWxvY2FsZS5oIgorQEAgLTMyNCw2ICszNTAsMTggQEAKKyAjaW5jbHVkZSAic3RyZnRpbWUuaCIKKyAjaW5jbHVkZSAieHN0cnRvbC5oIgorIAorKy8qIFNvbWUgc3lzdGVtcywgbGlrZSBCZU9TLCBoYXZlIG11bHRpYnl0ZSBlbmNvZGluZ3MgYnV0IGxhY2sgbWJzdGF0ZV90LiAgKi8KKysjaWYgSEFWRV9NQlJUT1dDICYmIGRlZmluZWQgbWJzdGF0ZV90CisrIyBkZWZpbmUgbWJydG93Yyhwd2MsIHMsIG4sIHBzKSAobWJydG93YykgKHB3YywgcywgbiwgMCkKKysjZW5kaWYKKysKKysjaWZuZGVmIEhBVkVfREVDTF9XQ1dJRFRICisrInRoaXMgY29uZmlndXJlLXRpbWUgZGVjbGFyYXRpb24gdGVzdCB3YXMgbm90IHJ1biIKKysjZW5kaWYKKysjaWYgIUhBVkVfREVDTF9XQ1dJRFRICisrZXh0ZXJuIGludCB3Y3dpZHRoICgpOworKyNlbmRpZgorKworIC8qIFRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoaXMgcHJvZ3JhbSAoZS5nLiwgbm8gYGcnIHByZWZpeCkuICAqLworICNkZWZpbmUgUFJPR1JBTV9OQU1FICJwciIKKyAKK0BAIC00MTYsNyArNDU0LDIwIEBACisgCisgI2RlZmluZSBOVUxMQ09MIChDT0xVTU4gKikwCisgCistc3RhdGljIGludCBjaGFyX3RvX2NsdW1wIChjaGFyIGMpOworKy8qIEZ1bnRpb24gcG9pbnRlcnMgdG8gc3dpdGNoIGZ1bmN0aW9ucyBmb3Igc2luZ2xlIGJ5dGUgbG9jYWxlIG9yIGZvcgorKyAgIG11bHRpYnl0ZSBsb2NhbGUuIElmIG11bHRpYnl0ZSBmdW5jdGlvbnMgZG8gbm90IGV4aXN0IGluIHlvdXIgc3lzeXRlbSwKKysgICB0aGVzZSBwb2ludGVycyBhbHdheXMgcG9pbnQgdGhlIGZ1bmN0aW9uIGZvciBzaW5nbGUgYnl0ZSBsb2NhbGUuICovCisrc3RhdGljIHZvaWQgKCpwcmludF9jaGFyKSAoY2hhciBjKTsKKytzdGF0aWMgaW50ICgqY2hhcl90b19jbHVtcCkgKGNoYXIgYyk7CisrCisrLyogRnVuY3Rpb25zIGZvciBzaW5nbGUgYnl0ZSBsb2NhbGUuICovCisrc3RhdGljIHZvaWQgcHJpbnRfY2hhcl9zaW5nbGUgKGNoYXIgYyk7Cisrc3RhdGljIGludCBjaGFyX3RvX2NsdW1wX3NpbmdsZSAoY2hhciBjKTsKKysKKysvKiBGdW5jdGlvbnMgZm9yIG11bHRpYnl0ZSBsb2NhbGUuICovCisrc3RhdGljIHZvaWQgcHJpbnRfY2hhcl9tdWx0aSAoY2hhciBjKTsKKytzdGF0aWMgaW50IGNoYXJfdG9fY2x1bXBfbXVsdGkgKGNoYXIgYyk7CisrCisgc3RhdGljIGJvb2wgcmVhZF9saW5lIChDT0xVTU4gKnApOworIHN0YXRpYyBib29sIHByaW50X3BhZ2UgKHZvaWQpOworIHN0YXRpYyBib29sIHByaW50X3N0b3JlZCAoQ09MVU1OICpwKTsKK0BAIC00MjYsNiArNDc3LDcgQEAKKyBzdGF0aWMgdm9pZCBwYWRfYWNyb3NzX3RvIChpbnQgcG9zaXRpb24pOworIHN0YXRpYyB2b2lkIGFkZF9saW5lX251bWJlciAoQ09MVU1OICpwKTsKKyBzdGF0aWMgdm9pZCBnZXRvcHRhcmcgKGNoYXIgKmFyZywgY2hhciBzd2l0Y2hfY2hhciwgY2hhciAqY2hhcmFjdGVyLAorKwkJICAgICAgIGludCAqY2hhcmFjdGVyX2xlbmd0aCwgaW50ICpjaGFyYWN0ZXJfd2lkdGgsCisgCQkgICAgICAgaW50ICpudW1iZXIpOworIHZvaWQgdXNhZ2UgKGludCBzdGF0dXMpOworIHN0YXRpYyB2b2lkIHByaW50X2ZpbGVzIChpbnQgbnVtYmVyX29mX2ZpbGVzLCBjaGFyICoqYXYpOworQEAgLTQ0MCw3ICs0OTIsNiBAQAorIHN0YXRpYyB2b2lkIHBhZF9kb3duIChpbnQgbGluZXMpOworIHN0YXRpYyB2b2lkIHJlYWRfcmVzdF9vZl9saW5lIChDT0xVTU4gKnApOworIHN0YXRpYyB2b2lkIHNraXBfcmVhZCAoQ09MVU1OICpwLCBpbnQgY29sdW1uX251bWJlcik7Cistc3RhdGljIHZvaWQgcHJpbnRfY2hhciAoY2hhciBjKTsKKyBzdGF0aWMgdm9pZCBjbGVhbnVwICh2b2lkKTsKKyBzdGF0aWMgdm9pZCBwcmludF9zZXBfc3RyaW5nICh2b2lkKTsKKyBzdGF0aWMgdm9pZCBzZXBhcmF0b3Jfc3RyaW5nIChjb25zdCBjaGFyICpvcHRhcmdfUyk7CitAQCAtNDU1LDcgKzUwNiw3IEBACisgICAgd2Ugc3RvcmUgdGhlIGxlZnRtb3N0IGNvbHVtbnMgY29udGlndW91c2x5IGluIGJ1ZmYuCisgICAgVG8gcHJpbnQgYSBsaW5lIGZyb20gYnVmZiwgZ2V0IHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyCisgICAgZnJvbSBsaW5lX3ZlY3RvcltpXSwgYW5kIHByaW50IHVwIHRvIGxpbmVfdmVjdG9yW2kgKyAxXS4gKi8KKy1zdGF0aWMgY2hhciAqYnVmZjsKKytzdGF0aWMgdW5zaWduZWQgY2hhciAqYnVmZjsKKyAKKyAvKiBJbmRleCBvZiB0aGUgcG9zaXRpb24gaW4gYnVmZiB3aGVyZSB0aGUgbmV4dCBjaGFyYWN0ZXIKKyAgICB3aWxsIGJlIHN0b3JlZC4gKi8KK0BAIC01NTksNyArNjEwLDcgQEAKKyBzdGF0aWMgYm9vbCB1bnRhYmlmeV9pbnB1dCA9IGZhbHNlOworIAorIC8qICgtZSkgVGhlIGlucHV0IHRhYiBjaGFyYWN0ZXIuICovCistc3RhdGljIGNoYXIgaW5wdXRfdGFiX2NoYXIgPSAnXHQnOworK3N0YXRpYyBjaGFyIGlucHV0X3RhYl9jaGFyW01CX0xFTl9NQVhdID0gIlx0IjsKKyAKKyAvKiAoLWUpIFRhYnN0b3BzIGFyZSBhdCBjaGFyc19wZXJfdGFiLCAyKmNoYXJzX3Blcl90YWIsIDMqY2hhcnNfcGVyX3RhYiwgLi4uCisgICAgd2hlcmUgdGhlIGxlZnRtb3N0IGNvbHVtbiBpcyAxLiAqLworQEAgLTU2OSw3ICs2MjAsMTAgQEAKKyBzdGF0aWMgYm9vbCB0YWJpZnlfb3V0cHV0ID0gZmFsc2U7CisgCisgLyogKC1pKSBUaGUgb3V0cHV0IHRhYiBjaGFyYWN0ZXIuICovCistc3RhdGljIGNoYXIgb3V0cHV0X3RhYl9jaGFyID0gJ1x0JzsKKytzdGF0aWMgY2hhciBvdXRwdXRfdGFiX2NoYXJbTUJfTEVOX01BWF0gPSAiXHQiOworKworKy8qICgtaSkgVGhlIGJ5dGUgbGVuZ3RoIG9mIG91dHB1dCB0YWIgY2hhcmFjdGVyLiAqLworK3N0YXRpYyBpbnQgb3V0cHV0X3RhYl9jaGFyX2xlbmd0aCA9IDE7CisgCisgLyogKC1pKSBUaGUgd2lkdGggb2YgdGhlIG91dHB1dCB0YWIuICovCisgc3RhdGljIGludCBjaGFyc19wZXJfb3V0cHV0X3RhYiA9IDg7CitAQCAtNjQzLDcgKzY5NywxMyBAQAorIHN0YXRpYyBib29sIG51bWJlcmVkX2xpbmVzID0gZmFsc2U7CisgCisgLyogKC1uKSBDaGFyYWN0ZXIgd2hpY2ggZm9sbG93cyBlYWNoIGxpbmUgbnVtYmVyLiAqLworLXN0YXRpYyBjaGFyIG51bWJlcl9zZXBhcmF0b3IgPSAnXHQnOworK3N0YXRpYyBjaGFyIG51bWJlcl9zZXBhcmF0b3JbTUJfTEVOX01BWF0gPSAiXHQiOworKworKy8qICgtbikgVGhlIGJ5dGUgbGVuZ3RoIG9mIHRoZSBjaGFyYWN0ZXIgd2hpY2ggZm9sbG93cyBlYWNoIGxpbmUgbnVtYmVyLiAqLworK3N0YXRpYyBpbnQgbnVtYmVyX3NlcGFyYXRvcl9sZW5ndGggPSAxOworKworKy8qICgtbikgVGhlIGNoYXJhY3RlciB3aWR0aCBvZiB0aGUgY2hhcmFjdGVyIHdoaWNoIGZvbGxvd3MgZWFjaCBsaW5lIG51bWJlci4gKi8KKytzdGF0aWMgaW50IG51bWJlcl9zZXBhcmF0b3Jfd2lkdGggPSAwOworIAorIC8qICgtbikgbGluZSBjb3VudGluZyBzdGFydHMgd2l0aCAxc3QgbGluZSBvZiBpbnB1dCBmaWxlIChub3Qgd2l0aCAxc3QKKyAgICBsaW5lIG9mIDFzdCBwYWdlIHByaW50ZWQpLiAqLworQEAgLTY5Niw2ICs3NTYsNyBAQAorICAgIC1hfENPTFVNTnwtbSBpcyBhIGBzcGFjZScgYW5kIHdpdGggdGhlIC1KIG9wdGlvbiBhIGB0YWInLiAqLworIHN0YXRpYyBjaGFyICpjb2xfc2VwX3N0cmluZyA9ICIiOworIHN0YXRpYyBpbnQgY29sX3NlcF9sZW5ndGggPSAwOworK3N0YXRpYyBpbnQgY29sX3NlcF93aWR0aCA9IDA7Cisgc3RhdGljIGNoYXIgKmNvbHVtbl9zZXBhcmF0b3IgPSAiICI7Cisgc3RhdGljIGNoYXIgKmxpbmVfc2VwYXJhdG9yID0gIlx0IjsKKyAKK0BAIC04NTIsNiArOTEzLDEzIEBACisgICBjb2xfc2VwX2xlbmd0aCA9IChpbnQpIHN0cmxlbiAob3B0YXJnX1MpOworICAgY29sX3NlcF9zdHJpbmcgPSB4bWFsbG9jIChjb2xfc2VwX2xlbmd0aCArIDEpOworICAgc3RyY3B5IChjb2xfc2VwX3N0cmluZywgb3B0YXJnX1MpOworKworKyNpZiBIQVZFX01CUlRPV0MKKysgIGlmIChNQl9DVVJfTUFYID4gMSkKKysgICAgY29sX3NlcF93aWR0aCA9IG1ic3dpZHRoIChjb2xfc2VwX3N0cmluZywgMCk7CisrICBlbHNlCisrI2VuZGlmCisrICAgIGNvbF9zZXBfd2lkdGggPSBjb2xfc2VwX2xlbmd0aDsKKyB9CisgCisgaW50CitAQCAtODc3LDYgKzk0NSwyMSBAQAorIAorICAgYXRleGl0IChjbG9zZV9zdGRvdXQpOworIAorKy8qIERlZmluZSB3aGljaCBmdW5jdGlvbnMgYXJlIHVzZWQsIHRoZSBvbmVzIGZvciBzaW5nbGUgYnl0ZSBsb2NhbGUgb3IgdGhlIG9uZXMKKysgICBmb3IgbXVsdGlieXRlIGxvY2FsZS4gKi8KKysjaWYgSEFWRV9NQlJUT1dDCisrICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrICAgIHsKKysgICAgICBwcmludF9jaGFyID0gcHJpbnRfY2hhcl9tdWx0aTsKKysgICAgICBjaGFyX3RvX2NsdW1wID0gY2hhcl90b19jbHVtcF9tdWx0aTsKKysgICAgfQorKyAgZWxzZQorKyNlbmRpZgorKyAgICB7CisrICAgICAgcHJpbnRfY2hhciA9IHByaW50X2NoYXJfc2luZ2xlOworKyAgICAgIGNoYXJfdG9fY2x1bXAgPSBjaGFyX3RvX2NsdW1wX3NpbmdsZTsKKysgICAgfQorKworICAgbl9maWxlcyA9IDA7CisgICBmaWxlX25hbWVzID0gKGFyZ2MgPiAxCisgCQk/IHhtYWxsb2MgKChhcmdjIC0gMSkgKiBzaXplb2YgKGNoYXIgKikpCitAQCAtOTQ5LDggKzEwMzIsMTIgQEAKKyAJICBicmVhazsKKyAJY2FzZSAnZSc6CisgCSAgaWYgKG9wdGFyZykKKy0JICAgIGdldG9wdGFyZyAob3B0YXJnLCAnZScsICZpbnB1dF90YWJfY2hhciwKKy0JCSAgICAgICAmY2hhcnNfcGVyX2lucHV0X3RhYik7CisrCSAgICB7CisrCSAgICAgIGludCBkdW1teV9sZW5ndGgsIGR1bW15X3dpZHRoOworKworKwkgICAgICBnZXRvcHRhcmcgKG9wdGFyZywgJ2UnLCBpbnB1dF90YWJfY2hhciwgJmR1bW15X2xlbmd0aCwKKysJCQkgJmR1bW15X3dpZHRoLCAmY2hhcnNfcGVyX2lucHV0X3RhYik7CisrCSAgICB9CisgCSAgLyogQ291bGQgY2hlY2sgdGFiIHdpZHRoID4gMC4gKi8KKyAJICB1bnRhYmlmeV9pbnB1dCA9IHRydWU7CisgCSAgYnJlYWs7CitAQCAtOTYzLDggKzEwNTAsMTIgQEAKKyAJICBicmVhazsKKyAJY2FzZSAnaSc6CisgCSAgaWYgKG9wdGFyZykKKy0JICAgIGdldG9wdGFyZyAob3B0YXJnLCAnaScsICZvdXRwdXRfdGFiX2NoYXIsCistCQkgICAgICAgJmNoYXJzX3Blcl9vdXRwdXRfdGFiKTsKKysJICAgIHsKKysJICAgICAgaW50IGR1bW15X3dpZHRoOworKworKwkgICAgICBnZXRvcHRhcmcgKG9wdGFyZywgJ2knLCBvdXRwdXRfdGFiX2NoYXIsICZvdXRwdXRfdGFiX2NoYXJfbGVuZ3RoLAorKwkJCSAmZHVtbXlfd2lkdGgsICZjaGFyc19wZXJfb3V0cHV0X3RhYik7CisrCSAgICB9CisgCSAgLyogQ291bGQgY2hlY2sgdGFiIHdpZHRoID4gMC4gKi8KKyAJICB0YWJpZnlfb3V0cHV0ID0gdHJ1ZTsKKyAJICBicmVhazsKK0BAIC05OTEsOCArMTA4Miw4IEBACisgCWNhc2UgJ24nOgorIAkgIG51bWJlcmVkX2xpbmVzID0gdHJ1ZTsKKyAJICBpZiAob3B0YXJnKQorLQkgICAgZ2V0b3B0YXJnIChvcHRhcmcsICduJywgJm51bWJlcl9zZXBhcmF0b3IsCistCQkgICAgICAgJmNoYXJzX3Blcl9udW1iZXIpOworKwkgICAgZ2V0b3B0YXJnIChvcHRhcmcsICduJywgbnVtYmVyX3NlcGFyYXRvciwgJm51bWJlcl9zZXBhcmF0b3JfbGVuZ3RoLAorKwkJICAgICAgICZudW1iZXJfc2VwYXJhdG9yX3dpZHRoLCAmY2hhcnNfcGVyX251bWJlcik7CisgCSAgYnJlYWs7CisgCWNhc2UgJ04nOgorIAkgIHNraXBfY291bnQgPSBmYWxzZTsKK0BAIC0xMDMxLDcgKzExMjIsNyBAQAorIAkgIG9sZF9zID0gZmFsc2U7CisgCSAgLyogUmVzZXQgYW4gYWRkaXRpb25hbCBpbnB1dCBvZiAtcywgLVMgZG9taW5hdGVzIC1zICovCisgCSAgY29sX3NlcF9zdHJpbmcgPSAiIjsKKy0JICBjb2xfc2VwX2xlbmd0aCA9IDA7CisrCSAgY29sX3NlcF9sZW5ndGggPSBjb2xfc2VwX3dpZHRoID0gMDsKKyAJICB1c2VfY29sX3NlcGFyYXRvciA9IHRydWU7CisgCSAgaWYgKG9wdGFyZykKKyAJICAgIHNlcGFyYXRvcl9zdHJpbmcgKG9wdGFyZyk7CitAQCAtMTE4OCwxMCArMTI3OSw0NSBAQAorICAgIGEgbnVtYmVyLiAqLworIAorIHN0YXRpYyB2b2lkCistZ2V0b3B0YXJnIChjaGFyICphcmcsIGNoYXIgc3dpdGNoX2NoYXIsIGNoYXIgKmNoYXJhY3RlciwgaW50ICpudW1iZXIpCisrZ2V0b3B0YXJnIChjaGFyICphcmcsIGNoYXIgc3dpdGNoX2NoYXIsIGNoYXIgKmNoYXJhY3RlciwgaW50ICpjaGFyYWN0ZXJfbGVuZ3RoLAorKwkgICBpbnQgKmNoYXJhY3Rlcl93aWR0aCwgaW50ICpudW1iZXIpCisgeworICAgaWYgKCFJU0RJR0lUICgqYXJnKSkKKy0gICAgKmNoYXJhY3RlciA9ICphcmcrKzsKKysgICAgeworKyNpZmRlZiBIQVZFX01CUlRPV0MKKysgICAgICBpZiAoTUJfQ1VSX01BWCA+IDEpCS8qIGZvciBtdWx0aWJ5dGUgbG9jYWxlLiAqLworKwl7CisrCSAgd2NoYXJfdCB3YzsKKysJICBzaXplX3QgbWJsZW5ndGg7CisrCSAgaW50IHdpZHRoOworKwkgIG1ic3RhdGVfdCBzdGF0ZSA9IHsnXDAnfTsKKysKKysJICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgYXJnLCBzdHJubGVuKGFyZywgTUJfTEVOX01BWCksICZzdGF0ZSk7CisrCisrCSAgaWYgKG1ibGVuZ3RoID09IChzaXplX3QpLTEgfHwgbWJsZW5ndGggPT0gKHNpemVfdCktMikKKysJICAgIHsKKysJICAgICAgKmNoYXJhY3Rlcl9sZW5ndGggPSAxOworKwkgICAgICAqY2hhcmFjdGVyX3dpZHRoID0gMTsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgICpjaGFyYWN0ZXJfbGVuZ3RoID0gKG1ibGVuZ3RoIDwgMSkgPyAxIDogbWJsZW5ndGg7CisrCSAgICAgIHdpZHRoID0gd2N3aWR0aCAod2MpOworKwkgICAgICAqY2hhcmFjdGVyX3dpZHRoID0gKHdpZHRoIDwgMCkgPyAwIDogd2lkdGg7CisrCSAgICB9CisrCisrCSAgc3RybmNweSAoY2hhcmFjdGVyLCBhcmcsICpjaGFyYWN0ZXJfbGVuZ3RoKTsKKysJICBhcmcgKz0gKmNoYXJhY3Rlcl9sZW5ndGg7CisrCX0KKysgICAgICBlbHNlCQkJLyogZm9yIHNpbmdsZSBieXRlIGxvY2FsZS4gKi8KKysjZW5kaWYKKysJeworKwkgICpjaGFyYWN0ZXIgPSAqYXJnKys7CisrCSAgKmNoYXJhY3Rlcl9sZW5ndGggPSAxOworKwkgICpjaGFyYWN0ZXJfd2lkdGggPSAxOworKwl9CisrICAgIH0KKysKKyAgIGlmICgqYXJnKQorICAgICB7CisgICAgICAgbG9uZyBpbnQgdG1wX2xvbmc7CitAQCAtMTI1Niw3ICsxMzgyLDcgQEAKKyAJICBlbHNlCisgCSAgICBjb2xfc2VwX3N0cmluZyA9IGNvbHVtbl9zZXBhcmF0b3I7CisgCistCSAgY29sX3NlcF9sZW5ndGggPSAxOworKwkgIGNvbF9zZXBfbGVuZ3RoID0gY29sX3NlcF93aWR0aCA9IDE7CisgCSAgdXNlX2NvbF9zZXBhcmF0b3IgPSB0cnVlOworIAl9CisgICAgICAgLyogSXQncyByYXRoZXIgcG9pbnRsZXNzIHRvIGRlZmluZSBhIFRBQiBzZXBhcmF0b3Igd2l0aCBjb2x1bW4KK0BAIC0xMjg4LDExICsxNDE0LDExIEBACisgCSAgICAgVEFCX1dJRFRIIChjaGFyc19wZXJfaW5wdXRfdGFiLCBjaGFyc19wZXJfbnVtYmVyKTsgICAqLworIAorICAgICAgIC8qIEVzdGltYXRlIGNoYXJzX3Blcl90ZXh0IHdpdGhvdXQgYW55IG1hcmdpbiBhbmQga2VlcCBpdCBjb25zdGFudC4gKi8KKy0gICAgICBpZiAobnVtYmVyX3NlcGFyYXRvciA9PSAnXHQnKQorKyAgICAgIGlmIChudW1iZXJfc2VwYXJhdG9yWzBdID09ICdcdCcpCisgCW51bWJlcl93aWR0aCA9IGNoYXJzX3Blcl9udW1iZXIgKworIAkgIFRBQl9XSURUSCAoY2hhcnNfcGVyX2RlZmF1bHRfdGFiLCBjaGFyc19wZXJfbnVtYmVyKTsKKyAgICAgICBlbHNlCistCW51bWJlcl93aWR0aCA9IGNoYXJzX3Blcl9udW1iZXIgKyAxOworKwludW1iZXJfd2lkdGggPSBjaGFyc19wZXJfbnVtYmVyICsgbnVtYmVyX3NlcGFyYXRvcl93aWR0aDsKKyAKKyAgICAgICAvKiBUaGUgbnVtYmVyIGlzIHBhcnQgb2YgdGhlIGNvbHVtbiB3aWR0aCB1bmxlc3Mgd2UgYXJlCisgCSBwcmludGluZyBmaWxlcyBpbiBwYXJhbGxlbC4gKi8KK0BAIC0xMzA3LDcgKzE0MzMsNyBAQAorICAgICB9CisgCisgICBjaGFyc19wZXJfY29sdW1uID0gKGNoYXJzX3Blcl9saW5lIC0gY2hhcnNfdXNlZF9ieV9udW1iZXIgLQorLQkJICAgICAoY29sdW1ucyAtIDEpICogY29sX3NlcF9sZW5ndGgpIC8gY29sdW1uczsKKysJCSAgICAgKGNvbHVtbnMgLSAxKSAqIGNvbF9zZXBfd2lkdGgpIC8gY29sdW1uczsKKyAKKyAgIGlmIChjaGFyc19wZXJfY29sdW1uIDwgMSkKKyAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgXygicGFnZSB3aWR0aCB0b28gbmFycm93IikpOworQEAgLTE0MzIsNyArMTU1OCw3IEBACisgCisgICAvKiBFbmxhcmdlIHAtPnN0YXJ0X3Bvc2l0aW9uIG9mIGZpcnN0IGNvbHVtbiB0byB1c2UgdGhlIHNhbWUgZm9ybSBvZgorICAgICAgcGFkZGluZ19ub3RfcHJpbnRlZCB3aXRoIGFsbCBjb2x1bW5zLiAqLworLSAgaCA9IGggKyBjb2xfc2VwX2xlbmd0aDsKKysgIGggPSBoICsgY29sX3NlcF93aWR0aDsKKyAKKyAgIC8qIFRoaXMgbG9vcCB0YWtlcyBjYXJlIG9mIGFsbCBidXQgdGhlIHJpZ2h0bW9zdCBjb2x1bW4uICovCisgCitAQCAtMTQ2Niw3ICsxNTkyLDcgQEAKKyAJfQorICAgICAgIGVsc2UKKyAJeworLQkgIGggPSBoX25leHQgKyBjb2xfc2VwX2xlbmd0aDsKKysJICBoID0gaF9uZXh0ICsgY29sX3NlcF93aWR0aDsKKyAJICBoX25leHQgPSBoICsgY2hhcnNfcGVyX2NvbHVtbjsKKyAJfQorICAgICB9CitAQCAtMTc1Niw5ICsxODgyLDkgQEAKKyBhbGlnbl9jb2x1bW4gKENPTFVNTiAqcCkKKyB7CisgICBwYWRkaW5nX25vdF9wcmludGVkID0gcC0+c3RhcnRfcG9zaXRpb247CistICBpZiAocGFkZGluZ19ub3RfcHJpbnRlZCAtIGNvbF9zZXBfbGVuZ3RoID4gMCkKKysgIGlmIChwYWRkaW5nX25vdF9wcmludGVkIC0gY29sX3NlcF93aWR0aCA+IDApCisgICAgIHsKKy0gICAgICBwYWRfYWNyb3NzX3RvIChwYWRkaW5nX25vdF9wcmludGVkIC0gY29sX3NlcF9sZW5ndGgpOworKyAgICAgIHBhZF9hY3Jvc3NfdG8gKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX3dpZHRoKTsKKyAgICAgICBwYWRkaW5nX25vdF9wcmludGVkID0gQU5ZV0hFUkU7CisgICAgIH0KKyAKK0BAIC0yMDI5LDEzICsyMTU1LDEzIEBACisgICAgICAgLyogTWF5IGJlIHRvbyBnZW5lcm91cy4gKi8KKyAgICAgICBidWZmID0gWDJSRUFMTE9DIChidWZmLCAmYnVmZl9hbGxvY2F0ZWQpOworICAgICB9CistICBidWZmW2J1ZmZfY3VycmVudCsrXSA9IGM7CisrICBidWZmW2J1ZmZfY3VycmVudCsrXSA9ICh1bnNpZ25lZCBjaGFyKSBjOworIH0KKyAKKyBzdGF0aWMgdm9pZAorIGFkZF9saW5lX251bWJlciAoQ09MVU1OICpwKQorIHsKKy0gIGludCBpOworKyAgaW50IGksIGo7CisgICBjaGFyICpzOworICAgaW50IGxlZnRfY3V0OworIAorQEAgLTIwNTgsMjIgKzIxODQsMjQgQEAKKyAgICAgICAvKiBUYWJpZmljYXRpb24gaXMgYXNzdW1lZCBmb3IgbXVsdGlwbGUgY29sdW1ucywgYWxzbyBmb3Igbi1zZXBhcmF0b3JzLAorIAkgYnV0IGBkZWZhdWx0IG4tc2VwYXJhdG9yID0gVEFCJyBoYXNuJ3QgYmVlbiBnaXZlbiBwcmlvcml0eSBvdmVyCisgCSBlcXVhbCBjb2x1bW5fd2lkdGggYWxzbyBzcGVjaWZpZWQgYnkgUE9TSVguICovCistICAgICAgaWYgKG51bWJlcl9zZXBhcmF0b3IgPT0gJ1x0JykKKysgICAgICBpZiAobnVtYmVyX3NlcGFyYXRvclswXSA9PSAnXHQnKQorICAgICAgICAgeworICAgICAgICAgICBpID0gbnVtYmVyX3dpZHRoIC0gY2hhcnNfcGVyX251bWJlcjsKKyAgICAgICAgICAgd2hpbGUgKGktLSA+IDApCisgCSAgICAocC0+Y2hhcl9mdW5jKSAoJyAnKTsKKyAgICAgICAgIH0KKyAgICAgICBlbHNlCistICAgICAgICAocC0+Y2hhcl9mdW5jKSAobnVtYmVyX3NlcGFyYXRvcik7CisrCWZvciAoaiA9IDA7IGogPCBudW1iZXJfc2VwYXJhdG9yX2xlbmd0aDsgaisrKQorKwkgIChwLT5jaGFyX2Z1bmMpIChudW1iZXJfc2VwYXJhdG9yW2pdKTsKKyAgICAgfQorICAgZWxzZQorICAgICAvKiBUbyBjb21wbHkgd2l0aCBQT1NJWCwgd2UgYXZvaWQgYW55IGV4cGFuc2lvbiBvZiBkZWZhdWx0IFRBQgorICAgICAgICBzZXBhcmF0b3Igd2l0aCBhIHNpbmdsZSBjb2x1bW4gb3V0cHV0LiBObyBjb2x1bW5fd2lkdGggcmVxdWlyZW1lbnQKKyAgICAgICAgaGFzIHRvIGJlIGNvbnNpZGVyZWQuICovCisgICAgIHsKKy0gICAgICAocC0+Y2hhcl9mdW5jKSAobnVtYmVyX3NlcGFyYXRvcik7CistICAgICAgaWYgKG51bWJlcl9zZXBhcmF0b3IgPT0gJ1x0JykKKysgICAgICBmb3IgKGogPSAwOyBqIDwgbnVtYmVyX3NlcGFyYXRvcl9sZW5ndGg7IGorKykKKysJKHAtPmNoYXJfZnVuYykgKG51bWJlcl9zZXBhcmF0b3Jbal0pOworKyAgICAgIGlmIChudW1iZXJfc2VwYXJhdG9yWzBdID09ICdcdCcpCisgICAgICAgICBvdXRwdXRfcG9zaXRpb24gPSBQT1NfQUZURVJfVEFCIChjaGFyc19wZXJfb3V0cHV0X3RhYiwKKyAJCQkgIG91dHB1dF9wb3NpdGlvbik7CisgICAgIH0KK0BAIC0yMjM0LDcgKzIzNjIsNyBAQAorICAgd2hpbGUgKGdvYWwgLSBoX29sZCA+IDEKKyAJICYmIChoX25ldyA9IFBPU19BRlRFUl9UQUIgKGNoYXJzX3Blcl9vdXRwdXRfdGFiLCBoX29sZCkpIDw9IGdvYWwpCisgICAgIHsKKy0gICAgICBwdXRjaGFyIChvdXRwdXRfdGFiX2NoYXIpOworKyAgICAgIGZ3cml0ZSAob3V0cHV0X3RhYl9jaGFyLCBzaXplb2YoY2hhciksIG91dHB1dF90YWJfY2hhcl9sZW5ndGgsIHN0ZG91dCk7CisgICAgICAgaF9vbGQgPSBoX25ldzsKKyAgICAgfQorICAgd2hpbGUgKCsraF9vbGQgPD0gZ29hbCkKK0BAIC0yMjU0LDYgKzIzODIsNyBAQAorIHsKKyAgIGNoYXIgKnM7CisgICBpbnQgbCA9IGNvbF9zZXBfbGVuZ3RoOworKyAgaW50IG5vdF9zcGFjZV9mbGFnOworIAorICAgcyA9IGNvbF9zZXBfc3RyaW5nOworIAorQEAgLTIyNjcsNiArMjM5Niw3IEBACisgICAgIHsKKyAgICAgICBmb3IgKDsgc2VwYXJhdG9yc19ub3RfcHJpbnRlZCA+IDA7IC0tc2VwYXJhdG9yc19ub3RfcHJpbnRlZCkKKyAJeworKwkgIG5vdF9zcGFjZV9mbGFnID0gMDsKKyAJICB3aGlsZSAobC0tID4gMCkKKyAJICAgIHsKKyAJICAgICAgLyogMyB0eXBlcyBvZiBzZXBfc3RyaW5nczogc3BhY2VzIG9ubHksIHNwYWNlcyBhbmQgY2hhcnMsCitAQCAtMjI4MCwxMiArMjQxMCwxNSBAQAorIAkJfQorIAkgICAgICBlbHNlCisgCQl7CisrCQkgIG5vdF9zcGFjZV9mbGFnID0gMTsKKyAJCSAgaWYgKHNwYWNlc19ub3RfcHJpbnRlZCA+IDApCisgCQkgICAgcHJpbnRfd2hpdGVfc3BhY2UgKCk7CisgCQkgIHB1dGNoYXIgKCpzKyspOworLQkJICArK291dHB1dF9wb3NpdGlvbjsKKyAJCX0KKyAJICAgIH0KKysJICBpZiAobm90X3NwYWNlX2ZsYWcpCisrCSAgICBvdXRwdXRfcG9zaXRpb24gKz0gY29sX3NlcF93aWR0aDsKKysKKyAgICAgICAgICAgLyogc2VwX3N0cmluZyBlbmRzIHdpdGggc29tZSBzcGFjZXMgKi8KKyAJICBpZiAoc3BhY2VzX25vdF9wcmludGVkID4gMCkKKyAJICAgIHByaW50X3doaXRlX3NwYWNlICgpOworQEAgLTIzMTMsNyArMjQ0Niw3IEBACisgICAgcmVxdWlyZWQgbnVtYmVyIG9mIHRhYnMgYW5kIHNwYWNlcy4gKi8KKyAKKyBzdGF0aWMgdm9pZAorLXByaW50X2NoYXIgKGNoYXIgYykKKytwcmludF9jaGFyX3NpbmdsZSAoY2hhciBjKQorIHsKKyAgIGlmICh0YWJpZnlfb3V0cHV0KQorICAgICB7CitAQCAtMjMzNyw2ICsyNDcwLDc0IEBACisgICBwdXRjaGFyIChjKTsKKyB9CisgCisrI2lmZGVmIEhBVkVfTUJSVE9XQworK3N0YXRpYyB2b2lkCisrcHJpbnRfY2hhcl9tdWx0aSAoY2hhciBjKQorK3sKKysgIHN0YXRpYyBzaXplX3QgbWJjX3BvcyA9IDA7CisrICBzdGF0aWMgY2hhciBtYmNbTUJfTEVOX01BWF0gPSB7J1wwJ307CisrICBzdGF0aWMgbWJzdGF0ZV90IHN0YXRlID0geydcMCd9OworKyAgbWJzdGF0ZV90IHN0YXRlX2JhazsKKysgIHdjaGFyX3Qgd2M7CisrICBzaXplX3QgbWJsZW5ndGg7CisrICBpbnQgd2lkdGg7CisrCisrICBpZiAodGFiaWZ5X291dHB1dCkKKysgICAgeworKyAgICAgIHN0YXRlX2JhayA9IHN0YXRlOworKyAgICAgIG1iY1ttYmNfcG9zKytdID0gYzsKKysgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgbWJjLCBtYmNfcG9zLCAmc3RhdGUpOworKworKyAgICAgIHdoaWxlIChtYmNfcG9zID4gMCkKKysJeworKwkgIHN3aXRjaCAobWJsZW5ndGgpCisrCSAgICB7CisrCSAgICBjYXNlIChzaXplX3QpLTI6CisrCSAgICAgIHN0YXRlID0gc3RhdGVfYmFrOworKwkgICAgICByZXR1cm47CisrCisrCSAgICBjYXNlIChzaXplX3QpLTE6CisrCSAgICAgIHN0YXRlID0gc3RhdGVfYmFrOworKwkgICAgICArK291dHB1dF9wb3NpdGlvbjsKKysJICAgICAgcHV0Y2hhciAobWJjWzBdKTsKKysJICAgICAgbWVtbW92ZSAobWJjLCBtYmMgKyAxLCBNQl9DVVJfTUFYIC0gMSk7CisrCSAgICAgIC0tbWJjX3BvczsKKysJICAgICAgYnJlYWs7CisrCisrCSAgICBjYXNlIDA6CisrCSAgICAgIG1ibGVuZ3RoID0gMTsKKysKKysJICAgIGRlZmF1bHQ6CisrCSAgICAgIGlmICh3YyA9PSBMJyAnKQorKwkJeworKwkJICBtZW1tb3ZlIChtYmMsIG1iYyArIG1ibGVuZ3RoLCBNQl9DVVJfTUFYIC0gbWJsZW5ndGgpOworKwkJICAtLW1iY19wb3M7CisrCQkgICsrc3BhY2VzX25vdF9wcmludGVkOworKwkJICByZXR1cm47CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKHNwYWNlc19ub3RfcHJpbnRlZCA+IDApCisrCQlwcmludF93aGl0ZV9zcGFjZSAoKTsKKysKKysJICAgICAgLyogTm9ucHJpbnRhYmxlcyBhcmUgYXNzdW1lZCB0byBoYXZlIHdpZHRoIDAsIGV4Y2VwdCBMJ1xiJy4gKi8KKysJICAgICAgaWYgKCh3aWR0aCA9IHdjd2lkdGggKHdjKSkgPCAxKQorKwkJeworKwkJICBpZiAod2MgPT0gTCdcYicpCisrCQkgICAgLS1vdXRwdXRfcG9zaXRpb247CisrCQl9CisrCSAgICAgIGVsc2UKKysJCW91dHB1dF9wb3NpdGlvbiArPSB3aWR0aDsKKysKKysJICAgICAgZndyaXRlIChtYmMsIHNpemVvZihjaGFyKSwgbWJsZW5ndGgsIHN0ZG91dCk7CisrCSAgICAgIG1lbW1vdmUgKG1iYywgbWJjICsgbWJsZW5ndGgsIE1CX0NVUl9NQVggLSBtYmxlbmd0aCk7CisrCSAgICAgIG1iY19wb3MgLT0gbWJsZW5ndGg7CisrCSAgICB9CisrCX0KKysgICAgICByZXR1cm47CisrICAgIH0KKysgIHB1dGNoYXIgKGMpOworK30KKysjZW5kaWYKKysKKyAvKiBTa2lwIHRvIHBhZ2UgUEFHRSBiZWZvcmUgcHJpbnRpbmcuCisgICAgUEFHRSBtYXkgYmUgbGFyZ2VyIHRoYW4gdG90YWwgbnVtYmVyIG9mIHBhZ2VzLiAqLworIAorQEAgLTI1MTcsOSArMjcxOCw5IEBACisgCSAgYWxpZ25fZW1wdHlfY29scyA9IGZhbHNlOworIAl9CisgCistICAgICAgaWYgKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX2xlbmd0aCA+IDApCisrICAgICAgaWYgKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX3dpZHRoID4gMCkKKyAJeworLQkgIHBhZF9hY3Jvc3NfdG8gKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX2xlbmd0aCk7CisrCSAgcGFkX2Fjcm9zc190byAocGFkZGluZ19ub3RfcHJpbnRlZCAtIGNvbF9zZXBfd2lkdGgpOworIAkgIHBhZGRpbmdfbm90X3ByaW50ZWQgPSBBTllXSEVSRTsKKyAJfQorIAorQEAgLTI2MjAsOSArMjgyMSw5IEBACisgCX0KKyAgICAgfQorIAorLSAgaWYgKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX2xlbmd0aCA+IDApCisrICBpZiAocGFkZGluZ19ub3RfcHJpbnRlZCAtIGNvbF9zZXBfd2lkdGggPiAwKQorICAgICB7CistICAgICAgcGFkX2Fjcm9zc190byAocGFkZGluZ19ub3RfcHJpbnRlZCAtIGNvbF9zZXBfbGVuZ3RoKTsKKysgICAgICBwYWRfYWNyb3NzX3RvIChwYWRkaW5nX25vdF9wcmludGVkIC0gY29sX3NlcF93aWR0aCk7CisgICAgICAgcGFkZGluZ19ub3RfcHJpbnRlZCA9IEFOWVdIRVJFOworICAgICB9CisgCitAQCAtMjYzNSw4ICsyODM2LDggQEAKKyAgIGlmIChzcGFjZXNfbm90X3ByaW50ZWQgPT0gMCkKKyAgICAgeworICAgICAgIG91dHB1dF9wb3NpdGlvbiA9IHAtPnN0YXJ0X3Bvc2l0aW9uICsgZW5kX3ZlY3RvcltsaW5lXTsKKy0gICAgICBpZiAocC0+c3RhcnRfcG9zaXRpb24gLSBjb2xfc2VwX2xlbmd0aCA9PSBjaGFyc19wZXJfbWFyZ2luKQorLQlvdXRwdXRfcG9zaXRpb24gLT0gY29sX3NlcF9sZW5ndGg7CisrICAgICAgaWYgKHAtPnN0YXJ0X3Bvc2l0aW9uIC0gY29sX3NlcF93aWR0aCA9PSBjaGFyc19wZXJfbWFyZ2luKQorKwlvdXRwdXRfcG9zaXRpb24gLT0gY29sX3NlcF93aWR0aDsKKyAgICAgfQorIAorICAgcmV0dXJuIHRydWU7CitAQCAtMjY1NSw3ICsyODU2LDcgQEAKKyAgICBudW1iZXIgb2YgY2hhcmFjdGVycyBpcyAxLikgKi8KKyAKKyBzdGF0aWMgaW50CistY2hhcl90b19jbHVtcCAoY2hhciBjKQorK2NoYXJfdG9fY2x1bXBfc2luZ2xlIChjaGFyIGMpCisgeworICAgdW5zaWduZWQgY2hhciB1YyA9IGM7CisgICBjaGFyICpzID0gY2x1bXBfYnVmZjsKK0BAIC0yNjY1LDEwICsyODY2LDEwIEBACisgICBpbnQgY2hhcnM7CisgICBpbnQgY2hhcnNfcGVyX2MgPSA4OworIAorLSAgaWYgKGMgPT0gaW5wdXRfdGFiX2NoYXIpCisrICBpZiAoYyA9PSBpbnB1dF90YWJfY2hhclswXSkKKyAgICAgY2hhcnNfcGVyX2MgPSBjaGFyc19wZXJfaW5wdXRfdGFiOworIAorLSAgaWYgKGMgPT0gaW5wdXRfdGFiX2NoYXIgfHwgYyA9PSAnXHQnKQorKyAgaWYgKGMgPT0gaW5wdXRfdGFiX2NoYXJbMF0gfHwgYyA9PSAnXHQnKQorICAgICB7CisgICAgICAgd2lkdGggPSBUQUJfV0lEVEggKGNoYXJzX3Blcl9jLCBpbnB1dF9wb3NpdGlvbik7CisgCitAQCAtMjczOSw2ICsyOTQwLDE1NCBAQAorICAgcmV0dXJuIGNoYXJzOworIH0KKyAKKysjaWZkZWYgSEFWRV9NQlJUT1dDCisrc3RhdGljIGludAorK2NoYXJfdG9fY2x1bXBfbXVsdGkgKGNoYXIgYykKKyt7CisrICBzdGF0aWMgc2l6ZV90IG1iY19wb3MgPSAwOworKyAgc3RhdGljIGNoYXIgbWJjW01CX0xFTl9NQVhdID0geydcMCd9OworKyAgc3RhdGljIG1ic3RhdGVfdCBzdGF0ZSA9IHsnXDAnfTsKKysgIG1ic3RhdGVfdCBzdGF0ZV9iYWs7CisrICB3Y2hhcl90IHdjOworKyAgc2l6ZV90IG1ibGVuZ3RoOworKyAgaW50IHdjX3dpZHRoOworKyAgcmVnaXN0ZXIgY2hhciAqcyA9IGNsdW1wX2J1ZmY7CisrICByZWdpc3RlciBpbnQgaSwgajsKKysgIGNoYXIgZXNjX2J1ZmZbNF07CisrICBpbnQgd2lkdGg7CisrICBpbnQgY2hhcnM7CisrICBpbnQgY2hhcnNfcGVyX2MgPSA4OworKworKyAgc3RhdGVfYmFrID0gc3RhdGU7CisrICBtYmNbbWJjX3BvcysrXSA9IGM7CisrICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgbWJjLCBtYmNfcG9zLCAmc3RhdGUpOworKworKyAgd2lkdGggPSAwOworKyAgY2hhcnMgPSAwOworKyAgd2hpbGUgKG1iY19wb3MgPiAwKQorKyAgICB7CisrICAgICAgc3dpdGNoIChtYmxlbmd0aCkKKysJeworKwljYXNlIChzaXplX3QpLTI6CisrCSAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrCSAgcmV0dXJuIDA7CisrCisrCWNhc2UgKHNpemVfdCktMToKKysJICBzdGF0ZSA9IHN0YXRlX2JhazsKKysJICBtYmxlbmd0aCA9IDE7CisrCisrCSAgaWYgKHVzZV9lc2Nfc2VxdWVuY2UgfHwgdXNlX2NudHJsX3ByZWZpeCkKKysJICAgIHsKKysJICAgICAgd2lkdGggPSArNDsKKysJICAgICAgY2hhcnMgPSArNDsKKysJICAgICAgKnMrKyA9ICdcXCc7CisrCSAgICAgIHNwcmludGYgKGVzY19idWZmLCAiJTAzbyIsIG1iY1swXSk7CisrCSAgICAgIGZvciAoaSA9IDA7IGkgPD0gMjsgKytpKQorKwkJKnMrKyA9IChpbnQpIGVzY19idWZmW2ldOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgd2lkdGggKz0gMTsKKysJICAgICAgY2hhcnMgKz0gMTsKKysJICAgICAgKnMrKyA9IG1iY1swXTsKKysJICAgIH0KKysJICBicmVhazsKKysKKysJY2FzZSAwOgorKwkgIG1ibGVuZ3RoID0gMTsKKysJCS8qIEZhbGwgdGhyb3VnaCAqLworKworKwlkZWZhdWx0OgorKwkgIGlmIChtZW1jbXAgKG1iYywgaW5wdXRfdGFiX2NoYXIsIG1ibGVuZ3RoKSA9PSAwKQorKwkgICAgY2hhcnNfcGVyX2MgPSBjaGFyc19wZXJfaW5wdXRfdGFiOworKworKwkgIGlmIChtZW1jbXAgKG1iYywgaW5wdXRfdGFiX2NoYXIsIG1ibGVuZ3RoKSA9PSAwIHx8IGMgPT0gJ1x0JykKKysJICAgIHsKKysJICAgICAgaW50ICB3aWR0aF9pbmM7CisrCisrCSAgICAgIHdpZHRoX2luYyA9IFRBQl9XSURUSCAoY2hhcnNfcGVyX2MsIGlucHV0X3Bvc2l0aW9uKTsKKysJICAgICAgd2lkdGggKz0gd2lkdGhfaW5jOworKworKwkgICAgICBpZiAodW50YWJpZnlfaW5wdXQpCisrCQl7CisrCQkgIGZvciAoaSA9IHdpZHRoX2luYzsgaTsgLS1pKQorKwkJICAgICpzKysgPSAnICc7CisrCQkgIGNoYXJzICs9IHdpZHRoX2luYzsKKysJCX0KKysJICAgICAgZWxzZQorKwkJeworKwkJICBmb3IgKGkgPSAwOyBpIDwgIG1ibGVuZ3RoOyBpKyspCisrCQkgICAgKnMrKyA9IG1iY1tpXTsKKysJCSAgY2hhcnMgKz0gbWJsZW5ndGg7CisrCQl9CisrCSAgICB9CisrCSAgZWxzZSBpZiAoKHdjX3dpZHRoID0gd2N3aWR0aCAod2MpKSA8IDEpCisrCSAgICB7CisrCSAgICAgIGlmICh1c2VfZXNjX3NlcXVlbmNlKQorKwkJeworKwkJICBmb3IgKGkgPSAwOyBpIDwgbWJsZW5ndGg7IGkrKykKKysJCSAgICB7CisrCQkgICAgICB3aWR0aCArPSA0OworKwkJICAgICAgY2hhcnMgKz0gNDsKKysJCSAgICAgICpzKysgPSAnXFwnOworKwkJICAgICAgc3ByaW50ZiAoZXNjX2J1ZmYsICIlMDNvIiwgYyk7CisrCQkgICAgICBmb3IgKGogPSAwOyBqIDw9IDI7ICsraikKKysJCQkqcysrID0gKGludCkgZXNjX2J1ZmZbal07CisrCQkgICAgfQorKwkJfQorKwkgICAgICBlbHNlIGlmICh1c2VfY250cmxfcHJlZml4KQorKwkJeworKwkJICBpZiAod2MgPCAwMjAwKQorKwkJICAgIHsKKysJCSAgICAgIHdpZHRoICs9IDI7CisrCQkgICAgICBjaGFycyArPSAyOworKwkJICAgICAgKnMrKyA9ICdeJzsKKysJCSAgICAgICpzKysgPSB3YyBeIDAxMDA7CisrCQkgICAgfQorKwkJICBlbHNlCisrCQkgICAgeworKwkJICAgICAgZm9yIChpID0gMDsgaSA8IG1ibGVuZ3RoOyBpKyspCisrCQkJeworKwkJCSAgd2lkdGggKz0gNDsKKysJCQkgIGNoYXJzICs9IDQ7CisrCQkJICAqcysrID0gJ1xcJzsKKysJCQkgIHNwcmludGYgKGVzY19idWZmLCAiJTAzbyIsIGMpOworKwkJCSAgZm9yIChqID0gMDsgaiA8PSAyOyArK2opCisrCQkJICAgICpzKysgPSAoaW50KSBlc2NfYnVmZltqXTsKKysJCQl9CisrCQkgICAgfQorKwkJfQorKwkgICAgICBlbHNlIGlmICh3YyA9PSBMJ1xiJykKKysJCXsKKysJCSAgd2lkdGggKz0gLTE7CisrCQkgIGNoYXJzICs9IDE7CisrCQkgICpzKysgPSBjOworKwkJfQorKwkgICAgICBlbHNlCisrCQl7CisrCQkgIHdpZHRoICs9IDA7CisrCQkgIGNoYXJzICs9IG1ibGVuZ3RoOworKwkJICBmb3IgKGkgPSAwOyBpIDwgbWJsZW5ndGg7IGkrKykKKysJCSAgICAqcysrID0gbWJjW2ldOworKwkJfQorKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgd2lkdGggKz0gd2Nfd2lkdGg7CisrCSAgICAgIGNoYXJzICs9IG1ibGVuZ3RoOworKwkgICAgICBmb3IgKGkgPSAwOyBpIDwgbWJsZW5ndGg7IGkrKykKKysJCSpzKysgPSBtYmNbaV07CisrCSAgICB9CisrCX0KKysgICAgICBtZW1tb3ZlIChtYmMsIG1iYyArIG1ibGVuZ3RoLCBNQl9DVVJfTUFYIC0gbWJsZW5ndGgpOworKyAgICAgIG1iY19wb3MgLT0gbWJsZW5ndGg7CisrICAgIH0KKysKKysgIGlucHV0X3Bvc2l0aW9uICs9IHdpZHRoOworKyAgcmV0dXJuIGNoYXJzOworK30KKysjZW5kaWYKKysKKyAvKiBXZSd2ZSBqdXN0IHByaW50ZWQgc29tZSBmaWxlcyBhbmQgbmVlZCB0byBjbGVhbiB1cCB0aGluZ3MgYmVmb3JlCisgICAgbG9va2luZyBmb3IgbW9yZSBvcHRpb25zIGFuZCBwcmludGluZyB0aGUgbmV4dCBiYXRjaCBvZiBmaWxlcy4KKyAKKy0tLSBjb3JldXRpbHMtNi44Ky9zcmMvY3V0LmMuaTE4bgkyMDA3LTAxLTE0IDE1OjQxOjI4LjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3NyYy9jdXQuYwkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTI5LDYgKzI5LDExIEBACisgI2luY2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDxnZXRvcHQuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCisrLyogR2V0IG1ic3RhdGVfdCwgbWJydG93YygpLiAgKi8KKysjaWYgSEFWRV9XQ0hBUl9ICisrIyBpbmNsdWRlIDx3Y2hhci5oPgorKyNlbmRpZgorICNpbmNsdWRlICJzeXN0ZW0uaCIKKyAKKyAjaW5jbHVkZSAiZXJyb3IuaCIKK0BAIC0zNyw2ICs0MiwxOCBAQAorICNpbmNsdWRlICJxdW90ZS5oIgorICNpbmNsdWRlICJ4c3RybmR1cC5oIgorIAorKy8qIE1CX0xFTl9NQVggaXMgaW5jb3JyZWN0bHkgZGVmaW5lZCB0byBiZSAxIGluIGF0IGxlYXN0IG9uZSBHQ0MKKysgICBpbnN0YWxsYXRpb247IHdvcmsgYXJvdW5kIHRoaXMgY29uZmlndXJhdGlvbiBlcnJvci4JKi8KKysjaWYgIWRlZmluZWQgTUJfTEVOX01BWCB8fCBNQl9MRU5fTUFYIDwgMgorKyMgdW5kZWYgTUJfTEVOX01BWAorKyMgZGVmaW5lIE1CX0xFTl9NQVggMTYKKysjZW5kaWYKKysKKysvKiBTb21lIHN5c3RlbXMsIGxpa2UgQmVPUywgaGF2ZSBtdWx0aWJ5dGUgZW5jb2RpbmdzIGJ1dCBsYWNrIG1ic3RhdGVfdC4gICovCisrI2lmIEhBVkVfTUJSVE9XQyAmJiBkZWZpbmVkIG1ic3RhdGVfdAorKyMgZGVmaW5lIG1icnRvd2MocHdjLCBzLCBuLCBwcykgKG1icnRvd2MpIChwd2MsIHMsIG4sIDApCisrI2VuZGlmCisrCisgLyogVGhlIG9mZmljaWFsIG5hbWUgb2YgdGhpcyBwcm9ncmFtIChlLmcuLCBubyBgZycgcHJlZml4KS4gICovCisgI2RlZmluZSBQUk9HUkFNX05BTUUgImN1dCIKKyAKK0BAIC02Nyw2ICs4NCw1MiBAQAorICAgICB9CQkJCQkJCVwKKyAgIHdoaWxlICgwKQorIAorKy8qIFJlZmlsbCB0aGUgYnVmZmVyIEJVRiB0byBnZXQgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyLiAqLworKyNkZWZpbmUgUkVGSUxMX0JVRkZFUihCVUYsIEJVRlBPUywgQlVGTEVOLCBTVFJFQU0pCQkJXAorKyAgZG8JCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgaWYgKEJVRkxFTiA8IE1CX0xFTl9NQVggJiYgIWZlb2YgKFNUUkVBTSkgJiYgIWZlcnJvciAoU1RSRUFNKSkJXAorKwl7CQkJCQkJCQlcCisrCSAgbWVtbW92ZSAoQlVGLCBCVUZQT1MsIEJVRkxFTik7CQkJCVwKKysJICBCVUZMRU4gKz0gZnJlYWQgKEJVRiArIEJVRkxFTiwgc2l6ZW9mKGNoYXIpLCBCVUZTSVosIFNUUkVBTSk7IFwKKysJICBCVUZQT1MgPSBCVUY7CQkJCQkJCVwKKysJfQkJCQkJCQkJXAorKyAgICB9CQkJCQkJCQkJXAorKyAgd2hpbGUgKDApCisrCisrLyogR2V0IHdpZGUgY2hhcmFjdGVyIG9uIEJVRlBPUy4gQlVGUE9TIGlzIG5vdCBpbmNsdWRlZCBhZnRlciB0aGF0LgorKyAgIElmIGJ5dGUgc2VxdWVuY2UgaXMgbm90IHZhbGlkIGFzIGEgY2hhcmFjdGVyLCBDT05WRkFJTCBpcyAxLiBPdGhlcndpc2UgMC4gKi8gCisrI2RlZmluZSBHRVRfTkVYVF9XQ19GUk9NX0JVRkZFUihXQywgQlVGUE9TLCBCVUZMRU4sIE1CTEVOR1RILCBTVEFURSwgQ09OVkZBSUwpIFwKKysgIGRvCQkJCQkJCQkJXAorKyAgICB7CQkJCQkJCQkJXAorKyAgICAgIG1ic3RhdGVfdCBzdGF0ZV9iYWs7CQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgICBpZiAoQlVGTEVOIDwgMSkJCQkJCQkJXAorKwl7CQkJCQkJCQlcCisrCSAgV0MgPSBXRU9GOwkJCQkJCQlcCisrCSAgYnJlYWs7CQkJCQkJCVwKKysJfQkJCQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgICAvKiBHZXQgYSB3aWRlIGNoYXJhY3Rlci4gKi8JCQkJCVwKKysgICAgICBDT05WRkFJTCA9IDA7CQkJCQkJCVwKKysgICAgICBzdGF0ZV9iYWsgPSBTVEFURTsJCQkJCQlcCisrICAgICAgTUJMRU5HVEggPSBtYnJ0b3djICgod2NoYXJfdCAqKSZXQywgQlVGUE9TLCBCVUZMRU4sICZTVEFURSk7CVwKKysJCQkJCQkJCQlcCisrICAgICAgc3dpdGNoIChNQkxFTkdUSCkJCQkJCQkJXAorKwl7CQkJCQkJCQlcCisrCWNhc2UgKHNpemVfdCktMToJCQkJCQlcCisrCWNhc2UgKHNpemVfdCktMjoJCQkJCQlcCisrCSAgQ09OVkZBSUwrKzsJCQkJCQkJXAorKwkgIFNUQVRFID0gc3RhdGVfYmFrOwkJCQkJCVwKKysJICAvKiBGYWxsIHRocm91Z24uICovCQkJCQkJXAorKwkJCQkJCQkJCVwKKysJY2FzZSAwOgkJCQkJCQkJXAorKwkgIE1CTEVOR1RIID0gMTsJCQkJCQkJXAorKwkgIGJyZWFrOwkJCQkJCQlcCisrCX0JCQkJCQkJCVwKKysgICAgfQkJCQkJCQkJCVwKKysgIHdoaWxlICgwKQorKworIHN0cnVjdCByYW5nZV9wYWlyCisgICB7CisgICAgIHNpemVfdCBsbzsKK0BAIC04NSw3ICsxNDgsNyBAQAorIC8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIGZvciBGSUVMRF8xX0JVRkZFUi4gICovCisgc3RhdGljIHNpemVfdCBmaWVsZF8xX2J1ZnNpemU7CisgCistLyogVGhlIGxhcmdlc3QgZmllbGQgb3IgYnl0ZSBpbmRleCB1c2VkIGFzIGFuIGVuZHBvaW50IG9mIGEgY2xvc2VkCisrLyogVGhlIGxhcmdlc3QgYnl0ZSwgY2hhcmFjdGVyIG9yIGZpZWxkIGluZGV4IHVzZWQgYXMgYW4gZW5kcG9pbnQgb2YgYSBjbG9zZWQKKyAgICBvciBkZWdlbmVyYXRlIHJhbmdlIHNwZWNpZmljYXRpb247ICB0aGlzIGRvZXNuJ3QgaW5jbHVkZSB0aGUgc3RhcnRpbmcKKyAgICBpbmRleCBvZiByaWdodC1vcGVuLWVuZGVkIHJhbmdlcy4gIEZvciBleGFtcGxlLCB3aXRoIGVpdGhlciByYW5nZSBzcGVjCisgICAgYDItNSw5LScsIGAyLTMsNSw5LScgdGhpcyB2YXJpYWJsZSB3b3VsZCBiZSBzZXQgdG8gNS4gICovCitAQCAtOTcsMTAgKzE2MCwxMSBAQAorIAorIC8qIFRoaXMgaXMgYSBiaXQgdmVjdG9yLgorICAgIEluIGJ5dGUgbW9kZSwgd2hpY2ggYnl0ZXMgdG8gb3V0cHV0LgorKyAgIEluIGNoYXJhY3RlciBtb2RlLCB3aGljaCBjaGFyYWN0ZXJzIHRvIG91dHB1dC4KKyAgICBJbiBmaWVsZCBtb2RlLCB3aGljaCBERUxJTS1zZXBhcmF0ZWQgZmllbGRzIHRvIG91dHB1dC4KKy0gICBCb3RoIGJ5dGVzIGFuZCBmaWVsZHMgYXJlIG51bWJlcmVkIHN0YXJ0aW5nIHdpdGggMSwKKysgICBCeXRlcywgY2hhcmFjdGVycyBhbmQgZmllbGRzIGFyZSBudW1iZXJlZCBzdGFydGluZyB3aXRoIDEsCisgICAgc28gdGhlIHplcm90aCBiaXQgb2YgdGhpcyBhcnJheSBpcyB1bnVzZWQuCistICAgQSBmaWVsZCBvciBieXRlIEsgaGFzIGJlZW4gc2VsZWN0ZWQgaWYKKysgICBBIGJ5dGUsIGNoYXJhY3RlciBvciBmaWVsZCBLIGhhcyBiZWVuIHNlbGVjdGVkIGlmCisgICAgKEsgPD0gTUFYX1JBTkdFX0VORFBPSU5UIGFuZCBpc19wcmludGFibGVfZmllbGQoSykpCisgICAgIHx8IChFT0xfUkFOR0VfU1RBUlQgPiAwICYmIEsgPj0gRU9MX1JBTkdFX1NUQVJUKS4gICovCisgc3RhdGljIHVuc2lnbmVkIGNoYXIgKnByaW50YWJsZV9maWVsZDsKK0BAIC0xMDksOSArMTczLDEyIEBACisgICB7CisgICAgIHVuZGVmaW5lZF9tb2RlLAorIAorLSAgICAvKiBPdXRwdXQgY2hhcmFjdGVycyB0aGF0IGFyZSBpbiB0aGUgZ2l2ZW4gYnl0ZXMuICovCisrICAgIC8qIE91dHB1dCBieXRlcyB0aGF0IGFyZSBhdCB0aGUgZ2l2ZW4gcG9zaXRpb25zLiAqLworICAgICBieXRlX21vZGUsCisgCisrICAgIC8qIE91dHB1dCBjaGFyYWN0ZXJzIHRoYXQgYXJlIGF0IHRoZSBnaXZlbiBwb3NpdGlvbnMuICovCisrICAgIGNoYXJhY3Rlcl9tb2RlLAorKworICAgICAvKiBPdXRwdXQgdGhlIGdpdmVuIGRlbGltZXRlci1zZXBhcmF0ZWQgZmllbGRzLiAqLworICAgICBmaWVsZF9tb2RlCisgICB9OworQEAgLTEyMSw2ICsxODgsMTMgQEAKKyAKKyBzdGF0aWMgZW51bSBvcGVyYXRpbmdfbW9kZSBvcGVyYXRpbmdfbW9kZTsKKyAKKysvKiBJZiBub256ZXJvLCB3aGVuIGluIGJ5dGUgbW9kZSwgZG9uJ3Qgc3BsaXQgbXVsdGlieXRlIGNoYXJhY3RlcnMuICAqLworK3N0YXRpYyBpbnQgYnl0ZV9tb2RlX2NoYXJhY3Rlcl9hd2FyZTsKKysKKysvKiBJZiBub256ZXJvLCB0aGUgZnVuY3Rpb24gZm9yIHNpbmdsZSBieXRlIGxvY2FsZSBpcyB3b3JrCisrICAgaWYgdGhpcyBwcm9ncmFtIHJ1bnMgb24gbXVsdGlieXRlIGxvY2FsZS4gKi8KKytzdGF0aWMgaW50IGZvcmNlX3NpbmdsZWJ5dGVfbW9kZTsKKysKKyAvKiBJZiB0cnVlIGRvIG5vdCBvdXRwdXQgbGluZXMgY29udGFpbmluZyBubyBkZWxpbWV0ZXIgY2hhcmFjdGVycy4KKyAgICBPdGhlcndpc2UsIGFsbCBzdWNoIGxpbmVzIGFyZSBwcmludGVkLiAgVGhpcyBvcHRpb24gaXMgdmFsaWQgb25seQorICAgIHdpdGggZmllbGQgbW9kZS4gICovCitAQCAtMTMyLDYgKzIwNiw5IEBACisgCisgLyogVGhlIGRlbGltZXRlciBjaGFyYWN0ZXIgZm9yIGZpZWxkIG1vZGUuICovCisgc3RhdGljIHVuc2lnbmVkIGNoYXIgZGVsaW07CisrI2lmIEhBVkVfV0NIQVJfSAorK3N0YXRpYyB3Y2hhcl90IHdjZGVsaW07CisrI2VuZGlmCisgCisgLyogVHJ1ZSBpZiB0aGUgLS1vdXRwdXQtZGVsaW1pdGVyPVNUUklORyBvcHRpb24gd2FzIHNwZWNpZmllZC4gICovCisgc3RhdGljIGJvb2wgb3V0cHV0X2RlbGltaXRlcl9zcGVjaWZpZWQ7CitAQCAtMjA1LDcgKzI4Miw3IEBACisgICAtZiwgLS1maWVsZHM9TElTVCAgICAgICBzZWxlY3Qgb25seSB0aGVzZSBmaWVsZHM7ICBhbHNvIHByaW50IGFueSBsaW5lXG5cCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgY29udGFpbnMgbm8gZGVsaW1pdGVyIGNoYXJhY3RlciwgdW5sZXNzXG5cCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSAtcyBvcHRpb24gaXMgc3BlY2lmaWVkXG5cCistICAtbiAgICAgICAgICAgICAgICAgICAgICAoaWdub3JlZClcblwKKysgIC1uICAgICAgICAgICAgICAgICAgICAgIHdpdGggLWI6IGRvbid0IHNwbGl0IG11bHRpYnl0ZSBjaGFyYWN0ZXJzXG5cCisgIiksIHN0ZG91dCk7CisgICAgICAgZnB1dHMgKF8oIlwKKyAgICAgICAtLWNvbXBsZW1lbnQgICAgICAgIGNvbXBsZW1lbnQgdGhlIHNldCBvZiBzZWxlY3RlZCBieXRlcywgY2hhcmFjdGVyc1xuXAorQEAgLTM2Miw3ICs0MzksNyBAQAorIAkgIGluX2RpZ2l0cyA9IGZhbHNlOworIAkgIC8qIFN0YXJ0aW5nIGEgcmFuZ2UuICovCisgCSAgaWYgKGRhc2hfZm91bmQpCistCSAgICBGQVRBTF9FUlJPUiAoXygiaW52YWxpZCBieXRlIG9yIGZpZWxkIGxpc3QiKSk7CisrCSAgICBGQVRBTF9FUlJPUiAoXygiaW52YWxpZCBieXRlLCBjaGFyYWN0ZXIgb3IgZmllbGQgbGlzdCIpKTsKKyAJICBkYXNoX2ZvdW5kID0gdHJ1ZTsKKyAJICBmaWVsZHN0cisrOworIAorQEAgLTM4NywxNCArNDY0LDE2IEBACisgCSAgICAgIGlmICh2YWx1ZSA9PSAwKQorIAkJeworIAkJICAvKiBgbi0nLiAgRnJvbSBgaW5pdGlhbCcgdG8gZW5kIG9mIGxpbmUuICovCistCQkgIGVvbF9yYW5nZV9zdGFydCA9IGluaXRpYWw7CisrCQkgIGlmIChlb2xfcmFuZ2Vfc3RhcnQgPT0gMCB8fAorKwkJICAgICAgKGVvbF9yYW5nZV9zdGFydCAhPSAwICYmIGVvbF9yYW5nZV9zdGFydCA+IGluaXRpYWwpKQorKwkJICAgIGVvbF9yYW5nZV9zdGFydCA9IGluaXRpYWw7CisgCQkgIGZpZWxkX2ZvdW5kID0gdHJ1ZTsKKyAJCX0KKyAJICAgICAgZWxzZQorIAkJeworIAkJICAvKiBgbS1uJyBvciBgLW4nICgxLW4pLiAqLworIAkJICBpZiAodmFsdWUgPCBpbml0aWFsKQorLQkJICAgIEZBVEFMX0VSUk9SIChfKCJpbnZhbGlkIGJ5dGUgb3IgZmllbGQgbGlzdCIpKTsKKysJCSAgICBGQVRBTF9FUlJPUiAoXygiaW52YWxpZCBieXRlLCBjaGFyYWN0ZXIgb3IgZmllbGQgbGlzdCIpKTsKKyAKKyAJCSAgLyogSXMgdGhlcmUgYWxyZWFkeSBhIHJhbmdlIGdvaW5nIHRvIGVuZCBvZiBsaW5lPyAqLworIAkJICBpZiAoZW9sX3JhbmdlX3N0YXJ0ICE9IDApCitAQCAtNDY3LDYgKzU0Niw5IEBACisgCSAgICAgIGlmIChvcGVyYXRpbmdfbW9kZSA9PSBieXRlX21vZGUpCisgCQllcnJvciAoMCwgMCwKKyAJCSAgICAgICBfKCJieXRlIG9mZnNldCAlcyBpcyB0b28gbGFyZ2UiKSwgcXVvdGUgKGJhZF9udW0pKTsKKysJICAgICAgZWxzZSBpZiAob3BlcmF0aW5nX21vZGUgPT0gY2hhcmFjdGVyX21vZGUpCisrCQllcnJvciAoMCwgMCwKKysJCSAgICAgICBfKCJjaGFyYWN0ZXIgb2Zmc2V0ICVzIGlzIHRvbyBsYXJnZSIpLCBxdW90ZSAoYmFkX251bSkpOworIAkgICAgICBlbHNlCisgCQllcnJvciAoMCwgMCwKKyAJCSAgICAgICBfKCJmaWVsZCBudW1iZXIgJXMgaXMgdG9vIGxhcmdlIiksIHF1b3RlIChiYWRfbnVtKSk7CitAQCAtNDc3LDcgKzU1OSw3IEBACisgCSAgZmllbGRzdHIrKzsKKyAJfQorICAgICAgIGVsc2UKKy0JRkFUQUxfRVJST1IgKF8oImludmFsaWQgYnl0ZSBvciBmaWVsZCBsaXN0IikpOworKwlGQVRBTF9FUlJPUiAoXygiaW52YWxpZCBieXRlLCBjaGFyYWN0ZXIgb3IgZmllbGQgbGlzdCIpKTsKKyAgICAgfQorIAorICAgbWF4X3JhbmdlX2VuZHBvaW50ID0gMDsKK0BAIC01NzAsNiArNjUyLDYzIEBACisgICAgIH0KKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworKy8qIFRoaXMgZnVuY3Rpb24gaXMgaW4gdXNlIGZvciB0aGUgZm9sbG93aW5nIGNhc2UuCisrCisrICAgMS4gUmVhZCBmcm9tIHRoZSBzdHJlYW0gU1RSRUFNLCBwcmludGluZyB0byBzdGFuZGFyZCBvdXRwdXQgYW55IHNlbGVjdGVkCisrICAgY2hhcmFjdGVycy4gCisrCisrICAgMi4gUmVhZCBmcm9tIHN0cmVhbSBTVFJFQU0sIHByaW50aW5nIHRvIHN0YW5kYXJkIG91dHB1dCBhbnkgc2VsZWN0ZWQgYnl0ZXMsCisrICAgd2l0aG91dCBzcGxpdHRpbmcgbXVsdGlieXRlIGNoYXJhY3RlcnMuICAqLworKyAKKytzdGF0aWMgdm9pZAorK2N1dF9jaGFyYWN0ZXJzX29yX2N1dF9ieXRlc19ub19zcGxpdCAoRklMRSAqc3RyZWFtKQorK3sKKysgIGludCBpZHg7CQkvKiBudW1iZXIgb2YgYnl0ZXMgb3IgY2hhcmFjdGVycyBpbiB0aGUgbGluZSBzbyBmYXIuICovCisrICBjaGFyIGJ1ZltNQl9MRU5fTUFYICsgQlVGU0laXTsgIC8qIEZvciBzcG9vbGluZyBhIHJlYWQgYnl0ZSBzZXF1ZW5jZS4gKi8KKysgIGNoYXIgKmJ1ZnBvczsJCS8qIE5leHQgcmVhZCBwb3NpdGlvbiBvZiBCVUYuICovCisrICBzaXplX3QgYnVmbGVuOwkvKiBUaGUgbGVuZ3RoIG9mIHRoZSBieXRlIHNlcXVlbmNlIGluIGJ1Zi4gKi8KKysgIHdpbnRfdCB3YzsJCS8qIEEgZ290dGVuIHdpZGUgY2hhcmFjdGVyLiAqLworKyAgc2l6ZV90IG1ibGVuZ3RoOwkvKiBUaGUgYnl0ZSBzaXplIG9mIGEgbXVsdGlieXRlIGNoYXJhY3RlciB3aGljaCBzaG93cworKwkJCSAgIGFzIHNhbWUgY2hhcmFjdGVyIGFzIFdDLiAqLworKyAgbWJzdGF0ZV90IHN0YXRlOwkvKiBTdGF0ZSBvZiB0aGUgc3RyZWFtLiAqLworKyAgaW50IGNvbnZmYWlsOwkJLyogMSwgd2hlbiBjb252ZXJzaW9uIGlzIGZhaWxlZC4gT3RoZXJ3aXNlIDAuICovCisrCisrICBpZHggPSAwOworKyAgYnVmbGVuID0gMDsKKysgIGJ1ZnBvcyA9IGJ1ZjsKKysgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIFJFRklMTF9CVUZGRVIgKGJ1ZiwgYnVmcG9zLCBidWZsZW4sIHN0cmVhbSk7CisrCisrICAgICAgR0VUX05FWFRfV0NfRlJPTV9CVUZGRVIgKHdjLCBidWZwb3MsIGJ1ZmxlbiwgbWJsZW5ndGgsIHN0YXRlLCBjb252ZmFpbCk7CisrCisrICAgICAgaWYgKHdjID09IFdFT0YpCisrCXsKKysJICBpZiAoaWR4ID4gMCkKKysJICAgIHB1dGNoYXIgKCdcbicpOworKwkgIGJyZWFrOworKwl9CisrICAgICAgZWxzZSBpZiAod2MgPT0gTCdcbicpCisrCXsKKysJICBwdXRjaGFyICgnXG4nKTsKKysJICBpZHggPSAwOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgaWR4ICs9IChvcGVyYXRpbmdfbW9kZSA9PSBieXRlX21vZGUpID8gbWJsZW5ndGggOiAxOworKwkgIGlmIChwcmludF9rdGggKGlkeCwgTlVMTCkpCisrCSAgICBmd3JpdGUgKGJ1ZnBvcywgbWJsZW5ndGgsIHNpemVvZihjaGFyKSwgc3Rkb3V0KTsKKysJfQorKworKyAgICAgIGJ1ZmxlbiAtPSBtYmxlbmd0aDsKKysgICAgICBidWZwb3MgKz0gbWJsZW5ndGg7CisrICAgIH0KKyt9CisrI2VuZGlmCisrCQkgICAKKyAvKiBSZWFkIGZyb20gc3RyZWFtIFNUUkVBTSwgcHJpbnRpbmcgdG8gc3RhbmRhcmQgb3V0cHV0IGFueSBzZWxlY3RlZCBmaWVsZHMuICAqLworIAorIHN0YXRpYyB2b2lkCitAQCAtNjkyLDEzICs4MzEsMTkyIEBACisgICAgIH0KKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyB2b2lkCisrY3V0X2ZpZWxkc19tYiAoRklMRSAqc3RyZWFtKQorK3sKKysgIGludCBjOworKyAgdW5zaWduZWQgaW50IGZpZWxkX2lkeDsKKysgIGludCBmb3VuZF9hbnlfc2VsZWN0ZWRfZmllbGQ7CisrICBpbnQgYnVmZmVyX2ZpcnN0X2ZpZWxkOworKyAgaW50IGVtcHR5X2lucHV0OworKyAgY2hhciBidWZbTUJfTEVOX01BWCArIEJVRlNJWl07ICAvKiBGb3Igc3Bvb2xpbmcgYSByZWFkIGJ5dGUgc2VxdWVuY2UuICovCisrICBjaGFyICpidWZwb3M7CQkvKiBOZXh0IHJlYWQgcG9zaXRpb24gb2YgQlVGLiAqLworKyAgc2l6ZV90IGJ1ZmxlbjsJLyogVGhlIGxlbmd0aCBvZiB0aGUgYnl0ZSBzZXF1ZW5jZSBpbiBidWYuICovCisrICB3aW50X3Qgd2MgPSAwOwkvKiBBIGdvdHRlbiB3aWRlIGNoYXJhY3Rlci4gKi8KKysgIHNpemVfdCBtYmxlbmd0aDsJLyogVGhlIGJ5dGUgc2l6ZSBvZiBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIgd2hpY2ggc2hvd3MKKysJCQkgICBhcyBzYW1lIGNoYXJhY3RlciBhcyBXQy4gKi8KKysgIG1ic3RhdGVfdCBzdGF0ZTsJLyogU3RhdGUgb2YgdGhlIHN0cmVhbS4gKi8KKysgIGludCBjb252ZmFpbDsJCS8qIDEsIHdoZW4gY29udmVyc2lvbiBpcyBmYWlsZWQuIE90aGVyd2lzZSAwLiAqLworKworKyAgZm91bmRfYW55X3NlbGVjdGVkX2ZpZWxkID0gMDsKKysgIGZpZWxkX2lkeCA9IDE7CisrICBidWZwb3MgPSBidWY7CisrICBidWZsZW4gPSAwOworKyAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysKKysgIGMgPSBnZXRjIChzdHJlYW0pOworKyAgZW1wdHlfaW5wdXQgPSAoYyA9PSBFT0YpOworKyAgaWYgKGMgIT0gRU9GKQorKyAgICB1bmdldGMgKGMsIHN0cmVhbSk7CisrICBlbHNlCisrICAgIHdjID0gV0VPRjsKKysKKysgIC8qIFRvIHN1cHBvcnQgdGhlIHNlbWFudGljcyBvZiB0aGUgLXMgZmxhZywgd2UgbWF5IGhhdmUgdG8gYnVmZmVyCisrICAgICBhbGwgb2YgdGhlIGZpcnN0IGZpZWxkIHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGlzIGBkZWxpbWl0ZWQuJworKyAgICAgQnV0IHRoYXQgaXMgdW5uZWNlc3NhcnkgaWYgYWxsIG5vbi1kZWxpbWl0ZWQgbGluZXMgbXVzdCBiZSBwcmludGVkCisrICAgICBhbmQgdGhlIGZpcnN0IGZpZWxkIGhhcyBiZWVuIHNlbGVjdGVkLCBvciBpZiBub24tZGVsaW1pdGVkIGxpbmVzCisrICAgICBtdXN0IGJlIHN1cHByZXNzZWQgYW5kIHRoZSBmaXJzdCBmaWVsZCBoYXMgKm5vdCogYmVlbiBzZWxlY3RlZC4KKysgICAgIFRoYXQgaXMgYmVjYXVzZSBhIG5vbi1kZWxpbWl0ZWQgbGluZSBoYXMgZXhhY3RseSBvbmUgZmllbGQuICAqLworKyAgYnVmZmVyX2ZpcnN0X2ZpZWxkID0gKHN1cHByZXNzX25vbl9kZWxpbWl0ZWQgXiAhcHJpbnRfa3RoICgxLCBOVUxMKSk7CisrCisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIGlmIChmaWVsZF9pZHggPT0gMSAmJiBidWZmZXJfZmlyc3RfZmllbGQpCisrCXsKKysJICBpbnQgbGVuID0gMDsKKysKKysJICB3aGlsZSAoMSkKKysJICAgIHsKKysJICAgICAgUkVGSUxMX0JVRkZFUiAoYnVmLCBidWZwb3MsIGJ1Zmxlbiwgc3RyZWFtKTsKKysKKysJICAgICAgR0VUX05FWFRfV0NfRlJPTV9CVUZGRVIKKysJCSh3YywgYnVmcG9zLCBidWZsZW4sIG1ibGVuZ3RoLCBzdGF0ZSwgY29udmZhaWwpOworKworKwkgICAgICBpZiAod2MgPT0gV0VPRikKKysJCWJyZWFrOworKworKwkgICAgICBmaWVsZF8xX2J1ZmZlciA9IHhyZWFsbG9jIChmaWVsZF8xX2J1ZmZlciwgbGVuICsgbWJsZW5ndGgpOworKwkgICAgICBtZW1jcHkgKGZpZWxkXzFfYnVmZmVyICsgbGVuLCBidWZwb3MsIG1ibGVuZ3RoKTsKKysJICAgICAgbGVuICs9IG1ibGVuZ3RoOworKwkgICAgICBidWZsZW4gLT0gbWJsZW5ndGg7CisrCSAgICAgIGJ1ZnBvcyArPSBtYmxlbmd0aDsKKysKKysJICAgICAgaWYgKCFjb252ZmFpbCAmJiAod2MgPT0gTCdcbicgfHwgd2MgPT0gd2NkZWxpbSkpCisrCQlicmVhazsKKysJICAgIH0KKysKKysJICBpZiAod2MgPT0gV0VPRikKKysJICAgIGJyZWFrOworKworKwkgIC8qIElmIHRoZSBmaXJzdCBmaWVsZCBleHRlbmRzIHRvIHRoZSBlbmQgb2YgbGluZSAoaXQgaXMgbm90CisrCSAgICAgZGVsaW1pdGVkKSBhbmQgd2UgYXJlIHByaW50aW5nIGFsbCBub24tZGVsaW1pdGVkIGxpbmVzLAorKwkgICAgIHByaW50IHRoaXMgb25lLiAgKi8KKysJICBpZiAoY29udmZhaWwgfHwgKCFjb252ZmFpbCAmJiB3YyAhPSB3Y2RlbGltKSkKKysJICAgIHsKKysJICAgICAgaWYgKHN1cHByZXNzX25vbl9kZWxpbWl0ZWQpCisrCQl7CisrCQkgIC8qIEVtcHR5LgkqLworKwkJfQorKwkgICAgICBlbHNlCisrCQl7CisrCQkgIGZ3cml0ZSAoZmllbGRfMV9idWZmZXIsIHNpemVvZiAoY2hhciksIGxlbiwgc3Rkb3V0KTsKKysJCSAgLyogTWFrZSBzdXJlIHRoZSBvdXRwdXQgbGluZSBpcyBuZXdsaW5lIHRlcm1pbmF0ZWQuICAqLworKwkJICBpZiAoY29udmZhaWwgfHwgKCFjb252ZmFpbCAmJiB3YyAhPSBMJ1xuJykpCisrCQkgICAgcHV0Y2hhciAoJ1xuJyk7CisrCQl9CisrCSAgICAgIGNvbnRpbnVlOworKwkgICAgfQorKworKwkgIGlmIChwcmludF9rdGggKDEsIE5VTEwpKQorKwkgICAgeworKwkgICAgICAvKiBQcmludCB0aGUgZmllbGQsIGJ1dCBub3QgdGhlIHRyYWlsaW5nIGRlbGltaXRlci4gICovCisrCSAgICAgIGZ3cml0ZSAoZmllbGRfMV9idWZmZXIsIHNpemVvZiAoY2hhciksIGxlbiAtIDEsIHN0ZG91dCk7CisrCSAgICAgIGZvdW5kX2FueV9zZWxlY3RlZF9maWVsZCA9IDE7CisrCSAgICB9CisrCSAgKytmaWVsZF9pZHg7CisrCX0KKysKKysgICAgICBpZiAod2MgIT0gV0VPRikKKysJeworKwkgIGlmIChwcmludF9rdGggKGZpZWxkX2lkeCwgTlVMTCkpCisrCSAgICB7CisrCSAgICAgIGlmIChmb3VuZF9hbnlfc2VsZWN0ZWRfZmllbGQpCisrCQl7CisrCQkgIGZ3cml0ZSAob3V0cHV0X2RlbGltaXRlcl9zdHJpbmcsIHNpemVvZiAoY2hhciksCisrCQkJICBvdXRwdXRfZGVsaW1pdGVyX2xlbmd0aCwgc3Rkb3V0KTsKKysJCX0KKysJICAgICAgZm91bmRfYW55X3NlbGVjdGVkX2ZpZWxkID0gMTsKKysJICAgIH0KKysKKysJICB3aGlsZSAoMSkKKysJICAgIHsKKysJICAgICAgUkVGSUxMX0JVRkZFUiAoYnVmLCBidWZwb3MsIGJ1Zmxlbiwgc3RyZWFtKTsKKysKKysJICAgICAgR0VUX05FWFRfV0NfRlJPTV9CVUZGRVIKKysJCSh3YywgYnVmcG9zLCBidWZsZW4sIG1ibGVuZ3RoLCBzdGF0ZSwgY29udmZhaWwpOworKworKwkgICAgICBpZiAod2MgPT0gV0VPRikKKysJCWJyZWFrOworKwkgICAgICBlbHNlIGlmICghY29udmZhaWwgJiYgKHdjID09IHdjZGVsaW0gfHwgd2MgPT0gTCdcbicpKQorKwkJeworKwkJICBidWZsZW4gLT0gbWJsZW5ndGg7CisrCQkgIGJ1ZnBvcyArPSBtYmxlbmd0aDsKKysJCSAgYnJlYWs7CisrCQl9CisrCisrCSAgICAgIGlmIChwcmludF9rdGggKGZpZWxkX2lkeCwgTlVMTCkpCisrCQlmd3JpdGUgKGJ1ZnBvcywgbWJsZW5ndGgsIHNpemVvZihjaGFyKSwgc3Rkb3V0KTsKKysKKysJICAgICAgYnVmbGVuIC09IG1ibGVuZ3RoOworKwkgICAgICBidWZwb3MgKz0gbWJsZW5ndGg7CisrCSAgICB9CisrCX0KKysKKysgICAgICBpZiAoKCFjb252ZmFpbCB8fCB3YyA9PSBMJ1xuJykgJiYgYnVmbGVuIDwgMSkKKysJd2MgPSBXRU9GOworKworKyAgICAgIGlmICghY29udmZhaWwgJiYgd2MgPT0gd2NkZWxpbSkKKysJKytmaWVsZF9pZHg7CisrICAgICAgZWxzZSBpZiAod2MgPT0gV0VPRiB8fCAoIWNvbnZmYWlsICYmIHdjID09IEwnXG4nKSkKKysJeworKwkgIGlmIChmb3VuZF9hbnlfc2VsZWN0ZWRfZmllbGQKKysJICAgICAgfHwgKCFlbXB0eV9pbnB1dCAmJiAhKHN1cHByZXNzX25vbl9kZWxpbWl0ZWQgJiYgZmllbGRfaWR4ID09IDEpKSkKKysJICAgIHB1dGNoYXIgKCdcbicpOworKwkgIGlmICh3YyA9PSBXRU9GKQorKwkgICAgYnJlYWs7CisrCSAgZmllbGRfaWR4ID0gMTsKKysJICBmb3VuZF9hbnlfc2VsZWN0ZWRfZmllbGQgPSAwOworKwl9CisrICAgIH0KKyt9CisrI2VuZGlmCisrCisgc3RhdGljIHZvaWQKKyBjdXRfc3RyZWFtIChGSUxFICpzdHJlYW0pCisgeworLSAgaWYgKG9wZXJhdGluZ19tb2RlID09IGJ5dGVfbW9kZSkKKy0gICAgY3V0X2J5dGVzIChzdHJlYW0pOworKyNpZiBIQVZFX01CUlRPV0MKKysgIGlmIChNQl9DVVJfTUFYID4gMSAmJiAhZm9yY2Vfc2luZ2xlYnl0ZV9tb2RlKQorKyAgICB7CisrICAgICAgc3dpdGNoIChvcGVyYXRpbmdfbW9kZSkKKysJeworKwljYXNlIGJ5dGVfbW9kZToKKysJICBpZiAoYnl0ZV9tb2RlX2NoYXJhY3Rlcl9hd2FyZSkKKysJICAgIGN1dF9jaGFyYWN0ZXJzX29yX2N1dF9ieXRlc19ub19zcGxpdCAoc3RyZWFtKTsKKysJICBlbHNlCisrCSAgICBjdXRfYnl0ZXMgKHN0cmVhbSk7CisrCSAgYnJlYWs7CisrCisrCWNhc2UgY2hhcmFjdGVyX21vZGU6CisrCSAgY3V0X2NoYXJhY3RlcnNfb3JfY3V0X2J5dGVzX25vX3NwbGl0IChzdHJlYW0pOworKwkgIGJyZWFrOworKworKwljYXNlIGZpZWxkX21vZGU6CisrCSAgY3V0X2ZpZWxkc19tYiAoc3RyZWFtKTsKKysJICBicmVhazsKKysKKysJZGVmYXVsdDoKKysJICBhYm9ydCAoKTsKKysJfQorKyAgICB9CisgICBlbHNlCistICAgIGN1dF9maWVsZHMgKHN0cmVhbSk7CisrI2VuZGlmCisrICAgIHsKKysgICAgICBpZiAob3BlcmF0aW5nX21vZGUgPT0gZmllbGRfbW9kZSkKKysJY3V0X2ZpZWxkcyAoc3RyZWFtKTsKKysgICAgICBlbHNlCisrCWN1dF9ieXRlcyAoc3RyZWFtKTsKKysgICAgfQorIH0KKyAKKyAvKiBQcm9jZXNzIGZpbGUgRklMRSB0byBzdGFuZGFyZCBvdXRwdXQuCitAQCAtNzQ4LDYgKzEwNjYsOCBAQAorICAgYm9vbCBvazsKKyAgIGJvb2wgZGVsaW1fc3BlY2lmaWVkID0gZmFsc2U7CisgICBjaGFyICpzcGVjX2xpc3Rfc3RyaW5nIElGX0xJTlQoPSBOVUxMKTsKKysgIGNoYXIgbWJkZWxpbVtNQl9MRU5fTUFYICsgMV07CisrICBzaXplX3QgZGVsaW1sZW4gPSAwOworIAorICAgaW5pdGlhbGl6ZV9tYWluICgmYXJnYywgJmFyZ3YpOworICAgcHJvZ3JhbV9uYW1lID0gYXJndlswXTsKK0BAIC03NzAsNyArMTA5MCw2IEBACisgICAgICAgc3dpdGNoIChvcHRjKQorIAl7CisgCWNhc2UgJ2InOgorLQljYXNlICdjJzoKKyAJICAvKiBCdWlsZCB0aGUgYnl0ZSBsaXN0LiAqLworIAkgIGlmIChvcGVyYXRpbmdfbW9kZSAhPSB1bmRlZmluZWRfbW9kZSkKKyAJICAgIEZBVEFMX0VSUk9SIChfKCJvbmx5IG9uZSB0eXBlIG9mIGxpc3QgbWF5IGJlIHNwZWNpZmllZCIpKTsKK0BAIC03NzgsNiArMTA5NywxNCBAQAorIAkgIHNwZWNfbGlzdF9zdHJpbmcgPSBvcHRhcmc7CisgCSAgYnJlYWs7CisgCisrCWNhc2UgJ2MnOgorKwkgIC8qIEJ1aWxkIHRoZSBjaGFyYWN0ZXIgbGlzdC4gKi8KKysJICBpZiAob3BlcmF0aW5nX21vZGUgIT0gdW5kZWZpbmVkX21vZGUpCisrCSAgICBGQVRBTF9FUlJPUiAoXygib25seSBvbmUgdHlwZSBvZiBsaXN0IG1heSBiZSBzcGVjaWZpZWQiKSk7CisrCSAgb3BlcmF0aW5nX21vZGUgPSBjaGFyYWN0ZXJfbW9kZTsKKysJICBzcGVjX2xpc3Rfc3RyaW5nID0gb3B0YXJnOworKwkgIGJyZWFrOworKworIAljYXNlICdmJzoKKyAJICAvKiBCdWlsZCB0aGUgZmllbGQgbGlzdC4gKi8KKyAJICBpZiAob3BlcmF0aW5nX21vZGUgIT0gdW5kZWZpbmVkX21vZGUpCitAQCAtNzg5LDEwICsxMTE2LDM1IEBACisgCWNhc2UgJ2QnOgorIAkgIC8qIE5ldyBkZWxpbWl0ZXIuICovCisgCSAgLyogSW50ZXJwcmV0IC1kICcnIHRvIG1lYW4gYHVzZSB0aGUgTlVMIGJ5dGUgYXMgdGhlIGRlbGltaXRlci4nICAqLworLQkgIGlmIChvcHRhcmdbMF0gIT0gJ1wwJyAmJiBvcHRhcmdbMV0gIT0gJ1wwJykKKy0JICAgIEZBVEFMX0VSUk9SIChfKCJ0aGUgZGVsaW1pdGVyIG11c3QgYmUgYSBzaW5nbGUgY2hhcmFjdGVyIikpOworLQkgIGRlbGltID0gb3B0YXJnWzBdOworLQkgIGRlbGltX3NwZWNpZmllZCA9IHRydWU7CisrI2lmIEhBVkVfTUJSVE9XQworKwkgICAgeworKwkgICAgICBpZihNQl9DVVJfTUFYID4gMSkKKysJCXsKKysJCSAgbWJzdGF0ZV90IHN0YXRlOworKworKwkJICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBkZWxpbWxlbiA9IG1icnRvd2MgKCZ3Y2RlbGltLCBvcHRhcmcsIHN0cm5sZW4ob3B0YXJnLCBNQl9MRU5fTUFYKSwgJnN0YXRlKTsKKysKKysJCSAgaWYgKGRlbGltbGVuID09IChzaXplX3QpLTEgfHwgZGVsaW1sZW4gPT0gKHNpemVfdCktMikKKysJCSAgICArK2ZvcmNlX3NpbmdsZWJ5dGVfbW9kZTsKKysJCSAgZWxzZQorKwkJICAgIHsKKysJCSAgICAgIGRlbGltbGVuID0gKGRlbGltbGVuIDwgMSkgPyAxIDogZGVsaW1sZW47CisrCQkgICAgICBpZiAod2NkZWxpbSAhPSBMJ1wwJyAmJiAqKG9wdGFyZyArIGRlbGltbGVuKSAhPSAnXDAnKQorKwkJCUZBVEFMX0VSUk9SIChfKCJ0aGUgZGVsaW1pdGVyIG11c3QgYmUgYSBzaW5nbGUgY2hhcmFjdGVyIikpOworKwkJICAgICAgbWVtY3B5IChtYmRlbGltLCBvcHRhcmcsIGRlbGltbGVuKTsKKysJCSAgICB9CisrCQl9CisrCisrCSAgICAgIGlmIChNQl9DVVJfTUFYIDw9IDEgfHwgZm9yY2Vfc2luZ2xlYnl0ZV9tb2RlKQorKyNlbmRpZgorKwkJeworKwkJICBpZiAob3B0YXJnWzBdICE9ICdcMCcgJiYgb3B0YXJnWzFdICE9ICdcMCcpCisrCQkgICAgRkFUQUxfRVJST1IgKF8oInRoZSBkZWxpbWl0ZXIgbXVzdCBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIiKSk7CisrCQkgIGRlbGltID0gKHVuc2lnbmVkIGNoYXIpIG9wdGFyZ1swXTsKKysJCX0KKysJICAgIGRlbGltX3NwZWNpZmllZCA9IHRydWU7CisrCSAgfQorIAkgIGJyZWFrOworIAorIAljYXNlIE9VVFBVVF9ERUxJTUlURVJfT1BUSU9OOgorQEAgLTgwNSw2ICsxMTU3LDcgQEAKKyAJICBicmVhazsKKyAKKyAJY2FzZSAnbic6CisrCSAgYnl0ZV9tb2RlX2NoYXJhY3Rlcl9hd2FyZSA9IDE7CisgCSAgYnJlYWs7CisgCisgCWNhc2UgJ3MnOgorQEAgLTgyNyw3ICsxMTgwLDcgQEAKKyAgIGlmIChvcGVyYXRpbmdfbW9kZSA9PSB1bmRlZmluZWRfbW9kZSkKKyAgICAgRkFUQUxfRVJST1IgKF8oInlvdSBtdXN0IHNwZWNpZnkgYSBsaXN0IG9mIGJ5dGVzLCBjaGFyYWN0ZXJzLCBvciBmaWVsZHMiKSk7CisgCistICBpZiAoZGVsaW0gIT0gJ1wwJyAmJiBvcGVyYXRpbmdfbW9kZSAhPSBmaWVsZF9tb2RlKQorKyAgaWYgKGRlbGltX3NwZWNpZmllZCAmJiBvcGVyYXRpbmdfbW9kZSAhPSBmaWVsZF9tb2RlKQorICAgICBGQVRBTF9FUlJPUiAoXygiYW4gaW5wdXQgZGVsaW1pdGVyIG1heSBiZSBzcGVjaWZpZWQgb25seVwKKyAgd2hlbiBvcGVyYXRpbmcgb24gZmllbGRzIikpOworIAorQEAgLTg1NCwxNSArMTIwNywzNCBAQAorICAgICB9CisgCisgICBpZiAoIWRlbGltX3NwZWNpZmllZCkKKy0gICAgZGVsaW0gPSAnXHQnOworKyAgICB7CisrICAgICAgZGVsaW0gPSAnXHQnOworKyNpZmRlZiBIQVZFX01CUlRPV0MKKysgICAgICB3Y2RlbGltID0gTCdcdCc7CisrICAgICAgbWJkZWxpbVswXSA9ICdcdCc7CisrICAgICAgbWJkZWxpbVsxXSA9ICdcMCc7CisrICAgICAgZGVsaW1sZW4gPSAxOworKyNlbmRpZgorKyAgICB9CisgCisgICBpZiAob3V0cHV0X2RlbGltaXRlcl9zdHJpbmcgPT0gTlVMTCkKKyAgICAgeworLSAgICAgIHN0YXRpYyBjaGFyIGR1bW15WzJdOworLSAgICAgIGR1bW15WzBdID0gZGVsaW07CistICAgICAgZHVtbXlbMV0gPSAnXDAnOworLSAgICAgIG91dHB1dF9kZWxpbWl0ZXJfc3RyaW5nID0gZHVtbXk7CistICAgICAgb3V0cHV0X2RlbGltaXRlcl9sZW5ndGggPSAxOworKyNpZmRlZiBIQVZFX01CUlRPV0MKKysgICAgICBpZiAoTUJfQ1VSX01BWCA+IDEgJiYgIWZvcmNlX3NpbmdsZWJ5dGVfbW9kZSkKKysJeworKwkgIG91dHB1dF9kZWxpbWl0ZXJfc3RyaW5nID0geHN0cmR1cChtYmRlbGltKTsKKysJICBvdXRwdXRfZGVsaW1pdGVyX2xlbmd0aCA9IGRlbGltbGVuOworKwl9CisrCisrICAgICAgaWYgKE1CX0NVUl9NQVggPD0gMSB8fCBmb3JjZV9zaW5nbGVieXRlX21vZGUpCisrI2VuZGlmCisrCXsKKysJICBzdGF0aWMgY2hhciBkdW1teVsyXTsgCisrCSAgZHVtbXlbMF0gPSBkZWxpbTsKKysJICBkdW1teVsxXSA9ICdcMCc7CisrCSAgb3V0cHV0X2RlbGltaXRlcl9zdHJpbmcgPSBkdW1teTsKKysJICBvdXRwdXRfZGVsaW1pdGVyX2xlbmd0aCA9IDE7CisrCX0KKyAgICAgfQorIAorICAgaWYgKG9wdGluZCA9PSBhcmdjKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtbHMteC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWxzLXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJhODc0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWxzLXgucGF0Y2gKQEAgLTAsMCArMSwxMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGVnYWN5IHZlcnNpb25dCisKK1RoaXMgcGF0Y2ggd2FzIGltcG9ydGVkIGZyb20gdGhlIEZlZG9yYSBDb3JlIDggY29yZXV0aWxzLTYuOS05IHBhY2thZ2UuCisKK1RoZSBwYWNrYWdlIGlzIHN0YXRlZCBhcyBiZWluZyBMaWNlbnNlZCBhcyBHUEx2MisuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworLS0tIGNvcmV1dGlscy02Ljkvc3JjL2xzLmMubHMteAkyMDA3LTA2LTEzIDE0OjI3OjM2LjAwMDAwMDAwMCArMDEwMAorKysrIGNvcmV1dGlscy02Ljkvc3JjL2xzLmMJMjAwNy0wNi0xMyAxNDoyODo0Mi4wMDAwMDAwMDAgKzAxMDAKK0BAIC00MTUxLDE2ICs0MTUxLDE2IEBACisgICBzaXplX3QgcG9zID0gMDsKKyAgIHNpemVfdCBjb2xzID0gY2FsY3VsYXRlX2NvbHVtbnMgKGZhbHNlKTsKKyAgIHN0cnVjdCBjb2x1bW5faW5mbyBjb25zdCAqbGluZV9mbXQgPSAmY29sdW1uX2luZm9bY29scyAtIDFdOworLSAgc2l6ZV90IG5hbWVfbGVuZ3RoID0gbGVuZ3RoX29mX2ZpbGVfbmFtZV9hbmRfZnJpbGxzIChjd2RfZmlsZSk7CisrICBzdHJ1Y3QgZmlsZWluZm8gY29uc3QgKmYgPSBzb3J0ZWRfZmlsZVswXTsKKysgIHNpemVfdCBuYW1lX2xlbmd0aCA9IGxlbmd0aF9vZl9maWxlX25hbWVfYW5kX2ZyaWxscyAoZik7CisgICBzaXplX3QgbWF4X25hbWVfbGVuZ3RoID0gbGluZV9mbXQtPmNvbF9hcnJbMF07CisgCisgICAvKiBQcmludCBmaXJzdCBlbnRyeS4gICovCistICBwcmludF9maWxlX25hbWVfYW5kX2ZyaWxscyAoY3dkX2ZpbGUpOworKyAgcHJpbnRfZmlsZV9uYW1lX2FuZF9mcmlsbHMgKGYpOworIAorICAgLyogTm93IHRoZSByZXN0LiAgKi8KKyAgIGZvciAoZmlsZXNubyA9IDE7IGZpbGVzbm8gPCBjd2Rfbl91c2VkOyArK2ZpbGVzbm8pCisgICAgIHsKKy0gICAgICBzdHJ1Y3QgZmlsZWluZm8gY29uc3QgKmY7CisgICAgICAgc2l6ZV90IGNvbCA9IGZpbGVzbm8gJSBjb2xzOworIAorICAgICAgIGlmIChjb2wgPT0gMCkKKy0tLSBjb3JldXRpbHMtNi45L3Rlc3RzL2xzL01ha2VmaWxlLmFtLmxzLXgJMjAwNy0wMy0xOCAyMTozNjo0My4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb3JldXRpbHMtNi45L3Rlc3RzL2xzL01ha2VmaWxlLmFtCTIwMDctMDYtMTMgMTQ6Mjg6NDIuMDAwMDAwMDAwICswMTAwCitAQCAtMjQsNyArMjQsNyBAQAorICAgc3RhdC1kdHlwZSBcCisgICBpbm9kZSBkYW5nbGUgZmlsZS10eXBlIHJlY3Vyc2l2ZSBkaXJlZCBpbmZsb29wIFwKKyAgIHJ0LTEgdGltZS0xIHN5bWxpbmstc2xhc2ggZm9sbG93LXNsaW5rIG5vLWFyZyBtLW9wdGlvbiBcCistICBzdGF0LXZzLWRpcmVudAorKyAgc3RhdC12cy1kaXJlbnQgeC1vcHRpb24KKyAKKyBFWFRSQV9ESVNUID0gJChURVNUUykKKyBURVNUU19FTlZJUk9OTUVOVCA9IFwKKy0tLSAvZGV2L251bGwJMjAwNy0wNi0xMyAwODo0Mzo1MS45OTMyNjMzODIgKzAxMDAKKysrKyBjb3JldXRpbHMtNi45L3Rlc3RzL2xzL3gtb3B0aW9uCTIwMDctMDYtMTMgMTQ6Mjg6NDIuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDU5IEBACisrIyEvYmluL3NoCisrIyBFeGVyY2lzZSB0aGUgLXggb3B0aW9uLgorKworKyMgQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKysjIDAyMTEwLTEzMDEsIFVTQS4KKysKKytpZiB0ZXN0ICIkVkVSQk9TRSIgPSB5ZXM7IHRoZW4KKysgIHNldCAteAorKyAgbHMgLS12ZXJzaW9uCisrZmkKKysKKysuICRzcmNkaXIvLi4vZW52dmFyLWNoZWNrCisrLiAkc3JjZGlyLy4uL2xhbmctZGVmYXVsdAorKworK3B3ZD1gcHdkYAorK3QwPWBlY2hvICIkMCJ8c2VkICdzLC4qLywsJ2AudG1wOyB0bXA9JHQwLyQkCisrdHJhcCAnc3RhdHVzPSQ/OyBjZCAiJHB3ZCIgJiYgY2htb2QgLVIgdStyd3ggJHQwICYmIHJtIC1yZiAkdDAgJiYgZXhpdCAkc3RhdHVzJyAwCisrdHJhcCAnKGV4aXQgJD8pOyBleGl0ICQ/JyAxIDIgMTMgMTUKKysKKytmcmFtZXdvcmtfZmFpbHVyZT0wCisrbWtkaXIgLXAgJHRtcCB8fCBmcmFtZXdvcmtfZmFpbHVyZT0xCisrY2QgJHRtcCB8fCBmcmFtZXdvcmtfZmFpbHVyZT0xCisrbWtkaXIgc3ViZGlyIHx8IGZyYW1ld29ya19mYWlsdXJlPTEKKyt0b3VjaCBzdWJkaXIvYiB8fCBmcmFtZXdvcmtfZmFpbHVyZT0xCisrdG91Y2ggc3ViZGlyL2EgfHwgZnJhbWV3b3JrX2ZhaWx1cmU9MQorKworK2lmIHRlc3QgJGZyYW1ld29ya19mYWlsdXJlID0gMTsgdGhlbgorKyAgZWNobyAiJDA6IGZhaWx1cmUgaW4gdGVzdGluZyBmcmFtZXdvcmsiIDE+JjIKKysgIChleGl0IDEpOyBleGl0IDEKKytmaQorKworK2ZhaWw9MAorKworKyMgQ29yZXV0aWxzIDYuOCBhbmQgNi45IHdvdWxkIG91dHB1dCB0aGlzIGluIHRoZSB3cm9uZyBvcmRlci4KKytscyAteCBzdWJkaXIgPiBvdXQgfHwgZmFpbD0xCisrbHMgLXJ4IHN1YmRpciA+PiBvdXQgfHwgZmFpbD0xCisrY2F0IDw8XEVPRiA+IGV4cCB8fCBmYWlsPTEKKythICBiCisrYiAgYQorK0VPRgorKworK2NtcCBvdXQgZXhwIHx8IGZhaWw9MQorK3Rlc3QgJGZhaWwgPSAxICYmIGRpZmYgb3V0IGV4cCAyPiAvZGV2L251bGwKKysKKysoZXhpdCAkZmFpbCk7IGV4aXQgJGZhaWwKKy0tLSBjb3JldXRpbHMtNi45L05FV1MubHMteAkyMDA3LTAzLTIyIDIxOjE5OjQ1LjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjkvTkVXUwkyMDA3LTA2LTEzIDE0OjI4OjQyLjAwMDAwMDAwMCArMDEwMAorQEAgLTEzLDYgKzEzLDExIEBACisgICBVc2luZyBwciAtbSAtcyAoaS5lLiBtZXJnaW5nIGZpbGVzLCB3aXRoIFRBQiBhcyB0aGUgb3V0cHV0IHNlcGFyYXRvcikKKyAgIG5vIGxvbmdlciBpbnNlcnRzIGV4dHJhbmVvdXMgc3BhY2VzIGJldHdlZW4gb3V0cHV0IGNvbHVtbnMuCisgCisrKiogQnVnIGZpeGVzCisrCisrICBscyAteCBESVIgd291bGQgc29tZXRpbWVzIG91dHB1dCB0aGUgd3Jvbmcgc3RyaW5nIGluIHBsYWNlIG9mIHRoZQorKyAgZmlyc3QgZW50cnkuICBbaW50cm9kdWNlZCBpbiBjb3JldXRpbHMtNi44XQorKworIAorICogTm90ZXdvcnRoeSBjaGFuZ2VzIGluIHJlbGVhc2UgNi44ICgyMDA3LTAyLTI0KSBbbm90LXVuc3RhYmxlXQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtb3ZlcmZsb3cucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1vdmVyZmxvdy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODA3NGMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtb3ZlcmZsb3cucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsZWdhY3kgdmVyc2lvbl0KKworVGhpcyBwYXRjaCB3YXMgaW1wb3J0ZWQgZnJvbSB0aGUgRmVkb3JhIENvcmUgOCBjb3JldXRpbHMtNi45LTkgcGFja2FnZS4KKworVGhlIHBhY2thZ2UgaXMgc3RhdGVkIGFzIGJlaW5nIExpY2Vuc2VkIGFzIEdQTHYyKy4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCistLS0gY29yZXV0aWxzLTUuMi4xL3NyYy93aG8uYy5vdmVyZmxvdwkyMDA1LTA1LTI1IDA5OjU5OjA2LjAwMDAwMDAwMCArMDEwMAorKysrIGNvcmV1dGlscy01LjIuMS9zcmMvd2hvLmMJMjAwNS0wNS0yNSAxMDowMDozMS4wMDAwMDAwMDAgKzAxMDAKK0BAIC03NSw3ICs3NSw3IEBACisgIyBkZWZpbmUgTkVXX1RJTUUgMAorICNlbmRpZgorIAorLSNkZWZpbmUgSURMRVNUUl9MRU4gNgorKyNkZWZpbmUgSURMRVNUUl9MRU4gMTAKKyAKKyAjaWYgSEFWRV9TVFJVQ1RfWFRNUF9VVF9QSUQKKyAjIGRlZmluZSBQSURTVFJfREVDTF9BTkRfSU5JVChWYXIsIFV0bXBfZW50KSBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI3MzBkYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDMyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworYXV0b21ha2UgMS4xMiBoYXMgZGVwcmljYXRlZCBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0CisKK3RoaXMgcGF0Y2ggYXZvaWRzIHRoZXNlIGtpbmRzIG9mIGVycm9yczoKKworfCBjb25maWd1cmUuYWM6NDA6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKK3wgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9zaGFyZS9hY2xvY2FsLTEuMTIvcHJvdG9zLm00OjEyOiBBTV9DX1BST1RPVFlQRVMgaXMgZXhwYW5kZWQgZnJvbS4uLgorfCAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC93b3JrL3g4Nl82NC1saW51eC9jb3JldXRpbHMtbmF0aXZlLTYuOS1yMi9jb3JldXRpbHMtNi45L200L2ptLW1hY3Jvcy5tNDoxMzg6IGdsX0NIRUNLX0FMTF9UWVBFUyBpcyBleHBhbmRlZCBmcm9tLi4uCit8IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3dvcmsveDg2XzY0LWxpbnV4L2NvcmV1dGlscy1uYXRpdmUtNi45LXIyL2NvcmV1dGlscy02LjkvbTQvam0tbWFjcm9zLm00OjI0OiBjb3JldXRpbHNfTUFDUk9TIGlzIGV4cGFuZGVkIGZyb20uLi4KK3wgY29uZmlndXJlLmFjOjQwOiB0aGUgdG9wIGxldmVsCit8IGF1dG9tNHRlOiBtNCBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNS8wNAorCitJbmRleDogY29yZXV0aWxzLTYuOS9tNC9qbS1tYWNyb3MubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjb3JldXRpbHMtNi45Lm9yaWcvbTQvam0tbWFjcm9zLm00CisrKysgY29yZXV0aWxzLTYuOS9tNC9qbS1tYWNyb3MubTQKK0BAIC0xNDIsMTEgKzE0Miw2IEBAIEFDX0RFRlVOKFtnbF9DSEVDS19BTExfVFlQRVNdLAorICAgZG5sIHdoZXRoZXIgZnVuY3Rpb25zIGFuZCBoZWFkZXJzIGFyZSBhdmFpbGFibGUsIHdoZXRoZXIgdGhleSB3b3JrLCBldGMuCisgICBBQ19SRVFVSVJFKFtBQ19TWVNfTEFSR0VGSUxFXSkKKyAKKy0gIGRubCBUaGlzIHRlc3QgbXVzdCBwcmVjZWRlIHRlc3RzIG9mIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcyBsaWtlCistICBkbmwgdGhhdCBmb3IgdGhlIGlubGluZSBrZXl3b3JkLCBzaW5jZSBpdCBtYXkgY2hhbmdlIHRoZSBkZWdyZWUgdG8KKy0gIGRubCB3aGljaCB0aGUgY29tcGlsZXIgc3VwcG9ydHMgc3VjaCBmZWF0dXJlcy4KKy0gIEFDX1JFUVVJUkUoW0FNX0NfUFJPVE9UWVBFU10pCistCisgICBkbmwgQ2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KKyAgIEFDX1JFUVVJUkUoW0FDX0NfQklHRU5ESUFOXSkKKyAgIEFDX1JFUVVJUkUoW0FDX0NfVk9MQVRJTEVdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9maXhfZm9yX21hbnBhZ2VfYnVpbGRpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2ZpeF9mb3JfbWFucGFnZV9idWlsZGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGQ2MDBhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9maXhfZm9yX21hbnBhZ2VfYnVpbGRpbmcucGF0Y2gKQEAgLTAsMCArMSw4NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsZWdhY3kgdmVyc2lvbl0KKworVXNlIG5hdGl2ZSBjb3JldXRpbHMgYmluYXJpZXMgdG8gYnVpbGQgbWFucGFnZXMgaW4gY3Jvc3MgZW52aXJvbm1lbnQuCitUaGlzIGF2b2lkcyBtYW4gcGFnZSBidWlsZCBpc3N1ZXMgbGlrZSB0aGlzOgorCit8IE1ha2luZyBhbGwgaW4gbWFuCit8IG1ha2VbMV06IEVudGVyaW5nIGRpcmVjdG9yeSBgL2J1aWxkX2Rpc2svcG9reV9idWlsZC9idWlsZDEvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2NvcmV1dGlscy02LjktcjAvY29yZXV0aWxzLTYuOS9tYW4nCit8IFVwZGF0aW5nIG1hbiBwYWdlIGN1dC4xCit8IFVwZGF0aW5nIG1hbiBwYWdlIGRpci4xCit8IFVwZGF0aW5nIG1hbiBwYWdlIGV4cGFuZC4xCit8IFVwZGF0aW5nIG1hbiBwYWdlIGZvbGQuMQorfCBVcGRhdGluZyBtYW4gcGFnZSBpbnN0YWxsLjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2Ugam9pbi4xCit8IFVwZGF0aW5nIG1hbiBwYWdlIHByLjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2UgbHMuMQorfCBVcGRhdGluZyBtYW4gcGFnZSBzb3J0LjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2UgdW5leHBhbmQuMQorfCBVcGRhdGluZyBtYW4gcGFnZSB1bmlxLjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2Ugd2hvLjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2UgdmRpci4xCit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIGRpci50ZC9kaXIKK3wgaGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gY3V0LnRkL2N1dAorfCBtYWtlWzFdOiAqKiogW2Rpci4xXSBFcnJvciAxMjYKK3wgbWFrZVsxXTogKioqIFdhaXRpbmcgZm9yIHVuZmluaXNoZWQgam9icy4uLi4KK3wgaGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gZm9sZC50ZC9mb2xkCit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIGluc3RhbGwudGQvaW5zdGFsbAorfCBoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSBleHBhbmQudGQvZXhwYW5kCit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIGpvaW4udGQvam9pbgorfCBtYWtlWzFdOiAqKiogW2N1dC4xXSBFcnJvciAxMjYKK3wgbWFrZVsxXTogKioqIFtmb2xkLjFdIEVycm9yIDEyNgorfCBtYWtlWzFdOiAqKiogW2luc3RhbGwuMV0gRXJyb3IgMTI2Cit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIHNvcnQudGQvc29ydAorfCBtYWtlWzFdOiAqKiogW2V4cGFuZC4xXSBFcnJvciAxMjYKK3wgaGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gcHIudGQvcHIKK3wgbWFrZVsxXTogKioqIFtqb2luLjFdIEVycm9yIDEyNgorfCBoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSBscy50ZC9scworfCBoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSB1bmV4cGFuZC50ZC91bmV4cGFuZAorfCBoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSB1bmlxLnRkL3VuaXEKK3wgaGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gd2hvLnRkL3dobworfCBtYWtlWzFdOiAqKiogW3NvcnQuMV0gRXJyb3IgMTI2Cit8IG1ha2VbMV06ICoqKiBbcHIuMV0gRXJyb3IgMTI2Cit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIHZkaXIudGQvdmRpcgorfCBtYWtlWzFdOiAqKiogW2xzLjFdIEVycm9yIDEyNgorfCBtYWtlWzFdOiAqKiogW3VuaXEuMV0gRXJyb3IgMTI2Cit8IG1ha2VbMV06ICoqKiBbdW5leHBhbmQuMV0gRXJyb3IgMTI2Cit8IG1ha2VbMV06ICoqKiBbd2hvLjFdIEVycm9yIDEyNgorfCBtYWtlWzFdOiAqKiogW3ZkaXIuMV0gRXJyb3IgMTI2Cit8IG1ha2VbMV06IExlYXZpbmcgZGlyZWN0b3J5IGAvYnVpbGRfZGlzay9wb2t5X2J1aWxkL2J1aWxkMS90bXAvd29yay9pNTg2LXBva3ktbGludXgvY29yZXV0aWxzLTYuOS1yMC9jb3JldXRpbHMtNi45L21hbicKK3wgbWFrZTogKioqIFthbGwtcmVjdXJzaXZlXSBFcnJvciAxCit8IEZBVEFMOiBvZV9ydW5tYWtlIGZhaWxlZAorfCBFUlJPUjogRnVuY3Rpb24gJ2RvX2NvbXBpbGUnIGZhaWxlZCAoc2VlIC9idWlsZF9kaXNrL3Bva3lfYnVpbGQvYnVpbGQxL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9jb3JldXRpbHMtNi45LXIwL3RlbXAvbG9nLmRvX2NvbXBpbGUuMTI3ODAgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24pCitOT1RFOiBwYWNrYWdlIGNvcmV1dGlscy02LjktcjA6IHRhc2sgZG9fY29tcGlsZTogRmFpbGVkCitFUlJPUjogVGFzayA4ICgvaG9tZS9uaXRpbi9wcmovcG9reS5naXQvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlsc182LjkuYmIsIGRvX2NvbXBpbGUpIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAnMScKKworCitUaGlzIHBhdGNoIGlzIG1hZGUgZm9yIGdwbHYyIGNvcmV1dGlscyB0aGUgcmVjaXBlCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMS8wMy8xNworCitJbmRleDogbWFuL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9tYW4ub3JpZy9NYWtlZmlsZS5hbQorKysrIGIvbWFuL01ha2VmaWxlLmFtCitAQCAtMTY3LDcgKzE2Nyw3IEBAIG1hcHBlZF9uYW1lID0gYGVjaG8gJCp8c2VkICdzL2luc3RhbGwvZ2kKKyAJICAgICAgICAgICAgJChQRVJMKSAtLSAkKHNyY2RpcikvaGVscDJtYW4JCVwKKyAJICAgICAgICAgICAgIC0tc291cmNlPSckKFBBQ0tBR0VfU1RSSU5HKScJCVwKKyAJICAgICAgICAgICAgIC0taW5jbHVkZT0kKHNyY2RpcikvJCoueAkJCVwKKy0JICAgICAgICAgICAgIC0tb3V0cHV0PSR0LyRAICR0LyQqOwkJCVwKKysJICAgICAgICAgICAgIC0tb3V0cHV0PSR0LyRAICQqOwkJCVwKKyAJICAgICAgIH0JCQkJCQlcCisgCSAgICAmJiBzZWQgJ3N8JCpcLnRkL3x8ZycgJHQvJEAgPiAkQAkJCVwKKyAJICAgICYmIGNobW9kIGEtdyAkQAkJCQkJXAorSW5kZXg6IG1hbi9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvbWFuLm9yaWcvTWFrZWZpbGUuaW4KKysrKyBiL21hbi9NYWtlZmlsZS5pbgorQEAgLTg2NSw3ICs4NjUsNyBAQCB5ZXMuMToJCSQoY29tbW9uX2RlcCkJJChzcmNkaXIpL3llcy54CQkuCisgCSAgICAgICAgICAgICQoUEVSTCkgLS0gJChzcmNkaXIpL2hlbHAybWFuCQlcCisgCSAgICAgICAgICAgICAtLXNvdXJjZT0nJChQQUNLQUdFX1NUUklORyknCQlcCisgCSAgICAgICAgICAgICAtLWluY2x1ZGU9JChzcmNkaXIpLyQqLngJCQlcCistCSAgICAgICAgICAgICAtLW91dHB1dD0kdC8kQCAkdC8kKjsJCQlcCisrCSAgICAgICAgICAgICAtLW91dHB1dD0kdC8kQCAkKjsJCQlcCisgCSAgICAgICB9CQkJCQkJXAorIAkgICAgJiYgc2VkICdzfCQqXC50ZC98fGcnICR0LyRAID4gJEAJCQlcCisgCSAgICAmJiBjaG1vZCBhLXcgJEAJCQkJCVwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvZnV0aW1lbnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2Z1dGltZW5zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYTU5MGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2Z1dGltZW5zLnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGVnYWN5IHZlcnNpb25dCisKKyMgY29yZXV0aWxzIHVzZXMgZ251bGliIHdoaWNoIGNvbmZsaWN0cyB3aXRoIG5ld2VyIGxpYmMgaGVhZGVyIG9uIGZ1dGltZW5zCisjIHRoaXMgcGF0Y2ggc2ltcGx5IHJlbmFtZXMgY29yZXV0aWxzIGZ1dGltZXMgdG8gYXZvaWQgY29uZmxpY3Rpb24KKyMKKyMgU2lnbmVkLW9mZi1ieSBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4sIDIwMTAtMDgtMTgKKyMgKHRoaXMgcGF0Y2ggaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIpCisKK2RpZmYgLS1naXQgYS9saWIvdXRpbWVucy5jIGIvbGliL3V0aW1lbnMuYworaW5kZXggNzFiYzUxMC4uYWU4NzBiOCAxMDA2NDQKKy0tLSBhL2xpYi91dGltZW5zLmMKKysrKyBiL2xpYi91dGltZW5zLmMKK0BAIC03NSw3ICs3NSw3IEBAIHN0cnVjdCB1dGltYnVmCisgICAgUmV0dXJuIDAgb24gc3VjY2VzcywgLTEgKHNldHRpbmcgZXJybm8pIG9uIGZhaWx1cmUuICAqLworIAorIGludAorLWZ1dGltZW5zIChpbnQgZmQgQVRUUklCVVRFX1VOVVNFRCwKKytmdXRpbWVuc19jb3JldXRpbHMgKGludCBmZCBBVFRSSUJVVEVfVU5VU0VELAorIAkgIGNoYXIgY29uc3QgKmZpbGUsIHN0cnVjdCB0aW1lc3BlYyBjb25zdCB0aW1lc3BlY1syXSkKKyB7CisgICAvKiBTb21lIExpbnV4LWJhc2VkIE5GUyBjbGllbnRzIGFyZSBidWdneSwgYW5kIG1pc2hhbmRsZSB0aW1lIHN0YW1wcworQEAgLTE4NSw1ICsxODUsNSBAQCBmdXRpbWVucyAoaW50IGZkIEFUVFJJQlVURV9VTlVTRUQsCisgaW50CisgdXRpbWVucyAoY2hhciBjb25zdCAqZmlsZSwgc3RydWN0IHRpbWVzcGVjIGNvbnN0IHRpbWVzcGVjWzJdKQorIHsKKy0gIHJldHVybiBmdXRpbWVucyAoLTEsIGZpbGUsIHRpbWVzcGVjKTsKKysgIHJldHVybiBmdXRpbWVuc19jb3JldXRpbHMgKC0xLCBmaWxlLCB0aW1lc3BlYyk7CisgfQorZGlmZiAtLWdpdCBhL2xpYi91dGltZW5zLmggYi9saWIvdXRpbWVucy5oCitpbmRleCAwMDk3YWFhLi4xM2ZjNDVhIDEwMDY0NAorLS0tIGEvbGliL3V0aW1lbnMuaAorKysrIGIvbGliL3V0aW1lbnMuaAorQEAgLTEsMyArMSwzIEBACisgI2luY2x1ZGUgPHRpbWUuaD4KKy1pbnQgZnV0aW1lbnMgKGludCwgY2hhciBjb25zdCAqLCBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgWzJdKTsKKytpbnQgZnV0aW1lbnNfY29yZXV0aWxzIChpbnQsIGNoYXIgY29uc3QgKiwgc3RydWN0IHRpbWVzcGVjIGNvbnN0IFsyXSk7CisgaW50IHV0aW1lbnMgKGNoYXIgY29uc3QgKiwgc3RydWN0IHRpbWVzcGVjIGNvbnN0IFsyXSk7CitkaWZmIC0tZ2l0IGEvc3JjL2NvcHkuYyBiL3NyYy9jb3B5LmMKK2luZGV4IDRiZGI3NWMuLjA0NjM0ZjEgMTAwNjQ0CistLS0gYS9zcmMvY29weS5jCisrKysgYi9zcmMvY29weS5jCitAQCAtNTE4LDcgKzUxOCw3IEBAIGNvcHlfcmVnIChjaGFyIGNvbnN0ICpzcmNfbmFtZSwgY2hhciBjb25zdCAqZHN0X25hbWUsCisgICAgICAgdGltZXNwZWNbMF0gPSBnZXRfc3RhdF9hdGltZSAoc3JjX3NiKTsKKyAgICAgICB0aW1lc3BlY1sxXSA9IGdldF9zdGF0X210aW1lIChzcmNfc2IpOworIAorLSAgICAgIGlmIChmdXRpbWVucyAoZGVzdF9kZXNjLCBkc3RfbmFtZSwgdGltZXNwZWMpICE9IDApCisrICAgICAgaWYgKGZ1dGltZW5zX2NvcmV1dGlscyAoZGVzdF9kZXNjLCBkc3RfbmFtZSwgdGltZXNwZWMpICE9IDApCisgCXsKKyAJICBlcnJvciAoMCwgZXJybm8sIF8oInByZXNlcnZpbmcgdGltZXMgZm9yICVzIiksIHF1b3RlIChkc3RfbmFtZSkpOworIAkgIGlmICh4LT5yZXF1aXJlX3ByZXNlcnZlKQorZGlmZiAtLWdpdCBhL3NyYy90b3VjaC5jIGIvc3JjL3RvdWNoLmMKK2luZGV4IGE3OWMyNmQuLjZlZjMxN2QgMTAwNjQ0CistLS0gYS9zcmMvdG91Y2guYworKysrIGIvc3JjL3RvdWNoLmMKK0BAIC0xODIsNyArMTgyLDcgQEAgdG91Y2ggKGNvbnN0IGNoYXIgKmZpbGUpCisgICAgICAgdCA9IHRpbWVzcGVjOworICAgICB9CisgCistICBvayA9IChmdXRpbWVucyAoZmQsIChmZCA9PSBTVERPVVRfRklMRU5PID8gTlVMTCA6IGZpbGUpLCB0KSA9PSAwKTsKKysgIG9rID0gKGZ1dGltZW5zX2NvcmV1dGlscyAoZmQsIChmZCA9PSBTVERPVVRfRklMRU5PID8gTlVMTCA6IGZpbGUpLCB0KSA9PSAwKTsKKyAKKyAgIGlmIChmZCA9PSBTVERJTl9GSUxFTk8pCisgICAgIHsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvZ251bGliX200LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9nbnVsaWJfbTQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYzNTU1MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvZ251bGliX200LnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGVnYWN5IHZlcnNpb25dCisKKyMgcmVtb3ZlIHRoZSBsaW5lIHRvIGNhdXNlIHJlY3Vyc2l2ZSBpbmNsdXNpb24gZXJyb3IgZnJvbSBhdXRvcmVjb25mLCBzaWNuZQorIyBuZXdlciBhdXRvY29uZiBoYXMgaW5jbHVkZWQgdGhpcyBkZWZpbml0aW9uLiBTaW1wbHkgcmVuYW1lIGl0IGhlcmUuCisjCisjIFNpZ25lZC1vZmYtYnkgS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+LCAyMDEwLTA4LTE4CisjICh0aGlzIHBhdGNoIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyKQorCitkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy5tNCBiL2V4dGVuc2lvbnMubTQKK2luZGV4IDE0M2E5ZTUuLmY2NTU4ZjEgMTAwNjQ0CistLS0gYS9tNC9leHRlbnNpb25zLm00CisrKysgYi9tNC9leHRlbnNpb25zLm00CitAQCAtMTYsNyArMTYsNyBAQAorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorICMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorLUFDX0RFRlVOKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorK0FDX0RFRlVOKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNfRFVNTVldLAorIFsKKyAgIEFDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKQorICAgQUNfQkVGT1JFKFskMF0sIFtBQ19SVU5fSUZFTFNFXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvbWFuLXRvdWNoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9tYW4tdG91Y2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQyY2I5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvbWFuLXRvdWNoLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGVnYWN5IHZlcnNpb25dCisKKyMgbWFuIHBhZ2UgZm9yICd0b3VjaCcgaXMgZ2VuZXJhdGVkIGRpZmZlcmVudGx5IGZyb20gb3RoZXJzLiBBbGwgb3RoZXIgdXRpbGl0aWVzCisjIGFyZSBwcm92aWRlZCBzdGF0aWMgbWFuIHNvdXJjZSBmaWxlcywgd2hpbGUgZm9yICd0b3VjaCcgaXQgcmVxdWlyZXMgaGVscDJtYW4KKyMgdG8gaW52b2tlICJ0b3VjaCAtLWhlbHAiIGFuZCB0aGVuIGNvbnZlcnQgdGhlIG91dHB1dCBpbnRvIHRoZSBtYW51YWwuIFNpbmNlIHRvdWNoCisjIGlzIHdpdGggdGFyZ2V0IGZvcm1hdCB3aGljaCBjYW4ndCBiZSBpbnZva2VkIG9uIGJ1aWxkIHN5c3RlbSwgZGlzYWJsZSBidWlsZGluZworIyAndG91Y2gnIG1hbiBwYWdlIGhlcmUuCisjCisjIFNpZ25lZC1vZmYtYnkgS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+LCAyMDEwLTA4LTE4CisjICh0aGlzIHBhdGNoIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyKQorCitkaWZmIC0tZ2l0IGEvbWFuL01ha2VmaWxlLmFtIGIvbWFuL01ha2VmaWxlLmFtCitpbmRleCAzMmRmOWQxLi4zN2IwOWUzIDEwMDY0NAorLS0tIGEvbWFuL01ha2VmaWxlLmFtCisrKysgYi9tYW4vTWFrZWZpbGUuYW0KK0BAIC0yNyw3ICsyNyw3IEBAIGRpc3RfbWFuX01BTlMgPSBcCisgICBwYXN0ZS4xIHBhdGhjaGsuMSBwci4xIHByaW50ZW52LjEgcHJpbnRmLjEgcHR4LjEgcHdkLjEgcmVhZGxpbmsuMSBcCisgICBybS4xIHJtZGlyLjEgc2VxLjEgc2hhMXN1bS4xIHNoYTIyNHN1bS4xIHNoYTI1NnN1bS4xIHNoYTM4NHN1bS4xIHNoYTUxMnN1bS4xIFwKKyAgIHNocmVkLjEgc2h1Zi4xIHNsZWVwLjEgc29ydC4xIHNwbGl0LjEgc3RhdC4xIFwKKy0gIHN1LjEgc3VtLjEgc3luYy4xIHRhYy4xIHRhaWwuMSB0ZWUuMSB0ZXN0LjEgdG91Y2guMSB0ci4xIHRydWUuMSB0c29ydC4xIFwKKysgIHN1LjEgc3VtLjEgc3luYy4xIHRhYy4xIHRhaWwuMSB0ZWUuMSB0ZXN0LjEgdHIuMSB0cnVlLjEgdHNvcnQuMSBcCisgICB0dHkuMSB1bmV4cGFuZC4xIHVuaXEuMSB1bmxpbmsuMSB2ZGlyLjEgd2MuMSBcCisgICB3aG9hbWkuMSB5ZXMuMSAkKE1BTikKKyBvcHRpb25hbF9tYW5zID0gXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI0LzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExYTRiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI0LzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL2dudWxpYi5tayBiL2xpYi9nbnVsaWIubWsKK2luZGV4IGUxZDc0ZGIuLmMwZTkyZGQgMTAwNjQ0CistLS0gYS9saWIvZ251bGliLm1rCisrKysgYi9saWIvZ251bGliLm1rCitAQCAtMTg4Miw3ICsxODgyLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvZml4LXNlbGludXgtZmxhc2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNC9maXgtc2VsaW51eC1mbGFzay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDFhZTU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvZml4LXNlbGludXgtZmxhc2sucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSBhMWQzNjA1MDlmYTNhNGFmZjU3ZWVkY2Q1MjhjYzAzNDdhODc1MzFkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDE2IFNlcCAyMDE0IDAxOjU5OjA4IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGdudWxpYi1jb21wLm00OiBzZWxpbnV4L2ZsYXNrLmggc2hvdWxkIHJlc3BlY3QgdG8KKyB3aXRoX3NlbGludXgKKworRml4ZWQgd2hlbiBidWlsZCB3aXRoIG1ldGEtc2VsaW51eCBldmVuIHdoZW4gLS13aXRob3V0LXNlbGludXg6CitydW5jb24uYzo0OToyODogZmF0YWwgZXJyb3I6IHNlbGludXgvZmxhc2suaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorICMgaW5jbHVkZSA8c2VsaW51eC9mbGFzay5oPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK2NvbXBpbGF0aW9uIHRlcm1pbmF0ZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIG00L2dudWxpYi1jb21wLm00IHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbTQvZ251bGliLWNvbXAubTQgYi9tNC9nbnVsaWItY29tcC5tNAoraW5kZXggNDcyZDNhMC4uNWYwOTczNCAxMDA2NDQKKy0tLSBhL200L2dudWxpYi1jb21wLm00CisrKysgYi9tNC9nbnVsaWItY29tcC5tNAorQEAgLTE3MzAsMTEgKzE3MzAsMTEgQEAgQUNfREVGVU4oW2dsX0lOSVRdLAorICAgICBBQ19MSUJPQkooW3NlbGVjdF0pCisgICBmaQorICAgZ2xfU1lTX1NFTEVDVF9NT0RVTEVfSU5ESUNBVE9SKFtzZWxlY3RdKQorLSAgQUNfQ0hFQ0tfSEVBREVSUyhbc2VsaW51eC9mbGFzay5oXSkKKyAgIEFDX0xJQk9CSihbc2VsaW51eC1hdF0pCisgICBnbF9IRUFERVJTX1NFTElOVVhfU0VMSU5VWF9ICisgICBnbF9IRUFERVJTX1NFTElOVVhfQ09OVEVYVF9ICisgICBpZiB0ZXN0ICIkd2l0aF9zZWxpbnV4IiAhPSBubyAmJiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3NlbGludXhfc2VsaW51eF9oIiA9IHllczsgdGhlbgorKyAgICBBQ19DSEVDS19IRUFERVJTKFtzZWxpbnV4L2ZsYXNrLmhdKQorICAgICBBQ19MSUJPQkooW2dldGZpbGVjb25dKQorICAgZmkKKyAgIGdsX1NFUlZFTlQKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNC9tYW4tZGVjb3VwbGUtbWFucGFnZXMtZnJvbS1idWlsZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI0L21hbi1kZWNvdXBsZS1tYW5wYWdlcy1mcm9tLWJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjODk2YTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNC9tYW4tZGVjb3VwbGUtbWFucGFnZXMtZnJvbS1idWlsZC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitGcm9tIGI0ZDI1ODYyOWYwOTAwNjY3ODNjM2I0YzkxYjQwZjYzYjlkMGEyOTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFN1biwgOCBGZWIgMjAxNSAxNjo1MTo1NyAtMDUwMAorU3ViamVjdDogW1BBVENIXSBtYW46IGRlY291cGxlIG1hbnBhZ2VzIGZyb20gYnVpbGQKKworVGhlIHVzZSBvZiAiaGVscDJtYW4iIGRvZXNuJ3Qgd29yayBhdCBhbGwgZm9yIGNyb3NzIGNvbXBpbGUsIGluCithZGRpdGlvbiB0byB0aGUgZXh0cmEgcmVxdWlyZW1lbnQgb2YgcGVybCBpdCBhZGRzLgorCitKdXN0IGRlY291cGxlIHRoZSBtYW5wYWdlcyBmcm9tIHRoZSBidWlsZCBpbiBvcmRlciB0byBwYXZlIHRoZSB3YXkgZm9yCitpbXBvcnRpbmcgcHJlYnVpbHQgbWFucGFnZXMgdGhhdCBjYW4gYmUgdXNlZCBpbiBhIGNyb3NzIGJ1aWxkIHNpdHVhdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBkb2Vzbid0IGNhcmUgYWJvdXQgeC1jb21waWxlIGNhc2UuXQorU2lnbmVkLW9mZi1ieTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCBmYjRhZjI3Li43NTc2YjJjIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMjE0LDUgKzIxNCw0IEBAIEFNX0NQUEZMQUdTID0gLUlsaWIgLUkkKHRvcF9zcmNkaXIpL2xpYiAtSXNyYyAtSSQodG9wX3NyY2Rpcikvc3JjCisgaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2xpYi9sb2NhbC5taworIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvbG9jYWwubWsKKyBpbmNsdWRlICQodG9wX3NyY2RpcikvZG9jL2xvY2FsLm1rCistaW5jbHVkZSAkKHRvcF9zcmNkaXIpL21hbi9sb2NhbC5taworIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS90ZXN0cy9sb2NhbC5taworLS0gCisyLjIuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNC9yZW1vdmUtdXNyLWxvY2FsLWxpYi1mcm9tLW00LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvcmVtb3ZlLXVzci1sb2NhbC1saWItZnJvbS1tNC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWY4YTU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvcmVtb3ZlLXVzci1sb2NhbC1saWItZnJvbS1tNC5wYXRjaApAQCAtMCwwICsxLDMxIEBACitXZSBoYXZlIHByb2JsZW0gdXNpbmcgaGFyZGNvZGVkIGRpcmVjdG9yaWVzIGxpa2UgL3Vzci9sb2NhbCBoZXJlCit3aGljaCB3aWxsIGJlIGNoZWNrZWQgZm9yIGNyb3NzIGJ1aWxkcy4gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB3aGljaAoraXMgdmFsaWQgZm9yIEFJWCBvbmx5LiBXZSBkbyBub3QgaGF2ZSBBSVggYXMgb25lIG9mIG91ciBzdXBwb3J0ZWQKK2J1aWxkIGhvc3Qgb3IgdGFyZ2V0LiBUaGVyZWZvcmUgd2UgZ2V0IHJpZCBvZiB0aGUgaGFyZGNvZGVkIHBhdGhzCithbmQgbWFrZSBsaWZlIGVhc2llciBmb3IgY3Jvc3MgY29tcGlsYXRpb24gcHJvY2Vzcy4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtVcHN0cmVhbSBkb2VzIGNhcmUgZm9yIEFJWCB3aGlsZSB3ZSBtYXkgbm90XQorCitJbmRleDogY29yZXV0aWxzLTguMTQvbTQvZ2V0bG9hZGF2Zy5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNvcmV1dGlscy04LjE0Lm9yaWcvbTQvZ2V0bG9hZGF2Zy5tNAkyMDExLTA5LTE5IDA4OjA5OjI0LjAwMDAwMDAwMCAtMDcwMAorKysrIGNvcmV1dGlscy04LjE0L200L2dldGxvYWRhdmcubTQJMjAxMS0xMC0xOSAyMTo0MjowMC4zODU1MzMzNTcgLTA3MDAKK0BAIC00MSwxNiArNDEsNiBAQAorICAgICAgICBbTElCUz0iLWx1dGlsICRMSUJTIiBnbF9mdW5jX2dldGxvYWRhdmdfZG9uZT15ZXNdKQorICAgIGZpCisgCistICAgaWYgdGVzdCAkZ2xfZnVuY19nZXRsb2FkYXZnX2RvbmUgPSBubzsgdGhlbgorLSAgICAgIyBUaGVyZSBpcyBhIGNvbW1vbmx5IGF2YWlsYWJsZSBsaWJyYXJ5IGZvciBSUy82MDAwIEFJWC4KKy0gICAgICMgU2luY2UgaXQgaXMgbm90IGEgc3RhbmRhcmQgcGFydCBvZiBBSVgsIGl0IG1pZ2h0IGJlIGluc3RhbGxlZCBsb2NhbGx5LgorLSAgICAgZ2xfZ2V0bG9hZGF2Z19MSUJTPSRMSUJTCistICAgICBMSUJTPSItTC91c3IvbG9jYWwvbGliICRMSUJTIgorLSAgICAgQUNfQ0hFQ0tfTElCKFtnZXRsb2FkYXZnXSwgW2dldGxvYWRhdmddLAorLSAgICAgICAgICAgICAgICAgIFtMSUJTPSItbGdldGxvYWRhdmcgJExJQlMiIGdsX2Z1bmNfZ2V0bG9hZGF2Z19kb25lPXllc10sCistICAgICAgICAgICAgICAgICAgW0xJQlM9JGdsX2dldGxvYWRhdmdfTElCU10pCistICAgZmkKKy0KKyAgICAjIFNldCB1cCB0aGUgcmVwbGFjZW1lbnQgZnVuY3Rpb24gaWYgbmVjZXNzYXJ5LgorICAgIGlmIHRlc3QgJGdsX2Z1bmNfZ2V0bG9hZGF2Z19kb25lID0gbm87IHRoZW4KKyAgICAgIEhBVkVfR0VUTE9BREFWRz0wCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHNfNi45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzXzYuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmYxZDUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzXzYuOS5iYgpAQCAtMCwwICsxLDEwMiBAQAorU1VNTUFSWSA9ICJUaGUgYmFzaWMgZmlsZSwgc2hlbGwgYW5kIHRleHQgbWFuaXB1bGF0aW9uIHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBHTlUgQ29yZSBVdGlsaXRpZXMgcHJvdmlkZSB0aGUgYmFzaWMgZmlsZSwgc2hlbGwgYW5kIHRleHQgXAorbWFuaXB1bGF0aW9uIHV0aWxpdGllcy4gVGhlc2UgYXJlIHRoZSBjb3JlIHV0aWxpdGllcyB3aGljaCBhcmUgZXhwZWN0ZWQgdG8gZXhpc3Qgb24gXAorZXZlcnkgc3lzdGVtLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NvcmV1dGlscy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9kZWJidWdzLmdudS5vcmcvY29yZXV0aWxzIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbHMuYztiZWdpbmxpbmU9NDtlbmRsaW5lPTE2O21kNT0xNWVkNjBmNjdiMWRiNWZlZGQ1ZGJjMzdjZjhhOTU0MyIKK1BSID0gInI1IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2NvcmV1dGlscy8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2dudWxpYl9tNC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9mdXRpbWVucy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHMtbHMteC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHMtNi45LWNwLWktdS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHMtaTE4bi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHMtb3ZlcmZsb3cucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29yZXV0aWxzLWZpeC1pbnN0YWxsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi10b3VjaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvcmV1dGlscy1idWlsZC13aXRoLWFjbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHMtZml4LXRleGluZm8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X2Zvcl9tYW5wYWdlX2J1aWxkaW5nLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYzk2MDdkODQ5NWYxNmU5ODkwNmU3ZWQyZDk3NTFhMDYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODljMjg5NWFkMTU3ZGU1MGU1MzI5OGIyMmQ5MWRiMTE2ZWU0ZTFkZDNmZGY0MDE5MjYwMjU0ZTJlMzE0OTdiMCIKKworRVhUUkFfT0VDT05GICs9ICJhY19jdl9mdW5jX2dldGdyb3Vwc193b3Jrcz15ZXMgXAorICAgICAgICAgICAgICAgICBhY19jdl9mdW5jX3N0cmNvbGxfd29ya3M9eWVzIgorCisjIGFjbCBpcyBub3QgYSBkZWZhdWx0IGZlYXR1cmUKKyMKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2FjbCcsICdhY2wnLCAnJywgZCl9IgorCisjIHdpdGgsIHdpdGhvdXQsIGRlcGVuZHMsIHJkZXBlbmRzCisjCitQQUNLQUdFQ09ORklHW2FjbF0gPSAiYWNfY3ZfaGVhZGVyX3N5c19hY2xfaD15ZXMsYWNfY3ZfaGVhZGVyX3N5c19hY2xfaD1ubyxhY2wsIgorCisKKyMgWyBnZXRzIGEgc3BlY2lhbCB0cmVhdG1lbnQgYW5kIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGlzCitiaW5kaXJfcHJvZ3MgPSAiYmFzZTY0IGJhc2VuYW1lIGNrc3VtIGNvbW0gY3NwbGl0IGN1dCBkaXIgZGlyY29sb3JzIGRpcm5hbWUgZHUgXAorICAgICAgICAgICAgICAgIGVudiBleHBhbmQgZXhwciBmYWN0b3IgZm10IGZvbGQgZ3JvdXBzIGhlYWQgaG9zdGlkIGlkIGluc3RhbGwgXAorICAgICAgICAgICAgICAgIGpvaW4gbGluayBsb2duYW1lIG1kNXN1bSBta2ZpZm8gbmljZSBubCBub2h1cCBvZCBwYXN0ZSBwYXRoY2hrIFwKKyAgICAgICAgICAgICAgICBwaW5reSBwciBwcmludGVudiBwcmludGYgcHR4IHJlYWRsaW5rIHNlcSBzaGExc3VtIHNoYTIyNHN1bSBzaGEyNTZzdW0gXAorICAgICAgICAgICAgICAgIHNoYTM4NHN1bSBzaGE1MTJzdW0gc2hyZWQgc2h1ZiBzb3J0IHNwbGl0IHN1bSB0YWMgdGFpbCB0ZWUgdGVzdCBcCisgICAgICAgICAgICAgICAgdHIgdHNvcnQgdHR5IHVuZXhwYW5kIHVuaXEgdW5saW5rIHVzZXJzIHZkaXIgd2Mgd2hvIHdob2FtaSB5ZXMgdXB0aW1lIgorCisjIGhvc3RuYW1lIGdldHMgYSBzcGVjaWFsIHRyZWF0bWVudCBhbmQgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMKK2Jhc2VfYmluZGlyX3Byb2dzID0gImNhdCBjaGdycCBjaG1vZCBjaG93biBjcCBkYXRlIGRkIGVjaG8gZmFsc2Uga2lsbCBsbiBscyBta2RpciBcCisgICAgICAgICAgICAgICAgICAgICBta25vZCBtdiBwd2Qgcm0gcm1kaXIgc2xlZXAgc3R0eSBzeW5jIHRvdWNoIHRydWUgdW5hbWUgaG9zdG5hbWUgc3RhdCIKKworc2JpbmRpcl9wcm9ncz0gImNocm9vdCIKKworIyBMZXQgYWNsb2NhbCB1c2UgdGhlIHJlbGF0aXZlIHBhdGggZm9yIHRoZSBtNCBmaWxlIHJhdGhlciB0aGFuIHRoZQorIyBhYnNvbHV0ZSBzaW5jZSBjb3JldXRpbHMgaGFzIGEgbG90IG9mIG00IGZpbGVzLCBvdGhlcndpc2UgdGhlcmUgbWlnaHQKKyMgYmUgYW4gIkFyZ3VtZW50IGxpc3QgdG9vIGxvbmciIGVycm9yIHdoZW4gaXQgaXMgYnVpbHQgaW4gYSBsb25nL2RlZXAKKyMgZGlyZWN0b3J5LgorYWNwYXRocyA9ICItSSAuL200IgorCitkb19pbnN0YWxsKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCVsgIiR7YmluZGlyfSIgIT0gIiR7YmFzZV9iaW5kaXJ9IiBdICYmIGZvciBpIGluICR7YmFzZV9iaW5kaXJfcHJvZ3N9OyBkbyBtdiAke0R9JHtiaW5kaXJ9LyRpICR7RH0ke2Jhc2VfYmluZGlyfS8kaTsgZG9uZQorCisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCVsgIiR7YmluZGlyfSIgIT0gIiR7c2JpbmRpcn0iIF0gJiYgZm9yIGkgaW4gJHtzYmluZGlyX3Byb2dzfTsgZG8gbXYgJHtEfSR7YmluZGlyfS8kaSAke0R9JHtzYmluZGlyfS8kaTsgZG9uZQorCisJIyBbIHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmcgYmVjYXVzZSBbLmNvcmV1dGlscyB3aWxsIGNhdXNlIHRoZSBzZWQgc3R1ZmYKKwkjIGluIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgdG8gZmFpbCwgdGhlcmVmb3JlIHVzZSBsYnJhY2tldCAtIHRoZSBuYW1lIHVzZWQKKwkjIGZvciB0aGUgYWN0dWFsIHNvdXJjZSBmaWxlLgorCW12ICR7RH0ke2JpbmRpcn0vWyAke0R9JHtiaW5kaXJ9L2xicmFja2V0LiR7QlBOfQorCisJIyBOZXdlciB2ZXJzaW9ucyBvZiBjb3JldXRpbHMgZG8gbm90IGluY2x1ZGUgc3UsIHRvIG1pbWljIHRoaXMgYmVoYXZpb3IKKwkjIHdlIHNpbXBseSByZW1vdmUgaXQuCisJcm0gLWYgJHtEfSR7YmluZGlyfS9zdQorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJsYnJhY2tldCAke2JpbmRpcl9wcm9nc30gJHtiYXNlX2JpbmRpcl9wcm9nc30gJHtzYmluZGlyX3Byb2dzfSIKKworQUxURVJOQVRJVkVfUFJJT1JJVFlbdXB0aW1lXSA9ICIxMCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW2hvc3RuYW1lXSA9ICIxMCIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2xicmFja2V0XSA9ICIke2JpbmRpcn0vWyIKK0FMVEVSTkFUSVZFX1RBUkdFVFtsYnJhY2tldF0gPSAiJHtiaW5kaXJ9L2xicmFja2V0LiR7QlBOfSIKKworcHl0aG9uIF9fYW5vbnltb3VzKCkgeworCWZvciBwcm9nIGluIGQuZ2V0VmFyKCdiYXNlX2JpbmRpcl9wcm9ncycsIFRydWUpLnNwbGl0KCk6CisJCWQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignYmFzZV9iaW5kaXInLCBUcnVlKSwgcHJvZykpCisKKwlmb3IgcHJvZyBpbiBkLmdldFZhcignc2JpbmRpcl9wcm9ncycsIFRydWUpLnNwbGl0KCk6CisJCWQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignc2JpbmRpcicsIFRydWUpLCBwcm9nKSkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlsc184LjI0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzXzguMjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM0ZWJjZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlsc184LjI0LmJiCkBAIC0wLDAgKzEsMTI3IEBACitTVU1NQVJZID0gIlRoZSBiYXNpYyBmaWxlLCBzaGVsbCBhbmQgdGV4dCBtYW5pcHVsYXRpb24gdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiVGhlIEdOVSBDb3JlIFV0aWxpdGllcyBwcm92aWRlIHRoZSBiYXNpYyBmaWxlLCBzaGVsbCBhbmQgdGV4dCBcCittYW5pcHVsYXRpb24gdXRpbGl0aWVzLiBUaGVzZSBhcmUgdGhlIGNvcmUgdXRpbGl0aWVzIHdoaWNoIGFyZSBleHBlY3RlZCB0byBleGlzdCBvbiBcCitldmVyeSBzeXN0ZW0uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NvcmV1dGlscy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9kZWJidWdzLmdudS5vcmcvY29yZXV0aWxzIgorTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9scy5jO2JlZ2lubGluZT01O2VuZGxpbmU9MTY7bWQ1PTM4Yjc5Nzg1Y2E4ODUzN2I3NTg3MTc4MmEyYTNjNmI4IgorREVQRU5EUyA9ICJnbXAgbGliY2FwIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2NvcmV1dGlscy8ke0JQfS50YXIueHo7bmFtZT10YXJiYWxsIFwKKyAgICAgICAgICAgaHR0cDovL2Rpc3RmaWxlcy5nZW50b28ub3JnL2Rpc3RmaWxlcy8ke0JQfS1tYW4udGFyLnh6O25hbWU9bWFucGFnZXMgXAorICAgICAgICAgICBmaWxlOi8vbWFuLWRlY291cGxlLW1hbnBhZ2VzLWZyb20tYnVpbGQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXVzci1sb2NhbC1saWItZnJvbS1tNC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtc2VsaW51eC1mbGFzay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gIjQwZWZkYmNlODY1ZDI0NThkOGRhMGE5ZGNlZTdjMTZjIgorU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiYTJkNzUyODZhNGI5ZWYzYTEzMDM5YzJkYTM4NjhhNjFiZTRlZTlmMTdkOGFlMzgwYTM1YTk3ZTUwNjk3MjE3MCIKK1NSQ19VUklbbWFucGFnZXMubWQ1c3VtXSA9ICI3MjhhOTFhNWMxMDk1YTMzY2ZmYjk5NTliYjg5MTk2MyIKK1NSQ19VUklbbWFucGFnZXMuc2hhMjU2c3VtXSA9ICJjZjAzMzNiNWYxMzRhMzMxZTBiNDZlMmRkZjkwNjY2ZjhiZGMzMjgxYzFjYTJjN2NjYmI3NWI0Mzc1ODljZTM3IgorCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0td2l0aG91dC1nbXAiCitFWFRSQV9PRUNPTkZfY2xhc3MtdGFyZ2V0ID0gIi0tZW5hYmxlLWluc3RhbGwtcHJvZ3JhbT1hcmNoIC0tbGliZXhlY2Rpcj0ke2xpYmRpcn0iCisKKyMgYWNsIGlzIG5vdCBhIGRlZmF1bHQgZmVhdHVyZQorIworUEFDS0FHRUNPTkZJR19jbGFzcy10YXJnZXQgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2FjbCcsICdhY2wnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPz89ICIiCisKKyMgd2l0aCwgd2l0aG91dCwgZGVwZW5kcywgcmRlcGVuZHMKKyMKK1BBQ0tBR0VDT05GSUdbYWNsXSA9ICItLWVuYWJsZS1hY2wsLS1kaXNhYmxlLWFjbCxhY2wsIgorCisjIFsgZGYgbWt0ZW1wIGJhc2U2NCBnZXRzIGEgc3BlY2lhbCB0cmVhdG1lbnQgYW5kIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGlzCitiaW5kaXJfcHJvZ3MgPSAiYXJjaCBiYXNlbmFtZSBjaGNvbiBja3N1bSBjb21tIGNzcGxpdCBjdXQgZGlyIGRpcmNvbG9ycyBkaXJuYW1lIGR1IFwKKyAgICAgICAgICAgICAgICBlbnYgZXhwYW5kIGV4cHIgZmFjdG9yIGZtdCBmb2xkIGdyb3VwcyBoZWFkIGhvc3RpZCBpZCBpbnN0YWxsIFwKKyAgICAgICAgICAgICAgICBqb2luIGxpbmsgbG9nbmFtZSBtZDVzdW0gbWtmaWZvIG5pY2Ugbmwgbm9odXAgbnByb2Mgb2QgcGFzdGUgcGF0aGNoayBcCisgICAgICAgICAgICAgICAgcGlua3kgcHIgcHJpbnRlbnYgcHJpbnRmIHB0eCByZWFkbGluayByZWFscGF0aCBydW5jb24gc2VxIHNoYTFzdW0gc2hhMjI0c3VtIHNoYTI1NnN1bSBcCisgICAgICAgICAgICAgICAgc2hhMzg0c3VtIHNoYTUxMnN1bSBzaHJlZCBzaHVmIHNvcnQgc3BsaXQgc3RkYnVmIHN1bSB0YWMgdGFpbCB0ZWUgdGVzdCB0aW1lb3V0XAorICAgICAgICAgICAgICAgIHRyIHRydW5jYXRlIHRzb3J0IHR0eSB1bmV4cGFuZCB1bmlxIHVubGluayB1cHRpbWUgdXNlcnMgdmRpciB3YyB3aG8gd2hvYW1pIHllcyIKKworIyBob3N0bmFtZSBnZXRzIGEgc3BlY2lhbCB0cmVhdG1lbnQgYW5kIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGlzCitiYXNlX2JpbmRpcl9wcm9ncyA9ICJjYXQgY2hncnAgY2htb2QgY2hvd24gY3AgZGF0ZSBkZCBlY2hvIGZhbHNlIGtpbGwgbG4gbHMgbWtkaXIgXAorICAgICAgICAgICAgICAgICAgICAgbWtub2QgbXYgcHdkIHJtIHJtZGlyIHNsZWVwIHN0dHkgc3luYyB0b3VjaCB0cnVlIHVuYW1lIHN0YXQiCisKK3NiaW5kaXJfcHJvZ3M9ICJjaHJvb3QiCisKKyMgTGV0IGFjbG9jYWwgdXNlIHRoZSByZWxhdGl2ZSBwYXRoIGZvciB0aGUgbTQgZmlsZSByYXRoZXIgdGhhbiB0aGUKKyMgYWJzb2x1dGUgc2luY2UgY29yZXV0aWxzIGhhcyBhIGxvdCBvZiBtNCBmaWxlcywgb3RoZXJ3aXNlIHRoZXJlIG1pZ2h0CisjIGJlIGFuICJBcmd1bWVudCBsaXN0IHRvbyBsb25nIiBlcnJvciB3aGVuIGl0IGlzIGJ1aWx0IGluIGEgbG9uZy9kZWVwCisjIGRpcmVjdG9yeS4KK2FjcGF0aHMgPSAiLUkgLi9tNCIKKworIyBEZWFsIHdpdGggYSBzZXBhcmF0ZSBidWlsZGRpciBmYWlsdXJlIGlmIHNyYyBkb2Vzbid0IGV4aXN0IHdoZW4gY3JlYXRpbmcgdmVyc2lvbi5jL3ZlcnNpb24uaAorZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKwlta2RpciAtcCAke0J9L3NyYworfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlmb3IgaSBpbiBkZiBta3RlbXAgYmFzZTY0OyBkbyBtdiAke0R9JHtiaW5kaXJ9LyRpICR7RH0ke2JpbmRpcn0vJGkuJHtCUE59OyBkb25lCisKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCVsgIiR7YmFzZV9iaW5kaXJ9IiAhPSAiJHtiaW5kaXJ9IiBdICYmIGZvciBpIGluICR7YmFzZV9iaW5kaXJfcHJvZ3N9OyBkbyBtdiAke0R9JHtiaW5kaXJ9LyRpICR7RH0ke2Jhc2VfYmluZGlyfS8kaS4ke0JQTn07IGRvbmUKKworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlbICIke3NiaW5kaXJ9IiAhPSAiJHtiaW5kaXJ9IiBdICYmIGZvciBpIGluICR7c2JpbmRpcl9wcm9nc307IGRvIG12ICR7RH0ke2JpbmRpcn0vJGkgJHtEfSR7c2JpbmRpcn0vJGkuJHtCUE59OyBkb25lCisKKwkjIFsgcmVxdWlyZXMgc3BlY2lhbCBoYW5kbGluZyBiZWNhdXNlIFsuY29yZXV0aWxzIHdpbGwgY2F1c2UgdGhlIHNlZCBzdHVmZgorCSMgaW4gdXBkYXRlLWFsdGVybmF0aXZlcyB0byBmYWlsLCB0aGVyZWZvcmUgdXNlIGxicmFja2V0IC0gdGhlIG5hbWUgdXNlZAorCSMgZm9yIHRoZSBhY3R1YWwgc291cmNlIGZpbGUuCisJbXYgJHtEfSR7YmluZGlyfS9bICR7RH0ke2JpbmRpcn0vbGJyYWNrZXQuJHtCUE59CisKKwkjIHByZWJ1aWx0IG1hbiBwYWdlcworCWluc3RhbGwgLWQgJHtEfS8ke21hbmRpcn0vbWFuMQorCWluc3RhbGwgLXQgJHtEfS8ke21hbmRpcn0vbWFuMSAke1N9L21hbi8qLjEKKwkjIHByZWJ1aWx0IG1hbiBwYWdlcyBkb24ndCBkbyBhIHNlcGFyYXRlIG1hbiBwYWdlIGZvciBbIHZzIHRlc3QuCisJIyBzZWUgY29tbWVudCBhYm92ZSByLmUuIHNlZCBhbmQgdXBkYXRlLWFsdGVybmF0aXZlcworCWNwIC1hICR7RH0ke21hbmRpcn0vbWFuMS90ZXN0LjEgJHtEfSR7bWFuZGlyfS9tYW4xL2xicmFja2V0LjEuJHtCUE59Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpeworCSMgcmVtb3ZlIGdyb3VwcyB0byBmaXggY29uZmxpY3Qgd2l0aCBzaGFkb3ctbmF0aXZlCisJcm0gLWYgJHtEfSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9ncm91cHMKK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKK0FMVEVSTkFUSVZFXyR7UE59ID0gImxicmFja2V0ICR7YmluZGlyX3Byb2dzfSAke2Jhc2VfYmluZGlyX3Byb2dzfSAke3NiaW5kaXJfcHJvZ3N9IGJhc2U2NCBta3RlbXAgZGYiCitBTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAiYmFzZTY0LjEgbWt0ZW1wLjEgZGYuMSBsYnJhY2tldC4xIGdyb3Vwcy4xIGtpbGwuMSB1cHRpbWUuMSBzdGF0LjEiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtiYXNlNjRdID0gIiR7YmFzZV9iaW5kaXJ9L2Jhc2U2NCIKK0FMVEVSTkFUSVZFX1RBUkdFVFtiYXNlNjRdID0gIiR7YmluZGlyfS9iYXNlNjQuJHtCUE59IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2Jhc2U2NC4xXSA9ICIke21hbmRpcn0vbWFuMS9iYXNlNjQuMSIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW21rdGVtcF0gPSAiJHtiYXNlX2JpbmRpcn0vbWt0ZW1wIgorQUxURVJOQVRJVkVfVEFSR0VUW21rdGVtcF0gPSAiJHtiaW5kaXJ9L21rdGVtcC4ke0JQTn0iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbWt0ZW1wLjFdID0gIiR7bWFuZGlyfS9tYW4xL21rdGVtcC4xIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZGZdID0gIiR7YmFzZV9iaW5kaXJ9L2RmIgorQUxURVJOQVRJVkVfVEFSR0VUW2RmXSA9ICIke2JpbmRpcn0vZGYuJHtCUE59IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2RmLjFdID0gIiR7bWFuZGlyfS9tYW4xL2RmLjEiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtsYnJhY2tldF0gPSAiJHtiaW5kaXJ9L1siCitBTFRFUk5BVElWRV9UQVJHRVRbbGJyYWNrZXRdID0gIiR7YmluZGlyfS9sYnJhY2tldC4ke0JQTn0iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbGJyYWNrZXQuMV0gPSAiJHttYW5kaXJ9L21hbjEvbGJyYWNrZXQuMSIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2dyb3Vwcy4xXSA9ICIke21hbmRpcn0vbWFuMS9ncm91cHMuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt1cHRpbWUuMV0gPSAiJHttYW5kaXJ9L21hbjEvdXB0aW1lLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVba2lsbC4xXSA9ICIke21hbmRpcn0vbWFuMS9raWxsLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3RhdC4xXSA9ICIke21hbmRpcn0vbWFuMS9zdGF0LjEiCisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKwlmb3IgcHJvZyBpbiBkLmdldFZhcignYmFzZV9iaW5kaXJfcHJvZ3MnLCBUcnVlKS5zcGxpdCgpOgorCQlkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIHByb2csICclcy8lcycgJSAoZC5nZXRWYXIoJ2Jhc2VfYmluZGlyJywgVHJ1ZSksIHByb2cpKQorCisJZm9yIHByb2cgaW4gZC5nZXRWYXIoJ3NiaW5kaXJfcHJvZ3MnLCBUcnVlKS5zcGxpdCgpOgorCQlkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIHByb2csICclcy8lcycgJSAoZC5nZXRWYXIoJ3NiaW5kaXInLCBUcnVlKSwgcHJvZykpCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy13YWl0L2RidXMtd2FpdF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMtd2FpdC9kYnVzLXdhaXRfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MWRjODYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMtd2FpdC9kYnVzLXdhaXRfZ2l0LmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiQSBzaW1wbGUgdG9vbCB0byB3YWl0IGZvciBhIHNwZWNpZmljIHNpZ25hbCBvdmVyIERCdXMiCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9kYnVzLXdhaXQiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCisKK0RFUEVORFMgPSAiZGJ1cyIKKworU1JDUkVWID0gIjZjYzYwNzdhMzZmZTI2NDhhNWY5OTNmZTdjMTZjOTYzMmY5NDY1MTciCitQViA9ICIwLjErZ2l0JHtTUkNQVn0iCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy1nbGliLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmQwMTMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYi5pbmMKQEAgLTAsMCArMSw0MyBAQAorU1VNTUFSWSA9ICJIaWdoIGxldmVsIGxhbmd1YWdlIChHTGliKSBiaW5kaW5nIGZvciBELUJ1cyIKK0RFU0NSSVBUSU9OID0gIkdMaWIgYmluZGluZ3MgZm9yIHRoZSBELUJ1cyBtZXNzYWdlIGJ1cyB0aGF0IGludGVncmF0ZSBcCit0aGUgRC1CdXMgbGlicmFyeSB3aXRoIHRoZSBHTGliIHRocmVhZCBhYnN0cmFjdGlvbiBhbmQgbWFpbiBsb29wLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL1NvZnR3YXJlL2RidXMiCitMSUNFTlNFID0gIkFGTC0yIHwgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Y2Y1YjNhMmY3MDgzNzUwZDUwNDMzMzExNGU3Mzg2NTYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZGJ1cy9kYnVzLWdsaWIuaDtiZWdpbmxpbmU9NztlbmRsaW5lPTIxO21kNT03NzU1YzlkN2FiY2NkNWRiZDI1YTZhOTc0NTM4YmIzYyIKK1NFQ1RJT04gPSAiYmFzZSIKKworREVQRU5EUyA9ICJleHBhdCBnbGliLTIuMCB2aXJ0dWFsL2xpYmludGwgZGJ1cy1nbGliLW5hdGl2ZSBkYnVzIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiZ2xpYi0yLjAtbmF0aXZlIGRidXMtbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly9kYnVzLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy9kYnVzLWdsaWIvZGJ1cy1nbGliLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9uby1leGFtcGxlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90ZXN0LWluc3RhbGwtbWFrZWZpbGUucGF0Y2ggXAorIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dAorCisjZGVmYXVsdCBkaXNhYmxlIHJlZ3Jlc3Npb24gdGVzdHMsIHNvbWUgdW5pdCB0ZXN0IGNvZGUgaW4gbm9uIHRlc3RpbmcgY29kZQorI1BBQ0tBR0VDT05GSUdfcG4tJHtQTn0gPSAidGVzdHMiIGVuYWJsZSByZWdyZXNzaW9uIHRlc3RzIGxvY2FsLmNvbmYKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW3Rlc3RzXSA9ICItLWVuYWJsZS10ZXN0cywsLCIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1pbnRyb3NwZWN0LXhtbD0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2RidXMvZGJ1cy1idXMtaW50cm9zcGVjdC54bWwgXAorICAgICAgICAgICAgICAgIC0td2l0aC1kYnVzLWJpbmRpbmctdG9vbD0ke1NUQUdJTkdfQklORElSX05BVElWRX0vZGJ1cy1iaW5kaW5nLXRvb2wiCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0td2l0aC1pbnRyb3NwZWN0LXhtbD0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2RidXMvZGJ1cy1idXMtaW50cm9zcGVjdC54bWwiCisKK1BBQ0tBR0VTICs9ICIke1BOfS1iYXNoLWNvbXBsZXRpb24gJHtQTn0tdGVzdHMtZGJnICR7UE59LXRlc3RzIgorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTfSIKK0ZJTEVTXyR7UE59LWJhc2gtY29tcGxldGlvbiA9ICIke3N5c2NvbmZkaXJ9L2Jhc2hfY29tcGxldGlvbi5kL2RidXMtYmFzaC1jb21wbGV0aW9uLnNoIFwKKyAgICR7bGliZXhlY2Rpcn0vZGJ1cy1iYXNoLWNvbXBsZXRpb24taGVscGVyIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vZGJ1cy0xLjAvaW5jbHVkZSAke2JpbmRpcn0vZGJ1cy1nbGliLXRvb2wiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9kYnVzLWJpbmRpbmctdG9vbCIKKworUkRFUEVORFNfJHtQTn0tdGVzdHMgKz0gImRidXMteDExIgorRklMRVNfJHtQTn0tdGVzdHMgPSAiJHtkYXRhZGlyfS8ke0JQTn0vdGVzdHMiCitGSUxFU18ke1BOfS10ZXN0cy1kYmcgPSAiJHtkYXRhZGlyfS8ke0JQTn0vdGVzdHMvLmRlYnVnLyogXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vJHtCUE59L3Rlc3RzL2NvcmUvLmRlYnVnLyogXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vJHtCUE59L3Rlc3RzL2ludGVyZmFjZXMvLmRlYnVnLyoiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYi9uby1leGFtcGxlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWIvbm8tZXhhbXBsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJiNDk2NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWIvbm8tZXhhbXBsZXMucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorRGlzYWJsZSBjb21waWxpbmcgZXhhbXBsZXMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK1NpZ25lZC1vZmYtYnk6IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBkYnVzLWdsaWItMC43MC9kYnVzL01ha2VmaWxlLmFtLm9yaWcJMjAwNi0wNy0yMyAxNjowNDo0My4wMDAwMDAwMDAgKzAyMDAKKysrKyBkYnVzLWdsaWItMC43MC9kYnVzL01ha2VmaWxlLmFtCTIwMDYtMDctMjMgMTY6MDQ6NTIuMDAwMDAwMDAwICswMjAwCitAQCAtMSw0ICsxLDQgQEAKKy1TVUJESVJTID0gLiBleGFtcGxlcworK1NVQkRJUlMgPSAuCisgCisgSU5DTFVERVM9LUkkKHRvcF9zcmNkaXIpICQoREJVU19DRkxBR1MpICQoREJVU19HTElCX0NGTEFHUykgJChEQlVTX0dMSUJfVE9PTF9DRkxBR1MpIC1EREJVU19DT01QSUxBVElPTj0xIC1EREJVU19MT0NBTEVESVI9XCIkKHByZWZpeCkvQERBVEFESVJOQU1FQC9sb2NhbGVcIiAKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWIvdGVzdC1pbnN0YWxsLW1ha2VmaWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYi90ZXN0LWluc3RhbGwtbWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI3YzgyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWIvdGVzdC1pbnN0YWxsLW1ha2VmaWxlLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0NoYW5nZSBNYWtlZmlsZS5hbSB0byBpbnN0YWxsIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIHRlc3QgcGFja2FnZSBwdXJwb3NlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Rlc3Qgbm90IGluc3RhbGwgaXMgZm9yIHB1cnBvc2UgZnJvbSB1cHN0cmVhbV0KKworU2lnbmVkLW9mZi1ieTogWWFvIFpoYW8gPHlhby56aGFvQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIHRlc3QvTWFrZWZpbGUuYW0gICAgICAgICAgICB8IDMgKystCisgdGVzdC9jb3JlL01ha2VmaWxlLmFtICAgICAgIHwgMyArKy0KKyB0ZXN0L2ludGVyZmFjZXMvTWFrZWZpbGUuYW0gfCAzICsrLQorIDMgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdGVzdC9NYWtlZmlsZS5hbSBiL3Rlc3QvTWFrZWZpbGUuYW0KK2luZGV4IDM3OWM4YzMuLjY1ODA5MjcgMTAwNjQ0CistLS0gYS90ZXN0L01ha2VmaWxlLmFtCisrKysgYi90ZXN0L01ha2VmaWxlLmFtCitAQCAtNDgsNyArNDgsOCBAQCBURVNUUyA9IFwKKyAJJCh0ZXN0X3NjcmlwdHMpIFwKKyAJJChOVUxMKQorIAorLW5vaW5zdF9QUk9HUkFNUyA9IFwKKyt0ZXN0ZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAvdGVzdHMKKyt0ZXN0X1BST0dSQU1TID0gXAorIAkkKHRlc3RfcHJvZ3JhbXMpIFwKKyAJJCh0ZXN0X3JlbGF0ZWRfcHJvZ3JhbXMpIFwKKyAJJChOVUxMKQorZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9NYWtlZmlsZS5hbSBiL3Rlc3QvY29yZS9NYWtlZmlsZS5hbQoraW5kZXggZTRiY2ViNC4uNTRiMDc3ZCAxMDA2NDQKKy0tLSBhL3Rlc3QvY29yZS9NYWtlZmlsZS5hbQorKysrIGIvdGVzdC9jb3JlL01ha2VmaWxlLmFtCitAQCAtNjQsNyArNjQsOCBAQCBlbmRpZgorIAorICMjIHdlIHVzZSBub2luc3RfUFJPR1JBTVMgbm90IGNoZWNrX1BST0dSQU1TIGZvciBURVNUUyBzbyB0aGF0IHdlCisgIyMgYnVpbGQgZXZlbiB3aGVuIG5vdCBkb2luZyAibWFrZSBjaGVjayIKKy1ub2luc3RfUFJPR1JBTVMgPSBcCisrdGVzdGRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VAL3Rlc3RzL2NvcmUKKyt0ZXN0X1BST0dSQU1TID0gXAorIAl0ZXN0LWRidXMtZ2xpYiBcCisgCXRlc3QtZXJyb3ItbWFwcGluZyBcCisgCXRlc3Qtc2VydmljZS1nbGliIFwKK2RpZmYgLS1naXQgYS90ZXN0L2ludGVyZmFjZXMvTWFrZWZpbGUuYW0gYi90ZXN0L2ludGVyZmFjZXMvTWFrZWZpbGUuYW0KK2luZGV4IGE5NGQwOGQuLjcwN2RjYWMgMTAwNjQ0CistLS0gYS90ZXN0L2ludGVyZmFjZXMvTWFrZWZpbGUuYW0KKysrKyBiL3Rlc3QvaW50ZXJmYWNlcy9NYWtlZmlsZS5hbQorQEAgLTU3LDcgKzU3LDggQEAgaWYgREJVU19CVUlMRF9URVNUUworIAorICMjIHdlIHVzZSBub2luc3RfUFJPR1JBTVMgbm90IGNoZWNrX1BST0dSQU1TIGZvciBURVNUUyBzbyB0aGF0IHdlCisgIyMgYnVpbGQgZXZlbiB3aGVuIG5vdCBkb2luZyAibWFrZSBjaGVjayIKKy1ub2luc3RfUFJPR1JBTVMgPSB0ZXN0LXNlcnZpY2UgdGVzdC1jbGllbnQKKyt0ZXN0ZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAvdGVzdHMvaW50ZXJmYWNlcworK3Rlc3RfUFJPR1JBTVMgPSB0ZXN0LXNlcnZpY2UgdGVzdC1jbGllbnQKKyAKKyB0ZXN0X3NlcnZpY2VfU09VUkNFUyA9IFwKKyAJdGVzdC1pbnRlcmZhY2VzLmMgXAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy1nbGliXzAuMTA0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYl8wLjEwNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTI2M2MwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYl8wLjEwNC5iYgpAQCAtMCwwICsxLDQgQEAKK3JlcXVpcmUgZGJ1cy1nbGliLmluYworCitTUkNfVVJJW21kNXN1bV0gPSAiNTQ5N2QyMDcwNzA5Y2Y3OTZmMTg3OGM3NWE3MmEwMzkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmZjMWYxYTgyYmZjM2VjM2VjYWZlMDRkMGU4N2JhYjdlOTk5ZjUwZGNlNGY0YTM0ZDBiODljYWY2YmQ4MjFmNiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLXRlc3RfMS44LjIwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtdGVzdF8xLjguMjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA0MDcwYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLXRlc3RfMS44LjIwLmJiCkBAIC0wLDAgKzEsNjEgQEAKK1NVTU1BUlkgPSAiRC1CdXMgdGVzdCBwYWNrYWdlIChmb3IgRC1idXMgZnVuY3Rpb25hbGl0eSB0ZXN0aW5nIG9ubHkpIgorSE9NRVBBR0UgPSAiaHR0cDovL2RidXMuZnJlZWRlc2t0b3Aub3JnIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJBRkwtMiB8IEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTEwZGRlZDNiNTgxNDhmM2YxZmQ4MDRiMjYzNTRhZjNlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RidXMvZGJ1cy5oO2JlZ2lubGluZT02O2VuZGxpbmU9MjA7bWQ1PTc3NTVjOWQ3YWJjY2Q1ZGJkMjVhNmE5NzQ1MzhiYjNjIgorCitERVBFTkRTID0gInB5dGhvbi1weWdvYmplY3QgZGJ1cyBkYnVzLWdsaWIiCisKK1JERVBFTkRTXyR7UE59ICs9ICJtYWtlIgorUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKKworU1JDX1VSSSA9ICJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvZGJ1cy9kYnVzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly90bXBkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGJ1cy0xLmluaXQgIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9weXRob24tY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NsZWFyLWd1aWRfZnJvbV9zZXJ2ZXItaWYtc2VuZF9uZWdvdGlhdGVfdW5peF9mLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjQ5ODkwYmJhYmVkYWIzYTFjM2Y0ZjczYzdmZjhiMmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWM0ZmJmNGM2NDYyMWM5NmU4NzFkYTkxZDJiNzI5YTViMDA1MzZlMTE2ZDNjNDYxMmE0NjlkOTI0YjFiNzAzYSIKKworUz0iJHtXT1JLRElSfS9kYnVzLSR7UFZ9IgorRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vZGJ1czoiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0IHB0ZXN0CisKK0VYVFJBX09FQ09ORl9YID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJy0td2l0aC14JywgJy0td2l0aG91dC14JywgZCl9IgorRVhUUkFfT0VDT05GX1hfY2xhc3MtbmF0aXZlID0gIi0td2l0aG91dC14IgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtdGVzdHMgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLW1vZHVsYXItdGVzdHMgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWluc3RhbGxlZC10ZXN0cyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtY2hlY2tzIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1hc3NlcnRzIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS12ZXJib3NlLW1vZGUgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS14bWwtZG9jcyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWRveHlnZW4tZG9jcyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWxpYmF1ZGl0IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtc3lzdGVtZCBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtZGJ1cy10ZXN0LWRpcj0ke1BURVNUX1BBVEh9IFwKKyAgICAgICAgICAgICAgICAke0VYVFJBX09FQ09ORl9YfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICA6Cit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJY2FzZTE9InNoZWxsIHByaW50ZiByZWZzIHN5c2xvZyIKKwlmb3IgaSBpbiAke2Nhc2UxfTsgZG8gaW5zdGFsbCAke0J9L3Rlc3QvdGVzdC0kaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0OyBkb25lCisJY2FzZTI9Im1hcnNoYWwgc3ludGF4IGNvcnJ1cHQgZGJ1cy1kYWVtb24gZGJ1cy1kYWVtb24tZWF2ZXNkcm9wIGxvb3BiYWNrIHJlbGF5IgorCWZvciBpIGluICR7Y2FzZTJ9OyBkbyBpbnN0YWxsICR7Qn0vdGVzdC8ubGlicy90ZXN0LSRpICR7RH0ke1BURVNUX1BBVEh9L3Rlc3Q7IGRvbmUKKwljYXNlMz0iYnVzIGJ1cy1zeXN0ZW0gYnVzLWxhdW5jaC1oZWxwZXIiCisJZm9yIGkgaW4gJHtjYXNlM307IGRvIGluc3RhbGwgJHtCfS9idXMvdGVzdC0kaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0OyBkb25lCisJaW5zdGFsbCAke0J9L2RidXMvdGVzdC1kYnVzICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKKwljcCAtciAke0J9L3Rlc3QvZGF0YSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0Cit9CitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiYmFzaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTcxMDgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMuaW5jCkBAIC0wLDAgKzEsMTcwIEBACitTVU1NQVJZID0gIkQtQnVzIG1lc3NhZ2UgYnVzIgorREVTQ1JJUFRJT04gPSAiRC1CdXMgaXMgYSBtZXNzYWdlIGJ1cyBzeXN0ZW0sIGEgc2ltcGxlIHdheSBmb3IgYXBwbGljYXRpb25zIHRvIHRhbGsgdG8gb25lIGFub3RoZXIuIEluIGFkZGl0aW9uIHRvIGludGVycHJvY2VzcyBjb21tdW5pY2F0aW9uLCBELUJ1cyBoZWxwcyBjb29yZGluYXRlIHByb2Nlc3MgbGlmZWN5Y2xlOyBpdCBtYWtlcyBpdCBzaW1wbGUgYW5kIHJlbGlhYmxlIHRvIGNvZGUgYSBcInNpbmdsZSBpbnN0YW5jZVwiIGFwcGxpY2F0aW9uIG9yIGRhZW1vbiwgYW5kIHRvIGxhdW5jaCBhcHBsaWNhdGlvbnMgYW5kIGRhZW1vbnMgb24gZGVtYW5kIHdoZW4gdGhlaXIgc2VydmljZXMgYXJlIG5lZWRlZC4iCitIT01FUEFHRSA9ICJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkFGTC0yIHwgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTBkZGVkM2I1ODE0OGYzZjFmZDgwNGIyNjM1NGFmM2UgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZGJ1cy9kYnVzLmg7YmVnaW5saW5lPTY7ZW5kbGluZT0yMDttZDU9Nzc1NWM5ZDdhYmNjZDVkYmQyNWE2YTk3NDUzOGJiM2MiCitERVBFTkRTID0gImV4cGF0IHZpcnR1YWwvbGliaW50bCIKK1JERVBFTkRTX2RidXNfY2xhc3MtbmF0aXZlID0gIiIKK1JERVBFTkRTX2RidXNfY2xhc3MtbmF0aXZlc2RrID0gIiIKK1BBQ0tBR0VTICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B0ZXN0JywgJyR7UE59LXB0ZXN0JywgJycsIGQpfSIKK0FMTE9XX0VNUFRZX2RidXMtcHRlc3QgPSAiMSIKK1JERVBFTkRTX2RidXMtcHRlc3RfY2xhc3MtdGFyZ2V0ID0gImRidXMtdGVzdC1wdGVzdCIKKworU1JDX1VSSSA9ICJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvZGJ1cy9kYnVzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly90bXBkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGJ1cy0xLmluaXQgXAorICAgICAgICAgICBmaWxlOi8vb3MtdGVzdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jbGVhci1ndWlkX2Zyb21fc2VydmVyLWlmLXNlbmRfbmVnb3RpYXRlX3VuaXhfZi5wYXRjaCBcCisiCisKK2luaGVyaXQgdXNlcmFkZCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgdXBkYXRlLXJjLmQKKworSU5JVFNDUklQVF9OQU1FID0gImRidXMtMSIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDAyIDUgMyAyIC4gc3RvcCAyMCAwIDEgNiAuIgorCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX1VQREFURVJDRF9CQkNMQVNTIiwgIjEiKQorfQorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorR1JPVVBBRERfUEFSQU1fJHtQTn0gPSAiLXIgbmV0ZGV2IgorVVNFUkFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSAtLWhvbWUgJHtsb2NhbHN0YXRlZGlyfS9saWIvZGJ1cyBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tbm8tY3JlYXRlLWhvbWUgLS1zaGVsbCAvYmluL2ZhbHNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS11c2VyLWdyb3VwIG1lc3NhZ2VidXMiCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L2RidXMtMS9zeXN0ZW0uY29uZiAke3N5c2NvbmZkaXJ9L2RidXMtMS9zZXNzaW9uLmNvbmYiCisKK0RFQklBTk5BTUVfJHtQTn0gPSAiZGJ1cy0xIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tbGliIgorCitPTERQS0dOQU1FID0gImRidXMteDExIgorT0xEUEtHTkFNRV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorCisjIGZvciBjb21wYXRpYmlsaXR5CitSUFJPVklERVNfJHtQTn0gPSAiJHtPTERQS0dOQU1FfSIKK1JSRVBMQUNFU18ke1BOfSArPSAiJHtPTERQS0dOQU1FfSIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L2RidXMtZGFlbW9uKiBcCisgICAgICAgICAgICAgICAke2JpbmRpcn0vZGJ1cy11dWlkZ2VuIFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9kYnVzLWNsZWFudXAtc29ja2V0cyBcCisgICAgICAgICAgICAgICAke2JpbmRpcn0vZGJ1cy1zZW5kIFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9kYnVzLW1vbml0b3IgXAorICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RidXMtbGF1bmNoIFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9kYnVzLXJ1bi1zZXNzaW9uIFwKKyAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vZGJ1cyogXAorICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfSBcCisgICAgICAgICAgICAgICAke2xvY2Fsc3RhdGVkaXJ9IFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3NlcnZpY2VzIFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcyBcCisgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyIKK0ZJTEVTXyR7UE59LWxpYiA9ICIke2xpYmRpcn0vbGliKi5zby4qIgorUlJFQ09NTUVORFNfJHtQTn0tbGliID0gIiR7UE59IgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vZGJ1cy0xLjAvaW5jbHVkZSAke2JpbmRpcn0vZGJ1cy1nbGliLXRvb2wiCisKK3BrZ19wb3N0aW5zdF9kYnVzKCkgeworCSMgSWYgYm90aCBzeXN0ZW1kIGFuZCBzeXN2aW5pdCBhcmUgZW5hYmxlZCwgbWFzayB0aGUgZGJ1cy0xIGluaXQgc2NyaXB0CisgICAgICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kIHN5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkJaWYgWyAtbiAiJEQiIF07IHRoZW4KKwkJCU9QVFM9Ii0tcm9vdD0kRCIKKwkJZmkKKwkJc3lzdGVtY3RsICRPUFRTIG1hc2sgZGJ1cy0xLnNlcnZpY2UKKwlmaQorCisJaWYgWyAteiAiJEQiIF0gJiYgWyAtZSAvZXRjL2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCBdIDsgdGhlbgorCQkvZXRjL2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCB1cGRhdGUKKwlmaQorfQorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXRlc3RzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUteG1sLWRvY3MgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1kb3h5Z2VuLWRvY3MgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1saWJhdWRpdCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXN5c3RlbWQgXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1kYnVzLWdsaWIiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLWRpc2FibGUtc2VsaW51eCIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICdzeXN0ZW1kJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID0gIiIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlc2RrID0gIiIKKworIyBXb3VsZCBsaWtlIHRvIC0tZW5hYmxlLXN5c3RlbWQgYnV0IHRoYXQncyBhIGNpcmN1bGFyIGJ1aWxkLWRlcGVuZGVuY3kgYmV0d2VlbgorIyBzeXN0ZW1kPC0+ZGJ1cworUEFDS0FHRUNPTkZJR1tzeXN0ZW1kXSA9ICItLXdpdGgtc3lzdGVtZHN5c3RlbXVuaXRkaXI9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8sLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyIgorUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0td2l0aC14IC0tZW5hYmxlLXgxMS1hdXRvbGF1bmNoLC0td2l0aG91dC14IC0tZGlzYWJsZS14MTEtYXV0b2xhdW5jaCwgdmlydHVhbC9saWJ4MTEgbGlic20iCisKK2RvX2luc3RhbGwoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCQlzZWQgJ3M6QGJpbmRpckA6JHtiaW5kaXJ9OicgPCAke1dPUktESVJ9L2RidXMtMS5pbml0ID4ke1dPUktESVJ9L2RidXMtMS5pbml0LnNoCisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2RidXMtMS5pbml0LnNoICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9kYnVzLTEKKwlmaQorCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJZm9yIGkgaW4gZGJ1cy50YXJnZXQud2FudHMgc29ja2V0cy50YXJnZXQud2FudHMgbXVsdGktdXNlci50YXJnZXQud2FudHM7IGRvIFwKKwkJCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vJGk7IGRvbmUKKwkJaW5zdGFsbCAtbSAwNjQ0ICR7Qn0vYnVzL2RidXMuc2VydmljZSAke0J9L2J1cy9kYnVzLnNvY2tldCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKwkJY2QgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZGJ1cy50YXJnZXQud2FudHMvCisJCWxuIC1mcyAuLi9kYnVzLnNvY2tldCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kYnVzLnRhcmdldC53YW50cy9kYnVzLnNvY2tldAorCQlsbiAtZnMgLi4vZGJ1cy5zb2NrZXQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc29ja2V0cy50YXJnZXQud2FudHMvZGJ1cy5zb2NrZXQKKwkJbG4gLWZzIC4uL2RidXMuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9tdWx0aS11c2VyLnRhcmdldC53YW50cy9kYnVzLnNlcnZpY2UKKwlmaQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCWVjaG8gImQgbWVzc2FnZWJ1cyBtZXNzYWdlYnVzIDA3NTUgJHtsb2NhbHN0YXRlZGlyfS9ydW4vZGJ1cyBub25lIiBcCisJICAgICA+ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzLzk5X2RidXMKKworCisJbWtkaXIgLXAgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2RidXMKKworCWNob3duIG1lc3NhZ2VidXM6bWVzc2FnZWJ1cyAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvZGJ1cworCisJY2hvd24gcm9vdDptZXNzYWdlYnVzICR7RH0ke2xpYmV4ZWNkaXJ9L2RidXMtZGFlbW9uLWxhdW5jaC1oZWxwZXIKKwljaG1vZCA0NzU1ICR7RH0ke2xpYmV4ZWNkaXJ9L2RidXMtZGFlbW9uLWxhdW5jaC1oZWxwZXIKKworCSMgUmVtb3ZlIFJlZCBIYXQgaW5pdHNjcmlwdAorCXJtIC1yZiAke0R9JHtzeXNjb25mZGlyfS9yYy5kCisKKwkjIFJlbW92ZSBlbXB0eSB0ZXN0ZXhlYyBkaXJlY3RvcnkgYXMgd2UgZG9uJ3QgYnVpbGQgdGVzdHMKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9kYnVzLTEuMC90ZXN0CisKKwkjIFJlbW92ZSAvdmFyL3J1biBhcyBpdCBpcyBjcmVhdGVkIG9uIHN0YXJ0dXAKKwlybSAtcmYgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuCit9CisKK2RvX2luc3RhbGxfY2xhc3MtbmF0aXZlKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwkjIGZvciBkYnVzLWdsaWItbmF0aXZlIGludHJvc3BlY3Rpb24gZ2VuZXJhdGlvbgorCWluc3RhbGwgLWQgJHtEfSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZGJ1cy8KKwkjIE4uQi4gaXMgYmVsb3cgaW5zdGFsbCBhY3R1YWxseSByZXF1aXJlZD8KKwlpbnN0YWxsIC1tIDA2NDQgYnVzL3Nlc3Npb24uY29uZiAke0R9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9kYnVzL3Nlc3Npb24uY29uZgorCisJIyBkYnVzLWdsaWItbmF0aXZlIGFuZCBkYnVzLWdsaWIgbmVlZCB0aGlzIHhtbCBmaWxlCisJLi9idXMvZGJ1cy1kYWVtb24gLS1pbnRyb3NwZWN0ID4gJHtEfSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZGJ1cy9kYnVzLWJ1cy1pbnRyb3NwZWN0LnhtbAorCQorCSMgZGJ1cy1sYXVuY2ggaGFzIG5vIFggc3VwcG9ydCBzbyBsZXRzIG5vdCBpbnN0YWxsIGl0IGluIGNhc2UgdGhlIGhvc3QKKwkjIGhhcyBhIG1vcmUgZmVhdHVyZWQgYW5kIHVzZWZ1bCB2ZXJzaW9uCisJcm0gLWYgJHtEfSR7YmluZGlyfS9kYnVzLWxhdW5jaAorfQorCitkb19pbnN0YWxsX2NsYXNzLW5hdGl2ZXNkaygpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJIyBkYnVzLWxhdW5jaCBoYXMgbm8gWCBzdXBwb3J0IHNvIGxldHMgbm90IGluc3RhbGwgaXQgaW4gY2FzZSB0aGUgaG9zdAorCSMgaGFzIGEgbW9yZSBmZWF0dXJlZCBhbmQgdXNlZnVsIHZlcnNpb24KKwlybSAtZiAke0R9JHtiaW5kaXJ9L2RidXMtbGF1bmNoCisKKwkjIFJlbW92ZSAvdmFyL3J1biB0byBhdm9pZCBRQSBlcnJvcgorCXJtIC1yZiAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4KK30KK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworSU5TQU5FX1NLSVBfJHtQTn0tcHRlc3QgKz0gImJ1aWxkLWRlcHMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9jbGVhci1ndWlkX2Zyb21fc2VydmVyLWlmLXNlbmRfbmVnb3RpYXRlX3VuaXhfZi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL2NsZWFyLWd1aWRfZnJvbV9zZXJ2ZXItaWYtc2VuZF9uZWdvdGlhdGVfdW5peF9mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYjZkOWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9jbGVhci1ndWlkX2Zyb21fc2VydmVyLWlmLXNlbmRfbmVnb3RpYXRlX3VuaXhfZi5wYXRjaApAQCAtMCwwICsxLDEwNCBAQAorRnJvbSBiOGY4NGJkMzk0ODVkMzk3NzYyNWM5YThiOGU4Y2ZmNWQyM2JlNTZmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAyNyBGZWIgMjAxNCAwOTowNTowMiArMDgwMAorU3ViamVjdDogW1BBVENIXSBkYnVzOiBjbGVhciBndWlkX2Zyb21fc2VydmVyIGlmIHNlbmRfbmVnb3RpYXRlX3VuaXhfZmQKKyBmYWlsZWQKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworYnVzLXRlc3QgZGlzcGF0Y2ggdGVzdCBmYWlsZWQgd2l0aCBiZWxvdyBpbmZvcm1hdGlvbjoKKyAgICAuL2J1cy9idXMtdGVzdDogUnVubmluZyBtZXNzYWdlIGRpc3BhdGNoIHRlc3QKKyAgICBBY3RpdmF0aW5nIHNlcnZpY2UgbmFtZT0nb3JnLmZyZWVkZXNrdG9wLkRCdXMuVGVzdFN1aXRlRWNob1NlcnZpY2UnCisgICAgU3VjY2Vzc2Z1bGx5IGFjdGl2YXRlZCBzZXJ2aWNlICdvcmcuZnJlZWRlc2t0b3AuREJ1cy5UZXN0U3VpdGVFY2hvU2VydmljZScKKyAgICA2MzYzOiBhc3NlcnRpb24gZmFpbGVkICJfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJiBEQlVTX0FVVEhfQ0xJRU5UIChhdXRoKS0+Z3VpZF9mcm9tX3NlcnZlcikgPT0gMCIgZmlsZSAiZGJ1cy1hdXRoLmMiIGxpbmUgMTU0NSBmdW5jdGlvbiBwcm9jZXNzX29rCisgICAgICAuL2J1cy9idXMtdGVzdChfZGJ1c19wcmludF9iYWNrdHJhY2UrMHgyOSkgWzB4ODBjYjk2OV0KKyAgICAgIC4vYnVzL2J1cy10ZXN0KF9kYnVzX2Fib3J0KzB4MTQpIFsweDgwY2ZiNDRdCisgICAgICAuL2J1cy9idXMtdGVzdChfZGJ1c19yZWFsX2Fzc2VydCsweDUzKSBbMHg4MGI1MmMzXQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MGUyNGRhXQorICAgICAgLi9idXMvYnVzLXRlc3QoX2RidXNfYXV0aF9kb193b3JrKzB4Mzg4KSBbMHg4MGUzODQ4XQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MGFlYTQ5XQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MGFmZmRlXQorICAgICAgLi9idXMvYnVzLXRlc3QoX2RidXNfdHJhbnNwb3J0X2hhbmRsZV93YXRjaCsweGIxKSBbMHg4MGFkODQxXQorICAgICAgLi9idXMvYnVzLXRlc3QoX2RidXNfY29ubmVjdGlvbl9oYW5kbGVfd2F0Y2grMHgxMDQpIFsweDgwODkxNzRdCisgICAgICAuL2J1cy9idXMtdGVzdChkYnVzX3dhdGNoX2hhbmRsZSsweGQ4KSBbMHg4MGIxNWU4XQorICAgICAgLi9idXMvYnVzLXRlc3QoX2RidXNfbG9vcF9pdGVyYXRlKzB4NGE5KSBbMHg4MGQxNTA5XQorICAgICAgLi9idXMvYnVzLXRlc3QoYnVzX3Rlc3RfcnVuX2NsaWVudHNfbG9vcCsweDVkKSBbMHg4MDgxMjlkXQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MDZjYWIwXQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MDZlMGNhXQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MDZkYTZmXQorICAgICAgLi9idXMvYnVzLXRlc3QoX2RidXNfdGVzdF9vb21faGFuZGxpbmcrMHgxOGMpIFsweDgwYjVjOGNdCisgICAgICAuL2J1cy9idXMtdGVzdCgpIFsweDgwNmY3MjNdCisgICAgICAuL2J1cy9idXMtdGVzdChidXNfZGlzcGF0Y2hfdGVzdCsweDNjKSBbMHg4MDcxYWFjXQorICAgICAgLi9idXMvYnVzLXRlc3QobWFpbisweDFiNykgWzB4ODA1YWNjN10KKyAgICAgIC9saWIvbGliYy5zby42KF9fbGliY19zdGFydF9tYWluKzB4ZjMpIFsweDQ1ZjkxOWIzXQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MDVhZTM5XQorCitUaGUgc3RhY2sgaXMgYmVsb3c6CisgICAgIzAgIDB4ZmZmZmU0MjUgaW4gX19rZXJuZWxfdnN5c2NhbGwgKCkKKyAgICAjMSAgMHg0NWZhNjJkNiBpbiByYWlzZSAoKSBmcm9tIC9saWIvbGliYy5zby42CisgICAgIzIgIDB4NDVmYTk2NTMgaW4gYWJvcnQgKCkgZnJvbSAvbGliL2xpYmMuc28uNgorICAgICMzICAweDA4MGNmYjY1IGluIF9kYnVzX2Fib3J0ICgpIGF0IGRidXMtc3lzZGVwcy5jOjk0CisgICAgIzQgIDB4MDgwYjUyYzMgaW4gX2RidXNfcmVhbF9hc3NlcnQgKGNvbmRpdGlvbj0wLAorICAgICAgICBjb25kaXRpb25fdGV4dD1jb25kaXRpb25fdGV4dEBlbnRyeT0weDgxMTdhMzggIl9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoICgmIERCVVNfQVVUSF9DTElFTlQgKGF1dGgpLT5ndWlkX2Zyb21fc2VydmVyKSA9PSAwIiwKKyAgICAgICAgZmlsZT1maWxlQGVudHJ5PTB4ODExNzI3MyAiZGJ1cy1hdXRoLmMiLCBsaW5lPWxpbmVAZW50cnk9MTU0NSwKKyAgICAgICAgZnVuYz1mdW5jQGVudHJ5PTB4ODExN2Y4ZSA8X19GVU5DVElPTl9fLjM0OTI+ICJwcm9jZXNzX29rIikKKyAgICAgICAgZGF0YT0weDgxNTcyOTApIGF0IGRidXMtY29ubmVjdGlvbi5jOjE1MTUKKyAgICAjMCAgMHgwMDAwMDAzM2ZlZTM1M2U5IGluIHJhaXNlICgpIGZyb20gL2xpYjY0L2xpYmMuc28uNgorICAgICMxICAweDAwMDAwMDMzZmVlMzg1MDggaW4gYWJvcnQgKCkgZnJvbSAvbGliNjQvbGliYy5zby42CisgICAgIzIgIDB4MDAwMDAwMDAwMDQ3ZDU4NSBpbiBfZGJ1c19hYm9ydCAoKSBhdCBkYnVzLXN5c2RlcHMuYzo5NAorICAgICMzICAweDAwMDAwMDAwMDA0NjY0ODYgaW4gX2RidXNfcmVhbF9hc3NlcnQgKGNvbmRpdGlvbj08b3B0aW1pemVkIG91dD4sCisgICAgICAgIGNvbmRpdGlvbl90ZXh0PWNvbmRpdGlvbl90ZXh0QGVudHJ5PTB4NGMyOTg4ICJfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJiBEQlVTX0FVVEhfQ0xJRU5UIChhdXRoKS0+Z3VpZF9mcm9tX3NlcnZlcikgPT0gMCIsCisgICAgICAgIGZpbGU9ZmlsZUBlbnRyeT0weDRjMjFhNSAiZGJ1cy1hdXRoLmMiLCBsaW5lPWxpbmVAZW50cnk9MTU0NiwKKyAgICAgICAgZnVuYz1mdW5jQGVudHJ5PTB4NGMyZmNlIDxfX0ZVTkNUSU9OX18uMzg0NT4gInByb2Nlc3Nfb2siKQorICAgICAgICBhdCBkYnVzLWludGVybmFscy5jOjkzMQorICAgICM0ICAweDAwMDAwMDAwMDA0OGQ0MjQgaW4gcHJvY2Vzc19vayAoYXJnc19mcm9tX29rPTB4N2ZmZmZmZmZlNDgwLAorICAgICAgICBhdXRoPTB4NmZmMzQwKSBhdCBkYnVzLWF1dGguYzoxNTQ2CisgICAgIzUgIGhhbmRsZV9jbGllbnRfc3RhdGVfd2FpdGluZ19mb3JfZGF0YSAoYXV0aD0weDZmZjM0MCwKKyAgICAgICAgY29tbWFuZD08b3B0aW1pemVkIG91dD4sIGFyZ3M9MHg3ZmZmZmZmZmU0ODApIGF0IGRidXMtYXV0aC5jOjE5OTYKKyAgICAjNiAgMHgwMDAwMDAwMDAwNDhlNzg5IGluIHByb2Nlc3NfY29tbWFuZCAoYXV0aD0weDZmZjM0MCkgYXQgZGJ1cy1hdXRoLmM6MjIwOAorICAgICM3ICBfZGJ1c19hdXRoX2RvX3dvcmsgKGF1dGg9MHg2ZmYzNDApIGF0IGRidXMtYXV0aC5jOjI0NTgKKyAgICAjOCAgMHgwMDAwMDAwMDAwNDYwOTFkIGluIGRvX2F1dGhlbnRpY2F0aW9uICgKKyAgICAgICAgdHJhbnNwb3J0PXRyYW5zcG9ydEBlbnRyeT0weDZmZmFhMCwgZG9fcmVhZGluZz1kb19yZWFkaW5nQGVudHJ5PTEsCisgICAgICAgIGRvX3dyaXRpbmc9ZG9fd3JpdGluZ0BlbnRyeT0wLAorICAgICAgICBhdXRoX2NvbXBsZXRlZD1hdXRoX2NvbXBsZXRlZEBlbnRyeT0weDdmZmZmZmZmZTU1YykKKyAgICAgICAgYXQgZGJ1cy10cmFuc3BvcnQtc29ja2V0LmM6NDQyCisgICAgIzkgIDB4MDAwMDAwMDAwMDQ2MWQwOCBpbiBzb2NrZXRfaGFuZGxlX3dhdGNoICh0cmFuc3BvcnQ9MHg2ZmZhYTAsCisgICAgICAgIHdhdGNoPTB4NmY0MTkwLCBmbGFncz0xKSBhdCBkYnVzLXRyYW5zcG9ydC1zb2NrZXQuYzo5MjEKKyAgICAjMTAgMHgwMDAwMDAwMDAwNDVmYTNhIGluIF9kYnVzX3RyYW5zcG9ydF9oYW5kbGVfd2F0Y2ggKHRyYW5zcG9ydD0weDZmZmFhMCwKKworT25jZSBzZW5kX25lZ290aWF0ZV91bml4X2ZkIGZhaWxlZCwgdGhpcyBmYWlsdXJlIHdpbGwgaGFwcGVuLCBzaW5jZQorYXV0aC0+Z3VpZF9mcm9tX3NlcnZlciBoYXMgYmVlbiBzZXQgdG8gc29tZSB2YWx1ZSBiZWZvcmUKK3NlbmRfbmVnb3RpYXRlX3VuaXhfZmQuIHNlbmRfbmVnb3RpYXRlX3VuaXhfZmQgZmFpbHVyZSB3aWxsIGxlYWQgdG8KK3RoaXMgYXV0aCBiZSBoYW5kbGVkIGJ5IHByb2Nlc3Nfb2sgYWdhaW4sIGJ1dCB0aGlzIGF1dGgtPmd1aWRfZnJvbV9zZXJ2ZXIKK2lzIG5vdCB6ZXJvLgorCitTbyB3ZSBzaG91bGQgY2xlYXIgYXV0aC0+Z3VpZF9mcm9tX3NlcnZlciBpZiBzZW5kX25lZ290aWF0ZV91bml4X2ZkIGZhaWxlZAorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBkYnVzL2RidXMtYXV0aC5jIHwgICAgOSArKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLWF1dGguYyBiL2RidXMvZGJ1cy1hdXRoLmMKK2luZGV4IGQyYzM3YTcuLjM3YjQ1YzYgMTAwNjQ0CistLS0gYS9kYnVzL2RidXMtYXV0aC5jCisrKysgYi9kYnVzL2RidXMtYXV0aC5jCitAQCAtMTU3MSw4ICsxNTcxLDEzIEBAIHByb2Nlc3Nfb2soREJ1c0F1dGggKmF1dGgsCisgICBfZGJ1c192ZXJib3NlICgiR290IEdVSUQgJyVzJyBmcm9tIHRoZSBzZXJ2ZXJcbiIsCisgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKCYgREJVU19BVVRIX0NMSUVOVCAoYXV0aCktPmd1aWRfZnJvbV9zZXJ2ZXIpKTsKKyAKKy0gIGlmIChhdXRoLT51bml4X2ZkX3Bvc3NpYmxlKQorLSAgICByZXR1cm4gc2VuZF9uZWdvdGlhdGVfdW5peF9mZChhdXRoKTsKKysgIGlmIChhdXRoLT51bml4X2ZkX3Bvc3NpYmxlKSB7CisrICAgICBpZiAoIXNlbmRfbmVnb3RpYXRlX3VuaXhfZmQoYXV0aCkpIHsKKysgICAgICAgICBfZGJ1c19zdHJpbmdfc2V0X2xlbmd0aCAoJiBEQlVTX0FVVEhfQ0xJRU5UIChhdXRoKS0+Z3VpZF9mcm9tX3NlcnZlciwgMCk7CisrICAgICAgICAgcmV0dXJuIEZBTFNFOworKyAgICAgfQorKyAgICAgcmV0dXJuIFRSVUU7CisrICB9CisgCisgICBfZGJ1c192ZXJib3NlKCJOb3QgbmVnb3RpYXRpbmcgdW5peCBmZCBwYXNzaW5nLCBzaW5jZSBub3QgcG9zc2libGVcbiIpOworICAgcmV0dXJuIHNlbmRfYmVnaW4gKGF1dGgpOworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9kYnVzLTEuaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL2RidXMtMS5pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYzg2MjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9kYnVzLTEuaW5pdApAQCAtMCwwICsxLDEyMyBAQAorIyEgL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgZGJ1cworIyBSZXF1aXJlZC1TdGFydDogICAgJHJlbW90ZV9mcyAkc3lzbG9nCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkcmVtb3RlX2ZzICRzeXNsb2cKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDEKKyMgU2hvcnQtRGVzY3JpcHRpb246IEQtQnVzIHN5c3RlbXdpZGUgbWVzc2FnZSBidXMKKyMgRGVzY3JpcHRpb246ICAgICAgIEQtQnVzIGlzIGEgc2ltcGxlIGludGVycHJvY2VzcyBtZXNzYWdpbmcgc3lzdGVtLCB1c2VkCisjICAgICAgICAgICAgICAgICAgICBmb3Igc2VuZGluZyBtZXNzYWdlcyBiZXR3ZWVuIGFwcGxpY2F0aW9ucy4KKyMjIyBFTkQgSU5JVCBJTkZPCisjCisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIyBEZWJpYW4gaW5pdC5kIHNjcmlwdCBmb3IgRC1CVVMKKyMgQ29weXJpZ2h0IMKpIDIwMDMgQ29saW4gV2FsdGVycyA8d2FsdGVyc0BkZWJpYW4ub3JnPgorCisjIHNldCAtZQorCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworREFFTU9OPUBiaW5kaXJAL2RidXMtZGFlbW9uCitOQU1FPWRidXMKK0RBRU1PTlVTRVI9bWVzc2FnZWJ1cyAgICAgICAgICAgIyBtdXN0IG1hdGNoIC9ldGMvZGJ1cy0xL3N5c3RlbS5jb25mCitQSURGSUxFPS92YXIvcnVuL21lc3NhZ2VidXMucGlkICMgbXVzdCBtYXRjaCAvZXRjL2RidXMtMS9zeXN0ZW0uY29uZgorVVVJRERJUj0vdmFyL2xpYi9kYnVzCitERVNDPSJzeXN0ZW0gbWVzc2FnZSBidXMiCitFVkVOVERJUj0vZXRjL2RidXMtMS9ldmVudC5kCisKK3Rlc3QgLXggJERBRU1PTiB8fCBleGl0IDAKKworIyBTb3VyY2UgZGVmYXVsdHMgZmlsZTsgZWRpdCB0aGF0IGZpbGUgdG8gY29uZmlndXJlIHRoaXMgc2NyaXB0LgorRU5BQkxFRD0xCitQQVJBTVM9IiIKK2lmIFsgLWUgL2V0Yy9kZWZhdWx0L2RidXMgXTsgdGhlbgorICAuIC9ldGMvZGVmYXVsdC9kYnVzCitmaQorCit0ZXN0ICIkRU5BQkxFRCIgIT0gIjAiIHx8IGV4aXQgMAorCitzdGFydF9pdF91cCgpCit7CisgIG1rZGlyIC1wICJgZGlybmFtZSAkUElERklMRWAiCisgIGlmIFsgLWUgJFBJREZJTEUgXTsgdGhlbgorICAgIFBJRERJUj0vcHJvYy8kKGNhdCAkUElERklMRSkKKyAgICBpZiBbIC1kICR7UElERElSfSAtYSAgIiQocmVhZGxpbmsgLWYgJHtQSURESVJ9L2V4ZSkiID0gIiR7REFFTU9OfSIgXTsgdGhlbiAKKyAgICAgIGVjaG8gIiRERVNDIGFscmVhZHkgc3RhcnRlZDsgbm90IHN0YXJ0aW5nLiIKKyAgICBlbHNlCisgICAgICBlY2hvICJSZW1vdmluZyBzdGFsZSBQSUQgZmlsZSAkUElERklMRS4iCisgICAgICBybSAtZiAkUElERklMRQorICAgIGZpCisgIGZpCisKKyAgaWYgWyAhIC1kICRVVUlERElSIF07IHRoZW4KKyAgICBta2RpciAtcCAkVVVJRERJUgorICAgIGNob3duICREQUVNT05VU0VSICRVVUlERElSCisgICAgY2hncnAgJERBRU1PTlVTRVIgJFVVSURESVIKKyAgZmkKKyAKKyAgZGJ1cy11dWlkZ2VuIC0tZW5zdXJlICAKKworICBlY2hvIC1uICJTdGFydGluZyAkREVTQzogIgorICBzdGFydC1zdG9wLWRhZW1vbiAtbyAtLXN0YXJ0IC0tcXVpZXQgLS1waWRmaWxlICRQSURGSUxFIFwKKyAgICAtLXVzZXIgJERBRU1PTlVTRVIgLS1leGVjICREQUVNT04gLS0gLS1zeXN0ZW0gJFBBUkFNUworICBlY2hvICIkTkFNRS4iCisgIGlmIFsgLWQgJEVWRU5URElSIF07IHRoZW4KKyAgICAgIHJ1bi1wYXJ0cyAtLWFyZz1zdGFydCAkRVZFTlRESVIKKyAgZmkKK30KKworc2h1dF9pdF9kb3duKCkKK3sKKyAgaWYgWyAtZCAkRVZFTlRESVIgXTsgdGhlbgorICAgICAgIyBUT0RPOiAtLXJldmVyc2Ugd2hlbiBidXN5Ym94IHN1cHBvcnRzIGl0CisgICAgICBydW4tcGFydHMgLS1hcmc9c3RvcCAkRVZFTlRESVIKKyAgZmkKKyAgZWNobyAtbiAiU3RvcHBpbmcgJERFU0M6ICIKKyAgc3RhcnQtc3RvcC1kYWVtb24gLW8gLS1zdG9wICAtLXF1aWV0IC0tcGlkZmlsZSAkUElERklMRSBcCisgICAgLS11c2VyICREQUVNT05VU0VSCisgICMgV2Ugbm8gbG9uZ2VyIGluY2x1ZGUgdGhlc2UgYXJndW1lbnRzIHNvIHRoYXQgc3RhcnQtc3RvcC1kYWVtb24KKyAgIyBjYW4gZG8gaXRzIGpvYiBldmVuIGdpdmVuIHRoYXQgd2UgbWF5IGhhdmUgYmVlbiB1cGdyYWRlZC4KKyAgIyBXZSByZWx5IG9uIHRoZSBwaWRmaWxlIGJlaW5nIHNhbmVseSBtYW5hZ2VkCisgICMgLS1leGVjICREQUVNT04gLS0gLS1zeXN0ZW0gJFBBUkFNUworICBlY2hvICIkTkFNRS4iCisgIHJtIC1mICRQSURGSUxFCit9CisKK3JlbG9hZF9pdCgpCit7CisgIGVjaG8gLW4gIlJlbG9hZGluZyAkREVTQyBjb25maWc6ICIKKyAgZGJ1cy1zZW5kIC0tcHJpbnQtcmVwbHkgLS1zeXN0ZW0gLS10eXBlPW1ldGhvZF9jYWxsIFwKKyAgICAgICAgICAgIC0tZGVzdD1vcmcuZnJlZWRlc2t0b3AuREJ1cyBcCisgICAgICAgICAgICAvIG9yZy5mcmVlZGVza3RvcC5EQnVzLlJlbG9hZENvbmZpZyA+IC9kZXYvbnVsbAorICAjIGhvcGVmdWxseSB0aGlzIGlzIGVub3VnaCB0aW1lIGZvciBkYnVzIHRvIHJlbG9hZCBpdCdzIGNvbmZpZyBmaWxlLgorICBlY2hvICJkb25lLiIKK30KKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgIHN0YXJ0X2l0X3VwCisgIDs7CisgIHN0b3ApCisgICAgc2h1dF9pdF9kb3duCisgIDs7CisgIHN0YXR1cykKKyAgICBzdGF0dXMgJERBRU1PTgorICAgIGV4aXQgJD8KKyAgOzsKKyAgcmVsb2FkfGZvcmNlLXJlbG9hZCkKKyAgICByZWxvYWRfaXQKKyAgOzsKKyAgcmVzdGFydCkKKyAgICBzaHV0X2l0X2Rvd24KKyAgICBzbGVlcCAxCisgICAgc3RhcnRfaXRfdXAKKyAgOzsKKyAgKikKKyAgICBlY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvJE5BTUUge3N0YXJ0fHN0b3B8c3RhdHVzfHJlc3RhcnR8cmVsb2FkfGZvcmNlLXJlbG9hZH0iID4mMgorICAgIGV4aXQgMQorICA7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL29zLXRlc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9vcy10ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YzI1N2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9vcy10ZXN0LnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK2RidXM6IHJlbW92ZSBidWlsZCBob3N0IHRlc3QgaW4gY29uZmlndXJlIHNjcmlwdAorCitUaGUgZGJ1cyBidWlsZCB0ZXN0cyB0aGUgYnVpbGQgaG9zdCB0byBkZXRlY3Qgd2hhdCBpbml0c2NyaXB0CitlbnZpcm9ubWVudCBpdCBleHBlY3RzLiAgUmVtb3ZlIHRoZSB0ZXN0IGFuZCBzZXQgaXQgdG8gInJlZGhhdCIKK3VuY29uZGl0aW9uYWxseSBhcyB0aGUgb2UtY29yZSBpbml0c2NyaXB0IGhhcyBhIHJlZGhhdC1zdHlsZSBwaWQgZmlsZQorcGF0aC4KKworU2lnbmVkLW9mZi1ieTogQW5keSBSb3NzIDxhbmR5LnJvc3NAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWRdCisKK2RpZmYgLXUgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKKy0tLSBhL2NvbmZpZ3VyZS5hYwkyMDEyLTA4LTI4IDExOjIzOjQzLjA0MDYwOTg3NCAtMDcwMAorKysrIGIvY29uZmlndXJlLmFjCTIwMTItMDgtMjggMTE6NTQ6MjUuNjAyOTEzOTQ1IC0wNzAwCitAQCAtMTM0OCwxOSArMTM0OCw4IEBACisgQVNfQUNfRVhQQU5EKEVYUEFOREVEX0xJQkVYRUNESVIsICIkbGliZXhlY2RpciIpCisgQVNfQUNfRVhQQU5EKEVYUEFOREVEX0RBVEFESVIsICIkZGF0YWRpciIpCisgCistIyMjIyBDaGVjayBvdXIgb3BlcmF0aW5nIHN5c3RlbQorLW9wZXJhdGluZ19zeXN0ZW09dW5rbm93bgorLWlmIHRlc3QgLWYgL2V0Yy9yZWRoYXQtcmVsZWFzZSB8fCB0ZXN0IC1mICRFWFBBTkRFRF9TWVNDT05GRElSL3JlZGhhdC1yZWxlYXNlIDsgdGhlbgorLSAgIG9wZXJhdGluZ19zeXN0ZW09cmVkaGF0CistZmkKKy0KKy1pZiB0ZXN0IC1mIC9ldGMvc2xhY2t3YXJlLXZlcnNpb24gfHwgdGVzdCAtZiAkRVhQQU5ERURfU1lTQ09ORkRJUi9zbGFja3dhcmUtdmVyc2lvbiA7IHRoZW4KKy0gICBvcGVyYXRpbmdfc3lzdGVtPXNsYWNrd2FyZQorLWZpCistCistaWYgdGVzdCAtZiAvdXNyL2Jpbi9jeWd3aW4xLmRsbCB8fCB0ZXN0IC1mICRFWFBBTkRFRF9CSU5ESVIvY3lnd2luMS5kbGwgOyB0aGVuCistICAgb3BlcmF0aW5nX3N5c3RlbT1jeWd3aW4KKy1maQorKyMjIyMgQnVpbGQgaG9zdCB0ZXN0IHJlbW92ZWQgZnJvbSB1cHN0cmVhbSBjb2RlLCBvcGVuZW1iZWRkZWQgaW5pdHNjcmlwdCBpcyByZWRoYXQtbGlrZToKKytvcGVyYXRpbmdfc3lzdGVtPXJlZGhhdAorIAorICMjIyMgU29ydCBvdXQgaW5pdCBzY3JpcHRzCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9weXRob24tY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvcHl0aG9uLWNvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTQ0MDAyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvcHl0aG9uLWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDI1IEBACitXaGVuIGJ1aWxkaW5nIHRoZSBkYnVzLXB0ZXN0IHBhY2thZ2UsIHdlIGhhdmUgdG8gZW5hYmxlIHB5dGhvbi4gIEhvd2V2ZXIKK2NoZWNraW5nIGlmIHRoZSBob3N0LXN5c3RlbSBweXRob24gaGFzIHRoZSBuZWNlc3NhcnkgbGlicmFyeSBpc24ndCB1c2VmdWwuCisKK0Rpc2FibGUgdGhlIHB5dGhvbiBtb2R1bGUgY2hlY2sgZm9yIGNyb3NzIGNvbXBpbGluZy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCistLS0gZGJ1cy0xLjYuOC9jb25maWd1cmUuYWMub3JpZwkyMDEzLTA3LTExIDE0OjE1OjU4LjgzNDU1NDc5OSAtMDUwMAorKysrIGRidXMtMS42LjgvY29uZmlndXJlLmFjCTIwMTMtMDctMTEgMTQ6MTQ6NDAuOTY5NTU0ODQ4IC0wNTAwCitAQCAtMjU3LDEzICsyNTcsNiBAQAorICAgIyBmdWxsIHRlc3QgY292ZXJhZ2UgaXMgcmVxdWlyZWQsIFB5dGhvbiBpcyBhIGhhcmQgZGVwZW5kZW5jeQorICAgQUNfTVNHX05PVElDRShbRnVsbCB0ZXN0IGNvdmVyYWdlICgtLWVuYWJsZS10ZXN0cz15ZXMpIHJlcXVpcmVzIFB5dGhvbiwgZGJ1cy1weXRob24sIHB5Z29iamVjdF0pCisgICBBTV9QQVRIX1BZVEhPTihbMi42XSkKKy0gIEFDX01TR19DSEVDS0lORyhbZm9yIFB5dGhvbiBtb2R1bGVzIGZvciBmdWxsIHRlc3QgY292ZXJhZ2VdKQorLSAgaWYgIiRQWVRIT04iIC1jICJpbXBvcnQgZGJ1cywgZ29iamVjdCwgZGJ1cy5tYWlubG9vcC5nbGliIjsgdGhlbgorLSAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorLSAgZWxzZQorLSAgICBBQ19NU0dfUkVTVUxUKFtub10pCistICAgIEFDX01TR19FUlJPUihbY2Fubm90IGltcG9ydCBkYnVzLCBnb2JqZWN0LCBkYnVzLm1haW5sb29wLmdsaWIgUHl0aG9uIG1vZHVsZXNdKQorLSAgZmkKKyBlbHNlCisgICAjIC0tZW5hYmxlLXRlc3RzIG5vdCBnaXZlbjogZG8gbm90IGFib3J0IGlmIFB5dGhvbiBpcyBtaXNzaW5nCisgICBBTV9QQVRIX1BZVEhPTihbMi42XSwgW10sIFs6XSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNzJkMDgzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaAorCitvdXRwdXQoKSB7CisgIGlmIFsgJD8gLWVxIDAgXQorICAgIHRoZW4gZWNobyAiUEFTUzogJGkiCisgICAgZWxzZSBlY2hvICJGQUlMOiAkaSIKKyAgZmkKK30KKworZm9yIGkgaW4gYGxzIHRlc3QvdGVzdC0qYDsgZG8gLi8kaSAuL3Rlc3QvZGF0YSBEQlVTX1RFU1RfSE9NRURJUj0uL3Rlc3QgPi9kZXYvbnVsbDsgb3V0cHV0OyBkb25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy90bXBkaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy90bXBkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYwODZlMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL3RtcGRpci5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIDUxMDVmZWRkN2ZhMTNkYWRkMmQwZDg2NGZiNzc4NzNiODNiNzlhNGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorRGF0ZTogVGh1LCAyMyBKdW4gMjAxMSAxMzo1MjowOSArMDIwMAorU3ViamVjdDogW1BBVENIXSBidWlsZHN5czogaGFyZGNvZGUgc29ja2V0ZGlyIHRvIC90bXAKKwordGhlIFRNUERJUiBlbnYgdmFyIGlzbid0IGFsd2F5cyBwb2ludGluZyB0byB0aGUgcmlnaHQgdGFyZ2V0IHBhdGgKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZF0KKworU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KKworT3JpZ2luYWwgY29tbWVudDoKKworCWF2b2lkIHRvIGNoZWNrIHRtcCBkaXIgYXQgYnVpbGQgdGltZS4gaW5zdGVhZCB1c2VzIGhhcmQgY29kZWQgL3RtcCBoZXJlCisJY29tbWVudCBhZGRlZCBieSBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgMTEgKy0tLS0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDQwODA1NGIuLjZkMjYxODAgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE0ODMsMTYgKzE0ODMsNyBAQCBBQ19TVUJTVChURVNUX0xBVU5DSF9IRUxQRVJfQklOQVJZKQorIEFDX0RFRklORV9VTlFVT1RFRChEQlVTX1RFU1RfTEFVTkNIX0hFTFBFUl9CSU5BUlksICIkVEVTVF9MQVVOQ0hfSEVMUEVSX0JJTkFSWSIsCisgICAgICAgICAgICAgICAgICAgIFtGdWxsIHBhdGggdG8gdGhlIGxhdW5jaCBoZWxwZXIgdGVzdCBwcm9ncmFtIGluIHRoZSBidWlsZGRpcl0pCisgCistIyMjIyBGaW5kIHNvY2tldCBkaXJlY3RvcmllcworLWlmICEgdGVzdCAteiAiJFRNUERJUiIgOyB0aGVuCistICAgREVGQVVMVF9TT0NLRVRfRElSPSRUTVBESVIKKy1lbGlmICEgdGVzdCAteiAiJFRFTVAiIDsgdGhlbgorLSAgIERFRkFVTFRfU09DS0VUX0RJUj0kVEVNUAorLWVsaWYgISB0ZXN0IC16ICIkVE1QIiA7IHRoZW4KKy0gICBERUZBVUxUX1NPQ0tFVF9ESVI9JFRNUAorLWVsc2UKKy0gICBERUZBVUxUX1NPQ0tFVF9ESVI9L3RtcAorLWZpCisrREVGQVVMVF9TT0NLRVRfRElSPS90bXAKKyAKKyBERUZBVUxUX1NPQ0tFVF9ESVI9YGVjaG8gJERFRkFVTFRfU09DS0VUX0RJUiB8IHNlZCAncy8rLyUyQi9nJ2AKKyAKKy0tIAorMS42LjYuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1c18xLjguMjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1c18xLjguMjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThmMjA5NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzXzEuOC4yMC5iYgpAQCAtMCwwICsxLDQgQEAKK2luY2x1ZGUgZGJ1cy5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gImI0OTg5MGJiYWJlZGFiM2ExYzNmNGY3M2M3ZmY4YjJiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVjNGZiZjRjNjQ2MjFjOTZlODcxZGE5MWQyYjcyOWE1YjAwNTM2ZTExNmQzYzQ2MTJhNDY5ZDkyNGIxYjcwM2EiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYzczNmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLmluYwpAQCAtMCwwICsxLDEwNiBAQAorU1VNTUFSWSA9ICJBIGxpZ2h0d2VpZ2h0IFNTSCBhbmQgU0NQIGltcGxlbWVudGF0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdHQudWNjLmFzbi5hdS9kcm9wYmVhci9kcm9wYmVhci5odG1sIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCisKKyMgc29tZSBmaWxlcyBhcmUgZnJvbSBvdGhlciBwcm9qZWN0cyBhbmQgaGF2ZSBvdGhlcnMgbGljZW5zZSB0ZXJtczoKKyMgICBwdWJsaWMgZG9tYWluLCBPcGVuU1NIIDMuNXAxLCBPcGVuU1NIMy42LjFwMiwgUHVUVFkKK0xJQ0VOU0UgPSAiTUlUICYgQlNELTMtQ2xhdXNlICYgQlNELTItQ2xhdXNlICYgUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1hNWVjNDBjYWZiYTI2ZmM0Mzk2ZDBiNTUwZjgyNGUwMSIKKworREVQRU5EUyA9ICJ6bGliIgorUlBST1ZJREVTXyR7UE59ID0gInNzaCBzc2hkIiAKKworREVQRU5EUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGlicGFtJywgJycsIGQpfSIKKworU1JDX1VSSSA9ICJodHRwOi8vbWF0dC51Y2MuYXNuLmF1L2Ryb3BiZWFyL3JlbGVhc2VzL2Ryb3BiZWFyLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS11cmFuZG9tLXhhdXRoLWNoYW5nZXMtdG8tb3B0aW9ucy5oLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtY29uZmlndXJlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtZml4LTJrYi1rZXlzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDctZHJvcGJlYXItZml4LWZvci14MzItYWJpLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2luaXQgXAorICAgICAgICAgICBmaWxlOi8vZHJvcGJlYXJrZXkuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly9kcm9wYmVhckAuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly9kcm9wYmVhci5zb2NrZXQgXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9TUkNfVVJJfScsICcnLCBkKX0gIgorCitQQU1fU1JDX1VSSSA9ICJmaWxlOi8vMDAwNS1kcm9wYmVhci1lbmFibGUtcGFtLnBhdGNoIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly8wMDA2LWRyb3BiZWFyLWNvbmZpZ3VyYXRpb24tZmlsZS5wYXRjaCBcCisgICAgICAgICAgICAgICBmaWxlOi8vZHJvcGJlYXIiCisKK1BBTV9QTFVHSU5TID0gImxpYnBhbS1ydW50aW1lIFwKKwlwYW0tcGx1Z2luLWRlbnkgXAorCXBhbS1wbHVnaW4tcGVybWl0IFwKKwlwYW0tcGx1Z2luLXVuaXggXAorCSIKK1JERVBFTkRTXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9QTFVHSU5TfScsICcnLCBkKX0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1yYy5kIHN5c3RlbWQKKworSU5JVFNDUklQVF9OQU1FID0gImRyb3BiZWFyIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMgMTAiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJkcm9wYmVhci5zb2NrZXQiCisKK0NGTEFHU19wcmVwZW5kID0gIiAtSS4gIgorTEQgPSAiJHtDQ30iCisKK1NCSU5DT01NQU5EUyA9ICJkcm9wYmVhciBkcm9wYmVhcmtleSBkcm9wYmVhcmNvbnZlcnQiCitCSU5DT01NQU5EUyA9ICJkYmNsaWVudCBzc2ggc2NwIgorRVhUUkFfT0VNQUtFID0gJ01VTFRJPTEgU0NQUFJPR1JFU1M9MSBQUk9HUkFNUz0iJHtTQklOQ09NTUFORFN9ICR7QklOQ09NTUFORFN9IicKK0VYVFJBX09FQ09ORiArPSAiXAorICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJy0tZW5hYmxlLXBhbScsICctLWRpc2FibGUtcGFtJywgZCl9IgorQ0ZMQUdTICs9ICItRFNGVFBTRVJWRVJfUEFUSD1cXCIke2xpYmRpcn0vb3BlbnNzaC9zZnRwLXNlcnZlclxcIiIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9IFwKKwkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kIFwKKwkJJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdCBcCisJCSR7RH0ke3N5c2NvbmZkaXJ9L2Ryb3BiZWFyIFwKKwkJJHtEfSR7YmluZGlyfSBcCisJCSR7RH0ke3NiaW5kaXJ9IFwKKwkJJHtEfSR7bG9jYWxzdGF0ZWRpcn0KKworCWluc3RhbGwgLW0gMDc1NSBkcm9wYmVhcm11bHRpICR7RH0ke3NiaW5kaXJ9LworCWxuIC1zICR7c2JpbmRpcn0vZHJvcGJlYXJtdWx0aSAke0R9JHtiaW5kaXJ9L2RiY2xpZW50CisJCisJZm9yIGkgaW4gJHtTQklOQ09NTUFORFN9CisJZG8KKwkJbG4gLXMgLi9kcm9wYmVhcm11bHRpICR7RH0ke3NiaW5kaXJ9LyRpCisJZG9uZQorCXNlZCAtZSAncywvZXRjLCR7c3lzY29uZmRpcn0sZycgXAorCQktZSAncywvdXNyL3NiaW4sJHtzYmluZGlyfSxnJyBcCisJCS1lICdzLC92YXIsJHtsb2NhbHN0YXRlZGlyfSxnJyBcCisJCS1lICdzLC91c3IvYmluLCR7YmluZGlyfSxnJyBcCisJCS1lICdzLC91c3IsJHtwcmVmaXh9LGcnICR7V09SS0RJUn0vaW5pdCA+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9kcm9wYmVhcgorCWNobW9kIDc1NSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvZHJvcGJlYXIKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IiA9ICJwYW0iIF07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9wYW0uZAorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kcm9wYmVhciAgJHtEfSR7c3lzY29uZmRpcn0vcGFtLmQvCisJZmkKKworCSMgZGVhbCB3aXRoIHN5c3RlbWQgdW5pdCBmaWxlcworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kcm9wYmVhcmtleS5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZHJvcGJlYXJALnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kcm9wYmVhci5zb2NrZXQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCisJCS1lICdzLEBCSU5ESVJALCR7YmluZGlyfSxnJyBcCisJCS1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKKwkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZHJvcGJlYXIuc29ja2V0ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyouc2VydmljZQorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMjAiCitBTFRFUk5BVElWRV8ke1BOfSA9ICJzY3Agc3NoIgorCitBTFRFUk5BVElWRV9UQVJHRVQgPSAiJHtzYmluZGlyfS9kcm9wYmVhcm11bHRpIgorCitwa2dfcG9zdHJtX2FwcGVuZF8ke1BOfSAoKSB7CisgIGlmIFsgLWYgIiR7c3lzY29uZmRpcn0vZHJvcGJlYXIvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5IiBdOyB0aGVuCisgICAgICAgIHJtICR7c3lzY29uZmRpcn0vZHJvcGJlYXIvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5CisgIGZpCisgIGlmIFsgLWYgIiR7c3lzY29uZmRpcn0vZHJvcGJlYXIvZHJvcGJlYXJfZHNzX2hvc3Rfa2V5IiBdOyB0aGVuCisgICAgICAgIHJtICR7c3lzY29uZmRpcn0vZHJvcGJlYXIvZHJvcGJlYXJfZHNzX2hvc3Rfa2V5CisgIGZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDEtdXJhbmRvbS14YXV0aC1jaGFuZ2VzLXRvLW9wdGlvbnMuaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwMS11cmFuZG9tLXhhdXRoLWNoYW5nZXMtdG8tb3B0aW9ucy5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjOWQ1NzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDEtdXJhbmRvbS14YXV0aC1jaGFuZ2VzLXRvLW9wdGlvbnMuaC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitTdWJqZWN0OiBbUEFUQ0ggMS82XSB1cmFuZG9tLXhhdXRoLWNoYW5nZXMtdG8tb3B0aW9ucy5oCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKy0tLQorIG9wdGlvbnMuaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL29wdGlvbnMuaCBiL29wdGlvbnMuaAoraW5kZXggN2QwNjMyMi4uNzFhMjFjMiAxMDA2NDQKKy0tLSBhL29wdGlvbnMuaAorKysrIGIvb3B0aW9ucy5oCitAQCAtMjQ3LDcgKzI0Nyw3IEBAIG11Y2ggdHJhZmZpYy4gKi8KKyAvKiBUaGUgY29tbWFuZCB0byBpbnZva2UgZm9yIHhhdXRoIHdoZW4gdXNpbmcgWDExIGZvcndhcmRpbmcuCisgICogIi1xIiBmb3IgcXVpZXQgKi8KKyAjaWZuZGVmIFhBVVRIX0NPTU1BTkQKKy0jZGVmaW5lIFhBVVRIX0NPTU1BTkQgIi91c3IvYmluL3hhdXRoIC1xIgorKyNkZWZpbmUgWEFVVEhfQ09NTUFORCAieGF1dGggLXEiCisgI2VuZGlmCisgCisgLyogaWYgeW91IHdhbnQgdG8gZW5hYmxlIHJ1bm5pbmcgYW4gc2Z0cCBzZXJ2ZXIgKHN1Y2ggYXMgdGhlIG9uZSBpbmNsdWRlZCB3aXRoCistLSAKKzEuNy4xMS43CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwMy1jb25maWd1cmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDMtY29uZmlndXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1M2FiMDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDMtY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gYzVmNWM1MDU0YzFiMTU1MzlkY2NmODY2ZTJjM2ZhYmE3ZWQ2ODQ1NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9FcmljPTIwQj1DMz1BOW5hcmQ/PSA8ZXJpY0BldWtyZWEuY29tPgorRGF0ZTogVGh1LCAyNSBBcHIgMjAxMyAwMDoyNzoyNSArMDIwMAorU3ViamVjdDogW1BBVENIIDMvNl0gY29uZmlndXJlOiBhZGQgYSB2YXJpYWJsZSB0byBhbGxvdyBvcGVucHR5IGNoZWNrIHRvIGJlIGNhY2hlZAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tCisgY29uZmlndXJlLmFjIHwgMTEgKysrKysrKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAwNTQ2MWYzLi45YzE2ZDkwIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xNjYsMTUgKzE2NiwyMCBAQCBBQ19BUkdfRU5BQkxFKG9wZW5wdHksCisgCQkJQUNfTVNHX05PVElDRShOb3QgdXNpbmcgb3BlbnB0eSkKKyAJCWVsc2UKKyAJCQlBQ19NU0dfTk9USUNFKFVzaW5nIG9wZW5wdHkgaWYgYXZhaWxhYmxlKQorLQkJCUFDX1NFQVJDSF9MSUJTKG9wZW5wdHksIHV0aWwsIFtBQ19ERUZJTkUoSEFWRV9PUEVOUFRZLCxIYXZlIG9wZW5wdHkoKSBmdW5jdGlvbildKQorKwkJCUFDX1NFQVJDSF9MSUJTKG9wZW5wdHksIHV0aWwsIFtkcm9wYmVhcl9jdl9mdW5jX2hhdmVfb3BlbnB0eT15ZXNdKQorIAkJZmkKKyAJXSwKKyAJWworIAkJQUNfTVNHX05PVElDRShVc2luZyBvcGVucHR5IGlmIGF2YWlsYWJsZSkKKy0JCUFDX1NFQVJDSF9MSUJTKG9wZW5wdHksIHV0aWwsIFtBQ19ERUZJTkUoSEFWRV9PUEVOUFRZKV0pCisrCQlBQ19TRUFSQ0hfTElCUyhvcGVucHR5LCB1dGlsLCBbZHJvcGJlYXJfY3ZfZnVuY19oYXZlX29wZW5wdHk9eWVzXSkKKyAJXQorICkKKy0JCQorKworK2lmIHRlc3QgIngkZHJvcGJlYXJfY3ZfZnVuY19oYXZlX29wZW5wdHkiID0gInh5ZXMiOyB0aGVuCisrCUFDX0RFRklORShIQVZFX09QRU5QVFksLEhhdmUgb3BlbnB0eSgpIGZ1bmN0aW9uKQorKwlub19wdGNfY2hlY2s9eWVzCisrCW5vX3B0bXhfY2hlY2s9eWVzCisrZmkKKyAKKyBBQ19BUkdfRU5BQkxFKHN5c2xvZywKKyAJWyAgLS1kaXNhYmxlLXN5c2xvZyAgICAgICAgRG9uJ3QgaW5jbHVkZSBzeXNsb2cgc3VwcG9ydF0sCistLSAKKzEuNy4xMS43CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNC1maXgtMmtiLWtleXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDQtZml4LTJrYi1rZXlzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MzlkMjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDQtZml4LTJrYi1rZXlzLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1N1YmplY3Q6IFtQQVRDSCA0LzZdIGZpeCAya2Iga2V5cworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCistLS0KKyBrZXguaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2tleC5oIGIva2V4LmgKK2luZGV4IDcyNDMwZTkuLjM3NWM2NzcgMTAwNjQ0CistLS0gYS9rZXguaAorKysrIGIva2V4LmgKK0BAIC02Nyw2ICs2Nyw2IEBAIHN0cnVjdCBLRVhTdGF0ZSB7CisgfTsKKyAKKyAKKy0jZGVmaW5lIE1BWF9LRVhIQVNIQlVGIDIwMDAKKysjZGVmaW5lIE1BWF9LRVhIQVNIQlVGIDMwMDAKKyAKKyAjZW5kaWYgLyogX0tFWF9IXyAqLworLS0gCisxLjcuMTEuNworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDUtZHJvcGJlYXItZW5hYmxlLXBhbS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNS1kcm9wYmVhci1lbmFibGUtcGFtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MDhjNTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDUtZHJvcGJlYXItZW5hYmxlLXBhbS5wYXRjaApAQCAtMCwwICsxLDI4IEBACitTdWJqZWN0OiBbUEFUQ0ggNS82XSBkcm9wYmVhciBlbmFibGUgcGFtCisKK2Ryb3BiZWFyOiBXZSBuZWVkIG1vZGlmeSBmaWxlIG9wdGlvbi5oIGJlc2lkZXMgZW5hYmxpbmcgcGFtIGluIFwKK2NvbmZpZ3VyZSBpZiB3ZSB3YW50IGRyb3BiZWFyIHRvIHN1cHBvcnQgcGFtLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWGlhb2ZlbmcgWWFuIDx4aWFvZmVuZy55YW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIG9wdGlvbnMuaCB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBkcm9wYmVhci0yMDEzLjYyL29wdGlvbnMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRyb3BiZWFyLTIwMTMuNjIub3JpZy9vcHRpb25zLmgJMjAxNC0wMS0xNCAyMTo1MzowMi44MDMyNjIwMDkgKzAwMDAKKysrKyBkcm9wYmVhci0yMDEzLjYyL29wdGlvbnMuaAkyMDE0LTAxLTE0IDIxOjUzOjU2LjExOTI2MzQ2MiArMDAwMAorQEAgLTE5Miw5ICsxOTIsOSBAQAorICAqIFBBTSBjaGFsbGVuZ2UvcmVzcG9uc2UuCisgICogWW91IGNhbid0IGVuYWJsZSBib3RoIFBBU1NXT1JEIGFuZCBQQU0uICovCisgCistI2RlZmluZSBFTkFCTEVfU1ZSX1BBU1NXT1JEX0FVVEgKKysvKiNkZWZpbmUgRU5BQkxFX1NWUl9QQVNTV09SRF9BVVRIKi8KKyAvKiBQQU0gcmVxdWlyZXMgLi9jb25maWd1cmUgLS1lbmFibGUtcGFtICovCistLyojZGVmaW5lIEVOQUJMRV9TVlJfUEFNX0FVVEggKi8KKysjZGVmaW5lIEVOQUJMRV9TVlJfUEFNX0FVVEgKKyAjZGVmaW5lIEVOQUJMRV9TVlJfUFVCS0VZX0FVVEgKKyAKKyAvKiBXaGV0aGVyIHRvIHRha2UgcHVibGljIGtleSBvcHRpb25zIGluIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDA2LWRyb3BiZWFyLWNvbmZpZ3VyYXRpb24tZmlsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNi1kcm9wYmVhci1jb25maWd1cmF0aW9uLWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE0YzhkMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNi1kcm9wYmVhci1jb25maWd1cmF0aW9uLWZpbGUucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorU3ViamVjdDogW1BBVENIIDYvNl0gZHJvcGJlYXIgY29uZmlndXJhdGlvbiBmaWxlCisKK2Ryb3BiZWFyOiBDaGFuZ2UgdGhlIHBhdGggKCIvZXRjL3BhbS5kL3NzaGQiIGFzIGRlZmF1bHQpIHRvIGZpbmQgYSBwYW0gY29uZmlndXJhdGlvbiBmaWxlIFwKK3RvICIvZXRjL3BhbS5kL2Ryb3BiZWFyIGZvciBkcm9wYmVhciB3aGVuIGVuYWJsaW5nIHBhbSBzdXBwb3J0aW5nIgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AZW5lYS5jb20+CitTaWduZWQtb2ZmLWJ5OiBYaWFvZmVuZyBZYW4gPHhpYW9mZW5nLnlhbkB3aW5kcml2ZXIuY29tPgorLS0tCitkaWZmIC1OYXVyIGRyb3BiZWFyLTIwMTMuNjAtb3JpZy9zdnItYXV0aHBhbS5jIGRyb3BiZWFyLTIwMTMuNjAvc3ZyLWF1dGhwYW0uYworLS0tIGRyb3BiZWFyLTIwMTMuNjAtb3JpZy9zdnItYXV0aHBhbS5jCTIwMTMtMTAtMTYgMTY6MzQ6NTMuMDAwMDAwMDAwICswMjAwCisrKysgZHJvcGJlYXItMjAxMy42MC9zdnItYXV0aHBhbS5jCTIwMTMtMTAtMjEgMTc6MDQ6MDQuOTY5NDE2MDU1ICswMjAwCitAQCAtMjExLDcgKzIxMSw3IEBACisgCXVzZXJEYXRhLnBhc3N3ZCA9IHBhc3N3b3JkOworIAorIAkvKiBJbml0IHBhbSAqLworLQlpZiAoKHJjID0gcGFtX3N0YXJ0KCJzc2hkIiwgTlVMTCwgJnBhbUNvbnYsICZwYW1IYW5kbGVwKSkgIT0gUEFNX1NVQ0NFU1MpIHsKKysJaWYgKChyYyA9IHBhbV9zdGFydCgiZHJvcGJlYXIiLCBOVUxMLCAmcGFtQ29udiwgJnBhbUhhbmRsZXApKSAhPSBQQU1fU1VDQ0VTUykgeworIAkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLCAicGFtX3N0YXJ0KCkgZmFpbGVkLCByYz0lZCwgJXMiLCAKKyAJCQkJcmMsIHBhbV9zdHJlcnJvcihwYW1IYW5kbGVwLCByYykpOworIAkJZ290byBjbGVhbnVwOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDA3LWRyb3BiZWFyLWZpeC1mb3IteDMyLWFiaS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNy1kcm9wYmVhci1maXgtZm9yLXgzMi1hYmkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ1MDEyMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNy1kcm9wYmVhci1maXgtZm9yLXgzMi1hYmkucGF0Y2gKQEAgLTAsMCArMSwxNDAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGUgZHJvcGJlYXJrZXkgdXRpbGl0eSBidWlsdCBpbiB4MzIgYWJpIGZvcm1hdCwgd2hlbiBnZW5lcmF0aW5nIHNzaAora2V5cywgd2FzIGdldHRpbmcgbG9zdCBpbiB0aGUgaW5maW5pdGUgbG9vcC4KKworVGhpcyBwYXRjaCBmaXhlcyB0aGUgaXNzdWUgYnkgZml4aW5nIHR5cGVzIG9mIHZhcmlhYmxlcyBhbmQKK3BhcmFtZXRlcnMgb2YgZnVuY3Rpb25zIHVzZWQgaW4gdGhlIGNvZGUsIHdoaWNoIHdlcmUgZ2V0dGluZwordW5kZXNpcmVkIHNpemUsIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgeDMyIGFiaSB0b29sY2hhaW4uCisKKzIwMTMvMDUvMjMKK1JlY2VpdmVkIHRoaXMgZml4IGZyb20gSCBKIEx1LgorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCisjIEhHIGNoYW5nZXNldCBwYXRjaAorIyBVc2VyIEguSi4gTHUgPGhqbC50b29sc0BnbWFpbC5jb20+CisjIERhdGUgMTM2OTM0NDA3OSAyNTIwMAorIyBOb2RlIElEIGExMGExYzQ2Yjg1N2NjOGEzOTIzYzNiYjZkMTUwNGFhMjViNjA1MmYKKyMgUGFyZW50ICBlNzY2MTQxNDVhZWE2N2Y2NmU0YTQyNTc2ODVjNzcxZWZiYTIxYWExCitUeXBkZWYgbXBfZGlnaXQgdG8gdW5zaWduZWQgbG9uZyBsb25nIGZvciBNUF82NEJJVAorCitXaGVuIEdDQyBpcyB1c2VkIHdpdGggTVBfNjRCSVQsIHdlIHNob3VsZCB0eXBlZGVmIG1wX2RpZ2l0IHRvIHVuc2lnbmVkCitsb25nIGxvbmcgaW5zdGVhZCBvZiB1bnNpZ25lZCBsb25nIHNpbmNlIGZvciB4MzIsIHVuc2lnbmVkIGxvbmcgaXMKKzMyLWJpdCBhbmQgdW5zaWduZWQgbG9uZyBsb25nIGlzIDY0LWJpdCBhbmQgaXQgaXMgc2FmZSB0byB1c2UgdW5zaWduZWQKK2xvbmcgbG9uZyBmb3IgNjQtYml0IGludGVnZXIgd2l0aCBHQ0MuCisKK2RpZmYgLXIgZTc2NjE0MTQ1YWVhIC1yIGExMGExYzQ2Yjg1NyBsaWJ0b21tYXRoL3RvbW1hdGguaAorLS0tIGEvbGlidG9tbWF0aC90b21tYXRoLmgJVGh1IEFwciAxOCAyMjo1Nzo0NyAyMDEzICswODAwCisrKysgYi9saWJ0b21tYXRoL3RvbW1hdGguaAlUaHUgTWF5IDIzIDE0OjIxOjE5IDIwMTMgLTA3MDAKK0BAIC03Myw3ICs3Myw3IEBACisgICAgdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nICAgbG9uZzY0OworICNlbmRpZgorCistICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgbXBfZGlnaXQ7CisrICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgbXBfZGlnaXQ7CisgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgbXBfd29yZCBfX2F0dHJpYnV0ZV9fICgobW9kZShUSSkpKTsKKworICAgICNkZWZpbmUgRElHSVRfQklUICAgICAgICAgIDYwCisjIEhHIGNoYW5nZXNldCBwYXRjaAorIyBVc2VyIEguSi4gTHUgPGhqbC50b29sc0BnbWFpbC5jb20+CisjIERhdGUgMTM2OTM0NDI0MSAyNTIwMAorIyBOb2RlIElEIGM3NTU1YTRjYjdkZWQzYTg4NDA5YmE4NWY0MDI3YmFhN2FmNWY1MzYKKyMgUGFyZW50ICBhMTBhMWM0NmI4NTdjYzhhMzkyM2MzYmI2ZDE1MDRhYTI1YjYwNTJmCitDYXN0IHRvIG1wX2RpZ2l0IHdoZW4gdXBkYXRpbmcgKnJobworCitUaGVyZSBpcworCitpbnQKK21wX21vbnRnb21lcnlfc2V0dXAgKG1wX2ludCAqIG4sIG1wX2RpZ2l0ICogcmhvKQorCitXZSBzaG91bGQgY2FzdCB0byBtcF9kaWdpdCBpbnN0ZWFkIG9mIHVuc2lnbmVkIGxvbmcgd2hlbiB1cGRhdGluZworKnJobyBzaW5jZSBtcF9kaWdpdCBtYXkgYmUgdW5zaWduZWQgbG9uZyBsb25nIGFuZCB1bnNpZ25lZCBsb25nIGxvbmcKK21heSBiZSBkaWZmZXJlbnQgZnJvbSB1bnNpZ25lZCBsb25nLCBsaWtlIGluIHgzMi4KKworZGlmZiAtciBhMTBhMWM0NmI4NTcgLXIgYzc1NTVhNGNiN2RlIGxpYnRvbW1hdGgvYm5fbXBfbW9udGdvbWVyeV9zZXR1cC5jCistLS0gYS9saWJ0b21tYXRoL2JuX21wX21vbnRnb21lcnlfc2V0dXAuYwlUaHUgTWF5IDIzIDE0OjIxOjE5IDIwMTMgLTA3MDAKKysrKyBiL2xpYnRvbW1hdGgvYm5fbXBfbW9udGdvbWVyeV9zZXR1cC5jCVRodSBNYXkgMjMgMTQ6MjQ6MDEgMjAxMyAtMDcwMAorQEAgLTQ4LDcgKzQ4LDcgQEAKKyAjZW5kaWYKKworICAgLyogcmhvID0gLTEvbSBtb2QgYiAqLworLSAgKnJobyA9ICh1bnNpZ25lZCBsb25nKSgoKG1wX3dvcmQpMSA8PCAoKG1wX3dvcmQpIERJR0lUX0JJVCkpIC0geCkgJiBNUF9NQVNLOworKyAgKnJobyA9IChtcF9kaWdpdCkoKChtcF93b3JkKTEgPDwgKChtcF93b3JkKSBESUdJVF9CSVQpKSAtIHgpICYgTVBfTUFTSzsKKworICAgcmV0dXJuIE1QX09LQVk7CisgfQorIyBIRyBjaGFuZ2VzZXQgcGF0Y2gKKyMgVXNlciBILkouIEx1IDxoamwudG9vbHNAZ21haWwuY29tPgorIyBEYXRlIDEzNjkzNDQ1NDEgMjUyMDAKKyMgTm9kZSBJRCA3YzY1NmU3MDcxYTY0MTI2ODhiMmYzMGE1MjlhOWFmYWM2YzdiZjVhCisjIFBhcmVudCAgYzc1NTVhNGNiN2RlZDNhODg0MDliYTg1ZjQwMjdiYWE3YWY1ZjUzNgorRGVmaW5lIExUQ19GQVNUX1RZUEUgdG8gdW5zaWduZWQgbG9uZyBsb25nIGZvciBfX3g4Nl82NF9fCisKK1dlIHNob3VsZCBkZWZpbmUgTFRDX0ZBU1RfVFlQRSB0byB1bnNpZ25lZCBsb25nIGxvbmcgaW5zdGVhZCBvZiB1bnNpZ25lZAorbG9uZyBpZiBfX3g4Nl82NF9fIHRvIHN1cHBvcnQgeDMyIHdoZXJlIHVuc2lnbmVkIGxvbmcgbG9uZyBpcyA2NC1iaXQKK2FuZCB1bnNpZ25lZCBsb25nIGlzIDMyLWJpdC4KKworZGlmZiAtciBjNzU1NWE0Y2I3ZGUgLXIgN2M2NTZlNzA3MWE2IGxpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X2NmZy5oCistLS0gYS9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21jcnlwdF9jZmcuaAlUaHUgTWF5IDIzIDE0OjI0OjAxIDIwMTMgLTA3MDAKKysrKyBiL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X2NmZy5oCVRodSBNYXkgMjMgMTQ6Mjk6MDEgMjAxMyAtMDcwMAorQEAgLTc0LDcgKzc0LDcgQEAKKyAgICAjZGVmaW5lIEVORElBTl9MSVRUTEUKKyAgICAjZGVmaW5lIEVORElBTl82NEJJVFdPUkQKKyAgICAjZGVmaW5lIExUQ19GQVNUCistICAgI2RlZmluZSBMVENfRkFTVF9UWVBFICAgIHVuc2lnbmVkIGxvbmcKKysgICAjZGVmaW5lIExUQ19GQVNUX1RZUEUgICAgdW5zaWduZWQgbG9uZyBsb25nCisgI2VuZGlmCisKKyAvKiBkZXRlY3QgUFBDMzIgKi8KKyMgSEcgY2hhbmdlc2V0IHBhdGNoCisjIFVzZXIgSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KKyMgRGF0ZSAxMzY5MzQ0NzMwIDI1MjAwCisjIE5vZGUgSUQgYTdkNDY5MDE1OGZhZTRlZGUyYzRlNWI1NjIzM2U4MzczMGJmMzhlZQorIyBQYXJlbnQgIDdjNjU2ZTcwNzFhNjQxMjY4OGIyZjMwYTUyOWE5YWZhYzZjN2JmNWEKK1VzZSB1bnNpZ25lZCBsb25nIGxvbmcgYWFzIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIGZvciB4ODYtNjQgR0NDCisKK1dlIHNob3VsZCB1c2UgdW5zaWduZWQgbG9uZyBsb25nIGluc3RlYWQgb2YgdW5zaWduZWQgbG9uZyBhcyB1bnNpZ25lZAorNjQtYml0IGludGVnZXIgZm9yIHg4Ni02NCBHQ0MgdG8gc3VwcG9ydCB4MzIgd2hlcmUgdW5zaWduZWQgbG9uZyBpcworMzItYml0LgorCitkaWZmIC1yIDdjNjU2ZTcwNzFhNiAtciBhN2Q0NjkwMTU4ZmEgbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWFjcm9zLmgKKy0tLSBhL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X21hY3Jvcy5oCVRodSBNYXkgMjMgMTQ6Mjk6MDEgMjAxMyAtMDcwMAorKysrIGIvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWFjcm9zLmgJVGh1IE1heSAyMyAxNDozMjoxMCAyMDEzIC0wNzAwCitAQCAtMzQzLDcgKzM0Myw3IEBACisgLyogNjQtYml0IFJvdGF0ZXMgKi8KKyAjaWYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSAmJiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9feDg2XzY0X18pICYmICFkZWZpbmVkKExUQ19OT19BU00pCisKKy1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgUk9MNjQodW5zaWduZWQgbG9uZyB3b3JkLCBpbnQgaSkKKytzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBST0w2NCh1bnNpZ25lZCBsb25nIGxvbmcgd29yZCwgaW50IGkpCisgeworICAgIGFzbSgicm9scSAlJWNsLCUwIgorICAgICAgIDoiPXIiICh3b3JkKQorQEAgLTM1MSw3ICszNTEsNyBAQAorICAgIHJldHVybiB3b3JkOworIH0KKworLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBST1I2NCh1bnNpZ25lZCBsb25nIHdvcmQsIGludCBpKQorK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIFJPUjY0KHVuc2lnbmVkIGxvbmcgbG9uZyB3b3JkLCBpbnQgaSkKKyB7CisgICAgYXNtKCJyb3JxICUlY2wsJTAiCisgICAgICAgOiI9ciIgKHdvcmQpCitAQCAtMzYxLDcgKzM2MSw3IEBACisKKyAjaWZuZGVmIExUQ19OT19ST0xDCisKKy1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgUk9MNjRjKHVuc2lnbmVkIGxvbmcgd29yZCwgY29uc3QgaW50IGkpCisrc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgUk9MNjRjKHVuc2lnbmVkIGxvbmcgbG9uZyB3b3JkLCBjb25zdCBpbnQgaSkKKyB7CisgICAgYXNtKCJyb2xxICUyLCUwIgorICAgICAgIDoiPXIiICh3b3JkKQorQEAgLTM2OSw3ICszNjksNyBAQAorICAgIHJldHVybiB3b3JkOworIH0KKworLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBST1I2NGModW5zaWduZWQgbG9uZyB3b3JkLCBjb25zdCBpbnQgaSkKKytzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBST1I2NGModW5zaWduZWQgbG9uZyBsb25nIHdvcmQsIGNvbnN0IGludCBpKQorIHsKKyAgICBhc20oInJvcnEgJTIsJTAiCisgICAgICAgOiI9ciIgKHdvcmQpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2Ryb3BiZWFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZTc4N2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2Ryb3BiZWFyCkBAIC0wLDAgKzEsNCBAQAorIyVQQU0tMS4wCisKK2F1dGggICAgIGluY2x1ZGUgIGNvbW1vbi1hdXRoCithY2NvdW50ICBpbmNsdWRlICBjb21tb24tYWNjb3VudApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9kcm9wYmVhci5zb2NrZXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2Ryb3BiZWFyLnNvY2tldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWM2MWI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9kcm9wYmVhci5zb2NrZXQKQEAgLTAsMCArMSwxMCBAQAorW1VuaXRdCitDb25mbGljdHM9ZHJvcGJlYXIuc2VydmljZQorCitbU29ja2V0XQorTGlzdGVuU3RyZWFtPTIyCitBY2NlcHQ9eWVzCisKK1tJbnN0YWxsXQorV2FudGVkQnk9c29ja2V0cy50YXJnZXQKK0Fsc289ZHJvcGJlYXJrZXkuc2VydmljZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9kcm9wYmVhckAuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXJALnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZlOTk0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXJALnNlcnZpY2UKQEAgLTAsMCArMSwxMSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1TU0ggUGVyLUNvbm5lY3Rpb24gU2VydmVyCitXYW50cz1kcm9wYmVhcmtleS5zZXJ2aWNlCitBZnRlcj1zeXNsb2cudGFyZ2V0IGRyb3BiZWFya2V5LnNlcnZpY2UKKworW1NlcnZpY2VdCitFbnZpcm9ubWVudEZpbGU9LS9ldGMvZGVmYXVsdC9kcm9wYmVhcgorRXhlY1N0YXJ0PS1AU0JJTkRJUkAvZHJvcGJlYXIgLWkgLXIgL2V0Yy9kcm9wYmVhci9kcm9wYmVhcl9yc2FfaG9zdF9rZXkgJERST1BCRUFSX0VYVFJBX0FSR1MKK0V4ZWNSZWxvYWQ9QEJBU0VfQklORElSQC9raWxsIC1IVVAgJE1BSU5QSUQKK1N0YW5kYXJkSW5wdXQ9c29ja2V0CitLaWxsTW9kZT1wcm9jZXNzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2Ryb3BiZWFya2V5LnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2Ryb3BiZWFya2V5LnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NjMjFkNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXJrZXkuc2VydmljZQpAQCAtMCwwICsxLDggQEAKK1tVbml0XQorRGVzY3JpcHRpb249U1NIIEtleSBHZW5lcmF0aW9uCitDb25kaXRpb25QYXRoRXhpc3RzPXwhL2V0Yy9kcm9wYmVhci9kcm9wYmVhcl9yc2FfaG9zdF9rZXkKKworW1NlcnZpY2VdCitUeXBlPW9uZXNob3QKK0V4ZWNTdGFydD1AU0JJTkRJUkAvZHJvcGJlYXJrZXkgLXQgcnNhIC1mIC9ldGMvZHJvcGJlYXIvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5CitSZW1haW5BZnRlckV4aXQ9eWVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2luaXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2luaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZThmZWQzZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvaW5pdApAQCAtMCwwICsxLDExMyBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOgkJc3NoZAorIyBSZXF1aXJlZC1TdGFydDoJJHJlbW90ZV9mcyAkc3lzbG9nICRuZXR3b3JraW5nCisjIFJlcXVpcmVkLVN0b3A6CSRyZW1vdGVfZnMgJHN5c2xvZworIyBEZWZhdWx0LVN0YXJ0OgkyIDMgNCA1CisjIERlZmF1bHQtU3RvcDoJCTEKKyMgU2hvcnQtRGVzY3JpcHRpb246CURyb3BiZWFyIFNlY3VyZSBTaGVsbCBzZXJ2ZXIKKyMjIyBFTkQgSU5JVCBJTkZPCisjCisjIERvIG5vdCBjb25maWd1cmUgdGhpcyBmaWxlLiBFZGl0IC9ldGMvZGVmYXVsdC9kcm9wYmVhciBpbnN0ZWFkIQorIworCitQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2Jpbjovc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorREFFTU9OPS91c3Ivc2Jpbi9kcm9wYmVhcgorTkFNRT1kcm9wYmVhcgorREVTQz0iRHJvcGJlYXIgU1NIIHNlcnZlciIKK1BJREZJTEU9L3Zhci9ydW4vZHJvcGJlYXIucGlkCisKK0RST1BCRUFSX1BPUlQ9MjIKK0RST1BCRUFSX0VYVFJBX0FSR1M9CitOT19TVEFSVD0wCisKK3NldCAtZQorCit0ZXN0ICEgLXIgL2V0Yy9kZWZhdWx0L2Ryb3BiZWFyIHx8IC4gL2V0Yy9kZWZhdWx0L2Ryb3BiZWFyCit0ZXN0ICIkTk9fU1RBUlQiID0gIjAiIHx8IGV4aXQgMAordGVzdCAteCAiJERBRU1PTiIgfHwgZXhpdCAwCit0ZXN0ICEgLWggL3Zhci9zZXJ2aWNlL2Ryb3BiZWFyIHx8IGV4aXQgMAorCityZWFkb25seV9yb290ZnM9MAorZm9yIGZsYWcgaW4gYGF3ayAneyBpZiAoJDIgPT0gIi8iKSB7IHNwbGl0KCQ0LEZMQUdTLCIsIikgfSB9OyBFTkQgeyBmb3IgKGYgaW4gRkxBR1MpIHByaW50IEZMQUdTW2ZdIH0nIDwvcHJvYy9tb3VudHNgOyBkbworICBjYXNlICRmbGFnIGluCisgICBybykKKyAgICAgcmVhZG9ubHlfcm9vdGZzPTEKKyAgICAgOzsKKyAgZXNhYworZG9uZQorCitpZiBbICRyZWFkb25seV9yb290ZnMgPSAiMSIgXTsgdGhlbgorICBta2RpciAtcCAvdmFyL2xpYi9kcm9wYmVhcgorICBEUk9QQkVBUl9SU0FLRVlfREVGQVVMVD0iL3Zhci9saWIvZHJvcGJlYXIvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5IgorICBEUk9QQkVBUl9EU1NLRVlfREVGQVVMVD0iL3Zhci9saWIvZHJvcGJlYXIvZHJvcGJlYXJfZHNzX2hvc3Rfa2V5IgorZWxzZQorICBEUk9QQkVBUl9SU0FLRVlfREVGQVVMVD0iL2V0Yy9kcm9wYmVhci9kcm9wYmVhcl9yc2FfaG9zdF9rZXkiCisgIERST1BCRUFSX0RTU0tFWV9ERUZBVUxUPSIvZXRjL2Ryb3BiZWFyL2Ryb3BiZWFyX2Rzc19ob3N0X2tleSIKK2ZpCisKK3Rlc3QgLXogIiREUk9QQkVBUl9CQU5ORVIiIHx8IFwKKyAgRFJPUEJFQVJfRVhUUkFfQVJHUz0iJERST1BCRUFSX0VYVFJBX0FSR1MgLWIgJERST1BCRUFSX0JBTk5FUiIKK3Rlc3QgLW4gIiREUk9QQkVBUl9SU0FLRVkiIHx8IFwKKyAgRFJPUEJFQVJfUlNBS0VZPSREUk9QQkVBUl9SU0FLRVlfREVGQVVMVAordGVzdCAtbiAiJERST1BCRUFSX0RTU0tFWSIgfHwgXAorICBEUk9QQkVBUl9EU1NLRVk9JERST1BCRUFSX0RTU0tFWV9ERUZBVUxUCit0ZXN0IC1uICIkRFJPUEJFQVJfS0VZVFlQRVMiIHx8IFwKKyAgRFJPUEJFQVJfS0VZVFlQRVM9InJzYSIKKworZ2VuX2tleXMoKSB7Citmb3IgdCBpbiAkRFJPUEJFQVJfS0VZVFlQRVM7IGRvCisgIGNhc2UgJHQgaW4KKyAgICByc2EpCisgICAgICAgIGlmIFsgLWYgIiREUk9QQkVBUl9SU0FLRVkiIC1hICEgLXMgIiREUk9QQkVBUl9SU0FLRVkiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBybSAkRFJPUEJFQVJfUlNBS0VZIHx8IHRydWUKKyAgICAgICAgZmkKKyAgICAgICAgdGVzdCAtZiAkRFJPUEJFQVJfUlNBS0VZIHx8IGRyb3BiZWFya2V5IC10IHJzYSAtZiAkRFJPUEJFQVJfUlNBS0VZCisJOzsKKyAgICBkc2EpCisgICAgICAgIGlmIFsgLWYgIiREUk9QQkVBUl9EU1NLRVkiIC1hICEgLXMgIiREUk9QQkVBUl9EU1NLRVkiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBybSAkRFJPUEJFQVJfRFNTS0VZIHx8IHRydWUKKyAgICAgICAgZmkKKyAgICAgICAgdGVzdCAtZiAkRFJPUEJFQVJfRFNTS0VZIHx8IGRyb3BiZWFya2V5IC10IGRzcyAtZiAkRFJPUEJFQVJfRFNTS0VZCisJOzsKKyAgZXNhYworZG9uZQorfQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisJZWNobyAtbiAiU3RhcnRpbmcgJERFU0M6ICIKKwlnZW5fa2V5cworCUtFWV9BUkdTPSIiCisJdGVzdCAtZiAkRFJPUEJFQVJfRFNTS0VZICYmIEtFWV9BUkdTPSIkS0VZX0FSR1MgLWQgJERST1BCRUFSX0RTU0tFWSIKKwl0ZXN0IC1mICREUk9QQkVBUl9SU0FLRVkgJiYgS0VZX0FSR1M9IiRLRVlfQVJHUyAtciAkRFJPUEJFQVJfUlNBS0VZIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1TIC1wICRQSURGSUxFIFwKKwkgIC14ICIkREFFTU9OIiAtLSAkS0VZX0FSR1MgXAorCSAgICAtcCAiJERST1BCRUFSX1BPUlQiICREUk9QQkVBUl9FWFRSQV9BUkdTCisJZWNobyAiJE5BTUUuIgorCTs7CisgIHN0b3ApCisJZWNobyAtbiAiU3RvcHBpbmcgJERFU0M6ICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtSyAteCAiJERBRU1PTiIgLXAgJFBJREZJTEUKKwllY2hvICIkTkFNRS4iCisJOzsKKyAgcmVzdGFydHxmb3JjZS1yZWxvYWQpCisJZWNobyAtbiAiUmVzdGFydGluZyAkREVTQzogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC14ICIkREFFTU9OIiAtcCAkUElERklMRQorCXNsZWVwIDEKKwlLRVlfQVJHUz0iIgorCXRlc3QgLWYgJERST1BCRUFSX0RTU0tFWSAmJiBLRVlfQVJHUz0iJEtFWV9BUkdTIC1kICREUk9QQkVBUl9EU1NLRVkiCisJdGVzdCAtZiAkRFJPUEJFQVJfUlNBS0VZICYmIEtFWV9BUkdTPSIkS0VZX0FSR1MgLXIgJERST1BCRUFSX1JTQUtFWSIKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAtcCAkUElERklMRSBcCisJICAteCAiJERBRU1PTiIgLS0gJEtFWV9BUkdTIFwKKwkgICAgLXAgIiREUk9QQkVBUl9QT1JUIiAkRFJPUEJFQVJfRVhUUkFfQVJHUworCWVjaG8gIiROQU1FLiIKKwk7OworICAqKQorCU49L2V0Yy9pbml0LmQvJE5BTUUKKwllY2hvICJVc2FnZTogJE4ge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR9IiA+JjIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXJfMjAxNS42OC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXJfMjAxNS42OC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjc0OWQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhcl8yMDE1LjY4LmJiCkBAIC0wLDAgKzEsNCBAQAorcmVxdWlyZSBkcm9wYmVhci5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gIjc2NjRhYzEwZjdjYzIzMDFjNTMwZWI4MGM3NTZmYzVkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU1ZWE3YzFlOTA0ZmZlNGIxY2RiZTFhZGRjYTgyOTFhMjUzM2Q3ZDI4NWZkMjJhYzMzNjA4ZTk1MDJhNjI0NDYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0LTIuMS4wL2F1dG90b29scy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXQtMi4xLjAvYXV0b3Rvb2xzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNTk5NjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0LTIuMS4wL2F1dG90b29scy5wYXRjaApAQCAtMCwwICsxLDI0IEBACitBdm9pZCB1c2luZyBleHBhdCdzIG00IGZpbGVzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT3RoZXJdCitXb3JrYXJvdW5kIHNwZWNpZmljIHRvIG91ciBidWlsZCBzeXN0ZW0uCisKK1NpZ25lZC1vZmYtYnk6IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK1VwZGF0ZWQgdG8gYXBwbHkgb3ZlciBleHBhdCAyLjEuMAorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorCitkaWZmIC1OdXJkIGV4cGF0LTIuMS4wL2NvbmZpZ3VyZS5pbiBleHBhdC0yLjEuMC9jb25maWd1cmUuaW4KKy0tLSBleHBhdC0yLjEuMC9jb25maWd1cmUuaW4JMjAxMi0wMy0wNCAwMTo0NTo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBleHBhdC0yLjEuMC9jb25maWd1cmUuaW4JMjAxMi0wNS0xMCAyMTowNDo0NC4wMDAwMDAwMDAgKzAzMDAKK0BAIC01MSw4ICs1MSw2IEBACisgCisgQUNfQ09ORklHX0hFQURFUihleHBhdF9jb25maWcuaCkKKyAKKy1zaW5jbHVkZShjb25mdG9vbHMvYWNfY19iaWdlbmRpYW5fY3Jvc3MubTQpCistCisgQUNfTElCVE9PTF9XSU4zMl9ETEwKKyBBQ19QUk9HX0xJQlRPT0wKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXQuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRmYWZlOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXQuaW5jCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiQSBzdHJlYW0tb3JpZW50ZWQgWE1MIHBhcnNlciBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiRXhwYXQgaXMgYW4gWE1MIHBhcnNlciBsaWJyYXJ5IHdyaXR0ZW4gaW4gQy4gSXQgaXMgYSBzdHJlYW0tb3JpZW50ZWQgcGFyc2VyIGluIHdoaWNoIGFuIGFwcGxpY2F0aW9uIHJlZ2lzdGVycyBoYW5kbGVycyBmb3IgdGhpbmdzIHRoZSBwYXJzZXIgbWlnaHQgZmluZCBpbiB0aGUgWE1MIGRvY3VtZW50IChsaWtlIHN0YXJ0IHRhZ3MpIgorSE9NRVBBR0UgPSAiaHR0cDovL2V4cGF0LnNvdXJjZWZvcmdlLm5ldC8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIk1JVCIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vZXhwYXQvZXhwYXQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2F1dG90b29scy5wYXRjaCIKKworaW5oZXJpdCBhdXRvdG9vbHMgbGliX3BhY2thZ2UgZ3ppcG5hdGl2ZQorCisjIFRoaXMgcGFja2FnZSB1c2VzIGFuIGFyY2hpdmUgZm9ybWF0IGtub3duIHRvIGhhdmUgaXNzdWUgd2l0aCBzb21lCisjIHZlcnNpb25zIG9mIGd6aXAKK2RvX3VucGFja1tkZXBlbmRzXSArPSAiZ3ppcC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXJtIC1mICR7U30vY29uZnRvb2xzL2xpYnRvb2wubTQKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdF8yLjEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXRfMi4xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk1ODc0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXRfMi4xLjAuYmIKQEAgLTAsMCArMSw1IEBACityZXF1aXJlIGV4cGF0LmluYworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MWI3MWY2ODE3MTNkMTI1NmUxYzIzYjA4OTA5MjA4NzQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkZDdkYWI3YTVmZWE5N2QyYTZhNDNmNTExNDQ5YjdjZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4MjM3MDU0NzJmODE2ZGYyMWM4ZjZhYTAyNmRkMTYyYjI4MDgwNjgzOGJiNTViMzQzMmIwZmIxZmNjYTdlYjg2IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2Rpc2FibGVfamF2YS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9kaXNhYmxlX2phdmEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRjNWYxNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9kaXNhYmxlX2phdmEucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorCisjIFB1bGxlZCBmcm9tIE9wZW5FbWJlZGRlZAorIyAKKyMgQ29tbWVudGVkIGJ5OiBTYXVsIFdvbGQgPHNhdWwud29sZEBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZXR0ZXh0LTAuMTYuMS5vcmlnL2dldHRleHQtdG9vbHMvY29uZmlndXJlLmFjCTIwMDYtMTEtMjcgMDk6MDI6MDEuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9jb25maWd1cmUuYWMJMjAxMS0wMy0xNiAxNjo1NTozNi4xMTEzOTY1NTcgLTA3MDAKK0BAIC0zNiwyNyArMzYsMTUgQEAKKyBndF9KQVZBX0NIT0lDRQorIAorIGd0X0dDSgorLWlmIHRlc3QgLW4gIiRIQVZFX0dDSiIgJiYgdGVzdCAiJEpBVkFfQ0hPSUNFIiA9IHllczsgdGhlbgorLSAgQlVJTERKQVZBRVhFPXllcworLWVsc2UKKyAgIEJVSUxESkFWQUVYRT1ubworLWZpCisgQUNfU1VCU1QoQlVJTERKQVZBRVhFKQorIAorIGd0X0pBVkFFWEVDCisgZ3RfSkFWQUNPTVAoWzEuM10pCisgQUNfQ0hFQ0tfUFJPRyhKQVIsIGphciwgamFyKQorLWlmIHRlc3QgLW4gIiRIQVZFX0pBVkFDT01QIiAmJiB0ZXN0IC1uICIkSkFSIiAmJiB0ZXN0ICIkSkFWQV9DSE9JQ0UiICE9IG5vOyB0aGVuCistICBCVUlMREpBVkE9eWVzCistZWxzZQorICAgQlVJTERKQVZBPW5vCistZmkKKyBBQ19TVUJTVChCVUlMREpBVkEpCistaWYgdGVzdCAtbiAiJEhBVkVfSkFWQUVYRUMiICYmIHRlc3QgJEJVSUxESkFWQSA9IHllczsgdGhlbgorLSAgVEVTVEpBVkE9eWVzCistZWxzZQorICAgVEVTVEpBVkE9bm8KKy1maQorIEFDX1NVQlNUKFRFU1RKQVZBKQorIAorIGd0X0NTSEFSUENPTVAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9maXhfYWNsb2NhbF92ZXJzaW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2ZpeF9hY2xvY2FsX3ZlcnNpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI5M2Y1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9maXhfYWNsb2NhbF92ZXJzaW9uLnBhdGNoCkBAIC0wLDAgKzEsMTEwIEBACisKK1RoaXMgcGF0Y2ggdXBkYXRlcyB0aGUgcmVxdWlyZWQgdmVyc2lvbiBudW1iZXIgZnJvbSAyLjYxIHRvIHRoZSAKK2N1cnJlbnQgMi42NSB2ZXJzaW9uIG9mIGFjbG9jYWwsIHRoaXMgd2lsbCBuZWVkIHRvIGJlIHVwZGF0ZWQgCit3aGVuIHdlIHVwZGF0ZSBhY2xvY2FsCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieSBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay9tNC9saWItbGluay5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdldHRleHQtMC4xNi4xLm9yaWcvYXV0b2NvbmYtbGliLWxpbmsvbTQvbGliLWxpbmsubTQJMjAxMS0wMy0xNyAwMjoyNDozNi4zOTE1MTk3NzUgLTA3MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay9tNC9saWItbGluay5tNAkyMDExLTAzLTE3IDAyOjI0OjQ1LjU2OTUyNjA3MyAtMDcwMAorQEAgLTE0OCw3ICsxNDgsNyBAQAorICAgZGVmaW5lKFtOQU1FXSxbdHJhbnNsaXQoWyQxXSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCisgICBkbmwgQXV0b2NvbmYgPj0gMi42MSBzdXBwb3J0cyBkb3RzIGluIC0td2l0aCBvcHRpb25zLgorLSAgZGVmaW5lKFtOX0FfTV9FXSxbbTRfaWYobTRfdmVyc2lvbl9jb21wYXJlKG00X2RlZm4oW200X1BBQ0tBR0VfVkVSU0lPTl0pLFsyLjYxXSksWy0xXSxbdHJhbnNsaXQoWyQxXSxbLl0sW19dKV0sWyQxXSldKQorKyAgZGVmaW5lKFtOX0FfTV9FXSxbbTRfaWYobTRfdmVyc2lvbl9jb21wYXJlKG00X2RlZm4oW200X1BBQ0tBR0VfVkVSU0lPTl0pLFsyLjY1XSksWy0xXSxbdHJhbnNsaXQoWyQxXSxbLl0sW19dKV0sWyQxXSldKQorICAgZG5sIEJ5IGRlZmF1bHQsIGxvb2sgaW4gJGluY2x1ZGVkaXIgYW5kICRsaWJkaXIuCisgICB1c2VfYWRkaXRpb25hbD15ZXMKKyAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvYXV0b2NvbmYtbGliLWxpbmsvdGVzdHMvcnBhdGhseS9hY2xvY2FsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aGx5L2FjbG9jYWwubTQJMjAxMS0wMy0xNyAwMjoyNDozNi4zOTE1MTk3NzUgLTA3MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aGx5L2FjbG9jYWwubTQJMjAxMS0wMy0xNyAwMjoyNDo0NS41NzA1MjY5MDQgLTA3MDAKK0BAIC0xMSw4ICsxMSw4IEBACisgIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisgIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisgCistbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42MV0sLAorLVttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjEuCisrbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42NV0sLAorK1ttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjUuCisgWW91IGhhdmUgYW5vdGhlciB2ZXJzaW9uIG9mIGF1dG9jb25mLiAgSWYgeW91IHdhbnQgdG8gdXNlIHRoYXQsCisgeW91IHNob3VsZCByZWdlbmVyYXRlIHRoZSBidWlsZCBzeXN0ZW0gZW50aXJlbHkuXSwgWzYzXSldKQorIAorSW5kZXg6IGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL3Rlc3RzL3JwYXRoeC9hY2xvY2FsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aHgvYWNsb2NhbC5tNAkyMDExLTAzLTE3IDAyOjI0OjM2LjM5MTUxOTc3NSAtMDcwMAorKysrIGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL3Rlc3RzL3JwYXRoeC9hY2xvY2FsLm00CTIwMTEtMDMtMTcgMDI6MjQ6NDUuNTcyNTI1NzczIC0wNzAwCitAQCAtMTEsOCArMTEsOCBAQAorICMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorICMgUEFSVElDVUxBUiBQVVJQT1NFLgorIAorLW00X2lmKG00X1BBQ0tBR0VfVkVSU0lPTiwgWzIuNjFdLCwKKy1bbTRfZmF0YWwoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjYxLgorK200X2lmKG00X1BBQ0tBR0VfVkVSU0lPTiwgWzIuNjVdLCwKKytbbTRfZmF0YWwoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjY1LgorIFlvdSBoYXZlIGFub3RoZXIgdmVyc2lvbiBvZiBhdXRvY29uZi4gIElmIHlvdSB3YW50IHRvIHVzZSB0aGF0LAorIHlvdSBzaG91bGQgcmVnZW5lcmF0ZSB0aGUgYnVpbGQgc3lzdGVtIGVudGlyZWx5Ll0sIFs2M10pXSkKKyAKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aHkvYWNsb2NhbC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdldHRleHQtMC4xNi4xLm9yaWcvYXV0b2NvbmYtbGliLWxpbmsvdGVzdHMvcnBhdGh5L2FjbG9jYWwubTQJMjAxMS0wMy0xNyAwMjoyNDozNi4zOTE1MTk3NzUgLTA3MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aHkvYWNsb2NhbC5tNAkyMDExLTAzLTE3IDAyOjI0OjQ1LjU3ODM5NDkxNiAtMDcwMAorQEAgLTExLDcgKzExLDcgQEAKKyAjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyAjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAKKy1tNF9pZihtNF9QQUNLQUdFX1ZFUlNJT04sIFsyLjYxXSwsCisrbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42NV0sLAorIFttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjEuCisgWW91IGhhdmUgYW5vdGhlciB2ZXJzaW9uIG9mIGF1dG9jb25mLiAgSWYgeW91IHdhbnQgdG8gdXNlIHRoYXQsCisgeW91IHNob3VsZCByZWdlbmVyYXRlIHRoZSBidWlsZCBzeXN0ZW0gZW50aXJlbHkuXSwgWzYzXSldKQorSW5kZXg6IGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL3Rlc3RzL3JwYXRoei9hY2xvY2FsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aHovYWNsb2NhbC5tNAkyMDExLTAzLTE3IDAyOjI0OjM2LjM5MTUxOTc3NSAtMDcwMAorKysrIGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL3Rlc3RzL3JwYXRoei9hY2xvY2FsLm00CTIwMTEtMDMtMTcgMDI6MjQ6NDUuNTg2Mzk1NDE2IC0wNzAwCitAQCAtMTEsOCArMTEsOCBAQAorICMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorICMgUEFSVElDVUxBUiBQVVJQT1NFLgorIAorLW00X2lmKG00X1BBQ0tBR0VfVkVSU0lPTiwgWzIuNjFdLCwKKy1bbTRfZmF0YWwoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjYxLgorK200X2lmKG00X1BBQ0tBR0VfVkVSU0lPTiwgWzIuNjVdLCwKKytbbTRfZmF0YWwoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjY1LgorIFlvdSBoYXZlIGFub3RoZXIgdmVyc2lvbiBvZiBhdXRvY29uZi4gIElmIHlvdSB3YW50IHRvIHVzZSB0aGF0LAorIHlvdSBzaG91bGQgcmVnZW5lcmF0ZSB0aGUgYnVpbGQgc3lzdGVtIGVudGlyZWx5Ll0sIFs2M10pXSkKKyAKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2FjbG9jYWwubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZXR0ZXh0LTAuMTYuMS5vcmlnL2dldHRleHQtdG9vbHMvYWNsb2NhbC5tNAkyMDA2LTExLTI3IDA5OjM0OjMyLjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvYWNsb2NhbC5tNAkyMDExLTAzLTE3IDAyOjI3OjAxLjEzNTY4MjgwNyAtMDcwMAorQEAgLTExLDggKzExLDggQEAKKyAjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyAjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAKKy1tNF9pZihtNF9QQUNLQUdFX1ZFUlNJT04sIFsyLjYxXSwsCistW200X2ZhdGFsKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42MS4KKyttNF9pZihtNF9QQUNLQUdFX1ZFUlNJT04sIFsyLjY1XSwsCisrW200X2ZhdGFsKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42NS4KKyBZb3UgaGF2ZSBhbm90aGVyIHZlcnNpb24gb2YgYXV0b2NvbmYuICBJZiB5b3Ugd2FudCB0byB1c2UgdGhhdCwKKyB5b3Ugc2hvdWxkIHJlZ2VuZXJhdGUgdGhlIGJ1aWxkIHN5c3RlbSBlbnRpcmVseS5dLCBbNjNdKV0pCisgCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9leGFtcGxlcy9hY2xvY2FsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9nZXR0ZXh0LXRvb2xzL2V4YW1wbGVzL2FjbG9jYWwubTQJMjAwNi0xMS0yNyAwOToxNjoyMy4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2V4YW1wbGVzL2FjbG9jYWwubTQJMjAxMS0wMy0xNyAwMjoyNjo1Mi41ODkzOTY2ODMgLTA3MDAKK0BAIC0xMSw4ICsxMSw4IEBACisgIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisgIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisgCistbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42MV0sLAorLVttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjEuCisrbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42NV0sLAorK1ttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjUuCisgWW91IGhhdmUgYW5vdGhlciB2ZXJzaW9uIG9mIGF1dG9jb25mLiAgSWYgeW91IHdhbnQgdG8gdXNlIHRoYXQsCisgeW91IHNob3VsZCByZWdlbmVyYXRlIHRoZSBidWlsZCBzeXN0ZW0gZW50aXJlbHkuXSwgWzYzXSldKQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2ZpeF9nbnVfc291cmNlX2NpcmN1bGFyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2ZpeF9nbnVfc291cmNlX2NpcmN1bGFyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ODYxNDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZml4X2dudV9zb3VyY2VfY2lyY3VsYXIucGF0Y2gKQEAgLTAsMCArMSwzNDggQEAKKworVGhpcyBwYXRjaCByZW1vdmVzIHRoZSBjaXJjdWxhciBkZXBlbmRlbmN5IG9uIEFDX0dOVV9TT1VSQ0UgaW4KK0FDX1VTRV9TWVNURU1fRVhURU5TSU9OUy4KKworVGhhbmtzIHRvIE1hcmsgSGF0bGUgZm9yIHRoZSB0aW1lbHkgcG9pbnRlcnMgYW5kIGZpeGVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworU2lnbmVkLW9mZi1ieSBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvZXh0ZW5zaW9ucy5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC9leHRlbnNpb25zLm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC9leHRlbnNpb25zLm00CTIwMDYtMTEtMjcgMDk6MTQ6MzguMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvZXh0ZW5zaW9ucy5tNAkyMDExLTAzLTE2IDIzOjU0OjAxLjcxMTkyMzQ0OCAtMDcwMAorQEAgLTE2LDQzICsxNiw0NyBAQAorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorICMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorLUFDX0RFRlVOKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorLVsKKy0gIEFDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKQorLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19SVU5fSUZFTFNFXSkKKy0KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorLSAgQUNfUkVRVUlSRShbQUNfQUlYXSkKKy0gIEFDX1JFUVVJUkUoW0FDX01JTklYXSkKKy0KKy0gIEFIX1ZFUkJBVElNKFtfX0VYVEVOU0lPTlNfX10sCistWy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIFNvbGFyaXMuICAqLworLSNpZm5kZWYgX19FWFRFTlNJT05TX18KKy0jIHVuZGVmIF9fRVhURU5TSU9OU19fCistI2VuZGlmCistI2lmbmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKy0jIHVuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworLSNlbmRpZgorLSNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKy0jIHVuZGVmIF9UQU5ERU1fU09VUkNFCistI2VuZGlmXSkKKy0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fXSwKKy0gICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fXSwKKy0gICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorLSAgICAgICBbQUNfTEFOR19QUk9HUkFNKFsKKy0jCSAgZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKKy0JICBBQ19JTkNMVURFU19ERUZBVUxUXSldLAorLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189eWVzXSwKKy0gICAgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPW5vXSldKQorLSAgdGVzdCAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18gPSB5ZXMgJiYKKy0gICAgQUNfREVGSU5FKFtfX0VYVEVOU0lPTlNfX10pCistICBBQ19ERUZJTkUoW19QT1NJWF9QVEhSRUFEX1NFTUFOVElDU10pCistICBBQ19ERUZJTkUoW19UQU5ERU1fU09VUkNFXSkKKy1dKQorKyNBQ19ERUZVTihbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSwKKysjWworKyMgIEFDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKQorKyMgIEFDX0JFRk9SRShbJDBdLCBbQUNfUlVOX0lGRUxTRV0pCisrIworKyMgIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyMgIEFDX1JFUVVJUkUoW0FDX0FJWF0pCisrIyAgQUNfUkVRVUlSRShbQUNfTUlOSVhdKQorKyMKKysjICBBSF9WRVJCQVRJTShbX19FWFRFTlNJT05TX19dLAorKyNbLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCisrIyNpZm5kZWYgX19FWFRFTlNJT05TX18KKysjIyB1bmRlZiBfX0VYVEVOU0lPTlNfXworKyMjZW5kaWYKKysjI2lmbmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKysjIyB1bmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKysjI2VuZGlmCisrIyNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKysjIyB1bmRlZiBfVEFOREVNX1NPVVJDRQorKyMjZW5kaWZdKQorKyMgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fXSwKKysjICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfX10sCisrIyAgICBbQUNfQ09NUElMRV9JRkVMU0UoCisrIyAgICAgICBbQUNfTEFOR19QUk9HUkFNKFsKKysjIwkgIGRlZmluZSBfX0VYVEVOU0lPTlNfXyAxCisrIwkgIEFDX0lOQ0xVREVTX0RFRkFVTFRdKV0sCisrIyAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189eWVzXSwKKysjICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz1ub10pXSkKKysjICB0ZXN0ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyA9IHllcyAmJgorKyMgICAgQUNfREVGSU5FKFtfX0VYVEVOU0lPTlNfX10pCisrIyAgQUNfREVGSU5FKFtfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1NdKQorKyMgIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorKyNdKQorIAorICMgZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCisgIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCisgQUNfREVGVU4oW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCistICBbQUNfUkVRVUlSRShbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSldKQorK1sKKysgICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysKKysgICBBQ19SRVFVSVJFKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorK10pCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L2dudWxpYi1jb21wLm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L2dudWxpYi1jb21wLm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNAkyMDA2LTExLTI3IDA5OjMzOjE5LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L2dudWxpYi1jb21wLm00CTIwMTEtMDMtMTYgMjM6NTA6MTcuNDcxNTMxODM4IC0wNzAwCitAQCAtMjUsNyArMjUsNyBAQAorICAgbTRfcGF0dGVybl9hbGxvdyhbXmdsX0xJQk9CSlMkXSlkbmwgYSB2YXJpYWJsZQorICAgbTRfcGF0dGVybl9hbGxvdyhbXmdsX0xUTElCT0JKUyRdKWRubCBhIHZhcmlhYmxlCisgICBBQ19SRVFVSVJFKFtBQ19QUk9HX1JBTkxJQl0pCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAgIEFDX1JFUVVJUkUoW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10pCisgXSkKKyAKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvbWJjaGFyLm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L21iY2hhci5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvbWJjaGFyLm00CTIwMDYtMTEtMjcgMDk6MTQ6MzguMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvbWJjaGFyLm00CTIwMTEtMDMtMTYgMjM6NTA6MTAuODE0Mzk2NTI5IC0wNzAwCitAQCAtOSw3ICs5LDcgQEAKKyAKKyBBQ19ERUZVTihbZ2xfTUJDSEFSXSwKKyBbCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAgIGRubCBUaGUgZm9sbG93aW5nIGxpbmUgaXMgdGhhdCBzbyB0aGUgdXNlciBjYW4gdGVzdCBIQVZFX1dDSEFSX0gKKyAgIGRubCBiZWZvcmUgI2luY2x1ZGUgIm1iY2hhci5oIi4KKyAgIEFDX0NIRUNLX0hFQURFUlNfT05DRShbd2NoYXIuaF0pCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L3djd2lkdGgubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvd2N3aWR0aC5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvd2N3aWR0aC5tNAkyMDA2LTExLTI3IDA5OjE0OjM4LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L3djd2lkdGgubTQJMjAxMS0wMy0xNiAyMzo1MDowOC4zNTczOTYyNDcgLTA3MDAKK0BAIC03LDcgKzcsNyBAQAorIEFDX0RFRlVOKFtnbF9GVU5DX1dDV0lEVEhdLAorIFsKKyAgIGRubCBQZXJzdWFkZSBnbGliYyA8d2NoYXIuaD4gdG8gZGVjbGFyZSB3Y3dpZHRoKCkuCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAKKyAgIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSkKKyAgIEFDX1JFUVVJUkUoW2d0X1RZUEVfV0NIQVJfVF0pCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvbTQvbG9jay5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC1ydW50aW1lL200L2xvY2subTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvbTQvbG9jay5tNAkyMDA2LTEwLTI0IDEzOjU5OjU5LjAwMDAwMDAwMCAtMDcwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvbTQvbG9jay5tNAkyMDExLTAzLTE2IDIzOjUwOjA0LjM1NTg5MTY3NiAtMDcwMAorQEAgLTM1LDcgKzM1LDcgQEAKKyAgIEFDX0JFRk9SRShbJDBdLCBbZ2xfQVJHUF0pZG5sCisgCisgICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkgZG5sIG5lZWRlZCBmb3IgcHRocmVhZF9yd2xvY2tfdCBvbiBnbGliYyBzeXN0ZW1zCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pIGRubCBuZWVkZWQgZm9yIHB0aHJlYWRfcndsb2NrX3Qgb24gZ2xpYmMgc3lzdGVtcworICAgZG5sIENoZWNrIGZvciBtdWx0aXRocmVhZGluZy4KKyAgIEFDX0FSR19FTkFCTEUodGhyZWFkcywKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdGhyZWFkcz17cG9zaXh8c29sYXJpc3xwdGh8d2luMzJ9XSwgW3NwZWNpZnkgbXVsdGl0aHJlYWRpbmcgQVBJXSkKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L2V4dGVuc2lvbnMubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L2V4dGVuc2lvbnMubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9leHRlbnNpb25zLm00CTIwMDYtMTEtMjcgMDk6MTQ6NTQuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L2V4dGVuc2lvbnMubTQJMjAxMS0wMy0xNiAyMzo1MzoyOC40ODc2NzEyNjYgLTA3MDAKK0BAIC0xNiw0MyArMTYsNDcgQEAKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbSwKKyAjIHR5cGljYWxseSBkdWUgdG8gc3RhbmRhcmRzLWNvbmZvcm1hbmNlIGlzc3Vlcy4KKy1BQ19ERUZVTihbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSwKKy1bCistICBBQ19CRUZPUkUoWyQwXSwgW0FDX0NPTVBJTEVfSUZFTFNFXSkKKy0gIEFDX0JFRk9SRShbJDBdLCBbQUNfUlVOX0lGRUxTRV0pCistCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKy0gIEFDX1JFUVVJUkUoW0FDX0FJWF0pCistICBBQ19SRVFVSVJFKFtBQ19NSU5JWF0pCistCistICBBSF9WRVJCQVRJTShbX19FWFRFTlNJT05TX19dLAorLVsvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKy0jaWZuZGVmIF9fRVhURU5TSU9OU19fCistIyB1bmRlZiBfX0VYVEVOU0lPTlNfXworLSNlbmRpZgorLSNpZm5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCistIyB1bmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKy0jZW5kaWYKKy0jaWZuZGVmIF9UQU5ERU1fU09VUkNFCistIyB1bmRlZiBfVEFOREVNX1NPVVJDRQorLSNlbmRpZl0pCistICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpdCBpcyBzYWZlIHRvIGRlZmluZSBfX0VYVEVOU0lPTlNfX10sCistICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfX10sCistICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKKy0gICAgICAgW0FDX0xBTkdfUFJPR1JBTShbCistIwkgIGRlZmluZSBfX0VYVEVOU0lPTlNfXyAxCistCSAgQUNfSU5DTFVERVNfREVGQVVMVF0pXSwKKy0gICAgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPXllc10sCistICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz1ub10pXSkKKy0gIHRlc3QgJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fID0geWVzICYmCistICAgIEFDX0RFRklORShbX19FWFRFTlNJT05TX19dKQorLSAgQUNfREVGSU5FKFtfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1NdKQorLSAgQUNfREVGSU5FKFtfVEFOREVNX1NPVVJDRV0pCistXSkKKysjQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCisrI1sKKysjICBBQ19CRUZPUkUoWyQwXSwgW0FDX0NPTVBJTEVfSUZFTFNFXSkKKysjICBBQ19CRUZPUkUoWyQwXSwgW0FDX1JVTl9JRkVMU0VdKQorKyMKKysjICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysjICBBQ19SRVFVSVJFKFtBQ19BSVhdKQorKyMgIEFDX1JFUVVJUkUoW0FDX01JTklYXSkKKysjCisrIyAgQUhfVkVSQkFUSU0oW19fRVhURU5TSU9OU19fXSwKKysjWy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIFNvbGFyaXMuICAqLworKyMjaWZuZGVmIF9fRVhURU5TSU9OU19fCisrIyMgdW5kZWYgX19FWFRFTlNJT05TX18KKysjI2VuZGlmCisrIyNpZm5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisrIyMgdW5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisrIyNlbmRpZgorKyMjaWZuZGVmIF9UQU5ERU1fU09VUkNFCisrIyMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKysjI2VuZGlmXSkKKysjICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpdCBpcyBzYWZlIHRvIGRlZmluZSBfX0VYVEVOU0lPTlNfX10sCisrIyAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX19dLAorKyMgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorKyMgICAgICAgW0FDX0xBTkdfUFJPR1JBTShbCisrIyMJICBkZWZpbmUgX19FWFRFTlNJT05TX18gMQorKyMJICBBQ19JTkNMVURFU19ERUZBVUxUXSldLAorKyMgICAgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPXllc10sCisrIyAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm9dKV0pCisrIyAgdGVzdCAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18gPSB5ZXMgJiYKKysjICAgIEFDX0RFRklORShbX19FWFRFTlNJT05TX19dKQorKyMgIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKysjICBBQ19ERUZJTkUoW19UQU5ERU1fU09VUkNFXSkKKysjXSkKKyAKKyAjIGdsX1VTRV9TWVNURU1fRVhURU5TSU9OUworICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorICMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorIEFDX0RFRlVOKFtnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorLSAgW0FDX1JFUVVJUkUoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10pXSkKKytbCisrICAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrCisrICAgQUNfUkVRVUlSRShbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKKytdKQorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZm5tYXRjaC5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZm5tYXRjaC5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L2ZubWF0Y2gubTQJMjAwNi0xMS0yNyAwOToxNDo1NC4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZm5tYXRjaC5tNAkyMDExLTAzLTE2IDIzOjUyOjA2LjQ3NzQ2MzY3MSAtMDcwMAorQEAgLTkxLDcgKzkxLDcgQEAKKyBBQ19ERUZVTihbZ2xfRlVOQ19GTk1BVENIX0dOVV0sCisgWworICAgZG5sIFBlcnN1YWRlIGdsaWJjIDxmbm1hdGNoLmg+IHRvIGRlY2xhcmUgRk5NX0NBU0VGT0xEIGV0Yy4KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyAgZG5sIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorIAorICAgRk5NQVRDSF9IPQorICAgX0FDX0ZVTkNfRk5NQVRDSF9JRihbR05VXSwgW2FjX2N2X2Z1bmNfZm5tYXRjaF9nbnVdLAorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0ZGVsaW0ubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L2dldGRlbGltLm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0ZGVsaW0ubTQJMjAwNi0xMS0yNyAwOToxNDo1NC4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0ZGVsaW0ubTQJMjAxMS0wMy0xNiAyMzo1MjoyMi44NzE2NzQ4NDUgLTA3MDAKK0BAIC0xMiw3ICsxMiw3IEBACisgWworIAorICAgZG5sIFBlcnN1YWRlIGdsaWJjIDxzdGRpby5oPiB0byBkZWNsYXJlIGdldGRlbGltKCkuCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAKKyAgIEFDX1JFUExBQ0VfRlVOQ1MoZ2V0ZGVsaW0pCisgICBBQ19DSEVDS19ERUNMU19PTkNFKGdldGRlbGltKQorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0bGluZS5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0bGluZS5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L2dldGxpbmUubTQJMjAwNi0xMS0yNyAwOToxNDo1NC4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0bGluZS5tNAkyMDExLTAzLTE2IDIzOjUxOjQ5LjgyOTk3MTEwOCAtMDcwMAorQEAgLTE2LDcgKzE2LDcgQEAKKyBBQ19ERUZVTihbZ2xfRlVOQ19HRVRMSU5FXSwKKyBbCisgICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHN0ZGlvLmg+IHRvIGRlY2xhcmUgZ2V0bGluZSgpLgorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisgCisgICBBQ19DSEVDS19ERUNMUyhbZ2V0bGluZV0pCisgCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ251bGliLWNvbXAubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNAkyMDA2LTExLTI3IDA5OjMzOjM2LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNAkyMDExLTAzLTE2IDIzOjUyOjE4Ljk3MDQ1MDQ4OCAtMDcwMAorQEAgLTI1LDcgKzI1LDcgQEAKKyAgIG00X3BhdHRlcm5fYWxsb3coW15nbF9MSUJPQkpTJF0pZG5sIGEgdmFyaWFibGUKKyAgIG00X3BhdHRlcm5fYWxsb3coW15nbF9MVExJQk9CSlMkXSlkbmwgYSB2YXJpYWJsZQorICAgQUNfUkVRVUlSRShbQUNfUFJPR19SQU5MSUJdKQorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisgICBBQ19SRVFVSVJFKFtnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorICAgQUNfUkVRVUlSRShbZ2xfTE9DS19FQVJMWV0pCisgXSkKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L21iY2hhci5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvbWJjaGFyLm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvbWJjaGFyLm00CTIwMDYtMTEtMjcgMDk6MTQ6NTUuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L21iY2hhci5tNAkyMDExLTAzLTE2IDIzOjUxOjQwLjg0NDQxMDIxNiAtMDcwMAorQEAgLTksNyArOSw3IEBACisgCisgQUNfREVGVU4oW2dsX01CQ0hBUl0sCisgWworLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisgICBkbmwgVGhlIGZvbGxvd2luZyBsaW5lIGlzIHRoYXQgc28gdGhlIHVzZXIgY2FuIHRlc3QgSEFWRV9XQ0hBUl9ICisgICBkbmwgYmVmb3JlICNpbmNsdWRlICJtYmNoYXIuaCIuCisgICBBQ19DSEVDS19IRUFERVJTX09OQ0UoW3djaGFyLmhdKQorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvc3RwY3B5Lm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9zdHBjcHkubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9zdHBjcHkubTQJMjAwNi0xMS0yNyAwOToxNDo1NS4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvc3RwY3B5Lm00CTIwMTEtMDMtMTYgMjM6NTI6MTQuNjkxMzk2MDQ1IC0wNzAwCitAQCAtNyw3ICs3LDcgQEAKKyBBQ19ERUZVTihbZ2xfRlVOQ19TVFBDUFldLAorIFsKKyAgIGRubCBQZXJzdWFkZSBnbGliYyA8c3RyaW5nLmg+IHRvIGRlY2xhcmUgc3RwY3B5KCkuCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAKKyAgIEFDX1JFUExBQ0VfRlVOQ1Moc3RwY3B5KQorICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zdHBjcHkgPSBubzsgdGhlbgorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvc3RwbmNweS5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvc3RwbmNweS5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L3N0cG5jcHkubTQJMjAwNi0xMS0yNyAwOToxNDo1NS4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvc3RwbmNweS5tNAkyMDExLTAzLTE2IDIzOjUyOjEwLjM1NjY0MTQ1OSAtMDcwMAorQEAgLTcsNyArNyw3IEBACisgQUNfREVGVU4oW2dsX0ZVTkNfU1RQTkNQWV0sCisgWworICAgZG5sIFBlcnN1YWRlIGdsaWJjIDxzdHJpbmcuaD4gdG8gZGVjbGFyZSBzdHBuY3B5KCkuCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAKKyAgIGRubCBCb3RoIGdsaWJjIGFuZCBBSVggKDQuMy4zLCA1LjEpIGhhdmUgYW4gc3RwbmNweSgpIGZ1bmN0aW9uCisgICBkbmwgZGVjbGFyZWQgaW4gPHN0cmluZy5oPi4gSXRzIHNpZGUgZWZmZWN0cyBhcmUgdGhlIHNhbWUgYXMgdGhvc2UKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L3djd2lkdGgubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L3djd2lkdGgubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC93Y3dpZHRoLm00CTIwMDYtMTEtMjcgMDk6MTQ6NTUuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L3djd2lkdGgubTQJMjAxMS0wMy0xNiAyMzo1MTowOC4yNjAzMjQyMjEgLTA3MDAKK0BAIC03LDcgKzcsNyBAQAorIEFDX0RFRlVOKFtnbF9GVU5DX1dDV0lEVEhdLAorIFsKKyAgIGRubCBQZXJzdWFkZSBnbGliYyA8d2NoYXIuaD4gdG8gZGVjbGFyZSB3Y3dpZHRoKCkuCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAKKyAgIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSkKKyAgIEFDX1JFUVVJUkUoW2d0X1RZUEVfV0NIQVJfVF0pCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2xpYmdldHRleHRwby9nbnVsaWItbTQvZ251bGliLWNvbXAubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvbGliZ2V0dGV4dHBvL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvbGliZ2V0dGV4dHBvL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNAkyMDA2LTExLTI3IDA5OjMzOjQ1LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2xpYmdldHRleHRwby9nbnVsaWItbTQvZ251bGliLWNvbXAubTQJMjAxMS0wMy0xNiAyMzo1MTowMi4wMzYwNjEzMTcgLTA3MDAKK0BAIC0yNSw3ICsyNSw3IEBACisgICBtNF9wYXR0ZXJuX2FsbG93KFteZ2xfTElCT0JKUyRdKWRubCBhIHZhcmlhYmxlCisgICBtNF9wYXR0ZXJuX2FsbG93KFteZ2xfTFRMSUJPQkpTJF0pZG5sIGEgdmFyaWFibGUKKyAgIEFDX1JFUVVJUkUoW0FDX1BST0dfUkFOTElCXSkKKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyAgZG5sIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorICAgQUNfUkVRVUlSRShbZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKKyAgIEFDX1JFUVVJUkUoW2dsX0xPQ0tfRUFSTFldKQorIF0pCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL200L3JlZ2V4Lm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL200L3JlZ2V4Lm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9tNC9yZWdleC5tNAkyMDA2LTExLTI3IDA5OjAyOjA1LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL200L3JlZ2V4Lm00CTIwMTEtMDMtMTYgMjM6NTA6NTMuNTMzNDc3MTk1IC0wNzAwCitAQCAtMTE2LDcgKzExNiw3IEBACisgICBkbmwgdG8gZ2V0IHRoZW0uCisgCisgICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHN0cmluZy5oPiB0byBkZWNsYXJlIG1lbXBjcHkoKS4KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyAgZG5sIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorIAorICAgQUNfUkVRVUlSRShbQUNfQ19SRVNUUklDVF0pCisgICBBQ19SRVFVSVJFKFtBQ19GVU5DX0FMTE9DQV0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1hdXRvY29uZi1saWItbGluay1uby1MLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2dldHRleHQtYXV0b2NvbmYtbGliLWxpbmstbm8tTC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzJmZTVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2dldHRleHQtYXV0b2NvbmYtbGliLWxpbmstbm8tTC5wYXRjaApAQCAtMCwwICsxLDE5IEBACisKKyMgUHVsbGVkIGZyb20gT3BlbkVtYmVkZGVkCisjIAorIyBDb21tZW50ZWQgYnk6IFNhdWwgV29sZCA8c2F1bC53b2xkQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKKy0tLSBnZXR0ZXh0LTAuMTcvYXV0b2NvbmYtbGliLWxpbmsvbTQvbGliLWxpbmsubTR+CTIwMDktMDQtMTcgMTU6MTI6MzAuMDAwMDAwMDAwIC0wNzAwCisrKysgZ2V0dGV4dC0wLjE3L2F1dG9jb25mLWxpYi1saW5rL200L2xpYi1saW5rLm00CTIwMDktMDQtMTcgMTU6Mzc6MzkuMDAwMDAwMDAwIC0wNzAwCitAQCAtMjY3LDYgKzI2Nyw5IEBACisgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIGZpCisgICAgICAgICAgIGZpCisrICAgICAgICAgIGRubCBKdXN0IGxldCB0aGUgY29tcGlsZXIgZmluZCB0aGUgbGlicmFyeSwgdGhlIGNvbXBpbGVyIGFuZCB1c2VyIGFyZSBzbWFydGVyIHRoZW4gdGhpcyBzY3JpcHQKKysgICAgICAgICAgZG5sIHdoZW4gY3Jvc3MgY29tcGlsaW5nIGFuZCB3b3JraW5nIHdpdGggYSByZWxvY2F0ZWQgaW5zdGFsbC4KKysgICAgICAgICAgZm91bmRfZGlyPSIiCisgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgorICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQltdTkFNRTsgZG8KKyAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC12cGF0aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXZwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwOWU0NTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC12cGF0aC5wYXRjaApAQCAtMCwwICsxLDIwIEBACisKKyMgUHVsbGVkIGZyb20gT3BlbkVtYmVkZGVkCisjIAorIyBDb21tZW50ZWQgYnk6IFNhdWwgV29sZCA8c2F1bC53b2xkQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvaW50bC9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdldHRleHQtMC4xNi4xLm9yaWcvZ2V0dGV4dC1ydW50aW1lL2ludGwvTWFrZWZpbGUuaW4JMjAwNi0xMS0yNyAwOTowMjowMC4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvaW50bC9NYWtlZmlsZS5pbgkyMDExLTAzLTE2IDE2OjA0OjQ5LjE3NTQxOTkzMCAtMDcwMAorQEAgLTM1LDcgKzM1LDcgQEAKKyAjICAgICdtYWtlJyBkb2VzIHRoZSB3cm9uZyB0aGluZyBpZiBHTlUgZ2V0dGV4dCB3YXMgY29uZmlndXJlZCB3aXRoCisgIyAgICAiLi9jb25maWd1cmUgLS1zcmNkaXI9YHB3ZGAiLCBuYW1lbHkgaXQgZ2V0cyBjb25mdXNlZCBieSB0aGUgLmxvIGFuZCAubGEKKyAjICAgIGZpbGVzIGl0IGZpbmRzIGluIHNyY2RpciA9IC4uLy4uL2dldHRleHQtcnVudGltZS9pbnRsLgorLVZQQVRIID0gJChzcmNkaXIpCisrI1ZQQVRIID0gJChzcmNkaXIpCisgCisgcHJlZml4ID0gQHByZWZpeEAKKyBleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9oYXJkY29kZV9tYWNyb192ZXJzaW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2hhcmRjb2RlX21hY3JvX3ZlcnNpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRhOGRkNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9oYXJkY29kZV9tYWNyb192ZXJzaW9uLnBhdGNoCkBAIC0wLDAgKzEsNTEgQEAKKworVGhpcyBwYXRjaCBoYXJkY29kZXMgaW4gdmVyc2lvbiAwLjE3IGZvciB0aGUgR0VUVEVYVF9NQUNST19WRVJTSU9OLAordGhlIHZlcnNpb24gY2hlY2sgaXMgb25seSBwYXJ0IG9mIDAuMTcgYW5kIHdpbGwgbm90IGFmZmVjdCBhbnkgMC4xNi4xCitvcGVyYXRpb25zCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvbTQvcG8ubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZXR0ZXh0LTAuMTYuMS5vcmlnL2dldHRleHQtcnVudGltZS9tNC9wby5tNAkyMDExLTAzLTE3IDAyOjI0OjI4Ljk1MzUyMDIzMSAtMDcwMAorKysrIGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9tNC9wby5tNAkyMDExLTAzLTE3IDAyOjI4OjI1LjQ1NTM5Njg2MiAtMDcwMAorQEAgLTI3LDYgKzI3LDkgQEAKKyAgIEFDX1JFUVVJUkUoW0FNX1BST0dfTUtESVJfUF0pZG5sIGRlZmluZWQgYnkgYXV0b21ha2UKKyAgIEFDX1JFUVVJUkUoW0FNX05MU10pZG5sCisgCisrICBkbmwgSGFyZGNvZGUgdGhlIE1BQ1JPX1ZFUlNJT04gdG8gMC4xNyBmb3IgZ251dGxzCisrICBBQ19TVUJTVChbR0VUVEVYVF9NQUNST19WRVJTSU9OXSwgWzAuMTddKQorKworICAgZG5sIFBlcmZvcm0gdGhlIGZvbGxvd2luZyB0ZXN0cyBhbHNvIGlmIC0tZGlzYWJsZS1ubHMgaGFzIGJlZW4gZ2l2ZW4sCisgICBkbmwgYmVjYXVzZSB0aGV5IGFyZSBuZWVkZWQgZm9yICJtYWtlIGRpc3QiIHRvIHdvcmsuCisgCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL3BvL01ha2VmaWxlLmluLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9nZXR0ZXh0LXJ1bnRpbWUvcG8vTWFrZWZpbGUuaW4uaW4JMjAxMS0wMy0xNyAwMjoyNDoyOC45NTM1MjAyMzEgLTA3MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvcG8vTWFrZWZpbGUuaW4uaW4JMjAxMS0wMy0xNyAwMjoyODowNy41NzQzOTUxNDQgLTA3MDAKK0BAIC0xMCw2ICsxMCw5IEBACisgIworICMgT3JpZ2luOiBnZXR0ZXh0LTAuMTYKKyAKKysjIEhhcmRjb2RlIHRoaXMgdmFsdWUgZm9yIGdudXRscyBidWlsZGluZyBhZ2FpbnN0IGdwbHYyIGNvZGUKKytHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSAwLjE3CisrCisgUEFDS0FHRSA9IEBQQUNLQUdFQAorIFZFUlNJT04gPSBAVkVSU0lPTkAKKyBQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL3BvL01ha2VmaWxlLmluLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9nZXR0ZXh0LXRvb2xzL3BvL01ha2VmaWxlLmluLmluCTIwMTEtMDMtMTcgMDI6MjQ6MjguOTUzNTIwMjMxIC0wNzAwCisrKysgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9wby9NYWtlZmlsZS5pbi5pbgkyMDExLTAzLTE3IDAyOjI4OjA3LjU3NDM5NTE0NCAtMDcwMAorQEAgLTEwLDYgKzEwLDkgQEAKKyAjCisgIyBPcmlnaW46IGdldHRleHQtMC4xNgorIAorKyMgSGFyZGNvZGUgdGhpcyB2YWx1ZSBmb3IgZ251dGxzIGJ1aWxkaW5nIGFnYWluc3QgZ3BsdjIgY29kZQorK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IDAuMTcKKysKKyBQQUNLQUdFID0gQFBBQ0tBR0VACisgVkVSU0lPTiA9IEBWRVJTSU9OQAorIFBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2xpbmtsaWJfZnJvbV8wLjE3LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2xpbmtsaWJfZnJvbV8wLjE3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MjEwNjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvbGlua2xpYl9mcm9tXzAuMTcucGF0Y2gKQEAgLTAsMCArMSw3MjAgQEAKKworIyBQdWxsZWQgZnJvbSBPcGVuRW1iZWRkZWQKKyMgCisjIENvbW1lbnRlZCBieTogU2F1bCBXb2xkIDxzYXVsLndvbGRAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworSW5kZXg6IGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL200L2xpYi1saW5rLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9hdXRvY29uZi1saWItbGluay9tNC9saWItbGluay5tNAkyMDA2LTExLTI3IDA5OjAxOjU4LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL200L2xpYi1saW5rLm00CTIwMTEtMDMtMTcgMDA6MzY6MDguNzEwODM2NzIwIC0wNzAwCitAQCAtNiwxMiArNiwxNCBAQAorIAorIGRubCBGcm9tIEJydW5vIEhhaWJsZS4KKyAKKy1BQ19QUkVSRVEoMi41MCkKKytBQ19QUkVSRVEoMi41NCkKKyAKKyBkbmwgQUNfTElCX0xJTktGTEFHUyhuYW1lIFssIGRlcGVuZGVuY2llc10pIHNlYXJjaGVzIGZvciBsaWJuYW1lIGFuZAorIGRubCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kIGltcGxpY2l0IGRlcGVuZGVuY2llcy4KKyBkbmwgU2V0cyBhbmQgQUNfU1VCU1RzIHRoZSBMSUIke05BTUV9IGFuZCBMVExJQiR7TkFNRX0gdmFyaWFibGVzIGFuZAorIGRubCBhdWdtZW50cyB0aGUgQ1BQRkxBR1MgdmFyaWFibGUuCisrZG5sIFNldHMgYW5kIEFDX1NVQlNUcyB0aGUgTElCJHtOQU1FfV9QUkVGSVggdmFyaWFibGUgdG8gbm9uZW1wdHkgaWYgbGlibmFtZQorK2RubCB3YXMgZm91bmQgaW4gJHtMSUIke05BTUV9X1BSRUZJWH0vJGFjbF9saWJkaXJzdGVtLgorIEFDX0RFRlVOKFtBQ19MSUJfTElOS0ZMQUdTXSwKKyBbCisgICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorQEAgLTI0LDEzICsyNiwxNiBAQAorICAgICBhY19jdl9saWJbXU5hbWVbXV9saWJzPSIkTElCW11OQU1FIgorICAgICBhY19jdl9saWJbXU5hbWVbXV9sdGxpYnM9IiRMVExJQltdTkFNRSIKKyAgICAgYWNfY3ZfbGliW11OYW1lW11fY3BwZmxhZ3M9IiRJTkNbXU5BTUUiCisrICAgIGFjX2N2X2xpYltdTmFtZVtdX3ByZWZpeD0iJExJQltdTkFNRVtdX1BSRUZJWCIKKyAgIF0pCisgICBMSUJbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9saWJzIgorICAgTFRMSUJbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9sdGxpYnMiCisgICBJTkNbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9jcHBmbGFncyIKKysgIExJQltdTkFNRVtdX1BSRUZJWD0iJGFjX2N2X2xpYltdTmFtZVtdX3ByZWZpeCIKKyAgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ11OQU1FKQorICAgQUNfU1VCU1QoW0xJQl1OQU1FKQorICAgQUNfU1VCU1QoW0xUTElCXU5BTUUpCisrICBBQ19TVUJTVChbTElCXU5BTUVbX1BSRUZJWF0pCisgICBkbmwgQWxzbyBzZXQgSEFWRV9MSUJbXU5BTUUgc28gdGhhdCBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgY2FuIHJldXNlIHRoZQorICAgZG5sIHJlc3VsdHMgb2YgdGhpcyBzZWFyY2ggd2hlbiB0aGlzIGxpYnJhcnkgYXBwZWFycyBhcyBhIGRlcGVuZGVuY3kuCisgICBIQVZFX0xJQltdTkFNRT15ZXMKK0BAIC00Niw2ICs1MSw4IEBACisgZG5sIExUTElCJHtOQU1FfSB2YXJpYWJsZXMgYW5kIGF1Z21lbnRzIHRoZSBDUFBGTEFHUyB2YXJpYWJsZSwgYW5kCisgZG5sICNkZWZpbmVzIEhBVkVfTElCJHtOQU1FfSB0byAxLiBPdGhlcndpc2UsIGl0IHNldHMgYW5kIEFDX1NVQlNUcworIGRubCBIQVZFX0xJQiR7TkFNRX09bm8gYW5kIExJQiR7TkFNRX0gYW5kIExUTElCJHtOQU1FfSB0byBlbXB0eS4KKytkbmwgU2V0cyBhbmQgQUNfU1VCU1RzIHRoZSBMSUIke05BTUV9X1BSRUZJWCB2YXJpYWJsZSB0byBub25lbXB0eSBpZiBsaWJuYW1lCisrZG5sIHdhcyBmb3VuZCBpbiAke0xJQiR7TkFNRX1fUFJFRklYfS8kYWNsX2xpYmRpcnN0ZW0uCisgQUNfREVGVU4oW0FDX0xJQl9IQVZFX0xJTktGTEFHU10sCisgWworICAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKK0BAIC04MiwxNyArODksMjQgQEAKKyAgICAgQ1BQRkxBR1M9IiRhY19zYXZlX0NQUEZMQUdTIgorICAgICBMSUJbXU5BTUU9CisgICAgIExUTElCW11OQU1FPQorKyAgICBMSUJbXU5BTUVbXV9QUkVGSVg9CisrCisgICBmaQorICAgQUNfU1VCU1QoW0hBVkVfTElCXU5BTUUpCisgICBBQ19TVUJTVChbTElCXU5BTUUpCisgICBBQ19TVUJTVChbTFRMSUJdTkFNRSkKKysgIEFDX1NVQlNUKFtMSUJdTkFNRVtfUFJFRklYXSkKKyAgIHVuZGVmaW5lKFtOYW1lXSkKKyAgIHVuZGVmaW5lKFtOQU1FXSkKKyBdKQorIAorIGRubCBEZXRlcm1pbmUgdGhlIHBsYXRmb3JtIGRlcGVuZGVudCBwYXJhbWV0ZXJzIG5lZWRlZCB0byB1c2UgcnBhdGg6CistZG5sIGxpYmV4dCwgc2hsaWJleHQsIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsCistZG5sIGhhcmRjb2RlX2RpcmVjdCwgaGFyZGNvZGVfbWludXNfTC4KKytkbmwgICBhY2xfbGliZXh0LAorK2RubCAgIGFjbF9zaGxpYmV4dCwKKytkbmwgICBhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywKKytkbmwgICBhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwKKytkbmwgICBhY2xfaGFyZGNvZGVfZGlyZWN0LAorK2RubCAgIGFjbF9oYXJkY29kZV9taW51c19MLgorIEFDX0RFRlVOKFtBQ19MSUJfUlBBVEhdLAorIFsKKyAgIGRubCBUZWxsIGF1dG9tYWtlID49IDEuMTAgdG8gY29tcGxhaW4gaWYgY29uZmlnLnJwYXRoIGlzIG1pc3NpbmcuCitAQCAtMTA5LDEyICsxMjMsMTQgQEAKKyAgICAgYWNsX2N2X3JwYXRoPWRvbmUKKyAgIF0pCisgICB3bD0iJGFjbF9jdl93bCIKKy0gIGxpYmV4dD0iJGFjbF9jdl9saWJleHQiCistICBzaGxpYmV4dD0iJGFjbF9jdl9zaGxpYmV4dCIKKy0gIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIKKy0gIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKKy0gIGhhcmRjb2RlX2RpcmVjdD0iJGFjbF9jdl9oYXJkY29kZV9kaXJlY3QiCistICBoYXJkY29kZV9taW51c19MPSIkYWNsX2N2X2hhcmRjb2RlX21pbnVzX0wiCisrICBhY2xfbGliZXh0PSIkYWNsX2N2X2xpYmV4dCIKKysgIGFjbF9zaGxpYmV4dD0iJGFjbF9jdl9zaGxpYmV4dCIKKysgIGFjbF9saWJuYW1lX3NwZWM9IiRhY2xfY3ZfbGlibmFtZV9zcGVjIgorKyAgYWNsX2xpYnJhcnlfbmFtZXNfc3BlYz0iJGFjbF9jdl9saWJyYXJ5X25hbWVzX3NwZWMiCisrICBhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgorKyAgYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKKysgIGFjbF9oYXJkY29kZV9kaXJlY3Q9IiRhY2xfY3ZfaGFyZGNvZGVfZGlyZWN0IgorKyAgYWNsX2hhcmRjb2RlX21pbnVzX0w9IiRhY2xfY3ZfaGFyZGNvZGVfbWludXNfTCIKKyAgIGRubCBEZXRlcm1pbmUgd2hldGhlciB0aGUgdXNlciB3YW50cyBycGF0aCBoYW5kbGluZyBhdCBhbGwuCisgICBBQ19BUkdfRU5BQkxFKHJwYXRoLAorICAgICBbICAtLWRpc2FibGUtcnBhdGggICAgICAgICBkbyBub3QgaGFyZGNvZGUgcnVudGltZSBsaWJyYXJ5IHBhdGhzXSwKK0BAIC0xMjQsMjAgKzE0MCwyNCBAQAorIGRubCBBQ19MSUJfTElOS0ZMQUdTX0JPRFkobmFtZSBbLCBkZXBlbmRlbmNpZXNdKSBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQKKyBkbmwgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMuCisgZG5sIFNldHMgdGhlIExJQiR7TkFNRX0sIExUTElCJHtOQU1FfSBhbmQgSU5DJHtOQU1FfSB2YXJpYWJsZXMuCisrZG5sIEFsc28sIHNldHMgdGhlIExJQiR7TkFNRX1fUFJFRklYIHZhcmlhYmxlIHRvIG5vbmVtcHR5IGlmIGxpYm5hbWUgd2FzIGZvdW5kCisrZG5sIGluICR7TElCJHtOQU1FfV9QUkVGSVh9LyRhY2xfbGliZGlyc3RlbS4KKyBBQ19ERUZVTihbQUNfTElCX0xJTktGTEFHU19CT0RZXSwKKyBbCisgICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9NVUxUSUxJQl0pCisgICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSkKKysgIGRubCBBdXRvY29uZiA+PSAyLjYxIHN1cHBvcnRzIGRvdHMgaW4gLS13aXRoIG9wdGlvbnMuCisrICBkZWZpbmUoW05fQV9NX0VdLFttNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUobTRfZGVmbihbbTRfUEFDS0FHRV9WRVJTSU9OXSksWzIuNjFdKSxbLTFdLFt0cmFuc2xpdChbJDFdLFsuXSxbX10pXSxbJDFdKV0pCisgICBkbmwgQnkgZGVmYXVsdCwgbG9vayBpbiAkaW5jbHVkZWRpciBhbmQgJGxpYmRpci4KKyAgIHVzZV9hZGRpdGlvbmFsPXllcworICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKyAgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKyAgIF0pCistICBBQ19MSUJfQVJHX1dJVEgoW2xpYiQxLXByZWZpeF0sCistWyAgLS13aXRoLWxpYiQxLXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBsaWIkMSBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorLSAgLS13aXRob3V0LWxpYiQxLXByZWZpeCAgICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWIkMSBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXJdLAorKyAgQUNfTElCX0FSR19XSVRIKFtsaWJdTl9BX01fRVstcHJlZml4XSwKKytbICAtLXdpdGgtbGliXU5fQV9NX0VbLXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBsaWIkMSBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorKyAgLS13aXRob3V0LWxpYl1OX0FfTV9FWy1wcmVmaXggICAgIGRvbid0IHNlYXJjaCBmb3IgbGliJDEgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyXSwKKyBbCisgICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgorICAgICAgIHVzZV9hZGRpdGlvbmFsPW5vCitAQCAtMTU4LDYgKzE3OCw3IEBACisgICBMSUJbXU5BTUU9CisgICBMVExJQltdTkFNRT0KKyAgIElOQ1tdTkFNRT0KKysgIExJQltdTkFNRVtdX1BSRUZJWD0KKyAgIHJwYXRoZGlycz0KKyAgIGx0cnBhdGhkaXJzPQorICAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPQorQEAgLTE5NywyNyArMjE4LDUzIEBACisgICAgICAgICAgIGZvdW5kX2xhPQorICAgICAgICAgICBmb3VuZF9zbz0KKyAgICAgICAgICAgZm91bmRfYT0KKysgICAgICAgICAgZXZhbCBsaWJuYW1lPVwiJGFjbF9saWJuYW1lX3NwZWNcIiAgICAjIHR5cGljYWxseTogbGlibmFtZT1saWIkbmFtZQorKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgIHNocmV4dD0iLiRhY2xfc2hsaWJleHQiICAgICAgICAgICAgICMgdHlwaWNhbGx5OiBzaHJleHQ9LnNvCisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBzaHJleHQ9CisrICAgICAgICAgIGZpCisgICAgICAgICAgIGlmIHRlc3QgJHVzZV9hZGRpdGlvbmFsID0geWVzOyB0aGVuCistICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHNobGliZXh0IiBcCistICAgICAgICAgICAgICAgJiYgeyB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJHNobGliZXh0IiBcCistICAgICAgICAgICAgICAgICAgICB8fCB7IHRlc3QgIiRzaGxpYmV4dCIgPSBkbGwgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuZGxsLmEiOyB9OyB9OyB0aGVuCistICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKKy0gICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kc2hsaWJleHQiOyB0aGVuCistICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJHNobGliZXh0IgorKyAgICAgICAgICAgIGRpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgorKyAgICAgICAgICAgIGRubCBUaGUgc2FtZSBjb2RlIGFzIGluIHRoZSBsb29wIGJlbG93OgorKyAgICAgICAgICAgIGRubCBGaXJzdCBsb29rIGZvciBhIHNoYXJlZCBsaWJyYXJ5LgorKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCisrICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorKyAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQiCisgICAgICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuZGxsLmEiCisrICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjIiA9ICckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JzsgdGhlbgorKyAgICAgICAgICAgICAgICAgIHZlcj1gKGNkICIkZGlyIiAmJiBcCisrICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gIiRsaWJuYW1lJHNocmV4dCIuKjsgZG8gZWNobyAiJGYiOyBkb25lIFwKKysgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAicyxeJGxpYm5hbWUkc2hyZXh0XFxcXC4sLCIgXAorKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc29ydCAtdCAnLicgLW4gLXIgLWsxLDEgLWsyLDIgLWszLDMgLWs0LDQgLWs1LDUgXAorKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIDFxICkgMj4vZGV2L251bGxgCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHZlciIgJiYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIgorKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICBldmFsIGxpYnJhcnlfbmFtZXM9XCIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlY1wiCisrICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gJGxpYnJhcnlfbmFtZXM7IGRvCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRmIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRmIgorKyAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorLSAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIgorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZG5sIFRoZW4gbG9vayBmb3IgYSBzdGF0aWMgbGlicmFyeS4KKysgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiOyB0aGVuCisrICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCIKKyAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRsaWJleHQiOyB0aGVuCistICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgorLSAgICAgICAgICAgICAgICBmb3VuZF9hPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJGxpYmV4dCIKKy0gICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiCistICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLmxhIjsgdGhlbgorKyAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci8kbGlibmFtZS5sYSIKKyAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgZmkKK0BAIC0yMjcsMjYgKzI3NCw0NCBAQAorICAgICAgICAgICAgICAgY2FzZSAiJHgiIGluCisgICAgICAgICAgICAgICAgIC1MKikKKyAgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkeCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKy0gICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJleHQiIFwKKy0gICAgICAgICAgICAgICAgICAgICAmJiB7IHRlc3QgLWYgIiRkaXIvbGliJG5hbWUuJHNobGliZXh0IiBcCistICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB7IHRlc3QgIiRzaGxpYmV4dCIgPSBkbGwgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLmRsbC5hIjsgfTsgfTsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS4kc2hsaWJleHQiOyB0aGVuCistICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCIKKysgICAgICAgICAgICAgICAgICBkbmwgRmlyc3QgbG9vayBmb3IgYSBzaGFyZWQgbGlicmFyeS4KKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0IgorICAgICAgICAgICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci9saWIkbmFtZS5kbGwuYSIKKy0gICAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci9saWIkbmFtZS5sYSIKKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWMiID0gJyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgdmVyPWAoY2QgIiRkaXIiICYmIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAiJGxpYm5hbWUkc2hyZXh0Ii4qOyBkbyBlY2hvICIkZiI7IGRvbmUgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICJzLF4kbGlibmFtZSRzaHJleHRcXFxcLiwsIiBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzb3J0IC10ICcuJyAtbiAtciAtazEsMSAtazIsMiAtazMsMyAtazQsNCAtazUsNSBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgMXEgKSAyPi9kZXYvbnVsbGAKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkdmVyIiAmJiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiCisrICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwgbGlicmFyeV9uYW1lcz1cIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjXCIKKysgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGYiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGYiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS4kbGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZG5sIFRoZW4gbG9vayBmb3IgYSBzdGF0aWMgbGlicmFyeS4KKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKy0gICAgICAgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci9saWIkbmFtZS4kbGliZXh0IgorLSAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyL2xpYiRuYW1lLmxhIgorLSAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IgorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUubGEiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyLyRsaWJuYW1lLmxhIgorICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgIDs7CitAQCAtMjgyLDEyICszNDcsMTIgQEAKKyAgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRmb3VuZF9kaXIiCisgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgIGRubCBUaGUgaGFyZGNvZGluZyBpbnRvICRMSUJOQU1FIGlzIHN5c3RlbSBkZXBlbmRlbnQuCistICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCisrICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfaGFyZGNvZGVfZGlyZWN0IiA9IHllczsgdGhlbgorICAgICAgICAgICAgICAgICAgIGRubCBVc2luZyBESVIvbGliTkFNRS5zbyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisgICAgICAgICAgICAgICAgICAgZG5sIHJlc3VsdGluZyBiaW5hcnkuCisgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgJiYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiICYmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgZG5sIFVzZSBhbiBleHBsaWNpdCBvcHRpb24gdG8gaGFyZGNvZGUgRElSIGludG8gdGhlIHJlc3VsdGluZworICAgICAgICAgICAgICAgICAgICAgZG5sIGJpbmFyeS4KKyAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorQEAgLTMxOCwxMyArMzgzLDEzIEBACisgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1MJGZvdW5kX2RpciIKKyAgICAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgZG5sIEZJWE1FOiBOb3Qgc3VyZSB3aGV0aGVyIHdlIHNob3VsZCB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgZG5sICItTCRmb3VuZF9kaXIgLWwkbmFtZSIgb3IgIi1MJGZvdW5kX2RpciAkZm91bmRfc28iCisgICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLgorICAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgICAgICAgZG5sIFdlIGNhbm5vdCB1c2UgJGhhcmRjb2RlX3J1bnBhdGhfdmFyIGFuZCBMRF9SVU5fUEFUSAorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgV2UgY2Fubm90IHVzZSAkYWNsX2hhcmRjb2RlX3J1bnBhdGhfdmFyIGFuZCBMRF9SVU5fUEFUSAorICAgICAgICAgICAgICAgICAgICAgICBkbmwgaGVyZSwgYmVjYXVzZSB0aGlzIGRvZXNuJ3QgZml0IGluIGZsYWdzIHBhc3NlZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgZG5sIGNvbXBpbGVyLiBTbyBnaXZlIHVwLiBObyBoYXJkY29kaW5nLiBUaGlzIGFmZmVjdHMgb25seQorICAgICAgICAgICAgICAgICAgICAgICBkbmwgdmVyeSBvbGQgc3lzdGVtcy4KK0BAIC01MTIsMTggKzU3NywxOCBAQAorICAgICBkb25lCisgICBkb25lCisgICBpZiB0ZXN0ICJYJHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCistICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorKyAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisgICAgICAgZG5sIFdlaXJkIHBsYXRmb3JtOiBvbmx5IHRoZSBsYXN0IC1ycGF0aCBvcHRpb24gY291bnRzLCB0aGUgdXNlciBtdXN0CisgICAgICAgZG5sIHBhc3MgYWxsIHBhdGggZWxlbWVudHMgaW4gb25lIG9wdGlvbi4gV2UgY2FuIGFycmFuZ2UgdGhhdCBmb3IgYQorICAgICAgIGRubCBzaW5nbGUgbGlicmFyeSwgYnV0IG5vdCB3aGVuIG1vcmUgdGhhbiBvbmUgJExJQk5BTUVzIGFyZSB1c2VkLgorICAgICAgIGFsbGRpcnM9CisgICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbworLSAgICAgICAgYWxsZGlycz0iJHthbGxkaXJzfSR7YWxsZGlyczorJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGZvdW5kX2RpciIKKysgICAgICAgIGFsbGRpcnM9IiR7YWxsZGlyc30ke2FsbGRpcnM6KyRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcn0kZm91bmRfZGlyIgorICAgICAgIGRvbmUKKy0gICAgICBkbmwgTm90ZTogaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyB1c2VzICRsaWJkaXIgYW5kICR3bC4KKysgICAgICBkbmwgTm90ZTogYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgdXNlcyAkbGliZGlyIGFuZCAkd2wuCisgICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgorICAgICAgIGxpYmRpcj0iJGFsbGRpcnMiCistICAgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKyAgICAgIGV2YWwgZmxhZz1cIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZsYWciCisgICAgIGVsc2UKK0BAIC01MzEsNyArNTk2LDcgQEAKKyAgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCisgICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICAgICBsaWJkaXI9IiRmb3VuZF9kaXIiCistICAgICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZmxhZyIKKyAgICAgICBkb25lCitAQCAtNjQyLDMgKzcwNyw3OSBAQAorICAgZmkKKyAgIEFDX1NVQlNUKFskMV0pCisgXSkKKysKKytkbmwgRm9yIHRob3NlIGNhc2VzIHdoZXJlIGEgdmFyaWFibGUgY29udGFpbnMgc2V2ZXJhbCAtTCBhbmQgLWwgb3B0aW9ucworK2RubCByZWZlcnJpbmcgdG8gdW5rbm93biBsaWJyYXJpZXMgYW5kIGRpcmVjdG9yaWVzLCB0aGlzIG1hY3JvIGRldGVybWluZXMgdGhlCisrZG5sIG5lY2Vzc2FyeSBhZGRpdGlvbmFsIGxpbmtlciBvcHRpb25zIGZvciB0aGUgcnVudGltZSBwYXRoLgorK2RubCBBQ19MSUJfTElOS0ZMQUdTX0ZST01fTElCUyhbTERBRERWQVJdLCBbTElCU1ZBTFVFXSwgW1VTRS1MSUJUT09MXSkKKytkbmwgc2V0cyBMREFERFZBUiB0byBsaW5rZXIgb3B0aW9ucyBuZWVkZWQgdG9nZXRoZXIgd2l0aCBMSUJTVkFMVUUuCisrZG5sIElmIFVTRS1MSUJUT09MIGV2YWx1YXRlcyB0byBub24tZW1wdHksIGxpbmtpbmcgd2l0aCBsaWJ0b29sIGlzIGFzc3VtZWQsCisrZG5sIG90aGVyd2lzZSBsaW5raW5nIHdpdGhvdXQgbGlidG9vbCBpcyBhc3N1bWVkLgorK0FDX0RFRlVOKFtBQ19MSUJfTElOS0ZMQUdTX0ZST01fTElCU10sCisrWworKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX01VTFRJTElCXSkKKysgICQxPQorKyAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgIT0gbm87IHRoZW4KKysgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiAmJiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKysgICAgICBkbmwgVXNlIGFuIGV4cGxpY2l0IG9wdGlvbiB0byBoYXJkY29kZSBkaXJlY3RvcmllcyBpbnRvIHRoZSByZXN1bHRpbmcKKysgICAgICBkbmwgYmluYXJ5LgorKyAgICAgIHJwYXRoZGlycz0KKysgICAgICBuZXh0PQorKyAgICAgIGZvciBvcHQgaW4gJDI7IGRvCisrICAgICAgICBpZiB0ZXN0IC1uICIkbmV4dCI7IHRoZW4KKysgICAgICAgICAgZGlyPSIkbmV4dCIKKysgICAgICAgICAgZG5sIE5vIG5lZWQgdG8gaGFyZGNvZGUgdGhlIHN0YW5kYXJkIC91c3IvbGliLgorKyAgICAgICAgICBpZiB0ZXN0ICJYJGRpciIgIT0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KKysgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGRpciIKKysgICAgICAgICAgZmkKKysgICAgICAgICAgbmV4dD0KKysgICAgICAgIGVsc2UKKysgICAgICAgICAgY2FzZSAkb3B0IGluCisrICAgICAgICAgICAgLUwpIG5leHQ9eWVzIDs7CisrICAgICAgICAgICAgLUwqKSBkaXI9YGVjaG8gIlgkb3B0IiB8IHNlZCAtZSAncyxeWC1MLCwnYAorKyAgICAgICAgICAgICAgICAgZG5sIE5vIG5lZWQgdG8gaGFyZGNvZGUgdGhlIHN0YW5kYXJkIC91c3IvbGliLgorKyAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisrICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZGlyIgorKyAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgIG5leHQ9IDs7CisrICAgICAgICAgICAgKikgbmV4dD0gOzsKKysgICAgICAgICAgZXNhYworKyAgICAgICAgZmkKKysgICAgICBkb25lCisrICAgICAgaWYgdGVzdCAiWCRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorKyAgICAgICAgaWYgdGVzdCAtbiAiIiQzIiI7IHRoZW4KKysgICAgICAgICAgZG5sIGxpYnRvb2wgaXMgdXNlZCBmb3IgbGlua2luZy4gVXNlIC1SIG9wdGlvbnMuCisrICAgICAgICAgIGZvciBkaXIgaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAkMT0iJHskMX0keyQxOisgfS1SJGRpciIKKysgICAgICAgICAgZG9uZQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICBkbmwgVGhlIGxpbmtlciBpcyB1c2VkIGZvciBsaW5raW5nIGRpcmVjdGx5LgorKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisrICAgICAgICAgICAgZG5sIFdlaXJkIHBsYXRmb3JtOiBvbmx5IHRoZSBsYXN0IC1ycGF0aCBvcHRpb24gY291bnRzLCB0aGUgdXNlcgorKyAgICAgICAgICAgIGRubCBtdXN0IHBhc3MgYWxsIHBhdGggZWxlbWVudHMgaW4gb25lIG9wdGlvbi4KKysgICAgICAgICAgICBhbGxkaXJzPQorKyAgICAgICAgICAgIGZvciBkaXIgaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAgIGFsbGRpcnM9IiR7YWxsZGlyc30ke2FsbGRpcnM6KyRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcn0kZGlyIgorKyAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisrICAgICAgICAgICAgbGliZGlyPSIkYWxsZGlycyIKKysgICAgICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKyAgICAgICAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKysgICAgICAgICAgICAkMT0iJGZsYWciCisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBkbmwgVGhlIC1ycGF0aCBvcHRpb25zIGFyZSBjdW11bGF0aXZlLgorKyAgICAgICAgICAgIGZvciBkaXIgaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKysgICAgICAgICAgICAgIGxpYmRpcj0iJGRpciIKKysgICAgICAgICAgICAgIGV2YWwgZmxhZz1cIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgICAgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisrICAgICAgICAgICAgICAkMT0iJHskMX0keyQxOisgfSRmbGFnIgorKyAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgZmkKKysgIGZpCisrICBBQ19TVUJTVChbJDFdKQorK10pCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvYXV0b2NvbmYtbGliLWxpbmsvY29uZmlnLnJwYXRoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9hdXRvY29uZi1saWItbGluay9jb25maWcucnBhdGgJMjAwNi0xMS0yNyAwOTowMTo1OC4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay9jb25maWcucnBhdGgJMjAxMS0wMy0xNyAwMDozMzoyMy4zMzY1Mzk0OTAgLTA3MDAKK0BAIC0yLDcgKzIsNyBAQAorICMgT3V0cHV0IGEgc3lzdGVtIGRlcGVuZGVudCBzZXQgb2YgdmFyaWFibGVzLCBkZXNjcmliaW5nIGhvdyB0byBzZXQgdGhlCisgIyBydW4gdGltZSBzZWFyY2ggcGF0aCBvZiBzaGFyZWQgbGlicmFyaWVzIGluIGFuIGV4ZWN1dGFibGUuCisgIworLSMgICBDb3B5cmlnaHQgMTk5Ni0yMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICBDb3B5cmlnaHQgMTk5Ni0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICMgICBUYWtlbiBmcm9tIEdOVSBsaWJ0b29sLCAyMDAxCisgIyAgIE9yaWdpbmFsbHkgYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2CisgIworQEAgLTQ3LDYgKzQ3LDE4IEBACisgZG9uZQorIGNjX2Jhc2VuYW1lPWBlY2hvICIkY2NfdGVtcCIgfCBzZWQgLWUgJ3MlXi4qLyUlJ2AKKyAKKysjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgX0xUX0NDX0JBU0VOQU1FLgorKworK2ZvciBjY190ZW1wIGluICRDQyIiOyBkbworKyAgY2FzZSAkY2NfdGVtcCBpbgorKyAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CisrICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7CisrICAgIFwtKikgOzsKKysgICAgKikgYnJlYWs7OworKyAgZXNhYworK2RvbmUKKytjY19iYXNlbmFtZT1gZWNobyAiJGNjX3RlbXAiIHwgc2VkIC1lICdzJV4uKi8lJSdgCisrCisgIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIEFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUMuCisgCisgd2w9CitAQCAtNjQsNyArNzYsMTQgQEAKKyAgICAgICAgICAgOzsKKyAgICAgICBlc2FjCisgICAgICAgOzsKKy0gICAgbWluZ3cqIHwgcHczMiogfCBvczIqKQorKyAgICBkYXJ3aW4qKQorKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgICB4bGMqKQorKyAgICAgICAgICB3bD0nLVdsLCcKKysgICAgICAgICAgOzsKKysgICAgICBlc2FjCisrICAgICAgOzsKKysgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKikKKyAgICAgICA7OworICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgICB3bD0nLVdsLCcKK0BAIC03NCw3ICs5Myw3IEBACisgICAgICAgOzsKKyAgICAgbmV3c29zNikKKyAgICAgICA7OworLSAgICBsaW51eCopCisrICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCisgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgIGljYyogfCBlY2MqKQorICAgICAgICAgICB3bD0nLVdsLCcKK0BAIC0xMDAsNyArMTE5LDcgQEAKKyAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgIHdsPSctV2wsJworICAgICAgIDs7CistICAgIHNjbzMuMnY1KikKKysgICAgcmRvcyopCisgICAgICAgOzsKKyAgICAgc29sYXJpcyopCisgICAgICAgd2w9Jy1XbCwnCitAQCAtMTA4LDExICsxMjcsMTQgQEAKKyAgICAgc3Vub3M0KikKKyAgICAgICB3bD0nLVFvcHRpb24gbGQgJworICAgICAgIDs7CistICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKysgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqKQorICAgICAgIHdsPSctV2wsJworICAgICAgIDs7CisgICAgIHN5c3Y0Kk1QKikKKyAgICAgICA7OworKyAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorKyAgICAgIHdsPSctV2wsJworKyAgICAgIDs7CisgICAgIHVuaWNvcyopCisgICAgICAgd2w9Jy1XbCwnCisgICAgICAgOzsKK0BAIC0xNDEsNiArMTYzLDEwIEBACisgICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCisgICAgIHdpdGhfZ251X2xkPXllcworICAgICA7OworKyAgaW50ZXJpeCopCisrICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCisrICAgIHdpdGhfZ251X2xkPXllcworKyAgICA7OworICAgb3BlbmJzZCopCisgICAgIHdpdGhfZ251X2xkPW5vCisgICAgIDs7CitAQCAtMTg5LDExICsyMTUsMTEgQEAKKyAgICAgICAgIGxkX3NobGlicz1ubworICAgICAgIGZpCisgICAgICAgOzsKKy0gICAgaW50ZXJpeDMqKQorKyAgICBpbnRlcml4WzMtOV0qKQorICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICAgOzsKKy0gICAgbGludXgqKQorKyAgICBnbnUqIHwgbGludXgqIHwgaypic2QqLWdudSkKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgIDoKKyAgICAgICBlbHNlCitAQCAtMjgwLDcgKzMwNiw3IEBACisgICAgICAgICAgICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCistICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgICAgICAgIDoKKyAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKyAgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKK0BAIC0zNTksNyArMzg1LDcgQEAKKyAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICA7OworLSAgICBmcmVlYnNkKiB8IGtmcmVlYnNkKi1nbnUgfCBkcmFnb25mbHkqKQorKyAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICA7OworQEAgLTQxMiwxOCArNDM4LDIyIEBACisgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICAgOzsKKyAgICAgb3BlbmJzZCopCistICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworLSAgICAgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorLSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKysgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgICAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisrICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisrICAgICAgICBlbHNlCisrICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorKyAgICAgICAgICAgIG9wZW5ic2RbMDFdLiogfCBvcGVuYnNkMi5bMC03XSB8IG9wZW5ic2QyLlswLTddLiopCisrICAgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisrICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICopCisrICAgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworKyAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgZXNhYworKyAgICAgICAgZmkKKyAgICAgICBlbHNlCistICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKy0gICAgICAgICAgb3BlbmJzZFswMV0uKiB8IG9wZW5ic2QyLlswLTddIHwgb3BlbmJzZDIuWzAtN10uKikKKy0gICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCistICAgICAgICAgICAgOzsKKy0gICAgICAgICAgKikKKy0gICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworLSAgICAgICAgICAgIDs7CistICAgICAgICBlc2FjCisrICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorICAgICAgIDs7CisgICAgIG9zMiopCitAQCAtNDcxLDcgKzUwMSw3IEBACisgICAgICAgICBsZF9zaGxpYnM9eWVzCisgICAgICAgZmkKKyAgICAgICA7OworLSAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KikKKysgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfHNjbzMuMnY1LjAuWzAyNF0qKQorICAgICAgIDs7CisgICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LVIsJGxpYmRpcmAnCitAQCAtNDg4LDMzICs1MTgsNTEgQEAKKyAKKyAjIENoZWNrIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcworICMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUi4KKysjIFVubGlrZSBsaWJ0b29sLm00LCBoZXJlIHdlIGRvbid0IGNhcmUgYWJvdXQgX2FsbF8gbmFtZXMgb2YgdGhlIGxpYnJhcnksIGJ1dAorKyMgb25seSBhYm91dCB0aGUgb25lIHRoZSBsaW5rZXIgZmluZHMgd2hlbiBwYXNzZWQgLWxOQU1FLiBUaGlzIGlzIHRoZSBsYXN0CisrIyBlbGVtZW50IG9mIGxpYnJhcnlfbmFtZXNfc3BlYyBpbiBsaWJ0b29sLm00LCBvciBwb3NzaWJseSB0d28gb2YgdGhlbSBpZiB0aGUKKysjIGxpbmtlciBoYXMgc3BlY2lhbCBzZWFyY2ggcnVsZXMuCisrbGlicmFyeV9uYW1lc19zcGVjPSAgICAgICMgdGhlIGxhc3QgZWxlbWVudCBvZiBsaWJyYXJ5X25hbWVzX3NwZWMgaW4gbGlidG9vbC5tNAorIGxpYm5hbWVfc3BlYz0nbGliJG5hbWUnCisgY2FzZSAiJGhvc3Rfb3MiIGluCisgICBhaXgzKikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJworICAgICA7OworICAgYWl4NCogfCBhaXg1KikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBhbWlnYW9zKikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJworICAgICA7OworICAgYmVvcyopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgYnNkaVs0NV0qKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAgc2hyZXh0PS5kbGwKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYSAkbGlibmFtZS5saWInCisgICAgIDs7CisgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICBzaHJleHQ9LmR5bGliCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgZGd1eCopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgZnJlZWJzZDEqKQorICAgICA7OworLSAga2ZyZWVic2QqLWdudSkKKy0gICAgOzsKKyAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKysgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisrICAgICAgZnJlZWJzZFsxMjNdKikKKysgICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcgOzsKKysgICAgICAqKQorKyAgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnIDs7CisrICAgIGVzYWMKKyAgICAgOzsKKyAgIGdudSopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgIGNhc2UgJGhvc3RfY3B1IGluCitAQCAtNTI4LDEwICs1NzYsMTMgQEAKKyAgICAgICAgIHNocmV4dD0uc2wKKyAgICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CistICBpbnRlcml4MyopCisrICBpbnRlcml4WzMtOV0qKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICBpcml4NSogfCBub25zdG9wdXgqKQorICAgICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorQEAgLTU0OCwzMyArNTk5LDQ2IEBACisgICAgIDs7CisgICBsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQorICAgICA7OworLSAgbGludXgqKQorKyAgbGludXgqIHwgaypic2QqLWdudSkKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBrbmV0YnNkKi1nbnUpCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgbmV0YnNkKikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBuZXdzb3M2KQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIG50by1xbngqKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIG9wZW5ic2QqKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnCisgICAgIDs7CisgICBvczIqKQorICAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICAgICBzaHJleHQ9LmRsbAorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnCisgICAgIDs7CisgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgc29sYXJpcyopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgc3Vub3M0KikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JworICAgICA7OworICAgc3lzdjQgfCBzeXN2NC4zKikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBzeXN2NCpNUCopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgdXRzNCopCisgICAgIDs7CitAQCAtNTgzLDYgKzY0Nyw4IEBACisgc2VkX3F1b3RlX3N1YnN0PSdzL1woWyJgJFxcXVwpL1xcXDEvZycKKyBlc2NhcGVkX3dsPWBlY2hvICJYJHdsIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgc2hsaWJleHQ9YGVjaG8gIiRzaHJleHQiIHwgc2VkIC1lICdzLF5cLiwsJ2AKKytlc2NhcGVkX2xpYm5hbWVfc3BlYz1gZWNobyAiWCRsaWJuYW1lX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKytlc2NhcGVkX2xpYnJhcnlfbmFtZXNfc3BlYz1gZWNobyAiWCRsaWJyYXJ5X25hbWVzX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyBlc2NhcGVkX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9YGVjaG8gIlgkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorIAorIExDX0FMTD1DIHNlZCAtZSAncy9eXChbYS16QS1aMC05X10qXCk9L2FjbF9jdl9cMT0vJyA8PEVPRgorQEAgLTU5Niw2ICs2NjIsMTIgQEAKKyAjIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgInNvIikuCisgc2hsaWJleHQ9IiRzaGxpYmV4dCIKKyAKKysjIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgorK2xpYm5hbWVfc3BlYz0iJGVzY2FwZWRfbGlibmFtZV9zcGVjIgorKworKyMgTGlicmFyeSBuYW1lcyB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2hlbiBwYXNzZWQgLWxOQU1FLgorK2xpYnJhcnlfbmFtZXNfc3BlYz0iJGVzY2FwZWRfbGlicmFyeV9uYW1lc19zcGVjIgorKworICMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorICMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkZXNjYXBlZF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xOS40L3BhcmFsbGVsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xOS40L3BhcmFsbGVsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZTJjOTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE5LjQvcGFyYWxsZWwucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAoraW5zdGFsIGxpYmdldHRleHRsaWIuYSBiZWZvcmUgcmVtb3ZpbmcgaXQKKworSW4gYSBtdWx0aXBsZSBqb2IgYnVpbGQsIE1ha2VmaWxlIGNhbiBzaW11bHRhbmVvdXNseQorYmUgaW5zdGFsbGluZyBhbmQgcmVtb3ZpbmcgbGliZ2V0dGV4dGxpYi5hLiAgV2Ugc2VyaWFsaXplCit0aGUgb3BlcmF0aW9ucy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEpvZSBTbGF0ZXIgPGpzbGF0ZXJAd2luZHJpdmVyLmNvbT4KKworLS0tIGEvZ2V0dGV4dC10b29scy9nbnVsaWItbGliL01ha2VmaWxlLmFtCisrKysgYi9nZXR0ZXh0LXRvb2xzL2dudWxpYi1saWIvTWFrZWZpbGUuYW0KK0BAIC01Nyw2ICs1NywxMCBAQCBlbmRpZgorICMgUnVsZXMgZ2VuZXJhdGVkIGFuZCBjb2xsZWN0ZWQgYnkgZ251bGliLXRvb2wuCisgaW5jbHVkZSBNYWtlZmlsZS5nbnVsaWIKKyAKKysjIGRlZmluZWQgaW4gTWFrZWZpbGUuZ251bGliIGJ1dCBtaXNzaW5nIHRoaXMgZGVwZW5kZW5jeQorKyMKKytpbnN0YWxsLWV4ZWMtY2xlYW46IGluc3RhbGwtbGliTFRMSUJSQVJJRVMKKysKKyAjIFdoaWNoIGNsYXNzZXMgdG8gZXhwb3J0IGZyb20gdGhlIHNoYXJlZCBsaWJyYXJ5LgorIE1PT1BQRkxBR1MgKz0gLS1kbGxleHBvcnQ9c3R5bGVkX29zdHJlYW0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40LzAwMDEtUEFUQ0gtRGlzYWJsZS10aGUtdGVzdC10by1jb252ZXJ0LWV1Yy1qcC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40LzAwMDEtUEFUQ0gtRGlzYWJsZS10aGUtdGVzdC10by1jb252ZXJ0LWV1Yy1qcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWVmMmE1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvMDAwMS1QQVRDSC1EaXNhYmxlLXRoZS10ZXN0LXRvLWNvbnZlcnQtZXVjLWpwLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK1tQQVRDSF0gRGlzYWJsZSB0aGUgdGVzdCB0byBjb252ZXJ0IGV1Yy1qcAorCitSZW1vdmUgdGhlIHRlc3QgIlRlc3QgYWdhaW5zdCBIUC1VWCAxMS4xMSBidWc6CitObyBjb252ZXJ0ZXIgZnJvbSBFVUMtSlAgdG8gVVRGLTggaXMgcHJvdmlkZWQiCitzaW5jZSB3ZSBkb24ndCBzdXBwb3J0IEhQLVVYIGFuZCBpZiB0aGUgZXVjLWpwIGlzIG5vdAoraW5zdGFsbGVkIG9uIHRoZSBob3N0LCB0aGUgZGVwZW5kZW5jZSB3aWxsIGJlIGJ1aWx0IHdpdGhvdXQKK2ljb252IHN1cHBvcnQgYW5kIHdpbGwgY2F1c2UgZ3VpbGUtbmF0aXZlIGJ1aWxkaW5nIGZhaWwuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGljb252Lm00IHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2ljb252Lm00IGIvaWNvbnYubTQKK2luZGV4IDRlMzczNjMuLjM1ZjU0YmQgMTAwNjQ0CistLS0gYS9pY29udi5tNAorKysrIGIvaWNvbnYubTQKK0BAIC0xNjUsNiArMTY1LDcgQEAgQUNfREVGVU4oW0FNX0lDT05WX0xJTktdLAorICAgICAgIH0KKyAgIH0KKyAjZW5kaWYKKysjaWYgMAorICAgLyogVGVzdCBhZ2FpbnN0IEhQLVVYIDExLjExIGJ1ZzogTm8gY29udmVydGVyIGZyb20gRVVDLUpQIHRvIFVURi04IGlzCisgICAgICBwcm92aWRlZC4gICovCisgICBpZiAoLyogVHJ5IHN0YW5kYXJkaXplZCBuYW1lcy4gICovCitAQCAtMTc2LDYgKzE3Nyw3IEBAIEFDX0RFRlVOKFtBTV9JQ09OVl9MSU5LXSwKKyAgICAgICAvKiBUcnkgSFAtVVggbmFtZXMuICAqLworICAgICAgICYmIGljb252X29wZW4gKCJ1dGY4IiwgImV1Y0pQIikgPT0gKGljb252X3QpKC0xKSkKKyAgICAgcmVzdWx0IHw9IDE2OworKyNlbmRpZgorICAgcmV0dXJuIHJlc3VsdDsKKyBdXSldLAorICAgICAgICAgICBbYW1fY3ZfZnVuY19pY29udl93b3Jrcz15ZXNdLCAsCistLSAKKzIuMC4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L0NPUFlJTkcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMTFkMWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9DT1BZSU5HCkBAIC0wLDAgKzEsNCBAQAorZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9NYWtlZmlsZS5pbi5pbiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L01ha2VmaWxlLmluLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MDZiYTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9NYWtlZmlsZS5pbi5pbgpAQCAtMCwwICsxLDQ2NSBAQAorIyBNYWtlZmlsZSBmb3IgUE8gZGlyZWN0b3J5IGluIGFueSBwYWNrYWdlIHVzaW5nIEdOVSBnZXR0ZXh0LgorIyBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NywgMjAwMC0yMDA3LCAyMDA5LTIwMTAgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+CisjCisjIFRoaXMgZmlsZSBjYW4gYmUgY29waWVkIGFuZCB1c2VkIGZyZWVseSB3aXRob3V0IHJlc3RyaWN0aW9ucy4gIEl0IGNhbgorIyBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorIyBmdW5jdGlvbmFsaXR5LgorIyBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiBHTlUgZ2V0dGV4dCBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgaXMgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisjCisjIE9yaWdpbjogZ2V0dGV4dC0wLjE5CitHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSAwLjE5CisKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorCitTRUQgPSBAU0VEQAorU0hFTEwgPSAvYmluL3NoCitAU0VUX01BS0VACisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACisKK3ByZWZpeCA9IEBwcmVmaXhACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2dldHRleHRzcmNkaXIgPSAkKGRhdGFkaXIpL2dldHRleHQvcG8KKworSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKKworTUtESVJfUCA9IEBNS0RJUl9QQAorCitHTVNHRk1UXyA9IEBHTVNHRk1UQAorR01TR0ZNVF9ubyA9IEBHTVNHRk1UQAorR01TR0ZNVF95ZXMgPSBAR01TR0ZNVF8wMTVACitHTVNHRk1UID0gJChHTVNHRk1UXyQoVVNFX01TR0NUWFQpKQorTVNHRk1UXyA9IEBNU0dGTVRACitNU0dGTVRfbm8gPSBATVNHRk1UQAorTVNHRk1UX3llcyA9IEBNU0dGTVRfMDE1QAorTVNHRk1UID0gJChNU0dGTVRfJChVU0VfTVNHQ1RYVCkpCitYR0VUVEVYVF8gPSBAWEdFVFRFWFRACitYR0VUVEVYVF9ubyA9IEBYR0VUVEVYVEAKK1hHRVRURVhUX3llcyA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVCA9ICQoWEdFVFRFWFRfJChVU0VfTVNHQ1RYVCkpCitNU0dNRVJHRSA9IG1zZ21lcmdlCitNU0dNRVJHRV9VUERBVEUgPSBATVNHTUVSR0VAIC0tdXBkYXRlCitNU0dJTklUID0gbXNnaW5pdAorTVNHQ09OViA9IG1zZ2NvbnYKK01TR0ZJTFRFUiA9IG1zZ2ZpbHRlcgorCitQT0ZJTEVTID0gQFBPRklMRVNACitHTU9GSUxFUyA9IEBHTU9GSUxFU0AKK1VQREFURVBPRklMRVMgPSBAVVBEQVRFUE9GSUxFU0AKK0RVTU1ZUE9GSUxFUyA9IEBEVU1NWVBPRklMRVNACitESVNURklMRVMuY29tbW9uID0gTWFrZWZpbGUuaW4uaW4gcmVtb3ZlLXBvdGNkYXRlLnNpbiBcCiskKERJU1RGSUxFUy5jb21tb24uZXh0cmExKSAkKERJU1RGSUxFUy5jb21tb24uZXh0cmEyKSAkKERJU1RGSUxFUy5jb21tb24uZXh0cmEzKQorRElTVEZJTEVTID0gJChESVNURklMRVMuY29tbW9uKSBNYWtldmFycyBQT1RGSUxFUy5pbiBcCiskKFBPRklMRVMpICQoR01PRklMRVMpIFwKKyQoRElTVEZJTEVTLmV4dHJhMSkgJChESVNURklMRVMuZXh0cmEyKSAkKERJU1RGSUxFUy5leHRyYTMpCisKK1BPVEZJTEVTID0gXAorCitDQVRBTE9HUyA9IEBDQVRBTE9HU0AKKworUE9GSUxFU0RFUFNfID0gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QKK1BPRklMRVNERVBTX3llcyA9ICQoUE9GSUxFU0RFUFNfKQorUE9GSUxFU0RFUFNfbm8gPQorUE9GSUxFU0RFUFMgPSAkKFBPRklMRVNERVBTXyQoUE9fREVQRU5EU19PTl9QT1QpKQorCitESVNURklMRVNERVBTXyA9IHVwZGF0ZS1wbworRElTVEZJTEVTREVQU195ZXMgPSAkKERJU1RGSUxFU0RFUFNfKQorRElTVEZJTEVTREVQU19ubyA9CitESVNURklMRVNERVBTID0gJChESVNURklMRVNERVBTXyQoRElTVF9ERVBFTkRTX09OX1VQREFURV9QTykpCisKKyMgTWFrZXZhcnMgZ2V0cyBpbnNlcnRlZCBoZXJlLiAoRG9uJ3QgcmVtb3ZlIHRoaXMgbGluZSEpCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLnBvIC5nbW8gLm1vIC5zZWQgLnNpbiAubm9wIC5wby1jcmVhdGUgLnBvLXVwZGF0ZQorCisucG8ubW86CisJQGVjaG8gIiQoTVNHRk1UKSAtYyAtbyAkQCAkPCI7IFwKKwkkKE1TR0ZNVCkgLWMgLW8gdC0kQCAkPCAmJiBtdiB0LSRAICRACisKKy5wby5nbW86CisJQGxhbmc9YGVjaG8gJCogfCBzZWQgLWUgJ3MsLiovLCwnYDsgXAorCXRlc3QgIiQoc3JjZGlyKSIgPSAuICYmIGNkY21kPSIiIHx8IGNkY21kPSJjZCAkKHNyY2RpcikgJiYgIjsgXAorCWVjaG8gIiQke2NkY21kfXJtIC1mICQke2xhbmd9LmdtbyAmJiAkKEdNU0dGTVQpIC1jIC0tc3RhdGlzdGljcyAtLXZlcmJvc2UgLW8gJCR7bGFuZ30uZ21vICQke2xhbmd9LnBvIjsgXAorCWNkICQoc3JjZGlyKSAmJiBybSAtZiAkJHtsYW5nfS5nbW8gJiYgJChHTVNHRk1UKSAtYyAtLXN0YXRpc3RpY3MgLS12ZXJib3NlIC1vIHQtJCR7bGFuZ30uZ21vICQke2xhbmd9LnBvICYmIG12IHQtJCR7bGFuZ30uZ21vICQke2xhbmd9LmdtbworCisuc2luLnNlZDoKKwlzZWQgLWUgJy9eIy9kJyAkPCA+IHQtJEAKKwltdiB0LSRAICRACisKKworYWxsOiBhbGwtQFVTRV9OTFNACisKK2FsbC15ZXM6IHN0YW1wLXBvCithbGwtbm86CisKKyMgRW5zdXJlIHRoYXQgdGhlIGdldHRleHQgbWFjcm9zIGFuZCB0aGlzIE1ha2VmaWxlLmluLmluIGFyZSBpbiBzeW5jLgorQ0hFQ0tfTUFDUk9fVkVSU0lPTiA9IFwKKwl0ZXN0ICIkKEdFVFRFWFRfTUFDUk9fVkVSU0lPTikiID0gIkBHRVRURVhUX01BQ1JPX1ZFUlNJT05AIiBcCisJICB8fCB7IGVjaG8gIioqKiBlcnJvcjogZ2V0dGV4dCBpbmZyYXN0cnVjdHVyZSBtaXNtYXRjaDogdXNpbmcgYSBNYWtlZmlsZS5pbi5pbiBmcm9tIGdldHRleHQgdmVyc2lvbiAkKEdFVFRFWFRfTUFDUk9fVkVSU0lPTikgYnV0IHRoZSBhdXRvY29uZiBtYWNyb3MgYXJlIGZyb20gZ2V0dGV4dCB2ZXJzaW9uIEBHRVRURVhUX01BQ1JPX1ZFUlNJT05AIiAxPiYyOyBcCisJICAgICAgIGV4aXQgMTsgXAorCSAgICAgfQorCisjICQoc3JjZGlyKS8kKERPTUFJTikucG90IGlzIG9ubHkgY3JlYXRlZCB3aGVuIG5lZWRlZC4gV2hlbiB4Z2V0dGV4dCBmaW5kcyBubworIyBpbnRlcm5hdGlvbmFsaXplZCBtZXNzYWdlcywgbm8gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgaXMgY3JlYXRlZCAoYmVjYXVzZQorIyB3ZSBkb24ndCB3YW50IHRvIGJvdGhlciB0cmFuc2xhdG9ycyB3aXRoIGVtcHR5IFBPVCBmaWxlcykuIFdlIGFzc3VtZSB0aGF0CisjIExJTkdVQVMgaXMgZW1wdHkgaW4gdGhpcyBjYXNlLCBpLmUuICQoUE9GSUxFUykgYW5kICQoR01PRklMRVMpIGFyZSBlbXB0eS4KKyMgSW4gdGhpcyBjYXNlLCBzdGFtcC1wbyBpcyBhIG5vcCAoaS5lLiBhIHBob255IHRhcmdldCkuCisKKyMgc3RhbXAtcG8gaXMgYSB0aW1lc3RhbXAgZGVub3RpbmcgdGhlIGxhc3QgdGltZSBhdCB3aGljaCB0aGUgQ0FUQUxPR1MgaGF2ZQorIyBiZWVuIGxvb3NlbHkgdXBkYXRlZC4gSXRzIHB1cnBvc2UgaXMgdGhhdCB3aGVuIGEgZGV2ZWxvcGVyIG9yIHRyYW5zbGF0b3IKKyMgY2hlY2tzIG91dCB0aGUgcGFja2FnZSB2aWEgQ1ZTLCBhbmQgdGhlICQoRE9NQUlOKS5wb3QgZmlsZSBpcyBub3QgaW4gQ1ZTLAorIyAibWFrZSIgd2lsbCB1cGRhdGUgdGhlICQoRE9NQUlOKS5wb3QgYW5kIHRoZSAkKENBVEFMT0dTKSwgYnV0IHN1YnNlcXVlbnQKKyMgaW52b2NhdGlvbnMgb2YgIm1ha2UiIHdpbGwgZG8gbm90aGluZy4gVGhpcyB0aW1lc3RhbXAgd291bGQgbm90IGJlIG5lY2Vzc2FyeQorIyBpZiB1cGRhdGluZyB0aGUgJChDQVRBTE9HUykgd291bGQgYWx3YXlzIHRvdWNoIHRoZW07IGhvd2V2ZXIsIHRoZSBydWxlIGZvcgorIyAkKFBPRklMRVMpIGhhcyBiZWVuIGRlc2lnbmVkIHRvIG5vdCB0b3VjaCBmaWxlcyB0aGF0IGRvbid0IG5lZWQgdG8gYmUKKyMgY2hhbmdlZC4KK3N0YW1wLXBvOiAkKHNyY2RpcikvJChET01BSU4pLnBvdAorCUAkKENIRUNLX01BQ1JPX1ZFUlNJT04pCisJdGVzdCAhIC1mICQoc3JjZGlyKS8kKERPTUFJTikucG90IHx8IFwKKwkgIHRlc3QgLXogIiQoR01PRklMRVMpIiB8fCAkKE1BS0UpICQoR01PRklMRVMpCisJQHRlc3QgISAtZiAkKHNyY2RpcikvJChET01BSU4pLnBvdCB8fCB7IFwKKwkgIGVjaG8gInRvdWNoIHN0YW1wLXBvIiAmJiBcCisJICBlY2hvIHRpbWVzdGFtcCA+IHN0YW1wLXBvVCAmJiBcCisJICBtdiBzdGFtcC1wb1Qgc3RhbXAtcG87IFwKKwl9CisKKyMgTm90ZTogVGFyZ2V0ICdhbGwnIG11c3Qgbm90IGRlcGVuZCBvbiB0YXJnZXQgJyQoRE9NQUlOKS5wb3QtdXBkYXRlJywKKyMgb3RoZXJ3aXNlIHBhY2thZ2VzIGxpa2UgR0NDIGNhbiBub3QgYmUgYnVpbHQgaWYgb25seSBwYXJ0cyBvZiB0aGUgc291cmNlCisjIGhhdmUgYmVlbiBkb3dubG9hZGVkLgorCisjIFRoaXMgdGFyZ2V0IHJlYnVpbGRzICQoRE9NQUlOKS5wb3Q7IGl0IGlzIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb24uCisjIE5vdGUgdGhhdCAkKERPTUFJTikucG90IGlzIG5vdCB0b3VjaGVkIGlmIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBjaGFuZ2VkLgorIyBUaGUgZGV0ZXJtaW5hdGlvbiBvZiB3aGV0aGVyIHRoZSBwYWNrYWdlIHh5eiBpcyBhIEdOVSBvbmUgaXMgYmFzZWQgb24gdGhlCisjIGhldXJpc3RpYyB3aGV0aGVyIHNvbWUgZmlsZSBpbiB0aGUgdG9wIGxldmVsIGRpcmVjdG9yeSBtZW50aW9ucyAiR05VIHh5eiIuCisjIElmIEdOVSAnZmluZCcgaXMgYXZhaWxhYmxlLCB3ZSBhdm9pZCBncmVwcGluZyB0aHJvdWdoIG1vbnN0ZXIgZmlsZXMuCiskKERPTUFJTikucG90LXVwZGF0ZTogJChQT1RGSUxFUykgJChzcmNkaXIpL1BPVEZJTEVTLmluIHJlbW92ZS1wb3RjZGF0ZS5zZWQKKwlwYWNrYWdlX2dudT0iJChQQUNLQUdFX0dOVSkiOyBcCisJdGVzdCAtbiAiJCRwYWNrYWdlX2dudSIgfHwgeyBcCisJICBpZiB7IGlmIChMQ19BTEw9QyBmaW5kIC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCBncmVwIEdOVSA+L2Rldi9udWxsOyB0aGVuIFwKKwkJIExDX0FMTD1DIGZpbmQgLUwgJCh0b3Bfc3JjZGlyKSAtbWF4ZGVwdGggMSAtdHlwZSBmIFwKKwkJCSAgICAgICAtc2l6ZSAtMTAwMDAwMDBjIC1leGVjIGdyZXAgJ0dOVSBAUEFDS0FHRUAnIFwKKwkJCSAgICAgICAvZGV2L251bGwgJ3t9JyAnOycgMj4vZGV2L251bGw7IFwKKwkgICAgICAgZWxzZSBcCisJCSBMQ19BTEw9QyBncmVwICdHTlUgQFBBQ0tBR0VAJyAkKHRvcF9zcmNkaXIpLyogMj4vZGV2L251bGw7IFwKKwkgICAgICAgZmk7IFwKKwkgICAgIH0gfCBncmVwIC12ICdsaWJ0b29sOicgPi9kZXYvbnVsbDsgdGhlbiBcCisJICAgICBwYWNrYWdlX2dudT15ZXM7IFwKKwkgICBlbHNlIFwKKwkgICAgIHBhY2thZ2VfZ251PW5vOyBcCisJICAgZmk7IFwKKwl9OyBcCisJaWYgdGVzdCAiJCRwYWNrYWdlX2dudSIgPSAieWVzIjsgdGhlbiBcCisJICBwYWNrYWdlX3ByZWZpeD0nR05VICc7IFwKKwllbHNlIFwKKwkgIHBhY2thZ2VfcHJlZml4PScnOyBcCisJZmk7IFwKKwlpZiB0ZXN0IC1uICckKE1TR0lEX0JVR1NfQUREUkVTUyknIHx8IHRlc3QgJyQoUEFDS0FHRV9CVUdSRVBPUlQpJyA9ICdAJ1BBQ0tBR0VfQlVHUkVQT1JUJ0AnOyB0aGVuIFwKKwkgIG1zZ2lkX2J1Z3NfYWRkcmVzcz0nJChNU0dJRF9CVUdTX0FERFJFU1MpJzsgXAorCWVsc2UgXAorCSAgbXNnaWRfYnVnc19hZGRyZXNzPSckKFBBQ0tBR0VfQlVHUkVQT1JUKSc7IFwKKwlmaTsgXAorCWNhc2UgYCQoWEdFVFRFWFQpIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4gXAorCSAgJycgfCAwLlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtNV0gfCAwLjFbMC01XS4qIHwgMC4xNiB8IDAuMTYuWzAtMV0qKSBcCisJICAgICQoWEdFVFRFWFQpIC0tZGVmYXVsdC1kb21haW49JChET01BSU4pIC0tZGlyZWN0b3J5PSQodG9wX3NyY2RpcikgXAorCSAgICAgIC0tYWRkLWNvbW1lbnRzPVRSQU5TTEFUT1JTOiAkKFhHRVRURVhUX09QVElPTlMpIEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQCBcCisJICAgICAgLS1maWxlcy1mcm9tPSQoc3JjZGlyKS9QT1RGSUxFUy5pbiBcCisJICAgICAgLS1jb3B5cmlnaHQtaG9sZGVyPSckKENPUFlSSUdIVF9IT0xERVIpJyBcCisJICAgICAgLS1tc2dpZC1idWdzLWFkZHJlc3M9IiQkbXNnaWRfYnVnc19hZGRyZXNzIiBcCisJICAgIDs7IFwKKwkgICopIFwKKwkgICAgJChYR0VUVEVYVCkgLS1kZWZhdWx0LWRvbWFpbj0kKERPTUFJTikgLS1kaXJlY3Rvcnk9JCh0b3Bfc3JjZGlyKSBcCisJICAgICAgLS1hZGQtY29tbWVudHM9VFJBTlNMQVRPUlM6ICQoWEdFVFRFWFRfT1BUSU9OUykgQFhHRVRURVhUX0VYVFJBX09QVElPTlNAIFwKKwkgICAgICAtLWZpbGVzLWZyb209JChzcmNkaXIpL1BPVEZJTEVTLmluIFwKKwkgICAgICAtLWNvcHlyaWdodC1ob2xkZXI9JyQoQ09QWVJJR0hUX0hPTERFUiknIFwKKwkgICAgICAtLXBhY2thZ2UtbmFtZT0iJCR7cGFja2FnZV9wcmVmaXh9QFBBQ0tBR0VAIiBcCisJICAgICAgLS1wYWNrYWdlLXZlcnNpb249J0BWRVJTSU9OQCcgXAorCSAgICAgIC0tbXNnaWQtYnVncy1hZGRyZXNzPSIkJG1zZ2lkX2J1Z3NfYWRkcmVzcyIgXAorCSAgICA7OyBcCisJZXNhYworCXRlc3QgISAtZiAkKERPTUFJTikucG8gfHwgeyBcCisJICBpZiB0ZXN0IC1mICQoc3JjZGlyKS8kKERPTUFJTikucG90OyB0aGVuIFwKKwkgICAgc2VkIC1mIHJlbW92ZS1wb3RjZGF0ZS5zZWQgPCAkKHNyY2RpcikvJChET01BSU4pLnBvdCA+ICQoRE9NQUlOKS4xcG8gJiYgXAorCSAgICBzZWQgLWYgcmVtb3ZlLXBvdGNkYXRlLnNlZCA8ICQoRE9NQUlOKS5wbyA+ICQoRE9NQUlOKS4ycG8gJiYgXAorCSAgICBpZiBjbXAgJChET01BSU4pLjFwbyAkKERPTUFJTikuMnBvID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICAgICAgcm0gLWYgJChET01BSU4pLjFwbyAkKERPTUFJTikuMnBvICQoRE9NQUlOKS5wbzsgXAorCSAgICBlbHNlIFwKKwkgICAgICBybSAtZiAkKERPTUFJTikuMXBvICQoRE9NQUlOKS4ycG8gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgJiYgXAorCSAgICAgIG12ICQoRE9NQUlOKS5wbyAkKHNyY2RpcikvJChET01BSU4pLnBvdDsgXAorCSAgICBmaTsgXAorCSAgZWxzZSBcCisJICAgIG12ICQoRE9NQUlOKS5wbyAkKHNyY2RpcikvJChET01BSU4pLnBvdDsgXAorCSAgZmk7IFwKKwl9CisKKyMgVGhpcyBydWxlIGhhcyBubyBkZXBlbmRlbmNpZXM6IHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlICQoRE9NQUlOKS5wb3QgYXQKKyMgZXZlcnkgIm1ha2UiIGludm9jYXRpb24sIG9ubHkgY3JlYXRlIGl0IHdoZW4gaXQgaXMgbWlzc2luZy4KKyMgT25seSAibWFrZSAkKERPTUFJTikucG90LXVwZGF0ZSIgb3IgIm1ha2UgZGlzdCIgd2lsbCBmb3JjZSBhbiB1cGRhdGUuCiskKHNyY2RpcikvJChET01BSU4pLnBvdDoKKwkkKE1BS0UpICQoRE9NQUlOKS5wb3QtdXBkYXRlCisKKyMgVGhpcyB0YXJnZXQgcmVidWlsZHMgYSBQTyBmaWxlIGlmICQoRE9NQUlOKS5wb3QgaGFzIGNoYW5nZWQuCisjIE5vdGUgdGhhdCBhIFBPIGZpbGUgaXMgbm90IHRvdWNoZWQgaWYgaXQgZG9lc24ndCBuZWVkIHRvIGJlIGNoYW5nZWQuCiskKFBPRklMRVMpOiAkKFBPRklMRVNERVBTKQorCUBsYW5nPWBlY2hvICRAIHwgc2VkIC1lICdzLC4qLywsJyAtZSAncy9cLnBvJCQvLydgOyBcCisJaWYgdGVzdCAtZiAiJChzcmNkaXIpLyQke2xhbmd9LnBvIjsgdGhlbiBcCisJICB0ZXN0IC1mICQoc3JjZGlyKS8kKERPTUFJTikucG90IHx8ICQoTUFLRSkgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IFwKKwkgIHRlc3QgIiQoc3JjZGlyKSIgPSAuICYmIGNkY21kPSIiIHx8IGNkY21kPSJjZCAkKHNyY2RpcikgJiYgIjsgXAorCSAgZWNobyAiJCR7Y2RjbWR9JChNU0dNRVJHRV9VUERBVEUpICQoTVNHTUVSR0VfT1BUSU9OUykgLS1sYW5nPSQke2xhbmd9ICQke2xhbmd9LnBvICQoRE9NQUlOKS5wb3QiOyBcCisJICBjZCAkKHNyY2RpcikgXAorCSAgICAmJiB7IGNhc2UgYCQoTVNHTUVSR0VfVVBEQVRFKSAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluIFwKKwkgICAgICAgICAgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTddIHwgMC4xWzAtN10uKikgXAorCSAgICAgICAgICAgICAkKE1TR01FUkdFX1VQREFURSkgJChNU0dNRVJHRV9PUFRJT05TKSAkJHtsYW5nfS5wbyAkKERPTUFJTikucG90OzsgXAorCSAgICAgICAgICAgKikgXAorCSAgICAgICAgICAgICAkKE1TR01FUkdFX1VQREFURSkgJChNU0dNRVJHRV9PUFRJT05TKSAtLWxhbmc9JCR7bGFuZ30gJCR7bGFuZ30ucG8gJChET01BSU4pLnBvdDs7IFwKKwkgICAgICAgICBlc2FjOyBcCisJICAgICAgIH07IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJCR7bGFuZ30ucG8tY3JlYXRlOyBcCisJZmkKKworCitpbnN0YWxsOiBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1kYXRhCitpbnN0YWxsLWV4ZWM6CitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1AVVNFX05MU0AKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICAkKE1LRElSX1ApICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpOyBcCisJICBmb3IgZmlsZSBpbiAkKERJU1RGSUxFUy5jb21tb24pIE1ha2V2YXJzLnRlbXBsYXRlOyBkbyBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRmaWxlIFwKKwkJCSAgICAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKwkgIGRvbmU7IFwKKwkgIGZvciBmaWxlIGluIE1ha2V2YXJzOyBkbyBcCisJICAgIHJtIC1mICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAorCSAgZG9uZTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQoraW5zdGFsbC1kYXRhLW5vOiBhbGwKK2luc3RhbGwtZGF0YS15ZXM6IGFsbAorCUBjYXRhbG9ncz0nJChDQVRBTE9HUyknOyBcCisJZm9yIGNhdCBpbiAkJGNhdGFsb2dzOyBkbyBcCisJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAtZSAncy9cLmdtbyQkLy8nYDsgXAorCSAgZGlyPSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVM7IFwKKwkgICQoTUtESVJfUCkgJChERVNURElSKSQkZGlyOyBcCisJICBpZiB0ZXN0IC1yICQkY2F0OyB0aGVuIHJlYWxjYXQ9JCRjYXQ7IGVsc2UgcmVhbGNhdD0kKHNyY2RpcikvJCRjYXQ7IGZpOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRyZWFsY2F0ICQoREVTVERJUikkJGRpci8kKERPTUFJTikubW87IFwKKwkgIGVjaG8gImluc3RhbGxpbmcgJCRyZWFsY2F0IGFzICQoREVTVERJUikkJGRpci8kKERPTUFJTikubW8iOyBcCisJICBmb3IgbGMgaW4gJycgJChFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyk7IGRvIFwKKwkgICAgaWYgdGVzdCAtbiAiJCRsYyI7IHRoZW4gXAorCSAgICAgIGlmIChjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIDI+L2Rldi9udWxsKSB8IGdyZXAgJyAtPiAnID4vZGV2L251bGw7IHRoZW4gXAorCSAgICAgICAgbGluaz1gY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcgJiYgTENfQUxMPUMgbHMgLWwgLWQgJCRsYyB8IHNlZCAtZSAncy9eLiogLT4gLy8nYDsgXAorCSAgICAgICAgbXYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZDsgXAorCSAgICAgICAgbWtkaXIgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkICYmIFwKKwkgICAgICAgICBmb3IgZmlsZSBpbiAqOyBkbyBcCisJICAgICAgICAgICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBcCisJICAgICAgICAgICAgIGxuIC1zIC4uLyQkbGluay8kJGZpbGUgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kJGZpbGU7IFwKKwkgICAgICAgICAgIGZpOyBcCisJICAgICAgICAgZG9uZSk7IFwKKwkgICAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCisJICAgICAgZWxzZSBcCisJICAgICAgICBpZiB0ZXN0IC1kICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IHRoZW4gXAorCSAgICAgICAgICA6OyBcCisJICAgICAgICBlbHNlIFwKKwkgICAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICBmaTsgXAorCSAgICAgIGZpOyBcCisJICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW87IFwKKwkgICAgICBsbiAtcyAuLi9MQ19NRVNTQUdFUy8kKERPTUFJTikubW8gJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW8gMj4vZGV2L251bGwgfHwgXAorCSAgICAgIGxuICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nL0xDX01FU1NBR0VTLyQoRE9NQUlOKS5tbyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbyAyPi9kZXYvbnVsbCB8fCBcCisJICAgICAgY3AgLXAgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVMvJChET01BSU4pLm1vICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vOyBcCisJICAgICAgZWNobyAiaW5zdGFsbGluZyAkJHJlYWxjYXQgbGluayBhcyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbyI7IFwKKwkgICAgZmk7IFwKKwkgIGRvbmU7IFwKKwlkb25lCisKK2luc3RhbGwtc3RyaXA6IGluc3RhbGwKKworaW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLWV4ZWMgaW5zdGFsbGRpcnMtZGF0YQoraW5zdGFsbGRpcnMtZXhlYzoKK2luc3RhbGxkaXJzLWRhdGE6IGluc3RhbGxkaXJzLWRhdGEtQFVTRV9OTFNACisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorCSAgJChNS0RJUl9QKSAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQoraW5zdGFsbGRpcnMtZGF0YS1ubzoKK2luc3RhbGxkaXJzLWRhdGEteWVzOgorCUBjYXRhbG9ncz0nJChDQVRBTE9HUyknOyBcCisJZm9yIGNhdCBpbiAkJGNhdGFsb2dzOyBkbyBcCisJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAtZSAncy9cLmdtbyQkLy8nYDsgXAorCSAgZGlyPSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVM7IFwKKwkgICQoTUtESVJfUCkgJChERVNURElSKSQkZGlyOyBcCisJICBmb3IgbGMgaW4gJycgJChFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyk7IGRvIFwKKwkgICAgaWYgdGVzdCAtbiAiJCRsYyI7IHRoZW4gXAorCSAgICAgIGlmIChjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIDI+L2Rldi9udWxsKSB8IGdyZXAgJyAtPiAnID4vZGV2L251bGw7IHRoZW4gXAorCSAgICAgICAgbGluaz1gY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcgJiYgTENfQUxMPUMgbHMgLWwgLWQgJCRsYyB8IHNlZCAtZSAncy9eLiogLT4gLy8nYDsgXAorCSAgICAgICAgbXYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZDsgXAorCSAgICAgICAgbWtkaXIgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkICYmIFwKKwkgICAgICAgICBmb3IgZmlsZSBpbiAqOyBkbyBcCisJICAgICAgICAgICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBcCisJICAgICAgICAgICAgIGxuIC1zIC4uLyQkbGluay8kJGZpbGUgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kJGZpbGU7IFwKKwkgICAgICAgICAgIGZpOyBcCisJICAgICAgICAgZG9uZSk7IFwKKwkgICAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCisJICAgICAgZWxzZSBcCisJICAgICAgICBpZiB0ZXN0IC1kICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IHRoZW4gXAorCSAgICAgICAgICA6OyBcCisJICAgICAgICBlbHNlIFwKKwkgICAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICBmaTsgXAorCSAgICAgIGZpOyBcCisJICAgIGZpOyBcCisJICBkb25lOyBcCisJZG9uZQorCisjIERlZmluZSB0aGlzIGFzIGVtcHR5IHVudGlsIEkgZm91bmQgYSB1c2VmdWwgYXBwbGljYXRpb24uCitpbnN0YWxsY2hlY2s6CisKK3VuaW5zdGFsbDogdW5pbnN0YWxsLWV4ZWMgdW5pbnN0YWxsLWRhdGEKK3VuaW5zdGFsbC1leGVjOgordW5pbnN0YWxsLWRhdGE6IHVuaW5zdGFsbC1kYXRhLUBVU0VfTkxTQAorCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKwkgIGZvciBmaWxlIGluICQoRElTVEZJTEVTLmNvbW1vbikgTWFrZXZhcnMudGVtcGxhdGU7IGRvIFwKKwkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisJICBkb25lOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCit1bmluc3RhbGwtZGF0YS1ubzoKK3VuaW5zdGFsbC1kYXRhLXllczoKKwljYXRhbG9ncz0nJChDQVRBTE9HUyknOyBcCisJZm9yIGNhdCBpbiAkJGNhdGFsb2dzOyBkbyBcCisJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAtZSAncy9cLmdtbyQkLy8nYDsgXAorCSAgZm9yIGxjIGluIExDX01FU1NBR0VTICQoRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVMpOyBkbyBcCisJICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vOyBcCisJICBkb25lOyBcCisJZG9uZQorCitjaGVjazogYWxsCisKK2luZm8gZHZpIHBzIHBkZiBodG1sIHRhZ3MgVEFHUyBjdGFncyBDVEFHUyBJRDoKKworbW9zdGx5Y2xlYW46CisJcm0gLWYgcmVtb3ZlLXBvdGNkYXRlLnNlZAorCXJtIC1mIHN0YW1wLXBvVAorCXJtIC1mIGNvcmUgY29yZS4qICQoRE9NQUlOKS5wbyAkKERPTUFJTikuMXBvICQoRE9NQUlOKS4ycG8gKi5uZXcucG8KKwlybSAtZnIgKi5vCisKK2NsZWFuOiBtb3N0bHljbGVhbgorCitkaXN0Y2xlYW46IGNsZWFuCisJcm0gLWYgTWFrZWZpbGUgTWFrZWZpbGUuaW4gUE9URklMRVMgKi5tbworCittYWludGFpbmVyLWNsZWFuOiBkaXN0Y2xlYW4KKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2U7IgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKKwlybSAtZiBzdGFtcC1wbyAkKEdNT0ZJTEVTKQorCitkaXN0ZGlyID0gJCh0b3BfYnVpbGRkaXIpLyQoUEFDS0FHRSktJChWRVJTSU9OKS8kKHN1YmRpcikKK2Rpc3QgZGlzdGRpcjoKKwl0ZXN0IC16ICIkKERJU1RGSUxFU0RFUFMpIiB8fCAkKE1BS0UpICQoRElTVEZJTEVTREVQUykKKwlAJChNQUtFKSBkaXN0MgorIyBUaGlzIGlzIGEgc2VwYXJhdGUgdGFyZ2V0IGJlY2F1c2UgJ3VwZGF0ZS1wbycgbXVzdCBiZSBleGVjdXRlZCBiZWZvcmUuCitkaXN0Mjogc3RhbXAtcG8gJChESVNURklMRVMpCisJZGlzdHM9IiQoRElTVEZJTEVTKSI7IFwKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICBkaXN0cz0iJCRkaXN0cyBNYWtldmFycy50ZW1wbGF0ZSI7IFwKKwlmaTsgXAorCWlmIHRlc3QgLWYgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IHRoZW4gXAorCSAgZGlzdHM9IiQkZGlzdHMgJChET01BSU4pLnBvdCBzdGFtcC1wbyI7IFwKKwlmaTsgXAorCWlmIHRlc3QgLWYgJChzcmNkaXIpL0NoYW5nZUxvZzsgdGhlbiBcCisJICBkaXN0cz0iJCRkaXN0cyBDaGFuZ2VMb2ciOyBcCisJZmk7IFwKKwlmb3IgaSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5OyBkbyBcCisJICBpZiB0ZXN0IC1mICQoc3JjZGlyKS9DaGFuZ2VMb2cuJCRpOyB0aGVuIFwKKwkgICAgZGlzdHM9IiQkZGlzdHMgQ2hhbmdlTG9nLiQkaSI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCWlmIHRlc3QgLWYgJChzcmNkaXIpL0xJTkdVQVM7IHRoZW4gZGlzdHM9IiQkZGlzdHMgTElOR1VBUyI7IGZpOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gXAorCSAgICBjcCAtcCAkJGZpbGUgJChkaXN0ZGlyKSB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICBjcCAtcCAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwordXBkYXRlLXBvOiBNYWtlZmlsZQorCSQoTUFLRSkgJChET01BSU4pLnBvdC11cGRhdGUKKwl0ZXN0IC16ICIkKFVQREFURVBPRklMRVMpIiB8fCAkKE1BS0UpICQoVVBEQVRFUE9GSUxFUykKKwkkKE1BS0UpIHVwZGF0ZS1nbW8KKworIyBHZW5lcmFsIHJ1bGUgZm9yIGNyZWF0aW5nIFBPIGZpbGVzLgorCisubm9wLnBvLWNyZWF0ZToKKwlAbGFuZz1gZWNobyAkQCB8IHNlZCAtZSAncy9cLnBvLWNyZWF0ZSQkLy8nYDsgXAorCWVjaG8gIkZpbGUgJCRsYW5nLnBvIGRvZXMgbm90IGV4aXN0LiBJZiB5b3UgYXJlIGEgdHJhbnNsYXRvciwgeW91IGNhbiBjcmVhdGUgaXQgdGhyb3VnaCAnbXNnaW5pdCcuIiAxPiYyOyBcCisJZXhpdCAxCisKKyMgR2VuZXJhbCBydWxlIGZvciB1cGRhdGluZyBQTyBmaWxlcy4KKworLm5vcC5wby11cGRhdGU6CisJQGxhbmc9YGVjaG8gJEAgfCBzZWQgLWUgJ3MvXC5wby11cGRhdGUkJC8vJ2A7IFwKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBQQVRIPWBwd2RgLy4uL3NyYzokJFBBVEg7IGZpOyBcCisJdG1wZGlyPWBwd2RgOyBcCisJZWNobyAiJCRsYW5nOiI7IFwKKwl0ZXN0ICIkKHNyY2RpcikiID0gLiAmJiBjZGNtZD0iIiB8fCBjZGNtZD0iY2QgJChzcmNkaXIpICYmICI7IFwKKwllY2hvICIkJHtjZGNtZH0kKE1TR01FUkdFKSAkKE1TR01FUkdFX09QVElPTlMpIC0tbGFuZz0kJGxhbmcgJCRsYW5nLnBvICQoRE9NQUlOKS5wb3QgLW8gJCRsYW5nLm5ldy5wbyI7IFwKKwljZCAkKHNyY2Rpcik7IFwKKwlpZiB7IGNhc2UgYCQoTVNHTUVSR0UpIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4gXAorCSAgICAgICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC03XSB8IDAuMVswLTddLiopIFwKKwkgICAgICAgICAkKE1TR01FUkdFKSAkKE1TR01FUkdFX09QVElPTlMpIC1vICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gJCRsYW5nLnBvICQoRE9NQUlOKS5wb3Q7OyBcCisJICAgICAgICopIFwKKwkgICAgICAgICAkKE1TR01FUkdFKSAkKE1TR01FUkdFX09QVElPTlMpIC0tbGFuZz0kJGxhbmcgLW8gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyAkJGxhbmcucG8gJChET01BSU4pLnBvdDs7IFwKKwkgICAgIGVzYWM7IFwKKwkgICB9OyB0aGVuIFwKKwkgIGlmIGNtcCAkJGxhbmcucG8gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCisJICBlbHNlIFwKKwkgICAgaWYgbXYgLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyAkJGxhbmcucG87IHRoZW4gXAorCSAgICAgIDo7IFwKKwkgICAgZWxzZSBcCisJICAgICAgZWNobyAibXNnbWVyZ2UgZm9yICQkbGFuZy5wbyBmYWlsZWQ6IGNhbm5vdCBtb3ZlICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gdG8gJCRsYW5nLnBvIiAxPiYyOyBcCisJICAgICAgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICBmaTsgXAorCWVsc2UgXAorCSAgZWNobyAibXNnbWVyZ2UgZm9yICQkbGFuZy5wbyBmYWlsZWQhIiAxPiYyOyBcCisJICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCisJZmkKKworJChEVU1NWVBPRklMRVMpOgorCit1cGRhdGUtZ21vOiBNYWtlZmlsZSAkKEdNT0ZJTEVTKQorCUA6CisKKyMgUmVjcmVhdGUgTWFrZWZpbGUgYnkgaW52b2tpbmcgY29uZmlnLnN0YXR1cy4gRXhwbGljaXRseSBpbnZva2UgdGhlIHNoZWxsLAorIyBiZWNhdXNlIGV4ZWN1dGlvbiBwZXJtaXNzaW9uIGJpdHMgbWF5IG5vdCB3b3JrIG9uIHRoZSBjdXJyZW50IGZpbGUgc3lzdGVtLgorIyBVc2UgQFNIRUxMQCwgd2hpY2ggaXMgdGhlIHNoZWxsIGRldGVybWluZWQgYnkgYXV0b2NvbmYgZm9yIHRoZSB1c2UgYnkgaXRzCisjIHNjcmlwdHMsIG5vdCAkKFNIRUxMKSB3aGljaCBpcyBoYXJkd2lyZWQgdG8gL2Jpbi9zaCBhbmQgbWF5IGJlIGRlZmljaWVudC4KK01ha2VmaWxlOiBNYWtlZmlsZS5pbi5pbiBNYWtldmFycyAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyBAUE9NQUtFRklMRURFUFNACisJY2QgJCh0b3BfYnVpbGRkaXIpIFwKKwkgICYmIEBTSEVMTEAgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQC5pbiBwby1kaXJlY3RvcmllcworCitmb3JjZToKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIG5vdCB0byBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvYWNsb2NhbC50Z3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9hY2xvY2FsLnRnegpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDRiYTU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvYWNsb2NhbC50Z3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvY29uZmlnLnJwYXRoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvY29uZmlnLnJwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI2MjU2MjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9jb25maWcucnBhdGgKQEAgLTAsMCArMSw2ODQgQEAKKyMhIC9iaW4vc2gKKyMgT3V0cHV0IGEgc3lzdGVtIGRlcGVuZGVudCBzZXQgb2YgdmFyaWFibGVzLCBkZXNjcmliaW5nIGhvdyB0byBzZXQgdGhlCisjIHJ1biB0aW1lIHNlYXJjaCBwYXRoIG9mIHNoYXJlZCBsaWJyYXJpZXMgaW4gYW4gZXhlY3V0YWJsZS4KKyMKKyMgICBDb3B5cmlnaHQgMTk5Ni0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFRha2VuIGZyb20gR05VIGxpYnRvb2wsIDIwMDEKKyMgICBPcmlnaW5hbGx5IGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorIworIyAgIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjICAgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjICAgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisjCisjIFRoZSBmaXJzdCBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyBmaWxlIGlzIHRoZSBjYW5vbmljYWwgaG9zdCBzcGVjaWZpY2F0aW9uLAorIyAgICBDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTQorIyBvcgorIyAgICBDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU0KKyMgVGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBDQywgR0NDLCBMREZMQUdTLCBMRCwgd2l0aF9nbnVfbGQKKyMgc2hvdWxkIGJlIHNldCBieSB0aGUgY2FsbGVyLgorIworIyBUaGUgc2V0IG9mIGRlZmluZWQgdmFyaWFibGVzIGlzIGF0IHRoZSBlbmQgb2YgdGhpcyBzY3JpcHQuCisKKyMgS25vd24gbGltaXRhdGlvbnM6CisjIC0gT24gSVJJWCA2LjUgd2l0aCBDQz0iY2MiLCB0aGUgcnVuIHRpbWUgc2VhcmNoIHBhdGNoIG11c3Qgbm90IGJlIGxvbmdlcgorIyAgIHRoYW4gMjU2IGJ5dGVzLCBvdGhlcndpc2UgdGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGR1bXAgY29yZS4gVGhlIG9ubHkKKyMgICBrbm93biB3b3JrYXJvdW5kIGlzIHRvIGNob29zZSBzaG9ydGVyIGRpcmVjdG9yeSBuYW1lcyBmb3IgdGhlIGJ1aWxkCisjICAgZGlyZWN0b3J5IGFuZC9vciB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KKworIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgJy5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCisjIHdoaWNoIG5lZWRzICcubGliJykuCitsaWJleHQ9YQorc2hyZXh0PS5zbworCitob3N0PSIkMSIKK2hvc3RfY3B1PWBlY2hvICIkaG9zdCIgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYAoraG9zdF92ZW5kb3I9YGVjaG8gIiRob3N0IiB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wyLydgCitob3N0X29zPWBlY2hvICIkaG9zdCIgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorCisjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgX0xUX0NDX0JBU0VOQU1FLgorCitmb3IgY2NfdGVtcCBpbiAkQ0MiIjsgZG8KKyAgY2FzZSAkY2NfdGVtcCBpbgorICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKKyAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OworICAgIFwtKikgOzsKKyAgICAqKSBicmVhazs7CisgIGVzYWMKK2RvbmUKK2NjX2Jhc2VuYW1lPWBlY2hvICIkY2NfdGVtcCIgfCBzZWQgLWUgJ3MlXi4qLyUlJ2AKKworIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIF9MVF9DT01QSUxFUl9QSUMuCisKK3dsPQoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgd2w9Jy1XbCwnCitlbHNlCisgIGNhc2UgIiRob3N0X29zIiBpbgorICAgIGFpeCopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgIDs7CisgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICBlY2MqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICAgIGljYyogfCBpZm9ydCopCisgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgOzsKKyAgICAgICAgbGY5NSopCisgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgOzsKKyAgICAgICAgbmFnZm9yKikKKyAgICAgICAgICB3bD0nLVdsLC1XbCwsJworICAgICAgICAgIDs7CisgICAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgICBjY2MqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICAgIHhsKiB8IGJneGwqIHwgYmdmKiB8IG1waXhsKikKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgICBjb21vKQorICAgICAgICAgIHdsPSctbG9wdD0nCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKyAgICAgICAgICAgICpTdW5cIEYqIHwgKlN1bipGb3J0cmFuKikKKyAgICAgICAgICAgICAgd2w9CisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqU3VuXCBDKikKKyAgICAgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIG5ld3NvczYpCisgICAgICA7OworICAgICpudG8qIHwgKnFueCopCisgICAgICA7OworICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICByZG9zKikKKyAgICAgIDs7CisgICAgc29sYXJpcyopCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisgICAgICAgICAgd2w9Jy1Rb3B0aW9uIGxkICcKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIHN1bm9zNCopCisgICAgICB3bD0nLVFvcHRpb24gbGQgJworICAgICAgOzsKKyAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgc3lzdjQqTVAqKQorICAgICAgOzsKKyAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIHVuaWNvcyopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgdXRzNCopCisgICAgICA7OworICBlc2FjCitmaQorCisjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgX0xUX0xJTktFUl9TSExJQlMuCisKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQoraGFyZGNvZGVfZGlyZWN0PW5vCitoYXJkY29kZV9taW51c19MPW5vCisKK2Nhc2UgIiRob3N0X29zIiBpbgorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQorICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgZmkKKyAgICA7OworICBpbnRlcml4KikKKyAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQorICAgIHdpdGhfZ251X2xkPXllcworICAgIDs7CisgIG9wZW5ic2QqKQorICAgIHdpdGhfZ251X2xkPW5vCisgICAgOzsKK2VzYWMKKworbGRfc2hsaWJzPXllcworaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQorICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KKyAgIyBoZXJlIGFsbG93cyB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVjZXNzYXJ5LgorICAjIFVubGlrZSBsaWJ0b29sLCB3ZSB1c2UgLXJwYXRoIGhlcmUsIG5vdCAtLXJwYXRoLCBzaW5jZSB0aGUgZG9jdW1lbnRlZAorICAjIG9wdGlvbiBvZiBHTlUgbGQgaXMgY2FsbGVkIC1ycGF0aCwgbm90IC0tcnBhdGguCisgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgYWl4WzMtOV0qKQorICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisgICAgICAgIHBvd2VycGMpCisgICAgICAgICAgOzsKKyAgICAgICAgbTY4aykKKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBiZW9zKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgaGFpa3UqKQorICAgICAgOzsKKyAgICBpbnRlcml4WzMtOV0qKQorICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgOzsKKyAgICBnbnUqIHwgbGludXgqIHwgdHBmKiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgbmV0YnNkKikKKyAgICAgIDs7CisgICAgc29sYXJpcyopCisgICAgICBpZiAkTEQgLXYgMj4mMSB8IGdyZXAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMVswLTVdLiopCisgICAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1ycGF0aCwkbGliZGlyYCcKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgICAgICBmaQorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIHN1bm9zNCopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICA7OworICAgICopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICBlc2FjCisgIGlmIHRlc3QgIiRsZF9zaGxpYnMiID0gbm87IHRoZW4KKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorICBmaQorZWxzZQorICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBhaXgzKikKKyAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCisgICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCisgICAgICAgICMgYnJva2VuIGNvbGxlY3QyLgorICAgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKyAgICAgIGZpCisgICAgICA7OworICAgIGFpeFs0LTldKikKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICAgICMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKKyAgICAgICAgIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKyAgICAgIGVsc2UKKyAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworICAgICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKyAgICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisgICAgICAgICMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeFs1LTldKikKKyAgICAgICAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKyAgICAgICAgICAgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCisgICAgICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmaQorICAgICAgICAgIGRvbmUKKyAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCisgICAgICAgICAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorICAgICAgICAgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmIFwKKyAgICAgICAgICAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKyAgICAgICAgICB0aGVuCisgICAgICAgICAgICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKyAgICAgICAgICAgIDoKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQorICAgICAgICAgIGZpCisgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgZmkKKyAgICAgICMgQmVnaW4gX0xUX0FDX1NZU19MSUJQQVRIX0FJWC4KKyAgICAgIGVjaG8gJ2ludCBtYWluICgpIHsgcmV0dXJuIDA7IH0nID4gY29uZnRlc3QuYworICAgICAgJHtDQ30gJHtMREZMQUdTfSBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0CisgICAgICBhaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCAyPi9kZXYvbnVsbCB8IHNlZCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2AKKyAgICAgIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKyAgICAgICAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QgMj4vZGV2L251bGwgfCBzZWQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQorfSdgCisgICAgICBmaQorICAgICAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorICAgICAgICBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiIKKyAgICAgIGZpCisgICAgICBybSAtZiBjb25mdGVzdC5jIGNvbmZ0ZXN0CisgICAgICAjIEVuZCBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYLgorICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICBlbHNlCisgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisgICAgICAgIGVsc2UKKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICBmaQorICAgICAgZmkKKyAgICAgIDs7CisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisgICAgICAgIHBvd2VycGMpCisgICAgICAgICAgOzsKKyAgICAgICAgbTY4aykKKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBic2RpWzQ1XSopCisgICAgICA7OworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisgICAgICBsaWJleHQ9bGliCisgICAgICA7OworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgIGlmIHsgY2FzZSAkY2NfYmFzZW5hbWUgaW4gaWZvcnQqKSB0cnVlOzsgKikgdGVzdCAiJEdDQyIgPSB5ZXM7OyBlc2FjOyB9OyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBkZ3V4KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIDs7CisgICAgZnJlZWJzZDIuWzAxXSopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgOzsKKyAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICA7OworICAgIGhwdXg5KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgOzsKKyAgICBocHV4MTAqKQorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGZpCisgICAgICA7OworICAgIGhwdXgxMSopCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQorICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICAgICAgICAgICA7OworICAgICAgICAgICopCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgZmkKKyAgICAgIDs7CisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKyAgICBuZXRic2QqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgOzsKKyAgICBuZXdzb3M2KQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworICAgICpudG8qIHwgKnFueCopCisgICAgICA7OworICAgIG9wZW5ic2QqKQorICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgICBlbHNlCisgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQorICAgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorICAgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBvczIqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIDs7CisgICAgb3NmMyopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisgICAgb3NmNCogfCBvc2Y1KikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGVsc2UKKyAgICAgICAgIyBCb3RoIGNjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLXJwYXRoICRsaWJkaXInCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworICAgIHNvbGFyaXMqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgOzsKKyAgICBzdW5vczQqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIDs7CisgICAgc3lzdjQpCisgICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgorICAgICAgICBzbmkpCisgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KKyAgICAgICAgICA7OworICAgICAgICBzaWVtZW5zKQorICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgICAgIDs7CisgICAgICAgIG1vdG9yb2xhKQorICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgc3lzdjQuMyopCisgICAgICA7OworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKyAgICAgICAgbGRfc2hsaWJzPXllcworICAgICAgZmkKKyAgICAgIDs7CisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLlswMjRdKikKKyAgICAgIDs7CisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKKyAgICAgIDs7CisgICAgdXRzNCopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICA7OworICAgICopCisgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIDs7CisgIGVzYWMKK2ZpCisKKyMgQ2hlY2sgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzCisjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgX0xUX1NZU19EWU5BTUlDX0xJTktFUi4KKyMgVW5saWtlIGxpYnRvb2wubTQsIGhlcmUgd2UgZG9uJ3QgY2FyZSBhYm91dCBfYWxsXyBuYW1lcyBvZiB0aGUgbGlicmFyeSwgYnV0CisjIG9ubHkgYWJvdXQgdGhlIG9uZSB0aGUgbGlua2VyIGZpbmRzIHdoZW4gcGFzc2VkIC1sTkFNRS4gVGhpcyBpcyB0aGUgbGFzdAorIyBlbGVtZW50IG9mIGxpYnJhcnlfbmFtZXNfc3BlYyBpbiBsaWJ0b29sLm00LCBvciBwb3NzaWJseSB0d28gb2YgdGhlbSBpZiB0aGUKKyMgbGlua2VyIGhhcyBzcGVjaWFsIHNlYXJjaCBydWxlcy4KK2xpYnJhcnlfbmFtZXNfc3BlYz0gICAgICAjIHRoZSBsYXN0IGVsZW1lbnQgb2YgbGlicmFyeV9uYW1lc19zcGVjIGluIGxpYnRvb2wubTQKK2xpYm5hbWVfc3BlYz0nbGliJG5hbWUnCitjYXNlICIkaG9zdF9vcyIgaW4KKyAgYWl4MyopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJworICAgIDs7CisgIGFpeFs0LTldKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBhbWlnYW9zKikKKyAgICBjYXNlICIkaG9zdF9jcHUiIGluCisgICAgICBwb3dlcnBjKikKKyAgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnIDs7CisgICAgICBtNjhrKQorICAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnIDs7CisgICAgZXNhYworICAgIDs7CisgIGJlb3MqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGJzZGlbNDVdKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgc2hyZXh0PS5kbGwKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hICRsaWJuYW1lLmxpYicKKyAgICA7OworICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgIHNocmV4dD0uZHlsaWIKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBkZ3V4KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBmcmVlYnNkWzIzXS4qKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcKKyAgICA7OworICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgZ251KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBoYWlrdSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGlhNjQqKQorICAgICAgICBzaHJleHQ9LnNvCisgICAgICAgIDs7CisgICAgICBocHBhKjY0KikKKyAgICAgICAgc2hyZXh0PS5zbAorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgc2hyZXh0PS5zbAorICAgICAgICA7OworICAgIGVzYWMKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBpbnRlcml4WzMtOV0qKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICBpcml4NSogfCBub25zdG9wdXgqKQorICAgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBjYXNlICRMRCBpbgorICAgICAgICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpIGxpYnN1ZmY9IHNobGlic3VmZj0gOzsKKyAgICAgICAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKSBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgOzsKKyAgICAgICAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgOzsKKyAgICAgICAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKyAgICA7OworICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAga25ldGJzZCotZ251KQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIG5ldGJzZCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgbmV3c29zNikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICAqbnRvKiB8ICpxbngqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIG9wZW5ic2QqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcKKyAgICA7OworICBvczIqKQorICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgICAgc2hyZXh0PS5kbGwKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnCisgICAgOzsKKyAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHJkb3MqKQorICAgIDs7CisgIHNvbGFyaXMqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHN1bm9zNCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JworICAgIDs7CisgIHN5c3Y0IHwgc3lzdjQuMyopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgc3lzdjQqTVAqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHRwZiopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgdXRzNCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKK2VzYWMKKworc2VkX3F1b3RlX3N1YnN0PSdzL1woWyJgJFxcXVwpL1xcXDEvZycKK2VzY2FwZWRfd2w9YGVjaG8gIlgkd2wiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKK3NobGliZXh0PWBlY2hvICIkc2hyZXh0IiB8IHNlZCAtZSAncyxeXC4sLCdgCitlc2NhcGVkX2xpYm5hbWVfc3BlYz1gZWNobyAiWCRsaWJuYW1lX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKK2VzY2FwZWRfbGlicmFyeV9uYW1lc19zcGVjPWBlY2hvICJYJGxpYnJhcnlfbmFtZXNfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorZXNjYXBlZF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPWBlY2hvICJYJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKworTENfQUxMPUMgc2VkIC1lICdzL15cKFthLXpBLVowLTlfXSpcKT0vYWNsX2N2X1wxPS8nIDw8RU9GCisKKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KK3dsPSIkZXNjYXBlZF93bCIKKworIyBTdGF0aWMgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCitsaWJleHQ9IiRsaWJleHQiCisKKyMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAic28iKS4KK3NobGliZXh0PSIkc2hsaWJleHQiCisKKyMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCitsaWJuYW1lX3NwZWM9IiRlc2NhcGVkX2xpYm5hbWVfc3BlYyIKKworIyBMaWJyYXJ5IG5hbWVzIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aGVuIHBhc3NlZCAtbE5BTUUuCitsaWJyYXJ5X25hbWVzX3NwZWM9IiRlc2NhcGVkX2xpYnJhcnlfbmFtZXNfc3BlYyIKKworIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisjIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkZXNjYXBlZF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgorCisjIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAtcnBhdGggZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiCisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyBESVIvbGliTkFNRS5zbyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisjIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9kaXJlY3Q9IiRoYXJkY29kZV9kaXJlY3QiCisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisjIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9taW51c19MPSIkaGFyZGNvZGVfbWludXNfTCIKKworRU9GCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9yZW1vdmUtcG90Y2RhdGUuc2luIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvcmVtb3ZlLXBvdGNkYXRlLnNpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDM2YzQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvcmVtb3ZlLXBvdGNkYXRlLnNpbgpAQCAtMCwwICsxLDE5IEBACisjIFNlZCBzY3JpcHQgdGhhdCByZW1vdmUgdGhlIFBPVC1DcmVhdGlvbi1EYXRlIGxpbmUgaW4gdGhlIGhlYWRlciBlbnRyeQorIyBmcm9tIGEgUE9UIGZpbGUuCisjCisjIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIGZvbGxvd2luZyBvY2N1cnJlbmNlcyBvZiB0aGUKKyMgcGF0dGVybiBpcyBhY2hpZXZlZCBieSBsb29raW5nIGF0IHRoZSBob2xkIHNwYWNlLgorL14iUE9ULUNyZWF0aW9uLURhdGU6IC4qIiQveworeAorIyBUZXN0IGlmIHRoZSBob2xkIHNwYWNlIGlzIGVtcHR5Lgorcy9QL1AvCit0YQorIyBZZXMgaXQgd2FzIGVtcHR5LiBGaXJzdCBvY2N1cnJlbmNlLiBSZW1vdmUgdGhlIGxpbmUuCitnCitkCitiYgorOmEKKyMgVGhlIGhvbGQgc3BhY2Ugd2FzIG5vbmVtcHR5LiBGb2xsb3dpbmcgb2NjdXJyZW5jZXMuIERvIG5vdGhpbmcuCit4Cis6YgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC1uYXRpdmVfMC4xOS40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC1uYXRpdmVfMC4xOS40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNGE0NDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLW5hdGl2ZV8wLjE5LjQuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJNaW5pbWFsIGdldHRleHQgZm9yIHN1cHBvcnRpbmcgbmF0aXZlIGF1dG9jb25mL2F1dG9tYWtlIgorREVTQ1JJUFRJT04gPSAiQ29udGFpbnMgdGhlIG00IG1hY3JvcyBzdWZmaWNpZW50IHRvIHN1cHBvcnQgYnVpbGRpbmcgXAorYXV0b2NvbmYvYXV0b21ha2UuIFRoaXMgcHJvdmlkZXMgYSBzaWduaWZpY2FudCBidWlsZCB0aW1lIHNwZWVkdXAgYnkgXAordGhlIHJlbW92YWwgb2YgZ2V0dGV4dC1uYXRpdmUgZnJvbSBtb3N0IGRlcGVuZGVuY3kgY2hhaW5zIChub3cgb25seSBcCituZWVkZWQgZm9yIGdldHRleHQgZm9yIHRoZSB0YXJnZXQpLiIKK1NSQ19VUkkgPSAiZmlsZTovL2FjbG9jYWwudGd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZy5ycGF0aCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS5pbi5pbiBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtcG90Y2RhdGUuc2luIFwKKyAgICAgICAgICAgZmlsZTovL0NPUFlJTkcgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1QQVRDSC1EaXNhYmxlLXRoZS10ZXN0LXRvLWNvbnZlcnQtZXVjLWpwLnBhdGNoIFwKKyIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKK0lOSElCSVRfQVVUT1RPT0xTX0RFUFMgPSAiMSIKKworTElDRU5TRSA9ICJGU0YtVW5saW1pdGVkIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MWIyMDY3NWNkNTE1ODQ0MmY2MDA3ZDAyMmY0NmIzNWIiCisKK2luaGVyaXQgbmF0aXZlCisKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2FjbG9jYWwvCisJY3AgJHtXT1JLRElSfS8qLm00ICR7RH0ke2RhdGFkaXJ9L2FjbG9jYWwvCisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L3BvLworCWNwICR7V09SS0RJUn0vY29uZmlnLnJwYXRoICR7RH0ke2RhdGFkaXJ9L2dldHRleHQvCisJY3AgJHtXT1JLRElSfS9NYWtlZmlsZS5pbi5pbiAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L3BvLworCWNwICR7V09SS0RJUn0vcmVtb3ZlLXBvdGNkYXRlLnNpbiAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L3BvLworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHRfMC4xNi4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHRfMC4xNi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZjdhN2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dF8wLjE2LjEuYmIKQEAgLTAsMCArMSwxMDcgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGFuZCBsaWJyYXJpZXMgZm9yIHByb2R1Y2luZyBtdWx0aS1saW5ndWFsIG1lc3NhZ2VzIgorREVTQ1JJUFRJT04gPSAiR05VIGdldHRleHQgaXMgYSBzZXQgb2YgdG9vbHMgdGhhdCBwcm92aWRlcyBhIGZyYW1ld29yayB0byBoZWxwIG90aGVyIHByb2dyYW1zIHByb2R1Y2UgbXVsdGktbGluZ3VhbCBtZXNzYWdlcy4gVGhlc2UgdG9vbHMgaW5jbHVkZSBhIHNldCBvZiBjb252ZW50aW9ucyBhYm91dCBob3cgcHJvZ3JhbXMgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gc3VwcG9ydCBtZXNzYWdlIGNhdGFsb2dzLCBhIGRpcmVjdG9yeSBhbmQgZmlsZSBuYW1pbmcgb3JnYW5pemF0aW9uIGZvciB0aGUgbWVzc2FnZSBjYXRhbG9ncyB0aGVtc2VsdmVzLCBhIHJ1bnRpbWUgbGlicmFyeSBzdXBwb3J0aW5nIHRoZSByZXRyaWV2YWwgb2YgdHJhbnNsYXRlZCBtZXNzYWdlcywgYW5kIGEgZmV3IHN0YW5kLWFsb25lIHByb2dyYW1zIHRvIG1hc3NhZ2UgaW4gdmFyaW91cyB3YXlzIHRoZSBzZXRzIG9mIHRyYW5zbGF0YWJsZSBhbmQgYWxyZWFkeSB0cmFuc2xhdGVkIHN0cmluZ3MuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dldHRleHQvZ2V0dGV4dC5odG1sIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTllYTMxNDRmMDRjNDFjZDJlYWRhNWQzZjQ3MmU2ZWE1IgorCitQUiA9ICJyNiIKK0RFUEVORFMgPSAidmlydHVhbC9saWJpY29udiIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKK1BST1ZJREVTID0gInZpcnR1YWwvbGliaW50bCB2aXJ0dWFsL2dldHRleHQiCitQUk9WSURFU19jbGFzcy1uYXRpdmUgPSAiIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ2V0dGV4dC9nZXR0ZXh0LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9nZXR0ZXh0LXZwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpbmtsaWJfZnJvbV8wLjE3LnBhdGNoIFwKKwkgICBmaWxlOi8vZ2V0dGV4dC1hdXRvY29uZi1saWItbGluay1uby1MLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGVfamF2YS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfYWNsb2NhbF92ZXJzaW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9nbnVfc291cmNlX2NpcmN1bGFyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2hhcmRjb2RlX21hY3JvX3ZlcnNpb24ucGF0Y2ggXAorICAgICAgICAgICIKKworTERGTEFHU19wcmVwZW5kX2xpYmMtdWNsaWJjID0gIiAtbHJ0IC1scHRocmVhZCAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzZDlhZDI0MzAxYzZkNmIxN2VjMzA3MDRhMTNmZTEyNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwYmY4NTBkMWEwNzlmYjVhNjFmMGE0N2IxYTllZmQzNWViNDQwMzIyNTUzNzVlMWNlZGIwMjUzYmMyN2IzNzZkIgorCitQQVJBTExFTF9NQUtFID0gIiIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1saXNwIC0tZGlzYWJsZS1jc2hhcnAgLS1kaXNhYmxlLW9wZW5tcCAtLXdpdGhvdXQtZW1hY3MiCithY3BhdGhzID0gJy1JICR7U30vYXV0b2NvbmYtbGliLWxpbmsvbTQvIFwKKyAgICAgICAgICAgLUkgJHtTfS9nZXR0ZXh0LXJ1bnRpbWUvbTQgXAorICAgICAgICAgICAtSSAke1N9L2dldHRleHQtdG9vbHMvbTQnCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCXJtIC1mICR7U30vY29uZmlnL200L2xpYnRvb2wubTQKK30KKworIyB0aGVzZSBsYWNrIHRoZSAueCBiZWhpbmQgdGhlIC5zbywgYnV0IHNob3VsZG4ndCBiZSBpbiB0aGUgLWRldiBwYWNrYWdlCisjIE90aGVyd2lzZSB5b3UgZ2V0IHRoZSBmb2xsb3dpbmcgcmVzdWx0czoKKyMgNy40TSAgICBnbGliYy9pbWFnZXMvZXA5M3h4L0FuZ3N0cm9tLWNvbnNvbGUtaW1hZ2UtZ2xpYmMtaXBrLTIwMDguMS10ZXN0LTIwMDgwMTA0LWVwOTN4eC5yb290ZnMudGFyLmd6CisjIDI1TSAgICAgdWNsaWJjL2ltYWdlcy9lcDkzeHgvQW5nc3Ryb20tY29uc29sZS1pbWFnZS11Y2xpYmMtaXBrLTIwMDguMS10ZXN0LTIwMDgwMTA0LWVwOTN4eC5yb290ZnMudGFyLmd6CisjIGJlY2F1c2UgZ2V0dGV4dCBkZXBlbmRzIG9uIGdldHRleHQtZGV2LCB3aGljaCBwdWxscyBpbiBtb3JlIC1kZXYgcGFja2FnZXM6CisjIDE1MjI4ICAgS2lCIC9lcDkzeHgvbGlic3RkYysrLWRldl80LjIuMi1yMl9lcDkzeHguaXBrCisjIDEzMDAgICAgS2lCIC9lcDkzeHgvdWNsaWJjLWRldl8wLjkuMjktcjhfZXA5M3h4LmlwaworIyAxNDAgICAgIEtpQiAvYXJtdjR0L2dldHRleHQtZGV2XzAuMTQuMS1yNl9hcm12NHQuaXBrCisjIDQgICAgICAgS2lCIC9lcDkzeHgvbGliZ2NjLXMtZGV2XzQuMi4yLXIyX2VwOTN4eC5pcGsKKworUEFDS0FHRVMgPSsgImxpYmdldHRleHRsaWIgbGliZ2V0dGV4dHNyYyIKK0ZJTEVTX2xpYmdldHRleHRsaWIgPSAiJHtsaWJkaXJ9L2xpYmdldHRleHRsaWItKi5zbyoiCitGSUxFU19saWJnZXR0ZXh0c3JjID0gIiR7bGliZGlyfS9saWJnZXR0ZXh0c3JjLSouc28qIgorCitQQUNLQUdFUyA9KyAiZ2V0dGV4dC1ydW50aW1lIGdldHRleHQtcnVudGltZS1kZXYgZ2V0dGV4dC1ydW50aW1lLXN0YXRpY2RldiBnZXR0ZXh0LXJ1bnRpbWUtZG9jIgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyR7QlBOfS8qIgorCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWUgPSAiJHtiaW5kaXJ9L2dldHRleHQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9uZ2V0dGV4dCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2VudnN1YnN0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZ2V0dGV4dC5zaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYmFzcHJpbnRmJHtTT0RFVn0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9HTlUuR2V0dGV4dC5kbGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgJHtsaWJkaXJ9L2xpYmludGwuc28uKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vY2hhcnNldC5hbGlhcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lLXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2xpYmFzcHJpbnRmLmEiCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWUtZGV2ICs9ICIke2luY2x1ZGVkaXJ9L2F1dG9zcHJpbnRmLmggXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYmFzcHJpbnRmJHtTT0xJQkRFVn0iCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWUtZGV2X2FwcGVuZF9saWJjLXVjbGliYyA9ICIgJHtsaWJkaXJ9L2xpYmludGwuc28gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vbGliaW50bC5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lLWRvYyA9ICIke21hbmRpcn0vbWFuMS9nZXR0ZXh0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMS9uZ2V0dGV4dC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEvZW52c3Vic3QuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4xLy4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjMvKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9nZXR0ZXh0L2dldHRleHQuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9nZXR0ZXh0L25nZXR0ZXh0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vZ2V0dGV4dC9lbnZzdWJzdC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvKi4zLmh0bWwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2dldHRleHQvQUJPVVQtTkxTIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvY3NoYXJwZG9jLyogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vbGliYXNwcmludGYvYXV0b3NwcmludGYuaHRtbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5mb2Rpcn0vYXV0b3NwcmludGYuaW5mbyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtIC1mICR7RH0ke2xpYmRpcn0vcHJlbG9hZGFibGVfbGliaW50bC5zbworfQorCisjIEFueW9uZSBpbmhlcml0aW5nIGdldHRleHQgd2lsbCBoYXZlIGJvdGggZ2V0dGV4dC1uYXRpdmUgYW5kIGdldHRleHQKKyMgYXZhaWxhYmxlLCBhbmQgd2UgZG9uJ3Qgd2FudCB0byB1c2Ugb2xkZXIgbWFjcm9zIGZyb20gdGhlIHRhcmdldCBnZXR0ZXh0IGluCisjIGEgbm9uLWdwbHYzIGJ1aWxkLCBzbyBraWxsIHRoZW0gYW5kIGxldCBkZXBlbmRlbnQgcmVjaXBlcyByZWx5IG9uCisjIGdldHRleHQtbmF0aXZlLgorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gInJlbW92ZV9zeXNyb290X200X21hY3JvcyIKKworcmVtb3ZlX3N5c3Jvb3RfbTRfbWFjcm9zICgpIHsKKyAgICBybSAtciAiJHtTWVNST09UX0RFU1RESVJ9JHtkYXRhZGlyfS9hY2xvY2FsIgorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dF8wLjE5LjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dF8wLjE5LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ViZjZjNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0XzAuMTkuNC5iYgpAQCAtMCwwICsxLDEwNiBAQAorU1VNTUFSWSA9ICJVdGlsaXRpZXMgYW5kIGxpYnJhcmllcyBmb3IgcHJvZHVjaW5nIG11bHRpLWxpbmd1YWwgbWVzc2FnZXMiCitERVNDUklQVElPTiA9ICJHTlUgZ2V0dGV4dCBpcyBhIHNldCBvZiB0b29scyB0aGF0IHByb3ZpZGVzIGEgZnJhbWV3b3JrIHRvIGhlbHAgb3RoZXIgcHJvZ3JhbXMgcHJvZHVjZSBtdWx0aS1saW5ndWFsIG1lc3NhZ2VzLiBUaGVzZSB0b29scyBpbmNsdWRlIGEgc2V0IG9mIGNvbnZlbnRpb25zIGFib3V0IGhvdyBwcm9ncmFtcyBzaG91bGQgYmUgd3JpdHRlbiB0byBzdXBwb3J0IG1lc3NhZ2UgY2F0YWxvZ3MsIGEgZGlyZWN0b3J5IGFuZCBmaWxlIG5hbWluZyBvcmdhbml6YXRpb24gZm9yIHRoZSBtZXNzYWdlIGNhdGFsb2dzIHRoZW1zZWx2ZXMsIGEgcnVudGltZSBsaWJyYXJ5IHN1cHBvcnRpbmcgdGhlIHJldHJpZXZhbCBvZiB0cmFuc2xhdGVkIG1lc3NhZ2VzLCBhbmQgYSBmZXcgc3RhbmQtYWxvbmUgcHJvZ3JhbXMgdG8gbWFzc2FnZSBpbiB2YXJpb3VzIHdheXMgdGhlIHNldHMgb2YgdHJhbnNsYXRhYmxlIGFuZCBhbHJlYWR5IHRyYW5zbGF0ZWQgc3RyaW5ncy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2V0dGV4dC9nZXR0ZXh0Lmh0bWwiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYzKyAmIExHUEwtMi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitERVBFTkRTID0gImdldHRleHQtbmF0aXZlIHZpcnR1YWwvbGliaWNvbnYgZXhwYXQiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJnZXR0ZXh0LW1pbmltYWwtbmF0aXZlIgorUFJPVklERVMgPSAidmlydHVhbC9saWJpbnRsIHZpcnR1YWwvZ2V0dGV4dCIKK1BST1ZJREVTX2NsYXNzLW5hdGl2ZSA9ICJ2aXJ0dWFsL2dldHRleHQtbmF0aXZlIgorUkNPTkZMSUNUU18ke1BOfSA9ICJwcm94eS1saWJpbnRsIgorU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2dldHRleHQvZ2V0dGV4dC0ke1BWfS50YXIuZ3ogXAorCSAgIGZpbGU6Ly9wYXJhbGxlbC5wYXRjaCBcCisgICAgICAgICAgIgorCitQQUNLQUdFQ09ORklHW21zZ2NhdC1jdXJzZXNdID0gIi0td2l0aC1saWJuY3Vyc2VzLXByZWZpeD0ke1NUQUdJTkdfTElCRElSfS8uLiwtLWRpc2FibGUtY3Vyc2VzLG5jdXJzZXMsIgorCitMREZMQUdTX3ByZXBlbmRfbGliYy11Y2xpYmMgPSAiIC1scnQgLWxwdGhyZWFkICIKKworU1JDX1VSSVttZDVzdW1dID0gImQzNTExYWYxZTYwNGEzNDc4OTAwZDJjMmI0YTRhNDhlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhhYzlmMWVkMWE1ZjhjNGU2NTZhMmYzN2Y1YmE2YjllZTA0YzRkZjc5YTU3NWU4NzZiMGI2OTQ2YWE0MTdmM2YiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtbGlzcGRpciBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1jc2hhcnAgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtbGliYXNwcmludGYgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtamF2YSBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1uYXRpdmUtamF2YSBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1vcGVubXAgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtYWNsIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWluY2x1ZGVkLWdsaWIgXAorICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtZW1hY3MgXAorICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtY3ZzIFwKKyAgICAgICAgICAgICAgICAgLS13aXRob3V0LWdpdCBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1pbmNsdWRlZC1saWJ4bWwgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtaW5jbHVkZWQtbGliY3JvY28gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtaW5jbHVkZWQtbGlidW5pc3RyaW5nIFwKKyAgICAgICAgICAgICAgICAiCisKK2FjcGF0aHMgPSAnLUkgJHtTfS9nZXR0ZXh0LXJ1bnRpbWUvbTQgXAorICAgICAgICAgICAtSSAke1N9L2dldHRleHQtdG9vbHMvbTQnCisKKworIyB0aGVzZSBsYWNrIHRoZSAueCBiZWhpbmQgdGhlIC5zbywgYnV0IHNob3VsZG4ndCBiZSBpbiB0aGUgLWRldiBwYWNrYWdlCisjIE90aGVyd2lzZSB5b3UgZ2V0IHRoZSBmb2xsb3dpbmcgcmVzdWx0czoKKyMgNy40TSAgICBnbGliYy9pbWFnZXMvZXA5M3h4L0FuZ3N0cm9tLWNvbnNvbGUtaW1hZ2UtZ2xpYmMtaXBrLTIwMDguMS10ZXN0LTIwMDgwMTA0LWVwOTN4eC5yb290ZnMudGFyLmd6CisjIDI1TSAgICAgdWNsaWJjL2ltYWdlcy9lcDkzeHgvQW5nc3Ryb20tY29uc29sZS1pbWFnZS11Y2xpYmMtaXBrLTIwMDguMS10ZXN0LTIwMDgwMTA0LWVwOTN4eC5yb290ZnMudGFyLmd6CisjIGJlY2F1c2UgZ2V0dGV4dCBkZXBlbmRzIG9uIGdldHRleHQtZGV2LCB3aGljaCBwdWxscyBpbiBtb3JlIC1kZXYgcGFja2FnZXM6CisjIDE1MjI4ICAgS2lCIC9lcDkzeHgvbGlic3RkYysrLWRldl80LjIuMi1yMl9lcDkzeHguaXBrCisjIDEzMDAgICAgS2lCIC9lcDkzeHgvdWNsaWJjLWRldl8wLjkuMjktcjhfZXA5M3h4LmlwaworIyAxNDAgICAgIEtpQiAvYXJtdjR0L2dldHRleHQtZGV2XzAuMTQuMS1yNl9hcm12NHQuaXBrCisjIDQgICAgICAgS2lCIC9lcDkzeHgvbGliZ2NjLXMtZGV2XzQuMi4yLXIyX2VwOTN4eC5pcGsKKworUEFDS0FHRVMgPSsgImxpYmdldHRleHRsaWIgbGliZ2V0dGV4dHNyYyIKK0ZJTEVTX2xpYmdldHRleHRsaWIgPSAiJHtsaWJkaXJ9L2xpYmdldHRleHRsaWItKi5zbyoiCitGSUxFU19saWJnZXR0ZXh0c3JjID0gIiR7bGliZGlyfS9saWJnZXR0ZXh0c3JjLSouc28qIgorCitQQUNLQUdFUyA9KyAiZ2V0dGV4dC1ydW50aW1lIGdldHRleHQtcnVudGltZS1kZXYgZ2V0dGV4dC1ydW50aW1lLWRvYyIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8ke0JQTn0vKiIKKworRklMRVNfZ2V0dGV4dC1ydW50aW1lID0gIiR7YmluZGlyfS9nZXR0ZXh0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vbmdldHRleHQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9lbnZzdWJzdCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2dldHRleHQuc2ggXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJhc3ByaW50Zi5zbyogXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9HTlUuR2V0dGV4dC5kbGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgJHtsaWJkaXJ9L2xpYmludGwuc28uKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vY2hhcnNldC5hbGlhcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lLWRldiArPSAiJHtsaWJkaXJ9L2xpYmFzcHJpbnRmLmEgXAorICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vYXV0b3NwcmludGYuaCBcCisgICAgICAgICAgICAgICAgICAgICAiCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWUtZGV2X2FwcGVuZF9saWJjLXVjbGliYyA9ICIgJHtsaWJkaXJ9L2xpYmludGwuc28gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vbGliaW50bC5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lLWRvYyA9ICIke21hbmRpcn0vbWFuMS9nZXR0ZXh0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMS9uZ2V0dGV4dC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEvZW52c3Vic3QuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4xLy4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjMvKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9nZXR0ZXh0L2dldHRleHQuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9nZXR0ZXh0L25nZXR0ZXh0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vZ2V0dGV4dC9lbnZzdWJzdC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvKi4zLmh0bWwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2dldHRleHQvQUJPVVQtTkxTIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvY3NoYXJwZG9jLyogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vbGliYXNwcmludGYvYXV0b3NwcmludGYuaHRtbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5mb2Rpcn0vYXV0b3NwcmludGYuaW5mbyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBybSAtZiAke0R9JHtsaWJkaXJ9L3ByZWxvYWRhYmxlX2xpYmludGwuc28KK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKwlybSAke0R9JHtkYXRhZGlyfS9hY2xvY2FsLyoKKwlybSAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L2NvbmZpZy5ycGF0aAorCXJtICR7RH0ke2RhdGFkaXJ9L2dldHRleHQvcG8vTWFrZWZpbGUuaW4uaW4KKwlybSAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L3BvL3JlbW92ZS1wb3RjZGF0ZS5zaW4KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC8wMDAxLVJlbW92ZS10aGUtd2FybmluZy1hYm91dC1kZXByZWNhdGVkLXBhdGhzLWluLXNjaGVtYXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wLzAwMDEtUmVtb3ZlLXRoZS13YXJuaW5nLWFib3V0LWRlcHJlY2F0ZWQtcGF0aHMtaW4tc2NoZW1hcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWExOTBlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC8wMDAxLVJlbW92ZS10aGUtd2FybmluZy1hYm91dC1kZXByZWNhdGVkLXBhdGhzLWluLXNjaGVtYXMucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRnJvbSA0MTUzNDI1M2I2YjYxZWQ0NzY5ZWI2YTM5NjY2OThhNTBlZTczYjcxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBGcmksIDEyIEp1biAyMDE1IDE3OjA4OjQ2ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFJlbW92ZSB0aGUgd2FybmluZyBhYm91dCBkZXByZWNhdGVkIHBhdGhzIGluIHNjaGVtYXMKKworU29tZSBzY2hlbWFzIGluIGdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMgKHN1Y2ggYXMgcHJveHkgYW5kIGxvY2FsZSkKK2FyZSBzdGlsbCB1c2luZyBkZXByZWNhdGVkIHBhdGhzLCBhcyBvZiAzLjE2LjEuIFRoaXMgY2F1c2VzIHdhcm5pbmcKK21lc3NhZ2VzLCBhbmQgbWV0YS9saWIvb2Uvcm9vdGZzLnB5IGNvbXBsYWludHMgYWJvdXQgdGhlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KKworLS0tCisgZ2lvL2dsaWItY29tcGlsZS1zY2hlbWFzLmMgfCA2IC0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2lvL2dsaWItY29tcGlsZS1zY2hlbWFzLmMgYi9naW8vZ2xpYi1jb21waWxlLXNjaGVtYXMuYworaW5kZXggZTQyOTQ5Yi4uZWM3OWQ3YyAxMDA2NDQKKy0tLSBhL2dpby9nbGliLWNvbXBpbGUtc2NoZW1hcy5jCisrKysgYi9naW8vZ2xpYi1jb21waWxlLXNjaGVtYXMuYworQEAgLTEyMDIsMTIgKzEyMDIsNiBAQCBwYXJzZV9zdGF0ZV9zdGFydF9zY2hlbWEgKFBhcnNlU3RhdGUgICpzdGF0ZSwKKyAgICAgICByZXR1cm47CisgICAgIH0KKyAKKy0gIGlmIChwYXRoICYmIChnX3N0cl9oYXNfcHJlZml4IChwYXRoLCAiL2FwcHMvIikgfHwKKy0gICAgICAgICAgICAgICBnX3N0cl9oYXNfcHJlZml4IChwYXRoLCAiL2Rlc2t0b3AvIikgfHwKKy0gICAgICAgICAgICAgICBnX3N0cl9oYXNfcHJlZml4IChwYXRoLCAiL3N5c3RlbS8iKSkpCistICAgIGdfcHJpbnRlcnIgKCJ3YXJuaW5nOiBTY2hlbWEgJyVzJyBoYXMgcGF0aCAnJXMnLiAgUGF0aHMgc3RhcnRpbmcgd2l0aCAiCistICAgICAgICAgICAgICAgICInL2FwcHMvJywgJy9kZXNrdG9wLycgb3IgJy9zeXN0ZW0vJyBhcmUgZGVwcmVjYXRlZC5cbiIsIGlkLCBwYXRoKTsKKy0KKyAgIHN0YXRlLT5zY2hlbWFfc3RhdGUgPSBzY2hlbWFfc3RhdGVfbmV3IChwYXRoLCBnZXR0ZXh0X2RvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbmRzLCBleHRlbmRzX25hbWUsIGxpc3Rfb2YpOworIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wLzAwMDEtY29uZmlndXJlLmFjLURvLW5vdC11c2UtcmVhZGxpbmstd2hlbi1jcm9zcy1jb21waWxpbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvMDAwMS1jb25maWd1cmUuYWMtRG8tbm90LXVzZS1yZWFkbGluay13aGVuLWNyb3NzLWNvbXBpbGluLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZTM2MzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wLzAwMDEtY29uZmlndXJlLmFjLURvLW5vdC11c2UtcmVhZGxpbmstd2hlbi1jcm9zcy1jb21waWxpbi5wYXRjaApAQCAtMCwwICsxLDMxIEBACitjb21taXQgOWIzOGQ1MDdlYzM3YjNkN2Q0ZGY2MDk1ZmE3ZWQxNmI0N2QzOTlmNworQXV0aG9yOiBEcmV3IE1vc2VsZXkgPGRyZXdfbW9zZWxleUBtZW50b3IuY29tPgorRGF0ZTogICBTYXQgTWFyIDI5IDIxOjEwOjQzIDIwMTQgLTA0MDAKKworICAgIGNvbmZpZ3VyZS5hYzogRG8gbm90IHVzZSByZWFkbGluayB3aGVuIGNyb3NzIGNvbXBpbGluZy4KKworICAgIERvIG5vdCB1c2UgcmVhZGxpbmsgdG8gc2V0IEFCU19HTElCX1JVTlRJTUVfTElCRElSIHdoZW4gY3Jvc3MKKyAgICBjb21waWxpbmcuICBEb2luZyBzbyBjYXVzZXMgaG9zdCBwYXRocyB0byBwb3RlbnRpYWxseSBwb2xsdXRlCisgICAgdGhlIHRhcmdldC4KKworICAgIE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UgdGhlIHBhdGggaXMgbm90IGNvbnZlcnRlZCB0byBhYnNvbHV0ZSBpZgorICAgIGl0IGNvbnRhaW5zIGFueSAiLi4iIHJlZmVyZW5jZXMgc28gaXQncyBub3QgY29tcGxldGVseSBjb3JyZWN0LgorCisgICAgVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjc1NzVdCisgICAgU2lnbmVkLW9mZi1ieTogRHJldyBNb3NlbGV5IDxkcmV3X21vc2VsZXlAbWVudG9yLmNvbT4KKworZGlmZiAtcnViIGdsaWItMi4zOC4yLm9yaWcvY29uZmlndXJlLmFjIGdsaWItMi4zOC4yL2NvbmZpZ3VyZS5hYworLS0tIGdsaWItMi4zOC4yLm9yaWcvY29uZmlndXJlLmFjCTIwMTQtMDQtMDMgMjA6MTc6MTMuMDM1NTY3MTQzIC0wNDAwCisrKysgZ2xpYi0yLjM4LjIvY29uZmlndXJlLmFjCTIwMTQtMDQtMDMgMjA6MTk6MDcuMDcxNTY2MDU3IC0wNDAwCitAQCAtMjc1LDcgKzI3NSwxMSBAQAorICAgICAgICAgICAgW10sCisgCSAgIFt3aXRoX3J1bnRpbWVfbGliZGlyPSIiXSkKKyBHTElCX1JVTlRJTUVfTElCRElSPSIkd2l0aF9ydW50aW1lX2xpYmRpciIKKytBU19JRihbIHRlc3QgJGNyb3NzX2NvbXBpbGluZyA9IHllcyBdLCBbCisrQUJTX0dMSUJfUlVOVElNRV9MSUJESVI9IiRsaWJkaXIvJHdpdGhfcnVudGltZV9saWJkaXIiCisrXSwgWworIEFCU19HTElCX1JVTlRJTUVfTElCRElSPSJgcmVhZGxpbmsgLW0gJGxpYmRpci8kd2l0aF9ydW50aW1lX2xpYmRpcmAiCisrXSkKKyBBQ19TVUJTVChHTElCX1JVTlRJTUVfTElCRElSKQorIEFDX1NVQlNUKEFCU19HTElCX1JVTlRJTUVfTElCRElSKQorIEFNX0NPTkRJVElPTkFMKEhBVkVfR0xJQl9SVU5USU1FX0xJQkRJUiwgW3Rlc3QgIngkd2l0aF9ydW50aW1lX2xpYmRpciIgIT0gIngiXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvYWRkLW1hcmNoLWk0ODYtaW50by1DRkxBR1MtYXV0b21hdGljYWxseS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvYWRkLW1hcmNoLWk0ODYtaW50by1DRkxBR1MtYXV0b21hdGljYWxseS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWFjMzVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9hZGQtbWFyY2gtaTQ4Ni1pbnRvLUNGTEFHUy1hdXRvbWF0aWNhbGx5LnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gNTUyNTNiNTViOWM2NWYzZTBlZmJiZTAzY2JhYjJhNGM0MDE0YTE2YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFNvbmcuTGkgPFNvbmcuTGlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgNSBKdWwgMjAxMiAxNTowOTo0MSArMDgwMAorU3ViamVjdDogW1BBVENIXSBhZGQgLW1hcmNoPWk0ODYgaW50byBDRkxBR1MgYXV0b21hdGljYWxseQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK2dsaWIgY29uZmlndXJlIHdpbGwgY2hlY2sgaWYgY3VycmVudCBnY2MgbmVlZCAtbWFyY2g9aTQ4NiwKK3doZW4gZ2NjIG5lZWQgLW1hcmNoPWk0ODYgYnV0IENGTEFHUyBkb24ndCBoYXZlLAorZ2xpYiBjb25maWd1cmUgd2lsbCBhYm9ydCBhbmQgYWR2aXNlIHRoZSB1c2VyIHRvIGFkZCAtbWFyY2g9aTQ4NiBvciBsYXRlci4KK1RoaXMgd2lsbCBicmVhayB0aGUgYnVpbGQgcHJvY2VzcyxpdCdzIG5vdCBnb29kIGZvciBhdXRvbWF0aWMgYnVpbGQgc3lzdGVtLgorc28gY2hhbmdlIHRoaXMgdG8gYWRkaW5nIC1tYXJjaD1pNDg1IGF1dG9tYXRpY2FsbHkgd2hlbiBpdCBpcyBuZWVkZWQuCistLS0KKyBjb25maWd1cmUuYWMgfCAgICA2ICsrKystLQorIDEgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitJbmRleDogZ2xpYi0yLjM2LjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2xpYi0yLjM2LjAub3JpZy9jb25maWd1cmUuYWMKKysrKyBnbGliLTIuMzYuMC9jb25maWd1cmUuYWMKK0BAIC0yMzc4LDcgKzIzNzgsNyBAQCBkbmwKKyBkbmwgTm90ZSB0aGF0IHRoZSBhdG9taWMgb3BzIGFyZSBvbmx5IGF2YWlsYWJsZSB3aXRoIEdDQyBvbiB4ODYgd2hlbgorIGRubCB1c2luZyAtbWFyY2g9aTQ4NiBvciBoaWdoZXIuICBJZiB3ZSBkZXRlY3QgdGhhdCB0aGUgYXRvbWljIG9wcyBhcmUKKyBkbmwgbm90IGF2YWlsYWJsZSBidXQgd291bGQgYmUgYXZhaWxhYmxlIGdpdmVuIHRoZSByaWdodCBmbGFncywgd2Ugd2FudAorLWRubCB0byBhYm9ydCBhbmQgYWR2aXNlIHRoZSB1c2VyIHRvIGZpeCB0aGVpciBDRkxBR1MuICBJdCdzIGJldHRlciB0byBkbworK2RubCB0byBhZGQgLW1hcmNoPWk0ODYgYXV0b21hdGljYWxseSB0byBmaXggdGhlaXIgQ0ZMQUdTLiAgSXQncyBiZXR0ZXIgdG8gZG8KKyBkbmwgdGhhdCB0aGVuIHRvIHNpbGVudGx5IGZhbGwgYmFjayBvbiBlbXVsYXRlZCBhdG9taWMgb3BzIGp1c3QgYmVjYXVzZQorIGRubCB0aGUgdXNlciBoYWQgdGhlIHdyb25nIGJ1aWxkIGVudmlyb25tZW50LgorCitAQCAtMjQwMSw3ICsyNDAxLDggQEAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBsb2NrLWZyZWUgYXRvbWljIGludAorICAgICAgICAgQUNfVFJZX0NPTVBJTEUoW10sCisgICAgICAgICAgICAgICAgICAgICAgICBbdm9sYXRpbGUgaW50IGF0b21pYyA9IDI7XAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAgKCZhdG9taWMsIDIsIDMpO10sCistICAgICAgICAgICAgICAgICAgICAgICBbQUNfTVNHX0VSUk9SKFtHTGliIG11c3QgYmUgYnVpbGQgd2l0aCAtbWFyY2g9aTQ4NiBvciBsYXRlci5dKV0sCisrICAgICAgICAgICAgICAgICAgICAgICBbQUNfTVNHX1dBUk4oW0dMaWIgbXVzdCBiZSBidWlsZCB3aXRoIC1tYXJjaD1pNDg2IG9yIGxhdGVyLl0pCisrICAgICAgICAgICAgICAgICAgICAgICBTQVZFX0NGTEFHUz0iJHtTQVZFX0NGTEFHU30gLW1hcmNoPWk0ODYiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorICAgICAgICAgQ0ZMQUdTPSIke1NBVkVfQ0ZMQUdTfSIKKyAgICAgICBmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9hbGxvdy1ydW4tbWVkaWEtc2RYLWRyaXZlLW1vdW50LWlmLXVzZXJuYW1lLXJvb3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2FsbG93LXJ1bi1tZWRpYS1zZFgtZHJpdmUtbW91bnQtaWYtdXNlcm5hbWUtcm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDBjMDA4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9hbGxvdy1ydW4tbWVkaWEtc2RYLWRyaXZlLW1vdW50LWlmLXVzZXJuYW1lLXJvb3QucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSBjNTNlOTRhNTIwYjU3M2FhMGRjZjEyOTAzZTk1NjNmZThiYWRjMzRjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFyaXVzIEF2cmFtIDxtYXJpdXMuYXZyYW1AaW50ZWwuY29tPgorRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAxMjoxMDo0MSArMDMwMAorU3ViamVjdDogW1BBVENIXSBBbGxvdyAvcnVuL21lZGlhL3NkWCBkcml2ZSBtb3VudCBpZiB1c2VybmFtZSByb290CisKK0luIGNhc2UgdGhhdCB0aGUgdXNlcm5hbWUgbG9nZ2VkIGluIHRoZSBzeXN0ZW0gaXMgcm9vdAordGhlIGRyaXZlcyBhcmUgZGlyZWN0bHkgbW91bnRlZCBpbiAvcnVuL21lZGlhL3NkWCBhbmQKK25vdCAvcnVuL21lZGlhLzx1c2VybmFtZT4vc2RYIGFzIHRoZSBmdW5jdGlvbgorZ191bml4X21vdW50X2d1ZXNzX3Nob3VsZF9kaXNwbGF5KCkgZXhwZWN0cy4KKworV2l0aG91dCB0aGlzIGNoYW5nZSBVU0Igc3RpY2sgbW91bnRzIGFyZSBub3QgYWNjZXNpYmxlIGZyb20KK2dyYXBoaWNhbCBhcHBsaWNhdGlvbnMgc3VjaCBhcyB0aGUgRmlsZSBNYW5hZ2VyIChwY21hbmZtKS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IE1hcml1cyBBdnJhbSA8bWFyaXVzLmF2cmFtQGludGVsLmNvbT4KKy0tLQorIGdpby9ndW5peG1vdW50cy5jIHwgICAgNSArKysrKworIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2dpby9ndW5peG1vdW50cy5jIGIvZ2lvL2d1bml4bW91bnRzLmMKK2luZGV4IDQ5OTkzNTQuLmY2YzE0NzIgMTAwNjQ0CistLS0gYS9naW8vZ3VuaXhtb3VudHMuYworKysrIGIvZ2lvL2d1bml4bW91bnRzLmMKK0BAIC0yMTM2LDYgKzIxMzYsMTEgQEAgZ191bml4X21vdW50X2d1ZXNzX3Nob3VsZF9kaXNwbGF5IChHVW5peE1vdW50RW50cnkgKm1vdW50X2VudHJ5KQorICAgICAgICAgICBtb3VudF9wYXRoW3NpemVvZiAoIi9ydW4vbWVkaWEvIikgLSAxICsgdXNlcl9uYW1lX2xlbl0gPT0gJy8nKQorICAgICAgICAgaXNfaW5fcnVudGltZV9kaXIgPSBUUlVFOworIAorKyAgICAgIC8qIEFsbG93IG5vIHVzZXJuYW1lIGluIHBhdGggaW4gL3J1bi9tZWRpYSBpZiBjdXJyZW50IHVzZXIgaXMgcm9vdCAqLworKyAgICAgIGlmIChzdHJjbXAodXNlcl9uYW1lLCAicm9vdCIpID09IDAgJiYKKysgICAgICAgICAgc3RybmNtcCAobW91bnRfcGF0aCwgIi9ydW4vbWVkaWEvIiwgc2l6ZW9mKCJydW4vbWVkaWEiKSkgPT0gMCkKKysgICAgICAgIGlzX2luX3J1bnRpbWVfZGlyID0gVFJVRTsKKysKKyAgICAgICBpZiAoaXNfaW5fcnVudGltZV9kaXIgfHwgZ19zdHJfaGFzX3ByZWZpeCAobW91bnRfcGF0aCwgIi9tZWRpYS8iKSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgY2hhciAqcGF0aDsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2NvbmZpZ3VyZS1saWJ0b29sLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9jb25maWd1cmUtbGlidG9vbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDY5YTNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9jb25maWd1cmUtbGlidG9vbC5wYXRjaApAQCAtMCwwICsxLDYwIEBACitGcm9tIDFjNTcxODY0OGQ0OWU3OTVlZmVlOTFjMjIwYTJiZjkzODZjMTg0ZjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDI4IEFwciAyMDEyIDE4OjI0OjUwICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZTogdXNlICRob3N0X2FsaWFzLWxpYnRvb2wgaW5zdGVhZCBvZiBsaWJ0b29sCisgZGlyZWN0bHkKKworUG9reSByZW5hbWVzIGxpYnRvb2wgdG8gJGhvc3RfYWxpYXMtbGlidG9vbC4KKy4vJGhvc3RfYWxpYXMtbGlidG9vbCBpc24ndCBjcmVhdGVkIHVudGlsIGFmdGVyIGNvbmZpZ3VyZSBydW5zIHdpdGgKK2xpYnRvb2wgPj0gMi4yLjIKK3NvIHdlIGNhbid0IGNhbGwgIyBpdCBhdCB0aGlzIHBvaW50LiBXZSBjYW4gc2FmZWx5IGFzc3VtZSBhIHZlcnNpb24gaXMKK2F2YWlsYWJsZQorZnJvbSBQQVRIIHRob3VnaAorCitSZWJhc2VkIHRvIGdsaWItMi4yNy4zIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CitSZWJhc2VkIHRvIGdsaWItMi4zMi4xIGJ5IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAgICA4ICsrKystLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGE2NDc4YzYuLjlhOTNkNjAgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE0NzAsNyArMTQ3MCw3IEBAIGlmIHRlc3QgeCIkZ2xpYl9uYXRpdmVfd2luMzIiID0geHllczsgdGhlbgorICAgR19NT0RVTEVfTERGTEFHUz0KKyBlbHNlCisgICBleHBvcnQgU0VECistICBHX01PRFVMRV9MREZMQUdTPWAoLi9saWJ0b29sIC0tY29uZmlnOyBlY2hvIGV2YWwgZWNobyBcXCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMpIHwgc2hgCisrICBHX01PRFVMRV9MREZMQUdTPWAoLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnOyBlY2hvIGV2YWwgZWNobyBcXCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMpIHwgc2hgCisgZmkKKyBkbmwgR19NT0RVTEVfSU1QTD0gZG9uJ3QgcmVzZXQsIHNvIGNtZC1saW5lIGNhbiBvdmVycmlkZQorIEdfTU9EVUxFX05FRURfVVNDT1JFPTAKK0BAIC0xNTM1LDkgKzE1MzUsOSBAQCBpZiB0ZXN0ICIkR19NT0RVTEVfSU1QTCIgPSAiR19NT0RVTEVfSU1QTF9ETCI7IHRoZW4KKyAJTERGTEFHUz0iJExERkxBR1MgJEdfTU9EVUxFX0xERkxBR1MiCisgZG5sICoqKiBjaGVjayBmb3IgT1NGMS81LjAgUlRMRF9HTE9CQUwgYnJva2VubmVzcworIAllY2hvICJ2b2lkIGdsaWJfcGx1Z2luX3Rlc3Qodm9pZCkgeyB9IiA+IHBsdWdpbi5jCistCSR7U0hFTEx9IC4vbGlidG9vbCAtLW1vZGU9Y29tcGlsZSAtLXRhZz1DQyAke0NDfSAke0NGTEFHU30gXAorKwkke1NIRUxMfSAuLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1tb2RlPWNvbXBpbGUgLS10YWc9Q0MgJHtDQ30gJHtDRkxBR1N9IFwKKyAJCSR7Q1BQRkxBR1N9IC1jIC1vIHBsdWdpbi5sbyBwbHVnaW4uYyA+L2Rldi9udWxsIDI+JjEKKy0JJHtTSEVMTH0gLi9saWJ0b29sIC0tbW9kZT1saW5rIC0tdGFnPUNDICR7Q0N9ICR7Q0ZMQUdTfSBcCisrCSR7U0hFTEx9IC4vJGhvc3RfYWxpYXMtbGlidG9vbCAtLW1vZGU9bGluayAtLXRhZz1DQyAke0NDfSAke0NGTEFHU30gXAorIAkJJHtMREZMQUdTfSAtbW9kdWxlIC1vIHBsdWdpbi5sYSAtZXhwb3J0LWR5bmFtaWMgXAorIAkJLXNocmV4dCAiLm8iIC1hdm9pZC12ZXJzaW9uIHBsdWdpbi5sbyBcCisgCQktcnBhdGggL2RvbnQvY2FyZSA+L2Rldi9udWxsIDI+JjEKK0BAIC0xNjE0LDcgKzE2MTQsNyBAQCBmaQorIAorIEFDX01TR19DSEVDS0lORyhmb3IgdGhlIHN1ZmZpeCBvZiBtb2R1bGUgc2hhcmVkIGxpYnJhcmllcykKKyBleHBvcnQgU0VECistc2hyZXh0X2NtZHM9YC4vbGlidG9vbCAtLWNvbmZpZyB8IGdyZXAgJ15zaHJleHRfY21kcz0nYAorK3NocmV4dF9jbWRzPWAuLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWcgfCBncmVwICdec2hyZXh0X2NtZHM9J2AKKyBldmFsICRzaHJleHRfY21kcworIG1vZHVsZT15ZXMgZXZhbCBzdGRfc2hyZXh0PSRzaHJleHRfY21kcworICMgY2hvcCB0aGUgaW5pdGlhbCBkb3QKKy0tIAorMS43LjguNgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2ZpeC1jb25mbGljdGluZy1yYW5kLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9maXgtY29uZmxpY3RpbmctcmFuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTcxMTEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9maXgtY29uZmxpY3RpbmctcmFuZC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitSZW5hbWUgJ3JhbmQnIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZsaWN0LgorCitVcHN0cmVhbS1TdGF0dXM6IHBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEJqw7ZybiBTdGVuYmVyZyA8YmpzdEBlbmVhLmNvbT4KKworZGlmZiAtdSBnbGliLTIuMzQuMy90ZXN0cy9yZWZjb3VudC9zaWduYWxzLmN+IGdsaWItMi4zNC4zL3Rlc3RzL3JlZmNvdW50L3NpZ25hbHMuYworLS0tIGdsaWItMi4zNC4zL3Rlc3RzL3JlZmNvdW50L3NpZ25hbHMuYwkyMDEyLTExLTI2IDE3OjUyOjQ4LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWItMi4zNC4zL3Rlc3RzL3JlZmNvdW50L3NpZ25hbHMuYwkyMDEzLTAyLTA4IDE0OjI0OjEwLjA1MjQ3NzU0NiArMDEwMAorQEAgLTksNyArOSw3IEBACisgI2RlZmluZSBNWV9JU19URVNUX0NMQVNTKHRjbGFzcykgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKCh0Y2xhc3MpLCBHX1RZUEVfVEVTVCkpCisgI2RlZmluZSBNWV9URVNUX0dFVF9DTEFTUyh0ZXN0KSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKHRlc3QpLCBHX1RZUEVfVEVTVCwgR1Rlc3RDbGFzcykpCisgCistc3RhdGljIEdSYW5kICpyYW5kOworK3N0YXRpYyBHUmFuZCAqZ3JhbmQ7CisgCisgdHlwZWRlZiBzdHJ1Y3QgX0dUZXN0IEdUZXN0OworIHR5cGVkZWYgc3RydWN0IF9HVGVzdENsYXNzIEdUZXN0Q2xhc3M7CitAQCAtODQsNyArODQsNyBAQAorICAgICAgIE5VTEwKKyAgICAgfTsKKyAKKy0gICAgcmFuZCA9IGdfcmFuZF9uZXcoKTsKKysgICAgZ3JhbmQgPSBnX3JhbmRfbmV3KCk7CisgCisgICAgIHRlc3RfdHlwZSA9IGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMgKEdfVFlQRV9PQkpFQ1QsICJHVGVzdCIsCisgICAgICAgICAmdGVzdF9pbmZvLCAwKTsKK0BAIC0yMTgsNyArMjE4LDcgQEAKKyBzdGF0aWMgdm9pZAorIG15X3Rlc3RfZG9fcHJvcCAoR1Rlc3QgKiB0ZXN0KQorIHsKKy0gIHRlc3QtPnZhbHVlID0gZ19yYW5kX2ludCAocmFuZCk7CisrICB0ZXN0LT52YWx1ZSA9IGdfcmFuZF9pbnQgKGdyYW5kKTsKKyAgIGdfb2JqZWN0X25vdGlmeSAoR19PQkpFQ1QgKHRlc3QpLCAidGVzdC1wcm9wIik7CisgfQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9nbGliLTIuMC1jb25maWd1cmUtcmVhZGxpbmsucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2dsaWItMi4wLWNvbmZpZ3VyZS1yZWFkbGluay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzU5ZDExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9nbGliLTIuMC1jb25maWd1cmUtcmVhZGxpbmsucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorY29uZmlndXJlLmFjOiBjaGFuZ2UgcmVhZGxpbmsgLWYgdG8gLW0KKworQ2hhbmdlICJyZWFkbGluayAtZiIgdG8gInJlYWRsaW5rIC1tIiBzaW5jZSAkbGliZGlyLyR3aXRoX3J1bnRpbWVfbGliZGlyCittYXkgbm90IGV4aXN0LgorCitUaGlzIHBhdGNoIHNob3VsZCBnbyB0byB0aGUgdXBzdHJlYW0sIEkgd2lsbCBzZW5kIGl0IHNvb25lci4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI3MSw3ICsyNzEsNyBAQCBBQ19BUkdfV0lUSChydW50aW1lLWxpYmRpciwKKyAgICAgICAgICAgIFtdLAorIAkgICBbd2l0aF9ydW50aW1lX2xpYmRpcj0iIl0pCisgR0xJQl9SVU5USU1FX0xJQkRJUj0iJHdpdGhfcnVudGltZV9saWJkaXIiCistQUJTX0dMSUJfUlVOVElNRV9MSUJESVI9ImByZWFkbGluayAtZiAkbGliZGlyLyR3aXRoX3J1bnRpbWVfbGliZGlyYCIKKytBQlNfR0xJQl9SVU5USU1FX0xJQkRJUj0iYHJlYWRsaW5rIC1tICRsaWJkaXIvJHdpdGhfcnVudGltZV9saWJkaXJgIgorIEFDX1NVQlNUKEdMSUJfUlVOVElNRV9MSUJESVIpCisgQUNfU1VCU1QoQUJTX0dMSUJfUlVOVElNRV9MSUJESVIpCisgQU1fQ09ORElUSU9OQUwoSEFWRV9HTElCX1JVTlRJTUVfTElCRElSLCBbdGVzdCAieCR3aXRoX3J1bnRpbWVfbGliZGlyIiAhPSAieCJdKQorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvZ2xpYi1nZXR0ZXh0aXplLWRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvZ2xpYi1nZXR0ZXh0aXplLWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTQzNTExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9nbGliLWdldHRleHRpemUtZGlyLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKKyMgYW4gdmVyeSBvbGQgcGF0Y2ggY2hlcnJ5LXBpY2tlZCBpbiBldmVyeSBnbGliLTIuMCBwYXRjaCBkaXJlY3RvcnkuIFRoZSBlYXJsaWVzdCBjb250YWluZXIKKyMgZm9yIGl0IGlzIDIuNi41IGluIE9FLiBUaGUgZWFybGllc3QgY29tbWl0IGZvciBpdCBpcyBjOGU1NzAyMTI3ZTUwN2U4MmU2ZjY4YTRiOGM1NDY4MDNhY2NlYTlkCisjIGluIE9FIHNpZGUgd2hpY2ggcG9ydHMgZnJvbSBwcmV2aW91cyBiaXRrZWVwZXIgU0NNLiBJbiBPRSBzaWRlIGl0J3Mgb25seSB1c2VkIHRpbCAyLjEyLjQuCisjCisjIGtlZXAgaXQgc2luY2UgaXQncyBhbHdheXMgY2xlYW5lciB0byBub3QgaGFyZGNvZGUgZGVzdGluYXRpb24gcGF0aC4gVXNlIEBkYXRhZGlyQCBpcyBtb3JlCisjIHBvcnRhYmxlIGhlcmUuIG1hcmsgZm9yIHVwc3RyZWFtCisjCisjIGJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMDYvMjUvMjAxMAorIyBSZWJhc2VkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+LCAxMS8xNi8yMDEwCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworZGlmZiAtcnVOIGdsaWItMi4yNy4zLW9yaWcvZ2xpYi1nZXR0ZXh0aXplLmluIGdsaWItMi4yNy4zL2dsaWItZ2V0dGV4dGl6ZS5pbgorLS0tIGdsaWItMi4yNy4zLW9yaWcvZ2xpYi1nZXR0ZXh0aXplLmluCTIwMDktMDQtMDEgMDc6MDQ6MjAuMDAwMDAwMDAwICswODAwCisrKysgZ2xpYi0yLjI3LjMvZ2xpYi1nZXR0ZXh0aXplLmluCTIwMTAtMTEtMTYgMTI6NTU6MDYuODc0NjA1OTE2ICswODAwCitAQCAtNTIsNyArNTIsNyBAQAorIGRhdGFkaXI9QGRhdGFkaXJACisgZGF0YXJvb3RkaXI9QGRhdGFyb290ZGlyQAorIAorLWdldHRleHRfZGlyPSRwcmVmaXgvc2hhcmUvZ2xpYi0yLjAvZ2V0dGV4dAorK2dldHRleHRfZGlyPUBkYXRhZGlyQC9nbGliLTIuMC9nZXR0ZXh0CisgCisgd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KKyAgIGNhc2UgIiQxIiBpbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9wdGVzdC1wYXRocy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvcHRlc3QtcGF0aHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNiZTAyNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvcHRlc3QtcGF0aHMucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorSW5zdGVhZCBvZiB3cml0aW5nIHRoZSB0ZW1wb3JhcnkgbWFwcGluZyBmaWxlcyBpbiB0aGUgbWFwcGVkZmlsZSB0ZXN0IHRvIHRoZQordXNlciBydW50aW1lIGRpcmVjdG9yeSwgd3JpdGUgdGhlbSB0byAkVE1QLiAgVGhlIHJ1bnRpbWUgZGlyZWN0b3J5IG1heSBub3QKK2N1cnJlbnRseSBleGlzdCBpZiB0aGUgdGVzdCBpcyBleGVjdXRlZCBvbiBhIG5vbi1kZXNrdG9wIHN5c3RlbSBhbmQgdGhlIHRlc3QKK2RvZXNuJ3QgYXR0ZW1wdCB0byBjcmVhdGUgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2dsaWIvdGVzdHMvbWFwcGVkZmlsZS5jIGIvZ2xpYi90ZXN0cy9tYXBwZWRmaWxlLmMKK2luZGV4IDQwZTBlNjAuLjI3YTI0YmUgMTAwNjQ0CistLS0gYS9nbGliL3Rlc3RzL21hcHBlZGZpbGUuYworKysrIGIvZ2xpYi90ZXN0cy9tYXBwZWRmaWxlLmMKK0BAIC04MSw3ICs4MSw3IEBAIHRlc3Rfd3JpdGFibGUgKHZvaWQpCisgICBjb25zdCBnY2hhciAqbmV3ID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ4eXoiOworICAgZ2NoYXIgKnRtcF9jb3B5X3BhdGg7CisgCistICB0bXBfY29weV9wYXRoID0gZ19idWlsZF9maWxlbmFtZSAoZ19nZXRfdXNlcl9ydW50aW1lX2RpciAoKSwgImdsaWItdGVzdC00MDk2LXJhbmRvbS1ieXRlcyIsIE5VTEwpOworKyAgdG1wX2NvcHlfcGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUgKGdfZ2V0X3RtcF9kaXIgKCksICJnbGliLXRlc3QtNDA5Ni1yYW5kb20tYnl0ZXMiLCBOVUxMKTsKKyAKKyAgIGdfZmlsZV9nZXRfY29udGVudHMgKGdfdGVzdF9nZXRfZmlsZW5hbWUgKEdfVEVTVF9ESVNULCAiNDA5Ni1yYW5kb20tYnl0ZXMiLCBOVUxMKSwgJmNvbnRlbnRzLCAmbGVuLCAmZXJyb3IpOworICAgZ19hc3NlcnRfbm9fZXJyb3IgKGVycm9yKTsKK0BAIC0xMjUsNyArMTI1LDcgQEAgdGVzdF93cml0YWJsZV9mZCAodm9pZCkKKyAgIGludCBmZDsKKyAgIGdjaGFyICp0bXBfY29weV9wYXRoOworIAorLSAgdG1wX2NvcHlfcGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUgKGdfZ2V0X3VzZXJfcnVudGltZV9kaXIgKCksICJnbGliLXRlc3QtNDA5Ni1yYW5kb20tYnl0ZXMiLCBOVUxMKTsKKysgIHRtcF9jb3B5X3BhdGggPSBnX2J1aWxkX2ZpbGVuYW1lIChnX2dldF90bXBfZGlyICgpLCAiZ2xpYi10ZXN0LTQwOTYtcmFuZG9tLWJ5dGVzIiwgTlVMTCk7CisgCisgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzIChnX3Rlc3RfZ2V0X2ZpbGVuYW1lIChHX1RFU1RfRElTVCwgIjQwOTYtcmFuZG9tLWJ5dGVzIiwgTlVMTCksICZjb250ZW50cywgJmxlbiwgJmVycm9yKTsKKyAgIGdfYXNzZXJ0X25vX2Vycm9yIChlcnJvcik7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMGFlMDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL3J1bi1wdGVzdApAQCAtMCwwICsxLDMgQEAKKyMhIC9iaW4vc2gKKworZ25vbWUtZGVza3RvcC10ZXN0aW5nLXJ1bm5lciBnbGliCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL3VjbGliYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvdWNsaWJjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMTU0ZmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL3VjbGliYy5wYXRjaApAQCAtMCwwICsxLDIwIEBACitGaXggREFUQURJUk5BTUUgb24gdWNsaWJjL0xpbnV4CisKK3RyYW5zbGF0aW9uIGZpbGVzIGFyZSBhbHdheXMgaW5zdGFsbGVkIHVuZGVyIFBSRUZJWC9zaGFyZS9sb2NhbGUgaW4gdWNsaWJjCitiYXNlZCBzeXN0ZW1zIHRoZXJlZm9yZSBsZXRzIHNldCBEQVRBRElSTkFNRSB0byAic2hhcmUiLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitJbmRleDogZ2xpYi0yLjM4LjIvbTRtYWNyb3MvZ2xpYi1nZXR0ZXh0Lm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2xpYi0yLjM4LjIub3JpZy9tNG1hY3Jvcy9nbGliLWdldHRleHQubTQJMjAxMy0xMS0wNyAwNzoyOToxMy4wMDAwMDAwMDAgLTA4MDAKKysrKyBnbGliLTIuMzguMi9tNG1hY3Jvcy9nbGliLWdldHRleHQubTQJMjAxNC0wMy0xNSAxNDo1MTo1NC43MTIxMzU2NDQgLTA3MDAKK0BAIC0yMzksNyArMjM5LDcgQEAKKyAJICAgICAgW0NBVE9CSkVYVD0ubW8KKyAgICAgICAgICAgICAgICBEQVRBRElSTkFNRT1saWJdKQorIAkgICAgOzsKKy0JICAgICotKi1vcGVuYnNkKikKKysJICAgICotKi1vcGVuYnNkKiB8ICotKi1saW51eC11Y2xpYmMqKQorIAkgICAgQ0FUT0JKRVhUPS5tbworICAgICAgICAgICAgIERBVEFESVJOQU1FPXNoYXJlCisgCSAgICA7OwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMF8yLjQ0LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wXzIuNDQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTNkMzZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMF8yLjQ0LjEuYmIKQEAgLTAsMCArMSwyMyBAQAorcmVxdWlyZSBnbGliLmluYworCitQRSA9ICIxIgorCitTSFJUX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS9nbGliLyR7U0hSVF9WRVJ9L2dsaWItJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS1saWJ0b29sLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1jb25mbGljdGluZy1yYW5kLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1tYXJjaC1pNDg2LWludG8tQ0ZMQUdTLWF1dG9tYXRpY2FsbHkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ2xpYi0yLjAtY29uZmlndXJlLXJlYWRsaW5rLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9wdGVzdC1wYXRocy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91Y2xpYmMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUuYWMtRG8tbm90LXVzZS1yZWFkbGluay13aGVuLWNyb3NzLWNvbXBpbGluLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FsbG93LXJ1bi1tZWRpYS1zZFgtZHJpdmUtbW91bnQtaWYtdXNlcm5hbWUtcm9vdC5wYXRjaCBcCisJICAgZmlsZTovLzAwMDEtUmVtb3ZlLXRoZS13YXJuaW5nLWFib3V0LWRlcHJlY2F0ZWQtcGF0aHMtaW4tc2NoZW1hcy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGZpbGU6Ly9nbGliLWdldHRleHRpemUtZGlyLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODNlZmJhNDcyMmE5Njc0Yjk3NDM3ZDFkOTlhZjc5ZGIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODgxMWRlYWNhZjhhNTAzZDBhOWI3MDE3NzdlYTA3OWNhNmE0Mjc3YmUxMGUzZDczMGQyMTEyNzM1ZDVlY2EwNyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MmY3OTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWIuaW5jCkBAIC0wLDAgKzEsMTA0IEBACitTVU1NQVJZID0gIkEgZ2VuZXJhbC1wdXJwb3NlIHV0aWxpdHkgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIkdMaWIgaXMgYSBnZW5lcmFsLXB1cnBvc2UgdXRpbGl0eSBsaWJyYXJ5LCB3aGljaCBwcm92aWRlcyBtYW55IHVzZWZ1bCBkYXRhIHR5cGVzLCBtYWNyb3MsIHR5cGUgY29udmVyc2lvbnMsIHN0cmluZyB1dGlsaXRpZXMsIGZpbGUgdXRpbGl0aWVzLCBhIG1haW4gbG9vcCBhYnN0cmFjdGlvbiwgYW5kIHNvIG9uLiIKK0hPTUVQQUdFID0gImh0dHBzOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9nbGliLyIKKworIyBwY3JlIGlzIHVuZGVyIEJTRDsKKyMgZG9jcy9yZWZlcmVuY2UvQ09QWUlORyBpcyB3aXRoIGEgJ3B1YmxpYyBkb21haSctbGlrZSBsaWNlbnNlIQorTElDRU5TRSA9ICJMR1BMdjIrICYgQlNEICYgUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbGliL2dsaWIuaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTE3O21kNT1iNGYwZjRhMzk5YzE5ZTVlYmIyMGMzMWI3OWQ2YmMzMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbW9kdWxlL0NPUFlJTkc7bWQ1PTNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dtb2R1bGUvZ21vZHVsZS5oO2JlZ2lubGluZT00O2VuZGxpbmU9MTc7bWQ1PWI0ZjBmNGEzOTljMTllNWViYjIwYzMxYjc5ZDZiYzMyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dsaWIvcGNyZS9DT1BZSU5HO21kNT0yNjZlYmMzZmY3NGVlOWNlNmZhZDY1NTc3NjY3YzBmNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbGliL3BjcmUvcGNyZS5oO2JlZ2lubGluZT0xMTtlbmRsaW5lPTM1O21kNT1kZTI3ZjJiZjYzM2QyMGEyYjdhZjBiMTk4MzQyMzI4MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kb2NzL3JlZmVyZW5jZS9DT1BZSU5HO21kNT1mNTFhNTEwMGMxN2FmNmJhZTAwNzM1Y2Q3OTFlMWZjYyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZyIKK1NFQ1RJT04gPSAibGlicyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitERVBFTkRTID0gImdsaWItMi4wLW5hdGl2ZSB2aXJ0dWFsL2xpYmljb252IGxpYmZmaSB6bGliIgorREVQRU5EU19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHRlc3QnLCAnIGRidXMnLCAnJywgZCl9IgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAicGtnY29uZmlnLW5hdGl2ZSBnZXR0ZXh0LW5hdGl2ZSBsaWJmZmktbmF0aXZlIHpsaWItbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmVzZGsgPSAibmF0aXZlc2RrLWxpYnRvb2wgbmF0aXZlc2RrLWdldHRleHQgbmF0aXZlc2RrLWxpYmZmaSBuYXRpdmVzZGstemxpYiAke0JQTn0tbmF0aXZlIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tdXRpbHMgJHtQTn0tYmFzaC1jb21wbGV0aW9uICR7UE59LWNvZGVnZW4iCisKK0xFQURfU09OQU1FID0gImxpYmdsaWItMi4wLioiCitGSUxFU18ke1BOfS11dGlscyA9ICIke2JpbmRpcn0vKiAke2RhdGFkaXJ9L2dsaWItMi4wL2dldHRleHQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgZ3RrLWRvYyBwa2djb25maWcgcHRlc3QtZ25vbWUKKworUyA9ICIke1dPUktESVJ9L2dsaWItJHtQVn0iCisKK0NPUkVDT05GID0gIi0tZGlzYWJsZS1kdHJhY2UgLS1kaXNhYmxlLWZhbSAtLWRpc2FibGUtbGliZWxmIC0tZGlzYWJsZS1zeXN0ZW10YXAgLS1kaXNhYmxlLW1hbiIKKworUFJJTlRGID0gIi0tZW5hYmxlLWluY2x1ZGVkLXByaW50Zj1ubyIKK1BSSU5URl9kYXJ3aW4gPSAiLS1lbmFibGUtaW5jbHVkZWQtcHJpbnRmPXllcyIKK1BSSU5URl9taW5ndzMyID0gIi0tZW5hYmxlLWluY2x1ZGVkLXByaW50Zj15ZXMiCitFWFRSQV9PRUNPTkYgPSAiJHtQUklOVEZ9ICR7Q09SRUNPTkZ9IgorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICIke0NPUkVDT05GfSAtLWRpc2FibGUtc2VsaW51eCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0td2l0aC1saWJpY29udj1nbnUiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCXNlZCAtaSAtZSAnMXMsIyEuKiwjISR7VVNSQklOUEFUSH0vZW52IHB5dGhvbiwnICR7U30vZ2lvL2dkYnVzLTIuMC9jb2RlZ2VuL2dkYnVzLWNvZGVnZW4uaW4KK30KKworRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYioke1NPTElCU30gJHtsaWJkaXJ9L2dpbyAke2RhdGFkaXJ9L2dsaWItMi4wL3NjaGVtYXMgXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9nbGliLTIuMC9nZXR0ZXh0L21raW5zdGFsbGRpcnMgJHtkYXRhZGlyfS9nbGliLTIuMC9nZXR0ZXh0L3BvL01ha2VmaWxlLmluLmluIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vZ2xpYi0yLjAvaW5jbHVkZSBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9naW8vbW9kdWxlcy9saWIqJHtTT0xJQlNERVZ9IFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2dpby9tb2R1bGVzLyoubGEiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7ZGF0YWRpcn0vZ2xpYi0yLjAvZ2RiICR7ZGF0YWRpcn0vZ2RiIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2dpby9tb2R1bGVzLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9nbGliLTIuMC9pbnN0YWxsZWQtdGVzdHMvZ2xpYi8uZGVidWciCitGSUxFU18ke1BOfS1jb2RlZ2VuID0gIiR7ZGF0YWRpcn0vZ2xpYi0yLjAvY29kZWdlbi8qLnB5IgorRklMRVNfJHtQTn0tYmFzaC1jb21wbGV0aW9uID0gIiR7c3lzY29uZmRpcn0vYmFzaF9jb21wbGV0aW9uLmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYmFzaC1jb21wbGV0aW9uIgorCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKK1VTRV9OTFMgPSAieWVzIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaWYgWyAtZiAke0R9JHtiaW5kaXJ9L2d0ZXN0ZXItcmVwb3J0IF07IHRoZW4KKwkJc2VkICR7RH0ke2JpbmRpcn0vZ3Rlc3Rlci1yZXBvcnQgLWkgLWUgJzFzfF4jIS4qfCMhL3Vzci9iaW4vZW52IHB5dGhvbnwnCisJZmkKKworCSMgUmVtb3ZlIHNvbWUgdW5wYWNrYWdlZCBmaWxlcworCXJtIC1mICR7RH0ke2RhdGFkaXJ9L2dsaWItMi4wL2NvZGVnZW4vKi5weWMKKwlybSAtZiAke0R9JHtkYXRhZGlyfS9nbGliLTIuMC9jb2RlZ2VuLyoucHlvCisKKwkjIFNvbWUgZGlzdHJvcyBoYXZlIGJvdGggL2Jpbi9wZXJsIGFuZCAvdXNyL2Jpbi9wZXJsLCBidXQgd2Ugc2V0IHBlcmwgbG9jYXRpb24KKwkjIGZvciB0YXJnZXQgYXMgL3Vzci9iaW4vcGVybCwgc28gZml4IGl0IHRvIC91c3IvYmluL3BlcmwuCisJaWYgWyAtZiAke0R9JHtiaW5kaXJ9L2dsaWItbWtlbnVtcyBdOyB0aGVuCisJCXNlZCAtaSAtZSAnMXMsIyEuKnBlcmwsIyEgJHtVU1JCSU5QQVRIfS9lbnYgcGVybCwnICR7RH0ke2JpbmRpcn0vZ2xpYi1ta2VudW1zCisJZmkKK30KKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIlwKKyAgICAgICAgICAgIGdub21lLWRlc2t0b3AtdGVzdGluZyBcCisgICAgICAgICAgICB0emRhdGEgXAorICAgICAgICAgICAgdHpkYXRhLWFtZXJpY2FzIFwKKyAgICAgICAgICAgIHR6ZGF0YS1hc2lhIFwKKyAgICAgICAgICAgIHR6ZGF0YS1ldXJvcGUgXAorICAgICAgICAgICAgdHpkYXRhLXBvc2l4IFwKKyAgICAgICAgICAgIHB5dGhvbi1weWdvYmplY3QgXAorICAgICAgICAgICAgcHl0aG9uLWRidXMgXAorICAgICAgICAgICAgc2hhcmVkLW1pbWUtaW5mbyBcCisgICAgICAgICAgICIKKworUkRFUEVORFNfJHtQTn0tcHRlc3RfYXBwZW5kX2xpYmMtZ2xpYmMgPSAiXAorICAgICAgICAgICAgZ2xpYmMtZ2NvbnYtdXRmLTE2IFwKKyAgICAgICAgICAgIGdsaWJjLWNoYXJtYXAtdXRmLTggXAorICAgICAgICAgICAgZ2xpYmMtZ2NvbnYtY3AxMjU1IFwKKyAgICAgICAgICAgIGdsaWJjLWNoYXJtYXAtY3AxMjU1IFwKKyAgICAgICAgICAgIGdsaWJjLWdjb252LXV0Zi0zMiBcCisgICAgICAgICAgICBnbGliYy1nY29udi11dGYtNyBcCisgICAgICAgICAgICBnbGliYy1nY29udi1ldWMtanAgXAorICAgICAgICAgICAgZ2xpYmMtZ2NvbnYtaXNvODg1OS0xIFwKKyAgICAgICAgICAgIGdsaWJjLWdjb252LWlzbzg4NTktMTUgXAorICAgICAgICAgICAgZ2xpYmMtY2hhcm1hcC1pbnZhcmlhbnQgXAorICAgICAgICAgICAgZ2xpYmMtbG9jYWxlZGF0YS10cmFuc2xpdC1jamstdmFyaWFudHMgXAorICAgICAgICAgICAiCisKK0lOU0FORV9TS0lQXyR7UE59LXB0ZXN0ICs9ICJsaWJkaXIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItbmV0d29ya2luZy9nbGliLW5ldHdvcmtpbmdfMi40NC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLW5ldHdvcmtpbmcvZ2xpYi1uZXR3b3JraW5nXzIuNDQuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjkxYjc2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLW5ldHdvcmtpbmcvZ2xpYi1uZXR3b3JraW5nXzIuNDQuMC5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkdMaWIgbmV0d29ya2luZyBleHRlbnNpb25zIgorREVTQ1JJUFRJT04gPSAiZ2xpYi1uZXR3b3JraW5nIGNvbnRhaW5zIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgY2VydGFpbiBHTGliIG5ldHdvcmtpbmcgZmVhdHVyZXMgdGhhdCBjYW5ub3QgYmUgaW1wbGVtZW50ZWQgZGlyZWN0bHkgaW4gR0xpYiBpdHNlbGYgYmVjYXVzZSBvZiB0aGVpciBkZXBlbmRlbmNpZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdC5nbm9tZS5vcmcvYnJvd3NlL2dsaWItbmV0d29ya2luZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmciCisKK0xJQ0VOU0UgPSAiTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWYzMGYwNzE2ZGZkZDBkOTFlYjQzOWViZWM1MjJlYzIiCisKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAiZ2xpYi0yLjAgaW50bHRvb2wtbmF0aXZlIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI2OTg5YjIwY2YzYjI2ZGQ1YWUyNzJlMDRhOWFjYjBiMyIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjhmOGEzNDBkM2JhOTliZmRlZjM4YjY1M2RhOTI5NjUyZWE2NjQwZTI3OTY5ZDI5ZjdhYzUxZmJiZTExYTQzNDYiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJjYS1jZXJ0aWZpY2F0ZXMgZ251dGxzIgorCisjIE5vIGV4cGxpY2l0IGRlcGVuZGVuY3kgYXMgaXQgd29ya3Mgd2l0aG91dCBjYS1jZXJ0aWZpY2F0ZXMgaW5zdGFsbGVkCitQQUNLQUdFQ09ORklHW2NhLWNlcnRpZmljYXRlc10gPSAiLS13aXRoLWNhLWNlcnRpZmljYXRlcz0ke3N5c2NvbmZkaXJ9L3NzbC9jZXJ0cy9jYS1jZXJ0aWZpY2F0ZXMuY3J0LC0td2l0aG91dC1jYS1jZXJ0aWZpY2F0ZXMiCitQQUNLQUdFQ09ORklHW2dudXRsc10gPSAiLS13aXRoLWdudXRscywtLXdpdGhvdXQtZ251dGxzLGdudXRscyIKK1BBQ0tBR0VDT05GSUdbbGlicHJveHldID0gIi0td2l0aC1saWJwcm94eSwtLXdpdGhvdXQtbGlicHJveHksbGlicHJveHkiCitQQUNLQUdFQ09ORklHW3BrY3MxMV0gPSAiLS13aXRoLXBrY3MxMSwtLXdpdGhvdXQtcGtjczExLHAxMS1raXQiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtZ25vbWUtcHJveHkiCisKK2luaGVyaXQgZ25vbWViYXNlIGdldHRleHQKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9naW8vbW9kdWxlcy9saWJnaW8qLnNvICR7ZGF0YWRpcn0vZGJ1cy0xL3NlcnZpY2VzLyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2dpby9tb2R1bGVzLy5kZWJ1Zy8iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9naW8vbW9kdWxlcy9saWJnaW8qLmxhIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vZ2lvL21vZHVsZXMvbGliZ2lvKi5hIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9jcm9zcy1sb2NhbGVkZWYtbmF0aXZlL2ZpeF9mb3JfY2VudG9zXzUuOC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZS9maXhfZm9yX2NlbnRvc181LjgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg2YTQ4MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZS9maXhfZm9yX2NlbnRvc181LjgucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvdGhlcl0KKworVGhpcyBpcyBhIGhhY2sgdG8gZml4IGJ1aWxkaW5nIHRoZSBsb2NhbGUgYml0cyBvbiBhbiBvbGRlcgorQ2VudE9zIDUuWCBtYWNoaW5lCisKK0luZGV4OiBnaXQvbG9jYWxlL3Byb2dyYW1zL2NvbmZpZy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0L2xvY2FsZS9wcm9ncmFtcy9jb25maWcuaAorKysrIGdpdC5vcmlnL2xvY2FsZS9wcm9ncmFtcy9jb25maWcuaAorQEAgLTE5LDYgKzE5LDggQEAKKyAjaWZuZGVmIF9MRF9DT05GSUdfSAorICNkZWZpbmUgX0xEX0NPTkZJR19ICTEKKyAKKysjZGVmaW5lIERVTU1ZX0xPQ0FMRV9UCisrCisgLyogVXNlIHRoZSBpbnRlcm5hbCB0ZXh0ZG9tYWluIHVzZWQgZm9yIGxpYmMgbWVzc2FnZXMuICAqLworICNkZWZpbmUgUEFDS0FHRSBfbGliY19pbnRsX2RvbWFpbm5hbWUKKyAjaWZuZGVmIFZFUlNJT04KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZV8yLjIyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9jcm9zcy1sb2NhbGVkZWYtbmF0aXZlXzIuMjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE1M2VjZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZV8yLjIyLmJiCkBAIC0wLDAgKzEsNTkgQEAKK1NVTU1BUlkgPSAiQ3Jvc3MgbG9jYWxlIGdlbmVyYXRpb24gdG9vbCBmb3IgZ2xpYmMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliYy9saWJjLmh0bWwiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxHUEwtMi4xIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFUzttZDU9ZTlhNTU4ZTI0M2IzNmQzMjA5ZjM4MGRlYjM5NGIyMTMgXAorICAgICAgZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgIGZpbGU6Ly9wb3NpeC9yeHNwZW5jZXIvQ09QWVJJR0hUO21kNT1kYzU0ODViYjM5NGExM2IyMzMyZWMxYzc4NWY1ZDgzYSBcCisgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIgorCisKK2luaGVyaXQgbmF0aXZlCitpbmhlcml0IGF1dG90b29scworCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS8ke1BOfToke0ZJTEVfRElSTkFNRX0vZ2xpYmM6IgorCitCUkFOQ0ggPz0gInJlbGVhc2UvJHtQVn0vbWFzdGVyIgorR0xJQkNfR0lUX1VSSSA/PSAiZ2l0Oi8vc291cmNld2FyZS5vcmcvZ2l0L2dsaWJjLmdpdCIKKworU1JDX1VSSSA9ICIke0dMSUJDX0dJVF9VUkl9O2JyYW5jaD0ke0JSQU5DSH07bmFtZT1nbGliYyBcCisgICAgICAgICAgIGdpdDovL2dpdGh1Yi5jb20va3Jhai9sb2NhbGVkZWY7YnJhbmNoPW1hc3RlcjtuYW1lPWxvY2FsZWRlZjtkZXN0c3VmZml4PWdpdC9sb2NhbGVkZWYgXAorICAgICAgICAgICBmaWxlOi8vZml4X2Zvcl9jZW50b3NfNS44LnBhdGNoIFwKKyAgICAgICAgICAgJHtFR0xJQkNQQVRDSEVTfSBcCisiCitFR0xJQkNQQVRDSEVTID0gIlwKKyAgICAgICAgICAgZmlsZTovLzAwMTctdGltZXpvbmUtcmUtd3JpdHRlbi10enNlbGVjdC1hcy1wb3NpeC1zaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE4LWVnbGliYy1Dcm9zcy1idWlsZGluZy1hbmQtdGVzdGluZy1pbnN0cnVjdGlvbnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxOS1lZ2xpYmMtQnJpbmctRWdsaWJjLW9wdGlvbi1ncm91cC1pbmZyYXN0cnVjdHVyZS10by1nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjAtZWdsaWJjLUhlbHAtYm9vdHN0cmFwLWNyb3NzLXRvb2xjaGFpbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIxLWVnbGliYy1jaGVycnktcGlja2VkLWZyb20taHR0cC13d3cuZWdsaWJjLm9yZy1hcmNoaXYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMi1lZ2xpYmMtQ2xlYXItY2FjaGUtbGluZXMtb24tcHBjOHh4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjMtZWdsaWJjLVJlc29sdmUtX19mcHNjcl92YWx1ZXMtb24tU0g0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjQtZWdsaWJjLUZvcndhcmQtcG9ydC1lZ2xpYmMtb3B0aW9ucy1ncm91cHMtc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI1LWVnbGliYy1JbnN0YWxsLVBJQy1hcmNoaXZlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI2LWVnbGliYy1kbF9kZWJ1Z19tYXNrLWlzLWNvbnRyb2xsZWQtYnktX19PUFRJT05fRUdMSUIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNy1lZ2xpYmMtdXNlLW9wdGlvbi1ncm91cHMtQ29uZGl0aW9uYWxseS1leGNsdWRlLWMtdGVzLnBhdGNoIFwKKyIKKworU1JDUkVWX2dsaWJjID89ICJhMzRkMWM2YWZjODY1MjFkNmFkMTc2NjJhM2I1MzYyZDg0ODE1MTRjIgorU1JDUkVWX2xvY2FsZWRlZiA/PSAiYzgzMzM2NzM0OGQzOWRhZDdiYTAxODk5MGJmZGFmZmFlYzhlOWVkMyIKKworIyBNYWtlcyBmb3IgYSByYXRoZXIgbG9uZyByZXYgKDIyIGNoYXJhY3RlcnMpLCBidXQuLi4KKyMKK1NSQ1JFVl9GT1JNQVQgPSAiZ2xpYmNfbG9jYWxlZGVmIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWdsaWJjPSR7U30iCitDRkxBR1MgKz0gIi1mZ251ODktaW5saW5lIC1zdGQ9Z251OTkgLURJU19JTlwoeFwpPScwJyIKKworZG9fY29uZmlndXJlICgpIHsKKwkke1N9L2xvY2FsZWRlZi9jb25maWd1cmUgJHtFWFRSQV9PRUNPTkZ9Cit9CisKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtCfS9sb2NhbGVkZWYgJHtEfSR7YmluZGlyfS9jcm9zcy1sb2NhbGVkZWYKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtY29sbGF0ZXJhbC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWNvbGxhdGVyYWwuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNjU1ZWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWNvbGxhdGVyYWwuaW5jCkBAIC0wLDAgKzEsMjIgQEAKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID89ICJmaWxlOi8vJHtDT01NT05fTElDRU5TRV9ESVJ9L0dQTC0yLjA7bWQ1PTgwMWY4MDk4MGQxNzFkZDY0MjU2MTA4MzNhMjJkYmU2IFwKKyAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vTEdQTC0yLjE7bWQ1PTFhNmQyNjhmZDIxODY3NWZmZWE4YmU1NTY3ODhiNzgwIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmMvaW5kZXguaHRtbCIKKworIyBUaGlzIG5lZWRzIHRvIG1hdGNoIHdpdGggZ2xpYmMuaW5jLCBvdGhlcndpc2UgZ2xpYmMtc2NyaXB0cyBhbmQgZ2xpYmMtbG9jYWxlCisjIHdpbGwgZmFpbCB0byBmaW5kIG1haW4gZ2xpYmMsIGZvciBkZXRhaWxzIHNlZQorIyBodHRwOi8vbGlzdHMub3BlbmVtYmVkZGVkLm9yZy9waXBlcm1haWwvb3BlbmVtYmVkZGVkLWNvcmUvMjAxNS1KYW51YXJ5LzEwMDY3OS5odG1sCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworZG9fZmV0Y2hbbm9leGVjXSA9ICIxIgorZG9fdW5wYWNrW25vZXhlY10gPSAiMSIKK2RvX3BhdGNoW25vZXhlY10gPSAiMSIKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKKworZG9faW5zdGFsbFtkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworQ09NUEFUSUJMRV9IT1NUX2xpYmMtbXVzbF9jbGFzcy10YXJnZXQgPSAibnVsbCIKK0NPTVBBVElCTEVfSE9TVF9saWJjLXVjbGliY19jbGFzcy10YXJnZXQgPSAibnVsbCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1jb21tb24uaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYTE1NjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWNvbW1vbi5pbmMKQEAgLTAsMCArMSw5IEBACitTVU1NQVJZID0gIkdMSUJDIChHTlUgQyBMaWJyYXJ5KSIKK0RFU0NSSVBUSU9OID0gIlRoZSBHTlUgQyBMaWJyYXJ5IGlzIHVzZWQgYXMgdGhlIHN5c3RlbSBDIGxpYnJhcnkgaW4gbW9zdCBzeXN0ZW1zIHdpdGggdGhlIExpbnV4IGtlcm5lbC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliYy9saWJjLmh0bWwiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID89ICJmaWxlOi8vTElDRU5TRVM7bWQ1PTA3YTM5NGIyNmUwOTAyYjlmZmRlYzAzNzY1MjA5NzcwIFwKKyAgICAgIGZpbGU6Ly9DT1BZSU5HO21kNT0zOTNhNWNhNDQ1ZjY5NjU4NzNlY2EwMjU5YTE3ZjgzMyBcCisgICAgICBmaWxlOi8vcG9zaXgvcnhzcGVuY2VyL0NPUFlSSUdIVDttZDU9ZGM1NDg1YmIzOTRhMTNiMjMzMmVjMWM3ODVmNWQ4M2EgXAorICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT1iYmI0NjEyMTFhMzNiMTM0ZDQyZWQ1ZWU4MDJiMzdmZiAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWluaXRpYWwuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1pbml0aWFsLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTAwODQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1pbml0aWFsLmluYwpAQCAtMCwwICsxLDc2IEBACitERVBFTkRTID0gImxpbnV4LWxpYmMtaGVhZGVycyB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MtaW5pdGlhbCBsaWJnY2MtaW5pdGlhbCIKK1BST1ZJREVTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWxpYmMtaW5pdGlhbCIKKworUEFDS0FHRVMgPSAiIgorUEFDS0FHRVNfRFlOQU1JQyA9ICIiCisKK1NUQUdJTkdDQyA9ICJnY2MtY3Jvc3MtaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKK1NUQUdJTkdDQ19jbGFzcy1uYXRpdmVzZGsgPSAiZ2NjLWNyb3Nzc2RrLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCitUT09MQ0hBSU5fT1BUSU9OUyA9ICIgLS1zeXNyb290PSR7U1RBR0lOR19ESVJfVENCT09UU1RSQVB9IgorCitkb19jb25maWd1cmUgKCkgeworCShjZCAke1N9ICYmIGdudS1jb25maWdpemUpIHx8IGRpZSAiZmFpbHVyZSBpbiBydW5uaW5nIGdudS1jb25maWdpemUiCisJZmluZCAke1N9IC1uYW1lICJjb25maWd1cmUiIHwgeGFyZ3MgdG91Y2gKKwkke1N9L2NvbmZpZ3VyZSAtLWhvc3Q9JHtUQVJHRVRfU1lTfSAtLWJ1aWxkPSR7QlVJTERfU1lTfSBcCisJCS0tcHJlZml4PS91c3IgXAorCQktLXdpdGhvdXQtY3ZzIC0tZGlzYWJsZS1zYW5pdHktY2hlY2tzIFwKKwkJLS13aXRoLWhlYWRlcnM9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtpbmNsdWRlZGlyfSBcCisJCS0td2l0aC1rY29uZmlnPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfSBcCisJCS0tZW5hYmxlLWhhY2tlci1tb2RlIC0tZW5hYmxlLWFkZG9ucworfQorCitkb19jb21waWxlICgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgY3Jvc3MtY29tcGlsaW5nPXllcyBpbnN0YWxsX3Jvb3Q9JHtEfSBcCisJaW5jbHVkZWRpcj0nJHtpbmNsdWRlZGlyfScgcHJlZml4PScke3ByZWZpeH0nIFwKKwlpbnN0YWxsLWJvb3RzdHJhcC1oZWFkZXJzPXllcyBpbnN0YWxsLWhlYWRlcnMKKworCW9lX3J1bm1ha2UgY3N1L3N1YmRpcl9saWIKKwlta2RpciAtcCAke0R9JHtsaWJkaXJ9LworCWluc3RhbGwgLW0gNjQ0IGNzdS9jcnRbMWluXS5vICR7RH0ke2xpYmRpcn0KKworCSMgVHdvIGhlYWRlcnMgLS0gc3R1YnMuaCBhbmQgZmVhdHVyZXMuaCAtLSBhcmVuJ3QgaW5zdGFsbGVkIGJ5IGluc3RhbGwtaGVhZGVycywKKwkjIHNvIGRvIHRoZW0gYnkgaGFuZC4gIFdlIGNhbiB0b2xlcmF0ZSBhbiBlbXB0eSBzdHVicy5oIGZvciB0aGUgbW9tZW50LgorCSMgU2VlIGUuZy4gaHR0cDovL2djYy5nbnUub3JnL21sL2djYy8yMDAyLTAxL21zZzAwOTAwLmh0bWwKKwlta2RpciAtcCAke0R9JHtpbmNsdWRlZGlyfS9nbnUvCisJdG91Y2ggJHtEfSR7aW5jbHVkZWRpcn0vZ251L3N0dWJzLmgKKwljcCAke1N9L2luY2x1ZGUvZmVhdHVyZXMuaCAke0R9JHtpbmNsdWRlZGlyfS9mZWF0dXJlcy5oCisKKwlpZiBbIC1lICR7Qn0vYml0cy9zdGRpb19saW0uaCBdOyB0aGVuCisJCWNwICR7Qn0vYml0cy9zdGRpb19saW0uaCAgJHtEfSR7aW5jbHVkZWRpcn0vYml0cy8KKwlmaQorCSMgYWRkIGxpbmtzIHRvIGxpbnV4LWxpYmMtaGVhZGVyczogZmluYWwgZ2xpYmMgYnVpbGQgbmVlZCB0aGlzLgorCWZvciB0IGluIGxpbnV4IGFzbSBhc20tZ2VuZXJpYzsgZG8KKwkJbG4gLXMgJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtpbmNsdWRlZGlyfS8kdCAke0R9JHtpbmNsdWRlZGlyfS8KKwlkb25lCit9CisKK2RvX2luc3RhbGxfbG9jYWxlKCkgeworCToKK30KKworZG9fc2l0ZWNvbmZpZyAoKSB7CisJOgorfQorCitTU1RBVEVQT1NUSU5TVEZVTkNTICs9ICJnbGliY2luaXRpYWxfc3N0YXRlX3Bvc3RpbnN0IgorZ2xpYmNpbml0aWFsX3NzdGF0ZV9wb3N0aW5zdCgpIHsKKwlpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgLW8gIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCisJdGhlbgorCQkjIFJlY3JlYXRlIHRoZSBzeW1saW5rcyB0byBlbnN1cmUgdGhleSBwb2ludCB0byB0aGUgY29ycmVjdCBsb2NhdGlvbgorCQlmb3IgdCBpbiBsaW51eCBhc20gYXNtLWdlbmVyaWM7IGRvCisJCQlybSAtZiAke1NUQUdJTkdfRElSX1RDQk9PVFNUUkFQfSR7aW5jbHVkZWRpcn0vJHQKKwkJCWxuIC1zICR7U1RBR0lOR19ESVJfVEFSR0VUfSR7aW5jbHVkZWRpcn0vJHQgJHtTVEFHSU5HX0RJUl9UQ0JPT1RTVFJBUH0ke2luY2x1ZGVkaXJ9LworCQlkb25lCisJZmkKK30KKworZG9fcG9wdWxhdGVfc3lzcm9vdFtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtTVEFHSU5HX0RJUl9UQ0JPT1RTVFJBUH0vIgorCisjIFdlIGRvbid0IGluc3RhbGwgYW55IHNjcmlwdHMgc28gdGhlcmUgaXMgbm90aGluZyB0byBldmFjdWF0ZQorZG9fZXZhY3VhdGVfc2NyaXB0cyAoKSB7CisJOgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1pbml0aWFsXzIuMjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWluaXRpYWxfMi4yMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWIwMWRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1pbml0aWFsXzIuMjIuYmIKQEAgLTAsMCArMSwxMSBAQAorcmVxdWlyZSBnbGliY18ke1BWfS5iYgorcmVxdWlyZSBnbGliYy1pbml0aWFsLmluYworCitERVBFTkRTICs9ICJrY29uZmlnLWZyb250ZW5kcy1uYXRpdmUiCisKKyMgbWFpbiBnbGliYyByZWNpcGVzIG11Y2sgd2l0aCBUQVJHRVRfQ1BQRkxBR1MgdG8gcG9pbnQgaW50bworIyBmaW5hbCB0YXJnZXQgc3lzcm9vdCBidXQgd2UKKyMgYXJlIG5vdCB0aGVyZSB3aGVuIGJ1aWxkaW5nIGdsaWJjLWluaXRpYWwKKyMgc28gcmVzZXQgaXQgaGVyZQorCitUQVJHRVRfQ1BQRkxBR1MgPSAiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1sZC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxkLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjJkNjY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1sZC5pbmMKQEAgLTAsMCArMSw1NiBAQAorZGVmIGxkX2FwcGVuZF9pZl90dW5lX2V4aXN0cyhkLCBpbmZvcywgZGljdCk6CisgICAgdHVuZSA9IGQuZ2V0VmFyKCJERUZBVUxUVFVORSIsIFRydWUpIG9yICIiCisgICAgbGliZGlyID0gZC5nZXRWYXIoImJhc2VfbGliZGlyIiwgVHJ1ZSkgb3IgIiIKKyAgICBpZiB0dW5lIGluIGRpY3Q6CisgICAgICAgIGluZm9zWydsZGNvbmZpZyddLmFkZCgneyInICsgbGliZGlyICsgJy8nICsgZGljdFt0dW5lXVswXSArICciLCcgKyBkaWN0W3R1bmVdWzFdICsgJyB9JykKKyAgICAgICAgaW5mb3NbJ2xkZHJld3JpdGUnXS5hZGQobGliZGlyKycvJytkaWN0W3R1bmVdWzBdKQorCitkZWYgZ2xpYmNfZGxfaW5mbyhkKToKKyAgICBsZF9pbmZvX2FsbCA9IHsKKyAgICAgICAgIm1pcHMiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgIm1pcHM2NC1uMzIiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgIm1pcHM2NCI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAibWlwc2VsIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJtaXBzNjRlbC1uMzIiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgIm1pcHM2NGVsIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJtaXBzLW5mIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJtaXBzNjQtbmYtbjMyIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJtaXBzNjQtbmYiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgIm1pcHM2NGVsLW5mLW4zMiI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAibWlwczY0ZWwtbmYiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgInBvd2VycGMiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgInBvd2VycGMtbmYiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgInBvd2VycGM2NCI6IFsibGQ2NC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJwb3dlcnBjNjQtbmYiOiBbImxkNjQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAiY29yZTItMzIiOiBbImxkLWxpbnV4LnNvLjIiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgImNvcmUyLTY0IjogWyJsZC1saW51eC14ODYtNjQuc28uMiIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAieDg2IjogWyJsZC1saW51eC5zby4yIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJ4ODYtNjQiOiBbImxkLWxpbnV4LXg4Ni02NC5zby4yIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJpNTg2IjogWyJsZC1saW51eC5zby4yIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJjb3JlaTctMzIiOiBbImxkLWxpbnV4LnNvLjIiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgImNvcmVpNy02NCI6IFsibGQtbGludXgteDg2LTY0LnNvLjIiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICB9CisKKyAgICBpbmZvcyA9IHsnbGRjb25maWcnOnNldCgpLCAnbGRkcmV3cml0ZSc6c2V0KCl9CisgICAgbGRfYXBwZW5kX2lmX3R1bmVfZXhpc3RzKGQsIGluZm9zLCBsZF9pbmZvX2FsbCkKKworICAgICNERUZBVUxUVFVORV9NVUxUSUxJQl9PUklHSU5BTAorICAgIG9yaWdpbmFsX3R1bmU9ZC5nZXRWYXIoIkRFRkFVTFRUVU5FX01VTFRJTElCX09SSUdJTkFMIixUcnVlKQorICAgIGlmIG9yaWdpbmFsX3R1bmU6CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJERUZBVUxUVFVORSIsIG9yaWdpbmFsX3R1bmUpCisgICAgICAgIGxkX2FwcGVuZF9pZl90dW5lX2V4aXN0cyhsb2NhbGRhdGEsIGluZm9zLCBsZF9pbmZvX2FsbCkKKworICAgIHZhcmlhbnRzID0gZC5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSkgb3IgIiIKKyAgICBmb3IgaXRlbSBpbiB2YXJpYW50cy5zcGxpdCgpOgorICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgb3ZlcnJpZGVzID0gbG9jYWxkYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgIjp2aXJ0Y2xhc3MtbXVsdGlsaWItIiArIGl0ZW0KKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgb3ZlcnJpZGVzKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgbGRfYXBwZW5kX2lmX3R1bmVfZXhpc3RzKGxvY2FsZGF0YSwgaW5mb3MsIGxkX2luZm9fYWxsKQorICAgIGluZm9zWydsZGNvbmZpZyddID0gJywnLmpvaW4oaW5mb3NbJ2xkY29uZmlnJ10pCisgICAgaW5mb3NbJ2xkZHJld3JpdGUnXSA9ICcgJy5qb2luKGluZm9zWydsZGRyZXdyaXRlJ10pCisgICAgcmV0dXJuIGluZm9zCisKK0VHTElCQ19LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUyA9ICIke0BnbGliY19kbF9pbmZvKGQpWydsZGNvbmZpZyddfSIKK1JUTERMSVNUID0gIiR7QGdsaWJjX2RsX2luZm8oZClbJ2xkZHJld3JpdGUnXX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxvY2FsZS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxvY2FsZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY2ZDA3MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbG9jYWxlLmluYwpAQCAtMCwwICsxLDk2IEBACitpbmNsdWRlIGdsaWJjLWNvbGxhdGVyYWwuaW5jCisKK1NVTU1BUlkgPSAiTG9jYWxlIGRhdGEgZnJvbSBnbGliYyIKKworQlBOID0gImdsaWJjIgorTE9DQUxFQkFTRVBOID0gIiR7TUxQUkVGSVh9Z2xpYmMiCisKKyMgZ2xpYmMtY29sbGF0ZXJhbC5pbmMgaW5oaWJpdHMgYWxsIGRlZmF1bHQgZGVwcywgYnV0IGRvX3BhY2thZ2UgbmVlZHMgb2JqY29weQorIyBFUlJPUjogb2JqY29weSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgMTI3IChjbWQgd2FzICdpNTg2LXdlYm9zLWxpbnV4LW9iamNvcHknIC0tb25seS1rZWVwLWRlYnVnICdnbGliYy1sb2NhbGUvMi4xNy1yMC9wYWNrYWdlL3Vzci9saWIvZ2NvbnYvSUJNMTE2Ni5zbycgJ2dsaWJjLWxvY2FsZS8yLjE3LXIwL3BhY2thZ2UvdXNyL2xpYi9nY29udi8uZGVidWcvSUJNMTE2Ni5zbycpCisjIEVSUk9SOiBGdW5jdGlvbiBmYWlsZWQ6IHNwbGl0X2FuZF9zdHJpcF9maWxlcworQklOVVRJTFNERVAgPSAidmlydHVhbC8ke01MUFJFRklYfSR7VEFSR0VUX1BSRUZJWH1iaW51dGlsczpkb19wb3B1bGF0ZV9zeXNyb290IgorQklOVVRJTFNERVBfY2xhc3MtbmF0aXZlc2RrID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzLWNyb3Nzc2RrOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCitkb19wYWNrYWdlW2RlcGVuZHNdICs9ICIke0JJTlVUSUxTREVQfSIKKworIyBCaW5hcnkgbG9jYWxlcyBhcmUgZ2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgaWYgRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTgorIyBpcyBzZXQuIFRoZSBpZGVhIGlzIHRvIGF2b2lkIHJ1bm5pbmcgbG9jYWxlZGVmIG9uIHRoZSB0YXJnZXQgKGF0IGZpcnN0IGJvb3QpCisjIHRvIGRlY3JlYXNlIGluaXRpYWwgYm9vdCB0aW1lIGFuZCBhdm9pZCBsb2NhbGVkZWYgYmVpbmcga2lsbGVkIGJ5IHRoZSBPT00KKyMga2lsbGVyIHdoaWNoIHVzZWQgdG8gZWZmZWN0aXZlbHkgYnJlYWsgaTE4biBvbiBtYWNoaW5lcyB3aXRoIDwgMTI4TUIgUkFNLgorCisjIGRlZmF1bHQgdG8gZGlzYWJsZWQgCitFTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OID89ICIwIgorRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTl9wbi1uYXRpdmVzZGstZ2xpYmMtbG9jYWxlID0gIjAiCisKKyNlbmFibGUgbG9jYWxlIGdlbmVyYXRpb24gb24gdGhlc2UgYXJjaGVzCisjIEJJTkFSWV9MT0NBTEVfQVJDSEVTIGlzIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgcmVndWxhciBleHByZXNzaW9ucworQklOQVJZX0xPQ0FMRV9BUkNIRVMgPz0gImFybS4qIGFhcmNoNjQgaVszLTZdODYgeDg2XzY0IHBvd2VycGMgbWlwcyBtaXBzNjQiCisKKyMgc2V0ICIxIiB0byB1c2UgY3Jvc3MtbG9jYWxlZGVmIGZvciBsb2NhbGUgZ2VuZXJhdGlvbgorIyBzZXQgIjAiIGZvciBxZW11IGVtdWxhdGlvbiBvZiBuYXRpdmUgbG9jYWxlZGVmIGZvciBsb2NhbGUgZ2VuZXJhdGlvbgorTE9DQUxFX0dFTkVSQVRJT05fV0lUSF9DUk9TUy1MT0NBTEVERUYgPSAiMSIKKworUFJPVklERVMgPSAidmlydHVhbC9saWJjLWxvY2FsZSIKKworUEFDS0FHRVMgPSAibG9jYWxlZGVmICR7UE59LWRiZyIKKworUEFDS0FHRVNfRFlOQU1JQyA9ICJebG9jYWxlLWJhc2UtLiogXAorICAgICAgICAgICAgICAgICAgICBeZ2xpYmMtZ2NvbnYtLiogXmdsaWJjLWNoYXJtYXAtLiogXmdsaWJjLWxvY2FsZWRhdGEtLiogXmdsaWJjLWJpbmFyeS1sb2NhbGVkYXRhLS4qIFwKKyAgICAgICAgICAgICAgICAgICAgXmdsaWJjLWdjb252LS4qICBeZ2xpYmMtY2hhcm1hcC0uKiAgXmdsaWJjLWxvY2FsZWRhdGEtLiogIF5nbGliYy1iaW5hcnktbG9jYWxlZGF0YS0uKiBcCisgICAgICAgICAgICAgICAgICAgIF4ke01MUFJFRklYfWdsaWJjLWdjb252JCIKKworIyBDcmVhdGUgYSBnbGliYy1iaW5hcmllcyBwYWNrYWdlCitBTExPV19FTVBUWV8ke0JQTn0tYmluYXJpZXMgPSAiMSIKK1BBQ0tBR0VTICs9ICIke0JQTn0tYmluYXJpZXMiCitSUkVDT01NRU5EU18ke0JQTn0tYmluYXJpZXMgPSAgIiR7QCIgIi5qb2luKFtwIGZvciBwIGluIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkgaWYgcC5maW5kKCJnbGliYy1iaW5hcnkiKSAhPSAtMV0pfSIKKworIyBDcmVhdGUgYSBnbGliYy1jaGFybWFwcyBwYWNrYWdlCitBTExPV19FTVBUWV8ke0JQTn0tY2hhcm1hcHMgPSAiMSIKK1BBQ0tBR0VTICs9ICIke0JQTn0tY2hhcm1hcHMiCitSUkVDT01NRU5EU18ke0JQTn0tY2hhcm1hcHMgPSAgIiR7QCIgIi5qb2luKFtwIGZvciBwIGluIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkgaWYgcC5maW5kKCJnbGliYy1jaGFybWFwIikgIT0gLTFdKX0iCisKKyMgQ3JlYXRlIGEgZ2xpYmMtZ2NvbnZzIHBhY2thZ2UKK0FMTE9XX0VNUFRZXyR7QlBOfS1nY29udnMgPSAiMSIKK1BBQ0tBR0VTICs9ICIke0JQTn0tZ2NvbnZzIgorUlJFQ09NTUVORFNfJHtCUE59LWdjb252cyA9ICAiJHtAIiAiLmpvaW4oW3AgZm9yIHAgaW4gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKSBpZiBwLmZpbmQoImdsaWJjLWdjb252IikgIT0gLTFdKX0iCisKKyMgQ3JlYXRlIGEgZ2xpYmMtbG9jYWxlZGF0YXMgcGFja2FnZQorQUxMT1dfRU1QVFlfJHtCUE59LWxvY2FsZWRhdGFzID0gIjEiCitQQUNLQUdFUyArPSAiJHtCUE59LWxvY2FsZWRhdGFzIgorUlJFQ09NTUVORFNfJHtCUE59LWxvY2FsZWRhdGFzID0gICIke0AiICIuam9pbihbcCBmb3IgcCBpbiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpIGlmIHAuZmluZCgiZ2xpYmMtbG9jYWxlZGF0YSIpICE9IC0xXSl9IgorCitERVNDUklQVElPTl9sb2NhbGVkZWYgPSAiZ2xpYmM6IGNvbXBpbGUgbG9jYWxlIGRlZmluaXRpb24gZmlsZXMiCisKKyMgZ2xpYmMtZ2NvbnYgaXMgZHluYW1pY2FsbHkgYWRkZWQgaW50byBQQUNLQUdFUywgdGh1cworIyBGSUxFU19nbGliYy1nY29udiB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IGV4dGVuZGVkIGluIG11bHRpbGliLgorIyBFeHBsaWNpdGx5IGFkZCAke01MUFJFRklYfSBmb3IgRklMRVNfZ2xpYmMtZ2NvbnYuCitGSUxFU18ke01MUFJFRklYfWdsaWJjLWdjb252ID0gIiR7bGliZGlyfS9nY29udi8qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZ2NvbnYvLmRlYnVnLyoiCitGSUxFU19sb2NhbGVkZWYgPSAiJHtiaW5kaXJ9L2xvY2FsZWRlZiIKKworTE9DQUxFVFJFRVNSQyA9ICIke1NUQUdJTkdfSU5DRElSfS9nbGliYy1sb2NhbGUtaW50ZXJuYWwtJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30iCisKK2RvX2luc3RhbGwgKCkgeworCW1rZGlyIC1wICR7RH0ke2JpbmRpcn0gJHtEfSR7ZGF0YWRpcn0gJHtEfSR7bGliZGlyfQorCWlmIFsgLW4gIiQobHMgJHtMT0NBTEVUUkVFU1JDfS8ke2JpbmRpcn0pIiBdOyB0aGVuCisJCWNwIC1mcFBSICR7TE9DQUxFVFJFRVNSQ30vJHtiaW5kaXJ9LyogJHtEfSR7YmluZGlyfQorCWZpCisJaWYgWyAtbiAiJChscyAke0xPQ0FMRVRSRUVTUkN9LyR7bG9jYWxlZGlyfSkiIF07IHRoZW4KKwkJbWtkaXIgLXAgJHtEfSR7bG9jYWxlZGlyfQorCQljcCAtZnBQUiAke0xPQ0FMRVRSRUVTUkN9LyR7bG9jYWxlZGlyfS8qICR7RH0ke2xvY2FsZWRpcn0KKwlmaQorCWlmIFsgLWUgJHtMT0NBTEVUUkVFU1JDfS8ke2xpYmRpcn0vZ2NvbnYgXTsgdGhlbgorCQljcCAtZnBQUiAke0xPQ0FMRVRSRUVTUkN9LyR7bGliZGlyfS9nY29udiAke0R9JHtsaWJkaXJ9CisJZmkKKwlpZiBbIC1lICR7TE9DQUxFVFJFRVNSQ30vJHtkYXRhZGlyfS9pMThuIF07IHRoZW4KKwkJY3AgLWZwUFIgJHtMT0NBTEVUUkVFU1JDfS8ke2RhdGFkaXJ9L2kxOG4gJHtEfSR7ZGF0YWRpcn0KKwlmaQorCWlmIFsgLWUgJHtMT0NBTEVUUkVFU1JDfS8ke2RhdGFkaXJ9L2xvY2FsZSBdOyB0aGVuCisJCWNwIC1mcFBSICR7TE9DQUxFVFJFRVNSQ30vJHtkYXRhZGlyfS9sb2NhbGUgJHtEfSR7ZGF0YWRpcn0KKwlmaQorCWNob3duIHJvb3Qucm9vdCAtUiAke0R9CisJY3AgLWZwUFIgJHtMT0NBTEVUUkVFU1JDfS9TVVBQT1JURUQgJHtXT1JLRElSfQorfQorCitpbmhlcml0IGxpYmMtcGFja2FnZQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbG9jYWxlXzIuMjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxvY2FsZV8yLjIyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NzAyZTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxvY2FsZV8yLjIyLmJiCkBAIC0wLDAgKzEgQEAKK3JlcXVpcmUgZ2xpYmMtbG9jYWxlLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1tdHJhY2UuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1tdHJhY2UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMmIwNzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLW10cmFjZS5pbmMKQEAgLTAsMCArMSwxMyBAQAoraW5jbHVkZSBnbGliYy1jb2xsYXRlcmFsLmluYworCitTVU1NQVJZID0gIm10cmFjZSB1dGlsaXR5IHByb3ZpZGVkIGJ5IGdsaWJjIgorREVTQ1JJUFRJT04gPSAibXRyYWNlIHV0aWxpdHkgcHJvdmlkZWQgYnkgZ2xpYmMiCitSREVQRU5EU18ke1BOfSA9ICJwZXJsIgorUlBST1ZJREVTXyR7UE59ID0gImxpYmMtbXRyYWNlIgorCitTUkMgPSAiJHtTVEFHSU5HX0lOQ0RJUn0vZ2xpYmMtc2NyaXB0cy1pbnRlcm5hbC0ke01VTFRJTUFDSF9UQVJHRVRfU1lTfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kIC1tIDA3NTUgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke1NSQ30vbXRyYWNlICR7RH0ke2JpbmRpcn0vCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLW10cmFjZV8yLjIyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1tdHJhY2VfMi4yMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjY5YmFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1tdHJhY2VfMi4yMi5iYgpAQCAtMCwwICsxIEBACityZXF1aXJlIGdsaWJjLW10cmFjZS5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtb3B0aW9ucy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLW9wdGlvbnMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZDI3ZjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLW9wdGlvbnMuaW5jCkBAIC0wLDAgKzEsMTYyIEBACitkZWYgZ2xpYmNfY2ZnKGZlYXR1cmUsIHRva2VucywgY25mKToKKyAgICBpZiB0eXBlKHRva2VucykgPT0gdHlwZSgiIik6CisgICAgICAgIHRva2VucyA9IFt0b2tlbnNdCisgICAgaWYgZmVhdHVyZToKKyAgICAgICAgY25mLmV4dGVuZChbdG9rZW4gKyAnPXknIGZvciB0b2tlbiBpbiB0b2tlbnNdKQorICAgIGVsc2U6CisgICAgICAgIGZvciB0b2tlbiBpbiB0b2tlbnM6CisgICAgICAgICAgICBjbmYuZXh0ZW5kKFt0b2tlbiArICc9biddKQorICAgICAgICAgICAgaWYgdG9rZW4gPT0gJ09QVElPTl9FR0xJQkNfTlNTV0lUQ0gnOgorICAgICAgICAgICAgICAgIGNuZi5leHRlbmQoWyJPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0NPTkZJRz1cIiR7U30vbnNzL25zc3dpdGNoLmNvbmZcIiJdKQorICAgICAgICAgICAgICAgIGNuZi5leHRlbmQoWyJPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0ZVTkNUSU9OUz1cIiR7U30vbnNzL2ZpeGVkLW5zc3dpdGNoLmZ1bmN0aW9uc1wiIl0pCisKKyMgTWFwIGRpc3RybyBmZWF0dXJlcyB0byBnbGliYyBvcHRpb25zIHNldHRpbmdzCitkZWYgZmVhdHVyZXNfdG9fZ2xpYmNfc2V0dGluZ3MoZCk6CisgICAgY25mID0gKFtdKQorCisgICAgaXB2NCA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NCcsIFRydWUsIEZhbHNlLCBkKQorICAgIGlwdjYgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2JhY2t0cmFjZSA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1iYWNrdHJhY2UnLCBUcnVlLCBGYWxzZSwgZCkgCisgICAgbGliY19iaWdfbWFjcm9zID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWJpZy1tYWNyb3MnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2JzZCA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1ic2QnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2N4eF90ZXN0cyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1jeHgtdGVzdHMnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2NhdGdldHMgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtY2F0Z2V0cycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfY2hhcnNldHMgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtY2hhcnNldHMnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2NyeXB0ID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWNyeXB0JywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19jcnlwdF91ZmMgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtY3J5cHQtdWZjJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19kYl9hbGlhc2VzID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWRiLWFsaWFzZXMnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2VudnogPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtZW52eicsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfZmN2dCA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1mY3Z0JywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19mbXRtc2cgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtZm10bXNnJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19mc3RhYiA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1mc3RhYicsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfZnRyYXZlcnNlID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWZ0cmF2ZXJzZScsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfZ2V0bG9naW4gPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtZ2V0bG9naW4nLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2lkbiA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1pZG4nLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2luZXRfYW5sID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWluZXQtYW5sJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19saWJtID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWxpYm0nLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2xvY2FsZXMgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtbG9jYWxlcycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfbG9jYWxlX2NvZGUgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtbG9jYWxlLWNvZGUnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX21lbXVzYWdlID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLW1lbXVzYWdlJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19uaXMgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtbmlzJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19uc3N3aXRjaCA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1uc3N3aXRjaCcsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfcmNtZCA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1yY21kJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19ydGxkX2RlYnVnID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXJ0bGQtZGVidWcnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX3NwYXduID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXNwYXduJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19zdHJlYW1zID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXN0cmVhbXMnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX3N1bnJwYyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1zdW5ycGMnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX3V0bXAgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtdXRtcCcsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfdXRtcHggPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtdXRtcHgnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX3dvcmRleHAgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtd29yZGV4cCcsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfcG9zaXhfY2xhbmdfd2NoYXIgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtcG9zaXgtY2xhbmctd2NoYXInLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX3Bvc2l4X3JlZ2V4cCA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1wb3NpeC1yZWdleHAnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX3Bvc2l4X3JlZ2V4cF9nbGliYyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1wb3NpeC1yZWdleHAtZ2xpYmMnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX3Bvc2l4X3djaGFyX2lvID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXBvc2l4LXdjaGFyLWlvJywgVHJ1ZSwgRmFsc2UsIGQpCisKKyAgICAjIGFycmFuZ2UgdGhlIGRlcGVuZGVuY2llcyBhbW9uZyBnbGliYyBjb25maWd1YWJsZSBvcHRpb25zIGFjY29yZGluZyB0byBmaWxlIG9wdGlvbi1ncm91cHMuZGVmIGZyb20gZ2xpYmMgc291cmNlIGNvZGUKKyAgICBuZXdfZGVwID0gVHJ1ZQorICAgIHdoaWxlIG5ld19kZXA6CisgICAgICAgIG5ld19kZXAgPSBGYWxzZQorCisgICAgICAgIGlmIGlwdjYgYW5kIG5vdCBpcHY0OgorICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgIGlwdjQgPSBUcnVlCisKKyAgICAgICAgaWYgaXB2NCBhbmQgbm90IGxpYmNfbnNzd2l0Y2g6CisgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgbGliY19uc3N3aXRjaCA9IFRydWUKKworICAgICAgICBpZiBsaWJjX2N4eF90ZXN0czoKKyAgICAgICAgICAgIGlmIG5vdCBsaWJjX3Bvc2l4X3djaGFyX2lvOgorICAgICAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICAgICAgbGliY19wb3NpeF93Y2hhcl9pbyA9IFRydWUKKyAgICAgICAgICAgIGlmIG5vdCBsaWJjX2xpYm06CisgICAgICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgICAgICBsaWJjX2xpYm0gPSBUcnVlCisKKyAgICAgICAgaWYgbGliY19jYXRnZXRzIGFuZCBub3QgbGliY19sb2NhbGVfY29kZToKKyAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICBsaWJjX2xvY2FsZV9jb2RlID0gVHJ1ZQorCisgICAgICAgIGlmIGxpYmNfY3J5cHRfdWZjIGFuZCBub3QgbGliY19jcnlwdDoKKyAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICBsaWJjX2NyeXB0ID0gVHJ1ZQorCisgICAgICAgIGlmIGxpYmNfZ2V0bG9naW4gYW5kIG5vdCBsaWJjX3V0bXA6CisgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgbGliY191dG1wID0gVHJ1ZQorCisgICAgICAgIGlmIGxpYmNfaW5ldF9hbmwgYW5kIG5vdCBpcHY0OgorICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgIGlwdjQgPSBUcnVlCisKKyAgICAgICAgaWYgbGliY19sb2NhbGVfY29kZSBhbmQgbm90IGxpYmNfcG9zaXhfY2xhbmdfd2NoYXI6CisgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgbGliY19wb3NpeF9jbGFuZ193Y2hhciA9IFRydWUKKworICAgICAgICBpZiBsaWJjX25pczoKKyAgICAgICAgICAgIGlmIG5vdCBpcHY0OgorICAgICAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICAgICAgaXB2NCA9IFRydWUKKyAgICAgICAgICAgIGlmIG5vdCBsaWJjX3N1bnJwYzoKKyAgICAgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgICAgIGxpYmNfc3VucnBjID0gVHJ1ZQorCisgICAgICAgIGlmIGxpYmNfcmNtZCBhbmQgbm90IGlwdjQ6CisgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgaXB2NCA9IFRydWUKKworICAgICAgICBpZiBsaWJjX3N1bnJwYyBhbmQgbm90IGlwdjQ6CisgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgaXB2NCA9IFRydWUKKworICAgICAgICBpZiBsaWJjX3V0bXB4IGFuZCBub3QgbGliY191dG1wOgorICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgIGxpYmNfdXRtcCA9IFRydWUKKworICAgICAgICBpZiBsaWJjX3Bvc2l4X3JlZ2V4cF9nbGliYyBhbmQgbm90IGxpYmNfcG9zaXhfcmVnZXhwOgorICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgIGxpYmNfcG9zaXhfcmVnZXhwID0gVHJ1ZQorCisgICAgICAgIGlmIGxpYmNfcG9zaXhfd2NoYXJfaW8gYW5kIG5vdCBsaWJjX3Bvc2l4X2NsYW5nX3djaGFyOgorICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgIGxpYmNfcG9zaXhfY2xhbmdfd2NoYXIgPSBUcnVlCisKKyAgICBnbGliY19jZmcoaXB2NiwgJ09QVElPTl9FR0xJQkNfQURWQU5DRURfSU5FVDYnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfYmFja3RyYWNlLCAnT1BUSU9OX0VHTElCQ19CQUNLVFJBQ0UnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfYmlnX21hY3JvcywgJ09QVElPTl9FR0xJQkNfQklHX01BQ1JPUycsIGNuZikKKyAgICBnbGliY19jZmcobGliY19ic2QsICdPUFRJT05fRUdMSUJDX0JTRCcsIGNuZikKKyAgICBnbGliY19jZmcobGliY19jeHhfdGVzdHMsICdPUFRJT05fRUdMSUJDX0NYWF9URVNUUycsIGNuZikKKyAgICBnbGliY19jZmcobGliY19jYXRnZXRzLCAnT1BUSU9OX0VHTElCQ19DQVRHRVRTJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2NoYXJzZXRzLCAnT1BUSU9OX0VHTElCQ19DSEFSU0VUUycsIGNuZikKKyAgICBnbGliY19jZmcobGliY19jcnlwdCwgJ09QVElPTl9FR0xJQkNfQ1JZUFQnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfY3J5cHRfdWZjLCAnT1BUSU9OX0VHTElCQ19DUllQVF9VRkMnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfZGJfYWxpYXNlcywgJ09QVElPTl9FR0xJQkNfREJfQUxJQVNFUycsIGNuZikKKyAgICBnbGliY19jZmcobGliY19lbnZ6LCAnT1BUSU9OX0VHTElCQ19FTlZaJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2ZjdnQsICdPUFRJT05fRUdMSUJDX0ZDVlQnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfZm10bXNnLCAnT1BUSU9OX0VHTElCQ19GTVRNU0cnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfZnN0YWIsICdPUFRJT05fRUdMSUJDX0ZTVEFCJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2Z0cmF2ZXJzZSwgJ09QVElPTl9FR0xJQkNfRlRSQVZFUlNFJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2dldGxvZ2luLCAnT1BUSU9OX0VHTElCQ19HRVRMT0dJTicsIGNuZikKKyAgICBnbGliY19jZmcobGliY19pZG4sICdPUFRJT05fRUdMSUJDX0lETicsIGNuZikKKyAgICBnbGliY19jZmcoaXB2NCwgJ09QVElPTl9FR0xJQkNfSU5FVCcsIGNuZikKKyAgICBnbGliY19jZmcobGliY19pbmV0X2FubCwgJ09QVElPTl9FR0xJQkNfSU5FVF9BTkwnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfbGlibSwgJ09QVElPTl9FR0xJQkNfTElCTScsIGNuZikKKyAgICBnbGliY19jZmcobGliY19sb2NhbGVzLCAnT1BUSU9OX0VHTElCQ19MT0NBTEVTJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2xvY2FsZV9jb2RlLCAnT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERScsIGNuZikKKyAgICBnbGliY19jZmcobGliY19tZW11c2FnZSwgJ09QVElPTl9FR0xJQkNfTUVNVVNBR0UnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfbmlzLCAnT1BUSU9OX0VHTElCQ19OSVMnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfbnNzd2l0Y2gsICdPUFRJT05fRUdMSUJDX05TU1dJVENIJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX3JjbWQsICdPUFRJT05fRUdMSUJDX1JDTUQnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfcnRsZF9kZWJ1ZywgJ09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRycsIGNuZikKKyAgICBnbGliY19jZmcobGliY19zcGF3biwgJ09QVElPTl9FR0xJQkNfU1BBV04nLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfc3RyZWFtcywgJ09QVElPTl9FR0xJQkNfU1RSRUFNUycsIGNuZikKKyAgICBnbGliY19jZmcobGliY19zdW5ycGMsICdPUFRJT05fRUdMSUJDX1NVTlJQQycsIGNuZikKKyAgICBnbGliY19jZmcobGliY191dG1wLCAnT1BUSU9OX0VHTElCQ19VVE1QJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX3V0bXB4LCAnT1BUSU9OX0VHTElCQ19VVE1QWCcsIGNuZikKKyAgICBnbGliY19jZmcobGliY193b3JkZXhwLCAnT1BUSU9OX0VHTElCQ19XT1JERVhQJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX3Bvc2l4X2NsYW5nX3djaGFyLCAnT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVInLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfcG9zaXhfcmVnZXhwLCAnT1BUSU9OX1BPU0lYX1JFR0VYUCcsIGNuZikKKyAgICBnbGliY19jZmcobGliY19wb3NpeF9yZWdleHBfZ2xpYmMsICdPUFRJT05fUE9TSVhfUkVHRVhQX0dMSUJDJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX3Bvc2l4X3djaGFyX2lvLCAnT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8nLCBjbmYpCisKKyAgICByZXR1cm4gIlxuIi5qb2luKGNuZikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtcGFja2FnZS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXBhY2thZ2UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNjAzNjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXBhY2thZ2UuaW5jCkBAIC0wLDAgKzEsMjE0IEBACisjCisjIEZvciBub3csIHdlIHdpbGwgc2tpcCBidWlsZGluZyBvZiBhIGdjYyBwYWNrYWdlIGlmIGl0IGlzIGEgdWNsaWJjIG9uZQorIyBhbmQgb3VyIGJ1aWxkIGlzIG5vdCBhIHVjbGliYyBvbmUsIGFuZCB3ZSBza2lwIGEgZ2xpYmMgb25lIGlmIG91ciBidWlsZAorIyBpcyBhIHVjbGliYyBidWlsZC4KKyMKKyMgU2VlIHRoZSBub3RlIGluIGdjYy9nY2NfMy40LjAub2UKKyMKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBpbXBvcnQgYmIsIHJlCisgICAgdWNfb3MgPSAocmUubWF0Y2goJy4qdWNsaWJjKicsIGQuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKSkgIT0gTm9uZSkKKyAgICBpZiB1Y19vczoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoImluY29tcGF0aWJsZSB3aXRoIHRhcmdldCAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSkpCit9CisKKyMgU2V0IHRoaXMgdG8gemVybyBpZiB5b3UgZG9uJ3Qgd2FudCBsZGNvbmZpZyBpbiB0aGUgb3V0cHV0IHBhY2thZ2UKK1VTRV9MRENPTkZJRyA/PSAiMSIKKworSU5ISUJJVF9TWVNST09UX1NUUklQID0gIjEiCisKK1BBQ0tBR0VTID0gIiR7UE59LWRiZyBjYXRjaHNlZ3Ygc2xuIG5zY2QgbGRkIHR6Y29kZSAke1BOfS11dGlscyBnbGliYy10aHJlYWQtZGIgJHtQTn0tcGljIGxpYmNpZG4gbGlibWVtdXNhZ2UgbGlic2VnZmF1bHQgJHtQTn0tcGNwcm9maWxlIGxpYnNvdHJ1c3MgJHtQTn0gZ2xpYmMtZXh0cmEtbnNzICR7UE59LWRldiAke1BOfS1zdGF0aWNkZXYgJHtQTn0tZG9jIgorCisjIFRoZSBsZC5zbyBpbiB0aGlzIGdsaWJjIHN1cHBvcnRzIHRoZSBHTlVfSEFTSAorUlBST1ZJREVTXyR7UE59ID0gImVnbGliYyBydGxkKEdOVV9IQVNIKSIKK1JQUk9WSURFU18ke1BOfS11dGlscyA9ICJlZ2xpYmMtdXRpbHMiCitSUFJPVklERVNfJHtQTn0tbXRyYWNlID0gImVnbGliYy1tdHJhY2UgbGliYy1tdHJhY2UiCitSUFJPVklERVNfJHtQTn0tcGljID0gImVnbGliYy1waWMiCitSUFJPVklERVNfJHtQTn0tZGV2ID0gImVnbGliYy1kZXYgbGliYzYtZGV2IHZpcnR1YWwtbGliYy1kZXYiCitSUFJPVklERVNfJHtQTn0tc3RhdGljZGV2ID0gImVnbGliYy1zdGF0aWNkZXYiCitSUFJPVklERVNfJHtQTn0tZG9jID0gImVnbGliYy1kb2MiCitSUFJPVklERVNfZ2xpYmMtZXh0cmEtbnNzID0gImVnbGliYy1leHRyYS1uc3MiCitSUFJPVklERVNfZ2xpYmMtdGhyZWFkLWRiID0gImVnbGliYy10aHJlYWQtZGIiCitSUFJPVklERVNfJHtQTn0tcGNwcm9maWxlID0gImVnbGliYy1wY3Byb2ZpbGUiCitSUFJPVklERVNfJHtQTn0tZGJnID0gImVnbGliYy1kYmciCitsaWJjX2Jhc2VsaWJzID0gIiR7YmFzZV9saWJkaXJ9L2xpYmNyeXB0Ki5zby4qICR7YmFzZV9saWJkaXJ9L2xpYmNyeXB0LSouc28gJHtiYXNlX2xpYmRpcn0vbGliYy5zby4qICR7YmFzZV9saWJkaXJ9L2xpYmMtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJtKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYm0tKi5zbyAke2Jhc2VfbGliZGlyfS9saWJtdmVjLSouc28gJHtiYXNlX2xpYmRpcn0vbGQqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGQtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJwdGhyZWFkKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYnB0aHJlYWQtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJyZXNvbHYqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlicmVzb2x2LSouc28gJHtiYXNlX2xpYmRpcn0vbGlicnQqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlicnQtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJ1dGlsKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYnV0aWwtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJuc2wqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlibnNsLSouc28gJHtiYXNlX2xpYmRpcn0vbGlibnNzX2ZpbGVzKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYm5zc19maWxlcy0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYm5zc19jb21wYXQqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlibnNzX2NvbXBhdC0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYm5zc19kbnMqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlibnNzX2Rucy0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYmRsKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYmRsLSouc28gJHtiYXNlX2xpYmRpcn0vbGliYW5sKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYmFubC0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYkJyb2tlbkxvY2FsZSouc28uKiAke2Jhc2VfbGliZGlyfS9saWJCcm9rZW5Mb2NhbGUtKi5zbyIKK2xpYmNfYmFzZWxpYnNfYXBwZW5kX2FhcmNoNjQgPSAiIC9saWIvbGQtbGludXgtYWFyY2g2NCouc28uMSIKK0lOU0FORV9TS0lQXyR7UE59X2FwcGVuZF9hYXJjaDY0ID0gIiBsaWJkaXIiCisKK0ZJTEVTXyR7UE59ID0gIiR7bGliY19iYXNlbGlic30gJHtsaWJleGVjZGlyfS8qICR7QGJhc2VfY29uZGl0aW9uYWwoJ1VTRV9MRENPTkZJRycsICcxJywgJyR7YmFzZV9zYmluZGlyfS9sZGNvbmZpZyAke3N5c2NvbmZkaXJ9L2xkLnNvLmNvbmYnLCAnJywgZCl9IgorRklMRVNfbGRkID0gIiR7YmluZGlyfS9sZGQiCitGSUxFU19saWJzZWdmYXVsdCA9ICIke2Jhc2VfbGliZGlyfS9saWJTZWdGYXVsdCoiCitGSUxFU19saWJjaWRuID0gIiR7YmFzZV9saWJkaXJ9L2xpYmNpZG4tKi5zbyAke2Jhc2VfbGliZGlyfS9saWJjaWRuLnNvLioiCitGSUxFU19saWJtZW11c2FnZSA9ICIke2Jhc2VfbGliZGlyfS9saWJtZW11c2FnZS5zbyIKK0ZJTEVTX2dsaWJjLWV4dHJhLW5zcyA9ICIke2Jhc2VfbGliZGlyfS9saWJuc3NfKi0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYm5zc18qLnNvLioiCitGSUxFU19zbG4gPSAiJHtiYXNlX3NiaW5kaXJ9L3NsbiIKK0ZJTEVTXyR7UE59LXBpYyA9ICIke2xpYmRpcn0vKl9waWMuYSAke2xpYmRpcn0vKl9waWMubWFwICR7bGliZGlyfS9saWJjX3BpYy8qLm8iCitGSUxFU19saWJzb3RydXNzID0gIiR7bGliZGlyfS9hdWRpdC9zb3RydXNzLWxpYi5zbyIKK0ZJTEVTX1NPTElCU0RFViA9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L3JwY2dlbiAke2xpYmRpcn0vKl9ub25zaGFyZWQuYSAke2Jhc2VfbGliZGlyfS8qX25vbnNoYXJlZC5hICR7YmFzZV9saWJkaXJ9LyoubyAke2RhdGFkaXJ9L2FjbG9jYWwiCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS8qLmEgJHtiYXNlX2xpYmRpcn0vKi5hIgorRklMRVNfbnNjZCA9ICIke3NiaW5kaXJ9L25zY2QqICR7c3lzY29uZmRpcn0vaW5pdC5kL25zY2QgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9uc2NkKiAke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQvbnNjZC5jb25mIFwKKyAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9uc2NkLmNvbmYgJHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcy85OF9uc2NkICR7bG9jYWxzdGF0ZWRpcn0vZGIvbnNjZCIKK0ZJTEVTXyR7UE59LW10cmFjZSA9ICIke2JpbmRpcn0vbXRyYWNlIgorRklMRVNfdHpjb2RlID0gIiR7YmluZGlyfS90enNlbGVjdCAke3NiaW5kaXJ9L3ppYyAke3NiaW5kaXJ9L3pkdW1wIgorRklMRVNfJHtQTn0tdXRpbHMgPSAiJHtiaW5kaXJ9LyogJHtzYmluZGlyfS8qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmV4ZWNkaXJ9LyovLmRlYnVnICR7bGliZGlyfS9hdWRpdC8uZGVidWciCitGSUxFU19jYXRjaHNlZ3YgPSAiJHtiaW5kaXJ9L2NhdGNoc2VndiIKK1JERVBFTkRTX2NhdGNoc2VndiA9ICJsaWJzZWdmYXVsdCIKK0ZJTEVTXyR7UE59LXBjcHJvZmlsZSA9ICIke2Jhc2VfbGliZGlyfS9saWJwY3Byb2ZpbGUuc28iCitGSUxFU19nbGliYy10aHJlYWQtZGIgPSAiJHtiYXNlX2xpYmRpcn0vbGlidGhyZWFkX2RiLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlidGhyZWFkX2RiLSouc28iCitSUFJPVklERVNfJHtQTn0tZGV2ICs9ICJsaWJjLWRldiIKK1JQUk9WSURFU18ke1BOfS1zdGF0aWNkZXYgKz0gImxpYmMtc3RhdGljZGV2IgorCitTVU1NQVJZX3NsbiA9ICJUaGUgc3RhdGljIGxuIgorREVTQ1JJUFRJT05fc2xuID0gIlNpbWlsYXIgdG8gdGhlICdsbicgdXRpbGl0eSwgYnV0IHN0YXRpY2FsbHkgbGlua2VkLiAgc2xuIGlzIHVzZWZ1bCB0byBtYWtlIHN5bWJvbGljIGxpbmtzIHRvIGR5bmFtaWMgbGlicmFyaWVzIGlmIHRoZSBkeW5hbWljIGxpbmtpbmcgc3lzdGVtLCBmb3Igc29tZSByZWFzb24sIGlzIG5vdCBmdW5jdGlvbmFsLiIKK1NVTU1BUllfbnNjZCA9ICJOYW1lIHNlcnZpY2UgY2FjaGUgZGFlbW9uIgorREVTQ1JJUFRJT05fbnNjZCA9ICJuc2NkLCBuYW1lIHNlcnZpY2UgY2FjaGUgZGFlbW9uLCBjYWNoZXMgbmFtZSBzZXJ2aWNlIGxvb2t1cHMgZm9yIHRoZSBwYXNzd2QsIGdyb3VwIGFuZCBob3N0cyBpbmZvcm1hdGlvbi4gIEl0IGNhbiBkYW1hdGljYWxseSBpbXByb3ZpZGUgcGVyZm9ybWFuY2Ugd2l0aCByZW1vdGUsIHN1Y2ggYXMgTklTIG9yIE5JUyssIG5hbWUgc2VydmljZXMuIgorU1VNTUFSWV9nbGliYy1leHRyYS1uc3MgPSAiaGVzaW9kLCBOSVMgYW5kIE5JUysgbnNzIGxpYnJhcmllcyIKK0RFU0NSSVBUSU9OX2dsaWJjLWV4dHJhLW5zcyA9ICJnbGliYzogbmlzLCBuaXNwbHVzIGFuZCBoZXNpb2Qgc2VhcmNoIHNlcnZpY2VzLiIKK1NVTU1BUllfbGRkID0gInByaW50IHNoYXJlZCBsaWJyYXJ5IGRlcGVuZGVuY2llcyIKK0RFU0NSSVBUSU9OX2xkZCA9ICIke2JpbmRpcn0vbGRkIHByaW50cyBzaGFyZWQgbGlicmFyeSBkZXBlbmRlbmNpZXMgZm9yIGVhY2ggcHJvZ3JhbSBvciBzaGFyZWQgbGlicmFyeSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4iCitTVU1NQVJZXyR7UE59LXV0aWxzID0gIk1pc2NlbGxhbmVvdXMgdXRpbGl0aWVzIHByb3ZpZGVkIGJ5IGdsaWJjIgorREVTQ1JJUFRJT05fJHtQTn0tdXRpbHMgPSAiTWlzY2VsbGFuZW91cyB1dGlsaXRpZXMgaW5jbHVkaW5nIGdldGNvbmYsIGljb252LCBsb2NhbGUsIGdlbmNhdCwgcnBjZ2VuLCAuLi4iCitERVNDUklQVElPTl9saWJzb3RydXNzID0gIkxpYnJhcnkgdG8gc3VwcG9ydCBzb3RydXNzIHdoaWNoIHRyYWNlcyBjYWxscyB0aHJvdWdoIFBMVHMiCitERVNDUklQVElPTl90emNvZGUgPSAidHpjb2RlLCB0aW1lem9uZSB6b25laW5mbyB1dGlscyAtLSB6aWMsIHpkdW1wLCB0enNlbGVjdCIKKworaW5oZXJpdCBsaWJjLWNvbW1vbiBtdWx0aWxpYl9oZWFkZXIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCXJtIC1mICR7RH0ke3N5c2NvbmZkaXJ9L2xvY2FsdGltZQorCXJtIC1yZiAke0R9JHtsb2NhbHN0YXRlZGlyfQorCisJIyByZW1vdmUgZW1wdHkgZ2xpYmMgZGlyCisJaWYgWyAtZCAke0R9JHtsaWJkaXJ9L2dsaWJjIC1hICEgLWUgJHtEfSR7bGliZGlyfS9nbGliYy9wdF9jaG93biBdOyB0aGVuCisJCXJtZGlyICR7RH0ke2xpYmRpcn0vZ2xpYmMKKwlmaQorCW9lX211bHRpbGliX2hlYWRlciBiaXRzL3N5c2NhbGwuaAorCisJaWYgWyAtZiAke0R9JHtiaW5kaXJ9L210cmFjZSBdOyB0aGVuCisJCXNlZCAtaSAtZSAnMXMsIyEuKnBlcmwsIyEgJHtVU1JCSU5QQVRIfS9lbnYgcGVybCwnIC1lICcycyxleGVjLipwZXJsLGV4ZWMgJHtVU1JCSU5QQVRIfS9lbnYgcGVybCwnICR7RH0ke2JpbmRpcn0vbXRyYWNlCisJZmkKKwlybSAtcmYgJHtEfSR7aW5jbHVkZWRpcn0vcnBjc3ZjL3JxdW90YSoKKwkjIEluZm8gZGlyIGxpc3RpbmcgaXNuJ3QgaW50ZXJlc3RpbmcgYXQgdGhpcyBwb2ludCBzbyByZW1vdmUgaXQgaWYgaXQgZXhpc3RzLgorCWlmIFsgLWUgIiR7RH0ke2luZm9kaXJ9L2RpciIgXTsgdGhlbgorCQlybSAtZiAke0R9JHtpbmZvZGlyfS9kaXIKKwlmaQorCisJaWYgWyAiJHtVU0VfTERDT05GSUd9IiAhPSAiMSIgXTsgdGhlbgorCQkjIFdlIHdvbid0IHNoaXAgdGhlc2UgZmlsZXMgKHNlZSBGSUxFUyBhYm92ZSkgc28gbGV0J3Mgbm90IGluc3RhbGwgdGhlbQorCQlybSAtZiAke0R9JHtzeXNjb25mZGlyfS9sZC5zby5jb25mCisJCXJtIC1mICR7RH0ke2Jhc2Vfc2JpbmRpcn0vbGRjb25maWcKKwkJIyBUaGlzIGRpcmVjdG9yeSB3aWxsIGJlIGVtcHR5IG5vdyBzbyByZW1vdmUgaXQgdG9vLgorCQkjIEJ1dCBjaGVjayB3aGV0aGVyIGl0IGV4aXN0cyBmaXJzdCwgc2luY2UgaXQgd29uJ3QgZm9yIGdsaWJjLWluaXRpYWwuCisJCWlmIFsgLWQgJHtEfSR7c3lzY29uZmRpcn0gXTsgdGhlbgorCQkJcm1kaXIgJHtEfSR7c3lzY29uZmRpcn0KKwkJZmkKKwlmaQorCisJaWYgZWNobyAke1BOfXxncmVwIC1xICJnbGliYy1pbml0aWFsIjsgdGhlbgorCQlyZXR1cm4KKwlmaQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2RiL25zY2QKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9uc2NkL25zY2QuaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvbnNjZAorCWluc3RhbGwgLW0gMDc1NSAke1N9L25zY2QvbnNjZC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L25zY2QuY29uZgorCXNlZCAtaSAicyVkYWVtb24lc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLWV4ZWMlZyIgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL25zY2QKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9uc2NkL25zY2Quc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZAorCQllY2hvICJkIC9ydW4vbnNjZCA3NTUgcm9vdCByb290IC0iIFwKKwkJCT4gJHtEfSR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZC9uc2NkLmNvbmYKKwllbHNlCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKKwkJZWNobyAiZCByb290IHJvb3QgMDc1NSAvdmFyL3J1bi9uc2NkIG5vbmUiIFwKKwkJCT4gJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMvOThfbnNjZAorCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2FhcmNoNjQgKCkgeworCWlmIFsgIiR7YmFzZV9saWJkaXJ9IiAhPSAiL2xpYiIgXSA7IHRoZW4KKwkJIyBUaGUgYWFyY2g2NCBBQkkgc2F5cyB0aGUgZHluYW1pYyBsaW5rZXIgLW11c3QtIGJlIC9saWIvbGQtbGludXgtYWFyY2g2NFtfYmVdLnNvLjEKKwkJaW5zdGFsbCAtZCAke0R9L2xpYgorCQlpZiBbIC1lICR7RH0ke2Jhc2VfbGliZGlyfS9sZC1saW51eC1hYXJjaDY0LnNvLjEgXTsgdGhlbgorCQkJbG4gLXMgJHtAYmFzZV9wYXRoX3JlbGF0aXZlKCcvbGliJywgJyR7YmFzZV9saWJkaXJ9Jyl9L2xkLWxpbnV4LWFhcmNoNjQuc28uMSBcCisJCQkJJHtEfS9saWIvbGQtbGludXgtYWFyY2g2NC5zby4xCisJCWVsaWYgWyAtZSAke0R9JHtiYXNlX2xpYmRpcn0vbGQtbGludXgtYWFyY2g2NF9iZS5zby4xIF07IHRoZW4KKwkJCWxuIC1zICR7QGJhc2VfcGF0aF9yZWxhdGl2ZSgnL2xpYicsICcke2Jhc2VfbGliZGlyfScpfS9sZC1saW51eC1hYXJjaDY0X2JlLnNvLjEgXAorCQkJCSR7RH0vbGliL2xkLWxpbnV4LWFhcmNoNjRfYmUuc28uMQorCQlmaQorCWZpCit9CisKK2RvX2luc3RhbGxfbG9jYWxlICgpIHsKKwlkZXN0PSR7RH0vJHtpbmNsdWRlZGlyfS9nbGliYy1sb2NhbGUtaW50ZXJuYWwtJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30KKwlpbnN0YWxsIC1kICR7ZGVzdH0ke2Jhc2VfbGliZGlyfSAke2Rlc3R9JHtiaW5kaXJ9ICR7ZGVzdH0ke2xpYmRpcn0gJHtkZXN0fSR7ZGF0YWRpcn0KKwlpZiBbICIke2Jhc2VfbGliZGlyfSIgIT0gIiR7bGliZGlyfSIgXTsgdGhlbgorCQljcCAtZnBQUiAke0R9JHtiYXNlX2xpYmRpcn0vKiAke2Rlc3R9JHtiYXNlX2xpYmRpcn0KKwlmaQorCWlmIFsgLWUgJHtEfSR7YmluZGlyfS9sb2NhbGVkZWYgXTsgdGhlbgorCQltdiAtZiAke0R9JHtiaW5kaXJ9L2xvY2FsZWRlZiAke2Rlc3R9JHtiaW5kaXJ9CisJZmkKKwlpZiBbIC1lICR7RH0ke2xpYmRpcn0vZ2NvbnYgXTsgdGhlbgorCQltdiAtZiAke0R9JHtsaWJkaXJ9L2djb252ICR7ZGVzdH0ke2xpYmRpcn0KKwlmaQorCWlmIFsgLWUgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYiBdOyB0aGVuCisJCWNwIC1mcFBSICR7RH0ke2V4ZWNfcHJlZml4fS9saWIgJHtkZXN0fSR7ZXhlY19wcmVmaXh9CisJZmkKKwlpZiBbIC1lICR7RH0ke2RhdGFkaXJ9L2kxOG4gXTsgdGhlbgorCQltdiAke0R9JHtkYXRhZGlyfS9pMThuICR7ZGVzdH0ke2RhdGFkaXJ9CisJZmkKKwljcCAtZnBQUiAke0R9JHtkYXRhZGlyfS8qICR7ZGVzdH0ke2RhdGFkaXJ9CisJcm0gLXJmICR7RH0ke2RhdGFkaXJ9L2xvY2FsZS8KKwljcCAtZnBQUiAke1dPUktESVJ9L1NVUFBPUlRFRCAke2Rlc3R9Cit9CisKK2FkZHRhc2sgZG9faW5zdGFsbF9sb2NhbGUgYWZ0ZXIgZG9faW5zdGFsbCBiZWZvcmUgZG9fcG9wdWxhdGVfc3lzcm9vdCBkb19wYWNrYWdlCisKK2Jhc2hzY3JpcHRzID0gIm10cmFjZSBzb3RydXNzIHh0cmFjZSIKKworZG9fZXZhY3VhdGVfc2NyaXB0cyAoKSB7CisJdGFyZ2V0PSR7RH0ke2luY2x1ZGVkaXJ9L2dsaWJjLXNjcmlwdHMtaW50ZXJuYWwtJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30KKwlta2RpciAtcCAkdGFyZ2V0CisJZm9yIGkgaW4gJHtiYXNoc2NyaXB0c307IGRvCisJCWlmIFsgLWYgJHtEfSR7YmluZGlyfS8kaSBdOyB0aGVuCisJCQljcCAke0R9JHtiaW5kaXJ9LyRpICR0YXJnZXQvCisJCWZpCisJZG9uZQorfQorCithZGR0YXNrIGV2YWN1YXRlX3NjcmlwdHMgYWZ0ZXIgZG9faW5zdGFsbCBiZWZvcmUgZG9fcG9wdWxhdGVfc3lzcm9vdCBkb19wYWNrYWdlCisKK1BBQ0tBR0VfUFJFUFJPQ0VTU19GVU5DUyArPSAiZ2xpYmNfcGFja2FnZV9wcmVwcm9jZXNzIgorCitnbGliY19wYWNrYWdlX3ByZXByb2Nlc3MgKCkgeworCXJtIC1yZiAke1BLR0R9LyR7aW5jbHVkZWRpcn0vZ2xpYmMtbG9jYWxlLWludGVybmFsLSR7TVVMVElNQUNIX1RBUkdFVF9TWVN9CisJcm0gLXJmICR7UEtHRH0vJHtpbmNsdWRlZGlyfS9nbGliYy1zY3JpcHRzLWludGVybmFsLSR7TVVMVElNQUNIX1RBUkdFVF9TWVN9CisJZm9yIGkgaW4gJHtiYXNoc2NyaXB0c307IGRvCisJICAgIHJtIC1mICR7UEtHRH0ke2JpbmRpcn0vJGkKKwlkb25lCisJcm0gLXJmICR7UEtHRH0vJHtsb2NhbGVkaXJ9CisJaWYgWyAiJHtsaWJkaXJ9IiAhPSAiJHtleGVjX3ByZWZpeH0vbGliIiBdOyB0aGVuCisJCSMgVGhpcyBkaXIgb25seSBleGlzdHMgdG8gaG9sZCBsb2NhbGVzCisJCXJtIC1yZiAke1BLR0R9JHtleGVjX3ByZWZpeH0vbGliCisJZmkKK30KKworcGtnX3Bvc3RpbnN0X25zY2QgKCkgeworCWlmIFsgLXogIiREIiBdOyB0aGVuCisJCWlmIGNvbW1hbmQgLXYgc3lzdGVtZC10bXBmaWxlcyA+L2Rldi9udWxsOyB0aGVuCisJCQlzeXN0ZW1kLXRtcGZpbGVzIC0tY3JlYXRlICR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZC9uc2NkLmNvbmYKKwkJZWxpZiBbIC1lICR7c3lzY29uZmRpcn0vaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIF07IHRoZW4KKwkJCSR7c3lzY29uZmRpcn0vaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIHVwZGF0ZQorCQlmaQorCWZpCit9CitDT05GRklMRVNfbnNjZD0iJHtzeXNjb25mZGlyfS9uc2NkLmNvbmYiCisKK1NZU1RFTURfUEFDS0FHRVMgPSAibnNjZCIKK1NZU1RFTURfU0VSVklDRV9uc2NkID0gIm5zY2Quc2VydmljZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtc2NyaXB0cy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXNjcmlwdHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMDY3NzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXNjcmlwdHMuaW5jCkBAIC0wLDAgKzEsMTYgQEAKK2luY2x1ZGUgZ2xpYmMtY29sbGF0ZXJhbC5pbmMKKworU1VNTUFSWSA9ICJ1dGlsaXR5IHNjcmlwdHMgcHJvdmlkZWQgYnkgZ2xpYmMiCitERVNDUklQVElPTiA9ICJ1dGlsaXR5IHNjcmlwdHMgcHJvdmlkZWQgYnkgZ2xpYmMiCitSREVQRU5EU18ke1BOfSA9ICJiYXNoIGdsaWJjLW10cmFjZSIKKworU1JDID0gIiR7U1RBR0lOR19JTkNESVJ9L2dsaWJjLXNjcmlwdHMtaW50ZXJuYWwtJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30iCisKK2Jhc2hzY3JpcHRzID0gInNvdHJ1c3MgeHRyYWNlIgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgLW0gMDc1NSAke0R9JHtiaW5kaXJ9CisJZm9yIGkgaW4gJHtiYXNoc2NyaXB0c307IGRvCisJCWluc3RhbGwgLW0gMDc1NSAke1NSQ30vJGkgJHtEfSR7YmluZGlyfS8KKwlkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXNjcmlwdHNfMi4yMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtc2NyaXB0c18yLjIyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhODliZDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXNjcmlwdHNfMi4yMi5iYgpAQCAtMCwwICsxIEBACityZXF1aXJlIGdsaWJjLXNjcmlwdHMuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXRlc3RpbmcuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy10ZXN0aW5nLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWJiZjM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy10ZXN0aW5nLmluYwpAQCAtMCwwICsxLDk2IEBACitkb19jb21waWxlX2FwcGVuZCAoKSB7CisJIyBub3cgZ2VuZXJhdGUgc2NyaXB0IHRvIGRyaXZlIHRlc3RpbmcKKwllY2hvICIjIS91c3IvYmluL2VudiBzaCIgPiR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZXQgPj4gJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCSMgcHJ1bmUgb3V0IHRoZSB1bm5lZWRlZCB2YXJzCisJc2VkIC1pIC1lICIvXkJBU0gvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15VU0VSL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eT1BUL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eRElSU1RBQ0svZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15FVUlEL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eRlVOQ05BTUUvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15HUk9VUFMvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15IT1NUL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eSE9NRS9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXklGUy9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXkxDX0FMTC9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXkxPR05BTUUvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15NQUNIVFlQRS9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXk9TVFlQRS9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlBJUEUvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15TSEVMTC9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXicvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15VSUQvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15URVJNL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eUEFUQ0hfR0VUL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eUEtHXy9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlBPU0lYTFlfL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eUFBJRC9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlBTNC9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlEvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15TSExWTC9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlNUQUdJTkcvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15MRF9MSUJSQVJZX1BBVEgvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15QU0VVRE8vZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCisJIyBwb2ludCB0byByZWFsIHN5c3Jvb3Qgbm90IHRoZSB0b29sY2hhaW4gYm9vdHN0cmFwIHN5c3Jvb3QKKwlzZWQgLWkgLWUgInMvXC10Y2Jvb3RzdHJhcC8vZyIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCisJIyB1c2UgdGhlIGZpbmFsIGNyb3NzLWdjYyB0byB0ZXN0IHNpbmNlIHNvbWUgdGVzdHMgbmVlZCBsaWJzdGRjKysKKwlzZWQgLWkgLWUgInMvXlBBVEg9LipcLmdjYy1jcm9zcy1pbml0aWFsXDovUEFUSD0vZyIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCisJIyBhcHBlbmQgZXhlY3V0aW9uIHBhcnQgc2NyaXB0CitjYXQgPj4gJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYyA8PCBTVE9QCit0YXJnZXQ9IlwkMSIKK2lmIFsgInhcJHRhcmdldCIgPSAieCIgXQordGhlbgorCWVjaG8gIlBsZWFzZSBzcGVjaWZ5IHRoZSB0YXJnZXQgbWFjaGluZSBhbmQgcmVtb3RlIHVzZXIgaW4gZm9ybSBvZiB1c2VyQHRhcmdldCIKKwlleGl0IDE7CitmaQorc3NoIFwkdGFyZ2V0IGxzIFwkUFdEXCAgMj4mMSA+IC9kZXYvbnVsbAoraWYgWyAieFwkPyIgIT0gIngwIiBdCit0aGVuCisJZWNobyAiRmFpbGVkIGNvbm5lY3RpbmcgdG8gXCR0YXJnZXQgaXQgY291bGQgYmUgYmVjYXVzZSBvZjoiCisJZWNobyAiMS4gWW91IGRvbnQgaGF2ZSBwYXNzd29yZGxlc3Mgc3NoIHNldHVwIHRvIGFjY2VzcyBcJHRhcmdldCIKKwllY2hvICIyLiBORlMgc2hhcmUgb24gXCR0YXJnZXQgaXMgbm90IG1vdW50ZWQgb3IgaWYgbW91bnRlZCB0aGVuIG5vdCBtYXRjaGluZyB0aGUgYnVpbGQgdHJlZSBsYXlvdXQuIgorCWVjaG8gIiAgIFRoZSB0cmVlIHNob3VsZCBiZSBhY2Nlc3NpYmxlIGF0IHNhbWUgbG9jYXRpb24gb24gYnVpbGQgaG9zdCBhbmQgdGFyZ2V0IgorCWVjaG8gIiAgIFlvdSBjYW4gYWRkIG5mcy1jbGllbnQgdG8gSU1BR0VfRkVBVFVSRVMgdG8gZ2V0IHRoZSBuZnMgY2xpZW50IG9uIHRhcmdldCIKKwllY2hvICIzLiBuZnMgc2VydmVyIG9uIGJ1aWxkIGhvc3QgaXMgbm90IHJ1bm5pbmcuIgorCWVjaG8gIiAgIFBsZWFzZSBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSAnbm9fcm9vdF9zcXVhc2gnIGFkZGVkIGluIC9ldGMvZXhwb3J0cyBpZiB5b3Ugd2FudCIKKwllY2hvICIgICB0byB0ZXN0IGFzIHJvb3QgdXNlciBvbiB0YXJnZXQgKHVzdWFsbHkgaXRzIHJlY29tbWVuZGVkIHRvIGNyZWF0ZSBhIG5vbiIKKwllY2hvICIgICByb290IHVzZXIuIgorCWVjaG8gIiAgIEFzIGEgc2FuaXR5IGNoZWNrIG1ha2Ugc3VyZSB0aGF0IHRhcmdldCBjYW4gcmVhZC93cml0ZSB0byB0aGUgZ2xpYmMgYnVpbGQgdHJlZSIKKwllY2hvICIgICBQbGVhc2UgcmVmZXIgdG8gJHtTfS9FR0xJQkMuY3Jvc3MtdGVzdGluZyBmb3IgZnVydGhlciBpbnN0cnVjdGlvbnMgb24gc2V0dXAiCisJZXhpdCAxCitmaQorCWVjaG8gIiMgd2UgdGVzdCB1c2luZyBjcm9zcyBjb21waWxlciBmcm9tIHJlYWwgc3lzcm9vdCB0aGVyZWZvcmUgb3ZlcnJpZGUgdGhlIiA+ICR7Qn0vY29uZmlncGFybXMKKwllY2hvICIjIGRlZmluaXRpb25zIHRoYXQgY29tZSBmcm9tICR7Qn0vY29uZmlnLm1ha2UiID4+ICR7Qn0vY29uZmlncGFybXMKKwlmZ3JlcCB0Y2Jvb3RzdHJhcCAke0J9L2NvbmZpZy5tYWtlID4gJHtCfS9jb25maWdwYXJtcworCXNlZCAtaSAtZSAicy9cLXRjYm9vdHN0cmFwLy9nIiAke0J9L2NvbmZpZ3Bhcm1zCisKKyMgZysrIHVzZXMgZmxhZyAtbm9zdGRpbmMsIHNvIHRoZSBsb2NhdGlvbnMgb2Ygc3lzdGVtIGluY2x1ZGUgaGVhZGVycyBtdXN0IGJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkCisjIElmIHRoZSBsb2NhdGlvbnMgYXJlIG5vdCBhbHJlYWR5IHNwZWNpZmllZCBpbiBjb25maWcubWFrZSwgdGhlbiB3ZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorIyAgICA8c3lzcm9vdD4vdXNyL2luY2x1ZGUvYysrLzxnKysgdmVyc2lvbj4KKyMgICAgPHN5c3Jvb3Q+L3Vzci9pbmNsdWRlL2MrKy88ZysrIHZlcnNpb24+LzxtYWNoaW5lPgorCitjeHhpbmNsdWRlcz1cYGNhdCAke0J9L2NvbmZpZy5tYWtlIHwgZ2F3ayAnXCQxID09ICJjKystc3lzaW5jbHVkZXMiJyB8IGdhd2sgLUYiPSIgJ3twcmludCBcJDJ9JyB8IHNlZCAicy9bIFx0XVw/Ly9nIlxgCisKK2lmIFsgLXogIlwkY3h4aW5jbHVkZXMiIF07IHRoZW4KKyAgc3lzcm9vdD1cYGNhdCAke0J9L2NvbmZpZ3Bhcm1zIHwgc2VkIC1uICIvQ1hYL3AiIHwgc2VkIC1lICJzL14uKi0tc3lzcm9vdD0vLyJcYAorICBjeHg9XGBjYXQgJHtCfS9jb25maWdwYXJtcyB8IGdhd2sgJ1wkMSB+IC9eQ1hYLycgfCBnYXdrIC1GIj0iICd7cHJpbnQgXCQyfScgfCBnYXdrICd7cHJpbnQgXCQxfSdcYAorICBjeHhtYWNoaW5lPVxgXCRjeHggLWR1bXBtYWNoaW5lXGAKKyAgY3h4dmVyc2lvbj1cYFwkY3h4IC1kdW1wdmVyc2lvblxgCisgICMgcGFzcyB0aGUgbmV3IHZhbHVlIG9mIGMrKy1zeXNpbmNsdWRlcyB2aWEgY29uZmlncGFybXMKKyAgZWNobyAiIyBjKystc3lzaW5jbHVkZXMgYWRkZWQ6IiA+PiAke0J9L2NvbmZpZ3Bhcm1zCisgIGVjaG8gImMrKy1zeXNpbmNsdWRlcyA9IC1pc3lzdGVtIFwkc3lzcm9vdC91c3IvaW5jbHVkZS9jKysvXCRjeHh2ZXJzaW9uIC1pc3lzdGVtIFwkc3lzcm9vdC91c3IvaW5jbHVkZS9jKysvXCRjeHh2ZXJzaW9uL1wkY3h4bWFjaGluZSIgPj4gJHtCfS9jb25maWdwYXJtcworZmkKKword3JhcHBlcj0iJHtTfS9zY3JpcHRzL2Nyb3NzLXRlc3Qtc3NoLnNoIFwkdGFyZ2V0IgorbG9jYWxlZGVmPSIke1NUQUdJTkdfQklORElSX05BVElWRX0vY3Jvc3MtbG9jYWxlZGVmIC0tbGl0dGxlLWVuZGlhbiAtLXVpbnQzMi1hbGlnbj00IgorbWFrZSB0ZXN0cy1jbGVhbgorbWFrZSBjcm9zcy1sb2NhbGVkZWY9IlwkbG9jYWxlZGVmIiBjcm9zcy10ZXN0LXdyYXBwZXI9Ilwkd3JhcHBlciIgLWsgY2hlY2sKK3JtIC1yZiAke0J9L2NvbmZpZ3Bhcm1zCitTVE9QCisKKwljaG1vZCAreCAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZmEyZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLmluYwpAQCAtMCwwICsxLDEwNSBAQAorcmVxdWlyZSBnbGliYy1jb21tb24uaW5jCityZXF1aXJlIGdsaWJjLWxkLmluYworcmVxdWlyZSBnbGliYy10ZXN0aW5nLmluYworCitTVEFHSU5HQ0MgPSAiZ2NjLWNyb3NzLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCitTVEFHSU5HQ0NfY2xhc3MtbmF0aXZlc2RrID0gImdjYy1jcm9zc3Nkay1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorUEFUSF9wcmVwZW5kID0gIiR7U1RBR0lOR19CSU5ESVJfVE9PTENIQUlOfS4ke1NUQUdJTkdDQ306IgorCitUT09MQ0hBSU5fT1BUSU9OUyA9ICIgLS1zeXNyb290PSR7U1RBR0lOR19ESVJfVENCT09UU1RSQVB9IgorCisjIGdsaWJjIGNhbid0IGJlIGJ1aWx0IHdpdGhvdXQgb3B0aW1pemF0aW9uLCBpZiBzb21lb25lIHRyaWVzIHRvIGNvbXBpbGUgYW4KKyMgZW50aXJlIGltYWdlIGFzIC1PMCwgd2Ugb3ZlcnJpZGUgaXQgd2l0aCAtTzIgaGVyZSBhbmQgZ2l2ZSBhIG5vdGUgYWJvdXQgaXQuCitkZWYgZ2V0X29wdGltaXphdGlvbihkKToKKyAgICBzZWxlY3RlZF9vcHRpbWl6YXRpb24gPSBkLmdldFZhcigiU0VMRUNURURfT1BUSU1JWkFUSU9OIiwgVHJ1ZSkKKyAgICBpZiBiYi51dGlscy5jb250YWlucygiU0VMRUNURURfT1BUSU1JWkFUSU9OIiwgIi1PMiIsICJ4IiwgIiIsIGQpID09ICJ4IjoKKyAgICAgICAgcmV0dXJuIHNlbGVjdGVkX29wdGltaXphdGlvbgorICAgIGVsaWYgYmIudXRpbHMuY29udGFpbnMoIlNFTEVDVEVEX09QVElNSVpBVElPTiIsICItTyIsICJ4IiwgIiIsIGQpID09ICJ4IjoKKyAgICAgICAgYmIubm90ZSgiZ2xpYmMgY2FuJ3QgYmUgYnVpbHQgd2l0aCAtTywgLU8gLVduby1lcnJvciB3aWxsIGJlIHVzZWQgaW5zdGVhZC4iKQorICAgICAgICByZXR1cm4gc2VsZWN0ZWRfb3B0aW1pemF0aW9uLnJlcGxhY2UoIi1PIiwgIi1PIC1Xbm8tZXJyb3IiKQorICAgIGVsaWYgYmIudXRpbHMuY29udGFpbnMoIlNFTEVDVEVEX09QVElNSVpBVElPTiIsICItTzAiLCAieCIsICIiLCBkKSA9PSAieCI6CisgICAgICAgIGJiLm5vdGUoImdsaWJjIGNhbid0IGJlIGJ1aWx0IHdpdGggLU8wLCAtTzIgd2lsbCBiZSB1c2VkIGluc3RlYWQuIikKKyAgICAgICAgcmV0dXJuIHNlbGVjdGVkX29wdGltaXphdGlvbi5yZXBsYWNlKCItTzAiLCAiLU8yIikKKyAgICBlbGlmIGJiLnV0aWxzLmNvbnRhaW5zKCJTRUxFQ1RFRF9PUFRJTUlaQVRJT04iLCAiLU9zIiwgIngiLCAiIiwgZCkgPT0gIngiOgorICAgICAgICBiYi5ub3RlKCJnbGliYyBjYW4ndCBiZSBidWlsdCB3aXRoIC1PcywgLU9zIC1Xbm8tZXJyb3Igd2lsbCBiZSB1c2VkIGluc3RlYWQuIikKKyAgICAgICAgcmV0dXJuIHNlbGVjdGVkX29wdGltaXphdGlvbi5yZXBsYWNlKCItT3MiLCAiLU9zIC1Xbm8tZXJyb3IiKQorICAgIGVsaWYgYmIudXRpbHMuY29udGFpbnMoIlNFTEVDVEVEX09QVElNSVpBVElPTiIsICItTzEiLCAieCIsICIiLCBkKSA9PSAieCI6CisgICAgICAgIGJiLm5vdGUoImdsaWJjIGNhbid0IGJlIGJ1aWx0IHdpdGggLU8xLCAtTzEgLVduby1lcnJvciB3aWxsIGJlIHVzZWQgaW5zdGVhZC4iKQorICAgICAgICByZXR1cm4gc2VsZWN0ZWRfb3B0aW1pemF0aW9uLnJlcGxhY2UoIi1PMSIsICItTzEgLVduby1lcnJvciIpCisgICAgcmV0dXJuIHNlbGVjdGVkX29wdGltaXphdGlvbgorCitTRUxFQ1RFRF9PUFRJTUlaQVRJT04gOj0gIiR7QGdldF9vcHRpbWl6YXRpb24oZCl9IgorCisjIHNpdGVjb25maWcuYmJjbGFzcyBydW5zIGNvbmZpZ3VyZSB3aGljaCBuZWVkcyBhIHdvcmtpbmcgY29tcGlsZXIKKyMgRm9yIHRoZSBjb21waWxlciB0byB3b3JrIHdlIG5lZWQgYSB3b3JraW5nIGxpYmMgeWV0IGxpYmMgaXNuJ3QKKyMgaW4gdGhlIHN5c3Jvb3RzIGRpcmVjdG9yeSBhdCB0aGlzIHBvaW50LiBUaGlzIG1lYW5zIHRoZSBsaWJjLnNvCisjIGxpbmtlciBzY3JpcHQgd29uJ3Qgd29yayBhcyB0aGUgLS1zeXNyb290IHNldHRpbmcgaXNuJ3QgY29ycmVjdC4KKyMgSGVyZSB3ZSBjcmVhdGUgYSBoYWNrZWQgdXAgbGliYyBsaW5rZXIgc2NyaXB0IGFuZCBwYXNzIGluIHRoZSByaWdodAorIyBmbGFncyB0byBsZXQgY29uZmlndXJlIHdvcmsuIFVnbHkuCitFWFRSQVNJVEVDT05GSUcgPSAiQ0ZMQUdTPScke0NGTEFHU30gLVdsLC1MJHtXT1JLRElSfS9zaXRlX2NvbmZpZ19saWJjIC1MJHtXT1JLRElSfS9zaXRlX2NvbmZpZ19saWJjIC1MJHtTWVNST09UX0RFU1RESVJ9JHtsaWJkaXJ9IC1MJHtTWVNST09UX0RFU1RESVJ9JHtiYXNlX2xpYmRpcn0gLVdsLC1MJHtTWVNST09UX0RFU1RESVJ9JHtsaWJkaXJ9IC1XbCwtTCR7U1lTUk9PVF9ERVNURElSfSR7YmFzZV9saWJkaXJ9JyIKK3NpdGVjb25maWdfZG9fc2l0ZWNvbmZpZ19nZW5jYWNoZV9wcmVwZW5kID0gIiBcCisJbWtkaXIgLXAgJHtXT1JLRElSfS9zaXRlX2NvbmZpZ19saWJjOyBcCisJY3AgJHtTWVNST09UX0RFU1RESVJ9JHtsaWJkaXJ9L2xpYmMuc28gJHtXT1JLRElSfS9zaXRlX2NvbmZpZ19saWJjOyBcCisJc2VkIC1pIC1lICdzIyAke2Jhc2VfbGliZGlyfSMgJHtTWVNST09UX0RFU1RESVJ9JHtiYXNlX2xpYmRpcn0jZycgLWUgJ3MjICR7bGliZGlyfSMgJHtTWVNST09UX0RFU1RESVJ9JHtsaWJkaXJ9I2cnICR7V09SS0RJUn0vc2l0ZV9jb25maWdfbGliYy9saWJjLnNvOyBcCisiCisKKyMgbnB0bCBuZWVkcyB1bndpbmQgc3VwcG9ydCBpbiBnY2MsIHdoaWNoIGNhbid0IGJlIGJ1aWx0IHdpdGhvdXQgZ2xpYmMuCitERVBFTkRTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYy1pbml0aWFsIGxpYmdjYy1pbml0aWFsIGxpbnV4LWxpYmMtaGVhZGVycyB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1saWJjLWluaXRpYWwiCisjIG5wdGwgbmVlZHMgbGliZ2NjIGJ1dCBkbG9wZW5zIGl0LCBzbyBvdXIgc2hsaWJzIGNvZGUgZG9lc24ndCBkZXRlY3QgdGhpcworI1JERVBFTkRTXyR7UE59ICs9ICIke0BbJycsJ2xpYmdjYyddWyducHRsJyBpbiAnJHtHTElCQ19BRERPTlN9J119IgorUFJPVklERVMgPSAidmlydHVhbC9saWJjIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWxpYmMtZm9yLWdjYyIKK1BST1ZJREVTICs9ICJ2aXJ0dWFsL2xpYmludGwgdmlydHVhbC9saWJpY29udiIKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIHN5c3RlbWQKK3JlcXVpcmUgZ2xpYmMtb3B0aW9ucy5pbmMKKworIyBUaGUgbWFpbiBwdXJwb3NlIG9mIHNldHRpbmcgdGhpcyB2YXJpYWJsZSBpcyB0byBwcmV2ZW50IHVzZXJzIGZyb20gYWNjaWRlbnRseQorIyBvdmVycmlkaW5nIERJU1RST19GRUFUUlVFUywgY2F1c2luZyBvYnNjdXJlIGJ1aWxkIGZhaWx1cmVzIGJlY2F1c2Ugb2YgbGFjaworIyBvZiBsaWJjIGZ1bmN0aW9ucy4KK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICIke0RJU1RST19GRUFUVVJFU19MSUJDfSIKKworTEVBRF9TT05BTUUgPSAibGliYy5zbyIKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gIiBcCisgIGFjX2N2X3BhdGhfQkFTSF9TSEVMTD0ke2Jhc2VfYmluZGlyfS9iYXNoIFwKKyAgbGliY19jdl9zbGliZGlyPSR7YmFzZV9saWJkaXJ9IFwKKyAgbGliY19jdl9yb290c2JpbmRpcj0ke2Jhc2Vfc2JpbmRpcn0gXAorICBsaWJjX2N2X2xvY2FsZWRpcj0ke2xvY2FsZWRpcn0gXAorICBsaWJjX2N2X3NzcD1ubyBcCisiCisKK0dMSUJDX0VYVFJBX09FQ09ORiA/PSAiIgorR0xJQkNfRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZXNkayA9ICIiCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCisjIFRoaXMgbmVlZHMgdG8gbWF0Y2ggd2l0aCBnbGliYy1jb2xsYXRlcmFsLmluYywgb3RoZXJ3aXNlIGdsaWJjLXNjcmlwdHMgYW5kIGdsaWJjLWxvY2FsZQorIyB3aWxsIGZhaWwgdG8gZmluZCBtYWluIGdsaWJjLCBmb3IgZGV0YWlscyBzZWUKKyMgaHR0cDovL2xpc3RzLm9wZW5lbWJlZGRlZC5vcmcvcGlwZXJtYWlsL29wZW5lbWJlZGRlZC1jb3JlLzIwMTUtSmFudWFyeS8xMDA2NzkuaHRtbAorQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKKyMgZ2xpYmMgdXNlcyBQQVJBTExFTE1GTEFHUyB2YXJpYWJsZSB0byBwYXNzIHBhcmFsbGVsIGJ1aWxkIGluZm8gc28gdHJhbnNmZXIKKyMgUEFSQUxMRUxfTUFLRSBpbnRvIFBBUkFMTEVMTUZMQUdTIGFuZCBlbXB0eSBvdXQgUEFSQUxMRUxfTUFLRQorRUdMSUJDUEFSQUxMRUxJU00gOj0gIlBBUkFMTEVMTUZMQUdTPSIke1BBUkFMTEVMX01BS0V9IiIKK0VYVFJBX09FTUFLRVt2YXJkZXBzZXhjbHVkZV0gKz0gIkVHTElCQ1BBUkFMTEVMSVNNIgorRVhUUkFfT0VNQUtFICs9ICIke0VHTElCQ1BBUkFMTEVMSVNNfSIKK1BBUkFMTEVMX01BS0UgPSAiIgorCisjIGdsaWJjIG1ha2Utc3lzY2FsbHMuc2ggaGFzIGEgbnVtYmVyIG9mIGlzc3VlcyB3aXRoIC9iaW4vZGFzaCBhbmQKKyMgaXQncyBvdXRwdXQgd2hpY2ggbWFrZSBjYWxscyB2aWEgdGhlIFNIRUxMIGFsc28gaGFzIGlzc3Vlcywgc28KKyMgZW5zdXJlIG1ha2UgdXNlcyAvYmluL2Jhc2gKK0VYVFJBX09FTUFLRSArPSAiU0hFTEw9L2Jpbi9iYXNoIgorCitPRV9GRUFUVVJFUyA9ICIke0BmZWF0dXJlc190b19nbGliY19zZXR0aW5ncyhkKX0iCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlzZWQgLWUgInMjQEJBU0hAIy9iaW4vc2gjIiAtaSAke1N9L2VsZi9sZGQuYmFzaC5pbgorCWVjaG8gJyR7T0VfRkVBVFVSRVN9JyA+ICR7Qn0vb3B0aW9uLWdyb3Vwcy5jb25maWcKK30KKworZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKKwl5ZXMgJycgfCBvZV9ydW5tYWtlIGNvbmZpZworCisJIyBSZW1vdmUgcXVvdGF0aW9uIG1hcmtzIGZyb20gT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF8qLiBUaGlzIHdpbGwKKwkjIGF2b2lkIGluc3RhbGwgZXJyb3IuCisJc2VkIC1pICdzL15PUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX1woLipcKT0iXCguKlwpIiQvT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9cMT1cMi8nIG9wdGlvbi1ncm91cHMuY29uZmlnCit9CisKK0dMSUJDX0FERE9OUyA/PSAibnB0bCxsaWJpZG4iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDEtbmF0aXZlc2RrLWdsaWJjLUxvb2stZm9yLWhvc3Qtc3lzdGVtLWxkLnNvLmNhY2hlLWFzLS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMS1uYXRpdmVzZGstZ2xpYmMtTG9vay1mb3ItaG9zdC1zeXN0ZW0tbGQuc28uY2FjaGUtYXMtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNjYzNDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDEtbmF0aXZlc2RrLWdsaWJjLUxvb2stZm9yLWhvc3Qtc3lzdGVtLWxkLnNvLmNhY2hlLWFzLS5wYXRjaApAQCAtMCwwICsxLDcwIEBACitGcm9tIDA4NzZmZWExYjViMjZkYTg0ZjI5ODcxNGEyZTIzYmE2OTY2MDdkYmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMTo0ODoyNCArMDAwMAorU3ViamVjdDogW1BBVENIIDAxLzI3XSBuYXRpdmVzZGstZ2xpYmM6IExvb2sgZm9yIGhvc3Qgc3lzdGVtIGxkLnNvLmNhY2hlIGFzCisgd2VsbAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitUaGUgZGVmYXVsdCBsaWIgc2VhcmNoIHBhdGggb3JkZXIgaXM6CisKKyAgMSkgTERfTElCUkFSWV9QQVRICisgIDIpIFJQQVRIIGZyb20gdGhlIGJpbmFyeQorICAzKSBsZC5zby5jYWNoZQorICA0KSBkZWZhdWx0IHNlYXJjaCBwYXRocyBlbWJlZGRlZCBpbiB0aGUgbGlua2VyCisKK0ZvciBuYXRpdmVzZGsgYmluYXJpZXMgd2hpY2ggYXJlIGJlaW5nIHVzZWQgYWxvbmdzaWRlIGJpbmFyaWVzIG9uIGEgaG9zdCBzeXN0ZW0sIHdlCituZWVkIHRoZSBzZWFyY2ggcGF0aHMgdG8gZmlyc3RseSBzZWFyY2ggdGhlIHNoaXBwZWQgbmF0aXZlc2RrIGxpYnMgYnV0IHRoZW4gYWxzbworY292ZXIgdGhlIGhvc3Qgc3lzdGVtLiBGb3IgZXhhbXBsZSB3ZSB3YW50IHRoZSBob3N0IHN5c3RlbSdzIGxpYkdMIGFuZCB0aGlzIG1heSBiZQoraW4gYSBub24tc3RhbmRhcmQgbG9jYXRpb24gbGlrZSAvdXNyL2xpYi9tZXNhLiBUaGUgb25seSBwbGFjZSB0aGUgbG9jYXRpb24gaXMga25vdworYWJvdXQgaXMgaW4gdGhlIGxkLnNvLmNhY2hlIG9mIHRoZSBob3N0IHN5c3RlbS4KKworU2luY2UgbmF0aXZlc2RrIGhhcyBhIHNpbXBsZSBzdHJ1Y3R1cmUgYW5kIGRvZXNuJ3QgbmVlZCB0byB1c2UgYSBjYWNoZSBpdHNlbGYsIHdlCityZXB1cnBvc2UgdGhlIGNhY2hlIGZvciB1c2UgYXMgYSBsYXN0IHJlc29ydCBpbiBmaW5kaW5nIGhvc3Qgc3lzdGVtIGJpbmFyaWVzLiBUaGlzCittZWFucyB3ZSBuZWVkIHRvIHN3aXRjaCB0aGUgb3JkZXIgb2YgMyBhbmQgNCBhYm92ZSB0byBtYWtlIHRoaXMgd29yayBlZmZlY3RpdmVseS4KKworUlAgMTQvMTAvMjAxMAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZWxmL2RsLWxvYWQuYyB8IDE3ICsrKysrKysrLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2VsZi9kbC1sb2FkLmMgYi9lbGYvZGwtbG9hZC5jCitpbmRleCAwYzA1MmU0Li5mNDUwODVhIDEwMDY0NAorLS0tIGEvZWxmL2RsLWxvYWQuYworKysrIGIvZWxmL2RsLWxvYWQuYworQEAgLTIwNDAsNyArMjA0MCwxNCBAQCBfZGxfbWFwX29iamVjdCAoc3RydWN0IGxpbmtfbWFwICpsb2FkZXIsIGNvbnN0IGNoYXIgKm5hbWUsCisgCWZkID0gb3Blbl9wYXRoIChuYW1lLCBuYW1lbGVuLCBtb2RlLAorIAkJCSZsb2FkZXItPmxfcnVucGF0aF9kaXJzLCAmcmVhbG5hbWUsICZmYiwgbG9hZGVyLAorIAkJCUxBX1NFUl9SVU5QQVRILCAmZm91bmRfb3RoZXJfY2xhc3MpOworLQorKyAgICAgIC8qIHRyeSB0aGUgZGVmYXVsdCBwYXRoLiAgKi8KKysgICAgICBpZiAoZmQgPT0gLTEKKysJICAmJiAoKGwgPSBsb2FkZXIgPzogR0woZGxfbnMpW25zaWRdLl9uc19sb2FkZWQpID09IE5VTEwKKysJICAgfHwgX19idWlsdGluX2V4cGVjdCAoIShsLT5sX2ZsYWdzXzEgJiBERl8xX05PREVGTElCKSwgMSkpCisrCSAmJiBydGxkX3NlYXJjaF9kaXJzLmRpcnMgIT0gKHZvaWQgKikgLTEpCisrCWZkID0gb3Blbl9wYXRoIChuYW1lLCBuYW1lbGVuLCBtb2RlICYgX19SVExEX1NFQ1VSRSwgJnJ0bGRfc2VhcmNoX2RpcnMsCisrCQkJJnJlYWxuYW1lLCAmZmIsIGwsIExBX1NFUl9ERUZBVUxULCAmZm91bmRfb3RoZXJfY2xhc3MpOworKyAgICAgIC8qIEZpbmFsbHkgdHJ5IGxkLnNvLmNhY2hlICovCisgI2lmZGVmIFVTRV9MRENPTkZJRworICAgICAgIGlmIChmZCA9PSAtMQorIAkgICYmIChfX2dsaWJjX2xpa2VseSAoKG1vZGUgJiBfX1JUTERfU0VDVVJFKSA9PSAwKQorQEAgLTIwOTksMTQgKzIxMDYsNiBAQCBfZGxfbWFwX29iamVjdCAoc3RydWN0IGxpbmtfbWFwICpsb2FkZXIsIGNvbnN0IGNoYXIgKm5hbWUsCisgCX0KKyAjZW5kaWYKKyAKKy0gICAgICAvKiBGaW5hbGx5LCB0cnkgdGhlIGRlZmF1bHQgcGF0aC4gICovCistICAgICAgaWYgKGZkID09IC0xCistCSAgJiYgKChsID0gbG9hZGVyID86IEdMKGRsX25zKVtuc2lkXS5fbnNfbG9hZGVkKSA9PSBOVUxMCistCSAgICAgIHx8IF9fZ2xpYmNfbGlrZWx5ICghKGwtPmxfZmxhZ3NfMSAmIERGXzFfTk9ERUZMSUIpKSkKKy0JICAmJiBydGxkX3NlYXJjaF9kaXJzLmRpcnMgIT0gKHZvaWQgKikgLTEpCistCWZkID0gb3Blbl9wYXRoIChuYW1lLCBuYW1lbGVuLCBtb2RlLCAmcnRsZF9zZWFyY2hfZGlycywKKy0JCQkmcmVhbG5hbWUsICZmYiwgbCwgTEFfU0VSX0RFRkFVTFQsICZmb3VuZF9vdGhlcl9jbGFzcyk7CistCisgICAgICAgLyogQWRkIGFub3RoZXIgbmV3bGluZSB3aGVuIHdlIGFyZSB0cmFjaW5nIHRoZSBsaWJyYXJ5IGxvYWRpbmcuICAqLworICAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfTElCUykpCisgCV9kbF9kZWJ1Z19wcmludGYgKCJcbiIpOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDItbmF0aXZlc2RrLWdsaWJjLUZpeC1idWZmZXItb3ZlcnJ1bi13aXRoLWEtcmVsb2NhdGVkLS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMi1uYXRpdmVzZGstZ2xpYmMtRml4LWJ1ZmZlci1vdmVycnVuLXdpdGgtYS1yZWxvY2F0ZWQtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NjhmYzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDItbmF0aXZlc2RrLWdsaWJjLUZpeC1idWZmZXItb3ZlcnJ1bi13aXRoLWEtcmVsb2NhdGVkLS5wYXRjaApAQCAtMCwwICsxLDUwIEBACitGcm9tIDA4NmI2NWQ5YWFjZmZjNDdmY2Q4ZGY2ODgxOGE0NzZhNWFlNzZmYTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMTo1MDowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDAyLzI3XSBuYXRpdmVzZGstZ2xpYmM6IEZpeCBidWZmZXIgb3ZlcnJ1biB3aXRoIGEgcmVsb2NhdGVkCisgU0RLCisKK1doZW4gbGQtbGludXgtKi5zby4yIGlzIHJlbG9jYXRlZCB0byBhIHBhdGggdGhhdCBpcyBsb25nZXIgdGhhbiB0aGUKK29yaWdpbmFsIGZpeGVkIGxvY2F0aW9uLCB0aGUgZHluYW1pYyBsb2FkZXIgd2lsbCBjcmFzaCBpbiBvcGVuX3BhdGgKK2JlY2F1c2UgaXQgaW1wbGljaXRseSBhc3N1bWVzIHRoYXQgbWF4X2Rpcm5hbWVsZW4gaXMgYSBmaXhlZCBzaXplIHRoYXQKK25ldmVyIGNoYW5nZXMuCisKK1RoZSBhbGxvY2F0ZWQgYnVmZmVyIHdpbGwgbm90IGJlIGxhcmdlIGVub3VnaCB0byBjb250YWluIHRoZSBkaXJlY3RvcnkKK3BhdGggc3RyaW5nIHdoaWNoIGlzIGxhcmdlciB0aGFuIHRoZSBmaXhlZCBsb2NhdGlvbiBwcm92aWRlZCBhdCBidWlsZAordGltZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBTREsgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZWxmL2RsLWxvYWQuYyB8IDEyICsrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9lbGYvZGwtbG9hZC5jIGIvZWxmL2RsLWxvYWQuYworaW5kZXggZjQ1MDg1YS4uZjFlYjVlZCAxMDA2NDQKKy0tLSBhL2VsZi9kbC1sb2FkLmMKKysrKyBiL2VsZi9kbC1sb2FkLmMKK0BAIC0xNzY1LDcgKzE3NjUsMTkgQEAgb3Blbl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwgaW50IG1vZGUsCisgICAgICAgIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUgd2hlbiBydGxkIGlzIHJ1biBkaXJlY3RseS4gICovCisgICAgIHJldHVybiAtMTsKKyAKKysgIGRvCisrICAgIHsKKysgICAgICBzdHJ1Y3Qgcl9zZWFyY2hfcGF0aF9lbGVtICp0aGlzX2RpciA9ICpkaXJzOworKyAgICAgIGlmICh0aGlzX2Rpci0+ZGlybmFtZWxlbiA+IG1heF9kaXJuYW1lbGVuKQorKwl7CisrCSAgbWF4X2Rpcm5hbWVsZW4gPSB0aGlzX2Rpci0+ZGlybmFtZWxlbjsKKysJfQorKyAgICB9CisrICB3aGlsZSAoKisrZGlycyAhPSBOVUxMKTsKKysKKyAgIGJ1ZiA9IGFsbG9jYSAobWF4X2Rpcm5hbWVsZW4gKyBtYXhfY2Fwc3RybGVuICsgbmFtZWxlbik7CisrCisrICBkaXJzID0gc3BzLT5kaXJzOworICAgZG8KKyAgICAgeworICAgICAgIHN0cnVjdCByX3NlYXJjaF9wYXRoX2VsZW0gKnRoaXNfZGlyID0gKmRpcnM7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMy1uYXRpdmVzZGstZ2xpYmMtUmFpc2UtdGhlLXNpemUtb2YtYXJyYXlzLWNvbnRhaW5pbmctLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAzLW5hdGl2ZXNkay1nbGliYy1SYWlzZS10aGUtc2l6ZS1vZi1hcnJheXMtY29udGFpbmluZy0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY4MWE2NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMy1uYXRpdmVzZGstZ2xpYmMtUmFpc2UtdGhlLXNpemUtb2YtYXJyYXlzLWNvbnRhaW5pbmctLnBhdGNoCkBAIC0wLDAgKzEsMTI2IEBACitGcm9tIGZkNTk1YTVlYzg4NWJjYjRjMTQ0MTdkYWEyMWMyZTYxYzViNzJlNDIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMTo1MTozOCArMDAwMAorU3ViamVjdDogW1BBVENIIDAzLzI3XSBuYXRpdmVzZGstZ2xpYmM6IFJhaXNlIHRoZSBzaXplIG9mIGFycmF5cyBjb250YWluaW5nIGRsCisgcGF0aHMKKworVGhpcyBwYXRjaCBwdXRzIHRoZSBkeW5hbWljIGxvYWRlciBwYXRoIGluIHRoZSBiaW5hcmllcywgU1lTVEVNX0RJUlMgc3RyaW5ncworYW5kIGxlbmd0aHMgYXMgd2VsbCBhcyBsZC5zby5jYWNoZSBwYXRoIGluIHRoZSBkeW5hbWljIGxvYWRlciB0byBzcGVjaWZpYworc2VjdGlvbnMgaW4gbWVtb3J5LiBUaGUgc2VjdGlvbnMgdGhhdCBjb250YWluIHBhdGhzIGhhdmUgYmVlbiBhbGxvY2F0ZWQgYSA0MDk2CitieXRlIHNlY3Rpb24sIHdoaWNoIGlzIHRoZSBtYXhpbXVtIHBhdGggbGVuZ3RoIGluIGxpbnV4LiBUaGlzIHdpbGwgYWxsb3cgdGhlCityZWxvY2F0aW5nIHNjcmlwdCB0byBwYXJzZSB0aGUgRUxGIGJpbmFyeSwgZGV0ZWN0IHRoZSBzZWN0aW9uIGFuZCBlYXNpbHkgcmVwbGFjZQordGhlIHN0cmluZ3MgaW4gYSBjZXJ0YWluIHBhdGguCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbU0RLIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBMYXVyZW50aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZWxmL2RsLWNhY2hlLmMgICAgICAgICAgICAgfCA0ICsrKysKKyBlbGYvZGwtbG9hZC5jICAgICAgICAgICAgICB8IDQgKystLQorIGVsZi9pbnRlcnAuYyAgICAgICAgICAgICAgIHwgMiArLQorIGVsZi9sZGNvbmZpZy5jICAgICAgICAgICAgIHwgMyArKysKKyBlbGYvcnRsZC5jICAgICAgICAgICAgICAgICB8IDUgKysrLS0KKyBzeXNkZXBzL2dlbmVyaWMvZGwtY2FjaGUuaCB8IDQgLS0tLQorIDYgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2VsZi9kbC1jYWNoZS5jIGIvZWxmL2RsLWNhY2hlLmMKK2luZGV4IGRlYzQ5YmMuLjg2MmYxZDggMTAwNjQ0CistLS0gYS9lbGYvZGwtY2FjaGUuYworKysrIGIvZWxmL2RsLWNhY2hlLmMKK0BAIC0xMzIsNiArMTMyLDEwIEBAIGRvCQkJCQkJCQkJICAgICAgXAorIHdoaWxlICgwKQorIAorIAorK2NvbnN0IGNoYXIgTERfU09fQ0FDSEVbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIubGRzb2NhY2hlIikpKSA9CisrCQlTWVNDT05GRElSICIvbGQuc28uY2FjaGUiOworKworKworIGludAorIGludGVybmFsX2Z1bmN0aW9uCisgX2RsX2NhY2hlX2xpYmNtcCAoY29uc3QgY2hhciAqcDEsIGNvbnN0IGNoYXIgKnAyKQorZGlmZiAtLWdpdCBhL2VsZi9kbC1sb2FkLmMgYi9lbGYvZGwtbG9hZC5jCitpbmRleCBmMWViNWVkLi5mNjY0ZjUwIDEwMDY0NAorLS0tIGEvZWxmL2RsLWxvYWQuYworKysrIGIvZWxmL2RsLWxvYWQuYworQEAgLTEwNCw4ICsxMDQsOCBAQCBzdGF0aWMgc2l6ZV90IG1heF9jYXBzdHJsZW4gYXR0cmlidXRlX3JlbHJvOworIC8qIEdldCB0aGUgZ2VuZXJhdGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0cnVzdGVkIGRpcmVjdG9yaWVzLiAgKi8KKyAjaW5jbHVkZSAidHJ1c3RlZC1kaXJzLmgiCisgCistc3RhdGljIGNvbnN0IGNoYXIgc3lzdGVtX2RpcnNbXSA9IFNZU1RFTV9ESVJTOworLXN0YXRpYyBjb25zdCBzaXplX3Qgc3lzdGVtX2RpcnNfbGVuW10gPQorK3N0YXRpYyBjb25zdCBjaGFyIHN5c3RlbV9kaXJzWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLnN5c2RpcnMiKSkpID0gU1lTVEVNX0RJUlM7Cisrdm9sYXRpbGUgc3RhdGljIGNvbnN0IHNpemVfdCBzeXN0ZW1fZGlyc19sZW5bXSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5zeXNkaXJzbGVuIikpKSA9CisgeworICAgU1lTVEVNX0RJUlNfTEVOCisgfTsKK2RpZmYgLS1naXQgYS9lbGYvaW50ZXJwLmMgYi9lbGYvaW50ZXJwLmMKK2luZGV4IDQyMmVhOTVlLi42ZDYxYTM2IDEwMDY0NAorLS0tIGEvZWxmL2ludGVycC5jCisrKysgYi9lbGYvaW50ZXJwLmMKK0BAIC0xOCw1ICsxOCw1IEBACisgCisgI2luY2x1ZGUgPHJ1bnRpbWUtbGlua2VyLmg+CisgCistY29uc3QgY2hhciBfX2ludm9rZV9keW5hbWljX2xpbmtlcl9fW10gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuaW50ZXJwIikpKQorK2NvbnN0IGNoYXIgX19pbnZva2VfZHluYW1pY19saW5rZXJfX1s0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5pbnRlcnAiKSkpCisgICA9IFJVTlRJTUVfTElOS0VSOworZGlmZiAtLWdpdCBhL2VsZi9sZGNvbmZpZy5jIGIvZWxmL2xkY29uZmlnLmMKK2luZGV4IGY1NGVjMjIuLjBlNzhhODMgMTAwNjQ0CistLS0gYS9lbGYvbGRjb25maWcuYworKysrIGIvZWxmL2xkY29uZmlnLmMKK0BAIC0xNjcsNiArMTY3LDkgQEAgc3RhdGljIHN0cnVjdCBhcmdwIGFyZ3AgPQorICAgb3B0aW9ucywgcGFyc2Vfb3B0LCBOVUxMLCBkb2MsIE5VTEwsIG1vcmVfaGVscCwgTlVMTAorIH07CisgCisrCisrZXh0ZXJuIGNvbnN0IGNoYXIgTERfU09fQ0FDSEVbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIubGRzb2NhY2hlIikpKTsKKysKKyAvKiBDaGVjayBpZiBzdHJpbmcgY29ycmVzcG9uZHMgdG8gYW4gaW1wb3J0YW50IGhhcmR3YXJlIGNhcGFiaWxpdHkgb3IKKyAgICBhIHBsYXRmb3JtLiAgKi8KKyBzdGF0aWMgaW50CitkaWZmIC0tZ2l0IGEvZWxmL3J0bGQuYyBiL2VsZi9ydGxkLmMKK2luZGV4IDY5ODczYzIuLjZkM2FkZDcgMTAwNjQ0CistLS0gYS9lbGYvcnRsZC5jCisrKysgYi9lbGYvcnRsZC5jCitAQCAtOTksNiArOTksNyBAQCB1aW50cHRyX3QgX19wb2ludGVyX2Noa19ndWFyZF9sb2NhbAorIHN0cm9uZ19hbGlhcyAoX19wb2ludGVyX2Noa19ndWFyZF9sb2NhbCwgX19wb2ludGVyX2Noa19ndWFyZCkKKyAjZW5kaWYKKyAKKytleHRlcm4gY29uc3QgY2hhciBMRF9TT19DQUNIRVs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5sZHNvY2FjaGUiKSkpOworIAorIC8qIExpc3Qgb2YgYXVkaXRpbmcgRFNPcy4gICovCisgc3RhdGljIHN0cnVjdCBhdWRpdF9saXN0CitAQCAtODc3LDEyICs4NzgsMTIgQEAgb2YgdGhpcyBoZWxwZXIgcHJvZ3JhbTsgY2hhbmNlcyBhcmUgeW91IGRpZCBub3QgaW50ZW5kIHRvIHJ1biB0aGlzIHByb2dyYW0uXG5cCisgICAtLWxpc3QgICAgICAgICAgICAgICAgbGlzdCBhbGwgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhleSBhcmUgcmVzb2x2ZWRcblwKKyAgIC0tdmVyaWZ5ICAgICAgICAgICAgICB2ZXJpZnkgdGhhdCBnaXZlbiBvYmplY3QgcmVhbGx5IGlzIGEgZHluYW1pY2FsbHkgbGlua2VkXG5cCisgCQkJb2JqZWN0IHdlIGNhbiBoYW5kbGVcblwKKy0gIC0taW5oaWJpdC1jYWNoZSAgICAgICBEbyBub3QgdXNlICIgTERfU09fQ0FDSEUgIlxuXAorKyAgLS1pbmhpYml0LWNhY2hlICAgICAgIERvIG5vdCB1c2UgJXNcblwKKyAgIC0tbGlicmFyeS1wYXRoIFBBVEggICB1c2UgZ2l2ZW4gUEFUSCBpbnN0ZWFkIG9mIGNvbnRlbnQgb2YgdGhlIGVudmlyb25tZW50XG5cCisgCQkJdmFyaWFibGUgTERfTElCUkFSWV9QQVRIXG5cCisgICAtLWluaGliaXQtcnBhdGggTElTVCAgaWdub3JlIFJVTlBBVEggYW5kIFJQQVRIIGluZm9ybWF0aW9uIGluIG9iamVjdCBuYW1lc1xuXAorIAkJCWluIExJU1RcblwKKy0gIC0tYXVkaXQgTElTVCAgICAgICAgICB1c2Ugb2JqZWN0cyBuYW1lZCBpbiBMSVNUIGFzIGF1ZGl0b3JzXG4iKTsKKysgIC0tYXVkaXQgTElTVCAgICAgICAgICB1c2Ugb2JqZWN0cyBuYW1lZCBpbiBMSVNUIGFzIGF1ZGl0b3JzXG4iLCBMRF9TT19DQUNIRSk7CisgCisgICAgICAgKytfZGxfc2tpcF9hcmdzOworICAgICAgIC0tX2RsX2FyZ2M7CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9nZW5lcmljL2RsLWNhY2hlLmggYi9zeXNkZXBzL2dlbmVyaWMvZGwtY2FjaGUuaAoraW5kZXggNGI0OTg2OS4uMTgwMGQwMyAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvZ2VuZXJpYy9kbC1jYWNoZS5oCisrKysgYi9zeXNkZXBzL2dlbmVyaWMvZGwtY2FjaGUuaAorQEAgLTI3LDEwICsyNyw2IEBACisgICAoKGZsYWdzKSA9PSAxIHx8IChmbGFncykgPT0gX0RMX0NBQ0hFX0RFRkFVTFRfSUQpCisgI2VuZGlmCisgCistI2lmbmRlZiBMRF9TT19DQUNIRQorLSMgZGVmaW5lIExEX1NPX0NBQ0hFIFNZU0NPTkZESVIgIi9sZC5zby5jYWNoZSIKKy0jZW5kaWYKKy0KKyAjaWZuZGVmIGFkZF9zeXN0ZW1fZGlyCisgIyBkZWZpbmUgYWRkX3N5c3RlbV9kaXIoZGlyKSBhZGRfZGlyIChkaXIpCisgI2VuZGlmCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNC1CYWNrcG9ydC1odHRwcy1zb3VyY2V3YXJlLm9yZy1tbC1saWJjLXBvcnRzLTIwMDctMTItLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA0LUJhY2twb3J0LWh0dHBzLXNvdXJjZXdhcmUub3JnLW1sLWxpYmMtcG9ydHMtMjAwNy0xMi0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ4NzUwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNC1CYWNrcG9ydC1odHRwcy1zb3VyY2V3YXJlLm9yZy1tbC1saWJjLXBvcnRzLTIwMDctMTItLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gMjU2MGI1NjRiNTY3NGJmMjk5MGU1NjA3ZjYzNDJjMTY0N2E1ZGM0ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDggTWFyIDIwMTUgMDQ6MDE6MDEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwNC8yN10gQmFja3BvcnQKKyBodHRwczovL3NvdXJjZXdhcmUub3JnL21sL2xpYmMtcG9ydHMvMjAwNy0xMi9tc2cwMDAwMC5odG1sCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisyMDA3LTEyLTAzICBLcmlzdGlhbiBWYW4gRGVyIFZsaWV0ICA8dmFuZGVyc0BsaXF3eWQuY29tPgorCisgICAgICAgICogYml0cy9zdGRpby1sb2NrLmggKF9JT19hY3F1aXJlX2xvY2tfY2xlYXJfZmxhZ3MyKTogRGVmaW5lCisKK1NpZ25lZC1vZmYtYnk6IEtyaXN0aWFuIFZhbiBEZXIgVmxpZXQgPHZhbmRlcnNAbGlxd3lkLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBiaXRzL3N0ZGlvLWxvY2suaCB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9iaXRzL3N0ZGlvLWxvY2suaCBiL2JpdHMvc3RkaW8tbG9jay5oCitpbmRleCAwYzViYjY1Li42NjMwNGE2IDEwMDY0NAorLS0tIGEvYml0cy9zdGRpby1sb2NrLmgKKysrKyBiL2JpdHMvc3RkaW8tbG9jay5oCitAQCAtNDksNiArNDksOCBAQCBfX2xpYmNfbG9ja19kZWZpbmVfcmVjdXJzaXZlICh0eXBlZGVmLCBfSU9fbG9ja190KQorICAgX0lPX2NsZWFudXBfcmVnaW9uX3N0YXJ0ICgodm9pZCAoKikgKHZvaWQgKikpIF9JT19mdW5sb2NrZmlsZSwgKF9mcCkpOyAgICAgIFwKKyAgIF9JT19mbG9ja2ZpbGUgKF9mcCkKKyAKKysjIGRlZmluZSBfSU9fYWNxdWlyZV9sb2NrX2NsZWFyX2ZsYWdzMihfZnApIF9JT19hY3F1aXJlX2xvY2sgKF9mcCkKKysKKyAjIGRlZmluZSBfSU9fcmVsZWFzZV9sb2NrKF9mcCkgXAorICAgX0lPX2Z1bmxvY2tmaWxlIChfZnApOwkJCQkJCSAgICAgIFwKKyAgIF9JT19jbGVhbnVwX3JlZ2lvbl9lbmQgKDApCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNS1mc2wtZTUwMC1lNTUwMC1lNjUwMC02MDNlLWZzcXJ0LWltcGxlbWVudGF0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA1LWZzbC1lNTAwLWU1NTAwLWU2NTAwLTYwM2UtZnNxcnQtaW1wbGVtZW50YXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzZjg1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNS1mc2wtZTUwMC1lNTUwMC1lNjUwMC02MDNlLWZzcXJ0LWltcGxlbWVudGF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMTU4NCBAQAorRnJvbSBhYTBjZDgyODkyZjMyZTU4NjAyMTQzYzY5N2VmMDUyNDY5NmE2NDI4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6MDE6NTAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwNS8yN10gZnNsIGU1MDAvZTU1MDAvZTY1MDAvNjAzZSBmc3FydCBpbXBsZW1lbnRhdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEVkbWFyIFdpZW5za29za2kgPGVkbWFyQGZyZWVzY2FsZS5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYyAgICAgICAgfCAxMzQgKysrKysrKysrKysrKysrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMgICAgICAgfCAxMDEgKysrKysrKysrKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYyAgICAgIHwgMTM0ICsrKysrKysrKysrKysrKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMgICAgIHwgMTAxICsrKysrKysrKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYyAgICAgICB8IDEzNCArKysrKysrKysrKysrKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMgICAgICB8IDEwMSArKysrKysrKysrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMgICAgICAgfCAxMzQgKysrKysrKysrKysrKysrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jICAgICAgfCAxMDEgKysrKysrKysrKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jICAgICAgIHwgMTM0ICsrKysrKysrKysrKysrKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYyAgICAgIHwgMTAxICsrKysrKysrKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYyAgICAgICB8IDEzNCArKysrKysrKysrKysrKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMgICAgICB8IDEwMSArKysrKysrKysrKysrKysrCisgLi4uL3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvSW1wbGllcyAgfCAgIDEgKworIC4uLi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lMzAwYzMvZnB1L0ltcGxpZXMgICAgIHwgICAyICsKKyAuLi4vbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9JbXBsaWVzICAgICB8ICAgMSArCisgLi4uL3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L0ltcGxpZXMgfCAgIDEgKworIC4uLi9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9JbXBsaWVzIHwgICAxICsKKyAuLi4vc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvSW1wbGllcyB8ICAgMSArCisgLi4uL3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L0ltcGxpZXMgfCAgIDEgKworIDE5IGZpbGVzIGNoYW5nZWQsIDE0MTggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9JbXBsaWVzCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2UzMDBjMy9mcHUvSW1wbGllcworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L0ltcGxpZXMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L0ltcGxpZXMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L0ltcGxpZXMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L0ltcGxpZXMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L0ltcGxpZXMKKworZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzFlNTE2ZAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYworQEAgLTAsMCArMSwxMzQgQEAKKysvKiBEb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHNxdWFyZSByb290LgorKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8bWF0aF9wcml2YXRlLmg+CisrI2luY2x1ZGUgPGZlbnZfbGliYy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfbmFuID0gey53b3JkID0gMHg3ZmMwMDAwMCB9OworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9pbmYgPSB7LndvcmQgPSAweDdmODAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGZsb2F0IHR3bzEwOCA9IDMuMjQ1MTg1NTM2NTg0MjY3MjY5ZSszMjsKKytzdGF0aWMgY29uc3QgZmxvYXQgdHdvbTU0ID0gNS41NTExMTUxMjMxMjU3ODI3MDJlLTE3OworK3N0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworKworKy8qIFRoZSBtZXRob2QgaXMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9ucyBpbjoKKysKKysgICBfVGhlIEhhbmRib29rIG9mIEZsb2F0aW5nLVBvaW50ZXIgQXJpdGhtZXRpY18gYnkgTXVsbGVyIGV0IGFsLiwgY2hhcHRlciA1OworKyAgIF9JQS02NCBhbmQgRWxlbWVudGFyeSBGdW5jdGlvbnM6IFNwZWVkIGFuZCBQcmVjaXNpb25fIGJ5IE1hcmtzdGVpbiwgY2hhcHRlciA5CisrCisrICAgV2UgZmluZCB0aGUgYWN0dWFsIHNxdWFyZSByb290IGFuZCBoYWxmIG9mIGl0cyByZWNpcHJvY2FsCisrICAgc2ltdWx0YW5lb3VzbHkuICAqLworKworKyNpZmRlZiBfX1NURENfXworK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKysjZWxzZQorK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChiKQorKyAgICAgZG91YmxlIGI7CisrI2VuZGlmCisreworKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKysgICAgeworKyAgICAgIGRvdWJsZSB5LCBnLCBoLCBkLCByOworKyAgICAgIGllZWVfZG91YmxlX3NoYXBlX3R5cGUgdTsKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiAhPSBhX2luZi52YWx1ZSwgMSkpCisrICAgICAgICB7CisrICAgICAgICAgIGZlbnZfdCBmZTsKKysKKysgICAgICAgICAgZmUgPSBmZWdldGVudl9yZWdpc3RlciAoKTsKKysKKysgICAgICAgICAgdS52YWx1ZSA9IGI7CisrCisrICAgICAgICAgIHJlbGF4X2ZlbnZfc3RhdGUgKCk7CisrCisrICAgICAgICAgIF9fYXNtX18gKCJmcnNxcnRlICVbZXN0aW1hdGVdLCAlW3hdXG4iCisrICAgICAgICAgICAgICAgICAgIDogW2VzdGltYXRlXSAiPWYiICh5KSA6IFt4XSAiZiIgKGIpKTsKKysKKysgICAgICAgICAgLyogRm9sbG93aW5nIE11bGxlciBldCBhbCwgcGFnZSAxNjgsIGVxdWF0aW9uIDUuMjAuCisrCisrICAgICAgICAgICAgIGggZ29lcyB0byAxLygyKnNxcnQoYikpCisrICAgICAgICAgICAgIGcgZ29lcyB0byBzcXJ0KGIpLgorKworKyAgICAgICAgICAgICBXZSBuZWVkIHRocmVlIGl0ZXJhdGlvbnMgdG8gZ2V0IHdpdGhpbiAxdWxwLiAgKi8KKysKKysgICAgICAgICAgLyogSW5kaWNhdGUgdGhhdCB0aGVzZSBjYW4gYmUgcGVyZm9ybWVkIHByaW9yIHRvIHRoZSBicmFuY2guICBHQ0MKKysgICAgICAgICAgICAgaW5zaXN0cyBvbiBzaW5raW5nIHRoZW0gYmVsb3cgdGhlIGJyYW5jaCwgaG93ZXZlcjsgaXQgc2VlbXMgbGlrZQorKyAgICAgICAgICAgICB0aGV5J2QgYmUgYmV0dGVyIGJlZm9yZSB0aGUgYnJhbmNoIHNvIHRoYXQgd2UgY2FuIGNvdmVyIGFueSBsYXRlbmN5CisrICAgICAgICAgICAgIGZyb20gc3RvcmluZyB0aGUgYXJndW1lbnQgYW5kIGxvYWRpbmcgaXRzIGhpZ2ggd29yZC4gIE9oIHdlbGwuICAqLworKworKyAgICAgICAgICBnID0gYiAqIHk7CisrICAgICAgICAgIGggPSAwLjUgKiB5OworKworKyAgICAgICAgICAvKiBIYW5kbGUgc21hbGwgbnVtYmVycyBieSBzY2FsaW5nLiAgKi8KKysgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1LnBhcnRzLm1zdyAmIDB4N2ZmMDAwMDApIDw9IDB4MDIwMDAwMDAsIDApKQorKyAgICAgICAgICAgIHJldHVybiBfX2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisrCisrI2RlZmluZSBGTUFERChhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX19hc21fXyAoImZtYWRkICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgICBfX3I7fSkKKysjZGVmaW5lIEZOTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9fYXNtX18gKCJmbm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICAgIF9fcjt9KQorKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICAvKiBnIGlzIG5vdyArLy0gMXVscCwgb3IgZXhhY3RseSBlcXVhbCB0bywgdGhlIHNxdWFyZSByb290IG9mIGIuICAqLworKworKyAgICAgICAgICAvKiBGaW5hbCByZWZpbmVtZW50LiAgKi8KKysgICAgICAgICAgZCA9IEZOTVNVQiAoZywgZywgYik7CisrCisrICAgICAgICAgIGZlc2V0ZW52X3JlZ2lzdGVyIChmZSk7CisrICAgICAgICAgIHJldHVybiBGTUFERCAoZCwgaCwgZyk7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKGIgPCAwKQorKyAgICB7CisrICAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBzb21lIFBvd2VyUEMzMiBwcm9jZXNzb3JzIGRvbid0IGltcGxlbWVudAorKyAgICAgICAgIEZFX0lOVkFMSURfU1FSVC4gICovCisrI2lmZGVmIEZFX0lOVkFMSURfU1FSVAorKyAgICAgIGZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSURfU1FSVCk7CisrCisrICAgICAgZmVudl91bmlvbl90IHUgPSB7IC5mZW52ID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCkgfTsKKysgICAgICBpZiAoKHUubCAmIEZFX0lOVkFMSUQpID09IDApCisrI2VuZGlmCisrCWZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSUQpOworKyAgICAgIGIgPSBhX25hbi52YWx1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZfd2FzaCAoYik7CisrfQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yNmZhMDY3CistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYworQEAgLTAsMCArMSwxMDEgQEAKKysvKiBTaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHNxdWFyZSByb290LgorKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8bWF0aF9wcml2YXRlLmg+CisrI2luY2x1ZGUgPGZlbnZfbGliYy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfbmFuID0gey53b3JkID0gMHg3ZmMwMDAwMCB9OworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9pbmYgPSB7LndvcmQgPSAweDdmODAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKysKKysvKiBUaGUgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbnMgaW46CisrCisrICAgX1RoZSBIYW5kYm9vayBvZiBGbG9hdGluZy1Qb2ludGVyIEFyaXRobWV0aWNfIGJ5IE11bGxlciBldCBhbC4sIGNoYXB0ZXIgNTsKKysgICBfSUEtNjQgYW5kIEVsZW1lbnRhcnkgRnVuY3Rpb25zOiBTcGVlZCBhbmQgUHJlY2lzaW9uXyBieSBNYXJrc3RlaW4sIGNoYXB0ZXIgOQorKworKyAgIFdlIGZpbmQgdGhlIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3QgYW5kIHVzZSB0aGF0IHRvIGNvbXB1dGUgdGhlIGFjdHVhbAorKyAgIHNxdWFyZSByb290LiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKysjZWxzZQorK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChiKQorKyAgICAgZmxvYXQgYjsKKysjZW5kaWYKKyt7CisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorKyAgICB7CisrI2RlZmluZSBGTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9fYXNtX18gKCJmbXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgIF9fcjt9KQorKyNkZWZpbmUgRk5NU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfX2FzbV9fICgiZm5tc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICBfX3I7fSkKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiAhPSBhX2luZi52YWx1ZSwgMSkpCisrICAgICAgICB7CisrICAgICAgICAgIGRvdWJsZSB5LCB4OworKyAgICAgICAgICBmZW52X3QgZmU7CisrCisrICAgICAgICAgIGZlID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCk7CisrCisrICAgICAgICAgIHJlbGF4X2ZlbnZfc3RhdGUgKCk7CisrCisrICAgICAgICAgIC8qIENvbXB1dGUgeSA9IDEuNSAqIGIgLSBiLiAgVXNlcyBmZXdlciBjb25zdGFudHMgdGhhbiB5ID0gMC41ICogYi4gICovCisrICAgICAgICAgIHkgPSBGTVNVQiAodGhyZWVoYWxmLCBiLCBiKTsKKysKKysgICAgICAgICAgLyogSW5pdGlhbCBlc3RpbWF0ZS4gICovCisrICAgICAgICAgIF9fYXNtX18gKCJmcnNxcnRlICVbeF0sICVbYl1cbiIgOiBbeF0gIj1mIiAoeCkgOiBbYl0gImYiIChiKSk7CisrCisrICAgICAgICAgIC8qIEl0ZXJhdGUuICB4X3tuKzF9ID0geF9uICogKDEuNSAtIHkgKiAoeF9uICogeF9uKSkuICAqLworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKworKyAgICAgICAgICAvKiBBbGwgZG9uZS4gICovCisrICAgICAgICAgIGZlc2V0ZW52X3JlZ2lzdGVyIChmZSk7CisrICAgICAgICAgIHJldHVybiB4ICogYjsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAoYiA8IDApCisrICAgIHsKKysgICAgICAvKiBGb3Igc29tZSByZWFzb24sIHNvbWUgUG93ZXJQQzMyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50CisrICAgICAgICAgRkVfSU5WQUxJRF9TUVJULiAgKi8KKysjaWZkZWYgRkVfSU5WQUxJRF9TUVJUCisrICAgICAgZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRF9TUVJUKTsKKysKKysgICAgICBmZW52X3VuaW9uX3QgdSA9IHsgLmZlbnYgPSBmZWdldGVudl9yZWdpc3RlciAoKSB9OworKyAgICAgIGlmICgodS5sICYgRkVfSU5WQUxJRCkgPT0gMCkKKysjZW5kaWYKKysJZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRCk7CisrICAgICAgYiA9IGFfbmFuLnZhbHVlOworKyAgICB9CisrICByZXR1cm4gZl93YXNoZiAoYik7CisrfQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcxZTUxNmQKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYworQEAgLTAsMCArMSwxMzQgQEAKKysvKiBEb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHNxdWFyZSByb290LgorKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8bWF0aF9wcml2YXRlLmg+CisrI2luY2x1ZGUgPGZlbnZfbGliYy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfbmFuID0gey53b3JkID0gMHg3ZmMwMDAwMCB9OworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9pbmYgPSB7LndvcmQgPSAweDdmODAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGZsb2F0IHR3bzEwOCA9IDMuMjQ1MTg1NTM2NTg0MjY3MjY5ZSszMjsKKytzdGF0aWMgY29uc3QgZmxvYXQgdHdvbTU0ID0gNS41NTExMTUxMjMxMjU3ODI3MDJlLTE3OworK3N0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworKworKy8qIFRoZSBtZXRob2QgaXMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9ucyBpbjoKKysKKysgICBfVGhlIEhhbmRib29rIG9mIEZsb2F0aW5nLVBvaW50ZXIgQXJpdGhtZXRpY18gYnkgTXVsbGVyIGV0IGFsLiwgY2hhcHRlciA1OworKyAgIF9JQS02NCBhbmQgRWxlbWVudGFyeSBGdW5jdGlvbnM6IFNwZWVkIGFuZCBQcmVjaXNpb25fIGJ5IE1hcmtzdGVpbiwgY2hhcHRlciA5CisrCisrICAgV2UgZmluZCB0aGUgYWN0dWFsIHNxdWFyZSByb290IGFuZCBoYWxmIG9mIGl0cyByZWNpcHJvY2FsCisrICAgc2ltdWx0YW5lb3VzbHkuICAqLworKworKyNpZmRlZiBfX1NURENfXworK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKysjZWxzZQorK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChiKQorKyAgICAgZG91YmxlIGI7CisrI2VuZGlmCisreworKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKysgICAgeworKyAgICAgIGRvdWJsZSB5LCBnLCBoLCBkLCByOworKyAgICAgIGllZWVfZG91YmxlX3NoYXBlX3R5cGUgdTsKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiAhPSBhX2luZi52YWx1ZSwgMSkpCisrICAgICAgICB7CisrICAgICAgICAgIGZlbnZfdCBmZTsKKysKKysgICAgICAgICAgZmUgPSBmZWdldGVudl9yZWdpc3RlciAoKTsKKysKKysgICAgICAgICAgdS52YWx1ZSA9IGI7CisrCisrICAgICAgICAgIHJlbGF4X2ZlbnZfc3RhdGUgKCk7CisrCisrICAgICAgICAgIF9fYXNtX18gKCJmcnNxcnRlICVbZXN0aW1hdGVdLCAlW3hdXG4iCisrICAgICAgICAgICAgICAgICAgIDogW2VzdGltYXRlXSAiPWYiICh5KSA6IFt4XSAiZiIgKGIpKTsKKysKKysgICAgICAgICAgLyogRm9sbG93aW5nIE11bGxlciBldCBhbCwgcGFnZSAxNjgsIGVxdWF0aW9uIDUuMjAuCisrCisrICAgICAgICAgICAgIGggZ29lcyB0byAxLygyKnNxcnQoYikpCisrICAgICAgICAgICAgIGcgZ29lcyB0byBzcXJ0KGIpLgorKworKyAgICAgICAgICAgICBXZSBuZWVkIHRocmVlIGl0ZXJhdGlvbnMgdG8gZ2V0IHdpdGhpbiAxdWxwLiAgKi8KKysKKysgICAgICAgICAgLyogSW5kaWNhdGUgdGhhdCB0aGVzZSBjYW4gYmUgcGVyZm9ybWVkIHByaW9yIHRvIHRoZSBicmFuY2guICBHQ0MKKysgICAgICAgICAgICAgaW5zaXN0cyBvbiBzaW5raW5nIHRoZW0gYmVsb3cgdGhlIGJyYW5jaCwgaG93ZXZlcjsgaXQgc2VlbXMgbGlrZQorKyAgICAgICAgICAgICB0aGV5J2QgYmUgYmV0dGVyIGJlZm9yZSB0aGUgYnJhbmNoIHNvIHRoYXQgd2UgY2FuIGNvdmVyIGFueSBsYXRlbmN5CisrICAgICAgICAgICAgIGZyb20gc3RvcmluZyB0aGUgYXJndW1lbnQgYW5kIGxvYWRpbmcgaXRzIGhpZ2ggd29yZC4gIE9oIHdlbGwuICAqLworKworKyAgICAgICAgICBnID0gYiAqIHk7CisrICAgICAgICAgIGggPSAwLjUgKiB5OworKworKyAgICAgICAgICAvKiBIYW5kbGUgc21hbGwgbnVtYmVycyBieSBzY2FsaW5nLiAgKi8KKysgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1LnBhcnRzLm1zdyAmIDB4N2ZmMDAwMDApIDw9IDB4MDIwMDAwMDAsIDApKQorKyAgICAgICAgICAgIHJldHVybiBfX2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisrCisrI2RlZmluZSBGTUFERChhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX19hc21fXyAoImZtYWRkICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgICBfX3I7fSkKKysjZGVmaW5lIEZOTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9fYXNtX18gKCJmbm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICAgIF9fcjt9KQorKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICAvKiBnIGlzIG5vdyArLy0gMXVscCwgb3IgZXhhY3RseSBlcXVhbCB0bywgdGhlIHNxdWFyZSByb290IG9mIGIuICAqLworKworKyAgICAgICAgICAvKiBGaW5hbCByZWZpbmVtZW50LiAgKi8KKysgICAgICAgICAgZCA9IEZOTVNVQiAoZywgZywgYik7CisrCisrICAgICAgICAgIGZlc2V0ZW52X3JlZ2lzdGVyIChmZSk7CisrICAgICAgICAgIHJldHVybiBGTUFERCAoZCwgaCwgZyk7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKGIgPCAwKQorKyAgICB7CisrICAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBzb21lIFBvd2VyUEMzMiBwcm9jZXNzb3JzIGRvbid0IGltcGxlbWVudAorKyAgICAgICAgIEZFX0lOVkFMSURfU1FSVC4gICovCisrI2lmZGVmIEZFX0lOVkFMSURfU1FSVAorKyAgICAgIGZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSURfU1FSVCk7CisrCisrICAgICAgZmVudl91bmlvbl90IHUgPSB7IC5mZW52ID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCkgfTsKKysgICAgICBpZiAoKHUubCAmIEZFX0lOVkFMSUQpID09IDApCisrI2VuZGlmCisrCWZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSUQpOworKyAgICAgIGIgPSBhX25hbi52YWx1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZfd2FzaCAoYik7CisrfQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMjZmYTA2NworLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYworQEAgLTAsMCArMSwxMDEgQEAKKysvKiBTaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHNxdWFyZSByb290LgorKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8bWF0aF9wcml2YXRlLmg+CisrI2luY2x1ZGUgPGZlbnZfbGliYy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfbmFuID0gey53b3JkID0gMHg3ZmMwMDAwMCB9OworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9pbmYgPSB7LndvcmQgPSAweDdmODAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKysKKysvKiBUaGUgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbnMgaW46CisrCisrICAgX1RoZSBIYW5kYm9vayBvZiBGbG9hdGluZy1Qb2ludGVyIEFyaXRobWV0aWNfIGJ5IE11bGxlciBldCBhbC4sIGNoYXB0ZXIgNTsKKysgICBfSUEtNjQgYW5kIEVsZW1lbnRhcnkgRnVuY3Rpb25zOiBTcGVlZCBhbmQgUHJlY2lzaW9uXyBieSBNYXJrc3RlaW4sIGNoYXB0ZXIgOQorKworKyAgIFdlIGZpbmQgdGhlIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3QgYW5kIHVzZSB0aGF0IHRvIGNvbXB1dGUgdGhlIGFjdHVhbAorKyAgIHNxdWFyZSByb290LiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKysjZWxzZQorK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChiKQorKyAgICAgZmxvYXQgYjsKKysjZW5kaWYKKyt7CisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorKyAgICB7CisrI2RlZmluZSBGTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9fYXNtX18gKCJmbXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgIF9fcjt9KQorKyNkZWZpbmUgRk5NU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfX2FzbV9fICgiZm5tc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICBfX3I7fSkKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiAhPSBhX2luZi52YWx1ZSwgMSkpCisrICAgICAgICB7CisrICAgICAgICAgIGRvdWJsZSB5LCB4OworKyAgICAgICAgICBmZW52X3QgZmU7CisrCisrICAgICAgICAgIGZlID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCk7CisrCisrICAgICAgICAgIHJlbGF4X2ZlbnZfc3RhdGUgKCk7CisrCisrICAgICAgICAgIC8qIENvbXB1dGUgeSA9IDEuNSAqIGIgLSBiLiAgVXNlcyBmZXdlciBjb25zdGFudHMgdGhhbiB5ID0gMC41ICogYi4gICovCisrICAgICAgICAgIHkgPSBGTVNVQiAodGhyZWVoYWxmLCBiLCBiKTsKKysKKysgICAgICAgICAgLyogSW5pdGlhbCBlc3RpbWF0ZS4gICovCisrICAgICAgICAgIF9fYXNtX18gKCJmcnNxcnRlICVbeF0sICVbYl1cbiIgOiBbeF0gIj1mIiAoeCkgOiBbYl0gImYiIChiKSk7CisrCisrICAgICAgICAgIC8qIEl0ZXJhdGUuICB4X3tuKzF9ID0geF9uICogKDEuNSAtIHkgKiAoeF9uICogeF9uKSkuICAqLworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKworKyAgICAgICAgICAvKiBBbGwgZG9uZS4gICovCisrICAgICAgICAgIGZlc2V0ZW52X3JlZ2lzdGVyIChmZSk7CisrICAgICAgICAgIHJldHVybiB4ICogYjsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAoYiA8IDApCisrICAgIHsKKysgICAgICAvKiBGb3Igc29tZSByZWFzb24sIHNvbWUgUG93ZXJQQzMyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50CisrICAgICAgICAgRkVfSU5WQUxJRF9TUVJULiAgKi8KKysjaWZkZWYgRkVfSU5WQUxJRF9TUVJUCisrICAgICAgZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRF9TUVJUKTsKKysKKysgICAgICBmZW52X3VuaW9uX3QgdSA9IHsgLmZlbnYgPSBmZWdldGVudl9yZWdpc3RlciAoKSB9OworKyAgICAgIGlmICgodS5sICYgRkVfSU5WQUxJRCkgPT0gMCkKKysjZW5kaWYKKysJZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRCk7CisrICAgICAgYiA9IGFfbmFuLnZhbHVlOworKyAgICB9CisrICByZXR1cm4gZl93YXNoZiAoYik7CisrfQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43MWU1MTZkCistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYworQEAgLTAsMCArMSwxMzQgQEAKKysvKiBEb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHNxdWFyZSByb290LgorKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8bWF0aF9wcml2YXRlLmg+CisrI2luY2x1ZGUgPGZlbnZfbGliYy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfbmFuID0gey53b3JkID0gMHg3ZmMwMDAwMCB9OworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9pbmYgPSB7LndvcmQgPSAweDdmODAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGZsb2F0IHR3bzEwOCA9IDMuMjQ1MTg1NTM2NTg0MjY3MjY5ZSszMjsKKytzdGF0aWMgY29uc3QgZmxvYXQgdHdvbTU0ID0gNS41NTExMTUxMjMxMjU3ODI3MDJlLTE3OworK3N0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworKworKy8qIFRoZSBtZXRob2QgaXMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9ucyBpbjoKKysKKysgICBfVGhlIEhhbmRib29rIG9mIEZsb2F0aW5nLVBvaW50ZXIgQXJpdGhtZXRpY18gYnkgTXVsbGVyIGV0IGFsLiwgY2hhcHRlciA1OworKyAgIF9JQS02NCBhbmQgRWxlbWVudGFyeSBGdW5jdGlvbnM6IFNwZWVkIGFuZCBQcmVjaXNpb25fIGJ5IE1hcmtzdGVpbiwgY2hhcHRlciA5CisrCisrICAgV2UgZmluZCB0aGUgYWN0dWFsIHNxdWFyZSByb290IGFuZCBoYWxmIG9mIGl0cyByZWNpcHJvY2FsCisrICAgc2ltdWx0YW5lb3VzbHkuICAqLworKworKyNpZmRlZiBfX1NURENfXworK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKysjZWxzZQorK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChiKQorKyAgICAgZG91YmxlIGI7CisrI2VuZGlmCisreworKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKysgICAgeworKyAgICAgIGRvdWJsZSB5LCBnLCBoLCBkLCByOworKyAgICAgIGllZWVfZG91YmxlX3NoYXBlX3R5cGUgdTsKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiAhPSBhX2luZi52YWx1ZSwgMSkpCisrICAgICAgICB7CisrICAgICAgICAgIGZlbnZfdCBmZTsKKysKKysgICAgICAgICAgZmUgPSBmZWdldGVudl9yZWdpc3RlciAoKTsKKysKKysgICAgICAgICAgdS52YWx1ZSA9IGI7CisrCisrICAgICAgICAgIHJlbGF4X2ZlbnZfc3RhdGUgKCk7CisrCisrICAgICAgICAgIF9fYXNtX18gKCJmcnNxcnRlICVbZXN0aW1hdGVdLCAlW3hdXG4iCisrICAgICAgICAgICAgICAgICAgIDogW2VzdGltYXRlXSAiPWYiICh5KSA6IFt4XSAiZiIgKGIpKTsKKysKKysgICAgICAgICAgLyogRm9sbG93aW5nIE11bGxlciBldCBhbCwgcGFnZSAxNjgsIGVxdWF0aW9uIDUuMjAuCisrCisrICAgICAgICAgICAgIGggZ29lcyB0byAxLygyKnNxcnQoYikpCisrICAgICAgICAgICAgIGcgZ29lcyB0byBzcXJ0KGIpLgorKworKyAgICAgICAgICAgICBXZSBuZWVkIHRocmVlIGl0ZXJhdGlvbnMgdG8gZ2V0IHdpdGhpbiAxdWxwLiAgKi8KKysKKysgICAgICAgICAgLyogSW5kaWNhdGUgdGhhdCB0aGVzZSBjYW4gYmUgcGVyZm9ybWVkIHByaW9yIHRvIHRoZSBicmFuY2guICBHQ0MKKysgICAgICAgICAgICAgaW5zaXN0cyBvbiBzaW5raW5nIHRoZW0gYmVsb3cgdGhlIGJyYW5jaCwgaG93ZXZlcjsgaXQgc2VlbXMgbGlrZQorKyAgICAgICAgICAgICB0aGV5J2QgYmUgYmV0dGVyIGJlZm9yZSB0aGUgYnJhbmNoIHNvIHRoYXQgd2UgY2FuIGNvdmVyIGFueSBsYXRlbmN5CisrICAgICAgICAgICAgIGZyb20gc3RvcmluZyB0aGUgYXJndW1lbnQgYW5kIGxvYWRpbmcgaXRzIGhpZ2ggd29yZC4gIE9oIHdlbGwuICAqLworKworKyAgICAgICAgICBnID0gYiAqIHk7CisrICAgICAgICAgIGggPSAwLjUgKiB5OworKworKyAgICAgICAgICAvKiBIYW5kbGUgc21hbGwgbnVtYmVycyBieSBzY2FsaW5nLiAgKi8KKysgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1LnBhcnRzLm1zdyAmIDB4N2ZmMDAwMDApIDw9IDB4MDIwMDAwMDAsIDApKQorKyAgICAgICAgICAgIHJldHVybiBfX2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisrCisrI2RlZmluZSBGTUFERChhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX19hc21fXyAoImZtYWRkICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgICBfX3I7fSkKKysjZGVmaW5lIEZOTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9fYXNtX18gKCJmbm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICAgIF9fcjt9KQorKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICAvKiBnIGlzIG5vdyArLy0gMXVscCwgb3IgZXhhY3RseSBlcXVhbCB0bywgdGhlIHNxdWFyZSByb290IG9mIGIuICAqLworKworKyAgICAgICAgICAvKiBGaW5hbCByZWZpbmVtZW50LiAgKi8KKysgICAgICAgICAgZCA9IEZOTVNVQiAoZywgZywgYik7CisrCisrICAgICAgICAgIGZlc2V0ZW52X3JlZ2lzdGVyIChmZSk7CisrICAgICAgICAgIHJldHVybiBGTUFERCAoZCwgaCwgZyk7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKGIgPCAwKQorKyAgICB7CisrICAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBzb21lIFBvd2VyUEMzMiBwcm9jZXNzb3JzIGRvbid0IGltcGxlbWVudAorKyAgICAgICAgIEZFX0lOVkFMSURfU1FSVC4gICovCisrI2lmZGVmIEZFX0lOVkFMSURfU1FSVAorKyAgICAgIGZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSURfU1FSVCk7CisrCisrICAgICAgZmVudl91bmlvbl90IHUgPSB7IC5mZW52ID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCkgfTsKKysgICAgICBpZiAoKHUubCAmIEZFX0lOVkFMSUQpID09IDApCisrI2VuZGlmCisrCWZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSUQpOworKyAgICAgIGIgPSBhX25hbi52YWx1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZfd2FzaCAoYik7CisrfQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjI2ZmEwNjcKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYworQEAgLTAsMCArMSwxMDEgQEAKKysvKiBTaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHNxdWFyZSByb290LgorKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8bWF0aF9wcml2YXRlLmg+CisrI2luY2x1ZGUgPGZlbnZfbGliYy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfbmFuID0gey53b3JkID0gMHg3ZmMwMDAwMCB9OworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9pbmYgPSB7LndvcmQgPSAweDdmODAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKysKKysvKiBUaGUgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbnMgaW46CisrCisrICAgX1RoZSBIYW5kYm9vayBvZiBGbG9hdGluZy1Qb2ludGVyIEFyaXRobWV0aWNfIGJ5IE11bGxlciBldCBhbC4sIGNoYXB0ZXIgNTsKKysgICBfSUEtNjQgYW5kIEVsZW1lbnRhcnkgRnVuY3Rpb25zOiBTcGVlZCBhbmQgUHJlY2lzaW9uXyBieSBNYXJrc3RlaW4sIGNoYXB0ZXIgOQorKworKyAgIFdlIGZpbmQgdGhlIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3QgYW5kIHVzZSB0aGF0IHRvIGNvbXB1dGUgdGhlIGFjdHVhbAorKyAgIHNxdWFyZSByb290LiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKysjZWxzZQorK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChiKQorKyAgICAgZmxvYXQgYjsKKysjZW5kaWYKKyt7CisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorKyAgICB7CisrI2RlZmluZSBGTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9fYXNtX18gKCJmbXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgIF9fcjt9KQorKyNkZWZpbmUgRk5NU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfX2FzbV9fICgiZm5tc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICBfX3I7fSkKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiAhPSBhX2luZi52YWx1ZSwgMSkpCisrICAgICAgICB7CisrICAgICAgICAgIGRvdWJsZSB5LCB4OworKyAgICAgICAgICBmZW52X3QgZmU7CisrCisrICAgICAgICAgIGZlID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCk7CisrCisrICAgICAgICAgIHJlbGF4X2ZlbnZfc3RhdGUgKCk7CisrCisrICAgICAgICAgIC8qIENvbXB1dGUgeSA9IDEuNSAqIGIgLSBiLiAgVXNlcyBmZXdlciBjb25zdGFudHMgdGhhbiB5ID0gMC41ICogYi4gICovCisrICAgICAgICAgIHkgPSBGTVNVQiAodGhyZWVoYWxmLCBiLCBiKTsKKysKKysgICAgICAgICAgLyogSW5pdGlhbCBlc3RpbWF0ZS4gICovCisrICAgICAgICAgIF9fYXNtX18gKCJmcnNxcnRlICVbeF0sICVbYl1cbiIgOiBbeF0gIj1mIiAoeCkgOiBbYl0gImYiIChiKSk7CisrCisrICAgICAgICAgIC8qIEl0ZXJhdGUuICB4X3tuKzF9ID0geF9uICogKDEuNSAtIHkgKiAoeF9uICogeF9uKSkuICAqLworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKworKyAgICAgICAgICAvKiBBbGwgZG9uZS4gICovCisrICAgICAgICAgIGZlc2V0ZW52X3JlZ2lzdGVyIChmZSk7CisrICAgICAgICAgIHJldHVybiB4ICogYjsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAoYiA8IDApCisrICAgIHsKKysgICAgICAvKiBGb3Igc29tZSByZWFzb24sIHNvbWUgUG93ZXJQQzMyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50CisrICAgICAgICAgRkVfSU5WQUxJRF9TUVJULiAgKi8KKysjaWZkZWYgRkVfSU5WQUxJRF9TUVJUCisrICAgICAgZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRF9TUVJUKTsKKysKKysgICAgICBmZW52X3VuaW9uX3QgdSA9IHsgLmZlbnYgPSBmZWdldGVudl9yZWdpc3RlciAoKSB9OworKyAgICAgIGlmICgodS5sICYgRkVfSU5WQUxJRCkgPT0gMCkKKysjZW5kaWYKKysJZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRCk7CisrICAgICAgYiA9IGFfbmFuLnZhbHVlOworKyAgICB9CisrICByZXR1cm4gZl93YXNoZiAoYik7CisrfQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43MWU1MTZkCistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYworQEAgLTAsMCArMSwxMzQgQEAKKysvKiBEb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHNxdWFyZSByb290LgorKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8bWF0aF9wcml2YXRlLmg+CisrI2luY2x1ZGUgPGZlbnZfbGliYy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfbmFuID0gey53b3JkID0gMHg3ZmMwMDAwMCB9OworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9pbmYgPSB7LndvcmQgPSAweDdmODAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGZsb2F0IHR3bzEwOCA9IDMuMjQ1MTg1NTM2NTg0MjY3MjY5ZSszMjsKKytzdGF0aWMgY29uc3QgZmxvYXQgdHdvbTU0ID0gNS41NTExMTUxMjMxMjU3ODI3MDJlLTE3OworK3N0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworKworKy8qIFRoZSBtZXRob2QgaXMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9ucyBpbjoKKysKKysgICBfVGhlIEhhbmRib29rIG9mIEZsb2F0aW5nLVBvaW50ZXIgQXJpdGhtZXRpY18gYnkgTXVsbGVyIGV0IGFsLiwgY2hhcHRlciA1OworKyAgIF9JQS02NCBhbmQgRWxlbWVudGFyeSBGdW5jdGlvbnM6IFNwZWVkIGFuZCBQcmVjaXNpb25fIGJ5IE1hcmtzdGVpbiwgY2hhcHRlciA5CisrCisrICAgV2UgZmluZCB0aGUgYWN0dWFsIHNxdWFyZSByb290IGFuZCBoYWxmIG9mIGl0cyByZWNpcHJvY2FsCisrICAgc2ltdWx0YW5lb3VzbHkuICAqLworKworKyNpZmRlZiBfX1NURENfXworK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKysjZWxzZQorK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChiKQorKyAgICAgZG91YmxlIGI7CisrI2VuZGlmCisreworKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKysgICAgeworKyAgICAgIGRvdWJsZSB5LCBnLCBoLCBkLCByOworKyAgICAgIGllZWVfZG91YmxlX3NoYXBlX3R5cGUgdTsKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiAhPSBhX2luZi52YWx1ZSwgMSkpCisrICAgICAgICB7CisrICAgICAgICAgIGZlbnZfdCBmZTsKKysKKysgICAgICAgICAgZmUgPSBmZWdldGVudl9yZWdpc3RlciAoKTsKKysKKysgICAgICAgICAgdS52YWx1ZSA9IGI7CisrCisrICAgICAgICAgIHJlbGF4X2ZlbnZfc3RhdGUgKCk7CisrCisrICAgICAgICAgIF9fYXNtX18gKCJmcnNxcnRlICVbZXN0aW1hdGVdLCAlW3hdXG4iCisrICAgICAgICAgICAgICAgICAgIDogW2VzdGltYXRlXSAiPWYiICh5KSA6IFt4XSAiZiIgKGIpKTsKKysKKysgICAgICAgICAgLyogRm9sbG93aW5nIE11bGxlciBldCBhbCwgcGFnZSAxNjgsIGVxdWF0aW9uIDUuMjAuCisrCisrICAgICAgICAgICAgIGggZ29lcyB0byAxLygyKnNxcnQoYikpCisrICAgICAgICAgICAgIGcgZ29lcyB0byBzcXJ0KGIpLgorKworKyAgICAgICAgICAgICBXZSBuZWVkIHRocmVlIGl0ZXJhdGlvbnMgdG8gZ2V0IHdpdGhpbiAxdWxwLiAgKi8KKysKKysgICAgICAgICAgLyogSW5kaWNhdGUgdGhhdCB0aGVzZSBjYW4gYmUgcGVyZm9ybWVkIHByaW9yIHRvIHRoZSBicmFuY2guICBHQ0MKKysgICAgICAgICAgICAgaW5zaXN0cyBvbiBzaW5raW5nIHRoZW0gYmVsb3cgdGhlIGJyYW5jaCwgaG93ZXZlcjsgaXQgc2VlbXMgbGlrZQorKyAgICAgICAgICAgICB0aGV5J2QgYmUgYmV0dGVyIGJlZm9yZSB0aGUgYnJhbmNoIHNvIHRoYXQgd2UgY2FuIGNvdmVyIGFueSBsYXRlbmN5CisrICAgICAgICAgICAgIGZyb20gc3RvcmluZyB0aGUgYXJndW1lbnQgYW5kIGxvYWRpbmcgaXRzIGhpZ2ggd29yZC4gIE9oIHdlbGwuICAqLworKworKyAgICAgICAgICBnID0gYiAqIHk7CisrICAgICAgICAgIGggPSAwLjUgKiB5OworKworKyAgICAgICAgICAvKiBIYW5kbGUgc21hbGwgbnVtYmVycyBieSBzY2FsaW5nLiAgKi8KKysgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1LnBhcnRzLm1zdyAmIDB4N2ZmMDAwMDApIDw9IDB4MDIwMDAwMDAsIDApKQorKyAgICAgICAgICAgIHJldHVybiBfX2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisrCisrI2RlZmluZSBGTUFERChhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX19hc21fXyAoImZtYWRkICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgICBfX3I7fSkKKysjZGVmaW5lIEZOTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9fYXNtX18gKCJmbm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICAgIF9fcjt9KQorKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICAvKiBnIGlzIG5vdyArLy0gMXVscCwgb3IgZXhhY3RseSBlcXVhbCB0bywgdGhlIHNxdWFyZSByb290IG9mIGIuICAqLworKworKyAgICAgICAgICAvKiBGaW5hbCByZWZpbmVtZW50LiAgKi8KKysgICAgICAgICAgZCA9IEZOTVNVQiAoZywgZywgYik7CisrCisrICAgICAgICAgIGZlc2V0ZW52X3JlZ2lzdGVyIChmZSk7CisrICAgICAgICAgIHJldHVybiBGTUFERCAoZCwgaCwgZyk7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKGIgPCAwKQorKyAgICB7CisrICAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBzb21lIFBvd2VyUEMzMiBwcm9jZXNzb3JzIGRvbid0IGltcGxlbWVudAorKyAgICAgICAgIEZFX0lOVkFMSURfU1FSVC4gICovCisrI2lmZGVmIEZFX0lOVkFMSURfU1FSVAorKyAgICAgIGZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSURfU1FSVCk7CisrCisrICAgICAgZmVudl91bmlvbl90IHUgPSB7IC5mZW52ID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCkgfTsKKysgICAgICBpZiAoKHUubCAmIEZFX0lOVkFMSUQpID09IDApCisrI2VuZGlmCisrCWZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSUQpOworKyAgICAgIGIgPSBhX25hbi52YWx1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZfd2FzaCAoYik7CisrfQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjI2ZmEwNjcKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYworQEAgLTAsMCArMSwxMDEgQEAKKysvKiBTaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHNxdWFyZSByb290LgorKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8bWF0aF9wcml2YXRlLmg+CisrI2luY2x1ZGUgPGZlbnZfbGliYy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfbmFuID0gey53b3JkID0gMHg3ZmMwMDAwMCB9OworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9pbmYgPSB7LndvcmQgPSAweDdmODAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKysKKysvKiBUaGUgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbnMgaW46CisrCisrICAgX1RoZSBIYW5kYm9vayBvZiBGbG9hdGluZy1Qb2ludGVyIEFyaXRobWV0aWNfIGJ5IE11bGxlciBldCBhbC4sIGNoYXB0ZXIgNTsKKysgICBfSUEtNjQgYW5kIEVsZW1lbnRhcnkgRnVuY3Rpb25zOiBTcGVlZCBhbmQgUHJlY2lzaW9uXyBieSBNYXJrc3RlaW4sIGNoYXB0ZXIgOQorKworKyAgIFdlIGZpbmQgdGhlIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3QgYW5kIHVzZSB0aGF0IHRvIGNvbXB1dGUgdGhlIGFjdHVhbAorKyAgIHNxdWFyZSByb290LiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKysjZWxzZQorK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChiKQorKyAgICAgZmxvYXQgYjsKKysjZW5kaWYKKyt7CisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorKyAgICB7CisrI2RlZmluZSBGTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9fYXNtX18gKCJmbXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgIF9fcjt9KQorKyNkZWZpbmUgRk5NU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfX2FzbV9fICgiZm5tc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICBfX3I7fSkKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiAhPSBhX2luZi52YWx1ZSwgMSkpCisrICAgICAgICB7CisrICAgICAgICAgIGRvdWJsZSB5LCB4OworKyAgICAgICAgICBmZW52X3QgZmU7CisrCisrICAgICAgICAgIGZlID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCk7CisrCisrICAgICAgICAgIHJlbGF4X2ZlbnZfc3RhdGUgKCk7CisrCisrICAgICAgICAgIC8qIENvbXB1dGUgeSA9IDEuNSAqIGIgLSBiLiAgVXNlcyBmZXdlciBjb25zdGFudHMgdGhhbiB5ID0gMC41ICogYi4gICovCisrICAgICAgICAgIHkgPSBGTVNVQiAodGhyZWVoYWxmLCBiLCBiKTsKKysKKysgICAgICAgICAgLyogSW5pdGlhbCBlc3RpbWF0ZS4gICovCisrICAgICAgICAgIF9fYXNtX18gKCJmcnNxcnRlICVbeF0sICVbYl1cbiIgOiBbeF0gIj1mIiAoeCkgOiBbYl0gImYiIChiKSk7CisrCisrICAgICAgICAgIC8qIEl0ZXJhdGUuICB4X3tuKzF9ID0geF9uICogKDEuNSAtIHkgKiAoeF9uICogeF9uKSkuICAqLworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKworKyAgICAgICAgICAvKiBBbGwgZG9uZS4gICovCisrICAgICAgICAgIGZlc2V0ZW52X3JlZ2lzdGVyIChmZSk7CisrICAgICAgICAgIHJldHVybiB4ICogYjsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAoYiA8IDApCisrICAgIHsKKysgICAgICAvKiBGb3Igc29tZSByZWFzb24sIHNvbWUgUG93ZXJQQzMyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50CisrICAgICAgICAgRkVfSU5WQUxJRF9TUVJULiAgKi8KKysjaWZkZWYgRkVfSU5WQUxJRF9TUVJUCisrICAgICAgZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRF9TUVJUKTsKKysKKysgICAgICBmZW52X3VuaW9uX3QgdSA9IHsgLmZlbnYgPSBmZWdldGVudl9yZWdpc3RlciAoKSB9OworKyAgICAgIGlmICgodS5sICYgRkVfSU5WQUxJRCkgPT0gMCkKKysjZW5kaWYKKysJZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRCk7CisrICAgICAgYiA9IGFfbmFuLnZhbHVlOworKyAgICB9CisrICByZXR1cm4gZl93YXNoZiAoYik7CisrfQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43MWU1MTZkCistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYworQEAgLTAsMCArMSwxMzQgQEAKKysvKiBEb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHNxdWFyZSByb290LgorKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8bWF0aF9wcml2YXRlLmg+CisrI2luY2x1ZGUgPGZlbnZfbGliYy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfbmFuID0gey53b3JkID0gMHg3ZmMwMDAwMCB9OworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9pbmYgPSB7LndvcmQgPSAweDdmODAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGZsb2F0IHR3bzEwOCA9IDMuMjQ1MTg1NTM2NTg0MjY3MjY5ZSszMjsKKytzdGF0aWMgY29uc3QgZmxvYXQgdHdvbTU0ID0gNS41NTExMTUxMjMxMjU3ODI3MDJlLTE3OworK3N0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworKworKy8qIFRoZSBtZXRob2QgaXMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9ucyBpbjoKKysKKysgICBfVGhlIEhhbmRib29rIG9mIEZsb2F0aW5nLVBvaW50ZXIgQXJpdGhtZXRpY18gYnkgTXVsbGVyIGV0IGFsLiwgY2hhcHRlciA1OworKyAgIF9JQS02NCBhbmQgRWxlbWVudGFyeSBGdW5jdGlvbnM6IFNwZWVkIGFuZCBQcmVjaXNpb25fIGJ5IE1hcmtzdGVpbiwgY2hhcHRlciA5CisrCisrICAgV2UgZmluZCB0aGUgYWN0dWFsIHNxdWFyZSByb290IGFuZCBoYWxmIG9mIGl0cyByZWNpcHJvY2FsCisrICAgc2ltdWx0YW5lb3VzbHkuICAqLworKworKyNpZmRlZiBfX1NURENfXworK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKysjZWxzZQorK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChiKQorKyAgICAgZG91YmxlIGI7CisrI2VuZGlmCisreworKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKysgICAgeworKyAgICAgIGRvdWJsZSB5LCBnLCBoLCBkLCByOworKyAgICAgIGllZWVfZG91YmxlX3NoYXBlX3R5cGUgdTsKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiAhPSBhX2luZi52YWx1ZSwgMSkpCisrICAgICAgICB7CisrICAgICAgICAgIGZlbnZfdCBmZTsKKysKKysgICAgICAgICAgZmUgPSBmZWdldGVudl9yZWdpc3RlciAoKTsKKysKKysgICAgICAgICAgdS52YWx1ZSA9IGI7CisrCisrICAgICAgICAgIHJlbGF4X2ZlbnZfc3RhdGUgKCk7CisrCisrICAgICAgICAgIF9fYXNtX18gKCJmcnNxcnRlICVbZXN0aW1hdGVdLCAlW3hdXG4iCisrICAgICAgICAgICAgICAgICAgIDogW2VzdGltYXRlXSAiPWYiICh5KSA6IFt4XSAiZiIgKGIpKTsKKysKKysgICAgICAgICAgLyogRm9sbG93aW5nIE11bGxlciBldCBhbCwgcGFnZSAxNjgsIGVxdWF0aW9uIDUuMjAuCisrCisrICAgICAgICAgICAgIGggZ29lcyB0byAxLygyKnNxcnQoYikpCisrICAgICAgICAgICAgIGcgZ29lcyB0byBzcXJ0KGIpLgorKworKyAgICAgICAgICAgICBXZSBuZWVkIHRocmVlIGl0ZXJhdGlvbnMgdG8gZ2V0IHdpdGhpbiAxdWxwLiAgKi8KKysKKysgICAgICAgICAgLyogSW5kaWNhdGUgdGhhdCB0aGVzZSBjYW4gYmUgcGVyZm9ybWVkIHByaW9yIHRvIHRoZSBicmFuY2guICBHQ0MKKysgICAgICAgICAgICAgaW5zaXN0cyBvbiBzaW5raW5nIHRoZW0gYmVsb3cgdGhlIGJyYW5jaCwgaG93ZXZlcjsgaXQgc2VlbXMgbGlrZQorKyAgICAgICAgICAgICB0aGV5J2QgYmUgYmV0dGVyIGJlZm9yZSB0aGUgYnJhbmNoIHNvIHRoYXQgd2UgY2FuIGNvdmVyIGFueSBsYXRlbmN5CisrICAgICAgICAgICAgIGZyb20gc3RvcmluZyB0aGUgYXJndW1lbnQgYW5kIGxvYWRpbmcgaXRzIGhpZ2ggd29yZC4gIE9oIHdlbGwuICAqLworKworKyAgICAgICAgICBnID0gYiAqIHk7CisrICAgICAgICAgIGggPSAwLjUgKiB5OworKworKyAgICAgICAgICAvKiBIYW5kbGUgc21hbGwgbnVtYmVycyBieSBzY2FsaW5nLiAgKi8KKysgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1LnBhcnRzLm1zdyAmIDB4N2ZmMDAwMDApIDw9IDB4MDIwMDAwMDAsIDApKQorKyAgICAgICAgICAgIHJldHVybiBfX2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisrCisrI2RlZmluZSBGTUFERChhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX19hc21fXyAoImZtYWRkICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgICBfX3I7fSkKKysjZGVmaW5lIEZOTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9fYXNtX18gKCJmbm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICAgIF9fcjt9KQorKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICAvKiBnIGlzIG5vdyArLy0gMXVscCwgb3IgZXhhY3RseSBlcXVhbCB0bywgdGhlIHNxdWFyZSByb290IG9mIGIuICAqLworKworKyAgICAgICAgICAvKiBGaW5hbCByZWZpbmVtZW50LiAgKi8KKysgICAgICAgICAgZCA9IEZOTVNVQiAoZywgZywgYik7CisrCisrICAgICAgICAgIGZlc2V0ZW52X3JlZ2lzdGVyIChmZSk7CisrICAgICAgICAgIHJldHVybiBGTUFERCAoZCwgaCwgZyk7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKGIgPCAwKQorKyAgICB7CisrICAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBzb21lIFBvd2VyUEMzMiBwcm9jZXNzb3JzIGRvbid0IGltcGxlbWVudAorKyAgICAgICAgIEZFX0lOVkFMSURfU1FSVC4gICovCisrI2lmZGVmIEZFX0lOVkFMSURfU1FSVAorKyAgICAgIGZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSURfU1FSVCk7CisrCisrICAgICAgZmVudl91bmlvbl90IHUgPSB7IC5mZW52ID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCkgfTsKKysgICAgICBpZiAoKHUubCAmIEZFX0lOVkFMSUQpID09IDApCisrI2VuZGlmCisrCWZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSUQpOworKyAgICAgIGIgPSBhX25hbi52YWx1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZfd2FzaCAoYik7CisrfQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjI2ZmEwNjcKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYworQEAgLTAsMCArMSwxMDEgQEAKKysvKiBTaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHNxdWFyZSByb290LgorKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8bWF0aF9wcml2YXRlLmg+CisrI2luY2x1ZGUgPGZlbnZfbGliYy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfbmFuID0gey53b3JkID0gMHg3ZmMwMDAwMCB9OworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9pbmYgPSB7LndvcmQgPSAweDdmODAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKysKKysvKiBUaGUgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbnMgaW46CisrCisrICAgX1RoZSBIYW5kYm9vayBvZiBGbG9hdGluZy1Qb2ludGVyIEFyaXRobWV0aWNfIGJ5IE11bGxlciBldCBhbC4sIGNoYXB0ZXIgNTsKKysgICBfSUEtNjQgYW5kIEVsZW1lbnRhcnkgRnVuY3Rpb25zOiBTcGVlZCBhbmQgUHJlY2lzaW9uXyBieSBNYXJrc3RlaW4sIGNoYXB0ZXIgOQorKworKyAgIFdlIGZpbmQgdGhlIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3QgYW5kIHVzZSB0aGF0IHRvIGNvbXB1dGUgdGhlIGFjdHVhbAorKyAgIHNxdWFyZSByb290LiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKysjZWxzZQorK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChiKQorKyAgICAgZmxvYXQgYjsKKysjZW5kaWYKKyt7CisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorKyAgICB7CisrI2RlZmluZSBGTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9fYXNtX18gKCJmbXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgIF9fcjt9KQorKyNkZWZpbmUgRk5NU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfX2FzbV9fICgiZm5tc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICBfX3I7fSkKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiAhPSBhX2luZi52YWx1ZSwgMSkpCisrICAgICAgICB7CisrICAgICAgICAgIGRvdWJsZSB5LCB4OworKyAgICAgICAgICBmZW52X3QgZmU7CisrCisrICAgICAgICAgIGZlID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCk7CisrCisrICAgICAgICAgIHJlbGF4X2ZlbnZfc3RhdGUgKCk7CisrCisrICAgICAgICAgIC8qIENvbXB1dGUgeSA9IDEuNSAqIGIgLSBiLiAgVXNlcyBmZXdlciBjb25zdGFudHMgdGhhbiB5ID0gMC41ICogYi4gICovCisrICAgICAgICAgIHkgPSBGTVNVQiAodGhyZWVoYWxmLCBiLCBiKTsKKysKKysgICAgICAgICAgLyogSW5pdGlhbCBlc3RpbWF0ZS4gICovCisrICAgICAgICAgIF9fYXNtX18gKCJmcnNxcnRlICVbeF0sICVbYl1cbiIgOiBbeF0gIj1mIiAoeCkgOiBbYl0gImYiIChiKSk7CisrCisrICAgICAgICAgIC8qIEl0ZXJhdGUuICB4X3tuKzF9ID0geF9uICogKDEuNSAtIHkgKiAoeF9uICogeF9uKSkuICAqLworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKworKyAgICAgICAgICAvKiBBbGwgZG9uZS4gICovCisrICAgICAgICAgIGZlc2V0ZW52X3JlZ2lzdGVyIChmZSk7CisrICAgICAgICAgIHJldHVybiB4ICogYjsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAoYiA8IDApCisrICAgIHsKKysgICAgICAvKiBGb3Igc29tZSByZWFzb24sIHNvbWUgUG93ZXJQQzMyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50CisrICAgICAgICAgRkVfSU5WQUxJRF9TUVJULiAgKi8KKysjaWZkZWYgRkVfSU5WQUxJRF9TUVJUCisrICAgICAgZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRF9TUVJUKTsKKysKKysgICAgICBmZW52X3VuaW9uX3QgdSA9IHsgLmZlbnYgPSBmZWdldGVudl9yZWdpc3RlciAoKSB9OworKyAgICAgIGlmICgodS5sICYgRkVfSU5WQUxJRCkgPT0gMCkKKysjZW5kaWYKKysJZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRCk7CisrICAgICAgYiA9IGFfbmFuLnZhbHVlOworKyAgICB9CisrICByZXR1cm4gZl93YXNoZiAoYik7CisrfQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43MWU1MTZkCistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYworQEAgLTAsMCArMSwxMzQgQEAKKysvKiBEb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHNxdWFyZSByb290LgorKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8bWF0aF9wcml2YXRlLmg+CisrI2luY2x1ZGUgPGZlbnZfbGliYy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfbmFuID0gey53b3JkID0gMHg3ZmMwMDAwMCB9OworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9pbmYgPSB7LndvcmQgPSAweDdmODAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGZsb2F0IHR3bzEwOCA9IDMuMjQ1MTg1NTM2NTg0MjY3MjY5ZSszMjsKKytzdGF0aWMgY29uc3QgZmxvYXQgdHdvbTU0ID0gNS41NTExMTUxMjMxMjU3ODI3MDJlLTE3OworK3N0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworKworKy8qIFRoZSBtZXRob2QgaXMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9ucyBpbjoKKysKKysgICBfVGhlIEhhbmRib29rIG9mIEZsb2F0aW5nLVBvaW50ZXIgQXJpdGhtZXRpY18gYnkgTXVsbGVyIGV0IGFsLiwgY2hhcHRlciA1OworKyAgIF9JQS02NCBhbmQgRWxlbWVudGFyeSBGdW5jdGlvbnM6IFNwZWVkIGFuZCBQcmVjaXNpb25fIGJ5IE1hcmtzdGVpbiwgY2hhcHRlciA5CisrCisrICAgV2UgZmluZCB0aGUgYWN0dWFsIHNxdWFyZSByb290IGFuZCBoYWxmIG9mIGl0cyByZWNpcHJvY2FsCisrICAgc2ltdWx0YW5lb3VzbHkuICAqLworKworKyNpZmRlZiBfX1NURENfXworK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKysjZWxzZQorK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChiKQorKyAgICAgZG91YmxlIGI7CisrI2VuZGlmCisreworKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKysgICAgeworKyAgICAgIGRvdWJsZSB5LCBnLCBoLCBkLCByOworKyAgICAgIGllZWVfZG91YmxlX3NoYXBlX3R5cGUgdTsKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiAhPSBhX2luZi52YWx1ZSwgMSkpCisrICAgICAgICB7CisrICAgICAgICAgIGZlbnZfdCBmZTsKKysKKysgICAgICAgICAgZmUgPSBmZWdldGVudl9yZWdpc3RlciAoKTsKKysKKysgICAgICAgICAgdS52YWx1ZSA9IGI7CisrCisrICAgICAgICAgIHJlbGF4X2ZlbnZfc3RhdGUgKCk7CisrCisrICAgICAgICAgIF9fYXNtX18gKCJmcnNxcnRlICVbZXN0aW1hdGVdLCAlW3hdXG4iCisrICAgICAgICAgICAgICAgICAgIDogW2VzdGltYXRlXSAiPWYiICh5KSA6IFt4XSAiZiIgKGIpKTsKKysKKysgICAgICAgICAgLyogRm9sbG93aW5nIE11bGxlciBldCBhbCwgcGFnZSAxNjgsIGVxdWF0aW9uIDUuMjAuCisrCisrICAgICAgICAgICAgIGggZ29lcyB0byAxLygyKnNxcnQoYikpCisrICAgICAgICAgICAgIGcgZ29lcyB0byBzcXJ0KGIpLgorKworKyAgICAgICAgICAgICBXZSBuZWVkIHRocmVlIGl0ZXJhdGlvbnMgdG8gZ2V0IHdpdGhpbiAxdWxwLiAgKi8KKysKKysgICAgICAgICAgLyogSW5kaWNhdGUgdGhhdCB0aGVzZSBjYW4gYmUgcGVyZm9ybWVkIHByaW9yIHRvIHRoZSBicmFuY2guICBHQ0MKKysgICAgICAgICAgICAgaW5zaXN0cyBvbiBzaW5raW5nIHRoZW0gYmVsb3cgdGhlIGJyYW5jaCwgaG93ZXZlcjsgaXQgc2VlbXMgbGlrZQorKyAgICAgICAgICAgICB0aGV5J2QgYmUgYmV0dGVyIGJlZm9yZSB0aGUgYnJhbmNoIHNvIHRoYXQgd2UgY2FuIGNvdmVyIGFueSBsYXRlbmN5CisrICAgICAgICAgICAgIGZyb20gc3RvcmluZyB0aGUgYXJndW1lbnQgYW5kIGxvYWRpbmcgaXRzIGhpZ2ggd29yZC4gIE9oIHdlbGwuICAqLworKworKyAgICAgICAgICBnID0gYiAqIHk7CisrICAgICAgICAgIGggPSAwLjUgKiB5OworKworKyAgICAgICAgICAvKiBIYW5kbGUgc21hbGwgbnVtYmVycyBieSBzY2FsaW5nLiAgKi8KKysgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1LnBhcnRzLm1zdyAmIDB4N2ZmMDAwMDApIDw9IDB4MDIwMDAwMDAsIDApKQorKyAgICAgICAgICAgIHJldHVybiBfX2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisrCisrI2RlZmluZSBGTUFERChhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX19hc21fXyAoImZtYWRkICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgICBfX3I7fSkKKysjZGVmaW5lIEZOTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9fYXNtX18gKCJmbm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICAgIF9fcjt9KQorKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICAvKiBnIGlzIG5vdyArLy0gMXVscCwgb3IgZXhhY3RseSBlcXVhbCB0bywgdGhlIHNxdWFyZSByb290IG9mIGIuICAqLworKworKyAgICAgICAgICAvKiBGaW5hbCByZWZpbmVtZW50LiAgKi8KKysgICAgICAgICAgZCA9IEZOTVNVQiAoZywgZywgYik7CisrCisrICAgICAgICAgIGZlc2V0ZW52X3JlZ2lzdGVyIChmZSk7CisrICAgICAgICAgIHJldHVybiBGTUFERCAoZCwgaCwgZyk7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKGIgPCAwKQorKyAgICB7CisrICAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBzb21lIFBvd2VyUEMzMiBwcm9jZXNzb3JzIGRvbid0IGltcGxlbWVudAorKyAgICAgICAgIEZFX0lOVkFMSURfU1FSVC4gICovCisrI2lmZGVmIEZFX0lOVkFMSURfU1FSVAorKyAgICAgIGZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSURfU1FSVCk7CisrCisrICAgICAgZmVudl91bmlvbl90IHUgPSB7IC5mZW52ID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCkgfTsKKysgICAgICBpZiAoKHUubCAmIEZFX0lOVkFMSUQpID09IDApCisrI2VuZGlmCisrCWZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSUQpOworKyAgICAgIGIgPSBhX25hbi52YWx1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZfd2FzaCAoYik7CisrfQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjI2ZmEwNjcKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYworQEAgLTAsMCArMSwxMDEgQEAKKysvKiBTaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHNxdWFyZSByb290LgorKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8bWF0aF9wcml2YXRlLmg+CisrI2luY2x1ZGUgPGZlbnZfbGliYy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfbmFuID0gey53b3JkID0gMHg3ZmMwMDAwMCB9OworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9pbmYgPSB7LndvcmQgPSAweDdmODAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKysKKysvKiBUaGUgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbnMgaW46CisrCisrICAgX1RoZSBIYW5kYm9vayBvZiBGbG9hdGluZy1Qb2ludGVyIEFyaXRobWV0aWNfIGJ5IE11bGxlciBldCBhbC4sIGNoYXB0ZXIgNTsKKysgICBfSUEtNjQgYW5kIEVsZW1lbnRhcnkgRnVuY3Rpb25zOiBTcGVlZCBhbmQgUHJlY2lzaW9uXyBieSBNYXJrc3RlaW4sIGNoYXB0ZXIgOQorKworKyAgIFdlIGZpbmQgdGhlIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3QgYW5kIHVzZSB0aGF0IHRvIGNvbXB1dGUgdGhlIGFjdHVhbAorKyAgIHNxdWFyZSByb290LiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKysjZWxzZQorK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChiKQorKyAgICAgZmxvYXQgYjsKKysjZW5kaWYKKyt7CisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorKyAgICB7CisrI2RlZmluZSBGTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9fYXNtX18gKCJmbXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgIF9fcjt9KQorKyNkZWZpbmUgRk5NU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfX2FzbV9fICgiZm5tc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICBfX3I7fSkKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiAhPSBhX2luZi52YWx1ZSwgMSkpCisrICAgICAgICB7CisrICAgICAgICAgIGRvdWJsZSB5LCB4OworKyAgICAgICAgICBmZW52X3QgZmU7CisrCisrICAgICAgICAgIGZlID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCk7CisrCisrICAgICAgICAgIHJlbGF4X2ZlbnZfc3RhdGUgKCk7CisrCisrICAgICAgICAgIC8qIENvbXB1dGUgeSA9IDEuNSAqIGIgLSBiLiAgVXNlcyBmZXdlciBjb25zdGFudHMgdGhhbiB5ID0gMC41ICogYi4gICovCisrICAgICAgICAgIHkgPSBGTVNVQiAodGhyZWVoYWxmLCBiLCBiKTsKKysKKysgICAgICAgICAgLyogSW5pdGlhbCBlc3RpbWF0ZS4gICovCisrICAgICAgICAgIF9fYXNtX18gKCJmcnNxcnRlICVbeF0sICVbYl1cbiIgOiBbeF0gIj1mIiAoeCkgOiBbYl0gImYiIChiKSk7CisrCisrICAgICAgICAgIC8qIEl0ZXJhdGUuICB4X3tuKzF9ID0geF9uICogKDEuNSAtIHkgKiAoeF9uICogeF9uKSkuICAqLworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKworKyAgICAgICAgICAvKiBBbGwgZG9uZS4gICovCisrICAgICAgICAgIGZlc2V0ZW52X3JlZ2lzdGVyIChmZSk7CisrICAgICAgICAgIHJldHVybiB4ICogYjsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAoYiA8IDApCisrICAgIHsKKysgICAgICAvKiBGb3Igc29tZSByZWFzb24sIHNvbWUgUG93ZXJQQzMyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50CisrICAgICAgICAgRkVfSU5WQUxJRF9TUVJULiAgKi8KKysjaWZkZWYgRkVfSU5WQUxJRF9TUVJUCisrICAgICAgZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRF9TUVJUKTsKKysKKysgICAgICBmZW52X3VuaW9uX3QgdSA9IHsgLmZlbnYgPSBmZWdldGVudl9yZWdpc3RlciAoKSB9OworKyAgICAgIGlmICgodS5sICYgRkVfSU5WQUxJRCkgPT0gMCkKKysjZW5kaWYKKysJZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRCk7CisrICAgICAgYiA9IGFfbmFuLnZhbHVlOworKyAgICB9CisrICByZXR1cm4gZl93YXNoZiAoYik7CisrfQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L0ltcGxpZXMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9JbXBsaWVzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjEwM2I0ZAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvSW1wbGllcworQEAgLTAsMCArMSBAQAorK3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTMwMGMzL2ZwdS9JbXBsaWVzIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTMwMGMzL2ZwdS9JbXBsaWVzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNjRkYjE3ZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTMwMGMzL2ZwdS9JbXBsaWVzCitAQCAtMCwwICsxLDIgQEAKKysjIGUzMDBjMyBpcyBhIHZhcmlhbnQgb2YgNjAzZSBzbyB1c2UgdGhlIHNhbWUgb3B0aW1pemF0aW9ucyBmb3Igc3FydAorK3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9JbXBsaWVzIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9JbXBsaWVzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uN2VhYzVmYworLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9JbXBsaWVzCitAQCAtMCwwICsxIEBACisrcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9JbXBsaWVzIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L0ltcGxpZXMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yNjRiMmE3CistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvSW1wbGllcworQEAgLTAsMCArMSBAQAorK3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9JbXBsaWVzIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L0ltcGxpZXMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5hMjU5MzQ0CistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvSW1wbGllcworQEAgLTAsMCArMSBAQAorK3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9JbXBsaWVzIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L0ltcGxpZXMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5hN2JjODU0CistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvSW1wbGllcworQEAgLTAsMCArMSBAQAorK3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9JbXBsaWVzIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L0ltcGxpZXMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wNGZmOGNjCistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvSW1wbGllcworQEAgLTAsMCArMSBAQAorK3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDYtcmVhZGxpYi1BZGQtT0VDT1JFX0tOT1dOX0lOVEVSUFJFVEVSX05BTUVTLXRvLWtub3duLS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNi1yZWFkbGliLUFkZC1PRUNPUkVfS05PV05fSU5URVJQUkVURVJfTkFNRVMtdG8ta25vd24tLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YzIyN2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDYtcmVhZGxpYi1BZGQtT0VDT1JFX0tOT1dOX0lOVEVSUFJFVEVSX05BTUVTLXRvLWtub3duLS5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDVlYzFiYzUxNzI4NTEyNzgyMzFjZTk0MGI2OGIzNWNlOWNiZjg1MDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoxMToyMiArMDAwMAorU3ViamVjdDogW1BBVENIIDA2LzI3XSByZWFkbGliOiBBZGQgT0VDT1JFX0tOT1dOX0lOVEVSUFJFVEVSX05BTUVTIHRvIGtub3duCisgbmFtZXMKKworVGhpcyBib2x0cyBpbiBhIGhvb2sgZm9yIE9FIHRvIHBhc3MgaXRzIG93biB2ZXJzaW9uIG9mIGludGVycHJldGVyCituYW1lcyBpbnRvIGdsaWJjIGVzcGVjaWFsbHkgZm9yIG11bHRpbGliIGNhc2UsIHdoZXJlIGl0IGRpZmZlcnMgZnJvbSBhbnkKK290aGVyIGRpc3Ryb3MKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogTGlhbmhhbyBMdSA8bGlhbmhhby5sdUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZWxmL3JlYWRsaWIuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvZWxmL3JlYWRsaWIuYyBiL2VsZi9yZWFkbGliLmMKK2luZGV4IDdmZDViOGEuLjJmNWRhOWYgMTAwNjQ0CistLS0gYS9lbGYvcmVhZGxpYi5jCisrKysgYi9lbGYvcmVhZGxpYi5jCitAQCAtNTEsNiArNTEsNyBAQCBzdGF0aWMgc3RydWN0IGtub3duX25hbWVzIGludGVycHJldGVyc1tdID0KKyAjaWZkZWYgU1lTREVQX0tOT1dOX0lOVEVSUFJFVEVSX05BTUVTCisgICBTWVNERVBfS05PV05fSU5URVJQUkVURVJfTkFNRVMKKyAjZW5kaWYKKysgIE9FQ09SRV9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUworIH07CisgCisgc3RhdGljIHN0cnVjdCBrbm93bl9uYW1lcyBrbm93bl9saWJzW10gPQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDctcHBjLXNxcnQtRml4LXVuZGVmaW5lZC1yZWZlcmVuY2UtdG8tX19zcXJ0X2Zpbml0ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNy1wcGMtc3FydC1GaXgtdW5kZWZpbmVkLXJlZmVyZW5jZS10by1fX3NxcnRfZmluaXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYzhmYmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDctcHBjLXNxcnQtRml4LXVuZGVmaW5lZC1yZWZlcmVuY2UtdG8tX19zcXJ0X2Zpbml0ZS5wYXRjaApAQCAtMCwwICsxLDIwOCBAQAorRnJvbSBlYTk4YjFhMTJiNWY3NzlmZDc5NDc4ZmY5MzBhNzllZjYwMzg3ODUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6MTU6MDcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwNy8yN10gcHBjL3NxcnQ6IEZpeCB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX3NxcnRfZmluaXRlJworCitvbiBwcGMgZml4ZXMgdGhlIGVycm9ycyBsaWtlIGJlbG93Cit8IC4vLmxpYnMvbGlicHVsc2Vjb3JlLTEuMS5zbzogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19zcXJ0X2Zpbml0ZScKK3wgY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0NoYW5nZUxvZworCisyMDEyLTAxLTA2ICBLaGVtIFJhaiAgPHJhai5raGVtQGdtYWlsLmNvbT4KKworICAgICAgICAqIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYzogQWRkIF9fKl9maW5pdGUgYWxpYXMuCisgICAgICAgIFJlbW92ZSBjcnVmdC4KKyAgICAgICAgKiBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYzogRGl0dG8uCisgICAgICAgICogc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYzogRGl0dG8uCisgICAgICAgICogc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmM6IERpdHRvLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYyAgICB8IDcgKy0tLS0tLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jICAgfCA3ICstLS0tLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMgIHwgMSArCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYyB8IDEgKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jICAgfCAxICsKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMgIHwgMSArCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMgICB8IDEgKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYyAgfCAxICsKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYyAgIHwgNyArLS0tLS0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jICB8IDcgKy0tLS0tLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jICAgfCAxICsKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMgIHwgMSArCisgMTIgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYworaW5kZXggNzFlNTE2ZC4uMTc5NWZkNiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMKK0BAIC0zOSwxNCArMzksOCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKyAgICBXZSBmaW5kIHRoZSBhY3R1YWwgc3F1YXJlIHJvb3QgYW5kIGhhbGYgb2YgaXRzIHJlY2lwcm9jYWwKKyAgICBzaW11bHRhbmVvdXNseS4gICovCisgCistI2lmZGVmIF9fU1REQ19fCisgZG91YmxlCisgX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorLSNlbHNlCistZG91YmxlCistX19pZWVlNzU0X3NxcnQgKGIpCistICAgICBkb3VibGUgYjsKKy0jZW5kaWYKKyB7CisgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorICAgICB7CitAQCAtMTMyLDMgKzEyNiw0IEBAIF9faWVlZTc1NF9zcXJ0IChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoIChiKTsKKyB9Cisrc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jCitpbmRleCAyNmZhMDY3Li5hOTE3ZjMxIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jCitAQCAtMzcsMTQgKzM3LDggQEAgc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKyAgICBXZSBmaW5kIHRoZSByZWNpcHJvY2FsIHNxdWFyZSByb290IGFuZCB1c2UgdGhhdCB0byBjb21wdXRlIHRoZSBhY3R1YWwKKyAgICBzcXVhcmUgcm9vdC4gICovCisgCistI2lmZGVmIF9fU1REQ19fCisgZmxvYXQKKyBfX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCistI2Vsc2UKKy1mbG9hdAorLV9faWVlZTc1NF9zcXJ0ZiAoYikKKy0gICAgIGZsb2F0IGI7CistI2VuZGlmCisgeworICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKyAgICAgeworQEAgLTk5LDMgKzkzLDQgQEAgX19pZWVlNzU0X3NxcnRmIChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoZiAoYik7CisgfQorK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMKK2luZGV4IDcxZTUxNmQuLmZjNGE3NDkgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYworQEAgLTEzMiwzICsxMzIsNCBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaCAoYik7CisgfQorK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMKK2luZGV4IDI2ZmEwNjcuLjlkMTc1MTIgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jCitAQCAtOTksMyArOTksNCBAQCBfX2llZWU3NTRfc3FydGYgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2hmIChiKTsKKyB9Cisrc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMKK2luZGV4IDcxZTUxNmQuLmZjNGE3NDkgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMKK0BAIC0xMzIsMyArMTMyLDQgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2ggKGIpOworIH0KKytzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYworaW5kZXggMjZmYTA2Ny4uOWQxNzUxMiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtOTksMyArOTksNCBAQCBfX2llZWU3NTRfc3FydGYgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2hmIChiKTsKKyB9Cisrc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKK2luZGV4IDcxZTUxNmQuLmZjNGE3NDkgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKK0BAIC0xMzIsMyArMTMyLDQgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2ggKGIpOworIH0KKytzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYworaW5kZXggMjZmYTA2Ny4uOWQxNzUxMiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtOTksMyArOTksNCBAQCBfX2llZWU3NTRfc3FydGYgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2hmIChiKTsKKyB9Cisrc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMKK2luZGV4IDcxZTUxNmQuLjE3OTVmZDYgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMKK0BAIC0zOSwxNCArMzksOCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKyAgICBXZSBmaW5kIHRoZSBhY3R1YWwgc3F1YXJlIHJvb3QgYW5kIGhhbGYgb2YgaXRzIHJlY2lwcm9jYWwKKyAgICBzaW11bHRhbmVvdXNseS4gICovCisgCistI2lmZGVmIF9fU1REQ19fCisgZG91YmxlCisgX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorLSNlbHNlCistZG91YmxlCistX19pZWVlNzU0X3NxcnQgKGIpCistICAgICBkb3VibGUgYjsKKy0jZW5kaWYKKyB7CisgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorICAgICB7CitAQCAtMTMyLDMgKzEyNiw0IEBAIF9faWVlZTc1NF9zcXJ0IChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoIChiKTsKKyB9Cisrc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMKK2luZGV4IDI2ZmEwNjcuLmE5MTdmMzEgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYworQEAgLTM3LDE0ICszNyw4IEBAIHN0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisgICAgV2UgZmluZCB0aGUgcmVjaXByb2NhbCBzcXVhcmUgcm9vdCBhbmQgdXNlIHRoYXQgdG8gY29tcHV0ZSB0aGUgYWN0dWFsCisgICAgc3F1YXJlIHJvb3QuICAqLworIAorLSNpZmRlZiBfX1NURENfXworIGZsb2F0CisgX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorLSNlbHNlCistZmxvYXQKKy1fX2llZWU3NTRfc3FydGYgKGIpCistICAgICBmbG9hdCBiOworLSNlbmRpZgorIHsKKyAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisgICAgIHsKK0BAIC05OSwzICs5Myw0IEBAIF9faWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaGYgKGIpOworIH0KKytzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYworaW5kZXggNzFlNTE2ZC4uZmM0YTc0OSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYworQEAgLTEzMiwzICsxMzIsNCBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaCAoYik7CisgfQorK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jCitpbmRleCAyNmZhMDY3Li45ZDE3NTEyIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC05OSwzICs5OSw0IEBAIF9faWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaGYgKGIpOworIH0KKytzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwOC1fX2llZWU3NTRfc3FydC1mLWFyZS1ub3ctaW5saW5lLWZ1bmN0aW9ucy1hbmQtY2FsbC1vLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA4LV9faWVlZTc1NF9zcXJ0LWYtYXJlLW5vdy1pbmxpbmUtZnVuY3Rpb25zLWFuZC1jYWxsLW8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNmYTkzMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwOC1fX2llZWU3NTRfc3FydC1mLWFyZS1ub3ctaW5saW5lLWZ1bmN0aW9ucy1hbmQtY2FsbC1vLnBhdGNoCkBAIC0wLDAgKzEsMzg3IEBACitGcm9tIDI0NTZlYTQ0YWVlZWRhZTg3ZWRiNTIyZjc3YTc5NjlkNjM2Mzk5YjAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoxNjozOCArMDAwMAorU3ViamVjdDogW1BBVENIIDA4LzI3XSBfX2llZWU3NTRfc3FydHssZn0gYXJlIG5vdyBpbmxpbmUgZnVuY3Rpb25zIGFuZCBjYWxsCisgb3V0IF9fc2xvdyB2ZXJzaW9ucworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMgICAgfCAxMiArKysrKysrKysrLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYyAgIHwgIDggKysrKysrKy0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMgIHwgMTQgKysrKysrKysrKystLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jIHwgMTIgKysrKysrKysrKy0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMgICB8IDE0ICsrKysrKysrKysrLS0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jICB8IDEyICsrKysrKysrKystLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jICAgfCAgOCArKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYyAgfCAgOCArKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jICAgfCAxMiArKysrKysrKysrLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMgIHwgIDkgKysrKysrKystCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMgICB8IDE0ICsrKysrKysrKysrLS0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jICB8IDEyICsrKysrKysrKystLQorIDEyIGZpbGVzIGNoYW5nZWQsIDExNCBpbnNlcnRpb25zKCspLCAyMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jCitpbmRleCAxNzk1ZmQ2Li5kYWE4M2YzIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYworQEAgLTQwLDcgKzQwLDcgQEAgc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisgICAgc2ltdWx0YW5lb3VzbHkuICAqLworIAorIGRvdWJsZQorLV9faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKyB7CisgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorICAgICB7CitAQCAtNzcsNyArNzcsNyBAQCBfX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisgCisgICAgICAgICAgIC8qIEhhbmRsZSBzbWFsbCBudW1iZXJzIGJ5IHNjYWxpbmcuICAqLworICAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoKHUucGFydHMubXN3ICYgMHg3ZmYwMDAwMCkgPD0gMHgwMjAwMDAwMCwgMCkpCistICAgICAgICAgICAgcmV0dXJuIF9faWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKysgICAgICAgICAgICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisgCisgI2RlZmluZSBGTUFERChhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK0BAIC0xMjYsNCArMTI2LDEyIEBAIF9faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaCAoYik7CisgfQorKworKyN1bmRlZiBfX2llZWU3NTRfc3FydAorK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChkb3VibGUgeCkKKyt7CisrICAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnQgKHgpOworK30KKysKKyBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMKK2luZGV4IGE5MTdmMzEuLmI4MTJjZjEgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMKK0BAIC0zOCw3ICszOCw3IEBAIHN0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisgICAgc3F1YXJlIHJvb3QuICAqLworIAorIGZsb2F0CistX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorK19fc2xvd19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorIHsKKyAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisgICAgIHsKK0BAIC05Myw0ICs5MywxMCBAQCBfX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2hmIChiKTsKKyB9CisrI3VuZGVmIF9faWVlZTc1NF9zcXJ0ZgorK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChmbG9hdCB4KQorK3sKKysgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoeCk7CisrfQorIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMKK2luZGV4IGZjNGE3NDkuLjcwMzhhNzAgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYworQEAgLTQxLDEwICs0MSwxMCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKyAKKyAjaWZkZWYgX19TVERDX18KKyBkb3VibGUKKy1fX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisrX19zbG93X2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisgI2Vsc2UKKyBkb3VibGUKKy1fX2llZWU3NTRfc3FydCAoYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0IChiKQorICAgICAgZG91YmxlIGI7CisgI2VuZGlmCisgeworQEAgLTgzLDcgKzgzLDcgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgCisgICAgICAgICAgIC8qIEhhbmRsZSBzbWFsbCBudW1iZXJzIGJ5IHNjYWxpbmcuICAqLworICAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoKHUucGFydHMubXN3ICYgMHg3ZmYwMDAwMCkgPD0gMHgwMjAwMDAwMCwgMCkpCistICAgICAgICAgICAgcmV0dXJuIF9faWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKysgICAgICAgICAgICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisgCisgI2RlZmluZSBGTUFERChhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK0BAIC0xMzIsNCArMTMyLDEyIEBAIF9faWVlZTc1NF9zcXJ0IChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoIChiKTsKKyB9CisrCisrI3VuZGVmIF9faWVlZTc1NF9zcXJ0CisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGRvdWJsZSB4KQorK3sKKysgICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydCAoeCk7CisrfQorKworIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMKK2luZGV4IDlkMTc1MTIuLjEwZGUxZjAgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jCitAQCAtMzksMTAgKzM5LDEwIEBAIHN0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisgCisgI2lmZGVmIF9fU1REQ19fCisgZmxvYXQKKy1fX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisrX19zbG93X2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisgI2Vsc2UKKyBmbG9hdAorLV9faWVlZTc1NF9zcXJ0ZiAoYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgIGZsb2F0IGI7CisgI2VuZGlmCisgeworQEAgLTk5LDQgKzk5LDEyIEBAIF9faWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaGYgKGIpOworIH0KKysKKysjdW5kZWYgX19pZWVlNzU0X3NxcnRmCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGZsb2F0IHgpCisreworKyAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnRmICh4KTsKKyt9CisrCisgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMKK2luZGV4IGZjNGE3NDkuLjcwMzhhNzAgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMKK0BAIC00MSwxMCArNDEsMTAgQEAgc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisgCisgI2lmZGVmIF9fU1REQ19fCisgZG91YmxlCistX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorK19fc2xvd19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorICNlbHNlCisgZG91YmxlCistX19pZWVlNzU0X3NxcnQgKGIpCisrX19zbG93X2llZWU3NTRfc3FydCAoYikKKyAgICAgIGRvdWJsZSBiOworICNlbmRpZgorIHsKK0BAIC04Myw3ICs4Myw3IEBAIF9faWVlZTc1NF9zcXJ0IChiKQorIAorICAgICAgICAgICAvKiBIYW5kbGUgc21hbGwgbnVtYmVycyBieSBzY2FsaW5nLiAgKi8KKyAgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1LnBhcnRzLm1zdyAmIDB4N2ZmMDAwMDApIDw9IDB4MDIwMDAwMDAsIDApKQorLSAgICAgICAgICAgIHJldHVybiBfX2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisrICAgICAgICAgICAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworIAorICNkZWZpbmUgRk1BREQoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitAQCAtMTMyLDQgKzEzMiwxMiBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaCAoYik7CisgfQorKworKyN1bmRlZiBfX2llZWU3NTRfc3FydAorK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChkb3VibGUgeCkKKyt7CisrICAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnQgKHgpOworK30KKysKKyBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYworaW5kZXggOWQxNzUxMi4uMTBkZTFmMCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtMzksMTAgKzM5LDEwIEBAIHN0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisgCisgI2lmZGVmIF9fU1REQ19fCisgZmxvYXQKKy1fX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisrX19zbG93X2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisgI2Vsc2UKKyBmbG9hdAorLV9faWVlZTc1NF9zcXJ0ZiAoYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgIGZsb2F0IGI7CisgI2VuZGlmCisgeworQEAgLTk5LDQgKzk5LDEyIEBAIF9faWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaGYgKGIpOworIH0KKysKKysjdW5kZWYgX19pZWVlNzU0X3NxcnRmCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGZsb2F0IHgpCisreworKyAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnRmICh4KTsKKyt9CisrCisgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKK2luZGV4IGZjNGE3NDkuLjFjMzQyNDQgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKK0BAIC0xMzIsNCArMTMyLDEyIEBAIF9faWVlZTc1NF9zcXJ0IChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoIChiKTsKKyB9CisrCisrI3VuZGVmIF9faWVlZTc1NF9zcXJ0CisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGRvdWJsZSB4KQorK3sKKysgICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydCAoeCk7CisrfQorKworIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCitpbmRleCA5ZDE3NTEyLi44MTI2NTM1IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC05OSw0ICs5OSwxMiBAQCBfX2llZWU3NTRfc3FydGYgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2hmIChiKTsKKyB9CisrCisrI3VuZGVmIF9faWVlZTc1NF9zcXJ0ZgorK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChmbG9hdCB4KQorK3sKKysgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoeCk7CisrfQorKworIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jCitpbmRleCAxNzk1ZmQ2Li4xM2E4MTk3IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jCitAQCAtNDAsNyArNDAsNyBAQCBzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKyAgICBzaW11bHRhbmVvdXNseS4gICovCisgCisgZG91YmxlCistX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorK19fc2xvd19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorIHsKKyAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisgICAgIHsKK0BAIC03Nyw3ICs3Nyw3IEBAIF9faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKyAKKyAgICAgICAgICAgLyogSGFuZGxlIHNtYWxsIG51bWJlcnMgYnkgc2NhbGluZy4gICovCisgICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgodS5wYXJ0cy5tc3cgJiAweDdmZjAwMDAwKSA8PSAweDAyMDAwMDAwLCAwKSkKKy0gICAgICAgICAgICByZXR1cm4gX19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworKyAgICAgICAgICAgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKyAKKyAjZGVmaW5lIEZNQUREKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorQEAgLTEyNiw0ICsxMjYsMTIgQEAgX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoIChiKTsKKyB9CisrCisrI3VuZGVmIF9faWVlZTc1NF9zcXJ0CisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGRvdWJsZSB4KQorK3sKKysgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0ICh4KTsKKyt9CisrCisgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMKK2luZGV4IGE5MTdmMzEuLmZhZTJkODEgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYworQEAgLTM4LDcgKzM4LDcgQEAgc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKyAgICBzcXVhcmUgcm9vdC4gICovCisgCisgZmxvYXQKKy1fX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisrX19zbG93X2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisgeworICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKyAgICAgeworQEAgLTkzLDQgKzkzLDExIEBAIF9faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaGYgKGIpOworIH0KKysjdW5kZWYgX19pZWVlNzU0X3NxcnRmCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGZsb2F0IHgpCisreworKyAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnRmICh4KTsKKyt9CisrCisgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMKK2luZGV4IGZjNGE3NDkuLjcwMzhhNzAgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMKK0BAIC00MSwxMCArNDEsMTAgQEAgc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisgCisgI2lmZGVmIF9fU1REQ19fCisgZG91YmxlCistX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorK19fc2xvd19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorICNlbHNlCisgZG91YmxlCistX19pZWVlNzU0X3NxcnQgKGIpCisrX19zbG93X2llZWU3NTRfc3FydCAoYikKKyAgICAgIGRvdWJsZSBiOworICNlbmRpZgorIHsKK0BAIC04Myw3ICs4Myw3IEBAIF9faWVlZTc1NF9zcXJ0IChiKQorIAorICAgICAgICAgICAvKiBIYW5kbGUgc21hbGwgbnVtYmVycyBieSBzY2FsaW5nLiAgKi8KKyAgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1LnBhcnRzLm1zdyAmIDB4N2ZmMDAwMDApIDw9IDB4MDIwMDAwMDAsIDApKQorLSAgICAgICAgICAgIHJldHVybiBfX2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisrICAgICAgICAgICAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworIAorICNkZWZpbmUgRk1BREQoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitAQCAtMTMyLDQgKzEzMiwxMiBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaCAoYik7CisgfQorKworKyN1bmRlZiBfX2llZWU3NTRfc3FydAorK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChkb3VibGUgeCkKKyt7CisrICAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnQgKHgpOworK30KKysKKyBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYworaW5kZXggOWQxNzUxMi4uMTBkZTFmMCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtMzksMTAgKzM5LDEwIEBAIHN0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisgCisgI2lmZGVmIF9fU1REQ19fCisgZmxvYXQKKy1fX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisrX19zbG93X2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisgI2Vsc2UKKyBmbG9hdAorLV9faWVlZTc1NF9zcXJ0ZiAoYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgIGZsb2F0IGI7CisgI2VuZGlmCisgeworQEAgLTk5LDQgKzk5LDEyIEBAIF9faWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaGYgKGIpOworIH0KKysKKysjdW5kZWYgX19pZWVlNzU0X3NxcnRmCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGZsb2F0IHgpCisreworKyAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnRmICh4KTsKKyt9CisrCisgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDktUXVvdGUtZnJvbS1idWctMTQ0My13aGljaC1leHBsYWlucy13aGF0LXRoZS1wYXRjaC1kby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwOS1RdW90ZS1mcm9tLWJ1Zy0xNDQzLXdoaWNoLWV4cGxhaW5zLXdoYXQtdGhlLXBhdGNoLWRvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNTQ3NTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDktUXVvdGUtZnJvbS1idWctMTQ0My13aGljaC1leHBsYWlucy13aGF0LXRoZS1wYXRjaC1kby5wYXRjaApAQCAtMCwwICsxLDYyIEBACitGcm9tIGFjZjdhMDI4ODE3ZTcxZWI5OWQ3ODUwMzc2NTlhYmQ0ZDEyMGZmZTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoyMDowOSArMDAwMAorU3ViamVjdDogW1BBVENIIDA5LzI3XSBRdW90ZSBmcm9tIGJ1ZyAxNDQzIHdoaWNoIGV4cGxhaW5zIHdoYXQgdGhlIHBhdGNoIGRvZXMKKyA6CisKKyAgV2UgYnVpbGQgc29tZSByYW5kb20gcHJvZ3JhbSBhbmQgbGluayBpdCB3aXRoIC1sdXN0LiAgV2hlbiB3ZSBydW4gaXQsCisgIGl0IGRpZXMgd2l0aCBhIFNJR1NFR1YgYmVmb3JlIHJlYWNoaW5nIG1haW4oKS4KKworICBMaWJ1c3Quc28gZGVwZW5kcyBvbiBsaWJ1cmN1LWJwLnNvIGZyb20gdGhlIHVzZXJtb2RlLXJjdSBwYWNrYWdlLgorICBBbHRob3VnaCBsaWJ1c3Quc28gaXMgbm90IHByZWxpbmtlZCwgbGlidXJjdS1icC5zbyBJUyBwcmVsaW5rZWQ7IHRoaXMKKyAgaXMgY3JpdGljYWwuCisKKyAgTGlidXN0LnNvIHVzZXMgYSBUTFMgLyBfX3RocmVhZCB2YXJpYWJsZSB0aGF0IGlzIGRlZmluZWQgaW4gbGlidXJjdS0KKyAgYnAuc28uICBUaGVyZSBhcmUgc3BlY2lhbCBBUk0tc3BlY2lmaWMgcmVsb2NhdGlvbiB0eXBlcyB0aGF0IGFsbG93IHR3bworICBzaGFyZWQgbGlicmFyaWVzIHRvIHNoYXJlIHRocmVhZC1zcGVjaWZpYyBkYXRhLiAgVGhpcyBpcyBjcml0aWNhbCB0b28uCisKKyAgT25lIG1vcmUgY3JpdGljYWwgaXNzdWU6IGFsdGhvdWdoIGxpYnVyY3UtYnAuc28gaXMgcHJlbGlua2VkLCB3ZSBjYW4ndAorICBsb2FkIGl0IGF0IGl0cyBwcmVsaW5rZWQgYWRkcmVzcywgYmVjYXVzZSB3ZSBhbHNvIGxpbmsgYWdhaW5zdAorICBsaWJydC5zbywgYW5kIGxpYnJ0LnNvIHVzZXMgdGhhdCBhZGRyZXNzLgorCisgIFRoZSBkeW5hbWljIGxpbmtlciBpcyBmb3JjZWQgdG8gcmVsaW5rIGxpYnVyY3UtYnAuc28gYXQgYSBkaWZmZXJlbnQKKyAgYWRkcmVzcy4gIEluIHRoZSBjb3Vyc2Ugb2YgcmVsaW5raW5nLCBpdCBwcm9jZXNzZXMgdGhlIHNwZWNpYWwgQVJNCisgIHJlbG9jYXRpb24gcmVjb3JkIG1lbnRpb25lZCBhYm92ZS4gIFRoZSBwcmVsaW5rZXIgaGFzIGFscmVhZHkgZmlsbGVkCisgIGluIHRoZSBpbmZvcm1hdGlvbiwgd2hpY2ggaXMgYSBzaG9ydCBvZmZzZXQgaW50byBhIHRhYmxlIG9mIHRocmVhZC0KKyAgc3BlY2lmaWMgZGF0YSB0aGF0IGlzIGFsbG9jYXRlZCBwZXItdGhyZWFkIGZvciBlYWNoIGxpYnJhcnkgdGhhdCB1c2VzCisgIFRMUy4gIEJlY2F1c2UgdGhlIG5vcm1hbCBiZWhhdmlvciBvZiBhIHJlbG9jYXRpb24gaXMgdG8gYWRkIHRoZSBzeW1ib2wKKyAgdmFsdWUgdG8gYW4gYWRkZW5kIHN0b3JlZCBhdCB0aGUgYWRkcmVzcyBiZWluZyByZWxvY2F0ZWQsIHdlIGVuZCB1cAorICBhZGRpbmcgdGhlIHNob3J0IG9mZnNldCB0byBpdHNlbGYsIGRvdWJsaW5nIGl0LgorCisgIE5vdyB3ZSBoYXZlIGFuIGF3a3dhcmQgc2l0dWF0aW9uLiAgVGhlIGxpYnVzdC5zbyBsaWJyYXJ5IGRvZXNuJ3Qga25vdworICBhYm91dCB0aGUgYWRkZW5kLCBzbyBpdHMgVExTIGRhdGEgZm9yIHRoaXMgZWxlbWVudCBpcyBjb3JyZWN0LiAgVGhlCisgIGxpYnVyY3UtYnAuc28gbGlicmFyeSBoYXMgYSBkaWZmZXJlbnQgb2Zmc2V0IGZvciB0aGUgZWxlbWVudC4gIFdoZW4gd2UKKyAgZ28gdG8gaW5pdGlhbGl6ZSB0aGUgZWxlbWVudCBmb3IgdGhlIGZpcnN0IHRpbWUgaW4gbGlidXJjdS1icC5zbywgd2UKKyAgd3JpdGUgdGhlIGFkZHJlc3Mgb2YgdGhlIHJlc3VsdCBhdCB0aGUgZG91YmxlZCAoYnJva2VuKSBvZmZzZXQuCisgIExhdGVyLCB3aGVuIHdlIHJlZmVyIHRvIHRoZSBhZGRyZXNzIGZyb20gbGlidXN0LnNvLCB3ZSBjaGVjayB0aGUgdmFsdWUKKyAgYXQgdGhlIGNvcnJlY3Qgb2Zmc2V0LCBidXQgaXQncyBOVUxMLCBzbyB3ZSBlYXQgaG90IFNJR1NFR1YuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgRGludSA8YW5kcmVpLmFkcmlhbnguZGludUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3lzZGVwcy9hcm0vZGwtbWFjaGluZS5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9hcm0vZGwtbWFjaGluZS5oIGIvc3lzZGVwcy9hcm0vZGwtbWFjaGluZS5oCitpbmRleCA2ZmIyMGJkLi44ODA1NTM3IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9hcm0vZGwtbWFjaGluZS5oCisrKysgYi9zeXNkZXBzL2FybS9kbC1tYWNoaW5lLmgKK0BAIC00OTksNyArNDk5LDcgQEAgZWxmX21hY2hpbmVfcmVsIChzdHJ1Y3QgbGlua19tYXAgKm1hcCwgY29uc3QgRWxmMzJfUmVsICpyZWxvYywKKyAKKyAJY2FzZSBSX0FSTV9UTFNfRFRQT0ZGMzI6CisgCSAgaWYgKHN5bSAhPSBOVUxMKQorLQkgICAgKnJlbG9jX2FkZHIgKz0gc3ltLT5zdF92YWx1ZTsKKysJICAgICpyZWxvY19hZGRyID0gc3ltLT5zdF92YWx1ZTsKKyAJICBicmVhazsKKyAKKyAJY2FzZSBSX0FSTV9UTFNfVFBPRkYzMjoKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDEwLWVnbGliYy1ydW4tbGlibS1lcnItdGFiLnBsLXdpdGgtc3BlY2lmaWMtZGlycy1pbi1TLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDEwLWVnbGliYy1ydW4tbGlibS1lcnItdGFiLnBsLXdpdGgtc3BlY2lmaWMtZGlycy1pbi1TLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MWU1NzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTAtZWdsaWJjLXJ1bi1saWJtLWVyci10YWIucGwtd2l0aC1zcGVjaWZpYy1kaXJzLWluLVMucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRnJvbSAwMTczMjJlZTI4YzE1NzljZTZjODE5MDQ4NDJhYWFkYTljODI0MDNjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGluZyBMaXUgPGIyODQ5NUBmcmVlc2NhbGUuY29tPgorRGF0ZTogV2VkLCAxOSBEZWMgMjAxMiAwNDozOTo1NyAtMDYwMAorU3ViamVjdDogW1BBVENIIDEwLzI3XSBlZ2xpYmM6IHJ1biBsaWJtLWVyci10YWIucGwgd2l0aCBzcGVjaWZpYyBkaXJzIGluICR7U30KKworbGlibS1lcnItdGFiLnBsIHdpbGwgcGFyc2UgYWxsIHRoZSBmaWxlcyBuYW1lZCAibGlibS10ZXN0LXVscHMiCitpbiB0aGUgZ2l2ZW4gZGlyIHJlY3Vyc2l2ZWx5LiBUbyBhdm9pZCBwYXJzaW5nIHRoZSBvbmUgaW4KKyR7U30vLnBjLyAoaXQgZG9lcyBleGlzdCBhZnRlciBlZ2xpYmMgYWRkcyBhYXJjaDY0IHN1cHBvcnQsCiske1N9Ly5wYy9hYXJjaDY0LTAwMDEtZ2xpYmMtZnNmLXYxLWVhZjZmMjA1LnBhdGNoL3BvcnRzL3N5c2RlcHMvCithYXJjaDY0L2xpYm0tdGVzdC11bHBzKSwgcnVuIGxpYm0tZXJyLXRhYi5wbCB3aXRoIHNwZWNpZmljIGRpcnMKK2luICR7U30uCisKK1Vwc3RyZWFtLVN0YXR1czogaW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFRpbmcgTGl1IDxiMjg0OTVAZnJlZXNjYWxlLmNvbT4KKy0tLQorIG1hbnVhbC9NYWtlZmlsZSB8IDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbWFudWFsL01ha2VmaWxlIGIvbWFudWFsL01ha2VmaWxlCitpbmRleCA1MzgyMjA4Li42YjcwMWIwIDEwMDY0NAorLS0tIGEvbWFudWFsL01ha2VmaWxlCisrKysgYi9tYW51YWwvTWFrZWZpbGUKK0BAIC0xMDUsNyArMTA1LDggQEAgJChvYmpwZngpbGlibS1lcnIudGV4aTogJChvYmpwZngpc3RhbXAtbGlibS1lcnIKKyAkKG9ianBmeClzdGFtcC1saWJtLWVycjogbGlibS1lcnItdGFiLnBsICQod2lsZGNhcmQgJChmb3JlYWNoIGRpciwkKHN5c2RpcnMpLFwKKyAJCQkJCQkgICAgICQoZGlyKS9saWJtLXRlc3QtdWxwcykpCisgCXB3ZD1gcHdkYDsgXAorLQkkKFBFUkwpICQ8ICQkcHdkLy4uID4gJChvYmpwZngpbGlibS1lcnItdG1wCisrCSQoUEVSTCkgJDwgJCRwd2QvLi4vcG9ydHMgPiAkKG9ianBmeClsaWJtLWVyci10bXAKKysJJChQRVJMKSAkPCAkJHB3ZC8uLi9zeXNkZXBzID4+ICQob2JqcGZ4KWxpYm0tZXJyLXRtcAorIAkkKG1vdmUtaWYtY2hhbmdlKSAkKG9ianBmeClsaWJtLWVyci10bXAgJChvYmpwZngpbGlibS1lcnIudGV4aQorIAl0b3VjaCAkQAorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTEtX19pZWVlNzU0X3NxcnQtZi1hcmUtbm93LWlubGluZS1mdW5jdGlvbnMtYW5kLWNhbGwtby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMS1fX2llZWU3NTRfc3FydC1mLWFyZS1ub3ctaW5saW5lLWZ1bmN0aW9ucy1hbmQtY2FsbC1vLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YTExMmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTEtX19pZWVlNzU0X3NxcnQtZi1hcmUtbm93LWlubGluZS1mdW5jdGlvbnMtYW5kLWNhbGwtby5wYXRjaApAQCAtMCwwICsxLDYxIEBACitGcm9tIDFiZTQ1Zjg3MGViYmIwMjU5YmVhNTI1MGE2ZDJjMmZiY2IzMzQwOWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoyNDo0NiArMDAwMAorU3ViamVjdDogW1BBVENIIDExLzI3XSBfX2llZWU3NTRfc3FydHssZn0gYXJlIG5vdyBpbmxpbmUgZnVuY3Rpb25zIGFuZCBjYWxsCisgb3V0IF9fc2xvdyB2ZXJzaW9ucworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogY2h1bnJvbmcgZ3VvIDxCNDAyOTBAZnJlZXNjYWxlLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYyAgfCA2ICsrKy0tLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYyB8IDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYworaW5kZXggMWMzNDI0NC4uNzAzOGE3MCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYworQEAgLTQxLDEwICs0MSwxMCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKyAKKyAjaWZkZWYgX19TVERDX18KKyBkb3VibGUKKy1fX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisrX19zbG93X2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisgI2Vsc2UKKyBkb3VibGUKKy1fX2llZWU3NTRfc3FydCAoYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0IChiKQorICAgICAgZG91YmxlIGI7CisgI2VuZGlmCisgeworQEAgLTgzLDcgKzgzLDcgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgCisgICAgICAgICAgIC8qIEhhbmRsZSBzbWFsbCBudW1iZXJzIGJ5IHNjYWxpbmcuICAqLworICAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoKHUucGFydHMubXN3ICYgMHg3ZmYwMDAwMCkgPD0gMHgwMjAwMDAwMCwgMCkpCistICAgICAgICAgICAgcmV0dXJuIF9faWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKysgICAgICAgICAgICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisgCisgI2RlZmluZSBGTUFERChhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKK2luZGV4IDgxMjY1MzUuLjEwZGUxZjAgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYworQEAgLTM5LDEwICszOSwxMCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworIAorICNpZmRlZiBfX1NURENfXworIGZsb2F0CistX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorK19fc2xvd19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorICNlbHNlCisgZmxvYXQKKy1fX2llZWU3NTRfc3FydGYgKGIpCisrX19zbG93X2llZWU3NTRfc3FydGYgKGIpCisgICAgICBmbG9hdCBiOworICNlbmRpZgorIHsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDEyLU1ha2UtbGQtdmVyc2lvbi1vdXRwdXQtbWF0Y2hpbmctZ3Jvay1nb2xkLXMtb3V0cHV0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDEyLU1ha2UtbGQtdmVyc2lvbi1vdXRwdXQtbWF0Y2hpbmctZ3Jvay1nb2xkLXMtb3V0cHV0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2Nzc5MTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTItTWFrZS1sZC12ZXJzaW9uLW91dHB1dC1tYXRjaGluZy1ncm9rLWdvbGQtcy1vdXRwdXQucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorRnJvbSA0OTQ3MWFiMWY5MGUzOTJkYTk1MjBlZWE4MzFjZTg3MzFiZTlmYzhiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6MjU6NDUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxMi8yN10gTWFrZSBsZCAtLXZlcnNpb24gb3V0cHV0IG1hdGNoaW5nIGdyb2sgZ29sZCdzIG91dHB1dAorCithZGFwdGVkIGZyb20gZnJvbSB1cHN0cmVhbSBicmFuY2ggcm9sYW5kL2dvbGQtdnMtbGliYworCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUgICAgfCAyICstCisgY29uZmlndXJlLmFjIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA0NWNjN2NiLi43ZDcyOTlhIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC00NzA5LDcgKzQ3MDksNyBAQCBlbHNlCisgICAjIEZvdW5kIGl0LCBub3cgY2hlY2sgdGhlIHZlcnNpb24uCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHZlcnNpb24gb2YgJExEIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyB2ZXJzaW9uIG9mICRMRC4uLiAiID4mNjsgfQorLSAgYWNfcHJvZ192ZXJzaW9uPWAkTEQgLS12ZXJzaW9uIDI+JjEgfCBzZWQgLW4gJ3MvXi4qR05VIGxkLiogXChbMC05XVswLTldKlwuWzAtOS5dKlwpLiokL1wxL3AnYAorKyAgYWNfcHJvZ192ZXJzaW9uPWAkTEQgLS12ZXJzaW9uIDI+JjEgfCBzZWQgLW4gJ3MvXi4qR05VIFtCYmludXRpbHNkXVteLl0qIFwoWzAtOV1bMC05XSpcLlswLTkuXSpcKS4qJC9cMS9wJ2AKKyAgIGNhc2UgJGFjX3Byb2dfdmVyc2lvbiBpbgorICAgICAnJykgYWNfcHJvZ192ZXJzaW9uPSJ2LiA/Lj8/LCBiYWQiOyBhY192ZXJjX2ZhaWw9eWVzOzsKKyAgICAgMi4xWzAtOV1bMC05XSp8Mi4yWzItOV0qfDIuWzMtOV1bMC05XSp8WzMtOV0uKnxbMS05XVswLTldKikKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDdlOTM4M2EuLmE0NjdhNjkgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTk0MSw3ICs5NDEsNyBAQCBBQ19DSEVDS19QUk9HX1ZFUihBUywgJEFTLCAtLXZlcnNpb24sCisgCQkgIFsyLjFbMC05XVswLTldKnwyLjJbMi05XSp8Mi5bMy05XVswLTldKnxbMy05XS4qfFsxLTldWzAtOV0qXSwKKyAJCSAgQVM9OiBjcml0aWNfbWlzc2luZz0iJGNyaXRpY19taXNzaW5nIGFzIikKKyBBQ19DSEVDS19QUk9HX1ZFUihMRCwgJExELCAtLXZlcnNpb24sCistCQkgIFtHTlUgbGQuKiBcKFswLTldWzAtOV0qXC5bMC05Ll0qXCldLAorKwkJICBbR05VIFtCYmludXRpbHNkXVteLl0qIFwoWzAtOV1bMC05XSpcLlswLTkuXSpcKV0sCisgCQkgIFsyLjFbMC05XVswLTldKnwyLjJbMi05XSp8Mi5bMy05XVswLTldKnxbMy05XS4qfFsxLTldWzAtOV0qXSwKKyAJCSAgTEQ9OiBjcml0aWNfbWlzc2luZz0iJGNyaXRpY19taXNzaW5nIGxkIikKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDEzLXN5c2RlcHMtZ251LWNvbmZpZ3VyZS5hYy1oYW5kbGUtY29ycmVjdGx5LWxpYmNfY3Zfcm8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTMtc3lzZGVwcy1nbnUtY29uZmlndXJlLmFjLWhhbmRsZS1jb3JyZWN0bHktbGliY19jdl9yby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWZkYTlkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDEzLXN5c2RlcHMtZ251LWNvbmZpZ3VyZS5hYy1oYW5kbGUtY29ycmVjdGx5LWxpYmNfY3Zfcm8ucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSBiNTVlNDliMTk5YzQ2YTI3OGFiNjZiNmIxZTNlYWI0ODNiOTEzMTk3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6Mjc6MTAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxMy8yN10gc3lzZGVwcy9nbnUvY29uZmlndXJlLmFjOiBoYW5kbGUgY29ycmVjdGx5CisgJGxpYmNfY3Zfcm9vdHNiaW5kaXIKKworVXBzdHJlYW0tU3RhdHVzOlBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWF0dGhpZXUgQ3JhcGV0IDxNYXR0aGlldS5DcmFwZXRAaW5nZW5pY28uY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHN5c2RlcHMvZ251L2NvbmZpZ3VyZSAgICB8IDIgKy0KKyBzeXNkZXBzL2dudS9jb25maWd1cmUuYWMgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zeXNkZXBzL2dudS9jb25maWd1cmUgYi9zeXNkZXBzL2dudS9jb25maWd1cmUKK2luZGV4IDkyMzkyOTcuLmM1ZWQzY2EgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2dudS9jb25maWd1cmUKKysrKyBiL3N5c2RlcHMvZ251L2NvbmZpZ3VyZQorQEAgLTMyLDYgKzMyLDYgQEAgY2FzZSAiJHByZWZpeCIgaW4KKyAgIGVsc2UKKyAgICAgbGliY19jdl9sb2NhbHN0YXRlZGlyPSRsb2NhbHN0YXRlZGlyCisgICAgZmkKKy0gIGxpYmNfY3Zfcm9vdHNiaW5kaXI9L3NiaW4KKysgIHRlc3QgLW4gIiRsaWJjX2N2X3Jvb3RzYmluZGlyIiB8fCBsaWJjX2N2X3Jvb3RzYmluZGlyPS9zYmluCisgICA7OworIGVzYWMKK2RpZmYgLS1naXQgYS9zeXNkZXBzL2dudS9jb25maWd1cmUuYWMgYi9zeXNkZXBzL2dudS9jb25maWd1cmUuYWMKK2luZGV4IDYzNGZlNGQuLjNkYjE2OTcgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2dudS9jb25maWd1cmUuYWMKKysrKyBiL3N5c2RlcHMvZ251L2NvbmZpZ3VyZS5hYworQEAgLTIxLDYgKzIxLDYgQEAgY2FzZSAiJHByZWZpeCIgaW4KKyAgIGVsc2UKKyAgICAgbGliY19jdl9sb2NhbHN0YXRlZGlyPSRsb2NhbHN0YXRlZGlyCisgICAgZmkKKy0gIGxpYmNfY3Zfcm9vdHNiaW5kaXI9L3NiaW4KKysgIHRlc3QgLW4gIiRsaWJjX2N2X3Jvb3RzYmluZGlyIiB8fCBsaWJjX2N2X3Jvb3RzYmluZGlyPS9zYmluCisgICA7OworIGVzYWMKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE0LUFkZC11bnVzZWQtYXR0cmlidXRlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE0LUFkZC11bnVzZWQtYXR0cmlidXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYTVkMmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTQtQWRkLXVudXNlZC1hdHRyaWJ1dGUucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSAwMjI5ZDZjOWMwZTc3MjE3NzMxMThkNWFlMWQxNzJjMjY5YmM5ODI2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6Mjg6NDEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxNC8yN10gQWRkIHVudXNlZCBhdHRyaWJ1dGUKKworSGVscHMgaW4gYXZvaWRpbmcgZ2NjIHdhcm5pbmcgd2hlbiBoZWFkZXIgaXMgaXMgaW5jbHVkZWQgaW4KK2Egc291cmNlIGZpbGUgd2hpY2ggZG9lcyBub3QgdXNlIGJvdGggZnVuY3Rpb25zCisKKyAgICAgICAgKiBpY29udi9nY29udl9jaGFyc2V0LmggKHN0cmlwKToKKyAgICAgICAgQWRkIHVudXNlZCBhdHRyaWJ1dGUuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgaWNvbnYvZ2NvbnZfY2hhcnNldC5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvaWNvbnYvZ2NvbnZfY2hhcnNldC5oIGIvaWNvbnYvZ2NvbnZfY2hhcnNldC5oCitpbmRleCA4MDI5MGJjLi43ODkwYThlIDEwMDY0NAorLS0tIGEvaWNvbnYvZ2NvbnZfY2hhcnNldC5oCisrKysgYi9pY29udi9nY29udl9jaGFyc2V0LmgKK0BAIC0yMSw3ICsyMSw3IEBACisgI2luY2x1ZGUgPGxvY2FsZS5oPgorIAorIAorLXN0YXRpYyB2b2lkCisrc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCisgc3RyaXAgKGNoYXIgKndwLCBjb25zdCBjaGFyICpzKQorIHsKKyAgIGludCBzbGFzaF9jb3VudCA9IDA7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNS1XaGVuLWRpc2FibGluZy1TU0UtYWxzby1tYWtlLXN1cmUtdGhhdC1mcG1hdGgtaXMtbm90LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE1LVdoZW4tZGlzYWJsaW5nLVNTRS1hbHNvLW1ha2Utc3VyZS10aGF0LWZwbWF0aC1pcy1ub3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIyNjFjYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNS1XaGVuLWRpc2FibGluZy1TU0UtYWxzby1tYWtlLXN1cmUtdGhhdC1mcG1hdGgtaXMtbm90LnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gZjA1OGM4ODRkZDI2ZDEwYzk0NTUwY2E1MjUyZWQ2NTc2NjE0ZDY1OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDE5IEZlYiAyMDE1IDAzOjIzOjQ1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTUvMjddIFdoZW4gZGlzYWJsaW5nIFNTRSBhbHNvIG1ha2Ugc3VyZSB0aGF0IGZwbWF0aCBpcyBub3QKKyBzZXQgdG8gdXNlIFNTRSBhcyB3ZWxsCisKK1RoaXMgZml4ZXMgZXJyb3JzIHdoZW4gd2UgaW5qZWN0IHNzZSBvcHRpb25zIHRocm91Z2ggQ0ZMQUdTIGFuZCBub3cKK3RoYXQgd2UgaGF2ZSAtV2Vycm9yIHR1cm5lZCBvbiBieSBkZWZhdWx0IHRoaXMgd2FybmluZyB0dXJucyB0byBiZWNvbWUKK2Vycm9yIG9uIHg4NgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIHN5c2RlcHMveDg2L01ha2VmaWxlIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy94ODYvTWFrZWZpbGUgYi9zeXNkZXBzL3g4Ni9NYWtlZmlsZQoraW5kZXggMTlmNWVjYS4uODI3ZWE3MSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMveDg2L01ha2VmaWxlCisrKysgYi9zeXNkZXBzL3g4Ni9NYWtlZmlsZQorQEAgLTEsNiArMSw2IEBACisgaWZlcSAoJChzdWJkaXIpLGVsZikKKyBDRkxBR1MtLm9zICs9ICQoaWYgJChmaWx0ZXIgJChARiksJChwYXRzdWJzdCAlLCUub3MsJChhbGwtcnRsZC1yb3V0aW5lcykpKSxcCistCQkgICAtbW5vLXNzZSAtbW5vLW1teCkKKysJCSAgIC1tbm8tc3NlIC1tbm8tbW14IC1tZnBtYXRoPTM4NykKKyAKKyB0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KXRzdC1sZC1zc2UtdXNlLm91dAorICQob2JqcGZ4KXRzdC1sZC1zc2UtdXNlLm91dDogLi4vc3lzZGVwcy94ODYvdHN0LWxkLXNzZS11c2Uuc2ggJChvYmpwZngpbGQuc28KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE2LXllcy13aXRoaW4tdGhlLXBhdGgtc2V0cy13cm9uZy1jb25maWctdmFyaWFibGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE2LXllcy13aXRoaW4tdGhlLXBhdGgtc2V0cy13cm9uZy1jb25maWctdmFyaWFibGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OWU4YjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTYteWVzLXdpdGhpbi10aGUtcGF0aC1zZXRzLXdyb25nLWNvbmZpZy12YXJpYWJsZXMucGF0Y2gKQEAgLTAsMCArMSwyNjMgQEAKK0Zyb20gNzAxOTlmZTU5YzM4YjYyMWFiNDEyMWQ3YTU1NzE5YjJiMjliMzZkZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjMxOjA2ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTYvMjddICd5ZXMnIHdpdGhpbiB0aGUgcGF0aCBzZXRzIHdyb25nIGNvbmZpZyB2YXJpYWJsZXMKKworSXQgc2VlbXMgdGhhdCB0aGUgJ0FDX0VHUkVQX0NQUCh5ZXMuLi4nIGV4YW1wbGUgaXMgcXVpdGUgcG9wdWxhcgorYnV0IGJlaW5nIHN1Y2ggYSBzaG9ydCB3b3JkIHRvIGdyZXAgaXQgaXMgbGlrZWx5IHRvIHByb2R1Y2UKK2ZhbHNlLXBvc2l0aXZlIG1hdGNoZXMgd2l0aCB0aGUgcGF0aCBpdCBpcyBjb25maWd1cmVkIGludG8uCisKK1RoZSBjaGFuZ2UgaXMgdG8gdXNlIGEgbW9yZSBlbGFib3JhdGVkIHN0cmluZyB0byBncmVwIGZvci4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2xpYmMtYWxwaGFAc291cmNld2FyZS5vcmddCisKK1NpZ25lZC1vZmYtYnk6IEJlbmphbWluIEVzcXVpdmVsIDxiZW5qYW1pbi5lc3F1aXZlbEBsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3lzZGVwcy9hYXJjaDY0L2NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNCArKy0tCisgc3lzZGVwcy9hYXJjaDY0L2NvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNCArKy0tCisgc3lzZGVwcy9hcm0vY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNCArKy0tCisgc3lzZGVwcy9hcm0vY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNCArKy0tCisgc3lzZGVwcy9taXBzL2NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNCArKy0tCisgc3lzZGVwcy9taXBzL2NvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNCArKy0tCisgc3lzZGVwcy9uaW9zMi9jb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNCArKy0tCisgc3lzZGVwcy9uaW9zMi9jb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNCArKy0tCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUgICAgICAgICAgICAgICAgIHwgNCArKy0tCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUuYWMgICAgICAgICAgICAgIHwgNCArKy0tCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlICAgIHwgOCArKysrLS0tLQorIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2NvbmZpZ3VyZS5hYyB8IDggKysrKy0tLS0KKyAxMiBmaWxlcyBjaGFuZ2VkLCAyOCBpbnNlcnRpb25zKCspLCAyOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3N5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUgYi9zeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlCitpbmRleCA1YmQzNTVhLi4zYmM1NTM3IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9hYXJjaDY0L2NvbmZpZ3VyZQorKysrIGIvc3lzZGVwcy9hYXJjaDY0L2NvbmZpZ3VyZQorQEAgLTE0OCwxMiArMTQ4LDEyIEBAIGVsc2UKKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgI2lmZGVmIF9fQUFSQ0g2NEVCX18KKy0gICAgICAgICAgICAgICAgICAgICAgeWVzCisrICAgICAgICAgICAgICAgICAgICAgIGlzX2FhcmNoNjRfYmUKKyAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAKKyBfQUNFT0YKKyBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKysgICRFR1JFUCAiaXNfYWFyY2g2NF9iZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgIGxpYmNfY3ZfYWFyY2g2NF9iZT15ZXMKKyBlbHNlCisgICBsaWJjX2N2X2FhcmNoNjRfYmU9bm8KK2RpZmYgLS1naXQgYS9zeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlLmFjIGIvc3lzZGVwcy9hYXJjaDY0L2NvbmZpZ3VyZS5hYworaW5kZXggNzg1MWRkNC4uNmU5MjM4MSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUuYWMKKysrKyBiL3N5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUuYWMKK0BAIC0xMCw4ICsxMCw4IEBAIEdMSUJDX1BST1ZJREVTIGRubCBTZWUgYWNsb2NhbC5tNCBpbiB0aGUgdG9wIGxldmVsIHNvdXJjZSBkaXJlY3RvcnkuCisgIyB0aGUgZHluYW1pYyBsaW5rZXIgdmlhICVpZmRlZi4KKyBBQ19DQUNIRV9DSEVDSyhbZm9yIGJpZyBlbmRpYW5dLAorICAgW2xpYmNfY3ZfYWFyY2g2NF9iZV0sCistICBbQUNfRUdSRVBfQ1BQKHllcyxbI2lmZGVmIF9fQUFSQ0g2NEVCX18KKy0gICAgICAgICAgICAgICAgICAgICAgeWVzCisrICBbQUNfRUdSRVBfQ1BQKGlzX2FhcmNoNjRfYmUsWyNpZmRlZiBfX0FBUkNINjRFQl9fCisrICAgICAgICAgICAgICAgICAgICAgIGlzX2FhcmNoNjRfYmUKKyAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgIF0sIGxpYmNfY3ZfYWFyY2g2NF9iZT15ZXMsIGxpYmNfY3ZfYWFyY2g2NF9iZT1ubyldKQorIGlmIHRlc3QgJGxpYmNfY3ZfYWFyY2g2NF9iZSA9IHllczsgdGhlbgorZGlmZiAtLWdpdCBhL3N5c2RlcHMvYXJtL2NvbmZpZ3VyZSBiL3N5c2RlcHMvYXJtL2NvbmZpZ3VyZQoraW5kZXggMTU4MTE2Yi4uNWVhZjU0ZSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvYXJtL2NvbmZpZ3VyZQorKysrIGIvc3lzZGVwcy9hcm0vY29uZmlndXJlCitAQCAtMTUxLDEyICsxNTEsMTIgQEAgZWxzZQorICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaWZkZWYgX19BUk1fUENTX1ZGUAorLQkJICAgICAgeWVzCisrCQkgICAgICB1c2VfYXJtX3Bjc192ZnAKKyAJCSAgICAgI2VuZGlmCisgCisgX0FDRU9GCisgaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisrICAkRUdSRVAgInVzZV9hcm1fcGNzX3ZmcCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgIGxpYmNfY3ZfYXJtX3Bjc192ZnA9eWVzCisgZWxzZQorICAgbGliY19jdl9hcm1fcGNzX3ZmcD1ubworZGlmZiAtLWdpdCBhL3N5c2RlcHMvYXJtL2NvbmZpZ3VyZS5hYyBiL3N5c2RlcHMvYXJtL2NvbmZpZ3VyZS5hYworaW5kZXggODU5YzkyYS4uMmY0YTZlMiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvYXJtL2NvbmZpZ3VyZS5hYworKysrIGIvc3lzZGVwcy9hcm0vY29uZmlndXJlLmFjCitAQCAtMTUsOCArMTUsOCBAQCBBQ19ERUZJTkUoUElfU1RBVElDX0FORF9ISURERU4pCisgIyB0aGUgZHluYW1pYyBsaW5rZXIgdmlhICVpZmRlZi4KKyBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgY29tcGlsZXIgaXMgdXNpbmcgdGhlIEFSTSBoYXJkLWZsb2F0IEFCSV0sCisgICBbbGliY19jdl9hcm1fcGNzX3ZmcF0sCistICBbQUNfRUdSRVBfQ1BQKHllcyxbI2lmZGVmIF9fQVJNX1BDU19WRlAKKy0JCSAgICAgIHllcworKyAgW0FDX0VHUkVQX0NQUCh1c2VfYXJtX3Bjc192ZnAsWyNpZmRlZiBfX0FSTV9QQ1NfVkZQCisrCQkgICAgICB1c2VfYXJtX3Bjc192ZnAKKyAJCSAgICAgI2VuZGlmCisgICBdLCBsaWJjX2N2X2FybV9wY3NfdmZwPXllcywgbGliY19jdl9hcm1fcGNzX3ZmcD1ubyldKQorIGlmIHRlc3QgJGxpYmNfY3ZfYXJtX3Bjc192ZnAgPSB5ZXM7IHRoZW4KK2RpZmYgLS1naXQgYS9zeXNkZXBzL21pcHMvY29uZmlndXJlIGIvc3lzZGVwcy9taXBzL2NvbmZpZ3VyZQoraW5kZXggNGUxMzI0OC4uZjE0YWY5NSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvbWlwcy9jb25maWd1cmUKKysrKyBiL3N5c2RlcHMvbWlwcy9jb25maWd1cmUKK0BAIC0xNDMsMTEgKzE0MywxMSBAQCBlbHNlCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIGRubAorICNpZmRlZiBfX21pcHNfbmFuMjAwOAorLXllcworK3VzZV9taXBzX25hbjIwMDgKKyAjZW5kaWYKKyBfQUNFT0YKKyBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKysgICRFR1JFUCAidXNlX21pcHNfbmFuMjAwOCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgIGxpYmNfY3ZfbWlwc19uYW4yMDA4PXllcworIGVsc2UKKyAgIGxpYmNfY3ZfbWlwc19uYW4yMDA4PW5vCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9taXBzL2NvbmZpZ3VyZS5hYyBiL3N5c2RlcHMvbWlwcy9jb25maWd1cmUuYWMKK2luZGV4IGJjYmRhZmYuLmFkMzA1N2YgMTAwNjQ0CistLS0gYS9zeXNkZXBzL21pcHMvY29uZmlndXJlLmFjCisrKysgYi9zeXNkZXBzL21pcHMvY29uZmlndXJlLmFjCitAQCAtNiw5ICs2LDkgQEAgZG5sIHBvc2l0aW9uIGluZGVwZW5kZW50IHdheS4KKyBkbmwgQUNfREVGSU5FKFBJX1NUQVRJQ19BTkRfSElEREVOKQorIAorIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBjb21waWxlciBpcyB1c2luZyB0aGUgMjAwOCBOYU4gZW5jb2RpbmddLAorLSAgbGliY19jdl9taXBzX25hbjIwMDgsIFtBQ19FR1JFUF9DUFAoeWVzLCBbZG5sCisrICBsaWJjX2N2X21pcHNfbmFuMjAwOCwgW0FDX0VHUkVQX0NQUCh1c2VfbWlwc19uYW4yMDA4LCBbZG5sCisgI2lmZGVmIF9fbWlwc19uYW4yMDA4CisteWVzCisrdXNlX21pcHNfbmFuMjAwOAorICNlbmRpZl0sIGxpYmNfY3ZfbWlwc19uYW4yMDA4PXllcywgbGliY19jdl9taXBzX25hbjIwMDg9bm8pXSkKKyBpZiB0ZXN0IHgkbGliY19jdl9taXBzX25hbjIwMDggPSB4eWVzOyB0aGVuCisgICBBQ19ERUZJTkUoSEFWRV9NSVBTX05BTjIwMDgpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9uaW9zMi9jb25maWd1cmUgYi9zeXNkZXBzL25pb3MyL2NvbmZpZ3VyZQoraW5kZXggMTRjOGEzYS4uZGRlMzgxNCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvbmlvczIvY29uZmlndXJlCisrKysgYi9zeXNkZXBzL25pb3MyL2NvbmZpZ3VyZQorQEAgLTE0MiwxMiArMTQyLDEyIEBAIGVsc2UKKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgI2lmZGVmIF9fbmlvczJfYmlnX2VuZGlhbl9fCistICAgICAgICAgICAgICAgICAgICAgIHllcworKyAgICAgICAgICAgICAgICAgICAgICBpc19uaW9zMl9iZQorICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgorIAorIF9BQ0VPRgorIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKy0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorKyAgJEVHUkVQICJpc19uaW9zMl9iZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgIGxpYmNfY3ZfbmlvczJfYmU9eWVzCisgZWxzZQorICAgbGliY19jdl9uaW9zMl9iZT1ubworZGlmZiAtLWdpdCBhL3N5c2RlcHMvbmlvczIvY29uZmlndXJlLmFjIGIvc3lzZGVwcy9uaW9zMi9jb25maWd1cmUuYWMKK2luZGV4IGYwNWY0MzguLmRjODYzOTkgMTAwNjQ0CistLS0gYS9zeXNkZXBzL25pb3MyL2NvbmZpZ3VyZS5hYworKysrIGIvc3lzZGVwcy9uaW9zMi9jb25maWd1cmUuYWMKK0BAIC00LDggKzQsOCBAQCBHTElCQ19QUk9WSURFUyBkbmwgU2VlIGFjbG9jYWwubTQgaW4gdGhlIHRvcCBsZXZlbCBzb3VyY2UgZGlyZWN0b3J5LgorICMgTmlvcyBJSSBiaWcgZW5kaWFuIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLgorIEFDX0NBQ0hFX0NIRUNLKFtmb3IgYmlnIGVuZGlhbl0sCisgICBbbGliY19jdl9uaW9zMl9iZV0sCistICBbQUNfRUdSRVBfQ1BQKHllcyxbI2lmZGVmIF9fbmlvczJfYmlnX2VuZGlhbl9fCistICAgICAgICAgICAgICAgICAgICAgIHllcworKyAgW0FDX0VHUkVQX0NQUChpc19uaW9zMl9iZSxbI2lmZGVmIF9fbmlvczJfYmlnX2VuZGlhbl9fCisrICAgICAgICAgICAgICAgICAgICAgIGlzX25pb3MyX2JlCisgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICBdLCBsaWJjX2N2X25pb3MyX2JlPXllcywgbGliY19jdl9uaW9zMl9iZT1ubyldKQorIGlmIHRlc3QgJGxpYmNfY3ZfbmlvczJfYmUgPSB5ZXM7IHRoZW4KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZSBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlCitpbmRleCA4M2Y4YjEzLi4yYjZjYmVlIDEwMDY0NAorLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlCitAQCAtMzg3LDExICszODcsMTEgQEAgZWxzZQorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyBkbmwKKyAjaWZkZWYgX19taXBzX25hbjIwMDgKKy15ZXMKKyt1c2VfbWlwc19uYW4yMDA4CisgI2VuZGlmCisgX0FDRU9GCisgaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisrICAkRUdSRVAgInVzZV9taXBzX25hbjIwMDgiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgICBsaWJjX2N2X21pcHNfbmFuMjAwOD15ZXMKKyBlbHNlCisgICBsaWJjX2N2X21pcHNfbmFuMjAwOD1ubworZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlLmFjIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUuYWMKK2luZGV4IDUwMzllYzkuLjEwMzVmNzYgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZS5hYworKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUuYWMKK0BAIC05OCw5ICs5OCw5IEBAIEFDX0NPTVBJTEVfSUZFTFNFKAorIExJQkNfQ09ORklHX1ZBUihbbWlwcy1tb2RlLXN3aXRjaF0sWyR7bGliY19taXBzX21vZGVfc3dpdGNofV0pCisgCisgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIGNvbXBpbGVyIGlzIHVzaW5nIHRoZSAyMDA4IE5hTiBlbmNvZGluZ10sCistICBsaWJjX2N2X21pcHNfbmFuMjAwOCwgW0FDX0VHUkVQX0NQUCh5ZXMsIFtkbmwKKysgIGxpYmNfY3ZfbWlwc19uYW4yMDA4LCBbQUNfRUdSRVBfQ1BQKHVzZV9taXBzX25hbjIwMDgsIFtkbmwKKyAjaWZkZWYgX19taXBzX25hbjIwMDgKKy15ZXMKKyt1c2VfbWlwc19uYW4yMDA4CisgI2VuZGlmXSwgbGliY19jdl9taXBzX25hbjIwMDg9eWVzLCBsaWJjX2N2X21pcHNfbmFuMjAwOD1ubyldKQorIAorIGxpYmNfbWlwc19uYW49CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlCitpbmRleCA3MGJiMThhLi5mZmQ5ZTNlIDEwMDY0NAorLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUKK0BAIC0xNTUsMTIgKzE1NSwxMiBAQCBlbHNlCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpZiBfQ0FMTF9FTEYgPT0gMgorLSAgICAgICAgICAgICAgICAgICAgICB5ZXMKKysgICAgICAgICAgICAgICAgICAgICAgdXNlX3BwY19lbGZ2Ml9hYmkKKyAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAKKyBfQUNFT0YKKyBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKysgICRFR1JFUCAidXNlX3BwY19lbGZ2Ml9hYmkiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgICBsaWJjX2N2X3BwYzY0X2VsZnYyX2FiaT15ZXMKKyBlbHNlCisgICBsaWJjX2N2X3BwYzY0X2VsZnYyX2FiaT1ubworQEAgLTE4OCwxMiArMTg4LDEyIEBAIGVsc2UKKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgI2lmZGVmIF9DQUxMX0VMRgorLSAgICAgICAgICAgICAgICAgICAgICAgICB5ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgaXNfZGVmX2NhbGxfZWxmCisgICAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAKKyBfQUNFT0YKKyBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKysgICRFR1JFUCAiaXNfZGVmX2NhbGxfZWxmIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICAgbGliY19jdl9wcGM2NF9kZWZfY2FsbF9lbGY9eWVzCisgZWxzZQorICAgbGliY19jdl9wcGM2NF9kZWZfY2FsbF9lbGY9bm8KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUuYWMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUuYWMKK2luZGV4IDA4MjI5MTUuLjlhMzJmZGQgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUuYWMKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2NvbmZpZ3VyZS5hYworQEAgLTYsOCArNiw4IEBAIExJQkNfU0xJQkRJUl9SVExERElSKFtsaWI2NF0sIFtsaWI2NF0pCisgIyBEZWZpbmUgZGVmYXVsdC1hYmkgYWNjb3JkaW5nIHRvIGNvbXBpbGVyIGZsYWdzLgorIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBjb21waWxlciBpcyB1c2luZyB0aGUgUG93ZXJQQzY0IEVMRnYyIEFCSV0sCisgICBbbGliY19jdl9wcGM2NF9lbGZ2Ml9hYmldLAorLSAgW0FDX0VHUkVQX0NQUCh5ZXMsWyNpZiBfQ0FMTF9FTEYgPT0gMgorLSAgICAgICAgICAgICAgICAgICAgICB5ZXMKKysgIFtBQ19FR1JFUF9DUFAodXNlX3BwY19lbGZ2Ml9hYmksWyNpZiBfQ0FMTF9FTEYgPT0gMgorKyAgICAgICAgICAgICAgICAgICAgICB1c2VfcHBjX2VsZnYyX2FiaQorICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgXSwgbGliY19jdl9wcGM2NF9lbGZ2Ml9hYmk9eWVzLCBsaWJjX2N2X3BwYzY0X2VsZnYyX2FiaT1ubyldKQorIGlmIHRlc3QgJGxpYmNfY3ZfcHBjNjRfZWxmdjJfYWJpID0geWVzOyB0aGVuCitAQCAtMTksOCArMTksOCBAQCBlbHNlCisgICAjIENvbXBpbGVyIHRoYXQgZG8gbm90IHN1cHBvcnQgRUxGdjIgQUJJIGRvZXMgbm90IGRlZmluZSBfQ0FMTF9FTEYKKyAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBjb21waWxlciBkZWZpbmVzIF9DQUxMX0VMRl0sCisgICAgIFtsaWJjX2N2X3BwYzY0X2RlZl9jYWxsX2VsZl0sCistICAgIFtBQ19FR1JFUF9DUFAoeWVzLFsjaWZkZWYgX0NBTExfRUxGCistICAgICAgICAgICAgICAgICAgICAgICAgIHllcworKyAgICBbQUNfRUdSRVBfQ1BQKGlzX2RlZl9jYWxsX2VsZixbI2lmZGVmIF9DQUxMX0VMRgorKyAgICAgICAgICAgICAgICAgICAgICAgICBpc19kZWZfY2FsbF9lbGYKKyAgICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgICBdLCBsaWJjX2N2X3BwYzY0X2RlZl9jYWxsX2VsZj15ZXMsIGxpYmNfY3ZfcHBjNjRfZGVmX2NhbGxfZWxmPW5vKV0pCisgICBpZiB0ZXN0ICRsaWJjX2N2X3BwYzY0X2RlZl9jYWxsX2VsZiA9IG5vOyB0aGVuCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNy10aW1lem9uZS1yZS13cml0dGVuLXR6c2VsZWN0LWFzLXBvc2l4LXNoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE3LXRpbWV6b25lLXJlLXdyaXR0ZW4tdHpzZWxlY3QtYXMtcG9zaXgtc2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNlODIzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNy10aW1lem9uZS1yZS13cml0dGVuLXR6c2VsZWN0LWFzLXBvc2l4LXNoLnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK0Zyb20gYzkwMzA2MTA3ZmJiZTI5NzkwMTI5MTdlODc3NDdjZTc4YzgyYWI4OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjMzOjAzICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTcvMjddIHRpbWV6b25lOiByZS13cml0dGVuIHR6c2VsZWN0IGFzIHBvc2l4IHNoCisKK1RvIGF2b2lkIHRoZSBiYXNoIGRlcGVuZGVuY3kuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgdGltZXpvbmUvTWFrZWZpbGUgICAgIHwgMiArLQorIHRpbWV6b25lL3R6c2VsZWN0LmtzaCB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3RpbWV6b25lL01ha2VmaWxlIGIvdGltZXpvbmUvTWFrZWZpbGUKK2luZGV4IDI0YzkzYzYuLjg4NmIwNmUgMTAwNjQ0CistLS0gYS90aW1lem9uZS9NYWtlZmlsZQorKysrIGIvdGltZXpvbmUvTWFrZWZpbGUKK0BAIC0xMjYsNyArMTI2LDcgQEAgJCh0ZXN0ZGF0YSkvWFQlOiB0ZXN0ZGF0YS9YVCUKKyAJY3AgJDwgJEAKKyAKKyAkKG9ianBmeCl0enNlbGVjdDogdHpzZWxlY3Qua3NoICQoY29tbW9uLW9ianBmeCljb25maWcubWFrZQorLQlzZWQgLWUgJ3N8L2Jpbi9iYXNofCQoQkFTSCl8JyBcCisrCXNlZCAtZSAnc3wvYmluL2Jhc2h8L2Jpbi9zaHwnIFwKKyAJICAgIC1lICdzfFRaRElSPVtefV0qfFRaRElSPSQoem9uZWRpcil8JyBcCisgCSAgICAtZSAnL1RaVkVSU0lPTj0vc3xzZWVfTWFrZWZpbGV8IiQodmVyc2lvbikifCcgXAorIAkgICAgLWUgJy9QS0dWRVJTSU9OPS9zfD0uKnw9IiQoUEtHVkVSU0lPTikifCcgXAorZGlmZiAtLWdpdCBhL3RpbWV6b25lL3R6c2VsZWN0LmtzaCBiL3RpbWV6b25lL3R6c2VsZWN0LmtzaAoraW5kZXggOWQ3MDY5MS4uMjVmNDVhOCAxMDA3NTUKKy0tLSBhL3RpbWV6b25lL3R6c2VsZWN0LmtzaAorKysrIGIvdGltZXpvbmUvdHpzZWxlY3Qua3NoCitAQCAtMzUsNyArMzUsNyBAQCBSRVBPUlRfQlVHU19UTz10ekBpYW5hLm9yZworIAorICMgU3BlY2lmeSBkZWZhdWx0IHZhbHVlcyBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzIGlmIHRoZXkgYXJlIHVuc2V0LgorIDogJHtBV0s9YXdrfQorLTogJHtUWkRJUj1gcHdkYH0KKys6ICR7VFpESVI9JChwd2QpfQorIAorICMgQ2hlY2sgZm9yIGF3ayBQb3NpeCBjb21wbGlhbmNlLgorICgkQVdLIC12IHg9eSAnQkVHSU4geyBleGl0IDEyMyB9JykgPC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjEKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE4LWVnbGliYy1Dcm9zcy1idWlsZGluZy1hbmQtdGVzdGluZy1pbnN0cnVjdGlvbnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTgtZWdsaWJjLUNyb3NzLWJ1aWxkaW5nLWFuZC10ZXN0aW5nLWluc3RydWN0aW9ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWFjYmMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE4LWVnbGliYy1Dcm9zcy1idWlsZGluZy1hbmQtdGVzdGluZy1pbnN0cnVjdGlvbnMucGF0Y2gKQEAgLTAsMCArMSw2MTkgQEAKK0Zyb20gZWZmMDQ4MDc0YWM3YjUyNThiYjYxNWU1YTViMjIxZGFhMTliMThhZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjQyOjU4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTgvMjddIGVnbGliYzogQ3Jvc3MgYnVpbGRpbmcgYW5kIHRlc3RpbmcgaW5zdHJ1Y3Rpb25zCisKK1BvcnRlZCBmcm9tIGVnbGliYworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBHTElCQy5jcm9zcy1idWlsZGluZyB8IDM4MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBHTElCQy5jcm9zcy10ZXN0aW5nICB8IDIwNSArKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDU4OCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IEdMSUJDLmNyb3NzLWJ1aWxkaW5nCisgY3JlYXRlIG1vZGUgMTAwNjQ0IEdMSUJDLmNyb3NzLXRlc3RpbmcKKworZGlmZiAtLWdpdCBhL0dMSUJDLmNyb3NzLWJ1aWxkaW5nIGIvR0xJQkMuY3Jvc3MtYnVpbGRpbmcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lNmUwZGExCistLS0gL2Rldi9udWxsCisrKysgYi9HTElCQy5jcm9zcy1idWlsZGluZworQEAgLTAsMCArMSwzODMgQEAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBtb2RlOiB0ZXh0IC0qLQorKworKyAgICAgICAgICAgICAgICAgICAgICAgIENyb3NzLUNvbXBpbGluZyBHTElCQworKyAgICAgICAgICAgICAgICAgIEppbSBCbGFuZHkgPGppbWJAY29kZXNvdXJjZXJ5LmNvbT4KKysKKysKKytJbnRyb2R1Y3Rpb24KKysKKytNb3N0IEdOVSB0b29scyBoYXZlIGEgc2ltcGxlIGJ1aWxkIHByb2NlZHVyZTogeW91IHJ1biB0aGVpcgorKydjb25maWd1cmUnIHNjcmlwdCwgYW5kIHRoZW4geW91IHJ1biAnbWFrZScuICBVbmZvcnR1bmF0ZWx5LCB0aGUKKytwcm9jZXNzIG9mIGNyb3NzLWNvbXBpbGluZyB0aGUgR05VIEMgbGlicmFyeSBpcyBxdWl0ZSBhIGJpdCBtb3JlCisraW52b2x2ZWQ6CisrCisrMSkgQnVpbGQgYSBjcm9zcy1jb21waWxlciwgd2l0aCBjZXJ0YWluIGZhY2lsaXRpZXMgZGlzYWJsZWQuCisrCisrMikgQ29uZmlndXJlIHRoZSBDIGxpYnJhcnkgdXNpbmcgdGhlIGNvbXBpbGVyIHlvdSBidWlsdCBpbiBzdGVwIDEpLgorKyAgIEJ1aWxkIGEgZmV3IG9mIHRoZSBDIHJ1bi10aW1lIG9iamVjdCBmaWxlcywgYnV0IG5vdCB0aGUgcmVzdCBvZiB0aGUKKysgICBsaWJyYXJ5LiAgSW5zdGFsbCB0aGUgbGlicmFyeSdzIGhlYWRlciBmaWxlcyBhbmQgdGhlIHJ1bi10aW1lCisrICAgb2JqZWN0IGZpbGVzLCBhbmQgY3JlYXRlIGEgZHVtbXkgbGliYy5zby4KKysKKyszKSBCdWlsZCBhIHNlY29uZCBjcm9zcy1jb21waWxlciwgdXNpbmcgdGhlIGhlYWRlciBmaWxlcyBhbmQgb2JqZWN0CisrICAgZmlsZXMgeW91IGluc3RhbGxlZCBpbiBzdGVwIDIuCisrCisrNCkgQ29uZmlndXJlLCBidWlsZCwgYW5kIGluc3RhbGwgYSBmcmVzaCBDIGxpYnJhcnksIHVzaW5nIHRoZSBjb21waWxlcgorKyAgIGJ1aWx0IGluIHN0ZXAgMy4KKysKKys1KSBCdWlsZCBhIHRoaXJkIGNyb3NzLWNvbXBpbGVyLCBiYXNlZCBvbiB0aGUgQyBsaWJyYXJ5IGJ1aWx0IGluIHN0ZXAgNC4KKysKKytUaGUgcmVhc29uIGZvciB0aGlzIGNvbXBsZXhpdHkgaXMgdGhhdCwgYWx0aG91Z2ggR0NDIGFuZCB0aGUgR05VIEMKKytsaWJyYXJ5IGFyZSBkaXN0cmlidXRlZCBzZXBhcmF0ZWx5LCB0aGV5IGFyZSBub3QgYWN0dWFsbHkgaW5kZXBlbmRlbnQKKytvZiBlYWNoIG90aGVyOiBHQ0MgcmVxdWlyZXMgdGhlIEMgbGlicmFyeSdzIGhlYWRlcnMgYW5kIHNvbWUgb2JqZWN0CisrZmlsZXMgdG8gY29tcGlsZSBpdHMgb3duIGxpYnJhcmllcywgd2hpbGUgdGhlIEMgbGlicmFyeSBkZXBlbmRzIG9uCisrR0NDJ3MgbGlicmFyaWVzLiAgR0xJQkMgaW5jbHVkZXMgZmVhdHVyZXMgYW5kIGJ1ZyBmaXhlcyB0byB0aGUgc3RvY2sKKytHTlUgQyBsaWJyYXJ5IHRoYXQgc2ltcGxpZnkgdGhpcyBwcm9jZXNzLCBidXQgdGhlIGZ1bmRhbWVudGFsCisraW50ZXJkZXBlbmRlbmN5IHN0YW5kcy4KKysKKytJbiB0aGlzIGRvY3VtZW50LCB3ZSBleHBsYWluIGhvdyB0byBjcm9zcy1jb21waWxlIGFuIEdMSUJDL0dDQyBwYWlyCisrZnJvbSBzb3VyY2UuICBPdXIgaW50ZW5kZWQgYXVkaWVuY2UgaXMgZGV2ZWxvcGVycyB3aG8gYXJlIGFscmVhZHkKKytmYW1pbGlhciB3aXRoIHRoZSBHTlUgdG9vbGNoYWluIGFuZCBjb21mb3J0YWJsZSB3b3JraW5nIHdpdGgKKytjcm9zcy1kZXZlbG9wbWVudCB0b29scy4gIFdoaWxlIHdlIGRvIHByZXNlbnQgYSB3b3JrZWQgZXhhbXBsZSB0bworK2FjY29tcGFueSB0aGUgZXhwbGFuYXRpb24sIGZvciBjbGFyaXR5J3Mgc2FrZSB3ZSBkbyBub3QgY292ZXIgbWFueSBvZgorK3RoZSBvcHRpb25zIGF2YWlsYWJsZSB0byBjcm9zcy10b29sY2hhaW4gdXNlcnMuCisrCisrCisrUHJlcGFyYXRpb24KKysKKytHTElCQyByZXF1aXJlcyByZWNlbnQgdmVyc2lvbnMgb2YgdGhlIEdOVSBiaW51dGlscywgR0NDLCBhbmQgdGhlCisrTGludXgga2VybmVsLiAgVGhlIHdlYiBwYWdlIDxodHRwOi8vd3d3LmVnbGliYy5vcmcvcHJlcmVxdWlzaXRlcz4KKytkb2N1bWVudHMgdGhlIGN1cnJlbnQgcmVxdWlyZW1lbnRzLCBhbmQgbGlzdHMgcGF0Y2hlcyBuZWVkZWQgZm9yCisrY2VydGFpbiB0YXJnZXQgYXJjaGl0ZWN0dXJlcy4gIEFzIG9mIHRoaXMgd3JpdGluZywgdGhlc2UgYnVpbGQKKytpbnN0cnVjdGlvbnMgaGF2ZSBiZWVuIHRlc3RlZCB3aXRoIGJpbnV0aWxzIDIuMjIuNTEsIEdDQyA0LjYuMiwKKythbmQgTGludXggMy4xLgorKworK0ZpcnN0LCBsZXQncyBzZXQgc29tZSB2YXJpYWJsZXMsIHRvIHNpbXBsaWZ5IGxhdGVyIGNvbW1hbmRzLiAgV2UnbGwKKytidWlsZCBHTElCQyBhbmQgR0NDIGZvciBhbiBBUk0gdGFyZ2V0LCBrbm93biB0byB0aGUgTGludXgga2VybmVsCisrYXMgJ2FybScsIGFuZCB3ZSdsbCBkbyB0aGUgYnVpbGQgb24gYW4gSW50ZWwgeDg2XzY0IExpbnV4IGJveDoKKysKKysgICAgJCBidWlsZD14ODZfNjQtcGMtbGludXgtZ251CisrICAgICQgaG9zdD0kYnVpbGQKKysgICAgJCB0YXJnZXQ9YXJtLW5vbmUtbGludXgtZ251ZWFiaQorKyAgICAkIGxpbnV4X2FyY2g9YXJtCisrCisrV2UncmUgdXNpbmcgdGhlIGFmb3JlbWVudGlvbmVkIHZlcnNpb25zIG9mIEJpbnV0aWxzLCBHQ0MsIGFuZCBMaW51eDoKKysKKysgICAgJCBiaW51dGlsc3Y9YmludXRpbHMtMi4yMi41MQorKyAgICAkIGdjY3Y9Z2NjLTQuNi4yCisrICAgICQgbGludXh2PWxpbnV4LTMuMQorKworK1dlJ3JlIGNhcnJ5aW5nIG91dCB0aGUgZW50aXJlIHByb2Nlc3MgdW5kZXIgJ34vY3Jvc3MtYnVpbGQnLCB3aGljaAorK2NvbnRhaW5zIHVucGFja2VkIHNvdXJjZSB0cmVlcyBmb3IgYmludXRpbHMsIGdjYywgYW5kIGxpbnV4IGtlcm5lbCwKKythbG9uZyB3aXRoIEdMSUJDIHN2biB0cnVuayAod2hpY2ggY2FuIGJlIGNoZWNrZWQtb3V0IHdpdGgKKysnc3ZuIGNvIGh0dHA6Ly93d3cuZWdsaWJjLm9yZy9zdm4vdHJ1bmsgZWdsaWJjJyk6CisrCisrICAgICQgdG9wPSRIT01FL2Nyb3NzLWJ1aWxkLyR0YXJnZXQKKysgICAgJCBzcmM9JEhPTUUvY3Jvc3MtYnVpbGQvc3JjCisrICAgICQgbHMgJHNyYworKyAgICBiaW51dGlscy0yLjIyLjUxICBnbGliYyAgZ2NjLTQuNi4yICBsaW51eC0zLjEKKysKKytXZSdyZSBnb2luZyB0byBwbGFjZSBvdXIgYnVpbGQgZGlyZWN0b3JpZXMgaW4gYSBzdWJkaXJlY3RvcnkgJ29iaicsCisrd2UnbGwgaW5zdGFsbCB0aGUgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluIGluICd0b29scycsIGFuZCB3ZSdsbAorK3BsYWNlIG91ciBzeXNyb290IChjb250YWluaW5nIGZpbGVzIHRvIGJlIGluc3RhbGxlZCBvbiB0aGUgdGFyZ2V0Cisrc3lzdGVtKSBpbiAnc3lzcm9vdCc6CisrCisrICAgICQgb2JqPSR0b3Avb2JqCisrICAgICQgdG9vbHM9JHRvcC90b29scworKyAgICAkIHN5c3Jvb3Q9JHRvcC9zeXNyb290CisrCisrCisrQmludXRpbHMKKysKKytDb25maWd1cmluZyBhbmQgYnVpbGRpbmcgYmludXRpbHMgZm9yIHRoZSB0YXJnZXQgaXMgc3RyYWlnaHRmb3J3YXJkOgorKworKyAgICAkIG1rZGlyIC1wICRvYmovYmludXRpbHMKKysgICAgJCBjZCAkb2JqL2JpbnV0aWxzCisrICAgICQgJHNyYy8kYmludXRpbHN2L2NvbmZpZ3VyZSBcCisrICAgID4gICAgIC0tdGFyZ2V0PSR0YXJnZXQgXAorKyAgICA+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+IC4vYysrLWhlbGxvCisrICAgIEhlbGxvLCBDKysgd29ybGQhCitkaWZmIC0tZ2l0IGEvR0xJQkMuY3Jvc3MtdGVzdGluZyBiL0dMSUJDLmNyb3NzLXRlc3RpbmcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iNjdiNDY4CistLS0gL2Rldi9udWxsCisrKysgYi9HTElCQy5jcm9zcy10ZXN0aW5nCitAQCAtMCwwICsxLDIwNSBAQAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIG1vZGU6IHRleHQgLSotCisrCisrICAgICAgICAgICAgICAgICAgICAgIENyb3NzLVRlc3RpbmcgV2l0aCBHTElCQworKyAgICAgICAgICAgICAgICAgIEppbSBCbGFuZHkgPGppbWJAY29kZXNvdXJjZXJ5LmNvbT4KKysKKysKKytJbnRyb2R1Y3Rpb24KKysKKytEZXZlbG9wZXJzIHdyaXRpbmcgc29mdHdhcmUgZm9yIGVtYmVkZGVkIHN5c3RlbXMgb2Z0ZW4gdXNlIGEgZGVza3RvcAorK29yIG90aGVyIHNpbWlsYXJseSBjYXBhYmxlIGNvbXB1dGVyIGZvciBkZXZlbG9wbWVudCwgYnV0IG5lZWQgdG8gcnVuCisrdGVzdHMgb24gdGhlIGVtYmVkZGVkIHN5c3RlbSwgb3IgcGVyaGFwcyBvbiBhIHNpbXVsYXRvci4gIFdoZW4KKytjb25maWd1cmVkIGZvciBjcm9zcy1jb21waWxhdGlvbiwgdGhlIHN0b2NrIEdOVSBDIGxpYnJhcnkgc2ltcGx5CisrZGlzYWJsZXMgcnVubmluZyB0ZXN0cyBhbHRvZ2V0aGVyOiB0aGUgY29tbWFuZCAnbWFrZSB0ZXN0cycgYnVpbGRzCisrdGVzdCBwcm9ncmFtcywgYnV0IGRvZXMgbm90IHJ1biB0aGVtLiAgR0xJQkMsIGhvd2V2ZXIsIHByb3ZpZGVzCisrZmFjaWxpdGllcyBmb3IgY29tcGlsaW5nIHRlc3RzIGFuZCBnZW5lcmF0aW5nIGRhdGEgZmlsZXMgb24gdGhlIGJ1aWxkCisrc3lzdGVtLCBidXQgcnVubmluZyB0aGUgdGVzdCBwcm9ncmFtcyB0aGVtc2VsdmVzIG9uIGEgcmVtb3RlIHN5c3RlbSBvcgorK3NpbXVsYXRvci4KKysKKysKKytUZXN0IGVudmlyb25tZW50IHJlcXVpcmVtZW50cworKworK1RoZSB0ZXN0IGVudmlyb25tZW50IG11c3QgbWVldCBjZXJ0YWluIGNvbmRpdGlvbnMgZm9yIEdMSUJDJ3MKKytjcm9zcy10ZXN0aW5nIGZhY2lsaXRpZXMgdG8gd29yazoKKysKKystIFNoYXJlZCBmaWxlc3lzdGVtcy4gIFRoZSAnYnVpbGQnIHN5c3RlbSwgb24gd2hpY2ggeW91IGNvbmZpZ3VyZSBhbmQKKysgIGNvbXBpbGUgR0xJQkMsIGFuZCB0aGUgJ2hvc3QnIHN5c3RlbSwgb24gd2hpY2ggeW91IGludGVuZCB0byBydW4KKysgIEdMSUJDLCBtdXN0IHNoYXJlIGEgZmlsZXN5c3RlbSBjb250YWluaW5nIHRoZSBHTElCQyBidWlsZCBhbmQKKysgIHNvdXJjZSB0cmVlcy4gIEZpbGVzIG11c3QgYXBwZWFyIGF0IHRoZSBzYW1lIHBhdGhzIG9uIGJvdGggc3lzdGVtcy4KKysKKystIFJlbW90ZS1zaGVsbCBsaWtlIGludm9jYXRpb24uICBUaGVyZSBtdXN0IGJlIGEgd2F5IHRvIHJ1biBhIHByb2dyYW0KKysgIG9uIHRoZSBob3N0IHN5c3RlbSBmcm9tIHRoZSBidWlsZCBzeXN0ZW0sIHBhc3NpbmcgaXQgcHJvcGVybHkgcXVvdGVkCisrICBjb21tYW5kLWxpbmUgYXJndW1lbnRzLCBzZXR0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcywgYW5kCisrICBpbmhlcml0aW5nIHRoZSBjYWxsZXIncyBzdGFuZGFyZCBpbnB1dCBhbmQgb3V0cHV0LgorKworKworK1VzYWdlCisrCisrVG8gdXNlIEdMSUJDJ3MgY3Jvc3MtdGVzdGluZyBzdXBwb3J0LCBwcm92aWRlIHZhbHVlcyBmb3IgdGhlCisrZm9sbG93aW5nIE1ha2UgdmFyaWFibGVzIHdoZW4geW91IGludm9rZSAnbWFrZSc6CisrCisrLSBjcm9zcy10ZXN0LXdyYXBwZXIKKysKKysgIFRoaXMgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBjcm9zcy10ZXN0aW5nIHdyYXBwZXIgY29tbWFuZCwgYWxvbmcKKysgIHdpdGggYW55IGFyZ3VtZW50cy4KKysKKystIGNyb3NzLWxvY2FsZWRlZgorKworKyAgVGhpcyBzaG91bGQgYmUgdGhlIG5hbWUgb2YgYSBjcm9zcy1jYXBhYmxlIGxvY2FsZWRlZiBwcm9ncmFtLCBsaWtlCisrICB0aGF0IGluY2x1ZGVkIGluIHRoZSBHTElCQyAnbG9jYWxlZGVmJyBtb2R1bGUsIGFsb25nIHdpdGggYW55CisrICBhcmd1bWVudHMgbmVlZGVkLgorKworK1RoZXNlIGFyZSBlYWNoIGV4cGxhaW5lZCBpbiBkZXRhaWwgYmVsb3cuCisrCisrCisrVGhlIENyb3NzLVRlc3RpbmcgV3JhcHBlcgorKworK1RvIHJ1biB0ZXN0IHByb2dyYW1zIHJlbGlhYmx5LCB0aGUgc3RvY2sgR05VIEMgbGlicmFyeSB0YWtlcyBjYXJlIHRvCisrZW5zdXJlIHRoYXQgdGVzdCBwcm9ncmFtcyB1c2UgdGhlIG5ld2x5IGNvbXBpbGVkIGR5bmFtaWMgbGlua2VyIGFuZAorK3NoYXJlZCBsaWJyYXJpZXMsIGFuZCBuZXZlciB0aGUgaG9zdCBzeXN0ZW0ncyBpbnN0YWxsZWQgbGlicmFyaWVzLiAgVG8KKythY2NvbXBsaXNoIHRoaXMsIGl0IHJ1bnMgdGhlIHRlc3RzIGJ5IGV4cGxpY2l0bHkgaW52b2tpbmcgdGhlIGR5bmFtaWMKKytsaW5rZXIgZnJvbSB0aGUgYnVpbGQgdHJlZSwgcGFzc2luZyBpdCBhIGxpc3Qgb2YgYnVpbGQgdHJlZQorK2RpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3Igc2hhcmVkIGxpYnJhcmllcywgZm9sbG93ZWQgYnkgdGhlIG5hbWUgb2YKKyt0aGUgZXhlY3V0YWJsZSB0byBydW4gYW5kIGl0cyBhcmd1bWVudHMuCisrCisrRm9yIGV4YW1wbGUsIHdoZXJlIG9uZSBtaWdodCBub3JtYWxseSBydW4gYSB0ZXN0IHByb2dyYW0gbGlrZSB0aGlzOgorKworKyAgICAkIC4vdHN0LWZvbyBhcmcxIGFyZzIKKysKKyt0aGUgR05VIEMgbGlicmFyeSBtaWdodCBydW4gdGhhdCBwcm9ncmFtIGxpa2UgdGhpczoKKysKKysgICAgJCAkb2JqZGlyL2VsZi9sZC1saW51eC5zby4zIC0tbGlicmFyeS1wYXRoICRvYmpkaXIgXAorKyAgICAgIC4vdHN0LWZvbyBhcmcxIGFyZzIKKysKKysod2hlcmUgJG9iamRpciBpcyB0aGUgcGF0aCB0byB0aGUgdG9wIG9mIHRoZSBidWlsZCB0cmVlLCBhbmQgdGhlCisrdHJhaWxpbmcgYmFja3NsYXNoIGluZGljYXRlcyBhIGNvbnRpbnVhdGlvbiBvZiB0aGUgY29tbWFuZCkuICBJbiBvdGhlcgorK3dvcmRzLCBlYWNoIHRlc3QgcHJvZ3JhbSBpbnZvY2F0aW9uIGlzICd3cmFwcGVkIHVwJyBpbnNpZGUgYW4gZXhwbGljaXQKKytpbnZvY2F0aW9uIG9mIHRoZSBkeW5hbWljIGxpbmtlciwgd2hpY2ggbXVzdCBpdHNlbGYgZXhlY3V0ZSB0aGUgdGVzdAorK3Byb2dyYW0sIGhhdmluZyBsb2FkZWQgc2hhcmVkIGxpYnJhcmllcyBmcm9tIHRoZSBhcHByb3ByaWF0ZQorK2RpcmVjdG9yaWVzLgorKworK1RvIHN1cHBvcnQgY3Jvc3MtdGVzdGluZywgR0xJQkMgYWxsb3dzIHRoZSBkZXZlbG9wZXIgdG8gb3B0aW9uYWxseQorK3NldCB0aGUgJ2Nyb3NzLXRlc3Qtd3JhcHBlcicgTWFrZSB2YXJpYWJsZSB0byBhbm90aGVyIHdyYXBwZXIgY29tbWFuZCwKKyt0byB3aGljaCBpdCBwYXNzZXMgdGhlIGVudGlyZSBkeW5hbWljIGxpbmtlciBpbnZvY2F0aW9uIHNob3duIGFib3ZlIGFzCisrYXJndW1lbnRzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBkZXZlbG9wZXIgc3VwcGxpZXMgYSB3cmFwcGVyIG9mCisrJ215LXdyYXBwZXIgaG9zdG5hbWUnLCB0aGVuIEdMSUJDIHdvdWxkIHJ1biB0aGUgdGVzdCBhYm92ZSBhcworK2ZvbGxvd3M6CisrCisrICAgICQgbXktd3JhcHBlciBob3N0bmFtZSBcCisrICAgICAgJG9iamRpci9lbGYvbGQtbGludXguc28uMyAtLWxpYnJhcnktcGF0aCAkb2JqZGlyIFwKKysgICAgICAuL3RzdC1mb28gYXJnMSBhcmcyCisrCisrVGhlICdteS13cmFwcGVyJyBjb21tYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBleGVjdXRpbmcgdGhlIGNvbW1hbmQKKytnaXZlbiBvbiB0aGUgaG9zdCBzeXN0ZW0uCisrCisrU2luY2UgdGVzdHMgYXJlIHJ1biBpbiB2YXJ5aW5nIGRpcmVjdG9yaWVzLCB0aGUgd3JhcHBlciBzaG91bGQgZWl0aGVyCisrYmUgaW4geW91ciBjb21tYW5kIHNlYXJjaCBwYXRoLCBvciAnY3Jvc3MtdGVzdC13cmFwcGVyJyBzaG91bGQgZ2l2ZSBhbgorK2Fic29sdXRlIHBhdGggZm9yIHRoZSB3cmFwcGVyLgorKworK1RoZSB3cmFwcGVyIG11c3QgbWVldCBzZXZlcmFsIHJlcXVpcmVtZW50czoKKysKKystIEl0IG11c3QgcHJlc2VydmUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgQXMgZXhwbGFpbmVkIGFib3ZlLCB0aGUKKysgIGJ1aWxkIGRpcmVjdG9yeSB0cmVlIG11c3QgYmUgdmlzaWJsZSBvbiBib3RoIHRoZSBidWlsZCBhbmQgaG9zdAorKyAgc3lzdGVtcywgYXQgdGhlIHNhbWUgcGF0aC4gIFRoZSB0ZXN0IHdyYXBwZXIgbXVzdCBlbnN1cmUgdGhhdCB0aGUKKysgIGN1cnJlbnQgZGlyZWN0b3J5IGl0IGluaGVyaXRzIGlzIGFsc28gaW5oZXJpdGVkIGJ5IHRoZSBkeW5hbWljCisrICBsaW5rZXIgKGFuZCB0aHVzIHRoZSB0ZXN0IHByb2dyYW0gaXRzZWxmKS4KKysKKystIEl0IG11c3QgcHJlc2VydmUgZW52aXJvbm1lbnQgdmFyaWFibGVzJyB2YWx1ZXMuICBNYW55IEdMSUJDIHRlc3RzCisrICBzZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0ZXN0IHJ1bnM7IGluIG5hdGl2ZSB0ZXN0aW5nLCBpdAorKyAgaW52b2tlcyBwcm9ncmFtcyBsaWtlIHRoaXM6CisrCisrICAgICQgR0NPTlZfUEFUSD0kb2JqZGlyL2ljb252ZGF0YSBcCisrICAgICAgJG9iamRpci9lbGYvbGQtbGludXguc28uMyAtLWxpYnJhcnktcGF0aCAkb2JqZGlyIFwKKysgICAgICAuL3RzdC1mb28gYXJnMSBhcmcyCisrCisrICBXaXRoIHRoZSBjcm9zcy10ZXN0aW5nIHdyYXBwZXIsIHRoYXQgaW52b2NhdGlvbiBiZWNvbWVzOgorKworKyAgICAkIEdDT05WX1BBVEg9JG9iamRpci9pY29udmRhdGEgXAorKyAgICAgIG15LXdyYXBwZXIgaG9zdG5hbWUgXAorKyAgICAgICRvYmpkaXIvZWxmL2xkLWxpbnV4LnNvLjMgLS1saWJyYXJ5LXBhdGggJG9iamRpciBcCisrICAgICAgLi90c3QtZm9vIGFyZzEgYXJnMgorKworKyAgSGVyZSwgJ215LXdyYXBwZXInIG11c3QgZW5zdXJlIHRoYXQgdGhlIHZhbHVlIGl0IHNlZXMgZm9yCisrICAnR0NPTlZfUEFUSCcgd2lsbCBiZSBzZWVuIGJ5IHRoZSBkeW5hbWljIGxpbmtlciwgYW5kIHRodXMgJ3RzdC1mb28nCisrICBpdHNlbGYuICAoVGhlIHdyYXBwZXIgc3VwcGxpZWQgd2l0aCBHTElCQyBzaW1wbHkgcHJlc2VydmVzIHRoZQorKyAgdmFsdWVzIG9mICphbGwqIGVudmlyb21lbnQgdmFyaWFibGVzLCB3aXRoIGEgZml4ZWQgc2V0IG9mCisrICBleGNlcHRpb25zLikKKysKKysgIElmIHlvdXIgd3JhcHBlciBpcyBhIHNoZWxsIHNjcmlwdCwgdGFrZSBjYXJlIHRvIGNvcnJlY3RseSBwcm9wYWdhdGUKKysgIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgY29udGFpbiBzcGFjZXMgYW5kIHNoZWxsCisrICBtZXRhY2hhcmFjdGVycy4KKysKKystIEl0IG11c3QgcGFzcyB0aGUgY29tbWFuZCdzIGFyZ3VtZW50cywgdW5tb2RpZmllZC4gIFRoZSBhcmd1bWVudHMKKysgIHNlZW4gYnkgdGhlIHRlc3QgcHJvZ3JhbSBzaG91bGQgYmUgZXhhY3RseSB0aG9zZSBzZWVuIGJ5IHRoZSB3cmFwcGVyCisrICAoYWZ0ZXIgd2hhdGV2ZXIgYXJndW1lbnRzIGFyZSBnaXZlbiB0byB0aGUgd3JhcHBlciBpdHNlbGYpLiAgVGhlCisrICBHTElCQyB0ZXN0IGZyYW1ld29yayBwZXJmb3JtcyBhbGwgbmVlZGVkIHNoZWxsIHdvcmQgc3BsaXR0aW5nIGFuZAorKyAgZXhwYW5zaW9uICh3aWxkY2FyZCBleHBhbnNpb24sIHBhcmFtZXRlciBzdWJzdGl0dXRpb24sIGFuZCBzbyBvbikKKysgIGJlZm9yZSBpbnZva2luZyB0aGUgd3JhcHBlcjsgZnVydGhlciBleHBhbnNpb24gbWF5IGJyZWFrIHRoZSB0ZXN0cy4KKysKKysKKytUaGUgJ2Nyb3NzLXRlc3Qtc3NoLnNoJyBzY3JpcHQKKysKKytJZiB5b3Ugd2FudCB0byB1c2UgJ3NzaCcgKG9yIHNvbWV0aGluZyBzdWZmaWNpZW50bHkgc2ltaWxhcikgdG8gcnVuCisrdGVzdCBwcm9ncmFtcyBvbiB5b3VyIGhvc3Qgc3lzdGVtLCBHTElCQyBpbmNsdWRlcyBhIHNoZWxsIHNjcmlwdCwKKysnc2NyaXB0cy9jcm9zcy10ZXN0LXNzaC5zaCcsIHdoaWNoIHlvdSBjYW4gdXNlIGFzIHlvdXIgd3JhcHBlcgorK2NvbW1hbmQuICBUaGlzIHNjcmlwdCB0YWtlcyBjYXJlIG9mIHNldHRpbmcgdGhlIHRlc3QgY29tbWFuZCdzIGN1cnJlbnQKKytkaXJlY3RvcnksIHByb3BhZ2F0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlcywgYW5kIGNhcnJ5aW5nCisrY29tbWFuZC1saW5lIGFyZ3VtZW50cywgYWxsIGFjcm9zcyBhbiAnc3NoJyBjb25uZWN0aW9uLiAgWW91IG1heSBldmVuCisrc3VwcGx5IGFuIGFsdGVybmF0aXZlIHRvICdzc2gnIG9uIHRoZSBjb21tYW5kIGxpbmUsIGlmIG5lZWRlZC4KKysKKytGb3IgbW9yZSBkZXRhaWxzLCBwYXNzICdjcm9zcy10ZXN0LXNzaC5zaCcgdGhlICctLWhlbHAnIG9wdGlvbi4KKysKKysKKytUaGUgQ3Jvc3MtQ29tcGlsaW5nIExvY2FsZSBEZWZpbml0aW9uIENvbW1hbmQKKysKKytTb21lIEdMSUJDIHRlc3RzIHJlbHkgb24gbG9jYWxlcyBnZW5lcmF0ZWQgZXNwZWNpYWxseSBmb3IgdGhlIHRlc3QKKytwcm9jZXNzLiAgSW4gYSBuYXRpdmUgY29uZmlndXJhdGlvbiwgdGhlc2UgdGVzdHMgc2ltcGx5IHJ1biB0aGUKKysnbG9jYWxlZGVmJyBjb21tYW5kIGJ1aWx0IGJ5IHRoZSBub3JtYWwgR0xJQkMgYnVpbGQgcHJvY2VzcywKKysnbG9jYWxlL2xvY2FsZWRlZicsIHRvIHByb2Nlc3MgYW5kIGluc3RhbGwgdGhlaXIgbG9jYWxlcy4gIEhvd2V2ZXIsIGluCisrYSBjcm9zcy1jb21waWxpbmcgY29uZmlndXJhdGlvbiwgdGhpcyAnbG9jYWxlZGVmJyBpcyBidWlsdCBmb3IgdGhlCisraG9zdCBzeXN0ZW0sIG5vdCB0aGUgYnVpbGQgc3lzdGVtLCBhbmQgc2luY2UgaXQgcmVxdWlyZXMgcXVpdGUgYSBiaXQKKytvZiBtZW1vcnkgdG8gcnVuICh3ZSBoYXZlIHNlZW4gaXQgZmFpbCBvbiBzeXN0ZW1zIHdpdGggNjRNaUIgb2YKKyttZW1vcnkpLCBpdCBtYXkgbm90IGJlIHByYWN0aWNhbCB0byBydW4gaXQgb24gdGhlIGhvc3Qgc3lzdGVtLgorKworK0lmIHNldCwgR0xJQkMgdXNlcyB0aGUgJ2Nyb3NzLWxvY2FsZWRlZicgTWFrZSB2YXJpYWJsZSBhcyB0aGUgY29tbWFuZAorK3RvIHJ1biBvbiB0aGUgYnVpbGQgc3lzdGVtIHRvIHByb2Nlc3MgYW5kIGluc3RhbGwgbG9jYWxlcy4gIFRoZQorK2xvY2FsZWRlZiBwcm9ncmFtIGJ1aWx0IGZyb20gdGhlIEdMSUJDICdsb2NhbGVkZWYnIG1vZHVsZSBpcworK3N1aXRhYmxlLgorKworK1RoZSB2YWx1ZSBvZiAnY3Jvc3MtbG9jYWxlZGVmJyBtYXkgYWxzbyBpbmNsdWRlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMKKyt0byBiZSBwYXNzZWQgdG8gdGhlIHByb2dyYW07IGlmIHlvdSBhcmUgdXNpbmcgR0xJQkMncyAnbG9jYWxlZGVmJywKKyt5b3UgbWF5IGluY2x1ZGUgZW5kaWFubmVzcyBhbmQgJ3VpbnQzMl90JyBhbGlnbm1lbnQgYXJndW1lbnRzIGhlcmUuCisrCisrCisrRXhhbXBsZQorKworK0luIGRldmVsb3BpbmcgR0xJQkMncyBjcm9zcy10ZXN0aW5nIGZhY2lsaXR5LCB3ZSBpbnZva2VkICdtYWtlJyB3aXRoCisrdGhlIGZvbGxvd2luZyBzY3JpcHQ6CisrCisrICAgICMhL2Jpbi9zaAorKworKyAgICBzcmNkaXI9Li4uCisrICAgIHRlc3RfaG9zdG5hbWU9Li4uCisrICAgIGxvY2FsZWRlZmRpcj0uLi4KKysgICAgY3Jvc3NfZ3h4PS4uLi1nKysKKysKKysgICAgd3JhcHBlcj0iJHNyY2Rpci9zY3JpcHRzL2Nyb3NzLXRlc3Qtc3NoLnNoICR0ZXN0X2hvc3RuYW1lIgorKyAgICBsb2NhbGVkZWY9IiRsb2NhbGVkZWZkaXIvbG9jYWxlZGVmIC0tbGl0dGxlLWVuZGlhbiAtLXVpbnQzMi1hbGlnbj00IgorKworKyAgICBtYWtlIGNyb3NzLXRlc3Qtd3JhcHBlcj0iJHdyYXBwZXIiIFwKKysgICAgICAgICBjcm9zcy1sb2NhbGVkZWY9IiRsb2NhbGVkZWYiIFwKKysgICAgICAgICBDWFg9IiRjcm9zc19neHgiIFwKKysgICAgICAgICAiJEAiCisrCisrCisrT3RoZXIgQ3Jvc3MtVGVzdGluZyBDb25jZXJucworKworK0hlcmUgYXJlIG5vdGVzIG9uIHNvbWUgb3RoZXIgaXNzdWVzIHdoaWNoIHlvdSBtYXkgZW5jb3VudGVyIGluIHJ1bm5pbmcKKyt0aGUgR0xJQkMgdGVzdHMgaW4gYSBjcm9zcy1jb21waWxpbmcgZW52aXJvbm1lbnQ6CisrCisrLSBTb21lIHRlc3RzIHJlcXVpcmUgYSBDKysgY3Jvc3MtY29tcGlsZXI7IHlvdSBzaG91bGQgc2V0IHRoZSAnQ1hYJworKyAgTWFrZSB2YXJpYWJsZSB0byB0aGUgbmFtZSBvZiBhbiBhcHByb3ByaWF0ZSBjcm9zcy1jb21waWxlci4KKysKKystIFNvbWUgdGVzdHMgcmVxdWlyZSBhY2Nlc3MgdG8gbGlic3RkYysrLnNvLjYgYW5kIGxpYmdjY19zLnNvLjE7IHdlCisrICBzaW1wbHkgcGxhY2UgY29waWVzIG9mIHRoZXNlIGxpYnJhcmllcyBpbiB0aGUgdG9wIEdMSUJDIGJ1aWxkCisrICBkaXJlY3RvcnkuCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxOS1lZ2xpYmMtQnJpbmctRWdsaWJjLW9wdGlvbi1ncm91cC1pbmZyYXN0cnVjdHVyZS10by1nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE5LWVnbGliYy1CcmluZy1FZ2xpYmMtb3B0aW9uLWdyb3VwLWluZnJhc3RydWN0dXJlLXRvLWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNiODBmOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxOS1lZ2xpYmMtQnJpbmctRWdsaWJjLW9wdGlvbi1ncm91cC1pbmZyYXN0cnVjdHVyZS10by1nLnBhdGNoCkBAIC0wLDAgKzEsMTQzNiBAQAorRnJvbSBhYTdjNWZlODZkMDQ1ODRhOWFlZDRkYzQwYmE4NTZjNjVhMWVmOWM0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6NDU6MTggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxOS8yN10gZWdsaWJjOiBCcmluZyBFZ2xpYmMgb3B0aW9uIGdyb3VwIGluZnJhc3RydWN0dXJlIHRvCisgZ2xpYmMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBFR0xJQkMub3B0aW9uLWdyb3VwcyAgICAgICAgICAgICAgfCAxMjIgKysrKysrCisgTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKKyBjb25maWcubWFrZS5pbiAgICAgICAgICAgICAgICAgICAgfCAgIDIgKworIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMyArCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgIHwgIDEwICsKKyBvcHRpb24tZ3JvdXBzLmRlZiAgICAgICAgICAgICAgICAgfCA4NjggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBvcHRpb24tZ3JvdXBzLmRlZmF1bHRzICAgICAgICAgICAgfCAgNDcgKysrCisgb3B0aW9uLWdyb3Vwcy5tYWsgICAgICAgICAgICAgICAgIHwgIDQxICsrCisgb3B0aW9ucy1jb25maWcvTWFrZWZpbGUgICAgICAgICAgIHwgIDU1ICsrKworIG9wdGlvbnMtY29uZmlnL2NvbmZpZy1wb3N0cHJvYy5wbCB8ICA1OCArKysKKyBvcHRpb25zLWNvbmZpZy9jb25maWctcHJlcHJvYy5wbCAgfCAgIDggKworIHNjcmlwdHMvb3B0aW9uLWdyb3Vwcy5hd2sgICAgICAgICB8ICA2MyArKysKKyAxMiBmaWxlcyBjaGFuZ2VkLCAxMjg4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgRUdMSUJDLm9wdGlvbi1ncm91cHMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgb3B0aW9uLWdyb3Vwcy5kZWYKKyBjcmVhdGUgbW9kZSAxMDA2NDQgb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cworIGNyZWF0ZSBtb2RlIDEwMDY0NCBvcHRpb24tZ3JvdXBzLm1haworIGNyZWF0ZSBtb2RlIDEwMDY0NCBvcHRpb25zLWNvbmZpZy9NYWtlZmlsZQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBvcHRpb25zLWNvbmZpZy9jb25maWctcG9zdHByb2MucGwKKyBjcmVhdGUgbW9kZSAxMDA2NDQgb3B0aW9ucy1jb25maWcvY29uZmlnLXByZXByb2MucGwKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc2NyaXB0cy9vcHRpb24tZ3JvdXBzLmF3aworCitkaWZmIC0tZ2l0IGEvRUdMSUJDLm9wdGlvbi1ncm91cHMgYi9FR0xJQkMub3B0aW9uLWdyb3VwcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjZhNTBiOGQKKy0tLSAvZGV2L251bGwKKysrKyBiL0VHTElCQy5vcHRpb24tZ3JvdXBzCitAQCAtMCwwICsxLDEyMiBAQAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIG1vZGU6IHRleHQgLSotCisrCisrICAgICAgICAgICAgICBUaGUgRUdMSUJDIENvbXBvbmVudCBDb25maWd1cmF0aW9uIFN5c3RlbQorKyAgICAgICAgICAgICAgICAgIEppbSBCbGFuZHkgPGppbWJAY29kZXNvdXJjZXJ5LmNvbT4KKysKKytJbnRyb2R1Y3Rpb24KKysKKytUaGUgR05VIEMgbGlicmFyeSAoR0xJQkMpIHByb3ZpZGVzIGEgYnJvYWQgcmFuZ2Ugb2YgZnVuY3Rpb25hbGl0eSwKKytyYW5naW5nIGZyb20gaW50ZXJuYXRpb25hbGl6YXRpb24gc3VwcG9ydCB0byB0cmFuc2NlbmRlbnRhbAorK21hdGhlbWF0aWNhbCBmdW5jdGlvbnMuICBJdHMgd2Vic2l0ZSBib2FzdHMgdGhhdCAibmVhcmx5IGFsbCBrbm93biBhbmQKKyt1c2VmdWwgZnVuY3Rpb25zIGZyb20gYW55IG90aGVyIEMgbGlicmFyeSBhcmUgYXZhaWxhYmxlLiIgIFRoaXMKKytleGhhdXN0aXZlIGFwcHJvYWNoIGhhcyBiZWVuIG9uZSBvZiBHTElCQydzIHN0cmVuZ3RocyBvbiBkZXNrdG9wIGFuZAorK3NlcnZlciBzeXN0ZW1zLCBidXQgaXQgaGFzIGFsc28gZ2l2ZW4gR0xJQkMgYSBsYXJnZSBmb290cHJpbnQsIGJvdGggaW4KKyttZW1vcnkgYW5kIG9uIGRpc2ssIG1ha2luZyBpdCBhIGNoYWxsZW5nZSB0byB1c2UgaW4gZW1iZWRkZWQgc3lzdGVtcworK3dpdGggbGltaXRlZCByZXNvdXJjZXMuCisrCisrVGhlIEVtYmVkZGVkIEdOVSBDIGxpYnJhcnkgKEVHTElCQykgaXMgYSB2YXJpYW50IG9mIHRoZSBHTlUgQyBsaWJyYXJ5CisrZGVzaWduZWQgdG8gd29yayB3ZWxsIG9uIGVtYmVkZGVkIHN5c3RlbXMuICBJbiBwYXJ0aWN1bGFyLCBFR0xJQkMncworK2NvbXBvbmVudCBjb25maWd1cmF0aW9uIHN5c3RlbSBhbGxvd3MgZW1iZWRkZWQgZGV2ZWxvcGVycyB0byBidWlsZAorK2N1c3RvbWl6ZWQgdmVyc2lvbnMgb2YgdGhlIGxpYnJhcnkgdGhhdCBpbmNsdWRlIG9ubHkgdGhlIGZlYXR1cmVzCisrdGhlaXIgYXBwbGljYXRpb24gdXNlcywgcmVkdWNpbmcgaXRzIHNwYWNlIHJlcXVpcmVtZW50cy4KKysKKytFR0xJQkMncyBjb21wb25lbnQgY29uZmlndXJhdGlvbiBzeXN0ZW0gY2F0ZWdvcml6ZXMgdGhlIGxpYnJhcnkncworK2Z1bmN0aW9ucyBpbnRvICJvcHRpb24gZ3JvdXBzIiwgYW5kIGFsbG93cyB5b3UgdG8gaW5jbHVkZSBvciBleGNsdWRlCisrb3B0aW9uIGdyb3VwcyBpbmRpdmlkdWFsbHkuICBTb21lIG9wdGlvbiBncm91cHMgZGVwZW5kIG9uIG90aGVyczsKKytFR0xJQkMgdHJhY2tzIHRoZXNlIHJlbGF0aW9uc2hpcHMsIGFuZCBlbnN1cmVzIHRoYXQgdGhlIHNlbGVjdGVkCisrY29uZmlndXJhdGlvbiB5aWVsZHMgYSBmdW5jdGlvbmluZyBsaWJyYXJ5LgorKworKworK0NvbnNpc3RlbnQgYW5kIFByZWRpY3RhYmxlIEJlaGF2aW9yCisrCisrQSBmbGV4aWJsZSBjb25maWd1cmF0aW9uIHN5c3RlbSBpcyBhIG1peGVkIGJsZXNzaW5nOiBpZiB0aGUgb3B0aW9ucworK29mZmVyZWQgYXJlIHBvb3JseSBkZXNpZ25lZCwgaXQgY2FuIGJlIGhhcmQgdG8gc2VlIHdoaWNoIGNob2ljZXMgd2lsbAorK2hhdmUgdGhlIGRlc2lyZWQgZWZmZWN0cywgYW5kIGNob2ljZXMgd2l0aCBvYnNjdXJlIGNvbnNlcXVlbmNlcyBjYW4KKyttYWtlIGRlYnVnZ2luZyBkaWZmaWN1bHQuICBFR0xJQkMncyBjb25maWd1cmF0aW9uIGZvbGxvd3Mgc29tZSBnZW5lcmFsCisrcHJpbmNpcGxlcyB0byByZWR1Y2UgdGhlc2Ugcmlza3M6CisrCisrLSBFR0xJQkMgaGFzIGEgc2luZ2xlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgZWFjaCB0YXJnZXQKKysgIGFyY2hpdGVjdHVyZS4KKysKKystIEluIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIGFsbCBvcHRpb24gZ3JvdXBzIGFyZSBlbmFibGVkLCBhbmQKKysgIEVHTElCQyBpcyB1cHdhcmRseSBBUEktIGFuZCBBQkktY29tcGF0aWJsZSB3aXRoIEdMSUJDLgorKworKy0gQXMgbXVjaCBhcyBwb3NzaWJsZSwgY29uZmlndXJhdGlvbnMgb25seSBhZmZlY3Qgd2hhdCBmdW5jdGlvbnMgYXJlCisrICBwcmVzZW50LCBub3QgaG93IHRoZXkgYmVoYXZlLiAgSWYgdGhlIHN5c3RlbSB3b3JrcyB3aXRoIGFuIG9wdGlvbgorKyAgZ3JvdXAgZGlzYWJsZWQsIGl0IHdpbGwgc3RpbGwgd29yayB3aXRoIGl0IGVuYWJsZWQuCisrCisrLSBBcyBtdWNoIGFzIHBvc3NpYmxlLCBjb25maWd1cmF0aW9ucyBvbmx5IHNlbGVjdCBvcHRpb24gZ3JvdXBzIC0tLQorKyAgdGhleSBkbyBub3QgZGVzY3JpYmUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgorKworK1RoZXNlIHJ1bGVzIG1lYW4gdGhhdCB5b3UgaGF2ZSBhIHNpbXBsZSBkZWJ1Z2dpbmcgc3RyYXRlZ3kgYXZhaWxhYmxlCisraWYgeW91IHN1c3BlY3QgdGhhdCB5b3VyIEVHTElCQyBjb25maWd1cmF0aW9uIG1pZ2h0IGJlIHRoZSBzb3VyY2Ugb2YgYQorK3Byb2JsZW06IGZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLCByZS10ZXN0LCBhbmQgdGhlbgorK2Rpc2FibGUgb3B0aW9uIGdyb3VwcyBvbmUgYnkgb25lLCB1bnRpbCB0aGUgcHJvYmxlbSByZWFwcGVhcnMuCisrCisrCisrVGhlIE9wdGlvbiBHcm91cHMKKysKKytUbyBzZWUgdGhlIGN1cnJlbnQgZnVsbCBsaXN0IG9mIGltcGxlbWVudGVkIG9wdGlvbiBncm91cHMsIHJlZmVyIHRvIHRoZQorK2ZpbGUgJ29wdGlvbi1ncm91cHMuZGVmJyBhdCB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZSwgb3IgcnVuCisrJ21ha2UgbWVudWNvbmZpZycgZnJvbSB0aGUgdG9wLWxldmVsIGJ1aWxkIGRpcmVjdG9yeS4KKysKKytUaGUgUE9TSVguMS0yMDAxIHNwZWNpZmljYXRpb24gaW5jbHVkZXMgYSBzdWdnZXN0ZWQgcGFydGl0aW9uIG9mIGFsbAorK3RoZSBmdW5jdGlvbnMgaW4gdGhlIFBPU0lYIEMgQVBJIGludG8gb3B0aW9uIGdyb3VwczogbWF0aCBmdW5jdGlvbnMKKytsaWtlICdzaW4nIGFuZCAnY29zJzsgbmV0d29ya2luZyBmdW5jdGlvbnMgbGlrZSAnc29ja2V0JyBhbmQKKysnY29ubmVjdCc7IGFuZCBzbyBvbi4gIEVHTElCQyBjb3VsZCB1c2UgdGhpcyBwYXJ0aXRpb25pbmcgYXMgdGhlIGJhc2lzCisrZm9yIGZ1dHVyZSBvcHRpb24gZ3JvdXBzLgorKworKworK0ltcGxlbWVudGF0aW9uCisrCisrVGhlIEVHTElCQyBjb21wb25lbnQgY29uZmlndXJhdGlvbiBzeXN0ZW0gcmVzZW1ibGVzIHRoZSBhcHByb2FjaCB1c2VkCisrYnkgdGhlIExpbnV4IGtlcm5lbCB0byBzZWxlY3QgZGV2aWNlIGRyaXZlcnMsIG5ldHdvcmsgcHJvdG9jb2xzLCBhbmQKKytvdGhlciBmZWF0dXJlcy4gIEEgZmlsZSBuYW1lZCAnb3B0aW9uLWdyb3Vwcy5jb25maWcnIGluIHRoZSB0b3AtbGV2ZWwKKytidWlsZCBkaXJlY3RvcnkgY29udGFpbnMgYXNzaWdubWVudHMgdG8gTWFrZSB2YXJpYWJsZXMsIGVhY2ggb2Ygd2hpY2gKKytlbmFibGVzIG9yIGRpc2FibGVzIGEgcGFydGljdWxhciBvcHRpb24gZ3JvdXAuICBJZiB0aGUgdmFyaWFibGUncworK3ZhbHVlIGlzIHNldCB0byAneScsIHRoZW4gdGhlIG9wdGlvbiBncm91cCBpcyBlbmFibGVkOyBpZiBpdCBzZXQgdG8KKythbnl0aGluZyBlbHNlLCB0aGUgb3B0aW9uIGdyb3VwIGlzIG9taXR0ZWQuICBUaGUgZmlsZQorKydvcHRpb24tZ3JvdXBzLmRlZmF1bHRzJywgYXQgdGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUsIGVzdGFibGlzaGVzCisrZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCB2YXJpYWJsZXM7IGFsbCBvcHRpb24gZ3JvdXBzIGFyZSBlbmFibGVkIGJ5CisrZGVmYXVsdC4KKysKKytGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyAnb3B0aW9uLWdyb3Vwcy5jb25maWcnIHdvdWxkIG9taXQgbG9jYWxlCisrZGF0YSwgYnV0IGluY2x1ZGUgbWF0aGVtYXRpY2FsIGZ1bmN0aW9ucywgYW5kIGV2ZXJ5dGhpbmcgZWxzZToKKysKKysgICBPUFRJT05fRUdMSUJDX0xPQ0FMRVMgPSBuCisrICAgT1BUSU9OX0VHTElCQ19MSUJNID0geQorKworK0xpa2UgdGhlIExpbnV4IGtlcm5lbCwgRUdMSUJDIHN1cHBvcnRzIGEgc2ltaWxhciBzZXQgb2YgJypjb25maWcnIG1ha2UKKyt0YXJnZXRzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGNyZWF0ZSAnb3B0aW9uLWdyb3Vwcy5jb25maWcnLCB3aXRoIGFsbAorK2RlcGVuZGVuY2llcyBiZXR3ZWVuIG9wdGlvbiBncm91cHMgYXV0b21hdGljYWxseSBzYXRpc2ZpZWQuICBSdW4KKysnbWFrZSBoZWxwJyB0byBzZWUgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIG1ha2UgY29uZmlnIHRhcmdldHMuICBGb3IKKytleGFtcGxlLCAnbWFrZSBtZW51Y29uZmlnJyB3aWxsIHVwZGF0ZSB0aGUgY3VycmVudCBjb25maWcgdXRpbGlzaW5nIGEKKyttZW51IGJhc2VkIHByb2dyYW0uCisrCisrVGhlIG9wdGlvbiBncm91cCBuYW1lcyBhbmQgdGhlaXIgdHlwZSAoYm9vbGVhbiwgaW50LCBoZXgsIHN0cmluZyksIGhlbHAKKytkZXNjcmlwdGlvbiwgYW5kIGRlcGVuZGVuY2llcyB3aXRoIG90aGVyIG9wdGlvbiBncm91cHMsIGFyZSBkZXNjcmliZWQgYnkKKysnb3B0aW9uLWdyb3Vwcy5kZWYnIGF0IHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlLCBhbmFsb2dvdXMgdG8gdGhlCisrJ0tjb25maWcnIGZpbGVzIGluIHRoZSBMaW51eCBrZXJuZWwuCisrCisrSW4gZ2VuZXJhbCwgZWFjaCBvcHRpb24gZ3JvdXAgdmFyaWFibGUgY29udHJvbHMgd2hldGhlciBhIGdpdmVuIHNldCBvZgorK29iamVjdCBmaWxlcyBpbiBFR0xJQkMgaXMgY29tcGlsZWQgYW5kIGluY2x1ZGVkIGluIHRoZSBmaW5hbAorK2xpYnJhcmllcywgb3Igb21pdHRlZCBmcm9tIHRoZSBidWlsZC4KKysKKytFYWNoIHN1YmRpcmVjdG9yeSdzIE1ha2VmaWxlIGNhdGVnb3JpemVzIGl0cyByb3V0aW5lcywgbGlicmFyaWVzLCBhbmQKKytleGVjdXRhYmxlcyBieSBvcHRpb24gZ3JvdXAuICBGb3IgZXhhbXBsZSwgRUdMSUJDJ3MgJ21hdGgvTWFrZWZpbGUnCisrcGxhY2VzIHRoZSAnbGlibScgbGlicmFyeSBpbiB0aGUgT1BUSU9OX0VHTElCQ19MSUJNIGdyb3VwIGFzIGZvbGxvd3M6CisrCisrICAgZXh0cmEtbGlicy0kKE9QVElPTl9FR0xJQkNfTElCTSkgOj0gbGlibQorKworK0ZpbmFsbHksIGNvbW1vbiBjb2RlIGluICdNYWtlcnVsZXMnIGNpdGVzIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUKKysnZXh0cmEtbGlicy15Jywgc2VsZWN0aW5nIG9ubHkgdGhvc2UgbGlicmFyaWVzIHRoYXQgYmVsb25nIHRvIGVuYWJsZWQKKytvcHRpb24gZ3JvdXBzIHRvIGJlIGJ1aWx0LgorKworKworK0N1cnJlbnQgU3RhdHVzIGFuZCBGdXR1cmUgRGlyZWN0aW9ucworKworK1RoZSBFR0xJQkMgY29tcG9uZW50IGNvbmZpZ3VyYXRpb24gc3lzdGVtIGRlc2NyaWJlZCBoZXJlIGlzIHN0aWxsCisrdW5kZXIgZGV2ZWxvcG1lbnQuCisrCisrV2UgaGF2ZSB1c2VkIHRoZSBzeXN0ZW0gdG8gc3Vic2V0IHNvbWUgcG9ydGlvbnMgb2YgRUdMSUJDJ3MKKytJbmRleDogbGliYy9jb25maWd1cmUuYWMKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCA2NThjY2ZhLi5mOTA2MzkxIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMjQsNiArMjQsNyBAQCBlbmRpZgorIAorIGluY2x1ZGUgTWFrZWNvbmZpZworIAorK2luY2x1ZGUgb3B0aW9ucy1jb25maWcvTWFrZWZpbGUKKyAKKyAjIFRoaXMgaXMgdGhlIGRlZmF1bHQgdGFyZ2V0OyBpdCBtYWtlcyBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgdGVzdHMuCisgLlBIT05ZOiBhbGwKK2RpZmYgLS1naXQgYS9jb25maWcubWFrZS5pbiBiL2NvbmZpZy5tYWtlLmluCitpbmRleCBhOWY1Njk2Li4yOTRmOGQxIDEwMDY0NAorLS0tIGEvY29uZmlnLm1ha2UuaW4KKysrKyBiL2NvbmZpZy5tYWtlLmluCitAQCAtNDcsNiArNDcsOCBAQCBjKystc3lzaW5jbHVkZXMgPSBAQ1hYX1NZU0lOQ0xVREVTQAorIGFsbC13YXJuaW5ncyA9IEBhbGxfd2FybmluZ3NACisgZW5hYmxlLXdlcnJvciA9IEBlbmFibGVfd2Vycm9yQAorIAorK2tjb25maWdfdG9vbHMgPSBAS0NPTkZJR19UT09MU0AKKysKKyBoYXZlLXotY29tYnJlbG9jID0gQGxpYmNfY3Zfel9jb21icmVsb2NACisgaGF2ZS16LWV4ZWNzdGFjayA9IEBsaWJjX2N2X3pfZXhlY3N0YWNrQAorIGhhdmUtQmdyb3VwID0gQGxpYmNfY3ZfQmdyb3VwQAorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggN2Q3Mjk5YS4uNDExNjQwNCAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNjQxLDYgKzY0MSw3IEBAIElOU1RBTExfSU5GTworIFBFUkwKKyBCQVNIX1NIRUxMCisgbGliY19jdl9nY2Nfc3RhdGljX2xpYmdjYworK0tDT05GSUdfVE9PTFMKKyBDWFhfU1lTSU5DTFVERVMKKyBTWVNJTkNMVURFUworIEFVVE9DT05GCitAQCAtNzU1LDYgKzc1Niw3IEBAIHdpdGhfZnAKKyB3aXRoX2JpbnV0aWxzCisgd2l0aF9zZWxpbnV4Cisgd2l0aF9oZWFkZXJzCisrd2l0aF9rY29uZmlnCisgd2l0aF9kZWZhdWx0X2xpbmsKKyBlbmFibGVfc2FuaXR5X2NoZWNrcworIGVuYWJsZV9zaGFyZWQKK0BAIC0xNDU5LDYgKzE0NjEsOSBAQCBPcHRpb25hbCBQYWNrYWdlczoKKyAgIC0td2l0aC1zZWxpbnV4ICAgICAgICAgIGlmIGJ1aWxkaW5nIHdpdGggU0VMaW51eCBzdXBwb3J0CisgICAtLXdpdGgtaGVhZGVycz1QQVRIICAgICBsb2NhdGlvbiBvZiBzeXN0ZW0gaGVhZGVycyB0byB1c2UgKGZvciBleGFtcGxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAvdXNyL3NyYy9saW51eC9pbmNsdWRlKSBbZGVmYXVsdD1jb21waWxlciBkZWZhdWx0XQorKyAgLS13aXRoLWtjb25maWc9UEFUSCAgICAgbG9jYXRpb24gb2Yga2NvbmZpZyB0b29scyB0byB1c2UgKGZyb20gTGludXgga2VybmVsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZHMpIHRvIHJlLXVzZSBmb3IgY29uZmlndXJpbmcgRUdMSUJDIG9wdGlvbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzCisgICAtLXdpdGgtZGVmYXVsdC1saW5rICAgICBkbyBub3QgdXNlIGV4cGxpY2l0IGxpbmtlciBzY3JpcHRzCisgICAtLXdpdGgtY3B1PUNQVSAgICAgICAgICBzZWxlY3QgY29kZSBmb3IgQ1BVIHZhcmlhbnQKKyAKK0BAIC0zNTE3LDYgKzM1MjIsMTQgQEAgZmkKKyAKKyAKKyAKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLWtjb25maWcgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7d2l0aF9rY29uZmlnK3NldH0iID0gc2V0OyB0aGVuCisrICB3aXRodmFsPSR3aXRoX2tjb25maWc7IEtDT05GSUdfVE9PTFM9JHdpdGh2YWwKKytlbHNlCisrICBLQ09ORklHX1RPT0xTPScnCisrZmkKKysKKysKKyAKKyAjIENoZWNrIHdoZXRoZXIgLS13aXRoLWRlZmF1bHQtbGluayB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHt3aXRoX2RlZmF1bHRfbGluaytzZXR9IiA9IHNldDsgdGhlbiA6CitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBhNDY3YTY5Li5mYzBlZDRkIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMzYsNiArMTM2LDE2IEBAIEFDX0FSR19XSVRIKFtoZWFkZXJzXSwKKyAJICAgIFtzeXNoZWFkZXJzPScnXSkKKyBBQ19TVUJTVChzeXNoZWFkZXJzKQorIAorK0FDX0FSR19XSVRIKFtrY29uZmlnXSwKKysJICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgta2NvbmZpZz1QQVRIXSwKKysJCQkgICBbbG9jYXRpb24gb2Yga2NvbmZpZyB0b29scyB0byB1c2UgKGZyb20gTGludXgKKysJCQkgICAga2VybmVsIGJ1aWxkcykgdG8gcmUtdXNlIGZvciBjb25maWd1cmluZyBFR0xJQkMKKysJCQkgICAgb3B0aW9uIGdyb3Vwc10pLAorKwkgICAgW0tDT05GSUdfVE9PTFM9JHdpdGh2YWxdLAorKwkgICAgW0tDT05GSUdfVE9PTFM9JyddKQorK0FDX1NVQlNUKEtDT05GSUdfVE9PTFMpCisrCisrCisgQUNfU1VCU1QodXNlX2RlZmF1bHRfbGluaykKKyBBQ19BUkdfV0lUSChbZGVmYXVsdC1saW5rXSwKKyAJICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtZGVmYXVsdC1saW5rXSwKK2RpZmYgLS1naXQgYS9vcHRpb24tZ3JvdXBzLmRlZiBiL29wdGlvbi1ncm91cHMuZGVmCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNmFlYmQ5NAorLS0tIC9kZXYvbnVsbAorKysrIGIvb3B0aW9uLWdyb3Vwcy5kZWYKK0BAIC0wLDAgKzEsODY4IEBACisrIyBUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBvcHRpb24gZ3JvdXBzIEVHTElCQyBjdXJyZW50bHkgc3VwcG9ydHMsIGluCisrIyBhIGZvcm1hdCBha2luIHRvIHRoZSBMaW51eCBLY29uZmlnIHN5c3RlbSdzLiAgVGhlIHN5bnRheCBtYXkgY2hhbmdlCisrIyBvdmVyIHRpbWUuCisrIworKyMgQW4gZW50cnkgb2YgdGhlIGZvcm06CisrIworKyMgICBjb25maWcgR1JPVVBfTkFNRQorKyMgICAgICAgYm9vbCAib25lLWxpbmUgZXhwbGFuYXRpb24gb2Ygd2hhdCB0aGlzIG9wdGlvbiBncm91cCBjb250cm9scyIKKysjICAgICAgIGhlbHAKKysjICAgICAgICAgICBNdWx0aS1saW5lIGhlbHAgZXhwbGFpbmluZyB0aGUgb3B0aW9uIGdyb3VwJ3MgbWVhbmluZyBpbgorKyMgICAgICAgICAgIHNvbWUgZGV0YWlsLCB0ZXJtaW5hdGVkIGJ5IGluZGVudGF0aW9uIGxldmVsLgorKyMKKysjIGRlZmluZXMgYW4gb3B0aW9uIGdyb3VwIHdob3NlIHZhcmlhYmxlIGlzIEdST1VQX05BTUUsIHdpdGgKKysjIG1lYW5pbmdmdWwgdmFsdWVzICd5JyAoZW5hYmxlZCkgYW5kICduJyAoZGlzYWJsZWQpLiAgVGhlCisrIyBkb2N1bWVudGF0aW9uIGlzIGZvcm1hdHRlZCB0byBiZSBjb25zdW1lZCBieSBzb21lIHNvcnQgb2YKKysjIGludGVyYWN0aXZlIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlLCBidXQgRUdMSUJDIGRvZXNuJ3QgaGF2ZSBzdWNoIGFuCisrIyBpbnRlcmZhY2UgeWV0LgorKyMKKysjIEFuIG9wdGlvbiBtYXkgaGF2ZSBhICdkZXBlbmRzIG9uJyBsaW5lLCBpbmRpY2F0aW5nIHdoaWNoIG90aGVyIG9wdGlvbnMKKysjIG11c3QgYWxzbyBiZSBlbmFibGVkIGlmIHRoaXMgb3B0aW9uIGlzLiAgQXQgcHJlc2VudCwgRUdMSUJDIGRvZXNuJ3QKKysjIGNoZWNrIHRoYXQgdGhlc2UgZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQuCisrIworKyMgT3B0aW9uIGdyb3VwIHZhcmlhYmxlcyBnZXQgdGhlaXIgZGVmYXVsdCB2YWx1ZXMgZnJvbSB0aGUgZmlsZQorKyMgJ29wdGlvbi1ncm91cHMuZGVmYXVsdHMnLCBpbiB0aGUgdG9wIGRpcmVjdG9yeSBvZiB0aGUgRUdMSUJDIHNvdXJjZQorKyMgdHJlZS4gIEJ5IGRlZmF1bHQsIGFsbCBFR0xJQkMgb3B0aW9uIGdyb3VwcyBhcmUgZW5hYmxlZCAtLS0gdGhlaXIKKysjIHZhcmlhYmxlcyBhcmUgc2V0IHRvICd5Jy4KKysjCisrIyBBZnRlciBpbmNsdWRpbmcgJ29wdGlvbi1ncm91cHMuZGVmYXVsdHMnLCB0aGUgRUdMSUJDIG1ha2UgbWFjaGluZXJ5CisrIyBpbmNsdWRlcyB0aGUgZmlsZSAnb3B0aW9uLWdyb3Vwcy5jb25maWcnIGZyb20gdGhlIHRvcCBvZiB0aGUgYnVpbGQKKysjIHRyZWUsIGlmIGl0IGlzIHByZXNlbnQuICBEZXZlbG9wZXJzIGNhbiBwbGFjZSBhc3NpZ25tZW50cyB0byBvcHRpb24KKysjIGdyb3VwIHZhcmlhYmxlcyBpbiB0aGF0IGZpbGUgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRzLiAgRm9yIGV4YW1wbGUsCisrIyB0byBkaXNhYmxlIGFuIG9wdGlvbiBncm91cCwgcGxhY2UgYSBsaW5lIG9mIHRoZSBmb3JtOgorKyMKKysjICAgIE9QVElPTl9HUk9VUF9OQU1FID0gbgorKyMKKysjIGluICdvcHRpb24tZ3JvdXBzLmNvbmZpZycgYXQgdGhlIHRvcCBvZiB5b3VyIGJ1aWxkIHRyZWUuICBUbworKyMgZXhwbGljaXRseSBlbmFibGUgYW4gb3B0aW9uIGdyb3VwLCB5b3UgbWF5IGFsc28gd3JpdGU6CisrIworKyMgICAgT1BUSU9OX0dST1VQX05BTUUgPSB5CisrIworKyMgYWx0aG91Z2ggdGhpcyBzaW1wbHkgcmVlc3RhYmxpc2hlcyB0aGUgdmFsdWUgYWxyZWFkeSBzZXQgYnkKKysjICdvcHRpb24tZ3JvdXBzLmRlZmF1bHRzJy4KKysKKytjb25maWcgRUdMSUJDX0FEVkFOQ0VEX0lORVQ2CisrICAgYm9vbCAiSVB2NiBBZHZhbmNlZCBTb2NrZXRzIEFQSSBzdXBwb3J0IChSRkMzNTQyKSIKKysgICBkZXBlbmRzIG9uIEVHTElCQ19JTkVUCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZnVuY3Rpb25zIHNwZWNpZmllZCBieSBSRkMgMzU0MiwKKysgICAgICAgIkFkdmFuY2VkIFNvY2tldHMgQXBwbGljYXRpb24gUHJvZ3JhbSBJbnRlcmZhY2UgKEFQSSkgZm9yCisrICAgICAgIElQdjYiLgorKworKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgICBpbmV0Nl9vcHRfYXBwZW5kCisrICAgICAgICAgaW5ldDZfb3B0X2ZpbmQKKysgICAgICAgICBpbmV0Nl9vcHRfZmluaXNoCisrICAgICAgICAgaW5ldDZfb3B0X2dldF92YWwKKysgICAgICAgICBpbmV0Nl9vcHRfaW5pdAorKyAgICAgICAgIGluZXQ2X29wdGlvbl9hbGxvYworKyAgICAgICAgIGluZXQ2X29wdGlvbl9hcHBlbmQKKysgICAgICAgICBpbmV0Nl9vcHRpb25fZmluZAorKyAgICAgICAgIGluZXQ2X29wdGlvbl9pbml0CisrICAgICAgICAgaW5ldDZfb3B0aW9uX25leHQKKysgICAgICAgICBpbmV0Nl9vcHRpb25fc3BhY2UKKysgICAgICAgICBpbmV0Nl9vcHRfbmV4dAorKyAgICAgICAgIGluZXQ2X29wdF9zZXRfdmFsCisrICAgICAgICAgaW5ldDZfcnRoX2FkZAorKyAgICAgICAgIGluZXQ2X3J0aF9nZXRhZGRyCisrICAgICAgICAgaW5ldDZfcnRoX2luaXQKKysgICAgICAgICBpbmV0Nl9ydGhfcmV2ZXJzZQorKyAgICAgICAgIGluZXQ2X3J0aF9zZWdtZW50cworKyAgICAgICAgIGluZXQ2X3J0aF9zcGFjZQorKworK2NvbmZpZyBFR0xJQkNfQkFDS1RSQUNFCisrICAgYm9vbCAiRnVuY3Rpb25zIGZvciBwcm9kdWNpbmcgYmFja3RyYWNlcyIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgcHJvZHVjaW5nIGEgbGlzdCBvZgorKyAgICAgICB0aGUgZnVuY3Rpb24gY2FsbHMgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZSBpbiBhIHRocmVhZCwgZnJvbQorKyAgICAgICB3aXRoaW4gdGhlIHRocmVhZCBpdHNlbGYuICBUaGVzZSBmdW5jdGlvbnMgYXJlIG9mdGVuIHVzZWQKKysgICAgICAgd2l0aGluIHNpZ25hbCBoYW5kbGVycywgdG8gcHJvZHVjZSBkaWFnbm9zdGljIG91dHB1dC4KKysKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICAgYmFja3RyYWNlCisrICAgICAgICAgYmFja3RyYWNlX3N5bWJvbHMKKysgICAgICAgICBiYWNrdHJhY2Vfc3ltYm9sc19mZAorKworK2NvbmZpZyBFR0xJQkNfQklHX01BQ1JPUworKyAgIGJvb2wgIlVzZSBleHRlbnNpdmUgaW5saW5lIGNvZGUiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBzcGVjaWZpZXMgd2hldGhlciBjZXJ0YWluIHBpZWNlcyBvZiBjb2RlCisrICAgICAgIHNob3VsZCBiZSBpbmxpbmVkIHRvIGFjaGlldmUgbWF4aW11bSBzcGVlZC4gIElmIHRoaXMgb3B0aW9uCisrICAgICAgIGdyb3VwIGlzIG5vdCBzZWxlY3RlZCwgZnVuY3Rpb24gY2FsbHMgd2lsbCBiZSB1c2VkIGluc3RlYWQsCisrICAgICAgIGhlbmNlIHJlZHVjaW5nIHRoZSBsaWJyYXJ5IGZvb3RwcmludC4KKysKKytjb25maWcgRUdMSUJDX0JTRAorKyAgIGJvb2wgIkJTRC1zcGVjaWZpYyBmdW5jdGlvbnMsIGFuZCB0aGVpciBjb21wYXRpYmlsaXR5IHN0dWJzIgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgZnVuY3Rpb25zIHNwZWNpZmljIHRvIEJTRCBrZXJuZWxzLgorKyAgICAgICBBIG51bWJlciBvZiB0aGVzZSBmdW5jdGlvbnMgaGF2ZSBzdHViIHZlcnNpb25zIHRoYXQgYXJlIGFsc28KKysgICAgICAgaW5jbHVkZWQgaW4gbGlicmFyaWVzIGJ1aWx0IGZvciBub24tQlNEIHN5c3RlbXMgZm9yCisrICAgICAgIGNvbXBhdGliaWxpdHkuCisrCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgIGNoZmxhZ3MKKysgICAgICAgICBmY2hmbGFncworKyAgICAgICAgIGxjaG1vZAorKyAgICAgICAgIHJldm9rZQorKyAgICAgICAgIHNldGxvZ2luCisrCisrY29uZmlnIEVHTElCQ19DWFhfVEVTVFMKKysgICBib29sICJUZXN0cyB0aGF0IGxpbmsgYWdhaW5zdCB0aGUgc3RhbmRhcmQgQysrIGxpYnJhcnkuIgorKyAgIGRlcGVuZHMgb24gUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTyAmJiBFR0xJQkNfTElCTQorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgZG9lcyBub3QgaW5jbHVkZSBhbnkgQyBsaWJyYXJ5IGZ1bmN0aW9uczsKKysgICAgICAgaW5zdGVhZCwgaXQgY29udHJvbHMgd2hpY2ggRUdMSUJDIHRlc3RzIGFuIG9yZGluYXJ5ICdtYWtlCisrICAgICAgIHRlc3RzJyBydW5zLiAgV2l0aCB0aGlzIGdyb3VwIGRpc2FibGVkLCB0ZXN0cyB0aGF0IHdvdWxkCisrICAgICAgIG5vcm1hbGx5IGxpbmsgYWdhaW5zdCB0aGUgc3RhbmRhcmQgQysrIGxpYnJhcnkgYXJlIG5vdAorKyAgICAgICBydW4uCisrCisrICAgICAgIFRoZSBzdGFuZGFyZCBDKysgbGlicmFyeSBkZXBlbmRzIG9uIHRoZSBtYXRoIGxpYnJhcnkgJ2xpYm0nIGFuZAorKyAgICAgICB0aGUgd2lkZSBjaGFyYWN0ZXIgSS9PIGZ1bmN0aW9ucyBpbmNsdWRlZCBpbiBFR0xJQkMuICBTbyB0aG9zZQorKyAgICAgICBvcHRpb24gZ3JvdXBzIG11c3QgYmUgZW5hYmxlZCBpZiB0aGlzIHRlc3QgaXMgZW5hYmxlZC4KKysKKytjb25maWcgRUdMSUJDX0NBVEdFVFMKKysgICBib29sICJGdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyBtZXNzYWdlIGNhdGFsb2dzIgorKyAgIGRlcGVuZHMgb24gRUdMSUJDX0xPQ0FMRV9DT0RFCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyBtZXNzYWdlCisrICAgICAgIGNhdGFsb2dzOiBjYXRvcGVuLCBjYXRjbG9zZSwgYW5kIGNhdGdldHMuCisrCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGRlcGVuZHMgb24gdGhlIEVHTElCQ19MT0NBTEVfQ09ERQorKyAgICAgICBvcHRpb24gZ3JvdXAuCisrCisrY29uZmlnIEVHTElCQ19DSEFSU0VUUworKyAgIGJvb2wgImljb252L2djb252IGNoYXJhY3RlciBzZXQgY29udmVyc2lvbiBsaWJyYXJpZXMiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBzdXBwb3J0IGZvciBjaGFyYWN0ZXIgc2V0cyBvdGhlcgorKyAgICAgICB0aGFuIEFTQ0lJIChBTlNJX1gzLjQtMTk2OCkgYW5kIFVuaWNvZGUgYW5kIElTTy0xMDY0NiBpbiB0aGVpcgorKyAgICAgICB2YXJpb3VzIGVuY29kaW5ncy4gIFRoaXMgYWZmZWN0cyBib3RoIHRoZSBjaGFyYWN0ZXIgc2V0cworKyAgICAgICBzdXBwb3J0ZWQgYnkgdGhlIHdpZGUgYW5kIG11bHRpYnl0ZSBjaGFyYWN0ZXIgZnVuY3Rpb25zLCBhbmQKKysgICAgICAgdGhvc2Ugc3VwcG9ydGVkIGJ5IHRoZSAnaWNvbnYnIGZ1bmN0aW9ucy4KKysKKysgICAgICAgV2l0aCB0aGlzIG9wdGlvbiBncm91cCBkaXNhYmxlZCwgRUdMSUJDIHN1cHBvcnRzIG9ubHkgdGhlCisrICAgICAgIGZvbGxvd2luZyBjaGFyYWN0ZXIgc2V0czoKKysKKysgICAgICAgICAgQU5TSV9YMy40ICAgICAgICAgLSBBU0NJSQorKyAgICAgICAgICBBTlNJX1gzLjQtMTk2OAorKyAgICAgICAgICBBTlNJX1gzLjQtMTk4NgorKyAgICAgICAgICBBU0NJSQorKyAgICAgICAgICBDUDM2NworKyAgICAgICAgICBDU0FTQ0lJCisrICAgICAgICAgIElCTTM2NworKyAgICAgICAgICBJU08tSVItNgorKyAgICAgICAgICBJU082NDYtVVMKKysgICAgICAgICAgSVNPXzY0Ni5JUlY6MTk5MQorKyAgICAgICAgICBPU0YwMDAxMDAyMAorKyAgICAgICAgICBVUworKyAgICAgICAgICBVUy1BU0NJSQorKworKyAgICAgICAgICAxMDY0Ni0xOjE5OTMgICAgICAtIElTTyAxMDY0NiwgaW4gYmlnLWVuZGlhbiBVQ1M0IGZvcm0KKysgICAgICAgICAgMTA2NDYtMToxOTkzL1VDUzQKKysgICAgICAgICAgQ1NVQ1M0CisrICAgICAgICAgIElTTy0xMDY0NgorKyAgICAgICAgICBJU08tMTA2NDYvVUNTNAorKyAgICAgICAgICBPU0YwMDAxMDEwNAorKyAgICAgICAgICBPU0YwMDAxMDEwNQorKyAgICAgICAgICBPU0YwMDAxMDEwNgorKyAgICAgICAgICBVQ1MtNAorKyAgICAgICAgICBVQ1MtNEJFCisrICAgICAgICAgIFVDUzQKKysKKysgICAgICAgICAgVUNTLTRMRSAgICAgICAgICAgLSBJU08gMTA2NDYsIGluIGxpdHRsZS1lbmRpYW4gVUNTNCBmb3JtCisrCisrICAgICAgICAgIElTTy0xMDY0Ni9VVEYtOCAgIC0gSVNPIDEwNjQ2LCBpbiBVVEYtOCBmb3JtCisrICAgICAgICAgIElTTy0xMDY0Ni9VVEY4CisrICAgICAgICAgIElTTy1JUi0xOTMKKysgICAgICAgICAgT1NGMDUwMTAwMDEKKysgICAgICAgICAgVVRGLTgKKysgICAgICAgICAgVVRGOAorKworKyAgICAgICAgICBJU08tMTA2NDYvVUNTMiAgICAtIElTTyAxMDY0NiwgaW4gdGFyZ2V0LWVuZGlhbiBVQ1MyIGZvcm0KKysgICAgICAgICAgT1NGMDAwMTAxMDAKKysgICAgICAgICAgT1NGMDAwMTAxMDEKKysgICAgICAgICAgT1NGMDAwMTAxMDIKKysgICAgICAgICAgVUNTLTIKKysgICAgICAgICAgVUNTMgorKworKyAgICAgICAgICBVQ1MtMkJFICAgICAgICAgICAtIElTTyAxMDY0NiwgaW4gYmlnLWVuZGlhbiBVQ1MyIGZvcm0KKysgICAgICAgICAgVU5JQ09ERUJJRworKworKyAgICAgICAgICBVQ1MtMkxFICAgICAgICAgICAtIElTTyAxMDY0NiwgaW4gbGl0dGxlLWVuZGlhbiBVQ1MyIGZvcm0KKysgICAgICAgICAgVU5JQ09ERUxJVFRMRQorKworKyAgICAgICAgICBXQ0hBUl9UICAgICAgICAgICAtIEVHTElCQydzIGludGVybmFsIGZvcm0gKHRhcmdldC1lbmRpYW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzItYml0IElTTyAxMDY0NikKKysKKytjb25maWcgRUdMSUJDX0NSWVBUCisrICAgYm9vbCAiRW5jcnlwdGlvbiBsaWJyYXJ5IgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGBsaWJjcnlwdCcgbGlicmFyeSB3aGljaAorKyAgICAgICBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIG9uZS13YXkgZW5jcnlwdGlvbi4gIFN1cHBvcnRlZAorKyAgICAgICBlbmNyeXB0aW9uIGFsZ29yaXRobXMgaW5jbHVkZSBNRDUsIFNIQS0yNTYsIFNIQS01MTIgYW5kIERFUy4KKysKKytjb25maWcgRUdMSUJDX0NSWVBUX1VGQworKyAgIGJvb2wgIlVsdHJhIGZhc3QgYGNyeXB0JyBpbXBsZW1lbnRhdGlvbiIKKysgICBkZXBlbmRzIG9uIEVHTElCQ19DUllQVAorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgcHJvdmlkZXMgdWx0cmEgZmFzdCBERVMtYmFzZWQgaW1wbGVtZW50YXRpb24gb2YKKysgICAgICAgdGhlIGBjcnlwdCcgZnVuY3Rpb24uICBXaGVuIHRoaXMgb3B0aW9uIGdyb3VwIGlzIGRpc2FibGVkLAorKyAgICAgICAoYSkgdGhlIGxpYnJhcnkgd2lsbCBub3QgcHJvdmlkZSB0aGUgc2V0a2V5W19yXSBhbmQgZW5jcnlwdFtfcl0KKysgICAgICAgZnVuY3Rpb25zIGFuZCAoYikgdGhlIGNyeXB0W19yXSBmdW5jdGlvbiB3aWxsIHJldHVybiBOVUxMIGFuZCBzZXQgdGhlCisrICAgICAgIGVycm5vIHRvIEVOT1NZUyBpZiAvc2FsdC8gcGFzc2VkIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gZWl0aGVyIE1ENSwKKysgICAgICAgU0hBLTI1NiBvciBTSEEtNTEyIGFsZ29yaXRobS4KKysKKytjb25maWcgRUdMSUJDX0RCX0FMSUFTRVMKKysgICBib29sICJGdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyB0aGUgbWFpbCBhbGlhc2VzIGRhdGFiYXNlIgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkdWVzIGZ1bmN0aW9ucyBmb3IgbG9va2luZyB1cCBtYWlsCisrICAgICAgIGFsaWFzZXMgaW4gJy9ldGMvYWxpYXNlcycgb3IgdXNpbmcgbnNzd2l0Y2guICBJdCBpbmNsdWRlcyB0aGUKKysgICAgICAgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgICBlbmRhbGlhc2VudAorKyAgICAgICAgIGdldGFsaWFzYnluYW1lCisrICAgICAgICAgZ2V0YWxpYXNieW5hbWVfcgorKyAgICAgICAgIGdldGFsaWFzZW50CisrICAgICAgICAgZ2V0YWxpYXNlbnRfcgorKyAgICAgICAgIHNldGFsaWFzZW50CisrCisrICAgICAgIFdoZW4gdGhpcyBvcHRpb24gZ3JvdXAgaXMgZGlzYWJsZWQsIHRoZSBOU1Mgc2VydmljZSBsaWJyYXJpZXMKKysgICAgICAgYWxzbyBsYWNrIHN1cHBvcnQgZm9yIHF1ZXJ5aW5nIHRoZWlyIG1haWwgYWxpYXMgdGFibGVzLgorKworK2NvbmZpZyBFR0xJQkNfRU5WWgorKyAgIGJvb2wgIkZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgZW52ei1zdHlsZSBlbnZpcm9ubWVudCB2ZWN0b3JzLiIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGNvbnRhaW5zIGZ1bmN0aW9ucyBmb3IgY3JlYXRpbmcgYW5kIG9wZXJhdGluZworKyAgICAgICBvbiBlbnZ6IHZlY3RvcnMuICBBbiAiZW52eiB2ZWN0b3IiIGlzIGEgdmVjdG9yIG9mIHN0cmluZ3MgaW4gYQorKyAgICAgICBjb250aWd1b3VzIGJsb2NrIG9mIG1lbW9yeSwgd2hlcmUgZWFjaCBlbGVtZW50IGlzIGEgbmFtZS12YWx1ZQorKyAgICAgICBwYWlyLCBhbmQgZWxlbWVudHMgYXJlIHNlcGFyYXRlZCBmcm9tIHRoZWlyIG5laWdoYm9ycyBieSBudWxsCisrICAgICAgIGNoYXJhY3RlcnMuCisrCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgZW52el9hZGQgICAgICAgIGVudnpfbWVyZ2UKKysgICAgICAgIGVudnpfZW50cnkgICAgICBlbnZ6X3JlbW92ZQorKyAgICAgICAgZW52el9nZXQgICAgICAgIGVudnpfc3RyaXAKKysKKytjb25maWcgRUdMSUJDX0ZDVlQKKysgICBib29sICJGdW5jdGlvbnMgZm9yIGNvbnZlcnRpbmcgZmxvYXRpbmctcG9pbnQgbnVtYmVycyB0byBzdHJpbmdzIgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciBjb252ZXJ0aW5nCisrICAgICAgIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgdG8gc3RyaW5ncy4KKysKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICAgZWN2dCAgICAgICAgICAgcWVjdnQKKysJIGVjdnRfcgkJcWVjdnRfcgorKyAgICAgICAgIGZjdnQJCXFmY3Z0CisrCSBmY3Z0X3IJCXFmY3Z0X3IKKysgICAgICAgICBnY3Z0CQlxZ2N2dAorKworK2NvbmZpZyBFR0xJQkNfRk1UTVNHCisrICAgYm9vbCAiRnVuY3Rpb25zIGZvciBmb3JtYXR0aW5nIG1lc3NhZ2VzIgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICAgYWRkc2V2ZXJpdHkgICAgZm10bXNnCisrCisrY29uZmlnIEVHTElCQ19GU1RBQgorKyAgIGJvb2wgIkFjY2VzcyBmdW5jdGlvbnMgZm9yICdmc3RhYiciCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgdGhlIG1vdW50CisrICAgICAgIHBvaW50IHNwZWNpZmljYXRpb24gdGFibGUsICcvZXRjL2ZzdGFiJy4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUKKysgICAgICAgbm90IGluY2x1ZGVkIGluIHRoZSBQT1NJWCBzdGFuZGFyZCwgd2hpY2ggcHJvdmlkZXMgdGhlCisrICAgICAgICdnZXRtbnRlbnQnIGZhbWlseSBvZiBmdW5jdGlvbnMgaW5zdGVhZC4KKysKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICAgZW5kZnNlbnQgICAgICAgZ2V0ZnNzcGVjCisrICAgICAgICAgZ2V0ZnNlbnQgICAgICAgc2V0ZnNlbnQKKysgICAgICAgICBnZXRmc2ZpbGUKKysKKytjb25maWcgRUdMSUJDX0ZUUkFWRVJTRQorKyAgIGJvb2wgIkZ1bmN0aW9ucyBmb3IgdHJhdmVyc2luZyBmaWxlIGhpZXJhcmNoaWVzIgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciB0cmF2ZXJzaW5nIGZpbGUKKysgICAgICAgVU5JWCBmaWxlIGhpZXJhY2hpZXMuCisrCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgIGZ0c19vcGVuICAgICAgIGZ0dworKwkgZnRzX3JlYWQJbmZ0dworKyAgICAgICAgIGZ0c19jaGlsZHJlbglmdHc2NAorKwkgZnRzX3NldAluZnR3NjQKKysgICAgICAgICBmdHNfY2xvc2UKKysKKytjb25maWcgRUdMSUJDX0dFVExPR0lOCisrICAgYm9vbCAiVGhlIGdldGxvZ2luIGZ1bmN0aW9uIgorKyAgIGRlcGVuZHMgb24gRUdMSUJDX1VUTVAKKysgICBoZWxwCisrICAgICAgIFRoaXMgZnVuY3Rpb24gZ3JvdXAgaW5jbHVkZXMgdGhlICdnZXRsb2dpbicgYW5kICdnZXRsb2dpbl9yJworKyAgICAgICBmdW5jdGlvbnMsIHdoaWNoIHJldHVybiB0aGUgdXNlciBuYW1lIGFzc29jaWF0ZWQgYnkgdGhlIGxvZ2luCisrICAgICAgIGFjdGl2aXR5IHdpdGggdGhlIGN1cnJlbnQgcHJvY2VzcydzIGNvbnRyb2xsaW5nIHRlcm1pbmFsLgorKworKyAgICAgICBXaXRoIHRoaXMgb3B0aW9uIGdyb3VwIGRpc2FibGVkLCB0aGUgJ2dsb2InIGZ1bmN0aW9uIHdpbGwgbm90CisrICAgICAgIGZhbGwgYmFjayBvbiAnZ2V0bG9naW4nIHRvIGZpbmQgdGhlIHVzZXIncyBsb2dpbiBuYW1lIGZvciB0aWxkZQorKyAgICAgICBleHBhbnNpb24gd2hlbiB0aGUgJ0hPTUUnIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZXQuCisrCisrY29uZmlnIEVHTElCQ19JRE4KKysgICBib29sICJJbnRlcm5hdGlvbmFsIGRvbWFpbiBuYW1lcyBzdXBwb3J0IgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGBsaWJjaWRuJyBsaWJyYXJ5IHdoaWNoCisrICAgICAgIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGludGVybmF0aW9uYWwgZG9tYWluIG5hbWVzLgorKworK2NvbmZpZyBFR0xJQkNfSU5FVAorKyAgIGJvb2wgIk5ldHdvcmtpbmcgc3VwcG9ydCIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIG5ldHdvcmtpbmctc3BlY2lmaWMgZnVuY3Rpb25zIGFuZAorKyAgICAgICBkYXRhLiAgV2l0aCBFR0xJQkNfSU5FVCBkaXNhYmxlZCwgdGhlIEVHTElCQworKyAgICAgICBpbnN0YWxsYXRpb24gYW5kIEFQSSBjaGFuZ2VzIGFzIGZvbGxvd3M6CisrCisrICAgICAgIC0gVGhlIGZvbGxvd2luZyBsaWJyYXJpZXMgYXJlIG5vdCBpbnN0YWxsZWQ6CisrCisrICAgICAgICAgbGlibnNsCisrICAgICAgICAgbGlibnNzX2NvbXBhdAorKyAgICAgICAgIGxpYm5zc19kbnMKKysgICAgICAgICBsaWJuc3NfaGVzaW9kCisrICAgICAgICAgbGlibnNzX25pcworKyAgICAgICAgIGxpYm5zc19uaXNwbHVzCisrICAgICAgICAgbGlicmVzb2x2CisrCisrICAgICAgIC0gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBhcmUgb21pdHRlZCBmcm9tIGxpYmM6CisrCisrICAgICAgICAgYXV0aGRlc19jcmVhdGUgICAgICAgICAgIGhzdHJlcnJvciAgICAgICAgICAgICAgc3ZjX2Zkc2V0CisrICAgICAgICAgYXV0aGRlc19nZXR1Y3JlZCAgICAgICAgIGh0b25sICAgICAgICAgICAgICAgICAgc3ZjX2dldHJlcQorKyAgICAgICAgIGF1dGhkZXNfcGtfY3JlYXRlICAgICAgICBodG9ucyAgICAgICAgICAgICAgICAgIHN2Y19nZXRyZXFfY29tbW9uCisrICAgICAgICAgYXV0aG5vbmVfY3JlYXRlICAgICAgICAgIGlmX2ZyZWVuYW1laW5kZXggICAgICAgc3ZjX2dldHJlcV9wb2xsCisrICAgICAgICAgYXV0aHVuaXhfY3JlYXRlICAgICAgICAgIGlmX2luZGV4dG9uYW1lICAgICAgICAgc3ZjX2dldHJlcXNldAorKyAgICAgICAgIGF1dGh1bml4X2NyZWF0ZV9kZWZhdWx0ICBpZl9uYW1laW5kZXggICAgICAgICAgIHN2Y19tYXhfcG9sbGZkCisrICAgICAgICAgYmluZHJlc3Zwb3J0ICAgICAgICAgICAgIGlmX25hbWV0b2luZGV4ICAgICAgICAgc3ZjX3BvbGxmZAorKyAgICAgICAgIGNhbGxycGMgICAgICAgICAgICAgICAgICBpbjZhZGRyX2FueSAgICAgICAgICAgIHN2Y3Jhd19jcmVhdGUKKysgICAgICAgICBjYmNfY3J5cHQgICAgICAgICAgICAgICAgaW42YWRkcl9sb29wYmFjayAgICAgICBzdmNfcmVnaXN0ZXIKKysgICAgICAgICBjbG50X2Jyb2FkY2FzdCAgICAgICAgICAgaW5ldDZfb3B0X2FwcGVuZCAgICAgICBzdmNfcnVuCisrICAgICAgICAgY2xudF9jcmVhdGUgICAgICAgICAgICAgIGluZXQ2X29wdF9maW5kICAgICAgICAgc3ZjX3NlbmRyZXBseQorKyAgICAgICAgIGNsbnRfcGNyZWF0ZWVycm9yICAgICAgICBpbmV0Nl9vcHRfZmluaXNoICAgICAgIHN2Y3RjcF9jcmVhdGUKKysgICAgICAgICBjbG50X3BlcnJubyAgICAgICAgICAgICAgaW5ldDZfb3B0X2dldF92YWwgICAgICBzdmN1ZHBfYnVmY3JlYXRlCisrICAgICAgICAgY2xudF9wZXJyb3IgICAgICAgICAgICAgIGluZXQ2X29wdF9pbml0ICAgICAgICAgc3ZjdWRwX2NyZWF0ZQorKyAgICAgICAgIGNsbnRyYXdfY3JlYXRlICAgICAgICAgICBpbmV0Nl9vcHRpb25fYWxsb2MgICAgIHN2Y3VkcF9lbmFibGVjYWNoZQorKyAgICAgICAgIGNsbnRfc3BjcmVhdGVlcnJvciAgICAgICBpbmV0Nl9vcHRpb25fYXBwZW5kICAgIHN2Y3VuaXhfY3JlYXRlCisrICAgICAgICAgY2xudF9zcGVycm5vICAgICAgICAgICAgIGluZXQ2X29wdGlvbl9maW5kICAgICAgc3ZjdW5peGZkX2NyZWF0ZQorKyAgICAgICAgIGNsbnRfc3BlcnJvciAgICAgICAgICAgICBpbmV0Nl9vcHRpb25faW5pdCAgICAgIHN2Y191bnJlZ2lzdGVyCisrICAgICAgICAgY2xudHRjcF9jcmVhdGUgICAgICAgICAgIGluZXQ2X29wdGlvbl9uZXh0ICAgICAgdXNlcjJuZXRuYW1lCisrICAgICAgICAgY2xudHVkcF9idWZjcmVhdGUgICAgICAgIGluZXQ2X29wdGlvbl9zcGFjZSAgICAgeGRlY3J5cHQKKysgICAgICAgICBjbG50dWRwX2NyZWF0ZSAgICAgICAgICAgaW5ldDZfb3B0X25leHQgICAgICAgICB4ZHJfYWNjZXB0ZWRfcmVwbHkKKysgICAgICAgICBjbG50dW5peF9jcmVhdGUgICAgICAgICAgaW5ldDZfb3B0X3NldF92YWwgICAgICB4ZHJfYXJyYXkKKysgICAgICAgICBkZXNfc2V0cGFyaXR5ICAgICAgICAgICAgaW5ldDZfcnRoX2FkZCAgICAgICAgICB4ZHJfYXV0aGRlc19jcmVkCisrICAgICAgICAgZWNiX2NyeXB0ICAgICAgICAgICAgICAgIGluZXQ2X3J0aF9nZXRhZGRyICAgICAgeGRyX2F1dGhkZXNfdmVyZgorKyAgICAgICAgIGVuZGFsaWFzZW50ICAgICAgICAgICAgICBpbmV0Nl9ydGhfaW5pdCAgICAgICAgIHhkcl9hdXRodW5peF9wYXJtcworKyAgICAgICAgIGVuZGhvc3RlbnQgICAgICAgICAgICAgICBpbmV0Nl9ydGhfcmV2ZXJzZSAgICAgIHhkcl9ib29sCisrICAgICAgICAgZW5kbmV0ZW50ICAgICAgICAgICAgICAgIGluZXQ2X3J0aF9zZWdtZW50cyAgICAgeGRyX2J5dGVzCisrICAgICAgICAgZW5kbmV0Z3JlbnQgICAgICAgICAgICAgIGluZXQ2X3J0aF9zcGFjZSAgICAgICAgeGRyX2NhbGxoZHIKKysgICAgICAgICBlbmRwcm90b2VudCAgICAgICAgICAgICAgaW5ldF9hZGRyICAgICAgICAgICAgICB4ZHJfY2FsbG1zZworKyAgICAgICAgIGVuZHJwY2VudCAgICAgICAgICAgICAgICBpbmV0X2F0b24gICAgICAgICAgICAgIHhkcl9jaGFyCisrICAgICAgICAgZW5kc2VydmVudCAgICAgICAgICAgICAgIGluZXRfbG5hb2YgICAgICAgICAgICAgeGRyX2NyeXB0a2V5YXJnCisrICAgICAgICAgZXRoZXJfYXRvbiAgICAgICAgICAgICAgIGluZXRfbWFrZWFkZHIgICAgICAgICAgeGRyX2NyeXB0a2V5YXJnMgorKyAgICAgICAgIGV0aGVyX2F0b25fciAgICAgICAgICAgICBpbmV0X25ldG9mICAgICAgICAgICAgIHhkcl9jcnlwdGtleXJlcworKyAgICAgICAgIGV0aGVyX2hvc3R0b24gICAgICAgICAgICBpbmV0X25ldHdvcmsgICAgICAgICAgIHhkcl9kZXNfYmxvY2sKKysgICAgICAgICBldGhlcl9saW5lICAgICAgICAgICAgICAgaW5ldF9uc2FwX2FkZHIgICAgICAgICB4ZHJfZG91YmxlCisrICAgICAgICAgZXRoZXJfbnRvYSAgICAgICAgICAgICAgIGluZXRfbnNhcF9udG9hICAgICAgICAgeGRyX2VudW0KKysgICAgICAgICBldGhlcl9udG9hX3IgICAgICAgICAgICAgaW5ldF9udG9hICAgICAgICAgICAgICB4ZHJfZmxvYXQKKysgICAgICAgICBldGhlcl9udG9ob3N0ICAgICAgICAgICAgaW5ldF9udG9wICAgICAgICAgICAgICB4ZHJfZnJlZQorKyAgICAgICAgIGZyZWVhZGRyaW5mbyAgICAgICAgICAgICBpbmV0X3B0b24gICAgICAgICAgICAgIHhkcl9nZXRjcmVkcmVzCisrICAgICAgICAgZnJlZWlmYWRkcnMgICAgICAgICAgICAgIGlubmV0Z3IgICAgICAgICAgICAgICAgeGRyX2h5cGVyCisrICAgICAgICAgZ2FpX3N0cmVycm9yICAgICAgICAgICAgIGlydXNlcm9rICAgICAgICAgICAgICAgeGRyX2ludAorKyAgICAgICAgIGdldGFkZHJpbmZvICAgICAgICAgICAgICBpcnVzZXJva19hZiAgICAgICAgICAgIHhkcl9pbnQxNl90CisrICAgICAgICAgZ2V0YWxpYXNieW5hbWUgICAgICAgICAgIGtleV9kZWNyeXB0c2Vzc2lvbiAgICAgeGRyX2ludDMyX3QKKysgICAgICAgICBnZXRhbGlhc2J5bmFtZV9yICAgICAgICAga2V5X2RlY3J5cHRzZXNzaW9uX3BrICB4ZHJfaW50NjRfdAorKyAgICAgICAgIGdldGFsaWFzZW50ICAgICAgICAgICAgICBrZXlfZW5jcnlwdHNlc3Npb24gICAgIHhkcl9pbnQ4X3QKKysgICAgICAgICBnZXRhbGlhc2VudF9yICAgICAgICAgICAga2V5X2VuY3J5cHRzZXNzaW9uX3BrICB4ZHJfa2V5YnVmCisrICAgICAgICAgZ2V0aG9zdGJ5YWRkciAgICAgICAgICAgIGtleV9nZW5kZXMgICAgICAgICAgICAgeGRyX2tleV9uZXRzdGFyZworKyAgICAgICAgIGdldGhvc3RieWFkZHJfciAgICAgICAgICBrZXlfZ2V0X2NvbnYgICAgICAgICAgIHhkcl9rZXlfbmV0c3RyZXMKKysgICAgICAgICBnZXRob3N0YnluYW1lICAgICAgICAgICAga2V5X3NlY3JldGtleV9pc19zZXQgICB4ZHJfa2V5c3RhdHVzCisrICAgICAgICAgZ2V0aG9zdGJ5bmFtZTIgICAgICAgICAgIGtleV9zZXRuZXQgICAgICAgICAgICAgeGRyX2xvbmcKKysgICAgICAgICBnZXRob3N0YnluYW1lMl9yICAgICAgICAga2V5X3NldHNlY3JldCAgICAgICAgICB4ZHJfbG9uZ2xvbmdfdAorKyAgICAgICAgIGdldGhvc3RieW5hbWVfciAgICAgICAgICBuZXRuYW1lMmhvc3QgICAgICAgICAgIHhkcm1lbV9jcmVhdGUKKysgICAgICAgICBnZXRob3N0ZW50ICAgICAgICAgICAgICAgbmV0bmFtZTJ1c2VyICAgICAgICAgICB4ZHJfbmV0bmFtZXN0cgorKyAgICAgICAgIGdldGhvc3RlbnRfciAgICAgICAgICAgICBudG9obCAgICAgICAgICAgICAgICAgIHhkcl9uZXRvYmoKKysgICAgICAgICBnZXRpZmFkZHJzICAgICAgICAgICAgICAgbnRvaHMgICAgICAgICAgICAgICAgICB4ZHJfb3BhcXVlCisrICAgICAgICAgZ2V0aXB2NHNvdXJjZWZpbHRlciAgICAgIHBhc3N3ZDJkZXMgICAgICAgICAgICAgeGRyX29wYXF1ZV9hdXRoCisrICAgICAgICAgZ2V0X215YWRkcmVzcyAgICAgICAgICAgIHBtYXBfZ2V0bWFwcyAgICAgICAgICAgeGRyX3BtYXAKKysgICAgICAgICBnZXRuYW1laW5mbyAgICAgICAgICAgICAgcG1hcF9nZXRwb3J0ICAgICAgICAgICB4ZHJfcG1hcGxpc3QKKysgICAgICAgICBnZXRuZXRieWFkZHIgICAgICAgICAgICAgcG1hcF9ybXRjYWxsICAgICAgICAgICB4ZHJfcG9pbnRlcgorKyAgICAgICAgIGdldG5ldGJ5YWRkcl9yICAgICAgICAgICBwbWFwX3NldCAgICAgICAgICAgICAgIHhkcl9xdWFkX3QKKysgICAgICAgICBnZXRuZXRieW5hbWUgICAgICAgICAgICAgcG1hcF91bnNldCAgICAgICAgICAgICB4ZHJyZWNfY3JlYXRlCisrICAgICAgICAgZ2V0bmV0YnluYW1lX3IgICAgICAgICAgIHJjbWQgICAgICAgICAgICAgICAgICAgeGRycmVjX2VuZG9mcmVjb3JkCisrICAgICAgICAgZ2V0bmV0ZW50ICAgICAgICAgICAgICAgIHJjbWRfYWYgICAgICAgICAgICAgICAgeGRycmVjX2VvZgorKyAgICAgICAgIGdldG5ldGVudF9yICAgICAgICAgICAgICByZWdpc3RlcnJwYyAgICAgICAgICAgIHhkcnJlY19za2lwcmVjb3JkCisrICAgICAgICAgZ2V0bmV0Z3JlbnQgICAgICAgICAgICAgIHJlc19pbml0ICAgICAgICAgICAgICAgeGRyX3JlZmVyZW5jZQorKyAgICAgICAgIGdldG5ldGdyZW50X3IgICAgICAgICAgICByZXhlYyAgICAgICAgICAgICAgICAgIHhkcl9yZWplY3RlZF9yZXBseQorKyAgICAgICAgIGdldG5ldG5hbWUgICAgICAgICAgICAgICByZXhlY19hZiAgICAgICAgICAgICAgIHhkcl9yZXBseW1zZworKyAgICAgICAgIGdldHByb3RvYnluYW1lICAgICAgICAgICByZXhlY29wdGlvbnMgICAgICAgICAgIHhkcl9ybXRjYWxsX2FyZ3MKKysgICAgICAgICBnZXRwcm90b2J5bmFtZV9yICAgICAgICAgcnBjX2NyZWF0ZWVyciAgICAgICAgICB4ZHJfcm10Y2FsbHJlcworKyAgICAgICAgIGdldHByb3RvYnludW1iZXIgICAgICAgICBycmVzdnBvcnQgICAgICAgICAgICAgIHhkcl9zaG9ydAorKyAgICAgICAgIGdldHByb3RvYnludW1iZXJfciAgICAgICBycmVzdnBvcnRfYWYgICAgICAgICAgIHhkcl9zaXplb2YKKysgICAgICAgICBnZXRwcm90b2VudCAgICAgICAgICAgICAgcnRpbWUgICAgICAgICAgICAgICAgICB4ZHJzdGRpb19jcmVhdGUKKysgICAgICAgICBnZXRwcm90b2VudF9yICAgICAgICAgICAgcnVzZXJvayAgICAgICAgICAgICAgICB4ZHJfc3RyaW5nCisrICAgICAgICAgZ2V0cHVibGlja2V5ICAgICAgICAgICAgIHJ1c2Vyb2tfYWYgICAgICAgICAgICAgeGRyX3VfY2hhcgorKyAgICAgICAgIGdldHJwY2J5bmFtZSAgICAgICAgICAgICBydXNlcnBhc3MgICAgICAgICAgICAgIHhkcl91X2h5cGVyCisrICAgICAgICAgZ2V0cnBjYnluYW1lX3IgICAgICAgICAgIHNldGFsaWFzZW50ICAgICAgICAgICAgeGRyX3VfaW50CisrICAgICAgICAgZ2V0cnBjYnludW1iZXIgICAgICAgICAgIHNldGhvc3RlbnQgICAgICAgICAgICAgeGRyX3VpbnQxNl90CisrICAgICAgICAgZ2V0cnBjYnludW1iZXJfciAgICAgICAgIHNldGlwdjRzb3VyY2VmaWx0ZXIgICAgeGRyX3VpbnQzMl90CisrICAgICAgICAgZ2V0cnBjZW50ICAgICAgICAgICAgICAgIHNldG5ldGVudCAgICAgICAgICAgICAgeGRyX3VpbnQ2NF90CisrICAgICAgICAgZ2V0cnBjZW50X3IgICAgICAgICAgICAgIHNldG5ldGdyZW50ICAgICAgICAgICAgeGRyX3VpbnQ4X3QKKysgICAgICAgICBnZXRycGNwb3J0ICAgICAgICAgICAgICAgc2V0cHJvdG9lbnQgICAgICAgICAgICB4ZHJfdV9sb25nCisrICAgICAgICAgZ2V0c2VjcmV0a2V5ICAgICAgICAgICAgIHNldHJwY2VudCAgICAgICAgICAgICAgeGRyX3VfbG9uZ2xvbmdfdAorKyAgICAgICAgIGdldHNlcnZieW5hbWUgICAgICAgICAgICBzZXRzZXJ2ZW50ICAgICAgICAgICAgIHhkcl91bmlvbgorKyAgICAgICAgIGdldHNlcnZieW5hbWVfciAgICAgICAgICBzZXRzb3VyY2VmaWx0ZXIgICAgICAgIHhkcl91bml4Y3JlZAorKyAgICAgICAgIGdldHNlcnZieXBvcnQgICAgICAgICAgICBzdmNhdXRoZGVzX3N0YXRzICAgICAgIHhkcl91X3F1YWRfdAorKyAgICAgICAgIGdldHNlcnZieXBvcnRfciAgICAgICAgICBzdmNlcnJfYXV0aCAgICAgICAgICAgIHhkcl91X3Nob3J0CisrICAgICAgICAgZ2V0c2VydmVudCAgICAgICAgICAgICAgIHN2Y2Vycl9kZWNvZGUgICAgICAgICAgeGRyX3ZlY3RvcgorKyAgICAgICAgIGdldHNlcnZlbnRfciAgICAgICAgICAgICBzdmNlcnJfbm9wcm9jICAgICAgICAgIHhkcl92b2lkCisrICAgICAgICAgZ2V0c291cmNlZmlsdGVyICAgICAgICAgIHN2Y2Vycl9ub3Byb2cgICAgICAgICAgeGRyX3dyYXBzdHJpbmcKKysgICAgICAgICBoX2Vycmxpc3QgICAgICAgICAgICAgICAgc3ZjZXJyX3Byb2d2ZXJzICAgICAgICB4ZW5jcnlwdAorKyAgICAgICAgIGhfZXJybm8gICAgICAgICAgICAgICAgICBzdmNlcnJfc3lzdGVtZXJyICAgICAgIHhwcnRfcmVnaXN0ZXIKKysgICAgICAgICBoZXJyb3IgICAgICAgICAgICAgICAgICAgc3ZjZXJyX3dlYWthdXRoICAgICAgICB4cHJ0X3VucmVnaXN0ZXIKKysgICAgICAgICBoX25lcnIgICAgICAgICAgICAgICAgICAgc3ZjX2V4aXQKKysgICAgICAgICBob3N0Mm5ldG5hbWUgICAgICAgICAgICAgc3ZjZmRfY3JlYXRlCisrCisrICAgICAgIC0gVGhlIHJwY2dlbiwgbnNjZCwgYW5kIHJwY2luZm8gY29tbWFuZHMgYXJlIG5vdCBpbnN0YWxsZWQuCisrCisrICAgICAgIC0gVGhlICdycGMnIGZpbGUgKGEgdGV4dCBmaWxlIGxpc3RpbmcgUlBDIHNlcnZpY2VzKSBpcyBub3QgaW5zdGFsbGVkLgorKworKyAgICAgICBTb2NrZXQtcmVsYXRlZCBzeXN0ZW0gY2FsbHMgZG8gbm90IGZhbGwgaW4gdGhpcyBvcHRpb24gZ3JvdXAsCisrICAgICAgIGJlY2F1c2UgbWFueSBhcmUgYWxzbyB1c2VkIGZvciBvdGhlciBpbnRlci1wcm9jZXNzCisrICAgICAgIGNvbW11bmljYXRpb24gbWVjaGFuaXNtcy4gIEZvciBleGFtcGxlLCB0aGUgJ3N5c2xvZycgcm91dGluZXMKKysgICAgICAgdXNlIFVuaXgtZG9tYWluIHNvY2tldHMgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgc3lzbG9nIGRhZW1vbjsKKysgICAgICAgc3lzbG9nIGlzIHZhbHVhYmxlIGluIG5vbi1uZXR3b3JrZWQgY29udGV4dHMuCisrCisrY29uZmlnIEVHTElCQ19JTkVUX0FOTAorKyAgIGJvb2wgIkFzeW5jaHJvbm91cyBuYW1lIGxvb2t1cCIKKysgICBkZXBlbmRzIG9uIEVHTElCQ19JTkVUCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgYGxpYmFubCcgbGlicmFyeSB3aGljaAorKyAgICAgICBwcm92aWRlcyBzdXBwb3J0IGZvciBhc3luY2hyb25vdXMgbmFtZSBsb29rdXAuCisrCisrY29uZmlnIEVHTElCQ19MSUJNCisrICAgYm9vbCAibGlibSAobWF0aCBsaWJyYXJ5KSIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSAnbGlibScgbGlicmFyeSwgY29udGFpbmluZworKyAgICAgICBtYXRoZW1hdGljYWwgZnVuY3Rpb25zLiAgSWYgdGhpcyBvcHRpb24gZ3JvdXAgaXMgb21pdHRlZCwgdGhlbgorKyAgICAgICBhbiBFR0xJQkMgaW5zdGFsbGF0aW9uIGRvZXMgbm90IGluY2x1ZGUgc2hhcmVkIG9yIHVuc2hhcmVkIHZlcnNpb25zCisrICAgICAgIG9mIHRoZSBtYXRoIGxpYnJhcnkuCisrCisrICAgICAgIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IHJlbW92ZSBhbGwgZmxvYXRpbmctcG9pbnQgcmVsYXRlZAorKyAgICAgICBmdW5jdGlvbmFsaXR5IGZyb20gRUdMSUJDOyBmb3IgZXhhbXBsZSwgJ3ByaW50ZicgYW5kICdzY2FuZicKKysgICAgICAgY2FuIHN0aWxsIHByaW50IGFuZCByZWFkIGZsb2F0aW5nLXBvaW50IHZhbHVlcyB3aXRoIHRoaXMgb3B0aW9uCisrICAgICAgIGdyb3VwIGRpc2FibGVkLgorKworKyAgICAgICBOb3RlIHRoYXQgdGhlIElTTyBTdGFuZGFyZCBDKysgbGlicmFyeSAnbGlic3RkYysrJyBkZXBlbmRzIG9uCisrICAgICAgIEVHTElCQydzIG1hdGggbGlicmFyeSAnbGlibScuICBJZiB5b3UgZGlzYWJsZSB0aGlzIG9wdGlvbgorKyAgICAgICBncm91cCwgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gYnVpbGQgJ2xpYnN0ZGMrKycgYWdhaW5zdCB0aGUKKysgICAgICAgcmVzdWx0aW5nIEVHTElCQyBpbnN0YWxsYXRpb24uCisrCisrY29uZmlnIEVHTElCQ19MT0NBTEVTCisrICAgYm9vbCAiTG9jYWxlIGRlZmluaXRpb25zIgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgYWxsIGxvY2FsZSBkZWZpbml0aW9ucyBvdGhlciB0aGFuCisrICAgICAgIHRoYXQgZm9yIHRoZSAiQyIgbG9jYWxlLiAgSWYgdGhpcyBvcHRpb24gZ3JvdXAgaXMgb21pdHRlZCwgdGhlbgorKyAgICAgICBvbmx5IHRoZSAiQyIgbG9jYWxlIGlzIHN1cHBvcnRlZC4KKysKKysKKytjb25maWcgRUdMSUJDX0xPQ0FMRV9DT0RFCisrICAgYm9vbCAiTG9jYWxlIGZ1bmN0aW9ucyIKKysgICBkZXBlbmRzIG9uIFBPU0lYX0NfTEFOR19XSURFX0NIQVIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIGxvY2FsZSBzdXBwb3J0IGZ1bmN0aW9ucywgcHJvZ3JhbXMsCisrICAgICAgIGFuZCBsaWJyYXJpZXMuICBXaXRoIEVHTElCQ19MT0NBTEVfQ09ERSBkaXNhYmxlZCwKKysgICAgICAgRUdMSUJDIHN1cHBvcnRzIG9ubHkgdGhlICdDJyBsb2NhbGUgKGFsc28ga25vd24gYXMgJ1BPU0lYJyksCisrICAgICAgIGFuZCBpZ25vcmVzIHRoZSBzZXR0aW5ncyBvZiB0aGUgJ0xBTkcnIGFuZCAnTENfKicgZW52aXJvbm1lbnQKKysgICAgICAgdmFyaWFibGVzLgorKworKyAgICAgICBXaXRoIEVHTElCQ19MT0NBTEVfQ09ERSBkaXNhYmxlZCwgdGhlIGZvbGxvd2luZworKyAgICAgICBmdW5jdGlvbnMgYXJlIG9taXR0ZWQgZnJvbSBsaWJjOgorKworKyAgICAgICAgIGR1cGxvY2FsZSAgIGxvY2FsZWNvbnYgIG5sX2xhbmdpbmZvICAgIHJwbWF0Y2ggIHN0cmZtb25fbAorKyAgICAgICAgIGZyZWVsb2NhbGUgIG5ld2xvY2FsZSAgIG5sX2xhbmdpbmZvX2wgIHN0cmZtb24gIHVzZWxvY2FsZQorKworKyAgICAgICBGdXJ0aGVybW9yZSwgb25seSB0aGUgTENfQ1RZUEUgYW5kIExDX1RJTUUgY2F0ZWdvcmllcyBvZiB0aGUKKysgICAgICAgc3RhbmRhcmQgIkMiIGxvY2FsZSBhcmUgYXZhaWxhYmxlLgorKworKyAgICAgICBUaGUgRUdMSUJDX0NBVEdFVFMgb3B0aW9uIGdyb3VwIGRlcGVuZHMgb24gdGhpcyBvcHRpb24gZ3JvdXAuCisrCisrCisrY29uZmlnIEVHTElCQ19NRU1VU0FHRQorKyAgIGJvb2wgIk1lbW9yeSBwcm9maWxpbmcgbGlicmFyeSIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBgbGlibWVtdXNhZ2UnIGxpYnJhcnkgYW5kCisrICAgICAgIHRoZSBgbWVtdXNhZ2UnIGFuZCBgbWVtdXNhZ2VzdGF0JyB1dGlsaXRpZXMuCisrICAgICAgIFRoZXNlIGNvbXBvbmVudHMgcHJvdmlkZSBtZW1vcnkgcHJvZmlsaW5nIGZ1bmN0aW9ucy4KKysKKytjb25maWcgRUdMSUJDX01FTVVTQUdFX0RFRkFVTFRfQlVGRkVSX1NJWkUKKysgICBpbnQgIk1lbW9yeSBwcm9maWxpbmcgbGlicmFyeSBidWZmZXIgc2l6ZSIKKysgICBkZXBlbmRzIG9uIEVHTElCQ19NRU1VU0FHRQorKyAgIGRlZmF1bHQgIjMyNzY4IgorKyAgIGhlbHAKKysgICAgICAgTGlibWVtdXNhZ2UgbGlicmFyeSBidWZmZXJzIHRoZSBwcm9maWxpbmcgZGF0YSBpbiBtZW1vcnkKKysgICAgICAgYmVmb3JlIHdyaXRpbmcgaXQgb3V0IHRvIGRpc2suICBCeSBkZWZhdWx0LCB0aGUgbGlicmFyeQorKyAgICAgICBhbGxvY2F0ZXMgMS41TSBidWZmZXIsIHdoaWNoIGNhbiBiZSBzdWJzdGFudGlhbCBmb3Igc29tZQorKyAgICAgICBzeXN0ZW1zLiAgRUdMSUJDX01FTVVTQUdFX0RFRkFVTFRfQlVGRkVSX1NJWkUgb3B0aW9uCisrICAgICAgIGFsbG93cyB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgYnVmZmVyIHNpemUuICBJdCBzcGVjaWZpZXMKKysgICAgICAgdGhlIG51bWJlciBvZiBlbnRyaWVzIHRoZSBidWZmZXIgc2hvdWxkIGhhdmUuCisrICAgICAgIE9uIG1vc3QgYXJjaGl0ZWN0dXJlcyBvbmUgYnVmZmVyIGVudHJ5IGFtb3VudHMgdG8gNDggYnl0ZXMsCisrICAgICAgIHNvIHNldHRpbmcgdGhpcyBvcHRpb24gdG8gdGhlIHZhbHVlIG9mIDUxMiB3aWxsIHJlZHVjZSB0aGUgc2l6ZSBvZgorKyAgICAgICB0aGUgbWVtb3J5IGJ1ZmZlciB0byAyNEsuCisrCisrY29uZmlnIEVHTElCQ19OSVMKKysgICBib29sICJTdXBwb3J0IGZvciBOSVMsIE5JUyssIGFuZCB0aGUgc3BlY2lhbCAnY29tcGF0JyBzZXJ2aWNlcy4iCisrICAgZGVwZW5kcyBvbiBFR0xJQkNfSU5FVCAmJiBFR0xJQkNfU1VOUlBDCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgTklTLCBOSVMrLCBhbmQgJ2NvbXBhdCcgTmFtZQorKyAgICAgICBTZXJ2aWNlIFN3aXRjaCBzZXJ2aWNlIGxpYnJhcmllcy4gIFdoZW4gaXQgaXMgZGlzYWJsZWQsIHRob3NlCisrICAgICAgIHNlcnZpY2VzIGxpYnJhcmllcyBhcmUgbm90IGluc3RhbGxlZDsgeW91IHNob3VsZCByZW1vdmUgYW55CisrICAgICAgIHJlZmVyZW5jZXMgdG8gdGhlbSBmcm9tIHlvdXIgJ25zc3dpdGNoLmNvbmYnIGZpbGUuCisrCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGRlcGVuZHMgb24gdGhlIEVHTElCQ19JTkVUIG9wdGlvbgorKyAgICAgICBncm91cDsgeW91IG11c3QgZW5hYmxlIHRoYXQgdG8gZW5hYmxlIHRoaXMgb3B0aW9uIGdyb3VwLgorKworK2NvbmZpZyBFR0xJQkNfTlNTV0lUQ0gKKysgICBib29sICJOYW1lIHNlcnZpY2Ugc3dpdGNoIChuc3N3aXRjaCkgc3VwcG9ydCIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHN1cHBvcnQgZm9yIHRoZSAnbnNzd2l0Y2gnIGZhY2lsaXR5LgorKyAgICAgICBXaXRoIHRoaXMgb3B0aW9uIGdyb3VwIGVuYWJsZWQsIGFsbCBFR0xJQkMgZnVuY3Rpb25zIGZvcgorKyAgICAgICBhY2Nlc3NpbmcgdmFyaW91cyBzeXN0ZW0gZGF0YWJhc2VzIChwYXNzd29yZHMgYW5kIGdyb3VwczsKKysgICAgICAgbmV0d29ya2luZzsgYWxpYXNlczsgcHVibGljIGtleXM7IGFuZCBzbyBvbikgY29uc3VsdCB0aGUKKysgICAgICAgJy9ldGMvbnNzd2l0Y2guY29uZicgY29uZmlndXJhdGlvbiBmaWxlIHRvIGRlY2lkZSBob3cgdG8gaGFuZGxlCisrICAgICAgIHF1ZXJpZXMuCisrCisrICAgICAgIFdpdGggdGhpcyBvcHRpb24gZ3JvdXAgZGlzYWJsZWQsIEVHTElCQyB1c2VzIGEgZml4ZWQgbGlzdCBvZgorKyAgICAgICBzZXJ2aWNlcyB0byBzYXRpc2Z5IHF1ZXJpZXMgb24gZWFjaCBkYXRhYmFzZSwgYXMgcmVxdWVzdGVkIGJ5CisrICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgc3BlY2lmaWVkIHdoZW4gRUdMSUJDIGlzIGJ1aWx0LiAgWW91cgorKyAgICAgICAnb3B0aW9uLWdyb3Vwcy5jb25maWcnIGZpbGUgbXVzdCBzZXQgdGhlIGZvbGxvd2luZyB0d28KKysgICAgICAgdmFyaWFibGVzOgorKworK2NvbmZpZyBFR0xJQkNfTlNTV0lUQ0hfRklYRURfQ09ORklHCisrICAgc3RyaW5nICJOc3N3aXRjaCBmaXhlZCBjb25maWcgZmlsZW5hbWUiCisrICAgZGVwZW5kcyBvbiAhRUdMSUJDX05TU1dJVENICisrICAgZGVmYXVsdCAiIgorKyAgIGhlbHAKKysgICAgICAgICAgU2V0IHRoaXMgdG8gdGhlIG5hbWUgb2YgYSBmaWxlIHdob3NlIGNvbnRlbnRzIG9ic2VydmUgdGhlCisrICAgICAgICAgIHNhbWUgc3ludGF4IGFzIGFuIG9yZGluYXJ5ICcvZXRjL25zc3dpdGNoLmNvbmYnIGZpbGUuICBUaGUKKysgICAgICAgICAgRUdMSUJDIGJ1aWxkIHByb2Nlc3MgcGFyc2VzIHRoaXMgZmlsZSBqdXN0IGFzIEVHTElCQyB3b3VsZAorKyAgICAgICAgICBhdCBydW4gdGltZSBpZiBFR0xJQkNfTlNTV0lUQ0ggd2VyZSBlbmFibGVkLCBhbmQKKysgICAgICAgICAgcHJvZHVjZXMgYSBDIGxpYnJhcnkgdGhhdCB1c2VzIHRoZSBuc3N3aXRjaCBzZXJ2aWNlCisrICAgICAgICAgIGxpYnJhcmllcyB0byBzZWFyY2ggZm9yIGRhdGFiYXNlIGVudHJpZXMgYXMgdGhpcyBmaWxlCisrICAgICAgICAgIHNwZWNpZmllcywgaW5zdGVhZCBvZiBjb25zdWx0aW5nICcvZXRjL25zc3dpdGNoLmNvbmYnIGF0IHJ1bgorKyAgICAgICAgICB0aW1lLgorKworKyAgICAgICAgICBUaGlzIHNob3VsZCBiZSBhbiBhYnNvbHV0ZSBmaWxlbmFtZS4gIFRoZSBFR0xJQkMgYnVpbGQKKysgICAgICAgICAgcHJvY2VzcyBtYXkgdXNlIGl0IGZyb20gc2V2ZXJhbCBkaWZmZXJlbnQgd29ya2luZworKyAgICAgICAgICBkaXJlY3Rvcmllcy4gIEl0IG1heSBpbmNsdWRlIHJlZmVyZW5jZXMgdG8gTWFrZWZpbGUKKysgICAgICAgICAgdmFyaWFibGVzIGxpa2UgJ2NvbW1vbi1vYmpwZngnICh0aGUgdG9wIG9mIHRoZSBidWlsZCB0cmVlLAorKyAgICAgICAgICB3aXRoIGEgdHJhaWxpbmcgc2xhc2gpLCBvciAnLi4nICh0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZSwKKysgICAgICAgICAgd2l0aCBhIHRyYWlsaW5nIHNsYXNoKS4KKysKKysgICAgICAgICAgVGhlIEVHTElCQyBzb3VyY2UgdHJlZSBpbmNsdWRlcyBhIHNhbXBsZSBjb25maWd1cmF0aW9uIGZpbGUKKysgICAgICAgICAgbmFtZWQgJ25zcy9maXhlZC1uc3N3aXRjaC5jb25mJzsgZm9yIHNpbXBsZSBjb25maWd1cmF0aW9ucywKKysgICAgICAgICAgeW91IHdpbGwgcHJvYmFibHkgd2FudCB0byBkZWxldGUgcmVmZXJlbmNlcyB0byBkYXRhYmFzZXMgbm90CisrICAgICAgICAgIG5lZWRlZCBvbiB5b3VyIHN5c3RlbS4KKysKKytjb25maWcgRUdMSUJDX05TU1dJVENIX0ZJWEVEX0ZVTkNUSU9OUworKyAgIHN0cmluZyAiTnNzd2l0Y2ggZml4ZWQgZnVuY3Rpb25zIGZpbGVuYW1lIgorKyAgIGRlcGVuZHMgb24gIUVHTElCQ19OU1NXSVRDSAorKyAgIGRlZmF1bHQgIiIKKysgICBoZWxwCisrICAgICAgICAgIFRoZSBFR0xJQkMgYnVpbGQgcHJvY2VzcyB1c2VzIHRoaXMgZmlsZSB0byBkZWNpZGUgd2hpY2gKKysgICAgICAgICAgZnVuY3Rpb25zIHRvIG1ha2UgYXZhaWxhYmxlIGZyb20gd2hpY2ggc2VydmljZSBsaWJyYXJpZXMuCisrICAgICAgICAgIFRoZSBmaWxlICduc3MvZml4ZWQtbnNzd2l0Y2guZnVuY3Rpb25zJyBzZXJ2ZXMgYXMgYSBzYW1wbGUKKysgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGlzIHNldHRpbmcsIGFuZCBleHBsYWlucyBpdHMgc3ludGF4CisrICAgICAgICAgIGFuZCBtZWFuaW5nIGluIG1vcmUgZGV0YWlsLgorKworKyAgICAgICAgICBUaGlzIHNob3VsZCBiZSBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUuICBUaGUgRUdMSUJDIGJ1aWxkCisrICAgICAgICAgIHByb2Nlc3MgbWF5IHVzZSBpdCBmcm9tIHNldmVyYWwgZGlmZmVyZW50IHdvcmtpbmcKKysgICAgICAgICAgZGlyZWN0b3JpZXMuICBJdCBtYXkgaW5jbHVkZSByZWZlcmVuY2VzIHRvIE1ha2VmaWxlCisrICAgICAgICAgIHZhcmlhYmxlcyBsaWtlICdjb21tb24tb2JqcGZ4JyAodGhlIHRvcCBvZiB0aGUgYnVpbGQgdHJlZSwKKysgICAgICAgICAgd2l0aCBhIHRyYWlsaW5nIHNsYXNoKSwgb3IgJy4uJyAodGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUsCisrICAgICAgICAgIHdpdGggYSB0cmFpbGluZyBzbGFzaCkuCisrCisrICAgICAgICAgIEJlIHN1cmUgdG8gbWVudGlvbiBlYWNoIGZ1bmN0aW9uIGluIGVhY2ggc2VydmljZSB5b3Ugd2lzaCB0bworKyAgICAgICAgICB1c2UuICBJZiB5b3UgZG8gbm90IG1lbnRpb24gYSBzZXJ2aWNlJ3MgZnVuY3Rpb24gaGVyZSwgdGhlCisrICAgICAgICAgIEVHTElCQyBkYXRhYmFzZSBhY2Nlc3MgZnVuY3Rpb25zIHdpbGwgbm90IGZpbmQgaXQsIGV2ZW4gaWYKKysgICAgICAgICAgaXQgaXMgbGlzdGVkIGluIHRoZSBFR0xJQkNfTlNTV0lUQ0hfRklYRURfQ09ORklHCisrICAgICAgICAgIGZpbGUuCisrCisrICAgICAgICAgIEluIHRoaXMgYXJyYW5nZW1lbnQsIEVHTElCQyB3aWxsIG5vdCB1c2UgdGhlICdkbG9wZW4nIGFuZAorKyAgICAgICAgICAnZGxzeW0nIGZ1bmN0aW9ucyB0byBmaW5kIGRhdGFiYXNlIGFjY2VzcyBmdW5jdGlvbnMuICBJbnN0ZWFkLAorKyAgICAgICAgICBsaWJjIGhhcmQtY29kZXMgcmVmZXJlbmNlcyB0byB0aGUgc2VydmljZSBsaWJyYXJpZXMnIGRhdGFiYXNlCisrICAgICAgICAgIGFjY2VzcyBmdW5jdGlvbnMuICBZb3UgbXVzdCBleHBsaWNpdGx5IGxpbmsgeW91ciBwcm9ncmFtCisrICAgICAgICAgIGFnYWluc3QgdGhlIG5hbWUgc2VydmljZSBsaWJyYXJpZXMgKHRob3NlIHdob3NlIG5hbWVzIHN0YXJ0CisrICAgICAgICAgIHdpdGggJ2xpYm5zc18nLCBpbiB0aGUgc3lzcm9vdCdzICcvbGliJyBkaXJlY3RvcnkpIHdob3NlCisrICAgICAgICAgIGZ1bmN0aW9ucyB5b3UgaW50ZW5kIHRvIHVzZS4gIFRoaXMgYXJyYW5nZW1lbnQgaGVscHMKKysgICAgICAgICAgc3lzdGVtLXdpZGUgc3RhdGljIGFuYWx5c2lzIHRvb2xzIGRlY2lkZSB3aGljaCBmdW5jdGlvbnMgYQorKyAgICAgICAgICBzeXN0ZW0gYWN0dWFsbHkgdXNlcy4KKysKKysgICAgICAgICAgTm90ZSB0aGF0IHNvbWUgbnNzd2l0Y2ggc2VydmljZSBsaWJyYXJpZXMgcmVxdWlyZSBvdGhlciBvcHRpb24KKysgICAgICAgICAgZ3JvdXBzIHRvIGJlIGVuYWJsZWQ7IGZvciBleGFtcGxlLCB0aGUgRUdMSUJDX0lORVQKKysgICAgICAgICAgb3B0aW9uIGdyb3VwIG11c3QgYmUgZW5hYmxlZCB0byB1c2UgdGhlICdsaWJuc3NfZG5zLnNvLjInCisrICAgICAgICAgIHNlcnZpY2UgbGlicmFyeSwgd2hpY2ggdXNlcyB0aGUgRG9tYWluIE5hbWUgU3lzdGVtIG5ldHdvcmsKKysgICAgICAgICAgcHJvdG9jb2wgdG8gYW5zd2VyIHF1ZXJpZXMuCisrCisrY29uZmlnIEVHTElCQ19SQ01ECisrICAgYm9vbCAiU3VwcG9ydCBmb3IgJ3JjbWQnIGFuZCByZWxhdGVkIGxpYnJhcnkgZnVuY3Rpb25zIgorKyAgIGRlcGVuZHMgb24gRUdMSUJDX0lORVQKKysgICBoZWxwCisrICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciBydW5uaW5nIGNvbW1hbmRzIG9uCisrICAgICAgcmVtb3RlIG1hY2hpbmVzIHZpYSB0aGUgJ3JzaCcgcHJvdG9jb2wsIGFuZCBkb2luZyBhdXRoZW50aWNhdGlvbgorKyAgICAgIHJlbGF0ZWQgdG8gdGhvc2UgZnVuY3Rpb25zLiAgVGhpcyBhbHNvIGluY2x1ZGVzIGZ1bmN0aW9ucyB0aGF0CisrICAgICAgdXNlIHRoZSAncmV4ZWMnIHByb3RvY29sLgorKworKyAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgcmNtZCAgICAgICAgICAgIHJ1c2Vyb2sKKysgICAgICAgIHJjbWRfYWYgICAgICAgICBydXNlcm9rX2FmCisrICAgICAgICByZXhlYyAgICAgICAgICAgaXJ1c2Vyb2sKKysgICAgICAgIHJleGVjX2FmICAgICAgICBpcnVzZXJva19hZgorKyAgICAgICAgcnJlc3Zwb3J0ICAgICAgIHJ1c2VycGFzcworKyAgICAgICAgcnJlc3Zwb3J0X2FmCisrCisrY29uZmlnIEVHTElCQ19SVExEX0RFQlVHCisrICAgYm9vbCAiUnVudGltZSBsaW5rZXIgZGVidWcgcHJpbnQgb3V0cyIKKysgICBoZWxwCisrICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgZW5hYmxlcyBkZWJ1ZyBvdXRwdXQgb2YgdGhlIHJ1bnRpbWUgbGlua2VyCisrICAgICAgd2hpY2ggaXMgYWN0aXZhdGVkIHZpYSBMRF9ERUJVRyBhbmQgTERfVFJBQ0VfUFJFTElOS0lORworKyAgICAgIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIERpc2FibGluZyB0aGlzIG9wdGlvbiBncm91cCB5aWVsZHMKKysgICAgICBhIHNtYWxsZXIgcnVudGltZSBsaW5rZXIgYmluYXJ5LgorKyAgICAgIEJFV0FSRTogRGlzYWJsaW5nIHRoaXMgb3B0aW9uIGdyb3VwIGlzIGxpa2VseSB0byBicmVhaworKyAgICAgIHRoZSBgbGRkJyB1dGlsaXR5IHdoaWNoIG1heSBhbHNvIGJlIHVzZWQgYnkgdGhlIHByZWxpbmtlci4KKysgICAgICBJbiBwYXJ0aWN1bGFyLCB0aGUgYC0tdW51c2VkJyBsZGQgb3B0aW9uIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5LgorKworK2NvbmZpZyBFR0xJQkNfU1BBV04KKysgICBib29sICJTdXBwb3J0IGZvciBQT1NJWCBwb3NpeF9zcGF3biBmdW5jdGlvbnMiCisrICAgaGVscAorKyAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBQT1NJWCBmdW5jdGlvbnMgZm9yIGV4ZWN1dGluZworKyAgICAgIHByb2dyYW1zIGluIGNoaWxkIHByb2Nlc3NlcyB3aXRob3V0IHVzaW5nICdmb3JrJyBvciAndmZvcmsnLgorKworKyAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgcG9zaXhfc3Bhd24KKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9kZXN0cm95CisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfZ2V0ZmxhZ3MKKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9nZXRwZ3JvdXAKKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBhcmFtCisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwb2xpY3kKKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9nZXRzaWdkZWZhdWx0CisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfZ2V0c2lnbWFzaworKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX2luaXQKKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9zZXRmbGFncworKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX3NldHBncm91cAorKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcGFyYW0KKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBvbGljeQorKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX3NldHNpZ2RlZmF1bHQKKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9zZXRzaWdtYXNrCisrICAgICAgICBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2UKKysgICAgICAgIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyCisrICAgICAgICBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3BlbgorKyAgICAgICAgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3kKKysgICAgICAgIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19pbml0CisrICAgICAgICBwb3NpeF9zcGF3bnAKKysKKysgICAgICBUaGlzIG9wdGlvbiBncm91cCBhbHNvIHByb3ZpZGVzIHRoZSBhYmlsaXR5IGZvciB0aGUgaWNvbnYsCisrICAgICAgbG9jYWxlZGVmLCBhbmQgbG9jYWxlIHByb2dyYW1zIHRvIG9wZXJhdGUgdHJhbnNwYXJlbnRseSBvbgorKyAgICAgIGNvbXByZXNzZWQgY2hhcnNldCBkZWZpbml0aW9ucy4gIFdoZW4gdGhpcyBvcHRpb24gZ3JvdXAgaXMKKysgICAgICBkaXNhYmxlZCwgdGhvc2UgcHJvZ3JhbXMgd2lsbCBvbmx5IG9wZXJhdGUgb24gdW5jb21wcmVzc2VkCisrICAgICAgY2hhcm1hcCBmaWxlcy4KKysKKytjb25maWcgRUdMSUJDX1NUUkVBTVMKKysgICBib29sICJTdXBwb3J0IGZvciBhY2Nlc3NpbmcgU1RSRUFNUy4iCisrICAgaGVscAorKyAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZworKyAgICAgIG1lc3NhZ2VzIHRvIGFuZCBmcm9tIFNUUkVBTVMuICBUaGUgU1RSRUFNUyBpbnRlcmZhY2UgcHJvdmlkZXMgYQorKyAgICAgIHVuaWZvcm0gbWVjaGFuaXNtIGZvciBpbXBsZW1lbnRpbmcgbmV0d29ya2luZyBzZXJ2aWNlcyBhbmQgb3RoZXIKKysgICAgICBjaGFyYWN0ZXItYmFzZWQgSS9PLiAgKFNUUkVBTVMgYXJlIG5vdCB0byBiZSBjb25mdXNlZCB3aXRoCisrICAgICAgPHN0ZGlvLmg+IEZJTEUgb2JqZWN0cywgYWxzbyBjYWxsZWQgJ3N0cmVhbXMnLikKKysKKysgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgIGdldG1zZyAgICAgICAgICBwdXRwbXNnCisrICAgICAgICBnZXRwbXNnICAgICAgICAgZmF0dGFjaAorKyAgICAgICAgaXNhc3RyZWFtICAgICAgIGZkZXRhY2gKKysgICAgICAgIHB1dG1zZworKworK2NvbmZpZyBFR0xJQkNfU1VOUlBDCisrICAgYm9vbCAiU3VwcG9ydCBmb3IgdGhlIFN1biAnUlBDJyBwcm90b2NvbC4iCisrICAgZGVwZW5kcyBvbiBFR0xJQkNfSU5FVAorKyAgIGhlbHAKKysgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBzdXBwb3J0IGZvciB0aGUgU3VuIFJQQyBwcm90b2NvbHMsCisrICAgICAgaW5jbHVkaW5nIHRoZSAncnBjZ2VuJyBhbmQgJ3JwY2luZm8nIHByb2dyYW1zLgorKworK2NvbmZpZyBFR0xJQkNfVVRNUAorKyAgICBib29sICJPbGRlciBhY2Nlc3MgZnVuY3Rpb25zIGZvciAndXRtcCcgbG9naW4gcmVjb3JkcyIKKysgICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgb2xkZXIgJ3V0ZW50JyBmYW1pbHkgb2YKKysgICAgICAgZnVuY3Rpb25zIGZvciBhY2Nlc3NpbmcgdXNlciBsb2dpbiByZWNvcmRzIGluIHRoZSAndXRtcCcgZmlsZS4KKysgICAgICAgUE9TSVggb21pdHMgdGhlc2UgZnVuY3Rpb25zIGluIGZhdm9yIG9mIHRoZSAndXR4ZW50JyBmYW1pbHksCisrICAgICAgIGFuZCB0aGV5IGFyZSBvYnNvbGV0ZSBvbiBzeXN0ZW1zIG90aGVyIHRoYW4gTGludXguCisrCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgIGVuZHV0ZW50CisrICAgICAgICAgZ2V0dXRlbnQKKysgICAgICAgICBnZXR1dGVudF9yCisrICAgICAgICAgZ2V0dXRpZAorKyAgICAgICAgIGdldHV0aWRfcgorKyAgICAgICAgIGdldHV0bGluZQorKyAgICAgICAgIGdldHV0bGluZV9yCisrICAgICAgICAgbG9nd3RtcAorKyAgICAgICAgIHB1dHV0bGluZQorKyAgICAgICAgIHNldHV0ZW50CisrICAgICAgICAgdXBkd3RtcAorKyAgICAgICAgIHV0bXBuYW1lCisrCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgbGlicmFyaWVzOgorKworKyAgICAgICAgIGxpYnV0aWwuc28gKGFuZCBsaWJ1dGlsLmEpCisrCisrY29uZmlnIEVHTElCQ19VVE1QWAorKyAgICBib29sICJQT1NJWCBhY2Nlc3MgZnVuY3Rpb25zIGZvciAndXRtcCcgbG9naW4gcmVjb3JkcyIKKysgICAgZGVwZW5kcyBvbiBFR0xJQkNfVVRNUAorKyAgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBQT1NJWCBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgYW5kCisrICAgICAgIHdyaXRpbmcgdXNlciBsb2dpbiByZWNvcmRzIGluIHRoZSAndXRtcCcgZmlsZSAodXN1YWxseQorKyAgICAgICAnL3Zhci9ydW4vdXRtcCcpLiAgVGhlIFBPU0lYIGZ1bmN0aW9ucyBvcGVyYXRlIG9uICdzdHJ1Y3QKKysgICAgICAgdXRtcHgnIHN0cnVjdHVyZXMsIGFzIG9wcG9zZWQgdG8gdGhlIGZhbWlseSBvZiBvbGRlciAndXRlbnQnCisrICAgICAgIGZ1bmN0aW9ucywgd2hpY2ggb3BlcmF0ZSBvbiAnc3RydWN0IHV0bXAnIHN0cnVjdHVyZXMuCisrCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgIGVuZHV0eGVudAorKyAgICAgICAgIGdldHV0bXAKKysgICAgICAgICBnZXR1dG1weAorKyAgICAgICAgIGdldHV0eGVudAorKyAgICAgICAgIGdldHV0eGlkCisrICAgICAgICAgZ2V0dXR4bGluZQorKyAgICAgICAgIHB1dHV0eGxpbmUKKysgICAgICAgICBzZXR1dHhlbnQKKysgICAgICAgICB1cGR3dG1weAorKyAgICAgICAgIHV0bXB4bmFtZQorKworK2NvbmZpZyBFR0xJQkNfV09SREVYUAorKyAgICBib29sICJTaGVsbC1zdHlsZSB3b3JkIGV4cGFuc2lvbiIKKysgICAgaGVscAorKyAgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlICd3b3JkZXhwJyBmdW5jdGlvbiBmb3IKKysgICAgICAgIHBlcmZvcm1pbmcgd29yZCBleHBhbnNpb24gaW4gdGhlIG1hbm5lciBvZiB0aGUgc2hlbGwsIGFuZCB0aGUKKysgICAgICAgIGFjY29tcGFueWluZyAnd29yZGZyZWUnIGZ1bmN0aW9uLgorKworK2NvbmZpZyBQT1NJWF9DX0xBTkdfV0lERV9DSEFSCisrICAgIGJvb2wgIklTTyBDIGxpYnJhcnkgd2lkZSBjaGFyYWN0ZXIgZnVuY3Rpb25zLCBleGNsdWRpbmcgSS9PIgorKyAgICBoZWxwCisrICAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZnVuY3Rpb25zIGRlZmluZWQgYnkgdGhlIElTTyBDCisrICAgICAgICBzdGFuZGFyZCBmb3Igd29ya2luZyB3aXRoIHdpZGUgYW5kIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIGluCisrICAgICAgICBtZW1vcnkuICBGdW5jdGlvbnMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgd2lkZSBhbmQgbXVsdGlieXRlCisrICAgICAgICBjaGFyYWN0ZXJzIGZyb20gYW5kIHRvIGZpbGVzIGNhbGwgaW4gdGhlCisrICAgICAgICBQT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPIG9wdGlvbiBncm91cC4KKysKKysgICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgICBidG93YyAgICAgICAgIG1ic2luaXQgICAgICAgd2NzY3NwbiAgICAgICB3Y3N0b2xsCisrICAgICAgICAgIGlzd2FsbnVtICAgICAgbWJzcnRvd2NzICAgICB3Y3NmdGltZSAgICAgIHdjc3RvbWJzCisrICAgICAgICAgIGlzd2FscGhhICAgICAgbWJzdG93Y3MgICAgICB3Y3NsZW4gICAgICAgIHdjc3RvdWwKKysgICAgICAgICAgaXN3YmxhbmsgICAgICBtYnRvd2MgICAgICAgIHdjc25jYXQgICAgICAgd2NzdG91bGwKKysgICAgICAgICAgaXN3Y250cmwgICAgICBzd3ByaW50ZiAgICAgIHdjc25jbXAgICAgICAgd2NzdG91bWF4CisrICAgICAgICAgIGlzd2N0eXBlICAgICAgc3dzY2FuZiAgICAgICB3Y3NuY3B5ICAgICAgIHdjc3hmcm0KKysgICAgICAgICAgaXN3ZGlnaXQgICAgICB0b3djdHJhbnMgICAgIHdjc3BicmsgICAgICAgd2N0b2IKKysgICAgICAgICAgaXN3Z3JhcGggICAgICB0b3dsb3dlciAgICAgIHdjc3JjaHIgICAgICAgd2N0b21iCisrICAgICAgICAgIGlzd2xvd2VyICAgICAgdG93dXBwZXIgICAgICB3Y3NydG9tYnMgICAgIHdjdHJhbnMKKysgICAgICAgICAgaXN3cHJpbnQgICAgICB2c3dwcmludGYgICAgIHdjc3NwbiAgICAgICAgd2N0eXBlCisrICAgICAgICAgIGlzd3B1bmN0ICAgICAgdnN3c2NhbmYgICAgICB3Y3NzdHIgICAgICAgIHdtZW1jaHIKKysgICAgICAgICAgaXN3c3BhY2UgICAgICB3Y3J0b21iICAgICAgIHdjc3RvZCAgICAgICAgd21lbWNtcAorKyAgICAgICAgICBpc3d1cHBlciAgICAgIHdjc2NhdCAgICAgICAgd2NzdG9mICAgICAgICB3bWVtY3B5CisrICAgICAgICAgIGlzd3hkaWdpdCAgICAgd2NzY2hyICAgICAgICB3Y3N0b2ltYXggICAgIHdtZW1tb3ZlCisrICAgICAgICAgIG1ibGVuICAgICAgICAgd2NzY21wICAgICAgICB3Y3N0b2sgICAgICAgIHdtZW1zZXQKKysgICAgICAgICAgbWJybGVuICAgICAgICB3Y3Njb2xsICAgICAgIHdjc3RvbAorKyAgICAgICAgICBtYnJ0b3djICAgICAgIHdjc2NweSAgICAgICAgd2NzdG9sZAorKworK2NvbmZpZyBQT1NJWF9SRUdFWFAKKysgICAgYm9vbCAiUmVndWxhciBleHByZXNzaW9ucyIKKysgICAgaGVscAorKyAgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbgorKyAgICAgICAgZnVuY3Rpb25zLCBhbmQgdGhlIGFzc29jaWF0ZWQgbm9uLVBPU0lYIGV4dGVuc2lvbnMgYW5kCisrICAgICAgICBjb21wYXRpYmlsaXR5IGZ1bmN0aW9ucy4KKysKKysgICAgICAgIFdpdGggUE9TSVhfUkVHRVhQIGRpc2FibGVkLCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUKKysgICAgICAgIG9taXR0ZWQgZnJvbSBsaWJjOgorKworKyAgICAgICAgICByZV9jb21wICAgICAgICAgICAgICAgICByZV9tYXhfZmFpbHVyZXMgICAgICAgICByZWdjb21wCisrICAgICAgICAgIHJlX2NvbXBpbGVfZmFzdG1hcCAgICAgIHJlX3NlYXJjaCAgICAgICAgICAgICAgIHJlZ2Vycm9yCisrICAgICAgICAgIHJlX2NvbXBpbGVfcGF0dGVybiAgICAgIHJlX3NlYXJjaF8yICAgICAgICAgICAgIHJlZ2V4ZWMKKysgICAgICAgICAgcmVfZXhlYyAgICAgICAgICAgICAgICAgcmVfc2V0X3JlZ2lzdGVycyAgICAgICAgcmVnZnJlZQorKyAgICAgICAgICByZV9tYXRjaCAgICAgICAgICAgICAgICByZV9zZXRfc3ludGF4ICAgICAgICAgICBycG1hdGNoCisrICAgICAgICAgIHJlX21hdGNoXzIgICAgICAgICAgICAgIHJlX3N5bnRheF9vcHRpb25zCisrCisrICAgICAgICBGdXJ0aGVybW9yZSwgdGhlIGNvbXBhdGliaWxpdHkgcmVnZXhwIGludGVyZmFjZSBkZWZpbmVkIGluIHRoZQorKyAgICAgICAgPHJlZ2V4cC5oPiBoZWFkZXIgZmlsZSwgJ2NvbXBpbGUnLCAnc3RlcCcsIGFuZCAnYWR2YW5jZScsIGlzCisrICAgICAgICBvbWl0dGVkLgorKworK2NvbmZpZyBQT1NJWF9SRUdFWFBfR0xJQkMKKysgICAgYm9vbCAiUmVndWxhciBleHByZXNzaW9ucyBmcm9tIEdMSUJDIgorKyAgICBkZXBlbmRzIG9uIFBPU0lYX1JFR0VYUAorKyAgICBoZWxwCisrCVRoaXMgb3B0aW9uIGdyb3VwIHNwZWNpZmllcyB3aGljaCByZWd1bGFyIGV4cHJlc3Npb24KKysgICAgICAgIGxpYnJhcnkgdG8gdXNlLiAgVGhlIGNob2ljZSBpcyBiZXR3ZWVuIHJlZ2V4CisrICAgICAgICBpbXBsZW1lbnRhdGlvbiBmcm9tIEdMSUJDIGFuZCByZWdleCBpbXBsZW1lbnRhdGlvbiBmcm9tCisrICAgICAgICBsaWJpYmVydHkuICBUaGUgR0xJQkMgdmFyaWFudCBpcyBmdWxseSBQT1NJWCBjb25mb3JtYW50IGFuZAorKyAgICAgICAgb3B0aW1pemVkIGZvciBzcGVlZDsgcmVnZXggZnJvbSBsaWJpYmVydHkgaXMgbW9yZSB0aGFuIHR3aWNlCisrICAgICAgICBhcyBzbWFsbCB3aGlsZSBzdGlsbCBpcyBlbm91Z2ggZm9yIG1vc3QgcHJhY3RpY2FsIHB1cnBvc2VzLgorKworK2NvbmZpZyBQT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisrICAgIGJvb2wgIklucHV0IGFuZCBvdXRwdXQgZnVuY3Rpb25zIGZvciB3aWRlIGNoYXJhY3RlcnMiCisrICAgIGRlcGVuZHMgb24gUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorKyAgICBoZWxwCisrICAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcKKysgICAgICAgIHdpZGUgY2hhcmFjdGVycyB0byBhbmQgZnJvbSA8c3RkaW8uaD4gc3RyZWFtcy4KKysKKysgICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgICBmZ2V0d2MgICAgICAgIGZ3cHJpbnRmICAgICAgcHV0d2NoYXIgICAgICB2d3NjYW5mCisrICAgICAgICAgIGZnZXR3cyAgICAgICAgZndzY2FuZiAgICAgICB1bmdldHdjICAgICAgIHdwcmludGYKKysgICAgICAgICAgZnB1dHdjICAgICAgICBnZXR3YyAgICAgICAgIHZmd3ByaW50ZiAgICAgd3NjYW5mCisrICAgICAgICAgIGZwdXR3cyAgICAgICAgZ2V0d2NoYXIgICAgICB2ZndzY2FuZgorKyAgICAgICAgICBmd2lkZSAgICAgICAgIHB1dHdjICAgICAgICAgdndwcmludGYKKysKKysgICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGZ1cnRoZXIgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyB1bmxvY2tlZAorKyAgICAgICAgdmFyaWFudHMgb2YgdGhlIGFib3ZlIGZ1bmN0aW9uczoKKysKKysgICAgICAgICAgZmdldHdjX3VubG9ja2VkICAgICAgICAgICBnZXR3Y191bmxvY2tlZAorKyAgICAgICAgICBmZ2V0d3NfdW5sb2NrZWQgICAgICAgICAgIGdldHdjaGFyX3VubG9ja2VkCisrICAgICAgICAgIGZwdXR3Y191bmxvY2tlZCAgICAgICAgICAgcHV0d2NfdW5sb2NrZWQKKysgICAgICAgICAgZnB1dHdzX3VubG9ja2VkICAgICAgICAgICBwdXR3Y2hhcl91bmxvY2tlZAorKworKyAgICAgICAgTm90ZSB0aGF0IHRoZSBHTlUgc3RhbmRhcmQgQysrIGxpYnJhcnksICdsaWJzdGRjKysuc28nLCB1c2VzCisrICAgICAgICBzb21lIG9mIHRoZXNlIGZ1bmN0aW9uczsgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gbGluayBvciBydW4KKysgICAgICAgIEMrKyBwcm9ncmFtcyBpZiB5b3UgZGlzYWJsZSB0aGlzIG9wdGlvbiBncm91cC4KKysKKysgICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGFsc28gYWZmZWN0cyB0aGUgYmVoYXZpb3Igb2YgdGhlIGZvbGxvd2luZworKyAgICAgICAgZnVuY3Rpb25zOgorKworKyAgICAgICAgICBmZG9wZW4KKysgICAgICAgICAgZm9wZW4KKysgICAgICAgICAgZm9wZW42NAorKyAgICAgICAgICBmcmVvcGVuCisrICAgICAgICAgIGZyZW9wZW42NAorKworKyAgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFsbCB0YWtlIGFuIE9QRU5UWVBFIHBhcmFtZXRlciB3aGljaCBtYXkKKysgICAgICAgIGNvbnRhaW4gYSBzdHJpbmcgb2YgdGhlIGZvcm0gIixjY3M9Q0hBUlNFVCIsIGluZGljYXRpbmcgdGhhdAorKyAgICAgICAgdGhlIHVuZGVybHlpbmcgZmlsZSB1c2VzIHRoZSBjaGFyYWN0ZXIgc2V0IG5hbWVkIENIQVJTRVQuCisrICAgICAgICBUaGlzIHByb2R1Y2VzIGEgd2lkZS1vcmllbnRlZCBzdHJlYW0sIHdoaWNoIGlzIG9ubHkgdXNlZnVsCisrICAgICAgICB3aGVuIHRoZSBmdW5jdGlvbnMgaW5jbHVkZWQgaW4gdGhpcyBvcHRpb24gZ3JvdXAgYXJlIHByZXNlbnQuCisrICAgICAgICBJZiB0aGUgdXNlciBhdHRlbXB0cyB0byBvcGVuIGEgZmlsZSBzcGVjaWZ5aW5nIGEgY2hhcmFjdGVyIHNldAorKyAgICAgICAgaW4gdGhlIE9QRU5UWVBFIHBhcmFtZXRlciwgYW5kIEVHTElCQyB3YXMgYnVpbHQgd2l0aCB0aGlzCisrICAgICAgICBvcHRpb24gZ3JvdXAgZGlzYWJsZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIE5VTEwsIGFuZCBzZXRzCisrICAgICAgICBlcnJubyB0byBFSU5WQUwuCisrCisrDAorKyMgVGhpcyBoZWxwcyBFbWFjcyB1c2VycyBicm93c2UgdGhpcyBmaWxlIHVzaW5nIHRoZSBwYWdlIG1vdGlvbiBjb21tYW5kcworKyMgYW5kIGNvbW1hbmRzIGxpa2UgJ3BhZ2VzLWRpcmVjdG9yeScuCisrIyBMb2NhbCBWYXJpYWJsZXM6CisrIyBwYWdlLWRlbGltaXRlcjogIl5jb25maWdcXHMtIgorKyMgRW5kOgorZGlmZiAtLWdpdCBhL29wdGlvbi1ncm91cHMuZGVmYXVsdHMgYi9vcHRpb24tZ3JvdXBzLmRlZmF1bHRzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uODE0MTIwMQorLS0tIC9kZXYvbnVsbAorKysrIGIvb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cworQEAgLTAsMCArMSw0NyBAQAorKyMgVGhpcyBmaWxlIHNldHMgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCBvcHRpb24gZ3JvdXAgdmFyaWFibGVzCisrIyBtZW50aW9uZWQgaW4gb3B0aW9uLWdyb3Vwcy5kZWY7IHNlZSB0aGF0IGZpbGUgZm9yIGEgZGVzY3JpcHRpb24gb2YKKysjIGVhY2ggb3B0aW9uIGdyb3VwLgorKyMKKysjIFN1YmRpcmVjdG9yeSBtYWtlZmlsZXMgaW5jbHVkZSB0aGlzIGZpbGUgYmVmb3JlIGluY2x1ZGluZyB0aGUgdXNlcidzCisrIyBzZXR0aW5ncyBmcm9tIG9wdGlvbi1ncm91cHMuY29uZmlnIGF0IHRoZSB0b3Agb2YgdGhlIGJ1aWxkIHRyZWU7CisrIyB0aGF0IGZpbGUgbmVlZCBvbmx5IHJlZmVyIHRvIHRob3NlIG9wdGlvbnMgd2hvc2UgZGVmYXVsdCBzZXR0aW5ncworKyMgYXJlIHRvIGJlIGNoYW5nZWQuCisrIworKyMgQnkgZGVmYXVsdCwgYWxsIG9wdGlvbiBncm91cHMgYXJlIGVuYWJsZWQuCisrT1BUSU9OX0VHTElCQ19BRFZBTkNFRF9JTkVUNiA9IHkKKytPUFRJT05fRUdMSUJDX0JBQ0tUUkFDRSA9IHkKKytPUFRJT05fRUdMSUJDX0JJR19NQUNST1MgPSB5CisrT1BUSU9OX0VHTElCQ19CU0QgPSB5CisrT1BUSU9OX0VHTElCQ19DWFhfVEVTVFMgPSB5CisrT1BUSU9OX0VHTElCQ19DQVRHRVRTID0geQorK09QVElPTl9FR0xJQkNfQ0hBUlNFVFMgPSB5CisrT1BUSU9OX0VHTElCQ19DUllQVCA9IHkKKytPUFRJT05fRUdMSUJDX0NSWVBUX1VGQyA9IHkKKytPUFRJT05fRUdMSUJDX0RCX0FMSUFTRVMgPSB5CisrT1BUSU9OX0VHTElCQ19FTlZaID0geQorK09QVElPTl9FR0xJQkNfRkNWVCA9IHkKKytPUFRJT05fRUdMSUJDX0ZNVE1TRyA9IHkKKytPUFRJT05fRUdMSUJDX0ZTVEFCID0geQorK09QVElPTl9FR0xJQkNfRlRSQVZFUlNFID0geQorK09QVElPTl9FR0xJQkNfR0VUTE9HSU4gPSB5CisrT1BUSU9OX0VHTElCQ19JRE4gPSB5CisrT1BUSU9OX0VHTElCQ19JTkVUID0geQorK09QVElPTl9FR0xJQkNfSU5FVF9BTkwgPSB5CisrT1BUSU9OX0VHTElCQ19MSUJNID0geQorK09QVElPTl9FR0xJQkNfTE9DQUxFUyA9IHkKKytPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFID0geQorK09QVElPTl9FR0xJQkNfTUVNVVNBR0UgPSB5CisrT1BUSU9OX0VHTElCQ19OSVMgPSB5CisrT1BUSU9OX0VHTElCQ19OU1NXSVRDSCA9IHkKKytPUFRJT05fRUdMSUJDX1JDTUQgPSB5CisrT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHID0geQorK09QVElPTl9FR0xJQkNfU1BBV04gPSB5CisrT1BUSU9OX0VHTElCQ19TVFJFQU1TID0geQorK09QVElPTl9FR0xJQkNfU1VOUlBDID0geQorK09QVElPTl9FR0xJQkNfVVRNUCA9IHkKKytPUFRJT05fRUdMSUJDX1VUTVBYID0geQorK09QVElPTl9FR0xJQkNfV09SREVYUCA9IHkKKytPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiA9IHkKKytPUFRJT05fUE9TSVhfUkVHRVhQID0geQorK09QVElPTl9QT1NJWF9SRUdFWFBfR0xJQkMgPSB5CisrT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8gPSB5CitkaWZmIC0tZ2l0IGEvb3B0aW9uLWdyb3Vwcy5tYWsgYi9vcHRpb24tZ3JvdXBzLm1haworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmY4M2UwYzEKKy0tLSAvZGV2L251bGwKKysrKyBiL29wdGlvbi1ncm91cHMubWFrCitAQCAtMCwwICsxLDQxIEBACisrIyBTZXR1cCBmaWxlIGZvciBzdWJkaXJlY3RvcnkgTWFrZWZpbGVzIHRoYXQgZGVmaW5lIEVHTElCQyBvcHRpb24gZ3JvdXBzLgorKworKyMgRUdMSUJDIHNob3VsZG4ndCBuZWVkIHRvIG92ZXJyaWRlIHRoaXMuICBIb3dldmVyLCB0aGUKKysjIGNyb3NzLWJ1aWxkLWZyaWVuZGx5IGxvY2FsZWRlZiBpbmNsdWRlcyB0aGlzIG1ha2VmaWxlIHRvIGdldCBvcHRpb24KKysjIGdyb3VwIHZhcmlhYmxlIGRlZmluaXRpb25zOyBpdCB1c2VzIGEgc2luZ2xlIGJ1aWxkIHRyZWUgZm9yIGFsbCB0aGUKKysjIG11bHRpbGlicywgYW5kIG5lZWRzIHRvIGJlIGFibGUgdG8gc3BlY2lmeSBhIGRpZmZlcmVudCBvcHRpb24gZ3JvdXAKKysjIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgZWFjaCBtdWx0aWxpYi4KKytvcHRpb25fZ3JvdXBfY29uZmlnX2ZpbGUgPz0gJChvYmpkaXIpL29wdGlvbi1ncm91cHMuY29uZmlnCisrCisrIyBSZWFkIHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciBhbGwgb3B0aW9ucy4KKysjIFdlJ3JlIGluY2x1ZGVkIGJlZm9yZSAuLi9SdWxlcywgc28gd2UgY2FuJ3QgYXNzdW1lICQoLi4pIGlzIHNldC4KKytpbmNsdWRlICQoZmlyc3R3b3JkICQoLi4pIC4uLylvcHRpb24tZ3JvdXBzLmRlZmF1bHRzCisrCisrIyBSZWFkIHRoZSBkZXZlbG9wZXIncyBvcHRpb24gZ3JvdXAgc2VsZWN0aW9ucywgb3ZlcnJpZGluZyB0aGUKKysjIGRlZmF1bHRzIGZyb20gb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cy4KKystaW5jbHVkZSAkKG9wdGlvbl9ncm91cF9jb25maWdfZmlsZSkKKysKKysjICQoY2FsbCBvcHRpb24tZGlzYWJsZWQsIFZBUikgaXMgJ3knIGlmIFZBUiBpcyBub3QgJ3knLCBvciAnbicgb3RoZXJ3aXNlLgorKyMgVkFSIHNob3VsZCBiZSBhIHZhcmlhYmxlIG5hbWUsIG5vdCBhIHZhcmlhYmxlIHJlZmVyZW5jZTsgdGhpcyBpcworKyMgbGVzcyBnZW5lcmFsLCBidXQgbW9yZSB0ZXJzZSBmb3IgdGhlIGludGVuZGVkIHVzZS4KKysjIFlvdSBjYW4gdXNlIGl0IHRvIGFkZCBhIGZpbGUgdG8gYSBsaXN0IGlmIGFuIG9wdGlvbiBncm91cCBpcworKyMgZGlzYWJsZWQsIGxpa2UgdGhpczoKKysjICAgcm91dGluZXMtJChjYWxsIG9wdGlvbi1kaXNhYmxlZCwgT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpICs9IC4uLgorK2RlZmluZSBvcHRpb24tZGlzYWJsZWQKKyskKGZpcnN0d29yZCAkKHN1YnN0IHksbiwkKGZpbHRlciB5LCQoJChzdHJpcCAkKDEpKSkpKSB5KQorK2VuZGVmCisrCisrIyBFc3RhYmxpc2ggJ3JvdXRpbmVzLXknLCBldGMuIGFzIHNpbXBseS1leHBhbmRlZCB2YXJpYWJsZXMuCisrYXV4LXkJICAgICAgIAkgICAgOj0KKytleHRyYS1saWJzLW90aGVycy15IDo9CisrZXh0cmEtbGlicy15ICAgCSAgICA6PQorK2V4dHJhLW9ianMteSAgIAkgICAgOj0KKytpbnN0YWxsLWJpbi15ICAJICAgIDo9CisraW5zdGFsbC1vdGhlcnMteSAgICA6PQorK2luc3RhbGwtc2Jpbi15IAkgICAgOj0KKytvdGhlcnMteSAgICAgICAJICAgIDo9Cisrb3RoZXJzLXBpZS15ICAgCSAgICA6PQorK3JvdXRpbmVzLXkgICAgIAkgICAgOj0KKyt0ZXN0LXNyY3MteSAgICAJICAgIDo9CisrdGVzdHMteSAgICAgICAgCSAgICA6PQorK3h0ZXN0cy15ICAgICAgIAkgICAgOj0KK2RpZmYgLS1naXQgYS9vcHRpb25zLWNvbmZpZy9NYWtlZmlsZSBiL29wdGlvbnMtY29uZmlnL01ha2VmaWxlCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZGIwMDcwOAorLS0tIC9kZXYvbnVsbAorKysrIGIvb3B0aW9ucy1jb25maWcvTWFrZWZpbGUKK0BAIC0wLDAgKzEsNTUgQEAKKysjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyMgRUdMSUJDIG9wdGlvbi1ncm91cHMgY29uZmlndXJhdGlvbiB0YXJnZXRzCisrIyBUaGVzZSB0YXJnZXRzIGFyZSBpbmNsdWRlZCBmcm9tIHRvcC1sZXZlbCBtYWtlZmlsZQorKworK2lmbmVxICgkKGtjb25maWdfdG9vbHMpLCkKKytpZm5lcSAobm8sJChQRVJMKSkKKysKKytvY2RpciA6PSBvcHRpb25zLWNvbmZpZworKworK09jb25maWdEZWZhdWx0cyAgICAgOj0gb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cworK09jb25maWdEZWZhdWx0c190bXAgOj0gJChjb21tb24tb2JqcGZ4KS50bXAuZGVmY29uZmlnCisrT2NvbmZpZ0RlZiAgICAgICAgICA6PSBvcHRpb24tZ3JvdXBzLmRlZgorK09jb25maWcgICAgICAgICAgICAgOj0gJChjb21tb24tb2JqcGZ4KW9wdGlvbi1ncm91cHMuY29uZmlnCisrT2NvbmZpZ190bXAgICAgICAgICA6PSAkKGNvbW1vbi1vYmpwZngpLnRtcC5jb25maWcKKysKKytjb25mICA6PSAkKGtjb25maWdfdG9vbHMpL2NvbmYKKyttY29uZiA6PSAkKGtjb25maWdfdG9vbHMpL21jb25mCisrCisrcHJlcHJvYyAgOj0gJChQRVJMKSAkKG9jZGlyKS9jb25maWctcHJlcHJvYy5wbAorK3Bvc3Rwcm9jIDo9ICQoUEVSTCkgJChvY2RpcikvY29uZmlnLXBvc3Rwcm9jLnBsCisrCisrUEhPTlkgKz0gZGVmY29uZmlnIGNvbmZpZyBtZW51Y29uZmlnCisrCisrZGVmY29uZmlnOiAkKGNvbmYpICQoT2NvbmZpZ0RlZmF1bHRzKSAkKE9jb25maWdEZWYpCisrCXJtIC1mICQoT2NvbmZpZ0RlZmF1bHRzX3RtcCkKKysJcm0gLWYgJChPY29uZmlnX3RtcCkKKysJJChwcmVwcm9jKSAkKE9jb25maWdEZWZhdWx0cykgPiAkKE9jb25maWdEZWZhdWx0c190bXApCisrCUtDT05GSUdfQ09ORklHPSQoT2NvbmZpZ190bXApICQ8IC0tZGVmY29uZmlnPSQoT2NvbmZpZ0RlZmF1bHRzX3RtcCkgXAorKwkJCQkkKE9jb25maWdEZWYpCisrCSQocG9zdHByb2MpICQoT2NvbmZpZ0RlZmF1bHRzKSAkKE9jb25maWdfdG1wKSA+ICQoT2NvbmZpZykKKysJcm0gJChPY29uZmlnX3RtcCkKKysJcm0gJChPY29uZmlnRGVmYXVsdHNfdG1wKQorKworK2NvbmZpZzogJChjb25mKSAkKE9jb25maWdEZWZhdWx0cykgJChPY29uZmlnRGVmKQorKwlybSAtZiAkKE9jb25maWdfdG1wKQorKwkkKHByZXByb2MpICQod2lsZGNhcmQgJChPY29uZmlnKSkgPiAkKE9jb25maWdfdG1wKQorKwlLQ09ORklHX0NPTkZJRz0kKE9jb25maWdfdG1wKSAkPCAtLW9sZGFza2NvbmZpZyAkKE9jb25maWdEZWYpCisrCSQocG9zdHByb2MpICQoT2NvbmZpZ0RlZmF1bHRzKSAkKE9jb25maWdfdG1wKSA+ICQoT2NvbmZpZykKKysJcm0gJChPY29uZmlnX3RtcCkKKysKKyttZW51Y29uZmlnOiAkKG1jb25mKSAkKE9jb25maWdEZWZhdWx0cykgJChPY29uZmlnRGVmKQorKwlybSAtZiAkKE9jb25maWdfdG1wKQorKwkkKHByZXByb2MpICQod2lsZGNhcmQgJChPY29uZmlnKSkgPiAkKE9jb25maWdfdG1wKQorKwlLQ09ORklHX0NPTkZJRz0kKE9jb25maWdfdG1wKSAkPCAkKE9jb25maWdEZWYpCisrCSQocG9zdHByb2MpICQoT2NvbmZpZ0RlZmF1bHRzKSAkKE9jb25maWdfdG1wKSA+ICQoT2NvbmZpZykKKysJcm0gJChPY29uZmlnX3RtcCkKKysKKysjIEhlbHAgdGV4dCB1c2VkIGJ5IG1ha2UgaGVscAorK2hlbHA6CisrCUBlY2hvICAnICBkZWZjb25maWcJICAtIE5ldyBjb25maWcgd2l0aCBkZWZhdWx0IGZyb20gZGVmYXVsdCBjb25maWcnCisrCUBlY2hvICAnICBjb25maWcJICAtIFVwZGF0ZSBjdXJyZW50IGNvbmZpZyB1dGlsaXNpbmcgYSBsaW5lLW9yaWVudGVkIHByb2dyYW0nCisrCUBlY2hvICAnICBtZW51Y29uZmlnCSAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgdXRpbGlzaW5nIGEgbWVudSBiYXNlZCBwcm9ncmFtJworKworK2VuZGlmCisrZW5kaWYKK2RpZmYgLS1naXQgYS9vcHRpb25zLWNvbmZpZy9jb25maWctcG9zdHByb2MucGwgYi9vcHRpb25zLWNvbmZpZy9jb25maWctcG9zdHByb2MucGwKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi40ZGQxYzYzCistLS0gL2Rldi9udWxsCisrKysgYi9vcHRpb25zLWNvbmZpZy9jb25maWctcG9zdHByb2MucGwKK0BAIC0wLDAgKzEsNTggQEAKKysjIS91c3IvYmluL3BlcmwKKysKKyskdXNhZ2UgPSAidXNhZ2U6ICQwIDxkZWZhdWx0IGNvbmZpZyBmaWxlPiA8Y29uZmlnIGZpbGU+XG4iOworKworK2RpZSAiJHVzYWdlIiB1bmxlc3MgQEFSR1Y7CisrJGRlZmF1bHRzID0gc2hpZnQgQEFSR1Y7CisrZGllICIkdXNhZ2UiIHVubGVzcyBAQVJHVjsKKytkaWUgIkNvdWxkIG5vdCBvcGVuICRBUkdWWzBdIiB1bmxlc3MgLVQgJEFSR1ZbMF07CisrCisrc3ViIHlhbmsgeworKyAgICBAb3B0aW9uID0gZ3JlcCghKCRfID1+IC8kX1swXVxzKj0vKSwgQG9wdGlvbik7CisrfQorKworK29wZW4oREVGQVVMVFMsICRkZWZhdWx0cykgfHwgZGllICJDb3VsZCBub3Qgb3BlbiAkZGVmYXVsdHNcbiI7CisrCisrIyBnZXQgdGhlIGZ1bGwgbGlzdCBvZiBhdmFpbGFibGUgb3B0aW9ucyB1c2luZyB0aGUgZGVmYXVsdCBjb25maWcgZmlsZQorKyRpID0gMDsKKyt3aGlsZSAoPERFRkFVTFRTPikgeworKyAgICBpZiAoL15ccypPUFRJT05fKFx3K1xzKj0uKiQpLykgeworKwkkb3B0aW9uWyRpKytdID0gJDE7CisrICAgIH0KKyt9CisrCisrIyBub3cgZ28gdGhyb3VnaCB0aGUgY29uZmlnIGZpbGUsIG1ha2luZyB0aGUgbmVjZXNzYXJ5IGNoYW5nZXMKKyt3aGlsZSAoPD4pIHsKKysgICAgaWYgKC9MaW51eCBLZXJuZWwgQ29uZmlndXJhdGlvbi8pIHsKKysJIyBjaGFuZ2UgdGl0bGUKKysJcy9MaW51eCBLZXJuZWwvT3B0aW9uIEdyb3Vwcy87CisrCXByaW50OworKyAgICB9IGVsc2lmICgvXlxzKkNPTkZJR18oXHcrKVxzKj0vKSB7CisrCSMgdGhpcyBpcyBhbiBleHBsaWNpdCBvcHRpb24gc2V0IGxpbmUsIGNoYW5nZSBDT05GSUdfIHRvIE9QVElPTl8KKysJIyBiZWZvcmUgcHJpbnRpbmcgYW5kIHJlbW92ZSB0aGlzIG9wdGlvbiBmcm9tIG9wdGlvbiBsaXN0CisrCSRvcHQgPSAkMTsKKysJeWFuaygkb3B0KTsKKysJcy9DT05GSUdfL09QVElPTl8vZzsKKysJcHJpbnQ7CisrICAgIH0gZWxzaWYgKC9eXHMqI1xzK0NPTkZJR18oXHcrKSBpcyBub3Qgc2V0LykgeworKwkjIHRoaXMgaXMgYSBjb21tZW50IGxpbmUgZm9yIGFuIHVuc2V0IGJvb2xlYW4gb3B0aW9uLCBjaGFuZ2UgQ09ORklHXworKwkjIHRvIE9QVElPTl8sIHJlbW92ZSB0aGlzIG9wdGlvbiBmcm9tIG9wdGlvbiBsaXN0LCBhbmQgY29udmVydCB0bworKwkjIGV4cGxpY2l0IE9QVElPTl9GT089bgorKwkkb3B0ID0gJDE7CisrCXlhbmsoJG9wdCk7CisrCXMvQ09ORklHXy9PUFRJT05fL2c7CisrCXByaW50ICJPUFRJT05fJG9wdD1uXG4iOworKyAgICB9IGVsc2UgeworKwlwcmludDsKKysgICAgfQorK30KKysKKysjIGFueSBib29sZWFuIG9wdGlvbnMgbGVmdCBpbiBAb3B0aW9ucywgYXJlIG9wdGlvbnMgdGhhdCB3ZXJlIG5vdCBtZW50aW9uZWQgaW4KKysjIHRoZSBjb25maWcgZmlsZSwgYW5kIGltcGxpY2l0bHkgdGhhdCBtZWFucyB0aGUgb3B0aW9uIG11c3QgYmUgc2V0ID1uLAorKyMgc28gZG8gdGhhdCBoZXJlLgorK2ZvcmVhY2ggJG9wdCAoQG9wdGlvbikgeworKyAgICBpZiAoJG9wdCA9fiAvPVxzKlt5bl0vKSB7CisrCSRvcHQgPX4gcy89XHMqW3luXS89bi87CisrCXByaW50ICJPUFRJT05fJG9wdFxuIjsKKysgICAgfQorK30KK2RpZmYgLS1naXQgYS9vcHRpb25zLWNvbmZpZy9jb25maWctcHJlcHJvYy5wbCBiL29wdGlvbnMtY29uZmlnL2NvbmZpZy1wcmVwcm9jLnBsCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjgzYmI4NQorLS0tIC9kZXYvbnVsbAorKysrIGIvb3B0aW9ucy1jb25maWcvY29uZmlnLXByZXByb2MucGwKK0BAIC0wLDAgKzEsOCBAQAorKyMhL3Vzci9iaW4vcGVybAorKworK2lmIChAQVJHVikgeworKyAgICB3aGlsZSAoPD4pIHsKKysJcy9PUFRJT05fL0NPTkZJR18vZzsKKysJcHJpbnQ7CisrICAgIH0KKyt9CitkaWZmIC0tZ2l0IGEvc2NyaXB0cy9vcHRpb24tZ3JvdXBzLmF3ayBiL3NjcmlwdHMvb3B0aW9uLWdyb3Vwcy5hd2sKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi41MzNhZjBjCistLS0gL2Rldi9udWxsCisrKysgYi9zY3JpcHRzL29wdGlvbi1ncm91cHMuYXdrCitAQCAtMCwwICsxLDYzIEBACisrIyBvcHRpb24tZ3JvdXBzLmF3ayAtLS0gZ2VuZXJhdGUgb3B0aW9uIGdyb3VwIGhlYWRlciBmaWxlCisrIyBHaXZlbiBpbnB1dCBmaWxlcyBjb250YWluaW5nIG1ha2VmaWxlLXN0eWxlIGFzc2lnbm1lbnRzIHRvIHZhcmlhYmxlcywKKysjIHByaW50IG91dCBhIGhlYWRlciBmaWxlIHRoYXQgI2RlZmluZXMgYW4gYXBwcm9wcmlhdGUgcHJlcHJvY2Vzc29yCisrIyBzeW1ib2wgZm9yIGVhY2ggdmFyaWFibGUgbGVmdCBzZXQgdG8gJ3knLgorKworK0JFR0lOIHsgRlM9Ij0iIH0KKysKKysjIFRyaW0gc3BhY2VzLgorK3sgZ3N1YiAoL1tbOmJsYW5rOl1dLywgIiIpIH0KKysKKysjIFNraXAgY29tbWVudHMuCisrL14jLyB7IG5leHQgfQorKworKyMgUHJvY2VzcyBhc3NpZ25tZW50cy4KKytORiA9PSAyIHsKKysgICAgdmFyc1skMV0gPSAkMgorK30KKysKKysjIFByaW50IGZpbmFsIHZhbHVlcy4KKytFTkQgeworKyAgICBwcmludCAiLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IHNjcmlwdHMvb3B0aW9uLWdyb3Vwcy5hd2siCisrICAgIHByaW50ICIgICBpbiB0aGUgRUdMSUJDIHNvdXJjZSB0cmVlLiIKKysgICAgcHJpbnQgIiIKKysgICAgcHJpbnQgIiAgIEl0IGRlZmluZXMgbWFjcm9zIHRoYXQgaW5kaWNhdGUgd2hpY2ggRUdMSUJDIG9wdGlvbiBncm91cHMgd2VyZSIKKysgICAgcHJpbnQgIiAgIGNvbmZpZ3VyZWQgaW4gJ29wdGlvbi1ncm91cHMuY29uZmlnJyB3aGVuIHRoaXMgQyBsaWJyYXJ5IHdhcyIKKysgICAgcHJpbnQgIiAgIGJ1aWx0LiAgRm9yIGVhY2ggb3B0aW9uIGdyb3VwIG5hbWVkIE9QVElPTl9mb28sIGl0ICNkZWZpbmVzIgorKyAgICBwcmludCAiICAgX19PUFRJT05fZm9vIHRvIGJlIDEgaWYgdGhlIGdyb3VwIGlzIGVuYWJsZWQsIG9yICNkZWZpbmVzIHRoYXQiCisrICAgIHByaW50ICIgICBzeW1ib2wgdG8gYmUgMCBpZiB0aGUgZ3JvdXAgaXMgZGlzYWJsZWQuICAqLyIKKysgICAgcHJpbnQgIiIKKysgICAgcHJpbnQgIiNpZm5kZWYgX19HTlVfT1BUSU9OX0dST1VQU19IIgorKyAgICBwcmludCAiI2RlZmluZSBfX0dOVV9PUFRJT05fR1JPVVBTX0giCisrICAgIHByaW50ICIiCisrCisrICAgICMgUHJvZHVjZSBhIHNvcnRlZCBsaXN0IG9mIHZhcmlhYmxlIG5hbWVzLgorKyAgICBpPTAKKysgICAgZm9yICh2YXIgaW4gdmFycykKKysgICAgICAgIG5hbWVzW2krK10gPSB2YXIKKysgICAgbiA9IGFzb3J0IChuYW1lcykKKysKKysgICAgZm9yIChpID0gMTsgaSA8PSBuOyBpKyspCisrICAgIHsKKysgICAgICAgIHZhciA9IG5hbWVzW2ldCisrICAgICAgICBpZiAodmFyIH4gL15PUFRJT05fLykKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAodmFyc1t2YXJdID09ICJ5IikKKysgICAgICAgICAgICAgICAgcHJpbnQgIiNkZWZpbmUgX18iIHZhciAiIDEiCisrICAgICAgICAgICAgZWxzZSBpZiAodmFyc1t2YXJdID09ICJuIikKKysgICAgICAgICAgICAgICAgcHJpbnQgIiNkZWZpbmUgX18iIHZhciAiIDAiCisrCSAgICBlbHNlIGlmICh2YXJzW3Zhcl0gfiAvXlswLTldKy8gfHwKKysJCSAgICAgdmFyc1t2YXJdIH4gL14weFswLTlhQWJCY0NkRGVFZkZdKy8gfHwKKysJCSAgICAgdmFyc1t2YXJdIH4gL15cIi8pCisrCQkgcHJpbnQgIiNkZWZpbmUgX18iIHZhciAiICIgdmFyc1t2YXJdCisrCSAgICBlbHNlCisrCQlwcmludCAiLyogI3VuZGVmIF9fIiB2YXIgIiAqLyIKKysgICAgICAgICAgICAjIElnbm9yZSB2YXJpYWJsZXMgdGhhdCBkb24ndCBoYXZlIGJvb2xlYW4sIGludCwgaGV4LCBvcgorKwkgICAgIyBzdHJpbmcgdmFsdWVzLiBJZGVhbGx5LCB0aGlzIHdvdWxkIGJlIGRyaXZlbiBieSB0aGUgdHlwZXMKKysJICAgICMgZ2l2ZW4gaW4gb3B0aW9uLWdyb3Vwcy5kZWYuCisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgcHJpbnQgIiIKKysgICAgcHJpbnQgIiNlbmRpZiAvKiBfX0dOVV9PUFRJT05fR1JPVVBTX0ggKi8iCisrfQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjAtZWdsaWJjLUhlbHAtYm9vdHN0cmFwLWNyb3NzLXRvb2xjaGFpbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMC1lZ2xpYmMtSGVscC1ib290c3RyYXAtY3Jvc3MtdG9vbGNoYWluLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmOTMwOTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjAtZWdsaWJjLUhlbHAtYm9vdHN0cmFwLWNyb3NzLXRvb2xjaGFpbi5wYXRjaApAQCAtMCwwICsxLDEwMCBAQAorRnJvbSA4ZmUwZDI5NDg4YjM3NjAxMWNkYWFhNDYyZDU1N2ZmYzBiMzFmYjYzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6NDk6MjggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyMC8yN10gZWdsaWJjOiBIZWxwIGJvb3RzdHJhcCBjcm9zcyB0b29sY2hhaW4KKworVGFrZW4gZnJvbSBFR0xJQkMsIHIxNDg0ICsgcjE1MjUKKworICAgICAgICAyMDA3LTAyLTIwICBKaW0gQmxhbmR5ICA8amltYkBjb2Rlc291cmNlcnkuY29tPgorCisgICAgICAgICAgICAgICAgKiBNYWtlZmlsZSAoaW5zdGFsbC1oZWFkZXJzKTogUHJlc2VydmUgb2xkIGJlaGF2aW9yOiBkZXBlbmQgb24KKyAgICAgICAgICAgICAgICAkKGluc3RfaW5jbHVkZWRpcikvZ251L3N0dWJzLmggb25seSBpZiBpbnN0YWxsLWJvb3RzdHJhcC1oZWFkZXJzCisgICAgICAgICAgICAgICAgaXMgc2V0OyBvdGhlcndpc2UsIHBsYWNlIGdudS9zdHVicy5oIG9uIHRoZSAnaW5zdGFsbC1vdGhlcnMnIGxpc3QuCisKKyAgICAgICAgMjAwNy0wMi0xNiAgSmltIEJsYW5keSAgPGppbWJAY29kZXNvdXJjZXJ5LmNvbT4KKworICAgICAgICAgICAgICAgICogTWFrZWZpbGU6IEFtZW5kIG1ha2UgaW5zdGFsbC1oZWFkZXJzIHRvIGluc3RhbGwgZXZlcnl0aGluZworICAgICAgICAgICAgICAgIG5lY2Vzc2FyeSBmb3IgYnVpbGRpbmcgYSBjcm9zcy1jb21waWxlci4gIEluc3RhbGwgZ251L3N0dWJzLmggYXMKKyAgICAgICAgICAgICAgICBwYXJ0IG9mICdpbnN0YWxsLWhlYWRlcnMnLCBub3QgJ2luc3RhbGwtb3RoZXJzJy4KKyAgICAgICAgICAgICAgICBJZiBpbnN0YWxsLWJvb3RzdHJhcC1oZWFkZXJzIGlzICd5ZXMnLCBpbnN0YWxsIGEgZHVtbXkgY29weSBvZgorICAgICAgICAgICAgICAgIGdudS9zdHVicy5oLCBpbnN0ZWFkIG9mIGNvbXB1dGluZyB0aGUgcmVhbCB0aGluZy4KKyAgICAgICAgICAgICAgICAqIGluY2x1ZGUvc3R1YnMtYm9vdHN0cmFwLmg6IE5ldyBmaWxlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBNYWtlZmlsZSAgICAgICAgICAgICAgICAgIHwgMjIgKysrKysrKysrKysrKysrKysrKysrLQorIGluY2x1ZGUvc3R1YnMtYm9vdHN0cmFwLmggfCAxMiArKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9zdHVicy1ib290c3RyYXAuaAorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggZjkwNjM5MS4uZTRlMTQ5ZSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTY5LDkgKzY5LDE4IEBAIHN1YmRpci1kaXJzID0gaW5jbHVkZQorIHZwYXRoICUuaCAkKHN1YmRpci1kaXJzKQorIAorICMgV2hhdCB0byBpbnN0YWxsLgorLWluc3RhbGwtb3RoZXJzID0gJChpbnN0X2luY2x1ZGVkaXIpL2dudS9zdHVicy5oCisgaW5zdGFsbC1iaW4tc2NyaXB0ID0KKyAKKysjIElmIHdlJ3JlIGJvb3RzdHJhcHBpbmcsIGluc3RhbGwgYSBkdW1teSBnbnUvc3R1YnMuaCBhbG9uZyB3aXRoIHRoZQorKyMgb3RoZXIgaGVhZGVycywgc28gJ21ha2UgaW5zdGFsbC1oZWFkZXJzJyBwcm9kdWNlcyBhIHVzZWFibGUgaW5jbHVkZQorKyMgdHJlZS4gIE90aGVyd2lzZSwgaW5zdGFsbCBnbnUvc3R1YnMuaCBsYXRlciwgYWZ0ZXIgdGhlIHJlc3Qgb2YgdGhlCisrIyBidWlsZCBpcyBkb25lLgorK2lmZXEgKCQoaW5zdGFsbC1ib290c3RyYXAtaGVhZGVycykseWVzKQorK2luc3RhbGwtaGVhZGVyczogJChpbnN0X2luY2x1ZGVkaXIpL2dudS9zdHVicy5oCisrZWxzZQorK2luc3RhbGwtb3RoZXJzID0gJChpbnN0X2luY2x1ZGVkaXIpL2dudS9zdHVicy5oCisrZW5kaWYKKysKKyBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorIGhlYWRlcnMgKz0gZ251L2xpYi1uYW1lcy5oCisgZW5kaWYKK0BAIC0xNTEsNiArMTYwLDE2IEBAIG90aGVyczogJChjb21tb24tb2JqcGZ4KXRlc3RydW4uc2gKKyAKKyBzdWJkaXItc3R1YnMgOj0gJChmb3JlYWNoIGRpciwkKHN1YmRpcnMpLCQoY29tbW9uLW9ianBmeCkkKGRpcikvc3R1YnMpCisgCisrIyBnbnUvc3R1YnMuaCBkZXBlbmRzICh2aWEgdGhlIHN1YmRpciAnc3R1YnMnIHRhcmdldHMpIG9uIGFsbCB0aGUgLm8KKysjIGZpbGVzIGluIEVHTElCQy4gIEZvciBib290c3RyYXBwaW5nIGEgR0NDL0VHTElCQyBwYWlyLCBhbiBlbXB0eQorKyMgZ251L3N0dWJzLmggaXMgZ29vZCBlbm91Z2guCisraWZlcSAoJChpbnN0YWxsLWJvb3RzdHJhcC1oZWFkZXJzKSx5ZXMpCisrJChpbnN0X2luY2x1ZGVkaXIpL2dudS9zdHVicy5oOiBpbmNsdWRlL3N0dWJzLWJvb3RzdHJhcC5oICQoK2ZvcmNlKQorKwkkKG1ha2UtdGFyZ2V0LWRpcmVjdG9yeSkKKysJJChJTlNUQUxMX0RBVEEpICQ8ICRACisrCisraW5zdGFsbGVkLXN0dWJzID0KKytlbHNlCisgaWZuZGVmIGFiaS12YXJpYW50cworIGluc3RhbGxlZC1zdHVicyA9ICQoaW5zdF9pbmNsdWRlZGlyKS9nbnUvc3R1YnMuaAorIGVsc2UKK0BAIC0xNzcsNiArMTk2LDcgQEAgJChpbnN0X2luY2x1ZGVkaXIpL2dudS9zdHVicy5oOiAkKCtmb3JjZSkKKyAKKyBpbnN0YWxsLW90aGVycy1ub3N1YmRpcjogJChpbnN0YWxsZWQtc3R1YnMpCisgZW5kaWYKKytlbmRpZgorIAorIAorICMgU2luY2Ugc3R1YnMuaCBpcyBuZXZlciBuZWVkZWQgd2hlbiBidWlsZGluZyB0aGUgbGlicmFyeSwgd2Ugc2ltcGxpZnkgdGhlCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zdHVicy1ib290c3RyYXAuaCBiL2luY2x1ZGUvc3R1YnMtYm9vdHN0cmFwLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xZDJiNjY5CistLS0gL2Rldi9udWxsCisrKysgYi9pbmNsdWRlL3N0dWJzLWJvb3RzdHJhcC5oCitAQCAtMCwwICsxLDEyIEBACisrLyogUGxhY2Vob2xkZXIgc3R1YnMuaCBmaWxlIGZvciBib290c3RyYXBwaW5nLgorKworKyAgIFdoZW4gYm9vdHN0cmFwcGluZyBhIEdDQy9FR0xJQkMgcGFpciwgR0NDIHJlcXVpcmVzIHRoYXQgdGhlIEVHTElCQworKyAgIGhlYWRlcnMgYmUgaW5zdGFsbGVkLCBidXQgd2UgY2FuJ3QgZnVsbHkgYnVpbGQgRUdMSUJDIHdpdGhvdXQgdGhhdAorKyAgIEdDQy4gIFNvIHdlIHJ1biB0aGUgY29tbWFuZDoKKysKKysgICAgICBtYWtlIGluc3RhbGwtaGVhZGVycyBpbnN0YWxsLWJvb3RzdHJhcC1oZWFkZXJzPXllcworKworKyAgIHRvIGluc3RhbGwgdGhlIGhlYWRlcnMgR0NDIG5lZWRzLCBidXQgYXZvaWQgYnVpbGRpbmcgY2VydGFpbgorKyAgIGRpZmZpY3VsdCBoZWFkZXJzLiAgVGhlIDxnbnUvc3R1YnMuaD4gaGVhZGVyIGRlcGVuZHMsIHZpYSB0aGUKKysgICBFR0xJQkMgc3ViZGlyICdzdHVicycgbWFrZSB0YXJnZXRzLCBvbiBldmVyeSAubyBmaWxlIGluIEVHTElCQywgYnV0CisrICAgYW4gZW1wdHkgc3R1YnMuaCBsaWtlIHRoaXMgd2lsbCBkbyBmaW5lIGZvciBHQ0MuICAqLworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjEtZWdsaWJjLWNoZXJyeS1waWNrZWQtZnJvbS1odHRwLXd3dy5lZ2xpYmMub3JnLWFyY2hpdi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMS1lZ2xpYmMtY2hlcnJ5LXBpY2tlZC1mcm9tLWh0dHAtd3d3LmVnbGliYy5vcmctYXJjaGl2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YmI4YTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjEtZWdsaWJjLWNoZXJyeS1waWNrZWQtZnJvbS1odHRwLXd3dy5lZ2xpYmMub3JnLWFyY2hpdi5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tIGZlMmFlNGY4Nzc5MjhkZDZiZmY1YmFjM2YxNWJjZTRiNTBkMmJkMTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDo1MToxNiArMDAwMAorU3ViamVjdDogW1BBVENIIDIxLzI3XSBlZ2xpYmM6IGNoZXJyeS1waWNrZWQgZnJvbQorIGh0dHA6Ly93d3cuZWdsaWJjLm9yZy9hcmNoaXZlcy9wYXRjaGVzL21zZzAwNzcyLmh0bWwKKworSXQgaGFzbid0IHlldCBiZWVuIG1lcmdlZCBpbnRvIGdsaWJjCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgcmVzb2x2L3Jlc19saWJjLmMgfCAxNSArKysrKysrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3Jlc29sdi9yZXNfbGliYy5jIGIvcmVzb2x2L3Jlc19saWJjLmMKK2luZGV4IGVlM2ZhMjEuLjI5ZTIzNDAgMTAwNjQ0CistLS0gYS9yZXNvbHYvcmVzX2xpYmMuYworKysrIGIvcmVzb2x2L3Jlc19saWJjLmMKK0BAIC0yMiwxMiArMjIsMTMgQEAKKyAjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisgI2luY2x1ZGUgPHJlc29sdi5oPgorICNpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorLQorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorIAorIC8qIFRoZSBmb2xsb3dpbmcgYml0IGlzIGNvcGllZCBmcm9tIHJlc19kYXRhLmMgKHdoZXJlIGl0IGlzICNpZmRlZidlZAorICAgIG91dCkgc2luY2UgcmVzX2luaXQoKSBzaG91bGQgZ28gaW50byBsaWJjLnNvIGJ1dCB0aGUgcmVzdCBvZiB0aGF0CisgICAgZmlsZSBzaG91bGQgbm90LiAgKi8KKyAKKytfX2xpYmNfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQgKHN0YXRpYywgbG9jayk7CisgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19yZXNfaW5pdHN0YW1wIGF0dHJpYnV0ZV9oaWRkZW47CisgLyogV2UgaGF2ZSBhdG9taWMgaW5jcmVtZW50IG9wZXJhdGlvbnMgb24gNjQtYml0IHBsYXRmb3Jtcy4gICovCisgI2lmIF9fV09SRFNJWkUgPT0gNjQKK0BAIC0zNSw3ICszNiw2IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fcmVzX2luaXRzdGFtcCBhdHRyaWJ1dGVfaGlkZGVuOworICMgZGVmaW5lIGF0b21pY2luY3VubG9jayhsb2NrKSAodm9pZCkgMAorICMgZGVmaW5lIGF0b21pY2luYyh2YXIpIGNhdG9taWNfaW5jcmVtZW50ICgmKHZhcikpCisgI2Vsc2UKKy1fX2xpYmNfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQgKHN0YXRpYywgbG9jayk7CisgIyBkZWZpbmUgYXRvbWljaW5jbG9jayhsb2NrKSBfX2xpYmNfbG9ja19sb2NrIChsb2NrKQorICMgZGVmaW5lIGF0b21pY2luY3VubG9jayhsb2NrKSBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spCisgIyBkZWZpbmUgYXRvbWljaW5jKHZhcikgKyt2YXIKK0BAIC05NCw3ICs5NCwxOCBAQCByZXNfaW5pdCh2b2lkKSB7CisgaW50CisgX19yZXNfbWF5YmVfaW5pdCAocmVzX3N0YXRlIHJlc3AsIGludCBwcmVpbml0KQorIHsKKysJc3RhdGljIHRpbWVfdCBsYXN0X210aW1lOworKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworKwlpbnQgcmV0OworKworIAlpZiAocmVzcC0+b3B0aW9ucyAmIFJFU19JTklUKSB7CisrCQlyZXQgPSBzdGF0IChfUEFUSF9SRVNDT05GLCAmc3RhdGJ1Zik7CisrCQlfX2xpYmNfbG9ja19sb2NrIChsb2NrKTsKKysJCWlmICgocmV0ID09IDApICYmIChsYXN0X210aW1lICE9IHN0YXRidWYuc3RfbXRpbWUpKSB7CisrCQkJbGFzdF9tdGltZSA9IHN0YXRidWYuc3RfbXRpbWU7CisrCQkJYXRvbWljaW5jIChfX3Jlc19pbml0c3RhbXApOworKwkJfQorKwkJX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKTsKKyAJCWlmIChfX3Jlc19pbml0c3RhbXAgIT0gcmVzcC0+X3UuX2V4dC5pbml0c3RhbXApIHsKKyAJCQlpZiAocmVzcC0+bnNjb3VudCA+IDApCisgCQkJCV9fcmVzX2ljbG9zZSAocmVzcCwgdHJ1ZSk7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMi1lZ2xpYmMtQ2xlYXItY2FjaGUtbGluZXMtb24tcHBjOHh4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIyLWVnbGliYy1DbGVhci1jYWNoZS1saW5lcy1vbi1wcGM4eHgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE0YzljMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMi1lZ2xpYmMtQ2xlYXItY2FjaGUtbGluZXMtb24tcHBjOHh4LnBhdGNoCkBAIC0wLDAgKzEsODEgQEAKK0Zyb20gYmU3MjczMjI1Njk4MDc0MzQ3YTcxZGU1ODAwNjk3N2JiMzA0ZDdmNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjUzOjQ3ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMjIvMjddIGVnbGliYzogQ2xlYXIgY2FjaGUgbGluZXMgb24gcHBjOHh4CisKKzIwMDctMDYtMTMgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGNvZGVzb3VyY2VyeS5jb20+CisgICAgICAgICAgICBNYXJrIFNoaW53ZWxsICA8c2hpbndlbGxAY29kZXNvdXJjZXJ5LmNvbT4KKworICAgICAgICAqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvbGliYy1zdGFydC5jCisgICAgICAgIChfX2xpYmNfc3RhcnRfbWFpbik6IERldGVjdCA4eHggcGFydHMgYW5kIGNsZWFyCisgICAgICAgIF9fY2FjaGVfbGluZV9zaXplIGlmIGRldGVjdGVkLgorICAgICAgICAqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvZGwtc3lzZGVwLmMKKyAgICAgICAgKERMX1BMQVRGT1JNX0FVWFYpOiBMaWtld2lzZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9kbC1zeXNkZXAuYyAgfCAxNCArKysrKysrKysrKysrLQorIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvbGliYy1zdGFydC5jIHwgMTUgKysrKysrKysrKysrKystCisgMiBmaWxlcyBjaGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9kbC1zeXNkZXAuYyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvZGwtc3lzZGVwLmMKK2luZGV4IGMyNTA0ZmYuLmQ1MGYxY2IgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2RsLXN5c2RlcC5jCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2RsLXN5c2RlcC5jCitAQCAtMjQsOSArMjQsMjEgQEAgaW50IF9fY2FjaGVfbGluZV9zaXplIGF0dHJpYnV0ZV9oaWRkZW47CisgLyogU2NhbiB0aGUgQXV4IFZlY3RvciBmb3IgdGhlICJEYXRhIENhY2hlIEJsb2NrIFNpemUiIGVudHJ5LiAgSWYgZm91bmQKKyAgICB2ZXJpZnkgdGhhdCB0aGUgc3RhdGljIGV4dGVybiBfX2NhY2hlX2xpbmVfc2l6ZSBpcyBkZWZpbmVkIGJ5IGNoZWNraW5nCisgICAgZm9yIG5vdCBOVUxMLiAgSWYgaXQgaXMgZGVmaW5lZCB0aGVuIGFzc2lnbiB0aGUgY2FjaGUgYmxvY2sgc2l6ZQorLSAgIHZhbHVlIHRvIF9fY2FjaGVfbGluZV9zaXplLiAgKi8KKysgICB2YWx1ZSB0byBfX2NhY2hlX2xpbmVfc2l6ZS4gIFRoaXMgaXMgdXNlZCBieSBtZW1zZXQgdG8KKysgICBvcHRpbWl6ZSBzZXR0aW5nIHRvIHplcm8uICBXZSBoYXZlIHRvIGRldGVjdCA4eHggcHJvY2Vzc29ycywgd2hpY2gKKysgICBoYXZlIGJ1Z2d5IGRjYnogaW1wbGVtZW50YXRpb25zIHRoYXQgY2Fubm90IHJlcG9ydCBwYWdlIGZhdWx0cworKyAgIGNvcnJlY3RseS4gIFRoYXQgcmVxdWlyZXMgcmVhZGluZyBTUFIsIHdoaWNoIGlzIGEgcHJpdmlsZWdlZAorKyAgIG9wZXJhdGlvbi4gIEZvcnR1bmF0ZWx5IDIuMi4xOCBhbmQgbGF0ZXIgZW11bGF0ZXMgUG93ZXJQQyBtZnNwcgorKyAgIHJlYWRzIGZyb20gdGhlIFBWUiByZWdpc3Rlci4gICAqLworICNkZWZpbmUgRExfUExBVEZPUk1fQVVYVgkJCQkJCSAgICAgIFwKKyAgICAgICBjYXNlIEFUX0RDQUNIRUJTSVpFOgkJCQkJCSAgICAgIFwKKysJaWYgKF9fTElOVVhfS0VSTkVMX1ZFUlNJT04gPj0gMHgwMjAyMTgpCQkJCSAgICAgIFwKKysJICB7CQkJCQkJCQkgICAgICBcCisrCSAgICB1bnNpZ25lZCBwdnIgPSAwOwkJCQkJCSAgICAgIFwKKysJICAgIGFzbSAoIm1mc3ByICUwLCAyODciIDogIj1yIiAocHZyKSk7CQkJCSAgICAgIFwKKysJICAgIGlmICgocHZyICYgMHhmZmZmMDAwMCkgPT0gMHgwMDUwMDAwMCkJCQkgICAgICBcCisrCSAgICAgIGJyZWFrOwkJCQkJCQkgICAgICBcCisrCSAgfQkJCQkJCQkJICAgICAgXAorIAlfX2NhY2hlX2xpbmVfc2l6ZSA9IGF2LT5hX3VuLmFfdmFsOwkJCQkgICAgICBcCisgCWJyZWFrOworIAorZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvbGliYy1zdGFydC5jIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9saWJjLXN0YXJ0LmMKK2luZGV4IGE5MzY0YzcuLmEzZWQxZDQgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2xpYmMtc3RhcnQuYworKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9saWJjLXN0YXJ0LmMKK0BAIC02OCwxMSArNjgsMjQgQEAgX19saWJjX3N0YXJ0X21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndiwKKyAgICAgICBydGxkX2ZpbmkgPSBOVUxMOworICAgICB9CisgCistICAvKiBJbml0aWFsaXplIHRoZSBfX2NhY2hlX2xpbmVfc2l6ZSB2YXJpYWJsZSBmcm9tIHRoZSBhdXggdmVjdG9yLiAgKi8KKysgIC8qIEluaXRpYWxpemUgdGhlIF9fY2FjaGVfbGluZV9zaXplIHZhcmlhYmxlIGZyb20gdGhlIGF1eCB2ZWN0b3IuCisrICAgICBUaGlzIGlzIHVzZWQgYnkgbWVtc2V0IHRvIG9wdGltaXplIHNldHRpbmcgdG8gemVyby4gIFdlIGhhdmUgdG8KKysgICAgIGRldGVjdCA4eHggcHJvY2Vzc29ycywgd2hpY2ggaGF2ZSBidWdneSBkY2J6IGltcGxlbWVudGF0aW9ucyB0aGF0CisrICAgICBjYW5ub3QgcmVwb3J0IHBhZ2UgZmF1bHRzIGNvcnJlY3RseS4gIFRoYXQgcmVxdWlyZXMgcmVhZGluZyBTUFIsCisrICAgICB3aGljaCBpcyBhIHByaXZpbGVnZWQgb3BlcmF0aW9uLiAgRm9ydHVuYXRlbHkgMi4yLjE4IGFuZCBsYXRlcgorKyAgICAgZW11bGF0ZXMgUG93ZXJQQyBtZnNwciByZWFkcyBmcm9tIHRoZSBQVlIgcmVnaXN0ZXIuICAqLworICAgZm9yIChFbGZXIChhdXh2X3QpICogYXYgPSBhdXh2ZWM7IGF2LT5hX3R5cGUgIT0gQVRfTlVMTDsgKythdikKKyAgICAgc3dpdGNoIChhdi0+YV90eXBlKQorICAgICAgIHsKKyAgICAgICBjYXNlIEFUX0RDQUNIRUJTSVpFOgorKwlpZiAoX19MSU5VWF9LRVJORUxfVkVSU0lPTiA+PSAweDAyMDIxOCkKKysJICB7CisrCSAgICB1bnNpZ25lZCBwdnIgPSAwOworKworKwkgICAgYXNtICgibWZzcHIgJTAsIDI4NyIgOiAiPXIiIChwdnIpIDopOworKwkgICAgaWYgKChwdnIgJiAweGZmZmYwMDAwKSA9PSAweDAwNTAwMDAwKQorKwkgICAgICBicmVhazsKKysJICB9CisgCV9fY2FjaGVfbGluZV9zaXplID0gYXYtPmFfdW4uYV92YWw7CisgCWJyZWFrOworICAgICAgIH0KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIzLWVnbGliYy1SZXNvbHZlLV9fZnBzY3JfdmFsdWVzLW9uLVNINC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMy1lZ2xpYmMtUmVzb2x2ZS1fX2Zwc2NyX3ZhbHVlcy1vbi1TSDQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYzZDc1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMy1lZ2xpYmMtUmVzb2x2ZS1fX2Zwc2NyX3ZhbHVlcy1vbi1TSDQucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorRnJvbSA3MThlN2U1ZGIxYzhiMDczYWRiOWE3OWVjNmYxNjcyMzhjMmQ4YmRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6NTU6NTMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyMy8yN10gZWdsaWJjOiBSZXNvbHZlIF9fZnBzY3JfdmFsdWVzIG9uIFNINAorCisyMDEwLTA5LTI5ICBOb2J1aGlybyBJd2FtYXRzdSAgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorICAgICAgICAgICAgQW5kcmV3IFN0dWJicyAgPGFtc0Bjb2Rlc291cmNlcnkuY29tPgorCisgICAgICAgIFJlc29sdmUgU0gncyBfX2Zwc2NyX3ZhbHVlcyB0byBzeW1ib2wgaW4gbGliYy5zby4KKworICAgICAgICAqIHN5c2RlcHMvc2gvc2g0L2ZwdS9mcHVfY29udHJvbC5oOiBBZGQgQysrIF9fc2V0X2Zwc2NyIHByb3RvdHlwZS4KKyAgICAgICAgKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9WZXJzaW9ucyAoR0xJQkNfMi4yKTogQWRkIF9fZnBzY3JfdmFsdWVzLgorICAgICAgICAqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5c2RlcC5TIChfX19mcHNjcl92YWx1ZXMpOiBOZXcgY29uc3RhbnQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvVmVyc2lvbnMgfCAgMSArCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzZGVwLlMgfCAxMSArKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvVmVyc2lvbnMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9WZXJzaW9ucworaW5kZXggZTA5MzhjNC4uY2ExZDdkYSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL1ZlcnNpb25zCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9WZXJzaW9ucworQEAgLTIsNiArMiw3IEBAIGxpYmMgeworICAgR0xJQkNfMi4yIHsKKyAgICAgIyBmdW5jdGlvbnMgdXNlZCBpbiBvdGhlciBsaWJyYXJpZXMKKyAgICAgX194c3RhdDY0OyBfX2Z4c3RhdDY0OyBfX2x4c3RhdDY0OworKyAgICBfX2Zwc2NyX3ZhbHVlczsKKyAKKyAgICAgIyBhKgorICAgICBhbHBoYXNvcnQ2NDsKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXNkZXAuUyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5c2RlcC5TCitpbmRleCBhMDJiN2UyLi5iOWJlMzI2IDEwMDY0NAorLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzZGVwLlMKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5c2RlcC5TCitAQCAtMzAsMyArMzAsMTQgQEAgRU5UUlkgKF9fc3lzY2FsbF9lcnJvcikKKyAKKyAjZGVmaW5lIF9fc3lzY2FsbF9lcnJvciBfX3N5c2NhbGxfZXJyb3JfMQorICNpbmNsdWRlIDxzeXNkZXBzL3VuaXgvc2gvc3lzZGVwLlM+CisrCisrICAgICAgIC5kYXRhCisrICAgICAgIC5hbGlnbiAzCisrICAgICAgIC5nbG9ibCBfX19mcHNjcl92YWx1ZXMKKysgICAgICAgLnR5cGUgX19fZnBzY3JfdmFsdWVzLCBAb2JqZWN0CisrICAgICAgIC5zaXplIF9fX2Zwc2NyX3ZhbHVlcywgOAorK19fX2Zwc2NyX3ZhbHVlczoKKysgICAgICAgLmxvbmcgMAorKyAgICAgICAubG9uZyAweDgwMDAwCisrd2Vha19hbGlhcyAoX19fZnBzY3JfdmFsdWVzLCBfX2Zwc2NyX3ZhbHVlcykKKysKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI0LWVnbGliYy1Gb3J3YXJkLXBvcnQtZWdsaWJjLW9wdGlvbnMtZ3JvdXBzLXN1cHBvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjQtZWdsaWJjLUZvcndhcmQtcG9ydC1lZ2xpYmMtb3B0aW9ucy1ncm91cHMtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTE0ZTI4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI0LWVnbGliYy1Gb3J3YXJkLXBvcnQtZWdsaWJjLW9wdGlvbnMtZ3JvdXBzLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxNjg0MiBAQAorRnJvbSAyYTVkN2JjZjBmZjc5MWM5NWVlMTM4ODc3MjQwOGExYmY0NDU0Njk0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDE6MzM6NDkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyNC8yN10gZWdsaWJjOiBGb3J3YXJkIHBvcnQgZWdsaWJjIG9wdGlvbnMgZ3JvdXBzIHN1cHBvcnQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBNYWtlY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIwICstCisgTWFrZXJ1bGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxOSArCisgYXJncC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCisgYXJncC9hcmdwLWZtdHN0cmVhbS5jICAgICAgICAgICAgICAgICAgIHwgICAyNSArLQorIGFyZ3AvYXJncC1oZWxwLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTMgKy0KKyBhcmdwL2FyZ3AtbmFtZWZyb2IuaCAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKKyBjYXRnZXRzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE3ICstCisgY3J5cHQvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMCArLQorIGNyeXB0L2NyeXB0LWVudHJ5LmMgICAgICAgICAgICAgICAgICAgICB8ICAgMTMgKworIGNyeXB0L2NyeXB0X2NvbW1vbi5jICAgICAgICAgICAgICAgICAgICB8ICAgNDIgKworIGNyeXB0L2NyeXB0X3V0aWwuYyAgICAgICAgICAgICAgICAgICAgICB8ICAgMTggLQorIGNzdS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKworIGRlYnVnL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDEgKy0KKyBkZWJ1Zy9zZWdmYXVsdC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDExICstCisgZGVidWcvdHN0LWNoazEuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArCisgZGxmY24vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArLQorIGVsZi9kbC1zdXBwb3J0LmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKworIGVsZi9ydGxkLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTcgKy0KKyBleHRyYS1saWIubWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICstCisgZ3JwL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArCisgaGVzaW9kL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArLQorIGljb252L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDcgKworIGljb252L2djb252X2RiLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKworIGljb252L2djb252X3RyYW5zLmMgICAgICAgICAgICAgICAgICAgICB8ICAgIDcgKworIGljb252L2ljb252X3Byb2cuYyAgICAgICAgICAgICAgICAgICAgICB8ICAgIDggKworIGljb252ZGF0YS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICB8ICAgMjcgKy0KKyBpbmNsdWRlL25ldGRiLmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICsKKyBpbmV0L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIyICstCisgaW50bC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArLQorIGludGwvZGNpZ2V0dGV4dC5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzkgKy0KKyBpby9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE4ICstCisgbGliaWRuL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArLQorIGxpYmlkbi90b3V0ZjguYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKy0KKyBsaWJpby9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDY2ICstCisgbGliaW8vX19mcHVyZ2UuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQorIGxpYmlvL2ZpbGVvcHMuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTAgKy0KKyBsaWJpby9pb2Z3aWRlLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDI2ICsKKyBsaWJpby9pb3NlZWtvZmYuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCisgbGliaW8vaW9zZWVrcG9zLmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQorIGxpYmlvL2lvc2V0YnVmZmVyLmMgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKworIGxpYmlvL2xpYmlvUC5oICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTggKy0KKyBsaWJpby93ZHVtbXlmaWxlb3BzLmMgICAgICAgICAgICAgICAgICAgfCAgMTYxICsKKyBsb2NhbGUvQy1jdHlwZS5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIwICsKKyBsb2NhbGUvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQxICstCisgbG9jYWxlL2NhdG5hbWVzLmMgICAgICAgICAgICAgICAgICAgICAgIHwgICA0OCArCisgbG9jYWxlL2R1bW15LXNldGxvY2FsZS5jICAgICAgICAgICAgICAgIHwgICAzMyArCisgbG9jYWxlL2xvY2FsZWluZm8uaCAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQorIGxvY2FsZS9wcm9ncmFtcy9jaGFybWFwLWRpci5jICAgICAgICAgICB8ICAgIDYgKworIGxvY2FsZS9wcm9ncmFtcy9sZC1jb2xsYXRlLmMgICAgICAgICAgICB8ICAgMTcgKy0KKyBsb2NhbGUvcHJvZ3JhbXMvbGQtY3R5cGUuYyAgICAgICAgICAgICAgfCAgIDI3ICstCisgbG9jYWxlL3Byb2dyYW1zL2xkLW1lc3NhZ2VzLmMgICAgICAgICAgIHwgICAgNSArCisgbG9jYWxlL3Byb2dyYW1zL2xkLXRpbWUuYyAgICAgICAgICAgICAgIHwgICAzMSArLQorIGxvY2FsZS9wcm9ncmFtcy9saW5lcmVhZGVyLmMgICAgICAgICAgICB8ICAgIDIgKy0KKyBsb2NhbGUvcHJvZ3JhbXMvbG9jYWxlZGVmLmMgICAgICAgICAgICAgfCAgICA4ICsKKyBsb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5jICAgICAgICAgICAgICAgfCAgICA1ICstCisgbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuaCAgICAgICAgICAgICAgIHwgICA1OSArLQorIGxvY2FsZS9zZXRsb2NhbGUuYyAgICAgICAgICAgICAgICAgICAgICB8ICAgMzAgLQorIGxvY2FsZS94bG9jYWxlLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzcgKworIGxvY2FsZWRhdGEvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICB8ICAgMzUgKy0KKyBsb2dpbi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE3ICstCisgbWFsbG9jL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMCArLQorIG1hbGxvYy9tZW11c2FnZS5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDcgKy0KKyBtYWxsb2MvbWVtdXNhZ2Uuc2ggICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCisgbWF0aC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArLQorIG1pc2MvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjUgKy0KKyBtaXNjL2Vyci5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDExICsKKyBtaXNjL2Vycm9yLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKKyBtaXNjL3RzdC1lZmdjdnQuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCisgbmlzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMSArLQorIG5wdGwvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjggKy0KKyBucHRsL3B0aHJlYWRfY3JlYXRlLmMgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKKyBuc2NkL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMzICstCisgbnNjZC9uaXNfaGFzaC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArCisgbnNzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA2NyArLQorIG5zcy9maXhlZC1uc3N3aXRjaC5jb25mICAgICAgICAgICAgICAgICB8ICAgMjIgKworIG5zcy9maXhlZC1uc3N3aXRjaC5mdW5jdGlvbnMgICAgICAgICAgICB8ICAxMjEgKworIG5zcy9nZW4tZml4ZWQtbnNzd2l0Y2guYyAgICAgICAgICAgICAgICB8ICA4MDMgKysrCisgbnNzL2dldGVudC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0NiArLQorIG5zcy9nZXRuc3NlbnRfci5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDkgKy0KKyBuc3MvbnNzd2l0Y2guYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTA5ICstCisgbnNzL25zc3dpdGNoLmggICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxOCArLQorIHBvc2l4L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgOTQgKy0KKyBwb3NpeC9idWctcmVnZXgxLmMgICAgICAgICAgICAgICAgICAgICAgfCAgICAzICsKKyBwb3NpeC9idWctcmVnZXg2LmMgICAgICAgICAgICAgICAgICAgICAgfCAgICA4ICstCisgcG9zaXgvZm5tYXRjaC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArLQorIHBvc2l4L2ZubWF0Y2hfbG9vcC5jICAgICAgICAgICAgICAgICAgICB8ICAgMjMgKy0KKyBwb3NpeC9nbG9iLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE1ICstCisgcG9zaXgvcmVnY29tcC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA5OCArLQorIHBvc2l4L3JlZ2V4LmggICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKworIHBvc2l4L3JlZ2V4X2ludGVybmFsLmMgICAgICAgICAgICAgICAgICB8ICAgNDUgKy0KKyBwb3NpeC9yZWdleF9pbnRlcm5hbC5oICAgICAgICAgICAgICAgICAgfCAgIDIzICstCisgcG9zaXgvcmVnZXhlYy1jb21wYXQuYyAgICAgICAgICAgICAgICAgIHwgICAzOSArCisgcG9zaXgvcmVnZXhlYy5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA3MSArLQorIHBvc2l4L3hyZWdleC5jICAgICAgICAgICAgICAgICAgICAgICAgICB8IDgyMTUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIHB3ZC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKworIHJlc29sdi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjEgKy0KKyBzdGRpby1jb21tb24vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgfCAgIDM1ICstCisgc3RkaW8tY29tbW9uL19pMThuX251bWJlci5oICAgICAgICAgICAgIHwgICAxMyArCisgc3RkaW8tY29tbW9uL2Z4cHJpbnRmLmMgICAgICAgICAgICAgICAgIHwgICAgNSArCisgc3RkaW8tY29tbW9uL3ByaW50Zl9mcC5jICAgICAgICAgICAgICAgIHwgICAyMiArCisgc3RkaW8tY29tbW9uL3ByaW50Zl9mcGhleC5jICAgICAgICAgICAgIHwgICAxMyArCisgc3RkaW8tY29tbW9uL3ByaW50Zl9zaXplLmMgICAgICAgICAgICAgIHwgICAgOCArCisgc3RkaW8tY29tbW9uL3NjYW5mMTQuYyAgICAgICAgICAgICAgICAgIHwgICAgMyArCisgc3RkaW8tY29tbW9uL3RzdC1wb3Blbi5jICAgICAgICAgICAgICAgIHwgICAgMyArCisgc3RkaW8tY29tbW9uL3RzdC1zcHJpbnRmLmMgICAgICAgICAgICAgIHwgICAgNCArLQorIHN0ZGlvLWNvbW1vbi90c3RkaW9taXNjLmMgICAgICAgICAgICAgICB8ICAgIDUgKworIHN0ZGlvLWNvbW1vbi92ZnByaW50Zi5jICAgICAgICAgICAgICAgICB8ICAgMzEgKy0KKyBzdGRpby1jb21tb24vdmZzY2FuZi5jICAgICAgICAgICAgICAgICAgfCAgIDUzICstCisgc3RkbGliL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzNCArLQorIHN0ZGxpYi9zdHJ0b2RfbC5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTMgKworIHN0ZGxpYi90c3Qtc3RydG9kLmMgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKworIHN0cmVhbXMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKy0KKyBzdHJpbmcvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE0ICstCisgc3RyaW5nL3N0cmNvbGxfbC5jICAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArCisgc3RyaW5nL3N0cmVycm9yX2wuYyAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArCisgc3RyaW5nL3N0cnhmcm1fbC5jICAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArCisgc3RyaW5nL3Rlc3Qtc3RyY21wLmMgICAgICAgICAgICAgICAgICAgIHwgICAyOCAtCisgc3RyaW5nL3RzdC1zdHJ4ZnJtLmMgICAgICAgICAgICAgICAgICAgIHwgICAgMyArCisgc3RyaW5nL3RzdC1zdHJ4ZnJtMi5jICAgICAgICAgICAgICAgICAgIHwgICAgMyArCisgc3VucnBjL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0NCArLQorIHN5c2RlcHMvYXJtL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKy0KKyBzeXNkZXBzL2dlbmVyaWMvbGRzb2RlZnMuaCAgICAgICAgICAgICAgfCAgICA4ICsKKyBzeXNkZXBzL2dudS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgfCAgICAzICstCisgc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L01ha2VmaWxlICAgICAgIHwgICAyNyArLQorIHN5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9ubGRibC1jb21wYXQuYyB8ICAgNDAgKy0KKyBzeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvbmxkYmwtY29tcGF0LmggfCAgIDI0ICstCisgc3lzZGVwcy9ucHRsL01ha2VmaWxlICAgICAgICAgICAgICAgICAgIHwgICAgMyArCisgc3lzZGVwcy9ucHRsL2JpdHMvbGliYy1sb2NrLmggICAgICAgICAgIHwgICA0NSArCisgc3lzZGVwcy9ucHRsL2JpdHMvbGliYy1sb2NrUC5oICAgICAgICAgIHwgICA1MCArLQorIHN5c2RlcHMvbnB0bC9zbWFsbC1tYWNyb3MtZm5zLmMgICAgICAgICB8ICAgNzIgKworIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2dldGhvc3RpZC5jICAgICB8ICAgIDYgKworIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2xpYmNfZmF0YWwuYyAgICB8ICAgIDMgKworIHRpbWUvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTggKy0KKyB0aW1lL3N0cmZ0aW1lX2wuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEyICstCisgdGltZS9zdHJwdGltZV9sLmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNCArLQorIHRpbWV6b25lL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KKyB3Y3NtYnMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDI3ICstCisgd2NzbWJzL3djc21ic2xvYWQuYyAgICAgICAgICAgICAgICAgICAgIHwgICAxMyArCisgd2N0eXBlL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNCArLQorIDEzOSBmaWxlcyBjaGFuZ2VkLCAxMTM2MyBpbnNlcnRpb25zKCspLCA1ODMgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGNyeXB0L2NyeXB0X2NvbW1vbi5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmlvL3dkdW1teWZpbGVvcHMuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsb2NhbGUvY2F0bmFtZXMuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsb2NhbGUvZHVtbXktc2V0bG9jYWxlLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbnNjZC9uaXNfaGFzaC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG5zcy9maXhlZC1uc3N3aXRjaC5jb25mCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG5zcy9maXhlZC1uc3N3aXRjaC5mdW5jdGlvbnMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbnNzL2dlbi1maXhlZC1uc3N3aXRjaC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHBvc2l4L3JlZ2V4ZWMtY29tcGF0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgcG9zaXgveHJlZ2V4LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9ucHRsL3NtYWxsLW1hY3Jvcy1mbnMuYworCitkaWZmIC0tZ2l0IGEvTWFrZWNvbmZpZyBiL01ha2Vjb25maWcKK2luZGV4IGYxMzZiODguLjUyZGFlOGYgMTAwNjQ0CistLS0gYS9NYWtlY29uZmlnCisrKysgYi9NYWtlY29uZmlnCitAQCAtNjA5LDcgKzYwOSw3IEBAIGVsZi1vYmpwZnggPSAkKGNvbW1vbi1vYmpwZngpZWxmLworICMgYW5kIHJ1biBvbiB0aGUgYnVpbGQgc3lzdGVtLCBjYXVzZXMgdGhhdCBwcm9ncmFtIHdpdGggdGhvc2UKKyAjIGFyZ3VtZW50cyB0byBiZSBydW4gb24gdGhlIGhvc3QgZm9yIHdoaWNoIHRoZSBsaWJyYXJ5IGlzIGJ1aWx0LgorIGlmbmRlZiB0ZXN0LXdyYXBwZXIKKy10ZXN0LXdyYXBwZXIgPQorK3Rlc3Qtd3JhcHBlciA9ICQoY3Jvc3MtdGVzdC13cmFwcGVyKQorIGVuZGlmCisgIyBMaWtld2lzZSwgYnV0IHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIGlzIHByZWNlZGVkIGJ5CisgIyA8dmFyaWFibGU+PTx2YWx1ZT4gYXNzaWdubWVudHMgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcy4KK0BAIC0xMDg5LDYgKzEwODksMjQgQEAgbGlibSA9ICQoY29tbW9uLW9ianBmeCltYXRoL2xpYm0uYQorIGxpYm12ZWMgPSAkKGNvbW1vbi1vYmpwZngpbWF0aHZlYy9saWJtdmVjLmEKKyBlbmRpZgorIAorKyMgR2VuZXJhdGUgYSBoZWFkZXIgZmlsZSB0aGF0ICNkZWZpbmVzIHByZXByb2Nlc3NvciBzeW1ib2xzIGluZGljYXRpbmcKKysjIHdoaWNoIG9wdGlvbiBncm91cHMgYXJlIGVuYWJsZWQuICBOb3RlIHRoYXQgdGhlIG9wdGlvbi1ncm91cHMuY29uZmlnIGZpbGUKKysjIG1heSBub3QgZXhpc3QgYXQgYWxsLgorK2JlZm9yZS1jb21waWxlICs9ICQoY29tbW9uLW9ianBmeClnbnUvb3B0aW9uLWdyb3Vwcy5oCisrY29tbW9uLWdlbmVyYXRlZCArPSBnbnUvb3B0aW9uLWdyb3Vwcy5oIGdudS9vcHRpb24tZ3JvdXBzLnN0bXAKKytoZWFkZXJzICs9IGdudS9vcHRpb24tZ3JvdXBzLmgKKyskKGNvbW1vbi1vYmpwZngpZ251L29wdGlvbi1ncm91cHMuaDogJChjb21tb24tb2JqcGZ4KWdudS9vcHRpb24tZ3JvdXBzLnN0bXA7IEA6CisrJChjb21tb24tb2JqcGZ4KWdudS9vcHRpb24tZ3JvdXBzLnN0bXA6CQkJCQlcCisrCQkkKC4uKXNjcmlwdHMvb3B0aW9uLWdyb3Vwcy5hd2sJCQkJXAorKwkJJCguLilvcHRpb24tZ3JvdXBzLmRlZmF1bHRzCQkJCVwKKysJCSQod2lsZGNhcmQgJChjb21tb24tb2JqcGZ4KW9wdGlvbi1ncm91cHMuY29uZmlnKQorKwkkKG1ha2UtdGFyZ2V0LWRpcmVjdG9yeSkKKysJQHJtIC1mICR7QDpzdG1wPVR9ICRACisrCUxDX0FMTD1DICQoQVdLKSAtZiAkXiA+ICR7QDpzdG1wPVR9CisrCSQobW92ZS1pZi1jaGFuZ2UpICR7QDpzdG1wPVR9ICR7QDpzdG1wPWh9CisrCXRvdWNoICRACisrCisrCisgIyBUaGVzZSBhcmUgdGhlIHN1YmRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgdGhlIGxpYnJhcnkgc291cmNlLiAgVGhlIG9yZGVyCisgIyBpcyBtb3JlIG9yIGxlc3MgYXJiaXRyYXJ5LiAgVGhlIHNvcnRpbmcgc3RlcCB3aWxsIHRha2UgY2FyZSBvZiB0aGUKKyAjIGRlcGVuZGVuY2llcy4KK2RpZmYgLS1naXQgYS9NYWtlcnVsZXMgYi9NYWtlcnVsZXMKK2luZGV4IGY5Y2EzZjUuLjFkZDQxYWEgMTAwNjQ0CistLS0gYS9NYWtlcnVsZXMKKysrKyBiL01ha2VydWxlcworQEAgLTQ1Niw2ICs0NTYsMjUgQEAgZGVmaW5lIHNlZC1yZW1vdmUtb2JqcGZ4CisgZW5kZWYKKyBlbmRpZgorIAwKKysjIEluY2x1ZGUgdGFyZ2V0cyBpbiB0aGUgc2VsZWN0ZWQgb3B0aW9uIGdyb3Vwcy4KKythdXggICAgICAgICAgICAgICAgICArPSAkKGF1eC15KQorK2V4dHJhLWxpYnMgICAgICAgICAgICs9ICQoZXh0cmEtbGlicy15KQorK2V4dHJhLWxpYnMtb3RoZXJzICAgICs9ICQoZXh0cmEtbGlicy1vdGhlcnMteSkKKytleHRyYS1vYmpzICAgICAgICAgICArPSAkKGV4dHJhLW9ianMteSkKKytpbnN0YWxsLWJpbiAgICAgICAgICArPSAkKGluc3RhbGwtYmluLXkpCisraW5zdGFsbC1vdGhlcnMgICAgICAgKz0gJChpbnN0YWxsLW90aGVycy15KQorK2luc3RhbGwtc2JpbiAgICAgICAgICs9ICQoaW5zdGFsbC1zYmluLXkpCisrbW9kdWxlcyAgICAgICAgICAgICAgKz0gJChtb2R1bGVzLXkpCisrb3RoZXJzICAgICAgICAgICAgICAgKz0gJChvdGhlcnMteSkKKytvdGhlcnMtcGllICAgICAgICAgICArPSAkKG90aGVycy1waWUteSkKKytyb3V0aW5lcyAgICAgICAgICAgICArPSAkKHJvdXRpbmVzLXkpCisrc3RhdGljLW9ubHktcm91dGluZXMgKz0gJChzdGF0aWMtb25seS1yb3V0aW5lcy15KQorK3N5c2RlcF9yb3V0aW5lcyAgICAgICs9ICQoc3lzZGVwX3JvdXRpbmVzLXkpCisrdGVzdC1zcmNzICAgICAgICAgICAgKz0gJCh0ZXN0LXNyY3MteSkKKyt0ZXN0cyAgICAgICAgICAgICAgICArPSAkKHRlc3RzLXkpCisreHRlc3RzICAgICAgICAgICAgICAgKz0gJCh4dGVzdHMteSkKKysKKysMCisgIyBNb2RpZnkgdGhlIGxpc3Qgb2Ygcm91dGluZXMgd2UgYnVpbGQgZm9yIGRpZmZlcmVudCB0YXJnZXRzCisgCisgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKK2RpZmYgLS1naXQgYS9hcmdwL01ha2VmaWxlIGIvYXJncC9NYWtlZmlsZQoraW5kZXggMWE4NzYyOS4uZjdjMWU0MCAxMDA2NDQKKy0tLSBhL2FyZ3AvTWFrZWZpbGUKKysrKyBiL2FyZ3AvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJTWFrZWZpbGUgZm9yIGFyZ3AuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gYXJncAorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworZGlmZiAtLWdpdCBhL2FyZ3AvYXJncC1mbXRzdHJlYW0uYyBiL2FyZ3AvYXJncC1mbXRzdHJlYW0uYworaW5kZXggMmI4NDVlMC4uYzM0NGU3YiAxMDA2NDQKKy0tLSBhL2FyZ3AvYXJncC1mbXRzdHJlYW0uYworKysrIGIvYXJncC9hcmdwLWZtdHN0cmVhbS5jCitAQCAtNDIsNiArNDIsNyBAQAorICNpZmRlZiBfTElCQworICMgaW5jbHVkZSA8d2NoYXIuaD4KKyAjIGluY2x1ZGUgPGxpYmlvL2xpYmlvUC5oPgorKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjIGRlZmluZSBfX3ZzbnByaW50ZihzLCBsLCBmLCBhKSBfSU9fdnNucHJpbnRmIChzLCBsLCBmLCBhKQorICNlbmRpZgorIAorQEAgLTEwMCw3ICsxMDEsMTEgQEAgX19hcmdwX2ZtdHN0cmVhbV9mcmVlIChhcmdwX2ZtdHN0cmVhbV90IGZzKQorICAgX19hcmdwX2ZtdHN0cmVhbV91cGRhdGUgKGZzKTsKKyAgIGlmIChmcy0+cCA+IGZzLT5idWYpCisgICAgIHsKKysjaWZkZWYgX0xJQkMKKyAgICAgICBfX2Z4cHJpbnRmIChmcy0+c3RyZWFtLCAiJS4qcyIsIChpbnQpIChmcy0+cCAtIGZzLT5idWYpLCBmcy0+YnVmKTsKKysjZWxzZQorKyAgICAgIGZ3cml0ZV91bmxvY2tlZCAoZnMtPmJ1ZiwgMSwgZnMtPnAgLSBmcy0+YnVmLCBmcy0+c3RyZWFtKTsKKysjZW5kaWYKKyAgICAgfQorICAgZnJlZSAoZnMtPmJ1Zik7CisgICBmcmVlIChmcyk7CitAQCAtMTQ1LDkgKzE1MCwxNyBAQCBfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZSAoYXJncF9mbXRzdHJlYW1fdCBmcykKKyAJICAgICAgc2l6ZV90IGk7CisgCSAgICAgIGZvciAoaSA9IDA7IGkgPCBwYWQ7IGkrKykKKyAJCXsKKysjaWZkZWYgX0xJQkMKKyAJCSAgaWYgKF9JT19md2lkZSAoZnMtPnN0cmVhbSwgMCkgPiAwKQorLQkJICAgIHB1dHdjX3VubG9ja2VkIChMJyAnLCBmcy0+c3RyZWFtKTsKKysgICAgICAgICAgICAgICAgICAgIHsKKysjaWYgISBfTElCQyB8fCBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisrICAgICAgICAgICAgICAgICAgICAgIHB1dHdjX3VubG9ja2VkIChMJyAnLCBmcy0+c3RyZWFtKTsKKysjZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICBhYm9ydCAoKTsKKysjZW5kaWYKKysgICAgICAgICAgICAgICAgICAgIH0KKyAJCSAgZWxzZQorKyNlbmRpZgorIAkJICAgIHB1dGNfdW5sb2NrZWQgKCcgJywgZnMtPnN0cmVhbSk7CisgCQl9CisgCSAgICB9CitAQCAtMzA4LDkgKzMyMSwxNyBAQCBfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZSAoYXJncF9mbXRzdHJlYW1fdCBmcykKKyAJICAgICAgKm5sKysgPSAnICc7CisgCSAgZWxzZQorIAkgICAgZm9yIChpID0gMDsgaSA8IGZzLT53bWFyZ2luOyArK2kpCisrI2lmZGVmIF9MSUJDCisgCSAgICAgIGlmIChfSU9fZndpZGUgKGZzLT5zdHJlYW0sIDApID4gMCkKKy0JCXB1dHdjX3VubG9ja2VkIChMJyAnLCBmcy0+c3RyZWFtKTsKKysgICAgICAgICAgICAgICAgeworKyNpZmRlZiBPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworKyAgICAgICAgICAgICAgICAgIHB1dHdjX3VubG9ja2VkIChMJyAnLCBmcy0+c3RyZWFtKTsKKysjZWxzZQorKyAgICAgICAgICAgICAgICAgIGFib3J0ICgpOworKyNlbmRpZgorKyAgICAgICAgICAgICAgICB9CisgCSAgICAgIGVsc2UKKysjZW5kaWYKKyAJCXB1dGNfdW5sb2NrZWQgKCcgJywgZnMtPnN0cmVhbSk7CisgCisgCSAgLyogQ29weSB0aGUgdGFpbCBvZiB0aGUgb3JpZ2luYWwgYnVmZmVyIGludG8gdGhlIGN1cnJlbnQgYnVmZmVyCitkaWZmIC0tZ2l0IGEvYXJncC9hcmdwLWhlbHAuYyBiL2FyZ3AvYXJncC1oZWxwLmMKK2luZGV4IGIwNTVlNDUuLjZiM2M0YzEgMTAwNjQ0CistLS0gYS9hcmdwL2FyZ3AtaGVscC5jCisrKysgYi9hcmdwL2FyZ3AtaGVscC5jCitAQCAtNTEsNiArNTEsNyBAQCBjaGFyICphbGxvY2EgKCk7CisgI2lmZGVmIF9MSUJDCisgIyBpbmNsdWRlIDwuLi9saWJpby9saWJpb1AuaD4KKyAjIGluY2x1ZGUgPHdjaGFyLmg+CisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICNlbmRpZgorIAorICNpZm5kZWYgXworQEAgLTE3MDIsNyArMTcwMyw3IEBAIGNoYXIgKl9fYXJncF9iYXNlbmFtZSAoY2hhciAqbmFtZSkKKyB9CisgCisgY2hhciAqCistX19hcmdwX3Nob3J0X3Byb2dyYW1fbmFtZSAodm9pZCkKKysoX19hcmdwX3Nob3J0X3Byb2dyYW1fbmFtZSkgKHZvaWQpCisgeworICMgaWYgSEFWRV9ERUNMX1BST0dSQU1fSU5WT0NBVElPTl9TSE9SVF9OQU1FCisgICByZXR1cm4gcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWU7CitAQCAtMTg3Myw5ICsxODc0LDE3IEBAIF9fYXJncF9mYWlsdXJlIChjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUsIGludCBzdGF0dXMsIGludCBlcnJudW0sCisgI2VuZGlmCisgCSAgICB9CisgCisrI2lmZGVmIF9MSUJDCisgCSAgaWYgKF9JT19md2lkZSAoc3RyZWFtLCAwKSA+IDApCistCSAgICBwdXR3Y191bmxvY2tlZCAoTCdcbicsIHN0cmVhbSk7CisrICAgICAgICAgICAgeworKyNpZiAhIF9MSUJDIHx8IF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKysgICAgICAgICAgICAgIHB1dHdjX3VubG9ja2VkIChMJ1xuJywgc3RyZWFtKTsKKysjZWxzZQorKyAgICAgICAgICAgICAgYWJvcnQgKCk7CisrI2VuZGlmCisrICAgICAgICAgICAgfQorIAkgIGVsc2UKKysjZW5kaWYKKyAJICAgIHB1dGNfdW5sb2NrZWQgKCdcbicsIHN0cmVhbSk7CisgCisgI2lmIF9MSUJDIHx8IChIQVZFX0ZMT0NLRklMRSAmJiBIQVZFX0ZVTkxPQ0tGSUxFKQorZGlmZiAtLWdpdCBhL2FyZ3AvYXJncC1uYW1lZnJvYi5oIGIvYXJncC9hcmdwLW5hbWVmcm9iLmgKK2luZGV4IGY2N2M1OGYuLmUyMDAyZGMgMTAwNjQ0CistLS0gYS9hcmdwL2FyZ3AtbmFtZWZyb2IuaAorKysrIGIvYXJncC9hcmdwLW5hbWVmcm9iLmgKK0BAIC03NiwxMCArNzYsMTIgQEAKKyAjdW5kZWYgX19hcmdwX2ZtdHN0cmVhbV93bWFyZ2luCisgI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3dtYXJnaW4gYXJncF9mbXRzdHJlYW1fd21hcmdpbgorIAorKyNpZiAwCisgI2luY2x1ZGUgIm1lbXBjcHkuaCIKKyAjaW5jbHVkZSAic3RyY2FzZS5oIgorICNpbmNsdWRlICJzdHJjaHJudWwuaCIKKyAjaW5jbHVkZSAic3RybmR1cC5oIgorKyNlbmRpZgorIAorIC8qIG5vcm1hbCBsaWJjIGZ1bmN0aW9ucyB3ZSBjYWxsICovCisgI3VuZGVmIF9fZmxvY2tmaWxlCitkaWZmIC0tZ2l0IGEvY2F0Z2V0cy9NYWtlZmlsZSBiL2NhdGdldHMvTWFrZWZpbGUKK2luZGV4IDQ2MjRhODguLjA1NzE0ZmQgMTAwNjQ0CistLS0gYS9jYXRnZXRzL01ha2VmaWxlCisrKysgYi9jYXRnZXRzL01ha2VmaWxlCitAQCAtMjIsMjAgKzIyLDIzIEBAIHN1YmRpcgk6PSBjYXRnZXRzCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIGhlYWRlcnMJCT0gbmxfdHlwZXMuaAorLXJvdXRpbmVzCT0gY2F0Z2V0cyBvcGVuX2NhdGFsb2cKKy1vdGhlcnMJCT0gZ2VuY2F0CistaW5zdGFsbC1iaW4JPSBnZW5jYXQKKy1leHRyYS1vYmpzCT0gJChnZW5jYXQtbW9kdWxlczo9Lm8pCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0NBVEdFVFMpICAgIDo9IGNhdGdldHMgb3Blbl9jYXRhbG9nCisrb3RoZXJzLSQoT1BUSU9OX0VHTElCQ19DQVRHRVRTKSAgICAgIDo9IGdlbmNhdAorK2luc3RhbGwtYmluLSQoT1BUSU9OX0VHTElCQ19DQVRHRVRTKSA6PSBnZW5jYXQKKytleHRyYS1vYmpzLSQoT1BUSU9OX0VHTElCQ19DQVRHRVRTKSAgOj0gJChnZW5jYXQtbW9kdWxlczo9Lm8pCisgCistdGVzdHMgPSB0c3QtY2F0Z2V0cworLXRlc3Qtc3JjcyA9IHRlc3QtZ2VuY2F0CisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0NBVEdFVFMpICAgICAgIDo9IHRzdC1jYXRnZXRzCisrdGVzdC1zcmNzLSQoT1BUSU9OX0VHTElCQ19DQVRHRVRTKSAgIDo9IHRlc3QtZ2VuY2F0CisgCisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfQ0FUR0VUUykpCisgaWZlcSAoJChydW4tYnVpbHQtdGVzdHMpLHllcykKKyB0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KWRlL2xpYmMuY2F0ICQob2JqcGZ4KXRlc3QxLmNhdCAkKG9ianBmeCl0ZXN0Mi5jYXQgXAorIAkJICQob2JqcGZ4KXNhbXBsZS5TSklTLmNhdCAkKG9ianBmeCl0ZXN0LWdlbmNhdC5vdXQKKyBlbmRpZgorLQorK2VuZGlmCisgZ2VuY2F0LW1vZHVsZXMJPSB4bWFsbG9jCisgCisgIyBUbyBmaW5kIHhtYWxsb2MuYworZGlmZiAtLWdpdCBhL2NyeXB0L01ha2VmaWxlIGIvY3J5cHQvTWFrZWZpbGUKK2luZGV4IDM0YzRkZDcuLjdjMThjODggMTAwNjQ0CistLS0gYS9jcnlwdC9NYWtlZmlsZQorKysrIGIvY3J5cHQvTWFrZWZpbGUKK0BAIC0xOCwyMSArMTgsMjUgQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIGNyeXB0KCkgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBjcnlwdAorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorIGhlYWRlcnMgOj0gY3J5cHQuaAorIAorLWV4dHJhLWxpYnMgOj0gbGliY3J5cHQKKy1leHRyYS1saWJzLW90aGVycyA6PSAkKGV4dHJhLWxpYnMpCisrZXh0cmEtbGlicy0kKE9QVElPTl9FR0xJQkNfQ1JZUFQpIDo9IGxpYmNyeXB0CisrZXh0cmEtbGlicy1vdGhlcnMteSA6PSAkKGV4dHJhLWxpYnMteSkKKyAKKy1saWJjcnlwdC1yb3V0aW5lcyA6PSBjcnlwdC1lbnRyeSBtZDUtY3J5cHQgc2hhMjU2LWNyeXB0IHNoYTUxMi1jcnlwdCBjcnlwdCBcCistCQkgICAgIGNyeXB0X3V0aWwKKytsaWJjcnlwdC1yb3V0aW5lcyA6PWNyeXB0LWVudHJ5ICBtZDUtY3J5cHQgc2hhMjU2LWNyeXB0IHNoYTUxMi1jcnlwdCBjcnlwdF9jb21tb24KKytsaWJjcnlwdC1yb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfQ1JZUFRfVUZDKSA6PSBjcnlwdCBjcnlwdF91dGlsCisrbGliY3J5cHQtcm91dGluZXMgKz0gJChsaWJjcnlwdC1yb3V0aW5lcy15KQorIAorLXRlc3RzIDo9IGNlcnQgbWQ1Yy10ZXN0IHNoYTI1NmMtdGVzdCBzaGE1MTJjLXRlc3QgYmFkc2FsdHRlc3QKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfQ1JZUFQpIDo9IG1kNWMtdGVzdCBzaGEyNTZjLXRlc3Qgc2hhNTEyYy10ZXN0IGJhZHNhbHR0ZXN0CisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0NSWVBUX1VGQykgKz0gY2VydAorIAorLWlmZXEgKCQoY3J5cHQtaW4tbGliYykseWVzKQorK2lmZXEgKCQoY3J5cHQtaW4tbGliYykkKE9QVElPTl9FR0xJQkNfQ1JZUFQpLHllc3kpCisgcm91dGluZXMgKz0gJChsaWJjcnlwdC1yb3V0aW5lcykKKyBlbmRpZgorIAorQEAgLTQ0LDcgKzQ4LDcgQEAgTERMSUJTLWNyeXB0LnNvID0gLWxmcmVlYmwzCisgZWxzZQorIGxpYmNyeXB0LXJvdXRpbmVzICs9IG1kNSBzaGEyNTYgc2hhNTEyCisgCistdGVzdHMgKz0gbWQ1dGVzdCBzaGEyNTZ0ZXN0IHNoYTUxMnRlc3QKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfQ1JZUFQpICs9IG1kNXRlc3Qgc2hhMjU2dGVzdCBzaGE1MTJ0ZXN0CisgCisgIyBUaGUgdGVzdCBtZDV0ZXN0LWdpYW50IHVzZXMgdXAgdG8gNDAwIE1CIG9mIFJTUyBhbmQgcnVucyBvbiBhIGZhc3QKKyAjIG1hY2hpbmUgb3ZlciBhIG1pbnV0ZS4KK0BAIC02NCw4ICs2OCwxMCBAQCAkKG9ianBmeClzaGEyNTZ0ZXN0OiAkKHBhdHN1YnN0ICUsICQob2JqcGZ4KSUubywkKHNoYTI1Ni1yb3V0aW5lcykpCisgJChvYmpwZngpc2hhNTEydGVzdDogJChwYXRzdWJzdCAlLCAkKG9ianBmeCklLm8sJChzaGE1MTItcm91dGluZXMpKQorIGVuZGlmCisgCisraWZlcSAoJChPUFRJT05fRUdMSUJDX0NSWVBUKSx5KQorIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgJChhZGRwcmVmaXggJChvYmpwZngpLCQodGVzdHMpKTogJChvYmpwZngpbGliY3J5cHQuc28KKyBlbHNlCisgJChhZGRwcmVmaXggJChvYmpwZngpLCQodGVzdHMpKTogJChvYmpwZngpbGliY3J5cHQuYQorIGVuZGlmCisrZW5kaWYgIyBlZ2xpYmM6IE9QVElPTl9FR0xJQkNfQ1JZUFQKK2RpZmYgLS1naXQgYS9jcnlwdC9jcnlwdC1lbnRyeS5jIGIvY3J5cHQvY3J5cHQtZW50cnkuYworaW5kZXggN2U2NTViYS4uNmFlNWMyYiAxMDA2NDQKKy0tLSBhL2NyeXB0L2NyeXB0LWVudHJ5LmMKKysrKyBiL2NyeXB0L2NyeXB0LWVudHJ5LmMKK0BAIC0yNyw2ICsyNyw3IEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2VuZGlmCisgI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxmaXBzLXByaXZhdGUuaD4KKyAKK0BAIC03Niw5ICs3NywxMSBAQCBfX2NyeXB0X3IgKGtleSwgc2FsdCwgZGF0YSkKKyAgICAgIGNvbnN0IGNoYXIgKnNhbHQ7CisgICAgICBzdHJ1Y3QgY3J5cHRfZGF0YSAqIF9fcmVzdHJpY3QgZGF0YTsKKyB7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19DUllQVF9VRkMKKyAgIHVmY19sb25nIHJlc1s0XTsKKyAgIGNoYXIga3RhYls5XTsKKyAgIHVmY19sb25nIHh4ID0gMjU7IC8qIHRvIGNvcGUgd2l0aCBHQ0MgbG9uZyBsb25nIGNvbXBpbGVyIGJ1Z3MgKi8KKysjZW5kaWYgLypfX09QVElPTl9FR0xJQkNfQ1JZUFRfVUZDKi8KKyAKKyAjaWZkZWYgX0xJQkMKKyAgIC8qIFRyeSB0byBmaW5kIG91dCB3aGV0aGVyIHdlIGhhdmUgdG8gdXNlIE1ENSBlbmNyeXB0aW9uIHJlcGxhY2VtZW50LiAgKi8KK0BAIC0xMDUsNiArMTA4LDcgQEAgX19jcnlwdF9yIChrZXksIHNhbHQsIGRhdGEpCisgCQkJICAgICBzaXplb2YgKHN0cnVjdCBjcnlwdF9kYXRhKSk7CisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19DUllQVF9VRkMKKyAgIC8qCisgICAgKiBIYWNrIERFUyB0YWJsZXMgYWNjb3JkaW5nIHRvIHNhbHQKKyAgICAqLworQEAgLTE0NCw2ICsxNDgsMTAgQEAgX19jcnlwdF9yIChrZXksIHNhbHQsIGRhdGEpCisgICAgKi8KKyAgIF91ZmNfb3V0cHV0X2NvbnZlcnNpb25fciAocmVzWzBdLCByZXNbMV0sIHNhbHQsIGRhdGEpOworICAgcmV0dXJuIGRhdGEtPmNyeXB0XzNfYnVmOworKyNlbHNlIC8qIF9fT1BUSU9OX0VHTElCQ19DUllQVF9VRkMgKi8KKysgIF9fc2V0X2Vycm5vIChFTk9TWVMpOworKyAgcmV0dXJuIE5VTEw7CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19DUllQVF9VRkMgKi8KKyB9Cisgd2Vha19hbGlhcyAoX19jcnlwdF9yLCBjcnlwdF9yKQorIAorQEAgLTE2OCw3ICsxNzYsMTIgQEAgY3J5cHQgKGtleSwgc2FsdCkKKyAgICAgcmV0dXJuIF9fc2hhNTEyX2NyeXB0IChrZXksIHNhbHQpOworICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfQ1JZUFRfVUZDCisgICByZXR1cm4gX19jcnlwdF9yIChrZXksIHNhbHQsICZfdWZjX2Zvb2Jhcik7CisrI2Vsc2UgLyogX19PUFRJT05fRUdMSUJDX0NSWVBUX1VGQyAqLworKyAgX19zZXRfZXJybm8gKEVOT1NZUyk7CisrICByZXR1cm4gTlVMTDsKKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0NSWVBUX1VGQyAqLworIH0KKyAKKyAKK2RpZmYgLS1naXQgYS9jcnlwdC9jcnlwdF9jb21tb24uYyBiL2NyeXB0L2NyeXB0X2NvbW1vbi5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uY2NlNmEzMQorLS0tIC9kZXYvbnVsbAorKysrIGIvY3J5cHQvY3J5cHRfY29tbW9uLmMKK0BAIC0wLDAgKzEsNDIgQEAKKysvKgorKyAqIGNyeXB0OiBjcnlwdCgzKSBpbXBsZW1lbnRhdGlvbgorKyAqCisrICogQ29weXJpZ2h0IChDKSAxOTkxLTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICoKKysgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAqCisrICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LAorKyAqIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisrICoKKysgKiBHZW5lcmFsIFN1cHBvcnQgcm91dGluZXMKKysgKgorKyAqLworKworKyNpbmNsdWRlICJjcnlwdC1wcml2YXRlLmgiCisrCisrLyogVGFibGUgd2l0aCBjaGFyYWN0ZXJzIGZvciBiYXNlNjQgdHJhbnNmb3JtYXRpb24uICAqLworK3N0YXRpYyBjb25zdCBjaGFyIGI2NHRbNjRdID0KKysiLi8wMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7CisrCisrdm9pZAorK19fYjY0X2Zyb21fMjRiaXQgKGNoYXIgKipjcCwgaW50ICpidWZsZW4sCisrCQkgIHVuc2lnbmVkIGludCBiMiwgdW5zaWduZWQgaW50IGIxLCB1bnNpZ25lZCBpbnQgYjAsCisrCQkgIGludCBuKQorK3sKKysgIHVuc2lnbmVkIGludCB3ID0gKGIyIDw8IDE2KSB8IChiMSA8PCA4KSB8IGIwOworKyAgd2hpbGUgKG4tLSA+IDAgJiYgKCpidWZsZW4pID4gMCkKKysgICAgeworKyAgICAgICooKmNwKSsrID0gYjY0dFt3ICYgMHgzZl07CisrICAgICAgLS0oKmJ1Zmxlbik7CisrICAgICAgdyA+Pj0gNjsKKysgICAgfQorK30KK2RpZmYgLS1naXQgYS9jcnlwdC9jcnlwdF91dGlsLmMgYi9jcnlwdC9jcnlwdF91dGlsLmMKK2luZGV4IDE1OTc4ODUuLjkyOTc5NzQgMTAwNjQ0CistLS0gYS9jcnlwdC9jcnlwdF91dGlsLmMKKysrKyBiL2NyeXB0L2NyeXB0X3V0aWwuYworQEAgLTI0MiwxMCArMjQyLDYgQEAgc3RhdGljIHVmY19sb25nIGVwZXJtMzJ0YWJbNF1bMjU2XVsyXTsKKyAgKi8KKyBzdGF0aWMgdWZjX2xvbmcgZWZwWzE2XVs2NF1bMl07CisgCistLyogVGFibGUgd2l0aCBjaGFyYWN0ZXJzIGZvciBiYXNlNjQgdHJhbnNmb3JtYXRpb24uICAqLworLXN0YXRpYyBjb25zdCBjaGFyIGI2NHRbNjRdID0KKy0iLi8wMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7CistCisgLyoKKyAgKiBGb3IgdXNlIGJ5IHRoZSBvbGQsIG5vbi1yZWVudHJhbnQgcm91dGluZXMKKyAgKiAoY3J5cHQvZW5jcnlwdC9zZXRrZXkpCitAQCAtOTQ5LDE3ICs5NDUsMyBAQCBzZXRrZXkoX19rZXkpCisgeworICAgX19zZXRrZXlfcihfX2tleSwgJl91ZmNfZm9vYmFyKTsKKyB9CistCistdm9pZAorLV9fYjY0X2Zyb21fMjRiaXQgKGNoYXIgKipjcCwgaW50ICpidWZsZW4sCistCQkgIHVuc2lnbmVkIGludCBiMiwgdW5zaWduZWQgaW50IGIxLCB1bnNpZ25lZCBpbnQgYjAsCistCQkgIGludCBuKQorLXsKKy0gIHVuc2lnbmVkIGludCB3ID0gKGIyIDw8IDE2KSB8IChiMSA8PCA4KSB8IGIwOworLSAgd2hpbGUgKG4tLSA+IDAgJiYgKCpidWZsZW4pID4gMCkKKy0gICAgeworLSAgICAgICooKmNwKSsrID0gYjY0dFt3ICYgMHgzZl07CistICAgICAgLS0oKmJ1Zmxlbik7CistICAgICAgdyA+Pj0gNjsKKy0gICAgfQorLX0KK2RpZmYgLS1naXQgYS9jc3UvTWFrZWZpbGUgYi9jc3UvTWFrZWZpbGUKK2luZGV4IDlmMDg1NWEuLmIxYzMzNjMgMTAwNjQ0CistLS0gYS9jc3UvTWFrZWZpbGUKKysrKyBiL2NzdS9NYWtlZmlsZQorQEAgLTIyLDYgKzIyLDggQEAKKyAjIGNydG4ubywgc3BlY2lhbCAiaW5pdGlhbGl6ZXIiIGFuZCAiZmluYWxpemVyIiBmaWxlcyB1c2VkIGluIHRoZSBsaW5rCisgIyB0byBtYWtlIHRoZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yayByaWdodC4KKyAKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyIDo9IGNzdQorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworZGlmZiAtLWdpdCBhL2RlYnVnL01ha2VmaWxlIGIvZGVidWcvTWFrZWZpbGUKK2luZGV4IDlmZjM1N2IuLmQyM2Q5N2QgMTAwNjQ0CistLS0gYS9kZWJ1Zy9NYWtlZmlsZQorKysrIGIvZGVidWcvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBkZWJ1ZyBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IGRlYnVnCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMjcsNyArMjksNyBAQCBoZWFkZXJzCTo9IGV4ZWNpbmZvLmgKKyAjIE5vdGUgdGhhdCBwdHNuYW1lX3JfY2hrIGFuZCBnZXRsb2dpbl9yIGFyZSBub3QgaGVyZSwgYnV0IGluCisgIyBsb2dpbi9NYWtlZmlsZSBpbnN0ZWFkLiAgSWYgdGhhdCBzdWJkaXIgaXMgb21pdHRlZCBmcm9tIHRoZQorICMgYnVpbGQsIGl0cyBfRk9SVElGWV9TT1VSQ0Ugc3VwcG9ydCB3aWxsIGJlIHRvby4KKy1yb3V0aW5lcyAgPSBiYWNrdHJhY2UgYmFja3RyYWNlc3ltcyBiYWNrdHJhY2VzeW1zZmQgbm9vcGhvb2tzIFwKKytyb3V0aW5lcyAgPSBub29waG9va3MgXAorIAkgICAgbWVtY3B5X2NoayBtZW1tb3ZlX2NoayBtZW1wY3B5X2NoayBtZW1zZXRfY2hrIHN0cGNweV9jaGsgXAorIAkgICAgc3RyY2F0X2NoayBzdHJjcHlfY2hrIHN0cm5jYXRfY2hrIHN0cm5jcHlfY2hrIHN0cG5jcHlfY2hrIFwKKyAJICAgIHNwcmludGZfY2hrIHZzcHJpbnRmX2NoayBzbnByaW50Zl9jaGsgdnNucHJpbnRmX2NoayBcCitAQCAtMzYsMjAgKzM4LDI3IEBAIHJvdXRpbmVzICA9IGJhY2t0cmFjZSBiYWNrdHJhY2VzeW1zIGJhY2t0cmFjZXN5bXNmZCBub29waG9va3MgXAorIAkgICAgcmVhZF9jaGsgcHJlYWRfY2hrIHByZWFkNjRfY2hrIHJlY3ZfY2hrIHJlY3Zmcm9tX2NoayBcCisgCSAgICByZWFkbGlua19jaGsgcmVhZGxpbmthdF9jaGsgZ2V0d2RfY2hrIGdldGN3ZF9jaGsgXAorIAkgICAgcmVhbHBhdGhfY2hrIGZyZWFkX2NoayBmcmVhZF91X2NoayBcCistCSAgICB3Y3RvbWJfY2hrIHdjc2NweV9jaGsgd21lbWNweV9jaGsgd21lbW1vdmVfY2hrIHdtZW1wY3B5X2NoayBcCistCSAgICB3Y3BjcHlfY2hrIHdjc25jcHlfY2hrIHdjc2NhdF9jaGsgd2NzbmNhdF9jaGsgd21lbXNldF9jaGsgXAorLQkgICAgd2NwbmNweV9jaGsgXAorLQkgICAgc3dwcmludGZfY2hrIHZzd3ByaW50Zl9jaGsgd3ByaW50Zl9jaGsgZndwcmludGZfY2hrIFwKKy0JICAgIHZ3cHJpbnRmX2NoayB2ZndwcmludGZfY2hrIGZnZXR3c19jaGsgZmdldHdzX3VfY2hrIFwKKyAJICAgIGNvbmZzdHJfY2hrIGdldGdyb3Vwc19jaGsgdHR5bmFtZV9yX2NoayBcCistCSAgICBnZXRob3N0bmFtZV9jaGsgZ2V0ZG9tYWlubmFtZV9jaGsgd2NydG9tYl9jaGsgbWJzbnJ0b3djc19jaGsgXAorLQkgICAgd2NzbnJ0b21ic19jaGsgbWJzcnRvd2NzX2NoayB3Y3NydG9tYnNfY2hrIG1ic3Rvd2NzX2NoayBcCistCSAgICB3Y3N0b21ic19jaGsgYXNwcmludGZfY2hrIHZhc3ByaW50Zl9jaGsgZHByaW50Zl9jaGsgXAorKwkgICAgZ2V0aG9zdG5hbWVfY2hrIGdldGRvbWFpbm5hbWVfY2hrIFwKKysJICAgIGFzcHJpbnRmX2NoayB2YXNwcmludGZfY2hrIGRwcmludGZfY2hrIFwKKyAJICAgIHZkcHJpbnRmX2NoayBvYnByaW50Zl9jaGsgXAorIAkgICAgbG9uZ2ptcF9jaGsgX19fX2xvbmdqbXBfY2hrIFwKKyAJICAgIGZkZWx0X2NoayBwb2xsX2NoayBwcG9sbF9jaGsgXAorIAkgICAgc3RhY2tfY2hrX2ZhaWwgZm9ydGlmeV9mYWlsIFwKKyAJICAgICQoc3RhdGljLW9ubHktcm91dGluZXMpCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0JBQ0tUUkFDRSkgKz0gYmFja3RyYWNlIGJhY2t0cmFjZXN5bXMgYmFja3RyYWNlc3ltc2ZkCisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTykJCQlcCisrCSArPSB3cHJpbnRmX2NoayBmd3ByaW50Zl9jaGsJCQkJXAorKwkgICAgdndwcmludGZfY2hrIHZmd3ByaW50Zl9jaGsgZmdldHdzX2NoayBmZ2V0d3NfdV9jaGsKKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKQkJCQlcCisrCSArPSB3Y3RvbWJfY2hrIHdjc2NweV9jaGsgd21lbWNweV9jaGsgd21lbW1vdmVfY2hrIHdtZW1wY3B5X2NoawlcCisrCSAgICB3Y3BjcHlfY2hrIHdjc25jcHlfY2hrIHdjc2NhdF9jaGsgd2NzbmNhdF9jaGsgd21lbXNldF9jaGsJXAorKwkgICAgd2NwbmNweV9jaGsJCQkJCQkJXAorKwkgICAgc3dwcmludGZfY2hrIHZzd3ByaW50Zl9jaGsJCQkJCVwKKysJICAgIHdjcnRvbWJfY2hrIG1ic25ydG93Y3NfY2hrCQkJCQlcCisrCSAgICB3Y3NucnRvbWJzX2NoayBtYnNydG93Y3NfY2hrIHdjc3J0b21ic19jaGsgbWJzdG93Y3NfY2hrCVwKKysJICAgIHdjc3RvbWJzX2NoaworKworIHN0YXRpYy1vbmx5LXJvdXRpbmVzIDo9IHdhcm5pbmctbm9wIHN0YWNrX2Noa19mYWlsX2xvY2FsCisgCisgQ0ZMQUdTLWJhY2t0cmFjZS5jID0gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIKK0BAIC0xMzEsMTEgKzE0MCwxNSBAQCBMREZMQUdTLXRzdC1iYWNrdHJhY2U0ID0gLXJkeW5hbWljCisgTERGTEFHUy10c3QtYmFja3RyYWNlNSA9IC1yZHluYW1pYworIExERkxBR1MtdHN0LWJhY2t0cmFjZTYgPSAtcmR5bmFtaWMKKyAKKy10ZXN0cyA9IGJhY2t0cmFjZS10c3QgdHN0LWxvbmdqbXBfY2hrIHRzdC1jaGsxIHRzdC1jaGsyIHRzdC1jaGszIFwKKy0JdHN0LWxmc2NoazEgdHN0LWxmc2NoazIgdHN0LWxmc2NoazMgdGVzdC1zdHJjcHlfY2hrIHRlc3Qtc3RwY3B5X2NoayBcCistCXRzdC1jaGs0IHRzdC1jaGs1IHRzdC1jaGs2IHRzdC1sZnNjaGs0IHRzdC1sZnNjaGs1IHRzdC1sZnNjaGs2IFwKKy0JdHN0LWxvbmdqbXBfY2hrMiB0c3QtYmFja3RyYWNlMiB0c3QtYmFja3RyYWNlMyB0c3QtYmFja3RyYWNlNCBcCistCXRzdC1iYWNrdHJhY2U1IHRzdC1iYWNrdHJhY2U2CisrdGVzdHMgPSB0c3QtbG9uZ2ptcF9jaGsgdGVzdC1zdHJjcHlfY2hrIHRlc3Qtc3RwY3B5X2NoayB0c3QtbG9uZ2ptcF9jaGsyCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSBcCisrICAgICAgKz0gdHN0LWNoazEgdHN0LWNoazIgdHN0LWNoazMgdHN0LWxmc2NoazEgdHN0LWxmc2NoazIgdHN0LWxmc2NoazMKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfQkFDS1RSQUNFKSBcCisrICAgICAgKz0gYmFja3RyYWNlLXRzdCB0c3QtYmFja3RyYWNlMiB0c3QtYmFja3RyYWNlMyB0c3QtYmFja3RyYWNlNCBcCisrICAgICAgICAgdHN0LWJhY2t0cmFjZTUgdHN0LWJhY2t0cmFjZTYKKytpZmVxICh5eSwkKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpJChPUFRJT05fRUdMSUJDX0NYWF9URVNUUykpCisrdGVzdHMgKz0gdHN0LWNoazQgdHN0LWNoazUgdHN0LWNoazYgdHN0LWxmc2NoazQgdHN0LWxmc2NoazUgdHN0LWxmc2NoazYKKytlbmRpZgorIAorIGlmZXEgKCwkKENYWCkpCisgdGVzdHMtdW5zdXBwb3J0ZWQgPSB0c3QtY2hrNCB0c3QtY2hrNSB0c3QtY2hrNiBcCitkaWZmIC0tZ2l0IGEvZGVidWcvc2VnZmF1bHQuYyBiL2RlYnVnL3NlZ2ZhdWx0LmMKK2luZGV4IDM0NTlhMmEuLmVlOWExNDYgMTAwNjQ0CistLS0gYS9kZWJ1Zy9zZWdmYXVsdC5jCisrKysgYi9kZWJ1Zy9zZWdmYXVsdC5jCitAQCAtMzAsNiArMzAsNyBAQAorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8X2l0b2EuaD4KKyAjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAvKiBUaGlzIGZpbGUgZGVmaW5lcyBtYWNyb3MgdG8gYWNjZXNzIHRoZSBjb250ZW50IG9mIHRoZSBzaWdjb250ZXh0IGVsZW1lbnQKKyAgICBwYXNzZWQgdXAgYnkgdGhlIHNpZ25hbCBoYW5kbGVyLiAgKi8KK0BAIC02OCwxMSArNjksMTMgQEAgd3JpdGVfc3Ryc2lnbmFsIChpbnQgZmQsIGludCBzaWduYWwpCisgc3RhdGljIHZvaWQKKyBjYXRjaF9zZWdmYXVsdCAoaW50IHNpZ25hbCwgU0lHQ09OVEVYVCBjdHgpCisgeworLSAgaW50IGZkLCBjbnQsIGk7CistICB2b2lkICoqYXJyOworKyAgaW50IGZkOworICAgc3RydWN0IHNpZ2FjdGlvbiBzYTsKKysjaWYgX19PUFRJT05fRUdMSUJDX0JBQ0tUUkFDRQorKyAgaW50IGNudCwgaTsKKysgIHZvaWQgKiphcnI7CisgICB1aW50cHRyX3QgcGM7CistCisrI2VuZGlmCisgICAvKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHdlIGFyZSB3cml0aW5nIHRvLiAgSWYgbm9uZSBpcyBnaXZlbgorICAgICAgb3Igd2UgY2Fubm90IHdyaXRlIHRvIHRoaXMgZmlsZSB3cml0ZSB0byBzdGRlcnIuICAqLworICAgZmQgPSAyOworQEAgLTkxLDYgKzk0LDcgQEAgY2F0Y2hfc2VnZmF1bHQgKGludCBzaWduYWwsIFNJR0NPTlRFWFQgY3R4KQorICAgUkVHSVNURVJfRFVNUDsKKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0JBQ0tUUkFDRQorICAgV1JJVEVfU1RSSU5HICgiXG5CYWNrdHJhY2U6XG4iKTsKKyAKKyAgIC8qIEdldCB0aGUgYmFja3RyYWNlLiAgKi8KK0BAIC0xMTMsNiArMTE3LDcgQEAgY2F0Y2hfc2VnZmF1bHQgKGludCBzaWduYWwsIFNJR0NPTlRFWFQgY3R4KQorIAorICAgLyogTm93IGdlbmVyYXRlIG5pY2VseSBmb3JtYXR0ZWQgb3V0cHV0LiAgKi8KKyAgIF9fYmFja3RyYWNlX3N5bWJvbHNfZmQgKGFyciArIGksIGNudCAtIGksIGZkKTsKKysjZW5kaWYKKyAKKyAjaWZkZWYgSEFWRV9QUk9DX1NFTEYKKyAgIC8qIE5vdyB0aGUgbGluayBtYXAuICAqLworZGlmZiAtLWdpdCBhL2RlYnVnL3RzdC1jaGsxLmMgYi9kZWJ1Zy90c3QtY2hrMS5jCitpbmRleCA1MzU1OWU2Li4zNjJkOTJhIDEwMDY0NAorLS0tIGEvZGVidWcvdHN0LWNoazEuYworKysrIGIvZGVidWcvdHN0LWNoazEuYworQEAgLTMxLDYgKzMxLDcgQEAKKyAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgI2luY2x1ZGUgPHN5cy91bi5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIAorICNkZWZpbmUgb2JzdGFja19jaHVua19hbGxvYyBtYWxsb2MKK0BAIC0zMDcsNiArMzA4LDcgQEAgZG9fdGVzdCAodm9pZCkKKyAgIHNucHJpbnRmIChidWYgKyA4LCBsMCArIDMsICIlZCIsIG51bTIpOworICAgQ0hLX0ZBSUxfRU5ECisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKyAgIENIS19GQUlMX1NUQVJUCisgICBzd3ByaW50ZiAod2J1ZiArIDgsIDMsIEwiJWQiLCBudW0xKTsKKyAgIENIS19GQUlMX0VORAorQEAgLTMxNCw2ICszMTYsNyBAQCBkb190ZXN0ICh2b2lkKQorICAgQ0hLX0ZBSUxfU1RBUlQKKyAgIHN3cHJpbnRmICh3YnVmICsgOCwgbDAgKyAzLCBMIiVkIiwgbnVtMSk7CisgICBDSEtfRkFJTF9FTkQKKysjZW5kaWYgLyogX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiAqLworICMgZW5kaWYKKyAKKyAgIG1lbWNweSAoYnVmLCBzdHIxICsgMiwgbDAgKyA5KTsKK0BAIC0zODEsNiArMzg0LDcgQEAgZG9fdGVzdCAodm9pZCkKKyAgIENIS19GQUlMX0VORAorICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisgCisgICAvKiBUaGVzZSBvcHMgY2FuIGJlIGRvbmUgd2l0aG91dCBydW50aW1lIGNoZWNraW5nIG9mIG9iamVjdCBzaXplLiAgKi8KKyAgIHdtZW1jcHkgKHdidWYsIEwiYWJjZGVmZ2hpaiIsIDEwKTsKK0BAIC02MDUsNiArNjA5LDcgQEAgZG9fdGVzdCAodm9pZCkKKyAgIENIS19GQUlMX0VORAorICNlbmRpZgorIAorKyNlbmRpZiAvKiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSICovCisgCisgICAvKiBOb3cgY2hlY2tzIGZvciAlbiBwcm90ZWN0aW9uLiAgKi8KKyAKK0BAIC0xMTkyLDYgKzExOTcsNyBAQCBkb190ZXN0ICh2b2lkKQorICMgZW5kaWYKKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorICAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCAiZGVfREUuVVRGLTgiKSAhPSBOVUxMKQorICAgICB7CisgICAgICAgYXNzZXJ0IChNQl9DVVJfTUFYIDw9IDEwKTsKK0BAIC0xMzQ4LDYgKzEzNTQsNyBAQCBkb190ZXN0ICh2b2lkKQorICAgICAgIHB1dHMgKCJjYW5ub3Qgc2V0IGxvY2FsZSIpOworICAgICAgIHJldCA9IDE7CisgICAgIH0KKysjZW5kaWYgLyogX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiAqLworIAorICAgaW50IGZkID0gcG9zaXhfb3BlbnB0IChPX1JEV1IpOworICAgaWYgKGZkICE9IC0xKQorZGlmZiAtLWdpdCBhL2RsZmNuL01ha2VmaWxlIGIvZGxmY24vTWFrZWZpbGUKK2luZGV4IDc1OTc4MGQuLjM4Mjc2MDcgMTAwNjQ0CistLS0gYS9kbGZjbi9NYWtlZmlsZQorKysrIGIvZGxmY24vTWFrZWZpbGUKK0BAIC0xNSw2ICsxNSw4IEBACisgIyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgc2VlCisgIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgkJOj0gZGxmY24KKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0zNiw4ICszOCwxMSBAQCBlbmRpZgorIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgdGVzdHMgPSBnbHJlZm1haW4gZmFpbHRlc3QgdHN0LWRsYWRkciBkZWZhdWx0IGVycm1zZzEgdHN0Y3hhYXRleGl0IFwKKyAJYnVnLWRsb3BlbjEgYnVnLWRsc3ltMSB0c3QtZGxpbmZvIGJ1Zy1hdGV4aXQxIGJ1Zy1hdGV4aXQyIFwKKy0JYnVnLWF0ZXhpdDMgdHN0YXRleGl0IGJ1Zy1kbC1sZWFmIHRzdC1yZWMtZGxvcGVuCisrCXRzdGF0ZXhpdCBidWctZGwtbGVhZiB0c3QtcmVjLWRsb3BlbgorIGVuZGlmCisrCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0NYWF9URVNUUykgKz0gYnVnLWF0ZXhpdDMKKysKKyBtb2R1bGVzLW5hbWVzID0gZ2xyZWZsaWIxIGdscmVmbGliMiBnbHJlZmxpYjMgZmFpbHRlc3Rtb2QgZGVmYXVsdG1vZDEgXAorIAkJZGVmYXVsdG1vZDIgZXJybXNnMW1vZCBtb2RhdGV4aXQgbW9kY3hhYXRleGl0IFwKKyAJCWJ1Zy1kbHN5bTEtbGliMSBidWctZGxzeW0xLWxpYjIgYnVnLWF0ZXhpdDEtbGliIFwKK2RpZmYgLS1naXQgYS9lbGYvZGwtc3VwcG9ydC5jIGIvZWxmL2RsLXN1cHBvcnQuYworaW5kZXggNGQwMzZmMS4uYzE1ZjQwNSAxMDA2NDQKKy0tLSBhL2VsZi9kbC1zdXBwb3J0LmMKKysrKyBiL2VsZi9kbC1zdXBwb3J0LmMKK0BAIC0xOSw2ICsxOSw3IEBACisgLyogVGhpcyBmaWxlIGRlZmluZXMgc29tZSB0aGluZ3MgdGhhdCBmb3IgdGhlIGR5bmFtaWMgbGlua2VyIGFyZSBkZWZpbmVkIGluCisgICAgcnRsZC5jIGFuZCBkbC1zeXNkZXAuYyBpbiB3YXlzIGFwcHJvcHJpYXRlIHRvIGJvb3RzdHJhcCBkeW5hbWljIGxpbmtpbmcuICAqLworIAorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxsaWJpbnRsLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorQEAgLTQyLDcgKzQzLDkgQEAgY2hhciAqKl9kbF9hcmd2ID0gJl9fcHJvZ25hbWU7CS8qIFRoaXMgaXMgY2hlY2tlZCBmb3Igc29tZSBlcnJvciBtZXNzYWdlcy4gICovCisgY29uc3QgY2hhciAqX2RsX3BsYXRmb3JtOworIHNpemVfdCBfZGxfcGxhdGZvcm1sZW47CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCisgaW50IF9kbF9kZWJ1Z19tYXNrOworKyNlbmRpZgorIGludCBfZGxfbGF6eTsKKyBFbGZXKEFkZHIpIF9kbF91c2VfbG9hZF9iaWFzID0gLTI7CisgaW50IF9kbF9keW5hbWljX3dlYWs7CitkaWZmIC0tZ2l0IGEvZWxmL3J0bGQuYyBiL2VsZi9ydGxkLmMKK2luZGV4IDZkM2FkZDcuLmZjM2EyZGIgMTAwNjQ0CistLS0gYS9lbGYvcnRsZC5jCisrKysgYi9lbGYvcnRsZC5jCitAQCAtMTYsNiArMTYsNyBAQAorICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCBzZWUKKyAgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxkbGZjbi5oPgorICNpbmNsdWRlIDxmY250bC5oPgorQEAgLTIyMDEsNiArMjIwMiw3IEBAIHByaW50X21pc3NpbmdfdmVyc2lvbiAoaW50IGVycmNvZGUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorIAkJICAgIG9iam5hbWUsIGVycnN0cmluZyk7CisgfQorIAwKKysjaWYgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKyAvKiBOb256ZXJvIGlmIGFueSBvZiB0aGUgZGVidWdnaW5nIG9wdGlvbnMgaXMgZW5hYmxlZC4gICovCisgc3RhdGljIGludCBhbnlfZGVidWcgYXR0cmlidXRlX3JlbHJvOworIAorQEAgLTIzMTAsNiArMjMxMiw3IEBAIGEgZmlsZW5hbWUgY2FuIGJlIHNwZWNpZmllZCB1c2luZyB0aGUgTERfREVCVUdfT1VUUFVUIGVudmlyb25tZW50IHZhcmlhYmxlLlxuIik7CisgICAgICAgX2V4aXQgKDApOworICAgICB9CisgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRyAqLworIAwKKyBzdGF0aWMgdm9pZAorIHByb2Nlc3NfZGxfYXVkaXQgKGNoYXIgKnN0cikKK0BAIC0yMzQ5LDggKzIzNTIsOSBAQCBwcm9jZXNzX2VudnZhcnMgKGVudW0gbW9kZSAqbW9kZXApCisgICBjaGFyICoqcnVucCA9IF9lbnZpcm9uOworICAgY2hhciAqZW52bGluZTsKKyAgIGVudW0gbW9kZSBtb2RlID0gbm9ybWFsOworKyNpZiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworICAgY2hhciAqZGVidWdfb3V0cHV0ID0gTlVMTDsKKy0KKysjZW5kaWYKKyAgIC8qIFRoaXMgaXMgdGhlIGRlZmF1bHQgcGxhY2UgZm9yIHByb2ZpbGluZyBkYXRhIGZpbGUuICAqLworICAgR0xSTyhkbF9wcm9maWxlX291dHB1dCkKKyAgICAgPSAmIi92YXIvdG1wXDAvdmFyL3Byb2ZpbGUiW19fbGliY19lbmFibGVfc2VjdXJlID8gOSA6IDBdOworQEAgLTIzNzcsMTIgKzIzODEsMTQgQEAgcHJvY2Vzc19lbnZ2YXJzIChlbnVtIG1vZGUgKm1vZGVwKQorIAkgIGJyZWFrOworIAorIAljYXNlIDU6CisrI2lmIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCisgCSAgLyogRGVidWdnaW5nIG9mIHRoZSBkeW5hbWljIGxpbmtlcj8gICovCisgCSAgaWYgKG1lbWNtcCAoZW52bGluZSwgIkRFQlVHIiwgNSkgPT0gMCkKKyAJICAgIHsKKyAJICAgICAgcHJvY2Vzc19kbF9kZWJ1ZyAoJmVudmxpbmVbNl0pOworIAkgICAgICBicmVhazsKKyAJICAgIH0KKysjZW5kaWYKKyAJICBpZiAobWVtY21wIChlbnZsaW5lLCAiQVVESVQiLCA1KSA9PSAwKQorIAkgICAgcHJvY2Vzc19kbF9hdWRpdCAoJmVudmxpbmVbNl0pOworIAkgIGJyZWFrOworQEAgLTI0NDgsMTMgKzI0NTQsMTQgQEAgcHJvY2Vzc19lbnZ2YXJzIChlbnVtIG1vZGUgKm1vZGVwKQorIAkgICAgICBicmVhazsKKyAJICAgIH0KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKyAJICAvKiBXaGVyZSB0byBwbGFjZSB0aGUgcHJvZmlsaW5nIGRhdGEgZmlsZS4gICovCisgCSAgaWYgKG1lbWNtcCAoZW52bGluZSwgIkRFQlVHX09VVFBVVCIsIDEyKSA9PSAwKQorIAkgICAgeworIAkgICAgICBkZWJ1Z19vdXRwdXQgPSAmZW52bGluZVsxM107CisgCSAgICAgIGJyZWFrOworIAkgICAgfQorLQorKyNlbmRpZgorIAkgIGlmICghX19saWJjX2VuYWJsZV9zZWN1cmUKKyAJICAgICAgJiYgbWVtY21wIChlbnZsaW5lLCAiRFlOQU1JQ19XRUFLIiwgMTIpID09IDApCisgCSAgICBHTFJPKGRsX2R5bmFtaWNfd2VhaykgPSAxOworQEAgLTI0OTEsNyArMjQ5OCw5IEBAIHByb2Nlc3NfZW52dmFycyAoZW51bSBtb2RlICptb2RlcCkKKyAJICAgIHsKKyAJICAgICAgbW9kZSA9IHRyYWNlOworIAkgICAgICBHTFJPKGRsX3ZlcmJvc2UpID0gMTsKKysjaWYgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKyAJICAgICAgR0xSTyhkbF9kZWJ1Z19tYXNrKSB8PSBETF9ERUJVR19QUkVMSU5LOworKyNlbmRpZgorIAkgICAgICBHTFJPKGRsX3RyYWNlX3ByZWxpbmspID0gJmVudmxpbmVbMTddOworIAkgICAgfQorIAkgIGJyZWFrOworQEAgLTI1MzgsMTIgKzI1NDcsMTUgQEAgcHJvY2Vzc19lbnZ2YXJzIChlbnVtIG1vZGUgKm1vZGVwKQorICAgICAgIGlmIChfX2FjY2VzcyAoIi9ldGMvc3VpZC1kZWJ1ZyIsIEZfT0spICE9IDApCisgCXsKKyAJICB1bnNldGVudiAoIk1BTExPQ19DSEVDS18iKTsKKysjaWYgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKyAJICBHTFJPKGRsX2RlYnVnX21hc2spID0gMDsKKysjZW5kaWYKKyAJfQorIAorICAgICAgIGlmIChtb2RlICE9IG5vcm1hbCkKKyAJX2V4aXQgKDUpOworICAgICB9CisrI2lmIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCisgICAvKiBJZiB3ZSBoYXZlIHRvIHJ1biB0aGUgZHluYW1pYyBsaW5rZXIgaW4gZGVidWdnaW5nIG1vZGUgYW5kIHRoZQorICAgICAgTERfREVCVUdfT1VUUFVUIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIGdpdmVuLCB3ZSB3cml0ZSB0aGUgZGVidWcKKyAgICAgIG1lc3NhZ2VzIHRvIHRoaXMgZmlsZS4gICovCitAQCAtMjU2OCw2ICsyNTgwLDcgQEAgcHJvY2Vzc19lbnZ2YXJzIChlbnVtIG1vZGUgKm1vZGVwKQorIAkvKiBXZSB1c2Ugc3RhbmRhcmQgb3V0cHV0IGlmIG9wZW5pbmcgdGhlIGZpbGUgZmFpbGVkLiAgKi8KKyAJR0xSTyhkbF9kZWJ1Z19mZCkgPSBTVERPVVRfRklMRU5POworICAgICB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHICovCisgfQorIAorIAorZGlmZiAtLWdpdCBhL2V4dHJhLWxpYi5tayBiL2V4dHJhLWxpYi5taworaW5kZXggYjEwNzQ4ZC4uZDcxYTA2ZiAxMDA2NDQKKy0tLSBhL2V4dHJhLWxpYi5taworKysrIGIvZXh0cmEtbGliLm1rCitAQCAtMjUsNyArMjUsOSBAQCBpbnN0YWxsLWxpYiA6PSAkKGluc3RhbGwtbGliKQorIGV4dHJhLW9ianMgOj0gJChleHRyYS1vYmpzKQorIAorICMgVGhlIG1vZHVsZXMgdGhhdCBnbyBpbiAkKGxpYikuCistYWxsLSQobGliKS1yb3V0aW5lcyA6PSAkKCQobGliKS1yb3V0aW5lcykgJCgkKGxpYiktc3lzZGVwX3JvdXRpbmVzKQorK2FsbC0kKGxpYiktcm91dGluZXMgOj0gJCgkKGxpYiktcm91dGluZXMpCQlcCisrCSAgICAgICAgICAgICAgICQoJChsaWIpLXJvdXRpbmVzLXkpCQlcCisrCQkgICAgICAgJCgkKGxpYiktc3lzZGVwX3JvdXRpbmVzKQorIAorICMgQWRkIGVhY2ggZmxhdm9yIG9mIGxpYnJhcnkgdG8gdGhlIGxpc3RzIG9mIHRoaW5ncyB0byBidWlsZCBhbmQgaW5zdGFsbC4KKyBpbnN0YWxsLWxpYiArPSAkKGZvcmVhY2ggbywkKG9iamVjdC1zdWZmaXhlcy0kKGxpYikpLCQobGliOmxpYiU9JChsaWJ0eXBlJG8pKSkKK0BAIC0xMDEsNyArMTAzLDcgQEAgZW5kaWYKKyBlbmRpZgorIAorICMgVGhpcyB3aWxsIGRlZmluZSBgbGlib2YtUk9VVElORSA6PSBMSUInIGZvciBlYWNoIG9mIHRoZSByb3V0aW5lcy4KKy1jcHAtc3Jjcy1sZWZ0IDo9ICQoJChsaWIpLXJvdXRpbmVzKSAkKCQobGliKS1zeXNkZXBfcm91dGluZXMpCisrY3BwLXNyY3MtbGVmdCA6PSAkKGFsbC0kKGxpYiktcm91dGluZXMpCisgaWZuZXEgKCwkKGNwcC1zcmNzLWxlZnQpKQorIGluY2x1ZGUgJChwYXRzdWJzdCAlLCQoLi4pY3BwZmxhZ3MtaXRlcmF0b3IubWssJChjcHAtc3Jjcy1sZWZ0KSkKKyBlbmRpZgorZGlmZiAtLWdpdCBhL2dycC9NYWtlZmlsZSBiL2dycC9NYWtlZmlsZQoraW5kZXggYzYzYjU1Mi4uNzQ4NmYzMiAxMDA2NDQKKy0tLSBhL2dycC9NYWtlZmlsZQorKysrIGIvZ3JwL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgZ3JwIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gZ3JwCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMjksNiArMzEsOSBAQCByb3V0aW5lcyA6PSBmZ2V0Z3JlbnQgaW5pdGdyb3VwcyBzZXRncm91cHMgXAorIAkgICAgZ2V0Z3JlbnRfciBnZXRncmdpZF9yIGdldGdybmFtX3IgZmdldGdyZW50X3IKKyAKKyB0ZXN0cyA6PSB0ZXN0Z3JwCisraWZuZXEgKHksJChPUFRJT05fRUdMSUJDX05TU1dJVENIKSkKKytMRExJQlMtdGVzdGdycCArPSAkKHNoZWxsIGNhdCAkKGNvbW1vbi1vYmpwZngpbnNzL2ZpeGVkLW5zc3dpdGNoLWxpYnMpCisrZW5kaWYKKyAKKyBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorIHRlc3Qtc3JjcyA6PSAgdHN0X2ZnZXRncmVudAorZGlmZiAtLWdpdCBhL2hlc2lvZC9NYWtlZmlsZSBiL2hlc2lvZC9NYWtlZmlsZQoraW5kZXggYWMwYmMwMS4uMzgyNjNiNCAxMDA2NDQKKy0tLSBhL2hlc2lvZC9NYWtlZmlsZQorKysrIGIvaGVzaW9kL01ha2VmaWxlCitAQCAtMTgsMTIgKzE4LDE0IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBoZXNpb2QgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBoZXNpb2QKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKy1leHRyYS1saWJzIDo9IGxpYm5zc19oZXNpb2QKKy1leHRyYS1saWJzLW90aGVycyA9ICQoZXh0cmEtbGlicykKKytleHRyYS1saWJzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSBsaWJuc3NfaGVzaW9kCisrZXh0cmEtbGlicy1vdGhlcnMteSArPSAkKGV4dHJhLWxpYnMteSkKKyAKKyBzdWJkaXItZGlycyA9IG5zc19oZXNpb2QKKyB2cGF0aCAlLmMgbnNzX2hlc2lvZAorZGlmZiAtLWdpdCBhL2ljb252L01ha2VmaWxlIGIvaWNvbnYvTWFrZWZpbGUKK2luZGV4IDBkNTVlZGEuLmExODQ3YzYgMTAwNjQ0CistLS0gYS9pY29udi9NYWtlZmlsZQorKysrIGIvaWNvbnYvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJTWFrZWZpbGUgZm9yIGljb252LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IGljb252CisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMzksNiArNDEsMTEgQEAgQ0ZMQUdTLWljb252X2NoYXJtYXAuYyA9IC1JLi4vbG9jYWxlL3Byb2dyYW1zCisgQ0ZMQUdTLWR1bW15LXJlcGVydG9pcmUuYyA9IC1JLi4vbG9jYWxlL3Byb2dyYW1zCisgQ0ZMQUdTLWNoYXJtYXAuYyA9IC1EQ0hBUk1BUF9QQVRIPSciJChpMThuZGlyKS9jaGFybWFwcyInIFwKKyAJCSAgIC1EREVGQVVMVF9DSEFSTUFQPW51bGxfcG9pbnRlciAtRE5FRURfTlVMTF9QT0lOVEVSCisrCisraWZuZXEgKHksJChPUFRJT05fRUdMSUJDX1NQQVdOKSkKKytDRkxBR1MtY2hhcm1hcC1kaXIuYyArPSAtRE5PX1VOQ09NUFJFU1MKKytlbmRpZgorKworIENGTEFHUy1saW5lcmVhZGVyLmMgPSAtRE5PX1RSQU5TTElURVJBVElPTgorIENGTEFHUy1zaW1wbGUtaGFzaC5jID0gLUkuLi9sb2NhbGUKKyAKK2RpZmYgLS1naXQgYS9pY29udi9nY29udl9kYi5jIGIvaWNvbnYvZ2NvbnZfZGIuYworaW5kZXggY2U0NjIxNi4uZWExODk2NCAxMDA2NDQKKy0tLSBhL2ljb252L2djb252X2RiLmMKKysrKyBiL2ljb252L2djb252X2RiLmMKK0BAIC0yNSw2ICsyNSw3IEBACisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICNpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorICNpbmNsdWRlIDxsb2NhbGUvbG9jYWxlaW5mby5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpbmNsdWRlIDxkbGZjbi5oPgorICNpbmNsdWRlIDxnY29udl9pbnQuaD4KK0BAIC04MjgsOSArODI5LDExIEBAIGZyZWVfbW9kdWxlc19kYiAoc3RydWN0IGdjb252X21vZHVsZSAqbm9kZSkKKyAvKiBGcmVlIGFsbCByZXNvdXJjZXMgaWYgbmVjZXNzYXJ5LiAgKi8KKyBsaWJjX2ZyZWVyZXNfZm4gKGZyZWVfbWVtKQorIHsKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICAvKiBGaXJzdCBmcmVlIGxvY2FsZSBtZW1vcnkuICBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgYmVmb3JlIGZyZWVpbmcgZGVyaXZhdGlvbnMsCisgICAgICBhcyBjdHlwZSBjbGVhbnVwIGZ1bmN0aW9ucyBkZXJlZmVyZW5jZSBzdGVwcyBhcnJheXMgd2hpY2ggd2UgZnJlZSBiZWxvdy4gICovCisgICBfbmxfbG9jYWxlX3N1YmZyZWVyZXMgKCk7CisrI2VuZGlmCisgCisgICAvKiBmaW5kZG9tYWluLmMgaGFzIHNpbWlsYXIgcHJvYmxlbS4gICovCisgICBleHRlcm4gdm9pZCBfbmxfZmluZGRvbWFpbl9zdWJmcmVlcmVzICh2b2lkKSBhdHRyaWJ1dGVfaGlkZGVuOworZGlmZiAtLWdpdCBhL2ljb252L2djb252X3RyYW5zLmMgYi9pY29udi9nY29udl90cmFucy5jCitpbmRleCA1ZDVkNGQ3Li5hN2QzMDcyIDEwMDY0NAorLS0tIGEvaWNvbnYvZ2NvbnZfdHJhbnMuYworKysrIGIvaWNvbnYvZ2NvbnZfdHJhbnMuYworQEAgLTIzLDYgKzIzLDcgQEAKKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKyAjaW5jbHVkZSAiZ2NvbnZfaW50LmgiCitAQCAtMzgsMTUgKzM5LDE5IEBAIF9fZ2NvbnZfdHJhbnNsaXRlcmF0ZSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqc3RlcCwKKyAJCSAgICAgICB1bnNpZ25lZCBjaGFyICoqb3V0YnVmc3RhcnQsIHNpemVfdCAqaXJyZXZlcnNpYmxlKQorIHsKKyAgIC8qIEZpbmQgb3V0IGFib3V0IHRoZSBsb2NhbGUncyB0cmFuc2xpdGVyYXRpb24uICAqLworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIHVpbnRfZmFzdDMyX3Qgc2l6ZTsKKyAgIGNvbnN0IHVpbnQzMl90ICpmcm9tX2lkeDsKKyAgIGNvbnN0IHVpbnQzMl90ICpmcm9tX3RibDsKKyAgIGNvbnN0IHVpbnQzMl90ICp0b19pZHg7CisgICBjb25zdCB1aW50MzJfdCAqdG9fdGJsOworKyNlbmRpZgorICAgY29uc3QgdWludDMyX3QgKndpbmJ1ZjsKKyAgIGNvbnN0IHVpbnQzMl90ICp3aW5idWZlbmQ7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgdWludF9mYXN0MzJfdCBsb3c7CisgICB1aW50X2Zhc3QzMl90IGhpZ2g7CisrI2VuZGlmCisgCisgICAvKiBUaGUgaW5wdXQgYnVmZmVyLiAgVGhlcmUgYXJlIGFjdHVhbGx5IDQtYnl0ZSB2YWx1ZXMuICAqLworICAgd2luYnVmID0gKGNvbnN0IHVpbnQzMl90ICopICppbmJ1ZnA7CitAQCAtNTgsNiArNjMsNyBAQCBfX2djb252X3RyYW5zbGl0ZXJhdGUgKHN0cnVjdCBfX2djb252X3N0ZXAgKnN0ZXAsCisgICAgIFBUUl9ERU1BTkdMRSAoZmN0KTsKKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICAvKiBJZiB0aGVyZSBpcyBubyB0cmFuc2xpdGVyYXRpb24gaW5mb3JtYXRpb24gaW4gdGhlIGxvY2FsZSBkb24ndCBkbworICAgICAgYW55dGhpbmcgYW5kIHJldHVybiB0aGUgZXJyb3IuICAqLworICAgc2l6ZSA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX0NUWVBFLCBfTkxfQ1RZUEVfVFJBTlNMSVRfVEFCX1NJWkUpOworQEAgLTE5Myw2ICsxOTksNyBAQCBfX2djb252X3RyYW5zbGl0ZXJhdGUgKHN0cnVjdCBfX2djb252X3N0ZXAgKnN0ZXAsCisgICAgICAgICAgICAgIHNvcnRlZC4gICovCisgCSAgYnJlYWs7CisgICAgIH0KKysjZW5kaWYKKyAKKyAgIC8qIE9uZSBsYXN0IGNoYW5jZTogdXNlIHRoZSBkZWZhdWx0IHJlcGxhY2VtZW50LiAgKi8KKyAgIGlmIChfTkxfQ1VSUkVOVF9XT1JEIChMQ19DVFlQRSwgX05MX0NUWVBFX1RSQU5TTElUX0RFRkFVTFRfTUlTU0lOR19MRU4pICE9IDApCitkaWZmIC0tZ2l0IGEvaWNvbnYvaWNvbnZfcHJvZy5jIGIvaWNvbnYvaWNvbnZfcHJvZy5jCitpbmRleCBlMjQ5YmNlLi40MDNlY2U1IDEwMDY0NAorLS0tIGEvaWNvbnYvaWNvbnZfcHJvZy5jCisrKysgYi9pY29udi9pY29udl9wcm9nLmMKK0BAIC0zNSw2ICszNSw3IEBACisgI2lmZGVmIF9QT1NJWF9NQVBQRURfRklMRVMKKyAjIGluY2x1ZGUgPHN5cy9tbWFuLmg+CisgI2VuZGlmCisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgI2luY2x1ZGUgPGNoYXJtYXAuaD4KKyAjaW5jbHVkZSA8Z2NvbnZfaW50Lmg+CisgI2luY2x1ZGUgImljb252X3Byb2cuaCIKK0BAIC0yMjEsMTAgKzIyMiwxNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkgICAgICBib29sIHRvX3dyb25nID0KKyAJCShpY29udl9vcGVuICh0b19jb2RlLCAiVVRGLTgiKSA9PSAoaWNvbnZfdCkgLTEKKyAJCSAmJiBlcnJubyA9PSBFSU5WQUwpOworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAJICAgICAgY29uc3QgY2hhciAqZnJvbV9wcmV0dHkgPQorIAkJKGZyb21fY29kZVswXSA/IGZyb21fY29kZSA6IG5sX2xhbmdpbmZvIChDT0RFU0VUKSk7CisgCSAgICAgIGNvbnN0IGNoYXIgKnRvX3ByZXR0eSA9CisgCQkob3JpZ190b19jb2RlWzBdID8gb3JpZ190b19jb2RlIDogbmxfbGFuZ2luZm8gKENPREVTRVQpKTsKKysjZWxzZQorKwkgICAgICBjb25zdCBjaGFyICpmcm9tX3ByZXR0eSA9CisrCQkoZnJvbV9jb2RlWzBdID8gZnJvbV9jb2RlIDogIkFOU0lfWDMuNC0xOTY4Iik7CisrCSAgICAgIGNvbnN0IGNoYXIgKnRvX3ByZXR0eSA9CisrICAgICAgICAgICAgICAgICAob3JpZ190b19jb2RlWzBdID8gb3JpZ190b19jb2RlIDogIkFOU0lfWDMuNC0xOTY4Iik7CisrI2VuZGlmCisgCisgCSAgICAgIGlmIChmcm9tX3dyb25nKQorIAkJeworZGlmZiAtLWdpdCBhL2ljb252ZGF0YS9NYWtlZmlsZSBiL2ljb252ZGF0YS9NYWtlZmlsZQoraW5kZXggYTNkMWQwOS4uMDgzMjcwOCAxMDA2NDQKKy0tLSBhL2ljb252ZGF0YS9NYWtlZmlsZQorKysrIGIvaWNvbnZkYXRhL01ha2VmaWxlCitAQCAtMTgsMTIgKzE4LDE1IEBACisgIworICMJTWFrZWZpbGUgZm9yIGljb252IGRhdGEgYW5kIGNvZGUuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gaWNvbnZkYXRhCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCisgIyBOYW1lcyBvZiBhbGwgdGhlIHNoYXJlZCBvYmplY3RzIHdoaWNoIGltcGxlbWVudCB0aGUgdHJhbnNmb3JtYXRpb25zLgorLW1vZHVsZXMJOj0gSVNPODg1OS0xIElTTzg4NTktMiBJU084ODU5LTMgSVNPODg1OS00IElTTzg4NTktNQkJIFwKKyttb2R1bGVzLSQoT1BUSU9OX0VHTElCQ19DSEFSU0VUUykJCQkJCSBcCisrCTo9IElTTzg4NTktMSBJU084ODU5LTIgSVNPODg1OS0zIElTTzg4NTktNCBJU084ODU5LTUJCSBcCisgCSAgIElTTzg4NTktNiBJU084ODU5LTcgSVNPODg1OS04IElTTzg4NTktOSBJU084ODU5LTEwCQkgXAorIAkgICBJU084ODU5LTExIElTTzg4NTktMTMgSVNPODg1OS0xNCBJU084ODU5LTE1IElTTzg4NTktMTYJIFwKKyAJICAgVC42MSBJU09fNjkzNyBTSklTIEtPSS04IEhQLVJPTUFOOCBIUC1ST01BTjkgRUJDRElDLUFULURFCSBcCitAQCAtNjMsMTEgKzY2LDEzIEBAIG1vZHVsZXMJOj0gSVNPODg1OS0xIElTTzg4NTktMiBJU084ODU5LTMgSVNPODg1OS00IElTTzg4NTktNQkJIFwKKyAJICAgTUFDLUNFTlRSQUxFVVJPUEUgS09JOC1SVSBJU084ODU5LTlFCQkJCSBcCisgCSAgIENQNzcwIENQNzcxIENQNzcyIENQNzczIENQNzc0CisgCistbW9kdWxlcy5zbyA6PSAkKGFkZHN1ZmZpeCAuc28sICQobW9kdWxlcykpCisrbW9kdWxlcy5zbyA6PSAkKGFkZHN1ZmZpeCAuc28sICQobW9kdWxlcy15KSkKKyAKKyBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorIHRlc3RzID0gYnVnLWljb252MSBidWctaWNvbnYyIHRzdC1sb2FkaW5nIHRzdC1lMmJpZyB0c3QtaWNvbnY0IGJ1Zy1pY29udjQgXAorLQl0c3QtaWNvbnY2IGJ1Zy1pY29udjUgYnVnLWljb252NiB0c3QtaWNvbnY3IGJ1Zy1pY29udjggYnVnLWljb252OQorKwl0c3QtaWNvbnY2IGJ1Zy1pY29udjUgYnVnLWljb252OCBidWctaWNvbnY5CisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSArPSBidWctaWNvbnY2IHRzdC1pY29udjcKKysKKyBpZmVxICgkKGhhdmUtdGhyZWFkLWxpYnJhcnkpLHllcykKKyB0ZXN0cyArPSBidWctaWNvbnYzCisgZW5kaWYKK0BAIC0xMjcsMTMgKzEzMiwxMyBAQCBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorICMgUnVsZSB0byBnZW5lcmF0ZSB0aGUgc2hhcmVkIG9iamVjdHMuCisgY2hhcm1hcHMgPSAuLi9sb2NhbGVkYXRhL2NoYXJtYXBzCisgLWluY2x1ZGUgJChvYmpwZngpaWNvbnYtcnVsZXMKKy1leHRyYS1tb2R1bGVzLWxlZnQgOj0gJChtb2R1bGVzKQorK2V4dHJhLW1vZHVsZXMtbGVmdCA6PSAkKG1vZHVsZXMteSkKKyBpbmNsdWRlIGV4dHJhLW1vZHVsZS5taworIAorIAorIGV4dHJhLW9ianMJKz0gJChtb2R1bGVzLnNvKQorLWluc3RhbGwtb3RoZXJzCT0gJChhZGRwcmVmaXggJChpbnN0X2djb252ZGlyKS8sICQobW9kdWxlcy5zbykpCVwKKy0JCSAgJChpbnN0X2djb252ZGlyKS9nY29udi1tb2R1bGVzCisraW5zdGFsbC1vdGhlcnMteSArPSAkKGFkZHByZWZpeCAkKGluc3RfZ2NvbnZkaXIpLywgJChtb2R1bGVzLnNvKSkKKytpbnN0YWxsLW90aGVycy0kKE9QVElPTl9FR0xJQkNfQ0hBUlNFVFMpICs9ICQoaW5zdF9nY29udmRpcikvZ2NvbnYtbW9kdWxlcworIAorICMgV2UgY2FuIGJ1aWxkIHRoZSBjb252ZXJzaW9uIHRhYmxlcyBmb3IgbnVtZXJvdXMgY2hhcnNldHMgYXV0b21hdGljYWxseS4KKyAKK0BAIC0yMDEsNyArMjA2LDcgQEAgYmVmb3JlLWNvbXBpbGUgKz0gJChhZGRwcmVmaXggJChvYmpwZngpLCQoZ2VuZXJhdGVkLW1vZHVsZXM6PS5oKSkKKyBpZm5kZWYgYXZvaWQtZ2VuZXJhdGVkCisgJChvYmpwZngpaWNvbnYtcnVsZXM6IE1ha2VmaWxlCisgCSQobWFrZS10YXJnZXQtZGlyZWN0b3J5KQorLQl7IGVjaG8gJChmaWx0ZXItb3V0IGxpYiUsICQobW9kdWxlcykpOyBcCisrCXsgZWNobyAkKGZpbHRlci1vdXQgbGliJSwgJChtb2R1bGVzLXkpKTsgXAorIAkgIGVjaG8gOGJpdCAkKGdlbi04Yml0LW1vZHVsZXMpOyBcCisgCSAgZWNobyA4Yml0LWdhcCAkKGdlbi04Yml0LWdhcC1tb2R1bGVzKTsgfSB8IFwKKyAJTENfQUxMPUMgXAorQEAgLTI0NSw3ICsyNTAsNyBAQCAkKGFkZHByZWZpeCAkKGluc3RfZ2NvbnZkaXIpLywgJChtb2R1bGVzLnNvKSk6IFwKKyAJJChkby1pbnN0YWxsLXByb2dyYW0pCisgJChpbnN0X2djb252ZGlyKS9nY29udi1tb2R1bGVzOiBnY29udi1tb2R1bGVzICQoK2ZvcmNlKQorIAkkKGRvLWluc3RhbGwpCistaWZlcSAobm8sJChjcm9zcy1jb21waWxpbmcpKQorKyMgZWdsaWJjOiBpZmVxIChubywkKGNyb3NzLWNvbXBpbGluZykpCisgIyBVcGRhdGUgdGhlICQocHJlZml4KS9saWIvZ2NvbnYvZ2NvbnYtbW9kdWxlcy5jYWNoZSBmaWxlLiBUaGlzIGlzIG5lY2Vzc2FyeQorICMgaWYgdGhpcyBsaWJjIGhhcyBtb3JlIGdjb252IG1vZHVsZXMgdGhhbiB0aGUgcHJldmlvdXNseSBpbnN0YWxsZWQgb25lLgorIAlpZiB0ZXN0IC1mICIkKGluc3RfZ2NvbnZkaXIpL2djb252LW1vZHVsZXMuY2FjaGUiOyB0aGVuIFwKK0BAIC0yNTQsOSArMjU5LDkgQEAgaWZlcSAobm8sJChjcm9zcy1jb21waWxpbmcpKQorIAkgICAkKGNvbW1vbi1vYmpwZngpaWNvbnYvaWNvbnZjb25maWcgXAorIAkgICAgICQoYWRkcHJlZml4IC0tcHJlZml4PSwkKGluc3RhbGxfcm9vdCkpOyBcCisgCWZpCistZWxzZQorLQlAZWNobyAnKkAqQCpAIFlvdSBzaG91bGQgcmVjcmVhdGUgJChpbnN0X2djb252ZGlyKS9nY29udi1tb2R1bGVzLmNhY2hlJworLWVuZGlmCisrIyBlZ2xpYmM6IGVsc2UKKysjIGVnbGliYzoJQGVjaG8gJypAKkAqQCBZb3Ugc2hvdWxkIHJlY3JlYXRlICQoaW5zdF9nY29udmRpcikvZ2NvbnYtbW9kdWxlcy5jYWNoZScKKysjIGVnbGliYzogZW5kaWYKKyAKKyBlbmRpZiAjIGJ1aWxkLXNoYXJlZCA9IHllcworIAorZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0ZGIuaCBiL2luY2x1ZGUvbmV0ZGIuaAoraW5kZXggZTFmMDUxZC4uZjZkMTVhYSAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvbmV0ZGIuaAorKysrIGIvaW5jbHVkZS9uZXRkYi5oCitAQCAtMjMyLDYgKzIzMiwxMCBAQCBleHRlcm4gZW51bSBuc3Nfc3RhdHVzIF9uc3NfICMjIHNlcnZpY2UgIyMgX2dldGhvc3RieW5hbWUyX3IJCSAgICAgIFwKKyAJCSAgICAgICAoY29uc3QgY2hhciAqbmFtZSwgaW50IGFmLCBzdHJ1Y3QgaG9zdGVudCAqaG9zdCwJICAgICAgXAorIAkJCWNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbiwgaW50ICplcnJub3AsCSAgICAgIFwKKyAJCQlpbnQgKmhfZXJybm9wKTsJCQkJCSAgICAgIFwKKytleHRlcm4gZW51bSBuc3Nfc3RhdHVzIF9uc3NfICMjIHNlcnZpY2UgIyMgX2dldGhvc3RieW5hbWUzX3IJCSAgICAgIFwKKysJCSAgICAgICAoY29uc3QgY2hhciAqbmFtZSwgaW50IGFmLCBzdHJ1Y3QgaG9zdGVudCAqcmVzdWx0LCAgICAgXAorKwkJCWNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbiwgaW50ICplcnJub3AsCSAgICAgIFwKKysJCQlpbnQgKmhfZXJybm9wLCBpbnQzMl90ICp0dGxwLCBjaGFyICoqY2Fub25wKTsgICAgICAgICBcCisgZXh0ZXJuIGVudW0gbnNzX3N0YXR1cyBfbnNzXyAjIyBzZXJ2aWNlICMjIF9nZXRob3N0YnluYW1lX3IJCSAgICAgIFwKKyAJCSAgICAgICAoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGhvc3RlbnQgKmhvc3QsIGNoYXIgKmJ1ZmZlciwgXAorIAkJCXNpemVfdCBidWZsZW4sIGludCAqZXJybm9wLCBpbnQgKmhfZXJybm9wKTsJICAgICAgXAorZGlmZiAtLWdpdCBhL2luZXQvTWFrZWZpbGUgYi9pbmV0L01ha2VmaWxlCitpbmRleCBmMWQ4NzFmLi43Y2IxNzA5IDEwMDY0NAorLS0tIGEvaW5ldC9NYWtlZmlsZQorKysrIGIvaW5ldC9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIGluZXQgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBpbmV0CisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMjcsNyArMjksOCBAQCBoZWFkZXJzCTo9IG5ldGluZXQvZXRoZXIuaCBuZXRpbmV0L2luLmggbmV0aW5ldC9pbl9zeXN0bS5oIFwKKyAJICAgbmV0aW5ldC90Y3AuaCBuZXRpbmV0L2lwLmggJCh3aWxkY2FyZCBhcnBhLyouaCBwcm90b2NvbHMvKi5oKSBcCisgCSAgIGFsaWFzZXMuaCBpZmFkZHJzLmggbmV0aW5ldC9pcDYuaCBuZXRpbmV0L2ljbXA2LmggYml0cy9pbi5oCisgCistcm91dGluZXMgOj0gaHRvbmwgaHRvbnMJCVwKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgXAorKwkgKz0gaHRvbmwgaHRvbnMgXAorIAkgICAgaW5ldF9sbmFvZiBpbmV0X21rYWRyCVwKKyAJICAgIGluZXRfbmV0b2YgaW5ldF9udG9hIGluZXRfbmV0IGhlcnJubyBoZXJybm8tbG9jIFwKKyAJICAgIGdldGhzdGJ5YWQgZ2V0aHN0YnlhZF9yIGdldGhzdGJ5bm0gZ2V0aHN0YnlubTIgZ2V0aHN0YnlubTJfciBcCitAQCAtMzksMTggKzQyLDIzIEBAIHJvdXRpbmVzIDo9IGh0b25sIGh0b25zCQlcCisgCSAgICBnZXRzZXJ2ZW50X3IJXAorIAkgICAgZXRoZXJfYXRvbiBldGhlcl9hdG9uX3IgZXRoZXJfaHRvbiBldGhlcl9saW5lIFwKKyAJICAgIGV0aGVyX250b2EgZXRoZXJfbnRvYV9yIGV0aGVyX250b2ggXAorLQkgICAgcmNtZCByZXhlYyBydXNlcnBhc3MgXAorIAkgICAgZ2V0bmV0Z3JlbnRfciBnZXRuZXRncmVudCBcCistCSAgICBnZXRhbGlhc2VudF9yIGdldGFsaWFzZW50IGdldGFsaWFzbmFtZSBnZXRhbGlhc25hbWVfciBcCistCSAgICBpbjZfYWRkciBnZXRuYW1laW5mbyBpZl9pbmRleCBpZmFkZHJzIGluZXQ2X29wdGlvbiBcCisrCSAgICBpbjZfYWRkciBnZXRuYW1laW5mbyBpZl9pbmRleCBpZmFkZHJzIFwKKyAJICAgIGdldGlwdjRzb3VyY2VmaWx0ZXIgc2V0aXB2NHNvdXJjZWZpbHRlciBcCistCSAgICBnZXRzb3VyY2VmaWx0ZXIgc2V0c291cmNlZmlsdGVyIGluZXQ2X29wdCBpbmV0Nl9ydGgKKysJICAgIGdldHNvdXJjZWZpbHRlciBzZXRzb3VyY2VmaWx0ZXIKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfUkNNRCkgXAorKwkgKz0gcmNtZCByZXhlYyBydXNlcnBhc3MKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfREJfQUxJQVNFUykgXAorKwkgKz0gZ2V0YWxpYXNlbnRfciBnZXRhbGlhc2VudCBnZXRhbGlhc25hbWUgZ2V0YWxpYXNuYW1lX3IKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfQURWQU5DRURfSU5FVDYpIFwKKysJICs9IGluZXQ2X29wdGlvbiBpbmV0Nl9vcHQgaW5ldDZfcnRoCisgCistYXV4IDo9IGNoZWNrX3BmIGNoZWNrX25hdGl2ZSBpZnJlcQorK2F1eC0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gY2hlY2tfcGYgY2hlY2tfbmF0aXZlIGlmcmVxCisgCisgdGVzdHMgOj0gaHRvbnRlc3QgdGVzdF9pZmluZGV4IHRzdC1udG9hIHRzdC1ldGhlcl9hdG9uIHRzdC1uZXR3b3JrIFwKKy0JIHRzdC1nZXRobm0gdGVzdC1pZmFkZHJzIGJ1Zy1pZjEgdGVzdC1pbmV0Nl9vcHQgdHN0LWV0aGVyX2xpbmUgXAorKwkgdHN0LWdldGhubSB0ZXN0LWlmYWRkcnMgYnVnLWlmMSB0c3QtZXRoZXJfbGluZSBcCisgCSB0c3QtZ2V0bmkxIHRzdC1nZXRuaTIgdHN0LWluZXQ2X3J0aCB0c3QtY2hlY2tzCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0FEVkFOQ0VEX0lORVQ2KSArPSB0ZXN0LWluZXQ2X29wdAorIAorIGluY2x1ZGUgLi4vUnVsZXMKKyAKK2RpZmYgLS1naXQgYS9pbnRsL01ha2VmaWxlIGIvaW50bC9NYWtlZmlsZQoraW5kZXggOWVjZjhmZS4uNTg3YmMwZCAxMDA2NDQKKy0tLSBhL2ludGwvTWFrZWZpbGUKKysrKyBiL2ludGwvTWFrZWZpbGUKK0BAIC0xNiw2ICsxNiw3IEBACisgIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgCisgIyBNYWtlZmlsZSBmb3IgaW50bCBzdWJkaXJlY3Rvcnk6IG1lc3NhZ2UgaGFuZGxpbmcgY29kZSBmcm9tIEdOVSBnZXR0ZXh0LgorK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKyAKKyBzdWJkaXIgPSBpbnRsCisgCitAQCAtNDgsNyArNDksNyBAQCBlbmRpZgorICQob2JqcGZ4KXBsdXJhbC5vOiBwbHVyYWwuYworIAorIGlmZXEgKCQocnVuLWJ1aWx0LXRlc3RzKSx5ZXMpCistaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKytpZmVxICh5eXllcywkKE9QVElPTl9FR0xJQkNfTE9DQUxFUykkKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpJChidWlsZC1zaGFyZWQpKQorIGlmbmVxICgkKHN0cmlwICQoTVNHRk1UKSksOikKKyB0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KXRzdC10cmFuc2xpdC5vdXQgJChvYmpwZngpdHN0LWdldHRleHQub3V0IFwKKyAJCSAkKG9ianBmeCl0c3QtZ2V0dGV4dDIub3V0ICQob2JqcGZ4KXRzdC1jb2Rlc2V0Lm91dCBcCitkaWZmIC0tZ2l0IGEvaW50bC9kY2lnZXR0ZXh0LmMgYi9pbnRsL2RjaWdldHRleHQuYworaW5kZXggOGEzZjA5MS4uZTI3MTY0OCAxMDA2NDQKKy0tLSBhL2ludGwvZGNpZ2V0dGV4dC5jCisrKysgYi9pbnRsL2RjaWdldHRleHQuYworQEAgLTEwMCwxMSArMTAwLDE1IEBAIGV4dGVybiBpbnQgZXJybm87CisgIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCisgI2VuZGlmCisgI2luY2x1ZGUgImhhc2gtc3RyaW5nLmgiCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorKyNlbmRpZgorIAorIC8qIEhhbmRsZSBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbnMuICAqLworICNpZmRlZiBfTElCQworICMgaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKyAjIGRlZmluZSBnbF9yd2xvY2tfZGVmaW5lX2luaXRpYWxpemVkIF9fbGliY19yd2xvY2tfZGVmaW5lX2luaXRpYWxpemVkCisrIyBkZWZpbmUgZ2xfcndsb2NrX2RlZmluZSBfX2xpYmNfcndsb2NrX2RlZmluZQorICMgZGVmaW5lIGdsX3J3bG9ja19yZGxvY2sgX19saWJjX3J3bG9ja19yZGxvY2sKKyAjIGRlZmluZSBnbF9yd2xvY2tfd3Jsb2NrIF9fbGliY19yd2xvY2tfd3Jsb2NrCisgIyBkZWZpbmUgZ2xfcndsb2NrX3VubG9jayBfX2xpYmNfcndsb2NrX3VubG9jaworQEAgLTUyMyw4ICs1MjcsMTAgQEAgRENJR0VUVEVYVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsCisgICBzYXZlZF9lcnJubyA9IGVycm5vOworIAorICNpZmRlZiBfTElCQworLSAgX19saWJjX3J3bG9ja19kZWZpbmUgKGV4dGVybiwgX19saWJjX3NldGxvY2FsZV9sb2NrIGF0dHJpYnV0ZV9oaWRkZW4pCistICBfX2xpYmNfcndsb2NrX3JkbG9jayAoX19saWJjX3NldGxvY2FsZV9sb2NrKTsKKysjIGlmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKyAgZ2xfcndsb2NrX2RlZmluZSAoZXh0ZXJuLCBfX2xpYmNfc2V0bG9jYWxlX2xvY2sgYXR0cmlidXRlX2hpZGRlbikKKysgIGdsX3J3bG9ja19yZGxvY2sgKF9fbGliY19zZXRsb2NhbGVfbG9jayk7CisrIyBlbmRpZgorICNlbmRpZgorIAorICAgZ2xfcndsb2NrX3JkbG9jayAoX25sX3N0YXRlX2xvY2spOworQEAgLTU1MCw3ICs1NTYsMTEgQEAgRENJR0VUVEVYVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsCisgI2lmZGVmIEhBVkVfUEVSX1RIUkVBRF9MT0NBTEUKKyAjIGlmbmRlZiBJTl9MSUJHTE9DQUxFCisgIyAgaWZkZWYgX0xJQkMKKy0gIGxvY2FsZW5hbWUgPSBzdHJkdXBhIChfX2N1cnJlbnRfbG9jYWxlX25hbWUgKGNhdGVnb3J5KSk7CisrIyAgIGlmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKyAgICAgIGxvY2FsZW5hbWUgPSBzdHJkdXBhIChfX2N1cnJlbnRfbG9jYWxlX25hbWUgKGNhdGVnb3J5KSk7CisrIyAgIGVsc2UKKysgICAgICBsb2NhbGVuYW1lID0gIkMiOworKyMgICBlbmRpZgorICMgIGVsc2UKKyAgIGNhdGVnb3J5bmFtZSA9IGNhdGVnb3J5X3RvX25hbWUgKGNhdGVnb3J5KTsKKyAjICAgZGVmaW5lIENBVEVHT1JZTkFNRV9JTklUSUFMSVpFRAorQEAgLTU4MSwxMCArNTkxLDEyIEBAIERDSUdFVFRFWFQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLAorICAgICAgIGVsc2UKKyAJcmV0dmFsID0gKGNoYXIgKikgKCpmb3VuZHApLT50cmFuc2xhdGlvbjsKKyAKKy0gICAgICBnbF9yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CisgIyBpZmRlZiBfTElCQworLSAgICAgIF9fbGliY19yd2xvY2tfdW5sb2NrIChfX2xpYmNfc2V0bG9jYWxlX2xvY2spOworKyMgIGlmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKyAgICAgIGdsX3J3bG9ja191bmxvY2sgKF9fbGliY19zZXRsb2NhbGVfbG9jayk7CisrIyAgZW5kaWYKKyAjIGVuZGlmCisrICAgICAgZ2xfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworICAgICAgIF9fc2V0X2Vycm5vIChzYXZlZF9lcnJubyk7CisgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgfQorQEAgLTgzOCwxMCArODUwLDEzIEBAIERDSUdFVFRFWFQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLAorIAkgICAgICBpZiAocGx1cmFsKQorIAkJcmV0dmFsID0gcGx1cmFsX2xvb2t1cCAoZG9tYWluLCBuLCByZXR2YWwsIHJldGxlbik7CisgCistCSAgICAgIGdsX3J3bG9ja191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKyAjaWZkZWYgX0xJQkMKKy0JICAgICAgX19saWJjX3J3bG9ja191bmxvY2sgKF9fbGliY19zZXRsb2NhbGVfbG9jayk7CisrIyBpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysKKysJICAgICAgZ2xfcndsb2NrX3VubG9jayAoX19saWJjX3NldGxvY2FsZV9sb2NrKTsKKysjIGVuZGlmCisgI2VuZGlmCisrCSAgICAgIGdsX3J3bG9ja191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKyAJICAgICAgcmV0dXJuIHJldHZhbDsKKyAJICAgIH0KKyAJfQorQEAgLTg1MCwxMCArODY1LDEyIEBAIERDSUdFVFRFWFQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLAorICByZXR1cm5fdW50cmFuc2xhdGVkOgorICAgLyogUmV0dXJuIHRoZSB1bnRyYW5zbGF0ZWQgTVNHSUQuICAqLworICAgRlJFRV9CTE9DS1MgKGJsb2NrX2xpc3QpOworLSAgZ2xfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworICNpZmRlZiBfTElCQworLSAgX19saWJjX3J3bG9ja191bmxvY2sgKF9fbGliY19zZXRsb2NhbGVfbG9jayk7CisrIyBpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysgICBnbF9yd2xvY2tfdW5sb2NrIChfX2xpYmNfc2V0bG9jYWxlX2xvY2spOworKyMgZW5kaWYKKyAjZW5kaWYKKysgIGdsX3J3bG9ja191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKyAjaWZuZGVmIF9MSUJDCisgICBpZiAoIUVOQUJMRV9TRUNVUkUpCisgICAgIHsKK0BAIC0xNTUwLDcgKzE1NjcsMTEgQEAgZ3Vlc3NfY2F0ZWdvcnlfdmFsdWUgKGludCBjYXRlZ29yeSwgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lKQorICAgICAgYExDX3h4eCcsIGFuZCBgTEFORycuICBPbiBzb21lIHN5c3RlbXMgdGhpcyBjYW4gYmUgZG9uZSBieSB0aGUKKyAgICAgIGBzZXRsb2NhbGUnIGZ1bmN0aW9uIGl0c2VsZi4gICovCisgIyBpZmRlZiBfTElCQworKyMgIGlmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgbG9jYWxlID0gX19jdXJyZW50X2xvY2FsZV9uYW1lIChjYXRlZ29yeSk7CisrIyAgZWxzZQorKyAgbG9jYWxlID0gIkMiOworKyMgIGVuZGlmCisgIyBlbHNlCisgICBsb2NhbGVfZGVmYXVsdGVkID0gMDsKKyAjICBpZiBIQVZFX1VTRUxPQ0FMRQorZGlmZiAtLWdpdCBhL2lvL01ha2VmaWxlIGIvaW8vTWFrZWZpbGUKK2luZGV4IDYxM2RjZTAuLjY5NzQzOWUgMTAwNjQ0CistLS0gYS9pby9NYWtlZmlsZQorKysrIGIvaW8vTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBJL08gcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBpbworIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTM2LDcgKzM4LDcgQEAgcm91dGluZXMgOj0JCQkJCQkJCVwKKyAJZnhzdGF0YXQgZnhzdGF0YXQ2NAkJCQkJCVwKKyAJc3RhdGZzIGZzdGF0ZnMgc3RhdGZzNjQgZnN0YXRmczY0CQkJCVwKKyAJc3RhdHZmcyBmc3RhdHZmcyBzdGF0dmZzNjQgZnN0YXR2ZnM2NAkJCQlcCistCXVtYXNrIGNobW9kIGZjaG1vZCBsY2htb2QgZmNobW9kYXQJCQkJXAorKwl1bWFzayBjaG1vZCBmY2htb2QgZmNobW9kYXQJCQkJCVwKKyAJbWtkaXIgbWtkaXJhdAkJCQkJCQlcCisgCW9wZW4gb3Blbl8yIG9wZW42NCBvcGVuNjRfMiBvcGVuYXQgb3BlbmF0XzIgb3BlbmF0NjQgb3BlbmF0NjRfMglcCisgCXJlYWQgd3JpdGUgbHNlZWsgbHNlZWs2NCBhY2Nlc3MgZXVpZGFjY2VzcyBmYWNjZXNzYXQJCVwKK0BAIC00OSwxMSArNTEsMTMgQEAgcm91dGluZXMgOj0JCQkJCQkJCVwKKyAJdHR5bmFtZSB0dHluYW1lX3IgaXNhdHR5CQkJCQlcCisgCWxpbmsgbGlua2F0IHN5bWxpbmsgc3ltbGlua2F0IHJlYWRsaW5rIHJlYWRsaW5rYXQJCVwKKyAJdW5saW5rIHVubGlua2F0IHJtZGlyCQkJCQkJXAorLQlmdHcgZnR3NjQgZnRzIHBvbGwgcHBvbGwJCQkJCVwKKysJcG9sbCBwcG9sbAkJCQkJCQlcCisgCXBvc2l4X2ZhZHZpc2UgcG9zaXhfZmFkdmlzZTY0CQkJCQlcCisgCXBvc2l4X2ZhbGxvY2F0ZSBwb3NpeF9mYWxsb2NhdGU2NAkJCQlcCisgCXNlbmRmaWxlIHNlbmRmaWxlNjQgXAorIAl1dGltZW5zYXQgZnV0aW1lbnMKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfQlNEKSArPSBsY2htb2QKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfRlRSQVZFUlNFKSArPSBmdHcgZnR3NjQgZnRzCisgCisgYXV4IDo9IGhhdmVfb19jbG9leGVjCisgCitAQCAtNjQsMTggKzY4LDIyIEBAIHN0YXRpYy1vbmx5LXJvdXRpbmVzID0gc3RhdCBmc3RhdCBsc3RhdCBzdGF0NjQgZnN0YXQ2NCBsc3RhdDY0CVwKKyAJCSAgICAgICBmc3RhdGF0IGZzdGF0YXQ2NCBta25vZCBta25vZGF0CisgCisgb3RoZXJzCQk6PSBwd2QKKy10ZXN0LXNyY3MJOj0gZnR3dGVzdAorK3Rlc3Qtc3Jjcy0kKE9QVElPTl9FR0xJQkNfRlRSQVZFUlNFKSA6PSBmdHd0ZXN0CisgdGVzdHMJCTo9IHRlc3QtdXRpbWUgdGVzdC1zdGF0IHRlc3Qtc3RhdDIgdGVzdC1sZnMgdHN0LWdldGN3ZCBcCistCQkgICB0c3QtZmNudGwgYnVnLWZ0dzEgYnVnLWZ0dzIgYnVnLWZ0dzMgYnVnLWZ0dzQgdHN0LXN0YXR2ZnMgXAorKwkJICAgdHN0LWZjbnRsIHRzdC1zdGF0dmZzIFwKKyAJCSAgIHRzdC1vcGVuYXQgdHN0LXVubGlua2F0IHRzdC1mc3RhdGF0IHRzdC1mdXRpbWVzYXQgXAorIAkJICAgdHN0LXJlbmFtZWF0IHRzdC1mY2hvd25hdCB0c3QtZmNobW9kYXQgdHN0LWZhY2Nlc3NhdCBcCisgCQkgICB0c3Qtc3ltbGlua2F0IHRzdC1saW5rYXQgdHN0LXJlYWRsaW5rYXQgdHN0LW1rZGlyYXQgXAorLQkJICAgdHN0LW1rbm9kYXQgdHN0LW1rZmlmb2F0IHRzdC10dHluYW1lX3IgYnVnLWZ0dzUgXAorKwkJICAgdHN0LW1rbm9kYXQgdHN0LW1rZmlmb2F0IHRzdC10dHluYW1lX3IgXAorIAkJICAgdHN0LXBvc2l4X2ZhbGxvY2F0ZQorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19GVFJBVkVSU0UpICs9IGJ1Zy1mdHcxIGJ1Zy1mdHcyIGJ1Zy1mdHczIGJ1Zy1mdHc0IFwKKysJCQkJICAgIGJ1Zy1mdHc1CisgCisgaWZlcSAoJChydW4tYnVpbHQtdGVzdHMpLHllcykKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19GVFJBVkVSU0UpKQorIHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpZnR3dGVzdC5vdXQKKyBlbmRpZgorK2VuZGlmCisgCisgaW5jbHVkZSAuLi9SdWxlcworIAorZGlmZiAtLWdpdCBhL2xpYmlkbi9NYWtlZmlsZSBiL2xpYmlkbi9NYWtlZmlsZQoraW5kZXggOTQwZmE1Mi4uNDNhYWQwYyAxMDA2NDQKKy0tLSBhL2xpYmlkbi9NYWtlZmlsZQorKysrIGIvbGliaWRuL01ha2VmaWxlCitAQCAtMTYsNiArMTYsNyBAQAorICMgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIAorICMgTWFrZWZpbGUgZm9yIGxpYmlkbiBzdWJkaXJlY3Rvcnkgb2YgR05VIEMgTGlicmFyeS4KKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisgCisgc3ViZGlyCTo9IGxpYmlkbgorIAorQEAgLTIzLDggKzI0LDggQEAgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCisgcm91dGluZXMgPSBpZG4tc3R1YgorIAorLWV4dHJhLWxpYnMJCT0gbGliY2lkbgorLWV4dHJhLWxpYnMtb3RoZXJzCT0gJChleHRyYS1saWJzKQorK2V4dHJhLWxpYnMtJChPUFRJT05fRUdMSUJDX0lETikgPSBsaWJjaWRuCisrZXh0cmEtbGlicy1vdGhlcnMteSA9ICQoZXh0cmEtbGlicy15KQorIAorIGxpYmNpZG4tcm91dGluZXMgOj0gcHVueWNvZGUgdG91dGY4IG5ma2Mgc3RyaW5ncHJlcCByZmMzNDU0IHByb2ZpbGVzIGlkbmEgXAorIAkJICAgIGljb252bWUKK2RpZmYgLS1naXQgYS9saWJpZG4vdG91dGY4LmMgYi9saWJpZG4vdG91dGY4LmMKK2luZGV4IGM3ZTY3Y2EuLjYyZGY0NzggMTAwNjQ0CistLS0gYS9saWJpZG4vdG91dGY4LmMKKysrKyBiL2xpYmlkbi90b3V0ZjguYworQEAgLTMzLDYgKzMzLDExIEBACisgLyogR2V0IHN0cmxlbi4gKi8KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgCisrLyogR2V0IF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERS4gICovCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorKyNlbmRpZgorKworIC8qIEdldCBpY29udl9zdHJpbmcuICovCisgI2luY2x1ZGUgImljb252bWUuaCIKKyAKK0BAIC00Nyw3ICs1MiwxMSBAQAorICNlbmRpZgorIAorICNpZmRlZiBfTElCQworLSMgZGVmaW5lIHN0cmluZ3ByZXBfbG9jYWxlX2NoYXJzZXQoKSBubF9sYW5naW5mbyAoQ09ERVNFVCkKKysjIGlmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKyMgIGRlZmluZSBzdHJpbmdwcmVwX2xvY2FsZV9jaGFyc2V0KCkgbmxfbGFuZ2luZm8gKENPREVTRVQpCisrIyBlbHNlCisrIyAgZGVmaW5lIHN0cmluZ3ByZXBfbG9jYWxlX2NoYXJzZXQoKSAiQU5TSV9YMy40LTE5NjgiCisrIyBlbmRpZgorICNlbHNlCisgLyoqCisgICogc3RyaW5ncHJlcF9sb2NhbGVfY2hhcnNldCAtIHJldHVybiBjaGFyc2V0IHVzZWQgaW4gY3VycmVudCBsb2NhbGUKK2RpZmYgLS1naXQgYS9saWJpby9NYWtlZmlsZSBiL2xpYmlvL01ha2VmaWxlCitpbmRleCA3YjNiY2Y5Li4yN2M5MTg2IDEwMDY0NAorLS0tIGEvbGliaW8vTWFrZWZpbGUKKysrKyBiL2xpYmlvL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCVNwZWNpZmljIG1ha2VmaWxlIGZvciBsaWJpby4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBsaWJpbworIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTI3LDE2ICsyOSwxMyBAQCBoZWFkZXJzCTo9IHN0ZGlvLmggbGliaW8uaCBfR19jb25maWcuaCBiaXRzL3N0ZGlvLmggYml0cy9zdGRpby1sb2NrLmggXAorIAorIHJvdXRpbmVzCTo9CQkJCQkJCSAgICAgIFwKKyAJZmlsZWRvYWxsb2MgaW9mY2xvc2UgaW9mZG9wZW4gaW9mZmx1c2ggaW9mZ2V0cG9zIGlvZmdldHMgaW9mb3BlbiAgICAgIFwKKy0JaW9mb3BuY29vayBpb2ZwdXRzIGlvZnJlYWQgaW9mc2V0cG9zIGlvZnRlbGwgd2ZpbGVkb2FsbG9jCSAgICAgIFwKKysJaW9mb3BuY29vayBpb2ZwdXRzIGlvZnJlYWQgaW9mc2V0cG9zIGlvZnRlbGwJCQkgICAgICBcCisgCWlvZndyaXRlIGlvZ2V0ZGVsaW0gaW9nZXRsaW5lIGlvZ2V0cyBpb3BhZG4gaW9wb3BlbiBpb3B1dHMJICAgICAgXAorIAlpb3NlZWtvZmYgaW9zZWVrcG9zIGlvc2V0YnVmZmVyIGlvc2V0dmJ1ZiBpb3VuZ2V0YwkJICAgICAgXAorIAlpb3ZzcHJpbnRmIGlvdnNzY2FuZgkJCQkJCSAgICAgIFwKKyAJaW9mZ2V0cG9zNjQgaW9mb3BlbjY0IGlvZnNldHBvczY0CQkJCSAgICAgIFwKKy0JZnB1dHdjIGZwdXR3Y191IGdldHdjIGdldHdjX3UgZ2V0d2NoYXIgZ2V0d2NoYXJfdSBpb2ZnZXR3cyBpb2ZnZXR3c191IFwKKy0JaW9mcHV0d3MgaW9mcHV0d3NfdSBpb2dldHdsaW5lIGlvd3BhZG4gaW91bmdldHdjIHB1dHdjIHB1dHdjX3UJICAgICAgXAorLQlwdXR3Y2hhciBwdXR3Y2hhcl91IHB1dGNoYXIgcHV0Y2hhcl91IGZ3cHJpbnRmIHN3cHJpbnRmIHZ3cHJpbnRmICAgICAgXAorLQl3cHJpbnRmIHdzY2FuZiBmd3NjYW5mIHZ3c2NhbmYgdnN3cHJpbnRmIGlvdnN3c2NhbmYgc3dzY2FuZiB3Z2Vub3BzICAgXAorLQl3c3Ryb3BzIHdmaWxlb3BzIGlvZndpZGUgZndpZGUgd21lbXN0cmVhbQkJCSAgICAgIFwKKysJcHV0Y2hhciBwdXRjaGFyX3UJCQkJCQkgICAgICBcCisrCWlvZndpZGUJCQkJCQkJCSAgICAgIFwKKyAJCQkJCQkJCQkgICAgICBcCisgCWNsZWFyZXJyIGZlb2YgZmVycm9yIGZpbGVubyBmcHV0YyBmcmVvcGVuIGZzZWVrIGdldGMgZ2V0Y2hhcgkgICAgICBcCisgCW1lbXN0cmVhbSBwY2xvc2UgcHV0YyBwdXRjaGFyIHJld2luZCBzZXRidWYgc2V0bGluZWJ1ZiB2YXNwcmludGYgICAgICBcCitAQCAtNDgsMjQgKzQ3LDQ5IEBAIHJvdXRpbmVzCTo9CQkJCQkJCSAgICAgIFwKKyAJCQkJCQkJCQkgICAgICBcCisgCWxpYmNfZmF0YWwgZm1lbW9wZW4gb2xkZm1lbW9wZW4KKyAKKy10ZXN0cyA9IHRzdF9zd3ByaW50ZiB0c3Rfd3ByaW50ZiB0c3Rfc3dzY2FuZiB0c3Rfd3NjYW5mIHRzdF9nZXR3YyB0c3RfcHV0d2MgICBcCistCXRzdF93cHJpbnRmMiB0c3Qtd2lkZXRleHQgdGVzdC1mbWVtb3BlbiB0c3QtZXh0IHRzdC1leHQyIFwKKy0JdHN0LWZnZXR3cyB0c3QtdW5nZXR3YzEgdHN0LXVuZ2V0d2MyIHRzdC1zd3NjYW5mIHRzdC1zc2NhbmYJICAgICAgXAorLQl0c3QtbW1hcC1zZXR2YnVmIGJ1Zy11bmdldHdjMSBidWctdW5nZXR3YzIgdHN0LWF0aW1lIHRzdC1lb2YgICAgICAgICAgXAorLQl0c3QtZnJlb3BlbiBidWctcmV3aW5kIGJ1Zy1yZXdpbmQyIGJ1Zy11bmdldGMgYnVnLWZzZWVrIFwKKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSArPQkJCQkgICAgICBcCisrCXdmaWxlZG9hbGxvYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCWlvd3BhZG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCXN3cHJpbnRmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCXZzd3ByaW50ZiBpb3Zzd3NjYW5mIHN3c2NhbmYgd2dlbm9wcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCXdzdHJvcHMgd2ZpbGVvcHMgd21lbXN0cmVhbQorK3JvdXRpbmVzLSQoY2FsbCBvcHRpb24tZGlzYWJsZWQsIE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSArPQkgICAgICBcCisrCXdkdW1teWZpbGVvcHMKKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPKSArPQkJCQkgICAgICBcCisrCWZwdXR3YyBmcHV0d2NfdSBnZXR3YyBnZXR3Y191IGdldHdjaGFyIGdldHdjaGFyX3UgaW9mZ2V0d3MgaW9mZ2V0d3NfdSBcCisrCWlvZnB1dHdzIGlvZnB1dHdzX3UgaW9nZXR3bGluZSBpb3VuZ2V0d2MgcHV0d2MgcHV0d2NfdSAgICAgICAgICAgICAgICBcCisrCXB1dHdjaGFyIHB1dHdjaGFyX3UgZndwcmludGYgdndwcmludGYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCXdwcmludGYgd3NjYW5mIGZ3c2NhbmYgdndzY2FuZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCWZ3aWRlCisrCisrdGVzdHMgPSB0ZXN0LWZtZW1vcGVuIHRzdC1leHQgdHN0LWV4dDIgXAorKwl0c3QtbW1hcC1zZXR2YnVmIHRzdC1hdGltZSB0c3QtZW9mIFwKKysJdHN0LWZyZW9wZW4gYnVnLXVuZ2V0YyBidWctZnNlZWsgXAorIAl0c3QtbW1hcC1lb2ZzeW5jIHRzdC1tbWFwLWZmbHVzaHN5bmMgYnVnLW1tYXAtZmZsdXNoIFwKKy0JdHN0LW1tYXAyLWVvZnN5bmMgdHN0LW1tYXAtb2ZmZW5kIGJ1Zy1mb3BlbmErIGJ1Zy13ZmZsdXNoIFwKKy0JYnVnLXVuZ2V0YzIgYnVnLWZ0ZWxsIGJ1Zy11bmdldGMzIGJ1Zy11bmdldGM0IHRzdC1mb3BlbmxvYzIgXAorKwl0c3QtbW1hcDItZW9mc3luYyB0c3QtbW1hcC1vZmZlbmQgYnVnLWZvcGVuYSsgXAorKwlidWctdW5nZXRjMiBidWctdW5nZXRjMyBidWctdW5nZXRjNCBcCisgCXRzdC1tZW1zdHJlYW0xIHRzdC1tZW1zdHJlYW0yIFwKKy0JdHN0LXdtZW1zdHJlYW0xIHRzdC13bWVtc3RyZWFtMiBcCistCWJ1Zy1tZW1zdHJlYW0xIGJ1Zy13bWVtc3RyZWFtMSBcCistCXRzdC1zZXR2YnVmMSB0c3QtcG9wZW4xIHRzdC1mZ2V0d2MgYnVnLXdzZXRwb3MgdHN0LWZzZWVrIFwKKy0JdHN0LWZ3cml0ZS1lcnJvciB0c3QtZnRlbGwtcGFydGlhbC13aWRlIHRzdC1mdGVsbC1hY3RpdmUtaGFuZGxlciBcCistCXRzdC1mdGVsbC1hcHBlbmQgdHN0LWZwdXR3cworKwlidWctbWVtc3RyZWFtMSB0c3QtcG9wZW4xIHRzdC1md3JpdGUtZXJyb3IgXAorKwl0c3QtZnRlbGwtYWN0aXZlLWhhbmRsZXIgdHN0LWZ0ZWxsLWFwcGVuZAorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgXAorKwkrPSB0c3Qtc3dzY2FuZiB0c3QtZmdldHdzIHRzdC1zZXR2YnVmMSBcCisrCXRzdC11bmdldHdjMSB0c3QtdW5nZXR3YzIgYnVnLWZ0ZWxsIGJ1Zy11bmdldHdjMiBcCisrCXRzdC13aWRldGV4dCB0c3QtZnB1dHdzCisrdGVzdHMtJChPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTykgXAorKwkrPSBidWctcmV3aW5kIGJ1Zy1yZXdpbmQyIGJ1Zy11bmdldHdjMSBcCisrCWJ1Zy13ZmZsdXNoIGJ1Zy13bWVtc3RyZWFtMSB0c3QtZm9wZW5sb2MyIFwKKysJdHN0X2dldHdjIFwKKysJdHN0X3B1dHdjIHRzdF93cHJpbnRmIHRzdF93cHJpbnRmMiB0c3Rfd3NjYW5mIFwKKysJdHN0LWZnZXR3YyBidWctd3NldHBvcyB0c3QtZnNlZWsgdHN0LWZ0ZWxsLXBhcnRpYWwtd2lkZQorK3Rlc3RzLSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpIFwKKysJKz0gdHN0X3N3cHJpbnRmIHRzdF9zd3NjYW5mIFwKKysJdHN0LXNzY2FuZiBcCisrCXRzdC13bWVtc3RyZWFtMSB0c3Qtd21lbXN0cmVhbTIKKysKKyBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorICMgQWRkIHRlc3QtZm9wZW5sb2Mgb25seSBpZiBzaGFyZWQgbGlicmFyeSBpcyBlbmFibGVkIHNpbmNlIGl0IGRlcGVuZHMgb24KKyAjIHNoYXJlZCBsb2NhbGVkYXRhIG9iamVjdHMuCistdGVzdHMgKz0gdHN0LWZvcGVubG9jCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSArPSB0c3QtZm9wZW5sb2MKKyBlbmRpZgorIHRlc3Qtc3JjcyA9IHRlc3QtZnJlb3BlbgorIAorQEAgLTE2NCwxMyArMTg4LDE3IEBAIHNoYXJlZC1vbmx5LXJvdXRpbmVzID0gb2xkaW9mb3BlbiBvbGRpb2Zkb3BlbiBvbGRpb2ZjbG9zZSBvbGRmaWxlb3BzCVwKKyAJCSAgICAgICBvbGRpb2ZzZXRwb3M2NAorIAorIGlmZXEgKCQocnVuLWJ1aWx0LXRlc3RzKSx5ZXMpCisraWZlcSAoeSwkKE9QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPKSkKKyB0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KXRlc3QtZnJlb3Blbi5vdXQKKytlbmRpZgorK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSkKKyBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorICMgUnVuIHRzdC1mb3BlbmxvYy1jbXAub3V0IGFuZCB0c3Qtb3BlbmxvYy1tZW0ub3V0IG9ubHkgaWYgc2hhcmVkCisgIyBsaWJyYXJ5IGlzIGVuYWJsZWQgc2luY2UgdGhleSBkZXBlbmQgb24gdHN0LWZvcGVubG9jLm91dC4KKyB0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KXRzdC1mb3BlbmxvYy1jbXAub3V0ICQob2JqcGZ4KXRzdC1mb3BlbmxvYy1tZW0ub3V0CisgZW5kaWYKKyBlbmRpZgorK2VuZGlmCisgCisgaW5jbHVkZSAuLi9SdWxlcworIAorZGlmZiAtLWdpdCBhL2xpYmlvL19fZnB1cmdlLmMgYi9saWJpby9fX2ZwdXJnZS5jCitpbmRleCAwNjVjZjYxLi5lMzJhM2U5IDEwMDY0NAorLS0tIGEvbGliaW8vX19mcHVyZ2UuYworKysrIGIvbGliaW8vX19mcHVyZ2UuYworQEAgLTIxLDcgKzIxLDcgQEAKKyB2b2lkCisgX19mcHVyZ2UgKEZJTEUgKmZwKQorIHsKKy0gIGlmIChmcC0+X21vZGUgPiAwKQorKyAgaWYgKF9JT19pc193aWRlIChmcCkpCisgICAgIHsKKyAgICAgICAvKiBXaWRlLWNoYXIgc3RyZWFtLiAgKi8KKyAgICAgICBpZiAoX0lPX2luX2JhY2t1cCAoZnApKQorZGlmZiAtLWdpdCBhL2xpYmlvL2ZpbGVvcHMuYyBiL2xpYmlvL2ZpbGVvcHMuYworaW5kZXggY2JjZDZmNS4uMTllNDNjMiAxMDA2NDQKKy0tLSBhL2xpYmlvL2ZpbGVvcHMuYworKysrIGIvbGliaW8vZmlsZW9wcy5jCitAQCAtMzksNiArMzksNyBAQAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpZiBfTElCQworICMgaW5jbHVkZSAiLi4vd2NzbWJzL3djc21ic2xvYWQuaCIKK0BAIC0xNzMsNyArMTc0LDcgQEAgX0lPX25ld19maWxlX2Nsb3NlX2l0IChfSU9fRklMRSAqZnApCisgCisgICAvKiBGcmVlIGJ1ZmZlci4gKi8KKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIF9HTElCQ1BQX1VTRV9XQ0hBUl9UCistICBpZiAoZnAtPl9tb2RlID4gMCkKKysgIGlmIChfSU9faXNfd2lkZSAoZnApKQorICAgICB7CisgICAgICAgaWYgKF9JT19oYXZlX3diYWNrdXAgKGZwKSkKKyAJX0lPX2ZyZWVfd2JhY2t1cF9hcmVhIChmcCk7CitAQCAtMzQ4LDYgKzM0OSw3IEBAIF9JT19uZXdfZmlsZV9mb3BlbiAoX0lPX0ZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSwKKyAgICAgICBjcyA9IHN0cnN0ciAobGFzdF9yZWNvZ25pemVkICsgMSwgIixjY3M9Iik7CisgICAgICAgaWYgKGNzICE9IE5VTEwpCisgCXsKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIAkgIC8qIFllcC4gIExvYWQgdGhlIGFwcHJvcHJpYXRlIGNvbnZlcnNpb25zIGFuZCBzZXQgdGhlIG9yaWVudGF0aW9uCisgCSAgICAgdG8gd2lkZS4gICovCisgCSAgc3RydWN0IGdjb252X2ZjdHMgZmN0czsKK0BAIC00MTgsNiArNDIwLDEyIEBAIF9JT19uZXdfZmlsZV9mb3BlbiAoX0lPX0ZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSwKKyAKKyAJICAvKiBTZXQgdGhlIG1vZGUgbm93LiAgKi8KKyAJICByZXN1bHQtPl9tb2RlID0gMTsKKysjZWxzZQorKyAgICAgICAgICAvKiBUcmVhdCB0aGlzIGFzIGlmIHdlIGNvdWxkbid0IGZpbmQgdGhlIGdpdmVuIGNoYXJhY3RlciBzZXQuICAqLworKyAgICAgICAgICAodm9pZCkgX0lPX2ZpbGVfY2xvc2VfaXQgKGZwKTsKKysgICAgICAgICAgX19zZXRfZXJybm8gKEVJTlZBTCk7CisrICAgICAgICAgIHJldHVybiBOVUxMOworKyNlbmRpZgorIAl9CisgICAgIH0KKyAKK2RpZmYgLS1naXQgYS9saWJpby9pb2Z3aWRlLmMgYi9saWJpby9pb2Z3aWRlLmMKK2luZGV4IDBjMTc1ZDEuLjNlOWY1MmIgMTAwNjQ0CistLS0gYS9saWJpby9pb2Z3aWRlLmMKKysrKyBiL2xpYmlvL2lvZndpZGUuYworQEAgLTI2LDYgKzI2LDcgQEAKKyAKKyAjaW5jbHVkZSA8bGliaW9QLmg+CisgI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICMgaW5jbHVkZSA8ZGxmY24uaD4KKyAjIGluY2x1ZGUgPHdjaGFyLmg+CisgI2VuZGlmCitAQCAtNDMsNiArNDQsOCBAQAorICNlbmRpZgorIAorIAorKyNpZiAhIGRlZmluZWQgX0xJQkMgfHwgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorKworIC8qIFByb3RvdHlwZXMgb2YgbGliaW8ncyBjb2RlY3Z0IGZ1bmN0aW9ucy4gICovCisgc3RhdGljIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCBkb19vdXQgKHN0cnVjdCBfSU9fY29kZWN2dCAqY29kZWN2dCwKKyAJCQkJICAgICBfX21ic3RhdGVfdCAqc3RhdGVwLAorQEAgLTQ5OSwzICs1MDIsMjYgQEAgZG9fbWF4X2xlbmd0aCAoc3RydWN0IF9JT19jb2RlY3Z0ICpjb2RlY3Z0KQorICAgcmV0dXJuIE1CX0NVUl9NQVg7CisgI2VuZGlmCisgfQorKworKyNlbHNlCisrLyogT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgaXMgZGlzYWJsZWQuICAqLworKworKyN1bmRlZiBfSU9fZndpZGUKKytpbnQKKytfSU9fZndpZGUgKGZwLCBtb2RlKQorKyAgICAgX0lPX0ZJTEUgKmZwOworKyAgICAgaW50IG1vZGU7CisreworKyAgLyogRGllIGhlbHBmdWxseSBpZiB0aGUgdXNlciB0cmllcyB0byBjcmVhdGUgYSB3aWRlIHN0cmVhbTsgSQorKyAgICAgZGlzYmVsaWV2ZSB0aGF0IG1vc3QgdXNlcnMgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBmcm9tCisrICAgICAnZndpZGUgKGZwLCAxKScuICAqLworKyAgYXNzZXJ0IChtb2RlIDw9IDApOworKworKyAgLyogV2UgY2FuIG9ubHkgbWFrZSBzdHJlYW1zIGJ5dGUtb3JpZW50ZWQsIHdoaWNoIGlzIHRyaXZpYWwuICAqLworKyAgaWYgKG1vZGUgPCAwKQorKyAgICBmcC0+X21vZGUgPSAtMTsKKysKKysgIHJldHVybiBmcC0+X21vZGU7CisrfQorKworKyNlbmRpZgorZGlmZiAtLWdpdCBhL2xpYmlvL2lvc2Vla29mZi5jIGIvbGliaW8vaW9zZWVrb2ZmLmMKK2luZGV4IDExNzY1Y2YuLjE1ZDYyMzAgMTAwNjQ0CistLS0gYS9saWJpby9pb3NlZWtvZmYuYworKysrIGIvbGliaW8vaW9zZWVrb2ZmLmMKK0BAIC02MCw3ICs2MCw3IEBAIF9JT19zZWVrb2ZmX3VubG9ja2VkIChmcCwgb2Zmc2V0LCBkaXIsIG1vZGUpCisgCSAgZWxzZQorIAkgICAgYWJvcnQgKCk7CisgCX0KKy0gICAgICBpZiAoX0lPX2Z3aWRlIChmcCwgMCkgPCAwKQorKyAgICAgIGlmICghIF9JT19pc193aWRlIChmcCkpCisgCV9JT19mcmVlX2JhY2t1cF9hcmVhIChmcCk7CisgICAgICAgZWxzZQorIAlfSU9fZnJlZV93YmFja3VwX2FyZWEgKGZwKTsKK2RpZmYgLS1naXQgYS9saWJpby9pb3NlZWtwb3MuYyBiL2xpYmlvL2lvc2Vla3Bvcy5jCitpbmRleCBhNzY1MmExLi42OTM4YjY4IDEwMDY0NAorLS0tIGEvbGliaW8vaW9zZWVrcG9zLmMKKysrKyBiL2xpYmlvL2lvc2Vla3Bvcy5jCitAQCAtMzUsNyArMzUsNyBAQCBfSU9fc2Vla3Bvc191bmxvY2tlZCAoZnAsIHBvcywgbW9kZSkKKyAgIC8qIElmIHdlIGhhdmUgYSBiYWNrdXAgYnVmZmVyLCBnZXQgcmlkIG9mIGl0LCBzaW5jZSB0aGUgX19zZWVrb2ZmCisgICAgICBjYWxsYmFjayBtYXkgbm90IGtub3cgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nIGFib3V0IGl0LgorICAgICAgVGhpcyBtYXkgYmUgb3Zlci1raWxsLCBidXQgaXQnbGwgZG8gZm9yIG5vdy4gVE9ETyAqLworLSAgaWYgKF9JT19md2lkZSAoZnAsIDApIDw9IDApCisrICBpZiAoISBfSU9faXNfd2lkZSAoZnApKQorICAgICB7CisgICAgICAgaWYgKF9JT19oYXZlX2JhY2t1cCAoZnApKQorIAlfSU9fZnJlZV9iYWNrdXBfYXJlYSAoZnApOworZGlmZiAtLWdpdCBhL2xpYmlvL2lvc2V0YnVmZmVyLmMgYi9saWJpby9pb3NldGJ1ZmZlci5jCitpbmRleCAwYTQxYzEwLi4zZDk5ZmEwIDEwMDY0NAorLS0tIGEvbGliaW8vaW9zZXRidWZmZXIuYworKysrIGIvbGliaW8vaW9zZXRidWZmZXIuYworQEAgLTI0LDYgKzI0LDggQEAKKyAgICBUaGlzIGV4Y2VwdGlvbiBhcHBsaWVzIHRvIGNvZGUgcmVsZWFzZWQgYnkgaXRzIGNvcHlyaWdodCBob2xkZXJzCisgICAgaW4gZmlsZXMgY29udGFpbmluZyB0aGUgZXhjZXB0aW9uLiAgKi8KKyAKKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKysKKyAjaW5jbHVkZSAibGliaW9QLmgiCisgCisgdm9pZAorQEAgLTM4LDkgKzQwLDExIEBAIF9JT19zZXRidWZmZXIgKGZwLCBidWYsIHNpemUpCisgICBpZiAoIWJ1ZikKKyAgICAgc2l6ZSA9IDA7CisgICAodm9pZCkgX0lPX1NFVEJVRiAoZnAsIGJ1Ziwgc2l6ZSk7CisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKyAgIGlmIChfSU9fdnRhYmxlX29mZnNldCAoZnApID09IDAgJiYgZnAtPl9tb2RlID09IDAgJiYgX0lPX0NIRUNLX1dJREUgKGZwKSkKKyAgICAgLyogV2UgYWxzbyBoYXZlIHRvIHNldCB0aGUgYnVmZmVyIHVzaW5nIHRoZSB3aWRlIGNoYXIgZnVuY3Rpb24uICAqLworICAgICAodm9pZCkgX0lPX1dTRVRCVUYgKGZwLCBidWYsIHNpemUpOworKyNlbmRpZiAvKiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSICovCisgICBfSU9fcmVsZWFzZV9sb2NrIChmcCk7CisgfQorIGxpYmNfaGlkZGVuX2RlZiAoX0lPX3NldGJ1ZmZlcikKK2RpZmYgLS1naXQgYS9saWJpby9saWJpb1AuaCBiL2xpYmlvL2xpYmlvUC5oCitpbmRleCAwZjE2ZTJkLi5kMjYyNmQ2IDEwMDY0NAorLS0tIGEvbGliaW8vbGliaW9QLmgKKysrKyBiL2xpYmlvL2xpYmlvUC5oCitAQCAtNDQsNiArNDQsMTAgQEAKKyAvKiMgaW5jbHVkZSA8Y29tdGhyZWFkLmg+Ki8KKyAjZW5kaWYKKyAKKysjaWYgZGVmaW5lZCBfTElCQworKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSA8bWF0aF9sZGJsX29wdC5oPgorIAorICNpbmNsdWRlICJpb2xpYmlvLmgiCitAQCAtNTIzLDggKzUyNywyMCBAQCBleHRlcm4gdm9pZCBfSU9fb2xkX2luaXQgKF9JT19GSUxFICpmcCwgaW50IGZsYWdzKSBfX1RIUk9XOworIAorIAorICNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgX0dMSUJDUFBfVVNFX1dDSEFSX1QKKysKKysvKiBfSU9faXNfd2lkZSAoZnApIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byAnX0lPX2Z3aWRlIChmcCwgMCkgPiAwJywKKysgICBleGNlcHQgdGhhdCB3aGVuIE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSIGlzIGRpc2FibGVkLCBpdAorKyAgIGV4cGFuZHMgdG8gYSBjb25zdGFudCwgYWxsb3dpbmcgdGhlIGNvbXBpbGVyIHRvIHJlYWxpemUgdGhhdCBpdCBjYW4KKysgICBlbGltaW5hdGUgY29kZSB0aGF0IHJlZmVyZW5jZXMgd2lkZSBzdHJlYW0gaGFuZGxpbmcgZnVuY3Rpb25zLgorKyAgIFRoaXMsIGluIHR1cm4sIGFsbG93cyB1cyB0byBvbWl0IHRoZW0uICAqLworKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisrIyBkZWZpbmUgX0lPX2lzX3dpZGUoX2YpICgoX2YpLT5fbW9kZSA+IDApCisrI2Vsc2UKKysjIGRlZmluZSBfSU9faXNfd2lkZShfZikgKDApCisrI2VuZGlmCisrCisgIyBkZWZpbmUgX0lPX2RvX2ZsdXNoKF9mKSBcCistICAoKF9mKS0+X21vZGUgPD0gMAkJCQkJCQkgICAgICBcCisrICAoISBfSU9faXNfd2lkZSAoX2YpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgID8gX0lPX2RvX3dyaXRlKF9mLCAoX2YpLT5fSU9fd3JpdGVfYmFzZSwJCQkJICAgICAgXAorIAkJICAoX2YpLT5fSU9fd3JpdGVfcHRyLShfZiktPl9JT193cml0ZV9iYXNlKQkJICAgICAgXAorICAgIDogX0lPX3dkb193cml0ZShfZiwgKF9mKS0+X3dpZGVfZGF0YS0+X0lPX3dyaXRlX2Jhc2UsCQkgICAgICBcCitkaWZmIC0tZ2l0IGEvbGliaW8vd2R1bW15ZmlsZW9wcy5jIGIvbGliaW8vd2R1bW15ZmlsZW9wcy5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYzAxNTBiOAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGliaW8vd2R1bW15ZmlsZW9wcy5jCitAQCAtMCwwICsxLDE2MSBAQAorKy8qIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4KKysKKysgICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpZiB5b3UgbGluayB0aGUgY29kZSBpbiB0aGlzIGZpbGUgd2l0aAorKyAgIGZpbGVzIGNvbXBpbGVkIHdpdGggYSBHTlUgY29tcGlsZXIgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLAorKyAgIHRoYXQgZG9lcyBub3QgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysgICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QKKysgICBob3dldmVyIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUKKysgICBtaWdodCBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrICAgVGhpcyBleGNlcHRpb24gYXBwbGllcyB0byBjb2RlIHJlbGVhc2VkIGJ5IGl0cyBjb3B5cmlnaHQgaG9sZGVycworKyAgIGluIGZpbGVzIGNvbnRhaW5pbmcgdGhlIGV4Y2VwdGlvbi4gICovCisrCisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8bGliaW9QLmg+CisrCisrc3RhdGljIHZvaWQgX19USFJPVyBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSkKKytfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKHZvaWQpCisreworKyAgc3RhdGljIGNvbnN0IGNoYXIgZXJyc3RyW10KKysgICAgPSAoIlRoZSBhcHBsaWNhdGlvbiB0cmllZCB0byB1c2Ugd2lkZSBjaGFyYWN0ZXIgSS9PLCBidXQgbGliYy5zbyIKKysgICAgICAgIiB3YXMgY29tcGlsZWRcbiIKKysgICAgICAgIndpdGggdGhlIE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSIG9wdGlvbiBncm91cCBkaXNhYmxlZC5cbiIpOworKyAgX19saWJjX3dyaXRlIChTVERFUlJfRklMRU5PLCBlcnJzdHIsIHNpemVvZiAoZXJyc3RyKSAtIDEpOworKyAgYWJvcnQgKCk7CisrfQorKworK3N0YXRpYyB2b2lkCisrX0lPX3dmaWxlX2Rpc2FibGVkX3ZvaWRfaW50IChfSU9fRklMRSAqZnAsIGludCB4KQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIGludAorK19JT193ZmlsZV9kaXNhYmxlZF9pbnRfaW50IChfSU9fRklMRSAqZnAsIGludCB4KQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIGludAorK19JT193ZmlsZV9kaXNhYmxlZF9pbnRfbm9uZSAoX0lPX0ZJTEUgKmZwKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIF9JT19zaXplX3QKKytfSU9fd2ZpbGVfZGlzYWJsZWRfeHNwdXRuIChfSU9fRklMRSAqZnAsIGNvbnN0IHZvaWQgKmRhdGEsIF9JT19zaXplX3QgbikKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBfSU9fc2l6ZV90CisrX0lPX3dmaWxlX2Rpc2FibGVkX3hzZ2V0biAoX0lPX0ZJTEUgKmZwLCB2b2lkICpkYXRhLCBfSU9fc2l6ZV90IG4pCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgX0lPX29mZjY0X3QKKytfSU9fd2ZpbGVfZGlzYWJsZWRfc2Vla29mZiAoX0lPX0ZJTEUgKmZwLCBfSU9fb2ZmNjRfdCBvZmYsIGludCBkaXIsIGludCBtb2RlKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIF9JT19vZmY2NF90CisrX0lPX3dmaWxlX2Rpc2FibGVkX3NlZWtwb3MgKF9JT19GSUxFICpmcCwgX0lPX29mZjY0X3QgcG9zLCBpbnQgZmxhZ3MpCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgX0lPX0ZJTEUgKgorK19JT193ZmlsZV9kaXNhYmxlZF9zZXRidWYgKF9JT19GSUxFICpmcCwgY2hhciAqYnVmZmVyLCBfSU9fc3NpemVfdCBsZW5ndGgpCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgX0lPX3NzaXplX3QKKytfSU9fd2ZpbGVfZGlzYWJsZWRfcmVhZCAoX0lPX0ZJTEUgKmZwLCB2b2lkICpidWZmZXIsIF9JT19zc2l6ZV90IGxlbmd0aCkKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBfSU9fc3NpemVfdAorK19JT193ZmlsZV9kaXNhYmxlZF93cml0ZSAoX0lPX0ZJTEUgKmZwLCBjb25zdCB2b2lkICpidWZmZXIsIF9JT19zc2l6ZV90IGxlbmd0aCkKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBfSU9fb2ZmNjRfdAorK19JT193ZmlsZV9kaXNhYmxlZF9zZWVrIChfSU9fRklMRSAqZnAsIF9JT19vZmY2NF90IG9mZnNldCwgaW50IG1vZGUpCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgaW50CisrX0lPX3dmaWxlX2Rpc2FibGVkX2Nsb3NlIChfSU9fRklMRSAqZnApCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgaW50CisrX0lPX3dmaWxlX2Rpc2FibGVkX3N0YXQgKF9JT19GSUxFICpmcCwgdm9pZCAqYnVmKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIGludAorK19JT193ZmlsZV9kaXNhYmxlZF9zaG93bWFueWMgKF9JT19GSUxFICpmcCkKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyB2b2lkCisrX0lPX3dmaWxlX2Rpc2FibGVkX2ltYnVlIChfSU9fRklMRSAqZnAsIHZvaWQgKmxvY2FsZSkKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgX0lPX2p1bXBfdCBfSU9fd2ZpbGVfanVtcHNfZGlzYWJsZWQgPQorK3sKKysgIEpVTVBfSU5JVF9EVU1NWSwKKysgIEpVTVBfSU5JVChmaW5pc2gsIF9JT193ZmlsZV9kaXNhYmxlZF92b2lkX2ludCksCisrICBKVU1QX0lOSVQob3ZlcmZsb3csIF9JT193ZmlsZV9kaXNhYmxlZF9pbnRfaW50KSwKKysgIEpVTVBfSU5JVCh1bmRlcmZsb3csIF9JT193ZmlsZV9kaXNhYmxlZF9pbnRfbm9uZSksCisrICBKVU1QX0lOSVQodWZsb3csIF9JT193ZmlsZV9kaXNhYmxlZF9pbnRfbm9uZSksCisrICBKVU1QX0lOSVQocGJhY2tmYWlsLCBfSU9fd2ZpbGVfZGlzYWJsZWRfaW50X2ludCksCisrICBKVU1QX0lOSVQoeHNwdXRuLCBfSU9fd2ZpbGVfZGlzYWJsZWRfeHNwdXRuKSwKKysgIEpVTVBfSU5JVCh4c2dldG4sIF9JT193ZmlsZV9kaXNhYmxlZF94c2dldG4pLAorKyAgSlVNUF9JTklUKHNlZWtvZmYsIF9JT193ZmlsZV9kaXNhYmxlZF9zZWVrb2ZmKSwKKysgIEpVTVBfSU5JVChzZWVrcG9zLCBfSU9fd2ZpbGVfZGlzYWJsZWRfc2Vla3BvcyksCisrICBKVU1QX0lOSVQoc2V0YnVmLCBfSU9fd2ZpbGVfZGlzYWJsZWRfc2V0YnVmKSwKKysgIEpVTVBfSU5JVChzeW5jLCBfSU9fd2ZpbGVfZGlzYWJsZWRfaW50X25vbmUpLAorKyAgSlVNUF9JTklUKGRvYWxsb2NhdGUsIF9JT193ZmlsZV9kaXNhYmxlZF9pbnRfbm9uZSksCisrICBKVU1QX0lOSVQocmVhZCwgX0lPX3dmaWxlX2Rpc2FibGVkX3JlYWQpLAorKyAgSlVNUF9JTklUKHdyaXRlLCBfSU9fd2ZpbGVfZGlzYWJsZWRfd3JpdGUpLAorKyAgSlVNUF9JTklUKHNlZWssIF9JT193ZmlsZV9kaXNhYmxlZF9zZWVrKSwKKysgIEpVTVBfSU5JVChjbG9zZSwgX0lPX3dmaWxlX2Rpc2FibGVkX2Nsb3NlKSwKKysgIEpVTVBfSU5JVChzdGF0LCBfSU9fd2ZpbGVfZGlzYWJsZWRfc3RhdCksCisrICBKVU1QX0lOSVQoc2hvd21hbnljLCBfSU9fd2ZpbGVfZGlzYWJsZWRfc2hvd21hbnljKSwKKysgIEpVTVBfSU5JVChpbWJ1ZSwgX0lPX3dmaWxlX2Rpc2FibGVkX2ltYnVlKQorK307CisrCisrc3Ryb25nX2FsaWFzIChfSU9fd2ZpbGVfanVtcHNfZGlzYWJsZWQsIF9JT193ZmlsZV9qdW1wcykKKytsaWJjX2hpZGRlbl9kYXRhX2RlZiAoX0lPX3dmaWxlX2p1bXBzKQorK3N0cm9uZ19hbGlhcyAoX0lPX3dmaWxlX2p1bXBzX2Rpc2FibGVkLCBfSU9fd2ZpbGVfanVtcHNfbW1hcCkKKytzdHJvbmdfYWxpYXMgKF9JT193ZmlsZV9qdW1wc19kaXNhYmxlZCwgX0lPX3dmaWxlX2p1bXBzX21heWJlX21tYXApCitkaWZmIC0tZ2l0IGEvbG9jYWxlL0MtY3R5cGUuYyBiL2xvY2FsZS9DLWN0eXBlLmMKK2luZGV4IGFhNWYxOWYuLjA2YmUwODEgMTAwNjQ0CistLS0gYS9sb2NhbGUvQy1jdHlwZS5jCisrKysgYi9sb2NhbGUvQy1jdHlwZS5jCitAQCAtMTksOCArMTksMTEgQEAKKyAjaW5jbHVkZSAibG9jYWxlaW5mby5oIgorICNpbmNsdWRlIDxlbmRpYW4uaD4KKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICNpbmNsdWRlICJDLXRyYW5zbGl0LmgiCisrI2VuZGlmCisgCisgLyogVGhpcyB0YWJsZSdzIGVudHJpZXMgYXJlIHRha2VuIGZyb20gUE9TSVguMiBUYWJsZSAyLTYKKyAgICBgYExDX0NUWVBFIENhdGVnb3J5IERlZmluaXRpb24gaW4gdGhlIFBPU0lYIExvY2FsZScnLgorQEAgLTYzNCw2ICs2MzcsNyBAQCBjb25zdCBzdHJ1Y3QgX19sb2NhbGVfZGF0YSBfbmxfQ19MQ19DVFlQRSBhdHRyaWJ1dGVfaGlkZGVuID0KKyAgICAgeyAud29yZCA9IEwnNycgfSwKKyAgICAgeyAud29yZCA9IEwnOCcgfSwKKyAgICAgeyAud29yZCA9IEwnOScgfSwKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICAgIC8qIF9OTF9DVFlQRV9UUkFOU0xJVF9UQUJfU0laRSAqLworICAgICB7IC53b3JkID0gTlRSQU5TTElUIH0sCisgICAgIC8qIF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX0lEWCAqLworQEAgLTY0NCw2ICs2NDgsMjIgQEAgY29uc3Qgc3RydWN0IF9fbG9jYWxlX2RhdGEgX25sX0NfTENfQ1RZUEUgYXR0cmlidXRlX2hpZGRlbiA9CisgICAgIHsgLndzdHIgPSB0cmFuc2xpdF90b19pZHggfSwKKyAgICAgLyogX05MX0NUWVBFX1RSQU5TTElUX1RPX1RCTCAqLworICAgICB7IC53c3RyID0gKHVpbnQzMl90ICopIHRyYW5zbGl0X3RvX3RibCB9LAorKyNlbHNlCisrICAgIC8qIElmIHRoZSBsb2NhbGUgY29kZSBpc24ndCBlbmFibGVkLCB3ZSBkb24ndCBoYXZlIHRoZQorKyAgICAgICB0cmFuc2xpdGVyYXRpb24gY29kZSBpbiBpY29udi9nY29udl90cmFucy5jIGFueXdheSwgc28gdGhlcmUncworKyAgICAgICBubyBuZWVkIGZvciB0aGUgdHJhbnNsaXRlcmF0aW9uIHRhYmxlcyBoZXJlLiAgV2UnbGwgZmFsbCBiYWNrCisrICAgICAgIG9uIHRoZSBkZWZhdWx0IG1pc3NpbmcgcmVwbGFjZW1lbnQsICc/Jy4gICovCisrICAgIC8qIF9OTF9DVFlQRV9UUkFOU0xJVF9UQUJfU0laRSAqLworKyAgICB7IC53b3JkID0gMCB9LAorKyAgICAvKiBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJPTV9JRFggKi8KKysgICAgeyAud3N0ciA9IE5VTEwgfSwKKysgICAgLyogX05MX0NUWVBFX1RSQU5TTElUX0ZST01fVEJMICovCisrICAgIHsgLndzdHIgPSBOVUxMIH0sCisrICAgIC8qIF9OTF9DVFlQRV9UUkFOU0xJVF9UT19JRFggKi8KKysgICAgeyAud3N0ciA9IE5VTEwgfSwKKysgICAgLyogX05MX0NUWVBFX1RSQU5TTElUX1RPX1RCTCAqLworKyAgICB7IC53c3RyID0gTlVMTCB9LAorKyNlbmRpZgorICAgICAvKiBfTkxfQ1RZUEVfVFJBTlNMSVRfREVGQVVMVF9NSVNTSU5HX0xFTiAqLworICAgICB7IC53b3JkID0gMSB9LAorICAgICAvKiBfTkxfQ1RZUEVfVFJBTlNMSVRfREVGQVVMVF9NSVNTSU5HICovCitkaWZmIC0tZ2l0IGEvbG9jYWxlL01ha2VmaWxlIGIvbG9jYWxlL01ha2VmaWxlCitpbmRleCBmMWI0MzQzLi41OTlhMWE5IDEwMDY0NAorLS0tIGEvbG9jYWxlL01ha2VmaWxlCisrKysgYi9sb2NhbGUvTWFrZWZpbGUKK0BAIC0xOCwyNyArMTgsNDMgQEAKKyAjCisgIwlNYWtlZmlsZSBmb3IgbG9jYWxlcy4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBsb2NhbGUKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKyBoZWFkZXJzCQk9IGxvY2FsZS5oIGJpdHMvbG9jYWxlLmggbGFuZ2luZm8uaCB4bG9jYWxlLmgKKy1yb3V0aW5lcwk9IHNldGxvY2FsZSBmaW5kbG9jYWxlIGxvYWRsb2NhbGUgbG9hZGFyY2hpdmUgXAorLQkJICBsb2NhbGVjb252IG5sX2xhbmdpbmZvIG5sX2xhbmdpbmZvX2wgbWJfY3VyX21heCBcCistCQkgIG5ld2xvY2FsZSBkdXBsb2NhbGUgZnJlZWxvY2FsZSB1c2Vsb2NhbGUKKy10ZXN0cwkJPSB0c3QtQy1sb2NhbGUgdHN0LWxvY25hbWUgdHN0LWR1cGxvY2FsZQorKyMgY2F0bmFtZXMgaXMgbmVlZGVkIGJ5IE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgYW5kIGJ5IHRoZSAnaW50bCcgY29kZS4KKysjIElmIHdlIHB1dCB0aGUgbGF0dGVyIGluIGFuIG9wdGlvbiBncm91cCwgdG9vLCB3ZSBjYW4gb21pdCBjYXRuYW1lcworKyMgd2hlbiBib3RoIG9wdGlvbiBncm91cHMgYXJlIGRpc2FibGVkLiAgbGlic3RkYysrLXYzIG5lZWRzIG1iX2N1cl9tYXguCisrcm91dGluZXMteSAgICAgIDo9IGNhdG5hbWVzIG1iX2N1cl9tYXgKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpIFwKKysJCSs9IHNldGxvY2FsZSBmaW5kbG9jYWxlIGxvYWRsb2NhbGUgbG9hZGFyY2hpdmUgXAorKwkJICAgbG9jYWxlY29udiBubF9sYW5naW5mbyBubF9sYW5naW5mb19sIFwKKysJCSAgIG5ld2xvY2FsZSBkdXBsb2NhbGUgZnJlZWxvY2FsZSB1c2Vsb2NhbGUKKytpZm5lcSAoeSwkKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpKQorK3JvdXRpbmVzLXkJKz0gZHVtbXktc2V0bG9jYWxlCisrZW5kaWYKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpICs9IHRzdC1DLWxvY2FsZSB0c3QtbG9jbmFtZSB0c3QtZHVwbG9jYWxlCisgY2F0ZWdvcmllcwk9IGN0eXBlIG1lc3NhZ2VzIG1vbmV0YXJ5IG51bWVyaWMgdGltZSBwYXBlciBuYW1lIFwKKyAJCSAgYWRkcmVzcyB0ZWxlcGhvbmUgbWVhc3VyZW1lbnQgaWRlbnRpZmljYXRpb24gY29sbGF0ZQorLWF1eAkJPSAkKGNhdGVnb3JpZXM6JT1sYy0lKSAkKGNhdGVnb3JpZXM6JT1DLSUpIFNZU19saWJjIENfbmFtZSBcCistCQkgIHhsb2NhbGUgbG9jYWxlbmFtZSBnbG9iYWwtbG9jYWxlIGNvbGwtbG9va3VwCistb3RoZXJzCQk9IGxvY2FsZWRlZiBsb2NhbGUKKysjIEMtbWVzc2FnZXMgYmVsb25ncyBpbiBhbiBpbnRsIG9wdGlvbiBncm91cC4KKythdXgteQkJOj0gQy1jdHlwZSBDLXRpbWUgXAorKwkJICAgU1lTX2xpYmMgQ19uYW1lIHhsb2NhbGUgZ2xvYmFsLWxvY2FsZSBjb2xsLWxvb2t1cAorK2F1eC0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpIFwKKysJCSs9ICQoZmlsdGVyLW91dCAkKGF1eC15KSwgXAorKwkgICAgICAgICAgICAgICAgICAgICAgICAkKGNhdGVnb3JpZXM6JT1sYy0lKSAkKGNhdGVnb3JpZXM6JT1DLSUpKSBcCisrCSAgICAgICAgICAgbG9jYWxlbmFtZQorK290aGVycy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpID0gbG9jYWxlZGVmIGxvY2FsZQorICNvdGhlcnMtc3RhdGljCT0gbG9jYWxlZGVmIGxvY2FsZQorLWluc3RhbGwtYmluCT0gbG9jYWxlZGVmIGxvY2FsZQorLWV4dHJhLW9ianMJPSAkKGxvY2FsZWRlZi1tb2R1bGVzOj0ubykgJChsb2NhbGVkZWYtYXV4Oj0ubykgXAorK2luc3RhbGwtYmluCT0gJChvdGhlcnMteSkKKytleHRyYS1vYmpzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgXAorKwkJPSAkKGxvY2FsZWRlZi1tb2R1bGVzOj0ubykgJChsb2NhbGVkZWYtYXV4Oj0ubykgXAorIAkJICAkKGxvY2FsZS1tb2R1bGVzOj0ubykgJChsaWItbW9kdWxlczo9Lm8pCisgCistZXh0cmEtbGlicwk9IGxpYkJyb2tlbkxvY2FsZQorLWV4dHJhLWxpYnMtb3RoZXJzID0gJChleHRyYS1saWJzKQorK2V4dHJhLWxpYnMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSA9IGxpYkJyb2tlbkxvY2FsZQorK2V4dHJhLWxpYnMtb3RoZXJzID0gJChleHRyYS1saWJzLXkpCisgCisgbGliQnJva2VuTG9jYWxlLXJvdXRpbmVzID0gYnJva2VuX2N1cl9tYXgKKyAKK0BAIC05Myw2ICsxMDksOSBAQCBDUFBGTEFHUy1sb2NhbGUtcHJvZ3JhbXMgPSAtRExPQ0FMRV9QQVRIPSckKGxvY2FsZXBhdGgpJyBcCisgQ0ZMQUdTLWNoYXJtYXAuYyA9IC1Xbm8td3JpdGUtc3RyaW5ncyAtV25vLWNoYXItc3Vic2NyaXB0cworIENGTEFHUy1sb2NmaWxlLmMgPSAtV25vLXdyaXRlLXN0cmluZ3MgLVduby1jaGFyLXN1YnNjcmlwdHMKKyBDRkxBR1MtY2hhcm1hcC1kaXIuYyA9IC1Xbm8td3JpdGUtc3RyaW5ncworK2lmbmVxICh5LCQoT1BUSU9OX0VHTElCQ19TUEFXTikpCisrQ0ZMQUdTLWNoYXJtYXAtZGlyLmMgKz0gLUROT19VTkNPTVBSRVNTCisrZW5kaWYKKyAKKyAjIFNldCBsaWJvZi0qIGZvciBlYWNoIHJvdXRpbmUuCisgY3BwLXNyY3MtbGVmdCA6PSAkKGxvY2FsZWRlZi1tb2R1bGVzKSAkKGxvY2FsZWRlZi1hdXgpICQobG9jYWxlLW1vZHVsZXMpIFwKK2RpZmYgLS1naXQgYS9sb2NhbGUvY2F0bmFtZXMuYyBiL2xvY2FsZS9jYXRuYW1lcy5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uOWZhZDM1NworLS0tIC9kZXYvbnVsbAorKysrIGIvbG9jYWxlL2NhdG5hbWVzLmMKK0BAIC0wLDAgKzEsNDggQEAKKysvKiBDb3B5cmlnaHQgKEMpIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSAibG9jYWxlaW5mby5oIgorKworKy8qIERlZmluZSBhbiBhcnJheSBvZiBjYXRlZ29yeSBuYW1lcyAoYWxzbyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZXMpLiAgKi8KKytjb25zdCB1bmlvbiBjYXRuYW1lc3RyX3QgX25sX2NhdGVnb3J5X25hbWVzIGF0dHJpYnV0ZV9oaWRkZW4gPQorKyAgeworKyAgICB7CisrI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCisrICAgICAgY2F0ZWdvcnlfbmFtZSwKKysjaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCisrI3VuZGVmIERFRklORV9DQVRFR09SWQorKyAgICB9CisrICB9OworKworK2NvbnN0IHVpbnQ4X3QgX25sX2NhdGVnb3J5X25hbWVfaWR4c1tfX0xDX0xBU1RdIGF0dHJpYnV0ZV9oaWRkZW4gPQorKyAgeworKyNkZWZpbmUgREVGSU5FX0NBVEVHT1JZKGNhdGVnb3J5LCBjYXRlZ29yeV9uYW1lLCBpdGVtcywgYSkgXAorKyAgICBbY2F0ZWdvcnldID0gb2Zmc2V0b2YgKHVuaW9uIGNhdG5hbWVzdHJfdCwgQ0FUTkFNRU1GIChfX0xJTkVfXykpLAorKyNpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKKysjdW5kZWYgREVGSU5FX0NBVEVHT1JZCisrICB9OworKworKy8qIEFuIGFycmF5IG9mIHRoZWlyIGxlbmd0aHMsIGZvciBjb252ZW5pZW5jZS4gICovCisrY29uc3QgdWludDhfdCBfbmxfY2F0ZWdvcnlfbmFtZV9zaXplc1tdIGF0dHJpYnV0ZV9oaWRkZW4gPQorKyAgeworKyNkZWZpbmUgREVGSU5FX0NBVEVHT1JZKGNhdGVnb3J5LCBjYXRlZ29yeV9uYW1lLCBpdGVtcywgYSkgXAorKyAgICBbY2F0ZWdvcnldID0gc2l6ZW9mIChjYXRlZ29yeV9uYW1lKSAtIDEsCisrI2luY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgorKyN1bmRlZglERUZJTkVfQ0FURUdPUlkKKysgICAgW0xDX0FMTF0gPSBzaXplb2YgKCJMQ19BTEwiKSAtIDEKKysgIH07CitkaWZmIC0tZ2l0IGEvbG9jYWxlL2R1bW15LXNldGxvY2FsZS5jIGIvbG9jYWxlL2R1bW15LXNldGxvY2FsZS5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMjE5OTY0YQorLS0tIC9kZXYvbnVsbAorKysrIGIvbG9jYWxlL2R1bW15LXNldGxvY2FsZS5jCitAQCAtMCwwICsxLDMzIEBACisrLyogQ29weXJpZ2h0IChDKSAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxsb2NhbGUuaD4KKysKKytjaGFyICoKKytzZXRsb2NhbGUgKGludCBjYXRlZ29yeSwgY29uc3QgY2hhciAqbG9jYWxlKQorK3sKKysgIGlmICghIGxvY2FsZQorKyAgICAgIHx8IGxvY2FsZVswXSA9PSAnXDAnCisrICAgICAgfHwgc3RyY21wIChsb2NhbGUsICJDIikgPT0gMAorKyAgICAgIHx8IHN0cmNtcCAobG9jYWxlLCAiUE9TSVgiKSA9PSAwKQorKyAgICByZXR1cm4gKGNoYXIgKikgIkMiOworKyAgZWxzZQorKyAgICByZXR1cm4gTlVMTDsKKyt9CisrbGliY19oaWRkZW5fZGVmIChzZXRsb2NhbGUpCitkaWZmIC0tZ2l0IGEvbG9jYWxlL2xvY2FsZWluZm8uaCBiL2xvY2FsZS9sb2NhbGVpbmZvLmgKK2luZGV4IGJkYWI5ZmUuLmE3NTE2YzAgMTAwNjQ0CistLS0gYS9sb2NhbGUvbG9jYWxlaW5mby5oCisrKysgYi9sb2NhbGUvbG9jYWxlaW5mby5oCitAQCAtMjMyLDcgKzIzMiw3IEBAIF9fbGliY190c2RfZGVmaW5lIChleHRlcm4sIF9fbG9jYWxlX3QsIExPQ0FMRSkKKyAgICB1bnVzZWQuICBXZSBjYW4gbWFuYWdlIHRoaXMgcGxheWluZyBzb21lIHRyaWNrcyB3aXRoIHdlYWsgcmVmZXJlbmNlcy4KKyAgICBCdXQgd2l0aCB0aHJlYWQtbG9jYWwgbG9jYWxlIHNldHRpbmdzLCBpdCBiZWNvbWVzIHF1aXRlIHVuZ2Fpbmx5IHVubGVzcworICAgIHdlIGNhbiB1c2UgX190aHJlYWQgdmFyaWFibGVzLiAgU28gb25seSBpbiB0aGF0IGNhc2UgZG8gd2UgYXR0ZW1wdCB0aGlzLiAgKi8KKy0jaWZuZGVmIFNIQVJFRAorKyNpZiAhZGVmaW5lZCBTSEFSRUQgJiYgIWRlZmluZWQgSU5fR0xJQkNfTE9DQUxFREVGCisgIyBpbmNsdWRlIDx0bHMuaD4KKyAjIGRlZmluZSBOTF9DVVJSRU5UX0lORElSRUNUCTEKKyAjZW5kaWYKK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvY2hhcm1hcC1kaXIuYyBiL2xvY2FsZS9wcm9ncmFtcy9jaGFybWFwLWRpci5jCitpbmRleCBjZjdhZGVhLi5lZjNiODExIDEwMDY0NAorLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2NoYXJtYXAtZGlyLmMKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9jaGFybWFwLWRpci5jCitAQCAtMTksNyArMTksOSBAQAorICNpbmNsdWRlIDxlcnJvci5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxsaWJpbnRsLmg+CisrI2lmbmRlZiBOT19VTkNPTVBSRVNTCisgI2luY2x1ZGUgPHNwYXduLmg+CisrI2VuZGlmCisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KK0BAIC0xNTYsNiArMTU4LDcgQEAgY2hhcm1hcF9jbG9zZWRpciAoQ0hBUk1BUF9ESVIgKmNkaXIpCisgICByZXR1cm4gY2xvc2VkaXIgKGRpcik7CisgfQorIAorKyNpZm5kZWYgTk9fVU5DT01QUkVTUworIC8qIENyZWF0ZXMgYSBzdWJwcm9jZXNzIGRlY29tcHJlc3NpbmcgdGhlIGdpdmVuIHBhdGhuYW1lLCBhbmQgcmV0dXJucworICAgIGEgc3RyZWFtIHJlYWRpbmcgaXRzIG91dHB1dCAodGhlIGRlY29tcHJlc3NlZCBkYXRhKS4gICovCisgc3RhdGljCitAQCAtMjA0LDYgKzIwNyw3IEBAIGZvcGVuX3VuY29tcHJlc3NlZCAoY29uc3QgY2hhciAqcGF0aG5hbWUsIGNvbnN0IGNoYXIgKmNvbXByZXNzb3IpCisgICAgIH0KKyAgIHJldHVybiBOVUxMOworIH0KKysjZW5kaWYKKyAKKyAvKiBPcGVucyBhIGNoYXJtYXAgZm9yIHJlYWRpbmcsIGdpdmVuIGl0cyBuYW1lIChub3QgYW4gYWxpYXMgbmFtZSkuICAqLworIEZJTEUgKgorQEAgLTIyNiw2ICsyMzAsNyBAQCBjaGFybWFwX29wZW4gKGNvbnN0IGNoYXIgKmRpcmVjdG9yeSwgY29uc3QgY2hhciAqbmFtZSkKKyAgIGlmIChzdHJlYW0gIT0gTlVMTCkKKyAgICAgcmV0dXJuIHN0cmVhbTsKKyAKKysjaWZuZGVmIE5PX1VOQ09NUFJFU1MKKyAgIG1lbWNweSAocCwgIi5neiIsIDQpOworICAgc3RyZWFtID0gZm9wZW5fdW5jb21wcmVzc2VkIChwYXRobmFtZSwgImd6aXAiKTsKKyAgIGlmIChzdHJlYW0gIT0gTlVMTCkKK0BAIC0yMzUsNiArMjQwLDcgQEAgY2hhcm1hcF9vcGVuIChjb25zdCBjaGFyICpkaXJlY3RvcnksIGNvbnN0IGNoYXIgKm5hbWUpCisgICBzdHJlYW0gPSBmb3Blbl91bmNvbXByZXNzZWQgKHBhdGhuYW1lLCAiYnppcDIiKTsKKyAgIGlmIChzdHJlYW0gIT0gTlVMTCkKKyAgICAgcmV0dXJuIHN0cmVhbTsKKysjZW5kaWYKKyAKKyAgIHJldHVybiBOVUxMOworIH0KK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbGQtY29sbGF0ZS5jIGIvbG9jYWxlL3Byb2dyYW1zL2xkLWNvbGxhdGUuYworaW5kZXggYTM5YTk0Zi4uMTZlOTAzOSAxMDA2NDQKKy0tLSBhL2xvY2FsZS9wcm9ncmFtcy9sZC1jb2xsYXRlLmMKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9sZC1jb2xsYXRlLmMKK0BAIC0zNTEsNyArMzUxLDcgQEAgbmV3X2VsZW1lbnQgKHN0cnVjdCBsb2NhbGVfY29sbGF0ZV90ICpjb2xsYXRlLCBjb25zdCBjaGFyICptYnMsIHNpemVfdCBtYnNsZW4sCisgICAgIH0KKyAgIGlmICh3Y3MgIT0gTlVMTCkKKyAgICAgeworLSAgICAgIHNpemVfdCBud2NzID0gd2NzbGVuICgod2NoYXJfdCAqKSB3Y3MpOworKyAgICAgIHNpemVfdCBud2NzID0gd2NzbGVuX3VpbnQzMiAod2NzKTsKKyAgICAgICB1aW50MzJfdCB6ZXJvID0gMDsKKyAgICAgICAvKiBIYW5kbGUgPFUwMDAwPiBhcyBhIHNpbmdsZSBjaGFyYWN0ZXIuICAqLworICAgICAgIGlmIChud2NzID09IDApCitAQCAtMTc3Nyw4ICsxNzc3LDcgQEAgc3ltYm9sIGAlcycgaGFzIHRoZSBzYW1lIGVuY29kaW5nIGFzIiksICgqZXB0ciktPm5hbWUpOworIAorIAkgICAgICBpZiAoKCplcHRyKS0+bndjcyA9PSBydW5wLT5ud2NzKQorIAkJeworLQkJICBpbnQgYyA9IHdtZW1jbXAgKCh3Y2hhcl90ICopICgqZXB0ciktPndjcywKKy0JCQkJICAgKHdjaGFyX3QgKikgcnVucC0+d2NzLCBydW5wLT5ud2NzKTsKKysJCSAgaW50IGMgPSB3bWVtY21wX3VpbnQzMiAoKCplcHRyKS0+d2NzLCBydW5wLT53Y3MsIHJ1bnAtPm53Y3MpOworIAorIAkJICBpZiAoYyA9PSAwKQorIAkJICAgIHsKK0BAIC0yMDExLDkgKzIwMTAsOSBAQCBhZGRfdG9fdGFibGV3YyAodWludDMyX3QgY2gsIHN0cnVjdCBlbGVtZW50X3QgKnJ1bnApCisgCSAgICAgb25lIGNvbnNlY3V0aXZlIGVudHJ5LiAgKi8KKyAJICBpZiAocnVucC0+d2NuZXh0ICE9IE5VTEwKKyAJICAgICAgJiYgcnVucC0+bndjcyA9PSBydW5wLT53Y25leHQtPm53Y3MKKy0JICAgICAgJiYgd21lbWNtcCAoKHdjaGFyX3QgKikgcnVucC0+d2NzLAorLQkJCSAgKHdjaGFyX3QgKilydW5wLT53Y25leHQtPndjcywKKy0JCQkgIHJ1bnAtPm53Y3MgLSAxKSA9PSAwCisrCSAgICAgICYmIHdtZW1jbXBfdWludDMyIChydW5wLT53Y3MsCisrCQkJCSBydW5wLT53Y25leHQtPndjcywKKysJCQkJIHJ1bnAtPm53Y3MgLSAxKSA9PSAwCisgCSAgICAgICYmIChydW5wLT53Y3NbcnVucC0+bndjcyAtIDFdCisgCQkgID09IHJ1bnAtPndjbmV4dC0+d2NzW3J1bnAtPm53Y3MgLSAxXSArIDEpKQorIAkgICAgeworQEAgLTIwMzcsOSArMjAzNiw5IEBAIGFkZF90b190YWJsZXdjICh1aW50MzJfdCBjaCwgc3RydWN0IGVsZW1lbnRfdCAqcnVucCkKKyAJCXJ1bnAgPSBydW5wLT53Y25leHQ7CisgCSAgICAgIHdoaWxlIChydW5wLT53Y25leHQgIT0gTlVMTAorIAkJICAgICAmJiBydW5wLT5ud2NzID09IHJ1bnAtPndjbmV4dC0+bndjcworLQkJICAgICAmJiB3bWVtY21wICgod2NoYXJfdCAqKSBydW5wLT53Y3MsCistCQkJCSAod2NoYXJfdCAqKXJ1bnAtPndjbmV4dC0+d2NzLAorLQkJCQkgcnVucC0+bndjcyAtIDEpID09IDAKKysJCSAgICAgJiYgd21lbWNtcF91aW50MzIgKHJ1bnAtPndjcywKKysJCQkJCXJ1bnAtPndjbmV4dC0+d2NzLAorKwkJCQkJcnVucC0+bndjcyAtIDEpID09IDAKKyAJCSAgICAgJiYgKHJ1bnAtPndjc1tydW5wLT5ud2NzIC0gMV0KKyAJCQkgPT0gcnVucC0+d2NuZXh0LT53Y3NbcnVucC0+bndjcyAtIDFdICsgMSkpOworIAorZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9sZC1jdHlwZS5jIGIvbG9jYWxlL3Byb2dyYW1zL2xkLWN0eXBlLmMKK2luZGV4IDNmNDY0ZWYuLmI3YjZiNTEgMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbGQtY3R5cGUuYworKysrIGIvbG9jYWxlL3Byb2dyYW1zL2xkLWN0eXBlLmMKK0BAIC05MjYsNyArOTI2LDcgQEAgY3R5cGVfb3V0cHV0IChzdHJ1Y3QgbG9jYWxlZGVmX3QgKmxvY2FsZSwgY29uc3Qgc3RydWN0IGNoYXJtYXBfdCAqY2hhcm1hcCwKKyAgIGFsbG9jYXRlX2FycmF5cyAoY3R5cGUsIGNoYXJtYXAsIGN0eXBlLT5yZXBlcnRvaXJlKTsKKyAKKyAgIGRlZmF1bHRfbWlzc2luZ19sZW4gPSAoY3R5cGUtPmRlZmF1bHRfbWlzc2luZworLQkJCSA/IHdjc2xlbiAoKHdjaGFyX3QgKikgY3R5cGUtPmRlZmF1bHRfbWlzc2luZykKKysJCQkgPyB3Y3NsZW5fdWludDMyIChjdHlwZS0+ZGVmYXVsdF9taXNzaW5nKQorIAkJCSA6IDApOworIAorICAgaW5pdF9sb2NhbGVfZGF0YSAoJmZpbGUsIG5lbGVtcyk7CitAQCAtMTkzNyw3ICsxOTM3LDcgQEAgcmVhZF90cmFuc2xpdF9lbnRyeSAoc3RydWN0IGxpbmVyZWFkZXIgKmxkZmlsZSwgc3RydWN0IGxvY2FsZV9jdHlwZV90ICpjdHlwZSwKKyAJICAgIGlnbm9yZSA9IDE7CisgCSAgZWxzZQorIAkgICAgLyogVGhpcyB2YWx1ZSBpcyB1c2FibGUuICAqLworLQkgICAgb2JzdGFja19ncm93IChvYiwgdG9fd3N0ciwgd2NzbGVuICgod2NoYXJfdCAqKSB0b193c3RyKSAqIDQpOworKwkgICAgb2JzdGFja19ncm93IChvYiwgdG9fd3N0ciwgd2NzbGVuX3VpbnQzMiAodG9fd3N0cikgKiA0KTsKKyAKKyAJICBmaXJzdCA9IDA7CisgCX0KK0BAIC0yNDcxLDggKzI0NzEsOCBAQCB3aXRoIGNoYXJhY3RlciBjb2RlIHJhbmdlIHZhbHVlcyBvbmUgbXVzdCB1c2UgdGhlIGFic29sdXRlIGVsbGlwc2lzIGAuLi4nIikpOworIAkgICAgfQorIAorIAloYW5kbGVfdG9rX2RpZ2l0OgorLQkgIGNsYXNzX2JpdCA9IF9JU3dkaWdpdDsKKy0JICBjbGFzczI1Nl9iaXQgPSBfSVNkaWdpdDsKKysJICBjbGFzc19iaXQgPSBCSVR3ICh0b2tfZGlnaXQpOworKwkgIGNsYXNzMjU2X2JpdCA9IEJJVCAodG9rX2RpZ2l0KTsKKyAJICBoYW5kbGVfZGlnaXRzID0gMTsKKyAJICBnb3RvIHJlYWRfY2hhcmNsYXNzOworIAorQEAgLTM5MjksOCArMzkyOSw3IEBAIGFsbG9jYXRlX2FycmF5cyAoc3RydWN0IGxvY2FsZV9jdHlwZV90ICpjdHlwZSwgY29uc3Qgc3RydWN0IGNoYXJtYXBfdCAqY2hhcm1hcCwKKyAKKyAJICB3aGlsZSAoaWR4IDwgbnVtYmVyKQorIAkgICAgeworLQkgICAgICBpbnQgcmVzID0gd2NzY21wICgoY29uc3Qgd2NoYXJfdCAqKSBzb3J0ZWRbaWR4XS0+ZnJvbSwKKy0JCQkJKGNvbnN0IHdjaGFyX3QgKikgcnVucC0+ZnJvbSk7CisrCSAgICAgIGludCByZXMgPSB3Y3NjbXBfdWludDMyIChzb3J0ZWRbaWR4XS0+ZnJvbSwgcnVucC0+ZnJvbSk7CisgCSAgICAgIGlmIChyZXMgPT0gMCkKKyAJCXsKKyAJCSAgcmVwbGFjZSA9IDE7CitAQCAtMzk2NywxMSArMzk2NiwxMSBAQCBhbGxvY2F0ZV9hcnJheXMgKHN0cnVjdCBsb2NhbGVfY3R5cGVfdCAqY3R5cGUsIGNvbnN0IHN0cnVjdCBjaGFybWFwX3QgKmNoYXJtYXAsCisgICAgICAgZm9yIChzaXplX3QgY250ID0gMDsgY250IDwgbnVtYmVyOyArK2NudCkKKyAJeworIAkgIHN0cnVjdCB0cmFuc2xpdF90b190ICpzcnVucDsKKy0JICBmcm9tX2xlbiArPSB3Y3NsZW4gKChjb25zdCB3Y2hhcl90ICopIHNvcnRlZFtjbnRdLT5mcm9tKSArIDE7CisrCSAgZnJvbV9sZW4gKz0gd2NzbGVuX3VpbnQzMiAoc29ydGVkW2NudF0tPmZyb20pICsgMTsKKyAJICBzcnVucCA9IHNvcnRlZFtjbnRdLT50bzsKKyAJICB3aGlsZSAoc3J1bnAgIT0gTlVMTCkKKyAJICAgIHsKKy0JICAgICAgdG9fbGVuICs9IHdjc2xlbiAoKGNvbnN0IHdjaGFyX3QgKikgc3J1bnAtPnN0cikgKyAxOworKwkgICAgICB0b19sZW4gKz0gd2NzbGVuX3VpbnQzMiAoc3J1bnAtPnN0cikgKyAxOworIAkgICAgICBzcnVucCA9IHNydW5wLT5uZXh0OworIAkgICAgfQorIAkgIC8qIFBsdXMgb25lIGZvciB0aGUgZXh0cmEgTlVMIGNoYXJhY3RlciBtYXJraW5nIHRoZSBlbmQgb2YKK0BAIC0zOTk1LDE4ICszOTk0LDE4IEBAIGFsbG9jYXRlX2FycmF5cyAoc3RydWN0IGxvY2FsZV9jdHlwZV90ICpjdHlwZSwgY29uc3Qgc3RydWN0IGNoYXJtYXBfdCAqY2hhcm1hcCwKKyAJICBjdHlwZS0+dHJhbnNsaXRfZnJvbV9pZHhbY250XSA9IGZyb21fbGVuOworIAkgIGN0eXBlLT50cmFuc2xpdF90b19pZHhbY250XSA9IHRvX2xlbjsKKyAKKy0JICBsZW4gPSB3Y3NsZW4gKChjb25zdCB3Y2hhcl90ICopIHNvcnRlZFtjbnRdLT5mcm9tKSArIDE7CistCSAgd21lbWNweSAoKHdjaGFyX3QgKikgJmN0eXBlLT50cmFuc2xpdF9mcm9tX3RibFtmcm9tX2xlbl0sCistCQkgICAoY29uc3Qgd2NoYXJfdCAqKSBzb3J0ZWRbY250XS0+ZnJvbSwgbGVuKTsKKysJICBsZW4gPSB3Y3NsZW5fdWludDMyIChzb3J0ZWRbY250XS0+ZnJvbSkgKyAxOworKwkgIHdtZW1jcHlfdWludDMyICgmY3R5cGUtPnRyYW5zbGl0X2Zyb21fdGJsW2Zyb21fbGVuXSwKKysJCQkgIHNvcnRlZFtjbnRdLT5mcm9tLCBsZW4pOworIAkgIGZyb21fbGVuICs9IGxlbjsKKyAKKyAJICBjdHlwZS0+dHJhbnNsaXRfdG9faWR4W2NudF0gPSB0b19sZW47CisgCSAgc3J1bnAgPSBzb3J0ZWRbY250XS0+dG87CisgCSAgd2hpbGUgKHNydW5wICE9IE5VTEwpCisgCSAgICB7CistCSAgICAgIGxlbiA9IHdjc2xlbiAoKGNvbnN0IHdjaGFyX3QgKikgc3J1bnAtPnN0cikgKyAxOworLQkgICAgICB3bWVtY3B5ICgod2NoYXJfdCAqKSAmY3R5cGUtPnRyYW5zbGl0X3RvX3RibFt0b19sZW5dLAorLQkJICAgICAgIChjb25zdCB3Y2hhcl90ICopIHNydW5wLT5zdHIsIGxlbik7CisrCSAgICAgIGxlbiA9IHdjc2xlbl91aW50MzIgKHNydW5wLT5zdHIpICsgMTsKKysJICAgICAgd21lbWNweV91aW50MzIgKCZjdHlwZS0+dHJhbnNsaXRfdG9fdGJsW3RvX2xlbl0sCisrCQkJICAgICAgc3J1bnAtPnN0ciwgbGVuKTsKKyAJICAgICAgdG9fbGVuICs9IGxlbjsKKyAJICAgICAgc3J1bnAgPSBzcnVucC0+bmV4dDsKKyAJICAgIH0KK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbGQtbWVzc2FnZXMuYyBiL2xvY2FsZS9wcm9ncmFtcy9sZC1tZXNzYWdlcy5jCitpbmRleCBlYzFhODBiLi43MzZlZWQ4IDEwMDY0NAorLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2xkLW1lc3NhZ2VzLmMKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9sZC1tZXNzYWdlcy5jCitAQCAtMjUsNiArMjUsNyBAQAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgI2luY2x1ZGUgPHN5cy91aW8uaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgCitAQCAtMTI0LDYgKzEyNSw3IEBAIE5vIGRlZmluaXRpb24gZm9yICVzIGNhdGVnb3J5IGZvdW5kIiksICJMQ19NRVNTQUdFUyIpKTsKKyAgICAgfQorICAgZWxzZQorICAgICB7CisrI2lmIF9fT1BUSU9OX1BPU0lYX1JFR0VYUAorICAgICAgIGludCByZXN1bHQ7CisgICAgICAgcmVnZXhfdCByZTsKKyAKK0BAIC0xNDAsNiArMTQyLDcgQEAgTm8gZGVmaW5pdGlvbiBmb3IgJXMgY2F0ZWdvcnkgZm91bmQiKSwgIkxDX01FU1NBR0VTIikpOworIAl9CisgICAgICAgZWxzZSBpZiAocmVzdWx0ICE9IDApCisgCXJlZ2ZyZWUgKCZyZSk7CisrI2VuZGlmCisgICAgIH0KKyAKKyAgIGlmIChtZXNzYWdlcy0+bm9leHByID09IE5VTEwpCitAQCAtMTU4LDYgKzE2MSw3IEBAIE5vIGRlZmluaXRpb24gZm9yICVzIGNhdGVnb3J5IGZvdW5kIiksICJMQ19NRVNTQUdFUyIpKTsKKyAgICAgfQorICAgZWxzZQorICAgICB7CisrI2lmIF9fT1BUSU9OX1BPU0lYX1JFR0VYUAorICAgICAgIGludCByZXN1bHQ7CisgICAgICAgcmVnZXhfdCByZTsKKyAKK0BAIC0xNzQsNiArMTc4LDcgQEAgTm8gZGVmaW5pdGlvbiBmb3IgJXMgY2F0ZWdvcnkgZm91bmQiKSwgIkxDX01FU1NBR0VTIikpOworIAl9CisgICAgICAgZWxzZSBpZiAocmVzdWx0ICE9IDApCisgCXJlZ2ZyZWUgKCZyZSk7CisrI2VuZGlmCisgICAgIH0KKyB9CisgCitkaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2xkLXRpbWUuYyBiL2xvY2FsZS9wcm9ncmFtcy9sZC10aW1lLmMKK2luZGV4IGRiNDkwYzYuLjc1ZGM1MDUgMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbGQtdGltZS5jCisrKysgYi9sb2NhbGUvcHJvZ3JhbXMvbGQtdGltZS5jCitAQCAtMjE1LDggKzIxNSwxMCBAQCBObyBkZWZpbml0aW9uIGZvciAlcyBjYXRlZ29yeSBmb3VuZCIpLCAiTENfVElNRSIpKTsKKyAJfQorICAgICAgIGVsc2UKKyAJeworKwkgIHN0YXRpYyBjb25zdCB1aW50MzJfdCB3dF9mbXRfYW1wbVtdCisrCSAgICA9IHsgJyUnLCdJJywnOicsJyUnLCdNJywnOicsJyUnLCdTJywnICcsJyUnLCdwJywwIH07CisgCSAgdGltZS0+dF9mbXRfYW1wbSA9ICIlSTolTTolUyAlcCI7CistCSAgdGltZS0+d3RfZm10X2FtcG0gPSAoY29uc3QgdWludDMyX3QgKikgTCIlSTolTTolUyAlcCI7CisrCSAgdGltZS0+d3RfZm10X2FtcG0gPSB3dF9mbXRfYW1wbTsKKyAJfQorICAgICB9CisgCitAQCAtMjI2LDcgKzIyOCw3IEBAIE5vIGRlZmluaXRpb24gZm9yICVzIGNhdGVnb3J5IGZvdW5kIiksICJMQ19USU1FIikpOworICAgICAgIGNvbnN0IGludCBkYXlzX3Blcl9tb250aFsxMl0gPSB7IDMxLCAyOSwgMzEsIDMwLCAzMSwgMzAsCisgCQkJCSAgICAgICAzMSwgMzEsIDMwLCAzMSAsMzAsIDMxIH07CisgICAgICAgc2l6ZV90IGlkeDsKKy0gICAgICB3Y2hhcl90ICp3c3RyOworKyAgICAgIHVpbnQzMl90ICp3c3RyOworIAorICAgICAgIHRpbWUtPmVyYV9lbnRyaWVzID0KKyAJKHN0cnVjdCBlcmFfZGF0YSAqKSB4bWFsbG9jICh0aW1lLT5udW1fZXJhCitAQCAtNDY0LDE4ICs0NjYsMTggQEAgTm8gZGVmaW5pdGlvbiBmb3IgJXMgY2F0ZWdvcnkgZm91bmQiKSwgIkxDX1RJTUUiKSk7CisgCSAgICB9CisgCisgCSAgLyogTm93IGdlbmVyYXRlIHRoZSB3aWRlIGNoYXJhY3RlciBuYW1lIGFuZCBmb3JtYXQuICAqLworLQkgIHdzdHIgPSB3Y3NjaHIgKCh3Y2hhcl90ICopIHRpbWUtPndlcmFbaWR4XSwgTCc6Jyk7LyogZW5kIGRpcmVjdGlvbiAqLworLQkgIHdzdHIgPSB3c3RyID8gd2NzY2hyICh3c3RyICsgMSwgTCc6JykgOiBOVUxMOwkvKiBlbmQgb2Zmc2V0ICovCistCSAgd3N0ciA9IHdzdHIgPyB3Y3NjaHIgKHdzdHIgKyAxLCBMJzonKSA6IE5VTEw7CS8qIGVuZCBzdGFydCAqLworLQkgIHdzdHIgPSB3c3RyID8gd2NzY2hyICh3c3RyICsgMSwgTCc6JykgOiBOVUxMOwkvKiBlbmQgZW5kICovCisrCSAgd3N0ciA9IHdjc2Nocl91aW50MzIgKHRpbWUtPndlcmFbaWR4XSwgTCc6Jyk7IC8qIGVuZCBkaXJlY3Rpb24gKi8KKysJICB3c3RyID0gd3N0ciA/IHdjc2Nocl91aW50MzIgKHdzdHIgKyAxLCBMJzonKSA6IE5VTEw7IC8qIGVuZCBvZmZzZXQgKi8KKysJICB3c3RyID0gd3N0ciA/IHdjc2Nocl91aW50MzIgKHdzdHIgKyAxLCBMJzonKSA6IE5VTEw7IC8qIGVuZCBzdGFydCAqLworKwkgIHdzdHIgPSB3c3RyID8gd2NzY2hyX3VpbnQzMiAod3N0ciArIDEsIEwnOicpIDogTlVMTDsgLyogZW5kIGVuZCAqLworIAkgIGlmICh3c3RyICE9IE5VTEwpCisgCSAgICB7CistCSAgICAgIHRpbWUtPmVyYV9lbnRyaWVzW2lkeF0ud25hbWUgPSAodWludDMyX3QgKikgd3N0ciArIDE7CistCSAgICAgIHdzdHIgPSB3Y3NjaHIgKHdzdHIgKyAxLCBMJzonKTsJLyogZW5kIG5hbWUgKi8KKysJICAgICAgdGltZS0+ZXJhX2VudHJpZXNbaWR4XS53bmFtZSA9IHdzdHIgKyAxOworKwkgICAgICB3c3RyID0gd2NzY2hyX3VpbnQzMiAod3N0ciArIDEsIEwnOicpOyAvKiBlbmQgbmFtZSAqLworIAkgICAgICBpZiAod3N0ciAhPSBOVUxMKQorIAkJeworIAkJICAqd3N0ciA9IEwnXDAnOworLQkJICB0aW1lLT5lcmFfZW50cmllc1tpZHhdLndmb3JtYXQgPSAodWludDMyX3QgKikgd3N0ciArIDE7CisrCQkgIHRpbWUtPmVyYV9lbnRyaWVzW2lkeF0ud2Zvcm1hdCA9IHdzdHIgKyAxOworIAkJfQorIAkgICAgICBlbHNlCisgCQl0aW1lLT5lcmFfZW50cmllc1tpZHhdLnduYW1lID0KK0BAIC01MzAsNyArNTMyLDE2IEBAIE5vIGRlZmluaXRpb24gZm9yICVzIGNhdGVnb3J5IGZvdW5kIiksICJMQ19USU1FIikpOworICAgaWYgKHRpbWUtPmRhdGVfZm10ID09IE5VTEwpCisgICAgIHRpbWUtPmRhdGVfZm10ID0gIiVhICViICVlICVIOiVNOiVTICVaICVZIjsKKyAgIGlmICh0aW1lLT53ZGF0ZV9mbXQgPT0gTlVMTCkKKy0gICAgdGltZS0+d2RhdGVfZm10ID0gKGNvbnN0IHVpbnQzMl90ICopIEwiJWEgJWIgJWUgJUg6JU06JVMgJVogJVkiOworKyAgICB7CisrICAgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHdkYXRlX2ZtdFtdID0KKysJeyAnJScsJ2EnLCcgJywKKysJICAnJScsJ2InLCcgJywKKysJICAnJScsJ2UnLCcgJywKKysJICAnJScsJ0gnLCc6JywnJScsJ00nLCc6JywnJScsJ1MnLCcgJywKKysJICAnJScsJ1onLCcgJywKKysJICAnJScsJ1knLDAgfTsKKysgICAgICB0aW1lLT53ZGF0ZV9mbXQgPSB3ZGF0ZV9mbXQ7CisrICAgIH0KKyB9CisgCisgCitkaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2xpbmVyZWFkZXIuYyBiL2xvY2FsZS9wcm9ncmFtcy9saW5lcmVhZGVyLmMKK2luZGV4IDJlMDUxMzAuLjY1M2I2OGMgMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbGluZXJlYWRlci5jCisrKysgYi9sb2NhbGUvcHJvZ3JhbXMvbGluZXJlYWRlci5jCitAQCAtNTk1LDcgKzU5NSw3IEBAIGdldF9zdHJpbmcgKHN0cnVjdCBsaW5lcmVhZGVyICpsciwgY29uc3Qgc3RydWN0IGNoYXJtYXBfdCAqY2hhcm1hcCwKKyB7CisgICBpbnQgcmV0dXJuX3dpZGVzdHIgPSBsci0+cmV0dXJuX3dpZGVzdHI7CisgICBjaGFyICpidWY7CistICB3Y2hhcl90ICpidWYyID0gTlVMTDsKKysgIHVpbnQzMl90ICpidWYyID0gTlVMTDsKKyAgIHNpemVfdCBidWZhY3Q7CisgICBzaXplX3QgYnVmbWF4ID0gNTY7CisgCitkaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2xvY2FsZWRlZi5jIGIvbG9jYWxlL3Byb2dyYW1zL2xvY2FsZWRlZi5jCitpbmRleCAyYTBmMmFhLi41ODNkMjMzIDEwMDY0NAorLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2xvY2FsZWRlZi5jCisrKysgYi9sb2NhbGUvcHJvZ3JhbXMvbG9jYWxlZGVmLmMKK0BAIC0xMTQsNiArMTE0LDcgQEAgdm9pZCAoKmFyZ3BfcHJvZ3JhbV92ZXJzaW9uX2hvb2spIChGSUxFICosIHN0cnVjdCBhcmdwX3N0YXRlICopID0gcHJpbnRfdmVyc2lvbjsKKyAjZGVmaW5lIE9QVF9MSVNUX0FSQ0hJVkUgMzA5CisgI2RlZmluZSBPUFRfTElUVExFX0VORElBTiA0MDAKKyAjZGVmaW5lIE9QVF9CSUdfRU5ESUFOIDQwMQorKyNkZWZpbmUgT1BUX1VJTlQzMl9BTElHTiA0MDIKKyAKKyAvKiBEZWZpbml0aW9ucyBvZiBhcmd1bWVudHMgZm9yIGFyZ3AgZnVuY3Rpb25zLiAgKi8KKyBzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdGlvbnNbXSA9CitAQCAtMTUwLDYgKzE1MSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0aW9uc1tdID0KKyAgICAgTl8oIkdlbmVyYXRlIGxpdHRsZS1lbmRpYW4gb3V0cHV0IikgfSwKKyAgIHsgImJpZy1lbmRpYW4iLCBPUFRfQklHX0VORElBTiwgTlVMTCwgMCwKKyAgICAgTl8oIkdlbmVyYXRlIGJpZy1lbmRpYW4gb3V0cHV0IikgfSwKKysgIHsgInVpbnQzMi1hbGlnbiIsIE9QVF9VSU5UMzJfQUxJR04sICJBTElHTk1FTlQiLCAwLAorKyAgICBOXygiU2V0IHRoZSB0YXJnZXQncyB1aW50MzJfdCBhbGlnbm1lbnQgaW4gYnl0ZXMgKGRlZmF1bHQgNCkiKSB9LAorICAgeyBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMIH0KKyB9OworIAorQEAgLTIzOSwxMiArMjQyLDE0IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgICBjdHlwZSBsb2NhbGUuICAoUDEwMDMuMiA0LjM1LjUuMikgICovCisgICBzZXRsb2NhbGUgKExDX0NUWVBFLCAiUE9TSVgiKTsKKyAKKysjaWZuZGVmIE5PX1NZU0NPTkYKKyAgIC8qIExvb2sgd2hldGhlciB0aGUgc3lzdGVtIHJlYWxseSBhbGxvd3MgbG9jYWxlIGRlZmluaXRpb25zLiAgUE9TSVgKKyAgICAgIGRlZmluZXMgZXJyb3IgY29kZSAzIGZvciB0aGlzIHNpdHVhdGlvbiBzbyBJIHRoaW5rIGl0IG11c3QgYmUKKyAgICAgIGEgZmF0YWwgZXJyb3IgKHNlZSBQMTAwMy4yIDQuMzUuOCkuICAqLworICAgaWYgKHN5c2NvbmYgKF9TQ18yX0xPQ0FMRURFRikgPCAwKQorICAgICBXSVRIX0NVUl9MT0NBTEUgKGVycm9yICgzLCAwLCBfKCJcCisgRkFUQUw6IHN5c3RlbSBkb2VzIG5vdCBkZWZpbmUgYF9QT1NJWDJfTE9DQUxFREVGJyIpKSk7CisrI2VuZGlmCisgCisgICAvKiBQcm9jZXNzIGNoYXJtYXAgZmlsZS4gICovCisgICBjaGFybWFwID0gY2hhcm1hcF9yZWFkIChjaGFybWFwX2ZpbGUsIHZlcmJvc2UsIDEsIGJlX3F1aWV0LCAxKTsKK0BAIC0zMzgsNiArMzQzLDkgQEAgcGFyc2Vfb3B0IChpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKKyAgICAgY2FzZSBPUFRfQklHX0VORElBTjoKKyAgICAgICBzZXRfYmlnX2VuZGlhbiAodHJ1ZSk7CisgICAgICAgYnJlYWs7CisrICAgIGNhc2UgT1BUX1VJTlQzMl9BTElHTjoKKysgICAgICB1aW50MzJfYWxpZ25fbWFzayA9IHN0cnRvbCAoYXJnLCBOVUxMLCAwKSAtIDE7CisrICAgICAgYnJlYWs7CisgICAgIGNhc2UgJ2MnOgorICAgICAgIGZvcmNlX291dHB1dCA9IDE7CisgICAgICAgYnJlYWs7CitkaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuYyBiL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmMKK2luZGV4IDMzZGE1MmUuLmY3OTBjNGMgMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5jCisrKysgYi9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5jCitAQCAtNTQ0LDYgKzU0NCw5IEBAIGNvbXBhcmVfZmlsZXMgKGNvbnN0IGNoYXIgKmZpbGVuYW1lMSwgY29uc3QgY2hhciAqZmlsZW5hbWUyLCBzaXplX3Qgc2l6ZSwKKyAgICBtYWNoaW5lIHJ1bm5pbmcgbG9jYWxlZGVmLiAgKi8KKyBib29sIHN3YXBfZW5kaWFubmVzc19wOworIAorKy8qIFRoZSB0YXJnZXQncyB2YWx1ZSBvZiBfX2FsaWduX18odWludDMyX3QpIC0gMS4gICovCisrdW5zaWduZWQgaW50IHVpbnQzMl9hbGlnbl9tYXNrID0gMzsKKysKKyAvKiBXaGVuIGNhbGxlZCBvdXRzaWRlIGEgc3RhcnRfbG9jYWxlX3N0cnVjdHVyZS9lbmRfbG9jYWxlX3N0cnVjdHVyZQorICAgIG9yIHN0YXJ0X2xvY2FsZV9wcmVsdWRlL2VuZF9sb2NhbGVfcHJlbHVkZSBibG9jaywgcmVjb3JkIHRoYXQgdGhlCisgICAgbmV4dCBieXRlIGluIEZJTEUncyBvYnN0YWNrIHdpbGwgYmUgdGhlIGZpcnN0IGJ5dGUgb2YgYSBuZXcgZWxlbWVudC4KK0BAIC02MjEsNyArNjI0LDcgQEAgYWRkX2xvY2FsZV9zdHJpbmcgKHN0cnVjdCBsb2NhbGVfZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqc3RyaW5nKQorIHZvaWQKKyBhZGRfbG9jYWxlX3dzdHJpbmcgKHN0cnVjdCBsb2NhbGVfZmlsZSAqZmlsZSwgY29uc3QgdWludDMyX3QgKnN0cmluZykKKyB7CistICBhZGRfbG9jYWxlX3VpbnQzMl9hcnJheSAoZmlsZSwgc3RyaW5nLCB3Y3NsZW4gKChjb25zdCB3Y2hhcl90ICopIHN0cmluZykgKyAxKTsKKysgIGFkZF9sb2NhbGVfdWludDMyX2FycmF5IChmaWxlLCBzdHJpbmcsIHdjc2xlbl91aW50MzIgKHN0cmluZykgKyAxKTsKKyB9CisgCisgLyogUmVjb3JkIHRoYXQgRklMRSdzIG5leHQgZWxlbWVudCBpcyB0aGUgMzItYml0IGludGVnZXIgVkFMVUUuICAqLworZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmggYi9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5oCitpbmRleCA2ZmM0NDFiLi4xMThiMTcxIDEwMDY0NAorLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuaAorKysrIGIvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuaAorQEAgLTcxLDYgKzcxLDggQEAgZXh0ZXJuIHZvaWQgd3JpdGVfYWxsX2NhdGVnb3JpZXMgKHN0cnVjdCBsb2NhbGVkZWZfdCAqZGVmaW5pdGlvbnMsCisgCisgZXh0ZXJuIGJvb2wgc3dhcF9lbmRpYW5uZXNzX3A7CisgCisrZXh0ZXJuIHVuc2lnbmVkIGludCB1aW50MzJfYWxpZ25fbWFzazsKKysKKyAvKiBDaGFuZ2UgdGhlIG91dHB1dCB0byBiZSBiaWctZW5kaWFuIGlmIEJJR19FTkRJQU4gaXMgdHJ1ZSBhbmQKKyAgICBsaXR0bGUtZW5kaWFuIG90aGVyd2lzZS4gICovCisgc3RhdGljIGlubGluZSB2b2lkCitAQCAtODksNyArOTEsOCBAQCBtYXliZV9zd2FwX3VpbnQzMiAodWludDMyX3QgdmFsdWUpCisgfQorIAorIC8qIExpa2V3aXNlLCBidXQgbXVuZ2UgYW4gYXJyYXkgb2YgTiB1aW50MzJfdHMgc3RhcnRpbmcgYXQgQVJSQVkuICAqLworLXN0YXRpYyBpbmxpbmUgdm9pZAorK3N0YXRpYyB2b2lkCisrX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCisgbWF5YmVfc3dhcF91aW50MzJfYXJyYXkgKHVpbnQzMl90ICphcnJheSwgc2l6ZV90IG4pCisgeworICAgaWYgKHN3YXBfZW5kaWFubmVzc19wKQorQEAgLTk5LDcgKzEwMiw4IEBAIG1heWJlX3N3YXBfdWludDMyX2FycmF5ICh1aW50MzJfdCAqYXJyYXksIHNpemVfdCBuKQorIAorIC8qIExpa2UgbWF5YmVfc3dhcF91aW50MzJfYXJyYXksIGJ1dCB0aGUgYXJyYXkgb2YgTiBlbGVtZW50cyBpcyBhdAorICAgIHRoZSBlbmQgb2YgT0JTVEFDSydzIGN1cnJlbnQgb2JqZWN0LiAgKi8KKy1zdGF0aWMgaW5saW5lIHZvaWQKKytzdGF0aWMgdm9pZAorK19fYXR0cmlidXRlX18gKCh1bnVzZWQpKQorIG1heWJlX3N3YXBfdWludDMyX29ic3RhY2sgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrLCBzaXplX3QgbikKKyB7CisgICBtYXliZV9zd2FwX3VpbnQzMl9hcnJheSAoKHVpbnQzMl90ICopIG9ic3RhY2tfbmV4dF9mcmVlIChvYnN0YWNrKSAtIG4sIG4pOworQEAgLTI3Niw0ICsyODAsNTUgQEAgZXh0ZXJuIHZvaWQgaWRlbnRpZmljYXRpb25fb3V0cHV0IChzdHJ1Y3QgbG9jYWxlZGVmX3QgKmxvY2FsZSwKKyAJCQkJICAgY29uc3Qgc3RydWN0IGNoYXJtYXBfdCAqY2hhcm1hcCwKKyAJCQkJICAgY29uc3QgY2hhciAqb3V0cHV0X3BhdGgpOworIAorK3N0YXRpYyBzaXplX3Qgd2NzbGVuX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnN0cikgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworK3N0YXRpYyB1aW50MzJfdCAqIHdtZW1jcHlfdWludDMyICh1aW50MzJfdCAqczEsIGNvbnN0IHVpbnQzMl90ICpzMiwgc2l6ZV90IG4pIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKytzdGF0aWMgdWludDMyX3QgKiB3Y3NjaHJfdWludDMyIChjb25zdCB1aW50MzJfdCAqcywgdWludDMyX3QgY2gpIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKytzdGF0aWMgaW50IHdjc2NtcF91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzMSwgY29uc3QgdWludDMyX3QgKnMyKSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7Cisrc3RhdGljIGludCB3bWVtY21wX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnMxLCBjb25zdCB1aW50MzJfdCAqczIsIHNpemVfdCBuKSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrCisrc3RhdGljIHNpemVfdAorK3djc2xlbl91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzdHIpCisreworKyAgc2l6ZV90IGxlbiA9IDA7CisrICB3aGlsZSAoc3RyW2xlbl0gIT0gMCkKKysgICAgbGVuKys7CisrICByZXR1cm4gbGVuOworK30KKysKKytzdGF0aWMgIGludAorK3dtZW1jbXBfdWludDMyIChjb25zdCB1aW50MzJfdCAqczEsIGNvbnN0IHVpbnQzMl90ICpzMiwgc2l6ZV90IG4pCisreworKyAgd2hpbGUgKG4tLSAhPSAwKQorKyAgICB7CisrICAgICAgaW50IGRpZmYgPSAqczErKyAtICpzMisrOworKyAgICAgIGlmIChkaWZmICE9IDApCisrCXJldHVybiBkaWZmOworKyAgICB9CisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludAorK3djc2NtcF91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzMSwgY29uc3QgdWludDMyX3QgKnMyKQorK3sKKysgIHdoaWxlICgqczEgIT0gMCAmJiAqczEgPT0gKnMyKQorKyAgICBzMSsrLCBzMisrOworKyAgcmV0dXJuICpzMSAtICpzMjsKKyt9CisrCisrc3RhdGljIHVpbnQzMl90ICoKKyt3bWVtY3B5X3VpbnQzMiAodWludDMyX3QgKnMxLCBjb25zdCB1aW50MzJfdCAqczIsIHNpemVfdCBuKQorK3sKKysgIHJldHVybiBtZW1jcHkgKHMxLCBzMiwgbiAqIHNpemVvZiAodWludDMyX3QpKTsKKyt9CisrCisrc3RhdGljIHVpbnQzMl90ICoKKyt3Y3NjaHJfdWludDMyIChjb25zdCB1aW50MzJfdCAqcywgdWludDMyX3QgY2gpCisreworKyAgZG8KKysgICAgaWYgKCpzID09IGNoKQorKyAgICAgIHJldHVybiAodWludDMyX3QgKikgczsKKysgIHdoaWxlICgqcysrICE9IDApOworKyAgcmV0dXJuIDA7CisrfQorKworICNlbmRpZiAvKiBsb2NmaWxlLmggKi8KK2RpZmYgLS1naXQgYS9sb2NhbGUvc2V0bG9jYWxlLmMgYi9sb2NhbGUvc2V0bG9jYWxlLmMKK2luZGV4IGZhOWNiM2EuLjhlZWUyODQgMTAwNjQ0CistLS0gYS9sb2NhbGUvc2V0bG9jYWxlLmMKKysrKyBiL2xvY2FsZS9zZXRsb2NhbGUuYworQEAgLTY0LDM2ICs2NCw2IEBAIHN0YXRpYyBjaGFyICpjb25zdCBfbmxfY3VycmVudF91c2VkW10gPQorICNlbmRpZgorIAorIAorLS8qIERlZmluZSBhbiBhcnJheSBvZiBjYXRlZ29yeSBuYW1lcyAoYWxzbyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZXMpLiAgKi8KKy1jb25zdCB1bmlvbiBjYXRuYW1lc3RyX3QgX25sX2NhdGVnb3J5X25hbWVzIGF0dHJpYnV0ZV9oaWRkZW4gPQorLSAgeworLSAgICB7CistI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCistICAgICAgY2F0ZWdvcnlfbmFtZSwKKy0jaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCistI3VuZGVmIERFRklORV9DQVRFR09SWQorLSAgICB9CistICB9OworLQorLWNvbnN0IHVpbnQ4X3QgX25sX2NhdGVnb3J5X25hbWVfaWR4c1tfX0xDX0xBU1RdIGF0dHJpYnV0ZV9oaWRkZW4gPQorLSAgeworLSNkZWZpbmUgREVGSU5FX0NBVEVHT1JZKGNhdGVnb3J5LCBjYXRlZ29yeV9uYW1lLCBpdGVtcywgYSkgXAorLSAgICBbY2F0ZWdvcnldID0gb2Zmc2V0b2YgKHVuaW9uIGNhdG5hbWVzdHJfdCwgQ0FUTkFNRU1GIChfX0xJTkVfXykpLAorLSNpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKKy0jdW5kZWYgREVGSU5FX0NBVEVHT1JZCistICB9OworLQorLS8qIEFuIGFycmF5IG9mIHRoZWlyIGxlbmd0aHMsIGZvciBjb252ZW5pZW5jZS4gICovCistY29uc3QgdWludDhfdCBfbmxfY2F0ZWdvcnlfbmFtZV9zaXplc1tdIGF0dHJpYnV0ZV9oaWRkZW4gPQorLSAgeworLSNkZWZpbmUgREVGSU5FX0NBVEVHT1JZKGNhdGVnb3J5LCBjYXRlZ29yeV9uYW1lLCBpdGVtcywgYSkgXAorLSAgICBbY2F0ZWdvcnldID0gc2l6ZW9mIChjYXRlZ29yeV9uYW1lKSAtIDEsCistI2luY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgorLSN1bmRlZglERUZJTkVfQ0FURUdPUlkKKy0gICAgW0xDX0FMTF0gPSBzaXplb2YgKCJMQ19BTEwiKSAtIDEKKy0gIH07CistCistCisgI2lmZGVmIE5MX0NVUlJFTlRfSU5ESVJFQ1QKKyAjIGRlZmluZSBXRUFLX1BPU1RMT0FEKHBvc3Rsb2FkKSB3ZWFrX2V4dGVybiAocG9zdGxvYWQpCisgI2Vsc2UKK2RpZmYgLS1naXQgYS9sb2NhbGUveGxvY2FsZS5jIGIvbG9jYWxlL3hsb2NhbGUuYworaW5kZXggZmVjNDU2NC4uZjAwMjY5YyAxMDA2NDQKKy0tLSBhL2xvY2FsZS94bG9jYWxlLmMKKysrKyBiL2xvY2FsZS94bG9jYWxlLmMKK0BAIC0xOCw2ICsxOCw3IEBACisgICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgI2luY2x1ZGUgImxvY2FsZWluZm8uaCIKKyAKKyAjZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpIFwKK0BAIC0yNSw2ICsyNiwxOSBAQCBleHRlcm4gc3RydWN0IF9fbG9jYWxlX2RhdGEgX25sX0NfIyNjYXRlZ29yeTsKKyAjaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCisgI3VuZGVmCURFRklORV9DQVRFR09SWQorIAorKy8qIElmIHRoZSBsb2NhbGUgc3VwcG9ydCBjb2RlIGlzbid0IGVuYWJsZWQsIGRvbid0IGdlbmVyYXRlIHN0cm9uZworKyAgIHJlZmVyZW5jZSB0byB0aGUgQyBsb2NhbGVfZGF0YSBzdHJ1Y3R1cmVzIGhlcmU7IGxldCB0aGUgTWFrZWZpbGUKKysgICBkZWNpZGUgd2hpY2ggb25lcyB0byBpbmNsdWRlLiAgKEluIHRoZSBzdGF0aWMgbGlua2luZyBjYXNlLCB0aGUKKysgICBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZSAnY2xhc3MnLCAndG91cHBlcicsIGFuZCAndG9sb3dlcicgdGFibGVzCisrICAgd2lsbCBjYXVzZSBDLWN0eXBlLm8gdG8gYmUgYnJvdWdodCBpbiwgYXMgaXQgc2hvdWxkIGJlLCBldmVuIHdoZW4KKysgICB0aGUgcmVmZXJlbmNlIHRvIF9ubF9DX0xDX0NUWVBFIHdpbGwgYmUgd2Vhay4pICAqLworKyNpZiAhIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKyMgZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpIFwKKysgIHdlYWtfZXh0ZXJuIChfbmxfQ18jI2NhdGVnb3J5KQorKyMgaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCisrIyB1bmRlZglERUZJTkVfQ0FURUdPUlkKKysjZW5kaWYKKysKKyAvKiBEZWZpbmVkIGluIGxvY2FsZS9DLWN0eXBlLmMuICAqLworIGV4dGVybiBjb25zdCBjaGFyIF9ubF9DX0xDX0NUWVBFX2NsYXNzW10gYXR0cmlidXRlX2hpZGRlbjsKKyBleHRlcm4gY29uc3QgY2hhciBfbmxfQ19MQ19DVFlQRV90b3VwcGVyW10gYXR0cmlidXRlX2hpZGRlbjsKK0BAIC01MiwzICs2NiwyNiBAQCBjb25zdCBzdHJ1Y3QgX19sb2NhbGVfc3RydWN0IF9ubF9DX2xvY29iaiBhdHRyaWJ1dGVfaGlkZGVuID0KKyAgICAgLl9fY3R5cGVfdG9sb3dlciA9IChjb25zdCBpbnQgKikgX25sX0NfTENfQ1RZUEVfdG9sb3dlciArIDEyOCwKKyAgICAgLl9fY3R5cGVfdG91cHBlciA9IChjb25zdCBpbnQgKikgX25sX0NfTENfQ1RZUEVfdG91cHBlciArIDEyOAorICAgfTsKKysKKysKKysjaWYgISBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysvKiBXaGVuIGxvY2FsZSBjb2RlIGlzIGVuYWJsZWQsIHRoZXNlIGFyZSBlYWNoIGRlZmluZWQgaW4gdGhlCisrICAgYXBwcm9wcmlhdGUgbGMtQ0FURUdPUlkuYyBmaWxlLCBzbyB0aGF0IHN0YXRpYyBsaW5rcyAod2hlbiBfX3RocmVhZAorKyAgIGlzIHN1cHBvcnRlZCkgYnJpbmcgaW4gb25seSB0aG9zZSBsYy1DQVRFR09SWS5vIGZpbGVzIGZvcgorKyAgIGNhdGVnb3JpZXMgdGhlIHByb2dyYW0gYWN0dWFsbHkgdXNlczsgbG9vayBmb3IgTkxfQ1VSUkVOVF9JTkRJUkVDVAorKyAgIGluIGxvY2FsZWluZm8uaC4KKysKKysgICBXaGVuIGxvY2FsZSBjb2RlIGlzIGRpc2FibGVkLCB0aGUgX25sX0NfQ0FURUdPUlkgb2JqZWN0cyBhcmUgdGhlCisrICAgb25seSBwb3NzaWJsZSByZWZlcmVudHMuICBBdCB0aGUgbW9tZW50LCB0aGVyZSBpc24ndCBhIHdheSB0byBnZXQKKysgICBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgZGVmaW5lZCBpbiBldmVyeSBjb21waWxhdGlvbiB1bml0IHRoYXQKKysgICAjaW5jbHVkZXMgbG9jYWxlaW5mby5oLCBzbyB3ZSBjYW4ndCBqdXN0IHR1cm4gb2ZmCisrICAgTkxfQ1VSUkVOVF9JTkRJUkVDVC4gIFNvIHdlJ2xsIGRlZmluZSB0aGUgX25sX2N1cnJlbnRfQ0FURUdPUlkKKysgICBwb2ludGVycyBoZXJlLiAgKi8KKysjaWYgZGVmaW5lZCAoTkxfQ1VSUkVOVF9JTkRJUkVDVCkKKysjZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpICAgICAgXAorKyAgX190aHJlYWQgc3RydWN0IF9fbG9jYWxlX2RhdGEgKiBjb25zdCAqX25sX2N1cnJlbnRfIyNjYXRlZ29yeSAgIFwKKysgIGF0dHJpYnV0ZV9oaWRkZW4gPSAmX25sX0NfbG9jb2JqLl9fbG9jYWxlc1tjYXRlZ29yeV07CisrI2luY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgorKyN1bmRlZiBERUZJTkVfQ0FURUdPUlkKKysjZW5kaWYKKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCitkaWZmIC0tZ2l0IGEvbG9jYWxlZGF0YS9NYWtlZmlsZSBiL2xvY2FsZWRhdGEvTWFrZWZpbGUKK2luZGV4IGViZjZhYzkuLjE4NzA3NTMgMTAwNjQ0CistLS0gYS9sb2NhbGVkYXRhL01ha2VmaWxlCisrKysgYi9sb2NhbGVkYXRhL01ha2VmaWxlCitAQCAtMjEsMTIgKzIxLDIyIEBAIHN1YmRpciA6PSBsb2NhbGVkYXRhCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCistIyBMaXN0IHdpdGggYWxsIGF2YWlsYWJsZSBjaGFyYWN0ZXIgc2V0IGRlc2NyaXB0aW9ucy4KKy1jaGFybWFwcyA6PSAkKHdpbGRjYXJkIGNoYXJtYXBzL1tBLUldKikgJCh3aWxkY2FyZCBjaGFybWFwcy9bSi1aXSopCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworIAorICMgTGlzdCB3aXRoIGFsbCBhdmFpbGFibGUgY2hhcmFjdGVyIHNldCBkZXNjcmlwdGlvbnMuCistbG9jYWxlcyA6PSAkKHdpbGRjYXJkIGxvY2FsZXMvKikKKy0KKythbGwtY2hhcm1hcHMgOj0gJCh3aWxkY2FyZCBjaGFybWFwcy9bQS1JXSopICQod2lsZGNhcmQgY2hhcm1hcHMvW0otWl0qKQorKworK2FsbC1sb2NhbGVzIDo9ICQod2lsZGNhcmQgbG9jYWxlcy8qKQorKworKyMgSWYgdGhlIEVHTElCQ19MT0NBTEVTIG9wdGlvbiBncm91cCBpcyBub3QgZW5hYmxlZCwgdHJpbSB0aGUKKysjIGxpc3Qgb2YgY2hhcm1hcCBhbmQgbG9jYWxlIHNvdXJjZSBmaWxlcy4KKytpZmVxICgkKE9QVElPTl9FR0xJQkNfTE9DQUxFUykseSkKKytjaGFybWFwcyA6PSAkKGFsbC1jaGFybWFwcykKKytsb2NhbGVzICA6PSAkKGFsbC1sb2NhbGVzKQorK2Vsc2UKKytjaGFybWFwcyA6PQorK2xvY2FsZXMgIDo9IGxvY2FsZXMvUE9TSVgKKytlbmRpZgorIAorIHN1YmRpci1kaXJzID0gdGVzdHMtbWJ3YworIHZwYXRoICUuYyB0ZXN0cy1tYndjCitAQCAtNzEsMTQgKzgxLDIwIEBAIGxvY2FsZV90ZXN0X3N1aXRlIDo9IHRzdF9pc3dhbG51bSB0c3RfaXN3YWxwaGEgdHN0X2lzd2NudHJsICAgICAgICAgICAgXAorIAkJICAgICB0c3Rfd2NzeGZybSB0c3Rfd2N0b2IgdHN0X3djdG9tYiB0c3Rfd2N0cmFucyAgICAgIFwKKyAJCSAgICAgdHN0X3djdHlwZSB0c3Rfd2N3aWR0aAorIAorLXRlc3RzID0gJChsb2NhbGVfdGVzdF9zdWl0ZSkgdHN0LWRpZ2l0cyB0c3Qtc2V0bG9jYWxlIGJ1Zy1pY29udi10cmFucyBcCisrIyBTaW5jZSB0aGVzZSB0ZXN0cyBidWlsZCB0aGVpciBvd24gbG9jYWxlIGZpbGVzLCB0aGV5J3JlIG5vdAorKyMgZGVwZW5kZW50IG9uIHRoZSBPUFRJT05fRUdMSUJDX0xPQ0FMRVMgb3B0aW9uIGdyb3VwLiAgQnV0IHRoZXkgZG8KKysjIG5lZWQgdGhlIGxvY2FsZSBmdW5jdGlvbnMgdG8gYmUgcHJlc2VudC4KKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpIFwKKysgICAgICs9ICQobG9jYWxlX3Rlc3Rfc3VpdGUpIHRzdC1kaWdpdHMgdHN0LXNldGxvY2FsZSBidWctaWNvbnYtdHJhbnMgXAorIAl0c3QtbGVha3MgdHN0LW1ic3djczEgdHN0LW1ic3djczIgdHN0LW1ic3djczMgdHN0LW1ic3djczQgdHN0LW1ic3djczUgXAorIAl0c3QtbWJzd2NzNiB0c3QteGxvY2FsZTEgdHN0LXhsb2NhbGUyIGJ1Zy11c2VzZXRsb2NhbGUgXAorIAl0c3Qtc3RyZm1vbjEgdHN0LXNzY2FuZiBidWctc2V0bG9jYWxlMSB0c3Qtc2V0bG9jYWxlMiB0c3Qtc2V0bG9jYWxlMyBcCisgCXRzdC13Y3R5cGUKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkpCisgdGVzdHMtc3RhdGljID0gYnVnLXNldGxvY2FsZTEtc3RhdGljCisgdGVzdHMgKz0gJCh0ZXN0cy1zdGF0aWMpCistaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKytlbmRpZgorK2lmZXEgKHllc3ksJChidWlsZC1zaGFyZWQpJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSkKKyBpZm5lcSAobm8sJChQRVJMKSkKKyB0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KW10cmFjZS10c3QtbGVha3Mub3V0CisgZW5kaWYKK0BAIC05NSw2ICsxMTEsNyBAQCB0ZXN0czogJChvYmpkaXIpL2ljb252ZGF0YS9nY29udi1tb2R1bGVzCisgdGVzdHMtc3RhdGljICs9IHRzdC1sYW5naW5mby1zdGF0aWMKKyAKKyBpZmVxICgkKHJ1bi1idWlsdC10ZXN0cykseWVzKQorK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSkKKyB0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KXNvcnQtdGVzdC5vdXQgJChvYmpwZngpdHN0LWZtb24ub3V0IFwKKyAJCSAkKG9ianBmeCl0c3QtbG9jYWxlLm91dCAkKG9ianBmeCl0c3QtcnBtYXRjaC5vdXQgXAorIAkJICQob2JqcGZ4KXRzdC10cmFucy5vdXQgJChvYmpwZngpdHN0LWN0eXBlLm91dCBcCitAQCAtMTA5LDYgKzEyNiw3IEBAIExPQ0FMRVMgOj0gZGVfREUuSVNPLTg4NTktMSBkZV9ERS5VVEYtOCBlbl9VUy5BTlNJX1gzLjQtMTk2OCBcCisgCSAgIHRyX1RSLklTTy04ODU5LTkgZW5fR0IuVVRGLTggdWtfVUEuVVRGLTgKKyBpbmNsdWRlIC4uL2dlbi1sb2NhbGVzLm1rCisgZW5kaWYKKytlbmRpZgorIAorIGluY2x1ZGUgLi4vUnVsZXMKKyAKK0BAIC0xOTEsNiArMjA5LDExIEBAIGVuZGlmCisgCisgaW5jbHVkZSBTVVBQT1JURUQKKyAKKysjIE9ubHkgaW5zdGFsbCBsb2NhbGUgZGF0YSBpZiBPUFRJT05fRUdMSUJDX0xPQ0FMRVMgaXMgc2VsZWN0ZWQuCisraWZuZXEgKCQoT1BUSU9OX0VHTElCQ19MT0NBTEVTKSx5KQorK1NVUFBPUlRFRC1MT0NBTEVTIDo9CisrZW5kaWYKKysKKyBJTlNUQUxMLVNVUFBPUlRFRC1MT0NBTEVTPSQoYWRkcHJlZml4IGluc3RhbGwtLCAkKFNVUFBPUlRFRC1MT0NBTEVTKSkKKyAKKyAjIFNvbWV0aW1lcyB0aGUgd2hvbGUgY29sbGVjdGlvbiBvZiBsb2NhbGUgZmlsZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KK2RpZmYgLS1naXQgYS9sb2dpbi9NYWtlZmlsZSBiL2xvZ2luL01ha2VmaWxlCitpbmRleCAwZjRiYjIyLi40MDM2ZGRiIDEwMDY0NAorLS0tIGEvbG9naW4vTWFrZWZpbGUKKysrKyBiL2xvZ2luL01ha2VmaWxlCitAQCAtMTgsNiArMTgsNyBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgbG9naW4gcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworIAorIHN1YmRpcgk6PSBsb2dpbgorIAorQEAgLTI1LDE0ICsyNiwxNiBAQCBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKyBoZWFkZXJzCTo9IHV0bXAuaCBiaXRzL3V0bXAuaCBsYXN0bG9nLmggcHR5LmgKKyAKKy1yb3V0aW5lcyA6PSBnZXRsb2dpbiBnZXRsb2dpbl9yIHNldGxvZ2luIGdldGxvZ2luX3JfY2hrIFwKKy0JICAgIGdldHV0ZW50IGdldHV0ZW50X3IgZ2V0dXRpZCBnZXR1dGxpbmUgZ2V0dXRpZF9yIGdldHV0bGluZV9yIFwKKy0JICAgIHV0bXBfZmlsZSB1dG1wbmFtZSB1cGR3dG1wIGdldHB0IGdyYW50cHQgdW5sb2NrcHQgcHRzbmFtZSBcCistCSAgICBwdHNuYW1lX3JfY2hrCisrcm91dGluZXMgOj0gZ2V0cHQgZ3JhbnRwdCB1bmxvY2twdCBwdHNuYW1lIHB0c25hbWVfcl9jaGsKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfVVRNUCkgXAorKwkgKz0gZ2V0dXRlbnQgZ2V0dXRlbnRfciBnZXR1dGlkIGdldHV0bGluZSBnZXR1dGlkX3IgZ2V0dXRsaW5lX3IgXAorKwkgICAgdXRtcF9maWxlIHV0bXBuYW1lIHVwZHd0bXAKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfR0VUTE9HSU4pICs9IGdldGxvZ2luIGdldGxvZ2luX3IgZ2V0bG9naW5fcl9jaGsKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfQlNEKSArPSBzZXRsb2dpbgorIAorIENGTEFHUy1ncmFudHB0LmMgPSAtRExJQkVYRUNESVI9JyIkKGxpYmV4ZWNkaXIpIicKKyAKKy1vdGhlcnMgPSB1dG1wZHVtcAorK290aGVycy0kKE9QVElPTl9FR0xJQkNfVVRNUCkgKz0gdXRtcGR1bXAKKyAKKyBpZmVxICh5ZXMsJChidWlsZC1wdC1jaG93bikpCisgb3RoZXJzICs9IHB0X2Nob3duCitAQCAtNDYsOCArNDksOCBAQCB2cGF0aCAlLmMgcHJvZ3JhbXMKKyB0ZXN0cyA6PSB0c3QtdXRtcCB0c3QtdXRtcHggdHN0LWdyYW50cHQgdHN0LXB0c25hbWUgdHN0LWdldGxvZ2luCisgCisgIyBCdWlsZCB0aGUgLWx1dGlsIGxpYnJhcnkgd2l0aCB0aGVzZSBleHRyYSBmdW5jdGlvbnMuCistZXh0cmEtbGlicyAgICAgIDo9IGxpYnV0aWwKKy1leHRyYS1saWJzLW90aGVycyA6PSAkKGV4dHJhLWxpYnMpCisrZXh0cmEtbGlicy0kKE9QVElPTl9FR0xJQkNfVVRNUCkgOj0gbGlidXRpbAorK2V4dHJhLWxpYnMtb3RoZXJzIDo9ICQoZXh0cmEtbGlicy15KQorIAorIGxpYnV0aWwtcm91dGluZXM6PSBsb2dpbiBsb2dpbl90dHkgbG9nb3V0IGxvZ3d0bXAgb3BlbnB0eSBmb3JrcHR5CisgCitkaWZmIC0tZ2l0IGEvbWFsbG9jL01ha2VmaWxlIGIvbWFsbG9jL01ha2VmaWxlCitpbmRleCA2N2VkMjkzLi4yNzJjYTRkIDEwMDY0NAorLS0tIGEvbWFsbG9jL01ha2VmaWxlCisrKysgYi9tYWxsb2MvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJTWFrZWZpbGUgZm9yIG1hbGxvYyByb3V0aW5lcworICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IG1hbGxvYworIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTM5LDkgKzQxLDE1IEBAIGluc3RhbGwtbGliIDo9IGxpYm1jaGVjay5hCisgbm9uLWxpYi5hIDo9IGxpYm1jaGVjay5hCisgCisgIyBBZGRpdGlvbmFsIGxpYnJhcnkuCisraWZlcSAoJChPUFRJT05fRUdMSUJDX01FTVVTQUdFKSx5KQorIGV4dHJhLWxpYnMgPSBsaWJtZW11c2FnZQorIGV4dHJhLWxpYnMtb3RoZXJzID0gJChleHRyYS1saWJzKQorIAorK2lmZGVmIE9QVElPTl9FR0xJQkNfTUVNVVNBR0VfREVGQVVMVF9CVUZGRVJfU0laRQorK0NQUEZMQUdTLW1lbXVzYWdlICs9IC1EX19PUFRJT05fRUdMSUJDX01FTVVTQUdFX0RFRkFVTFRfQlVGRkVSX1NJWkU9JChPUFRJT05fRUdMSUJDX01FTVVTQUdFX0RFRkFVTFRfQlVGRkVSX1NJWkUpCisrZW5kaWYKKytlbmRpZgorKworIGxpYm1lbXVzYWdlLXJvdXRpbmVzID0gbWVtdXNhZ2UKKyBsaWJtZW11c2FnZS1pbmhpYml0LW8gPSAkKGZpbHRlci1vdXQgLm9zLCQob2JqZWN0LXN1ZmZpeGVzKSkKKyAKK0BAIC03MSw3ICs3OSw3IEBAIGVuZGlmCisgIyBVbmxlc3Mgd2UgZ2V0IGEgdGVzdCBmb3IgdGhlIGF2YWlsYWJpbGl0eSBvZiBsaWJnZCB3aGljaCBhbHNvIHdvcmtzCisgIyBmb3IgY3Jvc3MtY29tcGlsaW5nIHdlIGRpc2FibGUgdGhlIG1lbXVzYWdlc3RhdCBnZW5lcmF0aW9uIGluIHRoaXMKKyAjIHNpdHVhdGlvbi4KKy1pZm5lcSAoJChjcm9zcy1jb21waWxpbmcpLHllcykKKytpZmVxICgkKGNyb3NzLWNvbXBpbGluZykkKE9QVElPTl9FR0xJQkNfTUVNVVNBR0UpLG5veSkKKyAjIElmIHRoZSBnZCBsaWJyYXJ5IGlzIGF2YWlsYWJsZSB3ZSBidWlsZCB0aGUgYG1lbXVzYWdlc3RhdCcgcHJvZ3JhbS4KKyBpZm5lcSAoJChMSUJHRCksbm8pCisgb3RoZXJzOiAkKG9ianBmeCltZW11c2FnZQorZGlmZiAtLWdpdCBhL21hbGxvYy9tZW11c2FnZS5jIGIvbWFsbG9jL21lbXVzYWdlLmMKK2luZGV4IGE1N2JhOGUuLjczMmJhOWQgMTAwNjQ0CistLS0gYS9tYWxsb2MvbWVtdXNhZ2UuYworKysrIGIvbWFsbG9jL21lbXVzYWdlLmMKK0BAIC0zMyw2ICszMyw3IEBACisgI2luY2x1ZGUgPHN0ZGludC5oPgorICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorICNpbmNsdWRlIDxzeXMvdGltZS5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpbmNsdWRlIDxtZW11c2FnZS5oPgorIAorQEAgLTkzLDcgKzk0LDExIEBAIHN0YXRpYyBfX3RocmVhZCB1aW50cHRyX3Qgc3RhcnRfc3A7CisgI2RlZmluZSBwZWFrX3N0YWNrICAgICAgcGVha191c2VbMV0KKyAjZGVmaW5lIHBlYWtfdG90YWwgICAgICBwZWFrX3VzZVsyXQorIAorLSNkZWZpbmUgREVGQVVMVF9CVUZGRVJfU0laRSAgICAgMzI3NjgKKysjaWZuZGVmIF9fT1BUSU9OX0VHTElCQ19NRU1VU0FHRV9ERUZBVUxUX0JVRkZFUl9TSVpFCisrIyBkZWZpbmUgREVGQVVMVF9CVUZGRVJfU0laRQkzMjc2OAorKyNlbHNlCisrIyBkZWZpbmUgREVGQVVMVF9CVUZGRVJfU0laRQlfX09QVElPTl9FR0xJQkNfTUVNVVNBR0VfREVGQVVMVF9CVUZGRVJfU0laRQorKyNlbmRpZgorIHN0YXRpYyBzaXplX3QgYnVmZmVyX3NpemU7CisgCisgc3RhdGljIGludCBmZCA9IC0xOworZGlmZiAtLWdpdCBhL21hbGxvYy9tZW11c2FnZS5zaCBiL21hbGxvYy9tZW11c2FnZS5zaAoraW5kZXggOGFiOGNjMi4uZDE4ZjQ0NiAxMDA3NTUKKy0tLSBhL21hbGxvYy9tZW11c2FnZS5zaAorKysrIGIvbWFsbG9jL21lbXVzYWdlLnNoCitAQCAtMzUsNyArMzUsNyBAQCBkb19taXNzaW5nX2FyZygpIHsKKyAKKyAjIFByaW50IGhlbHAgbWVzc2FnZQorIGRvX2hlbHAoKSB7CistICBlY2hvICQiVXNhZ2U6IG1lbXVzYWdlIFtPUFRJT05dLi4uIFBST0dSQU0gW1BST0dSQU1PUFRJT05dLi4uCisrICBwcmludGYgJCJVc2FnZTogbWVtdXNhZ2UgW09QVElPTl0uLi4gUFJPR1JBTSBbUFJPR1JBTU9QVElPTl0uLi4KKyBQcm9maWxlIG1lbW9yeSB1c2FnZSBvZiBQUk9HUkFNLgorIAorICAgIC1uLC0tcHJvZ25hbWU9TkFNRSAgICAgTmFtZSBvZiB0aGUgcHJvZ3JhbSBmaWxlIHRvIHByb2ZpbGUKK2RpZmYgLS1naXQgYS9tYXRoL01ha2VmaWxlIGIvbWF0aC9NYWtlZmlsZQoraW5kZXggNjM4OGJhZS4uZWQxYzUxMSAxMDA2NDQKKy0tLSBhL21hdGgvTWFrZWZpbGUKKysrKyBiL21hdGgvTWFrZWZpbGUKK0BAIC0yMSw2ICsyMSw4IEBAIHN1YmRpcgkJOj0gbWF0aAorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyAjIEluc3RhbGxlZCBoZWFkZXIgZmlsZXMuCisgaGVhZGVycwkJOj0gbWF0aC5oIGJpdHMvbWF0aGNhbGxzLmggYml0cy9tYXRoaW5saW5lLmggYml0cy9odWdlX3ZhbC5oIFwKKyAJCSAgIGJpdHMvaHVnZV92YWxmLmggYml0cy9odWdlX3ZhbGwuaCBiaXRzL2luZi5oIGJpdHMvbmFuLmggXAorQEAgLTM0LDggKzM2LDggQEAgYXV4CQk6PSBzZXRmcHVjdyBmcHVfY29udHJvbAorIAorICMgQnVpbGQgdGhlIC1sbSBsaWJyYXJ5LgorIAorLWV4dHJhLWxpYnMJOj0gbGlibQorLWV4dHJhLWxpYnMtb3RoZXJzID0gJChleHRyYS1saWJzKQorK2V4dHJhLWxpYnMtJChPUFRJT05fRUdMSUJDX0xJQk0pIDo9IGxpYm0KKytleHRyYS1saWJzLW90aGVycy0kKE9QVElPTl9FR0xJQkNfTElCTSkgPSAkKGV4dHJhLWxpYnMtJChPUFRJT05fRUdMSUJDX0xJQk0pKQorIAorIGxpYm0tc3VwcG9ydCA9IHNfbGliX3ZlcnNpb24gc19tYXRoZXJyIHNfc2lnbmdhbQkJCVwKKyAJICAgICAgIGZjbHJleGNwdCBmZ2V0ZXhjcHRmbGcgZnJhaXNlZXhjcHQgZnNldGV4Y3B0ZmxnCQlcCitkaWZmIC0tZ2l0IGEvbWlzYy9NYWtlZmlsZSBiL21pc2MvTWFrZWZpbGUKK2luZGV4IGFlY2IwZGEuLmU2YjdjMjMgMTAwNjQ0CistLS0gYS9taXNjL01ha2VmaWxlCisrKysgYi9taXNjL01ha2VmaWxlCitAQCAtMTksNiArMTksMTAgQEAKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgbWlzYyBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKyAKKysjIFNvbWUgc3lzdGVtLWRlcGVuZGVudCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlc2UgZnVuY3Rpb25zIHVzZSBvcHRpb24KKysjIGdyb3VwcyAoc2VlIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L01ha2VmaWxlLCBmb3IgZXhhbXBsZSkuCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBtaXNjCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtNDYsNDAgKzUwLDQ3IEBAIHJvdXRpbmVzIDo9IGJyayBzYnJrIHNzdGsgaW9jdGwgXAorIAkgICAgc2VsZWN0IHBzZWxlY3QgXAorIAkgICAgYWNjdCBjaHJvb3QgZnN5bmMgc3luYyBmZGF0YXN5bmMgc3luY2ZzIHJlYm9vdCBcCisgCSAgICBnZXRob3N0aWQgc2V0aG9zdGlkIFwKKy0JICAgIHJldm9rZSB2aGFuZ3VwIFwKKysJICAgIHZoYW5ndXAgXAorIAkgICAgc3dhcG9uIHN3YXBvZmYgbWt0ZW1wIG1rc3RlbXAgbWtzdGVtcDY0IG1rZHRlbXAgXAorIAkgICAgbWtvc3RlbXAgbWtvc3RlbXA2NCBta3N0ZW1wcyBta3N0ZW1wczY0IG1rb3N0ZW1wcyBta29zdGVtcHM2NCBcCisgCSAgICB1YWxhcm0gdXNsZWVwIFwKKyAJICAgIGd0dHkgc3R0eSBcCisgCSAgICBwdHJhY2UgXAorLQkgICAgZnN0YWIgbW50ZW50IG1udGVudF9yIFwKKysJICAgIG1udGVudCBtbnRlbnRfciBcCisgCSAgICB1dGltZXMgbHV0aW1lcyBmdXRpbWVzIGZ1dGltZXNhdCBcCisgCSAgICB0cnVuY2F0ZSBmdHJ1bmNhdGUgdHJ1bmNhdGU2NCBmdHJ1bmNhdGU2NCBcCistCSAgICBjaGZsYWdzIGZjaGZsYWdzIFwKKyAJICAgIGluc3JlbXF1ZSBnZXR0dHllbnQgZ2V0dXNlcnNoZWxsIGdldHBhc3MgdHR5c2xvdCBcCisgCSAgICBzeXNsb2cgc3lzY2FsbCBkYWVtb24gXAorIAkgICAgbW1hcCBtbWFwNjQgbXVubWFwIG1wcm90ZWN0IG1zeW5jIG1hZHZpc2UgbWluY29yZSByZW1hcF9maWxlX3BhZ2VzXAorIAkgICAgbWxvY2sgbXVubG9jayBtbG9ja2FsbCBtdW5sb2NrYWxsIFwKKy0JICAgIGVmZ2N2dCBlZmdjdnRfciBxZWZnY3Z0IHFlZmdjdnRfciBcCisgCSAgICBoc2VhcmNoIGhzZWFyY2hfciB0c2VhcmNoIGxzZWFyY2ggXAorIAkgICAgZXJyIGVycm9yIHVzdGF0IFwKKy0JICAgIGdldHN5c3N0YXRzIGRpcm5hbWUgcmVnZXhwIFwKKysJICAgIGdldHN5c3N0YXRzIGRpcm5hbWUgXAorIAkgICAgZ2V0bG9hZGF2ZyBnZXRjbGt0Y2sgXAorIAkgICAgZmdldHhhdHRyIGZsaXN0eGF0dHIgZnJlbW92ZXhhdHRyIGZzZXR4YXR0ciBnZXR4YXR0ciBcCisgCSAgICBsaXN0eGF0dHIgbGdldHhhdHRyIGxsaXN0eGF0dHIgbHJlbW92ZXhhdHRyIGxzZXR4YXR0ciBcCisgCSAgICByZW1vdmV4YXR0ciBzZXR4YXR0ciBnZXRhdXh2YWwgaWZ1bmMtaW1wbC1saXN0CisgCisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfUkVHRVhQKSArPSByZWdleHAKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfRlNUQUIpICs9IGZzdGFiCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0JTRCkgKz0gY2hmbGFncyBmY2hmbGFncyByZXZva2UKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfRkNWVCkgKz0gZWZnY3Z0IGVmZ2N2dF9yIHFlZmdjdnQgcWVmZ2N2dF9yCisrCisgZ2VuZXJhdGVkICs9IHRzdC1lcnJvcjEubXRyYWNlIHRzdC1lcnJvcjEtbWVtLm91dAorIAorIGF1eCA6PSBpbml0LW1pc2MKKyBpbnN0YWxsLWxpYiA6PSBsaWJnLmEKKyBncGwybGdwbCA6PSBlcnJvci5jIGVycm9yLmgKKyAKKy10ZXN0cyA6PSB0c3QtZGlybmFtZSB0c3QtdHNlYXJjaCB0c3QtZmRzZXQgdHN0LWVmZ2N2dCB0c3QtbW50ZW50IHRzdC1oc2VhcmNoIFwKKy0JIHRzdC1lcnJvcjEgdHN0LXBzZWxlY3QgdHN0LWluc3JlbXF1ZSB0c3QtbW50ZW50MiBidWctaHNlYXJjaDEKKyt0ZXN0cyA6PSB0c3QtZGlybmFtZSB0c3QtdHNlYXJjaCB0c3QtZmRzZXQgdHN0LW1udGVudCB0c3QtaHNlYXJjaCBcCisrCSB0c3QtcHNlbGVjdCB0c3QtaW5zcmVtcXVlIHRzdC1tbnRlbnQyIGJ1Zy1oc2VhcmNoMQorK3Rlc3RzLSQoT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8pICs9IHRzdC1lcnJvcjEKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfRkNWVCkgKz0gdHN0LWVmZ2N2dAorIGlmZXEgKCQocnVuLWJ1aWx0LXRlc3RzKSx5ZXMpCisraWZlcSAoeSwkKE9QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPKSkKKyB0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KXRzdC1lcnJvcjEtbWVtLm91dAorIGVuZGlmCisrZW5kaWYKKyAKKyBDRkxBR1Mtc2VsZWN0LmMgPSAtZmV4Y2VwdGlvbnMgLWZhc3luY2hyb25vdXMtdW53aW5kLXRhYmxlcworIENGTEFHUy10c2VhcmNoLmMgPSAkKHVzZXMtY2FsbGJhY2tzKQorZGlmZiAtLWdpdCBhL21pc2MvZXJyLmMgYi9taXNjL2Vyci5jCitpbmRleCA3Yjk4MTU3Li5lZmNlOGQ1IDEwMDY0NAorLS0tIGEvbWlzYy9lcnIuYworKysrIGIvbWlzYy9lcnIuYworQEAgLTIyLDYgKzIyLDcgQEAKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2luY2x1ZGUgPHdjaGFyLmg+CisgI2RlZmluZSBmbG9ja2ZpbGUocykgX0lPX2Zsb2NrZmlsZSAocykKK0BAIC0zNyw2ICszOCw3IEBAIGV4dGVybiBjaGFyICpfX3Byb2duYW1lOworICAgdmFfZW5kIChhcCk7CQkJCQkJCQkgICAgICBcCisgfQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgc3RhdGljIHZvaWQKKyBjb252ZXJ0X2FuZF9wcmludCAoY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBhcCkKKyB7CitAQCAtODEsNiArODMsNyBAQCBjb252ZXJ0X2FuZF9wcmludCAoY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBhcCkKKyAKKyAgIF9fdmZ3cHJpbnRmIChzdGRlcnIsIHdmb3JtYXQsIGFwKTsKKyB9CisrI2VuZGlmCisgCisgdm9pZAorIHZ3YXJueCAoY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBhcCkKK0BAIC04OCw5ICs5MSwxMyBAQCB2d2FybnggKGNvbnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgYXApCisgICBmbG9ja2ZpbGUgKHN0ZGVycik7CisgICBpZiAoX0lPX2Z3aWRlIChzdGRlcnIsIDApID4gMCkKKyAgICAgeworKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgICAgICAgX19md3ByaW50ZiAoc3RkZXJyLCBMIiVzOiAiLCBfX3Byb2duYW1lKTsKKyAgICAgICBjb252ZXJ0X2FuZF9wcmludCAoZm9ybWF0LCBhcCk7CisgICAgICAgcHV0d2NfdW5sb2NrZWQgKEwnXG4nLCBzdGRlcnIpOworKyNlbHNlCisrICAgICAgYWJvcnQgKCk7CisrI2VuZGlmCisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworQEAgLTExMSw2ICsxMTgsNyBAQCB2d2FybiAoY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBhcCkKKyAgIGZsb2NrZmlsZSAoc3RkZXJyKTsKKyAgIGlmIChfSU9fZndpZGUgKHN0ZGVyciwgMCkgPiAwKQorICAgICB7CisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyAgICAgICBfX2Z3cHJpbnRmIChzdGRlcnIsIEwiJXM6ICIsIF9fcHJvZ25hbWUpOworICAgICAgIGlmIChmb3JtYXQpCisgCXsKK0BAIC0xMTksNiArMTI3LDkgQEAgdndhcm4gKGNvbnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgYXApCisgCX0KKyAgICAgICBfX3NldF9lcnJubyAoZXJyb3IpOworICAgICAgIF9fZndwcmludGYgKHN0ZGVyciwgTCIlbVxuIik7CisrI2Vsc2UKKysgICAgICBhYm9ydCAoKTsKKysjZW5kaWYKKyAgICAgfQorICAgZWxzZQorICAgICB7CitkaWZmIC0tZ2l0IGEvbWlzYy9lcnJvci5jIGIvbWlzYy9lcnJvci5jCitpbmRleCBhYWExMjBkLi5kNmNiYzgyIDEwMDY0NAorLS0tIGEvbWlzYy9lcnJvci5jCisrKysgYi9taXNjL2Vycm9yLmMKK0BAIC0zNSw2ICszNSw3IEBACisgI2VuZGlmCisgCisgI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICMgaW5jbHVkZSA8bGliaW50bC5oPgorICMgaW5jbHVkZSA8c3RkYm9vbC5oPgorICMgaW5jbHVkZSA8c3RkaW50Lmg+CitAQCAtMjA1LDYgKzIwNiw3IEBAIGVycm9yX3RhaWwgKGludCBzdGF0dXMsIGludCBlcnJudW0sIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZhX2xpc3QgYXJncykKKyAjaWYgX0xJQkMKKyAgIGlmIChfSU9fZndpZGUgKHN0ZGVyciwgMCkgPiAwKQorICAgICB7CisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyAgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChtZXNzYWdlKSArIDE7CisgICAgICAgd2NoYXJfdCAqd21lc3NhZ2UgPSBOVUxMOworICAgICAgIG1ic3RhdGVfdCBzdDsKK0BAIC0yNjUsNiArMjY3LDkgQEAgZXJyb3JfdGFpbCAoaW50IHN0YXR1cywgaW50IGVycm51bSwgY29uc3QgY2hhciAqbWVzc2FnZSwgdmFfbGlzdCBhcmdzKQorIAorICAgICAgIGlmICh1c2VfbWFsbG9jKQorIAlmcmVlICh3bWVzc2FnZSk7CisrI2Vsc2UKKysgICAgICBhYm9ydCAoKTsKKysjZW5kaWYKKyAgICAgfQorICAgZWxzZQorICNlbmRpZgorZGlmZiAtLWdpdCBhL21pc2MvdHN0LWVmZ2N2dC5jIGIvbWlzYy90c3QtZWZnY3Z0LmMKK2luZGV4IDUwODNmZWMuLjc5ZWQzNmMgMTAwNjQ0CistLS0gYS9taXNjL3RzdC1lZmdjdnQuYworKysrIGIvbWlzYy90c3QtZWZnY3Z0LmMKK0BAIC01OSw3ICs1OSw3IEBAIHN0YXRpYyB0ZXN0Y2FzZSBlY3Z0X3Rlc3RzW10gPQorICAgeyAxMjMuMDEsIC00LCAzLCAiIiB9LAorICAgeyAxMjYuNzEsIC00LCAzLCAiIiB9LAorICAgeyAwLjAsIDQsIDEsICIwMDAwIiB9LAorLSNpZiBEQkxfTUFOVF9ESUcgPT0gNTMKKysjaWYgREJMX01BTlRfRElHID09IDUzICYmICEoZGVmaW5lZCBfX3Bvd2VycGNfXyAmJiBkZWZpbmVkIF9fTk9fRlBSU19fICYmICFkZWZpbmVkIF9TT0ZUX0ZMT0FUICYmICFkZWZpbmVkIF9TT0ZUX0RPVUJMRSkKKyAgIHsgMHgxcC0xMDc0LCAzLCAtMzIzLCAiNDk0IiB9LAorICAgeyAtMHgxcC0xMDc0LCAzLCAtMzIzLCAiNDk0IiB9LAorICNlbmRpZgorZGlmZiAtLWdpdCBhL25pcy9NYWtlZmlsZSBiL25pcy9NYWtlZmlsZQoraW5kZXggMDM3ZTY3NC4uYzk2Nzg1MCAxMDA2NDQKKy0tLSBhL25pcy9NYWtlZmlsZQorKysrIGIvbmlzL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCU1ha2VmaWxlIGZvciBOSVMvTklTKyBwYXJ0LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IG5pcworIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTMwLDE5ICszMiwyNiBAQCBlbmRpZgorIAorICMgVGhlc2UgYXJlIHRoZSBkYXRhYmFzZXMgYXZhaWxhYmxlIGZvciB0aGUgbmlzIChhbmQgcGVyaGFwcyBsYXRlciBuaXNwbHVzKQorICMgc2VydmljZS4gIFRoaXMgbXVzdCBiZSBhIHN1cGVyc2V0IG9mIHRoZSBzZXJ2aWNlcyBpbiBuc3MuCistZGF0YWJhc2VzCQk9IHByb3RvIHNlcnZpY2UgaG9zdHMgbmV0d29yayBncnAgcHdkIHJwYyBldGhlcnMgXAorLQkJCSAgc3B3ZCBuZXRncnAgYWxpYXMgcHVibGlja2V5CisrZGF0YWJhc2VzLXkJCTo9IHByb3RvIHNlcnZpY2UgaG9zdHMgbmV0d29yayBncnAgcHdkIHJwYyBldGhlcnMgXAorKwkJCSAgIHNwd2QgbmV0Z3JwIHB1YmxpY2tleQorK2RhdGFiYXNlcy0kKE9QVElPTl9FR0xJQkNfREJfQUxJQVNFUykgKz0gYWxpYXMKKyAKKyAjIFNwZWNpZnkgcnVsZXMgZm9yIHRoZSBuc3NfKiBtb2R1bGVzLgorLXNlcnZpY2VzCQk6PSBuaXMgbmlzcGx1cyBjb21wYXQKKysjIFRoZSAnY29tcGF0JyBtb2R1bGUgaW5jbHVkZXMgbmlzIHN1cHBvcnQsIGFuZCB0aGUgJ25zcycgZGlyZWN0b3J5CisrIyBpbmNsdWRlcyBhIGJhcmUtYm9uZXMgImZpbGVzIiBsaWJyYXJ5LCBzbyB3ZSdsbCBpbmNsdWRlICdjb21wYXQnIGluCisrIyBPUFRJT05fRUdMSUJDX05JUy4KKytzZXJ2aWNlcy15CQk6PQorK3NlcnZpY2VzLSQoT1BUSU9OX0VHTElCQ19OSVMpICs9IG5pcyBuaXNwbHVzIGNvbXBhdAorKworK2V4dHJhLWxpYnMtJChPUFRJT05fRUdMSUJDX05JUykgKz0gbGlibnNsCisrZXh0cmEtbGlicy15CQkrPSAkKHNlcnZpY2VzLXk6JT1saWJuc3NfJSkKKyAKKy1leHRyYS1saWJzCQk9IGxpYm5zbCAkKHNlcnZpY2VzOiU9bGlibnNzXyUpCisgIyBUaGVzZSBsaWJyYXJpZXMgd2lsbCBiZSBidWlsdCBpbiB0aGUgYG90aGVycycgcGFzcyByYXRoZXIgdGhhbgorICMgdGhlIGBsaWInIHBhc3MsIGJlY2F1c2UgdGhleSBkZXBlbmQgb24gbGliYy5zbyBiZWluZyBidWlsdCBhbHJlYWR5LgorLWV4dHJhLWxpYnMtb3RoZXJzCT0gJChleHRyYS1saWJzKQorK2V4dHJhLWxpYnMtb3RoZXJzLXkJKz0gJChleHRyYS1saWJzLXkpCisgCisgIyBUaGUgc291cmNlcyBhcmUgZm91bmQgaW4gdGhlIGFwcHJvcHJpYXRlIHN1YmRpci4KKy1zdWJkaXItZGlycyA9ICQoc2VydmljZXM6JT1uc3NfJSkKKytzdWJkaXItZGlycyA9ICQoc2VydmljZXMteTolPW5zc18lKQorIHZwYXRoICUuYyAkKHN1YmRpci1kaXJzKQorIAorIGxpYm5zbC1yb3V0aW5lcyA9IHlwX3hkciB5cGNsbnQgeXB1cGRhdGVfeGRyIFwKK0BAIC02MCwxMSArNjksMTEgQEAgbGlibnNsLXJvdXRpbmVzID0geXBfeGRyIHlwY2xudCB5cHVwZGF0ZV94ZHIgXAorIGxpYm5zc19jb21wYXQtcm91dGluZXMJOj0gJChhZGRwcmVmaXggY29tcGF0LSxncnAgcHdkIHNwd2QgaW5pdGdyb3VwcykKKyBsaWJuc3NfY29tcGF0LWluaGliaXQtbwk9ICQoZmlsdGVyLW91dCAub3MsJChvYmplY3Qtc3VmZml4ZXMpKQorIAorLWxpYm5zc19uaXMtcm91dGluZXMJOj0gJChhZGRwcmVmaXggbmlzLSwkKGRhdGFiYXNlcykpIG5pcy1pbml0Z3JvdXBzIFwKKytsaWJuc3NfbmlzLXJvdXRpbmVzCTo9ICQoYWRkcHJlZml4IG5pcy0sJChkYXRhYmFzZXMteSkpIG5pcy1pbml0Z3JvdXBzIFwKKyAJCQkgICBuc3MtbmlzCisgbGlibnNzX25pcy1pbmhpYml0LW8JPSAkKGZpbHRlci1vdXQgLm9zLCQob2JqZWN0LXN1ZmZpeGVzKSkKKyAKKy1saWJuc3NfbmlzcGx1cy1yb3V0aW5lcwk6PSAkKGFkZHByZWZpeCBuaXNwbHVzLSwkKGRhdGFiYXNlcykpIG5pc3BsdXMtcGFyc2VyIFwKKytsaWJuc3NfbmlzcGx1cy1yb3V0aW5lcwk6PSAkKGFkZHByZWZpeCBuaXNwbHVzLSwkKGRhdGFiYXNlcy15KSkgbmlzcGx1cy1wYXJzZXIgXAorIAkJCSAgIG5zcy1uaXNwbHVzIG5pc3BsdXMtaW5pdGdyb3VwcworIGxpYm5zc19uaXNwbHVzLWluaGliaXQtbyA9ICQoZmlsdGVyLW91dCAub3MsJChvYmplY3Qtc3VmZml4ZXMpKQorIAorQEAgLTgwLDEyICs4OSwxMiBAQCBsaWJuc2wtbGliYyA9ICQoY29tbW9uLW9ianBmeClsaW5rb2JqL2xpYmMuc28KKyAjIFRhcmdldC1zcGVjaWZpYyB2YXJpYWJsZSBzZXR0aW5nIHRvIGxpbmsgb2JqZWN0cyB1c2luZyBkZXByZWNhdGVkCisgIyBSUEMgaW50ZXJmYWNlcyB3aXRoIHRoZSB2ZXJzaW9uIG9mIGxpYmMuc28gdGhhdCBtYWtlcyB0aGVtIGF2YWlsYWJsZQorICMgZm9yIG5ldyBsaW5rczoKKy0kKHNlcnZpY2VzOiU9JChvYmpwZngpbGlibnNzXyUuc28pICQob2JqcGZ4KWxpYm5zbC5zbzogXAorKyQoc2VydmljZXMteTolPSQob2JqcGZ4KWxpYm5zc18lLnNvKSAkKG9ianBmeClsaWJuc2wuc286IFwKKyAgIGxpYmMtZm9yLWxpbmsgPSAkKGxpYm5zbC1saWJjKQorIAorIAorIGlmZXEgKCQoYnVpbGQtc2hhcmVkKSx5ZXMpCistJChvdGhlcnM6JT0kKG9ianBmeCklKTogJChvYmpwZngpbGlibnNsLnNvJChsaWJuc2wuc28tdmVyc2lvbikKKyskKG90aGVycy15OiU9JChvYmpwZngpJSk6ICQob2JqcGZ4KWxpYm5zbC5zbyQobGlibnNsLnNvLXZlcnNpb24pCisgZWxzZQorLSQob3RoZXJzOiU9JChvYmpwZngpJSk6ICQob2JqcGZ4KWxpYm5zbC5hCisrJChvdGhlcnMteTolPSQob2JqcGZ4KSUpOiAkKG9ianBmeClsaWJuc2wuYQorIGVuZGlmCitkaWZmIC0tZ2l0IGEvbnB0bC9NYWtlZmlsZSBiL25wdGwvTWFrZWZpbGUKK2luZGV4IGFhY2EwYTQuLjU5NmNhM2MgMTAwNjQ0CistLS0gYS9ucHRsL01ha2VmaWxlCisrKysgYi9ucHRsL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgTlBUTCBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IG5wdGwKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0xMTgsNyArMTIwLDcgQEAgbGlicHRocmVhZC1yb3V0aW5lcyA9IG5wdGwtaW5pdCB2YXJzIGV2ZW50cyB2ZXJzaW9uIHB0LWludGVycCBcCisgCQkgICAgICBwdC1yYWlzZSBwdC1zeXN0ZW0gXAorIAkJICAgICAgZmxvY2tmaWxlIGZ0cnlsb2NrZmlsZSBmdW5sb2NrZmlsZSBcCisgCQkgICAgICBzaWdhY3Rpb24gXAorLQkJICAgICAgaGVycm5vIHJlcyBwdC1hbGxvY3J0c2lnIFwKKysJCSAgICAgIHB0LWFsbG9jcnRzaWcgXAorIAkJICAgICAgcHRocmVhZF9raWxsX290aGVyX3RocmVhZHMgXAorIAkJICAgICAgcHRocmVhZF9nZXRhZmZpbml0eSBwdGhyZWFkX3NldGFmZmluaXR5IFwKKyAJCSAgICAgIHB0aHJlYWRfYXR0cl9nZXRhZmZpbml0eSBwdGhyZWFkX2F0dHJfc2V0YWZmaW5pdHkgXAorQEAgLTEzOCw4ICsxNDAsMTAgQEAgbGlicHRocmVhZC1yb3V0aW5lcyA9IG5wdGwtaW5pdCB2YXJzIGV2ZW50cyB2ZXJzaW9uIHB0LWludGVycCBcCisgIwkJICAgICAgcHRocmVhZF9zZXRnaWQgcHRocmVhZF9zZXRlZ2lkIHB0aHJlYWRfc2V0cmVnaWQgXAorICMJCSAgICAgIHB0aHJlYWRfc2V0cmVzZ2lkCisgCisrbGlicHRocmVhZC1yb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgOj0gaGVycm5vIHJlcworIGxpYnB0aHJlYWQtc2hhcmVkLW9ubHktcm91dGluZXMgPSB2ZXJzaW9uIHB0LWludGVycCBwdC1hbGxvY3J0c2lnIFwKKyAJCQkJICB1bndpbmQtZm9yY2VkdW53aW5kCisrCisgbGlicHRocmVhZC1zdGF0aWMtb25seS1yb3V0aW5lcyA9IHB0aHJlYWRfYXRmb3JrCisgCisgIyBTaW5jZSBjYW5jZWxsYXRpb24gaGFuZGxpbmcgaXMgaW4gbGFyZ2UgcGFydHMgaGFuZGxlZCB1c2luZyBleGNlcHRpb25zCitAQCAtMjIwLDcgKzIyNCw3IEBAIHRlc3RzID0gdHN0LXR5cGVzaXplcyBcCisgCXRzdC1tdXRleHBpMSB0c3QtbXV0ZXhwaTIgdHN0LW11dGV4cGkzIHRzdC1tdXRleHBpNCB0c3QtbXV0ZXhwaTUgXAorIAl0c3QtbXV0ZXhwaTVhIHRzdC1tdXRleHBpNiB0c3QtbXV0ZXhwaTcgdHN0LW11dGV4cGk3YSB0c3QtbXV0ZXhwaTggXAorIAl0c3QtbXV0ZXhwaTkgXAorLQl0c3Qtc3BpbjEgdHN0LXNwaW4yIHRzdC1zcGluMyB0c3Qtc3BpbjQgXAorKwl0c3Qtc3BpbjEgdHN0LXNwaW4yIHRzdC1zcGluMyBcCisgCXRzdC1jb25kMSB0c3QtY29uZDIgdHN0LWNvbmQzIHRzdC1jb25kNCB0c3QtY29uZDUgdHN0LWNvbmQ2IHRzdC1jb25kNyBcCisgCXRzdC1jb25kOCB0c3QtY29uZDkgdHN0LWNvbmQxMCB0c3QtY29uZDExIHRzdC1jb25kMTIgdHN0LWNvbmQxMyBcCisgCXRzdC1jb25kMTQgdHN0LWNvbmQxNSB0c3QtY29uZDE2IHRzdC1jb25kMTcgdHN0LWNvbmQxOCB0c3QtY29uZDE5IFwKK0BAIC0yNTYsMTQgKzI2MCwxNCBAQCB0ZXN0cyA9IHRzdC10eXBlc2l6ZXMgXAorIAl0c3QtY2FuY2VsNiB0c3QtY2FuY2VsNyB0c3QtY2FuY2VsOCB0c3QtY2FuY2VsOSB0c3QtY2FuY2VsMTAgXAorIAl0c3QtY2FuY2VsMTEgdHN0LWNhbmNlbDEyIHRzdC1jYW5jZWwxMyB0c3QtY2FuY2VsMTQgdHN0LWNhbmNlbDE1IFwKKyAJdHN0LWNhbmNlbDE2IHRzdC1jYW5jZWwxNyB0c3QtY2FuY2VsMTggdHN0LWNhbmNlbDE5IHRzdC1jYW5jZWwyMCBcCistCXRzdC1jYW5jZWwyMSB0c3QtY2FuY2VsMjIgdHN0LWNhbmNlbDIzIHRzdC1jYW5jZWwyNCB0c3QtY2FuY2VsMjUgXAorKwl0c3QtY2FuY2VsMjEgdHN0LWNhbmNlbDIyIHRzdC1jYW5jZWwyMyB0c3QtY2FuY2VsMjUgXAorIAl0c3QtY2FuY2VsLXNlbGYgdHN0LWNhbmNlbC1zZWxmLWNhbmNlbHN0YXRlIFwKKyAJdHN0LWNhbmNlbC1zZWxmLWNhbmNlbHR5cGUgdHN0LWNhbmNlbC1zZWxmLXRlc3RjYW5jZWwgXAorIAl0c3QtY2xlYW51cDAgdHN0LWNsZWFudXAxIHRzdC1jbGVhbnVwMiB0c3QtY2xlYW51cDMgdHN0LWNsZWFudXA0IFwKKyAJdHN0LWZsb2NrMSB0c3QtZmxvY2syIFwKKyAJdHN0LXNpZ25hbDEgdHN0LXNpZ25hbDIgdHN0LXNpZ25hbDMgdHN0LXNpZ25hbDQgdHN0LXNpZ25hbDUgXAorIAl0c3Qtc2lnbmFsNiB0c3Qtc2lnbmFsNyBcCistCXRzdC1leGVjMSB0c3QtZXhlYzIgdHN0LWV4ZWMzIHRzdC1leGVjNCBcCisrCXRzdC1leGVjMiB0c3QtZXhlYzMgdHN0LWV4ZWM0IFwKKyAJdHN0LWV4aXQxIHRzdC1leGl0MiB0c3QtZXhpdDMgXAorIAl0c3Qtc3RkaW8xIHRzdC1zdGRpbzIgXAorIAl0c3Qtc3RhY2sxIHRzdC1zdGFjazIgdHN0LXN0YWNrMyB0c3Qtc3RhY2s0IHRzdC1wdGhyZWFkLWdldGF0dHIgXAorQEAgLTI3MSwxMyArMjc1LDEyIEBAIHRlc3RzID0gdHN0LXR5cGVzaXplcyBcCisgCXRzdC11bmxvYWQgXAorIAl0c3QtZGxzeW0xIFwKKyAJdHN0LXN5c2NvbmYgXAorLQl0c3QtbG9jYWxlMSB0c3QtbG9jYWxlMiBcCisrCXRzdC1sb2NhbGUyIFwKKyAJdHN0LXVtYXNrMSBcCisgCXRzdC1wb3BlbjEgXAorIAl0c3QtY2xvY2sxIFwKKyAJdHN0LWNvbnRleHQxIFwKKyAJdHN0LXNjaGVkMSBcCistCXRzdC1iYWNrdHJhY2UxIFwKKyAJdHN0LWFic3RpbWUgXAorIAl0c3QtdmZvcmsxIHRzdC12Zm9yazIgdHN0LXZmb3JrMXggdHN0LXZmb3JrMnggXAorIAl0c3QtZ2V0cGlkMyBcCitAQCAtMjg4LDkgKzI5MSwxNiBAQCB4dGVzdHMgPSB0c3Qtc2V0dWlkMSB0c3Qtc2V0dWlkMS1zdGF0aWMgdHN0LXNldHVpZDIgXAorIAl0c3QtbXV0ZXhwcDEgdHN0LW11dGV4cHA2IHRzdC1tdXRleHBwMTAKKyB0ZXN0LXNyY3MgPSB0c3Qtb2Rkc3RhY2tsaW1pdAorIAorLSMgVGVzdCBleHBlY3RlZCB0byBmYWlsIG9uIG1vc3QgdGFyZ2V0cyAoZXhjZXB0IHg4Nl82NCkgZHVlIHRvIGJ1ZworLSMgMTg0MzUgLSBwdGhyZWFkX29uY2UgaGFuZ3Mgd2hlbiBpbml0IHJvdXRpbmUgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KKy10ZXN0LXhmYWlsLXRzdC1vbmNlNSA9IHllcworKyMgVGhpcyB0ZXN0IHVzZXMgdGhlIHBvc2l4X3NwYXduIGZ1bmN0aW9ucy4KKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfU1BBV04pICs9IHRzdC1leGVjMQorKworKyMgVGhpcyB0ZXN0IHVzZXMgdGhlICdiYWNrdHJhY2UnIGZ1bmN0aW9ucy4KKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfQkFDS1RSQUNFKSArPSB0c3QtYmFja3RyYWNlMQorKworKyMgVGhpcyB0ZXN0IGlzIHdyaXR0ZW4gaW4gQysrLgorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19DWFhfVEVTVFMpICs9IHRzdC1jYW5jZWwyNAorKworK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgKz0gdHN0LWxvY2FsZTEKKyAKKyAjIEZpbGVzIHdoaWNoIG11c3Qgbm90IGJlIGxpbmtlZCB3aXRoIGxpYnB0aHJlYWQuCisgdGVzdHMtbm9saWJwdGhyZWFkID0gdHN0LXVubG9hZAorZGlmZiAtLWdpdCBhL25wdGwvcHRocmVhZF9jcmVhdGUuYyBiL25wdGwvcHRocmVhZF9jcmVhdGUuYworaW5kZXggZDEwZjRlYS4uMTQyNTdjZSAxMDA2NDQKKy0tLSBhL25wdGwvcHRocmVhZF9jcmVhdGUuYworKysrIGIvbnB0bC9wdGhyZWFkX2NyZWF0ZS5jCitAQCAtMzMsNiArMzMsNyBAQAorICNpbmNsdWRlIDxkZWZhdWx0LXNjaGVkLmg+CisgI2luY2x1ZGUgPGZ1dGV4LWludGVybmFsLmg+CisgCisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgI2luY2x1ZGUgPHNobGliLWNvbXBhdC5oPgorIAorICNpbmNsdWRlIDxzdGFwLXByb2JlLmg+CitAQCAtMjYyLDggKzI2MywxMCBAQCBTVEFSVF9USFJFQURfREVGTgorICAgVEhSRUFEX1NFVE1FTSAocGQsIGNwdWNsb2NrX29mZnNldCwgbm93KTsKKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0lORVQKKyAgIC8qIEluaXRpYWxpemUgcmVzb2x2ZXIgc3RhdGUgcG9pbnRlci4gICovCisgICBfX3Jlc3AgPSAmcGQtPnJlczsKKysjZW5kaWYKKyAKKyAgIC8qIEluaXRpYWxpemUgcG9pbnRlcnMgdG8gbG9jYWxlIGRhdGEuICAqLworICAgX19jdHlwZV9pbml0ICgpOworQEAgLTM0Niw4ICszNDksMTAgQEAgU1RBUlRfVEhSRUFEX0RFRk4KKyAgIC8qIFJ1biB0aGUgZGVzdHJ1Y3RvciBmb3IgdGhlIHRocmVhZC1sb2NhbCBkYXRhLiAgKi8KKyAgIF9fbnB0bF9kZWFsbG9jYXRlX3RzZCAoKTsKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0lORVQKKyAgIC8qIENsZWFuIHVwIGFueSBzdGF0ZSBsaWJjIHN0b3JlZCBpbiB0aHJlYWQtbG9jYWwgdmFyaWFibGVzLiAgKi8KKyAgIF9fbGliY190aHJlYWRfZnJlZXJlcyAoKTsKKysjZW5kaWYKKyAKKyAgIC8qIElmIHRoaXMgaXMgdGhlIGxhc3QgdGhyZWFkIHdlIHRlcm1pbmF0ZSB0aGUgcHJvY2VzcyBub3cuICBXZQorICAgICAgZG8gbm90IG5vdGlmeSB0aGUgZGVidWdnZXIsIGl0IG1pZ2h0IGp1c3QgaXJyaXRhdGUgaXQgaWYgdGhlcmUKK2RpZmYgLS1naXQgYS9uc2NkL01ha2VmaWxlIGIvbnNjZC9NYWtlZmlsZQoraW5kZXggZWRlOTQxZC4uZjRmM2Y4ZCAxMDA2NDQKKy0tLSBhL25zY2QvTWFrZWZpbGUKKysrKyBiL25zY2QvTWFrZWZpbGUKK0BAIC0xOCwxNCArMTgsMTcgQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIG5zY2QgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBuc2NkCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCisgaWZuZXEgKCQodXNlLW5zY2QpLG5vKQorLXJvdXRpbmVzIDo9IG5zY2RfZ2V0cHdfciBuc2NkX2dldGdyX3IgbnNjZF9nZXRoc3RfciBuc2NkX2dldGFpIFwKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gXAorKwkgICAgIG5zY2RfZ2V0cHdfciBuc2NkX2dldGdyX3IgbnNjZF9nZXRoc3RfciBuc2NkX2dldGFpIFwKKyAJICAgIG5zY2RfaW5pdGdyb3VwcyBuc2NkX2dldHNlcnZfciBuc2NkX25ldGdyb3VwCistYXV4CTo9IG5zY2RfaGVscGVyCisrYXV4LSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSBuc2NkX2hlbHBlcgorIGVuZGlmCisgCisgIyBUbyBmaW5kIHhtYWxsb2MuYworQEAgLTM3LDE0ICs0MCwxOCBAQCBuc2NkLW1vZHVsZXMgOj0gbnNjZCBjb25uZWN0aW9ucyBwd2RjYWNoZSBnZXRwd25hbV9yIGdldHB3dWlkX3IgZ3JwY2FjaGUgXAorIAkJZGJnX2xvZyBuc2NkX2NvbmYgbnNjZF9zdGF0IGNhY2hlIG1lbSBuc2NkX3NldHVwX3RocmVhZCBcCisgCQl4bWFsbG9jIHhzdHJkdXAgYWljYWNoZSBpbml0Z3JjYWNoZSBnYWkgcmVzX2hjb25mIFwKKyAJCW5ldGdyb3VwY2FjaGUKKy0KKytpZm5lcSAoeSwkKE9QVElPTl9FR0xJQkNfTklTKSkKKysjIElmIHdlIGhhdmVuJ3QgYnVpbGQgbGlibnNsLnNvLCB0aGVuIHdlJ2xsIG5lZWQgdG8gaW5jbHVkZSBvdXIKKysjIG93biBjb3B5IG9mIG5pc19oYXNoLgorK25zY2QtbW9kdWxlcyArPSBuaXNfaGFzaAorK2VuZGlmCisgaWZlcSAoJChidWlsZC1uc2NkKSQoaGF2ZS10aHJlYWQtbGlicmFyeSkseWVzeWVzKQorIAorLW90aGVycyArPSBuc2NkCistb3RoZXJzLXBpZSArPSBuc2NkCistaW5zdGFsbC1zYmluIDo9IG5zY2QKKytvdGhlcnMtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IG5zY2QKKytvdGhlcnMtcGllLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSBuc2NkCisraW5zdGFsbC1zYmluLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSBuc2NkCisgCistZXh0cmEtb2JqcyA9ICQobnNjZC1tb2R1bGVzOj0ubykKKytleHRyYS1vYmpzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSAkKG5zY2QtbW9kdWxlczo9Lm8pCisgCisgZW5kaWYKKyAKK0BAIC0xMDAsNyArMTA3LDE1IEBAIGluY2x1ZGUgJChwYXRzdWJzdCAlLCQoLi4pY3BwZmxhZ3MtaXRlcmF0b3IubWssJChjcHAtc3Jjcy1sZWZ0KSkKKyAkKG9ianBmeCluc2NkOiAkKG5zY2QtbW9kdWxlczolPSQob2JqcGZ4KSUubykKKyAKKyBpZmVxICgkKGJ1aWxkLXNoYXJlZCkseWVzKQorLSQob2JqcGZ4KW5zY2Q6ICQoc2hhcmVkLXRocmVhZC1saWJyYXJ5KSAkKGNvbW1vbi1vYmpwZngpbmlzL2xpYm5zbC5zbworKyQob2JqcGZ4KW5zY2Q6ICQoc2hhcmVkLXRocmVhZC1saWJyYXJ5KQorK2Vsc2UKKyskKG9ianBmeCluc2NkOiAkKHN0YXRpYy10aHJlYWQtbGlicmFyeSkKKytlbmRpZgorKworK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX05JUykpCisraWZlcSAoJChidWlsZC1zaGFyZWQpLHllcykKKyskKG9ianBmeCluc2NkOiAkKGNvbW1vbi1vYmpwZngpbmlzL2xpYm5zbC5zbworIGVsc2UKKy0kKG9ianBmeCluc2NkOiAkKHN0YXRpYy10aHJlYWQtbGlicmFyeSkgJChjb21tb24tb2JqcGZ4KW5pcy9saWJuc2wuYQorKyQob2JqcGZ4KW5zY2Q6ICQoY29tbW9uLW9ianBmeCluaXMvbGlibnNsLmEKKytlbmRpZgorIGVuZGlmCitkaWZmIC0tZ2l0IGEvbnNjZC9uaXNfaGFzaC5jIGIvbnNjZC9uaXNfaGFzaC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDI0NGM0MQorLS0tIC9kZXYvbnVsbAorKysrIGIvbnNjZC9uaXNfaGFzaC5jCitAQCAtMCwwICsxLDMgQEAKKysvKiBJZiBPUFRJT05fRUdMSUJDX05JUyBpcyBkaXNhYmxlZCwgbnNjZCBjYW4ndCBnZXQgdGhpcyBmcm9tIGxpYm5zbC5zbzsKKysgICB3ZSBuZWVkIG91ciBvd24gY29weS4gICovCisrI2luY2x1ZGUgIi4uL25pcy9uaXNfaGFzaC5jIgorZGlmZiAtLWdpdCBhL25zcy9NYWtlZmlsZSBiL25zcy9NYWtlZmlsZQoraW5kZXggNjVhYjdiNS4uMTlmMGFlZiAxMDA2NDQKKy0tLSBhL25zcy9NYWtlZmlsZQorKysrIGIvbnNzL01ha2VmaWxlCitAQCAtMTgsMjggKzE4LDM1IEBACisgIworICMJTWFrZWZpbGUgZm9yIG5hbWUgc2VydmljZSBzd2l0Y2guCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gbnNzCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCisgaGVhZGVycwkJCTo9IG5zcy5oCisgCistIyBUaGlzIGlzIHRoZSB0cml2aWFsIHBhcnQgd2hpY2ggZ29lcyBpbnRvIGxpYmMgaXRzZWxmLgorLXJvdXRpbmVzCQk9IG5zc3dpdGNoIGdldG5zc2VudCBnZXRuc3NlbnRfciBkaWdpdHNfZG90cyBcCistCQkJICAkKGFkZHN1ZmZpeCAtbG9va3VwLCQoZGF0YWJhc2VzKSkKKy0KKyAjIFRoZXNlIGFyZSB0aGUgZGF0YWJhc2VzIHRoYXQgZ28gdGhyb3VnaCBuc3MgZGlzcGF0Y2guCisgIyBDYXV0aW9uOiBpZiB5b3UgYWRkIGEgZGF0YWJhc2UgaGVyZSwgeW91IG11c3QgYWRkIGl0cyByZWFsIG5hbWUKKyAjIGluIGRhdGFiYXNlcy5kZWYsIHRvby4KKy1kYXRhYmFzZXMJCT0gcHJvdG8gc2VydmljZSBob3N0cyBuZXR3b3JrIGdycCBwd2QgZXRoZXJzIFwKKy0JCQkgIHNwd2QgbmV0Z3JwIGFsaWFzIHNncnAKKytkYXRhYmFzZXMteQkJPSBncnAgcHdkIHNwd2Qgc2dycAorK2RhdGFiYXNlcy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgXAorKwkJCSs9IHByb3RvIHNlcnZpY2UgaG9zdHMgbmV0d29yayBldGhlcnMgXAorKwkJCSAgIG5ldGdycAorK2RhdGFiYXNlcy0kKE9QVElPTl9FR0xJQkNfREJfQUxJQVNFUykgKz0gYWxpYXMKKysKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gZGlnaXRzX2RvdHMKKyAKKyBpZm5lcSAoLCQoZmlsdGVyIHN1bnJwYywkKHN1YmRpcnMpKSkKKy1kYXRhYmFzZXMJCSs9IGtleSBycGMKKytkYXRhYmFzZXMtJChPUFRJT05fRUdMSUJDX0lORVQpCSs9IGtleSBycGMKKyBoYXZlLXN1bnJwYwkJOj0gMQorIGVsc2UKKyBoYXZlLXN1bnJwYwkJOj0gMAorIGVuZGlmCisrIyBUaGlzIGlzIHRoZSB0cml2aWFsIHBhcnQgd2hpY2ggZ29lcyBpbnRvIGxpYmMgaXRzZWxmLgorK3JvdXRpbmVzLXkJCSs9IG5zc3dpdGNoIGdldG5zc2VudCBnZXRuc3NlbnRfciBcCisrCQkJICAkKGFkZHN1ZmZpeCAtbG9va3VwLCQoZGF0YWJhc2VzLXkpKQorKworIENQUEZMQUdTLWdldGVudC5jCT0gLURIQVZFX1NVTlJQQz0kKGhhdmUtc3VucnBjKQorIAorIG90aGVycyAgICAgICAgICAgICAgICAgIDo9IGdldGVudCBtYWtlZGIKK0BAIC00Nyw4ICs1NCw5IEBAIGluc3RhbGwtYmluICAgICAgICAgICAgIDo9IGdldGVudCBtYWtlZGIKKyBtYWtlZGItbW9kdWxlcyA9IHhtYWxsb2MgaGFzaC1zdHJpbmcKKyBleHRyYS1vYmpzCQkrPSAkKG1ha2VkYi1tb2R1bGVzOj0ubykKKyAKKy10ZXN0cwkJCT0gdGVzdC1uZXRkYiB0c3QtbnNzLXRlc3QxIHRlc3QtZGlnaXRzLWRvdHMgdHN0LW5zcy1nZXRwd2VudAorLXh0ZXN0cwkJCT0gYnVnLWVyYW5nZQorK3Rlc3RzCQkJPSB0c3QtbnNzLXRlc3QxIHRzdC1uc3MtZ2V0cHdlbnQKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfSU5FVCkJKz0gdGVzdC1uZXRkYiB0ZXN0LWRpZ2l0cy1kb3RzCisreHRlc3RzLSQoT1BUSU9OX0VHTElCQ19JTkVUKQkrPSBidWctZXJhbmdlCisgCisgIyBTcGVjaWZ5IHJ1bGVzIGZvciB0aGUgbnNzXyogbW9kdWxlcy4gIFdlIGhhdmUgc29tZSBzZXJ2aWNlcy4KKyBzZXJ2aWNlcwkJOj0gZmlsZXMgZGIKK0BAIC02Myw3ICs3MSw3IEBAIHN1YmRpci1kaXJzID0gJChzZXJ2aWNlczolPW5zc18lKQorIHZwYXRoICUuYyAkKHN1YmRpci1kaXJzKSAuLi9sb2NhbGUvcHJvZ3JhbXMgLi4vaW50bAorIAorIAorLWxpYm5zc19maWxlcy1yb3V0aW5lcwk6PSAkKGFkZHByZWZpeCBmaWxlcy0sJChkYXRhYmFzZXMpKSBcCisrbGlibnNzX2ZpbGVzLXJvdXRpbmVzCTo9ICQoYWRkcHJlZml4IGZpbGVzLSwkKGRhdGFiYXNlcy15KSkgXAorIAkJCSAgIGZpbGVzLWluaXRncm91cHMgZmlsZXMtaGF2ZV9vX2Nsb2V4ZWMgZmlsZXMtaW5pdAorIAorIGxpYm5zc19kYi1kYnMJCTo9ICQoYWRkcHJlZml4IGRiLSxcCitAQCAtODYsNiArOTQsNDUgQEAgdGVzdHMtc3RhdGljCQk9IHRzdC1uc3Mtc3RhdGljCisgdGVzdHMJCQkrPSAkKHRlc3RzLXN0YXRpYykKKyBlbmRpZgorIAorK2lmbmVxICgkKE9QVElPTl9FR0xJQkNfTlNTV0lUQ0gpLHkpCisrCisraWZuZGVmIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfQ09ORklHCisrJChlcnJvciBPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0NPTkZJRyB2YXJpYWJsZSBsZWZ0IHVuc2V0KQorK2VuZGlmCisrCisraWZuZGVmIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfRlVOQ1RJT05TCisrJChlcnJvciBPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0ZVTkNUSU9OUyB2YXJpYWJsZSBsZWZ0IHVuc2V0KQorK2VuZGlmCisrCisraWZlcSAoLCQod2lsZGNhcmQgJChPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0NPTkZJRykpKQorKyQod2FybmluZyBPUFRJT05fRUdMSUJDX05TU1dJVENIIGlzIGRpc2FibGVkLCBidXQgZml4ZWQgY29uZmlnIGZpbGUpCisrJChlcnJvciBkb2VzIG5vdCBleGlzdDogJChPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0NPTkZJRykpCisrZW5kaWYKKysKKytpZmVxICgsJCh3aWxkY2FyZCAkKE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfRlVOQ1RJT05TKSkpCisrJCh3YXJuaW5nIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0ggaXMgZGlzYWJsZWQsIGJ1dCBmaXhlZCBmdW5jdGlvbnMgZmlsZSkKKyskKGVycm9yIGRvZXMgbm90IGV4aXN0OiAkKE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfRlVOQ1RJT05TKSkKKytlbmRpZgorKworK2JlZm9yZS1jb21waWxlIDo9ICQob2JqcGZ4KWZpeGVkLW5zc3dpdGNoLmgKKytnZW5lcmF0ZWQgOj0gZml4ZWQtbnNzd2l0Y2guaAorKyQob2JqcGZ4KWZpeGVkLW5zc3dpdGNoLmggJChvYmpmcHgpZml4ZWQtbnNzd2l0Y2gtbGliczoJXAorKyAgICAkKG9ianBmeClnZW4tZml4ZWQtbnNzd2l0Y2gJCQkJXAorKyAgICAkKE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfQ09ORklHKQorKwkkPCAkKG9ianBmeClmaXhlZC1uc3N3aXRjaC5oCQkJXAorKwkgICAkKG9ianBmeClmaXhlZC1uc3N3aXRjaC1saWJzCQkJXAorKwkgICAkKE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfQ09ORklHKQorKworKyQob2JqcGZ4KWdlbi1maXhlZC1uc3N3aXRjaDogZ2VuLWZpeGVkLW5zc3dpdGNoLmMJXAorKyAgICAkKGNvbW1vbi1vYmpwZngpb3B0aW9uLWdyb3Vwcy5jb25maWcJCVwKKysgICAgJChPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0ZVTkNUSU9OUykKKysJJChuYXRpdmUtY29tcGlsZSkKKytnZW4tZml4ZWQtbnNzd2l0Y2gtQ0ZMQUdTID0JCQkJCQlcCisrCS1nMyAtTyAtV2FsbAkJCQkJCQlcCisrCS1JICQob2JqcGZ4KQkJCQkJCQlcCisrCS1ERklYRURfRlVOQ1RJT05TPSciJChPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0ZVTkNUSU9OUykiJworK2VuZGlmCisrCisgaW5jbHVkZSAuLi9SdWxlcworIAorIGlmZXEgKHllcywkKGhhdmUtc2VsaW51eCkpCitkaWZmIC0tZ2l0IGEvbnNzL2ZpeGVkLW5zc3dpdGNoLmNvbmYgYi9uc3MvZml4ZWQtbnNzd2l0Y2guY29uZgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjkxYmI2NzUKKy0tLSAvZGV2L251bGwKKysrKyBiL25zcy9maXhlZC1uc3N3aXRjaC5jb25mCitAQCAtMCwwICsxLDIyIEBACisrIyAvZXRjL25zc3dpdGNoLmNvbmYKKysjCisrIyBFeGFtcGxlIGNvbmZpZ3VyYXRpb24gZm9yIGZpeGVkIG5hbWUgc2VydmljZS4KKysjIFNlZSB0aGUgZGVzY3JpcHRpb24gb2YgT1BUSU9OX0VHTElCQ19OU1NXSVRDSCBpbiBvcHRpb24tZ3JvdXBzLmRlZgorKyMgZm9yIGRldGFpbHMuCisrIworKworK2FsaWFzZXM6ICAgICAgICBmaWxlcworKworK3Bhc3N3ZDogICAgICAgICBmaWxlcworK2dyb3VwOiAgICAgICAgICBmaWxlcworK3NoYWRvdzogICAgICAgICBmaWxlcworKworK2hvc3RzOiAgICAgICAgICBmaWxlcyBkbnMKKytuZXR3b3JrczogICAgICAgZmlsZXMgZG5zCisrCisrcHJvdG9jb2xzOiAgICAgIGZpbGVzCisrc2VydmljZXM6ICAgICAgIGZpbGVzCisrZXRoZXJzOiAgICAgICAgIGZpbGVzCisrcnBjOiAgICAgICAgICAgIGZpbGVzCisrCisrbmV0Z3JvdXA6ICAgICAgIGZpbGVzCitkaWZmIC0tZ2l0IGEvbnNzL2ZpeGVkLW5zc3dpdGNoLmZ1bmN0aW9ucyBiL25zcy9maXhlZC1uc3N3aXRjaC5mdW5jdGlvbnMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yZjNmYTgzCistLS0gL2Rldi9udWxsCisrKysgYi9uc3MvZml4ZWQtbnNzd2l0Y2guZnVuY3Rpb25zCitAQCAtMCwwICsxLDEyMSBAQAorKy8qIExpc3Qgb2YgZnVuY3Rpb25zIGRlZmluZWQgZm9yIGZpeGVkIE5TUyBpbiBHTlUgQyBMaWJyYXJ5LgorKyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrLyogV2hlbiBPUFRJT05fRUdMSUJDX05TU1dJVENIIGlzIGRpc2FibGVkIChzZWUgb3B0aW9uLWdyb3Vwcy5kZWYpLAorKyAgIEVHTElCQyBkb2VzIG5vdCB1c2UgdGhlICdkbG9wZW4nIGFuZCAnZGxzeW0nIGZ1bmN0aW9ucyB0byBsb29rIGZvcgorKyAgIGRhdGFiYXNlIHF1ZXJ5IGZ1bmN0aW9ucyBpbiB0aGUgaW5kaXZpZHVhbCBuYW1lIHNlcnZpY2UgbGlicmFyaWVzLgorKyAgIEluc3RlYWQsIGl0IHVzZXMgYSBzZXQgb2YgZnVuY3Rpb25zIGNob3NlbiBhdCBjb21waWxlIHRpbWUsIGFzCisrICAgZGlyZWN0ZWQgYnkgdGhlIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfRlVOQ1RJT05TIGZpbGUuICBUaGlzCisrICAgZmlsZSBpcyBhIHNhbXBsZSBvZiB3aGF0IHlvdSBtaWdodCB1c2UgdGhlcmUuCisrCisrICAgVGhpcyBmaWxlIGlzIEMgc291cmNlIGNvZGU7IGl0IHNob3VsZCBvbmx5IGNvbnRhaW4gaW52b2NhdGlvbnMgb2YKKysgICB0aGUgZm9sbG93aW5nIG1hY3JvczoKKysKKysgICAtIERFRklORV9FTlQgKERBVEFCQVNFLCBTRVJWSUNFLCBYKQorKworKyAgICAgRGVjbGFyZSB0aGUgJ3NldFhlbnQnLCAnZ2V0WGVudF9yJywgYW5kICdlbmRYZW50JyBmdW5jdGlvbnMgdGhhdAorKyAgICAgcXVlcnkgREFUQUJBU0UgdXNpbmcgdGhlIHNlcnZpY2UgbGlicmFyeSAnbGlibnNzX1NFUlZJQ0Uuc28uMicuCisrICAgICBEQVRBQkFTRSBzaG91bGQgYmUgdGhlIGZ1bGwgbmFtZSBvZiB0aGUgZGF0YWJhc2UgYXMgaXQgYXBwZWFycyBpbgorKyAgICAgJ25zc3dpdGNoLmNvbmYnLCBsaWtlICdwYXNzd2QnIG9yICdhbGlhc2VzJy4KKysKKysgICAgIChUaGUgbm9uLXJlZW50cmFudCAnZ2V0WGVudCcgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBpbiB0ZXJtcworKyAgICAgb2YgdGhlIHJlZW50cmFudCAnZ2V0WGVudF9yJyBmdW5jdGlvbnMsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8KKysgICAgIHJlZmVyIHRvIHRoZW0gZXhwbGljaXRseSBoZXJlLikKKysKKysgICAtIERFRklORV9HRVRCWSAoREFUQUJBU0UsIFNFUlZJQ0UsIFgsIEtFWSkKKysKKysgICAgIERlY2xhcmUgdGhlICdnZXRYYnlLRVlfcicgZnVuY3Rpb25zIHRoYXQgcXVlcnkgREFUQUJBU0UgdXNpbmcKKysgICAgIFNFUlZJQ0UuICBEQVRBQkFTRSBhbmQgU0VSVklDRSBhcmUgYXMgZGVzY3JpYmVkIGFib3ZlLgorKworKyAgICAgKFRoZSBub24tcmVlbnRyYW50ICdnZXRYYnlLRVknIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgaW4gdGVybXMKKysgICAgIG9mIHRoZSByZWVudHJhbnQgJ2dldFhieUtFWV9yJyBmdW5jdGlvbnMsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8KKysgICAgIHJlZmVyIHRvIHRoZW0gZXhwbGljaXRseSBoZXJlLikKKysKKysgICAgIFVzZSB0aGUgc3BlY2lhbCBrZXkgJ25hbWUzJyBmb3IgdGhlIHNlcnZpY2UgbGlicmFyeSBmdW5jdGlvbiB0aGF0CisrICAgICBpbXBsZW1lbnRzIHRoZSAnZ2V0YWRkcmluZm8nIGZ1bmN0aW9uLgorKworKyAgIC0gREVGSU5FX0dFVCAoREFUQUJBU0UsIFNFUlZJQ0UsIFFVRVJZKQorKworKyAgICAgRGVjbGFyZSB0aGUgJ2dldFFVRVJZX3InIGZ1bmN0aW9ucyB0aGF0IHF1ZXJ5IERBVEFCQVNFIHVzaW5nCisrICAgICBTRVJWSUNFLiAgVGhpcyBpcyB1c2VkIGZvciBmdW5jdGlvbnMgbGlrZSAnZ2V0cHduYW0nLgorKworKyAgICAgKFRoZSBub24tcmVlbnRyYW50ICdnZXRRVUVSWScgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBpbiB0ZXJtcworKyAgICAgb2YgdGhlIHJlZW50cmFudCAnZ2V0UVVFUllfcicgZnVuY3Rpb25zLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvCisrICAgICByZWZlciB0byB0aGVtIGV4cGxpY2l0bHkgaGVyZS4pCisrCisrICAgVGhpcyBzYW1wbGUgZmlsZSBvbmx5IGluY2x1ZGVzIGZ1bmN0aW9ucyB0aGF0IGNvbnN1bHQgdGhlIGZpbGVzIGluCisrICAgJy9ldGMnLCBhbmQgdGhlIERvbWFpbiBOYW1lIFN5c3RlbSAoRE5TKS4gICovCisrCisrLyogYWxpYXNlcyAqLworK0RFRklORV9FTlQgKGFsaWFzZXMsIGZpbGVzLCBhbGlhcykKKytERUZJTkVfR0VUQlkgKGFsaWFzZXMsIGZpbGVzLCBhbGlhcywgbmFtZSkKKysKKysvKiBldGhlcnMgKi8KKytERUZJTkVfRU5UIChldGhlcnMsIGZpbGVzLCBldGhlcikKKysKKysvKiBncm91cCAqLworK0RFRklORV9FTlQgKGdyb3VwLCBmaWxlcywgZ3IpCisrREVGSU5FX0dFVCAoZ3JvdXAsIGZpbGVzLCBncmdpZCkKKytERUZJTkVfR0VUIChncm91cCwgZmlsZXMsIGdybmFtKQorKworKy8qIGhvc3RzICovCisrREVGSU5FX0VOVCAoaG9zdHMsIGZpbGVzLCBob3N0KQorK0RFRklORV9HRVRCWSAoaG9zdHMsIGZpbGVzLCBob3N0LCBhZGRyKQorK0RFRklORV9HRVRCWSAoaG9zdHMsIGZpbGVzLCBob3N0LCBuYW1lKQorK0RFRklORV9HRVRCWSAoaG9zdHMsIGZpbGVzLCBob3N0LCBuYW1lMikKKytERUZJTkVfR0VUIChob3N0cywgZmlsZXMsIGhvc3R0b24pCisrREVGSU5FX0dFVCAoaG9zdHMsIGZpbGVzLCBudG9ob3N0KQorK0RFRklORV9HRVRCWSAoaG9zdHMsIGRucywgaG9zdCwgYWRkcikKKytERUZJTkVfR0VUQlkgKGhvc3RzLCBkbnMsIGhvc3QsIG5hbWUpCisrREVGSU5FX0dFVEJZIChob3N0cywgZG5zLCBob3N0LCBuYW1lMikKKytERUZJTkVfR0VUQlkgKGhvc3RzLCBkbnMsIGhvc3QsIG5hbWUzKQorKworKy8qIG5ldGdyb3VwICovCisrREVGSU5FX0VOVCAobmV0Z3JvdXAsIGZpbGVzLCBuZXRncikKKysKKysvKiBuZXR3b3JrcyAqLworK0RFRklORV9FTlQgKG5ldHdvcmtzLCBmaWxlcywgbmV0KQorK0RFRklORV9HRVRCWSAobmV0d29ya3MsIGZpbGVzLCBuZXQsIG5hbWUpCisrREVGSU5FX0dFVEJZIChuZXR3b3JrcywgZmlsZXMsIG5ldCwgYWRkcikKKytERUZJTkVfR0VUQlkgKG5ldHdvcmtzLCBkbnMsIG5ldCwgbmFtZSkKKytERUZJTkVfR0VUQlkgKG5ldHdvcmtzLCBkbnMsIG5ldCwgYWRkcikKKysKKysvKiBwcm90b2NvbHMgKi8KKytERUZJTkVfRU5UIChwcm90b2NvbHMsIGZpbGVzLCBwcm90bykKKytERUZJTkVfR0VUQlkgKHByb3RvY29scywgZmlsZXMsIHByb3RvLCBuYW1lKQorK0RFRklORV9HRVRCWSAocHJvdG9jb2xzLCBmaWxlcywgcHJvdG8sIG51bWJlcikKKysKKysvKiBwYXNzd2QgKi8KKytERUZJTkVfRU5UIChwYXNzd2QsIGZpbGVzLCBwdykKKytERUZJTkVfR0VUIChwYXNzd2QsIGZpbGVzLCBwd25hbSkKKytERUZJTkVfR0VUIChwYXNzd2QsIGZpbGVzLCBwd3VpZCkKKysKKysvKiBycGMgKi8KKytERUZJTkVfRU5UIChycGMsIGZpbGVzLCBycGMpCisrREVGSU5FX0dFVEJZIChycGMsIGZpbGVzLCBycGMsIG5hbWUpCisrREVGSU5FX0dFVEJZIChycGMsIGZpbGVzLCBycGMsIG51bWJlcikKKysKKysvKiBzZXJ2aWNlcyAqLworK0RFRklORV9FTlQgKHNlcnZpY2VzLCBmaWxlcywgc2VydikKKytERUZJTkVfR0VUQlkgKHNlcnZpY2VzLCBmaWxlcywgc2VydiwgbmFtZSkKKytERUZJTkVfR0VUQlkgKHNlcnZpY2VzLCBmaWxlcywgc2VydiwgcG9ydCkKKysKKysvKiBzaGFkb3cgKi8KKytERUZJTkVfRU5UIChzaGFkb3csIGZpbGVzLCBzcCkKKytERUZJTkVfR0VUIChzaGFkb3csIGZpbGVzLCBzcG5hbSkKK2RpZmYgLS1naXQgYS9uc3MvZ2VuLWZpeGVkLW5zc3dpdGNoLmMgYi9uc3MvZ2VuLWZpeGVkLW5zc3dpdGNoLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42ZTFjOThjCistLS0gL2Rldi9udWxsCisrKysgYi9uc3MvZ2VuLWZpeGVkLW5zc3dpdGNoLmMKK0BAIC0wLDAgKzEsODAzIEBACisrLyogZ2VuLWZpeGVkLW5zc3dpdGNoLmMgLS0tIGdlbmVyYXRlIGZpeGVkIG5hbWUgc2VydmljZSBkYXRhIHN0cnVjdHVyZXMKKysgICBDb3B5cmlnaHQgKEMpIDE5OTYtMTk5OSwgMjAwMS0yMDA2LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3RkYXJnLmg+CisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKworKyNpbmNsdWRlICJnbnUvbGliLW5hbWVzLmgiCisrI2luY2x1ZGUgIm5zcy5oIgorKworKy8qIFByb3ZpZGUgYSBmYWxsYmFjayBkZWZpbml0aW9uIHRvIGFsbG93IHRoaXMgZmlsZSB0byBiZSBjb21waWxlZCBvdXRzaWRlCisrICAgbGliYy4gICovCisrI2lmbmRlZiBpbnRlcm5hbF9mdW5jdGlvbgorKyMgZGVmaW5lIGludGVybmFsX2Z1bmN0aW9uCisrI2VuZGlmCisrCisrDAorKy8qIFNpbXBsZSB1dGlsaXRpZXMuICAqLworKworK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSkKKytlcnJvciAoY29uc3QgY2hhciAqbWVzc2FnZSkKKyt7CisrICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbWVzc2FnZSk7CisrICBleGl0ICgxKTsKKyt9CisrCisrCisrdm9pZCAqCisrY2hlY2tfYWxsb2MgKHZvaWQgKnApCisreworKyAgaWYgKHApCisrICAgIHJldHVybiBwOworKyAgZWxzZQorKyAgICBlcnJvciAoIm91dCBvZiBtZW1vcnkiKTsKKyt9CisrCisrdm9pZCAqCisreG1hbGxvYyAoc2l6ZV90IHNpemUpCisreworKyAgcmV0dXJuIGNoZWNrX2FsbG9jIChtYWxsb2MgKHNpemUpKTsKKyt9CisrCisrCisrLyogRm9ybWF0IEFSR1MgYWNjb3JkaW5nIHRvIEZPUk1BVCwgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIGEKKysgICBtYWxsb2MnZWQgc3RyaW5nLiAgKi8KKytjaGFyICoKKytzYXByaW50ZiAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgc2l6ZV90IGxlbjsKKysgIGNoYXIgKmJ1ZjsKKysKKysgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworKyAgbGVuID0gdnNucHJpbnRmIChOVUxMLCAwLCBmb3JtYXQsIGFyZ3MpOworKyAgdmFfZW5kIChhcmdzKTsKKysKKysgIGJ1ZiA9IHhtYWxsb2MgKGxlbiArIDEpOworKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisrICBhc3NlcnQgKGxlbiA9PSB2c25wcmludGYgKGJ1ZiwgbGVuICsgMSwgZm9ybWF0LCBhcmdzKSk7CisrICB2YV9lbmQgKGFyZ3MpOworKworKyAgcmV0dXJuIGJ1ZjsKKyt9CisrCisrCisrDAorKy8qIERhdGEgc3RydWN0dXJlcyByZXByZXNlbnRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiBtZW1vcnkuICAqLworKworKy8qIFRoZXNlIGFyZSBjb3BpZWQgZnJvbSBuc3N3aXRjaC5oLgorKworKyAgIFdlIGNvdWxkIHNpbXBseSAjaW5jbHVkZSB0aGF0IGZpbGUsIGJ1dCB0aGlzIHByb2dyYW0gcnVucyBvbiB0aGUKKysgICBidWlsZCBtYWNoaW5lIGFuZCBsaW5rcyBhZ2FpbnN0IHRoZSBidWlsZCBtYWNoaW5lJ3MgbGlicmFyaWVzLAorKyAgIHdoZXJlYXMgdGhhdCBoZWFkZXIgaXMgbWVhbnQgZm9yIHVzZSBieSB0YXJnZXQgY29kZTsgaXQgdXNlcworKyAgICdsaWJjX2hpZGRlbl9wcm90bycsICdpbnRlcm5hbF9mdW5jdGlvbicsIGFuZCByZWxhdGVkIGhhaXIuICBTaW5jZQorKyAgIHdlJ3ZlIGNvcGllZCB0aGUgcGFyc2luZyBjb2RlLCB3ZSBtaWdodCBhcyB3ZWxsIGNvcHkgdGhlIGRhdGEKKysgICBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgYXMgd2VsbC4gICovCisrCisrLyogQWN0aW9ucyBwZXJmb3JtZWQgYWZ0ZXIgbG9va3VwIGZpbmlzaGVkLiAgKi8KKyt0eXBlZGVmIGVudW0KKyt7CisrICBOU1NfQUNUSU9OX0NPTlRJTlVFLAorKyAgTlNTX0FDVElPTl9SRVRVUk4KKyt9IGxvb2t1cF9hY3Rpb25zOworKworKworK3R5cGVkZWYgc3RydWN0IHNlcnZpY2VfbGlicmFyeQorK3sKKysgIC8qIE5hbWUgb2Ygc2VydmljZSAoYGZpbGVzJywgYGRucycsIGBuaXMnLCAuLi4pLiAgKi8KKysgIGNvbnN0IGNoYXIgKm5hbWU7CisrICAvKiBQb2ludGVyIHRvIHRoZSBsb2FkZWQgc2hhcmVkIGxpYnJhcnkuICAqLworKyAgdm9pZCAqbGliX2hhbmRsZTsKKysgIC8qIEFuZCB0aGUgbGluayB0byB0aGUgbmV4dCBlbnRyeS4gICovCisrICBzdHJ1Y3Qgc2VydmljZV9saWJyYXJ5ICpuZXh0OworK30gc2VydmljZV9saWJyYXJ5OworKworKworKy8qIEZvciBtYXBwaW5nIGEgZnVuY3Rpb24gbmFtZSB0byBhIGZ1bmN0aW9uIHBvaW50ZXIuICBJdCBpcyBrbm93biBpbgorKyAgIG5zc3dpdGNoLmM6bnNzX2xvb2t1cF9mdW5jdGlvbiB0aGF0IGEgc3RyaW5nIHBvaW50ZXIgZm9yIHRoZSBsb29rdXAga2V5CisrICAgaXMgdGhlIGZpcnN0IG1lbWJlci4gICovCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBjb25zdCBjaGFyICpmY3RfbmFtZTsKKysgIHZvaWQgKmZjdF9wdHI7CisrfSBrbm93bl9mdW5jdGlvbjsKKysKKysKKyt0eXBlZGVmIHN0cnVjdCBzZXJ2aWNlX3VzZXIKKyt7CisrICAvKiBBbmQgdGhlIGxpbmsgdG8gdGhlIG5leHQgZW50cnkuICAqLworKyAgc3RydWN0IHNlcnZpY2VfdXNlciAqbmV4dDsKKysgIC8qIEFjdGlvbiBhY2NvcmRpbmcgdG8gcmVzdWx0LiAgKi8KKysgIGxvb2t1cF9hY3Rpb25zIGFjdGlvbnNbNV07CisrICAvKiBMaW5rIHRvIHRoZSB1bmRlcmx5aW5nIGxpYnJhcnkgb2JqZWN0LiAgKi8KKysgIHNlcnZpY2VfbGlicmFyeSAqbGlicmFyeTsKKysgIC8qIENvbGxlY3Rpb24gb2Yga25vd24gZnVuY3Rpb25zLgorKworKyAgICAgV2l0aCBPUFRJT05fRUdMSUJDX05TU1dJVENIIGVuYWJsZWQsIHRoaXMgaXMgdGhlIHJvb3Qgb2YgYQorKyAgICAgJ3RzZWFyY2gnLXN0eWxlIHRyZWUuCisrCisrICAgICBXaXRoIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0ggZGlzYWJsZWQsIHRoaXMgaXMgYW4gYXJyYXkgb2YKKysgICAgIHBvaW50ZXJzIHRvIGtub3duX2Z1bmN0aW9uIHN0cnVjdHVyZXMsIE5VTEwtdGVybWluYXRlZC4gICovCisrICB1bmlvbgorKyAgeworKyAgICB2b2lkICp0cmVlOworKyAgICBjb25zdCBrbm93bl9mdW5jdGlvbiAqKmFycmF5OworKyAgfSBrbm93bjsKKysgIC8qIE5hbWUgb2YgdGhlIHNlcnZpY2UgKGBmaWxlcycsIGBkbnMnLCBgbmlzJywgLi4uKS4gICovCisrICBjb25zdCBjaGFyICpuYW1lOworK30gc2VydmljZV91c2VyOworKworKy8qIFRvIGFjY2VzcyB0aGUgYWN0aW9uIGJhc2VkIG9uIHRoZSBzdGF0dXMgdmFsdWUgdXNlIHRoaXMgbWFjcm8uICAqLworKyNkZWZpbmUgbnNzX25leHRfYWN0aW9uKG5pLCBzdGF0dXMpICgobmkpLT5hY3Rpb25zWzIgKyBzdGF0dXNdKQorKworKworK3R5cGVkZWYgc3RydWN0IG5hbWVfZGF0YWJhc2VfZW50cnkKKyt7CisrICAvKiBBbmQgdGhlIGxpbmsgdG8gdGhlIG5leHQgZW50cnkuICAqLworKyAgc3RydWN0IG5hbWVfZGF0YWJhc2VfZW50cnkgKm5leHQ7CisrICAvKiBMaXN0IG9mIHNlcnZpY2UgdG8gYmUgdXNlZC4gICovCisrICBzZXJ2aWNlX3VzZXIgKnNlcnZpY2U7CisrICAvKiBOYW1lIG9mIHRoZSBkYXRhYmFzZS4gICovCisrICBjb25zdCBjaGFyICpuYW1lOworK30gbmFtZV9kYXRhYmFzZV9lbnRyeTsKKysKKysKKyt0eXBlZGVmIHN0cnVjdCBuYW1lX2RhdGFiYXNlCisreworKyAgLyogTGlzdCBvZiBhbGwga25vd24gZGF0YWJhc2VzLiAgKi8KKysgIG5hbWVfZGF0YWJhc2VfZW50cnkgKmVudHJ5OworKyAgLyogTGlzdCBvZiBsaWJyYXJpZXMgd2l0aCBzZXJ2aWNlIGltcGxlbWVudGF0aW9uLiAgKi8KKysgIHNlcnZpY2VfbGlicmFyeSAqbGlicmFyeTsKKyt9IG5hbWVfZGF0YWJhc2U7CisrCisrCisrDAorKy8qIEdhdGhlcmluZyB0aGUgY29udGVudHMgb2YgdGhlIEZJWEVEX0ZVTkNUSU9OUyBmaWxlLiAgKi8KKysKKysvKiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gZ2VuZXJhdGUgdGhpcyBsaXN0IGF1dG9tYXRpY2FsbHkgYnkKKysgICBsb29raW5nIGF0IHRoZSBzZXJ2aWNlcyBhbmQgZGF0YWJhc2VzIHVzZWQgaW4gdGhlIG5zc3dpdGNoLmNvbmYKKysgICBmaWxlLCBhbmQgaGF2aW5nIGEgaGFyZC1jb2RlZCBzZXQgb2YgcXVlcmllcyBzdXBwb3J0ZWQgb24gZWFjaAorKyAgIGRhdGFiYXNlLiAgKi8KKysKKysvKiBXZSAjaW5jbHVkZSB0aGUgRklYRURfRlVOQ1RJT05TIGZpbGUgc2V2ZXJhbCB0aW1lcyB0byBidWlsZCBhbgorKyAgIGFycmF5IG9mIGZ1bmN0aW9uIHN0cnVjdHVyZXMgaG9sZGluZyBpdHMgZGF0YS4gICovCisrZW51bSBmdW5jdGlvbl9raW5kIHsKKysgIGZrX2VuZCA9IDAsICAgICAgICAgICAgICAgICAgIC8qIExhc3QgZW50cnkuICAqLworKyAgZmtfc2V0ZW50LCAgICAgICAgICAgICAgICAgICAgLyogTGlrZSBzZXRwd2VudC4gICovCisrICBma19nZXRlbnQsICAgICAgICAgICAgICAgICAgICAvKiBMaWtlIGdldHB3ZW50LiAgKi8KKysgIGZrX2VuZGVudCwgICAgICAgICAgICAgICAgICAgIC8qIExpa2UgZW5kcHdlbnQuICAqLworKyAgZmtfZ2V0YnksICAgICAgICAgICAgICAgICAgICAgLyogTGlrZSBnZXRob3N0YnluYW1lLiAgKi8KKysgIGZrX2dldCAgICAgICAgICAgICAgICAgICAgICAgIC8qIExpa2UgZ2V0cHduYW0uICAqLworK307CisrCisrCisrc3RydWN0IGZ1bmN0aW9uIHsKKysgIC8qIFdoYXQga2luZCBvZiBmdW5jdGlvbiB0aGlzIGlzLiAgKi8KKysgIGVudW0gZnVuY3Rpb25fa2luZCBraW5kOworKworKyAgLyogVGhlIGRhdGFiYXNlIGFuZCBzZXJ2aWNlIG9mIHRoZSBmdW5jdGlvbiBiZWluZyBoYXJkd2lyZWQgaW4uICAqLworKyAgY2hhciAqZGF0YWJhc2UsICpzZXJ2aWNlOworKworKyAgLyogVGhlIGtpbmQgb2YgZW50cnkgYmVpbmcgcXVlcmllZCwgZm9yICdma19zZXRlbnQnLCAnZmtfZ2V0ZW50JywKKysgICAgICdma19lbmRlbnQnLCBhbmQgJ2ZrX2dldGJ5JyBmdW5jdGlvbnMuICAqLworKyAgY2hhciAqZW50cnk7CisrCisrICAvKiBUaGUga2V5LCBmb3IgJ2ZrX2dldGJ5JyBlbnRyaWVzLiAgKi8KKysgIGNoYXIgKmtleTsKKysKKysgIC8qIFRoZSB2YWx1ZSBhbmQga2V5LCBmb3IgJ2ZrX2dldCcgZW50cmllcy4gICovCisrICBjaGFyICp2YWx1ZV9hbmRfa2V5OworK307CisrCisrCisrY29uc3Qgc3RydWN0IGZ1bmN0aW9uIGZ1bmN0aW9uc1tdID0KKysgIHsKKysKKysjZGVmaW5lIERFRklORV9FTlQoZGF0YWJhc2UsIHNlcnZpY2UsIGVudHJ5KSAgICBcCisrICAgIHsgZmtfc2V0ZW50LCAjZGF0YWJhc2UsICNzZXJ2aWNlLCAjZW50cnkgfSwgXAorKyAgICB7IGZrX2dldGVudCwgI2RhdGFiYXNlLCAjc2VydmljZSwgI2VudHJ5IH0sIFwKKysgICAgeyBma19lbmRlbnQsICNkYXRhYmFzZSwgI3NlcnZpY2UsICNlbnRyeSB9LAorKyNkZWZpbmUgREVGSU5FX0dFVEJZKGRhdGFiYXNlLCBzZXJ2aWNlLCBlbnRyeSwga2V5KSAgIFwKKysgICAgeyBma19nZXRieSwgI2RhdGFiYXNlLCAjc2VydmljZSwgI2VudHJ5LCAja2V5IH0sCisrI2RlZmluZSBERUZJTkVfR0VUKGRhdGFiYXNlLCBzZXJ2aWNlLCB2YWx1ZV9hbmRfa2V5KSAgICAgXAorKyAgICB7IGZrX2dldCwgI2RhdGFiYXNlLCAjc2VydmljZSwgTlVMTCwgTlVMTCwgI3ZhbHVlX2FuZF9rZXkgfSwKKysKKysjaW5jbHVkZSBGSVhFRF9GVU5DVElPTlMKKysKKysjdW5kZWYgREVGSU5FX0VOVAorKyN1bmRlZiBERUZJTkVfR0VUQlkKKysjdW5kZWYgREVGSU5FX0dFVAorKworKyAgICB7IGZrX2VuZCB9CisrICB9OworKworKwwKKysvKiBQYXJzaW5nIHRoZSBjb25maWcgZmlsZS4gIEZ1bmN0aW9ucyBjb3BpZWQgZnJvbSBuc3N3aXRjaC5jLiAgKi8KKysKKysjZGVmaW5lIF9fc3RyY2hybnVsIHN0cmNocm51bAorKyNkZWZpbmUgX19nZXRsaW5lIGdldGxpbmUKKysjZGVmaW5lIF9fc3RybmNhc2VjbXAgc3RybmNhc2VjbXAKKysKKysvKiBQcm90b3R5cGVzIGZvciB0aGUgbG9jYWwgZnVuY3Rpb25zLiAgKi8KKytzdGF0aWMgbmFtZV9kYXRhYmFzZSAqbnNzX3BhcnNlX2ZpbGUgKGNvbnN0IGNoYXIgKmZuYW1lKSBpbnRlcm5hbF9mdW5jdGlvbjsKKytzdGF0aWMgbmFtZV9kYXRhYmFzZV9lbnRyeSAqbnNzX2dldGxpbmUgKGNoYXIgKmxpbmUpIGludGVybmFsX2Z1bmN0aW9uOworK3N0YXRpYyBzZXJ2aWNlX3VzZXIgKm5zc19wYXJzZV9zZXJ2aWNlX2xpc3QgKGNvbnN0IGNoYXIgKmxpbmUpCisrICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKysKKytzdGF0aWMgbmFtZV9kYXRhYmFzZSAqCisraW50ZXJuYWxfZnVuY3Rpb24KKytuc3NfcGFyc2VfZmlsZSAoY29uc3QgY2hhciAqZm5hbWUpCisreworKyAgRklMRSAqZnA7CisrICBuYW1lX2RhdGFiYXNlICpyZXN1bHQ7CisrICBuYW1lX2RhdGFiYXNlX2VudHJ5ICpsYXN0OworKyAgY2hhciAqbGluZTsKKysgIHNpemVfdCBsZW47CisrCisrICAvKiBPcGVuIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuICAqLworKyAgZnAgPSBmb3BlbiAoZm5hbWUsICJyYyIpOworKyAgaWYgKGZwID09IE5VTEwpCisrICAgIHJldHVybiBOVUxMOworKworKyAgLy8gLyogTm8gdGhyZWFkcyB1c2UgdGhpcyBzdHJlYW0uICAqLworKyAgLy8gX19mc2V0bG9ja2luZyAoZnAsIEZTRVRMT0NLSU5HX0JZQ0FMTEVSKTsKKysKKysgIHJlc3VsdCA9IChuYW1lX2RhdGFiYXNlICopIHhtYWxsb2MgKHNpemVvZiAobmFtZV9kYXRhYmFzZSkpOworKworKyAgcmVzdWx0LT5lbnRyeSA9IE5VTEw7CisrICByZXN1bHQtPmxpYnJhcnkgPSBOVUxMOworKyAgbGFzdCA9IE5VTEw7CisrICBsaW5lID0gTlVMTDsKKysgIGxlbiA9IDA7CisrICBkbworKyAgICB7CisrICAgICAgbmFtZV9kYXRhYmFzZV9lbnRyeSAqdGhpczsKKysgICAgICBzc2l6ZV90IG47CisrCisrICAgICAgbiA9IF9fZ2V0bGluZSAoJmxpbmUsICZsZW4sIGZwKTsKKysgICAgICBpZiAobiA8IDApCisrCWJyZWFrOworKyAgICAgIGlmIChsaW5lW24gLSAxXSA9PSAnXG4nKQorKwlsaW5lW24gLSAxXSA9ICdcMCc7CisrCisrICAgICAgLyogQmVjYXVzZSB0aGUgZmlsZSBmb3JtYXQgZG9lcyBub3Qga25vdyBhbnkgZm9ybSBvZiBxdW90aW5nIHdlCisrCSBjYW4gc2VhcmNoIGZvcndhcmQgZm9yIHRoZSBuZXh0ICcjJyBjaGFyYWN0ZXIgYW5kIGlmIGZvdW5kCisrCSBtYWtlIGl0IHRlcm1pbmF0aW5nIHRoZSBsaW5lLiAgKi8KKysgICAgICAqX19zdHJjaHJudWwgKGxpbmUsICcjJykgPSAnXDAnOworKworKyAgICAgIC8qIElmIHRoZSBsaW5lIGlzIGJsYW5rIGl0IGlzIGlnbm9yZWQuICAqLworKyAgICAgIGlmIChsaW5lWzBdID09ICdcMCcpCisrCWNvbnRpbnVlOworKworKyAgICAgIC8qIEVhY2ggbGluZSBjb21wbGV0ZWx5IHNwZWNpZmllcyB0aGUgYWN0aW9ucyBmb3IgYSBkYXRhYmFzZS4gICovCisrICAgICAgdGhpcyA9IG5zc19nZXRsaW5lIChsaW5lKTsKKysgICAgICBpZiAodGhpcyAhPSBOVUxMKQorKwl7CisrCSAgaWYgKGxhc3QgIT0gTlVMTCkKKysJICAgIGxhc3QtPm5leHQgPSB0aGlzOworKwkgIGVsc2UKKysJICAgIHJlc3VsdC0+ZW50cnkgPSB0aGlzOworKworKwkgIGxhc3QgPSB0aGlzOworKwl9CisrICAgIH0KKysgIHdoaWxlICghZmVvZl91bmxvY2tlZCAoZnApKTsKKysKKysgIC8qIEZyZWUgdGhlIGJ1ZmZlci4gICovCisrICBmcmVlIChsaW5lKTsKKysgIC8qIENsb3NlIGNvbmZpZ3VyYXRpb24gZmlsZS4gICovCisrICBmY2xvc2UgKGZwKTsKKysKKysgIHJldHVybiByZXN1bHQ7CisrfQorKworKworKy8qIFJlYWQgdGhlIHNvdXJjZSBuYW1lczoKKysJYCggPHNvdXJjZT4gKCAiWyIgIiEiPyAoPHN0YXR1cz4gIj0iIDxhY3Rpb24+ICkrICJdIiApPyApKicKKysgICAqLworK3N0YXRpYyBzZXJ2aWNlX3VzZXIgKgorK2ludGVybmFsX2Z1bmN0aW9uCisrbnNzX3BhcnNlX3NlcnZpY2VfbGlzdCAoY29uc3QgY2hhciAqbGluZSkKKyt7CisrICBzZXJ2aWNlX3VzZXIgKnJlc3VsdCA9IE5VTEwsICoqbmV4dHAgPSAmcmVzdWx0OworKworKyAgd2hpbGUgKDEpCisrICAgIHsKKysgICAgICBzZXJ2aWNlX3VzZXIgKm5ld19zZXJ2aWNlOworKyAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CisrCisrICAgICAgd2hpbGUgKGlzc3BhY2UgKGxpbmVbMF0pKQorKwkrK2xpbmU7CisrICAgICAgaWYgKGxpbmVbMF0gPT0gJ1wwJykKKysJLyogTm8gc291cmNlIHNwZWNpZmllZC4gICovCisrCXJldHVybiByZXN1bHQ7CisrCisrICAgICAgLyogUmVhZCA8c291cmNlPiBpZGVudGlmaWVyLiAgKi8KKysgICAgICBuYW1lID0gbGluZTsKKysgICAgICB3aGlsZSAobGluZVswXSAhPSAnXDAnICYmICFpc3NwYWNlIChsaW5lWzBdKSAmJiBsaW5lWzBdICE9ICdbJykKKysJKytsaW5lOworKyAgICAgIGlmIChuYW1lID09IGxpbmUpCisrCXJldHVybiByZXN1bHQ7CisrCisrCisrICAgICAgbmV3X3NlcnZpY2UgPSAoc2VydmljZV91c2VyICopIHhtYWxsb2MgKHNpemVvZiAoKm5ld19zZXJ2aWNlKSk7CisrICAgICAgbmV3X3NlcnZpY2UtPm5hbWUgPSAoY2hhciAqKSB4bWFsbG9jIChsaW5lIC0gbmFtZSArIDEpOworKworKyAgICAgICooKGNoYXIgKikgX19tZW1wY3B5ICgoY2hhciAqKSBuZXdfc2VydmljZS0+bmFtZSwgbmFtZSwgbGluZSAtIG5hbWUpKQorKyAgICAgICAgPSAnXDAnOworKworKyAgICAgIC8qIFNldCBkZWZhdWx0IGFjdGlvbnMuICAqLworKyAgICAgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBOU1NfU1RBVFVTX1RSWUFHQUlOXSA9IE5TU19BQ1RJT05fQ09OVElOVUU7CisrICAgICAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIE5TU19TVEFUVVNfVU5BVkFJTF0gPSBOU1NfQUNUSU9OX0NPTlRJTlVFOworKyAgICAgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBOU1NfU1RBVFVTX05PVEZPVU5EXSA9IE5TU19BQ1RJT05fQ09OVElOVUU7CisrICAgICAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIE5TU19TVEFUVVNfU1VDQ0VTU10gPSBOU1NfQUNUSU9OX1JFVFVSTjsKKysgICAgICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgTlNTX1NUQVRVU19SRVRVUk5dID0gTlNTX0FDVElPTl9SRVRVUk47CisrICAgICAgbmV3X3NlcnZpY2UtPmxpYnJhcnkgPSBOVUxMOworKyAgICAgIG5ld19zZXJ2aWNlLT5rbm93bi50cmVlID0gTlVMTDsKKysgICAgICBuZXdfc2VydmljZS0+bmV4dCA9IE5VTEw7CisrCisrICAgICAgd2hpbGUgKGlzc3BhY2UgKGxpbmVbMF0pKQorKwkrK2xpbmU7CisrCisrICAgICAgaWYgKGxpbmVbMF0gPT0gJ1snKQorKwl7CisrCSAgLyogUmVhZCBjcml0ZXJpb25zLiAgKi8KKysJICBkbworKwkgICAgKytsaW5lOworKwkgIHdoaWxlIChsaW5lWzBdICE9ICdcMCcgJiYgaXNzcGFjZSAobGluZVswXSkpOworKworKwkgIGRvCisrCSAgICB7CisrCSAgICAgIGludCBub3Q7CisrCSAgICAgIGVudW0gbnNzX3N0YXR1cyBzdGF0dXM7CisrCSAgICAgIGxvb2t1cF9hY3Rpb25zIGFjdGlvbjsKKysKKysJICAgICAgLyogR3JvayAhIGJlZm9yZSBuYW1lIHRvIG1lYW4gYWxsIHN0YXRpaSBidXQgdGhhdCBvbmUuICAqLworKwkgICAgICBub3QgPSBsaW5lWzBdID09ICchJzsKKysJICAgICAgaWYgKG5vdCkKKysJCSsrbGluZTsKKysKKysJICAgICAgLyogUmVhZCBzdGF0dXMgbmFtZS4gICovCisrCSAgICAgIG5hbWUgPSBsaW5lOworKwkgICAgICB3aGlsZSAobGluZVswXSAhPSAnXDAnICYmICFpc3NwYWNlIChsaW5lWzBdKSAmJiBsaW5lWzBdICE9ICc9JworKwkJICAgICAmJiBsaW5lWzBdICE9ICddJykKKysJCSsrbGluZTsKKysKKysJICAgICAgLyogQ29tcGFyZSB3aXRoIGtub3duIHN0YXRpaS4gICovCisrCSAgICAgIGlmIChsaW5lIC0gbmFtZSA9PSA3KQorKwkJeworKwkJICBpZiAoX19zdHJuY2FzZWNtcCAobmFtZSwgIlNVQ0NFU1MiLCA3KSA9PSAwKQorKwkJICAgIHN0YXR1cyA9IE5TU19TVEFUVVNfU1VDQ0VTUzsKKysJCSAgZWxzZSBpZiAoX19zdHJuY2FzZWNtcCAobmFtZSwgIlVOQVZBSUwiLCA3KSA9PSAwKQorKwkJICAgIHN0YXR1cyA9IE5TU19TVEFUVVNfVU5BVkFJTDsKKysJCSAgZWxzZQorKwkJICAgIHJldHVybiByZXN1bHQ7CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKGxpbmUgLSBuYW1lID09IDgpCisrCQl7CisrCQkgIGlmIChfX3N0cm5jYXNlY21wIChuYW1lLCAiTk9URk9VTkQiLCA4KSA9PSAwKQorKwkJICAgIHN0YXR1cyA9IE5TU19TVEFUVVNfTk9URk9VTkQ7CisrCQkgIGVsc2UgaWYgKF9fc3RybmNhc2VjbXAgKG5hbWUsICJUUllBR0FJTiIsIDgpID09IDApCisrCQkgICAgc3RhdHVzID0gTlNTX1NUQVRVU19UUllBR0FJTjsKKysJCSAgZWxzZQorKwkJICAgIHJldHVybiByZXN1bHQ7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCXJldHVybiByZXN1bHQ7CisrCisrCSAgICAgIHdoaWxlIChpc3NwYWNlIChsaW5lWzBdKSkKKysJCSsrbGluZTsKKysJICAgICAgaWYgKGxpbmVbMF0gIT0gJz0nKQorKwkJcmV0dXJuIHJlc3VsdDsKKysJICAgICAgZG8KKysJCSsrbGluZTsKKysJICAgICAgd2hpbGUgKGlzc3BhY2UgKGxpbmVbMF0pKTsKKysKKysJICAgICAgbmFtZSA9IGxpbmU7CisrCSAgICAgIHdoaWxlIChsaW5lWzBdICE9ICdcMCcgJiYgIWlzc3BhY2UgKGxpbmVbMF0pICYmIGxpbmVbMF0gIT0gJz0nCisrCQkgICAgICYmIGxpbmVbMF0gIT0gJ10nKQorKwkJKytsaW5lOworKworKwkgICAgICBpZiAobGluZSAtIG5hbWUgPT0gNiAmJiBfX3N0cm5jYXNlY21wIChuYW1lLCAiUkVUVVJOIiwgNikgPT0gMCkKKysJCWFjdGlvbiA9IE5TU19BQ1RJT05fUkVUVVJOOworKwkgICAgICBlbHNlIGlmIChsaW5lIC0gbmFtZSA9PSA4CisrCQkgICAgICAgJiYgX19zdHJuY2FzZWNtcCAobmFtZSwgIkNPTlRJTlVFIiwgOCkgPT0gMCkKKysJCWFjdGlvbiA9IE5TU19BQ1RJT05fQ09OVElOVUU7CisrCSAgICAgIGVsc2UKKysJCXJldHVybiByZXN1bHQ7CisrCisrCSAgICAgIGlmIChub3QpCisrCQl7CisrCQkgIC8qIFNhdmUgdGhlIGN1cnJlbnQgYWN0aW9uIHNldHRpbmcgZm9yIHRoaXMgc3RhdHVzLAorKwkJICAgICBzZXQgdGhlbSBhbGwgdG8gdGhlIGdpdmVuIGFjdGlvbiwgYW5kIHJlc2V0IHRoaXMgb25lLiAgKi8KKysJCSAgY29uc3QgbG9va3VwX2FjdGlvbnMgc2F2ZSA9IG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBzdGF0dXNdOworKwkJICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgTlNTX1NUQVRVU19UUllBR0FJTl0gPSBhY3Rpb247CisrCQkgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBOU1NfU1RBVFVTX1VOQVZBSUxdID0gYWN0aW9uOworKwkJICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgTlNTX1NUQVRVU19OT1RGT1VORF0gPSBhY3Rpb247CisrCQkgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBOU1NfU1RBVFVTX1NVQ0NFU1NdID0gYWN0aW9uOworKwkJICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgc3RhdHVzXSA9IHNhdmU7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCW5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBzdGF0dXNdID0gYWN0aW9uOworKworKwkgICAgICAvKiBTa2lwIHdoaXRlIHNwYWNlcy4gICovCisrCSAgICAgIHdoaWxlIChpc3NwYWNlIChsaW5lWzBdKSkKKysJCSsrbGluZTsKKysJICAgIH0KKysJICB3aGlsZSAobGluZVswXSAhPSAnXScpOworKworKwkgIC8qIFNraXAgdGhlICddJy4gICovCisrCSAgKytsaW5lOworKwl9CisrCisrICAgICAgKm5leHRwID0gbmV3X3NlcnZpY2U7CisrICAgICAgbmV4dHAgPSAmbmV3X3NlcnZpY2UtPm5leHQ7CisrICAgIH0KKyt9CisrCisrc3RhdGljIG5hbWVfZGF0YWJhc2VfZW50cnkgKgorK2ludGVybmFsX2Z1bmN0aW9uCisrbnNzX2dldGxpbmUgKGNoYXIgKmxpbmUpCisreworKyAgY29uc3QgY2hhciAqbmFtZTsKKysgIG5hbWVfZGF0YWJhc2VfZW50cnkgKnJlc3VsdDsKKysgIHNpemVfdCBsZW47CisrCisrICAvKiBJZ25vcmUgbGVhZGluZyB3aGl0ZSBzcGFjZXMuICBBVFRFTlRJT046IHRoaXMgaXMgZGlmZmVyZW50IGZyb20KKysgICAgIHdoYXQgaXMgaW1wbGVtZW50ZWQgaW4gU29sYXJpcy4gIFRoZSBTb2xhcmlzIG1hbiBwYWdlIHNheXMgYSBsaW5lCisrICAgICBiZWdpbm5pbmcgd2l0aCBhIHdoaXRlIHNwYWNlIGNoYXJhY3RlciBpcyBpZ25vcmVkLiAgV2UgcmVnYXJkCisrICAgICB0aGlzIGFzIGp1c3QgYW5vdGhlciBtaXNmZWF0dXJlIGluIFNvbGFyaXMuICAqLworKyAgd2hpbGUgKGlzc3BhY2UgKGxpbmVbMF0pKQorKyAgICArK2xpbmU7CisrCisrICAvKiBSZWNvZ25pemUgYDxkYXRhYmFzZT4gIjoiJy4gICovCisrICBuYW1lID0gbGluZTsKKysgIHdoaWxlIChsaW5lWzBdICE9ICdcMCcgJiYgIWlzc3BhY2UgKGxpbmVbMF0pICYmIGxpbmVbMF0gIT0gJzonKQorKyAgICArK2xpbmU7CisrICBpZiAobGluZVswXSA9PSAnXDAnIHx8IG5hbWUgPT0gbGluZSkKKysgICAgLyogU3ludGF4IGVycm9yLiAgKi8KKysgICAgcmV0dXJuIE5VTEw7CisrICAqbGluZSsrID0gJ1wwJzsKKysKKysgIGxlbiA9IHN0cmxlbiAobmFtZSkgKyAxOworKworKyAgcmVzdWx0ID0gKG5hbWVfZGF0YWJhc2VfZW50cnkgKikgeG1hbGxvYyAoc2l6ZW9mICgqcmVzdWx0KSk7CisrICByZXN1bHQtPm5hbWUgPSAoY2hhciAqKSB4bWFsbG9jIChsZW4pOworKworKyAgLyogU2F2ZSB0aGUgZGF0YWJhc2UgbmFtZS4gICovCisrICBtZW1jcHkgKChjaGFyICopIHJlc3VsdC0+bmFtZSwgbmFtZSwgbGVuKTsKKysKKysgIC8qIFBhcnNlIHRoZSBsaXN0IG9mIHNlcnZpY2VzLiAgKi8KKysgIHJlc3VsdC0+c2VydmljZSA9IG5zc19wYXJzZV9zZXJ2aWNlX2xpc3QgKGxpbmUpOworKworKyAgcmVzdWx0LT5uZXh0ID0gTlVMTDsKKysgIHJldHVybiByZXN1bHQ7CisrfQorKworKworKwwKKysvKiBHZW5lcmF0aW5nIGNvZGUgZm9yIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgbnNzd2l0Y2ggc3RydWN0dXJlcy4gICovCisrCisrCisrLyogUmV0dXJuIHRoZSBzZXJ2aWNlLW5ldXRyYWwgc3VmZml4IG9mIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlCisrICAgbGlicmFyeSBmdW5jdGlvbiByZWZlcnJlZCB0byBieSB0aGUgZnVuY3Rpb24gRi4gIFRoZSByZXN1bHQgaXMKKysgICBhbGxvY2F0ZWQgd2l0aCBtYWxsb2MuICAqLworK2NoYXIgKgorK2tub3duX2Z1bmN0aW9uX3N1ZmZpeCAoY29uc3Qgc3RydWN0IGZ1bmN0aW9uICpmKQorK3sKKysgIHN3aXRjaCAoZi0+a2luZCkKKysgICAgeworKyAgICBjYXNlIGZrX3NldGVudDoKKysgICAgICByZXR1cm4gc2FwcmludGYgKCJzZXQlc2VudCIsIGYtPmVudHJ5KTsKKysKKysgICAgY2FzZSBma19nZXRlbnQ6CisrICAgICAgcmV0dXJuIHNhcHJpbnRmICgiZ2V0JXNlbnRfciIsIGYtPmVudHJ5KTsKKysKKysgICAgY2FzZSBma19lbmRlbnQ6CisrICAgICAgcmV0dXJuIHNhcHJpbnRmICgiZW5kJXNlbnQiLCBmLT5lbnRyeSk7CisrCisrICAgIGNhc2UgZmtfZ2V0Ynk6CisrICAgICAgcmV0dXJuIHNhcHJpbnRmICgiZ2V0JXNieSVzX3IiLCBmLT5lbnRyeSwgZi0+a2V5KTsKKysKKysgICAgY2FzZSBma19nZXQ6CisrICAgICAgcmV0dXJuIHNhcHJpbnRmICgiZ2V0JXNfciIsIGYtPnZhbHVlX2FuZF9rZXkpOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIGFib3J0ICgpOworKyAgICB9CisrfQorKworKworKy8qIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgc2VydmljZSBsaWJyYXJ5IGZ1bmN0aW9uIHJlZmVycmVkIHRvIGJ5IHRoZQorKyAgIGZ1bmN0aW9uIEYuICBUaGUgcmVzdWx0IGlzIGFsbG9jYXRlZCB3aXRoIG1hbGxvYy4gICovCisrY2hhciAqCisra25vd25fZnVuY3Rpb25fbmFtZSAoY29uc3Qgc3RydWN0IGZ1bmN0aW9uICpmKQorK3sKKysgIHJldHVybiBzYXByaW50ZiAoIl9uc3NfJXNfJXMiLCBmLT5zZXJ2aWNlLCBrbm93bl9mdW5jdGlvbl9zdWZmaXggKGYpKTsKKyt9CisrCisrCisrLyogV3JpdGUgaW5pdGlhbGl6ZWQga25vd25fZnVuY3Rpb24gc3RydWN0dXJlcyB0byBPVVQgZm9yCisrICAgYWxsIHRoZSBmdW5jdGlvbnMgd2UnbGwgdXNlLiAgKi8KKyt2b2lkCisrZ2VuZXJhdGVfa25vd25fZnVuY3Rpb25zIChGSUxFICpvdXQpCisreworKyAgaW50IGk7CisrCisrICAvKiBGaXJzdCwgZ2VuZXJhdGUgd2VhayByZWZlcmVuY2VzIHRvIHRoZSBmdW5jdGlvbnMuICBUaGUgc2VydmljZQorKyAgICAgbGlicmFyaWVzIGRlcGVuZCBvbiBsaWJjLCBhbmQgaWYgdGhlc2UgcmVmZXJlbmNlcyB3ZXJlbid0IHdlYWssCisrICAgICB3ZSdkIGJlIG1ha2luZyBsaWJjIGRlcGVuZCBjaXJjdWxhcmx5IG9uIHRoZSBzZXJ2aWNlCisrICAgICBsaWJyYXJpZXMuICAqLworKyAgZm9yIChpID0gMDsgZnVuY3Rpb25zW2ldLmtpbmQ7IGkrKykKKysgICAgeworKyAgICAgIGNoYXIgKm5hbWUgPSBrbm93bl9mdW5jdGlvbl9uYW1lICgmZnVuY3Rpb25zW2ldKTsKKysgICAgICBmcHJpbnRmIChvdXQsICJ0eXBlb2YgKCVzKSAlcyBfX2F0dHJpYnV0ZV9fICgod2VhaykpO1xuIiwKKysgICAgICAgICAgICAgICBuYW1lLCBuYW1lKTsKKysgICAgfQorKyAgZnB1dHMgKCJcbiIsIG91dCk7CisrCisrICAvKiBUaGVuLCBhIHRhYmxlIG1hcHBpbmcgbmFtZXMgdG8gZnVuY3Rpb25zLiAgKi8KKysgIGZwdXRzICgic3RhdGljIGNvbnN0IGtub3duX2Z1bmN0aW9uIGZpeGVkX2tub3duX2Z1bmN0aW9uc1tdID0ge1xuIiwKKysgICAgICAgICBvdXQpOworKyAgZm9yIChpID0gMDsgZnVuY3Rpb25zW2ldLmtpbmQ7IGkrKykKKysgICAgeworKyAgICAgIGNvbnN0IHN0cnVjdCBmdW5jdGlvbiAqZiA9ICZmdW5jdGlvbnNbaV07CisrICAgICAgY2hhciAqc3VmZml4ID0ga25vd25fZnVuY3Rpb25fc3VmZml4IChmKTsKKysKKysgICAgICBmcHJpbnRmIChvdXQsICIgIC8qICUyZCAqLyB7IFwiJXNcIiwgX25zc18lc18lcyB9LFxuIiwKKysgICAgICAgICAgICAgICBpLCBzdWZmaXgsIGYtPnNlcnZpY2UsIHN1ZmZpeCk7CisrICAgIH0KKysgIGZwdXRzICgifTtcbiIsIG91dCk7CisrICBmcHV0cyAoIlxuIiwgb3V0KTsKKyt9CisrCisrCisrLyogUHJpbnQgY29kZSB0byBPVVQgZm9yIGFuIGluaXRpYWxpemVkIGFycmF5IG9mIHBvaW50ZXJzIHRvIHRoZQorKyAgICdrbm93bl9mdW5jdGlvbicgc3RydWN0dXJlcyBuZWVkZWQgZm9yIFVTRVIsIHdoaWNoIGlzIGZvcgorKyAgIERBVEFCQVNFLiAgUmV0dXJuIGl0cyBuYW1lLCBhbGxvY2F0ZWQgd2l0aCBtYWxsb2MuICAqLworK2NoYXIgKgorK2dlbmVyYXRlX2tub3duX2Z1bmN0aW9uX2xpc3QgKEZJTEUgKm91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lX2RhdGFiYXNlX2VudHJ5ICpkYXRhYmFzZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlX3VzZXIgKnVzZXIpCisreworKyAgY2hhciAqbGlzdF9uYW1lID0gc2FwcmludGYgKCJmaXhlZF8lc18lc19rbm93bl9mdW5jcyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2UtPm5hbWUsIHVzZXItPm5hbWUpOworKyAgZnByaW50ZiAob3V0LCAic3RhdGljIGNvbnN0IGtub3duX2Z1bmN0aW9uIColc1tdID0ge1xuIiwKKysgICAgICAgICAgIGxpc3RfbmFtZSk7CisrICBpbnQgaTsKKysgIGZvciAoaSA9IDA7IGZ1bmN0aW9uc1tpXS5raW5kOyBpKyspCisrICAgIGlmIChzdHJjbXAgKGZ1bmN0aW9uc1tpXS5kYXRhYmFzZSwgZGF0YWJhc2UtPm5hbWUpID09IDAKKysgICAgICAgICYmIHN0cmNtcCAoZnVuY3Rpb25zW2ldLnNlcnZpY2UsIHVzZXItPm5hbWUpID09IDApCisrICAgICAgZnByaW50ZiAob3V0LCAiICAmZml4ZWRfa25vd25fZnVuY3Rpb25zWyVkXSwgLyogJXMgKi9cbiIsCisrICAgICAgICAgICAgICAgaSwga25vd25fZnVuY3Rpb25fbmFtZSAoJmZ1bmN0aW9uc1tpXSkpOworKyAgZnB1dHMgKCIgIE5VTExcbiIsIG91dCk7CisrICBmcHV0cyAoIn07XG4iLCBvdXQpOworKyAgZnB1dHMgKCJcbiIsIG91dCk7CisrCisrICByZXR1cm4gbGlzdF9uYW1lOworK30KKysKKysKKysvKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHN0YXR1cyB2YWx1ZSBTVEFUVVMsIGFzIGEgc3RhdGljYWxseQorKyAgIGFsbG9jYXRlZCBzdHJpbmcuICAqLworK2NvbnN0IGNoYXIgKgorK2xvb2t1cF9zdGF0dXNfbmFtZSAoZW51bSBuc3Nfc3RhdHVzIHN0YXR1cykKKyt7CisrICBzd2l0Y2ggKHN0YXR1cykKKysgICAgeworKyAgICBjYXNlIE5TU19TVEFUVVNfVFJZQUdBSU46IHJldHVybiAiTlNTX1NUQVRVU19UUllBR0FJTiI7CisrICAgIGNhc2UgTlNTX1NUQVRVU19VTkFWQUlMOiByZXR1cm4gIk5TU19TVEFUVVNfVU5BVkFJTCI7CisrICAgIGNhc2UgTlNTX1NUQVRVU19OT1RGT1VORDogcmV0dXJuICJOU1NfU1RBVFVTX05PVEZPVU5EIjsKKysgICAgY2FzZSBOU1NfU1RBVFVTX1NVQ0NFU1M6IHJldHVybiAiTlNTX1NUQVRVU19TVUNDRVNTIjsKKysgICAgY2FzZSBOU1NfU1RBVFVTX1JFVFVSTjogcmV0dXJuICJOU1NfU1RBVFVTX1JFVFVSTiI7CisrICAgIGRlZmF1bHQ6IGFib3J0ICgpOworKyAgICB9OworK30KKysKKysKKysvKiBSZXR1cm4gdGhlIG5hbWUgb2YgQUNUSU9OIGFzIGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgc3RyaW5nLiAgKi8KKytjb25zdCBjaGFyICoKKytsb29rdXBfYWN0aW9uX25hbWUgKGxvb2t1cF9hY3Rpb25zIGFjdGlvbikKKyt7CisrICBzd2l0Y2ggKGFjdGlvbikKKysgICAgeworKyAgICBjYXNlIE5TU19BQ1RJT05fQ09OVElOVUU6IHJldHVybiAiTlNTX0FDVElPTl9DT05USU5VRSI7CisrICAgIGNhc2UgTlNTX0FDVElPTl9SRVRVUk46IHJldHVybiAiTlNTX0FDVElPTl9SRVRVUk4iOworKyAgICBkZWZhdWx0OiBhYm9ydCAoKTsKKysgICAgfQorK30KKysKKysKKysvKiBQcmludCBjb2RlIHRvIE9VVCBmb3IgdGhlIGxpc3Qgb2Ygc2VydmljZV91c2VyIHN0cnVjdHVyZXMgc3RhcnRpbmcKKysgICB3aXRoIFVTRVIsIHdoaWNoIGFyZSBhbGwgZm9yIERBVEFCQVNFLiAgUmV0dXJuIHRoZSBuYW1lIG9mIHRoZQorKyAgIGZpcnN0IHN0cnVjdHVyZSBpbiB0aGF0IGxpc3QsIG9yIHplcm8gaWYgVVNFUiBpcyBOVUxMLiAgKi8KKytjaGFyICoKKytnZW5lcmF0ZV9zZXJ2aWNlX3VzZXJfbGlzdCAoRklMRSAqb3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX2RhdGFiYXNlX2VudHJ5ICpkYXRhYmFzZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZV91c2VyICp1c2VyKQorK3sKKysgIGlmICh1c2VyKQorKyAgICB7CisrICAgICAgLyogR2VuZXJhdGUgdGhlIHRhaWwgb2YgdGhlIGxpc3QuICAqLworKyAgICAgIGNoYXIgKm5leHRfbmFtZSA9IGdlbmVyYXRlX3NlcnZpY2VfdXNlcl9saXN0IChvdXQsIGRhdGFiYXNlLCB1c2VyLT5uZXh0KTsKKysgICAgICAvKiBHZW5lcmF0ZSBvdXIga25vd24gZnVuY3Rpb24gbGlzdC4gICovCisrICAgICAgY2hhciAqa25vd25fZnVuY3Rpb25fbGlzdF9uYW1lID0KKysgICAgICAgIGdlbmVyYXRlX2tub3duX2Z1bmN0aW9uX2xpc3QgKG91dCwgZGF0YWJhc2UsIHVzZXIpOworKworKyAgICAgIGNoYXIgKm5hbWUgPSBzYXByaW50ZiAoImZpeGVkXyVzXyVzX3VzZXIiLCBkYXRhYmFzZS0+bmFtZSwgdXNlci0+bmFtZSk7CisrCisrICAgICAgZnByaW50ZiAob3V0LCAic3RhdGljIGNvbnN0IHNlcnZpY2VfdXNlciAlcyA9IHtcbiIsIG5hbWUpOworKyAgICAgIGlmIChuZXh0X25hbWUpCisrICAgICAgICBmcHJpbnRmIChvdXQsICIgIChzZXJ2aWNlX3VzZXIgKikgJiVzLFxuIiwgbmV4dF9uYW1lKTsKKysgICAgICBlbHNlCisrICAgICAgICBmcHJpbnRmIChvdXQsICIgIE5VTEwsIC8qIG5vIG5leHQgZW50cnkgKi9cbiIpOworKyAgICAgIGZwdXRzICgiICB7XG4iLCBvdXQpOworKyAgICAgIGludCBpOworKyAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YgKHVzZXItPmFjdGlvbnMpIC8gc2l6ZW9mICh1c2VyLT5hY3Rpb25zWzBdKTsgaSsrKQorKyAgICAgICAgZnByaW50ZiAob3V0LCAiICAgICVzLCAvKiAlcyAqL1xuIiwKKysgICAgICAgICAgICAgICAgIGxvb2t1cF9hY3Rpb25fbmFtZSAodXNlci0+YWN0aW9uc1tpXSksCisrICAgICAgICAgICAgICAgICBsb29rdXBfc3RhdHVzX25hbWUgKGkgLSAyKSk7CisrICAgICAgZnB1dHMgKCIgIH0sXG4iLCBvdXQpOworKyAgICAgIGZwcmludGYgKG91dCwgIiAgTlVMTCwgIC8qIHdlIG5ldmVyIG5lZWQgdGhlIHNlcnZpY2UgbGlicmFyeSAqL1xuIik7CisrICAgICAgZnByaW50ZiAob3V0LCAiICB7IC5hcnJheSA9ICVzIH0sXG4iLCBrbm93bl9mdW5jdGlvbl9saXN0X25hbWUpOworKyAgICAgIGZwcmludGYgKG91dCwgIiAgXCIlc1wiXG4iLCB1c2VyLT5uYW1lKTsKKysgICAgICBmcHV0cyAoIn07XG4iLCBvdXQpOworKyAgICAgIGZwdXRzICgiXG4iLCBvdXQpOworKworKyAgICAgIHJldHVybiBuYW1lOworKyAgICB9CisrICBlbHNlCisrICAgIHJldHVybiBOVUxMOworK30KKysKKysKKysvKiBQcmludCBjb2RlIHRvIE9VVCBmb3IgdGhlIGxpc3Qgb2YgbmFtZV9kYXRhYmFzZV9lbnRyeSBzdHJ1Y3R1cmVzCisrICAgc3RhcnRpbmcgd2l0aCBEQVRBQkFTRS4gIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgZmlyc3Qgc3RydWN0dXJlCisrICAgaW4gdGhhdCBsaXN0LCBvciB6ZXJvIGlmIERBVEFCQVNFIGlzIE5VTEwuICAqLworK2NoYXIgKgorK2dlbmVyYXRlX25hbWVfZGF0YWJhc2VfZW50cmllcyAoRklMRSAqb3V0LCBuYW1lX2RhdGFiYXNlX2VudHJ5ICpkYXRhYmFzZSkKKyt7CisrICBpZiAoZGF0YWJhc2UpCisrICAgIHsKKysgICAgICBjaGFyICpuZXh0X25hbWUgPSBnZW5lcmF0ZV9uYW1lX2RhdGFiYXNlX2VudHJpZXMgKG91dCwgZGF0YWJhc2UtPm5leHQpOworKyAgICAgIGNoYXIgKnNlcnZpY2VfdXNlcl9uYW1lCisrICAgICAgICA9IGdlbmVyYXRlX3NlcnZpY2VfdXNlcl9saXN0IChvdXQsIGRhdGFiYXNlLCBkYXRhYmFzZS0+c2VydmljZSk7CisrICAgICAgY2hhciAqbmFtZSA9IHNhcHJpbnRmICgiZml4ZWRfJXNfbmFtZV9kYXRhYmFzZSIsIGRhdGFiYXNlLT5uYW1lKTsKKysKKysgICAgICBmcHJpbnRmIChvdXQsICJzdGF0aWMgY29uc3QgbmFtZV9kYXRhYmFzZV9lbnRyeSAlcyA9IHtcbiIsIG5hbWUpOworKworKyAgICAgIGlmIChuZXh0X25hbWUpCisrICAgICAgICBmcHJpbnRmIChvdXQsICIgIChuYW1lX2RhdGFiYXNlX2VudHJ5ICopICYlcyxcbiIsIG5leHRfbmFtZSk7CisrICAgICAgZWxzZQorKyAgICAgICAgZnByaW50ZiAob3V0LCAiICBOVUxMLFxuIik7CisrCisrICAgICAgaWYgKHNlcnZpY2VfdXNlcl9uYW1lKQorKyAgICAgICAgZnByaW50ZiAob3V0LCAiICAoc2VydmljZV91c2VyICopICYlcyxcbiIsIHNlcnZpY2VfdXNlcl9uYW1lKTsKKysgICAgICBlbHNlCisrICAgICAgICBmcHJpbnRmIChvdXQsICIgIE5VTEwsXG4iKTsKKysKKysgICAgICBmcHJpbnRmIChvdXQsICIgIFwiJXNcIlxuIiwgZGF0YWJhc2UtPm5hbWUpOworKyAgICAgIGZwcmludGYgKG91dCwgIn07XG4iKTsKKysgICAgICBmcHV0cyAoIlxuIiwgb3V0KTsKKysKKysgICAgICByZXR1cm4gbmFtZTsKKysgICAgfQorKyAgZWxzZQorKyAgICByZXR1cm4gTlVMTDsKKyt9CisrCisrCisrdm9pZAorK2dlbmVyYXRlX25hbWVfZGF0YWJhc2UgKEZJTEUgKm91dCwgbmFtZV9kYXRhYmFzZSAqc2VydmljZV90YWJsZSkKKyt7CisrICAvKiBQcm9kdWNlIGEgbGlua2VkIGxpc3Qgb2YgdGhlIGtub3duIG5hbWVfZGF0YWJhc2VfZW50cnkKKysgICAgIHN0cnVjdHVyZXMuICAqLworKyAgY2hhciAqZW50cmllcyA9IGdlbmVyYXRlX25hbWVfZGF0YWJhc2VfZW50cmllcyAob3V0LCBzZXJ2aWNlX3RhYmxlLT5lbnRyeSk7CisrCisrICAvKiBOb3cgcHJvZHVjZSB0aGUgbWFpbiBzdHJ1Y3R1cmUgdGhhdCBwb2ludHMgdG8gdGhlbSBhbGwuICAqLworKyAgZnByaW50ZiAob3V0LCAic3RhdGljIGNvbnN0IG5hbWVfZGF0YWJhc2UgZml4ZWRfbmFtZV9kYXRhYmFzZSA9IHtcbiIpOworKyAgaWYgKGVudHJpZXMpCisrICAgIGZwcmludGYgKG91dCwgIiAgKG5hbWVfZGF0YWJhc2VfZW50cnkgKikgJiVzLFxuIiwgZW50cmllcyk7CisrICBlbHNlCisrICAgIGZwcmludGYgKG91dCwgIiAgTlVMTCxcbiIpOworKyAgZnB1dHMgKCIgIE5VTEwgLyogd2UgZG9uJ3QgbmVlZCB0aGUgbGlicmFyaWVzICovXG4iCisrICAgICAgICAgIn07XG4iLAorKyAgICAgICAgIG91dCk7CisrfQorKworKworKwwKKysvKiBHZW5lcmF0aW5nIHRoZSBsaXN0IG9mIHNlcnZpY2UgbGlicmFyaWVzIHdlIGdlbmVyYXRlIHJlZmVyZW5jZXMgdG8uICAqLworKworKy8qIFN0cmluZyB3aXRoIHJldmlzaW9uIG51bWJlciBvZiB0aGUgc2hhcmVkIG9iamVjdCBmaWxlcy4gICovCisrc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5zc19zaGxpYl9yZXZpc2lvbiA9IExJQk5TU19GSUxFU19TTyArIDE1OworKworK3ZvaWQKKytnZW5lcmF0ZV9zZXJ2aWNlX2xpYl9saXN0IChGSUxFICpvdXQsIG5hbWVfZGF0YWJhc2UgKnNlcnZpY2VfdGFibGUpCisreworKyAgaW50IGksIGo7CisrICBpbnQgcHJpbnRlZF9hbnkgPSAwOworKworKyAgZm9yIChpID0gMDsgZnVuY3Rpb25zW2ldLmtpbmQ7IGkrKykKKysgICAgeworKyAgICAgIC8qIE1lbnRpb24gZWFjaCBzZXJ2aWNlIGxpYnJhcnkgb25seSBvbmNlLiAgKi8KKysgICAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisrKQorKyAgICAgICAgaWYgKHN0cmNtcCAoZnVuY3Rpb25zW2ldLnNlcnZpY2UsIGZ1bmN0aW9uc1tqXS5zZXJ2aWNlKSA9PSAwKQorKyAgICAgICAgICBicmVhazsKKysKKysgICAgICBpZiAoaiA+PSBpKQorKyAgICAgICAgeworKyAgICAgICAgICBpZiAocHJpbnRlZF9hbnkpCisrICAgICAgICAgICAgcHV0YyAoJyAnLCBvdXQpOworKyAgICAgICAgICBmcHJpbnRmIChvdXQsICItbG5zc18lcyIsCisrICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uc1tpXS5zZXJ2aWNlLAorKyAgICAgICAgICAgICAgICAgICBuc3Nfc2hsaWJfcmV2aXNpb24pOworKyAgICAgICAgICBwcmludGVkX2FueSA9IDE7CisrICAgICAgICB9CisrICAgIH0KKyt9CisrCisrDAorKy8qIE1haW4uICAqLworKworK2ludAorK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICBpZiAoYXJnYyAhPSA0KQorKyAgICB7CisrICAgICAgZnByaW50ZiAoc3RkZXJyLCAidXNhZ2U6IGdlbi1maXhlZC1uc3N3aXRjaCBIRUFERVIgU0VSVkxJQlMgQ09ORklHXG4iKTsKKysgICAgICBleGl0ICgxKTsKKysgICAgfQorKworKyAgbmFtZV9kYXRhYmFzZSAqc2VydmljZV90YWJsZSA9IG5zc19wYXJzZV9maWxlIChhcmd2WzNdKTsKKysKKysgIEZJTEUgKmhlYWRlciA9IGZvcGVuIChhcmd2WzFdLCAidyIpOworKyAgaWYgKCEgaGVhZGVyKQorKyAgICB7CisrICAgICAgZnByaW50ZiAoc3RkZXJyLAorKyAgICAgICAgICAgICAgICJnZW4tZml4ZWQtbnNzd2l0Y2g6IGNvdWxkbid0IG9wZW4gb3V0cHV0IGZpbGUgJXM6ICVzXG4iLAorKyAgICAgICAgICAgICAgIGFyZ3ZbMV0sIHN0cmVycm9yIChlcnJubykpOworKyAgICAgIGV4aXQgKDEpOworKyAgICB9CisrICBmcHV0cyAoIi8qIEdlbmVyYXRlZCBieSBuc3MvZ2VuLWZpeGVkLW5zc3dpdGNoLmMuICAqL1xuIiwgaGVhZGVyKTsKKysgIGZwdXRzICgiXG4iLCBoZWFkZXIpOworKyAgZ2VuZXJhdGVfa25vd25fZnVuY3Rpb25zIChoZWFkZXIpOworKyAgZ2VuZXJhdGVfbmFtZV9kYXRhYmFzZSAoaGVhZGVyLCBzZXJ2aWNlX3RhYmxlKTsKKysgIGZjbG9zZSAoaGVhZGVyKTsKKysKKysgIEZJTEUgKnNlcnZpY2VfbGliX2xpc3QgPSBmb3BlbiAoYXJndlsyXSwgInciKTsKKysgIGlmICghIHNlcnZpY2VfbGliX2xpc3QpCisrICAgIHsKKysgICAgICBmcHJpbnRmIChzdGRlcnIsCisrICAgICAgICAgICAgICAgImdlbi1maXhlZC1uc3N3aXRjaDogY291bGRuJ3Qgb3BlbiBvdXRwdXQgZmlsZSAlczogJXNcbiIsCisrICAgICAgICAgICAgICAgYXJndlsyXSwgc3RyZXJyb3IgKGVycm5vKSk7CisrICAgICAgZXhpdCAoMSk7CisrICAgIH0KKysgIGdlbmVyYXRlX3NlcnZpY2VfbGliX2xpc3QgKHNlcnZpY2VfbGliX2xpc3QsIHNlcnZpY2VfdGFibGUpOworKyAgZmNsb3NlIChzZXJ2aWNlX2xpYl9saXN0KTsKKysKKysgIHJldHVybiAwOworK30KK2RpZmYgLS1naXQgYS9uc3MvZ2V0ZW50LmMgYi9uc3MvZ2V0ZW50LmMKK2luZGV4IDM0ZGY4NDguLjY3NGM4ZWUgMTAwNjQ0CistLS0gYS9uc3MvZ2V0ZW50LmMKKysrKyBiL25zcy9nZXRlbnQuYworQEAgLTM5LDYgKzM5LDcgQEAKKyAjaW5jbHVkZSA8bmV0aW5ldC9ldGhlci5oPgorICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAvKiBHZXQgbGliYyB2ZXJzaW9uIG51bWJlci4gICovCisgI2luY2x1ZGUgPHZlcnNpb24uaD4KK0BAIC05MSw2ICs5Miw3IEBAIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLlxuXAorICAgZnByaW50ZiAoc3RyZWFtLCBnZXR0ZXh0ICgiV3JpdHRlbiBieSAlcy5cbiIpLCAiVGhvcnN0ZW4gS3VrdWsiKTsKKyB9CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19EQl9BTElBU0VTCisgLyogVGhpcyBpcyBmb3IgYWxpYXNlcyAqLworIHN0YXRpYyB2b2lkCisgcHJpbnRfYWxpYXNlcyAoc3RydWN0IGFsaWFzZW50ICphbGlhcykKK0BAIC0xMzUsNyArMTM3LDkgQEAgYWxpYXNlc19rZXlzIChpbnQgbnVtYmVyLCBjaGFyICprZXlbXSkKKyAKKyAgIHJldHVybiByZXN1bHQ7CisgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfREJfQUxJQVNFUyAqLworIAorKyNpZiBfX09QVElPTl9FR0xJQkNfSU5FVAorIC8qIFRoaXMgaXMgZm9yIGV0aGVycyAqLworIHN0YXRpYyBpbnQKKyBldGhlcnNfa2V5cyAoaW50IG51bWJlciwgY2hhciAqa2V5W10pCitAQCAtMTc5LDYgKzE4Myw3IEBAIGV0aGVyc19rZXlzIChpbnQgbnVtYmVyLCBjaGFyICprZXlbXSkKKyAKKyAgIHJldHVybiByZXN1bHQ7CisgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfSU5FVCAqLworIAorIC8qIFRoaXMgaXMgZm9yIGdyb3VwICovCisgc3RhdGljIHZvaWQKK0BAIC0zMDEsNiArMzA2LDcgQEAgZ3NoYWRvd19rZXlzIChpbnQgbnVtYmVyLCBjaGFyICprZXlbXSkKKyAgIHJldHVybiByZXN1bHQ7CisgfQorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfSU5FVAorIC8qIFRoaXMgaXMgZm9yIGhvc3RzICovCisgc3RhdGljIHZvaWQKKyBwcmludF9ob3N0cyAoc3RydWN0IGhvc3RlbnQgKmhvc3QpCitAQCAtNTk4LDYgKzYwNCw3IEBAIG5ldHdvcmtzX2tleXMgKGludCBudW1iZXIsIGNoYXIgKmtleVtdKQorIAorICAgcmV0dXJuIHJlc3VsdDsKKyB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19JTkVUICovCisgCisgLyogTm93IGlzIGFsbCBmb3IgcGFzc3dkICovCisgc3RhdGljIHZvaWQKK0BAIC02NTAsNiArNjU3LDcgQEAgcGFzc3dkX2tleXMgKGludCBudW1iZXIsIGNoYXIgKmtleVtdKQorICAgcmV0dXJuIHJlc3VsdDsKKyB9CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19JTkVUCisgLyogVGhpcyBpcyBmb3IgcHJvdG9jb2xzICovCisgc3RhdGljIHZvaWQKKyBwcmludF9wcm90b2NvbHMgKHN0cnVjdCBwcm90b2VudCAqcHJvdG8pCitAQCAtODA3LDYgKzgxNSw3IEBAIHNlcnZpY2VzX2tleXMgKGludCBudW1iZXIsIGNoYXIgKmtleVtdKQorIAorICAgcmV0dXJuIHJlc3VsdDsKKyB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19JTkVUICovCisgCisgLyogVGhpcyBpcyBmb3Igc2hhZG93ICovCisgc3RhdGljIHZvaWQKK0BAIC04NzMsMjMgKzg4MiwzNiBAQCBzdHJ1Y3QKKyAgIH0gZGF0YWJhc2VzW10gPQorICAgeworICNkZWZpbmUgRChuYW1lKSB7ICNuYW1lLCBuYW1lICMjIF9rZXlzIH0sCistRChhaG9zdHMpCistRChhaG9zdHN2NCkKKy1EKGFob3N0c3Y2KQorLUQoYWxpYXNlcykKKy1EKGV0aGVycykKKysKKysjaWYgX19PUFRJT05fRUdMSUJDX0lORVQKKysjIGRlZmluZSBETihuYW1lKSBEKG5hbWUpCisrI2Vsc2UKKysjIGRlZmluZSBETihuYW1lKQorKyNlbmRpZgorKworKyNpZiBfX09QVElPTl9FR0xJQkNfREJfQUxJQVNFUworKyMgZGVmaW5lIERBKG5hbWUpIEQobmFtZSkKKysjZWxzZQorKyMgZGVmaW5lIERBKG5hbWUpCisrI2VuZGlmCisrCisrRE4oYWhvc3RzKQorK0ROKGFob3N0c3Y0KQorK0ROKGFob3N0c3Y2KQorK0RBKGFsaWFzZXMpCisrRE4oZXRoZXJzKQorIEQoZ3JvdXApCisgRChnc2hhZG93KQorLUQoaG9zdHMpCistRChpbml0Z3JvdXBzKQorLUQobmV0Z3JvdXApCistRChuZXR3b3JrcykKKytETihob3N0cykKKytETihpbml0Z3JvdXBzKQorK0ROKG5ldGdyb3VwKQorK0ROKG5ldHdvcmtzKQorIEQocGFzc3dkKQorLUQocHJvdG9jb2xzKQorK0ROKHByb3RvY29scykKKyAjaWYgSEFWRV9TVU5SUEMKKy1EKHJwYykKKytETihycGMpCisgI2VuZGlmCistRChzZXJ2aWNlcykKKytETihzZXJ2aWNlcykKKyBEKHNoYWRvdykKKyAjdW5kZWYgRAorICAgICB7IE5VTEwsIE5VTEwgfQorZGlmZiAtLWdpdCBhL25zcy9nZXRuc3NlbnRfci5jIGIvbnNzL2dldG5zc2VudF9yLmMKK2luZGV4IGY1YjkwMzYuLmYwOWY3ZmUgMTAwNjQ0CistLS0gYS9uc3MvZ2V0bnNzZW50X3IuYworKysrIGIvbnNzL2dldG5zc2VudF9yLmMKK0BAIC0xNiw2ICsxNiw3IEBACisgICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjaW5jbHVkZSA8bmV0ZGIuaD4KKyAjaW5jbHVkZSAibnNzd2l0Y2guaCIKKyAKK0BAIC01OSwxMSArNjAsMTMgQEAgX19uc3Nfc2V0ZW50IChjb25zdCBjaGFyICpmdW5jX25hbWUsIGRiX2xvb2t1cF9mdW5jdGlvbiBsb29rdXBfZmN0LAorICAgfSBmY3Q7CisgICBpbnQgbm9fbW9yZTsKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0lORVQKKyAgIGlmIChyZXMgJiYgX19yZXNfbWF5YmVfaW5pdCAoJl9yZXMsIDApID09IC0xKQorICAgICB7CisgICAgICAgX19zZXRfaF9lcnJubyAoTkVUREJfSU5URVJOQUwpOworICAgICAgIHJldHVybjsKKyAgICAgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfSU5FVCAqLworIAorICAgLyogQ3ljbGUgdGhyb3VnaCB0aGUgc2VydmljZXMgYW5kIHJ1biB0aGVpciBgc2V0WFhlbnQnIGZ1bmN0aW9ucyB1bnRpbAorICAgICAgd2UgZmluZCBhbiBhdmFpbGFibGUgc2VydmljZS4gICovCitAQCAtMTAxLDExICsxMDQsMTMgQEAgX19uc3NfZW5kZW50IChjb25zdCBjaGFyICpmdW5jX25hbWUsIGRiX2xvb2t1cF9mdW5jdGlvbiBsb29rdXBfZmN0LAorICAgfSBmY3Q7CisgICBpbnQgbm9fbW9yZTsKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0lORVQKKyAgIGlmIChyZXMgJiYgX19yZXNfbWF5YmVfaW5pdCAoJl9yZXMsIDApID09IC0xKQorICAgICB7CisgICAgICAgX19zZXRfaF9lcnJubyAoTkVUREJfSU5URVJOQUwpOworICAgICAgIHJldHVybjsKKyAgICAgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfSU5FVCAqLworIAorICAgLyogQ3ljbGUgdGhyb3VnaCBhbGwgdGhlIHNlcnZpY2VzIGFuZCBydW4gdGhlaXIgZW5kWFhlbnQgZnVuY3Rpb25zLiAgKi8KKyAgIG5vX21vcmUgPSBzZXR1cCAoZnVuY19uYW1lLCBsb29rdXBfZmN0LCAmZmN0LnB0ciwgbmlwLCBzdGFydHAsIDEpOworQEAgLTE0MSwxMiArMTQ2LDE0IEBAIF9fbnNzX2dldGVudF9yIChjb25zdCBjaGFyICpnZXRlbnRfZnVuY19uYW1lLAorICAgaW50IG5vX21vcmU7CisgICBlbnVtIG5zc19zdGF0dXMgc3RhdHVzOworIAorKyNpZiBfX09QVElPTl9FR0xJQkNfSU5FVAorICAgaWYgKHJlcyAmJiBfX3Jlc19tYXliZV9pbml0ICgmX3JlcywgMCkgPT0gLTEpCisgICAgIHsKKyAgICAgICAqaF9lcnJub3AgPSBORVREQl9JTlRFUk5BTDsKKyAgICAgICAqcmVzdWx0ID0gTlVMTDsKKyAgICAgICByZXR1cm4gZXJybm87CisgICAgIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0lORVQgKi8KKyAKKyAgIC8qIEluaXRpYWxpemUgc3RhdHVzIHRvIHJldHVybiBpZiBubyBtb3JlIGZ1bmN0aW9ucyBhcmUgZm91bmQuICAqLworICAgc3RhdHVzID0gTlNTX1NUQVRVU19OT1RGT1VORDsKK0BAIC0xNjEsNyArMTY4LDcgQEAgX19uc3NfZ2V0ZW50X3IgKGNvbnN0IGNoYXIgKmdldGVudF9mdW5jX25hbWUsCisgICAgICAgaW50IGlzX2xhc3RfbmlwID0gKm5pcCA9PSAqbGFzdF9uaXA7CisgCisgICAgICAgc3RhdHVzID0gRExfQ0FMTF9GQ1QgKGZjdC5mLAorLQkJCSAgICAocmVzYnVmLCBidWZmZXIsIGJ1ZmxlbiwgJmVycm5vLCAmaF9lcnJubykpOworKwkJCSAgICAocmVzYnVmLCBidWZmZXIsIGJ1ZmxlbiwgJmVycm5vLCBoX2Vycm5vcCkpOworIAorICAgICAgIC8qIFRoZSBzdGF0dXMgaXMgTlNTX1NUQVRVU19UUllBR0FJTiBhbmQgZXJybm8gaXMgRVJBTkdFIHRoZQorIAkgcHJvdmlkZWQgYnVmZmVyIGlzIHRvbyBzbWFsbC4gIEluIHRoaXMgY2FzZSB3ZSBzaG91bGQgZ2l2ZQorZGlmZiAtLWdpdCBhL25zcy9uc3N3aXRjaC5jIGIvbnNzL25zc3dpdGNoLmMKK2luZGV4IDk3MTI2MjMuLmM4MWUyMDcgMTAwNjQ0CistLS0gYS9uc3MvbnNzd2l0Y2guYworKysrIGIvbnNzL25zc3dpdGNoLmMKK0BAIC0yNiw2ICsyNiw3IEBACisgI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2luY2x1ZGUgPGFsaWFzZXMuaD4KKyAjaW5jbHVkZSA8Z3JwLmg+CitAQCAtNDEsNiArNDIsMTUgQEAKKyAjaW5jbHVkZSAiLi4vbnNjZC9uc2NkX3Byb3RvLmgiCisgI2luY2x1ZGUgPHN5c2RlcC5oPgorIAorKy8qIFdoZW4gT1BUSU9OX0VHTElCQ19OU1NXSVRDSCBpcyBkaXNhYmxlZCwgd2UgdXNlIGZpeGVkIHRhYmxlcyBvZgorKyAgIGRhdGFiYXNlcyBhbmQgc2VydmljZXMsIGdlbmVyYXRlZCBhdCBsaWJyYXJ5IGJ1aWxkIHRpbWUuICBUaHVzOgorKyAgIC0gV2UgY2FuJ3QgcmVjb25maWd1cmUgaW5kaXZpZHVhbCBkYXRhYmFzZXMsIHNvIHdlIGRvbid0IG5lZWQgYQorKyAgICAgbmFtZS10by1kYXRhYmFzZSBtYXAuCisrICAgLSBXZSBuZXZlciBhZGQgZGF0YWJhc2VzIG9yIHNlcnZpY2UgbGlicmFyaWVzLCBvciBsb29rIHVwIGZ1bmN0aW9ucworKyAgICAgYXQgcnVudGltZSwgc28gdGhlcmUncyBubyBuZWVkIGZvciBhIGxvY2sgdG8gcHJvdGVjdCBvdXIgdGFibGVzLgorKyAgIFNlZSAuLi9vcHRpb24tZ3JvdXBzLmRlZiBmb3IgdGhlIGRldGFpbHMuICAqLworKyNpZiBfX09QVElPTl9FR0xJQkNfTlNTV0lUQ0gKKysKKyAvKiBQcm90b3R5cGVzIGZvciB0aGUgbG9jYWwgZnVuY3Rpb25zLiAgKi8KKyBzdGF0aWMgbmFtZV9kYXRhYmFzZSAqbnNzX3BhcnNlX2ZpbGUgKGNvbnN0IGNoYXIgKmZuYW1lKSBpbnRlcm5hbF9mdW5jdGlvbjsKKyBzdGF0aWMgbmFtZV9kYXRhYmFzZV9lbnRyeSAqbnNzX2dldGxpbmUgKGNoYXIgKmxpbmUpIGludGVybmFsX2Z1bmN0aW9uOworQEAgLTc5LDYgKzg5LDkgQEAgYm9vbCBfX25zc19kYXRhYmFzZV9jdXN0b21bTlNTX0RCU0lEWF9tYXhdOworIAorIF9fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZCAoc3RhdGljLCBsb2NrKQorIAorKyNkZWZpbmUgbG9ja19uc3N3aXRjaCBfX2xpYmNfbG9ja19sb2NrIChsb2NrKQorKyNkZWZpbmUgdW5sb2NrX25zc3dpdGNoIF9fbGliY19sb2NrX3VubG9jayAobG9jaykKKysKKyAjaWYgIWRlZmluZWQgRE9fU1RBVElDX05TUyB8fCBkZWZpbmVkIFNIQVJFRAorIC8qIFN0cmluZyB3aXRoIHJldmlzaW9uIG51bWJlciBvZiB0aGUgc2hhcmVkIG9iamVjdCBmaWxlcy4gICovCisgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IF9fbnNzX3NobGliX3JldmlzaW9uID0gTElCTlNTX0ZJTEVTX1NPICsgMTU7CitAQCAtOTMsNiArMTA2LDIwIEBAIHN0YXRpYyBuYW1lX2RhdGFiYXNlICpzZXJ2aWNlX3RhYmxlOworICAgIF9fbGliY19mcmVlcmVzLiAgKi8KKyBzdGF0aWMgbmFtZV9kYXRhYmFzZV9lbnRyeSAqZGVmY29uZmlnX2VudHJpZXM7CisgCisrI2Vsc2UgLyogX19PUFRJT05fRUdMSUJDX05TU1dJVENIICovCisrCisrLyogQnJpbmcgaW4gdGhlIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgc2VydmljZSB0YWJsZSB3ZSBnZW5lcmF0ZWQgYXQKKysgICBidWlsZCB0aW1lLiAgKi8KKysjaW5jbHVkZSAiZml4ZWQtbnNzd2l0Y2guaCIKKysKKytjb25zdCBzdGF0aWMgbmFtZV9kYXRhYmFzZSAqc2VydmljZV90YWJsZSA9ICZmaXhlZF9uYW1lX2RhdGFiYXNlOworKworKy8qIE5vdGhpbmcgZXZlciBjaGFuZ2VzLCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gbG9jayBhbnl0aGluZy4gICovCisrI2RlZmluZSBsb2NrX25zc3dpdGNoICgwKQorKyNkZWZpbmUgdW5sb2NrX25zc3dpdGNoICgwKQorKworKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfTlNTV0lUQ0ggKi8KKysKKyAKKyAjaWZkZWYgVVNFX05TQ0QKKyAvKiBOb256ZXJvIGlmIHRoaXMgaXMgdGhlIG5zY2QgcHJvY2Vzcy4gICovCitAQCAtMTA5LDIwICsxMzYsMjIgQEAgX19uc3NfZGF0YWJhc2VfbG9va3VwIChjb25zdCBjaGFyICpkYXRhYmFzZSwgY29uc3QgY2hhciAqYWx0ZXJuYXRlX25hbWUsCisgCQkgICAgICAgY29uc3QgY2hhciAqZGVmY29uZmlnLCBzZXJ2aWNlX3VzZXIgKipuaSkKKyB7CisgICAvKiBQcmV2ZW50IG11bHRpcGxlIHRocmVhZHMgdG8gY2hhbmdlIHRoZSBzZXJ2aWNlIHRhYmxlLiAgKi8KKy0gIF9fbGliY19sb2NrX2xvY2sgKGxvY2spOworKyAgbG9ja19uc3N3aXRjaDsKKyAKKyAgIC8qIFJlY29uc2lkZXIgZGF0YWJhc2UgdmFyaWFibGUgaW4gY2FzZSBzb21lIG90aGVyIHRocmVhZCBjYWxsZWQKKyAgICAgIGBfX25zc19jb25maWd1cmVfbG9va3VwJyB3aGlsZSB3ZSB3YWl0ZWQgZm9yIHRoZSBsb2NrLiAgKi8KKyAgIGlmICgqbmkgIT0gTlVMTCkKKyAgICAgeworLSAgICAgIF9fbGliY19sb2NrX3VubG9jayAobG9jayk7CisrICAgICAgdW5sb2NrX25zc3dpdGNoOworICAgICAgIHJldHVybiAwOworICAgICB9CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19OU1NXSVRDSAorICAgLyogQXJlIHdlIGluaXRpYWxpemVkIHlldD8gICovCisgICBpZiAoc2VydmljZV90YWJsZSA9PSBOVUxMKQorICAgICAvKiBSZWFkIGNvbmZpZyBmaWxlLiAgKi8KKyAgICAgc2VydmljZV90YWJsZSA9IG5zc19wYXJzZV9maWxlIChfUEFUSF9OU1NXSVRDSF9DT05GKTsKKysjZW5kaWYKKyAKKyAgIC8qIFRlc3Qgd2hldGhlciBjb25maWd1cmF0aW9uIGRhdGEgaXMgYXZhaWxhYmxlLiAgKi8KKyAgIGlmIChzZXJ2aWNlX3RhYmxlICE9IE5VTEwpCitAQCAtMTQ0LDYgKzE3Myw3IEBAIF9fbnNzX2RhdGFiYXNlX2xvb2t1cCAoY29uc3QgY2hhciAqZGF0YWJhc2UsIGNvbnN0IGNoYXIgKmFsdGVybmF0ZV9uYW1lLAorIAkgICAgKm5pID0gZW50cnktPnNlcnZpY2U7CisgICAgIH0KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX05TU1dJVENICisgICAvKiBObyBjb25maWd1cmF0aW9uIGRhdGEgaXMgYXZhaWxhYmxlLCBlaXRoZXIgYmVjYXVzZSBuc3N3aXRjaC5jb25mCisgICAgICBkb2Vzbid0IGV4aXN0IG9yIGJlY2F1c2UgaXQgZG9lc24ndCBoYXZlIGEgbGluZSBmb3IgdGhpcyBkYXRhYmFzZS4KKyAKK0BAIC0xNjYsMTMgKzE5NiwyMyBAQCBfX25zc19kYXRhYmFzZV9sb29rdXAgKGNvbnN0IGNoYXIgKmRhdGFiYXNlLCBjb25zdCBjaGFyICphbHRlcm5hdGVfbmFtZSwKKyAJICAgIHsKKyAJICAgICAgZW50cnktPm5leHQgPSBkZWZjb25maWdfZW50cmllczsKKyAJICAgICAgZW50cnktPnNlcnZpY2UgPSAqbmk7CistCSAgICAgIGVudHJ5LT5uYW1lWzBdID0gJ1wwJzsKKysJICAgICAgZW50cnktPm5hbWUgPSAiIjsKKyAJICAgICAgZGVmY29uZmlnX2VudHJpZXMgPSBlbnRyeTsKKyAJICAgIH0KKyAJfQorICAgICB9CisrI2Vsc2UKKysgIC8qIFdpdGhvdXQgdGhlIGR5bmFtaWMgYmVoYXZpb3IsIHdlIGNhbid0IHByb2Nlc3MgZGVmY29uZmlnLiAgVGhlCisrICAgICBkYXRhYmFzZXMgdGhlIHVzZXIgc3BlY2lmaWVkIGF0IGxpYnJhcnkgYnVpbGQgdGltZSBhcmUgYWxsIHlvdQorKyAgICAgZ2V0LiAgKi8KKysgIGlmICgqbmkgPT0gTlVMTCkKKysgICAgeworKyAgICAgIHVubG9ja19uc3N3aXRjaDsKKysgICAgICByZXR1cm4gLTE7CisrICAgIH0KKysjZW5kaWYKKyAKKy0gIF9fbGliY19sb2NrX3VubG9jayAobG9jayk7CisrICB1bmxvY2tfbnNzd2l0Y2g7CisgCisgICByZXR1cm4gKm5pICE9IE5VTEwgPyAwIDogLTE7CisgfQorQEAgLTI1Miw2ICsyOTIsNyBAQCBfX25zc19uZXh0MiAoc2VydmljZV91c2VyICoqbmksIGNvbnN0IGNoYXIgKmZjdF9uYW1lLCBjb25zdCBjaGFyICpmY3QyX25hbWUsCisgbGliY19oaWRkZW5fZGVmIChfX25zc19uZXh0MikKKyAKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX05TU1dJVENICisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KKyBfX25zc19uZXh0IChzZXJ2aWNlX3VzZXIgKipuaSwgY29uc3QgY2hhciAqZmN0X25hbWUsIHZvaWQgKipmY3RwLCBpbnQgc3RhdHVzLAorQEAgLTMwMCwxMyArMzQxLDEzIEBAIF9fbnNzX2NvbmZpZ3VyZV9sb29rdXAgKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqc2VydmljZV9saW5lKQorICAgICB9CisgCisgICAvKiBQcmV2ZW50IG11bHRpcGxlIHRocmVhZHMgdG8gY2hhbmdlIHRoZSBzZXJ2aWNlIHRhYmxlLiAgKi8KKy0gIF9fbGliY19sb2NrX2xvY2sgKGxvY2spOworKyAgbG9ja19uc3N3aXRjaDsKKyAKKyAgIC8qIEluc3RhbGwgbmV3IHJ1bGVzLiAgKi8KKyAgICpkYXRhYmFzZXNbY250XS5kYnAgPSBuZXdfZGI7CisgICBfX25zc19kYXRhYmFzZV9jdXN0b21bY250XSA9IHRydWU7CisgCistICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworKyAgdW5sb2NrX25zc3dpdGNoOworIAorICAgcmV0dXJuIDA7CisgfQorQEAgLTQwMiw3ICs0NDMsNyBAQCBfX25zc19sb29rdXBfZnVuY3Rpb24gKHNlcnZpY2VfdXNlciAqbmksIGNvbnN0IGNoYXIgKmZjdF9uYW1lKQorICAgdm9pZCAqKmZvdW5kLCAqcmVzdWx0OworIAorICAgLyogV2Ugbm93IG1vZGlmeSBnbG9iYWwgZGF0YS4gIFByb3RlY3QgaXQuICAqLworLSAgX19saWJjX2xvY2tfbG9jayAobG9jayk7CisrICBsb2NrX25zc3dpdGNoOworIAorICAgLyogU2VhcmNoIHRoZSB0cmVlIG9mIGZ1bmN0aW9ucyBwcmV2aW91c2x5IHJlcXVlc3RlZC4gIERhdGEgaW4gdGhlCisgICAgICB0cmVlIGFyZSBga25vd25fZnVuY3Rpb24nIHN0cnVjdHVyZXMsIHdob3NlIGZpcnN0IG1lbWJlciBpcyBhCitAQCAtNDEzLDcgKzQ1NCw3IEBAIF9fbnNzX2xvb2t1cF9mdW5jdGlvbiAoc2VydmljZV91c2VyICpuaSwgY29uc3QgY2hhciAqZmN0X25hbWUpCisgICAgICBlbm91Z2ggdG8gYSBwb2ludGVyIHRvIG91ciBzdHJ1Y3R1cmUgdG8gdXNlIGFzIGEgbG9va3VwIGtleSB0aGF0CisgICAgICB3aWxsIGJlIHBhc3NlZCB0byBga25vd25fY29tcGFyZScgKGFib3ZlKS4gICovCisgCistICBmb3VuZCA9IF9fdHNlYXJjaCAoJmZjdF9uYW1lLCAmbmktPmtub3duLCAma25vd25fY29tcGFyZSk7CisrICBmb3VuZCA9IF9fdHNlYXJjaCAoJmZjdF9uYW1lLCAmbmktPmtub3duLnRyZWUsICZrbm93bl9jb21wYXJlKTsKKyAgIGlmIChmb3VuZCA9PSBOVUxMKQorICAgICAvKiBUaGlzIG1lYW5zIG91dC1vZi1tZW1vcnkuICAqLworICAgICByZXN1bHQgPSBOVUxMOworQEAgLTQ0MCw3ICs0ODEsNyBAQCBfX25zc19sb29rdXBfZnVuY3Rpb24gKHNlcnZpY2VfdXNlciAqbmksIGNvbnN0IGNoYXIgKmZjdF9uYW1lKQorICNlbmRpZgorIAkgIC8qIE9vcHMuICBXZSBjYW4ndCBpbnN0YW50aWF0ZSB0aGlzIG5vZGUgcHJvcGVybHkuCisgCSAgICAgUmVtb3ZlIGl0IGZyb20gdGhlIHRyZWUuICAqLworLQkgIF9fdGRlbGV0ZSAoJmZjdF9uYW1lLCAmbmktPmtub3duLCAma25vd25fY29tcGFyZSk7CisrCSAgX190ZGVsZXRlICgmZmN0X25hbWUsICZuaS0+a25vd24udHJlZSwgJmtub3duX2NvbXBhcmUpOworIAkgIGZyZWUgKGtub3duKTsKKyAJICByZXN1bHQgPSBOVUxMOworIAl9CitAQCAtNTIwLDEzICs1NjEsNDMgQEAgX19uc3NfbG9va3VwX2Z1bmN0aW9uIChzZXJ2aWNlX3VzZXIgKm5pLCBjb25zdCBjaGFyICpmY3RfbmFtZSkKKyAgICAgfQorIAorICAgLyogUmVtb3ZlIHRoZSBsb2NrLiAgKi8KKy0gIF9fbGliY19sb2NrX3VubG9jayAobG9jayk7CisrICB1bmxvY2tfbnNzd2l0Y2g7CisgCisgICByZXR1cm4gcmVzdWx0OworIH0KKyBsaWJjX2hpZGRlbl9kZWYgKF9fbnNzX2xvb2t1cF9mdW5jdGlvbikKKyAKKyAKKysjZWxzZSAvKiBiZWxvdyBpZiAhIF9fT1BUSU9OX0VHTElCQ19OU1NXSVRDSCAqLworKworKworK2ludAorK19fbnNzX2NvbmZpZ3VyZV9sb29rdXAgKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqc2VydmljZV9saW5lKQorK3sKKysgIC8qIFdlIGNhbid0IGR5bmFtaWNhbGx5IGNvbmZpZ3VyZSBsb29rdXAgd2l0aG91dAorKyAgICAgT1BUSU9OX0VHTElCQ19OU1NXSVRDSC4gICovCisrICBfX3NldF9lcnJubyAoRUlOVkFMKTsKKysgIHJldHVybiAtMTsKKyt9CisrCisrCisrdm9pZCAqCisrX19uc3NfbG9va3VwX2Z1bmN0aW9uIChzZXJ2aWNlX3VzZXIgKm5pLCBjb25zdCBjaGFyICpmY3RfbmFtZSkKKyt7CisrICBpbnQgaTsKKysgIGNvbnN0IGtub3duX2Z1bmN0aW9uICoqa25vd24gPSBuaS0+a25vd24uYXJyYXk7CisrCisrICBmb3IgKGkgPSAwOyBrbm93bltpXTsgaSsrKQorKyAgICBpZiAoc3RyY21wIChmY3RfbmFtZSwga25vd25baV0tPmZjdF9uYW1lKSA9PSAwKQorKyAgICAgIHJldHVybiBrbm93bltpXS0+ZmN0X3B0cjsKKysKKysgIHJldHVybiBOVUxMOworK30KKytsaWJjX2hpZGRlbl9kZWYgKF9fbnNzX2xvb2t1cF9mdW5jdGlvbikKKysjZW5kaWYKKysKKysKKysjaWYgX19PUFRJT05fRUdMSUJDX05TU1dJVENICisgc3RhdGljIG5hbWVfZGF0YWJhc2UgKgorIGludGVybmFsX2Z1bmN0aW9uCisgbnNzX3BhcnNlX2ZpbGUgKGNvbnN0IGNoYXIgKmZuYW1lKQorQEAgLTYzMiw4ICs3MDMsMTAgQEAgbnNzX3BhcnNlX3NlcnZpY2VfbGlzdCAoY29uc3QgY2hhciAqbGluZSkKKyAJCQkJCSAgICAgKyAobGluZSAtIG5hbWUgKyAxKSk7CisgICAgICAgaWYgKG5ld19zZXJ2aWNlID09IE5VTEwpCisgCXJldHVybiByZXN1bHQ7CisrICAgICAgbmV3X3NlcnZpY2UtPm5hbWUgPSAoY2hhciAqKSAobmV3X3NlcnZpY2UgKyAxKTsKKyAKKy0gICAgICAqKChjaGFyICopIF9fbWVtcGNweSAobmV3X3NlcnZpY2UtPm5hbWUsIG5hbWUsIGxpbmUgLSBuYW1lKSkgPSAnXDAnOworKyAgICAgICooKGNoYXIgKikgX19tZW1wY3B5ICgoY2hhciAqKSBuZXdfc2VydmljZS0+bmFtZSwgbmFtZSwgbGluZSAtIG5hbWUpKQorKyAgICAgICAgPSAnXDAnOworIAorICAgICAgIC8qIFNldCBkZWZhdWx0IGFjdGlvbnMuICAqLworICAgICAgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBOU1NfU1RBVFVTX1RSWUFHQUlOXSA9IE5TU19BQ1RJT05fQ09OVElOVUU7CitAQCAtNjQyLDcgKzcxNSw3IEBAIG5zc19wYXJzZV9zZXJ2aWNlX2xpc3QgKGNvbnN0IGNoYXIgKmxpbmUpCisgICAgICAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIE5TU19TVEFUVVNfU1VDQ0VTU10gPSBOU1NfQUNUSU9OX1JFVFVSTjsKKyAgICAgICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgTlNTX1NUQVRVU19SRVRVUk5dID0gTlNTX0FDVElPTl9SRVRVUk47CisgICAgICAgbmV3X3NlcnZpY2UtPmxpYnJhcnkgPSBOVUxMOworLSAgICAgIG5ld19zZXJ2aWNlLT5rbm93biA9IE5VTEw7CisrICAgICAgbmV3X3NlcnZpY2UtPmtub3duLnRyZWUgPSBOVUxMOworICAgICAgIG5ld19zZXJ2aWNlLT5uZXh0ID0gTlVMTDsKKyAKKyAgICAgICB3aGlsZSAoaXNzcGFjZSAobGluZVswXSkpCitAQCAtNzc4LDkgKzg1MSwxMCBAQCBuc3NfZ2V0bGluZSAoY2hhciAqbGluZSkKKyAgIHJlc3VsdCA9IChuYW1lX2RhdGFiYXNlX2VudHJ5ICopIG1hbGxvYyAoc2l6ZW9mIChuYW1lX2RhdGFiYXNlX2VudHJ5KSArIGxlbik7CisgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgIHJldHVybiBOVUxMOworKyAgcmVzdWx0LT5uYW1lID0gKGNoYXIgKikgKHJlc3VsdCArIDEpOworIAorICAgLyogU2F2ZSB0aGUgZGF0YWJhc2UgbmFtZS4gICovCistICBtZW1jcHkgKHJlc3VsdC0+bmFtZSwgbmFtZSwgbGVuKTsKKysgIG1lbWNweSAoKGNoYXIgKikgcmVzdWx0LT5uYW1lLCBuYW1lLCBsZW4pOworIAorICAgLyogUGFyc2UgdGhlIGxpc3Qgb2Ygc2VydmljZXMuICAqLworICAgcmVzdWx0LT5zZXJ2aWNlID0gbnNzX3BhcnNlX3NlcnZpY2VfbGlzdCAobGluZSk7CitAQCAtODE2LDYgKzg5MCw3IEBAIG5zc19uZXdfc2VydmljZSAobmFtZV9kYXRhYmFzZSAqZGF0YWJhc2UsIGNvbnN0IGNoYXIgKm5hbWUpCisgICByZXR1cm4gKmN1cnJlbnRwOworIH0KKyAjZW5kaWYKKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX05TU1dJVENIICovCisgCisgCisgI2lmIGRlZmluZWQgU0hBUkVEICYmIGRlZmluZWQgVVNFX05TQ0QKK0BAIC04MzQsNiArOTA5LDcgQEAgbnNzX2xvYWRfYWxsX2xpYnJhcmllcyAoY29uc3QgY2hhciAqc2VydmljZSwgY29uc3QgY2hhciAqZGVmKQorIH0KKyAKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0lORVQKKyAvKiBDYWxsZWQgYnkgbnNjZCBhbmQgbnNjZCBhbG9uZS4gICovCisgdm9pZAorIF9fbnNzX2Rpc2FibGVfbnNjZCAodm9pZCAoKmNiKSAoc2l6ZV90LCBzdHJ1Y3QgdHJhY2VkX2ZpbGUgKikpCitAQCAtODU3LDggKzkzMywxMCBAQCBfX25zc19kaXNhYmxlX25zY2QgKHZvaWQgKCpjYikgKHNpemVfdCwgc3RydWN0IHRyYWNlZF9maWxlICopKQorICAgX19uc3Nfbm90X3VzZV9uc2NkX3NlcnZpY2VzID0gLTE7CisgICBfX25zc19ub3RfdXNlX25zY2RfbmV0Z3JvdXAgPSAtMTsKKyB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19JTkVUICovCisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19OU1NXSVRDSAorIHN0YXRpYyB2b2lkCisgZnJlZV9kYXRhYmFzZV9lbnRyaWVzIChuYW1lX2RhdGFiYXNlX2VudHJ5ICplbnRyeSkKKyB7CitAQCAtODcxLDggKzk0OSw4IEBAIGZyZWVfZGF0YWJhc2VfZW50cmllcyAobmFtZV9kYXRhYmFzZV9lbnRyeSAqZW50cnkpCisgCXsKKyAJICBzZXJ2aWNlX3VzZXIgKm9sZHMgPSBzZXJ2aWNlOworIAorLQkgIGlmIChzZXJ2aWNlLT5rbm93biAhPSBOVUxMKQorLQkgICAgX190ZGVzdHJveSAoc2VydmljZS0+a25vd24sIGZyZWUpOworKwkgIGlmIChzZXJ2aWNlLT5rbm93bi50cmVlICE9IE5VTEwpCisrCSAgICBfX3RkZXN0cm95IChzZXJ2aWNlLT5rbm93bi50cmVlLCBmcmVlKTsKKyAKKyAJICBzZXJ2aWNlID0gc2VydmljZS0+bmV4dDsKKyAJICBmcmVlIChvbGRzKTsKK0BAIC05MjYsMyArMTAwNCw0IEBAIGxpYmNfZnJlZXJlc19mbiAoZnJlZV9tZW0pCisgCisgICBmcmVlICh0b3ApOworIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX05TU1dJVENIICovCitkaWZmIC0tZ2l0IGEvbnNzL25zc3dpdGNoLmggYi9uc3MvbnNzd2l0Y2guaAoraW5kZXggYTUzMThmYS4uMTczMDk3NyAxMDA2NDQKKy0tLSBhL25zcy9uc3N3aXRjaC5oCisrKysgYi9uc3MvbnNzd2l0Y2guaAorQEAgLTY1LDEwICs2NSwyMCBAQCB0eXBlZGVmIHN0cnVjdCBzZXJ2aWNlX3VzZXIKKyAgIGxvb2t1cF9hY3Rpb25zIGFjdGlvbnNbNV07CisgICAvKiBMaW5rIHRvIHRoZSB1bmRlcmx5aW5nIGxpYnJhcnkgb2JqZWN0LiAgKi8KKyAgIHNlcnZpY2VfbGlicmFyeSAqbGlicmFyeTsKKy0gIC8qIENvbGxlY3Rpb24gb2Yga25vd24gZnVuY3Rpb25zLiAgKi8KKy0gIHZvaWQgKmtub3duOworKyAgLyogQ29sbGVjdGlvbiBvZiBrbm93biBmdW5jdGlvbnMuCisrCisrICAgICBXaXRoIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0ggZW5hYmxlZCwgdGhpcyBpcyB0aGUgcm9vdCBvZiBhCisrICAgICAndHNlYXJjaCctc3R5bGUgdHJlZS4KKysKKysgICAgIFdpdGggT1BUSU9OX0VHTElCQ19OU1NXSVRDSCBkaXNhYmxlZCwgdGhpcyBpcyBhbiBhcnJheSBvZgorKyAgICAgcG9pbnRlcnMgdG8ga25vd25fZnVuY3Rpb24gc3RydWN0dXJlcywgTlVMTC10ZXJtaW5hdGVkLiAgKi8KKysgIHVuaW9uCisrICB7CisrICAgIHZvaWQgKnRyZWU7CisrICAgIGNvbnN0IGtub3duX2Z1bmN0aW9uICoqYXJyYXk7CisrICB9IGtub3duOworICAgLyogTmFtZSBvZiB0aGUgc2VydmljZSAoYGZpbGVzJywgYGRucycsIGBuaXMnLCAuLi4pLiAgKi8KKy0gIGNoYXIgbmFtZVswXTsKKysgIGNvbnN0IGNoYXIgKm5hbWU7CisgfSBzZXJ2aWNlX3VzZXI7CisgCisgLyogVG8gYWNjZXNzIHRoZSBhY3Rpb24gYmFzZWQgb24gdGhlIHN0YXR1cyB2YWx1ZSB1c2UgdGhpcyBtYWNyby4gICovCitAQCAtODIsNyArOTIsNyBAQCB0eXBlZGVmIHN0cnVjdCBuYW1lX2RhdGFiYXNlX2VudHJ5CisgICAvKiBMaXN0IG9mIHNlcnZpY2UgdG8gYmUgdXNlZC4gICovCisgICBzZXJ2aWNlX3VzZXIgKnNlcnZpY2U7CisgICAvKiBOYW1lIG9mIHRoZSBkYXRhYmFzZS4gICovCistICBjaGFyIG5hbWVbMF07CisrICBjb25zdCBjaGFyICpuYW1lOworIH0gbmFtZV9kYXRhYmFzZV9lbnRyeTsKKyAKKyAKK2RpZmYgLS1naXQgYS9wb3NpeC9NYWtlZmlsZSBiL3Bvc2l4L01ha2VmaWxlCitpbmRleCAxNWU4ODE4Li42MDllZDAzIDEwMDY0NAorLS0tIGEvcG9zaXgvTWFrZWZpbGUKKysrKyBiL3Bvc2l4L01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgUE9TSVggcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBwb3NpeAorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTQzLDEzICs0NSwyNCBAQCByb3V0aW5lcyA6PQkJCQkJCQkJICAgICAgXAorIAlnZXRwZ2lkIHNldHBnaWQgZ2V0cGdycCBic2QtZ2V0cGdycCBzZXRwZ3JwIGdldHNpZCBzZXRzaWQJICAgICAgXAorIAlnZXRyZXN1aWQgZ2V0cmVzZ2lkIHNldHJlc3VpZCBzZXRyZXNnaWQJCQkJICAgICAgXAorIAlwYXRoY29uZiBzeXNjb25mIGZwYXRoY29uZgkJCQkJICAgICAgXAorLQlnbG9iIGdsb2I2NCBmbm1hdGNoIHJlZ2V4CQkJCQkgICAgICBcCisrCWdsb2IgZ2xvYjY0IGZubWF0Y2gJCQkJCQkgICAgICBcCisgCWNvbmZzdHIJCQkJCQkJCSAgICAgIFwKKyAJZ2V0b3B0IGdldG9wdDEgZ2V0b3B0X2luaXQJCQkJCSAgICAgIFwKKyAJc2NoZWRfc2V0cCBzY2hlZF9nZXRwIHNjaGVkX3NldHMgc2NoZWRfZ2V0cyBzY2hlZF95aWVsZCBzY2hlZF9wcmltYXggIFwKKyAJc2NoZWRfcHJpbWluIHNjaGVkX3JyX2dpIHNjaGVkX2dldGFmZmluaXR5IHNjaGVkX3NldGFmZmluaXR5CSAgICAgIFwKKy0JZ2V0YWRkcmluZm8gZ2FpX3N0cmVycm9yIHdvcmRleHAJCQkJICAgICAgXAorIAlwcmVhZCBwd3JpdGUgcHJlYWQ2NCBwd3JpdGU2NAkJCQkJICAgICAgXAorKwlwb3NpeF9tYWR2aXNlCQkJCQkJCSAgICAgIFwKKysJZ2V0X2NoaWxkX21heCBzY2hlZF9jcHVjb3VudCBzY2hlZF9jcHVhbGxvYyBzY2hlZF9jcHVmcmVlCisrCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IGdldGFkZHJpbmZvIGdhaV9zdHJlcnJvcgorKworK2lmZXEgKHksJChPUFRJT05fUE9TSVhfUkVHRVhQX0dMSUJDKSkKKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9SRUdFWFApICs9IHJlZ2V4CisrZWxzZQorK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX1JFR0VYUCkgKz0geHJlZ2V4CisrZW5kaWYKKysKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfU1BBV04pICs9CQkJCQkgICAgICBcCisgCXNwYXduX2ZhY3Rpb25faW5pdCBzcGF3bl9mYWN0aW9uX2Rlc3Ryb3kgc3Bhd25fZmFjdGlvbl9hZGRjbG9zZQkgICAgICBcCisgCXNwYXduX2ZhY3Rpb25fYWRkb3BlbiBzcGF3bl9mYWN0aW9uX2FkZGR1cDIJCQkgICAgICBcCisgCXNwYXduYXR0cl9pbml0IHNwYXduYXR0cl9kZXN0cm95CQkJCSAgICAgIFwKK0BAIC02MSwzNyArNzQsNTQgQEAgcm91dGluZXMgOj0JCQkJCQkJCSAgICAgIFwKKyAJcG9zaXhfbWFkdmlzZQkJCQkJCQkgICAgICBcCisgCWdldF9jaGlsZF9tYXggc2NoZWRfY3B1Y291bnQgc2NoZWRfY3B1YWxsb2Mgc2NoZWRfY3B1ZnJlZQorIAorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19XT1JERVhQKSArPSB3b3JkZXhwCisrCisgYXV4CQk6PSBpbml0LXBvc2l4IGVudmlyb24KKy10ZXN0cwkJOj0gdHN0Z2V0b3B0IHRlc3Rmbm0gcnVudGVzdHMgcnVucHRlc3RzCSAgICAgXAorK3Rlc3RzCQk6PSB0c3RnZXRvcHQgdGVzdGZubSBydW50ZXN0cyBcCisgCQkgICB0c3QtcHJlYWR3cml0ZSB0c3QtcHJlYWR3cml0ZTY0IHRlc3QtdmZvcmsgcmVnZXhidWcxIFwKKy0JCSAgIHRzdC1tbWFwIHRzdC1nZXRhZGRyaW5mbyB0c3QtdHJ1bmNhdGUgXAorLQkJICAgdHN0LXRydW5jYXRlNjQgdHN0LWZvcmsgdHN0LWZubWF0Y2ggdHN0LXJlZ2V4bG9jIHRzdC1kaXIgXAorLQkJICAgdHN0LWNobW9kIGJ1Zy1yZWdleDEgYnVnLXJlZ2V4MiBidWctcmVnZXgzIGJ1Zy1yZWdleDQgXAorLQkJICAgdHN0LWdudWdsb2IgdHN0LXJlZ2V4IGJ1Zy1yZWdleDUgYnVnLXJlZ2V4NiBidWctcmVnZXg3IFwKKy0JCSAgIGJ1Zy1yZWdleDggYnVnLXJlZ2V4OSBidWctcmVnZXgxMCBidWctcmVnZXgxMSBidWctcmVnZXgxMiBcCistCQkgICBidWctcmVnZXgxMyBidWctcmVnZXgxNCBidWctcmVnZXgxNSBidWctcmVnZXgxNiBcCistCQkgICBidWctcmVnZXgxNyBidWctcmVnZXgxOCBidWctcmVnZXgxOSBidWctcmVnZXgyMCBcCistCQkgICBidWctcmVnZXgyMSBidWctcmVnZXgyMiBidWctcmVnZXgyMyBidWctcmVnZXgyNCBcCistCQkgICBidWctcmVnZXgyNSBidWctcmVnZXgyNiBidWctcmVnZXgyNyBidWctcmVnZXgyOCBcCisrCQkgICB0c3QtbW1hcCB0c3QtdHJ1bmNhdGUgXAorKwkJICAgdHN0LXRydW5jYXRlNjQgdHN0LWZvcmsgdHN0LWRpciBcCisrCQkgICB0c3QtY2htb2QgYnVnLXJlZ2V4MiBidWctcmVnZXgzIGJ1Zy1yZWdleDQgXAorKwkJICAgdHN0LWdudWdsb2IgYnVnLXJlZ2V4NiBidWctcmVnZXg3IFwKKysJCSAgIGJ1Zy1yZWdleDggYnVnLXJlZ2V4OSBidWctcmVnZXgxMCBidWctcmVnZXgxMiBcCisrCQkgICBidWctcmVnZXgxNCBidWctcmVnZXgxNSBcCisrCQkgICBidWctcmVnZXgyMSBidWctcmVnZXgyNCBcCisrCQkgICBidWctcmVnZXgyNyBidWctcmVnZXgyOCBcCisgCQkgICBidWctcmVnZXgyOSBidWctcmVnZXgzMCBidWctcmVnZXgzMSBidWctcmVnZXgzMiBcCistCQkgICBidWctcmVnZXgzMyB0c3QtbmljZSB0c3QtbmFub3NsZWVwIHRzdC1yZWdleDIgXAorLQkJICAgdHJhbnNidWcgdHN0LXJ4c3BlbmNlciB0c3QtcGNyZSB0c3QtYm9vc3QgXAorLQkJICAgYnVnLWdhMSB0c3QtdmZvcmsxIHRzdC12Zm9yazIgdHN0LXZmb3JrMyB0c3Qtd2FpdGlkIFwKKy0JCSAgIHRzdC1nZXRhZGRyaW5mbzIgYnVnLWdsb2IxIGJ1Zy1nbG9iMiBidWctZ2xvYjMgdHN0LXN5c2NvbmYgXAorKwkJICAgdHN0LW5pY2UgdHN0LW5hbm9zbGVlcCBcCisrCQkgICB0cmFuc2J1ZyBcCisrCQkgICB0c3QtdmZvcmsxIHRzdC12Zm9yazIgdHN0LXZmb3JrMyB0c3Qtd2FpdGlkIFwKKysJCSAgIGJ1Zy1nbG9iMSBidWctZ2xvYjIgYnVnLWdsb2IzIHRzdC1zeXNjb25mIFwKKyAJCSAgIHRzdC1leGVjdnAxIHRzdC1leGVjdnAyIHRzdC1leGVjbHAxIHRzdC1leGVjbHAyIFwKKyAJCSAgIHRzdC1leGVjdjEgdHN0LWV4ZWN2MiB0c3QtZXhlY2wxIHRzdC1leGVjbDIgXAorIAkJICAgdHN0LWV4ZWN2ZTEgdHN0LWV4ZWN2ZTIgdHN0LWV4ZWNsZTEgdHN0LWV4ZWNsZTIgXAorLQkJICAgdHN0LWV4ZWN2cDMgdHN0LWV4ZWN2cDQgdHN0LXJmYzM0ODQgdHN0LXJmYzM0ODQtMiBcCistCQkgICB0c3QtcmZjMzQ4NC0zIFwKKy0JCSAgIHRzdC1nZXRhZGRyaW5mbzMgdHN0LWZubWF0Y2gyIHRzdC1jcHVjb3VudCB0c3QtY3B1c2V0IFwKKysJCSAgIHRzdC1leGVjdnAzIHRzdC1leGVjdnA0IFwKKysJCSAgIHRzdC1mbm1hdGNoMiB0c3QtY3B1Y291bnQgdHN0LWNwdXNldCBcCisgCQkgICBidWctZ2V0b3B0MSBidWctZ2V0b3B0MiBidWctZ2V0b3B0MyBidWctZ2V0b3B0NCBcCisgCQkgICBidWctZ2V0b3B0NSB0c3QtZ2V0b3B0X2xvbmcxIGJ1Zy1yZWdleDM0IGJ1Zy1yZWdleDM1IFwKKyAJCSAgIHRzdC1wYXRoY29uZiB0c3QtZ2V0YWRkcmluZm80IHRzdC1yeHNwZW5jZXItbm8tdXRmOCBcCisgCQkgICB0c3QtZm5tYXRjaDMgYnVnLXJlZ2V4MzYgdHN0LWdldGFkZHJpbmZvNQorLXh0ZXN0cwkJOj0gYnVnLWdhMgorKworK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgXAorKwkJKz0gdHN0LWZubWF0Y2ggdHN0LXJlZ2V4bG9jIGJ1Zy1yZWdleDEgYnVnLXJlZ2V4NSBcCisrCQkgICBidWctcmVnZXgyMyBidWctcmVnZXgyNSBidWctcmVnZXgzMiBidWctcmVnZXgzMworK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSBcCisrCQkrPSB0c3QtZ2V0YWRkcmluZm8gYnVnLWdhMSB0c3QtZ2V0YWRkcmluZm8yIFwKKysJCSAgIHRzdC1yZmMzNDg0IHRzdC1yZmMzNDg0LTIgdHN0LXJmYzM0ODQtMyB0c3QtZ2V0YWRkcmluZm8zCisrdGVzdHMtJChPUFRJT05fUE9TSVhfUkVHRVhQX0dMSUJDKSBcCisrCQkrPSBydW5wdGVzdHMgYnVnLXJlZ2V4MTEgYnVnLXJlZ2V4MTMgYnVnLXJlZ2V4MTYgXAorKwkJICAgdHN0LXJlZ2V4MiB0c3QtcnhzcGVuY2VyIHRzdC1wY3JlIHRzdC1ib29zdAorK2lmZXEgKHl5LCQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkkKE9QVElPTl9QT1NJWF9SRUdFWFBfR0xJQkMpKQorK3Rlc3RzCQkrPSB0c3QtcmVnZXggYnVnLXJlZ2V4MTcgYnVnLXJlZ2V4MTggYnVnLXJlZ2V4MTkgYnVnLXJlZ2V4MjAgXAorKwkJICAgYnVnLXJlZ2V4MjIgYnVnLXJlZ2V4MjYKKytlbmRpZgorK3h0ZXN0cy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gYnVnLWdhMgorKworIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgdGVzdC1zcmNzCTo9IGdsb2J0ZXN0CistdGVzdHMgICAgICAgICAgICs9IHdvcmRleHAtdGVzdCB0c3QtZXhlYyB0c3Qtc3Bhd24KKyt0ZXN0cwkJKz0gdHN0LWV4ZWMKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfU1BBV04pICs9IHRzdC1zcGF3bgorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19XT1JERVhQKSArPSB3b3JkZXhwLXRlc3QKKyBlbmRpZgorIHRlc3RzLXN0YXRpYwk9IHRzdC1leGVjLXN0YXRpYyB0c3Qtc3Bhd24tc3RhdGljCisgdGVzdHMJCSs9ICQodGVzdHMtc3RhdGljKQorQEAgLTExNyw3ICsxNDcsMTAgQEAgZ2VuZXJhdGVkICs9ICQoYWRkcHJlZml4IHdvcmRleHAtdGVzdC1yZXN1bHQsIDEgMiAzIDQgNSA2IDcgOCA5IDEwKSBcCisgCisgaWZlcSAoJChydW4tYnVpbHQtdGVzdHMpLHllcykKKyBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorLXRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpZ2xvYnRlc3Qub3V0ICQob2JqcGZ4KXdvcmRleHAtdHN0Lm91dAorK3Rlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpZ2xvYnRlc3Qub3V0CisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfV09SREVYUCkpCisrdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeCl3b3JkZXhwLXRzdC5vdXQKKytlbmRpZgorIGVuZGlmCisgZW5kaWYKKyAKK0BAIC0xMjUsMTIgKzE1OCwxNiBAQCBlbmRpZgorICMgWFhYIFBsZWFzZSBub3RlIHRoYXQgZm9yIG5vdyB3ZSBpZ25vcmUgdGhlIHJlc3VsdCBvZiB0aGlzIHRlc3QuCisgdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeClhbm5leGMub3V0CisgaWZlcSAoJChydW4tYnVpbHQtdGVzdHMpLHllcykKKy10ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KWJ1Zy1yZWdleDItbWVtLm91dCAkKG9ianBmeClidWctcmVnZXgxNC1tZW0ub3V0IFwKKyt0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KWJ1Zy1yZWdleDItbWVtLm91dCBcCisgCQkgJChvYmpwZngpYnVnLXJlZ2V4MjEtbWVtLm91dCAkKG9ianBmeClidWctcmVnZXgzMS1tZW0ub3V0IFwKKy0JCSAkKG9ianBmeCl0c3QtcnhzcGVuY2VyLW5vLXV0ZjgtbWVtLm91dCAkKG9ianBmeCl0c3QtcGNyZS1tZW0ub3V0IFwKKy0JCSAkKG9ianBmeCl0c3QtYm9vc3QtbWVtLm91dCAkKG9ianBmeCl0c3QtZ2V0Y29uZi5vdXQgXAorKwkJICQob2JqcGZ4KXRzdC1nZXRjb25mLm91dCBcCisgCQkgJChvYmpwZngpYnVnLWdsb2IyLW1lbS5vdXQgJChvYmpwZngpdHN0LXZmb3JrMy1tZW0ub3V0IFwKKyAJCSAkKG9ianBmeCl0c3QtZm5tYXRjaC1tZW0ub3V0ICQob2JqcGZ4KWJ1Zy1yZWdleDM2LW1lbS5vdXQKKytpZmVxICh5LCQoT1BUSU9OX1BPU0lYX1JFR0VYUF9HTElCQykpCisrdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeClidWctcmVnZXgxNC1tZW0ub3V0ICQob2JqcGZ4KXRzdC1yeHNwZW5jZXItbm8tdXRmOC1tZW0ub3V0IFwKKysgIAkJICQob2JqcGZ4KXRzdC1wY3JlLW1lbS5vdXQgJChvYmpwZngpdHN0LWJvb3N0LW1lbS5vdXQKKytlbmRpZgorKworIHh0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KWJ1Zy1nYTItbWVtLm91dAorIGVuZGlmCisgCitAQCAtMTQzLDYgKzE4MCw4IEBAICQob2JqcGZ4KWdsb2J0ZXN0Lm91dDogZ2xvYnRlc3Quc2ggJChvYmpwZngpZ2xvYnRlc3QKKyAJJChTSEVMTCkgJDwgJChjb21tb24tb2JqcGZ4KSAnJCh0ZXN0LXZpYS1ydGxkLXByZWZpeCknIFwKKyAJCSckKHRlc3QtcHJvZ3JhbS1wcmVmaXgpJyAnJCh0ZXN0LXdyYXBwZXItZW52KSc7IFwKKyAJJChldmFsdWF0ZS10ZXN0KQorK0xETElCUy1nbG9idGVzdCArPSAkKHNoZWxsIGNhdCAkKGNvbW1vbi1vYmpwZngpbnNzL2ZpeGVkLW5zc3dpdGNoLWxpYnMpCisrCisgJChvYmpwZngpd29yZGV4cC10c3Qub3V0OiB3b3JkZXhwLXRzdC5zaCAkKG9ianBmeCl3b3JkZXhwLXRlc3QKKyAJJChTSEVMTCkgJDwgJChjb21tb24tb2JqcGZ4KSAnJCh0ZXN0LXByb2dyYW0tcHJlZml4LWJlZm9yZS1lbnYpJyBcCisgCQkgJyQocnVuLXByb2dyYW0tZW52KScgJyQodGVzdC1wcm9ncmFtLXByZWZpeC1hZnRlci1lbnYpJzsgXAorQEAgLTIwNSw3ICsyNDQsMTAgQEAgdHN0LWRpci1BUkdTID0gYHB3ZGAgYGNkICQoY29tbW9uLW9iamRpcikvJChzdWJkaXIpOyBwd2RgIGBjZCAkKGNvbW1vbi1vYmpkaXIpOworIHRzdC1jaG1vZC1BUkdTID0gJChvYmpkaXIpCisgdHN0LXZmb3JrMy1BUkdTID0gLS10ZXN0LWRpcj0kKG9ianBmeCkKKyAKKy10c3QtcnhzcGVuY2VyLUFSR1MgPSAtLXV0ZjggcnhzcGVuY2VyL3Rlc3RzCisrdHN0LXJ4c3BlbmNlci1BUkdTID0gcnhzcGVuY2VyL3Rlc3RzCisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpKQorK3RzdC1yeHNwZW5jZXItQVJHUyArPSAtLXV0ZjgKKytlbmRpZgorIHRzdC1yeHNwZW5jZXItbm8tdXRmOC1BUkdTID0gcnhzcGVuY2VyL3Rlc3RzCisgdHN0LXBjcmUtQVJHUyA9IFBDUkUudGVzdHMKKyB0c3QtYm9vc3QtQVJHUyA9IEJPT1NULnRlc3RzCitkaWZmIC0tZ2l0IGEvcG9zaXgvYnVnLXJlZ2V4MS5jIGIvcG9zaXgvYnVnLXJlZ2V4MS5jCitpbmRleCAzOGViNTQzLi4xN2NkMWEwIDEwMDY0NAorLS0tIGEvcG9zaXgvYnVnLXJlZ2V4MS5jCisrKysgYi9wb3NpeC9idWctcmVnZXgxLmMKK0BAIC00LDYgKzQsNyBAQAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8cmVnZXguaD4KKyAjaW5jbHVkZSA8d2NoYXIuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyBpbnQKKyBtYWluICh2b2lkKQorQEAgLTE3LDcgKzE4LDkgQEAgbWFpbiAodm9pZCkKKyAgIG1lbXNldCAoJnJlZ2V4LCAnXDAnLCBzaXplb2YgKHJlZ2V4KSk7CisgCisgICBzZXRsb2NhbGUgKExDX0FMTCwgImRlX0RFLklTTy04ODU5LTEiKTsKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworICAgZndpZGUgKHN0ZG91dCwgLTEpOworKyNlbmRpZgorIAorICAgcmVfc2V0X3N5bnRheCAoUkVfU1lOVEFYX1BPU0lYX0VHUkVQIHwgUkVfREVCVUcpOworIAorZGlmZiAtLWdpdCBhL3Bvc2l4L2J1Zy1yZWdleDYuYyBiL3Bvc2l4L2J1Zy1yZWdleDYuYworaW5kZXggZWZjYzg5MC4uM2IyNzBjNyAxMDA2NDQKKy0tLSBhL3Bvc2l4L2J1Zy1yZWdleDYuYworKysrIGIvcG9zaXgvYnVnLXJlZ2V4Ni5jCitAQCAtMjIsNiArMjIsNyBAQAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHJlZ2V4Lmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgCisgaW50CitAQCAtMzAsNyArMzEsMTIgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgIHJlZ2V4X3QgcmU7CisgICByZWdtYXRjaF90IG1hdFsxMF07CisgICBpbnQgaSwgaiwgcmV0ID0gMDsKKy0gIGNvbnN0IGNoYXIgKmxvY2FsZXNbXSA9IHsgIkMiLCAiZGVfREUuVVRGLTgiIH07CisrICBjb25zdCBjaGFyICpsb2NhbGVzW10gPSB7CisrICAgICJDIiwKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrICAgICJkZV9ERS5VVEYtOCIKKysjZW5kaWYKKysgIH07CisgICBjb25zdCBjaGFyICpzdHJpbmcgPSAiaHR0cDovL3d3dy5yZWdleC5jb20vcGF0dGVybi9tYXRjaGluZy5odG1sI2ludHJvIjsKKyAgIHJlZ21hdGNoX3QgZXhwZWN0WzEwXSA9IHsKKyAgICAgeyAwLCA0OCB9LCB7IDAsIDUgfSwgeyAwLCA0IH0sIHsgNSwgMjAgfSwgeyA3LCAyMCB9LCB7IDIwLCA0MiB9LAorZGlmZiAtLWdpdCBhL3Bvc2l4L2ZubWF0Y2guYyBiL3Bvc2l4L2ZubWF0Y2guYworaW5kZXggZmQ4NWVmYS4uMDFjYzlmZSAxMDA2NDQKKy0tLSBhL3Bvc2l4L2ZubWF0Y2guYworKysrIGIvcG9zaXgvZm5tYXRjaC5jCitAQCAtMzAsNiArMzAsMTAgQEAKKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgCisrI2lmIGRlZmluZWQgX0xJQkMKKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisrI2VuZGlmCisrCisgI2lmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgX0xJQkMKKyAjIGluY2x1ZGUgPHN0ZGxpYi5oPgorICNlbmRpZgorQEAgLTEzMSw3ICsxMzUsNyBAQCBleHRlcm4gaW50IGZubWF0Y2ggKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGZsYWdzKTsKKyAjICAgZGVmaW5lIElTV0NUWVBFKFdDLCBXVCkJaXN3Y3R5cGUgKFdDLCBXVCkKKyAjICBlbmRpZgorIAorLSMgIGlmIChIQVZFX01CU1RBVEVfVCAmJiBIQVZFX01CU1JUT1dDUykgfHwgX0xJQkMKKysjICBpZiAoSEFWRV9NQlNUQVRFX1QgJiYgSEFWRV9NQlNSVE9XQ1MgJiYgX0xJQkMgJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKQorIC8qIEluIHRoaXMgY2FzZSB3ZSBhcmUgaW1wbGVtZW50aW5nIHRoZSBtdWx0aWJ5dGUgY2hhcmFjdGVyIGhhbmRsaW5nLiAgKi8KKyAjICAgZGVmaW5lIEhBTkRMRV9NVUxUSUJZVEUJMQorICMgIGVuZGlmCitkaWZmIC0tZ2l0IGEvcG9zaXgvZm5tYXRjaF9sb29wLmMgYi9wb3NpeC9mbm1hdGNoX2xvb3AuYworaW5kZXggZjQ2YzlkZi4uNzRlMTc1NCAxMDA2NDQKKy0tLSBhL3Bvc2l4L2ZubWF0Y2hfbG9vcC5jCisrKysgYi9wb3NpeC9mbm1hdGNoX2xvb3AuYworQEAgLTE1LDYgKzE1LDggQEAKKyAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgc2VlCisgICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKysKKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgCisgc3RydWN0IFNUUlVDVAorQEAgLTU0LDEwICs1NiwxNSBAQCBGQ1QgKHBhdHRlcm4sIHN0cmluZywgc3RyaW5nX2VuZCwgbm9fbGVhZGluZ19wZXJpb2QsIGZsYWdzLCBlbmRzLCBhbGxvY2FfdXNlZCkKKyAgIGNvbnN0IGNoYXIgKmNvbGxzZXEgPSAoY29uc3QgY2hhciAqKQorICAgICBfTkxfQ1VSUkVOVChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9DT0xMU0VRV0MpOworICMgZWxzZQorKyMgIGlmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgY29uc3QgVUNIQVIgKmNvbGxzZXEgPSAoY29uc3QgVUNIQVIgKikKKyAgICAgX05MX0NVUlJFTlQoTENfQ09MTEFURSwgX05MX0NPTExBVEVfQ09MTFNFUU1CKTsKKy0jIGVuZGlmCistI2VuZGlmCisrIyAgIGRlZmluZSBDT0xMU0VRX0JZVEVfTE9PS1VQKGl4KSAoY29sbHNlcVsoaXgpXSkKKysjICBlbHNlCisrIyAgIGRlZmluZSBDT0xMU0VRX0JZVEVfTE9PS1VQKGl4KSAoaXgpCisrIyAgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisrIyBlbmRpZiAvKiBXSURFX0NIQVJfVkVSU0lPTiAqLworKyNlbmRpZiAvKiBfTElCQyAqLworIAorICAgd2hpbGUgKChjID0gKnArKykgIT0gTCgnXDAnKSkKKyAgICAgeworQEAgLTI3Nyw3ICsyODQsNyBAQCBGQ1QgKHBhdHRlcm4sIHN0cmluZywgc3RyaW5nX2VuZCwgbm9fbGVhZGluZ19wZXJpb2QsIGZsYWdzLCBlbmRzLCBhbGxvY2FfdXNlZCkKKyAJCSAgICAvKiBMZWF2ZSByb29tIGZvciB0aGUgbnVsbC4gICovCisgCQkgICAgQ0hBUiBzdHJbQ0hBUl9DTEFTU19NQVhfTEVOR1RIICsgMV07CisgCQkgICAgc2l6ZV90IGMxID0gMDsKKy0jaWYgZGVmaW5lZCBfTElCQyB8fCAoZGVmaW5lZCBIQVZFX1dDVFlQRV9IICYmIGRlZmluZWQgSEFWRV9XQ0hBUl9IKQorKyNpZiBkZWZpbmVkIF9MSUJDID8gX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiA6IChkZWZpbmVkIEhBVkVfV0NUWVBFX0ggJiYgZGVmaW5lZCBIQVZFX1dDSEFSX0gpCisgCQkgICAgd2N0eXBlX3Qgd3Q7CisgI2VuZGlmCisgCQkgICAgY29uc3QgQ0hBUiAqc3RhcnRwID0gcDsKK0BAIC0zMDcsNyArMzE0LDcgQEAgRkNUIChwYXR0ZXJuLCBzdHJpbmcsIHN0cmluZ19lbmQsIG5vX2xlYWRpbmdfcGVyaW9kLCBmbGFncywgZW5kcywgYWxsb2NhX3VzZWQpCisgCQkgICAgICB9CisgCQkgICAgc3RyW2MxXSA9IEwoJ1wwJyk7CisgCistI2lmIGRlZmluZWQgX0xJQkMgfHwgKGRlZmluZWQgSEFWRV9XQ1RZUEVfSCAmJiBkZWZpbmVkIEhBVkVfV0NIQVJfSCkKKysjaWYgZGVmaW5lZCBfTElCQyA/IF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgOiAoZGVmaW5lZCBIQVZFX1dDVFlQRV9IICYmIGRlZmluZWQgSEFWRV9XQ0hBUl9IKQorIAkJICAgIHd0ID0gSVNfQ0hBUl9DTEFTUyAoc3RyKTsKKyAJCSAgICBpZiAod3QgPT0gMCkKKyAJCSAgICAgIC8qIEludmFsaWQgY2hhcmFjdGVyIGNsYXNzIG5hbWUuICAqLworQEAgLTY4MCw4ICs2ODcsMTAgQEAgRkNUIChwYXR0ZXJuLCBzdHJpbmcsIHN0cmluZ19lbmQsIG5vX2xlYWRpbmdfcGVyaW9kLCBmbGFncywgZW5kcywgYWxsb2NhX3VzZWQpCisgCQkJZWxzZQorIAkJCSAgbGNvbGxzZXEgPSBfX2NvbGxzZXFfdGFibGVfbG9va3VwIChjb2xsc2VxLCBjb2xkKTsKKyAjIGVsc2UKKy0JCQlmY29sbHNlcSA9IGNvbGxzZXFbZm5dOworLQkJCWxjb2xsc2VxID0gaXNfc2VxdmFsID8gY29sZCA6IGNvbGxzZXFbKFVDSEFSKSBjb2xkXTsKKysJCQlmY29sbHNlcSA9IENPTExTRVFfQllURV9MT09LVVAgKGZuKTsKKysJCQlsY29sbHNlcSA9IChpc19zZXF2YWwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNvbGQKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENPTExTRVFfQllURV9MT09LVVAgKChVQ0hBUikgY29sZCkpOworICMgZW5kaWYKKyAKKyAJCQlpc19zZXF2YWwgPSAwOworQEAgLTg1Nyw3ICs4NjYsNyBAQCBGQ1QgKHBhdHRlcm4sIHN0cmluZywgc3RyaW5nX2VuZCwgbm9fbGVhZGluZ19wZXJpb2QsIGZsYWdzLCBlbmRzLCBhbGxvY2FfdXNlZCkKKyAJCQkJICAgIGdvdG8gbWF0Y2hlZDsKKyAJCQkJICB9CisgIyBlbHNlCistCQkJCWhjb2xsc2VxID0gY29sbHNlcVtjZW5kXTsKKysJCQkJaGNvbGxzZXEgPSBDT0xMU0VRX0JZVEVfTE9PS1VQIChjZW5kKTsKKyAjIGVuZGlmCisgCQkJICAgICAgfQorIAorZGlmZiAtLWdpdCBhL3Bvc2l4L2dsb2IuYyBiL3Bvc2l4L2dsb2IuYworaW5kZXggZDY1ZTU1ZC4uMWFjMDBhMSAxMDA2NDQKKy0tLSBhL3Bvc2l4L2dsb2IuYworKysrIGIvcG9zaXgvZ2xvYi5jCitAQCAtMjUsNiArMjUsOSBAQAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAjaW5jbHVkZSA8c3RkZGVmLmg+CisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorKyNlbmRpZgorIAorIC8qIE91dGNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIGZvciBwcm9kdWN0aW9uIHF1YWxpdHkgY29kZS4gICovCisgLyogI2RlZmluZSBOREVCVUcgMSAqLworQEAgLTYwNyw2ICs2MTAsNyBAQCBnbG9iIChwYXR0ZXJuLCBmbGFncywgZXJyZnVuYywgcGdsb2IpCisgCSAgaWYgKGhvbWVfZGlyID09IE5VTEwgfHwgaG9tZV9kaXJbMF0gPT0gJ1wwJykKKyAJICAgIGhvbWVfZGlyID0gImM6L3VzZXJzL2RlZmF1bHQiOyAvKiBwb29yIGRlZmF1bHQgKi8KKyAjICBlbHNlCisrIyAgIGlmICEgX0xJQkMgfHwgX19PUFRJT05fRUdMSUJDX0dFVExPR0lOCisgCSAgaWYgKGhvbWVfZGlyID09IE5VTEwgfHwgaG9tZV9kaXJbMF0gPT0gJ1wwJykKKyAJICAgIHsKKyAJICAgICAgaW50IHN1Y2Nlc3M7CitAQCAtNjIzLDE5ICs2MjcsMTkgQEAgZ2xvYiAocGF0dGVybiwgZmxhZ3MsIGVycmZ1bmMsIHBnbG9iKQorIAkgICAgICBpZiAoc3VjY2VzcykKKyAJCXsKKyAJCSAgc3RydWN0IHBhc3N3ZCAqcDsKKy0jICAgaWYgZGVmaW5lZCBIQVZFX0dFVFBXTkFNX1IgfHwgZGVmaW5lZCBfTElCQworKyMgICAgaWYgZGVmaW5lZCBIQVZFX0dFVFBXTkFNX1IgfHwgZGVmaW5lZCBfTElCQworIAkJICBsb25nIGludCBwd2J1ZmxlbiA9IEdFVFBXX1JfU0laRV9NQVggKCk7CisgCQkgIGNoYXIgKnB3dG1wYnVmOworIAkJICBzdHJ1Y3QgcGFzc3dkIHB3YnVmOworIAkJICBpbnQgbWFsbG9jX3B3dG1wYnVmID0gMDsKKyAJCSAgaW50IHNhdmUgPSBlcnJubzsKKyAKKy0jICAgIGlmbmRlZiBfTElCQworKyMgICAgIGlmbmRlZiBfTElCQworIAkJICBpZiAocHdidWZsZW4gPT0gLTEpCisgCQkgICAgLyogYHN5c2NvbmYnIGRvZXMgbm90IHN1cHBvcnQgX1NDX0dFVFBXX1JfU0laRV9NQVguCisgCQkgICAgICAgVHJ5IGEgbW9kZXJhdGUgdmFsdWUuICAqLworIAkJICAgIHB3YnVmbGVuID0gMTAyNDsKKy0jICAgIGVuZGlmCisrIyAgICAgZW5kaWYKKyAJCSAgaWYgKF9fbGliY191c2VfYWxsb2NhIChhbGxvY2FfdXNlZCArIHB3YnVmbGVuKSkKKyAJCSAgICBwd3RtcGJ1ZiA9IGFsbG9jYV9hY2NvdW50IChwd2J1ZmxlbiwgYWxsb2NhX3VzZWQpOworIAkJICBlbHNlCitAQCAtNjgyLDkgKzY4Niw5IEBAIGdsb2IgKHBhdHRlcm4sIGZsYWdzLCBlcnJmdW5jLCBwZ2xvYikKKyAJCQl9CisgCQkgICAgICBfX3NldF9lcnJubyAoc2F2ZSk7CisgCQkgICAgfQorLSMgICBlbHNlCisrIyAgICBlbHNlCisgCQkgIHAgPSBnZXRwd25hbSAobmFtZSk7CistIyAgIGVuZGlmCisrIyAgICBlbmRpZgorIAkJICBpZiAocCAhPSBOVUxMKQorIAkJICAgIHsKKyAJCSAgICAgIGlmICghbWFsbG9jX3B3dG1wYnVmKQorQEAgLTcxMyw2ICs3MTcsNyBAQCBnbG9iIChwYXR0ZXJuLCBmbGFncywgZXJyZnVuYywgcGdsb2IpCisgCQkgICAgfQorIAkJfQorIAkgICAgfQorKyMgICBlbmRpZiAvKiAhIF9MSUJDIHx8IF9fT1BUSU9OX0VHTElCQ19HRVRMT0dJTiAqLworIAkgIGlmIChob21lX2RpciA9PSBOVUxMIHx8IGhvbWVfZGlyWzBdID09ICdcMCcpCisgCSAgICB7CisgCSAgICAgIGlmIChmbGFncyAmIEdMT0JfVElMREVfQ0hFQ0spCitkaWZmIC0tZ2l0IGEvcG9zaXgvcmVnY29tcC5jIGIvcG9zaXgvcmVnY29tcC5jCitpbmRleCBiZjhhYTE2Li42YTQxMjUxIDEwMDY0NAorLS0tIGEvcG9zaXgvcmVnY29tcC5jCisrKysgYi9wb3NpeC9yZWdjb21wLmMKK0BAIC0xOCw2ICsxOCw3IEBACisgICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2lmZGVmIF9MSUJDCisgIyBpbmNsdWRlIDxsb2NhbGUvd2VpZ2h0Lmg+CitAQCAtMzA5LDcgKzMxMCw3IEBAIHJlX2NvbXBpbGVfZmFzdG1hcF9pdGVyIChyZWdleF90ICpidWZwLCBjb25zdCByZV9kZmFzdGF0ZV90ICppbml0X3N0YXRlLAorIHsKKyAgIHJlX2RmYV90ICpkZmEgPSAocmVfZGZhX3QgKikgYnVmcC0+YnVmZmVyOworICAgaW50IG5vZGVfY250OworLSAgaW50IGljYXNlID0gKGRmYS0+bWJfY3VyX21heCA9PSAxICYmIChidWZwLT5zeW50YXggJiBSRV9JQ0FTRSkpOworKyAgaW50IGljYXNlID0gKGRmYV9tYl9jdXJfbWF4IChkZmEpID09IDEgJiYgKGJ1ZnAtPnN5bnRheCAmIFJFX0lDQVNFKSk7CisgICBmb3IgKG5vZGVfY250ID0gMDsgbm9kZV9jbnQgPCBpbml0X3N0YXRlLT5ub2Rlcy5uZWxlbTsgKytub2RlX2NudCkKKyAgICAgeworICAgICAgIGludCBub2RlID0gaW5pdF9zdGF0ZS0+bm9kZXMuZWxlbXNbbm9kZV9jbnRdOworQEAgLTMxOSw5ICszMjAsOSBAQCByZV9jb21waWxlX2Zhc3RtYXBfaXRlciAocmVnZXhfdCAqYnVmcCwgY29uc3QgcmVfZGZhc3RhdGVfdCAqaW5pdF9zdGF0ZSwKKyAJeworIAkgIHJlX3NldF9mYXN0bWFwIChmYXN0bWFwLCBpY2FzZSwgZGZhLT5ub2Rlc1tub2RlXS5vcHIuYyk7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistCSAgaWYgKChidWZwLT5zeW50YXggJiBSRV9JQ0FTRSkgJiYgZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysJICBpZiAoKGJ1ZnAtPnN5bnRheCAmIFJFX0lDQVNFKSAmJiBkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgCSAgICB7CistCSAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGFsbG9jYSAoZGZhLT5tYl9jdXJfbWF4KSwgKnA7CisrCSAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGFsbG9jYSAoZGZhX21iX2N1cl9tYXggKGRmYSkpLCAqcDsKKyAJICAgICAgd2NoYXJfdCB3YzsKKyAJICAgICAgbWJzdGF0ZV90IHN0YXRlOworIAorQEAgLTM1Miw3ICszNTMsMTEgQEAgcmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIgKHJlZ2V4X3QgKmJ1ZnAsIGNvbnN0IHJlX2RmYXN0YXRlX3QgKmluaXRfc3RhdGUsCisgCQkgIHJlX3NldF9mYXN0bWFwIChmYXN0bWFwLCBpY2FzZSwgY2gpOworIAkgICAgfQorIAl9CistI2lmZGVmIFJFX0VOQUJMRV9JMThOCisrCisrICAgICAgLyogV2hlbiBPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFIGlzIGRpc2FibGVkLCB0aGUgY3VycmVudAorKyAgICAgICAgIGxvY2FsZSBpcyBhbHdheXMgQywgd2hpY2ggaGFzIG5vIHJ1bGVzIGFuZCBubyBtdWx0aS1ieXRlCisrICAgICAgICAgY2hhcmFjdGVycy4gICovCisrI2lmIGRlZmluZWQgUkVfRU5BQkxFX0kxOE4gJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICAgICAgZWxzZSBpZiAodHlwZSA9PSBDT01QTEVYX0JSQUNLRVQpCisgCXsKKyAJICByZV9jaGFyc2V0X3QgKmNzZXQgPSBkZmEtPm5vZGVzW25vZGVdLm9wci5tYmNzZXQ7CitAQCAtMzgwLDcgKzM4NSw3IEBAIHJlX2NvbXBpbGVfZmFzdG1hcF9pdGVyIChyZWdleF90ICpidWZwLCBjb25zdCByZV9kZmFzdGF0ZV90ICppbml0X3N0YXRlLAorIAkgICAgIGkuZS4gd2hlcmUgd2Ugd291bGQgbm90IGZpbmQgYW4gaW52YWxpZCBzZXF1ZW5jZS4gIFRoaXMgb25seQorIAkgICAgIGFwcGxpZXMgdG8gbXVsdGlieXRlIGNoYXJhY3RlciBzZXRzOyBmb3Igc2luZ2xlIGJ5dGUgY2hhcmFjdGVyCisgCSAgICAgc2V0cywgdGhlIFNJTVBMRV9CUkFDS0VUIGFnYWluIHN1ZmZpY2VzLiAgKi8KKy0JICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMQorKwkgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEKKyAJICAgICAgJiYgKGNzZXQtPm5jaGFyX2NsYXNzZXMgfHwgY3NldC0+bm9uX21hdGNoIHx8IGNzZXQtPm5yYW5nZXMKKyAjIGlmZGVmIF9MSUJDCisgCQkgIHx8IGNzZXQtPm5lcXVpdl9jbGFzc2VzCitAQCAtNDA4LDcgKzQxMyw3IEBAIHJlX2NvbXBpbGVfZmFzdG1hcF9pdGVyIChyZWdleF90ICpidWZwLCBjb25zdCByZV9kZmFzdGF0ZV90ICppbml0X3N0YXRlLAorIAkJICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChzdGF0ZSkpOworIAkJICBpZiAoX193Y3J0b21iIChidWYsIGNzZXQtPm1iY2hhcnNbaV0sICZzdGF0ZSkgIT0gKHNpemVfdCkgLTEpCisgCQkgICAgcmVfc2V0X2Zhc3RtYXAgKGZhc3RtYXAsIGljYXNlLCAqKHVuc2lnbmVkIGNoYXIgKikgYnVmKTsKKy0JCSAgaWYgKChidWZwLT5zeW50YXggJiBSRV9JQ0FTRSkgJiYgZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysJCSAgaWYgKChidWZwLT5zeW50YXggJiBSRV9JQ0FTRSkgJiYgZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorIAkJICAgIHsKKyAJCSAgICAgIGlmIChfX3djcnRvbWIgKGJ1ZiwgX190b3dsb3dlciAoY3NldC0+bWJjaGFyc1tpXSksICZzdGF0ZSkKKyAJCQkgICE9IChzaXplX3QpIC0xKQorQEAgLTQxNyw3ICs0MjIsNyBAQCByZV9jb21waWxlX2Zhc3RtYXBfaXRlciAocmVnZXhfdCAqYnVmcCwgY29uc3QgcmVfZGZhc3RhdGVfdCAqaW5pdF9zdGF0ZSwKKyAJCX0KKyAJICAgIH0KKyAJfQorLSNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKyAgICAgICBlbHNlIGlmICh0eXBlID09IE9QX1BFUklPRAorICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorIAkgICAgICAgfHwgdHlwZSA9PSBPUF9VVEY4X1BFUklPRAorQEAgLTg2MCwxMSArODY1LDE1IEBAIGluaXRfZGZhIChyZV9kZmFfdCAqZGZhLCBzaXplX3QgcGF0X2xlbikKKyAKKyAgIGRmYS0+bWJfY3VyX21heCA9IE1CX0NVUl9NQVg7CisgI2lmZGVmIF9MSUJDCistICBpZiAoZGZhLT5tYl9jdXJfbWF4ID09IDYKKysgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA9PSA2CisgICAgICAgJiYgc3RyY21wIChfTkxfQ1VSUkVOVCAoTENfQ1RZUEUsIF9OTF9DVFlQRV9DT0RFU0VUX05BTUUpLCAiVVRGLTgiKSA9PSAwKQorICAgICBkZmEtPmlzX3V0ZjggPSAxOworKyMgaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBkZmEtPm1hcF9ub3Rhc2NpaSA9IChfTkxfQ1VSUkVOVF9XT1JEIChMQ19DVFlQRSwgX05MX0NUWVBFX01BUF9UT19OT05BU0NJSSkKKyAJCSAgICAgICAhPSAwKTsKKysjIGVsc2UKKysgIGRmYS0+bWFwX25vdGFzY2lpID0gMDsKKysjIGVuZGlmCisgI2Vsc2UKKyAjIGlmZGVmIEhBVkVfTEFOR0lORk9fQ09ERVNFVAorICAgY29kZXNldF9uYW1lID0gbmxfbGFuZ2luZm8gKENPREVTRVQpOworQEAgLTg5MCw3ICs4OTksNyBAQCBpbml0X2RmYSAocmVfZGZhX3QgKmRmYSwgc2l6ZV90IHBhdF9sZW4pCisgI2VuZGlmCisgCisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgICAgIHsKKyAgICAgICBpZiAoZGZhLT5pc191dGY4KQorIAlkZmEtPnNiX2NoYXIgPSAocmVfYml0c2V0X3B0cl90KSB1dGY4X3NiX21hcDsKK0BAIC0xNzg4LDcgKzE3OTcsNyBAQCBwZWVrX3Rva2VuIChyZV90b2tlbl90ICp0b2tlbiwgcmVfc3RyaW5nX3QgKmlucHV0LCByZWdfc3ludGF4X3Qgc3ludGF4KQorICAgdG9rZW4tPndvcmRfY2hhciA9IDA7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICB0b2tlbi0+bWJfcGFydGlhbCA9IDA7CistICBpZiAoaW5wdXQtPm1iX2N1cl9tYXggPiAxICYmCisrICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKGlucHV0KSA+IDEgJiYKKyAgICAgICAhcmVfc3RyaW5nX2ZpcnN0X2J5dGUgKGlucHV0LCByZV9zdHJpbmdfY3VyX2lkeCAoaW5wdXQpKSkKKyAgICAgeworICAgICAgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworQEAgLTE4MDksNyArMTgxOCw3IEBAIHBlZWtfdG9rZW4gKHJlX3Rva2VuX3QgKnRva2VuLCByZV9zdHJpbmdfdCAqaW5wdXQsIHJlZ19zeW50YXhfdCBzeW50YXgpCisgICAgICAgdG9rZW4tPm9wci5jID0gYzI7CisgICAgICAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICAgICAgaWYgKGlucHV0LT5tYl9jdXJfbWF4ID4gMSkKKysgICAgICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKGlucHV0KSA+IDEpCisgCXsKKyAJICB3aW50X3Qgd2MgPSByZV9zdHJpbmdfd2NoYXJfYXQgKGlucHV0LAorIAkJCQkJICByZV9zdHJpbmdfY3VyX2lkeCAoaW5wdXQpICsgMSk7CitAQCAtMTkyMyw3ICsxOTMyLDcgQEAgcGVla190b2tlbiAocmVfdG9rZW5fdCAqdG9rZW4sIHJlX3N0cmluZ190ICppbnB1dCwgcmVnX3N5bnRheF90IHN5bnRheCkKKyAKKyAgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgaWYgKGlucHV0LT5tYl9jdXJfbWF4ID4gMSkKKysgIGlmIChzdHJpbmdfbWJfY3VyX21heCAoaW5wdXQpID4gMSkKKyAgICAgeworICAgICAgIHdpbnRfdCB3YyA9IHJlX3N0cmluZ193Y2hhcl9hdCAoaW5wdXQsIHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkpOworICAgICAgIHRva2VuLT53b3JkX2NoYXIgPSBJU19XSURFX1dPUkRfQ0hBUiAod2MpICE9IDA7CitAQCAtMjAyMyw3ICsyMDMyLDcgQEAgcGVla190b2tlbl9icmFja2V0IChyZV90b2tlbl90ICp0b2tlbiwgcmVfc3RyaW5nX3QgKmlucHV0LCByZWdfc3ludGF4X3Qgc3ludGF4KQorICAgdG9rZW4tPm9wci5jID0gYzsKKyAKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gIGlmIChpbnB1dC0+bWJfY3VyX21heCA+IDEgJiYKKysgIGlmIChzdHJpbmdfbWJfY3VyX21heCAoaW5wdXQpID4gMSAmJgorICAgICAgICFyZV9zdHJpbmdfZmlyc3RfYnl0ZSAoaW5wdXQsIHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkpKQorICAgICB7CisgICAgICAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CitAQCAtMjI0Niw3ICsyMjU1LDcgQEAgcGFyc2VfZXhwcmVzc2lvbiAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVnZXhfdCAqcHJlZywgcmVfdG9rZW5fdCAqdG9rZW4sCisgCSAgcmV0dXJuIE5VTEw7CisgCX0KKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gICAgICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysgICAgICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorIAl7CisgCSAgd2hpbGUgKCFyZV9zdHJpbmdfZW9pIChyZWdleHApCisgCQkgJiYgIXJlX3N0cmluZ19maXJzdF9ieXRlIChyZWdleHAsIHJlX3N0cmluZ19jdXJfaWR4IChyZWdleHApKSkKK0BAIC0yMzg0LDcgKzIzOTMsNyBAQCBwYXJzZV9leHByZXNzaW9uIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZWdleF90ICpwcmVnLCByZV90b2tlbl90ICp0b2tlbiwKKyAJICAqZXJyID0gUkVHX0VTUEFDRTsKKyAJICByZXR1cm4gTlVMTDsKKyAJfQorLSAgICAgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorKyAgICAgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgCWRmYS0+aGFzX21iX25vZGUgPSAxOworICAgICAgIGJyZWFrOworICAgICBjYXNlIE9QX1dPUkQ6CitAQCAtMjY5MCw3ICsyNjk5LDcgQEAgYnVpbGRfcmFuZ2VfZXhwIChiaXRzZXRfdCBzYmNzZXQsIGJyYWNrZXRfZWxlbV90ICpzdGFydF9lbGVtLAorICAgICAgICBIb3dldmVyLCBmb3IgIV9MSUJDIHdlIGhhdmUgbm8gY29sbGF0aW9uIGVsZW1lbnRzOiBpZiB0aGUKKyAgICAgICAgY2hhcmFjdGVyIHNldCBpcyBzaW5nbGUgYnl0ZSwgdGhlIHNpbmdsZSBieXRlIGNoYXJhY3RlciBzZXQKKyAgICAgICAgdGhhdCB3ZSBidWlsZCBiZWxvdyBzdWZmaWNlcy4gIHBhcnNlX2JyYWNrZXRfZXhwIHBhc3NlcworLSAgICAgICBubyBNQkNTRVQgaWYgZGZhLT5tYl9jdXJfbWF4ID09IDEuICAqLworKyAgICAgICBubyBNQkNTRVQgaWYgZGZhX21iX2N1cl9tYXggKGRmYSkgPT0gMS4gICovCisgICAgIGlmIChtYmNzZXQpCisgICAgICAgeworIAkvKiBDaGVjayB0aGUgc3BhY2Ugb2YgdGhlIGFycmF5cy4gICovCitAQCAtMjc4Niw3ICsyNzk1LDEzIEBAIHBhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKyAJCSAgIHJlZ19zeW50YXhfdCBzeW50YXgsIHJlZ19lcnJjb2RlX3QgKmVycikKKyB7CisgI2lmZGVmIF9MSUJDCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgY29uc3QgdW5zaWduZWQgY2hhciAqY29sbHNlcW1iOworKyMgZGVmaW5lIENPTExTRVFNQl9MT09LVVAoaXgpIChjb2xsc2VxbWJbKGl4KV0pCisrI2Vsc2UKKysjIGRlZmluZSBDT0xMU0VRTUJfTE9PS1VQKGl4KSAoaXgpCisrI2VuZGlmCisrCisgICBjb25zdCBjaGFyICpjb2xsc2Vxd2M7CisgICB1aW50MzJfdCBucnVsZXM7CisgICBpbnQzMl90IHRhYmxlX3NpemU7CitAQCAtMjgzNCwxOCArMjg0OSwyMCBAQCBwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisgCSAgaWYgKE1CX0NVUl9NQVggPT0gMSkKKyAJICAqLworIAkgIGlmIChucnVsZXMgPT0gMCkKKy0JICAgIHJldHVybiBjb2xsc2VxbWJbYnJfZWxlbS0+b3ByLmNoXTsKKysJICAgIHJldHVybiBDT0xMU0VRTUJfTE9PS1VQIChicl9lbGVtLT5vcHIuY2gpOworIAkgIGVsc2UKKyAJICAgIHsKKyAJICAgICAgd2ludF90IHdjID0gX19idG93YyAoYnJfZWxlbS0+b3ByLmNoKTsKKyAJICAgICAgcmV0dXJuIF9fY29sbHNlcV90YWJsZV9sb29rdXAgKGNvbGxzZXF3Yywgd2MpOworIAkgICAgfQorIAl9CisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgICAgIGVsc2UgaWYgKGJyX2VsZW0tPnR5cGUgPT0gTUJfQ0hBUikKKyAJeworIAkgIGlmIChucnVsZXMgIT0gMCkKKyAJICAgIHJldHVybiBfX2NvbGxzZXFfdGFibGVfbG9va3VwIChjb2xsc2Vxd2MsIGJyX2VsZW0tPm9wci53Y2gpOworIAl9CisrI2VuZGlmCisgICAgICAgZWxzZSBpZiAoYnJfZWxlbS0+dHlwZSA9PSBDT0xMX1NZTSkKKyAJeworIAkgIHNpemVfdCBzeW1fbmFtZV9sZW4gPSBzdHJsZW4gKChjaGFyICopIGJyX2VsZW0tPm9wci5uYW1lKTsKK0BAIC0yODc2LDExICsyODkzLDExIEBAIHBhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKyAJCXsKKyAJCSAgLyogTm8gdmFsaWQgY2hhcmFjdGVyLiAgTWF0Y2ggaXQgYXMgYSBzaW5nbGUgYnl0ZQorIAkJICAgICBjaGFyYWN0ZXIuICAqLworLQkJICByZXR1cm4gY29sbHNlcW1iW2JyX2VsZW0tPm9wci5uYW1lWzBdXTsKKysJCSAgcmV0dXJuIENPTExTRVFNQl9MT09LVVAgKGJyX2VsZW0tPm9wci5uYW1lWzBdKTsKKyAJCX0KKyAJICAgIH0KKyAJICBlbHNlIGlmIChzeW1fbmFtZV9sZW4gPT0gMSkKKy0JICAgIHJldHVybiBjb2xsc2VxbWJbYnJfZWxlbS0+b3ByLm5hbWVbMF1dOworKwkgICAgcmV0dXJuIENPTExTRVFNQl9MT09LVVAgKGJyX2VsZW0tPm9wci5uYW1lWzBdKTsKKyAJfQorICAgICAgIHJldHVybiBVSU5UX01BWDsKKyAgICAgfQorQEAgLTI5MjAsNyArMjkzNyw3IEBAIHBhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKyAJIEhvd2V2ZXIsIGlmIHdlIGhhdmUgbm8gY29sbGF0aW9uIGVsZW1lbnRzLCBhbmQgdGhlIGNoYXJhY3RlciBzZXQKKyAJIGlzIHNpbmdsZSBieXRlLCB0aGUgc2luZ2xlIGJ5dGUgY2hhcmFjdGVyIHNldCB0aGF0IHdlCisgCSBidWlsZCBiZWxvdyBzdWZmaWNlcy4gKi8KKy0gICAgICBpZiAobnJ1bGVzID4gMCB8fCBkZmEtPm1iX2N1cl9tYXggPiAxKQorKyAgICAgIGlmIChucnVsZXMgPiAwIHx8IGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAJeworIAkgIC8qIENoZWNrIHRoZSBzcGFjZSBvZiB0aGUgYXJyYXlzLiAgKi8KKyAJICBpZiAoQkUgKCpyYW5nZV9hbGxvYyA9PSBtYmNzZXQtPm5yYW5nZXMsIDApKQorQEAgLTI5NTcsNyArMjk3NCw3IEBAIHBhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKyAJICBpZiAoTUJfQ1VSX01BWCA9PSAxKQorIAkgICovCisgCSAgaWYgKG5ydWxlcyA9PSAwKQorLQkgICAgY2hfY29sbHNlcSA9IGNvbGxzZXFtYltjaF07CisrCSAgICBjaF9jb2xsc2VxID0gQ09MTFNFUU1CX0xPT0tVUCAoY2gpOworIAkgIGVsc2UKKyAJICAgIGNoX2NvbGxzZXEgPSBfX2NvbGxzZXFfdGFibGVfbG9va3VwIChjb2xsc2Vxd2MsIF9fYnRvd2MgKGNoKSk7CisgCSAgaWYgKHN0YXJ0X2NvbGxzZXEgPD0gY2hfY29sbHNlcSAmJiBjaF9jb2xsc2VxIDw9IGVuZF9jb2xsc2VxKQorQEAgLTMwMzUsNyArMzA1MiwxMCBAQCBwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisgICByZV9iaXRzZXRfcHRyX3Qgc2Jjc2V0OworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgcmVfY2hhcnNldF90ICptYmNzZXQ7CistICBpbnQgY29sbF9zeW1fYWxsb2MgPSAwLCByYW5nZV9hbGxvYyA9IDAsIG1iY2hhcl9hbGxvYyA9IDA7CisrICBpbnQgY29sbF9zeW1fYWxsb2MgPSAwLCByYW5nZV9hbGxvYyA9IDA7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKyAgaW50IG1iY2hhcl9hbGxvYyA9IDA7CisrI2VuZGlmCisgICBpbnQgZXF1aXZfY2xhc3NfYWxsb2MgPSAwLCBjaGFyX2NsYXNzX2FsbG9jID0gMDsKKyAjZW5kaWYgLyogbm90IFJFX0VOQUJMRV9JMThOICovCisgICBpbnQgbm9uX21hdGNoID0gMDsKK0BAIC0zMDQzLDkgKzMwNjMsMTUgQEAgcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorICAgaW50IHRva2VuX2xlbjsKKyAgIGludCBmaXJzdF9yb3VuZCA9IDE7CisgI2lmZGVmIF9MSUJDCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgY29sbHNlcW1iID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKyAgICAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0NPTExTRVFNQik7CisgICBucnVsZXMgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworKyNlbHNlCisrICAvKiBUaGlzIGlzIHRydWUgd2hlbiBPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFIGlzIGRpc2FibGVkLCBidXQgdGhlCisrICAgICBjb21waWxlciBjYW4ndCBmaWd1cmUgdGhhdCBvdXQuICAqLworKyAgbnJ1bGVzID0gMDsKKysjZW5kaWYKKyAgIGlmIChucnVsZXMpCisgICAgIHsKKyAgICAgICAvKgorQEAgLTMxNzUsNyArMzIwMSw3IEBAIHBhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKyAjZWxzZQorICMgaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAJICAqZXJyID0gYnVpbGRfcmFuZ2VfZXhwIChzYmNzZXQsCistCQkJCSAgZGZhLT5tYl9jdXJfbWF4ID4gMSA/IG1iY3NldCA6IE5VTEwsCisrCQkJCSAgZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxID8gbWJjc2V0IDogTlVMTCwKKyAJCQkJICAmcmFuZ2VfYWxsb2MsICZzdGFydF9lbGVtLCAmZW5kX2VsZW0pOworICMgZWxzZQorIAkgICplcnIgPSBidWlsZF9yYW5nZV9leHAgKHNiY3NldCwgJnN0YXJ0X2VsZW0sICZlbmRfZWxlbSk7CitAQCAtMzE5MSw3ICszMjE3LDcgQEAgcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorIAkgICAgY2FzZSBTQl9DSEFSOgorIAkgICAgICBiaXRzZXRfc2V0IChzYmNzZXQsIHN0YXJ0X2VsZW0ub3ByLmNoKTsKKyAJICAgICAgYnJlYWs7CistI2lmZGVmIFJFX0VOQUJMRV9JMThOCisrI2lmIGRlZmluZWQgUkVfRU5BQkxFX0kxOE4gJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgCSAgICBjYXNlIE1CX0NIQVI6CisgCSAgICAgIC8qIENoZWNrIHdoZXRoZXIgdGhlIGFycmF5IGhhcyBlbm91Z2ggc3BhY2UuICAqLworIAkgICAgICBpZiAoQkUgKG1iY2hhcl9hbGxvYyA9PSBtYmNzZXQtPm5tYmNoYXJzLCAwKSkKK0BAIC0zMjA5LDcgKzMyMzUsNyBAQCBwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisgCQl9CisgCSAgICAgIG1iY3NldC0+bWJjaGFyc1ttYmNzZXQtPm5tYmNoYXJzKytdID0gc3RhcnRfZWxlbS5vcHIud2NoOworIAkgICAgICBicmVhazsKKy0jZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKysjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisgCSAgICBjYXNlIEVRVUlWX0NMQVNTOgorIAkgICAgICAqZXJyID0gYnVpbGRfZXF1aXZfY2xhc3MgKHNiY3NldCwKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KK0BAIC0zMjU5LDExICszMjg1LDExIEBAIHBhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKyAKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgIC8qIEVuc3VyZSBvbmx5IHNpbmdsZSBieXRlIGNoYXJhY3RlcnMgYXJlIHNldC4gICovCistICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgICAgIGJpdHNldF9tYXNrIChzYmNzZXQsIGRmYS0+c2JfY2hhcik7CisgCisgICBpZiAobWJjc2V0LT5ubWJjaGFycyB8fCBtYmNzZXQtPm5jb2xsX3N5bXMgfHwgbWJjc2V0LT5uZXF1aXZfY2xhc3NlcworLSAgICAgIHx8IG1iY3NldC0+bnJhbmdlcyB8fCAoZGZhLT5tYl9jdXJfbWF4ID4gMSAmJiAobWJjc2V0LT5uY2hhcl9jbGFzc2VzCisrICAgICAgfHwgbWJjc2V0LT5ucmFuZ2VzIHx8IChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEgJiYgKG1iY3NldC0+bmNoYXJfY2xhc3NlcworIAkJCQkJCSAgICAgfHwgbWJjc2V0LT5ub25fbWF0Y2gpKSkKKyAgICAgeworICAgICAgIGJpbl90cmVlX3QgKm1iY190cmVlOworQEAgLTMzMzIsNyArMzM1OCw3IEBAIHBhcnNlX2JyYWNrZXRfZWxlbWVudCAoYnJhY2tldF9lbGVtX3QgKmVsZW0sIHJlX3N0cmluZ190ICpyZWdleHAsCisgCQkgICAgICAgcmVfdG9rZW5fdCAqdG9rZW4sIGludCB0b2tlbl9sZW4sIHJlX2RmYV90ICpkZmEsCisgCQkgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCwgaW50IGFjY2VwdF9oeXBoZW4pCisgeworLSNpZmRlZiBSRV9FTkFCTEVfSTE4TgorKyNpZiBkZWZpbmVkIFJFX0VOQUJMRV9JMThOICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgaW50IGN1cl9jaGFyX3NpemU7CisgICBjdXJfY2hhcl9zaXplID0gcmVfc3RyaW5nX2NoYXJfc2l6ZV9hdCAocmVnZXhwLCByZV9zdHJpbmdfY3VyX2lkeCAocmVnZXhwKSk7CisgICBpZiAoY3VyX2NoYXJfc2l6ZSA+IDEpCitAQCAtMzM0Miw3ICszMzY4LDcgQEAgcGFyc2VfYnJhY2tldF9lbGVtZW50IChicmFja2V0X2VsZW1fdCAqZWxlbSwgcmVfc3RyaW5nX3QgKnJlZ2V4cCwKKyAgICAgICByZV9zdHJpbmdfc2tpcF9ieXRlcyAocmVnZXhwLCBjdXJfY2hhcl9zaXplKTsKKyAgICAgICByZXR1cm4gUkVHX05PRVJST1I7CisgICAgIH0KKy0jZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKysjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisgICByZV9zdHJpbmdfc2tpcF9ieXRlcyAocmVnZXhwLCB0b2tlbl9sZW4pOyAvKiBTa2lwIGEgdG9rZW4uICAqLworICAgaWYgKHRva2VuLT50eXBlID09IE9QX09QRU5fQ09MTF9FTEVNIHx8IHRva2VuLT50eXBlID09IE9QX09QRU5fQ0hBUl9DTEFTUworICAgICAgIHx8IHRva2VuLT50eXBlID09IE9QX09QRU5fRVFVSVZfQ0xBU1MpCitAQCAtMzQyMiw3ICszNDQ4LDkgQEAgYnVpbGRfZXF1aXZfY2xhc3MgKGJpdHNldF90IHNiY3NldCwgcmVfY2hhcnNldF90ICptYmNzZXQsCisgYnVpbGRfZXF1aXZfY2xhc3MgKGJpdHNldF90IHNiY3NldCwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSkKKyAjZW5kaWYgLyogbm90IFJFX0VOQUJMRV9JMThOICovCisgeworLSNpZmRlZiBfTElCQworKyAgLyogV2hlbiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgaXMgZGlzYWJsZWQsIG9ubHkgdGhlIEMgbG9jYWxlCisrICAgICBpcyBzdXBwb3J0ZWQ7IGl0IGhhcyBubyBjb2xsYXRpb24gcnVsZXMuICAqLworKyNpZiBkZWZpbmVkIF9MSUJDICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgdWludDMyX3QgbnJ1bGVzID0gX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKTsKKyAgIGlmIChucnVsZXMgIT0gMCkKKyAgICAgeworQEAgLTM0OTIsNyArMzUyMCw3IEBAIGJ1aWxkX2VxdWl2X2NsYXNzIChiaXRzZXRfdCBzYmNzZXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUpCisgICAgICAgbWJjc2V0LT5lcXVpdl9jbGFzc2VzW21iY3NldC0+bmVxdWl2X2NsYXNzZXMrK10gPSBpZHgxOworICAgICB9CisgICBlbHNlCistI2VuZGlmIC8qIF9MSUJDICovCisrI2VuZGlmIC8qIF9MSUJDICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworICAgICB7CisgICAgICAgaWYgKEJFIChzdHJsZW4gKChjb25zdCBjaGFyICopIG5hbWUpICE9IDEsIDApKQorIAlyZXR1cm4gUkVHX0VDT0xMQVRFOworQEAgLTM1MjYsNyArMzU1NCw3IEBAIGJ1aWxkX2NoYXJjbGFzcyAoUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnMsIGJpdHNldF90IHNiY3NldCwKKyAgICAgICAmJiAoc3RyY21wIChuYW1lLCAidXBwZXIiKSA9PSAwIHx8IHN0cmNtcCAobmFtZSwgImxvd2VyIikgPT0gMCkpCisgICAgIG5hbWUgPSAiYWxwaGEiOworIAorLSNpZmRlZiBSRV9FTkFCTEVfSTE4TgorKyNpZiBkZWZpbmVkIFJFX0VOQUJMRV9JMThOICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgLyogQ2hlY2sgdGhlIHNwYWNlIG9mIHRoZSBhcnJheXMuICAqLworICAgaWYgKEJFICgqY2hhcl9jbGFzc19hbGxvYyA9PSBtYmNzZXQtPm5jaGFyX2NsYXNzZXMsIDApKQorICAgICB7CitAQCAtMzU0Miw3ICszNTcwLDcgQEAgYnVpbGRfY2hhcmNsYXNzIChSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywgYml0c2V0X3Qgc2Jjc2V0LAorICAgICAgICpjaGFyX2NsYXNzX2FsbG9jID0gbmV3X2NoYXJfY2xhc3NfYWxsb2M7CisgICAgIH0KKyAgIG1iY3NldC0+Y2hhcl9jbGFzc2VzW21iY3NldC0+bmNoYXJfY2xhc3NlcysrXSA9IF9fd2N0eXBlIChuYW1lKTsKKy0jZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKysjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisgCisgI2RlZmluZSBCVUlMRF9DSEFSQ0xBU1NfTE9PUChjdHlwZV9mdW5jKQlcCisgICBkbyB7CQkJCQkJXAorQEAgLTM2NTMsNyArMzY4MSw3IEBAIGJ1aWxkX2NoYXJjbGFzc19vcCAocmVfZGZhX3QgKmRmYSwgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnMsCisgCisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAvKiBFbnN1cmUgb25seSBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXJzIGFyZSBzZXQuICAqLworLSAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisrICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorICAgICBiaXRzZXRfbWFzayAoc2Jjc2V0LCBkZmEtPnNiX2NoYXIpOworICNlbmRpZgorIAorQEAgLTM2NjUsNyArMzY5Myw3IEBAIGJ1aWxkX2NoYXJjbGFzc19vcCAocmVfZGZhX3QgKmRmYSwgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnMsCisgICAgIGdvdG8gYnVpbGRfd29yZF9vcF9lc3BhY2U7CisgCisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgICAgIHsKKyAgICAgICBiaW5fdHJlZV90ICptYmNfdHJlZTsKKyAgICAgICAvKiBCdWlsZCBhIHRyZWUgZm9yIGNvbXBsZXggYnJhY2tldC4gICovCitkaWZmIC0tZ2l0IGEvcG9zaXgvcmVnZXguaCBiL3Bvc2l4L3JlZ2V4LmgKK2luZGV4IDViMTk4MWUuLjI5NDFmOTQgMTAwNjQ0CistLS0gYS9wb3NpeC9yZWdleC5oCisrKysgYi9wb3NpeC9yZWdleC5oCitAQCAtMjEsNiArMjEsNyBAQAorICNkZWZpbmUgX1JFR0VYX0ggMQorIAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAvKiBBbGxvdyB0aGUgdXNlIGluIEMrKyBjb2RlLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKK0BAIC0xNTYsNiArMTU3LDggQEAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCByZWdfc3ludGF4X3Q7CisgICAgdHJlYXRlZCBhcyAnYVx7MScuICAqLworICMgZGVmaW5lIFJFX0lOVkFMSURfSU5URVJWQUxfT1JEIChSRV9ERUJVRyA8PCAxKQorIAorKy8qIEVHTElCQzogT2xkIHJlZ2V4IGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlc2UuICAqLworKyMgaWYgX19PUFRJT05fUE9TSVhfUkVHRVhQX0dMSUJDCisgLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIGlnbm9yZSBjYXNlIHdoZW4gbWF0Y2hpbmcuCisgICAgSWYgbm90IHNldCwgdGhlbiBjYXNlIGlzIHNpZ25pZmljYW50LiAgKi8KKyAjIGRlZmluZSBSRV9JQ0FTRSAoUkVfSU5WQUxJRF9JTlRFUlZBTF9PUkQgPDwgMSkKK0BAIC0xNzIsNiArMTc1LDcgQEAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCByZWdfc3ludGF4X3Q7CisgLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIG5vX3N1YiB3aWxsIGJlIHNldCB0byAxIGR1cmluZworICAgIHJlX2NvbXBpbGVfcGF0dGVybi4gICovCisgIyBkZWZpbmUgUkVfTk9fU1VCIChSRV9DT05URVhUX0lOVkFMSURfRFVQIDw8IDEpCisrIyBlbmRpZiAvKiBfX09QVElPTl9QT1NJWF9SRUdFWFBfR0xJQkMgKi8KKyAjZW5kaWYKKyAKKyAvKiBUaGlzIGdsb2JhbCB2YXJpYWJsZSBkZWZpbmVzIHRoZSBwYXJ0aWN1bGFyIHJlZ2V4cCBzeW50YXggdG8gdXNlIChmb3IKK0BAIC0yMzEsOCArMjM1LDEzIEBAIGV4dGVybiByZWdfc3ludGF4X3QgcmVfc3ludGF4X29wdGlvbnM7CisgICAoUkVfQ0hBUl9DTEFTU0VTIHwgUkVfRE9UX05FV0xJTkUgICAgICB8IFJFX0RPVF9OT1RfTlVMTAkJXAorICAgIHwgUkVfSU5URVJWQUxTICB8IFJFX05PX0VNUFRZX1JBTkdFUykKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfUkVHRVhQX0dMSUJDCisgI2RlZmluZSBSRV9TWU5UQVhfUE9TSVhfQkFTSUMJCQkJCQlcCisgICAoX1JFX1NZTlRBWF9QT1NJWF9DT01NT04gfCBSRV9CS19QTFVTX1FNIHwgUkVfQ09OVEVYVF9JTlZBTElEX0RVUCkKKysjZWxzZQorKyNkZWZpbmUgUkVfU1lOVEFYX1BPU0lYX0JBU0lDCQkJCQkJXAorKyAgKF9SRV9TWU5UQVhfUE9TSVhfQ09NTU9OIHwgUkVfQktfUExVU19RTSkKKysjZW5kaWYKKyAKKyAvKiBEaWZmZXJzIGZyb20gLi4uX1BPU0lYX0JBU0lDIG9ubHkgaW4gdGhhdCBSRV9CS19QTFVTX1FNIGJlY29tZXMKKyAgICBSRV9MSU1JVEVEX09QUywgaS5lLiwgXD8gXCsgXHwgYXJlIG5vdCByZWNvZ25pemVkLiAgQWN0dWFsbHksIHRoaXMKK0BAIC0yOTgsOSArMzA3LDExIEBAIGV4dGVybiByZWdfc3ludGF4X3QgcmVfc3ludGF4X29wdGlvbnM7CisgLyogTGlrZSBSRUdfTk9UQk9MLCBleGNlcHQgZm9yIHRoZSBlbmQtb2YtbGluZS4gICovCisgI2RlZmluZSBSRUdfTk9URU9MICgxIDw8IDEpCisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1JFR0VYUF9HTElCQworIC8qIFVzZSBQTUFUQ0hbMF0gdG8gZGVsaW1pdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgc2VhcmNoIGluIHRoZQorICAgIGJ1ZmZlci4gICovCisgI2RlZmluZSBSRUdfU1RBUlRFTkQgKDEgPDwgMikKKysjZW5kaWYKKyAKKyAKKyAvKiBJZiBhbnkgZXJyb3IgY29kZXMgYXJlIHJlbW92ZWQsIGNoYW5nZWQsIG9yIGFkZGVkLCB1cGRhdGUgdGhlCitkaWZmIC0tZ2l0IGEvcG9zaXgvcmVnZXhfaW50ZXJuYWwuYyBiL3Bvc2l4L3JlZ2V4X2ludGVybmFsLmMKK2luZGV4IDg1OTdkN2UuLmQ1M2IyYTggMTAwNjQ0CistLS0gYS9wb3NpeC9yZWdleF9pbnRlcm5hbC5jCisrKysgYi9wb3NpeC9yZWdleF9pbnRlcm5hbC5jCitAQCAtNDMsOCArNDMsOCBAQCByZV9zdHJpbmdfYWxsb2NhdGUgKHJlX3N0cmluZ190ICpwc3RyLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIGludCBpbml0X2xlbiwKKyAgIGludCBpbml0X2J1Zl9sZW47CisgCisgICAvKiBFbnN1cmUgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBmaXRzIGludG8gdGhlIGJ1ZmZlcnMuICAqLworLSAgaWYgKGluaXRfbGVuIDwgZGZhLT5tYl9jdXJfbWF4KQorLSAgICBpbml0X2xlbiA9IGRmYS0+bWJfY3VyX21heDsKKysgIGlmIChpbml0X2xlbiA8IGRmYV9tYl9jdXJfbWF4IChkZmEpKQorKyAgICBpbml0X2xlbiA9IGRmYV9tYl9jdXJfbWF4IChkZmEpOworICAgaW5pdF9idWZfbGVuID0gKGxlbiArIDEgPCBpbml0X2xlbikgPyBsZW4gKyAxOiBpbml0X2xlbjsKKyAgIHJlX3N0cmluZ19jb25zdHJ1Y3RfY29tbW9uIChzdHIsIGxlbiwgcHN0ciwgdHJhbnMsIGljYXNlLCBkZmEpOworIAorQEAgLTU1LDcgKzU1LDcgQEAgcmVfc3RyaW5nX2FsbG9jYXRlIChyZV9zdHJpbmdfdCAqcHN0ciwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCBpbnQgaW5pdF9sZW4sCisgICBwc3RyLT53b3JkX2NoYXIgPSBkZmEtPndvcmRfY2hhcjsKKyAgIHBzdHItPndvcmRfb3BzX3VzZWQgPSBkZmEtPndvcmRfb3BzX3VzZWQ7CisgICBwc3RyLT5tYnMgPSBwc3RyLT5tYnNfYWxsb2NhdGVkID8gcHN0ci0+bWJzIDogKHVuc2lnbmVkIGNoYXIgKikgc3RyOworLSAgcHN0ci0+dmFsaWRfbGVuID0gKHBzdHItPm1ic19hbGxvY2F0ZWQgfHwgZGZhLT5tYl9jdXJfbWF4ID4gMSkgPyAwIDogbGVuOworKyAgcHN0ci0+dmFsaWRfbGVuID0gKHBzdHItPm1ic19hbGxvY2F0ZWQgfHwgZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKSA/IDAgOiBsZW47CisgICBwc3RyLT52YWxpZF9yYXdfbGVuID0gcHN0ci0+dmFsaWRfbGVuOworICAgcmV0dXJuIFJFR19OT0VSUk9SOworIH0KK0BAIC04Miw3ICs4Miw3IEBAIHJlX3N0cmluZ19jb25zdHJ1Y3QgKHJlX3N0cmluZ190ICpwc3RyLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4sCisgICBpZiAoaWNhc2UpCisgICAgIHsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gICAgICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysgICAgICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorIAl7CisgCSAgd2hpbGUgKDEpCisgCSAgICB7CitAQCAtOTEsNyArOTEsNyBAQCByZV9zdHJpbmdfY29uc3RydWN0IChyZV9zdHJpbmdfdCAqcHN0ciwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLAorIAkJcmV0dXJuIHJldDsKKyAJICAgICAgaWYgKHBzdHItPnZhbGlkX3Jhd19sZW4gPj0gbGVuKQorIAkJYnJlYWs7CistCSAgICAgIGlmIChwc3RyLT5idWZzX2xlbiA+IHBzdHItPnZhbGlkX2xlbiArIGRmYS0+bWJfY3VyX21heCkKKysJICAgICAgaWYgKHBzdHItPmJ1ZnNfbGVuID4gcHN0ci0+dmFsaWRfbGVuICsgZGZhX21iX2N1cl9tYXggKGRmYSkpCisgCQlicmVhazsKKyAJICAgICAgcmV0ID0gcmVfc3RyaW5nX3JlYWxsb2NfYnVmZmVycyAocHN0ciwgcHN0ci0+YnVmc19sZW4gKiAyKTsKKyAJICAgICAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorQEAgLTEwNSw3ICsxMDUsNyBAQCByZV9zdHJpbmdfY29uc3RydWN0IChyZV9zdHJpbmdfdCAqcHN0ciwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLAorICAgZWxzZQorICAgICB7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisrICAgICAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAJYnVpbGRfd2NzX2J1ZmZlciAocHN0cik7CisgICAgICAgZWxzZQorICNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAgKi8KK0BAIC0xMzAsNyArMTMwLDcgQEAgaW50ZXJuYWxfZnVuY3Rpb24gX19hdHRyaWJ1dGVfd2Fybl91bnVzZWRfcmVzdWx0X18KKyByZV9zdHJpbmdfcmVhbGxvY19idWZmZXJzIChyZV9zdHJpbmdfdCAqcHN0ciwgaW50IG5ld19idWZfbGVuKQorIHsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMSkKKysgIGlmIChzdHJpbmdfbWJfY3VyX21heCAocHN0cikgPiAxKQorICAgICB7CisgICAgICAgd2ludF90ICpuZXdfd2NzOworIAorQEAgLTE3Nyw3ICsxNzcsNyBAQCByZV9zdHJpbmdfY29uc3RydWN0X2NvbW1vbiAoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCByZV9zdHJpbmdfdCAqcHN0ciwKKyAgIHBzdHItPnRyYW5zID0gdHJhbnM7CisgICBwc3RyLT5pY2FzZSA9IGljYXNlID8gMSA6IDA7CisgICBwc3RyLT5tYnNfYWxsb2NhdGVkID0gKHRyYW5zICE9IE5VTEwgfHwgaWNhc2UpOworLSAgcHN0ci0+bWJfY3VyX21heCA9IGRmYS0+bWJfY3VyX21heDsKKysgIHBzdHItPm1iX2N1cl9tYXggPSBkZmFfbWJfY3VyX21heCAoZGZhKTsKKyAgIHBzdHItPmlzX3V0ZjggPSBkZmEtPmlzX3V0Zjg7CisgICBwc3RyLT5tYXBfbm90YXNjaWkgPSBkZmEtPm1hcF9ub3Rhc2NpaTsKKyAgIHBzdHItPnN0b3AgPSBwc3RyLT5sZW47CitAQCAtMjAzLDcgKzIwMyw3IEBAIGJ1aWxkX3djc19idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKQorIHsKKyAjaWZkZWYgX0xJQkMKKyAgIHVuc2lnbmVkIGNoYXIgYnVmW01CX0xFTl9NQVhdOworLSAgYXNzZXJ0IChNQl9MRU5fTUFYID49IHBzdHItPm1iX2N1cl9tYXgpOworKyAgYXNzZXJ0IChNQl9MRU5fTUFYID49IHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSk7CisgI2Vsc2UKKyAgIHVuc2lnbmVkIGNoYXIgYnVmWzY0XTsKKyAjZW5kaWYKK0BAIC0yMjYsNyArMjI2LDcgQEAgYnVpbGRfd2NzX2J1ZmZlciAocmVfc3RyaW5nX3QgKnBzdHIpCisgCXsKKyAJICBpbnQgaSwgY2g7CisgCistCSAgZm9yIChpID0gMDsgaSA8IHBzdHItPm1iX2N1cl9tYXggJiYgaSA8IHJlbWFpbl9sZW47ICsraSkKKysJICBmb3IgKGkgPSAwOyBpIDwgc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpICYmIGkgPCByZW1haW5fbGVuOyArK2kpCisgCSAgICB7CisgCSAgICAgIGNoID0gcHN0ci0+cmF3X21icyBbcHN0ci0+cmF3X21ic19pZHggKyBieXRlX2lkeCArIGldOworIAkgICAgICBidWZbaV0gPSBwc3RyLT5tYnNbYnl0ZV9pZHggKyBpXSA9IHBzdHItPnRyYW5zW2NoXTsKK0BAIC0yNzUsNyArMjc1LDcgQEAgYnVpbGRfd2NzX3VwcGVyX2J1ZmZlciAocmVfc3RyaW5nX3QgKnBzdHIpCisgICBzaXplX3QgbWJjbGVuOworICNpZmRlZiBfTElCQworICAgY2hhciBidWZbTUJfTEVOX01BWF07CistICBhc3NlcnQgKE1CX0xFTl9NQVggPj0gcHN0ci0+bWJfY3VyX21heCk7CisrICBhc3NlcnQgKE1CX0xFTl9NQVggPj0gc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpKTsKKyAjZWxzZQorICAgY2hhciBidWZbNjRdOworICNlbmRpZgorQEAgLTM2OSw3ICszNjksNyBAQCBidWlsZF93Y3NfdXBwZXJfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikKKyAJICB7CisgCSAgICBpbnQgaSwgY2g7CisgCistCSAgICBmb3IgKGkgPSAwOyBpIDwgcHN0ci0+bWJfY3VyX21heCAmJiBpIDwgcmVtYWluX2xlbjsgKytpKQorKwkgICAgZm9yIChpID0gMDsgaSA8IHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSAmJiBpIDwgcmVtYWluX2xlbjsgKytpKQorIAkgICAgICB7CisgCQljaCA9IHBzdHItPnJhd19tYnMgW3BzdHItPnJhd19tYnNfaWR4ICsgc3JjX2lkeCArIGldOworIAkJYnVmW2ldID0gcHN0ci0+dHJhbnNbY2hdOworQEAgLTU2Nyw4ICs1NjcsOSBAQCByZV9zdHJpbmdfdHJhbnNsYXRlX2J1ZmZlciAocmVfc3RyaW5nX3QgKnBzdHIpCisgfQorIAorIC8qIFRoaXMgZnVuY3Rpb24gcmUtY29uc3RydWN0IHRoZSBidWZmZXJzLgorLSAgIENvbmNyZXRlbHksIGNvbnZlcnQgdG8gd2lkZSBjaGFyYWN0ZXIgaW4gY2FzZSBvZiBwc3RyLT5tYl9jdXJfbWF4ID4gMSwKKy0gICBjb252ZXJ0IHRvIHVwcGVyIGNhc2UgaW4gY2FzZSBvZiBSRUdfSUNBU0UsIGFwcGx5IHRyYW5zbGF0aW9uLiAgKi8KKysgICBDb25jcmV0ZWx5LCBjb252ZXJ0IHRvIHdpZGUgY2hhcmFjdGVyIGluIGNhc2Ugb2YKKysgICBzdHJpbmdfbWJfY3VyX21heCAocHN0cikgPiAxLCBjb252ZXJ0IHRvIHVwcGVyIGNhc2UgaW4gY2FzZSBvZgorKyAgIFJFR19JQ0FTRSwgYXBwbHkgdHJhbnNsYXRpb24uICAqLworIAorIHN0YXRpYyByZWdfZXJyY29kZV90CisgaW50ZXJuYWxfZnVuY3Rpb24gX19hdHRyaWJ1dGVfd2Fybl91bnVzZWRfcmVzdWx0X18KK0BAIC01NzksNyArNTgwLDcgQEAgcmVfc3RyaW5nX3JlY29uc3RydWN0IChyZV9zdHJpbmdfdCAqcHN0ciwgaW50IGlkeCwgaW50IGVmbGFncykKKyAgICAgeworICAgICAgIC8qIFJlc2V0IGJ1ZmZlci4gICovCisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICAgICAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxKQorKyAgICAgIGlmIChzdHJpbmdfbWJfY3VyX21heCAocHN0cikgPiAxKQorIAltZW1zZXQgKCZwc3RyLT5jdXJfc3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisgI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICAgICAgcHN0ci0+bGVuID0gcHN0ci0+cmF3X2xlbjsKK0BAIC02NzAsNyArNjcxLDcgQEAgcmVfc3RyaW5nX3JlY29uc3RydWN0IChyZV9zdHJpbmdfdCAqcHN0ciwgaW50IGlkeCwgaW50IGVmbGFncykKKyAJICAgICAgcHN0ci0+dGlwX2NvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAocHN0ciwgb2Zmc2V0IC0gMSwKKyAJCQkJCQkJZWZsYWdzKTsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0JICAgICAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxKQorKwkgICAgICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpID4gMSkKKyAJCW1lbW1vdmUgKHBzdHItPndjcywgcHN0ci0+d2NzICsgb2Zmc2V0LAorIAkJCSAocHN0ci0+dmFsaWRfbGVuIC0gb2Zmc2V0KSAqIHNpemVvZiAod2ludF90KSk7CisgI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCitAQCAtNjk5LDcgKzcwMCw3IEBAIHJlX3N0cmluZ19yZWNvbnN0cnVjdCAocmVfc3RyaW5nX3QgKnBzdHIsIGludCBpZHgsIGludCBlZmxhZ3MpCisgI2VuZGlmCisgCSAgcHN0ci0+dmFsaWRfbGVuID0gMDsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0JICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisrCSAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSA+IDEpCisgCSAgICB7CisgCSAgICAgIGludCB3Y3NfaWR4OworIAkgICAgICB3aW50X3Qgd2MgPSBXRU9GOworQEAgLTcxMSw3ICs3MTIsNyBAQCByZV9zdHJpbmdfcmVjb25zdHJ1Y3QgKHJlX3N0cmluZ190ICpwc3RyLCBpbnQgaWR4LCBpbnQgZWZsYWdzKQorIAkJICAvKiBTcGVjaWFsIGNhc2UgVVRGLTguICBNdWx0aS1ieXRlIGNoYXJzIHN0YXJ0IHdpdGggYW55CisgCQkgICAgIGJ5dGUgb3RoZXIgdGhhbiAweDgwIC0gMHhiZi4gICovCisgCQkgIHJhdyA9IHBzdHItPnJhd19tYnMgKyBwc3RyLT5yYXdfbWJzX2lkeDsKKy0JCSAgZW5kID0gcmF3ICsgKG9mZnNldCAtIHBzdHItPm1iX2N1cl9tYXgpOworKwkJICBlbmQgPSByYXcgKyAob2Zmc2V0IC0gc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpKTsKKyAJCSAgaWYgKGVuZCA8IHBzdHItPnJhd19tYnMpCisgCQkgICAgZW5kID0gcHN0ci0+cmF3X21iczsKKyAJCSAgcCA9IHJhdyArIG9mZnNldCAtIDE7CitAQCAtODAzLDcgKzgwNCw3IEBAIHJlX3N0cmluZ19yZWNvbnN0cnVjdCAocmVfc3RyaW5nX3QgKnBzdHIsIGludCBpZHgsIGludCBlZmxhZ3MpCisgCisgICAvKiBUaGVuIGJ1aWxkIHRoZSBidWZmZXJzLiAgKi8KKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMSkKKysgIGlmIChzdHJpbmdfbWJfY3VyX21heCAocHN0cikgPiAxKQorICAgICB7CisgICAgICAgaWYgKHBzdHItPmljYXNlKQorIAl7CitAQCAtODQxLDcgKzg0Miw3IEBAIHJlX3N0cmluZ19wZWVrX2J5dGVfY2FzZSAoY29uc3QgcmVfc3RyaW5nX3QgKnBzdHIsIGludCBpZHgpCisgICAgIHJldHVybiByZV9zdHJpbmdfcGVla19ieXRlIChwc3RyLCBpZHgpOworIAorICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxCisrICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpID4gMQorICAgICAgICYmICEgcmVfc3RyaW5nX2lzX3NpbmdsZV9ieXRlX2NoYXIgKHBzdHIsIHBzdHItPmN1cl9pZHggKyBpZHgpKQorICAgICByZXR1cm4gcmVfc3RyaW5nX3BlZWtfYnl0ZSAocHN0ciwgaWR4KTsKKyAjZW5kaWYKK0BAIC05MzAsNyArOTMxLDcgQEAgcmVfc3RyaW5nX2NvbnRleHRfYXQgKGNvbnN0IHJlX3N0cmluZ190ICppbnB1dCwgaW50IGlkeCwgaW50IGVmbGFncykKKyAgICAgcmV0dXJuICgoZWZsYWdzICYgUkVHX05PVEVPTCkgPyBDT05URVhUX0VOREJVRgorIAkgICAgOiBDT05URVhUX05FV0xJTkUgfCBDT05URVhUX0VOREJVRik7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICBpZiAoaW5wdXQtPm1iX2N1cl9tYXggPiAxKQorKyAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChpbnB1dCkgPiAxKQorICAgICB7CisgICAgICAgd2ludF90IHdjOworICAgICAgIGludCB3Y19pZHggPSBpZHg7CitAQCAtMTQ0NCw3ICsxNDQ1LDcgQEAgcmVfZGZhX2FkZF9ub2RlIChyZV9kZmFfdCAqZGZhLCByZV90b2tlbl90IHRva2VuKQorICAgZGZhLT5ub2Rlc1tkZmEtPm5vZGVzX2xlbl0uY29uc3RyYWludCA9IDA7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICBkZmEtPm5vZGVzW2RmYS0+bm9kZXNfbGVuXS5hY2NlcHRfbWIgPQorLSAgICAodHlwZSA9PSBPUF9QRVJJT0QgJiYgZGZhLT5tYl9jdXJfbWF4ID4gMSkgfHwgdHlwZSA9PSBDT01QTEVYX0JSQUNLRVQ7CisrICAgICh0eXBlID09IE9QX1BFUklPRCAmJiBkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpIHx8IHR5cGUgPT0gQ09NUExFWF9CUkFDS0VUOworICNlbmRpZgorICAgZGZhLT5uZXh0c1tkZmEtPm5vZGVzX2xlbl0gPSAtMTsKKyAgIHJlX25vZGVfc2V0X2luaXRfZW1wdHkgKGRmYS0+ZWRlc3RzICsgZGZhLT5ub2Rlc19sZW4pOworZGlmZiAtLWdpdCBhL3Bvc2l4L3JlZ2V4X2ludGVybmFsLmggYi9wb3NpeC9yZWdleF9pbnRlcm5hbC5oCitpbmRleCAxNTRlOTY5Li5jNDM5MDlhIDEwMDY0NAorLS0tIGEvcG9zaXgvcmVnZXhfaW50ZXJuYWwuaAorKysrIGIvcG9zaXgvcmVnZXhfaW50ZXJuYWwuaAorQEAgLTI2LDYgKzI2LDEwIEBACisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKysjaWYgZGVmaW5lZCBfTElCQworKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKysjZW5kaWYKKysKKyAjaWYgZGVmaW5lZCBIQVZFX0xBTkdJTkZPX0ggfHwgZGVmaW5lZCBIQVZFX0xBTkdJTkZPX0NPREVTRVQgfHwgZGVmaW5lZCBfTElCQworICMgaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyAjZW5kaWYKK0BAIC0zNjksNiArMzczLDEzIEBAIHN0cnVjdCByZV9zdHJpbmdfdAorIH07CisgdHlwZWRlZiBzdHJ1Y3QgcmVfc3RyaW5nX3QgcmVfc3RyaW5nX3Q7CisgCisrLyogV2hlbiBPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFIGlzIGRpc2FibGVkLCB0aGlzIGlzIGFsd2F5cyAxOworKyAgIGhlbHAgdGhlIGNvbXBpbGVyIG1ha2UgdXNlIG9mIHRoYXQgZmFjdC4gICovCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKyMgZGVmaW5lIHN0cmluZ19tYl9jdXJfbWF4KHN0cikgKChzdHIpLT5tYl9jdXJfbWF4ICsgMCkKKysjZWxzZQorKyMgZGVmaW5lIHN0cmluZ19tYl9jdXJfbWF4KHN0cikgKDEpCisrI2VuZGlmCisgCisgc3RydWN0IHJlX2RmYV90OworIHR5cGVkZWYgc3RydWN0IHJlX2RmYV90IHJlX2RmYV90OworQEAgLTY1NCw2ICs2NjUsMTQgQEAgc3RydWN0IHJlX2RmYV90CisgICBfX2xpYmNfbG9ja19kZWZpbmUgKCwgbG9jaykKKyB9OworIAorKy8qIFdoZW4gT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSBpcyBkaXNhYmxlZCwgdGhpcyBpcyBhbHdheXMgMTsKKysgICBoZWxwIHRoZSBjb21waWxlciBtYWtlIHVzZSBvZiB0aGF0IGZhY3QuICAqLworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysjIGRlZmluZSBkZmFfbWJfY3VyX21heChkZmEpICgoZGZhKS0+bWJfY3VyX21heCArIDApCisrI2Vsc2UKKysjIGRlZmluZSBkZmFfbWJfY3VyX21heChkZmEpICgxKQorKyNlbmRpZgorKworICNkZWZpbmUgcmVfbm9kZV9zZXRfaW5pdF9lbXB0eShzZXQpIG1lbXNldCAoc2V0LCAnXDAnLCBzaXplb2YgKHJlX25vZGVfc2V0KSkKKyAjZGVmaW5lIHJlX25vZGVfc2V0X3JlbW92ZShzZXQsaWQpIFwKKyAgIChyZV9ub2RlX3NldF9yZW1vdmVfYXQgKHNldCwgcmVfbm9kZV9zZXRfY29udGFpbnMgKHNldCwgaWQpIC0gMSkpCitAQCAtNzE0LDcgKzczMyw3IEBAIGludGVybmFsX2Z1bmN0aW9uIF9fYXR0cmlidXRlX18gKChwdXJlLCB1bnVzZWQpKQorIHJlX3N0cmluZ19jaGFyX3NpemVfYXQgKGNvbnN0IHJlX3N0cmluZ190ICpwc3RyLCBpbnQgaWR4KQorIHsKKyAgIGludCBieXRlX2lkeDsKKy0gIGlmIChwc3RyLT5tYl9jdXJfbWF4ID09IDEpCisrICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpID09IDEpCisgICAgIHJldHVybiAxOworICAgZm9yIChieXRlX2lkeCA9IDE7IGlkeCArIGJ5dGVfaWR4IDwgcHN0ci0+dmFsaWRfbGVuOyArK2J5dGVfaWR4KQorICAgICBpZiAocHN0ci0+d2NzW2lkeCArIGJ5dGVfaWR4XSAhPSBXRU9GKQorQEAgLTcyNiw3ICs3NDUsNyBAQCBzdGF0aWMgd2ludF90CisgaW50ZXJuYWxfZnVuY3Rpb24gX19hdHRyaWJ1dGVfXyAoKHB1cmUsIHVudXNlZCkpCisgcmVfc3RyaW5nX3djaGFyX2F0IChjb25zdCByZV9zdHJpbmdfdCAqcHN0ciwgaW50IGlkeCkKKyB7CistICBpZiAocHN0ci0+bWJfY3VyX21heCA9PSAxKQorKyAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSA9PSAxKQorICAgICByZXR1cm4gKHdpbnRfdCkgcHN0ci0+bWJzW2lkeF07CisgICByZXR1cm4gKHdpbnRfdCkgcHN0ci0+d2NzW2lkeF07CisgfQorZGlmZiAtLWdpdCBhL3Bvc2l4L3JlZ2V4ZWMtY29tcGF0LmMgYi9wb3NpeC9yZWdleGVjLWNvbXBhdC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMGY5YjdjNworLS0tIC9kZXYvbnVsbAorKysrIGIvcG9zaXgvcmVnZXhlYy1jb21wYXQuYworQEAgLTAsMCArMSwzOSBAQAorKy8qIEV4dGVuZGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBhbmQgc2VhcmNoIGxpYnJhcnkuCisrICAgQ29weXJpZ2h0IChDKSAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIENvbnRyaWJ1dGVkIGJ5IElzYW11IEhhc2VnYXdhIDxpc2FtdUB5YW1hdG8uaWJtLmNvbT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8c2hsaWItY29tcGF0Lmg+CisrdmVyc2lvbmVkX3N5bWJvbCAobGliYywgX19yZWdleGVjLCByZWdleGVjLCBHTElCQ18yXzNfNCk7CisrCisrIyBpZiBTSExJQl9DT01QQVQgKGxpYmMsIEdMSUJDXzJfMCwgR0xJQkNfMl8zXzQpCisrX190eXBlb2ZfXyAoX19yZWdleGVjKSBfX2NvbXBhdF9yZWdleGVjOworKworK2ludAorK2F0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCisrX19jb21wYXRfcmVnZXhlYyAoY29uc3QgcmVnZXhfdCAqX19yZXN0cmljdCBwcmVnLAorKwkJICBjb25zdCBjaGFyICpfX3Jlc3RyaWN0IHN0cmluZywgc2l6ZV90IG5tYXRjaCwKKysJCSAgcmVnbWF0Y2hfdCBwbWF0Y2hbXSwgaW50IGVmbGFncykKKyt7CisrICByZXR1cm4gcmVnZXhlYyAocHJlZywgc3RyaW5nLCBubWF0Y2gsIHBtYXRjaCwKKysJCSAgZWZsYWdzICYgKFJFR19OT1RCT0wgfCBSRUdfTk9URU9MKSk7CisrfQorK2NvbXBhdF9zeW1ib2wgKGxpYmMsIF9fY29tcGF0X3JlZ2V4ZWMsIHJlZ2V4ZWMsIEdMSUJDXzJfMCk7CisrIyBlbmRpZgorKyNlbmRpZgorZGlmZiAtLWdpdCBhL3Bvc2l4L3JlZ2V4ZWMuYyBiL3Bvc2l4L3JlZ2V4ZWMuYworaW5kZXggNzBjZDYwNi4uZTNiNDllNCAxMDA2NDQKKy0tLSBhL3Bvc2l4L3JlZ2V4ZWMuYworKysrIGIvcG9zaXgvcmVnZXhlYy5jCitAQCAtMTgsNiArMTgsNyBAQAorICAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisgI2luY2x1ZGUgPHN0ZGludC5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIHN0YXRpYyByZWdfZXJyY29kZV90IG1hdGNoX2N0eF9pbml0IChyZV9tYXRjaF9jb250ZXh0X3QgKmNhY2hlLCBpbnQgZWZsYWdzLAorIAkJCQkgICAgIGludCBuKSBpbnRlcm5hbF9mdW5jdGlvbjsKK0BAIC0xODYsMTEgKzE4NywxMSBAQCBzdGF0aWMgaW50IGJ1aWxkX3RydGFibGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsCisgc3RhdGljIGludCBjaGVja19ub2RlX2FjY2VwdF9ieXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgaW50IG5vZGVfaWR4LAorIAkJCQkgICAgY29uc3QgcmVfc3RyaW5nX3QgKmlucHV0LCBpbnQgaWR4KQorICAgICAgaW50ZXJuYWxfZnVuY3Rpb247CistIyBpZmRlZiBfTElCQworKyMgaWYgZGVmaW5lZCBfTElCQyAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyBzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfY29sbGF0aW9uX3NlcXVlbmNlX3ZhbHVlIChjb25zdCB1bnNpZ25lZCBjaGFyICptYnMsCisgCQkJCQkJICAgc2l6ZV90IG5hbWVfbGVuKQorICAgICAgaW50ZXJuYWxfZnVuY3Rpb247CistIyBlbmRpZiAvKiBfTElCQyAqLworKyMgZW5kaWYgLyogX0xJQkMgJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisgI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgc3RhdGljIGludCBncm91cF9ub2Rlc19pbnRvX0RGQXN0YXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwKKyAJCQkJICAgICAgIGNvbnN0IHJlX2RmYXN0YXRlX3QgKnN0YXRlLAorQEAgLTI1NSwyNSArMjU2LDkgQEAgcmVnZXhlYyAocHJlZywgc3RyaW5nLCBubWF0Y2gsIHBtYXRjaCwgZWZsYWdzKQorICAgcmV0dXJuIGVyciAhPSBSRUdfTk9FUlJPUjsKKyB9CisgCistI2lmZGVmIF9MSUJDCistIyBpbmNsdWRlIDxzaGxpYi1jb21wYXQuaD4KKy12ZXJzaW9uZWRfc3ltYm9sIChsaWJjLCBfX3JlZ2V4ZWMsIHJlZ2V4ZWMsIEdMSUJDXzJfM180KTsKKy0KKy0jIGlmIFNITElCX0NPTVBBVCAobGliYywgR0xJQkNfMl8wLCBHTElCQ18yXzNfNCkKKy1fX3R5cGVvZl9fIChfX3JlZ2V4ZWMpIF9fY29tcGF0X3JlZ2V4ZWM7CistCistaW50CistYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KKy1fX2NvbXBhdF9yZWdleGVjIChjb25zdCByZWdleF90ICpfX3Jlc3RyaWN0IHByZWcsCistCQkgIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3Qgc3RyaW5nLCBzaXplX3Qgbm1hdGNoLAorLQkJICByZWdtYXRjaF90IHBtYXRjaFtdLCBpbnQgZWZsYWdzKQorLXsKKy0gIHJldHVybiByZWdleGVjIChwcmVnLCBzdHJpbmcsIG5tYXRjaCwgcG1hdGNoLAorLQkJICBlZmxhZ3MgJiAoUkVHX05PVEJPTCB8IFJFR19OT1RFT0wpKTsKKy19CistY29tcGF0X3N5bWJvbCAobGliYywgX19jb21wYXRfcmVnZXhlYywgcmVnZXhlYywgR0xJQkNfMl8wKTsKKy0jIGVuZGlmCistI2VuZGlmCisrLyogRUdMSUJDOiBUaGUgY29kZSB0aGF0IHVzZWQgdG8gYmUgaGVyZSB3YXMgbW92ZSB0byBhIHNlcGFyYXRlIGZpbGUKKysgICBzbyB0aGF0IGl0IGNhbiBiZSBzaGFyZWQgd2l0aCB4cmVnZXguYy4gICovCisrI2luY2x1ZGUgInJlZ2V4ZWMtY29tcGF0LmMiCisgCisgLyogRW50cnkgcG9pbnRzIGZvciBHTlUgY29kZS4gICovCisgCitAQCAtNzI4LDcgKzcxMyw3IEBAIHJlX3NlYXJjaF9pbnRlcm5hbCAocHJlZywgc3RyaW5nLCBsZW5ndGgsIHN0YXJ0LCByYW5nZSwgc3RvcCwgbm1hdGNoLCBwbWF0Y2gsCisgICBpbmNyID0gKHJhbmdlIDwgMCkgPyAtMSA6IDE7CisgICBsZWZ0X2xpbSA9IChyYW5nZSA8IDApID8gc3RhcnQgKyByYW5nZSA6IHN0YXJ0OworICAgcmlnaHRfbGltID0gKHJhbmdlIDwgMCkgPyBzdGFydCA6IHN0YXJ0ICsgcmFuZ2U7CistICBzYiA9IGRmYS0+bWJfY3VyX21heCA9PSAxOworKyAgc2IgPSBkZmFfbWJfY3VyX21heCAoZGZhKSA9PSAxOworICAgbWF0Y2hfa2luZCA9CisgICAgIChmYXN0bWFwCisgICAgICA/ICgoc2IgfHwgIShwcmVnLT5zeW50YXggJiBSRV9JQ0FTRSB8fCB0KSA/IDQgOiAwKQorQEAgLTM0NDgsNyArMzQzMyw3IEBAIG91dF9mcmVlOgorIAkgIGlmIChCRSAoZGVzdF9zdGF0ZXNfd29yZFtpXSA9PSBOVUxMICYmIGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgCSAgICBnb3RvIG91dF9mcmVlOworIAorLQkgIGlmIChkZXN0X3N0YXRlc1tpXSAhPSBkZXN0X3N0YXRlc193b3JkW2ldICYmIGRmYS0+bWJfY3VyX21heCA+IDEpCisrCSAgaWYgKGRlc3Rfc3RhdGVzW2ldICE9IGRlc3Rfc3RhdGVzX3dvcmRbaV0gJiYgZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorIAkgICAgbmVlZF93b3JkX3RydGFibGUgPSAxOworIAorIAkgIGRlc3Rfc3RhdGVzX25sW2ldID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEsICZmb2xsb3dzLAorQEAgLTM1OTAsNyArMzU3NSw3IEBAIGdyb3VwX25vZGVzX2ludG9fREZBc3RhdGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBjb25zdCByZV9kZmFzdGF0ZV90ICpzdGF0ZSwKKyAgICAgICBlbHNlIGlmICh0eXBlID09IE9QX1BFUklPRCkKKyAJeworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLQkgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorKwkgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgCSAgICBiaXRzZXRfbWVyZ2UgKGFjY2VwdHMsIGRmYS0+c2JfY2hhcik7CisgCSAgZWxzZQorICNlbmRpZgorQEAgLTM2NDEsNyArMzYyNiw3IEBAIGdyb3VwX25vZGVzX2ludG9fREZBc3RhdGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBjb25zdCByZV9kZmFzdGF0ZV90ICpzdGF0ZSwKKyAJCSAgY29udGludWU7CisgCQl9CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistCSAgICAgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorKwkgICAgICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorIAkJZm9yIChqID0gMDsgaiA8IEJJVFNFVF9XT1JEUzsgKytqKQorIAkJICBhbnlfc2V0IHw9IChhY2NlcHRzW2pdICY9IChkZmEtPndvcmRfY2hhcltqXSB8IH5kZmEtPnNiX2NoYXJbal0pKTsKKyAJICAgICAgZWxzZQorQEAgLTM2NjAsNyArMzY0NSw3IEBAIGdyb3VwX25vZGVzX2ludG9fREZBc3RhdGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBjb25zdCByZV9kZmFzdGF0ZV90ICpzdGF0ZSwKKyAJCSAgY29udGludWU7CisgCQl9CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistCSAgICAgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorKwkgICAgICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorIAkJZm9yIChqID0gMDsgaiA8IEJJVFNFVF9XT1JEUzsgKytqKQorIAkJICBhbnlfc2V0IHw9IChhY2NlcHRzW2pdICY9IH4oZGZhLT53b3JkX2NoYXJbal0gJiBkZmEtPnNiX2NoYXJbal0pKTsKKyAJICAgICAgZWxzZQorQEAgLTM4MzYsMTIgKzM4MjEsNiBAQCBjaGVja19ub2RlX2FjY2VwdF9ieXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgaW50IG5vZGVfaWR4LAorICAgaWYgKG5vZGUtPnR5cGUgPT0gQ09NUExFWF9CUkFDS0VUKQorICAgICB7CisgICAgICAgY29uc3QgcmVfY2hhcnNldF90ICpjc2V0ID0gbm9kZS0+b3ByLm1iY3NldDsKKy0jIGlmZGVmIF9MSUJDCistICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcGluCistCT0gKChjb25zdCB1bnNpZ25lZCBjaGFyICopIHJlX3N0cmluZ19nZXRfYnVmZmVyIChpbnB1dCkgKyBzdHJfaWR4KTsKKy0gICAgICBpbnQgajsKKy0gICAgICB1aW50MzJfdCBucnVsZXM7CistIyBlbmRpZiAvKiBfTElCQyAqLworICAgICAgIGludCBtYXRjaF9sZW4gPSAwOworICAgICAgIHdjaGFyX3Qgd2MgPSAoKGNzZXQtPm5yYW5nZXMgfHwgY3NldC0+bmNoYXJfY2xhc3NlcyB8fCBjc2V0LT5ubWJjaGFycykKKyAJCSAgICA/IHJlX3N0cmluZ193Y2hhcl9hdCAoaW5wdXQsIHN0cl9pZHgpIDogMCk7CitAQCAtMzg1Myw2ICszODMyLDcgQEAgY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGludCBub2RlX2lkeCwKKyAJICAgIG1hdGNoX2xlbiA9IGNoYXJfbGVuOworIAkgICAgZ290byBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDsKKyAJICB9CisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgICAgIC8qIG1hdGNoIHdpdGggY2hhcmFjdGVyX2NsYXNzPyAgKi8KKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3NldC0+bmNoYXJfY2xhc3NlczsgKytpKQorIAl7CitAQCAtMzg2MywxNCArMzg0MywyMiBAQCBjaGVja19ub2RlX2FjY2VwdF9ieXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgaW50IG5vZGVfaWR4LAorIAkgICAgICBnb3RvIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzX21hdGNoOworIAkgICAgfQorIAl9CisrI2VuZGlmCisrCisrICAgICAgLyogV2hlbiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgaXMgZGlzYWJsZWQsIG9ubHkgdGhlIEMKKysgICAgICAgICBsb2NhbGUgaXMgc3VwcG9ydGVkOyBpdCBoYXMgbm8gY29sbGF0aW9uIHJ1bGVzLiAgKi8KKysjIGlmIGRlZmluZWQgX0xJQkMgJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcGluCisrCT0gKChjb25zdCB1bnNpZ25lZCBjaGFyICopIHJlX3N0cmluZ19nZXRfYnVmZmVyIChpbnB1dCkgKyBzdHJfaWR4KTsKKysgICAgICBpbnQgajsKKysgICAgICB1aW50MzJfdCBucnVsZXM7CisgCistIyBpZmRlZiBfTElCQworICAgICAgIG5ydWxlcyA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisgICAgICAgaWYgKG5ydWxlcyAhPSAwKQorIAl7CisgCSAgdW5zaWduZWQgaW50IGluX2NvbGxzZXEgPSAwOworIAkgIGNvbnN0IGludDMyX3QgKnRhYmxlLCAqaW5kaXJlY3Q7CistCSAgY29uc3QgdW5zaWduZWQgY2hhciAqd2VpZ2h0cywgKmV4dHJhOworKwkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKndlaWdodHMsICpleHRyYSA9IE5VTEw7CisgCSAgY29uc3QgY2hhciAqY29sbHNlcXdjOworIAorIAkgIC8qIG1hdGNoIHdpdGggY29sbGF0aW5nX3N5bWJvbD8gICovCitAQCAtMzk1NSw4ICszOTQzLDEyIEBAIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBpbnQgbm9kZV9pZHgsCisgCSAgICB9CisgCX0KKyAgICAgICBlbHNlCistIyBlbmRpZiAvKiBfTElCQyAqLworKyMgZW5kaWYgLyogX0xJQkMgJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisgCXsKKysgICAgICAgICAgLyogSW4gdGhlIF9MSUJDIHZlcnNpb24sIGlmIE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgaXMKKysgICAgICAgICAgICAgZGlzYWJsZWQsIHRoZXJlIGNhbiBiZSBubyBtdWx0aWJ5dGUgcmFuZ2UgZW5kcG9pbnRzLCBhbmQKKysgICAgICAgICAgICAgY3NldC0+bnJhbmdlcyBpcyBhbHdheXMgemVyby4gICovCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIAkgIC8qIG1hdGNoIHdpdGggcmFuZ2UgZXhwcmVzc2lvbj8gICovCisgI2lmIF9fR05VQ19fID49IDIKKyAJICB3Y2hhcl90IGNtcF9idWZbXSA9IHtMJ1wwJywgTCdcMCcsIHdjLCBMJ1wwJywgTCdcMCcsIEwnXDAnfTsKK0BAIC0zOTc1LDYgKzM5NjcsNyBAQCBjaGVja19ub2RlX2FjY2VwdF9ieXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgaW50IG5vZGVfaWR4LAorIAkJICBnb3RvIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzX21hdGNoOworIAkJfQorIAkgICAgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKyAJfQorICAgICBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDoKKyAgICAgICBpZiAoIWNzZXQtPm5vbl9tYXRjaCkKK0BAIC0zOTkwLDcgKzM5ODMsNyBAQCBjaGVja19ub2RlX2FjY2VwdF9ieXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgaW50IG5vZGVfaWR4LAorICAgcmV0dXJuIDA7CisgfQorIAorLSMgaWZkZWYgX0xJQkMKKysjIGlmIGRlZmluZWQgX0xJQkMgJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgc3RhdGljIHVuc2lnbmVkIGludAorIGludGVybmFsX2Z1bmN0aW9uCisgZmluZF9jb2xsYXRpb25fc2VxdWVuY2VfdmFsdWUgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1icywgc2l6ZV90IG1ic19sZW4pCitAQCAtNDA0OCw3ICs0MDQxLDcgQEAgZmluZF9jb2xsYXRpb25fc2VxdWVuY2VfdmFsdWUgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1icywgc2l6ZV90IG1ic19sZW4pCisgICAgICAgcmV0dXJuIFVJTlRfTUFYOworICAgICB9CisgfQorLSMgZW5kaWYgLyogX0xJQkMgKi8KKysjIGVuZGlmIC8qIF9MSUJDICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworICNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworIAorIC8qIENoZWNrIHdoZXRoZXIgdGhlIG5vZGUgYWNjZXB0cyB0aGUgYnl0ZSB3aGljaCBpcyBJRFgtdGgKK0BAIC00MTM5LDcgKzQxMzIsNyBAQCBleHRlbmRfYnVmZmVycyAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgbWluX2xlbikKKyAgIGlmIChwc3RyLT5pY2FzZSkKKyAgICAgeworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgICAgIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMSkKKysgICAgICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpID4gMSkKKyAJeworIAkgIHJldCA9IGJ1aWxkX3djc191cHBlcl9idWZmZXIgKHBzdHIpOworIAkgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKK0BAIC00MTUyLDcgKzQxNDUsNyBAQCBleHRlbmRfYnVmZmVycyAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgbWluX2xlbikKKyAgIGVsc2UKKyAgICAgeworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgICAgIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMSkKKysgICAgICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpID4gMSkKKyAJYnVpbGRfd2NzX2J1ZmZlciAocHN0cik7CisgICAgICAgZWxzZQorICNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAgKi8KK2RpZmYgLS1naXQgYS9wb3NpeC94cmVnZXguYyBiL3Bvc2l4L3hyZWdleC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDNmN2FjZQorLS0tIC9kZXYvbnVsbAorKysrIGIvcG9zaXgveHJlZ2V4LmMKK0BAIC0wLDAgKzEsODIxNSBAQAorKy8qIEV4dGVuZGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBhbmQgc2VhcmNoIGxpYnJhcnksCisrICAgdmVyc2lvbiAwLjEyLgorKyAgIChJbXBsZW1lbnRzIFBPU0lYIGRyYWZ0IFAxMDAzLjIvRDExLjIsIGV4Y2VwdCBmb3Igc29tZSBvZiB0aGUKKysgICBpbnRlcm5hdGlvbmFsaXphdGlvbiBmZWF0dXJlcy4pCisrCisrICAgQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLAorKyAgIDIwMDIsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKysgICAwMjExMC0xMzAxIFVTQS4gICovCisrCisrLyogQUlYIHJlcXVpcmVzIHRoaXMgdG8gYmUgdGhlIGZpcnN0IHRoaW5nIGluIHRoZSBmaWxlLiAqLworKyNpZiBkZWZpbmVkIF9BSVggJiYgIWRlZmluZWQgX19HTlVDX18gJiYgIWRlZmluZWQgUkVHRVhfTUFMTE9DCisrICAjcHJhZ21hIGFsbG9jYQorKyNlbmRpZgorKworKyN1bmRlZglfR05VX1NPVVJDRQorKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysKKysjaWZuZGVmIElOU0lERV9SRUNVUlNJT04KKysjIGlmZGVmIEhBVkVfQ09ORklHX0gKKysjICBpbmNsdWRlIDxjb25maWcuaD4KKysjIGVuZGlmCisrI2VuZGlmCisrCisrLyojaW5jbHVkZSA8YW5zaWRlY2wuaD4qLworKworKworKyNpZm5kZWYgSU5TSURFX1JFQ1VSU0lPTgorKworKyMgaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgJiYgIWRlZmluZWQgZW1hY3MKKysjICBpbmNsdWRlIDxzdGRkZWYuaD4KKysjIGVsc2UKKysvKiBXZSBuZWVkIHRoaXMgZm9yIGByZWdleC5oJywgYW5kIHBlcmhhcHMgZm9yIHRoZSBFbWFjcyBpbmNsdWRlIGZpbGVzLiAgKi8KKysjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjIGVuZGlmCisrCisrIyBpZiAoZGVmaW5lZCBIQVZFX1dDVFlQRV9IICYmIGRlZmluZWQgSEFWRV9XQ0hBUl9IICYmIGRlZmluZWQgSEFWRV9CVE9XQykKKysjICBkZWZpbmUgV0lERV9DSEFSX1NVUFBPUlQgKEhBVkVfV0NUWVBFX0ggJiYgSEFWRV9XQ0hBUl9IICYmIEhBVkVfQlRPV0MpCisrIyBlbHNlCisrIyAgZGVmaW5lIFdJREVfQ0hBUl9TVVBQT1JUIDAKKysjIGVuZGlmCisrLyogRm9yIHBsYXRmb3JtIHdoaWNoIHN1cHBvcnQgdGhlIElTTyBDIGFtZW5kZW1lbnQgMSBmdW5jdGlvbmFsaXR5IHdlCisrICAgc3VwcG9ydCB1c2VyIGRlZmluZWQgY2hhcmFjdGVyIGNsYXNzZXMuICAqLworKyMgaWYgV0lERV9DSEFSX1NVUFBPUlQKKysvKiBTb2xhcmlzIDIuNSBoYXMgYSBidWc6IDx3Y2hhci5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSA8d2N0eXBlLmg+LiAgKi8KKysjICBpbmNsdWRlIDx3Y2hhci5oPgorKyMgIGluY2x1ZGUgPHdjdHlwZS5oPgorKyMgZW5kaWYKKysKKysjIGlmZGVmIF9MSUJDCisrLyogV2UgaGF2ZSB0byBrZWVwIHRoZSBuYW1lc3BhY2UgY2xlYW4uICAqLworKyMgIGRlZmluZSByZWdmcmVlKHByZWcpIF9fcmVnZnJlZSAocHJlZykKKysjICBkZWZpbmUgcmVnZXhlYyhwciwgc3QsIG5tLCBwbSwgZWYpIF9fcmVnZXhlYyAocHIsIHN0LCBubSwgcG0sIGVmKQorKyMgIGRlZmluZSByZWdjb21wKHByZWcsIHBhdHRlcm4sIGNmbGFncykgX19yZWdjb21wIChwcmVnLCBwYXR0ZXJuLCBjZmxhZ3MpCisrIyAgZGVmaW5lIHJlZ2Vycm9yKGVycmNvZGUsIHByZWcsIGVycmJ1ZiwgZXJyYnVmX3NpemUpIFwKKysJX19yZWdlcnJvcihlcnJjb2RlLCBwcmVnLCBlcnJidWYsIGVycmJ1Zl9zaXplKQorKyMgIGRlZmluZSByZV9zZXRfcmVnaXN0ZXJzKGJ1LCByZSwgbnUsIHN0LCBlbikgXAorKwlfX3JlX3NldF9yZWdpc3RlcnMgKGJ1LCByZSwgbnUsIHN0LCBlbikKKysjICBkZWZpbmUgcmVfbWF0Y2hfMihidWZwLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwgc2l6ZTIsIHBvcywgcmVncywgc3RvcCkgXAorKwlfX3JlX21hdGNoXzIgKGJ1ZnAsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLCBzaXplMiwgcG9zLCByZWdzLCBzdG9wKQorKyMgIGRlZmluZSByZV9tYXRjaChidWZwLCBzdHJpbmcsIHNpemUsIHBvcywgcmVncykgXAorKwlfX3JlX21hdGNoIChidWZwLCBzdHJpbmcsIHNpemUsIHBvcywgcmVncykKKysjICBkZWZpbmUgcmVfc2VhcmNoKGJ1ZnAsIHN0cmluZywgc2l6ZSwgc3RhcnRwb3MsIHJhbmdlLCByZWdzKSBcCisrCV9fcmVfc2VhcmNoIChidWZwLCBzdHJpbmcsIHNpemUsIHN0YXJ0cG9zLCByYW5nZSwgcmVncykKKysjICBkZWZpbmUgcmVfY29tcGlsZV9wYXR0ZXJuKHBhdHRlcm4sIGxlbmd0aCwgYnVmcCkgXAorKwlfX3JlX2NvbXBpbGVfcGF0dGVybiAocGF0dGVybiwgbGVuZ3RoLCBidWZwKQorKyMgIGRlZmluZSByZV9zZXRfc3ludGF4KHN5bnRheCkgX19yZV9zZXRfc3ludGF4IChzeW50YXgpCisrIyAgZGVmaW5lIHJlX3NlYXJjaF8yKGJ1ZnAsIHN0MSwgczEsIHN0MiwgczIsIHN0YXJ0cG9zLCByYW5nZSwgcmVncywgc3RvcCkgXAorKwlfX3JlX3NlYXJjaF8yIChidWZwLCBzdDEsIHMxLCBzdDIsIHMyLCBzdGFydHBvcywgcmFuZ2UsIHJlZ3MsIHN0b3ApCisrIyAgZGVmaW5lIHJlX2NvbXBpbGVfZmFzdG1hcChidWZwKSBfX3JlX2NvbXBpbGVfZmFzdG1hcCAoYnVmcCkKKysKKysjICBkZWZpbmUgYnRvd2MgX19idG93YworKworKy8qIFdlIGFyZSBhbHNvIHVzaW5nIHNvbWUgbGlicmFyeSBpbnRlcm5hbHMuICAqLworKyMgIGluY2x1ZGUgPGxvY2FsZS9sb2NhbGVpbmZvLmg+CisrIyAgaW5jbHVkZSA8bG9jYWxlL2VsZW0taGFzaC5oPgorKyMgIGluY2x1ZGUgPGxhbmdpbmZvLmg+CisrIyAgaW5jbHVkZSA8bG9jYWxlL2NvbGwtbG9va3VwLmg+CisrIyBlbmRpZgorKworKy8qIFRoaXMgaXMgZm9yIG90aGVyIEdOVSBkaXN0cmlidXRpb25zIHdpdGggaW50ZXJuYXRpb25hbGl6ZWQgbWVzc2FnZXMuICAqLworKyMgaWYgKEhBVkVfTElCSU5UTF9IICYmIEVOQUJMRV9OTFMpIHx8IGRlZmluZWQgX0xJQkMKKysjICBpbmNsdWRlIDxsaWJpbnRsLmg+CisrIyAgaWZkZWYgX0xJQkMKKysjICAgdW5kZWYgZ2V0dGV4dAorKyMgICBkZWZpbmUgZ2V0dGV4dChtc2dpZCkgX19kY2dldHRleHQgKCJsaWJjIiwgbXNnaWQsIExDX01FU1NBR0VTKQorKyMgIGVuZGlmCisrIyBlbHNlCisrIyAgZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKysjIGVuZGlmCisrCisrIyBpZm5kZWYgZ2V0dGV4dF9ub29wCisrLyogVGhpcyBkZWZpbmUgaXMgc28geGdldHRleHQgY2FuIGZpbmQgdGhlIGludGVybmF0aW9uYWxpemFibGUKKysgICBzdHJpbmdzLiAgKi8KKysjICBkZWZpbmUgZ2V0dGV4dF9ub29wKFN0cmluZykgU3RyaW5nCisrIyBlbmRpZgorKworKy8qIFRoZSBgZW1hY3MnIHN3aXRjaCB0dXJucyBvbiBjZXJ0YWluIG1hdGNoaW5nIGNvbW1hbmRzCisrICAgdGhhdCBtYWtlIHNlbnNlIG9ubHkgaW4gRW1hY3MuICovCisrIyBpZmRlZiBlbWFjcworKworKyMgIGluY2x1ZGUgImxpc3AuaCIKKysjICBpbmNsdWRlICJidWZmZXIuaCIKKysjICBpbmNsdWRlICJzeW50YXguaCIKKysKKysjIGVsc2UgIC8qIG5vdCBlbWFjcyAqLworKworKy8qIElmIHdlIGFyZSBub3QgbGlua2luZyB3aXRoIEVtYWNzIHByb3BlciwKKysgICB3ZSBjYW4ndCB1c2UgdGhlIHJlbG9jYXRpbmcgYWxsb2NhdG9yCisrICAgZXZlbiBpZiBjb25maWcuaCBzYXlzIHRoYXQgd2UgY2FuLiAgKi8KKysjICB1bmRlZiBSRUxfQUxMT0MKKysKKysjICBpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIF9MSUJDCisrIyAgIGluY2x1ZGUgPHN0ZGxpYi5oPgorKyMgIGVsc2UKKytjaGFyICptYWxsb2MgKCk7CisrY2hhciAqcmVhbGxvYyAoKTsKKysjICBlbmRpZgorKworKy8qIFdoZW4gdXNlZCBpbiBFbWFjcydzIGxpYi1zcmMsIHdlIG5lZWQgdG8gZ2V0IGJ6ZXJvIGFuZCBiY29weSBzb21laG93LgorKyAgIElmIG5vdGhpbmcgZWxzZSBoYXMgYmVlbiBkb25lLCB1c2UgdGhlIG1ldGhvZCBiZWxvdy4gICovCisrIyAgaWZkZWYgSU5ISUJJVF9TVFJJTkdfSEVBREVSCisrIyAgIGlmICEoZGVmaW5lZCBIQVZFX0JaRVJPICYmIGRlZmluZWQgSEFWRV9CQ09QWSkKKysjICAgIGlmICFkZWZpbmVkIGJ6ZXJvICYmICFkZWZpbmVkIGJjb3B5CisrIyAgICAgdW5kZWYgSU5ISUJJVF9TVFJJTkdfSEVBREVSCisrIyAgICBlbmRpZgorKyMgICBlbmRpZgorKyMgIGVuZGlmCisrCisrLyogVGhpcyBpcyB0aGUgbm9ybWFsIHdheSBvZiBtYWtpbmcgc3VyZSB3ZSBoYXZlIGEgYmNvcHkgYW5kIGEgYnplcm8uCisrICAgVGhpcyBpcyB1c2VkIGluIG1vc3QgcHJvZ3JhbXMtLWEgZmV3IG90aGVyIHByb2dyYW1zIGF2b2lkIHRoaXMKKysgICBieSBkZWZpbmluZyBJTkhJQklUX1NUUklOR19IRUFERVIuICAqLworKyMgIGlmbmRlZiBJTkhJQklUX1NUUklOR19IRUFERVIKKysjICAgaWYgZGVmaW5lZCBIQVZFX1NUUklOR19IIHx8IGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgX0xJQkMKKysjICAgIGluY2x1ZGUgPHN0cmluZy5oPgorKyMgICAgaWZuZGVmIGJ6ZXJvCisrIyAgICAgaWZuZGVmIF9MSUJDCisrIyAgICAgIGRlZmluZSBiemVybyhzLCBuKQkobWVtc2V0IChzLCAnXDAnLCBuKSwgKHMpKQorKyMgICAgIGVsc2UKKysjICAgICAgZGVmaW5lIGJ6ZXJvKHMsIG4pCV9fYnplcm8gKHMsIG4pCisrIyAgICAgZW5kaWYKKysjICAgIGVuZGlmCisrIyAgIGVsc2UKKysjICAgIGluY2x1ZGUgPHN0cmluZ3MuaD4KKysjICAgIGlmbmRlZiBtZW1jbXAKKysjICAgICBkZWZpbmUgbWVtY21wKHMxLCBzMiwgbikJYmNtcCAoczEsIHMyLCBuKQorKyMgICAgZW5kaWYKKysjICAgIGlmbmRlZiBtZW1jcHkKKysjICAgICBkZWZpbmUgbWVtY3B5KGQsIHMsIG4pCShiY29weSAocywgZCwgbiksIChkKSkKKysjICAgIGVuZGlmCisrIyAgIGVuZGlmCisrIyAgZW5kaWYKKysKKysvKiBEZWZpbmUgdGhlIHN5bnRheCBzdHVmZiBmb3IgXDwsIFw+LCBldGMuICAqLworKworKy8qIFRoaXMgbXVzdCBiZSBub256ZXJvIGZvciB0aGUgd29yZGNoYXIgYW5kIG5vdHdvcmRjaGFyIHBhdHRlcm4KKysgICBjb21tYW5kcyBpbiByZV9tYXRjaF8yLiAgKi8KKysjICBpZm5kZWYgU3dvcmQKKysjICAgZGVmaW5lIFN3b3JkIDEKKysjICBlbmRpZgorKworKyMgIGlmZGVmIFNXSVRDSF9FTlVNX0JVRworKyMgICBkZWZpbmUgU1dJVENIX0VOVU1fQ0FTVCh4KSAoKGludCkoeCkpCisrIyAgZWxzZQorKyMgICBkZWZpbmUgU1dJVENIX0VOVU1fQ0FTVCh4KSAoeCkKKysjICBlbmRpZgorKworKyMgZW5kaWYgLyogbm90IGVtYWNzICovCisrCisrIyBpZiBkZWZpbmVkIF9MSUJDIHx8IEhBVkVfTElNSVRTX0gKKysjICBpbmNsdWRlIDxsaW1pdHMuaD4KKysjIGVuZGlmCisrCisrIyBpZm5kZWYgTUJfTEVOX01BWAorKyMgIGRlZmluZSBNQl9MRU5fTUFYIDEKKysjIGVuZGlmCisrDAorKy8qIEdldCB0aGUgaW50ZXJmYWNlLCBpbmNsdWRpbmcgdGhlIHN5bnRheCBiaXRzLiAgKi8KKysjIGluY2x1ZGUgInJlZ2V4LmgiCisrCisrLyogaXNhbHBoYSBldGMuIGFyZSB1c2VkIGZvciB0aGUgY2hhcmFjdGVyIGNsYXNzZXMuICAqLworKyMgaW5jbHVkZSA8Y3R5cGUuaD4KKysKKysvKiBKaW0gTWV5ZXJpbmcgd3JpdGVzOgorKworKyAgICIuLi4gU29tZSBjdHlwZSBtYWNyb3MgYXJlIHZhbGlkIG9ubHkgZm9yIGNoYXJhY3RlciBjb2RlcyB0aGF0CisrICAgaXNhc2NpaSBzYXlzIGFyZSBBU0NJSSAoU0dJJ3MgSVJJWC00LjAuNSBpcyBvbmUgc3VjaCBzeXN0ZW0gLS13aGVuCisrICAgdXNpbmcgL2Jpbi9jYyBvciBnY2MgYnV0IHdpdGhvdXQgZ2l2aW5nIGFuIGFuc2kgb3B0aW9uKS4gIFNvLCBhbGwKKysgICBjdHlwZSB1c2VzIHNob3VsZCBiZSB0aHJvdWdoIG1hY3JvcyBsaWtlIElTUFJJTlQuLi4gIElmCisrICAgU1REQ19IRUFERVJTIGlzIGRlZmluZWQsIHRoZW4gYXV0b2NvbmYgaGFzIHZlcmlmaWVkIHRoYXQgdGhlIGN0eXBlCisrICAgbWFjcm9zIGRvbid0IG5lZWQgdG8gYmUgZ3VhcmRlZCB3aXRoIHJlZmVyZW5jZXMgdG8gaXNhc2NpaS4gLi4uCisrICAgRGVmaW5pbmcgaXNhc2NpaSB0byAxIHNob3VsZCBsZXQgYW55IGNvbXBpbGVyIHdvcnRoIGl0cyBzYWx0CisrICAgZWxpbWluYXRlIHRoZSAmJiB0aHJvdWdoIGNvbnN0YW50IGZvbGRpbmcuIgorKyAgIFNvbGFyaXMgZGVmaW5lcyBzb21lIG9mIHRoZXNlIHN5bWJvbHMgc28gd2UgbXVzdCB1bmRlZmluZSB0aGVtIGZpcnN0LiAgKi8KKysKKysjIHVuZGVmIElTQVNDSUkKKysjIGlmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8ICghZGVmaW5lZCBpc2FzY2lpICYmICFkZWZpbmVkIEhBVkVfSVNBU0NJSSkKKysjICBkZWZpbmUgSVNBU0NJSShjKSAxCisrIyBlbHNlCisrIyAgZGVmaW5lIElTQVNDSUkoYykgaXNhc2NpaShjKQorKyMgZW5kaWYKKysKKysjIGlmZGVmIGlzYmxhbmsKKysjICBkZWZpbmUgSVNCTEFOSyhjKSAoSVNBU0NJSSAoYykgJiYgaXNibGFuayAoYykpCisrIyBlbHNlCisrIyAgZGVmaW5lIElTQkxBTksoYykgKChjKSA9PSAnICcgfHwgKGMpID09ICdcdCcpCisrIyBlbmRpZgorKyMgaWZkZWYgaXNncmFwaAorKyMgIGRlZmluZSBJU0dSQVBIKGMpIChJU0FTQ0lJIChjKSAmJiBpc2dyYXBoIChjKSkKKysjIGVsc2UKKysjICBkZWZpbmUgSVNHUkFQSChjKSAoSVNBU0NJSSAoYykgJiYgaXNwcmludCAoYykgJiYgIWlzc3BhY2UgKGMpKQorKyMgZW5kaWYKKysKKysjIHVuZGVmIElTUFJJTlQKKysjIGRlZmluZSBJU1BSSU5UKGMpIChJU0FTQ0lJIChjKSAmJiBpc3ByaW50IChjKSkKKysjIGRlZmluZSBJU0RJR0lUKGMpIChJU0FTQ0lJIChjKSAmJiBpc2RpZ2l0IChjKSkKKysjIGRlZmluZSBJU0FMTlVNKGMpIChJU0FTQ0lJIChjKSAmJiBpc2FsbnVtIChjKSkKKysjIGRlZmluZSBJU0FMUEhBKGMpIChJU0FTQ0lJIChjKSAmJiBpc2FscGhhIChjKSkKKysjIGRlZmluZSBJU0NOVFJMKGMpIChJU0FTQ0lJIChjKSAmJiBpc2NudHJsIChjKSkKKysjIGRlZmluZSBJU0xPV0VSKGMpIChJU0FTQ0lJIChjKSAmJiBpc2xvd2VyIChjKSkKKysjIGRlZmluZSBJU1BVTkNUKGMpIChJU0FTQ0lJIChjKSAmJiBpc3B1bmN0IChjKSkKKysjIGRlZmluZSBJU1NQQUNFKGMpIChJU0FTQ0lJIChjKSAmJiBpc3NwYWNlIChjKSkKKysjIGRlZmluZSBJU1VQUEVSKGMpIChJU0FTQ0lJIChjKSAmJiBpc3VwcGVyIChjKSkKKysjIGRlZmluZSBJU1hESUdJVChjKSAoSVNBU0NJSSAoYykgJiYgaXN4ZGlnaXQgKGMpKQorKworKyMgaWZkZWYgX3RvbG93ZXIKKysjICBkZWZpbmUgVE9MT1dFUihjKSBfdG9sb3dlcihjKQorKyMgZWxzZQorKyMgIGRlZmluZSBUT0xPV0VSKGMpIHRvbG93ZXIoYykKKysjIGVuZGlmCisrCisrIyBpZm5kZWYgTlVMTAorKyMgIGRlZmluZSBOVUxMICh2b2lkICopMAorKyMgZW5kaWYKKysKKysvKiBXZSByZW1vdmUgYW55IHByZXZpb3VzIGRlZmluaXRpb24gb2YgYFNJR05fRVhURU5EX0NIQVInLAorKyAgIHNpbmNlIG91cnMgKHdlIGhvcGUpIHdvcmtzIHByb3Blcmx5IHdpdGggYWxsIGNvbWJpbmF0aW9ucyBvZgorKyAgIG1hY2hpbmVzLCBjb21waWxlcnMsIGBjaGFyJyBhbmQgYHVuc2lnbmVkIGNoYXInIGFyZ3VtZW50IHR5cGVzLgorKyAgIChQZXIgQm90aG5lciBzdWdnZXN0ZWQgdGhlIGJhc2ljIGFwcHJvYWNoLikgICovCisrIyB1bmRlZiBTSUdOX0VYVEVORF9DSEFSCisrIyBpZiBfX1NURENfXworKyMgIGRlZmluZSBTSUdOX0VYVEVORF9DSEFSKGMpICgoc2lnbmVkIGNoYXIpIChjKSkKKysjIGVsc2UgIC8qIG5vdCBfX1NURENfXyAqLworKy8qIEFzIGluIEhhcmJpc29uIGFuZCBTdGVlbGUuICAqLworKyMgIGRlZmluZSBTSUdOX0VYVEVORF9DSEFSKGMpICgoKCh1bnNpZ25lZCBjaGFyKSAoYykpIF4gMTI4KSAtIDEyOCkKKysjIGVuZGlmCisrDAorKyMgaWZuZGVmIGVtYWNzCisrLyogSG93IG1hbnkgY2hhcmFjdGVycyBpbiB0aGUgY2hhcmFjdGVyIHNldC4gICovCisrIyAgZGVmaW5lIENIQVJfU0VUX1NJWkUgMjU2CisrCisrIyAgaWZkZWYgU1lOVEFYX1RBQkxFCisrCisrZXh0ZXJuIGNoYXIgKnJlX3N5bnRheF90YWJsZTsKKysKKysjICBlbHNlIC8qIG5vdCBTWU5UQVhfVEFCTEUgKi8KKysKKytzdGF0aWMgY2hhciByZV9zeW50YXhfdGFibGVbQ0hBUl9TRVRfU0laRV07CisrCisrc3RhdGljIHZvaWQgaW5pdF9zeW50YXhfb25jZSAodm9pZCk7CisrCisrc3RhdGljIHZvaWQKKytpbml0X3N5bnRheF9vbmNlICh2b2lkKQorK3sKKysgICByZWdpc3RlciBpbnQgYzsKKysgICBzdGF0aWMgaW50IGRvbmUgPSAwOworKworKyAgIGlmIChkb25lKQorKyAgICAgcmV0dXJuOworKyAgIGJ6ZXJvIChyZV9zeW50YXhfdGFibGUsIHNpemVvZiByZV9zeW50YXhfdGFibGUpOworKworKyAgIGZvciAoYyA9IDA7IGMgPCBDSEFSX1NFVF9TSVpFOyArK2MpCisrICAgICBpZiAoSVNBTE5VTSAoYykpCisrCXJlX3N5bnRheF90YWJsZVtjXSA9IFN3b3JkOworKworKyAgIHJlX3N5bnRheF90YWJsZVsnXyddID0gU3dvcmQ7CisrCisrICAgZG9uZSA9IDE7CisrfQorKworKyMgIGVuZGlmIC8qIG5vdCBTWU5UQVhfVEFCTEUgKi8KKysKKysjICBkZWZpbmUgU1lOVEFYKGMpIHJlX3N5bnRheF90YWJsZVsodW5zaWduZWQgY2hhcikgKGMpXQorKworKyMgZW5kaWYgLyogZW1hY3MgKi8KKysMCisrLyogSW50ZWdlciB0eXBlIGZvciBwb2ludGVycy4gICovCisrIyBpZiAhZGVmaW5lZCBfTElCQyAmJiAhZGVmaW5lZCBIQVZFX1VJTlRQVFJfVAorK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWludHB0cl90OworKyMgZW5kaWYKKysKKysvKiBTaG91bGQgd2UgdXNlIG1hbGxvYyBvciBhbGxvY2E/ICBJZiBSRUdFWF9NQUxMT0MgaXMgbm90IGRlZmluZWQsIHdlCisrICAgdXNlIGBhbGxvY2EnIGluc3RlYWQgb2YgYG1hbGxvYycuICBUaGlzIGlzIGJlY2F1c2UgdXNpbmcgbWFsbG9jIGluCisrICAgcmVfc2VhcmNoKiBvciByZV9tYXRjaCogY291bGQgY2F1c2UgbWVtb3J5IGxlYWtzIHdoZW4gQy1nIGlzIHVzZWQgaW4KKysgICBFbWFjczsgYWxzbywgbWFsbG9jIGlzIHNsb3dlciBhbmQgY2F1c2VzIHN0b3JhZ2UgZnJhZ21lbnRhdGlvbi4gIE9uCisrICAgdGhlIG90aGVyIGhhbmQsIG1hbGxvYyBpcyBtb3JlIHBvcnRhYmxlLCBhbmQgZWFzaWVyIHRvIGRlYnVnLgorKworKyAgIEJlY2F1c2Ugd2Ugc29tZXRpbWVzIHVzZSBhbGxvY2EsIHNvbWUgcm91dGluZXMgaGF2ZSB0byBiZSBtYWNyb3MsCisrICAgbm90IGZ1bmN0aW9ucyAtLSBgYWxsb2NhJy1hbGxvY2F0ZWQgc3BhY2UgZGlzYXBwZWFycyBhdCB0aGUgZW5kIG9mIHRoZQorKyAgIGZ1bmN0aW9uIGl0IGlzIGNhbGxlZCBpbi4gICovCisrCisrIyBpZmRlZiBSRUdFWF9NQUxMT0MKKysKKysjICBkZWZpbmUgUkVHRVhfQUxMT0NBVEUgbWFsbG9jCisrIyAgZGVmaW5lIFJFR0VYX1JFQUxMT0NBVEUoc291cmNlLCBvc2l6ZSwgbnNpemUpIHJlYWxsb2MgKHNvdXJjZSwgbnNpemUpCisrIyAgZGVmaW5lIFJFR0VYX0ZSRUUgZnJlZQorKworKyMgZWxzZSAvKiBub3QgUkVHRVhfTUFMTE9DICAqLworKworKy8qIEVtYWNzIGFscmVhZHkgZGVmaW5lcyBhbGxvY2EsIHNvbWV0aW1lcy4gICovCisrIyAgaWZuZGVmIGFsbG9jYQorKworKy8qIE1ha2UgYWxsb2NhIHdvcmsgdGhlIGJlc3QgcG9zc2libGUgd2F5LiAgKi8KKysjICAgaWZkZWYgX19HTlVDX18KKysjICAgIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorKyMgICBlbHNlIC8qIG5vdCBfX0dOVUNfXyAqLworKyMgICAgaWYgSEFWRV9BTExPQ0FfSAorKyMgICAgIGluY2x1ZGUgPGFsbG9jYS5oPgorKyMgICAgZW5kaWYgLyogSEFWRV9BTExPQ0FfSCAqLworKyMgICBlbmRpZiAvKiBub3QgX19HTlVDX18gKi8KKysKKysjICBlbmRpZiAvKiBub3QgYWxsb2NhICovCisrCisrIyAgZGVmaW5lIFJFR0VYX0FMTE9DQVRFIGFsbG9jYQorKworKy8qIEFzc3VtZXMgYSBgY2hhciAqZGVzdGluYXRpb24nIHZhcmlhYmxlLiAgKi8KKysjICBkZWZpbmUgUkVHRVhfUkVBTExPQ0FURShzb3VyY2UsIG9zaXplLCBuc2l6ZSkJCQlcCisrICAoZGVzdGluYXRpb24gPSAoY2hhciAqKSBhbGxvY2EgKG5zaXplKSwJCQkJXAorKyAgIG1lbWNweSAoZGVzdGluYXRpb24sIHNvdXJjZSwgb3NpemUpKQorKworKy8qIE5vIG5lZWQgdG8gZG8gYW55dGhpbmcgdG8gZnJlZSwgYWZ0ZXIgYWxsb2NhLiAgKi8KKysjICBkZWZpbmUgUkVHRVhfRlJFRShhcmcpICgodm9pZCkwKSAvKiBEbyBub3RoaW5nISAgQnV0IGluaGliaXQgZ2NjIHdhcm5pbmcuICAqLworKworKyMgZW5kaWYgLyogbm90IFJFR0VYX01BTExPQyAqLworKworKy8qIERlZmluZSBob3cgdG8gYWxsb2NhdGUgdGhlIGZhaWx1cmUgc3RhY2suICAqLworKworKyMgaWYgZGVmaW5lZCBSRUxfQUxMT0MgJiYgZGVmaW5lZCBSRUdFWF9NQUxMT0MKKysKKysjICBkZWZpbmUgUkVHRVhfQUxMT0NBVEVfU1RBQ0soc2l6ZSkJCQkJXAorKyAgcl9hbGxvYyAoJmZhaWx1cmVfc3RhY2tfcHRyLCAoc2l6ZSkpCisrIyAgZGVmaW5lIFJFR0VYX1JFQUxMT0NBVEVfU1RBQ0soc291cmNlLCBvc2l6ZSwgbnNpemUpCQlcCisrICByX3JlX2FsbG9jICgmZmFpbHVyZV9zdGFja19wdHIsIChuc2l6ZSkpCisrIyAgZGVmaW5lIFJFR0VYX0ZSRUVfU1RBQ0socHRyKQkJCQkJXAorKyAgcl9hbGxvY19mcmVlICgmZmFpbHVyZV9zdGFja19wdHIpCisrCisrIyBlbHNlIC8qIG5vdCB1c2luZyByZWxvY2F0aW5nIGFsbG9jYXRvciAqLworKworKyMgIGlmZGVmIFJFR0VYX01BTExPQworKworKyMgICBkZWZpbmUgUkVHRVhfQUxMT0NBVEVfU1RBQ0sgbWFsbG9jCisrIyAgIGRlZmluZSBSRUdFWF9SRUFMTE9DQVRFX1NUQUNLKHNvdXJjZSwgb3NpemUsIG5zaXplKSByZWFsbG9jIChzb3VyY2UsIG5zaXplKQorKyMgICBkZWZpbmUgUkVHRVhfRlJFRV9TVEFDSyBmcmVlCisrCisrIyAgZWxzZSAvKiBub3QgUkVHRVhfTUFMTE9DICovCisrCisrIyAgIGRlZmluZSBSRUdFWF9BTExPQ0FURV9TVEFDSyBhbGxvY2EKKysKKysjICAgZGVmaW5lIFJFR0VYX1JFQUxMT0NBVEVfU1RBQ0soc291cmNlLCBvc2l6ZSwgbnNpemUpCQkJXAorKyAgIFJFR0VYX1JFQUxMT0NBVEUgKHNvdXJjZSwgb3NpemUsIG5zaXplKQorKy8qIE5vIG5lZWQgdG8gZXhwbGljaXRseSBmcmVlIGFueXRoaW5nLiAgKi8KKysjICAgZGVmaW5lIFJFR0VYX0ZSRUVfU1RBQ0soYXJnKQorKworKyMgIGVuZGlmIC8qIG5vdCBSRUdFWF9NQUxMT0MgKi8KKysjIGVuZGlmIC8qIG5vdCB1c2luZyByZWxvY2F0aW5nIGFsbG9jYXRvciAqLworKworKworKy8qIFRydWUgaWYgYHNpemUxJyBpcyBub24tTlVMTCBhbmQgUFRSIGlzIHBvaW50aW5nIGFueXdoZXJlIGluc2lkZQorKyAgIGBzdHJpbmcxJyBvciBqdXN0IHBhc3QgaXRzIGVuZC4gIFRoaXMgd29ya3MgaWYgUFRSIGlzIE5VTEwsIHdoaWNoIGlzCisrICAgYSBnb29kIHRoaW5nLiAgKi8KKysjIGRlZmluZSBGSVJTVF9TVFJJTkdfUChwdHIpIAkJCQkJXAorKyAgKHNpemUxICYmIHN0cmluZzEgPD0gKHB0cikgJiYgKHB0cikgPD0gc3RyaW5nMSArIHNpemUxKQorKworKy8qIChSZSlBbGxvY2F0ZSBOIGl0ZW1zIG9mIHR5cGUgVCB1c2luZyBtYWxsb2MsIG9yIGZhaWwuICAqLworKyMgZGVmaW5lIFRBTExPQyhuLCB0KSAoKHQgKikgbWFsbG9jICgobikgKiBzaXplb2YgKHQpKSkKKysjIGRlZmluZSBSRVRBTExPQyhhZGRyLCBuLCB0KSAoKGFkZHIpID0gKHQgKikgcmVhbGxvYyAoYWRkciwgKG4pICogc2l6ZW9mICh0KSkpCisrIyBkZWZpbmUgUkVUQUxMT0NfSUYoYWRkciwgbiwgdCkgXAorKyAgaWYgKGFkZHIpIFJFVEFMTE9DKChhZGRyKSwgKG4pLCB0KTsgZWxzZSAoYWRkcikgPSBUQUxMT0MgKChuKSwgdCkKKysjIGRlZmluZSBSRUdFWF9UQUxMT0MobiwgdCkgKCh0ICopIFJFR0VYX0FMTE9DQVRFICgobikgKiBzaXplb2YgKHQpKSkKKysKKysjIGRlZmluZSBCWVRFV0lEVEggOCAvKiBJbiBiaXRzLiAgKi8KKysKKysjIGRlZmluZSBTVFJFUShzMSwgczIpICgoc3RyY21wIChzMSwgczIpID09IDApKQorKworKyMgdW5kZWYgTUFYCisrIyB1bmRlZiBNSU4KKysjIGRlZmluZSBNQVgoYSwgYikgKChhKSA+IChiKSA/IChhKSA6IChiKSkKKysjIGRlZmluZSBNSU4oYSwgYikgKChhKSA8IChiKSA/IChhKSA6IChiKSkKKysKKyt0eXBlZGVmIGNoYXIgYm9vbGVhbjsKKysjIGRlZmluZSBmYWxzZSAwCisrIyBkZWZpbmUgdHJ1ZSAxCisrCisrc3RhdGljIHJlZ19lcnJjb2RlX3QgYnl0ZV9yZWdleF9jb21waWxlIChjb25zdCBjaGFyICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnApOworKworK3N0YXRpYyBpbnQgYnl0ZV9yZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZzEsIGludCBzaXplMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nMiwgaW50IHNpemUyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9zLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RvcCk7Cisrc3RhdGljIGludCBieXRlX3JlX3NlYXJjaF8yIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcxLCBpbnQgc2l6ZTEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcyLCBpbnQgc2l6ZTIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnRwb3MsIGludCByYW5nZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsIGludCBzdG9wKTsKKytzdGF0aWMgaW50IGJ5dGVfcmVfY29tcGlsZV9mYXN0bWFwIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnApOworKworKyNpZmRlZiBNQlNfU1VQUE9SVAorK3N0YXRpYyByZWdfZXJyY29kZV90IHdjc19yZWdleF9jb21waWxlIChjb25zdCBjaGFyICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwKTsKKysKKysKKytzdGF0aWMgaW50IHdjc19yZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY3N0cmluZzEsIGludCBjc2l6ZTEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY3N0cmluZzIsIGludCBjc2l6ZTIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdG9wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKnN0cmluZzEsIGludCBzaXplMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICpzdHJpbmcyLCBpbnQgc2l6ZTIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICptYnNfb2Zmc2V0MSwgaW50ICptYnNfb2Zmc2V0Mik7Cisrc3RhdGljIGludCB3Y3NfcmVfc2VhcmNoXzIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nMSwgaW50IHNpemUxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcyLCBpbnQgc2l6ZTIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydHBvcywgaW50IHJhbmdlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLCBpbnQgc3RvcCk7Cisrc3RhdGljIGludCB3Y3NfcmVfY29tcGlsZV9mYXN0bWFwIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnApOworKyNlbmRpZgorKwwKKysvKiBUaGVzZSBhcmUgdGhlIGNvbW1hbmQgY29kZXMgdGhhdCBhcHBlYXIgaW4gY29tcGlsZWQgcmVndWxhcgorKyAgIGV4cHJlc3Npb25zLiAgU29tZSBvcGNvZGVzIGFyZSBmb2xsb3dlZCBieSBhcmd1bWVudCBieXRlcy4gIEEKKysgICBjb21tYW5kIGNvZGUgY2FuIHNwZWNpZnkgYW55IGludGVycHJldGF0aW9uIHdoYXRzb2V2ZXIgZm9yIGl0cworKyAgIGFyZ3VtZW50cy4gIFplcm8gYnl0ZXMgbWF5IGFwcGVhciBpbiB0aGUgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9uLiAgKi8KKysKKyt0eXBlZGVmIGVudW0KKyt7CisrICBub19vcCA9IDAsCisrCisrICAvKiBTdWNjZWVkIHJpZ2h0IGF3YXktLW5vIG1vcmUgYmFja3RyYWNraW5nLiAgKi8KKysgIHN1Y2NlZWQsCisrCisrICAgICAgICAvKiBGb2xsb3dlZCBieSBvbmUgYnl0ZSBnaXZpbmcgbiwgdGhlbiBieSBuIGxpdGVyYWwgYnl0ZXMuICAqLworKyAgZXhhY3RuLAorKworKyMgaWZkZWYgTUJTX1NVUFBPUlQKKysJLyogU2FtZSBhcyBleGFjdG4sIGJ1dCBjb250YWlucyBiaW5hcnkgZGF0YS4gICovCisrICBleGFjdG5fYmluLAorKyMgZW5kaWYKKysKKysgICAgICAgIC8qIE1hdGNoZXMgYW55IChtb3JlIG9yIGxlc3MpIGNoYXJhY3Rlci4gICovCisrICBhbnljaGFyLAorKworKyAgICAgICAgLyogTWF0Y2hlcyBhbnkgb25lIGNoYXIgYmVsb25naW5nIHRvIHNwZWNpZmllZCBzZXQuICBGaXJzdAorKyAgICAgICAgICAgZm9sbG93aW5nIGJ5dGUgaXMgbnVtYmVyIG9mIGJpdG1hcCBieXRlcy4gIFRoZW4gY29tZSBieXRlcworKyAgICAgICAgICAgZm9yIGEgYml0bWFwIHNheWluZyB3aGljaCBjaGFycyBhcmUgaW4uICBCaXRzIGluIGVhY2ggYnl0ZQorKyAgICAgICAgICAgYXJlIG9yZGVyZWQgbG93LWJpdC1maXJzdC4gIEEgY2hhcmFjdGVyIGlzIGluIHRoZSBzZXQgaWYgaXRzCisrICAgICAgICAgICBiaXQgaXMgMS4gIEEgY2hhcmFjdGVyIHRvbyBsYXJnZSB0byBoYXZlIGEgYml0IGluIHRoZSBtYXAgaXMKKysgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgbm90IGluIHRoZSBzZXQuICAqLworKyAgICAgICAgLyogaWZkZWYgTUJTX1NVUFBPUlQsIGZvbGxvd2luZyBlbGVtZW50IGlzIGxlbmd0aCBvZiBjaGFyYWN0ZXIKKysJICAgY2xhc3NlcywgbGVuZ3RoIG9mIGNvbGxhdGluZyBzeW1ib2xzLCBsZW5ndGggb2YgZXF1aXZhbGVuY2UKKysJICAgY2xhc3NlcywgbGVuZ3RoIG9mIGNoYXJhY3RlciByYW5nZXMsIGFuZCBsZW5ndGggb2YgY2hhcmFjdGVycy4KKysJICAgTmV4dCwgY2hhcmFjdGVyIGNsYXNzIGVsZW1lbnQsIGNvbGxhdGluZyBzeW1ib2xzIGVsZW1lbnRzLAorKwkgICBlcXVpdmFsZW5jZSBjbGFzcyBlbGVtZW50cywgcmFuZ2UgZWxlbWVudHMsIGFuZCBjaGFyYWN0ZXIKKysJICAgZWxlbWVudHMgZm9sbG93LgorKwkgICBTZWUgcmVnZXhfY29tcGlsZSBmdW5jdGlvbi4gICovCisrICBjaGFyc2V0LAorKworKyAgICAgICAgLyogU2FtZSBwYXJhbWV0ZXJzIGFzIGNoYXJzZXQsIGJ1dCBtYXRjaCBhbnkgY2hhcmFjdGVyIHRoYXQgaXMKKysgICAgICAgICAgIG5vdCBvbmUgb2YgdGhvc2Ugc3BlY2lmaWVkLiAgKi8KKysgIGNoYXJzZXRfbm90LAorKworKyAgICAgICAgLyogU3RhcnQgcmVtZW1iZXJpbmcgdGhlIHRleHQgdGhhdCBpcyBtYXRjaGVkLCBmb3Igc3RvcmluZyBpbiBhCisrICAgICAgICAgICByZWdpc3Rlci4gIEZvbGxvd2VkIGJ5IG9uZSBieXRlIHdpdGggdGhlIHJlZ2lzdGVyIG51bWJlciwgaW4KKysgICAgICAgICAgIHRoZSByYW5nZSAwIHRvIG9uZSBsZXNzIHRoYW4gdGhlIHBhdHRlcm4gYnVmZmVyJ3MgcmVfbnN1YgorKyAgICAgICAgICAgZmllbGQuICBUaGVuIGZvbGxvd2VkIGJ5IG9uZSBieXRlIHdpdGggdGhlIG51bWJlciBvZiBncm91cHMKKysgICAgICAgICAgIGlubmVyIHRvIHRoaXMgb25lLiAgKFRoaXMgbGFzdCBoYXMgdG8gYmUgcGFydCBvZiB0aGUKKysgICAgICAgICAgIHN0YXJ0X21lbW9yeSBvbmx5IGJlY2F1c2Ugd2UgbmVlZCBpdCBpbiB0aGUgb25fZmFpbHVyZV9qdW1wCisrICAgICAgICAgICBvZiByZV9tYXRjaF8yLikgICovCisrICBzdGFydF9tZW1vcnksCisrCisrICAgICAgICAvKiBTdG9wIHJlbWVtYmVyaW5nIHRoZSB0ZXh0IHRoYXQgaXMgbWF0Y2hlZCBhbmQgc3RvcmUgaXQgaW4gYQorKyAgICAgICAgICAgbWVtb3J5IHJlZ2lzdGVyLiAgRm9sbG93ZWQgYnkgb25lIGJ5dGUgd2l0aCB0aGUgcmVnaXN0ZXIKKysgICAgICAgICAgIG51bWJlciwgaW4gdGhlIHJhbmdlIDAgdG8gb25lIGxlc3MgdGhhbiBgcmVfbnN1YicgaW4gdGhlCisrICAgICAgICAgICBwYXR0ZXJuIGJ1ZmZlciwgYW5kIG9uZSBieXRlIHdpdGggdGhlIG51bWJlciBvZiBpbm5lciBncm91cHMsCisrICAgICAgICAgICBqdXN0IGxpa2UgYHN0YXJ0X21lbW9yeScuICAoV2UgbmVlZCB0aGUgbnVtYmVyIG9mIGlubmVyCisrICAgICAgICAgICBncm91cHMgaGVyZSBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYW55IGVhc3kgd2F5IG9mIGZpbmRpbmcgdGhlCisrICAgICAgICAgICBjb3JyZXNwb25kaW5nIHN0YXJ0X21lbW9yeSB3aGVuIHdlJ3JlIGF0IGEgc3RvcF9tZW1vcnkuKSAgKi8KKysgIHN0b3BfbWVtb3J5LAorKworKyAgICAgICAgLyogTWF0Y2ggYSBkdXBsaWNhdGUgb2Ygc29tZXRoaW5nIHJlbWVtYmVyZWQuIEZvbGxvd2VkIGJ5IG9uZQorKyAgICAgICAgICAgYnl0ZSBjb250YWluaW5nIHRoZSByZWdpc3RlciBudW1iZXIuICAqLworKyAgZHVwbGljYXRlLAorKworKyAgICAgICAgLyogRmFpbCB1bmxlc3MgYXQgYmVnaW5uaW5nIG9mIGxpbmUuICAqLworKyAgYmVnbGluZSwKKysKKysgICAgICAgIC8qIEZhaWwgdW5sZXNzIGF0IGVuZCBvZiBsaW5lLiAgKi8KKysgIGVuZGxpbmUsCisrCisrICAgICAgICAvKiBTdWNjZWVkcyBpZiBhdCBiZWdpbm5pbmcgb2YgYnVmZmVyIChpZiBlbWFjcykgb3IgYXQgYmVnaW5uaW5nCisrICAgICAgICAgICBvZiBzdHJpbmcgdG8gYmUgbWF0Y2hlZCAoaWYgbm90KS4gICovCisrICBiZWdidWYsCisrCisrICAgICAgICAvKiBBbmFsb2dvdXNseSwgZm9yIGVuZCBvZiBidWZmZXIvc3RyaW5nLiAgKi8KKysgIGVuZGJ1ZiwKKysKKysgICAgICAgIC8qIEZvbGxvd2VkIGJ5IHR3byBieXRlIHJlbGF0aXZlIGFkZHJlc3MgdG8gd2hpY2ggdG8ganVtcC4gICovCisrICBqdW1wLAorKworKwkvKiBTYW1lIGFzIGp1bXAsIGJ1dCBtYXJrcyB0aGUgZW5kIG9mIGFuIGFsdGVybmF0aXZlLiAgKi8KKysgIGp1bXBfcGFzdF9hbHQsCisrCisrICAgICAgICAvKiBGb2xsb3dlZCBieSB0d28tYnl0ZSByZWxhdGl2ZSBhZGRyZXNzIG9mIHBsYWNlIHRvIHJlc3VtZSBhdAorKyAgICAgICAgICAgaW4gY2FzZSBvZiBmYWlsdXJlLiAgKi8KKysgICAgICAgIC8qIGlmZGVmIE1CU19TVVBQT1JULCB0aGUgc2l6ZSBvZiBhZGRyZXNzIGlzIDEuICAqLworKyAgb25fZmFpbHVyZV9qdW1wLAorKworKyAgICAgICAgLyogTGlrZSBvbl9mYWlsdXJlX2p1bXAsIGJ1dCBwdXNoZXMgYSBwbGFjZWhvbGRlciBpbnN0ZWFkIG9mIHRoZQorKyAgICAgICAgICAgY3VycmVudCBzdHJpbmcgcG9zaXRpb24gd2hlbiBleGVjdXRlZC4gICovCisrICBvbl9mYWlsdXJlX2tlZXBfc3RyaW5nX2p1bXAsCisrCisrICAgICAgICAvKiBUaHJvdyBhd2F5IGxhdGVzdCBmYWlsdXJlIHBvaW50IGFuZCB0aGVuIGp1bXAgdG8gZm9sbG93aW5nCisrICAgICAgICAgICB0d28tYnl0ZSByZWxhdGl2ZSBhZGRyZXNzLiAgKi8KKysgICAgICAgIC8qIGlmZGVmIE1CU19TVVBQT1JULCB0aGUgc2l6ZSBvZiBhZGRyZXNzIGlzIDEuICAqLworKyAgcG9wX2ZhaWx1cmVfanVtcCwKKysKKysgICAgICAgIC8qIENoYW5nZSB0byBwb3BfZmFpbHVyZV9qdW1wIGlmIGtub3cgd29uJ3QgaGF2ZSB0byBiYWNrdHJhY2sgdG8KKysgICAgICAgICAgIG1hdGNoOyBvdGhlcndpc2UgY2hhbmdlIHRvIGp1bXAuICBUaGlzIGlzIHVzZWQgdG8ganVtcAorKyAgICAgICAgICAgYmFjayB0byB0aGUgYmVnaW5uaW5nIG9mIGEgcmVwZWF0LiAgSWYgd2hhdCBmb2xsb3dzIHRoaXMganVtcAorKyAgICAgICAgICAgY2xlYXJseSB3b24ndCBtYXRjaCB3aGF0IHRoZSByZXBlYXQgZG9lcywgc3VjaCB0aGF0IHdlIGNhbiBiZQorKyAgICAgICAgICAgc3VyZSB0aGF0IHRoZXJlIGlzIG5vIHVzZSBiYWNrdHJhY2tpbmcgb3V0IG9mIHJlcGV0aXRpb25zCisrICAgICAgICAgICBhbHJlYWR5IG1hdGNoZWQsIHRoZW4gd2UgY2hhbmdlIGl0IHRvIGEgcG9wX2ZhaWx1cmVfanVtcC4KKysgICAgICAgICAgIEZvbGxvd2VkIGJ5IHR3by1ieXRlIGFkZHJlc3MuICAqLworKyAgICAgICAgLyogaWZkZWYgTUJTX1NVUFBPUlQsIHRoZSBzaXplIG9mIGFkZHJlc3MgaXMgMS4gICovCisrICBtYXliZV9wb3BfanVtcCwKKysKKysgICAgICAgIC8qIEp1bXAgdG8gZm9sbG93aW5nIHR3by1ieXRlIGFkZHJlc3MsIGFuZCBwdXNoIGEgZHVtbXkgZmFpbHVyZQorKyAgICAgICAgICAgcG9pbnQuIFRoaXMgZmFpbHVyZSBwb2ludCB3aWxsIGJlIHRocm93biBhd2F5IGlmIGFuIGF0dGVtcHQKKysgICAgICAgICAgIGlzIG1hZGUgdG8gdXNlIGl0IGZvciBhIGZhaWx1cmUuICBBIGArJyBjb25zdHJ1Y3QgbWFrZXMgdGhpcworKyAgICAgICAgICAgYmVmb3JlIHRoZSBmaXJzdCByZXBlYXQuICBBbHNvIHVzZWQgYXMgYW4gaW50ZXJtZWRpYXJ5IGtpbmQKKysgICAgICAgICAgIG9mIGp1bXAgd2hlbiBjb21waWxpbmcgYW4gYWx0ZXJuYXRpdmUuICAqLworKyAgICAgICAgLyogaWZkZWYgTUJTX1NVUFBPUlQsIHRoZSBzaXplIG9mIGFkZHJlc3MgaXMgMS4gICovCisrICBkdW1teV9mYWlsdXJlX2p1bXAsCisrCisrCS8qIFB1c2ggYSBkdW1teSBmYWlsdXJlIHBvaW50IGFuZCBjb250aW51ZS4gIFVzZWQgYXQgdGhlIGVuZCBvZgorKwkgICBhbHRlcm5hdGl2ZXMuICAqLworKyAgcHVzaF9kdW1teV9mYWlsdXJlLAorKworKyAgICAgICAgLyogRm9sbG93ZWQgYnkgdHdvLWJ5dGUgcmVsYXRpdmUgYWRkcmVzcyBhbmQgdHdvLWJ5dGUgbnVtYmVyIG4uCisrICAgICAgICAgICBBZnRlciBtYXRjaGluZyBOIHRpbWVzLCBqdW1wIHRvIHRoZSBhZGRyZXNzIHVwb24gZmFpbHVyZS4gICovCisrICAgICAgICAvKiBpZmRlZiBNQlNfU1VQUE9SVCwgdGhlIHNpemUgb2YgYWRkcmVzcyBpcyAxLiAgKi8KKysgIHN1Y2NlZWRfbiwKKysKKysgICAgICAgIC8qIEZvbGxvd2VkIGJ5IHR3by1ieXRlIHJlbGF0aXZlIGFkZHJlc3MsIGFuZCB0d28tYnl0ZSBudW1iZXIgbi4KKysgICAgICAgICAgIEp1bXAgdG8gdGhlIGFkZHJlc3MgTiB0aW1lcywgdGhlbiBmYWlsLiAgKi8KKysgICAgICAgIC8qIGlmZGVmIE1CU19TVVBQT1JULCB0aGUgc2l6ZSBvZiBhZGRyZXNzIGlzIDEuICAqLworKyAganVtcF9uLAorKworKyAgICAgICAgLyogU2V0IHRoZSBmb2xsb3dpbmcgdHdvLWJ5dGUgcmVsYXRpdmUgYWRkcmVzcyB0byB0aGUKKysgICAgICAgICAgIHN1YnNlcXVlbnQgdHdvLWJ5dGUgbnVtYmVyLiAgVGhlIGFkZHJlc3MgKmluY2x1ZGVzKiB0aGUgdHdvCisrICAgICAgICAgICBieXRlcyBvZiBudW1iZXIuICAqLworKyAgICAgICAgLyogaWZkZWYgTUJTX1NVUFBPUlQsIHRoZSBzaXplIG9mIGFkZHJlc3MgaXMgMS4gICovCisrICBzZXRfbnVtYmVyX2F0LAorKworKyAgd29yZGNoYXIsCS8qIE1hdGNoZXMgYW55IHdvcmQtY29uc3RpdHVlbnQgY2hhcmFjdGVyLiAgKi8KKysgIG5vdHdvcmRjaGFyLAkvKiBNYXRjaGVzIGFueSBjaGFyIHRoYXQgaXMgbm90IGEgd29yZC1jb25zdGl0dWVudC4gICovCisrCisrICB3b3JkYmVnLAkvKiBTdWNjZWVkcyBpZiBhdCB3b3JkIGJlZ2lubmluZy4gICovCisrICB3b3JkZW5kLAkvKiBTdWNjZWVkcyBpZiBhdCB3b3JkIGVuZC4gICovCisrCisrICB3b3JkYm91bmQsCS8qIFN1Y2NlZWRzIGlmIGF0IGEgd29yZCBib3VuZGFyeS4gICovCisrICBub3R3b3JkYm91bmQJLyogU3VjY2VlZHMgaWYgbm90IGF0IGEgd29yZCBib3VuZGFyeS4gICovCisrCisrIyBpZmRlZiBlbWFjcworKyAgLGJlZm9yZV9kb3QsCS8qIFN1Y2NlZWRzIGlmIGJlZm9yZSBwb2ludC4gICovCisrICBhdF9kb3QsCS8qIFN1Y2NlZWRzIGlmIGF0IHBvaW50LiAgKi8KKysgIGFmdGVyX2RvdCwJLyogU3VjY2VlZHMgaWYgYWZ0ZXIgcG9pbnQuICAqLworKworKwkvKiBNYXRjaGVzIGFueSBjaGFyYWN0ZXIgd2hvc2Ugc3ludGF4IGlzIHNwZWNpZmllZC4gIEZvbGxvd2VkIGJ5CisrICAgICAgICAgICBhIGJ5dGUgd2hpY2ggY29udGFpbnMgYSBzeW50YXggY29kZSwgZS5nLiwgU3dvcmQuICAqLworKyAgc3ludGF4c3BlYywKKysKKysJLyogTWF0Y2hlcyBhbnkgY2hhcmFjdGVyIHdob3NlIHN5bnRheCBpcyBub3QgdGhhdCBzcGVjaWZpZWQuICAqLworKyAgbm90c3ludGF4c3BlYworKyMgZW5kaWYgLyogZW1hY3MgKi8KKyt9IHJlX29wY29kZV90OworKyNlbmRpZiAvKiBub3QgSU5TSURFX1JFQ1VSU0lPTiAqLworKwwKKysKKysjaWZkZWYgQllURQorKyMgZGVmaW5lIENIQVJfVCBjaGFyCisrIyBkZWZpbmUgVUNIQVJfVCB1bnNpZ25lZCBjaGFyCisrIyBkZWZpbmUgQ09NUElMRURfQlVGRkVSX1ZBUiBidWZwLT5idWZmZXIKKysjIGRlZmluZSBPRkZTRVRfQUREUkVTU19TSVpFIDIKKysjIGRlZmluZSBQUkVGSVgobmFtZSkgYnl0ZV8jI25hbWUKKysjIGRlZmluZSBBUkdfUFJFRklYKG5hbWUpIG5hbWUKKysjIGRlZmluZSBQVVRfQ0hBUihjKSBwdXRjaGFyIChjKQorKyMgaW5jbHVkZSA8bG9jYWxlL3dlaWdodC5oPgorKyMgZGVmaW5lIEZJTkRJRFggZmluZGlkeAorKyNlbHNlCisrIyBpZmRlZiBXQ0hBUgorKyMgIGRlZmluZSBDSEFSX1Qgd2NoYXJfdAorKyMgIGRlZmluZSBVQ0hBUl9UIHdjaGFyX3QKKysjICBkZWZpbmUgQ09NUElMRURfQlVGRkVSX1ZBUiB3Y19idWZmZXIKKysjICBkZWZpbmUgT0ZGU0VUX0FERFJFU1NfU0laRSAxIC8qIHRoZSBzaXplIHdoaWNoIFNUT1JFX05VTUJFUiBtYWNybyB1c2UgKi8KKysjICBkZWZpbmUgQ0hBUl9DTEFTU19TSVpFICgoX19hbGlnbm9mX18od2N0eXBlX3QpK3NpemVvZih3Y3R5cGVfdCkpL3NpemVvZihDSEFSX1QpKzEpCisrIyAgZGVmaW5lIFBSRUZJWChuYW1lKSB3Y3NfIyNuYW1lCisrIyAgZGVmaW5lIEFSR19QUkVGSVgobmFtZSkgYyMjbmFtZQorKy8qIFNob3VsZCB3ZSB1c2Ugd2lkZSBzdHJlYW0/PyAgKi8KKysjICBkZWZpbmUgUFVUX0NIQVIoYykgcHJpbnRmICgiJUMiLCBjKTsKKysjICBkZWZpbmUgVFJVRSAxCisrIyAgZGVmaW5lIEZBTFNFIDAKKysjICBkZWZpbmUgZmluZGlkeCBmaW5kaWR4d2MKKysjICBpbmNsdWRlIDxsb2NhbGUvd2VpZ2h0d2MuaD4KKysjICB1bmRlZiBmaW5kaWR4CisrIyAgZGVmaW5lIEZJTkRJRFggZmluZGlkeHdjCisrIyBlbHNlCisrIyAgaWZkZWYgTUJTX1NVUFBPUlQKKysjICAgZGVmaW5lIFdDSEFSCisrIyAgIGRlZmluZSBJTlNJREVfUkVDVVJTSU9OCisrIyAgIGluY2x1ZGUgInhyZWdleC5jIgorKyMgICB1bmRlZiBJTlNJREVfUkVDVVJTSU9OCisrIyAgZW5kaWYKKysjICBkZWZpbmUgQllURQorKyMgIGRlZmluZSBJTlNJREVfUkVDVVJTSU9OCisrIyAgaW5jbHVkZSAieHJlZ2V4LmMiCisrIyAgdW5kZWYgSU5TSURFX1JFQ1VSU0lPTgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysjaWZkZWYgSU5TSURFX1JFQ1VSU0lPTgorKy8qIENvbW1vbiBvcGVyYXRpb25zIG9uIHRoZSBjb21waWxlZCBwYXR0ZXJuLiAgKi8KKysKKysvKiBTdG9yZSBOVU1CRVIgaW4gdHdvIGNvbnRpZ3VvdXMgYnl0ZXMgc3RhcnRpbmcgYXQgREVTVElOQVRJT04uICAqLworKy8qIGlmZGVmIE1CU19TVVBQT1JULCB3ZSBzdG9yZSBOVU1CRVIgaW4gMSBlbGVtZW50LiAgKi8KKysKKysjIGlmZGVmIFdDSEFSCisrIyAgZGVmaW5lIFNUT1JFX05VTUJFUihkZXN0aW5hdGlvbiwgbnVtYmVyKQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICAqKGRlc3RpbmF0aW9uKSA9IChVQ0hBUl9UKShudW1iZXIpOwkJCQlcCisrICB9IHdoaWxlICgwKQorKyMgZWxzZSAvKiBCWVRFICovCisrIyAgZGVmaW5lIFNUT1JFX05VTUJFUihkZXN0aW5hdGlvbiwgbnVtYmVyKQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICAoZGVzdGluYXRpb24pWzBdID0gKG51bWJlcikgJiAwMzc3OwkJCQkJXAorKyAgICAoZGVzdGluYXRpb24pWzFdID0gKG51bWJlcikgPj4gODsJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrIyBlbmRpZiAvKiBXQ0hBUiAqLworKworKy8qIFNhbWUgYXMgU1RPUkVfTlVNQkVSLCBleGNlcHQgaW5jcmVtZW50IERFU1RJTkFUSU9OIHRvCisrICAgdGhlIGJ5dGUgYWZ0ZXIgd2hlcmUgdGhlIG51bWJlciBpcyBzdG9yZWQuICBUaGVyZWZvcmUsIERFU1RJTkFUSU9OCisrICAgbXVzdCBiZSBhbiBsdmFsdWUuICAqLworKy8qIGlmZGVmIE1CU19TVVBQT1JULCB3ZSBzdG9yZSBOVU1CRVIgaW4gMSBlbGVtZW50LiAgKi8KKysKKysjIGRlZmluZSBTVE9SRV9OVU1CRVJfQU5EX0lOQ1IoZGVzdGluYXRpb24sIG51bWJlcikJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBTVE9SRV9OVU1CRVIgKGRlc3RpbmF0aW9uLCBudW1iZXIpOwkJCQkJXAorKyAgICAoZGVzdGluYXRpb24pICs9IE9GRlNFVF9BRERSRVNTX1NJWkU7CQkJCVwKKysgIH0gd2hpbGUgKDApCisrCisrLyogUHV0IGludG8gREVTVElOQVRJT04gYSBudW1iZXIgc3RvcmVkIGluIHR3byBjb250aWd1b3VzIGJ5dGVzIHN0YXJ0aW5nCisrICAgYXQgU09VUkNFLiAgKi8KKysvKiBpZmRlZiBNQlNfU1VQUE9SVCwgd2Ugc3RvcmUgTlVNQkVSIGluIDEgZWxlbWVudC4gICovCisrCisrIyBpZmRlZiBXQ0hBUgorKyMgIGRlZmluZSBFWFRSQUNUX05VTUJFUihkZXN0aW5hdGlvbiwgc291cmNlKQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICAoZGVzdGluYXRpb24pID0gKihzb3VyY2UpOwkJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrIyBlbHNlIC8qIEJZVEUgKi8KKysjICBkZWZpbmUgRVhUUkFDVF9OVU1CRVIoZGVzdGluYXRpb24sIHNvdXJjZSkJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgKGRlc3RpbmF0aW9uKSA9ICooc291cmNlKSAmIDAzNzc7CQkJCQlcCisrICAgIChkZXN0aW5hdGlvbikgKz0gU0lHTl9FWFRFTkRfQ0hBUiAoKigoc291cmNlKSArIDEpKSA8PCA4OwkJXAorKyAgfSB3aGlsZSAoMCkKKysjIGVuZGlmCisrCisrIyBpZmRlZiBERUJVRworK3N0YXRpYyB2b2lkIFBSRUZJWChleHRyYWN0X251bWJlcikgKGludCAqZGVzdCwgVUNIQVJfVCAqc291cmNlKTsKKytzdGF0aWMgdm9pZAorK1BSRUZJWChleHRyYWN0X251bWJlcikgKGludCAqZGVzdCwgVUNIQVJfVCAqc291cmNlKQorK3sKKysjICBpZmRlZiBXQ0hBUgorKyAgKmRlc3QgPSAqc291cmNlOworKyMgIGVsc2UgLyogQllURSAqLworKyAgaW50IHRlbXAgPSBTSUdOX0VYVEVORF9DSEFSICgqKHNvdXJjZSArIDEpKTsKKysgICpkZXN0ID0gKnNvdXJjZSAmIDAzNzc7CisrICAqZGVzdCArPSB0ZW1wIDw8IDg7CisrIyAgZW5kaWYKKyt9CisrCisrIyAgaWZuZGVmIEVYVFJBQ1RfTUFDUk9TIC8qIFRvIGRlYnVnIHRoZSBtYWNyb3MuICAqLworKyMgICB1bmRlZiBFWFRSQUNUX05VTUJFUgorKyMgICBkZWZpbmUgRVhUUkFDVF9OVU1CRVIoZGVzdCwgc3JjKSBQUkVGSVgoZXh0cmFjdF9udW1iZXIpICgmZGVzdCwgc3JjKQorKyMgIGVuZGlmIC8qIG5vdCBFWFRSQUNUX01BQ1JPUyAqLworKworKyMgZW5kaWYgLyogREVCVUcgKi8KKysKKysvKiBTYW1lIGFzIEVYVFJBQ1RfTlVNQkVSLCBleGNlcHQgaW5jcmVtZW50IFNPVVJDRSB0byBhZnRlciB0aGUgbnVtYmVyLgorKyAgIFNPVVJDRSBtdXN0IGJlIGFuIGx2YWx1ZS4gICovCisrCisrIyBkZWZpbmUgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IoZGVzdGluYXRpb24sIHNvdXJjZSkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBFWFRSQUNUX05VTUJFUiAoZGVzdGluYXRpb24sIHNvdXJjZSk7CQkJCVwKKysgICAgKHNvdXJjZSkgKz0gT0ZGU0VUX0FERFJFU1NfU0laRTsgCQkJCQlcCisrICB9IHdoaWxlICgwKQorKworKyMgaWZkZWYgREVCVUcKKytzdGF0aWMgdm9pZCBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpIChpbnQgKmRlc3RpbmF0aW9uLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDSEFSX1QgKipzb3VyY2UpOworK3N0YXRpYyB2b2lkCisrUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoaW50ICpkZXN0aW5hdGlvbiwgVUNIQVJfVCAqKnNvdXJjZSkKKyt7CisrICBQUkVGSVgoZXh0cmFjdF9udW1iZXIpIChkZXN0aW5hdGlvbiwgKnNvdXJjZSk7CisrICAqc291cmNlICs9IE9GRlNFVF9BRERSRVNTX1NJWkU7CisrfQorKworKyMgIGlmbmRlZiBFWFRSQUNUX01BQ1JPUworKyMgICB1bmRlZiBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUgorKyMgICBkZWZpbmUgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IoZGVzdCwgc3JjKSBcCisrICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmZGVzdCwgJnNyYykKKysjICBlbmRpZiAvKiBub3QgRVhUUkFDVF9NQUNST1MgKi8KKysKKysjIGVuZGlmIC8qIERFQlVHICovCisrCisrDAorKworKy8qIElmIERFQlVHIGlzIGRlZmluZWQsIFJlZ2V4IHByaW50cyBtYW55IHZvbHVtaW5vdXMgbWVzc2FnZXMgYWJvdXQgd2hhdAorKyAgIGl0IGlzIGRvaW5nIChpZiB0aGUgdmFyaWFibGUgYGRlYnVnJyBpcyBub256ZXJvKS4gIElmIGxpbmtlZCB3aXRoIHRoZQorKyAgIG1haW4gcHJvZ3JhbSBpbiBgaXJlZ2V4LmMnLCB5b3UgY2FuIGVudGVyIHBhdHRlcm5zIGFuZCBzdHJpbmdzCisrICAgaW50ZXJhY3RpdmVseS4gIEFuZCBpZiBsaW5rZWQgd2l0aCB0aGUgbWFpbiBwcm9ncmFtIGluIGBtYWluLmMnIGFuZAorKyAgIHRoZSBvdGhlciB0ZXN0IGZpbGVzLCB5b3UgY2FuIHJ1biB0aGUgYWxyZWFkeS13cml0dGVuIHRlc3RzLiAgKi8KKysKKysjIGlmZGVmIERFQlVHCisrCisrIyAgaWZuZGVmIERFRklORURfT05DRQorKworKy8qIFdlIHVzZSBzdGFuZGFyZCBJL08gZm9yIGRlYnVnZ2luZy4gICovCisrIyAgIGluY2x1ZGUgPHN0ZGlvLmg+CisrCisrLyogSXQgaXMgdXNlZnVsIHRvIHRlc3QgdGhpbmdzIHRoYXQgYGBtdXN0JycgYmUgdHJ1ZSB3aGVuIGRlYnVnZ2luZy4gICovCisrIyAgIGluY2x1ZGUgPGFzc2VydC5oPgorKworK3N0YXRpYyBpbnQgZGVidWc7CisrCisrIyAgIGRlZmluZSBERUJVR19TVEFURU1FTlQoZSkgZQorKyMgICBkZWZpbmUgREVCVUdfUFJJTlQxKHgpIGlmIChkZWJ1ZykgcHJpbnRmICh4KQorKyMgICBkZWZpbmUgREVCVUdfUFJJTlQyKHgxLCB4MikgaWYgKGRlYnVnKSBwcmludGYgKHgxLCB4MikKKysjICAgZGVmaW5lIERFQlVHX1BSSU5UMyh4MSwgeDIsIHgzKSBpZiAoZGVidWcpIHByaW50ZiAoeDEsIHgyLCB4MykKKysjICAgZGVmaW5lIERFQlVHX1BSSU5UNCh4MSwgeDIsIHgzLCB4NCkgaWYgKGRlYnVnKSBwcmludGYgKHgxLCB4MiwgeDMsIHg0KQorKyMgIGVuZGlmIC8qIG5vdCBERUZJTkVEX09OQ0UgKi8KKysKKysjICBkZWZpbmUgREVCVUdfUFJJTlRfQ09NUElMRURfUEFUVEVSTihwLCBzLCBlKSAJCQlcCisrICBpZiAoZGVidWcpIFBSRUZJWChwcmludF9wYXJ0aWFsX2NvbXBpbGVkX3BhdHRlcm4pIChzLCBlKQorKyMgIGRlZmluZSBERUJVR19QUklOVF9ET1VCTEVfU1RSSU5HKHcsIHMxLCBzejEsIHMyLCBzejIpCQlcCisrICBpZiAoZGVidWcpIFBSRUZJWChwcmludF9kb3VibGVfc3RyaW5nKSAodywgczEsIHN6MSwgczIsIHN6MikKKysKKysKKysvKiBQcmludCB0aGUgZmFzdG1hcCBpbiBodW1hbi1yZWFkYWJsZSBmb3JtLiAgKi8KKysKKysjICBpZm5kZWYgREVGSU5FRF9PTkNFCisrdm9pZAorK3ByaW50X2Zhc3RtYXAgKGNoYXIgKmZhc3RtYXApCisreworKyAgdW5zaWduZWQgd2FzX2FfcmFuZ2UgPSAwOworKyAgdW5zaWduZWQgaSA9IDA7CisrCisrICB3aGlsZSAoaSA8ICgxIDw8IEJZVEVXSURUSCkpCisrICAgIHsKKysgICAgICBpZiAoZmFzdG1hcFtpKytdKQorKwl7CisrCSAgd2FzX2FfcmFuZ2UgPSAwOworKyAgICAgICAgICBwdXRjaGFyIChpIC0gMSk7CisrICAgICAgICAgIHdoaWxlIChpIDwgKDEgPDwgQllURVdJRFRIKSAgJiYgIGZhc3RtYXBbaV0pCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgd2FzX2FfcmFuZ2UgPSAxOworKyAgICAgICAgICAgICAgaSsrOworKyAgICAgICAgICAgIH0KKysJICBpZiAod2FzX2FfcmFuZ2UpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgcHJpbnRmICgiLSIpOworKyAgICAgICAgICAgICAgcHV0Y2hhciAoaSAtIDEpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgfQorKyAgcHV0Y2hhciAoJ1xuJyk7CisrfQorKyMgIGVuZGlmIC8qIG5vdCBERUZJTkVEX09OQ0UgKi8KKysKKysKKysvKiBQcmludCBhIGNvbXBpbGVkIHBhdHRlcm4gc3RyaW5nIGluIGh1bWFuLXJlYWRhYmxlIGZvcm0sIHN0YXJ0aW5nIGF0CisrICAgdGhlIFNUQVJUIHBvaW50ZXIgaW50byBpdCBhbmQgZW5kaW5nIGp1c3QgYmVmb3JlIHRoZSBwb2ludGVyIEVORC4gICovCisrCisrdm9pZAorK1BSRUZJWChwcmludF9wYXJ0aWFsX2NvbXBpbGVkX3BhdHRlcm4pIChVQ0hBUl9UICpzdGFydCwgVUNIQVJfVCAqZW5kKQorK3sKKysgIGludCBtY250LCBtY250MjsKKysgIFVDSEFSX1QgKnAxOworKyAgVUNIQVJfVCAqcCA9IHN0YXJ0OworKyAgVUNIQVJfVCAqcGVuZCA9IGVuZDsKKysKKysgIGlmIChzdGFydCA9PSBOVUxMKQorKyAgICB7CisrICAgICAgcHJpbnRmICgiKG51bGwpXG4iKTsKKysgICAgICByZXR1cm47CisrICAgIH0KKysKKysgIC8qIExvb3Agb3ZlciBwYXR0ZXJuIGNvbW1hbmRzLiAgKi8KKysgIHdoaWxlIChwIDwgcGVuZCkKKysgICAgeworKyMgIGlmZGVmIF9MSUJDCisrICAgICAgcHJpbnRmICgiJXRkOlx0IiwgcCAtIHN0YXJ0KTsKKysjICBlbHNlCisrICAgICAgcHJpbnRmICgiJWxkOlx0IiwgKGxvbmcgaW50KSAocCAtIHN0YXJ0KSk7CisrIyAgZW5kaWYKKysKKysgICAgICBzd2l0Y2ggKChyZV9vcGNvZGVfdCkgKnArKykKKysJeworKyAgICAgICAgY2FzZSBub19vcDoKKysgICAgICAgICAgcHJpbnRmICgiL25vX29wIik7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIGV4YWN0bjoKKysJICBtY250ID0gKnArKzsKKysgICAgICAgICAgcHJpbnRmICgiL2V4YWN0bi8lZCIsIG1jbnQpOworKyAgICAgICAgICBkbworKwkgICAgeworKyAgICAgICAgICAgICAgcHV0Y2hhciAoJy8nKTsKKysJICAgICAgUFVUX0NIQVIgKCpwKyspOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgd2hpbGUgKC0tbWNudCk7CisrICAgICAgICAgIGJyZWFrOworKworKyMgIGlmZGVmIE1CU19TVVBQT1JUCisrCWNhc2UgZXhhY3RuX2JpbjoKKysJICBtY250ID0gKnArKzsKKysJICBwcmludGYgKCIvZXhhY3RuX2Jpbi8lZCIsIG1jbnQpOworKyAgICAgICAgICBkbworKwkgICAgeworKwkgICAgICBwcmludGYoIi8lbHgiLCAobG9uZyBpbnQpICpwKyspOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgd2hpbGUgKC0tbWNudCk7CisrICAgICAgICAgIGJyZWFrOworKyMgIGVuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCisrCWNhc2Ugc3RhcnRfbWVtb3J5OgorKyAgICAgICAgICBtY250ID0gKnArKzsKKysgICAgICAgICAgcHJpbnRmICgiL3N0YXJ0X21lbW9yeS8lZC8lbGQiLCBtY250LCAobG9uZyBpbnQpICpwKyspOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBzdG9wX21lbW9yeToKKysgICAgICAgICAgbWNudCA9ICpwKys7CisrCSAgcHJpbnRmICgiL3N0b3BfbWVtb3J5LyVkLyVsZCIsIG1jbnQsIChsb25nIGludCkgKnArKyk7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIGR1cGxpY2F0ZToKKysJICBwcmludGYgKCIvZHVwbGljYXRlLyVsZCIsIChsb25nIGludCkgKnArKyk7CisrCSAgYnJlYWs7CisrCisrCWNhc2UgYW55Y2hhcjoKKysJICBwcmludGYgKCIvYW55Y2hhciIpOworKwkgIGJyZWFrOworKworKwljYXNlIGNoYXJzZXQ6CisrICAgICAgICBjYXNlIGNoYXJzZXRfbm90OgorKyAgICAgICAgICB7CisrIyAgaWZkZWYgV0NIQVIKKysJICAgIGludCBpLCBsZW5ndGg7CisrCSAgICB3Y2hhcl90ICp3b3JrcCA9IHA7CisrCSAgICBwcmludGYgKCIvY2hhcnNldCBbJXMiLAorKwkgICAgICAgICAgICAocmVfb3Bjb2RlX3QpICood29ya3AgLSAxKSA9PSBjaGFyc2V0X25vdCA/ICJeIiA6ICIiKTsKKysJICAgIHAgKz0gNTsKKysJICAgIGxlbmd0aCA9ICp3b3JrcCsrOyAvKiB0aGUgbGVuZ3RoIG9mIGNoYXJfY2xhc3NlcyAqLworKwkgICAgZm9yIChpPTAgOyBpPGxlbmd0aCA7IGkrKykKKysJICAgICAgcHJpbnRmKCJbOiVseDpdIiwgKGxvbmcgaW50KSAqcCsrKTsKKysJICAgIGxlbmd0aCA9ICp3b3JrcCsrOyAvKiB0aGUgbGVuZ3RoIG9mIGNvbGxhdGluZ19zeW1ib2wgKi8KKysJICAgIGZvciAoaT0wIDsgaTxsZW5ndGggOykKKysJICAgICAgeworKwkJcHJpbnRmKCJbLiIpOworKwkJd2hpbGUoKnAgIT0gMCkKKysJCSAgUFVUX0NIQVIoKGkrKywqcCsrKSk7CisrCQlpKysscCsrOworKwkJcHJpbnRmKCIuXSIpOworKwkgICAgICB9CisrCSAgICBsZW5ndGggPSAqd29ya3ArKzsgLyogdGhlIGxlbmd0aCBvZiBlcXVpdmFsZW5jZV9jbGFzcyAqLworKwkgICAgZm9yIChpPTAgOyBpPGxlbmd0aCA7KQorKwkgICAgICB7CisrCQlwcmludGYoIls9Iik7CisrCQl3aGlsZSgqcCAhPSAwKQorKwkJICBQVVRfQ0hBUigoaSsrLCpwKyspKTsKKysJCWkrKyxwKys7CisrCQlwcmludGYoIj1dIik7CisrCSAgICAgIH0KKysJICAgIGxlbmd0aCA9ICp3b3JrcCsrOyAvKiB0aGUgbGVuZ3RoIG9mIGNoYXJfcmFuZ2UgKi8KKysJICAgIGZvciAoaT0wIDsgaTxsZW5ndGggOyBpKyspCisrCSAgICAgIHsKKysJCXdjaGFyX3QgcmFuZ2Vfc3RhcnQgPSAqcCsrOworKwkJd2NoYXJfdCByYW5nZV9lbmQgPSAqcCsrOworKwkJcHJpbnRmKCIlQy0lQyIsIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQpOworKwkgICAgICB9CisrCSAgICBsZW5ndGggPSAqd29ya3ArKzsgLyogdGhlIGxlbmd0aCBvZiBjaGFyICovCisrCSAgICBmb3IgKGk9MCA7IGk8bGVuZ3RoIDsgaSsrKQorKwkgICAgICBwcmludGYoIiVDIiwgKnArKyk7CisrCSAgICBwdXRjaGFyICgnXScpOworKyMgIGVsc2UKKysgICAgICAgICAgICByZWdpc3RlciBpbnQgYywgbGFzdCA9IC0xMDA7CisrCSAgICByZWdpc3RlciBpbnQgaW5fcmFuZ2UgPSAwOworKworKwkgICAgcHJpbnRmICgiL2NoYXJzZXQgWyVzIiwKKysJICAgICAgICAgICAgKHJlX29wY29kZV90KSAqKHAgLSAxKSA9PSBjaGFyc2V0X25vdCA/ICJeIiA6ICIiKTsKKysKKysgICAgICAgICAgICBhc3NlcnQgKHAgKyAqcCA8IHBlbmQpOworKworKyAgICAgICAgICAgIGZvciAoYyA9IDA7IGMgPCAyNTY7IGMrKykKKysJICAgICAgaWYgKGMgLyA4IDwgKnAKKysJCSAgJiYgKHBbMSArIChjLzgpXSAmICgxIDw8IChjICUgOCkpKSkKKysJCXsKKysJCSAgLyogQXJlIHdlIHN0YXJ0aW5nIGEgcmFuZ2U/ICAqLworKwkJICBpZiAobGFzdCArIDEgPT0gYyAmJiAhIGluX3JhbmdlKQorKwkJICAgIHsKKysJCSAgICAgIHB1dGNoYXIgKCctJyk7CisrCQkgICAgICBpbl9yYW5nZSA9IDE7CisrCQkgICAgfQorKwkJICAvKiBIYXZlIHdlIGJyb2tlbiBhIHJhbmdlPyAgKi8KKysJCSAgZWxzZSBpZiAobGFzdCArIDEgIT0gYyAmJiBpbl9yYW5nZSkKKysgICAgICAgICAgICAgIHsKKysJCSAgICAgIHB1dGNoYXIgKGxhc3QpOworKwkJICAgICAgaW5fcmFuZ2UgPSAwOworKwkJICAgIH0KKysKKysJCSAgaWYgKCEgaW5fcmFuZ2UpCisrCQkgICAgcHV0Y2hhciAoYyk7CisrCisrCQkgIGxhc3QgPSBjOworKyAgICAgICAgICAgICAgfQorKworKwkgICAgaWYgKGluX3JhbmdlKQorKwkgICAgICBwdXRjaGFyIChsYXN0KTsKKysKKysJICAgIHB1dGNoYXIgKCddJyk7CisrCisrCSAgICBwICs9IDEgKyAqcDsKKysjICBlbmRpZiAvKiBXQ0hBUiAqLworKwkgIH0KKysJICBicmVhazsKKysKKysJY2FzZSBiZWdsaW5lOgorKwkgIHByaW50ZiAoIi9iZWdsaW5lIik7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIGVuZGxpbmU6CisrICAgICAgICAgIHByaW50ZiAoIi9lbmRsaW5lIik7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIG9uX2ZhaWx1cmVfanVtcDoKKysgICAgICAgICAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQsICZwKTsKKysjICBpZmRlZiBfTElCQworKyAgCSAgcHJpbnRmICgiL29uX2ZhaWx1cmVfanVtcCB0byAldGQiLCBwICsgbWNudCAtIHN0YXJ0KTsKKysjICBlbHNlCisrICAJICBwcmludGYgKCIvb25fZmFpbHVyZV9qdW1wIHRvICVsZCIsIChsb25nIGludCkgKHAgKyBtY250IC0gc3RhcnQpKTsKKysjICBlbmRpZgorKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBvbl9mYWlsdXJlX2tlZXBfc3RyaW5nX2p1bXA6CisrICAgICAgICAgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250LCAmcCk7CisrIyAgaWZkZWYgX0xJQkMKKysgIAkgIHByaW50ZiAoIi9vbl9mYWlsdXJlX2tlZXBfc3RyaW5nX2p1bXAgdG8gJXRkIiwgcCArIG1jbnQgLSBzdGFydCk7CisrIyAgZWxzZQorKyAgCSAgcHJpbnRmICgiL29uX2ZhaWx1cmVfa2VlcF9zdHJpbmdfanVtcCB0byAlbGQiLAorKwkJICAobG9uZyBpbnQpIChwICsgbWNudCAtIHN0YXJ0KSk7CisrIyAgZW5kaWYKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2UgZHVtbXlfZmFpbHVyZV9qdW1wOgorKyAgICAgICAgICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudCwgJnApOworKyMgIGlmZGVmIF9MSUJDCisrICAJICBwcmludGYgKCIvZHVtbXlfZmFpbHVyZV9qdW1wIHRvICV0ZCIsIHAgKyBtY250IC0gc3RhcnQpOworKyMgIGVsc2UKKysgIAkgIHByaW50ZiAoIi9kdW1teV9mYWlsdXJlX2p1bXAgdG8gJWxkIiwgKGxvbmcgaW50KSAocCArIG1jbnQgLSBzdGFydCkpOworKyMgIGVuZGlmCisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIHB1c2hfZHVtbXlfZmFpbHVyZToKKysgICAgICAgICAgcHJpbnRmICgiL3B1c2hfZHVtbXlfZmFpbHVyZSIpOworKyAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgbWF5YmVfcG9wX2p1bXA6CisrICAgICAgICAgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250LCAmcCk7CisrIyAgaWZkZWYgX0xJQkMKKysgIAkgIHByaW50ZiAoIi9tYXliZV9wb3BfanVtcCB0byAldGQiLCBwICsgbWNudCAtIHN0YXJ0KTsKKysjICBlbHNlCisrICAJICBwcmludGYgKCIvbWF5YmVfcG9wX2p1bXAgdG8gJWxkIiwgKGxvbmcgaW50KSAocCArIG1jbnQgLSBzdGFydCkpOworKyMgIGVuZGlmCisrCSAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIHBvcF9mYWlsdXJlX2p1bXA6CisrCSAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQsICZwKTsKKysjICBpZmRlZiBfTElCQworKyAgCSAgcHJpbnRmICgiL3BvcF9mYWlsdXJlX2p1bXAgdG8gJXRkIiwgcCArIG1jbnQgLSBzdGFydCk7CisrIyAgZWxzZQorKyAgCSAgcHJpbnRmICgiL3BvcF9mYWlsdXJlX2p1bXAgdG8gJWxkIiwgKGxvbmcgaW50KSAocCArIG1jbnQgLSBzdGFydCkpOworKyMgIGVuZGlmCisrCSAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIGp1bXBfcGFzdF9hbHQ6CisrCSAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQsICZwKTsKKysjICBpZmRlZiBfTElCQworKyAgCSAgcHJpbnRmICgiL2p1bXBfcGFzdF9hbHQgdG8gJXRkIiwgcCArIG1jbnQgLSBzdGFydCk7CisrIyAgZWxzZQorKyAgCSAgcHJpbnRmICgiL2p1bXBfcGFzdF9hbHQgdG8gJWxkIiwgKGxvbmcgaW50KSAocCArIG1jbnQgLSBzdGFydCkpOworKyMgIGVuZGlmCisrCSAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIGp1bXA6CisrCSAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQsICZwKTsKKysjICBpZmRlZiBfTElCQworKyAgCSAgcHJpbnRmICgiL2p1bXAgdG8gJXRkIiwgcCArIG1jbnQgLSBzdGFydCk7CisrIyAgZWxzZQorKyAgCSAgcHJpbnRmICgiL2p1bXAgdG8gJWxkIiwgKGxvbmcgaW50KSAocCArIG1jbnQgLSBzdGFydCkpOworKyMgIGVuZGlmCisrCSAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIHN1Y2NlZWRfbjoKKysgICAgICAgICAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQsICZwKTsKKysJICBwMSA9IHAgKyBtY250OworKyAgICAgICAgICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudDIsICZwKTsKKysjICBpZmRlZiBfTElCQworKwkgIHByaW50ZiAoIi9zdWNjZWVkX24gdG8gJXRkLCAlZCB0aW1lcyIsIHAxIC0gc3RhcnQsIG1jbnQyKTsKKysjICBlbHNlCisrCSAgcHJpbnRmICgiL3N1Y2NlZWRfbiB0byAlbGQsICVkIHRpbWVzIiwKKysJCSAgKGxvbmcgaW50KSAocDEgLSBzdGFydCksIG1jbnQyKTsKKysjICBlbmRpZgorKyAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UganVtcF9uOgorKyAgICAgICAgICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudCwgJnApOworKwkgIHAxID0gcCArIG1jbnQ7CisrICAgICAgICAgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250MiwgJnApOworKwkgIHByaW50ZiAoIi9qdW1wX24gdG8gJWQsICVkIHRpbWVzIiwgcDEgLSBzdGFydCwgbWNudDIpOworKyAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2Ugc2V0X251bWJlcl9hdDoKKysgICAgICAgICAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQsICZwKTsKKysJICBwMSA9IHAgKyBtY250OworKyAgICAgICAgICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudDIsICZwKTsKKysjICBpZmRlZiBfTElCQworKwkgIHByaW50ZiAoIi9zZXRfbnVtYmVyX2F0IGxvY2F0aW9uICV0ZCB0byAlZCIsIHAxIC0gc3RhcnQsIG1jbnQyKTsKKysjICBlbHNlCisrCSAgcHJpbnRmICgiL3NldF9udW1iZXJfYXQgbG9jYXRpb24gJWxkIHRvICVkIiwKKysJCSAgKGxvbmcgaW50KSAocDEgLSBzdGFydCksIG1jbnQyKTsKKysjICBlbmRpZgorKyAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2Ugd29yZGJvdW5kOgorKwkgIHByaW50ZiAoIi93b3JkYm91bmQiKTsKKysJICBicmVhazsKKysKKysJY2FzZSBub3R3b3JkYm91bmQ6CisrCSAgcHJpbnRmICgiL25vdHdvcmRib3VuZCIpOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSB3b3JkYmVnOgorKwkgIHByaW50ZiAoIi93b3JkYmVnIik7CisrCSAgYnJlYWs7CisrCisrCWNhc2Ugd29yZGVuZDoKKysJICBwcmludGYgKCIvd29yZGVuZCIpOworKwkgIGJyZWFrOworKworKyMgIGlmZGVmIGVtYWNzCisrCWNhc2UgYmVmb3JlX2RvdDoKKysJICBwcmludGYgKCIvYmVmb3JlX2RvdCIpOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBhdF9kb3Q6CisrCSAgcHJpbnRmICgiL2F0X2RvdCIpOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBhZnRlcl9kb3Q6CisrCSAgcHJpbnRmICgiL2FmdGVyX2RvdCIpOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBzeW50YXhzcGVjOgorKyAgICAgICAgICBwcmludGYgKCIvc3ludGF4c3BlYyIpOworKwkgIG1jbnQgPSAqcCsrOworKwkgIHByaW50ZiAoIi8lZCIsIG1jbnQpOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBub3RzeW50YXhzcGVjOgorKyAgICAgICAgICBwcmludGYgKCIvbm90c3ludGF4c3BlYyIpOworKwkgIG1jbnQgPSAqcCsrOworKwkgIHByaW50ZiAoIi8lZCIsIG1jbnQpOworKwkgIGJyZWFrOworKyMgIGVuZGlmIC8qIGVtYWNzICovCisrCisrCWNhc2Ugd29yZGNoYXI6CisrCSAgcHJpbnRmICgiL3dvcmRjaGFyIik7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIG5vdHdvcmRjaGFyOgorKwkgIHByaW50ZiAoIi9ub3R3b3JkY2hhciIpOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBiZWdidWY6CisrCSAgcHJpbnRmICgiL2JlZ2J1ZiIpOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBlbmRidWY6CisrCSAgcHJpbnRmICgiL2VuZGJ1ZiIpOworKyAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgIHByaW50ZiAoIj8lbGQiLCAobG9uZyBpbnQpICoocC0xKSk7CisrCX0KKysKKysgICAgICBwdXRjaGFyICgnXG4nKTsKKysgICAgfQorKworKyMgIGlmZGVmIF9MSUJDCisrICBwcmludGYgKCIldGQ6XHRlbmQgb2YgcGF0dGVybi5cbiIsIHAgLSBzdGFydCk7CisrIyAgZWxzZQorKyAgcHJpbnRmICgiJWxkOlx0ZW5kIG9mIHBhdHRlcm4uXG4iLCAobG9uZyBpbnQpIChwIC0gc3RhcnQpKTsKKysjICBlbmRpZgorK30KKysKKysKKyt2b2lkCisrUFJFRklYKHByaW50X2NvbXBpbGVkX3BhdHRlcm4pIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnApCisreworKyAgVUNIQVJfVCAqYnVmZmVyID0gKFVDSEFSX1QqKSBidWZwLT5idWZmZXI7CisrCisrICBQUkVGSVgocHJpbnRfcGFydGlhbF9jb21waWxlZF9wYXR0ZXJuKSAoYnVmZmVyLCBidWZmZXIKKysJCQkJICArIGJ1ZnAtPnVzZWQgLyBzaXplb2YoVUNIQVJfVCkpOworKyAgcHJpbnRmICgiJWxkIGJ5dGVzIHVzZWQvJWxkIGJ5dGVzIGFsbG9jYXRlZC5cbiIsCisrCSAgYnVmcC0+dXNlZCwgYnVmcC0+YWxsb2NhdGVkKTsKKysKKysgIGlmIChidWZwLT5mYXN0bWFwX2FjY3VyYXRlICYmIGJ1ZnAtPmZhc3RtYXApCisrICAgIHsKKysgICAgICBwcmludGYgKCJmYXN0bWFwOiAiKTsKKysgICAgICBwcmludF9mYXN0bWFwIChidWZwLT5mYXN0bWFwKTsKKysgICAgfQorKworKyMgIGlmZGVmIF9MSUJDCisrICBwcmludGYgKCJyZV9uc3ViOiAlWmRcdCIsIGJ1ZnAtPnJlX25zdWIpOworKyMgIGVsc2UKKysgIHByaW50ZiAoInJlX25zdWI6ICVsZFx0IiwgKGxvbmcgaW50KSBidWZwLT5yZV9uc3ViKTsKKysjICBlbmRpZgorKyAgcHJpbnRmICgicmVnc19hbGxvYzogJWRcdCIsIGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkKTsKKysgIHByaW50ZiAoImNhbl9iZV9udWxsOiAlZFx0IiwgYnVmcC0+Y2FuX2JlX251bGwpOworKyAgcHJpbnRmICgibmV3bGluZV9hbmNob3I6ICVkXG4iLCBidWZwLT5uZXdsaW5lX2FuY2hvcik7CisrICBwcmludGYgKCJub19zdWI6ICVkXHQiLCBidWZwLT5ub19zdWIpOworKyAgcHJpbnRmICgibm90X2JvbDogJWRcdCIsIGJ1ZnAtPm5vdF9ib2wpOworKyAgcHJpbnRmICgibm90X2VvbDogJWRcdCIsIGJ1ZnAtPm5vdF9lb2wpOworKyAgcHJpbnRmICgic3ludGF4OiAlbHhcbiIsIGJ1ZnAtPnN5bnRheCk7CisrICAvKiBQZXJoYXBzIHdlIHNob3VsZCBwcmludCB0aGUgdHJhbnNsYXRlIHRhYmxlPyAgKi8KKyt9CisrCisrCisrdm9pZAorK1BSRUZJWChwcmludF9kb3VibGVfc3RyaW5nKSAoY29uc3QgQ0hBUl9UICp3aGVyZSwgY29uc3QgQ0hBUl9UICpzdHJpbmcxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUxLCBjb25zdCBDSEFSX1QgKnN0cmluZzIsIGludCBzaXplMikKKyt7CisrICBpbnQgdGhpc19jaGFyOworKworKyAgaWYgKHdoZXJlID09IE5VTEwpCisrICAgIHByaW50ZiAoIihudWxsKSIpOworKyAgZWxzZQorKyAgICB7CisrICAgICAgaW50IGNudDsKKysKKysgICAgICBpZiAoRklSU1RfU1RSSU5HX1AgKHdoZXJlKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZm9yICh0aGlzX2NoYXIgPSB3aGVyZSAtIHN0cmluZzE7IHRoaXNfY2hhciA8IHNpemUxOyB0aGlzX2NoYXIrKykKKysJICAgIFBVVF9DSEFSIChzdHJpbmcxW3RoaXNfY2hhcl0pOworKworKyAgICAgICAgICB3aGVyZSA9IHN0cmluZzI7CisrICAgICAgICB9CisrCisrICAgICAgY250ID0gMDsKKysgICAgICBmb3IgKHRoaXNfY2hhciA9IHdoZXJlIC0gc3RyaW5nMjsgdGhpc19jaGFyIDwgc2l6ZTI7IHRoaXNfY2hhcisrKQorKwl7CisrCSAgUFVUX0NIQVIgKHN0cmluZzJbdGhpc19jaGFyXSk7CisrCSAgaWYgKCsrY250ID4gMTAwKQorKwkgICAgeworKwkgICAgICBmcHV0cyAoIi4uLiIsIHN0ZG91dCk7CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKwl9CisrICAgIH0KKyt9CisrCisrIyAgaWZuZGVmIERFRklORURfT05DRQorK3ZvaWQKKytwcmludGNoYXIgKGludCBjKQorK3sKKysgIHB1dGMgKGMsIHN0ZGVycik7CisrfQorKyMgIGVuZGlmCisrCisrIyBlbHNlIC8qIG5vdCBERUJVRyAqLworKworKyMgIGlmbmRlZiBERUZJTkVEX09OQ0UKKysjICAgdW5kZWYgYXNzZXJ0CisrIyAgIGRlZmluZSBhc3NlcnQoZSkKKysKKysjICAgZGVmaW5lIERFQlVHX1NUQVRFTUVOVChlKQorKyMgICBkZWZpbmUgREVCVUdfUFJJTlQxKHgpCisrIyAgIGRlZmluZSBERUJVR19QUklOVDIoeDEsIHgyKQorKyMgICBkZWZpbmUgREVCVUdfUFJJTlQzKHgxLCB4MiwgeDMpCisrIyAgIGRlZmluZSBERUJVR19QUklOVDQoeDEsIHgyLCB4MywgeDQpCisrIyAgZW5kaWYgLyogbm90IERFRklORURfT05DRSAqLworKyMgIGRlZmluZSBERUJVR19QUklOVF9DT01QSUxFRF9QQVRURVJOKHAsIHMsIGUpCisrIyAgZGVmaW5lIERFQlVHX1BSSU5UX0RPVUJMRV9TVFJJTkcodywgczEsIHN6MSwgczIsIHN6MikKKysKKysjIGVuZGlmIC8qIG5vdCBERUJVRyAqLworKworKwwKKysKKysjIGlmZGVmIFdDSEFSCisrLyogVGhpcyAgY29udmVydCBhIG11bHRpYnl0ZSBzdHJpbmcgdG8gYSB3aWRlIGNoYXJhY3RlciBzdHJpbmcuCisrICAgQW5kIHdyaXRlIHRoZWlyIGNvcnJlc3BvbmRhbmNlcyB0byBvZmZzZXRfYnVmZmVyKHNlZSBiZWxvdykKKysgICBhbmQgd3JpdGUgd2hldGhlciBlYWNoIHdjaGFyX3QgaXMgYmluYXJ5IGRhdGEgdG8gaXNfYmluYXJ5LgorKyAgIFRoaXMgYXNzdW1lIGludmFsaWQgbXVsdGlieXRlIHNlcXVlbmNlcyBhcyBiaW5hcnkgZGF0YS4KKysgICBXZSBhc3N1bWUgb2Zmc2V0X2J1ZmZlciBhbmQgaXNfYmluYXJ5IGlzIGFscmVhZHkgYWxsb2NhdGVkCisrICAgZW5vdWdoIHNwYWNlLiAgKi8KKysKKytzdGF0aWMgc2l6ZV90IGNvbnZlcnRfbWJzX3RvX3djcyAoQ0hBUl9UICpkZXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmMsCisrCQkJCSAgc2l6ZV90IGxlbiwgaW50ICpvZmZzZXRfYnVmZmVyLAorKwkJCQkgIGNoYXIgKmlzX2JpbmFyeSk7Cisrc3RhdGljIHNpemVfdAorK2NvbnZlcnRfbWJzX3RvX3djcyAoQ0hBUl9UICpkZXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyKnNyYywgc2l6ZV90IGxlbiwKKysgICAgICAgICAgICAgICAgICAgIGludCAqb2Zmc2V0X2J1ZmZlciwgY2hhciAqaXNfYmluYXJ5KQorKyAgICAgLyogSXQgaG9sZCBjb3JyZXNwb25kYW5jZXMgYmV0d2VlbiBzcmMoY2hhciBzdHJpbmcpIGFuZAorKwlkZXN0KHdjaGFyX3Qgc3RyaW5nKSBmb3Igb3B0aW1pemF0aW9uLgorKwllLmcuIHNyYyAgPSAieHh4eXp6IgorKyAgICAgICAgICAgICBkZXN0ID0geydYJywgJ1knLCAnWid9CisrCSAgICAgIChlYWNoICJ4eHgiLCAieSIgYW5kICJ6eiIgcmVwcmVzZW50IG9uZSBtdWx0aWJ5dGUgY2hhcmFjdGVyCisrCSAgICAgICBjb3JyZXNwb25kaW5nIHRvICdYJywgJ1knIGFuZCAnWicuKQorKwkgIG9mZnNldF9idWZmZXIgPSB7MCwgMCszKCJ4eHgiKSwgMCszKzEoInkiKSwgMCszKzErMigienoiKX0KKysJICAJICAgICAgICA9IHswLCAzLCA0LCA2fQorKyAgICAgKi8KKyt7CisrICB3Y2hhcl90ICpwZGVzdCA9IGRlc3Q7CisrICBjb25zdCB1bnNpZ25lZCBjaGFyICpwc3JjID0gc3JjOworKyAgc2l6ZV90IHdjX2NvdW50ID0gMDsKKysKKysgIG1ic3RhdGVfdCBtYnM7CisrICBpbnQgaSwgY29uc3VtZWQ7CisrICBzaXplX3QgbWJfcmVtYWluID0gbGVuOworKyAgc2l6ZV90IG1iX2NvdW50ID0gMDsKKysKKysgIC8qIEluaXRpYWxpemUgdGhlIGNvbnZlcnNpb24gc3RhdGUuICAqLworKyAgbWVtc2V0ICgmbWJzLCAwLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKworKyAgb2Zmc2V0X2J1ZmZlclswXSA9IDA7CisrICBmb3IoIDsgbWJfcmVtYWluID4gMCA7ICsrd2NfY291bnQsICsrcGRlc3QsIG1iX3JlbWFpbiAtPSBjb25zdW1lZCwKKysJIHBzcmMgKz0gY29uc3VtZWQpCisrICAgIHsKKysjaWZkZWYgX0xJQkMKKysgICAgICBjb25zdW1lZCA9IF9fbWJydG93YyAocGRlc3QsIHBzcmMsIG1iX3JlbWFpbiwgJm1icyk7CisrI2Vsc2UKKysgICAgICBjb25zdW1lZCA9IG1icnRvd2MgKHBkZXN0LCBwc3JjLCBtYl9yZW1haW4sICZtYnMpOworKyNlbmRpZgorKworKyAgICAgIGlmIChjb25zdW1lZCA8PSAwKQorKwkvKiBmYWlsZWQgdG8gY29udmVydC4gbWF5YmUgc3JjIGNvbnRhaW5zIGJpbmFyeSBkYXRhLgorKwkgICBTbyB3ZSBjb25zdW1lIDEgYnl0ZSBtYW51YWx5LiAgKi8KKysJeworKwkgICpwZGVzdCA9ICpwc3JjOworKwkgIGNvbnN1bWVkID0gMTsKKysJICBpc19iaW5hcnlbd2NfY291bnRdID0gVFJVRTsKKysJfQorKyAgICAgIGVsc2UKKysJaXNfYmluYXJ5W3djX2NvdW50XSA9IEZBTFNFOworKyAgICAgIC8qIEluIHNqaXMgZW5jb2RpbmcsIHdlIHVzZSB5ZW4gc2lnbiBhcyBlc2NhcGUgY2hhcmFjdGVyIGluCisrCSBwbGFjZSBvZiByZXZlcnNlIHNvbGlkdXMuIFNvIHdlIGNvbnZlcnQgMHg1Yyh5ZW4gc2lnbiBpbgorKwkgc2ppcykgdG8gbm90IDB4YTUoeWVuIHNpZ24gaW4gVUNTMikgYnV0IDB4NWMocmV2ZXJzZQorKwkgc29saWR1cyBpbiBVQ1MyKS4gICovCisrICAgICAgaWYgKGNvbnN1bWVkID09IDEgJiYgKGludCkgKnBzcmMgPT0gMHg1YyAmJiAoaW50KSAqcGRlc3QgPT0gMHhhNSkKKysJKnBkZXN0ID0gKHdjaGFyX3QpICpwc3JjOworKworKyAgICAgIG9mZnNldF9idWZmZXJbd2NfY291bnQgKyAxXSA9IG1iX2NvdW50ICs9IGNvbnN1bWVkOworKyAgICB9CisrCisrICAvKiBGaWxsIHJlbWFpbiBvZiB0aGUgYnVmZmVyIHdpdGggc2VudGluZWwuICAqLworKyAgZm9yIChpID0gd2NfY291bnQgKyAxIDsgaSA8PSBsZW4gOyBpKyspCisrICAgIG9mZnNldF9idWZmZXJbaV0gPSBtYl9jb3VudCArIDE7CisrCisrICByZXR1cm4gd2NfY291bnQ7CisrfQorKworKyMgZW5kaWYgLyogV0NIQVIgKi8KKysKKysjZWxzZSAvKiBub3QgSU5TSURFX1JFQ1VSU0lPTiAqLworKworKy8qIFNldCBieSBgcmVfc2V0X3N5bnRheCcgdG8gdGhlIGN1cnJlbnQgcmVnZXhwIHN5bnRheCB0byByZWNvZ25pemUuICBDYW4KKysgICBhbHNvIGJlIGFzc2lnbmVkIHRvIGFyYml0cmFyaWx5OiBlYWNoIHBhdHRlcm4gYnVmZmVyIHN0b3JlcyBpdHMgb3duCisrICAgc3ludGF4LCBzbyBpdCBjYW4gYmUgY2hhbmdlZCBiZXR3ZWVuIHJlZ2V4IGNvbXBpbGF0aW9ucy4gICovCisrLyogVGhpcyBoYXMgbm8gaW5pdGlhbGl6ZXIgYmVjYXVzZSBpbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gRW1hY3MKKysgICBiZWNvbWUgcmVhZC1vbmx5IGFmdGVyIGR1bXBpbmcuICAqLworK3JlZ19zeW50YXhfdCByZV9zeW50YXhfb3B0aW9uczsKKysKKysKKysvKiBTcGVjaWZ5IHRoZSBwcmVjaXNlIHN5bnRheCBvZiByZWdleHBzIGZvciBjb21waWxhdGlvbi4gIFRoaXMgcHJvdmlkZXMKKysgICBmb3IgY29tcGF0aWJpbGl0eSBmb3IgdmFyaW91cyB1dGlsaXRpZXMgd2hpY2ggaGlzdG9yaWNhbGx5IGhhdmUKKysgICBkaWZmZXJlbnQsIGluY29tcGF0aWJsZSBzeW50YXhlcy4KKysKKysgICBUaGUgYXJndW1lbnQgU1lOVEFYIGlzIGEgYml0IG1hc2sgY29tcHJpc2VkIG9mIHRoZSB2YXJpb3VzIGJpdHMKKysgICBkZWZpbmVkIGluIHJlZ2V4LmguICBXZSByZXR1cm4gdGhlIG9sZCBzeW50YXguICAqLworKworK3JlZ19zeW50YXhfdAorK3JlX3NldF9zeW50YXggKHJlZ19zeW50YXhfdCBzeW50YXgpCisreworKyAgcmVnX3N5bnRheF90IHJldCA9IHJlX3N5bnRheF9vcHRpb25zOworKworKyAgcmVfc3ludGF4X29wdGlvbnMgPSBzeW50YXg7CisrIyBpZmRlZiBERUJVRworKyAgaWYgKHN5bnRheCAmIFJFX0RFQlVHKQorKyAgICBkZWJ1ZyA9IDE7CisrICBlbHNlIGlmIChkZWJ1ZykgLyogd2FzIG9uIGJ1dCBub3cgaXMgbm90ICovCisrICAgIGRlYnVnID0gMDsKKysjIGVuZGlmIC8qIERFQlVHICovCisrICByZXR1cm4gcmV0OworK30KKysjIGlmZGVmIF9MSUJDCisrd2Vha19hbGlhcyAoX19yZV9zZXRfc3ludGF4LCByZV9zZXRfc3ludGF4KQorKyMgZW5kaWYKKysMCisrLyogVGhpcyB0YWJsZSBnaXZlcyBhbiBlcnJvciBtZXNzYWdlIGZvciBlYWNoIG9mIHRoZSBlcnJvciBjb2RlcyBsaXN0ZWQKKysgICBpbiByZWdleC5oLiAgT2J2aW91c2x5IHRoZSBvcmRlciBoZXJlIGhhcyB0byBiZSBzYW1lIGFzIHRoZXJlLgorKyAgIFBPU0lYIGRvZXNuJ3QgcmVxdWlyZSB0aGF0IHdlIGRvIGFueXRoaW5nIGZvciBSRUdfTk9FUlJPUiwKKysgICBidXQgd2h5IG5vdCBiZSBuaWNlPyAgKi8KKysKKytzdGF0aWMgY29uc3QgY2hhciAqcmVfZXJyb3JfbXNnaWRbXSA9CisrICB7CisrICAgIGdldHRleHRfbm9vcCAoIlN1Y2Nlc3MiKSwJLyogUkVHX05PRVJST1IgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiTm8gbWF0Y2giKSwJLyogUkVHX05PTUFUQ0ggKi8KKysgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24iKSwgLyogUkVHX0JBRFBBVCAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIGNvbGxhdGlvbiBjaGFyYWN0ZXIiKSwgLyogUkVHX0VDT0xMQVRFICovCisrICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgY2hhcmFjdGVyIGNsYXNzIG5hbWUiKSwgLyogUkVHX0VDVFlQRSAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJUcmFpbGluZyBiYWNrc2xhc2giKSwgLyogUkVHX0VFU0NBUEUgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCBiYWNrIHJlZmVyZW5jZSIpLCAvKiBSRUdfRVNVQlJFRyAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJVbm1hdGNoZWQgWyBvciBbXiIpLAkvKiBSRUdfRUJSQUNLICovCisrICAgIGdldHRleHRfbm9vcCAoIlVubWF0Y2hlZCAoIG9yIFxcKCIpLCAvKiBSRUdfRVBBUkVOICovCisrICAgIGdldHRleHRfbm9vcCAoIlVubWF0Y2hlZCBcXHsiKSwgLyogUkVHX0VCUkFDRSAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIGNvbnRlbnQgb2YgXFx7XFx9IiksIC8qIFJFR19CQURCUiAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIHJhbmdlIGVuZCIpLAkvKiBSRUdfRVJBTkdFICovCisrICAgIGdldHRleHRfbm9vcCAoIk1lbW9yeSBleGhhdXN0ZWQiKSwgLyogUkVHX0VTUEFDRSAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIHByZWNlZGluZyByZWd1bGFyIGV4cHJlc3Npb24iKSwgLyogUkVHX0JBRFJQVCAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJQcmVtYXR1cmUgZW5kIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbiIpLCAvKiBSRUdfRUVORCAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJSZWd1bGFyIGV4cHJlc3Npb24gdG9vIGJpZyIpLCAvKiBSRUdfRVNJWkUgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiVW5tYXRjaGVkICkgb3IgXFwpIikgLyogUkVHX0VSUEFSRU4gKi8KKysgIH07CisrDAorKyNlbmRpZiAvKiBJTlNJREVfUkVDVVJTSU9OICovCisrCisrI2lmbmRlZiBERUZJTkVEX09OQ0UKKysvKiBBdm9pZGluZyBhbGxvY2EgZHVyaW5nIG1hdGNoaW5nLCB0byBwbGFjYXRlIHJfYWxsb2MuICAqLworKworKy8qIERlZmluZSBNQVRDSF9NQVlfQUxMT0NBVEUgdW5sZXNzIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlCisrICAgc2VhcmNoaW5nIGFuZCBtYXRjaGluZyBmdW5jdGlvbnMgc2hvdWxkIG5vdCBjYWxsIGFsbG9jYS4gIE9uIHNvbWUKKysgICBzeXN0ZW1zLCBhbGxvY2EgaXMgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YgbWFsbG9jLCBhbmQgaWYgd2UncmUKKysgICB1c2luZyB0aGUgcmVsb2NhdGluZyBhbGxvY2F0b3Igcm91dGluZXMsIHRoZW4gbWFsbG9jIGNvdWxkIGNhdXNlIGEKKysgICByZWxvY2F0aW9uLCB3aGljaCBtaWdodCAoaWYgdGhlIHN0cmluZ3MgYmVpbmcgc2VhcmNoZWQgYXJlIGluIHRoZQorKyAgIHJhbGxvYyBoZWFwKSBzaGlmdCB0aGUgZGF0YSBvdXQgZnJvbSB1bmRlcm5lYXRoIHRoZSByZWdleHAKKysgICByb3V0aW5lcy4KKysKKysgICBIZXJlJ3MgYW5vdGhlciByZWFzb24gdG8gYXZvaWQgYWxsb2NhdGlvbjogRW1hY3MKKysgICBwcm9jZXNzZXMgaW5wdXQgZnJvbSBYIGluIGEgc2lnbmFsIGhhbmRsZXI7IHByb2Nlc3NpbmcgWCBpbnB1dCBtYXkKKysgICBjYWxsIG1hbGxvYzsgaWYgaW5wdXQgYXJyaXZlcyB3aGlsZSBhIG1hdGNoaW5nIHJvdXRpbmUgaXMgY2FsbGluZworKyAgIG1hbGxvYywgdGhlbiB3ZSdyZSBzY3JvZC4gIEJ1dCBFbWFjcyBjYW4ndCBqdXN0IGJsb2NrIGlucHV0IHdoaWxlCisrICAgY2FsbGluZyBtYXRjaGluZyByb3V0aW5lczsgdGhlbiB3ZSBkb24ndCBub3RpY2UgaW50ZXJydXB0cyB3aGVuCisrICAgdGhleSBjb21lIGluLiAgU28sIEVtYWNzIGJsb2NrcyBpbnB1dCBhcm91bmQgYWxsIHJlZ2V4cCBjYWxscworKyAgIGV4Y2VwdCB0aGUgbWF0Y2hpbmcgY2FsbHMsIHdoaWNoIGl0IGxlYXZlcyB1bnByb3RlY3RlZCwgaW4gdGhlCisrICAgZmFpdGggdGhhdCB0aGV5IHdpbGwgbm90IG1hbGxvYy4gICovCisrCisrLyogTm9ybWFsbHksIHRoaXMgaXMgZmluZS4gICovCisrIyBkZWZpbmUgTUFUQ0hfTUFZX0FMTE9DQVRFCisrCisrLyogV2hlbiB1c2luZyBHTlUgQywgd2UgYXJlIG5vdCBSRUFMTFkgdXNpbmcgdGhlIEMgYWxsb2NhLCBubyBtYXR0ZXIKKysgICB3aGF0IGNvbmZpZy5oIG1heSBzYXkuICBTbyBkb24ndCB0YWtlIHByZWNhdXRpb25zIGZvciBpdC4gICovCisrIyBpZmRlZiBfX0dOVUNfXworKyMgIHVuZGVmIENfQUxMT0NBCisrIyBlbmRpZgorKworKy8qIFRoZSBtYXRjaCByb3V0aW5lcyBtYXkgbm90IGFsbG9jYXRlIGlmICgxKSB0aGV5IHdvdWxkIGRvIGl0IHdpdGggbWFsbG9jCisrICAgYW5kICgyKSBpdCdzIG5vdCBzYWZlIGZvciB0aGVtIHRvIHVzZSBtYWxsb2MuCisrICAgTm90ZSB0aGF0IGlmIFJFTF9BTExPQyBpcyBkZWZpbmVkLCBtYXRjaGluZyB3b3VsZCBub3QgdXNlIG1hbGxvYyBmb3IgdGhlCisrICAgZmFpbHVyZSBzdGFjaywgYnV0IHdlIHdvdWxkIHN0aWxsIHVzZSBpdCBmb3IgdGhlIHJlZ2lzdGVyIHZlY3RvcnM7CisrICAgc28gUkVMX0FMTE9DIHNob3VsZCBub3QgYWZmZWN0IHRoaXMuICAqLworKyMgaWYgKGRlZmluZWQgQ19BTExPQ0EgfHwgZGVmaW5lZCBSRUdFWF9NQUxMT0MpICYmIGRlZmluZWQgZW1hY3MKKysjICB1bmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUKKysjIGVuZGlmCisrI2VuZGlmIC8qIG5vdCBERUZJTkVEX09OQ0UgKi8KKysMCisrI2lmZGVmIElOU0lERV9SRUNVUlNJT04KKysvKiBGYWlsdXJlIHN0YWNrIGRlY2xhcmF0aW9ucyBhbmQgbWFjcm9zOyBib3RoIHJlX2NvbXBpbGVfZmFzdG1hcCBhbmQKKysgICByZV9tYXRjaF8yIHVzZSBhIGZhaWx1cmUgc3RhY2suICBUaGVzZSBoYXZlIHRvIGJlIG1hY3JvcyBiZWNhdXNlIG9mCisrICAgUkVHRVhfQUxMT0NBVEVfU1RBQ0suICAqLworKworKworKy8qIE51bWJlciBvZiBmYWlsdXJlIHBvaW50cyBmb3Igd2hpY2ggdG8gaW5pdGlhbGx5IGFsbG9jYXRlIHNwYWNlCisrICAgd2hlbiBtYXRjaGluZy4gIElmIHRoaXMgbnVtYmVyIGlzIGV4Y2VlZGVkLCB3ZSBhbGxvY2F0ZSBtb3JlCisrICAgc3BhY2UsIHNvIGl0IGlzIG5vdCBhIGhhcmQgbGltaXQuICAqLworKyMgaWZuZGVmIElOSVRfRkFJTFVSRV9BTExPQworKyMgIGRlZmluZSBJTklUX0ZBSUxVUkVfQUxMT0MgNQorKyMgZW5kaWYKKysKKysvKiBSb3VnaGx5IHRoZSBtYXhpbXVtIG51bWJlciBvZiBmYWlsdXJlIHBvaW50cyBvbiB0aGUgc3RhY2suICBXb3VsZCBiZQorKyAgIGV4YWN0bHkgdGhhdCBpZiBhbHdheXMgdXNlZCBNQVhfRkFJTFVSRV9JVEVNUyBpdGVtcyBlYWNoIHRpbWUgd2UgZmFpbGVkLgorKyAgIFRoaXMgaXMgYSB2YXJpYWJsZSBvbmx5IHNvIHVzZXJzIG9mIHJlZ2V4IGNhbiBhc3NpZ24gdG8gaXQ7IHdlIG5ldmVyCisrICAgY2hhbmdlIGl0IG91cnNlbHZlcy4gICovCisrCisrCisrIyBpZm5kZWYgREVGSU5FRF9PTkNFCisrCisrIyAgaWZkZWYgSU5UX0lTXzE2QklUCisrIyAgIGRlZmluZSBSRV9NX0ZfVFlQRSBsb25nIGludAorKyMgIGVsc2UKKysjICAgZGVmaW5lIFJFX01fRl9UWVBFIGludAorKyMgIGVuZGlmIC8qIElOVF9JU18xNkJJVCAqLworKworKyMgIGlmZGVmIE1BVENIX01BWV9BTExPQ0FURQorKy8qIDQ0MDAgd2FzIGVub3VnaCB0byBjYXVzZSBhIGNyYXNoIG9uIEFscGhhIE9TRi8xLAorKyAgIHdob3NlIGRlZmF1bHQgc3RhY2sgbGltaXQgaXMgMm1iLiAgKi8KKysjICAgZGVmaW5lIFJFX01fRl9ERUZBVUxUIDQwMDAKKysjICBlbHNlCisrIyAgIGRlZmluZSBSRV9NX0ZfREVGQVVMVCAyMDAwCisrIyAgZW5kaWYgLyogTUFUQ0hfTUFZX0FMTE9DQVRFICovCisrCisrIyAgaW5jbHVkZSA8c2hsaWItY29tcGF0Lmg+CisrCisrIyAgaWYgU0hMSUJfQ09NUEFUIChsaWJjLCBHTElCQ18yXzAsIEdMSUJDXzJfMykKKytsaW5rX3dhcm5pbmcgKHJlX21heF9mYWlsdXJlcywgInRoZSAncmVfbWF4X2ZhaWx1cmVzJyB2YXJpYWJsZSBpcyBvYnNvbGV0ZSBhbmQgd2lsbCBnbyBhd2F5LiIpCisrUkVfTV9GX1RZUEUgcmVfbWF4X2ZhaWx1cmVzID0gUkVfTV9GX0RFRkFVTFQ7CisrIyAgZWxzZQorK1JFX01fRl9UWVBFIHJlX21heF9mYWlsdXJlcyBhdHRyaWJ1dGVfaGlkZGVuID0gUkVfTV9GX0RFRkFVTFQ7CisrIyAgZW5kaWYgLyogU0hMSUJfQ09NUEFUICovCisrCisrIyAgdW5kZWYgUkVfTV9GX1RZUEUKKysjICB1bmRlZiBSRV9NX0ZfREVGQVVMVAorKworKyMgZW5kaWYgLyogREVGSU5FRF9PTkNFICovCisrCisrIyBpZmRlZiBJTlRfSVNfMTZCSVQKKysKKyt1bmlvbiBQUkVGSVgoZmFpbF9zdGFja19lbHQpCisreworKyAgVUNIQVJfVCAqcG9pbnRlcjsKKysgIGxvbmcgaW50IGludGVnZXI7CisrfTsKKysKKyt0eXBlZGVmIHVuaW9uIFBSRUZJWChmYWlsX3N0YWNrX2VsdCkgUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpOworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpICpzdGFjazsKKysgIHVuc2lnbmVkIGxvbmcgaW50IHNpemU7CisrICB1bnNpZ25lZCBsb25nIGludCBhdmFpbDsJCS8qIE9mZnNldCBvZiBuZXh0IG9wZW4gcG9zaXRpb24uICAqLworK30gUFJFRklYKGZhaWxfc3RhY2tfdHlwZSk7CisrCisrIyBlbHNlIC8qIG5vdCBJTlRfSVNfMTZCSVQgKi8KKysKKyt1bmlvbiBQUkVGSVgoZmFpbF9zdGFja19lbHQpCisreworKyAgVUNIQVJfVCAqcG9pbnRlcjsKKysgIGludCBpbnRlZ2VyOworK307CisrCisrdHlwZWRlZiB1bmlvbiBQUkVGSVgoZmFpbF9zdGFja19lbHQpIFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KTsKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSAqc3RhY2s7CisrICB1bnNpZ25lZCBzaXplOworKyAgdW5zaWduZWQgYXZhaWw7CQkJLyogT2Zmc2V0IG9mIG5leHQgb3BlbiBwb3NpdGlvbi4gICovCisrfSBQUkVGSVgoZmFpbF9zdGFja190eXBlKTsKKysKKysjIGVuZGlmIC8qIElOVF9JU18xNkJJVCAqLworKworKyMgaWZuZGVmIERFRklORURfT05DRQorKyMgIGRlZmluZSBGQUlMX1NUQUNLX0VNUFRZKCkgICAgIChmYWlsX3N0YWNrLmF2YWlsID09IDApCisrIyAgZGVmaW5lIEZBSUxfU1RBQ0tfUFRSX0VNUFRZKCkgKGZhaWxfc3RhY2tfcHRyLT5hdmFpbCA9PSAwKQorKyMgIGRlZmluZSBGQUlMX1NUQUNLX0ZVTEwoKSAgICAgIChmYWlsX3N0YWNrLmF2YWlsID09IGZhaWxfc3RhY2suc2l6ZSkKKysjIGVuZGlmCisrCisrCisrLyogRGVmaW5lIG1hY3JvcyB0byBpbml0aWFsaXplIGFuZCBmcmVlIHRoZSBmYWlsdXJlIHN0YWNrLgorKyAgIERvIGByZXR1cm4gLTInIGlmIHRoZSBhbGxvYyBmYWlscy4gICovCisrCisrIyBpZmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUKKysjICBkZWZpbmUgSU5JVF9GQUlMX1NUQUNLKCkJCQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBmYWlsX3N0YWNrLnN0YWNrID0gKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSAqKQkJXAorKyAgICAgIFJFR0VYX0FMTE9DQVRFX1NUQUNLIChJTklUX0ZBSUxVUkVfQUxMT0MgKiBzaXplb2YgKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSkpOyBcCisrCQkJCQkJCQkJXAorKyAgICBpZiAoZmFpbF9zdGFjay5zdGFjayA9PSBOVUxMKQkJCQlcCisrICAgICAgcmV0dXJuIC0yOwkJCQkJCQlcCisrCQkJCQkJCQkJXAorKyAgICBmYWlsX3N0YWNrLnNpemUgPSBJTklUX0ZBSUxVUkVfQUxMT0M7CQkJXAorKyAgICBmYWlsX3N0YWNrLmF2YWlsID0gMDsJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrCisrIyAgZGVmaW5lIFJFU0VUX0ZBSUxfU1RBQ0soKSAgUkVHRVhfRlJFRV9TVEFDSyAoZmFpbF9zdGFjay5zdGFjaykKKysjIGVsc2UKKysjICBkZWZpbmUgSU5JVF9GQUlMX1NUQUNLKCkJCQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBmYWlsX3N0YWNrLmF2YWlsID0gMDsJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrCisrIyAgZGVmaW5lIFJFU0VUX0ZBSUxfU1RBQ0soKQorKyMgZW5kaWYKKysKKysKKysvKiBEb3VibGUgdGhlIHNpemUgb2YgRkFJTF9TVEFDSywgdXAgdG8gYXBwcm94aW1hdGVseSBgcmVfbWF4X2ZhaWx1cmVzJyBpdGVtcy4KKysKKysgICBSZXR1cm4gMSBpZiBzdWNjZWVkcywgYW5kIDAgaWYgZWl0aGVyIHJhbiBvdXQgb2YgbWVtb3J5CisrICAgYWxsb2NhdGluZyBzcGFjZSBmb3IgaXQgb3IgaXQgd2FzIGFscmVhZHkgdG9vIGxhcmdlLgorKworKyAgIFJFR0VYX1JFQUxMT0NBVEVfU1RBQ0sgcmVxdWlyZXMgYGRlc3RpbmF0aW9uJyBiZSBkZWNsYXJlZC4gICAqLworKworKyMgZGVmaW5lIERPVUJMRV9GQUlMX1NUQUNLKGZhaWxfc3RhY2spCQkJCQlcCisrICAoKGZhaWxfc3RhY2spLnNpemUgPiAodW5zaWduZWQpIChyZV9tYXhfZmFpbHVyZXMgKiBNQVhfRkFJTFVSRV9JVEVNUykJXAorKyAgID8gMAkJCQkJCQkJCVwKKysgICA6ICgoZmFpbF9zdGFjaykuc3RhY2sgPSAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpICopCQkJXAorKyAgICAgICAgUkVHRVhfUkVBTExPQ0FURV9TVEFDSyAoKGZhaWxfc3RhY2spLnN0YWNrLCAJCQlcCisrICAgICAgICAgIChmYWlsX3N0YWNrKS5zaXplICogc2l6ZW9mIChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkpLAlcCisrICAgICAgICAgICgoZmFpbF9zdGFjaykuc2l6ZSA8PCAxKSAqIHNpemVvZiAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpKSksXAorKwkJCQkJCQkJCVwKKysgICAgICAoZmFpbF9zdGFjaykuc3RhY2sgPT0gTlVMTAkJCQkJXAorKyAgICAgID8gMAkJCQkJCQkJXAorKyAgICAgIDogKChmYWlsX3N0YWNrKS5zaXplIDw8PSAxLCAJCQkJCVwKKysgICAgICAgICAxKSkpCisrCisrCisrLyogUHVzaCBwb2ludGVyIFBPSU5URVIgb24gRkFJTF9TVEFDSy4KKysgICBSZXR1cm4gMSBpZiB3YXMgYWJsZSB0byBkbyBzbyBhbmQgMCBpZiByYW4gb3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nCisrICAgc3BhY2UgdG8gZG8gc28uICAqLworKyMgZGVmaW5lIFBVU0hfUEFUVEVSTl9PUChQT0lOVEVSLCBGQUlMX1NUQUNLKQkJCQlcCisrICAoKEZBSUxfU1RBQ0tfRlVMTCAoKQkJCQkJCQlcCisrICAgICYmICFET1VCTEVfRkFJTF9TVEFDSyAoRkFJTF9TVEFDSykpCQkJCQlcCisrICAgPyAwCQkJCQkJCQkJXAorKyAgIDogKChGQUlMX1NUQUNLKS5zdGFja1soRkFJTF9TVEFDSykuYXZhaWwrK10ucG9pbnRlciA9IFBPSU5URVIsCVwKKysgICAgICAxKSkKKysKKysvKiBQdXNoIGEgcG9pbnRlciB2YWx1ZSBvbnRvIHRoZSBmYWlsdXJlIHN0YWNrLgorKyAgIEFzc3VtZXMgdGhlIHZhcmlhYmxlIGBmYWlsX3N0YWNrJy4gIFByb2JhYmx5IHNob3VsZCBvbmx5CisrICAgYmUgY2FsbGVkIGZyb20gd2l0aGluIGBQVVNIX0ZBSUxVUkVfUE9JTlQnLiAgKi8KKysjIGRlZmluZSBQVVNIX0ZBSUxVUkVfUE9JTlRFUihpdGVtKQkJCQkJXAorKyAgZmFpbF9zdGFjay5zdGFja1tmYWlsX3N0YWNrLmF2YWlsKytdLnBvaW50ZXIgPSAoVUNIQVJfVCAqKSAoaXRlbSkKKysKKysvKiBUaGlzIHB1c2hlcyBhbiBpbnRlZ2VyLXZhbHVlZCBpdGVtIG9udG8gdGhlIGZhaWx1cmUgc3RhY2suCisrICAgQXNzdW1lcyB0aGUgdmFyaWFibGUgYGZhaWxfc3RhY2snLiAgUHJvYmFibHkgc2hvdWxkIG9ubHkKKysgICBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYFBVU0hfRkFJTFVSRV9QT0lOVCcuICAqLworKyMgZGVmaW5lIFBVU0hfRkFJTFVSRV9JTlQoaXRlbSkJCQkJCVwKKysgIGZhaWxfc3RhY2suc3RhY2tbZmFpbF9zdGFjay5hdmFpbCsrXS5pbnRlZ2VyID0gKGl0ZW0pCisrCisrLyogUHVzaCBhIGZhaWxfc3RhY2tfZWx0X3QgdmFsdWUgb250byB0aGUgZmFpbHVyZSBzdGFjay4KKysgICBBc3N1bWVzIHRoZSB2YXJpYWJsZSBgZmFpbF9zdGFjaycuICBQcm9iYWJseSBzaG91bGQgb25seQorKyAgIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBgUFVTSF9GQUlMVVJFX1BPSU5UJy4gICovCisrIyBkZWZpbmUgUFVTSF9GQUlMVVJFX0VMVChpdGVtKQkJCQkJXAorKyAgZmFpbF9zdGFjay5zdGFja1tmYWlsX3N0YWNrLmF2YWlsKytdID0gIChpdGVtKQorKworKy8qIFRoZXNlIHRocmVlIFBPUC4uLiBvcGVyYXRpb25zIGNvbXBsZW1lbnQgdGhlIHRocmVlIFBVU0guLi4gb3BlcmF0aW9ucy4KKysgICBBbGwgYXNzdW1lIHRoYXQgYGZhaWxfc3RhY2snIGlzIG5vbmVtcHR5LiAgKi8KKysjIGRlZmluZSBQT1BfRkFJTFVSRV9QT0lOVEVSKCkgZmFpbF9zdGFjay5zdGFja1stLWZhaWxfc3RhY2suYXZhaWxdLnBvaW50ZXIKKysjIGRlZmluZSBQT1BfRkFJTFVSRV9JTlQoKSBmYWlsX3N0YWNrLnN0YWNrWy0tZmFpbF9zdGFjay5hdmFpbF0uaW50ZWdlcgorKyMgZGVmaW5lIFBPUF9GQUlMVVJFX0VMVCgpIGZhaWxfc3RhY2suc3RhY2tbLS1mYWlsX3N0YWNrLmF2YWlsXQorKworKy8qIFVzZWQgdG8gb21pdCBwdXNoaW5nIGZhaWx1cmUgcG9pbnQgaWQncyB3aGVuIHdlJ3JlIG5vdCBkZWJ1Z2dpbmcuICAqLworKyMgaWZkZWYgREVCVUcKKysjICBkZWZpbmUgREVCVUdfUFVTSCBQVVNIX0ZBSUxVUkVfSU5UCisrIyAgZGVmaW5lIERFQlVHX1BPUChpdGVtX2FkZHIpICooaXRlbV9hZGRyKSA9IFBPUF9GQUlMVVJFX0lOVCAoKQorKyMgZWxzZQorKyMgIGRlZmluZSBERUJVR19QVVNIKGl0ZW0pCisrIyAgZGVmaW5lIERFQlVHX1BPUChpdGVtX2FkZHIpCisrIyBlbmRpZgorKworKworKy8qIFB1c2ggdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0ZSB3ZSB3aWxsIG5lZWQKKysgICBpZiB3ZSBldmVyIGZhaWwgYmFjayB0byBpdC4KKysKKysgICBSZXF1aXJlcyB2YXJpYWJsZXMgZmFpbF9zdGFjaywgcmVnc3RhcnQsIHJlZ2VuZCwgcmVnX2luZm8sIGFuZAorKyAgIG51bV9yZWdzX3B1c2hlZCBiZSBkZWNsYXJlZC4gIERPVUJMRV9GQUlMX1NUQUNLIHJlcXVpcmVzIGBkZXN0aW5hdGlvbicKKysgICBiZSBkZWNsYXJlZC4KKysKKysgICBEb2VzIGByZXR1cm4gRkFJTFVSRV9DT0RFJyBpZiBydW5zIG91dCBvZiBtZW1vcnkuICAqLworKworKyMgZGVmaW5lIFBVU0hfRkFJTFVSRV9QT0lOVChwYXR0ZXJuX3BsYWNlLCBzdHJpbmdfcGxhY2UsIGZhaWx1cmVfY29kZSkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgY2hhciAqZGVzdGluYXRpb247CQkJCQkJCVwKKysgICAgLyogTXVzdCBiZSBpbnQsIHNvIHdoZW4gd2UgZG9uJ3Qgc2F2ZSBhbnkgcmVnaXN0ZXJzLCB0aGUgYXJpdGhtZXRpYwlcCisrICAgICAgIG9mIDAgKyAtMSBpc24ndCBkb25lIGFzIHVuc2lnbmVkLiAgKi8JCQkJXAorKyAgICAvKiBDYW4ndCBiZSBpbnQsIHNpbmNlIHRoZXJlIGlzIG5vdCBhIHNocmVkIG9mIGEgZ3VhcmFudGVlIHRoYXQgaW50CVwKKysgICAgICAgaXMgd2lkZSBlbm91Z2ggdG8gaG9sZCBhIHZhbHVlIG9mIHNvbWV0aGluZyB0byB3aGljaCBwb2ludGVyIGNhbglcCisrICAgICAgIGJlIGFzc2lnbmVkICovCQkJCQkJCVwKKysgICAgYWN0aXZlX3JlZ190IHRoaXNfcmVnOwkJCQkJCVwKKysgICAgCQkJCQkJCQkJXAorKyAgICBERUJVR19TVEFURU1FTlQgKGZhaWx1cmVfaWQrKyk7CQkJCQlcCisrICAgIERFQlVHX1NUQVRFTUVOVCAobmZhaWx1cmVfcG9pbnRzX3B1c2hlZCsrKTsJCQkJXAorKyAgICBERUJVR19QUklOVDIgKCJcblBVU0hfRkFJTFVSRV9QT0lOVCAjJXU6XG4iLCBmYWlsdXJlX2lkKTsJCVwKKysgICAgREVCVUdfUFJJTlQyICgiICBCZWZvcmUgcHVzaCwgbmV4dCBhdmFpbDogJWRcbiIsIChmYWlsX3N0YWNrKS5hdmFpbCk7XAorKyAgICBERUJVR19QUklOVDIgKCIgICAgICAgICAgICAgICAgICAgICBzaXplOiAlZFxuIiwgKGZhaWxfc3RhY2spLnNpemUpO1wKKysJCQkJCQkJCQlcCisrICAgIERFQlVHX1BSSU5UMiAoIiAgc2xvdHMgbmVlZGVkOiAlbGRcbiIsIE5VTV9GQUlMVVJFX0lURU1TKTsJCVwKKysgICAgREVCVUdfUFJJTlQyICgiICAgICBhdmFpbGFibGU6ICVkXG4iLCBSRU1BSU5JTkdfQVZBSUxfU0xPVFMpOwlcCisrCQkJCQkJCQkJXAorKyAgICAvKiBFbnN1cmUgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgYWxsb2NhdGVkIGZvciB3aGF0IHdlIHdpbGwgcHVzaC4gICovCVwKKysgICAgd2hpbGUgKFJFTUFJTklOR19BVkFJTF9TTE9UUyA8IE5VTV9GQUlMVVJFX0lURU1TKQkJCVwKKysgICAgICB7CQkJCQkJCQkJXAorKyAgICAgICAgaWYgKCFET1VCTEVfRkFJTF9TVEFDSyAoZmFpbF9zdGFjaykpCQkJCVwKKysgICAgICAgICAgcmV0dXJuIGZhaWx1cmVfY29kZTsJCQkJCQlcCisrCQkJCQkJCQkJXAorKyAgICAgICAgREVCVUdfUFJJTlQyICgiXG4gIERvdWJsZWQgc3RhY2s7IHNpemUgbm93OiAlZFxuIiwJCVwKKysJCSAgICAgICAoZmFpbF9zdGFjaykuc2l6ZSk7CQkJCVwKKysgICAgICAgIERFQlVHX1BSSU5UMiAoIiAgc2xvdHMgYXZhaWxhYmxlOiAlZFxuIiwgUkVNQUlOSU5HX0FWQUlMX1NMT1RTKTtcCisrICAgICAgfQkJCQkJCQkJCVwKKysJCQkJCQkJCQlcCisrICAgIC8qIFB1c2ggdGhlIGluZm8sIHN0YXJ0aW5nIHdpdGggdGhlIHJlZ2lzdGVycy4gICovCQkJXAorKyAgICBERUJVR19QUklOVDEgKCJcbiIpOwkJCQkJCVwKKysJCQkJCQkJCQlcCisrICAgIGlmICgxKQkJCQkJCQkJXAorKyAgICAgIGZvciAodGhpc19yZWcgPSBsb3dlc3RfYWN0aXZlX3JlZzsgdGhpc19yZWcgPD0gaGlnaGVzdF9hY3RpdmVfcmVnOyBcCisrCSAgIHRoaXNfcmVnKyspCQkJCQkJCVwKKysJewkJCQkJCQkJXAorKwkgIERFQlVHX1BSSU5UMiAoIiAgUHVzaGluZyByZWc6ICVsdVxuIiwgdGhpc19yZWcpOwkJXAorKwkgIERFQlVHX1NUQVRFTUVOVCAobnVtX3JlZ3NfcHVzaGVkKyspOwkJCQlcCisrCQkJCQkJCQkJXAorKwkgIERFQlVHX1BSSU5UMiAoIiAgICBzdGFydDogJXBcbiIsIHJlZ3N0YXJ0W3RoaXNfcmVnXSk7CQlcCisrCSAgUFVTSF9GQUlMVVJFX1BPSU5URVIgKHJlZ3N0YXJ0W3RoaXNfcmVnXSk7CQkJXAorKwkJCQkJCQkJCVwKKysJICBERUJVR19QUklOVDIgKCIgICAgZW5kOiAlcFxuIiwgcmVnZW5kW3RoaXNfcmVnXSk7CQlcCisrCSAgUFVTSF9GQUlMVVJFX1BPSU5URVIgKHJlZ2VuZFt0aGlzX3JlZ10pOwkJCVwKKysJCQkJCQkJCQlcCisrCSAgREVCVUdfUFJJTlQyICgiICAgIGluZm86ICVwXG4gICAgICAiLAkJCQlcCisrCQkJcmVnX2luZm9bdGhpc19yZWddLndvcmQucG9pbnRlcik7CQlcCisrCSAgREVCVUdfUFJJTlQyICgiIG1hdGNoX251bGw9JWQiLAkJCQlcCisrCQkJUkVHX01BVENIX05VTExfU1RSSU5HX1AgKHJlZ19pbmZvW3RoaXNfcmVnXSkpOwlcCisrCSAgREVCVUdfUFJJTlQyICgiIGFjdGl2ZT0lZCIsIElTX0FDVElWRSAocmVnX2luZm9bdGhpc19yZWddKSk7CVwKKysJICBERUJVR19QUklOVDIgKCIgbWF0Y2hlZF9zb21ldGhpbmc9JWQiLAkJCVwKKysJCQlNQVRDSEVEX1NPTUVUSElORyAocmVnX2luZm9bdGhpc19yZWddKSk7CVwKKysJICBERUJVR19QUklOVDIgKCIgZXZlcl9tYXRjaGVkPSVkIiwJCQkJXAorKwkJCUVWRVJfTUFUQ0hFRF9TT01FVEhJTkcgKHJlZ19pbmZvW3RoaXNfcmVnXSkpOwlcCisrCSAgREVCVUdfUFJJTlQxICgiXG4iKTsJCQkJCQlcCisrCSAgUFVTSF9GQUlMVVJFX0VMVCAocmVnX2luZm9bdGhpc19yZWddLndvcmQpOwkJCVwKKysJfQkJCQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgREVCVUdfUFJJTlQyICgiICBQdXNoaW5nICBsb3cgYWN0aXZlIHJlZzogJWxkXG4iLCBsb3dlc3RfYWN0aXZlX3JlZyk7XAorKyAgICBQVVNIX0ZBSUxVUkVfSU5UIChsb3dlc3RfYWN0aXZlX3JlZyk7CQkJCVwKKysJCQkJCQkJCQlcCisrICAgIERFQlVHX1BSSU5UMiAoIiAgUHVzaGluZyBoaWdoIGFjdGl2ZSByZWc6ICVsZFxuIiwgaGlnaGVzdF9hY3RpdmVfcmVnKTtcCisrICAgIFBVU0hfRkFJTFVSRV9JTlQgKGhpZ2hlc3RfYWN0aXZlX3JlZyk7CQkJCVwKKysJCQkJCQkJCQlcCisrICAgIERFQlVHX1BSSU5UMiAoIiAgUHVzaGluZyBwYXR0ZXJuICVwOlxuIiwgcGF0dGVybl9wbGFjZSk7CQlcCisrICAgIERFQlVHX1BSSU5UX0NPTVBJTEVEX1BBVFRFUk4gKGJ1ZnAsIHBhdHRlcm5fcGxhY2UsIHBlbmQpOwkJXAorKyAgICBQVVNIX0ZBSUxVUkVfUE9JTlRFUiAocGF0dGVybl9wbGFjZSk7CQkJCVwKKysJCQkJCQkJCQlcCisrICAgIERFQlVHX1BSSU5UMiAoIiAgUHVzaGluZyBzdHJpbmcgJXA6IGAiLCBzdHJpbmdfcGxhY2UpOwkJXAorKyAgICBERUJVR19QUklOVF9ET1VCTEVfU1RSSU5HIChzdHJpbmdfcGxhY2UsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLCAgIFwKKysJCQkJIHNpemUyKTsJCQkJXAorKyAgICBERUJVR19QUklOVDEgKCInXG4iKTsJCQkJCQlcCisrICAgIFBVU0hfRkFJTFVSRV9QT0lOVEVSIChzdHJpbmdfcGxhY2UpOwkJCQlcCisrCQkJCQkJCQkJXAorKyAgICBERUJVR19QUklOVDIgKCIgIFB1c2hpbmcgZmFpbHVyZSBpZDogJXVcbiIsIGZhaWx1cmVfaWQpOwkJXAorKyAgICBERUJVR19QVVNIIChmYWlsdXJlX2lkKTsJCQkJCQlcCisrICB9IHdoaWxlICgwKQorKworKyMgaWZuZGVmIERFRklORURfT05DRQorKy8qIFRoaXMgaXMgdGhlIG51bWJlciBvZiBpdGVtcyB0aGF0IGFyZSBwdXNoZWQgYW5kIHBvcHBlZCBvbiB0aGUgc3RhY2sKKysgICBmb3IgZWFjaCByZWdpc3Rlci4gICovCisrIyAgZGVmaW5lIE5VTV9SRUdfSVRFTVMgIDMKKysKKysvKiBJbmRpdmlkdWFsIGl0ZW1zIGFzaWRlIGZyb20gdGhlIHJlZ2lzdGVycy4gICovCisrIyAgaWZkZWYgREVCVUcKKysjICAgZGVmaW5lIE5VTV9OT05SRUdfSVRFTVMgNSAvKiBJbmNsdWRlcyBmYWlsdXJlIHBvaW50IGlkLiAgKi8KKysjICBlbHNlCisrIyAgIGRlZmluZSBOVU1fTk9OUkVHX0lURU1TIDQKKysjICBlbmRpZgorKworKy8qIFdlIHB1c2ggYXQgbW9zdCB0aGlzIG1hbnkgaXRlbXMgb24gdGhlIHN0YWNrLiAgKi8KKysvKiBXZSB1c2VkIHRvIHVzZSAobnVtX3JlZ3MgLSAxKSwgd2hpY2ggaXMgdGhlIG51bWJlciBvZiByZWdpc3RlcnMKKysgICB0aGlzIHJlZ2V4cCB3aWxsIHNhdmU7IGJ1dCB0aGF0IHdhcyBjaGFuZ2VkIHRvIDUKKysgICB0byBhdm9pZCBzdGFjayBvdmVyZmxvdyBmb3IgYSByZWdleHAgd2l0aCBsb3RzIG9mIHBhcmVucy4gICovCisrIyAgZGVmaW5lIE1BWF9GQUlMVVJFX0lURU1TICg1ICogTlVNX1JFR19JVEVNUyArIE5VTV9OT05SRUdfSVRFTVMpCisrCisrLyogV2UgYWN0dWFsbHkgcHVzaCB0aGlzIG1hbnkgaXRlbXMuICAqLworKyMgIGRlZmluZSBOVU1fRkFJTFVSRV9JVEVNUwkJCQlcCisrICAoKCgwCQkJCQkJCVwKKysgICAgID8gMCA6IGhpZ2hlc3RfYWN0aXZlX3JlZyAtIGxvd2VzdF9hY3RpdmVfcmVnICsgMSkJXAorKyAgICAqIE5VTV9SRUdfSVRFTVMpCQkJCQlcCisrICAgKyBOVU1fTk9OUkVHX0lURU1TKQorKworKy8qIEhvdyBtYW55IGl0ZW1zIGNhbiBzdGlsbCBiZSBhZGRlZCB0byB0aGUgc3RhY2sgd2l0aG91dCBvdmVyZmxvd2luZyBpdC4gICovCisrIyAgZGVmaW5lIFJFTUFJTklOR19BVkFJTF9TTE9UUyAoKGZhaWxfc3RhY2spLnNpemUgLSAoZmFpbF9zdGFjaykuYXZhaWwpCisrIyBlbmRpZiAvKiBub3QgREVGSU5FRF9PTkNFICovCisrCisrCisrLyogUG9wcyB3aGF0IFBVU0hfRkFJTF9TVEFDSyBwdXNoZXMuCisrCisrICAgV2UgcmVzdG9yZSBpbnRvIHRoZSBwYXJhbWV0ZXJzLCBhbGwgb2Ygd2hpY2ggc2hvdWxkIGJlIGx2YWx1ZXM6CisrICAgICBTVFIgLS0gdGhlIHNhdmVkIGRhdGEgcG9zaXRpb24uCisrICAgICBQQVQgLS0gdGhlIHNhdmVkIHBhdHRlcm4gcG9zaXRpb24uCisrICAgICBMT1dfUkVHLCBISUdIX1JFRyAtLSB0aGUgaGlnaGVzdCBhbmQgbG93ZXN0IGFjdGl2ZSByZWdpc3RlcnMuCisrICAgICBSRUdTVEFSVCwgUkVHRU5EIC0tIGFycmF5cyBvZiBzdHJpbmcgcG9zaXRpb25zLgorKyAgICAgUkVHX0lORk8gLS0gYXJyYXkgb2YgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBzdWJleHByZXNzaW9uLgorKworKyAgIEFsc28gYXNzdW1lcyB0aGUgdmFyaWFibGVzIGBmYWlsX3N0YWNrJyBhbmQgKGlmIGRlYnVnZ2luZyksIGBidWZwJywKKysgICBgcGVuZCcsIGBzdHJpbmcxJywgYHNpemUxJywgYHN0cmluZzInLCBhbmQgYHNpemUyJy4gICovCisrIyBkZWZpbmUgUE9QX0ZBSUxVUkVfUE9JTlQoc3RyLCBwYXQsIGxvd19yZWcsIGhpZ2hfcmVnLCByZWdzdGFydCwgcmVnZW5kLCByZWdfaW5mbylcCisrewkJCQkJCQkJCVwKKysgIERFQlVHX1NUQVRFTUVOVCAodW5zaWduZWQgZmFpbHVyZV9pZDspCQkJCVwKKysgIGFjdGl2ZV9yZWdfdCB0aGlzX3JlZzsJCQkJCQlcCisrICBjb25zdCBVQ0hBUl9UICpzdHJpbmdfdGVtcDsJCQkJCQlcCisrCQkJCQkJCQkJXAorKyAgYXNzZXJ0ICghRkFJTF9TVEFDS19FTVBUWSAoKSk7CQkJCQlcCisrCQkJCQkJCQkJXAorKyAgLyogUmVtb3ZlIGZhaWx1cmUgcG9pbnRzIGFuZCBwb2ludCB0byBob3cgbWFueSByZWdzIHB1c2hlZC4gICovCVwKKysgIERFQlVHX1BSSU5UMSAoIlBPUF9GQUlMVVJFX1BPSU5UOlxuIik7CQkJCVwKKysgIERFQlVHX1BSSU5UMiAoIiAgQmVmb3JlIHBvcCwgbmV4dCBhdmFpbDogJWRcbiIsIGZhaWxfc3RhY2suYXZhaWwpOwlcCisrICBERUJVR19QUklOVDIgKCIgICAgICAgICAgICAgICAgICAgIHNpemU6ICVkXG4iLCBmYWlsX3N0YWNrLnNpemUpOwlcCisrCQkJCQkJCQkJXAorKyAgYXNzZXJ0IChmYWlsX3N0YWNrLmF2YWlsID49IE5VTV9OT05SRUdfSVRFTVMpOwkJCVwKKysJCQkJCQkJCQlcCisrICBERUJVR19QT1AgKCZmYWlsdXJlX2lkKTsJCQkJCQlcCisrICBERUJVR19QUklOVDIgKCIgIFBvcHBpbmcgZmFpbHVyZSBpZDogJXVcbiIsIGZhaWx1cmVfaWQpOwkJXAorKwkJCQkJCQkJCVwKKysgIC8qIElmIHRoZSBzYXZlZCBzdHJpbmcgbG9jYXRpb24gaXMgTlVMTCwgaXQgY2FtZSBmcm9tIGFuCQlcCisrICAgICBvbl9mYWlsdXJlX2tlZXBfc3RyaW5nX2p1bXAgb3Bjb2RlLCBhbmQgd2Ugd2FudCB0byB0aHJvdyBhd2F5IHRoZQlcCisrICAgICBzYXZlZCBOVUxMLCB0aHVzIHJldGFpbmluZyBvdXIgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgc3RyaW5nLiAgKi8JXAorKyAgc3RyaW5nX3RlbXAgPSBQT1BfRkFJTFVSRV9QT0lOVEVSICgpOwkJCQkJXAorKyAgaWYgKHN0cmluZ190ZW1wICE9IE5VTEwpCQkJCQkJXAorKyAgICBzdHIgPSAoY29uc3QgQ0hBUl9UICopIHN0cmluZ190ZW1wOwkJCQkJXAorKwkJCQkJCQkJCVwKKysgIERFQlVHX1BSSU5UMiAoIiAgUG9wcGluZyBzdHJpbmcgJXA6IGAiLCBzdHIpOwkJCQlcCisrICBERUJVR19QUklOVF9ET1VCTEVfU1RSSU5HIChzdHIsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLCBzaXplMik7CVwKKysgIERFQlVHX1BSSU5UMSAoIidcbiIpOwkJCQkJCQlcCisrCQkJCQkJCQkJXAorKyAgcGF0ID0gKFVDSEFSX1QgKikgUE9QX0ZBSUxVUkVfUE9JTlRFUiAoKTsJCQkJXAorKyAgREVCVUdfUFJJTlQyICgiICBQb3BwaW5nIHBhdHRlcm4gJXA6XG4iLCBwYXQpOwkJCVwKKysgIERFQlVHX1BSSU5UX0NPTVBJTEVEX1BBVFRFUk4gKGJ1ZnAsIHBhdCwgcGVuZCk7CQkJXAorKwkJCQkJCQkJCVwKKysgIC8qIFJlc3RvcmUgcmVnaXN0ZXIgaW5mby4gICovCQkJCQkJXAorKyAgaGlnaF9yZWcgPSAoYWN0aXZlX3JlZ190KSBQT1BfRkFJTFVSRV9JTlQgKCk7CQkJCVwKKysgIERFQlVHX1BSSU5UMiAoIiAgUG9wcGluZyBoaWdoIGFjdGl2ZSByZWc6ICVsZFxuIiwgaGlnaF9yZWcpOwkJXAorKwkJCQkJCQkJCVwKKysgIGxvd19yZWcgPSAoYWN0aXZlX3JlZ190KSBQT1BfRkFJTFVSRV9JTlQgKCk7CQkJCVwKKysgIERFQlVHX1BSSU5UMiAoIiAgUG9wcGluZyAgbG93IGFjdGl2ZSByZWc6ICVsZFxuIiwgbG93X3JlZyk7CQlcCisrCQkJCQkJCQkJXAorKyAgaWYgKDEpCQkJCQkJCQlcCisrICAgIGZvciAodGhpc19yZWcgPSBoaWdoX3JlZzsgdGhpc19yZWcgPj0gbG93X3JlZzsgdGhpc19yZWctLSkJCVwKKysgICAgICB7CQkJCQkJCQkJXAorKwlERUJVR19QUklOVDIgKCIgICAgUG9wcGluZyByZWc6ICVsZFxuIiwgdGhpc19yZWcpOwkJXAorKwkJCQkJCQkJCVwKKysJcmVnX2luZm9bdGhpc19yZWddLndvcmQgPSBQT1BfRkFJTFVSRV9FTFQgKCk7CQkJXAorKwlERUJVR19QUklOVDIgKCIgICAgICBpbmZvOiAlcFxuIiwJCQkJXAorKwkJICAgICAgcmVnX2luZm9bdGhpc19yZWddLndvcmQucG9pbnRlcik7CQkJXAorKwkJCQkJCQkJCVwKKysJcmVnZW5kW3RoaXNfcmVnXSA9IChjb25zdCBDSEFSX1QgKikgUE9QX0ZBSUxVUkVfUE9JTlRFUiAoKTsJXAorKwlERUJVR19QUklOVDIgKCIgICAgICBlbmQ6ICVwXG4iLCByZWdlbmRbdGhpc19yZWddKTsJCVwKKysJCQkJCQkJCQlcCisrCXJlZ3N0YXJ0W3RoaXNfcmVnXSA9IChjb25zdCBDSEFSX1QgKikgUE9QX0ZBSUxVUkVfUE9JTlRFUiAoKTsJXAorKwlERUJVR19QUklOVDIgKCIgICAgICBzdGFydDogJXBcbiIsIHJlZ3N0YXJ0W3RoaXNfcmVnXSk7CQlcCisrICAgICAgfQkJCQkJCQkJCVwKKysgIGVsc2UJCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgZm9yICh0aGlzX3JlZyA9IGhpZ2hlc3RfYWN0aXZlX3JlZzsgdGhpc19yZWcgPiBoaWdoX3JlZzsgdGhpc19yZWctLSkgXAorKwl7CQkJCQkJCQlcCisrCSAgcmVnX2luZm9bdGhpc19yZWddLndvcmQuaW50ZWdlciA9IDA7CQkJCVwKKysJICByZWdlbmRbdGhpc19yZWddID0gMDsJCQkJCQlcCisrCSAgcmVnc3RhcnRbdGhpc19yZWddID0gMDsJCQkJCVwKKysJfQkJCQkJCQkJXAorKyAgICAgIGhpZ2hlc3RfYWN0aXZlX3JlZyA9IGhpZ2hfcmVnOwkJCQkJXAorKyAgICB9CQkJCQkJCQkJXAorKwkJCQkJCQkJCVwKKysgIHNldF9yZWdzX21hdGNoZWRfZG9uZSA9IDA7CQkJCQkJXAorKyAgREVCVUdfU1RBVEVNRU5UIChuZmFpbHVyZV9wb2ludHNfcG9wcGVkKyspOwkJCQlcCisrfSAvKiBQT1BfRkFJTFVSRV9QT0lOVCAqLworKwwKKysvKiBTdHJ1Y3R1cmUgZm9yIHBlci1yZWdpc3RlciAoYS5rLmEuIHBlci1ncm91cCkgaW5mb3JtYXRpb24uCisrICAgT3RoZXIgcmVnaXN0ZXIgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlCisrICAgc3RhcnRpbmcgYW5kIGVuZGluZyBwb3NpdGlvbnMgKHdoaWNoIGFyZSBhZGRyZXNzZXMpLCBhbmQgdGhlIGxpc3Qgb2YKKysgICBpbm5lciBncm91cHMgKHdoaWNoIGlzIGEgYml0cyBsaXN0KSBhcmUgbWFpbnRhaW5lZCBpbiBzZXBhcmF0ZQorKyAgIHZhcmlhYmxlcy4KKysKKysgICBXZSBhcmUgbWFraW5nIGEgKHN0cmljdGx5IHNwZWFraW5nKSBub25wb3J0YWJsZSBhc3N1bXB0aW9uIGhlcmU6IHRoYXQKKysgICB0aGUgY29tcGlsZXIgd2lsbCBwYWNrIG91ciBiaXQgZmllbGRzIGludG8gc29tZXRoaW5nIHRoYXQgZml0cyBpbnRvCisrICAgdGhlIHR5cGUgb2YgYHdvcmQnLCBpLmUuLCBpcyBzb21ldGhpbmcgdGhhdCBmaXRzIGludG8gb25lIGl0ZW0gb24gdGhlCisrICAgZmFpbHVyZSBzdGFjay4gICovCisrCisrCisrLyogRGVjbGFyYXRpb25zIGFuZCBtYWNyb3MgZm9yIHJlX21hdGNoXzIuICAqLworKworK3R5cGVkZWYgdW5pb24KKyt7CisrICBQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkgd29yZDsKKysgIHN0cnVjdAorKyAgeworKyAgICAgIC8qIFRoaXMgZmllbGQgaXMgb25lIGlmIHRoaXMgZ3JvdXAgY2FuIG1hdGNoIHRoZSBlbXB0eSBzdHJpbmcsCisrICAgICAgICAgemVybyBpZiBub3QuICBJZiBub3QgeWV0IGRldGVybWluZWQsICBgTUFUQ0hfTlVMTF9VTlNFVF9WQUxVRScuICAqLworKyMgZGVmaW5lIE1BVENIX05VTExfVU5TRVRfVkFMVUUgMworKyAgICB1bnNpZ25lZCBtYXRjaF9udWxsX3N0cmluZ19wIDogMjsKKysgICAgdW5zaWduZWQgaXNfYWN0aXZlIDogMTsKKysgICAgdW5zaWduZWQgbWF0Y2hlZF9zb21ldGhpbmcgOiAxOworKyAgICB1bnNpZ25lZCBldmVyX21hdGNoZWRfc29tZXRoaW5nIDogMTsKKysgIH0gYml0czsKKyt9IFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpOworKworKyMgaWZuZGVmIERFRklORURfT05DRQorKyMgIGRlZmluZSBSRUdfTUFUQ0hfTlVMTF9TVFJJTkdfUChSKSAgKChSKS5iaXRzLm1hdGNoX251bGxfc3RyaW5nX3ApCisrIyAgZGVmaW5lIElTX0FDVElWRShSKSAgKChSKS5iaXRzLmlzX2FjdGl2ZSkKKysjICBkZWZpbmUgTUFUQ0hFRF9TT01FVEhJTkcoUikgICgoUikuYml0cy5tYXRjaGVkX3NvbWV0aGluZykKKysjICBkZWZpbmUgRVZFUl9NQVRDSEVEX1NPTUVUSElORyhSKSAgKChSKS5iaXRzLmV2ZXJfbWF0Y2hlZF9zb21ldGhpbmcpCisrCisrCisrLyogQ2FsbCB0aGlzIHdoZW4gaGF2ZSBtYXRjaGVkIGEgcmVhbCBjaGFyYWN0ZXI7IGl0IHNldHMgYG1hdGNoZWQnIGZsYWdzCisrICAgZm9yIHRoZSBzdWJleHByZXNzaW9ucyB3aGljaCB3ZSBhcmUgY3VycmVudGx5IGluc2lkZS4gIEFsc28gcmVjb3JkcworKyAgIHRoYXQgdGhvc2Ugc3ViZXhwcnMgaGF2ZSBtYXRjaGVkLiAgKi8KKysjICBkZWZpbmUgU0VUX1JFR1NfTUFUQ0hFRCgpCQkJCQkJXAorKyAgZG8JCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgaWYgKCFzZXRfcmVnc19tYXRjaGVkX2RvbmUpCQkJCQlcCisrCXsJCQkJCQkJCVwKKysJICBhY3RpdmVfcmVnX3QgcjsJCQkJCQlcCisrCSAgc2V0X3JlZ3NfbWF0Y2hlZF9kb25lID0gMTsJCQkJCVwKKysJICBmb3IgKHIgPSBsb3dlc3RfYWN0aXZlX3JlZzsgciA8PSBoaWdoZXN0X2FjdGl2ZV9yZWc7IHIrKykJXAorKwkgICAgewkJCQkJCQkJXAorKwkgICAgICBNQVRDSEVEX1NPTUVUSElORyAocmVnX2luZm9bcl0pCQkJCVwKKysJCT0gRVZFUl9NQVRDSEVEX1NPTUVUSElORyAocmVnX2luZm9bcl0pCQkJXAorKwkJPSAxOwkJCQkJCQlcCisrCSAgICB9CQkJCQkJCQlcCisrCX0JCQkJCQkJCVwKKysgICAgfQkJCQkJCQkJCVwKKysgIHdoaWxlICgwKQorKyMgZW5kaWYgLyogbm90IERFRklORURfT05DRSAqLworKworKy8qIFJlZ2lzdGVycyBhcmUgc2V0IHRvIGEgc2VudGluZWwgd2hlbiB0aGV5IGhhdmVuJ3QgeWV0IG1hdGNoZWQuICAqLworK3N0YXRpYyBDSEFSX1QgUFJFRklYKHJlZ191bnNldF9kdW1teSk7CisrIyBkZWZpbmUgUkVHX1VOU0VUX1ZBTFVFICgmUFJFRklYKHJlZ191bnNldF9kdW1teSkpCisrIyBkZWZpbmUgUkVHX1VOU0VUKGUpICgoZSkgPT0gUkVHX1VOU0VUX1ZBTFVFKQorKworKy8qIFN1YnJvdXRpbmUgZGVjbGFyYXRpb25zIGFuZCBtYWNyb3MgZm9yIHJlZ2V4X2NvbXBpbGUuICAqLworK3N0YXRpYyB2b2lkIFBSRUZJWChzdG9yZV9vcDEpIChyZV9vcGNvZGVfdCBvcCwgVUNIQVJfVCAqbG9jLCBpbnQgYXJnKTsKKytzdGF0aWMgdm9pZCBQUkVGSVgoc3RvcmVfb3AyKSAocmVfb3Bjb2RlX3Qgb3AsIFVDSEFSX1QgKmxvYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZzEsIGludCBhcmcyKTsKKytzdGF0aWMgdm9pZCBQUkVGSVgoaW5zZXJ0X29wMSkgKHJlX29wY29kZV90IG9wLCBVQ0hBUl9UICpsb2MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXJnLCBVQ0hBUl9UICplbmQpOworK3N0YXRpYyB2b2lkIFBSRUZJWChpbnNlcnRfb3AyKSAocmVfb3Bjb2RlX3Qgb3AsIFVDSEFSX1QgKmxvYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcmcxLCBpbnQgYXJnMiwgVUNIQVJfVCAqZW5kKTsKKytzdGF0aWMgYm9vbGVhbiBQUkVGSVgoYXRfYmVnbGluZV9sb2NfcCkgKGNvbnN0IENIQVJfVCAqcGF0dGVybiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVJfVCAqcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgpOworK3N0YXRpYyBib29sZWFuIFBSRUZJWChhdF9lbmRsaW5lX2xvY19wKSAoY29uc3QgQ0hBUl9UICpwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUl9UICpwZW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCk7CisrIyBpZmRlZiBXQ0hBUgorK3N0YXRpYyByZWdfZXJyY29kZV90IHdjc19jb21waWxlX3JhbmdlIChDSEFSX1QgcmFuZ2Vfc3RhcnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVJfVCAqKnBfcHRyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSX1QgKnBlbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnRyYW5zbGF0ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNIQVJfVCAqYiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hBUl9UICpjaGFyX3NldCk7Cisrc3RhdGljIHZvaWQgaW5zZXJ0X3NwYWNlIChpbnQgbnVtLCBDSEFSX1QgKmxvYywgQ0hBUl9UICplbmQpOworKyMgZWxzZSAvKiBCWVRFICovCisrc3RhdGljIHJlZ19lcnJjb2RlX3QgYnl0ZV9jb21waWxlX3JhbmdlICh1bnNpZ25lZCBpbnQgcmFuZ2Vfc3RhcnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqcF9wdHIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwZW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnNsYXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmIpOworKyMgZW5kaWYgLyogV0NIQVIgKi8KKysKKysvKiBGZXRjaCB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlIHVuY29tcGlsZWQgcGF0dGVybi0tLXRyYW5zbGF0aW5nIGl0CisrICAgaWYgbmVjZXNzYXJ5LiAgQWxzbyBjYXN0IGZyb20gYSBzaWduZWQgY2hhcmFjdGVyIGluIHRoZSBjb25zdGFudAorKyAgIHN0cmluZyBwYXNzZWQgdG8gdXMgYnkgdGhlIHVzZXIgdG8gYW4gdW5zaWduZWQgY2hhciB0aGF0IHdlIGNhbiB1c2UKKysgICBhcyBhbiBhcnJheSBpbmRleCAoaW4sIGUuZy4sIGB0cmFuc2xhdGUnKS4gICovCisrLyogaWZkZWYgTUJTX1NVUFBPUlQsIHdlIHRyYW5zbGF0ZSBvbmx5IGlmIGNoYXJhY3RlciA8PSAweGZmLAorKyAgIGJlY2F1c2UgaXQgaXMgaW1wb3NzaWJsZSB0byBhbGxvY2F0ZSA0R0IgYXJyYXkgZm9yIHNvbWUgZW5jb2RpbmdzCisrICAgd2hpY2ggaGF2ZSA0IGJ5dGUgY2hhcmFjdGVyX3NldCBsaWtlIFVDUzQuICAqLworKyMgaWZuZGVmIFBBVEZFVENICisrIyAgaWZkZWYgV0NIQVIKKysjICAgZGVmaW5lIFBBVEZFVENIKGMpCQkJCQkJCVwKKysgIGRvIHtpZiAocCA9PSBwZW5kKSByZXR1cm4gUkVHX0VFTkQ7CQkJCQlcCisrICAgIGMgPSAoVUNIQVJfVCkgKnArKzsJCQkJCQkJXAorKyAgICBpZiAodHJhbnNsYXRlICYmIChjIDw9IDB4ZmYpKSBjID0gKFVDSEFSX1QpIHRyYW5zbGF0ZVtjXTsJCVwKKysgIH0gd2hpbGUgKDApCisrIyAgZWxzZSAvKiBCWVRFICovCisrIyAgIGRlZmluZSBQQVRGRVRDSChjKQkJCQkJCQlcCisrICBkbyB7aWYgKHAgPT0gcGVuZCkgcmV0dXJuIFJFR19FRU5EOwkJCQkJXAorKyAgICBjID0gKHVuc2lnbmVkIGNoYXIpICpwKys7CQkJCQkJXAorKyAgICBpZiAodHJhbnNsYXRlKSBjID0gKHVuc2lnbmVkIGNoYXIpIHRyYW5zbGF0ZVtjXTsJCQlcCisrICB9IHdoaWxlICgwKQorKyMgIGVuZGlmIC8qIFdDSEFSICovCisrIyBlbmRpZgorKworKy8qIEZldGNoIHRoZSBuZXh0IGNoYXJhY3RlciBpbiB0aGUgdW5jb21waWxlZCBwYXR0ZXJuLCB3aXRoIG5vCisrICAgdHJhbnNsYXRpb24uICAqLworKyMgZGVmaW5lIFBBVEZFVENIX1JBVyhjKQkJCQkJCVwKKysgIGRvIHtpZiAocCA9PSBwZW5kKSByZXR1cm4gUkVHX0VFTkQ7CQkJCQlcCisrICAgIGMgPSAoVUNIQVJfVCkgKnArKzsgCSAgICAgICAJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrCisrLyogR28gYmFja3dhcmRzIG9uZSBjaGFyYWN0ZXIgaW4gdGhlIHBhdHRlcm4uICAqLworKyMgZGVmaW5lIFBBVFVORkVUQ0ggcC0tCisrCisrCisrLyogSWYgYHRyYW5zbGF0ZScgaXMgbm9uLW51bGwsIHJldHVybiB0cmFuc2xhdGVbRF0sIGVsc2UganVzdCBELiAgV2UKKysgICBjYXN0IHRoZSBzdWJzY3JpcHQgdG8gdHJhbnNsYXRlIGJlY2F1c2Ugc29tZSBkYXRhIGlzIGRlY2xhcmVkIGFzCisrICAgYGNoYXIgKicsIHRvIGF2b2lkIHdhcm5pbmdzIHdoZW4gYSBzdHJpbmcgY29uc3RhbnQgaXMgcGFzc2VkLiAgQnV0CisrICAgd2hlbiB3ZSB1c2UgYSBjaGFyYWN0ZXIgYXMgYSBzdWJzY3JpcHQgd2UgbXVzdCBtYWtlIGl0IHVuc2lnbmVkLiAgKi8KKysvKiBpZmRlZiBNQlNfU1VQUE9SVCwgd2UgdHJhbnNsYXRlIG9ubHkgaWYgY2hhcmFjdGVyIDw9IDB4ZmYsCisrICAgYmVjYXVzZSBpdCBpcyBpbXBvc3NpYmxlIHRvIGFsbG9jYXRlIDRHQiBhcnJheSBmb3Igc29tZSBlbmNvZGluZ3MKKysgICB3aGljaCBoYXZlIDQgYnl0ZSBjaGFyYWN0ZXJfc2V0IGxpa2UgVUNTNC4gICovCisrCisrIyBpZm5kZWYgVFJBTlNMQVRFCisrIyAgaWZkZWYgV0NIQVIKKysjICAgZGVmaW5lIFRSQU5TTEFURShkKSBcCisrICAoKHRyYW5zbGF0ZSAmJiAoKFVDSEFSX1QpIChkKSkgPD0gMHhmZikgXAorKyAgID8gKGNoYXIpIHRyYW5zbGF0ZVsodW5zaWduZWQgY2hhcikgKGQpXSA6IChkKSkKKysjIGVsc2UgLyogQllURSAqLworKyMgICBkZWZpbmUgVFJBTlNMQVRFKGQpIFwKKysgICh0cmFuc2xhdGUgPyAoY2hhcikgdHJhbnNsYXRlWyh1bnNpZ25lZCBjaGFyKSAoZCldIDogKGNoYXIpIChkKSkKKysjICBlbmRpZiAvKiBXQ0hBUiAqLworKyMgZW5kaWYKKysKKysKKysvKiBNYWNyb3MgZm9yIG91dHB1dHRpbmcgdGhlIGNvbXBpbGVkIHBhdHRlcm4gaW50byBgYnVmZmVyJy4gICovCisrCisrLyogSWYgdGhlIGJ1ZmZlciBpc24ndCBhbGxvY2F0ZWQgd2hlbiBpdCBjb21lcyBpbiwgdXNlIHRoaXMuICAqLworKyMgZGVmaW5lIElOSVRfQlVGX1NJWkUgICgzMiAqIHNpemVvZihVQ0hBUl9UKSkKKysKKysvKiBNYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCBOIG1vcmUgYnl0ZXMgb2Ygc3BhY2UgaW4gYnVmZmVyLiAgKi8KKysjIGlmZGVmIFdDSEFSCisrIyAgZGVmaW5lIEdFVF9CVUZGRVJfU1BBQ0UobikJCQkJCQlcCisrICAgIHdoaWxlICgoKHVuc2lnbmVkIGxvbmcpYiAtICh1bnNpZ25lZCBsb25nKUNPTVBJTEVEX0JVRkZFUl9WQVIJXAorKyAgICAgICAgICAgICsgKG4pKnNpemVvZihDSEFSX1QpKSA+IGJ1ZnAtPmFsbG9jYXRlZCkJCQlcCisrICAgICAgRVhURU5EX0JVRkZFUiAoKQorKyMgZWxzZSAvKiBCWVRFICovCisrIyAgZGVmaW5lIEdFVF9CVUZGRVJfU1BBQ0UobikJCQkJCQlcCisrICAgIHdoaWxlICgodW5zaWduZWQgbG9uZykgKGIgLSBidWZwLT5idWZmZXIgKyAobikpID4gYnVmcC0+YWxsb2NhdGVkKQlcCisrICAgICAgRVhURU5EX0JVRkZFUiAoKQorKyMgZW5kaWYgLyogV0NIQVIgKi8KKysKKysvKiBNYWtlIHN1cmUgd2UgaGF2ZSBvbmUgbW9yZSBieXRlIG9mIGJ1ZmZlciBzcGFjZSBhbmQgdGhlbiBhZGQgQyB0byBpdC4gICovCisrIyBkZWZpbmUgQlVGX1BVU0goYykJCQkJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgR0VUX0JVRkZFUl9TUEFDRSAoMSk7CQkJCQkJXAorKyAgICAqYisrID0gKFVDSEFSX1QpIChjKTsJCQkJCQlcCisrICB9IHdoaWxlICgwKQorKworKworKy8qIEVuc3VyZSB3ZSBoYXZlIHR3byBtb3JlIGJ5dGVzIG9mIGJ1ZmZlciBzcGFjZSBhbmQgdGhlbiBhcHBlbmQgQzEgYW5kIEMyLiAgKi8KKysjIGRlZmluZSBCVUZfUFVTSF8yKGMxLCBjMikJCQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBHRVRfQlVGRkVSX1NQQUNFICgyKTsJCQkJCQlcCisrICAgICpiKysgPSAoVUNIQVJfVCkgKGMxKTsJCQkJCQlcCisrICAgICpiKysgPSAoVUNIQVJfVCkgKGMyKTsJCQkJCQlcCisrICB9IHdoaWxlICgwKQorKworKworKy8qIEFzIHdpdGggQlVGX1BVU0hfMiwgZXhjZXB0IGZvciB0aHJlZSBieXRlcy4gICovCisrIyBkZWZpbmUgQlVGX1BVU0hfMyhjMSwgYzIsIGMzKQkJCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDMpOwkJCQkJCVwKKysgICAgKmIrKyA9IChVQ0hBUl9UKSAoYzEpOwkJCQkJCVwKKysgICAgKmIrKyA9IChVQ0hBUl9UKSAoYzIpOwkJCQkJCVwKKysgICAgKmIrKyA9IChVQ0hBUl9UKSAoYzMpOwkJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrCisrLyogU3RvcmUgYSBqdW1wIHdpdGggb3Bjb2RlIE9QIGF0IExPQyB0byBsb2NhdGlvbiBUTy4gIFdlIHN0b3JlIGEKKysgICByZWxhdGl2ZSBhZGRyZXNzIG9mZnNldCBieSB0aGUgdGhyZWUgYnl0ZXMgdGhlIGp1bXAgaXRzZWxmIG9jY3VwaWVzLiAgKi8KKysjIGRlZmluZSBTVE9SRV9KVU1QKG9wLCBsb2MsIHRvKSBcCisrIFBSRUZJWChzdG9yZV9vcDEpIChvcCwgbG9jLCAoaW50KSAoKHRvKSAtIChsb2MpIC0gKDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKSkpCisrCisrLyogTGlrZXdpc2UsIGZvciBhIHR3by1hcmd1bWVudCBqdW1wLiAgKi8KKysjIGRlZmluZSBTVE9SRV9KVU1QMihvcCwgbG9jLCB0bywgYXJnKSBcCisrICBQUkVGSVgoc3RvcmVfb3AyKSAob3AsIGxvYywgKGludCkgKCh0bykgLSAobG9jKSAtICgxICsgT0ZGU0VUX0FERFJFU1NfU0laRSkpLCBhcmcpCisrCisrLyogTGlrZSBgU1RPUkVfSlVNUCcsIGJ1dCBmb3IgaW5zZXJ0aW5nLiAgQXNzdW1lIGBiJyBpcyB0aGUgYnVmZmVyIGVuZC4gICovCisrIyBkZWZpbmUgSU5TRVJUX0pVTVAob3AsIGxvYywgdG8pIFwKKysgIFBSRUZJWChpbnNlcnRfb3AxKSAob3AsIGxvYywgKGludCkgKCh0bykgLSAobG9jKSAtICgxICsgT0ZGU0VUX0FERFJFU1NfU0laRSkpLCBiKQorKworKy8qIExpa2UgYFNUT1JFX0pVTVAyJywgYnV0IGZvciBpbnNlcnRpbmcuICBBc3N1bWUgYGInIGlzIHRoZSBidWZmZXIgZW5kLiAgKi8KKysjIGRlZmluZSBJTlNFUlRfSlVNUDIob3AsIGxvYywgdG8sIGFyZykgXAorKyAgUFJFRklYKGluc2VydF9vcDIpIChvcCwgbG9jLCAoaW50KSAoKHRvKSAtIChsb2MpIC0gKDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKSksXAorKwkgICAgICBhcmcsIGIpCisrCisrLyogVGhpcyBpcyBub3QgYW4gYXJiaXRyYXJ5IGxpbWl0OiB0aGUgYXJndW1lbnRzIHdoaWNoIHJlcHJlc2VudCBvZmZzZXRzCisrICAgaW50byB0aGUgcGF0dGVybiBhcmUgdHdvIGJ5dGVzIGxvbmcuICBTbyBpZiAyXjE2IGJ5dGVzIHR1cm5zIG91dCB0bworKyAgIGJlIHRvbyBzbWFsbCwgbWFueSB0aGluZ3Mgd291bGQgaGF2ZSB0byBjaGFuZ2UuICAqLworKy8qIEFueSBvdGhlciBjb21waWxlciB3aGljaCwgbGlrZSBNU0MsIGhhcyBhbGxvY2F0aW9uIGxpbWl0IGJlbG93IDJeMTYKKysgICBieXRlcyB3aWxsIGhhdmUgdG8gdXNlIGFwcHJvYWNoIHNpbWlsYXIgdG8gd2hhdCB3YXMgZG9uZSBiZWxvdyBmb3IKKysgICBNU0MgYW5kIGRyb3AgTUFYX0JVRl9TSVpFIGEgYml0LiAgT3RoZXJ3aXNlIHlvdSBtYXkgZW5kIHVwCisrICAgcmVhbGxvY2F0aW5nIHRvIDAgYnl0ZXMuICBTdWNoIHRoaW5nIGlzIG5vdCBnb2luZyB0byB3b3JrIHRvbyB3ZWxsLgorKyAgIFlvdSBoYXZlIGJlZW4gd2FybmVkISEgICovCisrIyBpZm5kZWYgREVGSU5FRF9PTkNFCisrIyAgaWYgZGVmaW5lZCBfTVNDX1ZFUiAgJiYgIWRlZmluZWQgV0lOMzIKKysvKiBNaWNyb3NvZnQgQyAxNi1iaXQgdmVyc2lvbnMgbGltaXQgbWFsbG9jIHRvIGFwcHJveCA2NTUxMiBieXRlcy4KKysgICBUaGUgUkVBTExPQyBkZWZpbmUgZWxpbWluYXRlcyBhIGZsdXJyeSBvZiBjb252ZXJzaW9uIHdhcm5pbmdzLAorKyAgIGJ1dCBpcyBub3QgcmVxdWlyZWQuICovCisrIyAgIGRlZmluZSBNQVhfQlVGX1NJWkUgIDY1NTAwTAorKyMgICBkZWZpbmUgUkVBTExPQyhwLHMpIHJlYWxsb2MgKChwKSwgKHNpemVfdCkgKHMpKQorKyMgIGVsc2UKKysjICAgZGVmaW5lIE1BWF9CVUZfU0laRSAoMUwgPDwgMTYpCisrIyAgIGRlZmluZSBSRUFMTE9DKHAscykgcmVhbGxvYyAoKHApLCAocykpCisrIyAgZW5kaWYKKysKKysvKiBFeHRlbmQgdGhlIGJ1ZmZlciBieSB0d2ljZSBpdHMgY3VycmVudCBzaXplIHZpYSByZWFsbG9jIGFuZAorKyAgIHJlc2V0IHRoZSBwb2ludGVycyB0aGF0IHBvaW50ZWQgaW50byB0aGUgb2xkIGJsb2NrIHRvIHBvaW50IHRvIHRoZQorKyAgIGNvcnJlY3QgcGxhY2VzIGluIHRoZSBuZXcgb25lLiAgSWYgZXh0ZW5kaW5nIHRoZSBidWZmZXIgcmVzdWx0cyBpbiBpdAorKyAgIGJlaW5nIGxhcmdlciB0aGFuIE1BWF9CVUZfU0laRSwgdGhlbiBmbGFnIG1lbW9yeSBleGhhdXN0ZWQuICAqLworKyMgIGlmbmRlZiBfX0JPVU5ERURfUE9JTlRFUlNfXworKyMgICAgZGVmaW5lIF9fQk9VTkRFRF9QT0lOVEVSU19fIDAKKysjICBlbmRpZgorKyMgIGlmIF9fQk9VTkRFRF9QT0lOVEVSU19fCisrIyAgIGRlZmluZSBTRVRfSElHSF9CT1VORChQKSAoX19wdHJoaWdoIChQKSA9IF9fcHRybG93IChQKSArIGJ1ZnAtPmFsbG9jYXRlZCkKKysjICAgZGVmaW5lIE1PVkVfQlVGRkVSX1BPSU5URVIoUCkgXAorKyAgKF9fcHRybG93IChQKSArPSBpbmNyLCBTRVRfSElHSF9CT1VORCAoUCksIF9fcHRydmFsdWUgKFApICs9IGluY3IpCisrIyAgIGRlZmluZSBFTFNFX0VYVEVORF9CVUZGRVJfSElHSF9CT1VORAlcCisrICBlbHNlCQkJCQkJXAorKyAgICB7CQkJCQkJXAorKyAgICAgIFNFVF9ISUdIX0JPVU5EIChiKTsJCQlcCisrICAgICAgU0VUX0hJR0hfQk9VTkQgKGJlZ2FsdCk7CQkJXAorKyAgICAgIGlmIChmaXh1cF9hbHRfanVtcCkJCQlcCisrCVNFVF9ISUdIX0JPVU5EIChmaXh1cF9hbHRfanVtcCk7CVwKKysgICAgICBpZiAobGFzdHN0YXJ0KQkJCQlcCisrCVNFVF9ISUdIX0JPVU5EIChsYXN0c3RhcnQpOwkJXAorKyAgICAgIGlmIChwZW5kaW5nX2V4YWN0KQkJCVwKKysJU0VUX0hJR0hfQk9VTkQgKHBlbmRpbmdfZXhhY3QpOwkJXAorKyAgICB9CisrIyAgZWxzZQorKyMgICBkZWZpbmUgTU9WRV9CVUZGRVJfUE9JTlRFUihQKSAoUCkgKz0gaW5jcgorKyMgICBkZWZpbmUgRUxTRV9FWFRFTkRfQlVGRkVSX0hJR0hfQk9VTkQKKysjICBlbmRpZgorKyMgZW5kaWYgLyogbm90IERFRklORURfT05DRSAqLworKworKyMgaWZkZWYgV0NIQVIKKysjICBkZWZpbmUgRVhURU5EX0JVRkZFUigpCQkJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgVUNIQVJfVCAqb2xkX2J1ZmZlciA9IENPTVBJTEVEX0JVRkZFUl9WQVI7CQkJCVwKKysgICAgaW50IHdjaGFyX2NvdW50OwkJCQkJCQlcCisrICAgIGlmIChidWZwLT5hbGxvY2F0ZWQgKyBzaXplb2YoVUNIQVJfVCkgPiBNQVhfQlVGX1NJWkUpCQlcCisrICAgICAgcmV0dXJuIFJFR19FU0laRTsJCQkJCQkJXAorKyAgICBidWZwLT5hbGxvY2F0ZWQgPDw9IDE7CQkJCQkJXAorKyAgICBpZiAoYnVmcC0+YWxsb2NhdGVkID4gTUFYX0JVRl9TSVpFKQkJCQkJXAorKyAgICAgIGJ1ZnAtPmFsbG9jYXRlZCA9IE1BWF9CVUZfU0laRTsJCQkJCVwKKysgICAgLyogSG93IG1hbnkgY2hhcmFjdGVycyB0aGUgbmV3IGJ1ZmZlciBjYW4gaGF2ZT8gICovCQkJXAorKyAgICB3Y2hhcl9jb3VudCA9IGJ1ZnAtPmFsbG9jYXRlZCAvIHNpemVvZihVQ0hBUl9UKTsJCQlcCisrICAgIGlmICh3Y2hhcl9jb3VudCA9PSAwKSB3Y2hhcl9jb3VudCA9IDE7CQkJCVwKKysgICAgLyogVHJ1bmNhdGUgdGhlIGJ1ZmZlciB0byBDSEFSX1QgYWxpZ24uICAqLwkJCVwKKysgICAgYnVmcC0+YWxsb2NhdGVkID0gd2NoYXJfY291bnQgKiBzaXplb2YoVUNIQVJfVCk7CQkJXAorKyAgICBSRVRBTExPQyAoQ09NUElMRURfQlVGRkVSX1ZBUiwgd2NoYXJfY291bnQsIFVDSEFSX1QpOwkJXAorKyAgICBidWZwLT5idWZmZXIgPSAoY2hhciopQ09NUElMRURfQlVGRkVSX1ZBUjsJCQkJXAorKyAgICBpZiAoQ09NUElMRURfQlVGRkVSX1ZBUiA9PSBOVUxMKQkJCQkJXAorKyAgICAgIHJldHVybiBSRUdfRVNQQUNFOwkJCQkJCVwKKysgICAgLyogSWYgdGhlIGJ1ZmZlciBtb3ZlZCwgbW92ZSBhbGwgdGhlIHBvaW50ZXJzIGludG8gaXQuICAqLwkJXAorKyAgICBpZiAob2xkX2J1ZmZlciAhPSBDT01QSUxFRF9CVUZGRVJfVkFSKQkJCQlcCisrICAgICAgewkJCQkJCQkJCVwKKysJaW50IGluY3IgPSBDT01QSUxFRF9CVUZGRVJfVkFSIC0gb2xkX2J1ZmZlcjsJCQlcCisrCU1PVkVfQlVGRkVSX1BPSU5URVIgKGIpOwkJCQkJXAorKwlNT1ZFX0JVRkZFUl9QT0lOVEVSIChiZWdhbHQpOwkJCQkJXAorKwlpZiAoZml4dXBfYWx0X2p1bXApCQkJCQkJXAorKwkgIE1PVkVfQlVGRkVSX1BPSU5URVIgKGZpeHVwX2FsdF9qdW1wKTsJCQkJXAorKwlpZiAobGFzdHN0YXJ0KQkJCQkJCQlcCisrCSAgTU9WRV9CVUZGRVJfUE9JTlRFUiAobGFzdHN0YXJ0KTsJCQkJXAorKwlpZiAocGVuZGluZ19leGFjdCkJCQkJCQlcCisrCSAgTU9WRV9CVUZGRVJfUE9JTlRFUiAocGVuZGluZ19leGFjdCk7CQkJCVwKKysgICAgICB9CQkJCQkJCQkJXAorKyAgICBFTFNFX0VYVEVORF9CVUZGRVJfSElHSF9CT1VORAkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysjIGVsc2UgLyogQllURSAqLworKyMgIGRlZmluZSBFWFRFTkRfQlVGRkVSKCkJCQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBVQ0hBUl9UICpvbGRfYnVmZmVyID0gQ09NUElMRURfQlVGRkVSX1ZBUjsJCQkJXAorKyAgICBpZiAoYnVmcC0+YWxsb2NhdGVkID09IE1BWF9CVUZfU0laRSkJCQkJXAorKyAgICAgIHJldHVybiBSRUdfRVNJWkU7CQkJCQkJCVwKKysgICAgYnVmcC0+YWxsb2NhdGVkIDw8PSAxOwkJCQkJCVwKKysgICAgaWYgKGJ1ZnAtPmFsbG9jYXRlZCA+IE1BWF9CVUZfU0laRSkJCQkJCVwKKysgICAgICBidWZwLT5hbGxvY2F0ZWQgPSBNQVhfQlVGX1NJWkU7CQkJCQlcCisrICAgIGJ1ZnAtPmJ1ZmZlciA9IChVQ0hBUl9UICopIFJFQUxMT0MgKENPTVBJTEVEX0JVRkZFUl9WQVIsCQlcCisrCQkJCQkJYnVmcC0+YWxsb2NhdGVkKTsJXAorKyAgICBpZiAoQ09NUElMRURfQlVGRkVSX1ZBUiA9PSBOVUxMKQkJCQkJXAorKyAgICAgIHJldHVybiBSRUdfRVNQQUNFOwkJCQkJCVwKKysgICAgLyogSWYgdGhlIGJ1ZmZlciBtb3ZlZCwgbW92ZSBhbGwgdGhlIHBvaW50ZXJzIGludG8gaXQuICAqLwkJXAorKyAgICBpZiAob2xkX2J1ZmZlciAhPSBDT01QSUxFRF9CVUZGRVJfVkFSKQkJCQlcCisrICAgICAgewkJCQkJCQkJCVwKKysJaW50IGluY3IgPSBDT01QSUxFRF9CVUZGRVJfVkFSIC0gb2xkX2J1ZmZlcjsJCQlcCisrCU1PVkVfQlVGRkVSX1BPSU5URVIgKGIpOwkJCQkJXAorKwlNT1ZFX0JVRkZFUl9QT0lOVEVSIChiZWdhbHQpOwkJCQkJXAorKwlpZiAoZml4dXBfYWx0X2p1bXApCQkJCQkJXAorKwkgIE1PVkVfQlVGRkVSX1BPSU5URVIgKGZpeHVwX2FsdF9qdW1wKTsJCQkJXAorKwlpZiAobGFzdHN0YXJ0KQkJCQkJCQlcCisrCSAgTU9WRV9CVUZGRVJfUE9JTlRFUiAobGFzdHN0YXJ0KTsJCQkJXAorKwlpZiAocGVuZGluZ19leGFjdCkJCQkJCQlcCisrCSAgTU9WRV9CVUZGRVJfUE9JTlRFUiAocGVuZGluZ19leGFjdCk7CQkJCVwKKysgICAgICB9CQkJCQkJCQkJXAorKyAgICBFTFNFX0VYVEVORF9CVUZGRVJfSElHSF9CT1VORAkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysjIGVuZGlmIC8qIFdDSEFSICovCisrCisrIyBpZm5kZWYgREVGSU5FRF9PTkNFCisrLyogU2luY2Ugd2UgaGF2ZSBvbmUgYnl0ZSByZXNlcnZlZCBmb3IgdGhlIHJlZ2lzdGVyIG51bWJlciBhcmd1bWVudCB0bworKyAgIHtzdGFydCxzdG9wfV9tZW1vcnksIHRoZSBtYXhpbXVtIG51bWJlciBvZiBncm91cHMgd2UgY2FuIHJlcG9ydAorKyAgIHRoaW5ncyBhYm91dCBpcyB3aGF0IGZpdHMgaW4gdGhhdCBieXRlLiAgKi8KKysjICBkZWZpbmUgTUFYX1JFR05VTSAyNTUKKysKKysvKiBCdXQgcGF0dGVybnMgY2FuIGhhdmUgbW9yZSB0aGFuIGBNQVhfUkVHTlVNJyByZWdpc3RlcnMuICBXZSBqdXN0CisrICAgaWdub3JlIHRoZSBleGNlc3MuICAqLworK3R5cGVkZWYgdW5zaWduZWQgcmVnbnVtX3Q7CisrCisrCisrLyogTWFjcm9zIGZvciB0aGUgY29tcGlsZSBzdGFjay4gICovCisrCisrLyogU2luY2Ugb2Zmc2V0cyBjYW4gZ28gZWl0aGVyIGZvcndhcmRzIG9yIGJhY2t3YXJkcywgdGhpcyB0eXBlIG5lZWRzIHRvCisrICAgYmUgYWJsZSB0byBob2xkIHZhbHVlcyBmcm9tIC0oTUFYX0JVRl9TSVpFIC0gMSkgdG8gTUFYX0JVRl9TSVpFIC0gMS4gICovCisrLyogaW50IG1heSBiZSBub3QgZW5vdWdoIHdoZW4gc2l6ZW9mKGludCkgPT0gMi4gICovCisrdHlwZWRlZiBsb25nIHBhdHRlcm5fb2Zmc2V0X3Q7CisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBwYXR0ZXJuX29mZnNldF90IGJlZ2FsdF9vZmZzZXQ7CisrICBwYXR0ZXJuX29mZnNldF90IGZpeHVwX2FsdF9qdW1wOworKyAgcGF0dGVybl9vZmZzZXRfdCBpbm5lcl9ncm91cF9vZmZzZXQ7CisrICBwYXR0ZXJuX29mZnNldF90IGxhc3RzdGFydF9vZmZzZXQ7CisrICByZWdudW1fdCByZWdudW07CisrfSBjb21waWxlX3N0YWNrX2VsdF90OworKworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgY29tcGlsZV9zdGFja19lbHRfdCAqc3RhY2s7CisrICB1bnNpZ25lZCBzaXplOworKyAgdW5zaWduZWQgYXZhaWw7CQkJLyogT2Zmc2V0IG9mIG5leHQgb3BlbiBwb3NpdGlvbi4gICovCisrfSBjb21waWxlX3N0YWNrX3R5cGU7CisrCisrCisrIyAgZGVmaW5lIElOSVRfQ09NUElMRV9TVEFDS19TSVpFIDMyCisrCisrIyAgZGVmaW5lIENPTVBJTEVfU1RBQ0tfRU1QVFkgIChjb21waWxlX3N0YWNrLmF2YWlsID09IDApCisrIyAgZGVmaW5lIENPTVBJTEVfU1RBQ0tfRlVMTCAgKGNvbXBpbGVfc3RhY2suYXZhaWwgPT0gY29tcGlsZV9zdGFjay5zaXplKQorKworKy8qIFRoZSBuZXh0IGF2YWlsYWJsZSBlbGVtZW50LiAgKi8KKysjICBkZWZpbmUgQ09NUElMRV9TVEFDS19UT1AgKGNvbXBpbGVfc3RhY2suc3RhY2tbY29tcGlsZV9zdGFjay5hdmFpbF0pCisrCisrIyBlbmRpZiAvKiBub3QgREVGSU5FRF9PTkNFICovCisrCisrLyogU2V0IHRoZSBiaXQgZm9yIGNoYXJhY3RlciBDIGluIGEgbGlzdC4gICovCisrIyBpZm5kZWYgREVGSU5FRF9PTkNFCisrIyAgZGVmaW5lIFNFVF9MSVNUX0JJVChjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAoYlsoKHVuc2lnbmVkIGNoYXIpIChjKSkgLyBCWVRFV0lEVEhdICAgICAgICAgICAgICAgXAorKyAgIHw9IDEgPDwgKCgodW5zaWduZWQgY2hhcikgYykgJSBCWVRFV0lEVEgpKQorKyMgZW5kaWYgLyogREVGSU5FRF9PTkNFICovCisrCisrLyogR2V0IHRoZSBuZXh0IHVuc2lnbmVkIG51bWJlciBpbiB0aGUgdW5jb21waWxlZCBwYXR0ZXJuLiAgKi8KKysjIGRlZmluZSBHRVRfVU5TSUdORURfTlVNQkVSKG51bSkgXAorKyAgewkJCQkJCQkJCVwKKysgICAgd2hpbGUgKHAgIT0gcGVuZCkJCQkJCQkJXAorKyAgICAgIHsJCQkJCQkJCQlcCisrCVBBVEZFVENIIChjKTsJCQkJCQkJXAorKwlpZiAoYyA8ICcwJyB8fCBjID4gJzknKQkJCQkJCVwKKysJICBicmVhazsJCQkJCQkJXAorKwlpZiAobnVtIDw9IFJFX0RVUF9NQVgpCQkJCQkJXAorKwkgIHsJCQkJCQkJCVwKKysJICAgIGlmIChudW0gPCAwKQkJCQkJCVwKKysJICAgICAgbnVtID0gMDsJCQkJCQkJXAorKwkgICAgbnVtID0gbnVtICogMTAgKyBjIC0gJzAnOwkJCQkJXAorKwkgIH0JCQkJCQkJCVwKKysgICAgICB9CQkJCQkJCQkJXAorKyAgfQorKworKyMgaWZuZGVmIERFRklORURfT05DRQorKyMgIGlmIFdJREVfQ0hBUl9TVVBQT1JUCisrLyogVGhlIEdOVSBDIGxpYnJhcnkgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdXNlci1kZWZpbmVkIGNoYXJhY3RlciBjbGFzc2VzCisrICAgYW5kIHRoZSBmdW5jdGlvbnMgZnJvbSBJU08gQyBhbWVuZGVtZW50IDEuICAqLworKyMgICBpZmRlZiBDSEFSQ0xBU1NfTkFNRV9NQVgKKysjICAgIGRlZmluZSBDSEFSX0NMQVNTX01BWF9MRU5HVEggQ0hBUkNMQVNTX05BTUVfTUFYCisrIyAgIGVsc2UKKysvKiBUaGlzIHNob3VsZG4ndCBoYXBwZW4gYnV0IHNvbWUgaW1wbGVtZW50YXRpb24gbWlnaHQgc3RpbGwgaGF2ZSB0aGlzCisrICAgcHJvYmxlbS4gIFVzZSBhIHJlYXNvbmFibGUgZGVmYXVsdCB2YWx1ZS4gICovCisrIyAgICBkZWZpbmUgQ0hBUl9DTEFTU19NQVhfTEVOR1RIIDI1NgorKyMgICBlbmRpZgorKworKyMgICBpZmRlZiBfTElCQworKyMgICAgZGVmaW5lIElTX0NIQVJfQ0xBU1Moc3RyaW5nKSBfX3djdHlwZSAoc3RyaW5nKQorKyMgICBlbHNlCisrIyAgICBkZWZpbmUgSVNfQ0hBUl9DTEFTUyhzdHJpbmcpIHdjdHlwZSAoc3RyaW5nKQorKyMgICBlbmRpZgorKyMgIGVsc2UKKysjICAgZGVmaW5lIENIQVJfQ0xBU1NfTUFYX0xFTkdUSCAgNiAvKiBOYW1lbHksIGB4ZGlnaXQnLiAgKi8KKysKKysjICAgZGVmaW5lIElTX0NIQVJfQ0xBU1Moc3RyaW5nKQkJCQkJXAorKyAgIChTVFJFUSAoc3RyaW5nLCAiYWxwaGEiKSB8fCBTVFJFUSAoc3RyaW5nLCAidXBwZXIiKQkJCVwKKysgICAgfHwgU1RSRVEgKHN0cmluZywgImxvd2VyIikgfHwgU1RSRVEgKHN0cmluZywgImRpZ2l0IikJCVwKKysgICAgfHwgU1RSRVEgKHN0cmluZywgImFsbnVtIikgfHwgU1RSRVEgKHN0cmluZywgInhkaWdpdCIpCQlcCisrICAgIHx8IFNUUkVRIChzdHJpbmcsICJzcGFjZSIpIHx8IFNUUkVRIChzdHJpbmcsICJwcmludCIpCQlcCisrICAgIHx8IFNUUkVRIChzdHJpbmcsICJwdW5jdCIpIHx8IFNUUkVRIChzdHJpbmcsICJncmFwaCIpCQlcCisrICAgIHx8IFNUUkVRIChzdHJpbmcsICJjbnRybCIpIHx8IFNUUkVRIChzdHJpbmcsICJibGFuayIpKQorKyMgIGVuZGlmCisrIyBlbmRpZiAvKiBERUZJTkVEX09OQ0UgKi8KKysMCisrIyBpZm5kZWYgTUFUQ0hfTUFZX0FMTE9DQVRFCisrCisrLyogSWYgd2UgY2Fubm90IGFsbG9jYXRlIGxhcmdlIG9iamVjdHMgd2l0aGluIHJlX21hdGNoXzJfaW50ZXJuYWwsCisrICAgd2UgbWFrZSB0aGUgZmFpbCBzdGFjayBhbmQgcmVnaXN0ZXIgdmVjdG9ycyBnbG9iYWwuCisrICAgVGhlIGZhaWwgc3RhY2ssIHdlIGdyb3cgdG8gdGhlIG1heGltdW0gc2l6ZSB3aGVuIGEgcmVnZXhwCisrICAgaXMgY29tcGlsZWQuCisrICAgVGhlIHJlZ2lzdGVyIHZlY3RvcnMsIHdlIGFkanVzdCBpbiBzaXplIGVhY2ggdGltZSB3ZQorKyAgIGNvbXBpbGUgYSByZWdleHAsIGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIHJlZ2lzdGVycyBpdCBuZWVkcy4gICovCisrCisrc3RhdGljIFBSRUZJWChmYWlsX3N0YWNrX3R5cGUpIGZhaWxfc3RhY2s7CisrCisrLyogU2l6ZSB3aXRoIHdoaWNoIHRoZSBmb2xsb3dpbmcgdmVjdG9ycyBhcmUgY3VycmVudGx5IGFsbG9jYXRlZC4KKysgICBUaGF0IGlzIHNvIHdlIGNhbiBtYWtlIHRoZW0gYmlnZ2VyIGFzIG5lZWRlZCwKKysgICBidXQgbmV2ZXIgbWFrZSB0aGVtIHNtYWxsZXIuICAqLworKyMgIGlmZGVmIERFRklORURfT05DRQorK3N0YXRpYyBpbnQgcmVnc19hbGxvY2F0ZWRfc2l6ZTsKKysKKytzdGF0aWMgY29uc3QgY2hhciAqKiAgICAgcmVnc3RhcnQsICoqICAgICByZWdlbmQ7Cisrc3RhdGljIGNvbnN0IGNoYXIgKiogb2xkX3JlZ3N0YXJ0LCAqKiBvbGRfcmVnZW5kOworK3N0YXRpYyBjb25zdCBjaGFyICoqYmVzdF9yZWdzdGFydCwgKipiZXN0X3JlZ2VuZDsKKytzdGF0aWMgY29uc3QgY2hhciAqKnJlZ19kdW1teTsKKysjICBlbmRpZiAvKiBERUZJTkVEX09OQ0UgKi8KKysKKytzdGF0aWMgUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkgKlBSRUZJWChyZWdfaW5mbyk7Cisrc3RhdGljIFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpICpQUkVGSVgocmVnX2luZm9fZHVtbXkpOworKworKy8qIE1ha2UgdGhlIHJlZ2lzdGVyIHZlY3RvcnMgYmlnIGVub3VnaCBmb3IgTlVNX1JFR1MgcmVnaXN0ZXJzLAorKyAgIGJ1dCBkb24ndCBtYWtlIHRoZW0gc21hbGxlci4gICovCisrCisrc3RhdGljIHZvaWQKKytQUkVGSVgocmVnZXhfZ3Jvd19yZWdpc3RlcnMpIChpbnQgbnVtX3JlZ3MpCisreworKyAgaWYgKG51bV9yZWdzID4gcmVnc19hbGxvY2F0ZWRfc2l6ZSkKKysgICAgeworKyAgICAgIFJFVEFMTE9DX0lGIChyZWdzdGFydCwJIG51bV9yZWdzLCBjb25zdCBjaGFyICopOworKyAgICAgIFJFVEFMTE9DX0lGIChyZWdlbmQsCSBudW1fcmVncywgY29uc3QgY2hhciAqKTsKKysgICAgICBSRVRBTExPQ19JRiAob2xkX3JlZ3N0YXJ0LCBudW1fcmVncywgY29uc3QgY2hhciAqKTsKKysgICAgICBSRVRBTExPQ19JRiAob2xkX3JlZ2VuZCwJIG51bV9yZWdzLCBjb25zdCBjaGFyICopOworKyAgICAgIFJFVEFMTE9DX0lGIChiZXN0X3JlZ3N0YXJ0LCBudW1fcmVncywgY29uc3QgY2hhciAqKTsKKysgICAgICBSRVRBTExPQ19JRiAoYmVzdF9yZWdlbmQsCSBudW1fcmVncywgY29uc3QgY2hhciAqKTsKKysgICAgICBSRVRBTExPQ19JRiAoUFJFRklYKHJlZ19pbmZvKSwgbnVtX3JlZ3MsIFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpKTsKKysgICAgICBSRVRBTExPQ19JRiAocmVnX2R1bW15LAkgbnVtX3JlZ3MsIGNvbnN0IGNoYXIgKik7CisrICAgICAgUkVUQUxMT0NfSUYgKFBSRUZJWChyZWdfaW5mb19kdW1teSksIG51bV9yZWdzLCBQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSk7CisrCisrICAgICAgcmVnc19hbGxvY2F0ZWRfc2l6ZSA9IG51bV9yZWdzOworKyAgICB9CisrfQorKworKyMgZW5kaWYgLyogbm90IE1BVENIX01BWV9BTExPQ0FURSAqLworKwwKKysjIGlmbmRlZiBERUZJTkVEX09OQ0UKKytzdGF0aWMgYm9vbGVhbiBncm91cF9pbl9jb21waWxlX3N0YWNrIChjb21waWxlX3N0YWNrX3R5cGUgY29tcGlsZV9zdGFjaywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdudW1fdCByZWdudW0pOworKyMgZW5kaWYgLyogbm90IERFRklORURfT05DRSAqLworKworKy8qIGByZWdleF9jb21waWxlJyBjb21waWxlcyBQQVRURVJOIChvZiBsZW5ndGggU0laRSkgYWNjb3JkaW5nIHRvIFNZTlRBWC4KKysgICBSZXR1cm5zIG9uZSBvZiBlcnJvciBjb2RlcyBkZWZpbmVkIGluIGByZWdleC5oJywgb3IgemVybyBmb3Igc3VjY2Vzcy4KKysKKysgICBBc3N1bWVzIHRoZSBgYWxsb2NhdGVkJyAoYW5kIHBlcmhhcHMgYGJ1ZmZlcicpIGFuZCBgdHJhbnNsYXRlJworKyAgIGZpZWxkcyBhcmUgc2V0IGluIEJVRlAgb24gZW50cnkuCisrCisrICAgSWYgaXQgc3VjY2VlZHMsIHJlc3VsdHMgYXJlIHB1dCBpbiBCVUZQIChpZiBpdCByZXR1cm5zIGFuIGVycm9yLCB0aGUKKysgICBjb250ZW50cyBvZiBCVUZQIGFyZSB1bmRlZmluZWQpOgorKyAgICAgYGJ1ZmZlcicgaXMgdGhlIGNvbXBpbGVkIHBhdHRlcm47CisrICAgICBgc3ludGF4JyBpcyBzZXQgdG8gU1lOVEFYOworKyAgICAgYHVzZWQnIGlzIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBjb21waWxlZCBwYXR0ZXJuOworKyAgICAgYGZhc3RtYXBfYWNjdXJhdGUnIGlzIHplcm87CisrICAgICBgcmVfbnN1YicgaXMgdGhlIG51bWJlciBvZiBzdWJleHByZXNzaW9ucyBpbiBQQVRURVJOOworKyAgICAgYG5vdF9ib2wnIGFuZCBgbm90X2VvbCcgYXJlIHplcm87CisrCisrICAgVGhlIGBmYXN0bWFwJyBhbmQgYG5ld2xpbmVfYW5jaG9yJyBmaWVsZHMgYXJlIG5laXRoZXIKKysgICBleGFtaW5lZCBub3Igc2V0LiAgKi8KKysKKysvKiBSZXR1cm4sIGZyZWVpbmcgc3RvcmFnZSB3ZSBhbGxvY2F0ZWQuICAqLworKyMgaWZkZWYgV0NIQVIKKysjICBkZWZpbmUgRlJFRV9TVEFDS19SRVRVUk4odmFsdWUpCQlcCisrICByZXR1cm4gKGZyZWUocGF0dGVybiksIGZyZWUobWJzX29mZnNldCksIGZyZWUoaXNfYmluYXJ5KSwgZnJlZSAoY29tcGlsZV9zdGFjay5zdGFjayksIHZhbHVlKQorKyMgZWxzZQorKyMgIGRlZmluZSBGUkVFX1NUQUNLX1JFVFVSTih2YWx1ZSkJCVwKKysgIHJldHVybiAoZnJlZSAoY29tcGlsZV9zdGFjay5zdGFjayksIHZhbHVlKQorKyMgZW5kaWYgLyogV0NIQVIgKi8KKysKKytzdGF0aWMgcmVnX2VycmNvZGVfdAorK1BSRUZJWChyZWdleF9jb21waWxlKSAoY29uc3QgY2hhciAqQVJHX1BSRUZJWChwYXR0ZXJuKSwKKysgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBBUkdfUFJFRklYKHNpemUpLCByZWdfc3ludGF4X3Qgc3ludGF4LAorKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwKQorK3sKKysgIC8qIFdlIGZldGNoIGNoYXJhY3RlcnMgZnJvbSBQQVRURVJOIGhlcmUuICBFdmVuIHRob3VnaCBQQVRURVJOIGlzCisrICAgICBgY2hhciAqJyAoaS5lLiwgc2lnbmVkKSwgd2UgZGVjbGFyZSB0aGVzZSB2YXJpYWJsZXMgYXMgdW5zaWduZWQsIHNvCisrICAgICB0aGV5IGNhbiBiZSByZWxpYWJseSB1c2VkIGFzIGFycmF5IGluZGljZXMuICAqLworKyAgcmVnaXN0ZXIgVUNIQVJfVCBjLCBjMTsKKysKKysjaWZkZWYgV0NIQVIKKysgIC8qIEEgdGVtcG9yYXJ5IHNwYWNlIHRvIGtlZXAgd2NoYXJfdCBwYXR0ZXJuIGFuZCBjb21waWxlZCBwYXR0ZXJuLiAgKi8KKysgIENIQVJfVCAqcGF0dGVybiwgKkNPTVBJTEVEX0JVRkZFUl9WQVI7CisrICBzaXplX3Qgc2l6ZTsKKysgIC8qIG9mZnNldCBidWZmZXIgZm9yIG9wdGltaXphdGlvbi4gU2VlIGNvbnZlcnRfbWJzX3RvX3djLiAgKi8KKysgIGludCAqbWJzX29mZnNldCA9IE5VTEw7CisrICAvKiBJdCBob2xkIHdoZXRoZXIgZWFjaCB3Y2hhcl90IGlzIGJpbmFyeSBkYXRhIG9yIG5vdC4gICovCisrICBjaGFyICppc19iaW5hcnkgPSBOVUxMOworKyAgLyogQSBmbGFnIHdoZXRoZXIgZXhhY3RuIGlzIGhhbmRsaW5nIGJpbmFyeSBkYXRhIG9yIG5vdC4gICovCisrICBjaGFyIGlzX2V4YWN0bl9iaW4gPSBGQUxTRTsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysgIC8qIEEgcmFuZG9tIHRlbXBvcmFyeSBzcG90IGluIFBBVFRFUk4uICAqLworKyAgY29uc3QgQ0hBUl9UICpwMTsKKysKKysgIC8qIFBvaW50cyB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIHdoZXJlIHdlIHNob3VsZCBhcHBlbmQuICAqLworKyAgcmVnaXN0ZXIgVUNIQVJfVCAqYjsKKysKKysgIC8qIEtlZXBzIHRyYWNrIG9mIHVuY2xvc2VkIGdyb3Vwcy4gICovCisrICBjb21waWxlX3N0YWNrX3R5cGUgY29tcGlsZV9zdGFjazsKKysKKysgIC8qIFBvaW50cyB0byB0aGUgY3VycmVudCAoZW5kaW5nKSBwb3NpdGlvbiBpbiB0aGUgcGF0dGVybi4gICovCisrI2lmZGVmIFdDSEFSCisrICBjb25zdCBDSEFSX1QgKnA7CisrICBjb25zdCBDSEFSX1QgKnBlbmQ7CisrI2Vsc2UgLyogQllURSAqLworKyAgY29uc3QgQ0hBUl9UICpwID0gcGF0dGVybjsKKysgIGNvbnN0IENIQVJfVCAqcGVuZCA9IHBhdHRlcm4gKyBzaXplOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKyAgLyogSG93IHRvIHRyYW5zbGF0ZSB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcGF0dGVybi4gICovCisrICBSRV9UUkFOU0xBVEVfVFlQRSB0cmFuc2xhdGUgPSBidWZwLT50cmFuc2xhdGU7CisrCisrICAvKiBBZGRyZXNzIG9mIHRoZSBjb3VudC1ieXRlIG9mIHRoZSBtb3N0IHJlY2VudGx5IGluc2VydGVkIGBleGFjdG4nCisrICAgICBjb21tYW5kLiAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byB0ZWxsIGlmIGEgbmV3IGV4YWN0LW1hdGNoCisrICAgICBjaGFyYWN0ZXIgY2FuIGJlIGFkZGVkIHRvIHRoYXQgY29tbWFuZCBvciBpZiB0aGUgY2hhcmFjdGVyIHJlcXVpcmVzCisrICAgICBhIG5ldyBgZXhhY3RuJyBjb21tYW5kLiAgKi8KKysgIFVDSEFSX1QgKnBlbmRpbmdfZXhhY3QgPSAwOworKworKyAgLyogQWRkcmVzcyBvZiBzdGFydCBvZiB0aGUgbW9zdCByZWNlbnRseSBmaW5pc2hlZCBleHByZXNzaW9uLgorKyAgICAgVGhpcyB0ZWxscywgZS5nLiwgcG9zdGZpeCAqIHdoZXJlIHRvIGZpbmQgdGhlIHN0YXJ0IG9mIGl0cworKyAgICAgb3BlcmFuZC4gIFJlc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgZ3JvdXBzIGFuZCBhbHRlcm5hdGl2ZXMuICAqLworKyAgVUNIQVJfVCAqbGFzdHN0YXJ0ID0gMDsKKysKKysgIC8qIEFkZHJlc3Mgb2YgYmVnaW5uaW5nIG9mIHJlZ2V4cCwgb3IgaW5zaWRlIG9mIGxhc3QgZ3JvdXAuICAqLworKyAgVUNIQVJfVCAqYmVnYWx0OworKworKyAgLyogQWRkcmVzcyBvZiB0aGUgcGxhY2Ugd2hlcmUgYSBmb3J3YXJkIGp1bXAgc2hvdWxkIGdvIHRvIHRoZSBlbmQgb2YKKysgICAgIHRoZSBjb250YWluaW5nIGV4cHJlc3Npb24uICBFYWNoIGFsdGVybmF0aXZlIG9mIGFuIGBvcicgLS0gZXhjZXB0IHRoZQorKyAgICAgbGFzdCAtLSBlbmRzIHdpdGggYSBmb3J3YXJkIGp1bXAgb2YgdGhpcyBzb3J0LiAgKi8KKysgIFVDSEFSX1QgKmZpeHVwX2FsdF9qdW1wID0gMDsKKysKKysgIC8qIENvdW50cyBvcGVuLWdyb3VwcyBhcyB0aGV5IGFyZSBlbmNvdW50ZXJlZC4gIFJlbWVtYmVyZWQgZm9yIHRoZQorKyAgICAgbWF0Y2hpbmcgY2xvc2UtZ3JvdXAgb24gdGhlIGNvbXBpbGUgc3RhY2ssIHNvIHRoZSBzYW1lIHJlZ2lzdGVyCisrICAgICBudW1iZXIgaXMgcHV0IGluIHRoZSBzdG9wX21lbW9yeSBhcyB0aGUgc3RhcnRfbWVtb3J5LiAgKi8KKysgIHJlZ251bV90IHJlZ251bSA9IDA7CisrCisrI2lmZGVmIFdDSEFSCisrICAvKiBJbml0aWFsaXplIHRoZSB3Y2hhcl90IFBBVFRFUk4gYW5kIG9mZnNldF9idWZmZXIuICAqLworKyAgcCA9IHBlbmQgPSBwYXR0ZXJuID0gVEFMTE9DKGNzaXplICsgMSwgQ0hBUl9UKTsKKysgIG1ic19vZmZzZXQgPSBUQUxMT0MoY3NpemUgKyAxLCBpbnQpOworKyAgaXNfYmluYXJ5ID0gVEFMTE9DKGNzaXplICsgMSwgY2hhcik7CisrICBpZiAocGF0dGVybiA9PSBOVUxMIHx8IG1ic19vZmZzZXQgPT0gTlVMTCB8fCBpc19iaW5hcnkgPT0gTlVMTCkKKysgICAgeworKyAgICAgIGZyZWUocGF0dGVybik7CisrICAgICAgZnJlZShtYnNfb2Zmc2V0KTsKKysgICAgICBmcmVlKGlzX2JpbmFyeSk7CisrICAgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisrICAgIH0KKysgIHBhdHRlcm5bY3NpemVdID0gTCdcMCc7CS8qIHNlbnRpbmVsICovCisrICBzaXplID0gY29udmVydF9tYnNfdG9fd2NzKHBhdHRlcm4sIGNwYXR0ZXJuLCBjc2l6ZSwgbWJzX29mZnNldCwgaXNfYmluYXJ5KTsKKysgIHBlbmQgPSBwICsgc2l6ZTsKKysgIGlmIChzaXplIDwgMCkKKysgICAgeworKyAgICAgIGZyZWUocGF0dGVybik7CisrICAgICAgZnJlZShtYnNfb2Zmc2V0KTsKKysgICAgICBmcmVlKGlzX2JpbmFyeSk7CisrICAgICAgcmV0dXJuIFJFR19CQURQQVQ7CisrICAgIH0KKysjZW5kaWYKKysKKysjaWZkZWYgREVCVUcKKysgIERFQlVHX1BSSU5UMSAoIlxuQ29tcGlsaW5nIHBhdHRlcm46ICIpOworKyAgaWYgKGRlYnVnKQorKyAgICB7CisrICAgICAgdW5zaWduZWQgZGVidWdfY291bnQ7CisrCisrICAgICAgZm9yIChkZWJ1Z19jb3VudCA9IDA7IGRlYnVnX2NvdW50IDwgc2l6ZTsgZGVidWdfY291bnQrKykKKysgICAgICAgIFBVVF9DSEFSIChwYXR0ZXJuW2RlYnVnX2NvdW50XSk7CisrICAgICAgcHV0Y2hhciAoJ1xuJyk7CisrICAgIH0KKysjZW5kaWYgLyogREVCVUcgKi8KKysKKysgIC8qIEluaXRpYWxpemUgdGhlIGNvbXBpbGUgc3RhY2suICAqLworKyAgY29tcGlsZV9zdGFjay5zdGFjayA9IFRBTExPQyAoSU5JVF9DT01QSUxFX1NUQUNLX1NJWkUsIGNvbXBpbGVfc3RhY2tfZWx0X3QpOworKyAgaWYgKGNvbXBpbGVfc3RhY2suc3RhY2sgPT0gTlVMTCkKKysgICAgeworKyNpZmRlZiBXQ0hBUgorKyAgICAgIGZyZWUocGF0dGVybik7CisrICAgICAgZnJlZShtYnNfb2Zmc2V0KTsKKysgICAgICBmcmVlKGlzX2JpbmFyeSk7CisrI2VuZGlmCisrICAgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisrICAgIH0KKysKKysgIGNvbXBpbGVfc3RhY2suc2l6ZSA9IElOSVRfQ09NUElMRV9TVEFDS19TSVpFOworKyAgY29tcGlsZV9zdGFjay5hdmFpbCA9IDA7CisrCisrICAvKiBJbml0aWFsaXplIHRoZSBwYXR0ZXJuIGJ1ZmZlci4gICovCisrICBidWZwLT5zeW50YXggPSBzeW50YXg7CisrICBidWZwLT5mYXN0bWFwX2FjY3VyYXRlID0gMDsKKysgIGJ1ZnAtPm5vdF9ib2wgPSBidWZwLT5ub3RfZW9sID0gMDsKKysKKysgIC8qIFNldCBgdXNlZCcgdG8gemVybywgc28gdGhhdCBpZiB3ZSByZXR1cm4gYW4gZXJyb3IsIHRoZSBwYXR0ZXJuCisrICAgICBwcmludGVyIChmb3IgZGVidWdnaW5nKSB3aWxsIHRoaW5rIHRoZXJlJ3Mgbm8gcGF0dGVybi4gIFdlIHJlc2V0IGl0CisrICAgICBhdCB0aGUgZW5kLiAgKi8KKysgIGJ1ZnAtPnVzZWQgPSAwOworKworKyAgLyogQWx3YXlzIGNvdW50IGdyb3Vwcywgd2hldGhlciBvciBub3QgYnVmcC0+bm9fc3ViIGlzIHNldC4gICovCisrICBidWZwLT5yZV9uc3ViID0gMDsKKysKKysjaWYgIWRlZmluZWQgZW1hY3MgJiYgIWRlZmluZWQgU1lOVEFYX1RBQkxFCisrICAvKiBJbml0aWFsaXplIHRoZSBzeW50YXggdGFibGUuICAqLworKyAgIGluaXRfc3ludGF4X29uY2UgKCk7CisrI2VuZGlmCisrCisrICBpZiAoYnVmcC0+YWxsb2NhdGVkID09IDApCisrICAgIHsKKysgICAgICBpZiAoYnVmcC0+YnVmZmVyKQorKwl7IC8qIElmIHplcm8gYWxsb2NhdGVkLCBidXQgYnVmZmVyIGlzIG5vbi1udWxsLCB0cnkgdG8gcmVhbGxvYworKyAgICAgICAgICAgICBlbm91Z2ggc3BhY2UuICBUaGlzIGxvc2VzIGlmIGJ1ZmZlcidzIGFkZHJlc3MgaXMgYm9ndXMsIGJ1dAorKyAgICAgICAgICAgICB0aGF0IGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuICAqLworKyNpZmRlZiBXQ0hBUgorKwkgIC8qIEZyZWUgYnVmcC0+YnVmZmVyIGFuZCBhbGxvY2F0ZSBhbiBhcnJheSBmb3Igd2NoYXJfdCBwYXR0ZXJuCisrCSAgICAgYnVmZmVyLiAgKi8KKysgICAgICAgICAgZnJlZShidWZwLT5idWZmZXIpOworKyAgICAgICAgICBDT01QSUxFRF9CVUZGRVJfVkFSID0gVEFMTE9DIChJTklUX0JVRl9TSVpFL3NpemVvZihVQ0hBUl9UKSwKKysJCQkJCVVDSEFSX1QpOworKyNlbHNlCisrICAgICAgICAgIFJFVEFMTE9DIChDT01QSUxFRF9CVUZGRVJfVkFSLCBJTklUX0JVRl9TSVpFLCBVQ0hBUl9UKTsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysgICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgICB7IC8qIENhbGxlciBkaWQgbm90IGFsbG9jYXRlIGEgYnVmZmVyLiAgRG8gaXQgZm9yIHRoZW0uICAqLworKyAgICAgICAgICBDT01QSUxFRF9CVUZGRVJfVkFSID0gVEFMTE9DIChJTklUX0JVRl9TSVpFIC8gc2l6ZW9mKFVDSEFSX1QpLAorKwkJCQkJVUNIQVJfVCk7CisrICAgICAgICB9CisrCisrICAgICAgaWYgKCFDT01QSUxFRF9CVUZGRVJfVkFSKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VTUEFDRSk7CisrI2lmZGVmIFdDSEFSCisrICAgICAgYnVmcC0+YnVmZmVyID0gKGNoYXIqKUNPTVBJTEVEX0JVRkZFUl9WQVI7CisrI2VuZGlmIC8qIFdDSEFSICovCisrICAgICAgYnVmcC0+YWxsb2NhdGVkID0gSU5JVF9CVUZfU0laRTsKKysgICAgfQorKyNpZmRlZiBXQ0hBUgorKyAgZWxzZQorKyAgICBDT01QSUxFRF9CVUZGRVJfVkFSID0gKFVDSEFSX1QqKSBidWZwLT5idWZmZXI7CisrI2VuZGlmCisrCisrICBiZWdhbHQgPSBiID0gQ09NUElMRURfQlVGRkVSX1ZBUjsKKysKKysgIC8qIExvb3AgdGhyb3VnaCB0aGUgdW5jb21waWxlZCBwYXR0ZXJuIHVudGlsIHdlJ3JlIGF0IHRoZSBlbmQuICAqLworKyAgd2hpbGUgKHAgIT0gcGVuZCkKKysgICAgeworKyAgICAgIFBBVEZFVENIIChjKTsKKysKKysgICAgICBzd2l0Y2ggKGMpCisrICAgICAgICB7CisrICAgICAgICBjYXNlICdeJzoKKysgICAgICAgICAgeworKyAgICAgICAgICAgIGlmICggICAvKiBJZiBhdCBzdGFydCBvZiBwYXR0ZXJuLCBpdCdzIGFuIG9wZXJhdG9yLiAgKi8KKysgICAgICAgICAgICAgICAgICAgcCA9PSBwYXR0ZXJuICsgMQorKyAgICAgICAgICAgICAgICAgICAvKiBJZiBjb250ZXh0IGluZGVwZW5kZW50LCBpdCdzIGFuIG9wZXJhdG9yLiAgKi8KKysgICAgICAgICAgICAgICAgfHwgc3ludGF4ICYgUkVfQ09OVEVYVF9JTkRFUF9BTkNIT1JTCisrICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSwgZGVwZW5kcyBvbiB3aGF0J3MgY29tZSBiZWZvcmUuICAqLworKyAgICAgICAgICAgICAgICB8fCBQUkVGSVgoYXRfYmVnbGluZV9sb2NfcCkgKHBhdHRlcm4sIHAsIHN5bnRheCkpCisrICAgICAgICAgICAgICBCVUZfUFVTSCAoYmVnbGluZSk7CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgICAgfQorKyAgICAgICAgICBicmVhazsKKysKKysKKysgICAgICAgIGNhc2UgJyQnOgorKyAgICAgICAgICB7CisrICAgICAgICAgICAgaWYgKCAgIC8qIElmIGF0IGVuZCBvZiBwYXR0ZXJuLCBpdCdzIGFuIG9wZXJhdG9yLiAgKi8KKysgICAgICAgICAgICAgICAgICAgcCA9PSBwZW5kCisrICAgICAgICAgICAgICAgICAgIC8qIElmIGNvbnRleHQgaW5kZXBlbmRlbnQsIGl0J3MgYW4gb3BlcmF0b3IuICAqLworKyAgICAgICAgICAgICAgICB8fCBzeW50YXggJiBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMKKysgICAgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlLCBkZXBlbmRzIG9uIHdoYXQncyBuZXh0LiAgKi8KKysgICAgICAgICAgICAgICAgfHwgUFJFRklYKGF0X2VuZGxpbmVfbG9jX3ApIChwLCBwZW5kLCBzeW50YXgpKQorKyAgICAgICAgICAgICAgIEJVRl9QVVNIIChlbmRsaW5lKTsKKysgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICAgICB9CisrICAgICAgICAgICBicmVhazsKKysKKysKKysJY2FzZSAnKyc6CisrICAgICAgICBjYXNlICc/JzoKKysgICAgICAgICAgaWYgKChzeW50YXggJiBSRV9CS19QTFVTX1FNKQorKyAgICAgICAgICAgICAgfHwgKHN5bnRheCAmIFJFX0xJTUlURURfT1BTKSkKKysgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgaGFuZGxlX3BsdXM6CisrICAgICAgICBjYXNlICcqJzoKKysgICAgICAgICAgLyogSWYgdGhlcmUgaXMgbm8gcHJldmlvdXMgcGF0dGVybi4uLiAqLworKyAgICAgICAgICBpZiAoIWxhc3RzdGFydCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBpZiAoc3ludGF4ICYgUkVfQ09OVEVYVF9JTlZBTElEX09QUykKKysgICAgICAgICAgICAgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19CQURSUFQpOworKyAgICAgICAgICAgICAgZWxzZSBpZiAoIShzeW50YXggJiBSRV9DT05URVhUX0lOREVQX09QUykpCisrICAgICAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICB7CisrICAgICAgICAgICAgLyogQXJlIHdlIG9wdGltaXppbmcgdGhpcyBqdW1wPyAgKi8KKysgICAgICAgICAgICBib29sZWFuIGtlZXBfc3RyaW5nX3AgPSBmYWxzZTsKKysKKysgICAgICAgICAgICAvKiAxIG1lYW5zIHplcm8gKG1hbnkpIG1hdGNoZXMgaXMgYWxsb3dlZC4gICovCisrICAgICAgICAgICAgY2hhciB6ZXJvX3RpbWVzX29rID0gMCwgbWFueV90aW1lc19vayA9IDA7CisrCisrICAgICAgICAgICAgLyogSWYgdGhlcmUgaXMgYSBzZXF1ZW5jZSBvZiByZXBldGl0aW9uIGNoYXJzLCBjb2xsYXBzZSBpdAorKyAgICAgICAgICAgICAgIGRvd24gdG8ganVzdCBvbmUgKHRoZSByaWdodCBvbmUpLiAgV2UgY2FuJ3QgY29tYmluZQorKyAgICAgICAgICAgICAgIGludGVydmFsIG9wZXJhdG9ycyB3aXRoIHRoZXNlIGJlY2F1c2Ugb2YsIGUuZy4sIGBhezJ9KicsCisrICAgICAgICAgICAgICAgd2hpY2ggc2hvdWxkIG9ubHkgbWF0Y2ggYW4gZXZlbiBudW1iZXIgb2YgYGEncy4gICovCisrCisrICAgICAgICAgICAgZm9yICg7OykKKysgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgemVyb190aW1lc19vayB8PSBjICE9ICcrJzsKKysgICAgICAgICAgICAgICAgbWFueV90aW1lc19vayB8PSBjICE9ICc/JzsKKysKKysgICAgICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkKKysgICAgICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKworKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnKicKKysgICAgICAgICAgICAgICAgICAgIHx8ICghKHN5bnRheCAmIFJFX0JLX1BMVVNfUU0pICYmIChjID09ICcrJyB8fCBjID09ICc/JykpKQorKyAgICAgICAgICAgICAgICAgIDsKKysKKysgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3ludGF4ICYgUkVfQktfUExVU19RTSAgJiYgIGMgPT0gJ1xcJykKKysgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VFU0NBUEUpOworKworKyAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMxKTsKKysgICAgICAgICAgICAgICAgICAgIGlmICghKGMxID09ICcrJyB8fCBjMSA9PSAnPycpKQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgUEFUVU5GRVRDSDsKKysgICAgICAgICAgICAgICAgICAgICAgICBQQVRVTkZFVENIOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgICAgICBjID0gYzE7CisrICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgUEFUVU5GRVRDSDsKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgLyogSWYgd2UgZ2V0IGhlcmUsIHdlIGZvdW5kIGFub3RoZXIgcmVwZWF0IGNoYXJhY3Rlci4gICovCisrICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIC8qIFN0YXIsIGV0Yy4gYXBwbGllZCB0byBhbiBlbXB0eSBwYXR0ZXJuIGlzIGVxdWl2YWxlbnQKKysgICAgICAgICAgICAgICB0byBhbiBlbXB0eSBwYXR0ZXJuLiAgKi8KKysgICAgICAgICAgICBpZiAoIWxhc3RzdGFydCkKKysgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIC8qIE5vdyB3ZSBrbm93IHdoZXRoZXIgb3Igbm90IHplcm8gbWF0Y2hlcyBpcyBhbGxvd2VkCisrICAgICAgICAgICAgICAgYW5kIGFsc28gd2hldGhlciBvciBub3QgdHdvIG9yIG1vcmUgbWF0Y2hlcyBpcyBhbGxvd2VkLiAgKi8KKysgICAgICAgICAgICBpZiAobWFueV90aW1lc19vaykKKysgICAgICAgICAgICAgIHsgLyogTW9yZSB0aGFuIG9uZSByZXBldGl0aW9uIGlzIGFsbG93ZWQsIHNvIHB1dCBpbiBhdCB0aGUKKysgICAgICAgICAgICAgICAgICAgZW5kIGEgYmFja3dhcmQgcmVsYXRpdmUganVtcCBmcm9tIGBiJyB0byBiZWZvcmUgdGhlIG5leHQKKysgICAgICAgICAgICAgICAgICAganVtcCB3ZSdyZSBnb2luZyB0byBwdXQgaW4gYmVsb3cgKHdoaWNoIGp1bXBzIGZyb20KKysgICAgICAgICAgICAgICAgICAgbGFzdHN0YXJ0IHRvIGFmdGVyIHRoaXMganVtcCkuCisrCisrICAgICAgICAgICAgICAgICAgIEJ1dCBpZiB3ZSBhcmUgYXQgdGhlIGAqJyBpbiB0aGUgZXhhY3Qgc2VxdWVuY2UgYC4qXG4nLAorKyAgICAgICAgICAgICAgICAgICBpbnNlcnQgYW4gdW5jb25kaXRpb25hbCBqdW1wIGJhY2t3YXJkcyB0byB0aGUgLiwKKysgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wLiAgVGhpcyB3YXkgd2Ugb25seQorKyAgICAgICAgICAgICAgICAgICBwdXNoIGEgZmFpbHVyZSBwb2ludCBvbmNlLCBpbnN0ZWFkIG9mIGV2ZXJ5IHRpbWUKKysgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgbG9vcC4gICovCisrICAgICAgICAgICAgICAgIGFzc2VydCAocCAtIDEgPiBwYXR0ZXJuKTsKKysKKysgICAgICAgICAgICAgICAgLyogQWxsb2NhdGUgdGhlIHNwYWNlIGZvciB0aGUganVtcC4gICovCisrICAgICAgICAgICAgICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysKKysgICAgICAgICAgICAgICAgLyogV2Uga25vdyB3ZSBhcmUgbm90IGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHBhdHRlcm4sCisrICAgICAgICAgICAgICAgICAgIGJlY2F1c2UgbGFzdHN0YXJ0IHdhcyBub256ZXJvLiAgQW5kIHdlJ3ZlIGFscmVhZHkKKysgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50ZWQgYHAnLCBieSB0aGUgd2F5LCB0byBiZSB0aGUgY2hhcmFjdGVyIGFmdGVyCisrICAgICAgICAgICAgICAgICAgIHRoZSBgKicuICBEbyB3ZSBoYXZlIHRvIGRvIHNvbWV0aGluZyBhbmFsb2dvdXMgaGVyZQorKyAgICAgICAgICAgICAgICAgICBmb3IgbnVsbCBieXRlcywgYmVjYXVzZSBvZiBSRV9ET1RfTk9UX05VTEw/ICAqLworKyAgICAgICAgICAgICAgICBpZiAoVFJBTlNMQVRFICgqKHAgLSAyKSkgPT0gVFJBTlNMQVRFICgnLicpCisrCQkgICAgJiYgemVyb190aW1lc19vaworKyAgICAgICAgICAgICAgICAgICAgJiYgcCA8IHBlbmQgJiYgVFJBTlNMQVRFICgqcCkgPT0gVFJBTlNMQVRFICgnXG4nKQorKyAgICAgICAgICAgICAgICAgICAgJiYgIShzeW50YXggJiBSRV9ET1RfTkVXTElORSkpCisrICAgICAgICAgICAgICAgICAgeyAvKiBXZSBoYXZlIC4qXG4uICAqLworKyAgICAgICAgICAgICAgICAgICAgU1RPUkVfSlVNUCAoanVtcCwgYiwgbGFzdHN0YXJ0KTsKKysgICAgICAgICAgICAgICAgICAgIGtlZXBfc3RyaW5nX3AgPSB0cnVlOworKyAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgIC8qIEFueXRoaW5nIGVsc2UuICAqLworKyAgICAgICAgICAgICAgICAgIFNUT1JFX0pVTVAgKG1heWJlX3BvcF9qdW1wLCBiLCBsYXN0c3RhcnQgLQorKwkJCSAgICAgICgxICsgT0ZGU0VUX0FERFJFU1NfU0laRSkpOworKworKyAgICAgICAgICAgICAgICAvKiBXZSd2ZSBhZGRlZCBtb3JlIHN0dWZmIHRvIHRoZSBidWZmZXIuICAqLworKyAgICAgICAgICAgICAgICBiICs9IDEgKyBPRkZTRVRfQUREUkVTU19TSVpFOworKyAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIC8qIE9uIGZhaWx1cmUsIGp1bXAgZnJvbSBsYXN0c3RhcnQgdG8gYiArIDMsIHdoaWNoIHdpbGwgYmUgdGhlCisrICAgICAgICAgICAgICAgZW5kIG9mIHRoZSBidWZmZXIgYWZ0ZXIgdGhpcyBqdW1wIGlzIGluc2VydGVkLiAgKi8KKysJICAgIC8qIGlmZGVmIFdDSEFSLCAnYiArIDEgKyBPRkZTRVRfQUREUkVTU19TSVpFJyBpbnN0ZWFkIG9mCisrCSAgICAgICAnYiArIDMnLiAgKi8KKysgICAgICAgICAgICBHRVRfQlVGRkVSX1NQQUNFICgxICsgT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrICAgICAgICAgICAgSU5TRVJUX0pVTVAgKGtlZXBfc3RyaW5nX3AgPyBvbl9mYWlsdXJlX2tlZXBfc3RyaW5nX2p1bXAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG9uX2ZhaWx1cmVfanVtcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdHN0YXJ0LCBiICsgMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyAgICAgICAgICAgIHBlbmRpbmdfZXhhY3QgPSAwOworKyAgICAgICAgICAgIGIgKz0gMSArIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrCisrICAgICAgICAgICAgaWYgKCF6ZXJvX3RpbWVzX29rKQorKyAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAvKiBBdCBsZWFzdCBvbmUgcmVwZXRpdGlvbiBpcyByZXF1aXJlZCwgc28gaW5zZXJ0IGEKKysgICAgICAgICAgICAgICAgICAgYGR1bW15X2ZhaWx1cmVfanVtcCcgYmVmb3JlIHRoZSBpbml0aWFsCisrICAgICAgICAgICAgICAgICAgIGBvbl9mYWlsdXJlX2p1bXAnIGluc3RydWN0aW9uIG9mIHRoZSBsb29wLiBUaGlzCisrICAgICAgICAgICAgICAgICAgIGVmZmVjdHMgYSBza2lwIG92ZXIgdGhhdCBpbnN0cnVjdGlvbiB0aGUgZmlyc3QgdGltZQorKyAgICAgICAgICAgICAgICAgICB3ZSBoaXQgdGhhdCBsb29wLiAgKi8KKysgICAgICAgICAgICAgICAgR0VUX0JVRkZFUl9TUEFDRSAoMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyAgICAgICAgICAgICAgICBJTlNFUlRfSlVNUCAoZHVtbXlfZmFpbHVyZV9qdW1wLCBsYXN0c3RhcnQsIGxhc3RzdGFydCArCisrCQkJICAgICAyICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyAgICAgICAgICAgICAgICBiICs9IDEgKyBPRkZTRVRfQUREUkVTU19TSVpFOworKyAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysJICBicmVhazsKKysKKysKKysJY2FzZSAnLic6CisrICAgICAgICAgIGxhc3RzdGFydCA9IGI7CisrICAgICAgICAgIEJVRl9QVVNIIChhbnljaGFyKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCisrICAgICAgICBjYXNlICdbJzoKKysgICAgICAgICAgeworKyAgICAgICAgICAgIGJvb2xlYW4gaGFkX2NoYXJfY2xhc3MgPSBmYWxzZTsKKysjaWZkZWYgV0NIQVIKKysJICAgIENIQVJfVCByYW5nZV9zdGFydCA9IDB4ZmZmZmZmZmY7CisrI2Vsc2UKKysJICAgIHVuc2lnbmVkIGludCByYW5nZV9zdGFydCA9IDB4ZmZmZmZmZmY7CisrI2VuZGlmCisrICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQlJBQ0spOworKworKyNpZmRlZiBXQ0hBUgorKwkgICAgLyogV2UgYXNzdW1lIGEgY2hhcnNldChfbm90KSBzdHJ1Y3R1cmUgYXMgYSB3Y2hhcl90IGFycmF5LgorKwkgICAgICAgY2hhcnNldFswXSA9IChyZV9vcGNvZGVfdCkgY2hhcnNldChfbm90KQorKyAgICAgICAgICAgICAgIGNoYXJzZXRbMV0gPSBsICg9IGxlbmd0aCBvZiBjaGFyX2NsYXNzZXMpCisrICAgICAgICAgICAgICAgY2hhcnNldFsyXSA9IG0gKD0gbGVuZ3RoIG9mIGNvbGxhdGluZ19zeW1ib2xzKQorKyAgICAgICAgICAgICAgIGNoYXJzZXRbM10gPSBuICg9IGxlbmd0aCBvZiBlcXVpdmFsZW5jZV9jbGFzc2VzKQorKwkgICAgICAgY2hhcnNldFs0XSA9IG8gKD0gbGVuZ3RoIG9mIGNoYXJfcmFuZ2VzKQorKwkgICAgICAgY2hhcnNldFs1XSA9IHAgKD0gbGVuZ3RoIG9mIGNoYXJzKQorKworKyAgICAgICAgICAgICAgIGNoYXJzZXRbNl0gPSBjaGFyX2NsYXNzICh3Y3R5cGVfdCkKKysgICAgICAgICAgICAgICBjaGFyc2V0WzYrQ0hBUl9DTEFTU19TSVpFXSA9IGNoYXJfY2xhc3MgKHdjdHlwZV90KQorKyAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKysgICAgICAgICAgICAgICBjaGFyc2V0W2wrNV0gID0gY2hhcl9jbGFzcyAod2N0eXBlX3QpCisrCisrICAgICAgICAgICAgICAgY2hhcnNldFtsKzZdICA9IGNvbGxhdGluZ19zeW1ib2wgKHdjaGFyX3QpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgorKyAgICAgICAgICAgICAgIGNoYXJzZXRbbCttKzVdICA9IGNvbGxhdGluZ19zeW1ib2wgKHdjaGFyX3QpCisrCQkJCQlpZmRlZiBfTElCQyB3ZSB1c2UgdGhlIGluZGV4IGlmCisrCQkJCQlfTkxfQ09MTEFURV9TWU1CX0VYVFJBTUIgaW5zdGVhZCBvZgorKwkJCQkJd2NoYXJfdCBzdHJpbmcuCisrCisrICAgICAgICAgICAgICAgY2hhcnNldFtsK20rNl0gID0gZXF1aXZhbGVuY2VfY2xhc3NlcyAod2NoYXJfdCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKysgICAgICAgICAgICAgICBjaGFyc2V0W2wrbStuKzVdICA9IGVxdWl2YWxlbmNlX2NsYXNzZXMgKHdjaGFyX3QpCisrCQkJCQlpZmRlZiBfTElCQyB3ZSB1c2UgdGhlIGluZGV4IGluCisrCQkJCQlfTkxfQ09MTEFURV9XRUlHSFQgaW5zdGVhZCBvZgorKwkJCQkJd2NoYXJfdCBzdHJpbmcuCisrCisrCSAgICAgICBjaGFyc2V0W2wrbStuKzZdID0gcmFuZ2Vfc3RhcnQKKysJICAgICAgIGNoYXJzZXRbbCttK24rN10gPSByYW5nZV9lbmQKKysJICAgICAgICAgICAgICAgICAgICAgICAuLi4KKysJICAgICAgIGNoYXJzZXRbbCttK24rMm8rNF0gPSByYW5nZV9zdGFydAorKwkgICAgICAgY2hhcnNldFtsK20rbisybys1XSA9IHJhbmdlX2VuZAorKwkJCQkJaWZkZWYgX0xJQkMgd2UgdXNlIHRoZSB2YWx1ZSBsb29rZWQgdXAKKysJCQkJCWluIF9OTF9DT0xMQVRFX0NPTExTRVEgaW5zdGVhZCBvZgorKwkJCQkJd2NoYXJfdCBjaGFyYWN0ZXIuCisrCisrCSAgICAgICBjaGFyc2V0W2wrbStuKzJvKzZdID0gY2hhcgorKwkgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgorKwkgICAgICAgY2hhcnNldFtsK20rbisybytwKzVdID0gY2hhcgorKworKwkgICAgICovCisrCisrCSAgICAvKiBXZSBuZWVkIGF0IGxlYXN0IDYgc3BhY2VzOiB0aGUgb3Bjb2RlLCB0aGUgbGVuZ3RoIG9mCisrICAgICAgICAgICAgICAgY2hhcl9jbGFzc2VzLCB0aGUgbGVuZ3RoIG9mIGNvbGxhdGluZ19zeW1ib2xzLCB0aGUgbGVuZ3RoIG9mCisrICAgICAgICAgICAgICAgZXF1aXZhbGVuY2VfY2xhc3NlcywgdGhlIGxlbmd0aCBvZiBjaGFyX3JhbmdlcywgdGhlIGxlbmd0aCBvZgorKyAgICAgICAgICAgICAgIGNoYXJzLiAgKi8KKysJICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDYpOworKworKwkgICAgLyogU2F2ZSBiIGFzIGxhc3RzdGFydC4gQW5kIFdlIHVzZSBsYXN0c3RhcnQgYXMgdGhlIHBvaW50ZXIKKysJICAgICAgIHRvIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBjaGFyc2V0IGhlcmUuCisrCSAgICAgICBJbiBvdGhlciB3b3JkcywgbGFzdHN0YXJ0W2ldIGluZGljYXRlcyBjaGFyc2V0W2ldLiAgKi8KKysgICAgICAgICAgICBsYXN0c3RhcnQgPSBiOworKworKyAgICAgICAgICAgIC8qIFdlIHRlc3QgYCpwID09ICdeJyB0d2ljZSwgaW5zdGVhZCBvZiB1c2luZyBhbiBpZgorKyAgICAgICAgICAgICAgIHN0YXRlbWVudCwgc28gd2Ugb25seSBuZWVkIG9uZSBCVUZfUFVTSC4gICovCisrICAgICAgICAgICAgQlVGX1BVU0ggKCpwID09ICdeJyA/IGNoYXJzZXRfbm90IDogY2hhcnNldCk7CisrICAgICAgICAgICAgaWYgKCpwID09ICdeJykKKysgICAgICAgICAgICAgIHArKzsKKysKKysgICAgICAgICAgICAvKiBQdXNoIHRoZSBsZW5ndGggb2YgY2hhcl9jbGFzc2VzLCB0aGUgbGVuZ3RoIG9mCisrICAgICAgICAgICAgICAgY29sbGF0aW5nX3N5bWJvbHMsIHRoZSBsZW5ndGggb2YgZXF1aXZhbGVuY2VfY2xhc3NlcywgdGhlCisrICAgICAgICAgICAgICAgbGVuZ3RoIG9mIGNoYXJfcmFuZ2VzIGFuZCB0aGUgbGVuZ3RoIG9mIGNoYXJzLiAgKi8KKysgICAgICAgICAgICBCVUZfUFVTSF8zICgwLCAwLCAwKTsKKysgICAgICAgICAgICBCVUZfUFVTSF8yICgwLCAwKTsKKysKKysgICAgICAgICAgICAvKiBSZW1lbWJlciB0aGUgZmlyc3QgcG9zaXRpb24gaW4gdGhlIGJyYWNrZXQgZXhwcmVzc2lvbi4gICovCisrICAgICAgICAgICAgcDEgPSBwOworKworKyAgICAgICAgICAgIC8qIGNoYXJzZXRfbm90IG1hdGNoZXMgbmV3bGluZSBhY2NvcmRpbmcgdG8gYSBzeW50YXggYml0LiAgKi8KKysgICAgICAgICAgICBpZiAoKHJlX29wY29kZV90KSBiWy02XSA9PSBjaGFyc2V0X25vdAorKyAgICAgICAgICAgICAgICAmJiAoc3ludGF4ICYgUkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FKSkKKysJICAgICAgeworKwkJQlVGX1BVU0goJ1xuJyk7CisrCQlsYXN0c3RhcnRbNV0rKzsgLyogVXBkYXRlIHRoZSBsZW5ndGggb2YgY2hhcmFjdGVycyAgKi8KKysJICAgICAgfQorKworKyAgICAgICAgICAgIC8qIFJlYWQgaW4gY2hhcmFjdGVycyBhbmQgcmFuZ2VzLCBzZXR0aW5nIG1hcCBiaXRzLiAgKi8KKysgICAgICAgICAgICBmb3IgKDs7KQorKyAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VCUkFDSyk7CisrCisrICAgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysKKysgICAgICAgICAgICAgICAgLyogXCBtaWdodCBlc2NhcGUgY2hhcmFjdGVycyBpbnNpZGUgWy4uLl0gYW5kIFteLi4uXS4gICovCisrICAgICAgICAgICAgICAgIGlmICgoc3ludGF4ICYgUkVfQkFDS1NMQVNIX0VTQ0FQRV9JTl9MSVNUUykgJiYgYyA9PSAnXFwnKQorKyAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUVTQ0FQRSk7CisrCisrICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYzEpOworKwkJICAgIEJVRl9QVVNIKGMxKTsKKysJCSAgICBsYXN0c3RhcnRbNV0rKzsgLyogVXBkYXRlIHRoZSBsZW5ndGggb2YgY2hhcnMgICovCisrCQkgICAgcmFuZ2Vfc3RhcnQgPSBjMTsKKysgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgLyogQ291bGQgYmUgdGhlIGVuZCBvZiB0aGUgYnJhY2tldCBleHByZXNzaW9uLiAgSWYgaXQncworKyAgICAgICAgICAgICAgICAgICBub3QgKGkuZS4sIHdoZW4gdGhlIGJyYWNrZXQgZXhwcmVzc2lvbiBpcyBgW10nIHNvCisrICAgICAgICAgICAgICAgICAgIGZhciksIHRoZSAnXScgY2hhcmFjdGVyIGJpdCBnZXRzIHNldCB3YXkgYmVsb3cuICAqLworKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnXScgJiYgcCAhPSBwMSArIDEpCisrICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgICAgIC8qIExvb2sgYWhlYWQgdG8gc2VlIGlmIGl0J3MgYSByYW5nZSB3aGVuIHRoZSBsYXN0IHRoaW5nCisrICAgICAgICAgICAgICAgICAgIHdhcyBhIGNoYXJhY3RlciBjbGFzcy4gICovCisrICAgICAgICAgICAgICAgIGlmIChoYWRfY2hhcl9jbGFzcyAmJiBjID09ICctJyAmJiAqcCAhPSAnXScpCisrICAgICAgICAgICAgICAgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FUkFOR0UpOworKworKyAgICAgICAgICAgICAgICAvKiBMb29rIGFoZWFkIHRvIHNlZSBpZiBpdCdzIGEgcmFuZ2Ugd2hlbiB0aGUgbGFzdCB0aGluZworKyAgICAgICAgICAgICAgICAgICB3YXMgYSBjaGFyYWN0ZXI6IGlmIHRoaXMgaXMgYSBoeXBoZW4gbm90IGF0IHRoZQorKyAgICAgICAgICAgICAgICAgICBiZWdpbm5pbmcgb3IgdGhlIGVuZCBvZiBhIGxpc3QsIHRoZW4gaXQncyB0aGUgcmFuZ2UKKysgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuICAqLworKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnLScKKysgICAgICAgICAgICAgICAgICAgICYmICEocCAtIDIgPj0gcGF0dGVybiAmJiBwWy0yXSA9PSAnWycpCisrICAgICAgICAgICAgICAgICAgICAmJiAhKHAgLSAzID49IHBhdHRlcm4gJiYgcFstM10gPT0gJ1snICYmIHBbLTJdID09ICdeJykKKysgICAgICAgICAgICAgICAgICAgICYmICpwICE9ICddJykKKysgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICByZWdfZXJyY29kZV90IHJldDsKKysJCSAgICAvKiBBbGxvY2F0ZSB0aGUgc3BhY2UgZm9yIHJhbmdlX3N0YXJ0IGFuZCByYW5nZV9lbmQuICAqLworKwkJICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDIpOworKwkJICAgIC8qIFVwZGF0ZSB0aGUgcG9pbnRlciB0byBpbmRpY2F0ZSBlbmQgb2YgYnVmZmVyLiAgKi8KKysgICAgICAgICAgICAgICAgICAgIGIgKz0gMjsKKysgICAgICAgICAgICAgICAgICAgIHJldCA9IHdjc19jb21waWxlX3JhbmdlIChyYW5nZV9zdGFydCwgJnAsIHBlbmQsIHRyYW5zbGF0ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bnRheCwgYiwgbGFzdHN0YXJ0KTsKKysgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gUkVHX05PRVJST1IpIEZSRUVfU1RBQ0tfUkVUVVJOIChyZXQpOworKyAgICAgICAgICAgICAgICAgICAgcmFuZ2Vfc3RhcnQgPSAweGZmZmZmZmZmOworKyAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZSBpZiAocFswXSA9PSAnLScgJiYgcFsxXSAhPSAnXScpCisrICAgICAgICAgICAgICAgICAgeyAvKiBUaGlzIGhhbmRsZXMgcmFuZ2VzIG1hZGUgdXAgb2YgY2hhcmFjdGVycyBvbmx5LiAgKi8KKysgICAgICAgICAgICAgICAgICAgIHJlZ19lcnJjb2RlX3QgcmV0OworKworKwkJICAgIC8qIE1vdmUgcGFzdCB0aGUgYC0nLiAgKi8KKysgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjMSk7CisrCQkgICAgLyogQWxsb2NhdGUgdGhlIHNwYWNlIGZvciByYW5nZV9zdGFydCBhbmQgcmFuZ2VfZW5kLiAgKi8KKysJCSAgICBHRVRfQlVGRkVSX1NQQUNFICgyKTsKKysJCSAgICAvKiBVcGRhdGUgdGhlIHBvaW50ZXIgdG8gaW5kaWNhdGUgZW5kIG9mIGJ1ZmZlci4gICovCisrICAgICAgICAgICAgICAgICAgICBiICs9IDI7CisrICAgICAgICAgICAgICAgICAgICByZXQgPSB3Y3NfY29tcGlsZV9yYW5nZSAoYywgJnAsIHBlbmQsIHRyYW5zbGF0ZSwgc3ludGF4LCBiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdHN0YXJ0KTsKKysgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gUkVHX05PRVJST1IpIEZSRUVfU1RBQ0tfUkVUVVJOIChyZXQpOworKwkJICAgIHJhbmdlX3N0YXJ0ID0gMHhmZmZmZmZmZjsKKysgICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIC8qIFNlZSBpZiB3ZSdyZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgcG9zc2libGUgY2hhcmFjdGVyCisrICAgICAgICAgICAgICAgICAgIGNsYXNzLiAgKi8KKysgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3ludGF4ICYgUkVfQ0hBUl9DTEFTU0VTICYmIGMgPT0gJ1snICYmICpwID09ICc6JykKKysgICAgICAgICAgICAgICAgICB7IC8qIExlYXZlIHJvb20gZm9yIHRoZSBudWxsLiAgKi8KKysgICAgICAgICAgICAgICAgICAgIGNoYXIgc3RyW0NIQVJfQ0xBU1NfTUFYX0xFTkdUSCArIDFdOworKworKyAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKyAgICAgICAgICAgICAgICAgICAgYzEgPSAwOworKworKyAgICAgICAgICAgICAgICAgICAgLyogSWYgcGF0dGVybiBpcyBgW1s6Jy4gICovCisrICAgICAgICAgICAgICAgICAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VCUkFDSyk7CisrCisrICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYyA9PSAnOicgJiYgKnAgPT0gJ10nKSB8fCBwID09IHBlbmQpCisrICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKysJCQlpZiAoYzEgPCBDSEFSX0NMQVNTX01BWF9MRU5HVEgpCisrCQkJICBzdHJbYzErK10gPSBjOworKwkJCWVsc2UKKysJCQkgIC8qIFRoaXMgaXMgaW4gYW55IGNhc2UgYW4gaW52YWxpZCBjbGFzcyBuYW1lLiAgKi8KKysJCQkgIHN0clswXSA9ICdcMCc7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIHN0cltjMV0gPSAnXDAnOworKworKyAgICAgICAgICAgICAgICAgICAgLyogSWYgaXNuJ3QgYSB3b3JkIGJyYWNrZXRlZCBieSBgWzonIGFuZCBgOl0nOgorKyAgICAgICAgICAgICAgICAgICAgICAgdW5kbyB0aGUgZW5kaW5nIGNoYXJhY3RlciwgdGhlIGxldHRlcnMsIGFuZCBsZWF2ZQorKyAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxlYWRpbmcgYDonIGFuZCBgWycgKGJ1dCBzdG9yZSB0aGVtIGFzIGNoYXJhY3RlcikuICAqLworKyAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJzonICYmICpwID09ICddJykKKysgICAgICAgICAgICAgICAgICAgICAgeworKwkJCXdjdHlwZV90IHd0OworKwkJCXVpbnRwdHJfdCBhbGlnbmVkcDsKKysKKysJCQkvKiBRdWVyeSB0aGUgY2hhcmFjdGVyIGNsYXNzIGFzIHdjdHlwZV90LiAgKi8KKysJCQl3dCA9IElTX0NIQVJfQ0xBU1MgKHN0cik7CisrCQkJaWYgKHd0ID09IDApCisrCQkJICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VDVFlQRSk7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhyb3cgYXdheSB0aGUgXSBhdCB0aGUgZW5kIG9mIHRoZSBjaGFyYWN0ZXIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcy4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUJSQUNLKTsKKysKKysJCQkvKiBBbGxvY2F0ZSB0aGUgc3BhY2UgZm9yIGNoYXJhY3RlciBjbGFzcy4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgR0VUX0JVRkZFUl9TUEFDRShDSEFSX0NMQVNTX1NJWkUpOworKwkJCS8qIFVwZGF0ZSB0aGUgcG9pbnRlciB0byBpbmRpY2F0ZSBlbmQgb2YgYnVmZmVyLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICBiICs9IENIQVJfQ0xBU1NfU0laRTsKKysJCQkvKiBNb3ZlIGRhdGEgd2hpY2ggZm9sbG93IGNoYXJhY3RlciBjbGFzc2VzCisrCQkJICAgIG5vdCB0byB2aW9sYXRlIHRoZSBkYXRhLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRfc3BhY2UoQ0hBUl9DTEFTU19TSVpFLAorKwkJCQkgICAgIGxhc3RzdGFydCArIDYgKyBsYXN0c3RhcnRbMV0sCisrCQkJCSAgICAgYiAtIDEpOworKwkJCWFsaWduZWRwID0gKCh1aW50cHRyX3QpKGxhc3RzdGFydCArIDYgKyBsYXN0c3RhcnRbMV0pCisrCQkJCSAgICArIF9fYWxpZ25vZl9fKHdjdHlwZV90KSAtIDEpCisrCQkJICAJICAgICYgfih1aW50cHRyX3QpKF9fYWxpZ25vZl9fKHdjdHlwZV90KSAtIDEpOworKwkJCS8qIFN0b3JlIHRoZSBjaGFyYWN0ZXIgY2xhc3MuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICooKHdjdHlwZV90KilhbGlnbmVkcCkgPSB3dDsKKysgICAgICAgICAgICAgICAgICAgICAgICAvKiBVcGRhdGUgbGVuZ3RoIG9mIGNoYXJfY2xhc3NlcyAqLworKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RzdGFydFsxXSArPSBDSEFSX0NMQVNTX1NJWkU7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgaGFkX2NoYXJfY2xhc3MgPSB0cnVlOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBjMSsrOworKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjMS0tKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUVU5GRVRDSDsKKysgICAgICAgICAgICAgICAgICAgICAgICBCVUZfUFVTSCAoJ1snKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBCVUZfUFVTSCAoJzonKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBsYXN0c3RhcnRbNV0gKz0gMjsgLyogVXBkYXRlIHRoZSBsZW5ndGggb2YgY2hhcmFjdGVycyAgKi8KKysJCQlyYW5nZV9zdGFydCA9ICc6JzsKKysgICAgICAgICAgICAgICAgICAgICAgICBoYWRfY2hhcl9jbGFzcyA9IGZhbHNlOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW50YXggJiBSRV9DSEFSX0NMQVNTRVMgJiYgYyA9PSAnWycgJiYgKCpwID09ICc9JworKwkJCQkJCQkgIHx8ICpwID09ICcuJykpCisrCQkgIHsKKysJCSAgICBDSEFSX1Qgc3RyWzEyOF07CS8qIFNob3VsZCBiZSBsYXJnZSBlbm91Z2guICAqLworKwkJICAgIENIQVJfVCBkZWxpbSA9ICpwOyAvKiAnPScgb3IgJy4nICAqLworKyMgaWZkZWYgX0xJQkMKKysJCSAgICB1aW50MzJfdCBucnVsZXMgPQorKwkJICAgICAgX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKTsKKysjIGVuZGlmCisrCQkgICAgUEFURkVUQ0ggKGMpOworKwkJICAgIGMxID0gMDsKKysKKysJCSAgICAvKiBJZiBwYXR0ZXJuIGlzIGBbWz0nIG9yICdbWy4nLiAgKi8KKysJCSAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VCUkFDSyk7CisrCisrCQkgICAgZm9yICg7OykKKysJCSAgICAgIHsKKysJCQlQQVRGRVRDSCAoYyk7CisrCQkJaWYgKChjID09IGRlbGltICYmICpwID09ICddJykgfHwgcCA9PSBwZW5kKQorKwkJCSAgYnJlYWs7CisrCQkJaWYgKGMxIDwgc2l6ZW9mIChzdHIpIC0gMSkKKysJCQkgIHN0cltjMSsrXSA9IGM7CisrCQkJZWxzZQorKwkJCSAgLyogVGhpcyBpcyBpbiBhbnkgY2FzZSBhbiBpbnZhbGlkIGNsYXNzIG5hbWUuICAqLworKwkJCSAgc3RyWzBdID0gJ1wwJzsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKwkJICAgIHN0cltjMV0gPSAnXDAnOworKworKwkJICAgIGlmIChjID09IGRlbGltICYmICpwID09ICddJyAmJiBzdHJbMF0gIT0gJ1wwJykKKysJCSAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaSwgb2Zmc2V0OworKwkJCS8qIElmIHdlIGhhdmUgbm8gY29sbGF0aW9uIGRhdGEgd2UgdXNlIHRoZSBkZWZhdWx0CisrCQkJICAgY29sbGF0aW9uIGluIHdoaWNoIGVhY2ggY2hhcmFjdGVyIGlzIGluIGEgY2xhc3MKKysJCQkgICBieSBpdHNlbGYuICBJdCBhbHNvIG1lYW5zIHRoYXQgQVNDSUkgaXMgdGhlCisrCQkJICAgY2hhcmFjdGVyIHNldCBhbmQgdGhlcmVmb3JlIHdlIGNhbm5vdCBoYXZlIGNoYXJhY3RlcgorKwkJCSAgIHdpdGggbW9yZSB0aGFuIG9uZSBieXRlIGluIHRoZSBtdWx0aWJ5dGUKKysJCQkgICByZXByZXNlbnRhdGlvbi4gICovCisrCisrICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgbm90IGRlZmluZWQgX0xJQkMsIHdlIHB1c2ggdGhlIG5hbWUgYW5kCisrCQkJICAgYFwwJyBmb3IgdGhlIHNha2Ugb2YgbWF0Y2hpbmcgcGVyZm9ybWFuY2UuICAqLworKwkJCWludCBkYXRhc2l6ZSA9IGMxICsgMTsKKysKKysjIGlmZGVmIF9MSUJDCisrCQkJaW50MzJfdCBpZHggPSAwOworKwkJCWlmIChucnVsZXMgPT0gMCkKKysjIGVuZGlmCisrCQkJICB7CisrCQkJICAgIGlmIChjMSAhPSAxKQorKwkJCSAgICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUNPTExBVEUpOworKwkJCSAgfQorKyMgaWZkZWYgX0xJQkMKKysJCQllbHNlCisrCQkJICB7CisrCQkJICAgIGNvbnN0IGludDMyX3QgKnRhYmxlOworKwkJCSAgICBjb25zdCBpbnQzMl90ICp3ZWlnaHRzOworKwkJCSAgICBjb25zdCBpbnQzMl90ICpleHRyYTsKKysJCQkgICAgY29uc3QgaW50MzJfdCAqaW5kaXJlY3Q7CisrCQkJICAgIHdpbnRfdCAqY3A7CisrCisrCQkJICAgIGlmKGRlbGltID09ICc9JykKKysJCQkgICAgICB7CisrCQkJCS8qIFdlIHB1c2ggdGhlIGluZGV4IGZvciBlcXVpdmFsZW5jZSBjbGFzcy4gICovCisrCQkJCWNwID0gKHdpbnRfdCopc3RyOworKworKwkJCQl0YWJsZSA9IChjb25zdCBpbnQzMl90ICopCisrCQkJCSAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisrCQkJCQkgICAgICAgX05MX0NPTExBVEVfVEFCTEVXQyk7CisrCQkJCXdlaWdodHMgPSAoY29uc3QgaW50MzJfdCAqKQorKwkJCQkgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorKwkJCQkJICAgICAgIF9OTF9DT0xMQVRFX1dFSUdIVFdDKTsKKysJCQkJZXh0cmEgPSAoY29uc3Qgd2ludF90ICopCisrCQkJCSAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisrCQkJCQkgICAgICAgX05MX0NPTExBVEVfRVhUUkFXQyk7CisrCQkJCWluZGlyZWN0ID0gKGNvbnN0IGludDMyX3QgKikKKysJCQkJICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwKKysJCQkJCSAgICAgICBfTkxfQ09MTEFURV9JTkRJUkVDVFdDKTsKKysKKysJCQkJaWR4ID0gRklORElEWCAodGFibGUsIGluZGlyZWN0LCBleHRyYSwgJmNwLCAxKTsKKysJCQkJaWYgKGlkeCA9PSAwIHx8IGNwIDwgKHdpbnRfdCopIHN0ciArIGMxKQorKwkJCQkgIC8qIFRoaXMgaXMgbm8gdmFsaWQgY2hhcmFjdGVyLiAgKi8KKysJCQkJICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VDT0xMQVRFKTsKKysKKysJCQkJc3RyWzBdID0gKHdjaGFyX3QpaWR4OworKwkJCSAgICAgIH0KKysJCQkgICAgZWxzZSAvKiBkZWxpbSA9PSAnLicgKi8KKysJCQkgICAgICB7CisrCQkJCS8qIFdlIHB1c2ggY29sbGF0aW9uIHNlcXVlbmNlIHZhbHVlCisrCQkJCSAgIGZvciBjb2xsYXRpbmcgc3ltYm9sLiAgKi8KKysJCQkJaW50MzJfdCB0YWJsZV9zaXplOworKwkJCQljb25zdCBpbnQzMl90ICpzeW1iX3RhYmxlOworKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpleHRyYTsKKysJCQkJaW50MzJfdCBpZHg7CisrCQkJCWludDMyX3QgZWxlbTsKKysJCQkJaW50MzJfdCBzZWNvbmQ7CisrCQkJCWludDMyX3QgaGFzaDsKKysJCQkJY2hhciBjaGFyX3N0cltjMV07CisrCisrCQkJCS8qIFdlIGhhdmUgdG8gY29udmVydCB0aGUgbmFtZSB0byBhIHNpbmdsZS1ieXRlCisrCQkJCSAgIHN0cmluZy4gIFRoaXMgaXMgcG9zc2libGUgc2luY2UgdGhlIG5hbWVzCisrCQkJCSAgIGNvbnNpc3Qgb2YgQVNDSUkgY2hhcmFjdGVycyBhbmQgdGhlIGludGVybmFsCisrCQkJCSAgIHJlcHJlc2VudGF0aW9uIGlzIFVDUzQuICAqLworKwkJCQlmb3IgKGkgPSAwOyBpIDwgYzE7ICsraSkKKysJCQkJICBjaGFyX3N0cltpXSA9IHN0cltpXTsKKysKKysJCQkJdGFibGVfc2l6ZSA9CisrCQkJCSAgX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwKKysJCQkJCQkgICAgX05MX0NPTExBVEVfU1lNQl9IQVNIX1NJWkVNQik7CisrCQkJCXN5bWJfdGFibGUgPSAoY29uc3QgaW50MzJfdCAqKQorKwkJCQkgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorKwkJCQkJICAgICAgIF9OTF9DT0xMQVRFX1NZTUJfVEFCTEVNQik7CisrCQkJCWV4dHJhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKysJCQkJICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwKKysJCQkJCSAgICAgICBfTkxfQ09MTEFURV9TWU1CX0VYVFJBTUIpOworKworKwkJCQkvKiBMb2NhdGUgdGhlIGNoYXJhY3RlciBpbiB0aGUgaGFzaGluZyB0YWJsZS4gICovCisrCQkJCWhhc2ggPSBlbGVtX2hhc2ggKGNoYXJfc3RyLCBjMSk7CisrCisrCQkJCWlkeCA9IDA7CisrCQkJCWVsZW0gPSBoYXNoICUgdGFibGVfc2l6ZTsKKysJCQkJc2Vjb25kID0gaGFzaCAlICh0YWJsZV9zaXplIC0gMik7CisrCQkJCXdoaWxlIChzeW1iX3RhYmxlWzIgKiBlbGVtXSAhPSAwKQorKwkJCQkgIHsKKysJCQkJICAgIC8qIEZpcnN0IGNvbXBhcmUgdGhlIGhhc2hpbmcgdmFsdWUuICAqLworKwkJCQkgICAgaWYgKHN5bWJfdGFibGVbMiAqIGVsZW1dID09IGhhc2gKKysJCQkJCSYmIGMxID09IGV4dHJhW3N5bWJfdGFibGVbMiAqIGVsZW0gKyAxXV0KKysJCQkJCSYmIG1lbWNtcCAoY2hhcl9zdHIsCisrCQkJCQkJICAgJmV4dHJhW3N5bWJfdGFibGVbMiAqIGVsZW0gKyAxXQorKwkJCQkJCQkgKyAxXSwgYzEpID09IDApCisrCQkJCSAgICAgIHsKKysJCQkJCS8qIFllcCwgdGhpcyBpcyB0aGUgZW50cnkuICAqLworKwkJCQkJaWR4ID0gc3ltYl90YWJsZVsyICogZWxlbSArIDFdOworKwkJCQkJaWR4ICs9IDEgKyBleHRyYVtpZHhdOworKwkJCQkJYnJlYWs7CisrCQkJCSAgICAgIH0KKysKKysJCQkJICAgIC8qIE5leHQgZW50cnkuICAqLworKwkJCQkgICAgZWxlbSArPSBzZWNvbmQ7CisrCQkJCSAgfQorKworKwkJCQlpZiAoc3ltYl90YWJsZVsyICogZWxlbV0gIT0gMCkKKysJCQkJICB7CisrCQkJCSAgICAvKiBDb21wdXRlIHRoZSBpbmRleCBvZiB0aGUgYnl0ZSBzZXF1ZW5jZQorKwkJCQkgICAgICAgaW4gdGhlIHRhYmxlLiAgKi8KKysJCQkJICAgIGlkeCArPSAxICsgZXh0cmFbaWR4XTsKKysJCQkJICAgIC8qIEFkanVzdCBmb3IgdGhlIGFsaWdubWVudC4gICovCisrCQkJCSAgICBpZHggPSAoaWR4ICsgMykgJiB+MzsKKysKKysJCQkJICAgIHN0clswXSA9ICh3Y2hhcl90KSBpZHggKyA0OworKwkJCQkgIH0KKysJCQkJZWxzZSBpZiAoc3ltYl90YWJsZVsyICogZWxlbV0gPT0gMCAmJiBjMSA9PSAxKQorKwkJCQkgIHsKKysJCQkJICAgIC8qIE5vIHZhbGlkIGNoYXJhY3Rlci4gIE1hdGNoIGl0IGFzIGEKKysJCQkJICAgICAgIHNpbmdsZSBieXRlIGNoYXJhY3Rlci4gICovCisrCQkJCSAgICBoYWRfY2hhcl9jbGFzcyA9IGZhbHNlOworKwkJCQkgICAgQlVGX1BVU0goc3RyWzBdKTsKKysJCQkJICAgIC8qIFVwZGF0ZSB0aGUgbGVuZ3RoIG9mIGNoYXJhY3RlcnMgICovCisrCQkJCSAgICBsYXN0c3RhcnRbNV0rKzsKKysJCQkJICAgIHJhbmdlX3N0YXJ0ID0gc3RyWzBdOworKworKwkJCQkgICAgLyogVGhyb3cgYXdheSB0aGUgXSBhdCB0aGUgZW5kIG9mIHRoZQorKwkJCQkgICAgICAgY29sbGF0aW5nIHN5bWJvbC4gICovCisrCQkJCSAgICBQQVRGRVRDSCAoYyk7CisrCQkJCSAgICAvKiBleGl0IGZyb20gdGhlIHN3aXRjaCBibG9jay4gICovCisrCQkJCSAgICBjb250aW51ZTsKKysJCQkJICB9CisrCQkJCWVsc2UKKysJCQkJICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VDT0xMQVRFKTsKKysJCQkgICAgICB9CisrCQkJICAgIGRhdGFzaXplID0gMTsKKysJCQkgIH0KKysjIGVuZGlmCisrICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhyb3cgYXdheSB0aGUgXSBhdCB0aGUgZW5kIG9mIHRoZSBlcXVpdmFsZW5jZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIChvciBjb2xsYXRpbmcgc3ltYm9sKS4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKworKwkJCS8qIEFsbG9jYXRlIHRoZSBzcGFjZSBmb3IgdGhlIGVxdWl2YWxlbmNlIGNsYXNzCisrCQkJICAgKG9yIGNvbGxhdGluZyBzeW1ib2wpIChhbmQgJ1wwJyBpZiBuZWVkZWQpLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICBHRVRfQlVGRkVSX1NQQUNFKGRhdGFzaXplKTsKKysJCQkvKiBVcGRhdGUgdGhlIHBvaW50ZXIgdG8gaW5kaWNhdGUgZW5kIG9mIGJ1ZmZlci4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgYiArPSBkYXRhc2l6ZTsKKysKKysJCQlpZiAoZGVsaW0gPT0gJz0nKQorKwkJCSAgeyAvKiBlcXVpdmFsZW5jZSBjbGFzcyAgKi8KKysJCQkgICAgLyogQ2FsY3VsYXRlIHRoZSBvZmZzZXQgb2YgY2hhcl9yYW5nZXMsCisrCQkJICAgICAgIHdoaWNoIGlzIG5leHQgdG8gZXF1aXZhbGVuY2VfY2xhc3Nlcy4gICovCisrCQkJICAgIG9mZnNldCA9IGxhc3RzdGFydFsxXSArIGxhc3RzdGFydFsyXQorKwkJCSAgICAgICsgbGFzdHN0YXJ0WzNdICs2OworKwkJCSAgICAvKiBJbnNlcnQgc3BhY2UuICAqLworKwkJCSAgICBpbnNlcnRfc3BhY2UoZGF0YXNpemUsIGxhc3RzdGFydCArIG9mZnNldCwgYiAtIDEpOworKworKwkJCSAgICAvKiBXcml0ZSB0aGUgZXF1aXZhbGVuY2VfY2xhc3MgYW5kIFwwLiAgKi8KKysJCQkgICAgZm9yIChpID0gMCA7IGkgPCBkYXRhc2l6ZSA7IGkrKykKKysJCQkgICAgICBsYXN0c3RhcnRbb2Zmc2V0ICsgaV0gPSBzdHJbaV07CisrCisrCQkJICAgIC8qIFVwZGF0ZSB0aGUgbGVuZ3RoIG9mIGVxdWl2YWxlbmNlX2NsYXNzZXMuICAqLworKwkJCSAgICBsYXN0c3RhcnRbM10gKz0gZGF0YXNpemU7CisrCQkJICAgIGhhZF9jaGFyX2NsYXNzID0gdHJ1ZTsKKysJCQkgIH0KKysJCQllbHNlIC8qIGRlbGltID09ICcuJyAqLworKwkJCSAgeyAvKiBjb2xsYXRpbmcgc3ltYm9sICAqLworKwkJCSAgICAvKiBDYWxjdWxhdGUgdGhlIG9mZnNldCBvZiB0aGUgZXF1aXZhbGVuY2VfY2xhc3NlcywKKysJCQkgICAgICAgd2hpY2ggaXMgbmV4dCB0byBjb2xsYXRpbmdfc3ltYm9scy4gICovCisrCQkJICAgIG9mZnNldCA9IGxhc3RzdGFydFsxXSArIGxhc3RzdGFydFsyXSArIDY7CisrCQkJICAgIC8qIEluc2VydCBzcGFjZSBhbmQgd3JpdGUgdGhlIGNvbGxhdGlvbmdfc3ltYm9sCisrCQkJICAgICAgIGFuZCBcMC4gICovCisrCQkJICAgIGluc2VydF9zcGFjZShkYXRhc2l6ZSwgbGFzdHN0YXJ0ICsgb2Zmc2V0LCBiLTEpOworKwkJCSAgICBmb3IgKGkgPSAwIDsgaSA8IGRhdGFzaXplIDsgaSsrKQorKwkJCSAgICAgIGxhc3RzdGFydFtvZmZzZXQgKyBpXSA9IHN0cltpXTsKKysKKysJCQkgICAgLyogSW4gcmVfbWF0Y2hfMl9pbnRlcm5hbCBpZiByYW5nZV9zdGFydCA8IC0xLCB3ZQorKwkJCSAgICAgICBhc3N1bWUgLXJhbmdlX3N0YXJ0IGlzIHRoZSBvZmZzZXQgb2YgdGhlCisrCQkJICAgICAgIGNvbGxhdGluZyBzeW1ib2wgd2hpY2ggaXMgc3BlY2lmaWVkIGFzCisrCQkJICAgICAgIHRoZSBjaGFyYWN0ZXIgb2YgdGhlIHJhbmdlIHN0YXJ0LiAgU28gd2UgYXNzaWduCisrCQkJICAgICAgIC0obGFzdHN0YXJ0WzFdICsgbGFzdHN0YXJ0WzJdICsgNikgdG8KKysJCQkgICAgICAgcmFuZ2Vfc3RhcnQuICAqLworKwkJCSAgICByYW5nZV9zdGFydCA9IC0obGFzdHN0YXJ0WzFdICsgbGFzdHN0YXJ0WzJdICsgNik7CisrCQkJICAgIC8qIFVwZGF0ZSB0aGUgbGVuZ3RoIG9mIGNvbGxhdGluZ19zeW1ib2wuICAqLworKwkJCSAgICBsYXN0c3RhcnRbMl0gKz0gZGF0YXNpemU7CisrCQkJICAgIGhhZF9jaGFyX2NsYXNzID0gZmFsc2U7CisrCQkJICB9CisrCQkgICAgICB9CisrICAgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBjMSsrOworKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjMS0tKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUVU5GRVRDSDsKKysgICAgICAgICAgICAgICAgICAgICAgICBCVUZfUFVTSCAoJ1snKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBCVUZfUFVTSCAoZGVsaW0pOworKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RzdGFydFs1XSArPSAyOyAvKiBVcGRhdGUgdGhlIGxlbmd0aCBvZiBjaGFyYWN0ZXJzICAqLworKwkJCXJhbmdlX3N0YXJ0ID0gZGVsaW07CisrICAgICAgICAgICAgICAgICAgICAgICAgaGFkX2NoYXJfY2xhc3MgPSBmYWxzZTsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKwkJICB9CisrICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBoYWRfY2hhcl9jbGFzcyA9IGZhbHNlOworKwkJICAgIEJVRl9QVVNIKGMpOworKwkJICAgIGxhc3RzdGFydFs1XSsrOyAgLyogVXBkYXRlIHRoZSBsZW5ndGggb2YgY2hhcmFjdGVycyAgKi8KKysJCSAgICByYW5nZV9zdGFydCA9IGM7CisrICAgICAgICAgICAgICAgICAgfQorKwkgICAgICB9CisrCisrI2Vsc2UgLyogQllURSAqLworKyAgICAgICAgICAgIC8qIEVuc3VyZSB0aGF0IHdlIGhhdmUgZW5vdWdoIHNwYWNlIHRvIHB1c2ggYSBjaGFyc2V0OiB0aGUKKysgICAgICAgICAgICAgICBvcGNvZGUsIHRoZSBsZW5ndGggY291bnQsIGFuZCB0aGUgYml0c2V0OyAzNCBieXRlcyBpbiBhbGwuICAqLworKwkgICAgR0VUX0JVRkZFUl9TUEFDRSAoMzQpOworKworKyAgICAgICAgICAgIGxhc3RzdGFydCA9IGI7CisrCisrICAgICAgICAgICAgLyogV2UgdGVzdCBgKnAgPT0gJ14nIHR3aWNlLCBpbnN0ZWFkIG9mIHVzaW5nIGFuIGlmCisrICAgICAgICAgICAgICAgc3RhdGVtZW50LCBzbyB3ZSBvbmx5IG5lZWQgb25lIEJVRl9QVVNILiAgKi8KKysgICAgICAgICAgICBCVUZfUFVTSCAoKnAgPT0gJ14nID8gY2hhcnNldF9ub3QgOiBjaGFyc2V0KTsKKysgICAgICAgICAgICBpZiAoKnAgPT0gJ14nKQorKyAgICAgICAgICAgICAgcCsrOworKworKyAgICAgICAgICAgIC8qIFJlbWVtYmVyIHRoZSBmaXJzdCBwb3NpdGlvbiBpbiB0aGUgYnJhY2tldCBleHByZXNzaW9uLiAgKi8KKysgICAgICAgICAgICBwMSA9IHA7CisrCisrICAgICAgICAgICAgLyogUHVzaCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBiaXRtYXAuICAqLworKyAgICAgICAgICAgIEJVRl9QVVNIICgoMSA8PCBCWVRFV0lEVEgpIC8gQllURVdJRFRIKTsKKysKKysgICAgICAgICAgICAvKiBDbGVhciB0aGUgd2hvbGUgbWFwLiAgKi8KKysgICAgICAgICAgICBiemVybyAoYiwgKDEgPDwgQllURVdJRFRIKSAvIEJZVEVXSURUSCk7CisrCisrICAgICAgICAgICAgLyogY2hhcnNldF9ub3QgbWF0Y2hlcyBuZXdsaW5lIGFjY29yZGluZyB0byBhIHN5bnRheCBiaXQuICAqLworKyAgICAgICAgICAgIGlmICgocmVfb3Bjb2RlX3QpIGJbLTJdID09IGNoYXJzZXRfbm90CisrICAgICAgICAgICAgICAgICYmIChzeW50YXggJiBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUpKQorKyAgICAgICAgICAgICAgU0VUX0xJU1RfQklUICgnXG4nKTsKKysKKysgICAgICAgICAgICAvKiBSZWFkIGluIGNoYXJhY3RlcnMgYW5kIHJhbmdlcywgc2V0dGluZyBtYXAgYml0cy4gICovCisrICAgICAgICAgICAgZm9yICg7OykKKysgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQlJBQ0spOworKworKyAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrCisrICAgICAgICAgICAgICAgIC8qIFwgbWlnaHQgZXNjYXBlIGNoYXJhY3RlcnMgaW5zaWRlIFsuLi5dIGFuZCBbXi4uLl0uICAqLworKyAgICAgICAgICAgICAgICBpZiAoKHN5bnRheCAmIFJFX0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMpICYmIGMgPT0gJ1xcJykKKysgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VFU0NBUEUpOworKworKyAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMxKTsKKysgICAgICAgICAgICAgICAgICAgIFNFVF9MSVNUX0JJVCAoYzEpOworKwkJICAgIHJhbmdlX3N0YXJ0ID0gYzE7CisrICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIC8qIENvdWxkIGJlIHRoZSBlbmQgb2YgdGhlIGJyYWNrZXQgZXhwcmVzc2lvbi4gIElmIGl0J3MKKysgICAgICAgICAgICAgICAgICAgbm90IChpLmUuLCB3aGVuIHRoZSBicmFja2V0IGV4cHJlc3Npb24gaXMgYFtdJyBzbworKyAgICAgICAgICAgICAgICAgICBmYXIpLCB0aGUgJ10nIGNoYXJhY3RlciBiaXQgZ2V0cyBzZXQgd2F5IGJlbG93LiAgKi8KKysgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ10nICYmIHAgIT0gcDEgKyAxKQorKyAgICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgICAgICAvKiBMb29rIGFoZWFkIHRvIHNlZSBpZiBpdCdzIGEgcmFuZ2Ugd2hlbiB0aGUgbGFzdCB0aGluZworKyAgICAgICAgICAgICAgICAgICB3YXMgYSBjaGFyYWN0ZXIgY2xhc3MuICAqLworKyAgICAgICAgICAgICAgICBpZiAoaGFkX2NoYXJfY2xhc3MgJiYgYyA9PSAnLScgJiYgKnAgIT0gJ10nKQorKyAgICAgICAgICAgICAgICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRVJBTkdFKTsKKysKKysgICAgICAgICAgICAgICAgLyogTG9vayBhaGVhZCB0byBzZWUgaWYgaXQncyBhIHJhbmdlIHdoZW4gdGhlIGxhc3QgdGhpbmcKKysgICAgICAgICAgICAgICAgICAgd2FzIGEgY2hhcmFjdGVyOiBpZiB0aGlzIGlzIGEgaHlwaGVuIG5vdCBhdCB0aGUKKysgICAgICAgICAgICAgICAgICAgYmVnaW5uaW5nIG9yIHRoZSBlbmQgb2YgYSBsaXN0LCB0aGVuIGl0J3MgdGhlIHJhbmdlCisrICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLiAgKi8KKysgICAgICAgICAgICAgICAgaWYgKGMgPT0gJy0nCisrICAgICAgICAgICAgICAgICAgICAmJiAhKHAgLSAyID49IHBhdHRlcm4gJiYgcFstMl0gPT0gJ1snKQorKyAgICAgICAgICAgICAgICAgICAgJiYgIShwIC0gMyA+PSBwYXR0ZXJuICYmIHBbLTNdID09ICdbJyAmJiBwWy0yXSA9PSAnXicpCisrICAgICAgICAgICAgICAgICAgICAmJiAqcCAhPSAnXScpCisrICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgcmVnX2VycmNvZGVfdCByZXQKKysgICAgICAgICAgICAgICAgICAgICAgPSBieXRlX2NvbXBpbGVfcmFuZ2UgKHJhbmdlX3N0YXJ0LCAmcCwgcGVuZCwgdHJhbnNsYXRlLAorKwkJCQkJICAgIHN5bnRheCwgYik7CisrICAgICAgICAgICAgICAgICAgICBpZiAocmV0ICE9IFJFR19OT0VSUk9SKSBGUkVFX1NUQUNLX1JFVFVSTiAocmV0KTsKKysJCSAgICByYW5nZV9zdGFydCA9IDB4ZmZmZmZmZmY7CisrICAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICBlbHNlIGlmIChwWzBdID09ICctJyAmJiBwWzFdICE9ICddJykKKysgICAgICAgICAgICAgICAgICB7IC8qIFRoaXMgaGFuZGxlcyByYW5nZXMgbWFkZSB1cCBvZiBjaGFyYWN0ZXJzIG9ubHkuICAqLworKyAgICAgICAgICAgICAgICAgICAgcmVnX2VycmNvZGVfdCByZXQ7CisrCisrCQkgICAgLyogTW92ZSBwYXN0IHRoZSBgLScuICAqLworKyAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMxKTsKKysKKysgICAgICAgICAgICAgICAgICAgIHJldCA9IGJ5dGVfY29tcGlsZV9yYW5nZSAoYywgJnAsIHBlbmQsIHRyYW5zbGF0ZSwgc3ludGF4LCBiKTsKKysgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gUkVHX05PRVJST1IpIEZSRUVfU1RBQ0tfUkVUVVJOIChyZXQpOworKwkJICAgIHJhbmdlX3N0YXJ0ID0gMHhmZmZmZmZmZjsKKysgICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIC8qIFNlZSBpZiB3ZSdyZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgcG9zc2libGUgY2hhcmFjdGVyCisrICAgICAgICAgICAgICAgICAgIGNsYXNzLiAgKi8KKysKKysgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3ludGF4ICYgUkVfQ0hBUl9DTEFTU0VTICYmIGMgPT0gJ1snICYmICpwID09ICc6JykKKysgICAgICAgICAgICAgICAgICB7IC8qIExlYXZlIHJvb20gZm9yIHRoZSBudWxsLiAgKi8KKysgICAgICAgICAgICAgICAgICAgIGNoYXIgc3RyW0NIQVJfQ0xBU1NfTUFYX0xFTkdUSCArIDFdOworKworKyAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKyAgICAgICAgICAgICAgICAgICAgYzEgPSAwOworKworKyAgICAgICAgICAgICAgICAgICAgLyogSWYgcGF0dGVybiBpcyBgW1s6Jy4gICovCisrICAgICAgICAgICAgICAgICAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VCUkFDSyk7CisrCisrICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYyA9PSAnOicgJiYgKnAgPT0gJ10nKSB8fCBwID09IHBlbmQpCisrICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKysJCQlpZiAoKChpbnQpIGMxKSA8IENIQVJfQ0xBU1NfTUFYX0xFTkdUSCkKKysJCQkgIHN0cltjMSsrXSA9IGM7CisrCQkJZWxzZQorKwkJCSAgLyogVGhpcyBpcyBpbiBhbnkgY2FzZSBhbiBpbnZhbGlkIGNsYXNzIG5hbWUuICAqLworKwkJCSAgc3RyWzBdID0gJ1wwJzsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgc3RyW2MxXSA9ICdcMCc7CisrCisrICAgICAgICAgICAgICAgICAgICAvKiBJZiBpc24ndCBhIHdvcmQgYnJhY2tldGVkIGJ5IGBbOicgYW5kIGA6XSc6CisrICAgICAgICAgICAgICAgICAgICAgICB1bmRvIHRoZSBlbmRpbmcgY2hhcmFjdGVyLCB0aGUgbGV0dGVycywgYW5kIGxlYXZlCisrICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGVhZGluZyBgOicgYW5kIGBbJyAoYnV0IHNldCBiaXRzIGZvciB0aGVtKS4gICovCisrICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAnOicgJiYgKnAgPT0gJ10nKQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrIyBpZiBXSURFX0NIQVJfU1VQUE9SVAorKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfbG93ZXIgPSBTVFJFUSAoc3RyLCAibG93ZXIiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX3VwcGVyID0gU1RSRVEgKHN0ciwgInVwcGVyIik7CisrCQkJd2N0eXBlX3Qgd3Q7CisrICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNoOworKworKwkJCXd0ID0gSVNfQ0hBUl9DTEFTUyAoc3RyKTsKKysJCQlpZiAod3QgPT0gMCkKKysJCQkgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUNUWVBFKTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaHJvdyBhd2F5IHRoZSBdIGF0IHRoZSBlbmQgb2YgdGhlIGNoYXJhY3RlcgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQlJBQ0spOworKworKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY2ggPSAwOyBjaCA8IDEgPDwgQllURVdJRFRIOyArK2NoKQorKwkJCSAgeworKyMgIGlmZGVmIF9MSUJDCisrCQkJICAgIGlmIChfX2lzd2N0eXBlIChfX2J0b3djIChjaCksIHd0KSkKKysJCQkgICAgICBTRVRfTElTVF9CSVQgKGNoKTsKKysjICBlbHNlCisrCQkJICAgIGlmIChpc3djdHlwZSAoYnRvd2MgKGNoKSwgd3QpKQorKwkJCSAgICAgIFNFVF9MSVNUX0JJVCAoY2gpOworKyMgIGVuZGlmCisrCisrCQkJICAgIGlmICh0cmFuc2xhdGUgJiYgKGlzX3VwcGVyIHx8IGlzX2xvd2VyKQorKwkJCQkmJiAoSVNVUFBFUiAoY2gpIHx8IElTTE9XRVIgKGNoKSkpCisrCQkJICAgICAgU0VUX0xJU1RfQklUIChjaCk7CisrCQkJICB9CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgaGFkX2NoYXJfY2xhc3MgPSB0cnVlOworKyMgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjaDsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX2FsbnVtID0gU1RSRVEgKHN0ciwgImFsbnVtIik7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc19hbHBoYSA9IFNUUkVRIChzdHIsICJhbHBoYSIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfYmxhbmsgPSBTVFJFUSAoc3RyLCAiYmxhbmsiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX2NudHJsID0gU1RSRVEgKHN0ciwgImNudHJsIik7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc19kaWdpdCA9IFNUUkVRIChzdHIsICJkaWdpdCIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfZ3JhcGggPSBTVFJFUSAoc3RyLCAiZ3JhcGgiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX2xvd2VyID0gU1RSRVEgKHN0ciwgImxvd2VyIik7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc19wcmludCA9IFNUUkVRIChzdHIsICJwcmludCIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfcHVuY3QgPSBTVFJFUSAoc3RyLCAicHVuY3QiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX3NwYWNlID0gU1RSRVEgKHN0ciwgInNwYWNlIik7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc191cHBlciA9IFNUUkVRIChzdHIsICJ1cHBlciIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfeGRpZ2l0ID0gU1RSRVEgKHN0ciwgInhkaWdpdCIpOworKworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghSVNfQ0hBUl9DTEFTUyAoc3RyKSkKKysJCQkgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUNUWVBFKTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaHJvdyBhd2F5IHRoZSBdIGF0IHRoZSBlbmQgb2YgdGhlIGNoYXJhY3RlcgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQlJBQ0spOworKworKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY2ggPSAwOyBjaCA8IDEgPDwgQllURVdJRFRIOyBjaCsrKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworKwkJCSAgICAvKiBUaGlzIHdhcyBzcGxpdCBpbnRvIDMgaWYncyB0bworKwkJCSAgICAgICBhdm9pZCBhbiBhcmJpdHJhcnkgbGltaXQgaW4gc29tZSBjb21waWxlci4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggICAoaXNfYWxudW0gICYmIElTQUxOVU0gKGNoKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChpc19hbHBoYSAgJiYgSVNBTFBIQSAoY2gpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGlzX2JsYW5rICAmJiBJU0JMQU5LIChjaCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaXNfY250cmwgICYmIElTQ05UUkwgKGNoKSkpCisrCQkJICAgICAgU0VUX0xJU1RfQklUIChjaCk7CisrCQkJICAgIGlmICggICAoaXNfZGlnaXQgICYmIElTRElHSVQgKGNoKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChpc19ncmFwaCAgJiYgSVNHUkFQSCAoY2gpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGlzX2xvd2VyICAmJiBJU0xPV0VSIChjaCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaXNfcHJpbnQgICYmIElTUFJJTlQgKGNoKSkpCisrCQkJICAgICAgU0VUX0xJU1RfQklUIChjaCk7CisrCQkJICAgIGlmICggICAoaXNfcHVuY3QgICYmIElTUFVOQ1QgKGNoKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChpc19zcGFjZSAgJiYgSVNTUEFDRSAoY2gpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGlzX3VwcGVyICAmJiBJU1VQUEVSIChjaCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaXNfeGRpZ2l0ICYmIElTWERJR0lUIChjaCkpKQorKwkJCSAgICAgIFNFVF9MSVNUX0JJVCAoY2gpOworKwkJCSAgICBpZiAoICAgdHJhbnNsYXRlICYmIChpc191cHBlciB8fCBpc19sb3dlcikKKysJCQkJJiYgKElTVVBQRVIgKGNoKSB8fCBJU0xPV0VSIChjaCkpKQorKwkJCSAgICAgIFNFVF9MSVNUX0JJVCAoY2gpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgICAgIGhhZF9jaGFyX2NsYXNzID0gdHJ1ZTsKKysjIGVuZGlmCS8qIGxpYmMgfHwgd2N0eXBlLmggKi8KKysgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgYzErKzsKKysgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYzEtLSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVFVORkVUQ0g7CisrICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0xJU1RfQklUICgnWycpOworKyAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9MSVNUX0JJVCAoJzonKTsKKysJCQlyYW5nZV9zdGFydCA9ICc6JzsKKysgICAgICAgICAgICAgICAgICAgICAgICBoYWRfY2hhcl9jbGFzcyA9IGZhbHNlOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW50YXggJiBSRV9DSEFSX0NMQVNTRVMgJiYgYyA9PSAnWycgJiYgKnAgPT0gJz0nKQorKwkJICB7CisrCQkgICAgdW5zaWduZWQgY2hhciBzdHJbTUJfTEVOX01BWCArIDFdOworKyMgaWZkZWYgX0xJQkMKKysJCSAgICB1aW50MzJfdCBucnVsZXMgPQorKwkJICAgICAgX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKTsKKysjIGVuZGlmCisrCisrCQkgICAgUEFURkVUQ0ggKGMpOworKwkJICAgIGMxID0gMDsKKysKKysJCSAgICAvKiBJZiBwYXR0ZXJuIGlzIGBbWz0nLiAgKi8KKysJCSAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VCUkFDSyk7CisrCisrCQkgICAgZm9yICg7OykKKysJCSAgICAgIHsKKysJCQlQQVRGRVRDSCAoYyk7CisrCQkJaWYgKChjID09ICc9JyAmJiAqcCA9PSAnXScpIHx8IHAgPT0gcGVuZCkKKysJCQkgIGJyZWFrOworKwkJCWlmIChjMSA8IE1CX0xFTl9NQVgpCisrCQkJICBzdHJbYzErK10gPSBjOworKwkJCWVsc2UKKysJCQkgIC8qIFRoaXMgaXMgaW4gYW55IGNhc2UgYW4gaW52YWxpZCBjbGFzcyBuYW1lLiAgKi8KKysJCQkgIHN0clswXSA9ICdcMCc7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysJCSAgICBzdHJbYzFdID0gJ1wwJzsKKysKKysJCSAgICBpZiAoYyA9PSAnPScgJiYgKnAgPT0gJ10nICYmIHN0clswXSAhPSAnXDAnKQorKwkJICAgICAgeworKwkJCS8qIElmIHdlIGhhdmUgbm8gY29sbGF0aW9uIGRhdGEgd2UgdXNlIHRoZSBkZWZhdWx0CisrCQkJICAgY29sbGF0aW9uIGluIHdoaWNoIGVhY2ggY2hhcmFjdGVyIGlzIGluIGEgY2xhc3MKKysJCQkgICBieSBpdHNlbGYuICBJdCBhbHNvIG1lYW5zIHRoYXQgQVNDSUkgaXMgdGhlCisrCQkJICAgY2hhcmFjdGVyIHNldCBhbmQgdGhlcmVmb3JlIHdlIGNhbm5vdCBoYXZlIGNoYXJhY3RlcgorKwkJCSAgIHdpdGggbW9yZSB0aGFuIG9uZSBieXRlIGluIHRoZSBtdWx0aWJ5dGUKKysJCQkgICByZXByZXNlbnRhdGlvbi4gICovCisrIyBpZmRlZiBfTElCQworKwkJCWlmIChucnVsZXMgPT0gMCkKKysjIGVuZGlmCisrCQkJICB7CisrCQkJICAgIGlmIChjMSAhPSAxKQorKwkJCSAgICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUNPTExBVEUpOworKworKwkJCSAgICAvKiBUaHJvdyBhd2F5IHRoZSBdIGF0IHRoZSBlbmQgb2YgdGhlIGVxdWl2YWxlbmNlCisrCQkJICAgICAgIGNsYXNzLiAgKi8KKysJCQkgICAgUEFURkVUQ0ggKGMpOworKworKwkJCSAgICAvKiBTZXQgdGhlIGJpdCBmb3IgdGhlIGNoYXJhY3Rlci4gICovCisrCQkJICAgIFNFVF9MSVNUX0JJVCAoc3RyWzBdKTsKKysJCQkgIH0KKysjIGlmZGVmIF9MSUJDCisrCQkJZWxzZQorKwkJCSAgeworKwkJCSAgICAvKiBUcnkgdG8gbWF0Y2ggdGhlIGJ5dGUgc2VxdWVuY2UgaW4gYHN0cicgYWdhaW5zdAorKwkJCSAgICAgICB0aG9zZSBrbm93biB0byB0aGUgY29sbGF0ZSBpbXBsZW1lbnRhdGlvbi4KKysJCQkgICAgICAgRmlyc3QgZmluZCBvdXQgd2hldGhlciB0aGUgYnl0ZXMgaW4gYHN0cicgYXJlCisrCQkJICAgICAgIGFjdHVhbGx5IGZyb20gZXhhY3RseSBvbmUgY2hhcmFjdGVyLiAgKi8KKysJCQkgICAgY29uc3QgaW50MzJfdCAqdGFibGU7CisrCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKndlaWdodHM7CisrCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4dHJhOworKwkJCSAgICBjb25zdCBpbnQzMl90ICppbmRpcmVjdDsKKysJCQkgICAgaW50MzJfdCBpZHg7CisrCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwID0gc3RyOworKwkJCSAgICBpbnQgY2g7CisrCisrCQkJICAgIHRhYmxlID0gKGNvbnN0IGludDMyX3QgKikKKysJCQkgICAgICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfVEFCTEVNQik7CisrCQkJICAgIHdlaWdodHMgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorKwkJCSAgICAgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9XRUlHSFRNQik7CisrCQkJICAgIGV4dHJhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKysJCQkgICAgICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfRVhUUkFNQik7CisrCQkJICAgIGluZGlyZWN0ID0gKGNvbnN0IGludDMyX3QgKikKKysJCQkgICAgICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfSU5ESVJFQ1RNQik7CisrCQkJICAgIGlkeCA9IEZJTkRJRFggKHRhYmxlLCBpbmRpcmVjdCwgZXh0cmEsICZjcCwgMSk7CisrCQkJICAgIGlmIChpZHggPT0gMCB8fCBjcCA8IHN0ciArIGMxKQorKwkJCSAgICAgIC8qIFRoaXMgaXMgbm8gdmFsaWQgY2hhcmFjdGVyLiAgKi8KKysJCQkgICAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VDT0xMQVRFKTsKKysKKysJCQkgICAgLyogVGhyb3cgYXdheSB0aGUgXSBhdCB0aGUgZW5kIG9mIHRoZSBlcXVpdmFsZW5jZQorKwkJCSAgICAgICBjbGFzcy4gICovCisrCQkJICAgIFBBVEZFVENIIChjKTsKKysKKysJCQkgICAgLyogTm93IHdlIGhhdmUgdG8gZ28gdGhyb3VnaHQgdGhlIHdob2xlIHRhYmxlCisrCQkJICAgICAgIGFuZCBmaW5kIGFsbCBjaGFyYWN0ZXJzIHdoaWNoIGhhdmUgdGhlIHNhbWUKKysJCQkgICAgICAgZmlyc3QgbGV2ZWwgd2VpZ2h0LgorKworKwkJCSAgICAgICBYWFggTm90ZSB0aGF0IHRoaXMgaXMgbm90IGVudGlyZWx5IGNvcnJlY3QuCisrCQkJICAgICAgIHdlIHdvdWxkIGhhdmUgdG8gbWF0Y2ggbXVsdGlieXRlIHNlcXVlbmNlcworKwkJCSAgICAgICBidXQgdGhpcyBpcyBub3QgcG9zc2libGUgd2l0aCB0aGUgY3VycmVudAorKwkJCSAgICAgICBpbXBsZW1lbnRhdGlvbi4gICovCisrCQkJICAgIGZvciAoY2ggPSAxOyBjaCA8IDI1NjsgKytjaCkKKysJCQkgICAgICAvKiBYWFggVGhpcyB0ZXN0IHdvdWxkIGhhdmUgdG8gYmUgY2hhbmdlZCBpZiB3ZQorKwkJCQkgd291bGQgYWxsb3cgbWF0Y2hpbmcgbXVsdGlieXRlIHNlcXVlbmNlcy4gICovCisrCQkJICAgICAgaWYgKHRhYmxlW2NoXSA+IDApCisrCQkJCXsKKysJCQkJICBpbnQzMl90IGlkeDIgPSB0YWJsZVtjaF07CisrCQkJCSAgc2l6ZV90IGxlbiA9IHdlaWdodHNbaWR4Ml07CisrCisrCQkJCSAgLyogVGVzdCB3aGV0aGVyIHRoZSBsZW5naHRzIG1hdGNoLiAgKi8KKysJCQkJICBpZiAod2VpZ2h0c1tpZHhdID09IGxlbikKKysJCQkJICAgIHsKKysJCQkJICAgICAgLyogVGhleSBkby4gIE5ldyBjb21wYXJlIHRoZSBieXRlcyBvZgorKwkJCQkJIHRoZSB3ZWlnaHQuICAqLworKwkJCQkgICAgICBzaXplX3QgY250ID0gMDsKKysKKysJCQkJICAgICAgd2hpbGUgKGNudCA8IGxlbgorKwkJCQkJICAgICAmJiAod2VpZ2h0c1tpZHggKyAxICsgY250XQorKwkJCQkJCSA9PSB3ZWlnaHRzW2lkeDIgKyAxICsgY250XSkpCisrCQkJCQkrK2NudDsKKysKKysJCQkJICAgICAgaWYgKGNudCA9PSBsZW4pCisrCQkJCQkvKiBUaGV5IG1hdGNoLiAgTWFyayB0aGUgY2hhcmFjdGVyIGFzCisrCQkJCQkgICBhY2NlcHRhYmxlLiAgKi8KKysJCQkJCVNFVF9MSVNUX0JJVCAoY2gpOworKwkJCQkgICAgfQorKwkJCQl9CisrCQkJICB9CisrIyBlbmRpZgorKwkJCWhhZF9jaGFyX2NsYXNzID0gdHJ1ZTsKKysJCSAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGMxKys7CisrICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGMxLS0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICBQQVRVTkZFVENIOworKyAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9MSVNUX0JJVCAoJ1snKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBTRVRfTElTVF9CSVQgKCc9Jyk7CisrCQkJcmFuZ2Vfc3RhcnQgPSAnPSc7CisrICAgICAgICAgICAgICAgICAgICAgICAgaGFkX2NoYXJfY2xhc3MgPSBmYWxzZTsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKwkJICB9CisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bnRheCAmIFJFX0NIQVJfQ0xBU1NFUyAmJiBjID09ICdbJyAmJiAqcCA9PSAnLicpCisrCQkgIHsKKysJCSAgICB1bnNpZ25lZCBjaGFyIHN0clsxMjhdOwkvKiBTaG91bGQgYmUgbGFyZ2UgZW5vdWdoLiAgKi8KKysjIGlmZGVmIF9MSUJDCisrCQkgICAgdWludDMyX3QgbnJ1bGVzID0KKysJCSAgICAgIF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisrIyBlbmRpZgorKworKwkJICAgIFBBVEZFVENIIChjKTsKKysJCSAgICBjMSA9IDA7CisrCisrCQkgICAgLyogSWYgcGF0dGVybiBpcyBgW1suJy4gICovCisrCQkgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQlJBQ0spOworKworKwkJICAgIGZvciAoOzspCisrCQkgICAgICB7CisrCQkJUEFURkVUQ0ggKGMpOworKwkJCWlmICgoYyA9PSAnLicgJiYgKnAgPT0gJ10nKSB8fCBwID09IHBlbmQpCisrCQkJICBicmVhazsKKysJCQlpZiAoYzEgPCBzaXplb2YgKHN0cikpCisrCQkJICBzdHJbYzErK10gPSBjOworKwkJCWVsc2UKKysJCQkgIC8qIFRoaXMgaXMgaW4gYW55IGNhc2UgYW4gaW52YWxpZCBjbGFzcyBuYW1lLiAgKi8KKysJCQkgIHN0clswXSA9ICdcMCc7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysJCSAgICBzdHJbYzFdID0gJ1wwJzsKKysKKysJCSAgICBpZiAoYyA9PSAnLicgJiYgKnAgPT0gJ10nICYmIHN0clswXSAhPSAnXDAnKQorKwkJICAgICAgeworKwkJCS8qIElmIHdlIGhhdmUgbm8gY29sbGF0aW9uIGRhdGEgd2UgdXNlIHRoZSBkZWZhdWx0CisrCQkJICAgY29sbGF0aW9uIGluIHdoaWNoIGVhY2ggY2hhcmFjdGVyIGlzIHRoZSBuYW1lCisrCQkJICAgZm9yIGl0cyBvd24gY2xhc3Mgd2hpY2ggY29udGFpbnMgb25seSB0aGUgb25lCisrCQkJICAgY2hhcmFjdGVyLiAgSXQgYWxzbyBtZWFucyB0aGF0IEFTQ0lJIGlzIHRoZQorKwkJCSAgIGNoYXJhY3RlciBzZXQgYW5kIHRoZXJlZm9yZSB3ZSBjYW5ub3QgaGF2ZSBjaGFyYWN0ZXIKKysJCQkgICB3aXRoIG1vcmUgdGhhbiBvbmUgYnl0ZSBpbiB0aGUgbXVsdGlieXRlCisrCQkJICAgcmVwcmVzZW50YXRpb24uICAqLworKyMgaWZkZWYgX0xJQkMKKysJCQlpZiAobnJ1bGVzID09IDApCisrIyBlbmRpZgorKwkJCSAgeworKwkJCSAgICBpZiAoYzEgIT0gMSkKKysJCQkgICAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VDT0xMQVRFKTsKKysKKysJCQkgICAgLyogVGhyb3cgYXdheSB0aGUgXSBhdCB0aGUgZW5kIG9mIHRoZSBlcXVpdmFsZW5jZQorKwkJCSAgICAgICBjbGFzcy4gICovCisrCQkJICAgIFBBVEZFVENIIChjKTsKKysKKysJCQkgICAgLyogU2V0IHRoZSBiaXQgZm9yIHRoZSBjaGFyYWN0ZXIuICAqLworKwkJCSAgICBTRVRfTElTVF9CSVQgKHN0clswXSk7CisrCQkJICAgIHJhbmdlX3N0YXJ0ID0gKChjb25zdCB1bnNpZ25lZCBjaGFyICopIHN0cilbMF07CisrCQkJICB9CisrIyBpZmRlZiBfTElCQworKwkJCWVsc2UKKysJCQkgIHsKKysJCQkgICAgLyogVHJ5IHRvIG1hdGNoIHRoZSBieXRlIHNlcXVlbmNlIGluIGBzdHInIGFnYWluc3QKKysJCQkgICAgICAgdGhvc2Uga25vd24gdG8gdGhlIGNvbGxhdGUgaW1wbGVtZW50YXRpb24uCisrCQkJICAgICAgIEZpcnN0IGZpbmQgb3V0IHdoZXRoZXIgdGhlIGJ5dGVzIGluIGBzdHInIGFyZQorKwkJCSAgICAgICBhY3R1YWxseSBmcm9tIGV4YWN0bHkgb25lIGNoYXJhY3Rlci4gICovCisrCQkJICAgIGludDMyX3QgdGFibGVfc2l6ZTsKKysJCQkgICAgY29uc3QgaW50MzJfdCAqc3ltYl90YWJsZTsKKysJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZXh0cmE7CisrCQkJICAgIGludDMyX3QgaWR4OworKwkJCSAgICBpbnQzMl90IGVsZW07CisrCQkJICAgIGludDMyX3Qgc2Vjb25kOworKwkJCSAgICBpbnQzMl90IGhhc2g7CisrCisrCQkJICAgIHRhYmxlX3NpemUgPQorKwkJCSAgICAgIF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsCisrCQkJCQkJX05MX0NPTExBVEVfU1lNQl9IQVNIX1NJWkVNQik7CisrCQkJICAgIHN5bWJfdGFibGUgPSAoY29uc3QgaW50MzJfdCAqKQorKwkJCSAgICAgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorKwkJCQkJICAgX05MX0NPTExBVEVfU1lNQl9UQUJMRU1CKTsKKysJCQkgICAgZXh0cmEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorKwkJCSAgICAgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorKwkJCQkJICAgX05MX0NPTExBVEVfU1lNQl9FWFRSQU1CKTsKKysKKysJCQkgICAgLyogTG9jYXRlIHRoZSBjaGFyYWN0ZXIgaW4gdGhlIGhhc2hpbmcgdGFibGUuICAqLworKwkJCSAgICBoYXNoID0gZWxlbV9oYXNoICgoY29uc3QgY2hhciAqKSBzdHIsIGMxKTsKKysKKysJCQkgICAgaWR4ID0gMDsKKysJCQkgICAgZWxlbSA9IGhhc2ggJSB0YWJsZV9zaXplOworKwkJCSAgICBzZWNvbmQgPSBoYXNoICUgKHRhYmxlX3NpemUgLSAyKTsKKysJCQkgICAgd2hpbGUgKHN5bWJfdGFibGVbMiAqIGVsZW1dICE9IDApCisrCQkJICAgICAgeworKwkJCQkvKiBGaXJzdCBjb21wYXJlIHRoZSBoYXNoaW5nIHZhbHVlLiAgKi8KKysJCQkJaWYgKHN5bWJfdGFibGVbMiAqIGVsZW1dID09IGhhc2gKKysJCQkJICAgICYmIGMxID09IGV4dHJhW3N5bWJfdGFibGVbMiAqIGVsZW0gKyAxXV0KKysJCQkJICAgICYmIG1lbWNtcCAoc3RyLAorKwkJCQkJICAgICAgICZleHRyYVtzeW1iX3RhYmxlWzIgKiBlbGVtICsgMV0KKysJCQkJCQkgICAgICsgMV0sCisrCQkJCQkgICAgICAgYzEpID09IDApCisrCQkJCSAgeworKwkJCQkgICAgLyogWWVwLCB0aGlzIGlzIHRoZSBlbnRyeS4gICovCisrCQkJCSAgICBpZHggPSBzeW1iX3RhYmxlWzIgKiBlbGVtICsgMV07CisrCQkJCSAgICBpZHggKz0gMSArIGV4dHJhW2lkeF07CisrCQkJCSAgICBicmVhazsKKysJCQkJICB9CisrCisrCQkJCS8qIE5leHQgZW50cnkuICAqLworKwkJCQllbGVtICs9IHNlY29uZDsKKysJCQkgICAgICB9CisrCisrCQkJICAgIGlmIChzeW1iX3RhYmxlWzIgKiBlbGVtXSA9PSAwKQorKwkJCSAgICAgIC8qIFRoaXMgaXMgbm8gdmFsaWQgY2hhcmFjdGVyLiAgKi8KKysJCQkgICAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VDT0xMQVRFKTsKKysKKysJCQkgICAgLyogVGhyb3cgYXdheSB0aGUgXSBhdCB0aGUgZW5kIG9mIHRoZSBlcXVpdmFsZW5jZQorKwkJCSAgICAgICBjbGFzcy4gICovCisrCQkJICAgIFBBVEZFVENIIChjKTsKKysKKysJCQkgICAgLyogTm93IGFkZCB0aGUgbXVsdGlieXRlIGNoYXJhY3RlcihzKSB3ZSBmb3VuZAorKwkJCSAgICAgICB0byB0aGUgYWNjZXB0IGxpc3QuCisrCisrCQkJICAgICAgIFhYWCBOb3RlIHRoYXQgdGhpcyBpcyBub3QgZW50aXJlbHkgY29ycmVjdC4KKysJCQkgICAgICAgd2Ugd291bGQgaGF2ZSB0byBtYXRjaCBtdWx0aWJ5dGUgc2VxdWVuY2VzCisrCQkJICAgICAgIGJ1dCB0aGlzIGlzIG5vdCBwb3NzaWJsZSB3aXRoIHRoZSBjdXJyZW50CisrCQkJICAgICAgIGltcGxlbWVudGF0aW9uLiAgQWxzbywgd2UgaGF2ZSB0byBtYXRjaAorKwkJCSAgICAgICBjb2xsYXRpbmcgc3ltYm9scywgd2hpY2ggZXhwYW5kIHRvIG1vcmUgdGhhbgorKwkJCSAgICAgICBvbmUgZmlsZSwgYXMgYSB3aG9sZSBhbmQgbm90IGFsbG93IHRoZQorKwkJCSAgICAgICBpbmRpdmlkdWFsIGJ5dGVzLiAgKi8KKysJCQkgICAgYzEgPSBleHRyYVtpZHgrK107CisrCQkJICAgIGlmIChjMSA9PSAxKQorKwkJCSAgICAgIHJhbmdlX3N0YXJ0ID0gZXh0cmFbaWR4XTsKKysJCQkgICAgd2hpbGUgKGMxLS0gPiAwKQorKwkJCSAgICAgIHsKKysJCQkJU0VUX0xJU1RfQklUIChleHRyYVtpZHhdKTsKKysJCQkJKytpZHg7CisrCQkJICAgICAgfQorKwkJCSAgfQorKyMgZW5kaWYKKysJCQloYWRfY2hhcl9jbGFzcyA9IGZhbHNlOworKwkJICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgYzErKzsKKysgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYzEtLSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVFVORkVUQ0g7CisrICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0xJU1RfQklUICgnWycpOworKyAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9MSVNUX0JJVCAoJy4nKTsKKysJCQlyYW5nZV9zdGFydCA9ICcuJzsKKysgICAgICAgICAgICAgICAgICAgICAgICBoYWRfY2hhcl9jbGFzcyA9IGZhbHNlOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrCQkgIH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGhhZF9jaGFyX2NsYXNzID0gZmFsc2U7CisrICAgICAgICAgICAgICAgICAgICBTRVRfTElTVF9CSVQgKGMpOworKwkJICAgIHJhbmdlX3N0YXJ0ID0gYzsKKysgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgLyogRGlzY2FyZCBhbnkgKG5vbiltYXRjaGluZyBsaXN0IGJ5dGVzIHRoYXQgYXJlIGFsbCAwIGF0IHRoZQorKyAgICAgICAgICAgICAgIGVuZCBvZiB0aGUgbWFwLiAgRGVjcmVhc2UgdGhlIG1hcC1sZW5ndGggYnl0ZSB0b28uICAqLworKyAgICAgICAgICAgIHdoaWxlICgoaW50KSBiWy0xXSA+IDAgJiYgYltiWy0xXSAtIDFdID09IDApCisrICAgICAgICAgICAgICBiWy0xXS0tOworKyAgICAgICAgICAgIGIgKz0gYlstMV07CisrI2VuZGlmIC8qIFdDSEFSICovCisrICAgICAgICAgIH0KKysgICAgICAgICAgYnJlYWs7CisrCisrCisrCWNhc2UgJygnOgorKyAgICAgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fQktfUEFSRU5TKQorKyAgICAgICAgICAgIGdvdG8gaGFuZGxlX29wZW47CisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKworKworKyAgICAgICAgY2FzZSAnKSc6CisrICAgICAgICAgIGlmIChzeW50YXggJiBSRV9OT19CS19QQVJFTlMpCisrICAgICAgICAgICAgZ290byBoYW5kbGVfY2xvc2U7CisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKworKworKyAgICAgICAgY2FzZSAnXG4nOgorKyAgICAgICAgICBpZiAoc3ludGF4ICYgUkVfTkVXTElORV9BTFQpCisrICAgICAgICAgICAgZ290byBoYW5kbGVfYWx0OworKyAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysKKysKKysJY2FzZSAnfCc6CisrICAgICAgICAgIGlmIChzeW50YXggJiBSRV9OT19CS19WQkFSKQorKyAgICAgICAgICAgIGdvdG8gaGFuZGxlX2FsdDsKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrCisrCisrICAgICAgICBjYXNlICd7JzoKKysgICAgICAgICAgIGlmIChzeW50YXggJiBSRV9JTlRFUlZBTFMgJiYgc3ludGF4ICYgUkVfTk9fQktfQlJBQ0VTKQorKyAgICAgICAgICAgICBnb3RvIGhhbmRsZV9pbnRlcnZhbDsKKysgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysKKysKKysgICAgICAgIGNhc2UgJ1xcJzoKKysgICAgICAgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FRVNDQVBFKTsKKysKKysgICAgICAgICAgLyogRG8gbm90IHRyYW5zbGF0ZSB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBcLCBzbyB0aGF0IHdlIGNhbgorKyAgICAgICAgICAgICBkaXN0aW5ndWlzaCwgZS5nLiwgXEIgZnJvbSBcYiwgZXZlbiBpZiB3ZSBub3JtYWxseSB3b3VsZAorKyAgICAgICAgICAgICB0cmFuc2xhdGUsIGUuZy4sIEIgdG8gYi4gICovCisrICAgICAgICAgIFBBVEZFVENIX1JBVyAoYyk7CisrCisrICAgICAgICAgIHN3aXRjaCAoYykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgY2FzZSAnKCc6CisrICAgICAgICAgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fQktfUEFSRU5TKQorKyAgICAgICAgICAgICAgICBnb3RvIG5vcm1hbF9iYWNrc2xhc2g7CisrCisrICAgICAgICAgICAgaGFuZGxlX29wZW46CisrICAgICAgICAgICAgICBidWZwLT5yZV9uc3ViKys7CisrICAgICAgICAgICAgICByZWdudW0rKzsKKysKKysgICAgICAgICAgICAgIGlmIChDT01QSUxFX1NUQUNLX0ZVTEwpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICBSRVRBTExPQyAoY29tcGlsZV9zdGFjay5zdGFjaywgY29tcGlsZV9zdGFjay5zaXplIDw8IDEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVfc3RhY2tfZWx0X3QpOworKyAgICAgICAgICAgICAgICAgIGlmIChjb21waWxlX3N0YWNrLnN0YWNrID09IE5VTEwpIHJldHVybiBSRUdfRVNQQUNFOworKworKyAgICAgICAgICAgICAgICAgIGNvbXBpbGVfc3RhY2suc2l6ZSA8PD0gMTsKKysgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgLyogVGhlc2UgYXJlIHRoZSB2YWx1ZXMgdG8gcmVzdG9yZSB3aGVuIHdlIGhpdCBlbmQgb2YgdGhpcworKyAgICAgICAgICAgICAgICAgZ3JvdXAuICBUaGV5IGFyZSBhbGwgcmVsYXRpdmUgb2Zmc2V0cywgc28gdGhhdCBpZiB0aGUKKysgICAgICAgICAgICAgICAgIHdob2xlIHBhdHRlcm4gbW92ZXMgYmVjYXVzZSBvZiByZWFsbG9jLCB0aGV5IHdpbGwgc3RpbGwKKysgICAgICAgICAgICAgICAgIGJlIHZhbGlkLiAgKi8KKysgICAgICAgICAgICAgIENPTVBJTEVfU1RBQ0tfVE9QLmJlZ2FsdF9vZmZzZXQgPSBiZWdhbHQgLSBDT01QSUxFRF9CVUZGRVJfVkFSOworKyAgICAgICAgICAgICAgQ09NUElMRV9TVEFDS19UT1AuZml4dXBfYWx0X2p1bXAKKysgICAgICAgICAgICAgICAgPSBmaXh1cF9hbHRfanVtcCA/IGZpeHVwX2FsdF9qdW1wIC0gQ09NUElMRURfQlVGRkVSX1ZBUiArIDEgOiAwOworKyAgICAgICAgICAgICAgQ09NUElMRV9TVEFDS19UT1AubGFzdHN0YXJ0X29mZnNldCA9IGIgLSBDT01QSUxFRF9CVUZGRVJfVkFSOworKyAgICAgICAgICAgICAgQ09NUElMRV9TVEFDS19UT1AucmVnbnVtID0gcmVnbnVtOworKworKyAgICAgICAgICAgICAgLyogV2Ugd2lsbCBldmVudHVhbGx5IHJlcGxhY2UgdGhlIDAgd2l0aCB0aGUgbnVtYmVyIG9mCisrICAgICAgICAgICAgICAgICBncm91cHMgaW5uZXIgdG8gdGhpcyBvbmUuICBCdXQgZG8gbm90IHB1c2ggYQorKyAgICAgICAgICAgICAgICAgc3RhcnRfbWVtb3J5IGZvciBncm91cHMgYmV5b25kIHRoZSBsYXN0IG9uZSB3ZSBjYW4KKysgICAgICAgICAgICAgICAgIHJlcHJlc2VudCBpbiB0aGUgY29tcGlsZWQgcGF0dGVybi4gICovCisrICAgICAgICAgICAgICBpZiAocmVnbnVtIDw9IE1BWF9SRUdOVU0pCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICBDT01QSUxFX1NUQUNLX1RPUC5pbm5lcl9ncm91cF9vZmZzZXQgPSBiCisrCQkgICAgLSBDT01QSUxFRF9CVUZGRVJfVkFSICsgMjsKKysgICAgICAgICAgICAgICAgICBCVUZfUFVTSF8zIChzdGFydF9tZW1vcnksIHJlZ251bSwgMCk7CisrICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgIGNvbXBpbGVfc3RhY2suYXZhaWwrKzsKKysKKysgICAgICAgICAgICAgIGZpeHVwX2FsdF9qdW1wID0gMDsKKysgICAgICAgICAgICAgIGxhc3RzdGFydCA9IDA7CisrICAgICAgICAgICAgICBiZWdhbHQgPSBiOworKwkgICAgICAvKiBJZiB3ZSd2ZSByZWFjaGVkIE1BWF9SRUdOVU0gZ3JvdXBzLCB0aGVuIHRoaXMgb3BlbgorKwkJIHdvbid0IGFjdHVhbGx5IGdlbmVyYXRlIGFueSBjb2RlLCBzbyB3ZSdsbCBoYXZlIHRvCisrCQkgY2xlYXIgcGVuZGluZ19leGFjdCBleHBsaWNpdGx5LiAgKi8KKysJICAgICAgcGVuZGluZ19leGFjdCA9IDA7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysKKysgICAgICAgICAgICBjYXNlICcpJzoKKysgICAgICAgICAgICAgIGlmIChzeW50YXggJiBSRV9OT19CS19QQVJFTlMpIGdvdG8gbm9ybWFsX2JhY2tzbGFzaDsKKysKKysgICAgICAgICAgICAgIGlmIChDT01QSUxFX1NUQUNLX0VNUFRZKQorKwkJeworKwkJICBpZiAoc3ludGF4ICYgUkVfVU5NQVRDSEVEX1JJR0hUX1BBUkVOX09SRCkKKysJCSAgICBnb3RvIG5vcm1hbF9iYWNrc2xhc2g7CisrCQkgIGVsc2UKKysJCSAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VSUEFSRU4pOworKwkJfQorKworKyAgICAgICAgICAgIGhhbmRsZV9jbG9zZToKKysgICAgICAgICAgICAgIGlmIChmaXh1cF9hbHRfanVtcCkKKysgICAgICAgICAgICAgICAgeyAvKiBQdXNoIGEgZHVtbXkgZmFpbHVyZSBwb2ludCBhdCB0aGUgZW5kIG9mIHRoZQorKyAgICAgICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlIGZvciBhIHBvc3NpYmxlIGZ1dHVyZQorKyAgICAgICAgICAgICAgICAgICAgIGBwb3BfZmFpbHVyZV9qdW1wJyB0byBwb3AuICBTZWUgY29tbWVudHMgYXQKKysgICAgICAgICAgICAgICAgICAgICBgcHVzaF9kdW1teV9mYWlsdXJlJyBpbiBgcmVfbWF0Y2hfMicuICAqLworKyAgICAgICAgICAgICAgICAgIEJVRl9QVVNIIChwdXNoX2R1bW15X2ZhaWx1cmUpOworKworKyAgICAgICAgICAgICAgICAgIC8qIFdlIGFsbG9jYXRlZCBzcGFjZSBmb3IgdGhpcyBqdW1wIHdoZW4gd2UgYXNzaWduZWQKKysgICAgICAgICAgICAgICAgICAgICB0byBgZml4dXBfYWx0X2p1bXAnLCBpbiB0aGUgYGhhbmRsZV9hbHQnIGNhc2UgYmVsb3cuICAqLworKyAgICAgICAgICAgICAgICAgIFNUT1JFX0pVTVAgKGp1bXBfcGFzdF9hbHQsIGZpeHVwX2FsdF9qdW1wLCBiIC0gMSk7CisrICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgIC8qIFNlZSBzaW1pbGFyIGNvZGUgZm9yIGJhY2tzbGFzaGVkIGxlZnQgcGFyZW4gYWJvdmUuICAqLworKyAgICAgICAgICAgICAgaWYgKENPTVBJTEVfU1RBQ0tfRU1QVFkpCisrCQl7CisrCQkgIGlmIChzeW50YXggJiBSRV9VTk1BVENIRURfUklHSFRfUEFSRU5fT1JEKQorKwkJICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrCQkgIGVsc2UKKysJCSAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VSUEFSRU4pOworKwkJfQorKworKyAgICAgICAgICAgICAgLyogU2luY2Ugd2UganVzdCBjaGVja2VkIGZvciBhbiBlbXB0eSBzdGFjayBhYm92ZSwgdGhpcworKyAgICAgICAgICAgICAgICAgYGBjYW4ndCBoYXBwZW4nJy4gICovCisrICAgICAgICAgICAgICBhc3NlcnQgKGNvbXBpbGVfc3RhY2suYXZhaWwgIT0gMCk7CisrICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIC8qIFdlIGRvbid0IGp1c3Qgd2FudCB0byByZXN0b3JlIGludG8gYHJlZ251bScsIGJlY2F1c2UKKysgICAgICAgICAgICAgICAgICAgbGF0ZXIgZ3JvdXBzIHNob3VsZCBjb250aW51ZSB0byBiZSBudW1iZXJlZCBoaWdoZXIsCisrICAgICAgICAgICAgICAgICAgIGFzIGluIGAoYWIpYyhkZSknIC0tIHRoZSBzZWNvbmQgZ3JvdXAgaXMgIzIuICAqLworKyAgICAgICAgICAgICAgICByZWdudW1fdCB0aGlzX2dyb3VwX3JlZ251bTsKKysKKysgICAgICAgICAgICAgICAgY29tcGlsZV9zdGFjay5hdmFpbC0tOworKyAgICAgICAgICAgICAgICBiZWdhbHQgPSBDT01QSUxFRF9CVUZGRVJfVkFSICsgQ09NUElMRV9TVEFDS19UT1AuYmVnYWx0X29mZnNldDsKKysgICAgICAgICAgICAgICAgZml4dXBfYWx0X2p1bXAKKysgICAgICAgICAgICAgICAgICA9IENPTVBJTEVfU1RBQ0tfVE9QLmZpeHVwX2FsdF9qdW1wCisrICAgICAgICAgICAgICAgICAgICA/IENPTVBJTEVEX0JVRkZFUl9WQVIgKyBDT01QSUxFX1NUQUNLX1RPUC5maXh1cF9hbHRfanVtcCAtIDEKKysgICAgICAgICAgICAgICAgICAgIDogMDsKKysgICAgICAgICAgICAgICAgbGFzdHN0YXJ0ID0gQ09NUElMRURfQlVGRkVSX1ZBUiArIENPTVBJTEVfU1RBQ0tfVE9QLmxhc3RzdGFydF9vZmZzZXQ7CisrICAgICAgICAgICAgICAgIHRoaXNfZ3JvdXBfcmVnbnVtID0gQ09NUElMRV9TVEFDS19UT1AucmVnbnVtOworKwkJLyogSWYgd2UndmUgcmVhY2hlZCBNQVhfUkVHTlVNIGdyb3VwcywgdGhlbiB0aGlzIG9wZW4KKysJCSAgIHdvbid0IGFjdHVhbGx5IGdlbmVyYXRlIGFueSBjb2RlLCBzbyB3ZSdsbCBoYXZlIHRvCisrCQkgICBjbGVhciBwZW5kaW5nX2V4YWN0IGV4cGxpY2l0bHkuICAqLworKwkJcGVuZGluZ19leGFjdCA9IDA7CisrCisrICAgICAgICAgICAgICAgIC8qIFdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGdyb3VwLCBzbyBub3cgd2Uga25vdyBob3cgbWFueQorKyAgICAgICAgICAgICAgICAgICBncm91cHMgd2VyZSBpbnNpZGUgdGhpcyBvbmUuICAqLworKyAgICAgICAgICAgICAgICBpZiAodGhpc19ncm91cF9yZWdudW0gPD0gTUFYX1JFR05VTSkKKysgICAgICAgICAgICAgICAgICB7CisrCQkgICAgVUNIQVJfVCAqaW5uZXJfZ3JvdXBfbG9jCisrICAgICAgICAgICAgICAgICAgICAgID0gQ09NUElMRURfQlVGRkVSX1ZBUiArIENPTVBJTEVfU1RBQ0tfVE9QLmlubmVyX2dyb3VwX29mZnNldDsKKysKKysgICAgICAgICAgICAgICAgICAgICppbm5lcl9ncm91cF9sb2MgPSByZWdudW0gLSB0aGlzX2dyb3VwX3JlZ251bTsKKysgICAgICAgICAgICAgICAgICAgIEJVRl9QVVNIXzMgKHN0b3BfbWVtb3J5LCB0aGlzX2dyb3VwX3JlZ251bSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ251bSAtIHRoaXNfZ3JvdXBfcmVnbnVtKTsKKysgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICBicmVhazsKKysKKysKKysgICAgICAgICAgICBjYXNlICd8JzoJCQkJCS8qIGBcfCcuICAqLworKyAgICAgICAgICAgICAgaWYgKHN5bnRheCAmIFJFX0xJTUlURURfT1BTIHx8IHN5bnRheCAmIFJFX05PX0JLX1ZCQVIpCisrICAgICAgICAgICAgICAgIGdvdG8gbm9ybWFsX2JhY2tzbGFzaDsKKysgICAgICAgICAgICBoYW5kbGVfYWx0OgorKyAgICAgICAgICAgICAgaWYgKHN5bnRheCAmIFJFX0xJTUlURURfT1BTKQorKyAgICAgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKworKyAgICAgICAgICAgICAgLyogSW5zZXJ0IGJlZm9yZSB0aGUgcHJldmlvdXMgYWx0ZXJuYXRpdmUgYSBqdW1wIHdoaWNoCisrICAgICAgICAgICAgICAgICBqdW1wcyB0byB0aGlzIGFsdGVybmF0aXZlIGlmIHRoZSBmb3JtZXIgZmFpbHMuICAqLworKyAgICAgICAgICAgICAgR0VUX0JVRkZFUl9TUEFDRSAoMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyAgICAgICAgICAgICAgSU5TRVJUX0pVTVAgKG9uX2ZhaWx1cmVfanVtcCwgYmVnYWx0LAorKwkJCSAgIGIgKyAyICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyAgICAgICAgICAgICAgcGVuZGluZ19leGFjdCA9IDA7CisrICAgICAgICAgICAgICBiICs9IDEgKyBPRkZTRVRfQUREUkVTU19TSVpFOworKworKyAgICAgICAgICAgICAgLyogVGhlIGFsdGVybmF0aXZlIGJlZm9yZSB0aGlzIG9uZSBoYXMgYSBqdW1wIGFmdGVyIGl0CisrICAgICAgICAgICAgICAgICB3aGljaCBnZXRzIGV4ZWN1dGVkIGlmIGl0IGdldHMgbWF0Y2hlZC4gIEFkanVzdCB0aGF0CisrICAgICAgICAgICAgICAgICBqdW1wIHNvIGl0IHdpbGwganVtcCB0byB0aGlzIGFsdGVybmF0aXZlJ3MgYW5hbG9nb3VzCisrICAgICAgICAgICAgICAgICBqdW1wIChwdXQgaW4gYmVsb3csIHdoaWNoIGluIHR1cm4gd2lsbCBqdW1wIHRvIHRoZSBuZXh0CisrICAgICAgICAgICAgICAgICAoaWYgYW55KSBhbHRlcm5hdGl2ZSdzIHN1Y2gganVtcCwgZXRjLikuICBUaGUgbGFzdCBzdWNoCisrICAgICAgICAgICAgICAgICBqdW1wIGp1bXBzIHRvIHRoZSBjb3JyZWN0IGZpbmFsIGRlc3RpbmF0aW9uLiAgQSBwaWN0dXJlOgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgX19fX18gX19fX18KKysgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8IHwgICB8CisrICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgdiB8ICAgdgorKyAgICAgICAgICAgICAgICAgICAgICAgICBhIHwgYiAgIHwgYworKworKyAgICAgICAgICAgICAgICAgSWYgd2UgYXJlIGF0IGBiJywgdGhlbiBmaXh1cF9hbHRfanVtcCByaWdodCBub3cgcG9pbnRzIHRvIGEKKysgICAgICAgICAgICAgICAgIHRocmVlLWJ5dGUgc3BhY2UgYWZ0ZXIgYGEnLiAgV2UnbGwgcHV0IGluIHRoZSBqdW1wLCBzZXQKKysgICAgICAgICAgICAgICAgIGZpeHVwX2FsdF9qdW1wIHRvIHJpZ2h0IGFmdGVyIGBiJywgYW5kIGxlYXZlIGJlaGluZCB0aHJlZQorKyAgICAgICAgICAgICAgICAgYnl0ZXMgd2hpY2ggd2UnbGwgZmlsbCBpbiB3aGVuIHdlIGdldCB0byBhZnRlciBgYycuICAqLworKworKyAgICAgICAgICAgICAgaWYgKGZpeHVwX2FsdF9qdW1wKQorKyAgICAgICAgICAgICAgICBTVE9SRV9KVU1QIChqdW1wX3Bhc3RfYWx0LCBmaXh1cF9hbHRfanVtcCwgYik7CisrCisrICAgICAgICAgICAgICAvKiBNYXJrIGFuZCBsZWF2ZSBzcGFjZSBmb3IgYSBqdW1wIGFmdGVyIHRoaXMgYWx0ZXJuYXRpdmUsCisrICAgICAgICAgICAgICAgICB0byBiZSBmaWxsZWQgaW4gbGF0ZXIgZWl0aGVyIGJ5IG5leHQgYWx0ZXJuYXRpdmUgb3IKKysgICAgICAgICAgICAgICAgIHdoZW4ga25vdyB3ZSdyZSBhdCB0aGUgZW5kIG9mIGEgc2VyaWVzIG9mIGFsdGVybmF0aXZlcy4gICovCisrICAgICAgICAgICAgICBmaXh1cF9hbHRfanVtcCA9IGI7CisrICAgICAgICAgICAgICBHRVRfQlVGRkVSX1NQQUNFICgxICsgT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrICAgICAgICAgICAgICBiICs9IDEgKyBPRkZTRVRfQUREUkVTU19TSVpFOworKworKyAgICAgICAgICAgICAgbGFzdHN0YXJ0ID0gMDsKKysgICAgICAgICAgICAgIGJlZ2FsdCA9IGI7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysKKysgICAgICAgICAgICBjYXNlICd7JzoKKysgICAgICAgICAgICAgIC8qIElmIFx7IGlzIGEgbGl0ZXJhbC4gICovCisrICAgICAgICAgICAgICBpZiAoIShzeW50YXggJiBSRV9JTlRFUlZBTFMpCisrICAgICAgICAgICAgICAgICAgICAgLyogSWYgd2UncmUgYXQgYFx7JyBhbmQgaXQncyBub3QgdGhlIG9wZW4taW50ZXJ2YWwKKysgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvci4gICovCisrCQkgIHx8IChzeW50YXggJiBSRV9OT19CS19CUkFDRVMpKQorKyAgICAgICAgICAgICAgICBnb3RvIG5vcm1hbF9iYWNrc2xhc2g7CisrCisrICAgICAgICAgICAgaGFuZGxlX2ludGVydmFsOgorKyAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAvKiBJZiBnb3QgaGVyZSwgdGhlbiB0aGUgc3ludGF4IGFsbG93cyBpbnRlcnZhbHMuICAqLworKworKyAgICAgICAgICAgICAgICAvKiBBdCBsZWFzdCAobW9zdCkgdGhpcyBtYW55IG1hdGNoZXMgbXVzdCBiZSBtYWRlLiAgKi8KKysgICAgICAgICAgICAgICAgaW50IGxvd2VyX2JvdW5kID0gLTEsIHVwcGVyX2JvdW5kID0gLTE7CisrCisrCQkvKiBQbGFjZSBpbiB0aGUgdW5jb21waWxlZCBwYXR0ZXJuIChpLmUuLCBqdXN0IGFmdGVyCisrCQkgICB0aGUgJ3snKSB0byBnbyBiYWNrIHRvIGlmIHRoZSBpbnRlcnZhbCBpcyBpbnZhbGlkLiAgKi8KKysJCWNvbnN0IENIQVJfVCAqYmVnX2ludGVydmFsID0gcDsKKysKKysgICAgICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkKKysJCSAgZ290byBpbnZhbGlkX2ludGVydmFsOworKworKyAgICAgICAgICAgICAgICBHRVRfVU5TSUdORURfTlVNQkVSIChsb3dlcl9ib3VuZCk7CisrCisrICAgICAgICAgICAgICAgIGlmIChjID09ICcsJykKKysgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBHRVRfVU5TSUdORURfTlVNQkVSICh1cHBlcl9ib3VuZCk7CisrCQkgICAgaWYgKHVwcGVyX2JvdW5kIDwgMCkKKysJCSAgICAgIHVwcGVyX2JvdW5kID0gUkVfRFVQX01BWDsKKysgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAvKiBJbnRlcnZhbCBzdWNoIGFzIGB7MX0nID0+IG1hdGNoIGV4YWN0bHkgb25jZS4gKi8KKysgICAgICAgICAgICAgICAgICB1cHBlcl9ib3VuZCA9IGxvd2VyX2JvdW5kOworKworKyAgICAgICAgICAgICAgICBpZiAoISAoMCA8PSBsb3dlcl9ib3VuZCAmJiBsb3dlcl9ib3VuZCA8PSB1cHBlcl9ib3VuZCkpCisrCQkgIGdvdG8gaW52YWxpZF9pbnRlcnZhbDsKKysKKysgICAgICAgICAgICAgICAgaWYgKCEoc3ludGF4ICYgUkVfTk9fQktfQlJBQ0VTKSkKKysgICAgICAgICAgICAgICAgICB7CisrCQkgICAgaWYgKGMgIT0gJ1xcJyB8fCBwID09IHBlbmQpCisrCQkgICAgICBnb3RvIGludmFsaWRfaW50ZXJ2YWw7CisrICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrICAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICBpZiAoYyAhPSAnfScpCisrCQkgIGdvdG8gaW52YWxpZF9pbnRlcnZhbDsKKysKKysgICAgICAgICAgICAgICAgLyogSWYgaXQncyBpbnZhbGlkIHRvIGhhdmUgbm8gcHJlY2VkaW5nIHJlLiAgKi8KKysgICAgICAgICAgICAgICAgaWYgKCFsYXN0c3RhcnQpCisrICAgICAgICAgICAgICAgICAgeworKwkJICAgIGlmIChzeW50YXggJiBSRV9DT05URVhUX0lOVkFMSURfT1BTCisrCQkJJiYgIShzeW50YXggJiBSRV9JTlZBTElEX0lOVEVSVkFMX09SRCkpCisrICAgICAgICAgICAgICAgICAgICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfQkFEUlBUKTsKKysgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bnRheCAmIFJFX0NPTlRFWFRfSU5ERVBfT1BTKQorKyAgICAgICAgICAgICAgICAgICAgICBsYXN0c3RhcnQgPSBiOworKyAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICBnb3RvIHVuZmV0Y2hfaW50ZXJ2YWw7CisrICAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICAvKiBXZSBqdXN0IHBhcnNlZCBhIHZhbGlkIGludGVydmFsLiAgKi8KKysKKysgICAgICAgICAgICAgICAgaWYgKFJFX0RVUF9NQVggPCB1cHBlcl9ib3VuZCkKKysJCSAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19CQURCUik7CisrCisrICAgICAgICAgICAgICAgIC8qIElmIHRoZSB1cHBlciBib3VuZCBpcyB6ZXJvLCBkb24ndCB3YW50IHRvIHN1Y2NlZWQgYXQKKysgICAgICAgICAgICAgICAgICAgYWxsOyBqdW1wIGZyb20gYGxhc3RzdGFydCcgdG8gYGIgKyAzJywgd2hpY2ggd2lsbCBiZQorKwkJICAgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGFmdGVyIHdlIGluc2VydCB0aGUganVtcC4gICovCisrCQkvKiBpZmRlZiBXQ0hBUiwgJ2IgKyAxICsgT0ZGU0VUX0FERFJFU1NfU0laRScKKysJCSAgIGluc3RlYWQgb2YgJ2IgKyAzJy4gICovCisrICAgICAgICAgICAgICAgICBpZiAodXBwZXJfYm91bmQgPT0gMCkKKysgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysgICAgICAgICAgICAgICAgICAgICBJTlNFUlRfSlVNUCAoanVtcCwgbGFzdHN0YXJ0LCBiICsgMQorKwkJCQkgICsgT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrICAgICAgICAgICAgICAgICAgICAgYiArPSAxICsgT0ZGU0VUX0FERFJFU1NfU0laRTsKKysgICAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlLCB3ZSBoYXZlIGEgbm9udHJpdmlhbCBpbnRlcnZhbC4gIFdoZW4KKysgICAgICAgICAgICAgICAgICAgIHdlJ3JlIGFsbCBkb25lLCB0aGUgcGF0dGVybiB3aWxsIGxvb2sgbGlrZToKKysgICAgICAgICAgICAgICAgICAgICAgc2V0X251bWJlcl9hdCA8anVtcCBjb3VudD4gPHVwcGVyIGJvdW5kPgorKyAgICAgICAgICAgICAgICAgICAgICBzZXRfbnVtYmVyX2F0IDxzdWNjZWVkX24gY291bnQ+IDxsb3dlciBib3VuZD4KKysgICAgICAgICAgICAgICAgICAgICAgc3VjY2VlZF9uIDxhZnRlciBqdW1wIGFkZHI+IDxzdWNjZWVkX24gY291bnQ+CisrICAgICAgICAgICAgICAgICAgICAgIDxib2R5IG9mIGxvb3A+CisrICAgICAgICAgICAgICAgICAgICAgIGp1bXBfbiA8c3VjY2VlZF9uIGFkZHI+IDxqdW1wIGNvdW50PgorKyAgICAgICAgICAgICAgICAgICAgKFRoZSB1cHBlciBib3VuZCBhbmQgYGp1bXBfbicgYXJlIG9taXR0ZWQgaWYKKysgICAgICAgICAgICAgICAgICAgIGB1cHBlcl9ib3VuZCcgaXMgMSwgdGhvdWdoLikgICovCisrICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgIHsgLyogSWYgdGhlIHVwcGVyIGJvdW5kIGlzID4gMSwgd2UgbmVlZCB0byBpbnNlcnQKKysgICAgICAgICAgICAgICAgICAgICAgICBtb3JlIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AuICAqLworKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG5ieXRlcyA9IDIgKyA0ICogT0ZGU0VUX0FERFJFU1NfU0laRSArCisrCQkgICAgICAgKHVwcGVyX2JvdW5kID4gMSkgKiAoMiArIDQgKiBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysKKysgICAgICAgICAgICAgICAgICAgICBHRVRfQlVGRkVSX1NQQUNFIChuYnl0ZXMpOworKworKyAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgbG93ZXIgYm91bmQgb2YgdGhlIGBzdWNjZWVkX24nLCBldmVuCisrICAgICAgICAgICAgICAgICAgICAgICAgdGhvdWdoIGl0IHdpbGwgYmUgc2V0IGR1cmluZyBtYXRjaGluZyBieSBpdHMKKysgICAgICAgICAgICAgICAgICAgICAgICBhdHRlbmRhbnQgYHNldF9udW1iZXJfYXQnIChpbnNlcnRlZCBuZXh0KSwKKysgICAgICAgICAgICAgICAgICAgICAgICBiZWNhdXNlIGByZV9jb21waWxlX2Zhc3RtYXAnIG5lZWRzIHRvIGtub3cuCisrICAgICAgICAgICAgICAgICAgICAgICAgSnVtcCB0byB0aGUgYGp1bXBfbicgd2UgbWlnaHQgaW5zZXJ0IGJlbG93LiAgKi8KKysgICAgICAgICAgICAgICAgICAgICBJTlNFUlRfSlVNUDIgKHN1Y2NlZWRfbiwgbGFzdHN0YXJ0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiArIDEgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRQorKwkJCQkgICArICh1cHBlcl9ib3VuZCA+IDEpICogKDEgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRSkKKysJCQkJICAgLCBsb3dlcl9ib3VuZCk7CisrICAgICAgICAgICAgICAgICAgICAgYiArPSAxICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrCisrICAgICAgICAgICAgICAgICAgICAgLyogQ29kZSB0byBpbml0aWFsaXplIHRoZSBsb3dlciBib3VuZC4gIEluc2VydAorKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSB0aGUgYHN1Y2NlZWRfbicuICBUaGUgYDUnIGlzIHRoZSBsYXN0IHR3bworKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzIG9mIHRoaXMgYHNldF9udW1iZXJfYXQnLCBwbHVzIDMgYnl0ZXMgb2YKKysgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nIGBzdWNjZWVkX24nLiAgKi8KKysJCSAgICAgLyogaWZkZWYgV0NIQVIsIFRoZSAnMSsyKk9GRlNFVF9BRERSRVNTX1NJWkUnCisrCQkJaXMgdGhlICdzZXRfbnVtYmVyX2F0JywgcGx1cyAnMStPRkZTRVRfQUREUkVTU19TSVpFJworKwkJCW9mIHRoZSBmb2xsb3dpbmcgYHN1Y2NlZWRfbicuICAqLworKyAgICAgICAgICAgICAgICAgICAgIFBSRUZJWChpbnNlcnRfb3AyKSAoc2V0X251bWJlcl9hdCwgbGFzdHN0YXJ0LCAxCisrCQkJCSArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFLCBsb3dlcl9ib3VuZCwgYik7CisrICAgICAgICAgICAgICAgICAgICAgYiArPSAxICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrCisrICAgICAgICAgICAgICAgICAgICAgaWYgKHVwcGVyX2JvdW5kID4gMSkKKysgICAgICAgICAgICAgICAgICAgICAgIHsgLyogTW9yZSB0aGFuIG9uZSByZXBldGl0aW9uIGlzIGFsbG93ZWQsIHNvCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZCBhIGJhY2t3YXJkIGp1bXAgdG8gdGhlIGBzdWNjZWVkX24nCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgc3RhcnRzIHRoaXMgaW50ZXJ2YWwuCisrCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gd2UndmUgcmVhY2hlZCB0aGlzIGR1cmluZyBtYXRjaGluZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2UnbGwgaGF2ZSBtYXRjaGVkIHRoZSBpbnRlcnZhbCBvbmNlLCBzbworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdW1wIGJhY2sgb25seSBgdXBwZXJfYm91bmQgLSAxJyB0aW1lcy4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgIFNUT1JFX0pVTVAyIChqdW1wX24sIGIsIGxhc3RzdGFydAorKwkJCQkgICAgICArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFICsgMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyX2JvdW5kIC0gMSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgIGIgKz0gMSArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFOworKworKyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgbG9jYXRpb24gd2Ugd2FudCB0byBzZXQgaXMgdGhlIHNlY29uZAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgb2YgdGhlIGBqdW1wX24nOyB0aGF0IGlzIGBiLTInIGFzCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGFic29sdXRlIGFkZHJlc3MuICBgbGFzdHN0YXJ0JyB3aWxsIGJlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBgc2V0X251bWJlcl9hdCcgd2UncmUgYWJvdXQgdG8gaW5zZXJ0OworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBgbGFzdHN0YXJ0KzMnIHRoZSBudW1iZXIgdG8gc2V0LCB0aGUgc291cmNlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgcmVsYXRpdmUgYWRkcmVzcy4gIEJ1dCB3ZSBhcmUKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW5nIGludG8gdGhlIG1pZGRsZSBvZiB0aGUgcGF0dGVybiAtLQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbyBldmVyeXRoaW5nIGlzIGdldHRpbmcgbW92ZWQgdXAgYnkgNS4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uY2x1c2lvbjogKGIgLSAyKSAtIChsYXN0c3RhcnQgKyAzKSArIDUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkuZS4sIGIgLSBsYXN0c3RhcnQuCisrCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlIGluc2VydCB0aGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3AKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgc28gdGhhdCBpZiB3ZSBmYWlsIGR1cmluZyBtYXRjaGluZywgd2UnbGwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbml0aWFsaXplIHRoZSBib3VuZHMuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICBQUkVGSVgoaW5zZXJ0X29wMikgKHNldF9udW1iZXJfYXQsIGxhc3RzdGFydCwKKysJCQkJCSAgICAgYiAtIGxhc3RzdGFydCwKKysJCQkJCSAgICAgdXBwZXJfYm91bmQgLSAxLCBiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgYiArPSAxICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgcGVuZGluZ19leGFjdCA9IDA7CisrCQlicmVhazsKKysKKysJICAgICAgaW52YWxpZF9pbnRlcnZhbDoKKysJCWlmICghKHN5bnRheCAmIFJFX0lOVkFMSURfSU5URVJWQUxfT1JEKSkKKysJCSAgRlJFRV9TVEFDS19SRVRVUk4gKHAgPT0gcGVuZCA/IFJFR19FQlJBQ0UgOiBSRUdfQkFEQlIpOworKwkgICAgICB1bmZldGNoX2ludGVydmFsOgorKwkJLyogTWF0Y2ggdGhlIGNoYXJhY3RlcnMgYXMgbGl0ZXJhbHMuICAqLworKwkJcCA9IGJlZ19pbnRlcnZhbDsKKysJCWMgPSAneyc7CisrCQlpZiAoc3ludGF4ICYgUkVfTk9fQktfQlJBQ0VTKQorKwkJICBnb3RvIG5vcm1hbF9jaGFyOworKwkJZWxzZQorKwkJICBnb3RvIG5vcm1hbF9iYWNrc2xhc2g7CisrCSAgICAgIH0KKysKKysjaWZkZWYgZW1hY3MKKysgICAgICAgICAgICAvKiBUaGVyZSBpcyBubyB3YXkgdG8gc3BlY2lmeSB0aGUgYmVmb3JlX2RvdCBhbmQgYWZ0ZXJfZG90CisrICAgICAgICAgICAgICAgb3BlcmF0b3JzLiAgcm1zIHNheXMgdGhpcyBpcyBvay4gIC0ta2FybCAgKi8KKysgICAgICAgICAgICBjYXNlICc9JzoKKysgICAgICAgICAgICAgIEJVRl9QVVNIIChhdF9kb3QpOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgY2FzZSAncyc6CisrICAgICAgICAgICAgICBsYXN0c3RhcnQgPSBiOworKyAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKyAgICAgICAgICAgICAgQlVGX1BVU0hfMiAoc3ludGF4c3BlYywgc3ludGF4X3NwZWNfY29kZVtjXSk7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICBjYXNlICdTJzoKKysgICAgICAgICAgICAgIGxhc3RzdGFydCA9IGI7CisrICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrICAgICAgICAgICAgICBCVUZfUFVTSF8yIChub3RzeW50YXhzcGVjLCBzeW50YXhfc3BlY19jb2RlW2NdKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKyNlbmRpZiAvKiBlbWFjcyAqLworKworKworKyAgICAgICAgICAgIGNhc2UgJ3cnOgorKwkgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fR05VX09QUykKKysJCWdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICAgICAgICBsYXN0c3RhcnQgPSBiOworKyAgICAgICAgICAgICAgQlVGX1BVU0ggKHdvcmRjaGFyKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKworKyAgICAgICAgICAgIGNhc2UgJ1cnOgorKwkgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fR05VX09QUykKKysJCWdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICAgICAgICBsYXN0c3RhcnQgPSBiOworKyAgICAgICAgICAgICAgQlVGX1BVU0ggKG5vdHdvcmRjaGFyKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKworKyAgICAgICAgICAgIGNhc2UgJzwnOgorKwkgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fR05VX09QUykKKysJCWdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICAgICAgICBCVUZfUFVTSCAod29yZGJlZyk7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICBjYXNlICc+JzoKKysJICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpCisrCQlnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgICAgICAgQlVGX1BVU0ggKHdvcmRlbmQpOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgY2FzZSAnYic6CisrCSAgICAgIGlmIChzeW50YXggJiBSRV9OT19HTlVfT1BTKQorKwkJZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgICAgICAgIEJVRl9QVVNIICh3b3JkYm91bmQpOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgY2FzZSAnQic6CisrCSAgICAgIGlmIChzeW50YXggJiBSRV9OT19HTlVfT1BTKQorKwkJZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgICAgICAgIEJVRl9QVVNIIChub3R3b3JkYm91bmQpOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgY2FzZSAnYCc6CisrCSAgICAgIGlmIChzeW50YXggJiBSRV9OT19HTlVfT1BTKQorKwkJZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgICAgICAgIEJVRl9QVVNIIChiZWdidWYpOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgY2FzZSAnXCcnOgorKwkgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fR05VX09QUykKKysJCWdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICAgICAgICBCVUZfUFVTSCAoZW5kYnVmKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOiBjYXNlICc1JzoKKysgICAgICAgICAgICBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKysgICAgICAgICAgICAgIGlmIChzeW50YXggJiBSRV9OT19CS19SRUZTKQorKyAgICAgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKworKyAgICAgICAgICAgICAgYzEgPSBjIC0gJzAnOworKworKyAgICAgICAgICAgICAgaWYgKGMxID4gcmVnbnVtKQorKyAgICAgICAgICAgICAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VTVUJSRUcpOworKworKyAgICAgICAgICAgICAgLyogQ2FuJ3QgYmFjayByZWZlcmVuY2UgdG8gYSBzdWJleHByZXNzaW9uIGlmIGluc2lkZSBvZiBpdC4gICovCisrICAgICAgICAgICAgICBpZiAoZ3JvdXBfaW5fY29tcGlsZV9zdGFjayAoY29tcGlsZV9zdGFjaywgKHJlZ251bV90KSBjMSkpCisrICAgICAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrCisrICAgICAgICAgICAgICBsYXN0c3RhcnQgPSBiOworKyAgICAgICAgICAgICAgQlVGX1BVU0hfMiAoZHVwbGljYXRlLCBjMSk7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysKKysgICAgICAgICAgICBjYXNlICcrJzoKKysgICAgICAgICAgICBjYXNlICc/JzoKKysgICAgICAgICAgICAgIGlmIChzeW50YXggJiBSRV9CS19QTFVTX1FNKQorKyAgICAgICAgICAgICAgICBnb3RvIGhhbmRsZV9wbHVzOworKyAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICBnb3RvIG5vcm1hbF9iYWNrc2xhc2g7CisrCisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBub3JtYWxfYmFja3NsYXNoOgorKyAgICAgICAgICAgICAgLyogWW91IG1pZ2h0IHRoaW5rIGl0IHdvdWxkIGJlIHVzZWZ1bCBmb3IgXCB0byBtZWFuCisrICAgICAgICAgICAgICAgICBub3QgdG8gdHJhbnNsYXRlOyBidXQgaWYgd2UgZG9uJ3QgdHJhbnNsYXRlIGl0CisrICAgICAgICAgICAgICAgICBpdCB3aWxsIG5ldmVyIG1hdGNoIGFueXRoaW5nLiAgKi8KKysgICAgICAgICAgICAgIGMgPSBUUkFOU0xBVEUgKGMpOworKyAgICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgICAgICB9CisrICAgICAgICAgIGJyZWFrOworKworKworKwlkZWZhdWx0OgorKyAgICAgICAgLyogRXhwZWN0cyB0aGUgY2hhcmFjdGVyIGluIGBjJy4gICovCisrCW5vcm1hbF9jaGFyOgorKwkgICAgICAvKiBJZiBubyBleGFjdG4gY3VycmVudGx5IGJlaW5nIGJ1aWx0LiAgKi8KKysgICAgICAgICAgaWYgKCFwZW5kaW5nX2V4YWN0CisrI2lmZGVmIFdDSEFSCisrCSAgICAgIC8qIElmIGxhc3QgZXhhY3RuIGhhbmRsZSBiaW5hcnkob3IgY2hhcmFjdGVyKSBhbmQKKysJCSBuZXcgZXhhY3RuIGhhbmRsZSBjaGFyYWN0ZXIob3IgYmluYXJ5KS4gICovCisrCSAgICAgIHx8IGlzX2V4YWN0bl9iaW4gIT0gaXNfYmluYXJ5W3AgLSAxIC0gcGF0dGVybl0KKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysgICAgICAgICAgICAgIC8qIElmIGxhc3QgZXhhY3RuIG5vdCBhdCBjdXJyZW50IHBvc2l0aW9uLiAgKi8KKysgICAgICAgICAgICAgIHx8IHBlbmRpbmdfZXhhY3QgKyAqcGVuZGluZ19leGFjdCArIDEgIT0gYgorKworKyAgICAgICAgICAgICAgLyogV2UgaGF2ZSBvbmx5IG9uZSBieXRlIGZvbGxvd2luZyB0aGUgZXhhY3RuIGZvciB0aGUgY291bnQuICAqLworKwkgICAgICB8fCAqcGVuZGluZ19leGFjdCA9PSAoMSA8PCBCWVRFV0lEVEgpIC0gMQorKworKyAgICAgICAgICAgICAgLyogSWYgZm9sbG93ZWQgYnkgYSByZXBldGl0aW9uIG9wZXJhdG9yLiAgKi8KKysgICAgICAgICAgICAgIHx8ICpwID09ICcqJyB8fCAqcCA9PSAnXicKKysJICAgICAgfHwgKChzeW50YXggJiBSRV9CS19QTFVTX1FNKQorKwkJICA/ICpwID09ICdcXCcgJiYgKHBbMV0gPT0gJysnIHx8IHBbMV0gPT0gJz8nKQorKwkJICA6ICgqcCA9PSAnKycgfHwgKnAgPT0gJz8nKSkKKysJICAgICAgfHwgKChzeW50YXggJiBSRV9JTlRFUlZBTFMpCisrICAgICAgICAgICAgICAgICAgJiYgKChzeW50YXggJiBSRV9OT19CS19CUkFDRVMpCisrCQkgICAgICA/ICpwID09ICd7JworKyAgICAgICAgICAgICAgICAgICAgICA6IChwWzBdID09ICdcXCcgJiYgcFsxXSA9PSAneycpKSkpCisrCSAgICB7CisrCSAgICAgIC8qIFN0YXJ0IGJ1aWxkaW5nIGEgbmV3IGV4YWN0bi4gICovCisrCisrICAgICAgICAgICAgICBsYXN0c3RhcnQgPSBiOworKworKyNpZmRlZiBXQ0hBUgorKwkgICAgICAvKiBJcyB0aGlzIGV4YWN0biBiaW5hcnkgZGF0YSBvciBjaGFyYWN0ZXI/ICovCisrCSAgICAgIGlzX2V4YWN0bl9iaW4gPSBpc19iaW5hcnlbcCAtIDEgLSBwYXR0ZXJuXTsKKysJICAgICAgaWYgKGlzX2V4YWN0bl9iaW4pCisrCQkgIEJVRl9QVVNIXzIgKGV4YWN0bl9iaW4sIDApOworKwkgICAgICBlbHNlCisrCQkgIEJVRl9QVVNIXzIgKGV4YWN0biwgMCk7CisrI2Vsc2UKKysJICAgICAgQlVGX1BVU0hfMiAoZXhhY3RuLCAwKTsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysJICAgICAgcGVuZGluZ19leGFjdCA9IGIgLSAxOworKyAgICAgICAgICAgIH0KKysKKysJICBCVUZfUFVTSCAoYyk7CisrICAgICAgICAgICgqcGVuZGluZ19leGFjdCkrKzsKKysJICBicmVhazsKKysgICAgICAgIH0gLyogc3dpdGNoIChjKSAqLworKyAgICB9IC8qIHdoaWxlIHAgIT0gcGVuZCAqLworKworKworKyAgLyogVGhyb3VnaCB0aGUgcGF0dGVybiBub3cuICAqLworKworKyAgaWYgKGZpeHVwX2FsdF9qdW1wKQorKyAgICBTVE9SRV9KVU1QIChqdW1wX3Bhc3RfYWx0LCBmaXh1cF9hbHRfanVtcCwgYik7CisrCisrICBpZiAoIUNPTVBJTEVfU1RBQ0tfRU1QVFkpCisrICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRVBBUkVOKTsKKysKKysgIC8qIElmIHdlIGRvbid0IHdhbnQgYmFja3RyYWNraW5nLCBmb3JjZSBzdWNjZXNzCisrICAgICB0aGUgZmlyc3QgdGltZSB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBjb21waWxlZCBwYXR0ZXJuLiAgKi8KKysgIGlmIChzeW50YXggJiBSRV9OT19QT1NJWF9CQUNLVFJBQ0tJTkcpCisrICAgIEJVRl9QVVNIIChzdWNjZWVkKTsKKysKKysjaWZkZWYgV0NIQVIKKysgIGZyZWUgKHBhdHRlcm4pOworKyAgZnJlZSAobWJzX29mZnNldCk7CisrICBmcmVlIChpc19iaW5hcnkpOworKyNlbmRpZgorKyAgZnJlZSAoY29tcGlsZV9zdGFjay5zdGFjayk7CisrCisrICAvKiBXZSBoYXZlIHN1Y2NlZWRlZDsgc2V0IHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlci4gICovCisrI2lmZGVmIFdDSEFSCisrICBidWZwLT51c2VkID0gKHVpbnRwdHJfdCkgYiAtICh1aW50cHRyX3QpIENPTVBJTEVEX0JVRkZFUl9WQVI7CisrI2Vsc2UKKysgIGJ1ZnAtPnVzZWQgPSBiIC0gYnVmcC0+YnVmZmVyOworKyNlbmRpZgorKworKyNpZmRlZiBERUJVRworKyAgaWYgKGRlYnVnKQorKyAgICB7CisrICAgICAgREVCVUdfUFJJTlQxICgiXG5Db21waWxlZCBwYXR0ZXJuOiBcbiIpOworKyAgICAgIFBSRUZJWChwcmludF9jb21waWxlZF9wYXR0ZXJuKSAoYnVmcCk7CisrICAgIH0KKysjZW5kaWYgLyogREVCVUcgKi8KKysKKysjaWZuZGVmIE1BVENIX01BWV9BTExPQ0FURQorKyAgLyogSW5pdGlhbGl6ZSB0aGUgZmFpbHVyZSBzdGFjayB0byB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBzdGFjay4gIFRoaXMKKysgICAgIGlzbid0IG5lY2Vzc2FyeSB1bmxlc3Mgd2UncmUgdHJ5aW5nIHRvIGF2b2lkIGNhbGxpbmcgYWxsb2NhIGluCisrICAgICB0aGUgc2VhcmNoIGFuZCBtYXRjaCByb3V0aW5lcy4gICovCisrICB7CisrICAgIGludCBudW1fcmVncyA9IGJ1ZnAtPnJlX25zdWIgKyAxOworKworKyAgICAvKiBTaW5jZSBET1VCTEVfRkFJTF9TVEFDSyByZWZ1c2VzIHRvIGRvdWJsZSBvbmx5IGlmIHRoZSBjdXJyZW50IHNpemUKKysgICAgICAgaXMgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIHJlX21heF9mYWlsdXJlcywgdGhlIGxhcmdlc3QgcG9zc2libGUgc3RhY2sKKysgICAgICAgaXMgMiAqIHJlX21heF9mYWlsdXJlcyBmYWlsdXJlIHBvaW50cy4gICovCisrICAgIGlmIChmYWlsX3N0YWNrLnNpemUgPCAoMiAqIHJlX21heF9mYWlsdXJlcyAqIE1BWF9GQUlMVVJFX0lURU1TKSkKKysgICAgICB7CisrCWZhaWxfc3RhY2suc2l6ZSA9ICgyICogcmVfbWF4X2ZhaWx1cmVzICogTUFYX0ZBSUxVUkVfSVRFTVMpOworKworKyMgaWZkZWYgZW1hY3MKKysJaWYgKCEgZmFpbF9zdGFjay5zdGFjaykKKysJICBmYWlsX3N0YWNrLnN0YWNrCisrCSAgICA9IChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkgKikgeG1hbGxvYyAoZmFpbF9zdGFjay5zaXplCisrCQkJCSAgICAqIHNpemVvZiAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpKSk7CisrCWVsc2UKKysJICBmYWlsX3N0YWNrLnN0YWNrCisrCSAgICA9IChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkgKikgeHJlYWxsb2MgKGZhaWxfc3RhY2suc3RhY2ssCisrCQkJCSAgICAgKGZhaWxfc3RhY2suc2l6ZQorKwkJCQkgICAgICAqIHNpemVvZiAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpKSkpOworKyMgZWxzZSAvKiBub3QgZW1hY3MgKi8KKysJaWYgKCEgZmFpbF9zdGFjay5zdGFjaykKKysJICBmYWlsX3N0YWNrLnN0YWNrCisrCSAgICA9IChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkgKikgbWFsbG9jIChmYWlsX3N0YWNrLnNpemUKKysJCQkJICAgKiBzaXplb2YgKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSkpOworKwllbHNlCisrCSAgZmFpbF9zdGFjay5zdGFjaworKwkgICAgPSAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpICopIHJlYWxsb2MgKGZhaWxfc3RhY2suc3RhY2ssCisrCQkJCQkgICAgKGZhaWxfc3RhY2suc2l6ZQorKwkJCQkgICAgICogc2l6ZW9mIChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkpKSk7CisrIyBlbmRpZiAvKiBub3QgZW1hY3MgKi8KKysgICAgICB9CisrCisrICAgUFJFRklYKHJlZ2V4X2dyb3dfcmVnaXN0ZXJzKSAobnVtX3JlZ3MpOworKyAgfQorKyNlbmRpZiAvKiBub3QgTUFUQ0hfTUFZX0FMTE9DQVRFICovCisrCisrICByZXR1cm4gUkVHX05PRVJST1I7CisrfSAvKiByZWdleF9jb21waWxlICovCisrCisrLyogU3Vicm91dGluZXMgZm9yIGByZWdleF9jb21waWxlJy4gICovCisrCisrLyogU3RvcmUgT1AgYXQgTE9DIGZvbGxvd2VkIGJ5IHR3by1ieXRlIGludGVnZXIgcGFyYW1ldGVyIEFSRy4gICovCisrLyogaWZkZWYgV0NIQVIsIGludGVnZXIgcGFyYW1ldGVyIGlzIDEgd2NoYXJfdC4gICovCisrCisrc3RhdGljIHZvaWQKKytQUkVGSVgoc3RvcmVfb3AxKSAocmVfb3Bjb2RlX3Qgb3AsIFVDSEFSX1QgKmxvYywgaW50IGFyZykKKyt7CisrICAqbG9jID0gKFVDSEFSX1QpIG9wOworKyAgU1RPUkVfTlVNQkVSIChsb2MgKyAxLCBhcmcpOworK30KKysKKysKKysvKiBMaWtlIGBzdG9yZV9vcDEnLCBidXQgZm9yIHR3byB0d28tYnl0ZSBwYXJhbWV0ZXJzIEFSRzEgYW5kIEFSRzIuICAqLworKy8qIGlmZGVmIFdDSEFSLCBpbnRlZ2VyIHBhcmFtZXRlciBpcyAxIHdjaGFyX3QuICAqLworKworK3N0YXRpYyB2b2lkCisrUFJFRklYKHN0b3JlX29wMikgKHJlX29wY29kZV90IG9wLCBVQ0hBUl9UICpsb2MsIGludCBhcmcxLCBpbnQgYXJnMikKKyt7CisrICAqbG9jID0gKFVDSEFSX1QpIG9wOworKyAgU1RPUkVfTlVNQkVSIChsb2MgKyAxLCBhcmcxKTsKKysgIFNUT1JFX05VTUJFUiAobG9jICsgMSArIE9GRlNFVF9BRERSRVNTX1NJWkUsIGFyZzIpOworK30KKysKKysKKysvKiBDb3B5IHRoZSBieXRlcyBmcm9tIExPQyB0byBFTkQgdG8gb3BlbiB1cCB0aHJlZSBieXRlcyBvZiBzcGFjZSBhdCBMT0MKKysgICBmb3IgT1AgZm9sbG93ZWQgYnkgdHdvLWJ5dGUgaW50ZWdlciBwYXJhbWV0ZXIgQVJHLiAgKi8KKysvKiBpZmRlZiBXQ0hBUiwgaW50ZWdlciBwYXJhbWV0ZXIgaXMgMSB3Y2hhcl90LiAgKi8KKysKKytzdGF0aWMgdm9pZAorK1BSRUZJWChpbnNlcnRfb3AxKSAocmVfb3Bjb2RlX3Qgb3AsIFVDSEFSX1QgKmxvYywgaW50IGFyZywgVUNIQVJfVCAqZW5kKQorK3sKKysgIHJlZ2lzdGVyIFVDSEFSX1QgKnBmcm9tID0gZW5kOworKyAgcmVnaXN0ZXIgVUNIQVJfVCAqcHRvID0gZW5kICsgMSArIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrCisrICB3aGlsZSAocGZyb20gIT0gbG9jKQorKyAgICAqLS1wdG8gPSAqLS1wZnJvbTsKKysKKysgIFBSRUZJWChzdG9yZV9vcDEpIChvcCwgbG9jLCBhcmcpOworK30KKysKKysKKysvKiBMaWtlIGBpbnNlcnRfb3AxJywgYnV0IGZvciB0d28gdHdvLWJ5dGUgcGFyYW1ldGVycyBBUkcxIGFuZCBBUkcyLiAgKi8KKysvKiBpZmRlZiBXQ0hBUiwgaW50ZWdlciBwYXJhbWV0ZXIgaXMgMSB3Y2hhcl90LiAgKi8KKysKKytzdGF0aWMgdm9pZAorK1BSRUZJWChpbnNlcnRfb3AyKSAocmVfb3Bjb2RlX3Qgb3AsIFVDSEFSX1QgKmxvYywgaW50IGFyZzEsCisrICAgICAgICAgICAgICAgICAgICBpbnQgYXJnMiwgVUNIQVJfVCAqZW5kKQorK3sKKysgIHJlZ2lzdGVyIFVDSEFSX1QgKnBmcm9tID0gZW5kOworKyAgcmVnaXN0ZXIgVUNIQVJfVCAqcHRvID0gZW5kICsgMSArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFOworKworKyAgd2hpbGUgKHBmcm9tICE9IGxvYykKKysgICAgKi0tcHRvID0gKi0tcGZyb207CisrCisrICBQUkVGSVgoc3RvcmVfb3AyKSAob3AsIGxvYywgYXJnMSwgYXJnMik7CisrfQorKworKworKy8qIFAgcG9pbnRzIHRvIGp1c3QgYWZ0ZXIgYSBeIGluIFBBVFRFUk4uICBSZXR1cm4gdHJ1ZSBpZiB0aGF0IF4gY29tZXMKKysgICBhZnRlciBhbiBhbHRlcm5hdGl2ZSBvciBhIGJlZ2luLXN1YmV4cHJlc3Npb24uICBXZSBhc3N1bWUgdGhlcmUgaXMgYXQKKysgICBsZWFzdCBvbmUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgXi4gICovCisrCisrc3RhdGljIGJvb2xlYW4KKytQUkVGSVgoYXRfYmVnbGluZV9sb2NfcCkgKGNvbnN0IENIQVJfVCAqcGF0dGVybiwgY29uc3QgQ0hBUl9UICpwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCkKKyt7CisrICBjb25zdCBDSEFSX1QgKnByZXYgPSBwIC0gMjsKKysgIGJvb2xlYW4gcHJldl9wcmV2X2JhY2tzbGFzaCA9IHByZXYgPiBwYXR0ZXJuICYmIHByZXZbLTFdID09ICdcXCc7CisrCisrICByZXR1cm4KKysgICAgICAgLyogQWZ0ZXIgYSBzdWJleHByZXNzaW9uPyAgKi8KKysgICAgICAgKCpwcmV2ID09ICcoJyAmJiAoc3ludGF4ICYgUkVfTk9fQktfUEFSRU5TIHx8IHByZXZfcHJldl9iYWNrc2xhc2gpKQorKyAgICAgICAvKiBBZnRlciBhbiBhbHRlcm5hdGl2ZT8gICovCisrICAgIHx8ICgqcHJldiA9PSAnfCcgJiYgKHN5bnRheCAmIFJFX05PX0JLX1ZCQVIgfHwgcHJldl9wcmV2X2JhY2tzbGFzaCkpOworK30KKysKKysKKysvKiBUaGUgZHVhbCBvZiBhdF9iZWdsaW5lX2xvY19wLiAgVGhpcyBvbmUgaXMgZm9yICQuICBXZSBhc3N1bWUgdGhlcmUgaXMKKysgICBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGFmdGVyIHRoZSAkLCBpLmUuLCBgUCA8IFBFTkQnLiAgKi8KKysKKytzdGF0aWMgYm9vbGVhbgorK1BSRUZJWChhdF9lbmRsaW5lX2xvY19wKSAoY29uc3QgQ0hBUl9UICpwLCBjb25zdCBDSEFSX1QgKnBlbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4KQorK3sKKysgIGNvbnN0IENIQVJfVCAqbmV4dCA9IHA7CisrICBib29sZWFuIG5leHRfYmFja3NsYXNoID0gKm5leHQgPT0gJ1xcJzsKKysgIGNvbnN0IENIQVJfVCAqbmV4dF9uZXh0ID0gcCArIDEgPCBwZW5kID8gcCArIDEgOiAwOworKworKyAgcmV0dXJuCisrICAgICAgIC8qIEJlZm9yZSBhIHN1YmV4cHJlc3Npb24/ICAqLworKyAgICAgICAoc3ludGF4ICYgUkVfTk9fQktfUEFSRU5TID8gKm5leHQgPT0gJyknCisrICAgICAgICA6IG5leHRfYmFja3NsYXNoICYmIG5leHRfbmV4dCAmJiAqbmV4dF9uZXh0ID09ICcpJykKKysgICAgICAgLyogQmVmb3JlIGFuIGFsdGVybmF0aXZlPyAgKi8KKysgICAgfHwgKHN5bnRheCAmIFJFX05PX0JLX1ZCQVIgPyAqbmV4dCA9PSAnfCcKKysgICAgICAgIDogbmV4dF9iYWNrc2xhc2ggJiYgbmV4dF9uZXh0ICYmICpuZXh0X25leHQgPT0gJ3wnKTsKKyt9CisrCisrI2Vsc2UgLyogbm90IElOU0lERV9SRUNVUlNJT04gKi8KKysKKysvKiBSZXR1cm5zIHRydWUgaWYgUkVHTlVNIGlzIGluIG9uZSBvZiBDT01QSUxFX1NUQUNLJ3MgZWxlbWVudHMgYW5kCisrICAgZmFsc2UgaWYgaXQncyBub3QuICAqLworKworK3N0YXRpYyBib29sZWFuCisrZ3JvdXBfaW5fY29tcGlsZV9zdGFjayAoY29tcGlsZV9zdGFja190eXBlIGNvbXBpbGVfc3RhY2ssIHJlZ251bV90IHJlZ251bSkKKyt7CisrICBpbnQgdGhpc19lbGVtZW50OworKworKyAgZm9yICh0aGlzX2VsZW1lbnQgPSBjb21waWxlX3N0YWNrLmF2YWlsIC0gMTsKKysgICAgICAgdGhpc19lbGVtZW50ID49IDA7CisrICAgICAgIHRoaXNfZWxlbWVudC0tKQorKyAgICBpZiAoY29tcGlsZV9zdGFjay5zdGFja1t0aGlzX2VsZW1lbnRdLnJlZ251bSA9PSByZWdudW0pCisrICAgICAgcmV0dXJuIHRydWU7CisrCisrICByZXR1cm4gZmFsc2U7CisrfQorKyNlbmRpZiAvKiBub3QgSU5TSURFX1JFQ1VSU0lPTiAqLworKworKyNpZmRlZiBJTlNJREVfUkVDVVJTSU9OCisrCisrI2lmZGVmIFdDSEFSCisrLyogVGhpcyBpbnNlcnQgc3BhY2UsIHdoaWNoIHNpemUgaXMgIm51bSIsIGludG8gdGhlIHBhdHRlcm4gYXQgImxvYyIuCisrICAgImVuZCIgbXVzdCBwb2ludCB0aGUgZW5kIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLiAgKi8KKytzdGF0aWMgdm9pZAorK2luc2VydF9zcGFjZSAoaW50IG51bSwgQ0hBUl9UICpsb2MsIENIQVJfVCAqZW5kKQorK3sKKysgIHJlZ2lzdGVyIENIQVJfVCAqcHRvID0gZW5kOworKyAgcmVnaXN0ZXIgQ0hBUl9UICpwZnJvbSA9IGVuZCAtIG51bTsKKysKKysgIHdoaWxlIChwZnJvbSA+PSBsb2MpCisrICAgICpwdG8tLSA9ICpwZnJvbS0tOworK30KKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysjaWZkZWYgV0NIQVIKKytzdGF0aWMgcmVnX2VycmNvZGVfdAorK3djc19jb21waWxlX3JhbmdlIChDSEFSX1QgcmFuZ2Vfc3RhcnRfY2hhciwgY29uc3QgQ0hBUl9UICoqcF9wdHIsCisrICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVJfVCAqcGVuZCwgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnNsYXRlLAorKyAgICAgICAgICAgICAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4LCBDSEFSX1QgKmIsIENIQVJfVCAqY2hhcl9zZXQpCisreworKyAgY29uc3QgQ0hBUl9UICpwID0gKnBfcHRyOworKyAgQ0hBUl9UIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQ7CisrICByZWdfZXJyY29kZV90IHJldDsKKysjIGlmZGVmIF9MSUJDCisrICB1aW50MzJfdCBucnVsZXM7CisrICB1aW50MzJfdCBzdGFydF92YWwsIGVuZF92YWw7CisrIyBlbmRpZgorKyAgaWYgKHAgPT0gcGVuZCkKKysgICAgcmV0dXJuIFJFR19FUkFOR0U7CisrCisrIyBpZmRlZiBfTElCQworKyAgbnJ1bGVzID0gX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKTsKKysgIGlmIChucnVsZXMgIT0gMCkKKysgICAgeworKyAgICAgIGNvbnN0IGNoYXIgKmNvbGxzZXEgPSAoY29uc3QgY2hhciAqKSBfTkxfQ1VSUkVOVChMQ19DT0xMQVRFLAorKwkJCQkJCSAgICAgICBfTkxfQ09MTEFURV9DT0xMU0VRV0MpOworKyAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4dHJhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKysJX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX1NZTUJfRVhUUkFNQik7CisrCisrICAgICAgaWYgKHJhbmdlX3N0YXJ0X2NoYXIgPCAtMSkKKysJeworKwkgIC8qIHJhbmdlX3N0YXJ0IGlzIGEgY29sbGF0aW5nIHN5bWJvbC4gICovCisrCSAgaW50MzJfdCAqd2V4dHJhOworKwkgIC8qIFJldHJlaXZlIHRoZSBpbmRleCBhbmQgZ2V0IGNvbGxhdGlvbiBzZXF1ZW5jZSB2YWx1ZS4gICovCisrCSAgd2V4dHJhID0gKGludDMyX3QqKShleHRyYSArIGNoYXJfc2V0Wy1yYW5nZV9zdGFydF9jaGFyXSk7CisrCSAgc3RhcnRfdmFsID0gd2V4dHJhWzEgKyAqd2V4dHJhXTsKKysJfQorKyAgICAgIGVsc2UKKysJc3RhcnRfdmFsID0gY29sbHNlcV90YWJsZV9sb29rdXAoY29sbHNlcSwgVFJBTlNMQVRFKHJhbmdlX3N0YXJ0X2NoYXIpKTsKKysKKysgICAgICBlbmRfdmFsID0gY29sbHNlcV90YWJsZV9sb29rdXAgKGNvbGxzZXEsIFRSQU5TTEFURSAocFswXSkpOworKworKyAgICAgIC8qIFJlcG9ydCBhbiBlcnJvciBpZiB0aGUgcmFuZ2UgaXMgZW1wdHkgYW5kIHRoZSBzeW50YXggcHJvaGliaXRzCisrCSB0aGlzLiAgKi8KKysgICAgICByZXQgPSAoKHN5bnRheCAmIFJFX05PX0VNUFRZX1JBTkdFUykKKysJICAgICAmJiAoc3RhcnRfdmFsID4gZW5kX3ZhbCkpPyBSRUdfRVJBTkdFIDogUkVHX05PRVJST1I7CisrCisrICAgICAgLyogSW5zZXJ0IHNwYWNlIHRvIHRoZSBlbmQgb2YgdGhlIGNoYXJfcmFuZ2VzLiAgKi8KKysgICAgICBpbnNlcnRfc3BhY2UoMiwgYiAtIGNoYXJfc2V0WzVdIC0gMiwgYiAtIDEpOworKyAgICAgICooYiAtIGNoYXJfc2V0WzVdIC0gMikgPSAod2NoYXJfdClzdGFydF92YWw7CisrICAgICAgKihiIC0gY2hhcl9zZXRbNV0gLSAxKSA9ICh3Y2hhcl90KWVuZF92YWw7CisrICAgICAgY2hhcl9zZXRbNF0rKzsgLyogcmFuZ2VzX2luZGV4ICovCisrICAgIH0KKysgIGVsc2UKKysjIGVuZGlmCisrICAgIHsKKysgICAgICByYW5nZV9zdGFydCA9IChyYW5nZV9zdGFydF9jaGFyID49IDApPyBUUkFOU0xBVEUgKHJhbmdlX3N0YXJ0X2NoYXIpOgorKwlyYW5nZV9zdGFydF9jaGFyOworKyAgICAgIHJhbmdlX2VuZCA9IFRSQU5TTEFURSAocFswXSk7CisrICAgICAgLyogUmVwb3J0IGFuIGVycm9yIGlmIHRoZSByYW5nZSBpcyBlbXB0eSBhbmQgdGhlIHN5bnRheCBwcm9oaWJpdHMKKysJIHRoaXMuICAqLworKyAgICAgIHJldCA9ICgoc3ludGF4ICYgUkVfTk9fRU1QVFlfUkFOR0VTKQorKwkgICAgICYmIChyYW5nZV9zdGFydCA+IHJhbmdlX2VuZCkpPyBSRUdfRVJBTkdFIDogUkVHX05PRVJST1I7CisrCisrICAgICAgLyogSW5zZXJ0IHNwYWNlIHRvIHRoZSBlbmQgb2YgdGhlIGNoYXJfcmFuZ2VzLiAgKi8KKysgICAgICBpbnNlcnRfc3BhY2UoMiwgYiAtIGNoYXJfc2V0WzVdIC0gMiwgYiAtIDEpOworKyAgICAgICooYiAtIGNoYXJfc2V0WzVdIC0gMikgPSByYW5nZV9zdGFydDsKKysgICAgICAqKGIgLSBjaGFyX3NldFs1XSAtIDEpID0gcmFuZ2VfZW5kOworKyAgICAgIGNoYXJfc2V0WzRdKys7IC8qIHJhbmdlc19pbmRleCAqLworKyAgICB9CisrICAvKiBIYXZlIHRvIGluY3JlbWVudCB0aGUgcG9pbnRlciBpbnRvIHRoZSBwYXR0ZXJuIHN0cmluZywgc28gdGhlCisrICAgICBjYWxsZXIgaXNuJ3Qgc3RpbGwgYXQgdGhlIGVuZGluZyBjaGFyYWN0ZXIuICAqLworKyAgKCpwX3B0cikrKzsKKysKKysgIHJldHVybiByZXQ7CisrfQorKyNlbHNlIC8qIEJZVEUgKi8KKysvKiBSZWFkIHRoZSBlbmRpbmcgY2hhcmFjdGVyIG9mIGEgcmFuZ2UgKGluIGEgYnJhY2tldCBleHByZXNzaW9uKSBmcm9tIHRoZQorKyAgIHVuY29tcGlsZWQgcGF0dGVybiAqUF9QVFIgKHdoaWNoIGVuZHMgYXQgUEVORCkuICBXZSBhc3N1bWUgdGhlCisrICAgc3RhcnRpbmcgY2hhcmFjdGVyIGlzIGluIGBQWy0yXScuICAoYFBbLTFdJyBpcyB0aGUgY2hhcmFjdGVyIGAtJy4pCisrICAgVGhlbiB3ZSBzZXQgdGhlIHRyYW5zbGF0aW9uIG9mIGFsbCBiaXRzIGJldHdlZW4gdGhlIHN0YXJ0aW5nIGFuZAorKyAgIGVuZGluZyBjaGFyYWN0ZXJzIChpbmNsdXNpdmUpIGluIHRoZSBjb21waWxlZCBwYXR0ZXJuIEIuCisrCisrICAgUmV0dXJuIGFuIGVycm9yIGNvZGUuCisrCisrICAgV2UgdXNlIHRoZXNlIHNob3J0IHZhcmlhYmxlIG5hbWVzIHNvIHdlIGNhbiB1c2UgdGhlIHNhbWUgbWFjcm9zIGFzCisrICAgYHJlZ2V4X2NvbXBpbGUnIGl0c2VsZi4gICovCisrCisrc3RhdGljIHJlZ19lcnJjb2RlX3QKKytieXRlX2NvbXBpbGVfcmFuZ2UgKHVuc2lnbmVkIGludCByYW5nZV9zdGFydF9jaGFyLCBjb25zdCBjaGFyICoqcF9wdHIsCisrICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwZW5kLCBSRV9UUkFOU0xBVEVfVFlQRSB0cmFuc2xhdGUsCisrICAgICAgICAgICAgICAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4LCB1bnNpZ25lZCBjaGFyICpiKQorK3sKKysgIHVuc2lnbmVkIHRoaXNfY2hhcjsKKysgIGNvbnN0IGNoYXIgKnAgPSAqcF9wdHI7CisrICByZWdfZXJyY29kZV90IHJldDsKKysjIGlmIF9MSUJDCisrICBjb25zdCB1bnNpZ25lZCBjaGFyICpjb2xsc2VxOworKyAgdW5zaWduZWQgaW50IHN0YXJ0X2NvbHNlcTsKKysgIHVuc2lnbmVkIGludCBlbmRfY29sc2VxOworKyMgZWxzZQorKyAgdW5zaWduZWQgZW5kX2NoYXI7CisrIyBlbmRpZgorKworKyAgaWYgKHAgPT0gcGVuZCkKKysgICAgcmV0dXJuIFJFR19FUkFOR0U7CisrCisrICAvKiBIYXZlIHRvIGluY3JlbWVudCB0aGUgcG9pbnRlciBpbnRvIHRoZSBwYXR0ZXJuIHN0cmluZywgc28gdGhlCisrICAgICBjYWxsZXIgaXNuJ3Qgc3RpbGwgYXQgdGhlIGVuZGluZyBjaGFyYWN0ZXIuICAqLworKyAgKCpwX3B0cikrKzsKKysKKysgIC8qIFJlcG9ydCBhbiBlcnJvciBpZiB0aGUgcmFuZ2UgaXMgZW1wdHkgYW5kIHRoZSBzeW50YXggcHJvaGliaXRzIHRoaXMuICAqLworKyAgcmV0ID0gc3ludGF4ICYgUkVfTk9fRU1QVFlfUkFOR0VTID8gUkVHX0VSQU5HRSA6IFJFR19OT0VSUk9SOworKworKyMgaWYgX0xJQkMKKysgIGNvbGxzZXEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwKKysJCQkJCQkgX05MX0NPTExBVEVfQ09MTFNFUU1CKTsKKysKKysgIHN0YXJ0X2NvbHNlcSA9IGNvbGxzZXFbKHVuc2lnbmVkIGNoYXIpIFRSQU5TTEFURSAocmFuZ2Vfc3RhcnRfY2hhcildOworKyAgZW5kX2NvbHNlcSA9IGNvbGxzZXFbKHVuc2lnbmVkIGNoYXIpIFRSQU5TTEFURSAocFswXSldOworKyAgZm9yICh0aGlzX2NoYXIgPSAwOyB0aGlzX2NoYXIgPD0gKHVuc2lnbmVkIGNoYXIpIC0xOyArK3RoaXNfY2hhcikKKysgICAgeworKyAgICAgIHVuc2lnbmVkIGludCB0aGlzX2NvbHNlcSA9IGNvbGxzZXFbKHVuc2lnbmVkIGNoYXIpIFRSQU5TTEFURSAodGhpc19jaGFyKV07CisrCisrICAgICAgaWYgKHN0YXJ0X2NvbHNlcSA8PSB0aGlzX2NvbHNlcSAmJiB0aGlzX2NvbHNlcSA8PSBlbmRfY29sc2VxKQorKwl7CisrCSAgU0VUX0xJU1RfQklUIChUUkFOU0xBVEUgKHRoaXNfY2hhcikpOworKwkgIHJldCA9IFJFR19OT0VSUk9SOworKwl9CisrICAgIH0KKysjIGVsc2UKKysgIC8qIEhlcmUgd2Ugc2VlIHdoeSBgdGhpc19jaGFyJyBoYXMgdG8gYmUgbGFyZ2VyIHRoYW4gYW4gYHVuc2lnbmVkCisrICAgICBjaGFyJyAtLSB3ZSB3b3VsZCBvdGhlcndpc2UgZ28gaW50byBhbiBpbmZpbml0ZSBsb29wLCBzaW5jZSBhbGwKKysgICAgIGNoYXJhY3RlcnMgPD0gMHhmZi4gICovCisrICByYW5nZV9zdGFydF9jaGFyID0gVFJBTlNMQVRFIChyYW5nZV9zdGFydF9jaGFyKTsKKysgIC8qIFRSQU5TTEFURShwWzBdKSBpcyBjYXN0ZWQgdG8gY2hhciAobm90IHVuc2lnbmVkIGNoYXIpIGluIFRSQU5TTEFURSwKKysgICAgIGFuZCBzb21lIGNvbXBpbGVycyBjYXN0IGl0IHRvIGludCBpbXBsaWNpdGx5LCBzbyBmb2xsb3dpbmcgZm9yX2xvb3AKKysgICAgIG1heSBmYWxsIHRvIChhbG1vc3QpIGluZmluaXRlIGxvb3AuCisrICAgICBlLmcuIElmIHRyYW5zbGF0ZVtwWzBdXSA9IDB4ZmYsIGVuZF9jaGFyIG1heSBlcXVhbHMgdG8gMHhmZmZmZmZmZi4KKysgICAgIFRvIGF2b2lkIHRoaXMsIHdlIGNhc3QgcFswXSB0byB1bnNpZ25lZCBpbnQgYW5kIHRydW5jYXRlIGl0LiAgKi8KKysgIGVuZF9jaGFyID0gKCh1bnNpZ25lZClUUkFOU0xBVEUocFswXSkgJiAoKDEgPDwgQllURVdJRFRIKSAtIDEpKTsKKysKKysgIGZvciAodGhpc19jaGFyID0gcmFuZ2Vfc3RhcnRfY2hhcjsgdGhpc19jaGFyIDw9IGVuZF9jaGFyOyArK3RoaXNfY2hhcikKKysgICAgeworKyAgICAgIFNFVF9MSVNUX0JJVCAoVFJBTlNMQVRFICh0aGlzX2NoYXIpKTsKKysgICAgICByZXQgPSBSRUdfTk9FUlJPUjsKKysgICAgfQorKyMgZW5kaWYKKysKKysgIHJldHVybiByZXQ7CisrfQorKyNlbmRpZiAvKiBXQ0hBUiAqLworKwwKKysvKiByZV9jb21waWxlX2Zhc3RtYXAgY29tcHV0ZXMgYSBgYGZhc3RtYXAnJyBmb3IgdGhlIGNvbXBpbGVkIHBhdHRlcm4gaW4KKysgICBCVUZQLiAgQSBmYXN0bWFwIHJlY29yZHMgd2hpY2ggb2YgdGhlICgxIDw8IEJZVEVXSURUSCkgcG9zc2libGUKKysgICBjaGFyYWN0ZXJzIGNhbiBzdGFydCBhIHN0cmluZyB0aGF0IG1hdGNoZXMgdGhlIHBhdHRlcm4uICBUaGlzIGZhc3RtYXAKKysgICBpcyB1c2VkIGJ5IHJlX3NlYXJjaCB0byBza2lwIHF1aWNrbHkgb3ZlciBpbXBvc3NpYmxlIHN0YXJ0aW5nIHBvaW50cy4KKysKKysgICBUaGUgY2FsbGVyIG11c3Qgc3VwcGx5IHRoZSBhZGRyZXNzIG9mIGEgKDEgPDwgQllURVdJRFRIKS1ieXRlIGRhdGEKKysgICBhcmVhIGFzIEJVRlAtPmZhc3RtYXAuCisrCisrICAgV2Ugc2V0IHRoZSBgZmFzdG1hcCcsIGBmYXN0bWFwX2FjY3VyYXRlJywgYW5kIGBjYW5fYmVfbnVsbCcgZmllbGRzIGluCisrICAgdGhlIHBhdHRlcm4gYnVmZmVyLgorKworKyAgIFJldHVybnMgMCBpZiB3ZSBzdWNjZWVkLCAtMiBpZiBhbiBpbnRlcm5hbCBlcnJvci4gICAqLworKworKyNpZmRlZiBXQ0hBUgorKy8qIGxvY2FsIGZ1bmN0aW9uIGZvciByZV9jb21waWxlX2Zhc3RtYXAuCisrICAgdHJ1bmNhdGUgd2NoYXJfdCBjaGFyYWN0ZXIgdG8gY2hhci4gICovCisrc3RhdGljIHVuc2lnbmVkIGNoYXIgdHJ1bmNhdGVfd2NoYXIgKENIQVJfVCBjKTsKKysKKytzdGF0aWMgdW5zaWduZWQgY2hhcgorK3RydW5jYXRlX3djaGFyIChDSEFSX1QgYykKKyt7CisrICB1bnNpZ25lZCBjaGFyIGJ1ZltNQl9DVVJfTUFYXTsKKysgIG1ic3RhdGVfdCBzdGF0ZTsKKysgIGludCByZXR2YWw7CisrICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChzdGF0ZSkpOworKyMgaWZkZWYgX0xJQkMKKysgIHJldHZhbCA9IF9fd2NydG9tYiAoYnVmLCBjLCAmc3RhdGUpOworKyMgZWxzZQorKyAgcmV0dmFsID0gd2NydG9tYiAoYnVmLCBjLCAmc3RhdGUpOworKyMgZW5kaWYKKysgIHJldHVybiByZXR2YWwgPiAwID8gYnVmWzBdIDogKHVuc2lnbmVkIGNoYXIpIGM7CisrfQorKyNlbmRpZiAvKiBXQ0hBUiAqLworKworK3N0YXRpYyBpbnQKKytQUkVGSVgocmVfY29tcGlsZV9mYXN0bWFwKSAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwKQorK3sKKysgIGludCBqLCBrOworKyNpZmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUKKysgIFBSRUZJWChmYWlsX3N0YWNrX3R5cGUpIGZhaWxfc3RhY2s7CisrI2VuZGlmCisrI2lmbmRlZiBSRUdFWF9NQUxMT0MKKysgIGNoYXIgKmRlc3RpbmF0aW9uOworKyNlbmRpZgorKworKyAgcmVnaXN0ZXIgY2hhciAqZmFzdG1hcCA9IGJ1ZnAtPmZhc3RtYXA7CisrCisrI2lmZGVmIFdDSEFSCisrICAvKiBXZSBuZWVkIHRvIGNhc3QgcGF0dGVybiB0byAod2NoYXJfdCopLCBiZWNhdXNlIHdlIGNhc3RlZCB0aGlzIGNvbXBpbGVkCisrICAgICBwYXR0ZXJuIHRvIChjaGFyKikgaW4gcmVnZXhfY29tcGlsZS4gICovCisrICBVQ0hBUl9UICpwYXR0ZXJuID0gKFVDSEFSX1QqKWJ1ZnAtPmJ1ZmZlcjsKKysgIHJlZ2lzdGVyIFVDSEFSX1QgKnBlbmQgPSAoVUNIQVJfVCopIChidWZwLT5idWZmZXIgKyBidWZwLT51c2VkKTsKKysjZWxzZSAvKiBCWVRFICovCisrICBVQ0hBUl9UICpwYXR0ZXJuID0gYnVmcC0+YnVmZmVyOworKyAgcmVnaXN0ZXIgVUNIQVJfVCAqcGVuZCA9IHBhdHRlcm4gKyBidWZwLT51c2VkOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKyAgVUNIQVJfVCAqcCA9IHBhdHRlcm47CisrCisrI2lmZGVmIFJFTF9BTExPQworKyAgLyogVGhpcyBob2xkcyB0aGUgcG9pbnRlciB0byB0aGUgZmFpbHVyZSBzdGFjaywgd2hlbgorKyAgICAgaXQgaXMgYWxsb2NhdGVkIHJlbG9jYXRhYmx5LiAgKi8KKysgIGZhaWxfc3RhY2tfZWx0X3QgKmZhaWx1cmVfc3RhY2tfcHRyOworKyNlbmRpZgorKworKyAgLyogQXNzdW1lIHRoYXQgZWFjaCBwYXRoIHRocm91Z2ggdGhlIHBhdHRlcm4gY2FuIGJlIG51bGwgdW50aWwKKysgICAgIHByb3ZlbiBvdGhlcndpc2UuICBXZSBzZXQgdGhpcyBmYWxzZSBhdCB0aGUgYm90dG9tIG9mIHN3aXRjaAorKyAgICAgc3RhdGVtZW50LCB0byB3aGljaCB3ZSBnZXQgb25seSBpZiBhIHBhcnRpY3VsYXIgcGF0aCBkb2Vzbid0CisrICAgICBtYXRjaCB0aGUgZW1wdHkgc3RyaW5nLiAgKi8KKysgIGJvb2xlYW4gcGF0aF9jYW5fYmVfbnVsbCA9IHRydWU7CisrCisrICAvKiBXZSBhcmVuJ3QgZG9pbmcgYSBgc3VjY2VlZF9uJyB0byBiZWdpbiB3aXRoLiAgKi8KKysgIGJvb2xlYW4gc3VjY2VlZF9uX3AgPSBmYWxzZTsKKysKKysgIGFzc2VydCAoZmFzdG1hcCAhPSBOVUxMICYmIHAgIT0gTlVMTCk7CisrCisrICBJTklUX0ZBSUxfU1RBQ0sgKCk7CisrICBiemVybyAoZmFzdG1hcCwgMSA8PCBCWVRFV0lEVEgpOyAgLyogQXNzdW1lIG5vdGhpbmcncyB2YWxpZC4gICovCisrICBidWZwLT5mYXN0bWFwX2FjY3VyYXRlID0gMTsJICAgIC8qIEl0IHdpbGwgYmUgd2hlbiB3ZSdyZSBkb25lLiAgKi8KKysgIGJ1ZnAtPmNhbl9iZV9udWxsID0gMDsKKysKKysgIHdoaWxlICgxKQorKyAgICB7CisrICAgICAgaWYgKHAgPT0gcGVuZCB8fCAqcCA9PSAoVUNIQVJfVCkgc3VjY2VlZCkKKysJeworKwkgIC8qIFdlIGhhdmUgcmVhY2hlZCB0aGUgKGVmZmVjdGl2ZSkgZW5kIG9mIHBhdHRlcm4uICAqLworKwkgIGlmICghRkFJTF9TVEFDS19FTVBUWSAoKSkKKysJICAgIHsKKysJICAgICAgYnVmcC0+Y2FuX2JlX251bGwgfD0gcGF0aF9jYW5fYmVfbnVsbDsKKysKKysJICAgICAgLyogUmVzZXQgZm9yIG5leHQgcGF0aC4gICovCisrCSAgICAgIHBhdGhfY2FuX2JlX251bGwgPSB0cnVlOworKworKwkgICAgICBwID0gZmFpbF9zdGFjay5zdGFja1stLWZhaWxfc3RhY2suYXZhaWxdLnBvaW50ZXI7CisrCisrCSAgICAgIGNvbnRpbnVlOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIGJyZWFrOworKwl9CisrCisrICAgICAgLyogV2Ugc2hvdWxkIG5ldmVyIGJlIGFib3V0IHRvIGdvIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLiAgKi8KKysgICAgICBhc3NlcnQgKHAgPCBwZW5kKTsKKysKKysgICAgICBzd2l0Y2ggKFNXSVRDSF9FTlVNX0NBU1QgKChyZV9vcGNvZGVfdCkgKnArKykpCisrCXsKKysKKysgICAgICAgIC8qIEkgZ3Vlc3MgdGhlIGlkZWEgaGVyZSBpcyB0byBzaW1wbHkgbm90IGJvdGhlciB3aXRoIGEgZmFzdG1hcAorKyAgICAgICAgICAgaWYgYSBiYWNrcmVmZXJlbmNlIGlzIHVzZWQsIHNpbmNlIGl0J3MgdG9vIGhhcmQgdG8gZmlndXJlIG91dAorKyAgICAgICAgICAgdGhlIGZhc3RtYXAgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGdyb3VwLiAgU2V0dGluZworKyAgICAgICAgICAgYGNhbl9iZV9udWxsJyBzdG9wcyBgcmVfc2VhcmNoXzInIGZyb20gdXNpbmcgdGhlIGZhc3RtYXAsIHNvCisrICAgICAgICAgICB0aGF0IGlzIGFsbCB3ZSBkby4gICovCisrCWNhc2UgZHVwbGljYXRlOgorKwkgIGJ1ZnAtPmNhbl9iZV9udWxsID0gMTsKKysgICAgICAgICAgZ290byBkb25lOworKworKworKyAgICAgIC8qIEZvbGxvd2luZyBhcmUgdGhlIGNhc2VzIHdoaWNoIG1hdGNoIGEgY2hhcmFjdGVyLiAgVGhlc2UgZW5kCisrICAgICAgICAgd2l0aCBgYnJlYWsnLiAgKi8KKysKKysjaWZkZWYgV0NIQVIKKysJY2FzZSBleGFjdG46CisrICAgICAgICAgIGZhc3RtYXBbdHJ1bmNhdGVfd2NoYXIocFsxXSldID0gMTsKKysJICBicmVhazsKKysjZWxzZSAvKiBCWVRFICovCisrCWNhc2UgZXhhY3RuOgorKyAgICAgICAgICBmYXN0bWFwW3BbMV1dID0gMTsKKysJICBicmVhazsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJY2FzZSBleGFjdG5fYmluOgorKwkgIGZhc3RtYXBbcFsxXV0gPSAxOworKwkgIGJyZWFrOworKyNlbmRpZgorKworKyNpZmRlZiBXQ0hBUgorKyAgICAgICAgLyogSXQgaXMgaGFyZCB0byBkaXN0aW5ndWlzaCBmYXN0bWFwIGZyb20gKG11bHRpIGJ5dGUpIGNoYXJhY3RlcnMKKysgICAgICAgICAgIHdoaWNoIGRlcGVuZHMgb24gY3VycmVudCBsb2NhbGUuICAqLworKyAgICAgICAgY2FzZSBjaGFyc2V0OgorKwljYXNlIGNoYXJzZXRfbm90OgorKwljYXNlIHdvcmRjaGFyOgorKwljYXNlIG5vdHdvcmRjaGFyOgorKyAgICAgICAgICBidWZwLT5jYW5fYmVfbnVsbCA9IDE7CisrICAgICAgICAgIGdvdG8gZG9uZTsKKysjZWxzZSAvKiBCWVRFICovCisrICAgICAgICBjYXNlIGNoYXJzZXQ6CisrICAgICAgICAgIGZvciAoaiA9ICpwKysgKiBCWVRFV0lEVEggLSAxOyBqID49IDA7IGotLSkKKysJICAgIGlmIChwW2ogLyBCWVRFV0lEVEhdICYgKDEgPDwgKGogJSBCWVRFV0lEVEgpKSkKKysgICAgICAgICAgICAgIGZhc3RtYXBbal0gPSAxOworKwkgIGJyZWFrOworKworKworKwljYXNlIGNoYXJzZXRfbm90OgorKwkgIC8qIENoYXJzIGJleW9uZCBlbmQgb2YgbWFwIG11c3QgYmUgYWxsb3dlZC4gICovCisrCSAgZm9yIChqID0gKnAgKiBCWVRFV0lEVEg7IGogPCAoMSA8PCBCWVRFV0lEVEgpOyBqKyspCisrICAgICAgICAgICAgZmFzdG1hcFtqXSA9IDE7CisrCisrCSAgZm9yIChqID0gKnArKyAqIEJZVEVXSURUSCAtIDE7IGogPj0gMDsgai0tKQorKwkgICAgaWYgKCEocFtqIC8gQllURVdJRFRIXSAmICgxIDw8IChqICUgQllURVdJRFRIKSkpKQorKyAgICAgICAgICAgICAgZmFzdG1hcFtqXSA9IDE7CisrICAgICAgICAgIGJyZWFrOworKworKworKwljYXNlIHdvcmRjaGFyOgorKwkgIGZvciAoaiA9IDA7IGogPCAoMSA8PCBCWVRFV0lEVEgpOyBqKyspCisrCSAgICBpZiAoU1lOVEFYIChqKSA9PSBTd29yZCkKKysJICAgICAgZmFzdG1hcFtqXSA9IDE7CisrCSAgYnJlYWs7CisrCisrCisrCWNhc2Ugbm90d29yZGNoYXI6CisrCSAgZm9yIChqID0gMDsgaiA8ICgxIDw8IEJZVEVXSURUSCk7IGorKykKKysJICAgIGlmIChTWU5UQVggKGopICE9IFN3b3JkKQorKwkgICAgICBmYXN0bWFwW2pdID0gMTsKKysJICBicmVhazsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysgICAgICAgIGNhc2UgYW55Y2hhcjoKKysJICB7CisrCSAgICBpbnQgZmFzdG1hcF9uZXdsaW5lID0gZmFzdG1hcFsnXG4nXTsKKysKKysJICAgIC8qIGAuJyBtYXRjaGVzIGFueXRoaW5nIC4uLiAgKi8KKysJICAgIGZvciAoaiA9IDA7IGogPCAoMSA8PCBCWVRFV0lEVEgpOyBqKyspCisrCSAgICAgIGZhc3RtYXBbal0gPSAxOworKworKwkgICAgLyogLi4uIGV4Y2VwdCBwZXJoYXBzIG5ld2xpbmUuICAqLworKwkgICAgaWYgKCEoYnVmcC0+c3ludGF4ICYgUkVfRE9UX05FV0xJTkUpKQorKwkgICAgICBmYXN0bWFwWydcbiddID0gZmFzdG1hcF9uZXdsaW5lOworKworKwkgICAgLyogUmV0dXJuIGlmIHdlIGhhdmUgYWxyZWFkeSBzZXQgYGNhbl9iZV9udWxsJzsgaWYgd2UgaGF2ZSwKKysJICAgICAgIHRoZW4gdGhlIGZhc3RtYXAgaXMgaXJyZWxldmFudC4gIFNvbWV0aGluZydzIHdyb25nIGhlcmUuICAqLworKwkgICAgZWxzZSBpZiAoYnVmcC0+Y2FuX2JlX251bGwpCisrCSAgICAgIGdvdG8gZG9uZTsKKysKKysJICAgIC8qIE90aGVyd2lzZSwgaGF2ZSB0byBjaGVjayBhbHRlcm5hdGl2ZSBwYXRocy4gICovCisrCSAgICBicmVhazsKKysJICB9CisrCisrI2lmZGVmIGVtYWNzCisrICAgICAgICBjYXNlIHN5bnRheHNwZWM6CisrCSAgayA9ICpwKys7CisrCSAgZm9yIChqID0gMDsgaiA8ICgxIDw8IEJZVEVXSURUSCk7IGorKykKKysJICAgIGlmIChTWU5UQVggKGopID09IChlbnVtIHN5bnRheGNvZGUpIGspCisrCSAgICAgIGZhc3RtYXBbal0gPSAxOworKwkgIGJyZWFrOworKworKworKwljYXNlIG5vdHN5bnRheHNwZWM6CisrCSAgayA9ICpwKys7CisrCSAgZm9yIChqID0gMDsgaiA8ICgxIDw8IEJZVEVXSURUSCk7IGorKykKKysJICAgIGlmIChTWU5UQVggKGopICE9IChlbnVtIHN5bnRheGNvZGUpIGspCisrCSAgICAgIGZhc3RtYXBbal0gPSAxOworKwkgIGJyZWFrOworKworKworKyAgICAgIC8qIEFsbCBjYXNlcyBhZnRlciB0aGlzIG1hdGNoIHRoZSBlbXB0eSBzdHJpbmcuICBUaGVzZSBlbmQgd2l0aAorKyAgICAgICAgIGBjb250aW51ZScuICAqLworKworKworKwljYXNlIGJlZm9yZV9kb3Q6CisrCWNhc2UgYXRfZG90OgorKwljYXNlIGFmdGVyX2RvdDoKKysgICAgICAgICAgY29udGludWU7CisrI2VuZGlmIC8qIGVtYWNzICovCisrCisrCisrICAgICAgICBjYXNlIG5vX29wOgorKyAgICAgICAgY2FzZSBiZWdsaW5lOgorKyAgICAgICAgY2FzZSBlbmRsaW5lOgorKwljYXNlIGJlZ2J1ZjoKKysJY2FzZSBlbmRidWY6CisrCWNhc2Ugd29yZGJvdW5kOgorKwljYXNlIG5vdHdvcmRib3VuZDoKKysJY2FzZSB3b3JkYmVnOgorKwljYXNlIHdvcmRlbmQ6CisrICAgICAgICBjYXNlIHB1c2hfZHVtbXlfZmFpbHVyZToKKysgICAgICAgICAgY29udGludWU7CisrCisrCisrCWNhc2UganVtcF9uOgorKyAgICAgICAgY2FzZSBwb3BfZmFpbHVyZV9qdW1wOgorKwljYXNlIG1heWJlX3BvcF9qdW1wOgorKwljYXNlIGp1bXA6CisrICAgICAgICBjYXNlIGp1bXBfcGFzdF9hbHQ6CisrCWNhc2UgZHVtbXlfZmFpbHVyZV9qdW1wOgorKyAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAoaiwgcCk7CisrCSAgcCArPSBqOworKwkgIGlmIChqID4gMCkKKysJICAgIGNvbnRpbnVlOworKworKyAgICAgICAgICAvKiBKdW1wIGJhY2t3YXJkIGltcGxpZXMgd2UganVzdCB3ZW50IHRocm91Z2ggdGhlIGJvZHkgb2YgYQorKyAgICAgICAgICAgICBsb29wIGFuZCBtYXRjaGVkIG5vdGhpbmcuICBPcGNvZGUganVtcGVkIHRvIHNob3VsZCBiZQorKyAgICAgICAgICAgICBgb25fZmFpbHVyZV9qdW1wJyBvciBgc3VjY2VlZF9uJy4gIEp1c3QgdHJlYXQgaXQgbGlrZSBhbgorKyAgICAgICAgICAgICBvcmRpbmFyeSBqdW1wLiAgRm9yIGEgKiBsb29wLCBpdCBoYXMgcHVzaGVkIGl0cyBmYWlsdXJlCisrICAgICAgICAgICAgIHBvaW50IGFscmVhZHk7IGlmIHNvLCBkaXNjYXJkIHRoYXQgYXMgcmVkdW5kYW50LiAgKi8KKysgICAgICAgICAgaWYgKChyZV9vcGNvZGVfdCkgKnAgIT0gb25fZmFpbHVyZV9qdW1wCisrCSAgICAgICYmIChyZV9vcGNvZGVfdCkgKnAgIT0gc3VjY2VlZF9uKQorKwkgICAgY29udGludWU7CisrCisrICAgICAgICAgIHArKzsKKysgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKGosIHApOworKyAgICAgICAgICBwICs9IGo7CisrCisrICAgICAgICAgIC8qIElmIHdoYXQncyBvbiB0aGUgc3RhY2sgaXMgd2hlcmUgd2UgYXJlIG5vdywgcG9wIGl0LiAgKi8KKysgICAgICAgICAgaWYgKCFGQUlMX1NUQUNLX0VNUFRZICgpCisrCSAgICAgICYmIGZhaWxfc3RhY2suc3RhY2tbZmFpbF9zdGFjay5hdmFpbCAtIDFdLnBvaW50ZXIgPT0gcCkKKysgICAgICAgICAgICBmYWlsX3N0YWNrLmF2YWlsLS07CisrCisrICAgICAgICAgIGNvbnRpbnVlOworKworKworKyAgICAgICAgY2FzZSBvbl9mYWlsdXJlX2p1bXA6CisrICAgICAgICBjYXNlIG9uX2ZhaWx1cmVfa2VlcF9zdHJpbmdfanVtcDoKKysJaGFuZGxlX29uX2ZhaWx1cmVfanVtcDoKKysgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKGosIHApOworKworKyAgICAgICAgICAvKiBGb3Igc29tZSBwYXR0ZXJucywgZS5nLiwgYChhPyk/JywgYHAraicgaGVyZSBwb2ludHMgdG8gdGhlCisrICAgICAgICAgICAgIGVuZCBvZiB0aGUgcGF0dGVybi4gIFdlIGRvbid0IHdhbnQgdG8gcHVzaCBzdWNoIGEgcG9pbnQsCisrICAgICAgICAgICAgIHNpbmNlIHdoZW4gd2UgcmVzdG9yZSBpdCBhYm92ZSwgZW50ZXJpbmcgdGhlIHN3aXRjaCB3aWxsCisrICAgICAgICAgICAgIGluY3JlbWVudCBgcCcgcGFzdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLiAgV2UgZG9uJ3QgbmVlZAorKyAgICAgICAgICAgICB0byBwdXNoIHN1Y2ggYSBwb2ludCBzaW5jZSB3ZSBvYnZpb3VzbHkgd29uJ3QgZmluZCBhbnkgbW9yZQorKyAgICAgICAgICAgICBmYXN0bWFwIGVudHJpZXMgYmV5b25kIGBwZW5kJy4gIFN1Y2ggYSBwYXR0ZXJuIGNhbiBtYXRjaAorKyAgICAgICAgICAgICB0aGUgbnVsbCBzdHJpbmcsIHRob3VnaC4gICovCisrICAgICAgICAgIGlmIChwICsgaiA8IHBlbmQpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgaWYgKCFQVVNIX1BBVFRFUk5fT1AgKHAgKyBqLCBmYWlsX3N0YWNrKSkKKysJCXsKKysJCSAgUkVTRVRfRkFJTF9TVEFDSyAoKTsKKysJCSAgcmV0dXJuIC0yOworKwkJfQorKyAgICAgICAgICAgIH0KKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGJ1ZnAtPmNhbl9iZV9udWxsID0gMTsKKysKKysgICAgICAgICAgaWYgKHN1Y2NlZWRfbl9wKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChrLCBwKTsJLyogU2tpcCB0aGUgbi4gICovCisrICAgICAgICAgICAgICBzdWNjZWVkX25fcCA9IGZhbHNlOworKwkgICAgfQorKworKyAgICAgICAgICBjb250aW51ZTsKKysKKysKKysJY2FzZSBzdWNjZWVkX246CisrICAgICAgICAgIC8qIEdldCB0byB0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHN1Y2NlZWQuICAqLworKyAgICAgICAgICBwICs9IE9GRlNFVF9BRERSRVNTX1NJWkU7CisrCisrICAgICAgICAgIC8qIEluY3JlbWVudCBwIHBhc3QgdGhlIG4gZm9yIHdoZW4gayAhPSAwLiAgKi8KKysgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKGssIHApOworKyAgICAgICAgICBpZiAoayA9PSAwKQorKwkgICAgeworKyAgICAgICAgICAgICAgcCAtPSAyICogT0ZGU0VUX0FERFJFU1NfU0laRTsKKysgIAkgICAgICBzdWNjZWVkX25fcCA9IHRydWU7ICAvKiBTcGFnaGV0dGkgY29kZSBhbGVydC4gICovCisrICAgICAgICAgICAgICBnb3RvIGhhbmRsZV9vbl9mYWlsdXJlX2p1bXA7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICBjb250aW51ZTsKKysKKysKKysJY2FzZSBzZXRfbnVtYmVyX2F0OgorKyAgICAgICAgICBwICs9IDIgKiBPRkZTRVRfQUREUkVTU19TSVpFOworKyAgICAgICAgICBjb250aW51ZTsKKysKKysKKysJY2FzZSBzdGFydF9tZW1vcnk6CisrICAgICAgICBjYXNlIHN0b3BfbWVtb3J5OgorKwkgIHAgKz0gMjsKKysJICBjb250aW51ZTsKKysKKysKKysJZGVmYXVsdDoKKysgICAgICAgICAgYWJvcnQgKCk7IC8qIFdlIGhhdmUgbGlzdGVkIGFsbCB0aGUgY2FzZXMuICAqLworKyAgICAgICAgfSAvKiBzd2l0Y2ggKnArKyAqLworKworKyAgICAgIC8qIEdldHRpbmcgaGVyZSBtZWFucyB3ZSBoYXZlIGZvdW5kIHRoZSBwb3NzaWJsZSBzdGFydGluZworKyAgICAgICAgIGNoYXJhY3RlcnMgZm9yIG9uZSBwYXRoIG9mIHRoZSBwYXR0ZXJuIC0tIGFuZCB0aGF0IHRoZSBlbXB0eQorKyAgICAgICAgIHN0cmluZyBkb2VzIG5vdCBtYXRjaC4gIFdlIG5lZWQgbm90IGZvbGxvdyB0aGlzIHBhdGggZnVydGhlci4KKysgICAgICAgICBJbnN0ZWFkLCBsb29rIGF0IHRoZSBuZXh0IGFsdGVybmF0aXZlIChyZW1lbWJlcmVkIG9uIHRoZQorKyAgICAgICAgIHN0YWNrKSwgb3IgcXVpdCBpZiBubyBtb3JlLiAgVGhlIHRlc3QgYXQgdGhlIHRvcCBvZiB0aGUgbG9vcAorKyAgICAgICAgIGRvZXMgdGhlc2UgdGhpbmdzLiAgKi8KKysgICAgICBwYXRoX2Nhbl9iZV9udWxsID0gZmFsc2U7CisrICAgICAgcCA9IHBlbmQ7CisrICAgIH0gLyogd2hpbGUgcCAqLworKworKyAgLyogU2V0IGBjYW5fYmVfbnVsbCcgZm9yIHRoZSBsYXN0IHBhdGggKGFsc28gdGhlIGZpcnN0IHBhdGgsIGlmIHRoZQorKyAgICAgcGF0dGVybiBpcyBlbXB0eSkuICAqLworKyAgYnVmcC0+Y2FuX2JlX251bGwgfD0gcGF0aF9jYW5fYmVfbnVsbDsKKysKKysgZG9uZToKKysgIFJFU0VUX0ZBSUxfU1RBQ0sgKCk7CisrICByZXR1cm4gMDsKKyt9CisrCisrI2Vsc2UgLyogbm90IElOU0lERV9SRUNVUlNJT04gKi8KKysKKytpbnQKKytyZV9jb21waWxlX2Zhc3RtYXAgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCkKKyt7CisrIyBpZmRlZiBNQlNfU1VQUE9SVAorKyAgaWYgKE1CX0NVUl9NQVggIT0gMSkKKysgICAgcmV0dXJuIHdjc19yZV9jb21waWxlX2Zhc3RtYXAoYnVmcCk7CisrICBlbHNlCisrIyBlbmRpZgorKyAgICByZXR1cm4gYnl0ZV9yZV9jb21waWxlX2Zhc3RtYXAoYnVmcCk7CisrfSAvKiByZV9jb21waWxlX2Zhc3RtYXAgKi8KKysjaWZkZWYgX0xJQkMKKyt3ZWFrX2FsaWFzIChfX3JlX2NvbXBpbGVfZmFzdG1hcCwgcmVfY29tcGlsZV9mYXN0bWFwKQorKyNlbmRpZgorKwwKKysKKysvKiBTZXQgUkVHUyB0byBob2xkIE5VTV9SRUdTIHJlZ2lzdGVycywgc3RvcmluZyB0aGVtIGluIFNUQVJUUyBhbmQKKysgICBFTkRTLiAgU3Vic2VxdWVudCBtYXRjaGVzIHVzaW5nIFBBVFRFUk5fQlVGRkVSIGFuZCBSRUdTIHdpbGwgdXNlCisrICAgdGhpcyBtZW1vcnkgZm9yIHJlY29yZGluZyByZWdpc3RlciBpbmZvcm1hdGlvbi4gIFNUQVJUUyBhbmQgRU5EUworKyAgIG11c3QgYmUgYWxsb2NhdGVkIHVzaW5nIHRoZSBtYWxsb2MgbGlicmFyeSByb3V0aW5lLCBhbmQgbXVzdCBlYWNoCisrICAgYmUgYXQgbGVhc3QgTlVNX1JFR1MgKiBzaXplb2YgKHJlZ29mZl90KSBieXRlcyBsb25nLgorKworKyAgIElmIE5VTV9SRUdTID09IDAsIHRoZW4gc3Vic2VxdWVudCBtYXRjaGVzIHNob3VsZCBhbGxvY2F0ZSB0aGVpciBvd24KKysgICByZWdpc3RlciBkYXRhLgorKworKyAgIFVubGVzcyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIGZpcnN0IHNlYXJjaCBvciBtYXRjaCB1c2luZworKyAgIFBBVFRFUk5fQlVGRkVSIHdpbGwgYWxsb2NhdGUgaXRzIG93biByZWdpc3RlciBkYXRhLCB3aXRob3V0CisrICAgZnJlZWluZyB0aGUgb2xkIGRhdGEuICAqLworKworK3ZvaWQKKytyZV9zZXRfcmVnaXN0ZXJzIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisrICAgICAgICAgICAgICAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywgdW5zaWduZWQgbnVtX3JlZ3MsCisrICAgICAgICAgICAgICAgICAgcmVnb2ZmX3QgKnN0YXJ0cywgcmVnb2ZmX3QgKmVuZHMpCisreworKyAgaWYgKG51bV9yZWdzKQorKyAgICB7CisrICAgICAgYnVmcC0+cmVnc19hbGxvY2F0ZWQgPSBSRUdTX1JFQUxMT0NBVEU7CisrICAgICAgcmVncy0+bnVtX3JlZ3MgPSBudW1fcmVnczsKKysgICAgICByZWdzLT5zdGFydCA9IHN0YXJ0czsKKysgICAgICByZWdzLT5lbmQgPSBlbmRzOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBidWZwLT5yZWdzX2FsbG9jYXRlZCA9IFJFR1NfVU5BTExPQ0FURUQ7CisrICAgICAgcmVncy0+bnVtX3JlZ3MgPSAwOworKyAgICAgIHJlZ3MtPnN0YXJ0ID0gcmVncy0+ZW5kID0gKHJlZ29mZl90ICopIDA7CisrICAgIH0KKyt9CisrI2lmZGVmIF9MSUJDCisrd2Vha19hbGlhcyAoX19yZV9zZXRfcmVnaXN0ZXJzLCByZV9zZXRfcmVnaXN0ZXJzKQorKyNlbmRpZgorKwwKKysvKiBTZWFyY2hpbmcgcm91dGluZXMuICAqLworKworKy8qIExpa2UgcmVfc2VhcmNoXzIsIGJlbG93LCBidXQgb25seSBvbmUgc3RyaW5nIGlzIHNwZWNpZmllZCwgYW5kCisrICAgZG9lc24ndCBsZXQgeW91IHNheSB3aGVyZSB0byBzdG9wIG1hdGNoaW5nLiAgKi8KKysKKytpbnQKKytyZV9zZWFyY2ggKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgc2l6ZSwKKysgICAgICAgICAgIGludCBzdGFydHBvcywgaW50IHJhbmdlLCBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzKQorK3sKKysgIHJldHVybiByZV9zZWFyY2hfMiAoYnVmcCwgTlVMTCwgMCwgc3RyaW5nLCBzaXplLCBzdGFydHBvcywgcmFuZ2UsCisrCQkgICAgICByZWdzLCBzaXplKTsKKyt9CisrI2lmZGVmIF9MSUJDCisrd2Vha19hbGlhcyAoX19yZV9zZWFyY2gsIHJlX3NlYXJjaCkKKysjZW5kaWYKKysKKysKKysvKiBVc2luZyB0aGUgY29tcGlsZWQgcGF0dGVybiBpbiBCVUZQLT5idWZmZXIsIGZpcnN0IHRyaWVzIHRvIG1hdGNoIHRoZQorKyAgIHZpcnR1YWwgY29uY2F0ZW5hdGlvbiBvZiBTVFJJTkcxIGFuZCBTVFJJTkcyLCBzdGFydGluZyBmaXJzdCBhdCBpbmRleAorKyAgIFNUQVJUUE9TLCB0aGVuIGF0IFNUQVJUUE9TICsgMSwgYW5kIHNvIG9uLgorKworKyAgIFNUUklORzEgYW5kIFNUUklORzIgaGF2ZSBsZW5ndGggU0laRTEgYW5kIFNJWkUyLCByZXNwZWN0aXZlbHkuCisrCisrICAgUkFOR0UgaXMgaG93IGZhciB0byBzY2FuIHdoaWxlIHRyeWluZyB0byBtYXRjaC4gIFJBTkdFID0gMCBtZWFucyB0cnkKKysgICBvbmx5IGF0IFNUQVJUUE9TOyBpbiBnZW5lcmFsLCB0aGUgbGFzdCBzdGFydCB0cmllZCBpcyBTVEFSVFBPUyArCisrICAgUkFOR0UuCisrCisrICAgSW4gUkVHUywgcmV0dXJuIHRoZSBpbmRpY2VzIG9mIHRoZSB2aXJ0dWFsIGNvbmNhdGVuYXRpb24gb2YgU1RSSU5HMQorKyAgIGFuZCBTVFJJTkcyIHRoYXQgbWF0Y2hlZCB0aGUgZW50aXJlIEJVRlAtPmJ1ZmZlciBhbmQgaXRzIGNvbnRhaW5lZAorKyAgIHN1YmV4cHJlc3Npb25zLgorKworKyAgIERvIG5vdCBjb25zaWRlciBtYXRjaGluZyBvbmUgcGFzdCB0aGUgaW5kZXggU1RPUCBpbiB0aGUgdmlydHVhbAorKyAgIGNvbmNhdGVuYXRpb24gb2YgU1RSSU5HMSBhbmQgU1RSSU5HMi4KKysKKysgICBXZSByZXR1cm4gZWl0aGVyIHRoZSBwb3NpdGlvbiBpbiB0aGUgc3RyaW5ncyBhdCB3aGljaCB0aGUgbWF0Y2ggd2FzCisrICAgZm91bmQsIC0xIGlmIG5vIG1hdGNoLCBvciAtMiBpZiBlcnJvciAoc3VjaCBhcyBmYWlsdXJlCisrICAgc3RhY2sgb3ZlcmZsb3cpLiAgKi8KKysKKytpbnQKKytyZV9zZWFyY2hfMiAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCBjb25zdCBjaGFyICpzdHJpbmcxLCBpbnQgc2l6ZTEsCisrICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZzIsIGludCBzaXplMiwgaW50IHN0YXJ0cG9zLCBpbnQgcmFuZ2UsCisrICAgICAgICAgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsIGludCBzdG9wKQorK3sKKysjIGlmZGVmIE1CU19TVVBQT1JUCisrICBpZiAoTUJfQ1VSX01BWCAhPSAxKQorKyAgICByZXR1cm4gd2NzX3JlX3NlYXJjaF8yIChidWZwLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwgc2l6ZTIsIHN0YXJ0cG9zLAorKwkJCSAgICByYW5nZSwgcmVncywgc3RvcCk7CisrICBlbHNlCisrIyBlbmRpZgorKyAgICByZXR1cm4gYnl0ZV9yZV9zZWFyY2hfMiAoYnVmcCwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsIHNpemUyLCBzdGFydHBvcywKKysJCQkgICAgIHJhbmdlLCByZWdzLCBzdG9wKTsKKyt9IC8qIHJlX3NlYXJjaF8yICovCisrI2lmZGVmIF9MSUJDCisrd2Vha19hbGlhcyAoX19yZV9zZWFyY2hfMiwgcmVfc2VhcmNoXzIpCisrI2VuZGlmCisrCisrI2VuZGlmIC8qIG5vdCBJTlNJREVfUkVDVVJTSU9OICovCisrCisrI2lmZGVmIElOU0lERV9SRUNVUlNJT04KKysKKysjaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFCisrIyBkZWZpbmUgRlJFRV9WQVIodmFyKSBpZiAodmFyKSBSRUdFWF9GUkVFICh2YXIpOyB2YXIgPSBOVUxMCisrI2Vsc2UKKysjIGRlZmluZSBGUkVFX1ZBUih2YXIpIGlmICh2YXIpIGZyZWUgKHZhcik7IHZhciA9IE5VTEwKKysjZW5kaWYKKysKKysjaWZkZWYgV0NIQVIKKysjIGRlZmluZSBNQVhfQUxMT0NBX1NJWkUJMjAwMAorKworKyMgZGVmaW5lIEZSRUVfV0NTX0JVRkZFUlMoKSBcCisrICBkbyB7CQkJCQkJCQkJICAgICAgXAorKyAgICBpZiAoc2l6ZTEgPiBNQVhfQUxMT0NBX1NJWkUpCQkJCQkgICAgICBcCisrICAgICAgewkJCQkJCQkJCSAgICAgIFwKKysJZnJlZSAod2NzX3N0cmluZzEpOwkJCQkJCSAgICAgIFwKKysJZnJlZSAobWJzX29mZnNldDEpOwkJCQkJCSAgICAgIFwKKysgICAgICB9CQkJCQkJCQkJICAgICAgXAorKyAgICBlbHNlCQkJCQkJCQkgICAgICBcCisrICAgICAgewkJCQkJCQkJCSAgICAgIFwKKysJRlJFRV9WQVIgKHdjc19zdHJpbmcxKTsJCQkJCQkgICAgICBcCisrCUZSRUVfVkFSIChtYnNfb2Zmc2V0MSk7CQkJCQkJICAgICAgXAorKyAgICAgIH0JCQkJCQkJCQkgICAgICBcCisrICAgIGlmIChzaXplMiA+IE1BWF9BTExPQ0FfU0laRSkgCQkJCQkgICAgICBcCisrICAgICAgewkJCQkJCQkJCSAgICAgIFwKKysJZnJlZSAod2NzX3N0cmluZzIpOwkJCQkJCSAgICAgIFwKKysJZnJlZSAobWJzX29mZnNldDIpOwkJCQkJCSAgICAgIFwKKysgICAgICB9CQkJCQkJCQkJICAgICAgXAorKyAgICBlbHNlCQkJCQkJCQkgICAgICBcCisrICAgICAgewkJCQkJCQkJCSAgICAgIFwKKysJRlJFRV9WQVIgKHdjc19zdHJpbmcyKTsJCQkJCQkgICAgICBcCisrCUZSRUVfVkFSIChtYnNfb2Zmc2V0Mik7CQkJCQkJICAgICAgXAorKyAgICAgIH0JCQkJCQkJCQkgICAgICBcCisrICB9IHdoaWxlICgwKQorKworKyNlbmRpZgorKworKworK3N0YXRpYyBpbnQKKytQUkVGSVgocmVfc2VhcmNoXzIpIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIGNvbnN0IGNoYXIgKnN0cmluZzEsCisrICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUxLCBjb25zdCBjaGFyICpzdHJpbmcyLCBpbnQgc2l6ZTIsCisrICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0cG9zLCBpbnQgcmFuZ2UsCisrICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywgaW50IHN0b3ApCisreworKyAgaW50IHZhbDsKKysgIHJlZ2lzdGVyIGNoYXIgKmZhc3RtYXAgPSBidWZwLT5mYXN0bWFwOworKyAgcmVnaXN0ZXIgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnNsYXRlID0gYnVmcC0+dHJhbnNsYXRlOworKyAgaW50IHRvdGFsX3NpemUgPSBzaXplMSArIHNpemUyOworKyAgaW50IGVuZHBvcyA9IHN0YXJ0cG9zICsgcmFuZ2U7CisrI2lmZGVmIFdDSEFSCisrICAvKiBXZSBuZWVkIHdjaGFyX3QqIGJ1ZmZlcnMgY29ycmVzcG9uZCB0byBjc3RyaW5nMSwgY3N0cmluZzIuICAqLworKyAgd2NoYXJfdCAqd2NzX3N0cmluZzEgPSBOVUxMLCAqd2NzX3N0cmluZzIgPSBOVUxMOworKyAgLyogV2UgbmVlZCB0aGUgc2l6ZSBvZiB3Y2hhcl90IGJ1ZmZlcnMgY29ycmVzcG9uZCB0byBjc2l6ZTEsIGNzaXplMi4gICovCisrICBpbnQgd2NzX3NpemUxID0gMCwgd2NzX3NpemUyID0gMDsKKysgIC8qIG9mZnNldCBidWZmZXIgZm9yIG9wdGltaXphdG9pbi4gU2VlIGNvbnZlcnRfbWJzX3RvX3djLiAgKi8KKysgIGludCAqbWJzX29mZnNldDEgPSBOVUxMLCAqbWJzX29mZnNldDIgPSBOVUxMOworKyAgLyogVGhleSBob2xkIHdoZXRoZXIgZWFjaCB3Y2hhcl90IGlzIGJpbmFyeSBkYXRhIG9yIG5vdC4gICovCisrICBjaGFyICppc19iaW5hcnkgPSBOVUxMOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKyAgLyogQ2hlY2sgZm9yIG91dC1vZi1yYW5nZSBTVEFSVFBPUy4gICovCisrICBpZiAoc3RhcnRwb3MgPCAwIHx8IHN0YXJ0cG9zID4gdG90YWxfc2l6ZSkKKysgICAgcmV0dXJuIC0xOworKworKyAgLyogRml4IHVwIFJBTkdFIGlmIGl0IG1pZ2h0IGV2ZW50dWFsbHkgdGFrZSB1cyBvdXRzaWRlCisrICAgICB0aGUgdmlydHVhbCBjb25jYXRlbmF0aW9uIG9mIFNUUklORzEgYW5kIFNUUklORzIuCisrICAgICBNYWtlIHN1cmUgd2Ugd29uJ3QgbW92ZSBTVEFSVFBPUyBiZWxvdyAwIG9yIGFib3ZlIFRPVEFMX1NJWkUuICAqLworKyAgaWYgKGVuZHBvcyA8IDApCisrICAgIHJhbmdlID0gMCAtIHN0YXJ0cG9zOworKyAgZWxzZSBpZiAoZW5kcG9zID4gdG90YWxfc2l6ZSkKKysgICAgcmFuZ2UgPSB0b3RhbF9zaXplIC0gc3RhcnRwb3M7CisrCisrICAvKiBJZiB0aGUgc2VhcmNoIGlzbid0IHRvIGJlIGEgYmFja3dhcmRzIG9uZSwgZG9uJ3Qgd2FzdGUgdGltZSBpbiBhCisrICAgICBzZWFyY2ggZm9yIGEgcGF0dGVybiB0aGF0IG11c3QgYmUgYW5jaG9yZWQuICAqLworKyAgaWYgKGJ1ZnAtPnVzZWQgPiAwICYmIHJhbmdlID4gMAorKyAgICAgICYmICgocmVfb3Bjb2RlX3QpIGJ1ZnAtPmJ1ZmZlclswXSA9PSBiZWdidWYKKysJICAvKiBgYmVnbGluZScgaXMgbGlrZSBgYmVnYnVmJyBpZiBpdCBjYW5ub3QgbWF0Y2ggYXQgbmV3bGluZXMuICAqLworKwkgIHx8ICgocmVfb3Bjb2RlX3QpIGJ1ZnAtPmJ1ZmZlclswXSA9PSBiZWdsaW5lCisrCSAgICAgICYmICFidWZwLT5uZXdsaW5lX2FuY2hvcikpKQorKyAgICB7CisrICAgICAgaWYgKHN0YXJ0cG9zID4gMCkKKysJcmV0dXJuIC0xOworKyAgICAgIGVsc2UKKysJcmFuZ2UgPSAxOworKyAgICB9CisrCisrI2lmZGVmIGVtYWNzCisrICAvKiBJbiBhIGZvcndhcmQgc2VhcmNoIGZvciBzb21ldGhpbmcgdGhhdCBzdGFydHMgd2l0aCBcPS4KKysgICAgIGRvbid0IGtlZXAgc2VhcmNoaW5nIHBhc3QgcG9pbnQuICAqLworKyAgaWYgKGJ1ZnAtPnVzZWQgPiAwICYmIChyZV9vcGNvZGVfdCkgYnVmcC0+YnVmZmVyWzBdID09IGF0X2RvdCAmJiByYW5nZSA+IDApCisrICAgIHsKKysgICAgICByYW5nZSA9IFBUIC0gc3RhcnRwb3M7CisrICAgICAgaWYgKHJhbmdlIDw9IDApCisrCXJldHVybiAtMTsKKysgICAgfQorKyNlbmRpZiAvKiBlbWFjcyAqLworKworKyAgLyogVXBkYXRlIHRoZSBmYXN0bWFwIG5vdyBpZiBub3QgY29ycmVjdCBhbHJlYWR5LiAgKi8KKysgIGlmIChmYXN0bWFwICYmICFidWZwLT5mYXN0bWFwX2FjY3VyYXRlKQorKyAgICBpZiAocmVfY29tcGlsZV9mYXN0bWFwIChidWZwKSA9PSAtMikKKysgICAgICByZXR1cm4gLTI7CisrCisrI2lmZGVmIFdDSEFSCisrICAvKiBBbGxvY2F0ZSB3Y2hhcl90IGFycmF5IGZvciB3Y3Nfc3RyaW5nMSBhbmQgd2NzX3N0cmluZzIgYW5kCisrICAgICBmaWxsIHRoZW0gd2l0aCBjb252ZXJ0ZWQgc3RyaW5nLiAgKi8KKysgIGlmIChzaXplMSAhPSAwKQorKyAgICB7CisrICAgICAgaWYgKHNpemUxID4gTUFYX0FMTE9DQV9TSVpFKQorKwl7CisrCSAgd2NzX3N0cmluZzEgPSBUQUxMT0MgKHNpemUxICsgMSwgQ0hBUl9UKTsKKysJICBtYnNfb2Zmc2V0MSA9IFRBTExPQyAoc2l6ZTEgKyAxLCBpbnQpOworKwkgIGlzX2JpbmFyeSA9IFRBTExPQyAoc2l6ZTEgKyAxLCBjaGFyKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIHdjc19zdHJpbmcxID0gUkVHRVhfVEFMTE9DIChzaXplMSArIDEsIENIQVJfVCk7CisrCSAgbWJzX29mZnNldDEgPSBSRUdFWF9UQUxMT0MgKHNpemUxICsgMSwgaW50KTsKKysJICBpc19iaW5hcnkgPSBSRUdFWF9UQUxMT0MgKHNpemUxICsgMSwgY2hhcik7CisrCX0KKysgICAgICBpZiAoIXdjc19zdHJpbmcxIHx8ICFtYnNfb2Zmc2V0MSB8fCAhaXNfYmluYXJ5KQorKwl7CisrCSAgaWYgKHNpemUxID4gTUFYX0FMTE9DQV9TSVpFKQorKwkgICAgeworKwkgICAgICBmcmVlICh3Y3Nfc3RyaW5nMSk7CisrCSAgICAgIGZyZWUgKG1ic19vZmZzZXQxKTsKKysJICAgICAgZnJlZSAoaXNfYmluYXJ5KTsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIEZSRUVfVkFSICh3Y3Nfc3RyaW5nMSk7CisrCSAgICAgIEZSRUVfVkFSIChtYnNfb2Zmc2V0MSk7CisrCSAgICAgIEZSRUVfVkFSIChpc19iaW5hcnkpOworKwkgICAgfQorKwkgIHJldHVybiAtMjsKKysJfQorKyAgICAgIHdjc19zaXplMSA9IGNvbnZlcnRfbWJzX3RvX3djcyh3Y3Nfc3RyaW5nMSwgc3RyaW5nMSwgc2l6ZTEsCisrCQkJCSAgICAgbWJzX29mZnNldDEsIGlzX2JpbmFyeSk7CisrICAgICAgd2NzX3N0cmluZzFbd2NzX3NpemUxXSA9IEwnXDAnOyAvKiBmb3IgYSBzZW50aW5lbCAgKi8KKysgICAgICBpZiAoc2l6ZTEgPiBNQVhfQUxMT0NBX1NJWkUpCisrCWZyZWUgKGlzX2JpbmFyeSk7CisrICAgICAgZWxzZQorKwlGUkVFX1ZBUiAoaXNfYmluYXJ5KTsKKysgICAgfQorKyAgaWYgKHNpemUyICE9IDApCisrICAgIHsKKysgICAgICBpZiAoc2l6ZTIgPiBNQVhfQUxMT0NBX1NJWkUpCisrCXsKKysJICB3Y3Nfc3RyaW5nMiA9IFRBTExPQyAoc2l6ZTIgKyAxLCBDSEFSX1QpOworKwkgIG1ic19vZmZzZXQyID0gVEFMTE9DIChzaXplMiArIDEsIGludCk7CisrCSAgaXNfYmluYXJ5ID0gVEFMTE9DIChzaXplMiArIDEsIGNoYXIpOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgd2NzX3N0cmluZzIgPSBSRUdFWF9UQUxMT0MgKHNpemUyICsgMSwgQ0hBUl9UKTsKKysJICBtYnNfb2Zmc2V0MiA9IFJFR0VYX1RBTExPQyAoc2l6ZTIgKyAxLCBpbnQpOworKwkgIGlzX2JpbmFyeSA9IFJFR0VYX1RBTExPQyAoc2l6ZTIgKyAxLCBjaGFyKTsKKysJfQorKyAgICAgIGlmICghd2NzX3N0cmluZzIgfHwgIW1ic19vZmZzZXQyIHx8ICFpc19iaW5hcnkpCisrCXsKKysJICBGUkVFX1dDU19CVUZGRVJTICgpOworKwkgIGlmIChzaXplMiA+IE1BWF9BTExPQ0FfU0laRSkKKysJICAgIGZyZWUgKGlzX2JpbmFyeSk7CisrCSAgZWxzZQorKwkgICAgRlJFRV9WQVIgKGlzX2JpbmFyeSk7CisrCSAgcmV0dXJuIC0yOworKwl9CisrICAgICAgd2NzX3NpemUyID0gY29udmVydF9tYnNfdG9fd2NzKHdjc19zdHJpbmcyLCBzdHJpbmcyLCBzaXplMiwKKysJCQkJICAgICBtYnNfb2Zmc2V0MiwgaXNfYmluYXJ5KTsKKysgICAgICB3Y3Nfc3RyaW5nMlt3Y3Nfc2l6ZTJdID0gTCdcMCc7IC8qIGZvciBhIHNlbnRpbmVsICAqLworKyAgICAgIGlmIChzaXplMiA+IE1BWF9BTExPQ0FfU0laRSkKKysJZnJlZSAoaXNfYmluYXJ5KTsKKysgICAgICBlbHNlCisrCUZSRUVfVkFSIChpc19iaW5hcnkpOworKyAgICB9CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrCisrICAvKiBMb29wIHRocm91Z2ggdGhlIHN0cmluZywgbG9va2luZyBmb3IgYSBwbGFjZSB0byBzdGFydCBtYXRjaGluZy4gICovCisrICBmb3IgKDs7KQorKyAgICB7CisrICAgICAgLyogSWYgYSBmYXN0bWFwIGlzIHN1cHBsaWVkLCBza2lwIHF1aWNrbHkgb3ZlciBjaGFyYWN0ZXJzIHRoYXQKKysgICAgICAgICBjYW5ub3QgYmUgdGhlIHN0YXJ0IG9mIGEgbWF0Y2guICBJZiB0aGUgcGF0dGVybiBjYW4gbWF0Y2ggdGhlCisrICAgICAgICAgbnVsbCBzdHJpbmcsIGhvd2V2ZXIsIHdlIGRvbid0IG5lZWQgdG8gc2tpcCBjaGFyYWN0ZXJzOyB3ZSB3YW50CisrICAgICAgICAgdGhlIGZpcnN0IG51bGwgc3RyaW5nLiAgKi8KKysgICAgICBpZiAoZmFzdG1hcCAmJiBzdGFydHBvcyA8IHRvdGFsX3NpemUgJiYgIWJ1ZnAtPmNhbl9iZV9udWxsKQorKwl7CisrCSAgaWYgKHJhbmdlID4gMCkJLyogU2VhcmNoaW5nIGZvcndhcmRzLiAgKi8KKysJICAgIHsKKysJICAgICAgcmVnaXN0ZXIgY29uc3QgY2hhciAqZDsKKysJICAgICAgcmVnaXN0ZXIgaW50IGxpbSA9IDA7CisrCSAgICAgIGludCBpcmFuZ2UgPSByYW5nZTsKKysKKysgICAgICAgICAgICAgIGlmIChzdGFydHBvcyA8IHNpemUxICYmIHN0YXJ0cG9zICsgcmFuZ2UgPj0gc2l6ZTEpCisrICAgICAgICAgICAgICAgIGxpbSA9IHJhbmdlIC0gKHNpemUxIC0gc3RhcnRwb3MpOworKworKwkgICAgICBkID0gKHN0YXJ0cG9zID49IHNpemUxID8gc3RyaW5nMiAtIHNpemUxIDogc3RyaW5nMSkgKyBzdGFydHBvczsKKysKKysgICAgICAgICAgICAgIC8qIFdyaXR0ZW4gb3V0IGFzIGFuIGlmLWVsc2UgdG8gYXZvaWQgdGVzdGluZyBgdHJhbnNsYXRlJworKyAgICAgICAgICAgICAgICAgaW5zaWRlIHRoZSBsb29wLiAgKi8KKysJICAgICAgaWYgKHRyYW5zbGF0ZSkKKysgICAgICAgICAgICAgICAgd2hpbGUgKHJhbmdlID4gbGltCisrICAgICAgICAgICAgICAgICAgICAgICAmJiAhZmFzdG1hcFsodW5zaWduZWQgY2hhcikKKysJCQkJICAgdHJhbnNsYXRlWyh1bnNpZ25lZCBjaGFyKSAqZCsrXV0pCisrICAgICAgICAgICAgICAgICAgcmFuZ2UtLTsKKysJICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICB3aGlsZSAocmFuZ2UgPiBsaW0gJiYgIWZhc3RtYXBbKHVuc2lnbmVkIGNoYXIpICpkKytdKQorKyAgICAgICAgICAgICAgICAgIHJhbmdlLS07CisrCisrCSAgICAgIHN0YXJ0cG9zICs9IGlyYW5nZSAtIHJhbmdlOworKwkgICAgfQorKwkgIGVsc2UJCQkJLyogU2VhcmNoaW5nIGJhY2t3YXJkcy4gICovCisrCSAgICB7CisrCSAgICAgIHJlZ2lzdGVyIENIQVJfVCBjID0gKHNpemUxID09IDAgfHwgc3RhcnRwb3MgPj0gc2l6ZTEKKysJCQkJICAgICAgPyBzdHJpbmcyW3N0YXJ0cG9zIC0gc2l6ZTFdCisrCQkJCSAgICAgIDogc3RyaW5nMVtzdGFydHBvc10pOworKworKwkgICAgICBpZiAoIWZhc3RtYXBbKHVuc2lnbmVkIGNoYXIpIFRSQU5TTEFURSAoYyldKQorKwkJZ290byBhZHZhbmNlOworKwkgICAgfQorKwl9CisrCisrICAgICAgLyogSWYgY2FuJ3QgbWF0Y2ggdGhlIG51bGwgc3RyaW5nLCBhbmQgdGhhdCdzIGFsbCB3ZSBoYXZlIGxlZnQsIGZhaWwuICAqLworKyAgICAgIGlmIChyYW5nZSA+PSAwICYmIHN0YXJ0cG9zID09IHRvdGFsX3NpemUgJiYgZmFzdG1hcAorKyAgICAgICAgICAmJiAhYnVmcC0+Y2FuX2JlX251bGwpCisrICAgICAgIHsKKysjaWZkZWYgV0NIQVIKKysgICAgICAgICBGUkVFX1dDU19CVUZGRVJTICgpOworKyNlbmRpZgorKyAgICAgICAgIHJldHVybiAtMTsKKysgICAgICAgfQorKworKyNpZmRlZiBXQ0hBUgorKyAgICAgIHZhbCA9IHdjc19yZV9tYXRjaF8yX2ludGVybmFsIChidWZwLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwKKysJCQkJICAgICBzaXplMiwgc3RhcnRwb3MsIHJlZ3MsIHN0b3AsCisrCQkJCSAgICAgd2NzX3N0cmluZzEsIHdjc19zaXplMSwKKysJCQkJICAgICB3Y3Nfc3RyaW5nMiwgd2NzX3NpemUyLAorKwkJCQkgICAgIG1ic19vZmZzZXQxLCBtYnNfb2Zmc2V0Mik7CisrI2Vsc2UgLyogQllURSAqLworKyAgICAgIHZhbCA9IGJ5dGVfcmVfbWF0Y2hfMl9pbnRlcm5hbCAoYnVmcCwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsCisrCQkJCSAgICAgIHNpemUyLCBzdGFydHBvcywgcmVncywgc3RvcCk7CisrI2VuZGlmIC8qIEJZVEUgKi8KKysKKysjaWZuZGVmIFJFR0VYX01BTExPQworKyMgaWZkZWYgQ19BTExPQ0EKKysgICAgICBhbGxvY2EgKDApOworKyMgZW5kaWYKKysjZW5kaWYKKysKKysgICAgICBpZiAodmFsID49IDApCisrCXsKKysjaWZkZWYgV0NIQVIKKysJICBGUkVFX1dDU19CVUZGRVJTICgpOworKyNlbmRpZgorKwkgIHJldHVybiBzdGFydHBvczsKKysJfQorKworKyAgICAgIGlmICh2YWwgPT0gLTIpCisrCXsKKysjaWZkZWYgV0NIQVIKKysJICBGUkVFX1dDU19CVUZGRVJTICgpOworKyNlbmRpZgorKwkgIHJldHVybiAtMjsKKysJfQorKworKyAgICBhZHZhbmNlOgorKyAgICAgIGlmICghcmFuZ2UpCisrICAgICAgICBicmVhazsKKysgICAgICBlbHNlIGlmIChyYW5nZSA+IDApCisrICAgICAgICB7CisrICAgICAgICAgIHJhbmdlLS07CisrICAgICAgICAgIHN0YXJ0cG9zKys7CisrICAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICByYW5nZSsrOworKyAgICAgICAgICBzdGFydHBvcy0tOworKyAgICAgICAgfQorKyAgICB9CisrI2lmZGVmIFdDSEFSCisrICBGUkVFX1dDU19CVUZGRVJTICgpOworKyNlbmRpZgorKyAgcmV0dXJuIC0xOworK30KKysKKysjaWZkZWYgV0NIQVIKKysvKiBUaGlzIGNvbnZlcnRzIFBUUiwgYSBwb2ludGVyIGludG8gb25lIG9mIHRoZSBzZWFyY2ggd2NoYXJfdCBzdHJpbmdzCisrICAgYHN0cmluZzEnIGFuZCBgc3RyaW5nMicgaW50byBhbiBtdWx0aWJ5dGUgc3RyaW5nIG9mZnNldCBmcm9tIHRoZQorKyAgIGJlZ2lubmluZyBvZiB0aGF0IHN0cmluZy4gV2UgdXNlIG1ic19vZmZzZXQgdG8gb3B0aW1pemUuCisrICAgU2VlIGNvbnZlcnRfbWJzX3RvX3djcy4gICovCisrIyBkZWZpbmUgUE9JTlRFUl9UT19PRkZTRVQocHRyKQkJCQkJCVwKKysgIChGSVJTVF9TVFJJTkdfUCAocHRyKQkJCQkJCQlcCisrICAgPyAoKHJlZ29mZl90KShtYnNfb2Zmc2V0MSAhPSBOVUxMPyBtYnNfb2Zmc2V0MVsocHRyKS1zdHJpbmcxXSA6IDApKQlcCisrICAgOiAoKHJlZ29mZl90KSgobWJzX29mZnNldDIgIT0gTlVMTD8gbWJzX29mZnNldDJbKHB0ciktc3RyaW5nMl0gOiAwKQlcCisrCQkgKyBjc2l6ZTEpKSkKKysjZWxzZSAvKiBCWVRFICovCisrLyogVGhpcyBjb252ZXJ0cyBQVFIsIGEgcG9pbnRlciBpbnRvIG9uZSBvZiB0aGUgc2VhcmNoIHN0cmluZ3MgYHN0cmluZzEnCisrICAgYW5kIGBzdHJpbmcyJyBpbnRvIGFuIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhhdCBzdHJpbmcuICAqLworKyMgZGVmaW5lIFBPSU5URVJfVE9fT0ZGU0VUKHB0cikJCQlcCisrICAoRklSU1RfU1RSSU5HX1AgKHB0cikJCQkJXAorKyAgID8gKChyZWdvZmZfdCkgKChwdHIpIC0gc3RyaW5nMSkpCQlcCisrICAgOiAoKHJlZ29mZl90KSAoKHB0cikgLSBzdHJpbmcyICsgc2l6ZTEpKSkKKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysvKiBNYWNyb3MgZm9yIGRlYWxpbmcgd2l0aCB0aGUgc3BsaXQgc3RyaW5ncyBpbiByZV9tYXRjaF8yLiAgKi8KKysKKysjZGVmaW5lIE1BVENISU5HX0lOX0ZJUlNUX1NUUklORyAgKGRlbmQgPT0gZW5kX21hdGNoXzEpCisrCisrLyogQ2FsbCBiZWZvcmUgZmV0Y2hpbmcgYSBjaGFyYWN0ZXIgd2l0aCAqZC4gIFRoaXMgc3dpdGNoZXMgb3ZlciB0bworKyAgIHN0cmluZzIgaWYgbmVjZXNzYXJ5LiAgKi8KKysjZGVmaW5lIFBSRUZFVENIKCkJCQkJCQkJXAorKyAgd2hpbGUgKGQgPT0gZGVuZCkJCQkJCQkgICAgCVwKKysgICAgewkJCQkJCQkJCVwKKysgICAgICAvKiBFbmQgb2Ygc3RyaW5nMiA9PiBmYWlsLiAgKi8JCQkJCVwKKysgICAgICBpZiAoZGVuZCA9PSBlbmRfbWF0Y2hfMikgCQkJCQkJXAorKyAgICAgICAgZ290byBmYWlsOwkJCQkJCQlcCisrICAgICAgLyogRW5kIG9mIHN0cmluZzEgPT4gYWR2YW5jZSB0byBzdHJpbmcyLiAgKi8gCQkJXAorKyAgICAgIGQgPSBzdHJpbmcyOwkJCQkJCSAgICAgICAgXAorKyAgICAgIGRlbmQgPSBlbmRfbWF0Y2hfMjsJCQkJCQlcCisrICAgIH0KKysKKysvKiBUZXN0IGlmIGF0IHZlcnkgYmVnaW5uaW5nIG9yIGF0IHZlcnkgZW5kIG9mIHRoZSB2aXJ0dWFsIGNvbmNhdGVuYXRpb24KKysgICBvZiBgc3RyaW5nMScgYW5kIGBzdHJpbmcyJy4gIElmIG9ubHkgb25lIHN0cmluZywgaXQncyBgc3RyaW5nMicuICAqLworKyNkZWZpbmUgQVRfU1RSSU5HU19CRUcoZCkgKChkKSA9PSAoc2l6ZTEgPyBzdHJpbmcxIDogc3RyaW5nMikgfHwgIXNpemUyKQorKyNkZWZpbmUgQVRfU1RSSU5HU19FTkQoZCkgKChkKSA9PSBlbmQyKQorKworKworKy8qIFRlc3QgaWYgRCBwb2ludHMgdG8gYSBjaGFyYWN0ZXIgd2hpY2ggaXMgd29yZC1jb25zdGl0dWVudC4gIFdlIGhhdmUKKysgICB0d28gc3BlY2lhbCBjYXNlcyB0byBjaGVjayBmb3I6IGlmIHBhc3QgdGhlIGVuZCBvZiBzdHJpbmcxLCBsb29rIGF0CisrICAgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBzdHJpbmcyOyBhbmQgaWYgYmVmb3JlIHRoZSBiZWdpbm5pbmcgb2YKKysgICBzdHJpbmcyLCBsb29rIGF0IHRoZSBsYXN0IGNoYXJhY3RlciBpbiBzdHJpbmcxLiAgKi8KKysjaWZkZWYgV0NIQVIKKysvKiBVc2UgaW50ZXJuYXRpb25hbGl6ZWQgQVBJIGluc3RlYWQgb2YgU1lOVEFYLiAgKi8KKysjIGRlZmluZSBXT1JEQ0hBUl9QKGQpCQkJCQkJCVwKKysgIChpc3dhbG51bSAoKHdpbnRfdCkoKGQpID09IGVuZDEgPyAqc3RyaW5nMgkJCQlcCisrICAgICAgICAgICA6IChkKSA9PSBzdHJpbmcyIC0gMSA/ICooZW5kMSAtIDEpIDogKihkKSkpICE9IDAJCVwKKysgICB8fCAoKGQpID09IGVuZDEgPyAqc3RyaW5nMgkJCQkJCVwKKysgICAgICAgOiAoZCkgPT0gc3RyaW5nMiAtIDEgPyAqKGVuZDEgLSAxKSA6ICooZCkpID09IEwnXycpCisrI2Vsc2UgLyogQllURSAqLworKyMgZGVmaW5lIFdPUkRDSEFSX1AoZCkJCQkJCQkJXAorKyAgKFNZTlRBWCAoKGQpID09IGVuZDEgPyAqc3RyaW5nMgkJCQkJXAorKyAgICAgICAgICAgOiAoZCkgPT0gc3RyaW5nMiAtIDEgPyAqKGVuZDEgLSAxKSA6ICooZCkpCQkJXAorKyAgID09IFN3b3JkKQorKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKy8qIERpc2FibGVkIGR1ZSB0byBhIGNvbXBpbGVyIGJ1ZyAtLSBzZWUgY29tbWVudCBhdCBjYXNlIHdvcmRib3VuZCAqLworKyNpZiAwCisrLyogVGVzdCBpZiB0aGUgY2hhcmFjdGVyIGJlZm9yZSBEIGFuZCB0aGUgb25lIGF0IEQgZGlmZmVyIHdpdGggcmVzcGVjdAorKyAgIHRvIGJlaW5nIHdvcmQtY29uc3RpdHVlbnQuICAqLworKyNkZWZpbmUgQVRfV09SRF9CT1VOREFSWShkKQkJCQkJCVwKKysgIChBVF9TVFJJTkdTX0JFRyAoZCkgfHwgQVRfU1RSSU5HU19FTkQgKGQpCQkJCVwKKysgICB8fCBXT1JEQ0hBUl9QIChkIC0gMSkgIT0gV09SRENIQVJfUCAoZCkpCisrI2VuZGlmCisrCisrLyogRnJlZSBldmVyeXRoaW5nIHdlIG1hbGxvYy4gICovCisrI2lmZGVmIE1BVENIX01BWV9BTExPQ0FURQorKyMgaWZkZWYgV0NIQVIKKysjICBkZWZpbmUgRlJFRV9WQVJJQUJMRVMoKQkJCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIFJFR0VYX0ZSRUVfU1RBQ0sgKGZhaWxfc3RhY2suc3RhY2spOwkJCQlcCisrICAgIEZSRUVfVkFSIChyZWdzdGFydCk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAocmVnZW5kKTsJCQkJCQkJXAorKyAgICBGUkVFX1ZBUiAob2xkX3JlZ3N0YXJ0KTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChvbGRfcmVnZW5kKTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChiZXN0X3JlZ3N0YXJ0KTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChiZXN0X3JlZ2VuZCk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAocmVnX2luZm8pOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKHJlZ19kdW1teSk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAocmVnX2luZm9fZHVtbXkpOwkJCQkJCVwKKysgICAgaWYgKCFjYW50X2ZyZWVfd2NzX2J1ZikJCQkJCQlcCisrICAgICAgewkJCQkJCQkJCVwKKysgICAgICAgIEZSRUVfVkFSIChzdHJpbmcxKTsJCQkJCQlcCisrICAgICAgICBGUkVFX1ZBUiAoc3RyaW5nMik7CQkJCQkJXAorKyAgICAgICAgRlJFRV9WQVIgKG1ic19vZmZzZXQxKTsJCQkJCQlcCisrICAgICAgICBGUkVFX1ZBUiAobWJzX29mZnNldDIpOwkJCQkJCVwKKysgICAgICB9CQkJCQkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysjIGVsc2UgLyogQllURSAqLworKyMgIGRlZmluZSBGUkVFX1ZBUklBQkxFUygpCQkJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgUkVHRVhfRlJFRV9TVEFDSyAoZmFpbF9zdGFjay5zdGFjayk7CQkJCVwKKysgICAgRlJFRV9WQVIgKHJlZ3N0YXJ0KTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChyZWdlbmQpOwkJCQkJCQlcCisrICAgIEZSRUVfVkFSIChvbGRfcmVnc3RhcnQpOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKG9sZF9yZWdlbmQpOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKGJlc3RfcmVnc3RhcnQpOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKGJlc3RfcmVnZW5kKTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChyZWdfaW5mbyk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAocmVnX2R1bW15KTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChyZWdfaW5mb19kdW1teSk7CQkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysjIGVuZGlmIC8qIFdDSEFSICovCisrI2Vsc2UKKysjIGlmZGVmIFdDSEFSCisrIyAgZGVmaW5lIEZSRUVfVkFSSUFCTEVTKCkJCQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBpZiAoIWNhbnRfZnJlZV93Y3NfYnVmKQkJCQkJCVwKKysgICAgICB7CQkJCQkJCQkJXAorKyAgICAgICAgRlJFRV9WQVIgKHN0cmluZzEpOwkJCQkJCVwKKysgICAgICAgIEZSRUVfVkFSIChzdHJpbmcyKTsJCQkJCQlcCisrICAgICAgICBGUkVFX1ZBUiAobWJzX29mZnNldDEpOwkJCQkJCVwKKysgICAgICAgIEZSRUVfVkFSIChtYnNfb2Zmc2V0Mik7CQkJCQkJXAorKyAgICAgIH0JCQkJCQkJCQlcCisrICB9IHdoaWxlICgwKQorKyMgZWxzZSAvKiBCWVRFICovCisrIyAgZGVmaW5lIEZSRUVfVkFSSUFCTEVTKCkgKCh2b2lkKTApIC8qIERvIG5vdGhpbmchICBCdXQgaW5oaWJpdCBnY2Mgd2FybmluZy4gKi8KKysjIGVuZGlmIC8qIFdDSEFSICovCisrI2VuZGlmIC8qIG5vdCBNQVRDSF9NQVlfQUxMT0NBVEUgKi8KKysKKysvKiBUaGVzZSB2YWx1ZXMgbXVzdCBtZWV0IHNldmVyYWwgY29uc3RyYWludHMuICBUaGV5IG11c3Qgbm90IGJlIHZhbGlkCisrICAgcmVnaXN0ZXIgdmFsdWVzOyBzaW5jZSB3ZSBoYXZlIGEgbGltaXQgb2YgMjU1IHJlZ2lzdGVycyAoYmVjYXVzZQorKyAgIHdlIHVzZSBvbmx5IG9uZSBieXRlIGluIHRoZSBwYXR0ZXJuIGZvciB0aGUgcmVnaXN0ZXIgbnVtYmVyKSwgd2UgY2FuCisrICAgdXNlIG51bWJlcnMgbGFyZ2VyIHRoYW4gMjU1LiAgVGhleSBtdXN0IGRpZmZlciBieSAxLCBiZWNhdXNlIG9mCisrICAgTlVNX0ZBSUxVUkVfSVRFTVMgYWJvdmUuICBBbmQgdGhlIHZhbHVlIGZvciB0aGUgbG93ZXN0IHJlZ2lzdGVyIG11c3QKKysgICBiZSBsYXJnZXIgdGhhbiB0aGUgdmFsdWUgZm9yIHRoZSBoaWdoZXN0IHJlZ2lzdGVyLCBzbyB3ZSBkbyBub3QgdHJ5CisrICAgdG8gYWN0dWFsbHkgc2F2ZSBhbnkgcmVnaXN0ZXJzIHdoZW4gbm9uZSBhcmUgYWN0aXZlLiAgKi8KKysjZGVmaW5lIE5PX0hJR0hFU1RfQUNUSVZFX1JFRyAoMSA8PCBCWVRFV0lEVEgpCisrI2RlZmluZSBOT19MT1dFU1RfQUNUSVZFX1JFRyAoTk9fSElHSEVTVF9BQ1RJVkVfUkVHICsgMSkKKysMCisrI2Vsc2UgLyogbm90IElOU0lERV9SRUNVUlNJT04gKi8KKysvKiBNYXRjaGluZyByb3V0aW5lcy4gICovCisrCisrI2lmbmRlZiBlbWFjcyAgIC8qIEVtYWNzIG5ldmVyIHVzZXMgdGhpcy4gICovCisrLyogcmVfbWF0Y2ggaXMgbGlrZSByZV9tYXRjaF8yIGV4Y2VwdCBpdCB0YWtlcyBvbmx5IGEgc2luZ2xlIHN0cmluZy4gICovCisrCisraW50CisrcmVfbWF0Y2ggKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgY29uc3QgY2hhciAqc3RyaW5nLAorKyAgICAgICAgICBpbnQgc2l6ZSwgaW50IHBvcywgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncykKKyt7CisrICBpbnQgcmVzdWx0OworKyMgaWZkZWYgTUJTX1NVUFBPUlQKKysgIGlmIChNQl9DVVJfTUFYICE9IDEpCisrICAgIHJlc3VsdCA9IHdjc19yZV9tYXRjaF8yX2ludGVybmFsIChidWZwLCBOVUxMLCAwLCBzdHJpbmcsIHNpemUsCisrCQkJCSAgICAgIHBvcywgcmVncywgc2l6ZSwKKysJCQkJICAgICAgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCwgTlVMTCk7CisrICBlbHNlCisrIyBlbmRpZgorKyAgICByZXN1bHQgPSBieXRlX3JlX21hdGNoXzJfaW50ZXJuYWwgKGJ1ZnAsIE5VTEwsIDAsIHN0cmluZywgc2l6ZSwKKysJCQkJICBwb3MsIHJlZ3MsIHNpemUpOworKyMgaWZuZGVmIFJFR0VYX01BTExPQworKyMgIGlmZGVmIENfQUxMT0NBCisrICBhbGxvY2EgKDApOworKyMgIGVuZGlmCisrIyBlbmRpZgorKyAgcmV0dXJuIHJlc3VsdDsKKyt9CisrIyBpZmRlZiBfTElCQworK3dlYWtfYWxpYXMgKF9fcmVfbWF0Y2gsIHJlX21hdGNoKQorKyMgZW5kaWYKKysjZW5kaWYgLyogbm90IGVtYWNzICovCisrCisrI2VuZGlmIC8qIG5vdCBJTlNJREVfUkVDVVJTSU9OICovCisrCisrI2lmZGVmIElOU0lERV9SRUNVUlNJT04KKytzdGF0aWMgYm9vbGVhbiBQUkVGSVgoZ3JvdXBfbWF0Y2hfbnVsbF9zdHJpbmdfcCkgKFVDSEFSX1QgKipwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNIQVJfVCAqZW5kLAorKwkJCQkJUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkgKnJlZ19pbmZvKTsKKytzdGF0aWMgYm9vbGVhbiBQUkVGSVgoYWx0X21hdGNoX251bGxfc3RyaW5nX3ApIChVQ0hBUl9UICpwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDSEFSX1QgKmVuZCwKKysJCQkJCVBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpICpyZWdfaW5mbyk7Cisrc3RhdGljIGJvb2xlYW4gUFJFRklYKGNvbW1vbl9vcF9tYXRjaF9udWxsX3N0cmluZ19wKSAoVUNIQVJfVCAqKnAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNIQVJfVCAqZW5kLAorKwkJCQkJUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkgKnJlZ19pbmZvKTsKKytzdGF0aWMgaW50IFBSRUZJWChiY21wX3RyYW5zbGF0ZSkgKGNvbnN0IENIQVJfVCAqczEsIGNvbnN0IENIQVJfVCAqczIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBpbnQgbGVuLAorKwkJCQkgICBSRV9UUkFOU0xBVEVfVFlQRSB0cmFuc2xhdGUpOworKyNlbHNlIC8qIG5vdCBJTlNJREVfUkVDVVJTSU9OICovCisrCisrLyogcmVfbWF0Y2hfMiBtYXRjaGVzIHRoZSBjb21waWxlZCBwYXR0ZXJuIGluIEJVRlAgYWdhaW5zdCB0aGUKKysgICB0aGUgKHZpcnR1YWwpIGNvbmNhdGVuYXRpb24gb2YgU1RSSU5HMSBhbmQgU1RSSU5HMiAob2YgbGVuZ3RoIFNJWkUxCisrICAgYW5kIFNJWkUyLCByZXNwZWN0aXZlbHkpLiAgV2Ugc3RhcnQgbWF0Y2hpbmcgYXQgUE9TLCBhbmQgc3RvcAorKyAgIG1hdGNoaW5nIGF0IFNUT1AuCisrCisrICAgSWYgUkVHUyBpcyBub24tbnVsbCBhbmQgdGhlIGBub19zdWInIGZpZWxkIG9mIEJVRlAgaXMgbm9uemVybywgd2UKKysgICBzdG9yZSBvZmZzZXRzIGZvciB0aGUgc3Vic3RyaW5nIGVhY2ggZ3JvdXAgbWF0Y2hlZCBpbiBSRUdTLiAgU2VlIHRoZQorKyAgIGRvY3VtZW50YXRpb24gZm9yIGV4YWN0bHkgaG93IG1hbnkgZ3JvdXBzIHdlIGZpbGwuCisrCisrICAgV2UgcmV0dXJuIC0xIGlmIG5vIG1hdGNoLCAtMiBpZiBhbiBpbnRlcm5hbCBlcnJvciAoc3VjaCBhcyB0aGUKKysgICBmYWlsdXJlIHN0YWNrIG92ZXJmbG93aW5nKS4gIE90aGVyd2lzZSwgd2UgcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlCisrICAgbWF0Y2hlZCBzdWJzdHJpbmcuICAqLworKworK2ludAorK3JlX21hdGNoXzIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgY29uc3QgY2hhciAqc3RyaW5nMSwgaW50IHNpemUxLAorKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZzIsIGludCBzaXplMiwgaW50IHBvcywKKysgICAgICAgICAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLCBpbnQgc3RvcCkKKyt7CisrICBpbnQgcmVzdWx0OworKyMgaWZkZWYgTUJTX1NVUFBPUlQKKysgIGlmIChNQl9DVVJfTUFYICE9IDEpCisrICAgIHJlc3VsdCA9IHdjc19yZV9tYXRjaF8yX2ludGVybmFsIChidWZwLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwgc2l6ZTIsCisrCQkJCSAgICAgIHBvcywgcmVncywgc3RvcCwKKysJCQkJICAgICAgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCwgTlVMTCk7CisrICBlbHNlCisrIyBlbmRpZgorKyAgICByZXN1bHQgPSBieXRlX3JlX21hdGNoXzJfaW50ZXJuYWwgKGJ1ZnAsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLCBzaXplMiwKKysJCQkJICBwb3MsIHJlZ3MsIHN0b3ApOworKworKyNpZm5kZWYgUkVHRVhfTUFMTE9DCisrIyBpZmRlZiBDX0FMTE9DQQorKyAgYWxsb2NhICgwKTsKKysjIGVuZGlmCisrI2VuZGlmCisrICByZXR1cm4gcmVzdWx0OworK30KKysjaWZkZWYgX0xJQkMKKyt3ZWFrX2FsaWFzIChfX3JlX21hdGNoXzIsIHJlX21hdGNoXzIpCisrI2VuZGlmCisrCisrI2VuZGlmIC8qIG5vdCBJTlNJREVfUkVDVVJTSU9OICovCisrCisrI2lmZGVmIElOU0lERV9SRUNVUlNJT04KKysKKysjaWZkZWYgV0NIQVIKKytzdGF0aWMgaW50IGNvdW50X21ic19sZW5ndGggKGludCAqLCBpbnQpOworKworKy8qIFRoaXMgY2hlY2sgdGhlIHN1YnN0cmluZyAoZnJvbSAwLCB0byBsZW5ndGgpIG9mIHRoZSBtdWx0aWJ5dGUgc3RyaW5nLAorKyAgIHRvIHdoaWNoIG9mZnNldF9idWZmZXIgY29ycmVzcG9uZC4gQW5kIGNvdW50IGhvdyBtYW55IHdjaGFyX3RfY2hhcmFjdGVycworKyAgIHRoZSBzdWJzdHJpbmcgb2NjdXB5LiBXZSB1c2Ugb2Zmc2V0X2J1ZmZlciB0byBvcHRpbWl6YXRpb24uCisrICAgU2VlIGNvbnZlcnRfbWJzX3RvX3djcy4gICovCisrCisrc3RhdGljIGludAorK2NvdW50X21ic19sZW5ndGgoaW50ICpvZmZzZXRfYnVmZmVyLCBpbnQgbGVuZ3RoKQorK3sKKysgIGludCB1cHBlciwgbG93ZXI7CisrCisrICAvKiBDaGVjayB3aGV0aGVyIHRoZSBzaXplIGlzIHZhbGlkLiAgKi8KKysgIGlmIChsZW5ndGggPCAwKQorKyAgICByZXR1cm4gLTE7CisrCisrICBpZiAob2Zmc2V0X2J1ZmZlciA9PSBOVUxMKQorKyAgICByZXR1cm4gMDsKKysKKysgIC8qIElmIHRoZXJlIGFyZSBubyBtdWx0aWJ5dGUgY2hhcmFjdGVyLCBvZmZzZXRfYnVmZmVyW2ldID09IGkuCisrICAgT3B0bWl6ZSBmb3IgdGhpcyBjYXNlLiAgKi8KKysgIGlmIChvZmZzZXRfYnVmZmVyW2xlbmd0aF0gPT0gbGVuZ3RoKQorKyAgICByZXR1cm4gbGVuZ3RoOworKworKyAgLyogU2V0IHVwIHVwcGVyIHdpdGggbGVuZ3RoLiAoYmVjYXVzZSBmb3IgYWxsIGksIG9mZnNldF9idWZmZXJbaV0gPj0gaSkgICovCisrICB1cHBlciA9IGxlbmd0aDsKKysgIGxvd2VyID0gMDsKKysKKysgIHdoaWxlICh0cnVlKQorKyAgICB7CisrICAgICAgaW50IG1pZGRsZSA9IChsb3dlciArIHVwcGVyKSAvIDI7CisrICAgICAgaWYgKG1pZGRsZSA9PSBsb3dlciB8fCBtaWRkbGUgPT0gdXBwZXIpCisrCWJyZWFrOworKyAgICAgIGlmIChvZmZzZXRfYnVmZmVyW21pZGRsZV0gPiBsZW5ndGgpCisrCXVwcGVyID0gbWlkZGxlOworKyAgICAgIGVsc2UgaWYgKG9mZnNldF9idWZmZXJbbWlkZGxlXSA8IGxlbmd0aCkKKysJbG93ZXIgPSBtaWRkbGU7CisrICAgICAgZWxzZQorKwlyZXR1cm4gbWlkZGxlOworKyAgICB9CisrCisrICByZXR1cm4gLTE7CisrfQorKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKy8qIFRoaXMgaXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiBzbyB0aGF0IHdlIGNhbiBmb3JjZSBhbiBhbGxvY2EgY2xlYW51cAorKyAgIGFmdGVyd2FyZHMuICAqLworKyNpZmRlZiBXQ0hBUgorK3N0YXRpYyBpbnQKKyt3Y3NfcmVfbWF0Y2hfMl9pbnRlcm5hbCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjc3RyaW5nMSwgaW50IGNzaXplMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY3N0cmluZzIsIGludCBjc2l6ZTIsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3MsCisrCQkJIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdG9wLAorKyAgICAgLyogc3RyaW5nMSA9PSBzdHJpbmcyID09IE5VTEwgbWVhbnMgc3RyaW5nMS8yLCBzaXplMS8yIGFuZAorKwltYnNfb2Zmc2V0MS8yIG5lZWQgc2V0aW5nIHVwIGluIHRoaXMgZnVuY3Rpb24uICAqLworKyAgICAgLyogV2UgbmVlZCB3Y2hhcl90KiBidWZmZXJzIGNvcnJlc3BvbmQgdG8gY3N0cmluZzEsIGNzdHJpbmcyLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqc3RyaW5nMSwgaW50IHNpemUxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICpzdHJpbmcyLCBpbnQgc2l6ZTIsCisrICAgICAvKiBvZmZzZXQgYnVmZmVyIGZvciBvcHRpbWl6YXRvaW4uIFNlZSBjb252ZXJ0X21ic190b193Yy4gICovCisrCQkJIGludCAqbWJzX29mZnNldDEsIGludCAqbWJzX29mZnNldDIpCisrI2Vsc2UgLyogQllURSAqLworK3N0YXRpYyBpbnQKKytieXRlX3JlX21hdGNoXzJfaW50ZXJuYWwgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZzEsIGludCBzaXplMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZzIsIGludCBzaXplMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3MsCisrCQkJICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLCBpbnQgc3RvcCkKKysjZW5kaWYgLyogQllURSAqLworK3sKKysgIC8qIEdlbmVyYWwgdGVtcG9yYXJpZXMuICAqLworKyAgaW50IG1jbnQ7CisrICBVQ0hBUl9UICpwMTsKKysjaWZkZWYgV0NIQVIKKysgIC8qIFRoZXkgaG9sZCB3aGV0aGVyIGVhY2ggd2NoYXJfdCBpcyBiaW5hcnkgZGF0YSBvciBub3QuICAqLworKyAgY2hhciAqaXNfYmluYXJ5ID0gTlVMTDsKKysgIC8qIElmIHRydWUsIHdlIGNhbid0IGZyZWUgc3RyaW5nMS8yLCBtYnNfb2Zmc2V0MS8yLiAgKi8KKysgIGludCBjYW50X2ZyZWVfd2NzX2J1ZiA9IDE7CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrICAvKiBKdXN0IHBhc3QgdGhlIGVuZCBvZiB0aGUgY29ycmVzcG9uZGluZyBzdHJpbmcuICAqLworKyAgY29uc3QgQ0hBUl9UICplbmQxLCAqZW5kMjsKKysKKysgIC8qIFBvaW50ZXJzIGludG8gc3RyaW5nMSBhbmQgc3RyaW5nMiwganVzdCBwYXN0IHRoZSBsYXN0IGNoYXJhY3RlcnMgaW4KKysgICAgIGVhY2ggdG8gY29uc2lkZXIgbWF0Y2hpbmcuICAqLworKyAgY29uc3QgQ0hBUl9UICplbmRfbWF0Y2hfMSwgKmVuZF9tYXRjaF8yOworKworKyAgLyogV2hlcmUgd2UgYXJlIGluIHRoZSBkYXRhLCBhbmQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBzdHJpbmcuICAqLworKyAgY29uc3QgQ0hBUl9UICpkLCAqZGVuZDsKKysKKysgIC8qIFdoZXJlIHdlIGFyZSBpbiB0aGUgcGF0dGVybiwgYW5kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4uICAqLworKyNpZmRlZiBXQ0hBUgorKyAgVUNIQVJfVCAqcGF0dGVybiwgKnA7CisrICByZWdpc3RlciBVQ0hBUl9UICpwZW5kOworKyNlbHNlIC8qIEJZVEUgKi8KKysgIFVDSEFSX1QgKnAgPSBidWZwLT5idWZmZXI7CisrICByZWdpc3RlciBVQ0hBUl9UICpwZW5kID0gcCArIGJ1ZnAtPnVzZWQ7CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrICAvKiBNYXJrIHRoZSBvcGNvZGUganVzdCBhZnRlciBhIHN0YXJ0X21lbW9yeSwgc28gd2UgY2FuIHRlc3QgZm9yIGFuCisrICAgICBlbXB0eSBzdWJwYXR0ZXJuIHdoZW4gd2UgZ2V0IHRvIHRoZSBzdG9wX21lbW9yeS4gICovCisrICBVQ0hBUl9UICpqdXN0X3Bhc3Rfc3RhcnRfbWVtID0gMDsKKysKKysgIC8qIFdlIHVzZSB0aGlzIHRvIG1hcCBldmVyeSBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gICovCisrICBSRV9UUkFOU0xBVEVfVFlQRSB0cmFuc2xhdGUgPSBidWZwLT50cmFuc2xhdGU7CisrCisrICAvKiBGYWlsdXJlIHBvaW50IHN0YWNrLiAgRWFjaCBwbGFjZSB0aGF0IGNhbiBoYW5kbGUgYSBmYWlsdXJlIGZ1cnRoZXIKKysgICAgIGRvd24gdGhlIGxpbmUgcHVzaGVzIGEgZmFpbHVyZSBwb2ludCBvbiB0aGlzIHN0YWNrLiAgSXQgY29uc2lzdHMgb2YKKysgICAgIHJlc3RhcnQsIHJlZ2VuZCwgYW5kIHJlZ19pbmZvIGZvciBhbGwgcmVnaXN0ZXJzIGNvcnJlc3BvbmRpbmcgdG8KKysgICAgIHRoZSBzdWJleHByZXNzaW9ucyB3ZSdyZSBjdXJyZW50bHkgaW5zaWRlLCBwbHVzIHRoZSBudW1iZXIgb2Ygc3VjaAorKyAgICAgcmVnaXN0ZXJzLCBhbmQsIGZpbmFsbHksIHR3byBjaGFyIConcy4gIFRoZSBmaXJzdCBjaGFyICogaXMgd2hlcmUKKysgICAgIHRvIHJlc3VtZSBzY2FubmluZyB0aGUgcGF0dGVybjsgdGhlIHNlY29uZCBvbmUgaXMgd2hlcmUgdG8gcmVzdW1lCisrICAgICBzY2FubmluZyB0aGUgc3RyaW5ncy4gIElmIHRoZSBsYXR0ZXIgaXMgemVybywgdGhlIGZhaWx1cmUgcG9pbnQgaXMKKysgICAgIGEgYGBkdW1teScnOyBpZiBhIGZhaWx1cmUgaGFwcGVucyBhbmQgdGhlIGZhaWx1cmUgcG9pbnQgaXMgYSBkdW1teSwKKysgICAgIGl0IGdldHMgZGlzY2FyZGVkIGFuZCB0aGUgbmV4dCBuZXh0IG9uZSBpcyB0cmllZC4gICovCisrI2lmZGVmIE1BVENIX01BWV9BTExPQ0FURSAvKiBvdGhlcndpc2UsIHRoaXMgaXMgZ2xvYmFsLiAgKi8KKysgIFBSRUZJWChmYWlsX3N0YWNrX3R5cGUpIGZhaWxfc3RhY2s7CisrI2VuZGlmCisrI2lmZGVmIERFQlVHCisrICBzdGF0aWMgdW5zaWduZWQgZmFpbHVyZV9pZDsKKysgIHVuc2lnbmVkIG5mYWlsdXJlX3BvaW50c19wdXNoZWQgPSAwLCBuZmFpbHVyZV9wb2ludHNfcG9wcGVkID0gMDsKKysjZW5kaWYKKysKKysjaWZkZWYgUkVMX0FMTE9DCisrICAvKiBUaGlzIGhvbGRzIHRoZSBwb2ludGVyIHRvIHRoZSBmYWlsdXJlIHN0YWNrLCB3aGVuCisrICAgICBpdCBpcyBhbGxvY2F0ZWQgcmVsb2NhdGFibHkuICAqLworKyAgZmFpbF9zdGFja19lbHRfdCAqZmFpbHVyZV9zdGFja19wdHI7CisrI2VuZGlmCisrCisrICAvKiBXZSBmaWxsIGFsbCB0aGUgcmVnaXN0ZXJzIGludGVybmFsbHksIGluZGVwZW5kZW50IG9mIHdoYXQgd2UKKysgICAgIHJldHVybiwgZm9yIHVzZSBpbiBiYWNrcmVmZXJlbmNlcy4gIFRoZSBudW1iZXIgaGVyZSBpbmNsdWRlcworKyAgICAgYW4gZWxlbWVudCBmb3IgcmVnaXN0ZXIgemVyby4gICovCisrICBzaXplX3QgbnVtX3JlZ3MgPSBidWZwLT5yZV9uc3ViICsgMTsKKysKKysgIC8qIFRoZSBjdXJyZW50bHkgYWN0aXZlIHJlZ2lzdGVycy4gICovCisrICBhY3RpdmVfcmVnX3QgbG93ZXN0X2FjdGl2ZV9yZWcgPSBOT19MT1dFU1RfQUNUSVZFX1JFRzsKKysgIGFjdGl2ZV9yZWdfdCBoaWdoZXN0X2FjdGl2ZV9yZWcgPSBOT19ISUdIRVNUX0FDVElWRV9SRUc7CisrCisrICAvKiBJbmZvcm1hdGlvbiBvbiB0aGUgY29udGVudHMgb2YgcmVnaXN0ZXJzLiBUaGVzZSBhcmUgcG9pbnRlcnMgaW50bworKyAgICAgdGhlIGlucHV0IHN0cmluZ3M7IHRoZXkgcmVjb3JkIGp1c3Qgd2hhdCB3YXMgbWF0Y2hlZCAob24gdGhpcworKyAgICAgYXR0ZW1wdCkgYnkgYSBzdWJleHByZXNzaW9uIHBhcnQgb2YgdGhlIHBhdHRlcm4sIHRoYXQgaXMsIHRoZQorKyAgICAgcmVnbnVtLXRoIHJlZ3N0YXJ0IHBvaW50ZXIgcG9pbnRzIHRvIHdoZXJlIGluIHRoZSBwYXR0ZXJuIHdlIGJlZ2FuCisrICAgICBtYXRjaGluZyBhbmQgdGhlIHJlZ251bS10aCByZWdlbmQgcG9pbnRzIHRvIHJpZ2h0IGFmdGVyIHdoZXJlIHdlCisrICAgICBzdG9wcGVkIG1hdGNoaW5nIHRoZSByZWdudW0tdGggc3ViZXhwcmVzc2lvbi4gIChUaGUgemVyb3RoIHJlZ2lzdGVyCisrICAgICBrZWVwcyB0cmFjayBvZiB3aGF0IHRoZSB3aG9sZSBwYXR0ZXJuIG1hdGNoZXMuKSAgKi8KKysjaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFIC8qIG90aGVyd2lzZSwgdGhlc2UgYXJlIGdsb2JhbC4gICovCisrICBjb25zdCBDSEFSX1QgKipyZWdzdGFydCwgKipyZWdlbmQ7CisrI2VuZGlmCisrCisrICAvKiBJZiBhIGdyb3VwIHRoYXQncyBvcGVyYXRlZCB1cG9uIGJ5IGEgcmVwZXRpdGlvbiBvcGVyYXRvciBmYWlscyB0bworKyAgICAgbWF0Y2ggYW55dGhpbmcsIHRoZW4gdGhlIHJlZ2lzdGVyIGZvciBpdHMgc3RhcnQgd2lsbCBuZWVkIHRvIGJlCisrICAgICByZXN0b3JlZCBiZWNhdXNlIGl0IHdpbGwgaGF2ZSBiZWVuIHNldCB0byB3aGVyZXZlciBpbiB0aGUgc3RyaW5nIHdlCisrICAgICBhcmUgd2hlbiB3ZSBsYXN0IHNlZSBpdHMgb3Blbi1ncm91cCBvcGVyYXRvci4gIFNpbWlsYXJseSBmb3IgYQorKyAgICAgcmVnaXN0ZXIncyBlbmQuICAqLworKyNpZmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUgLyogb3RoZXJ3aXNlLCB0aGVzZSBhcmUgZ2xvYmFsLiAgKi8KKysgIGNvbnN0IENIQVJfVCAqKm9sZF9yZWdzdGFydCwgKipvbGRfcmVnZW5kOworKyNlbmRpZgorKworKyAgLyogVGhlIGlzX2FjdGl2ZSBmaWVsZCBvZiByZWdfaW5mbyBoZWxwcyB1cyBrZWVwIHRyYWNrIG9mIHdoaWNoIChwb3NzaWJseQorKyAgICAgbmVzdGVkKSBzdWJleHByZXNzaW9ucyB3ZSBhcmUgY3VycmVudGx5IGluLiBUaGUgbWF0Y2hlZF9zb21ldGhpbmcKKysgICAgIGZpZWxkIG9mIHJlZ19pbmZvW3JlZ19udW1dIGhlbHBzIHVzIHRlbGwgd2hldGhlciBvciBub3Qgd2UgaGF2ZQorKyAgICAgbWF0Y2hlZCBhbnkgb2YgdGhlIHBhdHRlcm4gc28gZmFyIHRoaXMgdGltZSB0aHJvdWdoIHRoZSByZWdfbnVtLXRoCisrICAgICBzdWJleHByZXNzaW9uLiAgVGhlc2UgdHdvIGZpZWxkcyBnZXQgcmVzZXQgZWFjaCB0aW1lIHRocm91Z2ggYW55CisrICAgICBsb29wIHRoZWlyIHJlZ2lzdGVyIGlzIGluLiAgKi8KKysjaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFIC8qIG90aGVyd2lzZSwgdGhpcyBpcyBnbG9iYWwuICAqLworKyAgUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkgKnJlZ19pbmZvOworKyNlbmRpZgorKworKyAgLyogVGhlIGZvbGxvd2luZyByZWNvcmQgdGhlIHJlZ2lzdGVyIGluZm8gYXMgZm91bmQgaW4gdGhlIGFib3ZlCisrICAgICB2YXJpYWJsZXMgd2hlbiB3ZSBmaW5kIGEgbWF0Y2ggYmV0dGVyIHRoYW4gYW55IHdlJ3ZlIHNlZW4gYmVmb3JlLgorKyAgICAgVGhpcyBoYXBwZW5zIGFzIHdlIGJhY2t0cmFjayB0aHJvdWdoIHRoZSBmYWlsdXJlIHBvaW50cywgd2hpY2ggaW4KKysgICAgIHR1cm4gaGFwcGVucyBvbmx5IGlmIHdlIGhhdmUgbm90IHlldCBtYXRjaGVkIHRoZSBlbnRpcmUgc3RyaW5nLiAqLworKyAgdW5zaWduZWQgYmVzdF9yZWdzX3NldCA9IGZhbHNlOworKyNpZmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUgLyogb3RoZXJ3aXNlLCB0aGVzZSBhcmUgZ2xvYmFsLiAgKi8KKysgIGNvbnN0IENIQVJfVCAqKmJlc3RfcmVnc3RhcnQsICoqYmVzdF9yZWdlbmQ7CisrI2VuZGlmCisrCisrICAvKiBMb2dpY2FsbHksIHRoaXMgaXMgYGJlc3RfcmVnZW5kWzBdJy4gIEJ1dCB3ZSBkb24ndCB3YW50IHRvIGhhdmUgdG8KKysgICAgIGFsbG9jYXRlIHNwYWNlIGZvciB0aGF0IGlmIHdlJ3JlIG5vdCBhbGxvY2F0aW5nIHNwYWNlIGZvciBhbnl0aGluZworKyAgICAgZWxzZSAoc2VlIGJlbG93KS4gIEFsc28sIHdlIG5ldmVyIG5lZWQgaW5mbyBhYm91dCByZWdpc3RlciAwIGZvcgorKyAgICAgYW55IG9mIHRoZSBvdGhlciByZWdpc3RlciB2ZWN0b3JzLCBhbmQgaXQgc2VlbXMgcmF0aGVyIGEga2x1ZGdlIHRvCisrICAgICB0cmVhdCBgYmVzdF9yZWdlbmQnIGRpZmZlcmVudGx5IHRoYW4gdGhlIHJlc3QuICBTbyB3ZSBrZWVwIHRyYWNrIG9mCisrICAgICB0aGUgZW5kIG9mIHRoZSBiZXN0IG1hdGNoIHNvIGZhciBpbiBhIHNlcGFyYXRlIHZhcmlhYmxlLiAgV2UKKysgICAgIGluaXRpYWxpemUgdGhpcyB0byBOVUxMIHNvIHRoYXQgd2hlbiB3ZSBiYWNrdHJhY2sgdGhlIGZpcnN0IHRpbWUKKysgICAgIGFuZCBuZWVkIHRvIHRlc3QgaXQsIGl0J3Mgbm90IGdhcmJhZ2UuICAqLworKyAgY29uc3QgQ0hBUl9UICptYXRjaF9lbmQgPSBOVUxMOworKworKyAgLyogVGhpcyBoZWxwcyBTRVRfUkVHU19NQVRDSEVEIGF2b2lkIGRvaW5nIHJlZHVuZGFudCB3b3JrLiAgKi8KKysgIGludCBzZXRfcmVnc19tYXRjaGVkX2RvbmUgPSAwOworKworKyAgLyogVXNlZCB3aGVuIHdlIHBvcCB2YWx1ZXMgd2UgZG9uJ3QgY2FyZSBhYm91dC4gICovCisrI2lmZGVmIE1BVENIX01BWV9BTExPQ0FURSAvKiBvdGhlcndpc2UsIHRoZXNlIGFyZSBnbG9iYWwuICAqLworKyAgY29uc3QgQ0hBUl9UICoqcmVnX2R1bW15OworKyAgUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkgKnJlZ19pbmZvX2R1bW15OworKyNlbmRpZgorKworKyNpZmRlZiBERUJVRworKyAgLyogQ291bnRzIHRoZSB0b3RhbCBudW1iZXIgb2YgcmVnaXN0ZXJzIHB1c2hlZC4gICovCisrICB1bnNpZ25lZCBudW1fcmVnc19wdXNoZWQgPSAwOworKyNlbmRpZgorKworKyAgREVCVUdfUFJJTlQxICgiXG5cbkVudGVyaW5nIHJlX21hdGNoXzIuXG4iKTsKKysKKysgIElOSVRfRkFJTF9TVEFDSyAoKTsKKysKKysjaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFCisrICAvKiBEbyBub3QgYm90aGVyIHRvIGluaXRpYWxpemUgYWxsIHRoZSByZWdpc3RlciB2YXJpYWJsZXMgaWYgdGhlcmUgYXJlCisrICAgICBubyBncm91cHMgaW4gdGhlIHBhdHRlcm4sIGFzIGl0IHRha2VzIGEgZmFpciBhbW91bnQgb2YgdGltZS4gIElmCisrICAgICB0aGVyZSBhcmUgZ3JvdXBzLCB3ZSBpbmNsdWRlIHNwYWNlIGZvciByZWdpc3RlciAwICh0aGUgd2hvbGUKKysgICAgIHBhdHRlcm4pLCBldmVuIHRob3VnaCB3ZSBuZXZlciB1c2UgaXQsIHNpbmNlIGl0IHNpbXBsaWZpZXMgdGhlCisrICAgICBhcnJheSBpbmRleGluZy4gIFdlIHNob3VsZCBmaXggdGhpcy4gICovCisrICBpZiAoYnVmcC0+cmVfbnN1YikKKysgICAgeworKyAgICAgIHJlZ3N0YXJ0ID0gUkVHRVhfVEFMTE9DIChudW1fcmVncywgY29uc3QgQ0hBUl9UICopOworKyAgICAgIHJlZ2VuZCA9IFJFR0VYX1RBTExPQyAobnVtX3JlZ3MsIGNvbnN0IENIQVJfVCAqKTsKKysgICAgICBvbGRfcmVnc3RhcnQgPSBSRUdFWF9UQUxMT0MgKG51bV9yZWdzLCBjb25zdCBDSEFSX1QgKik7CisrICAgICAgb2xkX3JlZ2VuZCA9IFJFR0VYX1RBTExPQyAobnVtX3JlZ3MsIGNvbnN0IENIQVJfVCAqKTsKKysgICAgICBiZXN0X3JlZ3N0YXJ0ID0gUkVHRVhfVEFMTE9DIChudW1fcmVncywgY29uc3QgQ0hBUl9UICopOworKyAgICAgIGJlc3RfcmVnZW5kID0gUkVHRVhfVEFMTE9DIChudW1fcmVncywgY29uc3QgQ0hBUl9UICopOworKyAgICAgIHJlZ19pbmZvID0gUkVHRVhfVEFMTE9DIChudW1fcmVncywgUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkpOworKyAgICAgIHJlZ19kdW1teSA9IFJFR0VYX1RBTExPQyAobnVtX3JlZ3MsIGNvbnN0IENIQVJfVCAqKTsKKysgICAgICByZWdfaW5mb19kdW1teSA9IFJFR0VYX1RBTExPQyAobnVtX3JlZ3MsIFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpKTsKKysKKysgICAgICBpZiAoIShyZWdzdGFydCAmJiByZWdlbmQgJiYgb2xkX3JlZ3N0YXJ0ICYmIG9sZF9yZWdlbmQgJiYgcmVnX2luZm8KKysgICAgICAgICAgICAmJiBiZXN0X3JlZ3N0YXJ0ICYmIGJlc3RfcmVnZW5kICYmIHJlZ19kdW1teSAmJiByZWdfaW5mb19kdW1teSkpCisrICAgICAgICB7CisrICAgICAgICAgIEZSRUVfVkFSSUFCTEVTICgpOworKyAgICAgICAgICByZXR1cm4gLTI7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIC8qIFdlIG11c3QgaW5pdGlhbGl6ZSBhbGwgb3VyIHZhcmlhYmxlcyB0byBOVUxMLCBzbyB0aGF0CisrICAgICAgICAgYEZSRUVfVkFSSUFCTEVTJyBkb2Vzbid0IHRyeSB0byBmcmVlIHRoZW0uICAqLworKyAgICAgIHJlZ3N0YXJ0ID0gcmVnZW5kID0gb2xkX3JlZ3N0YXJ0ID0gb2xkX3JlZ2VuZCA9IGJlc3RfcmVnc3RhcnQKKysgICAgICAgID0gYmVzdF9yZWdlbmQgPSByZWdfZHVtbXkgPSBOVUxMOworKyAgICAgIHJlZ19pbmZvID0gcmVnX2luZm9fZHVtbXkgPSAoUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkgKikgTlVMTDsKKysgICAgfQorKyNlbmRpZiAvKiBNQVRDSF9NQVlfQUxMT0NBVEUgKi8KKysKKysgIC8qIFRoZSBzdGFydGluZyBwb3NpdGlvbiBpcyBib2d1cy4gICovCisrI2lmZGVmIFdDSEFSCisrICBpZiAocG9zIDwgMCB8fCBwb3MgPiBjc2l6ZTEgKyBjc2l6ZTIpCisrI2Vsc2UgLyogQllURSAqLworKyAgaWYgKHBvcyA8IDAgfHwgcG9zID4gc2l6ZTEgKyBzaXplMikKKysjZW5kaWYKKysgICAgeworKyAgICAgIEZSRUVfVkFSSUFCTEVTICgpOworKyAgICAgIHJldHVybiAtMTsKKysgICAgfQorKworKyNpZmRlZiBXQ0hBUgorKyAgLyogQWxsb2NhdGUgd2NoYXJfdCBhcnJheSBmb3Igc3RyaW5nMSBhbmQgc3RyaW5nMiBhbmQKKysgICAgIGZpbGwgdGhlbSB3aXRoIGNvbnZlcnRlZCBzdHJpbmcuICAqLworKyAgaWYgKHN0cmluZzEgPT0gTlVMTCAmJiBzdHJpbmcyID09IE5VTEwpCisrICAgIHsKKysgICAgICAvKiBXZSBuZWVkIHNldGluZyB1cCBidWZmZXJzIGhlcmUuICAqLworKworKyAgICAgIC8qIFdlIG11c3QgZnJlZSB3Y3MgYnVmZmVycyBpbiB0aGlzIGZ1bmN0aW9uLiAgKi8KKysgICAgICBjYW50X2ZyZWVfd2NzX2J1ZiA9IDA7CisrCisrICAgICAgaWYgKGNzaXplMSAhPSAwKQorKwl7CisrCSAgc3RyaW5nMSA9IFJFR0VYX1RBTExPQyAoY3NpemUxICsgMSwgQ0hBUl9UKTsKKysJICBtYnNfb2Zmc2V0MSA9IFJFR0VYX1RBTExPQyAoY3NpemUxICsgMSwgaW50KTsKKysJICBpc19iaW5hcnkgPSBSRUdFWF9UQUxMT0MgKGNzaXplMSArIDEsIGNoYXIpOworKwkgIGlmICghc3RyaW5nMSB8fCAhbWJzX29mZnNldDEgfHwgIWlzX2JpbmFyeSkKKysJICAgIHsKKysJICAgICAgRlJFRV9WQVIgKHN0cmluZzEpOworKwkgICAgICBGUkVFX1ZBUiAobWJzX29mZnNldDEpOworKwkgICAgICBGUkVFX1ZBUiAoaXNfYmluYXJ5KTsKKysJICAgICAgcmV0dXJuIC0yOworKwkgICAgfQorKwl9CisrICAgICAgaWYgKGNzaXplMiAhPSAwKQorKwl7CisrCSAgc3RyaW5nMiA9IFJFR0VYX1RBTExPQyAoY3NpemUyICsgMSwgQ0hBUl9UKTsKKysJICBtYnNfb2Zmc2V0MiA9IFJFR0VYX1RBTExPQyAoY3NpemUyICsgMSwgaW50KTsKKysJICBpc19iaW5hcnkgPSBSRUdFWF9UQUxMT0MgKGNzaXplMiArIDEsIGNoYXIpOworKwkgIGlmICghc3RyaW5nMiB8fCAhbWJzX29mZnNldDIgfHwgIWlzX2JpbmFyeSkKKysJICAgIHsKKysJICAgICAgRlJFRV9WQVIgKHN0cmluZzEpOworKwkgICAgICBGUkVFX1ZBUiAobWJzX29mZnNldDEpOworKwkgICAgICBGUkVFX1ZBUiAoc3RyaW5nMik7CisrCSAgICAgIEZSRUVfVkFSIChtYnNfb2Zmc2V0Mik7CisrCSAgICAgIEZSRUVfVkFSIChpc19iaW5hcnkpOworKwkgICAgICByZXR1cm4gLTI7CisrCSAgICB9CisrCSAgc2l6ZTIgPSBjb252ZXJ0X21ic190b193Y3Moc3RyaW5nMiwgY3N0cmluZzIsIGNzaXplMiwKKysJCQkJICAgICBtYnNfb2Zmc2V0MiwgaXNfYmluYXJ5KTsKKysJICBzdHJpbmcyW3NpemUyXSA9IEwnXDAnOyAvKiBmb3IgYSBzZW50aW5lbCAgKi8KKysJICBGUkVFX1ZBUiAoaXNfYmluYXJ5KTsKKysJfQorKyAgICB9CisrCisrICAvKiBXZSBuZWVkIHRvIGNhc3QgcGF0dGVybiB0byAod2NoYXJfdCopLCBiZWNhdXNlIHdlIGNhc3RlZCB0aGlzIGNvbXBpbGVkCisrICAgICBwYXR0ZXJuIHRvIChjaGFyKikgaW4gcmVnZXhfY29tcGlsZS4gICovCisrICBwID0gcGF0dGVybiA9IChDSEFSX1QqKWJ1ZnAtPmJ1ZmZlcjsKKysgIHBlbmQgPSAoQ0hBUl9UKikoYnVmcC0+YnVmZmVyICsgYnVmcC0+dXNlZCk7CisrCisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrICAvKiBJbml0aWFsaXplIHN1YmV4cHJlc3Npb24gdGV4dCBwb3NpdGlvbnMgdG8gLTEgdG8gbWFyayBvbmVzIHRoYXQgbm8KKysgICAgIHN0YXJ0X21lbW9yeS9zdG9wX21lbW9yeSBoYXMgYmVlbiBzZWVuIGZvci4gQWxzbyBpbml0aWFsaXplIHRoZQorKyAgICAgcmVnaXN0ZXIgaW5mb3JtYXRpb24gc3RydWN0LiAgKi8KKysgIGZvciAobWNudCA9IDE7ICh1bnNpZ25lZCkgbWNudCA8IG51bV9yZWdzOyBtY250KyspCisrICAgIHsKKysgICAgICByZWdzdGFydFttY250XSA9IHJlZ2VuZFttY250XQorKyAgICAgICAgPSBvbGRfcmVnc3RhcnRbbWNudF0gPSBvbGRfcmVnZW5kW21jbnRdID0gUkVHX1VOU0VUX1ZBTFVFOworKworKyAgICAgIFJFR19NQVRDSF9OVUxMX1NUUklOR19QIChyZWdfaW5mb1ttY250XSkgPSBNQVRDSF9OVUxMX1VOU0VUX1ZBTFVFOworKyAgICAgIElTX0FDVElWRSAocmVnX2luZm9bbWNudF0pID0gMDsKKysgICAgICBNQVRDSEVEX1NPTUVUSElORyAocmVnX2luZm9bbWNudF0pID0gMDsKKysgICAgICBFVkVSX01BVENIRURfU09NRVRISU5HIChyZWdfaW5mb1ttY250XSkgPSAwOworKyAgICB9CisrCisrICAvKiBXZSBtb3ZlIGBzdHJpbmcxJyBpbnRvIGBzdHJpbmcyJyBpZiB0aGUgbGF0dGVyJ3MgZW1wdHkgLS0gYnV0IG5vdCBpZgorKyAgICAgYHN0cmluZzEnIGlzIG51bGwuICAqLworKyAgaWYgKHNpemUyID09IDAgJiYgc3RyaW5nMSAhPSBOVUxMKQorKyAgICB7CisrICAgICAgc3RyaW5nMiA9IHN0cmluZzE7CisrICAgICAgc2l6ZTIgPSBzaXplMTsKKysgICAgICBzdHJpbmcxID0gMDsKKysgICAgICBzaXplMSA9IDA7CisrI2lmZGVmIFdDSEFSCisrICAgICAgbWJzX29mZnNldDIgPSBtYnNfb2Zmc2V0MTsKKysgICAgICBjc2l6ZTIgPSBjc2l6ZTE7CisrICAgICAgbWJzX29mZnNldDEgPSBOVUxMOworKyAgICAgIGNzaXplMSA9IDA7CisrI2VuZGlmCisrICAgIH0KKysgIGVuZDEgPSBzdHJpbmcxICsgc2l6ZTE7CisrICBlbmQyID0gc3RyaW5nMiArIHNpemUyOworKworKyAgLyogQ29tcHV0ZSB3aGVyZSB0byBzdG9wIG1hdGNoaW5nLCB3aXRoaW4gdGhlIHR3byBzdHJpbmdzLiAgKi8KKysjaWZkZWYgV0NIQVIKKysgIGlmIChzdG9wIDw9IGNzaXplMSkKKysgICAgeworKyAgICAgIG1jbnQgPSBjb3VudF9tYnNfbGVuZ3RoKG1ic19vZmZzZXQxLCBzdG9wKTsKKysgICAgICBlbmRfbWF0Y2hfMSA9IHN0cmluZzEgKyBtY250OworKyAgICAgIGVuZF9tYXRjaF8yID0gc3RyaW5nMjsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgaWYgKHN0b3AgPiBjc2l6ZTEgKyBjc2l6ZTIpCisrCXN0b3AgPSBjc2l6ZTEgKyBjc2l6ZTI7CisrICAgICAgZW5kX21hdGNoXzEgPSBlbmQxOworKyAgICAgIG1jbnQgPSBjb3VudF9tYnNfbGVuZ3RoKG1ic19vZmZzZXQyLCBzdG9wLWNzaXplMSk7CisrICAgICAgZW5kX21hdGNoXzIgPSBzdHJpbmcyICsgbWNudDsKKysgICAgfQorKyAgaWYgKG1jbnQgPCAwKQorKyAgICB7IC8qIGNvdW50X21ic19sZW5ndGggcmV0dXJuIGVycm9yLiAgKi8KKysgICAgICBGUkVFX1ZBUklBQkxFUyAoKTsKKysgICAgICByZXR1cm4gLTE7CisrICAgIH0KKysjZWxzZQorKyAgaWYgKHN0b3AgPD0gc2l6ZTEpCisrICAgIHsKKysgICAgICBlbmRfbWF0Y2hfMSA9IHN0cmluZzEgKyBzdG9wOworKyAgICAgIGVuZF9tYXRjaF8yID0gc3RyaW5nMjsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgZW5kX21hdGNoXzEgPSBlbmQxOworKyAgICAgIGVuZF9tYXRjaF8yID0gc3RyaW5nMiArIHN0b3AgLSBzaXplMTsKKysgICAgfQorKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKyAgLyogYHAnIHNjYW5zIHRocm91Z2ggdGhlIHBhdHRlcm4gYXMgYGQnIHNjYW5zIHRocm91Z2ggdGhlIGRhdGEuCisrICAgICBgZGVuZCcgaXMgdGhlIGVuZCBvZiB0aGUgaW5wdXQgc3RyaW5nIHRoYXQgYGQnIHBvaW50cyB3aXRoaW4uICBgZCcKKysgICAgIGlzIGFkdmFuY2VkIGludG8gdGhlIGZvbGxvd2luZyBpbnB1dCBzdHJpbmcgd2hlbmV2ZXIgbmVjZXNzYXJ5LCBidXQKKysgICAgIHRoaXMgaGFwcGVucyBiZWZvcmUgZmV0Y2hpbmc7IHRoZXJlZm9yZSwgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKKysgICAgIGxvb3AsIGBkJyBjYW4gYmUgcG9pbnRpbmcgYXQgdGhlIGVuZCBvZiBhIHN0cmluZywgYnV0IGl0IGNhbm5vdAorKyAgICAgZXF1YWwgYHN0cmluZzInLiAgKi8KKysjaWZkZWYgV0NIQVIKKysgIGlmIChzaXplMSA+IDAgJiYgcG9zIDw9IGNzaXplMSkKKysgICAgeworKyAgICAgIG1jbnQgPSBjb3VudF9tYnNfbGVuZ3RoKG1ic19vZmZzZXQxLCBwb3MpOworKyAgICAgIGQgPSBzdHJpbmcxICsgbWNudDsKKysgICAgICBkZW5kID0gZW5kX21hdGNoXzE7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIG1jbnQgPSBjb3VudF9tYnNfbGVuZ3RoKG1ic19vZmZzZXQyLCBwb3MtY3NpemUxKTsKKysgICAgICBkID0gc3RyaW5nMiArIG1jbnQ7CisrICAgICAgZGVuZCA9IGVuZF9tYXRjaF8yOworKyAgICB9CisrCisrICBpZiAobWNudCA8IDApCisrICAgIHsgLyogY291bnRfbWJzX2xlbmd0aCByZXR1cm4gZXJyb3IuICAqLworKyAgICAgIEZSRUVfVkFSSUFCTEVTICgpOworKyAgICAgIHJldHVybiAtMTsKKysgICAgfQorKyNlbHNlCisrICBpZiAoc2l6ZTEgPiAwICYmIHBvcyA8PSBzaXplMSkKKysgICAgeworKyAgICAgIGQgPSBzdHJpbmcxICsgcG9zOworKyAgICAgIGRlbmQgPSBlbmRfbWF0Y2hfMTsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgZCA9IHN0cmluZzIgKyBwb3MgLSBzaXplMTsKKysgICAgICBkZW5kID0gZW5kX21hdGNoXzI7CisrICAgIH0KKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysgIERFQlVHX1BSSU5UMSAoIlRoZSBjb21waWxlZCBwYXR0ZXJuIGlzOlxuIik7CisrICBERUJVR19QUklOVF9DT01QSUxFRF9QQVRURVJOIChidWZwLCBwLCBwZW5kKTsKKysgIERFQlVHX1BSSU5UMSAoIlRoZSBzdHJpbmcgdG8gbWF0Y2ggaXM6IGAiKTsKKysgIERFQlVHX1BSSU5UX0RPVUJMRV9TVFJJTkcgKGQsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLCBzaXplMik7CisrICBERUJVR19QUklOVDEgKCInXG4iKTsKKysKKysgIC8qIFRoaXMgbG9vcHMgb3ZlciBwYXR0ZXJuIGNvbW1hbmRzLiAgSXQgZXhpdHMgYnkgcmV0dXJuaW5nIGZyb20gdGhlCisrICAgICBmdW5jdGlvbiBpZiB0aGUgbWF0Y2ggaXMgY29tcGxldGUsIG9yIGl0IGRyb3BzIHRocm91Z2ggaWYgdGhlIG1hdGNoCisrICAgICBmYWlscyBhdCB0aGlzIHN0YXJ0aW5nIHBvaW50IGluIHRoZSBpbnB1dCBkYXRhLiAgKi8KKysgIGZvciAoOzspCisrICAgIHsKKysjaWZkZWYgX0xJQkMKKysgICAgICBERUJVR19QUklOVDIgKCJcbiVwOiAiLCBwKTsKKysjZWxzZQorKyAgICAgIERFQlVHX1BSSU5UMiAoIlxuMHgleDogIiwgcCk7CisrI2VuZGlmCisrCisrICAgICAgaWYgKHAgPT0gcGVuZCkKKysJeyAvKiBFbmQgb2YgcGF0dGVybiBtZWFucyB3ZSBtaWdodCBoYXZlIHN1Y2NlZWRlZC4gICovCisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoImVuZCBvZiBwYXR0ZXJuIC4uLiAiKTsKKysKKysJICAvKiBJZiB3ZSBoYXZlbid0IG1hdGNoZWQgdGhlIGVudGlyZSBzdHJpbmcsIGFuZCB3ZSB3YW50IHRoZQorKyAgICAgICAgICAgICBsb25nZXN0IG1hdGNoLCB0cnkgYmFja3RyYWNraW5nLiAgKi8KKysgICAgICAgICAgaWYgKGQgIT0gZW5kX21hdGNoXzIpCisrCSAgICB7CisrCSAgICAgIC8qIDEgaWYgdGhpcyBtYXRjaCBlbmRzIGluIHRoZSBzYW1lIHN0cmluZyAoc3RyaW5nMSBvciBzdHJpbmcyKQorKwkJIGFzIHRoZSBiZXN0IHByZXZpb3VzIG1hdGNoLiAgKi8KKysJICAgICAgYm9vbGVhbiBzYW1lX3N0cl9wID0gKEZJUlNUX1NUUklOR19QIChtYXRjaF9lbmQpCisrCQkJCSAgICA9PSBNQVRDSElOR19JTl9GSVJTVF9TVFJJTkcpOworKwkgICAgICAvKiAxIGlmIHRoaXMgbWF0Y2ggaXMgdGhlIGJlc3Qgc2VlbiBzbyBmYXIuICAqLworKwkgICAgICBib29sZWFuIGJlc3RfbWF0Y2hfcDsKKysKKysJICAgICAgLyogQUlYIGNvbXBpbGVyIGdvdCBjb25mdXNlZCB3aGVuIHRoaXMgd2FzIGNvbWJpbmVkCisrCQkgd2l0aCB0aGUgcHJldmlvdXMgZGVjbGFyYXRpb24uICAqLworKwkgICAgICBpZiAoc2FtZV9zdHJfcCkKKysJCWJlc3RfbWF0Y2hfcCA9IGQgPiBtYXRjaF9lbmQ7CisrCSAgICAgIGVsc2UKKysJCWJlc3RfbWF0Y2hfcCA9ICFNQVRDSElOR19JTl9GSVJTVF9TVFJJTkc7CisrCisrICAgICAgICAgICAgICBERUJVR19QUklOVDEgKCJiYWNrdHJhY2tpbmcuXG4iKTsKKysKKysgICAgICAgICAgICAgIGlmICghRkFJTF9TVEFDS19FTVBUWSAoKSkKKysgICAgICAgICAgICAgICAgeyAvKiBNb3JlIGZhaWx1cmUgcG9pbnRzIHRvIHRyeS4gICovCisrCisrICAgICAgICAgICAgICAgICAgLyogSWYgZXhjZWVkcyBiZXN0IG1hdGNoIHNvIGZhciwgc2F2ZSBpdC4gICovCisrICAgICAgICAgICAgICAgICAgaWYgKCFiZXN0X3JlZ3Nfc2V0IHx8IGJlc3RfbWF0Y2hfcCkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgYmVzdF9yZWdzX3NldCA9IHRydWU7CisrICAgICAgICAgICAgICAgICAgICAgIG1hdGNoX2VuZCA9IGQ7CisrCisrICAgICAgICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UMSAoIlxuU0FWSU5HIG1hdGNoIGFzIGJlc3Qgc28gZmFyLlxuIik7CisrCisrICAgICAgICAgICAgICAgICAgICAgIGZvciAobWNudCA9IDE7ICh1bnNpZ25lZCkgbWNudCA8IG51bV9yZWdzOyBtY250KyspCisrICAgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgYmVzdF9yZWdzdGFydFttY250XSA9IHJlZ3N0YXJ0W21jbnRdOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgYmVzdF9yZWdlbmRbbWNudF0gPSByZWdlbmRbbWNudF07CisrICAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKysgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgLyogSWYgbm8gZmFpbHVyZSBwb2ludHMsIGRvbid0IHJlc3RvcmUgZ2FyYmFnZS4gIEFuZCBpZgorKyAgICAgICAgICAgICAgICAgbGFzdCBtYXRjaCBpcyByZWFsIGJlc3QgbWF0Y2gsIGRvbid0IHJlc3RvcmUgc2Vjb25kCisrICAgICAgICAgICAgICAgICBiZXN0IG9uZS4gKi8KKysgICAgICAgICAgICAgIGVsc2UgaWYgKGJlc3RfcmVnc19zZXQgJiYgIWJlc3RfbWF0Y2hfcCkKKysgICAgICAgICAgICAgICAgeworKyAgCSAgICAgICAgcmVzdG9yZV9iZXN0X3JlZ3M6CisrICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBiZXN0IG1hdGNoLiAgSXQgbWF5IGhhcHBlbiB0aGF0IGBkZW5kID09CisrICAgICAgICAgICAgICAgICAgICAgZW5kX21hdGNoXzEnIHdoaWxlIHRoZSByZXN0b3JlZCBkIGlzIGluIHN0cmluZzIuCisrICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBwYXR0ZXJuIGB4Lip5Lip6JyBhZ2FpbnN0IHRoZQorKyAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3MgYHgtJyBhbmQgYHktei0nLCBpZiB0aGUgdHdvIHN0cmluZ3MgYXJlCisrICAgICAgICAgICAgICAgICAgICAgbm90IGNvbnNlY3V0aXZlIGluIG1lbW9yeS4gICovCisrICAgICAgICAgICAgICAgICAgREVCVUdfUFJJTlQxICgiUmVzdG9yaW5nIGJlc3QgcmVnaXN0ZXJzLlxuIik7CisrCisrICAgICAgICAgICAgICAgICAgZCA9IG1hdGNoX2VuZDsKKysgICAgICAgICAgICAgICAgICBkZW5kID0gKChkID49IHN0cmluZzEgJiYgZCA8PSBlbmQxKQorKwkJICAgICAgICAgICA/IGVuZF9tYXRjaF8xIDogZW5kX21hdGNoXzIpOworKworKwkJICBmb3IgKG1jbnQgPSAxOyAodW5zaWduZWQpIG1jbnQgPCBudW1fcmVnczsgbWNudCsrKQorKwkJICAgIHsKKysJCSAgICAgIHJlZ3N0YXJ0W21jbnRdID0gYmVzdF9yZWdzdGFydFttY250XTsKKysJCSAgICAgIHJlZ2VuZFttY250XSA9IGJlc3RfcmVnZW5kW21jbnRdOworKwkJICAgIH0KKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0gLyogZCAhPSBlbmRfbWF0Y2hfMiAqLworKworKwlzdWNjZWVkX2xhYmVsOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJBY2NlcHRpbmcgbWF0Y2guXG4iKTsKKysgICAgICAgICAgLyogSWYgY2FsbGVyIHdhbnRzIHJlZ2lzdGVyIGNvbnRlbnRzIGRhdGEgYmFjaywgZG8gaXQuICAqLworKyAgICAgICAgICBpZiAocmVncyAmJiAhYnVmcC0+bm9fc3ViKQorKwkgICAgeworKwkgICAgICAvKiBIYXZlIHRoZSByZWdpc3RlciBkYXRhIGFycmF5cyBiZWVuIGFsbG9jYXRlZD8gICovCisrICAgICAgICAgICAgICBpZiAoYnVmcC0+cmVnc19hbGxvY2F0ZWQgPT0gUkVHU19VTkFMTE9DQVRFRCkKKysgICAgICAgICAgICAgICAgeyAvKiBOby4gIFNvIGFsbG9jYXRlIHRoZW0gd2l0aCBtYWxsb2MuICBXZSBuZWVkIG9uZQorKyAgICAgICAgICAgICAgICAgICAgIGV4dHJhIGVsZW1lbnQgYmV5b25kIGBudW1fcmVncycgZm9yIHRoZSBgLTEnIG1hcmtlcgorKyAgICAgICAgICAgICAgICAgICAgIEdOVSBjb2RlIHVzZXMuICAqLworKyAgICAgICAgICAgICAgICAgIHJlZ3MtPm51bV9yZWdzID0gTUFYIChSRV9OUkVHUywgbnVtX3JlZ3MgKyAxKTsKKysgICAgICAgICAgICAgICAgICByZWdzLT5zdGFydCA9IFRBTExPQyAocmVncy0+bnVtX3JlZ3MsIHJlZ29mZl90KTsKKysgICAgICAgICAgICAgICAgICByZWdzLT5lbmQgPSBUQUxMT0MgKHJlZ3MtPm51bV9yZWdzLCByZWdvZmZfdCk7CisrICAgICAgICAgICAgICAgICAgaWYgKHJlZ3MtPnN0YXJ0ID09IE5VTEwgfHwgcmVncy0+ZW5kID09IE5VTEwpCisrCQkgICAgeworKwkJICAgICAgRlJFRV9WQVJJQUJMRVMgKCk7CisrCQkgICAgICByZXR1cm4gLTI7CisrCQkgICAgfQorKyAgICAgICAgICAgICAgICAgIGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkID0gUkVHU19SRUFMTE9DQVRFOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICBlbHNlIGlmIChidWZwLT5yZWdzX2FsbG9jYXRlZCA9PSBSRUdTX1JFQUxMT0NBVEUpCisrICAgICAgICAgICAgICAgIHsgLyogWWVzLiAgSWYgd2UgbmVlZCBtb3JlIGVsZW1lbnRzIHRoYW4gd2VyZSBhbHJlYWR5CisrICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGVkLCByZWFsbG9jYXRlIHRoZW0uICBJZiB3ZSBuZWVkIGZld2VyLCBqdXN0CisrICAgICAgICAgICAgICAgICAgICAgbGVhdmUgaXQgYWxvbmUuICAqLworKyAgICAgICAgICAgICAgICAgIGlmIChyZWdzLT5udW1fcmVncyA8IG51bV9yZWdzICsgMSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgcmVncy0+bnVtX3JlZ3MgPSBudW1fcmVncyArIDE7CisrICAgICAgICAgICAgICAgICAgICAgIFJFVEFMTE9DIChyZWdzLT5zdGFydCwgcmVncy0+bnVtX3JlZ3MsIHJlZ29mZl90KTsKKysgICAgICAgICAgICAgICAgICAgICAgUkVUQUxMT0MgKHJlZ3MtPmVuZCwgcmVncy0+bnVtX3JlZ3MsIHJlZ29mZl90KTsKKysgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZ3MtPnN0YXJ0ID09IE5VTEwgfHwgcmVncy0+ZW5kID09IE5VTEwpCisrCQkJeworKwkJCSAgRlJFRV9WQVJJQUJMRVMgKCk7CisrCQkJICByZXR1cm4gLTI7CisrCQkJfQorKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICBlbHNlCisrCQl7CisrCQkgIC8qIFRoZXNlIGJyYWNlcyBmZW5kIG9mZiBhICJlbXB0eSBib2R5IGluIGFuIGVsc2Utc3RhdGVtZW50IgorKwkJICAgICB3YXJuaW5nIHVuZGVyIEdDQyB3aGVuIGFzc2VydCBleHBhbmRzIHRvIG5vdGhpbmcuICAqLworKwkJICBhc3NlcnQgKGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkID09IFJFR1NfRklYRUQpOworKwkJfQorKworKyAgICAgICAgICAgICAgLyogQ29udmVydCB0aGUgcG9pbnRlciBkYXRhIGluIGByZWdzdGFydCcgYW5kIGByZWdlbmQnIHRvCisrICAgICAgICAgICAgICAgICBpbmRpY2VzLiAgUmVnaXN0ZXIgemVybyBoYXMgdG8gYmUgc2V0IGRpZmZlcmVudGx5LAorKyAgICAgICAgICAgICAgICAgc2luY2Ugd2UgaGF2ZW4ndCBrZXB0IHRyYWNrIG9mIGFueSBpbmZvIGZvciBpdC4gICovCisrICAgICAgICAgICAgICBpZiAocmVncy0+bnVtX3JlZ3MgPiAwKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgcmVncy0+c3RhcnRbMF0gPSBwb3M7CisrI2lmZGVmIFdDSEFSCisrCQkgIGlmIChNQVRDSElOR19JTl9GSVJTVF9TVFJJTkcpCisrCQkgICAgcmVncy0+ZW5kWzBdID0gbWJzX29mZnNldDEgIT0gTlVMTCA/CisrCQkJCQltYnNfb2Zmc2V0MVtkLXN0cmluZzFdIDogMDsKKysJCSAgZWxzZQorKwkJICAgIHJlZ3MtPmVuZFswXSA9IGNzaXplMSArIChtYnNfb2Zmc2V0MiAhPSBOVUxMID8KKysJCQkJCSAgICAgbWJzX29mZnNldDJbZC1zdHJpbmcyXSA6IDApOworKyNlbHNlCisrICAgICAgICAgICAgICAgICAgcmVncy0+ZW5kWzBdID0gKE1BVENISU5HX0lOX0ZJUlNUX1NUUklORworKwkJCQkgID8gKChyZWdvZmZfdCkgKGQgLSBzdHJpbmcxKSkKKysJCQkgICAgICAgICAgOiAoKHJlZ29mZl90KSAoZCAtIHN0cmluZzIgKyBzaXplMSkpKTsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgLyogR28gdGhyb3VnaCB0aGUgZmlyc3QgYG1pbiAobnVtX3JlZ3MsIHJlZ3MtPm51bV9yZWdzKScKKysgICAgICAgICAgICAgICAgIHJlZ2lzdGVycywgc2luY2UgdGhhdCBpcyBhbGwgd2UgaW5pdGlhbGl6ZWQuICAqLworKwkgICAgICBmb3IgKG1jbnQgPSAxOyAodW5zaWduZWQpIG1jbnQgPCBNSU4gKG51bV9yZWdzLCByZWdzLT5udW1fcmVncyk7CisrCQkgICBtY250KyspCisrCQl7CisrICAgICAgICAgICAgICAgICAgaWYgKFJFR19VTlNFVCAocmVnc3RhcnRbbWNudF0pIHx8IFJFR19VTlNFVCAocmVnZW5kW21jbnRdKSkKKysgICAgICAgICAgICAgICAgICAgIHJlZ3MtPnN0YXJ0W21jbnRdID0gcmVncy0+ZW5kW21jbnRdID0gLTE7CisrICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgeworKwkJICAgICAgcmVncy0+c3RhcnRbbWNudF0KKysJCQk9IChyZWdvZmZfdCkgUE9JTlRFUl9UT19PRkZTRVQgKHJlZ3N0YXJ0W21jbnRdKTsKKysgICAgICAgICAgICAgICAgICAgICAgcmVncy0+ZW5kW21jbnRdCisrCQkJPSAocmVnb2ZmX3QpIFBPSU5URVJfVE9fT0ZGU0VUIChyZWdlbmRbbWNudF0pOworKyAgICAgICAgICAgICAgICAgICAgfQorKwkJfQorKworKyAgICAgICAgICAgICAgLyogSWYgdGhlIHJlZ3Mgc3RydWN0dXJlIHdlIHJldHVybiBoYXMgbW9yZSBlbGVtZW50cyB0aGFuCisrICAgICAgICAgICAgICAgICB3ZXJlIGluIHRoZSBwYXR0ZXJuLCBzZXQgdGhlIGV4dHJhIGVsZW1lbnRzIHRvIC0xLiAgSWYKKysgICAgICAgICAgICAgICAgIHdlIChyZSlhbGxvY2F0ZWQgdGhlIHJlZ2lzdGVycywgdGhpcyBpcyB0aGUgY2FzZSwKKysgICAgICAgICAgICAgICAgIGJlY2F1c2Ugd2UgYWx3YXlzIGFsbG9jYXRlIGVub3VnaCB0byBoYXZlIGF0IGxlYXN0IG9uZQorKyAgICAgICAgICAgICAgICAgLTEgYXQgdGhlIGVuZC4gICovCisrICAgICAgICAgICAgICBmb3IgKG1jbnQgPSBudW1fcmVnczsgKHVuc2lnbmVkKSBtY250IDwgcmVncy0+bnVtX3JlZ3M7IG1jbnQrKykKKysgICAgICAgICAgICAgICAgcmVncy0+c3RhcnRbbWNudF0gPSByZWdzLT5lbmRbbWNudF0gPSAtMTsKKysJICAgIH0gLyogcmVncyAmJiAhYnVmcC0+bm9fc3ViICovCisrCisrICAgICAgICAgIERFQlVHX1BSSU5UNCAoIiV1IGZhaWx1cmUgcG9pbnRzIHB1c2hlZCwgJXUgcG9wcGVkICgldSByZW1haW4pLlxuIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBuZmFpbHVyZV9wb2ludHNfcHVzaGVkLCBuZmFpbHVyZV9wb2ludHNfcG9wcGVkLAorKyAgICAgICAgICAgICAgICAgICAgICAgIG5mYWlsdXJlX3BvaW50c19wdXNoZWQgLSBuZmFpbHVyZV9wb2ludHNfcG9wcGVkKTsKKysgICAgICAgICAgREVCVUdfUFJJTlQyICgiJXUgcmVnaXN0ZXJzIHB1c2hlZC5cbiIsIG51bV9yZWdzX3B1c2hlZCk7CisrCisrI2lmZGVmIFdDSEFSCisrCSAgaWYgKE1BVENISU5HX0lOX0ZJUlNUX1NUUklORykKKysJICAgIG1jbnQgPSBtYnNfb2Zmc2V0MSAhPSBOVUxMID8gbWJzX29mZnNldDFbZC1zdHJpbmcxXSA6IDA7CisrCSAgZWxzZQorKwkgICAgbWNudCA9IChtYnNfb2Zmc2V0MiAhPSBOVUxMID8gbWJzX29mZnNldDJbZC1zdHJpbmcyXSA6IDApICsKKysJCQljc2l6ZTE7CisrICAgICAgICAgIG1jbnQgLT0gcG9zOworKyNlbHNlCisrICAgICAgICAgIG1jbnQgPSBkIC0gcG9zIC0gKE1BVENISU5HX0lOX0ZJUlNUX1NUUklORworKwkJCSAgICA/IHN0cmluZzEKKysJCQkgICAgOiBzdHJpbmcyIC0gc2l6ZTEpOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKyAgICAgICAgICBERUJVR19QUklOVDIgKCJSZXR1cm5pbmcgJWQgZnJvbSByZV9tYXRjaF8yLlxuIiwgbWNudCk7CisrCisrICAgICAgICAgIEZSRUVfVkFSSUFCTEVTICgpOworKyAgICAgICAgICByZXR1cm4gbWNudDsKKysgICAgICAgIH0KKysKKysgICAgICAvKiBPdGhlcndpc2UgbWF0Y2ggbmV4dCBwYXR0ZXJuIGNvbW1hbmQuICAqLworKyAgICAgIHN3aXRjaCAoU1dJVENIX0VOVU1fQ0FTVCAoKHJlX29wY29kZV90KSAqcCsrKSkKKysJeworKyAgICAgICAgLyogSWdub3JlIHRoZXNlLiAgVXNlZCB0byBpZ25vcmUgdGhlIG4gb2Ygc3VjY2VlZF9uJ3Mgd2hpY2gKKysgICAgICAgICAgIGN1cnJlbnRseSBoYXZlIG4gPT0gMC4gICovCisrICAgICAgICBjYXNlIG5vX29wOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgbm9fb3AuXG4iKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2Ugc3VjY2VlZDoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIHN1Y2NlZWQuXG4iKTsKKysJICBnb3RvIHN1Y2NlZWRfbGFiZWw7CisrCisrICAgICAgICAvKiBNYXRjaCB0aGUgbmV4dCBuIHBhdHRlcm4gY2hhcmFjdGVycyBleGFjdGx5LiAgVGhlIGZvbGxvd2luZworKyAgICAgICAgICAgYnl0ZSBpbiB0aGUgcGF0dGVybiBkZWZpbmVzIG4sIGFuZCB0aGUgbiBieXRlcyBhZnRlciB0aGF0CisrICAgICAgICAgICBhcmUgdGhlIGNoYXJhY3RlcnMgdG8gbWF0Y2guICAqLworKwljYXNlIGV4YWN0bjoKKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJY2FzZSBleGFjdG5fYmluOgorKyNlbmRpZgorKwkgIG1jbnQgPSAqcCsrOworKyAgICAgICAgICBERUJVR19QUklOVDIgKCJFWEVDVVRJTkcgZXhhY3RuICVkLlxuIiwgbWNudCk7CisrCisrICAgICAgICAgIC8qIFRoaXMgaXMgd3JpdHRlbiBvdXQgYXMgYW4gaWYtZWxzZSBzbyB3ZSBkb24ndCB3YXN0ZSB0aW1lCisrICAgICAgICAgICAgIHRlc3RpbmcgYHRyYW5zbGF0ZScgaW5zaWRlIHRoZSBsb29wLiAgKi8KKysgICAgICAgICAgaWYgKHRyYW5zbGF0ZSkKKysJICAgIHsKKysJICAgICAgZG8KKysJCXsKKysJCSAgUFJFRkVUQ0ggKCk7CisrI2lmZGVmIFdDSEFSCisrCQkgIGlmICgqZCA8PSAweGZmKQorKwkJICAgIHsKKysJCSAgICAgIGlmICgoVUNIQVJfVCkgdHJhbnNsYXRlWyh1bnNpZ25lZCBjaGFyKSAqZCsrXQorKwkJCSAgIT0gKFVDSEFSX1QpICpwKyspCisrCQkJZ290byBmYWlsOworKwkJICAgIH0KKysJCSAgZWxzZQorKwkJICAgIHsKKysJCSAgICAgIGlmICgqZCsrICE9IChDSEFSX1QpICpwKyspCisrCQkJZ290byBmYWlsOworKwkJICAgIH0KKysjZWxzZQorKwkJICBpZiAoKFVDSEFSX1QpIHRyYW5zbGF0ZVsodW5zaWduZWQgY2hhcikgKmQrK10KKysJCSAgICAgICE9IChVQ0hBUl9UKSAqcCsrKQorKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKwkJfQorKwkgICAgICB3aGlsZSAoLS1tY250KTsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIGRvCisrCQl7CisrCQkgIFBSRUZFVENIICgpOworKwkJICBpZiAoKmQrKyAhPSAoQ0hBUl9UKSAqcCsrKSBnb3RvIGZhaWw7CisrCQl9CisrCSAgICAgIHdoaWxlICgtLW1jbnQpOworKwkgICAgfQorKwkgIFNFVF9SRUdTX01BVENIRUQgKCk7CisrICAgICAgICAgIGJyZWFrOworKworKworKyAgICAgICAgLyogTWF0Y2ggYW55IGNoYXJhY3RlciBleGNlcHQgcG9zc2libHkgYSBuZXdsaW5lIG9yIGEgbnVsbC4gICovCisrCWNhc2UgYW55Y2hhcjoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIGFueWNoYXIuXG4iKTsKKysKKysgICAgICAgICAgUFJFRkVUQ0ggKCk7CisrCisrICAgICAgICAgIGlmICgoIShidWZwLT5zeW50YXggJiBSRV9ET1RfTkVXTElORSkgJiYgVFJBTlNMQVRFICgqZCkgPT0gJ1xuJykKKysgICAgICAgICAgICAgIHx8IChidWZwLT5zeW50YXggJiBSRV9ET1RfTk9UX05VTEwgJiYgVFJBTlNMQVRFICgqZCkgPT0gJ1wwMDAnKSkKKysJICAgIGdvdG8gZmFpbDsKKysKKysgICAgICAgICAgU0VUX1JFR1NfTUFUQ0hFRCAoKTsKKysgICAgICAgICAgREVCVUdfUFJJTlQyICgiICBNYXRjaGVkIGAlbGQnLlxuIiwgKGxvbmcgaW50KSAqZCk7CisrICAgICAgICAgIGQrKzsKKysJICBicmVhazsKKysKKysKKysJY2FzZSBjaGFyc2V0OgorKwljYXNlIGNoYXJzZXRfbm90OgorKwkgIHsKKysJICAgIHJlZ2lzdGVyIFVDSEFSX1QgYzsKKysjaWZkZWYgV0NIQVIKKysJICAgIHVuc2lnbmVkIGludCBpLCBjaGFyX2NsYXNzX2xlbmd0aCwgY29sbF9zeW1ib2xfbGVuZ3RoLAorKyAgICAgICAgICAgICAgZXF1aXZfY2xhc3NfbGVuZ3RoLCByYW5nZXNfbGVuZ3RoLCBjaGFyc19sZW5ndGgsIGxlbmd0aDsKKysJICAgIENIQVJfVCAqd29ya3AsICp3b3JrcDIsICpjaGFyc2V0X3RvcDsKKysjZGVmaW5lIFdPUktfQlVGRkVSX1NJWkUgMTI4CisrICAgICAgICAgICAgQ0hBUl9UIHN0cl9idWZbV09SS19CVUZGRVJfU0laRV07CisrIyBpZmRlZiBfTElCQworKwkgICAgdWludDMyX3QgbnJ1bGVzOworKyMgZW5kaWYgLyogX0xJQkMgKi8KKysjZW5kaWYgLyogV0NIQVIgKi8KKysJICAgIGJvb2xlYW4gbmVnYXRlID0gKHJlX29wY29kZV90KSAqKHAgLSAxKSA9PSBjaGFyc2V0X25vdDsKKysKKysgICAgICAgICAgICBERUJVR19QUklOVDIgKCJFWEVDVVRJTkcgY2hhcnNldCVzLlxuIiwgbmVnYXRlID8gIl9ub3QiIDogIiIpOworKwkgICAgUFJFRkVUQ0ggKCk7CisrCSAgICBjID0gVFJBTlNMQVRFICgqZCk7IC8qIFRoZSBjaGFyYWN0ZXIgdG8gbWF0Y2guICAqLworKyNpZmRlZiBXQ0hBUgorKyMgaWZkZWYgX0xJQkMKKysJICAgIG5ydWxlcyA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisrIyBlbmRpZiAvKiBfTElCQyAqLworKwkgICAgY2hhcnNldF90b3AgPSBwIC0gMTsKKysJICAgIGNoYXJfY2xhc3NfbGVuZ3RoID0gKnArKzsKKysJICAgIGNvbGxfc3ltYm9sX2xlbmd0aCA9ICpwKys7CisrCSAgICBlcXVpdl9jbGFzc19sZW5ndGggPSAqcCsrOworKwkgICAgcmFuZ2VzX2xlbmd0aCA9ICpwKys7CisrCSAgICBjaGFyc19sZW5ndGggPSAqcCsrOworKwkgICAgLyogcCBwb2ludHMgY2hhcnNldFs2XSwgc28gdGhlIGFkZHJlc3Mgb2YgdGhlIG5leHQgaW5zdHJ1Y3Rpb24KKysJICAgICAgIChjaGFyc2V0W2wrbStuKzJvK2srcCddKSBlcXVhbHMgcFtsK20rbisyKm8rcCddLAorKwkgICAgICAgd2hlcmUgbD1sZW5ndGggb2YgY2hhcl9jbGFzc2VzLCBtPWxlbmd0aCBvZiBjb2xsYXRpbmdfc3ltYm9sLAorKwkgICAgICAgbj1lcXVpdmFsZW5jZV9jbGFzcywgbz1sZW5ndGggb2YgY2hhcl9yYW5nZSwKKysJICAgICAgIHAnPWxlbmd0aCBvZiBjaGFyYWN0ZXIuICAqLworKwkgICAgd29ya3AgPSBwOworKwkgICAgLyogVXBkYXRlIHAgdG8gaW5kaWNhdGUgdGhlIG5leHQgaW5zdHJ1Y3Rpb24uICAqLworKwkgICAgcCArPSBjaGFyX2NsYXNzX2xlbmd0aCArIGNvbGxfc3ltYm9sX2xlbmd0aCsgZXF1aXZfY2xhc3NfbGVuZ3RoICsKKysgICAgICAgICAgICAgIDIqcmFuZ2VzX2xlbmd0aCArIGNoYXJzX2xlbmd0aDsKKysKKysgICAgICAgICAgICAvKiBtYXRjaCB3aXRoIGNoYXJfY2xhc3M/ICAqLworKwkgICAgZm9yIChpID0gMDsgaSA8IGNoYXJfY2xhc3NfbGVuZ3RoIDsgaSArPSBDSEFSX0NMQVNTX1NJWkUpCisrCSAgICAgIHsKKysJCXdjdHlwZV90IHdjdHlwZTsKKysJCXVpbnRwdHJfdCBhbGlnbmVkcCA9ICgodWludHB0cl90KXdvcmtwCisrCQkJCSAgICAgICsgX19hbGlnbm9mX18od2N0eXBlX3QpIC0gMSkKKysJCSAgCQkgICAgICAmIH4odWludHB0cl90KShfX2FsaWdub2ZfXyh3Y3R5cGVfdCkgLSAxKTsKKysJCXdjdHlwZSA9ICooKHdjdHlwZV90KilhbGlnbmVkcCk7CisrCQl3b3JrcCArPSBDSEFSX0NMQVNTX1NJWkU7CisrIyBpZmRlZiBfTElCQworKwkJaWYgKF9faXN3Y3R5cGUoKHdpbnRfdCljLCB3Y3R5cGUpKQorKwkJICBnb3RvIGNoYXJfc2V0X21hdGNoZWQ7CisrIyBlbHNlCisrCQlpZiAoaXN3Y3R5cGUoKHdpbnRfdCljLCB3Y3R5cGUpKQorKwkJICBnb3RvIGNoYXJfc2V0X21hdGNoZWQ7CisrIyBlbmRpZgorKwkgICAgICB9CisrCisrICAgICAgICAgICAgLyogbWF0Y2ggd2l0aCBjb2xsYXRpbmdfc3ltYm9sPyAgKi8KKysjIGlmZGVmIF9MSUJDCisrCSAgICBpZiAobnJ1bGVzICE9IDApCisrCSAgICAgIHsKKysJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4dHJhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKysJCSAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX1NZTUJfRVhUUkFNQik7CisrCisrCQlmb3IgKHdvcmtwMiA9IHdvcmtwICsgY29sbF9zeW1ib2xfbGVuZ3RoIDsgd29ya3AgPCB3b3JrcDIgOworKwkJICAgICB3b3JrcCsrKQorKwkJICB7CisrCQkgICAgaW50MzJfdCAqd2V4dHJhOworKwkJICAgIHdleHRyYSA9IChpbnQzMl90KikoZXh0cmEgKyAqd29ya3ArKyk7CisrCQkgICAgZm9yIChpID0gMDsgaSA8ICp3ZXh0cmE7ICsraSkKKysJCSAgICAgIGlmIChUUkFOU0xBVEUoZFtpXSkgIT0gd2V4dHJhWzEgKyBpXSkKKysJCQlicmVhazsKKysKKysJCSAgICBpZiAoaSA9PSAqd2V4dHJhKQorKwkJICAgICAgeworKwkJCS8qIFVwZGF0ZSBkLCBob3dldmVyIGQgd2lsbCBiZSBpbmNyZW1lbnRlZCBhdAorKwkJCSAgIGNoYXJfc2V0X21hdGNoZWQ6LCB3ZSBkZWNyZW1lbnQgZCBoZXJlLiAgKi8KKysJCQlkICs9IGkgLSAxOworKwkJCWdvdG8gY2hhcl9zZXRfbWF0Y2hlZDsKKysJCSAgICAgIH0KKysJCSAgfQorKwkgICAgICB9CisrCSAgICBlbHNlIC8qIChucnVsZXMgPT0gMCkgKi8KKysjIGVuZGlmCisrCSAgICAgIC8qIElmIHdlIGNhbid0IGxvb2sgdXAgY29sbGF0aW9uIGRhdGEsIHdlIHVzZSB3Y3Njb2xsCisrCQkgaW5zdGVhZC4gICovCisrCSAgICAgIHsKKysJCWZvciAod29ya3AyID0gd29ya3AgKyBjb2xsX3N5bWJvbF9sZW5ndGggOyB3b3JrcCA8IHdvcmtwMiA7KQorKwkJICB7CisrCQkgICAgY29uc3QgQ0hBUl9UICpiYWNrdXBfZCA9IGQsICpiYWNrdXBfZGVuZCA9IGRlbmQ7CisrIyBpZmRlZiBfTElCQworKwkJICAgIGxlbmd0aCA9IF9fd2NzbGVuICh3b3JrcCk7CisrIyBlbHNlCisrCQkgICAgbGVuZ3RoID0gd2NzbGVuICh3b3JrcCk7CisrIyBlbmRpZgorKworKwkJICAgIC8qIElmIHdjc2NvbGwodGhlIGNvbGxhdGluZyBzeW1ib2wsIHdob2xlIHN0cmluZykgPiAwLAorKwkJICAgICAgIGFueSBzdWJzdHJpbmcgb2YgdGhlIHN0cmluZyBuZXZlciBtYXRjaCB3aXRoIHRoZQorKwkJICAgICAgIGNvbGxhdGluZyBzeW1ib2wuICAqLworKyMgaWZkZWYgX0xJQkMKKysJCSAgICBpZiAoX193Y3Njb2xsICh3b3JrcCwgZCkgPiAwKQorKyMgZWxzZQorKwkJICAgIGlmICh3Y3Njb2xsICh3b3JrcCwgZCkgPiAwKQorKyMgZW5kaWYKKysJCSAgICAgIHsKKysJCQl3b3JrcCArPSBsZW5ndGggKyAxOworKwkJCWNvbnRpbnVlOworKwkJICAgICAgfQorKworKwkJICAgIC8qIEZpcnN0LCB3ZSBjb21wYXJlIHRoZSBjb2xsYXRpbmcgc3ltYm9sIHdpdGgKKysJCSAgICAgICB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzdHJpbmcuCisrCQkgICAgICAgSWYgaXQgZG9uJ3QgbWF0Y2gsIHdlIGFkZCB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8KKysJCSAgICAgICB0aGUgY29tcGFyZSBidWZmZXIgaW4gdHVybi4gICovCisrCQkgICAgZm9yIChpID0gMCA7IGkgPCBXT1JLX0JVRkZFUl9TSVpFLTEgOyBpKyssIGQrKykKKysJCSAgICAgIHsKKysJCQlpbnQgbWF0Y2g7CisrCQkJaWYgKGQgPT0gZGVuZCkKKysJCQkgIHsKKysJCQkgICAgaWYgKGRlbmQgPT0gZW5kX21hdGNoXzIpCisrCQkJICAgICAgYnJlYWs7CisrCQkJICAgIGQgPSBzdHJpbmcyOworKwkJCSAgICBkZW5kID0gZW5kX21hdGNoXzI7CisrCQkJICB9CisrCisrCQkJLyogYWRkIG5leHQgY2hhcmFjdGVyIHRvIHRoZSBjb21wYXJlIGJ1ZmZlci4gICovCisrCQkJc3RyX2J1ZltpXSA9IFRSQU5TTEFURSgqZCk7CisrCQkJc3RyX2J1ZltpKzFdID0gJ1wwJzsKKysKKysjIGlmZGVmIF9MSUJDCisrCQkJbWF0Y2ggPSBfX3djc2NvbGwgKHdvcmtwLCBzdHJfYnVmKTsKKysjIGVsc2UKKysJCQltYXRjaCA9IHdjc2NvbGwgKHdvcmtwLCBzdHJfYnVmKTsKKysjIGVuZGlmCisrCQkJaWYgKG1hdGNoID09IDApCisrCQkJICBnb3RvIGNoYXJfc2V0X21hdGNoZWQ7CisrCisrCQkJaWYgKG1hdGNoIDwgMCkKKysJCQkgIC8qIChzdHJfYnVmID4gd29ya3ApIGluZGljYXRlIChzdHJfYnVmICsgWCA+IHdvcmtwKSwKKysJCQkgICAgIGJlY2F1c2UgZm9yIGFsbCBYIChzdHJfYnVmICsgWCA+IHN0cl9idWYpLgorKwkJCSAgICAgU28gd2UgZG9uJ3QgbmVlZCBjb250aW51ZSB0aGlzIGxvb3AuICAqLworKwkJCSAgYnJlYWs7CisrCisrCQkJLyogT3RoZXJ3aXNlKHN0cl9idWYgPCB3b3JrcCksCisrCQkJICAgKHN0cl9idWYrbmV4dF9jaGFyYWN0ZXIpIG1heSBlcXVhbHMgKHdvcmtwKS4KKysJCQkgICBTbyB3ZSBjb250aW51ZSB0aGlzIGxvb3AuICAqLworKwkJICAgICAgfQorKwkJICAgIC8qIG5vdCBtYXRjaGVkICovCisrCQkgICAgZCA9IGJhY2t1cF9kOworKwkJICAgIGRlbmQgPSBiYWNrdXBfZGVuZDsKKysJCSAgICB3b3JrcCArPSBsZW5ndGggKyAxOworKwkJICB9CisrICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgLyogbWF0Y2ggd2l0aCBlcXVpdmFsZW5jZV9jbGFzcz8gICovCisrIyBpZmRlZiBfTElCQworKwkgICAgaWYgKG5ydWxlcyAhPSAwKQorKwkgICAgICB7CisrICAgICAgICAgICAgICAgIGNvbnN0IENIQVJfVCAqYmFja3VwX2QgPSBkLCAqYmFja3VwX2RlbmQgPSBkZW5kOworKwkJLyogVHJ5IHRvIG1hdGNoIHRoZSBlcXVpdmFsZW5jZSBjbGFzcyBhZ2FpbnN0CisrCQkgICB0aG9zZSBrbm93biB0byB0aGUgY29sbGF0ZSBpbXBsZW1lbnRhdGlvbi4gICovCisrCQljb25zdCBpbnQzMl90ICp0YWJsZTsKKysJCWNvbnN0IGludDMyX3QgKndlaWdodHM7CisrCQljb25zdCBpbnQzMl90ICpleHRyYTsKKysJCWNvbnN0IGludDMyX3QgKmluZGlyZWN0OworKwkJaW50MzJfdCBpZHgsIGlkeDI7CisrCQl3aW50X3QgKmNwOworKwkJc2l6ZV90IGxlbjsKKysKKysJCXRhYmxlID0gKGNvbnN0IGludDMyX3QgKikKKysJCSAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX1RBQkxFV0MpOworKwkJd2VpZ2h0cyA9IChjb25zdCB3aW50X3QgKikKKysJCSAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX1dFSUdIVFdDKTsKKysJCWV4dHJhID0gKGNvbnN0IHdpbnRfdCAqKQorKwkJICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfRVhUUkFXQyk7CisrCQlpbmRpcmVjdCA9IChjb25zdCBpbnQzMl90ICopCisrCQkgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9JTkRJUkVDVFdDKTsKKysKKysJCS8qIFdyaXRlIDEgY29sbGF0aW5nIGVsZW1lbnQgdG8gc3RyX2J1ZiwgYW5kCisrCQkgICBnZXQgaXRzIGluZGV4LiAgKi8KKysJCWlkeDIgPSAwOworKworKwkJZm9yIChpID0gMCA7IGlkeDIgPT0gMCAmJiBpIDwgV09SS19CVUZGRVJfU0laRSAtIDE7IGkrKykKKysJCSAgeworKwkJICAgIGNwID0gKHdpbnRfdCopc3RyX2J1ZjsKKysJCSAgICBpZiAoZCA9PSBkZW5kKQorKwkJICAgICAgeworKwkJCWlmIChkZW5kID09IGVuZF9tYXRjaF8yKQorKwkJCSAgYnJlYWs7CisrCQkJZCA9IHN0cmluZzI7CisrCQkJZGVuZCA9IGVuZF9tYXRjaF8yOworKwkJICAgICAgfQorKwkJICAgIHN0cl9idWZbaV0gPSBUUkFOU0xBVEUoKihkK2kpKTsKKysJCSAgICBzdHJfYnVmW2krMV0gPSAnXDAnOyAvKiBzZW50aW5lbCAqLworKwkJICAgIGlkeDIgPSBGSU5ESURYICh0YWJsZSwgaW5kaXJlY3QsIGV4dHJhLCAmY3AsIDEpOworKwkJICB9CisrCisrCQkvKiBVcGRhdGUgZCwgaG93ZXZlciBkIHdpbGwgYmUgaW5jcmVtZW50ZWQgYXQKKysJCSAgIGNoYXJfc2V0X21hdGNoZWQ6LCB3ZSBkZWNyZW1lbnQgZCBoZXJlLiAgKi8KKysJCWQgPSBiYWNrdXBfZCArICgod2NoYXJfdCopY3AgLSAod2NoYXJfdCopc3RyX2J1ZiAtIDEpOworKwkJaWYgKGQgPj0gZGVuZCkKKysJCSAgeworKwkJICAgIGlmIChkZW5kID09IGVuZF9tYXRjaF8yKQorKwkJCWQgPSBkZW5kOworKwkJICAgIGVsc2UKKysJCSAgICAgIHsKKysJCQlkID0gc3RyaW5nMjsKKysJCQlkZW5kID0gZW5kX21hdGNoXzI7CisrCQkgICAgICB9CisrCQkgIH0KKysKKysJCWxlbiA9IHdlaWdodHNbaWR4Ml07CisrCisrCQlmb3IgKHdvcmtwMiA9IHdvcmtwICsgZXF1aXZfY2xhc3NfbGVuZ3RoIDsgd29ya3AgPCB3b3JrcDIgOworKwkJICAgICB3b3JrcCsrKQorKwkJICB7CisrCQkgICAgaWR4ID0gKGludDMyX3QpKndvcmtwOworKwkJICAgIC8qIFdlIGFscmVhZHkgY2hlY2tlZCBpZHggIT0gMCBpbiByZWdleF9jb21waWxlLiAqLworKworKwkJICAgIGlmIChpZHgyICE9IDAgJiYgbGVuID09IHdlaWdodHNbaWR4XSkKKysJCSAgICAgIHsKKysJCQlpbnQgY250ID0gMDsKKysJCQl3aGlsZSAoY250IDwgbGVuICYmICh3ZWlnaHRzW2lkeCArIDEgKyBjbnRdCisrCQkJCQkgICAgID09IHdlaWdodHNbaWR4MiArIDEgKyBjbnRdKSkKKysJCQkgICsrY250OworKworKwkJCWlmIChjbnQgPT0gbGVuKQorKwkJCSAgZ290byBjaGFyX3NldF9tYXRjaGVkOworKwkJICAgICAgfQorKwkJICB9CisrCQkvKiBub3QgbWF0Y2hlZCAqLworKyAgICAgICAgICAgICAgICBkID0gYmFja3VwX2Q7CisrICAgICAgICAgICAgICAgIGRlbmQgPSBiYWNrdXBfZGVuZDsKKysJICAgICAgfQorKwkgICAgZWxzZSAvKiAobnJ1bGVzID09IDApICovCisrIyBlbmRpZgorKwkgICAgICAvKiBJZiB3ZSBjYW4ndCBsb29rIHVwIGNvbGxhdGlvbiBkYXRhLCB3ZSB1c2Ugd2NzY29sbAorKwkJIGluc3RlYWQuICAqLworKwkgICAgICB7CisrCQlmb3IgKHdvcmtwMiA9IHdvcmtwICsgZXF1aXZfY2xhc3NfbGVuZ3RoIDsgd29ya3AgPCB3b3JrcDIgOykKKysJCSAgeworKwkJICAgIGNvbnN0IENIQVJfVCAqYmFja3VwX2QgPSBkLCAqYmFja3VwX2RlbmQgPSBkZW5kOworKyMgaWZkZWYgX0xJQkMKKysJCSAgICBsZW5ndGggPSBfX3djc2xlbiAod29ya3ApOworKyMgZWxzZQorKwkJICAgIGxlbmd0aCA9IHdjc2xlbiAod29ya3ApOworKyMgZW5kaWYKKysKKysJCSAgICAvKiBJZiB3Y3Njb2xsKHRoZSBjb2xsYXRpbmcgc3ltYm9sLCB3aG9sZSBzdHJpbmcpID4gMCwKKysJCSAgICAgICBhbnkgc3Vic3RyaW5nIG9mIHRoZSBzdHJpbmcgbmV2ZXIgbWF0Y2ggd2l0aCB0aGUKKysJCSAgICAgICBjb2xsYXRpbmcgc3ltYm9sLiAgKi8KKysjIGlmZGVmIF9MSUJDCisrCQkgICAgaWYgKF9fd2NzY29sbCAod29ya3AsIGQpID4gMCkKKysjIGVsc2UKKysJCSAgICBpZiAod2NzY29sbCAod29ya3AsIGQpID4gMCkKKysjIGVuZGlmCisrCQkgICAgICB7CisrCQkJd29ya3AgKz0gbGVuZ3RoICsgMTsKKysJCQlicmVhazsKKysJCSAgICAgIH0KKysKKysJCSAgICAvKiBGaXJzdCwgd2UgY29tcGFyZSB0aGUgZXF1aXZhbGVuY2UgY2xhc3Mgd2l0aAorKwkJICAgICAgIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHN0cmluZy4KKysJCSAgICAgICBJZiBpdCBkb24ndCBtYXRjaCwgd2UgYWRkIHRoZSBuZXh0IGNoYXJhY3RlciB0bworKwkJICAgICAgIHRoZSBjb21wYXJlIGJ1ZmZlciBpbiB0dXJuLiAgKi8KKysJCSAgICBmb3IgKGkgPSAwIDsgaSA8IFdPUktfQlVGRkVSX1NJWkUgLSAxIDsgaSsrLCBkKyspCisrCQkgICAgICB7CisrCQkJaW50IG1hdGNoOworKwkJCWlmIChkID09IGRlbmQpCisrCQkJICB7CisrCQkJICAgIGlmIChkZW5kID09IGVuZF9tYXRjaF8yKQorKwkJCSAgICAgIGJyZWFrOworKwkJCSAgICBkID0gc3RyaW5nMjsKKysJCQkgICAgZGVuZCA9IGVuZF9tYXRjaF8yOworKwkJCSAgfQorKworKwkJCS8qIGFkZCBuZXh0IGNoYXJhY3RlciB0byB0aGUgY29tcGFyZSBidWZmZXIuICAqLworKwkJCXN0cl9idWZbaV0gPSBUUkFOU0xBVEUoKmQpOworKwkJCXN0cl9idWZbaSsxXSA9ICdcMCc7CisrCisrIyBpZmRlZiBfTElCQworKwkJCW1hdGNoID0gX193Y3Njb2xsICh3b3JrcCwgc3RyX2J1Zik7CisrIyBlbHNlCisrCQkJbWF0Y2ggPSB3Y3Njb2xsICh3b3JrcCwgc3RyX2J1Zik7CisrIyBlbmRpZgorKworKwkJCWlmIChtYXRjaCA9PSAwKQorKwkJCSAgZ290byBjaGFyX3NldF9tYXRjaGVkOworKworKwkJCWlmIChtYXRjaCA8IDApCisrCQkJLyogKHN0cl9idWYgPiB3b3JrcCkgaW5kaWNhdGUgKHN0cl9idWYgKyBYID4gd29ya3ApLAorKwkJCSAgIGJlY2F1c2UgZm9yIGFsbCBYIChzdHJfYnVmICsgWCA+IHN0cl9idWYpLgorKwkJCSAgIFNvIHdlIGRvbid0IG5lZWQgY29udGludWUgdGhpcyBsb29wLiAgKi8KKysJCQkgIGJyZWFrOworKworKwkJCS8qIE90aGVyd2lzZShzdHJfYnVmIDwgd29ya3ApLAorKwkJCSAgIChzdHJfYnVmK25leHRfY2hhcmFjdGVyKSBtYXkgZXF1YWxzICh3b3JrcCkuCisrCQkJICAgU28gd2UgY29udGludWUgdGhpcyBsb29wLiAgKi8KKysJCSAgICAgIH0KKysJCSAgICAvKiBub3QgbWF0Y2hlZCAqLworKwkJICAgIGQgPSBiYWNrdXBfZDsKKysJCSAgICBkZW5kID0gYmFja3VwX2RlbmQ7CisrCQkgICAgd29ya3AgKz0gbGVuZ3RoICsgMTsKKysJCSAgfQorKwkgICAgICB9CisrCisrICAgICAgICAgICAgLyogbWF0Y2ggd2l0aCBjaGFyX3JhbmdlPyAgKi8KKysjIGlmZGVmIF9MSUJDCisrCSAgICBpZiAobnJ1bGVzICE9IDApCisrCSAgICAgIHsKKysJCXVpbnQzMl90IGNvbGxzZXF2YWw7CisrCQljb25zdCBjaGFyICpjb2xsc2VxID0gKGNvbnN0IGNoYXIgKikKKysJCSAgX05MX0NVUlJFTlQoTENfQ09MTEFURSwgX05MX0NPTExBVEVfQ09MTFNFUVdDKTsKKysKKysJCWNvbGxzZXF2YWwgPSBjb2xsc2VxX3RhYmxlX2xvb2t1cCAoY29sbHNlcSwgYyk7CisrCisrCQlmb3IgKDsgd29ya3AgPCBwIC0gY2hhcnNfbGVuZ3RoIDspCisrCQkgIHsKKysJCSAgICB1aW50MzJfdCBzdGFydF92YWwsIGVuZF92YWw7CisrCisrCQkgICAgLyogV2UgYWxyZWFkeSBjb21wdXRlIHRoZSBjb2xsYXRpb24gc2VxdWVuY2UgdmFsdWUKKysJCSAgICAgICBvZiB0aGUgY2hhcmFjdGVycyAob3IgY29sbGF0aW5nIHN5bWJvbHMpLiAgKi8KKysJCSAgICBzdGFydF92YWwgPSAodWludDMyX3QpICp3b3JrcCsrOyAvKiByYW5nZV9zdGFydCAqLworKwkJICAgIGVuZF92YWwgPSAodWludDMyX3QpICp3b3JrcCsrOyAvKiByYW5nZV9lbmQgKi8KKysKKysJCSAgICBpZiAoc3RhcnRfdmFsIDw9IGNvbGxzZXF2YWwgJiYgY29sbHNlcXZhbCA8PSBlbmRfdmFsKQorKwkJICAgICAgZ290byBjaGFyX3NldF9tYXRjaGVkOworKwkJICB9CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysjIGVuZGlmCisrCSAgICAgIHsKKysJCS8qIFdlIHNldCByYW5nZV9zdGFydF9jaGFyIGF0IHN0cl9idWZbMF0sIHJhbmdlX2VuZF9jaGFyCisrCQkgICBhdCBzdHJfYnVmWzRdLCBhbmQgY29tcGFyZWQgY2hhciBhdCBzdHJfYnVmWzJdLiAgKi8KKysJCXN0cl9idWZbMV0gPSAwOworKwkJc3RyX2J1ZlsyXSA9IGM7CisrCQlzdHJfYnVmWzNdID0gMDsKKysJCXN0cl9idWZbNV0gPSAwOworKwkJZm9yICg7IHdvcmtwIDwgcCAtIGNoYXJzX2xlbmd0aCA7KQorKwkJICB7CisrCQkgICAgd2NoYXJfdCAqcmFuZ2Vfc3RhcnRfY2hhciwgKnJhbmdlX2VuZF9jaGFyOworKworKwkJICAgIC8qIG1hdGNoIGlmIChyYW5nZV9zdGFydF9jaGFyIDw9IGMgPD0gcmFuZ2VfZW5kX2NoYXIpLiAgKi8KKysKKysJCSAgICAvKiBJZiByYW5nZV9zdGFydChvciBlbmQpIDwgMCwgd2UgYXNzdW1lIC1yYW5nZV9zdGFydChlbmQpCisrCQkgICAgICAgaXMgdGhlIG9mZnNldCBvZiB0aGUgY29sbGF0aW5nIHN5bWJvbCB3aGljaCBpcyBzcGVjaWZpZWQKKysJCSAgICAgICBhcyB0aGUgY2hhcmFjdGVyIG9mIHRoZSByYW5nZSBzdGFydChlbmQpLiAgKi8KKysKKysJCSAgICAvKiByYW5nZV9zdGFydCAqLworKwkJICAgIGlmICgqd29ya3AgPCAwKQorKwkJICAgICAgcmFuZ2Vfc3RhcnRfY2hhciA9IGNoYXJzZXRfdG9wIC0gKCp3b3JrcCsrKTsKKysJCSAgICBlbHNlCisrCQkgICAgICB7CisrCQkJc3RyX2J1ZlswXSA9ICp3b3JrcCsrOworKwkJCXJhbmdlX3N0YXJ0X2NoYXIgPSBzdHJfYnVmOworKwkJICAgICAgfQorKworKwkJICAgIC8qIHJhbmdlX2VuZCAqLworKwkJICAgIGlmICgqd29ya3AgPCAwKQorKwkJICAgICAgcmFuZ2VfZW5kX2NoYXIgPSBjaGFyc2V0X3RvcCAtICgqd29ya3ArKyk7CisrCQkgICAgZWxzZQorKwkJICAgICAgeworKwkJCXN0cl9idWZbNF0gPSAqd29ya3ArKzsKKysJCQlyYW5nZV9lbmRfY2hhciA9IHN0cl9idWYgKyA0OworKwkJICAgICAgfQorKworKyMgaWZkZWYgX0xJQkMKKysJCSAgICBpZiAoX193Y3Njb2xsIChyYW5nZV9zdGFydF9jaGFyLCBzdHJfYnVmKzIpIDw9IDAKKysJCQkmJiBfX3djc2NvbGwgKHN0cl9idWYrMiwgcmFuZ2VfZW5kX2NoYXIpIDw9IDApCisrIyBlbHNlCisrCQkgICAgaWYgKHdjc2NvbGwgKHJhbmdlX3N0YXJ0X2NoYXIsIHN0cl9idWYrMikgPD0gMAorKwkJCSYmIHdjc2NvbGwgKHN0cl9idWYrMiwgcmFuZ2VfZW5kX2NoYXIpIDw9IDApCisrIyBlbmRpZgorKwkJICAgICAgZ290byBjaGFyX3NldF9tYXRjaGVkOworKwkJICB9CisrCSAgICAgIH0KKysKKysgICAgICAgICAgICAvKiBtYXRjaCB3aXRoIGNoYXI/ICAqLworKwkgICAgZm9yICg7IHdvcmtwIDwgcCA7IHdvcmtwKyspCisrCSAgICAgIGlmIChjID09ICp3b3JrcCkKKysJCWdvdG8gY2hhcl9zZXRfbWF0Y2hlZDsKKysKKysJICAgIG5lZ2F0ZSA9ICFuZWdhdGU7CisrCisrCSAgY2hhcl9zZXRfbWF0Y2hlZDoKKysJICAgIGlmIChuZWdhdGUpIGdvdG8gZmFpbDsKKysjZWxzZQorKyAgICAgICAgICAgIC8qIENhc3QgdG8gYHVuc2lnbmVkJyBpbnN0ZWFkIG9mIGB1bnNpZ25lZCBjaGFyJyBpbiBjYXNlIHRoZQorKyAgICAgICAgICAgICAgIGJpdCBsaXN0IGlzIGEgZnVsbCAzMiBieXRlcyBsb25nLiAgKi8KKysJICAgIGlmIChjIDwgKHVuc2lnbmVkKSAoKnAgKiBCWVRFV0lEVEgpCisrCQkmJiBwWzEgKyBjIC8gQllURVdJRFRIXSAmICgxIDw8IChjICUgQllURVdJRFRIKSkpCisrCSAgICAgIG5lZ2F0ZSA9ICFuZWdhdGU7CisrCisrCSAgICBwICs9IDEgKyAqcDsKKysKKysJICAgIGlmICghbmVnYXRlKSBnb3RvIGZhaWw7CisrI3VuZGVmIFdPUktfQlVGRkVSX1NJWkUKKysjZW5kaWYgLyogV0NIQVIgKi8KKysJICAgIFNFVF9SRUdTX01BVENIRUQgKCk7CisrICAgICAgICAgICAgZCsrOworKwkgICAgYnJlYWs7CisrCSAgfQorKworKworKyAgICAgICAgLyogVGhlIGJlZ2lubmluZyBvZiBhIGdyb3VwIGlzIHJlcHJlc2VudGVkIGJ5IHN0YXJ0X21lbW9yeS4KKysgICAgICAgICAgIFRoZSBhcmd1bWVudHMgYXJlIHRoZSByZWdpc3RlciBudW1iZXIgaW4gdGhlIG5leHQgYnl0ZSwgYW5kIHRoZQorKyAgICAgICAgICAgbnVtYmVyIG9mIGdyb3VwcyBpbm5lciB0byB0aGlzIG9uZSBpbiB0aGUgbmV4dC4gIFRoZSB0ZXh0CisrICAgICAgICAgICBtYXRjaGVkIHdpdGhpbiB0aGUgZ3JvdXAgaXMgcmVjb3JkZWQgKGluIHRoZSBpbnRlcm5hbAorKyAgICAgICAgICAgcmVnaXN0ZXJzIGRhdGEgc3RydWN0dXJlKSB1bmRlciB0aGUgcmVnaXN0ZXIgbnVtYmVyLiAgKi8KKysgICAgICAgIGNhc2Ugc3RhcnRfbWVtb3J5OgorKwkgIERFQlVHX1BSSU5UMyAoIkVYRUNVVElORyBzdGFydF9tZW1vcnkgJWxkICglbGQpOlxuIiwKKysJCQkobG9uZyBpbnQpICpwLCAobG9uZyBpbnQpIHBbMV0pOworKworKyAgICAgICAgICAvKiBGaW5kIG91dCBpZiB0aGlzIGdyb3VwIGNhbiBtYXRjaCB0aGUgZW1wdHkgc3RyaW5nLiAgKi8KKysJICBwMSA9IHA7CQkvKiBUbyBzZW5kIHRvIGdyb3VwX21hdGNoX251bGxfc3RyaW5nX3AuICAqLworKworKyAgICAgICAgICBpZiAoUkVHX01BVENIX05VTExfU1RSSU5HX1AgKHJlZ19pbmZvWypwXSkgPT0gTUFUQ0hfTlVMTF9VTlNFVF9WQUxVRSkKKysgICAgICAgICAgICBSRUdfTUFUQ0hfTlVMTF9TVFJJTkdfUCAocmVnX2luZm9bKnBdKQorKyAgICAgICAgICAgICAgPSBQUkVGSVgoZ3JvdXBfbWF0Y2hfbnVsbF9zdHJpbmdfcCkgKCZwMSwgcGVuZCwgcmVnX2luZm8pOworKworKyAgICAgICAgICAvKiBTYXZlIHRoZSBwb3NpdGlvbiBpbiB0aGUgc3RyaW5nIHdoZXJlIHdlIHdlcmUgdGhlIGxhc3QgdGltZQorKyAgICAgICAgICAgICB3ZSB3ZXJlIGF0IHRoaXMgb3Blbi1ncm91cCBvcGVyYXRvciBpbiBjYXNlIHRoZSBncm91cCBpcworKyAgICAgICAgICAgICBvcGVyYXRlZCB1cG9uIGJ5IGEgcmVwZXRpdGlvbiBvcGVyYXRvciwgZS5nLiwgd2l0aCBgKGEqKSpiJworKyAgICAgICAgICAgICBhZ2FpbnN0IGBhYic7IHRoZW4gd2Ugd2FudCB0byBpZ25vcmUgd2hlcmUgd2UgYXJlIG5vdyBpbgorKyAgICAgICAgICAgICB0aGUgc3RyaW5nIGluIGNhc2UgdGhpcyBhdHRlbXB0IHRvIG1hdGNoIGZhaWxzLiAgKi8KKysgICAgICAgICAgb2xkX3JlZ3N0YXJ0WypwXSA9IFJFR19NQVRDSF9OVUxMX1NUUklOR19QIChyZWdfaW5mb1sqcF0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFJFR19VTlNFVCAocmVnc3RhcnRbKnBdKSA/IGQgOiByZWdzdGFydFsqcF0KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVnc3RhcnRbKnBdOworKwkgIERFQlVHX1BSSU5UMiAoIiAgb2xkX3JlZ3N0YXJ0OiAlZFxuIiwKKysJCQkgUE9JTlRFUl9UT19PRkZTRVQgKG9sZF9yZWdzdGFydFsqcF0pKTsKKysKKysgICAgICAgICAgcmVnc3RhcnRbKnBdID0gZDsKKysJICBERUJVR19QUklOVDIgKCIgIHJlZ3N0YXJ0OiAlZFxuIiwgUE9JTlRFUl9UT19PRkZTRVQgKHJlZ3N0YXJ0WypwXSkpOworKworKyAgICAgICAgICBJU19BQ1RJVkUgKHJlZ19pbmZvWypwXSkgPSAxOworKyAgICAgICAgICBNQVRDSEVEX1NPTUVUSElORyAocmVnX2luZm9bKnBdKSA9IDA7CisrCisrCSAgLyogQ2xlYXIgdGhpcyB3aGVuZXZlciB3ZSBjaGFuZ2UgdGhlIHJlZ2lzdGVyIGFjdGl2aXR5IHN0YXR1cy4gICovCisrCSAgc2V0X3JlZ3NfbWF0Y2hlZF9kb25lID0gMDsKKysKKysgICAgICAgICAgLyogVGhpcyBpcyB0aGUgbmV3IGhpZ2hlc3QgYWN0aXZlIHJlZ2lzdGVyLiAgKi8KKysgICAgICAgICAgaGlnaGVzdF9hY3RpdmVfcmVnID0gKnA7CisrCisrICAgICAgICAgIC8qIElmIG5vdGhpbmcgd2FzIGFjdGl2ZSBiZWZvcmUsIHRoaXMgaXMgdGhlIG5ldyBsb3dlc3QgYWN0aXZlCisrICAgICAgICAgICAgIHJlZ2lzdGVyLiAgKi8KKysgICAgICAgICAgaWYgKGxvd2VzdF9hY3RpdmVfcmVnID09IE5PX0xPV0VTVF9BQ1RJVkVfUkVHKQorKyAgICAgICAgICAgIGxvd2VzdF9hY3RpdmVfcmVnID0gKnA7CisrCisrICAgICAgICAgIC8qIE1vdmUgcGFzdCB0aGUgcmVnaXN0ZXIgbnVtYmVyIGFuZCBpbm5lciBncm91cCBjb3VudC4gICovCisrICAgICAgICAgIHAgKz0gMjsKKysJICBqdXN0X3Bhc3Rfc3RhcnRfbWVtID0gcDsKKysKKysgICAgICAgICAgYnJlYWs7CisrCisrCisrICAgICAgICAvKiBUaGUgc3RvcF9tZW1vcnkgb3Bjb2RlIHJlcHJlc2VudHMgdGhlIGVuZCBvZiBhIGdyb3VwLiAgSXRzCisrICAgICAgICAgICBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIHN0YXJ0X21lbW9yeSdzOiB0aGUgcmVnaXN0ZXIKKysgICAgICAgICAgIG51bWJlciwgYW5kIHRoZSBudW1iZXIgb2YgaW5uZXIgZ3JvdXBzLiAgKi8KKysJY2FzZSBzdG9wX21lbW9yeToKKysJICBERUJVR19QUklOVDMgKCJFWEVDVVRJTkcgc3RvcF9tZW1vcnkgJWxkICglbGQpOlxuIiwKKysJCQkobG9uZyBpbnQpICpwLCAobG9uZyBpbnQpIHBbMV0pOworKworKyAgICAgICAgICAvKiBXZSBuZWVkIHRvIHNhdmUgdGhlIHN0cmluZyBwb3NpdGlvbiB0aGUgbGFzdCB0aW1lIHdlIHdlcmUgYXQKKysgICAgICAgICAgICAgdGhpcyBjbG9zZS1ncm91cCBvcGVyYXRvciBpbiBjYXNlIHRoZSBncm91cCBpcyBvcGVyYXRlZAorKyAgICAgICAgICAgICB1cG9uIGJ5IGEgcmVwZXRpdGlvbiBvcGVyYXRvciwgZS5nLiwgd2l0aCBgKChhKikqKGIqKSopKicKKysgICAgICAgICAgICAgYWdhaW5zdCBgYWJhJzsgdGhlbiB3ZSB3YW50IHRvIGlnbm9yZSB3aGVyZSB3ZSBhcmUgbm93IGluCisrICAgICAgICAgICAgIHRoZSBzdHJpbmcgaW4gY2FzZSB0aGlzIGF0dGVtcHQgdG8gbWF0Y2ggZmFpbHMuICAqLworKyAgICAgICAgICBvbGRfcmVnZW5kWypwXSA9IFJFR19NQVRDSF9OVUxMX1NUUklOR19QIChyZWdfaW5mb1sqcF0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBSRUdfVU5TRVQgKHJlZ2VuZFsqcF0pID8gZCA6IHJlZ2VuZFsqcF0KKysJCQkgICA6IHJlZ2VuZFsqcF07CisrCSAgREVCVUdfUFJJTlQyICgiICAgICAgb2xkX3JlZ2VuZDogJWRcbiIsCisrCQkJIFBPSU5URVJfVE9fT0ZGU0VUIChvbGRfcmVnZW5kWypwXSkpOworKworKyAgICAgICAgICByZWdlbmRbKnBdID0gZDsKKysJICBERUJVR19QUklOVDIgKCIgICAgICByZWdlbmQ6ICVkXG4iLCBQT0lOVEVSX1RPX09GRlNFVCAocmVnZW5kWypwXSkpOworKworKyAgICAgICAgICAvKiBUaGlzIHJlZ2lzdGVyIGlzbid0IGFjdGl2ZSBhbnltb3JlLiAgKi8KKysgICAgICAgICAgSVNfQUNUSVZFIChyZWdfaW5mb1sqcF0pID0gMDsKKysKKysJICAvKiBDbGVhciB0aGlzIHdoZW5ldmVyIHdlIGNoYW5nZSB0aGUgcmVnaXN0ZXIgYWN0aXZpdHkgc3RhdHVzLiAgKi8KKysJICBzZXRfcmVnc19tYXRjaGVkX2RvbmUgPSAwOworKworKyAgICAgICAgICAvKiBJZiB0aGlzIHdhcyB0aGUgb25seSByZWdpc3RlciBhY3RpdmUsIG5vdGhpbmcgaXMgYWN0aXZlCisrICAgICAgICAgICAgIGFueW1vcmUuICAqLworKyAgICAgICAgICBpZiAobG93ZXN0X2FjdGl2ZV9yZWcgPT0gaGlnaGVzdF9hY3RpdmVfcmVnKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIGxvd2VzdF9hY3RpdmVfcmVnID0gTk9fTE9XRVNUX0FDVElWRV9SRUc7CisrICAgICAgICAgICAgICBoaWdoZXN0X2FjdGl2ZV9yZWcgPSBOT19ISUdIRVNUX0FDVElWRV9SRUc7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgeyAvKiBXZSBtdXN0IHNjYW4gZm9yIHRoZSBuZXcgaGlnaGVzdCBhY3RpdmUgcmVnaXN0ZXIsIHNpbmNlCisrICAgICAgICAgICAgICAgICBpdCBpc24ndCBuZWNlc3NhcmlseSBvbmUgbGVzcyB0aGFuIG5vdzogY29uc2lkZXIKKysgICAgICAgICAgICAgICAgIChhKGIpYyhkKGUpZilnKS4gIFdoZW4gZ3JvdXAgMyBlbmRzLCBhZnRlciB0aGUgZiksIHRoZQorKyAgICAgICAgICAgICAgICAgbmV3IGhpZ2hlc3QgYWN0aXZlIHJlZ2lzdGVyIGlzIDEuICAqLworKyAgICAgICAgICAgICAgVUNIQVJfVCByID0gKnAgLSAxOworKyAgICAgICAgICAgICAgd2hpbGUgKHIgPiAwICYmICFJU19BQ1RJVkUgKHJlZ19pbmZvW3JdKSkKKysgICAgICAgICAgICAgICAgci0tOworKworKyAgICAgICAgICAgICAgLyogSWYgd2UgZW5kIHVwIGF0IHJlZ2lzdGVyIHplcm8sIHRoYXQgbWVhbnMgdGhhdCB3ZSBzYXZlZAorKyAgICAgICAgICAgICAgICAgdGhlIHJlZ2lzdGVycyBhcyB0aGUgcmVzdWx0IG9mIGFuIGBvbl9mYWlsdXJlX2p1bXAnLCBub3QKKysgICAgICAgICAgICAgICAgIGEgYHN0YXJ0X21lbW9yeScsIGFuZCB3ZSBqdW1wZWQgdG8gcGFzdCB0aGUgaW5uZXJtb3N0CisrICAgICAgICAgICAgICAgICBgc3RvcF9tZW1vcnknLiAgRm9yIGV4YW1wbGUsIGluICgoLikqKSB3ZSBzYXZlCisrICAgICAgICAgICAgICAgICByZWdpc3RlcnMgMSBhbmQgMiBhcyBhIHJlc3VsdCBvZiB0aGUgKiwgYnV0IHdoZW4gd2UgcG9wCisrICAgICAgICAgICAgICAgICBiYWNrIHRvIHRoZSBzZWNvbmQgKSwgd2UgYXJlIGF0IHRoZSBzdG9wX21lbW9yeSAxLgorKyAgICAgICAgICAgICAgICAgVGh1cywgbm90aGluZyBpcyBhY3RpdmUuICAqLworKwkgICAgICBpZiAociA9PSAwKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgbG93ZXN0X2FjdGl2ZV9yZWcgPSBOT19MT1dFU1RfQUNUSVZFX1JFRzsKKysgICAgICAgICAgICAgICAgICBoaWdoZXN0X2FjdGl2ZV9yZWcgPSBOT19ISUdIRVNUX0FDVElWRV9SRUc7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgaGlnaGVzdF9hY3RpdmVfcmVnID0gcjsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgIC8qIElmIGp1c3QgZmFpbGVkIHRvIG1hdGNoIHNvbWV0aGluZyB0aGlzIHRpbWUgYXJvdW5kIHdpdGggYQorKyAgICAgICAgICAgICBncm91cCB0aGF0J3Mgb3BlcmF0ZWQgb24gYnkgYSByZXBldGl0aW9uIG9wZXJhdG9yLCB0cnkgdG8KKysgICAgICAgICAgICAgZm9yY2UgZXhpdCBmcm9tIHRoZSBgYGxvb3AnJywgYW5kIHJlc3RvcmUgdGhlIHJlZ2lzdGVyCisrICAgICAgICAgICAgIGluZm9ybWF0aW9uIGZvciB0aGlzIGdyb3VwIHRoYXQgd2UgaGFkIGJlZm9yZSB0cnlpbmcgdGhpcworKyAgICAgICAgICAgICBsYXN0IG1hdGNoLiAgKi8KKysgICAgICAgICAgaWYgKCghTUFUQ0hFRF9TT01FVEhJTkcgKHJlZ19pbmZvWypwXSkKKysgICAgICAgICAgICAgICB8fCBqdXN0X3Bhc3Rfc3RhcnRfbWVtID09IHAgLSAxKQorKwkgICAgICAmJiAocCArIDIpIDwgcGVuZCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBib29sZWFuIGlzX2FfanVtcF9uID0gZmFsc2U7CisrCisrICAgICAgICAgICAgICBwMSA9IHAgKyAyOworKyAgICAgICAgICAgICAgbWNudCA9IDA7CisrICAgICAgICAgICAgICBzd2l0Y2ggKChyZV9vcGNvZGVfdCkgKnAxKyspCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICBjYXNlIGp1bXBfbjoKKysJCSAgICBpc19hX2p1bXBfbiA9IHRydWU7CisrICAgICAgICAgICAgICAgICAgY2FzZSBwb3BfZmFpbHVyZV9qdW1wOgorKwkJICBjYXNlIG1heWJlX3BvcF9qdW1wOgorKwkJICBjYXNlIGp1bXA6CisrCQkgIGNhc2UgZHVtbXlfZmFpbHVyZV9qdW1wOgorKyAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHAxKTsKKysJCSAgICBpZiAoaXNfYV9qdW1wX24pCisrCQkgICAgICBwMSArPSBPRkZTRVRfQUREUkVTU19TSVpFOworKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi8gOworKyAgICAgICAgICAgICAgICB9CisrCSAgICAgIHAxICs9IG1jbnQ7CisrCisrICAgICAgICAgICAgICAvKiBJZiB0aGUgbmV4dCBvcGVyYXRpb24gaXMgYSBqdW1wIGJhY2t3YXJkcyBpbiB0aGUgcGF0dGVybgorKwkgICAgICAgICB0byBhbiBvbl9mYWlsdXJlX2p1bXAgcmlnaHQgYmVmb3JlIHRoZSBzdGFydF9tZW1vcnkKKysgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBzdG9wX21lbW9yeSwgZXhpdCBmcm9tIHRoZSBsb29wCisrICAgICAgICAgICAgICAgICBieSBmb3JjaW5nIGEgZmFpbHVyZSBhZnRlciBwdXNoaW5nIG9uIHRoZSBzdGFjayB0aGUKKysgICAgICAgICAgICAgICAgIG9uX2ZhaWx1cmVfanVtcCdzIGp1bXAgaW4gdGhlIHBhdHRlcm4sIGFuZCBkLiAgKi8KKysgICAgICAgICAgICAgIGlmIChtY250IDwgMCAmJiAocmVfb3Bjb2RlX3QpICpwMSA9PSBvbl9mYWlsdXJlX2p1bXAKKysgICAgICAgICAgICAgICAgICAmJiAocmVfb3Bjb2RlX3QpIHAxWzErT0ZGU0VUX0FERFJFU1NfU0laRV0gPT0gc3RhcnRfbWVtb3J5CisrCQkgICYmIHAxWzIrT0ZGU0VUX0FERFJFU1NfU0laRV0gPT0gKnApCisrCQl7CisrICAgICAgICAgICAgICAgICAgLyogSWYgdGhpcyBncm91cCBldmVyIG1hdGNoZWQgYW55dGhpbmcsIHRoZW4gcmVzdG9yZQorKyAgICAgICAgICAgICAgICAgICAgIHdoYXQgaXRzIHJlZ2lzdGVycyB3ZXJlIGJlZm9yZSB0cnlpbmcgdGhpcyBsYXN0CisrICAgICAgICAgICAgICAgICAgICAgZmFpbGVkIG1hdGNoLCBlLmcuLCB3aXRoIGAoYSopKmInIGFnYWluc3QgYGFiJyBmb3IKKysgICAgICAgICAgICAgICAgICAgICByZWdzdGFydFsxXSwgYW5kLCBlLmcuLCB3aXRoIGAoKGEqKSooYiopKikqJworKyAgICAgICAgICAgICAgICAgICAgIGFnYWluc3QgYGFiYScgZm9yIHJlZ2VuZFszXS4KKysKKysgICAgICAgICAgICAgICAgICAgICBBbHNvIHJlc3RvcmUgdGhlIHJlZ2lzdGVycyBmb3IgaW5uZXIgZ3JvdXBzIGZvciwKKysgICAgICAgICAgICAgICAgICAgICBlLmcuLCBgKChhKikoYiopKSonIGFnYWluc3QgYGFiYScgKHJlZ2lzdGVyIDMgd291bGQKKysgICAgICAgICAgICAgICAgICAgICBvdGhlcndpc2UgZ2V0IHRyYXNoZWQpLiAgKi8KKysKKysgICAgICAgICAgICAgICAgICBpZiAoRVZFUl9NQVRDSEVEX1NPTUVUSElORyAocmVnX2luZm9bKnBdKSkKKysJCSAgICB7CisrCQkgICAgICB1bnNpZ25lZCByOworKworKyAgICAgICAgICAgICAgICAgICAgICBFVkVSX01BVENIRURfU09NRVRISU5HIChyZWdfaW5mb1sqcF0pID0gMDsKKysKKysJCSAgICAgIC8qIFJlc3RvcmUgdGhpcyBhbmQgaW5uZXIgZ3JvdXBzJyAoaWYgYW55KSByZWdpc3RlcnMuICAqLworKyAgICAgICAgICAgICAgICAgICAgICBmb3IgKHIgPSAqcDsgciA8ICh1bnNpZ25lZCkgKnAgKyAodW5zaWduZWQpICoocCArIDEpOworKwkJCSAgIHIrKykKKysgICAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICByZWdzdGFydFtyXSA9IG9sZF9yZWdzdGFydFtyXTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHh4IHdoeSB0aGlzIHRlc3Q/ICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9sZF9yZWdlbmRbcl0gPj0gcmVnc3RhcnRbcl0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2VuZFtyXSA9IG9sZF9yZWdlbmRbcl07CisrICAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgfQorKwkJICBwMSsrOworKyAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwMSk7CisrICAgICAgICAgICAgICAgICAgUFVTSF9GQUlMVVJFX1BPSU5UIChwMSArIG1jbnQsIGQsIC0yKTsKKysKKysgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgIC8qIE1vdmUgcGFzdCB0aGUgcmVnaXN0ZXIgbnVtYmVyIGFuZCB0aGUgaW5uZXIgZ3JvdXAgY291bnQuICAqLworKyAgICAgICAgICBwICs9IDI7CisrICAgICAgICAgIGJyZWFrOworKworKworKwkvKiBcPGRpZ2l0PiBoYXMgYmVlbiB0dXJuZWQgaW50byBhIGBkdXBsaWNhdGUnIGNvbW1hbmQgd2hpY2ggaXMKKysgICAgICAgICAgIGZvbGxvd2VkIGJ5IHRoZSBudW1lcmljIHZhbHVlIG9mIDxkaWdpdD4gYXMgdGhlIHJlZ2lzdGVyIG51bWJlci4gICovCisrICAgICAgICBjYXNlIGR1cGxpY2F0ZToKKysJICB7CisrCSAgICByZWdpc3RlciBjb25zdCBDSEFSX1QgKmQyLCAqZGVuZDI7CisrCSAgICBpbnQgcmVnbm8gPSAqcCsrOyAgIC8qIEdldCB3aGljaCByZWdpc3RlciB0byBtYXRjaCBhZ2FpbnN0LiAgKi8KKysJICAgIERFQlVHX1BSSU5UMiAoIkVYRUNVVElORyBkdXBsaWNhdGUgJWQuXG4iLCByZWdubyk7CisrCisrCSAgICAvKiBDYW4ndCBiYWNrIHJlZmVyZW5jZSBhIGdyb3VwIHdoaWNoIHdlJ3ZlIG5ldmVyIG1hdGNoZWQuICAqLworKyAgICAgICAgICAgIGlmIChSRUdfVU5TRVQgKHJlZ3N0YXJ0W3JlZ25vXSkgfHwgUkVHX1VOU0VUIChyZWdlbmRbcmVnbm9dKSkKKysgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKysKKysgICAgICAgICAgICAvKiBXaGVyZSBpbiBpbnB1dCB0byB0cnkgdG8gc3RhcnQgbWF0Y2hpbmcuICAqLworKyAgICAgICAgICAgIGQyID0gcmVnc3RhcnRbcmVnbm9dOworKworKyAgICAgICAgICAgIC8qIFdoZXJlIHRvIHN0b3AgbWF0Y2hpbmc7IGlmIGJvdGggdGhlIHBsYWNlIHRvIHN0YXJ0IGFuZAorKyAgICAgICAgICAgICAgIHRoZSBwbGFjZSB0byBzdG9wIG1hdGNoaW5nIGFyZSBpbiB0aGUgc2FtZSBzdHJpbmcsIHRoZW4KKysgICAgICAgICAgICAgICBzZXQgdG8gdGhlIHBsYWNlIHRvIHN0b3AsIG90aGVyd2lzZSwgZm9yIG5vdyBoYXZlIHRvIHVzZQorKyAgICAgICAgICAgICAgIHRoZSBlbmQgb2YgdGhlIGZpcnN0IHN0cmluZy4gICovCisrCisrICAgICAgICAgICAgZGVuZDIgPSAoKEZJUlNUX1NUUklOR19QIChyZWdzdGFydFtyZWdub10pCisrCQkgICAgICA9PSBGSVJTVF9TVFJJTkdfUCAocmVnZW5kW3JlZ25vXSkpCisrCQkgICAgID8gcmVnZW5kW3JlZ25vXSA6IGVuZF9tYXRjaF8xKTsKKysJICAgIGZvciAoOzspCisrCSAgICAgIHsKKysJCS8qIElmIG5lY2Vzc2FyeSwgYWR2YW5jZSB0byBuZXh0IHNlZ21lbnQgaW4gcmVnaXN0ZXIKKysgICAgICAgICAgICAgICAgICAgY29udGVudHMuICAqLworKwkJd2hpbGUgKGQyID09IGRlbmQyKQorKwkJICB7CisrCQkgICAgaWYgKGRlbmQyID09IGVuZF9tYXRjaF8yKSBicmVhazsKKysJCSAgICBpZiAoZGVuZDIgPT0gcmVnZW5kW3JlZ25vXSkgYnJlYWs7CisrCisrICAgICAgICAgICAgICAgICAgICAvKiBFbmQgb2Ygc3RyaW5nMSA9PiBhZHZhbmNlIHRvIHN0cmluZzIuICovCisrICAgICAgICAgICAgICAgICAgICBkMiA9IHN0cmluZzI7CisrICAgICAgICAgICAgICAgICAgICBkZW5kMiA9IHJlZ2VuZFtyZWdub107CisrCQkgIH0KKysJCS8qIEF0IGVuZCBvZiByZWdpc3RlciBjb250ZW50cyA9PiBzdWNjZXNzICovCisrCQlpZiAoZDIgPT0gZGVuZDIpIGJyZWFrOworKworKwkJLyogSWYgbmVjZXNzYXJ5LCBhZHZhbmNlIHRvIG5leHQgc2VnbWVudCBpbiBkYXRhLiAgKi8KKysJCVBSRUZFVENIICgpOworKworKwkJLyogSG93IG1hbnkgY2hhcmFjdGVycyBsZWZ0IGluIHRoaXMgc2VnbWVudCB0byBtYXRjaC4gICovCisrCQltY250ID0gZGVuZCAtIGQ7CisrCisrCQkvKiBXYW50IGhvdyBtYW55IGNvbnNlY3V0aXZlIGNoYXJhY3RlcnMgd2UgY2FuIG1hdGNoIGluCisrICAgICAgICAgICAgICAgICAgIG9uZSBzaG90LCBzbywgaWYgbmVjZXNzYXJ5LCBhZGp1c3QgdGhlIGNvdW50LiAgKi8KKysgICAgICAgICAgICAgICAgaWYgKG1jbnQgPiBkZW5kMiAtIGQyKQorKwkJICBtY250ID0gZGVuZDIgLSBkMjsKKysKKysJCS8qIENvbXBhcmUgdGhhdCBtYW55OyBmYWlsdXJlIGlmIG1pc21hdGNoLCBlbHNlIG1vdmUKKysgICAgICAgICAgICAgICAgICAgcGFzdCB0aGVtLiAgKi8KKysJCWlmICh0cmFuc2xhdGUKKysgICAgICAgICAgICAgICAgICAgID8gUFJFRklYKGJjbXBfdHJhbnNsYXRlKSAoZCwgZDIsIG1jbnQsIHRyYW5zbGF0ZSkKKysgICAgICAgICAgICAgICAgICAgIDogbWVtY21wIChkLCBkMiwgbWNudCpzaXplb2YoVUNIQVJfVCkpKQorKwkJICBnb3RvIGZhaWw7CisrCQlkICs9IG1jbnQsIGQyICs9IG1jbnQ7CisrCisrCQkvKiBEbyB0aGlzIGJlY2F1c2Ugd2UndmUgbWF0Y2ggc29tZSBjaGFyYWN0ZXJzLiAgKi8KKysJCVNFVF9SRUdTX01BVENIRUQgKCk7CisrCSAgICAgIH0KKysJICB9CisrCSAgYnJlYWs7CisrCisrCisrICAgICAgICAvKiBiZWdsaW5lIG1hdGNoZXMgdGhlIGVtcHR5IHN0cmluZyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcKKysgICAgICAgICAgICh1bmxlc3MgYG5vdF9ib2wnIGlzIHNldCBpbiBgYnVmcCcpLCBhbmQsIGlmCisrICAgICAgICAgICBgbmV3bGluZV9hbmNob3InIGlzIHNldCwgYWZ0ZXIgbmV3bGluZXMuICAqLworKwljYXNlIGJlZ2xpbmU6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBiZWdsaW5lLlxuIik7CisrCisrICAgICAgICAgIGlmIChBVF9TVFJJTkdTX0JFRyAoZCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgaWYgKCFidWZwLT5ub3RfYm9sKSBicmVhazsKKysgICAgICAgICAgICB9CisrICAgICAgICAgIGVsc2UgaWYgKGRbLTFdID09ICdcbicgJiYgYnVmcC0+bmV3bGluZV9hbmNob3IpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAvKiBJbiBhbGwgb3RoZXIgY2FzZXMsIHdlIGZhaWwuICAqLworKyAgICAgICAgICBnb3RvIGZhaWw7CisrCisrCisrICAgICAgICAvKiBlbmRsaW5lIGlzIHRoZSBkdWFsIG9mIGJlZ2xpbmUuICAqLworKwljYXNlIGVuZGxpbmU6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBlbmRsaW5lLlxuIik7CisrCisrICAgICAgICAgIGlmIChBVF9TVFJJTkdTX0VORCAoZCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgaWYgKCFidWZwLT5ub3RfZW9sKSBicmVhazsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgIC8qIFdlIGhhdmUgdG8gYGBwcmVmZXRjaCcnIHRoZSBuZXh0IGNoYXJhY3Rlci4gICovCisrICAgICAgICAgIGVsc2UgaWYgKChkID09IGVuZDEgPyAqc3RyaW5nMiA6ICpkKSA9PSAnXG4nCisrICAgICAgICAgICAgICAgICAgICYmIGJ1ZnAtPm5ld2xpbmVfYW5jaG9yKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgZ290byBmYWlsOworKworKworKwkvKiBNYXRjaCBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgdGhlIGRhdGEuICAqLworKyAgICAgICAgY2FzZSBiZWdidWY6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBiZWdidWYuXG4iKTsKKysgICAgICAgICAgaWYgKEFUX1NUUklOR1NfQkVHIChkKSkKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgZ290byBmYWlsOworKworKworKwkvKiBNYXRjaCBhdCB0aGUgdmVyeSBlbmQgb2YgdGhlIGRhdGEuICAqLworKyAgICAgICAgY2FzZSBlbmRidWY6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBlbmRidWYuXG4iKTsKKysJICBpZiAoQVRfU1RSSU5HU19FTkQgKGQpKQorKwkgICAgYnJlYWs7CisrICAgICAgICAgIGdvdG8gZmFpbDsKKysKKysKKysgICAgICAgIC8qIG9uX2ZhaWx1cmVfa2VlcF9zdHJpbmdfanVtcCBpcyB1c2VkIHRvIG9wdGltaXplIGAuKlxuJy4gIEl0CisrICAgICAgICAgICBwdXNoZXMgTlVMTCBhcyB0aGUgdmFsdWUgZm9yIHRoZSBzdHJpbmcgb24gdGhlIHN0YWNrLiAgVGhlbgorKyAgICAgICAgICAgYHBvcF9mYWlsdXJlX3BvaW50JyB3aWxsIGtlZXAgdGhlIGN1cnJlbnQgdmFsdWUgZm9yIHRoZQorKyAgICAgICAgICAgc3RyaW5nLCBpbnN0ZWFkIG9mIHJlc3RvcmluZyBpdC4gIFRvIHNlZSB3aHksIGNvbnNpZGVyCisrICAgICAgICAgICBtYXRjaGluZyBgZm9vXG5iYXInIGFnYWluc3QgYC4qXG4nLiAgVGhlIC4qIG1hdGNoZXMgdGhlIGZvbzsKKysgICAgICAgICAgIHRoZW4gdGhlIC4gZmFpbHMgYWdhaW5zdCB0aGUgXG4uICBCdXQgdGhlIG5leHQgdGhpbmcgd2Ugd2FudAorKyAgICAgICAgICAgdG8gZG8gaXMgbWF0Y2ggdGhlIFxuIGFnYWluc3QgdGhlIFxuOyBpZiB3ZSByZXN0b3JlZCB0aGUKKysgICAgICAgICAgIHN0cmluZyB2YWx1ZSwgd2Ugd291bGQgYmUgYmFjayBhdCB0aGUgZm9vLgorKworKyAgICAgICAgICAgQmVjYXVzZSB0aGlzIGlzIHVzZWQgb25seSBpbiBzcGVjaWZpYyBjYXNlcywgd2UgZG9uJ3QgbmVlZCB0bworKyAgICAgICAgICAgY2hlY2sgYWxsIHRoZSB0aGluZ3MgdGhhdCBgb25fZmFpbHVyZV9qdW1wJyBkb2VzLCB0byBtYWtlCisrICAgICAgICAgICBzdXJlIHRoZSByaWdodCB0aGluZ3MgZ2V0IHNhdmVkIG9uIHRoZSBzdGFjay4gIEhlbmNlIHdlIGRvbid0CisrICAgICAgICAgICBzaGFyZSBpdHMgY29kZS4gIFRoZSBvbmx5IHJlYXNvbiB0byBwdXNoIGFueXRoaW5nIG9uIHRoZQorKyAgICAgICAgICAgc3RhY2sgYXQgYWxsIGlzIHRoYXQgb3RoZXJ3aXNlIHdlIHdvdWxkIGhhdmUgdG8gY2hhbmdlCisrICAgICAgICAgICBgYW55Y2hhcidzIGNvZGUgdG8gZG8gc29tZXRoaW5nIGJlc2lkZXMgZ290byBmYWlsIGluIHRoaXMKKysgICAgICAgICAgIGNhc2U7IHRoYXQgc2VlbXMgd29yc2UgdGhhbiB0aGlzLiAgKi8KKysgICAgICAgIGNhc2Ugb25fZmFpbHVyZV9rZWVwX3N0cmluZ19qdW1wOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgb25fZmFpbHVyZV9rZWVwX3N0cmluZ19qdW1wIik7CisrCisrICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwKTsKKysjaWZkZWYgX0xJQkMKKysgICAgICAgICAgREVCVUdfUFJJTlQzICgiICVkICh0byAlcCk6XG4iLCBtY250LCBwICsgbWNudCk7CisrI2Vsc2UKKysgICAgICAgICAgREVCVUdfUFJJTlQzICgiICVkICh0byAweCV4KTpcbiIsIG1jbnQsIHAgKyBtY250KTsKKysjZW5kaWYKKysKKysgICAgICAgICAgUFVTSF9GQUlMVVJFX1BPSU5UIChwICsgbWNudCwgTlVMTCwgLTIpOworKyAgICAgICAgICBicmVhazsKKysKKysKKysJLyogVXNlcyBvZiBvbl9mYWlsdXJlX2p1bXA6CisrCisrICAgICAgICAgICBFYWNoIGFsdGVybmF0aXZlIHN0YXJ0cyB3aXRoIGFuIG9uX2ZhaWx1cmVfanVtcCB0aGF0IHBvaW50cworKyAgICAgICAgICAgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBhbHRlcm5hdGl2ZS4gIEVhY2ggYWx0ZXJuYXRpdmUKKysgICAgICAgICAgIGV4Y2VwdCB0aGUgbGFzdCBlbmRzIHdpdGggYSBqdW1wIHRoYXQgaW4gZWZmZWN0IGp1bXBzIHBhc3QKKysgICAgICAgICAgIHRoZSByZXN0IG9mIHRoZSBhbHRlcm5hdGl2ZXMuICAoVGhleSByZWFsbHkganVtcCB0byB0aGUKKysgICAgICAgICAgIGVuZGluZyBqdW1wIG9mIHRoZSBmb2xsb3dpbmcgYWx0ZXJuYXRpdmUsIGJlY2F1c2UgdGVuc2lvbmluZworKyAgICAgICAgICAgdGhlc2UganVtcHMgaXMgYSBoYXNzbGUuKQorKworKyAgICAgICAgICAgUmVwZWF0cyBzdGFydCB3aXRoIGFuIG9uX2ZhaWx1cmVfanVtcCB0aGF0IHBvaW50cyBwYXN0IGJvdGgKKysgICAgICAgICAgIHRoZSByZXBldGl0aW9uIHRleHQgYW5kIGVpdGhlciB0aGUgZm9sbG93aW5nIGp1bXAgb3IKKysgICAgICAgICAgIHBvcF9mYWlsdXJlX2p1bXAgYmFjayB0byB0aGlzIG9uX2ZhaWx1cmVfanVtcC4gICovCisrCWNhc2Ugb25fZmFpbHVyZV9qdW1wOgorKyAgICAgICAgb25fZmFpbHVyZToKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIG9uX2ZhaWx1cmVfanVtcCIpOworKworKyAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcCk7CisrI2lmZGVmIF9MSUJDCisrICAgICAgICAgIERFQlVHX1BSSU5UMyAoIiAlZCAodG8gJXApIiwgbWNudCwgcCArIG1jbnQpOworKyNlbHNlCisrICAgICAgICAgIERFQlVHX1BSSU5UMyAoIiAlZCAodG8gMHgleCkiLCBtY250LCBwICsgbWNudCk7CisrI2VuZGlmCisrCisrICAgICAgICAgIC8qIElmIHRoaXMgb25fZmFpbHVyZV9qdW1wIGNvbWVzIHJpZ2h0IGJlZm9yZSBhIGdyb3VwIChpLmUuLAorKyAgICAgICAgICAgICB0aGUgb3JpZ2luYWwgKiBhcHBsaWVkIHRvIGEgZ3JvdXApLCBzYXZlIHRoZSBpbmZvcm1hdGlvbgorKyAgICAgICAgICAgICBmb3IgdGhhdCBncm91cCBhbmQgYWxsIGlubmVyIG9uZXMsIHNvIHRoYXQgaWYgd2UgZmFpbCBiYWNrCisrICAgICAgICAgICAgIHRvIHRoaXMgcG9pbnQsIHRoZSBncm91cCdzIGluZm9ybWF0aW9uIHdpbGwgYmUgY29ycmVjdC4KKysgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGluIFwoYSpcKSpcMSwgd2UgbmVlZCB0aGUgcHJlY2VkaW5nIGdyb3VwLAorKyAgICAgICAgICAgICBhbmQgaW4gXCh6elwoYSpcKWIqXClcMiwgd2UgbmVlZCB0aGUgaW5uZXIgZ3JvdXAuICAqLworKworKyAgICAgICAgICAvKiBXZSBjYW4ndCB1c2UgYHAnIHRvIGNoZWNrIGFoZWFkIGJlY2F1c2Ugd2UgcHVzaAorKyAgICAgICAgICAgICBhIGZhaWx1cmUgcG9pbnQgdG8gYHAgKyBtY250JyBhZnRlciB3ZSBkbyB0aGlzLiAgKi8KKysgICAgICAgICAgcDEgPSBwOworKworKyAgICAgICAgICAvKiBXZSBuZWVkIHRvIHNraXAgbm9fb3AncyBiZWZvcmUgd2UgbG9vayBmb3IgdGhlCisrICAgICAgICAgICAgIHN0YXJ0X21lbW9yeSBpbiBjYXNlIHRoaXMgb25fZmFpbHVyZV9qdW1wIGlzIGhhcHBlbmluZyBhcworKyAgICAgICAgICAgICB0aGUgcmVzdWx0IG9mIGEgY29tcGxldGVkIHN1Y2NlZWRfbiwgYXMgaW4gXChhXClcezEsM1x9YlwxCisrICAgICAgICAgICAgIGFnYWluc3QgYWJhLiAgKi8KKysgICAgICAgICAgd2hpbGUgKHAxIDwgcGVuZCAmJiAocmVfb3Bjb2RlX3QpICpwMSA9PSBub19vcCkKKysgICAgICAgICAgICBwMSsrOworKworKyAgICAgICAgICBpZiAocDEgPCBwZW5kICYmIChyZV9vcGNvZGVfdCkgKnAxID09IHN0YXJ0X21lbW9yeSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAvKiBXZSBoYXZlIGEgbmV3IGhpZ2hlc3QgYWN0aXZlIHJlZ2lzdGVyIG5vdy4gIFRoaXMgd2lsbAorKyAgICAgICAgICAgICAgICAgZ2V0IHJlc2V0IGF0IHRoZSBzdGFydF9tZW1vcnkgd2UgYXJlIGFib3V0IHRvIGdldCB0bywKKysgICAgICAgICAgICAgICAgIGJ1dCB3ZSB3aWxsIGhhdmUgc2F2ZWQgYWxsIHRoZSByZWdpc3RlcnMgcmVsZXZhbnQgdG8KKysgICAgICAgICAgICAgICAgIHRoaXMgcmVwZXRpdGlvbiBvcCwgYXMgZGVzY3JpYmVkIGFib3ZlLiAgKi8KKysgICAgICAgICAgICAgIGhpZ2hlc3RfYWN0aXZlX3JlZyA9ICoocDEgKyAxKSArICoocDEgKyAyKTsKKysgICAgICAgICAgICAgIGlmIChsb3dlc3RfYWN0aXZlX3JlZyA9PSBOT19MT1dFU1RfQUNUSVZFX1JFRykKKysgICAgICAgICAgICAgICAgbG93ZXN0X2FjdGl2ZV9yZWcgPSAqKHAxICsgMSk7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICBERUJVR19QUklOVDEgKCI6XG4iKTsKKysgICAgICAgICAgUFVTSF9GQUlMVVJFX1BPSU5UIChwICsgbWNudCwgZCwgLTIpOworKyAgICAgICAgICBicmVhazsKKysKKysKKysgICAgICAgIC8qIEEgc21hcnQgcmVwZWF0IGVuZHMgd2l0aCBgbWF5YmVfcG9wX2p1bXAnLgorKwkgICBXZSBjaGFuZ2UgaXQgdG8gZWl0aGVyIGBwb3BfZmFpbHVyZV9qdW1wJyBvciBganVtcCcuICAqLworKyAgICAgICAgY2FzZSBtYXliZV9wb3BfanVtcDoKKysgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHApOworKyAgICAgICAgICBERUJVR19QUklOVDIgKCJFWEVDVVRJTkcgbWF5YmVfcG9wX2p1bXAgJWQuXG4iLCBtY250KTsKKysgICAgICAgICAgeworKwkgICAgcmVnaXN0ZXIgVUNIQVJfVCAqcDIgPSBwOworKworKyAgICAgICAgICAgIC8qIENvbXBhcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVwZWF0IHdpdGggd2hhdCBpbiB0aGUKKysgICAgICAgICAgICAgICBwYXR0ZXJuIGZvbGxvd3MgaXRzIGVuZC4gSWYgd2UgY2FuIGVzdGFibGlzaCB0aGF0IHRoZXJlCisrICAgICAgICAgICAgICAgaXMgbm90aGluZyB0aGF0IHRoZXkgd291bGQgYm90aCBtYXRjaCwgaS5lLiwgdGhhdCB3ZQorKyAgICAgICAgICAgICAgIHdvdWxkIGhhdmUgdG8gYmFja3RyYWNrIGJlY2F1c2Ugb2YgKGFzIGluLCBlLmcuLCBgYSphJykKKysgICAgICAgICAgICAgICB0aGVuIHdlIGNhbiBjaGFuZ2UgdG8gcG9wX2ZhaWx1cmVfanVtcCwgYmVjYXVzZSB3ZSdsbAorKyAgICAgICAgICAgICAgIG5ldmVyIGhhdmUgdG8gYmFja3RyYWNrLgorKworKyAgICAgICAgICAgICAgIFRoaXMgaXMgbm90IHRydWUgaW4gdGhlIGNhc2Ugb2YgYWx0ZXJuYXRpdmVzOiBpbgorKyAgICAgICAgICAgICAgIGAoYXxhYikqJyB3ZSBkbyBuZWVkIHRvIGJhY2t0cmFjayB0byB0aGUgYGFiJyBhbHRlcm5hdGl2ZQorKyAgICAgICAgICAgICAgIChlLmcuLCBpZiB0aGUgc3RyaW5nIHdhcyBgYWInKS4gIEJ1dCBpbnN0ZWFkIG9mIHRyeWluZyB0bworKyAgICAgICAgICAgICAgIGRldGVjdCB0aGF0IGhlcmUsIHRoZSBhbHRlcm5hdGl2ZSBoYXMgcHV0IG9uIGEgZHVtbXkKKysgICAgICAgICAgICAgICBmYWlsdXJlIHBvaW50IHdoaWNoIGlzIHdoYXQgd2Ugd2lsbCBlbmQgdXAgcG9wcGluZy4gICovCisrCisrCSAgICAvKiBTa2lwIG92ZXIgb3Blbi9jbG9zZS1ncm91cCBjb21tYW5kcy4KKysJICAgICAgIElmIHdoYXQgZm9sbG93cyB0aGlzIGxvb3AgaXMgYSAuLi4rIGNvbnN0cnVjdCwKKysJICAgICAgIGxvb2sgYXQgd2hhdCBiZWdpbnMgaXRzIGJvZHksIHNpbmNlIHdlIHdpbGwgaGF2ZSB0bworKwkgICAgICAgbWF0Y2ggYXQgbGVhc3Qgb25lIG9mIHRoYXQuICAqLworKwkgICAgd2hpbGUgKDEpCisrCSAgICAgIHsKKysJCWlmIChwMiArIDIgPCBwZW5kCisrCQkgICAgJiYgKChyZV9vcGNvZGVfdCkgKnAyID09IHN0b3BfbWVtb3J5CisrCQkJfHwgKHJlX29wY29kZV90KSAqcDIgPT0gc3RhcnRfbWVtb3J5KSkKKysJCSAgcDIgKz0gMzsKKysJCWVsc2UgaWYgKHAyICsgMiArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFIDwgcGVuZAorKwkJCSAmJiAocmVfb3Bjb2RlX3QpICpwMiA9PSBkdW1teV9mYWlsdXJlX2p1bXApCisrCQkgIHAyICs9IDIgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRTsKKysJCWVsc2UKKysJCSAgYnJlYWs7CisrCSAgICAgIH0KKysKKysJICAgIHAxID0gcCArIG1jbnQ7CisrCSAgICAvKiBwMVswXSAuLi4gcDFbMl0gYXJlIHRoZSBgb25fZmFpbHVyZV9qdW1wJyBjb3JyZXNwb25kaW5nCisrCSAgICAgICB0byB0aGUgYG1heWJlX2ZpbmFsaXplX2p1bXAnIG9mIHRoaXMgY2FzZS4gIEV4YW1pbmUgd2hhdAorKwkgICAgICAgZm9sbG93cy4gICovCisrCisrICAgICAgICAgICAgLyogSWYgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgcGF0dGVybiwgd2UgY2FuIGNoYW5nZS4gICovCisrICAgICAgICAgICAgaWYgKHAyID09IHBlbmQpCisrCSAgICAgIHsKKysJCS8qIENvbnNpZGVyIHdoYXQgaGFwcGVucyB3aGVuIG1hdGNoaW5nICI6XCguKlwpIgorKwkJICAgYWdhaW5zdCAiOi8iLiAgSSBkb24ndCByZWFsbHkgdW5kZXJzdGFuZCB0aGlzIGNvZGUKKysJCSAgIHlldC4gICovCisrICAJICAgICAgICBwWy0oMStPRkZTRVRfQUREUkVTU19TSVpFKV0gPSAoVUNIQVJfVCkKKysJCSAgcG9wX2ZhaWx1cmVfanVtcDsKKysgICAgICAgICAgICAgICAgREVCVUdfUFJJTlQxCisrICAgICAgICAgICAgICAgICAgKCIgIEVuZCBvZiBwYXR0ZXJuOiBjaGFuZ2UgdG8gYHBvcF9mYWlsdXJlX2p1bXAnLlxuIik7CisrICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgZWxzZSBpZiAoKHJlX29wY29kZV90KSAqcDIgPT0gZXhhY3RuCisrI2lmZGVmIE1CU19TVVBQT1JUCisrCQkgICAgIHx8IChyZV9vcGNvZGVfdCkgKnAyID09IGV4YWN0bl9iaW4KKysjZW5kaWYKKysJCSAgICAgfHwgKGJ1ZnAtPm5ld2xpbmVfYW5jaG9yICYmIChyZV9vcGNvZGVfdCkgKnAyID09IGVuZGxpbmUpKQorKwkgICAgICB7CisrCQlyZWdpc3RlciBVQ0hBUl9UIGMKKysgICAgICAgICAgICAgICAgICA9ICpwMiA9PSAoVUNIQVJfVCkgZW5kbGluZSA/ICdcbicgOiBwMlsyXTsKKysKKysgICAgICAgICAgICAgICAgaWYgKCgocmVfb3Bjb2RlX3QpIHAxWzErT0ZGU0VUX0FERFJFU1NfU0laRV0gPT0gZXhhY3RuCisrI2lmZGVmIE1CU19TVVBQT1JUCisrCQkgICAgIHx8IChyZV9vcGNvZGVfdCkgcDFbMStPRkZTRVRfQUREUkVTU19TSVpFXSA9PSBleGFjdG5fYmluCisrI2VuZGlmCisrCQkgICAgKSAmJiBwMVszK09GRlNFVF9BRERSRVNTX1NJWkVdICE9IGMpCisrICAgICAgICAgICAgICAgICAgeworKyAgCQkgICAgcFstKDErT0ZGU0VUX0FERFJFU1NfU0laRSldID0gKFVDSEFSX1QpCisrCQkgICAgICBwb3BfZmFpbHVyZV9qdW1wOworKyNpZmRlZiBXQ0hBUgorKwkJICAgICAgREVCVUdfUFJJTlQzICgiICAlQyAhPSAlQyA9PiBwb3BfZmFpbHVyZV9qdW1wLlxuIiwKKysJCQkJICAgICh3aW50X3QpIGMsCisrCQkJCSAgICAod2ludF90KSBwMVszK09GRlNFVF9BRERSRVNTX1NJWkVdKTsKKysjZWxzZQorKwkJICAgICAgREVCVUdfUFJJTlQzICgiICAlYyAhPSAlYyA9PiBwb3BfZmFpbHVyZV9qdW1wLlxuIiwKKysJCQkJICAgIChjaGFyKSBjLAorKwkJCQkgICAgKGNoYXIpIHAxWzMrT0ZGU0VUX0FERFJFU1NfU0laRV0pOworKyNlbmRpZgorKyAgICAgICAgICAgICAgICAgIH0KKysKKysjaWZuZGVmIFdDSEFSCisrCQllbHNlIGlmICgocmVfb3Bjb2RlX3QpIHAxWzNdID09IGNoYXJzZXQKKysJCQkgfHwgKHJlX29wY29kZV90KSBwMVszXSA9PSBjaGFyc2V0X25vdCkKKysJCSAgeworKwkJICAgIGludCBuZWdhdGUgPSAocmVfb3Bjb2RlX3QpIHAxWzNdID09IGNoYXJzZXRfbm90OworKworKwkJICAgIGlmIChjIDwgKHVuc2lnbmVkKSAocDFbNF0gKiBCWVRFV0lEVEgpCisrCQkJJiYgcDFbNSArIGMgLyBCWVRFV0lEVEhdICYgKDEgPDwgKGMgJSBCWVRFV0lEVEgpKSkKKysJCSAgICAgIG5lZ2F0ZSA9ICFuZWdhdGU7CisrCisrICAgICAgICAgICAgICAgICAgICAvKiBgbmVnYXRlJyBpcyBlcXVhbCB0byAxIGlmIGMgd291bGQgbWF0Y2gsIHdoaWNoIG1lYW5zCisrICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB3ZSBjYW4ndCBjaGFuZ2UgdG8gcG9wX2ZhaWx1cmVfanVtcC4gICovCisrCQkgICAgaWYgKCFuZWdhdGUpCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysgIAkJICAgICAgICBwWy0zXSA9ICh1bnNpZ25lZCBjaGFyKSBwb3BfZmFpbHVyZV9qdW1wOworKyAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UMSAoIiAgTm8gbWF0Y2ggPT4gcG9wX2ZhaWx1cmVfanVtcC5cbiIpOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrCQkgIH0KKysjZW5kaWYgLyogbm90IFdDSEFSICovCisrCSAgICAgIH0KKysjaWZuZGVmIFdDSEFSCisrICAgICAgICAgICAgZWxzZSBpZiAoKHJlX29wY29kZV90KSAqcDIgPT0gY2hhcnNldCkKKysJICAgICAgeworKwkJLyogV2Ugd2luIGlmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGxvb3AgaXMgbm90IHBhcnQKKysgICAgICAgICAgICAgICAgICAgb2YgdGhlIGNoYXJzZXQuICAqLworKyAgICAgICAgICAgICAgICBpZiAoKHJlX29wY29kZV90KSBwMVszXSA9PSBleGFjdG4KKysgCQkgICAgJiYgISAoKGludCkgcDJbMV0gKiBCWVRFV0lEVEggPiAoaW50KSBwMVs1XQorKyAJCQkgICYmIChwMlsyICsgcDFbNV0gLyBCWVRFV0lEVEhdCisrIAkJCSAgICAgICYgKDEgPDwgKHAxWzVdICUgQllURVdJRFRIKSkpKSkKKysJCSAgeworKwkJICAgIHBbLTNdID0gKHVuc2lnbmVkIGNoYXIpIHBvcF9mYWlsdXJlX2p1bXA7CisrCQkgICAgREVCVUdfUFJJTlQxICgiICBObyBtYXRjaCA9PiBwb3BfZmFpbHVyZV9qdW1wLlxuIik7CisrICAgICAgICAgICAgICAgICAgfQorKworKwkJZWxzZSBpZiAoKHJlX29wY29kZV90KSBwMVszXSA9PSBjaGFyc2V0X25vdCkKKysJCSAgeworKwkJICAgIGludCBpZHg7CisrCQkgICAgLyogV2Ugd2luIGlmIHRoZSBjaGFyc2V0X25vdCBpbnNpZGUgdGhlIGxvb3AKKysJCSAgICAgICBsaXN0cyBldmVyeSBjaGFyYWN0ZXIgbGlzdGVkIGluIHRoZSBjaGFyc2V0IGFmdGVyLiAgKi8KKysJCSAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IChpbnQpIHAyWzFdOyBpZHgrKykKKysJCSAgICAgIGlmICghIChwMlsyICsgaWR4XSA9PSAwCisrCQkJICAgICB8fCAoaWR4IDwgKGludCkgcDFbNF0KKysJCQkJICYmICgocDJbMiArIGlkeF0gJiB+IHAxWzUgKyBpZHhdKSA9PSAwKSkpKQorKwkJCWJyZWFrOworKworKwkJICAgIGlmIChpZHggPT0gcDJbMV0pCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysgIAkJICAgICAgICBwWy0zXSA9ICh1bnNpZ25lZCBjaGFyKSBwb3BfZmFpbHVyZV9qdW1wOworKyAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UMSAoIiAgTm8gbWF0Y2ggPT4gcG9wX2ZhaWx1cmVfanVtcC5cbiIpOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrCQkgIH0KKysJCWVsc2UgaWYgKChyZV9vcGNvZGVfdCkgcDFbM10gPT0gY2hhcnNldCkKKysJCSAgeworKwkJICAgIGludCBpZHg7CisrCQkgICAgLyogV2Ugd2luIGlmIHRoZSBjaGFyc2V0IGluc2lkZSB0aGUgbG9vcAorKwkJICAgICAgIGhhcyBubyBvdmVybGFwIHdpdGggdGhlIG9uZSBhZnRlciB0aGUgbG9vcC4gICovCisrCQkgICAgZm9yIChpZHggPSAwOworKwkJCSBpZHggPCAoaW50KSBwMlsxXSAmJiBpZHggPCAoaW50KSBwMVs0XTsKKysJCQkgaWR4KyspCisrCQkgICAgICBpZiAoKHAyWzIgKyBpZHhdICYgcDFbNSArIGlkeF0pICE9IDApCisrCQkJYnJlYWs7CisrCisrCQkgICAgaWYgKGlkeCA9PSBwMlsxXSB8fCBpZHggPT0gcDFbNF0pCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysgIAkJICAgICAgICBwWy0zXSA9ICh1bnNpZ25lZCBjaGFyKSBwb3BfZmFpbHVyZV9qdW1wOworKyAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UMSAoIiAgTm8gbWF0Y2ggPT4gcG9wX2ZhaWx1cmVfanVtcC5cbiIpOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrCQkgIH0KKysJICAgICAgfQorKyNlbmRpZiAvKiBub3QgV0NIQVIgKi8KKysJICB9CisrCSAgcCAtPSBPRkZTRVRfQUREUkVTU19TSVpFOwkvKiBQb2ludCBhdCByZWxhdGl2ZSBhZGRyZXNzIGFnYWluLiAgKi8KKysJICBpZiAoKHJlX29wY29kZV90KSBwWy0xXSAhPSBwb3BfZmFpbHVyZV9qdW1wKQorKwkgICAgeworKwkgICAgICBwWy0xXSA9IChVQ0hBUl9UKSBqdW1wOworKyAgICAgICAgICAgICAgREVCVUdfUFJJTlQxICgiICBNYXRjaCA9PiBqdW1wLlxuIik7CisrCSAgICAgIGdvdG8gdW5jb25kaXRpb25hbF9qdW1wOworKwkgICAgfQorKyAgICAgICAgLyogTm90ZSBmYWxsIHRocm91Z2guICAqLworKworKworKwkvKiBUaGUgZW5kIG9mIGEgc2ltcGxlIHJlcGVhdCBoYXMgYSBwb3BfZmFpbHVyZV9qdW1wIGJhY2sgdG8KKysgICAgICAgICAgIGl0cyBtYXRjaGluZyBvbl9mYWlsdXJlX2p1bXAsIHdoZXJlIHRoZSBsYXR0ZXIgd2lsbCBwdXNoIGEKKysgICAgICAgICAgIGZhaWx1cmUgcG9pbnQuICBUaGUgcG9wX2ZhaWx1cmVfanVtcCB0YWtlcyBvZmYgZmFpbHVyZQorKyAgICAgICAgICAgcG9pbnRzIHB1dCBvbiBieSB0aGlzIHBvcF9mYWlsdXJlX2p1bXAncyBtYXRjaGluZworKyAgICAgICAgICAgb25fZmFpbHVyZV9qdW1wOyB3ZSBnb3QgdGhyb3VnaCB0aGUgcGF0dGVybiB0byBoZXJlIGZyb20gdGhlCisrICAgICAgICAgICBtYXRjaGluZyBvbl9mYWlsdXJlX2p1bXAsIHNvIGRpZG4ndCBmYWlsLiAgKi8KKysgICAgICAgIGNhc2UgcG9wX2ZhaWx1cmVfanVtcDoKKysgICAgICAgICAgeworKyAgICAgICAgICAgIC8qIFdlIG5lZWQgdG8gcGFzcyBzZXBhcmF0ZSBzdG9yYWdlIGZvciB0aGUgbG93ZXN0IGFuZAorKyAgICAgICAgICAgICAgIGhpZ2hlc3QgcmVnaXN0ZXJzLCBldmVuIHRob3VnaCB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZQorKyAgICAgICAgICAgICAgIGFjdHVhbCB2YWx1ZXMuICBPdGhlcndpc2UsIHdlIHdpbGwgcmVzdG9yZSBvbmx5IG9uZQorKyAgICAgICAgICAgICAgIHJlZ2lzdGVyIGZyb20gdGhlIHN0YWNrLCBzaW5jZSBsb3dlc3Qgd2lsbCA9PSBoaWdoZXN0IGluCisrICAgICAgICAgICAgICAgYHBvcF9mYWlsdXJlX3BvaW50Jy4gICovCisrICAgICAgICAgICAgYWN0aXZlX3JlZ190IGR1bW15X2xvd19yZWcsIGR1bW15X2hpZ2hfcmVnOworKyAgICAgICAgICAgIFVDSEFSX1QgKnBkdW1teSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkgPSBOVUxMOworKyAgICAgICAgICAgIGNvbnN0IENIQVJfVCAqc2R1bW15IF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSA9IE5VTEw7CisrCisrICAgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIHBvcF9mYWlsdXJlX2p1bXAuXG4iKTsKKysgICAgICAgICAgICBQT1BfRkFJTFVSRV9QT0lOVCAoc2R1bW15LCBwZHVtbXksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bW15X2xvd19yZWcsIGR1bW15X2hpZ2hfcmVnLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfZHVtbXksIHJlZ19kdW1teSwgcmVnX2luZm9fZHVtbXkpOworKyAgICAgICAgICB9CisrCSAgLyogTm90ZSBmYWxsIHRocm91Z2guICAqLworKworKwl1bmNvbmRpdGlvbmFsX2p1bXA6CisrI2lmZGVmIF9MSUJDCisrCSAgREVCVUdfUFJJTlQyICgiXG4lcDogIiwgcCk7CisrI2Vsc2UKKysJICBERUJVR19QUklOVDIgKCJcbjB4JXg6ICIsIHApOworKyNlbmRpZgorKyAgICAgICAgICAvKiBOb3RlIGZhbGwgdGhyb3VnaC4gICovCisrCisrICAgICAgICAvKiBVbmNvbmRpdGlvbmFsbHkganVtcCAod2l0aG91dCBwb3BwaW5nIGFueSBmYWlsdXJlIHBvaW50cykuICAqLworKyAgICAgICAgY2FzZSBqdW1wOgorKwkgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwKTsJLyogR2V0IHRoZSBhbW91bnQgdG8ganVtcC4gICovCisrICAgICAgICAgIERFQlVHX1BSSU5UMiAoIkVYRUNVVElORyBqdW1wICVkICIsIG1jbnQpOworKwkgIHAgKz0gbWNudDsJCQkJLyogRG8gdGhlIGp1bXAuICAqLworKyNpZmRlZiBfTElCQworKyAgICAgICAgICBERUJVR19QUklOVDIgKCIodG8gJXApLlxuIiwgcCk7CisrI2Vsc2UKKysgICAgICAgICAgREVCVUdfUFJJTlQyICgiKHRvIDB4JXgpLlxuIiwgcCk7CisrI2VuZGlmCisrCSAgYnJlYWs7CisrCisrCisrICAgICAgICAvKiBXZSBuZWVkIHRoaXMgb3Bjb2RlIHNvIHdlIGNhbiBkZXRlY3Qgd2hlcmUgYWx0ZXJuYXRpdmVzIGVuZAorKyAgICAgICAgICAgaW4gYGdyb3VwX21hdGNoX251bGxfc3RyaW5nX3AnIGV0IGFsLiAgKi8KKysgICAgICAgIGNhc2UganVtcF9wYXN0X2FsdDoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIGp1bXBfcGFzdF9hbHQuXG4iKTsKKysgICAgICAgICAgZ290byB1bmNvbmRpdGlvbmFsX2p1bXA7CisrCisrCisrICAgICAgICAvKiBOb3JtYWxseSwgdGhlIG9uX2ZhaWx1cmVfanVtcCBwdXNoZXMgYSBmYWlsdXJlIHBvaW50LCB3aGljaAorKyAgICAgICAgICAgdGhlbiBnZXRzIHBvcHBlZCBhdCBwb3BfZmFpbHVyZV9qdW1wLiAgV2Ugd2lsbCBlbmQgdXAgYXQKKysgICAgICAgICAgIHBvcF9mYWlsdXJlX2p1bXAsIGFsc28sIGFuZCB3aXRoIGEgcGF0dGVybiBvZiwgc2F5LCBgYSsnLCB3ZQorKyAgICAgICAgICAgYXJlIHNraXBwaW5nIG92ZXIgdGhlIG9uX2ZhaWx1cmVfanVtcCwgc28gd2UgaGF2ZSB0byBwdXNoCisrICAgICAgICAgICBzb21ldGhpbmcgbWVhbmluZ2xlc3MgZm9yIHBvcF9mYWlsdXJlX2p1bXAgdG8gcG9wLiAgKi8KKysgICAgICAgIGNhc2UgZHVtbXlfZmFpbHVyZV9qdW1wOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgZHVtbXlfZmFpbHVyZV9qdW1wLlxuIik7CisrICAgICAgICAgIC8qIEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgd2UgcHVzaCBmb3IgdGhlIHN0cmluZyBoZXJlLiAgV2hhdAorKyAgICAgICAgICAgICB0aGUgY29kZSBhdCBgZmFpbCcgdGVzdHMgaXMgdGhlIHZhbHVlIGZvciB0aGUgcGF0dGVybi4gICovCisrICAgICAgICAgIFBVU0hfRkFJTFVSRV9QT0lOVCAoTlVMTCwgTlVMTCwgLTIpOworKyAgICAgICAgICBnb3RvIHVuY29uZGl0aW9uYWxfanVtcDsKKysKKysKKysgICAgICAgIC8qIEF0IHRoZSBlbmQgb2YgYW4gYWx0ZXJuYXRpdmUsIHdlIG5lZWQgdG8gcHVzaCBhIGR1bW15IGZhaWx1cmUKKysgICAgICAgICAgIHBvaW50IGluIGNhc2Ugd2UgYXJlIGZvbGxvd2VkIGJ5IGEgYHBvcF9mYWlsdXJlX2p1bXAnLCBiZWNhdXNlCisrICAgICAgICAgICB3ZSBkb24ndCB3YW50IHRoZSBmYWlsdXJlIHBvaW50IGZvciB0aGUgYWx0ZXJuYXRpdmUgdG8gYmUKKysgICAgICAgICAgIHBvcHBlZC4gIEZvciBleGFtcGxlLCBtYXRjaGluZyBgKGF8YWIpKicgYWdhaW5zdCBgYWFiJworKyAgICAgICAgICAgcmVxdWlyZXMgdGhhdCB3ZSBtYXRjaCB0aGUgYGFiJyBhbHRlcm5hdGl2ZS4gICovCisrICAgICAgICBjYXNlIHB1c2hfZHVtbXlfZmFpbHVyZToKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIHB1c2hfZHVtbXlfZmFpbHVyZS5cbiIpOworKyAgICAgICAgICAvKiBTZWUgY29tbWVudHMganVzdCBhYm92ZSBhdCBgZHVtbXlfZmFpbHVyZV9qdW1wJyBhYm91dCB0aGUKKysgICAgICAgICAgICAgdHdvIHplcm9lcy4gICovCisrICAgICAgICAgIFBVU0hfRkFJTFVSRV9QT0lOVCAoTlVMTCwgTlVMTCwgLTIpOworKyAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIC8qIEhhdmUgdG8gc3VjY2VlZCBtYXRjaGluZyB3aGF0IGZvbGxvd3MgYXQgbGVhc3QgbiB0aW1lcy4KKysgICAgICAgICAgIEFmdGVyIHRoYXQsIGhhbmRsZSBsaWtlIGBvbl9mYWlsdXJlX2p1bXAnLiAgKi8KKysgICAgICAgIGNhc2Ugc3VjY2VlZF9uOgorKyAgICAgICAgICBFWFRSQUNUX05VTUJFUiAobWNudCwgcCArIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyAgICAgICAgICBERUJVR19QUklOVDIgKCJFWEVDVVRJTkcgc3VjY2VlZF9uICVkLlxuIiwgbWNudCk7CisrCisrICAgICAgICAgIGFzc2VydCAobWNudCA+PSAwKTsKKysgICAgICAgICAgLyogT3JpZ2luYWxseSwgdGhpcyBpcyBob3cgbWFueSB0aW1lcyB3ZSBIQVZFIHRvIHN1Y2NlZWQuICAqLworKyAgICAgICAgICBpZiAobWNudCA+IDApCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgIG1jbnQtLTsKKysJICAgICAgIHAgKz0gT0ZGU0VUX0FERFJFU1NfU0laRTsKKysgICAgICAgICAgICAgICBTVE9SRV9OVU1CRVJfQU5EX0lOQ1IgKHAsIG1jbnQpOworKyNpZmRlZiBfTElCQworKyAgICAgICAgICAgICAgIERFQlVHX1BSSU5UMyAoIiAgU2V0dGluZyAlcCB0byAlZC5cbiIsIHAgLSBPRkZTRVRfQUREUkVTU19TSVpFCisrCQkJICAgICAsIG1jbnQpOworKyNlbHNlCisrICAgICAgICAgICAgICAgREVCVUdfUFJJTlQzICgiICBTZXR0aW5nIDB4JXggdG8gJWQuXG4iLCBwIC0gT0ZGU0VUX0FERFJFU1NfU0laRQorKwkJCSAgICAgLCBtY250KTsKKysjZW5kaWYKKysgICAgICAgICAgICB9CisrCSAgZWxzZSBpZiAobWNudCA9PSAwKQorKyAgICAgICAgICAgIHsKKysjaWZkZWYgX0xJQkMKKysgICAgICAgICAgICAgIERFQlVHX1BSSU5UMiAoIiAgU2V0dGluZyB0d28gYnl0ZXMgZnJvbSAlcCB0byBub19vcC5cbiIsCisrCQkJICAgIHAgKyBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysjZWxzZQorKyAgICAgICAgICAgICAgREVCVUdfUFJJTlQyICgiICBTZXR0aW5nIHR3byBieXRlcyBmcm9tIDB4JXggdG8gbm9fb3AuXG4iLAorKwkJCSAgICBwICsgT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrI2VuZGlmIC8qIF9MSUJDICovCisrCisrI2lmZGVmIFdDSEFSCisrCSAgICAgIHBbMV0gPSAoVUNIQVJfVCkgbm9fb3A7CisrI2Vsc2UKKysJICAgICAgcFsyXSA9IChVQ0hBUl9UKSBub19vcDsKKysgICAgICAgICAgICAgIHBbM10gPSAoVUNIQVJfVCkgbm9fb3A7CisrI2VuZGlmIC8qIFdDSEFSICovCisrICAgICAgICAgICAgICBnb3RvIG9uX2ZhaWx1cmU7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UganVtcF9uOgorKyAgICAgICAgICBFWFRSQUNUX05VTUJFUiAobWNudCwgcCArIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyAgICAgICAgICBERUJVR19QUklOVDIgKCJFWEVDVVRJTkcganVtcF9uICVkLlxuIiwgbWNudCk7CisrCisrICAgICAgICAgIC8qIE9yaWdpbmFsbHksIHRoaXMgaXMgaG93IG1hbnkgdGltZXMgd2UgQ0FOIGp1bXAuICAqLworKyAgICAgICAgICBpZiAobWNudCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgbWNudC0tOworKyAgICAgICAgICAgICAgIFNUT1JFX05VTUJFUiAocCArIE9GRlNFVF9BRERSRVNTX1NJWkUsIG1jbnQpOworKworKyNpZmRlZiBfTElCQworKyAgICAgICAgICAgICAgIERFQlVHX1BSSU5UMyAoIiAgU2V0dGluZyAlcCB0byAlZC5cbiIsIHAgKyBPRkZTRVRfQUREUkVTU19TSVpFLAorKwkJCSAgICAgbWNudCk7CisrI2Vsc2UKKysgICAgICAgICAgICAgICBERUJVR19QUklOVDMgKCIgIFNldHRpbmcgMHgleCB0byAlZC5cbiIsIHAgKyBPRkZTRVRfQUREUkVTU19TSVpFLAorKwkJCSAgICAgbWNudCk7CisrI2VuZGlmIC8qIF9MSUJDICovCisrCSAgICAgICBnb3RvIHVuY29uZGl0aW9uYWxfanVtcDsKKysgICAgICAgICAgICB9CisrICAgICAgICAgIC8qIElmIGRvbid0IGhhdmUgdG8ganVtcCBhbnkgbW9yZSwgc2tpcCBvdmVyIHRoZSByZXN0IG9mIGNvbW1hbmQuICAqLworKwkgIGVsc2UKKysJICAgIHAgKz0gMiAqIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIHNldF9udW1iZXJfYXQ6CisrCSAgeworKyAgICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBzZXRfbnVtYmVyX2F0LlxuIik7CisrCisrICAgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHApOworKyAgICAgICAgICAgIHAxID0gcCArIG1jbnQ7CisrICAgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHApOworKyNpZmRlZiBfTElCQworKyAgICAgICAgICAgIERFQlVHX1BSSU5UMyAoIiAgU2V0dGluZyAlcCB0byAlZC5cbiIsIHAxLCBtY250KTsKKysjZWxzZQorKyAgICAgICAgICAgIERFQlVHX1BSSU5UMyAoIiAgU2V0dGluZyAweCV4IHRvICVkLlxuIiwgcDEsIG1jbnQpOworKyNlbmRpZgorKwkgICAgU1RPUkVfTlVNQkVSIChwMSwgbWNudCk7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgIH0KKysKKysjaWYgMAorKwkvKiBUaGUgREVDIEFscGhhIEMgY29tcGlsZXIgMy54IGdlbmVyYXRlcyBpbmNvcnJlY3QgY29kZSBmb3IgdGhlCisrCSAgIHRlc3QgIFdPUkRDSEFSX1AgKGQgLSAxKSAhPSBXT1JEQ0hBUl9QIChkKSAgaW4gdGhlIGV4cGFuc2lvbiBvZgorKwkgICBBVF9XT1JEX0JPVU5EQVJZLCBzbyB0aGlzIGNvZGUgaXMgZGlzYWJsZWQuICBFeHBhbmRpbmcgdGhlCisrCSAgIG1hY3JvIGFuZCBpbnRyb2R1Y2luZyB0ZW1wb3JhcnkgdmFyaWFibGVzIHdvcmtzIGFyb3VuZCB0aGUgYnVnLiAgKi8KKysKKysJY2FzZSB3b3JkYm91bmQ6CisrCSAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIHdvcmRib3VuZC5cbiIpOworKwkgIGlmIChBVF9XT1JEX0JPVU5EQVJZIChkKSkKKysJICAgIGJyZWFrOworKwkgIGdvdG8gZmFpbDsKKysKKysJY2FzZSBub3R3b3JkYm91bmQ6CisrCSAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIG5vdHdvcmRib3VuZC5cbiIpOworKwkgIGlmIChBVF9XT1JEX0JPVU5EQVJZIChkKSkKKysJICAgIGdvdG8gZmFpbDsKKysJICBicmVhazsKKysjZWxzZQorKwljYXNlIHdvcmRib3VuZDoKKysJeworKwkgIGJvb2xlYW4gcHJldmNoYXIsIHRoaXNjaGFyOworKworKwkgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyB3b3JkYm91bmQuXG4iKTsKKysJICBpZiAoQVRfU1RSSU5HU19CRUcgKGQpIHx8IEFUX1NUUklOR1NfRU5EIChkKSkKKysJICAgIGJyZWFrOworKworKwkgIHByZXZjaGFyID0gV09SRENIQVJfUCAoZCAtIDEpOworKwkgIHRoaXNjaGFyID0gV09SRENIQVJfUCAoZCk7CisrCSAgaWYgKHByZXZjaGFyICE9IHRoaXNjaGFyKQorKwkgICAgYnJlYWs7CisrCSAgZ290byBmYWlsOworKwl9CisrCisrICAgICAgY2FzZSBub3R3b3JkYm91bmQ6CisrCXsKKysJICBib29sZWFuIHByZXZjaGFyLCB0aGlzY2hhcjsKKysKKysJICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgbm90d29yZGJvdW5kLlxuIik7CisrCSAgaWYgKEFUX1NUUklOR1NfQkVHIChkKSB8fCBBVF9TVFJJTkdTX0VORCAoZCkpCisrCSAgICBnb3RvIGZhaWw7CisrCisrCSAgcHJldmNoYXIgPSBXT1JEQ0hBUl9QIChkIC0gMSk7CisrCSAgdGhpc2NoYXIgPSBXT1JEQ0hBUl9QIChkKTsKKysJICBpZiAocHJldmNoYXIgIT0gdGhpc2NoYXIpCisrCSAgICBnb3RvIGZhaWw7CisrCSAgYnJlYWs7CisrCX0KKysjZW5kaWYKKysKKysJY2FzZSB3b3JkYmVnOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgd29yZGJlZy5cbiIpOworKwkgIGlmICghQVRfU1RSSU5HU19FTkQgKGQpICYmIFdPUkRDSEFSX1AgKGQpCisrCSAgICAgICYmIChBVF9TVFJJTkdTX0JFRyAoZCkgfHwgIVdPUkRDSEFSX1AgKGQgLSAxKSkpCisrCSAgICBicmVhazsKKysgICAgICAgICAgZ290byBmYWlsOworKworKwljYXNlIHdvcmRlbmQ6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyB3b3JkZW5kLlxuIik7CisrCSAgaWYgKCFBVF9TVFJJTkdTX0JFRyAoZCkgJiYgV09SRENIQVJfUCAoZCAtIDEpCisrICAgICAgICAgICAgICAmJiAoQVRfU1RSSU5HU19FTkQgKGQpIHx8ICFXT1JEQ0hBUl9QIChkKSkpCisrCSAgICBicmVhazsKKysgICAgICAgICAgZ290byBmYWlsOworKworKyNpZmRlZiBlbWFjcworKyAgCWNhc2UgYmVmb3JlX2RvdDoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIGJlZm9yZV9kb3QuXG4iKTsKKysgCSAgaWYgKFBUUl9DSEFSX1BPUyAoKHVuc2lnbmVkIGNoYXIgKikgZCkgPj0gcG9pbnQpCisrICAJICAgIGdvdG8gZmFpbDsKKysgIAkgIGJyZWFrOworKworKyAgCWNhc2UgYXRfZG90OgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgYXRfZG90LlxuIik7CisrIAkgIGlmIChQVFJfQ0hBUl9QT1MgKCh1bnNpZ25lZCBjaGFyICopIGQpICE9IHBvaW50KQorKyAgCSAgICBnb3RvIGZhaWw7CisrICAJICBicmVhazsKKysKKysgIAljYXNlIGFmdGVyX2RvdDoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIGFmdGVyX2RvdC5cbiIpOworKyAgICAgICAgICBpZiAoUFRSX0NIQVJfUE9TICgodW5zaWduZWQgY2hhciAqKSBkKSA8PSBwb2ludCkKKysgIAkgICAgZ290byBmYWlsOworKyAgCSAgYnJlYWs7CisrCisrCWNhc2Ugc3ludGF4c3BlYzoKKysgICAgICAgICAgREVCVUdfUFJJTlQyICgiRVhFQ1VUSU5HIHN5bnRheHNwZWMgJWQuXG4iLCBtY250KTsKKysJICBtY250ID0gKnArKzsKKysJICBnb3RvIG1hdGNoc3ludGF4OworKworKyAgICAgICAgY2FzZSB3b3JkY2hhcjoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIEVtYWNzIHdvcmRjaGFyLlxuIik7CisrCSAgbWNudCA9IChpbnQpIFN3b3JkOworKyAgICAgICAgbWF0Y2hzeW50YXg6CisrCSAgUFJFRkVUQ0ggKCk7CisrCSAgLyogQ2FuJ3QgdXNlICpkKysgaGVyZTsgU1lOVEFYIG1heSBiZSBhbiB1bnNhZmUgbWFjcm8uICAqLworKwkgIGQrKzsKKysJICBpZiAoU1lOVEFYIChkWy0xXSkgIT0gKGVudW0gc3ludGF4Y29kZSkgbWNudCkKKysJICAgIGdvdG8gZmFpbDsKKysgICAgICAgICAgU0VUX1JFR1NfTUFUQ0hFRCAoKTsKKysJICBicmVhazsKKysKKysJY2FzZSBub3RzeW50YXhzcGVjOgorKyAgICAgICAgICBERUJVR19QUklOVDIgKCJFWEVDVVRJTkcgbm90c3ludGF4c3BlYyAlZC5cbiIsIG1jbnQpOworKwkgIG1jbnQgPSAqcCsrOworKwkgIGdvdG8gbWF0Y2hub3RzeW50YXg7CisrCisrICAgICAgICBjYXNlIG5vdHdvcmRjaGFyOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgRW1hY3Mgbm90d29yZGNoYXIuXG4iKTsKKysJICBtY250ID0gKGludCkgU3dvcmQ7CisrICAgICAgICBtYXRjaG5vdHN5bnRheDoKKysJICBQUkVGRVRDSCAoKTsKKysJICAvKiBDYW4ndCB1c2UgKmQrKyBoZXJlOyBTWU5UQVggbWF5IGJlIGFuIHVuc2FmZSBtYWNyby4gICovCisrCSAgZCsrOworKwkgIGlmIChTWU5UQVggKGRbLTFdKSA9PSAoZW51bSBzeW50YXhjb2RlKSBtY250KQorKwkgICAgZ290byBmYWlsOworKwkgIFNFVF9SRUdTX01BVENIRUQgKCk7CisrICAgICAgICAgIGJyZWFrOworKworKyNlbHNlIC8qIG5vdCBlbWFjcyAqLworKwljYXNlIHdvcmRjaGFyOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgbm9uLUVtYWNzIHdvcmRjaGFyLlxuIik7CisrCSAgUFJFRkVUQ0ggKCk7CisrICAgICAgICAgIGlmICghV09SRENIQVJfUCAoZCkpCisrICAgICAgICAgICAgZ290byBmYWlsOworKwkgIFNFVF9SRUdTX01BVENIRUQgKCk7CisrICAgICAgICAgIGQrKzsKKysJICBicmVhazsKKysKKysJY2FzZSBub3R3b3JkY2hhcjoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIG5vbi1FbWFjcyBub3R3b3JkY2hhci5cbiIpOworKwkgIFBSRUZFVENIICgpOworKwkgIGlmIChXT1JEQ0hBUl9QIChkKSkKKysgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICAgIFNFVF9SRUdTX01BVENIRUQgKCk7CisrICAgICAgICAgIGQrKzsKKysJICBicmVhazsKKysjZW5kaWYgLyogbm90IGVtYWNzICovCisrCisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICBhYm9ydCAoKTsKKysJfQorKyAgICAgIGNvbnRpbnVlOyAgLyogU3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkIG9uZSBwYXR0ZXJuIGNvbW1hbmQ7IGtlZXAgZ29pbmcuICAqLworKworKworKyAgICAvKiBXZSBnb3RvIGhlcmUgaWYgYSBtYXRjaGluZyBvcGVyYXRpb24gZmFpbHMuICovCisrICAgIGZhaWw6CisrICAgICAgaWYgKCFGQUlMX1NUQUNLX0VNUFRZICgpKQorKwl7IC8qIEEgcmVzdGFydCBwb2ludCBpcyBrbm93bi4gIFJlc3RvcmUgdG8gdGhhdCBzdGF0ZS4gICovCisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIlxuRkFJTDpcbiIpOworKyAgICAgICAgICBQT1BfRkFJTFVSRV9QT0lOVCAoZCwgcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd2VzdF9hY3RpdmVfcmVnLCBoaWdoZXN0X2FjdGl2ZV9yZWcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdzdGFydCwgcmVnZW5kLCByZWdfaW5mbyk7CisrCisrICAgICAgICAgIC8qIElmIHRoaXMgZmFpbHVyZSBwb2ludCBpcyBhIGR1bW15LCB0cnkgdGhlIG5leHQgb25lLiAgKi8KKysgICAgICAgICAgaWYgKCFwKQorKwkgICAgZ290byBmYWlsOworKworKyAgICAgICAgICAvKiBJZiB3ZSBmYWlsZWQgdG8gdGhlIGVuZCBvZiB0aGUgcGF0dGVybiwgZG9uJ3QgZXhhbWluZSAqcC4gICovCisrCSAgYXNzZXJ0IChwIDw9IHBlbmQpOworKyAgICAgICAgICBpZiAocCA8IHBlbmQpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgYm9vbGVhbiBpc19hX2p1bXBfbiA9IGZhbHNlOworKworKyAgICAgICAgICAgICAgLyogSWYgZmFpbGVkIHRvIGEgYmFja3dhcmRzIGp1bXAgdGhhdCdzIHBhcnQgb2YgYSByZXBldGl0aW9uCisrICAgICAgICAgICAgICAgICBsb29wLCBuZWVkIHRvIHBvcCB0aGlzIGZhaWx1cmUgcG9pbnQgYW5kIHVzZSB0aGUgbmV4dCBvbmUuICAqLworKyAgICAgICAgICAgICAgc3dpdGNoICgocmVfb3Bjb2RlX3QpICpwKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNhc2UganVtcF9uOgorKyAgICAgICAgICAgICAgICAgIGlzX2FfanVtcF9uID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgY2FzZSBtYXliZV9wb3BfanVtcDoKKysgICAgICAgICAgICAgICAgY2FzZSBwb3BfZmFpbHVyZV9qdW1wOgorKyAgICAgICAgICAgICAgICBjYXNlIGp1bXA6CisrICAgICAgICAgICAgICAgICAgcDEgPSBwICsgMTsKKysgICAgICAgICAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcDEpOworKyAgICAgICAgICAgICAgICAgIHAxICs9IG1jbnQ7CisrCisrICAgICAgICAgICAgICAgICAgaWYgKChpc19hX2p1bXBfbiAmJiAocmVfb3Bjb2RlX3QpICpwMSA9PSBzdWNjZWVkX24pCisrICAgICAgICAgICAgICAgICAgICAgIHx8ICghaXNfYV9qdW1wX24KKysgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChyZV9vcGNvZGVfdCkgKnAxID09IG9uX2ZhaWx1cmVfanVtcCkpCisrICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICAgLyogZG8gbm90aGluZyAqLyA7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgIGlmIChkID49IHN0cmluZzEgJiYgZCA8PSBlbmQxKQorKwkgICAgZGVuZCA9IGVuZF9tYXRjaF8xOworKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIGJyZWFrOyAgIC8qIE1hdGNoaW5nIGF0IHRoaXMgc3RhcnRpbmcgcG9pbnQgcmVhbGx5IGZhaWxzLiAgKi8KKysgICAgfSAvKiBmb3IgKDs7KSAqLworKworKyAgaWYgKGJlc3RfcmVnc19zZXQpCisrICAgIGdvdG8gcmVzdG9yZV9iZXN0X3JlZ3M7CisrCisrICBGUkVFX1ZBUklBQkxFUyAoKTsKKysKKysgIHJldHVybiAtMTsgICAgICAgICAJCQkvKiBGYWlsdXJlIHRvIG1hdGNoLiAgKi8KKyt9IC8qIHJlX21hdGNoXzIgKi8KKysMCisrLyogU3Vicm91dGluZSBkZWZpbml0aW9ucyBmb3IgcmVfbWF0Y2hfMi4gICovCisrCisrCisrLyogV2UgYXJlIHBhc3NlZCBQIHBvaW50aW5nIHRvIGEgcmVnaXN0ZXIgbnVtYmVyIGFmdGVyIGEgc3RhcnRfbWVtb3J5LgorKworKyAgIFJldHVybiB0cnVlIGlmIHRoZSBwYXR0ZXJuIHVwIHRvIHRoZSBjb3JyZXNwb25kaW5nIHN0b3BfbWVtb3J5IGNhbgorKyAgIG1hdGNoIHRoZSBlbXB0eSBzdHJpbmcsIGFuZCBmYWxzZSBvdGhlcndpc2UuCisrCisrICAgSWYgd2UgZmluZCB0aGUgbWF0Y2hpbmcgc3RvcF9tZW1vcnksIHNldHMgUCB0byBwb2ludCB0byBvbmUgcGFzdCBpdHMgbnVtYmVyLgorKyAgIE90aGVyd2lzZSwgc2V0cyBQIHRvIGFuIHVuZGVmaW5lZCBieXRlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBFTkQuCisrCisrICAgV2UgZG9uJ3QgaGFuZGxlIGR1cGxpY2F0ZXMgcHJvcGVybHkgKHlldCkuICAqLworKworK3N0YXRpYyBib29sZWFuCisrUFJFRklYKGdyb3VwX21hdGNoX251bGxfc3RyaW5nX3ApIChVQ0hBUl9UICoqcCwgVUNIQVJfVCAqZW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkgKnJlZ19pbmZvKQorK3sKKysgIGludCBtY250OworKyAgLyogUG9pbnQgdG8gYWZ0ZXIgdGhlIGFyZ3MgdG8gdGhlIHN0YXJ0X21lbW9yeS4gICovCisrICBVQ0hBUl9UICpwMSA9ICpwICsgMjsKKysKKysgIHdoaWxlIChwMSA8IGVuZCkKKysgICAgeworKyAgICAgIC8qIFNraXAgb3ZlciBvcGNvZGVzIHRoYXQgY2FuIG1hdGNoIG5vdGhpbmcsIGFuZCByZXR1cm4gdHJ1ZSBvcgorKwkgZmFsc2UsIGFzIGFwcHJvcHJpYXRlLCB3aGVuIHdlIGdldCB0byBvbmUgdGhhdCBjYW4ndCwgb3IgdG8gdGhlCisrICAgICAgICAgbWF0Y2hpbmcgc3RvcF9tZW1vcnkuICAqLworKworKyAgICAgIHN3aXRjaCAoKHJlX29wY29kZV90KSAqcDEpCisrICAgICAgICB7CisrICAgICAgICAvKiBDb3VsZCBiZSBlaXRoZXIgYSBsb29wIG9yIGEgc2VyaWVzIG9mIGFsdGVybmF0aXZlcy4gICovCisrICAgICAgICBjYXNlIG9uX2ZhaWx1cmVfanVtcDoKKysgICAgICAgICAgcDErKzsKKysgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHAxKTsKKysKKysgICAgICAgICAgLyogSWYgdGhlIG5leHQgb3BlcmF0aW9uIGlzIG5vdCBhIGp1bXAgYmFja3dhcmRzIGluIHRoZQorKwkgICAgIHBhdHRlcm4uICAqLworKworKwkgIGlmIChtY250ID49IDApCisrCSAgICB7CisrICAgICAgICAgICAgICAvKiBHbyB0aHJvdWdoIHRoZSBvbl9mYWlsdXJlX2p1bXBzIG9mIHRoZSBhbHRlcm5hdGl2ZXMsCisrICAgICAgICAgICAgICAgICBzZWVpbmcgaWYgYW55IG9mIHRoZSBhbHRlcm5hdGl2ZXMgY2Fubm90IG1hdGNoIG5vdGhpbmcuCisrICAgICAgICAgICAgICAgICBUaGUgbGFzdCBhbHRlcm5hdGl2ZSBzdGFydHMgd2l0aCBvbmx5IGEganVtcCwKKysgICAgICAgICAgICAgICAgIHdoZXJlYXMgdGhlIHJlc3Qgc3RhcnQgd2l0aCBvbl9mYWlsdXJlX2p1bXAgYW5kIGVuZAorKyAgICAgICAgICAgICAgICAgd2l0aCBhIGp1bXAsIGUuZy4sIGhlcmUgaXMgdGhlIHBhdHRlcm4gZm9yIGBhfGJ8Yyc6CisrCisrICAgICAgICAgICAgICAgICAvb25fZmFpbHVyZV9qdW1wLzAvNi9leGFjdG4vMS9hL2p1bXBfcGFzdF9hbHQvMC82CisrICAgICAgICAgICAgICAgICAvb25fZmFpbHVyZV9qdW1wLzAvNi9leGFjdG4vMS9iL2p1bXBfcGFzdF9hbHQvMC8zCisrICAgICAgICAgICAgICAgICAvZXhhY3RuLzEvYworKworKyAgICAgICAgICAgICAgICAgU28sIHdlIGhhdmUgdG8gZmlyc3QgZ28gdGhyb3VnaCB0aGUgZmlyc3QgKG4tMSkKKysgICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlcyBhbmQgdGhlbiBkZWFsIHdpdGggdGhlIGxhc3Qgb25lIHNlcGFyYXRlbHkuICAqLworKworKworKyAgICAgICAgICAgICAgLyogRGVhbCB3aXRoIHRoZSBmaXJzdCAobi0xKSBhbHRlcm5hdGl2ZXMsIHdoaWNoIHN0YXJ0CisrICAgICAgICAgICAgICAgICB3aXRoIGFuIG9uX2ZhaWx1cmVfanVtcCAoc2VlIGFib3ZlKSB0aGF0IGp1bXBzIHRvIHJpZ2h0CisrICAgICAgICAgICAgICAgICBwYXN0IGEganVtcF9wYXN0X2FsdC4gICovCisrCisrICAgICAgICAgICAgICB3aGlsZSAoKHJlX29wY29kZV90KSBwMVttY250LSgxK09GRlNFVF9BRERSRVNTX1NJWkUpXSA9PQorKwkJICAgICBqdW1wX3Bhc3RfYWx0KQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgLyogYG1jbnQnIGhvbGRzIGhvdyBtYW55IGJ5dGVzIGxvbmcgdGhlIGFsdGVybmF0aXZlCisrICAgICAgICAgICAgICAgICAgICAgaXMsIGluY2x1ZGluZyB0aGUgZW5kaW5nIGBqdW1wX3Bhc3RfYWx0JyBhbmQKKysgICAgICAgICAgICAgICAgICAgICBpdHMgbnVtYmVyLiAgKi8KKysKKysgICAgICAgICAgICAgICAgICBpZiAoIVBSRUZJWChhbHRfbWF0Y2hfbnVsbF9zdHJpbmdfcCkgKHAxLCBwMSArIG1jbnQgLQorKwkJCQkJCSgxICsgT0ZGU0VUX0FERFJFU1NfU0laRSksCisrCQkJCQkJcmVnX2luZm8pKQorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKworKyAgICAgICAgICAgICAgICAgIC8qIE1vdmUgdG8gcmlnaHQgYWZ0ZXIgdGhpcyBhbHRlcm5hdGl2ZSwgaW5jbHVkaW5nIHRoZQorKwkJICAgICBqdW1wX3Bhc3RfYWx0LiAgKi8KKysgICAgICAgICAgICAgICAgICBwMSArPSBtY250OworKworKyAgICAgICAgICAgICAgICAgIC8qIEJyZWFrIGlmIGl0J3MgdGhlIGJlZ2lubmluZyBvZiBhbiBuLXRoIGFsdGVybmF0aXZlCisrICAgICAgICAgICAgICAgICAgICAgdGhhdCBkb2Vzbid0IGJlZ2luIHdpdGggYW4gb25fZmFpbHVyZV9qdW1wLiAgKi8KKysgICAgICAgICAgICAgICAgICBpZiAoKHJlX29wY29kZV90KSAqcDEgIT0gb25fZmFpbHVyZV9qdW1wKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCisrCQkgIC8qIFN0aWxsIGhhdmUgdG8gY2hlY2sgdGhhdCBpdCdzIG5vdCBhbiBuLXRoCisrCQkgICAgIGFsdGVybmF0aXZlIHRoYXQgc3RhcnRzIHdpdGggYW4gb25fZmFpbHVyZV9qdW1wLiAgKi8KKysJCSAgcDErKzsKKysgICAgICAgICAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcDEpOworKyAgICAgICAgICAgICAgICAgIGlmICgocmVfb3Bjb2RlX3QpIHAxW21jbnQtKDErT0ZGU0VUX0FERFJFU1NfU0laRSldICE9CisrCQkgICAgICBqdW1wX3Bhc3RfYWx0KQorKyAgICAgICAgICAgICAgICAgICAgeworKwkJICAgICAgLyogR2V0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG4tdGggYWx0ZXJuYXRpdmUuICAqLworKyAgICAgICAgICAgICAgICAgICAgICBwMSAtPSAxICsgT0ZGU0VUX0FERFJFU1NfU0laRTsKKysgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgIC8qIERlYWwgd2l0aCB0aGUgbGFzdCBhbHRlcm5hdGl2ZTogZ28gYmFjayBhbmQgZ2V0IG51bWJlcgorKyAgICAgICAgICAgICAgICAgb2YgdGhlIGBqdW1wX3Bhc3RfYWx0JyBqdXN0IGJlZm9yZSBpdC4gIGBtY250JyBjb250YWlucworKyAgICAgICAgICAgICAgICAgdGhlIGxlbmd0aCBvZiB0aGUgYWx0ZXJuYXRpdmUuICAqLworKyAgICAgICAgICAgICAgRVhUUkFDVF9OVU1CRVIgKG1jbnQsIHAxIC0gT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrCisrICAgICAgICAgICAgICBpZiAoIVBSRUZJWChhbHRfbWF0Y2hfbnVsbF9zdHJpbmdfcCkgKHAxLCBwMSArIG1jbnQsIHJlZ19pbmZvKSkKKysgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKworKyAgICAgICAgICAgICAgcDEgKz0gbWNudDsJLyogR2V0IHBhc3QgdGhlIG4tdGggYWx0ZXJuYXRpdmUuICAqLworKyAgICAgICAgICAgIH0gLyogaWYgbWNudCA+IDAgKi8KKysgICAgICAgICAgYnJlYWs7CisrCisrCisrICAgICAgICBjYXNlIHN0b3BfbWVtb3J5OgorKwkgIGFzc2VydCAocDFbMV0gPT0gKipwKTsKKysgICAgICAgICAgKnAgPSBwMSArIDI7CisrICAgICAgICAgIHJldHVybiB0cnVlOworKworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgaWYgKCFQUkVGSVgoY29tbW9uX29wX21hdGNoX251bGxfc3RyaW5nX3ApICgmcDEsIGVuZCwgcmVnX2luZm8pKQorKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysgICAgfSAvKiB3aGlsZSBwMSA8IGVuZCAqLworKworKyAgcmV0dXJuIGZhbHNlOworK30gLyogZ3JvdXBfbWF0Y2hfbnVsbF9zdHJpbmdfcCAqLworKworKworKy8qIFNpbWlsYXIgdG8gZ3JvdXBfbWF0Y2hfbnVsbF9zdHJpbmdfcCwgYnV0IGRvZXNuJ3QgZGVhbCB3aXRoIGFsdGVybmF0aXZlczoKKysgICBJdCBleHBlY3RzIFAgdG8gYmUgdGhlIGZpcnN0IGJ5dGUgb2YgYSBzaW5nbGUgYWx0ZXJuYXRpdmUgYW5kIEVORCBvbmUKKysgICBieXRlIHBhc3QgdGhlIGxhc3QuIFRoZSBhbHRlcm5hdGl2ZSBjYW4gY29udGFpbiBncm91cHMuICAqLworKworK3N0YXRpYyBib29sZWFuCisrUFJFRklYKGFsdF9tYXRjaF9udWxsX3N0cmluZ19wKSAoVUNIQVJfVCAqcCwgVUNIQVJfVCAqZW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpICpyZWdfaW5mbykKKyt7CisrICBpbnQgbWNudDsKKysgIFVDSEFSX1QgKnAxID0gcDsKKysKKysgIHdoaWxlIChwMSA8IGVuZCkKKysgICAgeworKyAgICAgIC8qIFNraXAgb3ZlciBvcGNvZGVzIHRoYXQgY2FuIG1hdGNoIG5vdGhpbmcsIGFuZCBicmVhayB3aGVuIHdlIGdldAorKyAgICAgICAgIHRvIG9uZSB0aGF0IGNhbid0LiAgKi8KKysKKysgICAgICBzd2l0Y2ggKChyZV9vcGNvZGVfdCkgKnAxKQorKyAgICAgICAgeworKwkvKiBJdCdzIGEgbG9vcC4gICovCisrICAgICAgICBjYXNlIG9uX2ZhaWx1cmVfanVtcDoKKysgICAgICAgICAgcDErKzsKKysgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHAxKTsKKysgICAgICAgICAgcDEgKz0gbWNudDsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWRlZmF1bHQ6CisrICAgICAgICAgIGlmICghUFJFRklYKGNvbW1vbl9vcF9tYXRjaF9udWxsX3N0cmluZ19wKSAoJnAxLCBlbmQsIHJlZ19pbmZvKSkKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrICAgIH0gIC8qIHdoaWxlIHAxIDwgZW5kICovCisrCisrICByZXR1cm4gdHJ1ZTsKKyt9IC8qIGFsdF9tYXRjaF9udWxsX3N0cmluZ19wICovCisrCisrCisrLyogRGVhbHMgd2l0aCB0aGUgb3BzIGNvbW1vbiB0byBncm91cF9tYXRjaF9udWxsX3N0cmluZ19wIGFuZAorKyAgIGFsdF9tYXRjaF9udWxsX3N0cmluZ19wLgorKworKyAgIFNldHMgUCB0byBvbmUgYWZ0ZXIgdGhlIG9wIGFuZCBpdHMgYXJndW1lbnRzLCBpZiBhbnkuICAqLworKworK3N0YXRpYyBib29sZWFuCisrUFJFRklYKGNvbW1vbl9vcF9tYXRjaF9udWxsX3N0cmluZ19wKSAoVUNIQVJfVCAqKnAsIFVDSEFSX1QgKmVuZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSAqcmVnX2luZm8pCisreworKyAgaW50IG1jbnQ7CisrICBib29sZWFuIHJldDsKKysgIGludCByZWdfbm87CisrICBVQ0hBUl9UICpwMSA9ICpwOworKworKyAgc3dpdGNoICgocmVfb3Bjb2RlX3QpICpwMSsrKQorKyAgICB7CisrICAgIGNhc2Ugbm9fb3A6CisrICAgIGNhc2UgYmVnbGluZToKKysgICAgY2FzZSBlbmRsaW5lOgorKyAgICBjYXNlIGJlZ2J1ZjoKKysgICAgY2FzZSBlbmRidWY6CisrICAgIGNhc2Ugd29yZGJlZzoKKysgICAgY2FzZSB3b3JkZW5kOgorKyAgICBjYXNlIHdvcmRib3VuZDoKKysgICAgY2FzZSBub3R3b3JkYm91bmQ6CisrI2lmZGVmIGVtYWNzCisrICAgIGNhc2UgYmVmb3JlX2RvdDoKKysgICAgY2FzZSBhdF9kb3Q6CisrICAgIGNhc2UgYWZ0ZXJfZG90OgorKyNlbmRpZgorKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIHN0YXJ0X21lbW9yeToKKysgICAgICByZWdfbm8gPSAqcDE7CisrICAgICAgYXNzZXJ0IChyZWdfbm8gPiAwICYmIHJlZ19ubyA8PSBNQVhfUkVHTlVNKTsKKysgICAgICByZXQgPSBQUkVGSVgoZ3JvdXBfbWF0Y2hfbnVsbF9zdHJpbmdfcCkgKCZwMSwgZW5kLCByZWdfaW5mbyk7CisrCisrICAgICAgLyogSGF2ZSB0byBzZXQgdGhpcyBoZXJlIGluIGNhc2Ugd2UncmUgY2hlY2tpbmcgYSBncm91cCB3aGljaAorKyAgICAgICAgIGNvbnRhaW5zIGEgZ3JvdXAgYW5kIGEgYmFjayByZWZlcmVuY2UgdG8gaXQuICAqLworKworKyAgICAgIGlmIChSRUdfTUFUQ0hfTlVMTF9TVFJJTkdfUCAocmVnX2luZm9bcmVnX25vXSkgPT0gTUFUQ0hfTlVMTF9VTlNFVF9WQUxVRSkKKysgICAgICAgIFJFR19NQVRDSF9OVUxMX1NUUklOR19QIChyZWdfaW5mb1tyZWdfbm9dKSA9IHJldDsKKysKKysgICAgICBpZiAoIXJldCkKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICBicmVhazsKKysKKysgICAgLyogSWYgdGhpcyBpcyBhbiBvcHRpbWl6ZWQgc3VjY2VlZF9uIGZvciB6ZXJvIHRpbWVzLCBtYWtlIHRoZSBqdW1wLiAgKi8KKysgICAgY2FzZSBqdW1wOgorKyAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwMSk7CisrICAgICAgaWYgKG1jbnQgPj0gMCkKKysgICAgICAgIHAxICs9IG1jbnQ7CisrICAgICAgZWxzZQorKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIHN1Y2NlZWRfbjoKKysgICAgICAvKiBHZXQgdG8gdGhlIG51bWJlciBvZiB0aW1lcyB0byBzdWNjZWVkLiAgKi8KKysgICAgICBwMSArPSBPRkZTRVRfQUREUkVTU19TSVpFOworKyAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwMSk7CisrCisrICAgICAgaWYgKG1jbnQgPT0gMCkKKysgICAgICAgIHsKKysgICAgICAgICAgcDEgLT0gMiAqIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwMSk7CisrICAgICAgICAgIHAxICs9IG1jbnQ7CisrICAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIGR1cGxpY2F0ZToKKysgICAgICBpZiAoIVJFR19NQVRDSF9OVUxMX1NUUklOR19QIChyZWdfaW5mb1sqcDFdKSkKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSBzZXRfbnVtYmVyX2F0OgorKyAgICAgIHAxICs9IDIgKiBPRkZTRVRfQUREUkVTU19TSVpFOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIC8qIEFsbCBvdGhlciBvcGNvZGVzIG1lYW4gd2UgY2Fubm90IG1hdGNoIHRoZSBlbXB0eSBzdHJpbmcuICAqLworKyAgICAgIHJldHVybiBmYWxzZTsKKysgIH0KKysKKysgICpwID0gcDE7CisrICByZXR1cm4gdHJ1ZTsKKyt9IC8qIGNvbW1vbl9vcF9tYXRjaF9udWxsX3N0cmluZ19wICovCisrCisrCisrLyogUmV0dXJuIHplcm8gaWYgVFJBTlNMQVRFW1MxXSBhbmQgVFJBTlNMQVRFW1MyXSBhcmUgaWRlbnRpY2FsIGZvciBMRU4KKysgICBieXRlczsgbm9uemVybyBvdGhlcndpc2UuICAqLworKworK3N0YXRpYyBpbnQKKytQUkVGSVgoYmNtcF90cmFuc2xhdGUpIChjb25zdCBDSEFSX1QgKnMxLCBjb25zdCBDSEFSX1QgKnMyLCByZWdpc3RlciBpbnQgbGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zbGF0ZSkKKyt7CisrICByZWdpc3RlciBjb25zdCBVQ0hBUl9UICpwMSA9IChjb25zdCBVQ0hBUl9UICopIHMxOworKyAgcmVnaXN0ZXIgY29uc3QgVUNIQVJfVCAqcDIgPSAoY29uc3QgVUNIQVJfVCAqKSBzMjsKKysgIHdoaWxlIChsZW4pCisrICAgIHsKKysjaWZkZWYgV0NIQVIKKysgICAgICBpZiAoKCgqcDE8PTB4ZmYpP3RyYW5zbGF0ZVsqcDErK106KnAxKyspCisrCSAgIT0gKCgqcDI8PTB4ZmYpP3RyYW5zbGF0ZVsqcDIrK106KnAyKyspKQorKwlyZXR1cm4gMTsKKysjZWxzZSAvKiBCWVRFICovCisrICAgICAgaWYgKHRyYW5zbGF0ZVsqcDErK10gIT0gdHJhbnNsYXRlWypwMisrXSkgcmV0dXJuIDE7CisrI2VuZGlmIC8qIFdDSEFSICovCisrICAgICAgbGVuLS07CisrICAgIH0KKysgIHJldHVybiAwOworK30KKysMCisrCisrI2Vsc2UgLyogbm90IElOU0lERV9SRUNVUlNJT04gKi8KKysKKysvKiBFbnRyeSBwb2ludHMgZm9yIEdOVSBjb2RlLiAgKi8KKysKKysvKiByZV9jb21waWxlX3BhdHRlcm4gaXMgdGhlIEdOVSByZWd1bGFyIGV4cHJlc3Npb24gY29tcGlsZXI6IGl0CisrICAgY29tcGlsZXMgUEFUVEVSTiAob2YgbGVuZ3RoIFNJWkUpIGFuZCBwdXRzIHRoZSByZXN1bHQgaW4gQlVGUC4KKysgICBSZXR1cm5zIDAgaWYgdGhlIHBhdHRlcm4gd2FzIHZhbGlkLCBvdGhlcndpc2UgYW4gZXJyb3Igc3RyaW5nLgorKworKyAgIEFzc3VtZXMgdGhlIGBhbGxvY2F0ZWQnIChhbmQgcGVyaGFwcyBgYnVmZmVyJykgYW5kIGB0cmFuc2xhdGUnIGZpZWxkcworKyAgIGFyZSBzZXQgaW4gQlVGUCBvbiBlbnRyeS4KKysKKysgICBXZSBjYWxsIHJlZ2V4X2NvbXBpbGUgdG8gZG8gdGhlIGFjdHVhbCBjb21waWxhdGlvbi4gICovCisrCisrY29uc3QgY2hhciAqCisrcmVfY29tcGlsZV9wYXR0ZXJuIChjb25zdCBjaGFyICpwYXR0ZXJuLCBzaXplX3QgbGVuZ3RoLAorKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwKQorK3sKKysgIHJlZ19lcnJjb2RlX3QgcmV0OworKworKyAgLyogR05VIGNvZGUgaXMgd3JpdHRlbiB0byBhc3N1bWUgYXQgbGVhc3QgUkVfTlJFR1MgcmVnaXN0ZXJzIHdpbGwgYmUgc2V0CisrICAgICAoYW5kIGF0IGxlYXN0IG9uZSBleHRyYSB3aWxsIGJlIC0xKS4gICovCisrICBidWZwLT5yZWdzX2FsbG9jYXRlZCA9IFJFR1NfVU5BTExPQ0FURUQ7CisrCisrICAvKiBBbmQgR05VIGNvZGUgZGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0byBnZXQgcmVnaXN0ZXIgaW5mb3JtYXRpb24KKysgICAgIGJ5IHBhc3NpbmcgbnVsbCBmb3IgdGhlIFJFR1MgYXJndW1lbnQgdG8gcmVfbWF0Y2gsIGV0Yy4sIG5vdCBieQorKyAgICAgc2V0dGluZyBub19zdWIuICAqLworKyAgYnVmcC0+bm9fc3ViID0gMDsKKysKKysgIC8qIE1hdGNoIGFuY2hvcnMgYXQgbmV3bGluZS4gICovCisrICBidWZwLT5uZXdsaW5lX2FuY2hvciA9IDE7CisrCisrIyBpZmRlZiBNQlNfU1VQUE9SVAorKyAgaWYgKE1CX0NVUl9NQVggIT0gMSkKKysgICAgcmV0ID0gd2NzX3JlZ2V4X2NvbXBpbGUgKHBhdHRlcm4sIGxlbmd0aCwgcmVfc3ludGF4X29wdGlvbnMsIGJ1ZnApOworKyAgZWxzZQorKyMgZW5kaWYKKysgICAgcmV0ID0gYnl0ZV9yZWdleF9jb21waWxlIChwYXR0ZXJuLCBsZW5ndGgsIHJlX3N5bnRheF9vcHRpb25zLCBidWZwKTsKKysKKysgIGlmICghcmV0KQorKyAgICByZXR1cm4gTlVMTDsKKysgIHJldHVybiBnZXR0ZXh0IChyZV9lcnJvcl9tc2dpZFsoaW50KSByZXRdKTsKKyt9CisrI2lmZGVmIF9MSUJDCisrd2Vha19hbGlhcyAoX19yZV9jb21waWxlX3BhdHRlcm4sIHJlX2NvbXBpbGVfcGF0dGVybikKKysjZW5kaWYKKysMCisrLyogRW50cnkgcG9pbnRzIGNvbXBhdGlibGUgd2l0aCA0LjIgQlNEIHJlZ2V4IGxpYnJhcnkuICBXZSBkb24ndCBkZWZpbmUKKysgICB0aGVtIHVubGVzcyBzcGVjaWZpY2FsbHkgcmVxdWVzdGVkLiAgKi8KKysKKysjaWYgZGVmaW5lZCBfUkVHRVhfUkVfQ09NUCB8fCBkZWZpbmVkIF9MSUJDCisrCisrLyogQlNEIGhhcyBvbmUgYW5kIG9ubHkgb25lIHBhdHRlcm4gYnVmZmVyLiAgKi8KKytzdGF0aWMgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyIHJlX2NvbXBfYnVmOworKworK2NoYXIgKgorKyNpZmRlZiBfTElCQworKy8qIE1ha2UgdGhlc2UgZGVmaW5pdGlvbnMgd2VhayBpbiBsaWJjLCBzbyBQT1NJWCBwcm9ncmFtcyBjYW4gcmVkZWZpbmUKKysgICB0aGVzZSBuYW1lcyBpZiB0aGV5IGRvbid0IHVzZSBvdXIgZnVuY3Rpb25zLCBhbmQgc3RpbGwgdXNlCisrICAgcmVnY29tcC9yZWdleGVjIGJlbG93IHdpdGhvdXQgbGluayBlcnJvcnMuICAqLworK3dlYWtfZnVuY3Rpb24KKysjZW5kaWYKKytyZV9jb21wIChjb25zdCBjaGFyICpzKQorK3sKKysgIHJlZ19lcnJjb2RlX3QgcmV0OworKworKyAgaWYgKCFzKQorKyAgICB7CisrICAgICAgaWYgKCFyZV9jb21wX2J1Zi5idWZmZXIpCisrCXJldHVybiAoY2hhciAqKSBnZXR0ZXh0ICgiTm8gcHJldmlvdXMgcmVndWxhciBleHByZXNzaW9uIik7CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysgIGlmICghcmVfY29tcF9idWYuYnVmZmVyKQorKyAgICB7CisrICAgICAgcmVfY29tcF9idWYuYnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikgbWFsbG9jICgyMDApOworKyAgICAgIGlmIChyZV9jb21wX2J1Zi5idWZmZXIgPT0gTlVMTCkKKysgICAgICAgIHJldHVybiAoY2hhciAqKSBnZXR0ZXh0IChyZV9lcnJvcl9tc2dpZFsoaW50KSBSRUdfRVNQQUNFXSk7CisrICAgICAgcmVfY29tcF9idWYuYWxsb2NhdGVkID0gMjAwOworKworKyAgICAgIHJlX2NvbXBfYnVmLmZhc3RtYXAgPSAoY2hhciAqKSBtYWxsb2MgKDEgPDwgQllURVdJRFRIKTsKKysgICAgICBpZiAocmVfY29tcF9idWYuZmFzdG1hcCA9PSBOVUxMKQorKwlyZXR1cm4gKGNoYXIgKikgZ2V0dGV4dCAocmVfZXJyb3JfbXNnaWRbKGludCkgUkVHX0VTUEFDRV0pOworKyAgICB9CisrCisrICAvKiBTaW5jZSBgcmVfZXhlYycgYWx3YXlzIHBhc3NlcyBOVUxMIGZvciB0aGUgYHJlZ3MnIGFyZ3VtZW50LCB3ZQorKyAgICAgZG9uJ3QgbmVlZCB0byBpbml0aWFsaXplIHRoZSBwYXR0ZXJuIGJ1ZmZlciBmaWVsZHMgd2hpY2ggYWZmZWN0IGl0LiAgKi8KKysKKysgIC8qIE1hdGNoIGFuY2hvcnMgYXQgbmV3bGluZXMuICAqLworKyAgcmVfY29tcF9idWYubmV3bGluZV9hbmNob3IgPSAxOworKworKyMgaWZkZWYgTUJTX1NVUFBPUlQKKysgIGlmIChNQl9DVVJfTUFYICE9IDEpCisrICAgIHJldCA9IHdjc19yZWdleF9jb21waWxlIChzLCBzdHJsZW4gKHMpLCByZV9zeW50YXhfb3B0aW9ucywgJnJlX2NvbXBfYnVmKTsKKysgIGVsc2UKKysjIGVuZGlmCisrICAgIHJldCA9IGJ5dGVfcmVnZXhfY29tcGlsZSAocywgc3RybGVuIChzKSwgcmVfc3ludGF4X29wdGlvbnMsICZyZV9jb21wX2J1Zik7CisrCisrICBpZiAoIXJldCkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICAvKiBZZXMsIHdlJ3JlIGRpc2NhcmRpbmcgYGNvbnN0JyBoZXJlIGlmICFIQVZFX0xJQklOVEwuICAqLworKyAgcmV0dXJuIChjaGFyICopIGdldHRleHQgKHJlX2Vycm9yX21zZ2lkWyhpbnQpIHJldF0pOworK30KKysKKysKKytpbnQKKysjaWZkZWYgX0xJQkMKKyt3ZWFrX2Z1bmN0aW9uCisrI2VuZGlmCisrcmVfZXhlYyAoY29uc3QgY2hhciAqcykKKyt7CisrICBjb25zdCBpbnQgbGVuID0gc3RybGVuIChzKTsKKysgIHJldHVybgorKyAgICAwIDw9IHJlX3NlYXJjaCAoJnJlX2NvbXBfYnVmLCBzLCBsZW4sIDAsIGxlbiwgKHN0cnVjdCByZV9yZWdpc3RlcnMgKikgMCk7CisrfQorKworKyNlbmRpZiAvKiBfUkVHRVhfUkVfQ09NUCAqLworKwwKKysvKiBQT1NJWC4yIGZ1bmN0aW9ucy4gIERvbid0IGRlZmluZSB0aGVzZSBmb3IgRW1hY3MuICAqLworKworKyNpZm5kZWYgZW1hY3MKKysKKysvKiByZWdjb21wIHRha2VzIGEgcmVndWxhciBleHByZXNzaW9uIGFzIGEgc3RyaW5nIGFuZCBjb21waWxlcyBpdC4KKysKKysgICBQUkVHIGlzIGEgcmVnZXhfdCAqLiAgV2UgZG8gbm90IGV4cGVjdCBhbnkgZmllbGRzIHRvIGJlIGluaXRpYWxpemVkLAorKyAgIHNpbmNlIFBPU0lYIHNheXMgd2Ugc2hvdWxkbid0LiAgVGh1cywgd2Ugc2V0CisrCisrICAgICBgYnVmZmVyJyB0byB0aGUgY29tcGlsZWQgcGF0dGVybjsKKysgICAgIGB1c2VkJyB0byB0aGUgbGVuZ3RoIG9mIHRoZSBjb21waWxlZCBwYXR0ZXJuOworKyAgICAgYHN5bnRheCcgdG8gUkVfU1lOVEFYX1BPU0lYX0VYVEVOREVEIGlmIHRoZQorKyAgICAgICBSRUdfRVhURU5ERUQgYml0IGluIENGTEFHUyBpcyBzZXQ7IG90aGVyd2lzZSwgdG8KKysgICAgICAgUkVfU1lOVEFYX1BPU0lYX0JBU0lDOworKyAgICAgYG5ld2xpbmVfYW5jaG9yJyB0byBSRUdfTkVXTElORSBiZWluZyBzZXQgaW4gQ0ZMQUdTOworKyAgICAgYGZhc3RtYXAnIHRvIGFuIGFsbG9jYXRlZCBzcGFjZSBmb3IgdGhlIGZhc3RtYXA7CisrICAgICBgZmFzdG1hcF9hY2N1cmF0ZScgdG8gemVybzsKKysgICAgIGByZV9uc3ViJyB0byB0aGUgbnVtYmVyIG9mIHN1YmV4cHJlc3Npb25zIGluIFBBVFRFUk4uCisrCisrICAgUEFUVEVSTiBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgcGF0dGVybiBzdHJpbmcuCisrCisrICAgQ0ZMQUdTIGlzIGEgc2VyaWVzIG9mIGJpdHMgd2hpY2ggYWZmZWN0IGNvbXBpbGF0aW9uLgorKworKyAgICAgSWYgUkVHX0VYVEVOREVEIGlzIHNldCwgd2UgdXNlIFBPU0lYIGV4dGVuZGVkIHN5bnRheDsgb3RoZXJ3aXNlLCB3ZQorKyAgICAgdXNlIFBPU0lYIGJhc2ljIHN5bnRheC4KKysKKysgICAgIElmIFJFR19ORVdMSU5FIGlzIHNldCwgdGhlbiAuIGFuZCBbXi4uLl0gZG9uJ3QgbWF0Y2ggbmV3bGluZS4KKysgICAgIEFsc28sIHJlZ2V4ZWMgd2lsbCB0cnkgYSBtYXRjaCBiZWdpbm5pbmcgYWZ0ZXIgZXZlcnkgbmV3bGluZS4KKysKKysgICAgIElmIFJFR19JQ0FTRSBpcyBzZXQsIHRoZW4gd2UgY29uc2lkZXJzIHVwcGVyLSBhbmQgbG93ZXJjYXNlCisrICAgICB2ZXJzaW9ucyBvZiBsZXR0ZXJzIHRvIGJlIGVxdWl2YWxlbnQgd2hlbiBtYXRjaGluZy4KKysKKysgICAgIElmIFJFR19OT1NVQiBpcyBzZXQsIHRoZW4gd2hlbiBQUkVHIGlzIHBhc3NlZCB0byByZWdleGVjLCB0aGF0CisrICAgICByb3V0aW5lIHdpbGwgcmVwb3J0IG9ubHkgc3VjY2VzcyBvciBmYWlsdXJlLCBhbmQgbm90aGluZyBhYm91dCB0aGUKKysgICAgIHJlZ2lzdGVycy4KKysKKysgICBJdCByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG5vbnplcm8gaWYgaXQgZG9lc24ndC4gIChTZWUgcmVnZXguaCBmb3IKKysgICB0aGUgcmV0dXJuIGNvZGVzIGFuZCB0aGVpciBtZWFuaW5ncy4pICAqLworKworK2ludAorK3JlZ2NvbXAgKHJlZ2V4X3QgKnByZWcsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGludCBjZmxhZ3MpCisreworKyAgcmVnX2VycmNvZGVfdCByZXQ7CisrICByZWdfc3ludGF4X3Qgc3ludGF4CisrICAgID0gKGNmbGFncyAmIFJFR19FWFRFTkRFRCkgPworKyAgICAgIFJFX1NZTlRBWF9QT1NJWF9FWFRFTkRFRCA6IFJFX1NZTlRBWF9QT1NJWF9CQVNJQzsKKysKKysgIC8qIHJlZ2V4X2NvbXBpbGUgd2lsbCBhbGxvY2F0ZSB0aGUgc3BhY2UgZm9yIHRoZSBjb21waWxlZCBwYXR0ZXJuLiAgKi8KKysgIHByZWctPmJ1ZmZlciA9IDA7CisrICBwcmVnLT5hbGxvY2F0ZWQgPSAwOworKyAgcHJlZy0+dXNlZCA9IDA7CisrCisrICAvKiBUcnkgdG8gYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBmYXN0bWFwLiAgKi8KKysgIHByZWctPmZhc3RtYXAgPSAoY2hhciAqKSBtYWxsb2MgKDEgPDwgQllURVdJRFRIKTsKKysKKysgIGlmIChjZmxhZ3MgJiBSRUdfSUNBU0UpCisrICAgIHsKKysgICAgICBpbnQgaTsKKysKKysgICAgICBwcmVnLT50cmFuc2xhdGUKKysJPSAoUkVfVFJBTlNMQVRFX1RZUEUpIG1hbGxvYyAoQ0hBUl9TRVRfU0laRQorKwkJCQkgICAgICAqIHNpemVvZiAoKihSRV9UUkFOU0xBVEVfVFlQRSkwKSk7CisrICAgICAgaWYgKHByZWctPnRyYW5zbGF0ZSA9PSBOVUxMKQorKyAgICAgICAgcmV0dXJuIChpbnQpIFJFR19FU1BBQ0U7CisrCisrICAgICAgLyogTWFwIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIHRvIGNvcnJlc3BvbmRpbmcgbG93ZXJjYXNlIG9uZXMuICAqLworKyAgICAgIGZvciAoaSA9IDA7IGkgPCBDSEFSX1NFVF9TSVpFOyBpKyspCisrICAgICAgICBwcmVnLT50cmFuc2xhdGVbaV0gPSBJU1VQUEVSIChpKSA/IFRPTE9XRVIgKGkpIDogaTsKKysgICAgfQorKyAgZWxzZQorKyAgICBwcmVnLT50cmFuc2xhdGUgPSBOVUxMOworKworKyAgLyogSWYgUkVHX05FV0xJTkUgaXMgc2V0LCBuZXdsaW5lcyBhcmUgdHJlYXRlZCBkaWZmZXJlbnRseS4gICovCisrICBpZiAoY2ZsYWdzICYgUkVHX05FV0xJTkUpCisrICAgIHsgLyogUkVHX05FV0xJTkUgaW1wbGllcyBuZWl0aGVyIC4gbm9yIFteLi4uXSBtYXRjaCBuZXdsaW5lLiAgKi8KKysgICAgICBzeW50YXggJj0gflJFX0RPVF9ORVdMSU5FOworKyAgICAgIHN5bnRheCB8PSBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkU7CisrICAgICAgLyogSXQgYWxzbyBjaGFuZ2VzIHRoZSBtYXRjaGluZyBiZWhhdmlvci4gICovCisrICAgICAgcHJlZy0+bmV3bGluZV9hbmNob3IgPSAxOworKyAgICB9CisrICBlbHNlCisrICAgIHByZWctPm5ld2xpbmVfYW5jaG9yID0gMDsKKysKKysgIHByZWctPm5vX3N1YiA9ICEhKGNmbGFncyAmIFJFR19OT1NVQik7CisrCisrICAvKiBQT1NJWCBzYXlzIGEgbnVsbCBjaGFyYWN0ZXIgaW4gdGhlIHBhdHRlcm4gdGVybWluYXRlcyBpdCwgc28gd2UKKysgICAgIGNhbiB1c2Ugc3RybGVuIGhlcmUgaW4gY29tcGlsaW5nIHRoZSBwYXR0ZXJuLiAgKi8KKysjIGlmZGVmIE1CU19TVVBQT1JUCisrICBpZiAoTUJfQ1VSX01BWCAhPSAxKQorKyAgICByZXQgPSB3Y3NfcmVnZXhfY29tcGlsZSAocGF0dGVybiwgc3RybGVuIChwYXR0ZXJuKSwgc3ludGF4LCBwcmVnKTsKKysgIGVsc2UKKysjIGVuZGlmCisrICAgIHJldCA9IGJ5dGVfcmVnZXhfY29tcGlsZSAocGF0dGVybiwgc3RybGVuIChwYXR0ZXJuKSwgc3ludGF4LCBwcmVnKTsKKysKKysgIC8qIFBPU0lYIGRvZXNuJ3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhbiB1bm1hdGNoZWQgb3Blbi1ncm91cCBhbmQgYW4KKysgICAgIHVubWF0Y2hlZCBjbG9zZS1ncm91cDogYm90aCBhcmUgUkVHX0VQQVJFTi4gICovCisrICBpZiAocmV0ID09IFJFR19FUlBBUkVOKSByZXQgPSBSRUdfRVBBUkVOOworKworKyAgaWYgKHJldCA9PSBSRUdfTk9FUlJPUiAmJiBwcmVnLT5mYXN0bWFwKQorKyAgICB7CisrICAgICAgLyogQ29tcHV0ZSB0aGUgZmFzdG1hcCBub3csIHNpbmNlIHJlZ2V4ZWMgY2Fubm90IG1vZGlmeSB0aGUgcGF0dGVybgorKwkgYnVmZmVyLiAgKi8KKysgICAgICBpZiAocmVfY29tcGlsZV9mYXN0bWFwIChwcmVnKSA9PSAtMikKKysJeworKwkgIC8qIFNvbWUgZXJyb3Igb2NjdXJyZWQgd2hpbGUgY29tcHV0aW5nIHRoZSBmYXN0bWFwLCBqdXN0IGZvcmdldAorKwkgICAgIGFib3V0IGl0LiAgKi8KKysJICBmcmVlIChwcmVnLT5mYXN0bWFwKTsKKysJICBwcmVnLT5mYXN0bWFwID0gTlVMTDsKKysJfQorKyAgICB9CisrCisrICByZXR1cm4gKGludCkgcmV0OworK30KKysjaWZkZWYgX0xJQkMKKyt3ZWFrX2FsaWFzIChfX3JlZ2NvbXAsIHJlZ2NvbXApCisrI2VuZGlmCisrCisrCisrLyogcmVnZXhlYyBzZWFyY2hlcyBmb3IgYSBnaXZlbiBwYXR0ZXJuLCBzcGVjaWZpZWQgYnkgUFJFRywgaW4gdGhlCisrICAgc3RyaW5nIFNUUklORy4KKysKKysgICBJZiBOTUFUQ0ggaXMgemVybyBvciBSRUdfTk9TVUIgd2FzIHNldCBpbiB0aGUgY2ZsYWdzIGFyZ3VtZW50IHRvCisrICAgYHJlZ2NvbXAnLCB3ZSBpZ25vcmUgUE1BVENILiAgT3RoZXJ3aXNlLCB3ZSBhc3N1bWUgUE1BVENIIGhhcyBhdAorKyAgIGxlYXN0IE5NQVRDSCBlbGVtZW50cywgYW5kIHdlIHNldCB0aGVtIHRvIHRoZSBvZmZzZXRzIG9mIHRoZQorKyAgIGNvcnJlc3BvbmRpbmcgbWF0Y2hlZCBzdWJzdHJpbmdzLgorKworKyAgIEVGTEFHUyBzcGVjaWZpZXMgYGV4ZWN1dGlvbiBmbGFncycgd2hpY2ggYWZmZWN0IG1hdGNoaW5nOiBpZgorKyAgIFJFR19OT1RCT0wgaXMgc2V0LCB0aGVuIF4gZG9lcyBub3QgbWF0Y2ggYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKKysgICBzdHJpbmc7IGlmIFJFR19OT1RFT0wgaXMgc2V0LCB0aGVuICQgZG9lcyBub3QgbWF0Y2ggYXQgdGhlIGVuZC4KKysKKysgICBXZSByZXR1cm4gMCBpZiB3ZSBmaW5kIGEgbWF0Y2ggYW5kIFJFR19OT01BVENIIGlmIG5vdC4gICovCisrCisraW50CisrcmVnZXhlYyAoY29uc3QgcmVnZXhfdCAqcHJlZywgY29uc3QgY2hhciAqc3RyaW5nLCBzaXplX3Qgbm1hdGNoLAorKyAgICAgICAgIHJlZ21hdGNoX3QgcG1hdGNoW10sIGludCBlZmxhZ3MpCisreworKyAgaW50IHJldDsKKysgIHN0cnVjdCByZV9yZWdpc3RlcnMgcmVnczsKKysgIHJlZ2V4X3QgcHJpdmF0ZV9wcmVnOworKyAgaW50IGxlbiA9IHN0cmxlbiAoc3RyaW5nKTsKKysgIGJvb2xlYW4gd2FudF9yZWdfaW5mbyA9ICFwcmVnLT5ub19zdWIgJiYgbm1hdGNoID4gMDsKKysKKysgIHByaXZhdGVfcHJlZyA9ICpwcmVnOworKworKyAgcHJpdmF0ZV9wcmVnLm5vdF9ib2wgPSAhIShlZmxhZ3MgJiBSRUdfTk9UQk9MKTsKKysgIHByaXZhdGVfcHJlZy5ub3RfZW9sID0gISEoZWZsYWdzICYgUkVHX05PVEVPTCk7CisrCisrICAvKiBUaGUgdXNlciBoYXMgdG9sZCB1cyBleGFjdGx5IGhvdyBtYW55IHJlZ2lzdGVycyB0byByZXR1cm4KKysgICAgIGluZm9ybWF0aW9uIGFib3V0LCB2aWEgYG5tYXRjaCcuICBXZSBoYXZlIHRvIHBhc3MgdGhhdCBvbiB0byB0aGUKKysgICAgIG1hdGNoaW5nIHJvdXRpbmVzLiAgKi8KKysgIHByaXZhdGVfcHJlZy5yZWdzX2FsbG9jYXRlZCA9IFJFR1NfRklYRUQ7CisrCisrICBpZiAod2FudF9yZWdfaW5mbykKKysgICAgeworKyAgICAgIHJlZ3MubnVtX3JlZ3MgPSBubWF0Y2g7CisrICAgICAgcmVncy5zdGFydCA9IFRBTExPQyAobm1hdGNoICogMiwgcmVnb2ZmX3QpOworKyAgICAgIGlmIChyZWdzLnN0YXJ0ID09IE5VTEwpCisrICAgICAgICByZXR1cm4gKGludCkgUkVHX05PTUFUQ0g7CisrICAgICAgcmVncy5lbmQgPSByZWdzLnN0YXJ0ICsgbm1hdGNoOworKyAgICB9CisrCisrICAvKiBQZXJmb3JtIHRoZSBzZWFyY2hpbmcgb3BlcmF0aW9uLiAgKi8KKysgIHJldCA9IHJlX3NlYXJjaCAoJnByaXZhdGVfcHJlZywgc3RyaW5nLCBsZW4sCisrICAgICAgICAgICAgICAgICAgIC8qIHN0YXJ0OiAqLyAwLCAvKiByYW5nZTogKi8gbGVuLAorKyAgICAgICAgICAgICAgICAgICB3YW50X3JlZ19pbmZvID8gJnJlZ3MgOiAoc3RydWN0IHJlX3JlZ2lzdGVycyAqKSAwKTsKKysKKysgIC8qIENvcHkgdGhlIHJlZ2lzdGVyIGluZm9ybWF0aW9uIHRvIHRoZSBQT1NJWCBzdHJ1Y3R1cmUuICAqLworKyAgaWYgKHdhbnRfcmVnX2luZm8pCisrICAgIHsKKysgICAgICBpZiAocmV0ID49IDApCisrICAgICAgICB7CisrICAgICAgICAgIHVuc2lnbmVkIHI7CisrCisrICAgICAgICAgIGZvciAociA9IDA7IHIgPCBubWF0Y2g7IHIrKykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBwbWF0Y2hbcl0ucm1fc28gPSByZWdzLnN0YXJ0W3JdOworKyAgICAgICAgICAgICAgcG1hdGNoW3JdLnJtX2VvID0gcmVncy5lbmRbcl07CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgIC8qIElmIHdlIG5lZWRlZCB0aGUgdGVtcG9yYXJ5IHJlZ2lzdGVyIGluZm8sIGZyZWUgdGhlIHNwYWNlIG5vdy4gICovCisrICAgICAgZnJlZSAocmVncy5zdGFydCk7CisrICAgIH0KKysKKysgIC8qIFdlIHdhbnQgemVybyByZXR1cm4gdG8gbWVhbiBzdWNjZXNzLCB1bmxpa2UgYHJlX3NlYXJjaCcuICAqLworKyAgcmV0dXJuIHJldCA+PSAwID8gKGludCkgUkVHX05PRVJST1IgOiAoaW50KSBSRUdfTk9NQVRDSDsKKyt9CisrI2lmZGVmIF9MSUJDCisrLyogRUdMSUJDOiBUaGlzIGlzIGhhbmRsZWQgaW4gcmVnZXhlYy1jb21wYXQuYy4gICovCisrLyp3ZWFrX2FsaWFzIChfX3JlZ2V4ZWMsIHJlZ2V4ZWMpKi8KKysjaW5jbHVkZSAicmVnZXhlYy1jb21wYXQuYyIKKysjZW5kaWYKKysKKysKKysvKiBSZXR1cm5zIGEgbWVzc2FnZSBjb3JyZXNwb25kaW5nIHRvIGFuIGVycm9yIGNvZGUsIEVSUkNPREUsIHJldHVybmVkCisrICAgZnJvbSBlaXRoZXIgcmVnY29tcCBvciByZWdleGVjLiAgIFdlIGRvbid0IHVzZSBQUkVHIGhlcmUuICAqLworKworK3NpemVfdAorK3JlZ2Vycm9yIChpbnQgZXJyY29kZSwgY29uc3QgcmVnZXhfdCAqcHJlZyBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrICAgICAgICAgIGNoYXIgKmVycmJ1Ziwgc2l6ZV90IGVycmJ1Zl9zaXplKQorK3sKKysgIGNvbnN0IGNoYXIgKm1zZzsKKysgIHNpemVfdCBtc2dfc2l6ZTsKKysKKysgIGlmIChlcnJjb2RlIDwgMAorKyAgICAgIHx8IGVycmNvZGUgPj0gKGludCkgKHNpemVvZiAocmVfZXJyb3JfbXNnaWQpCisrCQkJICAgLyBzaXplb2YgKHJlX2Vycm9yX21zZ2lkWzBdKSkpCisrICAgIC8qIE9ubHkgZXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgc2hvdWxkIGJlIHBhc3NlZAorKyAgICAgICB0byB0aGlzIHJvdXRpbmUuICBJZiB3ZSBhcmUgZ2l2ZW4gYW55dGhpbmcgZWxzZSwgb3IgaWYgb3RoZXIgcmVnZXgKKysgICAgICAgY29kZSBnZW5lcmF0ZXMgYW4gaW52YWxpZCBlcnJvciBjb2RlLCB0aGVuIHRoZSBwcm9ncmFtIGhhcyBhIGJ1Zy4KKysgICAgICAgRHVtcCBjb3JlIHNvIHdlIGNhbiBmaXggaXQuICAqLworKyAgICBhYm9ydCAoKTsKKysKKysgIG1zZyA9IGdldHRleHQgKHJlX2Vycm9yX21zZ2lkW2VycmNvZGVdKTsKKysKKysgIG1zZ19zaXplID0gc3RybGVuIChtc2cpICsgMTsgLyogSW5jbHVkZXMgdGhlIG51bGwuICAqLworKworKyAgaWYgKGVycmJ1Zl9zaXplICE9IDApCisrICAgIHsKKysgICAgICBpZiAobXNnX3NpemUgPiBlcnJidWZfc2l6ZSkKKysgICAgICAgIHsKKysjaWYgZGVmaW5lZCBIQVZFX01FTVBDUFkgfHwgZGVmaW5lZCBfTElCQworKwkgICooKGNoYXIgKikgbWVtcGNweSAoZXJyYnVmLCBtc2csIGVycmJ1Zl9zaXplIC0gMSkpID0gJ1wwJzsKKysjZWxzZQorKyAgICAgICAgICBtZW1jcHkgKGVycmJ1ZiwgbXNnLCBlcnJidWZfc2l6ZSAtIDEpOworKyAgICAgICAgICBlcnJidWZbZXJyYnVmX3NpemUgLSAxXSA9IDA7CisrI2VuZGlmCisrICAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAgbWVtY3B5IChlcnJidWYsIG1zZywgbXNnX3NpemUpOworKyAgICB9CisrCisrICByZXR1cm4gbXNnX3NpemU7CisrfQorKyNpZmRlZiBfTElCQworK3dlYWtfYWxpYXMgKF9fcmVnZXJyb3IsIHJlZ2Vycm9yKQorKyNlbmRpZgorKworKworKy8qIEZyZWUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHNwYWNlIHVzZWQgYnkgUFJFRy4gICovCisrCisrdm9pZAorK3JlZ2ZyZWUgKHJlZ2V4X3QgKnByZWcpCisreworKyAgaWYgKHByZWctPmJ1ZmZlciAhPSBOVUxMKQorKyAgICBmcmVlIChwcmVnLT5idWZmZXIpOworKyAgcHJlZy0+YnVmZmVyID0gTlVMTDsKKysKKysgIHByZWctPmFsbG9jYXRlZCA9IDA7CisrICBwcmVnLT51c2VkID0gMDsKKysKKysgIGlmIChwcmVnLT5mYXN0bWFwICE9IE5VTEwpCisrICAgIGZyZWUgKHByZWctPmZhc3RtYXApOworKyAgcHJlZy0+ZmFzdG1hcCA9IE5VTEw7CisrICBwcmVnLT5mYXN0bWFwX2FjY3VyYXRlID0gMDsKKysKKysgIGlmIChwcmVnLT50cmFuc2xhdGUgIT0gTlVMTCkKKysgICAgZnJlZSAocHJlZy0+dHJhbnNsYXRlKTsKKysgIHByZWctPnRyYW5zbGF0ZSA9IE5VTEw7CisrfQorKyNpZmRlZiBfTElCQworK3dlYWtfYWxpYXMgKF9fcmVnZnJlZSwgcmVnZnJlZSkKKysjZW5kaWYKKysKKysjZW5kaWYgLyogbm90IGVtYWNzICAqLworKworKyNlbmRpZiAvKiBub3QgSU5TSURFX1JFQ1VSU0lPTiAqLworKworKwwKKysjdW5kZWYgU1RPUkVfTlVNQkVSCisrI3VuZGVmIFNUT1JFX05VTUJFUl9BTkRfSU5DUgorKyN1bmRlZiBFWFRSQUNUX05VTUJFUgorKyN1bmRlZiBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUgorKworKyN1bmRlZiBERUJVR19QUklOVF9DT01QSUxFRF9QQVRURVJOCisrI3VuZGVmIERFQlVHX1BSSU5UX0RPVUJMRV9TVFJJTkcKKysKKysjdW5kZWYgSU5JVF9GQUlMX1NUQUNLCisrI3VuZGVmIFJFU0VUX0ZBSUxfU1RBQ0sKKysjdW5kZWYgRE9VQkxFX0ZBSUxfU1RBQ0sKKysjdW5kZWYgUFVTSF9QQVRURVJOX09QCisrI3VuZGVmIFBVU0hfRkFJTFVSRV9QT0lOVEVSCisrI3VuZGVmIFBVU0hfRkFJTFVSRV9JTlQKKysjdW5kZWYgUFVTSF9GQUlMVVJFX0VMVAorKyN1bmRlZiBQT1BfRkFJTFVSRV9QT0lOVEVSCisrI3VuZGVmIFBPUF9GQUlMVVJFX0lOVAorKyN1bmRlZiBQT1BfRkFJTFVSRV9FTFQKKysjdW5kZWYgREVCVUdfUFVTSAorKyN1bmRlZiBERUJVR19QT1AKKysjdW5kZWYgUFVTSF9GQUlMVVJFX1BPSU5UCisrI3VuZGVmIFBPUF9GQUlMVVJFX1BPSU5UCisrCisrI3VuZGVmIFJFR19VTlNFVF9WQUxVRQorKyN1bmRlZiBSRUdfVU5TRVQKKysKKysjdW5kZWYgUEFURkVUQ0gKKysjdW5kZWYgUEFURkVUQ0hfUkFXCisrI3VuZGVmIFBBVFVORkVUQ0gKKysjdW5kZWYgVFJBTlNMQVRFCisrCisrI3VuZGVmIElOSVRfQlVGX1NJWkUKKysjdW5kZWYgR0VUX0JVRkZFUl9TUEFDRQorKyN1bmRlZiBCVUZfUFVTSAorKyN1bmRlZiBCVUZfUFVTSF8yCisrI3VuZGVmIEJVRl9QVVNIXzMKKysjdW5kZWYgU1RPUkVfSlVNUAorKyN1bmRlZiBTVE9SRV9KVU1QMgorKyN1bmRlZiBJTlNFUlRfSlVNUAorKyN1bmRlZiBJTlNFUlRfSlVNUDIKKysjdW5kZWYgRVhURU5EX0JVRkZFUgorKyN1bmRlZiBHRVRfVU5TSUdORURfTlVNQkVSCisrI3VuZGVmIEZSRUVfU1RBQ0tfUkVUVVJOCisrCisrIyB1bmRlZiBQT0lOVEVSX1RPX09GRlNFVAorKyMgdW5kZWYgTUFUQ0hJTkdfSU5fRlJTVF9TVFJJTkcKKysjIHVuZGVmIFBSRUZFVENICisrIyB1bmRlZiBBVF9TVFJJTkdTX0JFRworKyMgdW5kZWYgQVRfU1RSSU5HU19FTkQKKysjIHVuZGVmIFdPUkRDSEFSX1AKKysjIHVuZGVmIEZSRUVfVkFSCisrIyB1bmRlZiBGUkVFX1ZBUklBQkxFUworKyMgdW5kZWYgTk9fSElHSEVTVF9BQ1RJVkVfUkVHCisrIyB1bmRlZiBOT19MT1dFU1RfQUNUSVZFX1JFRworKworKyMgdW5kZWYgQ0hBUl9UCisrIyB1bmRlZiBVQ0hBUl9UCisrIyB1bmRlZiBDT01QSUxFRF9CVUZGRVJfVkFSCisrIyB1bmRlZiBPRkZTRVRfQUREUkVTU19TSVpFCisrIyB1bmRlZiBDSEFSX0NMQVNTX1NJWkUKKysjIHVuZGVmIFBSRUZJWAorKyMgdW5kZWYgQVJHX1BSRUZJWAorKyMgdW5kZWYgUFVUX0NIQVIKKysjIHVuZGVmIEJZVEUKKysjIHVuZGVmIFdDSEFSCisrCisrIyBkZWZpbmUgREVGSU5FRF9PTkNFCitkaWZmIC0tZ2l0IGEvcHdkL01ha2VmaWxlIGIvcHdkL01ha2VmaWxlCitpbmRleCA3ZjZkZTAzLi45MTZkNTQ2IDEwMDY0NAorLS0tIGEvcHdkL01ha2VmaWxlCisrKysgYi9wd2QvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBwd2QgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBwd2QKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK2RpZmYgLS1naXQgYS9yZXNvbHYvTWFrZWZpbGUgYi9yZXNvbHYvTWFrZWZpbGUKK2luZGV4IDFkY2I3NWYuLjJlNGI2MzAgMTAwNjQ0CistLS0gYS9yZXNvbHYvTWFrZWZpbGUKKysrKyBiL3Jlc29sdi9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIHJlc29sdiBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IHJlc29sdgorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTI3LDIxICsyOSwyMiBAQCBoZWFkZXJzCTo9IHJlc29sdi5oIFwKKyAJICAgYXJwYS9uYW1lc2VyLmggYXJwYS9uYW1lc2VyX2NvbXBhdC5oIFwKKyAJICAgc3lzL2JpdHlwZXMuaAorIAorLXJvdXRpbmVzIDo9IGhlcnJvciBpbmV0X2FkZHIgaW5ldF9udG9wIGluZXRfcHRvbiBuc2FwX2FkZHIgcmVzX2luaXQgXAorLQkgICAgcmVzX2hjb25mIHJlc19saWJjIHJlcy1zdGF0ZQorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSBcCisrCSs9IGhlcnJvciBpbmV0X2FkZHIgaW5ldF9udG9wIGluZXRfcHRvbiBuc2FwX2FkZHIgcmVzX2luaXQgXAorKwkgICByZXNfaGNvbmYgcmVzX2xpYmMgcmVzLXN0YXRlCisgCistdGVzdHMgPSB0c3QtYXRvbiB0c3QtbGVha3MgdHN0LWluZXRfbnRvcAorLXh0ZXN0cyA9IHRzdC1sZWFrczIKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gdHN0LWF0b24gdHN0LWxlYWtzIHRzdC1pbmV0X250b3AKKyt4dGVzdHMtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IHRzdC1sZWFrczIKKyAKKyBnZW5lcmF0ZSA6PSBtdHJhY2UtdHN0LWxlYWtzLm91dCB0c3QtbGVha3MubXRyYWNlIHRzdC1sZWFrczIubXRyYWNlCisgCistZXh0cmEtbGlicyA6PSBsaWJyZXNvbHYgbGlibnNzX2RucworK2V4dHJhLWxpYnMtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IGxpYnJlc29sdiBsaWJuc3NfZG5zCisgaWZlcSAoJChoYXZlLXRocmVhZC1saWJyYXJ5KSx5ZXMpCistZXh0cmEtbGlicyArPSBsaWJhbmwKKy1yb3V0aW5lcyArPSBnYWlfc2lncXVldWUKKytleHRyYS1saWJzLSQoT1BUSU9OX0VHTElCQ19JTkVUX0FOTCkgKz0gbGliYW5sCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IGdhaV9zaWdxdWV1ZQorIHRlc3RzICs9IHRzdC1yZXNfaGNvbmZfcmVvcmRlcgorIGVuZGlmCistZXh0cmEtbGlicy1vdGhlcnMgPSAkKGV4dHJhLWxpYnMpCisrZXh0cmEtbGlicy1vdGhlcnMteSArPSAkKGV4dHJhLWxpYnMteSkKKyBsaWJyZXNvbHYtcm91dGluZXMgOj0gZ2V0aG5hbWFkZHIgcmVzX2NvbXAgcmVzX2RlYnVnCVwKKyAJCSAgICAgIHJlc19kYXRhIHJlc19ta3F1ZXJ5IHJlc19xdWVyeSByZXNfc2VuZAkJXAorIAkJICAgICAgaW5ldF9uZXRfbnRvcCBpbmV0X25ldF9wdG9uIGluZXRfbmV0YSBiYXNlNjQJXAorQEAgLTYxLDcgKzY0LDcgQEAgcm91dGluZXMgICAgICAgICAgICAgICAgKz0gJChsaWJuc3NfZG5zLXJvdXRpbmVzKSAkKGxpYnJlc29sdi1yb3V0aW5lcykKKyBzdGF0aWMtb25seS1yb3V0aW5lcyAgICArPSAkKGxpYm5zc19kbnMtcm91dGluZXMpICQobGlicmVzb2x2LXJvdXRpbmVzKQorIGVuZGlmCisgCistaWZlcSAoeWVzeWVzLCQoYnVpbGQtc2hhcmVkKSQoaGF2ZS10aHJlYWQtbGlicmFyeSkpCisraWZlcSAoeWVzeWVzeSwkKGJ1aWxkLXNoYXJlZCkkKGhhdmUtdGhyZWFkLWxpYnJhcnkpJChPUFRJT05fRUdMSUJDX0lORVRfQU5MKSkKKyB0ZXN0czogJChvYmpwZngpZ2FfdGVzdAorIGVuZGlmCisgCitkaWZmIC0tZ2l0IGEvc3RkaW8tY29tbW9uL01ha2VmaWxlIGIvc3RkaW8tY29tbW9uL01ha2VmaWxlCitpbmRleCBkMGJmMGUxLi44NjU1ODAxIDEwMDY0NAorLS0tIGEvc3RkaW8tY29tbW9uL01ha2VmaWxlCisrKysgYi9zdGRpby1jb21tb24vTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJU3BlY2lmaWMgbWFrZWZpbGUgZm9yIHN0ZGlvLWNvbW1vbi4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBzdGRpby1jb21tb24KKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0zMCw3ICszMiw3IEBAIHJvdXRpbmVzCTo9CQkJCQkJCSAgICAgIFwKKyAJdmZwcmludGYgdnByaW50ZiBwcmludGZfZnAgcmVnLXByaW50ZiBwcmludGYtcHJzIHByaW50Zl9mcGhleAkgICAgICBcCisgCXJlZy1tb2RpZmllciByZWctdHlwZQkJCQkJCSAgICAgIFwKKyAJcHJpbnRmX3NpemUgZnByaW50ZiBwcmludGYgc25wcmludGYgc3ByaW50ZiBhc3ByaW50ZiBkcHJpbnRmCSAgICAgIFwKKy0JdmZ3cHJpbnRmIHZmc2NhbmYgdmZ3c2NhbmYJCQkJCSAgICAgIFwKKysJdmZzY2FuZgkJCQkJCQkJICAgICAgXAorIAlmc2NhbmYgc2NhbmYgc3NjYW5mCQkJCQkJICAgICAgXAorIAlwZXJyb3IgcHNpZ25hbAkJCQkJCQkgICAgICBcCisgCXRtcGZpbGUgdG1wZmlsZTY0IHRtcG5hbSB0bXBuYW1fciB0ZW1wbmFtIHRlbXBuYW1lCQkgICAgICBcCitAQCAtNDEsMjMgKzQzLDM2IEBAIHJvdXRpbmVzCTo9CQkJCQkJCSAgICAgIFwKKyAJaXNvYzk5X3Zzc2NhbmYJCQkJCQkJICAgICAgXAorIAlwc2lnaW5mbworIAorLWF1eAk6PSBlcnJsaXN0IHNpZ2xpc3QgcHJpbnRmLXBhcnNlbWIgcHJpbnRmLXBhcnNld2MgZnhwcmludGYKKysjIElkZWFsbHksIF9pdG93YSBhbmQgaXRvd2EtZGlnaXRzIHdvdWxkIGJlIGluIHRoaXMgb3B0aW9uIGdyb3VwIGFzCisrIyB3ZWxsLCBidXQgaXQgaXMgdXNlZCB1bmNvbmRpdGlvbmFsbHkgYnkgcHJpbnRmX2ZwIGFuZCBwcmludGZfZnBoZXgsCisrIyBhbmQgaXQgZGlkbid0IHNlZW0gc3RyYWlnaHRmb3J3YXJkIHRvIGRpc2VudGFuZ2xlIGl0LgorK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpIFwKKysJKz0gdmZ3cHJpbnRmIHZmd3NjYW5mCisrCisrYXV4CTo9IGVycmxpc3Qgc2lnbGlzdCBwcmludGYtcGFyc2VtYiBmeHByaW50ZgorK2F1eC0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSArPSBwcmludGYtcGFyc2V3YworIAorIHRlc3RzIDo9IHRzdHNjYW5mIHRlc3RfcmR3ciB0ZXN0LXBvcGVuIHRzdGdldGxuIHRlc3QtZnNlZWsgXAorIAkgdGVtcHRlc3QgdHN0LWZpbGVubyB0ZXN0LWZ3cml0ZSB0c3QtdW5nZXRjIHRzdC1mZXJyb3IgXAorIAkgeGJ1ZyBlcnJub2J1ZyBcCisgCSBidWcxIGJ1ZzIgYnVnMyBidWc0IGJ1ZzUgYnVnNiBidWc3IGJ1ZzggYnVnOSBidWcxMCBidWcxMSBidWcxMiBidWcxMyBcCistCSB0ZmZvcm1hdCB0aWZvcm1hdCB0bGxmb3JtYXQgdHN0ZGlvbWlzYyB0c3QtcHJpbnRmc3ogdHN0LXdjLXByaW50ZiBcCisrCSB0ZmZvcm1hdCB0aWZvcm1hdCB0bGxmb3JtYXQgdHN0ZGlvbWlzYyB0c3QtcHJpbnRmc3ogXAorIAkgc2NhbmYxIHNjYW5mMiBzY2FuZjMgc2NhbmY0IHNjYW5mNSBzY2FuZjcgc2NhbmY4IHNjYW5mOSBzY2FuZjEwIFwKKy0JIHNjYW5mMTEgc2NhbmYxMiB0c3QtdG1wbmFtIHRzdC1jb29raWUgdHN0LW9icHJpbnRmIHRzdC1zc2NhbmYgXAorLQkgdHN0LXN3cHJpbnRmIHRzdC1mc2VlayB0c3QtZm1lbW9wZW4gdGVzdC12ZnByaW50ZiB0c3QtZ2V0cyBcCistCSB0c3QtcGVycm9yIHRzdC1zcHJpbnRmIHRzdC1ybmRzZWVrIHRzdC1mZG9wZW4gdHN0LWZwaGV4IGJ1ZzE0IFwKKysJIHNjYW5mMTEgc2NhbmYxMiB0c3QtdG1wbmFtIHRzdC1jb29raWUgdHN0LW9icHJpbnRmIFwKKysJIHRzdC1mc2VlayB0c3QtZm1lbW9wZW4gdHN0LWdldHMgXAorKwkgdHN0LXNwcmludGYgdHN0LXJuZHNlZWsgdHN0LWZkb3BlbiB0c3QtZnBoZXggXAorIAkgdHN0LXBvcGVuIHRzdC11bmxvY2tlZGlvIHRzdC1mbWVtb3BlbjIgdHN0LXB1dC1lcnJvciB0c3QtZmdldHMgXAorLQkgdHN0LWZ3cml0ZSBidWcxNiBidWcxNyB0c3Qtc3dzY2FuZiB0c3Qtc3ByaW50ZjIgYnVnMTggYnVnMThhIFwKKy0JIGJ1ZzE5IGJ1ZzE5YSB0c3QtcG9wZW4yIHNjYW5mMTMgc2NhbmYxNCBzY2FuZjE1IGJ1ZzIwIGJ1ZzIxIGJ1ZzIyIFwKKy0JIHNjYW5mMTYgc2NhbmYxNyB0c3Qtc2V0dmJ1ZjEgdHN0LWdyb3VwaW5nIGJ1ZzIzIGJ1ZzI0IFwKKy0JIGJ1Zy12ZnByaW50Zi1uYXJncyB0c3QtbG9uZy1kYmwtZnBoZXggdHN0LWZwaGV4LXdpZGUgdHN0LXNwcmludGYzIFwKKysJIHRzdC1md3JpdGUgYnVnMTYgYnVnMTcgdHN0LXNwcmludGYyIGJ1ZzE4IFwKKysJIGJ1ZzE5IHRzdC1wb3BlbjIgc2NhbmYxNCBzY2FuZjE1IGJ1ZzIxIGJ1ZzIyIFwKKysJIHNjYW5mMTYgc2NhbmYxNyB0c3Qtc2V0dmJ1ZjEgYnVnMjMgYnVnMjQgXAorKwkgYnVnLXZmcHJpbnRmLW5hcmdzIHRzdC1zcHJpbnRmMyBcCisgCSBidWcyNSB0c3QtcHJpbnRmLXJvdW5kIGJ1ZzIzLTIgYnVnMjMtMyBidWcyMy00IGJ1ZzI2IHRzdC1mbWVtb3BlbjMKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpIFwKKysJICs9IHRzdC1zc2NhbmYgdHN0LXN3cHJpbnRmIHRlc3QtdmZwcmludGYgYnVnMTQgc2NhbmYxMyB0c3QtZ3JvdXBpbmcKKyt0ZXN0cy0kKE9QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPKSBcCisrCSArPSB0c3QtcGVycm9yIGJ1ZzE5YSBidWcyMCB0c3QtbG9uZy1kYmwtZnBoZXggdHN0LWZwaGV4LXdpZGUKKyt0ZXN0cy0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSBcCisrCSArPSBidWcxOGEgdHN0LXN3c2NhbmYgdHN0LXdjLXByaW50ZgorIAorIHRlc3Qtc3JjcyA9IHRzdC11bmJwdXRjIHRzdC1wcmludGYKKyAKK2RpZmYgLS1naXQgYS9zdGRpby1jb21tb24vX2kxOG5fbnVtYmVyLmggYi9zdGRpby1jb21tb24vX2kxOG5fbnVtYmVyLmgKK2luZGV4IDNjNzMwNDQuLmFjNjJiM2EgMTAwNjQ0CistLS0gYS9zdGRpby1jb21tb24vX2kxOG5fbnVtYmVyLmgKKysrKyBiL3N0ZGlvLWNvbW1vbi9faTE4bl9udW1iZXIuaAorQEAgLTE5LDEwICsxOSwxMyBAQAorICNpbmNsdWRlIDxzdGRib29sLmg+CisgI2luY2x1ZGUgPHdjaGFyLmg+CisgI2luY2x1ZGUgPHdjdHlwZS5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpbmNsdWRlICIuLi9sb2NhbGUvb3V0ZGlnaXRzLmgiCisgI2luY2x1ZGUgIi4uL2xvY2FsZS9vdXRkaWdpdHN3Yy5oIgorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysKKyBzdGF0aWMgQ0hBUl9UICoKKyBfaTE4bl9udW1iZXJfcmV3cml0ZSAoQ0hBUl9UICp3LCBDSEFSX1QgKnJlYXJfcHRyLCBDSEFSX1QgKmVuZCkKKyB7CitAQCAtMTE1LDMgKzExOCwxMyBAQCBfaTE4bl9udW1iZXJfcmV3cml0ZSAoQ0hBUl9UICp3LCBDSEFSX1QgKnJlYXJfcHRyLCBDSEFSX1QgKmVuZCkKKyAKKyAgIHJldHVybiB3OworIH0KKysKKysjZWxzZQorKworK3N0YXRpYyBDSEFSX1QgKgorK19pMThuX251bWJlcl9yZXdyaXRlIChDSEFSX1QgKncsIENIQVJfVCAqcmVhcl9wdHIsIENIQVJfVCAqZW5kKQorK3sKKysgIHJldHVybiB3OworK30KKysKKysjZW5kaWYKK2RpZmYgLS1naXQgYS9zdGRpby1jb21tb24vZnhwcmludGYuYyBiL3N0ZGlvLWNvbW1vbi9meHByaW50Zi5jCitpbmRleCA3YjJlYjk0Li44NDc2MDc2IDEwMDY0NAorLS0tIGEvc3RkaW8tY29tbW9uL2Z4cHJpbnRmLmMKKysrKyBiL3N0ZGlvLWNvbW1vbi9meHByaW50Zi5jCitAQCAtMjMsNiArMjMsNyBAQAorICNpbmNsdWRlIDx3Y2hhci5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8bGliaW9QLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgCisgaW50CitAQCAtMzcsNiArMzgsNyBAQCBfX2Z4cHJpbnRmIChGSUxFICpmcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCisgICBpbnQgcmVzOworICAgaWYgKF9JT19md2lkZSAoZnAsIDApID4gMCkKKyAgICAgeworKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoZm10KSArIDE7CisgICAgICAgd2NoYXJfdCB3Zm10W2xlbl07CisgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW47ICsraSkKK0BAIC00NSw2ICs0Nyw5IEBAIF9fZnhwcmludGYgKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKyAJICB3Zm10W2ldID0gZm10W2ldOworIAl9CisgICAgICAgcmVzID0gX192ZndwcmludGYgKGZwLCB3Zm10LCBhcCk7CisrI2Vsc2UKKysgICAgICBhYm9ydCgpOworKyNlbmRpZgorICAgICB9CisgICBlbHNlCisgICAgIHJlcyA9IF9JT192ZnByaW50ZiAoZnAsIGZtdCwgYXApOworZGlmZiAtLWdpdCBhL3N0ZGlvLWNvbW1vbi9wcmludGZfZnAuYyBiL3N0ZGlvLWNvbW1vbi9wcmludGZfZnAuYworaW5kZXggMzAyM2IyMC4uYmQwZGY2NiAxMDA2NDQKKy0tLSBhL3N0ZGlvLWNvbW1vbi9wcmludGZfZnAuYworKysrIGIvc3RkaW8tY29tbW9uL3ByaW50Zl9mcC5jCitAQCAtMzksNiArMzksNyBAQAorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHdjaGFyLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyAjaW5jbHVkZSA8cm91bmRpbmctbW9kZS5oPgorIAorQEAgLTE0Miw2ICsxNDMsMTAgQEAgZXh0ZXJuIG1wX3NpemVfdCBfX21wbl9leHRyYWN0X2xvbmdfZG91YmxlIChtcF9wdHIgcmVzX3B0ciwgbXBfc2l6ZV90IHNpemUsCisgZXh0ZXJuIHVuc2lnbmVkIGludCBfX2d1ZXNzX2dyb3VwaW5nICh1bnNpZ25lZCBpbnQgaW50ZGlnX21heCwKKyAJCQkJICAgICAgY29uc3QgY2hhciAqZ3JvdXBpbmcpOworIAorKy8qIElkZWFsbHksIHdoZW4gT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSBpcyBkaXNhYmxlZCwgdGhpcyBzaG91bGQgZG8KKysgICBhbGwgaXRzIHdvcmsgaW4gb3JkaW5hcnkgY2hhcmFjdGVycywgcmF0aGVyIHRoYW4gZG9pbmcgaXQgaW4gd2lkZQorKyAgIGNoYXJhY3RlcnMgYW5kIHRoZW4gY29udmVydGluZyBhdCB0aGUgZW5kLiAgQnV0IHRoYXQgaXMgYSBjaGFsbGVuZ2UKKysgICBmb3IgYW5vdGhlciBkYXkuICAqLworIAorIHN0YXRpYyB3Y2hhcl90ICpncm91cF9udW1iZXIgKHdjaGFyX3QgKmJ1Ziwgd2NoYXJfdCAqYnVmZW5kLAorIAkJCSAgICAgIHVuc2lnbmVkIGludCBpbnRkaWdfbm8sIGNvbnN0IGNoYXIgKmdyb3VwaW5nLAorQEAgLTI1MSw3ICsyNTYsMTQgQEAgX19fcHJpbnRmX2ZwIChGSUxFICpmcCwKKyAgIG1wX2xpbWJfdCBjeTsKKyAKKyAgIC8qIE5vbnplcm8gaWYgdGhpcyBpcyBvdXRwdXQgb24gYSB3aWRlIGNoYXJhY3RlciBzdHJlYW0uICAqLworKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisgICBpbnQgd2lkZSA9IGluZm8tPndpZGU7CisrI2Vsc2UKKysgIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBvbiBhIHdpZGUtb3JpZW50ZWQgc3RyZWFtIHdoZW4KKysgICAgIE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSIGlzIGRpc2FibGVkLCBidXQgdGhlIGNvbXBpbGVyIGNhbid0CisrICAgICBiZSB0cnVzdGVkIHRvIGZpZ3VyZSB0aGF0IG91dC4gICovCisrICBjb25zdCBpbnQgd2lkZSA9IDA7CisrI2VuZGlmCisgCisgICAvKiBCdWZmZXIgaW4gd2hpY2ggd2UgcHJvZHVjZSB0aGUgb3V0cHV0LiAgKi8KKyAgIHdjaGFyX3QgKndidWZmZXIgPSBOVUxMOworQEAgLTI2MSw2ICsyNzMsNyBAQCBfX19wcmludGZfZnAgKEZJTEUgKmZwLAorICAgcC5leHBzaWduID0gMDsKKyAKKyAgIC8qIEZpZ3VyZSBvdXQgdGhlIGRlY2ltYWwgcG9pbnQgY2hhcmFjdGVyLiAgKi8KKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBpZiAoaW5mby0+ZXh0cmEgPT0gMCkKKyAgICAgeworICAgICAgIGRlY2ltYWwgPSBfTkxfQ1VSUkVOVCAoTENfTlVNRVJJQywgREVDSU1BTF9QT0lOVCk7CitAQCAtMjgwLDcgKzI5MywxMyBAQCBfX19wcmludGZfZnAgKEZJTEUgKmZwLAorICAgLyogVGhlIGRlY2ltYWwgcG9pbnQgY2hhcmFjdGVyIG11c3Qgbm90IGJlIHplcm8uICAqLworICAgYXNzZXJ0ICgqZGVjaW1hbCAhPSAnXDAnKTsKKyAgIGFzc2VydCAoZGVjaW1hbHdjICE9IEwnXDAnKTsKKysjZWxzZQorKyAgLyogSGFyZC1jb2RlIHZhbHVlcyBmcm9tICdDJyBsb2NhbGUuICAqLworKyAgZGVjaW1hbCA9ICIuIjsKKysgIGRlY2ltYWx3YyA9IEwnLic7CisrI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgaWYgKGluZm8tPmdyb3VwKQorICAgICB7CisgICAgICAgaWYgKGluZm8tPmV4dHJhID09IDApCitAQCAtMzI0LDYgKzM0Myw5IEBAIF9fX3ByaW50Zl9mcCAoRklMRSAqZnAsCisgICAgIH0KKyAgIGVsc2UKKyAgICAgZ3JvdXBpbmcgPSBOVUxMOworKyNlbHNlCisrICBncm91cGluZyA9IE5VTEw7CisrI2VuZGlmCisgCisgICAvKiBGZXRjaCB0aGUgYXJndW1lbnQgdmFsdWUuCSovCisgI2lmbmRlZiBfX05PX0xPTkdfRE9VQkxFX01BVEgKK2RpZmYgLS1naXQgYS9zdGRpby1jb21tb24vcHJpbnRmX2ZwaGV4LmMgYi9zdGRpby1jb21tb24vcHJpbnRmX2ZwaGV4LmMKK2luZGV4IDZjM2I1ZTkuLmY2NjBjZTAgMTAwNjQ0CistLS0gYS9zdGRpby1jb21tb24vcHJpbnRmX2ZwaGV4LmMKKysrKyBiL3N0ZGlvLWNvbW1vbi9wcmludGZfZnBoZXguYworQEAgLTI4LDYgKzI4LDcgQEAKKyAjaW5jbHVkZSA8X2l0b2EuaD4KKyAjaW5jbHVkZSA8X2l0b3dhLmg+CisgI2luY2x1ZGUgPGxvY2FsZS9sb2NhbGVpbmZvLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyAjaW5jbHVkZSA8cm91bmRpbmctbW9kZS5oPgorIAorQEAgLTEzOSwxMCArMTQwLDE4IEBAIF9fcHJpbnRmX2ZwaGV4IChGSUxFICpmcCwKKyAgIGludCBkb25lID0gMDsKKyAKKyAgIC8qIE5vbnplcm8gaWYgdGhpcyBpcyBvdXRwdXQgb24gYSB3aWRlIGNoYXJhY3RlciBzdHJlYW0uICAqLworKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisgICBpbnQgd2lkZSA9IGluZm8tPndpZGU7CisrI2Vsc2UKKysgIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBvbiBhIHdpZGUtb3JpZW50ZWQgc3RyZWFtIHdoZW4KKysgICAgIE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSIGlzIGRpc2FibGVkLCBidXQgdGhlIGNvbXBpbGVyIGNhbid0CisrICAgICBiZSB0cnVzdGVkIHRvIGZpZ3VyZSB0aGF0IG91dC4gICovCisrICBjb25zdCBpbnQgd2lkZSA9IDA7CisrI2VuZGlmCisgCisgCisgICAvKiBGaWd1cmUgb3V0IHRoZSBkZWNpbWFsIHBvaW50IGNoYXJhY3Rlci4gICovCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgaWYgKGluZm8tPmV4dHJhID09IDApCisgICAgIHsKKyAgICAgICBkZWNpbWFsID0gX05MX0NVUlJFTlQgKExDX05VTUVSSUMsIERFQ0lNQUxfUE9JTlQpOworQEAgLTE1Niw2ICsxNjUsMTAgQEAgX19wcmludGZfZnBoZXggKEZJTEUgKmZwLAorICAgICB9CisgICAvKiBUaGUgZGVjaW1hbCBwb2ludCBjaGFyYWN0ZXIgbXVzdCBuZXZlciBiZSB6ZXJvLiAgKi8KKyAgIGFzc2VydCAoKmRlY2ltYWwgIT0gJ1wwJyAmJiBkZWNpbWFsd2MgIT0gTCdcMCcpOworKyNlbHNlCisrICBkZWNpbWFsID0gIi4iOworKyAgZGVjaW1hbHdjID0gTCcuJzsKKysjZW5kaWYKKyAKKyAKKyAgIC8qIEZldGNoIHRoZSBhcmd1bWVudCB2YWx1ZS4JKi8KK2RpZmYgLS1naXQgYS9zdGRpby1jb21tb24vcHJpbnRmX3NpemUuYyBiL3N0ZGlvLWNvbW1vbi9wcmludGZfc2l6ZS5jCitpbmRleCA3ZGNkNThlLi42ZmI3NDkxIDEwMDY0NAorLS0tIGEvc3RkaW8tY29tbW9uL3ByaW50Zl9zaXplLmMKKysrKyBiL3N0ZGlvLWNvbW1vbi9wcmludGZfc2l6ZS5jCitAQCAtMjMsNiArMjMsNyBAQAorICNpbmNsdWRlIDxtYXRoLmg+CisgI2luY2x1ZGUgPHByaW50Zi5oPgorICNpbmNsdWRlIDxsaWJpb1AuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAKKyAvKiBUaGlzIGRlZmluZXMgbWFrZSBpdCBwb3NzaWJsZSB0byB1c2UgdGhlIHNhbWUgY29kZSBmb3IgR05VIEMgbGlicmFyeSBhbmQKK0BAIC0xMTYsNyArMTE3LDE0IEBAIF9fcHJpbnRmX3NpemUgKEZJTEUgKmZwLCBjb25zdCBzdHJ1Y3QgcHJpbnRmX2luZm8gKmluZm8sCisgCisgICBzdHJ1Y3QgcHJpbnRmX2luZm8gZnBfaW5mbzsKKyAgIGludCBkb25lID0gMDsKKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorICAgaW50IHdpZGUgPSBpbmZvLT53aWRlOworKyNlbHNlCisrICAvKiBUaGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgb24gYSB3aWRlLW9yaWVudGVkIHN0cmVhbSB3aGVuCisrICAgICBPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiBpcyBkaXNhYmxlZCwgYnV0IHRoZSBjb21waWxlciBjYW4ndAorKyAgICAgYmUgdHJ1c3RlZCB0byBmaWd1cmUgdGhhdCBvdXQuICAqLworKyAgY29uc3QgaW50IHdpZGUgPSAwOworKyNlbmRpZgorICAgaW50IHJlczsKKyAKKyAgIC8qIEZldGNoIHRoZSBhcmd1bWVudCB2YWx1ZS4JKi8KK2RpZmYgLS1naXQgYS9zdGRpby1jb21tb24vc2NhbmYxNC5jIGIvc3RkaW8tY29tbW9uL3NjYW5mMTQuYworaW5kZXggY2ZmY2NiMC4uNmNjMjYwYSAxMDA2NDQKKy0tLSBhL3N0ZGlvLWNvbW1vbi9zY2FuZjE0LmMKKysrKyBiL3N0ZGlvLWNvbW1vbi9zY2FuZjE0LmMKK0BAIC0zLDYgKzMsNyBAQAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8d2NoYXIuaD4KKyAjaW5jbHVkZSA8bGliYy1pbnRlcm5hbC5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNkZWZpbmUgRkFJTCgpIFwKKyAgIGRvIHsJCQkJCQkJXAorQEAgLTQ4LDYgKzQ5LDcgQEAgbWFpbiAodm9pZCkKKyAgIC8qIFNlZSBleHBsYW5hdGlvbiBhYm92ZS4gICovCisgICBESUFHX1BVU0hfTkVFRFNfQ09NTUVOVDsKKyAgIERJQUdfSUdOT1JFX05FRURTX0NPTU1FTlQgKDQuOSwgIi1XZm9ybWF0Iik7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgaWYgKHNzY2FuZiAoIiAzLjI1UyB4IiwgIiU0YVMlM2MiLCAmbHNwLCBjKSAhPSAyKQorICAgICBGQUlMICgpOworICAgZWxzZQorQEAgLTU3LDYgKzU5LDcgQEAgbWFpbiAodm9pZCkKKyAgICAgICBtZW1zZXQgKGxzcCwgJ3gnLCBzaXplb2YgTCIzLjI1Iik7CisgICAgICAgZnJlZSAobHNwKTsKKyAgICAgfQorKyNlbmRpZgorICAgaWYgKHNzY2FuZiAoIjQuMjVbMC05Ll0geCIsICIlYVswLTkuXSU4YyIsICZzcCwgYykgIT0gMikKKyAgICAgRkFJTCAoKTsKKyAgIGVsc2UKK2RpZmYgLS1naXQgYS9zdGRpby1jb21tb24vdHN0LXBvcGVuLmMgYi9zdGRpby1jb21tb24vdHN0LXBvcGVuLmMKK2luZGV4IDVkZWYyN2YuLjdjOWI5MWUgMTAwNjQ0CistLS0gYS9zdGRpby1jb21tb24vdHN0LXBvcGVuLmMKKysrKyBiL3N0ZGlvLWNvbW1vbi90c3QtcG9wZW4uYworQEAgLTE5LDYgKzE5LDcgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHdjaGFyLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgc3RhdGljIGludAorIGRvX3Rlc3QgKHZvaWQpCitAQCAtMzQsMTIgKzM1LDE0IEBAIGRvX3Rlc3QgKHZvaWQpCisgICAgICAgcmV0dXJuIDE7CisgICAgIH0KKyAKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworICAgLyogUE9TSVggc2F5cyB0aGF0IHBpcGUgc3RyZWFtcyBhcmUgYnl0ZS1vcmllbnRlZC4gICovCisgICBpZiAoZndpZGUgKGYsIDApID49IDApCisgICAgIHsKKyAgICAgICBwdXRzICgicG9wZW4gZGlkIG5vdCByZXR1cm4gYnl0ZS1vcmllbnRlZCBzdHJlYW0iKTsKKyAgICAgICByZXN1bHQgPSAxOworICAgICB9CisrI2VuZGlmCisgCisgICBpZiAoZ2V0bGluZSAoJmxpbmUsICZsZW4sIGYpICE9IDUpCisgICAgIHsKK2RpZmYgLS1naXQgYS9zdGRpby1jb21tb24vdHN0LXNwcmludGYuYyBiL3N0ZGlvLWNvbW1vbi90c3Qtc3ByaW50Zi5jCitpbmRleCBkNTI4NGI5Li5mMWUzZDIxIDEwMDY0NAorLS0tIGEvc3RkaW8tY29tbW9uL3RzdC1zcHJpbnRmLmMKKysrKyBiL3N0ZGlvLWNvbW1vbi90c3Qtc3ByaW50Zi5jCitAQCAtMyw3ICszLDcgQEAKKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxsaWJjLWludGVybmFsLmg+CistCisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgc3RhdGljIGludAorIGRvX3Rlc3QgKHZvaWQpCitAQCAtMTEsMTIgKzExLDE0IEBAIGRvX3Rlc3QgKHZvaWQpCisgICBjaGFyIGJ1ZlsxMDBdOworICAgaW50IHJlc3VsdCA9IDA7CisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKyAgIGlmIChzcHJpbnRmIChidWYsICIlLjBscyIsIEwiZm9vIikgIT0gMAorICAgICAgIHx8IHN0cmxlbiAoYnVmKSAhPSAwKQorICAgICB7CisgICAgICAgcHV0cyAoInNwcmludGYgKGJ1ZiwgXCIlLjBsc1wiLCBMXCJmb29cIikgcHJvZHVjZWQgc29tZSBvdXRwdXQiKTsKKyAgICAgICByZXN1bHQgPSAxOworICAgICB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgKi8KKyAKKyAjZGVmaW5lIFNJWkUgKDEwMjQqNzAwMDApCisgI2RlZmluZSBTVFIoeCkgI3gKK2RpZmYgLS1naXQgYS9zdGRpby1jb21tb24vdHN0ZGlvbWlzYy5jIGIvc3RkaW8tY29tbW9uL3RzdGRpb21pc2MuYworaW5kZXggNTU0OGE3MS4uMzFlZDAyNCAxMDA2NDQKKy0tLSBhL3N0ZGlvLWNvbW1vbi90c3RkaW9taXNjLmMKKysrKyBiL3N0ZGlvLWNvbW1vbi90c3RkaW9taXNjLmMKK0BAIC00LDYgKzQsNyBAQAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8d2NoYXIuaD4KKyAjaW5jbHVkZSA8bGliYy1pbnRlcm5hbC5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIHN0YXRpYyBpbnQKKyB0MSAodm9pZCkKK0BAIC0xMzQsNiArMTM1LDcgQEAgRiAodm9pZCkKKyAgIHByaW50ZiAoImV4cGVjdGVkIFwiLWluZiAtSU5GIC1pbmYgLUlORiAtaW5mIC1JTkYgLWluZiAtSU5GXCIsIGdvdCBcIiVzXCJcbiIsCisgCSAgYnVmKTsKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorICAgc3dwcmludGYgKHdidWYsIHNpemVvZiB3YnVmIC8gc2l6ZW9mICh3YnVmWzBdKSwgTCIlYSAlQSAlZSAlRSAlZiAlRiAlZyAlRyIsCisgCSAgICBxbmFudmFsLCBxbmFudmFsLCBxbmFudmFsLCBxbmFudmFsLAorIAkgICAgcW5hbnZhbCwgcW5hbnZhbCwgcW5hbnZhbCwgcW5hbnZhbCk7CitAQCAtMTcxLDYgKzE3Myw3IEBAIEYgKHZvaWQpCisgICByZXN1bHQgfD0gd2NzY21wICh3YnVmLCBMIi1pbmYgLUlORiAtaW5mIC1JTkYgLWluZiAtSU5GIC1pbmYgLUlORiIpICE9IDA7CisgICBwcmludGYgKCJleHBlY3RlZCBMXCItaW5mIC1JTkYgLWluZiAtSU5GIC1pbmYgLUlORiAtaW5mIC1JTkZcIiwgZ290IExcIiVTXCJcbiIsCisgCSAgd2J1Zik7CisrI2VuZGlmIC8qIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgKi8KKyAKKyAgIGxxbmFudmFsID0gTkFOOworIAorQEAgLTIxNSw2ICsyMTgsNyBAQCBGICh2b2lkKQorICAgcHJpbnRmICgiZXhwZWN0ZWQgXCItaW5mIC1JTkYgLWluZiAtSU5GIC1pbmYgLUlORiAtaW5mIC1JTkZcIiwgZ290IFwiJXNcIlxuIiwKKyAJICBidWYpOworIAorKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisgICBzd3ByaW50ZiAod2J1Ziwgc2l6ZW9mIHdidWYgLyBzaXplb2YgKHdidWZbMF0pLAorIAkgICAgTCIlTGEgJUxBICVMZSAlTEUgJUxmICVMRiAlTGcgJUxHIiwKKyAJICAgIGxxbmFudmFsLCBscW5hbnZhbCwgbHFuYW52YWwsIGxxbmFudmFsLAorQEAgLTI1OSw2ICsyNjMsNyBAQCBGICh2b2lkKQorICAgcmVzdWx0IHw9IHdjc2NtcCAod2J1ZiwgTCItaW5mIC1JTkYgLWluZiAtSU5GIC1pbmYgLUlORiAtaW5mIC1JTkYiKSAhPSAwOworICAgcHJpbnRmICgiZXhwZWN0ZWQgTFwiLWluZiAtSU5GIC1pbmYgLUlORiAtaW5mIC1JTkYgLWluZiAtSU5GXCIsIGdvdCBMXCIlU1wiXG4iLAorIAkgIHdidWYpOworKyNlbmRpZiAvKiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSICovCisgCisgICByZXR1cm4gcmVzdWx0OworIH0KK2RpZmYgLS1naXQgYS9zdGRpby1jb21tb24vdmZwcmludGYuYyBiL3N0ZGlvLWNvbW1vbi92ZnByaW50Zi5jCitpbmRleCAwNTkyZTcwLi5mMjFkOTczIDEwMDY0NAorLS0tIGEvc3RkaW8tY29tbW9uL3ZmcHJpbnRmLmMKKysrKyBiL3N0ZGlvLWNvbW1vbi92ZnByaW50Zi5jCitAQCAtMjksNiArMjksNyBAQAorICNpbmNsdWRlIDxfaXRvYS5oPgorICNpbmNsdWRlIDxsb2NhbGUvbG9jYWxlaW5mby5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIC8qIFRoaXMgY29kZSBpcyBzaGFyZWQgYmV0d2VlbiB0aGUgc3RhbmRhcmQgc3RkaW8gaW1wbGVtZW50YXRpb24gZm91bmQKKyAgICBpbiBHTlUgQyBsaWJyYXJ5IGFuZCB0aGUgbGliaW8gaW1wbGVtZW50YXRpb24gb3JpZ2luYWxseSBmb3VuZCBpbgorQEAgLTE0MCw2ICsxNDEsMTggQEAgdHlwZWRlZiB3Y2hhcl90IFRIT1VTQU5EU19TRVBfVDsKKyAjIGRlZmluZSBFT0YgV0VPRgorICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisrIyBkZWZpbmUgTVVMVElCWVRFX1NVUFBPUlQgKDEpCisrI2Vsc2UKKysjIGRlZmluZSBNVUxUSUJZVEVfU1VQUE9SVCAoMCkKKysjZW5kaWYKKysKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrIyBkZWZpbmUgTE9DQUxFX1NVUFBPUlQgKDEpCisrI2Vsc2UKKysjIGRlZmluZSBMT0NBTEVfU1VQUE9SVCAoMCkKKysjZW5kaWYKKysKKyAjaW5jbHVkZSAiX2kxOG5fbnVtYmVyLmgiCisgCisgLyogSW5jbHVkZSB0aGUgc2hhcmVkIGNvZGUgZm9yIHBhcnNpbmcgdGhlIGZvcm1hdCBzdHJpbmcuICAqLworQEAgLTEwNjUsOCArMTA3OCwxMSBAQCBzdGF0aWMgY29uc3QgdWludDhfdCBqdW1wX3RhYmxlW10gPQorICMgZGVmaW5lIHByb2Nlc3Nfc3RyaW5nX2FyZyhmc3BlYykgXAorICAgICBMQUJFTCAoZm9ybV9jaGFyYWN0ZXIpOgkJCQkJCSAgICAgIFwKKyAgICAgICAvKiBDaGFyYWN0ZXIuICAqLwkJCQkJCQkgICAgICBcCistICAgICAgaWYgKGlzX2xvbmcpCQkJCQkJCSAgICAgIFwKKy0JZ290byBMQUJFTCAoZm9ybV93Y2hhcmFjdGVyKTsJCQkJCSAgICAgIFwKKysgICAgICBpZiAoaXNfbG9uZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBhc3NlcnQgKE1VTFRJQllURV9TVVBQT1JUKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgZ290byBMQUJFTCAoZm9ybV93Y2hhcmFjdGVyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIC0td2lkdGg7CS8qIEFjY291bnQgZm9yIHRoZSBjaGFyYWN0ZXIgaXRzZWxmLiAgKi8JCSAgICAgIFwKKyAgICAgICBpZiAoIWxlZnQpCQkJCQkJCSAgICAgIFwKKyAJUEFEICgnICcpOwkJCQkJCQkgICAgICBcCitAQCAtMTA3OSw2ICsxMDk1LDcgQEAgc3RhdGljIGNvbnN0IHVpbnQ4X3QganVtcF90YWJsZVtdID0KKyAgICAgICBicmVhazsJCQkJCQkJCSAgICAgIFwKKyAJCQkJCQkJCQkgICAgICBcCisgICAgIExBQkVMIChmb3JtX3djaGFyYWN0ZXIpOgkJCQkJCSAgICAgIFwKKysgICAgICBhc3NlcnQgKE1VTFRJQllURV9TVVBQT1JUKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgewkJCQkJCQkJCSAgICAgIFwKKyAJLyogV2lkZSBjaGFyYWN0ZXIuICAqLwkJCQkJCSAgICAgIFwKKyAJY2hhciBidWZbTUJfQ1VSX01BWF07CQkJCQkJICAgICAgXAorQEAgLTExNDUsNiArMTE2Miw3IEBAIHN0YXRpYyBjb25zdCB1aW50OF90IGp1bXBfdGFibGVbXSA9CisgCSAgfQkJCQkJCQkJICAgICAgXAorIAllbHNlCQkJCQkJCQkgICAgICBcCisgCSAgewkJCQkJCQkJICAgICAgXAorKyAgICAgICAgICAgIGFzc2VydCAoTVVMVElCWVRFX1NVUFBPUlQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJICAgIGNvbnN0IHdjaGFyX3QgKnMyID0gKGNvbnN0IHdjaGFyX3QgKikgc3RyaW5nOwkJICAgICAgXAorIAkgICAgbWJzdGF0ZV90IG1ic3RhdGU7CQkJCQkJICAgICAgXAorIAkJCQkJCQkJCSAgICAgIFwKK0BAIC0xMzk5LDcgKzE0MTcsOSBAQCB2ZnByaW50ZiAoRklMRSAqcywgY29uc3QgQ0hBUl9UICpmb3JtYXQsIHZhX2xpc3QgYXApCisgICAgIExBQkVMIChmbGFnX3F1b3RlKToKKyAgICAgICBncm91cCA9IDE7CisgCistICAgICAgaWYgKGdyb3VwaW5nID09IChjb25zdCBjaGFyICopIC0xKQorKyAgICAgIGlmICghIExPQ0FMRV9TVVBQT1JUKQorKyAgICAgICAgZ3JvdXBpbmcgPSBOVUxMOworKyAgICAgIGVsc2UgaWYgKGdyb3VwaW5nID09IChjb25zdCBjaGFyICopIC0xKQorIAl7CisgI2lmZGVmIENPTVBJTEVfV1BSSU5URgorIAkgIHRob3VzYW5kc19zZXAgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19OVU1FUklDLAorQEAgLTE3MjgsOCArMTc0OCw5IEBAIHByaW50Zl9wb3NpdGlvbmFsIChfSU9fRklMRSAqcywgY29uc3QgQ0hBUl9UICpmb3JtYXQsIGludCByZWFkb25seV9mb3JtYXQsCisgICBzaXplX3QgY250OworIAorICAgQ0hBUl9UICp3b3Jrc3RhcnQgPSBOVUxMOworLQorLSAgaWYgKGdyb3VwaW5nID09IChjb25zdCBjaGFyICopIC0xKQorKyAgaWYgKCEgTE9DQUxFX1NVUFBPUlQpCisrICAgIGdyb3VwaW5nID0gTlVMTDsKKysgIGVsc2UgaWYgKGdyb3VwaW5nID09IChjb25zdCBjaGFyICopIC0xKQorICAgICB7CisgI2lmZGVmIENPTVBJTEVfV1BSSU5URgorICAgICAgIHRob3VzYW5kc19zZXAgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19OVU1FUklDLAorZGlmZiAtLWdpdCBhL3N0ZGlvLWNvbW1vbi92ZnNjYW5mLmMgYi9zdGRpby1jb21tb24vdmZzY2FuZi5jCitpbmRleCAwZTIwNGU3Li42NmNjMGFmIDEwMDY0NAorLS0tIGEvc3RkaW8tY29tbW9uL3Zmc2NhbmYuYworKysrIGIvc3RkaW8tY29tbW9uL3Zmc2NhbmYuYworQEAgLTI5LDYgKzI5LDcgQEAKKyAjaW5jbHVkZSA8d2N0eXBlLmg+CisgI2luY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CisgI2luY2x1ZGUgPGxvY2FsZS9sb2NhbGVpbmZvLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2lmZGVmCV9fR05VQ19fCisgIyBkZWZpbmUgSEFWRV9MT05HTE9ORworQEAgLTEzMyw2ICsxMzQsMTIgQEAKKyAjIGRlZmluZSBXSU5UX1QJCWludAorICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisrIyBkZWZpbmUgTVVMVElCWVRFX1NVUFBPUlQgKDEpCisrI2Vsc2UKKysjIGRlZmluZSBNVUxUSUJZVEVfU1VQUE9SVCAoMCkKKysjZW5kaWYKKysKKyAjZGVmaW5lIGVuY29kZV9lcnJvcigpIGRvIHsJCQkJCQkgICAgICBcCisgCQkJICBlcnJ2YWwgPSA0OwkJCQkJICAgICAgXAorIAkJCSAgX19zZXRfZXJybm8gKEVJTFNFUSk7CQkJCSAgICAgIFwKK0BAIC0zMTYsMjQgKzMyMywzNSBAQCBfSU9fdmZzY2FuZl9pbnRlcm5hbCAoX0lPX0ZJTEUgKnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgX0lPX3ZhX2xpc3QgYXJncHRyLAorICAgQVJHQ0hFQ0sgKHMsIGZvcm1hdCk7CisgCisgIHsKKy0jaWZuZGVmIENPTVBJTEVfV1NDQU5GCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAmJiAhZGVmaW5lZCAoQ09NUElMRV9XU0NBTkYpCisgICAgc3RydWN0IF9fbG9jYWxlX2RhdGEgKmNvbnN0IGN1cm51bWVyaWMgPSBsb2MtPl9fbG9jYWxlc1tMQ19OVU1FUklDXTsKKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICAgLyogRmlndXJlIG91dCB0aGUgZGVjaW1hbCBwb2ludCBjaGFyYWN0ZXIuICAqLworLSNpZmRlZiBDT01QSUxFX1dTQ0FORgorKyMgaWZkZWYgQ09NUElMRV9XU0NBTkYKKyAgICBkZWNpbWFsID0gX05MX0NVUlJFTlRfV09SRCAoTENfTlVNRVJJQywgX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQyk7CistI2Vsc2UKKysjIGVsc2UKKyAgICBkZWNpbWFsID0gY3VybnVtZXJpYy0+dmFsdWVzW19OTF9JVEVNX0lOREVYIChERUNJTUFMX1BPSU5UKV0uc3RyaW5nOworLSNlbmRpZgorKyMgZW5kaWYKKyAgICAvKiBGaWd1cmUgb3V0IHRoZSB0aG91c2FuZHMgc2VwYXJhdG9yIGNoYXJhY3Rlci4gICovCistI2lmZGVmIENPTVBJTEVfV1NDQU5GCisrIyBpZmRlZiBDT01QSUxFX1dTQ0FORgorICAgIHRob3VzYW5kcyA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX05VTUVSSUMsIF9OTF9OVU1FUklDX1RIT1VTQU5EU19TRVBfV0MpOworLSNlbHNlCisrIyBlbHNlCisgICAgdGhvdXNhbmRzID0gY3VybnVtZXJpYy0+dmFsdWVzW19OTF9JVEVNX0lOREVYIChUSE9VU0FORFNfU0VQKV0uc3RyaW5nOworICAgIGlmICgqdGhvdXNhbmRzID09ICdcMCcpCisgICAgICB0aG91c2FuZHMgPSBOVUxMOworLSNlbmRpZgorKyMgZW5kaWYKKysjZWxzZSAvKiBpZiAhIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworKyAgIC8qIEhhcmQtY29kZSB2YWx1ZXMgZnJvbSB0aGUgQyBsb2NhbGUuICAqLworKyMgaWZkZWYgQ09NUElMRV9XU0NBTkYKKysgICBkZWNpbWFsID0gTCcuJzsKKysgICB0aG91c2FuZHMgPSBMJ1wwJzsKKysjIGVsc2UKKysgICBkZWNpbWFsID0gIi4iOworKyAgIHRob3VzYW5kcyA9IE5VTEw7CisrIyBlbmRpZgorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKyAgfQorIAorICAgLyogTG9jayB0aGUgc3RyZWFtLiAgKi8KK0BAIC0zODUsNiArNDAzLDggQEAgX0lPX3Zmc2NhbmZfaW50ZXJuYWwgKF9JT19GSUxFICpzLCBjb25zdCBjaGFyICpmb3JtYXQsIF9JT192YV9saXN0IGFyZ3B0ciwKKyAjaWZuZGVmIENPTVBJTEVfV1NDQU5GCisgICAgICAgaWYgKCFpc2FzY2lpICgodW5zaWduZWQgY2hhcikgKmYpKQorIAl7CisrICAgICAgICAgIGFzc2VydCAoTVVMVElCWVRFX1NVUFBPUlQpOworKworIAkgIC8qIE5vbi1BU0NJSSwgbWF5IGJlIGEgbXVsdGlieXRlLiAgKi8KKyAJICBpbnQgbGVuID0gX19tYnJsZW4gKGYsIHN0cmxlbiAoZiksICZzdGF0ZSk7CisgCSAgaWYgKGxlbiA+IDApCitAQCAtODMwLDYgKzg1MCw4IEBAIF9JT192ZnNjYW5mX2ludGVybmFsIChfSU9fRklMRSAqcywgY29uc3QgY2hhciAqZm9ybWF0LCBfSU9fdmFfbGlzdCBhcmdwdHIsCisgCSAgICB9CisgCSAgLyogRkFMTFRIUk9VR0ggKi8KKyAJY2FzZSBMXygnQycpOgorKyAgICAgICAgICBhc3NlcnQgKE1VTFRJQllURV9TVVBQT1JUKTsKKysKKyAJICBpZiAod2lkdGggPT0gLTEpCisgCSAgICB3aWR0aCA9IDE7CisgCitAQCAtMTE3Miw2ICsxMTk0LDggQEAgX0lPX3Zmc2NhbmZfaW50ZXJuYWwgKF9JT19GSUxFICpzLCBjb25zdCBjaGFyICpmb3JtYXQsIF9JT192YV9saXN0IGFyZ3B0ciwKKyAJICAvKiBGQUxMVEhST1VHSCAqLworIAorIAljYXNlIExfKCdTJyk6CisrICAgICAgICAgIGFzc2VydCAoTVVMVElCWVRFX1NVUFBPUlQpOworKworIAkgIHsKKyAjaWZuZGVmIENPTVBJTEVfV1NDQU5GCisgCSAgICBtYnN0YXRlX3QgY3N0YXRlOworQEAgLTE0MTksMTAgKzE0NDMsMTcgQEAgX0lPX3Zmc2NhbmZfaW50ZXJuYWwgKF9JT19GSUxFICpzLCBjb25zdCBjaGFyICpmb3JtYXQsIF9JT192YV9saXN0IGFyZ3B0ciwKKyAJICAgICAgY29uc3QgY2hhciAqbWJkaWdpdHNbMTBdOworIAkgICAgICBjb25zdCBjaGFyICptYmRpZ2l0c19leHRlbmRlZFsxMF07CisgI2VuZGlmCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIAkgICAgICAvKiAgInRvX2lucHVuY3QiIGlzIGEgbWFwIGZyb20gQVNDSUkgZGlnaXRzIHRvIHRoZWlyCisgCQkgIGVxdWl2YWxlbnQgaW4gbG9jYWxlLiBUaGlzIGlzIGRlZmluZWQgZm9yIGxvY2FsZXMKKyAJCSAgd2hpY2ggdXNlIGFuIGV4dHJhIGRpZ2l0cyBzZXQuICAqLworIAkgICAgICB3Y3RyYW5zX3QgbWFwID0gX193Y3RyYW5zICgidG9faW5wdW5jdCIpOworKyNlbHNlCisrICAgICAgICAgICAgICAvKiBUaGlzIHdpbGwgYWx3YXlzIGJlIHRoZSBjYXNlIHdoZW4KKysgICAgICAgICAgICAgICAgIE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgaXMgZGlzYWJsZWQsIGJ1dCB0aGUKKysgICAgICAgICAgICAgICAgIGNvbXBpbGVyIGNhbid0IGZpZ3VyZSB0aGF0IG91dC4gICovCisrICAgICAgICAgICAgICB3Y3RyYW5zX3QgbWFwID0gTlVMTDsKKysjZW5kaWYKKyAJICAgICAgaW50IG47CisgCisgCSAgICAgIGZyb21fbGV2ZWwgPSAwOworQEAgLTIwODgsNiArMjExOSw3IEBAIF9JT192ZnNjYW5mX2ludGVybmFsIChfSU9fRklMRSAqcywgY29uc3QgY2hhciAqZm9ybWF0LCBfSU9fdmFfbGlzdCBhcmdwdHIsCisgCQktLXdpZHRoOworIAkgICAgfQorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAJICB3Y3RyYW5zX3QgbWFwOworIAkgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgoZmxhZ3MgJiBJMThOKSAhPSAwLCAwKQorIAkgICAgICAvKiBIZXhhZGVjaW1hbCBmbG9hdHMgbWFrZSBubyBzZW5zZSwgZml4aW5nIGxvY2FsaXplZAorQEAgLTIzMDQsNiArMjMzNiw3IEBAIF9JT192ZnNjYW5mX2ludGVybmFsIChfSU9fRklMRSAqcywgY29uc3QgY2hhciAqZm9ybWF0LCBfSU9fdmFfbGlzdCBhcmdwdHIsCisgCSAgICAgIDsKKyAjZW5kaWYKKyAJICAgIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisgCisgCSAgLyogSGF2ZSB3ZSByZWFkIGFueSBjaGFyYWN0ZXI/ICBJZiB3ZSB0cnkgdG8gcmVhZCBhIG51bWJlcgorIAkgICAgIGluIGhleGFkZWNpbWFsIG5vdGF0aW9uIGFuZCB3ZSBoYXZlIHJlYWQgb25seSB0aGUgYDB4JworQEAgLTIzNDMsNyArMjM3NiwxMCBAQCBfSU9fdmZzY2FuZl9pbnRlcm5hbCAoX0lPX0ZJTEUgKnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgX0lPX3ZhX2xpc3QgYXJncHRyLAorIAorIAljYXNlIExfKCdbJyk6CS8qIENoYXJhY3RlciBjbGFzcy4gICovCisgCSAgaWYgKGZsYWdzICYgTE9ORykKKy0JICAgIFNUUklOR19BUkcgKHdzdHIsIHdjaGFyX3QsIDEwMCk7CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgYXNzZXJ0IChNVUxUSUJZVEVfU1VQUE9SVCk7CisrICAgICAgICAgICAgICBTVFJJTkdfQVJHICh3c3RyLCB3Y2hhcl90LCAxMDApOworKyAgICAgICAgICAgIH0KKyAJICBlbHNlCisgCSAgICBTVFJJTkdfQVJHIChzdHIsIGNoYXIsIDEwMCk7CisgCitAQCAtMjQxNyw2ICsyNDUzLDcgQEAgX0lPX3Zmc2NhbmZfaW50ZXJuYWwgKF9JT19GSUxFICpzLCBjb25zdCBjaGFyICpmb3JtYXQsIF9JT192YV9saXN0IGFyZ3B0ciwKKyAJICBpZiAoZmxhZ3MgJiBMT05HKQorIAkgICAgeworIAkgICAgICBzaXplX3Qgbm93ID0gcmVhZF9pbjsKKysgICAgICAgICAgICAgIGFzc2VydCAoTVVMVElCWVRFX1NVUFBPUlQpOworICNpZmRlZiBDT01QSUxFX1dTQ0FORgorIAkgICAgICBpZiAoX19nbGliY191bmxpa2VseSAoaW5jaGFyICgpID09IFdFT0YpKQorIAkJaW5wdXRfZXJyb3IgKCk7CitkaWZmIC0tZ2l0IGEvc3RkbGliL01ha2VmaWxlIGIvc3RkbGliL01ha2VmaWxlCitpbmRleCA0MDI0NjZhLi43ZTdlMzA0IDEwMDY0NAorLS0tIGEvc3RkbGliL01ha2VmaWxlCisrKysgYi9zdGRsaWIvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJTWFrZWZpbGUgZm9yIHN0ZGxpYiByb3V0aW5lcworICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IHN0ZGxpYgorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTMwLDcgKzMyLDcgQEAgaGVhZGVycwk6PSBzdGRsaWIuaCBiaXRzL3N0ZGxpYi5oIGJpdHMvc3RkbGliLWxkYmwuaCBiaXRzL3N0ZGxpYi1mbG9hdC5oICAgICAgXAorIAkgICBhbGxvY2EuaCBmbXRtc2cuaAkJCQkJCSAgICAgIFwKKyAJICAgYml0cy9zdGRsaWItYnNlYXJjaC5oCisgCistcm91dGluZXMJOj0JCQkJCQkJICAgICAgXAorK3JvdXRpbmVzLXkJOj0JCQkJCQkJICAgICAgXAorIAlhdG9mIGF0b2kgYXRvbCBhdG9sbAkJCQkJCSAgICAgIFwKKyAJYWJvcnQJCQkJCQkJCSAgICAgIFwKKyAJYnNlYXJjaCBxc29ydCBtc29ydAkJCQkJCSAgICAgIFwKK0BAIC0zOSw3ICs0MSw2IEBAIHJvdXRpbmVzCTo9CQkJCQkJCSAgICAgIFwKKyAJcXVpY2tfZXhpdCBhdF9xdWlja19leGl0IGN4YV9hdF9xdWlja19leGl0IGN4YV90aHJlYWRfYXRleGl0X2ltcGwgICAgIFwKKyAJYWJzIGxhYnMgbGxhYnMJCQkJCQkJICAgICAgXAorIAlkaXYgbGRpdiBsbGRpdgkJCQkJCQkgICAgICBcCistCW1ibGVuIG1ic3Rvd2NzIG1idG93YyB3Y3N0b21icyB3Y3RvbWIJCQkJICAgICAgXAorIAlyYW5kb20gcmFuZG9tX3IgcmFuZCByYW5kX3IJCQkJCSAgICAgIFwKKyAJZHJhbmQ0OCBlcmFuZDQ4IGxyYW5kNDggbnJhbmQ0OCBtcmFuZDQ4IGpyYW5kNDgJCQkgICAgICBcCisgCXNyYW5kNDggc2VlZDQ4IGxjb25nNDgJCQkJCQkgICAgICBcCitAQCAtNTIsOSArNTMsMTggQEAgcm91dGluZXMJOj0JCQkJCQkJICAgICAgXAorIAlzdHJ0b2ZfbCBzdHJ0b2RfbCBzdHJ0b2xkX2wJCQkJCSAgICAgIFwKKyAJc3lzdGVtIGNhbm9uaWNhbGl6ZQkJCQkJCSAgICAgIFwKKyAJYTY0bCBsNjRhCQkJCQkJCSAgICAgIFwKKy0JcnBtYXRjaCBzdHJmbW9uIHN0cmZtb25fbCBnZXRzdWJvcHQgeHBnX2Jhc2VuYW1lIGZtdG1zZwkJICAgICAgXAorLQlzdHJ0b2ltYXggc3RydG91bWF4IHdjc3RvaW1heCB3Y3N0b3VtYXgJCQkJICAgICAgXAorKwlnZXRzdWJvcHQgeHBnX2Jhc2VuYW1lCQkJCQkJICAgICAgXAorKwlzdHJ0b2ltYXggc3RydG91bWF4CQkJCQkJICAgICAgXAorIAlnZXRjb250ZXh0IHNldGNvbnRleHQgbWFrZWNvbnRleHQgc3dhcGNvbnRleHQKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpICs9CQkJCSAgICAgIFwKKysJc3RyZm1vbiBzdHJmbW9uX2wKKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSArPQkJCQkgICAgICBcCisrCW1ibGVuIG1ic3Rvd2NzIG1idG93YyB3Y3N0b21icyB3Y3RvbWIJCQkJICAgICAgXAorKwl3Y3N0b2ltYXggd2NzdG91bWF4CisraWZlcSAoeXksJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSQoT1BUSU9OX1BPU0lYX1JFR0VYUCkpCisrcm91dGluZXMteSArPSBycG1hdGNoCisrZW5kaWYKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfRk1UTVNHKSArPSBmbXRtc2cKKyBhdXggPQlncm91cGluZyBncm91cGluZ3djIHRlbnNfaW5fbGltYgorIAorICMgVGhlc2Ugcm91dGluZXMgd2lsbCBiZSBvbWl0dGVkIGZyb20gdGhlIGxpYmMgc2hhcmVkIG9iamVjdC4KK0BAIC02MiwyMCArNzIsMjQgQEAgYXV4ID0JZ3JvdXBpbmcgZ3JvdXBpbmd3YyB0ZW5zX2luX2xpbWIKKyAjIGxpbmtlZCBhZ2FpbnN0IHdoZW4gdGhlIHNoYXJlZCBsaWJyYXJ5IHdpbGwgYmUgdXNlZC4KKyBzdGF0aWMtb25seS1yb3V0aW5lcyA9IGF0ZXhpdCBhdF9xdWlja19leGl0CisgCistdGVzdC1zcmNzCTo9IHRzdC1mbXRtc2cKKy10ZXN0cwkJOj0gdHN0LXN0cnRvbCB0c3Qtc3RydG9kIHRlc3RtYiB0ZXN0cmFuZCB0ZXN0c29ydCB0ZXN0ZGl2ICAgXAorK3Rlc3Qtc3Jjcy0kKE9QVElPTl9FR0xJQkNfRk1UTVNHKQk6PSB0c3QtZm10bXNnCisrdGVzdHMJCTo9IHRzdC1zdHJ0b2wgdHN0LXN0cnRvZCB0ZXN0cmFuZCB0ZXN0c29ydCB0ZXN0ZGl2CSAgICBcCisgCQkgICB0ZXN0LWNhbm9uIHRlc3QtY2Fub24yIHRzdC1zdHJ0b2xsIHRzdC1lbnZpcm9uCSAgICBcCisgCQkgICB0c3QteHBnLWJhc2VuYW1lIHRzdC1yYW5kb20gdHN0LXJhbmRvbTIgdHN0LWJzZWFyY2gJICAgIFwKKyAJCSAgIHRzdC1saW1pdHMgdHN0LXJhbmQ0OCBidWctc3RydG9kIHRzdC1zZXRjb250ZXh0ICAgICAgICAgIFwKKy0JCSAgIHRzdC1zZXRjb250ZXh0MiB0ZXN0LWE2NGwgdHN0LXFzb3J0IHRzdC1zeXN0ZW0gdGVzdG1iMiAgIFwKKy0JCSAgIGJ1Zy1zdHJ0b2QyIHRzdC1hdG9mMSB0c3QtYXRvZjIgdHN0LXN0cnRvZDIgdHN0LXN0cnRvZDMgIFwKKy0JCSAgIHRzdC1yYW5kNDgtMiB0c3QtbWFrZWNvbnRleHQgdHN0LXN0cnRvZDQgdHN0LXN0cnRvZDUgICAgIFwKKysJCSAgIHRzdC1zZXRjb250ZXh0MiB0ZXN0LWE2NGwgdHN0LXFzb3J0IHRzdC1zeXN0ZW0JICAgIFwKKysJCSAgIGJ1Zy1zdHJ0b2QyIHRzdC1hdG9mMSB0c3QtYXRvZjIgdHN0LXN0cnRvZDIgCQkgICAgXAorKwkJICAgdHN0LXJhbmQ0OC0yIHRzdC1tYWtlY29udGV4dCAJCQkgICAgXAorIAkJICAgdHN0LXFzb3J0MiB0c3QtbWFrZWNvbnRleHQyIHRzdC1zdHJ0b2Q2IHRzdC11bnNldGVudjEgICAgXAorIAkJICAgdHN0LW1ha2Vjb250ZXh0MyBidWctZ2V0Y29udGV4dCBidWctZm10bXNnMQkJICAgIFwKKyAJCSAgIHRzdC1zZWN1cmUtZ2V0ZW52IHRzdC1zdHJ0b2Qtb3ZlcmZsb3cgdHN0LXN0cnRvZC1yb3VuZCAgIFwKKyAJCSAgIHRzdC10aW5pbmVzcyB0c3Qtc3RydG9kLXVuZGVyZmxvdyB0c3QtdGxzLWF0ZXhpdAkgICAgXAorIAkJICAgdHN0LXNldGNvbnRleHQzIHRzdC10bHMtYXRleGl0LW5vZGVsZXRlCisgdGVzdHMtc3RhdGljCTo9IHRzdC1zZWN1cmUtZ2V0ZW52CisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSBcCisrCQkrPSB0c3Qtc3RydG9kMyB0c3Qtc3RydG9kNCB0c3Qtc3RydG9kNSB0ZXN0bWIyCisrdGVzdHMtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgXAorKwkJKz0gdGVzdG1iCisgCisgbW9kdWxlcy1uYW1lcwk9IHRzdC10bHMtYXRleGl0LWxpYgorIAorQEAgLTExNiw4ICsxMzAsMTAgQEAgQ0ZMQUdTLXRzdC1tYWtlY29udGV4dDIuYyA9ICQoc3RhY2stYWxpZ24tdGVzdC1mbGFncykKKyB0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KWlzb21hYy5vdXQKKyAKKyBpZmVxICgkKHJ1bi1idWlsdC10ZXN0cykseWVzKQorK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX0ZNVE1TRykpCisgdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeCl0c3QtZm10bXNnLm91dAorIGVuZGlmCisrZW5kaWYKKyAKKyBpbmNsdWRlIC4uL1J1bGVzCisgCitkaWZmIC0tZ2l0IGEvc3RkbGliL3N0cnRvZF9sLmMgYi9zdGRsaWIvc3RydG9kX2wuYworaW5kZXggZTEzYWIxZS4uNjNlZmU0MSAxMDA2NDQKKy0tLSBhL3N0ZGxpYi9zdHJ0b2RfbC5jCisrKysgYi9zdGRsaWIvc3RydG9kX2wuYworQEAgLTE3LDYgKzE3LDcgQEAKKyAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgc2VlCisgICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjaW5jbHVkZSA8eGxvY2FsZS5oPgorIAorIGV4dGVybiBkb3VibGUgX19fX3N0cnRvZF9sX2ludGVybmFsIChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCwgX19sb2NhbGVfdCk7CitAQCAtNTQ4LDYgKzU0OSw3IEBAIF9fX19TVFJUT0ZfSU5URVJOQUwgKG5wdHIsIGVuZHB0ciwgZ3JvdXAsIGxvYykKKyAgIC8qIFVzZWQgaW4gc2V2ZXJhbCBwbGFjZXMuICAqLworICAgaW50IGNudDsKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBzdHJ1Y3QgX19sb2NhbGVfZGF0YSAqY3VycmVudCA9IGxvYy0+X19sb2NhbGVzW0xDX05VTUVSSUNdOworIAorICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKGdyb3VwKSkKK0BAIC01ODYsNiArNTg4LDE3IEBAIF9fX19TVFJUT0ZfSU5URVJOQUwgKG5wdHIsIGVuZHB0ciwgZ3JvdXAsIGxvYykKKyAgIGRlY2ltYWxfbGVuID0gc3RybGVuIChkZWNpbWFsKTsKKyAgIGFzc2VydCAoZGVjaW1hbF9sZW4gPiAwKTsKKyAjZW5kaWYKKysjZWxzZSAvKiBpZiAhIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworKyAgLyogSGFyZC1jb2RlIHZhbHVlcyBmcm9tIHRoZSAnQycgbG9jYWxlLiAgKi8KKysgIGdyb3VwaW5nID0gTlVMTDsKKysjaWZkZWYgVVNFX1dJREVfQ0hBUgorKyAgZGVjaW1hbCA9IEwnLic7CisrIyBkZWZpbmUgZGVjaW1hbF9sZW4gMQorKyNlbHNlCisrICBkZWNpbWFsID0gIi4iOworKyAgZGVjaW1hbF9sZW4gPSAxOworKyNlbmRpZgorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKyAKKyAgIC8qIFByZXBhcmUgbnVtYmVyIHJlcHJlc2VudGF0aW9uLiAgKi8KKyAgIGV4cG9uZW50ID0gMDsKK2RpZmYgLS1naXQgYS9zdGRsaWIvdHN0LXN0cnRvZC5jIGIvc3RkbGliL3RzdC1zdHJ0b2QuYworaW5kZXggYTQ2OTIwOC4uMjhmYjQyMyAxMDA2NDQKKy0tLSBhL3N0ZGxpYi90c3Qtc3RydG9kLmMKKysrKyBiL3N0ZGxpYi90c3Qtc3RydG9kLmMKK0BAIC0yMyw2ICsyMyw3IEBACisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgc3RydWN0IGx0ZXN0CisgICB7CitAQCAtMTc2LDcgKzE3Nyw5IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpCisgCisgICBzdGF0dXMgfD0gbG9uZ19kYmwgKCk7CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgc3RhdHVzIHw9IGxvY2FsZV90ZXN0ICgpOworKyNlbmRpZgorIAorICAgcmV0dXJuIHN0YXR1cyA/IEVYSVRfRkFJTFVSRSA6IEVYSVRfU1VDQ0VTUzsKKyB9CitAQCAtMjE5LDYgKzIyMiw3IEBAIGxvbmdfZGJsICh2b2lkKQorICAgcmV0dXJuIDA7CisgfQorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAvKiBQZXJmb3JtIGEgZmV3IHRlc3RzIGluIGEgbG9jYWxlIHdpdGggdGhvdXNhbmRzIHNlcGFyYXRvcnMuICAqLworIHN0YXRpYyBpbnQKKyBsb2NhbGVfdGVzdCAodm9pZCkKK0BAIC0yNzYsMyArMjgwLDQgQEAgbG9jYWxlX3Rlc3QgKHZvaWQpCisgCisgICByZXR1cm4gcmVzdWx0OworIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCitkaWZmIC0tZ2l0IGEvc3RyZWFtcy9NYWtlZmlsZSBiL3N0cmVhbXMvTWFrZWZpbGUKK2luZGV4IGE4YTYxNjIuLmNlYjQyM2YgMTAwNjQ0CistLS0gYS9zdHJlYW1zL01ha2VmaWxlCisrKysgYi9zdHJlYW1zL01ha2VmaWxlCitAQCAtMTgsMTEgKzE4LDE0IEBACisgIworICMJTWFrZWZpbGUgZm9yIHN0cmVhbXMuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gc3RyZWFtcworIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorIGhlYWRlcnMJCT0gc3Ryb3B0cy5oIHN5cy9zdHJvcHRzLmggYml0cy9zdHJvcHRzLmggYml0cy94dGl0eXBlcy5oCistcm91dGluZXMJPSBpc2FzdHJlYW0gZ2V0bXNnIGdldHBtc2cgcHV0bXNnIHB1dHBtc2cgZmF0dGFjaCBmZGV0YWNoCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX1NUUkVBTVMpIFwKKysJKz0gaXNhc3RyZWFtIGdldG1zZyBnZXRwbXNnIHB1dG1zZyBwdXRwbXNnIGZhdHRhY2ggZmRldGFjaAorIAorIGluY2x1ZGUgLi4vUnVsZXMKK2RpZmYgLS1naXQgYS9zdHJpbmcvTWFrZWZpbGUgYi9zdHJpbmcvTWFrZWZpbGUKK2luZGV4IDg0MjRhNjEuLjU5ODg4MzQgMTAwNjQ0CistLS0gYS9zdHJpbmcvTWFrZWZpbGUKKysrKyBiL3N0cmluZy9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIHN0cmluZyBwb3J0aW9uIG9mIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gc3RyaW5nCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMzksMTAgKzQxLDEyIEBAIHJvdXRpbmVzCTo9IHN0cmNhdCBzdHJjaHIgc3RyY21wIHN0cmNvbGwgc3RyY3B5IHN0cmNzcG4JCVwKKyAJCSAgICQoYWRkcHJlZml4IGFyZ3otLGFwcGVuZCBjb3VudCBjcmVhdGUgY3RzZXAgbmV4dAlcCisgCQkJCSAgICAgZGVsZXRlIGV4dHJhY3QgaW5zZXJ0IHN0cmluZ2lmeQlcCisgCQkJCSAgICAgYWRkc2VwIHJlcGxhY2UpCQkJXAorLQkJICAgZW52eiBiYXNlbmFtZQkJCQkJXAorKwkJICAgYmFzZW5hbWUJCQkJCQlcCisgCQkgICBzdHJjb2xsX2wgc3RyeGZybV9sIHN0cmluZy1pbmxpbmVzIG1lbXJjaHIJCVwKKyAJCSAgIHhwZy1zdHJlcnJvciBzdHJlcnJvcl9sCisgCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0VOVlopICs9IGVudnoKKysKKyBzdHJvcC10ZXN0cwk6PSBtZW1jaHIgbWVtY21wIG1lbWNweSBtZW1tb3ZlIG1lbXBjcHkgbWVtc2V0IG1lbWNjcHkJXAorIAkJICAgc3RwY3B5IHN0cG5jcHkgc3RyY2F0IHN0cmNociBzdHJjbXAgc3RyY3B5IHN0cmNzcG4JXAorIAkJICAgc3RybGVuIHN0cm5jbXAgc3RybmNweSBzdHJwYnJrIHN0cnJjaHIgc3Ryc3BuIG1lbW1lbQlcCitAQCAtNTEsMTAgKzU1LDEyIEBAIHN0cm9wLXRlc3RzCTo9IG1lbWNociBtZW1jbXAgbWVtY3B5IG1lbW1vdmUgbWVtcGNweSBtZW1zZXQgbWVtY2NweQlcCisgdGVzdHMJCTo9IHRlc3RlciBpbmwtdGVzdGVyIG5vaW5sLXRlc3RlciB0ZXN0Y29weSB0ZXN0LWZmcwlcCisgCQkgICB0c3Qtc3RybGVuIHN0cmF0Y2xpZmYgdHN0LXN2YyB0c3QtaW5sY2FsbAkJXAorIAkJICAgYnVnLXN0cm5jYXQxIGJ1Zy1zdHJzcG4xIGJ1Zy1zdHJwYnJrMSB0c3QtYnN3YXAJXAorLQkJICAgdHN0LXN0cnRvayB0c3Qtc3RyeGZybSBidWctc3RyY29sbDEgdHN0LXN0cmZyeQlcCisrCQkgICB0c3Qtc3RydG9rIHRzdC1zdHJmcnkJXAorIAkJICAgYnVnLXN0cnRvazEgJChhZGRwcmVmaXggdGVzdC0sJChzdHJvcC10ZXN0cykpCVwKKy0JCSAgIGJ1Zy1lbnZ6MSB0c3Qtc3RyeGZybTIgdHN0LWVuZGlhbiB0c3Qtc3ZjMgkJXAorLQkJICAgdHN0LXN0cnRva19yCisrCQkgICB0c3Qtc3RyeGZybTIgdHN0LWVuZGlhbiB0c3Qtc3ZjMiB0c3Qtc3RydG9rX3IKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfRU5WWikgKz0gYnVnLWVudnoxCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSBcCisrCQkrPSB0c3Qtc3RyeGZybSBidWctc3RyY29sbDEKKyAKKyB4dGVzdHMgPSB0c3Qtc3RyY29sbC1vdmVyZmxvdworIAorZGlmZiAtLWdpdCBhL3N0cmluZy9zdHJjb2xsX2wuYyBiL3N0cmluZy9zdHJjb2xsX2wuYworaW5kZXggOGYxMjI1Zi4uYjM2YjE4YyAxMDA2NDQKKy0tLSBhL3N0cmluZy9zdHJjb2xsX2wuYworKysrIGIvc3RyaW5nL3N0cmNvbGxfbC5jCitAQCAtMjQsNiArMjQsNyBAQAorICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpZm5kZWYgU1RSSU5HX1RZUEUKKyAjIGRlZmluZSBTVFJJTkdfVFlQRSBjaGFyCitAQCAtMjYwLDcgKzI2MSwxMSBAQCBpbnQKKyBTVFJDT0xMIChjb25zdCBTVFJJTkdfVFlQRSAqczEsIGNvbnN0IFNUUklOR19UWVBFICpzMiwgX19sb2NhbGVfdCBsKQorIHsKKyAgIHN0cnVjdCBfX2xvY2FsZV9kYXRhICpjdXJyZW50ID0gbC0+X19sb2NhbGVzW0xDX0NPTExBVEVdOworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIHVpbnRfZmFzdDMyX3QgbnJ1bGVzID0gY3VycmVudC0+dmFsdWVzW19OTF9JVEVNX0lOREVYIChfTkxfQ09MTEFURV9OUlVMRVMpXS53b3JkOworKyNlbHNlCisrICBjb25zdCB1aW50X2Zhc3QzMl90IG5ydWxlcyA9IDA7CisrI2VuZGlmCisgICAvKiBXZSBkb24ndCBhc3NpZ24gdGhlIGZvbGxvd2luZyB2YWx1ZXMgcmlnaHQgYXdheSBzaW5jZSBpdCBtaWdodCBiZQorICAgICAgdW5uZWNlc3NhcnkgaW4gY2FzZSB0aGVyZSBhcmUgbm8gcnVsZXMuICAqLworICAgY29uc3QgdW5zaWduZWQgY2hhciAqcnVsZXNldHM7CitkaWZmIC0tZ2l0IGEvc3RyaW5nL3N0cmVycm9yX2wuYyBiL3N0cmluZy9zdHJlcnJvcl9sLmMKK2luZGV4IDJlZDc4YjUuLjY1ODQ4MTMgMTAwNjQ0CistLS0gYS9zdHJpbmcvc3RyZXJyb3JfbC5jCisrKysgYi9zdHJpbmcvc3RyZXJyb3JfbC5jCitAQCAtMjEsNiArMjEsNyBAQAorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIAorIHN0YXRpYyBfX3RocmVhZCBjaGFyICpsYXN0X3ZhbHVlOworQEAgLTI5LDEwICszMCwxNCBAQCBzdGF0aWMgX190aHJlYWQgY2hhciAqbGFzdF92YWx1ZTsKKyBzdGF0aWMgY29uc3QgY2hhciAqCisgdHJhbnNsYXRlIChjb25zdCBjaGFyICpzdHIsIGxvY2FsZV90IGxvYykKKyB7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgbG9jYWxlX3Qgb2xkbG9jID0gX191c2Vsb2NhbGUgKGxvYyk7CisgICBjb25zdCBjaGFyICpyZXMgPSBfKHN0cik7CisgICBfX3VzZWxvY2FsZSAob2xkbG9jKTsKKyAgIHJldHVybiByZXM7CisrI2Vsc2UKKysgIHJldHVybiBzdHI7CisrI2VuZGlmCisgfQorIAorIAorZGlmZiAtLWdpdCBhL3N0cmluZy9zdHJ4ZnJtX2wuYyBiL3N0cmluZy9zdHJ4ZnJtX2wuYworaW5kZXggOGI2MWVhMi4uNDFmZGMyMiAxMDA2NDQKKy0tLSBhL3N0cmluZy9zdHJ4ZnJtX2wuYworKysrIGIvc3RyaW5nL3N0cnhmcm1fbC5jCitAQCAtMjQsNiArMjQsNyBAQAorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpZm5kZWYgU1RSSU5HX1RZUEUKKyAjIGRlZmluZSBTVFJJTkdfVFlQRSBjaGFyCitAQCAtNjY5LDcgKzY3MCwxMSBAQCBTVFJYRlJNIChTVFJJTkdfVFlQRSAqZGVzdCwgY29uc3QgU1RSSU5HX1RZUEUgKnNyYywgc2l6ZV90IG4sIF9fbG9jYWxlX3QgbCkKKyB7CisgICBsb2NhbGVfZGF0YV90IGxfZGF0YTsKKyAgIHN0cnVjdCBfX2xvY2FsZV9kYXRhICpjdXJyZW50ID0gbC0+X19sb2NhbGVzW0xDX0NPTExBVEVdOworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGxfZGF0YS5ucnVsZXMgPSBjdXJyZW50LT52YWx1ZXNbX05MX0lURU1fSU5ERVggKF9OTF9DT0xMQVRFX05SVUxFUyldLndvcmQ7CisrI2Vsc2UKKysgIGxfZGF0YS5ucnVsZXMgPSAwOworKyNlbmRpZgorIAorICAgLyogSGFuZGxlIGJ5dGUgY29tcGFyaXNvbiBjYXNlLiAgKi8KKyAgIGlmIChsX2RhdGEubnJ1bGVzID09IDApCitkaWZmIC0tZ2l0IGEvc3RyaW5nL3Rlc3Qtc3RyY21wLmMgYi9zdHJpbmcvdGVzdC1zdHJjbXAuYworaW5kZXggZGM0YmE2Zi4uYTk3ODY1NiAxMDA2NDQKKy0tLSBhL3N0cmluZy90ZXN0LXN0cmNtcC5jCisrKysgYi9zdHJpbmcvdGVzdC1zdHJjbXAuYworQEAgLTMyOSwzNCArMzI5LDYgQEAgY2hlY2sgKHZvaWQpCisgCQlGT1JfRUFDSF9JTVBMIChpbXBsLCAwKQorIAkJY2hlY2tfcmVzdWx0IChpbXBsLCBzMSArIGkxLCBzMiArIGkyLCBleHBfcmVzdWx0KTsKKyAgICAgICB9CistCistICAvKiBUZXN0IGNhc2VzIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZSB6ZXJvIGJ5dGVzIGFmdGVyIHRoZSBmaXJzdC4gICovCistCistICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDE2ICsgMTsgaSsrKQorLSAgICB7CistICAgICAgczFbaV0gPSAweDAwOworLSAgICAgIHMyW2ldID0gMHgwMDsKKy0gICAgfQorLQorLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxNjsgaSsrKQorLSAgICB7CistICAgICAgaW50IGV4cF9yZXN1bHQ7CistCistICAgICAgZm9yIChpbnQgdmFsID0gMHgwMTsgdmFsIDwgMHgxMDA7IHZhbCsrKQorLQl7CistCSAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBpOyBqKyspCistCSAgICB7CistCSAgICAgIHMxW2pdID0gdmFsOworLQkgICAgICBzMltqXSA9IHZhbDsKKy0JICAgIH0KKy0KKy0JICBzMltpXSA9IHZhbDsKKy0KKy0JICBleHBfcmVzdWx0ID0gU0lNUExFX1NUUkNNUCAoczEsIHMyKTsKKy0JICBGT1JfRUFDSF9JTVBMIChpbXBsLCAwKQorLQkgICAgY2hlY2tfcmVzdWx0IChpbXBsLCBzMSwgczIsIGV4cF9yZXN1bHQpOworLQl9CistICAgIH0KKyB9CisgCisgCitkaWZmIC0tZ2l0IGEvc3RyaW5nL3RzdC1zdHJ4ZnJtLmMgYi9zdHJpbmcvdHN0LXN0cnhmcm0uYworaW5kZXggZjQ4Y2ZjMC4uYzNhNTFmOSAxMDA2NDQKKy0tLSBhL3N0cmluZy90c3Qtc3RyeGZybS5jCisrKysgYi9zdHJpbmcvdHN0LXN0cnhmcm0uYworQEAgLTMsNiArMyw3IEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAKKyBjaGFyIGNvbnN0IHN0cmluZ1tdID0gIiI7CitAQCAtNjQsOCArNjUsMTAgQEAgZG9fdGVzdCAodm9pZCkKKyAgIGludCByZXN1bHQgPSAwOworIAorICAgcmVzdWx0IHw9IHRlc3QgKCJDIik7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgcmVzdWx0IHw9IHRlc3QgKCJlbl9VUy5JU08tODg1OS0xIik7CisgICByZXN1bHQgfD0gdGVzdCAoImRlX0RFLlVURi04Iik7CisrI2VuZGlmCisgCisgICByZXR1cm4gcmVzdWx0OworIH0KK2RpZmYgLS1naXQgYS9zdHJpbmcvdHN0LXN0cnhmcm0yLmMgYi9zdHJpbmcvdHN0LXN0cnhmcm0yLmMKK2luZGV4IGQ1YTExMTUuLjE5YzdmMzAgMTAwNjQ0CistLS0gYS9zdHJpbmcvdHN0LXN0cnhmcm0yLmMKKysrKyBiL3N0cmluZy90c3Qtc3RyeGZybTIuYworQEAgLTEsNiArMSw3IEBACisgI2luY2x1ZGUgPGxvY2FsZS5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyBzdGF0aWMgaW50CisgZG9fdGVzdCAodm9pZCkKK0BAIC0zOCw2ICszOSw3IEBAIGRvX3Rlc3QgKHZvaWQpCisgICAgICAgcmVzID0gMTsKKyAgICAgfQorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgImRlX0RFLlVURi04IikgPT0gTlVMTCkKKyAgICAgeworICAgICAgIHB1dHMgKCJzZXRsb2NhbGUgZmFpbGVkIik7CitAQCAtNzUsNiArNzcsNyBAQCBkb190ZXN0ICh2b2lkKQorIAkgIHJlcyA9IDE7CisgCX0KKyAgICAgfQorKyNlbmRpZgorIAorICAgcmV0dXJuIHJlczsKKyB9CitkaWZmIC0tZ2l0IGEvc3VucnBjL01ha2VmaWxlIGIvc3VucnBjL01ha2VmaWxlCitpbmRleCA2MGNhYTBhLi41YmM3MGFiIDEwMDY0NAorLS0tIGEvc3VucnBjL01ha2VmaWxlCisrKysgYi9zdW5ycGMvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBzdW5ycGMgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBzdW5ycGMKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC01NSw3ICs1Nyw2IEBAIGhlYWRlcnMtaW4tdGlycGMgPSAkKGFkZHByZWZpeCBycGMvLGF1dGguaCBhdXRoX3VuaXguaCBjbG50LmggcG1hcF9jbG50LmggXAorIGhlYWRlcnMtbm90LWluLXRpcnBjID0gJChhZGRwcmVmaXggcnBjLyxrZXlfcHJvdC5oIHJwY19kZXMuaCkgXAorIAkJICAgICAgICQocnBjc3ZjOiU9cnBjc3ZjLyUpIHJwY3N2Yy9ib290cGFyYW0uaAorIGhlYWRlcnMgPSBycGMvbmV0ZGIuaAorLWluc3RhbGwtb3RoZXJzID0gJChpbnN0X3N5c2NvbmZkaXIpL3JwYworIGdlbmVyYXRlZCArPSAkKHJwY3N2YzolLng9cnBjc3ZjLyUuaCkgJChycGNzdmM6JS54PXglLmMpICQocnBjc3ZjOiUueD14JS5zdG1wKSBcCisgCSAgICAgJChycGNzdmM6JS54PXJwY3N2Yy8lLnN0bXApIHJwY2dlbgorIGdlbmVyYXRlZC1kaXJzICs9IHJwY3N2YworQEAgLTY1LDIwICs2NiwyOCBAQCBoZWFkZXJzICs9ICQoaGVhZGVycy1pbi10aXJwYykgJChoZWFkZXJzLW5vdC1pbi10aXJwYykKKyBlbmRpZgorIAorIGlmZXEgKCQoYnVpbGQtc2hhcmVkKSx5ZXMpCistbmVlZC1leHBvcnQtcm91dGluZXMgOj0gYXV0aF9kZXMgYXV0aF91bml4IGNsbnRfZ2VuIGNsbnRfcGVyciBjbG50X3RjcCBcCisrbmVlZC1leHBvcnQtcm91dGluZXMtJChPUFRJT05fRUdMSUJDX1NVTlJQQykgOj0gXAorKwkJCWF1dGhfZGVzIGF1dGhfdW5peCBjbG50X2dlbiBjbG50X3BlcnIgY2xudF90Y3AgXAorIAkJCWNsbnRfdWRwIGdldF9teWFkZHIga2V5X2NhbGwgbmV0bmFtZSBwbV9nZXRwb3J0IFwKKy0JCQlycGNfdGhyZWFkIHN2YyBzdmNfdGNwIHN2Y191ZHAgeGNyeXB0IHhkcl9hcnJheSB4ZHIgXAorKwkJCXJwY190aHJlYWQgc3ZjIHN2Y190Y3Agc3ZjX3VkcCB4ZHJfYXJyYXkgeGRyIFwKKyAJCQl4ZHJfaW50WFhfdCB4ZHJfbWVtIHhkcl9yZWYgeGRyX3NpemVvZiB4ZHJfc3RkaW8gXAorIAkJCXN2Y19ydW4KKytuZWVkLWV4cG9ydC1yb3V0aW5lcy15ICs9IHhjcnlwdAorK25lZWQtZXhwb3J0LXJvdXRpbmVzIDo9ICQobmVlZC1leHBvcnQtcm91dGluZXMteSkKKyAKKy1yb3V0aW5lcyA6PSBhdXRoX25vbmUgYXV0aHV4cHJvdCBiaW5kcnN2cHJ0IGNsbnRfcmF3IGNsbnRfc2ltcCBcCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX1NVTlJQQykgOj0gXAorKwkgICAgYXV0aF9ub25lIGF1dGh1eHByb3QgYmluZHJzdnBydCBjbG50X3JhdyBjbG50X3NpbXAgXAorIAkgICAgcnBjX2R0YWJsZSBnZXRycGNwb3J0IHBtYXBfY2xudCBwbV9nZXRtYXBzIHBtYXBfcHJvdCBwbWFwX3Byb3QyIFwKKyAJICAgIHBtYXBfcm10IHJwY19wcm90IHJwY19jb21tb24gcnBjX2Ntc2cgc3ZjX2F1dGggc3ZjX2F1dGh1eCBzdmNfcmF3IFwKKyAJICAgIHN2Y19zaW1wbGUgeGRyX2Zsb2F0IHhkcl9yZWMgcHVibGlja2V5IGF1dGhkZXNfcHJvdCBcCistCSAgICBkZXNfY3J5cHQgZGVzX2ltcGwgZGVzX3NvZnQga2V5X3Byb3Qgb3BlbmNoaWxkIHJ0aW1lIHN2Y2F1dGhfZGVzIFwKKysJICAgIGtleV9wcm90IG9wZW5jaGlsZCBydGltZSBzdmNhdXRoX2RlcyBcCisgCSAgICBnZXRycGNlbnQgZ2V0cnBjYnluYW1lIGdldHJwY2J5bnVtYmVyIFwKKyAJICAgIGdldHJwY2VudF9yIGdldHJwY2J5bmFtZV9yIGdldHJwY2J5bnVtYmVyX3IgXAorLQkgICAgY2xudF91bml4IHN2Y191bml4IGNyZWF0ZV94aWQgJChuZWVkLWV4cG9ydC1yb3V0aW5lcykKKysJICAgIGNsbnRfdW5peCBzdmNfdW5peCBjcmVhdGVfeGlkCisrCisrIyB4ZGVjcnlwdCBpcyBhbHNvIHVzZWQgYnkgbnNzL25zc19maWxlcy9maWxlcy1rZXkuYy4KKytyb3V0aW5lcy15ICs9IGRlc19jcnlwdCBkZXNfaW1wbCBkZXNfc29mdCAkKG5lZWQtZXhwb3J0LXJvdXRpbmVzKQorKworIGlmbmVxICgkKGxpbmstb2Jzb2xldGUtcnBjKSx5ZXMpCisgIyBXZSBvbmx5IGFkZCB0aGUgUlBDIGZvciBjb21wYXRpYmlsaXR5IHRvIGxpYmMuc28uCisgc2hhcmVkLW9ubHktcm91dGluZXMgPSAkKHJvdXRpbmVzKQorQEAgLTg3LDI1ICs5NiwyOCBAQCBlbmRpZgorIAorICMgV2UgZG8gbm90IGJ1aWxkIHJwY2luZm8gYW55bW9yZS4gIEl0IGlzIG5vdCBuZWVkZWQgZm9yIGEgYm9vdHN0cmFwCisgIyBhbmQgbm90IHdhbnRlZCBvbiBjb21wbGV0ZSBzeXN0ZW1zLgorLSMgb3RoZXJzIDo9IHJwY2luZm8KKy0jIGluc3RhbGwtc2JpbiA6PSBycGNpbmZvCistaW5zdGFsbC1iaW4gOj0gcnBjZ2VuCisrIyBvdGhlcnMtJChPUFRJT05fRUdMSUJDX1NVTlJQQykgKz0gcnBjaW5mbworKyMgaW5zdGFsbC1zYmluLSQoT1BUSU9OX0VHTElCQ19TVU5SUEMpICs9IHJwY2luZm8KKytpbnN0YWxsLWJpbi0kKE9QVElPTl9FR0xJQkNfU1VOUlBDKSArPSBycGNnZW4KKyBycGNnZW4tb2JqcyA9IHJwY19tYWluLm8gcnBjX2hvdXQubyBycGNfY291dC5vIHJwY19wYXJzZS5vIFwKKyAJICAgICAgcnBjX3NjYW4ubyBycGNfdXRpbC5vIHJwY19zdmNvdXQubyBycGNfY2xudG91dC5vIFwKKyAJICAgICAgcnBjX3RibG91dC5vIHJwY19zYW1wbGUubworLWV4dHJhLW9ianMgPSAkKHJwY2dlbi1vYmpzKSAkKGFkZHByZWZpeCBjcm9zcy0sJChycGNnZW4tb2JqcykpCistb3RoZXJzICs9IHJwY2dlbgorK2V4dHJhLW9ianMtJChPUFRJT05fRUdMSUJDX1NVTlJQQykgPSAkKHJwY2dlbi1vYmpzKSAkKGFkZHByZWZpeCBjcm9zcy0sJChycGNnZW4tb2JqcykpCisrb3RoZXJzLSQoT1BUSU9OX0VHTElCQ19TVU5SUEMpICs9IHJwY2dlbgorKworK2luc3RhbGwtb3RoZXJzLSQoT1BUSU9OX0VHTElCQ19TVU5SUEMpICs9ICQoaW5zdF9zeXNjb25mZGlyKS9ycGMKKyAKKy10ZXN0cyA9IHRzdC14ZHJtZW0gdHN0LXhkcm1lbTIgdGVzdC1ycGNlbnQKKy14dGVzdHMgOj0gdHN0LWdldG15YWRkcgorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19TVU5SUEMpID0gdHN0LXhkcm1lbSB0c3QteGRybWVtMiB0ZXN0LXJwY2VudAorK3h0ZXN0cy0kKE9QVElPTl9FR0xJQkNfU1VOUlBDKSA6PSB0c3QtZ2V0bXlhZGRyCisgCisgaWZlcSAoJChoYXZlLXRocmVhZC1saWJyYXJ5KSx5ZXMpCisteHRlc3RzICs9IHRocnN2YworK3h0ZXN0cy0kKE9QVElPTl9FR0xJQkNfU1VOUlBDKSArPSB0aHJzdmMKKyBlbmRpZgorIAorIGhlYWRlcnMgKz0gJChycGNzdmM6JS54PXJwY3N2Yy8lLmgpCistZXh0cmEtbGlicyA6PSBsaWJycGNzdmMKKy1leHRyYS1saWJzLW90aGVycyA6PSBsaWJycGNzdmMgIyBNYWtlIGl0IGluIGBvdGhlcnMnIHBhc3MsIG5vdCBgbGliJyBwYXNzLgorK2V4dHJhLWxpYnMtJChPUFRJT05fRUdMSUJDX1NVTlJQQykgKz0gbGlicnBjc3ZjCisrIyBNYWtlIGl0IGluIGBvdGhlcnMnIHBhc3MsIG5vdCBgbGliJyBwYXNzLgorK2V4dHJhLWxpYnMtb3RoZXJzLXkgKz0gJChleHRyYS1saWJzLXkpCisgbGlicnBjc3ZjLXJvdXRpbmVzID0gJChycGNzdmM6JS54PXglKQorIGxpYnJwY3N2Yy1pbmhpYml0LW8gPSAub3MgIyBCdWlsZCBubyBzaGFyZWQgcnBjc3ZjIGxpYnJhcnkuCisgb21pdC1kZXBzID0gJChsaWJycGNzdmMtcm91dGluZXMpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9hcm0vTWFrZWZpbGUgYi9zeXNkZXBzL2FybS9NYWtlZmlsZQoraW5kZXggMTdjMTI5Yi4uNTQzNzkxYSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvYXJtL01ha2VmaWxlCisrKysgYi9zeXNkZXBzL2FybS9NYWtlZmlsZQorQEAgLTM3LDEwICszNywxMyBAQCBpZmVxICgkKHN1YmRpciksY3N1KQorICMgZ2V0IG9mZnNldCB0byBydGxkX2dsb2JhbC5fZGxfaHdjYXAKKyBnZW4tYXMtY29uc3QtaGVhZGVycyArPSBydGxkLWdsb2JhbC1vZmZzZXRzLnN5bSB0bHNkZXNjLnN5bQorIGFlYWJpX2NvbnN0YW50cyA9IGFlYWJpX2xjc3RzIGFlYWJpX3NpZ2hhbmRsZXJzIGFlYWJpX21hdGgKKy1hZWFiaV9yb3V0aW5lcyA9IGFlYWJpX2Fzc2VydCBhZWFiaV9sb2NhbGVjb252IGFlYWJpX2Vycm5vX2FkZHIgXAorK2FlYWJpX3JvdXRpbmVzID0gYWVhYmlfYXNzZXJ0IGFlYWJpX2Vycm5vX2FkZHIgXAorIAkJIGFlYWJpX21iX2N1cl9tYXggYWVhYmlfYXRleGl0IGFlYWJpX21lbWNsciBhZWFiaV9tZW1jcHkgXAorIAkJIGFlYWJpX21lbW1vdmUgYWVhYmlfbWVtc2V0IFwKKyAJCSBhZWFiaV9yZWFkX3RwIGxpYmMtYWVhYmlfcmVhZF90cAorK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSkKKythZWFiaV9yb3V0aW5lcyArPSBhZWFiaV9sb2NhbGVjb252CisrZW5kaWYKKyAKKyBzeXNkZXBfcm91dGluZXMgKz0gJChhZWFiaV9jb25zdGFudHMpICQoYWVhYmlfcm91dGluZXMpCisgc3RhdGljLW9ubHktcm91dGluZXMgKz0gJChhZWFiaV9jb25zdGFudHMpIGFlYWJpX3JlYWRfdHAKK2RpZmYgLS1naXQgYS9zeXNkZXBzL2dlbmVyaWMvbGRzb2RlZnMuaCBiL3N5c2RlcHMvZ2VuZXJpYy9sZHNvZGVmcy5oCitpbmRleCA3YTBmZThkLi5hM2UyYzBhIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9nZW5lcmljL2xkc29kZWZzLmgKKysrKyBiL3N5c2RlcHMvZ2VuZXJpYy9sZHNvZGVmcy5oCitAQCAtNDM1LDYgKzQzNSwxMiBAQCBleHRlcm4gc3RydWN0IHJ0bGRfZ2xvYmFsIF9ydGxkX2dsb2JhbCBfX3J0bGRfZ2xvYmFsX2F0dHJpYnV0ZV9fOworICMgdW5kZWYgX19ydGxkX2dsb2JhbF9hdHRyaWJ1dGVfXworICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworKyMgZGVmaW5lIEdMUk9fZGxfZGVidWdfbWFzayBHTFJPKGRsX2RlYnVnX21hc2spCisrI2Vsc2UKKysjIGRlZmluZSBHTFJPX2RsX2RlYnVnX21hc2sgMAorKyNlbmRpZgorKworICNpZm5kZWYgU0hBUkVECisgIyBkZWZpbmUgR0xSTyhuYW1lKSBfIyNuYW1lCisgI2Vsc2UKK0BAIC00NDcsOCArNDUzLDEwIEBAIHN0cnVjdCBydGxkX2dsb2JhbF9ybworIHsKKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKyAgIC8qIElmIG5vbnplcm8gdGhlIGFwcHJvcHJpYXRlIGRlYnVnIGluZm9ybWF0aW9uIGlzIHByaW50ZWQuICAqLworICAgRVhURVJOIGludCBfZGxfZGVidWdfbWFzazsKKysjZW5kaWYKKyAjZGVmaW5lIERMX0RFQlVHX0xJQlMJICAgICgxIDw8IDApCisgI2RlZmluZSBETF9ERUJVR19JTVBDQUxMUyAgICgxIDw8IDEpCisgI2RlZmluZSBETF9ERUJVR19CSU5ESU5HUyAgICgxIDw8IDIpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9nbnUvTWFrZWZpbGUgYi9zeXNkZXBzL2dudS9NYWtlZmlsZQoraW5kZXggZWE2ODAzNy4uMzE3NWNjMyAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvZ251L01ha2VmaWxlCisrKysgYi9zeXNkZXBzL2dudS9NYWtlZmlsZQorQEAgLTU5LDcgKzU5LDggQEAgJChmb3JlYWNoIG8sJChvYmplY3Qtc3VmZml4ZXMpICQob2JqZWN0LXN1ZmZpeGVzOj0uZCksXAorIGVuZGlmCisgCisgaWZlcSAoJChzdWJkaXIpLGxvZ2luKQorLXN5c2RlcF9yb3V0aW5lcyArPSBzZXR1dHhlbnQgZ2V0dXR4ZW50IGVuZHV0eGVudCBnZXR1dHhpZCBnZXR1dHhsaW5lIFwKKytzeXNkZXBfcm91dGluZXMtJChPUFRJT05fRUdMSUJDX1VUTVBYKSBcCisrCQkrPSBzZXR1dHhlbnQgZ2V0dXR4ZW50IGVuZHV0eGVudCBnZXR1dHhpZCBnZXR1dHhsaW5lIFwKKyAJCSAgIHB1dHV0eGxpbmUgdXRtcHhuYW1lIHVwZHd0bXB4IGdldHV0bXB4IGdldHV0bXAKKyAKKyBzeXNkZXBfaGVhZGVycyArPSB1dG1weC5oIGJpdHMvdXRtcHguaAorZGlmZiAtLWdpdCBhL3N5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9NYWtlZmlsZSBiL3N5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9NYWtlZmlsZQoraW5kZXggMjIyMTIyZC4uNDUwOTM1NyAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9NYWtlZmlsZQorKysrIGIvc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L01ha2VmaWxlCitAQCAtMTEsMTkgKzExLDE4IEBAIGxpYm0tcm91dGluZXMgKz0gc19uZXh0dG93YXJkZmQKKyByb3V0aW5lcyArPSBtYXRoX2xkYmxfb3B0IG5sZGJsLWNvbXBhdAorIAorIGV4dHJhLWxpYnMgKz0gbGlibmxkYmwKKy1saWJubGRibC1jYWxscyA9IGFzcHJpbnRmIGRwcmludGYgZnByaW50ZiBmc2NhbmYgZndwcmludGYgZndzY2FuZiBpb3Zmc2NhbmYgXAorK2xpYm5sZGJsLWNhbGxzID0gYXNwcmludGYgZHByaW50ZiBmcHJpbnRmIGZzY2FuZiBpb3Zmc2NhbmYgXAorIAkJIG9ic3RhY2tfcHJpbnRmIG9ic3RhY2tfdnByaW50ZiBwcmludGYgc2NhbmYgc25wcmludGYgXAorLQkJIHNwcmludGYgc3NjYW5mIHN3cHJpbnRmIHN3c2NhbmYgdmFzcHJpbnRmIHZkcHJpbnRmIHZmcHJpbnRmIFwKKy0JCSB2ZnNjYW5mIHZmd3ByaW50ZiB2ZndzY2FuZiB2cHJpbnRmIHZzY2FuZiB2c25wcmludGYgXAorLQkJIHZzcHJpbnRmIHZzc2NhbmYgdnN3cHJpbnRmIHZzd3NjYW5mIHZ3cHJpbnRmIHZ3c2NhbmYgXAorLQkJIHdwcmludGYgd3NjYW5mIHByaW50Zl9mcCBwcmludGZfc2l6ZSBcCistCQkgZnByaW50Zl9jaGsgZndwcmludGZfY2hrIHByaW50Zl9jaGsgc25wcmludGZfY2hrIHNwcmludGZfY2hrIFwKKy0JCSBzd3ByaW50Zl9jaGsgdmZwcmludGZfY2hrIHZmd3ByaW50Zl9jaGsgdnByaW50Zl9jaGsgXAorLQkJIHZzbnByaW50Zl9jaGsgdnNwcmludGZfY2hrIHZzd3ByaW50Zl9jaGsgdndwcmludGZfY2hrIFwKKy0JCSB3cHJpbnRmX2NoayBhc3ByaW50Zl9jaGsgdmFzcHJpbnRmX2NoayBkcHJpbnRmX2NoayBcCisrCQkgc3ByaW50ZiBzc2NhbmYgdmFzcHJpbnRmIHZkcHJpbnRmIHZmcHJpbnRmIFwKKysJCSB2ZnNjYW5mIHZwcmludGYgdnNjYW5mIHZzbnByaW50ZiBcCisrCQkgdnNwcmludGYgdnNzY2FuZiBcCisrCQkgcHJpbnRmX2ZwIHByaW50Zl9zaXplIFwKKysJCSBmcHJpbnRmX2NoayBwcmludGZfY2hrIHNucHJpbnRmX2NoayBzcHJpbnRmX2NoayBcCisrCQkgdmZwcmludGZfY2hrIHZwcmludGZfY2hrIFwKKysJCSB2c25wcmludGZfY2hrIHZzcHJpbnRmX2NoayBcCisrCQkgYXNwcmludGZfY2hrIHZhc3ByaW50Zl9jaGsgZHByaW50Zl9jaGsgXAorIAkJIHZkcHJpbnRmX2NoayBvYnN0YWNrX3ByaW50Zl9jaGsgb2JzdGFja192cHJpbnRmX2NoayBcCisgCQkgc3lzbG9nIHN5c2xvZ19jaGsgdnN5c2xvZyB2c3lzbG9nX2NoayBcCistCQkgc3RyZm1vbiBzdHJmbW9uX2wgXAorIAkJIHN0cnRvbGQgc3RydG9sZF9sIHN0cnRvbGRpbnQgd2NzdG9sZCB3Y3N0b2xkX2wgd2NzdG9sZGludCBcCisgCQkgcWVjdnQgcWZjdnQgcWdjdnQgcWVjdnRfciBxZmN2dF9yIFwKKyAJCSBpc2luZiBpc25hbiBmaW5pdGUgc2lnbmJpdCBzY2FsYiBsb2cyIGxnYW1tYV9yIGNlaWwgXAorQEAgLTM4LDkgKzM3LDE1IEBAIGxpYm5sZGJsLWNhbGxzID0gYXNwcmludGYgZHByaW50ZiBmcHJpbnRmIGZzY2FuZiBmd3ByaW50ZiBmd3NjYW5mIGlvdmZzY2FuZiBcCisgCQkgY2FzaW5oIGNleHAgY2xvZyBjcHJvaiBjc2luIGNzaW5oIGNzcXJ0IGN0YW4gY3RhbmggY3BvdyBcCisgCQkgY2FicyBjYXJnIGNpbWFnIGNyZWFsIGNsb2cxMCBcCisgCQkgaXNvYzk5X3NjYW5mIGlzb2M5OV9mc2NhbmYgaXNvYzk5X3NzY2FuZiBcCistCQkgaXNvYzk5X3ZzY2FuZiBpc29jOTlfdmZzY2FuZiBpc29jOTlfdnNzY2FuZiBcCisrCQkgaXNvYzk5X3ZzY2FuZiBpc29jOTlfdmZzY2FuZiBpc29jOTlfdnNzY2FuZgorK2xpYm5sZGJsLWNhbGxzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgKz0gc3RyZm1vbiBzdHJmbW9uX2wKKytsaWJubGRibC1jYWxscy0kKE9QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPKSArPSBmd3ByaW50ZiBmd3NjYW5mIFwKKysJCSBzd3ByaW50ZiBzd3NjYW5mIHZmd3ByaW50ZiB2ZndzY2FuZiB2c3dwcmludGYgdnN3c2NhbmYgXAorKwkJIHZ3cHJpbnRmIHZ3c2NhbmYgd3ByaW50ZiB3c2NhbmYgZndwcmludGZfY2hrIHN3cHJpbnRmX2NoayBcCisrCQkgdmZ3cHJpbnRmX2NoayB2c3dwcmludGZfY2hrIHZ3cHJpbnRmX2NoayB3cHJpbnRmX2NoayBcCisgCQkgaXNvYzk5X3dzY2FuZiBpc29jOTlfZndzY2FuZiBpc29jOTlfc3dzY2FuZiBcCisgCQkgaXNvYzk5X3Z3c2NhbmYgaXNvYzk5X3Zmd3NjYW5mIGlzb2M5OV92c3dzY2FuZgorK2xpYm5sZGJsLWNhbGxzICs9ICQobGlibmxkYmwtY2FsbHMteSkKKyBsaWJubGRibC1yb3V0aW5lcyA9ICQobGlibmxkYmwtY2FsbHM6JT1ubGRibC0lKQorIGxpYm5sZGJsLWluaGliaXQtbyA9ICQob2JqZWN0LXN1ZmZpeGVzKQorIGxpYm5sZGJsLXN0YXRpYy1vbmx5LXJvdXRpbmVzID0gJChsaWJubGRibC1yb3V0aW5lcykKK2RpZmYgLS1naXQgYS9zeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvbmxkYmwtY29tcGF0LmMgYi9zeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvbmxkYmwtY29tcGF0LmMKK2luZGV4IDAxOTg4ODYuLjU1NTAxY2QgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvbmxkYmwtY29tcGF0LmMKKysrKyBiL3N5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9ubGRibC1jb21wYXQuYworQEAgLTI2LDYgKzI2LDcgQEAKKyAjaW5jbHVkZSA8bG9jYWxlL2xvY2FsZWluZm8uaD4KKyAjaW5jbHVkZSA8c3lzL3N5c2xvZy5oPgorICNpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpbmNsdWRlICJubGRibC1jb21wYXQuaCIKKyAKK0BAIC0zMywyMCArMzQsMTQgQEAgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdmZwcmludGYpCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdnNzY2FuZikKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92c3ByaW50ZikKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92ZnNjYW5mKQorLWxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3Zmd3NjYW5mKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3ZkcHJpbnRmKQorLWxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3Zzd3NjYW5mKQorLWxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3Zmd3ByaW50ZikKKy1saWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92c3dwcmludGYpCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdnNucHJpbnRmKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3Zhc3ByaW50ZikKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9vYnN0YWNrX3ZwcmludGYpCistbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX192ZndwcmludGZfY2hrKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fdnNucHJpbnRmX2NoaykKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX3ZmcHJpbnRmX2NoaykKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX3ZzeXNsb2dfY2hrKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fdnNwcmludGZfY2hrKQorLWxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fdnN3cHJpbnRmX2NoaykKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX3Zhc3ByaW50Zl9jaGspCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX192ZHByaW50Zl9jaGspCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX19vYnN0YWNrX3ZwcmludGZfY2hrKQorQEAgLTU0LDggKzQ5LDE3IEBAIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fdnN0cmZtb24pCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX192c3RyZm1vbl9sKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19faXNvYzk5X3Zzc2NhbmYpCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX19pc29jOTlfdmZzY2FuZikKKysKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworK2xpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3Zmd3NjYW5mKQorK2xpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3Zzd3NjYW5mKQorK2xpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3Zmd3ByaW50ZikKKytsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92c3dwcmludGYpCisrbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX192ZndwcmludGZfY2hrKQorK2xpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fdnN3cHJpbnRmX2NoaykKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX2lzb2M5OV92c3dzY2FuZikKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX2lzb2M5OV92ZndzY2FuZikKKysjZW5kaWYKKyAKKyBzdGF0aWMgdm9pZAorIF9fbmxkYmxfY2xlYW51cCAodm9pZCAqYXJnKQorQEAgLTExNyw2ICsxMjEsNyBAQCBfX25sZGJsX2ZwcmludGYgKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm10LCAuLi4pCisgfQorIHdlYWtfYWxpYXMgKF9fbmxkYmxfZnByaW50ZiwgX19ubGRibF9fSU9fZnByaW50ZikKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uIHdlYWtfZnVuY3Rpb24KKyBfX25sZGJsX2Z3cHJpbnRmIChGSUxFICpzdHJlYW0sIGNvbnN0IHdjaGFyX3QgKmZtdCwgLi4uKQorQEAgLTEzMCw2ICsxMzUsNyBAQCBfX25sZGJsX2Z3cHJpbnRmIChGSUxFICpzdHJlYW0sIGNvbnN0IHdjaGFyX3QgKmZtdCwgLi4uKQorIAorICAgcmV0dXJuIGRvbmU7CisgfQorKyNlbmRpZgorIAorIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCitAQCAtMjI2LDYgKzIzMiw3IEBAIF9fbmxkYmxfc25wcmludGYgKGNoYXIgKnMsIHNpemVfdCBtYXhsZW4sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorICAgcmV0dXJuIGRvbmU7CisgfQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KKyBfX25sZGJsX3N3cHJpbnRmICh3Y2hhcl90ICpzLCBzaXplX3QgbiwgY29uc3Qgd2NoYXJfdCAqZm10LCAuLi4pCitAQCAtMjM5LDYgKzI0Niw3IEBAIF9fbmxkYmxfc3dwcmludGYgKHdjaGFyX3QgKnMsIHNpemVfdCBuLCBjb25zdCB3Y2hhcl90ICpmbXQsIC4uLikKKyAKKyAgIHJldHVybiBkb25lOworIH0KKysjZW5kaWYKKyAKKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbiB3ZWFrX2Z1bmN0aW9uCitAQCAtMjY0LDYgKzI3Miw3IEBAIF9fbmxkYmxfdmRwcmludGYgKGludCBkLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJnKQorIH0KKyBsaWJjX2hpZGRlbl9kZWYgKF9fbmxkYmxfdmRwcmludGYpCisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbiB3ZWFrX2Z1bmN0aW9uCisgX19ubGRibF92ZndwcmludGYgKEZJTEUgKnMsIGNvbnN0IHdjaGFyX3QgKmZtdCwgdmFfbGlzdCBhcCkKK0BAIC0yNzUsNiArMjg0LDcgQEAgX19ubGRibF92ZndwcmludGYgKEZJTEUgKnMsIGNvbnN0IHdjaGFyX3QgKmZtdCwgdmFfbGlzdCBhcCkKKyAgIHJldHVybiByZXM7CisgfQorIGxpYmNfaGlkZGVuX2RlZiAoX19ubGRibF92ZndwcmludGYpCisrI2VuZGlmCisgCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KK0BAIC0yOTcsNiArMzA3LDcgQEAgX19ubGRibF92c25wcmludGYgKGNoYXIgKnN0cmluZywgc2l6ZV90IG1heGxlbiwgY29uc3QgY2hhciAqZm10LAorIGxpYmNfaGlkZGVuX2RlZiAoX19ubGRibF92c25wcmludGYpCisgd2Vha19hbGlhcyAoX19ubGRibF92c25wcmludGYsIF9fbmxkYmxfX192c25wcmludGYpCisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbiB3ZWFrX2Z1bmN0aW9uCisgX19ubGRibF92c3dwcmludGYgKHdjaGFyX3QgKnN0cmluZywgc2l6ZV90IG1heGxlbiwgY29uc3Qgd2NoYXJfdCAqZm10LAorQEAgLTMzMCw2ICszNDEsNyBAQCBfX25sZGJsX3dwcmludGYgKGNvbnN0IHdjaGFyX3QgKmZtdCwgLi4uKQorIAorICAgcmV0dXJuIGRvbmU7CisgfQorKyNlbmRpZgorIAorIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCitAQCAtNDE5LDYgKzQzMSw3IEBAIF9fbmxkYmxfc2NhbmYgKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorICAgcmV0dXJuIGRvbmU7CisgfQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KKyBfX25sZGJsX3Zmd3NjYW5mIChGSUxFICpzLCBjb25zdCB3Y2hhcl90ICpmbXQsIHZhX2xpc3QgYXApCitAQCAtNDkxLDYgKzUwNCw3IEBAIF9fbmxkYmxfd3NjYW5mIChjb25zdCB3Y2hhcl90ICpmbXQsIC4uLikKKyAKKyAgIHJldHVybiBkb25lOworIH0KKysjZW5kaWYKKyAKKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorQEAgLTUwNiw2ICs1MjAsNyBAQCBfX25sZGJsX19fZnByaW50Zl9jaGsgKEZJTEUgKnN0cmVhbSwgaW50IGZsYWcsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorICAgcmV0dXJuIGRvbmU7CisgfQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KKyBfX25sZGJsX19fZndwcmludGZfY2hrIChGSUxFICpzdHJlYW0sIGludCBmbGFnLCBjb25zdCB3Y2hhcl90ICpmbXQsIC4uLikKK0BAIC01MTksNiArNTM0LDcgQEAgX19ubGRibF9fX2Z3cHJpbnRmX2NoayAoRklMRSAqc3RyZWFtLCBpbnQgZmxhZywgY29uc3Qgd2NoYXJfdCAqZm10LCAuLi4pCisgCisgICByZXR1cm4gZG9uZTsKKyB9CisrI2VuZGlmCisgCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KK0BAIC01NjMsNiArNTc5LDcgQEAgX19ubGRibF9fX3NwcmludGZfY2hrIChjaGFyICpzLCBpbnQgZmxhZywgc2l6ZV90IHNsZW4sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorICAgcmV0dXJuIGRvbmU7CisgfQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KKyBfX25sZGJsX19fc3dwcmludGZfY2hrICh3Y2hhcl90ICpzLCBzaXplX3QgbiwgaW50IGZsYWcsIHNpemVfdCBzbGVuLAorQEAgLTU3Nyw2ICs1OTQsNyBAQCBfX25sZGJsX19fc3dwcmludGZfY2hrICh3Y2hhcl90ICpzLCBzaXplX3QgbiwgaW50IGZsYWcsIHNpemVfdCBzbGVuLAorIAorICAgcmV0dXJuIGRvbmU7CisgfQorKyNlbmRpZgorIAorIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCitAQCAtNTkwLDYgKzYwOCw3IEBAIF9fbmxkYmxfX192ZnByaW50Zl9jaGsgKEZJTEUgKnMsIGludCBmbGFnLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCisgfQorIGxpYmNfaGlkZGVuX2RlZiAoX19ubGRibF9fX3ZmcHJpbnRmX2NoaykKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCisgX19ubGRibF9fX3Zmd3ByaW50Zl9jaGsgKEZJTEUgKnMsIGludCBmbGFnLCBjb25zdCB3Y2hhcl90ICpmbXQsIHZhX2xpc3QgYXApCitAQCAtNjAxLDYgKzYyMCw3IEBAIF9fbmxkYmxfX192ZndwcmludGZfY2hrIChGSUxFICpzLCBpbnQgZmxhZywgY29uc3Qgd2NoYXJfdCAqZm10LCB2YV9saXN0IGFwKQorICAgcmV0dXJuIHJlczsKKyB9CisgbGliY19oaWRkZW5fZGVmIChfX25sZGJsX19fdmZ3cHJpbnRmX2NoaykKKysjZW5kaWYKKyAKKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorQEAgLTYzNSw2ICs2NTUsNyBAQCBfX25sZGJsX19fdnNwcmludGZfY2hrIChjaGFyICpzdHJpbmcsIGludCBmbGFnLCBzaXplX3Qgc2xlbiwgY29uc3QgY2hhciAqZm10LAorIH0KKyBsaWJjX2hpZGRlbl9kZWYgKF9fbmxkYmxfX192c3ByaW50Zl9jaGspCisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorIF9fbmxkYmxfX192c3dwcmludGZfY2hrICh3Y2hhcl90ICpzdHJpbmcsIHNpemVfdCBtYXhsZW4sIGludCBmbGFnLCBzaXplX3Qgc2xlbiwKK0BAIC02NjgsNiArNjg5LDcgQEAgX19ubGRibF9fX3dwcmludGZfY2hrIChpbnQgZmxhZywgY29uc3Qgd2NoYXJfdCAqZm10LCAuLi4pCisgCisgICByZXR1cm4gZG9uZTsKKyB9CisrI2VuZGlmCisgCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KK0BAIC03NzUsNiArNzk3LDcgQEAgX19ubGRibF9fX3ByaW50Zl9mcCAoRklMRSAqZnAsIGNvbnN0IHN0cnVjdCBwcmludGZfaW5mbyAqaW5mbywKKyAgIHJldHVybiBfX19wcmludGZfZnAgKGZwLCAmaW5mb19ub19sZGJsLCBhcmdzKTsKKyB9CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIHNzaXplX3QKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorIF9fbmxkYmxfc3RyZm1vbiAoY2hhciAqcywgc2l6ZV90IG1heHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorQEAgLTgyOSw2ICs4NTIsNyBAQCBfX25sZGJsX19fdnN0cmZtb25fbCAoY2hhciAqcywgc2l6ZV90IG1heHNpemUsIF9fbG9jYWxlX3QgbG9jLAorICAgcmV0dXJuIHJlczsKKyB9CisgbGliY19oaWRkZW5fZGVmIChfX25sZGJsX19fdnN0cmZtb25fbCkKKysjZW5kaWYKKyAKKyB2b2lkCisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KK0BAIC05NDEsNiArOTY1LDcgQEAgX19ubGRibF9fX2lzb2M5OV9zY2FuZiAoY29uc3QgY2hhciAqZm10LCAuLi4pCisgICByZXR1cm4gZG9uZTsKKyB9CisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorIF9fbmxkYmxfX19pc29jOTlfdmZ3c2NhbmYgKEZJTEUgKnMsIGNvbnN0IHdjaGFyX3QgKmZtdCwgdmFfbGlzdCBhcCkKK0BAIC0xMDE0LDYgKzEwMzksNyBAQCBfX25sZGJsX19faXNvYzk5X3dzY2FuZiAoY29uc3Qgd2NoYXJfdCAqZm10LCAuLi4pCisgCisgICByZXR1cm4gZG9uZTsKKyB9CisrI2VuZGlmCisgCisgI2lmIExPTkdfRE9VQkxFX0NPTVBBVChsaWJjLCBHTElCQ18yXzApCisgY29tcGF0X3N5bWJvbCAobGliYywgX19ubGRibF9fSU9fcHJpbnRmLCBfSU9fcHJpbnRmLCBHTElCQ18yXzApOworQEAgLTEwNTcsNiArMTA4Myw3IEBAIGNvbXBhdF9zeW1ib2wgKGxpYmMsIF9fbmxkYmxfcHJpbnRmX3NpemUsIHByaW50Zl9zaXplLCBHTElCQ18yXzEpOworIGNvbXBhdF9zeW1ib2wgKGxpYmMsIF9fbmxkYmxfX19zdHJmbW9uX2wsIF9fc3RyZm1vbl9sLCBHTElCQ18yXzEpOworICNlbmRpZgorICNpZiBMT05HX0RPVUJMRV9DT01QQVQobGliYywgR0xJQkNfMl8yKQorKyMgaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIGNvbXBhdF9zeW1ib2wgKGxpYmMsIF9fbmxkYmxfc3dwcmludGYsIHN3cHJpbnRmLCBHTElCQ18yXzIpOworIGNvbXBhdF9zeW1ib2wgKGxpYmMsIF9fbmxkYmxfdndwcmludGYsIHZ3cHJpbnRmLCBHTElCQ18yXzIpOworIGNvbXBhdF9zeW1ib2wgKGxpYmMsIF9fbmxkYmxfd3ByaW50Ziwgd3ByaW50ZiwgR0xJQkNfMl8yKTsKK0BAIC0xMDY5LDYgKzEwOTYsNyBAQCBjb21wYXRfc3ltYm9sIChsaWJjLCBfX25sZGJsX3Zmd3NjYW5mLCB2ZndzY2FuZiwgR0xJQkNfMl8yKTsKKyBjb21wYXRfc3ltYm9sIChsaWJjLCBfX25sZGJsX3Zzd3NjYW5mLCB2c3dzY2FuZiwgR0xJQkNfMl8yKTsKKyBjb21wYXRfc3ltYm9sIChsaWJjLCBfX25sZGJsX3Z3c2NhbmYsIHZ3c2NhbmYsIEdMSUJDXzJfMik7CisgY29tcGF0X3N5bWJvbCAobGliYywgX19ubGRibF93c2NhbmYsIHdzY2FuZiwgR0xJQkNfMl8yKTsKKysjIGVuZGlmCisgI2VuZGlmCisgI2lmIExPTkdfRE9VQkxFX0NPTVBBVChsaWJjLCBHTElCQ18yXzMpCisgY29tcGF0X3N5bWJvbCAobGliYywgX19ubGRibF9zdHJmbW9uX2wsIHN0cmZtb25fbCwgR0xJQkNfMl8zKTsKK2RpZmYgLS1naXQgYS9zeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvbmxkYmwtY29tcGF0LmggYi9zeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvbmxkYmwtY29tcGF0LmgKK2luZGV4IDBkMmM4YWYuLmY0Y2VhNTAgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvbmxkYmwtY29tcGF0LmgKKysrKyBiL3N5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9ubGRibC1jb21wYXQuaAorQEAgLTMwLDYgKzMwLDcgQEAKKyAjaW5jbHVkZSA8bWF0aC5oPgorICNpbmNsdWRlIDxtb25ldGFyeS5oPgorICNpbmNsdWRlIDxzeXMvc3lzbG9nLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgCisgLyogRGVjbGFyZSB0aGUgX19ubGRibF9OQU1FIGZ1bmN0aW9uIHRoZSB3cmFwcGVycyBjYWxsIHRoYXQncyBpbiBsaWJjLnNvLiAgKi8KK0BAIC0zNywxOSArMzgsMTUgQEAKKyAKKyBOTERCTF9ERUNMIChfSU9fdmZzY2FuZik7CisgTkxEQkxfREVDTCAodmZzY2FuZik7CistTkxEQkxfREVDTCAodmZ3c2NhbmYpOworIE5MREJMX0RFQ0wgKG9ic3RhY2tfdnByaW50Zik7CisgTkxEQkxfREVDTCAodmFzcHJpbnRmKTsKKyBOTERCTF9ERUNMIChkcHJpbnRmKTsKKyBOTERCTF9ERUNMICh2ZHByaW50Zik7CisgTkxEQkxfREVDTCAoZnByaW50Zik7CisgTkxEQkxfREVDTCAodmZwcmludGYpOworLU5MREJMX0RFQ0wgKHZmd3ByaW50Zik7CisgTkxEQkxfREVDTCAodnNucHJpbnRmKTsKKyBOTERCTF9ERUNMICh2c3ByaW50Zik7CisgTkxEQkxfREVDTCAodnNzY2FuZik7CistTkxEQkxfREVDTCAodnN3cHJpbnRmKTsKKy1OTERCTF9ERUNMICh2c3dzY2FuZik7CisgTkxEQkxfREVDTCAoX19hc3ByaW50Zik7CisgTkxEQkxfREVDTCAoYXNwcmludGYpOworIE5MREJMX0RFQ0wgKF9fcHJpbnRmX2ZwKTsKK0BAIC02NiwxMiArNjMsMTggQEAgTkxEQkxfREVDTCAoX19pc29jOTlfc3NjYW5mKTsKKyBOTERCTF9ERUNMIChfX2lzb2M5OV92c2NhbmYpOworIE5MREJMX0RFQ0wgKF9faXNvYzk5X3Zmc2NhbmYpOworIE5MREJMX0RFQ0wgKF9faXNvYzk5X3Zzc2NhbmYpOworKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisrTkxEQkxfREVDTCAodmZ3c2NhbmYpOworK05MREJMX0RFQ0wgKHZmd3ByaW50Zik7CisrTkxEQkxfREVDTCAodnN3cHJpbnRmKTsKKytOTERCTF9ERUNMICh2c3dzY2FuZik7CisgTkxEQkxfREVDTCAoX19pc29jOTlfd3NjYW5mKTsKKyBOTERCTF9ERUNMIChfX2lzb2M5OV9md3NjYW5mKTsKKyBOTERCTF9ERUNMIChfX2lzb2M5OV9zd3NjYW5mKTsKKyBOTERCTF9ERUNMIChfX2lzb2M5OV92d3NjYW5mKTsKKyBOTERCTF9ERUNMIChfX2lzb2M5OV92ZndzY2FuZik7CisgTkxEQkxfREVDTCAoX19pc29jOTlfdnN3c2NhbmYpOworKyNlbmRpZgorIAorIC8qIFRoaXMgb25lIGRvZXMgbm90IGV4aXN0IGluIHRoZSBub3JtYWwgaW50ZXJmYWNlLCBvbmx5CisgICAgX19ubGRibF9fX3ZzdHJmbW9uIHJlYWxseSBleGlzdHMuICAqLworQEAgLTgyLDIyICs4NSwyMyBAQCBleHRlcm4gc3NpemVfdCBfX25sZGJsX19fdnN0cmZtb24gKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIHZhX2xpc3QpCisgICAgc2luY2Ugd2UgZG9uJ3QgY29tcGlsZSB3aXRoIF9GT1JUSUZZX1NPVVJDRS4gICovCisgZXh0ZXJuIGludCBfX25sZGJsX19fdmZwcmludGZfY2hrIChGSUxFICpfX3Jlc3RyaWN0LCBpbnQsCisgCQkJCSAgIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsIF9HX3ZhX2xpc3QpOworLWV4dGVybiBpbnQgX19ubGRibF9fX3Zmd3ByaW50Zl9jaGsgKEZJTEUgKl9fcmVzdHJpY3QsIGludCwKKy0JCQkJICAgIGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QsIF9fZ251Y192YV9saXN0KTsKKyBleHRlcm4gaW50IF9fbmxkYmxfX192c3ByaW50Zl9jaGsgKGNoYXIgKl9fcmVzdHJpY3QsIGludCwgc2l6ZV90LAorIAkJCQkgICBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LCBfR192YV9saXN0KSBfX1RIUk9XOworIGV4dGVybiBpbnQgX19ubGRibF9fX3ZzbnByaW50Zl9jaGsgKGNoYXIgKl9fcmVzdHJpY3QsIHNpemVfdCwgaW50LCBzaXplX3QsCisgCQkJCSAgICBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LCBfR192YV9saXN0KQorICAgX19USFJPVzsKKy1leHRlcm4gaW50IF9fbmxkYmxfX192c3dwcmludGZfY2hrICh3Y2hhcl90ICpfX3Jlc3RyaWN0LCBzaXplX3QsIGludCwgc2l6ZV90LAorLQkJCQkgICAgY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCwgX19nbnVjX3ZhX2xpc3QpCistICBfX1RIUk9XOworIGV4dGVybiBpbnQgX19ubGRibF9fX3Zhc3ByaW50Zl9jaGsgKGNoYXIgKiosIGludCwgY29uc3QgY2hhciAqLCBfR192YV9saXN0KQorICAgX19USFJPVzsKKyBleHRlcm4gaW50IF9fbmxkYmxfX192ZHByaW50Zl9jaGsgKGludCwgaW50LCBjb25zdCBjaGFyICosIF9HX3ZhX2xpc3QpOworIGV4dGVybiBpbnQgX19ubGRibF9fX29ic3RhY2tfdnByaW50Zl9jaGsgKHN0cnVjdCBvYnN0YWNrICosIGludCwgY29uc3QgY2hhciAqLAorIAkJCQkJICBfR192YV9saXN0KSBfX1RIUk9XOworIGV4dGVybiB2b2lkIF9fbmxkYmxfX192c3lzbG9nX2NoayAoaW50LCBpbnQsIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CistCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKytleHRlcm4gaW50IF9fbmxkYmxfX192ZndwcmludGZfY2hrIChGSUxFICpfX3Jlc3RyaWN0LCBpbnQsCisrCQkJCSAgICBjb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0LCBfX2dudWNfdmFfbGlzdCk7CisrZXh0ZXJuIGludCBfX25sZGJsX19fdnN3cHJpbnRmX2NoayAod2NoYXJfdCAqX19yZXN0cmljdCwgc2l6ZV90LCBpbnQsIHNpemVfdCwKKysJCQkJICAgIGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QsIF9fZ251Y192YV9saXN0KQorKyAgX19USFJPVzsKKysjZW5kaWYKKyAKKyAjZW5kaWYgLyogX19OTERCTF9DT01QQVRfSCAqLworZGlmZiAtLWdpdCBhL3N5c2RlcHMvbnB0bC9NYWtlZmlsZSBiL3N5c2RlcHMvbnB0bC9NYWtlZmlsZQoraW5kZXggZTkzMzlhMy4uNzgyMDA5YiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvbnB0bC9NYWtlZmlsZQorKysrIGIvc3lzZGVwcy9ucHRsL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOSBAQAorIAorIGlmZXEgKCQoc3ViZGlyKSxucHRsKQorIGxpYnB0aHJlYWQtc3lzZGVwX3JvdXRpbmVzICs9IGVycm5vLWxvYworK2lmZXEgKCQoT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TKSxuKQorK3N5c2RlcF9yb3V0aW5lcyArPSBzbWFsbC1tYWNyb3MtZm5zCisrZW5kaWYKKyBlbmRpZgorIAorIGlmZXEgKCQoc3ViZGlyKSxydCkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL25wdGwvYml0cy9saWJjLWxvY2suaCBiL3N5c2RlcHMvbnB0bC9iaXRzL2xpYmMtbG9jay5oCitpbmRleCA1NTk5Y2YxLi5iODM5Mzc4IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9ucHRsL2JpdHMvbGliYy1sb2NrLmgKKysrKyBiL3N5c2RlcHMvbnB0bC9iaXRzL2xpYmMtbG9jay5oCitAQCAtMjQsNiArMjQsMTQgQEAKKyAjaW5jbHVkZSA8c3RkZGVmLmg+CisgCisgCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxsb3dsZXZlbGxvY2suaD4KKysjIGluY2x1ZGUgPHRscy5oPgorKyMgaW5jbHVkZSA8cHRocmVhZC1mdW5jdGlvbnMuaD4KKysjIGluY2x1ZGUgPGVycm5vLmg+IC8qIEZvciBFQlVTWS4gICovCisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPiAvKiBGb3IgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MuICAqLworKyNlbmRpZgorKworIC8qIE11dGV4IHR5cGUuICAqLworICNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgX0lPX01UU0FGRV9JTworICMgaWYgKCFJU19JTiAobGliYykgJiYgIUlTX0lOIChsaWJwdGhyZWFkKSkgfHwgIWRlZmluZWQgX0xJQkMKK0BAIC04Nyw2ICs5NSwxNSBAQCB0eXBlZGVmIHN0cnVjdCBfX2xpYmNfbG9ja19yZWN1cnNpdmVfb3BhcXVlX18gX19saWJjX2xvY2tfcmVjdXJzaXZlX3Q7CisgCisgLyogTG9jayB0aGUgcmVjdXJzaXZlIG5hbWVkIGxvY2sgdmFyaWFibGUuICAqLworICNpZiBkZWZpbmVkIF9MSUJDICYmIChJU19JTiAobGliYykgfHwgSVNfSU4gKGxpYnB0aHJlYWQpKQorKyMgaWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgIT0gMQorKy8qIEVHTElCQzogRGVjbGFyZSB3cmFwcGVyIGZ1bmN0aW9uIGZvciBhIGJpZyBtYWNybyBpZiBlaXRoZXIKKysgICAhX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1Mgb3Igd2UgYXJlIHVzaW5nIGEgYmFjayBkb29yIGZyb20KKysgICBzbWFsbC1tYWNyb3MtZm5zLmMgKF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TID09IDIpLiAgKi8KKytleHRlcm4gdm9pZCBfX2xpYmNfbG9ja19sb2NrX3JlY3Vyc2l2ZV9mbiAoX19saWJjX2xvY2tfcmVjdXJzaXZlX3QgKik7CisrbGliY19oaWRkZW5fcHJvdG8gKF9fbGliY19sb2NrX2xvY2tfcmVjdXJzaXZlX2ZuKTsKKysjIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICE9IDEgKi8KKysjIGlmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TCisrCisgIyBkZWZpbmUgX19saWJjX2xvY2tfbG9ja19yZWN1cnNpdmUoTkFNRSkgXAorICAgZG8gewkJCQkJCQkJCSAgICAgIFwKKyAgICAgdm9pZCAqc2VsZiA9IFRIUkVBRF9TRUxGOwkJCQkJCSAgICAgIFwKK0BAIC05Nyw2ICsxMTQsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgX19saWJjX2xvY2tfcmVjdXJzaXZlX29wYXF1ZV9fIF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90OworICAgICAgIH0JCQkJCQkJCQkgICAgICBcCisgICAgICsrKE5BTUUpLmNudDsJCQkJCQkJICAgICAgXAorICAgfSB3aGlsZSAoMCkKKysjIGVsc2UKKysjIGRlZmluZSBfX2xpYmNfbG9ja19sb2NrX3JlY3Vyc2l2ZShOQU1FKQkJCQlcCisrICBfX2xpYmNfbG9ja19sb2NrX3JlY3Vyc2l2ZV9mbiAoJihOQU1FKSkKKysjIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICovCisgI2Vsc2UKKyAjIGRlZmluZSBfX2xpYmNfbG9ja19sb2NrX3JlY3Vyc2l2ZShOQU1FKSBcCisgICBfX2xpYmNfbWF5YmVfY2FsbCAoX19wdGhyZWFkX211dGV4X2xvY2ssICgmKE5BTUUpLm11dGV4KSwgMCkKK0BAIC0xMDQsNiArMTI1LDE0IEBAIHR5cGVkZWYgc3RydWN0IF9fbGliY19sb2NrX3JlY3Vyc2l2ZV9vcGFxdWVfXyBfX2xpYmNfbG9ja19yZWN1cnNpdmVfdDsKKyAKKyAvKiBUcnkgdG8gbG9jayB0aGUgcmVjdXJzaXZlIG5hbWVkIGxvY2sgdmFyaWFibGUuICAqLworICNpZiBkZWZpbmVkIF9MSUJDICYmIChJU19JTiAobGliYykgfHwgSVNfSU4gKGxpYnB0aHJlYWQpKQorKyMgaWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgIT0gMQorKy8qIEVHTElCQzogRGVjbGFyZSB3cmFwcGVyIGZ1bmN0aW9uIGZvciBhIGJpZyBtYWNybyBpZiBlaXRoZXIKKysgICAhX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1Mgb3Igd2UgYXJlIHVzaW5nIGEgYmFjayBkb29yIGZyb20KKysgICBzbWFsbC1tYWNyb3MtZm5zLmMgKF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TID09IDIpLiAgKi8KKytleHRlcm4gaW50IF9fbGliY19sb2NrX3RyeWxvY2tfcmVjdXJzaXZlX2ZuIChfX2xpYmNfbG9ja19yZWN1cnNpdmVfdCAqKTsKKytsaWJjX2hpZGRlbl9wcm90byAoX19saWJjX2xvY2tfdHJ5bG9ja19yZWN1cnNpdmVfZm4pOworKyMgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgIT0gMSAqLworKyMgaWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MKKyAjIGRlZmluZSBfX2xpYmNfbG9ja190cnlsb2NrX3JlY3Vyc2l2ZShOQU1FKSBcCisgICAoewkJCQkJCQkJCSAgICAgIFwKKyAgICAgaW50IHJlc3VsdCA9IDA7CQkJCQkJCSAgICAgIFwKK0BAIC0xMjIsNiArMTUxLDEwIEBAIHR5cGVkZWYgc3RydWN0IF9fbGliY19sb2NrX3JlY3Vyc2l2ZV9vcGFxdWVfXyBfX2xpYmNfbG9ja19yZWN1cnNpdmVfdDsKKyAgICAgICArKyhOQU1FKS5jbnQ7CQkJCQkJCSAgICAgIFwKKyAgICAgcmVzdWx0OwkJCQkJCQkJICAgICAgXAorICAgfSkKKysjIGVsc2UKKysjIGRlZmluZSBfX2xpYmNfbG9ja190cnlsb2NrX3JlY3Vyc2l2ZShOQU1FKSBcCisrICBfX2xpYmNfbG9ja190cnlsb2NrX3JlY3Vyc2l2ZV9mbiAoJihOQU1FKSkKKysjIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICovCisgI2Vsc2UKKyAjIGRlZmluZSBfX2xpYmNfbG9ja190cnlsb2NrX3JlY3Vyc2l2ZShOQU1FKSBcCisgICBfX2xpYmNfbWF5YmVfY2FsbCAoX19wdGhyZWFkX211dGV4X3RyeWxvY2ssICgmKE5BTUUpLm11dGV4KSwgMCkKK0BAIC0xMjksNiArMTYyLDE0IEBAIHR5cGVkZWYgc3RydWN0IF9fbGliY19sb2NrX3JlY3Vyc2l2ZV9vcGFxdWVfXyBfX2xpYmNfbG9ja19yZWN1cnNpdmVfdDsKKyAKKyAvKiBVbmxvY2sgdGhlIHJlY3Vyc2l2ZSBuYW1lZCBsb2NrIHZhcmlhYmxlLiAgKi8KKyAjaWYgZGVmaW5lZCBfTElCQyAmJiAoSVNfSU4gKGxpYmMpIHx8IElTX0lOIChsaWJwdGhyZWFkKSkKKysjIGlmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICE9IDEKKysvKiBFR0xJQkM6IERlY2xhcmUgd3JhcHBlciBmdW5jdGlvbiBmb3IgYSBiaWcgbWFjcm8gaWYgZWl0aGVyCisrICAgIV9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TLCBvciB3ZSBhcmUgdXNpbmcgYSBiYWNrIGRvb3IgZnJvbQorKyAgIHNtYWxsLW1hY3Jvcy1mbnMuYyAoX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgPT0gMikuICAqLworK2V4dGVybiB2b2lkIF9fbGliY19sb2NrX3VubG9ja19yZWN1cnNpdmVfZm4gKF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90ICopOworK2xpYmNfaGlkZGVuX3Byb3RvIChfX2xpYmNfbG9ja191bmxvY2tfcmVjdXJzaXZlX2ZuKTsKKysjIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICE9IDEgKi8KKysjIGlmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TCisgLyogV2UgZG8gbm8gZXJyb3IgY2hlY2tpbmcgaGVyZS4gICovCisgIyBkZWZpbmUgX19saWJjX2xvY2tfdW5sb2NrX3JlY3Vyc2l2ZShOQU1FKSBcCisgICBkbyB7CQkJCQkJCQkJICAgICAgXAorQEAgLTEzOCw2ICsxNzksMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgX19saWJjX2xvY2tfcmVjdXJzaXZlX29wYXF1ZV9fIF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90OworIAlsbGxfdW5sb2NrICgoTkFNRSkubG9jaywgTExMX1BSSVZBVEUpOwkJCQkgICAgICBcCisgICAgICAgfQkJCQkJCQkJCSAgICAgIFwKKyAgIH0gd2hpbGUgKDApCisrIyBlbHNlCisrIyBkZWZpbmUgX19saWJjX2xvY2tfdW5sb2NrX3JlY3Vyc2l2ZShOQU1FKSBcCisrICBfX2xpYmNfbG9ja191bmxvY2tfcmVjdXJzaXZlX2ZuICgmKE5BTUUpKQorKyMgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgKi8KKyAjZWxzZQorICMgZGVmaW5lIF9fbGliY19sb2NrX3VubG9ja19yZWN1cnNpdmUoTkFNRSkgXAorICAgX19saWJjX21heWJlX2NhbGwgKF9fcHRocmVhZF9tdXRleF91bmxvY2ssICgmKE5BTUUpLm11dGV4KSwgMCkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL25wdGwvYml0cy9saWJjLWxvY2tQLmggYi9zeXNkZXBzL25wdGwvYml0cy9saWJjLWxvY2tQLmgKK2luZGV4IGY1NWY2MjEuLmRhOTg4NjkgMTAwNjQ0CistLS0gYS9zeXNkZXBzL25wdGwvYml0cy9saWJjLWxvY2tQLmgKKysrKyBiL3N5c2RlcHMvbnB0bC9iaXRzL2xpYmMtbG9ja1AuaAorQEAgLTMzLDYgKzMzLDggQEAKKyAjaW5jbHVkZSA8bG93bGV2ZWxsb2NrLmg+CisgI2luY2x1ZGUgPHRscy5oPgorICNpbmNsdWRlIDxwdGhyZWFkLWZ1bmN0aW9ucy5oPgorKyNpbmNsdWRlIDxlcnJuby5oPiAvKiBGb3IgRUJVU1kuICAqLworKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPiAvKiBGb3IgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MuICAqLworIAorICNpZiBJU19JTiAobGlicHRocmVhZCkKKyAvKiBUaGlzIGdldHMgdXMgdGhlIGRlY2xhcmF0aW9ucyBvZiB0aGUgX19wdGhyZWFkXyogaW50ZXJuYWwgbmFtZXMsCitAQCAtMTcxLDEwICsxNzMsMjIgQEAgdHlwZWRlZiBwdGhyZWFkX2tleV90IF9fbGliY19rZXlfdDsKKyAKKyAvKiBMb2NrIHRoZSBuYW1lZCBsb2NrIHZhcmlhYmxlLiAgKi8KKyAjaWYgSVNfSU4gKGxpYmMpIHx8IElTX0lOIChsaWJwdGhyZWFkKQorLSMgaWZuZGVmIF9fbGliY19sb2NrX2xvY2sKKy0jICBkZWZpbmUgX19saWJjX2xvY2tfbG9jayhOQU1FKSBcCisrIyBpZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAhPSAxCisrLyogRUdMSUJDOiBEZWNsYXJlIHdyYXBwZXIgZnVuY3Rpb24gZm9yIGEgYmlnIG1hY3JvIGlmIGVpdGhlcgorKyAgICFfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyBvciB3ZSBhcmUgdXNpbmcgYSBiYWNrIGRvb3IgZnJvbQorKyAgIHNtYWxsLW1hY3Jvcy1mbnMuYyAoX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgPT0gMikuICAqLworK2V4dGVybiB2b2lkIF9fbGliY19sb2NrX2xvY2tfZm4gKF9fbGliY19sb2NrX3QgKik7CisrbGliY19oaWRkZW5fcHJvdG8gKF9fbGliY19sb2NrX2xvY2tfZm4pOworKyMgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgIT0gMSAqLworKyMgaWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MKKysjICBpZm5kZWYgX19saWJjX2xvY2tfbG9jaworKyMgICBkZWZpbmUgX19saWJjX2xvY2tfbG9jayhOQU1FKSBcCisgICAoeyBsbGxfbG9jayAoTkFNRSwgTExMX1BSSVZBVEUpOyAwOyB9KQorLSMgZW5kaWYKKysjICBlbmRpZgorKyMgZWxzZQorKyMgIGRlZmluZSBfX2xpYmNfbG9ja19sb2NrKE5BTUUpICAgICAgICAgICAgICAgXAorKyAgX19saWJjX2xvY2tfbG9ja19mbiAoJihOQU1FKSkKKysjIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICovCisgI2Vsc2UKKyAjIHVuZGVmIF9fbGliY19sb2NrX2xvY2sKKyAjIGRlZmluZSBfX2xpYmNfbG9ja19sb2NrKE5BTUUpIFwKK0BAIC0xODcsMTAgKzIwMSwyMiBAQCB0eXBlZGVmIHB0aHJlYWRfa2V5X3QgX19saWJjX2tleV90OworIAorIC8qIFRyeSB0byBsb2NrIHRoZSBuYW1lZCBsb2NrIHZhcmlhYmxlLiAgKi8KKyAjaWYgSVNfSU4gKGxpYmMpIHx8IElTX0lOIChsaWJwdGhyZWFkKQorLSMgaWZuZGVmIF9fbGliY19sb2NrX3RyeWxvY2sKKy0jICBkZWZpbmUgX19saWJjX2xvY2tfdHJ5bG9jayhOQU1FKSBcCisrIyBpZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAhPSAxCisrLyogRUdMSUJDOiBEZWNsYXJlIHdyYXBwZXIgZnVuY3Rpb24gZm9yIGEgYmlnIG1hY3JvIGlmIGVpdGhlcgorKyAgICFfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyBvciB3ZSBhcmUgdXNpbmcgYSBiYWNrIGRvb3IgZnJvbQorKyAgIHNtYWxsLW1hY3Jvcy1mbnMuYyAoX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgPT0gMikuICAqLworK2V4dGVybiBpbnQgX19saWJjX2xvY2tfdHJ5bG9ja19mbiAoX19saWJjX2xvY2tfdCAqKTsKKytsaWJjX2hpZGRlbl9wcm90byAoX19saWJjX2xvY2tfdHJ5bG9ja19mbik7CisrIyBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAhPSAxICovCisrIyBpZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUworKyMgIGlmbmRlZiBfX2xpYmNfbG9ja190cnlsb2NrCisrIyAgIGRlZmluZSBfX2xpYmNfbG9ja190cnlsb2NrKE5BTUUpIFwKKyAgIGxsbF90cnlsb2NrIChOQU1FKQorLSMgZW5kaWYKKysjICBlbmRpZgorKyMgZWxzZQorKyMgZGVmaW5lIF9fbGliY19sb2NrX3RyeWxvY2soTkFNRSkgXAorKyAgX19saWJjX2xvY2tfdHJ5bG9ja19mbiAoJihOQU1FKSkKKysjIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICovCisgI2Vsc2UKKyAjIHVuZGVmIF9fbGliY19sb2NrX3RyeWxvY2sKKyAjIGRlZmluZSBfX2xpYmNfbG9ja190cnlsb2NrKE5BTUUpIFwKK0BAIC0yMDYsOCArMjMyLDIwIEBAIHR5cGVkZWYgcHRocmVhZF9rZXlfdCBfX2xpYmNfa2V5X3Q7CisgCisgLyogVW5sb2NrIHRoZSBuYW1lZCBsb2NrIHZhcmlhYmxlLiAgKi8KKyAjaWYgSVNfSU4gKGxpYmMpIHx8IElTX0lOIChsaWJwdGhyZWFkKQorKyMgaWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgIT0gMQorKy8qIEVHTElCQzogRGVjbGFyZSB3cmFwcGVyIGZ1bmN0aW9uIGZvciBhIGJpZyBtYWNybyBpZiBlaXRoZXIKKysgICAhX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MsIG9yIHdlIGFyZSB1c2luZyBhIGJhY2sgZG9vciBmcm9tCisrICAgc21hbGwtbWFjcm9zLWZucy5jIChfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyA9PSAyKS4gICovCisrZXh0ZXJuIHZvaWQgX19saWJjX2xvY2tfdW5sb2NrX2ZuIChfX2xpYmNfbG9ja190ICopOworK2xpYmNfaGlkZGVuX3Byb3RvIChfX2xpYmNfbG9ja191bmxvY2tfZm4pOworKyMgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgIT0gMSAqLworKyMgaWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MKKyAjIGRlZmluZSBfX2xpYmNfbG9ja191bmxvY2soTkFNRSkgXAorICAgbGxsX3VubG9jayAoTkFNRSwgTExMX1BSSVZBVEUpCisrIyBlbHNlCisrIyBkZWZpbmUgX19saWJjX2xvY2tfdW5sb2NrKE5BTUUpIFwKKysgIF9fbGliY19sb2NrX3VubG9ja19mbiAoJihOQU1FKSkKKysjIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICovCisgI2Vsc2UKKyAjIGRlZmluZSBfX2xpYmNfbG9ja191bmxvY2soTkFNRSkgXAorICAgX19saWJjX21heWJlX2NhbGwgKF9fcHRocmVhZF9tdXRleF91bmxvY2ssICgmKE5BTUUpKSwgMCkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL25wdGwvc21hbGwtbWFjcm9zLWZucy5jIGIvc3lzZGVwcy9ucHRsL3NtYWxsLW1hY3Jvcy1mbnMuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmY3NTEwNTMKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvbnB0bC9zbWFsbC1tYWNyb3MtZm5zLmMKK0BAIC0wLDAgKzEsNzIgQEAKKysvKiBFR0xJQkM6IGZ1bmN0aW9uIHdyYXBwZXJzIGZvciBiaWcgbWFjcm9zLgorKyAgIENvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKysgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorKyAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsCisrICAgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorKyAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKysKKysvKiBIYW5kbGUgbWFjcm9zIGZyb20gLi9iaXRzL2xpYmMtbG9jay5oLiAgKi8KKysjaWYgZGVmaW5lZCBfTElCQyAmJiAoIWRlZmluZWQgTk9UX0lOX2xpYmMgfHwgZGVmaW5lZCBJU19JTl9saWJwdGhyZWFkKQorKworKy8qIEdldCB0aGUgbWFjcm9zIGZvciBmdW5jdGlvbiBib2RpZXMgdGhyb3VnaCBhIGJhY2sgZG9vci4gICovCisrIyB1bmRlZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUworKyMgZGVmaW5lIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TIDIKKysjIGluY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CisrCisrdm9pZAorK19fbGliY19sb2NrX2xvY2tfZm4gKF9fbGliY19sb2NrX3QgKm5hbWUpCisreworKyAgX19saWJjX2xvY2tfbG9jayAoKm5hbWUpOworK30KKytsaWJjX2hpZGRlbl9kZWYgKF9fbGliY19sb2NrX2xvY2tfZm4pOworKworK3ZvaWQKKytfX2xpYmNfbG9ja19sb2NrX3JlY3Vyc2l2ZV9mbiAoX19saWJjX2xvY2tfcmVjdXJzaXZlX3QgKm5hbWUpCisreworKyAgX19saWJjX2xvY2tfbG9ja19yZWN1cnNpdmUgKCpuYW1lKTsKKyt9CisrbGliY19oaWRkZW5fZGVmIChfX2xpYmNfbG9ja19sb2NrX3JlY3Vyc2l2ZV9mbik7CisrCisraW50CisrX19saWJjX2xvY2tfdHJ5bG9ja19mbiAoX19saWJjX2xvY2tfdCAqbmFtZSkKKyt7CisrICByZXR1cm4gX19saWJjX2xvY2tfdHJ5bG9jayAoKm5hbWUpOworK30KKytsaWJjX2hpZGRlbl9kZWYgKF9fbGliY19sb2NrX3RyeWxvY2tfZm4pOworKworK2ludAorK19fbGliY19sb2NrX3RyeWxvY2tfcmVjdXJzaXZlX2ZuIChfX2xpYmNfbG9ja19yZWN1cnNpdmVfdCAqbmFtZSkKKyt7CisrICByZXR1cm4gX19saWJjX2xvY2tfdHJ5bG9ja19yZWN1cnNpdmUgKCpuYW1lKTsKKyt9CisrbGliY19oaWRkZW5fZGVmIChfX2xpYmNfbG9ja190cnlsb2NrX3JlY3Vyc2l2ZV9mbik7CisrCisrdm9pZAorK19fbGliY19sb2NrX3VubG9ja19mbiAoX19saWJjX2xvY2tfdCAqbmFtZSkKKyt7CisrICBfX2xpYmNfbG9ja191bmxvY2sgKCpuYW1lKTsKKyt9CisrbGliY19oaWRkZW5fZGVmIChfX2xpYmNfbG9ja191bmxvY2tfZm4pOworKworK3ZvaWQKKytfX2xpYmNfbG9ja191bmxvY2tfcmVjdXJzaXZlX2ZuIChfX2xpYmNfbG9ja19yZWN1cnNpdmVfdCAqbmFtZSkKKyt7CisrICBfX2xpYmNfbG9ja191bmxvY2tfcmVjdXJzaXZlICgqbmFtZSk7CisrfQorK2xpYmNfaGlkZGVuX2RlZiAoX19saWJjX2xvY2tfdW5sb2NrX3JlY3Vyc2l2ZV9mbik7CisrCisrI2VuZGlmIC8qZGVmaW5lZCBfTElCQyAmJiAoIWRlZmluZWQgTk9UX0lOX2xpYmMgfHwgZGVmaW5lZCBJU19JTl9saWJwdGhyZWFkKSovCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZ2V0aG9zdGlkLmMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9nZXRob3N0aWQuYworaW5kZXggMjZlNDY5Mi4uZDBhMjZjOCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2dldGhvc3RpZC5jCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9nZXRob3N0aWQuYworQEAgLTIxLDYgKzIxLDcgQEAKKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPG5ldGRiLmg+CisgI2luY2x1ZGUgPG5vdC1jYW5jZWwuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjZGVmaW5lIEhPU1RJREZJTEUgIi9ldGMvaG9zdGlkIgorIAorQEAgLTg5LDYgKzkwLDcgQEAgZ2V0aG9zdGlkICh2b2lkKQorIAlyZXR1cm4gaWQ7CisgICAgIH0KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0lORVQKKyAgIC8qIEdldHRpbmcgZnJvbSB0aGUgZmlsZSB3YXMgbm90IHN1Y2Nlc3NmdWwuICBBbiBpbnRlbGxpZ2VudCBndWVzcyBmb3IKKyAgICAgIGEgdW5pcXVlIG51bWJlciBvZiBhIGhvc3QgaXMgaXRzIElQIGFkZHJlc3MuICBSZXR1cm4gdGhpcy4gICovCisgICBpZiAoX19nZXRob3N0bmFtZSAoaG9zdG5hbWUsIE1BWEhPU1ROQU1FTEVOKSA8IDAgfHwgaG9zdG5hbWVbMF0gPT0gJ1wwJykKK0BAIC0xMTUsNSArMTE3LDkgQEAgZ2V0aG9zdGlkICh2b2lkKQorICAgLyogRm9yIHRoZSByZXR1cm4gdmFsdWUgdG8gYmUgbm90IGV4YWN0bHkgdGhlIElQIGFkZHJlc3Mgd2UgZG8gc29tZQorICAgICAgYml0IGZpZGRsaW5nLiAgKi8KKyAgIHJldHVybiAoaW50MzJfdCkgKGluLnNfYWRkciA8PCAxNiB8IGluLnNfYWRkciA+PiAxNik7CisrI2Vsc2UKKysgIC8qIFJldHVybiBhbiBhcmJpdHJhcnkgdmFsdWUuICAqLworKyAgcmV0dXJuIDA7CisrI2VuZGlmCisgfQorICNlbmRpZgorZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2xpYmNfZmF0YWwuYyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2xpYmNfZmF0YWwuYworaW5kZXggNTNhOGJiYi4uY2IxMTBkNCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2xpYmNfZmF0YWwuYworKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbGliY19mYXRhbC5jCitAQCAtMjMsNiArMjMsNyBAQAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyAjaW5jbHVkZSA8c3lzL3Vpby5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIHN0YXRpYyBib29sCisgd3JpdGV2X2Zvcl9mYXRhbCAoaW50IGZkLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgc2l6ZV90IG5pb3YsIHNpemVfdCB0b3RhbCkKK0BAIC00MCw2ICs0MSw3IEBAIHdyaXRldl9mb3JfZmF0YWwgKGludCBmZCwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIHNpemVfdCBuaW92LCBzaXplX3QgdG90YWwpCisgc3RhdGljIHZvaWQKKyBiYWNrdHJhY2VfYW5kX21hcHMgKGludCBkb19hYm9ydCwgYm9vbCB3cml0dGVuLCBpbnQgZmQpCisgeworKyNpZiBfX09QVElPTl9FR0xJQkNfQkFDS1RSQUNFCisgICBpZiAoZG9fYWJvcnQgPiAxICYmIHdyaXR0ZW4pCisgICAgIHsKKyAgICAgICB2b2lkICphZGRyc1s2NF07CitAQCAtNjIsNiArNjQsNyBAQCBiYWNrdHJhY2VfYW5kX21hcHMgKGludCBkb19hYm9ydCwgYm9vbCB3cml0dGVuLCBpbnQgZmQpCisgICAgICAgICAgIGNsb3NlX25vdF9jYW5jZWxfbm9fc3RhdHVzIChmZDIpOworICAgICAgICAgfQorICAgICB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CQUNLVFJBQ0UgKi8KKyB9CisgI2RlZmluZSBCRUZPUkVfQUJPUlQJCWJhY2t0cmFjZV9hbmRfbWFwcworIAorZGlmZiAtLWdpdCBhL3RpbWUvTWFrZWZpbGUgYi90aW1lL01ha2VmaWxlCitpbmRleCBhNDExZjYyLi4yZDAyMmNhIDEwMDY0NAorLS0tIGEvdGltZS9NYWtlZmlsZQorKysrIGIvdGltZS9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlNYWtlZmlsZSBmb3IgdGltZSByb3V0aW5lcworICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IHRpbWUKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0zMCwxNSArMzIsMjMgQEAgcm91dGluZXMgOj0gb2ZmdGltZSBhc2N0aW1lIGNsb2NrIGN0aW1lIGN0aW1lX3IgZGlmZnRpbWUgXAorIAkgICAgdHpmaWxlIGdldGl0aW1lciBzZXRpdGltZXIJCQkgXAorIAkgICAgc3RpbWUgZHlzaXplIHRpbWVnbSBmdGltZQkJCSBcCisgCSAgICBnZXRkYXRlIHN0cnB0aW1lIHN0cnB0aW1lX2wJCQkgXAorLQkgICAgc3RyZnRpbWUgd2NzZnRpbWUgc3RyZnRpbWVfbCB3Y3NmdGltZV9sCSBcCisrCSAgICBzdHJmdGltZSBzdHJmdGltZV9sCQkJCSBcCisgCSAgICB0aW1lc3BlY19nZXQKKy1hdXggOj0JICAgIGVyYSBhbHRfZGlnaXQgbGMtdGltZS1jbGVhbnVwCisgCistdGVzdHMJOj0gdGVzdF90aW1lIGNsb2NrdGVzdCB0c3QtcG9zaXh0eiB0c3Qtc3RycHRpbWUgdHN0X3djc2Z0aW1lIFwKKy0JICAgdHN0LWdldGRhdGUgdHN0LW1rdGltZSB0c3QtbWt0aW1lMiB0c3QtZnRpbWVfbCB0c3Qtc3RyZnRpbWUgXAorK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpICAgICAgICAgICAgICAgIFwKKysJICAgIDo9IHdjc2Z0aW1lIHdjc2Z0aW1lX2wKKythdXgtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSArPSBhbHRfZGlnaXQgZXJhIGxjLXRpbWUtY2xlYW51cAorKworK3Rlc3RzCTo9IHRlc3RfdGltZSBjbG9ja3Rlc3QgdHN0LXBvc2l4dHogXAorKwkgICB0c3QtZ2V0ZGF0ZSB0c3QtbWt0aW1lIHRzdC1ta3RpbWUyIHRzdC1zdHJmdGltZSBcCisgCSAgIHRzdC1ta3RpbWUzIHRzdC1zdHJwdGltZTIgYnVnLWFzY3RpbWUgYnVnLWFzY3RpbWVfciBidWctbWt0aW1lMSBcCisgCSAgIHRzdC1zdHJwdGltZTMgYnVnLWdldGRhdGUxIHRzdC1zdHJwdGltZS13aGl0ZXNwYWNlIHRzdC1mdGltZQorIAorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgXAorKwkgICAgICAgICs9IHRzdC1zdHJwdGltZSB0c3QtZnRpbWVfbAorK3Rlc3RzLSQoT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8pIFwKKysJICAgICAgICArPSB0c3Rfd2NzZnRpbWUKKysKKyBpbmNsdWRlIC4uL1J1bGVzCisgCisgdHotY2ZsYWdzID0gLURUWkRJUj0nIiQoem9uZWRpcikiJyBcCitkaWZmIC0tZ2l0IGEvdGltZS9zdHJmdGltZV9sLmMgYi90aW1lL3N0cmZ0aW1lX2wuYworaW5kZXggYjQ4ZWYzNC4uYmZkZDYxOCAxMDA2NDQKKy0tLSBhL3RpbWUvc3RyZnRpbWVfbC5jCisrKysgYi90aW1lL3N0cmZ0aW1lX2wuYworQEAgLTM1LDYgKzM1LDEwIEBACisgIyBpbmNsdWRlICIuLi9sb2NhbGUvbG9jYWxlaW5mby5oIgorICNlbmRpZgorIAorKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKysjZW5kaWYKKysKKyAjaWYgZGVmaW5lZCBlbWFjcyAmJiAhZGVmaW5lZCBIQVZFX0JDT1BZCisgIyBkZWZpbmUgSEFWRV9NRU1DUFkgMQorICNlbmRpZgorQEAgLTg4Miw3ICs4ODYsNyBAQCBfX3N0cmZ0aW1lX2ludGVybmFsIChzLCBtYXhzaXplLCBmb3JtYXQsIHRwLCB0enNldF9jYWxsZWQgdXRfYXJndW1lbnQKKyAJY2FzZSBMXygnQycpOgorIAkgIGlmIChtb2RpZmllciA9PSBMXygnRScpKQorIAkgICAgeworLSNpZiBIQVZFX1NUUlVDVF9FUkFfRU5UUlkKKysjaWYgKCEgX0xJQkMgfHwgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSAmJiBIQVZFX1NUUlVDVF9FUkFfRU5UUlkKKyAJICAgICAgc3RydWN0IGVyYV9lbnRyeSAqZXJhID0gX25sX2dldF9lcmFfZW50cnkgKHRwIEhFTFBFUl9MT0NBTEVfQVJHKTsKKyAJICAgICAgaWYgKGVyYSkKKyAJCXsKK0BAIC05NTUsNyArOTU5LDcgQEAgX19zdHJmdGltZV9pbnRlcm5hbCAocywgbWF4c2l6ZSwgZm9ybWF0LCB0cCwgdHpzZXRfY2FsbGVkIHV0X2FyZ3VtZW50CisgCisgCSAgaWYgKG1vZGlmaWVyID09IExfKCdPJykgJiYgMCA8PSBudW1iZXJfdmFsdWUpCisgCSAgICB7CistI2lmZGVmIF9OTF9DVVJSRU5UCisrI2lmICghIF9MSUJDIHx8IF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgJiYgZGVmaW5lZCAoX05MX0NVUlJFTlQpCisgCSAgICAgIC8qIEdldCB0aGUgbG9jYWxlIHNwZWNpZmljIGFsdGVybmF0ZSByZXByZXNlbnRhdGlvbiBvZgorIAkJIHRoZSBudW1iZXIgTlVNQkVSX1ZBTFVFLiAgSWYgbm9uZSBleGlzdCBOVUxMIGlzIHJldHVybmVkLiAgKi8KKyAJICAgICAgY29uc3QgQ0hBUl9UICpjcCA9IG5sX2dldF9hbHRfZGlnaXQgKG51bWJlcl92YWx1ZQorQEAgLTEyNjAsNyArMTI2NCw3IEBAIF9fc3RyZnRpbWVfaW50ZXJuYWwgKHMsIG1heHNpemUsIGZvcm1hdCwgdHAsIHR6c2V0X2NhbGxlZCB1dF9hcmd1bWVudAorIAljYXNlIExfKCdZJyk6CisgCSAgaWYgKG1vZGlmaWVyID09ICdFJykKKyAJICAgIHsKKy0jaWYgSEFWRV9TVFJVQ1RfRVJBX0VOVFJZCisrI2lmICghIF9MSUJDIHx8IF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgJiYgSEFWRV9TVFJVQ1RfRVJBX0VOVFJZCisgCSAgICAgIHN0cnVjdCBlcmFfZW50cnkgKmVyYSA9IF9ubF9nZXRfZXJhX2VudHJ5ICh0cCBIRUxQRVJfTE9DQUxFX0FSRyk7CisgCSAgICAgIGlmIChlcmEpCisgCQl7CitAQCAtMTI4NSw3ICsxMjg5LDcgQEAgX19zdHJmdGltZV9pbnRlcm5hbCAocywgbWF4c2l6ZSwgZm9ybWF0LCB0cCwgdHpzZXRfY2FsbGVkIHV0X2FyZ3VtZW50CisgCWNhc2UgTF8oJ3knKToKKyAJICBpZiAobW9kaWZpZXIgPT0gTF8oJ0UnKSkKKyAJICAgIHsKKy0jaWYgSEFWRV9TVFJVQ1RfRVJBX0VOVFJZCisrI2lmICghIF9MSUJDIHx8IF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgJiYgSEFWRV9TVFJVQ1RfRVJBX0VOVFJZCisgCSAgICAgIHN0cnVjdCBlcmFfZW50cnkgKmVyYSA9IF9ubF9nZXRfZXJhX2VudHJ5ICh0cCBIRUxQRVJfTE9DQUxFX0FSRyk7CisgCSAgICAgIGlmIChlcmEpCisgCQl7CitkaWZmIC0tZ2l0IGEvdGltZS9zdHJwdGltZV9sLmMgYi90aW1lL3N0cnB0aW1lX2wuYworaW5kZXggNTY0MGNjZS4uNzg0Y2NiYyAxMDA2NDQKKy0tLSBhL3RpbWUvc3RycHRpbWVfbC5jCisrKysgYi90aW1lL3N0cnB0aW1lX2wuYworQEAgLTI5LDYgKzI5LDcgQEAKKyAKKyAjaWZkZWYgX0xJQkMKKyAjIGRlZmluZSBIQVZFX0xPQ0FMVElNRV9SIDAKKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgIyBpbmNsdWRlICIuLi9sb2NhbGUvbG9jYWxlaW5mby5oIgorICNlbmRpZgorIAorQEAgLTg0LDcgKzg1LDcgQEAgbG9jYWx0aW1lX3IgKHQsIHRwKQorICAgICBpZiAodmFsIDwgZnJvbSB8fCB2YWwgPiB0bykJCQkJCQkgICAgICBcCisgICAgICAgcmV0dXJuIE5VTEw7CQkJCQkJCSAgICAgIFwKKyAgIH0gd2hpbGUgKDApCistI2lmZGVmIF9OTF9DVVJSRU5UCisrI2lmICghIF9MSUJDIHx8IF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgJiYgZGVmaW5lZCAoX05MX0NVUlJFTlQpCisgIyBkZWZpbmUgZ2V0X2FsdF9udW1iZXIoZnJvbSwgdG8sIG4pIFwKKyAgICh7CQkJCQkJCQkJICAgICAgXAorICAgICAgX19sYWJlbF9fIGRvX25vcm1hbDsJCQkJCQkgICAgICBcCitAQCAtMjU3LDggKzI1OCwxMCBAQCBfX3N0cnB0aW1lX2ludGVybmFsIChycCwgZm10LCB0bXAsIHN0YXRlcCBMT0NBTEVfUEFSQU0pCisgICBpbnQgY250OworICAgaW50IGNudF9sb25nZXN0OworICAgc2l6ZV90IHZhbDsKKysjaWYgISBfTElCQyB8fCBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIHNpemVfdCBudW1fZXJhczsKKyAgIHN0cnVjdCBlcmFfZW50cnkgKmVyYSA9IE5VTEw7CisrI2VuZGlmCisgICBlbnVtIHB0aW1lX2xvY2FsZV9zdGF0dXMgeyBub3QsIGxvYywgcmF3IH0gZGVjaWRlZF9sb25nZXN0OworICAgc3RydWN0IF9fc3RycHRpbWVfc3RhdGUKKyAgIHsKK0BAIC04MjAsNiArODIzLDcgQEAgX19zdHJwdGltZV9pbnRlcm5hbCAocnAsIGZtdCwgdG1wLCBzdGF0ZXAgTE9DQUxFX1BBUkFNKQorIAkgICAgICBzLndhbnRfeGRheSA9IDE7CisgCSAgICAgIGJyZWFrOworIAkgICAgY2FzZSAnQyc6CisrI2lmICEgX0xJQkMgfHwgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgCSAgICAgIGlmIChzLmRlY2lkZWQgIT0gcmF3KQorIAkJeworIAkJICBpZiAocy5lcmFfY250ID49IDApCitAQCAtODU2LDEwICs4NjAsMTIgQEAgX19zdHJwdGltZV9pbnRlcm5hbCAocnAsIGZtdCwgdG1wLCBzdGF0ZXAgTE9DQUxFX1BBUkFNKQorIAorIAkJICBzLmRlY2lkZWQgPSByYXc7CisgCQl9CisrI2VuZGlmCisgCSAgICAgIC8qIFRoZSBDIGxvY2FsZSBoYXMgbm8gZXJhIGluZm9ybWF0aW9uLCBzbyB1c2UgdGhlCisgCQkgbm9ybWFsIHJlcHJlc2VudGF0aW9uLiAgKi8KKyAJICAgICAgZ290byBtYXRjaF9jZW50dXJ5OworICAJICAgIGNhc2UgJ3knOgorKyNpZiAhIF9MSUJDIHx8IF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIAkgICAgICBpZiAocy5kZWNpZGVkICE9IHJhdykKKyAJCXsKKyAJCSAgZ2V0X251bWJlcigwLCA5OTk5LCA0KTsKK0BAIC05MTgsOSArOTI0LDEwIEBAIF9fc3RycHRpbWVfaW50ZXJuYWwgKHJwLCBmbXQsIHRtcCwgc3RhdGVwIExPQ0FMRV9QQVJBTSkKKyAKKyAJCSAgcy5kZWNpZGVkID0gcmF3OworIAkJfQorLQorKyNlbmRpZgorIAkgICAgICBnb3RvIG1hdGNoX3llYXJfaW5fY2VudHVyeTsKKyAJICAgIGNhc2UgJ1knOgorKyNpZiAhIF9MSUJDIHx8IF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIAkgICAgICBpZiAocy5kZWNpZGVkICE9IHJhdykKKyAJCXsKKyAJCSAgbnVtX2VyYXMgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19USU1FLAorQEAgLTk0OCw2ICs5NTUsNyBAQCBfX3N0cnB0aW1lX2ludGVybmFsIChycCwgZm10LCB0bXAsIHN0YXRlcCBMT0NBTEVfUEFSQU0pCisgCisgCQkgIHMuZGVjaWRlZCA9IHJhdzsKKyAJCX0KKysjZW5kaWYKKyAJICAgICAgZ2V0X251bWJlciAoMCwgOTk5OSwgNCk7CisgCSAgICAgIHRtLT50bV95ZWFyID0gdmFsIC0gMTkwMDsKKyAJICAgICAgcy53YW50X2NlbnR1cnkgPSAwOworQEAgLTExMTgsNiArMTEyNiw3IEBAIF9fc3RycHRpbWVfaW50ZXJuYWwgKHJwLCBmbXQsIHRtcCwgc3RhdGVwIExPQ0FMRV9QQVJBTSkKKyAJdG0tPnRtX3llYXIgPSAocy5jZW50dXJ5IC0gMTkpICogMTAwOworICAgICB9CisgCisrI2lmICEgX0xJQkMgfHwgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBpZiAocy5lcmFfY250ICE9IC0xKQorICAgICB7CisgICAgICAgZXJhID0gX25sX3NlbGVjdF9lcmFfZW50cnkgKHMuZXJhX2NudCBIRUxQRVJfTE9DQUxFX0FSRyk7CitAQCAtMTEzMiw2ICsxMTQxLDcgQEAgX19zdHJwdGltZV9pbnRlcm5hbCAocnAsIGZtdCwgdG1wLCBzdGF0ZXAgTE9DQUxFX1BBUkFNKQorIAl0bS0+dG1feWVhciA9IGVyYS0+c3RhcnRfZGF0ZVswXTsKKyAgICAgfQorICAgZWxzZQorKyNlbmRpZgorICAgICBpZiAocy53YW50X2VyYSkKKyAgICAgICB7CisgCS8qIE5vIGVyYSBmb3VuZCBidXQgd2UgaGF2ZSBzZWVuIGFuIEUgbW9kaWZpZXIuICBSZWN0aWZ5IHNvbWUKK2RpZmYgLS1naXQgYS90aW1lem9uZS9NYWtlZmlsZSBiL3RpbWV6b25lL01ha2VmaWxlCitpbmRleCA4ODZiMDZlLi5mOTIyNjg0IDEwMDY0NAorLS0tIGEvdGltZXpvbmUvTWFrZWZpbGUKKysrKyBiL3RpbWV6b25lL01ha2VmaWxlCitAQCAtMTI3LDcgKzEyNyw3IEBAICQodGVzdGRhdGEpL1hUJTogdGVzdGRhdGEvWFQlCisgCisgJChvYmpwZngpdHpzZWxlY3Q6IHR6c2VsZWN0LmtzaCAkKGNvbW1vbi1vYmpwZngpY29uZmlnLm1ha2UKKyAJc2VkIC1lICdzfC9iaW4vYmFzaHwvYmluL3NofCcgXAorLQkgICAgLWUgJ3N8VFpESVI9W159XSp8VFpESVI9JCh6b25lZGlyKXwnIFwKKysJICAgIC1lICcvVFpESVI9L3N8XCQkKHB3ZCl8JCh6b25lZGlyKXwnIFwKKyAJICAgIC1lICcvVFpWRVJTSU9OPS9zfHNlZV9NYWtlZmlsZXwiJCh2ZXJzaW9uKSJ8JyBcCisgCSAgICAtZSAnL1BLR1ZFUlNJT049L3N8PS4qfD0iJChQS0dWRVJTSU9OKSJ8JyBcCisgCSAgICAtZSAnL1JFUE9SVF9CVUdTX1RPPS9zfD0uKnw9IiQoUkVQT1JUX0JVR1NfVE8pInwnIFwKK2RpZmYgLS1naXQgYS93Y3NtYnMvTWFrZWZpbGUgYi93Y3NtYnMvTWFrZWZpbGUKK2luZGV4IDQ0YTQ0OTQuLmRiOWZjMjQgMTAwNjQ0CistLS0gYS93Y3NtYnMvTWFrZWZpbGUKKysrKyBiL3djc21icy9NYWtlZmlsZQorQEAgLTE4LDE1ICsxOCwyMSBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3Igd2NzbWJzIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gd2NzbWJzCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCisgaGVhZGVycwk6PSB3Y2hhci5oIGJpdHMvd2NoYXIuaCBiaXRzL3djaGFyMi5oIGJpdHMvd2NoYXItbGRibC5oIHVjaGFyLmgKKyAKKy1yb3V0aW5lcyA6PSB3Y3NjYXQgd2NzY2hyIHdjc2NtcCB3Y3NjcHkgd2NzY3NwbiB3Y3NkdXAgd2NzbGVuIHdjc25jYXQgXAorKyMgVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGJ5IHByaW50Zl9mcC5jLCBldmVuIGluIHRoZSBwbGFpbiBjYXNlOyBzZWUKKysjIGNvbW1lbnRzIHRoZXJlIGZvciBPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFLgorK3JvdXRpbmVzICA6PSB3bWVtY3B5IHdtZW1zZXQKKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSBcCisrCSAgOj0gd2NzY2F0IHdjc2NociB3Y3NjbXAgd2NzY3B5IHdjc2NzcG4gd2NzZHVwIHdjc2xlbiB3Y3NuY2F0IFwKKyAJICAgIHdjc25jbXAgd2NzbmNweSB3Y3NwYnJrIHdjc3JjaHIgd2Nzc3BuIHdjc3RvayB3Y3NzdHIgd21lbWNociBcCistCSAgICB3bWVtY21wIHdtZW1jcHkgd21lbW1vdmUgd21lbXNldCB3Y3BjcHkgd2NwbmNweSB3bWVtcGNweSBcCisrCSAgICB3bWVtY21wIHdtZW1tb3ZlIHdjcGNweSB3Y3BuY3B5IHdtZW1wY3B5IFwKKyAJICAgIGJ0b3djIHdjdG9iIG1ic2luaXQgXAorIAkgICAgbWJybGVuIG1icnRvd2Mgd2NydG9tYiBtYnNydG93Y3Mgd2NzcnRvbWJzIFwKKyAJICAgIG1ic25ydG93Y3Mgd2NzbnJ0b21icyB3Y3NubGVuIHdjc2Nocm51bCBcCitAQCAtMzgsMTQgKzQ0LDIxIEBAIHJvdXRpbmVzIDo9IHdjc2NhdCB3Y3NjaHIgd2NzY21wIHdjc2NweSB3Y3Njc3BuIHdjc2R1cCB3Y3NsZW4gd2NzbmNhdCBcCisgCSAgICB3Y3Njb2xsX2wgd2NzeGZybV9sIFwKKyAJICAgIHdjc2Nhc2VjbXAgd2NzbmNhc2Ugd2NzY2FzZWNtcF9sIHdjc25jYXNlX2wgXAorIAkgICAgd2NzbWJzbG9hZCBtYnNydG93Y3NfbCBcCistCSAgICBpc29jOTlfd3NjYW5mIGlzb2M5OV92d3NjYW5mIGlzb2M5OV9md3NjYW5mIGlzb2M5OV92ZndzY2FuZiBcCisgCSAgICBpc29jOTlfc3dzY2FuZiBpc29jOTlfdnN3c2NhbmYgXAorIAkgICAgbWJydG9jMTYgYzE2cnRvbWIKKyAKKy1zdHJvcC10ZXN0cyA6PSAgd2NzY21wIHdjc25jbXAgd21lbWNtcCB3Y3NsZW4gd2NzY2hyIHdjc3JjaHIgd2NzY3B5CistdGVzdHMgOj0gdHN0LXdjc3RvZiB3Y3NtYnMtdHN0MSB0c3Qtd2NzbmxlbiB0c3QtYnRvd2MgdHN0LW1icnRvd2MgXAorLQkgdHN0LXdjcnRvbWIgdHN0LXdjcG5jcHkgdHN0LW1ic3J0b3djcyB0c3Qtd2NoYXItaCB0c3QtbWJydG93YzIgXAorLQkgdHN0LWMxNmMzMi0xIHdjc2F0Y2xpZmYgJChhZGRwcmVmaXggdGVzdC0sJChzdHJvcC10ZXN0cykpCisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTykgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCSs9IGlzb2M5OV93c2NhbmYgaXNvYzk5X3Z3c2NhbmYgaXNvYzk5X2Z3c2NhbmYgaXNvYzk5X3Zmd3NjYW5mCisrCisrc3Ryb3AtdGVzdHMgOj0gIHdjc2NtcCB3bWVtY21wIHdtZW1jbXAgd2NzbGVuIHdjc2NociB3Y3NyY2hyIHdjc2NweQorKworK3Rlc3RzIDo9IHRzdC13Y2hhci1oCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSBcCisrCSs9IHRzdC1idG93YyB0c3QtbWJydG93YyB0c3QtbWJydG93YzIgdHN0LXdjcnRvbWIgdHN0LWMxNmMzMi0xCisrdGVzdHMtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgXAorKwkrPSB0c3Qtd2NzdG9mIHdjc21icy10c3QxIHRzdC13Y3NubGVuIFwKKysJdHN0LXdjcG5jcHkgdHN0LW1ic3J0b3djcyBcCisrCXdjc2F0Y2xpZmYgJChhZGRwcmVmaXggdGVzdC0sJChzdHJvcC10ZXN0cykpCisgCisgaW5jbHVkZSAuLi9SdWxlcworIAorZGlmZiAtLWdpdCBhL3djc21icy93Y3NtYnNsb2FkLmMgYi93Y3NtYnMvd2NzbWJzbG9hZC5jCitpbmRleCA2YmI0OWJjLi4yYWI5ZDA3IDEwMDY0NAorLS0tIGEvd2NzbWJzL3djc21ic2xvYWQuYworKysrIGIvd2NzbWJzL3djc21ic2xvYWQuYworQEAgLTIxLDYgKzIxLDcgQEAKKyAjaW5jbHVkZSA8bGltaXRzLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaW5jbHVkZSA8bG9jYWxlL2xvY2FsZWluZm8uaD4KKyAjaW5jbHVkZSA8d2NzbWJzbG9hZC5oPgorQEAgLTE0Myw2ICsxNDQsNyBAQCBfX3djc21ic19nZXRmY3QgKGNvbnN0IGNoYXIgKnRvLCBjb25zdCBjaGFyICpmcm9tLCBzaXplX3QgKm5zdGVwc3ApCisgICB9KQorIAorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAvKiBTb21lIG9mIHRoZSBmdW5jdGlvbnMgaGVyZSBtdXN0IG5vdCBiZSB1c2VkIHdoaWxlIHNldGxvY2FsZSBpcyBjYWxsZWQuICAqLworIF9fbGliY19yd2xvY2tfZGVmaW5lIChleHRlcm4sIF9fbGliY19zZXRsb2NhbGVfbG9jayBhdHRyaWJ1dGVfaGlkZGVuKQorIAorQEAgLTIxMSw2ICsyMTMsMTcgQEAgX193Y3NtYnNfbG9hZF9jb252IChzdHJ1Y3QgX19sb2NhbGVfZGF0YSAqbmV3X2NhdGVnb3J5KQorIAorICAgX19saWJjX3J3bG9ja191bmxvY2sgKF9fbGliY19zZXRsb2NhbGVfbG9jayk7CisgfQorKyNlbHNlCisrdm9pZAorK2ludGVybmFsX2Z1bmN0aW9uCisrX193Y3NtYnNfbG9hZF9jb252IChzdHJ1Y3QgX19sb2NhbGVfZGF0YSAqbmV3X2NhdGVnb3J5KQorK3sKKysgIC8qIFdoZW4gT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSBpcyBkaXNhYmxlZCwgd2Ugc2hvdWxkIG5ldmVyIHJlYWNoCisrICAgICB0aGlzIHBvaW50OiB0aGVyZSBpcyBubyB3YXkgdG8gY2hhbmdlIGxvY2FsZXMsIHNvIGV2ZXJ5IGxvY2FsZQorKyAgICAgcGFzc2VkIHRvIGdldF9nY29udl9mY3RzIHNob3VsZCBiZSBfbmxfQ19MQ19DVFlQRS4gICovCisrICBhYm9ydCAoKTsKKyt9CisrI2VuZGlmCisgCisgCisgLyogQ2xvbmUgdGhlIGN1cnJlbnQgY29udmVyc2lvbiBmdW5jdGlvbiBzZXQuICAqLworZGlmZiAtLWdpdCBhL3djdHlwZS9NYWtlZmlsZSBiL3djdHlwZS9NYWtlZmlsZQoraW5kZXggYzU2ZjA3Yy4uNGU4YWY0MyAxMDA2NDQKKy0tLSBhL3djdHlwZS9NYWtlZmlsZQorKysrIGIvd2N0eXBlL01ha2VmaWxlCitAQCAtMTgsMTQgKzE4LDIwIEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciB3Y3R5cGUgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSB3Y3R5cGUKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKyBoZWFkZXJzCQk6PSB3Y3R5cGUuaAorLXJvdXRpbmVzCTo9IHdjZnVuY3Mgd2N0eXBlIGlzd2N0eXBlIHdjdHJhbnMgdG93Y3RyYW5zIFwKKy0JCSAgIHdjZnVuY3NfbCB3Y3R5cGVfbCBpc3djdHlwZV9sIHdjdHJhbnNfbCB0b3djdHJhbnNfbAorLQorLXRlc3RzCTo9IHRlc3Rfd2N0eXBlIHRlc3Rfd2NmdW5jcyBidWctd2N0eXBlaAorK3JvdXRpbmVzIAk6PSB3Y3RyYW5zIHRvd2N0cmFucyB0b3djdHJhbnNfbAorK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpIFwKKysJCTo9IHdjZnVuY3Mgd2N0eXBlIGlzd2N0eXBlIFwKKysJCSAgIHdjZnVuY3NfbCB3Y3R5cGVfbCBpc3djdHlwZV9sIHdjdHJhbnNfbAorKworK3Rlc3RzCTo9CisrdGVzdHMtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgXAorKyAgICAgKz0gdGVzdF93Y3R5cGUgdGVzdF93Y2Z1bmNzIGJ1Zy13Y3R5cGVoCisgCisgaW5jbHVkZSAuLi9SdWxlcworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjUtZWdsaWJjLUluc3RhbGwtUElDLWFyY2hpdmVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI1LWVnbGliYy1JbnN0YWxsLVBJQy1hcmNoaXZlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzU5Y2NlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI1LWVnbGliYy1JbnN0YWxsLVBJQy1hcmNoaXZlcy5wYXRjaApAQCAtMCwwICsxLDEyMyBAQAorRnJvbSA1NzczNDE3ZmE5MWExOGNkMzlmYjM1Yzk5MDdkNzJhZjBlZDllYTMzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDE6NTc6MDEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyNS8yN10gZWdsaWJjOiBJbnN0YWxsIFBJQyBhcmNoaXZlcworCitGb3J3YXJkIHBvcnQgZnJvbSBlZ2xpYmMKKworMjAwOC0wMi0wNyAgSm9zZXBoIE15ZXJzICA8am9zZXBoQGNvZGVzb3VyY2VyeS5jb20+CisKKyAgICAgICAgKiBNYWtlcnVsZXMgKGluc3RhbGwtZXh0cmFzLCBpbnN0YWxsLW1hcCk6IE5ldyB2YXJpYWJsZXMuCisgICAgICAgIChpbnN0YWxsZWQtbGliY3MpOiBBZGQgbGliY19waWMuYS4KKyAgICAgICAgKGluc3RhbGwtbGliKTogSW5jbHVkZSBfcGljLmEgZmlsZXMgZm9yIHZlcnNpb25lZCBzaGFyZWQKKyAgICAgICAgbGlicmFyaWVzLgorICAgICAgICAoaW5zdGFsbC1tYXAtbm9zdWJkaXIsIGluc3RhbGwtZXh0cmFzLW5vc3ViZGlyKTogQWRkIHJ1bGVzIGZvcgorICAgICAgICBpbnN0YWxsaW5nIGV4dHJhIGZpbGVzLgorICAgICAgICAoaW5zdGFsbC1uby1saWJjLmEtbm9zdWJkaXIpOiBEZXBlbmQgb24gaW5zdGFsbC1tYXAtbm9zdWJkaXIgYW5kCisgICAgICAgIGluc3RhbGwtZXh0cmFzLW5vc3ViZGlyLgorCisyMDA4LTA0LTAxICBNYXhpbSBLdXZ5cmtvdiAgPG1heGltQGNvZGVzb3VyY2VyeS5jb20+CisKKyAgICAgICAgKiBNYWtlcnVsZXMgKGluc3RhbGwtbGliKTogRG9uJ3QgaW5zdGFsbCBsaWJwdGhyZWFkX3BpYy5hLgorICAgICAgICAoaW5zdGFsbC1tYXApOiBEb24ndCBpbnN0YWxsIGxpYnB0aHJlYWRfcGljLm1hcC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBNYWtlcnVsZXMgfCA0MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgNDAgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VydWxlcyBiL01ha2VydWxlcworaW5kZXggMWRkNDFhYS4uNDE3NzhlMSAxMDA2NDQKKy0tLSBhL01ha2VydWxlcworKysrIGIvTWFrZXJ1bGVzCitAQCAtNzEzLDYgKzcxMyw5IEBAIGlmZXEgKCQoYnVpbGQtc2hhcmVkKSx5ZXMpCisgJChjb21tb24tb2JqcGZ4KWxpYmMuc286ICQoY29tbW9uLW9ianBmeClsaWJjLm1hcAorIGVuZGlmCisgY29tbW9uLWdlbmVyYXRlZCArPSBsaWJjLnNvIGxpYmNfcGljLm9zCisraWZuZGVmIHN1YmRpcgorK2luc3RhbGwtZXh0cmFzIDo9IHNvaW5pdC5vIHNvZmluaS5vCisrZW5kaWYKKyBpZmRlZiBsaWJjLnNvLXZlcnNpb24KKyAkKGNvbW1vbi1vYmpwZngpbGliYy5zbyQobGliYy5zby12ZXJzaW9uKTogJChjb21tb24tb2JqcGZ4KWxpYmMuc28KKyAJJChtYWtlLWxpbmspCitAQCAtOTU1LDYgKzk1OCw3IEBAIGVuZGlmCisgCisgaW5zdGFsbDogY2hlY2staW5zdGFsbC1zdXBwb3J0ZWQKKyAKKytpbnN0YWxsZWQtbGliY3MgOj0gJChpbnN0YWxsZWQtbGliY3MpICQoaW5zdF9saWJkaXIpL2xpYmNfcGljLmEKKyBpbnN0YWxsOiAkKGluc3RhbGxlZC1saWJjcykKKyAkKGluc3RhbGxlZC1saWJjcyk6ICQoaW5zdF9saWJkaXIpL2xpYiQobGlicHJlZml4KSU6IGxpYiAkKCtmb3JjZSkKKyAJJChtYWtlLXRhcmdldC1kaXJlY3RvcnkpCitAQCAtOTgzLDYgKzk4NywyMiBAQCB2ZXJzaW9uZWQgOj0gJChzdHJpcCAkKGZvcmVhY2ggc28sJChpbnN0YWxsLWxpYi5zbyksXAorIGluc3RhbGwtbGliLnNvLXZlcnNpb25lZCA6PSAkKGZpbHRlciAkKHZlcnNpb25lZCksICQoaW5zdGFsbC1saWIuc28pKQorIGluc3RhbGwtbGliLnNvLXVudmVyc2lvbmVkIDo9ICQoZmlsdGVyLW91dCAkKHZlcnNpb25lZCksICQoaW5zdGFsbC1saWIuc28pKQorIAorKyMgSW5zdGFsbCB0aGUgX3BpYy5hIGZpbGVzIGZvciB2ZXJzaW9uZWQgbGlicmFyaWVzLCBhbmQgY29ycmVzcG9uZGluZworKyMgLm1hcCBmaWxlcy4KKysjIGxpYnB0aHJlYWRfcGljLmEgYnJlYWtzIG1rbGlicywgc28gZG9uJ3QgaW5zdGFsbCBpdCBhbmQgaXRzIG1hcC4KKytpbnN0YWxsLWxpYiA6PSAkKGluc3RhbGwtbGliKSAkKGluc3RhbGwtbGliLnNvLXZlcnNpb25lZDolLnNvPSVfcGljLmEpCisraW5zdGFsbC1saWIgOj0gJChmaWx0ZXItb3V0IGxpYnB0aHJlYWRfcGljLmEsJChpbnN0YWxsLWxpYikpCisrIyBEZXNwaXRlIGhhdmluZyBhIHNvbmFtZSBsaWJodXJkdXNlciBhbmQgbGlibWFjaHVzZXIgZG8gbm90IHVzZSBzeW1ib2wKKysjIHZlcnNpb25pbmcsIHNvIGRvbid0IGluc3RhbGwgdGhlIGNvcnJlc3BvbmRpbmcgLm1hcCBmaWxlcy4KKytpZmVxICgkKGJ1aWxkLXNoYXJlZCkseWVzKQorK2luc3RhbGwtbWFwIDo9ICQocGF0c3Vic3QgJS5zbywlLm1hcCxcCisrCQkJJChmb3JlYWNoIEwsJChpbnN0YWxsLWxpYi5zby12ZXJzaW9uZWQpLCQobm90ZGlyICRMKSkpCisraW5zdGFsbC1tYXAgOj0gJChmaWx0ZXItb3V0IGxpYmh1cmR1c2VyLm1hcCBsaWJtYWNodXNlci5tYXAgbGlicHRocmVhZC5tYXAsJChpbnN0YWxsLW1hcCkpCisraWZuZGVmIHN1YmRpcgorK2luc3RhbGwtbWFwIDo9ICQoaW5zdGFsbC1tYXApIGxpYmMubWFwCisrZW5kaWYKKytlbmRpZgorKworICMgRm9yIHZlcnNpb25lZCBsaWJyYXJpZXMsIHdlIGluc3RhbGwgdGhyZWUgZmlsZXM6CisgIwkkKGluc3RfbGliZGlyKS9saWJmb28uc28JLS0gZm9yIGxpbmtpbmcsIHN5bWxpbmsgb3IgbGQgc2NyaXB0CisgIwkkKGluc3Rfc2xpYmRpcikvbGliZm9vLnNvLk5OCS0tIGZvciBsb2FkaW5nIGJ5IFNPTkFNRSwgc3ltbGluaworQEAgLTEyMjUsOSArMTI0NSwyMiBAQCAkKGFkZHByZWZpeCAkKGluc3RfaW5jbHVkZWRpcikvLCQoaGVhZGVycy1ub25oKSk6ICQoaW5zdF9pbmNsdWRlZGlyKS8lOiBcCisgZW5kaWYJIyBoZWFkZXJzLW5vbmgKKyBlbmRpZgkjIGhlYWRlcnMKKyAKKytpZmRlZiBpbnN0YWxsLW1hcAorKyQoYWRkcHJlZml4ICQoaW5zdF9saWJkaXIpLywkKHBhdHN1YnN0IGxpYiUubWFwLGxpYiVfcGljLm1hcCwkKGluc3RhbGwtbWFwKSkpOiBcCisrICAkKGluc3RfbGliZGlyKS9saWIlX3BpYy5tYXA6ICQoY29tbW9uLW9ianBmeClsaWIlLm1hcCAkKCtmb3JjZSkKKysJJChkby1pbnN0YWxsKQorK2VuZGlmCisrCisraWZkZWYgaW5zdGFsbC1leHRyYXMKKyskKGFkZHByZWZpeCAkKGluc3RfbGliZGlyKS9saWJjX3BpYy8sJChpbnN0YWxsLWV4dHJhcykpOiBcCisrICAkKGluc3RfbGliZGlyKS9saWJjX3BpYy8lLm86ICQoZWxmLW9ianBmeCklLm9zICQoK2ZvcmNlKQorKwkkKGRvLWluc3RhbGwpCisrZW5kaWYKKysKKyAuUEhPTlk6IGluc3RhbGwtYmluLW5vc3ViZGlyIGluc3RhbGwtYmluLXNjcmlwdC1ub3N1YmRpciBcCisgCWluc3RhbGwtcm9vdHNiaW4tbm9zdWJkaXIgaW5zdGFsbC1zYmluLW5vc3ViZGlyIGluc3RhbGwtbGliLW5vc3ViZGlyIFwKKy0JaW5zdGFsbC1kYXRhLW5vc3ViZGlyIGluc3RhbGwtaGVhZGVycy1ub3N1YmRpcgorKwlpbnN0YWxsLWRhdGEtbm9zdWJkaXIgaW5zdGFsbC1oZWFkZXJzLW5vc3ViZGlyIGluc3RhbGwtbWFwLW5vc3ViZGlyIFwKKysJaW5zdGFsbC1leHRyYXMtbm9zdWJkaXIKKyBpbnN0YWxsLWJpbi1ub3N1YmRpcjogJChhZGRwcmVmaXggJChpbnN0X2JpbmRpcikvLCQoaW5zdGFsbC1iaW4pKQorIGluc3RhbGwtYmluLXNjcmlwdC1ub3N1YmRpcjogJChhZGRwcmVmaXggJChpbnN0X2JpbmRpcikvLCQoaW5zdGFsbC1iaW4tc2NyaXB0KSkKKyBpbnN0YWxsLXJvb3RzYmluLW5vc3ViZGlyOiBcCitAQCAtMTI0MCw2ICsxMjczLDEwIEBAIGluc3RhbGwtZGF0YS1ub3N1YmRpcjogJChhZGRwcmVmaXggJChpbnN0X2RhdGFkaXIpLywkKGluc3RhbGwtZGF0YSkpCisgaW5zdGFsbC1oZWFkZXJzLW5vc3ViZGlyOiAkKGFkZHByZWZpeCAkKGluc3RfaW5jbHVkZWRpcikvLCQoaGVhZGVycykpCisgaW5zdGFsbC1vdGhlcnMtbm9zdWJkaXI6ICQoaW5zdGFsbC1vdGhlcnMpCisgaW5zdGFsbC1vdGhlcnMtcHJvZ3JhbXMtbm9zdWJkaXI6ICQoaW5zdGFsbC1vdGhlcnMtcHJvZ3JhbXMpCisraW5zdGFsbC1tYXAtbm9zdWJkaXI6ICQoYWRkcHJlZml4ICQoaW5zdF9saWJkaXIpLyxcCisrCQkgICAgICAgJChwYXRzdWJzdCBsaWIlLm1hcCxsaWIlX3BpYy5tYXAsJChpbnN0YWxsLW1hcCkpKQorK2luc3RhbGwtZXh0cmFzLW5vc3ViZGlyOiAkKGFkZHByZWZpeCAkKGluc3RfbGliZGlyKS9saWJjX3BpYy8sXAorKwkJICAgICAgICQoaW5zdGFsbC1leHRyYXMpKQorIAorICMgV2UgbmVlZCBhbGwgdGhlIGAtbm9zdWJkaXInIHRhcmdldHMgc28gdGhhdCBgaW5zdGFsbCcgaW4gdGhlIHBhcmVudAorICMgZG9lc24ndCBkZXBlbmQgb24gc2V2ZXJhbCB0aGluZ3Mgd2hpY2ggZWFjaCBpdGVyYXRlIG92ZXIgdGhlIHN1YmRpcnMuCitAQCAtMTI0OSw3ICsxMjg2LDggQEAgaW5zdGFsbC0lOjogaW5zdGFsbC0lLW5vc3ViZGlyIDsKKyAKKyAuUEhPTlk6IGluc3RhbGwgaW5zdGFsbC1uby1saWJjLmEtbm9zdWJkaXIKKyBpbnN0YWxsLW5vLWxpYmMuYS1ub3N1YmRpcjogaW5zdGFsbC1oZWFkZXJzLW5vc3ViZGlyIGluc3RhbGwtZGF0YS1ub3N1YmRpciBcCistCQkJICAgIGluc3RhbGwtbGliLW5vc3ViZGlyIGluc3RhbGwtb3RoZXJzLW5vc3ViZGlyCisrCQkJICAgIGluc3RhbGwtbGliLW5vc3ViZGlyIGluc3RhbGwtb3RoZXJzLW5vc3ViZGlyIFwKKysJCQkgICAgaW5zdGFsbC1tYXAtbm9zdWJkaXIgaW5zdGFsbC1leHRyYXMtbm9zdWJkaXIKKyBpZmVxICgkKGJ1aWxkLXByb2dyYW1zKSx5ZXMpCisgaW5zdGFsbC1uby1saWJjLmEtbm9zdWJkaXI6IGluc3RhbGwtYmluLW5vc3ViZGlyIGluc3RhbGwtYmluLXNjcmlwdC1ub3N1YmRpciBcCisgCQkJICAgIGluc3RhbGwtcm9vdHNiaW4tbm9zdWJkaXIgaW5zdGFsbC1zYmluLW5vc3ViZGlyIFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI2LWVnbGliYy1kbF9kZWJ1Z19tYXNrLWlzLWNvbnRyb2xsZWQtYnktX19PUFRJT05fRUdMSUIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjYtZWdsaWJjLWRsX2RlYnVnX21hc2staXMtY29udHJvbGxlZC1ieS1fX09QVElPTl9FR0xJQi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjYxMWRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI2LWVnbGliYy1kbF9kZWJ1Z19tYXNrLWlzLWNvbnRyb2xsZWQtYnktX19PUFRJT05fRUdMSUIucGF0Y2gKQEAgLTAsMCArMSw1NTYgQEAKK0Zyb20gYmEwNjliMzEwN2Y1YWQyMDBjNGFiOTVlNjljZjM2OGUyMzUzYjAwYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjQ2OjUwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMjYvMjddIGVnbGliYzogZGxfZGVidWdfbWFzayBpcyBjb250cm9sbGVkIGJ5CisgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKwordXNlIEdMUk9fZGxfZGVidWdfbWFzaworCitTaW5nZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNzdS9saWJjLXN0YXJ0LmMgICAgICAgfCAgNCArKy0tCisgZWxmL2RsLWNhY2hlLmMgICAgICAgICB8ICA0ICsrLS0KKyBlbGYvZGwtY2xvc2UuYyAgICAgICAgIHwgIDYgKysrLS0tCisgZWxmL2RsLWNvbmZsaWN0LmMgICAgICB8ICAyICstCisgZWxmL2RsLWRlcHMuYyAgICAgICAgICB8ICA2ICsrKy0tLQorIGVsZi9kbC1lcnJvci5jICAgICAgICAgfCAgMiArLQorIGVsZi9kbC1maW5pLmMgICAgICAgICAgfCAgNCArKy0tCisgZWxmL2RsLWluaXQuYyAgICAgICAgICB8ICA0ICsrLS0KKyBlbGYvZGwtbG9hZC5jICAgICAgICAgIHwgMTYgKysrKysrKystLS0tLS0tLQorIGVsZi9kbC1sb29rdXAuYyAgICAgICAgfCAxNCArKysrKysrLS0tLS0tLQorIGVsZi9kbC1vYmplY3QuYyAgICAgICAgfCAgMiArLQorIGVsZi9kbC1vcGVuLmMgICAgICAgICAgfCAxMCArKysrKy0tLS0tCisgZWxmL2RsLXJlbG9jLmMgICAgICAgICB8ICAyICstCisgZWxmL2RsLXZlcnNpb24uYyAgICAgICB8ICAyICstCisgZWxmL2dldC1keW5hbWljLWluZm8uaCB8ICAyICstCisgZWxmL3J0bGQuYyAgICAgICAgICAgICB8IDIyICsrKysrKysrKysrLS0tLS0tLS0tLS0KKyAxNiBmaWxlcyBjaGFuZ2VkLCA1MSBpbnNlcnRpb25zKCspLCA1MSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NzdS9saWJjLXN0YXJ0LmMgYi9jc3UvbGliYy1zdGFydC5jCitpbmRleCAwYWZhN2MwLi4yMTUxZmI2IDEwMDY0NAorLS0tIGEvY3N1L2xpYmMtc3RhcnQuYworKysrIGIvY3N1L2xpYmMtc3RhcnQuYworQEAgLTIzOCw3ICsyMzgsNyBAQCBMSUJDX1NUQVJUX01BSU4gKGludCAoKm1haW4pIChpbnQsIGNoYXIgKiosIGNoYXIgKiogTUFJTl9BVVhWRUNfREVDTCksCisgCisgICAvKiBDYWxsIHRoZSBpbml0aWFsaXplciBvZiB0aGUgcHJvZ3JhbSwgaWYgYW55LiAgKi8KKyAjaWZkZWYgU0hBUkVECistICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0lNUENBTExTLCAwKSkKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19JTVBDQUxMUywgMCkpCisgICAgIEdMUk8oZGxfZGVidWdfcHJpbnRmKSAoIlxuaW5pdGlhbGl6ZSBwcm9ncmFtOiAlc1xuXG4iLCBhcmd2WzBdKTsKKyAjZW5kaWYKKyAgIGlmIChpbml0KQorQEAgLTI2MSw3ICsyNjEsNyBAQCBMSUJDX1NUQVJUX01BSU4gKGludCAoKm1haW4pIChpbnQsIGNoYXIgKiosIGNoYXIgKiogTUFJTl9BVVhWRUNfREVDTCksCisgI2VuZGlmCisgCisgI2lmZGVmIFNIQVJFRAorLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19JTVBDQUxMUykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfSU1QQ0FMTFMpKQorICAgICBHTFJPKGRsX2RlYnVnX3ByaW50ZikgKCJcbnRyYW5zZmVycmluZyBjb250cm9sOiAlc1xuXG4iLCBhcmd2WzBdKTsKKyAjZW5kaWYKKyAKK2RpZmYgLS1naXQgYS9lbGYvZGwtY2FjaGUuYyBiL2VsZi9kbC1jYWNoZS5jCitpbmRleCA4NjJmMWQ4Li5kYWI5YzUxIDEwMDY0NAorLS0tIGEvZWxmL2RsLWNhY2hlLmMKKysrKyBiL2VsZi9kbC1jYWNoZS5jCitAQCAtMTk0LDcgKzE5NCw3IEBAIF9kbF9sb2FkX2NhY2hlX2xvb2t1cCAoY29uc3QgY2hhciAqbmFtZSkKKyAgIGNvbnN0IGNoYXIgKmJlc3Q7CisgCisgICAvKiBQcmludCBhIG1lc3NhZ2UgaWYgdGhlIGxvYWRpbmcgb2YgbGlicyBpcyB0cmFjZWQuICAqLworLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19MSUJTKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19MSUJTKSkKKyAgICAgX2RsX2RlYnVnX3ByaW50ZiAoIiBzZWFyY2ggY2FjaGU9JXNcbiIsIExEX1NPX0NBQ0hFKTsKKyAKKyAgIGlmIChjYWNoZSA9PSBOVUxMKQorQEAgLTI5Miw3ICsyOTIsNyBAQCBfZGxfbG9hZF9jYWNoZV9sb29rdXAgKGNvbnN0IGNoYXIgKm5hbWUpCisgICAgIH0KKyAKKyAgIC8qIFByaW50IG91ciByZXN1bHQgaWYgd2FudGVkLiAgKi8KKy0gIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfTElCUywgMCkKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19MSUJTLCAwKQorICAgICAgICYmIGJlc3QgIT0gTlVMTCkKKyAgICAgX2RsX2RlYnVnX3ByaW50ZiAoIiAgdHJ5aW5nIGZpbGU9JXNcbiIsIGJlc3QpOworIAorZGlmZiAtLWdpdCBhL2VsZi9kbC1jbG9zZS5jIGIvZWxmL2RsLWNsb3NlLmMKK2luZGV4IGM4OTcyNDcuLmIxYjRiZDUgMTAwNjQ0CistLS0gYS9lbGYvZGwtY2xvc2UuYworKysrIGIvZWxmL2RsLWNsb3NlLmMKK0BAIC0xMjUsNyArMTI1LDcgQEAgX2RsX2Nsb3NlX3dvcmtlciAoc3RydWN0IGxpbmtfbWFwICptYXAsIGJvb2wgZm9yY2UpCisgCWRsX2Nsb3NlX3N0YXRlID0gcmVydW47CisgCisgICAgICAgLyogVGhlcmUgYXJlIHN0aWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBvYmplY3QuICBEbyBub3RoaW5nIG1vcmUuICAqLworLSAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfRklMRVMpKQorKyAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19GSUxFUykpCisgCV9kbF9kZWJ1Z19wcmludGYgKCJcbmNsb3NpbmcgZmlsZT0lczsgZGlyZWN0X29wZW5jb3VudD0ldVxuIiwKKyAJCQkgIG1hcC0+bF9uYW1lLCBtYXAtPmxfZGlyZWN0X29wZW5jb3VudCk7CisgCitAQCAtMjY5LDcgKzI2OSw3IEBAIF9kbF9jbG9zZV93b3JrZXIgKHN0cnVjdCBsaW5rX21hcCAqbWFwLCBib29sIGZvcmNlKQorIAkgIGlmIChpbWFwLT5sX2luaXRfY2FsbGVkKQorIAkgICAgeworIAkgICAgICAvKiBXaGVuIGRlYnVnZ2luZyBwcmludCBhIG1lc3NhZ2UgZmlyc3QuICAqLworLQkgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0lNUENBTExTLAorKwkgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfSU1QQ0FMTFMsCisgCQkJCSAgICAwKSkKKyAJCV9kbF9kZWJ1Z19wcmludGYgKCJcbmNhbGxpbmcgZmluaTogJXMgWyVsdV1cblxuIiwKKyAJCQkJICBpbWFwLT5sX25hbWUsIG5zaWQpOworQEAgLTcxMSw3ICs3MTEsNyBAQCBfZGxfY2xvc2Vfd29ya2VyIChzdHJ1Y3QgbGlua19tYXAgKm1hcCwgYm9vbCBmb3JjZSkKKyAJICBmcmVlIChpbWFwLT5sX3JlbGRlcHMpOworIAorIAkgIC8qIFByaW50IGRlYnVnZ2luZyBtZXNzYWdlLiAgKi8KKy0JICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0ZJTEVTKSkKKysJICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfRklMRVMpKQorIAkgICAgX2RsX2RlYnVnX3ByaW50ZiAoIlxuZmlsZT0lcyBbJWx1XTsgIGRlc3Ryb3lpbmcgbGluayBtYXBcbiIsCisgCQkJICAgICAgaW1hcC0+bF9uYW1lLCBpbWFwLT5sX25zKTsKKyAKK2RpZmYgLS1naXQgYS9lbGYvZGwtY29uZmxpY3QuYyBiL2VsZi9kbC1jb25mbGljdC5jCitpbmRleCA0N2E5NDZlLi5lNmEzZjIxIDEwMDY0NAorLS0tIGEvZWxmL2RsLWNvbmZsaWN0LmMKKysrKyBiL2VsZi9kbC1jb25mbGljdC5jCitAQCAtMzIsNyArMzIsNyBAQCBfZGxfcmVzb2x2ZV9jb25mbGljdHMgKHN0cnVjdCBsaW5rX21hcCAqbCwgRWxmVyhSZWxhKSAqY29uZmxpY3QsCisgCQkgICAgICAgRWxmVyhSZWxhKSAqY29uZmxpY3RlbmQpCisgeworICNpZiAhIEVMRl9NQUNISU5FX05PX1JFTEEKKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfUkVMT0MpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1JFTE9DKSkKKyAgICAgX2RsX2RlYnVnX3ByaW50ZiAoIlxuY29uZmxpY3QgcHJvY2Vzc2luZzogJXNcbiIsIERTT19GSUxFTkFNRSAobC0+bF9uYW1lKSk7CisgCisgICB7CitkaWZmIC0tZ2l0IGEvZWxmL2RsLWRlcHMuYyBiL2VsZi9kbC1kZXBzLmMKK2luZGV4IGVlZTE0NmEuLjFhNGIwMDQgMTAwNjQ0CistLS0gYS9lbGYvZGwtZGVwcy5jCisrKysgYi9lbGYvZGwtZGVwcy5jCitAQCAtMTI3LDcgKzEyNyw3IEBAIGVtcHR5IGR5bmFtaWMgc3RyaW5nIHRva2VuIHN1YnN0aXR1dGlvbiIpKTsJCQkJICAgICAgXAorIAkgICAgZWxzZQkJCQkJCQkgICAgICBcCisgCSAgICAgIHsJCQkJCQkJCSAgICAgIFwKKyAJCS8qIFRoaXMgaXMgZm9yIERUX0FVWElMSUFSWS4gICovCQkJICAgICAgXAorLQkJaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19MSUJTKSkgICBcCisrCQlpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfTElCUykpICAgXAorIAkJICBfZGxfZGVidWdfcHJpbnRmIChOXygiXAorIGNhbm5vdCBsb2FkIGF1eGlsaWFyeSBgJXMnIGJlY2F1c2Ugb2YgZW1wdHkgZHluYW1pYyBzdHJpbmcgdG9rZW4gIgkgICAgICBcCisgCQkJCQkgICAgInN1YnN0aXR1dGlvblxuIiksIF9fc3RyKTsJICAgICAgXAorQEAgLTMwMyw3ICszMDMsNyBAQCBfZGxfbWFwX29iamVjdF9kZXBzIChzdHJ1Y3QgbGlua19tYXAgKm1hcCwKKyAJCWFyZ3MubmFtZSA9IG5hbWU7CisgCisgCQkvKiBTYXkgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gbG9hZCBhbiBhdXhpbGlhcnkgbGlicmFyeS4gICovCistCQlpZiAoX19idWlsdGluX2V4cGVjdCAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0xJQlMsCisrCQlpZiAoX19idWlsdGluX2V4cGVjdCAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfTElCUywKKyAJCQkJICAgICAgMCkpCisgCQkgIF9kbF9kZWJ1Z19wcmludGYgKCJsb2FkIGF1eGlsaWFyeSBvYmplY3Q9JXMiCisgCQkJCSAgICAiIHJlcXVlc3RlZCBieSBmaWxlPSVzXG4iLAorQEAgLTUyMCw3ICs1MjAsNyBAQCBfZGxfbWFwX29iamVjdF9kZXBzIChzdHJ1Y3QgbGlua19tYXAgKm1hcCwKKyAgICAgICBydW5wLT5tYXAtPmxfcmVzZXJ2ZWQgPSAwOworICAgICB9CisgCistICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1BSRUxJTkssIDApICE9IDAKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19QUkVMSU5LLCAwKSAhPSAwCisgICAgICAgJiYgbWFwID09IEdMKGRsX25zKVtMTV9JRF9CQVNFXS5fbnNfbG9hZGVkKQorICAgICB7CisgICAgICAgLyogSWYgd2UgYXJlIHRvIGNvbXB1dGUgY29uZmxpY3RzLCB3ZSBoYXZlIHRvIGJ1aWxkIGxvY2FsIHNjb3BlCitkaWZmIC0tZ2l0IGEvZWxmL2RsLWVycm9yLmMgYi9lbGYvZGwtZXJyb3IuYworaW5kZXggMGZjM2ZkOC4uZWE4MmY0ZCAxMDA2NDQKKy0tLSBhL2VsZi9kbC1lcnJvci5jCisrKysgYi9lbGYvZGwtZXJyb3IuYworQEAgLTEzOSw3ICsxMzksNyBAQCBpbnRlcm5hbF9mdW5jdGlvbgorIF9kbF9zaWduYWxfY2Vycm9yIChpbnQgZXJyY29kZSwgY29uc3QgY2hhciAqb2JqbmFtZSwgY29uc3QgY2hhciAqb2NjYXRpb24sCisgCQkgICBjb25zdCBjaGFyICplcnJzdHJpbmcpCisgeworLSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk8oZGxfZGVidWdfbWFzaykKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPX2RsX2RlYnVnX21hc2sKKyAJCQkmIH4oRExfREVCVUdfU1RBVElTVElDU3xETF9ERUJVR19QUkVMSU5LKSwgMCkpCisgICAgIF9kbF9kZWJ1Z19wcmludGYgKCIlczogZXJyb3I6ICVzOiAlcyAoJXMpXG4iLCBvYmpuYW1lLCBvY2NhdGlvbiwKKyAJCSAgICAgIGVycnN0cmluZywgcmVjZWl2ZXIgPyAiY29udGludWVkIiA6ICJmYXRhbCIpOworZGlmZiAtLWdpdCBhL2VsZi9kbC1maW5pLmMgYi9lbGYvZGwtZmluaS5jCitpbmRleCA2Y2ZlNjUxLi5mNTlmN2ZlIDEwMDY0NAorLS0tIGEvZWxmL2RsLWZpbmkuYworKysrIGIvZWxmL2RsLWZpbmkuYworQEAgLTIzNCw3ICsyMzQsNyBAQCBfZGxfZmluaSAodm9pZCkKKyAJCSAgfHwgbC0+bF9pbmZvW0RUX0ZJTkldICE9IE5VTEwpCisgCQl7CisgCQkgIC8qIFdoZW4gZGVidWdnaW5nIHByaW50IGEgbWVzc2FnZSBmaXJzdC4gICovCistCQkgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPKGRsX2RlYnVnX21hc2spCisrCQkgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPX2RsX2RlYnVnX21hc2sKKyAJCQkJCSYgRExfREVCVUdfSU1QQ0FMTFMsIDApKQorIAkJICAgIF9kbF9kZWJ1Z19wcmludGYgKCJcbmNhbGxpbmcgZmluaTogJXMgWyVsdV1cblxuIiwKKyAJCQkJICAgICAgRFNPX0ZJTEVOQU1FIChsLT5sX25hbWUpLAorQEAgLTI4Niw3ICsyODYsNyBAQCBfZGxfZmluaSAodm9pZCkKKyAgICAgICBnb3RvIGFnYWluOworICAgICB9CisgCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1NUQVRJU1RJQ1MpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1NUQVRJU1RJQ1MpKQorICAgICBfZGxfZGVidWdfcHJpbnRmICgiXG5ydW50aW1lIGxpbmtlciBzdGF0aXN0aWNzOlxuIgorIAkJICAgICAgIiAgICAgICAgICAgZmluYWwgbnVtYmVyIG9mIHJlbG9jYXRpb25zOiAlbHVcbiIKKyAJCSAgICAgICJmaW5hbCBudW1iZXIgb2YgcmVsb2NhdGlvbnMgZnJvbSBjYWNoZTogJWx1XG4iLAorZGlmZiAtLWdpdCBhL2VsZi9kbC1pbml0LmMgYi9lbGYvZGwtaW5pdC5jCitpbmRleCAyZjg1NzMxLi5lNDZlOGI2IDEwMDY0NAorLS0tIGEvZWxmL2RsLWluaXQuYworKysrIGIvZWxmL2RsLWluaXQuYworQEAgLTQ2LDcgKzQ2LDcgQEAgY2FsbF9pbml0IChzdHJ1Y3QgbGlua19tYXAgKmwsIGludCBhcmdjLCBjaGFyICoqYXJndiwgY2hhciAqKmVudikKKyAgICAgcmV0dXJuOworIAorICAgLyogUHJpbnQgYSBkZWJ1ZyBtZXNzYWdlIGlmIHdhbnRlZC4gICovCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0lNUENBTExTKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19JTVBDQUxMUykpCisgICAgIF9kbF9kZWJ1Z19wcmludGYgKCJcbmNhbGxpbmcgaW5pdDogJXNcblxuIiwKKyAJCSAgICAgIERTT19GSUxFTkFNRSAobC0+bF9uYW1lKSk7CisgCitAQCAtOTYsNyArOTYsNyBAQCBfZGxfaW5pdCAoc3RydWN0IGxpbmtfbWFwICptYWluX21hcCwgaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjaGFyICoqZW52KQorICAgICAgIEVsZlcoQWRkcikgKmFkZHJzOworICAgICAgIHVuc2lnbmVkIGludCBjbnQ7CisgCistICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19JTVBDQUxMUykpCisrICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0lNUENBTExTKSkKKyAJX2RsX2RlYnVnX3ByaW50ZiAoIlxuY2FsbGluZyBwcmVpbml0OiAlc1xuXG4iLAorIAkJCSAgRFNPX0ZJTEVOQU1FIChtYWluX21hcC0+bF9uYW1lKSk7CisgCitkaWZmIC0tZ2l0IGEvZWxmL2RsLWxvYWQuYyBiL2VsZi9kbC1sb2FkLmMKK2luZGV4IGY2NjRmNTAuLjhjMjg3NDQgMTAwNjQ0CistLS0gYS9lbGYvZGwtbG9hZC5jCisrKysgYi9lbGYvZGwtbG9hZC5jCitAQCAtOTQzLDcgKzk0Myw3IEBAIF9kbF9tYXBfb2JqZWN0X2Zyb21fZmQgKGNvbnN0IGNoYXIgKm5hbWUsIGludCBmZCwgc3RydWN0IGZpbGVidWYgKmZicCwKKyAgICAgfQorIAorICAgLyogUHJpbnQgZGVidWdnaW5nIG1lc3NhZ2UuICAqLworLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19GSUxFUykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfRklMRVMpKQorICAgICBfZGxfZGVidWdfcHJpbnRmICgiZmlsZT0lcyBbJWx1XTsgIGdlbmVyYXRpbmcgbGluayBtYXBcbiIsIG5hbWUsIG5zaWQpOworIAorICAgLyogVGhpcyBpcyB0aGUgRUxGIGhlYWRlci4gIFdlIHJlYWQgaXQgaW4gYG9wZW5fdmVyaWZ5Jy4gICovCitAQCAtMTM0Nyw3ICsxMzQ3LDcgQEAgY2Fubm90IGVuYWJsZSBleGVjdXRhYmxlIHN0YWNrIGFzIHNoYXJlZCBvYmplY3QgcmVxdWlyZXMiKTsKKyAKKyAgIGwtPmxfZW50cnkgKz0gbC0+bF9hZGRyOworIAorLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19GSUxFUykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfRklMRVMpKQorICAgICBfZGxfZGVidWdfcHJpbnRmICgiXAorICAgZHluYW1pYzogMHglMCpseCAgYmFzZTogMHglMCpseCAgIHNpemU6IDB4JTAqWnhcblwKKyAgICAgZW50cnk6IDB4JTAqbHggIHBoZHI6IDB4JTAqbHggIHBobnVtOiAgICUqdVxuXG4iLAorQEAgLTE3ODksNyArMTc4OSw3IEBAIG9wZW5fcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sIGludCBtb2RlLAorIAorICAgICAgIC8qIElmIHdlIGFyZSBkZWJ1Z2dpbmcgdGhlIHNlYXJjaCBmb3IgbGlicmFyaWVzIHByaW50IHRoZSBwYXRoCisgCSBub3cgaWYgaXQgaGFzbid0IGhhcHBlbmVkIG5vdy4gICovCistICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19MSUJTKQorKyAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19MSUJTKQorIAkgICYmIGN1cnJlbnRfd2hhdCAhPSB0aGlzX2Rpci0+d2hhdCkKKyAJeworIAkgIGN1cnJlbnRfd2hhdCA9IHRoaXNfZGlyLT53aGF0OworQEAgLTE4MTAsNyArMTgxMCw3IEBAIG9wZW5fcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sIGludCBtb2RlLAorIAkgICAgIC0gYnVmKTsKKyAKKyAJICAvKiBQcmludCBuYW1lIHdlIHRyeSBpZiB0aGlzIGlzIHdhbnRlZC4gICovCistCSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19MSUJTKSkKKysJICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfTElCUykpCisgCSAgICBfZGxfZGVidWdfcHJpbnRmICgiICB0cnlpbmcgZmlsZT0lc1xuIiwgYnVmKTsKKyAKKyAJICBmZCA9IG9wZW5fdmVyaWZ5IChidWYsIGZicCwgbG9hZGVyLCB3aGF0Y29kZSwgbW9kZSwKK0BAIC0xOTU1LDcgKzE5NTUsNyBAQCBfZGxfbWFwX29iamVjdCAoc3RydWN0IGxpbmtfbWFwICpsb2FkZXIsIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgIH0KKyAKKyAgIC8qIERpc3BsYXkgaW5mb3JtYXRpb24gaWYgd2UgYXJlIGRlYnVnZ2luZy4gICovCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0ZJTEVTKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0ZJTEVTKQorICAgICAgICYmIGxvYWRlciAhPSBOVUxMKQorICAgICBfZGxfZGVidWdfcHJpbnRmICgobW9kZSAmIF9fUlRMRF9DQUxMTUFQKSA9PSAwCisgCQkgICAgICA/ICJcbmZpbGU9JXMgWyVsdV07ICBuZWVkZWQgYnkgJXMgWyVsdV1cbiIKK0BAIC0xOTk3LDcgKzE5OTcsNyBAQCBfZGxfbWFwX29iamVjdCAoc3RydWN0IGxpbmtfbWFwICpsb2FkZXIsIGNvbnN0IGNoYXIgKm5hbWUsCisgCisgICAgICAgc2l6ZV90IG5hbWVsZW4gPSBzdHJsZW4gKG5hbWUpICsgMTsKKyAKKy0gICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0xJQlMpKQorKyAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19MSUJTKSkKKyAJX2RsX2RlYnVnX3ByaW50ZiAoImZpbmQgbGlicmFyeT0lcyBbJWx1XTsgc2VhcmNoaW5nXG4iLCBuYW1lLCBuc2lkKTsKKyAKKyAgICAgICBmZCA9IC0xOworQEAgLTIxMTksNyArMjExOSw3IEBAIF9kbF9tYXBfb2JqZWN0IChzdHJ1Y3QgbGlua19tYXAgKmxvYWRlciwgY29uc3QgY2hhciAqbmFtZSwKKyAjZW5kaWYKKyAKKyAgICAgICAvKiBBZGQgYW5vdGhlciBuZXdsaW5lIHdoZW4gd2UgYXJlIHRyYWNpbmcgdGhlIGxpYnJhcnkgbG9hZGluZy4gICovCistICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19MSUJTKSkKKysgICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfTElCUykpCisgCV9kbF9kZWJ1Z19wcmludGYgKCJcbiIpOworICAgICB9CisgICBlbHNlCitAQCAtMjE1Miw3ICsyMTUyLDcgQEAgX2RsX21hcF9vYmplY3QgKHN0cnVjdCBsaW5rX21hcCAqbG9hZGVyLCBjb25zdCBjaGFyICpuYW1lLAorICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKGZkID09IC0xKSkKKyAgICAgeworICAgICAgIGlmICh0cmFjZV9tb2RlCistCSAgJiYgX19nbGliY19saWtlbHkgKChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfUFJFTElOSykgPT0gMCkpCisrCSAgJiYgX19nbGliY19saWtlbHkgKChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19QUkVMSU5LKSA9PSAwKSkKKyAJeworIAkgIC8qIFdlIGhhdmVuJ3QgZm91bmQgYW4gYXBwcm9wcmlhdGUgbGlicmFyeS4gIEJ1dCBzaW5jZSB3ZQorIAkgICAgIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGxpc3Qgb2YgbGlicmFyaWVzIHRoaXMgaXNuJ3QKK2RpZmYgLS1naXQgYS9lbGYvZGwtbG9va3VwLmMgYi9lbGYvZGwtbG9va3VwLmMKK2luZGV4IDExY2I0NGIuLjU4OGMzZTQgMTAwNjQ0CistLS0gYS9lbGYvZGwtbG9va3VwLmMKKysrKyBiL2VsZi9kbC1sb29rdXAuYworQEAgLTMwMiw3ICszMDIsNyBAQCBkb19sb29rdXBfdW5pcXVlIChjb25zdCBjaGFyICp1bmRlZl9uYW1lLCB1aW50X2Zhc3QzMl90IG5ld19oYXNoLAorIAkgaGFzaCB0YWJsZS4gICovCisgICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKHRhYi0+c2l6ZSkpCisgCXsKKy0JICBhc3NlcnQgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19QUkVMSU5LKTsKKysJICBhc3NlcnQgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1BSRUxJTkspOworIAkgIGdvdG8gc3VjY2VzczsKKyAJfQorICNlbmRpZgorQEAgLTM3OCw3ICszNzgsNyBAQCBkb19sb29rdXBfeCAoY29uc3QgY2hhciAqdW5kZWZfbmFtZSwgdWludF9mYXN0MzJfdCBuZXdfaGFzaCwKKyAJY29udGludWU7CisgCisgICAgICAgLyogUHJpbnQgc29tZSBkZWJ1Z2dpbmcgaW5mbyBpZiB3YW50ZWQuICAqLworLSAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfU1lNQk9MUykpCisrICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1NZTUJPTFMpKQorIAlfZGxfZGVidWdfcHJpbnRmICgic3ltYm9sPSVzOyAgbG9va3VwIGluIGZpbGU9JXMgWyVsdV1cbiIsCisgCQkJICB1bmRlZl9uYW1lLCBEU09fRklMRU5BTUUgKG1hcC0+bF9uYW1lKSwKKyAJCQkgIG1hcC0+bF9ucyk7CitAQCAtNzU1LDcgKzc1NSw3IEBAIGFkZF9kZXBlbmRlbmN5IChzdHJ1Y3QgbGlua19tYXAgKnVuZGVmX21hcCwgc3RydWN0IGxpbmtfbWFwICptYXAsIGludCBmbGFncykKKyAJfQorIAorICAgICAgIC8qIERpc3BsYXkgaW5mb3JtYXRpb24gaWYgd2UgYXJlIGRlYnVnZ2luZy4gICovCistICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19GSUxFUykpCisrICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0ZJTEVTKSkKKyAJX2RsX2RlYnVnX3ByaW50ZiAoIlwKKyBcbmZpbGU9JXMgWyVsdV07ICBuZWVkZWQgYnkgJXMgWyVsdV0gKHJlbG9jYXRpb24gZGVwZW5kZW5jeSlcblxuIiwKKyAJCQkgIERTT19GSUxFTkFNRSAobWFwLT5sX25hbWUpLAorQEAgLTg1OSw3ICs4NTksNyBAQCBfZGxfbG9va3VwX3N5bWJvbF94IChjb25zdCBjaGFyICp1bmRlZl9uYW1lLCBzdHJ1Y3QgbGlua19tYXAgKnVuZGVmX21hcCwKKyAgICAgeworICAgICAgIGlmICgoKnJlZiA9PSBOVUxMIHx8IEVMRlcoU1RfQklORCkgKCgqcmVmKS0+c3RfaW5mbykgIT0gU1RCX1dFQUspCisgCSAgJiYgc2tpcF9tYXAgPT0gTlVMTAorLQkgICYmICEoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1VOVVNFRCkpCisrCSAgJiYgIShHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19VTlVTRUQpKQorIAl7CisgCSAgLyogV2UgY291bGQgZmluZCBubyB2YWx1ZSBmb3IgYSBzdHJvbmcgcmVmZXJlbmNlLiAgKi8KKyAJICBjb25zdCBjaGFyICpyZWZlcmVuY2VfbmFtZSA9IHVuZGVmX21hcCA/IHVuZGVmX21hcC0+bF9uYW1lIDogIiI7CitAQCAtOTM1LDcgKzkzNSw3IEBAIF9kbF9sb29rdXBfc3ltYm9sX3ggKGNvbnN0IGNoYXIgKnVuZGVmX25hbWUsIHN0cnVjdCBsaW5rX21hcCAqdW5kZWZfbWFwLAorICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKGN1cnJlbnRfdmFsdWUubS0+bF91c2VkID09IDApKQorICAgICBjdXJyZW50X3ZhbHVlLm0tPmxfdXNlZCA9IDE7CisgCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzaworIAkJCSYgKERMX0RFQlVHX0JJTkRJTkdTfERMX0RFQlVHX1BSRUxJTkspKSkKKyAgICAgX2RsX2RlYnVnX2JpbmRpbmdzICh1bmRlZl9uYW1lLCB1bmRlZl9tYXAsIHJlZiwKKyAJCQkmY3VycmVudF92YWx1ZSwgdmVyc2lvbiwgdHlwZV9jbGFzcywgcHJvdGVjdGVkKTsKK0BAIC0xMDAwLDcgKzEwMDAsNyBAQCBfZGxfZGVidWdfYmluZGluZ3MgKGNvbnN0IGNoYXIgKnVuZGVmX25hbWUsIHN0cnVjdCBsaW5rX21hcCAqdW5kZWZfbWFwLAorIHsKKyAgIGNvbnN0IGNoYXIgKnJlZmVyZW5jZV9uYW1lID0gdW5kZWZfbWFwLT5sX25hbWU7CisgCistICBpZiAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0JJTkRJTkdTKQorKyAgaWYgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0JJTkRJTkdTKQorICAgICB7CisgICAgICAgX2RsX2RlYnVnX3ByaW50ZiAoImJpbmRpbmcgZmlsZSAlcyBbJWx1XSB0byAlcyBbJWx1XTogJXMgc3ltYm9sIGAlcyciLAorIAkJCURTT19GSUxFTkFNRSAocmVmZXJlbmNlX25hbWUpLAorQEAgLTEwMTQsNyArMTAxNCw3IEBAIF9kbF9kZWJ1Z19iaW5kaW5ncyAoY29uc3QgY2hhciAqdW5kZWZfbmFtZSwgc3RydWN0IGxpbmtfbWFwICp1bmRlZl9tYXAsCisgCV9kbF9kZWJ1Z19wcmludGZfYyAoIlxuIik7CisgICAgIH0KKyAjaWZkZWYgU0hBUkVECistICBpZiAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1BSRUxJTkspCisrICBpZiAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfUFJFTElOSykKKyAgICAgeworICAgICAgIGludCBjb25mbGljdCA9IDA7CisgICAgICAgc3RydWN0IHN5bV92YWwgdmFsID0geyBOVUxMLCBOVUxMIH07CitkaWZmIC0tZ2l0IGEvZWxmL2RsLW9iamVjdC5jIGIvZWxmL2RsLW9iamVjdC5jCitpbmRleCAxZDU4YmJjLi45MzhhMjU3IDEwMDY0NAorLS0tIGEvZWxmL2RsLW9iamVjdC5jCisrKysgYi9lbGYvZGwtb2JqZWN0LmMKK0BAIC05OCw3ICs5OCw3IEBAIF9kbF9uZXdfb2JqZWN0IChjaGFyICpyZWFsbmFtZSwgY29uc3QgY2hhciAqbGlibmFtZSwgaW50IHR5cGUsCisgICBuZXctPmxfdHlwZSA9IHR5cGU7CisgICAvKiBJZiB3ZSBzZXQgdGhlIGJpdCBub3cgc2luY2Ugd2Uga25vdyBpdCBpcyBuZXZlciB1c2VkIHdlIGF2b2lkCisgICAgICBkaXJ0eWluZyB0aGUgY2FjaGUgbGluZSBsYXRlci4gICovCistICBpZiAoKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19VTlVTRUQpID09IDApCisrICBpZiAoKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1VOVVNFRCkgPT0gMCkKKyAgICAgbmV3LT5sX3VzZWQgPSAxOworICAgbmV3LT5sX2xvYWRlciA9IGxvYWRlcjsKKyAjaWYgTk9fVExTX09GRlNFVCAhPSAwCitkaWZmIC0tZ2l0IGEvZWxmL2RsLW9wZW4uYyBiL2VsZi9kbC1vcGVuLmMKK2luZGV4IDJkYjFjMDIuLjEyODg2MDQgMTAwNjQ0CistLS0gYS9lbGYvZGwtb3Blbi5jCisrKysgYi9lbGYvZGwtb3Blbi5jCitAQCAtMTQ3LDcgKzE0Nyw3IEBAIGFkZF90b19nbG9iYWwgKHN0cnVjdCBsaW5rX21hcCAqbmV3KQorIAkgIG5zLT5fbnNfbWFpbl9zZWFyY2hsaXN0LT5yX2xpc3RbbmV3X25saXN0KytdID0gbWFwOworIAorIAkgIC8qIFdlIG1vZGlmeSB0aGUgZ2xvYmFsIHNjb3BlLiAgUmVwb3J0IHRoaXMuICAqLworLQkgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfU0NPUEVTKSkKKysJICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfU0NPUEVTKSkKKyAJICAgIF9kbF9kZWJ1Z19wcmludGYgKCJcbmFkZCAlcyBbJWx1XSB0byBnbG9iYWwgc2NvcGVcbiIsCisgCQkJICAgICAgbWFwLT5sX25hbWUsIG1hcC0+bF9ucyk7CisgCX0KK0BAIC0yNTEsNyArMjUxLDcgQEAgZGxfb3Blbl93b3JrZXIgKHZvaWQgKmEpCisgICBpZiAoX19nbGliY191bmxpa2VseSAobmV3LT5sX3NlYXJjaGxpc3Qucl9saXN0ICE9IE5VTEwpKQorICAgICB7CisgICAgICAgLyogTGV0IHRoZSB1c2VyIGtub3cgYWJvdXQgdGhlIG9wZW5jb3VudC4gICovCistICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19GSUxFUykpCisrICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0ZJTEVTKSkKKyAJX2RsX2RlYnVnX3ByaW50ZiAoIm9wZW5pbmcgZmlsZT0lcyBbJWx1XTsgZGlyZWN0X29wZW5jb3VudD0ldVxuXG4iLAorIAkJCSAgbmV3LT5sX25hbWUsIG5ldy0+bF9ucywgbmV3LT5sX2RpcmVjdF9vcGVuY291bnQpOworIAorQEAgLTMwMiw3ICszMDIsNyBAQCBkbF9vcGVuX3dvcmtlciAodm9pZCAqYSkKKyAgIExJQkNfUFJPQkUgKG1hcF9jb21wbGV0ZSwgMywgYXJncy0+bnNpZCwgciwgbmV3KTsKKyAKKyAgIC8qIFByaW50IHNjb3BlIGluZm9ybWF0aW9uLiAgKi8KKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfU0NPUEVTKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19TQ09QRVMpKQorICAgICBfZGxfc2hvd19zY29wZSAobmV3LCAwKTsKKyAKKyAgIC8qIE9ubHkgZG8gbGF6eSByZWxvY2F0aW9uIGlmIGBMRF9CSU5EX05PVycgaXMgbm90IHNldC4gICovCitAQCAtNTE5LDcgKzUxOSw3IEBAIGRsX29wZW5fd29ya2VyICh2b2lkICphKQorIAl9CisgCisgICAgICAgLyogUHJpbnQgc2NvcGUgaW5mb3JtYXRpb24uICAqLworLSAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfU0NPUEVTKSkKKysgICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfU0NPUEVTKSkKKyAJX2RsX3Nob3dfc2NvcGUgKGltYXAsIGZyb21fc2NvcGUpOworICAgICB9CisgCitAQCAtNTc3LDcgKzU3Nyw3IEBAIFRMUyBnZW5lcmF0aW9uIGNvdW50ZXIgd3JhcHBlZCEgIFBsZWFzZSByZXBvcnQgdGhpcy4iKSk7CisgI2VuZGlmCisgCisgICAvKiBMZXQgdGhlIHVzZXIga25vdyBhYm91dCB0aGUgb3BlbmNvdW50LiAgKi8KKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfRklMRVMpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0ZJTEVTKSkKKyAgICAgX2RsX2RlYnVnX3ByaW50ZiAoIm9wZW5pbmcgZmlsZT0lcyBbJWx1XTsgZGlyZWN0X29wZW5jb3VudD0ldVxuXG4iLAorIAkJICAgICAgbmV3LT5sX25hbWUsIG5ldy0+bF9ucywgbmV3LT5sX2RpcmVjdF9vcGVuY291bnQpOworIH0KK2RpZmYgLS1naXQgYS9lbGYvZGwtcmVsb2MuYyBiL2VsZi9kbC1yZWxvYy5jCitpbmRleCA2MTI1MmQ3Li40YzgzODE1IDEwMDY0NAorLS0tIGEvZWxmL2RsLXJlbG9jLmMKKysrKyBiL2VsZi9kbC1yZWxvYy5jCitAQCAtMTc4LDcgKzE3OCw3IEBAIF9kbF9yZWxvY2F0ZV9vYmplY3QgKHN0cnVjdCBsaW5rX21hcCAqbCwgc3RydWN0IHJfc2NvcGVfZWxlbSAqc2NvcGVbXSwKKyAgICAgICAmJiBfX2J1aWx0aW5fZXhwZWN0IChsLT5sX2luZm9bRFRfQklORF9OT1ddICE9IE5VTEwsIDApKQorICAgICBsYXp5ID0gMDsKKyAKKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfUkVMT0MpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1JFTE9DKSkKKyAgICAgX2RsX2RlYnVnX3ByaW50ZiAoIlxucmVsb2NhdGlvbiBwcm9jZXNzaW5nOiAlcyVzXG4iLAorIAkJICAgICAgRFNPX0ZJTEVOQU1FIChsLT5sX25hbWUpLCBsYXp5ID8gIiAobGF6eSkiIDogIiIpOworIAorZGlmZiAtLWdpdCBhL2VsZi9kbC12ZXJzaW9uLmMgYi9lbGYvZGwtdmVyc2lvbi5jCitpbmRleCBmNmU1Y2Q5Li4zMjA2MjhjIDEwMDY0NAorLS0tIGEvZWxmL2RsLXZlcnNpb24uYworKysrIGIvZWxmL2RsLXZlcnNpb24uYworQEAgLTgyLDcgKzgyLDcgQEAgbWF0Y2hfc3ltYm9sIChjb25zdCBjaGFyICpuYW1lLCBMbWlkX3QgbnMsIEVsZlcoV29yZCkgaGFzaCwgY29uc3QgY2hhciAqc3RyaW5nLAorICAgaW50IHJlc3VsdCA9IDA7CisgCisgICAvKiBEaXNwbGF5IGluZm9ybWF0aW9uIGFib3V0IHdoYXQgd2UgYXJlIGRvaW5nIHdoaWxlIGRlYnVnZ2luZy4gICovCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1ZFUlNJT05TKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19WRVJTSU9OUykpCisgICAgIF9kbF9kZWJ1Z19wcmludGYgKCJcCisgY2hlY2tpbmcgZm9yIHZlcnNpb24gYCVzJyBpbiBmaWxlICVzIFslbHVdIHJlcXVpcmVkIGJ5IGZpbGUgJXMgWyVsdV1cbiIsCisgCQkgICAgICBzdHJpbmcsIERTT19GSUxFTkFNRSAobWFwLT5sX25hbWUpLAorZGlmZiAtLWdpdCBhL2VsZi9nZXQtZHluYW1pYy1pbmZvLmggYi9lbGYvZ2V0LWR5bmFtaWMtaW5mby5oCitpbmRleCBkYzgzNTlkLi43Nzc0ZmRhIDEwMDY0NAorLS0tIGEvZWxmL2dldC1keW5hbWljLWluZm8uaAorKysrIGIvZWxmL2dldC1keW5hbWljLWluZm8uaAorQEAgLTE2Niw3ICsxNjYsNyBAQCBlbGZfZ2V0X2R5bmFtaWNfaW5mbyAoc3RydWN0IGxpbmtfbWFwICpsLCBFbGZXKER5bikgKnRlbXApCisgCSB0aGVtLiBUaGVyZWZvcmUgdG8gYXZvaWQgYnJlYWtpbmcgZXhpc3RpbmcgYXBwbGljYXRpb25zIHRoZQorIAkgYmVzdCB3ZSBjYW4gZG8gaXMgYWRkIGEgd2FybmluZyBkdXJpbmcgZGVidWdnaW5nIHdpdGggdGhlCisgCSBpbnRlbnQgb2Ygbm90aWZ5aW5nIHRoZSB1c2VyIG9mIHRoZSBwcm9ibGVtLiAgKi8KKy0gICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0ZJTEVTLCAwKQorKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19GSUxFUywgMCkKKyAJICAmJiBsLT5sX2ZsYWdzXzEgJiB+RFRfMV9TVVBQT1JURURfTUFTSykKKyAJX2RsX2RlYnVnX3ByaW50ZiAoIlxuV0FSTklORzogVW5zdXBwb3J0ZWQgZmxhZyB2YWx1ZShzKSBvZiAweCV4IGluIERUX0ZMQUdTXzEuXG4iLAorIAkJCSAgbC0+bF9mbGFnc18xICYgfkRUXzFfU1VQUE9SVEVEX01BU0spOworZGlmZiAtLWdpdCBhL2VsZi9ydGxkLmMgYi9lbGYvcnRsZC5jCitpbmRleCBmYzNhMmRiLi41OWM0NjM3IDEwMDY0NAorLS0tIGEvZWxmL3J0bGQuYworKysrIGIvZWxmL3J0bGQuYworQEAgLTMyMyw3ICszMjMsNyBAQCBfZGxfc3RhcnRfZmluYWwgKHZvaWQgKmFyZywgc3RydWN0IGRsX3N0YXJ0X2ZpbmFsX2luZm8gKmluZm8pCisgICAgIH0KKyAjZW5kaWYKKyAKKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfU1RBVElTVElDUykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfU1RBVElTVElDUykpCisgICAgIHsKKyAjaWZuZGVmIEhQX1RJTUlOR19OT05BVkFJTAorICAgICAgIHByaW50X3N0YXRpc3RpY3MgKCZydGxkX3RvdGFsX3RpbWUpOworQEAgLTE3MDEsNyArMTcwMSw3IEBAIEVSUk9SOiBsZC5zbzogb2JqZWN0ICclcycgY2Fubm90IGJlIGxvYWRlZCBhcyBhdWRpdCBpbnRlcmZhY2U6ICVzOyBpZ25vcmVkLlxuIiwKKyAJIGFmdGVyIHJlbG9jYXRpb24uICAqLworICAgICAgIHN0cnVjdCBsaW5rX21hcCAqbDsKKyAKKy0gICAgICBpZiAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1BSRUxJTkspCisrICAgICAgaWYgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1BSRUxJTkspCisgCXsKKyAJICBzdHJ1Y3Qgcl9zY29wZV9lbGVtICpzY29wZSA9ICZtYWluX21hcC0+bF9zZWFyY2hsaXN0OworIAorQEAgLTE3MzEsNyArMTczMSw3IEBAIEVSUk9SOiBsZC5zbzogb2JqZWN0ICclcycgY2Fubm90IGJlIGxvYWRlZCBhcyBhdWRpdCBpbnRlcmZhY2U6ICVzOyBpZ25vcmVkLlxuIiwKKyAJCV9kbF9wcmludGYgKCJcbiIpOworIAkgICAgfQorIAl9CistICAgICAgZWxzZSBpZiAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1VOVVNFRCkKKysgICAgICBlbHNlIGlmIChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19VTlVTRUQpCisgCXsKKyAJICAvKiBMb29rIHRocm91Z2ggdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgbWFpbiBleGVjdXRhYmxlCisgCSAgICAgYW5kIGRldGVybWluZSB3aGljaCBvZiB0aGVtIGlzIG5vdCBhY3R1YWxseQorQEAgLTE4MzksNyArMTgzOSw3IEBAIEVSUk9SOiBsZC5zbzogb2JqZWN0ICclcycgY2Fubm90IGJlIGxvYWRlZCBhcyBhdWRpdCBpbnRlcmZhY2U6ICVzOyBpZ25vcmVkLlxuIiwKKyAJCSAgICB9CisgCQl9CisgCistCSAgICAgIGlmICgoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1BSRUxJTkspCisrCSAgICAgIGlmICgoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfUFJFTElOSykKKyAJCSAgJiYgcnRsZF9tdWx0aXBsZV9yZWYpCisgCQl7CisgCQkgIC8qIE1hcmsgdGhlIGxpbmsgbWFwIGFzIG5vdCB5ZXQgcmVsb2NhdGVkIGFnYWluLiAgKi8KK0BAIC0xOTcyLDcgKzE5NzIsNyBAQCBFUlJPUjogbGQuc286IG9iamVjdCAnJXMnIGNhbm5vdCBiZSBsb2FkZWQgYXMgYXVkaXQgaW50ZXJmYWNlOiAlczsgaWdub3JlZC5cbiIsCisgICAgICAgaWYgKHJfbGlzdCA9PSByX2xpc3RlbmQgJiYgbGlibGlzdCA9PSBsaWJsaXN0ZW5kKQorIAlwcmVsaW5rZWQgPSB0cnVlOworIAorLSAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfTElCUykpCisrICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0xJQlMpKQorIAlfZGxfZGVidWdfcHJpbnRmICgiXG5wcmVsaW5rIGNoZWNraW5nOiAlc1xuIiwKKyAJCQkgIHByZWxpbmtlZCA/ICJvayIgOiAiZmFpbGVkIik7CisgICAgIH0KK0BAIC0xOTkwLDcgKzE5OTAsNyBAQCBFUlJPUjogbGQuc286IG9iamVjdCAnJXMnIGNhbm5vdCBiZSBsb2FkZWQgYXMgYXVkaXQgaW50ZXJmYWNlOiAlczsgaWdub3JlZC5cbiIsCisgICBHTFJPKGRsX2luaXRfYWxsX2RpcnMpID0gR0woZGxfYWxsX2RpcnMpOworIAorICAgLyogUHJpbnQgc2NvcGUgaW5mb3JtYXRpb24uICAqLworLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19TQ09QRVMpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1NDT1BFUykpCisgICAgIHsKKyAgICAgICBfZGxfZGVidWdfcHJpbnRmICgiXG5Jbml0aWFsIG9iamVjdCBzY29wZXNcbiIpOworIAorQEAgLTIyNjUsNyArMjI2NSw3IEBAIHByb2Nlc3NfZGxfZGVidWcgKGNvbnN0IGNoYXIgKmRsX2RlYnVnKQorIAkgICAgaWYgKGRlYm9wdHNbY250XS5sZW4gPT0gbGVuCisgCQkmJiBtZW1jbXAgKGRsX2RlYnVnLCBkZWJvcHRzW2NudF0ubmFtZSwgbGVuKSA9PSAwKQorIAkgICAgICB7CistCQlHTFJPKGRsX2RlYnVnX21hc2spIHw9IGRlYm9wdHNbY250XS5tYXNrOworKwkJR0xST19kbF9kZWJ1Z19tYXNrIHw9IGRlYm9wdHNbY250XS5tYXNrOworIAkJYW55X2RlYnVnID0gMTsKKyAJCWJyZWFrOworIAkgICAgICB9CitAQCAtMjI4Niw3ICsyMjg2LDcgQEAgd2FybmluZzogZGVidWcgb3B0aW9uIGAlcycgdW5rbm93bjsgdHJ5IExEX0RFQlVHPWhlbHBcbiIsIGNvcHkpOworICAgICAgICsrZGxfZGVidWc7CisgICAgIH0KKyAKKy0gIGlmIChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfVU5VU0VEKQorKyAgaWYgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1VOVVNFRCkKKyAgICAgeworICAgICAgIC8qIEluIG9yZGVyIHRvIGdldCBhbiBhY2N1cmF0ZSBwaWN0dXJlIG9mIHdoZXRoZXIgYSBwYXJ0aWN1bGFyCisgCSBEVF9ORUVERUQgZW50cnkgaXMgYWN0dWFsbHkgdXNlZCB3ZSBoYXZlIHRvIHByb2Nlc3MgYm90aAorQEAgLTIyOTQsNyArMjI5NCw3IEBAIHdhcm5pbmc6IGRlYnVnIG9wdGlvbiBgJXMnIHVua25vd247IHRyeSBMRF9ERUJVRz1oZWxwXG4iLCBjb3B5KTsKKyAgICAgICBHTFJPKGRsX2xhenkpID0gMDsKKyAgICAgfQorIAorLSAgaWYgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19IRUxQKQorKyAgaWYgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0hFTFApCisgICAgIHsKKyAgICAgICBzaXplX3QgY250OworIAorQEAgLTI0OTksNyArMjQ5OSw3IEBAIHByb2Nlc3NfZW52dmFycyAoZW51bSBtb2RlICptb2RlcCkKKyAJICAgICAgbW9kZSA9IHRyYWNlOworIAkgICAgICBHTFJPKGRsX3ZlcmJvc2UpID0gMTsKKyAjaWYgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKy0JICAgICAgR0xSTyhkbF9kZWJ1Z19tYXNrKSB8PSBETF9ERUJVR19QUkVMSU5LOworKwkgICAgICBHTFJPX2RsX2RlYnVnX21hc2sgfD0gRExfREVCVUdfUFJFTElOSzsKKyAjZW5kaWYKKyAJICAgICAgR0xSTyhkbF90cmFjZV9wcmVsaW5rKSA9ICZlbnZsaW5lWzE3XTsKKyAJICAgIH0KK0BAIC0yNTQ4LDcgKzI1NDgsNyBAQCBwcm9jZXNzX2VudnZhcnMgKGVudW0gbW9kZSAqbW9kZXApCisgCXsKKyAJICB1bnNldGVudiAoIk1BTExPQ19DSEVDS18iKTsKKyAjaWYgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKy0JICBHTFJPKGRsX2RlYnVnX21hc2spID0gMDsKKysJICBHTFJPX2RsX2RlYnVnX21hc2sgPSAwOworICNlbmRpZgorIAl9CisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNy1lZ2xpYmMtdXNlLW9wdGlvbi1ncm91cHMtQ29uZGl0aW9uYWxseS1leGNsdWRlLWMtdGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI3LWVnbGliYy11c2Utb3B0aW9uLWdyb3Vwcy1Db25kaXRpb25hbGx5LWV4Y2x1ZGUtYy10ZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEwNjE2NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNy1lZ2xpYmMtdXNlLW9wdGlvbi1ncm91cHMtQ29uZGl0aW9uYWxseS1leGNsdWRlLWMtdGVzLnBhdGNoCkBAIC0wLDAgKzEsMTQ1IEBACitGcm9tIGU5ODc3OWFhNTZmYWUwMzQ2ZGZmMmQwYjcyYWNhZGQwZWFmMDE4OTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAyNyBNYXkgMjAxNSAxNjoxMDo1MCAtMDcwMAorU3ViamVjdDogW1BBVENIIDI3LzI3XSBlZ2xpYmMtdXNlLW9wdGlvbi1ncm91cHM6IENvbmRpdGlvbmFsbHkgZXhjbHVkZSBjKysKKyB0ZXN0cworCisgICAgU29tZSB0ZXN0IHByb2dyYW1zIHdyaXR0ZW4gaW4gYysrIGFyZSBzdGlsbCBpbmNsdWRlZCBpbiBzcGl0ZSBvZgorICAgICJsaWJjLWN4eC10ZXN0cyIgYmVpbmcgb21pdHRlZCBmcm9tIERJU1RST19GRUFUVVJFU19MSUJDLgorICAgIEFsbCAuY2MgcHJvZ3JhbXMgYXJlIGNvbXBpbGVkIHdpdGggZysrLgorICAgIGcrKyBhdXRvbWF0aWNhbGx5IHNwZWNpZmllcyBsaW5raW5nIGFnYWluc3QgdGhlIEMrKyBsaWJyYXJ5LgorICAgIFRoaXMgcGF0Y2ggY29uZGl0aW9uYWxseSBleGNsdWRlcyB0aGUgZm9sbG93aW5nIHRlc3RzIGFzIHdlbGw6CisKKyAgICAgIGJ1Zy1hdGV4aXQzLWxpYi5jYworICAgICAgdHN0LWNhbmNlbDI0LmNjCisgICAgICB0c3QtY2FuY2VsMjQtc3RhdGljLmNjCisgICAgICB0c3QtdW5pcXVlM2xpYi5jYworICAgICAgdHN0LXVuaXF1ZTNsaWIyLmNjCisgICAgICB0c3QtdW5pcXVlNGxpYi5jYworICAgICAgdHN0LXVuaXF1ZTMuY2MKKyAgICAgIHRzdC11bmlxdWU0LmNjCisKKyAgICBUZXN0ZWQgd2l0aCBESVNUUk9fRkVBVFVSRVNfTElCQ19yZW1vdmUgPSAiIGxpYmMtY3h4LXRlc3RzIgorCisgICAgW1lPQ1RPICM3MDAzXQorCitTaWduZWQtb2ZmLWJ5OiBKdXJvIEJ5c3RyaWNreSA8anVyby5ieXN0cmlja3lAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGRsZmNuL01ha2VmaWxlIHwgIDggKysrKysrLS0KKyBlbGYvTWFrZWZpbGUgICB8IDE5ICsrKysrKysrKysrKysrLS0tLS0KKyBucHRsL01ha2VmaWxlICB8IDEyICsrKysrKysrKystLQorIDMgZmlsZXMgY2hhbmdlZCwgMzAgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RsZmNuL01ha2VmaWxlIGIvZGxmY24vTWFrZWZpbGUKK2luZGV4IDM4Mjc2MDcuLjkyMGJkNTggMTAwNjQ0CistLS0gYS9kbGZjbi9NYWtlZmlsZQorKysrIGIvZGxmY24vTWFrZWZpbGUKK0BAIC0zOSwxNiArMzksMjAgQEAgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKyB0ZXN0cyA9IGdscmVmbWFpbiBmYWlsdGVzdCB0c3QtZGxhZGRyIGRlZmF1bHQgZXJybXNnMSB0c3RjeGFhdGV4aXQgXAorIAlidWctZGxvcGVuMSBidWctZGxzeW0xIHRzdC1kbGluZm8gYnVnLWF0ZXhpdDEgYnVnLWF0ZXhpdDIgXAorIAl0c3RhdGV4aXQgYnVnLWRsLWxlYWYgdHN0LXJlYy1kbG9wZW4KKy1lbmRpZgorLQorIHRlc3RzLSQoT1BUSU9OX0VHTElCQ19DWFhfVEVTVFMpICs9IGJ1Zy1hdGV4aXQzCisgCisrZW5kaWYKKysKKyBtb2R1bGVzLW5hbWVzID0gZ2xyZWZsaWIxIGdscmVmbGliMiBnbHJlZmxpYjMgZmFpbHRlc3Rtb2QgZGVmYXVsdG1vZDEgXAorIAkJZGVmYXVsdG1vZDIgZXJybXNnMW1vZCBtb2RhdGV4aXQgbW9kY3hhYXRleGl0IFwKKyAJCWJ1Zy1kbHN5bTEtbGliMSBidWctZGxzeW0xLWxpYjIgYnVnLWF0ZXhpdDEtbGliIFwKKyAJCWJ1Zy1hdGV4aXQyLWxpYiBidWctZGwtbGVhZi1saWIgXAorIAkJYnVnLWRsLWxlYWYtbGliLWNiIG1vZGR1bW15MSBtb2RkdW1teTIKKyAKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19DWFhfVEVTVFMpKQorK21vZHVsZXMtbmFtZXMgKz0gYnVnLWF0ZXhpdDMtbGliCisrZW5kaWYKKysKKyBmYWlsdGVzdG1vZC5zby1uby16LWRlZnMgPSB5ZXMKKyBnbHJlZmxpYjIuc28tbm8tei1kZWZzID0geWVzCisgZXJybXNnMW1vZC5zby1uby16LWRlZnMgPSB5ZXMKK2RpZmYgLS1naXQgYS9lbGYvTWFrZWZpbGUgYi9lbGYvTWFrZWZpbGUKK2luZGV4IDcxYTE4YTEuLjI2ZmUzYzUgMTAwNjQ0CistLS0gYS9lbGYvTWFrZWZpbGUKKysrKyBiL2VsZi9NYWtlZmlsZQorQEAgLTE3LDYgKzE3LDggQEAKKyAKKyAjIE1ha2VmaWxlIGZvciBlbGYgc3ViZGlyZWN0b3J5IG9mIEdOVSBDIExpYnJhcnkuCisgCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgkJOj0gZWxmCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMTQ1LDEyICsxNDcsMTUgQEAgdGVzdHMgKz0gbG9hZHRlc3QgcmVzdGVzdDEgcHJlbG9hZHRlc3QgbG9hZGZhaWwgbXVsdGlsb2FkIG9yaWd0ZXN0IHJlc29sdmZhaWwgXAorIAkgdW5sb2FkMyB1bmxvYWQ0IHVubG9hZDUgdW5sb2FkNiB1bmxvYWQ3IHVubG9hZDggdHN0LWdsb2JhbDEgb3JkZXIyIFwKKyAJIHRzdC1hdWRpdDEgdHN0LWF1ZGl0MiB0c3QtYXVkaXQ4IHRzdC1hdWRpdDkgXAorIAkgdHN0LXN0YWNrZ3VhcmQxIHRzdC1hZGRyMSB0c3QtdGhybG9jayBcCistCSB0c3QtdW5pcXVlMSB0c3QtdW5pcXVlMiAkKGlmICQoQ1hYKSx0c3QtdW5pcXVlMyB0c3QtdW5pcXVlNCBcCistCSB0c3Qtbm9kZWxldGUpIFwKKysJIHRzdC11bmlxdWUxIHRzdC11bmlxdWUyIFwKKyAJIHRzdC1pbml0b3JkZXIgdHN0LWluaXRvcmRlcjIgdHN0LXJlbHNvcnQxIHRzdC1udWxsLWFyZ3YgXAorIAkgdHN0LXB0cmd1YXJkMSB0c3QtdGxzYWxpZ24gdHN0LXRsc2FsaWduLWV4dGVybiB0c3Qtbm9kZWxldGUtb3BlbmVkIFwKKyAJIHRzdC1ub2RlbGV0ZTIKKyAjCSByZWxkZXA5CisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfQ1hYX1RFU1RTKSkKKyt0ZXN0cyArPSAkKGlmICQoQ1hYKSx0c3QtdW5pcXVlMyB0c3QtdW5pcXVlNCB0c3Qtbm9kZWxldGUpCisrZW5kaWYKKysKKyBpZmVxICgkKGJ1aWxkLWhhcmRjb2RlZC1wYXRoLWluLXRlc3RzKSx5ZXMpCisgdGVzdHMgKz0gdHN0LWRsb3Blbi1hb3V0CisgTERGTEFHUy10c3QtZGxvcGVuLWFvdXQgPSAkKG5vLXBpZS1sZGZsYWcpCitAQCAtMjA5LDkgKzIxNCw2IEBAIG1vZHVsZXMtbmFtZXMgPSB0ZXN0b2JqMSB0ZXN0b2JqMiB0ZXN0b2JqMyB0ZXN0b2JqNCB0ZXN0b2JqNSB0ZXN0b2JqNiBcCisgCQl0c3QtdW5pcXVlMW1vZDEgdHN0LXVuaXF1ZTFtb2QyIFwKKyAJCXRzdC11bmlxdWUybW9kMSB0c3QtdW5pcXVlMm1vZDIgXAorIAkJdHN0LWF1ZGl0bW9kOWEgdHN0LWF1ZGl0bW9kOWIgXAorLQkJJChpZiAkKENYWCksdHN0LXVuaXF1ZTNsaWIgdHN0LXVuaXF1ZTNsaWIyIHRzdC11bmlxdWU0bGliIFwKKy0JCSAgdHN0LW5vZGVsZXRlLXVuaXF1ZW1vZCB0c3Qtbm9kZWxldGUtcnRsZG1vZCBcCistCQkgIHRzdC1ub2RlbGV0ZS16bW9kKSBcCisgCQl0c3QtaW5pdG9yZGVyYTEgdHN0LWluaXRvcmRlcmIxIFwKKyAJCXRzdC1pbml0b3JkZXJhMiB0c3QtaW5pdG9yZGVyYjIgXAorIAkJdHN0LWluaXRvcmRlcmEzIHRzdC1pbml0b3JkZXJhNCBcCitAQCAtMjIwLDYgKzIyMiwxMyBAQCBtb2R1bGVzLW5hbWVzID0gdGVzdG9iajEgdGVzdG9iajIgdGVzdG9iajMgdGVzdG9iajQgdGVzdG9iajUgdGVzdG9iajYgXAorIAkJdHN0LXJlbHNvcnQxbW9kMSB0c3QtcmVsc29ydDFtb2QyIHRzdC1hcnJheTJkZXAgXAorIAkJdHN0LWFycmF5NWRlcCB0c3QtbnVsbC1hcmd2LWxpYiBcCisgCQl0c3QtdGxzYWxpZ24tbGliIHRzdC1ub2RlbGV0ZS1vcGVuZWQtbGliIHRzdC1ub2RlbGV0ZTJtb2QKKysKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19DWFhfVEVTVFMpKQorK21vZHVsZXMtbmFtZXMgKz0gJChpZiAkKENYWCksdHN0LXVuaXF1ZTNsaWIgdHN0LXVuaXF1ZTNsaWIyIHRzdC11bmlxdWU0bGliIFwKKysJCSAgdHN0LW5vZGVsZXRlLXVuaXF1ZW1vZCB0c3Qtbm9kZWxldGUtcnRsZG1vZCBcCisrCQkgIHRzdC1ub2RlbGV0ZS16bW9kKQorK2VuZGlmCisrCisgaWZlcSAoeWVzLCQoaGF2ZS1wcm90ZWN0ZWQtZGF0YSkpCisgbW9kdWxlcy1uYW1lcyArPSB0c3QtcHJvdGVjdGVkMW1vZGEgdHN0LXByb3RlY3RlZDFtb2RiCisgdGVzdHMgKz0gdHN0LXByb3RlY3RlZDFhIHRzdC1wcm90ZWN0ZWQxYgorZGlmZiAtLWdpdCBhL25wdGwvTWFrZWZpbGUgYi9ucHRsL01ha2VmaWxlCitpbmRleCA1OTZjYTNjLi41MGE3MDhiIDEwMDY0NAorLS0tIGEvbnB0bC9NYWtlZmlsZQorKysrIGIvbnB0bC9NYWtlZmlsZQorQEAgLTM5MCwxMiArMzkwLDIwIEBAIGxpbmstbGliYy1zdGF0aWMgOj0gJChjb21tb24tb2JqcGZ4KWxpYmMuYSAkKHN0YXRpYy1nbnVsaWIpIFwKKyAJCSAgICAkKGNvbW1vbi1vYmpwZngpbGliYy5hCisgCisgdGVzdHMtc3RhdGljICs9IHRzdC1sb2NhbGUxIHRzdC1sb2NhbGUyIHRzdC1zdGFja2d1YXJkMS1zdGF0aWMgXAorLQkJdHN0LWNhbmNlbDIxLXN0YXRpYyB0c3QtY2FuY2VsMjQtc3RhdGljIHRzdC1jb25kOC1zdGF0aWMgXAorKwkJdHN0LWNhbmNlbDIxLXN0YXRpYyB0c3QtY29uZDgtc3RhdGljIFwKKyAJCXRzdC1tdXRleDgtc3RhdGljIHRzdC1tdXRleHBpOC1zdGF0aWMgdHN0LXNlbTExLXN0YXRpYyBcCisgCQl0c3Qtc2VtMTItc3RhdGljCistdGVzdHMgKz0gdHN0LXN0YWNrZ3VhcmQxLXN0YXRpYyB0c3QtY2FuY2VsMjEtc3RhdGljIHRzdC1jYW5jZWwyNC1zdGF0aWMgXAorKworK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX0NYWF9URVNUUykpCisrdGVzdHMtc3RhdGljICs9IHRzdC1jYW5jZWwyNC1zdGF0aWMKKytlbmRpZgorKworK3Rlc3RzICs9IHRzdC1zdGFja2d1YXJkMS1zdGF0aWMgdHN0LWNhbmNlbDIxLXN0YXRpYyBcCisgCSB0c3QtY29uZDgtc3RhdGljIHRzdC1tdXRleDgtc3RhdGljIHRzdC1tdXRleHBpOC1zdGF0aWMgXAorIAkgdHN0LXNlbTExLXN0YXRpYyB0c3Qtc2VtMTItc3RhdGljCisrCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0NYWF9URVNUUykgKz0gdHN0LWNhbmNlbDI0LXN0YXRpYworKworIHh0ZXN0cy1zdGF0aWMgKz0gdHN0LXNldHVpZDEtc3RhdGljCisgCisgIyBUaGVzZSB0ZXN0cyBhcmUgbGlua2VkIHdpdGggbGliYyBiZWZvcmUgbGlicHRocmVhZAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjL2V0Yy9sZC5zby5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy9ldGMvbGQuc28uY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy9ldGMvbGQuc28uY29uZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy9nZW5lcmF0ZS1zdXBwb3J0ZWQubWsgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjL2dlbmVyYXRlLXN1cHBvcnRlZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmEyOGMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy9nZW5lcmF0ZS1zdXBwb3J0ZWQubWsKQEAgLTAsMCArMSwxMSBAQAorIyEvdXNyL2Jpbi9tYWtlCisKK2luY2x1ZGUgJChJTikKKworYWxsOgorCXJtIC1mICQoT1VUKQorCXRvdWNoICQoT1VUKQorCWZvciBsb2NhbGUgaW4gJChTVVBQT1JURUQtTE9DQUxFUyk7IGRvIFwKKwkJWyAkJGxvY2FsZSA9IHRydWUgXSAmJiBjb250aW51ZTsgXAorCQllY2hvICQkbG9jYWxlIHwgc2VkICdzLC8sICwnID4+ICQoT1VUKTsgXAorCWRvbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmNfMi4yMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmNfMi4yMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGUxZmFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliY18yLjIyLmJiCkBAIC0wLDAgKzEsMTM1IEBACityZXF1aXJlIGdsaWJjLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFUzttZDU9ZTlhNTU4ZTI0M2IzNmQzMjA5ZjM4MGRlYjM5NGIyMTMgXAorICAgICAgZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgIGZpbGU6Ly9wb3NpeC9yeHNwZW5jZXIvQ09QWVJJR0hUO21kNT1kYzU0ODViYjM5NGExM2IyMzMyZWMxYzc4NWY1ZDgzYSBcCisgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIgorCitERVBFTkRTICs9ICJncGVyZi1uYXRpdmUga2NvbmZpZy1mcm9udGVuZHMtbmF0aXZlIgorCitTUkNSRVYgPz0gImEzNGQxYzZhZmM4NjUyMWQ2YWQxNzY2MmEzYjUzNjJkODQ4MTUxNGMiCisKK0JSQU5DSCA/PSAicmVsZWFzZS8ke1BWfS9tYXN0ZXIiCisKK0dMSUJDX0dJVF9VUkkgPz0gImdpdDovL3NvdXJjZXdhcmUub3JnL2dpdC9nbGliYy5naXQiCisKK1NSQ19VUkkgPSAiJHtHTElCQ19HSVRfVVJJfTticmFuY2g9JHtCUkFOQ0h9O25hbWU9Z2xpYmMgXAorICAgICAgICAgICBmaWxlOi8vMDAwNC1CYWNrcG9ydC1odHRwcy1zb3VyY2V3YXJlLm9yZy1tbC1saWJjLXBvcnRzLTIwMDctMTItLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtZnNsLWU1MDAtZTU1MDAtZTY1MDAtNjAzZS1mc3FydC1pbXBsZW1lbnRhdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA2LXJlYWRsaWItQWRkLU9FQ09SRV9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUy10by1rbm93bi0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNy1wcGMtc3FydC1GaXgtdW5kZWZpbmVkLXJlZmVyZW5jZS10by1fX3NxcnRfZmluaXRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDgtX19pZWVlNzU0X3NxcnQtZi1hcmUtbm93LWlubGluZS1mdW5jdGlvbnMtYW5kLWNhbGwtby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA5LVF1b3RlLWZyb20tYnVnLTE0NDMtd2hpY2gtZXhwbGFpbnMtd2hhdC10aGUtcGF0Y2gtZG8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMC1lZ2xpYmMtcnVuLWxpYm0tZXJyLXRhYi5wbC13aXRoLXNwZWNpZmljLWRpcnMtaW4tUy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDExLV9faWVlZTc1NF9zcXJ0LWYtYXJlLW5vdy1pbmxpbmUtZnVuY3Rpb25zLWFuZC1jYWxsLW8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMi1NYWtlLWxkLXZlcnNpb24tb3V0cHV0LW1hdGNoaW5nLWdyb2stZ29sZC1zLW91dHB1dC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEzLXN5c2RlcHMtZ251LWNvbmZpZ3VyZS5hYy1oYW5kbGUtY29ycmVjdGx5LWxpYmNfY3Zfcm8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNC1BZGQtdW51c2VkLWF0dHJpYnV0ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE1LVdoZW4tZGlzYWJsaW5nLVNTRS1hbHNvLW1ha2Utc3VyZS10aGF0LWZwbWF0aC1pcy1ub3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNi15ZXMtd2l0aGluLXRoZS1wYXRoLXNldHMtd3JvbmctY29uZmlnLXZhcmlhYmxlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE3LXRpbWV6b25lLXJlLXdyaXR0ZW4tdHpzZWxlY3QtYXMtcG9zaXgtc2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxOC1lZ2xpYmMtQ3Jvc3MtYnVpbGRpbmctYW5kLXRlc3RpbmctaW5zdHJ1Y3Rpb25zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTktZWdsaWJjLUJyaW5nLUVnbGliYy1vcHRpb24tZ3JvdXAtaW5mcmFzdHJ1Y3R1cmUtdG8tZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIwLWVnbGliYy1IZWxwLWJvb3RzdHJhcC1jcm9zcy10b29sY2hhaW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMS1lZ2xpYmMtY2hlcnJ5LXBpY2tlZC1mcm9tLWh0dHAtd3d3LmVnbGliYy5vcmctYXJjaGl2LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjItZWdsaWJjLUNsZWFyLWNhY2hlLWxpbmVzLW9uLXBwYzh4eC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIzLWVnbGliYy1SZXNvbHZlLV9fZnBzY3JfdmFsdWVzLW9uLVNINC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI0LWVnbGliYy1Gb3J3YXJkLXBvcnQtZWdsaWJjLW9wdGlvbnMtZ3JvdXBzLXN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNS1lZ2xpYmMtSW5zdGFsbC1QSUMtYXJjaGl2ZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNi1lZ2xpYmMtZGxfZGVidWdfbWFzay1pcy1jb250cm9sbGVkLWJ5LV9fT1BUSU9OX0VHTElCLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjctZWdsaWJjLXVzZS1vcHRpb24tZ3JvdXBzLUNvbmRpdGlvbmFsbHktZXhjbHVkZS1jLXRlcy5wYXRjaCBcCisiCisKK1NSQ19VUkkgKz0gIlwKKyAgICAgICAgICAgZmlsZTovL2V0Yy9sZC5zby5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL2dlbmVyYXRlLXN1cHBvcnRlZC5tayBcCisiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICJcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLW5hdGl2ZXNkay1nbGliYy1Mb29rLWZvci1ob3N0LXN5c3RlbS1sZC5zby5jYWNoZS1hcy0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1uYXRpdmVzZGstZ2xpYmMtRml4LWJ1ZmZlci1vdmVycnVuLXdpdGgtYS1yZWxvY2F0ZWQtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtbmF0aXZlc2RrLWdsaWJjLVJhaXNlLXRoZS1zaXplLW9mLWFycmF5cy1jb250YWluaW5nLS5wYXRjaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCitCID0gIiR7V09SS0RJUn0vYnVpbGQtJHtUQVJHRVRfU1lTfSIKKworUEFDS0FHRVNfRFlOQU1JQyA9ICIiCisKKyMgdGhlIC1pc3lzdGVtIGluIGJpdGJha2UuY29uZiBzY3Jld3MgdXAgZ2xpYmMgZG9fc3RhZ2UKK0JVSUxEX0NQUEZMQUdTID0gIi1JJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9IgorVEFSR0VUX0NQUEZMQUdTID0gIi1JJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtpbmNsdWRlZGlyfSIKKworR0xJQkNfQlJPS0VOX0xPQ0FMRVMgPSAiIF9FUiBfRVQgc29fRVQgeW5fRVIgc2lkX0VUIHRyX1RSIG1uX01OIGdlel9FVCBnZXpfRVIgYm5fQkQgdGVfSU4gZXNfQ1IuSVNPLTg4NTktMSIKKworIworIyBXZSB3aWxsIHNraXAgcGFyc2luZyBnbGliYyB3aGVuIHRhcmdldCBzeXN0ZW0gQyBsaWJyYXJ5IHNlbGVjdGlvbiBpcyBub3QgZ2xpYmMKKyMgdGhpcyBoZWxwcyBpbiBlYXNpbmcgb3V0IHBhcnNpbmcgZm9yIG5vbi1nbGliYyBzeXN0ZW0gbGlicmFyaWVzCisjCitDT01QQVRJQkxFX0hPU1RfbGliYy1tdXNsX2NsYXNzLXRhcmdldCA9ICJudWxsIgorQ09NUEFUSUJMRV9IT1NUX2xpYmMtdWNsaWJjX2NsYXNzLXRhcmdldCA9ICJudWxsIgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUta2VybmVsPSR7T0xERVNUX0tFUk5FTH0gXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1jdnMgLS1kaXNhYmxlLXByb2ZpbGUgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1kZWJ1ZyAtLXdpdGhvdXQtZ2QgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWNsb2NhbGU9Z251IFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1hZGQtb25zIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtaGVhZGVycz0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LXNlbGludXggXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLW9ic29sZXRlLXJwYyBcCisgICAgICAgICAgICAgICAgLS13aXRoLWtjb25maWc9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9IFwKKyAgICAgICAgICAgICAgICAke0dMSUJDX0VYVFJBX09FQ09ORn0iCisKK0VYVFJBX09FQ09ORiArPSAiJHtAZ2V0X2xpYmNfZnB1X3NldHRpbmcoYmIsIGQpfSIKK0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWluZXQtYW5sJywgJy0tZW5hYmxlLW5zY2QnLCAnLS1kaXNhYmxlLW5zY2QnLCBkKX0iCisKKworZG9fcGF0Y2hfYXBwZW5kKCkgeworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9fZml4X3JlYWRsaWJfYycsIGQpCit9CisKK2RvX2ZpeF9yZWFkbGliX2MgKCkgeworCXNlZCAtaSAtZSAncyNPRUNPUkVfS05PV05fSU5URVJQUkVURVJfTkFNRVMjJHtFR0xJQkNfS05PV05fSU5URVJQUkVURVJfTkFNRVN9IycgJHtTfS9lbGYvcmVhZGxpYi5jCit9CisKK2RvX2NvbmZpZ3VyZSAoKSB7CisjIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gdG8gYXZvaWQgdGhlIGF1dG9jb25mL2F1dG9tYWtlL2FjbG9jYWwvYXV0b2hlYWRlcgorIyBjYWxscyBmb3Igbm93CisjIGRvbid0IHBhc3MgQ1BQRkxBR1MgaW50byBjb25maWd1cmUsIHNpbmNlIGl0IHVwc2V0cyB0aGUga2VybmVsLWhlYWRlcnMKKyMgdmVyc2lvbiBjaGVjayBhbmQgZG9lc24ndCByZWFsbHkgaGVscCB3aXRoIGFueXRoaW5nCisgICAgICAgIChjZCAke1N9ICYmIGdudS1jb25maWdpemUpIHx8IGRpZSAiZmFpbHVyZSBpbiBydW5uaW5nIGdudS1jb25maWdpemUiCisgICAgICAgIGZpbmQgJHtTfSAtbmFtZSAiY29uZmlndXJlIiB8IHhhcmdzIHRvdWNoCisgICAgICAgIENQUEZMQUdTPSIiIG9lX3J1bmNvbmYKK30KKworcnBjc3ZjID0gImJvb3RwYXJhbV9wcm90LnggbmxtX3Byb3QueCByc3RhdC54IFwKKwkgIHlwcGFzc3dkLngga2xtX3Byb3QueCByZXgueCBzbV9pbnRlci54IG1vdW50LnggXAorCSAgcnVzZXJzLnggc3ByYXkueCBuZnNfcHJvdC54IHJxdW90YS54IGtleV9wcm90LngiCisKK2RvX2NvbXBpbGUgKCkgeworCSMgLVdsLC1ycGF0aC1saW5rIDxzdGFnaW5nPi9saWIgaW4gTERGTEFHUyBjYW4gY2F1c2UgYnJlYWthZ2UgaWYgYW5vdGhlciBnbGliYyBpcyBpbiBzdGFnaW5nCisJdW5zZXQgTERGTEFHUworCWJhc2VfZG9fY29tcGlsZQorCSgKKwkJY2QgJHtTfS9zdW5ycGMvcnBjc3ZjCisJCWZvciByIGluICR7cnBjc3ZjfTsgZG8KKwkJCWg9YGVjaG8gJHJ8c2VkIC1lJ3MsXC54JCwuaCwnYAorCQkJcm0gLWYgJGgKKwkJCSR7Qn0vc3VucnBjL2Nyb3NzLXJwY2dlbiAtaCAkciAtbyAkaCB8fCBiYndhcm4gIiR7UE59OiB1bmFibGUgdG8gZ2VuZXJhdGUgaGVhZGVyIGZvciAkciIKKwkJZG9uZQorCSkKKwllY2hvICJBZGp1c3QgbGRkIHNjcmlwdCIKKwlpZiBbIC1uICIke1JUTERMSVNUfSIgXQorCXRoZW4KKwkJcHJldnJ0bGQ9YGNhdCAke0J9L2VsZi9sZGQgfCBncmVwICJeUlRMRExJU1Q9IiB8IHNlZCAncyNeUlRMRExJU1Q9Ilw/XChbXiJdKlwpIlw/JCNcMSMnYAorCQlpZiBbICIke3ByZXZydGxkfSIgIT0gIiR7UlRMRExJU1R9IiBdCisJCXRoZW4KKwkJCXNlZCAtaSAke0J9L2VsZi9sZGQgLWUgInMjXlJUTERMSVNUPS4qXCQjUlRMRExJU1Q9XCIke3ByZXZydGxkfSAke1JUTERMSVNUfVwiIyIKKwkJZmkKKwlmaQorCit9CisKK3JlcXVpcmUgZ2xpYmMtcGFja2FnZS5pbmMKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvMzJhbmQ2NGJpdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS8zMmFuZDY0Yml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZmVhZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvMzJhbmQ2NGJpdC5wYXRjaApAQCAtMCwwICsxLDMzMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworV2UgcnVuIHRoZSBsZGNvbmZpZyBpbiB0aGUgY3Jvc3MgZmFzaGlvbi4gbWFrZSB0aGUgY29kZSBiaXRzaXplIGF3YXJlIHNvIHRoYXQgCit3ZSBjYW4gY3Jvc3MgYnVpbGQgbGRjb25maWcgY2FjaGUgZm9yIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcy4KKworUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IDIwMDkvMDUvMTkKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMDkvMDMvMjkKKworSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvcmVhZGVsZmxpYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL3JlYWRlbGZsaWIuYworKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvcmVhZGVsZmxpYi5jCitAQCAtNDAsMzkgKzQwLDIxMiBAQCBkbwkJCQkJCQkJXAorIAorIC8qIFJldHVybnMgMCBpZiBldmVyeXRoaW5nIGlzIG9rLCAhPSAwIGluIGNhc2Ugb2YgZXJyb3IuICAqLworIGludAorLXByb2Nlc3NfZWxmX2ZpbGUgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgY29uc3QgY2hhciAqbGliLCBpbnQgKmZsYWcsCisrcHJvY2Vzc19lbGZfZmlsZTMyIChjb25zdCBjaGFyICpmaWxlX25hbWUsIGNvbnN0IGNoYXIgKmxpYiwgaW50ICpmbGFnLAorIAkJICB1bnNpZ25lZCBpbnQgKm9zdmVyc2lvbiwgY2hhciAqKnNvbmFtZSwgdm9pZCAqZmlsZV9jb250ZW50cywKKyAJCSAgc2l6ZV90IGZpbGVfbGVuZ3RoKQorIHsKKyAgIGludCBpOworICAgdW5zaWduZWQgaW50IGo7CistICBFbGZXKEFkZHIpIGxvYWRhZGRyOworKyAgRWxmMzJfQWRkciBsb2FkYWRkcjsKKyAgIHVuc2lnbmVkIGludCBkeW5hbWljX2FkZHI7CisgICBzaXplX3QgZHluYW1pY19zaXplOworICAgY2hhciAqcHJvZ3JhbV9pbnRlcnByZXRlcjsKKyAKKy0gIEVsZlcoRWhkcikgKmVsZl9oZWFkZXI7CistICBFbGZXKFBoZHIpICplbGZfcGhlYWRlciwgKnNlZ21lbnQ7CistICBFbGZXKER5bikgKmR5bmFtaWNfc2VnbWVudCwgKmR5bl9lbnRyeTsKKysgIEVsZjMyX0VoZHIgKmVsZl9oZWFkZXI7CisrICBFbGYzMl9QaGRyICplbGZfcGhlYWRlciwgKnNlZ21lbnQ7CisrICBFbGYzMl9EeW4gKmR5bmFtaWNfc2VnbWVudCwgKmR5bl9lbnRyeTsKKyAgIGNoYXIgKmR5bmFtaWNfc3RyaW5nczsKKyAKKy0gIGVsZl9oZWFkZXIgPSAoRWxmVyhFaGRyKSAqKSBmaWxlX2NvbnRlbnRzOworKyAgZWxmX2hlYWRlciA9IChFbGYzMl9FaGRyICopIGZpbGVfY29udGVudHM7CisgICAqb3N2ZXJzaW9uID0gMDsKKyAKKy0gIGlmIChlbGZfaGVhZGVyLT5lX2lkZW50IFtFSV9DTEFTU10gIT0gRWxmVyAoQ0xBU1MpKQorKyAgaWYgKGVsZl9oZWFkZXItPmVfdHlwZSAhPSBFVF9EWU4pCisgICAgIHsKKy0gICAgICBpZiAob3B0X3ZlcmJvc2UpCisrICAgICAgZXJyb3IgKDAsIDAsIF8oIiVzIGlzIG5vdCBhIHNoYXJlZCBvYmplY3QgZmlsZSAoVHlwZTogJWQpLlxuIiksIGZpbGVfbmFtZSwKKysJICAgICBlbGZfaGVhZGVyLT5lX3R5cGUpOworKyAgICAgIHJldHVybiAxOworKyAgICB9CisrCisrICAvKiBHZXQgaW5mb3JtYXRpb24gZnJvbSBlbGYgcHJvZ3JhbSBoZWFkZXIuICAqLworKyAgZWxmX3BoZWFkZXIgPSAoRWxmMzJfUGhkciAqKSAoZWxmX2hlYWRlci0+ZV9waG9mZiArIGZpbGVfY29udGVudHMpOworKyAgY2hlY2tfcHRyIChlbGZfcGhlYWRlcik7CisrCisrICAvKiBUaGUgbGlicmFyeSBpcyBhbiBlbGYgbGlicmFyeSwgbm93IHNlYXJjaCBmb3Igc29uYW1lIGFuZAorKyAgICAgbGliYzUvbGliYzYuICAqLworKyAgKmZsYWcgPSBGTEFHX0VMRjsKKysKKysgIGxvYWRhZGRyID0gLTE7CisrICBkeW5hbWljX2FkZHIgPSAwOworKyAgZHluYW1pY19zaXplID0gMDsKKysgIHByb2dyYW1faW50ZXJwcmV0ZXIgPSBOVUxMOworKyAgZm9yIChpID0gMCwgc2VnbWVudCA9IGVsZl9waGVhZGVyOworKyAgICAgICBpIDwgZWxmX2hlYWRlci0+ZV9waG51bTsgaSsrLCBzZWdtZW50KyspCisrICAgIHsKKysgICAgICBjaGVja19wdHIgKHNlZ21lbnQpOworKworKyAgICAgIHN3aXRjaCAoc2VnbWVudC0+cF90eXBlKQorIAl7CistCSAgaWYgKGVsZl9oZWFkZXItPmVfaWRlbnQgW0VJX0NMQVNTXSA9PSBFTEZDTEFTUzMyKQorLQkgICAgZXJyb3IgKDAsIDAsIF8oIiVzIGlzIGEgMzIgYml0IEVMRiBmaWxlLlxuIiksIGZpbGVfbmFtZSk7CistCSAgZWxzZSBpZiAoZWxmX2hlYWRlci0+ZV9pZGVudCBbRUlfQ0xBU1NdID09IEVMRkNMQVNTNjQpCistCSAgICBlcnJvciAoMCwgMCwgXygiJXMgaXMgYSA2NCBiaXQgRUxGIGZpbGUuXG4iKSwgZmlsZV9uYW1lKTsKKy0JICBlbHNlCistCSAgICBlcnJvciAoMCwgMCwgXygiVW5rbm93biBFTEZDTEFTUyBpbiBmaWxlICVzLlxuIiksIGZpbGVfbmFtZSk7CisrCWNhc2UgUFRfTE9BRDoKKysJICBpZiAobG9hZGFkZHIgPT0gKEVsZjMyX0FkZHIpIC0xKQorKwkgICAgbG9hZGFkZHIgPSBzZWdtZW50LT5wX3ZhZGRyIC0gc2VnbWVudC0+cF9vZmZzZXQ7CisrCSAgYnJlYWs7CisrCisrCWNhc2UgUFRfRFlOQU1JQzoKKysJICBpZiAoZHluYW1pY19hZGRyKQorKwkgICAgZXJyb3IgKDAsIDAsIF8oIm1vcmUgdGhhbiBvbmUgZHluYW1pYyBzZWdtZW50XG4iKSk7CisrCisrCSAgZHluYW1pY19hZGRyID0gc2VnbWVudC0+cF9vZmZzZXQ7CisrCSAgZHluYW1pY19zaXplID0gc2VnbWVudC0+cF9maWxlc3o7CisrCSAgYnJlYWs7CisrCisrCWNhc2UgUFRfSU5URVJQOgorKwkgIHByb2dyYW1faW50ZXJwcmV0ZXIgPSAoY2hhciAqKSAoZmlsZV9jb250ZW50cyArIHNlZ21lbnQtPnBfb2Zmc2V0KTsKKysJICBjaGVja19wdHIgKHByb2dyYW1faW50ZXJwcmV0ZXIpOworKworKwkgIC8qIENoZWNrIGlmIHRoaXMgaXMgZW5vdWdoIHRvIGNsYXNzaWZ5IHRoZSBiaW5hcnkuICAqLworKwkgIGZvciAoaiA9IDA7IGogPCBzaXplb2YgKGludGVycHJldGVycykgLyBzaXplb2YgKGludGVycHJldGVycyBbMF0pOworKwkgICAgICAgKytqKQorKwkgICAgaWYgKHN0cmNtcCAocHJvZ3JhbV9pbnRlcnByZXRlciwgaW50ZXJwcmV0ZXJzW2pdLnNvbmFtZSkgPT0gMCkKKysJICAgICAgeworKwkJKmZsYWcgPSBpbnRlcnByZXRlcnNbal0uZmxhZzsKKysJCWJyZWFrOworKwkgICAgICB9CisrCSAgYnJlYWs7CisrCisrCWNhc2UgUFRfTk9URToKKysJICBpZiAoISpvc3ZlcnNpb24gJiYgc2VnbWVudC0+cF9maWxlc3ogPj0gMzIgJiYgc2VnbWVudC0+cF9hbGlnbiA+PSA0KQorKwkgICAgeworKwkgICAgICBFbGYzMl9Xb3JkICphYmlfbm90ZSA9IChFbGYzMl9Xb3JkICopIChmaWxlX2NvbnRlbnRzCisrCQkJCQkJICAgICArIHNlZ21lbnQtPnBfb2Zmc2V0KTsKKysJICAgICAgRWxmMzJfQWRkciBzaXplID0gc2VnbWVudC0+cF9maWxlc3o7CisrCisrCSAgICAgIHdoaWxlIChhYmlfbm90ZSBbMF0gIT0gNCB8fCBhYmlfbm90ZSBbMV0gIT0gMTYKKysJCSAgICAgfHwgYWJpX25vdGUgWzJdICE9IDEKKysJCSAgICAgfHwgbWVtY21wIChhYmlfbm90ZSArIDMsICJHTlUiLCA0KSAhPSAwKQorKwkJeworKyNkZWZpbmUgUk9VTkQobGVuKSAoKChsZW4pICsgc2l6ZW9mIChFbGYzMl9Xb3JkKSkgLSAxKSAmIC1zaXplb2YgKEVsZjMyX1dvcmQpKSkKKysJCSAgRWxmMzJfQWRkcikgbm90ZV9zaXplID0gMyAqIHNpemVvZiAoRWxmMzJfV29yZCkpCisrCQkJCQkgKyBST1VORCAoYWJpX25vdGVbMF0pCisrCQkJCQkgKyBST1VORCAoYWJpX25vdGVbMV0pOworKworKwkJICBpZiAoc2l6ZSAtIDMyIDwgbm90ZV9zaXplIHx8IG5vdGVfc2l6ZSA9PSAwKQorKwkJICAgIHsKKysJCSAgICAgIHNpemUgPSAwOworKwkJICAgICAgYnJlYWs7CisrCQkgICAgfQorKwkJICBzaXplIC09IG5vdGVfc2l6ZTsKKysJCSAgYWJpX25vdGUgPSAodm9pZCAqKSBhYmlfbm90ZSArIG5vdGVfc2l6ZTsKKysJCX0KKysKKysJICAgICAgaWYgKHNpemUgPT0gMCkKKysJCWJyZWFrOworKworKwkgICAgICAqb3N2ZXJzaW9uID0gKGFiaV9ub3RlIFs0XSA8PCAyNCkgfAorKwkJCSAgICgoYWJpX25vdGUgWzVdICYgMHhmZikgPDwgMTYpIHwKKysJCQkgICAoKGFiaV9ub3RlIFs2XSAmIDB4ZmYpIDw8IDgpIHwKKysJCQkgICAoYWJpX25vdGUgWzddICYgMHhmZik7CisrCSAgICB9CisrCSAgYnJlYWs7CisrCisrCWRlZmF1bHQ6CisrCSAgYnJlYWs7CisrCX0KKysKKysgICAgfQorKyAgaWYgKGxvYWRhZGRyID09IChFbGYzMl9BZGRyKSAtMSkKKysgICAgeworKyAgICAgIC8qIFZlcnkgc3RyYW5nZS4gKi8KKysgICAgICBsb2FkYWRkciA9IDA7CisrICAgIH0KKysKKysgIC8qIE5vdyB3ZSBjYW4gcmVhZCB0aGUgZHluYW1pYyBzZWN0aW9ucy4gICovCisrICBpZiAoZHluYW1pY19zaXplID09IDApCisrICAgIHJldHVybiAxOworKworKyAgZHluYW1pY19zZWdtZW50ID0gKEVsZjMyX0R5biAqKSAoZmlsZV9jb250ZW50cyArIGR5bmFtaWNfYWRkcik7CisrICBjaGVja19wdHIgKGR5bmFtaWNfc2VnbWVudCk7CisrCisrICAvKiBGaW5kIHRoZSBzdHJpbmcgdGFibGUuICAqLworKyAgZHluYW1pY19zdHJpbmdzID0gTlVMTDsKKysgIGZvciAoZHluX2VudHJ5ID0gZHluYW1pY19zZWdtZW50OyBkeW5fZW50cnktPmRfdGFnICE9IERUX05VTEw7CisrICAgICAgICsrZHluX2VudHJ5KQorKyAgICB7CisrICAgICAgY2hlY2tfcHRyIChkeW5fZW50cnkpOworKyAgICAgIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX1NUUlRBQikKKysJeworKwkgIGR5bmFtaWNfc3RyaW5ncyA9IChjaGFyICopIChmaWxlX2NvbnRlbnRzICsgZHluX2VudHJ5LT5kX3VuLmRfdmFsIC0gbG9hZGFkZHIpOworKwkgIGNoZWNrX3B0ciAoZHluYW1pY19zdHJpbmdzKTsKKysJICBicmVhazsKKyAJfQorLSAgICAgIHJldHVybiAxOworICAgICB9CisgCisrICBpZiAoZHluYW1pY19zdHJpbmdzID09IE5VTEwpCisrICAgIHJldHVybiAxOworKworKyAgLyogTm93IHJlYWQgdGhlIERUX05FRURFRCBhbmQgRFRfU09OQU1FIGVudHJpZXMuICAqLworKyAgZm9yIChkeW5fZW50cnkgPSBkeW5hbWljX3NlZ21lbnQ7IGR5bl9lbnRyeS0+ZF90YWcgIT0gRFRfTlVMTDsKKysgICAgICAgKytkeW5fZW50cnkpCisrICAgIHsKKysgICAgICBpZiAoZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9ORUVERUQgfHwgZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9TT05BTUUpCisrCXsKKysJICBjaGFyICpuYW1lID0gZHluYW1pY19zdHJpbmdzICsgZHluX2VudHJ5LT5kX3VuLmRfdmFsOworKwkgIGNoZWNrX3B0ciAobmFtZSk7CisrCisrCSAgaWYgKGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfTkVFREVEKQorKwkgICAgeworKworKwkgICAgICBpZiAoKmZsYWcgPT0gRkxBR19FTEYpCisrCQl7CisrCQkgIC8qIENoZWNrIGlmIHRoaXMgaXMgZW5vdWdoIHRvIGNsYXNzaWZ5IHRoZSBiaW5hcnkuICAqLworKwkJICBmb3IgKGogPSAwOworKwkJICAgICAgIGogPCBzaXplb2YgKGtub3duX2xpYnMpIC8gc2l6ZW9mIChrbm93bl9saWJzIFswXSk7CisrCQkgICAgICAgKytqKQorKwkJICAgIGlmIChzdHJjbXAgKG5hbWUsIGtub3duX2xpYnMgW2pdLnNvbmFtZSkgPT0gMCkKKysJCSAgICAgIHsKKysJCQkqZmxhZyA9IGtub3duX2xpYnMgW2pdLmZsYWc7CisrCQkJYnJlYWs7CisrCQkgICAgICB9CisrCQl9CisrCSAgICB9CisrCisrCSAgZWxzZSBpZiAoZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9TT05BTUUpCisrCSAgICAqc29uYW1lID0geHN0cmR1cCAobmFtZSk7CisrCisrCSAgLyogRG8gd2UgaGF2ZSBldmVyeXRoaW5nIHdlIG5lZWQ/ICAqLworKwkgIGlmICgqc29uYW1lICYmICpmbGFnICE9IEZMQUdfRUxGKQorKwkgICAgcmV0dXJuIDA7CisrCX0KKysgICAgfQorKworKyAgLyogV2UgcmVhY2ggdGhpcyBwb2ludCBvbmx5IGlmIHRoZSBmaWxlIGRvZXNuJ3QgY29udGFpbiBhIERUX1NPTkFNRQorKyAgICAgb3IgaWYgd2UgY2FuJ3QgY2xhc3NpZnkgdGhlIGxpYnJhcnkuICBJZiBpdCBkb2Vzbid0IGhhdmUgYQorKyAgICAgc29uYW1lLCByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkuICAqLworKyAgaWYgKCpzb25hbWUgPT0gTlVMTCkKKysgICAgKnNvbmFtZSA9IHhzdHJkdXAgKGxpYik7CisrCisrICByZXR1cm4gMDsKKyt9CisrCisraW50CisrcHJvY2Vzc19lbGZfZmlsZTY0IChjb25zdCBjaGFyICpmaWxlX25hbWUsIGNvbnN0IGNoYXIgKmxpYiwgaW50ICpmbGFnLAorKwkJICB1bnNpZ25lZCBpbnQgKm9zdmVyc2lvbiwgY2hhciAqKnNvbmFtZSwgdm9pZCAqZmlsZV9jb250ZW50cywKKysJCSAgc2l6ZV90IGZpbGVfbGVuZ3RoKQorK3sKKysgIGludCBpOworKyAgdW5zaWduZWQgaW50IGo7CisrICBFbGY2NF9BZGRyIGxvYWRhZGRyOworKyAgdW5zaWduZWQgaW50IGR5bmFtaWNfYWRkcjsKKysgIHNpemVfdCBkeW5hbWljX3NpemU7CisrICBjaGFyICpwcm9ncmFtX2ludGVycHJldGVyOworKworKyAgRWxmNjRfRWhkciAqZWxmX2hlYWRlcjsKKysgIEVsZjY0X1BoZHIgKmVsZl9waGVhZGVyLCAqc2VnbWVudDsKKysgIEVsZjY0X0R5biAqZHluYW1pY19zZWdtZW50LCAqZHluX2VudHJ5OworKyAgY2hhciAqZHluYW1pY19zdHJpbmdzOworKworKyAgZWxmX2hlYWRlciA9IChFbGY2NF9FaGRyICopIGZpbGVfY29udGVudHM7CisrICAqb3N2ZXJzaW9uID0gMDsKKysKKyAgIGlmIChlbGZfaGVhZGVyLT5lX3R5cGUgIT0gRVRfRFlOKQorICAgICB7CisgICAgICAgZXJyb3IgKDAsIDAsIF8oIiVzIGlzIG5vdCBhIHNoYXJlZCBvYmplY3QgZmlsZSAoVHlwZTogJWQpLlxuIiksIGZpbGVfbmFtZSwKK0BAIC04MSw3ICsyNTQsNyBAQCBwcm9jZXNzX2VsZl9maWxlIChjb25zdCBjaGFyICpmaWxlX25hbWUsCisgICAgIH0KKyAKKyAgIC8qIEdldCBpbmZvcm1hdGlvbiBmcm9tIGVsZiBwcm9ncmFtIGhlYWRlci4gICovCistICBlbGZfcGhlYWRlciA9IChFbGZXKFBoZHIpICopIChlbGZfaGVhZGVyLT5lX3Bob2ZmICsgZmlsZV9jb250ZW50cyk7CisrICBlbGZfcGhlYWRlciA9IChFbGY2NF9QaGRyICopIChlbGZfaGVhZGVyLT5lX3Bob2ZmICsgZmlsZV9jb250ZW50cyk7CisgICBjaGVja19wdHIgKGVsZl9waGVhZGVyKTsKKyAKKyAgIC8qIFRoZSBsaWJyYXJ5IGlzIGFuIGVsZiBsaWJyYXJ5LCBub3cgc2VhcmNoIGZvciBzb25hbWUgYW5kCitAQCAtMTAwLDcgKzI3Myw3IEBAIHByb2Nlc3NfZWxmX2ZpbGUgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwKKyAgICAgICBzd2l0Y2ggKHNlZ21lbnQtPnBfdHlwZSkKKyAJeworIAljYXNlIFBUX0xPQUQ6CistCSAgaWYgKGxvYWRhZGRyID09IChFbGZXKEFkZHIpKSAtMSkKKysJICBpZiAobG9hZGFkZHIgPT0gKEVsZjY0X0FkZHIpIC0xKQorIAkgICAgbG9hZGFkZHIgPSBzZWdtZW50LT5wX3ZhZGRyIC0gc2VnbWVudC0+cF9vZmZzZXQ7CisgCSAgYnJlYWs7CisgCitAQCAtMTI5LDE2ICszMDIsMTYgQEAgcHJvY2Vzc19lbGZfZmlsZSAoY29uc3QgY2hhciAqZmlsZV9uYW1lLAorIAljYXNlIFBUX05PVEU6CisgCSAgaWYgKCEqb3N2ZXJzaW9uICYmIHNlZ21lbnQtPnBfZmlsZXN6ID49IDMyICYmIHNlZ21lbnQtPnBfYWxpZ24gPj0gNCkKKyAJICAgIHsKKy0JICAgICAgRWxmVyhXb3JkKSAqYWJpX25vdGUgPSAoRWxmVyhXb3JkKSAqKSAoZmlsZV9jb250ZW50cworKwkgICAgICBFbGY2NF9Xb3JkICphYmlfbm90ZSA9IChFbGY2NF9Xb3JkICopIChmaWxlX2NvbnRlbnRzCisgCQkJCQkJICAgICArIHNlZ21lbnQtPnBfb2Zmc2V0KTsKKy0JICAgICAgRWxmVyhBZGRyKSBzaXplID0gc2VnbWVudC0+cF9maWxlc3o7CisrCSAgICAgIEVsZjY0X0FkZHIgc2l6ZSA9IHNlZ21lbnQtPnBfZmlsZXN6OworIAorIAkgICAgICB3aGlsZSAoYWJpX25vdGUgWzBdICE9IDQgfHwgYWJpX25vdGUgWzFdICE9IDE2CisgCQkgICAgIHx8IGFiaV9ub3RlIFsyXSAhPSAxCisgCQkgICAgIHx8IG1lbWNtcCAoYWJpX25vdGUgKyAzLCAiR05VIiwgNCkgIT0gMCkKKyAJCXsKKy0jZGVmaW5lIFJPVU5EKGxlbikgKCgobGVuKSArIHNpemVvZiAoRWxmVyhXb3JkKSkgLSAxKSAmIC1zaXplb2YgKEVsZlcoV29yZCkpKQorLQkJICBFbGZXKEFkZHIpIG5vdGVfc2l6ZSA9IDMgKiBzaXplb2YgKEVsZlcoV29yZCkpCisrI2RlZmluZSBST1VORChsZW4pICgoKGxlbikgKyBzaXplb2YgKEVsZjY0X1dvcmQpIC0gMSkgJiAtc2l6ZW9mIChFbGY2NF9Xb3JkKSkKKysJCSAgRWxmNjRfQWRkciBub3RlX3NpemUgPSAzICogc2l6ZW9mIChFbGY2NF9Xb3JkKQorIAkJCQkJICsgUk9VTkQgKGFiaV9ub3RlWzBdKQorIAkJCQkJICsgUk9VTkQgKGFiaV9ub3RlWzFdKTsKKyAKK0BAIC0xNjYsNyArMzM5LDcgQEAgcHJvY2Vzc19lbGZfZmlsZSAoY29uc3QgY2hhciAqZmlsZV9uYW1lLAorIAl9CisgCisgICAgIH0KKy0gIGlmIChsb2FkYWRkciA9PSAoRWxmVyhBZGRyKSkgLTEpCisrICBpZiAobG9hZGFkZHIgPT0gKEVsZjY0X0FkZHIpIC0xKQorICAgICB7CisgICAgICAgLyogVmVyeSBzdHJhbmdlLiAqLworICAgICAgIGxvYWRhZGRyID0gMDsKK0BAIC0xNzYsNyArMzQ5LDcgQEAgcHJvY2Vzc19lbGZfZmlsZSAoY29uc3QgY2hhciAqZmlsZV9uYW1lLAorICAgaWYgKGR5bmFtaWNfc2l6ZSA9PSAwKQorICAgICByZXR1cm4gMTsKKyAKKy0gIGR5bmFtaWNfc2VnbWVudCA9IChFbGZXKER5bikgKikgKGZpbGVfY29udGVudHMgKyBkeW5hbWljX2FkZHIpOworKyAgZHluYW1pY19zZWdtZW50ID0gKEVsZjY0X0R5biAqKSAoZmlsZV9jb250ZW50cyArIGR5bmFtaWNfYWRkcik7CisgICBjaGVja19wdHIgKGR5bmFtaWNfc2VnbWVudCk7CisgCisgICAvKiBGaW5kIHRoZSBzdHJpbmcgdGFibGUuICAqLworQEAgLTIzMywzICs0MDYsMzMgQEAgcHJvY2Vzc19lbGZfZmlsZSAoY29uc3QgY2hhciAqZmlsZV9uYW1lLAorIAorICAgcmV0dXJuIDA7CisgfQorKy8qIFJldHVybnMgMCBpZiBldmVyeXRoaW5nIGlzIG9rLCAhPSAwIGluIGNhc2Ugb2YgZXJyb3IuICAqLworK2ludAorK3Byb2Nlc3NfZWxmX2ZpbGUgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgY29uc3QgY2hhciAqbGliLCBpbnQgKmZsYWcsCisrCQkgIHVuc2lnbmVkIGludCAqb3N2ZXJzaW9uLCBjaGFyICoqc29uYW1lLCB2b2lkICpmaWxlX2NvbnRlbnRzLAorKwkJICBzaXplX3QgZmlsZV9sZW5ndGgpCisreworKyAgaW50IGk7CisrICB1bnNpZ25lZCBpbnQgajsKKysgIEVsZlcoQWRkcikgbG9hZGFkZHI7CisrICB1bnNpZ25lZCBpbnQgZHluYW1pY19hZGRyOworKyAgc2l6ZV90IGR5bmFtaWNfc2l6ZTsKKysgIGNoYXIgKnByb2dyYW1faW50ZXJwcmV0ZXI7CisrCisrICBFbGZXKEVoZHIpICplbGZfaGVhZGVyOworKyAgRWxmVyhQaGRyKSAqZWxmX3BoZWFkZXIsICpzZWdtZW50OworKyAgRWxmVyhEeW4pICpkeW5hbWljX3NlZ21lbnQsICpkeW5fZW50cnk7CisrICBjaGFyICpkeW5hbWljX3N0cmluZ3M7CisrCisrICBlbGZfaGVhZGVyID0gKEVsZlcoRWhkcikgKikgZmlsZV9jb250ZW50czsKKysgICpvc3ZlcnNpb24gPSAwOworKworKyAgaWYgKGVsZl9oZWFkZXItPmVfaWRlbnQgW0VJX0NMQVNTXSA9PSBFTEZDTEFTUzMyKQorKyAgICByZXR1cm4gcHJvY2Vzc19lbGZfZmlsZTMyKGZpbGVfbmFtZSwgbGliLGZsYWcsIG9zdmVyc2lvbiwgc29uYW1lLCBmaWxlX2NvbnRlbnRzLCBmaWxlX2xlbmd0aCk7CisrICBlbHNlIGlmIChlbGZfaGVhZGVyLT5lX2lkZW50IFtFSV9DTEFTU10gPT0gRUxGQ0xBU1M2NCkKKysgICAgcmV0dXJuIHByb2Nlc3NfZWxmX2ZpbGU2NChmaWxlX25hbWUsIGxpYixmbGFnLCBvc3ZlcnNpb24sIHNvbmFtZSwgZmlsZV9jb250ZW50cywgZmlsZV9sZW5ndGgpOworKyAgZXJyb3IgKDAsIDAsIF8oIlVua25vd24gRUxGQ0xBU1MgaW4gZmlsZSAlcy5cbiIpLCBmaWxlX25hbWUpOworKyAgcmV0dXJuIDE7CisrfQorKworKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL1JFQURNRSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNmYjk4MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9SRUFETUUKQEAgLTAsMCArMSw4IEBACitUaGUgZmlsZXMgYXJlIHB1bGxlZCB2ZXJiYXRpbSBmcm9tIGdsaWJjIDIuNSBhbmQgdGhlbiBwYXRjaGVkIHRvIGFsbG93CitzdGFuZGFsb25lIGNvbXBpbGF0aW9uIG9mIGxkY29uZmlnLgorCitSaWNoYXJkIFB1cmRpZQorT3BlbmVkSGFuZCBMdGQuCisKK1VwZ3JhZGVkIHRoZSBsZGNvbmZpZyByZWNpcGUgdG8gZWdsaWJjIDIuMTIuMQorTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8wMy8yOQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2FkZC02NC1iaXQtZmxhZy1mb3ItRUxGNjQtZW50cmllcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9hZGQtNjQtYml0LWZsYWctZm9yLUVMRjY0LWVudHJpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlhZjExMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9hZGQtNjQtYml0LWZsYWctZm9yLUVMRjY0LWVudHJpZXMucGF0Y2gKQEAgLTAsMCArMSwxMDMgQEAKK0Zyb20gOWQ2MjU0NDA5MGIwODg0OTIxOGNkMWZjNTJhMzZjZGQ1ZDkwMzYzZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFl1YW5qaWUgSHVhbmcgPHl1YW5qaWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMjQgQXByIDIwMTUgMDM6Mjk6MzEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIDY0LWJpdCBmbGFnIGZvciBFTEY2NCBlbnRyaWVzLgorCitsZGNvbmZpZy1uYXRpdmUgd2FzIGdyZXBwZWQgZnJvbSBhbiBvbGQgdmVyc2lvbiBvZiBnbGliYywgYW5kIGl0cyBvdXRwdXQKK2xhY2tzIG5lY2Nlc3NhcnkgNjRiaXQgZmxhZyBpbiBlbnRyaWVzLgorRHVlIHRvIHRoaXMgZGVmZWN0LCBjdHlwZXMudXRpbC5maW5kX2xpYnJhcnkoKSBweXRob24gZnVuY3Rpb24gZmFpbHMgdG8KK2RldGVjdCBhbnkgbGlicmFyeSBkdWUgdG8gdGhlIG9sZCBmaWxlIGZvcm1hdCB0aGF0IGxkY29uZmlnLW5hdGl2ZQorY3JlYXRlcy4gVGhpcyBmaXggc2V0cyBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IDY0Yml0IGZsYWdzIGZvciA2NC1iaXQgRUxGLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBZdWFuamllIEh1YW5nIDx5dWFuamllLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjYWNoZS5jICAgICAgfCAgNCArKysrCisgbGRjb25maWcuaCAgIHwgIDQgKysrKworIHJlYWRlbGZsaWIuYyB8IDM0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDQyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NhY2hlLmMgYi9jYWNoZS5jCitpbmRleCBhOTA0ZDQ0Li5jNGY1NDExIDEwMDY0NAorLS0tIGEvY2FjaGUuYworKysrIGIvY2FjaGUuYworQEAgLTEyMSw2ICsxMjEsMTAgQEAgcHJpbnRfZW50cnkgKGNvbnN0IGNoYXIgKmxpYiwgaW50IGZsYWcsIHVuc2lnbmVkIGludCBvc3ZlcnNpb24sCisgICAgICAgYnJlYWs7CisgICAgIGNhc2UgRkxBR19NSVBTNjRfTElCTjY0OgorICAgICAgIGZwdXRzICgiLDY0Yml0Iiwgc3Rkb3V0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBGTEFHX0FBUkNINjRfTElCNjQ6CisrICAgICAgZnB1dHMgKCIsQUFyY2g2NCIsIHN0ZG91dCk7CisrICAgICAgYnJlYWs7CisgICAgIGNhc2UgMDoKKyAgICAgICBicmVhazsKKyAgICAgZGVmYXVsdDoKK2RpZmYgLS1naXQgYS9sZGNvbmZpZy5oIGIvbGRjb25maWcuaAoraW5kZXggZmFkZDVlYy4uNmE4YTc1MCAxMDA2NDQKKy0tLSBhL2xkY29uZmlnLmgKKysrKyBiL2xkY29uZmlnLmgKK0BAIC0zNCw2ICszNCwxMCBAQAorICNkZWZpbmUgRkxBR19QT1dFUlBDX0xJQjY0CTB4MDUwMAorICNkZWZpbmUgRkxBR19NSVBTNjRfTElCTjMyCTB4MDYwMAorICNkZWZpbmUgRkxBR19NSVBTNjRfTElCTjY0CTB4MDcwMAorKyNkZWZpbmUgRkxBR19YODY2NF9MSUJYMzIJCTB4MDgwMAorKyNkZWZpbmUgRkxBR19BUk1fTElCSEYJCQkweDA5MDAKKysjZGVmaW5lIEZMQUdfQUFSQ0g2NF9MSUI2NAkJMHgwYTAwCisrI2RlZmluZSBGTEFHX0FSTV9MSUJTRgkJCTB4MGIwMAorIAorIC8qIE5hbWUgb2YgYXV4aWxpYXJ5IGNhY2hlLiAgKi8KKyAjZGVmaW5lIF9QQVRIX0xEQ09ORklHX0FVWF9DQUNIRSAiL3Zhci9jYWNoZS9sZGNvbmZpZy9hdXgtY2FjaGUiCitkaWZmIC0tZ2l0IGEvcmVhZGVsZmxpYi5jIGIvcmVhZGVsZmxpYi5jCitpbmRleCAwYmYwZGUzLi42ZTg3YWZjIDEwMDY0NAorLS0tIGEvcmVhZGVsZmxpYi5jCisrKysgYi9yZWFkZWxmbGliLmMKK0BAIC0yOCw2ICsyOCwxMSBAQAorIAorICNpbmNsdWRlICJlbmRpYW5fZXh0cmEuaCIKKyAKKysvKiBXb3JrLWFyb3VuZCBmb3Igb2xkIGhvc3QgdGhhdCBkb2VzIG5vdCBoYXZlIEFBcmNoNjQgZGVmaW5lZCBpbiBlbGYuaC4gKi8KKysjaWZuZGVmIEVNX0FBUkNINjQKKysjZGVmaW5lIEVNX0FBUkNINjQJMTgzCQkvKiBBUk0gQUFSQ0g2NCAqLworKyNlbmRpZgorKworICN1bmRlZiBjaGVja19wdHIKKyAjZGVmaW5lIGNoZWNrX3B0cihwdHIpCQkJCQkJXAorIGRvCQkJCQkJCQlcCitAQCAtMjkwLDYgKzI5NSwzNSBAQCBwcm9jZXNzX2VsZl9maWxlNjQgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgY29uc3QgY2hhciAqbGliLCBpbnQgKmZsYWcsCisgICAgICBsaWJjNS9saWJjNi4gICovCisgICAqZmxhZyA9IEZMQUdfRUxGOworIAorKyAgLyogU2V0IGZsYWdzIGFjY29yZGluZyB0byBpbmZvcm1hdGlvbiBpbiBFTEYgaGVhZGVyIHRvIGFsaWduIHdpdGggdGFyZ2V0CisrICAgICBsZGNvbmZpZyAqLworKyAgc3dpdGNoIChlbGZfaGVhZGVyLT5lX21hY2hpbmUpCisrICAgIHsKKysgICAgY2FzZSBFTV9JQV82NDoKKysgICAgICAqZmxhZyB8PSBGTEFHX0lBNjRfTElCNjQ7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU1fWDg2XzY0OgorKyAgICAgICpmbGFnIHw9IEZMQUdfWDg2NjRfTElCNjQ7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU1fUzM5MDoKKysgICAgICAqZmxhZyB8PSBGTEFHX1MzOTBfTElCNjQ7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU1fUFBDNjQ6CisrICAgICAgKmZsYWcgfD0gRkxBR19QT1dFUlBDX0xJQjY0OworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVNX01JUFM6CisrICAgIGNhc2UgRU1fTUlQU19SUzNfTEU6CisrICAgICAgKmZsYWcgfD0gRkxBR19NSVBTNjRfTElCTjY0OworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVNX0FBUkNINjQ6CisrICAgICAgKmZsYWcgfD0gRkxBR19BQVJDSDY0X0xJQjY0OworKyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIGVycm9yKDAsIDAsICIlcyBpcyBhIDY0LWJpdCBFTEYgZm9yIHVua25vd24gbWFjaGluZSAlbHhcbiIsCisrICAgICAgICAgICAgZmlsZV9uYW1lLCAobG9uZyllbGZfaGVhZGVyLT5lX21hY2hpbmUpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrCisgICBsb2FkYWRkciA9IC0xOworICAgZHluYW1pY19hZGRyID0gMDsKKyAgIGR5bmFtaWNfc2l6ZSA9IDA7CistLSAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9lbmRpYW4tbmVzc19oYW5kbGluZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9lbmRpYW4tbmVzc19oYW5kbGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjhlNGRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2VuZGlhbi1uZXNzX2hhbmRsaW5nLnBhdGNoCkBAIC0wLDAgKzEsNDU0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitEbyBkYXRhIGlucHV0L291dHB1dCBoYW5kbGluZyBhY2NvcmRpbmcgdG8gZW5kaWVuLW5lc3Mgb2YgdGhlIGxpYnJhcnkgZmlsZS4gVGhhdCAKK2VuYWJsZXMgdXNlIG9mIGxkY29uZmlnIGluIHRoZSBjcm9zcyBmYXNoaW9uIGZvciBhbnkgYXJjaGl0ZWN0dXJlLgorCisyMDExLzA0LzA0CitSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4KK05pdGluIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkZWxmbGliLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvcmVhZGVsZmxpYi5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkZWxmbGliLmMKK0BAIC0zOCw2ICszOCwyOCBAQCBkbwkJCQkJCQkJXAorICAgfQkJCQkJCQkJXAorICB3aGlsZSAoMCk7CisgCisraW50IGJlOworK3N0YXRpYyB1aW50MTZfdCByZWFkMTYodWludDE2X3QgeCwgaW50IGJlKQorK3sKKysgIGlmIChiZSkKKysgICAgICAgIHJldHVybiBiZTE2dG9oKHgpOworKyAgcmV0dXJuIGxlMTZ0b2goeCk7CisrfQorKworK3N0YXRpYyB1aW50MzJfdCByZWFkMzIodWludDMyX3QgeCwgaW50IGJlKQorK3sKKysgIGlmIChiZSkKKysgICAgICAgIHJldHVybiBiZTMydG9oKHgpOworKyAgcmV0dXJuIGxlMzJ0b2goeCk7CisrfQorKworK3N0YXRpYyB1aW50NjRfdCByZWFkNjQodWludDY0X3QgeCwgaW50IGJlKQorK3sKKysgIGlmIChiZSkKKysgICAgICAgIHJldHVybiBiZTY0dG9oKHgpOworKyAgcmV0dXJuIGxlNjR0b2goeCk7CisrfQorKworIC8qIFJldHVybnMgMCBpZiBldmVyeXRoaW5nIGlzIG9rLCAhPSAwIGluIGNhc2Ugb2YgZXJyb3IuICAqLworIGludAorIHByb2Nlc3NfZWxmX2ZpbGUzMiAoY29uc3QgY2hhciAqZmlsZV9uYW1lLCBjb25zdCBjaGFyICpsaWIsIGludCAqZmxhZywKK0BAIC01OSwxNSArODEsMTcgQEAgcHJvY2Vzc19lbGZfZmlsZTMyIChjb25zdCBjaGFyICpmaWxlX25hbQorICAgZWxmX2hlYWRlciA9IChFbGYzMl9FaGRyICopIGZpbGVfY29udGVudHM7CisgICAqb3N2ZXJzaW9uID0gMDsKKyAKKy0gIGlmIChlbGZfaGVhZGVyLT5lX3R5cGUgIT0gRVRfRFlOKQorKyAgYmUgPSAoZWxmX2hlYWRlci0+ZV9pZGVudFtFSV9EQVRBXSA9PSBFTEZEQVRBMk1TQik7CisrCisrICBpZiAocmVhZDE2KGVsZl9oZWFkZXItPmVfdHlwZSwgYmUpICE9IEVUX0RZTikKKyAgICAgeworICAgICAgIGVycm9yICgwLCAwLCBfKCIlcyBpcyBub3QgYSBzaGFyZWQgb2JqZWN0IGZpbGUgKFR5cGU6ICVkKS5cbiIpLCBmaWxlX25hbWUsCistCSAgICAgZWxmX2hlYWRlci0+ZV90eXBlKTsKKysJICAgICByZWFkMTYoZWxmX2hlYWRlci0+ZV90eXBlLCBiZSkpOworICAgICAgIHJldHVybiAxOworICAgICB9CisgCisgICAvKiBHZXQgaW5mb3JtYXRpb24gZnJvbSBlbGYgcHJvZ3JhbSBoZWFkZXIuICAqLworLSAgZWxmX3BoZWFkZXIgPSAoRWxmMzJfUGhkciAqKSAoZWxmX2hlYWRlci0+ZV9waG9mZiArIGZpbGVfY29udGVudHMpOworKyAgZWxmX3BoZWFkZXIgPSAoRWxmMzJfUGhkciAqKSAocmVhZDMyKGVsZl9oZWFkZXItPmVfcGhvZmYsIGJlKSArIGZpbGVfY29udGVudHMpOworICAgY2hlY2tfcHRyIChlbGZfcGhlYWRlcik7CisgCisgICAvKiBUaGUgbGlicmFyeSBpcyBhbiBlbGYgbGlicmFyeSwgbm93IHNlYXJjaCBmb3Igc29uYW1lIGFuZAorQEAgLTc5LDI3ICsxMDMsMjcgQEAgcHJvY2Vzc19lbGZfZmlsZTMyIChjb25zdCBjaGFyICpmaWxlX25hbQorICAgZHluYW1pY19zaXplID0gMDsKKyAgIHByb2dyYW1faW50ZXJwcmV0ZXIgPSBOVUxMOworICAgZm9yIChpID0gMCwgc2VnbWVudCA9IGVsZl9waGVhZGVyOworLSAgICAgICBpIDwgZWxmX2hlYWRlci0+ZV9waG51bTsgaSsrLCBzZWdtZW50KyspCisrICAgICAgIGkgPCByZWFkMTYoZWxmX2hlYWRlci0+ZV9waG51bSwgYmUpOyBpKyssIHNlZ21lbnQrKykKKyAgICAgeworICAgICAgIGNoZWNrX3B0ciAoc2VnbWVudCk7CisgCistICAgICAgc3dpdGNoIChzZWdtZW50LT5wX3R5cGUpCisrICAgICAgc3dpdGNoIChyZWFkMzIoc2VnbWVudC0+cF90eXBlLCBiZSkpCisgCXsKKyAJY2FzZSBQVF9MT0FEOgorIAkgIGlmIChsb2FkYWRkciA9PSAoRWxmMzJfQWRkcikgLTEpCistCSAgICBsb2FkYWRkciA9IHNlZ21lbnQtPnBfdmFkZHIgLSBzZWdtZW50LT5wX29mZnNldDsKKysJICAgIGxvYWRhZGRyID0gcmVhZDMyKHNlZ21lbnQtPnBfdmFkZHIsIGJlKSAtIHJlYWQzMihzZWdtZW50LT5wX29mZnNldCwgYmUpOworIAkgIGJyZWFrOworIAorIAljYXNlIFBUX0RZTkFNSUM6CisgCSAgaWYgKGR5bmFtaWNfYWRkcikKKyAJICAgIGVycm9yICgwLCAwLCBfKCJtb3JlIHRoYW4gb25lIGR5bmFtaWMgc2VnbWVudFxuIikpOworIAorLQkgIGR5bmFtaWNfYWRkciA9IHNlZ21lbnQtPnBfb2Zmc2V0OworLQkgIGR5bmFtaWNfc2l6ZSA9IHNlZ21lbnQtPnBfZmlsZXN6OworKwkgIGR5bmFtaWNfYWRkciA9IHJlYWQzMihzZWdtZW50LT5wX29mZnNldCwgYmUpOworKwkgIGR5bmFtaWNfc2l6ZSA9IHJlYWQzMihzZWdtZW50LT5wX2ZpbGVzeiwgYmUpOworIAkgIGJyZWFrOworIAorIAljYXNlIFBUX0lOVEVSUDoKKy0JICBwcm9ncmFtX2ludGVycHJldGVyID0gKGNoYXIgKikgKGZpbGVfY29udGVudHMgKyBzZWdtZW50LT5wX29mZnNldCk7CisrCSAgcHJvZ3JhbV9pbnRlcnByZXRlciA9IChjaGFyICopIChmaWxlX2NvbnRlbnRzICsgcmVhZDMyKHNlZ21lbnQtPnBfb2Zmc2V0LCBiZSkpOworIAkgIGNoZWNrX3B0ciAocHJvZ3JhbV9pbnRlcnByZXRlcik7CisgCisgCSAgLyogQ2hlY2sgaWYgdGhpcyBpcyBlbm91Z2ggdG8gY2xhc3NpZnkgdGhlIGJpbmFyeS4gICovCitAQCAtMTEzLDIwICsxMzcsMjAgQEAgcHJvY2Vzc19lbGZfZmlsZTMyIChjb25zdCBjaGFyICpmaWxlX25hbQorIAkgIGJyZWFrOworIAorIAljYXNlIFBUX05PVEU6CistCSAgaWYgKCEqb3N2ZXJzaW9uICYmIHNlZ21lbnQtPnBfZmlsZXN6ID49IDMyICYmIHNlZ21lbnQtPnBfYWxpZ24gPj0gNCkKKysJICBpZiAoISpvc3ZlcnNpb24gJiYgcmVhZDMyKHNlZ21lbnQtPnBfZmlsZXN6LCBiZSkgPj0gMzIgJiYgc2VnbWVudC0+cF9hbGlnbiA+PSA0KQorIAkgICAgeworIAkgICAgICBFbGYzMl9Xb3JkICphYmlfbm90ZSA9IChFbGYzMl9Xb3JkICopIChmaWxlX2NvbnRlbnRzCistCQkJCQkJICAgICArIHNlZ21lbnQtPnBfb2Zmc2V0KTsKKy0JICAgICAgRWxmMzJfQWRkciBzaXplID0gc2VnbWVudC0+cF9maWxlc3o7CisrCQkJCQkJICAgICArIHJlYWQzMihzZWdtZW50LT5wX29mZnNldCwgYmUpKTsKKysJICAgICAgRWxmMzJfQWRkciBzaXplID0gcmVhZDMyKHNlZ21lbnQtPnBfZmlsZXN6LCBiZSk7CisgCistCSAgICAgIHdoaWxlIChhYmlfbm90ZSBbMF0gIT0gNCB8fCBhYmlfbm90ZSBbMV0gIT0gMTYKKy0JCSAgICAgfHwgYWJpX25vdGUgWzJdICE9IDEKKysJICAgICAgd2hpbGUgKHJlYWQzMihhYmlfbm90ZSBbMF0sIGJlKSAhPSA0IHx8IHJlYWQzMihhYmlfbm90ZSBbMV0sIGJlKSAhPSAxNgorKwkJICAgICB8fCByZWFkMzIoYWJpX25vdGUgWzJdLCBiZSkgIT0gMQorIAkJICAgICB8fCBtZW1jbXAgKGFiaV9ub3RlICsgMywgIkdOVSIsIDQpICE9IDApCisgCQl7CistI2RlZmluZSBST1VORChsZW4pICgoKGxlbikgKyBzaXplb2YgKEVsZjMyX1dvcmQpKSAtIDEpICYgLXNpemVvZiAoRWxmMzJfV29yZCkpKQorLQkJICBFbGYzMl9BZGRyKSBub3RlX3NpemUgPSAzICogc2l6ZW9mIChFbGYzMl9Xb3JkKSkKKy0JCQkJCSArIFJPVU5EIChhYmlfbm90ZVswXSkKKy0JCQkJCSArIFJPVU5EIChhYmlfbm90ZVsxXSk7CisrI2RlZmluZSBST1VORChsZW4pICgoKGxlbikgKyBzaXplb2YgKEVsZjMyX1dvcmQpIC0gMSkgJiAtc2l6ZW9mIChFbGYzMl9Xb3JkKSkKKysJCSAgRWxmMzJfQWRkciBub3RlX3NpemUgPSAzICogc2l6ZW9mIChFbGYzMl9Xb3JkKQorKwkJCQkJICsgUk9VTkQgKHJlYWQzMihhYmlfbm90ZVswXSwgYmUpKQorKwkJCQkJICsgUk9VTkQgKHJlYWQzMihhYmlfbm90ZVsxXSwgYmUpKTsKKyAKKyAJCSAgaWYgKHNpemUgLSAzMiA8IG5vdGVfc2l6ZSB8fCBub3RlX3NpemUgPT0gMCkKKyAJCSAgICB7CitAQCAtMTQwLDEwICsxNjQsMTAgQEAgcHJvY2Vzc19lbGZfZmlsZTMyIChjb25zdCBjaGFyICpmaWxlX25hbQorIAkgICAgICBpZiAoc2l6ZSA9PSAwKQorIAkJYnJlYWs7CisgCistCSAgICAgICpvc3ZlcnNpb24gPSAoYWJpX25vdGUgWzRdIDw8IDI0KSB8CistCQkJICAgKChhYmlfbm90ZSBbNV0gJiAweGZmKSA8PCAxNikgfAorLQkJCSAgICgoYWJpX25vdGUgWzZdICYgMHhmZikgPDwgOCkgfAorLQkJCSAgIChhYmlfbm90ZSBbN10gJiAweGZmKTsKKysJICAgICAgKm9zdmVyc2lvbiA9IChyZWFkMzIoYWJpX25vdGUgWzRdLCBiZSkgPDwgMjQpIHwKKysJCQkgICAoKHJlYWQzMihhYmlfbm90ZSBbNV0sIGJlKSAmIDB4ZmYpIDw8IDE2KSB8CisrCQkJICAgKChyZWFkMzIoYWJpX25vdGUgWzZdLCBiZSkgJiAweGZmKSA8PCA4KSB8CisrCQkJICAgKHJlYWQzMihhYmlfbm90ZSBbN10sIGJlKSAmIDB4ZmYpOworIAkgICAgfQorIAkgIGJyZWFrOworIAorQEAgLTE2NywxMyArMTkxLDEzIEBAIHByb2Nlc3NfZWxmX2ZpbGUzMiAoY29uc3QgY2hhciAqZmlsZV9uYW0KKyAKKyAgIC8qIEZpbmQgdGhlIHN0cmluZyB0YWJsZS4gICovCisgICBkeW5hbWljX3N0cmluZ3MgPSBOVUxMOworLSAgZm9yIChkeW5fZW50cnkgPSBkeW5hbWljX3NlZ21lbnQ7IGR5bl9lbnRyeS0+ZF90YWcgIT0gRFRfTlVMTDsKKysgIGZvciAoZHluX2VudHJ5ID0gZHluYW1pY19zZWdtZW50OyByZWFkMzIoZHluX2VudHJ5LT5kX3RhZywgYmUpICE9IERUX05VTEw7CisgICAgICAgICsrZHluX2VudHJ5KQorICAgICB7CisgICAgICAgY2hlY2tfcHRyIChkeW5fZW50cnkpOworLSAgICAgIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX1NUUlRBQikKKysgICAgICBpZiAocmVhZDMyKGR5bl9lbnRyeS0+ZF90YWcsIGJlKSA9PSBEVF9TVFJUQUIpCisgCXsKKy0JICBkeW5hbWljX3N0cmluZ3MgPSAoY2hhciAqKSAoZmlsZV9jb250ZW50cyArIGR5bl9lbnRyeS0+ZF91bi5kX3ZhbCAtIGxvYWRhZGRyKTsKKysJICBkeW5hbWljX3N0cmluZ3MgPSAoY2hhciAqKSAoZmlsZV9jb250ZW50cyArIHJlYWQzMihkeW5fZW50cnktPmRfdW4uZF92YWwsIGJlKSAtIGxvYWRhZGRyKTsKKyAJICBjaGVja19wdHIgKGR5bmFtaWNfc3RyaW5ncyk7CisgCSAgYnJlYWs7CisgCX0KK0BAIC0xODMsMTUgKzIwNywxNSBAQCBwcm9jZXNzX2VsZl9maWxlMzIgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgICAgIHJldHVybiAxOworIAorICAgLyogTm93IHJlYWQgdGhlIERUX05FRURFRCBhbmQgRFRfU09OQU1FIGVudHJpZXMuICAqLworLSAgZm9yIChkeW5fZW50cnkgPSBkeW5hbWljX3NlZ21lbnQ7IGR5bl9lbnRyeS0+ZF90YWcgIT0gRFRfTlVMTDsKKysgIGZvciAoZHluX2VudHJ5ID0gZHluYW1pY19zZWdtZW50OyByZWFkMzIoZHluX2VudHJ5LT5kX3RhZywgYmUpICE9IERUX05VTEw7CisgICAgICAgICsrZHluX2VudHJ5KQorICAgICB7CistICAgICAgaWYgKGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfTkVFREVEIHx8IGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfU09OQU1FKQorKyAgICAgIGlmIChyZWFkMzIoZHluX2VudHJ5LT5kX3RhZywgYmUpID09IERUX05FRURFRCB8fCByZWFkMzIoZHluX2VudHJ5LT5kX3RhZywgYmUpID09IERUX1NPTkFNRSkKKyAJeworLQkgIGNoYXIgKm5hbWUgPSBkeW5hbWljX3N0cmluZ3MgKyBkeW5fZW50cnktPmRfdW4uZF92YWw7CisrCSAgY2hhciAqbmFtZSA9IGR5bmFtaWNfc3RyaW5ncyArIHJlYWQzMihkeW5fZW50cnktPmRfdW4uZF92YWwsIGJlKTsKKyAJICBjaGVja19wdHIgKG5hbWUpOworIAorLQkgIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX05FRURFRCkKKysJICBpZiAocmVhZDMyKGR5bl9lbnRyeS0+ZF90YWcsIGJlKSA9PSBEVF9ORUVERUQpCisgCSAgICB7CisgCisgCSAgICAgIGlmICgqZmxhZyA9PSBGTEFHX0VMRikKK0BAIC0yMDgsNyArMjMyLDcgQEAgcHJvY2Vzc19lbGZfZmlsZTMyIChjb25zdCBjaGFyICpmaWxlX25hbQorIAkJfQorIAkgICAgfQorIAorLQkgIGVsc2UgaWYgKGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfU09OQU1FKQorKwkgIGVsc2UgaWYgKHJlYWQzMihkeW5fZW50cnktPmRfdGFnLCBiZSkgPT0gRFRfU09OQU1FKQorIAkgICAgKnNvbmFtZSA9IHhzdHJkdXAgKG5hbWUpOworIAorIAkgIC8qIERvIHdlIGhhdmUgZXZlcnl0aGluZyB3ZSBuZWVkPyAgKi8KK0BAIC0yNDYsMTUgKzI3MCwxNyBAQCBwcm9jZXNzX2VsZl9maWxlNjQgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgICBlbGZfaGVhZGVyID0gKEVsZjY0X0VoZHIgKikgZmlsZV9jb250ZW50czsKKyAgICpvc3ZlcnNpb24gPSAwOworIAorLSAgaWYgKGVsZl9oZWFkZXItPmVfdHlwZSAhPSBFVF9EWU4pCisrICBiZSA9IChlbGZfaGVhZGVyLT5lX2lkZW50W0VJX0RBVEFdID09IEVMRkRBVEEyTVNCKTsKKysKKysgIGlmIChyZWFkMTYoZWxmX2hlYWRlci0+ZV90eXBlLCBiZSkgIT0gRVRfRFlOKQorICAgICB7CisgICAgICAgZXJyb3IgKDAsIDAsIF8oIiVzIGlzIG5vdCBhIHNoYXJlZCBvYmplY3QgZmlsZSAoVHlwZTogJWQpLlxuIiksIGZpbGVfbmFtZSwKKy0JICAgICBlbGZfaGVhZGVyLT5lX3R5cGUpOworKwkgICAgIHJlYWQxNihlbGZfaGVhZGVyLT5lX3R5cGUsIGJlKSk7CisgICAgICAgcmV0dXJuIDE7CisgICAgIH0KKyAKKyAgIC8qIEdldCBpbmZvcm1hdGlvbiBmcm9tIGVsZiBwcm9ncmFtIGhlYWRlci4gICovCistICBlbGZfcGhlYWRlciA9IChFbGY2NF9QaGRyICopIChlbGZfaGVhZGVyLT5lX3Bob2ZmICsgZmlsZV9jb250ZW50cyk7CisrICBlbGZfcGhlYWRlciA9IChFbGY2NF9QaGRyICopIChyZWFkNjQoZWxmX2hlYWRlci0+ZV9waG9mZiwgYmUpICsgZmlsZV9jb250ZW50cyk7CisgICBjaGVja19wdHIgKGVsZl9waGVhZGVyKTsKKyAKKyAgIC8qIFRoZSBsaWJyYXJ5IGlzIGFuIGVsZiBsaWJyYXJ5LCBub3cgc2VhcmNoIGZvciBzb25hbWUgYW5kCitAQCAtMjY2LDI3ICsyOTIsMjcgQEAgcHJvY2Vzc19lbGZfZmlsZTY0IChjb25zdCBjaGFyICpmaWxlX25hbQorICAgZHluYW1pY19zaXplID0gMDsKKyAgIHByb2dyYW1faW50ZXJwcmV0ZXIgPSBOVUxMOworICAgZm9yIChpID0gMCwgc2VnbWVudCA9IGVsZl9waGVhZGVyOworLSAgICAgICBpIDwgZWxmX2hlYWRlci0+ZV9waG51bTsgaSsrLCBzZWdtZW50KyspCisrICAgICAgIGkgPCByZWFkMTYoZWxmX2hlYWRlci0+ZV9waG51bSwgYmUpOyBpKyssIHNlZ21lbnQrKykKKyAgICAgeworICAgICAgIGNoZWNrX3B0ciAoc2VnbWVudCk7CisgCistICAgICAgc3dpdGNoIChzZWdtZW50LT5wX3R5cGUpCisrICAgICAgc3dpdGNoIChyZWFkMzIoc2VnbWVudC0+cF90eXBlLCBiZSkpCisgCXsKKyAJY2FzZSBQVF9MT0FEOgorIAkgIGlmIChsb2FkYWRkciA9PSAoRWxmNjRfQWRkcikgLTEpCistCSAgICBsb2FkYWRkciA9IHNlZ21lbnQtPnBfdmFkZHIgLSBzZWdtZW50LT5wX29mZnNldDsKKysJICAgIGxvYWRhZGRyID0gcmVhZDY0KHNlZ21lbnQtPnBfdmFkZHIsIGJlKSAtIHJlYWQ2NChzZWdtZW50LT5wX29mZnNldCwgYmUpOworIAkgIGJyZWFrOworIAorIAljYXNlIFBUX0RZTkFNSUM6CisgCSAgaWYgKGR5bmFtaWNfYWRkcikKKyAJICAgIGVycm9yICgwLCAwLCBfKCJtb3JlIHRoYW4gb25lIGR5bmFtaWMgc2VnbWVudFxuIikpOworIAorLQkgIGR5bmFtaWNfYWRkciA9IHNlZ21lbnQtPnBfb2Zmc2V0OworLQkgIGR5bmFtaWNfc2l6ZSA9IHNlZ21lbnQtPnBfZmlsZXN6OworKwkgIGR5bmFtaWNfYWRkciA9IHJlYWQ2NChzZWdtZW50LT5wX29mZnNldCwgYmUpOworKwkgIGR5bmFtaWNfc2l6ZSA9IHJlYWQzMihzZWdtZW50LT5wX2ZpbGVzeiwgYmUpOworIAkgIGJyZWFrOworIAorIAljYXNlIFBUX0lOVEVSUDoKKy0JICBwcm9ncmFtX2ludGVycHJldGVyID0gKGNoYXIgKikgKGZpbGVfY29udGVudHMgKyBzZWdtZW50LT5wX29mZnNldCk7CisrCSAgcHJvZ3JhbV9pbnRlcnByZXRlciA9IChjaGFyICopIChmaWxlX2NvbnRlbnRzICsgcmVhZDY0KHNlZ21lbnQtPnBfb2Zmc2V0LCBiZSkpOworIAkgIGNoZWNrX3B0ciAocHJvZ3JhbV9pbnRlcnByZXRlcik7CisgCisgCSAgLyogQ2hlY2sgaWYgdGhpcyBpcyBlbm91Z2ggdG8gY2xhc3NpZnkgdGhlIGJpbmFyeS4gICovCitAQCAtMzAwLDIwICszMjYsMjEgQEAgcHJvY2Vzc19lbGZfZmlsZTY0IChjb25zdCBjaGFyICpmaWxlX25hbQorIAkgIGJyZWFrOworIAorIAljYXNlIFBUX05PVEU6CistCSAgaWYgKCEqb3N2ZXJzaW9uICYmIHNlZ21lbnQtPnBfZmlsZXN6ID49IDMyICYmIHNlZ21lbnQtPnBfYWxpZ24gPj0gNCkKKysJICBpZiAoISpvc3ZlcnNpb24gJiYgcmVhZDMyKHNlZ21lbnQtPnBfZmlsZXN6LCBiZSkgPj0gMzIgJiYgcmVhZDMyKHNlZ21lbnQtPnBfYWxpZ24sIGJlKSA+PSA0KQorIAkgICAgeworIAkgICAgICBFbGY2NF9Xb3JkICphYmlfbm90ZSA9IChFbGY2NF9Xb3JkICopIChmaWxlX2NvbnRlbnRzCistCQkJCQkJICAgICArIHNlZ21lbnQtPnBfb2Zmc2V0KTsKKy0JICAgICAgRWxmNjRfQWRkciBzaXplID0gc2VnbWVudC0+cF9maWxlc3o7CisrCQkJCQkJICAgICArIHJlYWQ2NChzZWdtZW50LT5wX29mZnNldCwgYmUpKTsKKysJICAgICAgRWxmNjRfQWRkciBzaXplID0gcmVhZDMyKHNlZ21lbnQtPnBfZmlsZXN6LCBiZSk7CisgCistCSAgICAgIHdoaWxlIChhYmlfbm90ZSBbMF0gIT0gNCB8fCBhYmlfbm90ZSBbMV0gIT0gMTYKKy0JCSAgICAgfHwgYWJpX25vdGUgWzJdICE9IDEKKysJICAgICAgd2hpbGUgKHJlYWQzMihhYmlfbm90ZSBbMF0sIGJlKSAhPSA0IHx8IHJlYWQzMihhYmlfbm90ZSBbMV0sIGJlKSAhPSAxNgorKwkJICAgICB8fCByZWFkMzIoYWJpX25vdGUgWzJdLCBiZSkgIT0gMQorIAkJICAgICB8fCBtZW1jbXAgKGFiaV9ub3RlICsgMywgIkdOVSIsIDQpICE9IDApCisgCQl7CisrI3VuZGVmIFJPVU5ECisgI2RlZmluZSBST1VORChsZW4pICgoKGxlbikgKyBzaXplb2YgKEVsZjY0X1dvcmQpIC0gMSkgJiAtc2l6ZW9mIChFbGY2NF9Xb3JkKSkKKyAJCSAgRWxmNjRfQWRkciBub3RlX3NpemUgPSAzICogc2l6ZW9mIChFbGY2NF9Xb3JkKQorLQkJCQkJICsgUk9VTkQgKGFiaV9ub3RlWzBdKQorLQkJCQkJICsgUk9VTkQgKGFiaV9ub3RlWzFdKTsKKysJCQkJCSArIFJPVU5EIChyZWFkMzIoYWJpX25vdGVbMF0sIGJlKSkKKysJCQkJCSArIFJPVU5EIChyZWFkMzIoYWJpX25vdGVbMV0sIGJlKSk7CisgCisgCQkgIGlmIChzaXplIC0gMzIgPCBub3RlX3NpemUgfHwgbm90ZV9zaXplID09IDApCisgCQkgICAgeworQEAgLTMyNywxMCArMzU0LDEwIEBAIHByb2Nlc3NfZWxmX2ZpbGU2NCAoY29uc3QgY2hhciAqZmlsZV9uYW0KKyAJICAgICAgaWYgKHNpemUgPT0gMCkKKyAJCWJyZWFrOworIAorLQkgICAgICAqb3N2ZXJzaW9uID0gKGFiaV9ub3RlIFs0XSA8PCAyNCkgfAorLQkJCSAgICgoYWJpX25vdGUgWzVdICYgMHhmZikgPDwgMTYpIHwKKy0JCQkgICAoKGFiaV9ub3RlIFs2XSAmIDB4ZmYpIDw8IDgpIHwKKy0JCQkgICAoYWJpX25vdGUgWzddICYgMHhmZik7CisrCSAgICAgICpvc3ZlcnNpb24gPSAocmVhZDMyKGFiaV9ub3RlIFs0XSwgYmUpIDw8IDI0KSB8CisrCQkJICAgKChyZWFkMzIoYWJpX25vdGUgWzVdLCBiZSkgJiAweGZmKSA8PCAxNikgfAorKwkJCSAgICgocmVhZDMyKGFiaV9ub3RlIFs2XSwgYmUpICYgMHhmZikgPDwgOCkgfAorKwkJCSAgIChyZWFkMzIoYWJpX25vdGUgWzddLCBiZSkgJiAweGZmKTsKKyAJICAgIH0KKyAJICBicmVhazsKKyAKK0BAIC0zNTQsMTMgKzM4MSwxMyBAQCBwcm9jZXNzX2VsZl9maWxlNjQgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgCisgICAvKiBGaW5kIHRoZSBzdHJpbmcgdGFibGUuICAqLworICAgZHluYW1pY19zdHJpbmdzID0gTlVMTDsKKy0gIGZvciAoZHluX2VudHJ5ID0gZHluYW1pY19zZWdtZW50OyBkeW5fZW50cnktPmRfdGFnICE9IERUX05VTEw7CisrICBmb3IgKGR5bl9lbnRyeSA9IGR5bmFtaWNfc2VnbWVudDsgcmVhZDY0KGR5bl9lbnRyeS0+ZF90YWcsIGJlKSAhPSBEVF9OVUxMOworICAgICAgICArK2R5bl9lbnRyeSkKKyAgICAgeworICAgICAgIGNoZWNrX3B0ciAoZHluX2VudHJ5KTsKKy0gICAgICBpZiAoZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9TVFJUQUIpCisrICAgICAgaWYgKHJlYWQ2NChkeW5fZW50cnktPmRfdGFnLCBiZSkgPT0gRFRfU1RSVEFCKQorIAl7CistCSAgZHluYW1pY19zdHJpbmdzID0gKGNoYXIgKikgKGZpbGVfY29udGVudHMgKyBkeW5fZW50cnktPmRfdW4uZF92YWwgLSBsb2FkYWRkcik7CisrCSAgZHluYW1pY19zdHJpbmdzID0gKGNoYXIgKikgKGZpbGVfY29udGVudHMgKyByZWFkNjQoZHluX2VudHJ5LT5kX3VuLmRfdmFsLCBiZSkgLSBsb2FkYWRkcik7CisgCSAgY2hlY2tfcHRyIChkeW5hbWljX3N0cmluZ3MpOworIAkgIGJyZWFrOworIAl9CitAQCAtMzcwLDE1ICszOTcsMTUgQEAgcHJvY2Vzc19lbGZfZmlsZTY0IChjb25zdCBjaGFyICpmaWxlX25hbQorICAgICByZXR1cm4gMTsKKyAKKyAgIC8qIE5vdyByZWFkIHRoZSBEVF9ORUVERUQgYW5kIERUX1NPTkFNRSBlbnRyaWVzLiAgKi8KKy0gIGZvciAoZHluX2VudHJ5ID0gZHluYW1pY19zZWdtZW50OyBkeW5fZW50cnktPmRfdGFnICE9IERUX05VTEw7CisrICBmb3IgKGR5bl9lbnRyeSA9IGR5bmFtaWNfc2VnbWVudDsgcmVhZDY0KGR5bl9lbnRyeS0+ZF90YWcsIGJlKSAhPSBEVF9OVUxMOworICAgICAgICArK2R5bl9lbnRyeSkKKyAgICAgeworLSAgICAgIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX05FRURFRCB8fCBkeW5fZW50cnktPmRfdGFnID09IERUX1NPTkFNRSkKKysgICAgICBpZiAocmVhZDY0KGR5bl9lbnRyeS0+ZF90YWcsIGJlKSA9PSBEVF9ORUVERUQgfHwgcmVhZDY0KGR5bl9lbnRyeS0+ZF90YWcsIGJlKSA9PSBEVF9TT05BTUUpCisgCXsKKy0JICBjaGFyICpuYW1lID0gZHluYW1pY19zdHJpbmdzICsgZHluX2VudHJ5LT5kX3VuLmRfdmFsOworKwkgIGNoYXIgKm5hbWUgPSBkeW5hbWljX3N0cmluZ3MgKyByZWFkNjQoZHluX2VudHJ5LT5kX3VuLmRfdmFsLCBiZSk7CisgCSAgY2hlY2tfcHRyIChuYW1lKTsKKyAKKy0JICBpZiAoZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9ORUVERUQpCisrCSAgaWYgKHJlYWQ2NChkeW5fZW50cnktPmRfdGFnLCBiZSkgPT0gRFRfTkVFREVEKQorIAkgICAgeworIAorIAkgICAgICBpZiAoKmZsYWcgPT0gRkxBR19FTEYpCitAQCAtMzk1LDcgKzQyMiw3IEBAIHByb2Nlc3NfZWxmX2ZpbGU2NCAoY29uc3QgY2hhciAqZmlsZV9uYW0KKyAJCX0KKyAJICAgIH0KKyAKKy0JICBlbHNlIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX1NPTkFNRSkKKysJICBlbHNlIGlmIChyZWFkNjQoZHluX2VudHJ5LT5kX3RhZywgYmUpID09IERUX1NPTkFNRSkKKyAJICAgICpzb25hbWUgPSB4c3RyZHVwIChuYW1lKTsKKyAKKyAJICAvKiBEbyB3ZSBoYXZlIGV2ZXJ5dGhpbmcgd2UgbmVlZD8gICovCitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkbGliLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvcmVhZGxpYi5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkbGliLmMKK0BAIC0xNjksNyArMTY5LDggQEAgcHJvY2Vzc19maWxlIChjb25zdCBjaGFyICpyZWFsX2ZpbGVfbmFtZQorICAgICAgIHJldCA9IDE7CisgICAgIH0KKyAgIC8qIExpYnJhcmllcyBoYXZlIHRvIGJlIHNoYXJlZCBvYmplY3QgZmlsZXMuICAqLworLSAgZWxzZSBpZiAoZWxmX2hlYWRlci0+ZV90eXBlICE9IEVUX0RZTikKKysgIGVsc2UgaWYgKChlbGZfaGVhZGVyLT5lX2lkZW50W0VJX0RBVEFdID09IEVMRkRBVEEyTVNCICYmIGJlMTZ0b2goZWxmX2hlYWRlci0+ZV90eXBlKSAhPSBFVF9EWU4pIHx8CisrICAgICAgKGVsZl9oZWFkZXItPmVfaWRlbnRbRUlfREFUQV0gPT0gRUxGREFUQTJMU0IgJiYgbGUxNnRvaChlbGZfaGVhZGVyLT5lX3R5cGUpICE9IEVUX0RZTikpCisgICAgIHJldCA9IDE7CisgICBlbHNlIGlmIChwcm9jZXNzX2VsZl9maWxlIChmaWxlX25hbWUsIGxpYiwgZmxhZywgb3N2ZXJzaW9uLCBzb25hbWUsCisgCQkJICAgICBmaWxlX2NvbnRlbnRzLCBzdGF0YnVmLnN0X3NpemUpKQorSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvY2FjaGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9jYWNoZS5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9jYWNoZS5jCitAQCAtMzksNiArMzksMjkgQEAKKyAjIGRlZmluZSBOXyhtc2dpZCkgIG1zZ2lkCisgI2RlZmluZSBfKG1zZykgbXNnCisgCisrZXh0ZXJuIGludCBiZTsKKysKKytzdGF0aWMgdWludDE2X3Qgd3JpdGUxNih1aW50MTZfdCB4LCBpbnQgYmUpCisreworKyAgaWYgKGJlKQorKyAgICAgICAgcmV0dXJuIGh0b2JlMTYoeCk7CisrICByZXR1cm4gaHRvbGUxNih4KTsKKyt9CisrCisrc3RhdGljIHVpbnQzMl90IHdyaXRlMzIodWludDMyX3QgeCwgaW50IGJlKQorK3sKKysgIGlmIChiZSkKKysgICAgICAgIHJldHVybiBodG9iZTMyKHgpOworKyAgcmV0dXJuIGh0b2xlMzIoeCk7CisrfQorKworK3N0YXRpYyB1aW50NjRfdCB3cml0ZTY0KHVpbnQ2NF90IHgsIGludCBiZSkKKyt7CisrICBpZiAoYmUpCisrICAgICAgICByZXR1cm4gaHRvYmU2NCh4KTsKKysgIHJldHVybiBodG9sZTY0KHgpOworK30KKysKKyBzdHJ1Y3QgY2FjaGVfZW50cnkKKyB7CisgICBjaGFyICpsaWI7CQkJLyogTGlicmFyeSBuYW1lLiAgKi8KK0BAIC0yNzksNyArMzAyLDEyIEBAIHNhdmVfY2FjaGUgKGNvbnN0IGNoYXIgKmNhY2hlX25hbWUpCisgICAvKiBOdW1iZXIgb2Ygbm9ybWFsIGNhY2hlIGVudHJpZXMuICAqLworICAgaW50IGNhY2hlX2VudHJ5X29sZF9jb3VudCA9IDA7CisgCistICBmb3IgKGVudHJ5ID0gZW50cmllczsgZW50cnkgIT0gTlVMTDsgZW50cnkgPSBlbnRyeS0+bmV4dCkKKysgICAgaWYgKGJlKQorKyAgICAgIHByaW50Zigic2F2aW5nIGNhY2hlIGluIGJpZyBlbmRpYW4gZW5jb2RpbmdcbiIpOworKyAgICBlbHNlCisrICAgICAgcHJpbnRmKCJzYXZpbmcgY2FjaGUgaW4gbGl0dGxlIGVuZGlhbiBlbmNvZGluZ1xuIik7CisrCisrICAgIGZvciAoZW50cnkgPSBlbnRyaWVzOyBlbnRyeSAhPSBOVUxMOyBlbnRyeSA9IGVudHJ5LT5uZXh0KQorICAgICB7CisgICAgICAgLyogQWNjb3VudCB0aGUgZmluYWwgTlVMcy4gICovCisgICAgICAgdG90YWxfc3RybGVuICs9IHN0cmxlbiAoZW50cnktPmxpYikgKyBzdHJsZW4gKGVudHJ5LT5wYXRoKSArIDI7CitAQCAtMzEwLDcgKzMzOCw3IEBAIHNhdmVfY2FjaGUgKGNvbnN0IGNoYXIgKmNhY2hlX25hbWUpCisgICAgICAgbWVtc2V0IChmaWxlX2VudHJpZXMsICdcMCcsIHNpemVvZiAoc3RydWN0IGNhY2hlX2ZpbGUpKTsKKyAgICAgICBtZW1jcHkgKGZpbGVfZW50cmllcy0+bWFnaWMsIENBQ0hFTUFHSUMsIHNpemVvZiBDQUNIRU1BR0lDIC0gMSk7CisgCistICAgICAgZmlsZV9lbnRyaWVzLT5ubGlicyA9IGNhY2hlX2VudHJ5X29sZF9jb3VudDsKKysgICAgICBmaWxlX2VudHJpZXMtPm5saWJzID0gd3JpdGUzMihjYWNoZV9lbnRyeV9vbGRfY291bnQsIGJlKTsKKyAgICAgfQorIAorICAgc3RydWN0IGNhY2hlX2ZpbGVfbmV3ICpmaWxlX2VudHJpZXNfbmV3ID0gTlVMTDsKK0BAIC0zMzAsOCArMzU4LDggQEAgc2F2ZV9jYWNoZSAoY29uc3QgY2hhciAqY2FjaGVfbmFtZSkKKyAgICAgICBtZW1jcHkgKGZpbGVfZW50cmllc19uZXctPnZlcnNpb24sIENBQ0hFX1ZFUlNJT04sCisgCSAgICAgIHNpemVvZiBDQUNIRV9WRVJTSU9OIC0gMSk7CisgCistICAgICAgZmlsZV9lbnRyaWVzX25ldy0+bmxpYnMgPSBjYWNoZV9lbnRyeV9jb3VudDsKKy0gICAgICBmaWxlX2VudHJpZXNfbmV3LT5sZW5fc3RyaW5ncyA9IHRvdGFsX3N0cmxlbjsKKysgICAgICBmaWxlX2VudHJpZXNfbmV3LT5ubGlicyA9IHdyaXRlMzIoY2FjaGVfZW50cnlfY291bnQsIGJlKTsKKysgICAgICBmaWxlX2VudHJpZXNfbmV3LT5sZW5fc3RyaW5ncyA9IHdyaXRlMzIodG90YWxfc3RybGVuLCBiZSk7CisgICAgIH0KKyAKKyAgIC8qIFBhZCBmb3IgYWxpZ25tZW50IG9mIGNhY2hlX2ZpbGVfbmV3LiAgKi8KK0BAIC0zNTgsOSArMzg2LDkgQEAgc2F2ZV9jYWNoZSAoY29uc3QgY2hhciAqY2FjaGVfbmFtZSkKKyAgICAgICAvKiBGaXJzdCB0aGUgbGlicmFyeS4gICovCisgICAgICAgaWYgKG9wdF9mb3JtYXQgIT0gMiAmJiBlbnRyeS0+aHdjYXAgPT0gMCkKKyAJeworLQkgIGZpbGVfZW50cmllcy0+bGlic1tpZHhfb2xkXS5mbGFncyA9IGVudHJ5LT5mbGFnczsKKysJICBmaWxlX2VudHJpZXMtPmxpYnNbaWR4X29sZF0uZmxhZ3MgPSB3cml0ZTMyKGVudHJ5LT5mbGFncywgYmUpOworIAkgIC8qIFhYWDogQWN0dWFsbHkgd2UgY2FuIG9wdGltaXplIGhlcmUgYW5kIHJlbW92ZSBkdXBsaWNhdGVzLiAgKi8KKy0JICBmaWxlX2VudHJpZXMtPmxpYnNbaWR4X29sZF0ua2V5ID0gc3RyX29mZnNldCArIHBhZDsKKysJICBmaWxlX2VudHJpZXMtPmxpYnNbaWR4X29sZF0ua2V5ID0gd3JpdGUzMihzdHJfb2Zmc2V0ICsgcGFkLCBiZSk7CisgCX0KKyAgICAgICBpZiAob3B0X2Zvcm1hdCAhPSAwKQorIAl7CitAQCAtMzY4LDEwICszOTYsMTAgQEAgc2F2ZV9jYWNoZSAoY29uc3QgY2hhciAqY2FjaGVfbmFtZSkKKyAJICAgICBub3QgZG9pbmcgc28gbWFrZXMgdGhlIGNvZGUgZWFzaWVyLCB0aGUgc3RyaW5nIHRhYmxlCisgCSAgICAgYWx3YXlzIGJlZ2lucyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0aGUgbmV3IGNhY2hlCisgCSAgICAgc3RydWN0LiAgKi8KKy0JICBmaWxlX2VudHJpZXNfbmV3LT5saWJzW2lkeF9uZXddLmZsYWdzID0gZW50cnktPmZsYWdzOworLQkgIGZpbGVfZW50cmllc19uZXctPmxpYnNbaWR4X25ld10ub3N2ZXJzaW9uID0gZW50cnktPm9zdmVyc2lvbjsKKy0JICBmaWxlX2VudHJpZXNfbmV3LT5saWJzW2lkeF9uZXddLmh3Y2FwID0gZW50cnktPmh3Y2FwOworLQkgIGZpbGVfZW50cmllc19uZXctPmxpYnNbaWR4X25ld10ua2V5ID0gc3RyX29mZnNldDsKKysJICBmaWxlX2VudHJpZXNfbmV3LT5saWJzW2lkeF9uZXddLmZsYWdzID0gd3JpdGUzMihlbnRyeS0+ZmxhZ3MsIGJlKTsKKysJICBmaWxlX2VudHJpZXNfbmV3LT5saWJzW2lkeF9uZXddLm9zdmVyc2lvbiA9IHdyaXRlMzIoZW50cnktPm9zdmVyc2lvbiwgYmUpOworKwkgIGZpbGVfZW50cmllc19uZXctPmxpYnNbaWR4X25ld10uaHdjYXAgPSB3cml0ZTY0KGVudHJ5LT5od2NhcCwgYmUpOworKwkgIGZpbGVfZW50cmllc19uZXctPmxpYnNbaWR4X25ld10ua2V5ID0gd3JpdGUzMihzdHJfb2Zmc2V0LCBiZSk7CisgCX0KKyAKKyAgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChlbnRyeS0+bGliKSArIDE7CitAQCAtMzc5LDkgKzQwNyw5IEBAIHNhdmVfY2FjaGUgKGNvbnN0IGNoYXIgKmNhY2hlX25hbWUpCisgICAgICAgc3RyX29mZnNldCArPSBsZW47CisgICAgICAgLyogVGhlbiB0aGUgcGF0aC4gICovCisgICAgICAgaWYgKG9wdF9mb3JtYXQgIT0gMiAmJiBlbnRyeS0+aHdjYXAgPT0gMCkKKy0JZmlsZV9lbnRyaWVzLT5saWJzW2lkeF9vbGRdLnZhbHVlID0gc3RyX29mZnNldCArIHBhZDsKKysJZmlsZV9lbnRyaWVzLT5saWJzW2lkeF9vbGRdLnZhbHVlID0gd3JpdGUzMihzdHJfb2Zmc2V0ICsgcGFkLCBiZSk7CisgICAgICAgaWYgKG9wdF9mb3JtYXQgIT0gMCkKKy0JZmlsZV9lbnRyaWVzX25ldy0+bGlic1tpZHhfbmV3XS52YWx1ZSA9IHN0cl9vZmZzZXQ7CisrCWZpbGVfZW50cmllc19uZXctPmxpYnNbaWR4X25ld10udmFsdWUgPSB3cml0ZTMyKHN0cl9vZmZzZXQsIGJlKTsKKyAgICAgICBsZW4gPSBzdHJsZW4gKGVudHJ5LT5wYXRoKSArIDE7CisgICAgICAgc3RyID0gbWVtcGNweSAoc3RyLCBlbnRyeS0+cGF0aCwgbGVuKTsKKyAgICAgICBzdHJfb2Zmc2V0ICs9IGxlbjsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9lbmRpYW4tbmVzc19oYW5kbGluZ19maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZW5kaWFuLW5lc3NfaGFuZGxpbmdfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZWNmZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZW5kaWFuLW5lc3NfaGFuZGxpbmdfZml4LnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0ZpeCBwcm9ibGVtIGR1cmluZyBwYXJzaW5nIG9mIEVMRiBoZWFkZXJzIGZvciA2NGJpdCBvbiBiaWctZW5kaWFuLgorU29tZSBoZWFkZXIgZmllbGRzIHdlcmUgcmVhZCB3aXRoIHdyb25nIHNpemUuCisKKzIwMTQvMTAvMjQKK1BhciBPbHNzb24gPFBhci5PbHNzb25Ad2luZHJpdmVyLmNvbT4KK1NoYW4gSGFpIDxzaGFuLmhhaUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvcmVhZGVsZmxpYi5jIGIvcmVhZGVsZmxpYi5jCitpbmRleCAzZjViMjViLi4wYmYwZGUzIDEwMDY0NAorLS0tIGEvcmVhZGVsZmxpYi5jCisrKysgYi9yZWFkZWxmbGliLmMKK0BAIC0yNjEsOCArMjYxLDggQEAgcHJvY2Vzc19lbGZfZmlsZTY0IChjb25zdCBjaGFyICpmaWxlX25hbWUsIGNvbnN0IGNoYXIgKmxpYiwgaW50ICpmbGFnLAorICAgaW50IGk7CisgICB1bnNpZ25lZCBpbnQgajsKKyAgIEVsZjY0X0FkZHIgbG9hZGFkZHI7CistICB1bnNpZ25lZCBpbnQgZHluYW1pY19hZGRyOworLSAgc2l6ZV90IGR5bmFtaWNfc2l6ZTsKKysgIEVsZjY0X0FkZHIgZHluYW1pY19hZGRyOworKyAgRWxmNjRfWHdvcmQgZHluYW1pY19zaXplOworICAgY2hhciAqcHJvZ3JhbV9pbnRlcnByZXRlcjsKKyAKKyAgIEVsZjY0X0VoZHIgKmVsZl9oZWFkZXI7CitAQCAtMzExLDcgKzMxMSw3IEBAIHByb2Nlc3NfZWxmX2ZpbGU2NCAoY29uc3QgY2hhciAqZmlsZV9uYW1lLCBjb25zdCBjaGFyICpsaWIsIGludCAqZmxhZywKKyAJICAgIGVycm9yICgwLCAwLCBfKCJtb3JlIHRoYW4gb25lIGR5bmFtaWMgc2VnbWVudFxuIikpOworIAorIAkgIGR5bmFtaWNfYWRkciA9IHJlYWQ2NChzZWdtZW50LT5wX29mZnNldCwgYmUpOworLQkgIGR5bmFtaWNfc2l6ZSA9IHJlYWQzMihzZWdtZW50LT5wX2ZpbGVzeiwgYmUpOworKwkgIGR5bmFtaWNfc2l6ZSA9IHJlYWQ2NChzZWdtZW50LT5wX2ZpbGVzeiwgYmUpOworIAkgIGJyZWFrOworIAorIAljYXNlIFBUX0lOVEVSUDoKK0BAIC0zMjksMTEgKzMyOSwxMSBAQCBwcm9jZXNzX2VsZl9maWxlNjQgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgY29uc3QgY2hhciAqbGliLCBpbnQgKmZsYWcsCisgCSAgYnJlYWs7CisgCisgCWNhc2UgUFRfTk9URToKKy0JICBpZiAoISpvc3ZlcnNpb24gJiYgcmVhZDMyKHNlZ21lbnQtPnBfZmlsZXN6LCBiZSkgPj0gMzIgJiYgcmVhZDMyKHNlZ21lbnQtPnBfYWxpZ24sIGJlKSA+PSA0KQorKwkgIGlmICghKm9zdmVyc2lvbiAmJiByZWFkNjQoc2VnbWVudC0+cF9maWxlc3osIGJlKSA+PSAzMiAmJiByZWFkNjQoc2VnbWVudC0+cF9hbGlnbiwgYmUpID49IDQpCisgCSAgICB7CisgCSAgICAgIEVsZjY0X1dvcmQgKmFiaV9ub3RlID0gKEVsZjY0X1dvcmQgKikgKGZpbGVfY29udGVudHMKKyAJCQkJCQkgICAgICsgcmVhZDY0KHNlZ21lbnQtPnBfb2Zmc2V0LCBiZSkpOworLQkgICAgICBFbGY2NF9BZGRyIHNpemUgPSByZWFkMzIoc2VnbWVudC0+cF9maWxlc3osIGJlKTsKKysJICAgICAgRWxmNjRfWHdvcmQgc2l6ZSA9IHJlYWQ2NChzZWdtZW50LT5wX2ZpbGVzeiwgYmUpOworIAorIAkgICAgICB3aGlsZSAocmVhZDMyKGFiaV9ub3RlIFswXSwgYmUpICE9IDQgfHwgcmVhZDMyKGFiaV9ub3RlIFsxXSwgYmUpICE9IDE2CisgCQkgICAgIHx8IHJlYWQzMihhYmlfbm90ZSBbMl0sIGJlKSAhPSAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZW5kaWFuZXNzLWhlYWRlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9lbmRpYW5lc3MtaGVhZGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOGIyYzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZW5kaWFuZXNzLWhlYWRlci5wYXRjaApAQCAtMCwwICsxLDExMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtmaXggcG9reSBwYXRjaF0KKworVGhpcyBwYXRjaCBmaXhlcyBidWlsZCBpc3N1ZXMgd2l0aCBhIHByZXZpb3VzIGVuZGlhbi1uZXNzX2hhbmRsaW5nLnBhdGNoIG9uCitkaXN0cm9zIHRoYXQgZG9uJ3QgaGF2ZSBtYWNyb3MgcmVmZXJlbmNlZAorCis3LzIwLzIwMTEKK01hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+CisKK2RpZmYgLXB1ck4gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL2VuZGlhbl9leHRyYS5oIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZW5kaWFuX2V4dHJhLmgKKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvZW5kaWFuX2V4dHJhLmgJMTk2OS0xMi0zMSAxODowMDowMC4wMDAwMDAwMDAgLTA2MDAKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2VuZGlhbl9leHRyYS5oCTIwMTEtMDctMTkgMTg6MDk6MTQuMzIzMDQ4NDE3IC0wNTAwCitAQCAtMCwwICsxLDY0IEBACisrLyogQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk2LCAxOTk3LCAyMDAwLCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8ZW5kaWFuLmg+CisrCisrI2lmbmRlZglfRU5ESUFOX0VYVFJBX0gKKysjZGVmaW5lCV9FTkRJQU5fRVhUUkFfSAkxCisrCisrLyogRG9uJ3QgcmVkZWZpbmUgdGhlc2UgbWFjcm9zIGlmIHRoZXkgYWxyZWFkeSBleGlzdCAqLworKyNpZm5kZWYgaHRvYmUxNgorKyNpZmRlZiBfX1VTRV9CU0QKKysvKiBDb252ZXJzaW9uIGludGVyZmFjZXMuICAqLworKyMgaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKysKKysjIGlmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKysjICBkZWZpbmUgaHRvYmUxNih4KSBfX2Jzd2FwXzE2ICh4KQorKyMgIGRlZmluZSBodG9sZTE2KHgpICh4KQorKyMgIGRlZmluZSBiZTE2dG9oKHgpIF9fYnN3YXBfMTYgKHgpCisrIyAgZGVmaW5lIGxlMTZ0b2goeCkgKHgpCisrCisrIyAgZGVmaW5lIGh0b2JlMzIoeCkgX19ic3dhcF8zMiAoeCkKKysjICBkZWZpbmUgaHRvbGUzMih4KSAoeCkKKysjICBkZWZpbmUgYmUzMnRvaCh4KSBfX2Jzd2FwXzMyICh4KQorKyMgIGRlZmluZSBsZTMydG9oKHgpICh4KQorKworKyMgIGRlZmluZSBodG9iZTY0KHgpIF9fYnN3YXBfNjQgKHgpCisrIyAgZGVmaW5lIGh0b2xlNjQoeCkgKHgpCisrIyAgZGVmaW5lIGJlNjR0b2goeCkgX19ic3dhcF82NCAoeCkKKysjICBkZWZpbmUgbGU2NHRvaCh4KSAoeCkKKysjIGVsc2UKKysjICBkZWZpbmUgaHRvYmUxNih4KSAoeCkKKysjICBkZWZpbmUgaHRvbGUxNih4KSBfX2Jzd2FwXzE2ICh4KQorKyMgIGRlZmluZSBiZTE2dG9oKHgpICh4KQorKyMgIGRlZmluZSBsZTE2dG9oKHgpIF9fYnN3YXBfMTYgKHgpCisrCisrIyAgZGVmaW5lIGh0b2JlMzIoeCkgKHgpCisrIyAgZGVmaW5lIGh0b2xlMzIoeCkgX19ic3dhcF8zMiAoeCkKKysjICBkZWZpbmUgYmUzMnRvaCh4KSAoeCkKKysjICBkZWZpbmUgbGUzMnRvaCh4KSBfX2Jzd2FwXzMyICh4KQorKworKyMgIGRlZmluZSBodG9iZTY0KHgpICh4KQorKyMgIGRlZmluZSBodG9sZTY0KHgpIF9fYnN3YXBfNjQgKHgpCisrIyAgZGVmaW5lIGJlNjR0b2goeCkgKHgpCisrIyAgZGVmaW5lIGxlNjR0b2goeCkgX19ic3dhcF82NCAoeCkKKysjIGVuZGlmCisrI2VuZGlmCisrI2VuZGlmCisrCisrI2VuZGlmCS8qIGVuZGlhbl9leHRyYS5oICovCitkaWZmIC1wdXJOIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9jYWNoZS5jIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvY2FjaGUuYworLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9jYWNoZS5jCTIwMTEtMDctMTkgMTg6MjE6MjguMzQ3MDQxMzAxIC0wNTAwCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9jYWNoZS5jCTIwMTEtMDctMTkgMTg6MjI6NTQuMTE4MDQ4MDY0IC0wNTAwCitAQCAtMzksNiArMzksOCBAQAorICMgZGVmaW5lIE5fKG1zZ2lkKSAgbXNnaWQKKyAjZGVmaW5lIF8obXNnKSBtc2cKKyAKKysjaW5jbHVkZSAiZW5kaWFuX2V4dHJhLmgiCisrCisgZXh0ZXJuIGludCBiZTsKKyAKKyBzdGF0aWMgdWludDE2X3Qgd3JpdGUxNih1aW50MTZfdCB4LCBpbnQgYmUpCitkaWZmIC1wdXJOIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9yZWFkZWxmbGliLmMgbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkZWxmbGliLmMKKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvcmVhZGVsZmxpYi5jCTIwMTEtMDctMTkgMTg6MjE6MjguMzQ2MDQxNTkzIC0wNTAwCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkZWxmbGliLmMJMjAxMS0wNy0xOSAxODoyMzowNS4zMjQwNTk4NzUgLTA1MDAKK0BAIC0yNSw2ICsyNSw5IEBACisgCisgLyogY2hlY2tfcHRyIGNoZWNrcyB0aGF0IGEgcG9pbnRlciBpcyBpbiB0aGUgbW1hcGVkIGZpbGUgYW5kIGRvZXNuJ3QKKyAgICBwb2ludCBvdXRzaWRlIGl0LiAgKi8KKysKKysjaW5jbHVkZSAiZW5kaWFuX2V4dHJhLmgiCisrCisgI3VuZGVmIGNoZWNrX3B0cgorICNkZWZpbmUgY2hlY2tfcHRyKHB0cikJCQkJCQlcCisgZG8JCQkJCQkJCVwKK2RpZmYgLXB1ck4gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL3JlYWRsaWIuYyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRsaWIuYworLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9yZWFkbGliLmMJMjAxMS0wNy0xOSAxODoyMToyOC4zNDYwNDE1OTMgLTA1MDAKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRsaWIuYwkyMDExLTA3LTE5IDE4OjIzOjIzLjg3NzA0NjIxMCAtMDUwMAorQEAgLTQwLDYgKzQwLDggQEAKKyAKKyAjaW5jbHVkZSAibGRjb25maWcuaCIKKyAKKysjaW5jbHVkZSAiZW5kaWFuX2V4dHJhLmgiCisrCisgI2RlZmluZSBfKG1zZykgbXNnCisgCisgI2RlZmluZSBFbGYzMl9DTEFTUyBFTEZDTEFTUzMyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZmxhZ19maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZmxhZ19maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU5YWFiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9mbGFnX2ZpeC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitUaGUgbmF0aXZlIHZlcnNpb24gb2YgbGRjb25maWcgd2FzIHVzaW5nIG5hdGl2ZSBkZWZpbml0aW9uIG9mIExEX1NPIChpLmUuIAorbGQtbGludXgteDg2LTY0LnNvLjIgKSB3aGljaCBpcyBub3QgY29ycmVjdCBmb3IgZG9pbmcgdGhlIGNyb3NzIGxkY29uZmlnLgorVGhpcyB3YXMgY2F1c2luZyBsaWJjLnNvIG9uIHRoZSB0YXJnZXQgbWFya2VkIGFzIEVMRiBsaWIgcmF0aGVyIHRoYW4gCitGTEFHX0VMRl9MSUJDNiBpbiB0aGUgbGQuc28uY2FjaGUuCisKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMDQvNAorCitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkbGliLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvcmVhZGxpYi5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkbGliLmMKK0BAIC01MSw2ICs1MSwxMCBAQCBzdHJ1Y3Qga25vd25fbmFtZXMKKyAgIGludCBmbGFnOworIH07CisgCisrLyogZG9uJ3QgdXNlIGhvc3QncyBkZWZpbml0aW9uIG9mIExEX1NPICovCisrI3VuZGVmIExEX1NPIAorKyNkZWZpbmUgTERfU08gImxkLnNvLjEiCisrCisgc3RhdGljIHN0cnVjdCBrbm93bl9uYW1lcyBpbnRlcnByZXRlcnNbXSA9CisgeworICAgeyAiL2xpYi8iIExEX1NPLCBGTEFHX0VMRl9MSUJDNiB9LApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnLWRlZmF1bHQtdG8tYWxsLW11bHRpbGliLWRpcnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWctZGVmYXVsdC10by1hbGwtbXVsdGlsaWItZGlycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWQ0ZjZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnLWRlZmF1bHQtdG8tYWxsLW11bHRpbGliLWRpcnMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworbWFrZSBsZGNvbmZpZyBkZWZhdWx0IHRvIGJvdGggL2xpYisvdXNyL2xpYiwgL2xpYjMyKy91c3IvbGliMzIgYW5kCisvbGliNjQrL3Vzci9saWI2NCBvbiBiaS1BQkkgYXJjaGl0ZWN0dXJlcy4KKworLS0tCisgbGRjb25maWcuYyB8ICAgMTAgKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspCisKK2RpZmYgLXVycE4gYS9sZGNvbmZpZy5jIGIvbGRjb25maWcuYworLS0tIGEvbGRjb25maWcuYworKysrIGIvbGRjb25maWcuYworQEAgLTUyLDcgKzUyLDExIEBACisgCisgI2RlZmluZSBTWVNDT05GRElSICIvZXRjIgorICNkZWZpbmUgTElCRElSICIvdXNyL2xpYiIKKysjZGVmaW5lIExJQkRJUjMyICIvdXNyL2xpYjMyIgorKyNkZWZpbmUgTElCRElSNjQgIi91c3IvbGliNjQiCisgI2RlZmluZSBTTElCRElSICIvbGliIgorKyNkZWZpbmUgU0xJQkRJUjMyICIvbGliMzIiCisrI2RlZmluZSBTTElCRElSNjQgIi9saWI2NCIKKyAjIGRlZmluZSBOXyhtc2dpZCkgIG1zZ2lkCisgI2RlZmluZSBfKG1zZykgbXNnCisgCitAQCAtMTM3Myw2ICsxMzc3LDEyIEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgICAgICBhZGRfc3lzdGVtX2RpciAoU0xJQkRJUik7CisgICAgICAgaWYgKHN0cmNtcCAoU0xJQkRJUiwgTElCRElSKSkKKyAJYWRkX3N5c3RlbV9kaXIgKExJQkRJUik7CisrICAgICAgYWRkX3N5c3RlbV9kaXIgKFNMSUJESVIzMik7CisrICAgICAgaWYgKHN0cmNtcCAoU0xJQkRJUjMyLCBMSUJESVIzMikpCisrCWFkZF9zeXN0ZW1fZGlyIChMSUJESVIzMik7CisrICAgICAgYWRkX3N5c3RlbV9kaXIgKFNMSUJESVI2NCk7CisrICAgICAgaWYgKHN0cmNtcCAoU0xJQkRJUjY0LCBMSUJESVI2NCkpCisrCWFkZF9zeXN0ZW1fZGlyIChMSUJESVI2NCk7CisgICAgIH0KKyAKKyAgIGNvbnN0IGNoYXIgKmF1eF9jYWNoZV9maWxlID0gX1BBVEhfTERDT05GSUdfQVVYX0NBQ0hFOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEudGFyLmJ6MiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xLnRhci5iejIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMxZTc5OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xLnRhci5iejIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyOTg2ZTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWcucGF0Y2gKQEAgLTAsMCArMSw0NzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK2VuYWJsZSBzdGFuZGFsb25lIGJ1aWxkaW5nIG9mIGxkY29uZmlnCisKKy0tLQorIGNhY2hlLmMgICAgICAgIHwgICAxMSArLQorIGNocm9vdF9jYW5vbi5jIHwgICAgNyArCisgZGwtY2FjaGUuYyAgICAgfCAgMjM1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGRsLWNhY2hlLmggICAgIHwgICAgMyAKKyBsZGNvbmZpZy5jICAgICB8ICAgMjcgKysrKy0tCisgcmVhZGxpYi5jICAgICAgfCAgICA3ICsKKyB4c3RyZHVwLmMgICAgICB8ICAgMTEgLS0KKyA3IGZpbGVzIGNoYW5nZWQsIDQ1IGluc2VydGlvbnMoKyksIDI1NiBkZWxldGlvbnMoLSkKKworSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvY2FjaGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9jYWNoZS5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9jYWNoZS5jCitAQCAtMTYsNiArMTYsOSBAQAorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisgCisrI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisrI2RlZmluZSBfR05VX1NPVVJDRQorKworICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxlcnJvci5oPgorICNpbmNsdWRlIDxkaXJlbnQuaD4KK0BAIC0zMSw4ICszNCwxMCBAQAorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAKKy0jaW5jbHVkZSA8bGRjb25maWcuaD4KKy0jaW5jbHVkZSA8ZGwtY2FjaGUuaD4KKysjaW5jbHVkZSAibGRjb25maWcuaCIKKysjaW5jbHVkZSAiZGwtY2FjaGUuaCIKKysjIGRlZmluZSBOXyhtc2dpZCkgIG1zZ2lkCisrI2RlZmluZSBfKG1zZykgbXNnCisgCisgc3RydWN0IGNhY2hlX2VudHJ5CisgeworSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvY2hyb290X2Nhbm9uLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvY2hyb290X2Nhbm9uLmMKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2Nocm9vdF9jYW5vbi5jCitAQCAtMTcsNiArMTcsOSBAQAorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisgCisrI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisrI2RlZmluZSBfR05VX1NPVVJDRQorKworICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorQEAgLTI3LDcgKzMwLDkgQEAKKyAjaW5jbHVkZSA8c3RkZGVmLmg+CisgI2luY2x1ZGUgPHN0ZGludC5oPgorIAorLSNpbmNsdWRlIDxsZGNvbmZpZy5oPgorKyNpbmNsdWRlICJsZGNvbmZpZy5oIgorKworKyNkZWZpbmUgX19zZXRfZXJybm8oVmFsKSBlcnJubyA9IChWYWwpCisgCisgI2lmbmRlZiBQQVRIX01BWAorICNkZWZpbmUgUEFUSF9NQVggMTAyNAorSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZGwtY2FjaGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9kbC1jYWNoZS5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9kbC1jYWNoZS5jCitAQCAtMjAsMTIgKzIwLDEyIEBACisgCisgI2luY2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKy0jaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysvLyNpbmNsdWRlICJsZHNvZGVmcy5oIgorICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorICNpbmNsdWRlIDxkbC1jYWNoZS5oPgorICNpbmNsdWRlIDxkbC1wcm9jaW5mby5oPgorIAorLSNpbmNsdWRlIDxzdGRpby1jb21tb24vX2l0b2EuaD4KKysvLyNpbmNsdWRlICJfaXRvYS5oIgorIAorICNpZm5kZWYgX0RMX1BMQVRGT1JNU19DT1VOVAorICMgZGVmaW5lIF9ETF9QTEFURk9STVNfQ09VTlQgMAorQEAgLTM5LDEwMyArMzksNyBAQCBzdGF0aWMgc2l6ZV90IGNhY2hlc2l6ZTsKKyAvKiAxIGlmIGNhY2hlX2RhdGEgKyBQVFIgcG9pbnRzIGludG8gdGhlIGNhY2hlLiAgKi8KKyAjZGVmaW5lIF9kbF9jYWNoZV92ZXJpZnlfcHRyKHB0cikgKHB0ciA8IGNhY2hlX2RhdGFfc2l6ZSkKKyAKKy0jZGVmaW5lIFNFQVJDSF9DQUNIRShjYWNoZSkgXAorLS8qIFdlIHVzZSBiaW5hcnkgc2VhcmNoIHNpbmNlIHRoZSB0YWJsZSBpcyBzb3J0ZWQgaW4gdGhlIGNhY2hlIGZpbGUuCSAgICAgIFwKKy0gICBUaGUgZmlyc3QgbWF0Y2hpbmcgZW50cnkgaW4gdGhlIHRhYmxlIGlzIHJldHVybmVkLgkJCSAgICAgIFwKKy0gICBJdCBpcyBpbXBvcnRhbnQgdG8gdXNlIHRoZSBzYW1lIGFsZ29yaXRobSBhcyB1c2VkIHdoaWxlIGdlbmVyYXRpbmcJICAgICAgXAorLSAgIHRoZSBjYWNoZSBmaWxlLiAgKi8JCQkJCQkJICAgICAgXAorLWRvCQkJCQkJCQkJICAgICAgXAorLSAgewkJCQkJCQkJCSAgICAgIFwKKy0gICAgbGVmdCA9IDA7CQkJCQkJCQkgICAgICBcCistICAgIHJpZ2h0ID0gY2FjaGUtPm5saWJzIC0gMTsJCQkJCQkgICAgICBcCistCQkJCQkJCQkJICAgICAgXAorLSAgICB3aGlsZSAobGVmdCA8PSByaWdodCkJCQkJCQkgICAgICBcCistICAgICAgewkJCQkJCQkJCSAgICAgIFwKKy0JX190eXBlb2ZfXyAoY2FjaGUtPmxpYnNbMF0ua2V5KSBrZXk7CQkJCSAgICAgIFwKKy0JCQkJCQkJCQkgICAgICBcCistCW1pZGRsZSA9IChsZWZ0ICsgcmlnaHQpIC8gMjsJCQkJCSAgICAgIFwKKy0JCQkJCQkJCQkgICAgICBcCistCWtleSA9IGNhY2hlLT5saWJzW21pZGRsZV0ua2V5OwkJCQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0JLyogTWFrZSBzdXJlIHN0cmluZyB0YWJsZSBpbmRpY2VzIGFyZSBub3QgYm9ndXMgYmVmb3JlIHVzaW5nCSAgICAgIFwKKy0JICAgdGhlbS4gICovCQkJCQkJCSAgICAgIFwKKy0JaWYgKCEgX2RsX2NhY2hlX3ZlcmlmeV9wdHIgKGtleSkpCQkJCSAgICAgIFwKKy0JICB7CQkJCQkJCQkgICAgICBcCistCSAgICBjbXByZXMgPSAxOwkJCQkJCQkgICAgICBcCistCSAgICBicmVhazsJCQkJCQkJICAgICAgXAorLQkgIH0JCQkJCQkJCSAgICAgIFwKKy0JCQkJCQkJCQkgICAgICBcCistCS8qIEFjdHVhbGx5IGNvbXBhcmUgdGhlIGVudHJ5IHdpdGggdGhlIGtleS4gICovCQkJICAgICAgXAorLQljbXByZXMgPSBfZGxfY2FjaGVfbGliY21wIChuYW1lLCBjYWNoZV9kYXRhICsga2V5KTsJCSAgICAgIFwKKy0JaWYgKF9fYnVpbHRpbl9leHBlY3QgKGNtcHJlcyA9PSAwLCAwKSkJCQkJICAgICAgXAorLQkgIHsJCQkJCQkJCSAgICAgIFwKKy0JICAgIC8qIEZvdW5kIGl0LiAgTEVGVCBub3cgbWFya3MgdGhlIGxhc3QgZW50cnkgZm9yIHdoaWNoIHdlCSAgICAgIFwKKy0JICAgICAgIGtub3cgdGhlIG5hbWUgaXMgY29ycmVjdC4gICovCQkJCSAgICAgIFwKKy0JICAgIGxlZnQgPSBtaWRkbGU7CQkJCQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0JICAgIC8qIFRoZXJlIG1pZ2h0IGJlIGVudHJpZXMgd2l0aCB0aGlzIG5hbWUgYmVmb3JlIHRoZSBvbmUgd2UJICAgICAgXAorLQkgICAgICAgZm91bmQuICBTbyB3ZSBoYXZlIHRvIGZpbmQgdGhlIGJlZ2lubmluZy4gICovCQkgICAgICBcCistCSAgICB3aGlsZSAobWlkZGxlID4gMCkJCQkJCQkgICAgICBcCistCSAgICAgIHsJCQkJCQkJCSAgICAgIFwKKy0JCV9fdHlwZW9mX18gKGNhY2hlLT5saWJzWzBdLmtleSkga2V5OwkJCSAgICAgIFwKKy0JCQkJCQkJCQkgICAgICBcCistCQlrZXkgPSBjYWNoZS0+bGlic1ttaWRkbGUgLSAxXS5rZXk7CQkJICAgICAgXAorLQkJLyogTWFrZSBzdXJlIHN0cmluZyB0YWJsZSBpbmRpY2VzIGFyZSBub3QgYm9ndXMgYmVmb3JlCSAgICAgIFwKKy0JCSAgIHVzaW5nIHRoZW0uICAqLwkJCQkJICAgICAgXAorLQkJaWYgKCEgX2RsX2NhY2hlX3ZlcmlmeV9wdHIgKGtleSkJCQkgICAgICBcCistCQkgICAgLyogQWN0dWFsbHkgY29tcGFyZSB0aGUgZW50cnkuICAqLwkJCSAgICAgIFwKKy0JCSAgICB8fCBfZGxfY2FjaGVfbGliY21wIChuYW1lLCBjYWNoZV9kYXRhICsga2V5KSAhPSAwKQkgICAgICBcCistCQkgIGJyZWFrOwkJCQkJCSAgICAgIFwKKy0JCS0tbWlkZGxlOwkJCQkJCSAgICAgIFwKKy0JICAgICAgfQkJCQkJCQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0JICAgIGRvCQkJCQkJCQkgICAgICBcCistCSAgICAgIHsJCQkJCQkJCSAgICAgIFwKKy0JCWludCBmbGFnczsJCQkJCQkgICAgICBcCistCQlfX3R5cGVvZl9fIChjYWNoZS0+bGlic1swXSkgKmxpYiA9ICZjYWNoZS0+bGlic1ttaWRkbGVdOyAgICAgIFwKKy0JCQkJCQkJCQkgICAgICBcCistCQkvKiBPbmx5IHBlcmZvcm0gdGhlIG5hbWUgdGVzdCBpZiBuZWNlc3NhcnkuICAqLwkJICAgICAgXAorLQkJaWYgKG1pZGRsZSA+IGxlZnQJCQkJCSAgICAgIFwKKy0JCSAgICAvKiBXZSBoYXZlbid0IHNlZW4gdGhpcyBzdHJpbmcgc28gZmFyLiAgVGVzdCB3aGV0aGVyIHRoZSAgXAorLQkJICAgICAgIGluZGV4IGlzIG9rIGFuZCB3aGV0aGVyIHRoZSBuYW1lIG1hdGNoZXMuICBPdGhlcndpc2UgICBcCistCQkgICAgICAgd2UgYXJlIGRvbmUuICAqLwkJCQkJICAgICAgXAorLQkJICAgICYmICghIF9kbF9jYWNoZV92ZXJpZnlfcHRyIChsaWItPmtleSkJCSAgICAgIFwKKy0JCQl8fCAoX2RsX2NhY2hlX2xpYmNtcCAobmFtZSwgY2FjaGVfZGF0YSArIGxpYi0+a2V5KSAgICBcCistCQkJICAgICE9IDApKSkJCQkJCSAgICAgIFwKKy0JCSAgYnJlYWs7CQkJCQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0JCWZsYWdzID0gbGliLT5mbGFnczsJCQkJCSAgICAgIFwKKy0JCWlmIChfZGxfY2FjaGVfY2hlY2tfZmxhZ3MgKGZsYWdzKQkJCSAgICAgIFwKKy0JCSAgICAmJiBfZGxfY2FjaGVfdmVyaWZ5X3B0ciAobGliLT52YWx1ZSkpCQkgICAgICBcCistCQkgIHsJCQkJCQkJICAgICAgXAorLQkJICAgIGlmIChiZXN0ID09IE5VTEwgfHwgZmxhZ3MgPT0gR0xSTyhkbF9jb3JyZWN0X2NhY2hlX2lkKSkgICBcCistCQkgICAgICB7CQkJCQkJCSAgICAgIFwKKy0JCQlIV0NBUF9DSEVDSzsJCQkJCSAgICAgIFwKKy0JCQliZXN0ID0gY2FjaGVfZGF0YSArIGxpYi0+dmFsdWU7CQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0JCQlpZiAoZmxhZ3MgPT0gR0xSTyhkbF9jb3JyZWN0X2NhY2hlX2lkKSkJCSAgICAgIFwKKy0JCQkgIC8qIFdlJ3ZlIGZvdW5kIGFuIGV4YWN0IG1hdGNoIGZvciB0aGUgc2hhcmVkCSAgICAgIFwKKy0JCQkgICAgIG9iamVjdCBhbmQgbm8gZ2VuZXJhbCBgRUxGJyByZWxlYXNlLiAgU3RvcAkgICAgICBcCistCQkJICAgICBzZWFyY2hpbmcuICAqLwkJCQkgICAgICBcCistCQkJICBicmVhazsJCQkJCSAgICAgIFwKKy0JCSAgICAgIH0JCQkJCQkJICAgICAgXAorLQkJICB9CQkJCQkJCSAgICAgIFwKKy0JICAgICAgfQkJCQkJCQkJICAgICAgXAorLQkgICAgd2hpbGUgKCsrbWlkZGxlIDw9IHJpZ2h0KTsJCQkJCSAgICAgIFwKKy0JICAgIGJyZWFrOwkJCQkJCQkgICAgICBcCistCX0JCQkJCQkJCSAgICAgIFwKKy0JCQkJCQkJCQkgICAgICBcCistCWlmIChjbXByZXMgPCAwKQkJCQkJCQkgICAgICBcCistCSAgbGVmdCA9IG1pZGRsZSArIDE7CQkJCQkJICAgICAgXAorLQllbHNlCQkJCQkJCQkgICAgICBcCistCSAgcmlnaHQgPSBtaWRkbGUgLSAxOwkJCQkJCSAgICAgIFwKKy0gICAgICB9CQkJCQkJCQkJICAgICAgXAorLSAgfQkJCQkJCQkJCSAgICAgIFwKKy13aGlsZSAoMCkKKy0KKy0KKyBpbnQKKy1pbnRlcm5hbF9mdW5jdGlvbgorIF9kbF9jYWNoZV9saWJjbXAgKGNvbnN0IGNoYXIgKnAxLCBjb25zdCBjaGFyICpwMikKKyB7CisgICB3aGlsZSAoKnAxICE9ICdcMCcpCitAQCAtMTcyLDEzOSArNzYsMyBAQCBfZGxfY2FjaGVfbGliY21wIChjb25zdCBjaGFyICpwMSwgY29uc3QgCisgICAgIH0KKyAgIHJldHVybiAqcDEgLSAqcDI7CisgfQorLQorLQorLS8qIExvb2sgdXAgTkFNRSBpbiBsZC5zby5jYWNoZSBhbmQgcmV0dXJuIHRoZSBmaWxlIG5hbWUgc3RvcmVkIHRoZXJlLAorLSAgIG9yIG51bGwgaWYgbm9uZSBpcyBmb3VuZC4gICovCistCistY29uc3QgY2hhciAqCistaW50ZXJuYWxfZnVuY3Rpb24KKy1fZGxfbG9hZF9jYWNoZV9sb29rdXAgKGNvbnN0IGNoYXIgKm5hbWUpCisteworLSAgaW50IGxlZnQsIHJpZ2h0LCBtaWRkbGU7CistICBpbnQgY21wcmVzOworLSAgY29uc3QgY2hhciAqY2FjaGVfZGF0YTsKKy0gIHVpbnQzMl90IGNhY2hlX2RhdGFfc2l6ZTsKKy0gIGNvbnN0IGNoYXIgKmJlc3Q7CistCistICAvKiBQcmludCBhIG1lc3NhZ2UgaWYgdGhlIGxvYWRpbmcgb2YgbGlicyBpcyB0cmFjZWQuICAqLworLSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0xJQlMsIDApKQorLSAgICBfZGxfZGVidWdfcHJpbnRmICgiIHNlYXJjaCBjYWNoZT0lc1xuIiwgTERfU09fQ0FDSEUpOworLQorLSAgaWYgKGNhY2hlID09IE5VTEwpCistICAgIHsKKy0gICAgICAvKiBSZWFkIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4gICovCistICAgICAgdm9pZCAqZmlsZSA9IF9kbF9zeXNkZXBfcmVhZF93aG9sZV9maWxlIChMRF9TT19DQUNIRSwgJmNhY2hlc2l6ZSwKKy0JCQkJCSAgICAgICBQUk9UX1JFQUQpOworLQorLSAgICAgIC8qIFdlIGNhbiBoYW5kbGUgdGhyZWUgZGlmZmVyZW50IGNhY2hlIGZpbGUgZm9ybWF0cyBoZXJlOgorLQkgLSB0aGUgb2xkIGxpYmM1L2dsaWJjMi4wLzIuMSBmb3JtYXQKKy0JIC0gdGhlIG9sZCBmb3JtYXQgd2l0aCB0aGUgbmV3IGZvcm1hdCBpbiBpdAorLQkgLSBvbmx5IHRoZSBuZXcgZm9ybWF0CistCSBUaGUgZm9sbG93aW5nIGNoZWNrcyBpZiB0aGUgY2FjaGUgY29udGFpbnMgYW55IG9mIHRoZXNlIGZvcm1hdHMuICAqLworLSAgICAgIGlmIChmaWxlICE9IE1BUF9GQUlMRUQgJiYgY2FjaGVzaXplID4gc2l6ZW9mICpjYWNoZQorLQkgICYmIG1lbWNtcCAoZmlsZSwgQ0FDSEVNQUdJQywgc2l6ZW9mIENBQ0hFTUFHSUMgLSAxKSA9PSAwKQorLQl7CistCSAgc2l6ZV90IG9mZnNldDsKKy0JICAvKiBMb29rcyBvay4gICovCistCSAgY2FjaGUgPSBmaWxlOworLQorLQkgIC8qIENoZWNrIGZvciBuZXcgdmVyc2lvbi4gICovCistCSAgb2Zmc2V0ID0gQUxJR05fQ0FDSEUgKHNpemVvZiAoc3RydWN0IGNhY2hlX2ZpbGUpCistCQkJCSsgY2FjaGUtPm5saWJzICogc2l6ZW9mIChzdHJ1Y3QgZmlsZV9lbnRyeSkpOworLQorLQkgIGNhY2hlX25ldyA9IChzdHJ1Y3QgY2FjaGVfZmlsZV9uZXcgKikgKCh2b2lkICopIGNhY2hlICsgb2Zmc2V0KTsKKy0JICBpZiAoY2FjaGVzaXplIDwgKG9mZnNldCArIHNpemVvZiAoc3RydWN0IGNhY2hlX2ZpbGVfbmV3KSkKKy0JICAgICAgfHwgbWVtY21wIChjYWNoZV9uZXctPm1hZ2ljLCBDQUNIRU1BR0lDX1ZFUlNJT05fTkVXLAorLQkJCSBzaXplb2YgQ0FDSEVNQUdJQ19WRVJTSU9OX05FVyAtIDEpICE9IDApCistCSAgICBjYWNoZV9uZXcgPSAodm9pZCAqKSAtMTsKKy0JfQorLSAgICAgIGVsc2UgaWYgKGZpbGUgIT0gTUFQX0ZBSUxFRCAmJiBjYWNoZXNpemUgPiBzaXplb2YgKmNhY2hlX25ldworLQkgICAgICAgJiYgbWVtY21wIChmaWxlLCBDQUNIRU1BR0lDX1ZFUlNJT05fTkVXLAorLQkJCSAgc2l6ZW9mIENBQ0hFTUFHSUNfVkVSU0lPTl9ORVcgLSAxKSA9PSAwKQorLQl7CistCSAgY2FjaGVfbmV3ID0gZmlsZTsKKy0JICBjYWNoZSA9IGZpbGU7CistCX0KKy0gICAgICBlbHNlCistCXsKKy0JICBpZiAoZmlsZSAhPSBNQVBfRkFJTEVEKQorLQkgICAgX19tdW5tYXAgKGZpbGUsIGNhY2hlc2l6ZSk7CistCSAgY2FjaGUgPSAodm9pZCAqKSAtMTsKKy0JfQorLQorLSAgICAgIGFzc2VydCAoY2FjaGUgIT0gTlVMTCk7CistICAgIH0KKy0KKy0gIGlmIChjYWNoZSA9PSAodm9pZCAqKSAtMSkKKy0gICAgLyogUHJldmlvdXNseSBsb29rZWQgZm9yIHRoZSBjYWNoZSBmaWxlIGFuZCBkaWRuJ3QgZmluZCBpdC4gICovCistICAgIHJldHVybiBOVUxMOworLQorLSAgYmVzdCA9IE5VTEw7CistCistICBpZiAoY2FjaGVfbmV3ICE9ICh2b2lkICopIC0xKQorLSAgICB7CistICAgICAgdWludDY0X3QgcGxhdGZvcm07CistCistICAgICAgLyogVGhpcyBpcyB3aGVyZSB0aGUgc3RyaW5ncyBzdGFydC4gICovCistICAgICAgY2FjaGVfZGF0YSA9IChjb25zdCBjaGFyICopIGNhY2hlX25ldzsKKy0KKy0gICAgICAvKiBOb3cgd2UgY2FuIGNvbXB1dGUgaG93IGxhcmdlIHRoZSBzdHJpbmcgdGFibGUgaXMuICAqLworLSAgICAgIGNhY2hlX2RhdGFfc2l6ZSA9IChjb25zdCBjaGFyICopIGNhY2hlICsgY2FjaGVzaXplIC0gY2FjaGVfZGF0YTsKKy0KKy0gICAgICBwbGF0Zm9ybSA9IF9kbF9zdHJpbmdfcGxhdGZvcm0gKEdMUk8oZGxfcGxhdGZvcm0pKTsKKy0gICAgICBpZiAocGxhdGZvcm0gIT0gKHVpbnQ2NF90KSAtMSkKKy0JcGxhdGZvcm0gPSAxVUxMIDw8IHBsYXRmb3JtOworLQorLSNkZWZpbmUgX0RMX0hXQ0FQX1RMU19NQVNLICgxTEwgPDwgNjMpCistICAgICAgdWludDY0X3QgaHdjYXBfZXhjbHVkZSA9IH4oKEdMUk8oZGxfaHdjYXApICYgR0xSTyhkbF9od2NhcF9tYXNrKSkKKy0JCQkJIHwgX0RMX0hXQ0FQX1BMQVRGT1JNIHwgX0RMX0hXQ0FQX1RMU19NQVNLKTsKKy0KKy0gICAgICAvKiBPbmx5IGFjY2VwdCBod2NhcCBpZiBpdCdzIGZvciB0aGUgcmlnaHQgcGxhdGZvcm0uICAqLworLSNkZWZpbmUgSFdDQVBfQ0hFQ0sgXAorLSAgICAgIGlmIChsaWItPmh3Y2FwICYgaHdjYXBfZXhjbHVkZSkJCQkJCSAgICAgIFwKKy0JY29udGludWU7CQkJCQkJCSAgICAgIFwKKy0gICAgICBpZiAoR0xSTyhkbF9vc3ZlcnNpb24pICYmIGxpYi0+b3N2ZXJzaW9uID4gR0xSTyhkbF9vc3ZlcnNpb24pKQkgICAgICBcCistCWNvbnRpbnVlOwkJCQkJCQkgICAgICBcCistICAgICAgaWYgKF9ETF9QTEFURk9STVNfQ09VTlQJCQkJCQkgICAgICBcCistCSAgJiYgKGxpYi0+aHdjYXAgJiBfRExfSFdDQVBfUExBVEZPUk0pICE9IDAJCQkgICAgICBcCistCSAgJiYgKGxpYi0+aHdjYXAgJiBfRExfSFdDQVBfUExBVEZPUk0pICE9IHBsYXRmb3JtKQkJICAgICAgXAorLQljb250aW51ZQorLSAgICAgIFNFQVJDSF9DQUNIRSAoY2FjaGVfbmV3KTsKKy0gICAgfQorLSAgZWxzZQorLSAgICB7CistICAgICAgLyogVGhpcyBpcyB3aGVyZSB0aGUgc3RyaW5ncyBzdGFydC4gICovCistICAgICAgY2FjaGVfZGF0YSA9IChjb25zdCBjaGFyICopICZjYWNoZS0+bGlic1tjYWNoZS0+bmxpYnNdOworLQorLSAgICAgIC8qIE5vdyB3ZSBjYW4gY29tcHV0ZSBob3cgbGFyZ2UgdGhlIHN0cmluZyB0YWJsZSBpcy4gICovCistICAgICAgY2FjaGVfZGF0YV9zaXplID0gKGNvbnN0IGNoYXIgKikgY2FjaGUgKyBjYWNoZXNpemUgLSBjYWNoZV9kYXRhOworLQorLSN1bmRlZiBIV0NBUF9DSEVDSworLSNkZWZpbmUgSFdDQVBfQ0hFQ0sgZG8ge30gd2hpbGUgKDApCistICAgICAgU0VBUkNIX0NBQ0hFIChjYWNoZSk7CistICAgIH0KKy0KKy0gIC8qIFByaW50IG91ciByZXN1bHQgaWYgd2FudGVkLiAgKi8KKy0gIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19MSUJTLCAwKQorLSAgICAgICYmIGJlc3QgIT0gTlVMTCkKKy0gICAgX2RsX2RlYnVnX3ByaW50ZiAoIiAgdHJ5aW5nIGZpbGU9JXNcbiIsIGJlc3QpOworLQorLSAgcmV0dXJuIGJlc3Q7CistfQorLQorLSNpZm5kZWYgTUFQX0NPUFkKKy0vKiBJZiB0aGUgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgTUFQX0NPUFkgd2UgY2Fubm90IGxlYXZlIHRoZSBmaWxlIG9wZW4KKy0gICBhbGwgdGhlIHRpbWUgc2luY2UgdGhpcyB3b3VsZCBjcmVhdGUgcHJvYmxlbXMgd2hlbiB0aGUgZmlsZSBpcyByZXBsYWNlZC4KKy0gICBUaGVyZWZvcmUgd2UgcHJvdmlkZSB0aGlzIGZ1bmN0aW9uIHRvIGNsb3NlIHRoZSBmaWxlIGFuZCBvcGVuIGl0IGFnYWluCistICAgb25jZSBuZWVkZWQuICAqLworLXZvaWQKKy1fZGxfdW5sb2FkX2NhY2hlICh2b2lkKQorLXsKKy0gIGlmIChjYWNoZSAhPSBOVUxMICYmIGNhY2hlICE9IChzdHJ1Y3QgY2FjaGVfZmlsZSAqKSAtMSkKKy0gICAgeworLSAgICAgIF9fbXVubWFwIChjYWNoZSwgY2FjaGVzaXplKTsKKy0gICAgICBjYWNoZSA9IE5VTEw7CistICAgIH0KKy19CistI2VuZGlmCitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS9kbC1jYWNoZS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL2RsLWNhY2hlLmgKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2RsLWNhY2hlLmgKK0BAIC0xMDEsNSArMTAxLDQgQEAgc3RydWN0IGNhY2hlX2ZpbGVfbmV3CisgKCgoYWRkcikgKyBfX2FsaWdub2ZfXyAoc3RydWN0IGNhY2hlX2ZpbGVfbmV3KSAtMSkJXAorICAmICh+KF9fYWxpZ25vZl9fIChzdHJ1Y3QgY2FjaGVfZmlsZV9uZXcpIC0gMSkpKQorIAorLWV4dGVybiBpbnQgX2RsX2NhY2hlX2xpYmNtcCAoY29uc3QgY2hhciAqcDEsIGNvbnN0IGNoYXIgKnAyKQorLSAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisrZXh0ZXJuIGludCBfZGxfY2FjaGVfbGliY21wIChjb25zdCBjaGFyICpwMSwgY29uc3QgY2hhciAqcDIpOworSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWcuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9sZGNvbmZpZy5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZy5jCitAQCAtMTYsNiArMTYsOSBAQAorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisgCisrI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisrI2RlZmluZSBfR05VX1NPVVJDRQorKworICNkZWZpbmUgUFJPQ0lORk9fQ0xBU1Mgc3RhdGljCisgI2luY2x1ZGUgPGFsbG9jYS5oPgorICNpbmNsdWRlIDxhcmdwLmg+CitAQCAtMzksMTAgKzQyLDIwIEBACisgI2luY2x1ZGUgPGdsb2IuaD4KKyAjaW5jbHVkZSA8bGliZ2VuLmg+CisgCistI2luY2x1ZGUgPGxkY29uZmlnLmg+CistI2luY2x1ZGUgPGRsLWNhY2hlLmg+CisrI2luY2x1ZGUgImxkY29uZmlnLmgiCisrI2luY2x1ZGUgImRsLWNhY2hlLmgiCisrCisrI2luY2x1ZGUgImRsLXByb2NpbmZvLmgiCisrCisrI2luY2x1ZGUgImFyZ3AuaCIKKysKKysKKysjZGVmaW5lIFNZU0NPTkZESVIgIi9ldGMiCisrI2RlZmluZSBMSUJESVIgIi91c3IvbGliIgorKyNkZWZpbmUgU0xJQkRJUiAiL2xpYiIKKysjIGRlZmluZSBOXyhtc2dpZCkgIG1zZ2lkCisrI2RlZmluZSBfKG1zZykgbXNnCisgCistI2luY2x1ZGUgPGRsLXByb2NpbmZvLmg+CisgCisgI2lmZGVmIF9ETF9GSVJTVF9QTEFURk9STQorICMgZGVmaW5lIF9ETF9GSVJTVF9FWFRSQSAoX0RMX0ZJUlNUX1BMQVRGT1JNICsgX0RMX1BMQVRGT1JNU19DT1VOVCkKK0BAIC01NSw3ICs2OCw3IEBACisgI2VuZGlmCisgCisgLyogR2V0IGxpYmMgdmVyc2lvbiBudW1iZXIuICAqLworLSNpbmNsdWRlIDx2ZXJzaW9uLmg+CisrI2luY2x1ZGUgInZlcnNpb24uaCIKKyAKKyAjZGVmaW5lIFBBQ0tBR0UgX2xpYmNfaW50bF9kb21haW5uYW1lCisgCitAQCAtMTUyLDggKzE2NSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0aW9uc1sKKyAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCwgMCB9CisgfTsKKyAKKy0jZGVmaW5lIFBST0NJTkZPX0NMQVNTIHN0YXRpYworLSNpbmNsdWRlIDxkbC1wcm9jaW5mby5jPgorKy8vI2RlZmluZSBQUk9DSU5GT19DTEFTUyBzdGF0aWMKKysvLyNpbmNsdWRlIDxkbC1wcm9jaW5mby5jPgorIAorIC8qIFNob3J0IGRlc2NyaXB0aW9uIG9mIHByb2dyYW0uICAqLworIHN0YXRpYyBjb25zdCBjaGFyIGRvY1tdID0gTl8oIkNvbmZpZ3VyZSBEeW5hbWljIExpbmtlciBSdW4gVGltZSBCaW5kaW5ncy4iKTsKK0BAIC0yOTEsNiArMzA0LDcgQEAgcGFyc2Vfb3B0IChpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcgorICAgcmV0dXJuIDA7CisgfQorIAorKyNkZWZpbmUgUkVQT1JUX0JVR1NfVE8gIm1haWxpbmcgbGlzdCA6IHBva3lAeW9jdG9wcm9qZWN0Lm9yZyIKKyAvKiBQcmludCBidWctcmVwb3J0aW5nIGluZm9ybWF0aW9uIGluIHRoZSBoZWxwIG1lc3NhZ2UuICAqLworIHN0YXRpYyBjaGFyICoKKyBtb3JlX2hlbHAgKGludCBrZXksIGNvbnN0IGNoYXIgKnRleHQsIHZvaWQgKmlucHV0KQorQEAgLTMxNSw3ICszMjksNyBAQCBGb3IgYnVnIHJlcG9ydGluZyBpbnN0cnVjdGlvbnMsIHBsZWFzZSBzCisgc3RhdGljIHZvaWQKKyBwcmludF92ZXJzaW9uIChGSUxFICpzdHJlYW0sIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKKyB7CistICBmcHJpbnRmIChzdHJlYW0sICJsZGNvbmZpZyAlcyVzXG4iLCBQS0dWRVJTSU9OLCBWRVJTSU9OKTsKKysgIGZwcmludGYgKHN0cmVhbSwgImxkY29uZmlnIChIYWNrZWQgUG9reSBWZXJzaW9uKVxuIik7CisgICBmcHJpbnRmIChzdHJlYW0sIGdldHRleHQgKCJcCisgQ29weXJpZ2h0IChDKSAlcyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cblwKKyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOT1xuXAorQEAgLTEyMzMsNiArMTI0Nyw3IEBAIHNldF9od2NhcCAodm9pZCkKKyAgICAgaHdjYXBfbWFzayA9IHN0cnRvdWwgKG1hc2ssIE5VTEwsIDApOworIH0KKyAKKytjb25zdCBjaGFyIF9saWJjX2ludGxfZG9tYWlubmFtZVtdID0gImxpYmMiOworIAorIGludAorIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK0luZGV4OiBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRsaWIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9yZWFkbGliLmMKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRsaWIuYworQEAgLTIyLDYgKzIyLDkgQEAKKyAgICBkZXZlbG9wbWVudCB2ZXJzaW9uLiAgQmVzaWRlcyB0aGUgc2ltcGxpZmljYXRpb24sIGl0IGhhcyBhbHNvIGJlZW4KKyAgICBtb2RpZmllZCB0byByZWFkIHNvbWUgb3RoZXIgZmlsZSBmb3JtYXRzLiAgKi8KKyAKKysjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisgI2luY2x1ZGUgPGEub3V0Lmg+CisgI2luY2x1ZGUgPGVsZi5oPgorICNpbmNsdWRlIDxlcnJvci5oPgorQEAgLTM1LDcgKzM4LDkgQEAKKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAjaW5jbHVkZSA8Z251L2xpYi1uYW1lcy5oPgorIAorLSNpbmNsdWRlIDxsZGNvbmZpZy5oPgorKyNpbmNsdWRlICJsZGNvbmZpZy5oIgorKworKyNkZWZpbmUgXyhtc2cpIG1zZworIAorICNkZWZpbmUgRWxmMzJfQ0xBU1MgRUxGQ0xBU1MzMgorICNkZWZpbmUgRWxmNjRfQ0xBU1MgRUxGQ0xBU1M2NAorSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEveHN0cmR1cC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL3hzdHJkdXAuYworKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEveHN0cmR1cC5jCitAQCAtMTYsMTUgKzE2LDEwIEBACisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKyAKKy0jaWZkZWYgSEFWRV9DT05GSUdfSAorLSMgaW5jbHVkZSA8Y29uZmlnLmg+CistI2VuZGlmCisrI2RlZmluZSBfR05VX1NPVVJDRQorKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKy0jaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBIQVZFX1NUUklOR19IIHx8IF9MSUJDCistIyBpbmNsdWRlIDxzdHJpbmcuaD4KKy0jZWxzZQorLSMgaW5jbHVkZSA8c3RyaW5ncy5oPgorLSNlbmRpZgorIHZvaWQgKnhtYWxsb2MgKHNpemVfdCBuKSBfX1RIUk9XOworIGNoYXIgKnhzdHJkdXAgKGNoYXIgKnN0cmluZykgX19USFJPVzsKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZ19hdXgtY2FjaGVfcGF0aF9maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWdfYXV4LWNhY2hlX3BhdGhfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YmM0MTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWdfYXV4LWNhY2hlX3BhdGhfZml4LnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitDb21pbmcgZnJvbSB0aGlzIGJ1ZzogaHR0cDovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0xMTE0OQorCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPjIwMTEvMDMvMjkKKworLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9sZGNvbmZpZy5jCQorKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWcuYwkKK0BAIC0xMzU5LDE0ICsxMzU5LDkgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAorICAgY29uc3QgY2hhciAqYXV4X2NhY2hlX2ZpbGUgPSBfUEFUSF9MRENPTkZJR19BVVhfQ0FDSEU7CisgICBpZiAob3B0X2Nocm9vdCkKKy0gICAgeworLSAgICAgIGF1eF9jYWNoZV9maWxlID0gY2hyb290X2Nhbm9uIChvcHRfY2hyb290LCBhdXhfY2FjaGVfZmlsZSk7CistICAgICAgaWYgKGF1eF9jYWNoZV9maWxlID09IE5VTEwpCistCWVycm9yIChFWElUX0ZBSUxVUkUsIGVycm5vLCBfKCJDYW4ndCBvcGVuIGNhY2hlIGZpbGUgJXNcbiIpLAorLQkgICAgICAgX1BBVEhfTERDT05GSUdfQVVYX0NBQ0hFKTsKKy0gICAgfQorKyAgICBhdXhfY2FjaGVfZmlsZSA9IGNocm9vdF9jYW5vbiAob3B0X2Nocm9vdCwgYXV4X2NhY2hlX2ZpbGUpOworIAorLSAgaWYgKCEgb3B0X2lnbm9yZV9hdXhfY2FjaGUpCisrICBpZiAoISBvcHRfaWdub3JlX2F1eF9jYWNoZSAmJiBhdXhfY2FjaGVfZmlsZSkKKyAgICAgbG9hZF9hdXhfY2FjaGUgKGF1eF9jYWNoZV9maWxlKTsKKyAgIGVsc2UKKyAgICAgaW5pdF9hdXhfY2FjaGUgKCk7CitAQCAtMTM3Niw3ICsxMzcxLDggQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgaWYgKG9wdF9idWlsZF9jYWNoZSkKKyAgICAgeworICAgICAgIHNhdmVfY2FjaGUgKGNhY2hlX2ZpbGUpOworLSAgICAgIHNhdmVfYXV4X2NhY2hlIChhdXhfY2FjaGVfZmlsZSk7CisrICAgICAgaWYgKGF1eF9jYWNoZV9maWxlKQorKyAgICAgICAgc2F2ZV9hdXhfY2FjaGUgKGF1eF9jYWNoZV9maWxlKTsKKyAgICAgfQorIAorICAgcmV0dXJuIDA7CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlXzIuMTIuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlXzIuMTIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2MwYjE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmVfMi4xMi4xLmJiCkBAIC0wLDAgKzEsMzQgQEAKK1NVTU1BUlkgPSAiQSBzdGFuZGFsb25lIG5hdGl2ZSBsZGNvbmZpZyBidWlsZCIKKworTElDRU5TRSA9ICJHUEx2MisiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7U30vbGRjb25maWcuYztlbmRsaW5lPTE3O21kNT0xZDE1ZjIwOTM3YzA1NWNiNWRlMjMyOWE0YzA1NDM5OSIKKworU1JDX1VSSSA9ICJmaWxlOi8vbGRjb25maWctbmF0aXZlLTIuMTIuMS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2xkY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xkY29uZmlnX2F1eC1jYWNoZV9wYXRoX2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8zMmFuZDY0Yml0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2VuZGlhbi1uZXNzX2hhbmRsaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZsYWdfZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2VuZGlhbmVzcy1oZWFkZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGRjb25maWctZGVmYXVsdC10by1hbGwtbXVsdGlsaWItZGlycy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9lbmRpYW4tbmVzc19oYW5kbGluZ19maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWRkLTY0LWJpdC1mbGFnLWZvci1FTEY2NC1lbnRyaWVzLnBhdGNoIFwKKyIKKworUFIgPSAicjIiCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9LyR7UH06IgorCitpbmhlcml0IG5hdGl2ZQorCitTID0gIiR7V09SS0RJUn0vJHtQTn0tJHtQVn0iCisKK2RvX2NvbXBpbGUgKCkgeworCSRDQyBsZGNvbmZpZy5jIC1zdGQ9Z251OTkgY2hyb290X2Nhbm9uLmMgeG1hbGxvYy5jIHhzdHJkdXAuYyBjYWNoZS5jIHJlYWRsaWIuYyAgLUkuIGRsLWNhY2hlLmMgLW8gbGRjb25maWcKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7YmluZGlyfS8KKwlpbnN0YWxsIGxkY29uZmlnICR7RH0vJHtiaW5kaXJ9LworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9zaXRlX2NvbmZpZy9mdW5jcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvc2l0ZV9jb25maWcvZnVuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NjODUzOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvc2l0ZV9jb25maWcvZnVuY3MKQEAgLTAsMCArMSw0NzQgQEAKK2E2NGwKK2FicworYWNjZXNzCitfX2FkanRpbWV4CithbGFybQorYWxwaGFzb3J0Cithcmd6X2FwcGVuZAorX19hcmd6X2NvdW50Cithcmd6X2NyZWF0ZV9zZXAKK2FyZ3pfaW5zZXJ0CitfX2FyZ3pfbmV4dAorYXJnel9uZXh0CitfX2FyZ3pfc3RyaW5naWZ5Cithcmd6X3N0cmluZ2lmeQorYXNwcmludGYKK2F0ZXhpdAorYXRvZgorYXRvaQorYmNtcAorYmNvcHkKK2JpbmRyZXN2cG9ydAorYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQKK2J0b3djCitiemVybworY2FsbG9jCitjYW5vbmljYWxpemVfZmlsZV9uYW1lCitjYXRnZXRzCitjZmdldG9zcGVlZAorY2ZzZXRpc3BlZWQKK2Nmc2V0c3BlZWQKK2NobW9kCitjaG93bgorY2hyb290CitjbG9jaworY2xvc2UKK2Nsb3NlZGlyCitjbG9zZWxvZworY29uZnN0cgorY29ubmVjdAorZGFlbW9uCitkY2dldHRleHQKK2RpZmZ0aW1lCitkaXJmZAorZGlybmFtZQorZG5nZXR0ZXh0CitkdXAyCitlY3Z0CitlbmRncmVudAorZW5kbW50ZW50CitlbmRwd2VudAorZW5kdXRlbnQKK2VuZHV0eGVudAorZXBvbGxfY3RsCitlcnIKK2V0aGVyX2hvc3R0b24KK2V0aGVyX250b2hvc3QKK2V1aWRhY2Nlc3MKK2V4ZWN2CitmY2hkaXIKK2ZjaG1vZAorZmNobW9kYXQKK2ZjaG93bgorZmNob3duYXQKK2ZjbnRsCitmY3Z0CitmZGF0YXN5bmMKK2Zkb3BlbmRpcgorZmVvZl91bmxvY2tlZAorZmdldHNfdW5sb2NrZWQKK2ZnZXR4YXR0cgorZmluaXRlCitmbGlzdHhhdHRyCitmbG9jaworZmxvY2tmaWxlCitmbm1hdGNoCitmb3JrCitmcGF0aGNvbmYKK19fZnBlbmRpbmcKK2ZwcmludGYKK2ZyZWUKK2ZyZWVhZGRyaW5mbworZnJlZWlmYWRkcnMKK2ZzZWVrbworX19mc2V0bG9ja2luZworZnNldHhhdHRyCitmc3RhdDY0Citmc3RhdAorZnN0YXRmcworZnN5bmMKK2Z0ZWxsbworZnRpbWUKK2Z0cnVuY2F0ZQorZnVubG9ja2ZpbGUKK2Z1dGltZXMKK2Z1dGltZXNhdAorZ2FpX3N0cmVycm9yCitnY3Z0CitnZXRhZGRyaW5mbworZ2V0Y191bmxvY2tlZAorZ2V0Y3dkCitnZXRkZWxpbQorZ2V0ZG9tYWlubmFtZQorZ2V0ZHRhYmxlc2l6ZQorZ2V0ZWdpZAorZ2V0ZW52CitnZXRldWlkCitnZXRnaWQKK2dldGdyZW50CitnZXRncmVudF9yCitnZXRncmdpZF9yCitnZXRncm5hbQorZ2V0Z3JuYW1fcgorZ2V0Z3JvdXBsaXN0CitnZXRncm91cHMKK2dldGhvc3RieWFkZHJfcgorZ2V0aG9zdGJ5bmFtZTIKK2dldGhvc3RieW5hbWUKK2dldGhvc3RieW5hbWVfcgorZ2V0aG9zdGVudAorZ2V0aG9zdGlkCitnZXRob3N0bmFtZQorZ2V0aWZhZGRycworZ2V0bGluZQorZ2V0bG9hZGF2ZworZ2V0bW50ZW50CitnZXRtc2cKK2dldG5hbWVpbmZvCitnZXRuZXRieWFkZHJfcgorZ2V0bmV0Z3JlbnRfcgorZ2V0b3B0CitnZXRvcHRfbG9uZworZ2V0b3B0X2xvbmdfb25seQorZ2V0cGFnZXNpemUKK2dldHBhc3MKK2dldHBlZXJuYW1lCitnZXRwZ3JwCitnZXRwaWQKK2dldHBwaWQKK2dldHByb3RvZW50X3IKK2dldHB3ZW50CitnZXRwd2VudF9yCitnZXRwd25hbQorZ2V0cHduYW1fcgorZ2V0cHd1aWQKK2dldHB3dWlkX3IKK2dldHJlc3VpZAorZ2V0cmxpbWl0CitnZXRydXNhZ2UKK2dldHNlcnZieW5hbWUKK2dldHNlcnZieW5hbWVfcgorZ2V0c2VydmJ5cG9ydF9yCitnZXRzZXJ2ZW50CitnZXRzZXJ2ZW50X3IKK2dldHNwbmFtCitnZXRzcG5hbV9yCitnZXR0aW1lb2ZkYXkKK2dldHR0eWVudAorZ2V0dHR5bmFtCitnZXR1aWQKK2dldHVzZXJzaGVsbAorZ2V0dXRlbnQKK2dldHV0aWQKK2dldHV0bGluZQorZ2V0dXRtcAorZ2V0dXRtcHgKK2dldHV0eGVudAorZ2V0dXR4aWQKK2dldHV0eGxpbmUKK2dldHdkCitnZXR4YXR0cgorZ2xvYgorZ210aW1lCitnbXRpbWVfcgorZ3JhbnRwdAorZ3JvdXBfbWVtYmVyCitoZXJyb3IKK2hzdHJlcnJvcgoraWNvbnYKK2ljb252X29wZW4KK2lmX2ZyZWVuYW1laW5kZXgKK2lmX2luZGV4dG9uYW1lCitpZl9uYW1laW5kZXgKK2lmX25hbWV0b2luZGV4CitpbmRleAoraW5ldF9hZGRyCitpbmV0X2F0b24KK2luZXRfbnRvYQoraW5ldF9udG9wCitpbmV0X3B0b24KK2luaXRncm91cHMKK2lubmV0Z3IKK2lydXNlcm9rCitpc2FzY2lpCitpc2F0dHkKK2lzYmxhbmsKK2lzZ3JhcGgKK2lzaW5mCitpc25hbgoraXNwcmludAoraXNzcGFjZQoraXN3YWxudW0KK2lzd2NudHJsCitpc3djdHlwZQoraXN3cHJpbnQKK2lzd3NwYWNlCitpc3d1cHBlcgoraXN4ZGlnaXQKK2tpbGwKK2tpbGxwZworbGNob3duCitsY2twd2RmCitsZ2V0eGF0dHIKK2xpbmsKK2xpc3R4YXR0cgorbGxpc3R4YXR0cgorbG9jYWx0aW1lCitsb2NhbHRpbWVfcgorbG9ja2YKK2xyYW5kNDgKK2xzZWFyY2gKK2xzZWVrNjQKK2xzZXR4YXR0cgorbHN0YXQKK21hbGxpbmZvCittYWxsb2MKK21ibGVuCittYnJsZW4KK21icnRvd2MKK21ic2luaXQKK21ic3J0b3djcworbWJ0b3djCittZW1hbGlnbgorbWVtY2hyCittZW1jbXAKK21lbWNweQorbWVtbW92ZQorbWVtcGNweQorbWVtcmNocgorbWVtc2V0Citta2RpcgorbWtkaXJhdAorbWtkdGVtcAorbWtmaWZvCitta25vZAorbWtzdGVtcDY0Citta3N0ZW1wCitta3RpbWUKK21sb2NrCittbWFwCittdHJhY2UKK211bmxvY2sKK211bm1hcAorbmFub3NsZWVwCituaWNlCitubF9sYW5naW5mbworbnRwX2FkanRpbWUKK250cF9nZXR0aW1lCitfb2JzdGFja19mcmVlCitvbl9leGl0CitvcGVuNjQKK29wZW4KK29wZW5hdAorb3BlbmRpcgorb3BlbmxvZworcGF0aGNvbmYKK3BpcGUKK3BvbGwKK3BvcGVuCitwb3NpeF9tZW1hbGlnbgorcHJjdGwKK3ByZWFkCitwcmludGYKK19fcHJvZ25hbWUKK3BzZWxlY3QKK3B0aHJlYWRfbXV0ZXhfbG9jaworcHRzbmFtZQorcHV0ZW52CitwdXRncmVudAorcHV0cHdlbnQKK3B1dHNwZW50CitwdXR1dGxpbmUKK3B1dHV0eGxpbmUKK3B1dHdjCitwd3JpdGUKK3Fzb3J0CityYWlzZQorcmFuZAorcmFuZG9tCityYW5kX3IKK3JlYWQKK3JlYWRkaXIKK3JlYWRkaXJfcgorcmVhZGxpbmsKK3JlYWxsb2MKK3JlYWxwYXRoCityZV9jb21wCityZWN2bXNnCityZV9leGVjCityZWdjb21wCityZWdleGVjCityZW1vdmUKK3JlbmFtZQorcmVfc2VhcmNoCitybWRpcgorcnBtYXRjaAorcnJlc3Zwb3J0X2FmCitydXNlcm9rCitydXNlcm9rX2FmCitzYnJrCitzY2FuZGlyCitzY2hlZF9zZXRzY2hlZHVsZXIKK3NjaGVkX3lpZWxkCitfX3NlY3VyZV9nZXRlbnYKK3NlbGVjdAorc2VtY3RsCitzZW1nZXQKK3NlbmRtc2cKK3NldGJ1Zgorc2V0YnVmZmVyCitzZXRlZ2lkCitzZXRlbnYKK3NldGV1aWQKK3NldGdpZAorc2V0Z3JvdXBzCitzZXRob3N0bmFtZQorc2V0aXRpbWVyCitfc2V0am1wCitzZXRqbXAKK3NldGxpbmVidWYKK3NldGxvY2FsZQorc2V0bW50ZW50CitzZXRwZ2lkCitzZXRwZ3JwCitzZXRwcmlvcml0eQorc2V0cmVnaWQKK3NldHJlc2dpZAorc2V0cmVzdWlkCitzZXRyZXVpZAorc2V0cmxpbWl0CitzZXRzaWQKK3NldHNvY2tvcHQKK3NldHRpbWVvZmRheQorc2V0dWlkCitzZXR1dGVudAorc2V0dXR4ZW50CitzZXR2YnVmCitzZXR4YXR0cgorc2dldHNwZW50CitzaG1hdAorc2htY3RsCitzaG1kdAorc2htZ2V0CitzaHV0ZG93bgorc2lnYWN0aW9uCitzaWdhZGRzZXQKK3NpZ2FsdHN0YWNrCitzaWdibG9jaworc2lnZW1wdHlzZXQKK3NpZ2hvbGQKK3NpZ2ludGVycnVwdAorc2lnbmFsCitzaWdwcm9jbWFzaworc2lnc2V0CitzaWdzZXRtYXNrCitzaWdzdGFjaworc2lnc3VzcGVuZAorc2lndmVjCitzbnByaW50Zgorc29ja2V0Citzb2NrZXRwYWlyCitzcHJpbnRmCitzcmFuZDQ4CitzcmFuZAorc3JhbmRvbQorc3NjYW5mCitzdGF0CitzdGF0ZnMKK3N0YXR2ZnMKK3N0aW1lCitzdHBjcHkKK3N0cmNhc2VjbXAKK3N0cmNhc2VzdHIKK3N0cmNocgorc3RyY2hybnVsCitzdHJjbXAKK3N0cmNzcG4KK3N0cmR1cAorc3RyZXJyb3IKK3N0cmVycm9yX3IKK3N0cmZ0aW1lCitzdHJsZW4KK3N0cm5jYXNlY21wCitzdHJuY21wCitzdHJuZHVwCitzdHJubGVuCitzdHJwYnJrCitzdHJwdGltZQorc3RycmNocgorc3Ryc2VwCitzdHJzaWduYWwKK3N0cnNwbgorc3Ryc3RyCitzdHJ0b2QKK3N0cnRvaW1heAorc3RydG9rX3IKK3N0cnRvbAorc3RydG9sbAorc3RydG91bAorc3RydG91bGwKK3N0cnRvdW1heAorc3RydmVyc2NtcAorc3RyeGZybQorc3ltbGluaworc3luYworc3lzY29uZgorc3lzY3RsCitzeXNpbmZvCitzeXNsb2cKK19zeXNfc2lnbGlzdAorc3lzX3NpZ2xpc3QKK3N5c3RlbQordGNnZXRhdHRyCit0Y2dldHBncnAKK3Rjc2V0YXR0cgordGNzZXRwZ3JwCit0aW1lCit0aW1lZ20KK3RpbWVzCit0aW1lem9uZQordG1wbmFtCit0b3dsb3dlcgordG93dXBwZXIKK3RydW5jYXRlCit0c2VhcmNoCit0dHluYW1lCit0enNldAordWxpbWl0Cit1bWFzawordW5hbWUKK3VubGluawordW5zZXRlbnYKK3Vuc2hhcmUKK3VwZHd0bXAKK3VwZHd0bXB4Cit1c2xlZXAKK3VzdGF0Cit1dGltZQordXRpbWVzCit1dG1wbmFtZQordXRtcHhuYW1lCit2YWxsb2MKK3Zhc3ByaW50ZgordmVycngKK3Zmb3JrCit2ZnByaW50ZgordmZzY2FuZgordmhhbmd1cAordnByaW50ZgordnNucHJpbnRmCit2c3ByaW50Zgord2FpdDMKK3dhaXQ0Cit3YWl0cGlkCit3Y3J0b21iCit3Y3Njb2xsCit3Y3NkdXAKK3djc2xlbgord2N0b2IKK3djdG9tYgord2N0eXBlCit3Y3dpZHRoCit3bWVtY2hyCit3bWVtY3B5Cit3bWVtcGNweQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9zaXRlX2NvbmZpZy9oZWFkZXJzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9zaXRlX2NvbmZpZy9oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOWFiNTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL3NpdGVfY29uZmlnL2hlYWRlcnMKQEAgLTAsMCArMSwxNTYgQEAKK2Fpby5oCithbGxvY2EuaAorYXJnei5oCithcnBhL2luZXQuaAorYXJwYS9uYW1lc2VyLmgKK2FzbS9ieXRlb3JkZXIuaAorYXNtL2lvY3Rscy5oCithc20vcGFnZS5oCithc20vdHlwZXMuaAorYXNzZXJ0LmgKK2J5dGVzd2FwLmgKK2NyeXB0LmgKK2N0eXBlLmgKK2RpcmVudC5oCitkbGZjbi5oCitlbGYuaAorZW5kaWFuLmgKK2Vyci5oCitlcnJuby5oCitleGVjaW5mby5oCitmY250bC5oCitmZWF0dXJlcy5oCitmbG9hdC5oCitmc3RhYi5oCitmdHcuaAorZ2V0b3B0LmgKK2dsb2IuaAorZ3JwLmgKK2ljb252LmgKK2lmYWRkcnMuaAoraW50dHlwZXMuaAorbGFuZ2luZm8uaAorbGFzdGxvZy5oCitsaWJnZW4uaAorbGliaW50bC5oCitsaW1pdHMuaAorbGludXgvY2FwYWJpbGl0eS5oCitsaW51eC9mZC5oCitsaW51eC9mcy5oCitsaW51eC9oYXllc2VzcC5oCitsaW51eC9oZHJlZy5oCitsaW51eC9pY21wLmgKK2xpbnV4L2luNi5oCitsaW51eC9qb3lzdGljay5oCitsaW51eC9wdHJhY2UuaAorbGludXgvc2VyaWFsLmgKK2xpbnV4L3NvbnlwaS5oCitsaW51eC91bmlzdGQuaAorbGludXgvdXRzbmFtZS5oCitsaW51eC92ZXJzaW9uLmgKK2xvY2FsZS5oCittYWxsb2MuaAorbWF0aC5oCittY2hlY2suaAorbWVtb3J5LmgKK21udGVudC5oCittcXVldWUuaAorbmV0ZGIuaAorbmV0L2lmLmgKK25ldGluZXQvZXRoZXIuaAorbmV0aW5ldC9pbi5oCituZXRpbmV0L2lwNi5oCituZXRpbmV0L2lwLmgKK25ldGluZXQvdGNwLmgKK25ldGluZXQvdWRwLmgKK25ldGlweC9pcHguaAorbmV0L3JvdXRlLmgKK3BhdGhzLmgKK3BvbGwuaAorcHRocmVhZC5oCitwdHkuaAorcHdkLmgKK3JlZ2V4LmgKK3Jlc29sdi5oCitycGMvcnBjLmgKK3JwYy90eXBlcy5oCitzY2hlZC5oCitzY3NpL3Njc2kuaAorc2VhcmNoLmgKK3NlbWFwaG9yZS5oCitzZXRqbXAuaAorc2d0dHkuaAorc2hhZG93LmgKK3NpZ25hbC5oCitzdGRhcmcuaAorc3RkYm9vbC5oCitzdGRjCitzdGRkZWYuaAorc3RkaW50LmgKK3N0ZGlvLmgKK3N0ZGxpYi5oCitzdHJpbmcuaAorc3RyaW5ncy5oCitzdHJvcHRzLmgKK3N5cy9iaXR5cGVzLmgKK3N5cy9jZGVmcy5oCitzeXMvZGlyLmgKK3N5cy9lcG9sbC5oCitzeXNleGl0cy5oCitzeXMvZmNudGwuaAorc3lzL2ZpbGUuaAorc3lzL2ZzdWlkLmgKK3N5cy9pb2N0bC5oCitzeXMvaXBjLmgKK3N5c2xvZy5oCitzeXMvbW1hbi5oCitzeXMvbW91bnQuaAorc3lzL210aW8uaAorc3lzL3BhcmFtLmgKK3N5cy9wb2xsLmgKK3N5cy9wcmN0bC5oCitzeXMvcHRyYWNlLmgKK3N5cy9xdWV1ZS5oCitzeXMvcmVnLmgKK3N5cy9yZXNvdXJjZS5oCitzeXMvc2VsZWN0LmgKK3N5cy9zZW0uaAorc3lzL3NobS5oCitzeXMvc2lnbmFsLmgKK3N5cy9zb2NrZXQuaAorc3lzL3NvY2tldHZhci5oCitzeXMvc291bmRjYXJkLmgKK3N5cy9zdGF0ZnMuaAorc3lzL3N0YXQuaAorc3lzL3N0YXR2ZnMuaAorc3lzL3N0cm9wdHMuaAorc3lzL3N3YXAuaAorc3lzL3N5c2N0bC5oCitzeXMvc3lzaW5mby5oCitzeXMvc3lzbWFjcm9zLmgKK3N5cy90ZXJtaW9zLmgKK3N5cy90aW1lYi5oCitzeXMvdGltZS5oCitzeXMvdGltZXMuaAorc3lzL3RpbWV4LmgKK3N5cy90eXBlcy5oCitzeXMvdWlvLmgKK3N5cy91bi5oCitzeXMvdW5pc3RkLmgKK3N5cy91c2VyLmgKK3N5cy91dHNuYW1lLmgKK3N5cy92ZnMuaAorc3lzL3dhaXQuaAordGVybWlvLmgKK3Rlcm1pb3MuaAordGltZS5oCit0dHllbnQuaAordWxpbWl0LmgKK3VuaXN0ZC5oCit1c3RhdC5oCit1dGltZS5oCit1dG1wLmgKK3V0bXB4LmgKK3ZhbHVlcy5oCit3Y2hhci5oCit3Y3R5cGUuaApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9zaXRlX2NvbmZpZy90eXBlcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvc2l0ZV9jb25maWcvdHlwZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc4YmQ4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvc2l0ZV9jb25maWcvdHlwZXMKQEAgLTAsMCArMSwyMSBAQAorY2hhcgorY2hhciAqCitkb3VibGUKK2Zsb2F0CitpbnQKK2xvbmcKK2xvbmcgZG91YmxlCitsb25nIGludAorbG9uZyBsb25nCitsb25nIGxvbmcgaW50CitzaG9ydAorc2hvcnQgaW50CitzaWduZWQgY2hhcgordW5zaWduZWQgY2hhcgordW5zaWduZWQgaW50Cit1bnNpZ25lZCBsb25nCit1bnNpZ25lZCBsb25nIGludAordW5zaWduZWQgbG9uZyBsb25nIGludAordW5zaWduZWQgc2hvcnQKK3Vuc2lnbmVkIHNob3J0IGludAordm9pZCAqCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2ZpbGVzLzk5X25ldHdvcmsgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2ZpbGVzLzk5X25ldHdvcmsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJkNTg5NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vZmlsZXMvOTlfbmV0d29yawpAQCAtMCwwICsxIEBACitkIHJvb3Qgcm9vdCAwNzU1IC9ydW4vbmV0d29yayBub25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2ZpbGVzL2RlZm4yLWMtbWFuLWRvbi10LXJlbHktb24tZHBrZy1hcmNoaXRlY3R1cmUtdG8tc2V0LWEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2ZpbGVzL2RlZm4yLWMtbWFuLWRvbi10LXJlbHktb24tZHBrZy1hcmNoaXRlY3R1cmUtdG8tc2V0LWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM0ZDk1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vZmlsZXMvZGVmbjItYy1tYW4tZG9uLXQtcmVseS1vbi1kcGtnLWFyY2hpdGVjdHVyZS10by1zZXQtYS5wYXRjaApAQCAtMCwwICsxLDU2IEBACitGcm9tIDdhZjlkYjc0ODk3NGNiM2EyYzZlZjhmOWUwM2Q3ZGIxZjlmOGVlMTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgNiBBdWcgMjAxNCAxNDo1NDoxMiAtMDQwMAorU3ViamVjdDogW1BBVENIIDEvMl0gZGVmbjJbY3xtYW5dOiBkb24ndCByZWx5IG9uIGRwa2ctYXJjaGl0ZWN0dXJlIHRvIHNldCBhcmNoCisKK0luIHlvY3RvIHdlJ2xsIGFsd2F5cyBiZSBjcm9zcyBjb21waWxpbmcsIGFuZCB3ZSdsbCBhbHdheXMKK2JlIGJ1aWxkaW5nIG9uIGxpbnV4IGZvciBsaW51eCAodnMuICpCU0QsIGh1cmQsIGV0Yy4pCisKK1dpdGhvdXQgdGhpcyB0aGUgYXJjaCBpcyBub3QgZGV0ZWN0ZWQsIGJ1dCBpdCBkb2Vzbid0IGVycm9yCitvdXQsIGFuZCBoZW5jZSB5b3UgZ2V0IHVzZWxlc3MgYmluYXJpZXMgdGhhdCBkb24ndCBrbm93IGFueQorYXJjaCBzcGVjaWZpYyBtZXRob2RzLCBhbmQgdGhlIGVuZCByZXN1bHQgd2lsbCBiZSBzdHJhbmdlbmVzcworbGlrZSB0aGUgbG9vcGJhY2sgZGV2aWNlIG5vdCBiZWluZyBjb25maWd1cmVkL2VuYWJsZWQuCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorLS0tCisgZGVmbjJjLnBsICAgfCA2ICsrKy0tLQorIGRlZm4ybWFuLnBsIHwgNiArKystLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RlZm4yYy5wbCBiL2RlZm4yYy5wbAoraW5kZXggYzQ0OWRlMmYzZDFjLi4zODg0NWUzNzRjNzYgMTAwNzU1CistLS0gYS9kZWZuMmMucGwKKysrKyBiL2RlZm4yYy5wbAorQEAgLTIsOSArMiw5IEBACisgCisgdXNlIHN0cmljdDsKKyAKKy1teSAkREVCX0hPU1RfQVJDSF9PUyA9IGBkcGtnLWFyY2hpdGVjdHVyZSAtcURFQl9IT1NUX0FSQ0hfT1NgOworLQorLSRERUJfSE9TVF9BUkNIX09TID1+IHMvXG4vLzsKKysjbXkgJERFQl9IT1NUX0FSQ0hfT1MgPSBgZHBrZy1hcmNoaXRlY3R1cmUgLXFERUJfSE9TVF9BUkNIX09TYDsKKysjJERFQl9IT1NUX0FSQ0hfT1MgPX4gcy9cbi8vOworK215ICRERUJfSE9TVF9BUkNIX09TID0ibGludXgiOworIAorICMgZGVjbGFyYXRpb25zCisgbXkgJGFkZHJlc3NfZmFtaWx5ID0gIiI7CitkaWZmIC0tZ2l0IGEvZGVmbjJtYW4ucGwgYi9kZWZuMm1hbi5wbAoraW5kZXggNmRkY2ZkZDRmZTY4Li5jOWM0ZGQwNDY1OTcgMTAwNzU1CistLS0gYS9kZWZuMm1hbi5wbAorKysrIGIvZGVmbjJtYW4ucGwKK0BAIC0yLDkgKzIsOSBAQAorIAorIHVzZSBzdHJpY3Q7CisgCistbXkgJERFQl9IT1NUX0FSQ0hfT1MgPSBgZHBrZy1hcmNoaXRlY3R1cmUgLXFERUJfSE9TVF9BUkNIX09TYDsKKy0KKy0kREVCX0hPU1RfQVJDSF9PUyA9fiBzL1xuLy87CisrI215ICRERUJfSE9TVF9BUkNIX09TID0gYGRwa2ctYXJjaGl0ZWN0dXJlIC1xREVCX0hPU1RfQVJDSF9PU2A7CisrIyRERUJfSE9TVF9BUkNIX09TID1+IHMvXG4vLzsKKytteSAkREVCX0hPU1RfQVJDSF9PUyA9ICJsaW51eCI7CisgCisgIyBkZWNsYXJhdGlvbnMKKyBteSAkbGluZTsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pZnVwZG93bi9maWxlcy9pbmV0LTYtLmRlZm4tZml4LWludmVydGVkLWNoZWNrcy1mb3ItbG9vcGJhY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2ZpbGVzL2luZXQtNi0uZGVmbi1maXgtaW52ZXJ0ZWQtY2hlY2tzLWZvci1sb29wYmFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmYzNTJlMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vZmlsZXMvaW5ldC02LS5kZWZuLWZpeC1pbnZlcnRlZC1jaGVja3MtZm9yLWxvb3BiYWNrLnBhdGNoCkBAIC0wLDAgKzEsMTAzIEBACitGcm9tIDc0MTUyYWM3NGEzZTFlYTBmM2JlMjkyYWExZWVjYTVhZDFmZTY5YzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgNiBBdWcgMjAxNCAxNToxMjoxMSAtMDQwMAorU3ViamVjdDogW1BBVENIIDIvMl0gaW5ldFs2XS5kZWZuOiBmaXggaW52ZXJ0ZWQgY2hlY2tzIGZvciBsb29wYmFjaworCitDb21wYXJlZCB0byB0aGUgaHVyZCBsaW5rLmRlZm4gZm9yIGxvb3BiYWNrLCB3ZSBzZWUgdGhlc2UKK2FyZSBpbnZlcnRlZCwgbWVhbmluZyB0aGF0IHlvdSB3b3VsZCBvbmx5IGJlIGFibGUgdG8gY29uZmlndXJlCithIGxvb3BiYWNrIGRldmljZSB0aGF0IHdhcyBfbm90XyBuYW1lZCAibG8iICh1bmxpa2VseSB0byBleGlzdCkuCisKK1RoZSByZXN1bHQgd2FzIHRoYXQgd2UnZCB1cGRhdGUgL3J1bi9uZXR3b3JrL2lmc3RhdGUgZm9yICJsbyIKK2J1dCBuZXZlciBhY3R1YWxseSBkbyBhbnl0aGluZyBmb3IgdXAvZG93biwgYXMgc2hvd24gYmVsb3c6CisKK3Jvb3RAbG9jYWxob3N0On4jIGlmY29uZmlnIC1zCitJZmFjZSAgIE1UVSBNZXQgICBSWC1PSyBSWC1FUlIgUlgtRFJQIFJYLU9WUiAgICBUWC1PSyBUWC1FUlIgVFgtRFJQIFRYLU9WUiBGbGcKK2V0aDAgICAgICAgMTUwMCAwICAgNzczNjMyOSAgICAgIDAgICAyMDE2IDAgICAgICAgNTI4OTQyMiAgICAgIDAgICAgICAwICAgICAgMCBCTVJVCitsbyAgICAgICAgNjU1MzYgMCAgICAgICAgMTggICAgICAwICAgICAgMCAwICAgICAgICAgICAgMTggICAgICAwICAgICAgMCAgICAgIDAgTFJVCityb290QGxvY2FsaG9zdDp+IyBpZmRvd24gbG8KK3Jvb3RAbG9jYWxob3N0On4jIGVjaG8gJD8KKzAKK3Jvb3RAbG9jYWxob3N0On4jIGlmY29uZmlnIC1zCitJZmFjZSAgIE1UVSBNZXQgICBSWC1PSyBSWC1FUlIgUlgtRFJQIFJYLU9WUiAgICBUWC1PSyBUWC1FUlIgVFgtRFJQIFRYLU9WUiBGbGcKK2V0aDAgICAgICAgMTUwMCAwICAgNzczNjQwNiAgICAgIDAgICAyMDE2IDAgICAgICAgNTI4OTQ1NSAgICAgIDAgICAgICAwICAgICAgMCBCTVJVCitsbyAgICAgICAgNjU1MzYgMCAgICAgICAgMTggICAgICAwICAgICAgMCAwICAgICAgICAgICAgMTggICAgICAwICAgICAgMCAgICAgIDAgTFJVCityb290QGxvY2FsaG9zdDp+IyBpZmNvbmZpZyBsbyBkb3duCityb290QGxvY2FsaG9zdDp+IyBpZmNvbmZpZyAtcworSWZhY2UgICBNVFUgTWV0ICAgUlgtT0sgUlgtRVJSIFJYLURSUCBSWC1PVlIgICAgVFgtT0sgVFgtRVJSIFRYLURSUCBUWC1PVlIgRmxnCitldGgwICAgICAgIDE1MDAgMCAgIDc3MzY0NzQgICAgICAwICAgMjAxNiAwICAgICAgIDUyODk0ODEgICAgICAwICAgICAgMCAgICAgIDAgQk1SVQorcm9vdEBsb2NhbGhvc3Q6fiMKKworU2lnbmVkLW9mZi1ieTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CistLS0KKyBpbmV0LmRlZm4gIHwgMTIgKysrKysrLS0tLS0tCisgaW5ldDYuZGVmbiB8ICA4ICsrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2luZXQuZGVmbiBiL2luZXQuZGVmbgoraW5kZXggYjE3NmFiNGVkMDNlLi41ZmRmYjE0YTBlMWMgMTAwNjQ0CistLS0gYS9pbmV0LmRlZm4KKysrKyBiL2luZXQuZGVmbgorQEAgLTYsMTAgKzYsMTAgQEAgbWV0aG9kIGxvb3BiYWNrCisgICAgIFRoaXMgbWV0aG9kIG1heSBiZSB1c2VkIHRvIGRlZmluZSB0aGUgSVB2NCBsb29wYmFjayBpbnRlcmZhY2UuCisgCisgICB1cAorLSAgICBpcCBsaW5rIHNldCBkZXYgJWlmYWNlJSB1cCBpZiAoIWlmYWNlX2lzX2xvKCkpCisrICAgIGlwIGxpbmsgc2V0IGRldiAlaWZhY2UlIHVwIGlmIChpZmFjZV9pc19sbygpKQorIAorICAgZG93bgorLSAgICBpcCBsaW5rIHNldCBkZXYgJWlmYWNlJSBkb3duIGlmICghaWZhY2VfaXNfbG8oKSkKKysgICAgaXAgbGluayBzZXQgZGV2ICVpZmFjZSUgZG93biBpZiAoaWZhY2VfaXNfbG8oKSkKKyAKKyBtZXRob2Qgc3RhdGljCisgICBkZXNjcmlwdGlvbgorQEAgLTIxMiwxMSArMjEyLDExIEBAIG1ldGhvZCBsb29wYmFjaworIAorICAgdXAKKyAgICAgaWZjb25maWcgJWlmYWNlJSAxMjcuMC4wLjEgdXAgXAorLQlpZiAoIWlmYWNlX2lzX2xvKCkpCisrCWlmIChpZmFjZV9pc19sbygpKQorIAorICAgZG93bgorICAgICBpZmNvbmZpZyAlaWZhY2UlIGRvd24gXAorLQlpZiAoIWlmYWNlX2lzX2xvKCkpCisrCWlmIChpZmFjZV9pc19sbygpKQorIAorIG1ldGhvZCBzdGF0aWMKKyAgIGRlc2NyaXB0aW9uCitAQCAtMzcxLDExICszNzEsMTEgQEAgbWV0aG9kIGxvb3BiYWNrCisgCisgICB1cAorICAgICBpbmV0dXRpbHMtaWZjb25maWcgLS1pbnRlcmZhY2UgJWlmYWNlJSAtLWFkZHJlc3MgMTI3LjAuMC4xIC0tdXAgXAorLQlpZiAoIWlmYWNlX2lzX2xvKCkpCisrCWlmIChpZmFjZV9pc19sbygpKQorIAorICAgZG93bgorICAgICBpbmV0dXRpbHMtaWZjb25maWcgLS1pbnRlcmZhY2UgJWlmYWNlJSAtLWRvd24gXAorLQlpZiAoIWlmYWNlX2lzX2xvKCkpCisrCWlmIChpZmFjZV9pc19sbygpKQorIAorIG1ldGhvZCBzdGF0aWMKKyAgIGRlc2NyaXB0aW9uCitkaWZmIC0tZ2l0IGEvaW5ldDYuZGVmbiBiL2luZXQ2LmRlZm4KK2luZGV4IDA5MzI1NTM5Y2QwMS4uNGRmNjRhZmYzOGNjIDEwMDY0NAorLS0tIGEvaW5ldDYuZGVmbgorKysrIGIvaW5ldDYuZGVmbgorQEAgLTMzLDExICszMywxMSBAQCBtZXRob2QgbG9vcGJhY2sKKyAgIGRlc2NyaXB0aW9uCisgICAgIFRoaXMgbWV0aG9kIG1heSBiZSB1c2VkIHRvIGRlZmluZSB0aGUgSVB2NiBsb29wYmFjayBpbnRlcmZhY2UuCisgICB1cAorLSAgICAtaXAgbGluayBzZXQgZGV2ICVpZmFjZSUgdXAgMj4vZGV2L251bGwgaWYgKCFpZmFjZV9pc19sbygpKQorLSAgICAtaXAgYWRkciBhZGQgZGV2ICVpZmFjZSUgOjoxIDI+L2Rldi9udWxsIGlmICghaWZhY2VfaXNfbG8oKSkKKysgICAgLWlwIGxpbmsgc2V0IGRldiAlaWZhY2UlIHVwIDI+L2Rldi9udWxsIGlmIChpZmFjZV9pc19sbygpKQorKyAgICAtaXAgYWRkciBhZGQgZGV2ICVpZmFjZSUgOjoxIDI+L2Rldi9udWxsIGlmIChpZmFjZV9pc19sbygpKQorICAgZG93bgorLSAgICAtaXAgYWRkciBkZWwgZGV2ICVpZmFjZSUgOjoxIDI+L2Rldi9udWxsIGlmICghaWZhY2VfaXNfbG8oKSkKKy0gICAgLWlwIGxpbmsgc2V0IGRldiAlaWZhY2UlIGRvd24gMj4vZGV2L251bGwgaWYgKCFpZmFjZV9pc19sbygpKQorKyAgICAtaXAgYWRkciBkZWwgZGV2ICVpZmFjZSUgOjoxIDI+L2Rldi9udWxsIGlmIChpZmFjZV9pc19sbygpKQorKyAgICAtaXAgbGluayBzZXQgZGV2ICVpZmFjZSUgZG93biAyPi9kZXYvbnVsbCBpZiAoaWZhY2VfaXNfbG8oKSkKKyAKKyBtZXRob2Qgc3RhdGljCisgICBkZXNjcmlwdGlvbgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2lmdXBkb3duXzAuNy40OC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pZnVwZG93bi9pZnVwZG93bl8wLjcuNDguMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGViODdiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pZnVwZG93bi9pZnVwZG93bl8wLjcuNDguMS5iYgpAQCAtMCwwICsxLDU0IEBACitTVU1NQVJZID0gImlmdXBkb3duOiBiYXNpYyBpZnVwIGFuZCBpZmRvd24gdXNlZCBieSBpbml0c2NyaXB0cyIKK0RFU0NSSVBUSU9OID0gIkhpZ2ggbGV2ZWwgdG9vbHMgdG8gY29uZmlndXJlIG5ldHdvcmsgaW50ZXJmYWNlcyBcCitUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHRvb2xzIGlmdXAgYW5kIGlmZG93biB3aGljaCBtYXkgYmUgdXNlZCB0byBcCitjb25maWd1cmUgKG9yLCByZXNwZWN0aXZlbHksIGRlY29uZmlndXJlKSBuZXR3b3JrIGludGVyZmFjZXMsIGJhc2VkIG9uIFwKK3RoZSBmaWxlIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzLiIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworU1JDX1VSSSA9ICJodHRwOi8vYXJjaGl2ZS51YnVudHUuY29tL3VidW50dS9wb29sL21haW4vaS9pZnVwZG93bi9pZnVwZG93bl8wLjcuNDguMXVidW50dTUudGFyLmd6IFwKKwkgICBmaWxlOi8vZGVmbjItYy1tYW4tZG9uLXQtcmVseS1vbi1kcGtnLWFyY2hpdGVjdHVyZS10by1zZXQtYS5wYXRjaCBcCisJICAgZmlsZTovL2luZXQtNi0uZGVmbi1maXgtaW52ZXJ0ZWQtY2hlY2tzLWZvci1sb29wYmFjay5wYXRjaCBcCisJICAgZmlsZTovLzk5X25ldHdvcmsgXAorCSAgIgorCitFWFRSQV9PRU1BS0UgPSAiIgorCisjIG5lZWRlZCBzbyB3ZSBkb24ndCBnZXQgZGVmYXVsdCBTPSIke1dPUktESVJ9L2lmdXBkb3duLSR7UFZ9IgorUyA9ICIke1dPUktESVJ9L2lmdXBkb3duLSR7UFZ9dWJ1bnR1NSIKKworCitpbmhlcml0IHVwZGF0ZS1yYy5kIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworZG9fY29tcGlsZSAoKSB7CisJY2htb2QgYStyeCAqLnBsICouc2gKKwlvZV9ydW5tYWtlICdDQz0ke0NDfScgIkNGTEFHUz0ke0NGTEFHU30gLVdhbGwgLVcgLUQnSUZVUERPV05fVkVSU0lPTj1cIiR7UFZ9XCInIgorfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuOCBcCisJCSAgJHtEfSR7bWFuZGlyfS9tYW41IFwKKwkJICAke0R9JHtiYXNlX3NiaW5kaXJ9CisKKwkjIElmIHZvbGF0aWxlcyBhcmUgdXNlZCwgdGhlbiB3ZSdsbCBhbHNvIG5lZWQgL3J1bi9uZXR3b3JrIHRoZXJlIHRvby4KKwlpbnN0YWxsIC1kICR7RH0vZXRjL2RlZmF1bHQvdm9sYXRpbGVzCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vOTlfbmV0d29yayAke0R9L2V0Yy9kZWZhdWx0L3ZvbGF0aWxlcworCisJaW5zdGFsbCAtbSAwNzU1IGlmdXAgJHtEfSR7YmFzZV9zYmluZGlyfS8KKwlsbiAke0R9JHtiYXNlX3NiaW5kaXJ9L2lmdXAgJHtEfSR7YmFzZV9zYmluZGlyfS9pZmRvd24KKwlpbnN0YWxsIC1tIDA2NDQgaWZ1cC44ICR7RH0ke21hbmRpcn0vbWFuOAorCWluc3RhbGwgLW0gMDY0NCBpbnRlcmZhY2VzLjUgJHtEfSR7bWFuZGlyfS9tYW41CisJY2QgJHtEfSR7bWFuZGlyfS9tYW44ICYmIGxuIC1zIGlmdXAuOCBpZmRvd24uOAorfQorCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCitBTFRFUk5BVElWRV8ke1BOfSA9ICJpZnVwIGlmZG93biIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2lmdXBdID0gIiR7YmFzZV9zYmluZGlyfS9pZnVwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2lmZG93bl0gPSAiJHtiYXNlX3NiaW5kaXJ9L2lmZG93biIKKworSU5JVFNDUklQVF9OQU1FID0gImlmdXAiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAzOSBTIC4gc3RvcCAzOSAwIDYgMSAuIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODViYTM3NWYzYzZmMjZkMzRlZmIyYTg1NzVlNzdmYzgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDhkY2UxNDY5MmMwN2I3MmI1ODNiODZjNGQzYWNlMGQ5ZGFjMTkyODkyNTE0NGNjM2RkZGUxNWI2OTRlYmJkZiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2J1aWxkLWFwcGxpYW5jZS1pbWFnZS9Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvYnVpbGQtYXBwbGlhbmNlLWltYWdlL1lvY3RvX0J1aWxkX0FwcGxpYW5jZS52bXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ3MmU4NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2J1aWxkLWFwcGxpYW5jZS1pbWFnZS9Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14CkBAIC0wLDAgKzEsNDYgQEAKKy5lbmNvZGluZyA9ICJVVEYtOCIKK2NvbmZpZy52ZXJzaW9uID0gIjgiCit2aXJ0dWFsSFcudmVyc2lvbiA9ICIxMCIKK251bXZjcHVzID0gIjIiCit2Y3B1LmhvdGFkZCA9ICJUUlVFIgorbWVtc2l6ZSA9ICI0MDk2IgorbWVtLmhvdGFkZCA9ICJUUlVFIgorc2F0YTAucHJlc2VudCA9ICJUUlVFIgorc2F0YTA6MC5wcmVzZW50ID0gIlRSVUUiCitzYXRhMDowLmZpbGVOYW1lID0gIllvY3RvX0J1aWxkX0FwcGxpYW5jZS52bWRrIgorZXRoZXJuZXQwLnByZXNlbnQgPSAiVFJVRSIKK2V0aGVybmV0MC52aXJ0dWFsRGV2ID0gImUxMDAwIgorZXRoZXJuZXQwLndha2VPblBja3RSY3YgPSAiRkFMU0UiCitldGhlcm5ldDAuYWRkcmVzc1R5cGUgPSAiZ2VuZXJhdGVkIgordXNiLnByZXNlbnQgPSAiVFJVRSIKK2VoY2kucGNpU2xvdE51bWJlciA9ICIwIgorc291bmQucHJlc2VudCA9ICJUUlVFIgorc291bmQuZmlsZU5hbWUgPSAiLTEiCitzb3VuZC5hdXRvZGV0ZWN0ID0gIlRSVUUiCitwY2lCcmlkZ2UwLnByZXNlbnQgPSAiVFJVRSIKK3BjaUJyaWRnZTQucHJlc2VudCA9ICJUUlVFIgorcGNpQnJpZGdlNC52aXJ0dWFsRGV2ID0gInBjaWVSb290UG9ydCIKK3BjaUJyaWRnZTQuZnVuY3Rpb25zID0gIjgiCitwY2lCcmlkZ2U1LnByZXNlbnQgPSAiVFJVRSIKK3BjaUJyaWRnZTUudmlydHVhbERldiA9ICJwY2llUm9vdFBvcnQiCitwY2lCcmlkZ2U1LmZ1bmN0aW9ucyA9ICI4IgorcGNpQnJpZGdlNi5wcmVzZW50ID0gIlRSVUUiCitwY2lCcmlkZ2U2LnZpcnR1YWxEZXYgPSAicGNpZVJvb3RQb3J0IgorcGNpQnJpZGdlNi5mdW5jdGlvbnMgPSAiOCIKK3BjaUJyaWRnZTcucHJlc2VudCA9ICJUUlVFIgorcGNpQnJpZGdlNy52aXJ0dWFsRGV2ID0gInBjaWVSb290UG9ydCIKK3BjaUJyaWRnZTcuZnVuY3Rpb25zID0gIjgiCit2bWNpMC5wcmVzZW50ID0gIlRSVUUiCitocGV0MC5wcmVzZW50ID0gIlRSVUUiCit1c2IudmJsdWV0b290aC5zdGFydENvbm5lY3RlZCA9ICJUUlVFIgorZGlzcGxheU5hbWUgPSAiWW9jdG8gQnVpbGQgQXBwbGlhbmNlIgorZ3Vlc3RPUyA9ICJvdGhlcjN4bGludXgtNjQiCit2aXJ0dWFsSFcucHJvZHVjdENvbXBhdGliaWxpdHkgPSAiaG9zdGVkIgorZ3VpLmV4aXRPbkNMSUhMVCA9ICJGQUxTRSIKK3Bvd2VyVHlwZS5wb3dlck9mZiA9ICJzb2Z0IgorcG93ZXJUeXBlLnBvd2VyT24gPSAic29mdCIKK3Bvd2VyVHlwZS5zdXNwZW5kID0gInNvZnQiCitwb3dlclR5cGUucmVzZXQgPSAic29mdCIKK2V4dGVuZGVkQ29uZmlnRmlsZSA9ICJZb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14ZiIKK3Njc2kwOjAucHJlc2VudCA9ICJGQUxTRSIKK2Zsb3BweTAucHJlc2VudCA9ICJGQUxTRSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2J1aWxkLWFwcGxpYW5jZS1pbWFnZS9Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14ZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2J1aWxkLWFwcGxpYW5jZS1pbWFnZS9Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTk0MWZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvYnVpbGQtYXBwbGlhbmNlLWltYWdlL1lvY3RvX0J1aWxkX0FwcGxpYW5jZS52bXhmCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8Rm91bmRyeT4KKzxWTT4KKzxWTUlkIHR5cGU9InN0cmluZyI+NTIgYTUgZDggY2IgZWQgNmMgODUgNDgtY2QgOTkgNjggYWYgY2MgMzAgYTAgOTg8L1ZNSWQ+Cis8Q2xpZW50TWV0YURhdGE+Cis8Y2xpZW50TWV0YURhdGFBdHRyaWJ1dGVzLz4KKzxIaXN0b3J5RXZlbnRMaXN0Lz48L0NsaWVudE1ldGFEYXRhPgorPHZteFBhdGhOYW1lIHR5cGU9InN0cmluZyI+WW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZteDwvdm14UGF0aE5hbWU+PC9WTT48L0ZvdW5kcnk+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9idWlsZC1hcHBsaWFuY2UtaW1hZ2VfMTIuMC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvYnVpbGQtYXBwbGlhbmNlLWltYWdlXzEyLjAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTg2YmE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvYnVpbGQtYXBwbGlhbmNlLWltYWdlXzEyLjAuMS5iYgpAQCAtMCwwICsxLDkzIEBACitTVU1NQVJZID0gIkFuIGltYWdlIGNvbnRhaW5pbmcgdGhlIGJ1aWxkIHN5c3RlbSBpdHNlbGYiCitERVNDUklQVElPTiA9ICJBbiBpbWFnZSBjb250YWluaW5nIHRoZSBidWlsZCBzeXN0ZW0gdGhhdCB5b3UgY2FuIGJvb3QgYW5kIHJ1biB1c2luZyBlaXRoZXIgVk13YXJlIFBsYXllciBvciBWTXdhcmUgV29ya3N0YXRpb24uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3VtZW50YXRpb24vYnVpbGQtYXBwbGlhbmNlIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitJTUFHRV9JTlNUQUxMID0gInBhY2thZ2Vncm91cC1jb3JlLWJvb3QgcGFja2FnZWdyb3VwLWNvcmUtc3NoLW9wZW5zc2ggcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkIgorCitJTUFHRV9GRUFUVVJFUyArPSAieDExLWJhc2UgcGFja2FnZS1tYW5hZ2VtZW50IHNwbGFzaCIKKworIyBFbnN1cmUgdGhlcmUncyBlbm91Z2ggc3BhY2UgdG8gZG8gYSBjb3JlLWltYWdlLXNhdG8gYnVpbGQsIHdpdGggcm1fd29yayBlbmFibGVkCitJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UgPSAiNDE5NDMwNDAiCisKKyMgRG8gYSBxdWlldCBib290IHdpdGggbGltaXRlZCBjb25zb2xlIG1lc3NhZ2VzCitBUFBFTkQgKz0gInJvb3Rmc3R5cGU9ZXh0NCBxdWlldCIKKworREVQRU5EUyA9ICJ6aXAtbmF0aXZlIgorSU1BR0VfRlNUWVBFUyA9ICJ2bWRrIgorCitpbmhlcml0IGNvcmUtaW1hZ2UKKworU1JDUkVWID89ICJkMDFjZDUzNDI5YjFjMjBmMDFkYWM5N2YxYjliNjU5Y2I5ZGM5ODEyIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5IFwKKyAgICAgICAgICAgZmlsZTovL1lvY3RvX0J1aWxkX0FwcGxpYW5jZS52bXggXAorICAgICAgICAgICBmaWxlOi8vWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZteGYgXAorICAgICAgICAgICIKKworSU1BR0VfQ01EX2V4dDRfYXBwZW5kICgpIHsKKwkjIFdlIGRvbid0IG5lZWQgdG8gcmVzZXJ2ZSBtdWNoIHNwYWNlIGZvciByb290LCAwLjUlIGlzIG1vcmUgdGhhbiBlbm91Z2gKKwl0dW5lMmZzIC1tIDAuNSAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmV4dDQKK30KKworZmFrZXJvb3QgZG9fcG9wdWxhdGVfcG9reV9zcmMgKCkgeworCSMgQmVjYXVzZSBmZXRjaDIncyBnaXQncyB1bnBhY2sgdXNlcyAtcyBjbG9uZWZsYWcsIHRoZSB1bnBhY2tlZCBnaXQgcmVwbworCSMgd2lsbCBiZWNvbWUgaW52YWxpZCBpbiB0aGUgdGFyZ2V0LgorCXJtIC1yZiAke1dPUktESVJ9L2dpdC8uZ2l0CisJcm0gLWYgJHtXT1JLRElSfS9naXQvLmdpdGlnbm9yZQorCisJY3AgLVJwICR7V09SS0RJUn0vZ2l0ICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcG9reQorCisJbWtkaXIgLXAgJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci9wb2t5L2J1aWxkL2NvbmYKKwlta2RpciAtcCAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kvYnVpbGQvZG93bmxvYWRzCisJY3AgLVJwTCAke0RMX0RJUn0vKiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kvYnVpbGQvZG93bmxvYWRzLworCisJIyBSZW1vdmUgdGhlIGdpdDJfKiB0YXJiYWxscyAtLSB0aGlzIGlzIG9rIHNpbmNlIHdlIHN0aWxsIGhhdmUgdGhlIGdpdDIvLgorCXJtIC1yZiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kvYnVpbGQvZG93bmxvYWRzL2dpdDJfKgorCisJZWNobyAiL3Vzci9iaW4iID4gJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci9wb2t5L2J1aWxkL3BzZXVkb2RvbmUKKwllY2hvICJJTkhFUklUICs9IFwicm1fd29ya1wiIiA+PiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kvYnVpbGQvY29uZi9hdXRvLmNvbmYKKwlta2RpciAtcCAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3BzZXVkbworCWVjaG8gImV4cG9ydCBQU0VVRE9fUFJFRklYPS91c3IiID4+ICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvLmJhc2hyYworCWVjaG8gImV4cG9ydCBQU0VVRE9fTE9DQUxTVEFURURJUj0vaG9tZS9idWlsZGVyL3BzZXVkbyIgPj4gJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci8uYmFzaHJjCisJZWNobyAiZXhwb3J0IFBTRVVET19MSUJESVI9L3Vzci9saWIvcHNldWRvL2xpYjY0IiA+PiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyLy5iYXNocmMKKworCWNob3duIGJ1aWxkZXIuYnVpbGRlciAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3BzZXVkbworCisJY2hvd24gLVIgYnVpbGRlci5idWlsZGVyICAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kKKworCSMgQWxsb3cgYnVpbGRlciB0byB1c2Ugc3VkbyB0byBzZXR1cCB0YXAvdHVuCisJZWNobyAiYnVpbGRlciBBTEw9KEFMTCkgTk9QQVNTV0Q6IEFMTCIgPj4gJHtJTUFHRV9ST09URlN9L2V0Yy9zdWRvZXJzCisKKwkjIFVzZSBDbGVhcmxvb2tzIEdUSysgdGhlbWUKKwlta2RpciAtcCAke0lNQUdFX1JPT1RGU30vZXRjL2d0ay0yLjAKKwllY2hvICdndGstdGhlbWUtbmFtZSA9ICJDbGVhcmxvb2tzIicgPiAke0lNQUdFX1JPT1RGU30vZXRjL2d0ay0yLjAvZ3RrcmMKK30KKworSU1BR0VfUFJFUFJPQ0VTU19DT01NQU5EICs9ICJkb19wb3B1bGF0ZV9wb2t5X3NyYzsgIgorCithZGR0YXNrIHJvb3RmcyBhZnRlciBkb191bnBhY2sKKworcHl0aG9uICgpIHsKKwkjIEVuc3VyZSB3ZSBydW4gdGhlc2UgdXN1YWxseSBub2V4ZWMgdGFza3MKKwlkLmRlbFZhckZsYWcoImRvX2ZldGNoIiwgIm5vZXhlYyIpCisJZC5kZWxWYXJGbGFnKCJkb191bnBhY2siLCAibm9leGVjIikKK30KKworY3JlYXRlX2J1bmRsZV9maWxlcyAoKSB7CisJY2QgJHtXT1JLRElSfQorCW1rZGlyIC1wIFlvY3RvX0J1aWxkX0FwcGxpYW5jZQorCWNwICoudm14KiBZb2N0b19CdWlsZF9BcHBsaWFuY2UKKwlsbiAtc2YgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnZtZGsgWW9jdG9fQnVpbGRfQXBwbGlhbmNlL1lvY3RvX0J1aWxkX0FwcGxpYW5jZS52bWRrCisJemlwIC1yICR7REVQTE9ZX0RJUl9JTUFHRX0vWW9jdG9fQnVpbGRfQXBwbGlhbmNlLSR7REFURVRJTUV9LnppcCBZb2N0b19CdWlsZF9BcHBsaWFuY2UKKwlsbiAtc2YgWW9jdG9fQnVpbGRfQXBwbGlhbmNlLSR7REFURVRJTUV9LnppcCAke0RFUExPWV9ESVJfSU1BR0V9L1lvY3RvX0J1aWxkX0FwcGxpYW5jZS56aXAgCit9CisKK3B5dGhvbiBkb19idW5kbGVfZmlsZXMoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdjcmVhdGVfYnVuZGxlX2ZpbGVzJywgZCkKK30KKworYWRkdGFzayBidW5kbGVfZmlsZXMgYWZ0ZXIgZG9fdm1pbWcgYmVmb3JlIGRvX2J1aWxkCitkb19idW5kbGVfZmlsZXNbbm9zdGFtcF0gPSAiMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtYmFzZS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtYmFzZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWEwOGNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1iYXNlLmJiCkBAIC0wLDAgKzEsOCBAQAorU1VNTUFSWSA9ICJBIGNvbnNvbGUtb25seSBpbWFnZSB0aGF0IGZ1bGx5IHN1cHBvcnRzIHRoZSB0YXJnZXQgZGV2aWNlIFwKK2hhcmR3YXJlLiIKKworSU1BR0VfRkVBVFVSRVMgKz0gInNwbGFzaCIKKworTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgY29yZS1pbWFnZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLWRldi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC1kZXYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNlYWQyMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC1kZXYuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIGNvcmUtaW1hZ2UtbWluaW1hbC5iYgorCitERVNDUklQVElPTiA9ICJBIHNtYWxsIGltYWdlIGp1c3QgY2FwYWJsZSBvZiBhbGxvd2luZyBhIGRldmljZSB0byBib290IGFuZCBcCitpcyBzdWl0YWJsZSBmb3IgZGV2ZWxvcG1lbnQgd29yay4iCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJkZXYtcGtncyIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYwZmE5NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMuYmIKQEAgLTAsMCArMSwyMSBAQAorIyBTaW1wbGUgaW5pdHJhbWZzIGltYWdlLiBNb3N0bHkgdXNlZCBmb3IgbGl2ZSBpbWFnZXMuCitERVNDUklQVElPTiA9ICJTbWFsbCBpbWFnZSBjYXBhYmxlIG9mIGJvb3RpbmcgYSBkZXZpY2UuIFRoZSBrZXJuZWwgaW5jbHVkZXMgXAordGhlIE1pbmltYWwgUkFNLWJhc2VkIEluaXRpYWwgUm9vdCBGaWxlc3lzdGVtIChpbml0cmFtZnMpLCB3aGljaCBmaW5kcyB0aGUgXAorZmlyc3QgJ2luaXQnIHByb2dyYW0gbW9yZSBlZmZpY2llbnRseS4iCisKK1BBQ0tBR0VfSU5TVEFMTCA9ICJpbml0cmFtZnMtbGl2ZS1ib290IGluaXRyYW1mcy1saXZlLWluc3RhbGwgaW5pdHJhbWZzLWxpdmUtaW5zdGFsbC1lZmkgYnVzeWJveCB1ZGV2IGJhc2UtcGFzc3dkICR7Uk9PVEZTX0JPT1RTVFJBUF9JTlNUQUxMfSIKKworIyBEbyBub3QgcG9sbHV0ZSB0aGUgaW5pdHJkIGltYWdlIHdpdGggcm9vdGZzIGZlYXR1cmVzCitJTUFHRV9GRUFUVVJFUyA9ICIiCisKK2V4cG9ydCBJTUFHRV9CQVNFTkFNRSA9ICJjb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzIgorSU1BR0VfTElOR1VBUyA9ICIiCisKK0xJQ0VOU0UgPSAiTUlUIgorCitJTUFHRV9GU1RZUEVTID0gIiR7SU5JVFJBTUZTX0ZTVFlQRVN9IgoraW5oZXJpdCBjb3JlLWltYWdlCisKK0lNQUdFX1JPT1RGU19TSVpFID0gIjgxOTIiCisKK0JBRF9SRUNPTU1FTkRBVElPTlMgKz0gImJ1c3lib3gtc3lzbG9nIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLW10ZHV0aWxzLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLW10ZHV0aWxzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MjIzNGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwtbXRkdXRpbHMuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIGNvcmUtaW1hZ2UtbWluaW1hbC5iYgorCitERVNDUklQVElPTiA9ICJTbWFsbCBpbWFnZSBjYXBhYmxlIG9mIGJvb3RpbmcgYSBkZXZpY2Ugd2l0aCBzdXBwb3J0IGZvciB0aGUgXAorTWluaW1hbCBNVEQgVXRpbGl0aWVzLCB3aGljaCBsZXQgdGhlIHVzZXIgaW50ZXJhY3Qgd2l0aCB0aGUgTVREIHN1YnN5c3RlbSBpbiBcCit0aGUga2VybmVsIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBmbGFzaCBkZXZpY2VzLiIKKworSU1BR0VfSU5TVEFMTCArPSAibXRkLXV0aWxzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZDc3YjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwuYmIKQEAgLTAsMCArMSwxMiBAQAorU1VNTUFSWSA9ICJBIHNtYWxsIGltYWdlIGp1c3QgY2FwYWJsZSBvZiBhbGxvd2luZyBhIGRldmljZSB0byBib290LiIKKworSU1BR0VfSU5TVEFMTCA9ICJwYWNrYWdlZ3JvdXAtY29yZS1ib290ICR7Uk9PVEZTX1BLR01BTkFHRV9CT09UU1RSQVB9ICR7Q09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMfSIKKworSU1BR0VfTElOR1VBUyA9ICIgIgorCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBjb3JlLWltYWdlCisKK0lNQUdFX1JPT1RGU19TSVpFID89ICI4MTkyIgorSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFX2FwcGVuZCA9ICIke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgInN5c3RlbWQiLCAiICsgNDA5NiIsICIiICxkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvY29weXJpZ2h0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL2NvcHlyaWdodApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYThlMGQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL2NvcHlyaWdodApAQCAtMCwwICsxLDExIEBACitUaGlzIHBhY2thZ2Ugd2FzIGNyZWF0ZWQgYnkgUGV0ZXIgVG9iaWFzIHRvYmlhc0BldC1pbmYuZmhvLWVtZGVuLmRlIG9uCitXZWQsIDI0IEF1ZyAxOTk0IDIxOjMzOjI4ICswMjAwIGFuZCBtYWludGFpbmVkIGJ5IEFudGhvbnkgVG93bnMKKzxhanRAZGViaWFuLm9yZz4gdW50aWwgMjAwMS4KK0l0IGlzIGN1cnJlbnRseSBtYWludGFpbmVkIGJ5IE1hcmNvIGQnSXRyaSA8bWRAbGludXguaXQ+LgorCitDb3B5cmlnaHQgMTk5NC0yMDEwIFBldGVyIFRvYmlhcywgQW50aG9ueSBUb3ducyBhbmQgTWFyY28gZCdJdHJpCisKK1RoZSBwcm9ncmFtcyBpbiB0aGlzIHBhY2thZ2UgYXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIgYXMgZGlzdHJpYnV0ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uIE9uIERlYmlhbiBzeXN0ZW1zLCBhIGNvcHkgb2YgdGhpcyBsaWNlbnNlIG1heSBiZSBmb3VuZCBpbgorL3Vzci9zaGFyZS9jb21tb24tbGljZW5zZXMvR1BMLTIuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMzFjNjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvaW5pdApAQCAtMCwwICsxLDkwIEBACisjIS9iaW4vc2ggLWUKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIG5ldHdvcmtpbmcKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgIG1vdW50dmlydGZzICRsb2NhbF9mcworIyBSZXF1aXJlZC1TdG9wOiAgICAgJGxvY2FsX2ZzCisjIFNob3VsZC1TdGFydDogICAgICBpZnVwZG93bgorIyBTaG91bGQtU3RvcDogICAgICAgaWZ1cGRvd24KKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogUmFpc2UgbmV0d29yayBpbnRlcmZhY2VzLgorIyMjIEVORCBJTklUIElORk8KKworUEFUSD0iL3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluIgorCitbIC14IC9zYmluL2lmdXAgXSB8fCBleGl0IDAKKworY2hlY2tfbmV0d29ya19maWxlX3N5c3RlbXMoKSB7CisgICAgWyAtZSAvcHJvYy9tb3VudHMgXSB8fCByZXR1cm4gMAorCisgICAgaWYgWyAtZSAvZXRjL2lzY3NpL2lzY3NpLmluaXRyYW1mcyBdOyB0aGVuCisJZWNobyAibm90IGRlY29uZmlndXJpbmcgbmV0d29yayBpbnRlcmZhY2VzOiBpU0NTSSByb290IGlzIG1vdW50ZWQuIgorCWV4aXQgMAorICAgIGZpCisKKyAgICBleGVjIDk8JjAgPCAvcHJvYy9tb3VudHMKKyAgICB3aGlsZSByZWFkIERFViBNVFBUIEZTVFlQRSBSRVNUOyBkbworCWNhc2UgJERFViBpbgorCS9kZXYvbmJkKnwvZGV2L25kW2Etel0qfC9kZXYvZXRoZXJkL2UqKQorCSAgICBlY2hvICJub3QgZGVjb25maWd1cmluZyBuZXR3b3JrIGludGVyZmFjZXM6IG5ldHdvcmsgZGV2aWNlcyBzdGlsbCBtb3VudGVkLiIKKwkgICAgZXhpdCAwCisJICAgIDs7CisJZXNhYworCWNhc2UgJEZTVFlQRSBpbgorCW5mc3xuZnM0fHNtYmZzfG5jcHxuY3Bmc3xjaWZzfGNvZGF8b2NmczJ8Z2ZzfHB2ZnN8cHZmczJ8ZnVzZS5odHRwZnN8ZnVzZS5jdXJsZnRwZnMpCisJICAgIGVjaG8gIm5vdCBkZWNvbmZpZ3VyaW5nIG5ldHdvcmsgaW50ZXJmYWNlczogbmV0d29yayBmaWxlIHN5c3RlbXMgc3RpbGwgbW91bnRlZC4iCisJICAgIGV4aXQgMAorCSAgICA7OworCWVzYWMKKyAgICBkb25lCisgICAgZXhlYyAwPCY5IDk8Ji0KK30KKworY2hlY2tfbmV0d29ya19zd2FwKCkgeworICAgIFsgLWUgL3Byb2Mvc3dhcHMgXSB8fCByZXR1cm4gMAorCisgICAgZXhlYyA5PCYwIDwgL3Byb2Mvc3dhcHMKKyAgICB3aGlsZSByZWFkIERFViBNVFBUIEZTVFlQRSBSRVNUOyBkbworCWNhc2UgJERFViBpbgorCS9kZXYvbmJkKnwvZGV2L25kW2Etel0qfC9kZXYvZXRoZXJkL2UqKQorCSAgICBlY2hvICJub3QgZGVjb25maWd1cmluZyBuZXR3b3JrIGludGVyZmFjZXM6IG5ldHdvcmsgc3dhcCBzdGlsbCBtb3VudGVkLiIKKwkgICAgZXhpdCAwCisJICAgIDs7CisJZXNhYworICAgIGRvbmUKKyAgICBleGVjIDA8JjkgOTwmLQorfQorCitjYXNlICIkMSIgaW4KK3N0YXJ0KQorCWVjaG8gLW4gIkNvbmZpZ3VyaW5nIG5ldHdvcmsgaW50ZXJmYWNlcy4uLiAiCisJc3lzY3RsIC1lIC1wIC9ldGMvc3lzY3RsLmNvbmYgPi9kZXYvbnVsbCAyPiYxCisJaWZ1cCAtYQorCWVjaG8gImRvbmUuIgorCTs7CisKK3N0b3ApCisJY2hlY2tfbmV0d29ya19maWxlX3N5c3RlbXMKKwljaGVja19uZXR3b3JrX3N3YXAKKworCWVjaG8gLW4gIkRlY29uZmlndXJpbmcgbmV0d29yayBpbnRlcmZhY2VzLi4uICIKKwlpZmRvd24gLWEKKwllY2hvICJkb25lLiIKKwk7OworCitmb3JjZS1yZWxvYWR8cmVzdGFydCkKKwllY2hvICJSdW5uaW5nICQwICQxIGlzIGRlcHJlY2F0ZWQgYmVjYXVzZSBpdCBtYXkgbm90IGVuYWJsZSBhZ2FpbiBzb21lIGludGVyZmFjZXMiCisJZWNobyAiUmVjb25maWd1cmluZyBuZXR3b3JrIGludGVyZmFjZXMuLi4gIgorCWlmZG93biAtYSB8fCB0cnVlCisJaWZ1cCAtYQorCWVjaG8gImRvbmUuIgorCTs7CisKKyopCisJZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kL25ldHdvcmtpbmcge3N0YXJ0fHN0b3B9IgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvaW50ZXJmYWNlcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9pbnRlcmZhY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhY2Y0Y2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvaW50ZXJmYWNlcwpAQCAtMCwwICsxLDMxIEBACisjIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIC0tIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgaWZ1cCg4KSwgaWZkb3duKDgpCisgCisjIFRoZSBsb29wYmFjayBpbnRlcmZhY2UKK2F1dG8gbG8KK2lmYWNlIGxvIGluZXQgbG9vcGJhY2sKKworIyBXaXJlbGVzcyBpbnRlcmZhY2VzCitpZmFjZSB3bGFuMCBpbmV0IGRoY3AKKwl3aXJlbGVzc19tb2RlIG1hbmFnZWQKKwl3aXJlbGVzc19lc3NpZCBhbnkKKwl3cGEtZHJpdmVyIHdleHQKKwl3cGEtY29uZiAvZXRjL3dwYV9zdXBwbGljYW50LmNvbmYKKworaWZhY2UgYXRtbDAgaW5ldCBkaGNwCisKKyMgV2lyZWQgb3Igd2lyZWxlc3MgaW50ZXJmYWNlcworYXV0byBldGgwCitpZmFjZSBldGgwIGluZXQgZGhjcAoraWZhY2UgZXRoMSBpbmV0IGRoY3AKKworIyBFdGhlcm5ldC9STkRJUyBnYWRnZXQgKGdfZXRoZXIpCisjIC4uLiBvciBvbiBob3N0IHNpZGUsIHVzYm5ldCBhbmQgcmFuZG9tIGh3YWRkcgoraWZhY2UgdXNiMCBpbmV0IHN0YXRpYworCWFkZHJlc3MgMTkyLjE2OC43LjIKKwluZXRtYXNrIDI1NS4yNTUuMjU1LjAKKwluZXR3b3JrIDE5Mi4xNjguNy4wCisJZ2F0ZXdheSAxOTIuMTY4LjcuMQorCisjIEJsdWV0b290aCBuZXR3b3JraW5nCitpZmFjZSBibmVwMCBpbmV0IGRoY3AKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL25mc3Jvb3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvbmZzcm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTBjMGE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL25mc3Jvb3QKQEAgLTAsMCArMSwzOSBAQAorIyEgL2Jpbi9zaAorCisjIEluIGNhc2UgdGhlIGludGVyZmFjZSBpcyB1c2VkIGFzIG5mc3Jvb3QsIGF2b2lkIGlmdXAsIG90aGVyd2lzZQorIyBuZnNyb290IG1heSBsb3NlIHJlc3BvbnNlCisKK25mc3Jvb3Q9MAorCitpZiB0ZXN0ICJ4JElGQUNFIiA9IHhsbyA7IHRoZW4KKwlleGl0IDAKK2ZpCisKK2V4ZWMgOTwmMCA8IC9wcm9jL21vdW50cword2hpbGUgcmVhZCBkZXYgbXRwdCBmc3R5cGUgcmVzdDsgZG8KKyAgICBpZiB0ZXN0ICRtdHB0ID0gIi8iIDsgdGhlbgorICAgICAgICBjYXNlICRmc3R5cGUgaW4KKyAgICAgICAgICAgIG5mcyB8IG5mczQpCisgICAgICAgICAgICAgICAgbmZzcm9vdD0xCisgICAgICAgICAgICAgICAgbmZzX2FkZHI9YGVjaG8gJHJlc3QgfCBzZWQgLWUgJ3MvXi4qYWRkcj1cKFswLTkuXSpcKS4qJC9cMS8nYAorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgIGZpCitkb25lCitleGVjIDA8JjkgOTwmLQorCit0ZXN0ICRuZnNyb290IC1lcSAwICYmIGV4aXQgMAorCitpZiBbIC14IC9iaW4vaXAgLW8gLXggL3NiaW4vaXAgXSA7IHRoZW4KKyAgICBuZnNfaWZhY2U9YGlwIHJvdXRlIGdldCAkbmZzX2FkZHIgfCBncmVwIGRldiB8IHNlZCAtZSAncy9eLipkZXYgXChbLWEtejAtOS5dKlwpLiokL1wxLydgCitmaQorCitpZiB0ZXN0ICJ4JElGQUNFIiA9ICJ4JG5mc19pZmFjZSIgOyB0aGVuCisgICAgZWNobyAiaWZ1cCBza2lwcGVkIGZvciBuZnNyb290IGludGVyZmFjZSAkbmZzX2lmYWNlIgorICAgIGV4aXQgMQorZmkKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybS9pbnRlcmZhY2VzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVhcm0vaW50ZXJmYWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjk2Nzc2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVhcm0vaW50ZXJmYWNlcwpAQCAtMCwwICsxLDUgQEAKKyMgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgLS0gY29uZmlndXJhdGlvbiBmaWxlIGZvciBpZnVwKDgpLCBpZmRvd24oOCkKKyAKKyMgVGhlIGxvb3BiYWNrIGludGVyZmFjZQorYXV0byBsbworaWZhY2UgbG8gaW5ldCBsb29wYmFjawpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVhcm02NC9pbnRlcmZhY2VzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVhcm02NC9pbnRlcmZhY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2OTY3NzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybTY0L2ludGVyZmFjZXMKQEAgLTAsMCArMSw1IEBACisjIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIC0tIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgaWZ1cCg4KSwgaWZkb3duKDgpCisgCisjIFRoZSBsb29wYmFjayBpbnRlcmZhY2UKK2F1dG8gbG8KK2lmYWNlIGxvIGluZXQgbG9vcGJhY2sKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11YXJtdjYvaW50ZXJmYWNlcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11YXJtdjYvaW50ZXJmYWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjk2Nzc2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVhcm12Ni9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsNSBAQAorIyAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyAtLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGlmdXAoOCksIGlmZG93big4KQorIAorIyBUaGUgbG9vcGJhY2sgaW50ZXJmYWNlCithdXRvIGxvCitpZmFjZSBsbyBpbmV0IGxvb3BiYWNrCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybXY3L2ludGVyZmFjZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybXY3L2ludGVyZmFjZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY5Njc3NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11YXJtdjcvaW50ZXJmYWNlcwpAQCAtMCwwICsxLDUgQEAKKyMgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgLS0gY29uZmlndXJhdGlvbiBmaWxlIGZvciBpZnVwKDgpLCBpZmRvd24oOCkKKyAKKyMgVGhlIGxvb3BiYWNrIGludGVyZmFjZQorYXV0byBsbworaWZhY2UgbG8gaW5ldCBsb29wYmFjawpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVtaXBzL2ludGVyZmFjZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdW1pcHMvaW50ZXJmYWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjJiOWE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVtaXBzL2ludGVyZmFjZXMKQEAgLTAsMCArMSw4IEBACisjIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIC0tIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgaWZ1cCg4KSwgaWZkb3duKDgpCisgCisjIFRoZSBsb29wYmFjayBpbnRlcmZhY2UKK2F1dG8gbG8KK2lmYWNlIGxvIGluZXQgbG9vcGJhY2sKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11bWlwczY0L2ludGVyZmFjZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdW1pcHM2NC9pbnRlcmZhY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MmI5YTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdW1pcHM2NC9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsOCBAQAorIyAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyAtLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGlmdXAoOCksIGlmZG93big4KQorIAorIyBUaGUgbG9vcGJhY2sgaW50ZXJmYWNlCithdXRvIGxvCitpZmFjZSBsbyBpbmV0IGxvb3BiYWNrCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXBwYy9pbnRlcmZhY2VzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVwcGMvaW50ZXJmYWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjJiOWE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVwcGMvaW50ZXJmYWNlcwpAQCAtMCwwICsxLDggQEAKKyMgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgLS0gY29uZmlndXJhdGlvbiBmaWxlIGZvciBpZnVwKDgpLCBpZmRvd24oOCkKKyAKKyMgVGhlIGxvb3BiYWNrIGludGVyZmFjZQorYXV0byBsbworaWZhY2UgbG8gaW5ldCBsb29wYmFjaworCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVzaDQvaW50ZXJmYWNlcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11c2g0L2ludGVyZmFjZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyYjlhOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11c2g0L2ludGVyZmFjZXMKQEAgLTAsMCArMSw4IEBACisjIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIC0tIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgaWZ1cCg4KSwgaWZkb3duKDgpCisgCisjIFRoZSBsb29wYmFjayBpbnRlcmZhY2UKK2F1dG8gbG8KK2lmYWNlIGxvIGluZXQgbG9vcGJhY2sKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11eDg2LTY0L2ludGVyZmFjZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXg4Ni02NC9pbnRlcmZhY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MmI5YTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXg4Ni02NC9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsOCBAQAorIyAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyAtLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGlmdXAoOCksIGlmZG93big4KQorIAorIyBUaGUgbG9vcGJhY2sgaW50ZXJmYWNlCithdXRvIGxvCitpZmFjZSBsbyBpbmV0IGxvb3BiYWNrCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXg4Ni9pbnRlcmZhY2VzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXV4ODYvaW50ZXJmYWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjJiOWE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXV4ODYvaW50ZXJmYWNlcwpAQCAtMCwwICsxLDggQEAKKyMgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgLS0gY29uZmlndXJhdGlvbiBmaWxlIGZvciBpZnVwKDgpLCBpZmRvd24oOCkKKyAKKyMgVGhlIGxvb3BiYWNrIGludGVyZmFjZQorYXV0byBsbworaWZhY2UgbG8gaW5ldCBsb29wYmFjaworCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd25fMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd25fMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczM2FlNDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bl8xLjAuYmIKQEAgLTAsMCArMSw0MSBAQAorU1VNTUFSWSA9ICJCYXNpYyBUQ1AvSVAgbmV0d29ya2luZyBpbml0IHNjcmlwdHMgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMiCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgaGlnaCBsZXZlbCB0b29scyB0byBjb25maWd1cmUgbmV0d29yayBpbnRlcmZhY2VzIgorSE9NRVBBR0UgPSAiaHR0cDovL3BhY2thZ2VzLmRlYmlhbi5vcmcvaWZ1cGRvd24iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtXT1JLRElSfS9jb3B5cmlnaHQ7bWQ1PTNkZDYxOTJkMzA2ZjU4MmRlZTc2ODdkYTNkODc0OGFiIgorUFIgPSAicjciCisKK2luaGVyaXQgdXBkYXRlLXJjLmQKKworSU5JVFNDUklQVF9OQU1FID0gIm5ldHdvcmtpbmciCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAwMSAyIDMgNCA1IC4gc3RvcCA4MCAwIDYgMSAuIgorCitTUkNfVVJJID0gImZpbGU6Ly9jb3B5cmlnaHQgXAorICAgICAgICAgICBmaWxlOi8vaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9pbnRlcmZhY2VzIFwKKyAgICAgICAgICAgZmlsZTovL25mc3Jvb3QiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQgXAorCQkJJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1wcmUtdXAuZCBcCisJCQkke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXVwLmQgXAorCQkJJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1kb3duLmQgXAorCQkJJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1wb3N0LWRvd24uZAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL25ldHdvcmtpbmcKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9pbnRlcmZhY2VzICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaW50ZXJmYWNlcworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L25mc3Jvb3QgJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1wcmUtdXAuZAorfQorCitkb19pbnN0YWxsX2FwcGVuZF9xZW11YWxsICgpIHsKKwkjIERpc2FibGUgbmV0d29yayBtYW5hZ2VyIG9uIG1hY2hpbmVzIHRoYXQgY29tbW9ubHkgZG8gTkZTIGJvb3RpbmcKKwl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL25tLWRpc2FibGVkLWV0aDAKK30KKworUEFDS0FHRV9BUkNIX3FlbXVhbGwgPSAiJHtNQUNISU5FX0FSQ0h9IgorUkRFUEVORFNfJHtQTn0gPSAibmV0YmFzZSIKK1JDT05GTElDVFNfJHtQTn0gPSAibmV0YmFzZSAoPCAxOjUuMCkiCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L25ldHdvcmsvaW50ZXJmYWNlcyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWJvb3Quc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1ib290LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MmViYTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1ib290LnNoCkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaAorCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKK21rZGlyIC9wcm9jCitta2RpciAvc3lzCittb3VudCAtdCBwcm9jIHByb2MgL3Byb2MKK21vdW50IC10IHN5c2ZzIHN5c2ZzIC9zeXMKKworZXhlYyBzaApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC1lZmktdGVzdGZzLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC1lZmktdGVzdGZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMGI0ZDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1pbnN0YWxsLWVmaS10ZXN0ZnMuc2gKQEAgLTAsMCArMSwxOTkgQEAKKyMhL2Jpbi9zaCAtZQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBpbnN0YWxsLnNoIFtkZXZpY2VfbmFtZV0gW3Jvb3Rmc19uYW1lXQorIworCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKKyMgV2UgbmVlZCAyMDAgTWIgZm9yIHRoZSBib290IHBhcnRpdGlvbgorYm9vdF9zaXplPTIwMAorCisjIDUwJSBmb3IgdGhlIHNlY29uZCByb290ZnMKK3Rlc3Rmc19yYXRpbz01MAorCitmb3VuZD0ibm8iCisKK2VjaG8gIlNlYXJjaGluZyBmb3IgYSBoYXJkIGRyaXZlLi4uIgorZm9yIGRldmljZSBpbiAnaGRhJyAnaGRiJyAnc2RhJyAnc2RiJyAnbW1jYmxrMCcgJ21tY2JsazEnCitkbworICAgIGlmIFsgLWUgL3N5cy9ibG9jay8ke2RldmljZX0vcmVtb3ZhYmxlIF07IHRoZW4KKyAgICAgICAgaWYgWyAiJChjYXQgL3N5cy9ibG9jay8ke2RldmljZX0vcmVtb3ZhYmxlKSIgPSAiMCIgXTsgdGhlbgorICAgICAgICAgICAgZm91bmQ9InllcyIKKworICAgICAgICAgICAgd2hpbGUgdHJ1ZTsgZG8KKyAgICAgICAgICAgICAgICAjIFRyeSBzbGVlcGluZyBoZXJlIHRvIGF2b2lkIGdldHRpbmcga2VybmVsIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgIyBvYnNjdXJpbmcvY29uZnVzaW5nIHVzZXIKKyAgICAgICAgICAgICAgICBzbGVlcCA1CisgICAgICAgICAgICAgICAgZWNobyAiRm91bmQgZHJpdmUgYXQgL2Rldi8ke2RldmljZX0uIERvIHlvdSB3YW50IHRvIGluc3RhbGwgdGhpcyBpbWFnZSB0aGVyZSA/IFt5L25dIgorICAgICAgICAgICAgICAgIHJlYWQgYW5zd2VyCisgICAgICAgICAgICAgICAgaWYgWyAiJGFuc3dlciIgPSAieSIgXSA7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBmaQorCisgICAgICAgICAgICAgICAgaWYgWyAiJGFuc3dlciIgPSAibiIgXSA7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZm91bmQ9bm8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBmaQorCisgICAgICAgICAgICAgICAgZWNobyAiUGxlYXNlIGFuc3dlciB5IG9yIG4iCisgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisgICAgZmkKKworICAgIGlmIFsgIiRmb3VuZCIgPSAieWVzIiBdOyB0aGVuCisgICAgICAgIGJyZWFrOworICAgIGZpCisKK2RvbmUKKworaWYgWyAiJGZvdW5kIiA9ICJubyIgXTsgdGhlbgorICAgIGV4aXQgMQorZmkKKworZWNobyAiSW5zdGFsbGluZyBpbWFnZSBvbiAvZGV2LyR7ZGV2aWNlfSIKKworIworIyBUaGUgdWRldiBhdXRvbW91bnRlciBjYW4gY2F1c2UgcGFpbiBoZXJlLCBraWxsIGl0CisjCitybSAtZiAvZXRjL3VkZXYvcnVsZXMuZC9hdXRvbW91bnQucnVsZXMKK3JtIC1mIC9ldGMvdWRldi9zY3JpcHRzL21vdW50KgorCisjCisjIFVubW91bnQgYW55dGhpbmcgdGhlIGF1dG9tb3VudGVyIGhhZCBtb3VudGVkCisjCit1bW91bnQgL2Rldi8ke2RldmljZX0qIDI+IC9kZXYvbnVsbCB8fCAvYmluL3RydWUKKworbWtkaXIgLXAgL3RtcAorY2F0IC9wcm9jL21vdW50cyA+IC9ldGMvbXRhYgorCitkaXNrX3NpemU9JChwYXJ0ZWQgL2Rldi8ke2RldmljZX0gdW5pdCBtYiBwcmludCB8IGdyZXAgRGlzayB8IGN1dCAtZCIgIiAtZiAzIHwgc2VkIC1lICJzL01CLy8iKQorCit0ZXN0ZnNfc2l6ZT0kKChkaXNrX3NpemUqdGVzdGZzX3JhdGlvLzEwMCkpCityb290ZnNfc2l6ZT0kKChkaXNrX3NpemUtYm9vdF9zaXplLXRlc3Rmc19zaXplKSkKKworcm9vdGZzX3N0YXJ0PSQoKGJvb3Rfc2l6ZSkpCityb290ZnNfZW5kPSQoKHJvb3Rmc19zdGFydCtyb290ZnNfc2l6ZSkpCit0ZXN0ZnNfc3RhcnQ9JCgocm9vdGZzX2VuZCkpCisKKyMgTU1DIGRldmljZXMgYXJlIHNwZWNpYWwgaW4gYSBjb3VwbGUgb2Ygd2F5cworIyAxKSB0aGV5IHVzZSBhIHBhcnRpdGlvbiBwcmVmaXggY2hhcmFjdGVyICdwJworIyAyKSB0aGV5IGFyZSBkZXRlY3RlZCBhc3luY2hyb25vdXNseSAobmVlZCByb290d2FpdCkKK3Jvb3R3YWl0PSIiCitwYXJ0X3ByZWZpeD0iIgoraWYgWyAhICIke2RldmljZSNtbWNibGt9IiA9ICIke2RldmljZX0iIF07IHRoZW4KKyAgICBwYXJ0X3ByZWZpeD0icCIKKyAgICByb290d2FpdD0icm9vdHdhaXQiCitmaQorYm9vdGZzPS9kZXYvJHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0xCityb290ZnM9L2Rldi8ke2RldmljZX0ke3BhcnRfcHJlZml4fTIKK3Rlc3Rmcz0vZGV2LyR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9MworCitlY2hvICIqKioqKioqKioqKioqKioqKiIKK2VjaG8gIkJvb3QgcGFydGl0aW9uIHNpemU6ICAgJGJvb3Rfc2l6ZSBNQiAoJGJvb3RmcykiCitlY2hvICJSb290ZnMgcGFydGl0aW9uIHNpemU6ICRyb290ZnNfc2l6ZSBNQiAoJHJvb3RmcykiCitlY2hvICJUZXN0ZnMgcGFydGl0aW9uIHNpemU6ICAgJHRlc3Rmc19zaXplIE1CICgkdGVzdGZzKSIKK2VjaG8gIioqKioqKioqKioqKioqKioqIgorZWNobyAiRGVsZXRpbmcgcGFydGl0aW9uIHRhYmxlIG9uIC9kZXYvJHtkZXZpY2V9IC4uLiIKK2RkIGlmPS9kZXYvemVybyBvZj0vZGV2LyR7ZGV2aWNlfSBicz01MTIgY291bnQ9MgorCitlY2hvICJDcmVhdGluZyBuZXcgcGFydGl0aW9uIHRhYmxlIG9uIC9kZXYvJHtkZXZpY2V9IC4uLiIKK3BhcnRlZCAvZGV2LyR7ZGV2aWNlfSBta2xhYmVsIGdwdAorCitlY2hvICJDcmVhdGluZyBib290IHBhcnRpdGlvbiBvbiAkYm9vdGZzIgorcGFydGVkIC9kZXYvJHtkZXZpY2V9IG1rcGFydCBwcmltYXJ5IDAlICRib290X3NpemUKK3BhcnRlZCAvZGV2LyR7ZGV2aWNlfSBzZXQgMSBib290IG9uCisKK2VjaG8gIkNyZWF0aW5nIHJvb3RmcyBwYXJ0aXRpb24gb24gJHJvb3RmcyIKK3BhcnRlZCAvZGV2LyR7ZGV2aWNlfSBta3BhcnQgcHJpbWFyeSAkcm9vdGZzX3N0YXJ0ICRyb290ZnNfZW5kCisKK2VjaG8gIkNyZWF0aW5nIHRlc3RmcyBwYXJ0aXRpb24gb24gJHRlc3RmcyIKK3BhcnRlZCAvZGV2LyR7ZGV2aWNlfSBta3BhcnQgcHJpbWFyeSAkdGVzdGZzX3N0YXJ0IDEwMCUKKworcGFydGVkIC9kZXYvJHtkZXZpY2V9IHByaW50CisKK2VjaG8gIkZvcm1hdHRpbmcgJGJvb3RmcyB0byB2ZmF0Li4uIgorbWtmcy52ZmF0IC1uICJib290IiAkYm9vdGZzCisKK2VjaG8gIkZvcm1hdHRpbmcgJHJvb3RmcyB0byBleHQzLi4uIgorbWtmcy5leHQzIC1MICJwbGF0Zm9ybSIgJHJvb3RmcworCitlY2hvICJGb3JtYXR0aW5nICR0ZXN0ZnMgdG8gZXh0My4uLiIKK21rZnMuZXh0MyAtTCAidGVzdHJvb3RmcyIgJHRlc3RmcworCitta2RpciAvc3NkCitta2RpciAvcm9vdG1udAorbWtkaXIgL2Jvb3RtbnQKKworbW91bnQgJHJvb3RmcyAvc3NkCittb3VudCAtbyBydyxsb29wLG5vYXRpbWUsbm9kaXJhdGltZSAvcnVuL21lZGlhLyQxLyQyIC9yb290bW50CisKK2VjaG8gIkNvcHlpbmcgcm9vdGZzIGZpbGVzLi4uIgorY3AgLWEgL3Jvb3RtbnQvKiAvc3NkCisKK3RvdWNoIC9zc2QvZXRjL21hc3RlcmltYWdlCisKK2lmIFsgLWQgL3NzZC9ldGMvIF0gOyB0aGVuCisgICAgIyBXZSBkb250IHdhbnQgdWRldiB0byBtb3VudCBvdXIgcm9vdCBkZXZpY2Ugd2hpbGUgd2UncmUgYm9vdGluZy4uLgorICAgIGlmIFsgLWQgL3NzZC9ldGMvdWRldi8gXSA7IHRoZW4KKyAgICAgICAgZWNobyAiL2Rldi8ke2RldmljZX0iID4+IC9zc2QvZXRjL3VkZXYvbW91bnQuYmxhY2tsaXN0CisgICAgZmkKK2ZpCisKK3Vtb3VudCAvc3NkCit1bW91bnQgL3Jvb3RtbnQKKworZWNobyAiUHJlcGFyaW5nIGJvb3QgcGFydGl0aW9uLi4uIgorbW91bnQgJGJvb3RmcyAvc3NkCisKK0VGSURJUj0iL3NzZC9FRkkvQk9PVCIKK21rZGlyIC1wICRFRklESVIKK2NwIC9ydW4vbWVkaWEvJDEvdm1saW51eiAvc3NkCisjIENvcHkgdGhlIGVmaSBsb2FkZXIKK2NwIC9ydW4vbWVkaWEvJDEvRUZJL0JPT1QvKi5lZmkgJEVGSURJUgorCitpZiBbIC1mIC9ydW4vbWVkaWEvJDEvRUZJL0JPT1QvZ3J1Yi5jZmcgXTsgdGhlbgorICAgIEdSVUJDRkc9IiRFRklESVIvZ3J1Yi5jZmciCisgICAgY3AgL3J1bi9tZWRpYS8kMS9FRkkvQk9PVC9ncnViLmNmZyAkR1JVQkNGRworICAgICMgVXBkYXRlIGdydWIgY29uZmlnIGZvciB0aGUgaW5zdGFsbGVkIGltYWdlCisgICAgIyBEZWxldGUgdGhlIGluc3RhbGwgZW50cnkKKyAgICBzZWQgLWkgIi9tZW51ZW50cnkgJ2luc3RhbGwnLywvXn0vZCIgJEdSVUJDRkcKKyAgICAjIERlbGV0ZSB0aGUgaW5pdHJkIGxpbmVzCisgICAgc2VkIC1pICIvaW5pdHJkIC9kIiAkR1JVQkNGRworICAgICMgRGVsZXRlIGFueSBMQUJFTD0gc3RyaW5ncworICAgIHNlZCAtaSAicy8gTEFCRUw9W14gXSovIC8iICRHUlVCQ0ZHCisgICAgIyBEZWxldGUgYW55IHJvb3Q9IHN0cmluZ3MKKyAgICBzZWQgLWkgInMvIHJvb3Q9W14gXSovIC8iICRHUlVCQ0ZHCisgICAgIyBBZGQgdGhlIHJvb3Q9IGFuZCBvdGhlciBzdGFuZGFyZCBib290IG9wdGlvbnMKKyAgICBzZWQgLWkgInNAbGludXggL3ZtbGludXogKkBsaW51eCAvdm1saW51eiByb290PSRyb290ZnMgcncgJHJvb3R3YWl0IHF1aWV0IEAiICRHUlVCQ0ZHCitmaQorCitpZiBbIC1kIC9ydW4vbWVkaWEvJDEvbG9hZGVyIF07IHRoZW4KKyAgICBHVU1NSUJPT1RfQ0ZHUz0iL3NzZC9sb2FkZXIvZW50cmllcy8qLmNvbmYiCisgICAgIyBjb3B5IGNvbmZpZyBmaWxlcyBmb3IgZ3VtbWlib290CisgICAgY3AgLWRyIC9ydW4vbWVkaWEvJDEvbG9hZGVyIC9zc2QKKyAgICAjIGRlbGV0ZSB0aGUgaW5zdGFsbCBlbnRyeQorICAgIHJtIC1mIC9zc2QvbG9hZGVyL2VudHJpZXMvaW5zdGFsbC5jb25mCisgICAgIyBkZWxldGUgdGhlIGluaXRyZCBsaW5lcworICAgIHNlZCAtaSAiL2luaXRyZCAvZCIgJEdVTU1JQk9PVF9DRkdTCisgICAgIyBkZWxldGUgYW55IExBQkVMPSBzdHJpbmdzCisgICAgc2VkIC1pICJzLyBMQUJFTD1bXiBdKi8gLyIgJEdVTU1JQk9PVF9DRkdTCisgICAgIyBkZWxldGUgYW55IHJvb3Q9IHN0cmluZ3MKKyAgICBzZWQgLWkgInMvIHJvb3Q9W14gXSovIC8iICRHVU1NSUJPT1RfQ0ZHUworICAgICMgYWRkIHRoZSByb290PSBhbmQgb3RoZXIgc3RhbmRhcmQgYm9vdCBvcHRpb25zCisgICAgc2VkIC1pICJzQG9wdGlvbnMgKkBvcHRpb25zIHJvb3Q9JHJvb3RmcyBydyAkcm9vdHdhaXQgcXVpZXQgQCIgJEdVTU1JQk9PVF9DRkdTCisgICAgIyBBZGQgdGhlIHRlc3QgbGFiZWwKKyAgICBlY2hvIC1uZSAidGl0bGUgdGVzdFxubGludXggL3Rlc3Qta2VybmVsXG5vcHRpb25zIHJvb3Q9JHRlc3RmcyBydyAkcm9vdHdhaXQgcXVpZXRcbiIgPiAvc3NkL2xvYWRlci9lbnRyaWVzL3Rlc3QuY29uZgorZmkKKwordW1vdW50IC9zc2QKK3N5bmMKKworZWNobyAiUmVtb3ZlIHlvdXIgaW5zdGFsbGF0aW9uIG1lZGlhLCBhbmQgcHJlc3MgRU5URVIiCisKK3JlYWQgZW50ZXIKKworZWNobyAiUmVib290aW5nLi4uIgorcmVib290IC1mCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1pbnN0YWxsLWVmaS5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwtZWZpLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZWQ3NGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1pbnN0YWxsLWVmaS5zaApAQCAtMCwwICsxLDI1MCBAQAorIyEvYmluL3NoIC1lCisjCisjIENvcHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIGluc3RhbGwuc2ggW2RldmljZV9uYW1lXSBbcm9vdGZzX25hbWVdCisjCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworIyBXZSBuZWVkIDIwIE1iIGZvciB0aGUgYm9vdCBwYXJ0aXRpb24KK2Jvb3Rfc2l6ZT0yMAorCisjIDUlIGZvciBzd2FwCitzd2FwX3JhdGlvPTUKKworIyBHZXQgYSBsaXN0IG9mIGhhcmQgZHJpdmVzCitoZG5hbWVsaXN0PSIiCitsaXZlX2Rldl9uYW1lPWBjYXQgL3Byb2MvbW91bnRzIHwgZ3JlcCAkezElL30gfCBhd2sgJ3twcmludCAkMX0nYAorbGl2ZV9kZXZfbmFtZT0ke2xpdmVfZGV2X25hbWUjXC9kZXYvfQorIyBPbmx5IHN0cmlwIHRoZSBkaWdpdCBpZGVudGlmaWVyIGlmIHRoZSBkZXZpY2UgaXMgbm90IGFuIG1tYworY2FzZSAkbGl2ZV9kZXZfbmFtZSBpbgorICAgIG1tY2JsayopCisgICAgOzsKKyAgICAqKQorICAgICAgICBsaXZlX2Rldl9uYW1lPSR7bGl2ZV9kZXZfbmFtZSUlWzAtOV0qfQorICAgIDs7Citlc2FjCisKK2VjaG8gIlNlYXJjaGluZyBmb3IgaGFyZCBkcml2ZXMgLi4uIgorCitmb3IgZGV2aWNlIGluIGBscyAvc3lzL2Jsb2NrL2A7IGRvCisgICAgY2FzZSAkZGV2aWNlIGluCisgICAgICAgIGxvb3AqKQorICAgICAgICAgICAgIyBza2lwIGxvb3AgZGV2aWNlCisgICAgICAgICAgICA7OworICAgICAgICBzciopCisgICAgICAgICAgICAjIHNraXAgQ0RST00gZGV2aWNlCisgICAgICAgICAgICA7OworICAgICAgICByYW0qKQorICAgICAgICAgICAgIyBza2lwIHJhbSBkZXZpY2UKKyAgICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgICAjIHNraXAgdGhlIGRldmljZSBMaXZlT1MgaXMgb24KKyAgICAgICAgICAgICMgQWRkIHZhbGlkIGhhcmQgZHJpdmUgbmFtZSB0byB0aGUgbGlzdAorICAgICAgICAgICAgY2FzZSAkZGV2aWNlIGluCisgICAgICAgICAgICAgICAgJGxpdmVfZGV2X25hbWUqKQorICAgICAgICAgICAgICAgICMgc2tpcCB0aGUgZGV2aWNlIHdlIGFyZSBydW5uaW5nIGZyb20KKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgIGhkbmFtZWxpc3Q9IiRoZG5hbWVsaXN0ICRkZXZpY2UiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworZG9uZQorCitpZiBbIC16ICIke2hkbmFtZWxpc3R9IiBdOyB0aGVuCisgICAgZWNobyAiWW91IG5lZWQgYW5vdGhlciBkZXZpY2UgKGJlc2lkZXMgdGhlIGxpdmUgZGV2aWNlIC9kZXYvJHtsaXZlX2Rldl9uYW1lfSkgdG8gaW5zdGFsbCB0aGUgaW1hZ2UuIEluc3RhbGxhdGlvbiBhYm9ydGVkLiIKKyAgICBleGl0IDEKK2ZpCisKK1RBUkdFVF9ERVZJQ0VfTkFNRT0iIgorZm9yIGhkbmFtZSBpbiAkaGRuYW1lbGlzdDsgZG8KKyAgICAjIERpc3BsYXkgZm91bmQgaGFyZCBkcml2ZXMgYW5kIHRoZWlyIGJhc2ljIGluZm8KKyAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICAgIGVjaG8gL2Rldi8kaGRuYW1lCisgICAgaWYgWyAtciAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3ZlbmRvciBdOyB0aGVuCisgICAgICAgIGVjaG8gLW4gIlZFTkRPUj0iCisgICAgICAgIGNhdCAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3ZlbmRvcgorICAgIGZpCisgICAgaWYgWyAtciAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL21vZGVsIF07IHRoZW4KKyAgICAgICAgZWNobyAtbiAiTU9ERUw9IgorICAgICAgICBjYXQgL3N5cy9ibG9jay8kaGRuYW1lL2RldmljZS9tb2RlbAorICAgIGZpCisgICAgaWYgWyAtciAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3VldmVudCBdOyB0aGVuCisgICAgICAgIGVjaG8gLW4gIlVFVkVOVD0iCisgICAgICAgIGNhdCAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3VldmVudAorICAgIGZpCisgICAgZWNobworICAgICMgR2V0IHVzZXIgY2hvaWNlCisgICAgd2hpbGUgdHJ1ZTsgZG8KKyAgICAgICAgZWNobyAtbiAiRG8geW91IHdhbnQgdG8gaW5zdGFsbCB0aGlzIGltYWdlIHRoZXJlPyBbeS9uXSAiCisgICAgICAgIHJlYWQgYW5zd2VyCisgICAgICAgIGlmIFsgIiRhbnN3ZXIiID0gInkiIC1vICIkYW5zd2VyIiA9ICJuIiBdOyB0aGVuCisgICAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgICAgICBlY2hvICJQbGVhc2UgYW5zd2VyIHkgb3IgbiIKKyAgICBkb25lCisgICAgaWYgWyAiJGFuc3dlciIgPSAieSIgXTsgdGhlbgorICAgICAgICBUQVJHRVRfREVWSUNFX05BTUU9JGhkbmFtZQorICAgICAgICBicmVhaworICAgIGZpCitkb25lCisKK2lmIFsgLW4gIiRUQVJHRVRfREVWSUNFX05BTUUiIF07IHRoZW4KKyAgICBlY2hvICJJbnN0YWxsaW5nIGltYWdlIG9uIC9kZXYvJFRBUkdFVF9ERVZJQ0VfTkFNRSAuLi4iCitlbHNlCisgICAgZWNobyAiTm8gaGFyZCBkcml2ZSBzZWxlY3RlZC4gSW5zdGFsbGF0aW9uIGFib3J0ZWQuIgorICAgIGV4aXQgMQorZmkKKworZGV2aWNlPS9kZXYvJFRBUkdFVF9ERVZJQ0VfTkFNRQorCisjCisjIFRoZSB1ZGV2IGF1dG9tb3VudGVyIGNhbiBjYXVzZSBwYWluIGhlcmUsIGtpbGwgaXQKKyMKK3JtIC1mIC9ldGMvdWRldi9ydWxlcy5kL2F1dG9tb3VudC5ydWxlcworcm0gLWYgL2V0Yy91ZGV2L3NjcmlwdHMvbW91bnQqCisKKyMKKyMgVW5tb3VudCBhbnl0aGluZyB0aGUgYXV0b21vdW50ZXIgaGFkIG1vdW50ZWQKKyMKK3Vtb3VudCAke2RldmljZX0qIDI+IC9kZXYvbnVsbCB8fCAvYmluL3RydWUKKworbWtkaXIgLXAgL3RtcAorY2F0IC9wcm9jL21vdW50cyA+IC9ldGMvbXRhYgorCitkaXNrX3NpemU9JChwYXJ0ZWQgJHtkZXZpY2V9IHVuaXQgbWIgcHJpbnQgfCBncmVwIERpc2sgfCBjdXQgLWQiICIgLWYgMyB8IHNlZCAtZSAicy9NQi8vIikKKworc3dhcF9zaXplPSQoKGRpc2tfc2l6ZSpzd2FwX3JhdGlvLzEwMCkpCityb290ZnNfc2l6ZT0kKChkaXNrX3NpemUtYm9vdF9zaXplLXN3YXBfc2l6ZSkpCisKK3Jvb3Rmc19zdGFydD0kKChib290X3NpemUpKQorcm9vdGZzX2VuZD0kKChyb290ZnNfc3RhcnQrcm9vdGZzX3NpemUpKQorc3dhcF9zdGFydD0kKChyb290ZnNfZW5kKSkKKworIyBNTUMgZGV2aWNlcyBhcmUgc3BlY2lhbCBpbiBhIGNvdXBsZSBvZiB3YXlzCisjIDEpIHRoZXkgdXNlIGEgcGFydGl0aW9uIHByZWZpeCBjaGFyYWN0ZXIgJ3AnCisjIDIpIHRoZXkgYXJlIGRldGVjdGVkIGFzeW5jaHJvbm91c2x5IChuZWVkIHJvb3R3YWl0KQorcm9vdHdhaXQ9IiIKK3BhcnRfcHJlZml4PSIiCitpZiBbICEgIiR7ZGV2aWNlI21tY2Jsa30iID0gIiR7ZGV2aWNlfSIgXTsgdGhlbgorICAgIHBhcnRfcHJlZml4PSJwIgorICAgIHJvb3R3YWl0PSJyb290d2FpdCIKK2ZpCitib290ZnM9JHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0xCityb290ZnM9JHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0yCitzd2FwPSR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9MworCitlY2hvICIqKioqKioqKioqKioqKioqKiIKK2VjaG8gIkJvb3QgcGFydGl0aW9uIHNpemU6ICAgJGJvb3Rfc2l6ZSBNQiAoJGJvb3RmcykiCitlY2hvICJSb290ZnMgcGFydGl0aW9uIHNpemU6ICRyb290ZnNfc2l6ZSBNQiAoJHJvb3RmcykiCitlY2hvICJTd2FwIHBhcnRpdGlvbiBzaXplOiAgICRzd2FwX3NpemUgTUIgKCRzd2FwKSIKK2VjaG8gIioqKioqKioqKioqKioqKioqIgorZWNobyAiRGVsZXRpbmcgcGFydGl0aW9uIHRhYmxlIG9uICR7ZGV2aWNlfSAuLi4iCitkZCBpZj0vZGV2L3plcm8gb2Y9JHtkZXZpY2V9IGJzPTUxMiBjb3VudD0zNQorCitlY2hvICJDcmVhdGluZyBuZXcgcGFydGl0aW9uIHRhYmxlIG9uICR7ZGV2aWNlfSAuLi4iCitwYXJ0ZWQgJHtkZXZpY2V9IG1rbGFiZWwgZ3B0CisKK2VjaG8gIkNyZWF0aW5nIGJvb3QgcGFydGl0aW9uIG9uICRib290ZnMiCitwYXJ0ZWQgJHtkZXZpY2V9IG1rcGFydCBib290IGZhdDMyIDAlICRib290X3NpemUKK3BhcnRlZCAke2RldmljZX0gc2V0IDEgYm9vdCBvbgorCitlY2hvICJDcmVhdGluZyByb290ZnMgcGFydGl0aW9uIG9uICRyb290ZnMiCitwYXJ0ZWQgJHtkZXZpY2V9IG1rcGFydCByb290IGV4dDMgJHJvb3Rmc19zdGFydCAkcm9vdGZzX2VuZAorCitlY2hvICJDcmVhdGluZyBzd2FwIHBhcnRpdGlvbiBvbiAkc3dhcCIKK3BhcnRlZCAke2RldmljZX0gbWtwYXJ0IHN3YXAgbGludXgtc3dhcCAkc3dhcF9zdGFydCAxMDAlCisKK3BhcnRlZCAke2RldmljZX0gcHJpbnQKKworZWNobyAiRm9ybWF0dGluZyAkYm9vdGZzIHRvIHZmYXQuLi4iCitta2ZzLnZmYXQgJGJvb3RmcworCitlY2hvICJGb3JtYXR0aW5nICRyb290ZnMgdG8gZXh0My4uLiIKK21rZnMuZXh0MyAkcm9vdGZzCisKK2VjaG8gIkZvcm1hdHRpbmcgc3dhcCBwYXJ0aXRpb24uLi4oJHN3YXApIgorbWtzd2FwICRzd2FwCisKK21rZGlyIC90Z3Rfcm9vdAorbWtkaXIgL3NyY19yb290Citta2RpciAtcCAvYm9vdAorCisjIEhhbmRsaW5nIG9mIHRoZSB0YXJnZXQgcm9vdCBwYXJ0aXRpb24KK21vdW50ICRyb290ZnMgL3RndF9yb290Cittb3VudCAtbyBydyxsb29wLG5vYXRpbWUsbm9kaXJhdGltZSAvcnVuL21lZGlhLyQxLyQyIC9zcmNfcm9vdAorZWNobyAiQ29weWluZyByb290ZnMgZmlsZXMuLi4iCitjcCAtYSAvc3JjX3Jvb3QvKiAvdGd0X3Jvb3QKK2lmIFsgLWQgL3RndF9yb290L2V0Yy8gXSA7IHRoZW4KKyAgICBib290X3V1aWQ9JChibGtpZCAtbyB2YWx1ZSAtcyBVVUlEICR7ZGV2aWNlfTEpCisgICAgc3dhcF9wYXJ0X3V1aWQ9JChibGtpZCAtbyB2YWx1ZSAtcyBQQVJUVVVJRCAke2RldmljZX0zKQorICAgIGVjaG8gIi9kZXYvZGlzay9ieS1wYXJ0dXVpZC8kc3dhcF9wYXJ0X3V1aWQgICAgICAgICAgICAgICAgc3dhcCAgICAgICAgICAgICBzd2FwICAgICAgIGRlZmF1bHRzICAgICAgICAgICAgICAwICAwIiA+PiAvdGd0X3Jvb3QvZXRjL2ZzdGFiCisgICAgZWNobyAiVVVJRD0kYm9vdF91dWlkICAgICAgICAgICAgICAvYm9vdCAgICAgICAgICAgIHZmYXQgICAgICAgZGVmYXVsdHMgICAgICAgICAgICAgIDEgIDIiID4+IC90Z3Rfcm9vdC9ldGMvZnN0YWIKKyAgICAjIFdlIGRvbnQgd2FudCB1ZGV2IHRvIG1vdW50IG91ciByb290IGRldmljZSB3aGlsZSB3ZSdyZSBib290aW5nLi4uCisgICAgaWYgWyAtZCAvdGd0X3Jvb3QvZXRjL3VkZXYvIF0gOyB0aGVuCisgICAgICAgIGVjaG8gIiR7ZGV2aWNlfSIgPj4gL3RndF9yb290L2V0Yy91ZGV2L21vdW50LmJsYWNrbGlzdAorICAgIGZpCitmaQorCit1bW91bnQgL3NyY19yb290CisKKyMgSGFuZGxpbmcgb2YgdGhlIHRhcmdldCBib290IHBhcnRpdGlvbgorbW91bnQgJGJvb3RmcyAvYm9vdAorZWNobyAiUHJlcGFyaW5nIGJvb3QgcGFydGl0aW9uLi4uIgorCitFRklESVI9Ii9ib290L0VGSS9CT09UIgorbWtkaXIgLXAgJEVGSURJUgorIyBDb3B5IHRoZSBlZmkgbG9hZGVyCitjcCAvcnVuL21lZGlhLyQxL0VGSS9CT09ULyouZWZpICRFRklESVIKKworaWYgWyAtZiAvcnVuL21lZGlhLyQxL0VGSS9CT09UL2dydWIuY2ZnIF07IHRoZW4KKyAgICByb290X3BhcnRfdXVpZD0kKGJsa2lkIC1vIHZhbHVlIC1zIFBBUlRVVUlEICR7ZGV2aWNlfTIpCisgICAgR1JVQkNGRz0iJEVGSURJUi9ncnViLmNmZyIKKyAgICBjcCAvcnVuL21lZGlhLyQxL0VGSS9CT09UL2dydWIuY2ZnICRHUlVCQ0ZHCisgICAgIyBVcGRhdGUgZ3J1YiBjb25maWcgZm9yIHRoZSBpbnN0YWxsZWQgaW1hZ2UKKyAgICAjIERlbGV0ZSB0aGUgaW5zdGFsbCBlbnRyeQorICAgIHNlZCAtaSAiL21lbnVlbnRyeSAnaW5zdGFsbCcvLC9efS9kIiAkR1JVQkNGRworICAgICMgRGVsZXRlIHRoZSBpbml0cmQgbGluZXMKKyAgICBzZWQgLWkgIi9pbml0cmQgL2QiICRHUlVCQ0ZHCisgICAgIyBEZWxldGUgYW55IExBQkVMPSBzdHJpbmdzCisgICAgc2VkIC1pICJzLyBMQUJFTD1bXiBdKi8gLyIgJEdSVUJDRkcKKyAgICAjIERlbGV0ZSBhbnkgcm9vdD0gc3RyaW5ncworICAgIHNlZCAtaSAicy8gcm9vdD1bXiBdKi8gLyIgJEdSVUJDRkcKKyAgICAjIEFkZCB0aGUgcm9vdD0gYW5kIG90aGVyIHN0YW5kYXJkIGJvb3Qgb3B0aW9ucworICAgIHNlZCAtaSAic0BsaW51eCAvdm1saW51eiAqQGxpbnV4IC92bWxpbnV6IHJvb3Q9UEFSVFVVSUQ9JHJvb3RfcGFydF91dWlkIHJ3ICRyb290d2FpdCBxdWlldCBAIiAkR1JVQkNGRworZmkKKworaWYgWyAtZCAvcnVuL21lZGlhLyQxL2xvYWRlciBdOyB0aGVuCisgICAgR1VNTUlCT09UX0NGR1M9Ii9ib290L2xvYWRlci9lbnRyaWVzLyouY29uZiIKKyAgICAjIGNvcHkgY29uZmlnIGZpbGVzIGZvciBndW1taWJvb3QKKyAgICBjcCAtZHIgL3J1bi9tZWRpYS8kMS9sb2FkZXIgL2Jvb3QKKyAgICAjIGRlbGV0ZSB0aGUgaW5zdGFsbCBlbnRyeQorICAgIHJtIC1mIC9ib290L2xvYWRlci9lbnRyaWVzL2luc3RhbGwuY29uZgorICAgICMgZGVsZXRlIHRoZSBpbml0cmQgbGluZXMKKyAgICBzZWQgLWkgIi9pbml0cmQgL2QiICRHVU1NSUJPT1RfQ0ZHUworICAgICMgZGVsZXRlIGFueSBMQUJFTD0gc3RyaW5ncworICAgIHNlZCAtaSAicy8gTEFCRUw9W14gXSovIC8iICRHVU1NSUJPT1RfQ0ZHUworICAgICMgZGVsZXRlIGFueSByb290PSBzdHJpbmdzCisgICAgc2VkIC1pICJzLyByb290PVteIF0qLyAvIiAkR1VNTUlCT09UX0NGR1MKKyAgICAjIGFkZCB0aGUgcm9vdD0gYW5kIG90aGVyIHN0YW5kYXJkIGJvb3Qgb3B0aW9ucworICAgIHNlZCAtaSAic0BvcHRpb25zICpAb3B0aW9ucyByb290PVBBUlRVVUlEPSRyb290dXVpZCBydyAkcm9vdHdhaXQgcXVpZXQgQCIgJEdVTU1JQk9PVF9DRkdTCitmaQorCit1bW91bnQgL3RndF9yb290CisKK2NwIC9ydW4vbWVkaWEvJDEvdm1saW51eiAvYm9vdAorCit1bW91bnQgL2Jvb3QKKworc3luYworCitlY2hvICJSZW1vdmUgeW91ciBpbnN0YWxsYXRpb24gbWVkaWEsIGFuZCBwcmVzcyBFTlRFUiIKKworcmVhZCBlbnRlcgorCitlY2hvICJSZWJvb3RpbmcuLi4iCityZWJvb3QgLWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwtdGVzdGZzLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC10ZXN0ZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM2MjE2MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwtdGVzdGZzLnNoCkBAIC0wLDAgKzEsMjIwIEBACisjIS9iaW4vc2ggLWUKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTEgSW50ZWwKKyMKKyMgaW5zdGFsbC5zaCBbZGV2aWNlX25hbWVdIFtyb290ZnNfbmFtZV0gW3ZpZGVvX21vZGVdIFt2Z2FfbW9kZV0KKyMKKworUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorCisjIFdlIG5lZWQgMjAgTWIgZm9yIHRoZSBib290IHBhcnRpdGlvbgorYm9vdF9zaXplPTIwMAorCisjIDUwJSBmb3IgdGhlIHRoZSB0ZXN0IHBhcnRpdGlvbgordGVzdGZzX3JhdGlvPTUwCisKKyMgR2V0IGEgbGlzdCBvZiBoYXJkIGRyaXZlcworaGRuYW1lbGlzdD0iIgorbGl2ZV9kZXZfbmFtZT0kezElJS8qfQorCitlY2hvICJTZWFyY2hpbmcgZm9yIGhhcmQgZHJpdmVzIC4uLiIKKworZm9yIGRldmljZSBpbiBgbHMgL3N5cy9ibG9jay9gOyBkbworICAgIGNhc2UgJGRldmljZSBpbgorCWxvb3AqKQorICAgICAgICAgICAgIyBza2lwIGxvb3AgZGV2aWNlCisJICAgIDs7CisJcmFtKikKKyAgICAgICAgICAgICMgc2tpcCByYW0gZGV2aWNlCisJICAgIDs7CisJKikKKwkgICAgIyBza2lwIHRoZSBkZXZpY2UgTGl2ZU9TIGlzIG9uCisJICAgICMgQWRkIHZhbGlkIGhhcmQgZHJpdmUgbmFtZSB0byB0aGUgbGlzdAorCSAgICBpZiBbICRkZXZpY2UgIT0gJGxpdmVfZGV2X25hbWUgLWEgLWUgL2Rldi8kZGV2aWNlIF07IHRoZW4KKwkJaGRuYW1lbGlzdD0iJGhkbmFtZWxpc3QgJGRldmljZSIKKwkgICAgZmkKKwkgICAgOzsKKyAgICBlc2FjCitkb25lCisKK1RBUkdFVF9ERVZJQ0VfTkFNRT0iIgorZm9yIGhkbmFtZSBpbiAkaGRuYW1lbGlzdDsgZG8KKyAgICAjIERpc3BsYXkgZm91bmQgaGFyZCBkcml2ZXMgYW5kIHRoZWlyIGJhc2ljIGluZm8KKyAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICAgIGVjaG8gL2Rldi8kaGRuYW1lCisgICAgaWYgWyAtciAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3ZlbmRvciBdOyB0aGVuCisJZWNobyAtbiAiVkVORE9SPSIKKwljYXQgL3N5cy9ibG9jay8kaGRuYW1lL2RldmljZS92ZW5kb3IKKyAgICBmaQorICAgIGVjaG8gLW4gIk1PREVMPSIKKyAgICBjYXQgL3N5cy9ibG9jay8kaGRuYW1lL2RldmljZS9tb2RlbAorICAgIGNhdCAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3VldmVudAorICAgIGVjaG8KKyAgICAjIEdldCB1c2VyIGNob2ljZQorICAgIHdoaWxlIHRydWU7IGRvCisJZWNobyAtbiAiRG8geW91IHdhbnQgdG8gaW5zdGFsbCB0aGlzIGltYWdlIHRoZXJlPyBbeS9uXSAiCisJcmVhZCBhbnN3ZXIKKwlpZiBbICIkYW5zd2VyIiA9ICJ5IiAtbyAiJGFuc3dlciIgPSAibiIgXTsgdGhlbgorCSAgICBicmVhaworCWZpCisJZWNobyAiUGxlYXNlIGFuc3dlciB5IG9yIG4iCisgICAgZG9uZQorICAgIGlmIFsgIiRhbnN3ZXIiID0gInkiIF07IHRoZW4KKwlUQVJHRVRfREVWSUNFX05BTUU9JGhkbmFtZQorCWJyZWFrCisgICAgZmkKK2RvbmUKKworaWYgWyAtbiAiJFRBUkdFVF9ERVZJQ0VfTkFNRSIgXTsgdGhlbgorICAgIGVjaG8gIkluc3RhbGxpbmcgaW1hZ2Ugb24gL2Rldi8kVEFSR0VUX0RFVklDRV9OQU1FIC4uLiIKK2Vsc2UKKyAgICBlY2hvICJObyBoYXJkIGRyaXZlIHNlbGVjdGVkLiBJbnN0YWxsYXRpb24gYWJvcnRlZC4iCisgICAgZXhpdCAxCitmaQorCitkZXZpY2U9JFRBUkdFVF9ERVZJQ0VfTkFNRQorCisjCisjIFRoZSB1ZGV2IGF1dG9tb3VudGVyIGNhbiBjYXVzZSBwYWluIGhlcmUsIGtpbGwgaXQKKyMKK3JtIC1mIC9ldGMvdWRldi9ydWxlcy5kL2F1dG9tb3VudC5ydWxlcworcm0gLWYgL2V0Yy91ZGV2L3NjcmlwdHMvbW91bnQqCisKKyMKKyMgVW5tb3VudCBhbnl0aGluZyB0aGUgYXV0b21vdW50ZXIgaGFkIG1vdW50ZWQKKyMKK3Vtb3VudCAvZGV2LyR7ZGV2aWNlfSogMj4gL2Rldi9udWxsIHx8IC9iaW4vdHJ1ZQorCitpZiBbICEgLWIgL2Rldi9sb29wMCBdIDsgdGhlbgorICAgIG1rbm9kIC9kZXYvbG9vcDAgYiA3IDAKK2ZpCisKK21rZGlyIC1wIC90bXAKK2lmIFsgISAtTCAvZXRjL210YWIgXTsgdGhlbgorCWNhdCAvcHJvYy9tb3VudHMgPiAvZXRjL210YWIKK2ZpCisKK2Rpc2tfc2l6ZT0kKHBhcnRlZCAvZGV2LyR7ZGV2aWNlfSB1bml0IG1iIHByaW50IHwgZ3JlcCBEaXNrIHwgY3V0IC1kIiAiIC1mIDMgfCBzZWQgLWUgInMvTUIvLyIpCisKK3Rlc3Rmc19zaXplPSQoKGRpc2tfc2l6ZSp0ZXN0ZnNfcmF0aW8vMTAwKSkKK3Jvb3Rmc19zaXplPSQoKGRpc2tfc2l6ZS1ib290X3NpemUtdGVzdGZzX3NpemUpKQorCityb290ZnNfc3RhcnQ9JCgoYm9vdF9zaXplKSkKK3Jvb3Rmc19lbmQ9JCgocm9vdGZzX3N0YXJ0K3Jvb3Rmc19zaXplKSkKK3Rlc3Rmc19zdGFydD0kKChyb290ZnNfZW5kKSkKKworIyBNTUMgZGV2aWNlcyBhcmUgc3BlY2lhbCBpbiBhIGNvdXBsZSBvZiB3YXlzCisjIDEpIHRoZXkgdXNlIGEgcGFydGl0aW9uIHByZWZpeCBjaGFyYWN0ZXIgJ3AnCisjIDIpIHRoZXkgYXJlIGRldGVjdGVkIGFzeW5jaHJvbm91c2x5IChuZWVkIHJvb3R3YWl0KQorcm9vdHdhaXQ9IiIKK3BhcnRfcHJlZml4PSIiCitpZiBbICEgIiR7ZGV2aWNlI21tY2Jsa30iID0gIiR7ZGV2aWNlfSIgXTsgdGhlbgorCXBhcnRfcHJlZml4PSJwIgorCXJvb3R3YWl0PSJyb290d2FpdCIKK2ZpCitib290ZnM9L2Rldi8ke2RldmljZX0ke3BhcnRfcHJlZml4fTEKK3Jvb3Rmcz0vZGV2LyR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9MgordGVzdGZzPS9kZXYvJHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0zCisKK2VjaG8gIioqKioqKioqKioqKioqKioqIgorZWNobyAiQm9vdCBwYXJ0aXRpb24gc2l6ZTogICAkYm9vdF9zaXplIE1CICgkYm9vdGZzKSIKK2VjaG8gIlJvb3RmcyBwYXJ0aXRpb24gc2l6ZTogJHJvb3Rmc19zaXplIE1CICgkcm9vdGZzKSIKK2VjaG8gIlRlc3RmcyBwYXJ0aXRpb24gc2l6ZTogJHRlc3Rmc19zaXplIE1CICgkdGVzdGZzKSIKK2VjaG8gIioqKioqKioqKioqKioqKioqIgorZWNobyAiRGVsZXRpbmcgcGFydGl0aW9uIHRhYmxlIG9uIC9kZXYvJHtkZXZpY2V9IC4uLiIKK2RkIGlmPS9kZXYvemVybyBvZj0vZGV2LyR7ZGV2aWNlfSBicz01MTIgY291bnQ9MgorCitlY2hvICJDcmVhdGluZyBuZXcgcGFydGl0aW9uIHRhYmxlIG9uIC9kZXYvJHtkZXZpY2V9IC4uLiIKK3BhcnRlZCAvZGV2LyR7ZGV2aWNlfSBta2xhYmVsIG1zZG9zCisKK2VjaG8gIkNyZWF0aW5nIGJvb3QgcGFydGl0aW9uIG9uICRib290ZnMiCitwYXJ0ZWQgL2Rldi8ke2RldmljZX0gbWtwYXJ0IHByaW1hcnkgMCUgJGJvb3Rfc2l6ZQorCitlY2hvICJDcmVhdGluZyByb290ZnMgcGFydGl0aW9uIG9uICRyb290ZnMiCitwYXJ0ZWQgL2Rldi8ke2RldmljZX0gbWtwYXJ0IHByaW1hcnkgJHJvb3Rmc19zdGFydCAkcm9vdGZzX2VuZAorCitlY2hvICJDcmVhdGluZyB0ZXN0ZnMgcGFydGl0aW9uIG9uICR0ZXN0ZnMiCitwYXJ0ZWQgL2Rldi8ke2RldmljZX0gbWtwYXJ0IHByaW1hcnkgJHRlc3Rmc19zdGFydCAxMDAlCisKK3BhcnRlZCAvZGV2LyR7ZGV2aWNlfSBwcmludAorCitlY2hvICJGb3JtYXR0aW5nICRib290ZnMgdG8gZXh0My4uLiIKK21rZnMuZXh0MyAtTCAiYm9vdCIgJGJvb3RmcworCitlY2hvICJGb3JtYXR0aW5nICRyb290ZnMgdG8gZXh0My4uLiIKK21rZnMuZXh0MyAtTCAicm9vdGZzIiAkcm9vdGZzCisKK2VjaG8gIkZvcm1hdHRpbmcgJHRlc3RmcyB0byBleHQzLi4uIgorbWtmcy5leHQzIC1MICJ0ZXN0cm9vdGZzIiAkdGVzdGZzCisKK21rZGlyIC90Z3Rfcm9vdAorbWtkaXIgL3NyY19yb290Citta2RpciAtcCAvYm9vdAorCisjIEhhbmRsaW5nIG9mIHRoZSB0YXJnZXQgcm9vdCBwYXJ0aXRpb24KK21vdW50ICRyb290ZnMgL3RndF9yb290Cittb3VudCAtbyBydyxsb29wLG5vYXRpbWUsbm9kaXJhdGltZSAvcnVuL21lZGlhLyQxLyQyIC9zcmNfcm9vdAorCitlY2hvICJDb3B5aW5nIHJvb3RmcyBmaWxlcy4uLiIKK2NwIC1hIC9zcmNfcm9vdC8qIC90Z3Rfcm9vdAorCit0b3VjaCAvdGd0X3Jvb3QvZXRjL21hc3RlcmltYWdlCisKK2lmIFsgLWQgL3RndF9yb290L2V0Yy8gXSA7IHRoZW4KKyAgICBlY2hvICIkYm9vdGZzICAgICAgICAgICAgICAvYm9vdCAgICAgICAgICAgIGV4dDMgICAgICAgZGVmYXVsdHMgICAgICAgICAgICAgIDEgIDIiID4+IC90Z3Rfcm9vdC9ldGMvZnN0YWIKKyAgICAjIFdlIGRvbnQgd2FudCB1ZGV2IHRvIG1vdW50IG91ciByb290IGRldmljZSB3aGlsZSB3ZSdyZSBib290aW5nLi4uCisgICAgaWYgWyAtZCAvdGd0X3Jvb3QvZXRjL3VkZXYvIF0gOyB0aGVuCisJZWNobyAiL2Rldi8ke2RldmljZX0iID4+IC90Z3Rfcm9vdC9ldGMvdWRldi9tb3VudC5ibGFja2xpc3QKKyAgICBmaQorZmkKK3Vtb3VudCAvdGd0X3Jvb3QKK3Vtb3VudCAvc3JjX3Jvb3QKKworIyBIYW5kbGluZyBvZiB0aGUgdGFyZ2V0IGJvb3QgcGFydGl0aW9uCittb3VudCAkYm9vdGZzIC9ib290CitlY2hvICJQcmVwYXJpbmcgYm9vdCBwYXJ0aXRpb24uLi4iCitpZiBbIC1mIC9ldGMvZ3J1Yi5kLzAwX2hlYWRlciBdIDsgdGhlbgorICAgIGVjaG8gIlByZXBhcmluZyBjdXN0b20gZ3J1YjIgbWVudS4uLiIKKyAgICBHUlVCQ0ZHPSIvYm9vdC9ncnViL2dydWIuY2ZnIgorICAgIG1rZGlyIC1wICQoZGlybmFtZSAkR1JVQkNGRykKKyAgICBjYXQgPiRHUlVCQ0ZHIDw8X0VPRiAKK3NlcmlhbCAtLXNwZWVkPTExNTIwMCAtLXVuaXQ9MCAtLXdvcmQ9OCAtLXBhcml0eT1ubyAtLXN0b3A9MQordGVybWluYWxfaW5wdXQgLS1hcHBlbmQgIHNlcmlhbAordGVybWluYWxfb3V0cHV0IC0tYXBwZW5kIHNlcmlhbAorc2V0IHRpbWVvdXRfc3R5bGU9aGlkZGVuCitzZXQgdGltZW91dD01CittZW51ZW50cnkgIkxpbnV4IiB7CisgICAgc2V0IHJvb3Q9KGhkMCwxKQorICAgIGxpbnV4IC92bWxpbnV6IHJvb3Q9JHJvb3RmcyAkcm9vdHdhaXQgcncgJDUgJDMgJDQgcXVpZXQKK30KK19FT0YKKyAgICAjIEFkZCB0aGUgdGVzdCBsYWJlbAorICAgIGVjaG8gLW5lICJcbm1lbnVlbnRyeSAndGVzdCcgLS1ob3RrZXkgeCB7XG5saW51eCAvdGVzdC1rZXJuZWwgcm9vdD0kdGVzdGZzIHJ3ICRyb290d2FpdCBxdWlldFxufVxuIiA+PiAkR1JVQkNGRworCisgICAgY2htb2QgMDQ0NCAkR1JVQkNGRworZmkKK2dydWItaW5zdGFsbCAvZGV2LyR7ZGV2aWNlfQorZWNobyAiKGhkMCkgL2Rldi8ke2RldmljZX0iID4gL2Jvb3QvZ3J1Yi9kZXZpY2UubWFwCisKKyMgSWYgZ3J1Yi5jZmcgZG9lc24ndCBleGlzdCwgYXNzdW1lIEdSVUIgMC45NyBhbmQgY3JlYXRlIGEgbWVudS5sc3QKK2lmIFsgISAtZiAvYm9vdC9ncnViL2dydWIuY2ZnIF0gOyB0aGVuCisgICAgZWNobyAiUHJlcGFyaW5nIGN1c3RvbSBncnViIG1lbnUuLi4iCisgICAgZWNobyAiZGVmYXVsdCAwIiA+IC9ib290L2dydWIvbWVudS5sc3QKKyAgICBlY2hvICJ0aW1lb3V0IDMwIiA+PiAvYm9vdC9ncnViL21lbnUubHN0CisgICAgZWNobyAidGl0bGUgTGl2ZSBCb290L0luc3RhbGwtSW1hZ2UiID4+IC9ib290L2dydWIvbWVudS5sc3QKKyAgICBlY2hvICJyb290ICAoaGQwLDApIiA+PiAvYm9vdC9ncnViL21lbnUubHN0CisgICAgZWNobyAia2VybmVsIC92bWxpbnV6IHJvb3Q9JHJvb3RmcyBydyAkMyAkNCBxdWlldCIgPj4gL2Jvb3QvZ3J1Yi9tZW51LmxzdAorZmkKKworY3AgL3J1bi9tZWRpYS8kMS92bWxpbnV6IC9ib290LworCit1bW91bnQgL2Jvb3QKKworc3luYworCitlY2hvICJSZW1vdmUgeW91ciBpbnN0YWxsYXRpb24gbWVkaWEsIGFuZCBwcmVzcyBFTlRFUiIKKworcmVhZCBlbnRlcgorCitlY2hvICJSZWJvb3RpbmcuLi4iCityZWJvb3QgLWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1pbnN0YWxsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZTk3NjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1pbnN0YWxsLnNoCkBAIC0wLDAgKzEsMjcyIEBACisjIS9iaW4vc2ggLWUKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTEgSW50ZWwKKyMKKyMgaW5zdGFsbC5zaCBbZGV2aWNlX25hbWVdIFtyb290ZnNfbmFtZV0gW3ZpZGVvX21vZGVdIFt2Z2FfbW9kZV0KKyMKKworUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorCisjIFdlIG5lZWQgMjAgTWIgZm9yIHRoZSBib290IHBhcnRpdGlvbgorYm9vdF9zaXplPTIwCisKKyMgNSUgZm9yIHRoZSBzd2FwCitzd2FwX3JhdGlvPTUKKworIyBHZXQgYSBsaXN0IG9mIGhhcmQgZHJpdmVzCitoZG5hbWVsaXN0PSIiCitsaXZlX2Rldl9uYW1lPWBjYXQgL3Byb2MvbW91bnRzIHwgZ3JlcCAkezElL30gfCBhd2sgJ3twcmludCAkMX0nYAorbGl2ZV9kZXZfbmFtZT0ke2xpdmVfZGV2X25hbWUjXC9kZXYvfQorIyBPbmx5IHN0cmlwIHRoZSBkaWdpdCBpZGVudGlmaWVyIGlmIHRoZSBkZXZpY2UgaXMgbm90IGFuIG1tYworY2FzZSAkbGl2ZV9kZXZfbmFtZSBpbgorICAgIG1tY2JsayopCisgICAgOzsKKyAgICAqKQorICAgICAgICBsaXZlX2Rldl9uYW1lPSR7bGl2ZV9kZXZfbmFtZSUlWzAtOV0qfQorICAgIDs7Citlc2FjCisKK2VjaG8gIlNlYXJjaGluZyBmb3IgaGFyZCBkcml2ZXMgLi4uIgorCitmb3IgZGV2aWNlIGluIGBscyAvc3lzL2Jsb2NrL2A7IGRvCisgICAgY2FzZSAkZGV2aWNlIGluCisgICAgICAgIGxvb3AqKQorICAgICAgICAgICAgIyBza2lwIGxvb3AgZGV2aWNlCisgICAgICAgICAgICA7OworICAgICAgICBzciopCisgICAgICAgICAgICAjIHNraXAgQ0RST00gZGV2aWNlCisgICAgICAgICAgICA7OworICAgICAgICByYW0qKQorICAgICAgICAgICAgIyBza2lwIHJhbSBkZXZpY2UKKyAgICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgICAjIHNraXAgdGhlIGRldmljZSBMaXZlT1MgaXMgb24KKyAgICAgICAgICAgICMgQWRkIHZhbGlkIGhhcmQgZHJpdmUgbmFtZSB0byB0aGUgbGlzdAorICAgICAgICAgICAgY2FzZSAkZGV2aWNlIGluCisgICAgICAgICAgICAgICAgJGxpdmVfZGV2X25hbWUqKQorICAgICAgICAgICAgICAgICMgc2tpcCB0aGUgZGV2aWNlIHdlIGFyZSBydW5uaW5nIGZyb20KKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgIGhkbmFtZWxpc3Q9IiRoZG5hbWVsaXN0ICRkZXZpY2UiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworZG9uZQorCitUQVJHRVRfREVWSUNFX05BTUU9IiIKK2ZvciBoZG5hbWUgaW4gJGhkbmFtZWxpc3Q7IGRvCisgICAgIyBEaXNwbGF5IGZvdW5kIGhhcmQgZHJpdmVzIGFuZCB0aGVpciBiYXNpYyBpbmZvCisgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKyAgICBlY2hvIC9kZXYvJGhkbmFtZQorICAgIGlmIFsgLXIgL3N5cy9ibG9jay8kaGRuYW1lL2RldmljZS92ZW5kb3IgXTsgdGhlbgorICAgICAgICBlY2hvIC1uICJWRU5ET1I9IgorICAgICAgICBjYXQgL3N5cy9ibG9jay8kaGRuYW1lL2RldmljZS92ZW5kb3IKKyAgICBmaQorICAgIGlmIFsgLXIgL3N5cy9ibG9jay8kaGRuYW1lL2RldmljZS9tb2RlbCBdOyB0aGVuCisgICAgICAgIGVjaG8gLW4gIk1PREVMPSIKKyAgICAgICAgY2F0IC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvbW9kZWwKKyAgICBmaQorICAgIGlmIFsgLXIgL3N5cy9ibG9jay8kaGRuYW1lL2RldmljZS91ZXZlbnQgXTsgdGhlbgorICAgICAgICBlY2hvIC1uICJVRVZFTlQ9IgorICAgICAgICBjYXQgL3N5cy9ibG9jay8kaGRuYW1lL2RldmljZS91ZXZlbnQKKyAgICBmaQorICAgIGVjaG8KKyAgICAjIEdldCB1c2VyIGNob2ljZQorICAgIHdoaWxlIHRydWU7IGRvCisgICAgICAgIGVjaG8gLW4gIkRvIHlvdSB3YW50IHRvIGluc3RhbGwgdGhpcyBpbWFnZSB0aGVyZT8gW3kvbl0gIgorICAgICAgICByZWFkIGFuc3dlcgorICAgICAgICBpZiBbICIkYW5zd2VyIiA9ICJ5IiAtbyAiJGFuc3dlciIgPSAibiIgXTsgdGhlbgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKyAgICAgICAgZWNobyAiUGxlYXNlIGFuc3dlciB5IG9yIG4iCisgICAgZG9uZQorICAgIGlmIFsgIiRhbnN3ZXIiID0gInkiIF07IHRoZW4KKyAgICAgICAgVEFSR0VUX0RFVklDRV9OQU1FPSRoZG5hbWUKKyAgICAgICAgYnJlYWsKKyAgICBmaQorZG9uZQorCitpZiBbIC1uICIkVEFSR0VUX0RFVklDRV9OQU1FIiBdOyB0aGVuCisgICAgZWNobyAiSW5zdGFsbGluZyBpbWFnZSBvbiAvZGV2LyRUQVJHRVRfREVWSUNFX05BTUUgLi4uIgorZWxzZQorICAgIGVjaG8gIk5vIGhhcmQgZHJpdmUgc2VsZWN0ZWQuIEluc3RhbGxhdGlvbiBhYm9ydGVkLiIKKyAgICBleGl0IDEKK2ZpCisKK2RldmljZT0vZGV2LyRUQVJHRVRfREVWSUNFX05BTUUKKworIworIyBUaGUgdWRldiBhdXRvbW91bnRlciBjYW4gY2F1c2UgcGFpbiBoZXJlLCBraWxsIGl0CisjCitybSAtZiAvZXRjL3VkZXYvcnVsZXMuZC9hdXRvbW91bnQucnVsZXMKK3JtIC1mIC9ldGMvdWRldi9zY3JpcHRzL21vdW50KgorCisjCisjIFVubW91bnQgYW55dGhpbmcgdGhlIGF1dG9tb3VudGVyIGhhZCBtb3VudGVkCisjCit1bW91bnQgJHtkZXZpY2V9KiAyPiAvZGV2L251bGwgfHwgL2Jpbi90cnVlCisKK2lmIFsgISAtYiAvZGV2L2xvb3AwIF0gOyB0aGVuCisgICAgbWtub2QgL2Rldi9sb29wMCBiIDcgMAorZmkKKworbWtkaXIgLXAgL3RtcAoraWYgWyAhIC1MIC9ldGMvbXRhYiBdOyB0aGVuCisgICAgY2F0IC9wcm9jL21vdW50cyA+IC9ldGMvbXRhYgorZmkKKworZGlza19zaXplPSQocGFydGVkICR7ZGV2aWNlfSB1bml0IG1iIHByaW50IHwgZ3JlcCBEaXNrIHwgY3V0IC1kIiAiIC1mIDMgfCBzZWQgLWUgInMvTUIvLyIpCisKK2dydWJfdmVyc2lvbj0kKGdydWItaW5zdGFsbCAtdnxzZWQgJ3MvLiogXChbMC05XVwpLiovXDEvJykKKworaWYgWyAkZ3J1Yl92ZXJzaW9uIC1lcSAwIF0gOyB0aGVuCisgICAgYmlvc19ib290X3NpemU9MAorZWxzZQorICAgICMgRm9yIEdSVUIgMiB3ZSBuZWVkIHNlcGFyYXRlIHBhcml0aW9uIHRvIHN0b3JlIHN0YWdlMiBncnViIGltYWdlCisgICAgIyAyTWIgdmFsdWUgaXMgY2hvc2VuIHRvIGFsaWduIHBhcnRpdGlvbiBmb3IgYmVzdCBwZXJmb3JtYW5jZS4KKyAgICBiaW9zX2Jvb3Rfc2l6ZT0yCitmaQorCitzd2FwX3NpemU9JCgoZGlza19zaXplKnN3YXBfcmF0aW8vMTAwKSkKK3Jvb3Rmc19zaXplPSQoKGRpc2tfc2l6ZS1iaW9zX2Jvb3Rfc2l6ZS1ib290X3NpemUtc3dhcF9zaXplKSkKKworYm9vdF9zdGFydD0kKChiaW9zX2Jvb3Rfc2l6ZSkpCityb290ZnNfc3RhcnQ9JCgoYmlvc19ib290X3NpemUrYm9vdF9zaXplKSkKK3Jvb3Rmc19lbmQ9JCgocm9vdGZzX3N0YXJ0K3Jvb3Rmc19zaXplKSkKK3N3YXBfc3RhcnQ9JCgocm9vdGZzX2VuZCkpCisKKyMgTU1DIGRldmljZXMgYXJlIHNwZWNpYWwgaW4gYSBjb3VwbGUgb2Ygd2F5cworIyAxKSB0aGV5IHVzZSBhIHBhcnRpdGlvbiBwcmVmaXggY2hhcmFjdGVyICdwJworIyAyKSB0aGV5IGFyZSBkZXRlY3RlZCBhc3luY2hyb25vdXNseSAobmVlZCByb290d2FpdCkKK3Jvb3R3YWl0PSIiCitwYXJ0X3ByZWZpeD0iIgoraWYgWyAhICIke2RldmljZSNtbWNibGt9IiA9ICIke2RldmljZX0iIF07IHRoZW4KKyAgICBwYXJ0X3ByZWZpeD0icCIKKyAgICByb290d2FpdD0icm9vdHdhaXQiCitmaQorCitpZiBbICRncnViX3ZlcnNpb24gLWVxIDAgXSA7IHRoZW4KKyAgICBiaW9zX2Jvb3Q9JycKKyAgICBib290ZnM9JHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0xCisgICAgcm9vdGZzPSR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9MgorICAgIHN3YXA9JHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0zCitlbHNlCisgICAgYmlvc19ib290PSR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9MQorICAgIGJvb3Rmcz0ke2RldmljZX0ke3BhcnRfcHJlZml4fTIKKyAgICByb290ZnM9JHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0zCisgICAgc3dhcD0ke2RldmljZX0ke3BhcnRfcHJlZml4fTQKK2ZpCisKK2VjaG8gIioqKioqKioqKioqKioqKioqIgorWyAkZ3J1Yl92ZXJzaW9uIC1uZSAwIF0gJiYgZWNobyAiQklPUyBib290IHBhcnRpdGlvbiBzaXplOiAkYmlvc19ib290X3NpemUgTUIgKCRiaW9zX2Jvb3QpIgorZWNobyAiQm9vdCBwYXJ0aXRpb24gc2l6ZTogICAkYm9vdF9zaXplIE1CICgkYm9vdGZzKSIKK2VjaG8gIlJvb3RmcyBwYXJ0aXRpb24gc2l6ZTogJHJvb3Rmc19zaXplIE1CICgkcm9vdGZzKSIKK2VjaG8gIlN3YXAgcGFydGl0aW9uIHNpemU6ICAgJHN3YXBfc2l6ZSBNQiAoJHN3YXApIgorZWNobyAiKioqKioqKioqKioqKioqKioiCitlY2hvICJEZWxldGluZyBwYXJ0aXRpb24gdGFibGUgb24gJHtkZXZpY2V9IC4uLiIKK2RkIGlmPS9kZXYvemVybyBvZj0ke2RldmljZX0gYnM9NTEyIGNvdW50PTM1CisKK2VjaG8gIkNyZWF0aW5nIG5ldyBwYXJ0aXRpb24gdGFibGUgb24gJHtkZXZpY2V9IC4uLiIKK2lmIFsgJGdydWJfdmVyc2lvbiAtZXEgMCBdIDsgdGhlbgorICAgIHBhcnRlZCAke2RldmljZX0gbWt0YWJsZSBtc2RvcworICAgIGVjaG8gIkNyZWF0aW5nIGJvb3QgcGFydGl0aW9uIG9uICRib290ZnMiCisgICAgcGFydGVkICR7ZGV2aWNlfSBta3BhcnQgcHJpbWFyeSBleHQzIDAlICRib290X3NpemUKK2Vsc2UKKyAgICBwYXJ0ZWQgJHtkZXZpY2V9IG1rdGFibGUgZ3B0CisgICAgZWNobyAiQ3JlYXRpbmcgQklPUyBib290IHBhcnRpdGlvbiBvbiAkYmlvc19ib290IgorICAgIHBhcnRlZCAke2RldmljZX0gbWtwYXJ0IGJpb3NfYm9vdCAwJSAkYmlvc19ib290X3NpemUKKyAgICBwYXJ0ZWQgJHtkZXZpY2V9IHNldCAxIGJpb3NfZ3J1YiBvbgorICAgIGVjaG8gIkNyZWF0aW5nIGJvb3QgcGFydGl0aW9uIG9uICRib290ZnMiCisgICAgcGFydGVkICR7ZGV2aWNlfSBta3BhcnQgYm9vdCBleHQzICRib290X3N0YXJ0ICRib290X3NpemUKK2ZpCisKK2VjaG8gIkNyZWF0aW5nIHJvb3RmcyBwYXJ0aXRpb24gb24gJHJvb3RmcyIKK1sgJGdydWJfdmVyc2lvbiAtZXEgMCBdICYmIHBuYW1lPSdwcmltYXJ5JyB8fCBwbmFtZT0ncm9vdCcKK3BhcnRlZCAke2RldmljZX0gbWtwYXJ0ICRwbmFtZSBleHQzICRyb290ZnNfc3RhcnQgJHJvb3Rmc19lbmQKKworZWNobyAiQ3JlYXRpbmcgc3dhcCBwYXJ0aXRpb24gb24gJHN3YXAiCitbICRncnViX3ZlcnNpb24gLWVxIDAgXSAmJiBwbmFtZT0ncHJpbWFyeScgfHwgcG5hbWU9J3N3YXAnCitwYXJ0ZWQgJHtkZXZpY2V9IG1rcGFydCAkcG5hbWUgbGludXgtc3dhcCAkc3dhcF9zdGFydCAxMDAlCisKK3BhcnRlZCAke2RldmljZX0gcHJpbnQKKworZWNobyAiRm9ybWF0dGluZyAkYm9vdGZzIHRvIGV4dDMuLi4iCitta2ZzLmV4dDMgJGJvb3RmcworCitlY2hvICJGb3JtYXR0aW5nICRyb290ZnMgdG8gZXh0My4uLiIKK21rZnMuZXh0MyAkcm9vdGZzCisKK2VjaG8gIkZvcm1hdHRpbmcgc3dhcCBwYXJ0aXRpb24uLi4oJHN3YXApIgorbWtzd2FwICRzd2FwCisKK21rZGlyIC90Z3Rfcm9vdAorbWtkaXIgL3NyY19yb290Citta2RpciAtcCAvYm9vdAorCisjIEhhbmRsaW5nIG9mIHRoZSB0YXJnZXQgcm9vdCBwYXJ0aXRpb24KK21vdW50ICRyb290ZnMgL3RndF9yb290Cittb3VudCAtbyBydyxsb29wLG5vYXRpbWUsbm9kaXJhdGltZSAvcnVuL21lZGlhLyQxLyQyIC9zcmNfcm9vdAorZWNobyAiQ29weWluZyByb290ZnMgZmlsZXMuLi4iCitjcCAtYSAvc3JjX3Jvb3QvKiAvdGd0X3Jvb3QKK2lmIFsgLWQgL3RndF9yb290L2V0Yy8gXSA7IHRoZW4KKyAgICBpZiBbICRncnViX3ZlcnNpb24gLW5lIDAgXSA7IHRoZW4KKyAgICAgICAgYm9vdF91dWlkPSQoYmxraWQgLW8gdmFsdWUgLXMgVVVJRCAke2RldmljZX0yKQorICAgICAgICBzd2FwX3BhcnRfdXVpZD0kKGJsa2lkIC1vIHZhbHVlIC1zIFBBUlRVVUlEICR7ZGV2aWNlfTQpCisgICAgICAgIGJvb3RkZXY9IlVVSUQ9JGJvb3RfdXVpZCIKKyAgICAgICAgc3dhcGRldj0vZGV2L2Rpc2svYnktcGFydHV1aWQvJHN3YXBfcGFydF91dWlkCisgICAgZWxzZQorICAgICAgICBib290ZGV2PSR7ZGV2aWNlfTIKKyAgICAgICAgc3dhcGRldj0ke2RldmljZX00CisgICAgZmkKKyAgICBlY2hvICIkc3dhcGRldiAgICAgICAgICAgICAgICBzd2FwICAgICAgICAgICAgIHN3YXAgICAgICAgZGVmYXVsdHMgICAgICAgICAgICAgIDAgIDAiID4+IC90Z3Rfcm9vdC9ldGMvZnN0YWIKKyAgICBlY2hvICIkYm9vdGRldiAgICAgICAgICAgICAgL2Jvb3QgICAgICAgICAgICBleHQzICAgICAgIGRlZmF1bHRzICAgICAgICAgICAgICAxICAyIiA+PiAvdGd0X3Jvb3QvZXRjL2ZzdGFiCisgICAgIyBXZSBkb250IHdhbnQgdWRldiB0byBtb3VudCBvdXIgcm9vdCBkZXZpY2Ugd2hpbGUgd2UncmUgYm9vdGluZy4uLgorICAgIGlmIFsgLWQgL3RndF9yb290L2V0Yy91ZGV2LyBdIDsgdGhlbgorICAgICAgICBlY2hvICIke2RldmljZX0iID4+IC90Z3Rfcm9vdC9ldGMvdWRldi9tb3VudC5ibGFja2xpc3QKKyAgICBmaQorZmkKK3Vtb3VudCAvdGd0X3Jvb3QKK3Vtb3VudCAvc3JjX3Jvb3QKKworIyBIYW5kbGluZyBvZiB0aGUgdGFyZ2V0IGJvb3QgcGFydGl0aW9uCittb3VudCAkYm9vdGZzIC9ib290CitlY2hvICJQcmVwYXJpbmcgYm9vdCBwYXJ0aXRpb24uLi4iCitpZiBbIC1mIC9ldGMvZ3J1Yi5kLzAwX2hlYWRlciAtYSAkZ3J1Yl92ZXJzaW9uIC1uZSAwIF0gOyB0aGVuCisgICAgZWNobyAiUHJlcGFyaW5nIGN1c3RvbSBncnViMiBtZW51Li4uIgorICAgIHJvb3RfcGFydF91dWlkPSQoYmxraWQgLW8gdmFsdWUgLXMgUEFSVFVVSUQgJHtkZXZpY2V9MykKKyAgICBib290X3V1aWQ9JChibGtpZCAtbyB2YWx1ZSAtcyBVVUlEICR7ZGV2aWNlfTIpCisgICAgR1JVQkNGRz0iL2Jvb3QvZ3J1Yi9ncnViLmNmZyIKKyAgICBta2RpciAtcCAkKGRpcm5hbWUgJEdSVUJDRkcpCisgICAgY2F0ID4kR1JVQkNGRyA8PF9FT0YKK21lbnVlbnRyeSAiTGludXgiIHsKKyAgICBzZWFyY2ggLS1uby1mbG9wcHkgLS1mcy11dWlkICRib290X3V1aWQgLS1zZXQgcm9vdAorICAgIGxpbnV4IC92bWxpbnV6IHJvb3Q9UEFSVFVVSUQ9JHJvb3RfcGFydF91dWlkICRyb290d2FpdCBydyAkNSAkMyAkNCBxdWlldAorfQorX0VPRgorICAgIGNobW9kIDA0NDQgJEdSVUJDRkcKK2ZpCitncnViLWluc3RhbGwgJHtkZXZpY2V9CisKK2lmIFsgJGdydWJfdmVyc2lvbiAtZXEgMCBdIDsgdGhlbgorICAgIGVjaG8gIihoZDApICR7ZGV2aWNlfSIgPiAvYm9vdC9ncnViL2RldmljZS5tYXAKKyAgICBlY2hvICJQcmVwYXJpbmcgY3VzdG9tIGdydWIgbWVudS4uLiIKKyAgICBlY2hvICJkZWZhdWx0IDAiID4gL2Jvb3QvZ3J1Yi9tZW51LmxzdAorICAgIGVjaG8gInRpbWVvdXQgMzAiID4+IC9ib290L2dydWIvbWVudS5sc3QKKyAgICBlY2hvICJ0aXRsZSBMaXZlIEJvb3QvSW5zdGFsbC1JbWFnZSIgPj4gL2Jvb3QvZ3J1Yi9tZW51LmxzdAorICAgIGVjaG8gInJvb3QgIChoZDAsMCkiID4+IC9ib290L2dydWIvbWVudS5sc3QKKyAgICBlY2hvICJrZXJuZWwgL3ZtbGludXogcm9vdD0kcm9vdGZzIHJ3ICQzICQ0IHF1aWV0IiA+PiAvYm9vdC9ncnViL21lbnUubHN0CitmaQorCitjcCAvcnVuL21lZGlhLyQxL3ZtbGludXogL2Jvb3QvCisKK3Vtb3VudCAvYm9vdAorCitzeW5jCisKK2VjaG8gIlJlbW92ZSB5b3VyIGluc3RhbGxhdGlvbiBtZWRpYSwgYW5kIHByZXNzIEVOVEVSIgorCityZWFkIGVudGVyCisKK2VjaG8gIlJlYm9vdGluZy4uLiIKK3JlYm9vdCAtZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtbGl2ZS5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWxpdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg1MmM1NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWxpdmUuc2gKQEAgLTAsMCArMSwyMzUgQEAKKyMhL2Jpbi9zaAorCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKK1JPT1RfTU9VTlQ9Ii9yb290ZnMvIgorUk9PVF9JTUFHRT0icm9vdGZzLmltZyIKK01PVU5UPSIvYmluL21vdW50IgorVU1PVU5UPSIvYmluL3Vtb3VudCIKK0lTT0xJTlVYPSIiCisKK1JPT1RfRElTSz0iIgorCisjIENvcGllZCBmcm9tIGluaXRyYW1mcy1mcmFtZXdvcmsuIFRoZSBjb3JlIG9mIHRoaXMgc2NyaXB0IHByb2JhYmx5IHNob3VsZCBiZQorIyB0dXJuZWQgaW50byBpbml0cmFtZnMtZnJhbWV3b3JrIG1vZHVsZXMgdG8gcmVkdWNlIGR1cGxpY2F0aW9uLgordWRldl9kYWVtb24oKSB7CisJT1BUSU9OUz0iL3NiaW4vdWRldi91ZGV2ZCAvc2Jpbi91ZGV2ZCAvbGliL3VkZXYvdWRldmQgL2xpYi9zeXN0ZW1kL3N5c3RlbWQtdWRldmQiCisKKwlmb3IgbyBpbiAkT1BUSU9OUzsgZG8KKwkJaWYgWyAteCAiJG8iIF07IHRoZW4KKwkJCWVjaG8gJG8KKwkJCXJldHVybiAwCisJCWZpCisJZG9uZQorCisJcmV0dXJuIDEKK30KKworX1VERVZfREFFTU9OPWB1ZGV2X2RhZW1vbmAKKworZWFybHlfc2V0dXAoKSB7CisgICAgbWtkaXIgLXAgL3Byb2MKKyAgICBta2RpciAtcCAvc3lzCisgICAgbW91bnQgLXQgcHJvYyBwcm9jIC9wcm9jCisgICAgbW91bnQgLXQgc3lzZnMgc3lzZnMgL3N5cworICAgIG1vdW50IC10IGRldnRtcGZzIG5vbmUgL2RldgorCisgICAgIyBzdXBwb3J0IG1vZHVsYXIga2VybmVsCisgICAgbW9kcHJvYmUgaXNvZnMgMj4gL2Rldi9udWxsCisKKyAgICBta2RpciAtcCAvcnVuCisgICAgbWtkaXIgLXAgL3Zhci9ydW4KKworICAgICRfVURFVl9EQUVNT04gLS1kYWVtb24KKyAgICB1ZGV2YWRtIHRyaWdnZXIgLS1hY3Rpb249YWRkCit9CisKK3JlYWRfYXJncygpIHsKKyAgICBbIC16ICIkQ01ETElORSIgXSAmJiBDTURMSU5FPWBjYXQgL3Byb2MvY21kbGluZWAKKyAgICBmb3IgYXJnIGluICRDTURMSU5FOyBkbworICAgICAgICBvcHRhcmc9YGV4cHIgIngkYXJnIiA6ICd4W149XSo9XCguKlwpJ2AKKyAgICAgICAgY2FzZSAkYXJnIGluCisgICAgICAgICAgICByb290PSopCisgICAgICAgICAgICAgICAgUk9PVF9ERVZJQ0U9JG9wdGFyZyA7OworICAgICAgICAgICAgcm9vdGltYWdlPSopCisgICAgICAgICAgICAgICAgUk9PVF9JTUFHRT0kb3B0YXJnIDs7CisgICAgICAgICAgICByb290ZnN0eXBlPSopCisgICAgICAgICAgICAgICAgbW9kcHJvYmUgJG9wdGFyZyAyPiAvZGV2L251bGwgOzsKKyAgICAgICAgICAgIExBQkVMPSopCisgICAgICAgICAgICAgICAgbGFiZWw9JG9wdGFyZyA7OworICAgICAgICAgICAgdmlkZW89KikKKyAgICAgICAgICAgICAgICB2aWRlb19tb2RlPSRhcmcgOzsKKyAgICAgICAgICAgIHZnYT0qKQorICAgICAgICAgICAgICAgIHZnYV9tb2RlPSRhcmcgOzsKKyAgICAgICAgICAgIGNvbnNvbGU9KikKKyAgICAgICAgICAgICAgICBpZiBbIC16ICIke2NvbnNvbGVfcGFyYW1zfSIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBjb25zb2xlX3BhcmFtcz0kYXJnCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjb25zb2xlX3BhcmFtcz0iJGNvbnNvbGVfcGFyYW1zICRhcmciCisgICAgICAgICAgICAgICAgZmkgOzsKKyAgICAgICAgICAgIGRlYnVnc2hlbGwqKQorICAgICAgICAgICAgICAgIGlmIFsgLXogIiRvcHRhcmciIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsdGltZW91dD0zMAorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsdGltZW91dD0kb3B0YXJnCisgICAgICAgICAgICAgICAgZmkgCisgICAgICAgIGVzYWMKKyAgICBkb25lCit9CisKK2Jvb3RfbGl2ZV9yb290KCkgeworICAgICMgV2F0Y2hlcyB0aGUgdWRldiBldmVudCBxdWV1ZSwgYW5kIGV4aXRzIGlmIGFsbCBjdXJyZW50IGV2ZW50cyBhcmUgaGFuZGxlZAorICAgIHVkZXZhZG0gc2V0dGxlIC0tdGltZW91dD0zIC0tcXVpZXQKKyAgICBraWxsYWxsICIke19VREVWX0RBRU1PTiMjKi99IiAyPi9kZXYvbnVsbAorCisgICAgIyBBbGxvdyBmb3IgaWRlbnRpZmljYXRpb24gb2YgdGhlIHJlYWwgcm9vdCBldmVuIGFmdGVyIGJvb3QKKyAgICBta2RpciAtcCAgJHtST09UX01PVU5UfS9tZWRpYS9yZWFscm9vdAorICAgIG1vdW50IC1uIC0tbW92ZSAiL3J1bi9tZWRpYS8ke1JPT1RfRElTS30iICR7Uk9PVF9NT1VOVH0vbWVkaWEvcmVhbHJvb3QKKworICAgICMgTW92ZSB0aGUgbW91bnQgcG9pbnRzIG9mIHNvbWUgZmlsZXN5c3RlbXMgb3ZlciB0bworICAgICMgdGhlIGNvcnJlc3BvbmRpbmcgZGlyZWN0b3JpZXMgdW5kZXIgdGhlIHJlYWwgcm9vdCBmaWxlc3lzdGVtLgorICAgIGZvciBkaXIgaW4gYGF3ayAnL1wvZGV2LiogXC9ydW5cL21lZGlhL3twcmludCAkMn0nIC9wcm9jL21vdW50c2A7IGRvCisgICAgICAgIG1rZGlyIC1wICAke1JPT1RfTU9VTlR9L21lZGlhLyR7ZGlyIyMqL30KKyAgICAgICAgbW91bnQgLW4gLS1tb3ZlICRkaXIgJHtST09UX01PVU5UfS9tZWRpYS8ke2RpciMjKi99CisgICAgZG9uZQorICAgIG1vdW50IC1uIC0tbW92ZSAvcHJvYyAke1JPT1RfTU9VTlR9L3Byb2MKKyAgICBtb3VudCAtbiAtLW1vdmUgL3N5cyAke1JPT1RfTU9VTlR9L3N5cworICAgIG1vdW50IC1uIC0tbW92ZSAvZGV2ICR7Uk9PVF9NT1VOVH0vZGV2CisKKyAgICBjZCAkUk9PVF9NT1VOVAorCisgICAgIyBidXN5Ym94IHN3aXRjaF9yb290IHN1cHBvcnRzIC1jIG9wdGlvbgorICAgIGV4ZWMgc3dpdGNoX3Jvb3QgLWMgL2Rldi9jb25zb2xlICRST09UX01PVU5UIC9zYmluL2luaXQgJENNRExJTkUgfHwKKyAgICAgICAgZmF0YWwgIkNvdWxkbid0IHN3aXRjaF9yb290LCBkcm9wcGluZyB0byBzaGVsbCIKK30KKworZmF0YWwoKSB7CisgICAgZWNobyAkMSA+JENPTlNPTEUKKyAgICBlY2hvID4kQ09OU09MRQorICAgIGV4ZWMgc2gKK30KKworZWFybHlfc2V0dXAKKworWyAteiAiJENPTlNPTEUiIF0gJiYgQ09OU09MRT0iL2Rldi9jb25zb2xlIgorCityZWFkX2FyZ3MKKworZWNobyAiV2FpdGluZyBmb3IgcmVtb3ZhYmxlIG1lZGlhLi4uIgorQz0wCit3aGlsZSB0cnVlCitkbworICBmb3IgaSBpbiBgbHMgL3J1bi9tZWRpYSAyPi9kZXYvbnVsbGA7IGRvCisgICAgICBpZiBbIC1mIC9ydW4vbWVkaWEvJGkvJFJPT1RfSU1BR0UgXSA7IHRoZW4KKwkJZm91bmQ9InllcyIKKwkJUk9PVF9ESVNLPSIkaSIKKwkJYnJlYWsKKwkgIGVsaWYgWyAtZiAvcnVuL21lZGlhLyRpL2lzb2xpbnV4LyRST09UX0lNQUdFIF07IHRoZW4KKwkJZm91bmQ9InllcyIKKwkJSVNPTElOVVg9Imlzb2xpbnV4IgorCQlST09UX0RJU0s9IiRpIgorCQlicmVhawkKKyAgICAgIGZpCisgIGRvbmUKKyAgaWYgWyAiJGZvdW5kIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICAgIGJyZWFrOworICBmaQorICAjIGRvbid0IHdhaXQgZm9yIG1vcmUgdGhhbiAkc2hlbGx0aW1lb3V0IHNlY29uZHMsIGlmIGl0J3Mgc2V0CisgIGlmIFsgLW4gIiRzaGVsbHRpbWVvdXQiIF07IHRoZW4KKyAgICAgIGVjaG8gLW4gIiAiICQoKCAkc2hlbGx0aW1lb3V0IC0gJEMgKSkKKyAgICAgIGlmIFsgJEMgLWdlICRzaGVsbHRpbWVvdXQgXTsgdGhlbgorICAgICAgICAgICBlY2hvICIuLi4iCisJICAgZWNobyAiTW91bnRlZCBmaWxlc3lzdGVtcyIKKyAgICAgICAgICAgbW91bnQgfCBncmVwIG1lZGlhCisgICAgICAgICAgIGVjaG8gIkF2YWlsYWJsZSBibG9jayBkZXZpY2VzIgorICAgICAgICAgICBjYXQgL3Byb2MvcGFydGl0aW9ucworICAgICAgICAgICBmYXRhbCAiQ2Fubm90IGZpbmQgJFJPT1RfSU1BR0UgZmlsZSBpbiAvcnVuL21lZGlhLyogLCBkcm9wcGluZyB0byBhIHNoZWxsICIKKyAgICAgIGZpCisgICAgICBDPSQoKCBDICsgMSApKQorICBmaQorICBzbGVlcCAxCitkb25lCisKKyMgVHJ5IHRvIG1vdW50IHRoZSByb290IGltYWdlIHJlYWQtd3JpdGUgYW5kIHRoZW4gYm9vdCBpdCB1cC4KKyMgVGhpcyBmdW5jdGlvbiBkaXN0aW5ndWlzaGVzIGJldHdlZW4gYSByZWFkLW9ubHkgaW1hZ2UgYW5kIGEgcmVhZC13cml0ZSBpbWFnZS4KKyMgSW4gdGhlIGZvcm1lciBjYXNlICh0eXBpY2FsbHkgYW4gaXNvKSwgaXQgdHJpZXMgdG8gbWFrZSBhIHVuaW9uIG1vdW50IGlmIHBvc3NpYmxlLgorIyBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoZSByb290IGltYWdlIGNvdWxkIGJlIG1vdW50ZWQgYW5kIHRoZW4gZGlyZWN0bHkgYm9vdGVkIHVwLgorbW91bnRfYW5kX2Jvb3QoKSB7CisgICAgbWtkaXIgJFJPT1RfTU9VTlQKKyAgICBta25vZCAvZGV2L2xvb3AwIGIgNyAwIDI+L2Rldi9udWxsCisKKyAgICBpZiAhIG1vdW50IC1vIHJ3LGxvb3Asbm9hdGltZSxub2RpcmF0aW1lIC9ydW4vbWVkaWEvJFJPT1RfRElTSy8kSVNPTElOVVgvJFJPT1RfSU1BR0UgJFJPT1RfTU9VTlQgOyB0aGVuCisJZmF0YWwgIkNvdWxkIG5vdCBtb3VudCByb290ZnMgaW1hZ2UiCisgICAgZmkKKworICAgIGlmIHRvdWNoICRST09UX01PVU5UL2JpbiAyPi9kZXYvbnVsbDsgdGhlbgorCSMgVGhlIHJvb3QgaW1hZ2UgaXMgcmVhZC13cml0ZSwgZGlyZWN0bHkgYm9vdCBpdCB1cC4KKwlib290X2xpdmVfcm9vdAorICAgIGZpCisKKyAgICAjIGRldGVybWluZSB3aGljaCB1bmlmaWNhdGlvbiBmaWxlc3lzdGVtIHRvIHVzZQorICAgIHVuaW9uX2ZzX3R5cGU9IiIKKyAgICBpZiBncmVwIC1xIC13ICJvdmVybGF5ZnMiIC9wcm9jL2ZpbGVzeXN0ZW1zOyB0aGVuCisJdW5pb25fZnNfdHlwZT0ib3ZlcmxheWZzIgorICAgIGVsaWYgZ3JlcCAtcSAtdyAiYXVmcyIgL3Byb2MvZmlsZXN5c3RlbXM7IHRoZW4KKwl1bmlvbl9mc190eXBlPSJhdWZzIgorICAgIGVsc2UKKwl1bmlvbl9mc190eXBlPSIiCisgICAgZmkKKworICAgICMgbWFrZSBhIHVuaW9uIG1vdW50IGlmIHBvc3NpYmxlCisgICAgY2FzZSAkdW5pb25fZnNfdHlwZSBpbgorCSJvdmVybGF5ZnMiKQorCSAgICBta2RpciAtcCAvcm9vdGZzLnJvIC9yb290ZnMucncKKwkgICAgaWYgISBtb3VudCAtbiAtLW1vdmUgJFJPT1RfTU9VTlQgL3Jvb3Rmcy5ybzsgdGhlbgorCQlybSAtcmYgL3Jvb3Rmcy5ybyAvcm9vdGZzLnJ3CisJCWZhdGFsICJDb3VsZCBub3QgbW92ZSByb290ZnMgbW91bnQgcG9pbnQiCisJICAgIGVsc2UKKwkJbW91bnQgLXQgdG1wZnMgLW8gcncsbm9hdGltZSxtb2RlPTc1NSB0bXBmcyAvcm9vdGZzLnJ3CisJCW1vdW50IC10IG92ZXJsYXlmcyAtbyAibG93ZXJkaXI9L3Jvb3Rmcy5ybyx1cHBlcmRpcj0vcm9vdGZzLnJ3IiBvdmVybGF5ZnMgJFJPT1RfTU9VTlQKKwkJbWtkaXIgLXAgJFJPT1RfTU9VTlQvcm9vdGZzLnJvICRST09UX01PVU5UL3Jvb3Rmcy5ydworCQltb3VudCAtLW1vdmUgL3Jvb3Rmcy5ybyAkUk9PVF9NT1VOVC9yb290ZnMucm8KKwkJbW91bnQgLS1tb3ZlIC9yb290ZnMucncgJFJPT1RfTU9VTlQvcm9vdGZzLnJ3CisJICAgIGZpCisJICAgIDs7CisJImF1ZnMiKQorCSAgICBta2RpciAtcCAvcm9vdGZzLnJvIC9yb290ZnMucncKKwkgICAgaWYgISBtb3VudCAtbiAtLW1vdmUgJFJPT1RfTU9VTlQgL3Jvb3Rmcy5ybzsgdGhlbgorCQlybSAtcmYgL3Jvb3Rmcy5ybyAvcm9vdGZzLnJ3CisJCWZhdGFsICJDb3VsZCBub3QgbW92ZSByb290ZnMgbW91bnQgcG9pbnQiCisJICAgIGVsc2UKKwkJbW91bnQgLXQgdG1wZnMgLW8gcncsbm9hdGltZSxtb2RlPTc1NSB0bXBmcyAvcm9vdGZzLnJ3CisJCW1vdW50IC10IGF1ZnMgLW8gImRpcnM9L3Jvb3Rmcy5ydz1ydzovcm9vdGZzLnJvPXJvIiBhdWZzICRST09UX01PVU5UCisJCW1rZGlyIC1wICRST09UX01PVU5UL3Jvb3Rmcy5ybyAkUk9PVF9NT1VOVC9yb290ZnMucncKKwkJbW91bnQgLS1tb3ZlIC9yb290ZnMucm8gJFJPT1RfTU9VTlQvcm9vdGZzLnJvCisJCW1vdW50IC0tbW92ZSAvcm9vdGZzLnJ3ICRST09UX01PVU5UL3Jvb3Rmcy5ydworCSAgICBmaQorCSAgICA7OworCSIiKQorCSAgICBtb3VudCAtdCB0bXBmcyAtbyBydyxub2F0aW1lLG1vZGU9NzU1IHRtcGZzICRST09UX01PVU5UL21lZGlhCisJICAgIDs7CisgICAgZXNhYworCisgICAgIyBib290IHRoZSBpbWFnZQorICAgIGJvb3RfbGl2ZV9yb290Cit9CisKK2Nhc2UgJGxhYmVsIGluCisgICAgYm9vdCkKKwltb3VudF9hbmRfYm9vdAorCTs7CisgICAgaW5zdGFsbHxpbnN0YWxsLWVmaSkKKwlpZiBbIC1mIC9ydW4vbWVkaWEvJGkvJElTT0xJTlVYLyRST09UX0lNQUdFIF0gOyB0aGVuCisJICAgIC4vJGxhYmVsLnNoICRpLyRJU09MSU5VWCAkUk9PVF9JTUFHRSAkdmlkZW9fbW9kZSAkdmdhX21vZGUgJGNvbnNvbGVfcGFyYW1zCisJZWxzZQorCSAgICBmYXRhbCAiQ291bGQgbm90IGZpbmQgJGxhYmVsIHNjcmlwdCIKKwlmaQorCisJIyBJZiB3ZSdyZSBnZXR0aW5nIGhlcmUsIHdlIGZhaWxlZC4uLgorCWZhdGFsICJJbnN0YWxsYXRpb24gaW1hZ2UgZmFpbGVkIgorCTs7CisgICAgKikKKwkjIE5vdCBzdXJlIHdoYXQgYm9vdCBsYWJlbCBpcyBwcm92aWRlZC4gIFRyeSB0byBib290IHRvIGF2b2lkIGxvY2tpbmcgdXAuCisJbW91bnRfYW5kX2Jvb3QKKwk7OworZXNhYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1ib290XzEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtYm9vdF8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FlNzk2OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtYm9vdF8xLjAuYmIKQEAgLTAsMCArMSwxNiBAQAorU1VNTUFSWSA9ICJFeHRyZW1lbHkgYmFzaWMgbGl2ZSBpbWFnZSBpbml0IHNjcmlwdCIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitTUkNfVVJJID0gImZpbGU6Ly9pbml0LWJvb3Quc2giCisKK1BSID0gInIyIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQtYm9vdC5zaCAke0R9L2luaXQKK30KKworaW5oZXJpdCBhbGxhcmNoCisKK0ZJTEVTXyR7UE59ICs9ICIgL2luaXQgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvZGVidWcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9kZWJ1ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGJmZDdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvZGVidWcKQEAgLTAsMCArMSw4MiBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAoQykgMjAxMSBPLlMuIFN5c3RlbXMgU29mdHdhcmUgTFREQS4KKyMgTGljZW5zZWQgb24gTUlUCisKKyMgQWRkcyBzdXBwb3J0IHRvIGR5bmFtaWMgZGVidWdnaW5nIG9mIGluaXRyYW1mcyB1c2luZyBib290cGFyYW0gaW4KKyMgZm9sbG93aW5nIGZvcm1hdDoKKyMgICBzaGVsbCAgICAgICAgICAgICAgICAgOiBzdGFydHMgYSBzaGVsbCBiZWZvcmUgYW5kIGFmdGVyIGVhY2ggbW9kdWxlCisjICAgc2hlbGw9YmVmb3JlOjxtb2R1bGU+IDogc3RhcnRzIGEgc2hlbGwgYmVmb3JlIDxtb2R1bGU+IGlzIGxvYWRlZCBhbmQgcnVuCisjICAgc2hlbGw9YWZ0ZXI6PG1vZHVsZT4gIDogc3RhcnRzIGEgc2hlbGwgYWZ0ZXIgPG1vZHVsZT4gaXMgbG9hZGVkIGFuZCBydW4KKyMKKyMgICBzaGVsbC1kZWJ1ZyAgICAgICAgICAgICAgICAgOiBydW4gc2V0IC14IGFzIHNvb24gYXMgcG9zc2libGUKKyMgICBzaGVsbC1kZWJ1Zz1iZWZvcmU6PG1vZHVsZT4gOiBydW4gc2V0IC14IGJlZm9yZSA8bW9kdWxlPiBpcyBsb2FkZWQgYW5kIHJ1bgorIyAgIHNoZWxsLWRlYnVnPWFmdGVyOjxtb2R1bGU+ICA6IHJ1biBzZXQgLXggYWZ0ZXIgPG1vZHVsZT4gaXMgbG9hZGVkIGFuZCBydW4KKworREVCVUdfU0hFTEw9ImZhbHNlIgorCitkZWJ1Z19ob29rX2hhbmRsZXIoKSB7CisJc3RhdHVzPSQxCisJbW9kdWxlPSQyCisKKwlpZiBbIC1uICIkYm9vdHBhcmFtX3NoZWxsIiBdICYmIFsgIiRib290cGFyYW1fc2hlbGwiICE9ICJ0cnVlIiBdOyB0aGVuCisJCXNoZWxsX3dhbnRlZF9zdGF0dXM9YGV4cHIgJGJvb3RwYXJhbV9zaGVsbCA6ICdcKC4qXCk6LionYAorCQlzaGVsbF93YW50ZWRfbW9kdWxlPWBleHByICRib290cGFyYW1fc2hlbGwgOiAnLio6XCguKlwpJ2AKKworCQlpZiBbICIkc2hlbGxfd2FudGVkX3N0YXR1cyIgPSAiYmVmb3JlIiBdOyB0aGVuCisJCQlzaGVsbF93YW50ZWRfc3RhdHVzPXByZQorCQllbHNlCisJCQlzaGVsbF93YW50ZWRfc3RhdHVzPXBvc3QKKwkJZmkKKwlmaQorCisJaWYgWyAiJGJvb3RwYXJhbV9zaGVsbCIgPSAidHJ1ZSIgXSB8fAorCQkoIFsgIiRzdGF0dXMiID0gIiRzaGVsbF93YW50ZWRfc3RhdHVzIiBdICYmCisJCQlbICIkbW9kdWxlIiA9ICIkc2hlbGxfd2FudGVkX21vZHVsZSIgXSApOyB0aGVuCisJCWlmIFsgIiRzdGF0dXMiID0gInByZSIgXTsgdGhlbgorCQkJc3RhdHVzX21zZz0iYmVmb3JlIgorCQllbHNlCisJCQlzdGF0dXNfbXNnPSJhZnRlciIKKwkJZmkKKworCQltc2cgIlN0YXJ0aW5nIHNoZWxsICRzdGF0dXNfbXNnICRtb2R1bGUuLi4iCisJCXNoCisJZmkKKworCWlmIFsgLW4gIiRib290cGFyYW1fc2hlbGxfZGVidWciIF0gJiYgWyAiJGJvb3RwYXJhbV9zaGVsbF9kZWJ1ZyIgIT0gInRydWUiIF07IHRoZW4KKwkJc2hlbGxfZGVidWdfd2FudGVkX3N0YXR1cz1gZXhwciAkYm9vdHBhcmFtX3NoZWxsX2RlYnVnIDogJ1woLipcKTouKidgCisJCXNoZWxsX2RlYnVnX3dhbnRlZF9tb2R1bGU9YGV4cHIgJGJvb3RwYXJhbV9zaGVsbF9kZWJ1ZyA6ICcuKjpcKC4qXCknYAorCisJCWlmIFsgIiRzaGVsbF9kZWJ1Z193YW50ZWRfc3RhdHVzIiA9ICJiZWZvcmUiIF07IHRoZW4KKwkJCXNoZWxsX2RlYnVnX3dhbnRlZF9zdGF0dXM9cHJlCisJCWVsc2UKKwkJCXNoZWxsX2RlYnVnX3dhbnRlZF9zdGF0dXM9cG9zdAorCQlmaQorCWZpCisKKwlpZiBbICIkYm9vdHBhcmFtX3NoZWxsX2RlYnVnIiA9ICJ0cnVlIiBdIHx8CisJCSggWyAiJHN0YXR1cyIgPSAiJHNoZWxsX2RlYnVnX3dhbnRlZF9zdGF0dXMiIF0gJiYKKwkJCVsgIiRtb2R1bGUiID0gIiRzaGVsbF9kZWJ1Z193YW50ZWRfbW9kdWxlIiBdICk7IHRoZW4KKwkJaWYgWyAiJERFQlVHX1NIRUxMIiA9ICJ0cnVlIiBdOyB0aGVuCisJCQlyZXR1cm4gMAorCQlmaQorCisJCWlmIFsgIiRzdGF0dXMiID0gInByZSIgXTsgdGhlbgorCQkJc3RhdHVzX21zZz0iYmVmb3JlIgorCQllbHNlCisJCQlzdGF0dXNfbXNnPSJhZnRlciIKKwkJZmkKKworCQltc2cgIlN0YXJ0aW5nIHNoZWxsIGRlYnVnZ2luZyAkc3RhdHVzX21zZyAkbW9kdWxlLi4uIgorCQlERUJVR19TSEVMTD0idHJ1ZSIKKwkJc2V0IC14CisJZmkKK30KKworZGVidWdfZW5hYmxlZCgpIHsKKwlyZXR1cm4gMAorfQorCitkZWJ1Z19ydW4oKSB7CisJYWRkX21vZHVsZV9wcmVfaG9vayAiZGVidWdfaG9va19oYW5kbGVyIgorCWFkZF9tb2R1bGVfcG9zdF9ob29rICJkZWJ1Z19ob29rX2hhbmRsZXIiCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9lMmZzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvZTJmcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yOWY4MDFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvZTJmcwpAQCAtMCwwICsxLDI4IEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChDKSAyMDExIE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorIyBMaWNlbnNlZCBvbiBNSVQKKworZTJmc19lbmFibGVkKCkgeworCXJldHVybiAwCit9CisKK2UyZnNfcnVuKCkgeworCWZpbGVzeXN0ZW1zPSJleHQ0IGV4dDMgZXh0MiIKKworCSMgbG9hZCBtb2R1bGVzCisJZm9yIGZzIGluICRmaWxlc3lzdGVtczsgZG8KKwkJbG9hZF9rZXJuZWxfbW9kdWxlICRmcworCWRvbmUKKworCWZvciBmcyBpbiAkZmlsZXN5c3RlbXM7IGRvCisJCWV2YWwgImZzX29wdGlvbnM9XCRib290cGFyYW1fJHtmc30iCisJCWlmIFsgLW4gIiRmc19vcHRpb25zIiBdOyB0aGVuCisJCSAgICBkZXY9YGV4cHIgIiRmc19vcHRpb25zIiA6ICdcKFteOl0qXCkuKidgCisJCSAgICBwYXRoPWBleHByICIkZnNfb3B0aW9ucyIgOiAnW146XSo6XChbXjpdKlwpLionYAorCisJCSAgICBpbmZvICJNb3VudGluZyAkZGV2IGFzICRmcyBvbiAkcGF0aCBhcyAkZnMuLi4iCisJCQlta2RpciAtcCAkcGF0aAorCQkgICAgbW91bnQgLXQgJGZzICRkZXYgJHBhdGgKKwkJZmkKKwlkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9maW5pc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9maW5pc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTcxMmZmMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL2ZpbmlzaApAQCAtMCwwICsxLDYwIEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChDKSAyMDExIE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorIyBMaWNlbnNlZCBvbiBNSVQKKworZmluaXNoX2VuYWJsZWQoKSB7CisJcmV0dXJuIDAKK30KKworZmluaXNoX3J1bigpIHsKKwlpZiBbIC1uICIkUk9PVEZTX0RJUiIgXTsgdGhlbgorCQlpZiBbIC1uICIkYm9vdHBhcmFtX3Jvb3RkZWxheSIgXTsgdGhlbgorCQkJZGVidWcgIlNsZWVwaW5nIGZvciAkcm9vdGRlbGF5IHNlY29uZChzKSB0byB3YWl0IHJvb3QgdG8gc2V0dGxlLi4uIgorCQkJc2xlZXAgJGJvb3RwYXJhbV9yb290ZGVsYXkKKwkJZmkKKworCQlpZiBbIC1uICIkYm9vdHBhcmFtX3Jvb3QiIF07IHRoZW4KKwkJCWRlYnVnICJObyBlMmZzIGNvbXBhdGlibGUgZmlsZXN5c3RlbSBoYXMgYmVlbiBtb3VudGVkLCBtb3VudGluZyAkYm9vdHBhcmFtX3Jvb3QuLi4iCisKKwkJCWlmIFsgImBlY2hvICR7Ym9vdHBhcmFtX3Jvb3R9IHwgY3V0IC1jMS01YCIgPSAiVVVJRD0iIF07IHRoZW4KKwkJCQlyb290X3V1aWQ9YGVjaG8gJGJvb3RwYXJhbV9yb290IHwgY3V0IC1jNi1gCisJCQkJYm9vdHBhcmFtX3Jvb3Q9Ii9kZXYvZGlzay9ieS11dWlkLyRyb290X3V1aWQiCisJCQlmaQorCisJCQlpZiBbIC1lICIkYm9vdHBhcmFtX3Jvb3QiIF07IHRoZW4KKwkJCQlmbGFncz0iIgorCQkJCWlmIFsgLW4gIiRib290cGFyYW1fcm8iIF07IHRoZW4KKwkJCQkJaWYgWyAgLW4gIiRib290cGFyYW1fcm9vdGZsYWdzIiBdOyB0aGVuCisJCQkJCQlib290cGFyYW1fcm9vdGZsYWdzPSIkYm9vdHBhcmFtX3Jvb3RmbGFncywiCisJCQkJCWZpCisJCQkJCWJvb3RwYXJhbV9yb290ZmxhZ3M9IiR7Ym9vdHBhcmFtX3Jvb3RmbGFnc31ybyIKKwkJCQlmaQorCQkJCWlmIFsgLW4gIiRib290cGFyYW1fcm9vdGZsYWdzIiBdOyB0aGVuCisJCQkJCWZsYWdzPSIkZmxhZ3MgLW8kYm9vdHBhcmFtX3Jvb3RmbGFncyIKKwkJCQlmaQorCQkJCWlmIFsgLW4gIiRib290cGFyYW1fcm9vdGZzdHlwZSIgXTsgdGhlbgorCQkJCQlmbGFncz0iJGZsYWdzIC10JGJvb3RwYXJhbV9yb290ZnN0eXBlIgorCQkJCWZpCisJCQkJbW91bnQgJGZsYWdzICRib290cGFyYW1fcm9vdCAkUk9PVEZTX0RJUgorCQkJZWxzZQorCQkJCWRlYnVnICJyb290ICckYm9vdHBhcmFtX3Jvb3QnIGRvZXNuJ3QgZXhpc3QuIgorCQkJZmkKKwkJZmkKKworCQlpZiBbICEgLWQgJFJPT1RGU19ESVIvZGV2IF07IHRoZW4KKwkJCWZhdGFsICJFUlJPUjogVGhlcmUncyBubyAnL2Rldicgb24gcm9vdGZzLiIKKwkJZmkKKworCQlpbmZvICJTd2l0Y2hpbmcgcm9vdCB0byAnJFJPT1RGU19ESVInLi4uIgorCisJCWRlYnVnICJNb3ZpbmcgL2RldiwgL3Byb2MgYW5kIC9zeXMgb250byByb290ZnMuLi4iCisJCW1vdW50IC0tbW92ZSAvZGV2ICRST09URlNfRElSL2RldgorCQltb3VudCAtLW1vdmUgL3Byb2MgJFJPT1RGU19ESVIvcHJvYworCQltb3VudCAtLW1vdmUgL3N5cyAkUk9PVEZTX0RJUi9zeXMKKworCQljZCAkUk9PVEZTX0RJUgorCQlleGVjIHN3aXRjaF9yb290IC1jIC9kZXYvY29uc29sZSAkUk9PVEZTX0RJUiAke2Jvb3RwYXJhbV9pbml0Oi0vc2Jpbi9pbml0fQorCWVsc2UKKwkJZGVidWcgIk5vIHJvb3RmcyBoYXMgYmVlbiBzZXQiCisJZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL2luaXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkyOTFhZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9pbml0CkBAIC0wLDAgKzEsMTQ1IEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChDKSAyMDExIE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorIyBMaWNlbnNlZCBvbiBNSVQKKyMKKyMgUHJvdmlkZXMgdGhlIEFQSSB0byBiZSB1c2VkIGJ5IHRoZSBpbml0cmFtZnMgbW9kdWxlcworIworIyBNb2R1bGVzIG5lZWQgdG8gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKyMKKyMgPG1vZHVsZT5fZW5hYmxlZCA6IGNoZWNrIGlmIHRoZSBtb2R1bGUgb3VnaHQgdG8gcnVuIChyZXR1cm4gMSB0byBza2lwKQorIyA8bW9kdWxlPl9ydW4gICAgIDogZG8gd2hhdCBpcyBuZWVkCisjCisjIEJvb3QgcGFyYW1ldGVycyBhcmUgYXZhaWxhYmxlIG9uIGVudmlyb25tZW50IGluIHRoZSBhczoKKyMKKyMgJ2Zvbz12YWx1ZScgYXMgJ2Jvb3RwYXJhbV9mb289dmFsdWUnCisjICdmb28nIGFzICdib290cGFyYW1fZm9vPXRydWUnCisjICdmb28uYmFyWz12YWx1ZV0gYXMgJ2Zvb19iYXI9W3ZhbHVlfHRydWVdJworCisjIFJlZ2lzdGVyIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGJlZm9yZSBydW5uaW5nIGEgbW9kdWxlCisjIFRoZSBob29rIGlzIGNhbGxlZCBhczoKKyMgICA8ZnVuY3Rpb24+IHByZSA8bW9kdWxlPgorYWRkX21vZHVsZV9wcmVfaG9vaygpIHsKKwlNT0RVTEVfUFJFX0hPT0tTPSIkTU9EVUxFX1BSRV9IT09LUyAkMSIKK30KKworIyBSZWdpc3RlciBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhZnRlciBydW5uaW5nIGEgbW9kdWxlCisjIFRoZSBob29rIGlzIGNhbGxlZCBhczoKKyMgICA8ZnVuY3Rpb24+IHBvc3QgPG1vZHVsZT4KK2FkZF9tb2R1bGVfcG9zdF9ob29rKCkgeworCU1PRFVMRV9QT1NUX0hPT0tTPSIkTU9EVUxFX1BPU1RfSE9PS1MgJDEiCit9CisKKyMgTG9hZCBrZXJuZWwgbW9kdWxlCitsb2FkX2tlcm5lbF9tb2R1bGUoKSB7CisJaWYgbW9kcHJvYmUgJDEgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCWluZm8gIkxvYWRlZCBtb2R1bGUgJDEiCisJZWxzZQorCQlkZWJ1ZyAiRmFpbGVkIHRvIGxvYWQgbW9kdWxlICQxIgorCWZpCit9CisKKyMgUHJpbnRzIGluZm9ybWF0aW9uCittc2coKSB7CisJZWNobyAiJEAiID4vZGV2L2NvbnNvbGUKK30KKworIyBQcmludHMgaW5mb3JtYXRpb24gaWYgdmVyYm9zZSBib290cGFyYW0gaXMgdXNlZAoraW5mbygpIHsKKwlbIC1uICIkYm9vdHBhcmFtX3ZlcmJvc2UiIF0gJiYgZWNobyAiJEAiID4vZGV2L2NvbnNvbGUKK30KKworIyBQcmludHMgaW5mb3JtYXRpb24gaWYgZGVidWcgYm9vdHBhcmFtIGlzIHVzZWQKK2RlYnVnKCkgeworCVsgLW4gIiRib290cGFyYW1fZGVidWciIF0gJiYgZWNobyAiREVCVUc6ICRAIiA+L2Rldi9jb25zb2xlCit9CisKKyMgUHJpbnRzIGEgbWVzc2FnZSBhbmQgc3RhcnQgYSBlbmRsZXNzIGxvb3AKK2ZhdGFsKCkgeworICAgIGVjaG8gJDEgPi9kZXYvY29uc29sZQorICAgIGVjaG8gPi9kZXYvY29uc29sZQorCisgICAgaWYgWyAtbiAiYm9vdHBhcmFtX2luaXRfZmF0YWxfc2giIF07IHRoZW4KKyAgICAgICAgc2gKKyAgICBlbHNlCisJd2hpbGUgWyAidHJ1ZSIgXTsgZG8KKwkJc2xlZXAgMzYwMAorCWRvbmUKKyAgICBmaQorfQorCisjIFZhcmlhYmxlcyBzaGFyZWQgYW1vdW5nIG1vZHVsZXMKK1JPT1RGU19ESVI9Ii9yb290ZnMiICMgd2hlcmUgdG8gZG8gdGhlIHN3aXRjaCByb290CitNT0RVTEVfUFJFX0hPT0tTPSIiICAjIGZ1bmN0aW9ucyB0byBjYWxsIGJlZm9yZSBydW5uaW5nIGVhY2ggbW9kdWxlCitNT0RVTEVfUE9TVF9IT09LUz0iIiAjIGZ1bmN0aW9ucyB0byBjYWxsIGFmdGVyIHJ1bm5pbmcgZWFjaCBtb2R1bGUKK01PRFVMRVNfRElSPS9pbml0LmQgICMgcGxhY2UgdG8gbG9vayBmb3IgbW9kdWxlcworCisjIG1ha2UgbW91bnQgc3RvcCBjb21wbGFpbmluZyBhYm91dCBtaXNzaW5nIC9ldGMvZnN0YWIKK3RvdWNoIC9ldGMvZnN0YWIKKworIyBpbml0aWFsaXplIC9wcm9jLCAvc3lzIGFuZCAvdmFyL2xvY2sKK21rZGlyIC1wIC9wcm9jIC9zeXMgL3Zhci9sb2NrCittb3VudCAtdCBwcm9jIHByb2MgL3Byb2MKK21vdW50IC10IHN5c2ZzIHN5c2ZzIC9zeXMKKworIyBwb3B1bGF0ZSBib290cGFyYW0gZW52aXJvbm1lbnQKK2ZvciBwIGluIGBjYXQgL3Byb2MvY21kbGluZWA7IGRvCisJb3B0PWBlY2hvICRwIHwgY3V0IC1kJz0nIC1mMWAKKwlvcHQ9YGVjaG8gJG9wdCB8IHRyICcuLScgJ19fJ2AKKwlpZiBbICJgZWNobyAkcCB8IGN1dCAtZCc9JyAtZjFgIiA9ICIkcCIgXTsgdGhlbgorCQlldmFsICJib290cGFyYW1fJHtvcHR9PXRydWUiCisJZWxzZQorCQl2YWx1ZT0iYGVjaG8gJHAgfCBjdXQgLWQnPScgLWYyLWAiCisJCWV2YWwgImJvb3RwYXJhbV8ke29wdH09XCIke3ZhbHVlfVwiIgorCWZpCitkb25lCisKKyMgdXNlIC9kZXYgd2l0aCBkZXZ0bXBmcworaWYgZ3JlcCAtcSBkZXZ0bXBmcyAvcHJvYy9maWxlc3lzdGVtczsgdGhlbgorCW1rZGlyIC1wIC9kZXYKKwltb3VudCAtdCBkZXZ0bXBmcyBkZXZ0bXBmcyAvZGV2CitlbHNlCisJaWYgWyAhIC1kIC9kZXYgXTsgdGhlbgorCQlmYXRhbCAiRVJST1I6IC9kZXYgZG9lc24ndCBleGlzdCBhbmQga2VybmVsIGRvZXNuJ3QgaGFzIGRldnRtcGZzIGVuYWJsZWQuIgorCWZpCitmaQorCitta2RpciAkUk9PVEZTX0RJUgorCisjIExvYWQgYW5kIHJ1biBtb2R1bGVzCitmb3IgbSBpbiAkTU9EVUxFU19ESVIvKjsgZG8KKwkjIFNraXAgYmFja3VwIGZpbGVzCisJaWYgWyAiYGVjaG8gJG0gfCBzZWQgLWUgJ3MvXH4kLy8nYCIgIT0gIiRtIiBdOyB0aGVuCisJCWNvbnRpbnVlCisJZmkKKworCW1vZHVsZT1gYmFzZW5hbWUgJG0gfCBjdXQgLWQnLScgLWYgMmAKKwlkZWJ1ZyAiTG9hZGluZyBtb2R1bGUgJG1vZHVsZSIKKworCSMgcHJlIGhvb2tzCisJZm9yIGggaW4gJE1PRFVMRV9QUkVfSE9PS1M7IGRvCisJCWRlYnVnICJDYWxsaW5nIG1vZHVsZSBob29rIChwcmUpOiAkaCIKKwkJZXZhbCAiJGggcHJlICRtb2R1bGUiCisJCWRlYnVnICJGaW5pc2hlZCBtb2R1bGUgaG9vayAocHJlKTogJGgiCisJZG9uZQorCisJIyBwcm9jZXNzIG1vZHVsZQorCS4gJG0KKworCWlmICEgZXZhbCAiJHttb2R1bGV9X2VuYWJsZWQiOyB0aGVuCisJCWRlYnVnICJTa2lwcGluZyBtb2R1bGUgJG1vZHVsZSIKKwkJY29udGludWUKKwlmaQorCisJZGVidWcgIlJ1bm5pbmcgJHttb2R1bGV9X3J1biIKKwlldmFsICIke21vZHVsZX1fcnVuIgorCisJIyBwb3N0IGhvb2tzCisJZm9yIGggaW4gJE1PRFVMRV9QT1NUX0hPT0tTOyBkbworCQlkZWJ1ZyAiQ2FsbGluZyBtb2R1bGUgaG9vayAocG9zdCk6ICRoIgorCQlldmFsICIkaCBwb3N0ICRtb2R1bGUiCisJCWRlYnVnICJGaW5pc2hlZCBtb2R1bGUgaG9vayAocG9zdCk6ICRoIgorCWRvbmUKK2RvbmUKKworIyBDYXRjaCBhbGwKK2ZhdGFsICJFUlJPUjogSW5pdHJhbWZzIGZhaWxlZCB0byBpbml0aWFsaXplIHRoZSBzeXN0ZW0uIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvbWRldiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL21kZXYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVkZjFkNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL21kZXYKQEAgLTAsMCArMSwzMCBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAoQykgMjAxMSBPLlMuIFN5c3RlbXMgU29mdHdhcmUgTFREQS4KKyMgTGljZW5zZWQgb24gTUlUCisKK21kZXZfZW5hYmxlZCgpIHsKKwlpZiBbICEgLWUgL3NiaW4vbWRldiBdOyB0aGVuCisJCWRlYnVnICIvc2Jpbi9tZGV2IGRvZXNuJ3QgZXhpc3QiCisJCXJldHVybiAxCisJZmkKKworCXJldHVybiAwCit9CisKK21kZXZfcnVuKCkgeworCSMgc2V0dXAgdGhlIGVudmlyb25tZW50CisJbW91bnQgLXQgdG1wZnMgdG1wZnMgL2RldgorCisJbWtkaXIgLW0gMTc3NyAvZGV2L3NobQorCisJbWtkaXIgLW0gMDc1NSAvZGV2L3B0cworCW1vdW50IC10IGRldnB0cyBkZXZwdHMgL2Rldi9wdHMKKworCWVjaG8gL3NiaW4vbWRldiA+IC9wcm9jL3N5cy9rZXJuZWwvaG90cGx1ZworCW1kZXYgLXMKKworCSMgbG9hZCBtb2R1bGVzIGZvciBkZXZpY2VzCisJZmluZCAvc3lzIC1uYW1lIG1vZGFsaWFzIHwgd2hpbGUgcmVhZCBtOyBkbworCQlsb2FkX2tlcm5lbF9tb2R1bGUgJChjYXQgJG0pCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvdWRldiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL3VkZXYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI0NjJkYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL3VkZXYKQEAgLTAsMCArMSw0NSBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBPLlMuIFN5c3RlbXMgU29mdHdhcmUgTFREQS4KKyMgTGljZW5zZWQgb24gTUlUCisKK3VkZXZfc2h1dGRvd25faG9va19oYW5kbGVyKCkgeworCXN0YXR1cz0kMQorCW1vZHVsZT0kMgorCWlmIFsgIiRzdGF0dXMiID0gInByZSIgXSAmJiBbICIkbW9kdWxlIiA9ICJmaW5pc2giIF07IHRoZW4KKwkJa2lsbGFsbCBgYmFzZW5hbWUgJF9VREVWX0RBRU1PTmAgMj4vZGV2L251bGwKKwlmaQorfQorCit1ZGV2X2RhZW1vbigpIHsKKwlPUFRJT05TPSIvc2Jpbi91ZGV2L3VkZXZkIC9zYmluL3VkZXZkIC9saWIvdWRldi91ZGV2ZCAvbGliL3N5c3RlbWQvc3lzdGVtZC11ZGV2ZCIKKworCWZvciBvIGluICRPUFRJT05TOyBkbworCQlpZiBbIC14ICIkbyIgXTsgdGhlbgorCQkJZWNobyAkbworCQkJcmV0dXJuIDAKKwkJZmkKKwlkb25lCisKKwlyZXR1cm4gMQorfQorCitfVURFVl9EQUVNT049YHVkZXZfZGFlbW9uYAorCit1ZGV2X2VuYWJsZWQoKSB7CisJaWYgWyAteiAiJF9VREVWX0RBRU1PTiIgXTsgdGhlbgorCQltc2cgIldBUk5JTkc6IENhbm5vdCBmaW5kIHRoZSB1ZGV2IGRhZW1vbjsgZGFlbW9uIHdpbGwgbm90IGJlIHN0YXJ0ZWQgaW4gaW5pdHJhbWZzLiIKKwkJcmV0dXJuIDEKKwlmaQorCisJcmV0dXJuIDAKK30KKwordWRldl9ydW4oKSB7CisJYWRkX21vZHVsZV9wcmVfaG9vayAidWRldl9zaHV0ZG93bl9ob29rX2hhbmRsZXIiCisKKwlta2RpciAtcCAvcnVuCisKKwkkX1VERVZfREFFTU9OIC0tZGFlbW9uCisJdWRldmFkbSB0cmlnZ2VyIC0tYWN0aW9uPWFkZAorCXVkZXZhZG0gc2V0dGxlCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29ya18xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29ya18xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMzN2I5YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrXzEuMC5iYgpAQCAtMCwwICsxLDY2IEBACitTVU1NQVJZID0gIk1vZHVsYXIgaW5pdHJhbWZzIHN5c3RlbSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitSREVQRU5EU18ke1BOfSArPSAiYnVzeWJveCIKKworUFIgPSAicjIiCisKK2luaGVyaXQgYWxsYXJjaAorCitTUkNfVVJJID0gImZpbGU6Ly9pbml0IFwKKyAgICAgICAgICAgZmlsZTovL2ZpbmlzaCBcCisgICAgICAgICAgIGZpbGU6Ly9tZGV2IFwKKyAgICAgICAgICAgZmlsZTovL3VkZXYgXAorICAgICAgICAgICBmaWxlOi8vZTJmcyBcCisgICAgICAgICAgIGZpbGU6Ly9kZWJ1ZyIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfS9pbml0LmQKKworICAgICMgYmFzZQorICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQgJHtEfS9pbml0CisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vZmluaXNoICR7RH0vaW5pdC5kLzk5LWZpbmlzaAorCisgICAgIyBtZGV2CisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vbWRldiAke0R9L2luaXQuZC8wMS1tZGV2CisKKyAgICAjIHVkZXYKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS91ZGV2ICR7RH0vaW5pdC5kLzAxLXVkZXYKKworICAgICMgZTJmcworICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2UyZnMgJHtEfS9pbml0LmQvMTAtZTJmcworCisgICAgIyBkZWJ1ZworICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2RlYnVnICR7RH0vaW5pdC5kLzAwLWRlYnVnCisKKyAgICAjIENyZWF0ZSBkZXZpY2Ugbm9kZXMgZXhwZWN0ZWQgYnkgc29tZSBrZXJuZWxzIGluIGluaXRyYW1mcworICAgICMgYmVmb3JlIGV2ZW4gZXhlY3V0aW5nIC9pbml0LgorICAgIGluc3RhbGwgLWQgJHtEfS9kZXYKKyAgICBta25vZCAtbSA2MjIgJHtEfS9kZXYvY29uc29sZSBjIDUgMQorfQorCitQQUNLQUdFUyA9ICIke1BOfS1iYXNlIFwKKyAgICAgICAgICAgIGluaXRyYW1mcy1tb2R1bGUtbWRldiBcCisgICAgICAgICAgICBpbml0cmFtZnMtbW9kdWxlLXVkZXYgXAorICAgICAgICAgICAgaW5pdHJhbWZzLW1vZHVsZS1lMmZzIFwKKyAgICAgICAgICAgIGluaXRyYW1mcy1tb2R1bGUtZGVidWciCisKK0ZJTEVTXyR7UE59LWJhc2UgPSAiL2luaXQgL2luaXQuZC85OS1maW5pc2ggL2RldiIKKworU1VNTUFSWV9pbml0cmFtZnMtbW9kdWxlLW1kZXYgPSAiaW5pdHJhbWZzIHN1cHBvcnQgZm9yIG1kZXYiCitSREVQRU5EU19pbml0cmFtZnMtbW9kdWxlLW1kZXYgPSAiJHtQTn0tYmFzZSIKK0ZJTEVTX2luaXRyYW1mcy1tb2R1bGUtbWRldiA9ICIvaW5pdC5kLzAxLW1kZXYiCisKK1NVTU1BUllfaW5pdHJhbWZzLW1vZHVsZS11ZGV2ID0gImluaXRyYW1mcyBzdXBwb3J0IGZvciB1ZGV2IgorUkRFUEVORFNfaW5pdHJhbWZzLW1vZHVsZS11ZGV2ID0gIiR7UE59LWJhc2UgdWRldiIKK0ZJTEVTX2luaXRyYW1mcy1tb2R1bGUtdWRldiA9ICIvaW5pdC5kLzAxLXVkZXYiCisKK1NVTU1BUllfaW5pdHJhbWZzLW1vZHVsZS1lMmZzID0gImluaXRyYW1mcyBzdXBwb3J0IGZvciBleHQ0L2V4dDMvZXh0MiBmaWxlc3lzdGVtcyIKK1JERVBFTkRTX2luaXRyYW1mcy1tb2R1bGUtZTJmcyA9ICIke1BOfS1iYXNlIgorRklMRVNfaW5pdHJhbWZzLW1vZHVsZS1lMmZzID0gIi9pbml0LmQvMTAtZTJmcyIKKworU1VNTUFSWV9pbml0cmFtZnMtbW9kdWxlLWRlYnVnID0gImluaXRyYW1mcyBkeW5hbWljIGRlYnVnIHN1cHBvcnQiCitSREVQRU5EU19pbml0cmFtZnMtbW9kdWxlLWRlYnVnID0gIiR7UE59LWJhc2UiCitGSUxFU19pbml0cmFtZnMtbW9kdWxlLWRlYnVnID0gIi9pbml0LmQvMDAtZGVidWciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtYm9vdF8xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtYm9vdF8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdiMzAyNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1ib290XzEuMC5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkxpdmUgaW1hZ2UgaW5pdCBzY3JpcHQiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorREVQRU5EUyA9ICJ2aXJ0dWFsL2tlcm5lbCIKK1JERVBFTkRTXyR7UE59ID0gInVkZXYgdWRldi1leHRyYWNvbmYiCitTUkNfVVJJID0gImZpbGU6Ly9pbml0LWxpdmUuc2giCisKK1BSID0gInIxMiIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0LWxpdmUuc2ggJHtEfS9pbml0CisgICAgICAgIGluc3RhbGwgLWQgJHtEfS9kZXYKKyAgICAgICAgbWtub2QgLW0gNjIyICR7RH0vZGV2L2NvbnNvbGUgYyA1IDEKK30KKworRklMRVNfJHtQTn0gKz0gIiAvaW5pdCAvZGV2ICIKKworIyBEdWUgdG8ga2VybmVsIGRlcGVuZGVuY3kKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbC1lZmktdGVzdGZzXzEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLWVmaS10ZXN0ZnNfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwM2JkMmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbC1lZmktdGVzdGZzXzEuMC5iYgpAQCAtMCwwICsxLDE2IEBACitTVU1NQVJZID0gIkxpdmUgaW1hZ2UgaW5zdGFsbCBzY3JpcHQgZm9yIHdpdGggYSBzZWNvbmQgcm9vdGZzL2tlcm5lbCBvcHRpb24iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorU1JDX1VSSSA9ICJmaWxlOi8vaW5pdC1pbnN0YWxsLWVmaS10ZXN0ZnMuc2giCisKK1JERVBFTkRTXyR7UE59ID0gInBhcnRlZCBlMmZzcHJvZ3MtbWtlMmZzIGRvc2ZzdG9vbHMiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdC1pbnN0YWxsLWVmaS10ZXN0ZnMuc2ggJHtEfS9pbnN0YWxsLWVmaS5zaAorfQorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorRklMRVNfJHtQTn0gPSAiIC9pbnN0YWxsLWVmaS5zaCAiCitDT01QQVRJQkxFX0hPU1QgPSAiKGkuODZ8eDg2XzY0KS4qLWxpbnV4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpXzEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLWVmaV8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJjMWZjZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLWVmaV8xLjAuYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJMaXZlIGltYWdlIGluc3RhbGwgc2NyaXB0IGZvciBncnViLWVmaSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitTUkNfVVJJID0gImZpbGU6Ly9pbml0LWluc3RhbGwtZWZpLnNoIgorCitQUiA9ICJyMSIKKworUkRFUEVORFNfJHtQTn0gPSAicGFydGVkIGUyZnNwcm9ncy1ta2UyZnMgZG9zZnN0b29scyB1dGlsLWxpbnV4LWJsa2lkIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQtaW5zdGFsbC1lZmkuc2ggJHtEfS9pbnN0YWxsLWVmaS5zaAorfQorCisjIFdoaWxlIHRoaXMgcGFja2FnZSBtYXliZSBhbiBhbGxhcmNoIGR1ZSB0byBpdCBiZWluZyBhCisjIHNpbXBsZSBzY3JpcHQsIHJlYWxpdHkgaXMgdGhhdCBpdCBpcyBIb3N0IHNwZWNpZmljIGJhc2VkCisjIG9uIHRoZSBDT01QQVRJQkxFX0hPU1QgYmVsb3csIHdoaWNoIG5lZWRzIHRvIHRha2UgcHJlY2VkZW5jZQorI2luaGVyaXQgYWxsYXJjaAorSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworRklMRVNfJHtQTn0gPSAiIC9pbnN0YWxsLWVmaS5zaCAiCisKK0NPTVBBVElCTEVfSE9TVCA9ICIoaS44Nnx4ODZfNjQpLiotbGludXgiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbC10ZXN0ZnNfMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWluc3RhbGwtdGVzdGZzXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzdiZmQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWluc3RhbGwtdGVzdGZzXzEuMC5iYgpAQCAtMCwwICsxLDE2IEBACitTVU1NQVJZID0gIkxpdmUgaW1hZ2UgaW5zdGFsbCBzY3JpcHQgd2l0aCBhIHNlY29uZCByb290ZnMva2VybmVsIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKK1NSQ19VUkkgPSAiZmlsZTovL2luaXQtaW5zdGFsbC10ZXN0ZnMuc2giCisKK1JERVBFTkRTXyR7UE59ID0gImdydWIgcGFydGVkIGUyZnNwcm9ncy1ta2UyZnMiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdC1pbnN0YWxsLXRlc3Rmcy5zaCAke0R9L2luc3RhbGwuc2gKK30KKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKK0ZJTEVTXyR7UE59ID0gIiAvaW5zdGFsbC5zaCAiCitDT01QQVRJQkxFX0hPU1QgPSAiKGkuODZ8eDg2XzY0KS4qLWxpbnV4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWluc3RhbGxfMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWluc3RhbGxfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YjNiMzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbF8xLjAuYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJMaXZlIGltYWdlIGluc3RhbGwgc2NyaXB0IGZvciBncnViIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKK1NSQ19VUkkgPSAiZmlsZTovL2luaXQtaW5zdGFsbC5zaCIKKworUFIgPSAicjkiCisKK1MgPSAiJHtXT1JLRElSfSIKKworUkRFUEVORFNfJHtQTn0gPSAiZ3J1YiBwYXJ0ZWQgZTJmc3Byb2dzLW1rZTJmcyB1dGlsLWxpbnV4LWJsa2lkIgorCitkb19pbnN0YWxsKCkgeworICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0LWluc3RhbGwuc2ggJHtEfS9pbnN0YWxsLnNoCit9CisKKyMgV2hpbGUgdGhpcyBwYWNrYWdlIG1heWJlIGFuIGFsbGFyY2ggZHVlIHRvIGl0IGJlaW5nIGEgCisjIHNpbXBsZSBzY3JpcHQsIHJlYWxpdHkgaXMgdGhhdCBpdCBpcyBIb3N0IHNwZWNpZmljIGJhc2VkCisjIG9uIHRoZSBDT01QQVRJQkxFX0hPU1QgYmVsb3csIHdoaWNoIG5lZWRzIHRvIHRha2UgcHJlY2VkZW5jZQorI2luaGVyaXQgYWxsYXJjaAorSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworRklMRVNfJHtQTn0gPSAiIC9pbnN0YWxsLnNoICIKKworQ09NUEFUSUJMRV9IT1NUID0gIihpLjg2fHg4Nl82NCkuKi1saW51eCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL0dQTHYyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvR1BMdjIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVlODE4MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL0dQTHYyLnBhdGNoCkBAIC0wLDAgKzEsMzQ3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9DT1BZSU5HCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDUxMTkwNQorLS0tIC9kZXYvbnVsbAorKysrIGIvQ09QWUlORworQEAgLTAsMCArMSwzMzkgQEAKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisrCisrIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisrIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKysgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisrIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorKworKwkJCSAgICBQcmVhbWJsZQorKworKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCisrTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCisrR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKKytGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCisrdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQorK3RoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCisreW91ciBwcm9ncmFtcywgdG9vLgorKworKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKKytoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCisrdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CisraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKKytpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisrCisrICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCisrYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CisrZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorKworKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAorK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCisrc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorK3JpZ2h0cy4KKysKKysgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKysoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisrCisrICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgorK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCisrc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCisrd2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KKyt0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorKworKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKKytwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCisrcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisrCisrICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorK21vZGlmaWNhdGlvbiBmb2xsb3cuCisrCisrCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKysgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKysKKysgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKKythIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAorK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKKytyZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKKyttZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgorK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCisrZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKKytsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCisrdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisrCisrQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKKytjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCisrcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQorK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KKytXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKysKKysgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKKytjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCisrbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKKythbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorKworK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAorK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisrCisrICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCisrb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisrCisrICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorKworKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKysgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisrICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisrICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKysKKysgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisrICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKysgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisrICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisrICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisrICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisrICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKysgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisrCisrVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgorK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCisrYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCisrdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgorK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCisrZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorKworK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAorK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisrCisrSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQorK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCisrdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAorK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKysKKysgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKysgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisrICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisrICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKysgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisrICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisrICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisrICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKysgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisrCisrVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCisrY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKKythc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KKytjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCisrc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCisrYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKKytmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CisraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorKworK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKKythY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CisrYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCisrZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90CisrY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKysKKysgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKKytvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKKyt2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCisrSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKKyt0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKysKKysgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCisrZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCisrcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCisrYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZworK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorKworKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCisrb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bworK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCisrcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCisrdGhpcyBMaWNlbnNlLgorKworKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAorK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCisrY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKKytleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKKytMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CisrbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKKythbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KKyt0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCisrcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKysKKytJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKKythbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCisrYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKKytjaXJjdW1zdGFuY2VzLgorKworK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKKytwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKKytpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKKytpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKKytnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCisrdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKKytzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCisrdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CisraW1wb3NlIHRoYXQgY2hvaWNlLgorKworK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KKytjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKKytvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCisrbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCisrdGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcworK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKKytvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKKytiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KKythZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKysKKytFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCisrc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKKytsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCisrZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKytTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCisrdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorK0ZvdW5kYXRpb24uCisrCisrICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCisrcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgorK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCisrb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorKworKwkJCSAgICBOTyBXQVJSQU5UWQorKworKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCisrRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCisrT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECisrT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCisrVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorKworKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKKytSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKKytUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKKytZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKysKKysJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisrCisrCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKysKKysgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKKytwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CisrZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisrCisrICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAorK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKKytjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAorK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorKworKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorKyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorKworK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorKworK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKKyt3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorKworKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKysgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisrICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKysKKytUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKKytwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CisrYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCisrbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKysKKytZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCisrbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorKworKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisrCisrICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKysgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisrCisrVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCisrcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKKytjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKKytsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvYXJtL2FsaWdubWVudC5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2FybS9hbGlnbm1lbnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU3N2I5YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2FybS9hbGlnbm1lbnQuc2gKQEAgLTAsMCArMSwxMyBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiBhbGlnbm1lbnQKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgIG1vdW50a2VybmZzCisjIFJlcXVpcmVkLVN0b3A6ICAgICBtb3VudGtlcm5mcworIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIyMgRU5EIElOSVQgSU5GTworCitpZiBbIC1lIC9wcm9jL2NwdS9hbGlnbm1lbnQgXTsgdGhlbgorICAgZWNobyAiMyIgPiAvcHJvYy9jcHUvYWxpZ25tZW50CitmaQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9iYW5uZXIuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9iYW5uZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUyYjA5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2Jhbm5lci5zaApAQCAtMCwwICsxLDI0IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6IGJhbm5lcgorIyBSZXF1aXJlZC1TdGFydDoKKyMgUmVxdWlyZWQtU3RvcDoKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOgorIyMjIEVORCBJTklUIElORk8KKworaWYgWyAhIC1lIC9kZXYvdHR5IF07IHRoZW4KKyAgICAvYmluL21rbm9kIC1tIDA2NjYgL2Rldi90dHkgYyA1IDAKK2ZpCisKK2lmICggPiAvZGV2L3R0eTAgKSAyPi9kZXYvbnVsbDsgdGhlbgorICAgIHZ0bWFzdGVyPS9kZXYvdHR5MAorZWxpZiAoID4gL2Rldi92Yy8wICkgMj4vZGV2L251bGw7IHRoZW4KKyAgICB2dG1hc3Rlcj0vZGV2L3ZjLzAKK2VsaWYgKCA+IC9kZXYvY29uc29sZSApIDI+L2Rldi9udWxsOyB0aGVuCisgICAgdnRtYXN0ZXI9L2Rldi9jb25zb2xlCitlbHNlCisgICAgdnRtYXN0ZXI9L2Rldi9udWxsCitmaQorZWNobyA+ICR2dG1hc3RlcgorZWNobyAiUGxlYXNlIHdhaXQ6IGJvb3RpbmcuLi4iID4gJHZ0bWFzdGVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9ib290bWlzYy5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2Jvb3RtaXNjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRmNTUzYmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9ib290bWlzYy5zaApAQCAtMCwwICsxLDgxIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIGJvb3RtaXNjCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkbG9jYWxfZnMgbW91bnR2aXJ0ZnMKKyMgUmVxdWlyZWQtU3RvcDogICAgICRsb2NhbF9mcworIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6ICAgICAgMCA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBNaXNjIGFuZCBvdGhlci4KKyMjIyBFTkQgSU5JVCBJTkZPCisKKy4gL2V0Yy9kZWZhdWx0L3JjUworIworIyBQdXQgYSBub2xvZ2luIGZpbGUgaW4gL2V0YyB0byBwcmV2ZW50IHBlb3BsZSBmcm9tIGxvZ2dpbmcgaW4gYmVmb3JlCisjIHN5c3RlbSBzdGFydHVwIGlzIGNvbXBsZXRlLgorIworaWYgdGVzdCAiJERFTEFZTE9HSU4iID0geWVzCit0aGVuCisgIGVjaG8gIlN5c3RlbSBib290dXAgaW4gcHJvZ3Jlc3MgLSBwbGVhc2Ugd2FpdCIgPiAvZXRjL25vbG9naW4KKyAgY3AgL2V0Yy9ub2xvZ2luIC9ldGMvbm9sb2dpbi5ib290CitmaQorCisjCisjIFNldCBwc2V1ZG8tdGVybWluYWwgYWNjZXNzIHBlcm1pc3Npb25zLgorIworaWYgdGVzdCAtYyAvZGV2L3R0eXAwCit0aGVuCisJY2htb2QgNjY2IC9kZXYvdHR5W3AtemEtZV1bMC05YS1mXQorCWNob3duIHJvb3Q6dHR5IC9kZXYvdHR5W3AtemEtZV1bMC05YS1mXQorZmkKKworIworIyBBcHBseSAvcHJvYyBzZXR0aW5ncyBpZiBkZWZpbmVkCisjCitTWVNDVExfQ09ORj0iL2V0Yy9zeXNjdGwuY29uZiIKK2lmIFsgLWYgIiR7U1lTQ1RMX0NPTkZ9IiBdCit0aGVuCisJaWYgWyAteCAiL3NiaW4vc3lzY3RsIiBdCisJdGhlbgorCQkjIGJ1c3lib3ggc3lzY3RsIGRvZXMgbm90IHN1cHBvcnQgLXEKKwkJVkVSQk9TRV9SRURJUj0iMT4vZGV2L251bGwiCisJCWlmIFsgIiR7VkVSQk9TRX0iICE9ICJubyIgXTsgdGhlbgorCQkJVkVSQk9TRV9SRURJUj0iMT4mMSIKKwkJZmkKKwkJZXZhbCAvc2Jpbi9zeXNjdGwgLXAgIiR7U1lTQ1RMX0NPTkZ9IiAkVkVSQk9TRV9SRURJUgorCWVsc2UKKwkJZWNobyAiVG8gaGF2ZSAke1NZU0NUTF9DT05GfSBhcHBsaWVkIGR1cmluZyBib290LCBpbnN0YWxsIHBhY2thZ2UgPHByb2Nwcz4uIgorCWZpCitmaQorCisjCisjIFVwZGF0ZSAvZXRjL21vdGQuCisjCitpZiB0ZXN0ICIkRURJVE1PVEQiICE9IG5vCit0aGVuCisJdW5hbWUgLWEgPiAvZXRjL21vdGQudG1wCisJc2VkIDFkIC9ldGMvbW90ZCA+PiAvZXRjL21vdGQudG1wCisJbXYgL2V0Yy9tb3RkLnRtcCAvZXRjL21vdGQKK2ZpCisKKyMKKyMgVGhpcyBpcyBhcyBnb29kIGEgcGxhY2UgYXMgYW55IGZvciBhIHNhbml0eSBjaGVjaworIworIyBTZXQgdGhlIHN5c3RlbSBjbG9jayBmcm9tIGhhcmR3YXJlIGNsb2NrCisjIElmIHRoZSB0aW1lc3RhbXAgaXMgbW9yZSByZWNlbnQgdGhhbiB0aGUgY3VycmVudCB0aW1lLAorIyB1c2UgdGhlIHRpbWVzdGFtcCBpbnN0ZWFkLgordGVzdCAteCAvZXRjL2luaXQuZC9od2Nsb2NrLnNoICYmIC9ldGMvaW5pdC5kL2h3Y2xvY2suc2ggc3RhcnQKK2lmIHRlc3QgLWUgL2V0Yy90aW1lc3RhbXAKK3RoZW4KKwlTWVNURU1EQVRFPWBkYXRlIC11ICslNFklMm0lMmQlMkglMk0lMlNgCisJcmVhZCBUSU1FU1RBTVAgPCAvZXRjL3RpbWVzdGFtcAorCWlmIFsgJHtUSU1FU1RBTVB9IC1ndCAkU1lTVEVNREFURSBdOyB0aGVuCisJCSMgZm9ybWF0IHRoZSB0aW1lc3RhbXAgYXMgZGF0ZSBleHBlY3RzIGl0ICgybTJkMkgyTTRZLjJTKQorCQlUU19ZUj0ke1RJTUVTVEFNUCU/Pz8/Pz8/Pz8/fQorCQlUU19TRUM9JHtUSU1FU1RBTVAjPz8/Pz8/Pz8/Pz8/fQorCQlUU19GSVJTVDEyPSR7VElNRVNUQU1QJT8/fQorCQlUU19NSURETEU4PSR7VFNfRklSU1QxMiM/Pz8/fQorCQlkYXRlIC11ICR7VFNfTUlERExFOH0ke1RTX1lSfS4ke1RTX1NFQ30KKwkJdGVzdCAteCAvZXRjL2luaXQuZC9od2Nsb2NrLnNoICYmIC9ldGMvaW5pdC5kL2h3Y2xvY2suc2ggc3RvcAorCWZpCitmaQorOiBleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2NoZWNrZnMuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9jaGVja2ZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYyODY5NDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9jaGVja2ZzLnNoCkBAIC0wLDAgKzEsNTAgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgY2hlY2tmcworIyBSZXF1aXJlZC1TdGFydDogICAgY2hlY2tyb290CisjIFJlcXVpcmVkLVN0b3A6ICAgICAKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOgorIyBTaG9ydC1EZXNjcmlwdGlvbjogQ2hlY2sgYWxsIG90aGVyIGZpbGUgc3lzdGVtcworIyMjIEVORCBJTklUIElORk8KKworLiAvZXRjL2RlZmF1bHQvcmNTCisKKyMKKyMgQ2hlY2sgdGhlIHJlc3Qgb2YgdGhlIGZpbGVzeXN0ZW1zLgorIworaWYgdGVzdCAhIC1mIC9mYXN0Ym9vdAordGhlbgorICAgIGlmIHRlc3QgLWYgL2ZvcmNlZnNjaworICAgIHRoZW4KKyAgICAgICAgZm9yY2U9Ii1mIgorICAgIGVsc2UKKyAgICAgICAgZm9yY2U9IiIKKyAgICBmaQorICAgIGlmIHRlc3QgIiRGU0NLRklYIiAgPSB5ZXMKKyAgICB0aGVuCisJZml4PSIteSIKKyAgICBlbHNlCisJZml4PSItYSIKKyAgICBmaQorICAgIHNwaW5uZXI9Ii1DIgorICAgIGNhc2UgIiRURVJNIiBpbgorCWR1bWJ8bmV0d29ya3x1bmtub3dufCIiKSBzcGlubmVyPSIiIDs7CisgICAgZXNhYworICAgIHRlc3QgImB1bmFtZSAtbWAiID0gInMzOTAiICYmIHNwaW5uZXI9IiIgIyBUaGlzIHNob3VsZCBnbyBhd2F5CisgICAgdGVzdCAiJFZFUkJPU0UiICE9IG5vICYmIGVjaG8gIkNoZWNraW5nIGFsbCBmaWxlc3lzdGVtcy4uLiIKKyAgICBmc2NrICRzcGlubmVyIC1SIC1BICRmaXggJGZvcmNlCisgICAgaWYgdGVzdCAiJD8iIC1ndCAxCisgICAgdGhlbgorICAgICAgZWNobworICAgICAgZWNobyAiZnNjayBmYWlsZWQuICBQbGVhc2UgcmVwYWlyIG1hbnVhbGx5LiIKKyAgICAgIGVjaG8KKyAgICAgIGVjaG8gIkNPTlRST0wtRCB3aWxsIGV4aXQgZnJvbSB0aGlzIHNoZWxsIGFuZCBjb250aW51ZSBzeXN0ZW0gc3RhcnR1cC4iCisgICAgICBlY2hvCisgICAgICAjIFN0YXJ0IGEgc2luZ2xlIHVzZXIgc2hlbGwgb24gdGhlIGNvbnNvbGUKKyAgICAgIC9zYmluL3N1bG9naW4gJENPTlNPTEUKKyAgICBmaQorZmkKK3JtIC1mIC9mYXN0Ym9vdCAvZm9yY2Vmc2NrCisKKzogZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9jaGVja3Jvb3Quc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9jaGVja3Jvb3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGZlZTJhZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2NoZWNrcm9vdC5zaApAQCAtMCwwICsxLDE0OCBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBjaGVja3Jvb3QKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgIHVkZXYKKyMgUmVxdWlyZWQtU3RvcDogICAgIAorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBDaGVjayB0byByb290IGZpbGUgc3lzdGVtLgorIyMjIEVORCBJTklUIElORk8KKworLiAvZXRjL2RlZmF1bHQvcmNTCisKKyMKKyMgU2V0IFNVTE9HSU4gaW4gL2V0Yy9kZWZhdWx0L3JjUyB0byB5ZXMgaWYgeW91IHdhbnQgYSBzdWxvZ2luIHRvIGJlIHNwYXduZWQKKyMgZnJvbSB0aGlzIHNjcmlwdCAqYmVmb3JlIGFueXRoaW5nIGVsc2UqIHdpdGggYSB0aW1lb3V0LCBsaWtlIFNDTyBkb2VzLgorIwordGVzdCAiJFNVTE9HSU4iID0geWVzICYmIHN1bG9naW4gLXQgMzAgJENPTlNPTEUKKworIworIyBSZWFkIC9ldGMvZnN0YWIuCisjCitleGVjIDk8IC9ldGMvZnN0YWIKK3Jvb3Rtb2RlPXJ3Cityb290b3B0cz1ydworcm9vdGNoZWNrPSRFTkFCTEVfUk9PVEZTX0ZTQ0sKK3N3YXBfb25fbWQ9bm8KK2RldmZzPQord2hpbGUgcmVhZCBmcyBtbnQgdHlwZSBvcHRzIGR1bXAgcGFzcyBqdW5rIDwmOQorZG8KKwljYXNlICIkZnMiIGluCisJCSIifFwjKikKKwkJCWNvbnRpbnVlOworCQkJOzsKKwkJL2Rldi9tZCopCisJCQkjIFN3YXAgb24gbWQgZGV2aWNlLgorCQkJdGVzdCAiJHR5cGUiID0gc3dhcCAmJiBzd2FwX29uX21kPXllcworCQkJOzsKKwkJL2Rldi8qKQorCQkJOzsKKwkJKikKKwkJCSMgTWlnaHQgYmUgYSBzd2FwZmlsZS4KKwkJCXRlc3QgIiR0eXBlIiA9IHN3YXAgJiYgc3dhcF9vbl9tZD15ZXMKKwkJCTs7CisJZXNhYworCXRlc3QgIiR0eXBlIiA9IGRldmZzICYmIGRldmZzPSIkZnMiCisJdGVzdCAiJG1udCIgIT0gLyAmJiBjb250aW51ZQorCXJvb3RvcHRzPSIkb3B0cyIKKwl0ZXN0ICIkcGFzcyIgPSAwIC1vICIkcGFzcyIgPSAiIiAmJiByb290Y2hlY2s9bm8KKwljYXNlICIkb3B0cyIgaW4KKwkJcm98cm8sKnwqLHJvfCoscm8sKikKKwkJCXJvb3Rtb2RlPXJvCisJCQk7OworCWVzYWMKK2RvbmUKK2V4ZWMgMD4mOSA5PiYtCisKKyMgQ2hlY2sgZm9yIGNvbmZsaWN0aW5nIGNvbmZpZ3VyYXRpb25zCitpZiBbICIkcm9vdG1vZGUiID0gInJvIiAtYSAiJFJPT1RGU19SRUFEX09OTFkiID0gIm5vIiBdIHx8IFwKKwlbICIkcm9vdG1vZGUiID0gInJ3IiAtYSAiJFJPT1RGU19SRUFEX09OTFkiID0gInllcyIgXTsgdGhlbgorCWVjaG8gIiIKKwllY2hvICJXQVJOOiBjb25mbGljdGluZyBjb25maWd1cmF0aW9ucyBpbiAvZXRjL2ZzdGFiIGFuZCAvZXRjL2RlZmF1bHQvcmNTIgorCWVjaG8gIiAgICAgIHJlZ2FyZGluZyB0aGUgd3JpdGFiaWxpdHkgb2Ygcm9vdGZzLiBQbGVhc2UgZml4IG9uZSBvZiB0aGVtLiIKKwllY2hvICIiCitmaQorCisKKyMKKyMgQWN0aXZhdGUgdGhlIHN3YXAgZGV2aWNlKHMpIGluIC9ldGMvZnN0YWIuIFRoaXMgbmVlZHMgdG8gYmUgZG9uZQorIyBiZWZvcmUgZnNjaywgc2luY2UgZnNjayBjYW4gYmUgcXVpdGUgbWVtb3J5LWh1bmdyeS4KKyMKK3Rlc3QgIiRWRVJCT1NFIiAhPSBubyAmJiBlY2hvICJBY3RpdmF0aW5nIHN3YXAiCitzd2Fwb24gLWEgMj4gL2Rldi9udWxsCisKKyMKKyMgQ2hlY2sgdGhlIHJvb3QgZmlsZXN5c3RlbS4KKyMKK2lmIHRlc3QgLWYgL2Zhc3Rib290IHx8IHRlc3QgJHJvb3RjaGVjayA9IG5vCit0aGVuCisgIHRlc3QgJHJvb3RjaGVjayA9IHllcyAmJiBlY2hvICJGYXN0IGJvb3QsIG5vIGZpbGVzeXN0ZW0gY2hlY2siCitlbHNlCisgICMKKyAgIyBFbnN1cmUgdGhhdCByb290IGlzIHF1aWVzY2VudCBhbmQgcmVhZC1vbmx5IGJlZm9yZSBmc2NrJ2luZy4KKyAgIworICBtb3VudCAtbiAtbyByZW1vdW50LHJvIC8KKyAgaWYgdGVzdCAkPyA9IDAKKyAgdGhlbgorICAgIGlmIHRlc3QgLWYgL2ZvcmNlZnNjaworICAgIHRoZW4KKwlmb3JjZT0iLWYiCisgICAgZWxzZQorCWZvcmNlPSIiCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkRlNDS0ZJWCIgPSB5ZXMKKyAgICB0aGVuCisJZml4PSIteSIKKyAgICBlbHNlCisJZml4PSItYSIKKyAgICBmaQorICAgIHNwaW5uZXI9Ii1DIgorICAgIGNhc2UgIiRURVJNIiBpbgorICAgICAgICBkdW1ifG5ldHdvcmt8dW5rbm93bnwiIikgc3Bpbm5lcj0iIiA7OworICAgIGVzYWMKKyAgICB0ZXN0IGB1bmFtZSAtbWAgPSBzMzkwICYmIHNwaW5uZXI9IiIgIyBUaGlzIHNob3VsZCBnbyBhd2F5CisgICAgdGVzdCAiJFZFUkJPU0UiICE9IG5vICYmIGVjaG8gIkNoZWNraW5nIHJvb3QgZmlsZXN5c3RlbS4uLiIKKyAgICBmc2NrICRzcGlubmVyICRmb3JjZSAkZml4IC8KKyAgICAjCisgICAgIyBJZiB0aGVyZSB3YXMgYSBmYWlsdXJlLCBkcm9wIGludG8gc2luZ2xlLXVzZXIgbW9kZS4KKyAgICAjCisgICAgIyBOT1RFOiAiZmFpbHVyZSIgaXMgZGVmaW5lZCBhcyBleGl0aW5nIHdpdGggYSByZXR1cm4gY29kZSBvZgorICAgICMgMiBvciBsYXJnZXIuICBBIHJldHVybiBjb2RlIG9mIDEgaW5kaWNhdGVzIHRoYXQgZmlsZXN5c3RlbQorICAgICMgZXJyb3JzIHdlcmUgY29ycmVjdGVkIGJ1dCB0aGF0IHRoZSBib290IG1heSBwcm9jZWVkLgorICAgICMKKyAgICBpZiB0ZXN0ICIkPyIgLWd0IDEKKyAgICB0aGVuCisgICAgICAjIFN1cnByaXNlISBSZS1kaXJlY3RpbmcgZnJvbSBhIEhFUkUgZG9jdW1lbnQgKGFzIGluCisgICAgICAjICJjYXQgPDwgRU9GIikgd29uJ3Qgd29yaywgYmVjYXVzZSB0aGUgcm9vdCBpcyByZWFkLW9ubHkuCisgICAgICBlY2hvCisgICAgICBlY2hvICJmc2NrIGZhaWxlZC4gIFBsZWFzZSByZXBhaXIgbWFudWFsbHkgYW5kIHJlYm9vdC4gIFBsZWFzZSBub3RlIgorICAgICAgZWNobyAidGhhdCB0aGUgcm9vdCBmaWxlc3lzdGVtIGlzIGN1cnJlbnRseSBtb3VudGVkIHJlYWQtb25seS4gIFRvIgorICAgICAgZWNobyAicmVtb3VudCBpdCByZWFkLXdyaXRlOiIKKyAgICAgIGVjaG8KKyAgICAgIGVjaG8gIiAgICMgbW91bnQgLW4gLW8gcmVtb3VudCxydyAvIgorICAgICAgZWNobworICAgICAgZWNobyAiQ09OVFJPTC1EIHdpbGwgZXhpdCBmcm9tIHRoaXMgc2hlbGwgYW5kIFJFQk9PVCB0aGUgc3lzdGVtLiIKKyAgICAgIGVjaG8KKyAgICAgICMgU3RhcnQgYSBzaW5nbGUgdXNlciBzaGVsbCBvbiB0aGUgY29uc29sZQorICAgICAgL3NiaW4vc3Vsb2dpbiAkQ09OU09MRQorICAgICAgcmVib290IC1mCisgICAgZmkKKyAgZWxzZQorICAgIGVjaG8gIioqKiBFUlJPUiEgIENhbm5vdCBmc2NrIHJvb3QgZnMgYmVjYXVzZSBpdCBpcyBub3QgbW91bnRlZCByZWFkLW9ubHkhIgorICAgIGVjaG8KKyAgZmkKK2ZpCisKKyMKKyMJSWYgdGhlIHJvb3QgZmlsZXN5c3RlbSB3YXMgbm90IG1hcmtlZCBhcyByZWFkLW9ubHkgaW4gL2V0Yy9mc3RhYiwKKyMJcmVtb3VudCB0aGUgcm9vdGZzIHJ3IGJ1dCBkbyBub3QgdHJ5IHRvIGNoYW5nZSBtdGFiIGJlY2F1c2UgaXQKKyMJaXMgb24gYSBybyBmcyB1bnRpbCB0aGUgcmVtb3VudCBzdWNjZWVkZWQuIFRoZW4gY2xlYW4gdXAgb2xkIG10YWJzCisjCWFuZCBmaW5hbGx5IHdyaXRlIHRoZSBuZXcgbXRhYi4KKyMKK21vdW50IC1uIC1vIHJlbW91bnQsJHJvb3Rtb2RlIC8KK2lmIHRlc3QgIiRyb290bW9kZSIgPSBydwordGhlbgorCWxuIC1zZiAvcHJvYy9tb3VudHMgL2Rldi9tdGFiCitmaQorCis6IGV4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZGV2cHRzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZGV2cHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMDk3OGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9kZXZwdHMKQEAgLTAsMCArMSw1IEBACisjIEdJRCBvZiB0aGUgYHR0eScgZ3JvdXAKK1RUWUdSUD01CisgCisjIFNldCB0byA2MDAgdG8gaGF2ZSBgbWVzZyBuJyBiZSB0aGUgZGVmYXVsdAorVFRZTU9ERT02MjAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2RldnB0cy5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2RldnB0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNjA0M2ZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZGV2cHRzLnNoCkBAIC0wLDAgKzEsMjggQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgZGV2cHRzCisjIFJlcXVpcmVkLVN0YXJ0OiB1ZGV2CisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IE1vdW50IC9kZXYvcHRzIGZpbGUgc3lzdGVtcy4KKyMjIyBFTkQgSU5JVCBJTkZPCisKKy4gL2V0Yy9kZWZhdWx0L2RldnB0cworCitpZiBncmVwIC1xIGRldnB0cyAvcHJvYy9maWxlc3lzdGVtcwordGhlbgorCSMKKwkjCUNyZWF0ZSBtdWx0aXBsZXhvciBkZXZpY2UuCisJIworCXRlc3QgLWMgL2Rldi9wdG14IHx8IG1rbm9kIC1tIDY2NiAvZGV2L3B0bXggYyA1IDIKKworCSMKKwkjCU1vdW50IC9kZXYvcHRzIGlmIG5lZWRlZC4KKwkjCisJaWYgISBncmVwIC1xIGRldnB0cyAvcHJvYy9tb3VudHMKKwl0aGVuCisJCW1rZGlyIC1wIC9kZXYvcHRzCisJCW1vdW50IC10IGRldnB0cyBkZXZwdHMgL2Rldi9wdHMgLW9naWQ9JHtUVFlHUlB9LG1vZGU9JHtUVFlNT0RFfQorCWZpCitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZG1lc2cuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9kbWVzZy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTdiMDY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZG1lc2cuc2gKQEAgLTAsMCArMSwxNyBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICAgICBkbWVzZworIyBSZXF1aXJlZC1TdGFydDoKKyMgUmVxdWlyZWQtU3RvcDoKKyMgRGVmYXVsdC1TdGFydDogICAgICAgIFMKKyMgRGVmYXVsdC1TdG9wOgorIyMjIEVORCBJTklUIElORk8KKworaWYgWyAtZiAvdmFyL2xvZy9kbWVzZyBdOyB0aGVuCisJaWYgWyAtZiAvdXNyL3NiaW4vbG9ncm90YXRlIF07IHRoZW4KKwkJbG9ncm90YXRlIC1mIC9ldGMvbG9ncm90YXRlLWRtZXNnLmNvbmYKKwllbHNlCisJCW12IC1mIC92YXIvbG9nL2RtZXNnIC92YXIvbG9nL2RtZXNnLm9sZAorCWZpCitmaQorZG1lc2cgLXMgMTMxMDcyID4gL3Zhci9sb2cvZG1lc2cKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2Z1bmN0aW9ucyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2Z1bmN0aW9ucwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMWFkMWVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZnVuY3Rpb25zCkBAIC0wLDAgKzEsOTEgQEAKKyMgLSotU2hlbGwtc2NyaXB0LSotCisjCisjIGZ1bmN0aW9ucyAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIGZ1bmN0aW9ucyB0byBiZSB1c2VkIGJ5IG1vc3Qgb3IgYWxsCisjICAgICAgICAgICAgICAgc2hlbGwgc2NyaXB0cyBpbiB0aGUgL2V0Yy9pbml0LmQgZGlyZWN0b3J5LgorIworCitOT1JNQUw9IlxcMDMzWzA7MzltIiAgICAgICAgICMgU3RhbmRhcmQgY29uc29sZSBncmV5CitTVUNDRVNTPSJcXDAzM1sxOzMybSIgICAgICAgICMgU3VjY2VzcyBpcyBncmVlbgorV0FSTklORz0iXFwwMzNbMTszM20iICAgICAgICAjIFdhcm5pbmdzIGFyZSB5ZWxsb3cKK0ZBSUxVUkU9IlxcMDMzWzE7MzFtIiAgICAgICAgIyBGYWlsdXJlcyBhcmUgcmVkCitJTkZPPSJcXDAzM1sxOzM2bSIgICAgICAgICAgICMgSW5mb3JtYXRpb24gaXMgbGlnaHQgY3lhbgorQlJBQ0tFVD0iXFwwMzNbMTszNG0iICAgICAgICAjIEJyYWNrZXRzIGFyZSBibHVlCisKKyMgTk9URTogVGhlIHBpZG9mcHJvYyAoKSBkb2Vzbid0IHN1cHBvcnQgdGhlIHByb2Nlc3Mgd2hpY2ggaXMgYSBzY3JpcHQgdW5sZXNzCisjICAgICAgIHRoZSBwaWRvZiBzdXBwb3J0cyAiLXgiIG9wdGlvbi4gSWYgeW91IHdhbnQgdG8gdXNlIGl0IGZvciBzdWNoIGEKKyMgICAgICAgcHJvY2VzczoKKyMgICAgICAgMSkgSWYgdGhlcmUgaXMgbm8gInBpZG9mIC14IiwgcmVwbGFjZSB0aGUgInBpZG9mICQxIiB3aXRoIGFub3RoZXIKKyMgICAgICAgICAgY29tbWFuZCBsaWtlKGZvciBjb3JlLWltYWdlLW1pbmltYWwpOgorIyAgICAgICAgICAgIHBzIHwgYXdrICcvJyIkMSInLyB7cHJpbnQgJDF9JworIyAgICAgICBPcgorIyAgICAgICAyKSBJZiB0aGVyZSBpcyAicGlkb2YgLXgiLCByZXBsYWNlICJwaWRvZiIgd2l0aCAicGlkb2YgLXgiLgorIworIyBwaWRvZnByb2MgLSBwcmludCB0aGUgcGlkIG9mIGEgcHJvY2VzcworIyAkMTogdGhlIG5hbWUgb2YgdGhlIHByb2Nlc3MKK3BpZG9mcHJvYyAoKSB7CisKKwkjIHBpZG9mIG91dHB1dCBudWxsIHdoZW4gbm8gcHJvZ3JhbSBpcyBydW5uaW5nLCBzbyBubyAiMj4vZGV2L251bGwiLgorCXBpZD1gcGlkb2YgJDFgCisJc3RhdHVzPSQ/CisJY2FzZSAkc3RhdHVzIGluCisJMCkKKwkJZWNobyAkcGlkCisJCXJldHVybiAwCisJCTs7CisJMTI3KQorCQllY2hvICJFUlJPUjogY29tbWFuZCBwaWRvZiBub3QgZm91bmQiID4mMgorCQlleGl0IDEyNworCQk7OworCSopCisJCXJldHVybiAkc3RhdHVzCisJCTs7CisJZXNhYworfQorCittYWNoaW5lX2lkKCkgeyAjIHJldHVybiB0aGUgbWFjaGluZSBJRAorCWF3ayAnQkVHSU4geyBGUz0iOiAiIH0gL0hhcmR3YXJlLyBcCisJCXsgZ3N1YigiICIsICJfIiwgJDIpOyBwcmludCB0b2xvd2VyKCQyKSB9ICcgPC9wcm9jL2NwdWluZm8KK30KKwora2lsbHByb2MoKSB7ICMga2lsbCB0aGUgbmFtZWQgcHJvY2VzcyhlcykKKwlwaWQ9YHBpZG9mcHJvYyAkMWAgJiYga2lsbCAkcGlkCit9CisKK3N0YXR1cygpIHsKKyAgICBsb2NhbCBwaWQKKyAgICBpZiBbICIkIyIgPSAwIF07IHRoZW4KKyAgICAgICAgZWNobyAiVXNhZ2U6IHN0YXR1cyB7cHJvZ3JhbX0iCisgICAgICAgIHJldHVybiAxCisgICAgZmkKKyAgICBwaWQ9YHBpZG9mcHJvYyAkMWAKKyAgICBpZiBbIC1uICIkcGlkIiBdOyB0aGVuCisgICAgICAgIGVjaG8gIiQxIChwaWQgJHBpZCkgaXMgcnVubmluZy4uLiIKKyAgICAgICAgcmV0dXJuIDAKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIiQxIGlzIHN0b3BwZWQiCisgICAgZmkKKyAgICByZXR1cm4gMworfQorCitzdWNjZXNzKCkgeworICAgIGVjaG8gLW4gLWUgIiR7QlJBQ0tFVH1bJHtTVUNDRVNTfSAgT0sgICR7QlJBQ0tFVH1dJHtOT1JNQUx9IgorICAgIHJldHVybiAwCit9CisKK2ZhaWx1cmUoKSB7CisgICAgbG9jYWwgcmM9JCoKKyAgICBlY2hvIC1uIC1lICIke0JSQUNLRVR9WyR7RkFJTFVSRX0gRkFJTCAke0JSQUNLRVR9XSR7Tk9STUFMfSIKKyAgICByZXR1cm4gJHJjCit9CisKK3dhcm5pbmcoKSB7CisgICAgbG9jYWwgcmM9JCoKKyAgICBlY2hvIC1uIC1lICIke0JSQUNLRVR9WyR7V0FSTklOR30gV0FSTiAke0JSQUNLRVR9XSR7Tk9STUFMfSIKKyAgICByZXR1cm4gJHJjCit9CisKK3Bhc3NlZCgpIHsKKyAgICBsb2NhbCByYz0kKgorICAgIGVjaG8gLW4gLWUgIiR7QlJBQ0tFVH1bJHtTVUNDRVNTfSBQQVNTICR7QlJBQ0tFVH1dJHtOT1JNQUx9IgorICAgIHJldHVybiAkcmMKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2hhbHQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9oYWx0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE1NmY3MzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9oYWx0CkBAIC0wLDAgKzEsMjkgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgaGFsdAorIyBSZXF1aXJlZC1TdGFydDoKKyMgUmVxdWlyZWQtU3RvcDoKKyMgRGVmYXVsdC1TdGFydDoKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAKKyMgU2hvcnQtRGVzY3JpcHRpb246IEV4ZWN1dGUgdGhlIGhhbHQgY29tbWFuZC4KKyMgRGVzY3JpcHRpb246CisjIyMgRU5EIElOSVQgSU5GTworCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKKyMgU2VlIGlmIHdlIG5lZWQgdG8gY3V0IHRoZSBwb3dlci4KK2lmIHRlc3QgLXggL2V0Yy9pbml0LmQvdXBzLW1vbml0b3IKK3RoZW4KKwkvZXRjL2luaXQuZC91cHMtbW9uaXRvciBwb3dlcm9mZgorZmkKKworIyBEb24ndCBzaHV0IGRvd24gZHJpdmVzIGlmIHdlJ3JlIHVzaW5nIFJBSUQuCitoZGRvd249Ii1oIgoraWYgZ3JlcCAtcXMgJ15tZC4qYWN0aXZlJyAvcHJvYy9tZHN0YXQKK3RoZW4KKwloZGRvd249IiIKK2ZpCisKK2hhbHQgU0VEX0hBTFRBUkdTIC1wICRoZGRvd24KKworOiBleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2hvc3RuYW1lLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvaG9zdG5hbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTUyODdjYzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9ob3N0bmFtZS5zaApAQCAtMCwwICsxLDIyIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIGhvc3RuYW1lCisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBTZXQgaG9zdG5hbWUgYmFzZWQgb24gL2V0Yy9ob3N0bmFtZQorIyMjIEVORCBJTklUIElORk8KK0hPU1ROQU1FPSQoL2Jpbi9ob3N0bmFtZSkKKworaG9zdG5hbWUgLWIgLUYgL2V0Yy9ob3N0bmFtZSAyPiAvZGV2L251bGwKK2lmIFsgJD8gLWVxIDAgXTsgdGhlbgorCWV4aXQKK2ZpCisKKyMgQnVzeWJveCBob3N0bmFtZSBkb2Vzbid0IHN1cHBvcnQgLWIgc28gd2UgbmVlZCBpbXBsZW1lbnQgaXQgb24gb3VyIG93bgoraWYgWyAtZiAvZXRjL2hvc3RuYW1lIF07dGhlbgorCWhvc3RuYW1lIGBjYXQgL2V0Yy9ob3N0bmFtZWAKK2VsaWYgWyAteiAiJEhPU1ROQU1FIiAtbyAiJEhPU1ROQU1FIiA9ICIobm9uZSkiIC1vICEgLXogImBlY2hvICRIT1NUTkFNRSB8IHNlZCAtbiAnL15bMC05XSpcLlswLTldLiovcCdgIiBdIDsgdGhlbgorCWhvc3RuYW1lIGxvY2FsaG9zdAorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2xvZ3JvdGF0ZS1kbWVzZy5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvbG9ncm90YXRlLWRtZXNnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY0NmU0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2xvZ3JvdGF0ZS1kbWVzZy5jb25mCkBAIC0wLDAgKzEsOSBAQAorIyBzZWUgIm1hbiBsb2dyb3RhdGUiIGZvciBkZXRhaWxzCisjIHJvdGF0ZSBkbWVzZywgYW5kIGtlZXAgNSB2ZXJzaW9ucy4KKworL3Zhci9sb2cvZG1lc2cgeworCWNyZWF0ZQorCXJvdGF0ZSA1CisJbm9kYXRlZXh0Cit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL21vdW50YWxsLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvbW91bnRhbGwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTRiYWU0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL21vdW50YWxsLnNoCkBAIC0wLDAgKzEsMzkgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgbW91bnRhbGwKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgIG1vdW50dmlydGZzCisjIFJlcXVpcmVkLVN0b3A6IAorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBNb3VudCBhbGwgZmlsZXN5c3RlbXMuCisjIERlc2NyaXB0aW9uOgorIyMjIEVORCBJTklUIElORk8KKworLiAvZXRjL2RlZmF1bHQvcmNTCisKKyMKKyMgTW91bnQgbG9jYWwgZmlsZXN5c3RlbXMgaW4gL2V0Yy9mc3RhYi4gRm9yIHNvbWUgcmVhc29uLCBwZW9wbGUKKyMgbWlnaHQgd2FudCB0byBtb3VudCAicHJvYyIgc2V2ZXJhbCB0aW1lcywgYW5kIG1vdW50IC12IGNvbXBsYWlucworIyBhYm91dCB0aGlzLiBTbyB3ZSBtb3VudCAicHJvYyIgZmlsZXN5c3RlbXMgd2l0aG91dCAtdi4KKyMKK3Rlc3QgIiRWRVJCT1NFIiAhPSBubyAmJiBlY2hvICJNb3VudGluZyBsb2NhbCBmaWxlc3lzdGVtcy4uLiIKK21vdW50IC1hdCBub25mcyxub3NtYmZzLG5vbmNwZnMgMj4vZGV2L251bGwKKworIworIyBXZSBtaWdodCBoYXZlIG1vdW50ZWQgc29tZXRoaW5nIG92ZXIgL2Rldiwgc2VlIGlmIC9kZXYvaW5pdGN0bCBpcyB0aGVyZS4KKyMKK2lmIHRlc3QgISAtcCAvZGV2L2luaXRjdGwKK3RoZW4KKwlybSAtZiAvZGV2L2luaXRjdGwKKwlta25vZCAtbSA2MDAgL2Rldi9pbml0Y3RsIHAKK2ZpCitraWxsIC1VU1IxIDEKKworIworIyBFeGVjdXRlIHN3YXBvbiBjb21tYW5kIGFnYWluLCBpbiBjYXNlIHdlIHdhbnQgdG8gc3dhcCB0bworIyBhIGZpbGUgb24gYSBub3cgbW91bnRlZCBmaWxlc3lzdGVtLgorIworc3dhcG9uIC1hIDI+IC9kZXYvbnVsbAorCis6IGV4aXQgMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9tb3VudG5mcy5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL21vdW50bmZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZlNmMxOTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9tb3VudG5mcy5zaApAQCAtMCwwICsxLDg4IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIG1vdW50bmZzCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkbG9jYWxfZnMgJG5ldHdvcmsgJHJwY2JpbmQKKyMgUmVxdWlyZWQtU3RvcDoKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOgorIyMjIEVORCBJTklUIElORk8KKworIworIwlSdW4gaW4gYSBzdWJzaGVsbCBiZWNhdXNlIG9mIEkvTyByZWRpcmVjdGlvbi4KKyMKK3Rlc3QgLWYgL2V0Yy9mc3RhYiAmJiAoCisKKyMKKyMJUmVhZCB0aHJvdWdoIGZzdGFiIGxpbmUgYnkgbGluZS4gSWYgaXQgaXMgTkZTLCBzZXQgdGhlIGZsYWcKKyMJZm9yIG1vdW50aW5nIE5GUyBmaWxlc3lzdGVtcy4gSWYgYW55IE5GUyBwYXJ0aXRpb24gaXMgZm91bmQgYW5kIGl0CisjCW5vdCBtb3VudGVkIHdpdGggdGhlIG5vbG9jayBvcHRpb24sIHdlIHN0YXJ0IHRoZSBycGNiaW5kLgorIworcnBjYmluZD1ubworbW91bnRfbmZzPW5vCittb3VudF9zbWI9bm8KK21vdW50X25jcD1ubworbW91bnRfY2lmcz1ubword2hpbGUgcmVhZCBkZXZpY2UgbW91bnRwdCBmc3R5cGUgb3B0aW9ucworZG8KKwljYXNlICIkZGV2aWNlIiBpbgorCQkiInxcIyopCisJCQljb250aW51ZQorCQkJOzsKKwllc2FjCisKKwljYXNlICIkb3B0aW9ucyIgaW4KKwkJKm5vYXV0byopCisJCQljb250aW51ZQorCQkJOzsKKwllc2FjCisKKwlpZiB0ZXN0ICIkZnN0eXBlIiA9IG5mcworCXRoZW4KKwkJbW91bnRfbmZzPXllcworCQljYXNlICIkb3B0aW9ucyIgaW4KKwkJCSpub2xvY2sqKQorCQkJCTs7CisJCQkqKQorCQkJCXJwY2JpbmQ9eWVzCisJCQkJOzsKKwkJZXNhYworCWZpCisJaWYgdGVzdCAiJGZzdHlwZSIgPSBzbWJmcworCXRoZW4KKwkJbW91bnRfc21iPXllcworCWZpCisJaWYgdGVzdCAiJGZzdHlwZSIgPSBuY3BmcworCXRoZW4KKwkJbW91bnRfbmNwPXllcworCWZpCisJaWYgdGVzdCAiJGZzdHlwZSIgPSBjaWZzCisJdGhlbgorCQltb3VudF9jaWZzPXllcworCWZpCitkb25lCisKK2V4ZWMgMD4mMQorCitpZiB0ZXN0ICIkcnBjYmluZCIgPSB5ZXMKK3RoZW4KKwlpZiB0ZXN0IC14IC91c3Ivc2Jpbi9ycGNiaW5kCisJdGhlbgorCQllY2hvIC1uICJTdGFydGluZyBycGNiaW5kLi4uICIKKwkJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tZXhlYyAvdXNyL3NiaW4vcnBjYmluZAorCQlzbGVlcCAyCisJZmkKK2ZpCisKK2lmIHRlc3QgIiRtb3VudF9uZnMiID0geWVzIHx8IHRlc3QgIiRtb3VudF9zbWIiID0geWVzIHx8IHRlc3QgIiRtb3VudF9uY3AiID0geWVzIHx8IHRlc3QgIiRtb3VudF9jaWZzIiA9IHllcwordGhlbgorCWVjaG8gIk1vdW50aW5nIHJlbW90ZSBmaWxlc3lzdGVtcy4uLiIKKwl0ZXN0ICIkbW91bnRfbmZzIiA9IHllcyAmJiBtb3VudCAtYSAtdCBuZnMKKwl0ZXN0ICIkbW91bnRfc21iIiA9IHllcyAmJiBtb3VudCAtYSAtdCBzbWJmcworCXRlc3QgIiRtb3VudF9uY3AiID0geWVzICYmIG1vdW50IC1hIC10IG5jcGZzCisJdGVzdCAiJG1vdW50X2NpZnMiID0geWVzICYmIG1vdW50IC1hIC10IGNpZnMKK2ZpCisKKykgPCAvZXRjL2ZzdGFiCisKKzogZXhpdCAwCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3BvcHVsYXRlLXZvbGF0aWxlLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcG9wdWxhdGUtdm9sYXRpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTA0MDM3ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3BvcHVsYXRlLXZvbGF0aWxlLnNoCkBAIC0wLDAgKzEsMjIyIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgICAgIHZvbGF0aWxlCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAgICAkbG9jYWxfZnMKKyMgUmVxdWlyZWQtU3RvcDogICAgICAkbG9jYWxfZnMKKyMgRGVmYXVsdC1TdGFydDogICAgICAgIFMKKyMgRGVmYXVsdC1TdG9wOgorIyBTaG9ydC1EZXNjcmlwdGlvbjogIFBvcHVsYXRlIHRoZSB2b2xhdGlsZSBmaWxlc3lzdGVtCisjIyMgRU5EIElOSVQgSU5GTworCisjIEdldCBST09UX0RJUgorRElSTkFNRT1gZGlybmFtZSAkMGAKK1JPT1RfRElSPWBlY2hvICRESVJOQU1FIHwgc2VkIC1uZSAnczovZXRjLy4qOjpwJ2AKKworWyAtZSAke1JPT1RfRElSfS9ldGMvZGVmYXVsdC9yY1MgXSAmJiAuICR7Uk9PVF9ESVJ9L2V0Yy9kZWZhdWx0L3JjUworIyBXaGVuIHJ1bm5pbmcgcG9wdWxhdGUtdm9sYXRpbGUuc2ggYXQgcm9vdGZzIHRpbWUsIGRpc2FibGUgY2FjaGUuCitbIC1uICIkUk9PVF9ESVIiIF0gJiYgVk9MQVRJTEVfRU5BQkxFX0NBQ0hFPW5vCisjIElmIHJvb3RmcyBpcyByZWFkLW9ubHksIGRpc2FibGUgY2FjaGUuCitbICIkUk9PVEZTX1JFQURfT05MWSIgPSAieWVzIiBdICYmIFZPTEFUSUxFX0VOQUJMRV9DQUNIRT1ubworCitDRkdESVI9IiR7Uk9PVF9ESVJ9L2V0Yy9kZWZhdWx0L3ZvbGF0aWxlcyIKK1RNUFJPT1Q9IiR7Uk9PVF9ESVJ9L3Zhci92b2xhdGlsZS90bXAiCitDT1JFREVGPSIwMF9jb3JlIgorCitbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiUG9wdWxhdGluZyB2b2xhdGlsZSBGaWxlc3lzdGVtcy4iCisKK2NyZWF0ZV9maWxlKCkgeworCUVYRUM9IgorCXRvdWNoIFwiJDFcIjsKKwljaG93biAke1RVU0VSfS4ke1RHUk9VUH0gJDEgfHwgZWNobyBcIkZhaWxlZCB0byBzZXQgb3duZXIgLSR7VFVTRVJ9LSBmb3IgLSQxLS5cIiA+L2Rldi90dHkwIDI+JjE7CisJY2htb2QgJHtUTU9ERX0gJDEgfHwgZWNobyBcIkZhaWxlZCB0byBzZXQgbW9kZSAtJHtUTU9ERX0tIGZvciAtJDEtLlwiID4vZGV2L3R0eTAgMj4mMSAiCisKKwl0ZXN0ICIkVk9MQVRJTEVfRU5BQkxFX0NBQ0hFIiA9IHllcyAmJiBlY2hvICIkRVhFQyIgPj4gL2V0Yy92b2xhdGlsZS5jYWNoZS5idWlsZAorCisJWyAtZSAiJDEiIF0gJiYgeworCQlbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiVGFyZ2V0IGFscmVhZHkgZXhpc3RzLiBTa2lwcGluZy4iCisJfSB8fCB7CisJCWlmIFsgLXogIiRST09UX0RJUiIgXTsgdGhlbgorCQkJZXZhbCAkRVhFQyAmCisJCWVsc2UKKwkJCSMgQ3JlYXRpbmcgc29tZSBmaWxlcyBhdCByb290ZnMgdGltZSBtYXkgZmFpbCBhbmQgc2hvdWxkIGZhaWwsCisJCQkjIGJ1dCB0aGVzZSBmYWlsdXJlcyBzaG91bGQgbm90IGJlIGxvZ2dlZCB0byBtYWtlIHN1cmUgdGhlIGRvX3Jvb3RmcworCQkJIyBwcm9jZXNzIGRvZXNuJ3QgZmFpbC4gVGhpcyBkb2VzIG5vIGhhcm0sIGFzIHRoaXMgc2NyaXB0IHdpbGwKKwkJCSMgcnVuIG9uIHRhcmdldCB0byBzZXQgdXAgdGhlIGNvcnJlY3QgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLgorCQkJZXZhbCAkRVhFQyA+IC9kZXYvbnVsbCAyPiYxCisJCWZpCisJfQorfQorCitta19kaXIoKSB7CisJRVhFQz0iCisJbWtkaXIgLXAgXCIkMVwiOworCWNob3duICR7VFVTRVJ9LiR7VEdST1VQfSAkMSB8fCBlY2hvIFwiRmFpbGVkIHRvIHNldCBvd25lciAtJHtUVVNFUn0tIGZvciAtJDEtLlwiID4vZGV2L3R0eTAgMj4mMTsKKwljaG1vZCAke1RNT0RFfSAkMSB8fCBlY2hvIFwiRmFpbGVkIHRvIHNldCBtb2RlIC0ke1RNT0RFfS0gZm9yIC0kMS0uXCIgPi9kZXYvdHR5MCAyPiYxICIKKworCXRlc3QgIiRWT0xBVElMRV9FTkFCTEVfQ0FDSEUiID0geWVzICYmIGVjaG8gIiRFWEVDIiA+PiAvZXRjL3ZvbGF0aWxlLmNhY2hlLmJ1aWxkCisJWyAtZSAiJDEiIF0gJiYgeworCQlbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiVGFyZ2V0IGFscmVhZHkgZXhpc3RzLiBTa2lwcGluZy4iCisJfSB8fCB7CisJCWlmIFsgLXogIiRST09UX0RJUiIgXTsgdGhlbgorCQkJZXZhbCAkRVhFQworCQllbHNlCisJCQkjIEZvciB0aGUgc2FtZSByZWFzb24gd2l0aCBjcmVhdGVfZmlsZSgpLCBmYWlsdXJlcyBzaG91bGQKKwkJCSMgbm90IGJlIGxvZ2dlZC4KKwkJCWV2YWwgJEVYRUMgPiAvZGV2L251bGwgMj4mMQorCQlmaQorCX0KK30KKworbGlua19maWxlKCkgeworCUVYRUM9IgorCWlmIFsgLUwgXCIkMlwiIF07IHRoZW4KKwkJWyBcIlwkKHJlYWRsaW5rIC1mIFwiJDJcIilcIiAhPSBcIlwkKHJlYWRsaW5rIC1mIFwiJDFcIilcIiBdICYmIHsgcm0gLWYgXCIkMlwiOyBsbiAtc2YgXCIkMVwiIFwiJDJcIjsgfTsKKwllbGlmIFsgLWQgXCIkMlwiIF07IHRoZW4KKwkJaWYgYXdrICdcJDIgPT0gXCIkMlwiIHtleGl0IDF9JyAvcHJvYy9tb3VudHM7IHRoZW4KKwkJCWNwIC1hICQyLyogJDEgMj4vZGV2L251bGw7CisJCQljcCAtYSAkMi8uWyEuXSogJDEgMj4vZGV2L251bGw7CisJCQlybSAtcmYgXCIkMlwiOworCQkJbG4gLXNmIFwiJDFcIiBcIiQyXCI7CisJCWZpCisJZWxzZQorCQlsbiAtc2YgXCIkMVwiIFwiJDJcIjsKKwlmaQorICAgICAgICAiCisKKwl0ZXN0ICIkVk9MQVRJTEVfRU5BQkxFX0NBQ0hFIiA9IHllcyAmJiBlY2hvICIJJEVYRUMiID4+IC9ldGMvdm9sYXRpbGUuY2FjaGUuYnVpbGQKKworCWlmIFsgLXogIiRST09UX0RJUiIgXTsgdGhlbgorCQlldmFsICRFWEVDICYKKwllbHNlCisJCSMgRm9yIHRoZSBzYW1lIHJlYXNvbiB3aXRoIGNyZWF0ZV9maWxlKCksIGZhaWx1cmVzIHNob3VsZAorCQkjIG5vdCBiZSBsb2dnZWQuCisJCWV2YWwgJEVYRUMgPiAvZGV2L251bGwgMj4mMQorCWZpCit9CisKK2NoZWNrX3JlcXVpcmVtZW50cygpIHsKKwljbGVhbnVwKCkgeworCQlybSAiJHtUTVBfSU5URVJNRUR9IgorCQlybSAiJHtUTVBfREVGSU5FRH0iCisJCXJtICIke1RNUF9DT01CSU5FRH0iCisJfQorCisJQ0ZHRklMRT0iJDEiCisJWyBgYmFzZW5hbWUgIiR7Q0ZHRklMRX0iYCA9ICIke0NPUkVERUZ9IiBdICYmIHJldHVybiAwCisKKwlUTVBfSU5URVJNRUQ9IiR7VE1QUk9PVH0vdG1wLiQkIgorCVRNUF9ERUZJTkVEPSIke1RNUFJPT1R9L3RtcGRlZmluZWQuJCQiCisJVE1QX0NPTUJJTkVEPSIke1RNUFJPT1R9L3RtcGNvbWJpbmVkLiQkIgorCisJc2VkICdzQFwoXjpcKSo6LipAXDFAJyAke1JPT1RfRElSfS9ldGMvcGFzc3dkIHwgc29ydCB8IHVuaXEgPiAiJHtUTVBfREVGSU5FRH0iCisJY2F0ICR7Q0ZHRklMRX0gfCBncmVwIC12ICJeIyIgfCBjdXQgLXMgLWQgIiAiIC1mIDIgPiAiJHtUTVBfSU5URVJNRUR9IgorCWNhdCAiJHtUTVBfREVGSU5FRH0iICIke1RNUF9JTlRFUk1FRH0iIHwgc29ydCB8IHVuaXEgPiAiJHtUTVBfQ09NQklORUR9IgorCU5SX0RFRklORURfVVNFUlM9ImBjYXQgIiR7VE1QX0RFRklORUR9IiB8IHdjIC1sYCIKKwlOUl9DT01CSU5FRF9VU0VSUz0iYGNhdCAiJHtUTVBfQ09NQklORUR9IiB8IHdjIC1sYCIKKworCVsgIiR7TlJfREVGSU5FRF9VU0VSU30iIC1uZSAiJHtOUl9DT01CSU5FRF9VU0VSU30iIF0gJiYgeworCQllY2hvICJVbmRlZmluZWQgdXNlcnM6IgorCQlkaWZmICIke1RNUF9ERUZJTkVEfSIgIiR7VE1QX0NPTUJJTkVEfSIgfCBncmVwICJePiIKKwkJY2xlYW51cAorCQlyZXR1cm4gMQorCX0KKworCisJc2VkICdzQFwoXjpcKSo6LipAXDFAJyAke1JPT1RfRElSfS9ldGMvZ3JvdXAgfCBzb3J0IHwgdW5pcSA+ICIke1RNUF9ERUZJTkVEfSIKKwljYXQgJHtDRkdGSUxFfSB8IGdyZXAgLXYgIl4jIiB8IGN1dCAtcyAtZCAiICIgLWYgMyA+ICIke1RNUF9JTlRFUk1FRH0iCisJY2F0ICIke1RNUF9ERUZJTkVEfSIgIiR7VE1QX0lOVEVSTUVEfSIgfCBzb3J0IHwgdW5pcSA+ICIke1RNUF9DT01CSU5FRH0iCisKKwlOUl9ERUZJTkVEX0dST1VQUz0iYGNhdCAiJHtUTVBfREVGSU5FRH0iIHwgd2MgLWxgIgorCU5SX0NPTUJJTkVEX0dST1VQUz0iYGNhdCAiJHtUTVBfQ09NQklORUR9IiB8IHdjIC1sYCIKKworCVsgIiR7TlJfREVGSU5FRF9HUk9VUFN9IiAtbmUgIiR7TlJfQ09NQklORURfR1JPVVBTfSIgXSAmJiB7CisJCWVjaG8gIlVuZGVmaW5lZCBncm91cHM6IgorCQlkaWZmICIke1RNUF9ERUZJTkVEfSIgIiR7VE1QX0NPTUJJTkVEfSIgfCBncmVwICJePiIKKwkJY2xlYW51cAorCQlyZXR1cm4gMQorCX0KKworCSMgQWRkIGNoZWNrcyBmb3IgcmVxdWlyZWQgZGlyZWN0b3JpZXMgaGVyZQorCisJY2xlYW51cAorCXJldHVybiAwCit9CisKK2FwcGx5X2NmZ2ZpbGUoKSB7CisJQ0ZHRklMRT0iJDEiCisKKwljaGVja19yZXF1aXJlbWVudHMgIiR7Q0ZHRklMRX0iIHx8IHsKKwkJZWNobyAiU2tpcHBpbmcgJHtDRkdGSUxFfSIKKwkJcmV0dXJuIDEKKwl9CisKKwljYXQgJHtDRkdGSUxFfSB8IGdyZXAgLXYgIl4jIiB8IFwKKwkJd2hpbGUgcmVhZCBMSU5FOyBkbworCQlldmFsIGBlY2hvICIkTElORSIgfCBzZWQgLW4gInMvXCguKlwpXCBcKC4qXCkgXCguKlwpXCBcKC4qXClcIFwoLipcKVwgXCguKlwpL1RUWVBFPVwxIDsgVFVTRVI9XDI7IFRHUk9VUD1cMzsgVE1PREU9XDQ7IFROQU1FPVw1IFRMVEFSR0VUPVw2L3AiYAorCQlUTkFNRT0ke1JPT1RfRElSfSR7VE5BTUV9CisJCVsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJDaGVja2luZyBmb3IgLSR7VE5BTUV9LS4iCisKKwkJWyAiJHtUVFlQRX0iID0gImwiIF0gJiYgeworCQkJVFNPVVJDRT0iJFRMVEFSR0VUIgorCQkJWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gIkNyZWF0aW5nIGxpbmsgLSR7VE5BTUV9LSBwb2ludGluZyB0byAtJHtUU09VUkNFfS0uIgorCQkJbGlua19maWxlICIke1RTT1VSQ0V9IiAiJHtUTkFNRX0iCisJCQljb250aW51ZQorCQl9CisKKwkJWyAtTCAiJHtUTkFNRX0iIF0gJiYgeworCQkJWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gIkZvdW5kIGxpbmsuIgorCQkJTkVXTkFNRT1gbHMgLWwgIiR7VE5BTUV9IiB8IHNlZCAtZSAncy9eLiotPiBcKC4qXCkkL1wxLydgCisJCQllY2hvICR7TkVXTkFNRX0gfCBncmVwIC12ICJeLyIgPi9kZXYvbnVsbCAmJiB7CisJCQkJVE5BTUU9ImBlY2hvICR7VE5BTUV9IHwgc2VkIC1lICdzQFwoLipcKS8uKkBcMUAnYC8ke05FV05BTUV9IgorCQkJCVsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJDb252ZXJ0ZWQgcmVsYXRpdmUgbGlua3RhcmdldCB0byBhYnNvbHV0ZSBwYXRoIC0ke1ROQU1FfS0uIgorCQkJfSB8fCB7CisJCQkJVE5BTUU9IiR7TkVXTkFNRX0iCisJCQkJWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gIlVzaW5nIGFic29sdXRlIGxpbmsgdGFyZ2V0IC0ke1ROQU1FfS0uIgorCQkJfQorCQl9CisKKwkJY2FzZSAiJHtUVFlQRX0iIGluCisJCQkiZiIpICBbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiQ3JlYXRpbmcgZmlsZSAtJHtUTkFNRX0tLiIKKwkJCQljcmVhdGVfZmlsZSAiJHtUTkFNRX0iICYKKwkJCQk7OworCQkJImQiKSAgWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gIkNyZWF0aW5nIGRpcmVjdG9yeSAtJHtUTkFNRX0tLiIKKwkJCQlta19kaXIgIiR7VE5BTUV9IgorCQkJCSMgQWRkIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSdzIGFuIGVudHJ5IGluIGZzdGFiIHRvIG1vdW50LgorCQkJCTs7CisJCQkqKSAgICBbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiSW52YWxpZCB0eXBlIC0ke1RUWVBFfS0uIgorCQkJCWNvbnRpbnVlCisJCQkJOzsKKwkJZXNhYworCWRvbmUKKwlyZXR1cm4gMAorfQorCitjbGVhcmNhY2hlPTAKK2V4ZWMgOTwvcHJvYy9jbWRsaW5lCit3aGlsZSByZWFkIGxpbmUgPCY5CitkbworCWNhc2UgIiRsaW5lIiBpbgorCQkqY2xlYXJjYWNoZSopICBjbGVhcmNhY2hlPTEKKwkJCSAgICAgICA7OworCQkqKQkgICAgICAgY29udGludWUKKwkJCSAgICAgICA7OworCWVzYWMKK2RvbmUKK2V4ZWMgOT4mLQorCitpZiB0ZXN0IC1lICR7Uk9PVF9ESVJ9L2V0Yy92b2xhdGlsZS5jYWNoZSAtYSAiJFZPTEFUSUxFX0VOQUJMRV9DQUNIRSIgPSAieWVzIiAtYSAieCQxIiAhPSAieHVwZGF0ZSIgLWEgIngkY2xlYXJjYWNoZSIgPSAieDAiCit0aGVuCisJc2ggJHtST09UX0RJUn0vZXRjL3ZvbGF0aWxlLmNhY2hlCitlbHNlCisJcm0gLWYgJHtST09UX0RJUn0vZXRjL3ZvbGF0aWxlLmNhY2hlICR7Uk9PVF9ESVJ9L2V0Yy92b2xhdGlsZS5jYWNoZS5idWlsZAorCWZvciBmaWxlIGluIGBscyAtMSAiJHtDRkdESVJ9IiB8IHNvcnRgOyBkbworCQlhcHBseV9jZmdmaWxlICIke0NGR0RJUn0vJHtmaWxlfSIKKwlkb25lCisKKwlbIC1lICR7Uk9PVF9ESVJ9L2V0Yy92b2xhdGlsZS5jYWNoZS5idWlsZCBdICYmIHN5bmMgJiYgbXYgJHtST09UX0RJUn0vZXRjL3ZvbGF0aWxlLmNhY2hlLmJ1aWxkICR7Uk9PVF9ESVJ9L2V0Yy92b2xhdGlsZS5jYWNoZQorZmkKKworaWYgWyAteiAiJHtST09UX0RJUn0iIF0gJiYgWyAtZiAvZXRjL2xkLnNvLmNhY2hlIF0gJiYgWyAhIC1mIC92YXIvcnVuL2xkLnNvLmNhY2hlIF0KK3RoZW4KKwlsbiAtcyAvZXRjL2xkLnNvLmNhY2hlIC92YXIvcnVuL2xkLnNvLmNhY2hlCitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcmVhZC1vbmx5LXJvb3Rmcy1ob29rLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcmVhZC1vbmx5LXJvb3Rmcy1ob29rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMDMyOGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9yZWFkLW9ubHktcm9vdGZzLWhvb2suc2gKQEAgLTAsMCArMSwzOCBAQAorIyEvYmluL3NoCisKKy4gL2V0Yy9kZWZhdWx0L3JjUworCitbICIkUk9PVEZTX1JFQURfT05MWSIgPSAibm8iIF0gJiYgZXhpdCAwCisKK2lzX29uX3JlYWRfb25seV9wYXJ0aXRpb24gKCkgeworCURJUkVDVE9SWT0kMQorCWRpcj1gcmVhZGxpbmsgLWYgJERJUkVDVE9SWWAKKwl3aGlsZSB0cnVlOyBkbworCQlpZiBbICEgLWQgIiRkaXIiIF07IHRoZW4KKwkJCWVjaG8gIkVSUk9SOiAkZGlyIGlzIG5vdCBhIGRpcmVjdG9yeSIKKwkJCWV4aXQgMQorCQllbHNlCisJCQlmb3IgZmxhZyBpbiBgYXdrIC12IGRpcj0kZGlyICd7IGlmICgkMiA9PSBkaXIpIHsgcHJpbnQgIkZPVU5EIjsgc3BsaXQoJDQsRkxBR1MsIiwiKSB9IH07IFwKKwkJCQlFTkQgeyBmb3IgKGYgaW4gRkxBR1MpIHByaW50IEZMQUdTW2ZdIH0nIDwgL3Byb2MvbW91bnRzYDsgZG8KKwkJCQlbICIkZmxhZyIgPSAiRk9VTkQiIF0gJiYgcGFydGl0aW9uPSJyZWFkLXdyaXRlIgorCQkJCVsgIiRmbGFnIiA9ICJybyIgXSAmJiB7IHBhcnRpdGlvbj0icmVhZC1vbmx5IjsgYnJlYWs7IH0KKwkJCWRvbmUKKwkJCWlmIFsgIiRkaXIiID0gIi8iIC1vIC1uICIkcGFydGl0aW9uIiBdOyB0aGVuCisJCQkJYnJlYWsKKwkJCWVsc2UKKwkJCQlkaXI9YGRpcm5hbWUgJGRpcmAKKwkJCWZpCisJCWZpCisJZG9uZQorCVsgIiRwYXJ0aXRpb24iID0gInJlYWQtb25seSIgXSAmJiBlY2hvICJ5ZXMiIHx8IGVjaG8gIm5vIgorfQorCitpZiBbICIkMSIgPSAic3RhcnQiIF0gOyB0aGVuCisJaWYgWyBgaXNfb25fcmVhZF9vbmx5X3BhcnRpdGlvbiAvdmFyL2xpYmAgPSAieWVzIiBdOyB0aGVuCisJCWdyZXAgLXEgInRtcGZzIC92YXIvdm9sYXRpbGUiIC9wcm9jL21vdW50cyB8fCBtb3VudCAvdmFyL3ZvbGF0aWxlCisJCW1rZGlyIC1wIC92YXIvdm9sYXRpbGUvbGliCisJCWNwIC1hIC92YXIvbGliLyogL3Zhci92b2xhdGlsZS9saWIKKwkJbW91bnQgLS1iaW5kIC92YXIvdm9sYXRpbGUvbGliIC92YXIvbGliCisJZmkKK2ZpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3JlYm9vdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3JlYm9vdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wODdkOGQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcmVib290CkBAIC0wLDAgKzEsMTUgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgcmVib290CisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OgorIyBEZWZhdWx0LVN0b3A6ICAgICAgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogRXhlY3V0ZSB0aGUgcmVib290IGNvbW1hbmQuCisjIERlc2NyaXB0aW9uOgorIyMjIEVORCBJTklUIElORk8KKworUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorCitlY2hvIC1uICJSZWJvb3RpbmcuLi4gIgorcmVib290IFNFRF9IQUxUQVJHUwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcm1ub2xvZ2luLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcm1ub2xvZ2luLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc2ZGUzNDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9ybW5vbG9naW4uc2gKQEAgLTAsMCArMSwyMCBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBybW5vbG9naW4KKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRyZW1vdGVfZnMgJGFsbAorIyBSZXF1aXJlZC1TdG9wOiAKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOgorIyBTaG9ydC1EZXNjcmlwdGlvbjogUmVtb3ZlIC9ldGMvbm9sb2dpbiBhdCBib290CisjIERlc2NyaXB0aW9uOiAgICAgICBUaGlzIHNjcmlwdCByZW1vdmVzIHRoZSAvZXRjL25vbG9naW4gZmlsZSBhcyB0aGUKKyMgICAgICAgICAgICAgICAgICAgIGxhc3Qgc3RlcCBpbiB0aGUgYm9vdCBwcm9jZXNzLCBpZiBERUxBWUxPR0lOPXllcy4KKyMgICAgICAgICAgICAgICAgICAgIElmIERFTEFZTE9HSU49bm8sIC9ldGMvbm9sb2dpbiB3YXMgbm90IGNyZWF0ZWQgYnkKKyMgICAgICAgICAgICAgICAgICAgIGJvb3RtaXNjIGVhcmxpZXIgaW4gdGhlIGJvb3QgcHJvY2Vzcy4KKyMjIyBFTkQgSU5JVCBJTkZPCisKK2lmIHRlc3QgLWYgL2V0Yy9ub2xvZ2luLmJvb3QKK3RoZW4KKwlybSAtZiAvZXRjL25vbG9naW4gL2V0Yy9ub2xvZ2luLmJvb3QKK2ZpCisKKzogZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zYXZlLXJ0Yy5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3NhdmUtcnRjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMzhmYzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zYXZlLXJ0Yy5zaApAQCAtMCwwICsxLDEzIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHNhdmUtcnRjCisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOiAgICAgJGxvY2FsX2ZzIGh3Y2xvY2sKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogU3RvcmUgc3lzdGVtIGNsb2NrIGludG8gZmlsZQorIyBEZXNjcmlwdGlvbjogICAgICAgCisjIyMgRU5EIElOSVQgSU5GTworCisjIFVwZGF0ZSB0aGUgdGltZXN0YW1wCitkYXRlIC11ICslNFklMm0lMmQlMkglMk0lMlMgPiAvZXRjL3RpbWVzdGFtcApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvc2VuZHNpZ3MgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zZW5kc2lncwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNGUxYjc3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvc2VuZHNpZ3MKQEAgLTAsMCArMSwyMSBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBzZW5kc2lncworIyBSZXF1aXJlZC1TdGFydDogICAgCisjIFJlcXVpcmVkLVN0b3A6ICAgICB1bW91bnRuZnMKKyMgRGVmYXVsdC1TdGFydDoKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogS2lsbCBhbGwgcmVtYWluaW5nIHByb2Nlc3Nlcy4KKyMgRGVzY3JpcHRpb246IAorIyMjIEVORCBJTklUIElORk8KKworUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorCisjIEtpbGwgYWxsIHByb2Nlc3Nlcy4KK2VjaG8gIlNlbmRpbmcgYWxsIHByb2Nlc3NlcyB0aGUgVEVSTSBzaWduYWwuLi4iCitraWxsYWxsNSAtMTUKK3NsZWVwIDUKK2VjaG8gIlNlbmRpbmcgYWxsIHByb2Nlc3NlcyB0aGUgS0lMTCBzaWduYWwuLi4iCitraWxsYWxsNSAtOQorCis6IGV4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvc2luZ2xlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvc2luZ2xlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRhODJkMTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zaW5nbGUKQEAgLTAsMCArMSwyNCBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBzaW5nbGUKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRsb2NhbF9mcyAkYWxsIGtpbGxwcm9jcworIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgMQorIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBleGVjdXRlZCBieSBpbml0KDgpIHVwb24gZW50ZXJpbmcgcnVubGV2ZWwgMSAoc2luZ2xlKS4KKyMjIyBFTkQgSU5JVCBJTkZPCisKK1BBVEg9Ii9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluIgorCisjIEtpbGwgYWxsIHByb2Nlc3Nlcy4KK2VjaG8gIlNlbmRpbmcgYWxsIHByb2Nlc3NlcyB0aGUgVEVSTSBzaWduYWwuLi4iCitraWxsYWxsNSAtMTUKK3NsZWVwIDUKK2VjaG8gIlNlbmRpbmcgYWxsIHByb2Nlc3NlcyB0aGUgS0lMTCBzaWduYWwuLi4iCitraWxsYWxsNSAtOQorCisjIFdlIHN0YXJ0IHVwZGF0ZSBoZXJlLCBzaW5jZSB3ZSBqdXN0IGtpbGxlZCBpdC4KK3Rlc3QgLXggL3NiaW4vdXBkYXRlICYmIHVwZGF0ZQorCitlY2hvICJFbnRlcmluZyBzaW5nbGUtdXNlciBtb2RlLi4uIgorZXhlYyBpbml0IC10MSBTCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zdXNoZWxsIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvc3VzaGVsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzE5ZDk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvc3VzaGVsbApAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9zaAorCitbIC16ICIkU1VTSEVMTCIgXSAmJiBTVVNIRUxMPS9iaW4vc2gKKworZXhlYyAkU1VTSEVMTApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvc3lzZnMuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zeXNmcy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2ZlNzZlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvc3lzZnMuc2gKQEAgLTAsMCArMSwyMyBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBtb3VudHZpcnRmcworIyBSZXF1aXJlZC1TdGFydDoKKyMgUmVxdWlyZWQtU3RvcDoKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOgorIyBTaG9ydC1EZXNjcmlwdGlvbjogTW91bnQga2VybmVsIHZpcnR1YWwgZmlsZSBzeXN0ZW1zLgorIyBEZXNjcmlwdGlvbjogICAgICAgTW91bnQgaW5pdGlhbCBzZXQgb2YgdmlydHVhbCBmaWxlc3lzdGVtcyB0aGUga2VybmVsCisjICAgICAgICAgICAgICAgICAgICBwcm92aWRlcyBhbmQgdGhhdCBhcmUgcmVxdWlyZWQgYnkgZXZlcnl0aGluZy4KKyMjIyBFTkQgSU5JVCBJTkZPCisKK2lmIFsgLWUgL3Byb2MgXSAmJiAhIFsgLWUgL3Byb2MvbW91bnRzIF07IHRoZW4KKyAgbW91bnQgLXQgcHJvYyBwcm9jIC9wcm9jCitmaQorCitpZiBbIC1lIC9zeXMgXSAmJiBncmVwIC1xIHN5c2ZzIC9wcm9jL2ZpbGVzeXN0ZW1zICYmICEgWyAtZSAvc3lzL2NsYXNzIF07IHRoZW4KKyAgbW91bnQgLXQgc3lzZnMgc3lzZnMgL3N5cworZmkKKworaWYgWyAtZSAvc3lzL2tlcm5lbC9kZWJ1ZyBdICYmIGdyZXAgLXEgZGVidWdmcyAvcHJvYy9maWxlc3lzdGVtczsgdGhlbgorICBtb3VudCAtdCBkZWJ1Z2ZzIGRlYnVnZnMgL3N5cy9rZXJuZWwvZGVidWcKK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC91bW91bnRmcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3Vtb3VudGZzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYxMzI0YzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC91bW91bnRmcwpAQCAtMCwwICsxLDI0IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHVtb3VudGZzCisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOiAgICAgCisjIERlZmF1bHQtU3RhcnQ6CisjIERlZmF1bHQtU3RvcDogICAgICAwIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IFR1cm4gb2ZmIHN3YXAgYW5kIHVubW91bnQgYWxsIGxvY2FsIGZpbGUgc3lzdGVtcy4KKyMgRGVzY3JpcHRpb246CisjIyMgRU5EIElOSVQgSU5GTworCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKK2VjaG8gIkRlYWN0aXZhdGluZyBzd2FwLi4uIgorc3dhcG9mZiAtYQorCisjIFdlIGxlYXZlIC9wcm9jIG1vdW50ZWQuCitlY2hvICJVbm1vdW50aW5nIGxvY2FsIGZpbGVzeXN0ZW1zLi4uIgorZ3JlcCAtcSAvbW50L3JhbSAvcHJvYy9tb3VudHMgJiYgbW91bnQgLW8gcmVtb3VudCxybyAvbW50L3JhbQorbW91bnQgLW8gcmVtb3VudCxybyAvCisKK3Vtb3VudCAtZiAtYSAtciA+IC9kZXYvbnVsbCAyPiYxCisKKzogZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC91bW91bnRuZnMuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC91bW91bnRuZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWYwNzU0MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3Vtb3VudG5mcy5zaApAQCAtMCwwICsxLDMzIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHVtb3VudG5mcworIyBSZXF1aXJlZC1TdGFydDoKKyMgUmVxdWlyZWQtU3RvcDogICAgIHVtb3VudGZzCisjIFNob3VsZC1TdG9wOiAgICAgICAkbmV0d29yayAkcG9ydG1hcAorIyBEZWZhdWx0LVN0YXJ0OgorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBVbm1vdW50IGFsbCBuZXR3b3JrIGZpbGVzeXN0ZW1zCisjIyMgRU5EIElOSVQgSU5GTworCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKKyMgV3JpdGUgYSByZWJvb3QgcmVjb3JkIHRvIC92YXIvbG9nL3d0bXAgYmVmb3JlIHVubW91bnRpbmcKK2hhbHQgLXcKKworZWNobyAiVW5tb3VudGluZyByZW1vdGUgZmlsZXN5c3RlbXMuLi4iCisKK3Rlc3QgLWYgL2V0Yy9mc3RhYiAmJiAoCisKKyMKKyMJUmVhZCB0aHJvdWdoIGZzdGFiIGxpbmUgYnkgbGluZSBhbmQgdW5vdW50IG5ldHdvcmsgZmlsZSBzeXN0ZW1zCisjCit3aGlsZSByZWFkIGRldmljZSBtb3VudHB0IGZzdHlwZSBvcHRpb25zCitkbworCWlmIHRlc3QgIiRmc3R5cGUiID0gbmZzIHx8ICB0ZXN0ICIkZnN0eXBlIiA9IHNtYmZzIHx8ICB0ZXN0ICIkZnN0eXBlIiA9IG5jcGZzIHx8IHRlc3QgIiRmc3R5cGUiID0gY2lmcworCXRoZW4KKwkJdW1vdW50IC1mICRtb3VudHB0CisJZmkKK2RvbmUKKykgPCAvZXRjL2ZzdGFiCisKKzogZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC91cmFuZG9tIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvdXJhbmRvbQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZjE2MjViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvdXJhbmRvbQpAQCAtMCwwICsxLDQ5IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHVyYW5kb20KKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRsb2NhbF9mcyBtb3VudHZpcnRmcworIyBSZXF1aXJlZC1TdG9wOiAgICAgJGxvY2FsX2ZzCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDogICAgICAwIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IFNhdmUgYW5kIHJlc3RvcmUgdGhlIHJhbmRvbSBzZWVkCisjIERlc2NyaXB0aW9uOiAgICAgICBTYXZlIHRoZSByYW5kb20gc2VlZCBvbiBzaHV0ZG93biBhbmQgcmVzdG9yZSBpdCBvbiBib290LAorIyAgICAgICAgICAgICAgICAgICAgdG8gZW5zdXJlIHRoYXQgdGhlIHNlZWQgaXNuJ3QgcHJlZGljYWJsZSBvbiBzdGFydHVwCisjICAgICAgICAgICAgICAgICAgICAoYmVjYXVzZSB0aGUgYm9vdCBwcm9jZXNzIGlzIHByZWRpY3RhYmxlKQorIyMjIEVORCBJTklUIElORk8KKwordGVzdCAtYyAvZGV2L3VyYW5kb20gfHwgZXhpdCAwCisKK1JBTkRPTV9TRUVEX0ZJTEU9L3Zhci9saWIvdXJhbmRvbS9yYW5kb20tc2VlZAorCisuIC9ldGMvZGVmYXVsdC9yY1MKK1sgLWYgL2V0Yy9kZWZhdWx0L3VyYW5kb20gXSAmJiAuIC9ldGMvZGVmYXVsdC91cmFuZG9tCisKK2Nhc2UgIiQxIiBpbgorCXN0YXJ0fCIiKQorCQl0ZXN0ICIkVkVSQk9TRSIgIT0gbm8gJiYgZWNobyAiSW5pdGlhbGl6aW5nIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLi4uIgorCQkjIExvYWQgYW5kIHRoZW4gc2F2ZSA1MTIgYnl0ZXMsIHdoaWNoIGlzIHRoZSBzaXplIG9mIHRoZSBlbnRyb3B5CisJCSMgcG9vbC4gQWxzbyBsb2FkIHRoZSBjdXJyZW50IGRhdGUsIGluIGNhc2UgdGhlIHNlZWQgZmlsZSBpcworCQkjIGVtcHR5LgorCQkoIGRhdGUgKyVzLiVOOyBbIC1mICIkUkFORE9NX1NFRURfRklMRSIgXSAmJiBjYXQgIiRSQU5ET01fU0VFRF9GSUxFIiApIFwKKwkJCT4vZGV2L3VyYW5kb20KKwkJcm0gLWYgIiRSQU5ET01fU0VFRF9GSUxFIgorCQl1bWFzayAwNzcKKwkJZGQgaWY9L2Rldi91cmFuZG9tIG9mPSRSQU5ET01fU0VFRF9GSUxFIGNvdW50PTEgXAorCQkJPi9kZXYvbnVsbCAyPiYxIHx8IGVjaG8gInVyYW5kb20gc3RhcnQ6IGZhaWxlZC4iCisJCXVtYXNrIDAyMgorCQk7OworCXN0b3ApCisJCSMgQ2FycnkgYSByYW5kb20gc2VlZCBmcm9tIHNodXQtZG93biB0byBzdGFydC11cDsKKwkJIyBzZWUgZG9jdW1lbnRhdGlvbiBpbiBsaW51eC9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKKwkJdGVzdCAiJFZFUkJPU0UiICE9IG5vICYmIGVjaG8gIlNhdmluZyByYW5kb20gc2VlZC4uLiIKKwkJdW1hc2sgMDc3CisJCWRkIGlmPS9kZXYvdXJhbmRvbSBvZj0kUkFORE9NX1NFRURfRklMRSBjb3VudD0xIFwKKwkJCT4vZGV2L251bGwgMj4mMSB8fCBlY2hvICJ1cmFuZG9tIHN0b3A6IGZhaWxlZC4iCisJCTs7CisJKikKKwkJZWNobyAiVXNhZ2U6IHVyYW5kb20ge3N0YXJ0fHN0b3B9IiA+JjIKKwkJZXhpdCAxCisJCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvdm9sYXRpbGVzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvdm9sYXRpbGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NzI0NWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC92b2xhdGlsZXMKQEAgLTAsMCArMSwzNiBAQAorIyBUaGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBsaXN0cyBmaWxlc3lzdGVtIG9iamVjdHMgdGhhdCBzaG91bGQgZ2V0IHZlcmlmaWVkCisjIGR1cmluZyBzdGFydHVwIGFuZCBiZSBjcmVhdGVkIGlmIG1pc3NpbmcuCisjCisjIEV2ZXJ5IGxpbmUgbXVzdCBlaXRoZXIgYmUgYSBjb21tZW50IHN0YXJ0aW5nIHdpdGggIworIyBvciBhIGRlZmluaXRpb24gb2YgZm9ybWF0OgorIyA8dHlwZT4gPG93bmVyPiA8Z3JvdXA+IDxtb2RlPiA8cGF0aD4gPGxpbmtzb3VyY2U+CisjIHdoZXJlIHRoZSBpdGVtcyBhcmUgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UgIQorIworIyA8dHlwZT4gOiBkfGZ8bCA6IChkKWlyZWN0b3J5fChmKWlsZXwobClpbmsKKyMKKyMgQSBsaW5raW5nIGV4YW1wbGU6CisjIGwgcm9vdCByb290IDA3NzcgL3Zhci90ZXN0IC90bXAvdGVzdGZpbGUKKyMgZiByb290IHJvb3QgMDY0NCAvdmFyL3Rlc3Qgbm9uZQorIworIyBVbmRlcnN0YW5kaW5nIGxpbmtzOgorIyBXaGVuIHBvcHVsYXRlLXZvbGF0aWxlIGlzIHRvIHZlcmlmeS9jcmVhdGUgYSBkaXJlY3Rvcnkgb3IgZmlsZSwgaXQgd2lsbCBmaXJzdAorIyBjaGVjayBpdCdzIGV4aXN0ZW5jZS4gSWYgYSBsaW5rIGlzIGZvdW5kIHRvIGV4aXN0IGluIHRoZSBwbGFjZSBvZiB0aGUgdGFyZ2V0LAorIyB0aGUgcGF0aCBvZiB0aGUgdGFyZ2V0IGlzIHJlcGxhY2VkIHdpdGggdGhlIHRhcmdldCB0aGUgbGluayBwb2ludHMgdG8uCisjIFRodXMsIGlmIGEgbGluayBpcyBpbiB0aGUgcGxhY2UgdG8gYmUgdmVyaWZpZWQsIHRoZSBvYmplY3Qgd2lsbCBiZSBjcmVhdGVkCisjIGluIHRoZSBwbGFjZSB0aGUgbGluayBwb2ludHMgdG8gaW5zdGVhZC4KKyMgVGhpcyBleHBsYWlucyB0aGUgb3JkZXIgb2YgImxpbmsgYmVmb3JlIG9iamVjdCIgYXMgaW4gdGhlIGV4YW1wbGUgYWJvdmUsIHdoZXJlCisjIGEgbGluayB3aWxsIGJlIGNyZWF0ZWQgYXQgL3Zhci90ZXN0IHBvaW50aW5nIHRvIC90bXAvdGVzdGZpbGUgYW5kIGR1ZSB0byB0aGlzCisjIGxpbmsgdGhlIGZpbGUgZGVmaW5lZCBhcyAvdmFyL3Rlc3Qgd2lsbCBhY3R1YWxseSBiZSBjcmVhdGVkIGFzIC90bXAvdGVzdGZpbGUuCitkIHJvb3Qgcm9vdCAxNzc3IC9ydW4vbG9jayBub25lCitkIHJvb3Qgcm9vdCAwNzU1IC92YXIvdm9sYXRpbGUvbG9nIG5vbmUKK2Qgcm9vdCByb290IDE3NzcgL3Zhci92b2xhdGlsZS90bXAgbm9uZQorbCByb290IHJvb3QgMTc3NyAvdmFyL2xvY2sgL3J1bi9sb2NrCitsIHJvb3Qgcm9vdCAwNzU1IC92YXIvbG9nIC92YXIvdm9sYXRpbGUvbG9nCitsIHJvb3Qgcm9vdCAwNzU1IC92YXIvcnVuIC9ydW4KK2wgcm9vdCByb290IDE3NzcgL3Zhci90bXAgL3Zhci92b2xhdGlsZS90bXAKK2wgcm9vdCByb290IDE3NzcgL3RtcCAvdmFyL3RtcAorZCByb290IHJvb3QgMDc1NSAvdmFyL2xvY2svc3Vic3lzIG5vbmUKK2Ygcm9vdCByb290IDA2NjQgL3Zhci9sb2cvd3RtcCBub25lCitmIHJvb3Qgcm9vdCAwNjY0IC92YXIvcnVuL3V0bXAgbm9uZQorbCByb290IHJvb3QgMDY0NCAvZXRjL3Jlc29sdi5jb25mIC92YXIvcnVuL3Jlc29sdi5jb25mCitmIHJvb3Qgcm9vdCAwNjQ0IC92YXIvcnVuL3Jlc29sdi5jb25mIG5vbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHNfMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0c18xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkwZGU2ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHNfMS4wLmJiCkBAIC0wLDAgKzEsMTgyIEBACitTVU1NQVJZID0gIlN5c1YgaW5pdCBzY3JpcHRzIgorREVTQ1JJUFRJT04gPSAiSW5pdHNjcmlwdHMgcHJvdmlkZSB0aGUgYmFzaWMgc3lzdGVtIHN0YXJ0dXAgaW5pdGlhbGl6YXRpb24gc2NyaXB0cyBmb3IgdGhlIHN5c3RlbS4gIFRoZXNlIHNjcmlwdHMgaW5jbHVkZSBhY3Rpb25zIHN1Y2ggYXMgZmlsZXN5c3RlbSBtb3VudGluZywgZnNjaywgUlRDIG1hbmlwdWxhdGlvbiBhbmQgb3RoZXIgYWN0aW9ucyByb3V0aW5lbHkgcGVyZm9ybWVkIGF0IHN5c3RlbSBzdGFydHVwLiAgSW4gYWRkaXRpb24sIHRoZSBzY3JpcHRzIGFyZSBhbHNvIHVzZWQgZHVyaW5nIHN5c3RlbSBzaHV0ZG93biB0byByZXZlcnNlIHRoZSBhY3Rpb25zIHBlcmZvcm1lZCBhdCBzdGFydHVwLiIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKK1BSID0gInIxNTUiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK1NSQ19VUkkgPSAiZmlsZTovL2Z1bmN0aW9ucyBcCisgICAgICAgICAgIGZpbGU6Ly9oYWx0IFwKKyAgICAgICAgICAgZmlsZTovL3Vtb3VudGZzIFwKKyAgICAgICAgICAgZmlsZTovL2RldnB0cy5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9kZXZwdHMgXAorICAgICAgICAgICBmaWxlOi8vaG9zdG5hbWUuc2ggXAorICAgICAgICAgICBmaWxlOi8vbW91bnRhbGwuc2ggXAorICAgICAgICAgICBmaWxlOi8vYmFubmVyLnNoIFwKKyAgICAgICAgICAgZmlsZTovL2Jvb3RtaXNjLnNoIFwKKyAgICAgICAgICAgZmlsZTovL21vdW50bmZzLnNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlYm9vdCBcCisgICAgICAgICAgIGZpbGU6Ly9jaGVja2ZzLnNoIFwKKyAgICAgICAgICAgZmlsZTovL3NpbmdsZSBcCisgICAgICAgICAgIGZpbGU6Ly9zZW5kc2lncyBcCisgICAgICAgICAgIGZpbGU6Ly91cmFuZG9tIFwKKyAgICAgICAgICAgZmlsZTovL3Jtbm9sb2dpbi5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9jaGVja3Jvb3Quc2ggXAorICAgICAgICAgICBmaWxlOi8vdW1vdW50bmZzLnNoIFwKKyAgICAgICAgICAgZmlsZTovL3N5c2ZzLnNoIFwKKyAgICAgICAgICAgZmlsZTovL3BvcHVsYXRlLXZvbGF0aWxlLnNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlYWQtb25seS1yb290ZnMtaG9vay5zaCBcCisgICAgICAgICAgIGZpbGU6Ly92b2xhdGlsZXMgXAorICAgICAgICAgICBmaWxlOi8vc2F2ZS1ydGMuc2ggXAorICAgICAgICAgICBmaWxlOi8vR1BMdjIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZG1lc2cuc2ggXAorICAgICAgICAgICBmaWxlOi8vbG9ncm90YXRlLWRtZXNnLmNvbmYgXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc2VsaW51eCcsJ2ZpbGU6Ly9zdXNoZWxsJywnJyxkKX0gXAorIgorCitTID0gIiR7V09SS0RJUn0iCisKK1NSQ19VUklfYXBwZW5kX2FybSA9ICIgZmlsZTovL2FsaWdubWVudC5zaCIKKworS0VSTkVMX1ZFUlNJT04gPSAiIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKK0RFUEVORFNfYXBwZW5kID0gIiB1cGRhdGUtcmMuZC1uYXRpdmUiCitERVBFTkRTX2FwcGVuZCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCdzeXN0ZW1kLXN5c3RlbWN0bC1uYXRpdmUnLCcnLGQpfSIKKworUEFDS0FHRVMgPSsgIiR7UE59LWZ1bmN0aW9ucyIKK1JERVBFTkRTXyR7UE59ID0gIiR7UE59LWZ1bmN0aW9ucyBcCisgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc2VsaW51eCcsJ2Jhc2gnLCcnLGQpfSBcCisJCSAiCitGSUxFU18ke1BOfS1mdW5jdGlvbnMgPSAiJHtzeXNjb25mZGlyfS9pbml0LmQvZnVuY3Rpb25zKiIKKworQUxURVJOQVRJVkVfUFJJT1JJVFlfJHtQTn0tZnVuY3Rpb25zID0gIjkwIgorQUxURVJOQVRJVkVfJHtQTn0tZnVuY3Rpb25zID0gImZ1bmN0aW9ucyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtmdW5jdGlvbnNdID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kL2Z1bmN0aW9ucyIKKworSEFMVEFSR1MgPz0gIi1kIC1mIgorCitkb19jb25maWd1cmUoKSB7CisJc2VkIC1pIC1lICJzOlNFRF9IQUxUQVJHUzoke0hBTFRBUkdTfTpnIiAke1dPUktESVJ9L2hhbHQKKwlzZWQgLWkgLWUgInM6U0VEX0hBTFRBUkdTOiR7SEFMVEFSR1N9OmciICR7V09SS0RJUn0vcmVib290Cit9CisKK2RvX2luc3RhbGwgKCkgeworIworIyBDcmVhdGUgZGlyZWN0b3JpZXMgYW5kIGluc3RhbGwgZGV2aWNlIGluZGVwZW5kZW50IHNjcmlwdHMKKyMKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcmNTLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3JjMC5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9yYzEuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcmMyLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3JjMy5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9yYzQuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcmM1LmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3JjNi5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCSMgSG9sZHMgc3RhdGUgaW5mb3JtYXRpb24gcGVydGFpbmluZyB0byB1cmFuZG9tCisJaW5zdGFsbCAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvdXJhbmRvbQorCisJaW5zdGFsbCAtbSAwNjQ0ICAgICR7V09SS0RJUn0vZnVuY3Rpb25zCQkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9ib290bWlzYy5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9jaGVja3Jvb3Quc2gJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vaGFsdAkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vaG9zdG5hbWUuc2gJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vbW91bnRhbGwuc2gJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vbW91bnRuZnMuc2gJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vcmVib290CQkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9ybW5vbG9naW4uc2gJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vc2VuZHNpZ3MJCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L3NpbmdsZQkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vdW1vdW50bmZzLnNoCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L3VyYW5kb20JCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCXNlZCAtaSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvdXJhbmRvbSAtZSAncywvdmFyLywke2xvY2Fsc3RhdGVkaXJ9LyxnO3MsL2V0Yy8sJHtzeXNjb25mZGlyfS8sZycKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9kZXZwdHMuc2gJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vZGV2cHRzCQkke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0CisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vc3lzZnMuc2gJCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L3BvcHVsYXRlLXZvbGF0aWxlLnNoICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L3JlYWQtb25seS1yb290ZnMtaG9vay5zaCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9zYXZlLXJ0Yy5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA2NDQgICAgJHtXT1JLRElSfS92b2xhdGlsZXMJCSR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzLzAwX2NvcmUKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9kbWVzZy5zaAkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNjQ0ICAgICR7V09SS0RJUn0vbG9ncm90YXRlLWRtZXNnLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vCisKKwlpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAiYXJtIiBdOyB0aGVuCisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2FsaWdubWVudC5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlmaQorCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3NlbGludXgnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0vJHtiYXNlX3NiaW5kaXJ9CisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3N1c2hlbGwgJHtEfS8ke2Jhc2Vfc2JpbmRpcn0KKwlmaQorIworIyBJbnN0YWxsIGRldmljZSBkZXBlbmRlbnQgc2NyaXB0cworIworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2Jhbm5lci5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvYmFubmVyLnNoCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vdW1vdW50ZnMJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3Vtb3VudGZzCisjCisjIENyZWF0ZSBydW5sZXZlbCBsaW5rcworIworCXVwZGF0ZS1yYy5kIC1yICR7RH0gcm1ub2xvZ2luLnNoIHN0YXJ0IDk5IDIgMyA0IDUgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gc2VuZHNpZ3Mgc3RhcnQgMjAgMCA2IC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IHVyYW5kb20gc3RhcnQgMzAgUyAwIDYgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gdW1vdW50bmZzLnNoIHN0YXJ0IDMxIDAgMSA2IC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IHVtb3VudGZzIHN0YXJ0IDQwIDAgNiAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSByZWJvb3Qgc3RhcnQgOTAgNiAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBoYWx0IHN0YXJ0IDkwIDAgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gc2F2ZS1ydGMuc2ggc3RhcnQgMjUgMCA2IC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IGJhbm5lci5zaCBzdGFydCAwMiBTIC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IGNoZWNrcm9vdC5zaCBzdGFydCAwNiBTIC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IG1vdW50YWxsLnNoIHN0YXJ0IDAzIFMgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gaG9zdG5hbWUuc2ggc3RhcnQgMzkgUyAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBtb3VudG5mcy5zaCBzdGFydCAxNSAyIDMgNCA1IC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IGJvb3RtaXNjLnNoIHN0YXJ0IDU1IFMgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gc3lzZnMuc2ggc3RhcnQgMDIgUyAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBwb3B1bGF0ZS12b2xhdGlsZS5zaCBzdGFydCAzNyBTIC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IHJlYWQtb25seS1yb290ZnMtaG9vay5zaCBzdGFydCAyOSBTIC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IGRldnB0cy5zaCBzdGFydCAzOCBTIC4KKwlpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAiYXJtIiBdOyB0aGVuCisJICAgICAgICB1cGRhdGUtcmMuZCAtciAke0R9IGFsaWdubWVudC5zaCBzdGFydCAwNiBTIC4KKwlmaQorCSMgV2Ugd2lzaCB0byBoYXZlIC92YXIvbG9nIHJlYWR5IGF0IHRoaXMgc3RhZ2Ugc28gZXhlY3V0ZSB0aGlzIGFmdGVyCisJIyBwb3B1bGF0ZS12b2xhdGlsZS5zaAorCXVwZGF0ZS1yYy5kIC1yICR7RH0gZG1lc2cuc2ggc3RhcnQgMzggUyAuCit9CisKK01BU0tFRF9TQ1JJUFRTID0gIiBcCisgIGJhbm5lciBcCisgIGJvb3RtaXNjIFwKKyAgY2hlY2tmcyBcCisgIGNoZWNrcm9vdCBcCisgIGRldnB0cyBcCisgIGRtZXNnIFwKKyAgaG9zdG5hbWUgXAorICBtb3VudGFsbCBcCisgIG1vdW50bmZzIFwKKyAgcG9wdWxhdGUtdm9sYXRpbGUgXAorICByZWFkLW9ubHktcm9vdGZzLWhvb2sgXAorICBybW5vbG9naW4gXAorICBzeXNmcyBcCisgIHVyYW5kb20iCisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorCQlpZiBbIC1uICIkRCIgXTsgdGhlbgorCQkJT1BUUz0iLS1yb290PSREIgorCQlmaQorCQlmb3IgU0VSVklDRSBpbiAke01BU0tFRF9TQ1JJUFRTfTsgZG8KKwkJCXN5c3RlbWN0bCAkT1BUUyBtYXNrICRTRVJWSUNFLnNlcnZpY2UKKwkJZG9uZQorCWZpCisKKyAgICAjIERlbGV0ZSBhbnkgb2xkIHZvbGF0aWxlIGNhY2hlIHNjcmlwdCwgYXMgZGlyZWN0b3JpZXMgbWF5IGhhdmUgbW92ZWQKKyAgICBpZiBbIC16ICIkRCIgXTsgdGhlbgorICAgICAgICBybSAtZiAiL2V0Yy92b2xhdGlsZS5jYWNoZSIKKyAgICBmaQorfQorCitDT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vaW5pdC5kL2NoZWNrcm9vdC5zaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvanBlZy9qcGVnXzlhLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9qcGVnL2pwZWdfOWEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEyZTY1ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvanBlZy9qcGVnXzlhLmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAibGlianBlZyBpcyBhIGxpYnJhcnkgZm9yIGhhbmRsaW5nIHRoZSBKUEVHIChKRklGKSBpbWFnZSBmb3JtYXQiCitERVNDUklQVElPTiA9ICJsaWJqcGVnIGNvbnRhaW5zIGEgbGlicmFyeSBmb3IgaGFuZGxpbmcgdGhlIEpQRUcgKEpGSUYpIGltYWdlIGZvcm1hdCwgYXMgd2VsbCBhcyByZWxhdGVkIHByb2dyYW1zIGZvciBhY2Nlc3NpbmcgdGhlIGxpYmpwZWcgZnVuY3Rpb25zLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuaWpnLm9yZy8iCisKK0xJQ0VOU0UgPSJCU0QtMy1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7bWQ1PWVhOTNhOGEyZmVkMTAxMDZiNjNiYzIxNjc5ZWRhY2I5IgorCitTRUNUSU9OID0gImxpYnMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5pamcub3JnL2ZpbGVzL2pwZWdzcmMudiR7UFZ9LnRhci5neiBcCisJICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzMzUzOTkyYWVjYWVlMTgwNWVmNDEwOWFhZGQ0MzNlNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzYTc1M2VhNDhkOTE3OTQ1ZGQ1NGEyZDk3ZGUzODhhYTA2Y2EyZWIxMDY2Y2JmZGM2NjUyMDM2MzQ5ZmUwNWE3IgorCitpbmhlcml0IGF1dG90b29scworCitQQUNLQUdFUyA9KyAJCSJqcGVnLXRvb2xzICIKK0RFU0NSSVBUSU9OX2pwZWctdG9vbHMgPSAiVGhlIGpwZWctdG9vbHMgcGFja2FnZSBpbmNsdWRlcyB0aGUgY2xpZW50IHByb2dyYW1zIGZvciBhY2Nlc3MgbGlianBlZyBmdW5jdGlvbmFsaXR5LiAgVGhlc2UgdG9vbHMgYWxsb3cgZm9yIHRoZSBjb21wcmVzc2lvbiwgZGVjb21wcmVzc2lvbiwgdHJhbnNmb3JtYXRpb24gYW5kIGRpc3BsYXkgb2YgSlBFRyBmaWxlcy4iCitGSUxFU19qcGVnLXRvb2xzID0gCSIke2JpbmRpcn0vKiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK3BrZ19wb3N0aW5zdF8ke1BOfV9saW51eHN0ZGJhc2UgKCkgeworICAgIGlmIFsgISAtZSAkRCR7bGliZGlyfS9saWJqcGVnLnNvLjYyIF07IHRoZW4KKyAgICAgICAgSlBFRz1gZmluZCAkRCR7bGliZGlyfSAtdHlwZSBmIC1uYW1lIGxpYmpwZWcuc28uXCouXCouXCpgCisgICAgICAgIGxuIC1zZiBgYmFzZW5hbWUgJEpQRUdgICREJHtsaWJkaXJ9L2xpYmpwZWcuc28uNjIKKyAgICBmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkLzAwMDMtT25seS1pbmx1Y2x1ZGUta2VybmVsLWhlYWRlcnMtd2l0aC1nbGliYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUva2JkL2tiZC8wMDAzLU9ubHktaW5sdWNsdWRlLWtlcm5lbC1oZWFkZXJzLXdpdGgtZ2xpYmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJmY2IwYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUva2JkL2tiZC8wMDAzLU9ubHktaW5sdWNsdWRlLWtlcm5lbC1oZWFkZXJzLXdpdGgtZ2xpYmMucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSAzYzVjN2FjYzdlZjg3NGI5MTliMjY1ODNkMzg5MmUyMWI5MDc4MzNmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmF0YW5hZWwgQ29wYSA8bmNvcGFAYWxwaW5lbGludXgub3JnPgorRGF0ZTogV2VkLCAyMCBBdWcgMjAxNCAwOTowMDowMyArMDIwMAorU3ViamVjdDogW1BBVENIIDMvNF0gT25seSBpbmx1Y2x1ZGUga2VybmVsIGhlYWRlcnMgd2l0aCBnbGliYworCitUaGlzIGZpeGVzIGNvbXBpbGUgZXJyb3JzIHdpdGggbXVzbCBsaWJjCisKK1NpZ25lZC1vZmYtYnk6IE5hdGFuYWVsIENvcGEgPG5jb3BhQGFscGluZWxpbnV4Lm9yZz4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgc3JjL3Jlc2l6ZWNvbnMuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9yZXNpemVjb25zLmMgYi9zcmMvcmVzaXplY29ucy5jCitpbmRleCA1Zjg0ODQ1Li42OTFkZmNjIDEwMDY0NAorLS0tIGEvc3JjL3Jlc2l6ZWNvbnMuYworKysrIGIvc3JjL3Jlc2l6ZWNvbnMuYworQEAgLTgwLDcgKzgwLDcgQEAKKyAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisgI2lmIChfX0dOVV9MSUJSQVJZX18gPj0gNikKKyAjaW5jbHVkZSA8c3lzL3Blcm0uaD4KKy0jZWxzZQorKyNlbGlmIGRlZmluZWQoX19HTElCQ19fKQorICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorICNpbmNsdWRlIDxsaW51eC90ZXJtaW9zLmg+CisgI2VuZGlmCistLSAKKzIuMS4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUva2JkL2tiZC91Y2xpYmMtc3RkYXJnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkL3VjbGliYy1zdGRhcmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU3ZjMyNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUva2JkL2tiZC91Y2xpYmMtc3RkYXJnLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0luIGZpbGUgaW5jbHVkZWQgZnJvbSBrZXltYXAuaDo1OjAsCisgICAgICAgICAgICAgICAgIGZyb20ga3N5bXMuYzo2OgorLi9rZXltYXAvY29tbW9uLmg6NjU6Mzg6IGVycm9yOiB1bmtub3duIHR5cGUgbmFtZSAndmFfbGlzdCcKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLi9rZXltYXAvY29tbW9uLmg6NjY6MzogZXJyb3I6IGV4cGVjdGVkICc7JywgJywnIG9yICcpJyBiZWZvcmUgJ2NvbnN0JworICAgY29uc3Qgdm9pZCAqZGF0YSk7CisgICBeCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0luZGV4OiBrYmQtMi4wLjAvc3JjL2xpYmtleW1hcC9jb250ZXh0UC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ga2JkLTIuMC4wLm9yaWcvc3JjL2xpYmtleW1hcC9jb250ZXh0UC5oCTIwMTMtMDgtMTMgMDY6NDY6MjMuMDAwMDAwMDAwIC0wNzAwCisrKysga2JkLTIuMC4wL3NyYy9saWJrZXltYXAvY29udGV4dFAuaAkyMDEzLTExLTA1IDIyOjMzOjQ5LjIwMDUyODIyNiAtMDgwMAorQEAgLTIsNyArMiw3IEBACisgI2RlZmluZSBMS19DT05URVhUUF9ICisgCisgI2luY2x1ZGUgImtleW1hcC5oIgorLQorKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyAvKioKKyAgKiBAYnJpZWYgQ29weSBvZiBzdHJ1Y3Qga2JkaWFjcnVjLgorICAqLworSW5kZXg6IGtiZC0yLjAuMC9zcmMvbGlia2V5bWFwL2tleW1hcC9jb21tb24uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGtiZC0yLjAuMC5vcmlnL3NyYy9saWJrZXltYXAva2V5bWFwL2NvbW1vbi5oCTIwMTMtMDgtMTMgMDY6NDY6MjMuMDAwMDAwMDAwIC0wNzAwCisrKysga2JkLTIuMC4wL3NyYy9saWJrZXltYXAva2V5bWFwL2NvbW1vbi5oCTIwMTMtMTEtMDUgMjI6MzM6NTkuOTY0NTI4NDM4IC0wODAwCitAQCAtNiw2ICs2LDcgQEAKKyAgKi8KKyAKKyAjaW5jbHVkZSA8a2V5bWFwL2NvbnRleHQuaD4KKysjaW5jbHVkZSA8c3RkYXJnLmg+CisgCisgLyoqIEluaXRpYWxpemVzIHRoZSBzdHJ1Y3R1cmVzIG5lY2Vzc2FyeSB0byByZWFkIGFuZC9vciBwYXJzZSBrZXltYXAuCisgICoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUva2JkL2tiZF8yLjAuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUva2JkL2tiZF8yLjAuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzZkYzdhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkXzIuMC4yLmJiCkBAIC0wLDAgKzEsMzYgQEAKK1NVTU1BUlkgPSAiS2V5dGFibGUgZmlsZXMgYW5kIGtleWJvYXJkIHV0aWxpdGllcyIKKyMgZXZlcnl0aGluZyBtaW51cyBjb25zb2xlLWZvbnRzIGlzIEdQTHYyKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNWZjYzM2MTIxZDkzZTFmNjlkOTZhMzEzMDc4YzhiNSIKK0RFUEVORFMgPSAibGliY2hlY2siCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcHRlc3QgcGtnY29uZmlnCisKK1JSRVBMQUNFU18ke1BOfSA9ICJjb25zb2xlLXRvb2xzIgorUlBST1ZJREVTXyR7UE59ID0gImNvbnNvbGUtdG9vbHMiCitSQ09ORkxJQ1RTXyR7UE59ID0gImNvbnNvbGUtdG9vbHMiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC91dGlscy8ke0JQTn0vJHtCUH0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL3VjbGliYy1zdGRhcmcucGF0Y2ggXAorCSAgIGZpbGU6Ly8wMDAzLU9ubHktaW5sdWNsdWRlLWtlcm5lbC1oZWFkZXJzLXdpdGgtZ2xpYmMucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjg3NDc1ZWI3OGIxZDZlNmFiMDY2ODZkZDMyM2FkNGJhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlkZmRkYWJmOTYwMTJlMzI5YzRiZWJiOTZhMjFhZWVmN2MzODcyZjYyNGU5NmU4MTU2YmE1NDJiODJhZWI5MTIiCisKK1BBQ0tBR0VDT05GSUcgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW3BhbV0gPSAiLS1lbmFibGUtdmxvY2ssIC0tZGlzYWJsZS12bG9jaywgbGlicGFtLCIKKworUEFDS0FHRVMgKz0gIiR7UE59LWNvbnNvbGVmb250cyAke1BOfS1rZXltYXBzICR7UE59LXVuaW1hcHMgJHtQTn0tY29uc29sZXRyYW5zIgorCitGSUxFU18ke1BOfS1jb25zb2xlZm9udHMgPSAiJHtkYXRhZGlyfS9jb25zb2xlZm9udHMiCitGSUxFU18ke1BOfS1jb25zb2xldHJhbnMgPSAiJHtkYXRhZGlyfS9jb25zb2xldHJhbnMiCitGSUxFU18ke1BOfS1rZXltYXBzID0gIiR7ZGF0YWRpcn0va2V5bWFwcyIKK0ZJTEVTXyR7UE59LXVuaW1hcHMgPSAiJHtkYXRhZGlyfS91bmltYXBzIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiY2h2dCBkZWFsbG9jdnQgZmdjb25zb2xlIG9wZW52dCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYmNncm91cC9saWJjZ3JvdXBfMC40MS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGliY2dyb3VwL2xpYmNncm91cF8wLjQxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYmExZDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYmNncm91cC9saWJjZ3JvdXBfMC40MS5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIkxpbnV4IGNvbnRyb2wgZ3JvdXAgYWJzdHJhY3Rpb24gbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gImxpYmNncm91cCBpcyBhIGxpYnJhcnkgdGhhdCBhYnN0cmFjdHMgdGhlIGNvbnRyb2wgZ3JvdXAgZmlsZSBzeXN0ZW0gXAoraW4gTGludXguIENvbnRyb2wgZ3JvdXBzIGFsbG93IHlvdSB0byBsaW1pdCwgYWNjb3VudCBhbmQgaXNvbGF0ZSByZXNvdXJjZSB1c2FnZSBcCisoQ1BVLCBtZW1vcnksIGRpc2sgSS9PLCBldGMuKSBvZiBncm91cHMgb2YgcHJvY2Vzc2VzLiIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0RFUEVORFMgPSAiYmlzb24tbmF0aXZlIGZsZXgtbmF0aXZlICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2xpYnBhbScsICcnLCBkKX0iCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3Byb2plY3QvbGliY2cvJHtCUE59L3YwLjQxLyR7QlBOfS0ke1BWfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiM2RlYTlkNTBiOGE1YjczZmYwYmYxY2RjYjIxMGY2M2YiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTRlMzhiZGM3ZWY3MDY0NWNlMzM3NDBkZGNjYTA1MTI0OGQ1NmI1MzI4M2MwZGM2ZDQwNGUxNzcwNmY2ZmI1MSIKKworRVhUUkFfT0VDT05GID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJy0tZW5hYmxlLXBhbS1tb2R1bGUtZGlyPSR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5IC0tZW5hYmxlLXBhbT15ZXMnLCAnLS1lbmFibGUtcGFtPW5vJywgZCl9IgorCitQQUNLQUdFUyA9KyAiY2dyb3Vwcy1wYW0tcGx1Z2luIgorRklMRVNfY2dyb3Vwcy1wYW0tcGx1Z2luID0gIiR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5L3BhbV9jZ3JvdXAuc28qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2Jhc2VfbGliZGlyfS9zZWN1cml0eS8uZGVidWciCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5LyoubGEiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgTW92aW5nIGxpYmNncm91cCB0byBiYXNlX2xpYmRpcgorCWlmIFsgISAke0R9JHtsaWJkaXJ9IC1lZiAke0R9JHtiYXNlX2xpYmRpcn0gXTsgdGhlbgorCQlta2RpciAtcCAke0R9LyR7YmFzZV9saWJkaXJ9LworCQltdiAtZiAke0R9JHtsaWJkaXJ9L2xpYmNncm91cC5zby4qICR7RH0ke2Jhc2VfbGliZGlyfS8KKwkJcmVsX2xpYl9wcmVmaXg9YGVjaG8gJHtsaWJkaXJ9IHwgc2VkICdzLFwoXi9cfFwpW14vXVteL10qLC4uLGcnYAorCQlsbiAtc2YgJHtyZWxfbGliX3ByZWZpeH0ke2Jhc2VfbGliZGlyfS9saWJjZ3JvdXAuc28uMSAke0R9JHtsaWJkaXJ9L2xpYmNncm91cC5zbworCWZpCisJIyBwYW0gbW9kdWxlcyBpbiAke2Jhc2VfbGliZGlyfS9zZWN1cml0eS8gc2hvdWxkIGJlIGJpbmFyeSAuc28gZmlsZXMsIG5vdCBzeW1saW5rcy4KKwlpZiBbIC1mICR7RH0ke2Jhc2VfbGliZGlyfS9zZWN1cml0eS9wYW1fY2dyb3VwLnNvLjAuMC4wIF07IHRoZW4KKwkJbXYgLWYgJHtEfSR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5L3BhbV9jZ3JvdXAuc28uMC4wLjAgJHtEfSR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5L3BhbV9jZ3JvdXAuc28KKwkJcm0gLWYgJHtEfSR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5L3BhbV9jZ3JvdXAuc28uKgorCWZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjM2MzN2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLmluYwpAQCAtMCwwICsxLDc4IEBACitTVU1NQVJZID0gIlhNTCBDIFBhcnNlciBMaWJyYXJ5IGFuZCBUb29sa2l0IgorREVTQ1JJUFRJT04gPSAiVGhlIFhNTCBQYXJzZXIgTGlicmFyeSBhbGxvd3MgZm9yIG1hbmlwdWxhdGlvbiBvZiBYTUwgZmlsZXMuICBMaWJ4bWwyIGV4cG9ydHMgUHVzaCBhbmQgUHVsbCB0eXBlIHBhcnNlciBpbnRlcmZhY2VzIGZvciBib3RoIFhNTCBhbmQgSFRNTC4gIEl0IGNhbiBkbyBEVEQgdmFsaWRhdGlvbiBhdCBwYXJzZSB0aW1lLCBvbiBhIHBhcnNlZCBkb2N1bWVudCBpbnN0YW5jZSBvciB3aXRoIGFuIGFyYml0cmFyeSBEVEQuICBMaWJ4bWwyIGluY2x1ZGVzIGNvbXBsZXRlIFhQYXRoLCBYUG9pbnRlciBhbmQgWGluY2x1ZGUgaW1wbGVtZW50YXRpb25zLiAgSXQgYWxzbyBoYXMgYSBTQVggbGlrZSBpbnRlcmZhY2UsIHdoaWNoIGlzIGRlc2lnbmVkIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBFeHBhdC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnhtbHNvZnQub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9idWdsaXN0LmNnaT9wcm9kdWN0PWxpYnhtbDIiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NvcHlyaWdodDttZDU9MjA0NDQxN2UyZTUwMDZiNjVhOGI5MDY3YjY4M2ZjZjEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaGFzaC5jO2JlZ2lubGluZT02O2VuZGxpbmU9MTU7bWQ1PTk2ZjcyOTY2MDVlYWU4MDc2NzBmYjA4OTQ3ODI5OTY5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpc3QuYztiZWdpbmxpbmU9NDtlbmRsaW5lPTEzO21kNT1jZGJmYTNkZWU1MWMwOTllZGIwNGUzOWY3NjJlZTkwNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90cmlvLmM7YmVnaW5saW5lPTU7ZW5kbGluZT0xNDttZDU9NmMwMjU3NTNjODZkOTU4NzIyZWM3NmU5NGNhZTkzMmUiCisKK0RFUEVORFMgPSsgInpsaWIiCisKK1NSQ19VUkkgPSAiZnRwOi8veG1sc29mdC5vcmcvbGlieG1sMi9saWJ4bWwyLSR7UFZ9LnRhci5nejtuYW1lPWxpYnRhciBcCisgICAgICAgICAgIGZpbGU6Ly9saWJ4bWwtNjRiaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYW5zaWRlY2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVudGVzdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vbGlieG1sMi1DVkUtMjAxNC0wMTkxLWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9weXRob24tc2l0ZXBhY2thZ2VzLWRpci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWJ4bWwtbTQtdXNlLXBrZ2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUuYWMtZml4LWNyb3NzLWNvbXBpbGluZy13YXJuaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtQ1ZFLTIwMTUtMTgxOS1FbmZvcmNlLXRoZS1yZWFkZXItdG8tcnVuLWluLWNvbnN0YW50LS5wYXRjaCBcCisgICAgICAgICAgIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L3htbDItY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgYmluY29uZmlnLWRpc2FibGVkIHB5dGhvbm5hdGl2ZSBwdGVzdAorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAicHl0aG9uLWNvcmUiCisKK1JERVBFTkRTXyR7UE59LXB5dGhvbiArPSAicHl0aG9uLWNvcmUiCisKK1JERVBFTkRTXyR7UE59LXB0ZXN0X2FwcGVuZF9saWJjLWdsaWJjICs9ICJnbGliYy1nY29udi1lYmNkaWMtdXMgZ2xpYmMtZ2NvbnYtaWJtMTE0MSIKKworIyBXZSBkb24ndCBERVBFTkQgb24gYmludXRpbHMgZm9yIGFuc2lkZWNsLmggc28gZW5zdXJlIHdlIGRvbid0IHVzZSB0aGUgaGVhZGVyCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJc2VkIC1pIC1lICcvLiphbnNpZGVjbC5oLiovZCcgJHtTfS9jb25maWd1cmUuYWMKK30KKworZXhwb3J0IFBZVEhPTl9TSVRFX1BBQ0tBR0VTPSIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gInB5dGhvbiIKKworUEFDS0FHRUNPTkZJR1tweXRob25dID0gIi0td2l0aC1weXRob249JHtQWVRIT059LC0td2l0aG91dC1weXRob24scHl0aG9uIgorIyBXQVJOSU5HOiB6bGliIGlzIHJlcXVpcmUgZm9yIFJQTSB1c2UKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtZGVidWcgLS13aXRob3V0LWxlZ2FjeSAtLXdpdGgtY2F0YWxvZyAtLXdpdGhvdXQtZG9jYm9vayAtLXdpdGgtYzE0biAtLXdpdGhvdXQtbHptYSAtLXdpdGgtZmV4Y2VwdGlvbnMiCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0td2l0aG91dC1sZWdhY3kgLS13aXRob3V0LWRvY2Jvb2sgLS13aXRoLWMxNG4gLS13aXRob3V0LWx6bWEgLS13aXRoLXpsaWIiCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlc2RrID0gIi0td2l0aG91dC1sZWdhY3kgLS13aXRob3V0LWRvY2Jvb2sgLS13aXRoLWMxNG4gLS13aXRob3V0LWx6bWEgLS13aXRoLXpsaWIiCitFWFRSQV9PRUNPTkZfbGludXhzdGRiYXNlID0gIi0td2l0aC1kZWJ1ZyAtLXdpdGgtbGVnYWN5IC0td2l0aC1kb2Nib29rIC0td2l0aC1jMTRuIC0td2l0aG91dC1sem1hIC0td2l0aC16bGliIgorCisjIHJlcXVpcmVkIGZvciBweXRob25nIGJpbmRpbmcKK2V4cG9ydCBIT1NUX1NZUworZXhwb3J0IEJVSUxEX1NZUworZXhwb3J0IFNUQUdJTkdfTElCRElSCitleHBvcnQgU1RBR0lOR19JTkNESVIKKworZXhwb3J0IExERkxBR1MgKz0gIi1sZGwiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICAjIGF1dG9uYW1lciB3b3VsZCBjYWxsIHRoaXMgbGlieG1sMi0yLCBidXQgd2UgZG9uJ3Qgd2FudCB0aGF0CisgICAgaWYgZC5nZXRWYXIoJ0RFQklBTl9OQU1FUycsIFRydWUpOgorICAgICAgICBkLnNldFZhcignUEtHX2xpYnhtbDInLCAnJHtNTFBSRUZJWH1saWJ4bWwyJykKK30KKworUEFDS0FHRVMgKz0gIiR7UE59LXV0aWxzICR7UE59LXB5dGhvbiIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8uZGVidWciCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LyouYSIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3htbDJDb25mLnNoICR7bGliZGlyfS9jbWFrZS8qIgorRklMRVNfJHtQTn0tdXRpbHMgKz0gIiR7YmluZGlyfS8qIgorRklMRVNfJHtQTn0tcHl0aG9uICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSIKKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisgIGNwIC1yICR7V09SS0RJUn0veG1sY29uZiAke0R9JHtQVEVTVF9QQVRIfQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLzAwMDEtQ1ZFLTIwMTUtMTgxOS1FbmZvcmNlLXRoZS1yZWFkZXItdG8tcnVuLWluLWNvbnN0YW50LS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvMDAwMS1DVkUtMjAxNS0xODE5LUVuZm9yY2UtdGhlLXJlYWRlci10by1ydW4taW4tY29uc3RhbnQtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZDU4ZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLzAwMDEtQ1ZFLTIwMTUtMTgxOS1FbmZvcmNlLXRoZS1yZWFkZXItdG8tcnVuLWluLWNvbnN0YW50LS5wYXRjaApAQCAtMCwwICsxLDE4MSBAQAorRnJvbSAyMTNmMWZlMGQ3NmQzMGVhZWQ2ZTU4NTMwNTdkZWZjNDNlNmRmMmM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRGFuaWVsIFZlaWxsYXJkIDx2ZWlsbGFyZEByZWRoYXQuY29tPgorRGF0ZTogVHVlLCAxNCBBcHIgMjAxNSAxNzo0MTo0OCArMDgwMAorU3ViamVjdDogW1BBVENIXSBDVkUtMjAxNS0xODE5IEVuZm9yY2UgdGhlIHJlYWRlciB0byBydW4gaW4gY29uc3RhbnQgbWVtb3J5CisKK09uZSBvZiB0aGUgb3BlcmF0aW9uIG9uIHRoZSByZWFkZXIgY291bGQgcmVzb2x2ZSBlbnRpdGllcworbGVhZGluZyB0byB0aGUgY2xhc3NpYyBleHBhbnNpb24gaXNzdWUuIE1ha2Ugc3VyZSB0aGUKK2J1ZmZlciB1c2VkIGZvciB4bWxyZWFkZXIgb3BlcmF0aW9uIGlzIGJvdW5kZWQuCitJbnRyb2R1Y2UgYSBuZXcgYWxsb2NhdGlvbiB0eXBlIGZvciB0aGUgYnVmZmVycyBmb3IgdGhpcyBlZmZlY3QuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogWXVlIFRhbyA8WXVlLlRhb0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CistLS0KKyBidWYuYyAgICAgICAgICAgICAgICAgfCAgIDQzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KKyBpbmNsdWRlL2xpYnhtbC90cmVlLmggfCAgICAzICsrLQorIHhtbHJlYWRlci5jICAgICAgICAgICB8ICAgMjAgKysrKysrKysrKysrKysrKysrKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDYzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9idWYuYyBiL2J1Zi5jCitpbmRleCA2ZWZjN2I2Li4wNzkyMmZmIDEwMDY0NAorLS0tIGEvYnVmLmMKKysrKyBiL2J1Zi5jCitAQCAtMjcsNiArMjcsNyBAQAorICNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgorICNpbmNsdWRlIDxsaWJ4bWwvZ2xvYmFscy5oPgorICNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgorKyNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg+IC8qIGZvciBYTUxfTUFYX1RFWFRfTEVOR1RIICovCisgI2luY2x1ZGUgImJ1Zi5oIgorIAorICNkZWZpbmUgV0lUSF9CVUZGRVJfQ09NUEFUCitAQCAtMjk5LDcgKzMwMCw4IEBAIHhtbEJ1ZlNldEFsbG9jYXRpb25TY2hlbWUoeG1sQnVmUHRyIGJ1ZiwKKyAgICAgaWYgKChzY2hlbWUgPT0gWE1MX0JVRkZFUl9BTExPQ19ET1VCTEVJVCkgfHwKKyAgICAgICAgIChzY2hlbWUgPT0gWE1MX0JVRkZFUl9BTExPQ19FWEFDVCkgfHwKKyAgICAgICAgIChzY2hlbWUgPT0gWE1MX0JVRkZFUl9BTExPQ19IWUJSSUQpIHx8CistICAgICAgICAoc2NoZW1lID09IFhNTF9CVUZGRVJfQUxMT0NfSU1NVVRBQkxFKSkgeworKyAgICAgICAgKHNjaGVtZSA9PSBYTUxfQlVGRkVSX0FMTE9DX0lNTVVUQUJMRSkgfHwKKysJKHNjaGVtZSA9PSBYTUxfQlVGRkVSX0FMTE9DX0JPVU5ERUQpKSB7CisgCWJ1Zi0+YWxsb2MgPSBzY2hlbWU7CisgICAgICAgICBpZiAoYnVmLT5idWZmZXIpCisgICAgICAgICAgICAgYnVmLT5idWZmZXItPmFsbG9jID0gc2NoZW1lOworQEAgLTQ1OCw2ICs0NjAsMTggQEAgeG1sQnVmR3Jvd0ludGVybmFsKHhtbEJ1ZlB0ciBidWYsIHNpemVfdCBsZW4pIHsKKyAgICAgc2l6ZSA9IGJ1Zi0+dXNlICsgbGVuICsgMTAwOworICNlbmRpZgorIAorKyAgICBpZiAoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0JPVU5ERUQpIHsKKysgICAgICAgIC8qCisrCSAqIFVzZWQgdG8gcHJvdmlkZSBwYXJzaW5nIGxpbWl0cworKwkgKi8KKysgICAgICAgIGlmICgoYnVmLT51c2UgKyBsZW4gPj0gWE1MX01BWF9URVhUX0xFTkdUSCkgfHwKKysJICAgIChidWYtPnNpemUgPj0gWE1MX01BWF9URVhUX0xFTkdUSCkpIHsKKysJICAgIHhtbEJ1Zk1lbW9yeUVycm9yKGJ1ZiwgImJ1ZmZlciBlcnJvcjogdGV4dCB0b28gbG9uZ1xuIik7CisrCSAgICByZXR1cm4oMCk7CisrCX0KKysJaWYgKHNpemUgPj0gWE1MX01BWF9URVhUX0xFTkdUSCkKKysJICAgIHNpemUgPSBYTUxfTUFYX1RFWFRfTEVOR1RIOworKyAgICB9CisgICAgIGlmICgoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0lPKSAmJiAoYnVmLT5jb250ZW50SU8gIT0gTlVMTCkpIHsKKyAgICAgICAgIHNpemVfdCBzdGFydF9idWYgPSBidWYtPmNvbnRlbnQgLSBidWYtPmNvbnRlbnRJTzsKKyAKK0BAIC03MzksNiArNzUzLDE1IEBAIHhtbEJ1ZlJlc2l6ZSh4bWxCdWZQdHIgYnVmLCBzaXplX3Qgc2l6ZSkKKyAgICAgQ0hFQ0tfQ09NUEFUKGJ1ZikKKyAKKyAgICAgaWYgKGJ1Zi0+YWxsb2MgPT0gWE1MX0JVRkZFUl9BTExPQ19JTU1VVEFCTEUpIHJldHVybigwKTsKKysgICAgaWYgKGJ1Zi0+YWxsb2MgPT0gWE1MX0JVRkZFUl9BTExPQ19CT1VOREVEKSB7CisrICAgICAgICAvKgorKwkgKiBVc2VkIHRvIHByb3ZpZGUgcGFyc2luZyBsaW1pdHMKKysJICovCisrICAgICAgICBpZiAoc2l6ZSA+PSBYTUxfTUFYX1RFWFRfTEVOR1RIKSB7CisrCSAgICB4bWxCdWZNZW1vcnlFcnJvcihidWYsICJidWZmZXIgZXJyb3I6IHRleHQgdG9vIGxvbmdcbiIpOworKwkgICAgcmV0dXJuKDApOworKwl9CisrICAgIH0KKyAKKyAgICAgLyogRG9uJ3QgcmVzaXplIGlmIHdlIGRvbid0IGhhdmUgdG8gKi8KKyAgICAgaWYgKHNpemUgPCBidWYtPnNpemUpCitAQCAtODY3LDYgKzg5MCwxNSBAQCB4bWxCdWZBZGQoeG1sQnVmUHRyIGJ1ZiwgY29uc3QgeG1sQ2hhciAqc3RyLCBpbnQgbGVuKSB7CisgCisgICAgIG5lZWRTaXplID0gYnVmLT51c2UgKyBsZW4gKyAyOworICAgICBpZiAobmVlZFNpemUgPiBidWYtPnNpemUpeworKwlpZiAoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0JPVU5ERUQpIHsKKysJICAgIC8qCisrCSAgICAgKiBVc2VkIHRvIHByb3ZpZGUgcGFyc2luZyBsaW1pdHMKKysJICAgICAqLworKwkgICAgaWYgKG5lZWRTaXplID49IFhNTF9NQVhfVEVYVF9MRU5HVEgpIHsKKysJCXhtbEJ1Zk1lbW9yeUVycm9yKGJ1ZiwgImJ1ZmZlciBlcnJvcjogdGV4dCB0b28gbG9uZ1xuIik7CisrCQlyZXR1cm4oLTEpOworKwkgICAgfQorKwl9CisgICAgICAgICBpZiAoIXhtbEJ1ZlJlc2l6ZShidWYsIG5lZWRTaXplKSl7CisgCSAgICB4bWxCdWZNZW1vcnlFcnJvcihidWYsICJncm93aW5nIGJ1ZmZlciIpOworICAgICAgICAgICAgIHJldHVybiBYTUxfRVJSX05PX01FTU9SWTsKK0BAIC05MzgsNiArOTcwLDE1IEBAIHhtbEJ1ZkFkZEhlYWQoeG1sQnVmUHRyIGJ1ZiwgY29uc3QgeG1sQ2hhciAqc3RyLCBpbnQgbGVuKSB7CisgICAgIH0KKyAgICAgbmVlZFNpemUgPSBidWYtPnVzZSArIGxlbiArIDI7CisgICAgIGlmIChuZWVkU2l6ZSA+IGJ1Zi0+c2l6ZSl7CisrCWlmIChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRCkgeworKwkgICAgLyoKKysJICAgICAqIFVzZWQgdG8gcHJvdmlkZSBwYXJzaW5nIGxpbWl0cworKwkgICAgICovCisrCSAgICBpZiAobmVlZFNpemUgPj0gWE1MX01BWF9URVhUX0xFTkdUSCkgeworKwkJeG1sQnVmTWVtb3J5RXJyb3IoYnVmLCAiYnVmZmVyIGVycm9yOiB0ZXh0IHRvbyBsb25nXG4iKTsKKysJCXJldHVybigtMSk7CisrCSAgICB9CisrCX0KKyAgICAgICAgIGlmICgheG1sQnVmUmVzaXplKGJ1ZiwgbmVlZFNpemUpKXsKKyAJICAgIHhtbEJ1Zk1lbW9yeUVycm9yKGJ1ZiwgImdyb3dpbmcgYnVmZmVyIik7CisgICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJfTk9fTUVNT1JZOworZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlieG1sL3RyZWUuaCBiL2luY2x1ZGUvbGlieG1sL3RyZWUuaAoraW5kZXggMmY5MDcxNy4uNGE5YjNiYyAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvbGlieG1sL3RyZWUuaAorKysrIGIvaW5jbHVkZS9saWJ4bWwvdHJlZS5oCitAQCAtNzYsNyArNzYsOCBAQCB0eXBlZGVmIGVudW0geworICAgICBYTUxfQlVGRkVSX0FMTE9DX0VYQUNULAkvKiBncm93IG9ubHkgdG8gdGhlIG1pbmltYWwgc2l6ZSAqLworICAgICBYTUxfQlVGRkVSX0FMTE9DX0lNTVVUQUJMRSwgLyogaW1tdXRhYmxlIGJ1ZmZlciAqLworICAgICBYTUxfQlVGRkVSX0FMTE9DX0lPLAkvKiBzcGVjaWFsIGFsbG9jYXRpb24gc2NoZW1lIHVzZWQgZm9yIEkvTyAqLworLSAgICBYTUxfQlVGRkVSX0FMTE9DX0hZQlJJRAkvKiBleGFjdCB1cCB0byBhIHRocmVzaG9sZCwgYW5kIGRvdWJsZWl0IHRoZXJlYWZ0ZXIgKi8KKysgICAgWE1MX0JVRkZFUl9BTExPQ19IWUJSSUQsCS8qIGV4YWN0IHVwIHRvIGEgdGhyZXNob2xkLCBhbmQgZG91YmxlaXQgdGhlcmVhZnRlciAqLworKyAgICBYTUxfQlVGRkVSX0FMTE9DX0JPVU5ERUQJLyogbGltaXQgdGhlIHVwcGVyIHNpemUgb2YgdGhlIGJ1ZmZlciAqLworIH0geG1sQnVmZmVyQWxsb2NhdGlvblNjaGVtZTsKKyAKKyAvKioKK2RpZmYgLS1naXQgYS94bWxyZWFkZXIuYyBiL3htbHJlYWRlci5jCitpbmRleCBmMTllMTIzLi40NzFlN2UyIDEwMDY0NAorLS0tIGEveG1scmVhZGVyLmMKKysrKyBiL3htbHJlYWRlci5jCitAQCAtMjA5MSw2ICsyMDkxLDkgQEAgeG1sTmV3VGV4dFJlYWRlcih4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0ciBpbnB1dCwgY29uc3QgY2hhciAqVVJJKSB7CisgCQkieG1sTmV3VGV4dFJlYWRlciA6IG1hbGxvYyBmYWlsZWRcbiIpOworIAlyZXR1cm4oTlVMTCk7CisgICAgIH0KKysgICAgLyogbm8gb3BlcmF0aW9uIG9uIGEgcmVhZGVyIHNob3VsZCByZXF1aXJlIGEgaHVnZSBidWZmZXIgKi8KKysgICAgeG1sQnVmU2V0QWxsb2NhdGlvblNjaGVtZShyZXQtPmJ1ZmZlciwKKysJCQkgICAgICBYTUxfQlVGRkVSX0FMTE9DX0JPVU5ERUQpOworICAgICByZXQtPnNheCA9ICh4bWxTQVhIYW5kbGVyICopIHhtbE1hbGxvYyhzaXplb2YoeG1sU0FYSGFuZGxlcikpOworICAgICBpZiAocmV0LT5zYXggPT0gTlVMTCkgeworIAl4bWxCdWZGcmVlKHJldC0+YnVmZmVyKTsKK0BAIC0zNjE2LDYgKzM2MTksNyBAQCB4bWxUZXh0UmVhZGVyQ29uc3RWYWx1ZSh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlcikgeworIAkgICAgcmV0dXJuKCgoeG1sTnNQdHIpIG5vZGUpLT5ocmVmKTsKKyAgICAgICAgIGNhc2UgWE1MX0FUVFJJQlVURV9OT0RFOnsKKyAJICAgIHhtbEF0dHJQdHIgYXR0ciA9ICh4bWxBdHRyUHRyKSBub2RlOworKwkgICAgY29uc3QgeG1sQ2hhciAqcmV0OworIAorIAkgICAgaWYgKChhdHRyLT5jaGlsZHJlbiAhPSBOVUxMKSAmJgorIAkgICAgICAgIChhdHRyLT5jaGlsZHJlbi0+dHlwZSA9PSBYTUxfVEVYVF9OT0RFKSAmJgorQEAgLTM2MjksMTAgKzM2MzMsMjEgQEAgeG1sVGV4dFJlYWRlckNvbnN0VmFsdWUoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInhtbFRleHRSZWFkZXJTZXR1cCA6IG1hbGxvYyBmYWlsZWRcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICB9CisrCQkgICAgeG1sQnVmU2V0QWxsb2NhdGlvblNjaGVtZShyZWFkZXItPmJ1ZmZlciwKKysJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRCk7CisgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgeG1sQnVmRW1wdHkocmVhZGVyLT5idWZmZXIpOworIAkgICAgICAgIHhtbEJ1ZkdldE5vZGVDb250ZW50KHJlYWRlci0+YnVmZmVyLCBub2RlKTsKKy0JCXJldHVybih4bWxCdWZDb250ZW50KHJlYWRlci0+YnVmZmVyKSk7CisrCQlyZXQgPSB4bWxCdWZDb250ZW50KHJlYWRlci0+YnVmZmVyKTsKKysJCWlmIChyZXQgPT0gTlVMTCkgeworKwkJICAgIC8qIGVycm9yIG9uIHRoZSBidWZmZXIgYmVzdCB0byByZWFsbG9jYXRlICovCisrCQkgICAgeG1sQnVmRnJlZShyZWFkZXItPmJ1ZmZlcik7CisrCQkgICAgcmVhZGVyLT5idWZmZXIgPSB4bWxCdWZDcmVhdGVTaXplKDEwMCk7CisrCQkgICAgeG1sQnVmU2V0QWxsb2NhdGlvblNjaGVtZShyZWFkZXItPmJ1ZmZlciwKKysJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRCk7CisrCQkgICAgcmV0ID0gQkFEX0NBU1QgIiI7CisrCQl9CisrCQlyZXR1cm4ocmV0KTsKKyAJICAgIH0KKyAJICAgIGJyZWFrOworIAl9CitAQCAtNTEzMSw2ICs1MTQ2LDkgQEAgeG1sVGV4dFJlYWRlclNldHVwKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ4bWxUZXh0UmVhZGVyU2V0dXAgOiBtYWxsb2MgZmFpbGVkXG4iKTsKKyAgICAgICAgIHJldHVybiAoLTEpOworICAgICB9CisrICAgIC8qIG5vIG9wZXJhdGlvbiBvbiBhIHJlYWRlciBzaG91bGQgcmVxdWlyZSBhIGh1Z2UgYnVmZmVyICovCisrICAgIHhtbEJ1ZlNldEFsbG9jYXRpb25TY2hlbWUocmVhZGVyLT5idWZmZXIsCisrCQkJICAgICAgWE1MX0JVRkZFUl9BTExPQ19CT1VOREVEKTsKKyAgICAgaWYgKHJlYWRlci0+c2F4ID09IE5VTEwpCisgCXJlYWRlci0+c2F4ID0gKHhtbFNBWEhhbmRsZXIgKikgeG1sTWFsbG9jKHNpemVvZih4bWxTQVhIYW5kbGVyKSk7CisgICAgIGlmIChyZWFkZXItPnNheCA9PSBOVUxMKSB7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi8wMDAxLXRocmVhZHMtRGVmaW5lLXB0aHJlYWQtZGVmaW5pdGlvbnMtZm9yLWdsaWJjLWNvbXBsaWEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLzAwMDEtdGhyZWFkcy1EZWZpbmUtcHRocmVhZC1kZWZpbml0aW9ucy1mb3ItZ2xpYmMtY29tcGxpYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjUzYTgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi8wMDAxLXRocmVhZHMtRGVmaW5lLXB0aHJlYWQtZGVmaW5pdGlvbnMtZm9yLWdsaWJjLWNvbXBsaWEucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSA2NzUwY2M1NjRhMTdjODEyNTU1Y2NhNTg3NjYwMjQwY2NmZmFhZWQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgNCBBcHIgMjAxNSAwODo1MDo0MCAtMDcwMAorU3ViamVjdDogW1BBVENIXSB0aHJlYWRzOiBEZWZpbmUgcHRocmVhZCogZGVmaW5pdGlvbnMgZm9yIGdsaWJjIGNvbXBsaWFudCBsaWJzCisKK1RoaXMgY29kZSBpcyBhc3N1bWluZyBnbGliYyBidXQgbm90IGV4cGxpY2l0bHkgc2F5aW5nIGl0CitzbyBsZXRzIG1ha2UgaXQgc28uIEZpeGVzIGZvbGxvd2luZyBvbiBtdXNsCisKK3RocmVhZHMuYzo4MDoyNzogZXJyb3I6IG1hY3JvICJwdGhyZWFkX2VxdWFsIiByZXF1aXJlcyAyIGFyZ3VtZW50cywgYnV0Citvbmx5IDEgZ2l2ZW4KK3wgIGV4dGVybiBpbnQgcHRocmVhZF9lcXVhbCAoKQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIHRocmVhZHMuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGxpYnhtbDItMi45LjIvdGhyZWFkcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlieG1sMi0yLjkuMi5vcmlnL3RocmVhZHMuYworKysrIGxpYnhtbDItMi45LjIvdGhyZWFkcy5jCitAQCAtNDcsNyArNDcsNyBAQAorICNpZmRlZiBIQVZFX1BUSFJFQURfSAorIAorIHN0YXRpYyBpbnQgbGlieG1sX2lzX3RocmVhZGVkID0gLTE7CistI2lmZGVmIF9fR05VQ19fCisrI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19HTElCQ19fKQorICNpZmRlZiBsaW51eAorICNpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSB8fCAoX19HTlVDX18gPiAzKQorIGV4dGVybiBpbnQgcHRocmVhZF9vbmNlIChwdGhyZWFkX29uY2VfdCAqX19vbmNlX2NvbnRyb2wsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLzcyYTQ2YTUxOWNlNzMyNmQ5YTAwZjBiNmE3ZjJhOGU5NThjZDE2NzUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLzcyYTQ2YTUxOWNlNzMyNmQ5YTAwZjBiNmE3ZjJhOGU5NThjZDE2NzUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBhODExMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvNzJhNDZhNTE5Y2U3MzI2ZDlhMDBmMGI2YTdmMmE4ZTk1OGNkMTY3NS5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDcyYTQ2YTUxOWNlNzMyNmQ5YTAwZjBiNmE3ZjJhOGU5NThjZDE2NzUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEYW5pZWwgVmVpbGxhcmQgPHZlaWxsYXJkQHJlZGhhdC5jb20+CitEYXRlOiBUaHUsIDIzIE9jdCAyMDE0IDExOjM1OjM2ICswODAwCitTdWJqZWN0OiBGaXggbWlzc2luZyBlbnRpdGllcyBhZnRlciBDVkUtMjAxNC0zNjYwIGZpeAorCitGb3IgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczODgwNQorCitUaGUgZml4IGZvciBDVkUtMjAxNC0zNjYwIGludHJvZHVjZWQgYSByZWdyZXNzaW9uIGluIHNvbWUgY2FzZQord2hlcmUgZW50aXR5IHN1YnN0aXR1dGlvbiBpcyByZXF1aXJlZCBhbmQgdGhlIGVudGl0eSBpcyB1c2VkCitmaXJzdCBpbiBhbm90dGhlciBlbnRpdHkgcmVmZXJlbmNlZCBmcm9tIGFuIGF0dHJpYnV0ZSB2YWx1ZQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLS1naXQgYS9wYXJzZXIuYyBiL3BhcnNlci5jCitpbmRleCA2N2M5ZGZkLi5hOGQxYjY3IDEwMDY0NAorLS0tIGEvcGFyc2VyLmMKKysrKyBiL3BhcnNlci5jCitAQCAtNzIzNSw3ICs3MjM1LDggQEAgeG1sUGFyc2VSZWZlcmVuY2UoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KSB7CisgICAgICAqIGZhciBtb3JlIHNlY3VyZSBhcyB0aGUgcGFyc2VyIHdpbGwgb25seSBwcm9jZXNzIGRhdGEgY29taW5nIGZyb20KKyAgICAgICogdGhlIGRvY3VtZW50IGVudGl0eSBieSBkZWZhdWx0LgorICAgICAgKi8KKy0gICAgaWYgKChlbnQtPmNoZWNrZWQgPT0gMCkgJiYKKysgICAgaWYgKCgoZW50LT5jaGVja2VkID09IDApIHx8CisrICAgICAgICAgKChlbnQtPmNoaWxkcmVuID09IE5VTEwpICYmIChjdHh0LT5vcHRpb25zICYgWE1MX1BBUlNFX05PRU5UKSkpICYmCisgICAgICAgICAoKGVudC0+ZXR5cGUgIT0gWE1MX0VYVEVSTkFMX0dFTkVSQUxfUEFSU0VEX0VOVElUWSkgfHwKKyAgICAgICAgICAoY3R4dC0+b3B0aW9ucyAmIChYTUxfUEFSU0VfTk9FTlQgfCBYTUxfUEFSU0VfRFREVkFMSUQpKSkpIHsKKyAJdW5zaWduZWQgbG9uZyBvbGRuYmVudCA9IGN0eHQtPm5iZW50aXRpZXM7CistLSAKK2NnaXQgdjAuMTAuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2Fuc2lkZWNsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9hbnNpZGVjbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDUyZDc4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9hbnNpZGVjbC5wYXRjaApAQCAtMCwwICsxLDI1IEBACitTYWRseSBjbWFrZSBpcyBicm9rZW4uIElmIGl0IHNlZXMgdGhpcyByZWZlcmVuY2UgYW5kIGFuc2lkZWNsIGlzIHByZXNlbnQsIGl0IHdpbGwgYWRkIGEgCitkZXBlbmRlbmN5IHVwb24gaXQsIGV2ZW4gaWYgSEFWRV9BTlNJREVDX0ggaXMgbmV2ZXIgc2V0LgorCitUaGUgZWFzaWVzdCBzb2x1dGlvbiBpcyB0byByZW1vdmUgdGhlc2UgbGluZXMsIG90aGVyd2lzZSByZWNpcGVzIGxpa2UgbGlienlwcCBjYW4gaGF2ZSBhIAorZGVwZW5kZW5jeSBvbiB0aGUgYW5zaWRlY2wuaCBoZWFkZXIgdmlhIGNtYWtlLiBUaGlzIGNhbiBsZWFkIHRvIG9kZCByZXN1bHRzIGlmIHRoZSAKK2hlYWRlciBpcyByZW1vdmVkIChjbGVhbiBiaW51dGlscykgYW5kIHRoZW4gdGhlIGNvZGUgaXMgcmVjb21waWxlZC4KKworUlAgMjAxMi83LzEwCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbaXRzIHJlYWxseSBhIGNtYWtlIGJ1Z10KKworSW5kZXg6IGxpYnhtbDItMi44LjAvaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlieG1sMi0yLjguMC5vcmlnL2luY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbgkyMDEyLTA3LTEwIDExOjUxOjUyLjQ2MDc1MDU3MyArMDAwMAorKysrIGxpYnhtbDItMi44LjAvaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluCTIwMTItMDctMTAgMTE6NTI6NDEuNDM2NzQ5Mzk3ICswMDAwCitAQCAtNDAxLDkgKzQwMSw2IEBACisgI2VuZGlmCisgCisgI2lmZGVmIF9fR05VQ19fCistI2lmZGVmIEhBVkVfQU5TSURFQ0xfSAorLSNpbmNsdWRlIDxhbnNpZGVjbC5oPgorLSNlbmRpZgorIAorIC8qKgorICAqIEFUVFJJQlVURV9VTlVTRUQ6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2NvbmZpZ3VyZS5hYy1maXgtY3Jvc3MtY29tcGlsaW5nLXdhcm5pbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2NvbmZpZ3VyZS5hYy1maXgtY3Jvc3MtY29tcGlsaW5nLXdhcm5pbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY4MDc5YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvY29uZmlndXJlLmFjLWZpeC1jcm9zcy1jb21waWxpbmctd2FybmluZy5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitjb25maWd1cmUuYWM6IGZpeCBjcm9zcyBjb21waWxpbmcgd2FybmluZworCitUaGVyZSBpcyBhIHdhcm5pbmcgd2hpbGUgY3Jvc3MgY29tcGlsaW5nIHdoaWNoIHRyaWdnZXJlZCBhCitmYWlsdXJlIGJ5IGRvX3FhX2NvbmZpZ3VyZQorLi4uCit8Y29uZmlndXJlOjEyNjUyOiBjaGVja2luZyBmb3IgZ3pyZWFkIGluIC1segorfGNvbmZpZ3VyZToxMjY3NzogbWlwcy1wb2t5LWxpbnV4LWdjYyAgLW1lYiAtbWFiaT0zMiAtbWhhcmQtZmxvYXQKKyAtTC9saWIgY29uZnRlc3QuYyAtbHogICA+JjUKK3xsZDogd2FybmluZzogbGlicmFyeSBzZWFyY2ggcGF0aCAiL2xpYiIgaXMgdW5zYWZlIGZvciBjcm9zcy1jb21waWxhdGlvbgorLi4uCisKK1doaWxlIGRvIHRoZSBsaWIgY2hlY2tpbmcsIGRvIG5vdCBhZGQgJy1MJHtaX0RJUn0vbGliJyB0byBMREZMQUdTIGNvdWxkIGZpeCBpdC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvZSBzcGVjaWZpY10KK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDUgKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDlhOTA2MDAuLjBiYWM4YTQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTM5MSw4ICszOTEsNiBAQCBpZiB0ZXN0ICIkd2l0aF96bGliIiA9ICJubyI7IHRoZW4KKyAgICAgZWNobyAiRGlzYWJsaW5nIGNvbXByZXNzaW9uIHN1cHBvcnQiCisgZWxzZQorICAgICBBQ19DSEVDS19IRUFERVJTKHpsaWIuaCwKKy0gICAgICAgIFtTQVZFX0xERkxBR1M9IiR7TERGTEFHU30iCistCSBMREZMQUdTPSItTCR7Wl9ESVJ9L2xpYiIKKyAJQUNfQ0hFQ0tfTElCKHosIGd6cmVhZCxbCisgCSAgICBBQ19ERUZJTkUoW0hBVkVfTElCWl0sIFsxXSwgW0hhdmUgY29tcHJlc3Npb24gbGlicmFyeV0pCisgCSAgICBXSVRIX1pMSUI9MQorQEAgLTQwNiw4ICs0MDQsNyBAQCBlbHNlCisgCQllc2FjXQorIAkgICAgZWxzZQorIAkJWl9MSUJTPSItbHoiCistCSAgICBmaV0pCistCSBMREZMQUdTPSIke1NBVkVfTERGTEFHU30iXSkKKysJICAgIGZpXSkpCisgZmkKKyAKKyBBQ19TVUJTVChaX0NGTEFHUykKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9saWJ4bWwtNjRiaXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbC02NGJpdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTQ3MDE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9saWJ4bWwtNjRiaXQucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZnJvbSBkZWJpYW46IGJ1Z3MuZGViaWFuLm9yZy80Mzk4NDNdCisKKy0tLQorIGxpYnhtbC5oIHwgICAgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKKy0tLSBsaWJ4bWwyLTIuNi4yOS5vcmlnL2xpYnhtbC5oCisrKysgbGlieG1sMi0yLjYuMjkvbGlieG1sLmgKK0BAIC0xMSwxMCArMTEsMTMgQEAKKyAKKyAjaWZuZGVmIE5PX0xBUkdFRklMRV9TT1VSQ0UKKyAjaWZuZGVmIF9MQVJHRUZJTEVfU09VUkNFCisgI2RlZmluZSBfTEFSR0VGSUxFX1NPVVJDRQorICNlbmRpZgorKyNpZm5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRQorKyNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorKyNlbmRpZgorICNpZm5kZWYgX0ZJTEVfT0ZGU0VUX0JJVFMKKyAjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTIDY0CisgI2VuZGlmCisgI2VuZGlmCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbC1tNC11c2UtcGtnY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9saWJ4bWwtbTQtdXNlLXBrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmM4NDA3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9saWJ4bWwtbTQtdXNlLXBrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDIwNCBAQAorQU1fUEFUSF9YTUwyIHVzZXMgeG1sLWNvbmZpZyB3aGljaCB3ZSBkaXNhYmxlIHRocm91Z2gKK2JpbmNvbmZpZy1kaXNhYmxlZC5iYmNsYXNzLCBzbyBwb3J0IGl0IHRvIHVzZSBwa2ctY29uZmlnIGluc3RlYWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2xpYnhtbC5tNCBiL2xpYnhtbC5tNAoraW5kZXggNjhjZDgyNC4uNWZhMGE5YiAxMDA2NDQKKy0tLSBhL2xpYnhtbC5tNAorKysrIGIvbGlieG1sLm00CitAQCAtMSwxODggKzEsMTIgQEAKKy0jIENvbmZpZ3VyZSBwYXRocyBmb3IgTElCWE1MMgorLSMgTWlrZSBIb21tZXkgMjAwNC0wNi0xOQorLSMgdXNlIENQUEZMQUdTIGluc3RlYWQgb2YgQ0ZMQUdTCistIyBUb3NoaW8gS3VyYXRvbWkgMjAwMS0wNC0yMQorLSMgQWRhcHRlZCBmcm9tOgorLSMgQ29uZmlndXJlIHBhdGhzIGZvciBHTElCCistIyBPd2VuIFRheWxvciAgICAgOTctMTEtMworLQorIGRubCBBTV9QQVRIX1hNTDIoW01JTklNVU0tVkVSU0lPTiwgW0FDVElPTi1JRi1GT1VORCBbLCBBQ1RJT04tSUYtTk9ULUZPVU5EXV1dKQorIGRubCBUZXN0IGZvciBYTUwsIGFuZCBkZWZpbmUgWE1MX0NQUEZMQUdTIGFuZCBYTUxfTElCUworIGRubAorLUFDX0RFRlVOKFtBTV9QQVRIX1hNTDJdLFsgCistQUNfQVJHX1dJVEgoeG1sLXByZWZpeCwKKy0gICAgICAgICAgICBbICAtLXdpdGgteG1sLXByZWZpeD1QRlggICBQcmVmaXggd2hlcmUgbGlieG1sIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSwKKy0gICAgICAgICAgICB4bWxfY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiLCB4bWxfY29uZmlnX3ByZWZpeD0iIikKKy1BQ19BUkdfV0lUSCh4bWwtZXhlYy1wcmVmaXgsCistICAgICAgICAgICAgWyAgLS13aXRoLXhtbC1leGVjLXByZWZpeD1QRlggRXhlYyBwcmVmaXggd2hlcmUgbGlieG1sIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSwKKy0gICAgICAgICAgICB4bWxfY29uZmlnX2V4ZWNfcHJlZml4PSIkd2l0aHZhbCIsIHhtbF9jb25maWdfZXhlY19wcmVmaXg9IiIpCistQUNfQVJHX0VOQUJMRSh4bWx0ZXN0LAorLSAgICAgICAgICAgICAgWyAgLS1kaXNhYmxlLXhtbHRlc3QgICAgICAgRG8gbm90IHRyeSB0byBjb21waWxlIGFuZCBydW4gYSB0ZXN0IExJQlhNTCBwcm9ncmFtXSwsCistICAgICAgICAgICAgICBlbmFibGVfeG1sdGVzdD15ZXMpCistCistICBpZiB0ZXN0IHgkeG1sX2NvbmZpZ19leGVjX3ByZWZpeCAhPSB4IDsgdGhlbgorLSAgICAgeG1sX2NvbmZpZ19hcmdzPSIkeG1sX2NvbmZpZ19hcmdzIgorLSAgICAgaWYgdGVzdCB4JHtYTUwyX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCistICAgICAgICBYTUwyX0NPTkZJRz0keG1sX2NvbmZpZ19leGVjX3ByZWZpeC9iaW4veG1sMi1jb25maWcKKy0gICAgIGZpCistICBmaQorLSAgaWYgdGVzdCB4JHhtbF9jb25maWdfcHJlZml4ICE9IHggOyB0aGVuCistICAgICB4bWxfY29uZmlnX2FyZ3M9IiR4bWxfY29uZmlnX2FyZ3MgLS1wcmVmaXg9JHhtbF9jb25maWdfcHJlZml4IgorLSAgICAgaWYgdGVzdCB4JHtYTUwyX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCistICAgICAgICBYTUwyX0NPTkZJRz0keG1sX2NvbmZpZ19wcmVmaXgvYmluL3htbDItY29uZmlnCistICAgICBmaQorLSAgZmkKKy0KKy0gIEFDX1BBVEhfUFJPRyhYTUwyX0NPTkZJRywgeG1sMi1jb25maWcsIG5vKQorLSAgbWluX3htbF92ZXJzaW9uPWlmZWxzZShbJDFdLCAsMi4wLjAsWyQxXSkKKy0gIEFDX01TR19DSEVDS0lORyhmb3IgbGlieG1sIC0gdmVyc2lvbiA+PSAkbWluX3htbF92ZXJzaW9uKQorLSAgbm9feG1sPSIiCistICBpZiB0ZXN0ICIkWE1MMl9DT05GSUciID0gIm5vIiA7IHRoZW4KKy0gICAgbm9feG1sPXllcworLSAgZWxzZQorLSAgICBYTUxfQ1BQRkxBR1M9YCRYTUwyX0NPTkZJRyAkeG1sX2NvbmZpZ19hcmdzIC0tY2ZsYWdzYAorLSAgICBYTUxfTElCUz1gJFhNTDJfQ09ORklHICR4bWxfY29uZmlnX2FyZ3MgLS1saWJzYAorLSAgICB4bWxfY29uZmlnX21ham9yX3ZlcnNpb249YCRYTUwyX0NPTkZJRyAkeG1sX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKKy0gICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMS8nYAorLSAgICB4bWxfY29uZmlnX21pbm9yX3ZlcnNpb249YCRYTUwyX0NPTkZJRyAkeG1sX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKKy0gICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMi8nYAorLSAgICB4bWxfY29uZmlnX21pY3JvX3ZlcnNpb249YCRYTUwyX0NPTkZJRyAkeG1sX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKKy0gICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMy8nYAorLSAgICBpZiB0ZXN0ICJ4JGVuYWJsZV94bWx0ZXN0IiA9ICJ4eWVzIiA7IHRoZW4KKy0gICAgICBhY19zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCistICAgICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKKy0gICAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRYTUxfQ1BQRkxBR1MiCistICAgICAgTElCUz0iJFhNTF9MSUJTICRMSUJTIgorLWRubAorLWRubCBOb3cgY2hlY2sgaWYgdGhlIGluc3RhbGxlZCBsaWJ4bWwgaXMgc3VmZmljaWVudGx5IG5ldy4KKy1kbmwgKEFsc28gc2FuaXR5IGNoZWNrcyB0aGUgcmVzdWx0cyBvZiB4bWwyLWNvbmZpZyB0byBzb21lIGV4dGVudCkKKy1kbmwKKy0gICAgICBybSAtZiBjb25mLnhtbHRlc3QKKy0gICAgICBBQ19UUllfUlVOKFsKKy0jaW5jbHVkZSA8c3RkbGliLmg+CistI2luY2x1ZGUgPHN0ZGlvLmg+CistI2luY2x1ZGUgPHN0cmluZy5oPgorLSNpbmNsdWRlIDxsaWJ4bWwveG1sdmVyc2lvbi5oPgorLQorLWludCAKKy1tYWluKCkKKy17CistICBpbnQgeG1sX21ham9yX3ZlcnNpb24sIHhtbF9taW5vcl92ZXJzaW9uLCB4bWxfbWljcm9fdmVyc2lvbjsKKy0gIGludCBtYWpvciwgbWlub3IsIG1pY3JvOworLSAgY2hhciAqdG1wX3ZlcnNpb247CistCistICBzeXN0ZW0oInRvdWNoIGNvbmYueG1sdGVzdCIpOworLQorLSAgLyogQ2FwdHVyZSB4bWwyLWNvbmZpZyBvdXRwdXQgdmlhIGF1dG9jb25mL2NvbmZpZ3VyZSB2YXJpYWJsZXMgKi8KKy0gIC8qIEhQL1VYIDkgKCVAIyEpIHdyaXRlcyB0byBzc2NhbmYgc3RyaW5ncyAqLworLSAgdG1wX3ZlcnNpb24gPSAoY2hhciAqKXN0cmR1cCgiJG1pbl94bWxfdmVyc2lvbiIpOworLSAgaWYgKHNzY2FuZih0bXBfdmVyc2lvbiwgIiVkLiVkLiVkIiwgJm1ham9yLCAmbWlub3IsICZtaWNybykgIT0gMykgeworLSAgICAgcHJpbnRmKCIlcywgYmFkIHZlcnNpb24gc3RyaW5nIGZyb20geG1sMi1jb25maWdcbiIsICIkbWluX3htbF92ZXJzaW9uIik7CistICAgICBleGl0KDEpOworLSAgIH0KKy0gICBmcmVlKHRtcF92ZXJzaW9uKTsKKy0KKy0gICAvKiBDYXB0dXJlIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGZyb20gdGhlIGhlYWRlciBmaWxlcyAqLworLSAgIHRtcF92ZXJzaW9uID0gKGNoYXIgKilzdHJkdXAoTElCWE1MX0RPVFRFRF9WRVJTSU9OKTsKKy0gICBpZiAoc3NjYW5mKHRtcF92ZXJzaW9uLCAiJWQuJWQuJWQiLCAmeG1sX21ham9yX3ZlcnNpb24sICZ4bWxfbWlub3JfdmVyc2lvbiwgJnhtbF9taWNyb192ZXJzaW9uKSAhPSAzKSB7CistICAgICBwcmludGYoIiVzLCBiYWQgdmVyc2lvbiBzdHJpbmcgZnJvbSBsaWJ4bWwgaW5jbHVkZXNcbiIsICJMSUJYTUxfRE9UVEVEX1ZFUlNJT04iKTsKKy0gICAgIGV4aXQoMSk7CistICAgfQorLSAgIGZyZWUodG1wX3ZlcnNpb24pOworLQorLSAvKiBDb21wYXJlIHhtbDItY29uZmlnIG91dHB1dCB0byB0aGUgbGlieG1sIGhlYWRlcnMgKi8KKy0gIGlmICgoeG1sX21ham9yX3ZlcnNpb24gIT0gJHhtbF9jb25maWdfbWFqb3JfdmVyc2lvbikgfHwKKy0gICAgICAoeG1sX21pbm9yX3ZlcnNpb24gIT0gJHhtbF9jb25maWdfbWlub3JfdmVyc2lvbikgfHwKKy0gICAgICAoeG1sX21pY3JvX3ZlcnNpb24gIT0gJHhtbF9jb25maWdfbWljcm9fdmVyc2lvbikpCistICAgIHsKKy0gICAgICBwcmludGYoIioqKiBsaWJ4bWwgaGVhZGVyIGZpbGVzICh2ZXJzaW9uICVkLiVkLiVkKSBkbyBub3QgbWF0Y2hcbiIsCistICAgICAgICAgeG1sX21ham9yX3ZlcnNpb24sIHhtbF9taW5vcl92ZXJzaW9uLCB4bWxfbWljcm9fdmVyc2lvbik7CistICAgICAgcHJpbnRmKCIqKiogeG1sMi1jb25maWcgKHZlcnNpb24gJWQuJWQuJWQpXG4iLAorLSAgICAgICAgICR4bWxfY29uZmlnX21ham9yX3ZlcnNpb24sICR4bWxfY29uZmlnX21pbm9yX3ZlcnNpb24sICR4bWxfY29uZmlnX21pY3JvX3ZlcnNpb24pOworLSAgICAgIHJldHVybiAxOworLSAgICB9IAorLS8qIENvbXBhcmUgdGhlIGhlYWRlcnMgdG8gdGhlIGxpYnJhcnkgdG8gbWFrZSBzdXJlIHdlIG1hdGNoICovCistICAvKiBMZXNzIHRoYW4gaWRlYWwgLS0gZG9lc24ndCBwcm92aWRlIHVzIHdpdGggcmV0dXJuIHZhbHVlIGZlZWRiYWNrLCAKKy0gICAqIG9ubHkgZXhpdHMgaWYgdGhlcmUncyBhIHNlcmlvdXMgbWlzbWF0Y2ggYmV0d2VlbiBoZWFkZXIgYW5kIGxpYnJhcnkuCistICAgKi8KKy0gICAgTElCWE1MX1RFU1RfVkVSU0lPTjsKKy0KKy0gICAgLyogVGVzdCB0aGF0IHRoZSBsaWJyYXJ5IGlzIGdyZWF0ZXIgdGhhbiBvdXIgbWluaW11bSB2ZXJzaW9uICovCistICAgIGlmICgoeG1sX21ham9yX3ZlcnNpb24gPiBtYWpvcikgfHwKKy0gICAgICAgICgoeG1sX21ham9yX3ZlcnNpb24gPT0gbWFqb3IpICYmICh4bWxfbWlub3JfdmVyc2lvbiA+IG1pbm9yKSkgfHwKKy0gICAgICAgICgoeG1sX21ham9yX3ZlcnNpb24gPT0gbWFqb3IpICYmICh4bWxfbWlub3JfdmVyc2lvbiA9PSBtaW5vcikgJiYKKy0gICAgICAgICh4bWxfbWljcm9fdmVyc2lvbiA+PSBtaWNybykpKQorLSAgICAgIHsKKy0gICAgICAgIHJldHVybiAwOworLSAgICAgICB9CistICAgICBlbHNlCistICAgICAgeworLSAgICAgICAgcHJpbnRmKCJcbioqKiBBbiBvbGQgdmVyc2lvbiBvZiBsaWJ4bWwgKCVkLiVkLiVkKSB3YXMgZm91bmQuXG4iLAorLSAgICAgICAgICAgICAgIHhtbF9tYWpvcl92ZXJzaW9uLCB4bWxfbWlub3JfdmVyc2lvbiwgeG1sX21pY3JvX3ZlcnNpb24pOworLSAgICAgICAgcHJpbnRmKCIqKiogWW91IG5lZWQgYSB2ZXJzaW9uIG9mIGxpYnhtbCBuZXdlciB0aGFuICVkLiVkLiVkLiBUaGUgbGF0ZXN0IHZlcnNpb24gb2ZcbiIsCistICAgICAgICAgICBtYWpvciwgbWlub3IsIG1pY3JvKTsKKy0gICAgICAgIHByaW50ZigiKioqIGxpYnhtbCBpcyBhbHdheXMgYXZhaWxhYmxlIGZyb20gZnRwOi8vZnRwLnhtbHNvZnQub3JnLlxuIik7CistICAgICAgICBwcmludGYoIioqKlxuIik7CistICAgICAgICBwcmludGYoIioqKiBJZiB5b3UgaGF2ZSBhbHJlYWR5IGluc3RhbGxlZCBhIHN1ZmZpY2llbnRseSBuZXcgdmVyc2lvbiwgdGhpcyBlcnJvclxuIik7CistICAgICAgICBwcmludGYoIioqKiBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB3cm9uZyBjb3B5IG9mIHRoZSB4bWwyLWNvbmZpZyBzaGVsbCBzY3JpcHQgaXNcbiIpOworLSAgICAgICAgcHJpbnRmKCIqKiogYmVpbmcgZm91bmQuIFRoZSBlYXNpZXN0IHdheSB0byBmaXggdGhpcyBpcyB0byByZW1vdmUgdGhlIG9sZCB2ZXJzaW9uXG4iKTsKKy0gICAgICAgIHByaW50ZigiKioqIG9mIExJQlhNTCwgYnV0IHlvdSBjYW4gYWxzbyBzZXQgdGhlIFhNTDJfQ09ORklHIGVudmlyb25tZW50IHRvIHBvaW50IHRvIHRoZVxuIik7CistICAgICAgICBwcmludGYoIioqKiBjb3JyZWN0IGNvcHkgb2YgeG1sMi1jb25maWcuIChJbiB0aGlzIGNhc2UsIHlvdSB3aWxsIGhhdmUgdG9cbiIpOworLSAgICAgICAgcHJpbnRmKCIqKiogbW9kaWZ5IHlvdXIgTERfTElCUkFSWV9QQVRIIGVudmlyb21lbnQgdmFyaWFibGUsIG9yIGVkaXQgL2V0Yy9sZC5zby5jb25mXG4iKTsKKy0gICAgICAgIHByaW50ZigiKioqIHNvIHRoYXQgdGhlIGNvcnJlY3QgbGlicmFyaWVzIGFyZSBmb3VuZCBhdCBydW4tdGltZSkpXG4iKTsKKy0gICAgfQorLSAgcmV0dXJuIDE7CistfQorLV0sLCBub194bWw9eWVzLFtlY2hvICRhY19uICJjcm9zcyBjb21waWxpbmc7IGFzc3VtZWQgT0suLi4gJGFjX2MiXSkKKy0gICAgICAgQ1BQRkxBR1M9IiRhY19zYXZlX0NQUEZMQUdTIgorLSAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorLSAgICAgZmkKKy0gIGZpCisrQUNfREVGVU4oW0FNX1BBVEhfWE1MMl0sWworKyAgQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pCisgCistICBpZiB0ZXN0ICJ4JG5vX3htbCIgPSB4IDsgdGhlbgorLSAgICAgQUNfTVNHX1JFU1VMVCh5ZXMgKHZlcnNpb24gJHhtbF9jb25maWdfbWFqb3JfdmVyc2lvbi4keG1sX2NvbmZpZ19taW5vcl92ZXJzaW9uLiR4bWxfY29uZmlnX21pY3JvX3ZlcnNpb24pKQorLSAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkgICAgIAorLSAgZWxzZQorLSAgICAgQUNfTVNHX1JFU1VMVChubykKKy0gICAgIGlmIHRlc3QgIiRYTUwyX0NPTkZJRyIgPSAibm8iIDsgdGhlbgorLSAgICAgICBlY2hvICIqKiogVGhlIHhtbDItY29uZmlnIHNjcmlwdCBpbnN0YWxsZWQgYnkgTElCWE1MIGNvdWxkIG5vdCBiZSBmb3VuZCIKKy0gICAgICAgZWNobyAiKioqIElmIGxpYnhtbCB3YXMgaW5zdGFsbGVkIGluIFBSRUZJWCwgbWFrZSBzdXJlIFBSRUZJWC9iaW4gaXMgaW4iCistICAgICAgIGVjaG8gIioqKiB5b3VyIHBhdGgsIG9yIHNldCB0aGUgWE1MMl9DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIgorLSAgICAgICBlY2hvICIqKiogZnVsbCBwYXRoIHRvIHhtbDItY29uZmlnLiIKKy0gICAgIGVsc2UKKy0gICAgICAgaWYgdGVzdCAtZiBjb25mLnhtbHRlc3QgOyB0aGVuCistICAgICAgICA6CistICAgICAgIGVsc2UKKy0gICAgICAgICAgZWNobyAiKioqIENvdWxkIG5vdCBydW4gbGlieG1sIHRlc3QgcHJvZ3JhbSwgY2hlY2tpbmcgd2h5Li4uIgorLSAgICAgICAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRYTUxfQ1BQRkxBR1MiCistICAgICAgICAgIExJQlM9IiRMSUJTICRYTUxfTElCUyIKKy0gICAgICAgICAgQUNfVFJZX0xJTksoWworLSNpbmNsdWRlIDxsaWJ4bWwveG1sdmVyc2lvbi5oPgorLSNpbmNsdWRlIDxzdGRpby5oPgorLV0sICAgICAgWyBMSUJYTUxfVEVTVF9WRVJTSU9OOyByZXR1cm4gMDtdLAorLSAgICAgICAgWyBlY2hvICIqKiogVGhlIHRlc3QgcHJvZ3JhbSBjb21waWxlZCwgYnV0IGRpZCBub3QgcnVuLiBUaGlzIHVzdWFsbHkgbWVhbnMiCistICAgICAgICAgIGVjaG8gIioqKiB0aGF0IHRoZSBydW4tdGltZSBsaW5rZXIgaXMgbm90IGZpbmRpbmcgTElCWE1MIG9yIGZpbmRpbmcgdGhlIHdyb25nIgorLSAgICAgICAgICBlY2hvICIqKiogdmVyc2lvbiBvZiBMSUJYTUwuIElmIGl0IGlzIG5vdCBmaW5kaW5nIExJQlhNTCwgeW91J2xsIG5lZWQgdG8gc2V0IHlvdXIiCistICAgICAgICAgIGVjaG8gIioqKiBMRF9MSUJSQVJZX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsIG9yIGVkaXQgL2V0Yy9sZC5zby5jb25mIHRvIHBvaW50IgorLSAgICAgICAgICBlY2hvICIqKiogdG8gdGhlIGluc3RhbGxlZCBsb2NhdGlvbiAgQWxzbywgbWFrZSBzdXJlIHlvdSBoYXZlIHJ1biBsZGNvbmZpZyBpZiB0aGF0IgorLSAgICAgICAgICBlY2hvICIqKiogaXMgcmVxdWlyZWQgb24geW91ciBzeXN0ZW0iCistICAgICAgICAgIGVjaG8gIioqKiIKKy0gICAgICAgICAgZWNobyAiKioqIElmIHlvdSBoYXZlIGFuIG9sZCB2ZXJzaW9uIGluc3RhbGxlZCwgaXQgaXMgYmVzdCB0byByZW1vdmUgaXQsIGFsdGhvdWdoIgorLSAgICAgICAgICBlY2hvICIqKiogeW91IG1heSBhbHNvIGJlIGFibGUgdG8gZ2V0IHRoaW5ncyB0byB3b3JrIGJ5IG1vZGlmeWluZyBMRF9MSUJSQVJZX1BBVEgiIF0sCistICAgICAgICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGZhaWxlZCB0byBjb21waWxlIG9yIGxpbmsuIFNlZSB0aGUgZmlsZSBjb25maWcubG9nIGZvciB0aGUiCistICAgICAgICAgIGVjaG8gIioqKiBleGFjdCBlcnJvciB0aGF0IG9jY3VyZWQuIFRoaXMgdXN1YWxseSBtZWFucyBMSUJYTUwgd2FzIGluY29ycmVjdGx5IGluc3RhbGxlZCIKKy0gICAgICAgICAgZWNobyAiKioqIG9yIHRoYXQgeW91IGhhdmUgbW92ZWQgTElCWE1MIHNpbmNlIGl0IHdhcyBpbnN0YWxsZWQuIEluIHRoZSBsYXR0ZXIgY2FzZSwgeW91IgorLSAgICAgICAgICBlY2hvICIqKiogbWF5IHdhbnQgdG8gZWRpdCB0aGUgeG1sMi1jb25maWcgc2NyaXB0OiAkWE1MMl9DT05GSUciIF0pCistICAgICAgICAgIENQUEZMQUdTPSIkYWNfc2F2ZV9DUFBGTEFHUyIKKy0gICAgICAgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKKy0gICAgICAgZmkKKy0gICAgIGZpCisrICB2ZXJkZXA9aWZlbHNlKFskMV0sIFtdLCBbXSwgWz49ICQxXSkKKysgIFBLR19DSEVDS19NT0RVTEVTKFhNTCwgW2xpYnhtbC0yLjAgJHZlcmRlcF0sIFskMl0sIFskM10pCisgCistICAgICBYTUxfQ1BQRkxBR1M9IiIKKy0gICAgIFhNTF9MSUJTPSIiCistICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorLSAgZmkKKysgIFhNTF9DUFBGTEFHUz0kWE1MX0NGTEFHUworICAgQUNfU1VCU1QoWE1MX0NQUEZMQUdTKQorLSAgQUNfU1VCU1QoWE1MX0xJQlMpCistICBybSAtZiBjb25mLnhtbHRlc3QKKyBdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9saWJ4bWwyLUNWRS0yMDE0LTAxOTEtZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9saWJ4bWwyLUNWRS0yMDE0LTAxOTEtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMDVhZTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbDItQ1ZFLTIwMTQtMDE5MS1maXgucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRnJvbTogRGFuaWVsIFZlaWxsYXJkIDx2ZWlsbGFyZEByZWRoYXQuY29tPgorRGF0ZTogVHVlLCAyMiBBcHIgMjAxNCAxNTozMDo1NiArMDgwMAorU3ViamVjdDogRG8gbm90IGZldGNoIGV4dGVybmFsIHBhcmFtZXRlciBlbnRpdGllcworCitVbmxlc3MgZXhwbGljaXRlbHkgYXNrZWQgZm9yIHdoZW4gdmFsaWRhdGluZyBvciByZXBsYWNpbmcgZW50aXRpZXMKK3dpdGggdGhlaXIgdmFsdWUuIFByb2JsZW0gcG9pbnRlZCBvdXQgYnkgRGFuaWVsIEJlcnJhbmdlIDxiZXJyYW5nZUByZWRoYXQuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitSZWZlcmVuY2U6IGh0dHBzOi8vYWNjZXNzLnJlZGhhdC5jb20vc2VjdXJpdHkvY3ZlL0NWRS0yMDE0LTAxOTEKKworU2lnbmVkLW9mZi1ieTogRGFuaWVsIFZlaWxsYXJkIDx2ZWlsbGFyZEByZWRoYXQuY29tPgorU2lnbmVkLW9mZi1ieTogTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBlbmVhLmNvbT4KKy0tLQorZGlmZiAtTmF1ciBsaWJ4bWwyLTIuOS4xLW9yaWcvcGFyc2VyLmMgbGlieG1sMi0yLjkuMS9wYXJzZXIuYworLS0tIGxpYnhtbDItMi45LjEtb3JpZy9wYXJzZXIuYwkyMDEzLTA0LTE2IDE1OjM5OjE4LjAwMDAwMDAwMCArMDIwMAorKysrIGxpYnhtbDItMi45LjEvcGFyc2VyLmMJMjAxNC0wNS0wNyAxMzozNTo0Ni44ODM2ODc5NDYgKzAyMDAKK0BAIC0yNTk1LDYgKzI1OTUsMjAgQEAKKyAJCSAgICB4bWxDaGFyRW5jb2RpbmcgZW5jOworIAorIAkJICAgIC8qCisrCQkgICAgICogTm90ZTogZXh0ZXJuYWwgcGFyc2VkIGVudGl0aWVzIHdpbGwgbm90IGJlIGxvYWRlZCwgaXQgaXMKKysJCSAgICAgKiBub3QgcmVxdWlyZWQgZm9yIGEgbm9uLXZhbGlkYXRpbmcgcGFyc2VyLCB1bmxlc3MgdGhlCisrCQkgICAgICogb3B0aW9uIG9mIHZhbGlkYXRpbmcsIG9yIHN1YnN0aXR1dGluZyBlbnRpdGllcyB3ZXJlCisrCQkgICAgICogZ2l2ZW4uIERvaW5nIHNvIGlzIGZhciBtb3JlIHNlY3VyZSBhcyB0aGUgcGFyc2VyIHdpbGwKKysJCSAgICAgKiBvbmx5IHByb2Nlc3MgZGF0YSBjb21pbmcgZnJvbSB0aGUgZG9jdW1lbnQgZW50aXR5IGJ5CisrCQkgICAgICogZGVmYXVsdC4KKysJCSAgICAgKi8KKysgICAgICAgICAgICAgICAgICAgIGlmICgoZW50aXR5LT5ldHlwZSA9PSBYTUxfRVhURVJOQUxfUEFSQU1FVEVSX0VOVElUWSkgJiYKKysJCSAgICAgICAgKChjdHh0LT5vcHRpb25zICYgWE1MX1BBUlNFX05PRU5UKSA9PSAwKSAmJgorKwkJCSgoY3R4dC0+b3B0aW9ucyAmIFhNTF9QQVJTRV9EVERWQUxJRCkgPT0gMCkgJiYKKysJCQkoY3R4dC0+dmFsaWRhdGUgPT0gMCkpCisrCQkJcmV0dXJuOworKworKwkJICAgIC8qCisgCQkgICAgICogaGFuZGxlIHRoZSBleHRyYSBzcGFjZXMgYWRkZWQgYmVmb3JlIGFuZCBhZnRlcgorIAkJICAgICAqIGMuZi4gaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbCNhcy1QRQorIAkJICAgICAqIHRoaXMgaXMgZG9uZSBpbmRlcGVuZGVudGx5LgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9weXRob24tc2l0ZXBhY2thZ2VzLWRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvcHl0aG9uLXNpdGVwYWNrYWdlcy1kaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgzYzgzMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvcHl0aG9uLXNpdGVwYWNrYWdlcy1kaXIucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorQWxsb3cgdXMgdG8gcGFzcyBpbiBQWVRIT05fU0lURV9QQUNLQUdFUworCitUaGUgcHl0aG9uIGJpbmFyeSB1c2VkIHdoZW4gYnVpbGRpbmcgZm9yIG5hdGl2ZXNkayBkb2Vzbid0IGdpdmUgdXMgdGhlCitjb3JyZWN0IHBhdGggaGVyZSBzbyB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gc3BlY2lmeSBpdCBvdXJzZWx2ZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlnXQorU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKK1JlYmFzZSB0byAyLjkuMgorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtODEzLDcgKzgxMyw4IEBAIGRubAorIAorIFBZVEhPTl9WRVJTSU9OPQorIFBZVEhPTl9JTkNMVURFUz0KKy1QWVRIT05fU0lURV9QQUNLQUdFUz0KKysjIEFsbG93IHRoaXMgdG8gYmUgc2V0IGV4dGVybmFsbHkKKysjUFlUSE9OX1NJVEVfUEFDS0FHRVM9CisgUFlUSE9OX1RFU1RTPQorIHB5dGhvbmRpcj0KKyBpZiB0ZXN0ICIkd2l0aF9weXRob24iICE9ICJubyIgOyB0aGVuCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDczZDBiNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKK21ha2UgLWsgcnVudGVzdHMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvcnVudGVzdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvcnVudGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTdhYjIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9ydW50ZXN0LnBhdGNoCkBAIC0wLDAgKzEsODIwIEBACitBZGQgJ2luc3RhbGwtcHRlc3QnIHJ1bGUuCitQcmludCBhIHN0YW5kYXJkIHJlc3VsdCBsaW5lIGZvciBlYWNoIHRlc3QuCisKK1NpZ25lZC1vZmYtYnk6IE1paGFlbGEgU2VuZHJlYSA8bWloYWVsYS5zZW5kcmVhQGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2RpZmYgLXVOciBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KKy0tLSBhL01ha2VmaWxlLmFtCTIwMTMtMDQtMTcgMTQ6NTE6NDIuNjMzMzg2NDc3ICswMjAwCisrKysgYi9NYWtlZmlsZS5hbQkyMDEzLTA0LTE5IDE0OjQ3OjUxLjU0NDcyMDU2OCArMDIwMAorQEAgLTIwMiwxMCArMjAyLDE5IEBACisgI3Rlc3RPT01fREVQRU5ERU5DSUVTID0gJChERVBTKQorICN0ZXN0T09NX0xEQUREPSAkKExEQUREUykKKyAKKytpbnN0YWxsLXB0ZXN0OgorKwlAKGlmIFsgLWQgLmxpYnMgXSA7IHRoZW4gY2QgLmxpYnM7IGZpOyBcCisrCWluc3RhbGwgJChub2luc3RfUFJPR1JBTVMpICQoREVTVERJUikpCisrCWNwIC1yICQoc3JjZGlyKS90ZXN0ICQoREVTVERJUikKKysJY3AgLXIgJChzcmNkaXIpL3Jlc3VsdCAkKERFU1RESVIpCisrCWNwIC1yICQoc3JjZGlyKS9weXRob24gJChERVNURElSKQorKwljcCBNYWtlZmlsZSAkKERFU1RESVIpCisrCXNlZCAtaSAtZSAnc3xeTWFrZWZpbGU6fF9NYWtlZmlsZTp8JyAkKERFU1RESVIpL01ha2VmaWxlCisrCisgcnVudGVzdHM6CisgCVsgLWQgdGVzdCAgIF0gfHwgJChMTl9TKSAkKHNyY2RpcikvdGVzdCAgIC4KKyAJWyAtZCByZXN1bHQgXSB8fCAkKExOX1MpICQoc3JjZGlyKS9yZXN1bHQgLgorLQkkKENIRUNLRVIpIC4vcnVudGVzdCQoRVhFRVhUKSAmJiAkKENIRUNLRVIpIC4vdGVzdHJlY3Vyc2UkKEVYRUVYVCkgJiYkKENIRUNLRVIpIC4vdGVzdGFwaSQoRVhFRVhUKSAmJiAkKENIRUNLRVIpIC4vdGVzdGNoYXIkKEVYRUVYVCkmJiAkKENIRUNLRVIpIC4vdGVzdGRpY3QkKEVYRUVYVCkgJiYgJChDSEVDS0VSKSAuL3J1bnhtbGNvbmYkKEVYRUVYVCkKKysJLi9ydW50ZXN0JChFWEVFWFQpIDsgLi90ZXN0cmVjdXJzZSQoRVhFRVhUKSA7IC4vdGVzdGFwaSQoRVhFRVhUKSA7IC4vdGVzdGNoYXIkKEVYRUVYVCkgOyAuL3Rlc3RkaWN0JChFWEVFWFQpIDsgLi9ydW54bWxjb25mJChFWEVFWFQpCisgCUAoaWYgWyAiJChQWVRIT05fU1VCRElSKSIgIT0gIiIgXSA7IHRoZW4gY2QgcHl0aG9uIDsgXAorIAkgICAgJChNQUtFKSB0ZXN0cyA7IGZpKQorIAorZGlmZiAtdU5yIGEvcnVuc3VpdGUuYyBiL3J1bnN1aXRlLmMKKy0tLSBhL3J1bnN1aXRlLmMJMjAxMy0wNC0xMiAxNjoxNzoxMS40NjI4MjMyMzggKzAyMDAKKysrKyBiL3J1bnN1aXRlLmMJMjAxMy0wNC0xNyAxNDowNzoyNC4zNTI2OTMyMTEgKzAyMDAKK0BAIC0xMTYyLDYgKzExNjIsNyBAQAorIAorICAgICBpZiAobG9nZmlsZSAhPSBOVUxMKQorICAgICAgICAgZmNsb3NlKGxvZ2ZpbGUpOworKyAgICBwcmludGYoIiVzOiBydW5zdWl0ZVxuXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKyAgICAgcmV0dXJuKHJldCk7CisgfQorICNlbHNlIC8qICFTQ0hFTUFTICovCitkaWZmIC11TnIgYS9ydW50ZXN0LmMgYi9ydW50ZXN0LmMKKy0tLSBhL3J1bnRlc3QuYwkyMDEzLTA0LTE2IDEzOjE5OjE1LjA4Nzk5NzI5MCArMDIwMAorKysrIGIvcnVudGVzdC5jCTIwMTMtMDQtMTcgMTQ6MDg6MjkuNTI5OTQ5NjU1ICswMjAwCitAQCAtNDM4Niw2ICs0Mzg2LDcgQEAKKyAJICAgIGVycisrOworIAl9CisgICAgIH0KKysgICAgcHJpbnRmKCIlczogJXNcbiIsIChlcnIgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIsIHRzdC0+ZGVzYyk7CisgICAgIHJldHVybihlcnIpOworIH0KKyAKK0BAIC00NDU1LDYgKzQ0NTYsNyBAQAorICAgICB4bWxDbGVhbnVwUGFyc2VyKCk7CisgICAgIHhtbE1lbW9yeUR1bXAoKTsKKyAKKysgICAgcHJpbnRmKCIlczogcnVudGVzdFxuXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKyAgICAgcmV0dXJuKHJldCk7CisgfQorIAorZGlmZiAtdU5yIGEvcnVueG1sY29uZi5jIGIvcnVueG1sY29uZi5jCistLS0gYS9ydW54bWxjb25mLmMJMjAxMy0wNC0xNiAxMjo1Mzo0OS45MDA5ODI5OTAgKzAyMDAKKysrKyBiL3J1bnhtbGNvbmYuYwkyMDEzLTA0LTE3IDE0OjA5OjIxLjExMTc3ODEwNCArMDIwMAorQEAgLTU5NSw2ICs1OTUsNyBAQAorIAorICAgICBpZiAobG9nZmlsZSAhPSBOVUxMKQorICAgICAgICAgZmNsb3NlKGxvZ2ZpbGUpOworKyAgICBwcmludGYoIiVzOiBydW54bWxjb25mXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKyAgICAgcmV0dXJuKHJldCk7CisgfQorIAorZGlmZiAtdU5yIGEvdGVzdGFwaS5jIGIvdGVzdGFwaS5jCistLS0gYS90ZXN0YXBpLmMJMjAxMy0wNC0xMiAxNjoxNjo1Ny43NjM0MTc2NTkgKzAyMDAKKysrKyBiL3Rlc3RhcGkuYwkyMDEzLTA0LTE3IDE0OjEwOjI4Ljg3NjkyNDg4MSArMDIwMAorQEAgLTEyNDUsNDkgKzEyNDUsOTEgQEAKKyB0ZXN0bGlieG1sMih2b2lkKQorIHsKKyAgICAgaW50IHRlc3RfcmV0ID0gMDsKKysgICAgaW50IHJldCA9IDA7CisgCistICAgIHRlc3RfcmV0ICs9IHRlc3RfSFRNTHBhcnNlcigpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X0hUTUx0cmVlKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfU0FYMigpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X2MxNG4oKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9jYXRhbG9nKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfY2h2YWxpZCgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X2RlYnVnWE1MKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfZGljdCgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X2VuY29kaW5nKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfZW50aXRpZXMoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9oYXNoKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfbGlzdCgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X25hbm9mdHAoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9uYW5vaHR0cCgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3BhcnNlcigpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3BhcnNlckludGVybmFscygpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3BhdHRlcm4oKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9yZWxheG5nKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3Rfc2NoZW1hc0ludGVybmFscygpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3NjaGVtYXRyb24oKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF90cmVlKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfdXJpKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfdmFsaWQoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94aW5jbHVkZSgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3htbElPKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sYXV0b21hdGEoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94bWxlcnJvcigpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3htbG1vZHVsZSgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3htbHJlYWRlcigpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3htbHJlZ2V4cCgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3htbHNhdmUoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94bWxzY2hlbWFzKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sc2NoZW1hc3R5cGVzKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sc3RyaW5nKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sdW5pY29kZSgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3htbHdyaXRlcigpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3hwYXRoKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeHBhdGhJbnRlcm5hbHMoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94cG9pbnRlcigpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9IVE1McGFyc2VyKCkpOworKyAgICBwcmludGYoIiVzOiBIVE1McGFyc2VyXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfSFRNTHRyZWUoKSk7CisrICAgIHByaW50ZigiJXM6IEhUTUx0cmVlXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfU0FYMigpKTsKKysgICAgcHJpbnRmKCIlczogU0FYMlxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X2MxNG4oKSk7CisrICAgIHByaW50ZigiJXM6IGMxNG5cbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9jYXRhbG9nKCkpOworKyAgICBwcmludGYoIiVzOiBjYXRhbG9nXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfY2h2YWxpZCgpKTsKKysgICAgcHJpbnRmKCIlczogY2h2YWxpZFxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X2RlYnVnWE1MKCkpOworKyAgICBwcmludGYoIiVzOiBkZWJ1Z1hNTFxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X2RpY3QoKSk7CisrICAgIHByaW50ZigiJXM6IGRpY3RcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9lbmNvZGluZygpKTsKKysgICAgcHJpbnRmKCIlczogZW5jb2RpbmdcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9lbnRpdGllcygpKTsKKysgICAgcHJpbnRmKCIlczogZW50aXRpZXNcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9oYXNoKCkpOworKyAgICBwcmludGYoIiVzOiBoYXNoXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfbGlzdCgpKTsKKysgICAgcHJpbnRmKCIlczogbGlzdFxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X25hbm9mdHAoKSk7CisrICAgIHByaW50ZigiJXM6IG5hbm9mdHBcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9uYW5vaHR0cCgpKTsKKysgICAgcHJpbnRmKCIlczogbmFub2h0dHBcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9wYXJzZXIoKSk7CisrICAgIHByaW50ZigiJXM6IHBhcnNlclxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3BhcnNlckludGVybmFscygpKTsKKysgICAgcHJpbnRmKCIlczogcGFyc2VySW50ZXJuYWxzXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfcGF0dGVybigpKTsKKysgICAgcHJpbnRmKCIlczogcGF0dGVyblxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3JlbGF4bmcoKSk7CisrICAgIHByaW50ZigiJXM6IHJlbGF4bmdcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9zY2hlbWFzSW50ZXJuYWxzKCkpOworKyAgICBwcmludGYoIiVzOiBzY2hlbWFzSW50ZXJuYWxzXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3Rfc2NoZW1hdHJvbigpKTsKKysgICAgcHJpbnRmKCIlczogc2NoZW1hdHJvblxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3RyZWUoKSk7CisrICAgIHByaW50ZigiJXM6IHRyZWVcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF91cmkoKSk7CisrICAgIHByaW50ZigiJXM6IHVyaVxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3ZhbGlkKCkpOworKyAgICBwcmludGYoIiVzOiB2YWxpZFxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3hpbmNsdWRlKCkpOworKyAgICBwcmludGYoIiVzOiB4aW5jbHVkZVxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3htbElPKCkpOworKyAgICBwcmludGYoIiVzOiB4bWxJT1xuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3htbGF1dG9tYXRhKCkpOworKyAgICBwcmludGYoIiVzOiB4bWxhdXRvbWF0YVxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3htbGVycm9yKCkpOworKyAgICBwcmludGYoIiVzOiB4bWxlcnJvclxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3htbG1vZHVsZSgpKTsKKysgICAgcHJpbnRmKCIlczogeG1sbW9kdWxlXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1scmVhZGVyKCkpOworKyAgICBwcmludGYoIiVzOiB4bWxyZWFkZXJcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF94bWxyZWdleHAoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbHJlZ2V4cFxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3htbHNhdmUoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbHNhdmVcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF94bWxzY2hlbWFzKCkpOworKyAgICBwcmludGYoIiVzOiB4bWxzY2hlbWFzXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sc2NoZW1hc3R5cGVzKCkpOworKyAgICBwcmludGYoIiVzOiB4bWxzY2hlbWFzdHlwZXNcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF94bWxzdHJpbmcoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbHN0cmluZ1xuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3htbHVuaWNvZGUoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbHVuaWNvZGVcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF94bWx3cml0ZXIoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbHdyaXRlclxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3hwYXRoKCkpOworKyAgICBwcmludGYoIiVzOiB4cGF0aFxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3hwYXRoSW50ZXJuYWxzKCkpOworKyAgICBwcmludGYoIiVzOiB4cGF0aEludGVybmFsc1xuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3hwb2ludGVyKCkpOworKyAgICBwcmludGYoIiVzOiB4cG9pbnRlclxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisgCisgICAgIHByaW50ZigiVG90YWw6ICVkIGZ1bmN0aW9ucywgJWQgdGVzdHMsICVkIGVycm9yc1xuIiwKKyAgICAgICAgICAgIGZ1bmN0aW9uX3Rlc3RzLCBjYWxsX3Rlc3RzLCB0ZXN0X3JldCk7CisrCisrICAgIHByaW50ZigiJXM6IHRlc3RhcGlcblxuIiwgKHRlc3RfcmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKyAgICAgcmV0dXJuKHRlc3RfcmV0KTsKKyB9CisgCitkaWZmIC11TnIgYS90ZXN0Y2hhci5jIGIvdGVzdGNoYXIuYworLS0tIGEvdGVzdGNoYXIuYwkyMDEzLTA0LTE3IDEwOjUwOjMwLjI1MDE0NzQxOCArMDIwMAorKysrIGIvdGVzdGNoYXIuYwkyMDEzLTA0LTE4IDE2OjExOjI4LjQ1NTczMzgwMCArMDIwMAorQEAgLTIzLDcgKzIzLDcgQEAKKyBjaGFyIGRvY3VtZW50MVsxMDBdID0gIjxkb2M+WFhYWDwvZG9jPiI7CisgY2hhciBkb2N1bWVudDJbMTAwXSA9ICI8ZG9jIGZvbz0nWFhYWCcvPiI7CisgCistc3RhdGljIHZvaWQgdGVzdERvY3VtZW50UmFuZ2VCeXRlMSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNoYXIgKmRvY3VtZW50LAorK3N0YXRpYyBpbnQgdGVzdERvY3VtZW50UmFuZ2VCeXRlMSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNoYXIgKmRvY3VtZW50LAorICAgICAgICAgICAgICAgICAgIGludCBsZW4sICBjaGFyICpkYXRhLCBpbnQgZm9yYmlkMSwgaW50IGZvcmJpZDIpIHsKKyAgICAgaW50IGk7CisgICAgIHhtbERvY1B0ciByZXM7CitAQCAtMzcsMzMgKzM3LDQxIEBACisgCXJlcyA9IHhtbFJlYWRNZW1vcnkoZG9jdW1lbnQsIGxlbiwgInRlc3QiLCBOVUxMLCAwKTsKKyAKKyAJaWYgKChpID09IGZvcmJpZDEpIHx8IChpID09IGZvcmJpZDIpKSB7CistCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKQorKwkgICAgaWYgKChsYXN0RXJyb3IgPT0gMCkgfHwgKHJlcyAhPSBOVUxMKSkgeworIAkgICAgICAgIGZwcmludGYoc3RkZXJyLAorIAkJICAgICJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZSAweCUwMlg6ICVjXG4iLAorIAkJICAgICAgICBpLCBpKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorIAllbHNlIGlmICgoaSA9PSAnPCcpIHx8IChpID09ICcmJykpIHsKKy0JICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpCisrCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKSB7CisgCSAgICAgICAgZnByaW50ZihzdGRlcnIsCisgCQkgICAgIkZhaWxlZCB0byBkZXRlY3QgaWxsZWdhbCBjaGFyICVjIGZvciBCeXRlIDB4JTAyWFxuIiwgaSwgaSk7CisrCQkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCWVsc2UgaWYgKCgoaSA8IDB4MjApIHx8IChpID49IDB4ODApKSAmJgorIAkgICAgKGkgIT0gMHg5KSAmJiAoaSAhPSAweEEpICYmIChpICE9IDB4RCkpIHsKKy0JICAgIGlmICgobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSAmJiAocmVzICE9IE5VTEwpKQorKwkgICAgaWYgKChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpICYmIChyZXMgIT0gTlVMTCkpIHsKKyAJICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAJCSAgICAiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGUgMHglMDJYXG4iLCBpKTsKKysJCQlyZXR1cm4oMSk7CisrCQl9CisgCX0KKyAJZWxzZSBpZiAocmVzID09IE5VTEwpIHsKKyAJICAgIGZwcmludGYoc3RkZXJyLAorIAkJIkZhaWxlZCB0byBwYXJzZSB2YWxpZCBjaGFyIGZvciBCeXRlIDB4JTAyWCA6ICVjXG4iLCBpLCBpKTsKKysJCXJldHVybigxKTsKKyAJfQorIAlpZiAocmVzICE9IE5VTEwpCisgCSAgICB4bWxGcmVlRG9jKHJlcyk7CisgICAgIH0KKysJcmV0dXJuKDApOworIH0KKyAKKy1zdGF0aWMgdm9pZCB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUyKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY2hhciAqZG9jdW1lbnQsCisrc3RhdGljIGludCB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUyKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY2hhciAqZG9jdW1lbnQsCisgICAgICAgICAgICAgICAgICAgaW50IGxlbiwgIGNoYXIgKmRhdGEpIHsKKyAgICAgaW50IGksIGo7CisgICAgIHhtbERvY1B0ciByZXM7CitAQCAtODAsMTAgKzg4LDEyIEBACisgCisgCS8qIGlmIGZpcnN0IGJpdCBvZiBmaXJzdCBjaGFyIGlzIHNldCwgdGhlbiBzZWNvbmQgYml0IG11c3QgdG9vICovCisgCWlmICgoaSAmIDB4ODApICYmICgoaSAmIDB4NDApID09IDApKSB7CistCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKQorKwkgICAgaWYgKChsYXN0RXJyb3IgPT0gMCkgfHwgKHJlcyAhPSBOVUxMKSkgeworIAkJZnByaW50ZihzdGRlcnIsCisgCQkiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlhcbiIsCisgCQkJaSwgaik7CisrCQlyZXR1cm4oMSk7CisrCQl9CisgCX0KKyAKKyAJLyoKK0BAIC05MSwxMCArMTAxLDEyIEBACisgCSAqIGJpdHMgbXVzdCBiZSAxMAorIAkgKi8KKyAJZWxzZSBpZiAoKGkgJiAweDgwKSAmJiAoKGogJiAweEMwKSAhPSAweDgwKSkgeworLQkgICAgaWYgKChsYXN0RXJyb3IgPT0gMCkgfHwgKHJlcyAhPSBOVUxMKSkKKysJICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpIHsKKyAJCWZwcmludGYoc3RkZXJyLAorIAkgICAgIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYXG4iLAorIAkJCWksIGopOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgCS8qCitAQCAtMTAyLDEwICsxMTQsMTIgQEAKKyAJICogdGhhbiAweDgwLCBpLmUuIG9uZSBvZiBiaXRzIDUgdG8gMSBvZiBpIG11c3QgYmUgc2V0CisgCSAqLworIAllbHNlIGlmICgoaSAmIDB4ODApICYmICgoaSAmIDB4MUUpID09IDApKSB7CistCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKQorKwkgICAgaWYgKChsYXN0RXJyb3IgPT0gMCkgfHwgKHJlcyAhPSBOVUxMKSkgeworIAkJZnByaW50ZihzdGRlcnIsCisgCSAgICAiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlhcbiIsCisgCQkJaSwgaik7CisrCQlyZXR1cm4oMSk7CisrCQl9CisgCX0KKyAKKyAJLyoKK0BAIC0xMTMsMTAgKzEyNywxMiBAQAorIAkgKiBhdCBsZWFzdCAzIGJ5dGVzLCBidXQgd2UgZ2l2ZSBvbmx5IDIgIQorIAkgKi8KKyAJZWxzZSBpZiAoKGkgJiAweEUwKSA9PSAweEUwKSB7CistCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKQorKwkgICAgaWYgKChsYXN0RXJyb3IgPT0gMCkgfHwgKHJlcyAhPSBOVUxMKSkgeworIAkJZnByaW50ZihzdGRlcnIsCisgCSAgICAiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHgwMFxuIiwKKyAJCQlpLCBqKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorIAkvKgorQEAgLTEyNSwxMSArMTQxLDEzIEBACisgCWVsc2UgaWYgKChsYXN0RXJyb3IgIT0gMCkgfHwgKHJlcyA9PSBOVUxMKSkgeworIAkgICAgZnByaW50ZihzdGRlcnIsCisgCQkiRmFpbGVkIHRvIHBhcnNlIGRvY3VtZW50IGZvciBCeXRlcyAweCUwMlggMHglMDJYXG4iLCBpLCBqKTsKKysJCXJldHVybigxKTsKKyAJfQorIAlpZiAocmVzICE9IE5VTEwpCisgCSAgICB4bWxGcmVlRG9jKHJlcyk7CisgICAgIH0KKyAgICAgfQorKwlyZXR1cm4oMCk7CisgfQorIAorIC8qKgorQEAgLTE0MSw5ICsxNTksMTAgQEAKKyAgKiBDREFUQSBpbiB0ZXh0IG9yIGluIGF0dHJpYnV0ZSB2YWx1ZXMuCisgICovCisgCistc3RhdGljIHZvaWQgdGVzdERvY3VtZW50UmFuZ2VzKHZvaWQpIHsKKytzdGF0aWMgaW50IHRlc3REb2N1bWVudFJhbmdlcyh2b2lkKSB7CisgICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dDsKKyAgICAgY2hhciAqZGF0YTsKKysgICAgaW50IHRlc3RfcmV0ID0gMDsKKyAKKyAgICAgLyoKKyAgICAgICogU2V0IHVwIGEgcGFyc2luZyBjb250ZXh0IHVzaW5nIHRoZSBmaXJzdCBkb2N1bWVudCBhcworQEAgLTE1Miw3ICsxNzEsNyBAQAorICAgICBjdHh0ID0geG1sTmV3UGFyc2VyQ3R4dCgpOworICAgICBpZiAoY3R4dCA9PSBOVUxMKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBhbGxvY2F0ZSBwYXJzZXIgY29udGV4dFxuIik7CistCXJldHVybjsKKysJcmV0dXJuKDEpOworICAgICB9CisgCisgICAgIHByaW50ZigidGVzdGluZyAxIGJ5dGUgY2hhciBpbiBkb2N1bWVudDogMSIpOworQEAgLTE2Myw3ICsxODIsNyBAQAorICAgICBkYXRhWzJdID0gJyAnOworICAgICBkYXRhWzNdID0gJyAnOworICAgICAvKiB0ZXN0IDEgYnl0ZSBpbmplY3Rpb24gYXQgYmVnaW5uaW5nIG9mIGFyZWEgKi8KKy0gICAgdGVzdERvY3VtZW50UmFuZ2VCeXRlMShjdHh0LCAmZG9jdW1lbnQxWzBdLCBzdHJsZW4oZG9jdW1lbnQxKSwKKysgICAgdGVzdF9yZXQgKz0gdGVzdERvY3VtZW50UmFuZ2VCeXRlMShjdHh0LCAmZG9jdW1lbnQxWzBdLCBzdHJsZW4oZG9jdW1lbnQxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLCAtMSwgLTEpOworICAgICBwcmludGYoIiAyIik7CisgICAgIGZmbHVzaChzdGRvdXQpOworQEAgLTE3Miw3ICsxOTEsNyBAQAorICAgICBkYXRhWzJdID0gJyAnOworICAgICBkYXRhWzNdID0gJyAnOworICAgICAvKiB0ZXN0IDEgYnl0ZSBpbmplY3Rpb24gYXQgZW5kIG9mIGFyZWEgKi8KKy0gICAgdGVzdERvY3VtZW50UmFuZ2VCeXRlMShjdHh0LCAmZG9jdW1lbnQxWzBdLCBzdHJsZW4oZG9jdW1lbnQxKSwKKysgICAgdGVzdF9yZXQgKz0gdGVzdERvY3VtZW50UmFuZ2VCeXRlMShjdHh0LCAmZG9jdW1lbnQxWzBdLCBzdHJsZW4oZG9jdW1lbnQxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhICsgMywgLTEsIC0xKTsKKyAKKyAgICAgcHJpbnRmKCIgMyIpOworQEAgLTE4Myw3ICsyMDIsNyBAQAorICAgICBkYXRhWzJdID0gJyAnOworICAgICBkYXRhWzNdID0gJyAnOworICAgICAvKiB0ZXN0IDEgYnl0ZSBpbmplY3Rpb24gYXQgYmVnaW5uaW5nIG9mIGFyZWEgKi8KKy0gICAgdGVzdERvY3VtZW50UmFuZ2VCeXRlMShjdHh0LCAmZG9jdW1lbnQyWzBdLCBzdHJsZW4oZG9jdW1lbnQyKSwKKysgICAgdGVzdF9yZXQgKz0gdGVzdERvY3VtZW50UmFuZ2VCeXRlMShjdHh0LCAmZG9jdW1lbnQyWzBdLCBzdHJsZW4oZG9jdW1lbnQyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLCAnXCcnLCAtMSk7CisgICAgIHByaW50ZigiIDQiKTsKKyAgICAgZmZsdXNoKHN0ZG91dCk7CitAQCAtMTkyLDcgKzIxMSw3IEBACisgICAgIGRhdGFbMl0gPSAnICc7CisgICAgIGRhdGFbM10gPSAnICc7CisgICAgIC8qIHRlc3QgMSBieXRlIGluamVjdGlvbiBhdCBlbmQgb2YgYXJlYSAqLworLSAgICB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDJbMF0sIHN0cmxlbihkb2N1bWVudDIpLAorKyAgICB0ZXN0X3JldCArPSB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDJbMF0sIHN0cmxlbihkb2N1bWVudDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgKyAzLCAnXCcnLCAtMSk7CisgICAgIHByaW50ZigiIGRvbmVcbiIpOworIAorQEAgLTIwNCw3ICsyMjMsNyBAQAorICAgICBkYXRhWzJdID0gJyAnOworICAgICBkYXRhWzNdID0gJyAnOworICAgICAvKiB0ZXN0IDIgYnl0ZSBpbmplY3Rpb24gYXQgYmVnaW5uaW5nIG9mIGFyZWEgKi8KKy0gICAgdGVzdERvY3VtZW50UmFuZ2VCeXRlMihjdHh0LCAmZG9jdW1lbnQxWzBdLCBzdHJsZW4oZG9jdW1lbnQxKSwKKysgICAgdGVzdF9yZXQgKz0gdGVzdERvY3VtZW50UmFuZ2VCeXRlMihjdHh0LCAmZG9jdW1lbnQxWzBdLCBzdHJsZW4oZG9jdW1lbnQxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKTsKKyAgICAgcHJpbnRmKCIgMiIpOworICAgICBmZmx1c2goc3Rkb3V0KTsKK0BAIC0yMTMsNyArMjMyLDcgQEAKKyAgICAgZGF0YVsyXSA9ICcgJzsKKyAgICAgZGF0YVszXSA9ICcgJzsKKyAgICAgLyogdGVzdCAyIGJ5dGUgaW5qZWN0aW9uIGF0IGVuZCBvZiBhcmVhICovCistICAgIHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoY3R4dCwgJmRvY3VtZW50MVswXSwgc3RybGVuKGRvY3VtZW50MSksCisrICAgIHRlc3RfcmV0ICs9IHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoY3R4dCwgJmRvY3VtZW50MVswXSwgc3RybGVuKGRvY3VtZW50MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSArIDIpOworIAorICAgICBwcmludGYoIiAzIik7CitAQCAtMjI0LDcgKzI0Myw3IEBACisgICAgIGRhdGFbMl0gPSAnICc7CisgICAgIGRhdGFbM10gPSAnICc7CisgICAgIC8qIHRlc3QgMiBieXRlIGluamVjdGlvbiBhdCBiZWdpbm5pbmcgb2YgYXJlYSAqLworLSAgICB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUyKGN0eHQsICZkb2N1bWVudDJbMF0sIHN0cmxlbihkb2N1bWVudDIpLAorKyAgICB0ZXN0X3JldCArPSB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUyKGN0eHQsICZkb2N1bWVudDJbMF0sIHN0cmxlbihkb2N1bWVudDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpOworICAgICBwcmludGYoIiA0Iik7CisgICAgIGZmbHVzaChzdGRvdXQpOworQEAgLTIzMywxNCArMjUyLDE1IEBACisgICAgIGRhdGFbMl0gPSAnICc7CisgICAgIGRhdGFbM10gPSAnICc7CisgICAgIC8qIHRlc3QgMiBieXRlIGluamVjdGlvbiBhdCBlbmQgb2YgYXJlYSAqLworLSAgICB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUyKGN0eHQsICZkb2N1bWVudDJbMF0sIHN0cmxlbihkb2N1bWVudDIpLAorKyAgICB0ZXN0X3JldCArPSB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUyKGN0eHQsICZkb2N1bWVudDJbMF0sIHN0cmxlbihkb2N1bWVudDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgKyAyKTsKKyAgICAgcHJpbnRmKCIgZG9uZVxuIik7CisgCisgICAgIHhtbEZyZWVQYXJzZXJDdHh0KGN0eHQpOworKyAgICByZXR1cm4odGVzdF9yZXQpOworIH0KKyAKKy1zdGF0aWMgdm9pZCB0ZXN0Q2hhclJhbmdlQnl0ZTEoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkYXRhKSB7Cisrc3RhdGljIGludCB0ZXN0Q2hhclJhbmdlQnl0ZTEoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkYXRhKSB7CisgICAgIGludCBpID0gMDsKKyAgICAgaW50IGxlbiwgYzsKKyAKK0BAIC0yNTUsMTkgKzI3NSwyNSBAQAorICAgICAgICAgYyA9IHhtbEN1cnJlbnRDaGFyKGN0eHQsICZsZW4pOworIAlpZiAoKGkgPT0gMCkgfHwgKGkgPj0gMHg4MCkpIHsKKyAJICAgIC8qIHdlIG11c3Qgc2VlIGFuIGVycm9yIHRoZXJlICovCistCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkgICAgICAgIGZwcmludGYoc3RkZXJyLAorIAkJICAgICJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZSAweCUwMlhcbiIsIGkpOworKwkJCXJldHVybigxKTsKKysJCX0KKyAJfSBlbHNlIGlmIChpID09IDB4RCkgeworLQkgICAgaWYgKChjICE9IDB4QSkgfHwgKGxlbiAhPSAxKSkKKysJICAgIGlmICgoYyAhPSAweEEpIHx8IChsZW4gIT0gMSkpIHsKKyAJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGNvbnZlcnQgY2hhciBmb3IgQnl0ZSAweCUwMlhcbiIsIGkpOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9IGVsc2UgaWYgKChjICE9IGkpIHx8IChsZW4gIT0gMSkpIHsKKyAJICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHBhcnNlIGNoYXIgZm9yIEJ5dGUgMHglMDJYXG4iLCBpKTsKKysJCXJldHVybigxKTsKKyAJfQorICAgICB9CisrCXJldHVybigwKTsKKyB9CisgCistc3RhdGljIHZvaWQgdGVzdENoYXJSYW5nZUJ5dGUyKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY2hhciAqZGF0YSkgeworK3N0YXRpYyBpbnQgdGVzdENoYXJSYW5nZUJ5dGUyKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY2hhciAqZGF0YSkgeworICAgICBpbnQgaSwgajsKKyAgICAgaW50IGxlbiwgYzsKKyAKK0BAIC0yODQsMTAgKzMxMCwxMiBAQAorIAorIAkgICAgLyogaWYgZmlyc3QgYml0IG9mIGZpcnN0IGNoYXIgaXMgc2V0LCB0aGVuIHNlY29uZCBiaXQgbXVzdCB0b28gKi8KKyAJICAgIGlmICgoaSAmIDB4ODApICYmICgoaSAmIDB4NDApID09IDApKSB7CistCQlpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkJaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJICAgIGZwcmludGYoc3RkZXJyLAorIAkJICAgICJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWFxuIiwKKyAJCSAgICAgICAgICAgIGksIGopOworKwkJCXJldHVybigxKTsKKysJCQl9CisgCSAgICB9CisgCisgCSAgICAvKgorQEAgLTI5NSwxMCArMzIzLDEyIEBACisgCSAgICAgKiBiaXRzIG11c3QgYmUgMTAKKyAJICAgICAqLworIAkgICAgZWxzZSBpZiAoKGkgJiAweDgwKSAmJiAoKGogJiAweEMwKSAhPSAweDgwKSkgeworLQkJaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikKKysJCWlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpIHsKKyAJCSAgICBmcHJpbnRmKHN0ZGVyciwKKyAJCSJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWDogJWRcbiIsCisgCQkgICAgICAgICAgICBpLCBqLCBjKTsKKysJCQlyZXR1cm4oMSk7CisrCQkJfQorIAkgICAgfQorIAorIAkgICAgLyoKK0BAIC0zMDYsMTAgKzMzNiwxMiBAQAorIAkgICAgICogdGhhbiAweDgwLCBpLmUuIG9uZSBvZiBiaXRzIDUgdG8gMSBvZiBpIG11c3QgYmUgc2V0CisgCSAgICAgKi8KKyAJICAgIGVsc2UgaWYgKChpICYgMHg4MCkgJiYgKChpICYgMHgxRSkgPT0gMCkpIHsKKy0JCWlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCQlpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCQkgICAgZnByaW50ZihzdGRlcnIsCisgCQkiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlg6ICVkXG4iLAorIAkJICAgICAgICAgICAgaSwgaiwgYyk7CisrCQkJcmV0dXJuKDEpOworKwkJCX0KKyAJICAgIH0KKyAKKyAJICAgIC8qCitAQCAtMzE3LDEwICszNDksMTIgQEAKKyAJICAgICAqIGF0IGxlYXN0IDMgYnl0ZXMsIGJ1dCB3ZSBnaXZlIG9ubHkgMiAhCisgCSAgICAgKi8KKyAJICAgIGVsc2UgaWYgKChpICYgMHhFMCkgPT0gMHhFMCkgeworLQkJaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikKKysJCWlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpIHsKKyAJCSAgICBmcHJpbnRmKHN0ZGVyciwKKyAJCSJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweDAwXG4iLAorIAkJICAgICAgICAgICAgaSwgaik7CisrCQkJcmV0dXJuKDEpOworKwkJCX0KKyAJICAgIH0KKyAKKyAgICAgICAgICAgICAvKgorQEAgLTMyOSw2ICszNjMsNyBAQAorIAkgICAgZWxzZSBpZiAoKGxhc3RFcnJvciAhPSAwKSB8fCAobGVuICE9IDIpKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJCSAgICAiRmFpbGVkIHRvIHBhcnNlIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlhcbiIsIGksIGopOworKwkJcmV0dXJuKDEpOworIAkgICAgfQorIAorICAgICAgICAgICAgIC8qCitAQCAtMzM4LDEyICszNzMsMTQgQEAKKyAJCWZwcmludGYoc3RkZXJyLAorIAkiRmFpbGVkIHRvIHBhcnNlIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlg6IGV4cGVjdCAlZCBnb3QgJWRcbiIsCisgCSAgICAgICAgICAgICAgICBpLCBqLCAoKGogJiAweDNGKSArICgoaSAmIDB4MUYpIDw8IDYpKSwgYyk7CisrCQlyZXR1cm4oMSk7CisgCSAgICB9CisgICAgICAgICB9CisgICAgIH0KKysJcmV0dXJuKDApOworIH0KKyAKKy1zdGF0aWMgdm9pZCB0ZXN0Q2hhclJhbmdlQnl0ZTMoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkYXRhKSB7Cisrc3RhdGljIGludCB0ZXN0Q2hhclJhbmdlQnl0ZTMoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkYXRhKSB7CisgICAgIGludCBpLCBqLCBrLCBLOworICAgICBpbnQgbGVuLCBjOworICAgICB1bnNpZ25lZCBjaGFyIGxvd3NbNl0gPSB7MCwgMHg4MCwgMHg4MSwgMHhDMSwgMHhGRiwgMHhCRn07CitAQCAtMzY4LDIwICs0MDUsMjQgQEAKKyAJICogYXQgbGVhc3QgNCBieXRlcywgYnV0IHdlIGdpdmUgb25seSAzICEKKyAJICovCisgCWlmICgoaSAmIDB4RjApID09IDB4RjApIHsKKy0JICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4JTAyWCAweCUwMlhcbiIsCisgCQkJaSwgaiwgSywgZGF0YVszXSk7CisrCQlyZXR1cm4oMSk7CisrCQl9CisgCX0KKyAKKyAgICAgICAgIC8qCisgCSAqIFRoZSBzZWNvbmQgYW5kIHRoZSB0aGlyZCBieXRlcyBtdXN0IHN0YXJ0IHdpdGggMTAKKyAJICovCisgCWVsc2UgaWYgKCgoaiAmIDB4QzApICE9IDB4ODApIHx8ICgoSyAmIDB4QzApICE9IDB4ODApKSB7CistCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJZnByaW50ZihzdGRlcnIsCisgCSJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweCUwMlhcbiIsCisgCQkJaSwgaiwgSyk7CisrCQlyZXR1cm4oMSk7CisrCQl9CisgCX0KKyAKKyAJLyoKK0BAIC0zOTAsMTAgKzQzMSwxMiBAQAorIAkgKiB0aGUgNnRoIGJ5dGUgb2YgZGF0YVsxXSBtdXN0IGJlIHNldAorIAkgKi8KKyAJZWxzZSBpZiAoKChpICYgMHhGKSA9PSAwKSAmJiAoKGogJiAweDIwKSA9PSAwKSkgeworLQkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikKKysJICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpIHsKKyAJCWZwcmludGYoc3RkZXJyLAorIAkgICAgIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4JTAyWFxuIiwKKyAJCQlpLCBqLCBLKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorICAgICAgICAgLyoKK0BAIC00MDEsMTAgKzQ0NCwxMiBAQAorIAkgKi8KKyAJZWxzZSBpZiAoKCh2YWx1ZSA+IDB4RDdGRikgJiYgKHZhbHVlIDwweEUwMDApKSB8fAorIAkgICAgICAgICAoKHZhbHVlID4gMHhGRkZEKSAmJiAodmFsdWUgPDB4MTAwMDApKSkgeworLQkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikKKysJICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpIHsKKyAJCWZwcmludGYoc3RkZXJyLAorIAkiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgMHglMDRYIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4JTAyWFxuIiwKKyAJCQl2YWx1ZSwgaSwgaiwgSyk7CisrCQlyZXR1cm4oMSk7CisrCQl9CisgCX0KKyAKKyAJLyoKK0BAIC00MTQsNiArNDU5LDcgQEAKKyAJICAgIGZwcmludGYoc3RkZXJyLAorIAkJIkZhaWxlZCB0byBwYXJzZSBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4JTAyWFxuIiwKKyAJCSAgICBpLCBqLCBLKTsKKysJCXJldHVybigxKTsKKyAJfQorIAorIAkvKgorQEAgLTQyMywxMyArNDY5LDE1IEBACisgCSAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgIkZhaWxlZCB0byBwYXJzZSBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4JTAyWDogZXhwZWN0ICVkIGdvdCAlZFxuIiwKKyAJCWksIGosIGRhdGFbMl0sIHZhbHVlLCBjKTsKKysJCXJldHVybigxKTsKKyAJfQorICAgICB9CisgICAgIH0KKyAgICAgfQorKwlyZXR1cm4oMCk7CisgfQorIAorLXN0YXRpYyB2b2lkIHRlc3RDaGFyUmFuZ2VCeXRlNCh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNoYXIgKmRhdGEpIHsKKytzdGF0aWMgaW50IHRlc3RDaGFyUmFuZ2VCeXRlNCh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNoYXIgKmRhdGEpIHsKKyAgICAgaW50IGksIGosIGssIEssIGwsIEw7CisgICAgIGludCBsZW4sIGM7CisgICAgIHVuc2lnbmVkIGNoYXIgbG93c1s2XSA9IHswLCAweDgwLCAweDgxLCAweEMxLCAweEZGLCAweEJGfTsKK0BAIC00NTgsMTAgKzUwNiwxMiBAQAorIAkgKiBhdCBsZWFzdCA1IGJ5dGVzLCBidXQgd2UgZ2l2ZSBvbmx5IDQgIQorIAkgKi8KKyAJaWYgKChpICYgMHhGOCkgPT0gMHhGOCkgeworLQkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikKKysJICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpIHsKKyAJCWZwcmludGYoc3RkZXJyLAorICAgIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4JTAyWCAweCUwMlhcbiIsCisgCQkJaSwgaiwgSywgZGF0YVszXSk7CisrCQlyZXR1cm4oMSk7CisrCQl9CisgCX0KKyAKKyAgICAgICAgIC8qCitAQCAtNDY5LDEwICs1MTksMTIgQEAKKyAJICovCisgCWVsc2UgaWYgKCgoaiAmIDB4QzApICE9IDB4ODApIHx8ICgoSyAmIDB4QzApICE9IDB4ODApIHx8CisgCSAgICAgICAgICgoTCAmIDB4QzApICE9IDB4ODApKSB7CistCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJZnByaW50ZihzdGRlcnIsCisgCSJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweCUwMlggMHglMDJYXG4iLAorIAkJCWksIGosIEssIEwpOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgCS8qCitAQCAtNDgxLDEwICs1MzMsMTIgQEAKKyAJICogdGhlIDYgb3IgNXRoIGJ5dGUgb2YgaiBtdXN0IGJlIHNldAorIAkgKi8KKyAJZWxzZSBpZiAoKChpICYgMHg3KSA9PSAwKSAmJiAoKGogJiAweDMwKSA9PSAwKSkgeworLQkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikKKysJICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpIHsKKyAJCWZwcmludGYoc3RkZXJyLAorIAkiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYIDB4JTAyWFxuIiwKKyAJCQlpLCBqLCBLLCBMKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorICAgICAgICAgLyoKK0BAIC00OTMsMTAgKzU0NywxMiBAQAorIAllbHNlIGlmICgoKHZhbHVlID4gMHhEN0ZGKSAmJiAodmFsdWUgPDB4RTAwMCkpIHx8CisgCSAgICAgICAgICgodmFsdWUgPiAweEZGRkQpICYmICh2YWx1ZSA8MHgxMDAwMCkpIHx8CisgCQkgKHZhbHVlID4gMHgxMEZGRkYpKSB7CistCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJZnByaW50ZihzdGRlcnIsCisgIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIDB4JTA0WCBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweCUwMlggMHglMDJYXG4iLAorIAkJCXZhbHVlLCBpLCBqLCBLLCBMKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorIAkvKgorQEAgLTUwNiw2ICs1NjIsNyBAQAorIAkgICAgZnByaW50ZihzdGRlcnIsCisgCQkiRmFpbGVkIHRvIHBhcnNlIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYXG4iLAorIAkJICAgIGksIGosIEspOworKwkJcmV0dXJuKDEpOworIAl9CisgCisgCS8qCitAQCAtNTE1LDExICs1NzIsMTMgQEAKKyAJICAgIGZwcmludGYoc3RkZXJyLAorICAgICAiRmFpbGVkIHRvIHBhcnNlIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYOiBleHBlY3QgJWQgZ290ICVkXG4iLAorIAkJaSwgaiwgZGF0YVsyXSwgdmFsdWUsIGMpOworKwkJcmV0dXJuKDEpOworIAl9CisgICAgIH0KKyAgICAgfQorICAgICB9CisgICAgIH0KKysJcmV0dXJuKDApOworIH0KKyAKKyAvKioKK0BAIC01MzAsMTEgKzU4OSwxMiBAQAorICAqIGNvdmVyIHRoZSBmdWxsIHJhbmdlIG9mIFVURi04IGNoYXJzIGFjY2VwdGVkIGJ5IFhNTC0xLjAKKyAgKi8KKyAKKy1zdGF0aWMgdm9pZCB0ZXN0Q2hhclJhbmdlcyh2b2lkKSB7Cisrc3RhdGljIGludCB0ZXN0Q2hhclJhbmdlcyh2b2lkKSB7CisgICAgIGNoYXIgZGF0YVs1XTsKKyAgICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0OworICAgICB4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0ciBidWY7CisgICAgIHhtbFBhcnNlcklucHV0UHRyIGlucHV0OworKyAgICBpbnQgdGVzdF9yZXQgPSAwOworIAorICAgICBtZW1zZXQoZGF0YSwgMCwgNSk7CisgCitAQCAtNTQ1LDE3ICs2MDUsMTkgQEAKKyAgICAgY3R4dCA9IHhtbE5ld1BhcnNlckN0eHQoKTsKKyAgICAgaWYgKGN0eHQgPT0gTlVMTCkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gYWxsb2NhdGUgcGFyc2VyIGNvbnRleHRcbiIpOworLQlyZXR1cm47CisrCXJldHVybigxKTsKKyAgICAgfQorICAgICBidWYgPSB4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZVN0YXRpYyhkYXRhLCBzaXplb2YoZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9DSEFSX0VOQ09ESU5HX05PTkUpOworICAgICBpZiAoYnVmID09IE5VTEwpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGFsbG9jYXRlIGlucHV0IGJ1ZmZlclxuIik7CisrICAgICAgICB0ZXN0X3JldCA9IDE7CisgCWdvdG8gZXJyb3I7CisgICAgIH0KKyAgICAgaW5wdXQgPSB4bWxOZXdJbnB1dFN0cmVhbShjdHh0KTsKKyAgICAgaWYgKGlucHV0ID09IE5VTEwpIHsKKyAgICAgICAgIHhtbEZyZWVQYXJzZXJJbnB1dEJ1ZmZlcihidWYpOworKyAgICAgICAgdGVzdF9yZXQgPSAxOworIAlnb3RvIGVycm9yOworICAgICB9CisgICAgIGlucHV0LT5maWxlbmFtZSA9IE5VTEw7CitAQCAtNTY3LDI1ICs2MjksMjggQEAKKyAKKyAgICAgcHJpbnRmKCJ0ZXN0aW5nIGNoYXIgcmFuZ2U6IDEiKTsKKyAgICAgZmZsdXNoKHN0ZG91dCk7CistICAgIHRlc3RDaGFyUmFuZ2VCeXRlMShjdHh0LCBkYXRhKTsKKysgICAgdGVzdF9yZXQgKz0gdGVzdENoYXJSYW5nZUJ5dGUxKGN0eHQsIGRhdGEpOworICAgICBwcmludGYoIiAyIik7CisgICAgIGZmbHVzaChzdGRvdXQpOworLSAgICB0ZXN0Q2hhclJhbmdlQnl0ZTIoY3R4dCwgZGF0YSk7CisrICAgIHRlc3RfcmV0ICs9IHRlc3RDaGFyUmFuZ2VCeXRlMihjdHh0LCBkYXRhKTsKKyAgICAgcHJpbnRmKCIgMyIpOworICAgICBmZmx1c2goc3Rkb3V0KTsKKy0gICAgdGVzdENoYXJSYW5nZUJ5dGUzKGN0eHQsIGRhdGEpOworKyAgICB0ZXN0X3JldCArPSB0ZXN0Q2hhclJhbmdlQnl0ZTMoY3R4dCwgZGF0YSk7CisgICAgIHByaW50ZigiIDQiKTsKKyAgICAgZmZsdXNoKHN0ZG91dCk7CistICAgIHRlc3RDaGFyUmFuZ2VCeXRlNChjdHh0LCBkYXRhKTsKKysgICAgdGVzdF9yZXQgKz0gdGVzdENoYXJSYW5nZUJ5dGU0KGN0eHQsIGRhdGEpOworICAgICBwcmludGYoIiBkb25lXG4iKTsKKyAgICAgZmZsdXNoKHN0ZG91dCk7CisgCisgZXJyb3I6CisgICAgIHhtbEZyZWVQYXJzZXJDdHh0KGN0eHQpOworKyAgICByZXR1cm4odGVzdF9yZXQpOworIH0KKyAKKyBpbnQgbWFpbih2b2lkKSB7CisgCisrICAgIGludCByZXQgPSAwOworKworICAgICAvKgorICAgICAgKiB0aGlzIGluaXRpYWxpemUgdGhlIGxpYnJhcnkgYW5kIGNoZWNrIHBvdGVudGlhbCBBQkkgbWlzbWF0Y2hlcworICAgICAgKiBiZXR3ZWVuIHRoZSB2ZXJzaW9uIGl0IHdhcyBjb21waWxlZCBmb3IgYW5kIHRoZSBhY3R1YWwgc2hhcmVkCitAQCAtNjAyLDggKzY2Nyw5IEBACisgICAgIC8qCisgICAgICAqIFJ1biB0aGUgdGVzdHMKKyAgICAgICovCistICAgIHRlc3RDaGFyUmFuZ2VzKCk7CistICAgIHRlc3REb2N1bWVudFJhbmdlcygpOworKyAgICByZXQgKz0gdGVzdENoYXJSYW5nZXMoKTsKKysgICAgcmV0ICs9IHRlc3REb2N1bWVudFJhbmdlcygpOworKyAgICBwcmludGYoIiVzOiB0ZXN0Y2hhclxuXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKyAKKyAgICAgLyoKKyAgICAgICogQ2xlYW51cCBmdW5jdGlvbiBmb3IgdGhlIFhNTCBsaWJyYXJ5LgorZGlmZiAtdU5yIGEvdGVzdGRpY3QuYyBiL3Rlc3RkaWN0LmMKKy0tLSBhL3Rlc3RkaWN0LmMJMjAxMy0wNC0xNiAxNTowODo0Mi45NzExNzcxOTMgKzAyMDAKKysrKyBiL3Rlc3RkaWN0LmMJMjAxMy0wNC0xOCAxNTo1OTowMC42OTk0ODI0MzkgKzAyMDAKK0BAIC00NDAsNSArNDQwLDYgQEAKKyAgICAgY2xlYW5fc3RyaW5ncygpOworICAgICB4bWxDbGVhbnVwUGFyc2VyKCk7CisgICAgIHhtbE1lbW9yeUR1bXAoKTsKKysgICAgcHJpbnRmKCIlczogdGVzdGRpY3RcblxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisgICAgIHJldHVybihyZXQpOworIH0KK2RpZmYgLXVOciBhL3Rlc3RsaW1pdHMuYyBiL3Rlc3RsaW1pdHMuYworLS0tIGEvdGVzdGxpbWl0cy5jCTIwMTMtMDQtMTIgMTY6MTY6MzYuMTgwMzU0MTc3ICswMjAwCisrKysgYi90ZXN0bGltaXRzLmMJMjAxMy0wNC0xNyAxNDowMzoxNy4yMDMwOTI5ODcgKzAyMDAKK0BAIC0xNjMwLDUgKzE2MzAsNiBAQAorICAgICB4bWxDbGVhbnVwUGFyc2VyKCk7CisgICAgIHhtbE1lbW9yeUR1bXAoKTsKKyAKKysgICAgcHJpbnRmKCIlczogdGVzdGxpbWl0c1xuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisgICAgIHJldHVybihyZXQpOworIH0KK2RpZmYgLXVOciBhL3Rlc3RyZWN1cnNlLmMgYi90ZXN0cmVjdXJzZS5jCistLS0gYS90ZXN0cmVjdXJzZS5jCTIwMTMtMDQtMTYgMTM6MTk6NDkuMzY2NTM2Mjk1ICswMjAwCisrKysgYi90ZXN0cmVjdXJzZS5jCTIwMTMtMDQtMTcgMTQ6MDY6MjcuMzY3MDkxNjIyICswMjAwCitAQCAtODkyLDYgKzg5Miw3IEBACisgCSAgICBlcnIrKzsKKyAJfQorICAgICB9CisrICAgIHByaW50ZigiJXM6ICVzXG4iLCAoZXJyID09IDApID8gIlBBU1MiIDogIkZBSUwiLCB0c3QtPmRlc2MpOworICAgICByZXR1cm4oZXJyKTsKKyB9CisgCitAQCAtOTYxLDUgKzk2Miw2IEBACisgICAgIHhtbENsZWFudXBQYXJzZXIoKTsKKyAgICAgeG1sTWVtb3J5RHVtcCgpOworIAorKyAgICBwcmludGYoIiVzOiB0ZXN0cmVjdXJzZVxuXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKyAgICAgcmV0dXJuKHJldCk7CisgfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMl8yLjkuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDJfMi45LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlhMzk1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDJfMi45LjIuYmIKQEAgLTAsMCArMSwxMSBAQAorcmVxdWlyZSBsaWJ4bWwyLmluYworCitTUkNfVVJJICs9ICJodHRwOi8vd3d3LnczLm9yZy9YTUwvVGVzdC94bWx0czIwMDgwODI3LnRhci5nejtuYW1lPXRlc3R0YXIgXAorICAgICAgICAgICAgZmlsZTovLzcyYTQ2YTUxOWNlNzMyNmQ5YTAwZjBiNmE3ZjJhOGU5NThjZDE2NzUucGF0Y2ggXAorCSAgICBmaWxlOi8vMDAwMS10aHJlYWRzLURlZmluZS1wdGhyZWFkLWRlZmluaXRpb25zLWZvci1nbGliYy1jb21wbGlhLnBhdGNoIFwKKwkgICAiCisKK1NSQ19VUklbbGlidGFyLm1kNXN1bV0gPSAiOWU2YTlhY2E5ZDE1NTczNzg2OGIzZGM1ZmQ4MmY3ODgiCitTUkNfVVJJW2xpYnRhci5zaGEyNTZzdW1dID0gIjUxNzhjMzBiMTUxZDA0NGFlZmIxYjA4YmY1NGMzMDAzYTBhYzU1YzU5Yzg2Njc2Mzk5NzUyOWQ2MDc3MGQ1YmMiCitTUkNfVVJJW3Rlc3R0YXIubWQ1c3VtXSA9ICJhZTNkMWViZTAwMGEzOTcyYWZhMTA0Y2E3ZjBlMWI0YSIKK1NSQ19VUklbdGVzdHRhci5zaGEyNTZzdW1dID0gIjk2MTUxNjg1Y2VjOTk3ZTFmOWYzMzg3ZTM2MjZkNjFlNjI4NGQ0ZDZlNjZlMGU0NDBjMjA5Mjg2YzAzZTljYzciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvYnVpbGR0b29scy10YXJiYWxsLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL2J1aWxkdG9vbHMtdGFyYmFsbC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDA0MzRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL2J1aWxkdG9vbHMtdGFyYmFsbC5iYgpAQCAtMCwwICsxLDU5IEBACitERVNDUklQVElPTiA9ICJTREsgdHlwZSB0YXJnZXQgZm9yIGJ1aWxkaW5nIGEgc3RhbmRhbG9uZSB0YXJiYWxsIGNvbnRhaW5pbmcgcHl0aG9uLCBjaHJwYXRoLCBtYWtlLCBnaXQgYW5kIHRhci4gVGhlIFwKKyAgICAgICAgICAgICAgIHRhcmJhbGwgY2FuIGJlIHVzZWQgdG8gcnVuIGJpdGJha2UgYnVpbGRzIG9uIHN5c3RlbXMgd2hpY2ggZG9uJ3QgbWVldCB0aGUgdXN1YWwgdmVyc2lvbiByZXF1aXJlbWVudHMuIgorU1VNTUFSWSA9ICJTdGFuZGFsb25lIHRhcmJhbGwgZm9yIHJ1bm5pbmcgYnVpbGRzIG9uIHN5c3RlbXMgd2l0aCBpbmFkZXF1YXRlIHNvZnR3YXJlIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworVE9PTENIQUlOX1RBUkdFVF9UQVNLID89ICIiCisKK1RPT0xDSEFJTl9IT1NUX1RBU0sgPz0gIlwKKyAgICBuYXRpdmVzZGstcHl0aG9uLWNvcmUgXAorICAgIG5hdGl2ZXNkay1weXRob24tbW9kdWxlcyBcCisgICAgbmF0aXZlc2RrLXB5dGhvbi1taXNjIFwKKyAgICBuYXRpdmVzZGstcHl0aG9uLWdpdCBcCisgICAgbmF0aXZlc2RrLXB5dGhvbi1wZXhwZWN0IFwKKyAgICBuYXRpdmVzZGstbmN1cnNlcy10ZXJtaW5mby1iYXNlIFwKKyAgICBuYXRpdmVzZGstY2hycGF0aCBcCisgICAgbmF0aXZlc2RrLXRhciBcCisgICAgbmF0aXZlc2RrLWJ1aWxkdG9vbHMtcGVybC1kdW1teSBcCisgICAgbmF0aXZlc2RrLWdpdCBcCisgICAgbmF0aXZlc2RrLWdpdC1wZXJsdG9vbHMgXAorICAgIG5hdGl2ZXNkay1waWd6IFwKKyAgICBuYXRpdmVzZGstbWFrZSBcCisgICAgbmF0aXZlc2RrLXdnZXQgXAorICAgIG5hdGl2ZXNkay1jYS1jZXJ0aWZpY2F0ZXMgXAorICAgICIKKworU0RLX1BBQ0tBR0VfQVJDSFMgPSsgImJ1aWxkdG9vbHMtZHVtbXktJHtTREtQS0dTVUZGSVh9IgorCitUT09MQ0hBSU5fT1VUUFVUTkFNRSA/PSAiJHtTREtfTkFNRX0tYnVpbGR0b29scy1uYXRpdmVzZGstc3RhbmRhbG9uZS0ke0RJU1RST19WRVJTSU9OfSIKKworU0RLX1RJVExFID0gIkJ1aWxkIHRvb2xzIgorCitSREVQRU5EUyA9ICIke1RPT0xDSEFJTl9IT1NUX1RBU0t9IgorCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKKworaW5oZXJpdCBtZXRhCitpbmhlcml0IHBvcHVsYXRlX3NkaworaW5oZXJpdCB0b29sY2hhaW4tc2NyaXB0cworCitjcmVhdGVfc2RrX2ZpbGVzX2FwcGVuZCAoKSB7CisJcm0gLWYgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L3NpdGUtY29uZmlnLSoKKwlybSAtZiAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vZW52aXJvbm1lbnQtc2V0dXAtKgorCXJtIC1mICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS92ZXJzaW9uLSoKKworCSMgR2VuZXJhdGUgbmV3IChtaW5pKSBzZGstZW52aXJvbm1lbnQtc2V0dXAgZmlsZQorCXNjcmlwdD0kezE6LSR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS9lbnZpcm9ubWVudC1zZXR1cC0ke1NES19TWVN9fQorCXRvdWNoICRzY3JpcHQKKwllY2hvICdleHBvcnQgUEFUSD0ke1NES1BBVEhOQVRJVkV9JHtiaW5kaXJfbmF0aXZlc2RrfTokUEFUSCcgPj4gJHNjcmlwdAorCSMgSW4gb3JkZXIgZm9yIHRoZSBzZWxmLWV4dHJhY3Rpb24gc2NyaXB0IHRvIGNvcnJlY3RseSBleHRyYWN0IGFuZCBzZXQgdXAgdGhpbmdzLAorCSMgd2UgbmVlZCBhICdPRUNPUkVfTkFUSVZFX1NZU1JPT1Q9eHh4JyBsaW5lIGluIGVudmlyb25tZW50IHNldHVwIHNjcmlwdC4KKwkjIEhvd2V2ZXIsIGJ1aWxkdG9vbHMtdGFyYmFsbCBpcyBpbmhlcmVudGx5IGEgdG9vbCBzZXQgaW5zdGVhZCBvZiBhIGZ1bGx5IGZ1bmN0aW9uYWwgU0RLLAorCSMgc28gaW5zdGVhZCBvZiBleHBvcnRpbmcgdGhlIHZhcmlhYmxlLCB3ZSB1c2UgYSBjb21tZW50IGhlcmUuCisJZWNobyAnI09FQ09SRV9OQVRJVkVfU1lTUk9PVD0iJHtTREtQQVRITkFUSVZFfSInID4+ICRzY3JpcHQKKwl0b29sY2hhaW5fY3JlYXRlX3Nka192ZXJzaW9uICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS92ZXJzaW9uLSR7U0RLX1NZU30KKworCWVjaG8gJ2V4cG9ydCBHSVRfU1NMX0NBSU5GTz0iJHtTREtQQVRITkFUSVZFfSR7c3lzY29uZmRpcn0vc3NsL2NlcnRzL2NhLWNlcnRpZmljYXRlcy5jcnQiJyA+PiRzY3JpcHQKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLWVudmlyb25tZW50LWV4dHNkay5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLWVudmlyb25tZW50LWV4dHNkay5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWU1OTYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtZW52aXJvbm1lbnQtZXh0c2RrLmJiCkBAIC0wLDAgKzEsMTIgQEAKKyMgbWV0YS1lbnZpcm9ubWVudCBmb3IgZXh0ZW5zaWJsZSBTREsKKworcmVxdWlyZSBtZXRhLWVudmlyb25tZW50LmJiCisKK1BOID0gIm1ldGEtZW52aXJvbm1lbnQtZXh0c2RrLSR7TUFDSElORX0iCisKK2NyZWF0ZV9zZGtfZmlsZXNfYXBwZW5kKCkgeworCWxvY2FsIHN5c3Jvb3Q9JHtTREtQQVRIfS8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ1NUQUdJTkdfRElSX1RBUkdFVCcsIFRydWUpLCBkLmdldFZhcignVE9QRElSJywgVHJ1ZSkpfQorCWxvY2FsIHNka3BhdGhuYXRpdmU9JHtTREtQQVRIfS8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ1NUQUdJTkdfRElSX05BVElWRScsVHJ1ZSksIGQuZ2V0VmFyKCdUT1BESVInLCBUcnVlKSl9CisKKwl0b29sY2hhaW5fY3JlYXRlX3Nka19lbnZfc2NyaXB0ICcnICcnICRzeXNyb290ICcnICR7YmluZGlyX25hdGl2ZX0gJHtwcmVmaXhfbmF0aXZlfSAkc2RrcGF0aG5hdGl2ZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtZW52aXJvbm1lbnQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS1lbnZpcm9ubWVudC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWQ0NWY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtZW52aXJvbm1lbnQuYmIKQEAgLTAsMCArMSw3NSBAQAorU1VNTUFSWSA9ICJQYWNrYWdlIG9mIGVudmlyb25tZW50IGZpbGVzIGZvciBTREsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKK0xJQ0VOU0UgPSAiTUlUIgorUFIgPSAicjgiCisKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgorCitNT0RJRllUT1MgPSAiMCIKKworUkVBTF9NVUxUSU1BQ0hfVEFSR0VUX1NZUyA9ICIke1RVTkVfUEtHQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfSIKKworaW5oZXJpdCB0b29sY2hhaW4tc2NyaXB0cworVE9PTENIQUlOX05FRURfQ09ORklHU0lURV9DQUNIRV9hcHBlbmQgPSAiIHpsaWIiCisKK1NES19ESVIgPSAiJHtXT1JLRElSfS9zZGsiCitTREtfT1VUUFVUID0gIiR7U0RLX0RJUn0vaW1hZ2UiCitTREtUQVJHRVRTWVNST09UID0gIiR7U0RLUEFUSH0vc3lzcm9vdHMvJHtSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTfSIKKworaW5oZXJpdCBjcm9zcy1jYW5hZGlhbgorCitkb19nZW5lcmF0ZV9jb250ZW50W2NsZWFuZGlyc10gPSAiJHtTREtfT1VUUFVUfSIKK2RvX2dlbmVyYXRlX2NvbnRlbnRbZGlyc10gPSAiJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9IgorcHl0aG9uIGRvX2dlbmVyYXRlX2NvbnRlbnQoKSB7CisgICAgIyBIYW5kbGUgbXVsdGlsaWJzIGluIHRoZSBTREsgZW52aXJvbm1lbnQsIHNpdGVjb25maWcsIGV0YyBmaWxlcy4uLgorICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorCisgICAgIyBtYWtlIHN1cmUgd2Ugb25seSB1c2UgdGhlIFdPUktESVIgdmFsdWUgZnJvbSAnZCcsIG9yIGl0IGNhbiBjaGFuZ2UKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdXT1JLRElSJywgZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSkKKworICAgICMgbWFrZSBzdXJlIHdlIG9ubHkgdXNlIHRoZSBTREtUQVJHRVRTWVNST09UIHZhbHVlIGZyb20gJ2QnCisgICAgbG9jYWxkYXRhLnNldFZhcignU0RLVEFSR0VUU1lTUk9PVCcsIGQuZ2V0VmFyKCdTREtUQVJHRVRTWVNST09UJywgVHJ1ZSkpCisgICAgbG9jYWxkYXRhLnNldFZhcignbGliZGlyJywgZC5nZXRWYXIoJ3RhcmdldF9saWJkaXInLCBGYWxzZSkpCisKKyAgICAjIFByb2Nlc3MgREVGQVVMVFRVTkUKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoImNyZWF0ZV9zZGtfZmlsZXMiLCBsb2NhbGRhdGEpCisKKyAgICB2YXJpYW50cyA9IGQuZ2V0VmFyKCJNVUxUSUxJQl9WQVJJQU5UUyIsIFRydWUpIG9yICIiCisgICAgZm9yIGl0ZW0gaW4gdmFyaWFudHMuc3BsaXQoKToKKyAgICAgICAgIyBMb2FkIG92ZXJyaWRlcyBmcm9tICdkJyB0byBhdm9pZCBoYXZpbmcgdG8gcmVzZXQgdGhlIHZhbHVlLi4uCisgICAgICAgIG92ZXJyaWRlcyA9IGQuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyAiOnZpcnRjbGFzcy1tdWx0aWxpYi0iICsgaXRlbQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBvdmVycmlkZXMpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIk1MUFJFRklYIiwgaXRlbSArICItIikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiY3JlYXRlX3Nka19maWxlcyIsIGxvY2FsZGF0YSkKK30KK2FkZHRhc2sgZ2VuZXJhdGVfY29udGVudCBiZWZvcmUgZG9faW5zdGFsbCBhZnRlciBkb19jb21waWxlCisKK2NyZWF0ZV9zZGtfZmlsZXMoKSB7CisJIyBTZXR1cCBzaXRlIGZpbGUgZm9yIGV4dGVybmFsIHVzZQorCXRvb2xjaGFpbl9jcmVhdGVfc2RrX3NpdGVjb25maWcgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L3NpdGUtY29uZmlnLSR7UkVBTF9NVUxUSU1BQ0hfVEFSR0VUX1NZU30KKworCXRvb2xjaGFpbl9jcmVhdGVfc2RrX2Vudl9zY3JpcHQgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L2Vudmlyb25tZW50LXNldHVwLSR7UkVBTF9NVUxUSU1BQ0hfVEFSR0VUX1NZU30KKworCSMgQWRkIHZlcnNpb24gaW5mb3JtYXRpb24KKwl0b29sY2hhaW5fY3JlYXRlX3Nka192ZXJzaW9uICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS92ZXJzaW9uLSR7UkVBTF9NVUxUSU1BQ0hfVEFSR0VUX1NZU30KK30KKworZG9faW5zdGFsbCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0vJHtTREtQQVRIfQorICAgIGluc3RhbGwgLW0gMDY0NCAtdCAke0R9LyR7U0RLUEFUSH0gJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9LyoKK30KKworUE4gPSAibWV0YS1lbnZpcm9ubWVudC0ke01BQ0hJTkV9IgorUEFDS0FHRVMgPSAiJHtQTn0iCitGSUxFU18ke1BOfT0gIiBcCisgICAgJHtTREtQQVRIfS8qIFwKKyAgICAiCisKK2RvX2ZldGNoW25vZXhlY10gPSAiMSIKK2RvX3VucGFja1tub2V4ZWNdID0gIjEiCitkb19wYXRjaFtub2V4ZWNdID0gIjEiCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgorZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCitkb19wb3B1bGF0ZV9zeXNyb290W25vZXhlY10gPSAiMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLWlkZS1zdXBwb3J0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtaWRlLXN1cHBvcnQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY5MjkxMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLWlkZS1zdXBwb3J0LmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCBzdXBwb3J0IgorREVTQ1JJUFRJT04gPSAiTWV0YSBwYWNrYWdlIGZvciBlbnN1cmluZyB0aGUgYnVpbGQgZGlyZWN0b3J5IGNvbnRhaW5zIGFsbCBhcHByb3ByaWF0ZSB0b29sY2hhaW4gcGFja2FnZXMgZm9yIHVzaW5nIGFuIElERSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK0RFUEVORFMgPSAidmlydHVhbC9saWJjIGdkYi1jcm9zcy0ke1RBUkdFVF9BUkNIfSBxZW11LW5hdGl2ZSBxZW11LWhlbHBlci1uYXRpdmUgdW5mczMtbmF0aXZlIgorUFIgPSAicjMiCisKK2luaGVyaXQgbWV0YSB0b29sY2hhaW4tc2NyaXB0cworCitkb19wb3B1bGF0ZV9pZGVfc3VwcG9ydCAoKSB7CisgIHRvb2xjaGFpbl9jcmVhdGVfdHJlZV9lbnZfc2NyaXB0Cit9CisKK2RvX3BvcHVsYXRlX2lkZV9zdXBwb3J0W25vc3RhbXBdID0gIjEiCithZGR0YXNrIHBvcHVsYXRlX2lkZV9zdXBwb3J0IGJlZm9yZSBkb19idWlsZCBhZnRlciBkb19pbnN0YWxsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS10b29sY2hhaW4uYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS10b29sY2hhaW4uYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE5ZmQ4OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLXRvb2xjaGFpbi5iYgpAQCAtMCwwICsxLDkgQEAKK1NVTU1BUlkgPSAiTWV0YSBwYWNrYWdlIGZvciBidWlsZGluZyBhIGluc3RhbGxhYmxlIHRvb2xjaGFpbiIKK0xJQ0VOU0UgPSAiTUlUIgorCitQUiA9ICJyNyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK2luaGVyaXQgcG9wdWxhdGVfc2RrCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbmF0aXZlc2RrLWJ1aWxkdG9vbHMtcGVybC1kdW1teS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9uYXRpdmVzZGstYnVpbGR0b29scy1wZXJsLWR1bW15LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NzFjM2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbmF0aXZlc2RrLWJ1aWxkdG9vbHMtcGVybC1kdW1teS5iYgpAQCAtMCwwICsxLDE5IEBACitTVU1NQVJZID0gIkR1bW15IHBhY2thZ2Ugd2hpY2ggZW5zdXJlcyBwZXJsIGlzIGV4Y2x1ZGVkIGZyb20gYnVpbGR0b29scyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT01NT05fTElDRU5TRV9ESVJ9L01JVDttZDU9MDgzNWFkZTY5OGUwYmNmODUwNmVjZGEyZjdiNGYzMDIiCisKK2luaGVyaXQgbmF0aXZlc2RrCisKKyMgUHV0IGl0IHNvbWV3aGVyZSBzZXBhcmF0ZSB0byBlbnN1cmUgaXQncyBuZXZlciB1c2VkIGV4Y2VwdCB3aGVuIHdlIHdhbnQgaXQKK1BBQ0tBR0VfQVJDSCA9ICJidWlsZHRvb2xzLWR1bW15LSR7U0RLUEtHU1VGRklYfSIKKworUEVSTFBBQ0tBR0VTID0gIm5hdGl2ZXNkay1wZXJsIFwKKyAgICAgICAgICAgICAgICBuYXRpdmVzZGstcGVybC1tb2R1bGUtZmlsZS1wYXRoIgorCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCgpIHsKKyAgICBkLmFwcGVuZFZhcignUlBST1ZJREVTXyR7UE59JywgJyR7UEVSTFBBQ0tBR0VTfScpCisgICAgZC5hcHBlbmRWYXIoJ1JDT05GTElDVFNfJHtQTn0nLCAnJHtQRVJMUEFDS0FHRVN9JykKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL3BhY2thZ2UtaW5kZXguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvcGFja2FnZS1pbmRleC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzQ2YjQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL3BhY2thZ2UtaW5kZXguYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJSZWJ1aWxkcyB0aGUgcGFja2FnZSBpbmRleCIKK0xJQ0VOU0UgPSAiTUlUIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorUEFDS0FHRVMgPSAiIgorCitkb19mZXRjaFtub2V4ZWNdID0gIjEiCitkb191bnBhY2tbbm9leGVjXSA9ICIxIgorZG9fcGF0Y2hbbm9leGVjXSA9ICIxIgorZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorZG9faW5zdGFsbFtub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2VkYXRhW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW25vZXhlY10gPSAiMSIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbbm9leGVjXSA9ICIxIgorCitkb19wYWNrYWdlX2luZGV4W25vc3RhbXBdID0gIjEiCitkb19wYWNrYWdlX2luZGV4W2RlcGVuZHNdICs9ICIke1BBQ0tBR0VJTkRFWERFUFN9IgorCitweXRob24gZG9fcGFja2FnZV9pbmRleCgpIHsKKyAgICBmcm9tIG9lLnJvb3RmcyBpbXBvcnQgZ2VuZXJhdGVfaW5kZXhfZmlsZXMKKyAgICBnZW5lcmF0ZV9pbmRleF9maWxlcyhkKQorfQorYWRkdGFzayBkb19wYWNrYWdlX2luZGV4IGJlZm9yZSBkb19idWlsZAorRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvdW5pbmF0aXZlLXRhcmJhbGwuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvdW5pbmF0aXZlLXRhcmJhbGwuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFmNzkyNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS91bmluYXRpdmUtdGFyYmFsbC5iYgpAQCAtMCwwICsxLDUwIEBACitTVU1NQVJZID0gImxpYmMgYW5kIHBhdGNoZWxmIHRhcmJhbGwgZm9yIHVzZSB3aXRoIHVuaW5hdGl2ZS5iYmNsYXNzIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworVE9PTENIQUlOX1RBUkdFVF9UQVNLID0gIiIKKworVE9PTENIQUlOX0hPU1RfVEFTSyA9ICJcCisgICAgbmF0aXZlc2RrLWdsaWJjIFwKKyAgICBuYXRpdmVzZGstcGF0Y2hlbGYgXAorICAgICIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworVE9PTENIQUlOX09VVFBVVE5BTUUgPz0gIiR7QlVJTERfQVJDSH0tbmF0aXZlc2RrLWxpYmMiCisKK1JERVBFTkRTID0gIiR7VE9PTENIQUlOX0hPU1RfVEFTS30iCisKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgorCitpbmhlcml0IG1ldGEKK2luaGVyaXQgcG9wdWxhdGVfc2RrCisKK2RlbHRhc2sgaW5zdGFsbAorZGVsdGFzayBwYWNrYWdlCitkZWx0YXNrIHBhY2thZ2VkYXRhCisKK1NES19ERVBFTkRTICs9ICJwYXRjaGVsZi1uYXRpdmUiCisKK1NES19QQUNLQUdJTkdfRlVOQyA9ICIiCisKK2Zha2Vyb290IGNyZWF0ZV9zZGtfZmlsZXMoKSB7CisJY3AgJHtDT1JFQkFTRX0vc2NyaXB0cy9yZWxvY2F0ZV9zZGsucHkgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9LworCisJIyBSZXBsYWNlIHRoZSAjI0RFRkFVTFRfSU5TVEFMTF9ESVIjIyB3aXRoIHRoZSBjb3JyZWN0IHBhdHRlcm4uCisJIyBFc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzIGxpa2UgJysnIGFuZCAnLicgaW4gdGhlIFNES1BBVEgKKwllc2NhcGVkX3Nka3BhdGg9JChlY2hvICR7U0RLUEFUSH0vc3lzcm9vdHMvJHtTREtfU1lTfSB8c2VkIC1lICJzOltcK1wuXTpcXFxcXFxcXFwwOmciKQorCXNlZCAtaSAtZSAiczojI0RFRkFVTFRfSU5TVEFMTF9ESVIjIzokZXNjYXBlZF9zZGtwYXRoOiIgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L3JlbG9jYXRlX3Nkay5weQorfQorCisKK2Zha2Vyb290IHRhcl9zZGsoKSB7CisJbWtkaXIgLXAgJHtTREtfREVQTE9ZfQorCWNkICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfQorCW12IHN5c3Jvb3RzLyR7U0RLX1NZU30gLi8ke0JVSUxEX1NZU30KKwlybSBzeXNyb290cyAtcmYKKwlwYXRjaGVsZiAtLXNldC1pbnRlcnByZXRlciAke0AnJy5qb2luKCdhJyBmb3IgbiBpbiB4cmFuZ2UoMTAyNCkpfSAuLyR7QlVJTERfU1lTfS91c3IvYmluL3BhdGNoZWxmCisJbXYgLi8ke0JVSUxEX1NZU30vdXNyL2Jpbi9wYXRjaGVsZiAuLyR7QlVJTERfU1lTfS91c3IvYmluL3BhdGNoZWxmLXVuaW5hdGl2ZQorCXRhciAke1NES1RBUk9QVFN9IC1jIC1qIC0tZmlsZT0ke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnRhci5iejIgLgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXMtNS45L2NvbmZpZy5jYWNoZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9uY3Vyc2VzLTUuOS9jb25maWcuY2FjaGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE5MjE3ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9uY3Vyc2VzLTUuOS9jb25maWcuY2FjaGUKQEAgLTAsMCArMSw0IEBACisjISAvYmluL3NoCisKK2NmX2N2X2Z1bmNfbmFub3NsZWVwPXllcworY2ZfY3ZfZnVuY19ta3N0ZW1wPXllcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXMtNS45L3RpYy1oYW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXMtNS45L3RpYy1oYW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYTg5ZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlcy01LjkvdGljLWhhbmcucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCisndGljJyBvZiBzb21lIGxpbnV4IGRpc3RyaWJ1dGlvbnMgKGUuZy4gZmVkb3JhIDExKSBoYW5nIGluIGFuIGluZmluaXRlCitsb29wIHdoZW4gcHJvY2Vzc2luZyB0aGUgb3JpZ2luYWwgZmlsZS4KKworSW5kZXg6IG5jdXJzZXMtNS43L21pc2MvdGVybWluZm8uc3JjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbmN1cnNlcy01Ljcub3JpZy9taXNjL3Rlcm1pbmZvLnNyYworKysrIG5jdXJzZXMtNS43L21pc2MvdGVybWluZm8uc3JjCitAQCAtMzcwNiwxMiArMzcwNiwxMSBAQCBrb25zb2xlLXhmM3h8S0RFIGNvbnNvbGUgd2luZG93IHdpdGgga2V5CisgIyBUaGUgdmFsdWUgZm9yIGticyByZWZsZWN0cyBsb2NhbCBjdXN0b21pemF0aW9uIHJhdGhlciB0aGFuIHRoZSBzZXR0aW5ncyB1c2VkCisgIyBmb3IgWEZyZWU4NiB4dGVybS4KKyBrb25zb2xlLXhmNHh8S0RFIGNvbnNvbGUgd2luZG93IHdpdGgga2V5Ym9hcmQgZm9yIFhGcmVlODYgNC54IHh0ZXJtLAorLQlrZW5kPVxFT0YsIGtob21lPVxFT0gsIHVzZT1rb25zb2xlK3BjZmtleXMsCistCXVzZT1rb25zb2xlLXZ0MTAwLAorLSMgS29uc29sZSBkb2VzIG5vdCBpbXBsZW1lbnQgc2hpZnRlZCBjdXJzb3Ita2V5cy4KKy1rb25zb2xlK3BjZmtleXN8a29uc29sZSBzdWJzZXQgb2YgeHRlcm0rcGNma2V5cywKKy0Ja0xGVEAsIGtSSVRALCBrY2J0PVxFW1osIGtpbmRALCBrcmlALCBrRE5ALCBrVVBALCB1c2U9eHRlcm0rcGNjMiwKKy0JdXNlPXh0ZXJtK3BjZjAsCisrCWtlbmQ9XEVPRiwga2YxPVxFT1AsIGtmMTM9XEVPMlAsIGtmMTQ9XEVPMlEsIGtmMTU9XEVPMlIsCisrCWtmMTY9XEVPMlMsIGtmMTc9XEVbMTU7Mn4sIGtmMTg9XEVbMTc7Mn4sIGtmMTk9XEVbMTg7Mn4sCisrCWtmMj1cRU9RLCBrZjIwPVxFWzE5OzJ+LCBrZjIxPVxFWzIwOzJ+LCBrZjIyPVxFWzIxOzJ+LAorKwlrZjIzPVxFWzIzOzJ+LCBrZjI0PVxFWzI0OzJ+LCBrZjM9XEVPUiwga2Y0PVxFT1MsCisrCWtob21lPVxFT0gsIHVzZT1rb25zb2xlLXZ0MTAwLAorICMgS0RFJ3MgInZ0MTAwIiBrZXlib2FyZCBoYXMgbm8gcmVsYXRpb25zaGlwIHRvIGFueSB0ZXJtaW5hbCB0aGF0IERFQyBtYWRlLCBidXQKKyAjIGl0IGlzIHN0aWxsIHVzZWZ1bCBmb3IgZGVyaXZpbmcgdGhlIG90aGVyIGVudHJpZXMuCisga29uc29sZS12dDEwMHxLREUgY29uc29sZSB3aW5kb3cgd2l0aCB2dDEwMCAoc2ljKSBrZXlib2FyZCwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9uY3Vyc2VzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9uY3Vyc2VzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmQ4MGVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXMuaW5jCkBAIC0wLDAgKzEsMzA2IEBACitTVU1NQVJZID0gIlRoZSBOZXcgQ3Vyc2VzIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJTVnI0IGFuZCBYU0ktQ3Vyc2VzIGNvbXBhdGlibGUgY3Vyc2VzIGxpYnJhcnkgYW5kIHRlcm1pbmZvIHRvb2xzIGluY2x1ZGluZyB0aWMsIGluZm9jbXAsIGNhcHRvaW5mby4gU3VwcG9ydHMgY29sb3IsIG11bHRpcGxlIGhpZ2hsaWdodHMsIGZvcm1zLWRyYXdpbmcgY2hhcmFjdGVycywgYW5kIGF1dG9tYXRpYyByZWNvZ25pdGlvbiBvZiBrZXlwYWQgYW5kIGZ1bmN0aW9uLWtleSBzZXF1ZW5jZXMuIEV4dGVuc2lvbnMgaW5jbHVkZSByZXNpemFibGUgd2luZG93cyBhbmQgbW91c2Ugc3VwcG9ydCBvbiBib3RoIHh0ZXJtIGFuZCBMaW51eCBjb25zb2xlIHVzaW5nIHRoZSBncG0gbGlicmFyeS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbmN1cnNlcy9uY3Vyc2VzLmh0bWwiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL25jdXJzZXMvYmFzZS92ZXJzaW9uLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yNzttZDU9Y2JjMTgwYThjNDRjYTY0MmU5N2MzNTQ1MmZhYjVmNjYiCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gIm5jdXJzZXMtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiIgorSU5DX1BSID0gInIxNSIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9uY3Vyc2VzLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIG11bHRpbGliX2hlYWRlciBwa2djb25maWcKKworIyBVcHN0cmVhbSBoYXMgdXNlZnVsIHBhdGNoZXMgYXQgdGltZXMgYXQgZnRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvbmN1cnNlcy8KK1NSQ19VUkkgPSAiZnRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvJHtCUE59L2N1cnJlbnQvJHtCUH0tJHtSRVZJU0lPTn0udGd6IgorCitFWFRSQV9BVVRPUkVDT05GID0gIi1JIG00IgorQ09ORklHX1NJVEUgPSsgIiR7V09SS0RJUn0vY29uZmlnLmNhY2hlIgorCisjIFdoZXRoZXIgdG8gZW5hYmxlIHNlcGFyYXRlIHdpZGVjIGxpYnJhcmllczsgbXVzdCBiZSAndHJ1ZScgb3IgJ2ZhbHNlJworIworIyBUT0RPOiByZW1vdmUgdGhpcyB2YXJpYWJsZSB3aGVuIHdpZGVjIGlzIHN1cHBvcnRlZCBpbiBldmVyeSBzZXR1cD8KK0VOQUJMRV9XSURFQyA/PSAidHJ1ZSIKKworIyBfR05VX1NPVVJDRSBpcyByZXF1aXJlZCBmb3Igd2lkZWMgc3R1ZmYgYW5kIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHkKKyMgZm9yIHRhcmdldCBvYmplY3RzLiAgQnV0IGl0IG11c3QgYmUgc2V0IG1hbnVhbGx5IGZvciBuYXRpdmUgYW5kIHNkaworIyBidWlsZHMuCitCVUlMRF9DUFBGTEFHUyArPSAiLURfR05VX1NPVVJDRSIKKworIyBuYXRpdmVzIGRvbid0IGdlbmVyYWxseSBsb29rIGluIGJhc2VfbGliZGlyCitiYXNlX2xpYmRpcl9jbGFzcy1uYXRpdmUgPSAiJHtsaWJkaXJ9IgorCisjIERpc3BsYXkgY29ycnVwdGlvbiBvY2N1cnMgb24gNjQgYml0IGhvc3RzIHdpdGhvdXQgdGhlc2Ugc2V0dGluZ3MKKyMgVGhpcyB3YXMgZGVycml2ZWQgZnJvbSB0aGUgdXBzdHJlYW0gZGViaWFuIG5jdXJzZXMgd2hpY2ggdXNlcworIyB0aGVzZSBzZXR0aW5ncyBmb3IgMzIgYW5kIDY0IGJpdCBob3N0cy4KK0VYQ09ORklHX0FSR1MgPSAiIgorRVhDT05GSUdfQVJHU19jbGFzcy1uYXRpdmUgPSAiIFwKKwkJLS1kaXNhYmxlLWxwNjQgXAorCQktLXdpdGgtY2h0eXBlPSdsb25nJyBcCisJCS0td2l0aC1tbWFzay10PSdsb25nJyIKK0VYQ09ORklHX0FSR1NfY2xhc3MtbmF0aXZlc2RrID0gIiBcCisJCS0tZGlzYWJsZS1scDY0IFwKKwkJLS13aXRoLWNodHlwZT0nbG9uZycgXAorCQktLXdpdGgtbW1hc2stdD0nbG9uZyciCisKK1BBQ0tBR0VTX0RZTkFNSUMgPSAiXiR7UE59LWxpYi4qIgorCisjIEZhbGwgYmFjayB0byB0aGUgaG9zdCB0ZXJtY2FwIC8gdGVybWluZm8gZm9yIC1uYXRpdmVzZGsgYW5kIC1uYXRpdmUKKyMgVGhlIHJlYWxpdHkgaXMgYSB3b3JrIGFyb3VuZCBmb3Igc3RyYW5nZSBwcm9ibGVtcyB3aXRoIHRoaW5ncyBsaWtlCisjICJiaXRiYWtlIC1jIG1lbnVjb25maWcgYnVzeWJveCIgd2hlcmUgaXQgY2Fubm90IGZpbmQgdGhlIHRlcm1pbmZvCisjIGJlY2F1c2UgdGhlIHNzdGF0ZSBoYWQgYSBoYXJkIGNvZGVkIHNlYXJjaCBwYXRoLiAgVW50aWwgdGhpcyBpcyBmaXhlZAorIyBhbm90aGVyIHdheSB0aGlzIGlzIGRlZW1lZCBnb29kIGVub3VnaC4KK0VYX1RFUk1DQVAgPSAiIgorRVhfVEVSTUNBUF9jbGFzcy1uYXRpdmUgPSAiOi9ldGMvdGVybWNhcDovdXNyL3NoYXJlL21pc2MvdGVybWNhcCIKK0VYX1RFUk1DQVBfY2xhc3MtbmF0aXZlc2RrID0gIjovZXRjL3Rlcm1jYXA6L3Vzci9zaGFyZS9taXNjL3Rlcm1jYXAiCitFWF9URVJNSU5GTyA9ICIiCitFWF9URVJNSU5GT19jbGFzcy1uYXRpdmUgPSAiOi9ldGMvdGVybWluZm86L3Vzci9zaGFyZS90ZXJtaW5mbzovdXNyL3NoYXJlL21pc2MvdGVybWluZm86L2xpYi90ZXJtaW5mbyIKK0VYX1RFUk1JTkZPX2NsYXNzLW5hdGl2ZXNkayA9ICI6L2V0Yy90ZXJtaW5mbzovdXNyL3NoYXJlL3Rlcm1pbmZvOi91c3Ivc2hhcmUvbWlzYy90ZXJtaW5mbzovbGliL3Rlcm1pbmZvIgorCisjIEhlbHBlciBmdW5jdGlvbiBmb3IgZG9fY29uZmlndXJlIHRvIGFsbG93IG11bHRpcGxlIGNvbmZpZ3VyYXRpb25zCisjICQxIHRoZSBkaXJlY3RvcnkgdG8gcnVuIGNvbmZpZ3VyZSBpbgorIyAkQCB0aGUgYXJndW1lbnRzIHRvIHBhc3MgdG8gY29uZmlndXJlCituY3Vyc2VzX2NvbmZpZ3VyZSgpIHsKKwlta2RpciAtcCAkMQorCWNkICQxCisJc2hpZnQKKwlvZV9ydW5jb25mIFwKKwkgICAgICAgIC0tZGlzYWJsZS1zdGF0aWMgXAorCSAgICAgICAgLS13aXRob3V0LWRlYnVnIFwKKwkgICAgICAgIC0td2l0aG91dC1hZGEgXAorCSAgICAgICAgLS13aXRob3V0LWdwbSBcCisJICAgICAgICAtLWVuYWJsZS1oYXJkLXRhYnMgXAorCSAgICAgICAgLS1lbmFibGUteG1jLWdsaXRjaCBcCisJICAgICAgICAtLWVuYWJsZS1jb2xvcmZnYmcgXAorCSAgICAgICAgLS13aXRoLXRlcm1wYXRoPScke3N5c2NvbmZkaXJ9L3Rlcm1jYXA6JHtkYXRhZGlyfS9taXNjL3Rlcm1jYXAke0VYX1RFUk1DQVB9JyBcCisJICAgICAgICAtLXdpdGgtdGVybWluZm8tZGlycz0nJHtzeXNjb25mZGlyfS90ZXJtaW5mbzoke2RhdGFkaXJ9L3Rlcm1pbmZvJHtFWF9URVJNSU5GT30nIFwKKwkgICAgICAgIC0td2l0aC1zaGFyZWQgXAorCSAgICAgICAgLS1kaXNhYmxlLWJpZy1jb3JlIFwKKwkgICAgICAgIC0tcHJvZ3JhbS1wcmVmaXg9IFwKKwkgICAgICAgIC0td2l0aC10aWNsaWIgXAorCSAgICAgICAgLS13aXRoLXRlcm1saWI9dGluZm8gXAorCSAgICAgICAgLS1lbmFibGUtc2lnd2luY2ggXAorCSAgICAgICAgLS1lbmFibGUtcGMtZmlsZXMgXAorCSAgICAgICAgLS1kaXNhYmxlLXJwYXRoLWhhY2sgXAorCQkke0VYQ09ORklHX0FSR1N9IFwKKwkgICAgICAgIC0td2l0aC1tYW5wYWdlLWZvcm1hdD1ub3JtYWwgXAorCSAgICAgICAgIiRAIiB8fCByZXR1cm4gMQorCWNkIC4uCit9CisKKyMgT3ZlcnJpZGUgdGhlIGZ1bmN0aW9uIGZyb20gdGhlIGF1dG90b29scyBjbGFzczsgbmN1cnNlcyByZXF1aXJlcyBhCisjIHBhdGNoZWQgYXV0b2NvbmYyMTMgdG8gZ2VuZXJhdGUgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuIFRoaXMgYXV0b2NvbmYKKyMgaXMgbm90IGF2YWlsYWJsZSBzbyB0aGF0IHRoZSBzaGlwcGVkIHNjcmlwdCB3aWxsIGJlIHVzZWQuCitkb19jb25maWd1cmUoKSB7CisgICAgICAgICMgY2hlY2sgZG9lcyBub3Qgd29yayB3aXRoIGNyb3NzLWNvbXBpbGluZyBhbmQgaXMgZ2VuZXJhbGx5CisgICAgICAgICMgYnJva2VuIGJlY2F1c2UgaXQgcmVxdWlyZXMgc3RkaW4gdG8gYmUgcG9sbGFibGUgKHdoaWNoIGlzCisgICAgICAgICMgbm90IHRoZSBjYXNlIGZvciAvZGV2L251bGwgcmVkaXJlY3Rpb25zKQorICAgICAgICBleHBvcnQgY2ZfY3Zfd29ya2luZ19wb2xsPXllcworCSNSZW1vdmUgJHtpbmNsdWRlZGlyfSBmcm9tIENQUEZMQUdTLCBuZWVkIGZvciBjcm9zcyBjb21waWxlCisJc2VkIC1pICdzIy1JJHtjZl9pbmNsdWRlZGlyfSMjZycgJHtTfS9jb25maWd1cmUgfHwgZGllICJzZWQgQ1BQRkxBR1MiCisKKwkjIFRoZSAtLWVuYWJsZS1wYy1maWxlcyByZXF1aXJlcyBQS0dfQ09ORklHX0xJQkRJUiBleGlzdGVkCisJbWtkaXIgLXAgJHtQS0dfQ09ORklHX0xJQkRJUn0KKwkoIGNkICR7U307IGdudS1jb25maWdpemUgLS1mb3JjZSApCisJbmN1cnNlc19jb25maWd1cmUgIm5hcnJvd2MiIHx8IFwKKwkJcmV0dXJuIDEKKwkhICR7RU5BQkxFX1dJREVDfSB8fCBcCisJCW5jdXJzZXNfY29uZmlndXJlICJ3aWRlYyIgIi0tZW5hYmxlLXdpZGVjIiAiLS13aXRob3V0LXByb2dzIgorCit9CisKK2RvX2NvbXBpbGUoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgLUMgbmFycm93YyBsaWJzCisgICAgICAgIG9lX3J1bm1ha2UgLUMgbmFycm93Yy9wcm9ncworCisgICAgICAgICEgJHtFTkFCTEVfV0lERUN9IHx8IFwKKyAgICAgICAgICAgIG9lX3J1bm1ha2UgLUMgd2lkZWMgbGlicworfQorCisjIHNldCBvZiBleHBlY3RlZCBkaWZmZXJlbmNlcyBiZXR3ZWVuIG5hcnJvd2MgYW5kIHdpZGVjIGhlYWRlcgorIworIyBUT0RPOiB0aGUgTkNVUlNFU19DSF9UIGRpZmZlcmVuY2UgY2FuIGNhdXNlIHJlYWwgcHJvYmxlbXMgOigKK191bmlmZGVmX2NsZWFudXAgPSAiIFwKKyAgLWUgJ1whL1wqIFwkSWQ6IGN1cnNlcy53aWRlLHYhLFwhL1wqIFwkSWQ6IGN1cnNlcy50YWlsLHYhZCcgXAorICAtZSAnL14jZGVmaW5lIE5DVVJTRVNfQ0hfVCAvZCcgXAorICAtZSAnL14jaW5jbHVkZSA8d2NoYXIuaD4vZCcgXAorICAtZSAnXCFeL1wqIC4qIFwqLyFkJyBcCisiCisKK2RvX3Rlc3RbZGVwZW5kc10gPSAidW5pZmRlZi1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK2RvX3Rlc3RbZGlyc10gPSAiJHtTfSIKK2RvX3Rlc3QoKSB7CisgICAgICAgICR7RU5BQkxFX1dJREVDfSB8fCByZXR1cm4gMAorCisgICAgICAgICMgbWFrZSBzdXJlIHRoYXQgdGhlIG5hcnJvdyBhbmQgd2lkZWMgaGVhZGVyIGFyZSBjb21wYXRpYmxlCisgICAgICAgICMgYW5kIGRpZmZlciBvbmx5IGluIG1pbm9yIGRldGFpbHMuCisgICAgICAgIHVuaWZkZWYgLWsgbmFycm93Yy9pbmNsdWRlL2N1cnNlcy5oIHwgXAorICAgICAgICAgICAgc2VkICR7X3VuaWZkZWZfY2xlYW51cH0gPiBjdXJzZXMtbmFycm93Yy5oCisgICAgICAgIHVuaWZkZWYgLWsgd2lkZWMvaW5jbHVkZS9jdXJzZXMuaCB8IFwKKyAgICAgICAgICAgIHNlZCAke191bmlmZGVmX2NsZWFudXB9ID4gY3Vyc2VzLXdpZGVjLmgKKworICAgICAgICBkaWZmIGN1cnNlcy1uYXJyb3djLmggY3Vyc2VzLXdpZGVjLmgKK30KKworIyBTcGxpdCBvcmlnaW5hbCBfaW5zdGFsbF9vcHRzIHRvIHR3byBwYXJ0cy4KKyMgT25lIGlzIHRoZSBvcHRpb25zIHRvIGluc3RhbGwgY29udGVudHMsIHRoZSBvdGhlciBpcyB0aGUgcGFyYW1ldGVycyBcCisjIHdoZW4gcnVubmluZyBjb21tYW5kICJtYWtlIGluc3RhbGwiCitfaW5zdGFsbF9vcHRzID0gIlwKKyAgaW5zdGFsbC5saWJzIGluc3RhbGwuaW5jbHVkZXMgaW5zdGFsbC5tYW4gXAorIgorX2luc3RhbGxfY2ZncyA9ICJcCisgIERFU1RESVI9JyR7RH0nIFwKKyAgUEtHX0NPTkZJR19MSUJESVI9JyR7bGliZGlyfS9wa2djb25maWcnIFwKKyIKKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgIyBPcmRlciBvZiBpbnN0YWxsYXRpb24gaXMgaW1wb3J0YW50OyB3aWRlYyBpbnN0YWxscyBhICdjdXJzZXMuaCcKKyAgICAgICAgIyBoZWFkZXIgd2l0aCBtb3JlIGRlZmluaXRpb25zIGFuZCBtdXN0IGJlIGluc3RhbGxlZCBsYXN0IGhlbmNlLgorICAgICAgICAjIENvbXBhdGliaWxpdHkgb2YgdGhlc2UgaGVhZGVycyB3aWxsIGJlIGNoZWNrZWQgaW4gJ2RvX3Rlc3QoKScuCisgICAgICAgIG9lX3J1bm1ha2UgLUMgbmFycm93YyAke19pbnN0YWxsX2NmZ3N9ICR7X2luc3RhbGxfb3B0c30gXAorICAgICAgICAgICAgICAgIGluc3RhbGwucHJvZ3MKKworICAgICAgICAjIFRoZSBpbnN0YWxsLmRhdGEgc2hvdWxkIHJ1biBhZnRlciBpbnN0YWxsLmxpYnMsIG90aGVyd2lzZQorICAgICAgICAjIHRoZXJlIHdvdWxkIGJlIGEgcmFjZSBpc3N1ZSBpbiBhIHZlcnkgY3JpdGljYWwgY29uZGl0b24sIHNpbmNlCisgICAgICAgICMgdGljIHdpbGwgYmUgcnVuIGJ5IGluc3RhbGwuZGF0YSwgYW5kIHRpYyBuZWVkcyBsaWJ0aW5mby5zbworICAgICAgICAjIHdoaWNoIHdvdWxkIGJlIHJlZ2VuZXJhdGVkIGJ5IGluc3RhbGwubGlicy4KKyAgICAgICAgb2VfcnVubWFrZSAtQyBuYXJyb3djICR7X2luc3RhbGxfY2Znc30gXAorICAgICAgICAgICAgICAgIGluc3RhbGwuZGF0YQorCisKKyAgICAgICAgISAke0VOQUJMRV9XSURFQ30gfHwgXAorICAgICAgICAgICAgb2VfcnVubWFrZSAtQyB3aWRlYyAke19pbnN0YWxsX2NmZ3N9ICR7X2luc3RhbGxfb3B0c30KKworICAgICAgICBjZCBuYXJyb3djCisKKyAgICAgICAgIyBpbmNsdWRlIHNvbWUgYmFzaWMgdGVybWluZm8gZmlsZXMKKyAgICAgICAgIyBzdG9sZW4gOykgZnJvbSBnZW50b28gYW5kIG1vZGlmaWVkIGEgYml0CisgICAgICAgIGZvciB4IGluIGFuc2kgY29uc29sZSBkdW1iIGxpbnV4IHJ4dnQgc2NyZWVuIHNjcmVlbi0yNTZjb2xvciBzdW4gdnQ1MiB2dDEwMCB2dDEwMiB2dDIwMCB2dDIyMCB4dGVybS1jb2xvciB4dGVybS14ZnJlZTg2IHh0ZXJtLTI1NmNvbG9yCisgICAgICAgIGRvCisgICAgICAgICAgICAgICAgbG9jYWwgdGVybWZpbGU9IiQoZmluZCAiJHtEfSR7ZGF0YWRpcn0vdGVybWluZm8vIiAtbmFtZSAiJHt4fSIgMj4vZGV2L251bGwpIgorICAgICAgICAgICAgICAgIGxvY2FsIGJhc2VkaXI9IiQoYmFzZW5hbWUgJChkaXJuYW1lICIke3Rlcm1maWxlfSIpKSIKKworICAgICAgICAgICAgICAgIGlmIFsgLW4gIiR7dGVybWZpbGV9IiBdCisgICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS90ZXJtaW5mby8ke2Jhc2VkaXJ9CisgICAgICAgICAgICAgICAgICAgICAgICBtdiAke3Rlcm1maWxlfSAke0R9JHtzeXNjb25mZGlyfS90ZXJtaW5mby8ke2Jhc2VkaXJ9LworICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXMgL2V0Yy90ZXJtaW5mby8ke2Jhc2VkaXJ9LyR7eH0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0R9JHtkYXRhZGlyfS90ZXJtaW5mby8ke2Jhc2VkaXJ9LyR7eH0KKyAgICAgICAgICAgICAgICBmaQorICAgICAgICBkb25lCisgICAgICAgICMgaSB0aGluayB3ZSBjYW4gdXNlIHh0ZXJtLWNvbG9yIGFzIGRlZmF1bHQgeHRlcm0KKyAgICAgICAgaWYgWyAtZSAke0R9JHtzeXNjb25mZGlyfS90ZXJtaW5mby94L3h0ZXJtLWNvbG9yIF0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIGxuIC1zZiB4dGVybS1jb2xvciAke0R9JHtzeXNjb25mZGlyfS90ZXJtaW5mby94L3h0ZXJtCisgICAgICAgIGZpCisKKyAgICAgICAgcm0gLWYgJHtEfSR7bGliZGlyfS90ZXJtaW5mbworCisgICAgICAgICMgY3JlYXRlIGxpbmtlciBzY3JpcHRzIGZvciBsaWJjdXJzZXMuc28gYW5kIGxpYm5jdXJzZXMgdG8KKyAgICAgICAgIyBsaW5rIGFnYWluc3QgLWx0aW5mbyB3aGVuIG5lZWRlZC4gU29tZSBidWlsZHMgbWlnaHQgYnJlYWsKKyAgICAgICAgIyBlbHNlIHdoZW4gJy1XbCwtLW5vLWNvcHktZHQtbmVlZGVkLWVudHJpZXMnIGhhcyBiZWVuIHNldCBpbgorICAgICAgICAjIGxpbmtlciBmbGFncy4KKyAgICAgICAgZm9yIGkgaW4gbGlibmN1cnNlcyBsaWJuY3Vyc2VzdzsgZG8KKyAgICAgICAgICAgICAgICBmPSR7RH0ke2xpYmRpcn0vJGkuc28KKyAgICAgICAgICAgICAgICB0ZXN0IC1oICRmIHx8IGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcm0gLWYgJGYKKyAgICAgICAgICAgICAgICBlY2hvICcvKiBHTlUgbGQgc2NyaXB0ICovJyAgPiRmCisgICAgICAgICAgICAgICAgZWNobyAiSU5QVVQoJGkuc28uNSBBU19ORUVERUQoLWx0aW5mbykpIiA+PiRmCisgICAgICAgIGRvbmUKKworICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IGxpYmN1cnNlcyBpcyBsaW5rZWQgc28gdGhhdCBpdCBnZXRzIC1sdGluZm8KKyAgICAgICAgIyBhbHNvLCB0aGlzIHNob3VsZCBiZSBhZGRyZXNzZWQgdXBzdHJlYW0gcmVhbGx5LgorICAgICAgICBsbiAtc2YgbGlibmN1cnNlcy5zbyAke0R9JHtsaWJkaXJ9L2xpYmN1cnNlcy5zbworCisgICAgICAgICMgY3JlYXRlIGxpYnRlcm1jYXAuc28gbGlua2VyIHNjcmlwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eQorICAgICAgICBmPSR7RH0ke2xpYmRpcn0vbGlidGVybWNhcC5zbworICAgICAgICBlY2hvICcvKiBHTlUgbGQgc2NyaXB0ICovJyA+JGYKKyAgICAgICAgZWNobyAnSU5QVVQoQVNfTkVFREVEKC1sdGluZm8pKScgPj4kZgorCisgICAgICAgIGlmIFsgISAtZCAiJHtEfSR7YmFzZV9saWJkaXJ9IiBdOyB0aGVuCisgICAgICAgICAgICAjIFNldHRpbmcgYmFzZV9saWJkaXIgdG8gbGliZGlyIGFzIGlzIGRvbmUgaW4gdGhlIC1uYXRpdmUKKyAgICAgICAgICAgICMgY2FzZSB3aWxsIHNraXAgdGhpcyBjb2RlCisgICAgICAgICAgICBta2RpciAke0R9JHtiYXNlX2xpYmRpcn0KKyAgICAgICAgICAgIG12ICR7RH0ke2xpYmRpcn0vbGlibmN1cnNlcy5zby4qICR7RH0ke2Jhc2VfbGliZGlyfQorICAgICAgICAgICAgISAke0VOQUJMRV9XSURFQ30gfHwgXAorICAgICAgICAgICAgICAgIG12ICR7RH0ke2xpYmRpcn0vbGlibmN1cnNlc3cuc28uKiAke0R9JHtiYXNlX2xpYmRpcn0KKworICAgICAgICAgICAgbXYgJHtEfSR7bGliZGlyfS9saWJ0aW5mby5zby4qICR7RH0ke2Jhc2VfbGliZGlyfQorICAgICAgICAgICAgcm0gJHtEfSR7bGliZGlyfS9saWJ0aW5mby5zbworCisgICAgICAgICAgICAjIFVzZSBsbnIgdG8gZW5zdXJlIHRoaXMgaXMgYSByZWxhdGl2ZSBsaW5rIGRlc3BpdGUgYWJzb2x1dGUgcGF0aHMKKyAgICAgICAgICAgICMgKGFzIHdlIGNhbid0IGtub3cgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGJhc2VfbGliZGlyIGFuZCBsaWJkaXIpLgorICAgICAgICAgICAgIyBBdCBzb21lIHBvaW50IHdlIGNhbiByZWx5IG9uIGNvcmV1dGlscyA4LjE2IHdoaWNoIGhhcyBsbiAtci4KKyAgICAgICAgICAgIGxuciAke0R9JHtiYXNlX2xpYmRpcn0vbGlidGluZm8uc28uNSAke0R9JHtsaWJkaXJ9L2xpYnRpbmZvLnNvCisgICAgICAgIGZpCisgICAgICAgIGlmIFsgLWQgIiR7RH0ke2luY2x1ZGVkaXJ9L25jdXJzZXMiIF07IHRoZW4KKyAgICAgICAgICAgIGZvciBmIGluIGBmaW5kICR7RH0ke2luY2x1ZGVkaXJ9L25jdXJzZXMgLW5hbWUgIiouaCJgCisgICAgICAgICAgICBkbworCSAgICAgICAgZj1gYmFzZW5hbWUgJGZgCisJICAgICAgICB0ZXN0IC1lICR7RH0ke2luY2x1ZGVkaXJ9LyRmICYmIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbG4gLXNmIG5jdXJzZXMvJGYgJHtEfSR7aW5jbHVkZWRpcn0vJGYKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKyAgICAgICAgb2VfbXVsdGlsaWJfaGVhZGVyIGN1cnNlcy5oCit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBsaWJkaXIgPSBkLmV4cGFuZCgiJHtsaWJkaXJ9IikKKyAgICBiYXNlX2xpYmRpciA9IGQuZXhwYW5kKCIke2Jhc2VfbGliZGlyfSIpCisgICAgcG5iYXNlID0gZC5leHBhbmQoIiR7UE59LWxpYiVzIikKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWJkaXIsICdebGliKC4qKVwuc29cLi4qJywgcG5iYXNlLCAnbmN1cnNlcyAlcyBsaWJyYXJ5JywgcHJlcGVuZD1UcnVlLCBleHRyYV9kZXBlbmRzID0gJycsIGFsbG93X2xpbmtzPVRydWUpCisgICAgaWYgbGliZGlyIGlzIG5vdCBiYXNlX2xpYmRpcjoKKyAgICAgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgYmFzZV9saWJkaXIsICdebGliKC4qKVwuc29cLi4qJywgcG5iYXNlLCAnbmN1cnNlcyAlcyBsaWJyYXJ5JywgcHJlcGVuZD1UcnVlLCBleHRyYV9kZXBlbmRzID0gJycsIGFsbG93X2xpbmtzPVRydWUpCit9CisKKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQUxURVJOQVRJVkVfbmN1cnNlcy10b29sc19jbGFzcy10YXJnZXQgPSAiY2xlYXIgcmVzZXQiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworUEFDS0FHRVMgKz0gIiBcCisgICR7UE59LXRvb2xzIFwKKyAgJHtQTn0tdGVybWluZm8gXAorICAke1BOfS10ZXJtaW5mby1iYXNlIFwKKyIKKworRklMRVNfJHtQTn0gPSAiXAorICAke2JpbmRpcn0vdHB1dCBcCisgICR7YmluZGlyfS90c2V0IFwKKyAgJHtiaW5kaXJ9L25jdXJzZXM1LWNvbmZpZyBcCisgICR7YmluZGlyfS9uY3Vyc2VzdzUtY29uZmlnIFwKKyAgJHtkYXRhZGlyfS90YWJzZXQgXAorIgorCisjIFRoaXMga2VlcHMgb25seSB0cHV0L3RzZXQgaW4gbmN1cnNlcworIyBjbGVhci9yZXNldCBhcmUgaW4gYWxyZWFkeSBidXN5Ym94CitGSUxFU18ke1BOfS10b29scyA9ICJcCisgICR7YmluZGlyfS90aWMgXAorICAke2JpbmRpcn0vdG9lIFwKKyAgJHtiaW5kaXJ9L2luZm90b2NhcCBcCisgICR7YmluZGlyfS9jYXB0b2luZm8gXAorICAke2JpbmRpcn0vaW5mb2NtcCBcCisgICR7YmluZGlyfS9jbGVhciR7QFsnJywgJy4ke0JQTlx4N2QnXVsnJHtDTEFTU09WRVJSSURFfScgPT0gJ2NsYXNzLXRhcmdldCddfSBcCisgICR7YmluZGlyfS9yZXNldCR7QFsnJywgJy4ke0JQTlx4N2QnXVsnJHtDTEFTU09WRVJSSURFfScgPT0gJ2NsYXNzLXRhcmdldCddfSBcCisgICR7YmluZGlyfS90YWNrIFwKKyAgJHtiaW5kaXJ9L3RhYnMgXAorIgorCisjICdyZXNldCcgaXMgYSBzeW1saW5rIHRvICd0c2V0JyB3aGljaCBpcyBpbiB0aGUgJ25jdXJzZXMnIHBhY2thZ2UKK1JERVBFTkRTXyR7UE59LXRvb2xzID0gIiR7UE59IgorCitGSUxFU18ke1BOfS10ZXJtaW5mbyA9ICJcCisgICR7ZGF0YWRpcn0vdGVybWluZm8gXAorIgorCitGSUxFU18ke1BOfS10ZXJtaW5mby1iYXNlID0gIlwKKyAgJHtzeXNjb25mZGlyfS90ZXJtaW5mbyBcCisiCisKK1JTVUdHRVNUU18ke1BOfS1saWJ0aW5mbyA9ICIke1BOfS10ZXJtaW5mbyIKK1JSRUNPTU1FTkRTXyR7UE59LWxpYnRpbmZvID0gIiR7UE59LXRlcm1pbmZvLWJhc2UiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlc181LjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlc181LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRkMjdhOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9uY3Vyc2VzXzUuOS5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIG5jdXJzZXMuaW5jCisKK1JFVklTSU9OID0gIjIwMTUwMzI5IgorCitQUiA9ICIke0lOQ19QUn0uMSIKKworU1JDX1VSSSArPSAiZmlsZTovL3RpYy1oYW5nLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9jb25maWcuY2FjaGUgXAorIgorUyA9ICIke1dPUktESVJ9LyR7QlB9LSR7UkVWSVNJT059IgorU1JDX1VSSVttZDVzdW1dID0gImNlZTk5MWQwOWU2OWU2MGViZWRlZjQyNDgwNGM1MmQ0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjViNjRmNDBlNGRjZTczZTNhYTgzZDE1YmQ5MjU3YzZlZmY4NzkwZWM0MTE1MGYwOTM4YmQ4N2MwZWI3NTgyOGYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvc2l0ZV9jb25maWcvaGVhZGVycyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9zaXRlX2NvbmZpZy9oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4N2I3YmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvc2l0ZV9jb25maWcvaGVhZGVycwpAQCAtMCwwICsxLDUgQEAKK2N1cnNlcy5oCituY3Vyc2VzL2N1cnNlcy5oCituY3Vyc2VzLmgKK25jdXJzZXMvdGVybWNhcC5oCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmV0YmFzZS9uZXRiYXNlL2hvc3RzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uZXRiYXNlL25ldGJhc2UvaG9zdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYzMzI0NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmV0YmFzZS9uZXRiYXNlL2hvc3RzCkBAIC0wLDAgKzEsMiBAQAorMTI3LjAuMC4xCWxvY2FsaG9zdC5sb2NhbGRvbWFpbgkJbG9jYWxob3N0CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmV0YmFzZS9uZXRiYXNlL25ldGJhc2UtYWRkLXJwY2JpbmQtYXMtYW4tYWxpYXMtdG8tc3VucnBjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uZXRiYXNlL25ldGJhc2UvbmV0YmFzZS1hZGQtcnBjYmluZC1hcy1hbi1hbGlhcy10by1zdW5ycGMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVjZTIxZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmV0YmFzZS9uZXRiYXNlL25ldGJhc2UtYWRkLXJwY2JpbmQtYXMtYW4tYWxpYXMtdG8tc3VucnBjLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK25ldGJhc2U6IGFkZCBycGNiaW5kIGFzIGFuIGFsaWFzIHRvIHN1bnJwYworCit0aGUgcGF0Y2ggY29tZXMgZnJvbToKK2h0dHBzOi8vYnVncy5hcmNobGludXgub3JnL3Rhc2svMjAyNzMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IExpIFdhbmcgPGxpLndhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGV0Yy1ycGMgICAgICB8ICAgIDIgKy0KKyBldGMtc2VydmljZXMgfCAgICA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2V0Yy1ycGMgYi9ldGMtcnBjCitpbmRleCAxYjMwNjI1Li45YTlhODFhIDEwMDY0NAorLS0tIGEvZXRjLXJwYworKysrIGIvZXRjLXJwYworQEAgLTEsNyArMSw3IEBACisgIyBUaGlzIGZpbGUgY29udGFpbnMgdXNlciByZWFkYWJsZSBuYW1lcyB0aGF0IGNhbiBiZSB1c2VkIGluIHBsYWNlIG9mIHJwYworICMgcHJvZ3JhbSBudW1iZXJzLgorIAorLXBvcnRtYXBwZXIJMTAwMDAwCXBvcnRtYXAgc3VucnBjCisrcG9ydG1hcHBlcgkxMDAwMDAJcG9ydG1hcCBzdW5ycGMgcnBjYmluZAorIHJzdGF0ZAkJMTAwMDAxCXJzdGF0IHJzdGF0X3N2YyBydXAgcGVyZm1ldGVyCisgcnVzZXJzZAkJMTAwMDAyCXJ1c2VycworIG5mcwkJMTAwMDAzCW5mc3Byb2cKK2RpZmYgLS1naXQgYS9ldGMtc2VydmljZXMgYi9ldGMtc2VydmljZXMKK2luZGV4IDlkNjRhNTIuLmExOWY3YzggMTAwNjQ0CistLS0gYS9ldGMtc2VydmljZXMKKysrKyBiL2V0Yy1zZXJ2aWNlcworQEAgLTcyLDggKzcyLDggQEAgcG9wMgkJMTA5L3RjcAkJcG9zdG9mZmljZSBwb3AtMiAjIFBPUCB2ZXJzaW9uIDIKKyBwb3AyCQkxMDkvdWRwCQlwb3AtMgorIHBvcDMJCTExMC90Y3AJCXBvcC0zCQkjIFBPUCB2ZXJzaW9uIDMKKyBwb3AzCQkxMTAvdWRwCQlwb3AtMworLXN1bnJwYwkJMTExL3RjcAkJcG9ydG1hcHBlcgkjIFJQQyA0LjAgcG9ydG1hcHBlcgorLXN1bnJwYwkJMTExL3VkcAkJcG9ydG1hcHBlcgorK3N1bnJwYwkJMTExL3RjcAkJcG9ydG1hcHBlciBycGNiaW5kCSMgUlBDIDQuMCBwb3J0bWFwcGVyCisrc3VucnBjCQkxMTEvdWRwCQlwb3J0bWFwcGVyIHJwY2JpbmQKKyBhdXRoCQkxMTMvdGNwCQlhdXRoZW50aWNhdGlvbiB0YXAgaWRlbnQKKyBzZnRwCQkxMTUvdGNwCisgdXVjcC1wYXRoCTExNy90Y3AKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25ldGJhc2UvbmV0YmFzZV81LjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25ldGJhc2UvbmV0YmFzZV81LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NkODlmZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmV0YmFzZS9uZXRiYXNlXzUuMy5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIkJhc2ljIFRDUC9JUCBuZXR3b3JraW5nIHN1cHBvcnQiCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIG5lY2Vzc2FyeSBpbmZyYXN0cnVjdHVyZSBmb3IgYmFzaWMgVENQL0lQIGJhc2VkIG5ldHdvcmtpbmciCitIT01FUEFHRSA9ICJodHRwOi8vcGFja2FnZXMuZGViaWFuLm9yZy9uZXRiYXNlIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RlYmlhbi9jb3B5cmlnaHQ7bWQ1PTNkZDYxOTJkMzA2ZjU4MmRlZTc2ODdkYTNkODc0OGFiIgorUEUgPSAiMSIKKworU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vbi9uZXRiYXNlL25ldGJhc2VfJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL25ldGJhc2UtYWRkLXJwY2JpbmQtYXMtYW4tYWxpYXMtdG8tc3VucnBjLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2hvc3RzIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjYzN2EyN2ZkM2RlMDJhMjc4ZDJiNWJlN2U2NTU4YzEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODFmNmM2OTc5NTA0NGQ2MmI4YWQ5NTljZjlkYWYwNDlkMDU0NWZkNDY2YzUyODYwYWQzZjkzM2IxZTk3Yjg4YiIKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7bWFuZGlyfS9tYW44ICR7RH0ke3N5c2NvbmZkaXJ9CisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vaG9zdHMgJHtEfSR7c3lzY29uZmRpcn0vaG9zdHMKKwlpbnN0YWxsIC1tIDA2NDQgZXRjLXJwYyAke0R9JHtzeXNjb25mZGlyfS9ycGMKKwlpbnN0YWxsIC1tIDA2NDQgZXRjLXByb3RvY29scyAke0R9JHtzeXNjb25mZGlyfS9wcm90b2NvbHMKKwlpbnN0YWxsIC1tIDA2NDQgZXRjLXNlcnZpY2VzICR7RH0ke3N5c2NvbmZkaXJ9L3NlcnZpY2VzCit9CisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L2hvc3RzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9vcy1yZWxlYXNlL29zLXJlbGVhc2UuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL29zLXJlbGVhc2Uvb3MtcmVsZWFzZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzQzMWQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9vcy1yZWxlYXNlL29zLXJlbGVhc2UuYmIKQEAgLTAsMCArMSw0OSBAQAoraW5oZXJpdCBhbGxhcmNoCisKK1NVTU1BUlkgPSAiT3BlcmF0aW5nIHN5c3RlbSBpZGVudGlmaWNhdGlvbiIKK0RFU0NSSVBUSU9OID0gIlRoZSAvZXRjL29zLXJlbGVhc2UgZmlsZSBjb250YWlucyBvcGVyYXRpbmcgc3lzdGVtIGlkZW50aWZpY2F0aW9uIGRhdGEuIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK2RvX2ZldGNoW25vZXhlY10gPSAiMSIKK2RvX3VucGFja1tub2V4ZWNdID0gIjEiCitkb19wYXRjaFtub2V4ZWNdID0gIjEiCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgorCisjIE90aGVyIHZhbGlkIGZpZWxkczogQlVJTERfSUQgSURfTElLRSBBTlNJX0NPTE9SIENQRV9OQU1FCisjICAgICAgICAgICAgICAgICAgICAgSE9NRV9VUkwgU1VQUE9SVF9VUkwgQlVHX1JFUE9SVF9VUkwKK09TX1JFTEVBU0VfRklFTERTID0gIklEIElEX0xJS0UgTkFNRSBWRVJTSU9OIFZFUlNJT05fSUQgUFJFVFRZX05BTUUiCisKK0lEID0gIiR7RElTVFJPfSIKK05BTUUgPSAiJHtESVNUUk9fTkFNRX0iCitWRVJTSU9OID0gIiR7RElTVFJPX1ZFUlNJT059JHtAJyAoJXMpJyAlIERJU1RST19DT0RFTkFNRSBpZiAnRElTVFJPX0NPREVOQU1FJyBpbiBkIGVsc2UgJyd9IgorVkVSU0lPTl9JRCA9ICIke0RJU1RST19WRVJTSU9OfSIKK1BSRVRUWV9OQU1FID0gIiR7RElTVFJPX05BTUV9ICR7VkVSU0lPTn0iCitCVUlMRF9JRCA/PSAiJHtEQVRFVElNRX0iCitCVUlMRF9JRFt2YXJkZXBzZXhjbHVkZV0gPSAiREFURVRJTUUiCisKK3B5dGhvbiBkb19jb21waWxlICgpIHsKKyAgICBpbXBvcnQgc2h1dGlsCisgICAgd2l0aCBvcGVuKGQuZXhwYW5kKCcke0J9L29zLXJlbGVhc2UnKSwgJ3cnKSBhcyBmOgorICAgICAgICBmb3IgZmllbGQgaW4gZC5nZXRWYXIoJ09TX1JFTEVBU0VfRklFTERTJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgICAgIHZhbHVlID0gZC5nZXRWYXIoZmllbGQsIFRydWUpCisgICAgICAgICAgICBpZiB2YWx1ZToKKyAgICAgICAgICAgICAgICBmLndyaXRlKCd7MH09ezF9XG4nLmZvcm1hdChmaWVsZCwgdmFsdWUpKQorICAgIGlmIGQuZ2V0VmFyKCdSUE1fU0lHTl9QQUNLQUdFUycsIFRydWUpID09ICcxJzoKKyAgICAgICAgcnBtX2dwZ19wdWJrZXkgPSBkLmdldFZhcignUlBNX0dQR19QVUJLRVknLCBUcnVlKQorICAgICAgICBvcy5ta2RpcignJHtCfS9ycG0tZ3BnJykKKyAgICAgICAgZGlzdHJvX3ZlcnNpb24gPSBzZWxmLmQuZ2V0VmFyKCdESVNUUk9fVkVSU0lPTicsIFRydWUpIG9yICJvZS4wIgorICAgICAgICBzaHV0aWwuY29weTIocnBtX2dwZ19wdWJrZXksIGQuZXhwYW5kKCcke0J9L3JwbS1ncGcvUlBNLUdQRy1LRVktJXMnICUgZGlzdHJvX3ZlcnNpb24pKQorfQorZG9fY29tcGlsZVt2YXJkZXBzXSArPSAiJHtPU19SRUxFQVNFX0ZJRUxEU30iCisKK2RvX2luc3RhbGwgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKyAgICBpbnN0YWxsIC1tIDA2NDQgb3MtcmVsZWFzZSAke0R9JHtzeXNjb25mZGlyfS8KKworICAgIGlmIFsgLWQgInJwbS1ncGciIF07IHRoZW4KKyAgICAgICAgaW5zdGFsbCAtZCAiJHtEfSR7c3lzY29uZmRpcn0vcGtpIgorICAgICAgICBjcCAtciAicnBtLWdwZyIgIiR7RH0ke3N5c2NvbmZkaXJ9L3BraS8iCisgICAgZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9uYXRpdmVzZGstcGFja2FnZWdyb3VwLXNkay1ob3N0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtc2RrLWhvc3QuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM2YTUzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9uYXRpdmVzZGstcGFja2FnZWdyb3VwLXNkay1ob3N0LmJiCkBAIC0wLDAgKzEsMzMgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA3IE9wZW5lZEhhbmQgTHRkCisjCisKK1NVTU1BUlkgPSAiSG9zdCBwYWNrYWdlcyBmb3IgdGhlIHN0YW5kYWxvbmUgU0RLIG9yIGV4dGVybmFsIHRvb2xjaGFpbiIKK1BSID0gInIxMiIKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IHBhY2thZ2Vncm91cCBuYXRpdmVzZGsKKworUEFDS0FHRUdST1VQX0RJU0FCTEVfQ09NUExFTUVOVEFSWSA9ICIxIgorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgbmF0aXZlc2RrLXBrZ2NvbmZpZyBcCisgICAgbmF0aXZlc2RrLXFlbXUgXAorICAgIG5hdGl2ZXNkay1xZW11LWhlbHBlciBcCisgICAgbmF0aXZlc2RrLXBzZXVkbyBcCisgICAgbmF0aXZlc2RrLXVuZnMzIFwKKyAgICBuYXRpdmVzZGstb3BrZyBcCisgICAgbmF0aXZlc2RrLWxpYnRvb2wgXAorICAgIG5hdGl2ZXNkay1hdXRvY29uZiBcCisgICAgbmF0aXZlc2RrLWF1dG9tYWtlIFwKKyAgICBuYXRpdmVzZGstc2hhZG93IFwKKyAgICBuYXRpdmVzZGstbWFrZWRldnMgXAorICAgIG5hdGl2ZXNkay1zbWFydHBtIFwKKyAgICBuYXRpdmVzZGstcG9zdGluc3QtaW50ZXJjZXB0IFwKKyAgICAiCisKK1JERVBFTkRTXyR7UE59X2RhcndpbiA9ICJcCisgICAgbmF0aXZlc2RrLXBrZ2NvbmZpZyBcCisgICAgbmF0aXZlc2RrLW9wa2cgXAorICAgIG5hdGl2ZXNkay1saWJ0b29sIFwKKyAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWJhc2UuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWJhc2UuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0MGIyOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtYmFzZS5iYgpAQCAtMCwwICsxLDM2OSBAQAorU1VNTUFSWSA9ICJNZXJnZSBtYWNoaW5lIGFuZCBkaXN0cm8gb3B0aW9ucyB0byBjcmVhdGUgYSBiYXNpYyBtYWNoaW5lIHRhc2svcGFja2FnZSIKK0xJQ0VOU0UgPSAiTUlUIgorUFIgPSAicjgzIgorCisjCisjIHBhY2thZ2VzIHdoaWNoIGNvbnRlbnQgZGVwZW5kIG9uIE1BQ0hJTkVfRkVBVFVSRVMgbmVlZCB0byBiZSBNQUNISU5FX0FSQ0gKKyMKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCitpbmhlcml0IGJsdWV0b290aAorCitQUk9WSURFUyA9ICIke1BBQ0tBR0VTfSIKK1BBQ0tBR0VTID0gJyBcCisgICAgICAgICAgICBwYWNrYWdlZ3JvdXAtYmFzZSBcCisgICAgICAgICAgICBwYWNrYWdlZ3JvdXAtYmFzZS1leHRlbmRlZCBcCisgICAgICAgICAgICBwYWNrYWdlZ3JvdXAtZGlzdHJvLWJhc2UgXAorICAgICAgICAgICAgcGFja2FnZWdyb3VwLW1hY2hpbmUtYmFzZSBcCisgICAgICAgICAgICBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJhY3BpIiwgInBhY2thZ2Vncm91cC1iYXNlLWFjcGkiLCAiIixkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiYWxzYSIsICJwYWNrYWdlZ3JvdXAtYmFzZS1hbHNhIiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJhcG0iLCAicGFja2FnZWdyb3VwLWJhc2UtYXBtIiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJleHQyIiwgInBhY2thZ2Vncm91cC1iYXNlLWV4dDIiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInZmYXQiLCAicGFja2FnZWdyb3VwLWJhc2UtdmZhdCIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiaXJkYSIsICJwYWNrYWdlZ3JvdXAtYmFzZS1pcmRhIiwgIiIsZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImtleWJvYXJkIiwgInBhY2thZ2Vncm91cC1iYXNlLWtleWJvYXJkIiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJwY2kiLCAicGFja2FnZWdyb3VwLWJhc2UtcGNpIiwgIiIsZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInBjbWNpYSIsICJwYWNrYWdlZ3JvdXAtYmFzZS1wY21jaWEiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInBob25lIiwgInBhY2thZ2Vncm91cC1iYXNlLXBob25lIiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJzZXJpYWwiLCAicGFja2FnZWdyb3VwLWJhc2Utc2VyaWFsIiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJ1c2JnYWRnZXQiLCAicGFja2FnZWdyb3VwLWJhc2UtdXNiZ2FkZ2V0IiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJ1c2Job3N0IiwgInBhY2thZ2Vncm91cC1iYXNlLXVzYmhvc3QiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAiYmx1ZXRvb3RoIiwgInBhY2thZ2Vncm91cC1iYXNlLWJsdWV0b290aCIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJ3aWZpIiwgInBhY2thZ2Vncm91cC1iYXNlLXdpZmkiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAiM2ciLCAicGFja2FnZWdyb3VwLWJhc2UtM2ciLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAibmZjIiwgInBhY2thZ2Vncm91cC1iYXNlLW5mYyIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJjcmFtZnMiLCAicGFja2FnZWdyb3VwLWJhc2UtY3JhbWZzIiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgImlwc2VjIiwgInBhY2thZ2Vncm91cC1iYXNlLWlwc2VjIiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgImlwdjYiLCAicGFja2FnZWdyb3VwLWJhc2UtaXB2NiIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJuZnMiLCAicGFja2FnZWdyb3VwLWJhc2UtbmZzIiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgInBwcCIsICJwYWNrYWdlZ3JvdXAtYmFzZS1wcHAiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAic21iZnMiLCAicGFja2FnZWdyb3VwLWJhc2Utc21iZnMiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAiemVyb2NvbmYiLCAicGFja2FnZWdyb3VwLWJhc2UtemVyb2NvbmYiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICcKKworIyBPdmVycmlkZSBieSBkaXN0cm8gaWYgbmVlZGVkCitWSVJUVUFMLVJVTlRJTUVfa2V5bWFwcyA/PSAia2V5bWFwcyIKKworIworIyBwYWNrYWdlZ3JvdXAtYmFzZSBjb250YWluIHN0dWZmIG5lZWRlZCBmb3IgYmFzZSBzeXN0ZW0gKG1hY2hpbmUgcmVsYXRlZCkKKyMKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlID0gIlwKKyAgICBwYWNrYWdlZ3JvdXAtZGlzdHJvLWJhc2UgXAorICAgIHBhY2thZ2Vncm91cC1tYWNoaW5lLWJhc2UgXAorICAgIFwKKyAgICBzeXNmc3V0aWxzIFwKKyAgICBtb2R1bGUtaW5pdC10b29scyBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ01BQ0hJTkVfRkVBVFVSRVMnLCAnYXBtJywgJ3BhY2thZ2Vncm91cC1iYXNlLWFwbScsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ01BQ0hJTkVfRkVBVFVSRVMnLCAnYWNwaScsICdwYWNrYWdlZ3JvdXAtYmFzZS1hY3BpJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnTUFDSElORV9GRUFUVVJFUycsICdrZXlib2FyZCcsICdwYWNrYWdlZ3JvdXAtYmFzZS1rZXlib2FyZCcsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ01BQ0hJTkVfRkVBVFVSRVMnLCAncGhvbmUnLCAncGFja2FnZWdyb3VwLWJhc2UtcGhvbmUnLCAnJyxkKX0gXAorICAgIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAnYWxzYScsICdwYWNrYWdlZ3JvdXAtYmFzZS1hbHNhJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAnZXh0MicsICdwYWNrYWdlZ3JvdXAtYmFzZS1leHQyJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAndmZhdCcsICdwYWNrYWdlZ3JvdXAtYmFzZS12ZmF0JywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAnaXJkYScsICdwYWNrYWdlZ3JvdXAtYmFzZS1pcmRhJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAncGNpJywgJ3BhY2thZ2Vncm91cC1iYXNlLXBjaScsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3BjbWNpYScsICdwYWNrYWdlZ3JvdXAtYmFzZS1wY21jaWEnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICd1c2JnYWRnZXQnLCAncGFja2FnZWdyb3VwLWJhc2UtdXNiZ2FkZ2V0JywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAndXNiaG9zdCcsICdwYWNrYWdlZ3JvdXAtYmFzZS11c2Job3N0JywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAnYmx1ZXRvb3RoJywgJ3BhY2thZ2Vncm91cC1iYXNlLWJsdWV0b290aCcsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3dpZmknLCAncGFja2FnZWdyb3VwLWJhc2Utd2lmaScsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJzNnJywgJ3BhY2thZ2Vncm91cC1iYXNlLTNnJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAnbmZjJywgJ3BhY2thZ2Vncm91cC1iYXNlLW5mYycsICcnLGQpfSBcCisgICAgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbmZzJywgJ3BhY2thZ2Vncm91cC1iYXNlLW5mcycsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdjcmFtZnMnLCAncGFja2FnZWdyb3VwLWJhc2UtY3JhbWZzJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3NtYmZzJywgJ3BhY2thZ2Vncm91cC1iYXNlLXNtYmZzJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCAncGFja2FnZWdyb3VwLWJhc2UtaXB2NicsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHNlYycsICdwYWNrYWdlZ3JvdXAtYmFzZS1pcHNlYycsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwcHAnLCAncGFja2FnZWdyb3VwLWJhc2UtcHBwJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3plcm9jb25mJywgJ3BhY2thZ2Vncm91cC1iYXNlLXplcm9jb25mJywgJycsZCl9IFwKKyAgICAiCisKKworUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtbmxzLXV0ZjggXAorICAgIGtlcm5lbC1tb2R1bGUtaW5wdXQgXAorICAgIGtlcm5lbC1tb2R1bGUtdWlucHV0IFwKKyAgICBrZXJuZWwtbW9kdWxlLXJ0Yy1kZXYgXAorICAgIGtlcm5lbC1tb2R1bGUtcnRjLXByb2MgXAorICAgIGtlcm5lbC1tb2R1bGUtcnRjLXN5c2ZzIFwKKyAgICBrZXJuZWwtbW9kdWxlLXVuaXgiCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLWV4dGVuZGVkID0gIlwKKyAgICBwYWNrYWdlZ3JvdXAtYmFzZSBcCisgICAgJHtBRERfV0lGSX0gXAorICAgICR7QUREX0JUfSBcCisgICAgJHtBRERfM0d9IFwKKyAgICAke0FERF9ORkN9IFwKKyAgICAiCisKK0FERF9XSUZJID0gIiIKK0FERF9CVCA9ICIiCitBRERfM0cgPSAiIgorQUREX05GQyA9ICIiCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgIyBJZiBEaXN0cm8gd2FudCB3aWZpIGFuZCBtYWNoaW5lIGZlYXR1cmUgd2lmaS9wY2kvcGNtY2lhL3VzYmhvc3QgKG9uZSBvZiB0aGVtKQorICAgICMgdGhlbiBpbmNsdWRlIHBhY2thZ2Vncm91cC1iYXNlLXdpZmkgaW4gcGFja2FnZWdyb3VwLWJhc2UKKworICAgIGRpc3Ryb19mZWF0dXJlcyA9IHNldChkLmdldFZhcigiRElTVFJPX0ZFQVRVUkVTIiwgVHJ1ZSkuc3BsaXQoKSkKKyAgICBtYWNoaW5lX2ZlYXR1cmVzPSBzZXQoZC5nZXRWYXIoIk1BQ0hJTkVfRkVBVFVSRVMiLCBUcnVlKS5zcGxpdCgpKQorCisgICAgaWYgImJsdWV0b290aCIgaW4gZGlzdHJvX2ZlYXR1cmVzIGFuZCBub3QgImJsdWV0b290aCIgaW4gbWFjaGluZV9mZWF0dXJlcyBhbmQgKCJwY21jaWEiIGluIG1hY2hpbmVfZmVhdHVyZXMgb3IgInBjaSIgaW4gbWFjaGluZV9mZWF0dXJlcyBvciAidXNiaG9zdCIgaW4gbWFjaGluZV9mZWF0dXJlcyk6CisgICAgICAgIGQuc2V0VmFyKCJBRERfQlQiLCAicGFja2FnZWdyb3VwLWJhc2UtYmx1ZXRvb3RoIikKKworICAgIGlmICJ3aWZpIiBpbiBkaXN0cm9fZmVhdHVyZXMgYW5kIG5vdCAid2lmaSIgaW4gbWFjaGluZV9mZWF0dXJlcyBhbmQgKCJwY21jaWEiIGluIG1hY2hpbmVfZmVhdHVyZXMgb3IgInBjaSIgaW4gbWFjaGluZV9mZWF0dXJlcyBvciAidXNiaG9zdCIgaW4gbWFjaGluZV9mZWF0dXJlcyk6CisgICAgICAgIGQuc2V0VmFyKCJBRERfV0lGSSIsICJwYWNrYWdlZ3JvdXAtYmFzZS13aWZpIikKKworICAgIGlmICIzZyIgaW4gZGlzdHJvX2ZlYXR1cmVzIGFuZCBub3QgIjNnIiBpbiBtYWNoaW5lX2ZlYXR1cmVzIGFuZCAoInBjbWNpYSIgaW4gbWFjaGluZV9mZWF0dXJlcyBvciAicGNpIiBpbiBtYWNoaW5lX2ZlYXR1cmVzIG9yICJ1c2Job3N0IiBpbiBtYWNoaW5lX2ZlYXR1cmVzKToKKyAgICAgICAgZC5zZXRWYXIoIkFERF8zRyIsICJwYWNrYWdlZ3JvdXAtYmFzZS0zZyIpCisKKyAgICBpZiAibmZjIiBpbiBkaXN0cm9fZmVhdHVyZXMgYW5kIG5vdCAibmZjIiBpbiBtYWNoaW5lX2ZlYXR1cmVzIGFuZCAoInVzYmhvc3QiIGluIG1hY2hpbmVfZmVhdHVyZXMpOgorICAgICAgICBkLnNldFZhcigiQUREX05GQyIsICJwYWNrYWdlZ3JvdXAtYmFzZS1uZmMiKQorfQorCisjCisjIHBhY2thZ2VzIGFkZGVkIGJ5IGRpc3RyaWJ1dGlvbgorIworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtZGlzdHJvLWJhc2UgPSAiJHtESVNUUk99IGV4dHJhcyIKK0RFUEVORFNfcGFja2FnZWdyb3VwLWRpc3Ryby1iYXNlID0gIiR7RElTVFJPX0VYVFJBX0RFUEVORFN9IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWRpc3Ryby1iYXNlID0gIiR7RElTVFJPX0VYVFJBX1JERVBFTkRTfSIKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1kaXN0cm8tYmFzZSA9ICIke0RJU1RST19FWFRSQV9SUkVDT01NRU5EU30iCisKKyMKKyMgcGFja2FnZXMgYWRkZWQgYnkgbWFjaGluZSBjb25maWcKKyMKK1NVTU1BUllfcGFja2FnZWdyb3VwLW1hY2hpbmUtYmFzZSA9ICIke01BQ0hJTkV9IGV4dHJhcyIKK1NVTU1BUllfcGFja2FnZWdyb3VwLW1hY2hpbmUtYmFzZSA9ICJFeHRyYSBwYWNrYWdlcyByZXF1aXJlZCB0byBmdWxseSBzdXBwb3J0ICR7TUFDSElORX0gaGFyZHdhcmUiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtbWFjaGluZS1iYXNlID0gIiR7TUFDSElORV9FWFRSQV9SREVQRU5EU30iCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtbWFjaGluZS1iYXNlID0gIiR7TUFDSElORV9FWFRSQV9SUkVDT01NRU5EU30iCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2Uta2V5Ym9hcmQgPSAiS2V5Ym9hcmQgc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLWtleWJvYXJkID0gIlwKKyAgICAke1ZJUlRVQUwtUlVOVElNRV9rZXltYXBzfSIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1wY2kgPSAiUENJIGJ1cyBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtcGNpID0gIlwKKyAgICBwY2l1dGlscyIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1hY3BpID0gIkFDUEkgc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLWFjcGkgPSAiXAorICAgIGFjcGlkIFwKKyAgICBsaWJhY3BpICIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1hcG0gPSAiQVBNIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1hcG0gPSAiXAorICAgICR7VklSVFVBTC1SVU5USU1FX2FwbX0gXAorICAgIGFwbWQiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtZXh0MiA9ICJleHQyIGZpbGVzeXN0ZW0gc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLWV4dDIgPSAiXAorICAgIGhkcGFybSBcCisgICAgZTJmc3Byb2dzIFwKKyAgICBlMmZzcHJvZ3MtZTJmc2NrIFwKKyAgICBlMmZzcHJvZ3MtbWtlMmZzIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXZmYXQgPSAiRkFUIGZpbGVzeXN0ZW0gc3VwcG9ydCIKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLXZmYXQgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtbXNkb3MgXAorICAgIGtlcm5lbC1tb2R1bGUtdmZhdCBcCisgICAga2VybmVsLW1vZHVsZS1ubHMtaXNvODg1OS0xIFwKKyAgICBrZXJuZWwtbW9kdWxlLW5scy1jcDQzNyBcCisgICAgZG9zZnN0b29scyIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1hbHNhID0gIkFMU0Egc291bmQgc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLWFsc2EgPSAiXAorICAgIGFsc2EtdXRpbHMtYWxzYWN0bCBcCisgICAgYWxzYS11dGlscy1hbHNhbWl4ZXIgXAorICAgICR7VklSVFVBTC1SVU5USU1FX2Fsc2Etc3RhdGV9IgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1hbHNhID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLXNuZC1taXhlci1vc3MgXAorICAgIGtlcm5lbC1tb2R1bGUtc25kLXBjbS1vc3MiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtcGNtY2lhID0gIlBDIGNhcmQgc2xvdCBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtcGNtY2lhID0gIlwKKyAgICBwY21jaWF1dGlscyBcCisgICAgIgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1wY21jaWEgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtcGNtY2lhIFwKKyAgICBrZXJuZWwtbW9kdWxlLWFpcm8tY3MgXAorICAgIGtlcm5lbC1tb2R1bGUtcGNuZXQtY3MgXAorICAgIGtlcm5lbC1tb2R1bGUtc2VyaWFsLWNzIFwKKyAgICBrZXJuZWwtbW9kdWxlLWlkZS1jcyBcCisgICAga2VybmVsLW1vZHVsZS1pZGUtZGlzayBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3aWZpJywgJ2tlcm5lbC1tb2R1bGUtaG9zdGFwLWNzJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dpZmknLCAna2VybmVsLW1vZHVsZS1vcmlub2NvLWNzJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dpZmknLCAna2VybmVsLW1vZHVsZS1zcGVjdHJ1bS1jcycsICcnLGQpfSIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1ibHVldG9vdGggPSAiQmx1ZXRvb3RoIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1ibHVldG9vdGggPSAiXAorICAgICR7QkxVRVp9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAnYWxzYScsICdsaWJhc291bmQtbW9kdWxlLWJsdWV6JywgJycsZCl9IFwKKyAgICAiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLWJsdWV0b290aCA9ICJcCisgICAga2VybmVsLW1vZHVsZS1ibHVldG9vdGggXAorICAgIGtlcm5lbC1tb2R1bGUtbDJjYXAgXAorICAgIGtlcm5lbC1tb2R1bGUtcmZjb21tIFwKKyAgICBrZXJuZWwtbW9kdWxlLWhjaS12aGNpIFwKKyAgICBrZXJuZWwtbW9kdWxlLWJuZXAgXAorICAgIGtlcm5lbC1tb2R1bGUtaGlkcCBcCisgICAga2VybmVsLW1vZHVsZS1oY2ktdWFydCBcCisgICAga2VybmVsLW1vZHVsZS1zY28gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICd1c2Job3N0JywgJ2tlcm5lbC1tb2R1bGUtaGNpLXVzYicsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3BjbWNpYScsICdrZXJuZWwtbW9kdWxlLWJsdWV0b290aDNjLWNzJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAncGNtY2lhJywgJ2tlcm5lbC1tb2R1bGUtYmx1ZWNhcmQtY3MnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdwY21jaWEnLCAna2VybmVsLW1vZHVsZS1ibHVldG9vdGh1YXJ0LWNzJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAncGNtY2lhJywgJ2tlcm5lbC1tb2R1bGUtZHRsMS1jcycsICcnLGQpfSBcCisgICAgIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLWlyZGEgPSAiSXJEQSBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtaXJkYSA9ICJcCisgICAgaXJkYS11dGlscyIKKworUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtaXJkYSA9ICJcCisgICAga2VybmVsLW1vZHVsZS1weGFmaWNwLWlyIFwKKyAgICBrZXJuZWwtbW9kdWxlLWlyZGEgXAorICAgIGtlcm5lbC1tb2R1bGUtaXJjb21tIFwKKyAgICBrZXJuZWwtbW9kdWxlLWlyY29tbS10dHkgXAorICAgIGtlcm5lbC1tb2R1bGUtaXJsYW4gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHBwJywgJ2tlcm5lbC1tb2R1bGUtaXJuZXQnLCAnJyxkKX0gXAorICAgIGtlcm5lbC1tb2R1bGUtaXJwb3J0IFwKKyAgICBrZXJuZWwtbW9kdWxlLWlydHR5IFwKKyAgICBrZXJuZWwtbW9kdWxlLWlydHR5LXNpciBcCisgICAga2VybmVsLW1vZHVsZS1zaXItZGV2IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAndXNiaG9zdCcsICdrZXJuZWwtbW9kdWxlLWlyLXVzYicsICcnLGQpfSAiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtdXNiZ2FkZ2V0ID0gIlVTQiBnYWRnZXQgc3VwcG9ydCIKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLXVzYmdhZGdldCA9ICJcCisgICAga2VybmVsLW1vZHVsZS1weGEyN3hfdWRjIFwKKyAgICBrZXJuZWwtbW9kdWxlLWdhZGdldGZzIFwKKyAgICBrZXJuZWwtbW9kdWxlLWctZmlsZS1zdG9yYWdlIFwKKyAgICBrZXJuZWwtbW9kdWxlLWctc2VyaWFsIFwKKyAgICBrZXJuZWwtbW9kdWxlLWctZXRoZXIiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtdXNiaG9zdCA9ICJVU0IgaG9zdCBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtdXNiaG9zdCA9ICJcCisgICAgdXNidXRpbHMgIgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS11c2Job3N0ID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLXVoY2ktaGNkIFwKKyAgICBrZXJuZWwtbW9kdWxlLW9oY2ktaGNkIFwKKyAgICBrZXJuZWwtbW9kdWxlLWVoY2ktaGNkIFwKKyAgICBrZXJuZWwtbW9kdWxlLXVzYmNvcmUgXAorICAgIGtlcm5lbC1tb2R1bGUtdXNiaGlkIFwKKyAgICBrZXJuZWwtbW9kdWxlLXVzYm5ldCBcCisgICAga2VybmVsLW1vZHVsZS1zZC1tb2QgXAorICAgIGtlcm5lbC1tb2R1bGUtc2NzaS1tb2QgXAorICAgIGtlcm5lbC1tb2R1bGUtdXNibW91c2UgXAorICAgIGtlcm5lbC1tb2R1bGUtbW91c2VkZXYgXAorICAgIGtlcm5lbC1tb2R1bGUtdXNic2VyaWFsIFwKKyAgICBrZXJuZWwtbW9kdWxlLXVzYi1zdG9yYWdlICIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1wcHAgPSAiUFBQIGRpYWwtdXAgcHJvdG9jb2wgc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLXBwcCA9ICJcCisgICAgcHBwIFwKKyAgICBwcHAtZGlhbGluIgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1wcHAgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtcHBwLWFzeW5jIFwKKyAgICBrZXJuZWwtbW9kdWxlLXBwcC1kZWZsYXRlIFwKKyAgICBrZXJuZWwtbW9kdWxlLXBwcC1nZW5lcmljIFwKKyAgICBrZXJuZWwtbW9kdWxlLXBwcC1tcHBlIFwKKyAgICBrZXJuZWwtbW9kdWxlLXNsaGMiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtaXBzZWMgPSAiSVBTRUMgc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLWlwc2VjID0gIlwKKyAgICAiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLWlwc2VjID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLWlwc2VjIgorCisjCisjIHBhY2thZ2Vncm91cC1iYXNlLXdpZmkgY29udGFpbiBldmVyeXRoaW5nIG5lZWRlZCB0byBnZXQgV2lGaSB3b3JraW5nCisjIFdFUC9XUEEgY29ubmVjdGlvbiBuZWVkcyB0byBiZSBzdXBwb3J0ZWQgb3V0LW9mLWJveAorIworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS13aWZpID0gIldpRmkgc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLXdpZmkgPSAiXAorICAgICR7VklSVFVBTC1SVU5USU1FX3dpcmVsZXNzLXRvb2xzfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3BjbWNpYScsICdob3N0YXAtdXRpbHMnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdwY2knLCAnaG9zdGFwLXV0aWxzJywgJycsZCl9IFwKKyAgICB3cGEtc3VwcGxpY2FudCIKKworUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2Utd2lmaSA9ICJcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3VzYmhvc3QnLCAna2VybmVsLW1vZHVsZS16ZDEyMTFydycsICcnLGQpfSBcCisgICAga2VybmVsLW1vZHVsZS1pZWVlODAyMTEtY3J5cHQgXAorICAgIGtlcm5lbC1tb2R1bGUtaWVlZTgwMjExLWNyeXB0LWNjbXAgXAorICAgIGtlcm5lbC1tb2R1bGUtaWVlZTgwMjExLWNyeXB0LXRraXAgXAorICAgIGtlcm5lbC1tb2R1bGUtaWVlZTgwMjExLWNyeXB0LXdlcCBcCisgICAga2VybmVsLW1vZHVsZS1lY2IgXAorICAgIGtlcm5lbC1tb2R1bGUtYXJjNCBcCisgICAga2VybmVsLW1vZHVsZS1jcnlwdG9fYWxnYXBpIFwKKyAgICBrZXJuZWwtbW9kdWxlLWNyeXB0b21nciBcCisgICAga2VybmVsLW1vZHVsZS1taWNoYWVsLW1pYyBcCisgICAga2VybmVsLW1vZHVsZS1hZXMtZ2VuZXJpYyBcCisgICAga2VybmVsLW1vZHVsZS1hZXMiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtbmZjID0gIk5lYXIgRmllbGQgQ29tbXVuaWNhdGlvbiBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtbmZjID0gIlwKKyAgICBuZWFyZCIKKworUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtbmZjID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLW5mYyIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS0zZyA9ICJDZWxsdWxhciBkYXRhIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS0zZyA9ICJcCisgICAgb2Zvbm8iCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLTNnID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLWNkYy1hY20gXAorICAgIGtlcm5lbC1tb2R1bGUtY2RjLXdkbSIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1zbWJmcyA9ICJTTUIgbmV0d29yayBmaWxlc3lzdGVtIHN1cHBvcnQiCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1zbWJmcyA9ICJcCisgICAga2VybmVsLW1vZHVsZS1jaWZzIFwKKyAgICBrZXJuZWwtbW9kdWxlLXNtYmZzIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLWNyYW1mcyA9ICJjcmFtZnMgZmlsZXN5c3RlbSBzdXBwb3J0IgorUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtY3JhbWZzID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLWNyYW1mcyIKKworIworIyBwYWNrYWdlZ3JvdXAtYmFzZS1uZnMgcHJvdmlkZXMgT05MWSBjbGllbnQgc3VwcG9ydCAtIHNlcnZlciBpcyBpbiBuZnMtdXRpbHMgcGFja2FnZQorIworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1uZnMgPSAiTkZTIG5ldHdvcmsgZmlsZXN5c3RlbSBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtbmZzID0gIlwKKyAgICBycGNiaW5kIgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1uZnMgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtbmZzICIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS16ZXJvY29uZiA9ICJaZXJvY29uZiBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtemVyb2NvbmYgPSAiXAorICAgIGF2YWhpLWRhZW1vbiIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLXplcm9jb25mX2FwcGVuZF9saWJjLWdsaWJjID0gIlwKKyAgICBsaWJuc3MtbWRucyBcCisgICAgIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLWlwdjYgPSAiSVB2NiBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtaXB2NiA9ICJcCisgICAgIgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1pcHY2ID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLWlwdjYgIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXNlcmlhbCA9ICJTZXJpYWwgcG9ydCBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2Utc2VyaWFsID0gIlwKKyAgICBzZXRzZXJpYWwgXAorICAgIGxyenN6ICIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1waG9uZSA9ICJDZWxsdWxhciB0ZWxlcGhvbnkgKHZvaWNlKSBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtcGhvbmUgPSAiXAorICAgIG9mb25vIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWJvb3QuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtYm9vdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWY1MzczCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWJvb3QuYmIKQEAgLTAsMCArMSw0NyBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDcgT3BlbmVkSGFuZCBMdGQuCisjCisKK1NVTU1BUlkgPSAiTWluaW1hbCBib290IHJlcXVpcmVtZW50cyIKK0RFU0NSSVBUSU9OID0gIlRoZSBtaW5pbWFsIHNldCBvZiBwYWNrYWdlcyByZXF1aXJlZCB0byBib290IHRoZSBzeXN0ZW0iCitMSUNFTlNFID0gIk1JVCIKK1BSID0gInIxNyIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworIworIyBTZXQgYnkgdGhlIG1hY2hpbmUgY29uZmlndXJhdGlvbiB3aXRoIHBhY2thZ2VzIGVzc2VudGlhbCBmb3IgZGV2aWNlIGJvb3R1cAorIworTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFMgPz0gIiIKK01BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JSRUNPTU1FTkRTID89ICIiCisKKyMgRGlzdHJvIGNhbiBvdmVycmlkZSB0aGUgZm9sbG93aW5nIFZJUlRVQUwtUlVOVElNRSBwcm92aWRlcnM6CitWSVJUVUFMLVJVTlRJTUVfZGV2X21hbmFnZXIgPz0gInVkZXYiCitWSVJUVUFMLVJVTlRJTUVfbG9naW5fbWFuYWdlciA/PSAiYnVzeWJveCIKK1ZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIgPz0gInN5c3Zpbml0IgorVklSVFVBTC1SVU5USU1FX2luaXRzY3JpcHRzID89ICJpbml0c2NyaXB0cyIKK1ZJUlRVQUwtUlVOVElNRV9rZXltYXBzID89ICJrZXltYXBzIgorCitTWVNWSU5JVF9TQ1JJUFRTID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdNQUNISU5FX0ZFQVRVUkVTJywgJ3J0YycsICdidXN5Ym94LWh3Y2xvY2snLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAgbW9kdXRpbHMtaW5pdHNjcmlwdHMgXAorICAgICAgICAgICAgICAgICAgICBpbml0LWlmdXBkb3duIFwKKyAgICAgICAgICAgICAgICAgICAgJHtWSVJUVUFMLVJVTlRJTUVfaW5pdHNjcmlwdHN9IFwKKyAgICAgICAgICAgICAgICAgICAiCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgICBiYXNlLWZpbGVzIFwKKyAgICBiYXNlLXBhc3N3ZCBcCisgICAgYnVzeWJveCBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJzeXN2aW5pdCIsICIke1NZU1ZJTklUX1NDUklQVFN9IiwgIiIsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAia2V5Ym9hcmQiLCAiJHtWSVJUVUFMLVJVTlRJTUVfa2V5bWFwc30iLCAiIiwgZCl9IFwKKyAgICBuZXRiYXNlIFwKKyAgICAke1ZJUlRVQUwtUlVOVElNRV9sb2dpbl9tYW5hZ2VyfSBcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyfSBcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfZGV2X21hbmFnZXJ9IFwKKyAgICAke1ZJUlRVQUwtUlVOVElNRV91cGRhdGUtYWx0ZXJuYXRpdmVzfSBcCisgICAgJHtNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EU30iCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gIlwKKyAgICAke01BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JSRUNPTU1FTkRTfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1idWlsZGVzc2VudGlhbC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1idWlsZGVzc2VudGlhbC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGVkMjQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWJ1aWxkZXNzZW50aWFsLmJiCkBAIC0wLDAgKzEsMjkgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA3IE9wZW5lZEhhbmQgTHRkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgUmVkIEhhdCwgSW5jLgorIworCitTVU1NQVJZID0gIkVzc2VudGlhbCBidWlsZCBkZXBlbmRlbmNpZXMiCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtYnVpbGRlc3NlbnRpYWwgPSAiXAorICAgIGF1dG9jb25mIFwKKyAgICBhdXRvbWFrZSBcCisgICAgYmludXRpbHMgXAorICAgIGJpbnV0aWxzLXN5bWxpbmtzIFwKKyAgICBjcHAgXAorICAgIGNwcC1zeW1saW5rcyBcCisgICAgZ2NjIFwKKyAgICBnY2Mtc3ltbGlua3MgXAorICAgIGcrKyBcCisgICAgZysrLXN5bWxpbmtzIFwKKyAgICBnZXR0ZXh0IFwKKyAgICBtYWtlIFwKKyAgICBsaWJzdGRjKysgXAorICAgIGxpYnN0ZGMrKy1kZXYgXAorICAgIGxpYnRvb2wgXAorICAgIHBrZ2NvbmZpZyBcCisgICAgIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZWNsaXBzZS1kZWJ1Zy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1lY2xpcHNlLWRlYnVnLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YjAxM2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZWNsaXBzZS1kZWJ1Zy5iYgpAQCAtMCwwICsxLDEwIEBACitTVU1NQVJZID0gIlJlbW90ZSBkZWJ1Z2dpbmcgdG9vbHMgZm9yIEVjbGlwc2UgaW50ZWdyYXRpb24iCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgIGdkYnNlcnZlciBcCisgICAgdGNmLWFnZW50IFwKKyAgICBvcGVuc3NoLXNmdHAtc2VydmVyIFwKKyAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtbmZzLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLW5mcy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODgyZDNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLW5mcy5iYgpAQCAtMCwwICsxLDIxIEBACisjCisjIENvcHlyaWdodCAoQykgMjAwOCBPcGVuZWRIYW5kIEx0ZC4KKyMKKworU1VNTUFSWSA9ICJORlMgcGFja2FnZSBncm91cHMiCitMSUNFTlNFID0gIk1JVCIKK1BSID0gInIyIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitQUk9WSURFUyA9ICIke1BBQ0tBR0VTfSIKK1BBQ0tBR0VTID0gIiR7UE59LXNlcnZlciAke1BOfS1jbGllbnQiCisKK1NVTU1BUllfJHtQTn0tY2xpZW50ID0gIk5GUyBjbGllbnQiCitSREVQRU5EU18ke1BOfS1jbGllbnQgPSAibmZzLXV0aWxzLWNsaWVudCIKKworU1VNTUFSWV8ke1BOfS1zZXJ2ZXIgPSAiTkZTIHNlcnZlciIKK1JERVBFTkRTXyR7UE59LXNlcnZlciA9ICJcCisgICAgbmZzLXV0aWxzIFwKKyAgICBuZnMtdXRpbHMtY2xpZW50IFwKKyAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc2RrLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXNkay5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmFkZDBlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXNkay5iYgpAQCAtMCwwICsxLDgzIEBACisjCisjIENvcHlyaWdodCAoQykgMjAwNyBPcGVuZWRIYW5kIEx0ZC4KKyMKKworU1VNTUFSWSA9ICJTb2Z0d2FyZSBkZXZlbG9wbWVudCB0b29scyIKK0xJQ0VOU0UgPSAiTUlUIgorUFIgPSAicjkiCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKKyNQQUNLQUdFRlVOQ1MgPSsgJ2dlbmVyYXRlX3Nka19wa2dzJworCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1zZGsgPSAiXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWJ1aWxkZXNzZW50aWFsIFwKKyAgICBjb3JldXRpbHMgXAorICAgIGNjYWNoZSBcCisgICAgZGlmZnV0aWxzIFwKKyAgICBpbnRsdG9vbCBcCisgICAgcGVybC1tb2R1bGUtcmUgXAorICAgIHBlcmwtbW9kdWxlLXRleHQtd3JhcCBcCisgICAgZmluZHV0aWxzIFwKKyAgICBxdWlsdCBcCisgICAgbGVzcyBcCisgICAgbGRkIFwKKyAgICBmaWxlIFwKKyAgICB0Y2wiCisKK1NBTklUSVpFUlMgPSAibGliYXNhbi1kZXYgbGlidWJzYW4tZGV2IgorU0FOSVRJWkVSU19hYXJjaDY0ID0gIiIKK1NBTklUSVpFUlNfbWlwcyA9ICIiCitTQU5JVElaRVJTX21pcHM2NCA9ICIiCitTQU5JVElaRVJTX21pcHM2NG4zMiA9ICIiCitTQU5JVElaRVJTX3Bvd2VycGM2NCA9ICIiCitTQU5JVElaRVJTX3NwYXJjID0gIiIKK1NBTklUSVpFUlNfbGliYy1tdXNsID0gIiIKKworUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWNvcmUtc2RrID0gIlwKKyAgICBsaWJnb21wIFwKKyAgICBsaWJnb21wLWRldiBcCisgICAgJHtTQU5JVElaRVJTfSIKKworI3B5dGhvbiBnZW5lcmF0ZV9zZGtfcGtncyAoKSB7CisjICAgIHBva3lfcGtncyA9IHJlYWRfcGtnZGF0YSgncGFja2FnZWdyb3VwLWNvcmUnLCBkKVsnUEFDS0FHRVMnXQorIyAgICBwa2dzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorIyAgICBmb3IgcGtnIGluIHBva3lfcGtncy5zcGxpdCgpOgorIyAgICAgICAgbmV3cGtnID0gcGtnLnJlcGxhY2UoJ3BhY2thZ2Vncm91cC1jb3JlJywgJ3BhY2thZ2Vncm91cC1jb3JlLXNkaycpCisjCisjICAgICAgICAjIGZvciBlYWNoIG9mIHRoZSB0YXNrIHBhY2thZ2VzLCBhZGQgYSBjb3JyZXNwb25kaW5nIHNkayB0YXNrCisjICAgICAgICBwa2dzLmFwcGVuZChuZXdwa2cpCisjCisjICAgICAgICAjIGZvciBlYWNoIHNkayB0YXNrLCB0YWtlIHRoZSByZGVwZW5kcyBvZiB0aGUgbm9uLXNkayB0YXNrLCBhbmQgdHVybgorIyAgICAgICAgIyB0aGF0IGludG8gcnJlY29tbWVuZHMgdXBvbiB0aGUgLWRldiB2ZXJzaW9ucyBvZiB0aG9zZSwgbm90IHVubGlrZQorIyAgICAgICAgIyB0aGUgcGFja2FnZSBkZXBjaGFpbiBjb2RlCisjICAgICAgICBzcGtnZGF0YSA9IHJlYWRfc3VicGtnZGF0YShwa2csIGQpCisjCisjICAgICAgICByZGVwZW5kcyA9IGV4cGxvZGVfZGVwcyhzcGtnZGF0YS5nZXQoJ1JERVBFTkRTXyVzJyAlIHBrZykgb3IgJycpCisjICAgICAgICBycmVjbGlzdCA9IFtdCisjCisjICAgICAgICBmb3IgZGVwZW5kIGluIHJkZXBlbmRzOgorIyAgICAgICAgICAgIHNwbGl0X2RlcGVuZCA9IGRlcGVuZC5zcGxpdCgnICgnKQorIyAgICAgICAgICAgIG5hbWUgPSBzcGxpdF9kZXBlbmRbMF0uc3RyaXAoKQorIyAgICAgICAgICAgIGlmIHBhY2thZ2VkKCclcy1kZXYnICUgbmFtZSwgZCk6CisjICAgICAgICAgICAgICAgIHJyZWNsaXN0LmFwcGVuZCgnJXMtZGV2JyAlIG5hbWUpCisjICAgICAgICAgICAgZWxzZToKKyMgICAgICAgICAgICAgICAgZGVwcGtnZGF0YSA9IHJlYWRfc3VicGtnZGF0YShuYW1lLCBkKQorIyAgICAgICAgICAgICAgICByZGVwZW5kczIgPSBleHBsb2RlX2RlcHMoZGVwcGtnZGF0YS5nZXQoJ1JERVBFTkRTXyVzJyAlIG5hbWUpIG9yICcnKQorIyAgICAgICAgICAgICAgICBmb3IgZGVwZW5kIGluIHJkZXBlbmRzMjoKKyMgICAgICAgICAgICAgICAgICAgIHNwbGl0X2RlcGVuZCA9IGRlcGVuZC5zcGxpdCgnICgnKQorIyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHNwbGl0X2RlcGVuZFswXS5zdHJpcCgpCisjICAgICAgICAgICAgICAgICAgICBpZiBwYWNrYWdlZCgnJXMtZGV2JyAlIG5hbWUsIGQpOgorIyAgICAgICAgICAgICAgICAgICAgICAgIHJyZWNsaXN0LmFwcGVuZCgnJXMtZGV2JyAlIG5hbWUpCisjCisjICAgICAgICAgICAgb2xkcnJlYyA9IGQuZ2V0VmFyKCdSUkVDT01NRU5EU18lcycgJSBuZXdwa2csIEZhbHNlKSBvciAnJworIyAgICAgICAgICAgIGQuc2V0VmFyKCdSUkVDT01NRU5EU18lcycgJSBuZXdwa2csIG9sZHJyZWMgKyAnICcgKyAnICcuam9pbihycmVjbGlzdCkpCisjICAgICAgICAgICAgIyBiYi5ub3RlKCdSUkVDT01NRU5EU18lcyA9ICIlcyInICUgKG5ld3BrZywgZC5nZXRWYXIoJ1JSRUNPTU1FTkRTXyVzJyAlIG5ld3BrZywgRmFsc2UpKSkKKyMKKyMgICAgIyBiYi5ub3RlKCdwa2dzIGlzICVzJyAlIHBrZ3MpCisjICAgIGQuc2V0VmFyKCdQQUNLQUdFUycsICcgJy5qb2luKHBrZ3MpKQorI30KKyMKKyNQQUNLQUdFU19EWU5BTUlDICs9ICJecGFja2FnZWdyb3VwLWNvcmUtc2RrLS4qIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXNzaC1kcm9wYmVhci5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1zc2gtZHJvcGJlYXIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk5OTQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1zc2gtZHJvcGJlYXIuYmIKQEAgLTAsMCArMSw3IEBACitTVU1NQVJZID0gIkRyb3BiZWFyIFNTSCBjbGllbnQvc2VydmVyIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyMSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworUkRFUEVORFNfJHtQTn0gPSAiZHJvcGJlYXIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3NoLW9wZW5zc2guYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3NoLW9wZW5zc2guYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJkMjBlNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1zc2gtb3BlbnNzaC5iYgpAQCAtMCwwICsxLDcgQEAKK1NVTU1BUlkgPSAiT3BlblNTSCBTU0ggY2xpZW50L3NlcnZlciIKK0xJQ0VOU0UgPSAiTUlUIgorUFIgPSAicjEiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKK1JERVBFTkRTXyR7UE59ID0gIm9wZW5zc2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1zZGstdGFyZ2V0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXN0YW5kYWxvbmUtc2RrLXRhcmdldC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2Y1ZTQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXN0YW5kYWxvbmUtc2RrLXRhcmdldC5iYgpAQCAtMCwwICsxLDEzIEBACitTVU1NQVJZID0gIlRhcmdldCBwYWNrYWdlcyBmb3IgdGhlIHN0YW5kYWxvbmUgU0RLIgorUFIgPSAicjgiCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgIGxpYmdjYyBcCisgICAgbGliZ2NjLWRldiBcCisgICAgbGlic3RkYysrIFwKKyAgICBsaWJzdGRjKystZGV2IFwKKyAgICAke0xJQkNfREVQRU5ERU5DSUVTfSBcCisgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLWRlYnVnLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLWRlYnVnLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMzQ3YjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtZGVidWcuYmIKQEAgLTAsMCArMSwyMCBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDggT3BlbmVkSGFuZCBMdGQuCisjCisKK1NVTU1BUlkgPSAiRGVidWdnaW5nIHRvb2xzIgorTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKK1BSID0gInIzIgorCitNVFJBQ0UgPSAiIgorTVRSQUNFX2xpYmMtZ2xpYmMgPSAibGliYy1tdHJhY2UiCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgICBnZGIgXAorICAgIGdkYnNlcnZlciBcCisgICAgc3RyYWNlIFwKKyAgICAke01UUkFDRX0gXAorICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXByb2ZpbGUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBmNTkzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlLmJiCkBAIC0wLDAgKzEsODEgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4IE9wZW5lZEhhbmQgTHRkLgorIworCitTVU1NQVJZID0gIlByb2ZpbGluZyB0b29scyIKK0xJQ0VOU0UgPSAiTUlUIgorCitQUiA9ICJyMyIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworUFJPRklMRV9UT09MU19YID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3N5c3Byb2YnLCAnJywgZCl9IgorIyBzeXNwcm9mIGRvZXNuJ3Qgc3VwcG9ydCBhYXJjaDY0CitQUk9GSUxFX1RPT0xTX1hfYWFyY2g2NCA9ICIiCitQUk9GSUxFX1RPT0xTX1NZU1RFTUQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3N5c3RlbWQtYW5hbHl6ZScsICcnLCBkKX0iCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gIlwKKyAgICBwZXJmIFwKKyAgICB0cmFjZS1jbWQgXAorICAgIGJsa3RyYWNlIFwKKyAgICAke1BST0ZJTEVfVE9PTFNfWH0gXAorICAgICR7UFJPRklMRV9UT09MU19TWVNURU1EfSBcCisgICAgIgorCitQUk9GSUxFVE9PTFMgPSAiXAorICAgIHBvd2VydG9wIFwKKyAgICBsYXRlbmN5dG9wIFwKKyAgICAiCisKKyMgc3lzdGVtdGFwIG5lZWRzIGVsZnV0aWxzIHdoaWNoIGlzIG5vdCBmdWxseSBidWlsZGFibGUgb24gdWNsaWJjCisjIGhlbmNlIHdlIGV4Y2x1ZGUgaXQgZnJvbSB1Y2xpYmMgYmFzZWQgYnVpbGRzCitTWVNURU1UQVAgPSAic3lzdGVtdGFwIgorU1lTVEVNVEFQX2xpYmMtdWNsaWJjID0gIiIKK1NZU1RFTVRBUF9taXBzID0gIiIKK1NZU1RFTVRBUF9taXBzNjQgPSAiIgorU1lTVEVNVEFQX21pcHM2NG4zMiA9ICIiCitTWVNURU1UQVBfYWFyY2g2NCA9ICIiCisKKyMgbHR0bmctdXN0IHVzZXMgc2NoZWRfZ2V0Y3B1KCkgd2hpY2ggaXMgbm90IHRoZXJlIG9uIHVjbGliYworIyBmb3Igc29tZSBvZiB0aGUgYXJjaGl0ZWN0dXJlcyBpdCBjYW4gYmUgcGF0Y2hlZCB0byBjYWxsIHRoZQorIyBzeXNjYWxsIGRpcmVjdGx5IGJ1dCBmb3IgeDg2XzY0IF9fTlJfZ2V0Y3B1IGlzIGEgdnN5c2NhbGwKKyMgd2hpY2ggbWVhbnMgd2UgY2FuIG5vdCB1c2Ugc3lzY2FsbCgpIHRvIGNhbGwgaXQuIFNvIHdlIGlnbm9yZQorIyBpdCBmb3IgeDg2XzY0L3VjbGliYworCitMVFROR1VTVCA9ICJsdHRuZy11c3QiCitMVFROR1VTVF9saWJjLXVjbGliYyA9ICIiCitMVFROR1VTVF9hYXJjaDY0ID0gIiIKKworTFRUTkdUT09MUyA9ICJsdHRuZy10b29scyIKK0xUVE5HVE9PTFNfYWFyY2g2NCA9ICIiCisKK0xUVE5HTU9EVUxFUyA9ICJsdHRuZy1tb2R1bGVzIgorTFRUTkdNT0RVTEVTX2FhcmNoNjQgPSAiIgorCitCQUJFTFRSQUNFID0gImJhYmVsdHJhY2UiCitCQUJFTFRSQUNFX2FhcmNoNjQgPSAiIgorCisjIHZhbGdyaW5kIGRvZXMgbm90IHdvcmsgb24gbWlwcworCitWQUxHUklORCA9ICJ2YWxncmluZCIKK1ZBTEdSSU5EX2xpYmMtdWNsaWJjID0gIiIKK1ZBTEdSSU5EX21pcHMgPSAiIgorVkFMR1JJTkRfbWlwczY0ID0gIiIKK1ZBTEdSSU5EX21pcHM2NG4zMiA9ICIiCitWQUxHUklORF9hcm0gPSAiIgorVkFMR1JJTkRfYWFyY2g2NCA9ICIiCisKKyMgICAgZXhtYXAtY29uc29sZQorIyAgICBleG1hcC1zZXJ2ZXIKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgICR7UFJPRklMRVRPT0xTfSBcCisgICAgJHtMVFROR1VTVH0gXAorICAgICR7TFRUTkdUT09MU30gXAorICAgICR7TFRUTkdNT0RVTEVTfSBcCisgICAgJHtCQUJFTFRSQUNFfSBcCisgICAgJHtTWVNURU1UQVB9IFwKKyAgICAke1ZBTEdSSU5EfSBcCisgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXRlc3RhcHBzLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXRlc3RhcHBzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1YjM5ODgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtdGVzdGFwcHMuYmIKQEAgLTAsMCArMSw1NiBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDggT3BlbmVkSGFuZCBMdGQuCisjCisKK1NVTU1BUlkgPSAiVGVzdGluZyB0b29scy9hcHBsaWNhdGlvbnMiCitMSUNFTlNFID0gIk1JVCIKKworUFIgPSAicjIiCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKKyMga2V4ZWMtdG9vbHMgZG9lc24ndCB3b3JrIG9uIE1pcHMKK0tFWEVDVE9PTFMgPz0gImtleGVjIgorS0VYRUNUT09MU19taXBzID89ICIiCitLRVhFQ1RPT0xTX21pcHNlbCA/PSAiIgorS0VYRUNUT09MU19wb3dlcnBjID89ICIiCitLRVhFQ1RPT0xTX2U1NTAwLTY0YiA/PSAiIgorS0VYRUNUT09MU19hYXJjaDY0ID89ICIiCisKK1gxMUdMVE9PTFMgPSAiXAorICAgIG1lc2EtZGVtb3MgXAorICAgIHBpZ2xpdCBcCisgICAgIgorCiszR1RPT0xTID0gIlwKKyAgICBvZm9uby10ZXN0cyBcCisgICAgIgorCitYMTFUT09MUyA9ICJcCisgICAgZnN0ZXN0cyBcCisgICAgZ3N0LXBsYXllci1iaW4gXAorICAgIHgxMXBlcmYgXAorICAgIHhyZXN0b3AgXAorICAgIHh3aW5pbmZvIFwKKyAgICB4cHJvcCBcCisgICAgeHZpZGVvLXRlc3RzIFwKKyAgICAiCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgICBibGt0b29sIFwKKyAgICB0c2xpYi1jYWxpYnJhdGUgXAorICAgIHRzbGliLXRlc3RzIFwKKyAgICBscnpzeiBcCisgICAgJHtLRVhFQ1RPT0xTfSBcCisgICAgYWxzYS11dGlscy1hbWl4ZXIgXAorICAgIGFsc2EtdXRpbHMtYXBsYXkgXAorICAgIGx0cCBcCisgICAgY29ubm1hbi10b29scyBcCisgICAgY29ubm1hbi10ZXN0cyBcCisgICAgY29ubm1hbi1jbGllbnQgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgIiR7WDExVE9PTFN9IiwgIiIsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEgb3BlbmdsJywgIiR7WDExR0xUT09MU30iLCAiIiwgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJzNnJywgIiR7M0dUT09MU30iLCAiIiwgZCl9IFwKKyAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODBkZDk2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi5iYgpAQCAtMCwwICsxLDE5IEBACitTVU1NQVJZID0gIkhvc3QgU0RLIHBhY2thZ2UgZm9yIGNyb3NzIGNhbmFkaWFuIHRvb2xjaGFpbiIKK1BOID0gInBhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi0ke01BQ0hJTkV9IgorTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgY3Jvc3MtY2FuYWRpYW4gcGFja2FnZWdyb3VwCisKK1BBQ0tBR0VHUk9VUF9ESVNBQkxFX0NPTVBMRU1FTlRBUlkgPSAiMSIKKworIyBVc2UgaW5kaXJlY3Rpb24gdG8gc3RvcCB0aGVzZSBiZWluZyBleHBhbmRlZCBwcmVtYXR1cmVseQorQklOVVRJTFMgPSAiYmludXRpbHMtY3Jvc3MtY2FuYWRpYW4tJHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfSIKK0dDQyA9ICJnY2MtY3Jvc3MtY2FuYWRpYW4tJHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfSIKK0dEQiA9ICJnZGItY3Jvc3MtY2FuYWRpYW4tJHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfSIKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgICR7QGFsbF9tdWx0aWxpYl90dW5lX3ZhbHVlcyhkLCAnQklOVVRJTFMnKX0gXAorICAgICR7QGFsbF9tdWx0aWxpYl90dW5lX3ZhbHVlcyhkLCAnR0NDJyl9IFwKKyAgICAke0BhbGxfbXVsdGlsaWJfdHVuZV92YWx1ZXMoZCwgJ0dEQicpfSBcCisgICAgbWV0YS1lbnZpcm9ubWVudC0ke01BQ0hJTkV9IFwKKyAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzhiZTI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC5iYgpAQCAtMCwwICsxLDIwMiBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKworU1VNTUFSWSA9ICJTZWxmLWhvc3RpbmciCitERVNDUklQVElPTiA9ICJQYWNrYWdlcyByZXF1aXJlZCB0byBydW4gdGhlIGJ1aWxkIHN5c3RlbSIKK1BSID0gInIxMyIKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IHBhY2thZ2Vncm91cCAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIHJkZXBlbmRzIG9uIGxpYngxMS1kZXYKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1BBQ0tBR0VTID0gIlwKKyAgICBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQgXAorICAgIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1kZWJ1ZyBcCisgICAgcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLXNkayBcCisgICAgcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWV4dGVuZGVkIFwKKyAgICBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtZ3JhcGhpY3MgXAorICAgIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1ob3N0LXRvb2xzIFwKKyAgICAiCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1zZWxmLWhvc3RlZCA9ICJcCisgICAgcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWRlYnVnIFwKKyAgICBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtc2RrIFwKKyAgICBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtZXh0ZW5kZWQgXAorICAgIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1ncmFwaGljcyBcCisgICAgcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWhvc3QtdG9vbHMgXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWhvc3QtdG9vbHMgPSAiXAorICAgIGNvbm5tYW4gXAorICAgIGNvbm5tYW4tcGx1Z2luLWV0aGVybmV0IFwKKyAgICBkaGNwLWNsaWVudCBcCisgICAgZTJmc3Byb2dzIFwKKyAgICBlMmZzcHJvZ3MtZTJmc2NrIFwKKyAgICBlMmZzcHJvZ3MtbWtlMmZzIFwKKyAgICBlMmZzcHJvZ3MtdHVuZTJmcyBcCisgICAgaGRwYXJtIFwKKyAgICBpcHRhYmxlcyBcCisgICAgbHNiIFwKKyAgICBtYyBcCisgICAgbWMtZmlzaCBcCisgICAgbWMtaGVscGVycyBcCisgICAgbWMtaGVscGVycy1wZXJsIFwKKyAgICBtYy1oZWxwZXJzLXB5dGhvbiBcCisgICAgcGFydGVkIFwKKyAgICBwc2V1ZG8gXAorICAgIHNjcmVlbiBcCisgICAgIgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtaG9zdC10b29scyA9ICJcCisgICAga2VybmVsLW1vZHVsZS10dW4gXAorICAgIGtlcm5lbC1tb2R1bGUtaXB0YWJsZS1yYXcgXAorICAgIGtlcm5lbC1tb2R1bGUtaXB0YWJsZS1uYXQgXAorICAgIGtlcm5lbC1tb2R1bGUtaXB0YWJsZS1tYW5nbGUgXAorICAgIGtlcm5lbC1tb2R1bGUtaXB0YWJsZS1maWx0ZXIgXAorCSIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLXNkayA9ICJcCisgICAgYXV0b2NvbmYgXAorICAgIGF1dG9tYWtlIFwKKyAgICBiaW51dGlscyBcCisgICAgYmludXRpbHMtc3ltbGlua3MgXAorICAgIGNjYWNoZSBcCisgICAgY29yZXV0aWxzIFwKKyAgICBjcHAgXAorICAgIGNwcC1zeW1saW5rcyBcCisgICAgZGlzdGNjIFwKKyAgICBnbGliYy1nY29udi1pYm04NTAgXAorICAgIGZpbGUgXAorICAgIGZpbmR1dGlscyBcCisgICAgZysrIFwKKyAgICBnKystc3ltbGlua3MgXAorICAgIGdjYyBcCisgICAgZ2NjLXN5bWxpbmtzIFwKKyAgICBpbnRsdG9vbCBcCisgICAgbGRkIFwKKyAgICBsZXNzIFwKKyAgICBsaWJzc3AgXAorICAgIGxpYnNzcC1kZXYgXAorICAgIGxpYnNzcC1zdGF0aWNkZXYgXAorICAgIGxpYnN0ZGMrKyBcCisgICAgbGlic3RkYysrLWRldiBcCisgICAgbGlidG9vbCBcCisgICAgbWFrZSBcCisgICAgbWt0ZW1wIFwKKyAgICBwZXJsLW1vZHVsZS1yZSBcCisgICAgcGVybC1tb2R1bGUtdGV4dC13cmFwIFwKKyAgICBwa2djb25maWcgXAorICAgIHF1aWx0IFwKKyAgICBzZWQgXAorICAgICIKKyMgZ2xpYmMtdXRpbHM6IGZvciBycGNnZW4KK1JERVBFTkRTX3BhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1zZGtfYXBwZW5kX2xpYmMtZ2xpYmMgPSAiXAorICAgIGdsaWJjLXV0aWxzIFwKKyAgICAiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtZGVidWcgPSAiIFwKKyAgICBnZGIgXAorICAgIGdkYnNlcnZlciBcCisgICAgcnN5bmMgXAorICAgIHN0cmFjZSBcCisgICAgdGNmLWFnZW50IgorCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1leHRlbmRlZCA9ICJcCisgICAgYnppcDIgXAorICAgIGNoa2NvbmZpZyBcCisgICAgY2hycGF0aCBcCisgICAgY3BpbyBcCisgICAgY3VybCBcCisgICAgZGlmZnN0YXQgXAorICAgIGRpZmZ1dGlscyBcCisgICAgZWxmdXRpbHMgXAorICAgIGV4cGF0IFwKKyAgICBnYXdrIFwKKyAgICBnZGJtIFwKKyAgICBnZXR0ZXh0IFwKKyAgICBnZXR0ZXh0LXJ1bnRpbWUgXAorICAgIGdpdCBcCisgICAgZ2l0LXBlcmx0b29scyBcCisgICAgZ3JlcCBcCisgICAgZ3JvZmYgXAorICAgIGd6aXAgXAorICAgIHNldHRpbmdzLWRhZW1vbiBcCisgICAgaGljb2xvci1pY29uLXRoZW1lIFwKKyAgICBzYXRvLWljb24tdGhlbWUgXAorICAgIGxpYmFpbyBcCisgICAgbGlidXNiMSBcCisgICAgbGlieG1sMiBcCisgICAgbHJ6c3ogXAorICAgIGxzb2YgXAorICAgIGx6byBcCisgICAgbWFuIFwKKyAgICBtYW4tcGFnZXMgXAorICAgIG1kYWRtIFwKKyAgICBtaW5pY29tIFwKKyAgICBtdG9vbHMgXAorICAgIG5jdXJzZXMgXAorICAgIG5jdXJzZXMtdGVybWluZm8tYmFzZSBcCisgICAgbmVvbiBcCisgICAgbmZzLXV0aWxzIFwKKyAgICBuZnMtdXRpbHMtY2xpZW50IFwKKyAgICBvcGVuc3NsIFwKKyAgICBvcGVuc3NoLXNmdHAtc2VydmVyIFwKKyAgICBvcGtnIFwKKyAgICBvcGtnLXV0aWxzIFwKKyAgICBwYXRjaCBcCisgICAgcGVybCBcCisgICAgcGVybC1kZXYgXAorICAgIHBlcmwtbW9kdWxlcyBcCisgICAgcGVybC1wb2QgXAorICAgICR7UFRIfSBcCisgICAgcHl0aG9uIFwKKyAgICBweXRob24tY29tcGlsZXIgXAorICAgIHB5dGhvbi1naXQgXAorICAgIHB5dGhvbi1taXNjIFwKKyAgICBweXRob24tbW9kdWxlcyBcCisgICAgcHl0aG9uLXJwbSBcCisgICAgcXVvdGEgXAorICAgIHJlYWRsaW5lIFwKKyAgICBycG0gXAorICAgIHNldHNlcmlhbCBcCisgICAgc29jYXQgXAorICAgIHN1YnZlcnNpb24gXAorICAgIHN1ZG8gXAorICAgIHN5c3N0YXQgXAorICAgIHRhciBcCisgICAgdGNsIFwKKyAgICB0ZXhpMmh0bWwgXAorICAgIHRleGluZm8gXAorICAgIHVuemlwIFwKKyAgICB1c2J1dGlscyBcCisgICAgd2F0Y2hkb2cgXAorICAgIHdnZXQgXAorICAgIHdoaWNoIFwKKyAgICB4aW5ldGQgXAorICAgIHppcCBcCisgICAgemxpYiBcCisgICAgeHogXAorICAgICIKKworCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtZ3JhcGhpY3MgPSAiXAorICAgIGJ1aWxkZXIgXAorICAgIGxpYmdsIFwKKyAgICBsaWJnbC1kZXYgXAorICAgIGxpYmdsdSBcCisgICAgbGliZ2x1LWRldiBcCisgICAgbGlic2RsIFwKKyAgICBsaWJzZGwtZGV2IFwKKyAgICBsaWJ4MTEtZGV2IFwKKyAgICBweXRob24tcHlndGsgXAorICAgIGd0ay10aGVtZS1jbGVhcmxvb2tzIFwKKyAgICB4ZGctdXRpbHMgXAorICAgIGVwaXBoYW55IFwKKyAgICBsZWFmcGFkIFwKKyAgICBwY21hbmZtIFwKKyAgICB2dGUgXAorICAgICIKK1BUSCA9ICJwdGgiCitQVEhfbGliYy11Y2xpYmMgPSAiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzLzAwMDEtcHNwbGFzaC1mYi1Db252ZXJ0LXBzcGxhc2hfZmJfcGxvdF9waXhlbC10by1hLXN0YXRpYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcHNwbGFzaC9maWxlcy8wMDAxLXBzcGxhc2gtZmItQ29udmVydC1wc3BsYXNoX2ZiX3Bsb3RfcGl4ZWwtdG8tYS1zdGF0aWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNiM2M2YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcHNwbGFzaC9maWxlcy8wMDAxLXBzcGxhc2gtZmItQ29udmVydC1wc3BsYXNoX2ZiX3Bsb3RfcGl4ZWwtdG8tYS1zdGF0aWMucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorRnJvbSA4ZjVkZTEyY2M3NWJmYWE4NDAwYWRmMzJmMzBjMDE1ZDhmODEzNTQwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMjIgQXVnIDIwMTUgMDc6MTI6MjAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gcHNwbGFzaC1mYjogQ29udmVydCBwc3BsYXNoX2ZiX3Bsb3RfcGl4ZWwoKSB0byBhIHN0YXRpYworIGlubGluZQorCitUaGlzIGZ1bmN0aW9uIGlzIG5vdCB1c2VkIG91dHNpZGUgcHNwbGFzaC1mYi5jIGFuZCBieSBtYWtpbmcgaXQKK3N0YXRpYyBpbmxpbmUgd2Uga2VlcCB0aGUgcGVyZm9ybWFuY2UgYW5kIGFsc28gbWFrZSBpdCBwb3J0YWJsZSBhY3Jvc3MKK211bHRpcGxlIGNvbXBpbGVycyBhbmQgZ2NjIHZlcnNpb25zCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgcHNwbGFzaC1mYi5jIHwgMiArLQorIHBzcGxhc2gtZmIuaCB8IDggLS0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvcHNwbGFzaC1mYi5jIGIvcHNwbGFzaC1mYi5jCitpbmRleCBiZDljZDlkLi42ZDIzNWRiIDEwMDY0NAorLS0tIGEvcHNwbGFzaC1mYi5jCisrKysgYi9wc3BsYXNoLWZiLmMKK0BAIC0yNjAsNyArMjYwLDcgQEAgcHNwbGFzaF9mYl9uZXcgKGludCBhbmdsZSkKKyAKKyAjZGVmaW5lIE9GRlNFVChmYix4LHkpICgoKHkpICogKGZiKS0+c3RyaWRlKSArICgoeCkgKiAoKGZiKS0+YnBwID4+IDMpKSkKKyAKKy1pbmxpbmUgdm9pZAorK3N0YXRpYyBpbmxpbmUgdm9pZAorIHBzcGxhc2hfZmJfcGxvdF9waXhlbCAoUFNwbGFzaEZCICAgICpmYiwKKyAJCSAgICAgICBpbnQgICAgICAgICAgeCwKKyAJCSAgICAgICBpbnQgICAgICAgICAgeSwKK2RpZmYgLS1naXQgYS9wc3BsYXNoLWZiLmggYi9wc3BsYXNoLWZiLmgKK2luZGV4IDQyNTkyZWQuLmM2YzMxNDQgMTAwNjQ0CistLS0gYS9wc3BsYXNoLWZiLmgKKysrKyBiL3BzcGxhc2gtZmIuaAorQEAgLTU3LDE0ICs1Nyw2IEBAIHBzcGxhc2hfZmJfZGVzdHJveSAoUFNwbGFzaEZCICpmYik7CisgUFNwbGFzaEZCKgorIHBzcGxhc2hfZmJfbmV3IChpbnQgYW5nbGUpOworIAorLWlubGluZSB2b2lkCistcHNwbGFzaF9mYl9wbG90X3BpeGVsIChQU3BsYXNoRkIgICAgKmZiLCAKKy0JCSAgICAgICBpbnQgICAgICAgICAgeCwgCistCQkgICAgICAgaW50ICAgICAgICAgIHksIAorLQkJICAgICAgIHVpbnQ4ICAgICAgICByZWQsCistCQkgICAgICAgdWludDggICAgICAgIGdyZWVuLAorLQkJICAgICAgIHVpbnQ4ICAgICAgICBibHVlKTsKKy0KKyB2b2lkCisgcHNwbGFzaF9mYl9kcmF3X3JlY3QgKFBTcGxhc2hGQiAgICAqZmIsIAorIAkJICAgICAgaW50ICAgICAgICAgIHgsIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvZmlsZXMvcHNwbGFzaC1pbml0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzL3BzcGxhc2gtaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NmM4NWU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzL3BzcGxhc2gtaW5pdApAQCAtMCwwICsxLDI5IEBACisjIS9iaW4vc2ggCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICAgICBwc3BsYXNoCisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIyMgRU5EIElOSVQgSU5GTworCityZWFkIENNRExJTkUgPCAvcHJvYy9jbWRsaW5lCitmb3IgeCBpbiAkQ01ETElORTsgZG8KKyAgICAgICAgY2FzZSAkeCBpbgorICAgICAgICBwc3BsYXNoPWZhbHNlKQorCQllY2hvICJCb290IHNwbGFzaHNjcmVlbiBkaXNhYmxlZCIgCisJCWV4aXQgMDsKKyAgICAgICAgICAgICAgICA7OworICAgICAgICBlc2FjCitkb25lCisKK2V4cG9ydCBUTVBESVI9L21udC8ucHNwbGFzaAorbW91bnQgdG1wZnMgLXQgdG1wZnMgJFRNUERJUiAtbyxzaXplPTQwaworCityb3RhdGlvbj0wCitpZiBbIC1lIC9ldGMvcm90YXRpb24gXTsgdGhlbgorCXJlYWQgcm90YXRpb24gPCAvZXRjL3JvdGF0aW9uCitmaQorCisvdXNyL2Jpbi9wc3BsYXNoIC0tYW5nbGUgJHJvdGF0aW9uICYKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzL3BzcGxhc2gtcG9reS1pbWcuaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcHNwbGFzaC9maWxlcy9wc3BsYXNoLXBva3ktaW1nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1NmFhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcHNwbGFzaC9maWxlcy9wc3BsYXNoLXBva3ktaW1nLmgKQEAgLTAsMCArMSwxMjU5IEBACisvKiBHZGtQaXhidWYgUkdCIEMtU291cmNlIGltYWdlIGR1bXAgMS1ieXRlLXJ1bi1sZW5ndGgtZW5jb2RlZCAqLworCisjZGVmaW5lIFBPS1lfSU1HX1JPV1NUUklERSAoMTkyMCkKKyNkZWZpbmUgUE9LWV9JTUdfV0lEVEggKDY0MCkKKyNkZWZpbmUgUE9LWV9JTUdfSEVJR0hUICg0ODApCisjZGVmaW5lIFBPS1lfSU1HX0JZVEVTX1BFUl9QSVhFTCAoMykgLyogMzpSR0IsIDQ6UkdCQSAqLworI2RlZmluZSBQT0tZX0lNR19STEVfUElYRUxfREFUQSAoKHVpbnQ4KikgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMzdcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NiIgXAorICAiXDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzYiIFwKKyAgIlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjEiIFwKKyAgIlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzQiIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0IiBcCisgICJcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3IiBcCisgICJcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3NyIgXAorICAiXDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNjNcMzc2XDM3N1wzNzRcM1wzNzNcMzc1IiBcCisgICJcMzcyXDM2MFwzNjZcMzcwXDM1M1wzNjBcMzYzXDIwMlwzNDdcMzU1XDM1N1w1XDM0NlwzNTRcMzU2XDM0N1wzNTVcMzU3IiBcCisgICJcMzUxXDM1NlwzNjBcMzYwXDM2NlwzNzBcMzcxXDM3M1wzNzBcMzYzXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM1M1wzNzZcMzc3XDM3NFwxMFwzNTYiIFwKKyAgIlwzNjNcMzY2XDMyNFwzMzFcMzMzXDI3N1wzMDRcMzA2XDI1MlwyNjJcMjcyXDIyN1wyMzdcMjQ3fVwyMjBcMjMzcFwyMDMiIFwKKyAgIlwyMTZld1wyMDJcMjEyXW96XDEwZHZcMjAxblwyMDFcMjE0flwyMTVcMjIzXDIxNlwyMzZcMjQ0XDI0N1wyNTdcMjY3IiBcCisgICJcMjc0XDMwMVwzMDNcMzIwXDMyNlwzMzBcMzUyXDM1N1wzNjJcMzUzXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM0NlwzNzZcMzc3XDM3NFw1XDM2NiIgXAorICAiXDM3MFwzNjRcMzIwXDMyNlwzMzBcMjU1XDI2NVwyNzVcMjEwXDIyN1wyMzVqfVwyMTBcMjMyXW96XDVneVwyMDRcMjA0IiBcCisgICJcMjIzXDIzMVwyNTBcMjYwXDI3MFwzMTRcMzIxXDMyNFwzNTVcMzYyXDM2NVwzNDZcMzc2XDM3N1wzNzRcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzQyXDM3NlwzNzciIFwKKyAgIlwzNzRcNVwzNzNcMzc1XDM3MlwzMjdcMzM0XDMzN1wyNTNcMjYzXDI3M3hcMjEzXDIyN15we1wyNDNdb3pcNHFcMjA0IiBcCisgICJcMjE3XDI0MlwyNTJcMjYyXDMyMFwzMjZcMzMwXDM2NVwzNzJcMzc1XDM0MlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMzdcMzc2XDM3N1wzNzQiIFwKKyAgIlw0XDM3MVwzNzNcMzcwXDMxN1wzMjRcMzI3XDIyNVwyNDVcMjUzZXdcMjAyXDI1Ml1velw0YnRcMTc3XDIxMVwyMzBcMjM2IiBcCisgICJcMzA2XDMxNFwzMTZcMzY3XDM3MVwzNjZcMzM3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMzNVwzNzZcMzc3XDM3NFwzXDMzM1wzNDBcMzQzXDIzNiIgXAorICAiXDI0NlwyNTZmeFwyMDNcMjYwXW96XDNidFwxNzdcMjI1XDIzNVwyNDVcMzIwXDMyNlwzMzBcMzM1XDM3NlwzNzdcMzc0IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMzMiIgXAorICAiXDM3NlwzNzdcMzc0XDNcMzY3XDM3MVwzNjZcMjc2XDMwM1wzMDV1XDIxMFwyMjRcMjY2XW96XDNtXDIwMFwyMTNcMjU3IiBcCisgICJcMjY3XDI3N1wzNTVcMzYyXDM2NVwzMzJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzMwXDM3NlwzNzdcMzc0XDNcMzUzXDM2MFwzNjNcMjUyXDI2MiIgXAorICAiXDI3MmZ4XDIwM1wyNzJdb3pcM2FzflwyMzBcMjUwXDI1NlwzNDJcMzQ3XDM1MlwzMzBcMzc2XDM3N1wzNzRcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzI2XDM3NlwzNzciIFwKKyAgIlwzNzRcM1wzNTJcMzU3XDM2MlwyMzZcMjQ2XDI1NmFzflwyNzZdb3pcM15we1wyMTZcMjM2XDI0NFwzNDFcMzQ2XDM1MSIgXAorICAiXDMyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wzMjRcMzc2XDM3N1wzNzRcM1wzNTRcMzYxXDM2NFwyNDZcMjU2XDI2NmFzflwzMDJdb3pcM15wIiBcCisgICJ7XDIyN1wyMzdcMjQ3XDM0NlwzNTRcMzU2XDMyNFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMjJcMzc2XDM3N1wzNzRcM1wzNzJcMzc0XDM3MVwyNjUiIFwKKyAgIlwyNzZcMzA2ZnhcMjAzXDMwNl1velwzYXN+XDI1MFwyNjBcMjcwXDM2MlwzNjdcMzcxXDMyMlwzNzZcMzc3XDM3NFwzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMjFcMzc2IiBcCisgICJcMzc3XDM3NFwyXDMyMFwzMjZcMzMwcFwyMDNcMjE2XDMxMl1velwyaHpcMjA1XDMwMlwzMDdcMzEyXDMyMVwzNzZcMzc3IiBcCisgICJcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3NyIgXAorICAiXDMxN1wzNzZcMzc3XDM3NFwyXDM1NlwzNjNcMzY2XDIzMVwyNDFcMjUxXDMxNl1velwyXDIwNFwyMjNcMjMxXDM0NVwzNTIiIFwKKyAgIlwzNTVcMzE3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDMxNlwzNzZcMzc3XDM3NFwyXDMxMVwzMTZcMzIxaXtcMjA2XDMyMF1velwyYnRcMTc3XDI2NCIgXAorICAiXDI3NFwzMDVcMzE2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDMxNFwzNzZcMzc3XDM3NFwyXDM2MlwzNjdcMzcxXDIyNlwyNDZcMjU0XDMyNF1vIiBcCisgICJ6XDJcMjA2XDIyNVwyMzNcMzUzXDM2MFwzNjNcMzE0XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMxM1wzNzZcMzc3XDM3NFwyXDMzNFwzNDJcMzQ0b1wyMDIiIFwKKyAgIlwyMTVcMzI2XW96XDJneVwyMDRcMzE1XDMyMlwzMjVcMzEzXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMxMlwzNzZcMzc3XDM3NFwyXDMwMlwzMDdcMzEyIiBcCisgICJhc35cMzMwXW96XDNecHtcMjU0XDI2NFwyNzRcMzczXDM3NVwzNzJcMzExXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMxMFwzNzZcMzc3XDM3NFwyXDM3MiIgXAorICAiXDM3NFwzNzFcMjM2XDI0NlwyNTZcMzM0XW96XDJcMjEwXDIyN1wyMzVcMzYwXDM2NlwzNzBcMzEwXDM3NlwzNzdcMzc0IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMwNyIgXAorICAiXDM3NlwzNzdcMzc0XDJcMzYwXDM2NlwzNzBcMjA1XDIyNFwyMzJcMzM2XW96XDJzXDIwNlwyMjFcMzQ3XDM1NVwzNTciIFwKKyAgIlwzMDdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMzA2XDM3NlwzNzdcMzc0XDJcMzQ3XDM1NVwzNTd0XDIwN1wyMjJcMzQwXW96XDJpe1wyMDZcMzMzIiBcCisgICJcMzQwXDM0M1wzMDZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMzA1XDM3NlwzNzdcMzc0XDJcMzQzXDM1MFwzNTNqfVwyMTBcMjUxXW96XDdidFwxNzciIFwKKyAgIndcMjEyXDIyNlwyMTVcMjM0XDI0M1wyMzZcMjQ2XDI1NlwyNDZcMjU2XDI2NlwyNTRcMjY0XDI3NFwyNjRcMjc0XDMwNSIgXAorICAiXDIwMlwzMDBcMzA1XDMxMFw3XDI2NFwyNzRcMzA1XDI1NVwyNjVcMjc1XDI1MFwyNjBcMjcwXDIzM1wyNTJcMjYxXDIyMiIgXAorICAiXDI0MVwyNDd+XDIxNVwyMjNld1wyMDJcMjUxXW96XDJjdVwyMDBcMzIyXDMzMFwzMzJcMzA1XDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMwNFwzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzM3XDM0NFwzNDZpe1wyMDZcMjQ1XW96XDVqfVwyMTBcMjMwXDI0MFwyNTBcMjcwXDMwMFwzMTFcMzIyIiBcCisgICJcMzMwXDMzMlwzNTFcMzU2XDM2MFwyMjBcMzc2XDM3N1wzNzRcNVwzNTRcMzYxXDM2NFwzMjZcMzMzXDMzNVwzMDBcMzA1IiBcCisgICJcMzEwXDIzNlwyNDZcMjU2cFwyMDNcMjE2XDI0NV1velwyYXN+XDMxNlwzMjNcMzI2XDMwNFwzNzZcMzc3XDM3NFwzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMDNcMzc2IiBcCisgICJcMzc3XDM3NFwyXDMzNVwzNDNcMzQ1Z3lcMjA0XDI0Ml1velw0ZXdcMjAyXDIyMlwyNDFcMjQ3XDI3NlwzMDNcMzA1XDM0MiIgXAorICAiXDM0N1wzNTJcMjMyXDM3NlwzNzdcMzc0XDRcMzUyXDM1N1wzNjJcMzA0XDMxMVwzMTRcMjMzXDI0M1wyNTNqfVwyMTAiIFwKKyAgIlwyNDJdb3pcMmFzflwzMTNcMzIwXDMyMlwzMDNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzAyXDM3NlwzNzdcMzc0XDJcMzQxXDM0NlwzNTFoeiIgXAorICAiXDIwNVwyNDBdb3pcNF9xfFwyMTFcMjMwXDIzNlwzMDdcMzE1XDMxN1wzNzBcMzcyXDM2N1wyNDBcMzc2XDM3N1wzNzQiIFwKKyAgIlw0XDM3M1wzNzVcMzcyXDMyMFwzMjZcMzMwXDIzMVwyNDFcMjUxYnRcMTc3XDI0MF1velwyYXN+XDMxN1wzMjRcMzI3IiBcCisgICJcMzAyXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDMwMVwzNzZcMzc3XDM3NFwyXDM0M1wzNTBcMzUzaXtcMjA2XDIzN11velwzcVwyMDRcMjE3XDI2NiIgXAorICAiXDI3N1wzMDdcMzU0XDM2MVwzNjRcMjQ2XDM3NlwzNzdcMzc0XDNcMzY2XDM3MFwzNjRcMzAzXDMxMFwzMTNcMTc3XDIxNiIgXAorICAiXDIyNFwyMzddb3pcMmJ0XDE3N1wzMjVcMzMyXDMzNFwzMDFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzAwXDM3NlwzNzdcMzc0XDJcMzU1XDM2MlwzNjUiIFwKKyAgImxcMTc3XDIxMlwyMzZdb3pcM3VcMjEwXDIyNFwzMDdcMzE1XDMxN1wzNzNcMzc1XDM3MlwyNTNcMzc2XDM3N1wzNzRcMiIgXAorICAiXDMyNFwzMzFcMzMzXDIwNFwyMjNcMjMxXDIzNl1velwyZXdcMjAyXDM0MVwzNDZcMzUxXDMwMFwzNzZcMzc3XDM3NFwzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNzdcMzc2IiBcCisgICJcMzc3XDM3NFwyXDM2NVwzNzJcMzc1XDE3N1wyMTZcMjI0XDIzNV1velwyflwyMTVcMjIzXDMxNVwzMjJcMzI1XDI2MCIgXAorICAiXDM3NlwzNzdcMzc0XDJcMzMxXDMzNlwzNDFcMjExXDIzMFwyMzZcMjM1XW96XDJsXDE3N1wyMTJcMzUzXDM2MFwzNjMiIFwKKyAgIlwyNzdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMjc3XDM3NlwzNzdcMzc0XDFcMjE0XDIzM1wyNDJcMjM0XW96XDJpe1wyMDZcMzA1XDMxMlwzMTUiIFwKKyAgIlwyNjRcMzc2XDM3N1wzNzRcMlwzMjRcMzMxXDMzM3FcMjA0XDIxN1wyMzRdb3pcMnVcMjEwXDIyNFwzNjdcMzcxXDM2NiIgXAorICAiXDI3NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wyNzZcMzc2XDM3N1wzNzRcMVwyNTdcMjY3XDI3N1wyMzNdb3pcM15we1wyNDJcMjUyXDI2MlwzNjIiIFwKKyAgIlwzNjdcMzcxXDI2NlwzNzZcMzc3XDM3NFwzXDM3MlwzNzRcMzcxXDI2MVwyNzFcMzAyYnRcMTc3XDIzM11velwxXDIyNSIgXAorICAiXDIzNVwyNDVcMjc2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDI3NVwzNzZcMzc3XDM3NFwyXDMxN1wzMjRcMzI3XnB7XDIzMl1velwyd1wyMTJcMjI2IiBcCisgICJcMzM1XDM0M1wzNDVcMjcyXDM3NlwzNzdcMzc0XDJcMzUxXDM1NlwzNjBcMjExXDIzMFwyMzZcMjMzXW96XDFcMjY0XDI3NCIgXAorICAiXDMwNVwyNzVcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjc0XDM3NlwzNzdcMzc0XDJcMzQ3XDM1NVwzNTdld1wyMDJcMjMyXW96XDJcMjQyXDI1MiIgXAorICAiXDI2MlwzNzFcMzczXDM3MFwyMjVcMzc2XDM3N1wzNzRcMTBcMzM2XDM2N1wzNzRcMjYyXDM1NVwzNzBcMjIwXDM0M1wzNjEiIFwKKyAgIm1cMzMyXDM2MUdcMzE3XDM1MyxcMzExXDM1MihcMzA3XDM1MCNcMzA0XDM0NlwyMDJcMFwzMDFcMzUwXDEwXDBcMzA0IiBcCisgICJcMzUyKFwzMDdcMzUwLFwzMTFcMzUyQlwzMTRcMzQ3aVwzMjZcMzU2XDIwN1wzNDFcMzY0XDI2MFwzNTNcMzY2XDMzMyIgXAorICAiXDM2NFwzNzFcMjI2XDM3NlwzNzdcMzc0XDJcMjY2XDI3N1wzMDdhc35cMjMxXW96XDJfcXxcMzI3XDMzNFwzMzdcMjc0IiBcCisgICJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3NyIgXAorICAiXDM3N1wzNzdcMjczXDM3NlwzNzdcMzc0XDJcMzczXDM3NVwzNzJ9XDIyMFwyMzNcMjMxXW96XDJld1wyMDJcMzEzXDMyMCIgXAorICAiXDMyMlwyMjNcMzc2XDM3N1wzNzRcNFwzMzRcMzY1XDM3MlwyMzNcMzQ1XDM2NE1cMzIzXDM1N1wwXDMwNFwzNTJcMjIyIiBcCisgICJcMjVcMjc0XDM0NFw0XDBcMzAxXDM1MEpcMzIxXDM1NVwyMTFcMzQyXDM2NVwzMTRcMzYxXDM3MlwyMjNcMzc2XDM3NyIgXAorICAiXDM3NFwyXDMzMlwzMzdcMzQybVwyMDBcMjEzXDIzMV1velwybFwxNzdcMjEyXDM2MFwzNjZcMzcwXDI3M1wzNzZcMzc3IiBcCisgICJcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3NyIgXAorICAiXDI3M1wzNzZcMzc3XDM3NFwxXDI1N1wyNjdcMjc3XDIzMV1velwyeFwyMTNcMjI3XDM0N1wzNTVcMzU3XDIyMVwzNzYiIFwKKyAgIlwzNzdcMzc0XDNcMzM2XDM2N1wzNzRcMjA2XDM0MFwzNjMqXDMxMFwzNTFcMjMyXDI1XDI3NFwzNDRcMyNcMzA0XDM0NiIgXAorICAid1wzMzNcMzU2XDMxNlwzNjNcMzc0XDIyMVwzNzZcMzc3XDM3NFwyXDM2MFwzNjZcMzcwXDIxNFwyMzNcMjQyXDIzMV0iIFwKKyAgIm96XDFcMjI3XDIzN1wyNDdcMjczXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI3MlwzNzZcMzc3XDM3NFwyXDMzNVwzNDNcMzQ1X3F8XDIzMF1veiIgXAorICAiXDJcMjEwXDIyN1wyMzVcMzY0XDM3MVwzNzRcMjE3XDM3NlwzNzdcMzc0XDNcMzcwXDM3NlwzNzdcMjU2XDM1MFwzNjQiIFwKKyAgIkJcMzE0XDM0N1wyNDBcMjVcMjc0XDM0NFwzKlwzMTBcMzUxXDIzM1wzNDVcMzY0XDM2N1wzNzVcMzc3XDIxN1wzNzZcMzc3IiBcCisgICJcMzc0XDJcMzczXDM3NVwzNzJcMjQyXDI1MlwyNjJcMjMxXW96XDFcMzA1XDMxMlwzMTVcMjcyXDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI3MVwzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzcyXDM3NFwzNzF3XDIxMlwyMjZcMjMwXW96XDJcMjMxXDI0MVwyNTFcMzcyXDM3NFwzNzFcMjE2IiBcCisgICJcMzc2XDM3N1wzNzRcM1wzNjdcMzc1XDM3N1wyMzNcMzQ1XDM2NChcMzA3XDM1MFwyNDRcMjVcMjc0XDM0NFwzXDBcMzAyIiBcCisgICJcMzUxXDIwNlwzNDBcMzYzXDM1NlwzNzNcMzc0XDIxN1wzNzZcMzc3XDM3NFwxXDI1N1wyNjdcMjc3XDIzMF1velwyaCIgXAorICAielwyMDVcMzU2XDM2M1wzNjZcMjcxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI3MVwzNzZcMzc3XDM3NFwxXDI1N1wyNjdcMjc3XDIzMF1velwxXDI0NiIgXAorICAiXDI1NlwyNjZcMjE3XDM3NlwzNzdcMzc0XDJcMjM3XDM1MFwzNjdcMFwzMDRcMzUyXDI1MFwyNVwyNzRcMzQ0XDNcMFwyNzYiIFwKKyAgIlwzNDVcMjA3XDM0MVwzNjRcMzcwXDM3NlwzNzdcMjE2XDM3NlwzNzdcMzc0XDJcMjc3XDMwNFwzMDZfcXxcMjI3XW96IiBcCisgICJcMVwyMzFcMjQxXDI1MVwyNzFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjcwXDM3NlwzNzdcMzc0XDJcMzQ2XDM1NFwzNTZidFwxNzdcMjI3XW96XDEiIFwKKyAgIlwyNTFcMjYxXDI3MVwyMTZcMzc2XDM3N1wzNzRcMlwzMTVcMzYyXDM3MzFcMzEzXDM1NFwyNTRcMjVcMjc0XDM0NFwyIiBcCisgICIoXDMwN1wzNTBcMjYyXDM1NVwzNzBcMjE2XDM3NlwzNzdcMzc0XDJcMzA1XDMxMlwzMTVecHtcMjI3XW96XDFcMzIyXDMzMCIgXAorICAiXDMzMlwyNzBcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjcwXDM3NlwzNzdcMzc0XDFcMjE1XDIzNFwyNDNcMjI3XW96XDFcMjMzXDI1MlwyNjFcMjE1IiBcCisgICJcMzc2XDM3N1wzNzRcM1wzNjdcMzc1XDM3N21cMzMyXDM2MVwwXDI3NlwzNDVcMjU3XDI1XDI3NFwzNDRcMkxcMzIyXDM1NiIgXAorICAiXDM1NlwzNzNcMzc0XDIxNVwzNzZcMzc3XDM3NFwxXDI3NFwzMDFcMzAzXDIyN11velwydFwyMDdcMjIyXDM3M1wzNzUiIFwKKyAgIlwzNzJcMjY3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDI2N1wzNzZcMzc3XDM3NFwxXDMyNVwzMzJcMzM0XDIyN11velwyXDIxNFwyMzNcMjQyXDM3MyIgXAorICAiXDM3NVwzNzJcMjE0XDM3NlwzNzdcMzc0XDJcMzMzXDM2NFwzNzEsXDMxMVwzNTJcMjYyXDI1XDI3NFwzNDRcMlwwXDMwNCIgXAorICAiXDM1MlwzMDFcMzU2XDM2NlwyMTVcMzc2XDM3N1wzNzRcMVwyNTJcMjYyXDI3MlwyMjddb3pcMVwyNzRcMzAxXDMwM1wyNjciIFwKKyAgIlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3IiBcCisgICJcMzc3XDM3N1wyNjdcMzc2XDM3N1wzNzRcMXZcMjExXDIyNVwyMjZdb3pcMlwyMDVcMjI0XDIzMlwzNjVcMzcyXDM3NSIgXAorICAiXDIxNFwzNzZcMzc3XDM3NFwyXDIzNlwzNDdcMzY2XDBcMjc2XDM0NVwyNjRcMjVcMjc0XDM0NFwzXDBcMjc2XDM0NVwyMDMiIFwKKyAgIlwzMzRcMzYwXDM3MFwzNzZcMzc3XDIxNFwzNzZcMzc3XDM3NFwxXDIzNlwyNDZcMjU2XDIyNl1velwyaHpcMjA1XDM2MiIgXAorICAiXDM2N1wzNzFcMjY2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDI2NlwzNzZcMzc3XDM3NFwxXDMwN1wzMTVcMzE3XDIyNl1velwyblwyMDFcMjE0IiBcCisgICJcMzYwXDM2NlwzNzBcMjE0XDM3NlwzNzdcMzc0XDFtXDMzMlwzNjFcMjcwXDI1XDI3NFwzNDRcMklcMzIwXDM1NFwzNjYiIFwKKyAgIlwzNzNcMzc2XDIxM1wzNzZcMzc3XDM3NFwyXDM3M1wzNzVcMzcyXDIwM1wyMjJcMjMwXDIyNl1velwxXDI1NFwyNjRcMjc0IiBcCisgICJcMjY2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDI2NVwzNzZcMzc3XDM3NFwyXDM3M1wzNzVcMzcyc1wyMDZcMjIxXDIyNV1velwyYXN+XDMzM1wzNDAiIFwKKyAgIlwzNDNcMjEzXDM3NlwzNzdcMzc0XDJcMzcwXDM3NlwzNzdNXDMyM1wzNTdcMjcyXDI1XDI3NFwzNDRcMiIiMVwzMTNcMzU0IiBcCisgICJcMzU2XDM3M1wzNzRcMjEzXDM3NlwzNzdcMzc0XDJcMzUzXDM2MFwzNjNpe1wyMDZcMjI1XW96XDJld1wyMDJcMzU3XDM2NSIgXAorICAiXDM2N1wyNjVcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjY1XDM3NlwzNzdcMzc0XDFcMzA1XDMxMlwzMTVcMjI2XW96XDFcMjY1XDI3NlwzMDZcMjEzIiBcCisgICJcMzc2XDM3N1wzNzRcMlwzNjZcMzczXDM3NkJcMzE0XDM0N1wyNzRcMjVcMjc0XDM0NFwyKFwzMDdcMzUwXDMzNlwzNjciIFwKKyAgIlwzNzRcMjEzXDM3NlwzNzdcMzc0XDJcMzIyXDMzMFwzMzJecHtcMjI1XW96XDFcMjUyXDI2MlwyNzJcMjY1XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjY1XDM3NlwzNzdcMzc0XDF1XDIxMFwyMjRcMjI1XW96XDFcMjE0XDIzM1wyNDJcMjEzXDM3NlwzNzdcMzc0XDJcMzY2IiBcCisgICJcMzczXDM3NkJcMzE0XDM0N1wyNzZcMjVcMjc0XDM0NFwyI1wzMDRcMzQ2XDMzN1wzNzBcMzc1XDIxM1wzNzZcMzc3XDM3NCIgXAorICAiXDFcMjUzXDI2M1wyNzNcMjI1XW96XDJmeFwyMDNcMzY3XDM3MVwzNjZcMjY0XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2NFwzNzZcMzc3XDM3NCIgXAorICAiXDFcMzIyXDMzMFwzMzJcMjI1XW96XDJpe1wyMDZcMzYwXDM2NlwzNzBcMjEyXDM3NlwzNzdcMzc0XDJcMzcwXDM3NlwzNzciIFwKKyAgIklcMzIwXDM1NFwzMDBcMjVcMjc0XDM0NFwyKlwzMTBcMzUxXDM1N1wzNzRcMzc1XDIxMlwzNzZcMzc3XDM3NFwyXDM3MyIgXAorICAiXDM3NVwzNzJ+XDIxNVwyMjNcMjI1XW96XDFcMjY0XDI3NFwzMDVcMjY0XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2NFwzNzZcMzc3XDM3NFwxXDIxMCIgXAorICAiXDIyN1wyMzVcMjI1XW96XDFcMzAzXDMxMFwzMTNcMjEzXDM3NlwzNzdcMzc0XDFpXDMyNlwzNTZcMzAyXDI1XDI3NFwzNDQiIFwKKyAgIlwyQlwzMTRcMzQ3XDM3MFwzNzZcMzc3XDIxMlwzNzZcMzc3XDM3NFwyXDMzNVwzNDNcMzQ1XnB7XDIyNF1velwybVwyMDAiIFwKKyAgIlwyMTNcMzczXDM3NVwzNzJcMjYzXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2M1wzNzZcMzc3XDM3NFwyXDM0NVwzNTJcMzU1XnB7XDIyNF1veiIgXAorICAiXDF+XDIyMVwyMzVcMjEzXDM3NlwzNzdcMzc0XDF5XDMzNlwzNjBcMzA0XDI1XDI3NFwzNDRcMU1cMzIzXDM1N1wyMTMiIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDI0MlwyNTJcMjYyXDIyNV1velwxXDMxNVwzMjJcMzI1XDI2M1wzNzZcMzc3XDM3NFwzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjNcMzc2XDM3NyIgXAorICAiXDM3NFwxXDI1MlwyNjJcMjcyXDIyNF1velwyX3F8XDM0MVwzNDZcMzUxXDIxMlwzNzZcMzc3XDM3NFwyXDI3NFwzNTUiIFwKKyAgIlwzNzNcMFwyNzZcMzQ1XDMwNVwyNVwyNzRcMzQ0XDFcMjIwXDM0M1wzNjFcMjEyXDM3NlwzNzdcMzc0XDJcMzYwXDM2NiIgXAorICAiXDM3MGl7XDIwNlwyMjRdb3pcMVwyMTFcMjMwXDIzNlwyNjNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYyXDM3NlwzNzdcMzc0XDJcMzcyXDM3NFwzNzEiIFwKKyAgIml7XDIwNlwyMjRdb3pcMVwyNTBcMjYwXDI3MFwyMTJcMzc2XDM3N1wzNzRcMlwzNTBcMzcxXDM3N1wwXDMwNFwzNTJcMzA2IiBcCisgICJcMjVcMjc0XDM0NFwyXDBcMjc2XDM0NVwzMTZcMzYzXDM3NFwyMTJcMzc2XDM3N1wzNzRcMVwzMDNcMzEwXDMxM1wyMjQiIFwKKyAgIl1velwyXnB7XDM1MlwzNTdcMzYyXDI2MlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjJcMzc2XDM3N1wzNzRcMVwzMTVcMzIyXDMyNVwyMjRdbyIgXAorICAielwyZHZcMjAxXDM1N1wzNjVcMzY3XDIxMlwzNzZcMzc3XDM3NFwxR1wzMTdcMzUzXDI0MFwyNVwyNzRcMzQ0XDNcMFwzMDIiIFwKKyAgIlwzNTEsXDMxMVwzNTJKXDMyMVwzNTVcMjAzTFwzMjJcMzU2XDJCXDMxNFwzNDcjXDMwNFwzNDZcMjQwXDI1XDI3NFwzNDQiIFwKKyAgIlwyKlwzMTBcMzUxXDM2N1wzNzVcMzc3XDIxMlwzNzZcMzc3XDM3NFwxcVwyMDRcMjE3XDIyNF1velwxXDI1N1wyNjdcMjc3IiBcCisgICJcMjYyXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDI2MlwzNzZcMzc3XDM3NFwxXDIzMFwyNDBcMjUwXDIyNF1velwxXDI0N1wyNTdcMjY3XDIxMlwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMjMzXDM0NVwzNjRcMjM1XDI1XDI3NFwzNDRcNCpcMzEwXDM1MW5cMzMzXDM2MlwyNzNcMzU0XDM3MSIgXAorICAiXDM2MFwzNzVcMzc2XDIxMFwzNzZcMzc3XDM3NFw0XDM1N1wzNzRcMzc1XDMwM1wzNjFcMzcwXDIwNlwzNDBcMzYzL1wzMTIiIFwKKyAgIlwzNTNcMjM1XDI1XDI3NFwzNDRcMXdcMzMzXDM1NlwyMTJcMzc2XDM3N1wzNzRcMVwzMDNcMzEwXDMxM1wyMjRdb3pcMSIgXAorICAidlwyMTFcMjI1XDI2MlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjFcMzc2XDM3N1wzNzRcMlwzNjVcMzcyXDM3NWR2XDIwMVwyMjNdb3pcMmFzfiIgXAorICAiXDM1M1wzNjBcMzYzXDIxMVwzNzZcMzc3XDM3NFwyXDM1NlwzNzNcMzc0XDBcMzAyXDM1MVwyMzJcMjVcMjc0XDM0NFwzIiBcCisgICJcMFwyNzZcMzQ1bVwzMzJcMzYxXDMzNVwzNjZcMzczXDIyMFwzNzZcMzc3XDM3NFwyXDMzNlwzNjdcMzc0KFwzMDdcMzUwIiBcCisgICJcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3XDM3NFwyMTJcMzc2XDM3N1wzNzRcMlwzNzJcMzc0XDM3MSIgXAorICAiblwyMDFcMjE0XDIyNF1velwxXDM0M1wzNTBcMzUzXDI2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjFcMzc2XDM3N1wzNzRcMVwzMTNcMzIwXDMyMiIgXAorICAiXDIyNF1velwxXDIzM1wyNTJcMjYxXDIxMlwzNzZcMzc3XDM3NFwxa1wzMjdcMzU3XDIzMVwyNVwyNzRcMzQ0XDNcMFwyNzYiIFwKKyAgIlwzNDVcMjA2XDM0MFwzNjNcMzU3XDM3NFwzNzVcMjIyXDM3NlwzNzdcMzc0XDFrXDMyN1wzNTdcMjMyXDI1XDI3NFwzNDQiIFwKKyAgIlwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwxXDI3NlwzMDNcMzA1XDIyNF1velwxXDI1N1wyNjciIFwKKyAgIlwyNzdcMjYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDI2MVwzNzZcMzc3XDM3NFwxXDIyNlwyNDZcMjU0XDIyM11velwyXnB7XDM0N1wzNTVcMzU3IiBcCisgICJcMjExXDM3NlwzNzdcMzc0XDJcMzE2XDM2M1wzNzRcMFwyNzZcMzQ1XDIzMFwyNVwyNzRcMzQ0XDJKXDMyMVwzNTVcMzM3IiBcCisgICJcMzcwXDM3NVwyMjNcMzc2XDM3N1wzNzRcMWtcMzI3XDM1N1wyMzJcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjciIFwKKyAgIlwzNzRcMjE1XDM3NlwzNzdcMzc0XDJcMzcwXDM3MlwzNjdpe1wyMDZcMjIzXW96XDFcMTc3XDIxNlwyMjRcMjYxXDM3NiIgXAorICAiXDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzciIFwKKyAgIlwzNzdcMjYxXDM3NlwzNzdcMzc0XDFrflwyMTFcMjIzXW96XDFcMjA1XDIyNFwyMzJcMjEyXDM3NlwzNzdcMzc0XDFKIiBcCisgICJcMzIxXDM1NVwyMjdcMjVcMjc0XDM0NFwyXDBcMjc2XDM0NVwyNTdcMzUxXDM2NVwyMjRcMzc2XDM3N1wzNzRcMW1cMzMyIiBcCisgICJcMzYxXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjE3XDM3NlwzNzdcMzc0XDFcMjQ2XDI1NiIgXAorICAiXDI2NlwyMjNdb3pcMl5we1wzNTZcMzYzXDM2NlwyNjBcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYwXDM3NlwzNzdcMzc0XDFcMzM1XDM0M1wzNDUiIFwKKyAgIlwyMjRdb3pcMVwzMDNcMzEwXDMxM1wyMTFcMzc2XDM3N1wzNzRcMlwzMzNcMzY0XDM3MVwwXDI3NlwzNDVcMjI2XDI1IiBcCisgICJcMjc0XDM0NFwyI1wzMDRcMzQ2XDMxNlwzNjNcMzc0XDIyNFwzNzZcMzc3XDM3NFwxbVwzMzJcMzYxXDIzMlwyNVwyNzQiIFwKKyAgIlwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3XDM3NFwyMjBcMzc2XDM3N1wzNzRcMVwzMzVcMzQzXDM0NVwyMjRdb3pcMVwzMDYiIFwKKyAgIlwzMTRcMzE2XDI2MFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjBcMzc2XDM3N1wzNzRcMVwyNjRcMjc0XDMwNVwyMjNdb3pcMmN1XDIwMFwzNjciIFwKKyAgIlwzNzFcMzY2XDIxMVwzNzZcMzc3XDM3NFwxaVwzMjZcMzU2XDIyNlwyNVwyNzRcMzQ0XDIsXDMxMVwzNTJcMzQ3XDM3MCIgXAorICAiXDM3NlwyMjRcMzc2XDM3N1wzNzRcMW1cMzMyXDM2MVwyMzJcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0IiBcCisgICJcMjIyXDM3NlwzNzdcMzc0XDF0XDIwN1wyMjJcMjIzXW96XDFcMjM2XDI0NlwyNTZcMjYwXDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MFwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMjE1XDIzNFwyNDNcMjIzXW96XDFcMjMxXDI0MVwyNTFcMjExXDM3NlwzNzdcMzc0XDJcMzQ3XDM3MCIgXAorICAiXDM3NlwwXDI3NlwzNDVcMjI1XDI1XDI3NFwzNDRcMipcMzEwXDM1MVwzNTdcMzc0XDM3NVwyMjRcMzc2XDM3N1wzNzQiIFwKKyAgIlwxbVwzMzJcMzYxXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjIzXDM3NlwzNzdcMzc0XDFcMjYxIiBcCisgICJcMjcxXDMwMlwyMjNdb3pcMXFcMjA0XDIxN1wyNjBcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYwXDM3NlwzNzdcMzc0XDFpe1wyMDZcMjIzXW96XDEiIFwKKyAgIlwzMTdcMzI0XDMyN1wyMTFcMzc2XDM3N1wzNzRcMVwyMDdcMzQxXDM2NFwyMjVcMjVcMjc0XDM0NFwyI1wzMDRcMzQ2IiBcCisgICJcMzM3XDM3MFwzNzVcMjI0XDM3NlwzNzdcMzc0XDFtXDMzMlwzNjFcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzYiIFwKKyAgIlwzNjdcMzc0XDIyNFwzNzZcMzc3XDM3NFwxXDM1MVwzNTZcMzYwXDIyNF1velwxXDM1NlwzNjNcMzY2XDI1N1wzNzZcMzc3IiBcCisgICJcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3NyIgXAorICAiXDI1N1wzNzZcMzc3XDM3NFwxXDM0NVwzNTJcMzU1XDIyM11velwyYXN+XDM3MFwzNzJcMzY3XDIxMVwzNzZcMzc3XDM3NCIgXAorICAiXDEsXDMxMVwzNTJcMjI0XDI1XDI3NFwzNDRcMlwwXDI3NlwzNDVcMzEzXDM2MFwzNzFcMjI0XDM3NlwzNzdcMzc0XDEiIFwKKyAgIm1cMzMyXDM2MVwyMzJcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0XDIyNlwzNzZcMzc3XDM3NFwxcVwyMDQiIFwKKyAgIlwyMTdcMjIzXW96XDFcMzE0XDMyMVwzMjRcMjU3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1N1wzNzZcMzc3XDM3NFwxXDMxMVwzMTZcMzIxXDIyMyIgXAorICAiXW96XDFcMjAyXDIyMVwyMjdcMjExXDM3NlwzNzdcMzc0XDFcMzIwXDM2NVwzNzZcMjI1XDI1XDI3NFwzNDRcMVwyMDciIFwKKyAgIlwzNDFcMzY0XDIyNFwzNzZcMzc3XDM3NFwxbVwzMzJcMzYxXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2NyIgXAorICAiXDM3NFwyMTRcMzc2XDM3N1wzNzRcMlwyMzZcMzQ3XDM2NlwyMzdcMzUwXDM2N1wyMTFcMzc2XDM3N1wzNzRcMVwyMzYiIFwKKyAgIlwyNDZcMjU2XDIyM11velwxXDI1NVwyNjVcMjc1XDI1N1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTdcMzc2XDM3N1wzNzRcMVwyNTRcMjY0XDI3NCIgXAorICAiXDIyM11velwxXDI1NVwyNjVcMjc1XDIxMVwzNzZcMzc3XDM3NFwxeVwzMzZcMzYwXDIyNFwyNVwyNzRcMzQ0XDIvXDMxMiIgXAorICAiXDM1M1wzNzBcMzc2XDM3N1wyMjNcMzc2XDM3N1wzNzRcMW1cMzMyXDM2MVwyMzJcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3IiBcCisgICJcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDNcMjM2XDM0N1wzNjZcMFwyNzZcMzQ1SlwzMjFcMzU1XDIxMVwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMzExXDMxNlwzMjFcMjIzXW96XDFcMjE1XDIzNFwyNDNcMjU3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1N1wzNzZcMzc3XDM3NCIgXAorICAiXDFcMjE0XDIzM1wyNDJcMjIzXW96XDFcMzI2XDMzM1wzMzVcMjExXDM3NlwzNzdcMzc0XDEsXDMxMVwzNTJcMjI0XDI1IiBcCisgICJcMjc0XDM0NFwxXDMxMlwzNTdcMzcwXDIyM1wzNzZcMzc3XDM3NFwxblwzMzNcMzYyXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNSIgXAorICAiXDM0N1wzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcNVwyMzZcMzQ3XDM2NlwwXDI3NlwzNDVcMjVcMjc0XDM0NFwwIiBcCisgICJcMjc2XDM0NVwzNjdcMzc1XDM3N1wyMTBcMzc2XDM3N1wzNzRcMlwzNTZcMzYzXDM2Nl5we1wyMjJdb3pcMW9cMjAyXDIxNSIgXAorICAiXDI1N1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wyNTdcMzc2XDM3N1wzNzRcMW9cMjAyXDIxNVwyMjJdb3pcMmFzflwzNjZcMzczXDM3NlwyMTBcMzc2IiBcCisgICJcMzc3XDM3NFwyXDM1N1wzNzRcMzc1XDBcMjc2XDM0NVwyMjNcMjVcMjc0XDM0NFwxSlwzMjFcMzU1XDIyM1wzNzZcMzc3IiBcCisgICJcMzc0XDFuXDMzM1wzNjJcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzQiIFwKKyAgIlwyXDIzNlwzNDdcMzY2XDBcMjc2XDM0NVwyMDNcMjVcMjc0XDM0NFwxXDI3NFwzNTVcMzczXDIxMVwzNzZcMzc3XDM3NCIgXAorICAiXDF1XDIxMFwyMjRcMjIyXW96XDJecHtcMzcwXDM3MlwzNjdcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwyXDM3M1wzNzUiIFwKKyAgIlwzNzJfcXxcMjIyXW96XDF1XDIxMFwyMjRcMjExXDM3NlwzNzdcMzc0XDFcMjYxXDM1NFwzNjdcMjI0XDI1XDI3NFwzNDQiIFwKKyAgIlwxXDMxMlwzNTdcMzcwXDIyMlwzNzZcMzc3XDM3NFwxblwzMzNcMzYyXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2IiBcCisgICJcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcMlwyMzZcMzQ3XDM2NlwwXDI3NlwzNDVcMjA0XDI1XDI3NFwzNDRcMVwyMDQiIFwKKyAgIlwzMzVcMzYxXDIxMVwzNzZcMzc3XDM3NFwxXDIzMFwyNDBcMjUwXDIyM11velwxXDM0MlwzNDdcMzUyXDI1NlwzNzZcMzc3IiBcCisgICJcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3NyIgXAorICAiXDI1NlwzNzZcMzc3XDM3NFwxXDM1MVwzNTZcMzYwXDIyM11velwxXDIyNVwyMzVcMjQ1XDIxMVwzNzZcMzc3XDM3NFwxIiBcCisgICJuXDMzM1wzNjJcMjIzXDI1XDI3NFwzNDRcMSxcMzExXDM1MlwyMjJcMzc2XDM3N1wzNzRcMW5cMzMzXDM2MlwyMzJcMjUiIFwKKyAgIlwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDJcMjM2XDM0N1wzNjZcMFwyNzZcMzQ1IiBcCisgICJcMjA1XDI1XDI3NFwzNDRcMUJcMzE0XDM0N1wyMTFcMzc2XDM3N1wzNzRcMVwyNTdcMjY3XDI3N1wyMjNdb3pcMVwzMTciIFwKKyAgIlwzMjRcMzI3XDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTZcMzc2XDM3N1wzNzRcMVwzMjZcMzMzXDMzNVwyMjNdb3pcMVwyNTNcMjYzXDI3MyIgXAorICAiXDIxMVwzNzZcMzc3XDM3NFwxQlwzMTRcMzQ3XDIyM1wyNVwyNzRcMzQ0XDFcMjExXDM0MlwzNjVcMjIxXDM3NlwzNzciIFwKKyAgIlwzNzRcMW5cMzMzXDM2MlwyMzJcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NCIgXAorICAiXDJcMjM2XDM0N1wzNjZcMFwyNzZcMzQ1XDIwNlwyNVwyNzRcMzQ0XDFcMFwzMDJcMzUxXDIxMVwzNzZcMzc3XDM3NFwxIiBcCisgICJcMzA3XDMxNVwzMTdcMjIzXW96XDFcMjc2XDMwM1wzMDVcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDMwNlwzMTQiIFwKKyAgIlwzMTZcMjIzXW96XDFcMzA1XDMxMlwzMTVcMjExXDM3NlwzNzdcMzc0XDEjXDMwNFwzNDZcMjIzXDI1XDI3NFwzNDRcMSIgXAorICAiXDMzN1wzNzBcMzc1XDIyMFwzNzZcMzc3XDM3NFwxd1wzMzNcMzU2XDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2IiBcCisgICJcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcMlwyMzZcMzQ3XDM2NlwwXDI3NlwzNDVcMjEwXDI1XDI3NFwzNDRcMVwzNTYiIFwKKyAgIlwzNzNcMzc0XDIxMFwzNzZcMzc3XDM3NFwxXDMzN1wzNDRcMzQ2XDIyM11velwxXDI1M1wyNjNcMjczXDI1NlwzNzZcMzc3IiBcCisgICJcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3NyIgXAorICAiXDI1NlwzNzZcMzc3XDM3NFwxXDI3NFwzMDFcMzAzXDIyM11velwxXDMzM1wzNDBcMzQzXDIxMFwzNzZcMzc3XDM3NFwyIiBcCisgICJcMzY3XDM3NVwzNzdcMFwyNzZcMzQ1XDIyMlwyNVwyNzRcMzQ0XDEoXDMwN1wzNTBcMjIwXDM3NlwzNzdcMzc0XDFcMjMxIiBcCisgICJcMzQyXDM2MlwyMzJcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNiIgXAorICAiXDM0N1wzNjZcMFwyNzZcMzQ1XDIxMVwyNVwyNzRcMzQ0XDFcMzAyXDM1N1wzNjdcMjEwXDM3NlwzNzdcMzc0XDJcMzY0IiBcCisgICJcMzcxXDM3NF5we1wyMjJdb3pcMVwyMzZcMjQ2XDI1NlwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDFcMjU3XDI2NyIgXAorICAiXDI3N1wyMjNdb3pcMVwzNTNcMzYwXDM2M1wyMTBcMzc2XDM3N1wzNzRcMVwzMTZcMzYzXDM3NFwyMjNcMjVcMjc0XDM0NCIgXAorICAiXDFcXFwzMjZcMzU1XDIxN1wzNzZcMzc3XDM3NFwyXDMyMFwzNjVcMzc2XDMxXDI3NVwzNDVcMjMxXDI1XDI3NFwzNDQiIFwKKyAgIlwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNlwzNDdcMzY2XDBcMjc2XDM0NVwyMTJcMjUiIFwKKyAgIlwyNzRcMzQ0XDFcMjM3XDM1MFwzNjdcMjExXDM3NlwzNzdcMzc0XDFneVwyMDRcMjIyXW96XDFcMjE2XDIzNlwyNDRcMjU2IiBcCisgICJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3NyIgXAorICAiXDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDFcMjQyXDI1MlwyNjJcMjIzXW96XDFcMzY2XDM3MFwzNjRcMjEwXDM3NlwzNzciIFwKKyAgIlwzNzRcMVwyNjJcMzU1XDM3MFwyMjNcMjVcMjc0XDM0NFwxXDIyMFwzNDNcMzYxXDIxN1wzNzZcMzc3XDM3NFwxSlwzMjEiIFwKKyAgIlwzNTVcMjMxXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcMlwyMzZcMzQ3IiBcCisgICJcMzY2XDBcMjc2XDM0NVwyMTNcMjVcMjc0XDM0NFwxXDIxMVwzNDJcMzY1XDIxMVwzNzZcMzc3XDM3NFwxbVwyMDBcMjEzIiBcCisgICJcMjIyXW96XDFcMjA0XDIyM1wyMzFcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDIyNlwyNDZcMjU0XDIyM11vIiBcCisgICJ6XDIxMVwzNzZcMzc3XDM3NFwxXDIzN1wzNTBcMzY3XDIyM1wyNVwyNzRcMzQ0XDFcMjYyXDM1NVwzNzBcMjE2XDM3NiIgXAorICAiXDM3N1wzNzRcMlwzNTBcMzcxXDM3N1wwXDI3NlwzNDVcMjMwXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3XDM3NCIgXAorICAiXDIxNFwzNzZcMzc3XDM3NFwyXDIzNlwzNDdcMzY2XDBcMjc2XDM0NVwyMTRcMjVcMjc0XDM0NFwxblwzMzNcMzYyXDIxMSIgXAorICAiXDM3NlwzNzdcMzc0XDF1XDIxMFwyMjRcMjIyXW96XDF5XDIxNFwyMzBcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NCIgXAorICAiXDFcMjMxXDI0MVwyNTFcMjIyXW96XDFjdVwyMDBcMjExXDM3NlwzNzdcMzc0XDFcMjMzXDM0NVwzNjRcMjIzXDI1XDI3NCIgXAorICAiXDM0NFwxXDMxNlwzNjNcMzc0XDIxNlwzNzZcMzc3XDM3NFwxXDIzNVwzNDZcMzY1XDIzMFwyNVwyNzRcMzQ0XDIlXDMwNSIgXAorICAiXDM0N1wzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcMlwyMzZcMzQ3XDM2NlwwXDI3NlwzNDVcMjE1XDI1XDI3NFwzNDQiIFwKKyAgIlwxa1wzMjdcMzU3XDIxMVwzNzZcMzc3XDM3NFwxXDIwMFwyMTdcMjI1XDIyMl1velwxdVwyMTBcMjI0XDI1NlwzNzZcMzc3IiBcCisgICJcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3NyIgXAorICAiXDI1NlwzNzZcMzc3XDM3NFwxXDIyMlwyNDFcMjQ3XDIyMl1velwxan1cMjEwXDIxMVwzNzZcMzc3XDM3NFwxXDIyMFwzNDMiIFwKKyAgIlwzNjFcMjIzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMTZcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NlwyMjdcMjVcMjc0IiBcCisgICJcMzQ0XDIjXDMwNFwzNDZcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDJcMjM2XDM0N1wzNjZcMFwyNzZcMzQ1XDIxNiIgXAorICAiXDI1XDI3NFwzNDRcMU1cMzIzXDM1N1wyMTFcMzc2XDM3N1wzNzRcMVwyMTBcMjI3XDIzNVwyMjJdb3pcMXNcMjA2XDIyMSIgXAorICAiXDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wyNTZcMzc2XDM3N1wzNzRcMVwyMTFcMjMwXDIzNlwyMjJdb3pcMW5cMjAxXDIxNFwyMTFcMzc2IiBcCisgICJcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIyM1wyNVwyNzRcMzQ0XDFcMzUwXDM3MVwzNzdcMjE2XDM3NlwzNzdcMzc0XDEiIFwKKyAgImlcMzI2XDM1NlwyMjZcMjVcMjc0XDM0NFwyI1wzMDRcMzQ2XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNiIgXAorICAiXDM0N1wzNjZcMFwyNzZcMzQ1XDIxN1wyNVwyNzRcMzQ0XDFNXDMyM1wzNTdcMjExXDM3NlwzNzdcMzc0XDFcMjE1XDIzNCIgXAorICAiXDI0M1wyMjJdb3pcMW1cMjAwXDIxM1wyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDFcMjIyXDI0MVwyNDdcMjIyXW8iIFwKKyAgInpcMWxcMTc3XDIxMlwyMTFcMzc2XDM3N1wzNzRcMVwyMDdcMzQxXDM2NFwyMjNcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0IiBcCisgICJcMjE2XDM3NlwzNzdcMzc0XDFuXDMzM1wzNjJcMjI1XDI1XDI3NFwzNDRcMiNcMzA0XDM0NlwzMzZcMzY3XDM3NFwyMTQiIFwKKyAgIlwzNzZcMzc3XDM3NFwyXDIzNVwzNDZcMzY1XDBcMjc2XDM0NVwyMjBcMjVcMjc0XDM0NFwxTVwzMjNcMzU3XDIxMVwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMjExXDIzMFwyMzZcMjIyXW96XDFzXDIwNlwyMjFcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NCIgXAorICAiXDFcMjMxXDI0MVwyNTFcMjIyXW96XDFld1wyMDJcMjExXDM3NlwzNzdcMzc0XDFcMjMxXDM0MlwzNjJcMjIzXDI1XDI3NCIgXAorICAiXDM0NFwxXDMyMFwzNjVcMzc2XDIxNlwzNzZcMzc3XDM3NFwxXDIyMVwzNDRcMzYyXDIyNFwyNVwyNzRcMzQ0XDIjXDMwNCIgXAorICAiXDM0NlwzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcMlwyMzVcMzQ2XDM2NVwwXDI3NlwzNDVcMjIxXDI1XDI3NFwzNDQiIFwKKyAgIlwxaVwzMjZcMzU2XDIxMVwzNzZcMzc3XDM3NFwxXDIwMlwyMjFcMjI3XDIyMl1velwxdVwyMTBcMjI0XDI1NlwzNzZcMzc3IiBcCisgICJcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3NyIgXAorICAiXDI1NlwzNzZcMzc3XDM3NFwxXDI0MlwyNTJcMjYyXDIyMl1velwxXnB7XDIxMVwzNzZcMzc3XDM3NFwxXDIzN1wzNTAiIFwKKyAgIlwzNjdcMjIzXDI1XDI3NFwzNDRcMVwzMDFcMzU2XDM2NlwyMTZcMzc2XDM3N1wzNzRcMVwzMzNcMzY0XDM3MVwyMjNcMjUiIFwKKyAgIlwyNzRcMzQ0XDIjXDMwNFwzNDZcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDJcMzU2XDM3M1wzNzRcMFwyNzZcMzQ1IiBcCisgICJcMjIyXDI1XDI3NFwzNDRcMW5cMzMzXDM2MlwyMTFcMzc2XDM3N1wzNzRcMXdcMjEyXDIyNlwyMjJdb3pcMVwyMDJcMjIxIiBcCisgICJcMjI3XDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNTZcMzc2XDM3N1wzNzRcMVwyNDZcMjU2XDI2NlwyMjNdb3pcMVwzNzBcMzcyXDM2N1wyMTAiIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDI2MFwzNTNcMzY2XDIyM1wyNVwyNzRcMzQ0XDFcMjMzXDM0NVwzNjRcMjE3XDM3NlwzNzdcMzc0IiBcCisgICJcMSxcMzExXDM1MlwyMjFcMjVcMjc0XDM0NFwyI1wzMDRcMzQ2XDMzNlwzNjdcMzc0XDIxNVwzNzZcMzc3XDM3NFwxXDMxMiIgXAorICAiXDM1N1wzNzBcMjIzXDI1XDI3NFwzNDRcMVwyMDRcMzM1XDM2MVwyMTFcMzc2XDM3N1wzNzRcMW9cMjAyXDIxNVwyMjIiIFwKKyAgIl1velwxXDIwNVwyMjRcMjMyXDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTZcMzc2XDM3N1wzNzRcMVwyNTJcMjYyXDI3MlwyMjNdb3pcMVwzNTUiIFwKKyAgIlwzNjJcMzY1XDIxMFwzNzZcMzc3XDM3NFwxXDMxNFwzNjFcMzcyXDIyM1wyNVwyNzRcMzQ0XDFtXDMzMlwzNjFcMjE3IiBcCisgICJcMzc2XDM3N1wzNzRcMVwyNzNcMzU0XDM3MVwyMjBcMjVcMjc0XDM0NFwyI1wzMDRcMzQ2XDMzNlwzNjdcMzc0XDIxNiIgXAorICAiXDM3NlwzNzdcMzc0XDFcMjMzXDM0NVwzNjRcMjIzXDI1XDI3NFwzNDRcMVwyMzZcMzQ3XDM2NlwyMTFcMzc2XDM3N1wzNzQiIFwKKyAgIlwxaXtcMjA2XDIyMl1velwxXDIxMVwyMzBcMjM2XDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTZcMzc2XDM3N1wzNzRcMVwyNjZcMjc3XDMwNyIgXAorICAiXDIyM11velwxXDM0MFwzNDVcMzUwXDIxMFwzNzZcMzc3XDM3NFwxXDM1NlwzNzNcMzc0XDIyM1wyNVwyNzRcMzQ0XDEiIFwKKyAgIixcMzExXDM1MlwyMjBcMzc2XDM3N1wzNzRcMWlcMzI2XDM1NlwyMTZcMjVcMjc0XDM0NFwyI1wzMDRcMzQ2XDMzNlwzNjciIFwKKyAgIlwzNzRcMjE3XDM3NlwzNzdcMzc0XDFcXFwzMjZcMzU1XDIyM1wyNVwyNzRcMzQ0XDFcMjc0XDM1NVwzNzNcMjEwXDM3NiIgXAorICAiXDM3N1wzNzRcMlwzNzJcMzc0XDM3MV9xfFwyMjJdb3pcMVwyMjZcMjQ2XDI1NFwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzciIFwKKyAgIlwzNzRcMVwzMDdcMzE1XDMxN1wyMjNdb3pcMVwzMTNcMzIwXDMyMlwyMTFcMzc2XDM3N1wzNzRcMVwwXDMwMlwzNTFcMjIyIiBcCisgICJcMjVcMjc0XDM0NFwyXDBcMjc2XDM0NVwzNTdcMzc0XDM3NVwyMTdcMzc2XDM3N1wzNzRcMlwzNzBcMzc2XDM3N0dcMzE3IiBcCisgICJcMzUzXDIxNFwyNVwyNzRcMzQ0XDIoXDMwN1wzNTBcMzM2XDM2N1wzNzRcMjIwXDM3NlwzNzdcMzc0XDElXDMwNVwzNDciIFwKKyAgIlwyMjNcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIxMFwzNzZcMzc3XDM3NFwxXDM0M1wzNTBcMzUzXDIyM11velwxIiBcCisgICJcMjU0XDI2NFwyNzRcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDMyN1wzMzRcMzM3XDIyM11velwxXDI1N1wyNjciIFwKKyAgIlwyNzdcMjExXDM3NlwzNzdcMzc0XDFCXDMxNFwzNDdcMjIzXDI1XDI3NFwzNDRcMVwyMzdcMzUwXDM2N1wyMjBcMzc2IiBcCisgICJcMzc3XDM3NFwzXDM3MFwzNzZcMzc3blwzMzNcMzYyXDMxXDI3NVwzNDVcMjExXDI1XDI3NFwzNDRcMkpcMzIxXDM1NSIgXAorICAiXDM1NlwzNzNcMzc0XDIyMFwzNzZcMzc3XDM3NFwxXDMxNVwzNjJcMzczXDIyM1wyNVwyNzRcMzQ0XDFcMFwzMDFcMzUwIiBcCisgICJcMjExXDM3NlwzNzdcMzc0XDFcMzE2XDMyM1wzMjZcMjIzXW96XDFcMjc2XDMwM1wzMDVcMjU2XDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMzQ2XDM1NFwzNTZcMjIzXW96XDFcMjI1XDI0NVwyNTNcMjExXDM3NlwzNzdcMzc0XDFrXDMyN1wzNTciIFwKKyAgIlwyMjNcMjVcMjc0XDM0NFwxR1wzMTdcMzUzXDIyMlwzNzZcMzc3XDM3NFwzXDMyMFwzNjVcMzc2WlwzMjVcMzU0XDBcMzAxIiBcCisgICJcMzUwXDIwNFwyNVwyNzRcMzQ0XDNcMFwyNzZcMzQ1R1wzMTdcMzUzXDI3NFwzNTVcMzczXDIyMlwzNzZcMzc3XDM3NCIgXAorICAiXDF3XDMzM1wzNTZcMjIzXDI1XDI3NFwzNDRcMSIiM1wzMTRcMzU1XDIxMVwzNzZcMzc3XDM3NFwxXDI2NFwyNzRcMzA1IiBcCisgICJcMjIzXW96XDFcMzE1XDMyMlwzMjVcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDM2NlwzNzNcMzc2XDIyM11vIiBcCisgICJ6XDF6XDIxNVwyMzFcMjExXDM3NlwzNzdcMzc0XDFcMjM3XDM1MFwzNjdcMjIzXDI1XDI3NFwzNDRcMlwzMVwyNzVcMzQ1IiBcCisgICJcMzM1XDM2NlwzNzNcMjIzXDM3NlwzNzdcMzc0XDJcMzcwXDM3NlwzNzdcMzE2XDM2M1wzNzRcMjAyXDI2MVwzNTRcMzY3IiBcCisgICJcMlwzMTNcMzYwXDM3MVwzNjZcMzczXDM3NlwyMjNcMzc2XDM3N1wzNzRcMlwzNzBcMzc2XDM3N1wwXDMwMlwzNTFcMjIzIiBcCisgICJcMjVcMjc0XDM0NFwxblwzMzNcMzYyXDIxMVwzNzZcMzc3XDM3NFwxXDIzMFwyNTBcMjU2XDIyM11velwxXDMzNFwzNDIiIFwKKyAgIlwzNDRcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDI1N1wzNzZcMzc3XDM3NFwxbVwyMDBcMjEzXDIyMl1velwxZXdcMjAyXDIxMVwzNzZcMzc3IiBcCisgICJcMzc0XDFcMzQ3XDM3MFwzNzZcMjI0XDI1XDI3NFwzNDRcMW1cMzMyXDM2MVwyNTRcMzc2XDM3N1wzNzRcMVwyMzNcMzQ1IiBcCisgICJcMzY0XDIyNFwyNVwyNzRcMzQ0XDFcMjYxXDM1NFwzNjdcMjExXDM3NlwzNzdcMzc0XDF9XDIyMFwyMzNcMjIzXW96XDEiIFwKKyAgIlwzNjZcMzcwXDM2NFwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU3XDM3NlwzNzdcMzc0XDFcMjExXDIzMFwyMzZcMjIzXW96XDFcMzM1XDM0MyIgXAorICAiXDM0NVwyMTFcMzc2XDM3N1wzNzRcMSVcMzA1XDM0N1wyMjNcMjVcMjc0XDM0NFwyXDBcMjc2XDM0NVwzMzZcMzY3XDM3NCIgXAorICAiXDI1MlwzNzZcMzc3XDM3NFwyXDM2N1wzNzVcMzc3I1wzMDRcMzQ2XDIyM1wyNVwyNzRcMzQ0XDJcMzFcMjc1XDM0NVwzNTciIFwKKyAgIlwzNzRcMzc1XDIxMFwzNzZcMzc3XDM3NFwyXDM3MFwzNzJcMzY3YXN+XDIyMl1velwxbVwyMDBcMjEzXDI1N1wzNzZcMzc3IiBcCisgICJcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3NyIgXAorICAiXDI1N1wzNzZcMzc3XDM3NFwxXDI1MVwyNjFcMjcxXDIyM11velwxXDI2NFwyNzRcMzA1XDIxMVwzNzZcMzc3XDM3NFwxIiBcCisgICJrXDMyN1wzNTdcMjI0XDI1XDI3NFwzNDRcMUxcMzIyXDM1NlwyNTJcMzc2XDM3N1wzNzRcMVwyMDZcMzQwXDM2M1wyMjQiIFwKKyAgIlwyNVwyNzRcMzQ0XDEiIjNcMzE0XDM1NVwyMTFcMzc2XDM3N1wzNzRcMVwzMjJcMzMwXDMzMlwyMjNdb3pcMVwyMTFcMjMwIiBcCisgICJcMjM2XDI1N1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNTdcMzc2XDM3N1wzNzRcMVwzMDVcMzEyXDMxNVwyMjNdb3pcMVwyMTFcMjMwXDIzNlwyMTEiIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDMwMVwzNTZcMzY2XDIyNVwyNVwyNzRcMzQ0XDFcMjYyXDM1NVwzNzBcMjUwXDM3NlwzNzdcMzc0IiBcCisgICJcMlwzMzRcMzY1XDM3MlwwXDI3NlwzNDVcMjI0XDI1XDI3NFwzNDRcMVwyMjBcMzQzXDM2MVwyMTFcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDI1MlwyNjJcMjcyXDIyM11velwxXDI1MVwyNjFcMjcxXDI1N1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTdcMzc2XDM3N1wzNzRcMVwzMzdcMzQ0IiBcCisgICJcMzQ2XDIyM11velwyZXdcMjAyXDM3M1wzNzVcMzcyXDIxMFwzNzZcMzc3XDM3NFwyXDM3MFwzNzZcMzc3I1wzMDRcMzQ2IiBcCisgICJcMjI0XDI1XDI3NFwzNDRcMlwwXDMwMlwzNTFcMzQ3XDM3MFwzNzZcMjQ2XDM3NlwzNzdcMzc0XDJcMzY3XDM3NVwzNzciIFwKKyAgIixcMzExXDM1MlwyMjRcMjVcMjc0XDM0NFwyXDBcMjc2XDM0NVwzMzdcMzcwXDM3NVwyMTFcMzc2XDM3N1wzNzRcMVwxNzciIFwKKyAgIlwyMTZcMjI0XDIyM11velwxXDMwNVwzMTJcMzE1XDI1N1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTdcMzc2XDM3N1wzNzRcMlwzNzNcMzc1XDM3MiIgXAorICAiZHZcMjAxXDIyM11velwxXDMzMVwzMzZcMzQxXDIxMVwzNzZcMzc3XDM3NFwxblwzMzNcMzYyXDIyNVwyNVwyNzRcMzQ0IiBcCisgICJcMkJcMzE0XDM0N1wzNzBcMzc2XDM3N1wyNDVcMzc2XDM3N1wzNzRcMWlcMzI2XDM1NlwyMjVcMjVcMjc0XDM0NFwxQiIgXAorICAiXDMxNFwzNDdcMjExXDM3NlwzNzdcMzc0XDJcMzYyXDM2N1wzNzFfcXxcMjIzXW96XDFcMzQ2XDM1NFwzNTZcMjU3XDM3NiIgXAorICAiXDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzciIFwKKyAgIlwzNzdcMjYwXDM3NlwzNzdcMzc0XDFcMjEwXDIyN1wyMzVcMjIzXW96XDFcMjQ2XDI1NlwyNjZcMjExXDM3NlwzNzdcMzc0IiBcCisgICJcMVwzMTZcMzYzXDM3NFwyMjZcMjVcMjc0XDM0NFwyTVwzMjNcMzU3XDM3MFwzNzZcMzc3XDI0M1wzNzZcMzc3XDM3NCIgXAorICAiXDFcMjA2XDM0MFwzNjNcMjI2XDI1XDI3NFwzNDRcMVwyNTZcMzUwXDM2NFwyMTFcMzc2XDM3N1wzNzRcMVwzMDFcMzA2IiBcCisgICJcMzExXDIyM11velwxa35cMjExXDI2MFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjBcMzc2XDM3N1wzNzRcMVwyNTdcMjY3XDI3N1wyMjNdb3pcMmkiIFwKKyAgIntcMjA2XDM3M1wzNzVcMzcyXDIxMVwzNzZcMzc3XDM3NFwxR1wzMTdcMzUzXDIyNlwyNVwyNzRcMzQ0XDJcXFwzMjZcMzU1IiBcCisgICJcMzcwXDM3NlwzNzdcMjQxXDM3NlwzNzdcMzc0XDFcMjIwXDM0M1wzNjFcMjI2XDI1XDI3NFwzNDRcMlwwXDMwNFwzNTIiIFwKKyAgIlwzNzBcMzc2XDM3N1wyMTFcMzc2XDM3N1wzNzRcMVwyMDRcMjIzXDIzMVwyMjNdb3pcMVwyMzBcMjQwXDI1MFwyNjBcMzc2IiBcCisgICJcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3NyIgXAorICAiXDM3N1wyNjBcMzc2XDM3N1wzNzRcMVwzMzFcMzM2XDM0MVwyMjRdb3pcMVwzMTdcMzI0XDMyN1wyMTFcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDMwMVwzNTZcMzY2XDIyN1wyNVwyNzRcMzQ0XDJKXDMyMVwzNTVcMzY3XDM3NVwzNzdcMjM3XDM3NlwzNzdcMzc0IiBcCisgICJcMXdcMzMzXDM1NlwyMjdcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIxMVwzNzZcMzc3XDM3NFwyXDM1MVwzNTZcMzYwIiBcCisgICJecHtcMjIzXW96XDFcMjc3XDMwNFwzMDZcMjYwXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MFwzNzZcMzc3XDM3NFwyXDM3MlwzNzRcMzcxY3UiIFwKKyAgIlwyMDBcMjIzXW96XDFcMjIyXDI0MVwyNDdcMjEyXDM3NlwzNzdcMzc0XDEvXDMxMlwzNTNcMjI3XDI1XDI3NFwzNDRcMiIgXAorICAiLFwzMTFcMzUyXDMzNFwzNjVcMzcyXDIzNFwzNzZcMzc3XDM3NFwyXDM1NlwzNzNcMzc0SVwzMjBcMzU0XDIyN1wyNVwyNzQiIFwKKyAgIlwzNDRcMlwwXDMwMVwzNTBcMzY2XDM3M1wzNzZcMjExXDM3NlwzNzdcMzc0XDFcMjYxXDI3MVwzMDJcMjI0XW96XDFcMzQzIiBcCisgICJcMzUwXDM1M1wyNjBcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYxXDM3NlwzNzdcMzc0XDFcMjE2XDIzNlwyNDRcMjIzXW96XDJjdVwyMDBcMzYyIiBcCisgICJcMzY3XDM3MVwyMTFcMzc2XDM3N1wzNzRcMVwyNjFcMzU0XDM2N1wyMzBcMjVcMjc0XDM0NFwzXDBcMjc2XDM0NVwyMzMiIFwKKyAgIlwzNDVcMzY0XDM3MFwzNzZcMzc3XDIzMVwzNzZcMzc3XDM3NFwyXDI2MlwzNTVcMzcwXDBcMzA0XDM1MlwyMzBcMjVcMjc0IiBcCisgICJcMzQ0XDFcMjA2XDM0MFwzNjNcMjEyXDM3NlwzNzdcMzc0XDFzXDIwNlwyMjFcMjIzXW96XDFxXDIwNFwyMTdcMjYxXDM3NiIgXAorICAiXDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzciIFwKKyAgIlwzNzdcMjYxXDM3NlwzNzdcMzc0XDFcMzA1XDMxMlwzMTVcMjI0XW96XDFcMjU3XDI2N1wyNzdcMjEyXDM3NlwzNzdcMzc0IiBcCisgICJcMUJcMzE0XDM0N1wyMzFcMjVcMjc0XDM0NFwyIiIxXDMxM1wzNTRcMzAzXDM2MVwzNzBcMjI2XDM3NlwzNzdcMzc0XDIiIFwKKyAgIlwzMzRcMzY1XDM3MkpcMzIxXDM1NVwyMzFcMjVcMjc0XDM0NFwyI1wzMDRcMzQ2XDM2NlwzNzNcMzc2XDIxMVwzNzZcMzc3IiBcCisgICJcMzc0XDFcMzE1XDMyMlwzMjVcMjI0XW96XDFcMjUxXDI2MVwyNzFcMjYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MVwzNzZcMzc3XDM3NFwyXDM2MiIgXAorICAiXDM2N1wzNzFhc35cMjIzXW96XDJoelwyMDVcMzcwXDM3MlwzNjdcMjExXDM3NlwzNzdcMzc0XDJcMzM0XDM2NVwzNzIiIFwKKyAgIlwwXDI3NlwzNDVcMjMyXDI1XDI3NFwzNDRcM0JcMzE0XDM0N1wyNjJcMzU1XDM3MFwzNzBcMzc2XDM3N1wyMjFcMzc2IiBcCisgICJcMzc3XDM3NFwzXDMxM1wzNjBcMzcxTFwzMjJcMzU2XDBcMjc2XDM0NVwyMzJcMjVcMjc0XDM0NFwxXDI1NlwzNTBcMzY0IiBcCisgICJcMjEyXDM3NlwzNzdcMzc0XDF6XDIxNVwyMzFcMjI0XW96XDFcMzMzXDM0MFwzNDNcMjYxXDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MlwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMjA3XDIyNlwyMzRcMjI0XW96XDFcMjcwXDMwMFwzMTFcMjEyXDM3NlwzNzdcMzc0XDF3XDMzM1wzNTYiIFwKKyAgIlwyMzRcMjVcMjc0XDM0NFw0XDBcMzA0XDM1Mm1cMzMyXDM2MVwyNzNcMzU0XDM3MVwzNjZcMzczXDM3NlwyMTJcMzc2IiBcCisgICJcMzc3XDM3NFw0XDM3MFwzNzZcMzc3XDMwMlwzNTdcMzY3eVwzMzZcMzYwKFwzMDdcMzUwXDIzNFwyNVwyNzRcMzQ0XDEiIFwKKyAgIkJcMzE0XDM0N1wyMTJcMzc2XDM3N1wzNzRcMVwzMjRcMzMxXDMzM1wyMjRdb3pcMWt+XDIxMVwyNjJcMzc2XDM3N1wzNzQiIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYyIiBcCisgICJcMzc2XDM3N1wzNzRcMVwzMDFcMzA2XDMxMVwyMjRdb3pcMmt+XDIxMVwzNzJcMzc0XDM3MVwyMTFcMzc2XDM3N1wzNzQiIFwKKyAgIlwyXDM2NlwzNzNcMzc2KFwzMDdcMzUwXDIzNlwyNVwyNzRcMzQ0XDVcMzFcMjc1XDM0NSxcMzExXDM1Mk1cMzIzXDM1NyIgXAorICAieVwzMzZcMzYwXDIxMVwzNDJcMzY1XDIwMlwyMzNcMzQ1XDM2NFw1XDIyMFwzNDNcMzYxXDIwNFwzMzVcMzYxWlwzMjUiIFwKKyAgIlwzNTQxXDMxM1wzNTRcMFwyNzZcMzQ1XDIzNlwyNVwyNzRcMzQ0XDJcMFwzMDFcMzUwXDMzNlwzNjdcMzc0XDIxMlwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMjA1XDIyNFwyMzJcMjI0XW96XDFcMjQ2XDI1NlwyNjZcMjYyXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MlwzNzZcMzc3XDM3NCIgXAorICAiXDJcMzY3XDM3MVwzNjZkdlwyMDFcMjI0XW96XDFcMjc0XDMwMVwzMDNcMjEyXDM3NlwzNzdcMzc0XDJcMzE1XDM2MlwzNzMiIFwKKyAgIlwwXDI3NlwzNDVcMzA3XDI1XDI3NFwzNDRcMVwyMzZcMzQ3XDM2NlwyMTJcMzc2XDM3N1wzNzRcMVwzMjVcMzMyXDMzNCIgXAorICAiXDIyNV1velwxXDM0MVwzNDZcMzUxXDI2MlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjNcMzc2XDM3N1wzNzRcMVwyMzZcMjQ2XDI1NlwyMjRdbyIgXAorICAielwyZnhcMjAzXDM1NlwzNjNcMzY2XDIxMlwzNzZcMzc3XDM3NFwxXDIyMVwzNDRcMzYyXDMwNlwyNVwyNzRcMzQ0XDEiIFwKKyAgIk1cMzIzXDM1N1wyMTJcMzc2XDM3N1wzNzRcMlwzNzJcMzc0XDM3MXRcMjA3XDIyMlwyMjRdb3pcMVwxNzdcMjE2XDIyNCIgXAorICAiXDI2M1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wyNjNcMzc2XDM3N1wzNzRcMVwzMzNcMzQwXDM0M1wyMjVdb3pcMVwyMjZcMjQ2XDI1NFwyMTNcMzc2IiBcCisgICJcMzc3XDM3NFwxTFwzMjJcMzU2XDMwNFwyNVwyNzRcMzQ0XDIsXDMxMVwzNTJcMzY2XDM3M1wzNzZcMjEyXDM3NlwzNzciIFwKKyAgIlwzNzRcMVwyNjVcMjc2XDMwNlwyMjVdb3pcMVwzMDJcMzA3XDMxMlwyNjNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjY0XDM3NlwzNzdcMzc0XDF1XDIxMCIgXAorICAiXDIyNFwyMjRdb3pcMl5we1wzMzFcMzM2XDM0MVwyMTJcMzc2XDM3N1wzNzRcMlwzNjZcMzczXDM3Ni9cMzEyXDM1M1wzMDIiIFwKKyAgIlwyNVwyNzRcMzQ0XDJcMFwzMDJcMzUxXDMzNlwzNjdcMzc0XDIxMlwzNzZcMzc3XDM3NFwyXDM1M1wzNjBcMzYzZHZcMjAxIiBcCisgICJcMjI0XW96XDJkdlwyMDFcMzY0XDM3MVwzNzRcMjYzXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2NFwzNzZcMzc3XDM3NFwxXDMwMlwzMDdcMzEyXDIyNSIgXAorICAiXW96XDJ3XDIxMlwyMjZcMzcyXDM3NFwzNzFcMjEyXDM3NlwzNzdcMzc0XDJcMzUwXDM3MVwzNzclXDMwNVwzNDdcMzAwIiBcCisgICJcMjVcMjc0XDM0NFwyXDBcMzAxXDM1MFwzMTRcMzYxXDM3MlwyMTNcMzc2XDM3N1wzNzRcMVwyMjdcMjM3XDI0N1wyMjUiIFwKKyAgIl1velwxXDI0NlwyNTZcMjY2XDI2NFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjRcMzc2XDM3N1wzNzRcMlwzNzJcMzc0XDM3MWxcMTc3XDIxMlwyMjUiIFwKKyAgIl1velwxXDI1MlwyNjJcMjcyXDIxM1wzNzZcMzc3XDM3NFwyXDMzN1wzNzBcMzc1XDBcMzA0XDM1MlwyNzZcMjVcMjc0IiBcCisgICJcMzQ0XDJcMFwyNzZcMzQ1XDI3NFwzNTVcMzczXDIxM1wzNzZcMzc3XDM3NFwxXDMwNVwzMTJcMzE1XDIyNV1velwyYSIgXAorICAic35cMzUzXDM2MFwzNjNcMjY0XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2NVwzNzZcMzc3XDM3NFwxXDI3MFwzMDBcMzExXDIyNV1velwyXnB7XDMyMiIgXAorICAiXDMzMFwzMzJcMjEzXDM3NlwzNzdcMzc0XDJcMzMyXDM2M1wzNzAjXDMwNFwzNDZcMjc0XDI1XDI3NFwzNDRcMlwwXDI3NiIgXAorICAiXDM0NVwyNzNcMzU0XDM3MVwyMTNcMzc2XDM3N1wzNzRcMlwzNDNcMzUwXDM1M2R2XDIwMVwyMjVdb3pcMVwyMzZcMjQ2IiBcCisgICJcMjU2XDI2NVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNjVcMzc2XDM3N1wzNzRcMlwzNjVcMzcyXDM3NWh6XDIwNVwyMjVdb3pcMml7XDIwNlwzNTQiIFwKKyAgIlwzNjFcMzY0XDIxM1wzNzZcMzc3XDM3NFwyXDMzN1wzNzBcMzc1KlwzMTBcMzUxXDI3MlwyNVwyNzRcMzQ0XDJcMFwzMDIiIFwKKyAgIlwzNTFcMzE0XDM2MVwzNzJcMjEzXDM3NlwzNzdcMzc0XDJcMzcxXDM3M1wzNzB4XDIxM1wyMjdcMjI1XW96XDJfcXxcMzQ2IiBcCisgICJcMzU0XDM1NlwyNjVcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMjY2XDM3NlwzNzdcMzc0XDFcMjYxXDI3MVwzMDJcMjI2XW96XDJcMjA1XDIyNFwyMzIiIFwKKyAgIlwzNzNcMzc1XDM3MlwyMTNcMzc2XDM3N1wzNzRcMlwzNTZcMzczXDM3NEJcMzE0XDM0N1wyNzBcMjVcMjc0XDM0NFwyIiBcCisgICIlXDMwNVwzNDdcMzM1XDM2NlwzNzNcMjE0XDM3NlwzNzdcMzc0XDFcMjQyXDI1MlwyNjJcMjI2XW96XDFcMjMxXDI0MSIgXAorICAiXDI1MVwyNjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjY2XDM3NlwzNzdcMzc0XDJcMzcwXDM3MlwzNjdtXDIwMFwyMTNcMjI2XW96XDFcMjQyIiBcCisgICJcMjUyXDI2MlwyMTRcMzc2XDM3N1wzNzRcMlwzNjdcMzc1XDM3N2lcMzI2XDM1NlwyNjZcMjVcMjc0XDM0NFwyQlwzMTQiIFwKKyAgIlwzNDdcMzUwXDM3MVwzNzdcMjE0XDM3NlwzNzdcMzc0XDFcMjc3XDMwNFwzMDZcMjI2XW96XDJidFwxNzdcMzUxXDM1NiIgXAorICAiXDM2MFwyNjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjY3XDM3NlwzNzdcMzc0XDFcMzA1XDMxMlwzMTVcMjI3XW96XDFcMjYxXDI3MVwzMDJcMjE1IiBcCisgICJcMzc2XDM3N1wzNzRcMlwyNTBcMzQ3XDM3MVwwXDMwMVwzNTBcMjYyXDI1XDI3NFwzNDRcM1wzMVwyNzVcMzQ1XDIwNiIgXAorICAiXDM0MFwzNjNcMzcwXDM3NlwzNzdcMjE0XDM3NlwzNzdcMzc0XDJcMzE2XDMyM1wzMjZfcXxcMjI2XW96XDFcMjUxXDI2MSIgXAorICAiXDI3MVwyNjdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjcwXDM3NlwzNzdcMzc0XDF5XDIxNFwyMzBcMjI2XW96XDJecHtcMzAxXDMwNlwzMTFcMjE1IiBcCisgICJcMzc2XDM3N1wzNzRcMlwzMzVcMzY2XDM3My9cMzEyXDM1M1wyNjBcMjVcMjc0XDM0NFwyI1wzMDRcMzQ2XDMxMlwzNTciIFwKKyAgIlwzNzBcMjE1XDM3NlwzNzdcMzc0XDJcMzMwXDMzNVwzNDBjdVwyMDBcMjI2XW96XDJoelwyMDVcMzY2XDM3MFwzNjRcMjY3IiBcCisgICJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3NyIgXAorICAiXDM3N1wzNzdcMjcwXDM3NlwzNzdcMzc0XDFcMzMyXDMzN1wzNDJcMjMwXDIyMlwyNDFcMjQ3XDFcMzUzXDM2MFwzNjMiIFwKKyAgIlwyMTVcMzc2XDM3N1wzNzRcM1wzNzBcMzc2XDM3N1wyMzFcMzQyXDM2MlwwXDMwMVwzNTBcMjU0XDI1XDI3NFwzNDRcMyIgXAorICAiXDBcMjc2XDM0NXdcMzMzXDM1NlwzNjZcMzczXDM3NlwyMTVcMzc2XDM3N1wzNzRcMlwzNjVcMzcyXDM3NVwyMzZcMjQ2IiBcCisgICJcMjU2XDIyN1wyMjJcMjQxXDI0N1wxXDMwN1wzMTVcMzE3XDI3MFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNDFcMzc2XDM3N1wzNzRcM1wzNTZcMzczIiBcCisgICJcMzc0aVwzMjZcMzU2XDBcMjc2XDM0NVwyNTFcMjVcMjc0XDM0NFwySlwzMjFcMzU1XDMzNVwzNjZcMzczXDM0MVwzNzYiIFwKKyAgIlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3IiBcCisgICJcMzc3XDM0M1wzNzZcMzc3XDM3NFwzXDMxNlwzNjNcMzc0WlwzMjVcMzU0XDMxXDI3NVwzNDVcMjQ1XDI1XDI3NFwzNDQiIFwKKyAgIlwyR1wzMTdcMzUzXDMwMlwzNTdcMzY3XDM0M1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNDVcMzc2XDM3N1wzNzRcM1wzMzZcMzY3XDM3NG1cMzMyXDM2MSIgXAorICAiXDBcMjc2XDM0NVwyNDBcMjVcMjc0XDM0NFwzXDMxXDI3NVwzNDVNXDMyM1wzNTdcMzE2XDM2M1wzNzRcMzQ1XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMzQ3XDM3NlwzNzdcMzc0XDRcMzY2XDM3M1wzNzZcMjM3XDM1MFwzNjdJXDMyMFwzNTRcMzFcMjc1XDM0NVwyMzJcMjUiIFwKKyAgIlwyNzRcMzQ0XDRcMFwyNzZcMzQ1QlwzMTRcMzQ3XDIzMVwzNDJcMzYyXDM1NlwzNzNcMzc0XDM0N1wzNzZcMzc3XDM3NCIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNTIiIFwKKyAgIlwzNzZcMzc3XDM3NFw0XDM1NlwzNzNcMzc0XDIzNVwzNDZcMzY1WlwzMjVcMzU0I1wzMDRcMzQ2XDIyNFwyNVwyNzRcMzQ0IiBcCisgICJcNFwwXDMwMlwzNTFMXDMyMlwzNTZcMjIxXDM0NFwzNjJcMzM2XDM2N1wzNzRcMzUyXDM3NlwzNzdcMzc0XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM1NlwzNzZcMzc3IiBcCisgICJcMzc0XDZcMzM2XDM2N1wzNzRcMjM3XDM1MFwzNjd3XDMzM1wzNTZNXDMyM1wzNTcsXDMxMVwzNTJcMFwyNzZcMzQ1XDIxMCIgXAorICAiXDI1XDI3NFwzNDRcNlwwXDI3NlwzNDUqXDMxMFwzNTFKXDMyMVwzNTVuXDMzM1wzNjJcMjMzXDM0NVwzNjRcMzIwXDM2NSIgXAorICAiXDM3NlwzNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMzY0XDM3NlwzNzdcMzc0XDEwXDM2N1wzNzVcMzc3XDM1NlwzNzNcMzc0XDMzNVwzNjZcMzczIiBcCisgICJcMzE2XDM2M1wzNzRcMzE1XDM2MlwzNzNcMzM1XDM2NlwzNzNcMzUwXDM3MVwzNzdcMzY2XDM3M1wzNzZcMzY0XDM3NiIgXAorICAiXDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzYiIFwKKyAgIlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3NVwzNzZcMzc3XDM3NFwyMDIiIFwKKyAgIlwzNzBcMzc2XDM3N1wyNTBcMzc2XDM3N1wzNzRcMVwzNjdcMzc1XDM3N1wyMTdcMzc2XDM3N1wzNzRcMVwzNjdcMzc1IiBcCisgICJcMzc3XDIzN1wzNzZcMzc3XDM3NFwxXDM2N1wzNzVcMzc3XDIzMFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzRcMzc2XDM3N1wzNzRcNFwyMzdcMzUwIiBcCisgICJcMzY3XDBcMjc2XDM0NVwzMVwyNzVcMzQ1XDIwM1wzMzRcMzYwXDI0NVwzNzZcMzc3XDM3NFw1XDMxNlwzNjNcMzc0IyIgXAorICAiXDMwNFwzNDZcMjVcMjc0XDM0NEdcMzE3XDM1M1wzNjdcMzc1XDM3N1wyMTNcMzc2XDM3N1wzNzRcNVwzMzVcMzY2XDM3MyIgXAorICAiKFwzMDdcMzUwXDI1XDI3NFwzNDRCXDMxNFwzNDdcMzY2XDM3M1wzNzZcMjMzXDM3NlwzNzdcMzc0XDVcMzU2XDM3M1wzNzQiIFwKKyAgIi9cMzEyXDM1M1wyNVwyNzRcMzQ0KlwzMTBcMzUxXDMzN1wzNzBcMzc1XDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzRcMzc2XDM3N1wzNzQiIFwKKyAgIlwxI1wzMDRcMzQ2XDIwM1wyNVwyNzRcMzQ0XDFcMzU3XDM3NFwzNzVcMjQ0XDM3NlwzNzdcMzc0XDFpXDMyNlwzNTZcMjAzIiBcCisgICJcMjVcMjc0XDM0NFwxXDI2MFwzNTNcMzY2XDIxM1wzNzZcMzc3XDM3NFwxblwzMzNcMzYyXDIwM1wyNVwyNzRcMzQ0XDEiIFwKKyAgIlwyMzVcMzQ2XDM2NVwyMzNcMzc2XDM3N1wzNzRcMVwyMzFcMzQyXDM2MlwyMDNcMjVcMjc0XDM0NFwxeVwzMzZcMzYwIiBcCisgICJcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDM3NFwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0IiBcCisgICJcMjQ0XDM3NlwzNzdcMzc0XDFJXDMyMFwzNTRcMjAzXDI1XDI3NFwzNDRcMVwyMzFcMzQyXDM2MlwyMTNcMzc2XDM3NyIgXAorICAiXDM3NFwxTVwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjMzXDM3NlwzNzdcMzc0XDFcMjA2XDM0MCIgXAorICAiXDM2M1wyMDNcMjVcMjc0XDM0NFwxa1wzMjdcMzU3XDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzRcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTAiIFwKKyAgIlwyMDNcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDI0NFwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0XDIwM1wyNVwyNzRcMzQ0IiBcCisgICJcMVwyMzFcMzQyXDM2MlwyMTNcMzc2XDM3N1wzNzRcMU1cMzIzXDM1N1wyMDNcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzIiBcCisgICJcMjMzXDM3NlwzNzdcMzc0XDFcMjA2XDM0MFwzNjNcMjAzXDI1XDI3NFwzNDRcMWtcMzI3XDM1N1wyMjZcMzc2XDM3NyIgXAorICAiXDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzRcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyNDRcMzc2XDM3NyIgXAorICAiXDM3NFwxSVwzMjBcMzU0XDIwM1wyNVwyNzRcMzQ0XDFcMjMxXDM0MlwzNjJcMjEzXDM3NlwzNzdcMzc0XDFNXDMyM1wzNTciIFwKKyAgIlwyMDNcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIzM1wzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzQiIFwKKyAgIlwzNDRcMWtcMzI3XDM1N1wyMjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc0XDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDEiIFwKKyAgIlwzMzZcMzY3XDM3NFwyNDRcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NFwxXDIzMVwzNDJcMzYyIiBcCisgICJcMjEzXDM3NlwzNzdcMzc0XDFNXDMyM1wzNTdcMjAzXDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMzNcMzc2XDM3NyIgXAorICAiXDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3NFwzNzZcMzc3IiBcCisgICJcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjQ0XDM3NlwzNzdcMzc0XDFJXDMyMCIgXAorICAiXDM1NFwyMDNcMjVcMjc0XDM0NFwxXDIzMVwzNDJcMzYyXDIxM1wzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIwM1wyNVwyNzQiIFwKKyAgIlwzNDRcMVwyMDZcMzQwXDM2M1wyMzNcMzc2XDM3N1wzNzRcMVwyMDZcMzQwXDM2M1wyMDNcMjVcMjc0XDM0NFwxa1wzMjciIFwKKyAgIlwzNTdcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDIzMlwzNzZcMzc3XDM3NFw3XDMxMVwzMTZcMzIxXDIxMVwyMzBcMjM2an1cMjEwY3VcMjAwIiBcCisgICJuXDIwMVwyMTRcMjMzXDI0M1wyNTNcMzMzXDM0MFwzNDNcMjA2XDM3NlwzNzdcMzc0XDJcMjM2XDI0NlwyNTZkdlwyMDEiIFwKKyAgIlwyMDVdb3pcNF9xfGt+XDIxMVwyMjJcMjQxXDI0N1wzMzdcMzQ0XDM0NlwyMTBcMzc2XDM3N1wzNzRcN1wzMjJcMzMwIiBcCisgICJcMzMyXDIyMlwyNDFcMjQ3bFwxNzdcMjEyY3VcMjAwa35cMjExXDIyMlwyNDFcMjQ3XDMyMlwzMzBcMzMyXDIwNlwzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMjU3XDI2N1wyNzdneVwyMDRcMjA1XW96XDRecHtpe1wyMDZcMjExXDIzMFwyMzZcMzI1XDMzMlwzMzQiIFwKKyAgIlwyMTBcMzc2XDM3N1wzNzRcMTBcMzEzXDM2MFwzNzFcXFwzMjZcMzU1JVwzMDVcMzQ3XDBcMjc2XDM0NVwwXDMwMlwzNTEiIFwKKyAgIkdcMzE3XDM1M1wyMzdcMzUwXDM2N1wzNzBcMzc2XDM3N1wyMDVcMzc2XDM3N1wzNzRcMlwyMzVcMzQ2XDM2NVwwXDMwNCIgXAorICAiXDM1MlwyMTJcMjVcMjc0XDM0NFw0XDBcMjc2XDM0NVwwXDMwNFwzNTJNXDMyM1wzNTdcMzE1XDM2MlwzNzNcMjA1XDM3NiIgXAorICAiXDM3N1wzNzRcMVwwXDMwMVwzNTBcMjA3XDI1XDI3NFwzNDRcNFwwXDMwMVwzNTBCXDMxNFwzNDdcMjMzXDM0NVwzNjQiIFwKKyAgIlwzNzBcMzc2XDM3N1wyMDdcMzc2XDM3N1wzNzRcN1wzMDJcMzU3XDM2N01cMzIzXDM1NyNcMzA0XDM0NlwwXDI3NlwzNDUiIFwKKyAgIlwwXDMwNFwzNTJKXDMyMVwzNTVcMjYwXDM1M1wzNjZcMjEwXDM3NlwzNzdcMzc0XDRcMzE1XDM2MlwzNzNNXDMyM1wzNTciIFwKKyAgIiNcMzA0XDM0NlwzMVwyNzVcMzQ1XDIwN1wyNVwyNzRcMzQ0XDFcMjMxXDM0MlwzNjJcMjA0XDM3NlwzNzdcMzc0XDRcMzIzIiBcCisgICJcMzY0XDM2N1xcXDMyNlwzNTUlXDMwNVwzNDdcMFwyNzZcMzQ1XDIwN1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjA1IiBcCisgICJcMzc2XDM3N1wzNzRcMTBcMzM0XDM2NVwzNzJtXDMzMlwzNjEoXDMwN1wzNTBcMFwyNzZcMzQ1XDBcMzAyXDM1MUJcMzE0IiBcCisgICJcMzQ3XDIzM1wzNDVcMzY0XDM3MFwzNzZcMzc3XDIwN1wzNzZcMzc3XDM3NFw0XDMzNlwzNjdcMzc0bVwzMzJcMzYxKCIgXAorICAiXDMwN1wzNTBcMFwyNzZcMzQ1XDIwN1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDIzMFwzNzZcMzc3IiBcCisgICJcMzc0XDJcMzU2XDM2M1wzNjZcMjAyXDIyMVwyMjdcMjA2XW96XDNecHtcMjQ3XDI1N1wyNjdcMzczXDM3NVwzNzJcMjAzIiBcCisgICJcMzc2XDM3N1wzNzRcMVwzMjdcMzM0XDMzN1wyMTJdb3pcMl9xfFwzMDNcMzEwXDMxM1wyMDVcMzc2XDM3N1wzNzRcMiIgXAorICAiXDM2NFwzNzFcMzc0XDIyMlwyNDFcMjQ3XDIwN11velwyXDIyMlwyNDFcMjQ3XDM3MFwzNzJcMzY3XDIwM1wzNzZcMzc3IiBcCisgICJcMzc0XDJcMzUzXDM2MFwzNjNecHtcMjEyXW96XDFcMjU0XDI2NFwyNzRcMjA1XDM3NlwzNzdcMzc0XDJcMzcwXDM3NiIgXAorICAiXDM3N21cMzMyXDM2MVwyMDdcMjVcMjc0XDM0NFwyQlwzMTRcMzQ3XDM1MFwzNzFcMzc3XDIwM1wzNzZcMzc3XDM3NFwyIiBcCisgICJcMzcwXDM3NlwzNzdcMFwyNzZcMzQ1XDIxNlwyNVwyNzRcMzQ0XDJcMzFcMjc1XDM0NVwyMzVcMzQ2XDM2NVwyMDRcMzc2IiBcCisgICJcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMTJcMjVcMjc0XDM0NFwyQlwzMTRcMzQ3XDM1N1wzNzRcMzc1XDIwNFwzNzZcMzc3IiBcCisgICJcMzc0XDJcMzY3XDM3NVwzNzdaXDMyNVwzNTRcMjA3XDI1XDI3NFwzNDRcMkdcMzE3XDM1M1wzNTdcMzc0XDM3NVwyMDUiIFwKKyAgIlwzNzZcMzc3XDM3NFwyXDIzNVwzNDZcMzY1XDMxXDI3NVwzNDVcMjEyXDI1XDI3NFwzNDRcMVwyMzFcMzQyXDM2MlwyMDMiIFwKKyAgIlwzNzZcMzc3XDM3NFwyXDI1NlwzNTBcMzY0XDBcMjc2XDM0NVwyMTJcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIwNCIgXAorICAiXDM3NlwzNzdcMzc0XDJcMjA2XDM0MFwzNjNcMzFcMjc1XDM0NVwyMDZcMjVcMjc0XDM0NFwyKlwzMTBcMzUxXDMzNVwzNjYiIFwKKyAgIlwzNzNcMjA1XDM3NlwzNzdcMzc0XDJcMzAyXDM1N1wzNjdcMFwzMDFcMzUwXDIxMlwyNVwyNzRcMzQ0XDFrXDMyN1wzNTciIFwKKyAgIlwyMjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMjI3XDM3NlwzNzdcMzc0XDJcMzY0XDM3MVwzNzR1XDIxMFwyMjRcMjExXW96XDFcMjQyXDI1MiIgXAorICAiXDI2MlwyMDNcMzc2XDM3N1wzNzRcMVwzMDZcMzE0XDMxNlwyMTNdb3pcMl9xfFwzMjVcMzMyXDMzNFwyMDNcMzc2XDM3NyIgXAorICAiXDM3NFwyXDM3M1wzNzVcMzcyXDIxMFwyMjdcMjM1XDIxMV1velwyXDIxMVwyMzBcMjM2XDM3M1wzNzVcMzcyXDIwMlwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMzMwXDMzNVwzNDBcMjE0XW96XDFcMzA0XDMxMVwzMTRcMjA0XDM3NlwzNzdcMzc0XDFpXDMyNlwzNTYiIFwKKyAgIlwyMTFcMjVcMjc0XDM0NFwyKlwzMTBcMzUxXDM2NlwzNzNcMzc2XDIwMlwzNzZcMzc3XDM3NFwxXDM1N1wzNzRcMzc1IiBcCisgICJcMjIwXDI1XDI3NFwzNDRcMlwwXDI3NlwzNDVcMjc0XDM1NVwzNzNcMjAzXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIxMyIgXAorICAiXDI1XDI3NFwzNDRcMU1cMzIzXDM1N1wyMDRcMzc2XDM3N1wzNzRcMUxcMzIyXDM1NlwyMTFcMjVcMjc0XDM0NFwyIiIzIiBcCisgICJcMzE0XDM1NVwzNzBcMzc2XDM3N1wyMDNcMzc2XDM3N1wzNzRcMlwzMTNcMzYwXDM3MVwwXDI3NlwzNDVcMjEzXDI1XDI3NCIgXAorICAiXDM0NFwxXDIzMVwzNDJcMzYyXDIwMlwzNzZcMzc3XDM3NFwyXDMzM1wzNjRcMzcxXDBcMjc2XDM0NVwyMTNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMjA2XDM0MFwzNjNcMjAzXDM3NlwzNzdcMzc0XDFcMjA2XDM0MFwzNjNcMjExXDI1XDI3NFwzNDRcMlwwXDMwNCIgXAorICAiXDM1MlwzNDdcMzcwXDM3NlwyMDNcMzc2XDM3N1wzNzRcMlwzNTZcMzczXDM3NFwwXDMwNFwzNTJcMjEzXDI1XDI3NFwzNDQiIFwKKyAgIlwxa1wzMjdcMzU3XDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wyMjdcMzc2XDM3N1wzNzRcMVwyNTFcMjYxXDI3MVwyMTNdb3pcMVwzMjJcMzMwXDMzMiIgXAorICAiXDIwMlwzNzZcMzc3XDM3NFwxXDMwNlwzMTRcMzE2XDIxNF1velwxXDIwMFwyMTdcMjI1XDIwM1wzNzZcMzc3XDM3NFwxIiBcCisgICJcMjc3XDMwNFwzMDZcMjEzXW96XDFcMjc3XDMwNFwzMDZcMjAyXDM3NlwzNzdcMzc0XDFcMzMwXDMzNVwzNDBcMjE0XSIgXAorICAib3pcMmp9XDIxMFwzNzNcMzc1XDM3MlwyMDJcMzc2XDM3N1wzNzRcMVwyNzNcMzU0XDM3MVwyMTNcMjVcMjc0XDM0NFwxIiBcCisgICJuXDMzM1wzNjJcMjAyXDM3NlwzNzdcMzc0XDFcMzU3XDM3NFwzNzVcMjIxXDI1XDI3NFwzNDRcMSIiMVwzMTNcMzU0XDIwMyIgXAorICAiXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIxNFwyNVwyNzRcMzQ0XDFcMzMyXDM2M1wzNzBcMjAyXDM3NlwzNzdcMzc0IiBcCisgICJcMVwyMzdcMzUwXDM2N1wyMTNcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIwM1wzNzZcMzc3XDM3NFwxSVwzMjBcMzU0IiBcCisgICJcMjE0XDI1XDI3NFwzNDRcMVwyMzFcMzQyXDM2MlwyMDJcMzc2XDM3N1wzNzRcMU1cMzIzXDM1N1wyMTRcMjVcMjc0XDM0NCIgXAorICAiXDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDJcMzIwXDM2NVwzNzZcMzFcMjc1XDM0NVwyMTJcMjVcMjc0XDM0NCIgXAorICAiXDFMXDMyMlwzNTZcMjAzXDM3NlwzNzdcMzc0XDFcMjAzXDMzNFwzNjBcMjE0XDI1XDI3NFwzNDRcMWtcMzI3XDM1N1wyMjYiIFwKKyAgIlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3IiBcCisgICJcMzc3XDM3N1wyMjZcMzc2XDM3N1wzNzRcMlwzNzBcMzcyXDM2N2N1XDIwMFwyMDNdb3pcNXNcMjA2XDIyMVwzMTdcMzI0IiBcCisgICJcMzI3XDM0M1wzNTBcMzUzXDI3NlwzMDNcMzA1ZXdcMjAyXDIwM11velwxXDIxMFwyMjdcMjM1XDIwMlwzNzZcMzc3XDM3NCIgXAorICAiXDFcMzA2XDMxNFwzMTZcMjAzXW96XDF5XDIxNFwyMzBcMjAzXDM0N1wzNTVcMzU3XDJcMzQ2XDM1NFwzNTZcMjY0XDI3NCIgXAorICAiXDMwNVwyMDNdb3pcMl5we1wzNTdcMzY1XDM2N1wyMDJcMzc2XDM3N1wzNzRcMXBcMjAzXDIxNlwyMDNdb3pcNWt+XDIxMSIgXAorICAiXDMwN1wzMTVcMzE3XDM0M1wzNTBcMzUzXDMwNlwzMTRcMzE2a35cMjExXDIwM11velwxcFwyMDNcMjE2XDIwMlwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMzMwXDMzNVwzNDBcMjAzXW96XDFrflwyMTFcMjA0XDM0N1wzNTVcMzU3XDJcMzA0XDMxMVwzMTRfIiBcCisgICJxfFwyMDNdb3pcMVwzMzRcMzQyXDM0NFwyMDJcMzc2XDM3N1wzNzRcMUJcMzE0XDM0N1wyMDNcMjVcMjc0XDM0NFw1XDAiIFwKKyAgIlwzMDFcMzUwXDIzM1wzNDVcMzY0XDMzM1wzNjRcMzcxXDI2MFwzNTNcMzY2KFwzMDdcMzUwXDIwM1wyNVwyNzRcMzQ0IiBcCisgICJcNFwwXDI3NlwzNDVcMzY3XDM3NVwzNzdcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjAzXDMzNSIgXAorICAiXDM2NlwzNzNcMjA0XDI1XDI3NFwzNDRcM1wzMDJcMzU3XDM2N1wzMzVcMzY2XDM3M1wyMDZcMzQwXDM2M1wyMDRcMjUiIFwKKyAgIlwyNzRcMzQ0XDFcMzU2XDM3M1wzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzAyIiBcCisgICJcMzU3XDM2N1wyMDNcMzM1XDM2NlwzNzNcMlwzMDJcMzU3XDM2N1wwXDMwNFwzNTJcMjAzXDI1XDI3NFwzNDRcMVwyMDciIFwKKyAgIlwzNDFcMzY0XDIwMlwzNzZcMzc3XDM3NFwxLFwzMTFcMzUyXDIwM1wyNVwyNzRcMzQ0XDVcMFwzMDJcMzUxXDIzNlwzNDciIFwKKyAgIlwzNjZcMzMyXDM2M1wzNzBcMjU2XDM1MFwzNjQjXDMwNFwzNDZcMjAzXDI1XDI3NFwzNDRcNVwwXDMwMlwzNTFcMzcwIiBcCisgICJcMzc2XDM3N1wzNzZcMzc3XDM3NFwzNzBcMzc2XDM3N1wwXDI3NlwzNDVcMjAzXDI1XDI3NFwzNDRcMXdcMzMzXDM1NiIgXAorICAiXDIwNFwzMzVcMzY2XDM3M1wxQlwzMTRcMzQ3XDIwM1wyNVwyNzRcMzQ0XDFcMjMxXDM0MlwzNjJcMjAyXDM3NlwzNzciIFwKKyAgIlwzNzRcMVwwXDI3NlwzNDVcMjAzXDI1XDI3NFwzNDRcMm1cMzMyXDM2MVwzMzRcMzY1XDM3MlwyMDNcMzM1XDM2NlwzNzMiIFwKKyAgIlwxSVwzMjBcMzU0XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDFpXDMyNlwzNTZcMjAzIiBcCisgICJcMjVcMjc0XDM0NFw1XDBcMjc2XDM0NVwyMDZcMzQwXDM2M1wzMjNcMzY0XDM2N1wyNzNcMzU0XDM3MTFcMzEzXDM1NCIgXAorICAiXDIwNFwyNVwyNzRcMzQ0XDFcMzM1XDM2NlwzNzNcMjAyXDM3NlwzNzdcMzc0XDEsXDMxMVwzNTJcMjAzXDI1XDI3NFwzNDQiIFwKKyAgIlwyTFwzMjJcMzU2XDMzMlwzNjNcMzcwXDIwM1wzMzVcMzY2XDM3M1wxblwzMzNcMzYyXDIwM1wyNVwyNzRcMzQ0XDFrIiBcCisgICJcMzI3XDM1N1wyMjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMjI2XDM3NlwzNzdcMzc0XDFcMzI0XDMzMVwzMzNcMjAzXW96XDJjdVwyMDBcMzUzIiBcCisgICJcMzYwXDM2M1wyMDNcMzc2XDM3N1wzNzRcMVwzMDdcMzE1XDMxN1wyMDNdb3pcNGFzflwzNzJcMzc0XDM3MVwzNzZcMzc3IiBcCisgICJcMzc0XDMwNlwzMTRcMzE2XDIwM11velwxXDIwMlwyMjFcMjI3XDIwNVwzNzZcMzc3XDM3NFwxaHpcMjA1XDIwM11veiIgXAorICAiXDNcMzQxXDM0NlwzNTFcMzc2XDM3N1wzNzRcMzQ3XDM1NVwzNTdcMjAzXW96XDJecHtcMzM1XDM0M1wzNDVcMjAzXDM3NiIgXAorICAiXDM3N1wzNzRcMVwzMzNcMzQwXDM0M1wyMDRdb3pcM1wzNDdcMzU1XDM1N1wzNzZcMzc3XDM3NFwzMzBcMzM1XDM0MFwyMDMiIFwKKyAgIl1velwxbVwyMDBcMjEzXDIwNVwzNzZcMzc3XDM3NFwxflwyMTVcMjIzXDIwM11velw0XDMxM1wzMjBcMzIyXDM3NlwzNzciIFwKKyAgIlwzNzRcMzcwXDM3NlwzNzdcMzFcMjc1XDM0NVwyMDNcMjVcMjc0XDM0NFwxXDI1NlwzNTBcMzY0XDIwM1wzNzZcMzc3IiBcCisgICJcMzc0XDJcMzM2XDM2N1wzNzRcMFwyNzZcMzQ1XDIwM1wyNVwyNzRcMzQ0XDNcMjc0XDM1NVwzNzNcMzc2XDM3N1wzNzQiIFwKKyAgIlwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDNcMzc2XDM3N1wzNzRcMjA0XDI1XDI3NFwzNDRcMVwzMzZcMzY3IiBcCisgICJcMzc0XDIwMlwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxXDMyM1wzNjRcMzY3XDIwMlwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjA0XDM3NlwzNzdcMzc0XDFuIiBcCisgICJcMzMzXDM2MlwyMDNcMjVcMjc0XDM0NFwzbVwzMzJcMzYxXDM3NlwzNzdcMzc0XDM1NlwzNzNcMzc0XDIwNFwyNVwyNzQiIFwKKyAgIlwzNDRcMVwyNzRcMzU1XDM3M1wyMDNcMzc2XDM3N1wzNzRcMlwzMjNcMzY0XDM2N1wwXDI3NlwzNDVcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwzXDMxNVwzNjJcMzczXDM3NlwzNzdcMzc0XDMzNVwzNjZcMzczXDIwM1wyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1IiBcCisgICJcMzcwXDM3NlwzNzdcMjA0XDM3NlwzNzdcMzc0XDFJXDMyMFwzNTRcMjAzXDI1XDI3NFwzNDRcM1wyMzFcMzQyXDM2MiIgXAorICAiXDM3NlwzNzdcMzc0XDM2NlwzNzNcMzc2XDIwNFwyNVwyNzRcMzQ0XDFcMzY2XDM3M1wzNzZcMjA0XDM3NlwzNzdcMzc0IiBcCisgICJcMU1cMzIzXDM1N1wyMDNcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIwMlwzNzZcMzc3XDM3NFwxJVwzMDVcMzQ3XDIwMyIgXAorICAiXDI1XDI3NFwzNDRcMVwyMDdcMzQxXDM2NFwyMDNcMzc2XDM3N1wzNzRcMlwzNjBcMzc1XDM3NlwwXDMwNFwzNTJcMjAzIiBcCisgICJcMjVcMjc0XDM0NFwxXDIzM1wzNDVcMzY0XDIwMlwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NCIgXAorICAiXDFcMzIzXDM2NFwzNjdcMjA0XDM3NlwzNzdcMzc0XDFcMjA2XDM0MFwzNjNcMjAzXDI1XDI3NFwzNDRcMWtcMzI3XDM1NyIgXAorICAiXDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wyMjZcMzc2XDM3N1wzNzRcMVwzMDNcMzEwXDMxM1wyMDNdb3pcMVwyMDRcMjIzXDIzMVwyMDRcMzc2IiBcCisgICJcMzc3XDM3NFwyXDM3MFwzNzJcMzY3X3F8XDIwM11velwzXDM1NFwzNjFcMzY0XDM3NlwzNzdcMzc0XDMwNlwzMTRcMzE2IiBcCisgICJcMjAzXW96XDFcMjAyXDIyMVwyMjdcMjA1XDM3NlwzNzdcMzc0XDFtXDIwMFwyMTNcMjAzXW96XDNcMzQxXDM0NlwzNTEiIFwKKyAgIlwzNzZcMzc3XDM3NFwzMjZcMzMzXDMzNVwyMDNdb3pcMW5cMjAxXDIxNFwyMDVcMzc2XDM3N1wzNzRcMWxcMTc3XDIxMiIgXAorICAiXDIwM11velwzXDMyN1wzMzRcMzM3XDM3NlwzNzdcMzc0XDMzMFwzMzVcMzQwXDIwM11velwxbVwyMDBcMjEzXDIwNVwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMjAyXDIyMVwyMjdcMjAzXW96XDNcMzA2XDMxNFwzMTZcMzc2XDM3N1wzNzRcMzM3XDM3MFwzNzVcMjAzIiBcCisgICJcMjVcMjc0XDM0NFwyXDMxXDI3NVwzNDVcMzcwXDM3NlwzNzdcMjA0XDM3NlwzNzdcMzc0XDEiIjNcMzE0XDM1NVwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDNcMjM2XDM0N1wzNjZcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjAzIiBcCisgICJcMzc2XDM3N1wzNzRcMjA0XDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDJcMzc2XDM3N1wzNzRcMSNcMzA0XDM0NiIgXAorICAiXDIwM1wyNVwyNzRcMzQ0XDFcMzE2XDM2M1wzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzQiIFwKKyAgIlwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NlwyMDNcMjVcMjc0XDM0NFwza1wzMjdcMzU3IiBcCisgICJcMzc2XDM3N1wzNzRcMzE1XDM2MlwzNzNcMjAzXDI1XDI3NFwzNDRcMVwwXDMwMVwzNTBcMjA1XDM3NlwzNzdcMzc0XDEiIFwKKyAgIipcMzEwXDM1MVwyMDNcMjVcMjc0XDM0NFwzXDI2MVwzNTRcMzY3XDM3NlwzNzdcMzc0XDMxNlwzNjNcMzc0XDIwM1wyNSIgXAorICAiXDI3NFwzNDRcMVwwXDMwMVwzNTBcMjA1XDM3NlwzNzdcMzc0XDFJXDMyMFwzNTRcMjAzXDI1XDI3NFwzNDRcM1wyMzEiIFwKKyAgIlwzNDJcMzYyXDM3NlwzNzdcMzc0XDM1N1wzNzRcMzc1XDIwNFwyNVwyNzRcMzQ0XDIwNVwzNzZcMzc3XDM3NFwxTVwzMjMiIFwKKyAgIlwzNTdcMjAzXDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMDJcMzc2XDM3N1wzNzRcMVwzMVwyNzVcMzQ1XDIwM1wyNSIgXAorICAiXDI3NFwzNDRcMVwzMzVcMzY2XDM3M1wyMDRcMzc2XDM3N1wzNzRcMU1cMzIzXDM1N1wyMDNcMjVcMjc0XDM0NFwxXDIwMyIgXAorICAiXDMzNFwzNjBcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjA0IiBcCisgICJcMzc2XDM3N1wzNzRcMVwyMDZcMzQwXDM2M1wyMDNcMjVcMjc0XDM0NFwxa1wzMjdcMzU3XDIyNlwzNzZcMzc3XDM3NCIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyMjYiIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDI3N1wzMDRcMzA2XDIwM11velwxXDIxMVwyMzBcMjM2XDIwNVwzNzZcMzc3XDM3NFwxZXdcMjAyIiBcCisgICJcMjAzXW96XDNcMzUyXDM1N1wzNjJcMzc2XDM3N1wzNzRcMzA2XDMxNFwzMTZcMjAzXW96XDFcMjAyXDIyMVwyMjdcMjA1IiBcCisgICJcMzc2XDM3N1wzNzRcMW1cMjAwXDIxM1wyMDNdb3pcM1wzNDFcMzQ2XDM1MVwzNzZcMzc3XDM3NFwzMTdcMzI0XDMyNyIgXAorICAiXDIwM11velwxYXN+XDIwNW9cMjAyXDIxNVwxYXN+XDIwM11velwzXDMxN1wzMjRcMzI3XDM3NlwzNzdcMzc0XDMzMFwzMzUiIFwKKyAgIlwzNDBcMjAzXW96XDFtXDIwMFwyMTNcMjA1XDM3NlwzNzdcMzc0XDFcMjAyXDIyMVwyMjdcMjAzXW96XDNcMzA2XDMxNCIgXAorICAiXDMxNlwzNzZcMzc3XDM3NFwzMzZcMzY3XDM3NFwyMDNcMjVcMjc0XDM0NFwxXDBcMjc2XDM0NVwyMDUlXDMwNVwzNDciIFwKKyAgIlwxXDBcMjc2XDM0NVwyMDNcMjVcMjc0XDM0NFwzXDIzMVwzNDJcMzYyXDM3NlwzNzdcMzc0XDM1N1wzNzRcMzc1XDIwNCIgXAorICAiXDI1XDI3NFwzNDRcMjAzXDM3NlwzNzdcMzc0XDIwNFwyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjAyXDM3NlwzNzciIFwKKyAgIlwzNzRcMSNcMzA0XDM0NlwyMDNcMjVcMjc0XDM0NFwxXDMxNlwzNjNcMzc0XDIwMlwzNzZcMzc3XDM3NFwxXDBcMzAxIiBcCisgICJcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjA0XDM3NlwzNzdcMzc0XDF3XDMzM1wzNTZcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwza1wzMjdcMzU3XDM3NlwzNzdcMzc0XDMwMlwzNTdcMzY3XDIwM1wyNVwyNzRcMzQ0XDFcMzFcMjc1XDM0NVwyMDUiIFwKKyAgIiVcMzA1XDM0N1wxXDBcMjc2XDM0NVwyMDNcMjVcMjc0XDM0NFwzXDIzN1wzNTBcMzY3XDM3NlwzNzdcMzc0XDMxNlwzNjMiIFwKKyAgIlwzNzRcMjAzXDI1XDI3NFwzNDRcMVwwXDMwMVwzNTBcMjA1XDM3NlwzNzdcMzc0XDFJXDMyMFwzNTRcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwzXDIzMVwzNDJcMzYyXDM3NlwzNzdcMzc0XDM1N1wzNzRcMzc1XDIwNFwyNVwyNzRcMzQ0XDIwNVwzNzZcMzc3IiBcCisgICJcMzc0XDFNXDMyM1wzNTdcMjAzXDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMDJcMzc2XDM3N1wzNzRcMjA0XDI1XDI3NCIgXAorICAiXDM0NFwxI1wzMDRcMzQ2XDIwNCVcMzA1XDM0N1wxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxd1wzMzNcMzU2XDIwMiIgXAorICAiXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjA0XDM3NlwzNzdcMzc0IiBcCisgICJcMVwyMDZcMzQwXDM2M1wyMDNcMjVcMjc0XDM0NFwxa1wzMjdcMzU3XDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyMjZcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDI3N1wzMDRcMzA2XDIwM11velwxXDIxMVwyMzBcMjM2XDIwNVwzNzZcMzc3XDM3NFwxZXdcMjAyXDIwM11velwzIiBcCisgICJcMzUyXDM1N1wzNjJcMzc2XDM3N1wzNzRcMzA2XDMxNFwzMTZcMjAzXW96XDFcMjAyXDIyMVwyMjdcMjA1XDM3NlwzNzciIFwKKyAgIlwzNzRcMW1cMjAwXDIxM1wyMDNdb3pcM1wzNDFcMzQ2XDM1MVwzNzZcMzc3XDM3NFwzMTdcMzI0XDMyN1wyMTVdb3pcMyIgXAorICAiXDMxN1wzMjRcMzI3XDM3NlwzNzdcMzc0XDMzMFwzMzVcMzQwXDIwM11velwxbVwyMDBcMjEzXDIwNVwzNzZcMzc3XDM3NCIgXAorICAiXDFcMjAyXDIyMVwyMjdcMjAzXW96XDNcMzA2XDMxNFwzMTZcMzc2XDM3N1wzNzRcMzM2XDM2N1wzNzRcMjE1XDI1XDI3NCIgXAorICAiXDM0NFwzXDIzMVwzNDJcMzYyXDM3NlwzNzdcMzc0XDM1N1wzNzRcMzc1XDIwNFwyNVwyNzRcMzQ0XDIwM1wzNzZcMzc3IiBcCisgICJcMzc0XDIwNFwyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjAyXDM3NlwzNzdcMzc0XDEjXDMwNFwzNDZcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwxXDMxNlwzNjNcMzc0XDIwMlwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxXDMzNlwzNjciIFwKKyAgIlwzNzRcMjA0XDM3NlwzNzdcMzc0XDF3XDMzM1wzNTZcMjAzXDI1XDI3NFwzNDRcM2tcMzI3XDM1N1wzNzZcMzc3XDM3NCIgXAorICAiXDMwMlwzNTdcMzY3XDIxNVwyNVwyNzRcMzQ0XDNcMjM3XDM1MFwzNjdcMzc2XDM3N1wzNzRcMzE2XDM2M1wzNzRcMjAzIiBcCisgICJcMjVcMjc0XDM0NFwxXDBcMzAxXDM1MFwyMDVcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NFwzXDIzMSIgXAorICAiXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjA1XDM3NlwzNzdcMzc0XDFNXDMyMyIgXAorICAiXDM1N1wyMDNcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIwMlwzNzZcMzc3XDM3NFwyMTVcMjVcMjc0XDM0NFwxd1wzMzMiIFwKKyAgIlwzNTZcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjA0XDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMDZcMzQwXDM2M1wyMDNcMjVcMjc0XDM0NFwxa1wzMjdcMzU3XDIyNlwzNzZcMzc3XDM3NFwzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyMjZcMzc2IiBcCisgICJcMzc3XDM3NFwxXDI3N1wzMDRcMzA2XDIwM11velwxXDIxMVwyMzBcMjM2XDIwNVwzNzZcMzc3XDM3NFwxZXdcMjAyXDIwMyIgXAorICAiXW96XDNcMzUyXDM1N1wzNjJcMzc2XDM3N1wzNzRcMzA2XDMxNFwzMTZcMjAzXW96XDFcMjAyXDIyMVwyMjdcMjA1XDM3NiIgXAorICAiXDM3N1wzNzRcMW1cMjAwXDIxM1wyMDNdb3pcM1wzNDFcMzQ2XDM1MVwzNzZcMzc3XDM3NFwzMTdcMzI0XDMyN1wyMTUiIFwKKyAgIl1velwzXDMxN1wzMjRcMzI3XDM3NlwzNzdcMzc0XDMzMFwzMzVcMzQwXDIwM11velwxbVwyMDBcMjEzXDIwNVwzNzZcMzc3IiBcCisgICJcMzc0XDFcMjAyXDIyMVwyMjdcMjAzXW96XDNcMzA2XDMxNFwzMTZcMzc2XDM3N1wzNzRcMzM2XDM2N1wzNzRcMjE1XDI1IiBcCisgICJcMjc0XDM0NFwzXDIzMVwzNDJcMzYyXDM3NlwzNzdcMzc0XDM1N1wzNzRcMzc1XDIwNFwyNVwyNzRcMzQ0XDIwM1wzNzYiIFwKKyAgIlwzNzdcMzc0XDIwNFwyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjAyXDM3NlwzNzdcMzc0XDEjXDMwNFwzNDZcMjAzIiBcCisgICJcMjVcMjc0XDM0NFwxXDMxNlwzNjNcMzc0XDIwMlwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NCIgXAorICAiXDFcMzM2XDM2N1wzNzRcMjA0XDM3NlwzNzdcMzc0XDF3XDMzM1wzNTZcMjAzXDI1XDI3NFwzNDRcM2tcMzI3XDM1N1wzNzYiIFwKKyAgIlwzNzdcMzc0XDMwMlwzNTdcMzY3XDIxNVwyNVwyNzRcMzQ0XDNcMjM3XDM1MFwzNjdcMzc2XDM3N1wzNzRcMzE2XDM2MyIgXAorICAiXDM3NFwyMDNcMjVcMjc0XDM0NFwxXDBcMzAxXDM1MFwyMDVcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjA1XDM3NlwzNzciIFwKKyAgIlwzNzRcMU1cMzIzXDM1N1wyMDNcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIwMlwzNzZcMzc3XDM3NFwyMTVcMjVcMjc0IiBcCisgICJcMzQ0XDF3XDMzM1wzNTZcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2NyIgXAorICAiXDM3NFwyMDRcMzc2XDM3N1wzNzRcMVwyMDZcMzQwXDM2M1wyMDNcMjVcMjc0XDM0NFwxa1wzMjdcMzU3XDIyNlwzNzYiIFwKKyAgIlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3IiBcCisgICJcMzc3XDIyNlwzNzZcMzc3XDM3NFwxXDI3N1wzMDRcMzA2XDIwM11velwxXDIxMVwyMzBcMjM2XDIwNVwzNzZcMzc3XDM3NCIgXAorICAiXDFld1wyMDJcMjAzXW96XDNcMzUyXDM1N1wzNjJcMzc2XDM3N1wzNzRcMzA2XDMxNFwzMTZcMjAzXW96XDFcMjAyXDIyMSIgXAorICAiXDIyN1wyMDVcMzc2XDM3N1wzNzRcMW1cMjAwXDIxM1wyMDNdb3pcM1wzNDFcMzQ2XDM1MVwzNzZcMzc3XDM3NFwzMTciIFwKKyAgIlwzMjRcMzI3XDIxNV1velwzXDMxN1wzMjRcMzI3XDM3NlwzNzdcMzc0XDMzMFwzMzVcMzQwXDIwM11velwxbVwyMDBcMjEzIiBcCisgICJcMjA1XDM3NlwzNzdcMzc0XDFcMjAyXDIyMVwyMjdcMjAzXW96XDNcMzA2XDMxNFwzMTZcMzc2XDM3N1wzNzRcMzM2XDM2NyIgXAorICAiXDM3NFwyMTVcMjVcMjc0XDM0NFwzXDIzMVwzNDJcMzYyXDM3NlwzNzdcMzc0XDM1N1wzNzRcMzc1XDIwNFwyNVwyNzQiIFwKKyAgIlwzNDRcMjAzXDM3NlwzNzdcMzc0XDIwNFwyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjAyXDM3NlwzNzdcMzc0XDEjIiBcCisgICJcMzA0XDM0NlwyMDNcMjVcMjc0XDM0NFwxXDMxNlwzNjNcMzc0XDIwMlwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjA0XDM3NlwzNzdcMzc0XDF3XDMzM1wzNTZcMjAzXDI1XDI3NFwzNDRcMyIgXAorICAia1wzMjdcMzU3XDM3NlwzNzdcMzc0XDMwMlwzNTdcMzY3XDIxNVwyNVwyNzRcMzQ0XDNcMjM3XDM1MFwzNjdcMzc2XDM3NyIgXAorICAiXDM3NFwzMTZcMzYzXDM3NFwyMDNcMjVcMjc0XDM0NFwxXDBcMzAxXDM1MFwyMDVcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NCIgXAorICAiXDIwM1wyNVwyNzRcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDQiIFwKKyAgIlwyMDVcMzc2XDM3N1wzNzRcMU1cMzIzXDM1N1wyMDNcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIwMlwzNzZcMzc3IiBcCisgICJcMzc0XDIxNVwyNVwyNzRcMzQ0XDF3XDMzM1wzNTZcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzQiIFwKKyAgIlwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzRcMVwyMDZcMzQwXDM2M1wyMDNcMjVcMjc0XDM0NFwxa1wzMjciIFwKKyAgIlwzNTdcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDIyNlwzNzZcMzc3XDM3NFwxXDMwMFwzMDVcMzEwXDIwM11velwxXDIxMVwyMzBcMjM2XDIwNSIgXAorICAiXDM3NlwzNzdcMzc0XDFidFwxNzdcMjAzXW96XDNcMzUyXDM1N1wzNjJcMzc2XDM3N1wzNzRcMzA2XDMxNFwzMTZcMjAzIiBcCisgICJdb3pcMVwyMDJcMjIxXDIyN1wyMDVcMzc2XDM3N1wzNzRcMW1cMjAwXDIxM1wyMDNdb3pcM1wzNDFcMzQ2XDM1MVwzNzYiIFwKKyAgIlwzNzdcMzc0XDMxN1wzMjRcMzI3XDIwM11velwxcFwyMDNcMjE2XDIxMVwzMzVcMzQzXDM0NVwzXDM2NlwzNzBcMzY0IiBcCisgICJcMzc2XDM3N1wzNzRcMzMwXDMzNVwzNDBcMjAzXW96XDFtXDIwMFwyMTNcMjA1XDM3NlwzNzdcMzc0XDFcMjAyXDIyMSIgXAorICAiXDIyN1wyMDNdb3pcM1wzMDZcMzE0XDMxNlwzNzZcMzc3XDM3NFwzMzZcMzY3XDM3NFwyMDNcMjVcMjc0XDM0NFwxXDAiIFwKKyAgIlwyNzZcMzQ1XDIxMVwzMTRcMzYxXDM3MlwzXDM1MFwzNzFcMzc3XDM3NlwzNzdcMzc0XDM1N1wzNzRcMzc1XDIwNFwyNSIgXAorICAiXDI3NFwzNDRcMjAzXDM3NlwzNzdcMzc0XDIwNFwyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjAyXDM3NlwzNzdcMzc0IiBcCisgICJcMSNcMzA0XDM0NlwyMDNcMjVcMjc0XDM0NFwxXDMxNlwzNjNcMzc0XDIwMlwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MCIgXAorICAiXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjA0XDM3NlwzNzdcMzc0XDF3XDMzM1wzNTZcMjAzXDI1XDI3NFwzNDQiIFwKKyAgIlwza1wzMjdcMzU3XDM3NlwzNzdcMzc0XDMwMlwzNTdcMzY3XDIwM1wyNVwyNzRcMzQ0XDFcMFwzMDJcMzUxXDIxMVwzMTQiIFwKKyAgIlwzNjFcMzcyXDNcMzU2XDM3M1wzNzRcMzc2XDM3N1wzNzRcMzE2XDM2M1wzNzRcMjAzXDI1XDI3NFwzNDRcMVwwXDMwMSIgXAorICAiXDM1MFwyMDVcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NFwzXDIzMVwzNDJcMzYyXDM3NlwzNzciIFwKKyAgIlwzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjA1XDM3NlwzNzdcMzc0XDFNXDMyM1wzNTdcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwxXDIwNlwzNDBcMzYzXDIwMlwzNzZcMzc3XDM3NFwyMDRcMjVcMjc0XDM0NFwxXDMwMVwzNTZcMzY2XDIxMFwzMTQiIFwKKyAgIlwzNjFcMzcyXDFcMzM3XDM3MFwzNzVcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM2IiBcCisgICJcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzRcMVwyMDZcMzQwXDM2M1wyMDNcMjVcMjc0XDM0NFwxa1wzMjdcMzU3XDIyNiIgXAorICAiXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzciIFwKKyAgIlwzNzdcMzc3XDIyNlwzNzZcMzc3XDM3NFwxXDMxNFwzMjFcMzI0XDIwM11velwybFwxNzdcMjEyXDM3MlwzNzRcMzcxIiBcCisgICJcMjAzXDM3NlwzNzdcMzc0XDFcMzMzXDM0MFwzNDNcMjAzXW96XDRecHtcMzY2XDM3M1wzNzZcMzc2XDM3N1wzNzRcMzA2IiBcCisgICJcMzE0XDMxNlwyMDNdb3pcMVwyMDJcMjIxXDIyN1wyMDVcMzc2XDM3N1wzNzRcMWt+XDIxMVwyMDNdb3pcM1wzNDFcMzQ2IiBcCisgICJcMzUxXDM3NlwzNzdcMzc0XDMyMFwzMjZcMzMwXDIwM11velwxdFwyMDdcMjIyXDIxM1wzNzZcMzc3XDM3NFwxXDMzMCIgXAorICAiXDMzNVwzNDBcMjAzXW96XDFtXDIwMFwyMTNcMjA1XDM3NlwzNzdcMzc0XDFcMjAyXDIyMVwyMjdcMjAzXW96XDNcMzA2IiBcCisgICJcMzE0XDMxNlwzNzZcMzc3XDM3NFwzMzZcMzY3XDM3NFwyMDNcMjVcMjc0XDM0NFwxXDBcMjc2XDM0NVwyMTNcMzc2XDM3NyIgXAorICAiXDM3NFwxXDM1N1wzNzRcMzc1XDIwNFwyNVwyNzRcMzQ0XDIwM1wzNzZcMzc3XDM3NFwyMDRcMjVcMjc0XDM0NFwxXDMzNiIgXAorICAiXDM2N1wzNzRcMjAyXDM3NlwzNzdcMzc0XDEjXDMwNFwzNDZcMjAzXDI1XDI3NFwzNDRcMVwzMTZcMzYzXDM3NFwyMDIiIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIwNFwzNzZcMzc3XDM3NCIgXAorICAiXDFuXDMzM1wzNjJcMjAzXDI1XDI3NFwzNDRcM2tcMzI3XDM1N1wzNzZcMzc3XDM3NFwzMDNcMzYxXDM3MFwyMDNcMjUiIFwKKyAgIlwyNzRcMzQ0XDFcMFwzMDRcMzUyXDIxM1wzNzZcMzc3XDM3NFwxXDMzMlwzNjNcMzcwXDIwM1wyNVwyNzRcMzQ0XDFcMCIgXAorICAiXDI3NlwzNDVcMjA1XDM3NlwzNzdcMzc0XDFJXDMyMFwzNTRcMjAzXDI1XDI3NFwzNDRcM1wyMzFcMzQyXDM2MlwzNzYiIFwKKyAgIlwzNzdcMzc0XDM1N1wzNzRcMzc1XDIwNFwyNVwyNzRcMzQ0XDFcMzcwXDM3NlwzNzdcMjA0XDM3NlwzNzdcMzc0XDFNIiBcCisgICJcMzIzXDM1N1wyMDNcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIwMlwzNzZcMzc3XDM3NFwyMDRcMjVcMjc0XDM0NCIgXAorICAiXDFcMzU2XDM3M1wzNzRcMjEzXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM1XDM2NlwzNzMiIFwKKyAgIlwyMDRcMzc2XDM3N1wzNzRcMVwyMDZcMzQwXDM2M1wyMDNcMjVcMjc0XDM0NFwxa1wzMjdcMzU3XDIyNlwzNzZcMzc3IiBcCisgICJcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3NyIgXAorICAiXDIyNlwzNzZcMzc3XDM3NFwyXDM1M1wzNjBcMzYzXnB7XDIwM11velw1XDIzNlwyNDZcMjU2XDM2NlwzNzNcMzc2XDM3NiIgXAorICAiXDM3N1wzNzRcMzQ3XDM1NVwzNTd3XDIxMlwyMjZcMjAzXW96XDF+XDIxNVwyMjNcMjAyXDM3NlwzNzdcMzc0XDFcMzA2IiBcCisgICJcMzE0XDMxNlwyMDNdb3pcMVwyMDJcMjIxXDIyN1wyMDRcMzc2XDM3N1wzNzRcMlwzMzVcMzQzXDM0NV5we1wyMDNdbyIgXAorICAielwzXDM1MVwzNTZcMzYwXDM3NlwzNzdcMzc0XDMzNVwzNDNcMzQ1XDIwM11velwyYnRcMTc3XDM0M1wzNTBcMzUzXDIxMiIgXAorICAiXDM3NlwzNzdcMzc0XDFcMzMwXDMzNVwzNDBcMjAzXW96XDFtXDIwMFwyMTNcMjA1XDM3NlwzNzdcMzc0XDFcMjAyXDIyMSIgXAorICAiXDIyN1wyMDNdb3pcM1wzMDZcMzE0XDMxNlwzNzZcMzc3XDM3NFwzNTZcMzczXDM3NFwyMDRcMjVcMjc0XDM0NFwxXDI3NCIgXAorICAiXDM1NVwzNzNcMjEyXDM3NlwzNzdcMzc0XDFcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjAzXDM3NlwzNzdcMzc0IiBcCisgICJcMjA0XDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDJcMzc2XDM3N1wzNzRcMSNcMzA0XDM0NlwyMDNcMjVcMjc0XDM0NCIgXAorICAiXDFcMzE2XDM2M1wzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzQiIFwKKyAgIlwyMDNcMzc2XDM3N1wzNzRcMlwzNjdcMzc1XDM3Ny9cMzEyXDM1M1wyMDNcMjVcMjc0XDM0NFwzXDIwNFwzMzVcMzYxIiBcCisgICJcMzc2XDM3N1wzNzRcMzM0XDM2NVwzNzJcMjAzXDI1XDI3NFwzNDRcMlwwXDI3NlwzNDVcMzE0XDM2MVwzNzJcMjEyXDM3NiIgXAorICAiXDM3N1wzNzRcMVwzNTZcMzczXDM3NFwyMDRcMjVcMjc0XDM0NFwxXDI3NFwzNTVcMzczXDIwNFwzNzZcMzc3XDM3NFwxIiBcCisgICJJXDMyMFwzNTRcMjAzXDI1XDI3NFwzNDRcNFwyMzFcMzQyXDM2MlwzNzZcMzc3XDM3NFwzNzBcMzc2XDM3N1wwXDI3NiIgXAorICAiXDM0NVwyMDNcMjVcMjc0XDM0NFwxXDI1N1wzNTFcMzY1XDIwNFwzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIwM1wyNVwyNzQiIFwKKyAgIlwzNDRcMVwyMDZcMzQwXDM2M1wyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwyMzNcMzQ1IiBcCisgICJcMzY0XDIxM1wzNzZcMzc3XDM3NFwxI1wzMDRcMzQ2XDIwM1wyNVwyNzRcMzQ0XDFcMjA3XDM0MVwzNjRcMjA0XDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMDZcMzQwXDM2M1wyMDNcMjVcMjc0XDM0NFwxa1wzMjdcMzU3XDIyNlwzNzZcMzc3XDM3NFwzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyMjdcMzc2IiBcCisgICJcMzc3XDM3NFwxXDIxMVwyMzBcMjM2XDIwNF1velwzY3VcMjAwcFwyMDNcMjE2XnB7XDIwNF1velwxXDI3N1wzMDRcMzA2IiBcCisgICJcMjAyXDM3NlwzNzdcMzc0XDFcMzA2XDMxNFwzMTZcMjAzXW96XDFkdlwyMDFcMjAzflwyMTVcMjIzXDJ2XDIxMVwyMjUiIFwKKyAgImFzflwyMDNdb3pcMW5cMjAxXDIxNFwyMDJcMzc2XDM3N1wzNzRcMlwzNzFcMzczXDM3MGR2XDIwMVwyMDNdb3pcMmJ0IiBcCisgICJcMTc3d1wyMTJcMjI2XDIwNX5cMjE1XDIyM1wyXDIwM1wyMjJcMjMwXDMwNFwzMTFcMzE0XDIwMlwzNzZcMzc3XDM3NCIgXAorICAiXDFcMzMwXDMzNVwzNDBcMjAzXW96XDFtXDIwMFwyMTNcMjA1XDM3NlwzNzdcMzc0XDFcMjAyXDIyMVwyMjdcMjAzXW8iIFwKKyAgInpcMVwzMDZcMzE0XDMxNlwyMDJcMzc2XDM3N1wzNzRcMShcMzA3XDM1MFwyMDNcMjVcMjc0XDM0NFwyXDBcMjc2XDM0NSIgXAorICAiKlwzMTBcMzUxXDIwNSxcMzExXDM1MlwyIiIxXDMxM1wzNTRcMjA3XDM0MVwzNjRcMjAyXDM3NlwzNzdcMzc0XDFcMzU3IiBcCisgICJcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDNcMzc2XDM3N1wzNzRcMjA0XDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NCIgXAorICAiXDIwMlwzNzZcMzc3XDM3NFwxI1wzMDRcMzQ2XDIwM1wyNVwyNzRcMzQ0XDFcMzE2XDM2M1wzNzRcMjAyXDM3NlwzNzciIFwKKyAgIlwzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMSpcMzEwXDM1MVwyMDMsXDMxMVwzNTJcMVwwXDMwMlwzNTFcMjA0IiBcCisgICJcMjVcMjc0XDM0NFw0XDI3NFwzNTVcMzczXDM3NlwzNzdcMzc0XDM3MFwzNzZcMzc3XDBcMzAyXDM1MVwyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDJcMzFcMjc1XDM0NSpcMzEwXDM1MVwyMDUsXDMxMVwzNTJcMkJcMzE0XDM0N1wyMzFcMzQyXDM2MlwyMDNcMzc2IiBcCisgICJcMzc3XDM3NFwxJVwzMDVcMzQ3XDIwM1wyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1KlwzMTBcMzUxXDIwMyxcMzExXDM1MiIgXAorICAiXDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMjMxXDM0MlwzNjJcMjAyXDM3NlwzNzdcMzc0XDEvXDMxMlwzNTMiIFwKKyAgIlwyMDNcMjVcMjc0XDM0NFwyXDBcMjc2XDM0NSpcMzEwXDM1MVwyMDMsXDMxMVwzNTJcMVwwXDMwMVwzNTBcMjAzXDI1IiBcCisgICJcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIwMlwzNzZcMzc3XDM3NFwxR1wzMTdcMzUzXDIwNFwyNVwyNzRcMzQ0XDEoXDMwNyIgXAorICAiXDM1MFwyMDUsXDMxMVwzNTJcMyIiMVwzMTNcMzU0d1wzMzNcMzU2XDM3MFwzNzZcMzc3XDIwMlwzNzZcMzc3XDM3NFwxIiBcCisgICJNXDMyM1wzNTdcMjA0XDI1XDI3NFwzNDRcMShcMzA3XDM1MFwyMDMsXDMxMVwzNTJcMVwwXDMwNFwzNTJcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwxa1wzMjdcMzU3XDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyMjdcMzc2XDM3N1wzNzRcMlwzNDNcMzUwXDM1M2V3XDIwMlwyMTFdb3pcMiIgXAorICAiXDE3N1wyMTZcMjI0XDM3M1wzNzVcMzcyXDIwMlwzNzZcMzc3XDM3NFwxXDMwNlwzMTRcMzE2XDIxNF1velwxXDI3MFwzMDAiIFwKKyAgIlwzMTFcMjAzXDM3NlwzNzdcMzc0XDFcMjUzXDI2M1wyNzNcMjEzXW96XDRfcXxcMzUyXDM1N1wzNjJcMzc2XDM3N1wzNzQiIFwKKyAgIlwzMzBcMzM1XDM0MFwyMDNdb3pcMW1cMjAwXDIxM1wyMDVcMzc2XDM3N1wzNzRcMVwyMDJcMjIxXDIyN1wyMDNdb3pcMSIgXAorICAiXDMwNlwzMTRcMzE2XDIwMlwzNzZcMzc3XDM3NFwxXDIzM1wzNDVcMzY0XDIxNFwyNVwyNzRcMzQ0XDNcMzAxXDM1NlwzNjYiIFwKKyAgIlwzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDNcMzc2XDM3N1wzNzRcMjA0XDI1XDI3NFwzNDQiIFwKKyAgIlwxXDMzNlwzNjdcMzc0XDIwMlwzNzZcMzc3XDM3NFwxI1wzMDRcMzQ2XDIwM1wyNVwyNzRcMzQ0XDFcMzE2XDM2M1wzNzQiIFwKKyAgIlwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjEzXDI1XDI3NFwzNDRcMixcMzExXDM1MlwzNzBcMzc2XDM3N1wyMDIiIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIxNFwyNVwyNzRcMzQ0XDFcMzE2XDM2M1wzNzRcMjAyXDM3NlwzNzdcMzc0IiBcCisgICJcMVwyMzNcMzQ1XDM2NFwyMTRcMjVcMjc0XDM0NFwxXDIzMVwzNDJcMzYyXDIwMlwzNzZcMzc3XDM3NFwxXDI1MFwzNDciIFwKKyAgIlwzNzFcMjE0XDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMDJcMzc2XDM3N1wzNzRcMVwyNzNcMzU0XDM3MVwyMTRcMjUiIFwKKyAgIlwyNzRcMzQ0XDFcMjM2XDM0N1wzNjZcMjAyXDM3NlwzNzdcMzc0XDJcMzEzXDM2MFwzNzFcMFwyNzZcMzQ1XDIxM1wyNSIgXAorICAiXDI3NFwzNDRcMWtcMzI3XDM1N1wyMjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjMwXDM3NlwzNzdcMzc0XDJcMzI1XDMzMlwzMzRneVwyMDRcMjA3IiBcCisgICJdb3pcMnhcMjEzXDIyN1wzNTRcMzYxXDM2NFwyMDNcMzc2XDM3N1wzNzRcMVwzMDZcMzE0XDMxNlwyMTNdb3pcMVwyMjUiIFwKKyAgIlwyMzVcMjQ1XDIwNFwzNzZcMzc3XDM3NFwyXDM3MlwzNzRcMzcxflwyMjFcMjM1XDIxM11velwzXDMzM1wzNDBcMzQzIiBcCisgICJcMzc2XDM3N1wzNzRcMzQyXDM0N1wzNTJcMjAzXW96XDF0XDIwN1wyMjJcMjA1XDM3NlwzNzdcMzc0XDFcMjExXDIzMCIgXAorICAiXDIzNlwyMDNdb3pcMVwzMTdcMzI0XDMyN1wyMDNcMzc2XDM3N1wzNzRcMU1cMzIzXDM1N1wyMTNcMjVcMjc0XDM0NFw0IiBcCisgICJcMjM3XDM1MFwzNjdcMzc2XDM3N1wzNzRcMzY3XDM3NVwzNzdcMFwyNzZcMzQ1XDIwMlwyNVwyNzRcMzQ0XDFcMFwyNzYiIFwKKyAgIlwzNDVcMjAzXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzU3XDM3NFwzNzVcMjAyXDM3NiIgXAorICAiXDM3N1wzNzRcMShcMzA3XDM1MFwyMDNcMjVcMjc0XDM0NFwxXDMzNVwzNjZcMzczXDIwMlwzNzZcMzc3XDM3NFwxXDAiIFwKKyAgIlwzMDJcMzUxXDIxMlwyNVwyNzRcMzQ0XDJcMFwzMDFcMzUwXDMzM1wzNjRcMzcxXDIwM1wzNzZcMzc3XDM3NFwyXDM3MCIgXAorICAiXDM3NlwzNzdHXDMxN1wzNTNcMjEzXDI1XDI3NFwzNDRcMVwyNzNcMzU0XDM3MVwyMDNcMzc2XDM3N1wzNzRcMU1cMzIzIiBcCisgICJcMzU3XDIxM1wyNVwyNzRcMzQ0XDFcMjM3XDM1MFwzNjdcMjAzXDM3NlwzNzdcMzc0XDFrXDMyN1wzNTdcMjEzXDI1XDI3NCIgXAorICAiXDM0NFwxXDIzMVwzNDJcMzYyXDIwM1wzNzZcMzc3XDM3NFwxd1wzMzNcMzU2XDIxM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MCIgXAorICAiXDM2M1wyMDNcMzc2XDM3N1wzNzRcMVwyMDdcMzQxXDM2NFwyMTNcMjVcMjc0XDM0NFwxblwzMzNcMzYyXDIyNlwzNzYiIFwKKyAgIlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3IiBcCisgICJcMzc3XDIzMVwzNzZcMzc3XDM3NFwzXDM1MVwzNTZcMzYwXDIzMVwyNDFcMjUxYnRcMTc3XDIwM11velwza35cMjExXDI1NyIgXAorICAiXDI2N1wyNzdcMzcwXDM3MlwzNjdcMjA0XDM3NlwzNzdcMzc0XDFcMzA2XDMxNFwzMTZcMjExXW96XDNneVwyMDRcMjYxIiBcCisgICJcMjcxXDMwMlwzNzNcMzc1XDM3MlwyMDVcMzc2XDM3N1wzNzRcM1wzNzFcMzczXDM3MFwyNTJcMjYyXDI3MmR2XDIwMSIgXAorICAiXDIxMF1velwyeFwyMTNcMjI3XDM3MlwzNzRcMzcxXDIwMlwzNzZcMzc3XDM3NFw0fVwyMjBcMjMzXW96XnB7XDI2NlwyNzciIFwKKyAgIlwzMDdcMjA1XDM3NlwzNzdcMzc0XDVcMzExXDMxNlwzMjFfcXxdb3pxXDIwNFwyMTdcMzcwXDM3MlwzNjdcMjAzXDM3NiIgXAorICAiXDM3N1wzNzRcM1wzNzBcMzc2XDM3N1wyMTFcMzQyXDM2NVwwXDMwMVwzNTBcMjEwXDI1XDI3NFwzNDRcMlwwXDMwNFwzNTIiIFwKKyAgIlwzNTZcMzczXDM3NFwyMDJcMzc2XDM3N1wzNzRcMU1cMzIzXDM1N1wyMDJcMjVcMjc0XDM0NFwxbVwzMzJcMzYxXDIwMyIgXAorICAiXDM3NlwzNzdcMzc0XDFuXDMzM1wzNjJcMjAyXDI1XDI3NFwzNDRcMUxcMzIyXDM1NlwyMDNcMzc2XDM3N1wzNzRcMVwyMDYiIFwKKyAgIlwzNDBcMzYzXDIwMlwyNVwyNzRcMzQ0XDJCXDMxNFwzNDdcMzcwXDM3NlwzNzdcMjAyXDM3NlwzNzdcMzc0XDF3XDMzMyIgXAorICAiXDM1NlwyMTBcMjVcMjc0XDM0NFwzXDBcMjc2XDM0NUxcMzIyXDM1NlwzMzZcMzY3XDM3NFwyMDVcMzc2XDM3N1wzNzQiIFwKKyAgIlwzXDM3MFwzNzZcMzc3XDIwNFwzMzVcMzYxXDBcMzAxXDM1MFwyMTBcMjVcMjc0XDM0NFwyKFwzMDdcMzUwXDM2NlwzNzMiIFwKKyAgIlwzNzZcMjAzXDM3NlwzNzdcMzc0XDNcMzcwXDM3NlwzNzdcMjExXDM0MlwzNjVcMFwzMDFcMzUwXDIxMFwyNVwyNzRcMzQ0IiBcCisgICJcMiNcMzA0XDM0NlwzNTZcMzczXDM3NFwyMDRcMzc2XDM3N1wzNzRcMlwyMzNcMzQ1XDM2NFwwXDMwMlwzNTFcMjEwXDI1IiBcCisgICJcMjc0XDM0NFwyXDBcMzAyXDM1MVwzMzdcMzcwXDM3NVwyMDRcMzc2XDM3N1wzNzRcMlwyMzdcMzUwXDM2NyNcMzA0XDM0NiIgXAorICAiXDIxMFwyNVwyNzRcMzQ0XDJcMFwzMDFcMzUwXDMzM1wzNjRcMzcxXDIwNFwzNzZcMzc3XDM3NFwyXDI1N1wzNTFcMzY1IiBcCisgICIlXDMwNVwzNDdcMjEwXDI1XDI3NFwzNDRcMlwwXDI3NlwzNDVcMzE0XDM2MVwzNzJcMjI2XDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDIzM1wzNzYiIFwKKyAgIlwzNzdcMzc0XDRcMzY1XDM3MlwzNzVcMzM1XDM0M1wzNDVcMzI1XDMzMlwzMzRcMzQzXDM1MFwzNTNcMjA3XDM3NlwzNzciIFwKKyAgIlwzNzRcMVwzMDZcMzE0XDMxNlwyMDNdb3pcMXVcMjEwXDIyNFwyMDRcMzI0XDMzMVwzMzNcMlwzMzVcMzQzXDM0NVwzNzMiIFwKKyAgIlwzNzVcMzcyXDIxMVwzNzZcMzc3XDM3NFwyXDM3MlwzNzRcMzcxXDMzNFwzNDJcMzQ0XDIwNlwzMjRcMzMxXDMzM1wyIiBcCisgICJcMzMxXDMzNlwzNDFcMzcyXDM3NFwzNzFcMjAzXDM3NlwzNzdcMzc0XDNcMzczXDM3NVwzNzJcMzMyXDMzN1wzNDJcMzQzIiBcCisgICJcMzUwXDM1M1wyMDdcMzc2XDM3N1wzNzRcM1wzNTFcMzU2XDM2MFwzMzBcMzM1XDM0MFwzNjZcMzczXDM3NlwyMDZcMzc2IiBcCisgICJcMzc3XDM3NFwyXDM3MFwzNzZcMzc3XDMxNlwzNjNcMzc0XDIwNlwyNzNcMzU0XDM3MVwyXDMwMlwzNTdcMzY3XDM2NiIgXAorICAiXDM3M1wzNzZcMjA0XDM3NlwzNzdcMzc0XDJcMzE0XDM2MVwzNzJcMzE1XDM2MlwzNzNcMjA1XDM3NlwzNzdcMzc0XDIiIFwKKyAgIlwzMTZcMzYzXDM3NFwzMTNcMzYwXDM3MVwyMDVcMzc2XDM3N1wzNzRcM1wzMzJcMzYzXDM3MFwzMTJcMzU3XDM3MFwzNzAiIFwKKyAgIlwzNzZcMzc3XDIwNFwzNzZcMzc3XDM3NFwxXDMxNlwzNjNcMzc0XDIwNlwyNzNcMzU0XDM3MVwyXDMwMlwzNTdcMzY3IiBcCisgICJcMzU2XDM3M1wzNzRcMjExXDM3NlwzNzdcMzc0XDJcMzcwXDM3NlwzNzdcMzE0XDM2MVwzNzJcMjA2XDI3M1wzNTRcMzcxIiBcCisgICJcMlwzMDJcMzU3XDM2N1wzNjdcMzc1XDM3N1wyMDZcMzc2XDM3N1wzNzRcMlwzNzBcMzc2XDM3N1wzMTZcMzYzXDM3NCIgXAorICAiXDIwNlwyNzNcMzU0XDM3MVwyXDMwMlwzNTdcMzY3XDM2NlwzNzNcMzc2XDIwNlwzNzZcMzc3XDM3NFwyXDM3MFwzNzYiIFwKKyAgIlwzNzdcMzE2XDM2M1wzNzRcMjA2XDI3M1wzNTRcMzcxXDJcMzAxXDM1NlwzNjZcMzU3XDM3NFwzNzVcMjA3XDM3NlwzNzciIFwKKyAgIlwzNzRcMVwzMzJcMzYzXDM3MFwyMDZcMjczXDM1NFwzNzFcMlwzMDFcMzU2XDM2NlwzNTZcMzczXDM3NFwyMDdcMzc2IiBcCisgICJcMzc3XDM3NFwyXDMzM1wzNjRcMzcxXDI3NFwzNTVcMzczXDIwNVwyNzNcMzU0XDM3MVwyXDI3NFwzNTVcMzczXDM1MCIgXAorICAiXDM3MVwzNzdcMjI3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDI0NlwzNzZcMzc3XDM3NFwxXDMwNlwzMTRcMzE2XDIwM11velwxXDIwMlwyMjFcMjI3IiBcCisgICJcMzc3XDM3NlwzNzdcMzc0XDMwNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNDZcMzc2XDM3N1wzNzRcMVwzMDZcMzE0XDMxNlwyMDNdb3pcMVwyMDIiIFwKKyAgIlwyMjFcMjI3XDM3N1wzNzZcMzc3XDM3NFwzMDZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjQ2XDM3NlwzNzdcMzc0XDFcMzA2XDMxNFwzMTZcMjAzIiBcCisgICJdb3pcMVwyMDJcMjIxXDIyN1wzNzdcMzc2XDM3N1wzNzRcMzA2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI0NlwzNzZcMzc3XDM3NFwxXDMwNlwzMTQiIFwKKyAgIlwzMTZcMjAzXW96XDFcMjAyXDIyMVwyMjdcMzc3XDM3NlwzNzdcMzc0XDMwNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNDZcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDMxNVwzMjJcMzI1XDIwM11velwxXDIxMVwyMzBcMjM2XDM3N1wzNzZcMzc3XDM3NFwzMDZcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjQ2XDM3NiIgXAorICAiXDM3N1wzNzRcMlwzNjBcMzY2XDM3MGl7XDIwNlwyMDJdb3pcMVwzMDJcMzA3XDMxMlwzNzdcMzc2XDM3N1wzNzRcMzA2IiBcCisgICJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3NyIgXAorICAiXDM3N1wzNzdcMjQ3XDM3NlwzNzdcMzc0XDNcMzU3XDM2NVwzNjdcMzEzXDMyMFwzMjJcMzM1XDM0M1wzNDVcMzc3XDM3NiIgXAorICAiXDM3N1wzNzRcMzA3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MSIgXAorICAiXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NCIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzQiIFwKKyAgIlwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3IiBcCisgICJcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2IiBcCisgICJcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NiIgXAorICAiXDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDIzMlwzNzdcMzc3XDM3NyIpCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL3BzcGxhc2hfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL3BzcGxhc2hfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYjY0NzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvcHNwbGFzaF9naXQuYmIKQEAgLTAsMCArMSwxMjIgQEAKK1NVTU1BUlkgPSAiVXNlcnNwYWNlIGZyYW1lYnVmZmVyIGJvb3QgbG9nbyBiYXNlZCBvbiB1c3BsYXNoIgorREVTQ1JJUFRJT04gPSAiUFNwbGFzaCBpcyBhIHVzZXJzcGFjZSBncmFwaGljYWwgYm9vdCBzcGxhc2ggc2NyZWVuIGZvciBtYWlubHkgZW1iZWRkZWQgTGludXggZGV2aWNlcyBzdXBwb3J0aW5nIGEgMTZicHAgb3IgMzJicHAgZnJhbWVidWZmZXIuIEl0IGhhcyBmZXcgZGVwZW5kZW5jaWVzIChqdXN0IGxpYmMpLCBzdXBwb3J0cyBiYXNpYyBpbWFnZXMgYW5kIHRleHQgYW5kIGhhbmRsZXMgcm90YXRpb24uIEl0cyB2aXN1YWwgbG9vayBpcyBjb25maWd1cmFibGUgYnkgYmFzaWMgc291cmNlIGNoYW5nZXMuIEFsc28gaW5jbHVkZWQgaXMgYSAnY2xpZW50JyBjb21tYW5kIHV0aWxpdHkgZm9yIHNlbmRpbmcgaW5mb3JtYXRpb24gdG8gcHNwbGFzaCBzdWNoIGFzIGJvb3QgcHJvZ3Jlc3MgaW5mb3JtYXRpb24uIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvcHNwbGFzaCIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vcHNwbGFzaC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MTY7bWQ1PTg0MGZiMjM1NmIxMGE4NWJlZDc4ZGQwOWRjNzc0NWM2IgorCitTUkNSRVYgPSAiMTRjOGY3YjcwNWRlOTQ0YmViNGRlM2YyOTY1MDZkODA4NzFlNDEwZiIKK1BWID0gIjAuMStnaXQke1NSQ1BWfSIKK1BSID0gInIxNSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0gXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1wc3BsYXNoLWZiLUNvbnZlcnQtcHNwbGFzaF9mYl9wbG90X3BpeGVsLXRvLWEtc3RhdGljLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BzcGxhc2gtaW5pdCBcCisgICAgICAgICAgICR7U1BMQVNIX0lNQUdFU30iCisKK1NQTEFTSF9JTUFHRVMgPSAiZmlsZTovL3BzcGxhc2gtcG9reS1pbWcuaDtvdXRzdWZmaXg9ZGVmYXVsdCIKKworcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIG9sZHBrZ3MgPSBkLmdldFZhcigiUEFDS0FHRVMiLCBUcnVlKS5zcGxpdCgpCisgICAgc3BsYXNoZmlsZXMgPSBkLmdldFZhcignU1BMQVNIX0lNQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBwa2dzID0gW10KKyAgICBsb2NhbHBhdGhzID0gW10KKyAgICBoYXNwbmcgPSBGYWxzZQorICAgIGZvciB1cmkgaW4gc3BsYXNoZmlsZXM6CisgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goW3VyaV0sIGQpCisgICAgICAgIGZsb2NhbCA9IG9zLnBhdGguYmFzZW5hbWUoZmV0Y2hlci5sb2NhbHBhdGgodXJpKSkKKyAgICAgICAgZmJhc2UgPSBvcy5wYXRoLnNwbGl0ZXh0KGZsb2NhbClbMF0KKyAgICAgICAgb3V0c3VmZml4ID0gZmV0Y2hlci51ZFt1cmldLnBhcm0uZ2V0KCJvdXRzdWZmaXgiKQorICAgICAgICBpZiBub3Qgb3V0c3VmZml4OgorICAgICAgICAgICAgaWYgZmJhc2Uuc3RhcnRzd2l0aCgicHNwbGFzaC0iKToKKyAgICAgICAgICAgICAgICBvdXRzdWZmaXggPSBmYmFzZVs4Ol0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3V0c3VmZml4ID0gZmJhc2UKKyAgICAgICAgICAgIGlmIG91dHN1ZmZpeC5lbmRzd2l0aCgnLWltZycpOgorICAgICAgICAgICAgICAgIG91dHN1ZmZpeCA9IG91dHN1ZmZpeFs6LTRdCisgICAgICAgIG91dG5hbWUgPSAicHNwbGFzaC0lcyIgJSBvdXRzdWZmaXgKKyAgICAgICAgaWYgb3V0bmFtZSA9PSAnJyBvciBvdXRuYW1lIGluIG9sZHBrZ3M6CisgICAgICAgICAgICBiYi5mYXRhbCgiVGhlIG91dHB1dCBuYW1lICclcycgZGVyaXZlZCBmcm9tIHRoZSBVUkkgJXMgaXMgbm90IHZhbGlkLCBwbGVhc2Ugc3BlY2lmeSB0aGUgb3V0c3VmZml4IHBhcmFtZXRlciIgJSAob3V0bmFtZSwgdXJpKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBrZ3MuYXBwZW5kKG91dG5hbWUpCisgICAgICAgIGlmIGZsb2NhbC5lbmRzd2l0aCgiLnBuZyIpOgorICAgICAgICAgICAgaGFzcG5nID0gVHJ1ZQorICAgICAgICBsb2NhbHBhdGhzLmFwcGVuZChmbG9jYWwpCisKKyAgICAjIFNldCB0aGVzZSBzbyB0aGF0IHdlIGhhdmUgbGVzcyB3b3JrIHRvIGRvIGluIGRvX2NvbXBpbGUgYW5kIGRvX2luc3RhbGxfYXBwZW5kCisgICAgZC5zZXRWYXIoIlNQTEFTSF9JTlNUQUxMIiwgIiAiLmpvaW4ocGtncykpCisgICAgZC5zZXRWYXIoIlNQTEFTSF9MT0NBTFBBVEhTIiwgIiAiLmpvaW4obG9jYWxwYXRocykpCisKKyAgICBpZiBoYXNwbmc6CisgICAgICAgIGQuYXBwZW5kVmFyKCJERVBFTkRTIiwgIiBnZGstcGl4YnVmLW5hdGl2ZSIpCisKKyAgICBkLnByZXBlbmRWYXIoIlBBQ0tBR0VTIiwgIiVzICIgJSAoIiAiLmpvaW4ocGtncykpKQorICAgIG1scHJlZml4ID0gZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkgb3IgJycKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpIG9yICcnCisgICAgZm9yIHAgaW4gcGtnczoKKyAgICAgICAgZXAgPSAnJXMlcycgJSAobWxwcmVmaXgsIHApCisgICAgICAgIGVwc3BsYXNoID0gJyVzJXMnICUgKG1scHJlZml4LCAncHNwbGFzaCcpCisgICAgICAgIGQuc2V0VmFyKCJGSUxFU18lcyIgJSBlcCwgIiR7YmluZGlyfS8lcyIgJSBwKQorICAgICAgICBkLnNldFZhcigiQUxURVJOQVRJVkVfJXMiICUgZXAsICdwc3BsYXNoJykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCJBTFRFUk5BVElWRV9UQVJHRVRfJXMiICUgZXAsICdwc3BsYXNoJywgJyR7YmluZGlyfS8lcycgJSBwKQorICAgICAgICBkLmFwcGVuZFZhcigiUkRFUEVORFNfJXMiICUgZXAsICIgJXMiICUgcG4pCisgICAgICAgIGlmIHAgPT0gInBzcGxhc2gtZGVmYXVsdCI6CisgICAgICAgICAgICBkLmFwcGVuZFZhcigiUlJFQ09NTUVORFNfJXMiICUgcG4sICIgJXMiICUgZXApCit9CisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1cGRhdGUtcmMuZCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtwc3BsYXNoXSA9ICIke2JpbmRpcn0vcHNwbGFzaCIKKworcHl0aG9uIGRvX2NvbXBpbGUgKCkgeworICAgIGltcG9ydCBzaHV0aWwKKworICAgICMgQnVpbGQgYSBzZXBhcmF0ZSBleGVjdXRhYmxlIGZvciBlYWNoIHNwbGFzaCBpbWFnZQorICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgY29udmVydHNjcmlwdCA9ICIlcy9tYWtlLWltYWdlLWhlYWRlci5zaCIgJSBkLmdldFZhcignUycsIFRydWUpCisgICAgZGVzdGZpbGUgPSAiJXMvcHNwbGFzaC1wb2t5LWltZy5oIiAlIGQuZ2V0VmFyKCdTJywgVHJ1ZSkKKyAgICBsb2NhbGZpbGVzID0gZC5nZXRWYXIoJ1NQTEFTSF9MT0NBTFBBVEhTJywgVHJ1ZSkuc3BsaXQoKQorICAgIG91dHB1dGZpbGVzID0gZC5nZXRWYXIoJ1NQTEFTSF9JTlNUQUxMJywgVHJ1ZSkuc3BsaXQoKQorICAgIGZvciBsb2NhbGZpbGUsIG91dHB1dGZpbGUgaW4gemlwKGxvY2FsZmlsZXMsIG91dHB1dGZpbGVzKToKKyAgICAgICAgaWYgbG9jYWxmaWxlLmVuZHN3aXRoKCIucG5nIik6CisgICAgICAgICAgICBvdXRwID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCclcyAlcyBQT0tZJyAlIChjb252ZXJ0c2NyaXB0LCBvcy5wYXRoLmpvaW4od29ya2RpciwgbG9jYWxmaWxlKSkpCisgICAgICAgICAgICBwcmludChvdXRwWzFdKQorICAgICAgICAgICAgZmJhc2UgPSBvcy5wYXRoLnNwbGl0ZXh0KGxvY2FsZmlsZSlbMF0KKyAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZSgiJXMtaW1nLmgiICUgZmJhc2UsIGRlc3RmaWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbih3b3JrZGlyLCBsb2NhbGZpbGUpLCBkZXN0ZmlsZSkKKyAgICAgICAgIyBGb3Igc29tZSByZWFzb24ganVzdCB1cGRhdGluZyB0aGUgaGVhZGVyIGlzIG5vdCBlbm91Z2gsIHdlIGhhdmUgdG8gdG91Y2ggdGhlIC5jCisgICAgICAgICMgZmlsZSBpbiBvcmRlciB0byBnZXQgaXQgdG8gcmVidWlsZAorICAgICAgICBvcy51dGltZSgiJXMvcHNwbGFzaC5jIiAlIGQuZ2V0VmFyKCdTJywgVHJ1ZSksIE5vbmUpCisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygib2VfcnVubWFrZSIsIGQpCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZSgicHNwbGFzaCIsIG91dHB1dGZpbGUpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfS9tbnQvLnBzcGxhc2gvCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcHNwbGFzaC1pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9wc3BsYXNoLnNoCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJZm9yIGkgaW4gJHtTUExBU0hfSU5TVEFMTH0gOyBkbworCQlpbnN0YWxsIC1tIDA3NTUgJGkgJHtEfSR7YmluZGlyfS8kaQorCWRvbmUKKwlybSAtZiAke0R9JHtiaW5kaXJ9L3BzcGxhc2gKK30KKworRklMRVNfJHtQTn0gKz0gIi9tbnQvLnBzcGxhc2giCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJwc3BsYXNoLnNoIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgMCBTIC4gc3RvcCAyMCAwIDEgNiAuIgorCitERVBFTkRTX2FwcGVuZCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCdzeXN0ZW1kLXN5c3RlbWN0bC1uYXRpdmUnLCcnLGQpfSIKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorCQlpZiBbIC1uICIkRCIgXTsgdGhlbgorCQkJT1BUUz0iLS1yb290PSREIgorCQlmaQorCQlzeXN0ZW1jdGwgJE9QVFMgbWFzayBwc3BsYXNoLnNlcnZpY2UKKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9maWxlcy9jb25maWctZGlyZW50LXN5bWJvbHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL2ZpbGVzL2NvbmZpZy1kaXJlbnQtc3ltYm9scy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmZmMDNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9maWxlcy9jb25maWctZGlyZW50LXN5bWJvbHMucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRml4IHRoZSBuYW1lcyBvZiB0aGUgU1RSVUNUX0RJUkVOVF9EIHN5bWJvbHMgdG8gbWF0Y2ggdGhlIG5hbWVzIHVzZWQgYnkgYm90aAorY29uZmlndXJlIGFuZCB0aGUgc291cmNlIGNvZGUuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIChodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLXJlYWRsaW5lLzIwMTQtMDUvbXNnMDAwMDguaHRtbCkKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK0Zyb20gZTQ4NjU2ODExNTUwNzc0ODkyZmQ0ZTBmNGIzYzdkNDE4NDIyZGE1MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitEYXRlOiBUdWUsIDI3IE1heSAyMDE0IDIyOjMyOjMxICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZy5oLmluOiBmaXggbmFtZXMgb2YgU1RSVUNUX0RJUkVOVF9EIHN5bWJvbHMKKworLS0tCisgY29uZmlnLmguaW4gfCAgICA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlnLmguaW4gYi9jb25maWcuaC5pbgoraW5kZXggYTY3ZTQzZS4uYTQyYWNjNSAxMDA2NDQKKy0tLSBhL2NvbmZpZy5oLmluCisrKysgYi9jb25maWcuaC5pbgorQEAgLTI0NCw5ICsyNDQsOSBAQAorIAorICN1bmRlZiBIQVZFX0dFVFBXX0RFQ0xTCisgCistI3VuZGVmIFNUUlVDVF9ESVJFTlRfSEFTX0RfSU5PCisrI3VuZGVmIEhBVkVfU1RSVUNUX0RJUkVOVF9EX0lOTworIAorLSN1bmRlZiBTVFJVQ1RfRElSRU5UX0hBU19EX0ZJTEVOTworKyN1bmRlZiBIQVZFX1NUUlVDVF9ESVJFTlRfRF9GSUxFTk8KKyAKKyAjdW5kZWYgSEFWRV9CU0RfU0lHTkFMUworIAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL2ZpbGVzL25vcnBhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL2ZpbGVzL25vcnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ3MTU4MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvZmlsZXMvbm9ycGF0aC5wYXRjaApAQCAtMCwwICsxLDIxIEBACitUaGlzIHN1cHBvcnQgc2NyaXB0IGVuZHMgdXAgaGFyZGNvZGluZyB1bm5lY2Vzc2FyeSBycGF0aHMgaW50byB0aGUgbGlicmFyaWVzLiBXZQord2lsbCBzZWFyY2ggJGxpYmRpciBhdXRvbWF0aWNhbGx5IHNvIHRoaXMgaXMganVzdCB3YXN0ZXMgc3BhY2UuIFRoZXJlIG1heSBiZSBzb21lCitjYXNlcyB0aGlzIGlzIG5lY2Vzc2FyeSBidXQgb3VyIHVzZSBjYXNlcyBhcmVuJ3Qgb25lIG9mIHRoZW0uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitSUCAyMDEyLzIvMjMKKworSW5kZXg6IHJlYWRsaW5lLTYuMi9zdXBwb3J0L3Nob2JqLWNvbmYKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSByZWFkbGluZS02LjIub3JpZy9zdXBwb3J0L3Nob2JqLWNvbmYJMjAxMi0wMi0yMyAxMTowNjozNy4xOTMxNzkzNzkgKzAwMDAKKysrKyByZWFkbGluZS02LjIvc3VwcG9ydC9zaG9iai1jb25mCTIwMTItMDItMjMgMTE6MDY6NTAuMDQ5MTc4OTE4ICswMDAwCitAQCAtMTE0LDcgKzExNCw3IEBACisgCVNIT0JKX0xEPScke0NDfScKKyAJU0hPQkpfTERGTEFHUz0nLXNoYXJlZCAtV2wsLXNvbmFtZSwkQCcKKyAKKy0JU0hMSUJfWExERkxBR1M9Jy1XbCwtcnBhdGgsJChsaWJkaXIpIC1XbCwtc29uYW1lLGBiYXNlbmFtZSAkQCAkKFNITElCX01JTk9SKWAnCisrCVNITElCX1hMREZMQUdTPSctV2wsLXNvbmFtZSxgYmFzZW5hbWUgJEAgJChTSExJQl9NSU5PUilgJworIAlTSExJQl9MSUJWRVJTSU9OPSckKFNITElCX0xJQlNVRkYpLiQoU0hMSUJfTUFKT1IpJChTSExJQl9NSU5PUiknCisgCTs7CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTUuMi9jb25maWd1cmUtZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS01LjIvY29uZmlndXJlLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTYwYTk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS01LjIvY29uZmlndXJlLWZpeC5wYXRjaApAQCAtMCwwICsxLDI2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworV2l0aG91dCB0aGlzIGl0IGZhaWxzIHRvIGxpbmsgYWdhaW5zdCBsaWJ0ZXJtY2FwIGNhdXNpbmcgdmFyaW91cyBtaXNzaW5nIHN5bWJvbHMgCitpc3N1ZXMuCisKK1JQIC0gOC8xMC8wOAorCitJbmRleDogcmVhZGxpbmUtNS4yL2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJlYWRsaW5lLTUuMi5vcmlnL2NvbmZpZ3VyZS5pbgkyMDA4LTEwLTA4IDA5OjU4OjUyLjAwMDAwMDAwMCArMDEwMAorKysrIHJlYWRsaW5lLTUuMi9jb25maWd1cmUuaW4JMjAwOC0xMC0wOCAwOTo1OTowMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMTEsMTAgKzIxMSwxMCBAQAorICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKGNvbmZpZ3VyYXRpb24gZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMpCisgICAgICAgICBldmFsIGBURVJNQ0FQX0xJQj0kVEVSTUNBUF9MSUIgJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gJHtzcmNkaXJ9L3N1cHBvcnQvc2hvYmotY29uZiAtQyAiJHtDQ30iIC1jICR7aG9zdF9jcHV9IC1vICR7aG9zdF9vc30gLXYgJHtob3N0X3ZlbmRvcn1gCisgCistIwljYXNlICIkU0hMSUJfTElCUyIgaW4KKy0jCSpjdXJzZXMqfCp0ZXJtY2FwKnwqdGVybWxpYiopCTs7CistIwkqKQkJCVNITElCX0xJQlM9IiRTSExJQl9MSUJTICRURVJNQ0FQX0xJQiIgOzsKKy0jCWVzYWMKKysJY2FzZSAiJFNITElCX0xJQlMiIGluCisrCSpjdXJzZXMqfCp0ZXJtY2FwKnwqdGVybWxpYiopCTs7CisrCSopCQkJU0hMSUJfTElCUz0iJFNITElCX0xJQlMgJFRFUk1DQVBfTElCIiA7OworKwllc2FjCisgCQorICAgICAgICAgQUNfU1VCU1QoU0hPQkpfQ0MpCisgICAgICAgICBBQ19TVUJTVChTSE9CSl9DRkxBR1MpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTUuMi9maXgtcmVkdW5kYW50LXJwYXRoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS01LjIvZml4LXJlZHVuZGFudC1ycGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTY2YjQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS01LjIvZml4LXJlZHVuZGFudC1ycGF0aC5wYXRjaApAQCAtMCwwICsxLDIxIEBACitUaGlzIHN1cHBvcnQgc2NyaXB0IGVuZHMgdXAgaGFyZGNvZGluZyB1bm5lY2Vzc2FyeSBycGF0aHMgaW50byB0aGUgbGlicmFyaWVzLiBXZQord2lsbCBzZWFyY2ggJGxpYmRpciBhdXRvbWF0aWNhbGx5IHNvIHRoaXMgaXMganVzdCB3YXN0ZXMgc3BhY2UuIFRoZXJlIG1heSBiZSBzb21lCitjYXNlcyB0aGlzIGlzIG5lY2Vzc2FyeSBidXQgb3VyIHVzZSBjYXNlcyBhcmVuJ3Qgb25lIG9mIHRoZW0uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiByZWFkbGluZS01LjIvc3VwcG9ydC9zaG9iai1jb25mCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcmVhZGxpbmUtNS4yLm9yaWcvc3VwcG9ydC9zaG9iai1jb25mCisrKysgcmVhZGxpbmUtNS4yL3N1cHBvcnQvc2hvYmotY29uZgorQEAgLTExMCw3ICsxMTAsNyBAQCBsaW51eCotKnxnbnUqLSp8aypic2QqLWdudS0qKQorIAlTSE9CSl9MRD0nJHtDQ30nCisgCVNIT0JKX0xERkxBR1M9Jy1zaGFyZWQgLVdsLC1zb25hbWUsJEAnCisgCistCVNITElCX1hMREZMQUdTPSctV2wsLXJwYXRoLCQobGliZGlyKSAtV2wsLXNvbmFtZSxgYmFzZW5hbWUgJEAgJChTSExJQl9NSU5PUilgJworKwlTSExJQl9YTERGTEFHUz0nLVdsLC1zb25hbWUsYGJhc2VuYW1lICRAICQoU0hMSUJfTUlOT1IpYCcKKyAJU0hMSUJfTElCVkVSU0lPTj0nJChTSExJQl9MSUJTVUZGKS4kKFNITElCX01BSk9SKSQoU0hMSUJfTUlOT1IpJworIAk7OworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS02LjMvY29uZmlndXJlLWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNi4zL2NvbmZpZ3VyZS1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYzMTA0ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNi4zL2NvbmZpZ3VyZS1maXgucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1dpdGhvdXQgdGhpcyBpdCBmYWlscyB0byBsaW5rIGFnYWluc3QgbGlidGVybWNhcCBjYXVzaW5nIHZhcmlvdXMgbWlzc2luZworc3ltYm9scyBpc3N1ZXMuCisKK1JQIC0gOC8xMC8wOAorCitTdXBwb3J0IDYuMyB3aGljaCB1c2VzIGNvbmZpZ3VyZS5hYyByYXRoZXIgdGhhbiBjb25maWd1cmUuaW4uCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCA4ICsrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggY2VhOGY5MS4uOTA3NWI4ZiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjE4LDEwICsyMTgsMTAgQEAgaWYgdGVzdCAtZiAke3NyY2Rpcn0vc3VwcG9ydC9zaG9iai1jb25mOyB0aGVuCisgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoY29uZmlndXJhdGlvbiBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcykKKyAgICAgICAgIGV2YWwgYFRFUk1DQVBfTElCPSRURVJNQ0FQX0xJQiAke0NPTkZJR19TSEVMTC0vYmluL3NofSAke3NyY2Rpcn0vc3VwcG9ydC9zaG9iai1jb25mIC1DICIke0NDfSIgLWMgJHtob3N0X2NwdX0gLW8gJHtob3N0X29zfSAtdiAke2hvc3RfdmVuZG9yfWAKKyAKKy0jCWNhc2UgIiRTSExJQl9MSUJTIiBpbgorLSMJKmN1cnNlcyp8KnRlcm1jYXAqfCp0ZXJtbGliKikJOzsKKy0jCSopCQkJU0hMSUJfTElCUz0iJFNITElCX0xJQlMgJFRFUk1DQVBfTElCIiA7OworLSMJZXNhYworKwljYXNlICIkU0hMSUJfTElCUyIgaW4KKysJKmN1cnNlcyp8KnRlcm1jYXAqfCp0ZXJtbGliKikJOzsKKysJKikJCQlTSExJQl9MSUJTPSIkU0hMSUJfTElCUyAkVEVSTUNBUF9MSUIiIDs7CisrCWVzYWMKKyAJCisgICAgICAgICBBQ19TVUJTVChTSE9CSl9DQykKKyAgICAgICAgIEFDX1NVQlNUKFNIT0JKX0NGTEFHUykKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTYuMy9yZWFkbGluZS1kaXNwYXRjaC1tdWx0aWtleS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNi4zL3JlYWRsaW5lLWRpc3BhdGNoLW11bHRpa2V5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZDFhYzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTYuMy9yZWFkbGluZS1kaXNwYXRjaC1tdWx0aWtleS5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDhlZjg1MmE1YmU3MmM3NWUxN2YyNTEwYmVhNTI0NTVmODA5YjU2Y2UgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDaGV0IFJhbWV5IDxjaGV0LnJhbWV5QGNhc2UuZWR1PgorRGF0ZTogRnJpLCAyOCBNYXIgMjAxNCAxNDowNzo0MiAtMDQwMAorU3ViamVjdDogW1BBVENIIDA0LzEwXSBSZWFkbGluZS02LjMgcGF0Y2ggMgorCitGaXhlcyBtdWx0aS1rZXkgaXNzdWUgaWRlbnRpZmllZCBpbiB0aGlzIHRocmVhZDoKK2h0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctcmVhZGxpbmUvMjAxNC0wMy9tc2cwMDAxMC5odG1sCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorLS0tCisgcmVhZGxpbmUuYyB8IDMgKystCisgMSBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9yZWFkbGluZS5jIGIvcmVhZGxpbmUuYworaW5kZXggZWI0ZWFlMy4uYWJiMjlhMCAxMDA2NDQKKy0tLSBhL3JlYWRsaW5lLmMKKysrKyBiL3JlYWRsaW5lLmMKK0BAIC03NDQsNyArNzQ0LDggQEAgX3JsX2Rpc3BhdGNoX2NhbGxiYWNrIChjeHQpCisgICAgIHIgPSBfcmxfc3Vic2VxX3Jlc3VsdCAociwgY3h0LT5vbGRtYXAsIGN4dC0+b2tleSwgKGN4dC0+ZmxhZ3MgJiBLU0VRX1NVQlNFUSkpOworIAorICAgUkxfQ0hFQ0tfU0lHTkFMUyAoKTsKKy0gIGlmIChyID09IDApCQkJLyogc3VjY2VzcyEgKi8KKysgIC8qIFdlIG9ubHkgdHJlYXQgdmFsdWVzIDwgMCBzcGVjaWFsbHkgdG8gc2ltdWxhdGUgcmVjdXJzaW9uLiAqLworKyAgaWYgKHIgPj0gMCB8fCAociA9PSAtMSAmJiAoY3h0LT5mbGFncyAmIEtTRVFfU1VCU0VRKSA9PSAwKSkJLyogc3VjY2VzcyEgb3IgZmFpbHVyZSEgKi8KKyAgICAgeworICAgICAgIF9ybF9rZXlzZXFfY2hhaW5fZGlzcG9zZSAoKTsKKyAgICAgICBSTF9VTlNFVFNUQVRFIChSTF9TVEFURV9NVUxUSUtFWSk7CistLSAKKzEuOC4zLjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS02LjMvcmVhZGxpbmU2My0wMDMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTYuMy9yZWFkbGluZTYzLTAwMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGE5ZDgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS02LjMvcmVhZGxpbmU2My0wMDMKQEAgLTAsMCArMSw0MyBAQAorcmVhZGxpbmU6IFNlY3VyaXR5IEFkdmlzb3J5IC0gcmVhZGxpbmUgLSBDVkUtMjAxNC0yNTI0CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogWXVlIFRhbyA8eXVlLnRhb0B3aW5kcml2ZXIuY29tPgorCisJCQkgICBSRUFETElORSBQQVRDSCBSRVBPUlQKKwkJCSAgID09PT09PT09PT09PT09PT09PT09PQorCitSZWFkbGluZS1SZWxlYXNlOiA2LjMKK1BhdGNoLUlEOiByZWFkbGluZTYzLTAwMworCitCdWctUmVwb3J0ZWQtYnk6CitCdWctUmVmZXJlbmNlLUlEOgorQnVnLVJlZmVyZW5jZS1VUkw6CisKK0J1Zy1EZXNjcmlwdGlvbjoKKworVGhlcmUgYXJlIGRlYnVnZ2luZyBmdW5jdGlvbnMgaW4gdGhlIHJlYWRsaW5lIHJlbGVhc2UgdGhhdCBhcmUgdGhlb3JldGljYWxseQorZXhwbG9pdGFibGUgYXMgc2VjdXJpdHkgcHJvYmxlbXMuICBUaGV5IGFyZSBub3QgcHVibGljIGZ1bmN0aW9ucywgYnV0IGhhdmUKK2dsb2JhbCBsaW5rYWdlLgorCitQYXRjaCAoYXBwbHkgd2l0aCBgcGF0Y2ggLXAwJyk6CisKKyoqKiAuLi9yZWFkbGluZS02LjMvdXRpbC5jCTIwMTMtMDktMDIgMTM6MzY6MTIuMDAwMDAwMDAwIC0wNDAwCistLS0gdXRpbC5jCTIwMTQtMDMtMjAgMTA6MjU6NTMuMDAwMDAwMDAwIC0wNDAwCisqKioqKioqKioqKioqKioKKyoqKiA0NzcsNDgwICoqKioKKy0tLSA0NzksNDgzIC0tLS0KKyAgfQorICAKKysgI2lmIGRlZmluZWQgKERFQlVHKQorICAjaWYgZGVmaW5lZCAoVVNFX1ZBUkFSR1MpCisgIHN0YXRpYyBGSUxFICpfcmxfdHJhY2VmcDsKKyoqKioqKioqKioqKioqKgorKioqIDUzOSw1NDIgKioqKgorLS0tIDU0Miw1NDYgLS0tLQorICB9CisgICNlbmRpZgorKyAjZW5kaWYgLyogREVCVUcgKi8KKyAgCisgIAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNjYyYzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLmluYwpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIGVkaXRpbmcgdHlwZWQgY29tbWFuZCBsaW5lcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBHTlUgUmVhZGxpbmUgbGlicmFyeSBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgZm9yIHVzZSBieSBhcHBsaWNhdGlvbnMgdGhhdCBhbGxvdyB1c2VycyB0byBlZGl0IFwKK2NvbW1hbmQgbGluZXMgYXMgdGhleSBhcmUgdHlwZWQgaW4uIEJvdGggRW1hY3MgYW5kIHZpIGVkaXRpbmcgbW9kZXMgYXJlIGF2YWlsYWJsZS4gVGhlIFJlYWRsaW5lIGxpYnJhcnkgaW5jbHVkZXMgIFwKK2FkZGl0aW9uYWwgZnVuY3Rpb25zIHRvIG1haW50YWluIGEgbGlzdCBvZiBwcmV2aW91c2x5LWVudGVyZWQgY29tbWFuZCBsaW5lcywgdG8gcmVjYWxsIGFuZCBwZXJoYXBzIHJlZWRpdCB0aG9zZSAgIFwKK2xpbmVzLCBhbmQgcGVyZm9ybSBjc2gtbGlrZSBoaXN0b3J5IGV4cGFuc2lvbiBvbiBwcmV2aW91cyBjb21tYW5kcy4iCitTRUNUSU9OID0gImxpYnMiCisKKyMgR1BMdjIrICg8IDYuMCksIEdQTHYzKyAoPj0gNi4wKQorTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworREVQRU5EUyArPSAibmN1cnNlcyIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3JlYWRsaW5lLyR7QlBOfS0ke1BWfS50YXIuZ3o7bmFtZT1hcmNoaXZlIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS1maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29uZmlnLWRpcmVudC1zeW1ib2xzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25vcnBhdGgucGF0Y2giCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRVhUUkFfQVVUT1JFQ09ORiArPSAiLS1leGNsdWRlPWF1dG9oZWFkZXIiCisKK0xFQURfU09OQU1FID0gImxpYnJlYWRsaW5lLnNvIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJaWYgWyAhIC1lICR7U30vYWNpbmNsdWRlLm00IF07IHRoZW4KKwkJY2F0ICR7U30vYWNsb2NhbC5tNCA+ICR7U30vYWNpbmNsdWRlLm00CisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCSMgTWFrZSBpbnN0YWxsIGRvZXNuJ3QgcHJvcGVybHkgaW5zdGFsbCB0aGVzZQorCW9lX2xpYmluc3RhbGwgLXNvIC1DIHNobGliIGxpYmhpc3RvcnkgJHtEfSR7bGliZGlyfQorCW9lX2xpYmluc3RhbGwgLXNvIC1DIHNobGliIGxpYnJlYWRsaW5lICR7RH0ke2xpYmRpcn0KKworCXJtZGlyICR7RH0ke2JpbmRpcn0KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZV81LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTAwN2EyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZV81LjIuYmIKQEAgLTAsMCArMSw4NCBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBlZGl0aW5nIHR5cGVkIGNvbW1hbmQgbGluZXMiCitERVNDUklQVElPTiA9ICJUaGUgR05VIFJlYWRsaW5lIGxpYnJhcnkgcHJvdmlkZXMgYSBzZXQgb2YgZnVuY3Rpb25zIGZvciB1c2UgYnkgYXBwbGljYXRpb25zIHRoYXQgYWxsb3cgdXNlcnMgdG8gZWRpdCBcCitjb21tYW5kIGxpbmVzIGFzIHRoZXkgYXJlIHR5cGVkIGluLiBCb3RoIEVtYWNzIGFuZCB2aSBlZGl0aW5nIG1vZGVzIGFyZSBhdmFpbGFibGUuIFRoZSBSZWFkbGluZSBsaWJyYXJ5IGluY2x1ZGVzICBcCithZGRpdGlvbmFsIGZ1bmN0aW9ucyB0byBtYWludGFpbiBhIGxpc3Qgb2YgcHJldmlvdXNseS1lbnRlcmVkIGNvbW1hbmQgbGluZXMsIHRvIHJlY2FsbCBhbmQgcGVyaGFwcyByZWVkaXQgdGhvc2UgICBcCitsaW5lcywgYW5kIHBlcmZvcm0gY3NoLWxpa2UgaGlzdG9yeSBleHBhbnNpb24gb24gcHJldmlvdXMgY29tbWFuZHMuIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTAzYjM2ZmRkODRmNzRiOGQ4MTg5YTIwMmI5ODBiNjdmIgorCitERVBFTkRTICs9ICJuY3Vyc2VzIgorCitQUiA9ICJyOSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3JlYWRsaW5lLyR7QlBOfS0ke1BWfS50YXIuZ3o7bmFtZT1hcmNoaXZlIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9yZWFkbGluZS9yZWFkbGluZS01LjItcGF0Y2hlcy9yZWFkbGluZTUyLTAwMTtuYW1lPXBhdGNoMTthcHBseT15ZXM7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9yZWFkbGluZS9yZWFkbGluZS01LjItcGF0Y2hlcy9yZWFkbGluZTUyLTAwMjtuYW1lPXBhdGNoMjthcHBseT15ZXM7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9yZWFkbGluZS9yZWFkbGluZS01LjItcGF0Y2hlcy9yZWFkbGluZTUyLTAwMztuYW1lPXBhdGNoMzthcHBseT15ZXM7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9yZWFkbGluZS9yZWFkbGluZS01LjItcGF0Y2hlcy9yZWFkbGluZTUyLTAwNDtuYW1lPXBhdGNoNDthcHBseT15ZXM7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9yZWFkbGluZS9yZWFkbGluZS01LjItcGF0Y2hlcy9yZWFkbGluZTUyLTAwNTtuYW1lPXBhdGNoNTthcHBseT15ZXM7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9yZWFkbGluZS9yZWFkbGluZS01LjItcGF0Y2hlcy9yZWFkbGluZTUyLTAwNjtuYW1lPXBhdGNoNjthcHBseT15ZXM7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9yZWFkbGluZS9yZWFkbGluZS01LjItcGF0Y2hlcy9yZWFkbGluZTUyLTAwNztuYW1lPXBhdGNoNzthcHBseT15ZXM7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9yZWFkbGluZS9yZWFkbGluZS01LjItcGF0Y2hlcy9yZWFkbGluZTUyLTAwODtuYW1lPXBhdGNoODthcHBseT15ZXM7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9yZWFkbGluZS9yZWFkbGluZS01LjItcGF0Y2hlcy9yZWFkbGluZTUyLTAwOTtuYW1lPXBhdGNoOTthcHBseT15ZXM7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9yZWFkbGluZS9yZWFkbGluZS01LjItcGF0Y2hlcy9yZWFkbGluZTUyLTAxMDtuYW1lPXBhdGNoMTA7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vcmVhZGxpbmUvcmVhZGxpbmUtNS4yLXBhdGNoZXMvcmVhZGxpbmU1Mi0wMTE7bmFtZT1wYXRjaDExO2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDEyO25hbWU9cGF0Y2gxMjthcHBseT15ZXM7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9yZWFkbGluZS9yZWFkbGluZS01LjItcGF0Y2hlcy9yZWFkbGluZTUyLTAxMztuYW1lPXBhdGNoMTM7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vcmVhZGxpbmUvcmVhZGxpbmUtNS4yLXBhdGNoZXMvcmVhZGxpbmU1Mi0wMTQ7bmFtZT1wYXRjaDE0O2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWctZGlyZW50LXN5bWJvbHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LXJlZHVuZGFudC1ycGF0aC5wYXRjaCIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiZTM5MzMxZjMyYWQxNDAwOWI5ZmY0OWNjMTBjNWU3NTEiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIxMmU4OGQ5NmFlZTJjZDExOTI1MDAzNTZmMDUzNTU0MGRiNDk5MjgyY2E3Zjc2MzM5ZmI0MjI4YzMxMjQ5ZjQ1IgorCitTUkNfVVJJW3BhdGNoMS5tZDVzdW1dICAgID0gIjlkNGQ0MTYyMmFhOWIyMzBjNTdmNjg1NDhjZTg3ZDhmIgorU1JDX1VSSVtwYXRjaDEuc2hhMjU2c3VtXSA9ICJlYWMzMDRjMzY5MTU0MDU5ZjkzMDQ5YWRhMzI4NzM5ZmFhZjQwMzM4ZDNjYjFmYjRiNTQ0YzkzZDVjZTNmOGQ1IgorU1JDX1VSSVtwYXRjaDIubWQ1c3VtXSAgICA9ICJmMDNlNTEyZDE0MjA2ZTM3ZjdkNmE3NDhiNTZiOTQ3NiIKK1NSQ19VUklbcGF0Y2gyLnNoYTI1NnN1bV0gPSAiOWRlYWNhZWYyNTUwN2EwYzJhZTBiNjYxYmY5MzQyNTU5YjU5YTI5NTRkNjZlYTNjNWY1YmNkOTAwZmRmY2Y3OCIKK1NSQ19VUklbcGF0Y2gzLm1kNXN1bV0gICAgPSAiMjUyYjQyZDg3NTBmMWE5NGI2YmRmMDg2NjEyZGNlYjIiCitTUkNfVVJJW3BhdGNoMy5zaGEyNTZzdW1dID0gIjJhNTVkMmVjYjFjOWIwMTQ3YWViMTkzYTYzMjM2MTZhYjMxYzFjNTI1YTgzYjJkYjNhOTk0YjE1NTk0YmE5MzQiCitTUkNfVVJJW3BhdGNoNC5tZDVzdW1dICAgID0gImEzMjMzM2MyZTYwM2EzZWQyNTA1MTRlOTEwNTBlNTUyIgorU1JDX1VSSVtwYXRjaDQuc2hhMjU2c3VtXSA9ICJhMDNiNjU2MzM3ODFlZmE3YzNhYWU1ZDU3MTYyOTg1ZTdiN2EzYzEwYWNmMGYyNjIxYmU2MTBlMTZmMjdlNWYyIgorU1JDX1VSSVtwYXRjaDUubWQ1c3VtXSAgICA9ICI4MTA2Nzk2YzA5Yjc4OTUyM2EzYTc4YWI2OWMwNGI2ZCIKK1NSQ19VUklbcGF0Y2g1LnNoYTI1NnN1bV0gPSAiMDYwMDE4OTY1MTQxNDhhNzU3ZWE2ZWRiYmQ0MGM0ZmM0MzMxZGM2NTM4NDcyNDQzODZjMzdiMTM4YjE1MGY2NCIKK1NSQ19VUklbcGF0Y2g2Lm1kNXN1bV0gICAgPSAiNTEyMTg4ZTJiZjA4MzdmN2VjYTE5ZGJmNzFmMTgyYWUiCitTUkNfVVJJW3BhdGNoNi5zaGEyNTZzdW1dID0gImRmZWYzZTk4MmMwYWRmOGJiNWE5YjdkMDQ2OGVjOGY1ZjE4MTM4YjMyNWUyODc1OTQzNzQ2NGRlNWJlNzEwMTMiCitTUkNfVVJJW3BhdGNoNy5tZDVzdW1dICAgID0gImFjMTdhY2E2MmViNmZiMzk4YzlmMmZlOWRlNTQwYWZmIgorU1JDX1VSSVtwYXRjaDcuc2hhMjU2c3VtXSA9ICI3NzViMDI4YzdiNzYxMzk3YWM2YWUxYmRmYmFjN2U4OTZkYzNiOWIzYWRjMmY5MTMxMjQ5OTE4MGNhMTNiZGQxIgorU1JDX1VSSVtwYXRjaDgubWQ1c3VtXSAgICA9ICIyNDg0YzM5MmRiMDIxOTA1ZjExMmNmOTdhOTRkZmQ0YyIKK1NSQ19VUklbcGF0Y2g4LnNoYTI1NnN1bV0gPSAiYTIxYjRlMGJmMDUzMGI4NzhiYWQyNGQ1YmUyM2QxOGE5ZTAzYTc1YTMxYWUzMDg0NGRjMDkzM2JiM2Q3N2VjZCIKK1NSQ19VUklbcGF0Y2g5Lm1kNXN1bV0gICAgPSAiZmM2ZWIzNWQwNzkxNGZhZTVjNTdkNDljMTI0ODNmZjciCitTUkNfVVJJW3BhdGNoOS5zaGEyNTZzdW1dID0gIjEzOGQ1ZTBmMDcwOWE0N2EyZDE2MjEyOTVhM2RkNWUzY2M3M2I2M2I1Y2MyOGRhYjAzYWJjNGU5NGZlOTVlY2YiCitTUkNfVVJJW3BhdGNoMTAubWQ1c3VtXSAgICA9ICI3YTJiZjNkYzdhYzc2ODBiMTQ2MWE1NzAxMTAwZTkxYiIKK1NSQ19VUklbcGF0Y2gxMC5zaGEyNTZzdW1dID0gIjgzZjhjMWFhZGI4NmIxYTJmYWQ4ODIxYTljNmJlNzJhOGRlNWFmZDdmZDlmZGU1OGEzMGIzYjU3ZDkzOTY5M2UiCitTUkNfVVJJW3BhdGNoMTEubWQ1c3VtXSAgICA9ICJlZjZjZWY2ODIyNjYzNDcwZjZhYzhjNTE3YzVhN2VjNiIKK1NSQ19VUklbcGF0Y2gxMS5zaGEyNTZzdW1dID0gIjA4YWQzMzg0YWIwOTA2ZTZmYTRjYzQxN2ViOGM0M2ZmNTkzNzViY2VhZDE1ZmQ1YzhlMzE3MzBmMDQxM2IzZDYiCitTUkNfVVJJW3BhdGNoMTIubWQ1c3VtXSAgICA9ICJlM2U5ZjQ0MWM4MTExNTg5ODU1YmMzNjNlNTY0MGY2YyIKK1NSQ19VUklbcGF0Y2gxMi5zaGEyNTZzdW1dID0gIjIwZjAyNDNiZTIyOTljMjMyMTM0OTJjYzJjMTljZmQxNWNjNTI4ZDJiNTY2YTc2YTJkZTU4MzA2YmI5ZTRjOWUiCitTUkNfVVJJW3BhdGNoMTMubWQ1c3VtXSAgICA9ICIzZTJlNWY1NDNlZDI2OGE2OGZkMWZhODM5ZmFhZGUxYSIKK1NSQ19VUklbcGF0Y2gxMy5zaGEyNTZzdW1dID0gIjBjYzY0OTUxNmE1YmRmYTYxYzVlNTY5Mzc0MDc1NzAyODhiNjk3MmQ3NWFhMWJkMDYwYWQzMGViZTk4MTQ0ZDUiCitTUkNfVVJJW3BhdGNoMTQubWQ1c3VtXSAgICA9ICJhMWJlMzBlMWM2ZjEwOTliYjVmY2VmMDBhMjYzMWZiOCIKK1NSQ19VUklbcGF0Y2gxNC5zaGEyNTZzdW1dID0gIjZmMWE2ODMyMGQwMTUyMmNhMWVhNWE3MzcxMjRlY2M4NzM5ZjNkY2JmZWEyZGVlMjFlM2NjZjgzOWEyMWE4MTciCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0VYVFJBX0FVVE9SRUNPTkYgKz0gIi0tZXhjbHVkZT1hdXRvaGVhZGVyIgorCitMRUFEX1NPTkFNRSA9ICJsaWJyZWFkbGluZS5zbyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCWlmIFsgISAtZSAke1N9L2FjaW5jbHVkZS5tNCBdOyB0aGVuCisJCWNhdCAke1N9L2FjbG9jYWwubTQgPiAke1N9L2FjaW5jbHVkZS5tNAorCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwkjIE1ha2UgaW5zdGFsbCBkb2Vzbid0IHByb3Blcmx5IGluc3RhbGwgdGhlc2UKKwlvZV9saWJpbnN0YWxsIC1zbyAtQyBzaGxpYiBsaWJoaXN0b3J5ICR7RH0ke2xpYmRpcn0KKwlvZV9saWJpbnN0YWxsIC1zbyAtQyBzaGxpYiBsaWJyZWFkbGluZSAke0R9JHtsaWJkaXJ9Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmVfNi4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZV82LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU5NjRhNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmVfNi4zLmJiCkBAIC0wLDAgKzEsOCBAQAorcmVxdWlyZSByZWFkbGluZS5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL3JlYWRsaW5lNjMtMDAzIFwKKyAgICAgICAgICAgIGZpbGU6Ly9yZWFkbGluZS1kaXNwYXRjaC1tdWx0aWtleS5wYXRjaCIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiMzNjOGZiMjc5ZTk4MTI3NGY0ODVmZDkxZGE3N2U5NGEiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI1NmJhNjA3MWI5NDYyZjk4MGM1YTcyYWIwMDIzODkzYjY1YmE2ZGViYjRlZWI0NzVkN2E1NjNkYzY1Y2FmZDQzIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlscy0yLjEuMC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlscy0yLjEuMC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ4MjhkNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzZnN1dGlscy9zeXNmc3V0aWxzLTIuMS4wL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9mdW5jPWRldGFpbCZhaWQ9MzYwMDM0NSZncm91cF9pZD00NDQyNyZhdGlkPTQzOTU0NF0KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmQgc3lzZnN1dGlscy0yLjEuMC9jb25maWd1cmUuYWMgc3lzZnN1dGlscy0yLjEuMC9jb25maWd1cmUuYWMKKy0tLSBzeXNmc3V0aWxzLTIuMS4wL2NvbmZpZ3VyZS5hYwkyMDA2LTA4LTA3IDA4OjA4OjAwLjAwMDAwMDAwMCArMDMwMAorKysrIHN5c2ZzdXRpbHMtMi4xLjAvY29uZmlndXJlLmFjCTIwMTMtMDEtMTEgMDg6MTM6MDguNjUxNTUwNjM0ICswMjAwCitAQCAtMiw3ICsyLDcgQEAKKyBBQ19JTklUKHN5c2ZzdXRpbHMsIDIuMS4wLCBsaW51eC1kaWFnLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCkKKyBBTV9JTklUX0FVVE9NQUtFCisgQUNfQ09ORklHX1NSQ0RJUihbY29uZmlnLmguaW5dKQorLUFNX0NPTkZJR19IRUFERVIoW2NvbmZpZy5oXSkKKytBQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmhdKQorCisgIyBDaGVja3MgZm9yIEtMSUJDIHN1cHBvcnQgKHNob3VsZCBiZSBiZWZvcmUgQUNfUFJPR19MSUJUT09MIGFuZCBBQ19QUk9HX0NDKQorIEFDX0NIRUNLX0tMSUJDCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlscy0yLjEuMC9zZXBhcmF0ZWJ1aWxkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXNmc3V0aWxzL3N5c2ZzdXRpbHMtMi4xLjAvc2VwYXJhdGVidWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmU3MjVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXNmc3V0aWxzL3N5c2ZzdXRpbHMtMi4xLjAvc2VwYXJhdGVidWlsZC5wYXRjaApAQCAtMCwwICsxLDY1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworRml4IG91dCBvZiB0cmVlIGJ1aWxkIGlzc3VlcyBzbyAke0J9ICE9ICR7U30gd29ya3MuCisKK1JQIDIwMTMvMDMvMTgKKworSW5kZXg6IHN5c2ZzdXRpbHMtMi4xLjAvY21kL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3lzZnN1dGlscy0yLjEuMC5vcmlnL2NtZC9NYWtlZmlsZS5hbQkyMDEzLTAzLTA4IDA4OjU3OjI3LjIyNDU1NjUwOCArMDAwMAorKysrIHN5c2ZzdXRpbHMtMi4xLjAvY21kL01ha2VmaWxlLmFtCTIwMTMtMDMtMDggMDg6NTc6MjcuNDgwNTU2NTAyICswMDAwCitAQCAtMSw2ICsxLDYgQEAKKyBiaW5fUFJPR1JBTVMgPSBzeXN0b29sIAorIHN5c3Rvb2xfU09VUkNFUyA9IHN5c3Rvb2wuYyBuYW1lcy5jIG5hbWVzLmgKKy1JTkNMVURFUyA9IC1JLi4vaW5jbHVkZQorK0lOQ0xVREVTID0gLUkkKHNyY2RpcikvLi4vaW5jbHVkZQorIExEQUREID0gLi4vbGliL2xpYnN5c2ZzLmxhCisgRVhUUkFfQ0ZMQUdTID0gQEVYVFJBX0NGTEFHU0AKKyBBTV9DRkxBR1MgPSAtV2FsbCAtVyAtV3N0cmljdC1wcm90b3R5cGVzICQoRVhUUkFfQ0ZMQUdTKQorSW5kZXg6IHN5c2ZzdXRpbHMtMi4xLjAvbGliL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3lzZnN1dGlscy0yLjEuMC5vcmlnL2xpYi9NYWtlZmlsZS5hbQkyMDEzLTAzLTA4IDA4OjU3OjI3LjIyNDU1NjUwOCArMDAwMAorKysrIHN5c2ZzdXRpbHMtMi4xLjAvbGliL01ha2VmaWxlLmFtCTIwMTMtMDMtMDggMDg6NTc6MjcuNDgwNTU2NTAyICswMDAwCitAQCAtMSw3ICsxLDcgQEAKKyBsaWJfTFRMSUJSQVJJRVMgPSBsaWJzeXNmcy5sYQorIGxpYnN5c2ZzX2xhX1NPVVJDRVMgPSBzeXNmc191dGlscy5jIHN5c2ZzX2F0dHIuYyBzeXNmc19jbGFzcy5jIGRsaXN0LmMgXAorICAgICAgIHN5c2ZzX2RldmljZS5jIHN5c2ZzX2RyaXZlci5jIHN5c2ZzX2J1cy5jIHN5c2ZzX21vZHVsZS5jIHN5c2ZzLmgKKy1JTkNMVURFUyA9IC1JLi4vaW5jbHVkZQorK0lOQ0xVREVTID0gLUkkKHNyY2RpcikvLi4vaW5jbHVkZQorIGxpYnN5c2ZzX2xhX0xERkxBR1MgPSAtdmVyc2lvbi1pbmZvIDI6MTowCisgRVhUUkFfQ0ZMQUdTID0gQEVYVFJBX0NMRkFHU0AKKyBsaWJzeXNmc19sYV9DRkxBR1MgPSAtV2FsbCAtVyAtV3N0cmljdC1wcm90b3R5cGVzICQoRVhUUkFfQ0xGQUdTKQorSW5kZXg6IHN5c2ZzdXRpbHMtMi4xLjAvdGVzdC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHN5c2ZzdXRpbHMtMi4xLjAub3JpZy90ZXN0L01ha2VmaWxlLmFtCTIwMTMtMDMtMDggMDg6NTc6MjcuMjI0NTU2NTA4ICswMDAwCisrKysgc3lzZnN1dGlscy0yLjEuMC90ZXN0L01ha2VmaWxlLmFtCTIwMTMtMDMtMDggMDk6MDY6NDguMTk2NTQzMzI2ICswMDAwCitAQCAtMiwxNCArMiwxNCBAQAorIEJVSUxUX1NPVVJDRVMgPSB0ZXN0LmgKKyBDTEVBTkZJTEVTID0gdGVzdC5oCisgdGVzdC5oOgorLQkuL2NyZWF0ZS10ZXN0CisrCSQoc3JjZGlyKS9jcmVhdGUtdGVzdCAkKHNyY2RpcikvbGlic3lzZnMuY29uZgorIGdldF9kZXZpY2VfU09VUkNFUyA9IGdldF9kZXZpY2UuYworIGdldF9kcml2ZXJfU09VUkNFUyA9IGdldF9kcml2ZXIuYworIGdldF9tb2R1bGVfU09VUkNFUyA9IGdldF9tb2R1bGUuYworIHRlc3RsaWJzeXNmc19TT1VSQ0VTID0gdGVzdC5jIHRlc3RfYXR0ci5jIHRlc3RfYnVzLmMgdGVzdF9jbGFzcy5jIFwKKyAJCSAgICAgICB0ZXN0X2RldmljZS5jIHRlc3RfZHJpdmVyLmMgdGVzdF9tb2R1bGUuYyB0ZXN0X3V0aWxzLmMgXAorIAkJICAgICAgIHRlc3RvdXQuYyB0ZXN0LWRlZnMuaCBsaWJzeXNmcy5jb25mIGNyZWF0ZS10ZXN0CistSU5DTFVERVMgPSAtSS4uL2luY2x1ZGUKKytJTkNMVURFUyA9IC1JJChzcmNkaXIpLy4uL2luY2x1ZGUKKyBMREFERCA9IC4uL2xpYi9saWJzeXNmcy5sYQorIEVYVFJBX0NGTEFHUyA9IEBFWFRSQV9DTEZBR1NACisgQU1fQ0ZMQUdTID0gLVdhbGwgLVcgLVdzdHJpY3QtcHJvdG90eXBlcyAkKEVYVFJBX0NMRkFHUykKK0luZGV4OiBzeXNmc3V0aWxzLTIuMS4wL3Rlc3QvY3JlYXRlLXRlc3QKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzeXNmc3V0aWxzLTIuMS4wLm9yaWcvdGVzdC9jcmVhdGUtdGVzdAkyMDA1LTExLTI4IDEwOjIyOjEwLjAwMDAwMDAwMCArMDAwMAorKysrIHN5c2ZzdXRpbHMtMi4xLjAvdGVzdC9jcmVhdGUtdGVzdAkyMDEzLTAzLTA4IDA5OjA3OjAzLjM3MjU0MjgzOCArMDAwMAorQEAgLTIsNyArMiw3IEBACisgCisgcm0gLWYgdGVzdC5oCisgCistY29uZl9maWxlPS4vbGlic3lzZnMuY29uZgorK2NvbmZfZmlsZT0kMQorIAorIC4gJGNvbmZfZmlsZQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXNmc3V0aWxzL3N5c2ZzdXRpbHMtMi4xLjAvc3lzZnN1dGlscy0yLjAuMC1jbGFzcy1kdXAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlscy0yLjEuMC9zeXNmc3V0aWxzLTIuMC4wLWNsYXNzLWR1cC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTM1Yjc4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXNmc3V0aWxzL3N5c2ZzdXRpbHMtMi4xLjAvc3lzZnN1dGlscy0yLjAuMC1jbGFzcy1kdXAucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZnJvbSBmZWRvcmEgY29yZSA5XQorCitUaGlzIHBhdGNoIGlzIGZyb20gdGhlIEZlZG9yYSBDb3JlIDkgc3lzZnN1dGlscy0yLjEuMC0zLmZjOSBwYWNrYWdlLgorCitJdCBmaXhlcyBhIHByb2JsZW0gaW4gdGhlIHVwc3RyZWFtIHBhY2thZ2Ugd2hlcmUgbm90IGFsbCBkZXZpY2VzIAord2lsbCBiZSByZXR1cm5lZCBieSB0aGUgZnVuY3Rpb24uCisKK1RoZSBwYWNrYWdlIExpY2Vuc2UgaW5kaWNhdGVzIHRoaXMgaXMgR1BMdjIgbGljZW5zZWQuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtcHVOIGxpYi9zeXNmc19jbGFzcy5jfnN5c2ZzdXRpbHNfY2xhc3NfZHVwIGxpYi9zeXNmc19jbGFzcy5jCistLS0gc3lzZnN1dGlscy0yLjEuMC9saWIvc3lzZnNfY2xhc3MuY35zeXNmc3V0aWxzX2NsYXNzX2R1cAkyMDA2LTA5LTA3IDE3OjAxOjI2LjAwMDAwMDAwMCAtMDUwMAorKysrIHN5c2ZzdXRpbHMtMi4xLjAtYmpraW5nMS9saWIvc3lzZnNfY2xhc3MuYwkyMDA2LTA5LTA3IDE3OjAxOjI2LjAwMDAwMDAwMCAtMDUwMAorQEAgLTY2LDcgKzY2LDcgQEAgc3RhdGljIGludCBjZGV2X25hbWVfZXF1YWwodm9pZCAqYSwgdm9pZAorIAkJcmV0dXJuIDA7CisgCisgCWlmIChzdHJuY21wKChjaGFyICopYSwgKChzdHJ1Y3Qgc3lzZnNfY2xhc3NfZGV2aWNlICopYiktPm5hbWUsCistCQkJCXN0cmxlbigoY2hhciAqKWEpKSA9PSAwKQorKwkJCQlTWVNGU19OQU1FX0xFTikgPT0gMCkKKyAJCXJldHVybiAxOworIAorIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzZnN1dGlscy9zeXNmc3V0aWxzXzIuMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXNmc3V0aWxzL3N5c2ZzdXRpbHNfMi4xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlmNDBmNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzZnN1dGlscy9zeXNmc3V0aWxzXzIuMS4wLmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiVG9vbHMgZm9yIHdvcmtpbmcgd2l0aCBzeXNmcyIKK0RFU0NSSVBUSU9OID0gIlRvb2xzIGZvciB3b3JraW5nIHdpdGggdGhlIHN5c2ZzIHZpcnR1YWwgZmlsZXN5c3RlbS4gIFRoZSB0b29sICdzeXN0b29sJyBjYW4gcXVlcnkgZGV2aWNlcyBieSBidXMsIGNsYXNzIGFuZCB0b3BvbG9neS4iCitIT01FUEFHRSA9ICJodHRwOi8vbGludXgtZGlhZy5zb3VyY2Vmb3JnZS5uZXQvU3lzZnN1dGlscy5odG1sIgorCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCitMSUNFTlNFXyR7UE59ID0gIkdQTHYyIgorTElDRU5TRV9saWJzeXNmcyA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNkMDY0MDNlYTU0Yzc1NzRhOWU1ODFjNjQ3OGNjMzkzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NtZC9HUEw7bWQ1PWQ0MWQ0ZTJlMWUxMDg1NTRlMDM4OGVhNGFlY2Q4ZDI3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9MR1BMO21kNT1iNzVkMDY5NzkxMTAzZmZlMWMwZDY0MzVkZWVmZjcyZSIKK1BSID0gInI1IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9saW51eC1kaWFnL3N5c2ZzdXRpbHMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3N5c2ZzdXRpbHMtMi4wLjAtY2xhc3MtZHVwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zZXBhcmF0ZWJ1aWxkLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTRlN2RjZDA0MzZkMmY0OWFhNDAzZjY3ZTFlZjdkZGMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTg2NWRlMmMxZjU1OWZmZjBkM2ZjOTM2ZTY2MGMwZWZhZjdhZmU2NjIwNjRmMmZiOTdjY2FkMWVjMjhkMjA4YSIKK1MgPSAiJHtXT1JLRElSfS9zeXNmc3V0aWxzLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scworCitQQUNLQUdFUyA9KyAibGlic3lzZnMiCitGSUxFU19saWJzeXNmcyA9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTfSIKK0ZJTEVTX2xpYnN5c2ZzLWRldiA9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSAke2luY2x1ZGVkaXJ9IgorRklMRVNfbGlic3lzZnMtc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWIqLmEiCisKK2V4cG9ydCBsaWJkaXIgPSAiJHtiYXNlX2xpYmRpcn0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1jb21wYXQtdW5pdHMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1jb21wYXQtdW5pdHMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI4ZmYwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLWNvbXBhdC11bml0cy5iYgpAQCAtMCwwICsxLDQzIEBACitTVU1NQVJZID0gIkVuaGFuY2VzIHN5c3RlbWQgY29tcGF0aWxpYml0eSB3aXRoIGV4aXN0aW5nIFN5c1Zpbml0IHNjcmlwdHMiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAiCisKK1BSID0gInIyOSIKKworREVQRU5EUyA9ICJzeXN0ZW1kLXN5c3RlbWN0bC1uYXRpdmUiCisKK1MgPSAiJHtXT1JLRElSfSIKKworaW5oZXJpdCBhbGxhcmNoCisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKK1NZU1RFTURfRElTQUJMRURfU1lTVl9TRVJWSUNFUyA9ICIgXAorICBidXN5Ym94LXVkaGNwYyBcCisgIGh3Y2xvY2sgXAorICBuZXR3b3JraW5nIFwKKyAgbmZzc2VydmVyIFwKKyAgbmZzY29tbW9uIFwKKyAgc3lzbG9nLmJ1c3lib3ggXAorIgorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWNkICREJHtzeXNjb25mZGlyfS9pbml0LmQKKworCWVjaG8gIkRpc2FibGluZyB0aGUgZm9sbG93aW5nIHN5c3Ygc2NyaXB0czogIgorCisJT1BUUz0iIgorCisJaWYgWyAtbiAiJEQiIF07IHRoZW4KKwkJT1BUUz0iLS1yb290PSREIgorCWZpCisKKwlmb3IgaSBpbiAke1NZU1RFTURfRElTQUJMRURfU1lTVl9TRVJWSUNFU30gOyBkbworCQlpZiBbIFwoIC1lICRpIC1vICRpLnNoIFwpIC1hICEgXCggLWUgJEQke3N5c2NvbmZkaXJ9L3N5c3RlbWQvc3lzdGVtLyRpLnNlcnZpY2UgLW8gIC1lICREJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8kaS5zZXJ2aWNlIFwpIF0gOyB0aGVuCisJCQllY2hvIC1uICIkaTogIiA7IHN5c3RlbWN0bCAke09QVFN9IG1hc2sgJGkuc2VydmljZQorCQlmaQorCWRvbmUgOyBlY2hvCit9CisKK1JEUEVQRU5EU18ke1BOfSA9ICJzeXN0ZW1kIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtc2VyaWFsZ2V0dHkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zZXJpYWxnZXR0eS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjhiMTMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtc2VyaWFsZ2V0dHkuYmIKQEAgLTAsMCArMSw1MSBAQAorU1VNTUFSWSA9ICJTZXJpYWwgdGVybWluYWwgc3VwcG9ydCBmb3Igc3lzdGVtZCIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMDttZDU9ODAxZjgwOTgwZDE3MWRkNjQyNTYxMDgzM2EyMmRiZTYiCisKK1BSID0gInI1IgorCitTRVJJQUxfQ09OU09MRSA/PSAiMTE1MjAwIHR0eVMwIgorCitTUkNfVVJJID0gImZpbGU6Ly9zZXJpYWwtZ2V0dHlALnNlcnZpY2UiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKwlpZiBbICEgLXogIiR7U0VSSUFMX0NPTlNPTEVTfSIgXSA7IHRoZW4KKwkJZGVmYXVsdF9iYXVkcmF0ZT1gZWNobyAiJHtTRVJJQUxfQ09OU09MRVN9IiB8IHNlZCAncy9cOy4qLy8nYAorCQlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3N5c3RlbWQvc3lzdGVtL2dldHR5LnRhcmdldC53YW50cy8KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2VyaWFsLWdldHR5QC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCQlzZWQgLWkgLWUgcy9cQEJBVURSQVRFXEAvJGRlZmF1bHRfYmF1ZHJhdGUvZyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zZXJpYWwtZ2V0dHlALnNlcnZpY2UKKworCQl0bXA9IiR7U0VSSUFMX0NPTlNPTEVTfSIKKwkJZm9yIGVudHJ5IGluICR0bXAgOyBkbworCQkJYmF1ZHJhdGU9YGVjaG8gJGVudHJ5IHwgc2VkICdzL1w7LiovLydgCisJCQl0dHlkZXY9YGVjaG8gJGVudHJ5IHwgc2VkIC1lICdzL15bMC05XSpcOy8vJyAtZSAncy9cOy4qLy8nYAorCQkJaWYgWyAiJGJhdWRyYXRlIiA9ICIkZGVmYXVsdF9iYXVkcmF0ZSIgXSA7IHRoZW4KKwkJCQkjIGVuYWJsZSB0aGUgc2VydmljZQorCQkJCWxuIC1zZiAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NlcmlhbC1nZXR0eUAuc2VydmljZSBcCisJCQkJCSR7RH0ke3N5c2NvbmZkaXJ9L3N5c3RlbWQvc3lzdGVtL2dldHR5LnRhcmdldC53YW50cy9zZXJpYWwtZ2V0dHlAJHR0eWRldi5zZXJ2aWNlCisJCQllbHNlCisJCQkJIyBpbnN0YWxsIGN1c3RvbSBzZXJ2aWNlIGZpbGUgZm9yIHRoZSBub24tZGVmYXVsdCBiYXVkcmF0ZQorCQkJCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NlcmlhbC1nZXR0eUAuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zZXJpYWwtZ2V0dHkkYmF1ZHJhdGVALnNlcnZpY2UKKwkJCQlzZWQgLWkgLWUgcy9cQEJBVURSQVRFXEAvJGJhdWRyYXRlL2cgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc2VyaWFsLWdldHR5JGJhdWRyYXRlQC5zZXJ2aWNlCisJCQkJIyBlbmFibGUgdGhlIHNlcnZpY2UKKwkJCQlsbiAtc2YgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zZXJpYWwtZ2V0dHkkYmF1ZHJhdGVALnNlcnZpY2UgXAorCQkJCQkke0R9JHtzeXNjb25mZGlyfS9zeXN0ZW1kL3N5c3RlbS9nZXR0eS50YXJnZXQud2FudHMvc2VyaWFsLWdldHR5JGJhdWRyYXRlQCR0dHlkZXYuc2VydmljZQorCQkJZmkKKwkJZG9uZQorCWZpCit9CisKK1JERVBFTkRTXyR7UE59ID0gInN5c3RlbWQiCisKKyMgVGhpcyBpcyBhIG1hY2hpbmUgc3BlY2lmaWMgZmlsZQorRklMRVNfJHtQTn0gPSAiJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8qLnNlcnZpY2UgJHtzeXNjb25mZGlyfSIKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKKyMgQXMgdGhpcyBwYWNrYWdlIGlzIHRpZWQgdG8gc3lzdGVtZCwgb25seSBidWlsZCBpdCB3aGVuIHdlJ3JlIGFsc28gYnVpbGRpbmcgc3lzdGVtZC4KK3B5dGhvbiAoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zICgnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCInc3lzdGVtZCcgbm90IGluIERJU1RST19GRUFUVVJFUyIpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zZXJpYWxnZXR0eS9zZXJpYWwtZ2V0dHlALnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zZXJpYWxnZXR0eS9zZXJpYWwtZ2V0dHlALnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgyMTY3YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXNlcmlhbGdldHR5L3NlcmlhbC1nZXR0eUAuc2VydmljZQpAQCAtMCwwICsxLDM3IEBACisjICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzeXN0ZW1kLgorIworIyAgc3lzdGVtZCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IKKyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1tVbml0XQorRGVzY3JpcHRpb249U2VyaWFsIEdldHR5IG9uICVJCitEb2N1bWVudGF0aW9uPW1hbjphZ2V0dHkoOCkgbWFuOnN5c3RlbWQtZ2V0dHktZ2VuZXJhdG9yKDgpCitEb2N1bWVudGF0aW9uPWh0dHA6Ly8wcG9pbnRlci5kZS9ibG9nL3Byb2plY3RzL3NlcmlhbC1jb25zb2xlLmh0bWwKK0JpbmRzVG89ZGV2LSVpLmRldmljZQorQWZ0ZXI9ZGV2LSVpLmRldmljZSBzeXN0ZW1kLXVzZXItc2Vzc2lvbnMuc2VydmljZSBwbHltb3V0aC1xdWl0LXdhaXQuc2VydmljZQorQWZ0ZXI9cmMtbG9jYWwuc2VydmljZQorCisjIElmIGFkZGl0aW9uYWwgZ2V0dHlzIGFyZSBzcGF3bmVkIGR1cmluZyBib290IHRoZW4gd2Ugc2hvdWxkIG1ha2UKKyMgc3VyZSB0aGF0IHRoaXMgaXMgc3luY2hyb25pemVkIGJlZm9yZSBnZXR0eS50YXJnZXQsIGV2ZW4gdGhvdWdoCisjIGdldHR5LnRhcmdldCBkaWRuJ3QgYWN0dWFsbHkgcHVsbCBpdCBpbi4KK0JlZm9yZT1nZXR0eS50YXJnZXQKK0lnbm9yZU9uSXNvbGF0ZT15ZXMKKworW1NlcnZpY2VdCitFbnZpcm9ubWVudD0iVEVSTT14dGVybSIKK0V4ZWNTdGFydD0tL3NiaW4vYWdldHR5IC04IC1MIC0ta2VlcC1iYXVkICVJIEBCQVVEUkFURUAgJFRFUk0KK1R5cGU9aWRsZQorUmVzdGFydD1hbHdheXMKK1Jlc3RhcnRTZWM9MAorVXRtcElkZW50aWZpZXI9JUkKK1RUWVBhdGg9L2Rldi8lSQorVFRZUmVzZXQ9eWVzCitUVFlWSGFuZ3VwPXllcworS2lsbE1vZGU9cHJvY2VzcworSWdub3JlU0lHUElQRT1ubworU2VuZFNJR0hVUD15ZXMKKworW0luc3RhbGxdCitXYW50ZWRCeT1nZXR0eS50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXN5c3RlbWN0bC1uYXRpdmUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zeXN0ZW1jdGwtbmF0aXZlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZGM5YzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zeXN0ZW1jdGwtbmF0aXZlLmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiV3JhcHBlciBmb3IgZW5hYmxpbmcgc3lzdGVtZCBzZXJ2aWNlcyIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCIKKworUFIgPSAicjYiCisKK2luaGVyaXQgbmF0aXZlCisKK1NSQ19VUkkgPSAiZmlsZTovL3N5c3RlbWN0bCIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3N5c3RlbWN0bCAke0R9JHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zeXN0ZW1jdGwvc3lzdGVtY3RsIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtc3lzdGVtY3RsL3N5c3RlbWN0bApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZTE2M2JkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtc3lzdGVtY3RsL3N5c3RlbWN0bApAQCAtMCwwICsxLDE4MiBAQAorIyEvYmluL3NoCitlY2hvICJTdGFydGVkICQwICQqIgorCitST09UPQorCisjIHBhcnNlIGNvbW1hbmQgbGluZSBwYXJhbXMKK2FjdGlvbj0KK3doaWxlIFsgJCMgIT0gMCBdOyBkbworCW9wdD0iJDEiCisKKwljYXNlICIkb3B0IiBpbgorCQllbmFibGUpCisJCQlzaGlmdAorCisJCQlhY3Rpb249IiRvcHQiCisJCQlzZXJ2aWNlcz0iJDEiCisJCQljbWRfYXJncz0iMSIKKwkJCXNoaWZ0CisJCQk7OworCQlkaXNhYmxlKQorCQkJc2hpZnQKKworCQkJYWN0aW9uPSIkb3B0IgorCQkJc2VydmljZXM9IiQxIgorCQkJY21kX2FyZ3M9IjEiCisJCQlzaGlmdAorCQkJOzsKKwkJbWFzaykKKwkJCXNoaWZ0CisKKwkJCWFjdGlvbj0iJG9wdCIKKwkJCXNlcnZpY2VzPSIkMSIKKwkJCWNtZF9hcmdzPSIxIgorCQkJc2hpZnQKKwkJCTs7CisJCXByZXNldCkKKwkJCXNoaWZ0CisKKwkJCWFjdGlvbj0iJG9wdCIKKwkJCXNlcnZpY2VzPSIkMSIKKwkJCWNtZF9hcmdzPSIxIgorCQkJc2hpZnQKKwkJCTs7CisJCS0tcm9vdD0qKQorCQkJUk9PVD0ke29wdCMjLS1yb290PX0KKwkJCWNtZF9hcmdzPSIwIgorCQkJc2hpZnQKKwkJCTs7CisJCSopCisJCQlpZiBbICIkY21kX2FyZ3MiID0gIjEiIF07IHRoZW4KKwkJCQlzZXJ2aWNlcz0iJHNlcnZpY2VzICRvcHQiIAorCQkJCXNoaWZ0CisJCQllbHNlCisJCQkJZWNobyAiJyRvcHQnIGlzIGFuIHVua293biBvcHRpb247IGV4aXRpbmcgd2l0aCBlcnJvciIKKwkJCQlleGl0IDEKKwkJCWZpCisJCQk7OworCWVzYWMKK2RvbmUKK2lmIFsgIiRhY3Rpb24iID0gInByZXNldCIgLWEgIiRzZXJ2aWNlX2ZpbGUiID0gIiIgXTsgdGhlbgorCXNlcnZpY2VzPSQoZm9yIGYgaW4gYGZpbmQgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtICRST09UL2xpYi9zeXN0ZW1kL3N5c3RlbSAkUk9PVC91c3IvbGliL3N5c3RlbWQvc3lzdGVtIC10eXBlIGYgMj4xYDsgZG8gYmFzZW5hbWUgJGY7IGRvbmUpCisJc2VydmljZXM9IiRzZXJ2aWNlcyAkb3B0IgorCXByZXNldGFsbD0xCitmaQorCitmb3Igc2VydmljZSBpbiAkc2VydmljZXM7IGRvCisJaWYgWyAiJHByZXNldGFsbCIgPSAiMSIgXTsgdGhlbgorCQlhY3Rpb249InByZXNldCIKKwlmaQorCWlmIFsgIiRhY3Rpb24iID0gIm1hc2siIF07IHRoZW4KKwkJaWYgWyAhIC1kICRST09UL2V0Yy9zeXN0ZW1kL3N5c3RlbS8gXTsgdGhlbgorCQkJbWtkaXIgLXAgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLworCQlmaQorCQljbWQ9ImxuIC1zIC9kZXYvbnVsbCAkUk9PVC9ldGMvc3lzdGVtZC9zeXN0ZW0vJHNlcnZpY2UiCisJCWVjaG8gIiRjbWQiCisJCSRjbWQKKwkJZXhpdCAwCisJZmkKKworCXNlcnZpY2VfYmFzZV9maWxlPWBlY2hvICRzZXJ2aWNlIHwgc2VkICdzL1woQFwpLipcKFwuW14uXVwrXCkvXDFcMi8nYAorCWlmIFsgLXogYGVjaG8gJHNlcnZpY2UgfCBzZWQgJy9AL3A7ZCdgIF07IHRoZW4KKwkJZWNobyAiVHJ5IHRvIGZpbmQgbG9jYXRpb24gb2YgJHNlcnZpY2UuLi4iCisJCXNlcnZpY2VfdGVtcGxhdGU9ZmFsc2UKKwllbHNlCisJCWVjaG8gIlRyeSB0byBmaW5kIGxvY2F0aW9uIG9mIHRlbXBsYXRlICRzZXJ2aWNlX2Jhc2VfZmlsZSBvZiBpbnN0YW5jZSAkc2VydmljZS4uLiIKKwkJc2VydmljZV90ZW1wbGF0ZT10cnVlCisJCWlmIFsgLXogYGVjaG8gJHNlcnZpY2UgfCBzZWQgJ3MvXi5cK0BcKC4qXClcLlteLl1cKy9cMS8nYCBdOyB0aGVuCisJCQlpbnN0YW5jZV9zcGVjaWZpZWQ9ZmFsc2UKKwkJZWxzZQorCQkJaW5zdGFuY2Vfc3BlY2lmaWVkPXRydWUKKwkJZmkKKwlmaQorCisJIyBmaW5kIHNlcnZpY2UgZmlsZQorCWZvciBwIGluICRST09UL2V0Yy9zeXN0ZW1kL3N5c3RlbSBcCisJCSAkUk9PVC9saWIvc3lzdGVtZC9zeXN0ZW0gXAorCQkgJFJPT1QvdXNyL2xpYi9zeXN0ZW1kL3N5c3RlbTsgZG8KKwkJaWYgWyAtZSAkcC8kc2VydmljZV9iYXNlX2ZpbGUgXTsgdGhlbgorCQkJc2VydmljZV9maWxlPSRwLyRzZXJ2aWNlX2Jhc2VfZmlsZQorCQkJc2VydmljZV9maWxlPSR7c2VydmljZV9maWxlIyMkUk9PVH0KKwkJZmkKKwlkb25lCisJaWYgWyAteiAiJHNlcnZpY2VfZmlsZSIgXTsgdGhlbgorCQllY2hvICInJHNlcnZpY2VfYmFzZV9maWxlJyBjb3VsZG4ndCBiZSBmb3VuZDsgZXhpdGluZyB3aXRoIGVycm9yIgorCQlleGl0IDEKKwlmaQorCWVjaG8gIkZvdW5kICRzZXJ2aWNlIGluICRzZXJ2aWNlX2ZpbGUiCisKKwkjIElmIGFueSBuZXcgdW5pdCB0eXBlcyBhcmUgYWRkZWQgdG8gc3lzdGVtZCB0aGV5IHNob3VsZCBiZSBhZGRlZAorCSMgdG8gdGhpcyByZWd1bGFyIGV4cHJlc3Npb24uCisJdW5pdF90eXBlc19yZT0nXC5cKHNlcnZpY2VcfHNvY2tldFx8ZGV2aWNlXHxtb3VudFx8YXV0b21vdW50XHxzd2FwXHx0YXJnZXRcfHBhdGhcfHRpbWVyXHxzbmFwc2hvdFwpJCcKKwlpZiBbICIkYWN0aW9uIiA9ICJwcmVzZXQiIF07IHRoZW4KKwkJYWN0aW9uPWBlZ3JlcCAtc2ggICRzZXJ2aWNlICRST09UL2V0Yy9zeXN0ZW1kL3VzZXItcHJlc2V0LyoucHJlc2V0IHwgY3V0IC1mMSAtZCcgJ2AKKwkJaWYgWyAteiAiJGFjdGlvbiIgXTsgdGhlbgorCQkJZ2xvYmFscHJlc2V0PWBlZ3JlcCAtc2ggICdcKicgICRST09UL2V0Yy9zeXN0ZW1kL3VzZXItcHJlc2V0LyoucHJlc2V0IHwgY3V0IC1mMSAtZCcgJ2AKKwkJCWlmIFsgLW4gIiRnbG9iYWxwcmVzZXQiIF07IHRoZW4KKwkJCQlhY3Rpb249IiRnbG9iYWxwcmVzZXQiCisJCQllbHNlCisJCQkJYWN0aW9uPSJlbmFibGUiCisJCQlmaQorCQlmaQorCWZpCisJIyBjcmVhdGUgdGhlIHJlcXVpcmVkIHN5bWJvbGljIGxpbmtzCisJd2FudGVkX2J5PSQoc2VkICcvXldhbnRlZEJ5W1s6c3BhY2U6XV0qPS9zLFtePV0qPSwscDtkJyAiJFJPT1QvJHNlcnZpY2VfZmlsZSIgXAorCQkgICAgICAgIHwgdHIgJywnICdcbicgXAorCQkgICAgICAgIHwgZ3JlcCAiJHVuaXRfdHlwZXNfcmUiKQorCisJZm9yIHIgaW4gJHdhbnRlZF9ieTsgZG8KKwkJZWNobyAiV2FudGVkQnk9JHIgZm91bmQgaW4gJHNlcnZpY2UiCisJCWlmIFsgIiRhY3Rpb24iID0gImVuYWJsZSIgXTsgdGhlbgorCQkJZW5hYmxlX3NlcnZpY2U9JHNlcnZpY2UKKwkJCWlmIFsgIiRzZXJ2aWNlX3RlbXBsYXRlIiA9IHRydWUgLWEgIiRpbnN0YW5jZV9zcGVjaWZpZWQiID0gZmFsc2UgXTsgdGhlbgorCQkJCWRlZmF1bHRfaW5zdGFuY2U9JChzZWQgJy9eRGVmYXVsdEluc3RhbmNlW1s6c3BhY2U6XV0qPS9zLFtePV0qPSwscDtkJyAiJFJPT1QvJHNlcnZpY2VfZmlsZSIpCisJCQkJaWYgWyAteiAkZGVmYXVsdF9pbnN0YW5jZSBdOyB0aGVuCisJCQkJCWVjaG8gIlRlbXBsYXRlIHVuaXQgd2l0aG91dCBpbnN0YW5jZSBvciBEZWZhdWx0SW5zdGFuY2UgZGlyZWN0aXZlLCBub3RoaW5nIHRvIGVuYWJsZSIKKwkJCQkJY29udGludWUKKwkJCQllbHNlCisJCQkJCWVjaG8gIkZvdW5kIERlZmF1bHRJbnN0YW5jZSAkZGVmYXVsdF9pbnN0YW5jZSwgZW5hYmxpbmcgaXQiCisJCQkJCWVuYWJsZV9zZXJ2aWNlPSQoZWNobyAkc2VydmljZSB8IHNlZCAicy9AL0AkZGVmYXVsdF9pbnN0YW5jZS8iKQorCQkJCWZpCisJCQlmaQorCQkJbWtkaXIgLXAgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyLndhbnRzCisJCQlsbiAtcyAkc2VydmljZV9maWxlICRST09UL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kci53YW50cy8kZW5hYmxlX3NlcnZpY2UKKwkJCWVjaG8gIkVuYWJsZWQgJGVuYWJsZV9zZXJ2aWNlIGZvciAkd2FudGVkX2J5LiIKKwkJZWxzZQorCQkJaWYgWyAiJHNlcnZpY2VfdGVtcGxhdGUiID0gdHJ1ZSAtYSAiJGluc3RhbmNlX3NwZWNpZmllZCIgPSBmYWxzZSBdOyB0aGVuCisJCQkJZGlzYWJsZV9zZXJ2aWNlPSIkUk9PVC9ldGMvc3lzdGVtZC9zeXN0ZW0vJHIud2FudHMvYGVjaG8gJHNlcnZpY2UgfCBzZWQgJ3MvQC9AKi8nYCIKKwkJCWVsc2UKKwkJCQlkaXNhYmxlX3NlcnZpY2U9IiRST09UL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kci53YW50cy8kc2VydmljZSIKKwkJCWZpCisJCQlybSAtZiAkZGlzYWJsZV9zZXJ2aWNlCisJCQlbIC1kICRST09UL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kci53YW50cyBdICYmIHJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5IC1wICRST09UL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kci53YW50cworCQkJZWNobyAiRGlzYWJsZWQgJHtkaXNhYmxlX3NlcnZpY2UjIyRST09UL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kci53YW50cy99IGZvciAkd2FudGVkX2J5LiIKKwkJZmkKKwlkb25lCisKKwkjIGNyZWF0ZSB0aGUgcmVxdWlyZWQgc3ltYm9saWMgJ0FsaWFzJyBsaW5rcworCWFsaWFzPSQoc2VkICcvXkFsaWFzW1s6c3BhY2U6XV0qPS9zLFtePV0qPSwscDtkJyAiJFJPT1QvJHNlcnZpY2VfZmlsZSIgXAorCQkgICAgICAgIHwgdHIgJywnICdcbicgXAorCQkgICAgICAgIHwgZ3JlcCAiJHVuaXRfdHlwZXNfcmUiKQorCisJZm9yIHIgaW4gJGFsaWFzOyBkbworCQlpZiBbICIkYWN0aW9uIiA9ICJlbmFibGUiIF07IHRoZW4KKwkJCW1rZGlyIC1wICRST09UL2V0Yy9zeXN0ZW1kL3N5c3RlbQorCQkJbG4gLXMgJHNlcnZpY2VfZmlsZSAkUk9PVC9ldGMvc3lzdGVtZC9zeXN0ZW0vJHIKKwkJCWVjaG8gIkVuYWJsZWQgJHNlcnZpY2UgZm9yICRhbGlhcy4iCisJCWVsc2UKKwkJCXJtIC1mICRST09UL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kcgorCQkJZWNobyAiRGlzYWJsZWQgJHNlcnZpY2UgZm9yICRhbGlhcy4iCisJCWZpCisJZG9uZQorCisJIyBjYWxsIHVzIGZvciB0aGUgb3RoZXIgcmVxdWlyZWQgc2NyaXB0cworCWFsc289JChzZWQgJy9eQWxzb1tbOnNwYWNlOl1dKj0vcyxbXj1dKj0sLHA7ZCcgIiRST09ULyRzZXJ2aWNlX2ZpbGUiIFwKKwkJICAgfCB0ciAnLCcgJ1xuJykKKwlmb3IgYSBpbiAkYWxzbzsgZG8KKwkJZWNobyAiQWxzbz0kYSBmb3VuZCBpbiAkc2VydmljZSIKKwkJaWYgWyAiJGFjdGlvbiIgPSAiZW5hYmxlIiBdOyB0aGVuCisJCQkkMCAtLXJvb3Q9JFJPT1QgZW5hYmxlICRhCisJCWZpCisJZG9uZQorZG9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAtY3JlYXRlLXZvbGF0aWxlLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMC1jcmVhdGUtdm9sYXRpbGUuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2NiZTFlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAtY3JlYXRlLXZvbGF0aWxlLmNvbmYKQEAgLTAsMCArMSw3IEBACisjVGhpcyBnb2VzIGhhbmQtaW4taGFuZCB3aXRoIHRoZSBiYXNlLWZpbGVzIG9mIE9FLUNvcmUuIFRoZSBmaWxlIG11c3QKKyMgYmUgc29ydGVkIGJlZm9yZSAnc3lzdGVtZC5jb25mJyBiZWN1YXNlIHRoaXMgYXR0ZW1wdHMgdG8gY3JlYXRlIGEgZmlsZQorIyBpbnNpZGUgL3Zhci9sb2cuCisKKworZAkJL3Zhci92b2xhdGlsZS9sb2cJCS0JLQktCS0KK2QJCS92YXIvdm9sYXRpbGUvdG1wCQkxNzc3CS0JLQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwMS11bml0cy1QcmVmZXItZ2V0dHktdG8tYWdldHR5LWluLWNvbnNvbGUtc2V0dXAtc3lzdGVtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwMS11bml0cy1QcmVmZXItZ2V0dHktdG8tYWdldHR5LWluLWNvbnNvbGUtc2V0dXAtc3lzdGVtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YWI1ZWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAxLXVuaXRzLVByZWZlci1nZXR0eS10by1hZ2V0dHktaW4tY29uc29sZS1zZXR1cC1zeXN0ZW0ucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorRnJvbSAxMDBlNTA2MDRlZmM0MDMyMDAxYTJkZTZhNmI0Nzg1M2MwMDAzODE3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMDU6Mjk6MTUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwMS8xMV0gdW5pdHM6IFByZWZlciBnZXR0eSB0byBhZ2V0dHkgaW4gY29uc29sZSBzZXR1cCBzeXN0ZW1kCisgdW5pdHMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBNYXhpbWUgUmlwYXJkIDxtYXhpbWUucmlwYXJkQGZyZWUtZWxlY3Ryb25zLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyB1bml0cy9nZXR0eUAuc2VydmljZS5tNCAgICAgICAgfCAyICstCisgdW5pdHMvc2VyaWFsLWdldHR5QC5zZXJ2aWNlLm00IHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdW5pdHMvZ2V0dHlALnNlcnZpY2UubTQgYi91bml0cy9nZXR0eUAuc2VydmljZS5tNAoraW5kZXggNDYxNjRhYi4uYmRmNmVjOCAxMDA2NDQKKy0tLSBhL3VuaXRzL2dldHR5QC5zZXJ2aWNlLm00CisrKysgYi91bml0cy9nZXR0eUAuc2VydmljZS5tNAorQEAgLTI3LDcgKzI3LDcgQEAgQ29uZGl0aW9uUGF0aEV4aXN0cz0vZGV2L3R0eTAKKyAKKyBbU2VydmljZV0KKyAjIHRoZSBWVCBpcyBjbGVhcmVkIGJ5IFRUWVZURGlzYWxsb2NhdGUKKy1FeGVjU3RhcnQ9LS9zYmluL2FnZXR0eSAtLW5vY2xlYXIgJUkgJFRFUk0KKytFeGVjU3RhcnQ9LS9zYmluL2dldHR5IC1MICVJICRURVJNCisgVHlwZT1pZGxlCisgUmVzdGFydD1hbHdheXMKKyBSZXN0YXJ0U2VjPTAKK2RpZmYgLS1naXQgYS91bml0cy9zZXJpYWwtZ2V0dHlALnNlcnZpY2UubTQgYi91bml0cy9zZXJpYWwtZ2V0dHlALnNlcnZpY2UubTQKK2luZGV4IDQ1MjJkMGQuLmU2ZDQ5OWQgMTAwNjQ0CistLS0gYS91bml0cy9zZXJpYWwtZ2V0dHlALnNlcnZpY2UubTQKKysrKyBiL3VuaXRzL3NlcmlhbC1nZXR0eUAuc2VydmljZS5tNAorQEAgLTIyLDcgKzIyLDcgQEAgQmVmb3JlPWdldHR5LnRhcmdldAorIElnbm9yZU9uSXNvbGF0ZT15ZXMKKyAKKyBbU2VydmljZV0KKy1FeGVjU3RhcnQ9LS9zYmluL2FnZXR0eSAtLWtlZXAtYmF1ZCAxMTUyMDAsMzg0MDAsOTYwMCAlSSAkVEVSTQorK0V4ZWNTdGFydD0tL3NiaW4vZ2V0dHkgLUwgMTE1MjAwICVJICRURVJNCisgVHlwZT1pZGxlCisgUmVzdGFydD1hbHdheXMKKyBVdG1wSWRlbnRpZmllcj0lSQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAzLWJpbmZtdC1Eb24tdC1pbnN0YWxsLWRlcGVuZGVuY3ktbGlua3MtYXQtaW5zdGFsbC10aW0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAzLWJpbmZtdC1Eb24tdC1pbnN0YWxsLWRlcGVuZGVuY3ktbGlua3MtYXQtaW5zdGFsbC10aW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUyMGZkMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDMtYmluZm10LURvbi10LWluc3RhbGwtZGVwZW5kZW5jeS1saW5rcy1hdC1pbnN0YWxsLXRpbS5wYXRjaApAQCAtMCwwICsxLDcxIEBACitGcm9tIDE4NGE4OWNhYWNmYTAwZjA3ZTcyNzViY2E1OTJiZDdkZGExYjU0MWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwNTowMzo0NCArMDAwMAorU3ViamVjdDogW1BBVENIIDAzLzExXSBiaW5mbXQ6IERvbid0IGluc3RhbGwgZGVwZW5kZW5jeSBsaW5rcyBhdCBpbnN0YWxsIHRpbWUKKyBmb3IgdGhlIGJpbmZtdCBzZXJ2aWNlcworCit1c2UgW0luc3RhbGxdIGJsb2NrcyBzbyB0aGF0IHRoZXkgZ2V0IGNyZWF0ZWQgd2hlbiB0aGUgc2VydmljZSBpcyBlbmFibGVkCitsaWtlIGEgdHJhZGl0aW9uYWwgc2VydmljZS4KKworVGhlIFtJbnN0YWxsXSBibG9ja3Mgd2VyZSByZWplY3RlZCB1cHN0cmVhbSBhcyB0aGV5IGRvbid0IGhhdmUgYSB3YXkgdG8KKyJlbmFibGUiCitpdCBvbiBpbnN0YWxsIHdpdGhvdXQgc3RhdGljIHN5bWxpbmtzIHdoaWNoIGNhbid0IGJlIGRpc2FibGVkLCBvbmx5CittYXNrZWQuICBXZQoraG93ZXZlciBjYW4gZG8gdGhhdCBpbiBhIHBvc3RpbnN0LgorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZAorCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIE1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgLS0tLQorIHVuaXRzL3Byb2Mtc3lzLWZzLWJpbmZtdF9taXNjLmF1dG9tb3VudCB8IDMgKysrCisgdW5pdHMvc3lzdGVtZC1iaW5mbXQuc2VydmljZS5pbiAgICAgICAgIHwgNSArKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitJbmRleDogZ2l0L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvTWFrZWZpbGUuYW0KKysrKyBnaXQvTWFrZWZpbGUuYW0KK0BAIC00MjcxLDEwICs0MjcxLDYgQEAgSU5TVEFMTF9ESVJTICs9IFwKKyAJJChwcmVmaXgpL2xpYi9iaW5mbXQuZCBcCisgCSQoc3lzY29uZmRpcikvYmluZm10LmQKKyAKKy1TWVNJTklUX1RBUkdFVF9XQU5UUyArPSBcCistCXN5c3RlbWQtYmluZm10LnNlcnZpY2UgXAorLQlwcm9jLXN5cy1mcy1iaW5mbXRfbWlzYy5hdXRvbW91bnQKKy0KKyBlbmRpZgorIAorIEVYVFJBX0RJU1QgKz0gXAorSW5kZXg6IGdpdC91bml0cy9wcm9jLXN5cy1mcy1iaW5mbXRfbWlzYy5hdXRvbW91bnQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy91bml0cy9wcm9jLXN5cy1mcy1iaW5mbXRfbWlzYy5hdXRvbW91bnQKKysrKyBnaXQvdW5pdHMvcHJvYy1zeXMtZnMtYmluZm10X21pc2MuYXV0b21vdW50CitAQCAtMTYsMyArMTYsNiBAQCBDb25kaXRpb25QYXRoSXNSZWFkV3JpdGU9L3Byb2Mvc3lzLworIAorIFtBdXRvbW91bnRdCisgV2hlcmU9L3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjCisrCisrW0luc3RhbGxdCisrV2FudGVkQnk9c3lzaW5pdC50YXJnZXQKK0luZGV4OiBnaXQvdW5pdHMvc3lzdGVtZC1iaW5mbXQuc2VydmljZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3VuaXRzL3N5c3RlbWQtYmluZm10LnNlcnZpY2UuaW4KKysrKyBnaXQvdW5pdHMvc3lzdGVtZC1iaW5mbXQuc2VydmljZS5pbgorQEAgLTExLDYgKzExLDggQEAgRG9jdW1lbnRhdGlvbj1tYW46c3lzdGVtZC1iaW5mbXQuc2VydmljZQorIERvY3VtZW50YXRpb249aHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvRG9jdW1lbnRhdGlvbi9iaW5mbXRfbWlzYy50eHQKKyBEZWZhdWx0RGVwZW5kZW5jaWVzPW5vCisgQ29uZmxpY3RzPXNodXRkb3duLnRhcmdldAorK1dhbnRzPXByb2Mtc3lzLWZzLWJpbmZtdF9taXNjLmF1dG9tb3VudAorKworIEFmdGVyPXByb2Mtc3lzLWZzLWJpbmZtdF9taXNjLmF1dG9tb3VudAorIEJlZm9yZT1zeXNpbml0LnRhcmdldCBzaHV0ZG93bi50YXJnZXQKKyBDb25kaXRpb25QYXRoSXNSZWFkV3JpdGU9L3Byb2Mvc3lzLworQEAgLTI1LDMgKzI3LDYgQEAgVHlwZT1vbmVzaG90CisgUmVtYWluQWZ0ZXJFeGl0PXllcworIEV4ZWNTdGFydD1Acm9vdGxpYmV4ZWNkaXJAL3N5c3RlbWQtYmluZm10CisgVGltZW91dFNlYz05MHMKKysKKytbSW5zdGFsbF0KKytXYW50ZWRCeT1zeXNpbml0LnRhcmdldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNC1jb25maWd1cmUtQ2hlY2stZm9yLWFkZGl0aW9uYWwtZmVhdHVyZXMtdGhhdC11Y2xpYmMtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNC1jb25maWd1cmUtQ2hlY2stZm9yLWFkZGl0aW9uYWwtZmVhdHVyZXMtdGhhdC11Y2xpYmMtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNzhkYTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA0LWNvbmZpZ3VyZS1DaGVjay1mb3ItYWRkaXRpb25hbC1mZWF0dXJlcy10aGF0LXVjbGliYy0ucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorRnJvbSA0ZTJlOGRiZjNmMjNhYjdkY2EzMjI4NmNjMGYzN2JmZjZhYzQ5ZTIyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMDU6MDU6NDUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwNC8xMV0gY29uZmlndXJlOiBDaGVjayBmb3IgYWRkaXRpb25hbCBmZWF0dXJlcyB0aGF0IHVjbGliYworIGRvZXNudCBzdXBwb3J0CisKK1RoaXMgaGVscHMgaW4gc3VwcG9ydGluZyB1Y2xpYmMgd2hpY2ggZG9lcyBub3QgaGF2ZSBhbGwgZmVhdHVyZXMgdGhhdAorZ2xpYmMgbWlnaHQgaGF2ZQorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZCBbbm8gZGVzaXJlIGZvciB1Y2xpYmMgc3VwcG9ydF0KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDE4ICsrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspCisKK0luZGV4OiBnaXQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgZ2l0L2NvbmZpZ3VyZS5hYworQEAgLTExMCw2ICsxMTAsMjQgQEAgQUNfUEFUSF9QUk9HKFtVTU9VTlRfUEFUSF0sIFt1bW91bnRdLCBbLworIAorIEFTX0lGKFshIGxuIC0tcmVsYXRpdmUgLS1oZWxwID4gL2Rldi9udWxsIDI+JjFdLCBbQUNfTVNHX0VSUk9SKFsqKiogbG4gZG9lc24ndCBzdXBwb3J0IC0tcmVsYXRpdmUgKioqXSldKQorIAorKyMgY2hlY2sgZm9yIGZldyBmdW5jdGlvbnMgbm90IGltcGxlbWVudGVkIGluIHVDbGliYworKworK0FDX0NIRUNLX0ZVTkNTX09OQ0UobWtvc3RlbXAgZXhlY3ZwZSBwb3NpeF9mYWxsb2NhdGUpCisrCisrIyBjaGVjayBmb3IgJW1zIGZvcm1hdCBzdXBwb3J0IC0gYXNzdW1lIGFsd2F5cyBubyBpZiBjcm9zcyBjb21waWxpbmcKKysKKytBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgJW1zIGZvcm1hdCBpcyBzdXBwb3J0ZWQgYnkgKnNjYW5mXSkKKysKKytBQ19MSU5LX0lGRUxTRSgKKysJW0FDX0xBTkdfUFJPR1JBTShbCisrCSAjaW5jbHVkZSA8c3RkaW8uaD4KKysJIF0sWworKwkgICAgY2hhciAqYnVmMSwgKmJ1ZjIsICpidWYzLCBzdHI9IjEgMi4zIGFiY2RlIiA7CisrCSAgICBpbnQgcmMgPSBzc2NhbmYoc3RyLCAiJW1zICVtcyAlbXMiLCAmYnVmMSwgJmJ1ZjIsICZidWYzKSA7CisrCSAgICByZXR1cm4gKHJjPT0zKT8wOjE7XSldLAorKwlbQUNfREVGSU5FKFtIQVZFX01TRk9STUFUXSwgWzFdLCBbRGVmaW5lIGlmICVtcyBmb3JtYXQgaXMgc3VwcG9ydGVkIGJ5ICpzY2FuZi5dKV0sCisrCVtBQ19NU0dfUkVTVUxUKFtub10pXSkKKysKKyBNNF9ERUZJTkVTPQorIAorIEFDX0NIRUNLX1RPT0woT0JKQ09QWSwgb2JqY29weSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDUtbnNwYXduLVVzZS1leGVjdnBlLW9ubHktd2hlbi1saWJjLXN1cHBvcnRzLWl0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNS1uc3Bhd24tVXNlLWV4ZWN2cGUtb25seS13aGVuLWxpYmMtc3VwcG9ydHMtaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVhMDA4OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDUtbnNwYXduLVVzZS1leGVjdnBlLW9ubHktd2hlbi1saWJjLXN1cHBvcnRzLWl0LnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gYTc0MTdjMmU2OTUwZDU1YzIyYzFiMGQxNTc4Mzg5OGI4ZmYyMjllZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjEwOjM3ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDUvMTFdIG5zcGF3bjogVXNlIGV4ZWN2cGUgb25seSB3aGVuIGxpYmMgc3VwcG9ydHMgaXQKKworVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQgW25vIGRlc2lyZSBmb3IgdWNsaWJjIHN1cHBvcnRdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvbnNwYXduL25zcGF3bi5jIHwgNyArKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKQorCitJbmRleDogZ2l0L3NyYy9uc3Bhd24vbnNwYXduLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zcmMvbnNwYXduL25zcGF3bi5jCisrKysgZ2l0L3NyYy9uc3Bhd24vbnNwYXduLmMKK0BAIC0xNDMsNiArMTQzLDggQEAgdHlwZWRlZiBzdHJ1Y3QgQ3VzdG9tTW91bnQgeworICAgICAgICAgY2hhciAqKmxvd2VyOworIH0gQ3VzdG9tTW91bnQ7CisgCisrI2luY2x1ZGUgImNvbmZpZy5oIgorKworIHN0YXRpYyBjaGFyICphcmdfZGlyZWN0b3J5ID0gTlVMTDsKKyBzdGF0aWMgY2hhciAqYXJnX3RlbXBsYXRlID0gTlVMTDsKKyBzdGF0aWMgY2hhciAqYXJnX3VzZXIgPSBOVUxMOworQEAgLTQyMzgsNyArNDI0MCwxMiBAQCBzdGF0aWMgaW50IGlubmVyX2NoaWxkKAorICAgICAgICAgICAgICAgICBhWzBdID0gKGNoYXIqKSAiL3NiaW4vaW5pdCI7CisgICAgICAgICAgICAgICAgIGV4ZWN2ZShhWzBdLCBhLCBlbnZfdXNlKTsKKyAgICAgICAgIH0gZWxzZSBpZiAoYXJnYyA+IG9wdGluZCkKKysjaWZkZWYgSEFWRV9FWEVDVlBFCisgICAgICAgICAgICAgICAgIGV4ZWN2cGUoYXJndltvcHRpbmRdLCBhcmd2ICsgb3B0aW5kLCBlbnZfdXNlKTsKKysjZWxzZQorKyAgICAgICAgICAgICAgICBlbnZpcm9uID0gZW52X3VzZTsKKysgICAgICAgICAgICAgICAgZXhlY3ZwKGFyZ3Zbb3B0aW5kXSwgYXJndiArIG9wdGluZCk7CisrI2VuZGlmIC8qIEhBVkVfRVhFQ1ZQRSAqLworICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIGNoZGlyKGhvbWUgPyBob21lIDogIi9yb290Iik7CisgICAgICAgICAgICAgICAgIGV4ZWNsZSgiL2Jpbi9iYXNoIiwgIi1iYXNoIiwgTlVMTCwgZW52X3VzZSk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA2LWpvdXJuYWwtVXNlLXBvc2l4LWZhbGxvY2F0ZS1vbmx5LWlmLWF2YWlsYWJsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDYtam91cm5hbC1Vc2UtcG9zaXgtZmFsbG9jYXRlLW9ubHktaWYtYXZhaWxhYmxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMWRkNzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA2LWpvdXJuYWwtVXNlLXBvc2l4LWZhbGxvY2F0ZS1vbmx5LWlmLWF2YWlsYWJsZS5wYXRjaApAQCAtMCwwICsxLDk2IEBACitGcm9tIDM0YTYxYjZjOWVlZDNmYWQzNjAwNjZmYjYzMTMyZWJjN2UwYWFhYTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwNToxMjo0OCArMDAwMAorU3ViamVjdDogW1BBVENIIDA2LzExXSBqb3VybmFsOiBVc2UgcG9zaXggZmFsbG9jYXRlIG9ubHkgaWYgYXZhaWxhYmxlCisKK1NvbWUgYXJjaGl0ZWN0dXJlIHBvcnRzIGluIHVjbGliYyBkaWQgbm90IHN1cHBvcnQgaXQgaW4gcGFzdAorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZCBbbm8gZGVzaXJlIGZvciB1Y2xpYmMgc3VwcG9ydF0KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9qb3VybmFsL2pvdXJuYWwtZmlsZS5jICB8IDE2ICsrKysrKysrKysrKysrKy0KKyBzcmMvam91cm5hbC9qb3VybmFsZC1rbXNnLmMgfCAxNSArKysrKysrKysrKysrKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDI5IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvam91cm5hbC9qb3VybmFsLWZpbGUuYyBiL3NyYy9qb3VybmFsL2pvdXJuYWwtZmlsZS5jCitpbmRleCAyODQ1ZTA1Li45NDMxMTcxIDEwMDY0NAorLS0tIGEvc3JjL2pvdXJuYWwvam91cm5hbC1maWxlLmMKKysrKyBiL3NyYy9qb3VybmFsL2pvdXJuYWwtZmlsZS5jCitAQCAtMzYsNiArMzYsOCBAQAorICNpbmNsdWRlICJjb21wcmVzcy5oIgorICNpbmNsdWRlICJmc3ByZy5oIgorIAorKyNpbmNsdWRlICJjb25maWcuaCIKKysKKyAjZGVmaW5lIERFRkFVTFRfREFUQV9IQVNIX1RBQkxFX1NJWkUgKDIwNDdVTEwqc2l6ZW9mKEhhc2hJdGVtKSkKKyAjZGVmaW5lIERFRkFVTFRfRklFTERfSEFTSF9UQUJMRV9TSVpFICgzMzNVTEwqc2l6ZW9mKEhhc2hJdGVtKSkKKyAKK0BAIC0zNTQsNyArMzU2LDcgQEAgc3RhdGljIGludCBqb3VybmFsX2ZpbGVfZnN0YXQoSm91cm5hbEZpbGUgKmYpIHsKKyAKKyBzdGF0aWMgaW50IGpvdXJuYWxfZmlsZV9hbGxvY2F0ZShKb3VybmFsRmlsZSAqZiwgdWludDY0X3Qgb2Zmc2V0LCB1aW50NjRfdCBzaXplKSB7CisgICAgICAgICB1aW50NjRfdCBvbGRfc2l6ZSwgbmV3X3NpemU7CistICAgICAgICBpbnQgcjsKKysgICAgICAgIGludCByID0gMDsKKyAKKyAgICAgICAgIGFzc2VydChmKTsKKyAKK0BAIC00MTgsOSArNDIwLDIxIEBAIHN0YXRpYyBpbnQgam91cm5hbF9maWxlX2FsbG9jYXRlKEpvdXJuYWxGaWxlICpmLCB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IHNpemUpCisgICAgICAgICAvKiBOb3RlIHRoYXQgdGhlIGdsaWJjIGZhbGxvY2F0ZSgpIGZhbGxiYWNrIGlzIHZlcnkKKyAgICAgICAgICAgIGluZWZmaWNpZW50LCBoZW5jZSB3ZSB0cnkgdG8gbWluaW1pemUgdGhlIGFsbG9jYXRpb24gYXJlYQorICAgICAgICAgICAgYXMgd2UgY2FuLiAqLworKyNpZmRlZiBIQVZFX1BPU0lYX0ZBTExPQ0FURQorICAgICAgICAgciA9IHBvc2l4X2ZhbGxvY2F0ZShmLT5mZCwgb2xkX3NpemUsIG5ld19zaXplIC0gb2xkX3NpemUpOworICAgICAgICAgaWYgKHIgIT0gMCkKKyAgICAgICAgICAgICAgICAgcmV0dXJuIC1yOworKyNlbHNlCisrICAgICAgICAvKiBXcml0ZSBzb21ldGhpbmcgZXZlcnkgNTEyIGJ5dGVzIHRvIG1ha2Ugc3VyZSB0aGUgYmxvY2sgaXMgYWxsb2NhdGVkICovCisrICAgICAgICB1aW50NjRfdCBsZW4gPSBuZXdfc2l6ZSAtIG9sZF9zaXplOworKyAgICAgICAgdWludDY0X3Qgb2Zmc2V0ID0gb2xkX3NpemU7CisrICAgICAgICBmb3IgKG9mZnNldCArPSAobGVuLTEpICUgNTEyOyBsZW4gPiAwOyBvZmZzZXQgKz0gNTEyKSB7CisrICAgICAgICAgICAgICAgIGxlbiAtPSA1MTI7CisrICAgICAgICAgICAgICAgIGlmIChwd3JpdGUoZi0+ZmQsICIiLCAxLCBvZmZzZXQpICE9IDEpCisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1lcnJubzsKKysgICAgICAgIH0KKysKKysjZW5kaWYgLyogSEFWRV9QT1NJWF9GQUxMT0NBVEUgKi8KKyAKKyAgICAgICAgIGYtPmhlYWRlci0+YXJlbmFfc2l6ZSA9IGh0b2xlNjQobmV3X3NpemUgLSBsZTY0dG9oKGYtPmhlYWRlci0+aGVhZGVyX3NpemUpKTsKKyAKK2RpZmYgLS1naXQgYS9zcmMvam91cm5hbC9qb3VybmFsZC1rbXNnLmMgYi9zcmMvam91cm5hbC9qb3VybmFsZC1rbXNnLmMKK2luZGV4IGM0MjE2YzQuLmE5OThlZDUgMTAwNjQ0CistLS0gYS9zcmMvam91cm5hbC9qb3VybmFsZC1rbXNnLmMKKysrKyBiL3NyYy9qb3VybmFsL2pvdXJuYWxkLWttc2cuYworQEAgLTQzNiw2ICs0MzYsNyBAQCBmYWlsOgorIGludCBzZXJ2ZXJfb3Blbl9rZXJuZWxfc2VxbnVtKFNlcnZlciAqcykgeworICAgICAgICAgX2NsZWFudXBfY2xvc2VfIGludCBmZDsKKyAgICAgICAgIHVpbnQ2NF90ICpwOworKyAgICAgICAgaW50IHIgPSAwOworIAorICAgICAgICAgYXNzZXJ0KHMpOworIAorQEAgLTQ0OSw3ICs0NTAsMTkgQEAgaW50IHNlcnZlcl9vcGVuX2tlcm5lbF9zZXFudW0oU2VydmVyICpzKSB7CisgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgfQorIAorLSAgICAgICAgaWYgKHBvc2l4X2ZhbGxvY2F0ZShmZCwgMCwgc2l6ZW9mKHVpbnQ2NF90KSkgPCAwKSB7CisrI2lmZGVmIEhBVkVfUE9TSVhfRkFMTE9DQVRFCisrICAgICAgICByID0gcG9zaXhfZmFsbG9jYXRlKGZkLCAwLCBzaXplb2YodWludDY0X3QpKTsKKysjZWxzZQorKyAgICAgICAgLyogVXNlIGdvb2Qgb2xkIG1ldGhvZCB0byB3cml0ZSB6ZXJvcyBpbnRvIHRoZSBqb3VybmFsIGZpbGUKKysgICAgICAgICAgIHBlcmhhcHMgdmVyeSBpbmVmZmljaWVudCB5ZXQgd29ya2luZy4gKi8KKysgICAgICAgIGNoYXIgKmJ1ZiA9IGFsbG9jYShzaXplb2YodWludDY0X3QpKTsKKysgICAgICAgIG9mZl90IG9sZHBvcyA9IGxzZWVrKGZkLCAwLCBTRUVLX0NVUik7CisrICAgICAgICBiemVybyhidWYsIHNpemVvZih1aW50NjRfdCkpOworKyAgICAgICAgbHNlZWsoZmQsIDAsIFNFRUtfU0VUKTsKKysgICAgICAgIHIgPSB3cml0ZShmZCwgYnVmLCBzaXplb2YodWludDY0X3QpKTsKKysgICAgICAgIGxzZWVrKGZkLCBvbGRwb3MsIFNFRUtfU0VUKTsKKysjZW5kaWYgLyogSEFWRV9QT1NJWF9GQUxMT0NBVEUgKi8KKysgICAgICAgIGlmIChyIDwgMCkgeworICAgICAgICAgICAgICAgICBsb2dfZXJyb3JfZXJybm8oZXJybm8sICJGYWlsZWQgdG8gYWxsb2NhdGUgc2VxdWVudGlhbCBudW1iZXIgZmlsZSwgaWdub3Jpbmc6ICVtIik7CisgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgfQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA3LXV0aWwtVXNlLW1rb3N0ZW1wLW9ubHktaWYtbGliYy1zdXBwb3J0cy1pdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDctdXRpbC1Vc2UtbWtvc3RlbXAtb25seS1pZi1saWJjLXN1cHBvcnRzLWl0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YWI3YzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA3LXV0aWwtVXNlLW1rb3N0ZW1wLW9ubHktaWYtbGliYy1zdXBwb3J0cy1pdC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIGY3NzE0MDdkM2UwMjg4Y2EwYzA2YTg5NDE5NGQzZGRhZDY5YjlhOGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwNToxNzowNSArMDAwMAorU3ViamVjdDogW1BBVENIIDA3LzExXSB1dGlsOiBVc2UgbWtvc3RlbXAgb25seSBpZiBsaWJjIHN1cHBvcnRzIGl0CisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkIFtubyBkZXNpcmUgZm9yIHVjbGliYyBzdXBwb3J0XQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL2Jhc2ljL3V0aWwuYyB8IDggKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvYmFzaWMvdXRpbC5jIGIvc3JjL2Jhc2ljL3V0aWwuYworaW5kZXggZGM2NTI4MC4uNzJmNDY2NSAxMDA2NDQKKy0tLSBhL3NyYy9iYXNpYy91dGlsLmMKKysrKyBiL3NyYy9iYXNpYy91dGlsLmMKK0BAIC05Nyw2ICs5Nyw4IEBACisgI2luY2x1ZGUgImRlZi5oIgorICNpbmNsdWRlICJzcGFyc2UtZW5kaWFuLmgiCisgCisrI2luY2x1ZGUgImNvbmZpZy5oIgorKworIGludCBzYXZlZF9hcmdjID0gMDsKKyBjaGFyICoqc2F2ZWRfYXJndiA9IE5VTEw7CisgCitAQCAtNjY4Miw3ICs2Njg0LDEzIEBAIGludCBta29zdGVtcF9zYWZlKGNoYXIgKnBhdHRlcm4sIGludCBmbGFncykgeworIAorICAgICAgICAgdSA9IHVtYXNrKDA3Nyk7CisgCisrI2lmZGVmIEhBVkVfTUtPU1RFTVAKKyAgICAgICAgIGZkID0gbWtvc3RlbXAocGF0dGVybiwgZmxhZ3MpOworKyNlbHNlCisrICAgICAgICBmZCA9IG1rc3RlbXAocGF0dGVybik7CisrICAgICAgICBpZiAoZmQgPj0gMCkgZmNudGwoZmQsIEZfU0VURkQsIGZsYWdzKTsKKysjZW5kaWYgLyogSEFWRV9NS09TVEVNUCAqLworKworICAgICAgICAgaWYgKGZkIDwgMCkKKyAgICAgICAgICAgICAgICAgcmV0dXJuIC1lcnJubzsKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwOC11dGlsLWJ5cGFzcy11bmltcGxlbWVudGVkLV9TQ19QSFlTX1BBR0VTLXN5c3RlbS1jb25mLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwOC11dGlsLWJ5cGFzcy11bmltcGxlbWVudGVkLV9TQ19QSFlTX1BBR0VTLXN5c3RlbS1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNGQ0ZGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA4LXV0aWwtYnlwYXNzLXVuaW1wbGVtZW50ZWQtX1NDX1BIWVNfUEFHRVMtc3lzdGVtLWNvbmYucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSBiNDVlYTNiZmQ2NjM1NzQ0YzhhNmI3NGQwYWM3MDFiNDRiYjFkMjk0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMDU6MTk6MzcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwOC8xMV0gdXRpbDogYnlwYXNzIHVuaW1wbGVtZW50ZWQgX1NDX1BIWVNfUEFHRVMgc3lzdGVtCisgY29uZmlndXJhdGlvbiBBUEkgb24gdWNsaWJjCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdWNsaWJjLXNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL2Jhc2ljL3V0aWwuYyB8IDE1ICsrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvYmFzaWMvdXRpbC5jIGIvc3JjL2Jhc2ljL3V0aWwuYworaW5kZXggNzJmNDY2NS4uY2JiZTNiMSAxMDA2NDQKKy0tLSBhL3NyYy9iYXNpYy91dGlsLmMKKysrKyBiL3NyYy9iYXNpYy91dGlsLmMKK0BAIC02NzkzLDEwICs2NzkzLDI1IEBAIHVpbnQ2NF90IHBoeXNpY2FsX21lbW9yeSh2b2lkKSB7CisgICAgICAgICAvKiBXZSByZXR1cm4gdGhpcyBhcyB1aW50NjRfdCBpbiBjYXNlIHdlIGFyZSBydW5uaW5nIGFzIDMyYml0CisgICAgICAgICAgKiBwcm9jZXNzIG9uIGEgNjRiaXQga2VybmVsIHdpdGggaHVnZSBhbW91bnRzIG9mIG1lbW9yeSAqLworIAorKyNpZmRlZiBfX1VDTElCQ19fCisrICAgICAgICBjaGFyIGxpbmVbMTI4XTsKKysgICAgICAgIEZJTEUgKmYgPSBmb3BlbigiL3Byb2MvbWVtaW5mbyIsICJyIik7CisrICAgICAgICBpZiAoZiA9PSBOVUxMKQorKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIHdoaWxlICghZmVvZihmKSAmJiBmZ2V0cyhsaW5lLCBzaXplb2YobGluZSktMSwgZikpIHsKKysgICAgICAgICAgICAgICAgaWYgKHNzY2FuZihsaW5lLCAiTWVtVG90YWw6ICVsIGtCIiwgJm1lbSkgPT0gMSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbSAqPSAxMDI0OworKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBmY2xvc2UoZik7CisrICAgICAgICByZXR1cm4gKHVpbnQ2NF90KSBtZW07CisrI2Vsc2UKKyAgICAgICAgIG1lbSA9IHN5c2NvbmYoX1NDX1BIWVNfUEFHRVMpOworICAgICAgICAgYXNzZXJ0KG1lbSA+IDApOworIAorICAgICAgICAgcmV0dXJuICh1aW50NjRfdCkgbWVtICogKHVpbnQ2NF90KSBwYWdlX3NpemUoKTsKKysjZW5kaWYKKyB9CisgCisgdm9pZCBoZXhkdW1wKEZJTEUgKmYsIGNvbnN0IHZvaWQgKnAsIHNpemVfdCBzKSB7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDktc3lzdi1nZW5lcmF0b3ItYWRkLXN1cHBvcnQtZm9yLWV4ZWN1dGluZy1zY3JpcHRzLXVuZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDktc3lzdi1nZW5lcmF0b3ItYWRkLXN1cHBvcnQtZm9yLWV4ZWN1dGluZy1zY3JpcHRzLXVuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWEzZTgzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwOS1zeXN2LWdlbmVyYXRvci1hZGQtc3VwcG9ydC1mb3ItZXhlY3V0aW5nLXNjcmlwdHMtdW5kLnBhdGNoCkBAIC0wLDAgKzEsMTQzIEBACitGcm9tIDg3OTFiNWIzOTM0YzU1Njk0ODcyYjY5MTVhNjczNDA2ODNlYWQ5MWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwNToyMjo1MiArMDAwMAorU3ViamVjdDogW1BBVENIIDA5LzExXSBzeXN2LWdlbmVyYXRvcjogYWRkIHN1cHBvcnQgZm9yIGV4ZWN1dGluZyBzY3JpcHRzIHVuZGVyCisgL2V0Yy9yY1MuZC8KKworVG8gYmUgY29tcGF0aWJsZSwgYWxsIHNlcnZpY2VzIHRyYW5zbGF0ZWQgZnJvbSBzY3JpcHRzIHVuZGVyIC9ldGMvcmNTLmQgd291bGQKK3J1biBiZWZvcmUgc2VydmljZXMgdHJhbnNsYXRlZCBmcm9tIHNjcmlwdHMgdW5kZXIgL2V0Yy9yY04uZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9zeXN2LWdlbmVyYXRvci9zeXN2LWdlbmVyYXRvci5jIHwgNTAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzOCBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9zeXN2LWdlbmVyYXRvci9zeXN2LWdlbmVyYXRvci5jIGIvc3JjL3N5c3YtZ2VuZXJhdG9yL3N5c3YtZ2VuZXJhdG9yLmMKK2luZGV4IGJkNjdmMzIuLjY3NTZjYzYgMTAwNjQ0CistLS0gYS9zcmMvc3lzdi1nZW5lcmF0b3Ivc3lzdi1nZW5lcmF0b3IuYworKysrIGIvc3JjL3N5c3YtZ2VuZXJhdG9yL3N5c3YtZ2VuZXJhdG9yLmMKK0BAIC00Miw3ICs0Miw4IEBACisgCisgdHlwZWRlZiBlbnVtIFJ1bmxldmVsVHlwZSB7CisgICAgICAgICBSVU5MRVZFTF9VUCwKKy0gICAgICAgIFJVTkxFVkVMX0RPV04KKysgICAgICAgIFJVTkxFVkVMX0RPV04sCisrICAgICAgICBSVU5MRVZFTF9TWVNJTklUCisgfSBSdW5sZXZlbFR5cGU7CisgCisgc3RhdGljIGNvbnN0IHN0cnVjdCB7CitAQCAtNTcsNiArNTgsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICAgICAgIHsgInJjNC5kIiwgIFNQRUNJQUxfTVVMVElfVVNFUl9UQVJHRVQsIFJVTkxFVkVMX1VQIH0sCisgICAgICAgICB7ICJyYzUuZCIsICBTUEVDSUFMX0dSQVBISUNBTF9UQVJHRVQsICBSVU5MRVZFTF9VUCB9LAorIAorKyAgICAgICAgLyogRGViaWFuIHN0eWxlIHJjUy5kLCBhbHNvIGFkb3B0ZWQgYnkgT0UgKi8KKysgICAgICAgIHsgInJjUy5kIiwgIFNQRUNJQUxfU1lTSU5JVF9UQVJHRVQsICAgUlVOTEVWRUxfU1lTSU5JVH0sCisrCisgICAgICAgICAvKiBTdGFuZGFyZCBTeXNWIHJ1bmxldmVscyBmb3Igc2h1dGRvd24gKi8KKyAgICAgICAgIHsgInJjMC5kIiwgIFNQRUNJQUxfUE9XRVJPRkZfVEFSR0VULCAgUlVOTEVWRUxfRE9XTiB9LAorICAgICAgICAgeyAicmM2LmQiLCAgU1BFQ0lBTF9SRUJPT1RfVEFSR0VULCAgICBSVU5MRVZFTF9ET1dOIH0KK0BAIC02NSw3ICs2OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgICAgICAgZGlyZWN0b3JpZXMgaW4gdGhpcyBvcmRlciwgYW5kIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQKKyAgICAgICAgICAgIHN5c3Zfc3RhcnRfcHJpb3JpdHkgaXMga25vd24gd2hlbiB3ZSBmaXJzdCBsb2FkIHRoZQorICAgICAgICAgICAgdW5pdC4gQW5kIHRoYXQgdmFsdWUgd2Ugb25seSBrbm93IGZyb20gUyBsaW5rcy4gSGVuY2UKKy0gICAgICAgICAgIFVQIG11c3QgYmUgcmVhZCBiZWZvcmUgRE9XTiAqLworKyAgICAgICAgICAgVVAvU1lTSU5JVCBtdXN0IGJlIHJlYWQgYmVmb3JlIERPV04gKi8KKyB9OworIAorIHR5cGVkZWYgc3RydWN0IFN5c3ZTdHViIHsKK0BAIC04MSw2ICs4NSw4IEBAIHR5cGVkZWYgc3RydWN0IFN5c3ZTdHViIHsKKyAgICAgICAgIGNoYXIgKipjb25mbGljdHM7CisgICAgICAgICBib29sIGhhc19sc2I7CisgICAgICAgICBib29sIHJlbG9hZDsKKysgICAgICAgIGJvb2wgZGVmYXVsdF9kZXBlbmRlbmNpZXM7CisrICAgICAgICBib29sIGZyb21fcmNzZDsKKyB9IFN5c3ZTdHViOworIAorIGNvbnN0IGNoYXIgKmFyZ19kZXN0ID0gIi90bXAiOworQEAgLTE4Myw2ICsxODksOSBAQCBzdGF0aWMgaW50IGdlbmVyYXRlX3VuaXRfZmlsZShTeXN2U3R1YiAqcykgeworICAgICAgICAgICAgICAgICAiRGVzY3JpcHRpb249JXNcbiIsCisgICAgICAgICAgICAgICAgIHMtPnBhdGgsIHMtPmRlc2NyaXB0aW9uKTsKKyAKKysgICAgICAgIGlmICghcy0+ZGVmYXVsdF9kZXBlbmRlbmNpZXMpCisrICAgICAgICAgICAgICAgIGZwcmludGYoZiwgIkRlZmF1bHREZXBlbmRlbmNpZXM9bm9cbiIpOworKworICAgICAgICAgaWYgKCFpc2VtcHR5KGJlZm9yZSkpCisgICAgICAgICAgICAgICAgIGZwcmludGYoZiwgIkJlZm9yZT0lc1xuIiwgYmVmb3JlKTsKKyAgICAgICAgIGlmICghaXNlbXB0eShhZnRlcikpCitAQCAtNzA0LDE4ICs3MTMsMzAgQEAgc3RhdGljIGludCBmaXhfb3JkZXIoU3lzdlN0dWIgKnMsIEhhc2htYXAgKmFsbF9zZXJ2aWNlcykgeworICAgICAgICAgICAgICAgICBpZiAocy0+aGFzX2xzYiAmJiBvdGhlci0+aGFzX2xzYikKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAKKy0gICAgICAgICAgICAgICAgaWYgKG90aGVyLT5zeXN2X3N0YXJ0X3ByaW9yaXR5IDwgcy0+c3lzdl9zdGFydF9wcmlvcml0eSkgeworLSAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBzdHJ2X2V4dGVuZCgmcy0+YWZ0ZXIsIG90aGVyLT5uYW1lKTsKKysgICAgICAgICAgICAgICAgLyogQWxsIHNjcmlwdHMgdW5kZXIgL2V0Yy9yY1MuZCBzaG91bGQgZXhlY3V0ZSBiZWZvcmUgc2NyaXB0cyB1bmRlcgorKyAgICAgICAgICAgICAgICAgKiAvZXRjL3JjTi5kICovCisrICAgICAgICAgICAgICAgIGlmICghb3RoZXItPmZyb21fcmNzZCAmJiBzLT5mcm9tX3Jjc2QpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICByID0gc3Rydl9leHRlbmQoJnMtPmJlZm9yZSwgb3RoZXItPm5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2dfb29tKCk7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgZWxzZSBpZiAob3RoZXItPnN5c3Zfc3RhcnRfcHJpb3JpdHkgPiBzLT5zeXN2X3N0YXJ0X3ByaW9yaXR5KSB7CistICAgICAgICAgICAgICAgICAgICAgICAgciA9IHN0cnZfZXh0ZW5kKCZzLT5iZWZvcmUsIG90aGVyLT5uYW1lKTsKKysgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvdGhlci0+ZnJvbV9yY3NkICYmICFzLT5mcm9tX3Jjc2QpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICByID0gc3Rydl9leHRlbmQoJnMtPmFmdGVyLCBvdGhlci0+bmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvZ19vb20oKTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG90aGVyLT5zeXN2X3N0YXJ0X3ByaW9yaXR5IDwgcy0+c3lzdl9zdGFydF9wcmlvcml0eSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IHN0cnZfZXh0ZW5kKCZzLT5hZnRlciwgb3RoZXItPm5hbWUpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPCAwKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9nX29vbSgpOworKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChvdGhlci0+c3lzdl9zdGFydF9wcmlvcml0eSA+IHMtPnN5c3Zfc3RhcnRfcHJpb3JpdHkpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBzdHJ2X2V4dGVuZCgmcy0+YmVmb3JlLCBvdGhlci0+bmFtZSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA8IDApCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2dfb29tKCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICAgICAvKiBGSVhNRTogTWF5YmUgd2Ugc2hvdWxkIGNvbXBhcmUgdGhlIG5hbWUgaGVyZSBsZXhpY29ncmFwaGljYWxseT8gKi8KKyAgICAgICAgIH0KK0BAIC03NzgsNiArNzk5LDggQEAgc3RhdGljIGludCBlbnVtZXJhdGVfc3lzdihMb29rdXBQYXRocyBscCwgSGFzaG1hcCAqYWxsX3NlcnZpY2VzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9nX29vbSgpOworIAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtPnN5c3Zfc3RhcnRfcHJpb3JpdHkgPSAtMTsKKysgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLT5kZWZhdWx0X2RlcGVuZGVuY2llcyA9IHRydWU7CisrICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS0+ZnJvbV9yY3NkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS0+bmFtZSA9IG5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS0+cGF0aCA9IGZwYXRoOworIAorQEAgLTg2NCw5ICs4ODcsMTEgQEAgc3RhdGljIGludCBzZXRfZGVwZW5kZW5jaWVzX2Zyb21fcmNuZChMb29rdXBQYXRocyBscCwgSGFzaG1hcCAqYWxsX3NlcnZpY2VzKSB7CisgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGUtPmRfbmFtZVswXSA9PSAnUycpICB7CisgCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyY25kX3RhYmxlW2ldLnR5cGUgPT0gUlVOTEVWRUxfVVApIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJjbmRfdGFibGVbaV0udHlwZSA9PSBSVU5MRVZFTF9VUCB8fCByY25kX3RhYmxlW2ldLnR5cGUgPT0gUlVOTEVWRUxfU1lTSU5JVCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtPnN5c3Zfc3RhcnRfcHJpb3JpdHkgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYKGEqMTAgKyBiLCBzZXJ2aWNlLT5zeXN2X3N0YXJ0X3ByaW9yaXR5KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLT5kZWZhdWx0X2RlcGVuZGVuY2llcyA9IChyY25kX3RhYmxlW2ldLnR5cGUgPT0gUlVOTEVWRUxfU1lTSU5JVCk/ZmFsc2U6dHJ1ZTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLT5mcm9tX3Jjc2QgPSAocmNuZF90YWJsZVtpXS50eXBlID09IFJVTkxFVkVMX1NZU0lOSVQpP3RydWU6ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IHNldF9lbnN1cmVfYWxsb2NhdGVkKCZydW5sZXZlbF9zZXJ2aWNlc1tpXSwgTlVMTCk7CitAQCAtODc4LDcgKzkwMyw4IEBAIHN0YXRpYyBpbnQgc2V0X2RlcGVuZGVuY2llc19mcm9tX3JjbmQoTG9va3VwUGF0aHMgbHAsIEhhc2htYXAgKmFsbF9zZXJ2aWNlcykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZS0+ZF9uYW1lWzBdID09ICdLJyAmJgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmNuZF90YWJsZVtpXS50eXBlID09IFJVTkxFVkVMX0RPV04pKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyY25kX3RhYmxlW2ldLnR5cGUgPT0gUlVOTEVWRUxfRE9XTiB8fAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmNuZF90YWJsZVtpXS50eXBlID09IFJVTkxFVkVMX1NZU0lOSVQpKSB7CisgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBzZXRfZW5zdXJlX2FsbG9jYXRlZCgmc2h1dGRvd25fc2VydmljZXMsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA8IDApCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTAtTWFrZS1yb290LXMtaG9tZS1kaXJlY3RvcnktY29uZmlndXJhYmxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMC1NYWtlLXJvb3Qtcy1ob21lLWRpcmVjdG9yeS1jb25maWd1cmFibGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ3ZmY1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTAtTWFrZS1yb290LXMtaG9tZS1kaXJlY3RvcnktY29uZmlndXJhYmxlLnBhdGNoCkBAIC0wLDAgKzEsMTgxIEBACitGcm9tIDNkYzczMWMxZDI3MGUyZTE0M2RlNjIxZGI5YmQ4OTgyOTlmZDg0OWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwNToyNDo0OSArMDAwMAorU3ViamVjdDogW1BBVENIIDEwLzExXSBNYWtlIHJvb3QncyBob21lIGRpcmVjdG9yeSBjb25maWd1cmFibGUKKworT3BlbkVtYmVkZGVkIGhhcyBhIGNvbmZpZ3VyYWJsZSBob21lIGRpcmVjdG9yeSBmb3Igcm9vdC4gQWxsb3cKK3N5c3RlbWQgdG8gYmUgYnVpbHQgdXNpbmcgaXRzIGlkZWEgb2Ygd2hhdCByb290J3MgaG9tZSBkaXJlY3RvcnkKK3Nob3VsZCBiZS4KKworVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQKK1Vwc3RyZWFtIHdhbnRzIHRvIGhhdmUgYSB1bmlmaWVkIGhpZXJhcmNoeSB3aGVyZSBldmVyeW9uZSBpcwordXNpbmcgdGhlIHNhbWUgcm9vdCBmb2xkZXIuCitodHRwczovL2dpdGh1Yi5jb20vc3lzdGVtZC9zeXN0ZW1kL2lzc3Vlcy81NDEKKworU2lnbmVkLW9mZi1ieTogRGFuIE1jR3JlZ29yIDxkYW4ubWNncmVnb3JAdXNhc2suY2E+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgIHwgMiArKworIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICB8IDcgKysrKysrKworIHNyYy9jb3JlL3VuaXQtcHJpbnRmLmMgICAgICAgICAgICB8IDIgKy0KKyBzcmMvbnNwYXduL25zcGF3bi5jICAgICAgICAgICAgICAgfCA0ICsrLS0KKyBzcmMvYmFzaWMvdXRpbC5jICAgICAgICAgICAgICAgICB8IDQgKystLQorIHVuaXRzL2NvbnNvbGUtc2hlbGwuc2VydmljZS5tNC5pbiB8IDQgKystLQorIHVuaXRzL2VtZXJnZW5jeS5zZXJ2aWNlLmluICAgICAgICB8IDQgKystLQorIHVuaXRzL3Jlc2N1ZS5zZXJ2aWNlLmluICAgICAgICAgICB8IDQgKystLQorIDggZmlsZXMgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnaXQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9NYWtlZmlsZS5hbQorKysrIGdpdC9NYWtlZmlsZS5hbQorQEAgLTIwOCw2ICsyMDgsNyBAQCBBTV9DUFBGTEFHUyA9IFwKKyAJLURMSUJESVI9XCIkKGxpYmRpcilcIiBcCisgCS1EUk9PVExJQkRJUj1cIiQocm9vdGxpYmRpcilcIiBcCisgCS1EUk9PVExJQkVYRUNESVI9XCIkKHJvb3RsaWJleGVjZGlyKVwiIFwKKysJLURST09USE9NRURJUj1cIiQocm9vdGhvbWVkaXIpXCIgXAorIAktRFRFU1RfRElSPVwiJChhYnNfdG9wX3NyY2RpcikvdGVzdFwiIFwKKyAJLUkgJCh0b3Bfc3JjZGlyKS9zcmMgXAorIAktSSAkKHRvcF9idWlsZGRpcikvc3JjL2Jhc2ljIFwKK0BAIC01NjE1LDYgKzU2MTYsNyBAQCBFWFRSQV9ESVNUICs9IFwKKyBzdWJzdGl0dXRpb25zID0gXAorICAgICAgICAnfHJvb3RsaWJleGVjZGlyPSQocm9vdGxpYmV4ZWNkaXIpfCcgXAorICAgICAgICAnfHJvb3RiaW5kaXI9JChyb290YmluZGlyKXwnIFwKKysgICAgICAgJ3xyb290aG9tZWRpcj0kKHJvb3Rob21lZGlyKXwnIFwKKyAgICAgICAgJ3xiaW5kaXI9JChiaW5kaXIpfCcgXAorICAgICAgICAnfFNZU1RFTUNUTD0kKHJvb3RiaW5kaXIpL3N5c3RlbWN0bHwnIFwKKyAgICAgICAgJ3xTWVNURU1EX05PVElGWT0kKHJvb3RiaW5kaXIpL3N5c3RlbWQtbm90aWZ5fCcgXAorSW5kZXg6IGdpdC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9jb25maWd1cmUuYWMKKysrKyBnaXQvY29uZmlndXJlLmFjCitAQCAtMTM4Myw2ICsxMzgzLDExIEBAIEFDX0FSR19XSVRIKFtyb290bGliZGlyXSwKKyAgICAgICAgIFt3aXRoX3Jvb3RsaWJkaXI9JHtsaWJkaXJ9XSkKKyBBWF9OT1JNQUxJWkVfUEFUSChbd2l0aF9yb290bGliZGlyXSkKKyAKKytBQ19BUkdfV0lUSChbcm9vdGhvbWVkaXJdLAorKyAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1yb290aG9tZWRpcj1ESVJdLCBbSG9tZSBkaXJlY3RvcnkgZm9yIHRoZSByb290IHVzZXJdKSwKKysgICAgICAgIFtdLAorKyAgICAgICAgW3dpdGhfcm9vdGhvbWVkaXI9L3Jvb3RdKQorKworIEFDX0FSR19XSVRIKFtwYW1saWJkaXJdLAorICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1wYW1saWJkaXI9RElSXSwgW0RpcmVjdG9yeSBmb3IgUEFNIG1vZHVsZXNdKSwKKyAgICAgICAgIFtdLAorQEAgLTE0NzQsNiArMTQ3OSw3IEBAIEFDX1NVQlNUKFtwYW1saWJkaXJdLCBbJHdpdGhfcGFtbGliZGlyXSkKKyBBQ19TVUJTVChbcGFtY29uZmRpcl0sIFskd2l0aF9wYW1jb25mZGlyXSkKKyBBQ19TVUJTVChbcm9vdHByZWZpeF0sIFskd2l0aF9yb290cHJlZml4XSkKKyBBQ19TVUJTVChbcm9vdGxpYmRpcl0sIFskd2l0aF9yb290bGliZGlyXSkKKytBQ19TVUJTVChbcm9vdGhvbWVkaXJdLCBbJHdpdGhfcm9vdGhvbWVkaXJdKQorIAorIEFDX0NPTkZJR19GSUxFUyhbCisgICAgICAgICBNYWtlZmlsZQorQEAgLTE1NjMsNiArMTU2OSw3IEBAIEFDX01TR19SRVNVTFQoWworICAgICAgICAgaW5jbHVkZWRpcjogICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0KKyAgICAgICAgIGxpYiBkaXI6ICAgICAgICAgICAgICAgICAke2xpYmRpcn0KKyAgICAgICAgIHJvb3RsaWIgZGlyOiAgICAgICAgICAgICAke3dpdGhfcm9vdGxpYmRpcn0KKysgICAgICAgIHJvb3QgaG9tZSBkaXI6ICAgICAgICAgICAke3dpdGhfcm9vdGhvbWVkaXJ9CisgICAgICAgICBTeXNWIGluaXQgc2NyaXB0czogICAgICAgJHtTWVNURU1fU1lTVklOSVRfUEFUSH0KKyAgICAgICAgIFN5c1YgcmM/LmQgZGlyZWN0b3JpZXM6ICAke1NZU1RFTV9TWVNWUkNORF9QQVRIfQorICAgICAgICAgQnVpbGQgUHl0aG9uOiAgICAgICAgICAgICR7UFlUSE9OfQorSW5kZXg6IGdpdC9zcmMvY29yZS91bml0LXByaW50Zi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3JjL2NvcmUvdW5pdC1wcmludGYuYworKysrIGdpdC9zcmMvY29yZS91bml0LXByaW50Zi5jCitAQCAtMjM3LDcgKzIzNyw3IEBAIHN0YXRpYyBpbnQgc3BlY2lmaWVyX3VzZXJfaG9tZShjaGFyIHNwZWMKKyAgICAgICAgICAgICAgICAgICogYmVzdCBvZiBpdCBpZiB3ZSBjYW4sIGJ1dCBmYWlsIGlmIHdlIGNhbid0ICovCisgCisgICAgICAgICAgICAgICAgIGlmICghYy0+dXNlciB8fCBzdHJlcShjLT51c2VyLCAicm9vdCIpIHx8IHN0cmVxKGMtPnVzZXIsICIwIikpCistICAgICAgICAgICAgICAgICAgICAgICAgbiA9IHN0cmR1cCgiL3Jvb3QiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBuID0gc3RyZHVwKFJPT1RIT01FRElSKTsKKyAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsKKyAKK0luZGV4OiBnaXQvc3JjL25zcGF3bi9uc3Bhd24uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy9uc3Bhd24vbnNwYXduLmMKKysrKyBnaXQvc3JjL25zcGF3bi9uc3Bhd24uYworQEAgLTQxNzYsNyArNDE3Niw3IEBAIHN0YXRpYyBpbnQgaW5uZXJfY2hpbGQoCisgICAgICAgICBpZiAoZW52cFtuX2Vudl0pCisgICAgICAgICAgICAgICAgIG5fZW52ICsrOworIAorLSAgICAgICAgaWYgKChhc3ByaW50ZigoY2hhcioqKShlbnZwICsgbl9lbnYrKyksICJIT01FPSVzIiwgaG9tZSA/IGhvbWU6ICIvcm9vdCIpIDwgMCkgfHwKKysgICAgICAgIGlmICgoYXNwcmludGYoKGNoYXIqKikoZW52cCArIG5fZW52KyspLCAiSE9NRT0lcyIsIGhvbWUgPyBob21lOiBST09USE9NRURJUikgPCAwKSB8fAorICAgICAgICAgICAgIChhc3ByaW50ZigoY2hhcioqKShlbnZwICsgbl9lbnYrKyksICJVU0VSPSVzIiwgYXJnX3VzZXIgPyBhcmdfdXNlciA6ICJyb290IikgPCAwKSB8fAorICAgICAgICAgICAgIChhc3ByaW50ZigoY2hhcioqKShlbnZwICsgbl9lbnYrKyksICJMT0dOQU1FPSVzIiwgYXJnX3VzZXIgPyBhcmdfdXNlciA6ICJyb290IikgPCAwKSkKKyAgICAgICAgICAgICAgICAgcmV0dXJuIGxvZ19vb20oKTsKK0BAIC00MjQ3LDcgKzQyNDcsNyBAQCBzdGF0aWMgaW50IGlubmVyX2NoaWxkKAorICAgICAgICAgICAgICAgICBleGVjdnAoYXJndltvcHRpbmRdLCBhcmd2ICsgb3B0aW5kKTsKKyAjZW5kaWYgLyogSEFWRV9FWEVDVlBFICovCisgICAgICAgICBlbHNlIHsKKy0gICAgICAgICAgICAgICAgY2hkaXIoaG9tZSA/IGhvbWUgOiAiL3Jvb3QiKTsKKysgICAgICAgICAgICAgICAgY2hkaXIoaG9tZSA/IGhvbWUgOiBST09USE9NRURJUik7CisgICAgICAgICAgICAgICAgIGV4ZWNsZSgiL2Jpbi9iYXNoIiwgIi1iYXNoIiwgTlVMTCwgZW52X3VzZSk7CisgICAgICAgICAgICAgICAgIGV4ZWNsZSgiL2Jpbi9zaCIsICItc2giLCBOVUxMLCBlbnZfdXNlKTsKKyAgICAgICAgIH0KK0luZGV4OiBnaXQvc3JjL2Jhc2ljL3V0aWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy9iYXNpYy91dGlsLmMKKysrKyBnaXQvc3JjL2Jhc2ljL3V0aWwuYworQEAgLTMyMzMsNyArMzIzMyw3IEBAIGludCBnZXRfdXNlcl9jcmVkcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAqZ2lkID0gMDsKKyAKKyAgICAgICAgICAgICAgICAgaWYgKGhvbWUpCistICAgICAgICAgICAgICAgICAgICAgICAgKmhvbWUgPSAiL3Jvb3QiOworKyAgICAgICAgICAgICAgICAgICAgICAgICpob21lID0gUk9PVEhPTUVESVI7CisgCisgICAgICAgICAgICAgICAgIGlmIChzaGVsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAqc2hlbGwgPSAiL2Jpbi9zaCI7CitAQCAtNDA2OSw3ICs0MDY5LDcgQEAgaW50IGdldF9ob21lX2RpcihjaGFyICoqX2gpIHsKKyAgICAgICAgIC8qIEhhcmRjb2RlIGhvbWUgZGlyZWN0b3J5IGZvciByb290IHRvIGF2b2lkIE5TUyAqLworICAgICAgICAgdSA9IGdldHVpZCgpOworICAgICAgICAgaWYgKHUgPT0gMCkgeworLSAgICAgICAgICAgICAgICBoID0gc3RyZHVwKCIvcm9vdCIpOworKyAgICAgICAgICAgICAgICBoID0gc3RyZHVwKFJPT1RIT01FRElSKTsKKyAgICAgICAgICAgICAgICAgaWYgKCFoKQorICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworIAorSW5kZXg6IGdpdC91bml0cy9jb25zb2xlLXNoZWxsLnNlcnZpY2UubTQuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy91bml0cy9jb25zb2xlLXNoZWxsLnNlcnZpY2UubTQuaW4KKysrKyBnaXQvdW5pdHMvY29uc29sZS1zaGVsbC5zZXJ2aWNlLm00LmluCitAQCAtMTUsOCArMTUsOCBAQCBBZnRlcj1yYy1sb2NhbC5zZXJ2aWNlCisgQmVmb3JlPWdldHR5LnRhcmdldAorIAorIFtTZXJ2aWNlXQorLUVudmlyb25tZW50PUhPTUU9L3Jvb3QKKy1Xb3JraW5nRGlyZWN0b3J5PS9yb290CisrRW52aXJvbm1lbnQ9SE9NRT1Acm9vdGhvbWVkaXJACisrV29ya2luZ0RpcmVjdG9yeT1Acm9vdGhvbWVkaXJACisgRXhlY1N0YXJ0PS1AU1VMT0dJTkAKKyBFeGVjU3RvcFBvc3Q9LUBTWVNURU1DVExAIHBvd2Vyb2ZmCisgVHlwZT1pZGxlCitJbmRleDogZ2l0L3VuaXRzL2VtZXJnZW5jeS5zZXJ2aWNlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvdW5pdHMvZW1lcmdlbmN5LnNlcnZpY2UuaW4KKysrKyBnaXQvdW5pdHMvZW1lcmdlbmN5LnNlcnZpY2UuaW4KK0BAIC0xNCw4ICsxNCw4IEBAIENvbmZsaWN0cz1yZXNjdWUuc2VydmljZQorIEJlZm9yZT1zaHV0ZG93bi50YXJnZXQKKyAKKyBbU2VydmljZV0KKy1FbnZpcm9ubWVudD1IT01FPS9yb290CistV29ya2luZ0RpcmVjdG9yeT0vcm9vdAorK0Vudmlyb25tZW50PUhPTUU9QHJvb3Rob21lZGlyQAorK1dvcmtpbmdEaXJlY3Rvcnk9QHJvb3Rob21lZGlyQAorIEV4ZWNTdGFydFByZT0tL2Jpbi9wbHltb3V0aCAtLXdhaXQgcXVpdAorIEV4ZWNTdGFydFByZT0tL2Jpbi9lY2hvIC1lICdXZWxjb21lIHRvIGVtZXJnZW5jeSBtb2RlISBBZnRlciBsb2dnaW5nIGluLCB0eXBlICJqb3VybmFsY3RsIC14YiIgdG8gdmlld1xcbnN5c3RlbSBsb2dzLCAic3lzdGVtY3RsIHJlYm9vdCIgdG8gcmVib290LCAic3lzdGVtY3RsIGRlZmF1bHQiIG9yIF5EIHRvXFxudHJ5IGFnYWluIHRvIGJvb3QgaW50byBkZWZhdWx0IG1vZGUuJworIEV4ZWNTdGFydD0tL2Jpbi9zaCAtYyAiQFNVTE9HSU5AOyBAU1lTVEVNQ1RMQCAtLWpvYi1tb2RlPWZhaWwgLS1uby1ibG9jayBkZWZhdWx0IgorSW5kZXg6IGdpdC91bml0cy9yZXNjdWUuc2VydmljZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3VuaXRzL3Jlc2N1ZS5zZXJ2aWNlLmluCisrKysgZ2l0L3VuaXRzL3Jlc2N1ZS5zZXJ2aWNlLmluCitAQCAtMTQsOCArMTQsOCBAQCBBZnRlcj1zeXNpbml0LnRhcmdldCBwbHltb3V0aC1zdGFydC5zZXJ2CisgQmVmb3JlPXNodXRkb3duLnRhcmdldAorIAorIFtTZXJ2aWNlXQorLUVudmlyb25tZW50PUhPTUU9L3Jvb3QKKy1Xb3JraW5nRGlyZWN0b3J5PS9yb290CisrRW52aXJvbm1lbnQ9SE9NRT1Acm9vdGhvbWVkaXJACisrV29ya2luZ0RpcmVjdG9yeT1Acm9vdGhvbWVkaXJACisgRXhlY1N0YXJ0UHJlPS0vYmluL3BseW1vdXRoIHF1aXQKKyBFeGVjU3RhcnRQcmU9LS9iaW4vZWNobyAtZSAnV2VsY29tZSB0byBlbWVyZ2VuY3kgbW9kZSEgQWZ0ZXIgbG9nZ2luZyBpbiwgdHlwZSAiam91cm5hbGN0bCAteGIiIHRvIHZpZXdcXG5zeXN0ZW0gbG9ncywgInN5c3RlbWN0bCByZWJvb3QiIHRvIHJlYm9vdCwgInN5c3RlbWN0bCBkZWZhdWx0IiBvciBeRCB0b1xcbmJvb3QgaW50byBkZWZhdWx0IG1vZGUuJworIEV4ZWNTdGFydD0tL2Jpbi9zaCAtYyAiQFNVTE9HSU5AOyBAU1lTVEVNQ1RMQCAtLWpvYi1tb2RlPWZhaWwgLS1uby1ibG9jayBkZWZhdWx0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMS1zeXN0ZW1kLXVzZXItYXZvaWQtdXNpbmctc3lzdGVtLWF1dGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDExLXN5c3RlbWQtdXNlci1hdm9pZC11c2luZy1zeXN0ZW0tYXV0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTYyYmNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMS1zeXN0ZW1kLXVzZXItYXZvaWQtdXNpbmctc3lzdGVtLWF1dGgucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSA3ZTIwMmY3MTc4NWJmNWE2N2M4YTRmNmI1OGQzNTg1NjA4ZmJmZGM0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMDU6MjY6MjUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxMS8xMV0gc3lzdGVtZC11c2VyOiBhdm9pZCB1c2luZyBzeXN0ZW0tYXV0aAorCitJbiBPRSwgd2UgZG9uJ3QgcHJvdmlkZSBzeXN0ZW0tYXV0aCwgaW5zdGVhZCwgd2UgdXNlIGNvbW1vbi0qIGZpbGVzLgorU28gbW9kaWZ5IHN5c3RlbWQtdXNlciBmaWxlIHRvIHVzZSBjb21tb24tKiBmaWxlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9sb2dpbi9zeXN0ZW1kLXVzZXIgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2xvZ2luL3N5c3RlbWQtdXNlciBiL3NyYy9sb2dpbi9zeXN0ZW1kLXVzZXIKK2luZGV4IDgxMTJkNzQuLjk5NjM1YWYgMTAwNjQ0CistLS0gYS9zcmMvbG9naW4vc3lzdGVtZC11c2VyCisrKysgYi9zcmMvbG9naW4vc3lzdGVtZC11c2VyCitAQCAtMiw1ICsyLDUgQEAKKyAjCisgIyBVc2VkIGJ5IHN5c3RlbWQgLS11c2VyIGluc3RhbmNlcy4KKyAKKy1hY2NvdW50ICBpbmNsdWRlIHN5c3RlbS1hdXRoCistc2Vzc2lvbiAgaW5jbHVkZSBzeXN0ZW0tYXV0aAorK2FjY291bnQgIGluY2x1ZGUgY29tbW9uLWFjY291bnQKKytzZXNzaW9uICBpbmNsdWRlIGNvbW1vbi1zZXNzaW9uCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTItaW1wbG1lbnQtc3lzdGVtZC1zeXN2LWluc3RhbGwtZm9yLU9FLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMi1pbXBsbWVudC1zeXN0ZW1kLXN5c3YtaW5zdGFsbC1mb3ItT0UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhiNDVhOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTItaW1wbG1lbnQtc3lzdGVtZC1zeXN2LWluc3RhbGwtZm9yLU9FLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gNWY4YjlmMmQyNzZjMGRkYmNiZjU0MjM3MzNhMjNmMDQzZDY4ODAwOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDUgU2VwIDIwMTUgMDY6MzE6NDcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gaW1wbG1lbnQgc3lzdGVtZC1zeXN2LWluc3RhbGwgZm9yIE9FCisKK1VzZSB1cGRhdGUtcmMuZCBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIGFuZCBzdGF0dXMgY29tbWFuZAordG8gY2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgc3lzdiBzZXJ2aWNlCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtU3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvc3lzdGVtY3RsL3N5c3RlbWQtc3lzdi1pbnN0YWxsLlNLRUxFVE9OIHwgNiArKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitJbmRleDogZ2l0L3NyYy9zeXN0ZW1jdGwvc3lzdGVtZC1zeXN2LWluc3RhbGwuU0tFTEVUT04KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zcmMvc3lzdGVtY3RsL3N5c3RlbWQtc3lzdi1pbnN0YWxsLlNLRUxFVE9OCisrKysgZ2l0L3NyYy9zeXN0ZW1jdGwvc3lzdGVtZC1zeXN2LWluc3RhbGwuU0tFTEVUT04KK0BAIC0zMCwxNyArMzAsMTcgQEAgY2FzZSAiJDEiIGluCisgICAgIGVuYWJsZSkKKyAgICAgICAgICMgY2FsbCB0aGUgY29tbWFuZCB0byBlbmFibGUgU3lzViBpbml0IHNjcmlwdCAkTkFNRSBoZXJlCisgICAgICAgICAjIChjb25zaWRlciBvcHRpb25hbCAkUk9PVCkKKy0gICAgICAgIGVjaG8gIklNUExFTUVOVCBNRTogZW5hYmxpbmcgU3lzViBpbml0LmQgc2NyaXB0ICROQU1FIgorKyAgICAgICAgdXBkYXRlLXJjLmQgLWYgJE5BTUUgZGVmYXVsdHMKKyAgICAgICAgIDs7CisgICAgIGRpc2FibGUpCisgICAgICAgICAjIGNhbGwgdGhlIGNvbW1hbmQgdG8gZGlzYWJsZSBTeXNWIGluaXQgc2NyaXB0ICROQU1FIGhlcmUKKyAgICAgICAgICMgKGNvbnNpZGVyIG9wdGlvbmFsICRST09UKQorLSAgICAgICAgZWNobyAiSU1QTEVNRU5UIE1FOiBkaXNhYmxpbmcgU3lzViBpbml0LmQgc2NyaXB0ICROQU1FIgorKyAgICAgICAgdXBkYXRlLXJjLmQgLWYgJE5BTUUgcmVtb3ZlCisgICAgICAgICA7OworICAgICBpcy1lbmFibGVkKQorICAgICAgICAgIyBleGl0IHdpdGggMCBpZiAkTkFNRSBpcyBlbmFibGVkLCBub24temVybyBpZiBpdCBpcyBkaXNhYmxlZAorICAgICAgICAgIyAoY29uc2lkZXIgb3B0aW9uYWwgJFJPT1QpCistICAgICAgICBlY2hvICJJTVBMRU1FTlQgTUU6IGNoZWNraW5nIFN5c1YgaW5pdC5kIHNjcmlwdCAkTkFNRSIKKysgICAgICAgIC9ldGMvaW5pdC5kLyROQU1FIHN0YXR1cworICAgICAgICAgOzsKKyAgICAgKikKKyAgICAgICAgIHVzYWdlIDs7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDE0LVJldmVydC1ydWxlcy1yZW1vdmUtZmlybXdhcmUtbG9hZGluZy1ydWxlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTQtUmV2ZXJ0LXJ1bGVzLXJlbW92ZS1maXJtd2FyZS1sb2FkaW5nLXJ1bGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMmJhNTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDE0LVJldmVydC1ydWxlcy1yZW1vdmUtZmlybXdhcmUtbG9hZGluZy1ydWxlcy5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDRmMGE3MjI0ODkxNTRkYTk5ZTdmNmIzMDUxYWZkZTk4NGVlZDJmNzQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb25hdGhhbiBMaXUgPG5ldDE0N0BnbWFpbC5jb20+CitEYXRlOiBUaHUsIDE5IE1hciAyMDE1IDE1OjAxOjI5ICsxMTAwCitTdWJqZWN0OiBbUEFUQ0hdIFJldmVydCAicnVsZXM6IHJlbW92ZSBmaXJtd2FyZSBsb2FkaW5nIHJ1bGVzIgorCitUaGlzIHJldmVydHMgY29tbWl0IDcwZTdkNzU0ZGRiMzU2ZmIxYTI5NDJiMjYyZjhjZWU5NjUwZTJhMTkuCitVc2Vyc3BhY2UgZmlybXdhcmUgbG9hZGluZyBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgTGludXggPCAzLjcuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KKy0tLQorIHJ1bGVzLzUwLWZpcm13YXJlLnJ1bGVzIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHJ1bGVzLzUwLWZpcm13YXJlLnJ1bGVzCisKK2RpZmYgLS1naXQgYS9ydWxlcy81MC1maXJtd2FyZS5ydWxlcyBiL3J1bGVzLzUwLWZpcm13YXJlLnJ1bGVzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZjBhZTY4NAorLS0tIC9kZXYvbnVsbAorKysrIGIvcnVsZXMvNTAtZmlybXdhcmUucnVsZXMKK0BAIC0wLDAgKzEsMyBAQAorKyMgZG8gbm90IGVkaXQgdGhpcyBmaWxlLCBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuIG9uIHVwZGF0ZQorKworK1NVQlNZU1RFTT09ImZpcm13YXJlIiwgQUNUSU9OPT0iYWRkIiwgUlVOe2J1aWx0aW59PSJmaXJtd2FyZSIKKy0tIAorMi4zLjMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxNS1SZXZlcnQtdWRldi1yZW1vdmUtdXNlcnNwYWNlLWZpcm13YXJlLWxvYWRpbmctc3VwcG9yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxNS1SZXZlcnQtdWRldi1yZW1vdmUtdXNlcnNwYWNlLWZpcm13YXJlLWxvYWRpbmctc3VwcG9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMDhjYzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDE1LVJldmVydC11ZGV2LXJlbW92ZS11c2Vyc3BhY2UtZmlybXdhcmUtbG9hZGluZy1zdXBwb3IucGF0Y2gKQEAgLTAsMCArMSwzNjQgQEAKK0Zyb20gN2YwNzRkZWY0ZTMyMDQ1MzUzYmE0MzM2ZDcwM2UxN2I4ZGU3ZWM0ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTkgTWFyIDIwMTUgMTU6MDE6MzMgKzExMDAKK1N1YmplY3Q6IFtQQVRDSF0gUmV2ZXJ0ICJ1ZGV2OiByZW1vdmUgdXNlcnNwYWNlIGZpcm13YXJlIGxvYWRpbmcgc3VwcG9ydCIKKworVGhpcyByZXZlcnRzIGNvbW1pdCBiZTJlYTcyM2IxZDAyM2IzZDM4NWQzYjc5MWVlNDYwN2NiZmIyMGNhLgorVXNlcnNwYWNlIGZpcm13YXJlIGxvYWRpbmcgc3VwcG9ydCBpcyBuZWVkZWQgZm9yIExpbnV4IDwgMy43LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBKb25hdGhhbiBMaXUgPG5ldDE0N0BnbWFpbC5jb20+CistLS0KKyBNYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICB8ICAxMiArKysKKyBSRUFETUUgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgOSArKy0KKyBUT0RPICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgfCAgMjAgKysrKysKKyBzcmMvdWRldi91ZGV2LWJ1aWx0aW4tZmlybXdhcmUuYyB8IDE1NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBzcmMvdWRldi91ZGV2LWJ1aWx0aW4uYyAgICAgICAgICB8ICAgMyArCisgc3JjL3VkZXYvdWRldi5oICAgICAgICAgICAgICAgICAgfCAgIDYgKysKKyBzcmMvdWRldi91ZGV2ZC5jICAgICAgICAgICAgICAgICB8ICAxMyArKysrCisgOCBmaWxlcyBjaGFuZ2VkLCAyMTQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3VkZXYvdWRldi1idWlsdGluLWZpcm13YXJlLmMKKworSW5kZXg6IGdpdC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL01ha2VmaWxlLmFtCisrKysgZ2l0L01ha2VmaWxlLmFtCitAQCAtMzQ3MCw2ICszNDcwLDE4IEBAIGxpYnVkZXZfY29yZV9sYV9MSUJBREQgPSBcCisgCSQoQkxLSURfTElCUykgXAorIAkkKEtNT0RfTElCUykKKyAKKytsaWJ1ZGV2X2NvcmVfbGFfQ1BQRkxBR1MgPSBcCisrCSQoQU1fQ1BQRkxBR1MpIFwKKysJLURGSVJNV0FSRV9QQVRIPSIkKEZJUk1XQVJFX1BBVEgpIgorKworK2lmIEVOQUJMRV9GSVJNV0FSRQorK2xpYnVkZXZfY29yZV9sYV9TT1VSQ0VTICs9IFwKKysJc3JjL3VkZXYvdWRldi1idWlsdGluLWZpcm13YXJlLmMKKysKKytkaXN0X3VkZXZydWxlc19EQVRBICs9IFwKKysJcnVsZXMvNTAtZmlybXdhcmUucnVsZXMKKytlbmRpZgorKworIGlmIEhBVkVfS01PRAorIGxpYnVkZXZfY29yZV9sYV9TT1VSQ0VTICs9IFwKKyAJc3JjL3VkZXYvdWRldi1idWlsdGluLWttb2QuYworSW5kZXg6IGdpdC9SRUFETUUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9SRUFETUUKKysrKyBnaXQvUkVBRE1FCitAQCAtMzYsNyArMzYsOCBAQCBMSUNFTlNFOgorICAgICAgICAgLSBleGNlcHQgc3JjL3VkZXYvKiB3aGljaCBpcyAoY3VycmVudGx5IHN0aWxsKSBHUEx2MiwgR1BMdjIrCisgCisgUkVRVUlSRU1FTlRTOgorLSAgICAgICAgTGludXgga2VybmVsID49IDMuNworKyAgICAgICAgTGludXgga2VybmVsID49IDMuMAorKyAgICAgICAgTGludXgga2VybmVsID49IDMuMyBmb3IgbG9vcCBkZXZpY2UgcGFydGl0aW9uIHN1cHBvcnQgZmVhdHVyZXMgd2l0aCBuc3Bhd24KKyAgICAgICAgIExpbnV4IGtlcm5lbCA+PSAzLjggZm9yIFNtYWNrIHN1cHBvcnQKKyAKKyAgICAgICAgIEtlcm5lbCBDb25maWcgT3B0aW9uczoKK0BAIC01MSwxNCArNTIsMTQgQEAgUkVRVUlSRU1FTlRTOgorICAgICAgICAgICBDT05GSUdfUFJPQ19GUworICAgICAgICAgICBDT05GSUdfRkhBTkRMRSAobGlidWRldiwgbW91bnQgYW5kIGJpbmQgbW91bnQgaGFuZGxpbmcpCisgCistICAgICAgICB1ZGV2IHdpbGwgZmFpbCB0byB3b3JrIHdpdGggdGhlIGxlZ2FjeSBzeXNmcyBsYXlvdXQ6CisrICAgICAgICBVZGV2IHdpbGwgZmFpbCB0byB3b3JrIHdpdGggdGhlIGxlZ2FjeSBsYXlvdXQ6CisgICAgICAgICAgIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPW4KKyAKKyAgICAgICAgIExlZ2FjeSBob3RwbHVnIHNsb3dzIGRvd24gdGhlIHN5c3RlbSBhbmQgY29uZnVzZXMgdWRldjoKKyAgICAgICAgICAgQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iIgorIAorLSAgICAgICAgVXNlcnNwYWNlIGZpcm13YXJlIGxvYWRpbmcgaXMgbm90IHN1cHBvcnRlZCBhbmQgc2hvdWxkCistICAgICAgICBiZSBkaXNhYmxlZCBpbiB0aGUga2VybmVsOgorKyAgICAgICAgVXNlcnNwYWNlIGZpcm13YXJlIGxvYWRpbmcgaXMgZGVwcmVjYXRlZCwgd2lsbCBnbyBhd2F5LCBhbmQKKysgICAgICAgIHNvbWV0aW1lcyBjYXVzZXMgcHJvYmxlbXM6CisgICAgICAgICAgIENPTkZJR19GV19MT0FERVJfVVNFUl9IRUxQRVI9bgorIAorICAgICAgICAgU29tZSB1ZGV2IHJ1bGVzIGFuZCB2aXJ0dWFsaXphdGlvbiBkZXRlY3Rpb24gcmVsaWVzIG9uIGl0OgorSW5kZXg6IGdpdC9UT0RPCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvVE9ETworKysrIGdpdC9UT0RPCitAQCAtNzU0LDYgKzc1NCw3IEBAIEZlYXR1cmVzOgorICogRXhlY09uRmFpbHVyZT0vdXNyL2Jpbi9mb28KKyAKKyAqIHVkZXY6CisrICAtIHJlbW92ZSBzcmMvdWRldi91ZGV2LWJ1aWx0aW4tZmlybXdhcmUuYyAoQ09ORklHX0ZXX0xPQURFUl9VU0VSX0hFTFBFUj1uKQorICAgLSBtb3ZlIHRvIExHUEwKKyAgIC0ga2lsbCBzY3NpX2lkCisgICAtIGFkZCB0cmlnZ2VyIC0tc3Vic3lzdGVtLW1hdGNoPXVzYi91c2JfZGV2aWNlIGRldmljZQorSW5kZXg6IGdpdC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9jb25maWd1cmUuYWMKKysrKyBnaXQvY29uZmlndXJlLmFjCitAQCAtMTI2OCw2ICsxMjY4LDI2IEBAIGZpCisgQU1fQ09ORElUSU9OQUwoSEFWRV9NWUhPU1ROQU1FLCBbdGVzdCAiJGhhdmVfbXlob3N0bmFtZSIgPSAieWVzIl0pCisgCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKytBQ19BUkdfV0lUSChmaXJtd2FyZS1wYXRoLAorKyAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWZpcm13YXJlLXBhdGg9RElSW1tbOkRJUlsuLi5dXV1dXSwKKysgICAgICAgICAgW0Zpcm13YXJlIHNlYXJjaCBwYXRoIChkZWZhdWx0PSIiKV0pLAorKyAgICAgICBbXSwgW3dpdGhfZmlybXdhcmVfcGF0aD0iIl0pCisrT0xEX0lGUz0kSUZTCisrSUZTPToKKytmb3IgaSBpbiAkd2l0aF9maXJtd2FyZV9wYXRoOyBkbworKyAgICAgICBpZiB0ZXN0ICJ4JHtGSVJNV0FSRV9QQVRIfSIgPSAieCI7IHRoZW4KKysgICAgICAgICAgICAgIEZJUk1XQVJFX1BBVEg9IlxcXCIke2l9L1xcXCIiCisrICAgICAgIGVsc2UKKysgICAgICAgICAgICAgIEZJUk1XQVJFX1BBVEg9IiR7RklSTVdBUkVfUEFUSH0sIFxcXCIke2l9L1xcXCIiCisrICAgICAgIGZpCisrZG9uZQorK0lGUz0kT0xEX0lGUworK0FDX1NVQlNUKEZJUk1XQVJFX1BBVEgpCisrQVNfSUYoW3Rlc3QgIngke0ZJUk1XQVJFX1BBVEh9IiAhPSAieCJdLCBbIEFDX0RFRklORShIQVZFX0ZJUk1XQVJFLCAxLCBbRGVmaW5lIGlmIEZJUk1XQVJFIGlzIGF2YWlsYWJsZV0pIF0pCisrQU1fQ09ORElUSU9OQUwoRU5BQkxFX0ZJUk1XQVJFLCBbdGVzdCAieCR7RklSTVdBUkVfUEFUSH0iICE9ICJ4Il0pCisrCisrCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBQ19BUkdfRU5BQkxFKGh3ZGIsIFtBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWh3ZGJdLCBbZGlzYWJsZSBoYXJkd2FyZSBkYXRhYmFzZSBzdXBwb3J0XSldLAorICAgICAgICBlbmFibGVfaHdkYj0kZW5hYmxldmFsLCBlbmFibGVfaHdkYj15ZXMpCisgQU1fQ09ORElUSU9OQUwoRU5BQkxFX0hXREIsIFt0ZXN0IHgkZW5hYmxlX2h3ZGIgPSB4eWVzXSkKK0BAIC0xNTc0LDYgKzE1OTQsNyBAQCBBQ19NU0dfUkVTVUxUKFsKKyAgICAgICAgIFN5c1YgcmM/LmQgZGlyZWN0b3JpZXM6ICAke1NZU1RFTV9TWVNWUkNORF9QQVRIfQorICAgICAgICAgQnVpbGQgUHl0aG9uOiAgICAgICAgICAgICR7UFlUSE9OfQorICAgICAgICAgc3BoaW54IGJpbmFyeTogICAgICAgICAgICR7U1BISU5YX0JVSUxEfQorKyAgICAgICAgZmlybXdhcmUgcGF0aDogICAgICAgICAgICR7RklSTVdBUkVfUEFUSH0KKyAgICAgICAgIFBBTSBtb2R1bGVzIGRpcjogICAgICAgICAke3dpdGhfcGFtbGliZGlyfQorICAgICAgICAgUEFNIGNvbmZpZ3VyYXRpb24gZGlyOiAgICR7d2l0aF9wYW1jb25mZGlyfQorICAgICAgICAgRC1CdXMgcG9saWN5IGRpcjogICAgICAgICR7d2l0aF9kYnVzcG9saWN5ZGlyfQorSW5kZXg6IGdpdC9zcmMvdWRldi91ZGV2LWJ1aWx0aW4tZmlybXdhcmUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGdpdC9zcmMvdWRldi91ZGV2LWJ1aWx0aW4tZmlybXdhcmUuYworQEAgLTAsMCArMSwxNTQgQEAKKysvKgorKyAqIGZpcm13YXJlIC0gS2VybmVsIGZpcm13YXJlIGxvYWRlcgorKyAqCisrICogQ29weXJpZ2h0IChDKSAyMDA5IFBpdGVyIFB1bmsgPHBpdGVycHVua0BzbGFja3dhcmUuY29tPgorKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDExIEtheSBTaWV2ZXJzIDxrYXlAdnJmeS5vcmc+CisrICoKKysgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKysgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKysgKiBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAqCisrICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlsczoqCisrICovCisrCisrI2luY2x1ZGUgPHVuaXN0ZC5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGdldG9wdC5oPgorKyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxzdGRib29sLmg+CisrI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrCisrI2luY2x1ZGUgInVkZXYuaCIKKysKKytzdGF0aWMgYm9vbCBzZXRfbG9hZGluZyhzdHJ1Y3QgdWRldiAqdWRldiwgY2hhciAqbG9hZHBhdGgsIGNvbnN0IGNoYXIgKnN0YXRlKSB7CisrICAgICAgICBGSUxFICpsZGZpbGU7CisrCisrICAgICAgICBsZGZpbGUgPSBmb3Blbihsb2FkcGF0aCwgIndlIik7CisrICAgICAgICBpZiAobGRmaWxlID09IE5VTEwpIHsKKysgICAgICAgICAgICAgICAgbG9nX2Vycm9yKCJlcnJvcjogY2FuIG5vdCBvcGVuICclcyciLCBsb2FkcGF0aCk7CisrICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH07CisrICAgICAgICBmcHJpbnRmKGxkZmlsZSwgIiVzXG4iLCBzdGF0ZSk7CisrICAgICAgICBmY2xvc2UobGRmaWxlKTsKKysgICAgICAgIHJldHVybiB0cnVlOworK30KKysKKytzdGF0aWMgYm9vbCBjb3B5X2Zpcm13YXJlKHN0cnVjdCB1ZGV2ICp1ZGV2LCBjb25zdCBjaGFyICpzb3VyY2UsIGNvbnN0IGNoYXIgKnRhcmdldCwgc2l6ZV90IHNpemUpIHsKKysgICAgICAgIGNoYXIgKmJ1ZjsKKysgICAgICAgIEZJTEUgKmZzb3VyY2UgPSBOVUxMLCAqZnRhcmdldCA9IE5VTEw7CisrICAgICAgICBib29sIHJldCA9IGZhbHNlOworKworKyAgICAgICAgYnVmID0gbWFsbG9jKHNpemUpOworKyAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CisrICAgICAgICAgICAgICAgIGxvZ19lcnJvcigiTm8gbWVtb3J5IGF2YWlsYWJsZSB0byBsb2FkIGZpcm13YXJlIGZpbGUiKTsKKysgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKworKyAgICAgICAgbG9nX2RlYnVnKCJ3cml0aW5nICclcycgKCV6aSkgdG8gJyVzJyIsIHNvdXJjZSwgc2l6ZSwgdGFyZ2V0KTsKKysKKysgICAgICAgIGZzb3VyY2UgPSBmb3Blbihzb3VyY2UsICJyZSIpOworKyAgICAgICAgaWYgKGZzb3VyY2UgPT0gTlVMTCkKKysgICAgICAgICAgICAgICAgZ290byBleGl0OworKyAgICAgICAgZnRhcmdldCA9IGZvcGVuKHRhcmdldCwgIndlIik7CisrICAgICAgICBpZiAoZnRhcmdldCA9PSBOVUxMKQorKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisrICAgICAgICBpZiAoZnJlYWQoYnVmLCBzaXplLCAxLCBmc291cmNlKSAhPSAxKQorKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisrICAgICAgICBpZiAoZndyaXRlKGJ1Ziwgc2l6ZSwgMSwgZnRhcmdldCkgPT0gMSkKKysgICAgICAgICAgICAgICAgcmV0ID0gdHJ1ZTsKKytleGl0OgorKyAgICAgICAgaWYgKGZ0YXJnZXQgIT0gTlVMTCkKKysgICAgICAgICAgICAgICAgZmNsb3NlKGZ0YXJnZXQpOworKyAgICAgICAgaWYgKGZzb3VyY2UgIT0gTlVMTCkKKysgICAgICAgICAgICAgICAgZmNsb3NlKGZzb3VyY2UpOworKyAgICAgICAgZnJlZShidWYpOworKyAgICAgICAgcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIGludCBidWlsdGluX2Zpcm13YXJlKHN0cnVjdCB1ZGV2X2RldmljZSAqZGV2LCBpbnQgYXJnYywgY2hhciAqYXJndltdLCBib29sIHRlc3QpIHsKKysgICAgICAgIHN0cnVjdCB1ZGV2ICp1ZGV2ID0gdWRldl9kZXZpY2VfZ2V0X3VkZXYoZGV2KTsKKysgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyICpzZWFyY2hwYXRoW10gPSB7IEZJUk1XQVJFX1BBVEggfTsKKysgICAgICAgIGNoYXIgbG9hZHBhdGhbVVRJTF9QQVRIX1NJWkVdOworKyAgICAgICAgY2hhciBkYXRhcGF0aFtVVElMX1BBVEhfU0laRV07CisrICAgICAgICBjaGFyIGZ3cGF0aFtVVElMX1BBVEhfU0laRV07CisrICAgICAgICBjb25zdCBjaGFyICpmaXJtd2FyZTsKKysgICAgICAgIEZJTEUgKmZ3ZmlsZSA9IE5VTEw7CisrICAgICAgICBzdHJ1Y3QgdXRzbmFtZSBrZXJuZWw7CisrICAgICAgICBzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworKyAgICAgICAgdW5zaWduZWQgaW50IGk7CisrICAgICAgICBpbnQgcmMgPSBFWElUX1NVQ0NFU1M7CisrCisrICAgICAgICBmaXJtd2FyZSA9IHVkZXZfZGV2aWNlX2dldF9wcm9wZXJ0eV92YWx1ZShkZXYsICJGSVJNV0FSRSIpOworKyAgICAgICAgaWYgKGZpcm13YXJlID09IE5VTEwpIHsKKysgICAgICAgICAgICAgICAgbG9nX2Vycm9yKCJmaXJtd2FyZSBwYXJhbWV0ZXIgbWlzc2luZyIpOworKyAgICAgICAgICAgICAgICByYyA9IEVYSVRfRkFJTFVSRTsKKysgICAgICAgICAgICAgICAgZ290byBleGl0OworKyAgICAgICAgfQorKworKyAgICAgICAgLyogbG9va3VwIGZpcm13YXJlIGZpbGUgKi8KKysgICAgICAgIHVuYW1lKCZrZXJuZWwpOworKyAgICAgICAgZm9yIChpID0gMDsgaSA8IEVMRU1FTlRTT0Yoc2VhcmNocGF0aCk7IGkrKykgeworKyAgICAgICAgICAgICAgICBzdHJzY3B5bChmd3BhdGgsIHNpemVvZihmd3BhdGgpLCBzZWFyY2hwYXRoW2ldLCBrZXJuZWwucmVsZWFzZSwgIi8iLCBmaXJtd2FyZSwgTlVMTCk7CisrICAgICAgICAgICAgICAgIGZ3ZmlsZSA9IGZvcGVuKGZ3cGF0aCwgInJlIik7CisrICAgICAgICAgICAgICAgIGlmIChmd2ZpbGUgIT0gTlVMTCkKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICAgICAgc3Ryc2NweWwoZndwYXRoLCBzaXplb2YoZndwYXRoKSwgc2VhcmNocGF0aFtpXSwgZmlybXdhcmUsIE5VTEwpOworKyAgICAgICAgICAgICAgICBmd2ZpbGUgPSBmb3Blbihmd3BhdGgsICJyZSIpOworKyAgICAgICAgICAgICAgICBpZiAoZndmaWxlICE9IE5VTEwpCisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrCisrICAgICAgICBzdHJzY3B5bChsb2FkcGF0aCwgc2l6ZW9mKGxvYWRwYXRoKSwgdWRldl9kZXZpY2VfZ2V0X3N5c3BhdGgoZGV2KSwgIi9sb2FkaW5nIiwgTlVMTCk7CisrCisrICAgICAgICBpZiAoZndmaWxlID09IE5VTEwpIHsKKysgICAgICAgICAgICAgICAgbG9nX2RlYnVnKCJkaWQgbm90IGZpbmQgZmlybXdhcmUgZmlsZSAnJXMnIiwgZmlybXdhcmUpOworKyAgICAgICAgICAgICAgICByYyA9IEVYSVRfRkFJTFVSRTsKKysgICAgICAgICAgICAgICAgLyoKKysgICAgICAgICAgICAgICAgICogRG8gbm90IGNhbmNlbCB0aGUgcmVxdWVzdCBpbiB0aGUgaW5pdHJkLCB0aGUgcmVhbCByb290IG1pZ2h0IGhhdmUKKysgICAgICAgICAgICAgICAgICogdGhlIGZpcm13YXJlIGZpbGUgYW5kIHRoZSAnY29sZHBsdWcnIHJ1biBpbiB0aGUgcmVhbCByb290IHdpbGwgZmluZAorKyAgICAgICAgICAgICAgICAgKiB0aGlzIHBlbmRpbmcgcmVxdWVzdCBhbmQgZnVsZmlsbCBvciBjYW5jZWwgaXQuCisrICAgICAgICAgICAgICAgICAqICovCisrICAgICAgICAgICAgICAgIGlmICghaW5faW5pdHJkKCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2xvYWRpbmcodWRldiwgbG9hZHBhdGgsICItMSIpOworKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoc3RhdChmd3BhdGgsICZzdGF0YnVmKSA8IDAgfHwgc3RhdGJ1Zi5zdF9zaXplID09IDApIHsKKysgICAgICAgICAgICAgICAgaWYgKCFpbl9pbml0cmQoKSkKKysgICAgICAgICAgICAgICAgICAgICAgICBzZXRfbG9hZGluZyh1ZGV2LCBsb2FkcGF0aCwgIi0xIik7CisrICAgICAgICAgICAgICAgIHJjID0gRVhJVF9GQUlMVVJFOworKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoIXNldF9sb2FkaW5nKHVkZXYsIGxvYWRwYXRoLCAiMSIpKQorKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisrCisrICAgICAgICBzdHJzY3B5bChkYXRhcGF0aCwgc2l6ZW9mKGRhdGFwYXRoKSwgdWRldl9kZXZpY2VfZ2V0X3N5c3BhdGgoZGV2KSwgIi9kYXRhIiwgTlVMTCk7CisrICAgICAgICBpZiAoIWNvcHlfZmlybXdhcmUodWRldiwgZndwYXRoLCBkYXRhcGF0aCwgc3RhdGJ1Zi5zdF9zaXplKSkgeworKyAgICAgICAgICAgICAgICBsb2dfZXJyb3IoImVycm9yIHNlbmRpbmcgZmlybXdhcmUgJyVzJyB0byBkZXZpY2UiLCBmaXJtd2FyZSk7CisrICAgICAgICAgICAgICAgIHNldF9sb2FkaW5nKHVkZXYsIGxvYWRwYXRoLCAiLTEiKTsKKysgICAgICAgICAgICAgICAgcmMgPSBFWElUX0ZBSUxVUkU7CisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysgICAgICAgIH07CisrCisrICAgICAgICBzZXRfbG9hZGluZyh1ZGV2LCBsb2FkcGF0aCwgIjAiKTsKKytleGl0OgorKyAgICAgICAgaWYgKGZ3ZmlsZSkKKysgICAgICAgICAgICAgICAgZmNsb3NlKGZ3ZmlsZSk7CisrICAgICAgICByZXR1cm4gcmM7CisrfQorKworK2NvbnN0IHN0cnVjdCB1ZGV2X2J1aWx0aW4gdWRldl9idWlsdGluX2Zpcm13YXJlID0geworKyAgICAgICAgLm5hbWUgPSAiZmlybXdhcmUiLAorKyAgICAgICAgLmNtZCA9IGJ1aWx0aW5fZmlybXdhcmUsCisrICAgICAgICAuaGVscCA9ICJrZXJuZWwgZmlybXdhcmUgbG9hZGVyIiwKKysgICAgICAgIC5ydW5fb25jZSA9IHRydWUsCisrfTsKK0luZGV4OiBnaXQvc3JjL3VkZXYvdWRldi1idWlsdGluLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zcmMvdWRldi91ZGV2LWJ1aWx0aW4uYworKysrIGdpdC9zcmMvdWRldi91ZGV2LWJ1aWx0aW4uYworQEAgLTMwLDYgKzMwLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB1ZGV2X2J1aWx0aW4gKmJ1aWx0aQorICAgICAgICAgW1VERVZfQlVJTFRJTl9CTEtJRF0gPSAmdWRldl9idWlsdGluX2Jsa2lkLAorICNlbmRpZgorICAgICAgICAgW1VERVZfQlVJTFRJTl9CVFJGU10gPSAmdWRldl9idWlsdGluX2J0cmZzLAorKyNpZmRlZiBIQVZFX0ZJUk1XQVJFCisrICAgICAgICBbVURFVl9CVUlMVElOX0ZJUk1XQVJFXSA9ICZ1ZGV2X2J1aWx0aW5fZmlybXdhcmUsCisrI2VuZGlmCisgICAgICAgICBbVURFVl9CVUlMVElOX0hXREJdID0gJnVkZXZfYnVpbHRpbl9od2RiLAorICAgICAgICAgW1VERVZfQlVJTFRJTl9JTlBVVF9JRF0gPSAmdWRldl9idWlsdGluX2lucHV0X2lkLAorICAgICAgICAgW1VERVZfQlVJTFRJTl9LRVlCT0FSRF0gPSAmdWRldl9idWlsdGluX2tleWJvYXJkLAorSW5kZXg6IGdpdC9zcmMvdWRldi91ZGV2LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zcmMvdWRldi91ZGV2LmgKKysrKyBnaXQvc3JjL3VkZXYvdWRldi5oCitAQCAtMTQ2LDYgKzE0Niw5IEBAIGVudW0gdWRldl9idWlsdGluX2NtZCB7CisgICAgICAgICBVREVWX0JVSUxUSU5fQkxLSUQsCisgI2VuZGlmCisgICAgICAgICBVREVWX0JVSUxUSU5fQlRSRlMsCisrI2lmZGVmIEhBVkVfRklSTVdBUkUKKysgICAgICAgIFVERVZfQlVJTFRJTl9GSVJNV0FSRSwKKysjZW5kaWYKKyAgICAgICAgIFVERVZfQlVJTFRJTl9IV0RCLAorICAgICAgICAgVURFVl9CVUlMVElOX0lOUFVUX0lELAorICAgICAgICAgVURFVl9CVUlMVElOX0tFWUJPQVJELAorQEAgLTE3NCw2ICsxNzcsOSBAQCBzdHJ1Y3QgdWRldl9idWlsdGluIHsKKyBleHRlcm4gY29uc3Qgc3RydWN0IHVkZXZfYnVpbHRpbiB1ZGV2X2J1aWx0aW5fYmxraWQ7CisgI2VuZGlmCisgZXh0ZXJuIGNvbnN0IHN0cnVjdCB1ZGV2X2J1aWx0aW4gdWRldl9idWlsdGluX2J0cmZzOworKyNpZmRlZiBIQVZFX0ZJUk1XQVJFCisrZXh0ZXJuIGNvbnN0IHN0cnVjdCB1ZGV2X2J1aWx0aW4gdWRldl9idWlsdGluX2Zpcm13YXJlOworKyNlbmRpZgorIGV4dGVybiBjb25zdCBzdHJ1Y3QgdWRldl9idWlsdGluIHVkZXZfYnVpbHRpbl9od2RiOworIGV4dGVybiBjb25zdCBzdHJ1Y3QgdWRldl9idWlsdGluIHVkZXZfYnVpbHRpbl9pbnB1dF9pZDsKKyBleHRlcm4gY29uc3Qgc3RydWN0IHVkZXZfYnVpbHRpbiB1ZGV2X2J1aWx0aW5fa2V5Ym9hcmQ7CitJbmRleDogZ2l0L3NyYy91ZGV2L3VkZXZkLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zcmMvdWRldi91ZGV2ZC5jCisrKysgZ2l0L3NyYy91ZGV2L3VkZXZkLmMKK0BAIC0xMTYsNiArMTE2LDkgQEAgc3RydWN0IGV2ZW50IHsKKyAgICAgICAgIGJvb2wgaXNfYmxvY2s7CisgICAgICAgICBzZF9ldmVudF9zb3VyY2UgKnRpbWVvdXRfd2FybmluZzsKKyAgICAgICAgIHNkX2V2ZW50X3NvdXJjZSAqdGltZW91dDsKKysjaWZkZWYgSEFWRV9GSVJNV0FSRQorKyAgICAgICAgYm9vbCBub2RlbGF5OworKyNlbmRpZgorIH07CisgCisgc3RhdGljIGlubGluZSBzdHJ1Y3QgZXZlbnQgKm5vZGVfdG9fZXZlbnQoc3RydWN0IHVkZXZfbGlzdF9ub2RlICpub2RlKSB7CitAQCAtNjA3LDYgKzYxMCwxMCBAQCBzdGF0aWMgaW50IGV2ZW50X3F1ZXVlX2luc2VydChNYW5hZ2VyICptCisgICAgICAgICBldmVudC0+ZGV2bnVtID0gdWRldl9kZXZpY2VfZ2V0X2Rldm51bShkZXYpOworICAgICAgICAgZXZlbnQtPmlzX2Jsb2NrID0gc3RyZXEoImJsb2NrIiwgdWRldl9kZXZpY2VfZ2V0X3N1YnN5c3RlbShkZXYpKTsKKyAgICAgICAgIGV2ZW50LT5pZmluZGV4ID0gdWRldl9kZXZpY2VfZ2V0X2lmaW5kZXgoZGV2KTsKKysjaWZkZWYgSEFWRV9GSVJNV0FSRQorKyAgICAgICAgaWYgKHN0cmVxKHVkZXZfZGV2aWNlX2dldF9zdWJzeXN0ZW0oZGV2KSwgImZpcm13YXJlIikpCisrICAgICAgICAgICAgICAgIGV2ZW50LT5ub2RlbGF5ID0gdHJ1ZTsKKysjZW5kaWYKKyAKKyAgICAgICAgIGxvZ19kZWJ1Zygic2VxICVsbHUgcXVldWVkLCAnJXMnICclcyciLCB1ZGV2X2RldmljZV9nZXRfc2VxbnVtKGRldiksCisgICAgICAgICAgICAgIHVkZXZfZGV2aWNlX2dldF9hY3Rpb24oZGV2KSwgdWRldl9kZXZpY2VfZ2V0X3N1YnN5c3RlbShkZXYpKTsKK0BAIC02OTIsNiArNjk5LDEyIEBAIHN0YXRpYyBib29sIGlzX2RldnBhdGhfYnVzeShNYW5hZ2VyICptYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgfQorIAorKyNpZmRlZiBIQVZFX0ZJUk1XQVJFCisrICAgICAgICAgICAgICAgIC8qIGFsbG93IHRvIGJ5cGFzcyB0aGUgZGVwZW5kZW5jeSB0cmFja2luZyAqLworKyAgICAgICAgICAgICAgICBpZiAoZXZlbnQtPm5vZGVsYXkpCisrICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisrI2VuZGlmCisrCisgICAgICAgICAgICAgICAgIC8qIHBhcmVudCBkZXZpY2UgZXZlbnQgZm91bmQgKi8KKyAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LT5kZXZwYXRoW2NvbW1vbl0gPT0gJy8nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQtPmRlbGF5aW5nX3NlcW51bSA9IGxvb3BfZXZlbnQtPnNlcW51bTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL2luaXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNTJiZTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC9pbml0CkBAIC0wLDAgKzEsMTA0IEBACisjIS9iaW4vc2gKKworIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgdWRldgorIyBSZXF1aXJlZC1TdGFydDogICAgbW91bnR2aXJ0ZnMKKyMgUmVxdWlyZWQtU3RvcDoKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOgorIyBTaG9ydC1EZXNjcmlwdGlvbjogU3RhcnQgdWRldmQsIHBvcHVsYXRlIC9kZXYgYW5kIGxvYWQgZHJpdmVycy4KKyMjIyBFTkQgSU5JVCBJTkZPCisKKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK2V4cG9ydCBUWj0vZXRjL2xvY2FsdGltZQorCitbIC1kIC9zeXMvY2xhc3MgXSB8fCBleGl0IDEKK1sgLXIgL3Byb2MvbW91bnRzIF0gfHwgZXhpdCAxCitbIC14IEBVREVWREAgXSB8fCBleGl0IDEKK1sgLWYgL2V0Yy9kZWZhdWx0L3VkZXYtY2FjaGUgXSAmJiAuIC9ldGMvZGVmYXVsdC91ZGV2LWNhY2hlCitbIC1mIC9ldGMvdWRldi91ZGV2LmNvbmYgXSAmJiAuIC9ldGMvdWRldi91ZGV2LmNvbmYKKworcmVhZGZpbGUgKCkgeworICAgZmlsZW5hbWU9JDEKKyAgIFJFQUREQVRBPSIiCisgICBpZiBbIC1yICRmaWxlbmFtZSBdOyB0aGVuCisgICAgICAgd2hpbGUgcmVhZCBsaW5lOyBkbworICAgICAgICAgICBSRUFEREFUQT0iJFJFQUREQVRBJGxpbmUiCisgICAgICAgZG9uZSA8ICRmaWxlbmFtZQorICAgZmkKK30KKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgIGV4cG9ydCBBQ1RJT049YWRkCisgICAgIyBwcm9wYWdhdGUgL2RldiBmcm9tIC9zeXMKKyAgICBlY2hvICJTdGFydGluZyB1ZGV2IgorCisgICAgIyBtb3VudCB0aGUgZGV2dG1wZnMgb24gL2RldiwgaWYgbm90IGFscmVhZHkgZG9uZQorICAgIExBTkc9QyBhd2sgJyQyID09ICIvZGV2IiAmJiAoJDMgPT0gImRldnRtcGZzIikgeyBleGl0IDEgfScgL3Byb2MvbW91bnRzICYmIHsKKyAgICAgICAgICAgIG1vdW50IC1uIC1vIG1vZGU9MDc1NSAtdCBkZXZ0bXBmcyBub25lICIvZGV2IgorICAgIH0KKyAgICBbIC1lIC9kZXYvcHRzIF0gfHwgbWtkaXIgLW0gMDc1NSAvZGV2L3B0cworICAgIFsgLWUgL2Rldi9zaG0gXSB8fCBta2RpciAtbSAxNzc3IC9kZXYvc2htCisgICAgbW91bnQgLWEgLXQgdG1wZnMgMj4vZGV2L251bGwKKworICAgICMgY2FjaGUgaGFuZGxpbmcKKyAgICBpZiBbICIkREVWQ0FDSEUiICE9ICIiIF07IHRoZW4KKyAgICAgICAgICAgIHJlYWRmaWxlIC9wcm9jL3ZlcnNpb24KKyAgICAgICAgICAgIFZFUlNJT049IiRSRUFEREFUQSIKKyAgICAgICAgICAgIHJlYWRmaWxlIC9wcm9jL2NtZGxpbmUKKyAgICAgICAgICAgIENNRExJTkU9IiRSRUFEREFUQSIKKyAgICAgICAgICAgIHJlYWRmaWxlIC9wcm9jL2RldmljZXMKKyAgICAgICAgICAgIERFVklDRVM9IiRSRUFEREFUQSIKKyAgICAgICAgICAgIHJlYWRmaWxlIC9wcm9jL2F0YWdzCisgICAgICAgICAgICBBVEFHUz0iJFJFQUREQVRBIgorCisgICAgICAgICAgICBpZiBbIC1lICRERVZDQUNIRSBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIHJlYWRmaWxlIC9ldGMvdWRldi9jYWNoZS5kYXRhCisgICAgICAgICAgICAgICAgICAgIGlmIFsgIiRSRUFEREFUQSIgPSAiJFZFUlNJT04kQ01ETElORSRERVZJQ0VTJEFUQUdTIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNkIC87IHRhciB4ZiAkREVWQ0FDSEUgPiAvZGV2L251bGwgMj4mMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RfZmlyc3RfYm9vdD0xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyAiJFZFUkJPU0UiICE9ICJubyIgXSAmJiBlY2hvICJ1ZGV2OiB1c2luZyBjYWNoZSBmaWxlICRERVZDQUNIRSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIC1lIC9kZXYvc2htL3VkZXYuY2FjaGUgXSAmJiBybSAtZiAvZGV2L3NobS91ZGV2LmNhY2hlCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIkVkVSU0lPTiRDTURMSU5FJERFVklDRVMkQVRBR1MiID4gL2Rldi9zaG0vdWRldi5jYWNoZQorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBlY2hvICIkVkVSU0lPTiRDTURMSU5FJERFVklDRVMkQVRBR1MiID4gL2Rldi9zaG0vdWRldi5jYWNoZQorICAgICAgICAgICAgZmkKKyAgICBmaQorCisgICAgIyBtYWtlX2V4dHJhX25vZGVzCisgICAga2lsbHByb2Mgc3lzdGVtZC11ZGV2ZCA+ICIvZGV2L251bGwiIDI+JjEKKworICAgICMgdHJpZ2dlciB0aGUgc29ydGVkIGV2ZW50cworICAgIGVjaG8gLWUgJ1wwMDBcMDAwXDAwMFwwMDAnID4gL3Byb2Mvc3lzL2tlcm5lbC9ob3RwbHVnCisgICAgQFVERVZEQCAtZAorCisgICAgdWRldmFkbSBjb250cm9sIC0tZW52PVNUQVJUVVA9MQorICAgIGlmIFsgIiRub3RfZmlyc3RfYm9vdCIgIT0gIiIgXTt0aGVuCisgICAgICAgICAgICB1ZGV2YWRtIHRyaWdnZXIgLS1hY3Rpb249YWRkIC0tc3Vic3lzdGVtLW5vbWF0Y2g9dHR5IC0tc3Vic3lzdGVtLW5vbWF0Y2g9bWVtIC0tc3Vic3lzdGVtLW5vbWF0Y2g9dmMgLS1zdWJzeXN0ZW0tbm9tYXRjaD12dGNvbnNvbGUgLS1zdWJzeXN0ZW0tbm9tYXRjaD1taXNjIC0tc3Vic3lzdGVtLW5vbWF0Y2g9ZGNvbiAtLXN1YnN5c3RlbS1ub21hdGNoPXBjaV9idXMgIC0tc3Vic3lzdGVtLW5vbWF0Y2g9Z3JhcGhpY3MJIC0tc3Vic3lzdGVtLW5vbWF0Y2g9YmFja2xpZ2h0IC0tc3Vic3lzdGVtLW5vbWF0Y2g9dmlkZW80bGludXgJLS1zdWJzeXN0ZW0tbm9tYXRjaD1wbGF0Zm9ybQorICAgICAgICAgICAgKHVkZXZhZG0gc2V0dGxlIC0tdGltZW91dD0zOyB1ZGV2YWRtIGNvbnRyb2wgLS1lbnY9U1RBUlRVUD0pJgorICAgIGVsc2UKKyAgICAgICAgICAgIHVkZXZhZG0gdHJpZ2dlciAtLWFjdGlvbj1hZGQKKyAgICAgICAgICAgIHVkZXZhZG0gc2V0dGxlCisgICAgZmkKKyAgICA7OworICBzdG9wKQorICAgIGVjaG8gIlN0b3BwaW5nIHVkZXZkIgorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLW5hbWUgc3lzdGVtZC11ZGV2ZCAtLXF1aWV0CisgICAgOzsKKyAgcmVzdGFydCkKKyAgICAkMCBzdG9wCisgICAgc2xlZXAgMQorICAgICQwIHN0YXJ0CisgICAgOzsKKyAgc3RhdHVzKQorICAgIHN0YXR1cyBzeXN0ZW1kLXVkZXZkCisgICAgOzsKKyAgKikKKyAgICBlY2hvICJVc2FnZTogJDAge3N0YXJ0fHN0b3B8c3RhdHVzfHJlc3RhcnR9IgorICAgIGV4aXQgMQorZXNhYworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC9xZW11YWxsX2lvX2xhdGVuY3ktY29yZS1kZXZpY2UuYy1DaGFuZ2UtdGhlLWRlZmF1bHQtZGV2aWNlLXRpbWVvdXQtdG8tMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL3FlbXVhbGxfaW9fbGF0ZW5jeS1jb3JlLWRldmljZS5jLUNoYW5nZS10aGUtZGVmYXVsdC1kZXZpY2UtdGltZW91dC10by0yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZTE3MTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC9xZW11YWxsX2lvX2xhdGVuY3ktY29yZS1kZXZpY2UuYy1DaGFuZ2UtdGhlLWRlZmF1bHQtZGV2aWNlLXRpbWVvdXQtdG8tMi5wYXRjaApAQCAtMCwwICsxLDMxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW1NwZWNpZmljIGNhc2UgUUVNVS9BQl0KKworRnJvbSA3YjhjNGUwYTY3YTc5YTc1ZTFiZDc3ZGYzYTQ1MmE1NDk3MzIyMTA4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuPUMzPUFEYmFsPTIwTGltPUMzPUIzbj89IDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgorRGF0ZTogVGh1LCAyNyBBdWcgMjAxNSAxNzo1ODoyNiAtMDUwMAorU3ViamVjdDogW1BBVENIXSBjb3JlL2RldmljZS5jOiBDaGFuZ2UgdGhlIGRlZmF1bHQgZGV2aWNlIHRpbWVvdXQgdG8gMjQwIHNlYy4KK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworU2lnbmVkLW9mZi1ieTogQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBzcmMvY29yZS9kZXZpY2UuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2RldmljZS5jIGIvc3JjL2NvcmUvZGV2aWNlLmMKK2luZGV4IGU3ZWZjZjAuLjRlZDhmMDggMTAwNjQ0CistLS0gYS9zcmMvY29yZS9kZXZpY2UuYworKysrIGIvc3JjL2NvcmUvZGV2aWNlLmMKK0BAIC0xMTAsNyArMTEwLDcgQEAgc3RhdGljIHZvaWQgZGV2aWNlX2luaXQoVW5pdCAqdSkgeworICAgICAgICAgICogaW5kZWZpbml0ZWx5IGZvciBwbHVnZ2VkIGluIGRldmljZXMsIHNvbWV0aGluZyB3aGljaCBjYW5ub3QKKyAgICAgICAgICAqIGhhcHBlbiBmb3IgdGhlIG90aGVyIHVuaXRzIHNpbmNlIHRoZWlyIG9wZXJhdGlvbnMgdGltZSBvdXQKKyAgICAgICAgICAqIGFueXdheS4gKi8KKy0gICAgICAgIHUtPmpvYl90aW1lb3V0ID0gdS0+bWFuYWdlci0+ZGVmYXVsdF90aW1lb3V0X3N0YXJ0X3VzZWM7CisrICAgICAgICB1LT5qb2JfdGltZW91dCA9ICgyNDAgKiBVU0VDX1BFUl9TRUMpOworIAorICAgICAgICAgdS0+aWdub3JlX29uX2lzb2xhdGUgPSB0cnVlOworICAgICAgICAgdS0+aWdub3JlX29uX3NuYXBzaG90ID0gdHJ1ZTsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZDYxYzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC9ydW4tcHRlc3QKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKKwordGFyIC1DIHRlc3QgLXhKZiB0ZXN0L3N5cy50YXIueHoKK21ha2UgdGVzdC9ydWxlcy10ZXN0LnNoLmxvZworbWFrZSB0ZXN0L3VkZXYtdGVzdC5wbC5sb2cKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL3RvdWNoc2NyZWVuLnJ1bGVzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvdG91Y2hzY3JlZW4ucnVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgzZmQxNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL3RvdWNoc2NyZWVuLnJ1bGVzCkBAIC0wLDAgKzEsMTggQEAKKyMgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIG1vZGlmaWVycyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHVzZWQgaW4gc29tZQorIyBvZiB0aGUgZGlmZmVyZW50IGZpZWxkcy4gVGhleSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgc3Vic2l0dXRpb25zOgorIworIyAlbiB0aGUgImtlcm5lbCBudW1iZXIiIG9mIHRoZSBkZXZpY2UuCisjICAgIEZvciBleGFtcGxlLCAnc2RhMycgaGFzIGEgImtlcm5lbCBudW1iZXIiIG9mICczJworIyAlZSB0aGUgc21hbGxlc3QgbnVtYmVyIGZvciB0aGF0IG5hbWUgd2hpY2ggZG9lcyBub3QgbWF0Y2hlcyBhbiBleGlzdGluZyBub2RlCisjICVrIHRoZSBrZXJuZWwgbmFtZSBmb3IgdGhlIGRldmljZQorIyAlTSB0aGUga2VybmVsIG1ham9yIG51bWJlciBmb3IgdGhlIGRldmljZQorIyAlbSB0aGUga2VybmVsIG1pbm9yIG51bWJlciBmb3IgdGhlIGRldmljZQorIyAlYiB0aGUgYnVzIGlkIGZvciB0aGUgZGV2aWNlCisjICVjIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdGhlIFBST0dSQU0KKyMgJXN7ZmlsZW5hbWV9IHRoZSBjb250ZW50IG9mIGEgc3lzZnMgYXR0cmlidXRlCisjICUlIHRoZSAnJScgY2hhciBpdHNlbGYKKyMKKworIyBDcmVhdGUgYSBzeW1saW5rIHRvIGFueSB0b3VjaHNjcmVlbiBpbnB1dCBkZXZpY2UKK1NVQlNZU1RFTT09ImlucHV0IiwgS0VSTkVMPT0iZXZlbnRbMC05XSoiLCBBVFRSU3ttb2RhbGlhc309PSJpbnB1dDoqLWUwKiwzLCphMCwxLCoxOCwqIiwgU1lNTElOSys9ImlucHV0L3RvdWNoc2NyZWVuMCIKK1NVQlNZU1RFTT09ImlucHV0IiwgS0VSTkVMPT0iZXZlbnRbMC05XSoiLCBBVFRSU3ttb2RhbGlhc309PSJhZHM3ODQ2IiwgU1lNTElOSys9ImlucHV0L3RvdWNoc2NyZWVuMCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kXzIyNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kXzIyNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWM5OWNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWRfMjI1LmJiCkBAIC0wLDAgKzEsNDE1IEBACitTVU1NQVJZID0gIkEgU3lzdGVtIGFuZCBzZXJ2aWNlIG1hbmFnZXIiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL3N5c3RlbWQiCisKK0RFU0NSSVBUSU9OID0gInN5c3RlbWQgaXMgYSBzeXN0ZW0gYW5kIHNlcnZpY2UgbWFuYWdlciBmb3IgTGludXgsIGNvbXBhdGlibGUgd2l0aCBcCitTeXNWIGFuZCBMU0IgaW5pdCBzY3JpcHRzLiBzeXN0ZW1kIHByb3ZpZGVzIGFnZ3Jlc3NpdmUgcGFyYWxsZWxpemF0aW9uIFwKK2NhcGFiaWxpdGllcywgdXNlcyBzb2NrZXQgYW5kIEQtQnVzIGFjdGl2YXRpb24gZm9yIHN0YXJ0aW5nIHNlcnZpY2VzLCBcCitvZmZlcnMgb24tZGVtYW5kIHN0YXJ0aW5nIG9mIGRhZW1vbnMsIGtlZXBzIHRyYWNrIG9mIHByb2Nlc3NlcyB1c2luZyBcCitMaW51eCBjZ3JvdXBzLCBzdXBwb3J0cyBzbmFwc2hvdHRpbmcgYW5kIHJlc3RvcmluZyBvZiB0aGUgc3lzdGVtIFwKK3N0YXRlLCBtYWludGFpbnMgbW91bnQgYW5kIGF1dG9tb3VudCBwb2ludHMgYW5kIGltcGxlbWVudHMgYW4gXAorZWxhYm9yYXRlIHRyYW5zYWN0aW9uYWwgZGVwZW5kZW5jeS1iYXNlZCBzZXJ2aWNlIGNvbnRyb2wgbG9naWMuIEl0IGNhbiBcCit3b3JrIGFzIGEgZHJvcC1pbiByZXBsYWNlbWVudCBmb3Igc3lzdmluaXQuIgorCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLkdQTDI7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0xJQ0VOU0UuTEdQTDIuMTttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCisKK1BST1ZJREVTID0gInVkZXYiCisKK1BFID0gIjEiCisKK0RFUEVORFMgPSAia21vZCBkb2Nib29rLXNnbWwtZHRkLTQuMS1uYXRpdmUgaW50bHRvb2wtbmF0aXZlIGdwZXJmLW5hdGl2ZSBhY2wgcmVhZGxpbmUgZGJ1cyBsaWJjYXAgbGliY2dyb3VwIGdsaWItMi4wIHFlbXUtbmF0aXZlIHV0aWwtbGludXgiCisKK1NFQ1RJT04gPSAiYmFzZS9zaGVsbCIKKworaW5oZXJpdCB1c2VyYWRkIHBrZ2NvbmZpZyBhdXRvdG9vbHMgcGVybG5hdGl2ZSB1cGRhdGUtcmMuZCB1cGRhdGUtYWx0ZXJuYXRpdmVzIHFlbXUgc3lzdGVtZCBwdGVzdCBnZXR0ZXh0CisKK1NSQ1JFViA9ICJlMTQzOWExNDcyYzVmNjkxNzMzYjhlZjEwZTcwMmJlYWMyNDk2YTYzIgorCitQViA9ICIyMjUrZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9zeXN0ZW1kL3N5c3RlbWQuZ2l0O3Byb3RvY29sPWdpdCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLWJpbmZtdC1Eb24tdC1pbnN0YWxsLWRlcGVuZGVuY3ktbGlua3MtYXQtaW5zdGFsbC10aW0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC1jb25maWd1cmUtQ2hlY2stZm9yLWFkZGl0aW9uYWwtZmVhdHVyZXMtdGhhdC11Y2xpYmMtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtbnNwYXduLVVzZS1leGVjdnBlLW9ubHktd2hlbi1saWJjLXN1cHBvcnRzLWl0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDYtam91cm5hbC1Vc2UtcG9zaXgtZmFsbG9jYXRlLW9ubHktaWYtYXZhaWxhYmxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDctdXRpbC1Vc2UtbWtvc3RlbXAtb25seS1pZi1saWJjLXN1cHBvcnRzLWl0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDgtdXRpbC1ieXBhc3MtdW5pbXBsZW1lbnRlZC1fU0NfUEhZU19QQUdFUy1zeXN0ZW0tY29uZi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA5LXN5c3YtZ2VuZXJhdG9yLWFkZC1zdXBwb3J0LWZvci1leGVjdXRpbmctc2NyaXB0cy11bmQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMC1NYWtlLXJvb3Qtcy1ob21lLWRpcmVjdG9yeS1jb25maWd1cmFibGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMS1zeXN0ZW1kLXVzZXItYXZvaWQtdXNpbmctc3lzdGVtLWF1dGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMi1pbXBsbWVudC1zeXN0ZW1kLXN5c3YtaW5zdGFsbC1mb3ItT0UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNC1SZXZlcnQtcnVsZXMtcmVtb3ZlLWZpcm13YXJlLWxvYWRpbmctcnVsZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNS1SZXZlcnQtdWRldi1yZW1vdmUtdXNlcnNwYWNlLWZpcm13YXJlLWxvYWRpbmctc3VwcG9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3RvdWNoc2NyZWVuLnJ1bGVzIFwKKyAgICAgICAgICAgZmlsZTovLzAwLWNyZWF0ZS12b2xhdGlsZS5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL2luaXQgXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAiCitTUkNfVVJJX2FwcGVuZF9xZW11YWxsID0gImZpbGU6Ly9xZW11YWxsX2lvX2xhdGVuY3ktY29yZS1kZXZpY2UuYy1DaGFuZ2UtdGhlLWRlZmF1bHQtZGV2aWNlLXRpbWVvdXQtdG8tMi5wYXRjaCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDX1VSSV9hcHBlbmRfbGliYy11Y2xpYmMgPSAiXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtdW5pdHMtUHJlZmVyLWdldHR5LXRvLWFnZXR0eS1pbi1jb25zb2xlLXNldHVwLXN5c3RlbS5wYXRjaCBcCisgICAgICAgICAgICIKK0xERkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtbHJ0IgorCitHVEtET0NfRE9DRElSID0gIiR7U30vZG9jcy8iCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ4eiBsZGNvbmZpZyBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneGtiY29tbW9uJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzZWxpbnV4JywgJ3NlbGludXgnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICIKKworUEFDS0FHRUNPTkZJR1tqb3VybmFsLXVwbG9hZF0gPSAiLS1lbmFibGUtbGliY3VybCwtLWRpc2FibGUtbGliY3VybCxjdXJsIgorIyBTaWduIHRoZSBqb3VybmFsIGZvciBhbnRpLXRhbXBlcmluZworUEFDS0FHRUNPTkZJR1tnY3J5cHRdID0gIi0tZW5hYmxlLWdjcnlwdCwtLWRpc2FibGUtZ2NyeXB0LGxpYmdjcnlwdCIKKyMgcmVnYXJkbGVzcyBvZiBQQUNLQUdFQ09ORklHLCBsaWJnY3J5cHQgaXMgYWx3YXlzIHJlcXVpcmVkIHRvIGV4cGFuZAorIyB0aGUgQU1fUEFUSF9MSUJHQ1JZUFQgYXV0b2NvbmYgbWFjcm8KK0RFUEVORFMgKz0gImxpYmdjcnlwdCIKKyMgQ29tcHJlc3MgdGhlIGpvdXJuYWwKK1BBQ0tBR0VDT05GSUdbeHpdID0gIi0tZW5hYmxlLXh6LC0tZGlzYWJsZS14eix4eiIKK1BBQ0tBR0VDT05GSUdbY3J5cHRzZXR1cF0gPSAiLS1lbmFibGUtbGliY3J5cHRzZXR1cCwtLWRpc2FibGUtbGliY3J5cHRzZXR1cCxjcnlwdHNldHVwIgorUEFDS0FHRUNPTkZJR1ttaWNyb2h0dHBkXSA9ICItLWVuYWJsZS1taWNyb2h0dHBkLC0tZGlzYWJsZS1taWNyb2h0dHBkLGxpYm1pY3JvaHR0cGQiCitQQUNLQUdFQ09ORklHW2VsZnV0aWxzXSA9ICItLWVuYWJsZS1lbGZ1dGlscywtLWRpc2FibGUtZWxmdXRpbHMsZWxmdXRpbHMiCitQQUNLQUdFQ09ORklHW3Jlc29sdmVkXSA9ICItLWVuYWJsZS1yZXNvbHZlZCwtLWRpc2FibGUtcmVzb2x2ZWQiCitQQUNLQUdFQ09ORklHW25ldHdvcmtkXSA9ICItLWVuYWJsZS1uZXR3b3JrZCwtLWRpc2FibGUtbmV0d29ya2QiCitQQUNLQUdFQ09ORklHW2xpYmlkbl0gPSAiLS1lbmFibGUtbGliaWRuLC0tZGlzYWJsZS1saWJpZG4sbGliaWRuIgorUEFDS0FHRUNPTkZJR1thdWRpdF0gPSAiLS1lbmFibGUtYXVkaXQsLS1kaXNhYmxlLWF1ZGl0LGF1ZGl0IgorUEFDS0FHRUNPTkZJR1ttYW5wYWdlc10gPSAiLS1lbmFibGUtbWFucGFnZXMsLS1kaXNhYmxlLW1hbnBhZ2VzLGxpYnhzbHQtbmF0aXZlIHhtbHRvLW5hdGl2ZSBkb2Nib29rLXhtbC1kdGQ0LW5hdGl2ZSBkb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uYXRpdmUiCitQQUNLQUdFQ09ORklHW3BhbV0gPSAiLS1lbmFibGUtcGFtLC0tZGlzYWJsZS1wYW0sbGlicGFtIgorIyBWZXJpZnkga2V5bWFwcyBvbiBsb2NhbGUgY2hhbmdlCitQQUNLQUdFQ09ORklHW3hrYmNvbW1vbl0gPSAiLS1lbmFibGUteGtiY29tbW9uLC0tZGlzYWJsZS14a2Jjb21tb24sbGlieGtiY29tbW9uIgorIyBVcGRhdGUgTkFUIGZpcmV3YWxsIHJ1bGVzCitQQUNLQUdFQ09ORklHW2lwdGNdID0gIi0tZW5hYmxlLWxpYmlwdGMsLS1kaXNhYmxlLWxpYmlwdGMsaXB0YWJsZXMiCitQQUNLQUdFQ09ORklHW2xkY29uZmlnXSA9ICItLWVuYWJsZS1sZGNvbmZpZywtLWRpc2FibGUtbGRjb25maWcsLCIKK1BBQ0tBR0VDT05GSUdbc2VsaW51eF0gPSAiLS1lbmFibGUtc2VsaW51eCwtLWRpc2FibGUtc2VsaW51eCxsaWJzZWxpbnV4IgorUEFDS0FHRUNPTkZJR1t2YWxncmluZF0gPSAiYWNfY3ZfaGVhZGVyX3ZhbGdyaW5kX21lbWNoZWNrX2g9eWVzIGFjX2N2X2hlYWRlcl92YWxncmluZF92YWxncmluZF9oPXllcyAsYWNfY3ZfaGVhZGVyX3ZhbGdyaW5kX21lbWNoZWNrX2g9bm8gYWNfY3ZfaGVhZGVyX3ZhbGdyaW5kX3ZhbGdyaW5kX2g9bm8gLHZhbGdyaW5kIgorCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9LSUxMPSR7YmFzZV9iaW5kaXJ9L2tpbGwiCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9LTU9EPSR7YmFzZV9iaW5kaXJ9L2ttb2QiCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9RVU9UQUNIRUNLPSR7c2JpbmRpcn0vcXVvdGFjaGVjayIKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX1FVT1RBT049JHtzYmluZGlyfS9xdW90YW9uIgorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfU1VMT0dJTj0ke2Jhc2Vfc2JpbmRpcn0vc3Vsb2dpbiIKKworIyBIZWxwZXIgdmFyaWFibGVzIHRvIGNsYXJpZnkgbG9jYXRpb25zLiAgVGhpcyBtaXJyb3JzIHRoZSBsb2dpYyBpbiBzeXN0ZW1kJ3MKKyMgYnVpbGQgc3lzdGVtLgorcm9vdHByZWZpeCA/PSAiJHtiYXNlX3ByZWZpeH0iCityb290bGliZGlyID89ICIke2Jhc2VfbGliZGlyfSIKK3Jvb3RsaWJleGVjZGlyID0gIiR7cm9vdHByZWZpeH0vbGliIgorCitDQUNIRURfQ09ORklHVVJFVkFSU19jbGFzcy10YXJnZXQgPSAiXAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfTU9VTlRfUEFUSD0ke2Jhc2VfYmluZGlyfS9tb3VudCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9VTU9VTlRfUEFUSD0ke2Jhc2VfYmluZGlyfS91bW91bnQgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfS01PRD0ke2Jhc2VfYmluZGlyfS9rbW9kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhY19jdl9wYXRoX0tJTEw9JHtiYXNlX2JpbmRpcn0va2lsbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9TVUxPR0lOPSR7YmFzZV9zYmluZGlyfS9zdWxvZ2luIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhY19jdl9wYXRoX0tFWEVDPSR7c2JpbmRpcn0va2V4ZWMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfUVVPVEFDSEVDSz0ke3NiaW5kaXJ9L3F1b3RhY2hlY2sgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfUVVPVEFPTj0ke3NiaW5kaXJ9L3F1b3Rhb24gXAorCQkJICIKKworRVhUUkFfT0VDT05GID0gIiAtLXdpdGgtcm9vdHByZWZpeD0ke3Jvb3RwcmVmaXh9IFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLXJvb3RsaWJkaXI9JHtyb290bGliZGlyfSBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1yb290aG9tZWRpcj0ke1JPT1RfSE9NRX0gXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtY29yZWR1bXAgXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS1zcGxpdC11c3IgXAorICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtcHl0aG9uIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLXN5c3ZyY25kLXBhdGg9JHtzeXNjb25mZGlyfSBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1maXJtd2FyZS1wYXRoPS9saWIvZmlybXdhcmUgXAorICAgICAgICAgICAgICAgIgorIyB1Y2xpYmMgZG9lcyBub3QgaGF2ZSBOU1MKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0tZGlzYWJsZS1teWhvc3RuYW1lICIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJZXhwb3J0IE5NPSIke0hPU1RfUFJFRklYfWdjYy1ubSIKKwlleHBvcnQgQVI9IiR7SE9TVF9QUkVGSVh9Z2NjLWFyIgorCWV4cG9ydCBSQU5MSUI9IiR7SE9TVF9QUkVGSVh9Z2NjLXJhbmxpYiIKKwlleHBvcnQgS01PRD0iJHtiYXNlX2JpbmRpcn0va21vZCIKKwlpZiBbIC1kICR7U30vdW5pdHMucHJlX3NlZCBdIDsgdGhlbgorCQljcCAtciAke1N9L3VuaXRzLnByZV9zZWQgJHtTfS91bml0cworCWVsc2UKKwkJY3AgLXIgJHtTfS91bml0cyAke1N9L3VuaXRzLnByZV9zZWQKKwlmaQorCXNlZCAtaSAnL2xuIC0tcmVsYXRpdmUgLS1oZWxwL2QnICR7U30vY29uZmlndXJlLmFjCisJc2VkIC1pIC1lICdzOlwkKExOX1MpIC0tcmVsYXRpdmUgLWY6bG5yOmcnICR7U30vTWFrZWZpbGUuYW0KKwlzZWQgLWkgLWUgJ3M6XCQoTE5fUykgLS1yZWxhdGl2ZTpsbnI6ZycgJHtTfS9NYWtlZmlsZS5hbQorfQorCitkb19pbnN0YWxsKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisJaW5zdGFsbCAtZCAke0R9LyR7YmFzZV9zYmluZGlyfQorCSMgUHJvdmlkZWQgYnkgYSBzZXBhcmF0ZSByZWNpcGUKKwlybSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zZXJpYWwtZ2V0dHkqIC1mCisKKwkjIFByb3ZpZGUgc3VwcG9ydCBmb3IgaW5pdHJhbWZzCisJWyAhIC1lICR7RH0vaW5pdCBdICYmIGxuIC1zICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZCAke0R9L2luaXQKKwlbICEgLWUgJHtEfS8ke2Jhc2Vfc2JpbmRpcn0vdWRldmQgXSAmJiBsbiAtcyAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtdWRldmQgJHtEfS8ke2Jhc2Vfc2JpbmRpcn0vdWRldmQKKworCSMgQ3JlYXRlIG1hY2hpbmUtaWQKKwkjIDIwOjEyIDwgbWV6Y2FsZXJvPiBrb2VuOiB5b3UgaGF2ZSB0aHJlZSBvcHRpb25zOiBhKSBydW4gc3lzdGVtZC1tYWNoaW5lLWlkLXNldHVwIGF0IGluc3RhbGwgdGltZSwgYikgaGF2ZSAvIHJlYWQtb25seSBhbmQgYW4gZW1wdHkgZmlsZSB0aGVyZSAoZm9yIHN0YXRlbGVzcykgYW5kIGMpIGJvb3Qgd2l0aCAvIHdyaXRhYmxlCisJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbWFjaGluZS1pZAorCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZC8KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS8qLnJ1bGVzICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZC8KKworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9LzAwLWNyZWF0ZS12b2xhdGlsZS5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQvCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdmluaXQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9zeXN0ZW1kLXVkZXZkCisJCXNlZCAtaSBzJUBVREVWREAlJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLXVkZXZkJSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvc3lzdGVtZC11ZGV2ZAorCWZpCisKKwljaG93biByb290OnN5c3RlbWQtam91cm5hbCAke0R9LyR7bG9jYWxzdGF0ZWRpcn0vbG9nL2pvdXJuYWwKKworICAgICAgICAjIERlbGV0ZSBqb3VybmFsIFJFQURNRSwgYXMgbG9nIGNhbiBiZSBzeW1saW5rZWQgaW5zaWRlIHZvbGF0aWxlLgorICAgICAgICBybSAtZiAke0R9LyR7bG9jYWxzdGF0ZWRpcn0vbG9nL1JFQURNRQorCisJIyBDcmVhdGUgc3ltbGlua3MgZm9yIHN5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZQorCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZ3JhcGhpY2FsLnRhcmdldC53YW50cworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbXVsdGktdXNlci50YXJnZXQud2FudHMKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3Bvd2Vyb2ZmLnRhcmdldC53YW50cworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcmVib290LnRhcmdldC53YW50cworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcmVzY3VlLnRhcmdldC53YW50cworCWxuIC1zZiAuLi9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZ3JhcGhpY2FsLnRhcmdldC53YW50cy9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UKKwlsbiAtc2YgLi4vc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL211bHRpLXVzZXIudGFyZ2V0LndhbnRzL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZQorCWxuIC1zZiAuLi9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcG93ZXJvZmYudGFyZ2V0LndhbnRzL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZQorCWxuIC1zZiAuLi9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcmVib290LnRhcmdldC53YW50cy9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UKKwlsbiAtc2YgLi4vc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3Jlc2N1ZS50YXJnZXQud2FudHMvc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlCisKKwkjIEVuYWJsZSBqb3VybmFsIHRvIGZvcndhcmQgbWVzc2FnZSB0byBzeXNsb2cgZGFlbW9uCisJc2VkIC1pIC1lICdzLy4qRm9yd2FyZFRvU3lzbG9nLiovRm9yd2FyZFRvU3lzbG9nPXllcy8nICR7RH0ke3N5c2NvbmZkaXJ9L3N5c3RlbWQvam91cm5hbGQuY29uZgorCSMgdGhpcyBmaWxlIGlzIG5lZWRlZCB0byBleGlzdCBpZiBuZXR3b3JrZCBpcyBkaXNhYmxlZCBidXQgdGltZXN5bmNkIGlzIHN0aWxsIGluIHVzZSBzaW5jZSB0aW1lc3luY2QgY2hlY2tzIGl0CisJIyBmb3IgZXhpc3RlbmNlIGVsc2UgaXQgZmFpbHMKKwlpZiBbIC1zICR7RH0ke2xpYmRpcn0vdG1wZmlsZXMuZC9zeXN0ZW1kLmNvbmYgXTsgdGhlbgorCQkke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICduZXR3b3JrZCcsICc6JywgJ3NlZCAtaSAtZSAiXCRhZCAvcnVuL3N5c3RlbWQvbmV0aWYvbGlua3MgMDc1NSByb290IHJvb3QgLSIgJHtEfSR7bGliZGlyfS90bXBmaWxlcy5kL3N5c3RlbWQuY29uZicsIGQpfQorCWZpCisJaW5zdGFsbCAtRG0gMDc1NSAke1N9L3NyYy9zeXN0ZW1jdGwvc3lzdGVtZC1zeXN2LWluc3RhbGwuU0tFTEVUT04gJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW1kLXN5c3YtaW5zdGFsbAorfQorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKyAgICAgICBpbnN0YWxsIC1kICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKKyAgICAgICBjcCAtcmYgJHtTfS90ZXN0LyogJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorICAgICAgIGluc3RhbGwgLW0gMDc1NSAgJHtCfS90ZXN0LXVkZXYgJHtEfSR7UFRFU1RfUEFUSH0vCisgICAgICAgaW5zdGFsbCAtZCAke0R9JHtQVEVTVF9QQVRIfS9idWlsZC1hdXgKKyAgICAgICBjcCAke1N9L2J1aWxkLWF1eC90ZXN0LWRyaXZlciAke0R9JHtQVEVTVF9QQVRIfS9idWlsZC1hdXgvCisgICAgICAgY3AgLXJmICR7Qn0vcnVsZXMgJHtEfSR7UFRFU1RfUEFUSH0vCisgICAgICAgIyBUaGlzIGRpcmVjdG9yeSBuZWVkcyB0byBiZSB0aGVyZSBmb3IgdWRldi10ZXN0LnBsIHRvIHdvcmsuCisgICAgICAgaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L3VkZXYvcnVsZXMuZAorICAgICAgIGNwICR7Qn0vTWFrZWZpbGUgJHtEfSR7UFRFU1RfUEFUSH0vCisgICAgICAgY3AgJHtTfS90ZXN0L3N5cy50YXIueHogJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorICAgICAgIHNlZCAtaSAncy8idHJlZSIvImxzIi8nICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QvdWRldi10ZXN0LnBsCisgICAgICAgc2VkIC1pICdzIyR7U30jJHtQVEVTVF9QQVRIfSNnJyAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQorICAgICAgIHNlZCAtaSAncyMke0J9IyR7UFRFU1RfUEFUSH0jZycgJHtEfSR7UFRFU1RfUEFUSH0vTWFrZWZpbGUKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCl7CisgICAgc3lzdGVtZGxpYmRpciA9IGQuZ2V0VmFyKCJyb290bGliZGlyIiwgVHJ1ZSkKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBzeXN0ZW1kbGliZGlyLCAnXmxpYiguKilcLnNvXC4qJywgJ2xpYiVzJywgJ1N5c3RlbWQgJXMgbGlicmFyeScsIGV4dHJhX2RlcGVuZHM9JycsIGFsbG93X2xpbmtzPVRydWUpCit9CitQQUNLQUdFU19EWU5BTUlDICs9ICJebGliKHVkZXZ8c3lzdGVtZCkuKiIKKworUEFDS0FHRVMgPSsgIiR7UE59LWd1aSAke1BOfS12Y29uc29sZS1zZXR1cCAke1BOfS1pbml0cmFtZnMgJHtQTn0tYW5hbHl6ZSAke1BOfS1rZXJuZWwtaW5zdGFsbCBcCisgICAgICAgICAgICAgJHtQTn0tcnBtLW1hY3JvcyAke1BOfS1iaW5mbXQgJHtQTn0tcGFtICR7UE59LXpzaCAke1BOfS14b3JnLXhpbml0cmMiCisKK1NZU1RFTURfUEFDS0FHRVMgPSAiJHtQTn0tYmluZm10IgorU1lTVEVNRF9TRVJWSUNFXyR7UE59LWJpbmZtdCA9ICJzeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlIgorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorVVNFUkFERF9QQVJBTV8ke1BOfSArPSAiLS1zeXN0ZW0gc3lzdGVtZC1qb3VybmFsLWdhdGV3YXk7IC0tc3lzdGVtIHN5c3RlbWQtdGltZXN5bmMiCitHUk9VUEFERF9QQVJBTV8ke1BOfSA9ICItciBsb2NrOyAtciBzeXN0ZW1kLWpvdXJuYWwiCisKK0ZJTEVTXyR7UE59LWFuYWx5emUgPSAiJHtiaW5kaXJ9L3N5c3RlbWQtYW5hbHl6ZSIKKworRklMRVNfJHtQTn0taW5pdHJhbWZzID0gIi9pbml0IgorUkRFUEVORFNfJHtQTn0taW5pdHJhbWZzID0gIiR7UE59IgorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAicGVybCBweXRob24gYmFzaCIKK0ZJTEVTXyR7UE59LXB0ZXN0ICs9ICIke2xpYmRpcn0vdWRldi9ydWxlcy5kIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9zeXN0ZW1kL3B0ZXN0Ly5kZWJ1ZyIKKworRklMRVNfJHtQTn0tZ3VpID0gIiR7YmluZGlyfS9zeXN0ZW1hZG0iCisKK0ZJTEVTXyR7UE59LXZjb25zb2xlLXNldHVwID0gIiR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC12Y29uc29sZS1zZXR1cCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtdmNvbnNvbGUtc2V0dXAuc2VydmljZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c2luaXQudGFyZ2V0LndhbnRzL3N5c3RlbWQtdmNvbnNvbGUtc2V0dXAuc2VydmljZSIKKworUkRFUEVORFNfJHtQTn0ta2VybmVsLWluc3RhbGwgKz0gImJhc2giCitGSUxFU18ke1BOfS1rZXJuZWwtaW5zdGFsbCA9ICIke2JpbmRpcn0va2VybmVsLWluc3RhbGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9rZXJuZWwvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi9rZXJuZWwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCitGSUxFU18ke1BOfS1ycG0tbWFjcm9zID0gIiR7ZXhlY19wcmVmaXh9L2xpYi9ycG0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICIKKworRklMRVNfJHtQTn0teG9yZy14aW5pdHJjID0gIiR7c3lzY29uZmRpcn0vWDExL3hpbml0L3hpbml0cmMuZC8qIgorCitGSUxFU18ke1BOfS16c2ggPSAiJHtkYXRhZGlyfS96c2gvc2l0ZS1mdW5jdGlvbnMiCisKK0ZJTEVTXyR7UE59LWJpbmZtdCA9ICIke3N5c2NvbmZkaXJ9L2JpbmZtdC5kLyBcCisgICAgICAgICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL2JpbmZtdC5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtYmluZm10IFwKKyAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3Byb2Mtc3lzLWZzLWJpbmZtdF9taXNjLiogXAorICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzdGVtZC1iaW5mbXQuc2VydmljZSIKK1JSRUNPTU1FTkRTXyR7UE59LWJpbmZtdCA9ICJrZXJuZWwtbW9kdWxlLWJpbmZtdC1taXNjIgorCitSUkVDT01NRU5EU18ke1BOfS12Y29uc29sZS1zZXR1cCA9ICJrYmQga2JkLWNvbnNvbGVmb250cyBrYmQta2V5bWFwcyIKKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vc3lzdGVtZC9qb3VybmFsZC5jb25mIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3N5c3RlbWQvbG9naW5kLmNvbmYgXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vc3lzdGVtZC9zeXN0ZW0uY29uZiBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9zeXN0ZW1kL3VzZXIuY29uZiIKKworRklMRVNfJHtQTn0gPSAiICR7YmFzZV9iaW5kaXJ9LyogXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYmFzaC1jb21wbGV0aW9uIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zZXJ2aWNlcyBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3BvbGtpdC0xIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9LyR7QlBOfSBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9mYWN0b3J5IFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2Jhc2hfY29tcGxldGlvbi5kLyBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9kYnVzLTEvIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L21hY2hpbmUtaWQgXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vbW9kdWxlcy1sb2FkLmQvIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3BhbS5kLyBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9zeXNjdGwuZC8gXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vc3lzdGVtZC8gXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZC8gXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0veGRnLyBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9pbml0LmQvUkVBRE1FIFwKKyAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kLyogXAorICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS8qIFwKKyAgICAgICAgICAgICAgICAke2Jhc2VfbGliZGlyfS9zZWN1cml0eS8qLnNvIFwKKyAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGlibnNzXyogXAorICAgICAgICAgICAgICAgIC9jZ3JvdXAgXAorICAgICAgICAgICAgICAgICR7YmluZGlyfS9zeXN0ZW1kKiBcCisgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2J1c2N0bCBcCisgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2xvY2FsZWN0bCBcCisgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2hvc3RuYW1lY3RsIFwKKyAgICAgICAgICAgICAgICAke2JpbmRpcn0vdGltZWRhdGVjdGwgXAorICAgICAgICAgICAgICAgICR7YmluZGlyfS9ib290Y3RsIFwKKyAgICAgICAgICAgICAgICAke2JpbmRpcn0va2VybmVsLWluc3RhbGwgXAorICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi90bXBmaWxlcy5kLyouY29uZiBcCisgICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL3N5c3RlbWQgXAorICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi9tb2R1bGVzLWxvYWQuZCBcCisgICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL3N5c2N0bC5kIFwKKyAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIvc3lzdXNlcnMuZCBcCisgICAgICAgICAgICAgICAgJHtsb2NhbHN0YXRlZGlyfSBcCisgICAgICAgICAgICAgICAgJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2L3J1bGVzLmQvNzAtdWFjY2Vzcy5ydWxlcyBcCisgICAgICAgICAgICAgICAgJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2L3J1bGVzLmQvNzEtc2VhdC5ydWxlcyBcCisgICAgICAgICAgICAgICAgJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2L3J1bGVzLmQvNzMtc2VhdC1sYXRlLnJ1bGVzIFwKKyAgICAgICAgICAgICAgICAke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvcnVsZXMuZC85OS1zeXN0ZW1kLnJ1bGVzIFwKKyAgICAgICAgICAgICAgICIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke3Jvb3RsaWJkaXJ9Ly5kZWJ1ZyAke3N5c3RlbWRfdW5pdGRpcn0vLmRlYnVnICR7c3lzdGVtZF91bml0ZGlyfS8qLy5kZWJ1ZyAke2Jhc2VfbGliZGlyfS9zZWN1cml0eS8uZGVidWcvIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2Jhc2VfbGliZGlyfS9zZWN1cml0eS8qLmxhICR7ZGF0YWRpcn0vZGJ1cy0xL2ludGVyZmFjZXMvICR7c3lzY29uZmRpcn0vcnBtL21hY3Jvcy5zeXN0ZW1kIgorCitSREVQRU5EU18ke1BOfSArPSAia21vZCBkYnVzIHV0aWwtbGludXgtbW91bnQgdWRldiAoPSAke0VYVEVORFBLR1Z9KSIKK1JERVBFTkRTXyR7UE59ICs9ICJ2b2xhdGlsZS1iaW5kcyB1cGRhdGUtcmMuZCIKKworUlJFQ09NTUVORFNfJHtQTn0gKz0gInN5c3RlbWQtc2VyaWFsZ2V0dHkgc3lzdGVtZC12Y29uc29sZS1zZXR1cCBcCisgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtZC1jb21wYXQtdW5pdHMgdWRldi1od2RiIFwKKyAgICAgICAgICAgICAgICAgICAgICB1dGlsLWxpbnV4LWFnZXR0eSAgdXRpbC1saW51eC1mc2NrIGUyZnNwcm9ncy1lMmZzY2sgXAorICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbC1tb2R1bGUtYXV0b2ZzNCBrZXJuZWwtbW9kdWxlLXVuaXgga2VybmVsLW1vZHVsZS1pcHY2IFwKKyAgICAgICAgICAgICAgICAgICAgICBvcy1yZWxlYXNlIFwKKyIKKworUEFDS0FHRVMgPSsgInVkZXYtZGJnIHVkZXYgdWRldi1od2RiIgorCitGSUxFU191ZGV2LWRiZyArPSAiJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2Ly5kZWJ1ZyIKKworUlBST1ZJREVTX3VkZXYgPSAiaG90cGx1ZyIKKworUkRFUEVORFNfdWRldi1od2RiICs9ICJ1ZGV2IgorCitGSUxFU191ZGV2ICs9ICIke2Jhc2Vfc2JpbmRpcn0vdWRldmQgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLXVkZXZkIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvYWNjZWxlcm9tZXRlciBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2F0YV9pZCBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2Nkcm9tX2lkIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvY29sbGVjdCBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2ZpbmRrZXlib2FyZHMgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9rZXlib2FyZC1mb3JjZS1yZWxlYXNlLnNoIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYva2V5bWFwIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvbXRkX3Byb2JlIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvc2NzaV9pZCBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L3Y0bF9pZCBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2tleW1hcHMgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9ydWxlcy5kLyoucnVsZXMgXAorICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS91ZGV2IFwKKyAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c3RlbWQtdWRldmQgXAorICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8qdWRldiogXAorICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8qLndhbnRzLyp1ZGV2KiBcCisgICAgICAgICAgICAgICAke2Jhc2VfYmluZGlyfS91ZGV2YWRtIFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYmFzaC1jb21wbGV0aW9uL2NvbXBsZXRpb25zL3VkZXZhZG0gXAorICAgICAgICAgICAgICAiCisKK0ZJTEVTX3VkZXYtaHdkYiA9ICIke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2h3ZGIuZCIKKworSU5JVFNDUklQVF9QQUNLQUdFUyA9ICJ1ZGV2IgorSU5JVFNDUklQVF9OQU1FX3VkZXYgPSAic3lzdGVtZC11ZGV2ZCIKK0lOSVRTQ1JJUFRfUEFSQU1TX3VkZXYgPSAic3RhcnQgMDMgUyAuIgorCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX1VQREFURVJDRF9CQkNMQVNTIiwgIjEiKQorfQorCisjIFRPRE86CisjIHUtYSBmb3IgcnVubGV2ZWwgYW5kIHRlbGluaXQKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiaW5pdCBoYWx0IHJlYm9vdCBzaHV0ZG93biBwb3dlcm9mZiBydW5sZXZlbCIKKworQUxURVJOQVRJVkVfVEFSR0VUW2luaXRdID0gIiR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtpbml0XSA9ICIke2Jhc2Vfc2JpbmRpcn0vaW5pdCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW2luaXRdID89ICIzMDAiCisKK0FMVEVSTkFUSVZFX1RBUkdFVFtoYWx0XSA9ICIke2Jhc2VfYmluZGlyfS9zeXN0ZW1jdGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaGFsdF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2hhbHQiCitBTFRFUk5BVElWRV9QUklPUklUWVtoYWx0XSA/PSAiMzAwIgorCitBTFRFUk5BVElWRV9UQVJHRVRbcmVib290XSA9ICIke2Jhc2VfYmluZGlyfS9zeXN0ZW1jdGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcmVib290XSA9ICIke2Jhc2Vfc2JpbmRpcn0vcmVib290IgorQUxURVJOQVRJVkVfUFJJT1JJVFlbcmVib290XSA/PSAiMzAwIgorCitBTFRFUk5BVElWRV9UQVJHRVRbc2h1dGRvd25dID0gIiR7YmFzZV9iaW5kaXJ9L3N5c3RlbWN0bCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzaHV0ZG93bl0gPSAiJHtiYXNlX3NiaW5kaXJ9L3NodXRkb3duIgorQUxURVJOQVRJVkVfUFJJT1JJVFlbc2h1dGRvd25dID89ICIzMDAiCisKK0FMVEVSTkFUSVZFX1RBUkdFVFtwb3dlcm9mZl0gPSAiJHtiYXNlX2JpbmRpcn0vc3lzdGVtY3RsIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3Bvd2Vyb2ZmXSA9ICIke2Jhc2Vfc2JpbmRpcn0vcG93ZXJvZmYiCitBTFRFUk5BVElWRV9QUklPUklUWVtwb3dlcm9mZl0gPz0gIjMwMCIKKworQUxURVJOQVRJVkVfVEFSR0VUW3J1bmxldmVsXSA9ICIke2Jhc2VfYmluZGlyfS9zeXN0ZW1jdGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcnVubGV2ZWxdID0gIiR7YmFzZV9zYmluZGlyfS9ydW5sZXZlbCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW3J1bmxldmVsXSA/PSAiMzAwIgorCitwa2dfcG9zdGluc3RfdWRldi1od2RiICgpIHsKKwlpZiB0ZXN0IC1uICIkRCI7IHRoZW4KKwkJJHtAcWVtdV9ydW5fYmluYXJ5KGQsICckRCcsICcke2Jhc2VfYmluZGlyfS91ZGV2YWRtJyl9IGh3ZGIgLS11cGRhdGUgXAorCQkJLS1yb290ICRECisJZWxzZQorCQl1ZGV2YWRtIGh3ZGIgLS11cGRhdGUKKwlmaQorfQorCitwa2dfcHJlcm1fdWRldi1od2RiICgpIHsKKwlpZiB0ZXN0IC1uICIkRCI7IHRoZW4KKwkJZXhpdCAxCisJZmkKKworCXJtIC1mICR7c3lzY29uZmRpcn0vdWRldi9od2RiLmJpbgorfQorCisjIEFzIHRoaXMgcmVjaXBlIGJ1aWxkcyB1ZGV2LCByZXNwZWN0IHN5c3RlbWQgYmVpbmcgaW4gRElTVFJPX0ZFQVRVUkVTIHNvCisjIHRoYXQgd2UgZG9uJ3QgYnVpbGQgYm90aCB1ZGV2IGFuZCBzeXN0ZW1kIGluIHdvcmxkIGJ1aWxkcy4KK3B5dGhvbiAoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zICgnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCInc3lzdGVtZCcgbm90IGluIERJU1RST19GRUFUVVJFUyIpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LTIuODhkc2YvY3J5cHQtbGliLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC0yLjg4ZHNmL2NyeXB0LWxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjM0MjkwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC0yLjg4ZHNmL2NyeXB0LWxpYi5wYXRjaApAQCAtMCwwICsxLDI1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKyMgVGhlIHNyYyBNYWtlZmlsZSB3YXMgY2hlY2tpbmcgZm9yIGxpYmNyeXB0LmEgb24gdGhlIGhvc3QsIG5vdCBpbiB0aGUKKyMgYnVpbGQgZW52aXJvbm1lbnQuICBUaGlzIHBhdGNoIGNoZWNrcyBmb3IgJExDUllQVCBpbiB0aGUgZW52aXJvbm1lbnQKKyMgYW5kIHVzZXMgaXQgaWYgaXQncyB0aGVyZS4KKyMgLSBqZGlrZUBsaW51eC5pbnRlbC5jb20KKworSW5kZXg6IHN5c3Zpbml0LTIuODhkc2Yvc3JjL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3lzdmluaXQtMi44OGRzZi5vcmlnL3NyYy9NYWtlZmlsZQorKysrIHN5c3Zpbml0LTIuODhkc2Yvc3JjL01ha2VmaWxlCitAQCAtODUsOSArODUsMTMgQEAgZWxzZQorIGVuZGlmCisgCisgIyBBZGRpdGlvbmFsIGxpYnMgZm9yIEdOVSBsaWJjLgorK2lmbmVxICgkKExDUllQVCksKQorKyAgU1VMT0dJTkxJQlMJKz0gJChMQ1JZUFQpCisrZWxzZQorIGlmbmVxICgkKHdpbGRjYXJkIC91c3IvbGliKi9saWJjcnlwdC5hKSwpCisgICBTVUxPR0lOTElCUwkrPSAtbGNyeXB0CisgZW5kaWYKKytlbmRpZgorIAorIGFsbDoJCSQoQklOKSAkKFNCSU4pICQoVVNSQklOKQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC0yLjg4ZHNmL2luc3RhbGwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LTIuODhkc2YvaW5zdGFsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzQyMjVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC0yLjg4ZHNmL2luc3RhbGwucGF0Y2gKQEAgLTAsMCArMSw4MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2RpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUgYi9zcmMvTWFrZWZpbGUKK2luZGV4IGUyYjgwMjguLjNlMTFlOTIgMTAwNjQ0CistLS0gYS9zcmMvTWFrZWZpbGUKKysrKyBiL3NyYy9NYWtlZmlsZQorQEAgLTY1LDcgKzY1LDE0IEBAIGVsc2UKKyAgIElOU1RBTExfREFUQQk9IGluc3RhbGwgLW0gNjQ0CisgZW5kaWYKKyBJTlNUQUxMX0RJUgk9IGluc3RhbGwgLW0gNzU1IC1kCistTUFORElSCQk9IC91c3Ivc2hhcmUvbWFuCisrCisrUk9PVCAgICAgICAgID89CisrYmFzZV9iaW5kaXIgID89IC9iaW4KKytiYXNlX3NiaW5kaXIgPz0gL3NiaW4KKytiaW5kaXIgICAgICAgPz0gL3Vzci9iaW4KKytzeXNjb25mZGlyICAgPz0gL2V0YworK2luY2x1ZGVkaXIgICA/PSAvdXNyL2luY2x1ZGUKKyttYW5kaXIgICAgICAgPz0gL3Vzci9zaGFyZS9tYW4KKyAKKyBpZmVxICgkKFdJVEhfU0VMSU5VWCkseWVzKQorICAgU0VMSU5VWF9ERUYJPSAgLURXSVRIX1NFTElOVVgKK0BAIC0xMzgsMzkgKzE0NSwzOSBAQCBjbG9iYmVyOgljbGVhbm9ianMKKyBkaXN0Y2xlYW46CWNsb2JiZXIKKyAKKyBpbnN0YWxsOgorLQkJJChJTlNUQUxMX0RJUikgJChST09UKS9iaW4vICQoUk9PVCkvc2Jpbi8KKy0JCSQoSU5TVEFMTF9ESVIpICQoUk9PVCkvdXNyL2Jpbi8KKysJCSQoSU5TVEFMTF9ESVIpICQoUk9PVCkkKGJhc2VfYmluZGlyKS8gJChST09UKSQoYmFzZV9zYmluZGlyKS8KKysJCSQoSU5TVEFMTF9ESVIpICQoUk9PVCkkKGJpbmRpcikvCisgCQlmb3IgaSBpbiAkKEJJTik7IGRvIFwKKy0JCQkkKElOU1RBTExfRVhFQykgJCRpICQoUk9PVCkvYmluLyA7IFwKKysJCQkkKElOU1RBTExfRVhFQykgJCRpICQoUk9PVCkkKGJhc2VfYmluZGlyKS8gOyBcCisgCQlkb25lCisgCQlmb3IgaSBpbiAkKFNCSU4pOyBkbyBcCistCQkJJChJTlNUQUxMX0VYRUMpICQkaSAkKFJPT1QpL3NiaW4vIDsgXAorKwkJCSQoSU5TVEFMTF9FWEVDKSAkJGkgJChST09UKSQoYmFzZV9zYmluZGlyKS8gOyBcCisgCQlkb25lCisgCQlmb3IgaSBpbiAkKFVTUkJJTik7IGRvIFwKKy0JCQkkKElOU1RBTExfRVhFQykgJCRpICQoUk9PVCkvdXNyL2Jpbi8gOyBcCisrCQkJJChJTlNUQUxMX0VYRUMpICQkaSAkKFJPT1QpJChiaW5kaXIpLyA7IFwKKyAJCWRvbmUKKy0JCSMgJChJTlNUQUxMX0RJUikgJChST09UKS9ldGMvCistCQkjICQoSU5TVEFMTF9FWEVDKSBpbml0c2NyaXB0LnNhbXBsZSAkKFJPT1QpL2V0Yy8KKy0JCWxuIC1zZiBoYWx0ICQoUk9PVCkvc2Jpbi9yZWJvb3QKKy0JCWxuIC1zZiBoYWx0ICQoUk9PVCkvc2Jpbi9wb3dlcm9mZgorLQkJbG4gLXNmIGluaXQgJChST09UKS9zYmluL3RlbGluaXQKKy0JCWxuIC1zZiAvc2Jpbi9raWxsYWxsNSAkKFJPT1QpL2Jpbi9waWRvZgorLQkJaWYgWyAhIC1mICQoUk9PVCkvdXNyL2Jpbi9sYXN0YiBdOyB0aGVuIFwKKy0JCQlsbiAtc2YgbGFzdCAkKFJPT1QpL3Vzci9iaW4vbGFzdGI7IFwKKysJCSMgJChJTlNUQUxMX0RJUikgJChST09UKSQoc3lzY29uZmRpcikvCisrCQkjICQoSU5TVEFMTF9FWEVDKSBpbml0c2NyaXB0LnNhbXBsZSAkKFJPT1QpJChzeXNjb25mZGlyKS8KKysJCWxuIC1zZiBoYWx0ICQoUk9PVCkkKGJhc2Vfc2JpbmRpcikvcmVib290CisrCQlsbiAtc2YgaGFsdCAkKFJPT1QpJChiYXNlX3NiaW5kaXIpL3Bvd2Vyb2ZmCisrCQlsbiAtc2YgaW5pdCAkKFJPT1QpJChiYXNlX3NiaW5kaXIpL3RlbGluaXQKKysJCWxuIC1zZiAkKGJhc2Vfc2JpbmRpcikva2lsbGFsbDUgJChST09UKSQoYmFzZV9iaW5kaXIpL3BpZG9mCisrCQlpZiBbICEgLWYgJChST09UKSQoYmluZGlyKS9sYXN0YiBdOyB0aGVuIFwKKysJCQlsbiAtc2YgbGFzdCAkKFJPT1QpJChiaW5kaXIpL2xhc3RiOyBcCisgCQlmaQorLQkJJChJTlNUQUxMX0RJUikgJChST09UKS91c3IvaW5jbHVkZS8KKy0JCSQoSU5TVEFMTF9EQVRBKSBpbml0cmVxLmggJChST09UKS91c3IvaW5jbHVkZS8KKy0JCSQoSU5TVEFMTF9ESVIpICQoUk9PVCkkKE1BTkRJUikvbWFuMS8KKy0JCSQoSU5TVEFMTF9ESVIpICQoUk9PVCkkKE1BTkRJUikvbWFuNS8KKy0JCSQoSU5TVEFMTF9ESVIpICQoUk9PVCkkKE1BTkRJUikvbWFuOC8KKysJCSQoSU5TVEFMTF9ESVIpICQoUk9PVCkkKGluY2x1ZGVkaXIpLworKwkJJChJTlNUQUxMX0RBVEEpIGluaXRyZXEuaCAkKFJPT1QpJChpbmNsdWRlZGlyKS8KKysJCSQoSU5TVEFMTF9ESVIpICQoUk9PVCkkKG1hbmRpcikvbWFuMS8KKysJCSQoSU5TVEFMTF9ESVIpICQoUk9PVCkkKG1hbmRpcikvbWFuNS8KKysJCSQoSU5TVEFMTF9ESVIpICQoUk9PVCkkKG1hbmRpcikvbWFuOC8KKyAJCWZvciBpIGluICQoTUFOMSk7IGRvIFwKKy0JCQkkKElOU1RBTExfREFUQSkgLi4vbWFuLyQkaSAkKFJPT1QpJChNQU5ESVIpL21hbjEvOyBcCisrCQkJJChJTlNUQUxMX0RBVEEpIC4uL21hbi8kJGkgJChST09UKSQobWFuZGlyKS9tYW4xLzsgXAorIAkJZG9uZQorIAkJZm9yIGkgaW4gJChNQU41KTsgZG8gXAorLQkJCSQoSU5TVEFMTF9EQVRBKSAuLi9tYW4vJCRpICQoUk9PVCkkKE1BTkRJUikvbWFuNS87IFwKKysJCQkkKElOU1RBTExfREFUQSkgLi4vbWFuLyQkaSAkKFJPT1QpJChtYW5kaXIpL21hbjUvOyBcCisgCQlkb25lCisgCQlmb3IgaSBpbiAkKE1BTjgpOyBkbyBcCistCQkJJChJTlNUQUxMX0RBVEEpIC4uL21hbi8kJGkgJChST09UKSQoTUFORElSKS9tYW44LzsgXAorKwkJCSQoSU5TVEFMTF9EQVRBKSAuLi9tYW4vJCRpICQoUk9PVCkkKG1hbmRpcikvbWFuOC87IFwKKyAJCWRvbmUKKyBpZmVxICgkKFJPT1QpLCkKKyAJCSMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtMi44OGRzZi9waWRvZi1hZGQtbS1vcHRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LTIuODhkc2YvcGlkb2YtYWRkLW0tb3B0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNWRmZGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LTIuODhkc2YvcGlkb2YtYWRkLW0tb3B0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMTg5IEBACitwaWRvZjogYWRkIC1tIG9wdGlvbgorCitXaGVuIHVzZWQgd2l0aCAtbywgd2lsbCBhbHNvIG9taXQgYW55IHByb2Nlc3NlcyB0aGF0IGhhdmUgdGhlIHNhbWUKK2FyZ3ZbMF0gYW5kIGFyZ3ZbMV0gYXMgYW55IGV4cGxpY2l0bHkgb21pdHRlZCBwcm9jZXNzIGlkcy4gVGhpcyBjYW4gYmUKK3VzZWQgdG8gYXZvaWQgbXVsdGlwbGUgc2hlbGwgc2NyaXB0cyBjb25jdXJyZW50bHkgY2FsbGluZyBwaWRvZiByZXR1cm5pbmcKK2VhY2ggb3RoZXIncyBwaWRzLgorCitodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTg4Mzg1NgorCitVcHN0cmVhbS1TdGF0dXM6IGJhY2twb3J0CitJbXBvcnRlZCBwYXRjaCBmcm9tOiBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vYXR0YWNobWVudC5jZ2k/aWQ9NjU4MTY2CisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIG1hbi9waWRvZi44ICAgIHwgIDYgKysrKysrCisgc3JjL2tpbGxhbGw1LmMgfCA2MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA2NSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbWFuL3BpZG9mLjggYi9tYW4vcGlkb2YuOAorLS0tIGEvbWFuL3BpZG9mLjgKKysrKyBiL21hbi9waWRvZi44CitAQCAtMjQsNiArMjQsNyBAQCBwaWRvZiAtLSBmaW5kIHRoZSBwcm9jZXNzIElEIG9mIGEgcnVubmluZyBwcm9ncmFtLgorIC5SQiBbIFwtYyBdCisgLlJCIFsgXC1uIF0KKyAuUkIgWyBcLXggXQorKy5SQiBbIFwtbSBdCisgLlJCIFsgXC1vCisgLklSIG9taXRwaWRbLG9taXRwaWQuLl0gXQorIC5SQiBbIFwtbworQEAgLTYzLDYgKzY0LDExIEBAIHNoZWxscyBydW5uaW5nIHRoZSBuYW1lZCBzY3JpcHRzLgorIFRlbGxzIFxmSXBpZG9mXGZQIHRvIG9taXQgcHJvY2Vzc2VzIHdpdGggdGhhdCBwcm9jZXNzIGlkLiBUaGUgc3BlY2lhbAorIHBpZCBcZkIlUFBJRFxmUCBjYW4gYmUgdXNlZCB0byBuYW1lIHRoZSBwYXJlbnQgcHJvY2VzcyBvZiB0aGUgXGZJcGlkb2ZcZlAKKyBwcm9ncmFtLCBpbiBvdGhlciB3b3JkcyB0aGUgY2FsbGluZyBzaGVsbCBvciBzaGVsbCBzY3JpcHQuCisrLklQIC1tCisrV2hlbiB1c2VkIHdpdGggLW8sIHdpbGwgYWxzbyBvbWl0IGFueSBwcm9jZXNzZXMgdGhhdCBoYXZlIHRoZSBzYW1lCisrYXJndlswXSBhbmQgYXJndlsxXSBhcyBhbnkgZXhwbGljaXRseSBvbWl0dGVkIHByb2Nlc3MgaWRzLiBUaGlzIGNhbiBiZQorK3VzZWQgdG8gYXZvaWQgbXVsdGlwbGUgc2hlbGwgc2NyaXB0cyBjb25jdXJyZW50bHkgY2FsbGluZyBwaWRvZiByZXR1cm5pbmcKKytlYWNoIG90aGVyJ3MgcGlkcy4KKyAuU0ggIkVYSVQgU1RBVFVTIgorIC5UUAorIC5CIDAKK2RpZmYgLS1naXQgYS9zcmMva2lsbGFsbDUuYyBiL3NyYy9raWxsYWxsNS5jCitpbmRleCA1OTM3ZDk4Li5lNzM4ODVlIDEwMDY0NAorLS0tIGEvc3JjL2tpbGxhbGw1LmMKKysrKyBiL3NyYy9raWxsYWxsNS5jCitAQCAtMTE4LDYgKzExOCw3IEBAIHR5cGVkZWYgc3RydWN0IF9zX25mcworIAorIC8qIExpc3Qgb2YgcHJvY2Vzc2VzLiAqLworIFBST0MgKnBsaXN0OworK1BST0MgKm9saXN0OworIAorIC8qIExpc3Qgb2YgcHJvY2Vzc2VzIHRvIG9taXQuICovCisgT01JVCAqb21pdDsKK0BAIC0zNDUsNiArMzQ2LDIwIEBAIHN0YXRpYyB2b2lkIGNsZWFyX21udCh2b2lkKQorIAl9CisgfQorIAorK3N0YXRpYyB2b2lkIGNsZWFyX29taXQodm9pZCkKKyt7CisrCU9NSVQgKm87CisrCVBST0MgKnA7CisrCWZvciAobyA9IG9taXQ7IG87IG8gPSBvbWl0KSB7CisrCQlvbWl0ID0gb21pdC0+bmV4dDsKKysJCWZyZWUobyk7CisrCX0KKysJZm9yIChwID0gb2xpc3Q7IHA7IHAgPSBvbGlzdCkgeworKwkJb2xpc3QgPSBvbGlzdC0+bmV4dDsKKysJCWZyZWUocCk7CisrCX0KKyt9CisrCisgLyoKKyAgKiAgICAgQ2hlY2sgaWYgcGF0aCBpcyBpYSBzaGFkb3cgb2ZmIGEgTkZTIHBhcnRpdGlvbi4KKyAgKi8KK0BAIC00NTIsNiArNDY3LDcgQEAgaW50IHJlYWRwcm9jKGludCBkb19zdGF0KQorIAlESVIJCSpkaXI7CisgCUZJTEUJCSpmcDsKKyAJUFJPQwkJKnAsICpuOworKwlPTUlUCQkqbywgKm07CisgCXN0cnVjdCBkaXJlbnQJKmQ7CisgCXN0cnVjdCBzdGF0CXN0OworIAljaGFyCQlwYXRoW1BBVEhfTUFYKzFdOworQEAgLTYyNCw2ICs2NDAsMTcgQEAgaW50IHJlYWRwcm9jKGludCBkb19zdGF0KQorIAkJcC0+bmV4dCA9IHBsaXN0OworIAkJcGxpc3QgPSBwOworIAkJcC0+cGlkID0gcGlkOworKwkJLyogQ291bGQgYmUgc21hcnRlciwgYnV0IGl0J3MgYSBzbWFsbCBsaXN0LiAqLworKwkJbSA9IG9taXQ7CisrCQlmb3IgKG8gPSBvbWl0OyBtOyBvID0gbSkgeworKwkJCW0gPSBvLT5uZXh0OworKwkJCWlmIChvLT5waWQgPT0gcC0+cGlkKSB7CisrCQkJCW4gPSAoUFJPQyopeG1hbGxvYyhzaXplb2YoUFJPQykpOworKwkJCQkqbiA9ICpwOworKwkJCQluLT5uZXh0ID0gb2xpc3Q7CisrCQkJCW9saXN0ID0gbjsKKysJCQl9CisrCQl9CisgCX0KKyAJY2xvc2VkaXIoZGlyKTsKKyAKK0BAIC04MTMsNiArODQwLDI2IEBAIFBJRFFfSEVBRCAqcGlkb2YoY2hhciAqcHJvZykKKyAJcmV0dXJuIHE7CisgfQorIAorK2ludCBtYXRjaGVzKFBST0MgKm8sIFBST0MgKnApCisreworKwlpbnQgcmV0ID0gMDsKKysJY2hhciAqb2FyZ3YxLCAqcGFyZ3YxOworKwlpZiAoKG8tPmFyZ3YwICYmIHAtPmFyZ3YwICYmICFzdHJjbXAoby0+YXJndjAscC0+YXJndjApKSkgeworKwkJaWYgKG8tPmFyZ3YxICYmIHAtPmFyZ3YxKSB7CisrCQkJaWYgKChvYXJndjEgPSBjYW5vbmljYWxpemVfZmlsZV9uYW1lKG8tPmFyZ3YxKSkgPT0gTlVMTCkKKysJCQkJb2FyZ3YxID0gc3RyZHVwKG8tPmFyZ3YxKTsKKysJCQlpZiAoKHBhcmd2MSA9IGNhbm9uaWNhbGl6ZV9maWxlX25hbWUocC0+YXJndjEpKSA9PSBOVUxMKQorKwkJCQlwYXJndjEgPSBzdHJkdXAocC0+YXJndjEpOworKwkJCWlmICghIHN0cmNtcChvYXJndjEsIHBhcmd2MSkpIHsKKysJCQkJcmV0ID0gMTsKKysJCQl9CisrCQkJZnJlZShvYXJndjEpOworKwkJCWZyZWUocGFyZ3YxKTsKKysJCX0KKysJfQorKwlyZXR1cm4gcmV0OworK30KKysKKyAvKiBHaXZlIHVzYWdlIG1lc3NhZ2UgYW5kIGV4aXQuICovCisgdm9pZCB1c2FnZSh2b2lkKQorIHsKK0BAIC04NDUsNiArODkyLDcgQEAgdm9pZCBuc3lzbG9nKGludCBwcmksIGNoYXIgKmZtdCwgLi4uKQorICNkZWZpbmUgUElET0ZfU0lOR0xFCTB4MDEKKyAjZGVmaW5lIFBJRE9GX09NSVQJMHgwMgorICNkZWZpbmUgUElET0ZfTkVURlMJMHgwNAorKyNkZWZpbmUgUElET0ZfT01JVF9PTUlUX01BVENIRVMJMHgwOAorIAorIC8qCisgICoJUGlkb2YgZnVuY3Rpb25hbGl0eS4KK0BAIC04NjEsNiArOTA5LDcgQEAgaW50IG1haW5fcGlkb2YoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAlzdHJ1Y3Qgc3RhdAlzdDsKKyAJY2hhcgkJdG1wWzUxMl07CisgCisrCW9saXN0ID0gKFBST0MqKTA7CisgCW9taXQgPSAoT01JVCopMDsKKyAJbmxpc3QgPSAoTkZTKikwOworIAlvcHRlcnIgPSAwOworQEAgLTg2OCw3ICs5MTcsNyBAQCBpbnQgbWFpbl9waWRvZihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCWlmICgodG9rZW4gPSBnZXRlbnYoIlBJRE9GX05FVEZTIikpICYmIChzdHJjbXAodG9rZW4sIm5vIikgIT0gMCkpCisgCQlmbGFncyB8PSBQSURPRl9ORVRGUzsKKyAKKy0Jd2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYyxhcmd2LCJoY286c3huIikpICE9IEVPRikgc3dpdGNoIChvcHQpIHsKKysJd2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYyxhcmd2LCJoY21vOnN4biIpKSAhPSBFT0YpIHN3aXRjaCAob3B0KSB7CisgCQljYXNlICc/JzoKKyAJCQluc3lzbG9nKExPR19FUlIsImludmFsaWQgb3B0aW9ucyBvbiBjb21tYW5kIGxpbmUhXG4iKTsKKyAJCQljbG9zZWxvZygpOworQEAgLTkwNyw2ICs5NTYsOSBAQCBpbnQgbWFpbl9waWRvZihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQljYXNlICd4JzoKKyAJCQlzY3JpcHRzX3RvbysrOworIAkJCWJyZWFrOworKwkJY2FzZSAnbSc6CisrCQkJZmxhZ3MgfD0gUElET0ZfT01JVF9PTUlUX01BVENIRVM7CisrCQkJYnJlYWs7CisgCQljYXNlICduJzoKKyAJCQlmbGFncyB8PSBQSURPRl9ORVRGUzsKKyAJCQlicmVhazsKK0BAIC05MzgsMTAgKzk5MCwxMyBAQCBpbnQgbWFpbl9waWRvZihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkJcGlkX3Qgc3BpZCA9IDA7CisgCQkJd2hpbGUgKChwID0gZ2V0X25leHRfZnJvbV9waWRfcShxKSkpIHsKKyAJCQkJaWYgKChmbGFncyAmIFBJRE9GX09NSVQpICYmIG9taXQpIHsKKy0JCQkJCU9NSVQgKiBvcHRyOworLQkJCQkJZm9yIChvcHRyID0gb21pdDsgb3B0cjsgb3B0ciA9IG9wdHItPm5leHQpIHsKKysJCQkJCVBST0MgKiBvcHRyOworKwkJCQkJZm9yIChvcHRyID0gb2xpc3Q7IG9wdHI7IG9wdHIgPSBvcHRyLT5uZXh0KSB7CisgCQkJCQkJaWYgKG9wdHItPnBpZCA9PSBwLT5waWQpCisgCQkJCQkJCWJyZWFrOworKwkJCQkJCWlmIChmbGFncyAmIFBJRE9GX09NSVRfT01JVF9NQVRDSEVTKQorKwkJCQkJCQlpZiAobWF0Y2hlcyhvcHRyLCBwKSkKKysJCQkJCQkJCWJyZWFrOworIAkJCQkJfQorIAorIAkJCQkJLyoKK0BAIC05NzcsNiArMTAzMiw3IEBAIGludCBtYWluX3BpZG9mKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJaWYgKCFmaXJzdCkKKyAJCXByaW50ZigiXG4iKTsKKyAKKysJY2xlYXJfb21pdCgpOworIAljbGVhcl9tbnQoKTsKKyAKKyAJY2xvc2Vsb2coKTsKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LWluaXR0YWIvaW5pdHRhYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtaW5pdHRhYi9pbml0dGFiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYmJkZjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LWluaXR0YWIvaW5pdHRhYgpAQCAtMCwwICsxLDMwIEBACisjIC9ldGMvaW5pdHRhYjogaW5pdCg4KSBjb25maWd1cmF0aW9uLgorIyAkSWQ6IGluaXR0YWIsdiAxLjkxIDIwMDIvMDEvMjUgMTM6MzU6MjEgbWlxdWVscyBFeHAgJAorCisjIFRoZSBkZWZhdWx0IHJ1bmxldmVsLgoraWQ6NTppbml0ZGVmYXVsdDoKKworIyBCb290LXRpbWUgc3lzdGVtIGNvbmZpZ3VyYXRpb24vaW5pdGlhbGl6YXRpb24gc2NyaXB0LgorIyBUaGlzIGlzIHJ1biBmaXJzdCBleGNlcHQgd2hlbiBib290aW5nIGluIGVtZXJnZW5jeSAoLWIpIG1vZGUuCitzaTo6c3lzaW5pdDovZXRjL2luaXQuZC9yY1MKKworIyBXaGF0IHRvIGRvIGluIHNpbmdsZS11c2VyIG1vZGUuCit+fjpTOndhaXQ6L3NiaW4vc3Vsb2dpbgorCisjIC9ldGMvaW5pdC5kIGV4ZWN1dGVzIHRoZSBTIGFuZCBLIHNjcmlwdHMgdXBvbiBjaGFuZ2UKKyMgb2YgcnVubGV2ZWwuCisjCisjIFJ1bmxldmVsIDAgaXMgaGFsdC4KKyMgUnVubGV2ZWwgMSBpcyBzaW5nbGUtdXNlci4KKyMgUnVubGV2ZWxzIDItNSBhcmUgbXVsdGktdXNlci4KKyMgUnVubGV2ZWwgNiBpcyByZWJvb3QuCisKK2wwOjA6d2FpdDovZXRjL2luaXQuZC9yYyAwCitsMToxOndhaXQ6L2V0Yy9pbml0LmQvcmMgMQorbDI6Mjp3YWl0Oi9ldGMvaW5pdC5kL3JjIDIKK2wzOjM6d2FpdDovZXRjL2luaXQuZC9yYyAzCitsNDo0OndhaXQ6L2V0Yy9pbml0LmQvcmMgNAorbDU6NTp3YWl0Oi9ldGMvaW5pdC5kL3JjIDUKK2w2OjY6d2FpdDovZXRjL2luaXQuZC9yYyA2CisjIE5vcm1hbGx5IG5vdCByZWFjaGVkLCBidXQgZmFsbHRocm91Z2ggaW4gY2FzZSBvZiBlbWVyZ2VuY3kuCit6Njo2OnJlc3Bhd246L3NiaW4vc3Vsb2dpbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC1pbml0dGFiXzIuODhkc2YuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LWluaXR0YWJfMi44OGRzZi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWIxMzI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC1pbml0dGFiXzIuODhkc2YuYmIKQEAgLTAsMCArMSw4MyBAQAorU1VNTUFSWSA9ICJJbml0dGFiIGNvbmZpZ3VyYXRpb24gZm9yIFN5c1Zpbml0IgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjA7bWQ1PTgwMWY4MDk4MGQxNzFkZDY0MjU2MTA4MzNhMjJkYmU2IgorCitQUiA9ICJyMTAiCisKK1NSQ19VUkkgPSAiZmlsZTovL2luaXR0YWIiCisKK1MgPSAiJHtXT1JLRElSfSIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworZG9fY29tcGlsZSgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2luaXR0YWIgJHtEfSR7c3lzY29uZmRpcn0vaW5pdHRhYgorCisgICAgc2V0IC14CisgICAgdG1wPSIke1NFUklBTF9DT05TT0xFU30iCisgICAgZm9yIGkgaW4gJHRtcAorICAgIGRvCisJaj1gZWNobyAke2l9IHwgc2VkIHMvXDsvXCAvZ2AKKwlsYWJlbD1gZWNobyAke2l9IHwgc2VkIC1lICdzL3R0eS8vJyAtZSAncy9eLio7Ly8nIC1lICdzLzsuKi8vJ2AKKwllY2hvICIkbGFiZWw6MTIzNDU6cmVzcGF3bjoke2Jhc2Vfc2JpbmRpcn0vZ2V0dHkgLUwgJHtqfSIgPj4gJHtEfSR7c3lzY29uZmRpcn0vaW5pdHRhYgorICAgIGRvbmUKKworICAgIGlmIFsgIiR7VVNFX1ZUfSIgPSAiMSIgXTsgdGhlbgorICAgICAgICBjYXQgPDxFT0YgPj4ke0R9JHtzeXNjb25mZGlyfS9pbml0dGFiCisjICR7YmFzZV9zYmluZGlyfS9nZXR0eSBpbnZvY2F0aW9ucyBmb3IgdGhlIHJ1bmxldmVscy4KKyMKKyMgVGhlICJpZCIgZmllbGQgTVVTVCBiZSB0aGUgc2FtZSBhcyB0aGUgbGFzdAorIyBjaGFyYWN0ZXJzIG9mIHRoZSBkZXZpY2UgKGFmdGVyICJ0dHkiKS4KKyMKKyMgRm9ybWF0OgorIyAgPGlkPjo8cnVubGV2ZWxzPjo8YWN0aW9uPjo8cHJvY2Vzcz4KKyMKKworRU9GCisKKyAgICAgICAgZm9yIG4gaW4gJHtTWVNWSU5JVF9FTkFCTEVEX0dFVFRZU30KKyAgICAgICAgZG8KKyAgICAgICAgICAgIGVjaG8gIiRuOjEyMzQ1OnJlc3Bhd246JHtiYXNlX3NiaW5kaXJ9L2dldHR5IDM4NDAwIHR0eSRuIiA+PiAke0R9JHtzeXNjb25mZGlyfS9pbml0dGFiCisgICAgICAgIGRvbmUKKyAgICAgICAgZWNobyAiIiA+PiAke0R9JHtzeXNjb25mZGlyfS9pbml0dGFiCisgICAgZmkKK30KKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKyMgcnVuIHRoaXMgb24gdGhlIHRhcmdldAoraWYgWyAieCREIiA9ICJ4IiBdICYmIFsgLWUgL3Byb2MvY29uc29sZXMgXTsgdGhlbgorCXRtcD0iJHtTRVJJQUxfQ09OU09MRVNfQ0hFQ0t9IgorCWZvciBpIGluICR0bXAKKwlkbworCQlqPWBlY2hvICR7aX0gfCBzZWQgcy9eLipcOy8vZ2AKKwkJaWYgWyAteiAiYGdyZXAgJHtqfSAvcHJvYy9jb25zb2xlc2AiIF07IHRoZW4KKwkJCXNlZCAtaSAvXi4qJHtqfSQvZCAvZXRjL2luaXR0YWIKKwkJZmkKKwlkb25lCisJa2lsbCAtSFVQIDEKK2Vsc2UKKwlpZiBbICIke1NFUklBTF9DT05TT0xFU19DSEVDS30iID0gIiIgXTsgdGhlbgorCQlleGl0IDAKKwllbHNlCisJCWV4aXQgMQorCWZpCitmaQorfQorCisjIFVTRV9WVCBhbmQgU0VSSUFMX0NPTlNPTEVTIGFyZSBnZW5lcmFsbHkgZGVmaW5lZCBieSB0aGUgTUFDSElORSAuY29uZi4KKyMgU2V0IFBBQ0tBR0VfQVJDSCBhcHByb3ByaWF0ZWx5LgorUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9pbml0dGFiIgorQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vaW5pdHRhYiIKKworVVNFX1ZUID89ICIxIgorU1lTVklOSVRfRU5BQkxFRF9HRVRUWVMgPz0gIjEiCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LzAwMDEtVGhpcy1maXhlcy1hbi1pc3N1ZS10aGF0LWNsYW5nLXJlcG9ydHMtYWJvdXQtbXV0bGlwbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvMDAwMS1UaGlzLWZpeGVzLWFuLWlzc3VlLXRoYXQtY2xhbmctcmVwb3J0cy1hYm91dC1tdXRsaXBsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNWMxNWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LzAwMDEtVGhpcy1maXhlcy1hbi1pc3N1ZS10aGF0LWNsYW5nLXJlcG9ydHMtYWJvdXQtbXV0bGlwbC5wYXRjaApAQCAtMCwwICsxLDUyIEBACitGcm9tIDM2YWM5N2JmZTUxNzk3NDU4NDQyYTYwMzUyMTlhNTA0YTQyZTcwM2EgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMSBBdWcgMjAxNSAxMDo1Njo0MCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBUaGlzIGZpeGVzIGFuIGlzc3VlIHRoYXQgY2xhbmcgcmVwb3J0cyBhYm91dCBtdXRsaXBsZSBvdXRwdXQKKyBmaWxlcworCitJc3N1ZSBpcyB0aGF0IHdlIGFyZSBwYXNzaW5nIC5oIGZpbGUgdG8gbGluayBzdGVwIGFzIHNlZW4gYmVsb3cuCisKK3wgYXJtLW9lLWxpbnV4LWdudWVhYmktY2xhbmcgIC1tYXJjaD1hcm12Ny1hIC1tdGh1bWIgIC1tZmxvYXQtYWJpPWhhcmQKKy1tZnB1PW5lb24tdmZwdjQgLW10dW5lPWNvcnRleC1hNyAtRF9fZXh0ZXJuX2Fsd2F5c19pbmxpbmU9aW5saW5lCistbm8taW50ZWdyYXRlZC1hcworLS1zeXNyb290PS9tbnQvaG9tZS9rcmFqL3dvcmsvYW5nc3Ryb20vc291cmNlcy9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcmFzcGJlcnJ5cGkyCistV2wsLU8xIC1XbCwtLWhhc2gtc3R5bGU9Z251IC1XbCwtLWFzLW5lZWRlZCAgaGFsdC5vIGlmZG93bi5vIGhkZG93bi5vCit1dG1wLm8gcmVib290LmggICAtbyBoYWx0Cit8IGNsYW5nLTMuNzogZXJyb3I6IGNhbm5vdCBzcGVjaWZ5IC1vIHdoZW4gZ2VuZXJhdGluZyBtdWx0aXBsZSBvdXRwdXQKK2ZpbGVzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL01ha2VmaWxlIHwgNiArKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlIGIvc3JjL01ha2VmaWxlCitpbmRleCBlNzdlZDVmLi5hNmY5ZjQwIDEwMDY0NAorLS0tIGEvc3JjL01ha2VmaWxlCisrKysgYi9zcmMvTWFrZWZpbGUKK0BAIC0xMDMsOSArMTAzLDkgQEAgYWxsOgkJJChCSU4pICQoU0JJTikgJChVU1JCSU4pCisgaW5pdDoJCUxETElCUyArPSAkKElOSVRMSUJTKSAkKFNUQVRJQykKKyBpbml0OgkJaW5pdC5vIGluaXRfdXRtcC5vCisgCistaGFsdDoJCWhhbHQubyBpZmRvd24ubyBoZGRvd24ubyB1dG1wLm8gcmVib290LmgKKytoYWx0OgkJaGFsdC5vIGlmZG93bi5vIGhkZG93bi5vIHV0bXAubworIAorLWxhc3Q6CQlsYXN0Lm8gb2xkdXRtcC5oCisrbGFzdDoJCWxhc3QubworIAorIG1lc2c6CQltZXNnLm8KKyAKK0BAIC0xMjAsNyArMTIwLDcgQEAgc3Vsb2dpbjoJc3Vsb2dpbi5vCisgCisgd2FsbDoJCWRvd2FsbC5vIHdhbGwubworIAorLXNodXRkb3duOglkb3dhbGwubyBzaHV0ZG93bi5vIHV0bXAubyByZWJvb3QuaAorK3NodXRkb3duOglkb3dhbGwubyBzaHV0ZG93bi5vIHV0bXAubworIAorIGJvb3Rsb2dkOglMRExJQlMgKz0gLWx1dGlsCisgYm9vdGxvZ2Q6CWJvb3Rsb2dkLm8KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC8wMV9ib290bG9nZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvMDFfYm9vdGxvZ2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY4OWQ5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvMDFfYm9vdGxvZ2QKQEAgLTAsMCArMSBAQAorZiByb290IHJvb3QgMDY0NCAvdmFyL2xvZy9ib290IG5vbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvYm9vdGxvZ2QuaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvYm9vdGxvZ2QuaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZjVhYTQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC9ib290bG9nZC5pbml0CkBAIC0wLDAgKzEsOTggQEAKKyMhIC9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIGJvb3Rsb2dkCisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6ICAgICAgMiAzIDQgNQorIyBTaG9ydC1EZXNjcmlwdGlvbjogT25lIG9mIHRoZSBmaXJzdCBzY3JpcHRzIHRvIGJlIGV4ZWN1dGVkLiBTdGFydHMgb3Igc3RvcHMKKyMgICAgICAgICAgICAgICB0aGUgYm9vdGxvZ2QgbG9nIHByb2dyYW0uIElmIHRoaXMgc2NyaXB0IGlzIGNhbGxlZCBhcworIyAgICAgICAgICAgICAgICJzdG9wLWJvb3Rsb2dkIiwgaXQgd2lsbCBzdG9wIHRoZSBkYWVtb24gaW5zdGVhZCBvZgorIyAgICAgICAgICAgICAgIHN0YXJ0aW5nIGl0IGV2ZW4gd2hlbiBjYWxsZWQgd2l0aCB0aGUgInN0YXJ0IiBhcmd1bWVudC4KKyMKKyMjIyBFTkQgSU5JVCBJTkZPCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KK0RBRU1PTj0vc2Jpbi9ib290bG9nZAorTkFNRT1ib290bG9nZAorREVTQz0iQm9vdGxvZyBkYWVtb24iCisKKyMgc291cmNlIGZ1bmN0aW9uIGxpYnJhcnkKKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK3Rlc3QgLWYgJERBRU1PTiB8fCBleGl0IDAKKworWyAtciAvZXRjL2RlZmF1bHQvYm9vdGxvZ2QgXSAmJiAuIC9ldGMvZGVmYXVsdC9ib290bG9nZAorCisjIyBzZXQgLWUgIyBub3QgbmVlZGVkCisKK2Nhc2UgIiRCT09UTE9HRF9FTkFCTEUiIGluCisJW05uXSopCisJCWV4aXQgMAorCQk7OworZXNhYworCitTVE9QUEVSPQorQUNUSU9OPSIkMSIKK2Nhc2UgIiQwIiBpbgorCSpzdG9wLWJvb3Rsb2cqKQorCQlTVE9QUEVSPVkKKwkJaWYgWyAiJEFDVElPTiIgPSBzdGFydCBdCisJCXRoZW4KKwkJCUFDVElPTj1zdG9wCisJCWZpCisJCTs7Citlc2FjCisKK2Nhc2UgIiRBQ1RJT04iIGluCisJc3RhcnQpCisJCVsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvIC1uICJTdGFydGluZyAkREVTQzogIgorCQlpZiBbIC1kIC9wcm9jLzEvLiBdCisJCXRoZW4KKwkJCXVtYXNrIDAyNworCQkJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IFwKKwkJCQktLWV4ZWMgJERBRU1PTiAtLSAtciAtYworCQllbHNlCisJCQkkREFFTU9OIC1yIC1jCisJCWZpCisJCVsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICIkTkFNRS4iCisJCTs7CisJc3RvcCkKKwkJIyBzdG9wIG1heSBnZXQgY2FsbGVkIGR1cmluZyBib290dXAsIHNvIGxldCBpdCBob25vcgorCQkjIHJjUyBWRVJCT1NFIHNldHRpbmcKKwkJWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gLW4gIlN0b3BwaW5nICRERVNDOiAiCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tZXhlYyAkREFFTU9OCisKKwkJaWYgWyAiJFNUT1BQRVIiIF0gJiYgWyAiJCh3aGljaCBzYXZlbG9nIDI+L2Rldi9udWxsKSIgXSAmJiBcCisJCSAgIFsgLWYgL3Zhci9sb2cvYm9vdCBdICYmIFsgLWYgL3Zhci9sb2cvYm9vdH4gXQorCQl0aGVuCisJCQljZCAvdmFyL2xvZworCQkJY2hncnAgYWRtIGJvb3QKKwkJCXNhdmVsb2cgLXAgLWMgNSBib290ID4gL2Rldi9udWxsIDI+JjEKKwkJCW12IGJvb3QuMCBib290CisJCQltdiBib290fiBib290LjAKKwkJZmkKKworCQlbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiJE5BTUUuIgorCQk7OworCSByZXN0YXJ0fGZvcmNlLXJlbG9hZCkKKwkJZWNobyAtbiAiUmVzdGFydGluZyAkREVTQzogIgorCQlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLWV4ZWMgJERBRU1PTgorCQlzbGVlcCAxCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLWV4ZWMgJERBRU1PTgorCQllY2hvICIkTkFNRS4iCisJCTs7CisJc3RhdHVzKQorCQlzdGF0dXMgJERBRU1PTgorCQlleGl0ICQ/CisJCTs7CisJKikKKwkJTj0kezAjIyovfQorCQlOPSR7TiNbU0tdPz99CisJCWVjaG8gIlVzYWdlOiAkTiB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydHxmb3JjZS1yZWxvYWR9IiA+JjIKKwkJZXhpdCAxCisJCTs7Citlc2FjCisKK2V4aXQgMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0L3JjIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC9yYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43Y2E0MWFlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC9yYwpAQCAtMCwwICsxLDE4MiBAQAorIyEvYmluL3NoCisjCisjIHJjCQlUaGlzIGZpbGUgaXMgcmVzcG9uc2libGUgZm9yIHN0YXJ0aW5nL3N0b3BwaW5nCisjCQlzZXJ2aWNlcyB3aGVuIHRoZSBydW5sZXZlbCBjaGFuZ2VzLgorIworIwkJT3B0aW1pemF0aW9uIGZlYXR1cmU6CisjCQlBIHN0YXJ0dXAgc2NyaXB0IGlzIF9ub3RfIHJ1biB3aGVuIHRoZSBzZXJ2aWNlIHdhcworIwkJcnVubmluZyBpbiB0aGUgcHJldmlvdXMgcnVubGV2ZWwgYW5kIGl0IHdhc24ndCBzdG9wcGVkCisjCQlpbiB0aGUgcnVubGV2ZWwgdHJhbnNpdGlvbiAobW9zdCBEZWJpYW4gc2VydmljZXMgZG9uJ3QKKyMJCWhhdmUgSz8/IGxpbmtzIGluIHJjezEsMiwzLDQsNX0gKQorIworIyBBdXRob3I6CU1pcXVlbCB2YW4gU21vb3JlbmJ1cmcgPG1pcXVlbHNAY2lzdHJvbi5ubD4KKyMJCUJydWNlIFBlcmVucyA8QnJ1Y2VAUGl4YXIuY29tPgorIworIyBWZXJzaW9uOglAKCMpcmMgIDIuNzggIDA3LU5vdi0xOTk5ICBtaXF1ZWxzQGNpc3Ryb24ubmwKKyMKKworLiAvZXRjL2RlZmF1bHQvcmNTCitleHBvcnQgVkVSQk9TRQorCitzdGFydHVwX3Byb2dyZXNzKCkgeworICAgIHN0ZXA9JCgoJHN0ZXAgKyAkc3RlcF9jaGFuZ2UpKQorICAgIGlmIFsgIiRudW1fc3RlcHMiICE9ICIwIiBdOyB0aGVuCisgICAgICAgIHByb2dyZXNzPSQoKCgkc3RlcCAqICRwcm9ncmVzc19zaXplIC8gJG51bV9zdGVwcykgKyAkZmlyc3Rfc3RlcCkpCisgICAgZWxzZQorICAgICAgICBwcm9ncmVzcz0kcHJvZ3Jlc3Nfc2l6ZQorICAgIGZpCisgICAgI2VjaG8gIlBST0dSRVNTIGlzICRwcm9ncmVzcyAkcnVubGV2ZWwgJGZpcnN0X3N0ZXAgKyAoJHN0ZXAgb2YgJG51bV9zdGVwcykgJHN0ZXBfY2hhbmdlICRwcm9ncmVzc19zaXplIgorICAgICNpZiB0eXBlIHBzcGxhc2gtd3JpdGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIyAgICBUTVBESVI9L21udC8ucHNwbGFzaCBwc3BsYXNoLXdyaXRlICJQUk9HUkVTUyAkcHJvZ3Jlc3MiIHx8IHRydWUKKyAgICAjZmkKKyAgICBpZiBbIC1lIC9tbnQvLnBzcGxhc2gvcHNwbGFzaF9maWZvIF07IHRoZW4KKyAgICAgICAgZWNobyAiUFJPR1JFU1MgJHByb2dyZXNzIiA+IC9tbnQvLnBzcGxhc2gvcHNwbGFzaF9maWZvCisgICAgZmkKK30KKworCisjCisjIFN0YXJ0IHNjcmlwdCBvciBwcm9ncmFtLgorIworc3RhcnR1cCgpIHsKKyAgIyBIYW5kbGUgdmVyYm9zaXR5CisgIFsgIiRWRVJCT1NFIiA9IHZlcnkgXSAmJiBlY2hvICJJTklUOiBSdW5uaW5nICRALi4uIgorCisgIGNhc2UgIiQxIiBpbgorCSouc2gpCisJCSMgU291cmNlIHNoZWxsIHNjcmlwdCBmb3Igc3BlZWQuCisJCSgKKwkJCXRyYXAgLSBJTlQgUVVJVCBUU1RQCisJCQlzY3JpcHRuYW1lPSQxCisJCQlzaGlmdAorCQkJLiAkc2NyaXB0bmFtZQorCQkpCisJCTs7CisJKikKKwkJIiRAIgorCQk7OworICBlc2FjCisgIHN0YXJ0dXBfcHJvZ3Jlc3MKK30KKworICAjIElnbm9yZSBDVFJMLUMgb25seSBpbiB0aGlzIHNoZWxsLCBzbyB3ZSBjYW4gaW50ZXJydXB0IHN1YnByb2Nlc3Nlcy4KKyAgdHJhcCAiOiIgSU5UIFFVSVQgVFNUUAorCisgICMgU2V0IG9ubGNyIHRvIGF2b2lkIHN0YWlyY2FzZSBlZmZlY3QuCisgIHN0dHkgb25sY3IgMD4mMQorCisgICMgTGltaXQgc3RhY2sgc2l6ZSBmb3Igc3RhcnR1cCBzY3JpcHRzCisgIFsgIiRTVEFDS19TSVpFIiA9PSAiIiBdIHx8IHVsaW1pdCAtUyAtcyAkU1RBQ0tfU0laRQorCisgICMgTm93IGZpbmQgb3V0IHdoYXQgdGhlIGN1cnJlbnQgYW5kIHdoYXQgdGhlIHByZXZpb3VzIHJ1bmxldmVsIGFyZS4KKworICBydW5sZXZlbD0kUlVOTEVWRUwKKyAgIyBHZXQgZmlyc3QgYXJndW1lbnQuIFNldCBuZXcgcnVubGV2ZWwgdG8gdGhpcyBhcmd1bWVudC4KKyAgWyAiJDEiICE9ICIiIF0gJiYgcnVubGV2ZWw9JDEKKyAgaWYgWyAiJHJ1bmxldmVsIiA9ICIiIF0KKyAgdGhlbgorCWVjaG8gIlVzYWdlOiAkMCA8cnVubGV2ZWw+IiA+JjIKKwlleGl0IDEKKyAgZmkKKyAgcHJldmlvdXM9JFBSRVZMRVZFTAorICBbICIkcHJldmlvdXMiID0gIiIgXSAmJiBwcmV2aW91cz1OCisKKyAgZXhwb3J0IHJ1bmxldmVsIHByZXZpb3VzCisKKyAgIyBJcyB0aGVyZSBhbiByYyBkaXJlY3RvcnkgZm9yIHRoaXMgbmV3IHJ1bmxldmVsPworICBpZiBbIC1kIC9ldGMvcmMkcnVubGV2ZWwuZCBdCisgIHRoZW4KKwkjIEZpbmQgb3V0IHdoZXJlIGluIHRoZSBwcm9ncmVzcyBiYXIgdGhlIGluaXRyYW1mcyBnb3QgdG8uCisJUFJPR1JFU1NfU1RBVEU9MAorCSNpZiBbIC1mIC9kZXYvLmluaXRyYW1mcy9wcm9ncmVzc19zdGF0ZSBdOyB0aGVuCisJIyAgICAuIC9kZXYvLmluaXRyYW1mcy9wcm9ncmVzc19zdGF0ZQorCSNmaQorCisJIyBTcGxpdCB0aGUgcmVtYWluaW5nIHBvcnRpb24gb2YgdGhlIHByb2dyZXNzIGJhciBpbnRvIHRoaXJkcworCXByb2dyZXNzX3NpemU9JCgoKDEwMCAtICRQUk9HUkVTU19TVEFURSkgLyAzKSkKKworCWNhc2UgIiRydW5sZXZlbCIgaW4KKwkJMHw2KQorCQkJIyBDb3VudCBkb3duIGZyb20gLTEwMCB0byAwIGFuZCB1c2UgdGhlIGVudGlyZSBiYXIKKwkJCWZpcnN0X3N0ZXA9LTEwMAorCQkJcHJvZ3Jlc3Nfc2l6ZT0xMDAKKwkJCXN0ZXBfY2hhbmdlPTEKKwkJCTs7CisJICAgICAgICBTKQorCQkJIyBCZWdpbiB3aGVyZSB0aGUgaW5pdHJhbWZzIGxlZnQgb2ZmIGFuZCB1c2UgMi8zCisJCQkjIG9mIHRoZSByZW1haW5pbmcgc3BhY2UKKwkJCWZpcnN0X3N0ZXA9JFBST0dSRVNTX1NUQVRFCisJCQlwcm9ncmVzc19zaXplPSQoKCRwcm9ncmVzc19zaXplICogMikpCisJCQlzdGVwX2NoYW5nZT0xCisJCQk7OworCQkqKQorCQkJIyBCZWdpbiB3aGVyZSByY1MgbGVmdCBvZmYgYW5kIHVzZSB0aGUgZmluYWwgMS8zIG9mCisJCQkjIHRoZSBzcGFjZSAoYnkgbGVhdmluZyBwcm9ncmVzc19zaXplIHVuY2hhbmdlZCkKKwkJCWZpcnN0X3N0ZXA9JCgoJHByb2dyZXNzX3NpemUgKiAyICsgJFBST0dSRVNTX1NUQVRFKSkKKwkJCXN0ZXBfY2hhbmdlPTEKKwkJCTs7CisJZXNhYworCisJbnVtX3N0ZXBzPTAKKwlmb3IgcyBpbiAvZXRjL3JjJHJ1bmxldmVsLmQvW1NLXSo7IGRvCisgICAgICAgICAgICBjYXNlICIke3MjIy9ldGMvcmMkcnVubGV2ZWwuZC9TPz99IiBpbgorICAgICAgICAgICAgICAgIGdkbXx4ZG18a2RtfHJlYm9vdHxoYWx0KQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgbnVtX3N0ZXBzPSQoKCRudW1fc3RlcHMgKyAxKSkKKyAgICAgICAgZG9uZQorICAgICAgICBzdGVwPTAKKworCSMgRmlyc3QsIHJ1biB0aGUgS0lMTCBzY3JpcHRzLgorCWlmIFsgJHByZXZpb3VzICE9IE4gXQorCXRoZW4KKwkJZm9yIGkgaW4gL2V0Yy9yYyRydW5sZXZlbC5kL0tbMC05XVswLTldKgorCQlkbworCQkJIyBDaGVjayBpZiB0aGUgc2NyaXB0IGlzIHRoZXJlLgorCQkJWyAhIC1mICRpIF0gJiYgY29udGludWUKKworCQkJIyBTdG9wIHRoZSBzZXJ2aWNlLgorCQkJc3RhcnR1cCAkaSBzdG9wCisJCWRvbmUKKwlmaQorCisJIyBOb3cgcnVuIHRoZSBTVEFSVCBzY3JpcHRzIGZvciB0aGlzIHJ1bmxldmVsLgorCWZvciBpIGluIC9ldGMvcmMkcnVubGV2ZWwuZC9TKgorCWRvCisJCVsgISAtZiAkaSBdICYmIGNvbnRpbnVlCisKKwkJaWYgWyAkcHJldmlvdXMgIT0gTiBdICYmIFsgJHByZXZpb3VzICE9IFMgXQorCQl0aGVuCisJCQkjCisJCQkjIEZpbmQgc3RhcnQgc2NyaXB0IGluIHByZXZpb3VzIHJ1bmxldmVsIGFuZAorCQkJIyBzdG9wIHNjcmlwdCBpbiB0aGlzIHJ1bmxldmVsLgorCQkJIworCQkJc3VmZml4PSR7aSMvZXRjL3JjJHJ1bmxldmVsLmQvU1swLTldWzAtOV19CisJCQlzdG9wPS9ldGMvcmMkcnVubGV2ZWwuZC9LWzAtOV1bMC05XSRzdWZmaXgKKwkJCXByZXZpb3VzX3N0YXJ0PS9ldGMvcmMkcHJldmlvdXMuZC9TWzAtOV1bMC05XSRzdWZmaXgKKwkJCSMKKwkJCSMgSWYgdGhlcmUgaXMgYSBzdGFydCBzY3JpcHQgaW4gdGhlIHByZXZpb3VzIGxldmVsCisJCQkjIGFuZCBfbm9fIHN0b3Agc2NyaXB0IGluIHRoaXMgbGV2ZWwsIHdlIGRvbid0CisJCQkjIGhhdmUgdG8gcmUtc3RhcnQgdGhlIHNlcnZpY2UuCisJCQkjCisJCQlbIC1mICRwcmV2aW91c19zdGFydCBdICYmIFsgISAtZiAkc3RvcCBdICYmIGNvbnRpbnVlCisJCWZpCisJCWNhc2UgIiRydW5sZXZlbCIgaW4KKwkJCTB8NikKKwkJCQlzdGFydHVwICRpIHN0b3AKKwkJCQk7OworCQkJKikKKwkJCQlzdGFydHVwICRpIHN0YXJ0CisJCQkJOzsKKwkJZXNhYworCWRvbmUKKyAgZmkKKworI1VuY29tbWVudCB0byBjYXVzZSBwc3BsYXNoIHRvIGV4aXQgbWFudWFsbHksIG90aGVyd2lzZSBpdCBleGl0cyB3aGVuIGl0IHNlZXMgYSBWQyBzd2l0Y2gKK2lmIFsgIngkcnVubGV2ZWwiICE9ICJ4UyIgXSAmJiBbICEgLXggL2V0Yy9yYyR7cnVubGV2ZWx9LmQvUz8/eHNlcnZlci1ub2RtIF07IHRoZW4KKyAgICBpZiB0eXBlIHBzcGxhc2gtd3JpdGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgIFRNUERJUj0vbW50Ly5wc3BsYXNoIHBzcGxhc2gtd3JpdGUgIlFVSVQiIHx8IHRydWUKKyAgICAJdW1vdW50IC1sIC9tbnQvLnBzcGxhc2gKKyAgICBmaQorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvcmNTIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC9yY1MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDgwYjA0ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvcmNTCkBAIC0wLDAgKzEsMzQgQEAKKyMhL2Jpbi9zaAorIworIyByY1MJCUNhbGwgYWxsIFM/Pyogc2NyaXB0cyBpbiAvZXRjL3JjUy5kIGluCisjCQludW1lcmljYWwvYWxwaGFiZXRpY2FsIG9yZGVyLgorIworIyBWZXJzaW9uOglAKCMpL2V0Yy9pbml0LmQvcmNTICAyLjc2ICAxOS1BcHItMTk5OSAgbWlxdWVsc0BjaXN0cm9uLm5sCisjCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KK3J1bmxldmVsPVMKK3ByZXZsZXZlbD1OCit1bWFzayAwMjIKK2V4cG9ydCBQQVRIIHJ1bmxldmVsIHByZXZsZXZlbAorCisjCU1ha2Ugc3VyZSBwcm9jIGlzIG1vdW50ZWQKKyMKK1sgLWQgIi9wcm9jLzEiIF0gfHwgbW91bnQgL3Byb2MKKworIworIwlTb3VyY2UgZGVmYXVsdHMuCisjCisuIC9ldGMvZGVmYXVsdC9yY1MKKworIworIwlUcmFwIENUUkwtQyAmYyBvbmx5IGluIHRoaXMgc2hlbGwgc28gd2UgY2FuIGludGVycnVwdCBzdWJwcm9jZXNzZXMuCisjCit0cmFwICI6IiBJTlQgUVVJVCBUU1RQCisKKyMKKyMJQ2FsbCBhbGwgcGFydHMgaW4gb3JkZXIuCisjCitleGVjIC9ldGMvaW5pdC5kL3JjIFMKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0L3JjUy1kZWZhdWx0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC9yY1MtZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDljZGY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC9yY1MtZGVmYXVsdApAQCAtMCwwICsxLDI5IEBACisjCisjCURlZmF1bHRzIGZvciB0aGUgYm9vdCBzY3JpcHRzIGluIC9ldGMvcmNTLmQKKyMKKworIyBUaW1lIGZpbGVzIGluIC90bXAgYXJlIGtlcHQgaW4gZGF5cy4KK1RNUFRJTUU9MAorIyBTZXQgdG8geWVzIGlmIHlvdSB3YW50IHN1bG9naW4gdG8gYmUgc3Bhd25lZCBvbiBib290dXAKK1NVTE9HSU49bm8KKyMgU2V0IHRvIG5vIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gbG9naW4gb3ZlciB0ZWxuZXQvcmxvZ2luCisjIGJlZm9yZSBzeXN0ZW0gc3RhcnR1cCBpcyBjb21wbGV0ZSAoYXMgc29vbiBhcyBpbmV0ZCBpcyBzdGFydGVkKQorREVMQVlMT0dJTj1ubworIyBBc3N1bWUgdGhhdCB0aGUgQklPUyBjbG9jayBpcyBzZXQgdG8gVVRDIHRpbWUgKHJlY29tbWVuZGVkKQorVVRDPXllcworIyBTZXQgVkVSQk9TRSB0byAibm8iIGlmIHlvdSB3b3VsZCBsaWtlIGEgbW9yZSBxdWlldCBib290dXAuCitWRVJCT1NFPW5vCisjIFNldCBFRElUTU9URCB0byAibm8iIGlmIHlvdSBkb24ndCB3YW50IC9ldGMvbW90ZCB0byBiZSBlZGl0ZWQgYXV0b21hdGljYWxseQorRURJVE1PVEQ9bm8KKyMgV2hldGhlciB0byBmc2NrIHJvb3Qgb24gYm9vdAorRU5BQkxFX1JPT1RGU19GU0NLPW5vCisjIFNldCBGU0NLRklYIHRvICJ5ZXMiIGlmIHlvdSB3YW50IHRvIGFkZCAiLXkiIHRvIHRoZSBmc2NrIGF0IHN0YXJ0dXAuCitGU0NLRklYPXllcworIyBTZXQgVElDS0FESiB0byB0aGUgY29ycmVjdCB0aWNrIHZhbHVlIGZvciB0aGlzIHNwZWNpZmljIG1hY2hpbmUKKyNUSUNLQURKPTEwMDAwCisjIEVuYWJsZSBjYWNoaW5nIGluIHBvcHVsYXRlLXZvbGF0aWxlLnNoCitWT0xBVElMRV9FTkFCTEVfQ0FDSEU9eWVzCisjIEluZGljYXRlIHdoZXRoZXIgdGhlIHJvb3RmcyBpcyBpbnRlbmRlZCB0byBiZSByZWFkLW9ubHkgb3Igbm90LgorIyBTZXR0aW5nIFJPT1RGU19SRUFEX09OTFkgdG8geWVzIGFuZCByZWJvb3Rpbmcgd2lsbCBnaXZlIHlvdSBhIHJlYWQtb25seSByb290ZnMuCisjIE5vcm1hbGx5IHlvdSBzaG91bGQgbm90IGNoYW5nZSB0aGlzIHZhbHVlLgorUk9PVEZTX1JFQURfT05MWT1ubwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdF8yLjg4ZHNmLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdF8yLjg4ZHNmLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZmUzOWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0XzIuODhkc2YuYmIKQEAgLTAsMCArMSwxMDggQEAKK1NVTU1BUlkgPSAiU3lzdGVtLVYgbGlrZSBpbml0IgorREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIGlzIHJlcXVpcmVkIHRvIGJvb3QgaW4gbW9zdCBjb25maWd1cmF0aW9ucy4gIEl0IHByb3ZpZGVzIHRoZSAvc2Jpbi9pbml0IHByb2dyYW0uICBUaGlzIGlzIHRoZSBmaXJzdCBwcm9jZXNzIHN0YXJ0ZWQgb24gYm9vdCwgYW5kIHRoZSBsYXN0IHByb2Nlc3MgdGVybWluYXRlZCBiZWZvcmUgdGhlIHN5c3RlbSBoYWx0cy4iCitIT01FUEFHRSA9ICJodHRwOi8vc2F2YW5uYWgubm9uZ251Lm9yZy9wcm9qZWN0cy9zeXN2aW5pdC8iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlSSUdIVDtlbmRsaW5lPTE1O21kNT0zNDljODcyZTAwNjYxNTVlMTgxOGI3ODY5Mzg4NzZhNCIKK1BSID0gInIxNCIKKworUkRFUEVORFNfJHtQTn0gPSAiJHtQTn0taW5pdHRhYiIKKworU1JDX1VSSSA9ICIke1NBVkFOTkFIX0dOVV9NSVJST1J9L3N5c3Zpbml0L3N5c3Zpbml0LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vaW5zdGFsbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jcnlwdC1saWIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGlkb2YtYWRkLW0tb3B0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVGhpcy1maXhlcy1hbi1pc3N1ZS10aGF0LWNsYW5nLXJlcG9ydHMtYWJvdXQtbXV0bGlwbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yY1MtZGVmYXVsdCBcCisgICAgICAgICAgIGZpbGU6Ly9yYyBcCisgICAgICAgICAgIGZpbGU6Ly9yY1MgXAorICAgICAgICAgICBmaWxlOi8vYm9vdGxvZ2QuaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly8wMV9ib290bG9nZCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2ZWRhOGE5N2I4NmUwYTZmNTlkYWJiZjI1MjAyYWE2ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MGJiYzhjMWUxNzkyMDU2ZTIzNzYxZDIyOTYwYjMwYmIxM2VjY2MyY2FiZmY4YzczMTBhMDFmNGQ1ZGYxNTE5IgorCitTID0gIiR7V09SS0RJUn0vc3lzdmluaXQtJHtQVn0iCitCID0gIiR7U30vc3JjIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKK0RFUEVORFNfYXBwZW5kID0gIiB1cGRhdGUtcmMuZC1uYXRpdmUgYmFzZS1wYXNzd2QiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImluaXQgbW91bnRwb2ludCBoYWx0IHJlYm9vdCBydW5sZXZlbCBzaHV0ZG93biBwb3dlcm9mZiBsYXN0IGxhc3RiIG1lc2cgdXRtcGR1bXAgd2FsbCIKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMjAwIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaW5pdF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2luaXQiCitBTFRFUk5BVElWRV9QUklPUklUWVtpbml0XSA9ICI1MCIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW21vdW50cG9pbnRdID0gIiR7YmFzZV9iaW5kaXJ9L21vdW50cG9pbnQiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaGFsdF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2hhbHQiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcmVib290XSA9ICIke2Jhc2Vfc2JpbmRpcn0vcmVib290IgorQUxURVJOQVRJVkVfTElOS19OQU1FW3J1bmxldmVsXSA9ICIke2Jhc2Vfc2JpbmRpcn0vcnVubGV2ZWwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc2h1dGRvd25dID0gIiR7YmFzZV9zYmluZGlyfS9zaHV0ZG93biIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtwb3dlcm9mZl0gPSAiJHtiYXNlX3NiaW5kaXJ9L3Bvd2Vyb2ZmIgorCitBTFRFUk5BVElWRV8ke1BOfS1waWRvZiA9ICJwaWRvZiIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtwaWRvZl0gPSAiJHtiYXNlX2JpbmRpcn0vcGlkb2YiCisKK0FMVEVSTkFUSVZFXyR7UE59LXN1bG9naW4gPSAic3Vsb2dpbiIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzdWxvZ2luXSA9ICIke2Jhc2Vfc2JpbmRpcn0vc3Vsb2dpbiIKKworQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gIm1vdW50cG9pbnQuMSBsYXN0LjEgbWVzZy4xIHdhbGwuMSBzdWxvZ2luLjggdXRtcGR1bXAuMSIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2xhc3QuMV0gPSAiJHttYW5kaXJ9L21hbjEvbGFzdC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW21lc2cuMV0gPSAiJHttYW5kaXJ9L21hbjEvbWVzZy4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW21vdW50cG9pbnQuMV0gPSAiJHttYW5kaXJ9L21hbjEvbW91bnRwb2ludC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N1bG9naW4uOF0gPSAiJHttYW5kaXJ9L21hbjgvc3Vsb2dpbi44IgorQUxURVJOQVRJVkVfTElOS19OQU1FW3V0bXBkdW1wLjFdID0gIiR7bWFuZGlyfS9tYW4xL3V0bXBkdW1wLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbd2FsbC4xXSA9ICIke21hbmRpcn0vbWFuMS93YWxsLjEiCisKK1BBQ0tBR0VTID0rICJzeXN2aW5pdC1waWRvZiBzeXN2aW5pdC1zdWxvZ2luIgorRklMRVNfJHtQTn0gKz0gIiR7YmFzZV9zYmluZGlyfS8qICR7YmFzZV9iaW5kaXJ9LyoiCitGSUxFU19zeXN2aW5pdC1waWRvZiA9ICIke2Jhc2VfYmluZGlyfS9waWRvZi5zeXN2aW5pdCAke2Jhc2Vfc2JpbmRpcn0va2lsbGFsbDUiCitGSUxFU19zeXN2aW5pdC1zdWxvZ2luID0gIiR7YmFzZV9zYmluZGlyfS9zdWxvZ2luLnN5c3Zpbml0IgorCitSREVQRU5EU18ke1BOfSArPSAic3lzdmluaXQtcGlkb2YgaW5pdHNjcmlwdHMtZnVuY3Rpb25zIgorCitDRkxBR1NfcHJlcGVuZCA9ICItRF9HTlVfU09VUkNFICIKK2V4cG9ydCBMQ1JZUFQgPSAiLWxjcnlwdCIKK0VYVFJBX09FTUFLRSArPSAiJ2Jhc2VfYmluZGlyPSR7YmFzZV9iaW5kaXJ9JyBcCisJCSAnYmFzZV9zYmluZGlyPSR7YmFzZV9zYmluZGlyfScgXAorCQkgJ2JpbmRpcj0ke2JpbmRpcn0nIFwKKwkJICdzYmluZGlyPSR7c2JpbmRpcn0nIFwKKwkJICdzeXNjb25mZGlyPSR7c3lzY29uZmRpcn0nIFwKKwkJICdpbmNsdWRlZGlyPSR7aW5jbHVkZWRpcn0nIFwKKwkJICdtYW5kaXI9JHttYW5kaXJ9JyIKKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAnUk9PVD0ke0R9JyBpbnN0YWxsCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9IFwKKwkJICAgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdCBcCisJCSAgICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWZvciBsZXZlbCBpbiBTIDAgMSAyIDMgNCA1IDY7IGRvCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcmMkbGV2ZWwuZAorCWRvbmUKKworCWluc3RhbGwgLW0gMDY0NCAgICAke1dPUktESVJ9L3JjUy1kZWZhdWx0CSR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvcmNTCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vcmMJCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L3JjUwkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vYm9vdGxvZ2QuaW5pdCAgICAgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2Jvb3Rsb2dkCisJbG4gLXNmIGJvb3Rsb2dkICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9zdG9wLWJvb3Rsb2dkCisKKwl1cGRhdGUtcmMuZCAtciAke0R9IGJvb3Rsb2dkIHN0YXJ0IDA3IFMgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gc3RvcC1ib290bG9nZCBzdGFydCA5OSAyIDMgNCA1IC4KKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS8wMV9ib290bG9nZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCisJY2hvd24gcm9vdC5zaHV0ZG93biAke0R9JHtiYXNlX3NiaW5kaXJ9L2hhbHQgJHtEfSR7YmFzZV9zYmluZGlyfS9zaHV0ZG93bgorCWNobW9kIG8teCx1K3MgJHtEfSR7YmFzZV9zYmluZGlyfS9oYWx0ICR7RH0ke2Jhc2Vfc2JpbmRpcn0vc2h1dGRvd24KK30KKworcHl0aG9uICgpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIidzeXN2aW5pdCcgbm90IGluIERJU1RST19GRUFUVVJFUyIpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy9mdW5jcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3NpdGVfY29uZmlnL2Z1bmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYzg1MzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy9mdW5jcwpAQCAtMCwwICsxLDQ3NCBAQAorYTY0bAorYWJzCithY2Nlc3MKK19fYWRqdGltZXgKK2FsYXJtCithbHBoYXNvcnQKK2FyZ3pfYXBwZW5kCitfX2FyZ3pfY291bnQKK2FyZ3pfY3JlYXRlX3NlcAorYXJnel9pbnNlcnQKK19fYXJnel9uZXh0Cithcmd6X25leHQKK19fYXJnel9zdHJpbmdpZnkKK2FyZ3pfc3RyaW5naWZ5Cithc3ByaW50ZgorYXRleGl0CithdG9mCithdG9pCitiY21wCitiY29weQorYmluZHJlc3Zwb3J0CitiaW5kX3RleHRkb21haW5fY29kZXNldAorYnRvd2MKK2J6ZXJvCitjYWxsb2MKK2Nhbm9uaWNhbGl6ZV9maWxlX25hbWUKK2NhdGdldHMKK2NmZ2V0b3NwZWVkCitjZnNldGlzcGVlZAorY2ZzZXRzcGVlZAorY2htb2QKK2Nob3duCitjaHJvb3QKK2Nsb2NrCitjbG9zZQorY2xvc2VkaXIKK2Nsb3NlbG9nCitjb25mc3RyCitjb25uZWN0CitkYWVtb24KK2RjZ2V0dGV4dAorZGlmZnRpbWUKK2RpcmZkCitkaXJuYW1lCitkbmdldHRleHQKK2R1cDIKK2VjdnQKK2VuZGdyZW50CitlbmRtbnRlbnQKK2VuZHB3ZW50CitlbmR1dGVudAorZW5kdXR4ZW50CitlcG9sbF9jdGwKK2VycgorZXRoZXJfaG9zdHRvbgorZXRoZXJfbnRvaG9zdAorZXVpZGFjY2VzcworZXhlY3YKK2ZjaGRpcgorZmNobW9kCitmY2htb2RhdAorZmNob3duCitmY2hvd25hdAorZmNudGwKK2ZjdnQKK2ZkYXRhc3luYworZmRvcGVuZGlyCitmZW9mX3VubG9ja2VkCitmZ2V0c191bmxvY2tlZAorZmdldHhhdHRyCitmaW5pdGUKK2ZsaXN0eGF0dHIKK2Zsb2NrCitmbG9ja2ZpbGUKK2ZubWF0Y2gKK2ZvcmsKK2ZwYXRoY29uZgorX19mcGVuZGluZworZnByaW50ZgorZnJlZQorZnJlZWFkZHJpbmZvCitmcmVlaWZhZGRycworZnNlZWtvCitfX2ZzZXRsb2NraW5nCitmc2V0eGF0dHIKK2ZzdGF0NjQKK2ZzdGF0Citmc3RhdGZzCitmc3luYworZnRlbGxvCitmdGltZQorZnRydW5jYXRlCitmdW5sb2NrZmlsZQorZnV0aW1lcworZnV0aW1lc2F0CitnYWlfc3RyZXJyb3IKK2djdnQKK2dldGFkZHJpbmZvCitnZXRjX3VubG9ja2VkCitnZXRjd2QKK2dldGRlbGltCitnZXRkb21haW5uYW1lCitnZXRkdGFibGVzaXplCitnZXRlZ2lkCitnZXRlbnYKK2dldGV1aWQKK2dldGdpZAorZ2V0Z3JlbnQKK2dldGdyZW50X3IKK2dldGdyZ2lkX3IKK2dldGdybmFtCitnZXRncm5hbV9yCitnZXRncm91cGxpc3QKK2dldGdyb3VwcworZ2V0aG9zdGJ5YWRkcl9yCitnZXRob3N0YnluYW1lMgorZ2V0aG9zdGJ5bmFtZQorZ2V0aG9zdGJ5bmFtZV9yCitnZXRob3N0ZW50CitnZXRob3N0aWQKK2dldGhvc3RuYW1lCitnZXRpZmFkZHJzCitnZXRsaW5lCitnZXRsb2FkYXZnCitnZXRtbnRlbnQKK2dldG1zZworZ2V0bmFtZWluZm8KK2dldG5ldGJ5YWRkcl9yCitnZXRuZXRncmVudF9yCitnZXRvcHQKK2dldG9wdF9sb25nCitnZXRvcHRfbG9uZ19vbmx5CitnZXRwYWdlc2l6ZQorZ2V0cGFzcworZ2V0cGVlcm5hbWUKK2dldHBncnAKK2dldHBpZAorZ2V0cHBpZAorZ2V0cHJvdG9lbnRfcgorZ2V0cHdlbnQKK2dldHB3ZW50X3IKK2dldHB3bmFtCitnZXRwd25hbV9yCitnZXRwd3VpZAorZ2V0cHd1aWRfcgorZ2V0cmVzdWlkCitnZXRybGltaXQKK2dldHJ1c2FnZQorZ2V0c2VydmJ5bmFtZQorZ2V0c2VydmJ5bmFtZV9yCitnZXRzZXJ2Ynlwb3J0X3IKK2dldHNlcnZlbnQKK2dldHNlcnZlbnRfcgorZ2V0c3BuYW0KK2dldHNwbmFtX3IKK2dldHRpbWVvZmRheQorZ2V0dHR5ZW50CitnZXR0dHluYW0KK2dldHVpZAorZ2V0dXNlcnNoZWxsCitnZXR1dGVudAorZ2V0dXRpZAorZ2V0dXRsaW5lCitnZXR1dG1wCitnZXR1dG1weAorZ2V0dXR4ZW50CitnZXR1dHhpZAorZ2V0dXR4bGluZQorZ2V0d2QKK2dldHhhdHRyCitnbG9iCitnbXRpbWUKK2dtdGltZV9yCitncmFudHB0Citncm91cF9tZW1iZXIKK2hlcnJvcgoraHN0cmVycm9yCitpY29udgoraWNvbnZfb3BlbgoraWZfZnJlZW5hbWVpbmRleAoraWZfaW5kZXh0b25hbWUKK2lmX25hbWVpbmRleAoraWZfbmFtZXRvaW5kZXgKK2luZGV4CitpbmV0X2FkZHIKK2luZXRfYXRvbgoraW5ldF9udG9hCitpbmV0X250b3AKK2luZXRfcHRvbgoraW5pdGdyb3VwcworaW5uZXRncgoraXJ1c2Vyb2sKK2lzYXNjaWkKK2lzYXR0eQoraXNibGFuaworaXNncmFwaAoraXNpbmYKK2lzbmFuCitpc3ByaW50Citpc3NwYWNlCitpc3dhbG51bQoraXN3Y250cmwKK2lzd2N0eXBlCitpc3dwcmludAoraXN3c3BhY2UKK2lzd3VwcGVyCitpc3hkaWdpdAora2lsbAora2lsbHBnCitsY2hvd24KK2xja3B3ZGYKK2xnZXR4YXR0cgorbGluaworbGlzdHhhdHRyCitsbGlzdHhhdHRyCitsb2NhbHRpbWUKK2xvY2FsdGltZV9yCitsb2NrZgorbHJhbmQ0OAorbHNlYXJjaAorbHNlZWs2NAorbHNldHhhdHRyCitsc3RhdAorbWFsbGluZm8KK21hbGxvYworbWJsZW4KK21icmxlbgorbWJydG93YworbWJzaW5pdAorbWJzcnRvd2NzCittYnRvd2MKK21lbWFsaWduCittZW1jaHIKK21lbWNtcAorbWVtY3B5CittZW1tb3ZlCittZW1wY3B5CittZW1yY2hyCittZW1zZXQKK21rZGlyCitta2RpcmF0Citta2R0ZW1wCitta2ZpZm8KK21rbm9kCitta3N0ZW1wNjQKK21rc3RlbXAKK21rdGltZQorbWxvY2sKK21tYXAKK210cmFjZQorbXVubG9jaworbXVubWFwCituYW5vc2xlZXAKK25pY2UKK25sX2xhbmdpbmZvCitudHBfYWRqdGltZQorbnRwX2dldHRpbWUKK19vYnN0YWNrX2ZyZWUKK29uX2V4aXQKK29wZW42NAorb3Blbgorb3BlbmF0CitvcGVuZGlyCitvcGVubG9nCitwYXRoY29uZgorcGlwZQorcG9sbAorcG9wZW4KK3Bvc2l4X21lbWFsaWduCitwcmN0bAorcHJlYWQKK3ByaW50ZgorX19wcm9nbmFtZQorcHNlbGVjdAorcHRocmVhZF9tdXRleF9sb2NrCitwdHNuYW1lCitwdXRlbnYKK3B1dGdyZW50CitwdXRwd2VudAorcHV0c3BlbnQKK3B1dHV0bGluZQorcHV0dXR4bGluZQorcHV0d2MKK3B3cml0ZQorcXNvcnQKK3JhaXNlCityYW5kCityYW5kb20KK3JhbmRfcgorcmVhZAorcmVhZGRpcgorcmVhZGRpcl9yCityZWFkbGluaworcmVhbGxvYworcmVhbHBhdGgKK3JlX2NvbXAKK3JlY3Ztc2cKK3JlX2V4ZWMKK3JlZ2NvbXAKK3JlZ2V4ZWMKK3JlbW92ZQorcmVuYW1lCityZV9zZWFyY2gKK3JtZGlyCitycG1hdGNoCitycmVzdnBvcnRfYWYKK3J1c2Vyb2sKK3J1c2Vyb2tfYWYKK3NicmsKK3NjYW5kaXIKK3NjaGVkX3NldHNjaGVkdWxlcgorc2NoZWRfeWllbGQKK19fc2VjdXJlX2dldGVudgorc2VsZWN0CitzZW1jdGwKK3NlbWdldAorc2VuZG1zZworc2V0YnVmCitzZXRidWZmZXIKK3NldGVnaWQKK3NldGVudgorc2V0ZXVpZAorc2V0Z2lkCitzZXRncm91cHMKK3NldGhvc3RuYW1lCitzZXRpdGltZXIKK19zZXRqbXAKK3NldGptcAorc2V0bGluZWJ1Zgorc2V0bG9jYWxlCitzZXRtbnRlbnQKK3NldHBnaWQKK3NldHBncnAKK3NldHByaW9yaXR5CitzZXRyZWdpZAorc2V0cmVzZ2lkCitzZXRyZXN1aWQKK3NldHJldWlkCitzZXRybGltaXQKK3NldHNpZAorc2V0c29ja29wdAorc2V0dGltZW9mZGF5CitzZXR1aWQKK3NldHV0ZW50CitzZXR1dHhlbnQKK3NldHZidWYKK3NldHhhdHRyCitzZ2V0c3BlbnQKK3NobWF0CitzaG1jdGwKK3NobWR0CitzaG1nZXQKK3NodXRkb3duCitzaWdhY3Rpb24KK3NpZ2FkZHNldAorc2lnYWx0c3RhY2sKK3NpZ2Jsb2NrCitzaWdlbXB0eXNldAorc2lnaG9sZAorc2lnaW50ZXJydXB0CitzaWduYWwKK3NpZ3Byb2NtYXNrCitzaWdzZXQKK3NpZ3NldG1hc2sKK3NpZ3N0YWNrCitzaWdzdXNwZW5kCitzaWd2ZWMKK3NucHJpbnRmCitzb2NrZXQKK3NvY2tldHBhaXIKK3NwcmludGYKK3NyYW5kNDgKK3NyYW5kCitzcmFuZG9tCitzc2NhbmYKK3N0YXQKK3N0YXRmcworc3RhdHZmcworc3RpbWUKK3N0cGNweQorc3RyY2FzZWNtcAorc3RyY2FzZXN0cgorc3RyY2hyCitzdHJjaHJudWwKK3N0cmNtcAorc3RyY3Nwbgorc3RyZHVwCitzdHJlcnJvcgorc3RyZXJyb3Jfcgorc3RyZnRpbWUKK3N0cmxlbgorc3RybmNhc2VjbXAKK3N0cm5jbXAKK3N0cm5kdXAKK3N0cm5sZW4KK3N0cnBicmsKK3N0cnB0aW1lCitzdHJyY2hyCitzdHJzZXAKK3N0cnNpZ25hbAorc3Ryc3BuCitzdHJzdHIKK3N0cnRvZAorc3RydG9pbWF4CitzdHJ0b2tfcgorc3RydG9sCitzdHJ0b2xsCitzdHJ0b3VsCitzdHJ0b3VsbAorc3RydG91bWF4CitzdHJ2ZXJzY21wCitzdHJ4ZnJtCitzeW1saW5rCitzeW5jCitzeXNjb25mCitzeXNjdGwKK3N5c2luZm8KK3N5c2xvZworX3N5c19zaWdsaXN0CitzeXNfc2lnbGlzdAorc3lzdGVtCit0Y2dldGF0dHIKK3RjZ2V0cGdycAordGNzZXRhdHRyCit0Y3NldHBncnAKK3RpbWUKK3RpbWVnbQordGltZXMKK3RpbWV6b25lCit0bXBuYW0KK3Rvd2xvd2VyCit0b3d1cHBlcgordHJ1bmNhdGUKK3RzZWFyY2gKK3R0eW5hbWUKK3R6c2V0Cit1bGltaXQKK3VtYXNrCit1bmFtZQordW5saW5rCit1bnNldGVudgordW5zaGFyZQordXBkd3RtcAordXBkd3RtcHgKK3VzbGVlcAordXN0YXQKK3V0aW1lCit1dGltZXMKK3V0bXBuYW1lCit1dG1weG5hbWUKK3ZhbGxvYwordmFzcHJpbnRmCit2ZXJyeAordmZvcmsKK3ZmcHJpbnRmCit2ZnNjYW5mCit2aGFuZ3VwCit2cHJpbnRmCit2c25wcmludGYKK3ZzcHJpbnRmCit3YWl0Mword2FpdDQKK3dhaXRwaWQKK3djcnRvbWIKK3djc2NvbGwKK3djc2R1cAord2NzbGVuCit3Y3RvYgord2N0b21iCit3Y3R5cGUKK3djd2lkdGgKK3dtZW1jaHIKK3dtZW1jcHkKK3dtZW1wY3B5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy9oZWFkZXJzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvc2l0ZV9jb25maWcvaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDlhYjUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvc2l0ZV9jb25maWcvaGVhZGVycwpAQCAtMCwwICsxLDE1NiBAQAorYWlvLmgKK2FsbG9jYS5oCithcmd6LmgKK2FycGEvaW5ldC5oCithcnBhL25hbWVzZXIuaAorYXNtL2J5dGVvcmRlci5oCithc20vaW9jdGxzLmgKK2FzbS9wYWdlLmgKK2FzbS90eXBlcy5oCithc3NlcnQuaAorYnl0ZXN3YXAuaAorY3J5cHQuaAorY3R5cGUuaAorZGlyZW50LmgKK2RsZmNuLmgKK2VsZi5oCitlbmRpYW4uaAorZXJyLmgKK2Vycm5vLmgKK2V4ZWNpbmZvLmgKK2ZjbnRsLmgKK2ZlYXR1cmVzLmgKK2Zsb2F0LmgKK2ZzdGFiLmgKK2Z0dy5oCitnZXRvcHQuaAorZ2xvYi5oCitncnAuaAoraWNvbnYuaAoraWZhZGRycy5oCitpbnR0eXBlcy5oCitsYW5naW5mby5oCitsYXN0bG9nLmgKK2xpYmdlbi5oCitsaWJpbnRsLmgKK2xpbWl0cy5oCitsaW51eC9jYXBhYmlsaXR5LmgKK2xpbnV4L2ZkLmgKK2xpbnV4L2ZzLmgKK2xpbnV4L2hheWVzZXNwLmgKK2xpbnV4L2hkcmVnLmgKK2xpbnV4L2ljbXAuaAorbGludXgvaW42LmgKK2xpbnV4L2pveXN0aWNrLmgKK2xpbnV4L3B0cmFjZS5oCitsaW51eC9zZXJpYWwuaAorbGludXgvc29ueXBpLmgKK2xpbnV4L3VuaXN0ZC5oCitsaW51eC91dHNuYW1lLmgKK2xpbnV4L3ZlcnNpb24uaAorbG9jYWxlLmgKK21hbGxvYy5oCittYXRoLmgKK21jaGVjay5oCittZW1vcnkuaAorbW50ZW50LmgKK21xdWV1ZS5oCituZXRkYi5oCituZXQvaWYuaAorbmV0aW5ldC9ldGhlci5oCituZXRpbmV0L2luLmgKK25ldGluZXQvaXA2LmgKK25ldGluZXQvaXAuaAorbmV0aW5ldC90Y3AuaAorbmV0aW5ldC91ZHAuaAorbmV0aXB4L2lweC5oCituZXQvcm91dGUuaAorcGF0aHMuaAorcG9sbC5oCitwdGhyZWFkLmgKK3B0eS5oCitwd2QuaAorcmVnZXguaAorcmVzb2x2LmgKK3JwYy9ycGMuaAorcnBjL3R5cGVzLmgKK3NjaGVkLmgKK3Njc2kvc2NzaS5oCitzZWFyY2guaAorc2VtYXBob3JlLmgKK3NldGptcC5oCitzZ3R0eS5oCitzaGFkb3cuaAorc2lnbmFsLmgKK3N0ZGFyZy5oCitzdGRib29sLmgKK3N0ZGMKK3N0ZGRlZi5oCitzdGRpbnQuaAorc3RkaW8uaAorc3RkbGliLmgKK3N0cmluZy5oCitzdHJpbmdzLmgKK3N0cm9wdHMuaAorc3lzL2JpdHlwZXMuaAorc3lzL2NkZWZzLmgKK3N5cy9kaXIuaAorc3lzL2Vwb2xsLmgKK3N5c2V4aXRzLmgKK3N5cy9mY250bC5oCitzeXMvZmlsZS5oCitzeXMvZnN1aWQuaAorc3lzL2lvY3RsLmgKK3N5cy9pcGMuaAorc3lzbG9nLmgKK3N5cy9tbWFuLmgKK3N5cy9tb3VudC5oCitzeXMvbXRpby5oCitzeXMvcGFyYW0uaAorc3lzL3BvbGwuaAorc3lzL3ByY3RsLmgKK3N5cy9wdHJhY2UuaAorc3lzL3F1ZXVlLmgKK3N5cy9yZWcuaAorc3lzL3Jlc291cmNlLmgKK3N5cy9zZWxlY3QuaAorc3lzL3NlbS5oCitzeXMvc2htLmgKK3N5cy9zaWduYWwuaAorc3lzL3NvY2tldC5oCitzeXMvc29ja2V0dmFyLmgKK3N5cy9zb3VuZGNhcmQuaAorc3lzL3N0YXRmcy5oCitzeXMvc3RhdC5oCitzeXMvc3RhdHZmcy5oCitzeXMvc3Ryb3B0cy5oCitzeXMvc3dhcC5oCitzeXMvc3lzY3RsLmgKK3N5cy9zeXNpbmZvLmgKK3N5cy9zeXNtYWNyb3MuaAorc3lzL3Rlcm1pb3MuaAorc3lzL3RpbWViLmgKK3N5cy90aW1lLmgKK3N5cy90aW1lcy5oCitzeXMvdGltZXguaAorc3lzL3R5cGVzLmgKK3N5cy91aW8uaAorc3lzL3VuLmgKK3N5cy91bmlzdGQuaAorc3lzL3VzZXIuaAorc3lzL3V0c25hbWUuaAorc3lzL3Zmcy5oCitzeXMvd2FpdC5oCit0ZXJtaW8uaAordGVybWlvcy5oCit0aW1lLmgKK3R0eWVudC5oCit1bGltaXQuaAordW5pc3RkLmgKK3VzdGF0LmgKK3V0aW1lLmgKK3V0bXAuaAordXRtcHguaAordmFsdWVzLmgKK3djaGFyLmgKK3djdHlwZS5oCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy90eXBlcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3NpdGVfY29uZmlnL3R5cGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OGJkODUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy90eXBlcwpAQCAtMCwwICsxLDIxIEBACitjaGFyCitjaGFyICoKK2RvdWJsZQorZmxvYXQKK2ludAorbG9uZworbG9uZyBkb3VibGUKK2xvbmcgaW50Citsb25nIGxvbmcKK2xvbmcgbG9uZyBpbnQKK3Nob3J0CitzaG9ydCBpbnQKK3NpZ25lZCBjaGFyCit1bnNpZ25lZCBjaGFyCit1bnNpZ25lZCBpbnQKK3Vuc2lnbmVkIGxvbmcKK3Vuc2lnbmVkIGxvbmcgaW50Cit1bnNpZ25lZCBsb25nIGxvbmcgaW50Cit1bnNpZ25lZCBzaG9ydAordW5zaWduZWQgc2hvcnQgaW50Cit2b2lkICoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1jb25maWcuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWNvbmZpZy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI5ZTQxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1jb25maWcuaW5jCkBAIC0wLDAgKzEsMTQyIEBACitERVBFTkRTICs9ICJrZXJuLXRvb2xzLW5hdGl2ZSIKK2luaGVyaXQgY21sMQorIworIyBTZXQgdGhlIEFSQ0ggZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIHVDbGliYyBjb21waWxhdGlvbi4KKyMgUmV0dXJuIHZhbHVlIG11c3QgbWF0Y2ggb25lIG9mIHRoZSBhcmNoaXRlY3R1cmVzIGtub3duIHRvIHVDbGliYzoKKyMgbGliYy9zeXNkZXBzLyovKgorIworCit2YWxpZF9hcmNocyA9ICJcCithbHBoYSBcCithcm0gXAorYXZyMzIgXAorYmZpbiBcCitjNnggXAorY3JpcyBcCitlMSBcCitmcnYgXAoraDgzMDAgXAoraHBwYSBcCitpMzg2IFwKK2k5NjAgXAoraWE2NCBcCittNjhrIFwKK21pY3JvYmxhemUgXAorbWlwcyBcCituaW9zIFwKK25pb3MyIFwKK3Bvd2VycGMgXAorc2ggXAorc2g2NCBcCitzcGFyYyBcCit2ODUwIFwKK3ZheCBcCit4ODZfNjQgXAoreHRlbnNhIFwKKyIKK2RlZiBtYXBfdWNsaWJjX2FyY2goYSwgZCk6CisgICAgIiIiUmV0dXJuIHRoZSB1Q2xpYmMgYXJjaGl0ZWN0dXJlIGZvciB0aGUgZ2l2ZW4gVEFSR0VUX0FSQ0guIiIiCisgICAgaW1wb3J0IHJlCisKKyAgICB2YWxpZF9hcmNocyA9IGQuZ2V0VmFyKCd2YWxpZF9hcmNocycsIFRydWUpLnNwbGl0KCkKKworICAgIGlmIHJlLm1hdGNoKCdeKGFybXxzYTExMCkuKicsIGEpOgorICAgICAgICByZXR1cm4gJ2FybScKKyAgICBlbGlmIHJlLm1hdGNoKCdeKGkuODZ8YXRobG9uKSQnLCBhKToKKyAgICAgICAgcmV0dXJuICdpMzg2JworICAgIGVsaWYgcmUubWF0Y2goJ15taXBzLionLCBhKToKKyAgICAgICAgcmV0dXJuICdtaXBzJworICAgIGVsaWYgcmUubWF0Y2goJ15wYXJpc2MuKicsIGEpOgorICAgICAgICByZXR1cm4gJ2hwcGEnCisgICAgZWxpZiByZS5tYXRjaCgnXnBwYy4qJywgYSk6CisgICAgICAgIHJldHVybiAncG93ZXJwYycKKyAgICBlbGlmIHJlLm1hdGNoKCdeczM5MC4qJywgYSk6CisgICAgICAgIHJldHVybiAnczM5MCcKKyAgICBlbGlmIHJlLm1hdGNoKCdec2guKicsIGEpOgorICAgICAgICByZXR1cm4gJ3NoJworICAgIGVsaWYgcmUubWF0Y2goJ14oc3VufHNwYXJjKS4qJywgYSk6CisgICAgICAgIHJldHVybiAnc3BhcmMnCisgICAgZWxpZiByZS5tYXRjaCgnXnh0ZW5zYS4qJywgYSk6CisgICAgICAgIHJldHVybiAneHRlbnNhJworICAgIGVsaWYgYSBpbiB2YWxpZF9hcmNoczoKKyAgICAgICAgcmV0dXJuIGEKKyAgICBlbHNlOgorICAgICAgICBiYi5lcnJvcigiY2Fubm90IG1hcCAnJXMnIHRvIGEgdUNsaWJjIGFyY2hpdGVjdHVyZSIgJSBhKQorCitleHBvcnQgVUNMSUJDX0FSQ0ggPSAiJHtAbWFwX3VjbGliY19hcmNoKGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpLCBkKX0iCisKK2RlZiBtYXBfdWNsaWJjX2FiaShvLCBkKToKKyAgICAiIiJSZXR1cm4gdGhlIHVDbGliYyBBQkkgZm9yIHRoZSBnaXZlbiBUQVJHRVRfT1MuIiIiCisgICAgaW1wb3J0IHJlCisKKyAgICBhcmNoID0gZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSkKKyAgICBpZiBtYXBfdWNsaWJjX2FyY2goZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSksIGQpID09ICJhcm0iOgorICAgICAgICBpZiByZS5tYXRjaCgnLiplYWJpJCcsIG8pOgorICAgICAgICAgICAgcmV0dXJuICdBUk1fRUFCSScKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAnQVJNX09BQkknCisgICAgIyBGSVhNRTogVGhpcyBpcyBpbmFjY3VyYXRlISBIYW5kbGUgbzMyLCBuMzIsIG42NAorICAgIGVsaWYgcmUubWF0Y2goJ15taXBzLio2NCQnLCBhcmNoKToKKyAgICAgICAgcmV0dXJuICdNSVBTX042NF9BQkknCisgICAgZWxpZiByZS5tYXRjaCgnXm1pcHMuKicsIGFyY2gpOgorICAgICAgICByZXR1cm4gJ01JUFNfTzMyX0FCSScKKyAgICByZXR1cm4gIiIKKworZXhwb3J0IFVDTElCQ19BQkkgPSAiJHtAbWFwX3VjbGliY19hYmkoZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpLCBkKX0iCisKK2RlZiBtYXBfdWNsaWJjX2VuZGlhbihhLCBkKToKKyAgICAiIiJSZXR1cm4gdGhlIHVDbGliYyBlbmRpYW5lc3MgZm9yIHRoZSBnaXZlbiBUQVJHRVRfQVJDSC4iIiIKKyAgICBpbXBvcnQgcmUKKworICAgICMgQWx3YXlzIEJFCisgICAgaWYgcmUubWF0Y2goJ14oYXZyMzJ8ZTF8ZnJ2fChwYXJpc2N8aHBwYSl8bTY4a3xtaWNyb2JsYXplfHBvd2VycGMuKnwoc3BhcmN8c3VuKS4qKSQnLCBhKToKKyAgICAgICAgcmV0dXJuICdCSUcnCisgICAgIyBQb3NzaWJseSBCRQorICAgIGVsaWYgcmUubWF0Y2goJ14oKChhcm18c2ExMTApLiplYil8aDgzMDAuKmVifChwYXJpc2N8aHBwYSkuKmVifG1pcHN8bWlwczY0fHNoLiplYnx4dGVuc2EuKmViKSQnLCBhKToKKyAgICAgICAgcmV0dXJuICdCSUcnCisgICAgcmV0dXJuICdMSVRUTEUnCisKK2V4cG9ydCBVQ0xJQkNfRU5ESUFOID0gIiR7QG1hcF91Y2xpYmNfZW5kaWFuKGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpLCBkKX0iCisKKyMgaW50ZXJuYWwgaGVscGVyCitkZWYgdWNsaWJjX2NmZyhmZWF0dXJlLCBmZWF0dXJlcywgdG9rZW5zLCBjbmYsIHJlbSk6CisgICAgaWYgdHlwZSh0b2tlbnMpID09IHR5cGUoIiIpOgorICAgICAgICB0b2tlbnMgPSBbdG9rZW5zXQorICAgIHJlbS5leHRlbmQoWycvXlsjIF0qJyArIHRva2VuICsgJ1sgPV0vZCcgZm9yIHRva2VuIGluIHRva2Vuc10pCisgICAgaWYgdHlwZShmZWF0dXJlcykgPT0gdHlwZShbXSkgYW5kIGZlYXR1cmUgaW4gZmVhdHVyZXM6CisgICAgICAgIGNuZi5leHRlbmQoW3Rva2VuICsgJz15JyBmb3IgdG9rZW4gaW4gdG9rZW5zXSkKKyAgICBlbHNlOgorICAgICAgICBjbmYuZXh0ZW5kKFsnIyAnICsgdG9rZW4gKyAnIGlzIG5vdCBzZXQnIGZvciB0b2tlbiBpbiB0b2tlbnNdKQorCisjIE1hcCBkaXN0cm8gZmVhdHVyZXMgdG8gY29uZmlnIHNldHRpbmdzCitkZWYgZmVhdHVyZXNfdG9fdWNsaWJjX3NldHRpbmdzKGQpOgorICAgIGNuZiwgcmVtID0gKFtdLCBbXSkKKyAgICBkaXN0cm9fZmVhdHVyZXMgPSBkLmdldFZhcignRElTVFJPX0ZFQVRVUkVTJywgVHJ1ZSkuc3BsaXQoKQorICAgIHVjbGliY19jZmcoJ2lwdjQnLCAgICAgIGRpc3Ryb19mZWF0dXJlcywgJ1VDTElCQ19IQVNfSVBWNCcsIGNuZiwgcmVtKQorICAgIHVjbGliY19jZmcoJ2lwdjYnLCAgICAgIGRpc3Ryb19mZWF0dXJlcywgJ1VDTElCQ19IQVNfSVBWNicsIGNuZiwgcmVtKQorICAgIHVjbGliY19jZmcoJ2xhcmdlZmlsZScsIGRpc3Ryb19mZWF0dXJlcywgJ1VDTElCQ19IQVNfTEZTJywgY25mLCByZW0pCisgICAgdWNsaWJjX2NmZygnbmxzJywgICAgICAgZGlzdHJvX2ZlYXR1cmVzLCAnVUNMSUJDX0hBU19MT0NBTEUnLCBjbmYsIHJlbSkKKyAgICB1Y2xpYmNfY2ZnKCd0aHVtYi1pbnRlcndvcmsnLCBkaXN0cm9fZmVhdHVyZXMsJ1VTRV9CWCcsIGNuZiwgcmVtKQorICAgIHVjbGliY19jZmcoJ3hhdHRyJywgICAgIGRpc3Ryb19mZWF0dXJlcywgJ1VDTElCQ19IQVNfWEFUVFInLCBjbmYsIHJlbSkKKyAgICB1Y2xpYmNfY2ZnKCdzc3AnLCAgICAgICBkaXN0cm9fZmVhdHVyZXMsICdVQ0xJQkNfSEFTX1NTUCcsIGNuZiwgcmVtKQorICAgIHVjbGliY19jZmcoJ2FyZ3AnLCAgICAgICBkaXN0cm9fZmVhdHVyZXMsICdVQ0xJQkNfSEFTX0FSR1AnLCBjbmYsIHJlbSkKKyAgICB1Y2xpYmNfY2ZnKCdsaWJjLXBvc2l4LWNsYW5nLXdjaGFyJywgIGRpc3Ryb19mZWF0dXJlcywnVUNMSUJDX0hBU19XQ0hBUicsIGNuZiwgcmVtKQorICAgIHJldHVybiAiXG4iLmpvaW4oY25mKSwgIlxuIi5qb2luKHJlbSkKKyMgWCwgWSA9ICR7QGZlYXR1cmVzX3RvX3VjbGliY19zZXR0aW5ncyhkKX0KKyMgdW5mb3J0dW5hdGVseSBkb2Vzbid0IHNlZW0gdG8gd29yayB3aXRoIGJpdGJha2UsIHdvcmthcm91bmQ6CitkZWYgZmVhdHVyZXNfdG9fdWNsaWJjX2NvbmYoZCk6CisgICAgY25mLCByZW0gPSBmZWF0dXJlc190b191Y2xpYmNfc2V0dGluZ3MoZCkKKyAgICByZXR1cm4gY25mCitkZWYgZmVhdHVyZXNfdG9fdWNsaWJjX2RlbChkKToKKyAgICBjbmYsIHJlbSA9IGZlYXR1cmVzX3RvX3VjbGliY19zZXR0aW5ncyhkKQorICAgIHJldHVybiByZW0KKworIyByZXR1cm5zIGFsbCB0aGUgZWxlbWVudHMgZnJvbSB0aGUgc3JjIHVyaSB0aGF0IGFyZSAuY2ZnIGZpbGVzCitkZWYgZmluZF9jZmdzKGQpOgorICAgIHNvdXJjZXM9c3JjX3BhdGNoZXMoZCwgVHJ1ZSkKKyAgICBzb3VyY2VzX2xpc3Q9W10KKyAgICBmb3IgcyBpbiBzb3VyY2VzOgorICAgICAgICBpZiBzLmVuZHN3aXRoKCcuY2ZnJyk6CisgICAgICAgICAgICBzb3VyY2VzX2xpc3QuYXBwZW5kKHMpCisKKyAgICByZXR1cm4gc291cmNlc19saXN0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YTU3N2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LmluYwpAQCAtMCwwICsxLDIwIEBACitTUkNSRVYgPSAiY2ExYzc0ZDY3ZGQxMTVkMDU5YTg3NTE1MGUxMGI4NTYwYTljMzVhOCIKKworUFYgPSAiMC45LjMzK2dpdCR7U1JDUFZ9IgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS91Y2xpYmMtZ2l0OiIKKworU1JDX1VSSSA9ICJnaXQ6Ly91Y2xpYmMub3JnL3VDbGliYy5naXQ7YnJhbmNoPW1hc3RlciBcCisgICAgICAgIGZpbGU6Ly91Q2xpYmMubWFjaGluZSBcCisgICAgICAgIGZpbGU6Ly91Q2xpYmMuZGlzdHJvIFwKKyAgICAgICAgZmlsZTovL29ic3RhY2suY2ZnIFwKKyAgICAgICAgZmlsZTovL2xvY2FsZS5jZmcgXAorICAgICAgICBmaWxlOi8vMDAwMS1EaXNhYmxlLWxyb3VudF90ZXMtZnVuY3Rpb24ucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwMi1BZGQtaW1wbGVtZW50YXRpb24tZm9yLWNvcHlzaWdubC1mb3ItcHBjLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDMtQWRkLWFyZ3AtaW1wbGVtZW50YXRpb24ucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwNC1Eb250LXN1cHBvcnQtbG9jYWxpc2VkLW9wdGltaXphdGlvbnMtdGhpcy1oZWxwcy10by1oLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDUtQWx3YXlzLXVzZS1PMi1mb3ItY29tcGlsaW5nLWZvcmsuYy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDA2LWxkc28tbGltaXRlZC1zdXBwb3J0LWZvci1PUklHSU4taW4tcnBhdGgucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwNy1ucHRsLWF0Zm9yay1IaWRlLXB0aHJlYWRfYXRmb3JrLWluLXNoYXJlZC12ZXJzaW9ucy5wYXRjaCBcCisiCitTID0gIiR7V09SS0RJUn0vZ2l0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAxLURpc2FibGUtbHJvdW50X3Rlcy1mdW5jdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwMS1EaXNhYmxlLWxyb3VudF90ZXMtZnVuY3Rpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA2ZjE0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwMS1EaXNhYmxlLWxyb3VudF90ZXMtZnVuY3Rpb24ucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRnJvbSAxNGI4NjViMzQzOGQwZGYyOWI0OTY5MTQ4Njc4ZDhmYTg5NDNlMWVmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMTYgQXVnIDIwMTUgMjA6NDk6MzMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAxLzddIERpc2FibGUgbHJvdW50X3RlcygpIGZ1bmN0aW9uCisKK0l0cyBub3QgdXNlZCBhbnl3YXksIGF2b2lkcyBzb21lIHN0cmljdCBjb21waWxlciB3YXJuaW5ncworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIHRlc3QvbWF0aC9saWJtLXRlc3QuaW5jIHwgMiAtLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdGVzdC9tYXRoL2xpYm0tdGVzdC5pbmMgYi90ZXN0L21hdGgvbGlibS10ZXN0LmluYworaW5kZXggZjUwYjQ4Yi4uNmQ3MGE5NSAxMDA2NDQKKy0tLSBhL3Rlc3QvbWF0aC9saWJtLXRlc3QuaW5jCisrKysgYi90ZXN0L21hdGgvbGlibS10ZXN0LmluYworQEAgLTM0NzAsNyArMzQ3MCw2IEBAIGxvZ2JfdGVzdCAodm9pZCkKKyB9CisgCisgCistI2lmIDAKKyBzdGF0aWMgdm9pZAorIGxyb3VuZF90ZXN0ICh2b2lkKQorIHsKK0BAIC0zNjA1LDcgKzM2MDQsNiBAQCBsbHJvdW5kX3Rlc3QgKHZvaWQpCisgCisgICBFTkQgKGxscm91bmQpOworIH0KKy0jZW5kaWYKKyAKKyBzdGF0aWMgdm9pZAorIG1vZGZfdGVzdCAodm9pZCkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAyLUFkZC1pbXBsZW1lbnRhdGlvbi1mb3ItY29weXNpZ25sLWZvci1wcGMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDItQWRkLWltcGxlbWVudGF0aW9uLWZvci1jb3B5c2lnbmwtZm9yLXBwYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDI3NWM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAyLUFkZC1pbXBsZW1lbnRhdGlvbi1mb3ItY29weXNpZ25sLWZvci1wcGMucGF0Y2gKQEAgLTAsMCArMSwxMjUgQEAKK0Zyb20gNWQzNjIwNzRlNTk3NWIxNTBhMzViY2ZhNzdlYWIxYmZhNGUzMGRlNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDE2IEF1ZyAyMDE1IDIwOjUwOjU2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMi83XSBBZGQgaW1wbGVtZW50YXRpb24gZm9yIGNvcHlzaWdubCBmb3IgcHBjCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvTWFrZWZpbGUuYXJjaCB8ICAyICstCisgbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvY29weXNpZ25sLmMgICB8IDg5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA5MCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmMvc3lzZGVwcy9saW51eC9wb3dlcnBjL2NvcHlzaWdubC5jCisKK2RpZmYgLS1naXQgYS9saWJjL3N5c2RlcHMvbGludXgvcG93ZXJwYy9NYWtlZmlsZS5hcmNoIGIvbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvTWFrZWZpbGUuYXJjaAoraW5kZXggNGZiY2IxMS4uN2MwOWM4NyAxMDA2NDQKKy0tLSBhL2xpYmMvc3lzZGVwcy9saW51eC9wb3dlcnBjL01ha2VmaWxlLmFyY2gKKysrKyBiL2xpYmMvc3lzZGVwcy9saW51eC9wb3dlcnBjL01ha2VmaWxlLmFyY2gKK0BAIC01LDcgKzUsNyBAQAorICMgTGljZW5zZWQgdW5kZXIgdGhlIExHUEwgdjIuMSwgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCIGluIHRoaXMgdGFyYmFsbC4KKyAjCisgCistQ1NSQy15IDo9IF9fc3lzY2FsbF9lcnJvci5jIGlvY3RsLmMKKytDU1JDLXkgOj0gX19zeXNjYWxsX2Vycm9yLmMgaW9jdGwuYyBjb3B5c2lnbmwuYworIAorIFNTUkMteSA6PSBcCisgCV9fbG9uZ2ptcC5TIHNldGptcC5TIGJzZC1zZXRqbXAuUyBic2QtX3NldGptcC5TIGJyay5TIFwKK2RpZmYgLS1naXQgYS9saWJjL3N5c2RlcHMvbGludXgvcG93ZXJwYy9jb3B5c2lnbmwuYyBiL2xpYmMvc3lzZGVwcy9saW51eC9wb3dlcnBjL2NvcHlzaWdubC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDAwZjY1MworLS0tIC9kZXYvbnVsbAorKysrIGIvbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvY29weXNpZ25sLmMKK0BAIC0wLDAgKzEsODkgQEAKKysvKiBzX2NvcHlzaWdubC5jIC0tIGxvbmcgZG91YmxlIHZlcnNpb24gb2Ygc19jb3B5c2lnbi5jLgorKyAqIENvbnZlcnNpb24gdG8gbG9uZyBkb3VibGUgYnkgVWxyaWNoIERyZXBwZXIsCisrICogQ3lnbnVzIFN1cHBvcnQsIGRyZXBwZXJAY3lnbnVzLmNvbS4KKysgKi8KKysKKysvKgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKysgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorKyAqIGlzIHByZXNlcnZlZC4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICovCisrCisrLyoKKysgKiBjb3B5c2lnbmwobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkKKysgKiBjb3B5c2lnbmwoeCx5KSByZXR1cm5zIGEgdmFsdWUgd2l0aCB0aGUgbWFnbml0dWRlIG9mIHggYW5kCisrICogd2l0aCB0aGUgc2lnbiBiaXQgb2YgeS4KKysgKi8KKysKKysjaW5jbHVkZSA8ZW5kaWFuLmg+CisrI2luY2x1ZGUgPHN0ZGludC5oPgorKworKyNpZiBfX0ZMT0FUX1dPUkRfT1JERVIgPT0gQklHX0VORElBTgorKworK3R5cGVkZWYgdW5pb24KKyt7CisrICBsb25nIGRvdWJsZSB2YWx1ZTsKKysgIHN0cnVjdAorKyAgeworKyAgICBpbnQgc2lnbl9leHBvbmVudDoxNjsKKysgICAgdW5zaWduZWQgaW50IGVtcHR5OjE2OworKyAgICB1aW50MzJfdCBtc3c7CisrICAgIHVpbnQzMl90IGxzdzsKKysgIH0gcGFydHM7CisrfSBpZWVlX2xvbmdfZG91YmxlX3NoYXBlX3R5cGU7CisrCisrI2VuZGlmCisrCisrI2lmIF9fRkxPQVRfV09SRF9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOCisrCisrdHlwZWRlZiB1bmlvbgorK3sKKysgIGxvbmcgZG91YmxlIHZhbHVlOworKyAgc3RydWN0CisrICB7CisrICAgIHVpbnQzMl90IGxzdzsKKysgICAgdWludDMyX3QgbXN3OworKyAgICBpbnQgc2lnbl9leHBvbmVudDoxNjsKKysgICAgdW5zaWduZWQgaW50IGVtcHR5OjE2OworKyAgfSBwYXJ0czsKKyt9IGllZWVfbG9uZ19kb3VibGVfc2hhcGVfdHlwZTsKKysKKysjZW5kaWYKKysKKysvKiBHZXQgaW50IGZyb20gdGhlIGV4cG9uZW50IG9mIGEgbG9uZyBkb3VibGUuICAqLworKworKyNkZWZpbmUgR0VUX0xET1VCTEVfRVhQKGV4cCxkKQkJCQkJXAorK2RvIHsJCQkJCQkJCVwKKysgIGllZWVfbG9uZ19kb3VibGVfc2hhcGVfdHlwZSBnZV91OwkJCQlcCisrICBnZV91LnZhbHVlID0gKGQpOwkJCQkJCVwKKysgIChleHApID0gZ2VfdS5wYXJ0cy5zaWduX2V4cG9uZW50OwkJCQlcCisrfSB3aGlsZSAoMCkKKysKKysvKiBTZXQgZXhwb25lbnQgb2YgYSBsb25nIGRvdWJsZSBmcm9tIGFuIGludC4gICovCisrCisrI2RlZmluZSBTRVRfTERPVUJMRV9FWFAoZCxleHApCQkJCQlcCisrZG8gewkJCQkJCQkJXAorKyAgaWVlZV9sb25nX2RvdWJsZV9zaGFwZV90eXBlIHNlX3U7CQkJCVwKKysgIHNlX3UudmFsdWUgPSAoZCk7CQkJCQkJXAorKyAgc2VfdS5wYXJ0cy5zaWduX2V4cG9uZW50ID0gKGV4cCk7CQkJCVwKKysgIChkKSA9IHNlX3UudmFsdWU7CQkJCQkJXAorK30gd2hpbGUgKDApCisrCisrbG9uZyBkb3VibGUgY29weXNpZ25sKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHkpOworK2xpYmNfaGlkZGVuX3Byb3RvKGNvcHlzaWdubCk7CisrCisrbG9uZyBkb3VibGUgY29weXNpZ25sKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHkpCisreworKwl1aW50MzJfdCBlczEsZXMyOworKwlHRVRfTERPVUJMRV9FWFAoZXMxLHgpOworKwlHRVRfTERPVUJMRV9FWFAoZXMyLHkpOworKwlTRVRfTERPVUJMRV9FWFAoeCwoZXMxJjB4N2ZmZil8KGVzMiYweDgwMDApKTsKKysgICAgICAgIHJldHVybiB4OworK30KKysKKytsaWJjX2hpZGRlbl9kZWYoY29weXNpZ25sKTsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAzLUFkZC1hcmdwLWltcGxlbWVudGF0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAzLUFkZC1hcmdwLWltcGxlbWVudGF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlOTQ0ODMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDMtQWRkLWFyZ3AtaW1wbGVtZW50YXRpb24ucGF0Y2gKQEAgLTAsMCArMSw1ODExIEBACitGcm9tIGVhYWU4MTZmYjIyOTI5NDY5YWE0Y2MzNDAyYjkxYjUxMmZjNjk1NDkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBTYWx2YXRvcmUgQ3JvIDxzYWx2YXRvcmUuY3JvQHN0LmNvbT4KK0RhdGU6IFN1biwgMTYgQXVnIDIwMTUgMjA6NTM6MzcgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAzLzddIEFkZCBhcmdwIGltcGxlbWVudGF0aW9uCisKK0FyZ3AgaXMgYW4gYWR2YW5jZWQgc3VwcG9ydCBmb3IgcGFyc2luZyB1bml4LXN0eWxlIGFyZ3VtZW50IHZlY3RvcnMuCitJbiBhZGRpdGlvbiB0byB0aGUgY29tbW9uIGdldG9wdCBpbnRlcmZhY2UsIGl0IHByb3ZpZGVzIGF1dG9tYXRpYworcmVzcG9uc2UKK3RvIGAtLWhlbHAnIGFuZCBgLS12ZXJzaW9uJyBvcHRpb25zIGFuZCB1c2Ugb2YgY3VzdG9tIHBhcnNlciBpbgorY29uanVuY3Rpb24KK3dpdGggYXJncCBuYXRpdmUgb3B0aW9uIHBhcnNlciwgYW1vbmcgb3RoZXJzLgorQXJncCBzdXBwb3J0IGlzIHJlcXVpcmVkIGJ5IGVsZnV0aWxzIHBhY2thZ2UgYW5kIHByZWxpbmsuCisKK0luIHVDbGliYyBhcmdwIGZ1bmN0aW9uYWxpdGllcyBoYXMgYmVlbiBtb3ZlZCBmcm9tIEMgbGlicmFyeSB0bworbGlidWFyZ3Auc28KK0Z1cnRoZXIgdGhlIGxpYmMuc28gbGlua2VyIHNjcmlwdCBjb250YWlucyBhbiBBU19ORUVERUQgZW50cnkgc28gdGhhdAoraXQgZG9lc24ndCBuZWVkIHRvIGxpbmsgbGlidWFyZ3Auc28gZXhwbGljaXRlbHkuCisKK1NpZ25lZC1vZmYtYnk6IFNhbHZhdG9yZSBDcm8gPHNhbHZhdG9yZS5jcm9Ac3QuY29tPgorU2lnbmVkLW9mZi1ieTogRmlsaXBwbyBBcmNpZGlhY29ubyA8ZmlsaXBwby5hcmNpZGlhY29ub0BzdC5jb20+CitTaWduZWQtb2ZmLWJ5OiBDYXJtZWxvIEFtb3Jvc28gPGNhcm1lbG8uYW1vcm9zb0BzdC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIE1ha2VmaWxlLmluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA5ICsKKyBNYWtlcnVsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArLQorIFJ1bGVzLm1hayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEzICsKKyBleHRyYS9Db25maWdzL0NvbmZpZy5pbiAgICAgICAgICAgICAgICAgICAgIHwgICAxNyArCisgaW5jbHVkZS9hcmdwLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1NjYgKysrKysrKysKKyBsaWJjL3N5c2RlcHMvbGludXgvY29tbW9uL2JpdHMvZ2V0b3B0X2ludC5oIHwgIDEzNiArKworIGxpYmMvdW5pc3RkL2dldG9wdC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE5ICstCisgbGlidWFyZ3AvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTQgKworIGxpYnVhcmdwL01ha2VmaWxlLmluICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDczICsrCisgbGlidWFyZ3AvYXJncC1iYS5jICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjYgKworIGxpYnVhcmdwL2FyZ3AtZWV4c3QuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMyICsKKyBsaWJ1YXJncC9hcmdwLWZtdHN0cmVhbS5jICAgICAgICAgICAgICAgICAgIHwgIDQzOSArKysrKysrCisgbGlidWFyZ3AvYXJncC1mbXRzdHJlYW0uaCAgICAgICAgICAgICAgICAgICB8ICAzMTQgKysrKysKKyBsaWJ1YXJncC9hcmdwLWZzLXhpbmwuYyAgICAgICAgICAgICAgICAgICAgIHwgICA0NCArCisgbGlidWFyZ3AvYXJncC1oZWxwLmMgICAgICAgICAgICAgICAgICAgICAgICB8IDE4ODIgKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgbGlidWFyZ3AvYXJncC1wYXJzZS5jICAgICAgICAgICAgICAgICAgICAgICB8ICA5NDkgKysrKysrKysrKysrKysKKyBsaWJ1YXJncC9hcmdwLXB2LmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNSArCisgbGlidWFyZ3AvYXJncC1wdmguYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzIgKworIGxpYnVhcmdwL2FyZ3AteGlubC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM1ICsKKyB0ZXN0L2FyZ3AvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArCisgdGVzdC9hcmdwL01ha2VmaWxlLmluICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTIgKworIHRlc3QvYXJncC9hcmdwLWV4MS5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE1ICsKKyB0ZXN0L2FyZ3AvYXJncC1leDIuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0NSArCisgdGVzdC9hcmdwL2FyZ3AtZXgzLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNTMgKysrCisgdGVzdC9hcmdwL2FyZ3AtZXg0LmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNjcgKysrCisgdGVzdC9hcmdwL2FyZ3AtdGVzdC5jICAgICAgICAgICAgICAgICAgICAgICB8ICAyMDkgKysrCisgdGVzdC9hcmdwL2J1Zy1hcmdwMS5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjYgKworIHRlc3QvYXJncC90c3QtYXJncDEuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgMTE4ICsrCisgdGVzdC9hcmdwL3RzdC1hcmdwMi5jICAgICAgICAgICAgICAgICAgICAgICB8ICAxMDEgKysKKyAyOSBmaWxlcyBjaGFuZ2VkLCA1NDgxIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvYXJncC5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmMvc3lzZGVwcy9saW51eC9jb21tb24vYml0cy9nZXRvcHRfaW50LmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvTWFrZWZpbGUKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvTWFrZWZpbGUuaW4KKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvYXJncC1iYS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnVhcmdwL2FyZ3AtZWV4c3QuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9hcmdwLWZtdHN0cmVhbS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnVhcmdwL2FyZ3AtZm10c3RyZWFtLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvYXJncC1mcy14aW5sLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvYXJncC1oZWxwLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvYXJncC1wYXJzZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnVhcmdwL2FyZ3AtcHYuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9hcmdwLXB2aC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnVhcmdwL2FyZ3AteGlubC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3QvYXJncC9NYWtlZmlsZQorIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L2FyZ3AvTWFrZWZpbGUuaW4KKyBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC9hcmdwL2FyZ3AtZXgxLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC9hcmdwL2FyZ3AtZXgyLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC9hcmdwL2FyZ3AtZXgzLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC9hcmdwL2FyZ3AtZXg0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC9hcmdwL2FyZ3AtdGVzdC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3QvYXJncC9idWctYXJncDEuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L2FyZ3AvdHN0LWFyZ3AxLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC9hcmdwL3RzdC1hcmdwMi5jCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCAwNDY3MWE0Li5hNDUwYWY5IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMzksNiArMzksNyBAQCBpbmNsdWRlICQodG9wX3NyY2RpcilsaWJyZXNvbHYvTWFrZWZpbGUuaW4KKyBpbmNsdWRlICQodG9wX3NyY2RpcilsaWJ1dGlsL01ha2VmaWxlLmluCisgaW5jbHVkZSAkKHRvcF9zcmNkaXIpbGlicHRocmVhZC9NYWtlZmlsZS5pbgorIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKWxpYnJ0L01ha2VmaWxlLmluCisraW5jbHVkZSAkKHRvcF9zcmNkaXIpbGlidWFyZ3AvTWFrZWZpbGUuaW4KKyBpbmNsdWRlICQodG9wX3NyY2RpcilsaWJ1YmFja3RyYWNlL01ha2VmaWxlLmluCisgCisgIyBsYXN0IGluY2x1ZGVkIHRvIGNhdGNoIGFsbCB0aGUgb2JqZWN0cyBhZGRlZCBieSBvdGhlcnMgKGxvY2FsZXMvdGhyZWFkcykKK0BAIC0yNjIsNiArMjYzLDcgQEAgSEVBREVSU19STS0gKz0gc2d0dHkuaAorIGVuZGlmCisgSEVBREVSU19STS0kKEhBVkVfU0hBUkVEKSAgICAgICAgICAgICAgICAgICAgKz0gZGxmY24uaCBiaXRzL2RsZmNuLmgKKyBIRUFERVJTX1JNLSQoUFRIUkVBRFNfREVCVUdfU1VQUE9SVCkgICAgICAgICArPSB0aHJlYWRfZGIuaAorK0hFQURFUlNfUk0tJChVQ0xJQkNfSEFTX0FSR1ApICAgICAgICAgICAgICAgICs9IGFyZ3AuaAorIEhFQURFUlNfUk0tJChVQ0xJQkNfSEFTX0JTRF9FUlIpICAgICAgICAgICAgICs9IGVyci5oCisgSEVBREVSU19STS0kKFVDTElCQ19IQVNfQ1JZUFQpICAgICAgICAgICAgICAgKz0gY3J5cHQuaAorIEhFQURFUlNfUk0tJChVQ0xJQkNfSEFTX0VQT0xMKSAgICAgICAgICAgICAgICs9IHN5cy9lcG9sbC5oCitAQCAtMzg2LDYgKzM4OCwxMyBAQCBlbHNlCisgCS0kKElOU1RBTEwpIC1tIDc1NSAkKHRvcF9idWlsZGRpcilsaWIvbGliYy5zbyAkKFBSRUZJWCkkKERFVkVMX1BSRUZJWCkkKE1VTFRJTElCX0RJUikvCisgZW5kaWYKKyAJZWNobyAiJChVQkFDS1RSQUNFX0FTTkVFREVEKSIgPj4gJChQUkVGSVgpJChERVZFTF9QUkVGSVgpJChNVUxUSUxJQl9ESVIpL2xpYmMuc28KKytpZmVxICgkKFVDTElCQ19IQVNfQVJHUCkseSkKKysjIEFkZCB0aGUgQVNfTkVFREVEIGVudHJ5IGZvciBsaWJ1YXJncC5zbworKwlpZiBbIC1mICQodG9wX2J1aWxkZGlyKWxpYi9saWJjLnNvIC1hIC1mICQoUFJFRklYKSQoUlVOVElNRV9QUkVGSVgpJChNVUxUSUxJQl9ESVIpLyQoU0hBUkVEX01BSk9STkFNRSkgXSA7IHRoZW4gXAorKwkJZWNobyAiR1JPVVAgKCAkKFVBUkdQX0FTTkVFREVEKSApIiA+PiAkKFBSRUZJWCkkKERFVkVMX1BSRUZJWCkkKE1VTFRJTElCX0RJUikvbGliYy5zbzsgXAorKwlmaQorK2VuZGlmCisrCisgaWZlcSAoJChVQ0xJQkNfSEFTX1RIUkVBRFMpLHkpCisgaWZuZXEgKCQoTElOVVhUSFJFQURTX09MRCkseSkKKyBpZmVxICgkKEhBUkRXSVJFRF9BQlNQQVRIKSx5KQorZGlmZiAtLWdpdCBhL01ha2VydWxlcyBiL01ha2VydWxlcworaW5kZXggZDZmN2UyNC4uZTcwMDUwZCAxMDA2NDQKKy0tLSBhL01ha2VydWxlcworKysrIGIvTWFrZXJ1bGVzCitAQCAtNDgsNiArNDgsNyBAQCAkKGV2YWwgJChjYWxsIGFkZF9JU19JTl9saWIsbGlicmVzb2x2LCQobGlicmVzb2x2LWEteSkgJChsaWJyZXNvbHYtc28teSkpKQorICQoZXZhbCAkKGNhbGwgYWRkX0lTX0lOX2xpYixsaWJydCwkKGxpYnJ0LWEteSkgJChsaWJydC1zby15KSkpCisgJChldmFsICQoY2FsbCBhZGRfSVNfSU5fbGliLGxpYnV0aWwsJChsaWJ1dGlsLWEteSkgJChsaWJ1dGlsLXNvLXkpKSkKKyAkKGV2YWwgJChjYWxsIGFkZF9JU19JTl9saWIsbGlidWJhY2t0cmFjZSwkKGxpYnViYWNrdHJhY2UtYS15KSAkKGxpYnViYWNrdHJhY2Utc28teSkpKQorKyQoZXZhbCAkKGNhbGwgYWRkX0lTX0lOX2xpYixsaWJ1YXJncCwkKGxpYnVhcmdwLWEteSkgJChsaWJ1YXJncC1zby15KSkpCisgCisgc2hhcmVkX29ianMgPSAkKGxpYmMteToubz0ub3MpICQobGliYy1zaGFyZWQteSkgJChsaWJjLW5vbnNoYXJlZC15KSBcCisgCSQobGliY3J5cHQtc28teSkgJChsaWJkbC1zby15KSBcCitAQCAtNTUsMTIgKzU2LDEyIEBAIHNoYXJlZF9vYmpzID0gJChsaWJjLXk6Lm89Lm9zKSAkKGxpYmMtc2hhcmVkLXkpICQobGliYy1ub25zaGFyZWQteSkgXAorIAkkKGxpYnB0aHJlYWQtc28teSkgJChsaWJwdGhyZWFkLW5vbnNoYXJlZC15KSAkKGxpYnRocmVhZF9kYi1zby15KSBcCisgCSQobGlicmVzb2x2LXNvLXkpICQobGlicnQtc28teSkgXAorIAkkKGxkc28teSkgXAorLQkkKGxpYnV0aWwtc28teSkgJChsaWJ1YmFja3RyYWNlLXNvLXkpCisrCSQobGlidXRpbC1zby15KSAkKGxpYnViYWNrdHJhY2Utc28teSkgJChsaWJ1YXJncC1zby15KQorIAorIGFyX29ianMgPSAgJChsaWJjLXkpICQobGliYy1zdGF0aWMteSkgJChsaWJjcnlwdC1hLXkpIFwKKyAJJChsaWJkbC1hLXkpICQobGliaW50bC1hLXkpICQobGlibS1hLXkpICQobGlibnNsLWEteSkgXAorIAkkKGxpYnB0aHJlYWQtYS15KSAkKGxpYnRocmVhZF9kYi1hLXkpIFwKKy0JJChsaWJyZXNvbHYtYS15KSAkKGxpYnJ0LWEteSkgJChsaWJ1dGlsLWEteSkgJChsaWJ1YmFja3RyYWNlLWEteSkKKysJJChsaWJyZXNvbHYtYS15KSAkKGxpYnJ0LWEteSkgJChsaWJ1dGlsLWEteSkgJChsaWJ1YmFja3RyYWNlLWEteSkgJChsaWJ1YXJncC1hLXkpCisgaWZlcSAoJChET1BJQykseSkKKyBhcl9vYmpzIDo9ICQoYXJfb2Jqczoubz0ub3MpCisgZW5kaWYKK0BAIC00OTgsNyArNDk5LDcgQEAgZmlsZXMuZGVwIDo9ICQobGliYy1hLXkpICQobGliYy1zby15KSAkKGxpYmMtbm9uc2hhcmVkLXkpIFwKKyAJJChsaWJydC1hLXkpICQobGlicnQtc28teSkgICQobGlicmVzb2x2LWEteSkgJChsaWJyZXNvbHYtc28teSkgXAorIAkkKGxpYmNyeXB0LWEteSkgJChsaWJjcnlwdC1zby15KSAkKGxpYnV0aWwtYS15KSAkKGxpYnV0aWwtc28teSkgXAorIAkkKGxpYm5zbC1hLXkpICQobGlibnNsLXNvLXkpICQobGRzby15KSAkKGxpYmRsLWEteSkgJChsaWJkbC1zby15KSBcCistCSQobGlidWJhY2t0cmFjZS1hLXkpICQobGlidWJhY2t0cmFjZS1zby15KQorKwkkKGxpYnViYWNrdHJhY2UtYS15KSAkKGxpYnViYWNrdHJhY2Utc28teSkgJChsaWJ1YXJncC1zby15KSAkKGxpYnVhcmdwLWEteSkKKyAuZGVwZW5kcy5kZXAgOj0gXAorIAkkKHBhdHN1YnN0ICUucywlLnMuZGVwLCQoZmlsdGVyICUucywkKGZpbGVzLmRlcCkpKSBcCisgCSQocGF0c3Vic3QgJS5vLCUuby5kZXAsJChmaWx0ZXIgJS5vLCQoZmlsZXMuZGVwKSkpIFwKK2RpZmYgLS1naXQgYS9SdWxlcy5tYWsgYi9SdWxlcy5tYWsKK2luZGV4IGRlOWZmYjMuLmEyYmFmNTggMTAwNjQ0CistLS0gYS9SdWxlcy5tYWsKKysrKyBiL1J1bGVzLm1haworQEAgLTYwMiw2ICs2MDIsMTkgQEAgZXhwb3J0IFVCQUNLVFJBQ0VfQVNORUVERUQ6PSQoc2hlbGwgJChDQykgLVdsLC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgLXEgLS0gLS0KKyBlbHNlCisgZXhwb3J0IFVCQUNLVFJBQ0VfQVNORUVERUQ6PSIiCisgZW5kaWYKKytpZmVxICgkKFVDTElCQ19IQVNfQVJHUCkseSkKKytpZmVxICgkKEhBUkRXSVJFRF9BQlNQQVRIKSx5KQorKyMgT25seSB1c2VkIGluIGluc3RhbGxlZCBsaWJjLnNvIGxpbmtlciBzY3JpcHQKKytVQVJHUF9GVUxMX05BTUUgOj0gJChzdWJzdCAvLywvLCQoUlVOVElNRV9QUkVGSVgpJChNVUxUSUxJQl9ESVIpL2xpYnVhcmdwLnNvLiQoTUFKT1JfVkVSU0lPTikpCisrZWxzZQorK1VBUkdQX0ZVTExfTkFNRSA6PSBsaWJ1YXJncC5zby4kKE1BSk9SX1ZFUlNJT04pCisrZW5kaWYKKytleHBvcnQgVUFSR1BfQVNORUVERUQ6PSQoc2hlbGwgJChDQykgLVdsLC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgLXEgLS0gLS1hcy1uZWVkZWQgJiYgXAorKwllY2hvICJHUk9VUCAoIEFTX05FRURFRCAoICQoVUFSR1BfRlVMTF9OQU1FKSApICkiIHx8IFwKKysJZWNobyAiR1JPVVAgKCAkKFVBUkdQX0ZVTExfTkFNRSkgKSIpCisrZWxzZQorK2V4cG9ydCBVQVJHUF9BU05FRURFRDo9IiIKKytlbmRpZgorIGVuZGlmCisgCisgIyBBZGQgYSBidW5jaCBvZiBleHRyYSBwZWRhbnRpYyBhbm5veWluZ2x5IHN0cmljdCBjaGVja3MKK2RpZmYgLS1naXQgYS9leHRyYS9Db25maWdzL0NvbmZpZy5pbiBiL2V4dHJhL0NvbmZpZ3MvQ29uZmlnLmluCitpbmRleCAyNDJlNDVhLi5iMzZkNGM5IDEwMDY0NAorLS0tIGEvZXh0cmEvQ29uZmlncy9Db25maWcuaW4KKysrKyBiL2V4dHJhL0NvbmZpZ3MvQ29uZmlnLmluCitAQCAtMTk0Myw2ICsxOTQzLDIzIEBAIGNvbmZpZyBVQ0xJQkNfSEFTX0dOVV9HRVRTVUJPUFQKKyAJICBBbnN3ZXIgWSBpZiB5b3Ugd2FudCB0byBpbmNsdWRlIGdldHN1Ym9wdCgpLgorIAorIAkgIE1vc3QgcGVvcGxlIHdpbGwgYW5zd2VyIFkuCisrCisrY29uZmlnIFVDTElCQ19IQVNfQVJHUAorKyAgICAgICBib29sICJTdXBwb3J0IGFyZ3AgKGFzIHN0YW5kYWxvbmUgc2hhcmVkIG9iamVjdCkiCisrICAgICAgIGRlZmF1bHQgbgorKyAgICAgICBoZWxwCisrICAgICAgICAgQXJncCBpcyBhbiBpbnRlcmZhY2UgZm9yIHBhcnNpbmcgdW5peC1zdHlsZSBhcmd1bWVudCB2ZWN0b3JzLiBVbmxpa2UKKysgICAgICAgICB0aGUgY29tbW9uIGdldG9wdCBpbnRlcmZhY2UsIGl0IHByb3ZpZGVzIG1hbnkgYWR2YW5jZWQgZmVhdHVyZXMgaW4KKysgICAgICAgICBhZGRpdGlvbiB0byBwYXJzaW5nIG9wdGlvbnMsIHN1Y2ggYXMgYXV0b21hdGljIG91dHB1dCBpbiByZXNwb25zZSB0bworKyAgICAgICAgIGAtLWhlbHAnIGFuZCBgLS12ZXJzaW9uJyBvcHRpb25zLgorKyAgICAgICAgIEEgbGlicmFyeSBjYW4gZXhwb3J0IGFuIGFyZ3Agb3B0aW9uIHBhcnNlciwgd2hpY2ggcHJvZ3JhbXMgY2FuIGVhc2lseQorKyAgICAgICAgIHVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZWlyIG93biBvcHRpb24gcGFyc2VyLgorKyAgICAgICAgIEEgbmV3IHNoYXJlZCBvYmplY3QgImxpYnVhcmdwIiBpcyBjcmVhdGVkLiBUaGUgImxpYmMuc28iIGxpbmtlciBzY3JpcHQKKysgICAgICAgICBjb250YWlucyB0aGUgQVNfTkVFREVEIGVudHJ5IGZvciBnZXR0aW5nIHRoZSBsaWJ1YXJncCBsaW5rZWQgYXV0b21hdGljYWxseS4KKysgICAgICAgICBBcmdwIHN1cHBvcnQgaXMgbmVlZGVkIGJ5IGVsZnV0aWxzIGxpYmR3LgorKworKyAgICAgICAgIE1vc3QgcGVvcGxlIGNhbiBzYWZlbHkgYW5zd2VyIE4uCisrCisgZW5kbWVudQorIAorIAorZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXJncC5oIGIvaW5jbHVkZS9hcmdwLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi45ZDUzNzI4CistLS0gL2Rldi9udWxsCisrKysgYi9pbmNsdWRlL2FyZ3AuaAorQEAgLTAsMCArMSw1NjYgQEAKKysvKiBIaWVyYXJjaGlhbCBhcmd1bWVudCBwYXJzaW5nLCBsYXllcmVkIG92ZXIgZ2V0b3B0LgorKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5CisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXMgYXQgZ251LmFpLm1pdC5lZHU+LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLgorKworKyAgIE1vZGlmaWVkIGZvciB1Q2xpYmMgYnk6IFNhbHZhdG9yZSBDcm8gPHNhbHZhdG9yZS5jcm8gYXQgc3QuY29tPgorKyovCisrCisrI2lmbmRlZiBfQVJHUF9ICisrI2RlZmluZSBfQVJHUF9ICisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPGxpbWl0cy5oPgorKworKyNkZWZpbmUgX19uZWVkX2Vycm9yX3QKKysjaW5jbHVkZSA8ZXJybm8uaD4KKysKKysjaWZuZGVmIF9fY29uc3QKKysjIGRlZmluZSBfX2NvbnN0IGNvbnN0CisrI2VuZGlmCisrCisrI2lmbmRlZiBfX1RIUk9XCisrIyBkZWZpbmUgX19USFJPVworKyNlbmRpZgorKyNpZm5kZWYgX19OVEgKKysjIGRlZmluZSBfX05USChmY3QpIGZjdCBfX1RIUk9XCisrI2VuZGlmCisrCisrI2lmbmRlZiBfX2F0dHJpYnV0ZV9fCisrLyogVGhpcyBmZWF0dXJlIGlzIGF2YWlsYWJsZSBpbiBnY2MgdmVyc2lvbnMgMi41IGFuZCBsYXRlci4gICovCisrIyBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA1KSB8fCBkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKKysjICBkZWZpbmUgX19hdHRyaWJ1dGVfXyhTcGVjKSAvKiBlbXB0eSAqLworKyMgZW5kaWYKKysvKiBUaGUgX18tcHJvdGVjdGVkIHZhcmlhbnRzIG9mIGBmb3JtYXQnIGFuZCBgcHJpbnRmJyBhdHRyaWJ1dGVzCisrICAgYXJlIGFjY2VwdGVkIGJ5IGdjYyB2ZXJzaW9ucyAyLjYuNCAoZWZmZWN0aXZlbHkgMi43KSBhbmQgbGF0ZXIuICAqLworKyMgaWYgX19HTlVDX18gPCAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDwgNykgfHwgZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCisrIyAgZGVmaW5lIF9fZm9ybWF0X18gZm9ybWF0CisrIyAgZGVmaW5lIF9fcHJpbnRmX18gcHJpbnRmCisrIyBlbmRpZgorKyNlbmRpZgorKworKy8qIEdDQyAyLjk1IGFuZCBsYXRlciBoYXZlICJfX3Jlc3RyaWN0IjsgQzk5IGNvbXBpbGVycyBoYXZlCisrICAgInJlc3RyaWN0IiwgYW5kICJjb25maWd1cmUiIG1heSBoYXZlIGRlZmluZWQgInJlc3RyaWN0Ii4gICovCisrI2lmbmRlZiBfX3Jlc3RyaWN0CisrIyBpZiAhICgyIDwgX19HTlVDX18gfHwgKDIgPT0gX19HTlVDX18gJiYgOTUgPD0gX19HTlVDX01JTk9SX18pKQorKyMgIGlmIGRlZmluZWQgcmVzdHJpY3QgfHwgMTk5OTAxTCA8PSBfX1NURENfVkVSU0lPTl9fCisrIyAgIGRlZmluZSBfX3Jlc3RyaWN0IHJlc3RyaWN0CisrIyAgZWxzZQorKyMgICBkZWZpbmUgX19yZXN0cmljdAorKyMgIGVuZGlmCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpZm5kZWYgX19lcnJvcl90X2RlZmluZWQKKyt0eXBlZGVmIGludCBlcnJvcl90OworKyMgZGVmaW5lIF9fZXJyb3JfdF9kZWZpbmVkCisrI2VuZGlmCisrDAorKyNpZmRlZiAgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKysvKiBBIGRlc2NyaXB0aW9uIG9mIGEgcGFydGljdWxhciBvcHRpb24uICBBIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YKKysgICB0aGVzZSBpcyBwYXNzZWQgaW4gdGhlIE9QVElPTlMgZmllbGQgb2YgYW4gYXJncCBzdHJ1Y3R1cmUuICBFYWNoIG9wdGlvbgorKyAgIGVudHJ5IGNhbiBjb3JyZXNwb25kIHRvIG9uZSBsb25nIG9wdGlvbiBhbmQvb3Igb25lIHNob3J0IG9wdGlvbjsgbW9yZQorKyAgIG5hbWVzIGZvciB0aGUgc2FtZSBvcHRpb24gY2FuIGJlIGFkZGVkIGJ5IGZvbGxvd2luZyBhbiBlbnRyeSBpbiBhbiBvcHRpb24KKysgICBhcnJheSB3aXRoIG9wdGlvbnMgaGF2aW5nIHRoZSBPUFRJT05fQUxJQVMgZmxhZyBzZXQuICAqLworK3N0cnVjdCBhcmdwX29wdGlvbgorK3sKKysgIC8qIFRoZSBsb25nIG9wdGlvbiBuYW1lLiAgRm9yIG1vcmUgdGhhbiBvbmUgbmFtZSBmb3IgdGhlIHNhbWUgb3B0aW9uLCB5b3UKKysgICAgIGNhbiB1c2UgZm9sbG93aW5nIG9wdGlvbnMgd2l0aCB0aGUgT1BUSU9OX0FMSUFTIGZsYWcgc2V0LiAgKi8KKysgIF9fY29uc3QgY2hhciAqbmFtZTsKKysKKysgIC8qIFdoYXQga2V5IGlzIHJldHVybmVkIGZvciB0aGlzIG9wdGlvbi4gIElmID4gMCBhbmQgcHJpbnRhYmxlLCB0aGVuIGl0J3MKKysgICAgIGFsc28gYWNjZXB0ZWQgYXMgYSBzaG9ydCBvcHRpb24uICAqLworKyAgaW50IGtleTsKKysKKysgIC8qIElmIG5vbi1OVUxMLCB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBhcmd1bWVudCBhc3NvY2lhdGVkIHdpdGggdGhpcworKyAgICAgb3B0aW9uLCB3aGljaCBpcyByZXF1aXJlZCB1bmxlc3MgdGhlIE9QVElPTl9BUkdfT1BUSU9OQUwgZmxhZyBpcyBzZXQuICovCisrICBfX2NvbnN0IGNoYXIgKmFyZzsKKysKKysgIC8qIE9QVElPTl8gZmxhZ3MuICAqLworKyAgaW50IGZsYWdzOworKworKyAgLyogVGhlIGRvYyBzdHJpbmcgZm9yIHRoaXMgb3B0aW9uLiAgSWYgYm90aCBOQU1FIGFuZCBLRVkgYXJlIDAsIFRoaXMgc3RyaW5nCisrICAgICB3aWxsIGJlIHByaW50ZWQgb3V0ZGVudGVkIGZyb20gdGhlIG5vcm1hbCBvcHRpb24gY29sdW1uLCBtYWtpbmcgaXQKKysgICAgIHVzZWZ1bCBhcyBhIGdyb3VwIGhlYWRlciAoaXQgd2lsbCBiZSB0aGUgZmlyc3QgdGhpbmcgcHJpbnRlZCBpbiBpdHMKKysgICAgIGdyb3VwKTsgaW4gdGhpcyB1c2FnZSwgaXQncyBjb252ZW50aW9uYWwgdG8gZW5kIHRoZSBzdHJpbmcgd2l0aCBhIGA6Jy4gICovCisrICBfX2NvbnN0IGNoYXIgKmRvYzsKKysKKysgIC8qIFRoZSBncm91cCB0aGlzIG9wdGlvbiBpcyBpbi4gIEluIGEgbG9uZyBoZWxwIG1lc3NhZ2UsIG9wdGlvbnMgYXJlIHNvcnRlZAorKyAgICAgYWxwaGFiZXRpY2FsbHkgd2l0aGluIGVhY2ggZ3JvdXAsIGFuZCB0aGUgZ3JvdXBzIHByZXNlbnRlZCBpbiB0aGUgb3JkZXIKKysgICAgIDAsIDEsIDIsIC4uLiwgbiwgLW0sIC4uLiwgLTIsIC0xLiAgRXZlcnkgZW50cnkgaW4gYW4gb3B0aW9ucyBhcnJheSB3aXRoCisrICAgICBpZiB0aGlzIGZpZWxkIDAgd2lsbCBpbmhlcml0IHRoZSBncm91cCBudW1iZXIgb2YgdGhlIHByZXZpb3VzIGVudHJ5LCBvcgorKyAgICAgemVybyBpZiBpdCdzIHRoZSBmaXJzdCBvbmUsIHVubGVzcyBpdHMgYSBncm91cCBoZWFkZXIgKE5BTUUgYW5kIEtFWSBib3RoCisrICAgICAwKSwgaW4gd2hpY2ggY2FzZSwgdGhlIHByZXZpb3VzIGVudHJ5ICsgMSBpcyB0aGUgZGVmYXVsdC4gIEF1dG9tYWdpYworKyAgICAgb3B0aW9ucyBzdWNoIGFzIC0taGVscCBhcmUgcHV0IGludG8gZ3JvdXAgLTEuICAqLworKyAgaW50IGdyb3VwOworK307CisrCisrLyogVGhlIGFyZ3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9wdGlvbiBpcyBvcHRpb25hbC4gICovCisrI2RlZmluZSBPUFRJT05fQVJHX09QVElPTkFMCTB4MQorKworKy8qIFRoaXMgb3B0aW9uIGlzbid0IGRpc3BsYXllZCBpbiBhbnkgaGVscCBtZXNzYWdlcy4gICovCisrI2RlZmluZSBPUFRJT05fSElEREVOCSAgICAgICAJMHgyCisrCisrLyogVGhpcyBvcHRpb24gaXMgYW4gYWxpYXMgZm9yIHRoZSBjbG9zZXN0IHByZXZpb3VzIG5vbi1hbGlhcyBvcHRpb24uICBUaGlzCisrICAgbWVhbnMgdGhhdCBpdCB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgc2FtZSBoZWxwIGVudHJ5LCBhbmQgd2lsbCBpbmhlcml0CisrICAgZmllbGRzIG90aGVyIHRoYW4gTkFNRSBhbmQgS0VZIGZyb20gdGhlIGFsaWFzZWQgb3B0aW9uLiAgKi8KKysjZGVmaW5lIE9QVElPTl9BTElBUwkJMHg0CisrCisrLyogVGhpcyBvcHRpb24gaXNuJ3QgYWN0dWFsbHkgYW4gb3B0aW9uIChhbmQgc28gc2hvdWxkIGJlIGlnbm9yZWQgYnkgdGhlCisrICAgYWN0dWFsIG9wdGlvbiBwYXJzZXIpLCBidXQgcmF0aGVyIGFuIGFyYml0cmFyeSBwaWVjZSBvZiBkb2N1bWVudGF0aW9uIHRoYXQKKysgICBzaG91bGQgYmUgZGlzcGxheWVkIGluIG11Y2ggdGhlIHNhbWUgbWFubmVyIGFzIHRoZSBvcHRpb25zLiAgSWYgdGhpcyBmbGFnCisrICAgaXMgc2V0LCB0aGVuIHRoZSBvcHRpb24gTkFNRSBmaWVsZCBpcyBkaXNwbGF5ZWQgdW5tb2RpZmllZCAoZS5nLiwgbm8gYC0tJworKyAgIHByZWZpeCBpcyBhZGRlZCkgYXQgdGhlIGxlZnQtbWFyZ2luICh3aGVyZSBhICpzaG9ydCogb3B0aW9uIHdvdWxkIG5vcm1hbGx5CisrICAgYmUgZGlzcGxheWVkKSwgYW5kIHRoZSBkb2N1bWVudGF0aW9uIHN0cmluZyBpbiB0aGUgbm9ybWFsIHBsYWNlLiAgRm9yCisrICAgcHVycG9zZXMgb2Ygc29ydGluZywgYW55IGxlYWRpbmcgd2hpdGVzcGFjZSBhbmQgcHVuY3R1YXRpb24gaXMgaWdub3JlZCwKKysgICBleGNlcHQgdGhhdCBpZiB0aGUgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIG5vdCBgLScsIHRoaXMgZW50cnkKKysgICBpcyBkaXNwbGF5ZWQgYWZ0ZXIgYWxsIG9wdGlvbnMgKGFuZCBPUFRJT05fRE9DIGVudHJpZXMgd2l0aCBhIGxlYWRpbmcgYC0nKQorKyAgIGluIHRoZSBzYW1lIGdyb3VwLiAgKi8KKysjZGVmaW5lIE9QVElPTl9ET0MJCTB4OAorKworKy8qIFRoaXMgb3B0aW9uIHNob3VsZG4ndCBiZSBpbmNsdWRlZCBpbiBgbG9uZycgdXNhZ2UgbWVzc2FnZXMgKGJ1dCBpcyBzdGlsbAorKyAgIGluY2x1ZGVkIGluIGhlbHAgbWVzc2FnZXMpLiAgVGhpcyBpcyBtYWlubHkgaW50ZW5kZWQgZm9yIG9wdGlvbnMgdGhhdCBhcmUKKysgICBjb21wbGV0ZWx5IGRvY3VtZW50ZWQgaW4gYW4gYXJncCdzIEFSR1NfRE9DIGZpZWxkLCBpbiB3aGljaCBjYXNlIGluY2x1ZGluZworKyAgIHRoZSBvcHRpb24gaW4gdGhlIGdlbmVyaWMgdXNhZ2UgbGlzdCB3b3VsZCBiZSByZWR1bmRhbnQuICBGb3IgaW5zdGFuY2UsCisrICAgaWYgQVJHU19ET0MgaXMgIkZPTyBCQVJcbi14IEJMQUgiLCBhbmQgdGhlIGAteCcgb3B0aW9uJ3MgcHVycG9zZSBpcyB0bworKyAgIGRpc3Rpbmd1aXNoIHRoZXNlIHR3byBjYXNlcywgLXggc2hvdWxkIHByb2JhYmx5IGJlIG1hcmtlZAorKyAgIE9QVElPTl9OT19VU0FHRS4gICovCisrI2RlZmluZSBPUFRJT05fTk9fVVNBR0UJCTB4MTAKKysMCisrc3RydWN0IGFyZ3A7CQkJLyogZndkIGRlY2xhcmUgdGhpcyB0eXBlICovCisrc3RydWN0IGFyZ3Bfc3RhdGU7CQkvKiAiICovCisrc3RydWN0IGFyZ3BfY2hpbGQ7CQkvKiAiICovCisrCisrLyogVGhlIHR5cGUgb2YgYSBwb2ludGVyIHRvIGFuIGFyZ3AgcGFyc2luZyBmdW5jdGlvbi4gICovCisrdHlwZWRlZiBlcnJvcl90ICgqYXJncF9wYXJzZXJfdCkgKGludCBfX2tleSwgY2hhciAqX19hcmcsCisrCQkJCSAgc3RydWN0IGFyZ3Bfc3RhdGUgKl9fc3RhdGUpOworKworKy8qIFdoYXQgdG8gcmV0dXJuIGZvciB1bnJlY29nbml6ZWQga2V5cy4gIEZvciBzcGVjaWFsIEFSR1BfS0VZXyBrZXlzLCBzdWNoCisrICAgcmV0dXJucyB3aWxsIHNpbXBseSBiZSBpZ25vcmVkLiAgRm9yIHVzZXIga2V5cywgdGhpcyBlcnJvciB3aWxsIGJlIHR1cm5lZAorKyAgIGludG8gRUlOVkFMIChpZiB0aGUgY2FsbCB0byBhcmdwX3BhcnNlIGlzIHN1Y2ggdGhhdCBlcnJvcnMgYXJlIHByb3BhZ2F0ZWQKKysgICBiYWNrIHRvIHRoZSB1c2VyIGluc3RlYWQgb2YgZXhpdGluZyk7IHJldHVybmluZyBFSU5WQUwgaXRzZWxmIHdvdWxkIHJlc3VsdAorKyAgIGluIGFuIGltbWVkaWF0ZSBzdG9wIHRvIHBhcnNpbmcgaW4gKmFsbCogY2FzZXMuICAqLworKyNkZWZpbmUgQVJHUF9FUlJfVU5LTk9XTglFMkJJRyAvKiBIdXJkIHNob3VsZCBuZXZlciBuZWVkIEUyQklHLiAgWFhYICovCisrCisrLyogU3BlY2lhbCB2YWx1ZXMgZm9yIHRoZSBLRVkgYXJndW1lbnQgdG8gYW4gYXJndW1lbnQgcGFyc2luZyBmdW5jdGlvbi4KKysgICBBUkdQX0VSUl9VTktOT1dOIHNob3VsZCBiZSByZXR1cm5lZCBpZiB0aGV5IGFyZW4ndCB1bmRlcnN0b29kLgorKworKyAgIFRoZSBzZXF1ZW5jZSBvZiBrZXlzIHRvIGEgcGFyc2luZyBmdW5jdGlvbiBpcyBlaXRoZXIgKHdoZXJlIGVhY2gKKysgICB1cHBlcmNhc2VkIHdvcmQgc2hvdWxkIGJlIHByZWZpeGVkIGJ5IGBBUkdQX0tFWV8nIGFuZCBvcHQgaXMgYSB1c2VyIGtleSk6CisrCisrICAgICAgIElOSVQgb3B0Li4uIE5PX0FSR1MgRU5EIFNVQ0NFU1MgIC0tIE5vIG5vbi1vcHRpb24gYXJndW1lbnRzIGF0IGFsbAorKyAgIG9yICBJTklUIChvcHQgfCBBUkcpLi4uIEVORCBTVUNDRVNTICAtLSBBbGwgbm9uLW9wdGlvbiBhcmdzIHBhcnNlZAorKyAgIG9yICBJTklUIChvcHQgfCBBUkcpLi4uIFNVQ0NFU1MgICAgICAtLSBTb21lIG5vbi1vcHRpb24gYXJnIHVucmVjb2duaXplZAorKworKyAgIFRoZSB0aGlyZCBjYXNlIGlzIHdoZXJlIGV2ZXJ5IHBhcnNlciByZXR1cm5lZCBBUkdQX0tFWV9VTktOT1dOIGZvciBhbgorKyAgIGFyZ3VtZW50LCBpbiB3aGljaCBjYXNlIHBhcnNpbmcgc3RvcHMgYXQgdGhhdCBhcmd1bWVudCAocmV0dXJuaW5nIHRoZQorKyAgIHVucGFyc2VkIGFyZ3VtZW50cyB0byB0aGUgY2FsbGVyIG9mIGFyZ3BfcGFyc2UgaWYgcmVxdWVzdGVkLCBvciBzdG9wcGluZworKyAgIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpZiBub3QpLgorKworKyAgIElmIGFuIGVycm9yIG9jY3VycyAoZWl0aGVyIGRldGVjdGVkIGJ5IGFyZ3AsIG9yIGJlY2F1c2UgdGhlIHBhcnNpbmcKKysgICBmdW5jdGlvbiByZXR1cm5lZCBhbiBlcnJvciB2YWx1ZSksIHRoZW4gdGhlIHBhcnNlciBpcyBjYWxsZWQgd2l0aAorKyAgIEFSR1BfS0VZX0VSUk9SLCBhbmQgbm8gZnVydGhlciBjYWxscyBhcmUgbWFkZS4gICovCisrCisrLyogVGhpcyBpcyBub3QgYW4gb3B0aW9uIGF0IGFsbCwgYnV0IHJhdGhlciBhIGNvbW1hbmQgbGluZSBhcmd1bWVudC4gIElmIGEKKysgICBwYXJzZXIgcmVjZWl2aW5nIHRoaXMga2V5IHJldHVybnMgc3VjY2VzcywgdGhlIGZhY3QgaXMgcmVjb3JkZWQsIGFuZCB0aGUKKysgICBBUkdQX0tFWV9OT19BUkdTIGNhc2Ugd29uJ3QgYmUgdXNlZC4gIEhPV0VWRVIsIGlmIHdoaWxlIHByb2Nlc3NpbmcgdGhlCisrICAgYXJndW1lbnQsIGEgcGFyc2VyIGZ1bmN0aW9uIGRlY3JlbWVudHMgdGhlIE5FWFQgZmllbGQgb2YgdGhlIHN0YXRlIGl0J3MKKysgICBwYXNzZWQsIHRoZSBvcHRpb24gd29uJ3QgYmUgY29uc2lkZXJlZCBwcm9jZXNzZWQ7IHRoaXMgaXMgdG8gYWxsb3cgeW91IHRvCisrICAgYWN0dWFsbHkgbW9kaWZ5IHRoZSBhcmd1bWVudCAocGVyaGFwcyBpbnRvIGFuIG9wdGlvbiksIGFuZCBoYXZlIGl0CisrICAgcHJvY2Vzc2VkIGFnYWluLiAgKi8KKysjZGVmaW5lIEFSR1BfS0VZX0FSRwkJMAorKy8qIFRoZXJlIGFyZSByZW1haW5pbmcgYXJndW1lbnRzIG5vdCBwYXJzZWQgYnkgYW55IHBhcnNlciwgd2hpY2ggbWF5IGJlIGZvdW5kCisrICAgc3RhcnRpbmcgYXQgKFNUQVRFLT5hcmd2ICsgU1RBVEUtPm5leHQpLiAgSWYgc3VjY2VzcyBpcyByZXR1cm5lZCwgYnV0CisrICAgU1RBVEUtPm5leHQgbGVmdCB1bnRvdWNoZWQsIGl0J3MgYXNzdW1lZCB0aGF0IGFsbCBhcmd1bWVudHMgd2VyZSBjb25zdW1lLAorKyAgIG90aGVyd2lzZSwgdGhlIHBhcnNlciBzaG91bGQgYWRqdXN0IFNUQVRFLT5uZXh0IHRvIHJlZmxlY3QgYW55IGFyZ3VtZW50cworKyAgIGNvbnN1bWVkLiAgKi8KKysjZGVmaW5lIEFSR1BfS0VZX0FSR1MJCTB4MTAwMDAwNgorKy8qIFRoZXJlIGFyZSBubyBtb3JlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgYXQgYWxsLiAgKi8KKysjZGVmaW5lIEFSR1BfS0VZX0VORAkJMHgxMDAwMDAxCisrLyogQmVjYXVzZSBpdCdzIGNvbW1vbiB0byB3YW50IHRvIGRvIHNvbWUgc3BlY2lhbCBwcm9jZXNzaW5nIGlmIHRoZXJlIGFyZW4ndAorKyAgIGFueSBub24tb3B0aW9uIGFyZ3MsIHVzZXIgcGFyc2VycyBhcmUgY2FsbGVkIHdpdGggdGhpcyBrZXkgaWYgdGhleSBkaWRuJ3QKKysgICBzdWNjZXNzZnVsbHkgcHJvY2VzcyBhbnkgbm9uLW9wdGlvbiBhcmd1bWVudHMuICBDYWxsZWQganVzdCBiZWZvcmUKKysgICBBUkdQX0tFWV9FTkQgKHdoZXJlIG1vcmUgZ2VuZXJhbCB2YWxpZGl0eSBjaGVja3Mgb24gcHJldmlvdXNseSBwYXJzZWQKKysgICBhcmd1bWVudHMgY2FuIHRha2UgcGxhY2UpLiAgKi8KKysjZGVmaW5lIEFSR1BfS0VZX05PX0FSR1MJMHgxMDAwMDAyCisrLyogUGFzc2VkIGluIGJlZm9yZSBhbnkgcGFyc2luZyBpcyBkb25lLiAgQWZ0ZXJ3YXJkcywgdGhlIHZhbHVlcyBvZiBlYWNoCisrICAgZWxlbWVudCBvZiB0aGUgQ0hJTERfSU5QVVQgZmllbGQsIGlmIGFueSwgaW4gdGhlIHN0YXRlIHN0cnVjdHVyZSBpcworKyAgIGNvcGllZCB0byBlYWNoIGNoaWxkJ3Mgc3RhdGUgdG8gYmUgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIElOUFVUIGZpZWxkLiAgKi8KKysjZGVmaW5lIEFSR1BfS0VZX0lOSVQJCTB4MTAwMDAwMworKy8qIFVzZSBhZnRlciBhbGwgb3RoZXIga2V5cywgaW5jbHVkaW5nIFNVQ0NFU1MgJiBFTkQuICAqLworKyNkZWZpbmUgQVJHUF9LRVlfRklOSQkJMHgxMDAwMDA3CisrLyogUGFzc2VkIGluIHdoZW4gcGFyc2luZyBoYXMgc3VjY2Vzc2Z1bGx5IGJlZW4gY29tcGxldGVkIChldmVuIGlmIHRoZXJlIGFyZQorKyAgIHN0aWxsIGFyZ3VtZW50cyByZW1haW5pbmcpLiAgKi8KKysjZGVmaW5lIEFSR1BfS0VZX1NVQ0NFU1MJMHgxMDAwMDA0CisrLyogUGFzc2VkIGluIGlmIGFuIGVycm9yIG9jY3Vycy4gICovCisrI2RlZmluZSBBUkdQX0tFWV9FUlJPUgkJMHgxMDAwMDA1CisrCisrLyogQW4gYXJncCBzdHJ1Y3R1cmUgY29udGFpbnMgYSBzZXQgb2Ygb3B0aW9ucyBkZWNsYXJhdGlvbnMsIGEgZnVuY3Rpb24gdG8KKysgICBkZWFsIHdpdGggcGFyc2luZyBvbmUsIGRvY3VtZW50YXRpb24gc3RyaW5nLCBhIHBvc3NpYmxlIHZlY3RvciBvZiBjaGlsZAorKyAgIGFyZ3AncywgYW5kIHBlcmhhcHMgYSBmdW5jdGlvbiB0byBmaWx0ZXIgaGVscCBvdXRwdXQuICBXaGVuIGFjdHVhbGx5CisrICAgcGFyc2luZyBvcHRpb25zLCBnZXRvcHQgaXMgY2FsbGVkIHdpdGggdGhlIHVuaW9uIG9mIGFsbCB0aGUgYXJncAorKyAgIHN0cnVjdHVyZXMgY2hhaW5lZCB0b2dldGhlciB0aHJvdWdoIHRoZWlyIENISUxEIHBvaW50ZXJzLCB3aXRoIGNvbmZsaWN0cworKyAgIGJlaW5nIHJlc29sdmVkIGluIGZhdm9yIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIGluIHRoZSBjaGFpbi4gICovCisrc3RydWN0IGFyZ3AKKyt7CisrICAvKiBBbiBhcnJheSBvZiBhcmdwX29wdGlvbiBzdHJ1Y3R1cmVzLCB0ZXJtaW5hdGVkIGJ5IGFuIGVudHJ5IHdpdGggYm90aAorKyAgICAgTkFNRSBhbmQgS0VZIGhhdmluZyBhIHZhbHVlIG9mIDAuICAqLworKyAgX19jb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdGlvbnM7CisrCisrICAvKiBXaGF0IHRvIGRvIHdpdGggYW4gb3B0aW9uIGZyb20gdGhpcyBzdHJ1Y3R1cmUuICBLRVkgaXMgdGhlIGtleQorKyAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcHRpb24sIGFuZCBBUkcgaXMgYW55IGFzc29jaWF0ZWQgYXJndW1lbnQgKE5VTEwgaWYKKysgICAgIG5vbmUgd2FzIHN1cHBsaWVkKS4gIElmIEtFWSBpc24ndCB1bmRlcnN0b29kLCBBUkdQX0VSUl9VTktOT1dOIHNob3VsZCBiZQorKyAgICAgcmV0dXJuZWQuICBJZiBhIG5vbi16ZXJvLCBub24tQVJHUF9FUlJfVU5LTk9XTiB2YWx1ZSBpcyByZXR1cm5lZCwgdGhlbgorKyAgICAgcGFyc2luZyBpcyBzdG9wcGVkIGltbWVkaWF0ZWx5LCBhbmQgdGhhdCB2YWx1ZSBpcyByZXR1cm5lZCBmcm9tCisrICAgICBhcmdwX3BhcnNlKCkuICBGb3Igc3BlY2lhbCAobm9uLXVzZXItc3VwcGxpZWQpIHZhbHVlcyBvZiBLRVksIHNlZSB0aGUKKysgICAgIEFSR1BfS0VZXyBkZWZpbml0aW9ucyBiZWxvdy4gICovCisrICBhcmdwX3BhcnNlcl90IHBhcnNlcjsKKysKKysgIC8qIEEgc3RyaW5nIGRlc2NyaWJpbmcgd2hhdCBvdGhlciBhcmd1bWVudHMgYXJlIHdhbnRlZCBieSB0aGlzIHByb2dyYW0uICBJdAorKyAgICAgaXMgb25seSB1c2VkIGJ5IGFyZ3BfdXNhZ2UgdG8gcHJpbnQgdGhlIGBVc2FnZTonIG1lc3NhZ2UuICBJZiBpdAorKyAgICAgY29udGFpbnMgbmV3bGluZXMsIHRoZSBzdHJpbmdzIHNlcGFyYXRlZCBieSB0aGVtIGFyZSBjb25zaWRlcmVkCisrICAgICBhbHRlcm5hdGl2ZSB1c2FnZSBwYXR0ZXJucywgYW5kIHByaW50ZWQgb24gc2VwYXJhdGUgbGluZXMgKGxpbmVzIGFmdGVyCisrICAgICB0aGUgZmlyc3QgYXJlIHByZWZpeCBieSBgICBvcjogJyBpbnN0ZWFkIG9mIGBVc2FnZTonKS4gICovCisrICBfX2NvbnN0IGNoYXIgKmFyZ3NfZG9jOworKworKyAgLyogSWYgbm9uLU5VTEwsIGEgc3RyaW5nIGNvbnRhaW5pbmcgZXh0cmEgdGV4dCB0byBiZSBwcmludGVkIGJlZm9yZSBhbmQKKysgICAgIGFmdGVyIHRoZSBvcHRpb25zIGluIGEgbG9uZyBoZWxwIG1lc3NhZ2UgKHNlcGFyYXRlZCBieSBhIHZlcnRpY2FsIHRhYgorKyAgICAgYFx2JyBjaGFyYWN0ZXIpLiAgKi8KKysgIF9fY29uc3QgY2hhciAqZG9jOworKworKyAgLyogQSB2ZWN0b3Igb2YgYXJncF9jaGlsZHJlbiBzdHJ1Y3R1cmVzLCB0ZXJtaW5hdGVkIGJ5IGEgbWVtYmVyIHdpdGggYSAwCisrICAgICBhcmdwIGZpZWxkLCBwb2ludGluZyB0byBjaGlsZCBhcmdwcyBzaG91bGQgYmUgcGFyc2VkIHdpdGggdGhpcyBvbmUuICBBbnkKKysgICAgIGNvbmZsaWN0cyBhcmUgcmVzb2x2ZWQgaW4gZmF2b3Igb2YgdGhpcyBhcmdwLCBvciBlYXJseSBhcmdwcyBpbiB0aGUKKysgICAgIENISUxEUkVOIGxpc3QuICBUaGlzIGZpZWxkIGlzIHVzZWZ1bCBpZiB5b3UgdXNlIGxpYnJhcmllcyB0aGF0IHN1cHBseQorKyAgICAgdGhlaXIgb3duIGFyZ3Agc3RydWN0dXJlLCB3aGljaCB5b3Ugd2FudCB0byB1c2UgaW4gY29uanVuY3Rpb24gd2l0aCB5b3VyCisrICAgICBvd24uICAqLworKyAgX19jb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCAqY2hpbGRyZW47CisrCisrICAvKiBJZiBub24temVybywgdGhpcyBzaG91bGQgYmUgYSBmdW5jdGlvbiB0byBmaWx0ZXIgdGhlIG91dHB1dCBvZiBoZWxwCisrICAgICBtZXNzYWdlcy4gIEtFWSBpcyBlaXRoZXIgYSBrZXkgZnJvbSBhbiBvcHRpb24sIGluIHdoaWNoIGNhc2UgVEVYVCBpcworKyAgICAgdGhhdCBvcHRpb24ncyBoZWxwIHRleHQsIG9yIGEgc3BlY2lhbCBrZXkgZnJvbSB0aGUgQVJHUF9LRVlfSEVMUF8KKysgICAgIGRlZmluZXMsIGJlbG93LCBkZXNjcmliaW5nIHdoaWNoIG90aGVyIGhlbHAgdGV4dCBURVhUIGlzLiAgVGhlIGZ1bmN0aW9uCisrICAgICBzaG91bGQgcmV0dXJuIGVpdGhlciBURVhULCBpZiBpdCBzaG91bGQgYmUgdXNlZCBhcy1pcywgYSByZXBsYWNlbWVudAorKyAgICAgc3RyaW5nLCB3aGljaCBzaG91bGQgYmUgbWFsbG9jZWQsIGFuZCB3aWxsIGJlIGZyZWVkIGJ5IGFyZ3AsIG9yIE5VTEwsCisrICAgICBtZWFuaW5nIGBwcmludCBub3RoaW5nJy4gIFRoZSB2YWx1ZSBmb3IgVEVYVCBpcyAqYWZ0ZXIqIGFueSB0cmFuc2xhdGlvbgorKyAgICAgaGFzIGJlZW4gZG9uZSwgc28gaWYgYW55IG9mIHRoZSByZXBsYWNlbWVudCB0ZXh0IGFsc28gbmVlZHMgdHJhbnNsYXRpb24sCisrICAgICB0aGF0IHNob3VsZCBiZSBkb25lIGJ5IHRoZSBmaWx0ZXIgZnVuY3Rpb24uICBJTlBVVCBpcyBlaXRoZXIgdGhlIGlucHV0CisrICAgICBzdXBwbGllZCB0byBhcmdwX3BhcnNlLCBvciBOVUxMLCBpZiBhcmdwX2hlbHAgd2FzIGNhbGxlZCBkaXJlY3RseS4gICovCisrICBjaGFyICooKmhlbHBfZmlsdGVyKSAoaW50IF9fa2V5LCBfX2NvbnN0IGNoYXIgKl9fdGV4dCwgdm9pZCAqX19pbnB1dCk7CisrCisrICAvKiBJZiBub24temVybyB0aGUgc3RyaW5ncyB1c2VkIGluIHRoZSBhcmdwIGxpYnJhcnkgYXJlIHRyYW5zbGF0ZWQgdXNpbmcKKysgICAgIHRoZSBkb21haW4gZGVzY3JpYmVkIGJ5IHRoaXMgc3RyaW5nLiAgT3RoZXJ3aXNlIHRoZSBjdXJyZW50bHkgaW5zdGFsbGVkCisrICAgICBkZWZhdWx0IGRvbWFpbiBpcyB1c2VkLiAgKi8KKysgIGNvbnN0IGNoYXIgKmFyZ3BfZG9tYWluOworK307CisrCisrLyogUG9zc2libGUgS0VZIGFyZ3VtZW50cyB0byBhIGhlbHAgZmlsdGVyIGZ1bmN0aW9uLiAgKi8KKysjZGVmaW5lIEFSR1BfS0VZX0hFTFBfUFJFX0RPQwkweDIwMDAwMDEgLyogSGVscCB0ZXh0IHByZWNlZWRpbmcgb3B0aW9ucy4gKi8KKysjZGVmaW5lIEFSR1BfS0VZX0hFTFBfUE9TVF9ET0MJMHgyMDAwMDAyIC8qIEhlbHAgdGV4dCBmb2xsb3dpbmcgb3B0aW9ucy4gKi8KKysjZGVmaW5lIEFSR1BfS0VZX0hFTFBfSEVBREVSCTB4MjAwMDAwMyAvKiBPcHRpb24gaGVhZGVyIHN0cmluZy4gKi8KKysjZGVmaW5lIEFSR1BfS0VZX0hFTFBfRVhUUkEJMHgyMDAwMDA0IC8qIEFmdGVyIGFsbCBvdGhlciBkb2N1bWVudGF0aW9uOworKwkJCQkJICAgICBURVhUIGlzIE5VTEwgZm9yIHRoaXMga2V5LiAgKi8KKysvKiBFeHBsYW5hdG9yeSBub3RlIGVtaXR0ZWQgd2hlbiBkdXBsaWNhdGUgb3B0aW9uIGFyZ3VtZW50cyBoYXZlIGJlZW4KKysgICBzdXBwcmVzc2VkLiAgKi8KKysjZGVmaW5lIEFSR1BfS0VZX0hFTFBfRFVQX0FSR1NfTk9URSAweDIwMDAwMDUKKysjZGVmaW5lIEFSR1BfS0VZX0hFTFBfQVJHU19ET0MJMHgyMDAwMDA2IC8qIEFyZ3VtZW50IGRvYyBzdHJpbmcuICAqLworKwwKKysvKiBXaGVuIGFuIGFyZ3AgaGFzIGEgbm9uLXplcm8gQ0hJTERSRU4gZmllbGQsIGl0IHNob3VsZCBwb2ludCB0byBhIHZlY3RvciBvZgorKyAgIGFyZ3BfY2hpbGQgc3RydWN0dXJlcywgZWFjaCBvZiB3aGljaCBkZXNjcmliZXMgYSBzdWJzaWRpYXJ5IGFyZ3AuICAqLworK3N0cnVjdCBhcmdwX2NoaWxkCisreworKyAgLyogVGhlIGNoaWxkIHBhcnNlci4gICovCisrICBfX2NvbnN0IHN0cnVjdCBhcmdwICphcmdwOworKworKyAgLyogRmxhZ3MgZm9yIHRoaXMgY2hpbGQuICAqLworKyAgaW50IGZsYWdzOworKworKyAgLyogSWYgbm9uLXplcm8sIGFuIG9wdGlvbmFsIGhlYWRlciB0byBiZSBwcmludGVkIGluIGhlbHAgb3V0cHV0IGJlZm9yZSB0aGUKKysgICAgIGNoaWxkIG9wdGlvbnMuICBBcyBhIHNpZGUtZWZmZWN0LCBhIG5vbi16ZXJvIHZhbHVlIGZvcmNlcyB0aGUgY2hpbGQKKysgICAgIG9wdGlvbnMgdG8gYmUgZ3JvdXBlZCB0b2dldGhlcjsgdG8gYWNoaWV2ZSB0aGlzIGVmZmVjdCB3aXRob3V0IGFjdHVhbGx5CisrICAgICBwcmludGluZyBhIGhlYWRlciBzdHJpbmcsIHVzZSBhIHZhbHVlIG9mICIiLiAgKi8KKysgIF9fY29uc3QgY2hhciAqaGVhZGVyOworKworKyAgLyogV2hlcmUgdG8gZ3JvdXAgdGhlIGNoaWxkIG9wdGlvbnMgcmVsYXRpdmUgdG8gdGhlIG90aGVyIChgY29uc29saWRhdGVkJykKKysgICAgIG9wdGlvbnMgaW4gdGhlIHBhcmVudCBhcmdwOyB0aGUgdmFsdWVzIGFyZSB0aGUgc2FtZSBhcyB0aGUgR1JPVVAgZmllbGQKKysgICAgIGluIGFyZ3Bfb3B0aW9uIHN0cnVjdHMsIGJ1dCBhbGwgY2hpbGQtZ3JvdXBpbmdzIGZvbGxvdyBwYXJlbnQgb3B0aW9ucyBhdAorKyAgICAgYSBwYXJ0aWN1bGFyIGdyb3VwIGxldmVsLiAgSWYgYm90aCB0aGlzIGZpZWxkIGFuZCBIRUFERVIgYXJlIHplcm8sIHRoZW4KKysgICAgIHRoZXkgYXJlbid0IGdyb3VwZWQgYXQgYWxsLCBidXQgcmF0aGVyIG1lcmdlZCB3aXRoIHRoZSBwYXJlbnQgb3B0aW9ucworKyAgICAgKG1lcmdpbmcgdGhlIGNoaWxkJ3MgZ3JvdXBpbmcgbGV2ZWxzIHdpdGggdGhlIHBhcmVudHMpLiAgKi8KKysgIGludCBncm91cDsKKyt9OworKwwKKysvKiBQYXJzaW5nIHN0YXRlLiAgVGhpcyBpcyBwcm92aWRlZCB0byBwYXJzaW5nIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYXJncCwKKysgICB3aGljaCBtYXkgZXhhbWluZSBhbmQsIGFzIG5vdGVkLCBtb2RpZnkgZmllbGRzLiAgKi8KKytzdHJ1Y3QgYXJncF9zdGF0ZQorK3sKKysgIC8qIFRoZSB0b3AgbGV2ZWwgQVJHUCBiZWluZyBwYXJzZWQuICAqLworKyAgX19jb25zdCBzdHJ1Y3QgYXJncCAqcm9vdF9hcmdwOworKworKyAgLyogVGhlIGFyZ3VtZW50IHZlY3RvciBiZWluZyBwYXJzZWQuICBNYXkgYmUgbW9kaWZpZWQuICAqLworKyAgaW50IGFyZ2M7CisrICBjaGFyICoqYXJndjsKKysKKysgIC8qIFRoZSBpbmRleCBpbiBBUkdWIG9mIHRoZSBuZXh0IGFyZyB0aGF0IHRvIGJlIHBhcnNlZC4gIE1heSBiZSBtb2RpZmllZC4gKi8KKysgIGludCBuZXh0OworKworKyAgLyogVGhlIGZsYWdzIHN1cHBsaWVkIHRvIGFyZ3BfcGFyc2UuICBNYXkgYmUgbW9kaWZpZWQuICAqLworKyAgdW5zaWduZWQgZmxhZ3M7CisrCisrICAvKiBXaGlsZSBjYWxsaW5nIGEgcGFyc2luZyBmdW5jdGlvbiB3aXRoIGEga2V5IG9mIEFSR1BfS0VZX0FSRywgdGhpcyBpcyB0aGUKKysgICAgIG51bWJlciBvZiB0aGUgY3VycmVudCBhcmcsIHN0YXJ0aW5nIGF0IHplcm8sIGFuZCBpbmNyZW1lbnRlZCBhZnRlciBlYWNoCisrICAgICBzdWNoIGNhbGwgcmV0dXJucy4gIEF0IGFsbCBvdGhlciB0aW1lcywgdGhpcyBpcyB0aGUgbnVtYmVyIG9mIHN1Y2gKKysgICAgIGFyZ3VtZW50cyB0aGF0IGhhdmUgYmVlbiBwcm9jZXNzZWQuICAqLworKyAgdW5zaWduZWQgYXJnX251bTsKKysKKysgIC8qIElmIG5vbi16ZXJvLCB0aGUgaW5kZXggaW4gQVJHViBvZiB0aGUgZmlyc3QgYXJndW1lbnQgZm9sbG93aW5nIGEgc3BlY2lhbAorKyAgICAgYC0tJyBhcmd1bWVudCAod2hpY2ggcHJldmVudHMgYW55dGhpbmcgZm9sbG93aW5nIGJlaW5nIGludGVycHJldGVkIGFzIGFuCisrICAgICBvcHRpb24pLiAgT25seSBzZXQgb25jZSBhcmd1bWVudCBwYXJzaW5nIGhhcyBwcm9jZWVkZWQgcGFzdCB0aGlzIHBvaW50LiAqLworKyAgaW50IHF1b3RlZDsKKysKKysgIC8qIEFuIGFyYml0cmFyeSBwb2ludGVyIHBhc3NlZCBpbiBmcm9tIHRoZSB1c2VyLiAgKi8KKysgIHZvaWQgKmlucHV0OworKyAgLyogVmFsdWVzIHRvIHBhc3MgdG8gY2hpbGQgcGFyc2Vycy4gIFRoaXMgdmVjdG9yIHdpbGwgYmUgdGhlIHNhbWUgbGVuZ3RoIGFzCisrICAgICB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGZvciB0aGUgY3VycmVudCBwYXJzZXIuICAqLworKyAgdm9pZCAqKmNoaWxkX2lucHV0czsKKysKKysgIC8qIEZvciB0aGUgcGFyc2VyJ3MgdXNlLiAgSW5pdGlhbGl6ZWQgdG8gMC4gICovCisrICB2b2lkICpob29rOworKworKyAgLyogVGhlIG5hbWUgdXNlZCB3aGVuIHByaW50aW5nIG1lc3NhZ2VzLiAgVGhpcyBpcyBpbml0aWFsaXplZCB0byBBUkdWWzBdLAorKyAgICAgb3IgUFJPR1JBTV9JTlZPQ0FUSU9OX05BTUUgaWYgdGhhdCBpcyB1bmF2YWlsYWJsZS4gICovCisrICBjaGFyICpuYW1lOworKworKyAgLyogU3RyZWFtcyB1c2VkIHdoZW4gYXJncCBwcmludHMgc29tZXRoaW5nLiAgKi8KKysgIEZJTEUgKmVycl9zdHJlYW07CQkvKiBGb3IgZXJyb3JzOyBpbml0aWFsaXplZCB0byBzdGRlcnIuICovCisrICBGSUxFICpvdXRfc3RyZWFtOwkJLyogRm9yIGluZm9ybWF0aW9uOyBpbml0aWFsaXplZCB0byBzdGRvdXQuICovCisrCisrICB2b2lkICpwc3RhdGU7CQkJLyogUHJpdmF0ZSwgZm9yIHVzZSBieSBhcmdwLiAgKi8KKyt9OworKwwKKysvKiBGbGFncyBmb3IgYXJncF9wYXJzZSAobm90ZSB0aGF0IHRoZSBkZWZhdWx0cyBhcmUgdGhvc2UgdGhhdCBhcmUKKysgICBjb252ZW5pZW50IGZvciBwcm9ncmFtIGNvbW1hbmQgbGluZSBwYXJzaW5nKTogKi8KKysKKysvKiBEb24ndCBpZ25vcmUgdGhlIGZpcnN0IGVsZW1lbnQgb2YgQVJHVi4gIE5vcm1hbGx5IChhbmQgYWx3YXlzIHVubGVzcworKyAgIEFSR1BfTk9fRVJSUyBpcyBzZXQpIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBhcmd1bWVudCB2ZWN0b3IgaXMKKysgICBza2lwcGVkIGZvciBvcHRpb24gcGFyc2luZyBwdXJwb3NlcywgYXMgaXQgY29ycmVzcG9uZHMgdG8gdGhlIHByb2dyYW0gbmFtZQorKyAgIGluIGEgY29tbWFuZCBsaW5lLiAgKi8KKysjZGVmaW5lIEFSR1BfUEFSU0VfQVJHVjAgIDB4MDEKKysKKysvKiBEb24ndCBwcmludCBlcnJvciBtZXNzYWdlcyBmb3IgdW5rbm93biBvcHRpb25zIHRvIHN0ZGVycjsgdW5sZXNzIHRoaXMgZmxhZworKyAgIGlzIHNldCwgQVJHUF9QQVJTRV9BUkdWMCBpcyBpZ25vcmVkLCBhcyBBUkdWWzBdIGlzIHVzZWQgYXMgdGhlIHByb2dyYW0KKysgICBuYW1lIGluIHRoZSBlcnJvciBtZXNzYWdlcy4gIFRoaXMgZmxhZyBpbXBsaWVzIEFSR1BfTk9fRVhJVCAob24gdGhlCisrICAgYXNzdW1wdGlvbiB0aGF0IHNpbGVudCBleGl0aW5nIHVwb24gZXJyb3JzIGlzIGJhZCBiZWhhdmlvdXIpLiAgKi8KKysjZGVmaW5lIEFSR1BfTk9fRVJSUwkweDAyCisrCisrLyogRG9uJ3QgcGFyc2UgYW55IG5vbi1vcHRpb24gYXJncy4gIE5vcm1hbGx5IG5vbi1vcHRpb24gYXJncyBhcmUgcGFyc2VkIGJ5CisrICAgY2FsbGluZyB0aGUgcGFyc2UgZnVuY3Rpb25zIHdpdGggYSBrZXkgb2YgQVJHUF9LRVlfQVJHLCBhbmQgdGhlIGFjdHVhbCBhcmcKKysgICBhcyB0aGUgdmFsdWUuICBTaW5jZSBpdCdzIGltcG9zc2libGUgdG8ga25vdyB3aGljaCBwYXJzZSBmdW5jdGlvbiB3YW50cyB0bworKyAgIGhhbmRsZSBpdCwgZWFjaCBvbmUgaXMgY2FsbGVkIGluIHR1cm4sIHVudGlsIG9uZSByZXR1cm5zIDAgb3IgYW4gZXJyb3IKKysgICBvdGhlciB0aGFuIEFSR1BfRVJSX1VOS05PV047IGlmIGFuIGFyZ3VtZW50IGlzIGhhbmRsZWQgYnkgbm8gb25lLCB0aGUKKysgICBhcmdwX3BhcnNlIHJldHVybnMgcHJlbWF0dXJlbHkgKGJ1dCB3aXRoIGEgcmV0dXJuIHZhbHVlIG9mIDApLiAgSWYgYWxsCisrICAgYXJncyBoYXZlIGJlZW4gcGFyc2VkIHdpdGhvdXQgZXJyb3IsIGFsbCBwYXJzaW5nIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIG9uZQorKyAgIGxhc3QgdGltZSB3aXRoIGEga2V5IG9mIEFSR1BfS0VZX0VORC4gIFRoaXMgZmxhZyBuZWVkbid0IG5vcm1hbGx5IGJlIHNldCwKKysgICBhcyB0aGUgbm9ybWFsIGJlaGF2aW9yIGlzIHRvIHN0b3AgcGFyc2luZyBhcyBzb29uIGFzIHNvbWUgYXJndW1lbnQgY2FuJ3QKKysgICBiZSBoYW5kbGVkLiAgKi8KKysjZGVmaW5lIEFSR1BfTk9fQVJHUwkweDA0CisrCisrLyogUGFyc2Ugb3B0aW9ucyBhbmQgYXJndW1lbnRzIGluIHRoZSBzYW1lIG9yZGVyIHRoZXkgb2NjdXIgb24gdGhlIGNvbW1hbmQKKysgICBsaW5lIC0tIG5vcm1hbGx5IHRoZXkncmUgcmVhcnJhbmdlZCBzbyB0aGF0IGFsbCBvcHRpb25zIGNvbWUgZmlyc3QuICovCisrI2RlZmluZSBBUkdQX0lOX09SREVSCTB4MDgKKysKKysvKiBEb24ndCBwcm92aWRlIHRoZSBzdGFuZGFyZCBsb25nIG9wdGlvbiAtLWhlbHAsIHdoaWNoIGNhdXNlcyB1c2FnZSBhbmQKKysgICAgICBvcHRpb24gaGVscCBpbmZvcm1hdGlvbiB0byBiZSBvdXRwdXQgdG8gc3Rkb3V0LCBhbmQgZXhpdCAoMCkgY2FsbGVkLiAqLworKyNkZWZpbmUgQVJHUF9OT19IRUxQCTB4MTAKKysKKysvKiBEb24ndCBleGl0IG9uIGVycm9ycyAodGhleSBtYXkgc3RpbGwgcmVzdWx0IGluIGVycm9yIG1lc3NhZ2VzKS4gICovCisrI2RlZmluZSBBUkdQX05PX0VYSVQJMHgyMAorKworKy8qIFVzZSB0aGUgZ251IGdldG9wdCBgbG9uZy1vbmx5JyBydWxlcyBmb3IgcGFyc2luZyBhcmd1bWVudHMuICAqLworKyNkZWZpbmUgQVJHUF9MT05HX09OTFkJMHg0MAorKworKy8qIFR1cm5zIG9mZiBhbnkgbWVzc2FnZS1wcmludGluZy9leGl0aW5nIG9wdGlvbnMuICAqLworKyNkZWZpbmUgQVJHUF9TSUxFTlQgICAgKEFSR1BfTk9fRVhJVCB8IEFSR1BfTk9fRVJSUyB8IEFSR1BfTk9fSEVMUCkKKysKKysvKiBQYXJzZSB0aGUgb3B0aW9ucyBzdHJpbmdzIGluIEFSR0MgJiBBUkdWIGFjY29yZGluZyB0byB0aGUgb3B0aW9ucyBpbiBBUkdQLgorKyAgIEZMQUdTIGlzIG9uZSBvZiB0aGUgQVJHUF8gZmxhZ3MgYWJvdmUuICBJZiBBUkdfSU5ERVggaXMgbm9uLU5VTEwsIHRoZQorKyAgIGluZGV4IGluIEFSR1Ygb2YgdGhlIGZpcnN0IHVucGFyc2VkIG9wdGlvbiBpcyByZXR1cm5lZCBpbiBpdC4gIElmIGFuCisrICAgdW5rbm93biBvcHRpb24gaXMgcHJlc2VudCwgQVJHUF9FUlJfVU5LTk9XTiBpcyByZXR1cm5lZDsgaWYgc29tZSBwYXJzZXIKKysgICByb3V0aW5lIHJldHVybmVkIGEgbm9uLXplcm8gdmFsdWUsIGl0IGlzIHJldHVybmVkOyBvdGhlcndpc2UgMCBpcworKyAgIHJldHVybmVkLiAgVGhpcyBmdW5jdGlvbiBtYXkgYWxzbyBjYWxsIGV4aXQgdW5sZXNzIHRoZSBBUkdQX05PX0hFTFAgZmxhZworKyAgIGlzIHNldC4gIElOUFVUIGlzIGEgcG9pbnRlciB0byBhIHZhbHVlIHRvIGJlIHBhc3NlZCBpbiB0byB0aGUgcGFyc2VyLiAgKi8KKytleHRlcm4gZXJyb3JfdCBhcmdwX3BhcnNlIChfX2NvbnN0IHN0cnVjdCBhcmdwICpfX3Jlc3RyaWN0IF9fYXJncCwKKysJCQkgICBpbnQgX19hcmdjLCBjaGFyICoqX19yZXN0cmljdCBfX2FyZ3YsCisrCQkJICAgdW5zaWduZWQgX19mbGFncywgaW50ICpfX3Jlc3RyaWN0IF9fYXJnX2luZGV4LAorKwkJCSAgIHZvaWQgKl9fcmVzdHJpY3QgX19pbnB1dCk7CisrDAorKy8qIEdsb2JhbCB2YXJpYWJsZXMuICAqLworKworKy8qIElmIGRlZmluZWQgb3Igc2V0IGJ5IHRoZSB1c2VyIHByb2dyYW0gdG8gYSBub24temVybyB2YWx1ZSwgdGhlbiBhIGRlZmF1bHQKKysgICBvcHRpb24gLS12ZXJzaW9uIGlzIGFkZGVkICh1bmxlc3MgdGhlIEFSR1BfTk9fSEVMUCBmbGFnIGlzIHVzZWQpLCB3aGljaAorKyAgIHdpbGwgcHJpbnQgdGhpcyBzdHJpbmcgZm9sbG93ZWQgYnkgYSBuZXdsaW5lIGFuZCBleGl0ICh1bmxlc3MgdGhlCisrICAgQVJHUF9OT19FWElUIGZsYWcgaXMgdXNlZCkuICBPdmVycmlkZGVuIGJ5IEFSR1BfUFJPR1JBTV9WRVJTSU9OX0hPT0suICAqLworK2V4dGVybiBfX2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV92ZXJzaW9uOworKworKy8qIElmIGRlZmluZWQgb3Igc2V0IGJ5IHRoZSB1c2VyIHByb2dyYW0gdG8gYSBub24temVybyB2YWx1ZSwgdGhlbiBhIGRlZmF1bHQKKysgICBvcHRpb24gLS12ZXJzaW9uIGlzIGFkZGVkICh1bmxlc3MgdGhlIEFSR1BfTk9fSEVMUCBmbGFnIGlzIHVzZWQpLCB3aGljaAorKyAgIGNhbGxzIHRoaXMgZnVuY3Rpb24gd2l0aCBhIHN0cmVhbSB0byBwcmludCB0aGUgdmVyc2lvbiB0byBhbmQgYSBwb2ludGVyIHRvCisrICAgdGhlIGN1cnJlbnQgcGFyc2luZyBzdGF0ZSwgYW5kIHRoZW4gZXhpdHMgKHVubGVzcyB0aGUgQVJHUF9OT19FWElUIGZsYWcgaXMKKysgICB1c2VkKS4gIFRoaXMgdmFyaWFibGUgdGFrZXMgcHJlY2VkZW50IG92ZXIgQVJHUF9QUk9HUkFNX1ZFUlNJT04uICAqLworK2V4dGVybiB2b2lkICgqYXJncF9wcm9ncmFtX3ZlcnNpb25faG9vaykgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCisrCQkJCQkgIHN0cnVjdCBhcmdwX3N0YXRlICpfX3Jlc3RyaWN0CisrCQkJCQkgIF9fc3RhdGUpOworKworKy8qIElmIGRlZmluZWQgb3Igc2V0IGJ5IHRoZSB1c2VyIHByb2dyYW0sIGl0IHNob3VsZCBwb2ludCB0byBzdHJpbmcgdGhhdCBpcworKyAgIHRoZSBidWctcmVwb3J0aW5nIGFkZHJlc3MgZm9yIHRoZSBwcm9ncmFtLiAgSXQgd2lsbCBiZSBwcmludGVkIGJ5CisrICAgYXJncF9oZWxwIGlmIHRoZSBBUkdQX0hFTFBfQlVHX0FERFIgZmxhZyBpcyBzZXQgKGFzIGl0IGlzIGJ5IHZhcmlvdXMKKysgICBzdGFuZGFyZCBoZWxwIG1lc3NhZ2VzKSwgZW1iZWRkZWQgaW4gYSBzZW50ZW5jZSB0aGF0IHNheXMgc29tZXRoaW5nIGxpa2UKKysgICBgUmVwb3J0IGJ1Z3MgdG8gQUREUi4nLiAgKi8KKytleHRlcm4gX19jb25zdCBjaGFyICphcmdwX3Byb2dyYW1fYnVnX2FkZHJlc3M7CisrCisrLyogVGhlIGV4aXQgc3RhdHVzIHRoYXQgYXJncCB3aWxsIHVzZSB3aGVuIGV4aXRpbmcgZHVlIHRvIGEgcGFyc2luZyBlcnJvci4KKysgICBJZiBub3QgZGVmaW5lZCBvciBzZXQgYnkgdGhlIHVzZXIgcHJvZ3JhbSwgdGhpcyBkZWZhdWx0cyB0byBFWF9VU0FHRSBmcm9tCisrICAgPHN5c2V4aXRzLmg+LiAgKi8KKytleHRlcm4gZXJyb3JfdCBhcmdwX2Vycl9leGl0X3N0YXR1czsKKysMCisrLyogRmxhZ3MgZm9yIGFyZ3BfaGVscC4gICovCisrI2RlZmluZSBBUkdQX0hFTFBfVVNBR0UJCTB4MDEgLyogYSBVc2FnZTogbWVzc2FnZS4gKi8KKysjZGVmaW5lIEFSR1BfSEVMUF9TSE9SVF9VU0FHRQkweDAyIC8qICAiIGJ1dCBkb24ndCBhY3R1YWxseSBwcmludCBvcHRpb25zLiAqLworKyNkZWZpbmUgQVJHUF9IRUxQX1NFRQkJMHgwNCAvKiBhIGBUcnkgLi4uIGZvciBtb3JlIGhlbHAnIG1lc3NhZ2UuICovCisrI2RlZmluZSBBUkdQX0hFTFBfTE9ORwkJMHgwOCAvKiBhIGxvbmcgaGVscCBtZXNzYWdlLiAqLworKyNkZWZpbmUgQVJHUF9IRUxQX1BSRV9ET0MJMHgxMCAvKiBkb2Mgc3RyaW5nIHByZWNlZGluZyBsb25nIGhlbHAuICAqLworKyNkZWZpbmUgQVJHUF9IRUxQX1BPU1RfRE9DCTB4MjAgLyogZG9jIHN0cmluZyBmb2xsb3dpbmcgbG9uZyBoZWxwLiAgKi8KKysjZGVmaW5lIEFSR1BfSEVMUF9ET0MJCShBUkdQX0hFTFBfUFJFX0RPQyB8IEFSR1BfSEVMUF9QT1NUX0RPQykKKysjZGVmaW5lIEFSR1BfSEVMUF9CVUdfQUREUgkweDQwIC8qIGJ1ZyByZXBvcnQgYWRkcmVzcyAqLworKyNkZWZpbmUgQVJHUF9IRUxQX0xPTkdfT05MWQkweDgwIC8qIG1vZGlmeSBvdXRwdXQgYXBwcm9wcmlhdGVseSB0bworKwkJCQkJcmVmbGVjdCBBUkdQX0xPTkdfT05MWSBtb2RlLiAgKi8KKysKKysvKiBUaGVzZSBBUkdQX0hFTFAgZmxhZ3MgYXJlIG9ubHkgdW5kZXJzdG9vZCBieSBhcmdwX3N0YXRlX2hlbHAuICAqLworKyNkZWZpbmUgQVJHUF9IRUxQX0VYSVRfRVJSCTB4MTAwIC8qIENhbGwgZXhpdCgxKSBpbnN0ZWFkIG9mIHJldHVybmluZy4gICovCisrI2RlZmluZSBBUkdQX0hFTFBfRVhJVF9PSwkweDIwMCAvKiBDYWxsIGV4aXQoMCkgaW5zdGVhZCBvZiByZXR1cm5pbmcuICAqLworKworKy8qIFRoZSBzdGFuZGFyZCB0aGluZyB0byBkbyBhZnRlciBhIHByb2dyYW0gY29tbWFuZCBsaW5lIHBhcnNpbmcgZXJyb3IsIGlmIGFuCisrICAgZXJyb3IgbWVzc2FnZSBoYXMgYWxyZWFkeSBiZWVuIHByaW50ZWQuICAqLworKyNkZWZpbmUgQVJHUF9IRUxQX1NURF9FUlIgXAorKyAgKEFSR1BfSEVMUF9TRUUgfCBBUkdQX0hFTFBfRVhJVF9FUlIpCisrLyogVGhlIHN0YW5kYXJkIHRoaW5nIHRvIGRvIGFmdGVyIGEgcHJvZ3JhbSBjb21tYW5kIGxpbmUgcGFyc2luZyBlcnJvciwgaWYgbm8KKysgICBtb3JlIHNwZWNpZmljIGVycm9yIG1lc3NhZ2UgaGFzIGJlZW4gcHJpbnRlZC4gICovCisrI2RlZmluZSBBUkdQX0hFTFBfU1REX1VTQUdFIFwKKysgIChBUkdQX0hFTFBfU0hPUlRfVVNBR0UgfCBBUkdQX0hFTFBfU0VFIHwgQVJHUF9IRUxQX0VYSVRfRVJSKQorKy8qIFRoZSBzdGFuZGFyZCB0aGluZyB0byBkbyBpbiByZXNwb25zZSB0byBhIC0taGVscCBvcHRpb24uICAqLworKyNkZWZpbmUgQVJHUF9IRUxQX1NURF9IRUxQIFwKKysgIChBUkdQX0hFTFBfU0hPUlRfVVNBR0UgfCBBUkdQX0hFTFBfTE9ORyB8IEFSR1BfSEVMUF9FWElUX09LIFwKKysgICB8IEFSR1BfSEVMUF9ET0MgfCBBUkdQX0hFTFBfQlVHX0FERFIpCisrCisrLyogT3V0cHV0IGEgdXNhZ2UgbWVzc2FnZSBmb3IgQVJHUCB0byBTVFJFQU0uICBGTEFHUyBhcmUgZnJvbSB0aGUgc2V0CisrICAgQVJHUF9IRUxQXyouICAqLworK2V4dGVybiB2b2lkIGFyZ3BfaGVscCAoX19jb25zdCBzdHJ1Y3QgYXJncCAqX19yZXN0cmljdCBfX2FyZ3AsCisrCQkgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKKysJCSAgICAgICB1bnNpZ25lZCBfX2ZsYWdzLCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSk7CisrDAorKy8qIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgYXJlIGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhbiBhcmdwCisrICAgcGFyc2luZyByb3V0aW5lICh0aHVzIHRha2luZyBhbiBhcmdwX3N0YXRlIHN0cnVjdHVyZSBhcyB0aGUgZmlyc3QKKysgICBhcmd1bWVudCkuICBUaGV5IG1heSBvciBtYXkgbm90IHByaW50IGFuIGVycm9yIG1lc3NhZ2UgYW5kIGV4aXQsIGRlcGVuZGluZworKyAgIG9uIHRoZSBmbGFncyBpbiBTVEFURSAtLSBpbiBhbnkgY2FzZSwgdGhlIGNhbGxlciBzaG91bGQgYmUgcHJlcGFyZWQgZm9yCisrICAgdGhlbSAqbm90KiB0byBleGl0LCBhbmQgc2hvdWxkIHJldHVybiBhbiBhcHByb3BpYXRlIGVycm9yIGFmdGVyIGNhbGxpbmcKKysgICB0aGVtLiAgW2FyZ3BfdXNhZ2UgJiBhcmdwX2Vycm9yIHNob3VsZCBwcm9iYWJseSBiZSBjYWxsZWQgYXJncF9zdGF0ZV8uLi4sCisrICAgYnV0IHRoZXkncmUgdXNlZCBvZnRlbiBlbm91Z2ggdGhhdCB0aGV5IHNob3VsZCBiZSBzaG9ydF0gICovCisrCisrLyogT3V0cHV0LCBpZiBhcHByb3ByaWF0ZSwgYSB1c2FnZSBtZXNzYWdlIGZvciBTVEFURSB0byBTVFJFQU0uICBGTEFHUyBhcmUKKysgICBmcm9tIHRoZSBzZXQgQVJHUF9IRUxQXyouICAqLworK2V4dGVybiB2b2lkIGFyZ3Bfc3RhdGVfaGVscCAoX19jb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqX19yZXN0cmljdCBfX3N0YXRlLAorKwkJCSAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKKysJCQkgICAgIHVuc2lnbmVkIGludCBfX2ZsYWdzKTsKKysvKiBQb3NzaWJseSBvdXRwdXQgdGhlIHN0YW5kYXJkIHVzYWdlIG1lc3NhZ2UgZm9yIEFSR1AgdG8gc3RkZXJyIGFuZCBleGl0LiAgKi8KKytleHRlcm4gdm9pZCBhcmdwX3VzYWdlIChfX2NvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpfX3N0YXRlKTsKKysKKysvKiBJZiBhcHByb3ByaWF0ZSwgcHJpbnQgdGhlIHByaW50ZiBzdHJpbmcgRk1UIGFuZCBmb2xsb3dpbmcgYXJncywgcHJlY2VkZWQKKysgICBieSB0aGUgcHJvZ3JhbSBuYW1lIGFuZCBgOicsIHRvIHN0ZGVyciwgYW5kIGZvbGxvd2VkIGJ5IGEgYFRyeSAuLi4gLS1oZWxwJworKyAgIG1lc3NhZ2UsIHRoZW4gZXhpdCAoMSkuICAqLworK2V4dGVybiB2b2lkIGFyZ3BfZXJyb3IgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKl9fcmVzdHJpY3QgX19zdGF0ZSwKKysJCQlfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKKysgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOworKy8qIFNpbWlsYXIgdG8gdGhlIHN0YW5kYXJkIGdudSBlcnJvci1yZXBvcnRpbmcgZnVuY3Rpb24gZXJyb3IoKSwgYnV0IHdpbGwKKysgICByZXNwZWN0IHRoZSBBUkdQX05PX0VYSVQgYW5kIEFSR1BfTk9fRVJSUyBmbGFncyBpbiBTVEFURSwgYW5kIHdpbGwgcHJpbnQKKysgICB0byBTVEFURS0+ZXJyX3N0cmVhbS4gIFRoaXMgaXMgdXNlZnVsIGZvciBhcmd1bWVudCBwYXJzaW5nIGNvZGUgdGhhdCBpcworKyAgIHNoYXJlZCBiZXR3ZWVuIHByb2dyYW0gc3RhcnR1cCAod2hlbiBleGl0aW5nIGlzIGRlc2lyZWQpIGFuZCBydW50aW1lCisrICAgb3B0aW9uIHBhcnNpbmcgKHdoZW4gdHlwaWNhbGx5IGFuIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQgaW5zdGVhZCkuICBUaGUKKysgICBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBmdW5jdGlvbiBhbmQgYXJncF9lcnJvciBpcyB0aGF0IHRoZSBsYXR0ZXIgaXMgZm9yCisrICAgKnBhcnNpbmcgZXJyb3JzKiwgYW5kIHRoZSBmb3JtZXIgaXMgZm9yIG90aGVyIHByb2JsZW1zIHRoYXQgb2NjdXIgZHVyaW5nCisrICAgcGFyc2luZyBidXQgZG9uJ3QgcmVmbGVjdCBhIChzeW50YWN0aWMpIHByb2JsZW0gd2l0aCB0aGUgaW5wdXQuICAqLworK2V4dGVybiB2b2lkIGFyZ3BfZmFpbHVyZSAoX19jb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqX19yZXN0cmljdCBfX3N0YXRlLAorKwkJCSAgaW50IF9fc3RhdHVzLCBpbnQgX19lcnJudW0sCisrCQkJICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKKysgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCA0LCA1KSkpOworKy8qIFJldHVybnMgdHJ1ZSBpZiB0aGUgb3B0aW9uIE9QVCBpcyBhIHZhbGlkIHNob3J0IG9wdGlvbi4gICovCisrZXh0ZXJuIGludCBfb3B0aW9uX2lzX3Nob3J0IChfX2NvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqX19vcHQpIF9fVEhST1c7CisrZXh0ZXJuIGludCBfX29wdGlvbl9pc19zaG9ydCAoX19jb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKl9fb3B0KSBfX1RIUk9XOworKworKy8qIFJldHVybnMgdHJ1ZSBpZiB0aGUgb3B0aW9uIE9QVCBpcyBpbiBmYWN0IHRoZSBsYXN0ICh1bnVzZWQpIGVudHJ5IGluIGFuCisrICAgb3B0aW9ucyBhcnJheS4gICovCisrZXh0ZXJuIGludCBfb3B0aW9uX2lzX2VuZCAoX19jb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKl9fb3B0KSBfX1RIUk9XOworK2V4dGVybiBpbnQgX19vcHRpb25faXNfZW5kIChfX2NvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqX19vcHQpIF9fVEhST1c7CisrCisrLyogUmV0dXJuIHRoZSBpbnB1dCBmaWVsZCBmb3IgQVJHUCBpbiB0aGUgcGFyc2VyIGNvcnJlc3BvbmRpbmcgdG8gU1RBVEU7IHVzZWQKKysgICBieSB0aGUgaGVscCByb3V0aW5lcy4gICovCisrLyogV2UgdGhpbmsgdGhpcyBzaG91bGQgbm90IGJlIGV4cG9ydGVkICovCisrZXh0ZXJuIHZvaWQgKl9fYXJncF9pbnB1dCAoX19jb25zdCBzdHJ1Y3QgYXJncCAqX19yZXN0cmljdCBfX2FyZ3AsCisrCQkJICAgX19jb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqX19yZXN0cmljdCBfX3N0YXRlKQorKyAgICAgX19USFJPVzsKKysMCisrI2lmZGVmIF9fVVNFX0VYVEVSTl9JTkxJTkVTCisrCisrIyBpZm5kZWYgQVJHUF9FSQorKyMgIGRlZmluZSBBUkdQX0VJIF9fZXh0ZXJuX2lubGluZQorKyMgZW5kaWYKKysKKytBUkdQX0VJIHZvaWQKKythcmdwX3VzYWdlIChfX2NvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpfX3N0YXRlKQorK3sKKysgIGFyZ3Bfc3RhdGVfaGVscCAoX19zdGF0ZSwgc3RkZXJyLCBBUkdQX0hFTFBfU1REX1VTQUdFKTsKKyt9CisrCisrQVJHUF9FSSBpbnQKKytfX05USCAoX19vcHRpb25faXNfc2hvcnQgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpfX29wdCkpCisreworKyAgaWYgKF9fb3B0LT5mbGFncyAmIE9QVElPTl9ET0MpCisrICAgIHJldHVybiAwOworKyAgZWxzZQorKyAgICB7CisrICAgICAgaW50IF9fa2V5ID0gX19vcHQtPmtleTsKKysgICAgICByZXR1cm4gX19rZXkgPiAwICYmIF9fa2V5IDw9IFVDSEFSX01BWCAmJiBpc3ByaW50IChfX2tleSk7CisrICAgIH0KKyt9CisrCisrQVJHUF9FSSBpbnQKKytfX05USCAoX19vcHRpb25faXNfZW5kIChfX2NvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqX19vcHQpKQorK3sKKysgIHJldHVybiAhX19vcHQtPmtleSAmJiAhX19vcHQtPm5hbWUgJiYgIV9fb3B0LT5kb2MgJiYgIV9fb3B0LT5ncm91cDsKKyt9CisrI2VuZGlmIC8qIFVzZSBleHRlcm4gaW5saW5lcy4gICovCisrCisrI2lmZGVmICBfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKysKKysjZW5kaWYgLyogYXJncC5oICovCitkaWZmIC0tZ2l0IGEvbGliYy9zeXNkZXBzL2xpbnV4L2NvbW1vbi9iaXRzL2dldG9wdF9pbnQuaCBiL2xpYmMvc3lzZGVwcy9saW51eC9jb21tb24vYml0cy9nZXRvcHRfaW50LmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yOTFlZGZlCistLS0gL2Rldi9udWxsCisrKysgYi9saWJjL3N5c2RlcHMvbGludXgvY29tbW9uL2JpdHMvZ2V0b3B0X2ludC5oCitAQCAtMCwwICsxLDEzNiBAQAorKy8qIEludGVybmFsIGRlY2xhcmF0aW9ucyBmb3IgZ2V0b3B0LgorKyAgIENvcHlyaWdodCAoQykgMTk4OS0xOTk0LDE5OTYtMTk5OSwyMDAxLDIwMDMsMjAwNAorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaWZuZGVmIF9HRVRPUFRfSU5UX0gKKysjZGVmaW5lIF9HRVRPUFRfSU5UX0ggIDEKKysKKytleHRlcm4gaW50IF9nZXRvcHRfaW50ZXJuYWwgKGludCBfX19hcmdjLCBjaGFyICpjb25zdCAqX19fYXJndiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX19zaG9ydG9wdHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKl9fbG9uZ29wdHMsIGludCAqX19sb25naW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19sb25nX29ubHkpIGF0dHJpYnV0ZV9oaWRkZW47CisrCisrCisrLyogUmVlbnRyYW50IHZlcnNpb25zIHdoaWNoIGNhbiBoYW5kbGUgcGFyc2luZyBtdWx0aXBsZSBhcmd1bWVudAorKyAgIHZlY3RvcnMgYXQgdGhlIHNhbWUgdGltZS4gICovCisrCisrLyogRm9yIF9fb3JkZXJpbmcgbWVtYmVyICovCisrZW51bSB7CisrICAgICAgIFJFUVVJUkVfT1JERVIsIFBFUk1VVEUsIFJFVFVSTl9JTl9PUkRFUgorK307CisrCisrLyogRGF0YSB0eXBlIGZvciByZWVudHJhbnQgZnVuY3Rpb25zLiAgKi8KKysKKytzdHJ1Y3QgX2dldG9wdF9kYXRhCisreworKyAgLyogVGhlc2UgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIG1lYW5pbmcgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZ2xvYmFsCisrICAgICB2YXJpYWJsZXMsIGV4Y2VwdCB0aGF0IHRoZXkgYXJlIHVzZWQgZm9yIHRoZSByZWVudHJhbnQKKysgICAgIHZlcnNpb25zIG9mIGdldG9wdC4gICovCisrICBpbnQgb3B0aW5kOworKyAgaW50IG9wdGVycjsKKysgIGNoYXIgKm9wdGFyZzsKKysgIHNtYWxsdWludCBvcHRvcHQ7IC8qIHdlIHN0b3JlIGNoYXJhY3RlcnMgaGVyZSwgYSBieXRlIGlzIGVub3VnaCAqLworKworKyAgLyogSW50ZXJuYWwgbWVtYmVycy4gICovCisrCisrICAvKiBUcnVlIGlmIHRoZSBpbnRlcm5hbCBtZW1iZXJzIGhhdmUgYmVlbiBpbml0aWFsaXplZC4gICovCisrICBzbWFsbGludCBfX2luaXRpYWxpemVkOworKworKyAgLyogRGVzY3JpYmUgaG93IHRvIGRlYWwgd2l0aCBvcHRpb25zIHRoYXQgZm9sbG93IG5vbi1vcHRpb24gQVJHVi1lbGVtZW50cy4KKysKKysgICAgIElmIHRoZSBjYWxsZXIgZGlkIG5vdCBzcGVjaWZ5IGFueXRoaW5nLAorKyAgICAgdGhlIGRlZmF1bHQgaXMgUkVRVUlSRV9PUkRFUiBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKKysgICAgIFBPU0lYTFlfQ09SUkVDVCBpcyBkZWZpbmVkLCBQRVJNVVRFIG90aGVyd2lzZS4KKysKKysgICAgIFJFUVVJUkVfT1JERVIgbWVhbnMgZG9uJ3QgcmVjb2duaXplIHRoZW0gYXMgb3B0aW9uczsKKysgICAgIHN0b3Agb3B0aW9uIHByb2Nlc3Npbmcgd2hlbiB0aGUgZmlyc3Qgbm9uLW9wdGlvbiBpcyBzZWVuLgorKyAgICAgVGhpcyBpcyB3aGF0IFVuaXggZG9lcy4KKysgICAgIFRoaXMgbW9kZSBvZiBvcGVyYXRpb24gaXMgc2VsZWN0ZWQgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50CisrICAgICB2YXJpYWJsZSBQT1NJWExZX0NPUlJFQ1QsIG9yIHVzaW5nIGArJyBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyCisrICAgICBvZiB0aGUgbGlzdCBvZiBvcHRpb24gY2hhcmFjdGVycy4KKysKKysgICAgIFBFUk1VVEUgaXMgdGhlIGRlZmF1bHQuICBXZSBwZXJtdXRlIHRoZSBjb250ZW50cyBvZiBBUkdWIGFzIHdlCisrICAgICBzY2FuLCBzbyB0aGF0IGV2ZW50dWFsbHkgYWxsIHRoZSBub24tb3B0aW9ucyBhcmUgYXQgdGhlIGVuZC4KKysgICAgIFRoaXMgYWxsb3dzIG9wdGlvbnMgdG8gYmUgZ2l2ZW4gaW4gYW55IG9yZGVyLCBldmVuIHdpdGggcHJvZ3JhbXMKKysgICAgIHRoYXQgd2VyZSBub3Qgd3JpdHRlbiB0byBleHBlY3QgdGhpcy4KKysKKysgICAgIFJFVFVSTl9JTl9PUkRFUiBpcyBhbiBvcHRpb24gYXZhaWxhYmxlIHRvIHByb2dyYW1zIHRoYXQgd2VyZQorKyAgICAgd3JpdHRlbiB0byBleHBlY3Qgb3B0aW9ucyBhbmQgb3RoZXIgQVJHVi1lbGVtZW50cyBpbiBhbnkgb3JkZXIKKysgICAgIGFuZCB0aGF0IGNhcmUgYWJvdXQgdGhlIG9yZGVyaW5nIG9mIHRoZSB0d28uICBXZSBkZXNjcmliZSBlYWNoCisrICAgICBub24tb3B0aW9uIEFSR1YtZWxlbWVudCBhcyBpZiBpdCB3ZXJlIHRoZSBhcmd1bWVudCBvZiBhbiBvcHRpb24KKysgICAgIHdpdGggY2hhcmFjdGVyIGNvZGUgMS4gIFVzaW5nIGAtJyBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZQorKyAgICAgbGlzdCBvZiBvcHRpb24gY2hhcmFjdGVycyBzZWxlY3RzIHRoaXMgbW9kZSBvZiBvcGVyYXRpb24uCisrCisrICAgICBUaGUgc3BlY2lhbCBhcmd1bWVudCBgLS0nIGZvcmNlcyBhbiBlbmQgb2Ygb3B0aW9uLXNjYW5uaW5nIHJlZ2FyZGxlc3MKKysgICAgIG9mIHRoZSB2YWx1ZSBvZiBgb3JkZXJpbmcnLiAgSW4gdGhlIGNhc2Ugb2YgUkVUVVJOX0lOX09SREVSLCBvbmx5CisrICAgICBgLS0nIGNhbiBjYXVzZSBgZ2V0b3B0JyB0byByZXR1cm4gLTEgd2l0aCBgb3B0aW5kJyAhPSBBUkdDLiAgKi8KKysgIHNtYWxsaW50IF9fb3JkZXJpbmc7CisrCisrICAvKiBJZiB0aGUgUE9TSVhMWV9DT1JSRUNUIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldC4gICovCisrICBzbWFsbGludCBfX3Bvc2l4bHlfY29ycmVjdDsKKysKKysgIC8qIFRoZSBuZXh0IGNoYXIgdG8gYmUgc2Nhbm5lZCBpbiB0aGUgb3B0aW9uLWVsZW1lbnQKKysgICAgIGluIHdoaWNoIHRoZSBsYXN0IG9wdGlvbiBjaGFyYWN0ZXIgd2UgcmV0dXJuZWQgd2FzIGZvdW5kLgorKyAgICAgVGhpcyBhbGxvd3MgdXMgdG8gcGljayB1cCB0aGUgc2NhbiB3aGVyZSB3ZSBsZWZ0IG9mZi4KKysKKysgICAgIElmIHRoaXMgaXMgemVybywgb3IgYSBudWxsIHN0cmluZywgaXQgbWVhbnMgcmVzdW1lIHRoZSBzY2FuCisrICAgICBieSBhZHZhbmNpbmcgdG8gdGhlIG5leHQgQVJHVi1lbGVtZW50LiAgKi8KKysgIGNoYXIgKl9fbmV4dGNoYXI7CisrCisrCisrICAvKiBIYW5kbGUgcGVybXV0YXRpb24gb2YgYXJndW1lbnRzLiAgKi8KKysKKysgIC8qIERlc2NyaWJlIHRoZSBwYXJ0IG9mIEFSR1YgdGhhdCBjb250YWlucyBub24tb3B0aW9ucyB0aGF0IGhhdmUKKysgICAgIGJlZW4gc2tpcHBlZC4gIGBmaXJzdF9ub25vcHQnIGlzIHRoZSBpbmRleCBpbiBBUkdWIG9mIHRoZSBmaXJzdAorKyAgICAgb2YgdGhlbTsgYGxhc3Rfbm9ub3B0JyBpcyB0aGUgaW5kZXggYWZ0ZXIgdGhlIGxhc3Qgb2YgdGhlbS4gICovCisrCisrICBpbnQgX19maXJzdF9ub25vcHQ7CisrICBpbnQgX19sYXN0X25vbm9wdDsKKysKKysjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9OT05PUFRJT05fRkxBR1MKKysgIGludCBfX25vbm9wdGlvbl9mbGFnc19tYXhfbGVuOworKyAgaW50IF9fbm9ub3B0aW9uX2ZsYWdzX2xlbjsKKysjIGVuZGlmCisrfTsKKysKKysvKiBUaGUgaW5pdGlhbGl6ZXIgaXMgbmVjZXNzYXJ5IHRvIHNldCBPUFRJTkQgYW5kIE9QVEVSUiB0byB0aGVpcgorKyAgIGRlZmF1bHQgdmFsdWVzIGFuZCB0byBjbGVhciB0aGUgaW5pdGlhbGl6YXRpb24gZmxhZy4gICovCisrI2RlZmluZSBfR0VUT1BUX0RBVEFfSU5JVElBTElaRVIgICAgICAgeyAxLCAxIH0KKysKKysjaWYgMCAvKiBmaXJzdCBpcyBzdGF0aWMgb24gdUNsaWJjLCB0aGUgb3RoZXJzIG5vdCB1c2VkICovCisrZXh0ZXJuIGludCBfZ2V0b3B0X2ludGVybmFsX3IgKGludCBfX19hcmdjLCBjaGFyICpjb25zdCAqX19fYXJndiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX3Nob3J0b3B0cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpfX2xvbmdvcHRzLCBpbnQgKl9fbG9uZ2luZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19sb25nX29ubHksIHN0cnVjdCBfZ2V0b3B0X2RhdGEgKl9fZGF0YSk7CisrI2VuZGlmCisrI2lmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0dOVV9HRVRPUFRfXyB8fCBkZWZpbmVkIF9fVUNMSUJDX0hBU19HRVRPUFRfTE9OR19fCisrI2lmbmRlZiBfX25lZWRfZ2V0b3B0CisrZXh0ZXJuIGludCBfZ2V0b3B0X2xvbmdfciAoaW50IF9fX2FyZ2MsIGNoYXIgKmNvbnN0ICpfX19hcmd2LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX19zaG9ydG9wdHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpfX2xvbmdvcHRzLCBpbnQgKl9fbG9uZ2luZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfZ2V0b3B0X2RhdGEgKl9fZGF0YSk7CisrCisrZXh0ZXJuIGludCBfZ2V0b3B0X2xvbmdfb25seV9yIChpbnQgX19fYXJnYywgY2hhciAqY29uc3QgKl9fX2FyZ3YsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpfX2xvbmdvcHRzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fbG9uZ2luZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9nZXRvcHRfZGF0YSAqX19kYXRhKTsKKysjZW5kaWYKKysjZW5kaWYKKysjZW5kaWYgLyogZ2V0b3B0X2ludC5oICovCitkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvZ2V0b3B0LmMgYi9saWJjL3VuaXN0ZC9nZXRvcHQuYworaW5kZXggZjYzNDgyYi4uZGI1ZTEyYyAxMDA2NDQKKy0tLSBhL2xpYmMvdW5pc3RkL2dldG9wdC5jCisrKysgYi9saWJjL3VuaXN0ZC9nZXRvcHQuYworQEAgLTEwNSw3ICsxMDUsNyBAQAorICAgIHRoZXkgY2FuIGRpc3Rpbmd1aXNoIHRoZSByZWxhdGl2ZSBvcmRlciBvZiBvcHRpb25zIGFuZCBvdGhlciBhcmd1bWVudHMuICAqLworIAorICNpbmNsdWRlIDxnZXRvcHQuaD4KKy0jaW5jbHVkZSAiZ2V0b3B0X2ludC5oIgorKyNpbmNsdWRlIDxiaXRzL2dldG9wdF9pbnQuaD4KKyAKKyAKKyAvKiBGb3IgY29tbXVuaWNhdGlvbiBmcm9tIGBnZXRvcHQnIHRvIHRoZSBjYWxsZXIuCitAQCAtMTE3MCw2ICsxMTcwLDE1IEBAIGdldG9wdF9sb25nIChpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YsIGNvbnN0IGNoYXIgKm9wdGlvbnMsCisgICByZXR1cm4gX2dldG9wdF9pbnRlcm5hbCAoYXJnYywgYXJndiwgb3B0aW9ucywgbG9uZ19vcHRpb25zLCBvcHRfaW5kZXgsIDApOworIH0KKyAKKytpbnQKKytfZ2V0b3B0X2xvbmdfciAoaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2LCBjb25zdCBjaGFyICpvcHRpb25zLAorKyAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdfb3B0aW9ucywgaW50ICpvcHRfaW5kZXgsCisrICAgICAgICAgICAgICAgc3RydWN0IF9nZXRvcHRfZGF0YSAqZCkKKyt7CisrICByZXR1cm4gX2dldG9wdF9pbnRlcm5hbF9yIChhcmdjLCBhcmd2LCBvcHRpb25zLCBsb25nX29wdGlvbnMsIG9wdF9pbmRleCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgZCk7CisrfQorKworIC8qIExpa2UgZ2V0b3B0X2xvbmcsIGJ1dCAnLScgYXMgd2VsbCBhcyAnLS0nIGNhbiBpbmRpY2F0ZSBhIGxvbmcgb3B0aW9uLgorICAgIElmIGFuIG9wdGlvbiB0aGF0IHN0YXJ0cyB3aXRoICctJyAobm90ICctLScpIGRvZXNuJ3QgbWF0Y2ggYSBsb25nIG9wdGlvbiwKKyAgICBidXQgZG9lcyBtYXRjaCBhIHNob3J0IG9wdGlvbiwgaXQgaXMgcGFyc2VkIGFzIGEgc2hvcnQgb3B0aW9uCitAQCAtMTE4Myw0ICsxMTkyLDEyIEBAIGdldG9wdF9sb25nX29ubHkgKGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndiwgY29uc3QgY2hhciAqb3B0aW9ucywKKyB9CisgI2VuZGlmIC8qIF9fVUNMSUJDX0hBU19HRVRPUFRfTE9OR19fICovCisgCisraW50CisrX2dldG9wdF9sb25nX29ubHlfciAoaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2LCBjb25zdCBjaGFyICpvcHRpb25zLAorKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ19vcHRpb25zLCBpbnQgKm9wdF9pbmRleCwKKysgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfZ2V0b3B0X2RhdGEgKmQpCisreworKyAgcmV0dXJuIF9nZXRvcHRfaW50ZXJuYWxfciAoYXJnYywgYXJndiwgb3B0aW9ucywgbG9uZ19vcHRpb25zLCBvcHRfaW5kZXgsIDEsIGQpOworK30KKysKKyAjZW5kaWYJLyogTm90IEVMSURFX0NPREUuICAqLworZGlmZiAtLWdpdCBhL2xpYnVhcmdwL01ha2VmaWxlIGIvbGlidWFyZ3AvTWFrZWZpbGUKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi40NWFjZGQ5CistLS0gL2Rldi9udWxsCisrKysgYi9saWJ1YXJncC9NYWtlZmlsZQorQEAgLTAsMCArMSwxNCBAQAorKyMgTWFrZWZpbGUgZm9yIHVDbGliYyAobGlidWFyZ3ApCisrIworKyMgQ29weXJpZ2h0IChDKSAyMDEwIFNUTWljcm9lbGVjdHJvbmljcyBMdGQKKysjIEF1dGhvcihzKTogRmlsaXBwbyBBcmNpZGlhY29ubyA8ZmlsaXBwby5hcmNpZGlhY29ubyBhdCBzdC5jb20+CisrIworKyMgTGljZW5zZWQgdW5kZXIgdGhlIExHUEwgdjIuMSwgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCIGluIHRoaXMgdGFyYmFsbC4KKysjCisrCisrdG9wX3NyY2Rpcj0uLi8KKyt0b3BfYnVpbGRkaXI9Li4vCisraW5jbHVkZSAkKHRvcF9idWlsZGRpcilSdWxlcy5tYWsKKythbGw6IGxpYnMKKytpbmNsdWRlIE1ha2VmaWxlLmluCisraW5jbHVkZSAkKHRvcF9zcmNkaXIpTWFrZXJ1bGVzCitkaWZmIC0tZ2l0IGEvbGlidWFyZ3AvTWFrZWZpbGUuaW4gYi9saWJ1YXJncC9NYWtlZmlsZS5pbgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjE0OThhYmIKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL01ha2VmaWxlLmluCitAQCAtMCwwICsxLDczIEBACisrIyBNYWtlZmlsZSBmb3IgdUNsaWJjIChsaWJ1YXJncCkKKysjCisrIyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgIFNUTWljcm9lbGVjdHJvbmljcyBMdGQuCisrIyBBdXRob3Iocyk6IFNhbHZhdG9yZSBDcm8gPHNhbHZhdG9yZS5jcm8gYXQgc3QuY29tPgorKyMgICAgICAgICAgICAtIEZpcnN0IGltcGxlbWVudGF0aW9uLCBlbWJlZGRlZCBpbnRvIGxpYmMKKysjICAgICAgICAgICAgRmlsaXBwbyBBcmNpZGlhY29ubyA8ZmlsaXBwby5hcmNpZGlhY29ubyBhdCBzdC5jb20+CisrIyAgICAgICAgICAgIC0gUmV3b3JrZWQgZm9yIHN0YW5kLWFsb25lIGxpYnVhcmdwIGltcGxlbWVudGF0aW9uCisrCisrIyBMaWNlbnNlZCB1bmRlciB0aGUgTEdQTCB2Mi4xLCBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIgaW4gdGhpcyB0YXJiYWxsLgorKyMKKysKKytDRkxBR1MtbGlidWFyZ3AgOj0gLUROT1RfSU5fbGliYyAtRElTX0lOX2xpYnVhcmdwICQoU1NQX0FMTF9DRkxBR1MpCisrCisrTERGTEFHUy1saWJ1YXJncC5zbyA6PSAkKExERkxBR1MpCisrCisrTElCUy1saWJ1YXJncC5zbyA6PSAkKExJQlMpCisrCisrbGlidWFyZ3BfRlVMTF9OQU1FIDo9IGxpYnVhcmdwLSQoVkVSU0lPTikuc28KKysKKytsaWJ1YXJncF9ESVIgOj0gJCh0b3Bfc3JjZGlyKWxpYnVhcmdwCisrbGlidWFyZ3BfT1VUIDo9ICQodG9wX2J1aWxkZGlyKWxpYnVhcmdwCisrCisrbGlidWFyZ3BfU1JDLXkgOj0KKytsaWJ1YXJncF9TUkMtJChVQ0xJQkNfSEFTX0FSR1ApIDo9ICQoYWRkc3VmZml4IC5jLCQoYWRkcHJlZml4IGFyZ3AtLCBiYSBcCisrCQkJZWV4c3QgZm10c3RyZWFtIGZzLXhpbmwgaGVscCBwYXJzZSBwdiBwdmggeGlubCkpCisrCisrQ0ZMQUdTLWFyZ3AteGlubC5jID0gLWZnbnU4OS1pbmxpbmUKKysKKytsaWJ1YXJncF9TUkMgOj0gJChhZGRwcmVmaXggJChsaWJ1YXJncF9ESVIpLywkKGxpYnVhcmdwX1NSQy15KSkKKytsaWJ1YXJncF9PQkogOj0gJChwYXRzdWJzdCAkKGxpYnVhcmdwX0RJUikvJS5jLCQobGlidWFyZ3BfT1VUKS8lLm8sJChsaWJ1YXJncF9TUkMpKQorKworK2xpYnVhcmdwX1NSQ1MgOj0gJChsaWJ1YXJncF9TUkMpCisrbGlidWFyZ3BfT0JKUyA6PSAkKGxpYnVhcmdwX09CSikKKysKKytpZmVxICgkKERPUElDKSx5KQorK2xpYnVhcmdwLWEteSA6PSAkKGxpYnVhcmdwX09CSlM6Lm89Lm9zKQorK2Vsc2UKKytsaWJ1YXJncC1hLXkgOj0gJChsaWJ1YXJncF9PQkpTKQorK2VuZGlmCisrbGlidWFyZ3Atc28teSA6PSAkKGxpYnVhcmdwX09CSlM6Lm89Lm9zKQorKworK2xpYi1hLSQoVUNMSUJDX0hBU19BUkdQKSArPSAkKHRvcF9idWlsZGRpcilsaWIvbGlidWFyZ3AuYQorK2xpYi1zby0kKFVDTElCQ19IQVNfQVJHUCkgKz0gJCh0b3BfYnVpbGRkaXIpbGliL2xpYnVhcmdwLnNvCisrCisrb2JqY2xlYW4teSArPSBDTEVBTl9saWJ1YXJncAorKworK2lmZXEgKCQoRE9NVUxUSSksbikKKytpZmVxICgkKERPUElDKSx5KQorKyQodG9wX2J1aWxkZGlyKWxpYi9saWJ1YXJncC5zbzogJCh0b3BfYnVpbGRkaXIpbGliL2xpYnVhcmdwLmEgJChsaWJjLmRlcGVuZCkKKytlbHNlCisrJCh0b3BfYnVpbGRkaXIpbGliL2xpYnVhcmdwLnNvOiAkKGxpYnVhcmdwX09VVCkvbGlidWFyZ3Bfc28uYSAkKGxpYmMuZGVwZW5kKQorK2VuZGlmCisrCSQoY2FsbCBsaW5rLnNvLCQobGlidWFyZ3BfRlVMTF9OQU1FKSwkKE1BSk9SX1ZFUlNJT04pKQorK2Vsc2UKKyskKHRvcF9idWlsZGRpcilsaWIvbGlidWFyZ3Auc286ICQobGlidWFyZ3BfT1VUKS9saWJ1YXJncC5vUyAkKGxpYmMuZGVwZW5kKQorKwkkKGNhbGwgbGlua20uc28sJChsaWJ1YXJncF9GVUxMX05BTUUpLCQoTUFKT1JfVkVSU0lPTikpCisrZW5kaWYKKysKKyskKGxpYnVhcmdwX09VVCkvbGlidWFyZ3Bfc28uYTogJChsaWJ1YXJncC1zby15KQorKwkkKFEpJChSTSkgJEAKKysJJChkb19hcikKKysKKyskKGxpYnVhcmdwX09VVCkvbGlidWFyZ3Aub1M6ICQobGlidWFyZ3BfU1JDUykKKysJJChRKSQoUk0pICRACisrCSQoY29tcGlsZS1tKQorKworKyQodG9wX2J1aWxkZGlyKWxpYi9saWJ1YXJncC5hOiAkKGxpYnVhcmdwLWEteSkKKysJJChRKSQoSU5TVEFMTCkgLWQgJChkaXIgJEApCisrCSQoUSkkKFJNKSAkQAorKwkkKGRvX2FyKQorKworK0NMRUFOX2xpYnVhcmdwOgorKwkkKGRvX3JtKSAkKGFkZHByZWZpeCAkKGxpYnVhcmdwX09VVCkvKi4sIG8gb3Mgb1MgYSkKK2RpZmYgLS1naXQgYS9saWJ1YXJncC9hcmdwLWJhLmMgYi9saWJ1YXJncC9hcmdwLWJhLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNTIyYjAyCistLS0gL2Rldi9udWxsCisrKysgYi9saWJ1YXJncC9hcmdwLWJhLmMKK0BAIC0wLDAgKzEsMjYgQEAKKysvKiBEZWZhdWx0IGRlZmluaXRpb24gZm9yIEFSR1BfUFJPR1JBTV9CVUdfQUREUkVTUy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXMgYXQgZ251LmFpLm1pdC5lZHU+LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysvKiBJZiBzZXQgYnkgdGhlIHVzZXIgcHJvZ3JhbSwgaXQgc2hvdWxkIHBvaW50IHRvIHN0cmluZyB0aGF0IGlzIHRoZQorKyAgIGJ1Zy1yZXBvcnRpbmcgYWRkcmVzcyBmb3IgdGhlIHByb2dyYW0uICBJdCB3aWxsIGJlIHByaW50ZWQgYnkgYXJncF9oZWxwIGlmCisrICAgdGhlIEFSR1BfSEVMUF9CVUdfQUREUiBmbGFnIGlzIHNldCAoYXMgaXQgaXMgYnkgdmFyaW91cyBzdGFuZGFyZCBoZWxwCisrICAgbWVzc2FnZXMpLCBlbWJlZGRlZCBpbiBhIHNlbnRlbmNlIHRoYXQgc2F5cyBzb21ldGhpbmcgbGlrZSBgUmVwb3J0IGJ1Z3MgdG8KKysgICBBRERSLicuICAqLworK2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV9idWdfYWRkcmVzczsKK2RpZmYgLS1naXQgYS9saWJ1YXJncC9hcmdwLWVleHN0LmMgYi9saWJ1YXJncC9hcmdwLWVleHN0LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi40NDViNjhkCistLS0gL2Rldi9udWxsCisrKysgYi9saWJ1YXJncC9hcmdwLWVleHN0LmMKK0BAIC0wLDAgKzEsMzIgQEAKKysvKiBEZWZhdWx0IGRlZmluaXRpb24gZm9yIEFSR1BfRVJSX0VYSVRfU1RBVFVTCisrICAgQ29weXJpZ2h0IChDKSAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzIGF0IGdudS5haS5taXQuZWR1Pi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzeXNleGl0cy5oPgorKworKyNpbmNsdWRlIDxhcmdwLmg+CisrCisrLyogVGhlIGV4aXQgc3RhdHVzIHRoYXQgYXJncCB3aWxsIHVzZSB3aGVuIGV4aXRpbmcgZHVlIHRvIGEgcGFyc2luZyBlcnJvci4KKysgICBJZiBub3QgZGVmaW5lZCBvciBzZXQgYnkgdGhlIHVzZXIgcHJvZ3JhbSwgdGhpcyBkZWZhdWx0cyB0byBFWF9VU0FHRSBmcm9tCisrICAgPHN5c2V4aXRzLmg+LiAgKi8KKytlcnJvcl90IGFyZ3BfZXJyX2V4aXRfc3RhdHVzID0gRVhfVVNBR0U7CitkaWZmIC0tZ2l0IGEvbGlidWFyZ3AvYXJncC1mbXRzdHJlYW0uYyBiL2xpYnVhcmdwL2FyZ3AtZm10c3RyZWFtLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43NTIyN2Y5CistLS0gL2Rldi9udWxsCisrKysgYi9saWJ1YXJncC9hcmdwLWZtdHN0cmVhbS5jCitAQCAtMCwwICsxLDQzOSBAQAorKy8qIFdvcmQtd3JhcHBpbmcgYW5kIGxpbmUtdHJ1bmNhdGluZyBzdHJlYW1zCisrICAgQ29weXJpZ2h0IChDKSAxOTk3LTE5OTksMjAwMSwyMDAyLDIwMDMsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuCisrCisrICAgTW9kaWZpZWQgZm9yIHVDbGliYyBieTogU2FsdmF0b3JlIENybyA8c2FsdmF0b3JlLmNybyBhdCBzdC5jb20+CisrKi8KKysKKysvKiBUaGlzIHBhY2thZ2UgZW11bGF0ZXMgZ2xpYmMgYGxpbmVfd3JhcF9zdHJlYW0nIHNlbWFudGljcyBmb3Igc3lzdGVtcyB0aGF0CisrICAgZG9uJ3QgaGF2ZSB0aGF0LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8c3RkYXJnLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrCisrI2luY2x1ZGUgImFyZ3AtZm10c3RyZWFtLmgiCisrCisrI2lmbmRlZiBBUkdQX0ZNVFNUUkVBTV9VU0VfTElORVdSQVAKKysKKysjaWZuZGVmIGlzYmxhbmsKKysjZGVmaW5lIGlzYmxhbmsoY2gpICgoY2gpPT0nICcgfHwgKGNoKT09J1x0JykKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9JTl9MSUJJTworKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjIGluY2x1ZGUgPGxpYmlvL2xpYmlvUC5oPgorKyMgZGVmaW5lIF9fdnNucHJpbnRmKHMsIGwsIGYsIGEpIF9JT192c25wcmludGYgKHMsIGwsIGYsIGEpCisrI2Vsc2UKKysjIGRlZmluZSBfX3ZzbnByaW50ZihzLCBsLCBmLCBhKSB2c25wcmludGYgKHMsIGwsIGYsIGEpCisrI2VuZGlmCisrCisrI2RlZmluZSBJTklUX0JVRl9TSVpFIDIwMAorKyNkZWZpbmUgUFJJTlRGX1NJWkVfR1VFU1MgMTUwCisrCisrLyogUmV0dXJuIGFuIGFyZ3BfZm10c3RyZWFtIHRoYXQgb3V0cHV0cyB0byBTVFJFQU0sIGFuZCB3aGljaCBwcmVmaXhlcyBsaW5lcworKyAgIHdyaXR0ZW4gb24gaXQgd2l0aCBMTUFSR0lOIHNwYWNlcyBhbmQgbGltaXRzIHRoZW0gdG8gUk1BUkdJTiBjb2x1bW5zCisrICAgdG90YWwuICBJZiBXTUFSR0lOID49IDAsIHdvcmRzIHRoYXQgZXh0ZW5kIHBhc3QgUk1BUkdJTiBhcmUgd3JhcHBlZCBieQorKyAgIHJlcGxhY2luZyB0aGUgd2hpdGVzcGFjZSBiZWZvcmUgdGhlbSB3aXRoIGEgbmV3bGluZSBhbmQgV01BUkdJTiBzcGFjZXMuCisrICAgT3RoZXJ3aXNlLCBjaGFycyBiZXlvbmQgUk1BUkdJTiBhcmUgc2ltcGx5IGRyb3BwZWQgdW50aWwgYSBuZXdsaW5lLgorKyAgIFJldHVybnMgTlVMTCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuICAqLworK2FyZ3BfZm10c3RyZWFtX3QKKytfX2FyZ3BfbWFrZV9mbXRzdHJlYW0gKEZJTEUgKnN0cmVhbSwKKysgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxtYXJnaW4sIHNpemVfdCBybWFyZ2luLCBzc2l6ZV90IHdtYXJnaW4pCisreworKyAgYXJncF9mbXRzdHJlYW1fdCBmczsKKysKKysgIGZzID0gKHN0cnVjdCBhcmdwX2ZtdHN0cmVhbSAqKSBtYWxsb2MgKHNpemVvZiAoc3RydWN0IGFyZ3BfZm10c3RyZWFtKSk7CisrICBpZiAoZnMgIT0gTlVMTCkKKysgICAgeworKyAgICAgIGZzLT5zdHJlYW0gPSBzdHJlYW07CisrCisrICAgICAgZnMtPmxtYXJnaW4gPSBsbWFyZ2luOworKyAgICAgIGZzLT5ybWFyZ2luID0gcm1hcmdpbjsKKysgICAgICBmcy0+d21hcmdpbiA9IHdtYXJnaW47CisrICAgICAgZnMtPnBvaW50X2NvbCA9IDA7CisrICAgICAgZnMtPnBvaW50X29mZnMgPSAwOworKworKyAgICAgIGZzLT5idWYgPSAoY2hhciAqKSBtYWxsb2MgKElOSVRfQlVGX1NJWkUpOworKyAgICAgIGlmICghIGZzLT5idWYpCisrICAgICAgIHsKKysgICAgICAgICBmcmVlIChmcyk7CisrICAgICAgICAgZnMgPSAwOworKyAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICB7CisrICAgICAgICAgZnMtPnAgPSBmcy0+YnVmOworKyAgICAgICAgIGZzLT5lbmQgPSBmcy0+YnVmICsgSU5JVF9CVUZfU0laRTsKKysgICAgICAgfQorKyAgICB9CisrCisrICByZXR1cm4gZnM7CisrfQorKyNpZiAwCisrLyogTm90IGV4cG9ydGVkLiAgKi8KKysjaWZkZWYgd2Vha19hbGlhcworK3dlYWtfYWxpYXMgKF9fYXJncF9tYWtlX2ZtdHN0cmVhbSwgYXJncF9tYWtlX2ZtdHN0cmVhbSkKKysjZW5kaWYKKysjZW5kaWYKKysKKysvKiBGbHVzaCBGUyB0byBpdHMgc3RyZWFtLCBhbmQgZnJlZSBpdCAoYnV0IGRvbid0IGNsb3NlIHRoZSBzdHJlYW0pLiAgKi8KKyt2b2lkCisrX19hcmdwX2ZtdHN0cmVhbV9mcmVlIChhcmdwX2ZtdHN0cmVhbV90IGZzKQorK3sKKysgIF9fYXJncF9mbXRzdHJlYW1fdXBkYXRlIChmcyk7CisrICBpZiAoZnMtPnAgPiBmcy0+YnVmKQorKyAgICB7CisrI2lmZGVmIFVTRV9JTl9MSUJJTworKyAgICAgIF9fZnhwcmludGYgKGZzLT5zdHJlYW0sICIlLipzIiwgKGludCkgKGZzLT5wIC0gZnMtPmJ1ZiksIGZzLT5idWYpOworKyNlbHNlCisrICAgICAgZndyaXRlX3VubG9ja2VkIChmcy0+YnVmLCAxLCBmcy0+cCAtIGZzLT5idWYsIGZzLT5zdHJlYW0pOworKyNlbmRpZgorKyAgICB9CisrICBmcmVlIChmcy0+YnVmKTsKKysgIGZyZWUgKGZzKTsKKyt9CisrI2lmIDAKKysvKiBOb3QgZXhwb3J0ZWQuICAqLworKyNpZmRlZiB3ZWFrX2FsaWFzCisrd2Vha19hbGlhcyAoX19hcmdwX2ZtdHN0cmVhbV9mcmVlLCBhcmdwX2ZtdHN0cmVhbV9mcmVlKQorKyNlbmRpZgorKyNlbmRpZgorKworKy8qIFByb2Nlc3MgRlMncyBidWZmZXIgc28gdGhhdCBsaW5lIHdyYXBwaW5nIGlzIGRvbmUgZnJvbSBQT0lOVF9PRkZTIHRvIHRoZQorKyAgIGVuZCBvZiBpdHMgYnVmZmVyLiAgVGhpcyBjb2RlIGlzIG1vc3RseSBmcm9tIGdsaWJjIHN0ZGlvL2xpbmV3cmFwLmMuICAqLworK3ZvaWQKKytfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZSAoYXJncF9mbXRzdHJlYW1fdCBmcykKKyt7CisrICBjaGFyICpidWYsICpubDsKKysgIHNpemVfdCBsZW47CisrCisrICAvKiBTY2FuIHRoZSBidWZmZXIgZm9yIG5ld2xpbmVzLiAgKi8KKysgIGJ1ZiA9IGZzLT5idWYgKyBmcy0+cG9pbnRfb2ZmczsKKysgIHdoaWxlIChidWYgPCBmcy0+cCkKKysgICAgeworKyAgICAgIHNpemVfdCByOworKworKyAgICAgIGlmIChmcy0+cG9pbnRfY29sID09IDAgJiYgZnMtPmxtYXJnaW4gIT0gMCkKKysgICAgICAgeworKyAgICAgICAgIC8qIFdlIGFyZSBzdGFydGluZyBhIG5ldyBsaW5lLiAgUHJpbnQgc3BhY2VzIHRvIHRoZSBsZWZ0IG1hcmdpbi4gICovCisrICAgICAgICAgY29uc3Qgc2l6ZV90IHBhZCA9IGZzLT5sbWFyZ2luOworKyAgICAgICAgIGlmIChmcy0+cCArIHBhZCA8IGZzLT5lbmQpCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIC8qIFdlIGNhbiBmaXQgaW4gdGhlbSBpbiB0aGUgYnVmZmVyIGJ5IG1vdmluZyB0aGUKKysgICAgICAgICAgICAgICAgYnVmZmVyIHRleHQgdXAgYW5kIGZpbGxpbmcgaW4gdGhlIGJlZ2lubmluZy4gICovCisrICAgICAgICAgICAgIG1lbW1vdmUgKGJ1ZiArIHBhZCwgYnVmLCBmcy0+cCAtIGJ1Zik7CisrICAgICAgICAgICAgIGZzLT5wICs9IHBhZDsgLyogQ29tcGVuc2F0ZSBmb3IgYmlnZ2VyIGJ1ZmZlci4gKi8KKysgICAgICAgICAgICAgbWVtc2V0IChidWYsICcgJywgcGFkKTsgLyogRmlsbCBpbiB0aGUgc3BhY2VzLiAgKi8KKysgICAgICAgICAgICAgYnVmICs9IHBhZDsgLyogRG9uJ3QgYm90aGVyIHNlYXJjaGluZyB0aGVtLiAgKi8KKysgICAgICAgICAgIH0KKysgICAgICAgICBlbHNlCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIC8qIE5vIGJ1ZmZlciBzcGFjZSBmb3Igc3BhY2VzLiAgTXVzdCBmbHVzaC4gICovCisrICAgICAgICAgICAgIHNpemVfdCBpOworKyAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFkOyBpKyspCisrICAgICAgICAgICAgICAgeworKyNpZmRlZiBVU0VfSU5fTElCSU8KKysgICAgICAgICAgICAgICAgIGlmIChfSU9fZndpZGUgKGZzLT5zdHJlYW0sIDApID4gMCkKKysgICAgICAgICAgICAgICAgICAgcHV0d2NfdW5sb2NrZWQgKEwnICcsIGZzLT5zdHJlYW0pOworKyAgICAgICAgICAgICAgICAgZWxzZQorKyNlbmRpZgorKyAgICAgICAgICAgICAgICAgICBwdXRjX3VubG9ja2VkICgnICcsIGZzLT5zdHJlYW0pOworKyAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgIH0KKysgICAgICAgICBmcy0+cG9pbnRfY29sID0gcGFkOworKyAgICAgICB9CisrCisrICAgICAgbGVuID0gZnMtPnAgLSBidWY7CisrICAgICAgbmwgPSBtZW1jaHIgKGJ1ZiwgJ1xuJywgbGVuKTsKKysKKysgICAgICBpZiAoZnMtPnBvaW50X2NvbCA8IDApCisrICAgICAgIGZzLT5wb2ludF9jb2wgPSAwOworKworKyAgICAgIGlmICghbmwpCisrICAgICAgIHsKKysgICAgICAgICAvKiBUaGUgYnVmZmVyIGVuZHMgaW4gYSBwYXJ0aWFsIGxpbmUuICAqLworKworKyAgICAgICAgIGlmIChmcy0+cG9pbnRfY29sICsgbGVuIDwgZnMtPnJtYXJnaW4pCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIC8qIFRoZSByZW1haW5pbmcgYnVmZmVyIHRleHQgaXMgYSBwYXJ0aWFsIGxpbmUgYW5kIGZpdHMKKysgICAgICAgICAgICAgICAgd2l0aGluIHRoZSBtYXhpbXVtIGxpbmUgd2lkdGguICBBZHZhbmNlIHBvaW50IGZvciB0aGUKKysgICAgICAgICAgICAgICAgY2hhcmFjdGVycyB0byBiZSB3cml0dGVuIGFuZCBzdG9wIHNjYW5uaW5nLiAgKi8KKysgICAgICAgICAgICAgZnMtPnBvaW50X2NvbCArPSBsZW47CisrICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgfQorKyAgICAgICAgIGVsc2UKKysgICAgICAgICAgIC8qIFNldCB0aGUgZW5kLW9mLWxpbmUgcG9pbnRlciBmb3IgdGhlIGNvZGUgYmVsb3cgdG8KKysgICAgICAgICAgICAgIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gICovCisrICAgICAgICAgICBubCA9IGZzLT5wOworKyAgICAgICB9CisrICAgICAgZWxzZSBpZiAoZnMtPnBvaW50X2NvbCArIChubCAtIGJ1ZikgPCAoc3NpemVfdCkgZnMtPnJtYXJnaW4pCisrICAgICAgIHsKKysgICAgICAgICAvKiBUaGUgYnVmZmVyIGNvbnRhaW5zIGEgZnVsbCBsaW5lIHRoYXQgZml0cyB3aXRoaW4gdGhlIG1heGltdW0KKysgICAgICAgICAgICBsaW5lIHdpZHRoLiAgUmVzZXQgcG9pbnQgYW5kIHNjYW4gdGhlIG5leHQgbGluZS4gICovCisrICAgICAgICAgZnMtPnBvaW50X2NvbCA9IDA7CisrICAgICAgICAgYnVmID0gbmwgKyAxOworKyAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICB9CisrCisrICAgICAgLyogVGhpcyBsaW5lIGlzIHRvbyBsb25nLiAgKi8KKysgICAgICByID0gZnMtPnJtYXJnaW4gLSAxOworKworKyAgICAgIGlmIChmcy0+d21hcmdpbiA8IDApCisrICAgICAgIHsKKysgICAgICAgICAvKiBUcnVuY2F0ZSB0aGUgbGluZSBieSBvdmVyd3JpdGluZyB0aGUgZXhjZXNzIHdpdGggdGhlCisrICAgICAgICAgICAgbmV3bGluZSBhbmQgYW55dGhpbmcgYWZ0ZXIgaXQgaW4gdGhlIGJ1ZmZlci4gICovCisrICAgICAgICAgaWYgKG5sIDwgZnMtPnApCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIG1lbW1vdmUgKGJ1ZiArIChyIC0gZnMtPnBvaW50X2NvbCksIG5sLCBmcy0+cCAtIG5sKTsKKysgICAgICAgICAgICAgZnMtPnAgLT0gYnVmICsgKHIgLSBmcy0+cG9pbnRfY29sKSAtIG5sOworKyAgICAgICAgICAgICAvKiBSZXNldCBwb2ludCBmb3IgdGhlIG5leHQgbGluZSBhbmQgc3RhcnQgc2Nhbm5pbmcgaXQuICAqLworKyAgICAgICAgICAgICBmcy0+cG9pbnRfY29sID0gMDsKKysgICAgICAgICAgICAgYnVmICs9IHIgKyAxOyAvKiBTa2lwIGZ1bGwgbGluZSBwbHVzIFxuLiAqLworKyAgICAgICAgICAgfQorKyAgICAgICAgIGVsc2UKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgLyogVGhlIGJ1ZmZlciBlbmRzIHdpdGggYSBwYXJ0aWFsIGxpbmUgdGhhdCBpcyBiZXlvbmQgdGhlCisrICAgICAgICAgICAgICAgIG1heGltdW0gbGluZSB3aWR0aC4gIEFkdmFuY2UgcG9pbnQgZm9yIHRoZSBjaGFyYWN0ZXJzCisrICAgICAgICAgICAgICAgIHdyaXR0ZW4sIGFuZCBkaXNjYXJkIHRob3NlIHBhc3QgdGhlIG1heCBmcm9tIHRoZSBidWZmZXIuICAqLworKyAgICAgICAgICAgICBmcy0+cG9pbnRfY29sICs9IGxlbjsKKysgICAgICAgICAgICAgZnMtPnAgLT0gZnMtPnBvaW50X2NvbCAtIHI7CisrICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgfQorKyAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICB7CisrICAgICAgICAgLyogRG8gd29yZCB3cmFwLiAgR28gdG8gdGhlIGNvbHVtbiBqdXN0IHBhc3QgdGhlIG1heGltdW0gbGluZQorKyAgICAgICAgICAgIHdpZHRoIGFuZCBzY2FuIGJhY2sgZm9yIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHdvcmQgdGhlcmUuCisrICAgICAgICAgICAgVGhlbiBpbnNlcnQgYSBsaW5lIGJyZWFrLiAgKi8KKysKKysgICAgICAgICBjaGFyICpwLCAqbmV4dGxpbmU7CisrICAgICAgICAgaW50IGk7CisrCisrICAgICAgICAgcCA9IGJ1ZiArIChyICsgMSAtIGZzLT5wb2ludF9jb2wpOworKyAgICAgICAgIHdoaWxlIChwID49IGJ1ZiAmJiAhaXNibGFuayAoKnApKQorKyAgICAgICAgICAgLS1wOworKyAgICAgICAgIG5leHRsaW5lID0gcCArIDE7ICAgICAvKiBUaGlzIHdpbGwgYmVnaW4gdGhlIG5leHQgbGluZS4gICovCisrCisrICAgICAgICAgaWYgKG5leHRsaW5lID4gYnVmKQorKyAgICAgICAgICAgeworKyAgICAgICAgICAgICAvKiBTd2FsbG93IHNlcGFyYXRpbmcgYmxhbmtzLiAgKi8KKysgICAgICAgICAgICAgaWYgKHAgPj0gYnVmKQorKyAgICAgICAgICAgICAgIGRvCisrICAgICAgICAgICAgICAgICAtLXA7CisrICAgICAgICAgICAgICAgd2hpbGUgKHAgPj0gYnVmICYmIGlzYmxhbmsgKCpwKSk7CisrICAgICAgICAgICAgIG5sID0gcCArIDE7ICAgICAgIC8qIFRoZSBuZXdsaW5lIHdpbGwgcmVwbGFjZSB0aGUgZmlyc3QgYmxhbmsuICovCisrICAgICAgICAgICB9CisrICAgICAgICAgZWxzZQorKyAgICAgICAgICAgeworKyAgICAgICAgICAgICAvKiBBIHNpbmdsZSB3b3JkIHRoYXQgaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIGxpbmUgd2lkdGguCisrICAgICAgICAgICAgICAgIE9oIHdlbGwuICBQdXQgaXQgb24gYW4gb3ZlcmxvbmcgbGluZSBieSBpdHNlbGYuICAqLworKyAgICAgICAgICAgICBwID0gYnVmICsgKHIgKyAxIC0gZnMtPnBvaW50X2NvbCk7CisrICAgICAgICAgICAgIC8qIEZpbmQgdGhlIGVuZCBvZiB0aGUgbG9uZyB3b3JkLiAgKi8KKysgICAgICAgICAgICAgZG8KKysgICAgICAgICAgICAgICArK3A7CisrICAgICAgICAgICAgIHdoaWxlIChwIDwgbmwgJiYgIWlzYmxhbmsgKCpwKSk7CisrICAgICAgICAgICAgIGlmIChwID09IG5sKQorKyAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgIC8qIEl0IGFscmVhZHkgZW5kcyBhIGxpbmUuICBObyBmdXNzaW5nIHJlcXVpcmVkLiAgKi8KKysgICAgICAgICAgICAgICAgIGZzLT5wb2ludF9jb2wgPSAwOworKyAgICAgICAgICAgICAgICAgYnVmID0gbmwgKyAxOworKyAgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAvKiBXZSB3aWxsIG1vdmUgdGhlIG5ld2xpbmUgdG8gcmVwbGFjZSB0aGUgZmlyc3QgYmxhbmsuICAqLworKyAgICAgICAgICAgICBubCA9IHA7CisrICAgICAgICAgICAgIC8qIFN3YWxsb3cgc2VwYXJhdGluZyBibGFua3MuICAqLworKyAgICAgICAgICAgICBkbworKyAgICAgICAgICAgICAgICsrcDsKKysgICAgICAgICAgICAgd2hpbGUgKGlzYmxhbmsgKCpwKSk7CisrICAgICAgICAgICAgIC8qIFRoZSBuZXh0IGxpbmUgd2lsbCBzdGFydCBoZXJlLiAgKi8KKysgICAgICAgICAgICAgbmV4dGxpbmUgPSBwOworKyAgICAgICAgICAgfQorKworKyAgICAgICAgIC8qIE5vdGU6IFRoZXJlIGFyZSBhIGJ1bmNoIG9mIHRlc3RzIGJlbG93IGZvcgorKyAgICAgICAgICAgIE5FWFRMSU5FID09IEJVRiArIExFTiArIDE7IHRoaXMgY2FzZSBpcyB3aGVyZSBOTCBoYXBwZW5zIHRvIGZhbGwKKysgICAgICAgICAgICBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIGFuZCBORVhUTElORSBpcyBpbiBmYWN0IGVtcHR5IChhbmQgc28KKysgICAgICAgICAgICB3ZSBuZWVkIG5vdCBiZSBjYXJlZnVsIHRvIG1haW50YWluIGl0cyBjb250ZW50cykuICAqLworKworKyAgICAgICAgIGlmICgobmV4dGxpbmUgPT0gYnVmICsgbGVuICsgMQorKyAgICAgICAgICAgICAgPyBmcy0+ZW5kIC0gbmwgPCBmcy0+d21hcmdpbiArIDEKKysgICAgICAgICAgICAgIDogbmV4dGxpbmUgLSAobmwgKyAxKSA8IGZzLT53bWFyZ2luKQorKyAgICAgICAgICAgICAmJiBmcy0+cCA+IG5leHRsaW5lKQorKyAgICAgICAgICAgeworKyAgICAgICAgICAgICAvKiBUaGUgbWFyZ2luIG5lZWRzIG1vcmUgYmxhbmtzIHRoYW4gd2UgcmVtb3ZlZC4gICovCisrICAgICAgICAgICAgIGlmIChmcy0+ZW5kIC0gZnMtPnAgPiBmcy0+d21hcmdpbiArIDEpCisrICAgICAgICAgICAgICAgLyogTWFrZSBzb21lIHNwYWNlIGZvciB0aGVtLiAgKi8KKysgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICBzaXplX3QgbXYgPSBmcy0+cCAtIG5leHRsaW5lOworKyAgICAgICAgICAgICAgICAgbWVtbW92ZSAobmwgKyAxICsgZnMtPndtYXJnaW4sIG5leHRsaW5lLCBtdik7CisrICAgICAgICAgICAgICAgICBuZXh0bGluZSA9IG5sICsgMSArIGZzLT53bWFyZ2luOworKyAgICAgICAgICAgICAgICAgbGVuID0gbmV4dGxpbmUgKyBtdiAtIGJ1ZjsKKysgICAgICAgICAgICAgICAgICpubCsrID0gJ1xuJzsKKysgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAvKiBPdXRwdXQgdGhlIGZpcnN0IGxpbmUgc28gd2UgY2FuIHVzZSB0aGUgc3BhY2UuICAqLworKyAgICAgICAgICAgICAgIHsKKysjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9JTl9MSUJJTworKyAgICAgICAgICAgICAgICAgX19meHByaW50ZiAoZnMtPnN0cmVhbSwgIiUuKnNcbiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSAobmwgLSBmcy0+YnVmKSwgZnMtPmJ1Zik7CisrI2Vsc2UKKysgICAgICAgICAgICAgICAgIGlmIChubCA+IGZzLT5idWYpCisrICAgICAgICAgICAgICAgICAgIGZ3cml0ZV91bmxvY2tlZCAoZnMtPmJ1ZiwgMSwgbmwgLSBmcy0+YnVmLCBmcy0+c3RyZWFtKTsKKysgICAgICAgICAgICAgICAgIHB1dGNfdW5sb2NrZWQgKCdcbicsIGZzLT5zdHJlYW0pOworKyNlbmRpZgorKworKyAgICAgICAgICAgICAgICAgbGVuICs9IGJ1ZiAtIGZzLT5idWY7CisrICAgICAgICAgICAgICAgICBubCA9IGJ1ZiA9IGZzLT5idWY7CisrICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgfQorKyAgICAgICAgIGVsc2UKKysgICAgICAgICAgIC8qIFdlIGNhbiBmaXQgdGhlIG5ld2xpbmUgYW5kIGJsYW5rcyBpbiBiZWZvcmUKKysgICAgICAgICAgICAgIHRoZSBuZXh0IHdvcmQuICAqLworKyAgICAgICAgICAgKm5sKysgPSAnXG4nOworKworKyAgICAgICAgIGlmIChuZXh0bGluZSAtIG5sID49IGZzLT53bWFyZ2luCisrICAgICAgICAgICAgIHx8IChuZXh0bGluZSA9PSBidWYgKyBsZW4gKyAxICYmIGZzLT5lbmQgLSBuZXh0bGluZSA+PSBmcy0+d21hcmdpbikpCisrICAgICAgICAgICAvKiBBZGQgYmxhbmtzIHVwIHRvIHRoZSB3cmFwIG1hcmdpbiBjb2x1bW4uICAqLworKyAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZzLT53bWFyZ2luOyArK2kpCisrICAgICAgICAgICAgICpubCsrID0gJyAnOworKyAgICAgICAgIGVsc2UKKysgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmcy0+d21hcmdpbjsgKytpKQorKyNpZmRlZiBVU0VfSU5fTElCSU8KKysgICAgICAgICAgICAgaWYgKF9JT19md2lkZSAoZnMtPnN0cmVhbSwgMCkgPiAwKQorKyAgICAgICAgICAgICAgIHB1dHdjX3VubG9ja2VkIChMJyAnLCBmcy0+c3RyZWFtKTsKKysgICAgICAgICAgICAgZWxzZQorKyNlbmRpZgorKyAgICAgICAgICAgICAgIHB1dGNfdW5sb2NrZWQgKCcgJywgZnMtPnN0cmVhbSk7CisrCisrICAgICAgICAgLyogQ29weSB0aGUgdGFpbCBvZiB0aGUgb3JpZ2luYWwgYnVmZmVyIGludG8gdGhlIGN1cnJlbnQgYnVmZmVyCisrICAgICAgICAgICAgcG9zaXRpb24uICAqLworKyAgICAgICAgIGlmIChubCA8IG5leHRsaW5lKQorKyAgICAgICAgICAgbWVtbW92ZSAobmwsIG5leHRsaW5lLCBidWYgKyBsZW4gLSBuZXh0bGluZSk7CisrICAgICAgICAgbGVuIC09IG5leHRsaW5lIC0gYnVmOworKworKyAgICAgICAgIC8qIENvbnRpbnVlIHRoZSBzY2FuIG9uIHRoZSByZW1haW5pbmcgbGluZXMgaW4gdGhlIGJ1ZmZlci4gICovCisrICAgICAgICAgYnVmID0gbmw7CisrCisrICAgICAgICAgLyogUmVzdG9yZSBidWZwIHRvIGluY2x1ZGUgYWxsIHRoZSByZW1haW5pbmcgdGV4dC4gICovCisrICAgICAgICAgZnMtPnAgPSBubCArIGxlbjsKKysKKysgICAgICAgICAvKiBSZXNldCB0aGUgY291bnRlciBvZiB3aGF0IGhhcyBiZWVuIG91dHB1dCB0aGlzIGxpbmUuICBJZiB3bWFyZ2luCisrICAgICAgICAgICAgaXMgMCwgd2Ugd2FudCB0byBhdm9pZCB0aGUgbG1hcmdpbiBnZXR0aW5nIGFkZGVkLCBzbyB3ZSBzZXQKKysgICAgICAgICAgICBwb2ludF9jb2wgdG8gYSBtYWdpYyB2YWx1ZSBvZiAtMSBpbiB0aGF0IGNhc2UuICAqLworKyAgICAgICAgIGZzLT5wb2ludF9jb2wgPSBmcy0+d21hcmdpbiA/IGZzLT53bWFyZ2luIDogLTE7CisrICAgICAgIH0KKysgICAgfQorKworKyAgLyogUmVtZW1iZXIgdGhhdCB3ZSd2ZSBzY2FubmVkIGFzIGZhciBhcyB0aGUgZW5kIG9mIHRoZSBidWZmZXIuICAqLworKyAgZnMtPnBvaW50X29mZnMgPSBmcy0+cCAtIGZzLT5idWY7CisrfQorKworKy8qIEVuc3VyZSB0aGF0IEZTIGhhcyBzcGFjZSBmb3IgQU1PVU5UIG1vcmUgYnl0ZXMgaW4gaXRzIGJ1ZmZlciwgZWl0aGVyIGJ5CisrICAgZ3Jvd2luZyB0aGUgYnVmZmVyLCBvciBieSBmbHVzaGluZyBpdC4gIFRydWUgaXMgcmV0dXJuZWQgaWZmIHdlIHN1Y2NlZWQuICovCisraW50CisrX19hcmdwX2ZtdHN0cmVhbV9lbnN1cmUgKHN0cnVjdCBhcmdwX2ZtdHN0cmVhbSAqZnMsIHNpemVfdCBhbW91bnQpCisreworKyAgaWYgKChzaXplX3QpIChmcy0+ZW5kIC0gZnMtPnApIDwgYW1vdW50KQorKyAgICB7CisrICAgICAgc3NpemVfdCB3cm90ZTsKKysKKysgICAgICAvKiBGbHVzaCBGUydzIGJ1ZmZlci4gICovCisrICAgICAgX19hcmdwX2ZtdHN0cmVhbV91cGRhdGUgKGZzKTsKKysKKysjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9JTl9MSUJJTworKyAgICAgIF9fZnhwcmludGYgKGZzLT5zdHJlYW0sICIlLipzIiwgKGludCkgKGZzLT5wIC0gZnMtPmJ1ZiksIGZzLT5idWYpOworKyAgICAgIHdyb3RlID0gZnMtPnAgLSBmcy0+YnVmOworKyNlbHNlCisrICAgICAgd3JvdGUgPSBmd3JpdGVfdW5sb2NrZWQgKGZzLT5idWYsIDEsIGZzLT5wIC0gZnMtPmJ1ZiwgZnMtPnN0cmVhbSk7CisrI2VuZGlmCisrICAgICAgaWYgKHdyb3RlID09IGZzLT5wIC0gZnMtPmJ1ZikKKysgICAgICAgeworKyAgICAgICAgIGZzLT5wID0gZnMtPmJ1ZjsKKysgICAgICAgICBmcy0+cG9pbnRfb2ZmcyA9IDA7CisrICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgIHsKKysgICAgICAgICBmcy0+cCAtPSB3cm90ZTsKKysgICAgICAgICBmcy0+cG9pbnRfb2ZmcyAtPSB3cm90ZTsKKysgICAgICAgICBtZW1tb3ZlIChmcy0+YnVmLCBmcy0+YnVmICsgd3JvdGUsIGZzLT5wIC0gZnMtPmJ1Zik7CisrICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgIH0KKysKKysgICAgICBpZiAoKHNpemVfdCkgKGZzLT5lbmQgLSBmcy0+YnVmKSA8IGFtb3VudCkKKysgICAgICAgLyogR290dGEgZ3JvdyB0aGUgYnVmZmVyLiAgKi8KKysgICAgICAgeworKyAgICAgICAgIHNpemVfdCBvbGRfc2l6ZSA9IGZzLT5lbmQgLSBmcy0+YnVmOworKyAgICAgICAgIHNpemVfdCBuZXdfc2l6ZSA9IG9sZF9zaXplICsgYW1vdW50OworKyAgICAgICAgIGNoYXIgKm5ld19idWY7CisrCisrICAgICAgICAgaWYgKG5ld19zaXplIDwgb2xkX3NpemUgfHwgISAobmV3X2J1ZiA9IHJlYWxsb2MgKGZzLT5idWYsIG5ld19zaXplKSkpCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIF9fc2V0X2Vycm5vIChFTk9NRU0pOworKyAgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgICAgIH0KKysKKysgICAgICAgICBmcy0+YnVmID0gbmV3X2J1ZjsKKysgICAgICAgICBmcy0+ZW5kID0gbmV3X2J1ZiArIG5ld19zaXplOworKyAgICAgICAgIGZzLT5wID0gZnMtPmJ1ZjsKKysgICAgICAgfQorKyAgICB9CisrCisrICByZXR1cm4gMTsKKyt9CisrCisrc3NpemVfdAorK19fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChzdHJ1Y3QgYXJncF9mbXRzdHJlYW0gKmZzLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKyt7CisrICBpbnQgb3V0OworKyAgc2l6ZV90IGF2YWlsOworKyAgc2l6ZV90IHNpemVfZ3Vlc3MgPSBQUklOVEZfU0laRV9HVUVTUzsgLyogSG93IG11Y2ggc3BhY2UgdG8gcmVzZXJ2ZS4gKi8KKysKKysgIGRvCisrICAgIHsKKysgICAgICB2YV9saXN0IGFyZ3M7CisrCisrICAgICAgaWYgKCEgX19hcmdwX2ZtdHN0cmVhbV9lbnN1cmUgKGZzLCBzaXplX2d1ZXNzKSkKKysgICAgICAgcmV0dXJuIC0xOworKworKyAgICAgIHZhX3N0YXJ0IChhcmdzLCBmbXQpOworKyAgICAgIGF2YWlsID0gZnMtPmVuZCAtIGZzLT5wOworKyAgICAgIG91dCA9IF9fdnNucHJpbnRmIChmcy0+cCwgYXZhaWwsIGZtdCwgYXJncyk7CisrICAgICAgdmFfZW5kIChhcmdzKTsKKysgICAgICBpZiAoKHNpemVfdCkgb3V0ID49IGF2YWlsKQorKyAgICAgICBzaXplX2d1ZXNzID0gb3V0ICsgMTsKKysgICAgfQorKyAgd2hpbGUgKChzaXplX3QpIG91dCA+PSBhdmFpbCk7CisrCisrICBmcy0+cCArPSBvdXQ7CisrCisrICByZXR1cm4gb3V0OworK30KKysjaWYgMAorKy8qIE5vdCBleHBvcnRlZC4gICovCisrI2lmZGVmIHdlYWtfYWxpYXMKKyt3ZWFrX2FsaWFzIChfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiwgYXJncF9mbXRzdHJlYW1fcHJpbnRmKQorKyNlbmRpZgorKyNlbmRpZgorKworKyNlbmRpZiAvKiAhQVJHUF9GTVRTVFJFQU1fVVNFX0xJTkVXUkFQICovCitkaWZmIC0tZ2l0IGEvbGlidWFyZ3AvYXJncC1mbXRzdHJlYW0uaCBiL2xpYnVhcmdwL2FyZ3AtZm10c3RyZWFtLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jYTdjODM0CistLS0gL2Rldi9udWxsCisrKysgYi9saWJ1YXJncC9hcmdwLWZtdHN0cmVhbS5oCitAQCAtMCwwICsxLDMxNCBAQAorKy8qIFdvcmQtd3JhcHBpbmcgYW5kIGxpbmUtdHJ1bmNhdGluZyBzdHJlYW1zLgorKyAgIENvcHlyaWdodCAoQykgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuCisrCisrICAgTW9kaWZpZWQgZm9yIHVDbGliYyBieTogU2FsdmF0b3JlIENybyA8c2FsdmF0b3JlLmNybyBhdCBzdC5jb20+CisrKi8KKysKKysvKiBUaGlzIHBhY2thZ2UgZW11bGF0ZXMgZ2xpYmMgYGxpbmVfd3JhcF9zdHJlYW0nIHNlbWFudGljcyBmb3Igc3lzdGVtcyB0aGF0CisrICAgZG9uJ3QgaGF2ZSB0aGF0LiAgSWYgdGhlIHN5c3RlbSBkb2VzIGhhdmUgaXQsIGl0IGlzIGp1c3QgYSB3cmFwcGVyIGZvcgorKyAgIHRoYXQuICBUaGlzIGhlYWRlciBmaWxlIGlzIG9ubHkgdXNlZCBpbnRlcm5hbGx5IHdoaWxlIGNvbXBpbGluZyBhcmdwLCBhbmQKKysgICBzaG91bGRuJ3QgYmUgaW5zdGFsbGVkLiAgKi8KKysKKysjaWZuZGVmIF9BUkdQX0ZNVFNUUkVBTV9ICisrI2RlZmluZSBfQVJHUF9GTVRTVFJFQU1fSAorKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrCisrI2lmbmRlZiBfX2F0dHJpYnV0ZV9fCisrLyogVGhpcyBmZWF0dXJlIGlzIGF2YWlsYWJsZSBpbiBnY2MgdmVyc2lvbnMgMi41IGFuZCBsYXRlci4gICovCisrIyBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA1KSB8fCBkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKKysjICBkZWZpbmUgX19hdHRyaWJ1dGVfXyhTcGVjKSAvKiBlbXB0eSAqLworKyMgZW5kaWYKKysvKiBUaGUgX18tcHJvdGVjdGVkIHZhcmlhbnRzIG9mIGBmb3JtYXQnIGFuZCBgcHJpbnRmJyBhdHRyaWJ1dGVzCisrICAgYXJlIGFjY2VwdGVkIGJ5IGdjYyB2ZXJzaW9ucyAyLjYuNCAoZWZmZWN0aXZlbHkgMi43KSBhbmQgbGF0ZXIuICAqLworKyMgaWYgX19HTlVDX18gPCAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDwgNykgfHwgZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCisrIyAgZGVmaW5lIF9fZm9ybWF0X18gZm9ybWF0CisrIyAgZGVmaW5lIF9fcHJpbnRmX18gcHJpbnRmCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpZiAwIC8qIHVDbGliYzogZGlzYWJsZWQgKi8KKysjaWYgICAgKF9MSUJDIC0gMCAmJiAhZGVmaW5lZCAoVVNFX0lOX0xJQklPKSkgXAorKyAgICB8fCAoZGVmaW5lZCAoX19HTlVfTElCUkFSWV9fKSAmJiBkZWZpbmVkIChIQVZFX0xJTkVXUkFQX0gpKQorKy8qIGxpbmVfd3JhcF9zdHJlYW0gaXMgYXZhaWxhYmxlLCBzbyB1c2UgdGhhdC4gICovCisrI2RlZmluZSBBUkdQX0ZNVFNUUkVBTV9VU0VfTElORVdSQVAKKysjZW5kaWYKKysjZWxzZQorKy8qIGxpbmVfd3JhcCBzdHJlYW0gTk9UIGF2YWlsYWJsZSAqLworKyMgdW5kZWYgQVJHUF9GTVRTVFJFQU1fVVNFX0xJTkVXUkFQCisrI2VuZGlmCisrCisrI2lmZGVmIEFSR1BfRk1UU1RSRUFNX1VTRV9MSU5FV1JBUAorKy8qIEp1c3QgYmUgYSBzaW1wbGUgd3JhcHBlciBmb3IgbGluZV93cmFwX3N0cmVhbTsgdGhlIHNlbWFudGljcyBhcmUKKysgICAqc2xpZ2h0bHkqIGRpZmZlcmVudCwgYXMgbGluZV93cmFwX3N0cmVhbSBkb2Vzbid0IGFjdHVhbGx5IG1ha2UgYSBuZXcKKysgICBvYmplY3QsIGl0IGp1c3QgbW9kaWZpZXMgdGhlIGdpdmVuIHN0cmVhbSAocmV2ZXJzaWJseSkgdG8gZG8KKysgICBsaW5lLXdyYXBwaW5nLiAgU2luY2Ugd2UgY29udHJvbCB3aG8gdXNlcyB0aGlzIGNvZGUsIGl0IGRvZXNuJ3QgbWF0dGVyLiAgKi8KKysKKysjaW5jbHVkZSA8bGluZXdyYXAuaD4KKysKKyt0eXBlZGVmIEZJTEUgKmFyZ3BfZm10c3RyZWFtX3Q7CisrCisrI2RlZmluZSBhcmdwX21ha2VfZm10c3RyZWFtIGxpbmVfd3JhcF9zdHJlYW0KKysjZGVmaW5lIF9fYXJncF9tYWtlX2ZtdHN0cmVhbSBsaW5lX3dyYXBfc3RyZWFtCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9mcmVlIGxpbmVfdW53cmFwX3N0cmVhbQorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9mcmVlIGxpbmVfdW53cmFwX3N0cmVhbQorKworKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9wdXRjKGZzLGNoKSBwdXRjKGNoLGZzKQorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fcHV0YyhmcyxjaCkgcHV0YyhjaCxmcykKKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fcHV0cyhmcyxzdHIpIGZwdXRzKHN0cixmcykKKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX3B1dHMoZnMsc3RyKSBmcHV0cyhzdHIsZnMpCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3dyaXRlKGZzLHN0cixsZW4pIGZ3cml0ZShzdHIsMSxsZW4sZnMpCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV93cml0ZShmcyxzdHIsbGVuKSBmd3JpdGUoc3RyLDEsbGVuLGZzKQorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgZnByaW50ZgorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fcHJpbnRmIGZwcmludGYKKysKKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fbG1hcmdpbiBsaW5lX3dyYXBfbG1hcmdpbgorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fbG1hcmdpbiBsaW5lX3dyYXBfbG1hcmdpbgorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiBsaW5lX3dyYXBfc2V0X2xtYXJnaW4KKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIGxpbmVfd3JhcF9zZXRfbG1hcmdpbgorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9ybWFyZ2luIGxpbmVfd3JhcF9ybWFyZ2luCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9ybWFyZ2luIGxpbmVfd3JhcF9ybWFyZ2luCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3NldF9ybWFyZ2luIGxpbmVfd3JhcF9zZXRfcm1hcmdpbgorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fc2V0X3JtYXJnaW4gbGluZV93cmFwX3NldF9ybWFyZ2luCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3dtYXJnaW4gbGluZV93cmFwX3dtYXJnaW4KKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX3dtYXJnaW4gbGluZV93cmFwX3dtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gbGluZV93cmFwX3NldF93bWFyZ2luCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiBsaW5lX3dyYXBfc2V0X3dtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fcG9pbnQgbGluZV93cmFwX3BvaW50CisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9wb2ludCBsaW5lX3dyYXBfcG9pbnQKKysKKysjZWxzZSAvKiAhQVJHUF9GTVRTVFJFQU1fVVNFX0xJTkVXUkFQICovCisrLyogR3Vlc3Mgd2UgaGF2ZSB0byBkZWZpbmUgb3VyIG93biB2ZXJzaW9uLiAgKi8KKysKKysjaWZuZGVmIF9fY29uc3QKKysjZGVmaW5lIF9fY29uc3QgY29uc3QKKysjZW5kaWYKKysKKytzdHJ1Y3QgYXJncF9mbXRzdHJlYW0KKyt7CisrICBGSUxFICpzdHJlYW07ICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIHN0cmVhbSB3ZSdyZSBvdXRwdXR0aW5nIHRvLiAgKi8KKysKKysgIHNpemVfdCBsbWFyZ2luLCBybWFyZ2luOyAgICAgLyogTGVmdCBhbmQgcmlnaHQgbWFyZ2lucy4gICovCisrICBzc2l6ZV90IHdtYXJnaW47ICAgICAgICAgICAgIC8qIE1hcmdpbiB0byB3cmFwIHRvLCBvciAtMSB0byB0cnVuY2F0ZS4gICovCisrCisrICAvKiBQb2ludCBpbiBidWZmZXIgdG8gd2hpY2ggd2UndmUgcHJvY2Vzc2VkIGZvciB3cmFwcGluZywgYnV0IG5vdCBvdXRwdXQuICAqLworKyAgc2l6ZV90IHBvaW50X29mZnM7CisrICAvKiBPdXRwdXQgY29sdW1uIGF0IFBPSU5UX09GRlMsIG9yIC0xIG1lYW5pbmcgMCBidXQgZG9uJ3QgYWRkIGxtYXJnaW4uICAqLworKyAgc3NpemVfdCBwb2ludF9jb2w7CisrCisrICBjaGFyICpidWY7ICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBidWZmZXIuICAqLworKyAgY2hhciAqcDsgICAgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IGVuZCBvZiB0ZXh0IGluIEJVRi4gKi8KKysgIGNoYXIgKmVuZDsgICAgICAgICAgICAgICAgICAgLyogQWJzb2x1dGUgZW5kIG9mIEJVRi4gICovCisrfTsKKysKKyt0eXBlZGVmIHN0cnVjdCBhcmdwX2ZtdHN0cmVhbSAqYXJncF9mbXRzdHJlYW1fdDsKKysKKysvKiBSZXR1cm4gYW4gYXJncF9mbXRzdHJlYW0gdGhhdCBvdXRwdXRzIHRvIFNUUkVBTSwgYW5kIHdoaWNoIHByZWZpeGVzIGxpbmVzCisrICAgd3JpdHRlbiBvbiBpdCB3aXRoIExNQVJHSU4gc3BhY2VzIGFuZCBsaW1pdHMgdGhlbSB0byBSTUFSR0lOIGNvbHVtbnMKKysgICB0b3RhbC4gIElmIFdNQVJHSU4gPj0gMCwgd29yZHMgdGhhdCBleHRlbmQgcGFzdCBSTUFSR0lOIGFyZSB3cmFwcGVkIGJ5CisrICAgcmVwbGFjaW5nIHRoZSB3aGl0ZXNwYWNlIGJlZm9yZSB0aGVtIHdpdGggYSBuZXdsaW5lIGFuZCBXTUFSR0lOIHNwYWNlcy4KKysgICBPdGhlcndpc2UsIGNoYXJzIGJleW9uZCBSTUFSR0lOIGFyZSBzaW1wbHkgZHJvcHBlZCB1bnRpbCBhIG5ld2xpbmUuCisrICAgUmV0dXJucyBOVUxMIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4gICovCisrZXh0ZXJuIGFyZ3BfZm10c3RyZWFtX3QgX19hcmdwX21ha2VfZm10c3RyZWFtIChGSUxFICpfX3N0cmVhbSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbG1hcmdpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fcm1hcmdpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCBfX3dtYXJnaW4pOworK2V4dGVybiBhcmdwX2ZtdHN0cmVhbV90IGFyZ3BfbWFrZV9mbXRzdHJlYW0gKEZJTEUgKl9fc3RyZWFtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbG1hcmdpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3JtYXJnaW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZV90IF9fd21hcmdpbik7CisrCisrLyogRmx1c2ggX19GUyB0byBpdHMgc3RyZWFtLCBhbmQgZnJlZSBpdCAoYnV0IGRvbid0IGNsb3NlIHRoZSBzdHJlYW0pLiAgKi8KKytleHRlcm4gdm9pZCBfX2FyZ3BfZm10c3RyZWFtX2ZyZWUgKGFyZ3BfZm10c3RyZWFtX3QgX19mcyk7CisrZXh0ZXJuIHZvaWQgYXJncF9mbXRzdHJlYW1fZnJlZSAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzKTsKKysKKytleHRlcm4gc3NpemVfdCBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2ZtdCwgLi4uKQorKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKHByaW50ZiwgMiwgMykpKTsKKytleHRlcm4gc3NpemVfdCBhcmdwX2ZtdHN0cmVhbV9wcmludGYgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2ZtdCwgLi4uKQorKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKHByaW50ZiwgMiwgMykpKTsKKysKKytleHRlcm4gaW50IF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLCBpbnQgX19jaCk7CisrZXh0ZXJuIGludCBhcmdwX2ZtdHN0cmVhbV9wdXRjIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsIGludCBfX2NoKTsKKysKKytleHRlcm4gaW50IF9fYXJncF9mbXRzdHJlYW1fcHV0cyAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLCBfX2NvbnN0IGNoYXIgKl9fc3RyKTsKKytleHRlcm4gaW50IGFyZ3BfZm10c3RyZWFtX3B1dHMgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywgX19jb25zdCBjaGFyICpfX3N0cik7CisrCisrZXh0ZXJuIHNpemVfdCBfX2FyZ3BfZm10c3RyZWFtX3dyaXRlIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19zdHIsIHNpemVfdCBfX2xlbik7CisrZXh0ZXJuIHNpemVfdCBhcmdwX2ZtdHN0cmVhbV93cml0ZSAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3N0ciwgc2l6ZV90IF9fbGVuKTsKKysKKysvKiBBY2Nlc3MgbWFjcm9zIGZvciB2YXJpb3VzIGJpdHMgb2Ygc3RhdGUuICAqLworKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fbG1hcmdpbihfX2ZzKSAoKF9fZnMpLT5sbWFyZ2luKQorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fcm1hcmdpbihfX2ZzKSAoKF9fZnMpLT5ybWFyZ2luKQorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fd21hcmdpbihfX2ZzKSAoKF9fZnMpLT53bWFyZ2luKQorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9sbWFyZ2luIGFyZ3BfZm10c3RyZWFtX2xtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fcm1hcmdpbiBhcmdwX2ZtdHN0cmVhbV9ybWFyZ2luCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3dtYXJnaW4gYXJncF9mbXRzdHJlYW1fd21hcmdpbgorKworKy8qIFNldCBfX0ZTJ3MgbGVmdCBtYXJnaW4gdG8gTE1BUkdJTiBhbmQgcmV0dXJuIHRoZSBvbGQgdmFsdWUuICAqLworK2V4dGVybiBzaXplX3QgYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gKGFyZ3BfZm10c3RyZWFtX3QgX19mcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xtYXJnaW4pOworK2V4dGVybiBzaXplX3QgX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sbWFyZ2luKTsKKysKKysvKiBTZXQgX19GUydzIHJpZ2h0IG1hcmdpbiB0byBfX1JNQVJHSU4gYW5kIHJldHVybiB0aGUgb2xkIHZhbHVlLiAgKi8KKytleHRlcm4gc2l6ZV90IGFyZ3BfZm10c3RyZWFtX3NldF9ybWFyZ2luIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ybWFyZ2luKTsKKytleHRlcm4gc2l6ZV90IF9fYXJncF9mbXRzdHJlYW1fc2V0X3JtYXJnaW4gKGFyZ3BfZm10c3RyZWFtX3QgX19mcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fcm1hcmdpbik7CisrCisrLyogU2V0IF9fRlMncyB3cmFwIG1hcmdpbiB0byBfX1dNQVJHSU4gYW5kIHJldHVybiB0aGUgb2xkIHZhbHVlLiAgKi8KKytleHRlcm4gc2l6ZV90IGFyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX193bWFyZ2luKTsKKytleHRlcm4gc2l6ZV90IF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKGFyZ3BfZm10c3RyZWFtX3QgX19mcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fd21hcmdpbik7CisrCisrLyogUmV0dXJuIHRoZSBjb2x1bW4gbnVtYmVyIG9mIHRoZSBjdXJyZW50IG91dHB1dCBwb2ludCBpbiBfX0ZTLiAgKi8KKytleHRlcm4gc2l6ZV90IGFyZ3BfZm10c3RyZWFtX3BvaW50IChhcmdwX2ZtdHN0cmVhbV90IF9fZnMpOworK2V4dGVybiBzaXplX3QgX19hcmdwX2ZtdHN0cmVhbV9wb2ludCAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzKTsKKysKKysvKiBJbnRlcm5hbCByb3V0aW5lcy4gICovCisrZXh0ZXJuIHZvaWQgX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZSAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzKTsKKytleHRlcm4gdm9pZCBfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZSAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzKTsKKytleHRlcm4gaW50IF9hcmdwX2ZtdHN0cmVhbV9lbnN1cmUgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywgc2l6ZV90IF9fYW1vdW50KTsKKytleHRlcm4gaW50IF9fYXJncF9mbXRzdHJlYW1fZW5zdXJlIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsIHNpemVfdCBfX2Ftb3VudCk7CisrCisrI2lmZGVmIF9fT1BUSU1JWkVfXworKy8qIElubGluZSB2ZXJzaW9ucyBvZiBhYm92ZSByb3V0aW5lcy4gICovCisrCisrI2lmICFfTElCQworKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIGFyZ3BfZm10c3RyZWFtX3B1dGMKKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fcHV0cyBhcmdwX2ZtdHN0cmVhbV9wdXRzCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3dyaXRlIGFyZ3BfZm10c3RyZWFtX3dyaXRlCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIGFyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3NldF9ybWFyZ2luIGFyZ3BfZm10c3RyZWFtX3NldF9ybWFyZ2luCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIGFyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3BvaW50IGFyZ3BfZm10c3RyZWFtX3BvaW50CisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZSBfYXJncF9mbXRzdHJlYW1fdXBkYXRlCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX2Vuc3VyZSBfYXJncF9mbXRzdHJlYW1fZW5zdXJlCisrI2VuZGlmCisrCisrI2lmbmRlZiBBUkdQX0ZTX0VJCisrI2RlZmluZSBBUkdQX0ZTX0VJIF9fZXh0ZXJuX2lubGluZQorKyNlbmRpZgorKworK0FSR1BfRlNfRUkgc2l6ZV90CisrX19hcmdwX2ZtdHN0cmVhbV93cml0ZSAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3N0ciwgc2l6ZV90IF9fbGVuKQorK3sKKysgIGlmIChfX2ZzLT5wICsgX19sZW4gPD0gX19mcy0+ZW5kIHx8IF9fYXJncF9mbXRzdHJlYW1fZW5zdXJlIChfX2ZzLCBfX2xlbikpCisrICAgIHsKKysgICAgICBtZW1jcHkgKF9fZnMtPnAsIF9fc3RyLCBfX2xlbik7CisrICAgICAgX19mcy0+cCArPSBfX2xlbjsKKysgICAgICByZXR1cm4gX19sZW47CisrICAgIH0KKysgIGVsc2UKKysgICAgcmV0dXJuIDA7CisrfQorKworK0FSR1BfRlNfRUkgaW50CisrX19hcmdwX2ZtdHN0cmVhbV9wdXRzIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsIF9fY29uc3QgY2hhciAqX19zdHIpCisreworKyAgc2l6ZV90IF9fbGVuID0gc3RybGVuIChfX3N0cik7CisrICBpZiAoX19sZW4pCisrICAgIHsKKysgICAgICBzaXplX3QgX193cm90ZSA9IF9fYXJncF9mbXRzdHJlYW1fd3JpdGUgKF9fZnMsIF9fc3RyLCBfX2xlbik7CisrICAgICAgcmV0dXJuIF9fd3JvdGUgPT0gX19sZW4gPyAwIDogLTE7CisrICAgIH0KKysgIGVsc2UKKysgICAgcmV0dXJuIDA7CisrfQorKworK0FSR1BfRlNfRUkgaW50CisrX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsIGludCBfX2NoKQorK3sKKysgIGlmIChfX2ZzLT5wIDwgX19mcy0+ZW5kIHx8IF9fYXJncF9mbXRzdHJlYW1fZW5zdXJlIChfX2ZzLCAxKSkKKysgICAgcmV0dXJuICpfX2ZzLT5wKysgPSBfX2NoOworKyAgZWxzZQorKyAgICByZXR1cm4gRU9GOworK30KKysKKysvKiBTZXQgX19GUydzIGxlZnQgbWFyZ2luIHRvIF9fTE1BUkdJTiBhbmQgcmV0dXJuIHRoZSBvbGQgdmFsdWUuICAqLworK0FSR1BfRlNfRUkgc2l6ZV90CisrX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLCBzaXplX3QgX19sbWFyZ2luKQorK3sKKysgIHNpemVfdCBfX29sZDsKKysgIGlmICgoc2l6ZV90KSAoX19mcy0+cCAtIF9fZnMtPmJ1ZikgPiBfX2ZzLT5wb2ludF9vZmZzKQorKyAgICBfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZSAoX19mcyk7CisrICBfX29sZCA9IF9fZnMtPmxtYXJnaW47CisrICBfX2ZzLT5sbWFyZ2luID0gX19sbWFyZ2luOworKyAgcmV0dXJuIF9fb2xkOworK30KKysKKysvKiBTZXQgX19GUydzIHJpZ2h0IG1hcmdpbiB0byBfX1JNQVJHSU4gYW5kIHJldHVybiB0aGUgb2xkIHZhbHVlLiAgKi8KKytBUkdQX0ZTX0VJIHNpemVfdAorK19fYXJncF9mbXRzdHJlYW1fc2V0X3JtYXJnaW4gKGFyZ3BfZm10c3RyZWFtX3QgX19mcywgc2l6ZV90IF9fcm1hcmdpbikKKyt7CisrICBzaXplX3QgX19vbGQ7CisrICBpZiAoKHNpemVfdCkgKF9fZnMtPnAgLSBfX2ZzLT5idWYpID4gX19mcy0+cG9pbnRfb2ZmcykKKysgICAgX19hcmdwX2ZtdHN0cmVhbV91cGRhdGUgKF9fZnMpOworKyAgX19vbGQgPSBfX2ZzLT5ybWFyZ2luOworKyAgX19mcy0+cm1hcmdpbiA9IF9fcm1hcmdpbjsKKysgIHJldHVybiBfX29sZDsKKyt9CisrCisrLyogU2V0IEZTJ3Mgd3JhcCBtYXJnaW4gdG8gX19XTUFSR0lOIGFuZCByZXR1cm4gdGhlIG9sZCB2YWx1ZS4gICovCisrQVJHUF9GU19FSSBzaXplX3QKKytfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsIHNpemVfdCBfX3dtYXJnaW4pCisreworKyAgc2l6ZV90IF9fb2xkOworKyAgaWYgKChzaXplX3QpIChfX2ZzLT5wIC0gX19mcy0+YnVmKSA+IF9fZnMtPnBvaW50X29mZnMpCisrICAgIF9fYXJncF9mbXRzdHJlYW1fdXBkYXRlIChfX2ZzKTsKKysgIF9fb2xkID0gX19mcy0+d21hcmdpbjsKKysgIF9fZnMtPndtYXJnaW4gPSBfX3dtYXJnaW47CisrICByZXR1cm4gX19vbGQ7CisrfQorKworKy8qIFJldHVybiB0aGUgY29sdW1uIG51bWJlciBvZiB0aGUgY3VycmVudCBvdXRwdXQgcG9pbnQgaW4gX19GUy4gICovCisrQVJHUF9GU19FSSBzaXplX3QKKytfX2FyZ3BfZm10c3RyZWFtX3BvaW50IChhcmdwX2ZtdHN0cmVhbV90IF9fZnMpCisreworKyAgaWYgKChzaXplX3QpIChfX2ZzLT5wIC0gX19mcy0+YnVmKSA+IF9fZnMtPnBvaW50X29mZnMpCisrICAgIF9fYXJncF9mbXRzdHJlYW1fdXBkYXRlIChfX2ZzKTsKKysgIHJldHVybiBfX2ZzLT5wb2ludF9jb2wgPj0gMCA/IF9fZnMtPnBvaW50X2NvbCA6IDA7CisrfQorKworKyNpZiAhX0xJQkMKKysjdW5kZWYgX19hcmdwX2ZtdHN0cmVhbV9wdXRjCisrI3VuZGVmIF9fYXJncF9mbXRzdHJlYW1fcHV0cworKyN1bmRlZiBfX2FyZ3BfZm10c3RyZWFtX3dyaXRlCisrI3VuZGVmIF9fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4KKysjdW5kZWYgX19hcmdwX2ZtdHN0cmVhbV9zZXRfcm1hcmdpbgorKyN1bmRlZiBfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luCisrI3VuZGVmIF9fYXJncF9mbXRzdHJlYW1fcG9pbnQKKysjdW5kZWYgX19hcmdwX2ZtdHN0cmVhbV91cGRhdGUKKysjdW5kZWYgX19hcmdwX2ZtdHN0cmVhbV9lbnN1cmUKKysjZW5kaWYKKysKKysjZW5kaWYgLyogX19PUFRJTUlaRV9fICovCisrCisrI2VuZGlmIC8qIEFSR1BfRk1UU1RSRUFNX1VTRV9MSU5FV1JBUCAqLworKworKyNlbmRpZiAvKiBhcmdwLWZtdHN0cmVhbS5oICovCitkaWZmIC0tZ2l0IGEvbGlidWFyZ3AvYXJncC1mcy14aW5sLmMgYi9saWJ1YXJncC9hcmdwLWZzLXhpbmwuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjQ3M2NiYmQKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL2FyZ3AtZnMteGlubC5jCitAQCAtMCwwICsxLDQ0IEBACisrLyogUmVhbCBkZWZpbml0aW9ucyBmb3IgZXh0ZXJuIGlubGluZSBmdW5jdGlvbnMgaW4gYXJncC1mbXRzdHJlYW0uaAorKyAgIENvcHlyaWdodCAoQykgMTk5NywgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjZGVmaW5lIEFSR1BfRlNfRUkKKysjdW5kZWYgX19PUFRJTUlaRV9fCisrI2RlZmluZSBfX09QVElNSVpFX18gMQorKyNpbmNsdWRlICJhcmdwLWZtdHN0cmVhbS5oIgorKworKyNpZiAwCisrLyogTm90IGV4cG9ydGVkLiAgKi8KKysvKiBBZGQgd2VhayBhbGlhc2VzLiAgKi8KKysjaWYgX0xJQkMgLSAwICYmICFkZWZpbmVkIChBUkdQX0ZNVFNUUkVBTV9VU0VfTElORVdSQVApICYmIGRlZmluZWQgKHdlYWtfYWxpYXMpCisrCisrd2Vha19hbGlhcyAoX19hcmdwX2ZtdHN0cmVhbV9wdXRjLCBhcmdwX2ZtdHN0cmVhbV9wdXRjKQorK3dlYWtfYWxpYXMgKF9fYXJncF9mbXRzdHJlYW1fcHV0cywgYXJncF9mbXRzdHJlYW1fcHV0cykKKyt3ZWFrX2FsaWFzIChfX2FyZ3BfZm10c3RyZWFtX3dyaXRlLCBhcmdwX2ZtdHN0cmVhbV93cml0ZSkKKyt3ZWFrX2FsaWFzIChfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luLCBhcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbikKKyt3ZWFrX2FsaWFzIChfX2FyZ3BfZm10c3RyZWFtX3NldF9ybWFyZ2luLCBhcmdwX2ZtdHN0cmVhbV9zZXRfcm1hcmdpbikKKyt3ZWFrX2FsaWFzIChfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luLCBhcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbikKKyt3ZWFrX2FsaWFzIChfX2FyZ3BfZm10c3RyZWFtX3BvaW50LCBhcmdwX2ZtdHN0cmVhbV9wb2ludCkKKysKKysjZW5kaWYKKysjZW5kaWYKK2RpZmYgLS1naXQgYS9saWJ1YXJncC9hcmdwLWhlbHAuYyBiL2xpYnVhcmdwL2FyZ3AtaGVscC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNThhNWU2ZQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlidWFyZ3AvYXJncC1oZWxwLmMKK0BAIC0wLDAgKzEsMTg4MiBAQAorKy8qIEhpZXJhcmNoaWFsIGFyZ3VtZW50IHBhcnNpbmcgaGVscCBvdXRwdXQKKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNworKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzIGF0IGdudS5haS5taXQuZWR1Pi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4KKysKKysgICBNb2RpZmllZCBmb3IgdUNsaWJjIGJ5OiBTYWx2YXRvcmUgQ3JvIDxzYWx2YXRvcmUuY3JvIGF0IHN0LmNvbT4KKysqLworKworKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjIGRlZmluZSBfR05VX1NPVVJDRSAgIDEKKysjZW5kaWYKKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysvKiBBSVggcmVxdWlyZXMgdGhpcyB0byBiZSB0aGUgZmlyc3QgdGhpbmcgaW4gdGhlIGZpbGUuICAqLworKyNpZm5kZWYgX19HTlVDX18KKysjIGlmIEhBVkVfQUxMT0NBX0ggfHwgZGVmaW5lZCBfTElCQworKyMgIGluY2x1ZGUgPGFsbG9jYS5oPgorKyMgZWxzZQorKyMgIGlmZGVmIF9BSVgKKysjcHJhZ21hIGFsbG9jYQorKyMgIGVsc2UKKysjICAgaWZuZGVmIGFsbG9jYSAvKiBwcmVkZWZpbmVkIGJ5IEhQIGNjICtPbGliY2FsbHMgKi8KKytjaGFyICphbGxvY2EgKCk7CisrIyAgIGVuZGlmCisrIyAgZW5kaWYKKysjIGVuZGlmCisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxzdGRhcmcuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8bGltaXRzLmg+CisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDx3Y2hhci5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZm5kZWYgXworKy8qIFRoaXMgaXMgZm9yIG90aGVyIEdOVSBkaXN0cmlidXRpb25zIHdpdGggaW50ZXJuYXRpb25hbGl6ZWQgbWVzc2FnZXMuICAqLworKyMgaWYgKGRlZmluZWQgSEFWRV9MSUJJTlRMX0ggfHwgZGVmaW5lZCBfTElCQykgJiYgZGVmaW5lZCBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyMgIGluY2x1ZGUgPGxpYmludGwuaD4KKysjICBpZmRlZiBfTElCQworKyMgICB1bmRlZiBkZ2V0dGV4dAorKyMgICBkZWZpbmUgZGdldHRleHQoZG9tYWluLCBtc2dpZCkgXAorKyAgSU5UVVNFKF9fZGNnZXR0ZXh0KSAoZG9tYWluLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrIyAgZW5kaWYKKysjIGVsc2UKKysjICBkZWZpbmUgZGdldHRleHQoZG9tYWluLCBtc2dpZCkgKG1zZ2lkKQorKyMgZW5kaWYKKysjZW5kaWYKKysKKysjaWZuZGVmIF9MSUJDCisrIyBpZiBIQVZFX1NUUkVSUk9SX1IKKysjICBpZiAhSEFWRV9ERUNMX1NUUkVSUk9SX1IKKytjaGFyICpzdHJlcnJvcl9yIChpbnQgZXJybnVtLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOworKyMgIGVuZGlmCisrIyBlbHNlCisrIyAgaWYgIUhBVkVfREVDTF9TVFJFUlJPUgorK2NoYXIgKnN0cmVycm9yIChpbnQgZXJybnVtKTsKKysjICBlbmRpZgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysjaW5jbHVkZSA8YXJncC5oPgorKyNpbmNsdWRlICJhcmdwLWZtdHN0cmVhbS5oIgorKyNpbmNsdWRlIDxzdGRib29sLmg+CisrI2luY2x1ZGUgPHN0ZGludC5oPgorKworKyNpZm5kZWYgU0laRV9NQVgKKysjIGRlZmluZSBTSVpFX01BWCAoKHNpemVfdCkgLTEpCisrI2VuZGlmCisrCisrLyogVXNlci1zZWxlY3RhYmxlICh1c2luZyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSkgZm9ybWF0dGluZyBwYXJhbWV0ZXJzLgorKworKyAgIFRoZXNlIG1heSBiZSBzcGVjaWZpZWQgaW4gYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgY2FsbGVkIGBBUkdQX0hFTFBfRk1UJywKKysgICB3aXRoIGEgY29udGVudHMgbGlrZTogIFZBUjE9VkFMMSxWQVIyPVZBTDIsQk9PTFZBUjIsbm8tQk9PTFZBUjIKKysgICBXaGVyZSBWQUxuIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLiAgVGhlIGxpc3Qgb2YgdmFyaWFibGVzIGlzIGluIHRoZQorKyAgIFVQQVJBTV9OQU1FUyB2ZWN0b3IsIGJlbG93LiAgKi8KKysKKysvKiBEZWZhdWx0IHBhcmFtZXRlcnMuICAqLworKyNkZWZpbmUgRFVQX0FSR1MgICAgICAwICAgICAgICAgICAgICAgIC8qIFRydWUgaWYgb3B0aW9uIGFyZ3VtZW50IGNhbiBiZSBkdXBsaWNhdGVkLiAqLworKyNkZWZpbmUgRFVQX0FSR1NfTk9URSAxICAgICAgICAgICAgICAgIC8qIFRydWUgdG8gcHJpbnQgYSBub3RlIGFib3V0IGR1cGxpY2F0ZSBhcmdzLiAqLworKyNkZWZpbmUgU0hPUlRfT1BUX0NPTCAyICAgICAgICAgICAgICAgIC8qIGNvbHVtbiBpbiB3aGljaCBzaG9ydCBvcHRpb25zIHN0YXJ0ICovCisrI2RlZmluZSBMT05HX09QVF9DT0wgIDYgICAgICAgICAgICAgICAgLyogY29sdW1uIGluIHdoaWNoIGxvbmcgb3B0aW9ucyBzdGFydCAqLworKyNkZWZpbmUgRE9DX09QVF9DT0wgICAyICAgICAgICAgICAgICAgIC8qIGNvbHVtbiBpbiB3aGljaCBkb2Mgb3B0aW9ucyBzdGFydCAqLworKyNkZWZpbmUgT1BUX0RPQ19DT0wgIDI5ICAgICAgICAgICAgICAgIC8qIGNvbHVtbiBpbiB3aGljaCBvcHRpb24gdGV4dCBzdGFydHMgKi8KKysjZGVmaW5lIEhFQURFUl9DT0wgICAgMSAgICAgICAgICAgICAgICAvKiBjb2x1bW4gaW4gd2hpY2ggZ3JvdXAgaGVhZGVycyBhcmUgcHJpbnRlZCAqLworKyNkZWZpbmUgVVNBR0VfSU5ERU5UIDEyICAgICAgICAgICAgICAgIC8qIGluZGVudGF0aW9uIG9mIHdyYXBwZWQgdXNhZ2UgbGluZXMgKi8KKysjZGVmaW5lIFJNQVJHSU4gICAgICA3OSAgICAgICAgICAgICAgICAvKiByaWdodCBtYXJnaW4gdXNlZCBmb3Igd3JhcHBpbmcgKi8KKysKKysvKiBVc2VyLXNlbGVjdGFibGUgKHVzaW5nIGFuIGVudmlyb25tZW50IHZhcmlhYmxlKSBmb3JtYXR0aW5nIHBhcmFtZXRlcnMuCisrICAgVGhleSBtdXN0IGFsbCBiZSBvZiB0eXBlIGBpbnQnIGZvciB0aGUgcGFyc2luZyBjb2RlIHRvIHdvcmsuICAqLworK3N0cnVjdCB1cGFyYW1zCisreworKyAgLyogSWYgdHJ1ZSwgYXJndW1lbnRzIGZvciBhbiBvcHRpb24gYXJlIHNob3duIHdpdGggYm90aCBzaG9ydCBhbmQgbG9uZworKyAgICAgb3B0aW9ucywgZXZlbiB3aGVuIGEgZ2l2ZW4gb3B0aW9uIGhhcyBib3RoLCBlLmcuIGAteCBBUkcsIC0tbG9uZ3g9QVJHJy4KKysgICAgIElmIGZhbHNlLCB0aGVuIGlmIGFuIG9wdGlvbiBoYXMgYm90aCwgdGhlIGFyZ3VtZW50IGlzIG9ubHkgc2hvd24gd2l0aAorKyAgICAgdGhlIGxvbmcgb25lLCBlLmcuLCBgLXgsIC0tbG9uZ3g9QVJHJywgYW5kIGEgbWVzc2FnZSBpbmRpY2F0aW5nIHRoYXQKKysgICAgIHRoaXMgcmVhbGx5IG1lYW5zIGJvdGggaXMgcHJpbnRlZCBiZWxvdyB0aGUgb3B0aW9ucy4gICovCisrICBpbnQgZHVwX2FyZ3M7CisrCisrICAvKiBUaGlzIGlzIHRydWUgaWYgd2hlbiBEVVBfQVJHUyBpcyBmYWxzZSwgYW5kIHNvbWUgZHVwbGljYXRlIGFyZ3VtZW50cyBoYXZlCisrICAgICBiZWVuIHN1cHByZXNzZWQsIGFuIGV4cGxhbmF0b3J5IG1lc3NhZ2Ugc2hvdWxkIGJlIHByaW50ZWQuICAqLworKyAgaW50IGR1cF9hcmdzX25vdGU7CisrCisrICAvKiBWYXJpb3VzIG91dHB1dCBjb2x1bW5zLiAgKi8KKysgIGludCBzaG9ydF9vcHRfY29sOworKyAgaW50IGxvbmdfb3B0X2NvbDsKKysgIGludCBkb2Nfb3B0X2NvbDsKKysgIGludCBvcHRfZG9jX2NvbDsKKysgIGludCBoZWFkZXJfY29sOworKyAgaW50IHVzYWdlX2luZGVudDsKKysgIGludCBybWFyZ2luOworK307CisrCisrLyogVGhpcyBpcyBhIGdsb2JhbCB2YXJpYWJsZSwgYXMgdXNlciBvcHRpb25zIGFyZSBvbmx5IGV2ZXIgcmVhZCBvbmNlLiAgKi8KKytzdGF0aWMgc3RydWN0IHVwYXJhbXMgdXBhcmFtcyA9IHsKKysgIERVUF9BUkdTLCBEVVBfQVJHU19OT1RFLAorKyAgU0hPUlRfT1BUX0NPTCwgTE9OR19PUFRfQ09MLCBET0NfT1BUX0NPTCwgT1BUX0RPQ19DT0wsIEhFQURFUl9DT0wsCisrICBVU0FHRV9JTkRFTlQsIFJNQVJHSU4KKyt9OworKworKy8qIEEgcGFydGljdWxhciB1cGFyYW0sIGFuZCB3aGF0IHRoZSB1c2VyIG5hbWUgaXMuICAqLworK3N0cnVjdCB1cGFyYW1fbmFtZQorK3sKKysgIGNvbnN0IGNoYXIgbmFtZVsxNF07ICAgICAgICAgLyogVXNlciBuYW1lLiAgKi8KKysgIGJvb2wgaXNfYm9vbDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaGV0aGVyIGl0J3MgYGJvb2xlYW4nLiAgKi8KKysgIHVpbnQ4X3QgdXBhcmFtc19vZmZzOyAgICAgICAgICAgICAgICAvKiBMb2NhdGlvbiBvZiB0aGUgKGludCkgZmllbGQgaW4gVVBBUkFNUy4gICovCisrfTsKKysKKysvKiBUaGUgbmFtZS1maWVsZCBtYXBwaW5ncyB3ZSBrbm93IGFib3V0LiAgKi8KKytzdGF0aWMgY29uc3Qgc3RydWN0IHVwYXJhbV9uYW1lIHVwYXJhbV9uYW1lc1tdID0KKyt7CisrICB7ICJkdXAtYXJncyIsICAgICAgIHRydWUsIG9mZnNldG9mIChzdHJ1Y3QgdXBhcmFtcywgZHVwX2FyZ3MpIH0sCisrICB7ICJkdXAtYXJncy1ub3RlIiwgIHRydWUsIG9mZnNldG9mIChzdHJ1Y3QgdXBhcmFtcywgZHVwX2FyZ3Nfbm90ZSkgfSwKKysgIHsgInNob3J0LW9wdC1jb2wiLCAgZmFsc2UsIG9mZnNldG9mIChzdHJ1Y3QgdXBhcmFtcywgc2hvcnRfb3B0X2NvbCkgfSwKKysgIHsgImxvbmctb3B0LWNvbCIsICAgZmFsc2UsIG9mZnNldG9mIChzdHJ1Y3QgdXBhcmFtcywgbG9uZ19vcHRfY29sKSB9LAorKyAgeyAiZG9jLW9wdC1jb2wiLCAgICBmYWxzZSwgb2Zmc2V0b2YgKHN0cnVjdCB1cGFyYW1zLCBkb2Nfb3B0X2NvbCkgfSwKKysgIHsgIm9wdC1kb2MtY29sIiwgICAgZmFsc2UsIG9mZnNldG9mIChzdHJ1Y3QgdXBhcmFtcywgb3B0X2RvY19jb2wpIH0sCisrICB7ICJoZWFkZXItY29sIiwgICAgIGZhbHNlLCBvZmZzZXRvZiAoc3RydWN0IHVwYXJhbXMsIGhlYWRlcl9jb2wpIH0sCisrICB7ICJ1c2FnZS1pbmRlbnQiLCAgIGZhbHNlLCBvZmZzZXRvZiAoc3RydWN0IHVwYXJhbXMsIHVzYWdlX2luZGVudCkgfSwKKysgIHsgInJtYXJnaW4iLCAgICAgICAgZmFsc2UsIG9mZnNldG9mIChzdHJ1Y3QgdXBhcmFtcywgcm1hcmdpbikgfQorK307CisrI2RlZmluZSBudXBhcmFtX25hbWVzIChzaXplb2YgKHVwYXJhbV9uYW1lcykgLyBzaXplb2YgKHVwYXJhbV9uYW1lc1swXSkpCisrCisrLyogUmVhZCB1c2VyIG9wdGlvbnMgZnJvbSB0aGUgZW52aXJvbm1lbnQsIGFuZCBmaWxsIGluIFVQQVJBTVMgYXBwcm9waWF0ZWx5LiAgKi8KKytzdGF0aWMgdm9pZAorK2ZpbGxfaW5fdXBhcmFtcyAoY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQorK3sKKysgIGNvbnN0IGNoYXIgKnZhciA9IGdldGVudiAoIkFSR1BfSEVMUF9GTVQiKTsKKysKKysjZGVmaW5lIFNLSVBXUyhwKSBkbyB7IHdoaWxlIChpc3NwYWNlICgqcCkpIHArKzsgfSB3aGlsZSAoMCk7CisrCisrICBpZiAodmFyKQorKyAgICAvKiBQYXJzZSB2YXIuICovCisrICAgIHdoaWxlICgqdmFyKQorKyAgICAgIHsKKysgICAgICAgU0tJUFdTICh2YXIpOworKworKyAgICAgICBpZiAoaXNhbHBoYSAoKnZhcikpCisrICAgICAgICAgeworKyAgICAgICAgICAgc2l6ZV90IHZhcl9sZW47CisrICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdXBhcmFtX25hbWUgKnVuOworKyAgICAgICAgICAgaW50IHVuc3BlYyA9IDAsIHZhbCA9IDA7CisrICAgICAgICAgICBjb25zdCBjaGFyICphcmcgPSB2YXI7CisrCisrICAgICAgICAgICB3aGlsZSAoaXNhbG51bSAoKmFyZykgfHwgKmFyZyA9PSAnLScgfHwgKmFyZyA9PSAnXycpCisrICAgICAgICAgICAgIGFyZysrOworKyAgICAgICAgICAgdmFyX2xlbiA9IGFyZyAtIHZhcjsKKysKKysgICAgICAgICAgIFNLSVBXUyAoYXJnKTsKKysKKysgICAgICAgICAgIGlmICgqYXJnID09ICdcMCcgfHwgKmFyZyA9PSAnLCcpCisrICAgICAgICAgICAgIHVuc3BlYyA9IDE7CisrICAgICAgICAgICBlbHNlIGlmICgqYXJnID09ICc9JykKKysgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgIGFyZysrOworKyAgICAgICAgICAgICAgIFNLSVBXUyAoYXJnKTsKKysgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgaWYgKHVuc3BlYykKKysgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgIGlmICh2YXJbMF0gPT0gJ24nICYmIHZhclsxXSA9PSAnbycgJiYgdmFyWzJdID09ICctJykKKysgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgdmFsID0gMDsKKysgICAgICAgICAgICAgICAgICAgdmFyICs9IDM7CisrICAgICAgICAgICAgICAgICAgIHZhcl9sZW4gLT0gMzsKKysgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICB2YWwgPSAxOworKyAgICAgICAgICAgICB9CisrICAgICAgICAgICBlbHNlIGlmIChpc2RpZ2l0ICgqYXJnKSkKKysgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgIHZhbCA9IGF0b2kgKGFyZyk7CisrICAgICAgICAgICAgICAgd2hpbGUgKGlzZGlnaXQgKCphcmcpKQorKyAgICAgICAgICAgICAgICAgYXJnKys7CisrICAgICAgICAgICAgICAgU0tJUFdTIChhcmcpOworKyAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICB1biA9IHVwYXJhbV9uYW1lczsKKysgICAgICAgICAgIHNpemVfdCB1OworKyAgICAgICAgICAgZm9yICh1ID0gMDsgdSA8IG51cGFyYW1fbmFtZXM7ICsrdW4sICsrdSkKKysgICAgICAgICAgICAgaWYgKHN0cmxlbiAodW4tPm5hbWUpID09IHZhcl9sZW4KKysgICAgICAgICAgICAgICAgICYmIHN0cm5jbXAgKHZhciwgdW4tPm5hbWUsIHZhcl9sZW4pID09IDApCisrICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgaWYgKHVuc3BlYyAmJiAhdW4tPmlzX2Jvb2wpCisrICAgICAgICAgICAgICAgICAgIGFyZ3BfZmFpbHVyZSAoc3RhdGUsIDAsIDAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZ2V0dGV4dCAoc3RhdGUgPT0gTlVMTCA/IE5VTEwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN0YXRlLT5yb290X2FyZ3AtPmFyZ3BfZG9tYWluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcCisrJS4qczogQVJHUF9IRUxQX0ZNVCBwYXJhbWV0ZXIgcmVxdWlyZXMgYSB2YWx1ZSIpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgdmFyX2xlbiwgdmFyKTsKKysgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgKihpbnQgKikoKGNoYXIgKikmdXBhcmFtcyArIHVuLT51cGFyYW1zX29mZnMpID0gdmFsOworKyAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgaWYgKHUgPT0gbnVwYXJhbV9uYW1lcykKKysgICAgICAgICAgICAgYXJncF9mYWlsdXJlIChzdGF0ZSwgMCwgMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChzdGF0ZSA9PSBOVUxMID8gTlVMTAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3RhdGUtPnJvb3RfYXJncC0+YXJncF9kb21haW4sICJcCisrJS4qczogVW5rbm93biBBUkdQX0hFTFBfRk1UIHBhcmFtZXRlciIpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgdmFyX2xlbiwgdmFyKTsKKysKKysgICAgICAgICAgIHZhciA9IGFyZzsKKysgICAgICAgICAgIGlmICgqdmFyID09ICcsJykKKysgICAgICAgICAgICAgdmFyKys7CisrICAgICAgICAgfQorKyAgICAgICBlbHNlIGlmICgqdmFyKQorKyAgICAgICAgIHsKKysgICAgICAgICAgIGFyZ3BfZmFpbHVyZSAoc3RhdGUsIDAsIDAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgZGdldHRleHQgKHN0YXRlID09IE5VTEwgPyBOVUxMCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3RhdGUtPnJvb3RfYXJncC0+YXJncF9kb21haW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHYXJiYWdlIGluIEFSR1BfSEVMUF9GTVQ6ICVzIiksIHZhcik7CisrICAgICAgICAgICBicmVhazsKKysgICAgICAgICB9CisrICAgICAgfQorK30KKysKKysvKiBSZXR1cm5zIHRydWUgaWYgT1BUIGhhc24ndCBiZWVuIG1hcmtlZCBpbnZpc2libGUuICBWaXNpYmlsaXR5IG9ubHkgYWZmZWN0cworKyAgIHdoZXRoZXIgT1BUIGlzIGRpc3BsYXllZCBvciB1c2VkIGluIHNvcnRpbmcsIG5vdCBvcHRpb24gc2hhZG93aW5nLiAgKi8KKysjZGVmaW5lIG92aXNpYmxlKG9wdCkgKCEgKChvcHQpLT5mbGFncyAmIE9QVElPTl9ISURERU4pKQorKworKy8qIFJldHVybnMgdHJ1ZSBpZiBPUFQgaXMgYW4gYWxpYXMgZm9yIGFuIGVhcmxpZXIgb3B0aW9uLiAgKi8KKysjZGVmaW5lIG9hbGlhcyhvcHQpICgob3B0KS0+ZmxhZ3MgJiBPUFRJT05fQUxJQVMpCisrCisrLyogUmV0dXJucyB0cnVlIGlmIE9QVCBpcyBhbiBkb2N1bWVudGF0aW9uLW9ubHkgZW50cnkuICAqLworKyNkZWZpbmUgb2RvYyhvcHQpICgob3B0KS0+ZmxhZ3MgJiBPUFRJT05fRE9DKQorKworKy8qIFJldHVybnMgdHJ1ZSBpZiBPUFQgaXMgdGhlIGVuZC1vZi1saXN0IG1hcmtlciBmb3IgYSBsaXN0IG9mIG9wdGlvbnMuICAqLworKyNkZWZpbmUgb2VuZChvcHQpIF9fb3B0aW9uX2lzX2VuZCAob3B0KQorKworKy8qIFJldHVybnMgdHJ1ZSBpZiBPUFQgaGFzIGEgc2hvcnQgb3B0aW9uLiAgKi8KKysjZGVmaW5lIG9zaG9ydChvcHQpIF9fb3B0aW9uX2lzX3Nob3J0IChvcHQpCisrCisrLyoKKysgICBUaGUgaGVscCBmb3JtYXQgZm9yIGEgcGFydGljdWxhciBvcHRpb24gaXMgbGlrZToKKysKKysgICAgIC14QVJHLCAteUFSRywgLS1sb25nMT1BUkcsIC0tbG9uZzI9QVJHICAgICAgICBEb2N1bWVudGF0aW9uLi4uCisrCisrICAgV2hlcmUgQVJHIHdpbGwgYmUgb21pdHRlZCBpZiB0aGVyZSdzIG5vIGFyZ3VtZW50LCBmb3IgdGhpcyBvcHRpb24sIG9yCisrICAgd2lsbCBiZSBzdXJyb3VuZGVkIGJ5ICJbIiBhbmQgIl0iIGFwcHJvcGlhdGVseSBpZiB0aGUgYXJndW1lbnQgaXMKKysgICBvcHRpb25hbC4gIFRoZSBkb2N1bWVudGF0aW9uIHN0cmluZyBpcyB3b3JkLXdyYXBwZWQgYXBwcm9waWF0ZWx5LCBhbmQgaWYKKysgICB0aGUgbGlzdCBvZiBvcHRpb25zIGlzIGxvbmcgZW5vdWdoLCBpdCB3aWxsIGJlIHN0YXJ0ZWQgb24gYSBzZXBhcmF0ZSBsaW5lLgorKyAgIElmIHRoZXJlIGFyZSBubyBzaG9ydCBvcHRpb25zIGZvciBhIGdpdmVuIG9wdGlvbiwgdGhlIGZpcnN0IGxvbmcgb3B0aW9uIGlzCisrICAgaW5kZW50ZWQgc2xpZ2hseSBpbiBhIHdheSB0aGF0J3Mgc3VwcG9zZWQgdG8gbWFrZSBtb3N0IGxvbmcgb3B0aW9ucyBhcHBlYXIKKysgICB0byBiZSBpbiBhIHNlcGFyYXRlIGNvbHVtbi4KKysKKysgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBvdXRwdXQgKGZyb20gcHMpOgorKworKyAgICAgLXAgUElELCAtLXBpZD1QSUQgICAgICAgICAgTGlzdCB0aGUgcHJvY2VzcyBQSUQKKysgICAgICAgIC0tcGdycD1QR1JQICAgICAgICAgICAgTGlzdCBwcm9jZXNzZXMgaW4gdGhlIHByb2Nlc3MgZ3JvdXAgUEdSUAorKyAgICAgLVAsIC14LCAtLW5vLXBhcmVudCAgICAgICAgSW5jbHVkZSBwcm9jZXNzZXMgd2l0aG91dCBwYXJlbnRzCisrICAgICAtUSwgLS1hbGwtZmllbGRzICAgICAgICAgICBEb24ndCBlbGlkZSB1bnVzYWJsZSBmaWVsZHMgKG5vcm1hbGx5IGlmIHRoZXJlJ3MKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29tZSByZWFzb24gcHMgY2FuJ3QgcHJpbnQgYSBmaWVsZCBmb3IgYW55CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MsIGl0J3MgcmVtb3ZlZCBmcm9tIHRoZSBvdXRwdXQgZW50aXJlbHkpCisrICAgICAtciwgLS1yZXZlcnNlLCAtLWdyYXR1aXRvdXNseS1sb25nLXJldmVyc2Utb3B0aW9uCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldmVyc2UgdGhlIG9yZGVyIG9mIGFueSBzb3J0CisrICAgICAgICAtLXNlc3Npb25bPVNJRF0gICAgICAgIEFkZCB0aGUgcHJvY2Vzc2VzIGZyb20gdGhlIHNlc3Npb24gU0lEICh3aGljaAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0cyB0byB0aGUgc2lkIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MpCisrCisrICAgIEhlcmUgYXJlIHNvbWUgbW9yZSBvcHRpb25zOgorKyAgICAgLWYgWk9ULCAtLWZvb25seT1aT1QgICAgICAgR2xvcmsgYSBmb29ubHkKKysgICAgIC16LCAtLXphemEgICAgICAgICAgICAgICAgIFNuaXQgYSB6YXIKKysKKysgICAgIC0/LCAtLWhlbHAgICAgICAgICAgICAgICAgIEdpdmUgdGhpcyBoZWxwIGxpc3QKKysgICAgICAgIC0tdXNhZ2UgICAgICAgICAgICAgICAgR2l2ZSBhIHNob3J0IHVzYWdlIG1lc3NhZ2UKKysgICAgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgIFByaW50IHByb2dyYW0gdmVyc2lvbgorKworKyAgIFRoZSBzdHJ1Y3QgYXJncF9vcHRpb24gYXJyYXkgZm9yIHRoZSBhYm92ZSBjb3VsZCBsb29rIGxpa2U6CisrCisrICAgeworKyAgICAgeyJwaWQiLCAgICAgICAncCcsICAgICAgIlBJRCIsICAwLCAiTGlzdCB0aGUgcHJvY2VzcyBQSUQifSwKKysgICAgIHsicGdycCIsICAgICAgT1BUX1BHUlAsICJQR1JQIiwgMCwgIkxpc3QgcHJvY2Vzc2VzIGluIHRoZSBwcm9jZXNzIGdyb3VwIFBHUlAifSwKKysgICAgIHsibm8tcGFyZW50IiwgJ1AnLCAgICAgICAgICAgICAgMCwgICAgIDAsICJJbmNsdWRlIHByb2Nlc3NlcyB3aXRob3V0IHBhcmVudHMifSwKKysgICAgIHswLCAgICAgICAgICAgJ3gnLCAgICAgICAwLCAgICAgT1BUSU9OX0FMSUFTfSwKKysgICAgIHsiYWxsLWZpZWxkcyIsJ1EnLCAgICAgICAwLCAgICAgMCwgIkRvbid0IGVsaWRlIHVudXNhYmxlIGZpZWxkcyAobm9ybWFsbHkiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaWYgdGhlcmUncyBzb21lIHJlYXNvbiBwcyBjYW4ndCIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHByaW50IGEgZmllbGQgZm9yIGFueSBwcm9jZXNzLCBpdCdzIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHJlbW92ZWQgZnJvbSB0aGUgb3V0cHV0IGVudGlyZWx5KSIgfSwKKysgICAgIHsicmV2ZXJzZSIsICAgJ3InLCAgICAgICAwLCAgICAgMCwgIlJldmVyc2UgdGhlIG9yZGVyIG9mIGFueSBzb3J0In0sCisrICAgICB7ImdyYXR1aXRvdXNseS1sb25nLXJldmVyc2Utb3B0aW9uIiwgMCwgMCwgT1BUSU9OX0FMSUFTfSwKKysgICAgIHsic2Vzc2lvbiIsICAgT1BUX1NFU1MsICAiU0lEIiwgT1BUSU9OX0FSR19PUFRJT05BTCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFkZCB0aGUgcHJvY2Vzc2VzIGZyb20gdGhlIHNlc3Npb24iCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBTSUQgKHdoaWNoIGRlZmF1bHRzIHRvIHRoZSBzaWQgb2YiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0aGUgY3VycmVudCBwcm9jZXNzKSIgfSwKKysKKysgICAgIHswLDAsMCwwLCAiSGVyZSBhcmUgc29tZSBtb3JlIG9wdGlvbnM6In0sCisrICAgICB7ImZvb25seSIsICdmJywgIlpPVCIsIDAsICJHbG9yayBhIGZvb25seSJ9LAorKyAgICAgeyJ6YXphIiwgJ3onLCAwLCAwLCAiU25pdCBhIHphciJ9LAorKworKyAgICAgezB9CisrICAgfQorKworKyAgIE5vdGUgdGhhdCB0aGUgbGFzdCB0aHJlZSBvcHRpb25zIGFyZSBhdXRvbWF0aWNhbGx5IHN1cHBsaWVkIGJ5IGFyZ3BfcGFyc2UsCisrICAgdW5sZXNzIHlvdSB0ZWxsIGl0IG5vdCB0byB3aXRoIEFSR1BfTk9fSEVMUC4KKysKKysqLworKworKy8qIFJldHVybnMgdHJ1ZSBpZiBDSCBvY2N1cnMgYmV0d2VlbiBCRUcgYW5kIEVORC4gICovCisrc3RhdGljIGludAorK2ZpbmRfY2hhciAoY2hhciBjaCwgY2hhciAqYmVnLCBjaGFyICplbmQpCisreworKyAgd2hpbGUgKGJlZyA8IGVuZCkKKysgICAgaWYgKCpiZWcgPT0gY2gpCisrICAgICAgcmV0dXJuIDE7CisrICAgIGVsc2UKKysgICAgICBiZWcrKzsKKysgIHJldHVybiAwOworK30KKysKKytzdHJ1Y3QgaG9sX2NsdXN0ZXI7ICAgICAgICAgICAgLyogZndkIGRlY2wgKi8KKysKKytzdHJ1Y3QgaG9sX2VudHJ5CisreworKyAgLyogRmlyc3Qgb3B0aW9uLiAgKi8KKysgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0OworKyAgLyogTnVtYmVyIG9mIG9wdGlvbnMgKGluY2x1ZGluZyBhbGlhc2VzKS4gICovCisrICB1bnNpZ25lZCBudW07CisrCisrICAvKiBBIHBvaW50ZXJzIGludG8gdGhlIEhPTCdzIHNob3J0X29wdGlvbnMgZmllbGQsIHRvIHRoZSBmaXJzdCBzaG9ydCBvcHRpb24KKysgICAgIGxldHRlciBmb3IgdGhpcyBlbnRyeS4gIFRoZSBvcmRlciBvZiB0aGUgY2hhcmFjdGVycyBmb2xsb3dpbmcgdGhpcyBwb2ludAorKyAgICAgY29ycmVzcG9uZHMgdG8gdGhlIG9yZGVyIG9mIG9wdGlvbnMgcG9pbnRlZCB0byBieSBPUFQsIGFuZCB0aGVyZSBhcmUgYXQKKysgICAgIG1vc3QgTlVNLiAgQSBzaG9ydCBvcHRpb24gcmVjb3JkZWQgaW4gYSBvcHRpb24gZm9sbG93aW5nIE9QVCBpcyBvbmx5CisrICAgICB2YWxpZCBpZiBpdCBvY2N1cnMgaW4gdGhlIHJpZ2h0IHBsYWNlIGluIFNIT1JUX09QVElPTlMgKG90aGVyd2lzZSBpdCdzCisrICAgICBwcm9iYWJseSBiZWVuIHNoYWRvd2VkIGJ5IHNvbWUgb3RoZXIgZW50cnkpLiAgKi8KKysgIGNoYXIgKnNob3J0X29wdGlvbnM7CisrCisrICAvKiBFbnRyaWVzIGFyZSBzb3J0ZWQgYnkgdGhlaXIgZ3JvdXAgZmlyc3QsIGluIHRoZSBvcmRlcjoKKysgICAgICAgMSwgMiwgLi4uLCBuLCAwLCAtbSwgLi4uLCAtMiwgLTEKKysgICAgIGFuZCB0aGVuIGFscGhhYmV0aWNhbGx5IHdpdGhpbiBlYWNoIGdyb3VwLiAgVGhlIGRlZmF1bHQgaXMgMC4gICovCisrICBpbnQgZ3JvdXA7CisrCisrICAvKiBUaGUgY2x1c3RlciBvZiBvcHRpb25zIHRoaXMgZW50cnkgYmVsb25ncyB0bywgb3IgMCBpZiBub25lLiAgKi8KKysgIHN0cnVjdCBob2xfY2x1c3RlciAqY2x1c3RlcjsKKysKKysgIC8qIFRoZSBhcmdwIGZyb20gd2hpY2ggdGhpcyBvcHRpb24gY2FtZS4gICovCisrICBjb25zdCBzdHJ1Y3QgYXJncCAqYXJncDsKKyt9OworKworKy8qIEEgY2x1c3RlciBvZiBlbnRyaWVzIHRvIHJlZmxlY3QgdGhlIGFyZ3AgdHJlZSBzdHJ1Y3R1cmUuICAqLworK3N0cnVjdCBob2xfY2x1c3RlcgorK3sKKysgIC8qIEEgZGVzY3JpcHRpdmUgaGVhZGVyIHByaW50ZWQgYmVmb3JlIG9wdGlvbnMgaW4gdGhpcyBjbHVzdGVyLiAgKi8KKysgIGNvbnN0IGNoYXIgKmhlYWRlcjsKKysKKysgIC8qIFVzZWQgdG8gb3JkZXIgY2x1c3RlcnMgd2l0aGluIHRoZSBzYW1lIGdyb3VwIHdpdGggdGhlIHNhbWUgcGFyZW50LAorKyAgICAgYWNjb3JkaW5nIHRvIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IG9jY3VycmVkIGluIHRoZSBwYXJlbnQgYXJncCdzIGNoaWxkCisrICAgICBsaXN0LiAgKi8KKysgIGludCBpbmRleDsKKysKKysgIC8qIEhvdyB0byBzb3J0IHRoaXMgY2x1c3RlciB3aXRoIHJlc3BlY3QgdG8gb3B0aW9ucyBhbmQgb3RoZXIgY2x1c3RlcnMgYXQgdGhlCisrICAgICBzYW1lIGRlcHRoIChjbHVzdGVycyBhbHdheXMgZm9sbG93IG9wdGlvbnMgaW4gdGhlIHNhbWUgZ3JvdXApLiAgKi8KKysgIGludCBncm91cDsKKysKKysgIC8qIFRoZSBjbHVzdGVyIHRvIHdoaWNoIHRoaXMgY2x1c3RlciBiZWxvbmdzLCBvciAwIGlmIGl0J3MgYXQgdGhlIGJhc2UKKysgICAgIGxldmVsLiAgKi8KKysgIHN0cnVjdCBob2xfY2x1c3RlciAqcGFyZW50OworKworKyAgLyogVGhlIGFyZ3AgZnJvbSB3aGljaCB0aGlzIGNsdXN0ZXIgaXMgKGV2ZW50dWFsbHkpIGRlcml2ZWQuICAqLworKyAgY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3A7CisrCisrICAvKiBUaGUgZGlzdGFuY2UgdGhpcyBjbHVzdGVyIGlzIGZyb20gdGhlIHJvb3QuICAqLworKyAgaW50IGRlcHRoOworKworKyAgLyogQ2x1c3RlcnMgaW4gYSBnaXZlbiBob2wgYXJlIGtlcHQgaW4gYSBsaW5rZWQgbGlzdCwgdG8gbWFrZSBmcmVlaW5nIHRoZW0KKysgICAgIHBvc3NpYmxlLiAgKi8KKysgIHN0cnVjdCBob2xfY2x1c3RlciAqbmV4dDsKKyt9OworKworKy8qIEEgbGlzdCBvZiBvcHRpb25zIGZvciBoZWxwLiAgKi8KKytzdHJ1Y3QgaG9sCisreworKyAgLyogQW4gYXJyYXkgb2YgaG9sX2VudHJ5J3MuICAqLworKyAgc3RydWN0IGhvbF9lbnRyeSAqZW50cmllczsKKysgIC8qIFRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGlzIGhvbC4gIElmIHRoaXMgZmllbGQgaXMgemVybywgdGhlIG90aGVycworKyAgICAgYXJlIHVuZGVmaW5lZC4gICovCisrICB1bnNpZ25lZCBudW1fZW50cmllczsKKysKKysgIC8qIEEgc3RyaW5nIGNvbnRhaW5pbmcgYWxsIHNob3J0IG9wdGlvbnMgaW4gdGhpcyBIT0wuICBFYWNoIGVudHJ5IGNvbnRhaW5zCisrICAgICBwb2ludGVycyBpbnRvIHRoaXMgc3RyaW5nLCBzbyB0aGUgb3JkZXIgY2FuJ3QgYmUgbWVzc2VkIHdpdGggYmxpbmRseS4gICovCisrICBjaGFyICpzaG9ydF9vcHRpb25zOworKworKyAgLyogQ2x1c3RlcnMgb2YgZW50cmllcyBpbiB0aGlzIGhvbC4gICovCisrICBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKmNsdXN0ZXJzOworK307CisrCisrLyogQ3JlYXRlIGEgc3RydWN0IGhvbCBmcm9tIHRoZSBvcHRpb25zIGluIEFSR1AuICBDTFVTVEVSIGlzIHRoZQorKyAgIGhvbF9jbHVzdGVyIGluIHdoaWNoIHRoZXNlIGVudHJpZXMgb2NjdXIsIG9yIDAsIGlmIGF0IHRoZSByb290LiAgKi8KKytzdGF0aWMgc3RydWN0IGhvbCAqCisrbWFrZV9ob2wgKGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLCBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKmNsdXN0ZXIpCisreworKyAgY2hhciAqc287CisrICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm87CisrICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdHMgPSBhcmdwLT5vcHRpb25zOworKyAgc3RydWN0IGhvbF9lbnRyeSAqZW50cnk7CisrICB1bnNpZ25lZCBudW1fc2hvcnRfb3B0aW9ucyA9IDA7CisrICBzdHJ1Y3QgaG9sICpob2wgPSBtYWxsb2MgKHNpemVvZiAoc3RydWN0IGhvbCkpOworKworKyAgYXNzZXJ0IChob2wpOworKworKyAgaG9sLT5udW1fZW50cmllcyA9IDA7CisrICBob2wtPmNsdXN0ZXJzID0gMDsKKysKKysgIGlmIChvcHRzKQorKyAgICB7CisrICAgICAgaW50IGN1cl9ncm91cCA9IDA7CisrCisrICAgICAgLyogVGhlIGZpcnN0IG9wdGlvbiBtdXN0IG5vdCBiZSBhbiBhbGlhcy4gICovCisrICAgICAgYXNzZXJ0ICghIG9hbGlhcyAob3B0cykpOworKworKyAgICAgIC8qIENhbGN1bGF0ZSB0aGUgc3BhY2UgbmVlZGVkLiAgKi8KKysgICAgICBmb3IgKG8gPSBvcHRzOyAhIG9lbmQgKG8pOyBvKyspCisrICAgICAgIHsKKysgICAgICAgICBpZiAoISBvYWxpYXMgKG8pKQorKyAgICAgICAgICAgaG9sLT5udW1fZW50cmllcysrOworKyAgICAgICAgIGlmIChvc2hvcnQgKG8pKQorKyAgICAgICAgICAgbnVtX3Nob3J0X29wdGlvbnMrKzsgICAgICAgIC8qIFRoaXMgaXMgYW4gdXBwZXIgYm91bmQuICAqLworKyAgICAgICB9CisrCisrICAgICAgaG9sLT5lbnRyaWVzID0gbWFsbG9jIChzaXplb2YgKHN0cnVjdCBob2xfZW50cnkpICogaG9sLT5udW1fZW50cmllcyk7CisrICAgICAgaG9sLT5zaG9ydF9vcHRpb25zID0gbWFsbG9jIChudW1fc2hvcnRfb3B0aW9ucyArIDEpOworKworKyAgICAgIGFzc2VydCAoaG9sLT5lbnRyaWVzICYmIGhvbC0+c2hvcnRfb3B0aW9ucyk7CisrI2lmIFNJWkVfTUFYIDw9IFVJTlRfTUFYCisrICAgICAgYXNzZXJ0IChob2wtPm51bV9lbnRyaWVzIDw9IFNJWkVfTUFYIC8gc2l6ZW9mIChzdHJ1Y3QgaG9sX2VudHJ5KSk7CisrI2VuZGlmCisrCisrICAgICAgLyogRmlsbCBpbiB0aGUgZW50cmllcy4gICovCisrICAgICAgc28gPSBob2wtPnNob3J0X29wdGlvbnM7CisrICAgICAgZm9yIChvID0gb3B0cywgZW50cnkgPSBob2wtPmVudHJpZXM7ICEgb2VuZCAobyk7IGVudHJ5KyspCisrICAgICAgIHsKKysgICAgICAgICBlbnRyeS0+b3B0ID0gbzsKKysgICAgICAgICBlbnRyeS0+bnVtID0gMDsKKysgICAgICAgICBlbnRyeS0+c2hvcnRfb3B0aW9ucyA9IHNvOworKyAgICAgICAgIGVudHJ5LT5ncm91cCA9IGN1cl9ncm91cCA9CisrICAgICAgICAgICBvLT5ncm91cAorKyAgICAgICAgICAgPyBvLT5ncm91cAorKyAgICAgICAgICAgOiAoKCFvLT5uYW1lICYmICFvLT5rZXkpCisrICAgICAgICAgICAgICA/IGN1cl9ncm91cCArIDEKKysgICAgICAgICAgICAgIDogY3VyX2dyb3VwKTsKKysgICAgICAgICBlbnRyeS0+Y2x1c3RlciA9IGNsdXN0ZXI7CisrICAgICAgICAgZW50cnktPmFyZ3AgPSBhcmdwOworKworKyAgICAgICAgIGRvCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIGVudHJ5LT5udW0rKzsKKysgICAgICAgICAgICAgaWYgKG9zaG9ydCAobykgJiYgISBmaW5kX2NoYXIgKG8tPmtleSwgaG9sLT5zaG9ydF9vcHRpb25zLCBzbykpCisrICAgICAgICAgICAgICAgLyogTyBoYXMgYSB2YWxpZCBzaG9ydCBvcHRpb24gd2hpY2ggaGFzbid0IGFscmVhZHkgYmVlbiB1c2VkLiovCisrICAgICAgICAgICAgICAgKnNvKysgPSBvLT5rZXk7CisrICAgICAgICAgICAgIG8rKzsKKysgICAgICAgICAgIH0KKysgICAgICAgICB3aGlsZSAoISBvZW5kIChvKSAmJiBvYWxpYXMgKG8pKTsKKysgICAgICAgfQorKyAgICAgICpzbyA9ICdcMCc7ICAgICAgICAgICAgICAvKiBudWxsIHRlcm1pbmF0ZWQgc28gd2UgY2FuIGZpbmQgdGhlIGxlbmd0aCAqLworKyAgICB9CisrCisrICByZXR1cm4gaG9sOworK30KKysKKysvKiBBZGQgYSBuZXcgY2x1c3RlciB0byBIT0wsIHdpdGggdGhlIGdpdmVuIEdST1VQIGFuZCBIRUFERVIgKHRha2VuIGZyb20gdGhlCisrICAgYXNzb2NpYXRlZCBhcmdwIGNoaWxkIGxpc3QgZW50cnkpLCBJTkRFWCwgYW5kIFBBUkVOVCwgYW5kIHJldHVybiBhIHBvaW50ZXIKKysgICB0byBpdC4gIEFSR1AgaXMgdGhlIGFyZ3AgdGhhdCB0aGlzIGNsdXN0ZXIgcmVzdWx0cyBmcm9tLiAgKi8KKytzdGF0aWMgc3RydWN0IGhvbF9jbHVzdGVyICoKKytob2xfYWRkX2NsdXN0ZXIgKHN0cnVjdCBob2wgKmhvbCwgaW50IGdyb3VwLCBjb25zdCBjaGFyICpoZWFkZXIsIGludCBpbmRleCwKKysgICAgICAgICAgICAgICAgc3RydWN0IGhvbF9jbHVzdGVyICpwYXJlbnQsIGNvbnN0IHN0cnVjdCBhcmdwICphcmdwKQorK3sKKysgIHN0cnVjdCBob2xfY2x1c3RlciAqY2wgPSBtYWxsb2MgKHNpemVvZiAoc3RydWN0IGhvbF9jbHVzdGVyKSk7CisrICBpZiAoY2wpCisrICAgIHsKKysgICAgICBjbC0+Z3JvdXAgPSBncm91cDsKKysgICAgICBjbC0+aGVhZGVyID0gaGVhZGVyOworKworKyAgICAgIGNsLT5pbmRleCA9IGluZGV4OworKyAgICAgIGNsLT5wYXJlbnQgPSBwYXJlbnQ7CisrICAgICAgY2wtPmFyZ3AgPSBhcmdwOworKyAgICAgIGNsLT5kZXB0aCA9IHBhcmVudCA/IHBhcmVudC0+ZGVwdGggKyAxIDogMDsKKysKKysgICAgICBjbC0+bmV4dCA9IGhvbC0+Y2x1c3RlcnM7CisrICAgICAgaG9sLT5jbHVzdGVycyA9IGNsOworKyAgICB9CisrICByZXR1cm4gY2w7CisrfQorKworKy8qIEZyZWUgSE9MIGFuZCBhbnkgcmVzb3VyY2VzIGl0IHVzZXMuICAqLworK3N0YXRpYyB2b2lkCisraG9sX2ZyZWUgKHN0cnVjdCBob2wgKmhvbCkKKyt7CisrICBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKmNsID0gaG9sLT5jbHVzdGVyczsKKysKKysgIHdoaWxlIChjbCkKKysgICAgeworKyAgICAgIHN0cnVjdCBob2xfY2x1c3RlciAqbmV4dCA9IGNsLT5uZXh0OworKyAgICAgIGZyZWUgKGNsKTsKKysgICAgICBjbCA9IG5leHQ7CisrICAgIH0KKysKKysgIGlmIChob2wtPm51bV9lbnRyaWVzID4gMCkKKysgICAgeworKyAgICAgIGZyZWUgKGhvbC0+ZW50cmllcyk7CisrICAgICAgZnJlZSAoaG9sLT5zaG9ydF9vcHRpb25zKTsKKysgICAgfQorKworKyAgZnJlZSAoaG9sKTsKKyt9CisrCisrc3RhdGljIGludAorK2hvbF9lbnRyeV9zaG9ydF9pdGVyYXRlIChjb25zdCBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeSwKKysgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmdW5jKShjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKnJlYWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZG9tYWluLCB2b2lkICpjb29raWUpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwgdm9pZCAqY29va2llKQorK3sKKysgIHVuc2lnbmVkIG5vcHRzOworKyAgaW50IHZhbCA9IDA7CisrICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdCwgKnJlYWwgPSBlbnRyeS0+b3B0OworKyAgY2hhciAqc28gPSBlbnRyeS0+c2hvcnRfb3B0aW9uczsKKysKKysgIGZvciAob3B0ID0gcmVhbCwgbm9wdHMgPSBlbnRyeS0+bnVtOyBub3B0cyA+IDAgJiYgIXZhbDsgb3B0KyssIG5vcHRzLS0pCisrICAgIGlmIChvc2hvcnQgKG9wdCkgJiYgKnNvID09IG9wdC0+a2V5KQorKyAgICAgIHsKKysgICAgICAgaWYgKCFvYWxpYXMgKG9wdCkpCisrICAgICAgICAgcmVhbCA9IG9wdDsKKysgICAgICAgaWYgKG92aXNpYmxlIChvcHQpKQorKyAgICAgICAgIHZhbCA9ICgqZnVuYykob3B0LCByZWFsLCBkb21haW4sIGNvb2tpZSk7CisrICAgICAgIHNvKys7CisrICAgICAgfQorKworKyAgcmV0dXJuIHZhbDsKKyt9CisrCisrc3RhdGljIF9faW5saW5lX18gaW50CisrX19hdHRyaWJ1dGVfXyAoKGFsd2F5c19pbmxpbmUpKQorK2hvbF9lbnRyeV9sb25nX2l0ZXJhdGUgKGNvbnN0IHN0cnVjdCBob2xfZW50cnkgKmVudHJ5LAorKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnVuYykoY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKnJlYWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkb21haW4sIHZvaWQgKmNvb2tpZSksCisrICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkb21haW4sIHZvaWQgKmNvb2tpZSkKKyt7CisrICB1bnNpZ25lZCBub3B0czsKKysgIGludCB2YWwgPSAwOworKyAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQsICpyZWFsID0gZW50cnktPm9wdDsKKysKKysgIGZvciAob3B0ID0gcmVhbCwgbm9wdHMgPSBlbnRyeS0+bnVtOyBub3B0cyA+IDAgJiYgIXZhbDsgb3B0KyssIG5vcHRzLS0pCisrICAgIGlmIChvcHQtPm5hbWUpCisrICAgICAgeworKyAgICAgICBpZiAoIW9hbGlhcyAob3B0KSkKKysgICAgICAgICByZWFsID0gb3B0OworKyAgICAgICBpZiAob3Zpc2libGUgKG9wdCkpCisrICAgICAgICAgdmFsID0gKCpmdW5jKShvcHQsIHJlYWwsIGRvbWFpbiwgY29va2llKTsKKysgICAgICB9CisrCisrICByZXR1cm4gdmFsOworK30KKysKKysvKiBJdGVyYXRvciB0aGF0IHJldHVybnMgdHJ1ZSBmb3IgdGhlIGZpcnN0IHNob3J0IG9wdGlvbi4gICovCisrc3RhdGljIF9faW5saW5lX18gaW50CisrdW50aWxfc2hvcnQgKGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0LCBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKnJlYWwsCisrICAgICAgICAgICAgY29uc3QgY2hhciAqZG9tYWluLCB2b2lkICpjb29raWUpCisreworKyAgcmV0dXJuIG9zaG9ydCAob3B0KSA/IG9wdC0+a2V5IDogMDsKKyt9CisrCisrLyogUmV0dXJucyB0aGUgZmlyc3QgdmFsaWQgc2hvcnQgb3B0aW9uIGluIEVOVFJZLCBvciAwIGlmIHRoZXJlIGlzIG5vbmUuICAqLworK3N0YXRpYyBjaGFyCisraG9sX2VudHJ5X2ZpcnN0X3Nob3J0IChjb25zdCBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeSkKKyt7CisrICByZXR1cm4gaG9sX2VudHJ5X3Nob3J0X2l0ZXJhdGUgKGVudHJ5LCB1bnRpbF9zaG9ydCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YXJncC0+YXJncF9kb21haW4sIDApOworK30KKysKKysvKiBSZXR1cm5zIHRoZSBmaXJzdCB2YWxpZCBsb25nIG9wdGlvbiBpbiBFTlRSWSwgb3IgMCBpZiB0aGVyZSBpcyBub25lLiAgKi8KKytzdGF0aWMgY29uc3QgY2hhciAqCisraG9sX2VudHJ5X2ZpcnN0X2xvbmcgKGNvbnN0IHN0cnVjdCBob2xfZW50cnkgKmVudHJ5KQorK3sKKysgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0OworKyAgdW5zaWduZWQgbnVtOworKyAgZm9yIChvcHQgPSBlbnRyeS0+b3B0LCBudW0gPSBlbnRyeS0+bnVtOyBudW0gPiAwOyBvcHQrKywgbnVtLS0pCisrICAgIGlmIChvcHQtPm5hbWUgJiYgb3Zpc2libGUgKG9wdCkpCisrICAgICAgcmV0dXJuIG9wdC0+bmFtZTsKKysgIHJldHVybiAwOworK30KKysKKysvKiBSZXR1cm5zIHRoZSBlbnRyeSBpbiBIT0wgd2l0aCB0aGUgbG9uZyBvcHRpb24gbmFtZSBOQU1FLCBvciAwIGlmIHRoZXJlIGlzCisrICAgbm9uZS4gICovCisrc3RhdGljIHN0cnVjdCBob2xfZW50cnkgKgorK2hvbF9maW5kX2VudHJ5IChzdHJ1Y3QgaG9sICpob2wsIGNvbnN0IGNoYXIgKm5hbWUpCisreworKyAgc3RydWN0IGhvbF9lbnRyeSAqZW50cnkgPSBob2wtPmVudHJpZXM7CisrICB1bnNpZ25lZCBudW1fZW50cmllcyA9IGhvbC0+bnVtX2VudHJpZXM7CisrCisrICB3aGlsZSAobnVtX2VudHJpZXMtLSA+IDApCisrICAgIHsKKysgICAgICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdCA9IGVudHJ5LT5vcHQ7CisrICAgICAgdW5zaWduZWQgbnVtX29wdHMgPSBlbnRyeS0+bnVtOworKworKyAgICAgIHdoaWxlIChudW1fb3B0cy0tID4gMCkKKysgICAgICAgaWYgKG9wdC0+bmFtZSAmJiBvdmlzaWJsZSAob3B0KSAmJiBzdHJjbXAgKG9wdC0+bmFtZSwgbmFtZSkgPT0gMCkKKysgICAgICAgICByZXR1cm4gZW50cnk7CisrICAgICAgIGVsc2UKKysgICAgICAgICBvcHQrKzsKKysKKysgICAgICBlbnRyeSsrOworKyAgICB9CisrCisrICByZXR1cm4gMDsKKyt9CisrCisrLyogSWYgYW4gZW50cnkgd2l0aCB0aGUgbG9uZyBvcHRpb24gTkFNRSBvY2N1cnMgaW4gSE9MLCBzZXQgaXQncyBzcGVjaWFsCisrICAgc29ydCBwb3NpdGlvbiB0byBHUk9VUC4gICovCisrc3RhdGljIHZvaWQKKytob2xfc2V0X2dyb3VwIChzdHJ1Y3QgaG9sICpob2wsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBncm91cCkKKyt7CisrICBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeSA9IGhvbF9maW5kX2VudHJ5IChob2wsIG5hbWUpOworKyAgaWYgKGVudHJ5KQorKyAgICBlbnRyeS0+Z3JvdXAgPSBncm91cDsKKyt9CisrCisrLyogT3JkZXIgYnkgZ3JvdXA6ICAwLCAxLCAyLCAuLi4sIG4sIC1tLCAuLi4sIC0yLCAtMS4KKysgICBFUSBpcyB3aGF0IHRvIHJldHVybiBpZiBHUk9VUDEgYW5kIEdST1VQMiBhcmUgdGhlIHNhbWUuICAqLworK3N0YXRpYyBpbnQKKytncm91cF9jbXAgKGludCBncm91cDEsIGludCBncm91cDIsIGludCBlcSkKKyt7CisrICBpZiAoZ3JvdXAxID09IGdyb3VwMikKKysgICAgcmV0dXJuIGVxOworKyAgZWxzZSBpZiAoKGdyb3VwMSA8IDAgJiYgZ3JvdXAyIDwgMCkgfHwgKGdyb3VwMSA+PSAwICYmIGdyb3VwMiA+PSAwKSkKKysgICAgcmV0dXJuIGdyb3VwMSAtIGdyb3VwMjsKKysgIGVsc2UKKysgICAgcmV0dXJuIGdyb3VwMiAtIGdyb3VwMTsKKyt9CisrCisrLyogQ29tcGFyZSBjbHVzdGVycyBDTDEgJiBDTDIgYnkgdGhlIG9yZGVyIHRoYXQgdGhleSBzaG91bGQgYXBwZWFyIGluCisrICAgb3V0cHV0LiAgKi8KKytzdGF0aWMgaW50CisraG9sX2NsdXN0ZXJfY21wIChjb25zdCBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKmNsMSwgY29uc3Qgc3RydWN0IGhvbF9jbHVzdGVyICpjbDIpCisreworKyAgLyogSWYgb25lIGNsdXN0ZXIgaXMgZGVlcGVyIHRoYW4gdGhlIG90aGVyLCB1c2UgaXRzIGFuY2VzdG9yIGF0IHRoZSBzYW1lCisrICAgICBsZXZlbCwgc28gdGhhdCBmaW5kaW5nIHRoZSBjb21tb24gYW5jZXN0b3IgaXMgc3RyYWlnaHRmb3J3YXJkLiAgKi8KKysgIHdoaWxlIChjbDEtPmRlcHRoID4gY2wyLT5kZXB0aCkKKysgICAgY2wxID0gY2wxLT5wYXJlbnQ7CisrICB3aGlsZSAoY2wyLT5kZXB0aCA+IGNsMS0+ZGVwdGgpCisrICAgIGNsMiA9IGNsMi0+cGFyZW50OworKworKyAgLyogTm93IHJlZHVjZSBib3RoIGNsdXN0ZXJzIHRvIHRoZWlyIGFuY2VzdG9ycyBhdCB0aGUgcG9pbnQgd2hlcmUgYm90aCBoYXZlCisrICAgICBhIGNvbW1vbiBwYXJlbnQ7IHRoZXNlIGNhbiBiZSBkaXJlY3RseSBjb21wYXJlZC4gICovCisrICB3aGlsZSAoY2wxLT5wYXJlbnQgIT0gY2wyLT5wYXJlbnQpCisrICAgIGNsMSA9IGNsMS0+cGFyZW50LCBjbDIgPSBjbDItPnBhcmVudDsKKysKKysgIHJldHVybiBncm91cF9jbXAgKGNsMS0+Z3JvdXAsIGNsMi0+Z3JvdXAsIGNsMi0+aW5kZXggLSBjbDEtPmluZGV4KTsKKyt9CisrCisrLyogUmV0dXJuIHRoZSBhbmNlc3RvciBvZiBDTCB0aGF0J3MganVzdCBiZWxvdyB0aGUgcm9vdCAoaS5lLiwgaGFzIGEgcGFyZW50CisrICAgb2YgMCkuICAqLworK3N0YXRpYyBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKgorK2hvbF9jbHVzdGVyX2Jhc2UgKHN0cnVjdCBob2xfY2x1c3RlciAqY2wpCisreworKyAgd2hpbGUgKGNsLT5wYXJlbnQpCisrICAgIGNsID0gY2wtPnBhcmVudDsKKysgIHJldHVybiBjbDsKKyt9CisrCisrLyogUmV0dXJuIHRydWUgaWYgQ0wxIGlzIGEgY2hpbGQgb2YgQ0wyLiAgKi8KKytzdGF0aWMgaW50CisraG9sX2NsdXN0ZXJfaXNfY2hpbGQgKGNvbnN0IHN0cnVjdCBob2xfY2x1c3RlciAqY2wxLAorKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBob2xfY2x1c3RlciAqY2wyKQorK3sKKysgIHdoaWxlIChjbDEgJiYgY2wxICE9IGNsMikKKysgICAgY2wxID0gY2wxLT5wYXJlbnQ7CisrICByZXR1cm4gY2wxID09IGNsMjsKKyt9CisrCisrLyogR2l2ZW4gdGhlIG5hbWUgb2YgYSBPUFRJT05fRE9DIG9wdGlvbiwgbW9kaWZpZXMgTkFNRSB0byBzdGFydCBhdCB0aGUgdGFpbAorKyAgIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIGNvbXBhcmlzb25zLCBhbmQgcmV0dXJucyB0cnVlIGlmZiBpdCBzaG91bGQgYmUKKysgICB0cmVhdGVkIGFzIGEgbm9uLW9wdGlvbi4gICovCisrc3RhdGljIGludAorK2Nhbm9uX2RvY19vcHRpb24gKGNvbnN0IGNoYXIgKipuYW1lKQorK3sKKysgIGludCBub25fb3B0OworKyAgLyogU2tpcCBpbml0aWFsIHdoaXRlc3BhY2UuICAqLworKyAgd2hpbGUgKGlzc3BhY2UgKCoqbmFtZSkpCisrICAgICgqbmFtZSkrKzsKKysgIC8qIERlY2lkZSB3aGV0aGVyIHRoaXMgbG9va3MgbGlrZSBhbiBvcHRpb24gKGxlYWRpbmcgYC0nKSBvciBub3QuICAqLworKyAgbm9uX29wdCA9ICgqKm5hbWUgIT0gJy0nKTsKKysgIC8qIFNraXAgdW50aWwgcGFydCBvZiBuYW1lIHVzZWQgZm9yIHNvcnRpbmcuICAqLworKyAgd2hpbGUgKCoqbmFtZSAmJiAhaXNhbG51bSAoKipuYW1lKSkKKysgICAgKCpuYW1lKSsrOworKyAgcmV0dXJuIG5vbl9vcHQ7CisrfQorKworKy8qIE9yZGVyIEVOVFJZMSAmIEVOVFJZMiBieSB0aGUgb3JkZXIgd2hpY2ggdGhleSBzaG91bGQgYXBwZWFyIGluIGEgaGVscAorKyAgIGxpc3RpbmcuICAqLworK3N0YXRpYyBpbnQKKytob2xfZW50cnlfY21wIChjb25zdCBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeTEsCisrICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeTIpCisreworKyAgLyogVGhlIGdyb3VwIG51bWJlcnMgYnkgd2hpY2ggdGhlIGVudHJpZXMgc2hvdWxkIGJlIG9yZGVyZWQ7IGlmIGVpdGhlciBpcworKyAgICAgaW4gYSBjbHVzdGVyLCB0aGVuIHRoaXMgaXMganVzdCB0aGUgZ3JvdXAgd2l0aGluIHRoZSBjbHVzdGVyLiAgKi8KKysgIGludCBncm91cDEgPSBlbnRyeTEtPmdyb3VwLCBncm91cDIgPSBlbnRyeTItPmdyb3VwOworKworKyAgaWYgKGVudHJ5MS0+Y2x1c3RlciAhPSBlbnRyeTItPmNsdXN0ZXIpCisrICAgIHsKKysgICAgICAvKiBUaGUgZW50cmllcyBhcmUgbm90IHdpdGhpbiB0aGUgc2FtZSBjbHVzdGVyLCBzbyB3ZSBjYW4ndCBjb21wYXJlIHRoZW0KKysgICAgICAgIGRpcmVjdGx5LCB3ZSBoYXZlIHRvIHVzZSB0aGUgYXBwcm9waWF0ZSBjbHVzdGVyaW5nIGxldmVsIHRvby4gICovCisrICAgICAgaWYgKCEgZW50cnkxLT5jbHVzdGVyKQorKyAgICAgICAvKiBFTlRSWTEgaXMgYXQgdGhlIGBiYXNlIGxldmVsJywgbm90IGluIGEgY2x1c3Rlciwgc28gd2UgaGF2ZSB0bworKyAgICAgICAgICBjb21wYXJlIGl0J3MgZ3JvdXAgbnVtYmVyIHdpdGggdGhhdCBvZiB0aGUgYmFzZSBjbHVzdGVyIGluIHdoaWNoCisrICAgICAgICAgIEVOVFJZMiByZXNpZGVzLiAgTm90ZSB0aGF0IGlmIHRoZXkncmUgaW4gdGhlIHNhbWUgZ3JvdXAsIHRoZQorKyAgICAgICAgICBjbHVzdGVyZWQgb3B0aW9uIGFsd2F5cyBjb21lcyBsYXN0ZXIuICAqLworKyAgICAgICByZXR1cm4gZ3JvdXBfY21wIChncm91cDEsIGhvbF9jbHVzdGVyX2Jhc2UgKGVudHJ5Mi0+Y2x1c3RlciktPmdyb3VwLCAtMSk7CisrICAgICAgZWxzZSBpZiAoISBlbnRyeTItPmNsdXN0ZXIpCisrICAgICAgIC8qIExpa2V3aXNlLCBidXQgRU5UUlkyJ3Mgbm90IGluIGEgY2x1c3Rlci4gICovCisrICAgICAgIHJldHVybiBncm91cF9jbXAgKGhvbF9jbHVzdGVyX2Jhc2UgKGVudHJ5MS0+Y2x1c3RlciktPmdyb3VwLCBncm91cDIsIDEpOworKyAgICAgIGVsc2UKKysgICAgICAgLyogQm90aCBlbnRyaWVzIGFyZSBpbiBjbHVzdGVycywgd2UgY2FuIGp1c3QgY29tcGFyZSB0aGUgY2x1c3RlcnMuICAqLworKyAgICAgICByZXR1cm4gaG9sX2NsdXN0ZXJfY21wIChlbnRyeTEtPmNsdXN0ZXIsIGVudHJ5Mi0+Y2x1c3Rlcik7CisrICAgIH0KKysgIGVsc2UgaWYgKGdyb3VwMSA9PSBncm91cDIpCisrICAgIC8qIFRoZSBlbnRyaWVzIGFyZSBib3RoIGluIHRoZSBzYW1lIGNsdXN0ZXIgYW5kIGdyb3VwLCBzbyBjb21wYXJlIHRoZW0KKysgICAgICAgYWxwaGFiZXRpY2FsbHkuICAqLworKyAgICB7CisrICAgICAgaW50IHNob3J0MSA9IGhvbF9lbnRyeV9maXJzdF9zaG9ydCAoZW50cnkxKTsKKysgICAgICBpbnQgc2hvcnQyID0gaG9sX2VudHJ5X2ZpcnN0X3Nob3J0IChlbnRyeTIpOworKyAgICAgIGludCBkb2MxID0gb2RvYyAoZW50cnkxLT5vcHQpOworKyAgICAgIGludCBkb2MyID0gb2RvYyAoZW50cnkyLT5vcHQpOworKyAgICAgIGNvbnN0IGNoYXIgKmxvbmcxID0gaG9sX2VudHJ5X2ZpcnN0X2xvbmcgKGVudHJ5MSk7CisrICAgICAgY29uc3QgY2hhciAqbG9uZzIgPSBob2xfZW50cnlfZmlyc3RfbG9uZyAoZW50cnkyKTsKKysKKysgICAgICBpZiAoZG9jMSkKKysgICAgICAgZG9jMSA9IGxvbmcxICE9IE5VTEwgJiYgY2Fub25fZG9jX29wdGlvbiAoJmxvbmcxKTsKKysgICAgICBpZiAoZG9jMikKKysgICAgICAgZG9jMiA9IGxvbmcyICE9IE5VTEwgJiYgY2Fub25fZG9jX29wdGlvbiAoJmxvbmcyKTsKKysKKysgICAgICBpZiAoZG9jMSAhPSBkb2MyKQorKyAgICAgICAvKiBgZG9jdW1lbnRhdGlvbicgb3B0aW9ucyBhbHdheXMgZm9sbG93IG5vcm1hbCBvcHRpb25zIChvcgorKyAgICAgICAgICBkb2N1bWVudGF0aW9uIG9wdGlvbnMgdGhhdCAqbG9vayogbGlrZSBub3JtYWwgb3B0aW9ucykuICAqLworKyAgICAgICByZXR1cm4gZG9jMSAtIGRvYzI7CisrICAgICAgZWxzZSBpZiAoIXNob3J0MSAmJiAhc2hvcnQyICYmIGxvbmcxICYmIGxvbmcyKQorKyAgICAgICAvKiBPbmx5IGxvbmcgb3B0aW9ucy4gICovCisrICAgICAgIHJldHVybiBzdHJjYXNlY21wIChsb25nMSwgbG9uZzIpOworKyAgICAgIGVsc2UKKysgICAgICAgLyogQ29tcGFyZSBzaG9ydC9zaG9ydCwgbG9uZy9zaG9ydCwgc2hvcnQvbG9uZywgdXNpbmcgdGhlIGZpcnN0CisrICAgICAgICAgIGNoYXJhY3RlciBvZiBsb25nIG9wdGlvbnMuICBFbnRyaWVzIHdpdGhvdXQgKmFueSogdmFsaWQKKysgICAgICAgICAgb3B0aW9ucyAoc3VjaCBhcyBvcHRpb25zIHdpdGggT1BUSU9OX0hJRERFTiBzZXQpIHdpbGwgYmUgcHV0CisrICAgICAgICAgIGZpcnN0LCBidXQgYXMgdGhleSdyZSBub3QgZGlzcGxheWVkLCBpdCBkb2Vzbid0IG1hdHRlciB3aGVyZQorKyAgICAgICAgICB0aGV5IGFyZS4gICovCisrICAgICAgIHsKKysgICAgICAgICBjaGFyIGZpcnN0MSA9IHNob3J0MSA/IHNob3J0MSA6IGxvbmcxID8gKmxvbmcxIDogMDsKKysgICAgICAgICBjaGFyIGZpcnN0MiA9IHNob3J0MiA/IHNob3J0MiA6IGxvbmcyID8gKmxvbmcyIDogMDsKKysjaWZkZWYgX3RvbG93ZXIKKysgICAgICAgICBpbnQgbG93ZXJfY21wID0gX3RvbG93ZXIgKGZpcnN0MSkgLSBfdG9sb3dlciAoZmlyc3QyKTsKKysjZWxzZQorKyAgICAgICAgIGludCBsb3dlcl9jbXAgPSB0b2xvd2VyIChmaXJzdDEpIC0gdG9sb3dlciAoZmlyc3QyKTsKKysjZW5kaWYKKysgICAgICAgICAvKiBDb21wYXJlIGlnbm9yaW5nIGNhc2UsIGV4Y2VwdCB3aGVuIHRoZSBvcHRpb25zIGFyZSBib3RoIHRoZQorKyAgICAgICAgICAgIHNhbWUgbGV0dGVyLCBpbiB3aGljaCBjYXNlIGxvd2VyLWNhc2UgYWx3YXlzIGNvbWVzIGZpcnN0LiAgKi8KKysgICAgICAgICByZXR1cm4gbG93ZXJfY21wID8gbG93ZXJfY21wIDogZmlyc3QyIC0gZmlyc3QxOworKyAgICAgICB9CisrICAgIH0KKysgIGVsc2UKKysgICAgLyogV2l0aGluIHRoZSBzYW1lIGNsdXN0ZXIsIGJ1dCBub3QgdGhlIHNhbWUgZ3JvdXAsIHNvIGp1c3QgY29tcGFyZQorKyAgICAgICBncm91cHMuICAqLworKyAgICByZXR1cm4gZ3JvdXBfY21wIChncm91cDEsIGdyb3VwMiwgMCk7CisrfQorKworKy8qIFZlcnNpb24gb2YgaG9sX2VudHJ5X2NtcCB3aXRoIGNvcnJlY3Qgc2lnbmF0dXJlIGZvciBxc29ydC4gICovCisrc3RhdGljIGludAorK2hvbF9lbnRyeV9xY21wIChjb25zdCB2b2lkICplbnRyeTFfdiwgY29uc3Qgdm9pZCAqZW50cnkyX3YpCisreworKyAgcmV0dXJuIGhvbF9lbnRyeV9jbXAgKGVudHJ5MV92LCBlbnRyeTJfdik7CisrfQorKworKy8qIFNvcnQgSE9MIGJ5IGdyb3VwIGFuZCBhbHBoYWJldGljYWxseSBieSBvcHRpb24gbmFtZSAod2l0aCBzaG9ydCBvcHRpb25zCisrICAgdGFraW5nIHByZWNlZGVuY2Ugb3ZlciBsb25nKS4gIFNpbmNlIHRoZSBzb3J0aW5nIGlzIGZvciBkaXNwbGF5IHB1cnBvc2VzCisrICAgb25seSwgdGhlIHNoYWRvd2luZyBvZiBvcHRpb25zIGlzbid0IGVmZmVjdGVkLiAgKi8KKytzdGF0aWMgdm9pZAorK2hvbF9zb3J0IChzdHJ1Y3QgaG9sICpob2wpCisreworKyAgaWYgKGhvbC0+bnVtX2VudHJpZXMgPiAwKQorKyAgICBxc29ydCAoaG9sLT5lbnRyaWVzLCBob2wtPm51bV9lbnRyaWVzLCBzaXplb2YgKHN0cnVjdCBob2xfZW50cnkpLAorKyAgICAgICAgICBob2xfZW50cnlfcWNtcCk7CisrfQorKworKy8qIEFwcGVuZCBNT1JFIHRvIEhPTCwgZGVzdHJveWluZyBNT1JFIGluIHRoZSBwcm9jZXNzLiAgT3B0aW9ucyBpbiBIT0wgc2hhZG93CisrICAgYW55IGluIE1PUkUgd2l0aCB0aGUgc2FtZSBuYW1lLiAgKi8KKytzdGF0aWMgdm9pZAorK2hvbF9hcHBlbmQgKHN0cnVjdCBob2wgKmhvbCwgc3RydWN0IGhvbCAqbW9yZSkKKyt7CisrICBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKipjbF9lbmQgPSAmaG9sLT5jbHVzdGVyczsKKysKKysgIC8qIFN0ZWFsIE1PUkUncyBjbHVzdGVyIGxpc3QsIGFuZCBhZGQgaXQgdG8gdGhlIGVuZCBvZiBIT0wncy4gICovCisrICB3aGlsZSAoKmNsX2VuZCkKKysgICAgY2xfZW5kID0gJigqY2xfZW5kKS0+bmV4dDsKKysgICpjbF9lbmQgPSBtb3JlLT5jbHVzdGVyczsKKysgIG1vcmUtPmNsdXN0ZXJzID0gMDsKKysKKysgIC8qIE1lcmdlIGVudHJpZXMuICAqLworKyAgaWYgKG1vcmUtPm51bV9lbnRyaWVzID4gMCkKKysgICAgeworKyAgICAgIGlmIChob2wtPm51bV9lbnRyaWVzID09IDApCisrICAgICAgIHsKKysgICAgICAgICBob2wtPm51bV9lbnRyaWVzID0gbW9yZS0+bnVtX2VudHJpZXM7CisrICAgICAgICAgaG9sLT5lbnRyaWVzID0gbW9yZS0+ZW50cmllczsKKysgICAgICAgICBob2wtPnNob3J0X29wdGlvbnMgPSBtb3JlLT5zaG9ydF9vcHRpb25zOworKyAgICAgICAgIG1vcmUtPm51bV9lbnRyaWVzID0gMDsgICAgICAgIC8qIE1hcmsgTU9SRSdzIGZpZWxkcyBhcyBpbnZhbGlkLiAgKi8KKysgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgLyogQXBwZW5kIHRoZSBlbnRyaWVzIGluIE1PUkUgdG8gdGhvc2UgaW4gSE9MLCB0YWtpbmcgY2FyZSB0byBvbmx5IGFkZAorKyAgICAgICAgICBub24tc2hhZG93ZWQgU0hPUlRfT1BUSU9OUyB2YWx1ZXMuICAqLworKyAgICAgICB7CisrICAgICAgICAgdW5zaWduZWQgbGVmdDsKKysgICAgICAgICBjaGFyICpzbywgKm1vcmVfc287CisrICAgICAgICAgc3RydWN0IGhvbF9lbnRyeSAqZTsKKysgICAgICAgICB1bnNpZ25lZCBudW1fZW50cmllcyA9IGhvbC0+bnVtX2VudHJpZXMgKyBtb3JlLT5udW1fZW50cmllczsKKysgICAgICAgICBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyaWVzID0KKysgICAgICAgICAgIG1hbGxvYyAobnVtX2VudHJpZXMgKiBzaXplb2YgKHN0cnVjdCBob2xfZW50cnkpKTsKKysgICAgICAgICB1bnNpZ25lZCBob2xfc29fbGVuID0gc3RybGVuIChob2wtPnNob3J0X29wdGlvbnMpOworKyAgICAgICAgIGNoYXIgKnNob3J0X29wdGlvbnMgPQorKyAgICAgICAgICAgbWFsbG9jIChob2xfc29fbGVuICsgc3RybGVuIChtb3JlLT5zaG9ydF9vcHRpb25zKSArIDEpOworKworKyAgICAgICAgIGFzc2VydCAoZW50cmllcyAmJiBzaG9ydF9vcHRpb25zKTsKKysjaWYgU0laRV9NQVggPD0gVUlOVF9NQVgKKysgICAgICAgICBhc3NlcnQgKG51bV9lbnRyaWVzIDw9IFNJWkVfTUFYIC8gc2l6ZW9mIChzdHJ1Y3QgaG9sX2VudHJ5KSk7CisrI2VuZGlmCisrCisrICAgICAgICAgbWVtcGNweSAobWVtcGNweSAoZW50cmllcywgaG9sLT5lbnRyaWVzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2wtPm51bV9lbnRyaWVzICogc2l6ZW9mIChzdHJ1Y3QgaG9sX2VudHJ5KSksCisrICAgICAgICAgICAgICAgICAgICBtb3JlLT5lbnRyaWVzLAorKyAgICAgICAgICAgICAgICAgICAgbW9yZS0+bnVtX2VudHJpZXMgKiBzaXplb2YgKHN0cnVjdCBob2xfZW50cnkpKTsKKysKKysgICAgICAgICBtZW1wY3B5IChzaG9ydF9vcHRpb25zLCBob2wtPnNob3J0X29wdGlvbnMsIGhvbF9zb19sZW4pOworKworKyAgICAgICAgIC8qIEZpeCB1cCB0aGUgc2hvcnQgb3B0aW9ucyBwb2ludGVycyBmcm9tIEhPTC4gICovCisrICAgICAgICAgZm9yIChlID0gZW50cmllcywgbGVmdCA9IGhvbC0+bnVtX2VudHJpZXM7IGxlZnQgPiAwOyBlKyssIGxlZnQtLSkKKysgICAgICAgICAgIGUtPnNob3J0X29wdGlvbnMgKz0gKHNob3J0X29wdGlvbnMgLSBob2wtPnNob3J0X29wdGlvbnMpOworKworKyAgICAgICAgIC8qIE5vdyBhZGQgdGhlIHNob3J0IG9wdGlvbnMgZnJvbSBNT1JFLCBmaXhpbmcgdXAgaXRzIGVudHJpZXMKKysgICAgICAgICAgICB0b28uICAqLworKyAgICAgICAgIHNvID0gc2hvcnRfb3B0aW9ucyArIGhvbF9zb19sZW47CisrICAgICAgICAgbW9yZV9zbyA9IG1vcmUtPnNob3J0X29wdGlvbnM7CisrICAgICAgICAgZm9yIChsZWZ0ID0gbW9yZS0+bnVtX2VudHJpZXM7IGxlZnQgPiAwOyBlKyssIGxlZnQtLSkKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgaW50IG9wdHNfbGVmdDsKKysgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQ7CisrCisrICAgICAgICAgICAgIGUtPnNob3J0X29wdGlvbnMgPSBzbzsKKysKKysgICAgICAgICAgICAgZm9yIChvcHRzX2xlZnQgPSBlLT5udW0sIG9wdCA9IGUtPm9wdDsgb3B0c19sZWZ0OyBvcHQrKywgb3B0c19sZWZ0LS0pCisrICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgaW50IGNoID0gKm1vcmVfc287CisrICAgICAgICAgICAgICAgICBpZiAob3Nob3J0IChvcHQpICYmIGNoID09IG9wdC0+a2V5KQorKyAgICAgICAgICAgICAgICAgICAvKiBUaGUgbmV4dCBzaG9ydCBvcHRpb24gaW4gTU9SRV9TTywgQ0gsIGlzIGZyb20gT1BULiAgKi8KKysgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgIGlmICghIGZpbmRfY2hhciAoY2gsIHNob3J0X29wdGlvbnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydF9vcHRpb25zICsgaG9sX3NvX2xlbikpCisrICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgc2hvcnQgb3B0aW9uIENIIGlzbid0IHNoYWRvd2VkIGJ5IEhPTCdzIG9wdGlvbnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBzbyBhZGQgaXQgdG8gdGhlIHN1bS4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAqc28rKyA9IGNoOworKyAgICAgICAgICAgICAgICAgICAgIG1vcmVfc28rKzsKKysgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgIH0KKysKKysgICAgICAgICAqc28gPSAnXDAnOworKworKyAgICAgICAgIGZyZWUgKGhvbC0+ZW50cmllcyk7CisrICAgICAgICAgZnJlZSAoaG9sLT5zaG9ydF9vcHRpb25zKTsKKysKKysgICAgICAgICBob2wtPmVudHJpZXMgPSBlbnRyaWVzOworKyAgICAgICAgIGhvbC0+bnVtX2VudHJpZXMgPSBudW1fZW50cmllczsKKysgICAgICAgICBob2wtPnNob3J0X29wdGlvbnMgPSBzaG9ydF9vcHRpb25zOworKyAgICAgICB9CisrICAgIH0KKysKKysgIGhvbF9mcmVlIChtb3JlKTsKKyt9CisrCisrLyogSW5zZXJ0cyBlbm91Z2ggc3BhY2VzIHRvIG1ha2Ugc3VyZSBTVFJFQU0gaXMgYXQgY29sdW1uIENPTC4gICovCisrc3RhdGljIHZvaWQKKytpbmRlbnRfdG8gKGFyZ3BfZm10c3RyZWFtX3Qgc3RyZWFtLCB1bnNpZ25lZCBjb2wpCisreworKyAgaW50IG5lZWRlZCA9IGNvbCAtIF9fYXJncF9mbXRzdHJlYW1fcG9pbnQgKHN0cmVhbSk7CisrICB3aGlsZSAobmVlZGVkLS0gPiAwKQorKyAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgJyAnKTsKKyt9CisrCisrLyogT3V0cHV0IHRvIFNUUkVBTSBlaXRoZXIgYSBzcGFjZSwgb3IgYSBuZXdsaW5lIGlmIHRoZXJlIGlzbid0IHJvb20gZm9yIGF0CisrICAgbGVhc3QgRU5TVVJFIGNoYXJhY3RlcnMgYmVmb3JlIHRoZSByaWdodCBtYXJnaW4uICAqLworK3N0YXRpYyB2b2lkCisrc3BhY2UgKGFyZ3BfZm10c3RyZWFtX3Qgc3RyZWFtLCBzaXplX3QgZW5zdXJlKQorK3sKKysgIGlmIChfX2FyZ3BfZm10c3RyZWFtX3BvaW50IChzdHJlYW0pICsgZW5zdXJlCisrICAgICAgPj0gX19hcmdwX2ZtdHN0cmVhbV9ybWFyZ2luIChzdHJlYW0pKQorKyAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgJ1xuJyk7CisrICBlbHNlCisrICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAnICcpOworK30KKysKKysvKiBJZiB0aGUgb3B0aW9uIFJFQUwgaGFzIGFuIGFyZ3VtZW50LCB3ZSBwcmludCBpdCBpbiB1c2luZyB0aGUgcHJpbnRmCisrICAgZm9ybWF0IFJFUV9GTVQgb3IgT1BUX0ZNVCBkZXBlbmRpbmcgb24gd2hldGhlciBpdCdzIGEgcmVxdWlyZWQgb3IKKysgICBvcHRpb25hbCBhcmd1bWVudC4gICovCisrc3RhdGljIHZvaWQKKythcmcgKGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqcmVhbCwgY29uc3QgY2hhciAqcmVxX2ZtdCwgY29uc3QgY2hhciAqb3B0X2ZtdCwKKysgICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwgYXJncF9mbXRzdHJlYW1fdCBzdHJlYW0pCisreworKyAgaWYgKHJlYWwtPmFyZykKKysgICAgeworKyAgICAgIGlmIChyZWFsLT5mbGFncyAmIE9QVElPTl9BUkdfT1BUSU9OQUwpCisrICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChzdHJlYW0sIG9wdF9mbXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZ2V0dGV4dCAoZG9tYWluLCByZWFsLT5hcmcpKTsKKysgICAgICBlbHNlCisrICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChzdHJlYW0sIHJlcV9mbXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZ2V0dGV4dCAoZG9tYWluLCByZWFsLT5hcmcpKTsKKysgICAgfQorK30KKysKKysvKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBob2xfZW50cnlfaGVscC4gICovCisrCisrLyogU3RhdGUgdXNlZCBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiBob2xfaGVscC4gICovCisrc3RydWN0IGhvbF9oZWxwX3N0YXRlCisreworKyAgLyogUFJFVl9FTlRSWSBzaG91bGQgY29udGFpbiB0aGUgcHJldmlvdXMgZW50cnkgcHJpbnRlZCwgb3IgMC4gICovCisrICBzdHJ1Y3QgaG9sX2VudHJ5ICpwcmV2X2VudHJ5OworKworKyAgLyogSWYgYW4gZW50cnkgaXMgaW4gYSBkaWZmZXJlbnQgZ3JvdXAgZnJvbSB0aGUgcHJldmlvdXMgb25lLCBhbmQgU0VQX0dST1VQUworKyAgICAgaXMgdHJ1ZSwgdGhlbiBhIGJsYW5rIGxpbmUgd2lsbCBiZSBwcmludGVkIGJlZm9yZSBhbnkgb3V0cHV0LiAqLworKyAgaW50IHNlcF9ncm91cHM7CisrCisrICAvKiBUcnVlIGlmIGEgZHVwbGljYXRlIG9wdGlvbiBhcmd1bWVudCB3YXMgc3VwcHJlc3NlZCAob25seSBldmVyIHNldCBpZgorKyAgICAgVVBBUkFNUy5kdXBfYXJncyBpcyBmYWxzZSkuICAqLworKyAgaW50IHN1cHByZXNzZWRfZHVwX2FyZzsKKyt9OworKworKy8qIFNvbWUgc3RhdGUgdXNlZCB3aGlsZSBwcmludGluZyBhIGhlbHAgZW50cnkgKHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aAorKyAgIGhlbHBlciBmdW5jdGlvbnMpLiAgU2VlIHRoZSBkb2MgZm9yIGhvbF9lbnRyeV9oZWxwIGZvciBtb3JlIGluZm8sIGFzIG1vc3QKKysgICBvZiB0aGUgZmllbGRzIGFyZSBjb3BpZWQgZnJvbSBpdHMgYXJndW1lbnRzLiAgKi8KKytzdHJ1Y3QgcGVudHJ5X3N0YXRlCisreworKyAgY29uc3Qgc3RydWN0IGhvbF9lbnRyeSAqZW50cnk7CisrICBhcmdwX2ZtdHN0cmVhbV90IHN0cmVhbTsKKysgIHN0cnVjdCBob2xfaGVscF9zdGF0ZSAqaGhzdGF0ZTsKKysKKysgIC8qIFRydWUgaWYgbm90aGluZydzIGJlZW4gcHJpbnRlZCBzbyBmYXIuICAqLworKyAgaW50IGZpcnN0OworKworKyAgLyogSWYgbm9uLXplcm8sIHRoZSBzdGF0ZSB0aGF0IHdhcyB1c2VkIHRvIHByaW50IHRoaXMgaGVscC4gICovCisrICBjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGU7CisrfTsKKysKKysvKiBJZiBhIHVzZXIgZG9jIGZpbHRlciBzaG91bGQgYmUgYXBwbGllZCB0byBET0MsIGRvIHNvLiAgKi8KKytzdGF0aWMgY29uc3QgY2hhciAqCisrZmlsdGVyX2RvYyAoY29uc3QgY2hhciAqZG9jLCBpbnQga2V5LCBjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwKKysgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKKyt7CisrICBpZiAoYXJncCAmJiBhcmdwLT5oZWxwX2ZpbHRlcikKKysgICAgLyogV2UgbXVzdCBhcHBseSBhIHVzZXIgZmlsdGVyIHRvIHRoaXMgb3V0cHV0LiAgKi8KKysgICAgeworKyAgICAgIHZvaWQgKmlucHV0ID0gX19hcmdwX2lucHV0IChhcmdwLCBzdGF0ZSk7CisrICAgICAgcmV0dXJuICgqYXJncC0+aGVscF9maWx0ZXIpIChrZXksIGRvYywgaW5wdXQpOworKyAgICB9CisrICBlbHNlCisrICAgIC8qIE5vIGZpbHRlci4gICovCisrICAgIHJldHVybiBkb2M7CisrfQorKworKy8qIFByaW50cyBTVFIgYXMgYSBoZWFkZXIgbGluZSwgd2l0aCB0aGUgbWFyZ2luIGxpbmVzIHNldCBhcHByb3BpYXRlbHksIGFuZAorKyAgIG5vdGVzIHRoZSBmYWN0IHRoYXQgZ3JvdXBzIHNob3VsZCBiZSBzZXBhcmF0ZWQgd2l0aCBhIGJsYW5rIGxpbmUuICBBUkdQIGlzCisrICAgdGhlIGFyZ3AgdGhhdCBzaG91bGQgZGljdGF0ZSBhbnkgdXNlciBkb2MgZmlsdGVyaW5nIHRvIHRha2UgcGxhY2UuICBOb3RlCisrICAgdGhhdCB0aGUgcHJldmlvdXMgd3JhcCBtYXJnaW4gaXNuJ3QgcmVzdG9yZWQsIGJ1dCB0aGUgbGVmdCBtYXJnaW4gaXMgcmVzZXQKKysgICB0byAwLiAgKi8KKytzdGF0aWMgdm9pZAorK3ByaW50X2hlYWRlciAoY29uc3QgY2hhciAqc3RyLCBjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwKKysgICAgICAgICAgICAgc3RydWN0IHBlbnRyeV9zdGF0ZSAqcGVzdCkKKyt7CisrICBjb25zdCBjaGFyICp0c3RyID0gZGdldHRleHQgKGFyZ3AtPmFyZ3BfZG9tYWluLCBzdHIpOworKyAgY29uc3QgY2hhciAqZnN0ciA9IGZpbHRlcl9kb2MgKHRzdHIsIEFSR1BfS0VZX0hFTFBfSEVBREVSLCBhcmdwLCBwZXN0LT5zdGF0ZSk7CisrCisrICBpZiAoZnN0cikKKysgICAgeworKyAgICAgIGlmICgqZnN0cikKKysgICAgICAgeworKyAgICAgICAgIGlmIChwZXN0LT5oaHN0YXRlLT5wcmV2X2VudHJ5KQorKyAgICAgICAgICAgLyogUHJlY2VkZSB3aXRoIGEgYmxhbmsgbGluZS4gICovCisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHBlc3QtPnN0cmVhbSwgJ1xuJyk7CisrICAgICAgICAgaW5kZW50X3RvIChwZXN0LT5zdHJlYW0sIHVwYXJhbXMuaGVhZGVyX2NvbCk7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAocGVzdC0+c3RyZWFtLCB1cGFyYW1zLmhlYWRlcl9jb2wpOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKHBlc3QtPnN0cmVhbSwgdXBhcmFtcy5oZWFkZXJfY29sKTsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dHMgKHBlc3QtPnN0cmVhbSwgZnN0cik7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAocGVzdC0+c3RyZWFtLCAwKTsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHBlc3QtPnN0cmVhbSwgJ1xuJyk7CisrICAgICAgIH0KKysKKysgICAgICBwZXN0LT5oaHN0YXRlLT5zZXBfZ3JvdXBzID0gMTsgLyogU2VwYXJhdGUgc3Vic2VxdWVudCBncm91cHMuICovCisrICAgIH0KKysKKysgIGlmIChmc3RyICE9IHRzdHIpCisrICAgIGZyZWUgKChjaGFyICopIGZzdHIpOworK30KKysKKysvKiBJbnNlcnRzIGEgY29tbWEgaWYgdGhpcyBpc24ndCB0aGUgZmlyc3QgaXRlbSBvbiB0aGUgbGluZSwgYW5kIHRoZW4gbWFrZXMKKysgICBzdXJlIHdlJ3JlIGF0IGxlYXN0IHRvIGNvbHVtbiBDT0wuICBJZiB0aGlzICppcyogdGhlIGZpcnN0IGl0ZW0gb24gYSBsaW5lLAorKyAgIHByaW50cyBhbnkgcGVuZGluZyB3aGl0ZXNwYWNlL2hlYWRlcnMgdGhhdCBzaG91bGQgcHJlY2VkZSB0aGlzIGxpbmUuIEFsc28KKysgICBjbGVhcnMgRklSU1QuICAqLworK3N0YXRpYyB2b2lkCisrY29tbWEgKHVuc2lnbmVkIGNvbCwgc3RydWN0IHBlbnRyeV9zdGF0ZSAqcGVzdCkKKyt7CisrICBpZiAocGVzdC0+Zmlyc3QpCisrICAgIHsKKysgICAgICBjb25zdCBzdHJ1Y3QgaG9sX2VudHJ5ICpwZSA9IHBlc3QtPmhoc3RhdGUtPnByZXZfZW50cnk7CisrICAgICAgY29uc3Qgc3RydWN0IGhvbF9jbHVzdGVyICpjbCA9IHBlc3QtPmVudHJ5LT5jbHVzdGVyOworKworKyAgICAgIGlmIChwZXN0LT5oaHN0YXRlLT5zZXBfZ3JvdXBzICYmIHBlICYmIHBlc3QtPmVudHJ5LT5ncm91cCAhPSBwZS0+Z3JvdXApCisrICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAocGVzdC0+c3RyZWFtLCAnXG4nKTsKKysKKysgICAgICBpZiAoY2wgJiYgY2wtPmhlYWRlciAmJiAqY2wtPmhlYWRlcgorKyAgICAgICAgICYmICghcGUKKysgICAgICAgICAgICAgfHwgKHBlLT5jbHVzdGVyICE9IGNsCisrICAgICAgICAgICAgICAgICAmJiAhaG9sX2NsdXN0ZXJfaXNfY2hpbGQgKHBlLT5jbHVzdGVyLCBjbCkpKSkKKysgICAgICAgLyogSWYgd2UncmUgY2hhbmdpbmcgY2x1c3RlcnMsIHRoZW4gdGhpcyBtdXN0IGJlIHRoZSBzdGFydCBvZiB0aGUKKysgICAgICAgICAgRU5UUlkncyBjbHVzdGVyIHVubGVzcyB0aGF0IGlzIGFuIGFuY2VzdG9yIG9mIHRoZSBwcmV2aW91cyBvbmUKKysgICAgICAgICAgKGluIHdoaWNoIGNhc2Ugd2UgaGFkIGp1c3QgcG9wcGVkIGludG8gYSBzdWItY2x1c3RlciBmb3IgYSBiaXQpLgorKyAgICAgICAgICBJZiBzbywgdGhlbiBwcmludCB0aGUgY2x1c3RlcidzIGhlYWRlciBsaW5lLiAgKi8KKysgICAgICAgeworKyAgICAgICAgIGludCBvbGRfd20gPSBfX2FyZ3BfZm10c3RyZWFtX3dtYXJnaW4gKHBlc3QtPnN0cmVhbSk7CisrICAgICAgICAgcHJpbnRfaGVhZGVyIChjbC0+aGVhZGVyLCBjbC0+YXJncCwgcGVzdCk7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiAocGVzdC0+c3RyZWFtLCBvbGRfd20pOworKyAgICAgICB9CisrCisrICAgICAgcGVzdC0+Zmlyc3QgPSAwOworKyAgICB9CisrICBlbHNlCisrICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0cyAocGVzdC0+c3RyZWFtLCAiLCAiKTsKKysKKysgIGluZGVudF90byAocGVzdC0+c3RyZWFtLCBjb2wpOworK30KKysKKysvKiBQcmludCBoZWxwIGZvciBFTlRSWSB0byBTVFJFQU0uICAqLworK3N0YXRpYyB2b2lkCisraG9sX2VudHJ5X2hlbHAgKHN0cnVjdCBob2xfZW50cnkgKmVudHJ5LCBjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUsCisrICAgICAgICAgICAgICAgYXJncF9mbXRzdHJlYW1fdCBzdHJlYW0sIHN0cnVjdCBob2xfaGVscF9zdGF0ZSAqaGhzdGF0ZSkKKyt7CisrICB1bnNpZ25lZCBudW07CisrICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKnJlYWwgPSBlbnRyeS0+b3B0LCAqb3B0OworKyAgY2hhciAqc28gPSBlbnRyeS0+c2hvcnRfb3B0aW9uczsKKysgIGludCBoYXZlX2xvbmdfb3B0ID0gMDsgICAgICAgLyogV2UgaGF2ZSBhbnkgbG9uZyBvcHRpb25zLiAgKi8KKysgIC8qIFNhdmVkIG1hcmdpbnMuICAqLworKyAgaW50IG9sZF9sbSA9IF9fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gKHN0cmVhbSwgMCk7CisrICBpbnQgb2xkX3dtID0gX19hcmdwX2ZtdHN0cmVhbV93bWFyZ2luIChzdHJlYW0pOworKyAgLyogUEVTVCBpcyBhIHN0YXRlIGJsb2NrIGhvbGRpbmcgc29tZSBvZiBvdXIgdmFyaWFibGVzIHRoYXQgd2UnZCBsaWtlIHRvCisrICAgICBzaGFyZSB3aXRoIGhlbHBlciBmdW5jdGlvbnMuICAqLworKyAgc3RydWN0IHBlbnRyeV9zdGF0ZSBwZXN0ID0geyBlbnRyeSwgc3RyZWFtLCBoaHN0YXRlLCAxLCBzdGF0ZSB9OworKworKyAgaWYgKCEgb2RvYyAocmVhbCkpCisrICAgIGZvciAob3B0ID0gcmVhbCwgbnVtID0gZW50cnktPm51bTsgbnVtID4gMDsgb3B0KyssIG51bS0tKQorKyAgICAgIGlmIChvcHQtPm5hbWUgJiYgb3Zpc2libGUgKG9wdCkpCisrICAgICAgIHsKKysgICAgICAgICBoYXZlX2xvbmdfb3B0ID0gMTsKKysgICAgICAgICBicmVhazsKKysgICAgICAgfQorKworKyAgLyogRmlyc3QgZW1pdCBzaG9ydCBvcHRpb25zLiAgKi8KKysgIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKHN0cmVhbSwgdXBhcmFtcy5zaG9ydF9vcHRfY29sKTsgLyogRm9yIHRydWx5IGJpemFycmUgY2FzZXMuICovCisrICBmb3IgKG9wdCA9IHJlYWwsIG51bSA9IGVudHJ5LT5udW07IG51bSA+IDA7IG9wdCsrLCBudW0tLSkKKysgICAgaWYgKG9zaG9ydCAob3B0KSAmJiBvcHQtPmtleSA9PSAqc28pCisrICAgICAgLyogT1BUIGhhcyBhIHZhbGlkIChub24gc2hhZG93ZWQpIHNob3J0IG9wdGlvbi4gICovCisrICAgICAgeworKyAgICAgICBpZiAob3Zpc2libGUgKG9wdCkpCisrICAgICAgICAgeworKyAgICAgICAgICAgY29tbWEgKHVwYXJhbXMuc2hvcnRfb3B0X2NvbCwgJnBlc3QpOworKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChzdHJlYW0sICctJyk7CisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgKnNvKTsKKysgICAgICAgICAgIGlmICghaGF2ZV9sb25nX29wdCB8fCB1cGFyYW1zLmR1cF9hcmdzKQorKyAgICAgICAgICAgICBhcmcgKHJlYWwsICIgJXMiLCAiWyVzXSIsCisrICAgICAgICAgICAgICAgICAgc3RhdGUgPT0gTlVMTCA/IE5VTEwgOiBzdGF0ZS0+cm9vdF9hcmdwLT5hcmdwX2RvbWFpbiwKKysgICAgICAgICAgICAgICAgICBzdHJlYW0pOworKyAgICAgICAgICAgZWxzZSBpZiAocmVhbC0+YXJnKQorKyAgICAgICAgICAgICBoaHN0YXRlLT5zdXBwcmVzc2VkX2R1cF9hcmcgPSAxOworKyAgICAgICAgIH0KKysgICAgICAgc28rKzsKKysgICAgICB9CisrCisrICAvKiBOb3csIGxvbmcgb3B0aW9ucy4gICovCisrICBpZiAob2RvYyAocmVhbCkpCisrICAgIC8qIEEgYGRvY3VtZW50YXRpb24nIG9wdGlvbi4gICovCisrICAgIHsKKysgICAgICBfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIChzdHJlYW0sIHVwYXJhbXMuZG9jX29wdF9jb2wpOworKyAgICAgIGZvciAob3B0ID0gcmVhbCwgbnVtID0gZW50cnktPm51bTsgbnVtID4gMDsgb3B0KyssIG51bS0tKQorKyAgICAgICBpZiAob3B0LT5uYW1lICYmIG92aXNpYmxlIChvcHQpKQorKyAgICAgICAgIHsKKysgICAgICAgICAgIGNvbW1hICh1cGFyYW1zLmRvY19vcHRfY29sLCAmcGVzdCk7CisrICAgICAgICAgICAvKiBDYWxsaW5nIGdldHRleHQgaGVyZSBpc24ndCBxdWl0ZSByaWdodCwgc2luY2Ugc29ydGluZyB3aWxsCisrICAgICAgICAgICAgICBoYXZlIGJlZW4gZG9uZSBvbiB0aGUgb3JpZ2luYWw7IGJ1dCBkb2N1bWVudGF0aW9uIG9wdGlvbnMKKysgICAgICAgICAgICAgIHNob3VsZCBiZSBwcmV0dHkgcmFyZSBhbnl3YXkuLi4gICovCisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dHMgKHN0cmVhbSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGdldHRleHQgKHN0YXRlID09IE5VTEwgPyBOVUxMCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN0YXRlLT5yb290X2FyZ3AtPmFyZ3BfZG9tYWluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0LT5uYW1lKSk7CisrICAgICAgICAgfQorKyAgICB9CisrICBlbHNlCisrICAgIC8qIEEgcmVhbCBsb25nIG9wdGlvbi4gICovCisrICAgIHsKKysgICAgICBfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIChzdHJlYW0sIHVwYXJhbXMubG9uZ19vcHRfY29sKTsKKysgICAgICBmb3IgKG9wdCA9IHJlYWwsIG51bSA9IGVudHJ5LT5udW07IG51bSA+IDA7IG9wdCsrLCBudW0tLSkKKysgICAgICAgaWYgKG9wdC0+bmFtZSAmJiBvdmlzaWJsZSAob3B0KSkKKysgICAgICAgICB7CisrICAgICAgICAgICBjb21tYSAodXBhcmFtcy5sb25nX29wdF9jb2wsICZwZXN0KTsKKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChzdHJlYW0sICItLSVzIiwgb3B0LT5uYW1lKTsKKysgICAgICAgICAgIGFyZyAocmVhbCwgIj0lcyIsICJbPSVzXSIsCisrICAgICAgICAgICAgICAgIHN0YXRlID09IE5VTEwgPyBOVUxMIDogc3RhdGUtPnJvb3RfYXJncC0+YXJncF9kb21haW4sIHN0cmVhbSk7CisrICAgICAgICAgfQorKyAgICB9CisrCisrICAvKiBOZXh0LCBkb2N1bWVudGF0aW9uIHN0cmluZ3MuICAqLworKyAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAoc3RyZWFtLCAwKTsKKysKKysgIGlmIChwZXN0LmZpcnN0KQorKyAgICB7CisrICAgICAgLyogRGlkbid0IHByaW50IGFueSBzd2l0Y2hlcywgd2hhdCdzIHVwPyAgKi8KKysgICAgICBpZiAoIW9zaG9ydCAocmVhbCkgJiYgIXJlYWwtPm5hbWUpCisrICAgICAgIC8qIFRoaXMgaXMgYSBncm91cCBoZWFkZXIsIHByaW50IGl0IG5pY2VseS4gICovCisrICAgICAgIHByaW50X2hlYWRlciAocmVhbC0+ZG9jLCBlbnRyeS0+YXJncCwgJnBlc3QpOworKyAgICAgIGVsc2UKKysgICAgICAgLyogSnVzdCBhIHRvdGFsbHkgc2hhZG93ZWQgb3B0aW9uIG9yIG51bGwgaGVhZGVyOyBwcmludCBub3RoaW5nLiAgKi8KKysgICAgICAgZ290byBjbGVhbnVwOyAgICAgICAgICAgLyogSnVzdCByZXR1cm4sIGFmdGVyIGNsZWFuaW5nIHVwLiAgKi8KKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgY29uc3QgY2hhciAqdHN0ciA9IHJlYWwtPmRvYyA/IGRnZXR0ZXh0IChzdGF0ZSA9PSBOVUxMID8gTlVMTAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN0YXRlLT5yb290X2FyZ3AtPmFyZ3BfZG9tYWluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsLT5kb2MpIDogMDsKKysgICAgICBjb25zdCBjaGFyICpmc3RyID0gZmlsdGVyX2RvYyAodHN0ciwgcmVhbC0+a2V5LCBlbnRyeS0+YXJncCwgc3RhdGUpOworKyAgICAgIGlmIChmc3RyICYmICpmc3RyKQorKyAgICAgICB7CisrICAgICAgICAgdW5zaWduZWQgaW50IGNvbCA9IF9fYXJncF9mbXRzdHJlYW1fcG9pbnQgKHN0cmVhbSk7CisrCisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAoc3RyZWFtLCB1cGFyYW1zLm9wdF9kb2NfY29sKTsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIChzdHJlYW0sIHVwYXJhbXMub3B0X2RvY19jb2wpOworKworKyAgICAgICAgIGlmIChjb2wgPiAodW5zaWduZWQgaW50KSAodXBhcmFtcy5vcHRfZG9jX2NvbCArIDMpKQorKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChzdHJlYW0sICdcbicpOworKyAgICAgICAgIGVsc2UgaWYgKGNvbCA+PSAodW5zaWduZWQgaW50KSB1cGFyYW1zLm9wdF9kb2NfY29sKQorKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRzIChzdHJlYW0sICIgICAiKTsKKysgICAgICAgICBlbHNlCisrICAgICAgICAgICBpbmRlbnRfdG8gKHN0cmVhbSwgdXBhcmFtcy5vcHRfZG9jX2NvbCk7CisrCisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRzIChzdHJlYW0sIGZzdHIpOworKyAgICAgICB9CisrICAgICAgaWYgKGZzdHIgJiYgZnN0ciAhPSB0c3RyKQorKyAgICAgICBmcmVlICgoY2hhciAqKSBmc3RyKTsKKysKKysgICAgICAvKiBSZXNldCB0aGUgbGVmdCBtYXJnaW4uICAqLworKyAgICAgIF9fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gKHN0cmVhbSwgMCk7CisrICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChzdHJlYW0sICdcbicpOworKyAgICB9CisrCisrICBoaHN0YXRlLT5wcmV2X2VudHJ5ID0gZW50cnk7CisrCisrY2xlYW51cDoKKysgIF9fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gKHN0cmVhbSwgb2xkX2xtKTsKKysgIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKHN0cmVhbSwgb2xkX3dtKTsKKyt9CisrCisrLyogT3V0cHV0IGEgbG9uZyBoZWxwIG1lc3NhZ2UgYWJvdXQgdGhlIG9wdGlvbnMgaW4gSE9MIHRvIFNUUkVBTS4gICovCisrc3RhdGljIHZvaWQKKytob2xfaGVscCAoc3RydWN0IGhvbCAqaG9sLCBjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUsCisrICAgICAgICAgYXJncF9mbXRzdHJlYW1fdCBzdHJlYW0pCisreworKyAgdW5zaWduZWQgbnVtOworKyAgc3RydWN0IGhvbF9lbnRyeSAqZW50cnk7CisrICBzdHJ1Y3QgaG9sX2hlbHBfc3RhdGUgaGhzdGF0ZSA9IHsgMCwgMCwgMCB9OworKworKyAgZm9yIChlbnRyeSA9IGhvbC0+ZW50cmllcywgbnVtID0gaG9sLT5udW1fZW50cmllczsgbnVtID4gMDsgZW50cnkrKywgbnVtLS0pCisrICAgIGhvbF9lbnRyeV9oZWxwIChlbnRyeSwgc3RhdGUsIHN0cmVhbSwgJmhoc3RhdGUpOworKworKyAgaWYgKGhoc3RhdGUuc3VwcHJlc3NlZF9kdXBfYXJnICYmIHVwYXJhbXMuZHVwX2FyZ3Nfbm90ZSkKKysgICAgeworKyAgICAgIGNvbnN0IGNoYXIgKnRzdHIgPSBkZ2V0dGV4dCAoc3RhdGUgPT0gTlVMTCA/IE5VTEwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzdGF0ZS0+cm9vdF9hcmdwLT5hcmdwX2RvbWFpbiwgIlwKKytNYW5kYXRvcnkgb3Igb3B0aW9uYWwgYXJndW1lbnRzIHRvIGxvbmcgb3B0aW9ucyBhcmUgYWxzbyBtYW5kYXRvcnkgb3IgXAorK29wdGlvbmFsIGZvciBhbnkgY29ycmVzcG9uZGluZyBzaG9ydCBvcHRpb25zLiIpOworKyAgICAgIGNvbnN0IGNoYXIgKmZzdHIgPSBmaWx0ZXJfZG9jICh0c3RyLCBBUkdQX0tFWV9IRUxQX0RVUF9BUkdTX05PVEUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPyBzdGF0ZS0+cm9vdF9hcmdwIDogMCwgc3RhdGUpOworKyAgICAgIGlmIChmc3RyICYmICpmc3RyKQorKyAgICAgICB7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChzdHJlYW0sICdcbicpOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0cyAoc3RyZWFtLCBmc3RyKTsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgJ1xuJyk7CisrICAgICAgIH0KKysgICAgICBpZiAoZnN0ciAmJiBmc3RyICE9IHRzdHIpCisrICAgICAgIGZyZWUgKChjaGFyICopIGZzdHIpOworKyAgICB9CisrfQorKworKy8qIEhlbHBlciBmdW5jdGlvbnMgZm9yIGhvbF91c2FnZS4gICovCisrCisrLyogSWYgT1BUIGlzIGEgc2hvcnQgb3B0aW9uIHdpdGhvdXQgYW4gYXJnLCBhcHBlbmQgaXRzIGtleSB0byB0aGUgc3RyaW5nCisrICAgcG9pbnRlciBwb2ludGVyIHRvIGJ5IENPT0tJRSwgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXIuICAqLworK3N0YXRpYyBpbnQKKythZGRfYXJnbGVzc19zaG9ydF9vcHQgKGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0LAorKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKnJlYWwsCisrICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwgdm9pZCAqY29va2llKQorK3sKKysgIGNoYXIgKipzbmFvX2VuZCA9IGNvb2tpZTsKKysgIGlmICghKG9wdC0+YXJnIHx8IHJlYWwtPmFyZykKKysgICAgICAmJiAhKChvcHQtPmZsYWdzIHwgcmVhbC0+ZmxhZ3MpICYgT1BUSU9OX05PX1VTQUdFKSkKKysgICAgKigqc25hb19lbmQpKysgPSBvcHQtPmtleTsKKysgIHJldHVybiAwOworK30KKysKKysvKiBJZiBPUFQgaXMgYSBzaG9ydCBvcHRpb24gd2l0aCBhbiBhcmcsIG91dHB1dCBhIHVzYWdlIGVudHJ5IGZvciBpdCB0byB0aGUKKysgICBzdHJlYW0gcG9pbnRlZCBhdCBieSBDT09LSUUuICAqLworK3N0YXRpYyBpbnQKKyt1c2FnZV9hcmdmdWxfc2hvcnRfb3B0IChjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdCwKKysgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqcmVhbCwKKysgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwgdm9pZCAqY29va2llKQorK3sKKysgIGFyZ3BfZm10c3RyZWFtX3Qgc3RyZWFtID0gY29va2llOworKyAgY29uc3QgY2hhciAqYXJnID0gb3B0LT5hcmc7CisrICBpbnQgZmxhZ3MgPSBvcHQtPmZsYWdzIHwgcmVhbC0+ZmxhZ3M7CisrCisrICBpZiAoISBhcmcpCisrICAgIGFyZyA9IHJlYWwtPmFyZzsKKysKKysgIGlmIChhcmcgJiYgIShmbGFncyAmIE9QVElPTl9OT19VU0FHRSkpCisrICAgIHsKKysgICAgICBhcmcgPSBkZ2V0dGV4dCAoZG9tYWluLCBhcmcpOworKworKyAgICAgIGlmIChmbGFncyAmIE9QVElPTl9BUkdfT1BUSU9OQUwpCisrICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChzdHJlYW0sICIgWy0lY1slc11dIiwgb3B0LT5rZXksIGFyZyk7CisrICAgICAgZWxzZQorKyAgICAgICB7CisrICAgICAgICAgLyogTWFudWFsbHkgZG8gbGluZSB3cmFwcGluZyBzbyB0aGF0IGl0IChwcm9iYWJseSkgd29uJ3QKKysgICAgICAgICAgICBnZXQgd3JhcHBlZCBhdCB0aGUgZW1iZWRkZWQgc3BhY2UuICAqLworKyAgICAgICAgIHNwYWNlIChzdHJlYW0sIDYgKyBzdHJsZW4gKGFyZykpOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChzdHJlYW0sICJbLSVjICVzXSIsIG9wdC0+a2V5LCBhcmcpOworKyAgICAgICB9CisrICAgIH0KKysKKysgIHJldHVybiAwOworK30KKysKKysvKiBPdXRwdXQgYSB1c2FnZSBlbnRyeSBmb3IgdGhlIGxvbmcgb3B0aW9uIG9wdCB0byB0aGUgc3RyZWFtIHBvaW50ZWQgYXQgYnkKKysgICBDT09LSUUuICAqLworK3N0YXRpYyBpbnQKKyt1c2FnZV9sb25nX29wdCAoY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQsCisrICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpyZWFsLAorKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwgdm9pZCAqY29va2llKQorK3sKKysgIGFyZ3BfZm10c3RyZWFtX3Qgc3RyZWFtID0gY29va2llOworKyAgY29uc3QgY2hhciAqYXJnID0gb3B0LT5hcmc7CisrICBpbnQgZmxhZ3MgPSBvcHQtPmZsYWdzIHwgcmVhbC0+ZmxhZ3M7CisrCisrICBpZiAoISBhcmcpCisrICAgIGFyZyA9IHJlYWwtPmFyZzsKKysKKysgIGlmICghIChmbGFncyAmIE9QVElPTl9OT19VU0FHRSkpCisrICAgIHsKKysgICAgICBpZiAoYXJnKQorKyAgICAgICB7CisrICAgICAgICAgYXJnID0gZGdldHRleHQgKGRvbWFpbiwgYXJnKTsKKysgICAgICAgICBpZiAoZmxhZ3MgJiBPUFRJT05fQVJHX09QVElPTkFMKQorKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cmVhbSwgIiBbLS0lc1s9JXNdXSIsIG9wdC0+bmFtZSwgYXJnKTsKKysgICAgICAgICBlbHNlCisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiAoc3RyZWFtLCAiIFstLSVzPSVzXSIsIG9wdC0+bmFtZSwgYXJnKTsKKysgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cmVhbSwgIiBbLS0lc10iLCBvcHQtPm5hbWUpOworKyAgICB9CisrCisrICByZXR1cm4gMDsKKyt9CisrCisrLyogUHJpbnQgYSBzaG9ydCB1c2FnZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGFyZ3VtZW50cyBpbiBIT0wgdG8gU1RSRUFNLiAgKi8KKytzdGF0aWMgdm9pZAorK2hvbF91c2FnZSAoc3RydWN0IGhvbCAqaG9sLCBhcmdwX2ZtdHN0cmVhbV90IHN0cmVhbSkKKyt7CisrICBpZiAoaG9sLT5udW1fZW50cmllcyA+IDApCisrICAgIHsKKysgICAgICB1bnNpZ25lZCBuZW50cmllczsKKysgICAgICBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeTsKKysgICAgICBjaGFyICpzaG9ydF9ub19hcmdfb3B0cyA9IGFsbG9jYSAoc3RybGVuIChob2wtPnNob3J0X29wdGlvbnMpICsgMSk7CisrICAgICAgY2hhciAqc25hb19lbmQgPSBzaG9ydF9ub19hcmdfb3B0czsKKysKKysgICAgICAvKiBGaXJzdCB3ZSBwdXQgYSBsaXN0IG9mIHNob3J0IG9wdGlvbnMgd2l0aG91dCBhcmd1bWVudHMuICAqLworKyAgICAgIGZvciAoZW50cnkgPSBob2wtPmVudHJpZXMsIG5lbnRyaWVzID0gaG9sLT5udW1fZW50cmllcworKyAgICAgICAgICA7IG5lbnRyaWVzID4gMAorKyAgICAgICAgICA7IGVudHJ5KyssIG5lbnRyaWVzLS0pCisrICAgICAgIGhvbF9lbnRyeV9zaG9ydF9pdGVyYXRlIChlbnRyeSwgYWRkX2FyZ2xlc3Nfc2hvcnRfb3B0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmFyZ3AtPmFyZ3BfZG9tYWluLCAmc25hb19lbmQpOworKyAgICAgIGlmIChzbmFvX2VuZCA+IHNob3J0X25vX2FyZ19vcHRzKQorKyAgICAgICB7CisrICAgICAgICAgKnNuYW9fZW5kKysgPSAwOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChzdHJlYW0sICIgWy0lc10iLCBzaG9ydF9ub19hcmdfb3B0cyk7CisrICAgICAgIH0KKysKKysgICAgICAvKiBOb3cgYSBsaXN0IG9mIHNob3J0IG9wdGlvbnMgKndpdGgqIGFyZ3VtZW50cy4gICovCisrICAgICAgZm9yIChlbnRyeSA9IGhvbC0+ZW50cmllcywgbmVudHJpZXMgPSBob2wtPm51bV9lbnRyaWVzCisrICAgICAgICAgIDsgbmVudHJpZXMgPiAwCisrICAgICAgICAgIDsgZW50cnkrKywgbmVudHJpZXMtLSkKKysgICAgICAgaG9sX2VudHJ5X3Nob3J0X2l0ZXJhdGUgKGVudHJ5LCB1c2FnZV9hcmdmdWxfc2hvcnRfb3B0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmFyZ3AtPmFyZ3BfZG9tYWluLCBzdHJlYW0pOworKworKyAgICAgIC8qIEZpbmFsbHksIGEgbGlzdCBvZiBsb25nIG9wdGlvbnMgKHdoZXchKS4gICovCisrICAgICAgZm9yIChlbnRyeSA9IGhvbC0+ZW50cmllcywgbmVudHJpZXMgPSBob2wtPm51bV9lbnRyaWVzCisrICAgICAgICAgIDsgbmVudHJpZXMgPiAwCisrICAgICAgICAgIDsgZW50cnkrKywgbmVudHJpZXMtLSkKKysgICAgICAgaG9sX2VudHJ5X2xvbmdfaXRlcmF0ZSAoZW50cnksIHVzYWdlX2xvbmdfb3B0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YXJncC0+YXJncF9kb21haW4sIHN0cmVhbSk7CisrICAgIH0KKyt9CisrCisrLyogTWFrZSBhIEhPTCBjb250YWluaW5nIGFsbCBsZXZlbHMgb2Ygb3B0aW9ucyBpbiBBUkdQLiAgQ0xVU1RFUiBpcyB0aGUKKysgICBjbHVzdGVyIGluIHdoaWNoIEFSR1AncyBlbnRyaWVzIHNob3VsZCBiZSBjbHVzdGVyZWQsIG9yIDAuICAqLworK3N0YXRpYyBzdHJ1Y3QgaG9sICoKKythcmdwX2hvbCAoY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsIHN0cnVjdCBob2xfY2x1c3RlciAqY2x1c3RlcikKKyt7CisrICBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCAqY2hpbGQgPSBhcmdwLT5jaGlsZHJlbjsKKysgIHN0cnVjdCBob2wgKmhvbCA9IG1ha2VfaG9sIChhcmdwLCBjbHVzdGVyKTsKKysgIGlmIChjaGlsZCkKKysgICAgd2hpbGUgKGNoaWxkLT5hcmdwKQorKyAgICAgIHsKKysgICAgICAgc3RydWN0IGhvbF9jbHVzdGVyICpjaGlsZF9jbHVzdGVyID0KKysgICAgICAgICAoKGNoaWxkLT5ncm91cCB8fCBjaGlsZC0+aGVhZGVyKQorKyAgICAgICAgICAvKiBQdXQgQ0hJTEQtPmFyZ3Agd2l0aGluIGl0cyBvd24gY2x1c3Rlci4gICovCisrICAgICAgICAgID8gaG9sX2FkZF9jbHVzdGVyIChob2wsIGNoaWxkLT5ncm91cCwgY2hpbGQtPmhlYWRlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkIC0gYXJncC0+Y2hpbGRyZW4sIGNsdXN0ZXIsIGFyZ3ApCisrICAgICAgICAgIC8qIEp1c3QgbWVyZ2UgaXQgaW50byB0aGUgcGFyZW50J3MgY2x1c3Rlci4gICovCisrICAgICAgICAgIDogY2x1c3Rlcik7CisrICAgICAgIGhvbF9hcHBlbmQgKGhvbCwgYXJncF9ob2wgKGNoaWxkLT5hcmdwLCBjaGlsZF9jbHVzdGVyKSkgOworKyAgICAgICBjaGlsZCsrOworKyAgICAgIH0KKysgIHJldHVybiBob2w7CisrfQorKworKy8qIENhbGN1bGF0ZSBob3cgbWFueSBkaWZmZXJlbnQgbGV2ZWxzIHdpdGggYWx0ZXJuYXRpdmUgYXJncyBzdHJpbmdzIGV4aXN0IGluCisrICAgQVJHUC4gICovCisrc3RhdGljIHNpemVfdAorK2FyZ3BfYXJnc19sZXZlbHMgKGNvbnN0IHN0cnVjdCBhcmdwICphcmdwKQorK3sKKysgIHNpemVfdCBsZXZlbHMgPSAwOworKyAgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgKmNoaWxkID0gYXJncC0+Y2hpbGRyZW47CisrCisrICBpZiAoYXJncC0+YXJnc19kb2MgJiYgc3RyY2hyIChhcmdwLT5hcmdzX2RvYywgJ1xuJykpCisrICAgIGxldmVscysrOworKworKyAgaWYgKGNoaWxkKQorKyAgICB3aGlsZSAoY2hpbGQtPmFyZ3ApCisrICAgICAgbGV2ZWxzICs9IGFyZ3BfYXJnc19sZXZlbHMgKChjaGlsZCsrKS0+YXJncCk7CisrCisrICByZXR1cm4gbGV2ZWxzOworK30KKysKKysvKiBQcmludCBhbGwgdGhlIG5vbi1vcHRpb24gYXJncyBkb2N1bWVudGVkIGluIEFSR1AgdG8gU1RSRUFNLiAgQW55IG91dHB1dCBpcworKyAgIHByZWNlZGVkIGJ5IGEgc3BhY2UuICBMRVZFTFMgaXMgYSBwb2ludGVyIHRvIGEgYnl0ZSB2ZWN0b3IgdGhlIGxlbmd0aAorKyAgIHJldHVybmVkIGJ5IGFyZ3BfYXJnc19sZXZlbHM7IGl0IHNob3VsZCBiZSBpbml0aWFsaXplZCB0byB6ZXJvLCBhbmQKKysgICB1cGRhdGVkIGJ5IHRoaXMgcm91dGluZSBmb3IgdGhlIG5leHQgY2FsbCBpZiBBRFZBTkNFIGlzIHRydWUuICBUcnVlIGlzCisrICAgcmV0dXJuZWQgYXMgbG9uZyBhcyB0aGVyZSBhcmUgbW9yZSBwYXR0ZXJucyB0byBvdXRwdXQuICAqLworK3N0YXRpYyBpbnQKKythcmdwX2FyZ3NfdXNhZ2UgKGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLCBjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUsCisrICAgICAgICAgICAgICAgIGNoYXIgKipsZXZlbHMsIGludCBhZHZhbmNlLCBhcmdwX2ZtdHN0cmVhbV90IHN0cmVhbSkKKyt7CisrICBjaGFyICpvdXJfbGV2ZWwgPSAqbGV2ZWxzOworKyAgaW50IG11bHRpcGxlID0gMDsKKysgIGNvbnN0IHN0cnVjdCBhcmdwX2NoaWxkICpjaGlsZCA9IGFyZ3AtPmNoaWxkcmVuOworKyAgY29uc3QgY2hhciAqdGRvYyA9IGRnZXR0ZXh0IChhcmdwLT5hcmdwX2RvbWFpbiwgYXJncC0+YXJnc19kb2MpLCAqbmwgPSAwOworKyAgY29uc3QgY2hhciAqZmRvYyA9IGZpbHRlcl9kb2MgKHRkb2MsIEFSR1BfS0VZX0hFTFBfQVJHU19ET0MsIGFyZ3AsIHN0YXRlKTsKKysKKysgIGlmIChmZG9jKQorKyAgICB7CisrICAgICAgY29uc3QgY2hhciAqY3AgPSBmZG9jOworKyAgICAgIG5sID0gc3RyY2hybnVsIChjcCwgJ1xuJyk7CisrICAgICAgaWYgKCpubCAhPSAnXDAnKQorKyAgICAgICAvKiBUaGlzIGlzIGEgYG11bHRpLWxldmVsJyBhcmdzIGRvYzsgYWR2YW5jZSB0byB0aGUgY29ycmVjdCBwb3NpdGlvbgorKyAgICAgICAgICBhcyBkZXRlcm1pbmVkIGJ5IG91ciBzdGF0ZSBpbiBMRVZFTFMsIGFuZCB1cGRhdGUgTEVWRUxTLiAgKi8KKysgICAgICAgeworKyAgICAgICAgIGludCBpOworKyAgICAgICAgIG11bHRpcGxlID0gMTsKKysgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKm91cl9sZXZlbDsgaSsrKQorKyAgICAgICAgICAgY3AgPSBubCArIDEsIG5sID0gc3RyY2hybnVsIChjcCwgJ1xuJyk7CisrICAgICAgICAgKCpsZXZlbHMpKys7CisrICAgICAgIH0KKysKKysgICAgICAvKiBNYW51YWxseSBkbyBsaW5lIHdyYXBwaW5nIHNvIHRoYXQgaXQgKHByb2JhYmx5KSB3b24ndCBnZXQgd3JhcHBlZCBhdAorKyAgICAgICAgYW55IGVtYmVkZGVkIHNwYWNlcy4gICovCisrICAgICAgc3BhY2UgKHN0cmVhbSwgMSArIG5sIC0gY3ApOworKworKyAgICAgIF9fYXJncF9mbXRzdHJlYW1fd3JpdGUgKHN0cmVhbSwgY3AsIG5sIC0gY3ApOworKyAgICB9CisrICBpZiAoZmRvYyAmJiBmZG9jICE9IHRkb2MpCisrICAgIGZyZWUgKChjaGFyICopZmRvYyk7ICAgICAgIC8qIEZyZWUgdXNlcidzIG1vZGlmaWVkIGRvYyBzdHJpbmcuICAqLworKworKyAgaWYgKGNoaWxkKQorKyAgICB3aGlsZSAoY2hpbGQtPmFyZ3ApCisrICAgICAgYWR2YW5jZSA9ICFhcmdwX2FyZ3NfdXNhZ2UgKChjaGlsZCsrKS0+YXJncCwgc3RhdGUsIGxldmVscywgYWR2YW5jZSwgc3RyZWFtKTsKKysKKysgIGlmIChhZHZhbmNlICYmIG11bHRpcGxlKQorKyAgICB7CisrICAgICAgLyogTmVlZCB0byBpbmNyZW1lbnQgb3VyIGxldmVsLiAgKi8KKysgICAgICBpZiAoKm5sKQorKyAgICAgICAvKiBUaGVyZSdzIG1vcmUgd2UgY2FuIGRvIGhlcmUuICAqLworKyAgICAgICB7CisrICAgICAgICAgKCpvdXJfbGV2ZWwpKys7CisrICAgICAgICAgYWR2YW5jZSA9IDA7ICAgICAgICAgIC8qIE91ciBwYXJlbnQgc2hvdWxkbid0IGFkdmFuY2UgYWxzby4gKi8KKysgICAgICAgfQorKyAgICAgIGVsc2UgaWYgKCpvdXJfbGV2ZWwgPiAwKQorKyAgICAgICAvKiBXZSBoYWQgbXVsdGlwbGUgbGV2ZWxzLCBidXQgdXNlZCB0aGVtIHVwOyByZXNldCB0byB6ZXJvLiAgKi8KKysgICAgICAgKm91cl9sZXZlbCA9IDA7CisrICAgIH0KKysKKysgIHJldHVybiAhYWR2YW5jZTsKKyt9CisrCisrLyogUHJpbnQgdGhlIGRvY3VtZW50YXRpb24gZm9yIEFSR1AgdG8gU1RSRUFNOyBpZiBQT1NUIGlzIGZhbHNlLCB0aGVuCisrICAgZXZlcnl0aGluZyBwcmVjZWVkaW5nIGEgYFx2JyBjaGFyYWN0ZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gc3RyaW5ncyAob3IKKysgICB0aGUgd2hvbGUgc3RyaW5nLCBmb3IgdGhvc2Ugd2l0aCBub25lKSBpcyBwcmludGVkLCBvdGhlcndpc2UsIGV2ZXJ5dGhpbmcKKysgICBmb2xsb3dpbmcgdGhlIGBcdicgY2hhcmFjdGVyIChub3RoaW5nIGZvciBzdHJpbmdzIHdpdGhvdXQpLiAgRWFjaCBzZXBhcmF0ZQorKyAgIGJpdCBvZiBkb2N1bWVudGF0aW9uIGlzIHNlcGFyYXRlZCBhIGJsYW5rIGxpbmUsIGFuZCBpZiBQUkVfQkxBTksgaXMgdHJ1ZSwKKysgICB0aGVuIHRoZSBmaXJzdCBpcyBhcyB3ZWxsLiAgSWYgRklSU1RfT05MWSBpcyB0cnVlLCBvbmx5IHRoZSBmaXJzdAorKyAgIG9jY3VycmVuY2UgaXMgb3V0cHV0LiAgUmV0dXJucyB0cnVlIGlmIGFueXRoaW5nIHdhcyBvdXRwdXQuICAqLworK3N0YXRpYyBpbnQKKythcmdwX2RvYyAoY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsIGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSwKKysgICAgICAgICBpbnQgcG9zdCwgaW50IHByZV9ibGFuaywgaW50IGZpcnN0X29ubHksCisrICAgICAgICAgYXJncF9mbXRzdHJlYW1fdCBzdHJlYW0pCisreworKyAgY29uc3QgY2hhciAqdGV4dDsKKysgIGNvbnN0IGNoYXIgKmlucF90ZXh0OworKyAgdm9pZCAqaW5wdXQgPSAwOworKyAgaW50IGFueXRoaW5nID0gMDsKKysgIHNpemVfdCBpbnBfdGV4dF9saW1pdCA9IDA7CisrICBjb25zdCBjaGFyICpkb2MgPSBkZ2V0dGV4dCAoYXJncC0+YXJncF9kb21haW4sIGFyZ3AtPmRvYyk7CisrICBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCAqY2hpbGQgPSBhcmdwLT5jaGlsZHJlbjsKKysKKysgIGlmIChkb2MpCisrICAgIHsKKysgICAgICBjaGFyICp2dCA9IHN0cmNociAoZG9jLCAnXHYnKTsKKysgICAgICBpbnBfdGV4dCA9IHBvc3QgPyAodnQgPyB2dCArIDEgOiAwKSA6IGRvYzsKKysgICAgICBpbnBfdGV4dF9saW1pdCA9ICghcG9zdCAmJiB2dCkgPyAodnQgLSBkb2MpIDogMDsKKysgICAgfQorKyAgZWxzZQorKyAgICBpbnBfdGV4dCA9IDA7CisrCisrICBpZiAoYXJncC0+aGVscF9maWx0ZXIpCisrICAgIC8qIFdlIGhhdmUgdG8gZmlsdGVyIHRoZSBkb2Mgc3RyaW5ncy4gICovCisrICAgIHsKKysgICAgICBpZiAoaW5wX3RleHRfbGltaXQpCisrICAgICAgIC8qIENvcHkgSU5QX1RFWFQgc28gdGhhdCBpdCdzIG51bC10ZXJtaW5hdGVkLiAgKi8KKysgICAgICAgaW5wX3RleHQgPSBzdHJuZHVwIChpbnBfdGV4dCwgaW5wX3RleHRfbGltaXQpOworKyAgICAgIGlucHV0ID0gX19hcmdwX2lucHV0IChhcmdwLCBzdGF0ZSk7CisrICAgICAgdGV4dCA9CisrICAgICAgICgqYXJncC0+aGVscF9maWx0ZXIpIChwb3N0CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IEFSR1BfS0VZX0hFTFBfUE9TVF9ET0MKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQVJHUF9LRVlfSEVMUF9QUkVfRE9DLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wX3RleHQsIGlucHV0KTsKKysgICAgfQorKyAgZWxzZQorKyAgICB0ZXh0ID0gKGNvbnN0IGNoYXIgKikgaW5wX3RleHQ7CisrCisrICBpZiAodGV4dCkKKysgICAgeworKyAgICAgIGlmIChwcmVfYmxhbmspCisrICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAnXG4nKTsKKysKKysgICAgICBpZiAodGV4dCA9PSBpbnBfdGV4dCAmJiBpbnBfdGV4dF9saW1pdCkKKysgICAgICAgX19hcmdwX2ZtdHN0cmVhbV93cml0ZSAoc3RyZWFtLCBpbnBfdGV4dCwgaW5wX3RleHRfbGltaXQpOworKyAgICAgIGVsc2UKKysgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRzIChzdHJlYW0sIHRleHQpOworKworKyAgICAgIGlmIChfX2FyZ3BfZm10c3RyZWFtX3BvaW50IChzdHJlYW0pID4gX19hcmdwX2ZtdHN0cmVhbV9sbWFyZ2luIChzdHJlYW0pKQorKyAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgJ1xuJyk7CisrCisrICAgICAgYW55dGhpbmcgPSAxOworKyAgICB9CisrCisrICBpZiAodGV4dCAmJiB0ZXh0ICE9IGlucF90ZXh0KQorKyAgICBmcmVlICgoY2hhciAqKSB0ZXh0KTsgICAgICAvKiBGcmVlIFRFWFQgcmV0dXJuZWQgZnJvbSB0aGUgaGVscCBmaWx0ZXIuICAqLworKyAgaWYgKGlucF90ZXh0ICYmIGlucF90ZXh0X2xpbWl0ICYmIGFyZ3AtPmhlbHBfZmlsdGVyKQorKyAgICBmcmVlICgoY2hhciAqKSBpbnBfdGV4dCk7ICAvKiBXZSBjb3BpZWQgSU5QX1RFWFQsIHNvIGZyZWUgaXQgbm93LiAgKi8KKysKKysgIGlmIChwb3N0ICYmIGFyZ3AtPmhlbHBfZmlsdGVyKQorKyAgICAvKiBOb3cgc2VlIGlmIHdlIGhhdmUgdG8gb3V0cHV0IGEgQVJHUF9LRVlfSEVMUF9FWFRSQSB0ZXh0LiAgKi8KKysgICAgeworKyAgICAgIHRleHQgPSAoKmFyZ3AtPmhlbHBfZmlsdGVyKSAoQVJHUF9LRVlfSEVMUF9FWFRSQSwgMCwgaW5wdXQpOworKyAgICAgIGlmICh0ZXh0KQorKyAgICAgICB7CisrICAgICAgICAgaWYgKGFueXRoaW5nIHx8IHByZV9ibGFuaykKKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAnXG4nKTsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dHMgKHN0cmVhbSwgdGV4dCk7CisrICAgICAgICAgZnJlZSAoKGNoYXIgKikgdGV4dCk7CisrICAgICAgICAgaWYgKF9fYXJncF9mbXRzdHJlYW1fcG9pbnQgKHN0cmVhbSkKKysgICAgICAgICAgICAgPiBfX2FyZ3BfZm10c3RyZWFtX2xtYXJnaW4gKHN0cmVhbSkpCisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgJ1xuJyk7CisrICAgICAgICAgYW55dGhpbmcgPSAxOworKyAgICAgICB9CisrICAgIH0KKysKKysgIGlmIChjaGlsZCkKKysgICAgd2hpbGUgKGNoaWxkLT5hcmdwICYmICEoZmlyc3Rfb25seSAmJiBhbnl0aGluZykpCisrICAgICAgYW55dGhpbmcgfD0KKysgICAgICAgYXJncF9kb2MgKChjaGlsZCsrKS0+YXJncCwgc3RhdGUsCisrICAgICAgICAgICAgICAgICBwb3N0LCBhbnl0aGluZyB8fCBwcmVfYmxhbmssIGZpcnN0X29ubHksCisrICAgICAgICAgICAgICAgICBzdHJlYW0pOworKworKyAgcmV0dXJuIGFueXRoaW5nOworK30KKysKKysvKiBPdXRwdXQgYSB1c2FnZSBtZXNzYWdlIGZvciBBUkdQIHRvIFNUUkVBTS4gIElmIGNhbGxlZCBmcm9tCisrICAgYXJncF9zdGF0ZV9oZWxwLCBTVEFURSBpcyB0aGUgcmVsZXZlbnQgcGFyc2luZyBzdGF0ZS4gIEZMQUdTIGFyZSBmcm9tIHRoZQorKyAgIHNldCBBUkdQX0hFTFBfKi4gIE5BTUUgaXMgd2hhdCB0byB1c2Ugd2hlcmV2ZXIgYSBgcHJvZ3JhbSBuYW1lJyBpcworKyAgIG5lZWRlZC4gKi8KKytzdGF0aWMgdm9pZAorK19oZWxwIChjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwgY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlLCBGSUxFICpzdHJlYW0sCisrICAgICAgIHVuc2lnbmVkIGZsYWdzLCBjaGFyICpuYW1lKQorK3sKKysgIGludCBhbnl0aGluZyA9IDA7ICAgICAgICAgICAgLyogV2hldGhlciB3ZSd2ZSBvdXRwdXQgYW55dGhpbmcuICAqLworKyAgc3RydWN0IGhvbCAqaG9sID0gMDsKKysgIGFyZ3BfZm10c3RyZWFtX3QgZnM7CisrCisrICBpZiAoISBzdHJlYW0pCisrICAgIHJldHVybjsKKysKKysjaWYgX0xJQkMgfHwgKEhBVkVfRkxPQ0tGSUxFICYmIEhBVkVfRlVOTE9DS0ZJTEUpCisrICBmbG9ja2ZpbGUgKHN0cmVhbSk7CisrI2VuZGlmCisrCisrICBmaWxsX2luX3VwYXJhbXMgKHN0YXRlKTsKKysKKysgIGZzID0gX19hcmdwX21ha2VfZm10c3RyZWFtIChzdHJlYW0sIDAsIHVwYXJhbXMucm1hcmdpbiwgMCk7CisrICBpZiAoISBmcykKKysgICAgeworKyNpZiBfTElCQyB8fCAoSEFWRV9GTE9DS0ZJTEUgJiYgSEFWRV9GVU5MT0NLRklMRSkKKysgICAgICBmdW5sb2NrZmlsZSAoc3RyZWFtKTsKKysjZW5kaWYKKysgICAgICByZXR1cm47CisrICAgIH0KKysKKysgIGlmIChmbGFncyAmIChBUkdQX0hFTFBfVVNBR0UgfCBBUkdQX0hFTFBfU0hPUlRfVVNBR0UgfCBBUkdQX0hFTFBfTE9ORykpCisrICAgIHsKKysgICAgICBob2wgPSBhcmdwX2hvbCAoYXJncCwgMCk7CisrCisrICAgICAgLyogSWYgcHJlc2VudCwgdGhlc2Ugb3B0aW9ucyBhbHdheXMgY29tZSBsYXN0LiAgKi8KKysgICAgICBob2xfc2V0X2dyb3VwIChob2wsICJoZWxwIiwgLTEpOworKyAgICAgIGhvbF9zZXRfZ3JvdXAgKGhvbCwgInZlcnNpb24iLCAtMSk7CisrCisrICAgICAgaG9sX3NvcnQgKGhvbCk7CisrICAgIH0KKysKKysgIGlmIChmbGFncyAmIChBUkdQX0hFTFBfVVNBR0UgfCBBUkdQX0hFTFBfU0hPUlRfVVNBR0UpKQorKyAgICAvKiBQcmludCBhIHNob3J0IGBVc2FnZTonIG1lc3NhZ2UuICAqLworKyAgICB7CisrICAgICAgaW50IGZpcnN0X3BhdHRlcm4gPSAxLCBtb3JlX3BhdHRlcm5zOworKyAgICAgIHNpemVfdCBudW1fcGF0dGVybl9sZXZlbHMgPSBhcmdwX2FyZ3NfbGV2ZWxzIChhcmdwKTsKKysgICAgICBjaGFyICpwYXR0ZXJuX2xldmVscyA9IGFsbG9jYSAobnVtX3BhdHRlcm5fbGV2ZWxzKTsKKysKKysgICAgICBtZW1zZXQgKHBhdHRlcm5fbGV2ZWxzLCAwLCBudW1fcGF0dGVybl9sZXZlbHMpOworKworKyAgICAgIGRvCisrICAgICAgIHsKKysgICAgICAgICBpbnQgb2xkX2xtOworKyAgICAgICAgIGludCBvbGRfd20gPSBfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIChmcywgdXBhcmFtcy51c2FnZV9pbmRlbnQpOworKyAgICAgICAgIGNoYXIgKmxldmVscyA9IHBhdHRlcm5fbGV2ZWxzOworKworKyAgICAgICAgIGlmIChmaXJzdF9wYXR0ZXJuKQorKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKGZzLCAiJXMgJXMiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChhcmdwLT5hcmdwX2RvbWFpbiwgIlVzYWdlOiIpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOworKyAgICAgICAgIGVsc2UKKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChmcywgIiVzICVzIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZ2V0dGV4dCAoYXJncC0+YXJncF9kb21haW4sICIgIG9yOiAiKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKKysKKysgICAgICAgICAvKiBXZSBzZXQgdGhlIGxtYXJnaW4gYXMgd2VsbCBhcyB0aGUgd21hcmdpbiwgYmVjYXVzZSBob2xfdXNhZ2UKKysgICAgICAgICAgICBtYW51YWxseSB3cmFwcyBvcHRpb25zIHdpdGggbmV3bGluZSB0byBhdm9pZCBhbm5veWluZyBicmVha3MuICAqLworKyAgICAgICAgIG9sZF9sbSA9IF9fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gKGZzLCB1cGFyYW1zLnVzYWdlX2luZGVudCk7CisrCisrICAgICAgICAgaWYgKGZsYWdzICYgQVJHUF9IRUxQX1NIT1JUX1VTQUdFKQorKyAgICAgICAgICAgLyogSnVzdCBzaG93IHdoZXJlIHRoZSBvcHRpb25zIGdvLiAgKi8KKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgaWYgKGhvbC0+bnVtX2VudHJpZXMgPiAwKQorKyAgICAgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0cyAoZnMsIGRnZXR0ZXh0IChhcmdwLT5hcmdwX2RvbWFpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBbT1BUSU9OLi4uXSIpKTsKKysgICAgICAgICAgIH0KKysgICAgICAgICBlbHNlCisrICAgICAgICAgICAvKiBBY3R1YWxseSBwcmludCB0aGUgb3B0aW9ucy4gICovCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIGhvbF91c2FnZSAoaG9sLCBmcyk7CisrICAgICAgICAgICAgIGZsYWdzIHw9IEFSR1BfSEVMUF9TSE9SVF9VU0FHRTsgLyogQnV0IG9ubHkgZG8gc28gb25jZS4gICovCisrICAgICAgICAgICB9CisrCisrICAgICAgICAgbW9yZV9wYXR0ZXJucyA9IGFyZ3BfYXJnc191c2FnZSAoYXJncCwgc3RhdGUsICZsZXZlbHMsIDEsIGZzKTsKKysKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIChmcywgb2xkX3dtKTsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIChmcywgb2xkX2xtKTsKKysKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKGZzLCAnXG4nKTsKKysgICAgICAgICBhbnl0aGluZyA9IDE7CisrCisrICAgICAgICAgZmlyc3RfcGF0dGVybiA9IDA7CisrICAgICAgIH0KKysgICAgICB3aGlsZSAobW9yZV9wYXR0ZXJucyk7CisrICAgIH0KKysKKysgIGlmIChmbGFncyAmIEFSR1BfSEVMUF9QUkVfRE9DKQorKyAgICBhbnl0aGluZyB8PSBhcmdwX2RvYyAoYXJncCwgc3RhdGUsIDAsIDAsIDEsIGZzKTsKKysKKysgIGlmIChmbGFncyAmIEFSR1BfSEVMUF9TRUUpCisrICAgIHsKKysgICAgICBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiAoZnMsIGRnZXR0ZXh0IChhcmdwLT5hcmdwX2RvbWFpbiwgIlwKKytUcnkgYCVzIC0taGVscCcgb3IgYCVzIC0tdXNhZ2UnIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgbmFtZSk7CisrICAgICAgYW55dGhpbmcgPSAxOworKyAgICB9CisrCisrICBpZiAoZmxhZ3MgJiBBUkdQX0hFTFBfTE9ORykKKysgICAgLyogUHJpbnQgYSBsb25nLCBkZXRhaWxlZCBoZWxwIG1lc3NhZ2UuICAqLworKyAgICB7CisrICAgICAgLyogUHJpbnQgaW5mbyBhYm91dCBhbGwgdGhlIG9wdGlvbnMuICAqLworKyAgICAgIGlmIChob2wtPm51bV9lbnRyaWVzID4gMCkKKysgICAgICAgeworKyAgICAgICAgIGlmIChhbnl0aGluZykKKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoZnMsICdcbicpOworKyAgICAgICAgIGhvbF9oZWxwIChob2wsIHN0YXRlLCBmcyk7CisrICAgICAgICAgYW55dGhpbmcgPSAxOworKyAgICAgICB9CisrICAgIH0KKysKKysgIGlmIChmbGFncyAmIEFSR1BfSEVMUF9QT1NUX0RPQykKKysgICAgLyogUHJpbnQgYW55IGRvY3VtZW50YXRpb24gc3RyaW5ncyBhdCB0aGUgZW5kLiAgKi8KKysgICAgYW55dGhpbmcgfD0gYXJncF9kb2MgKGFyZ3AsIHN0YXRlLCAxLCBhbnl0aGluZywgMCwgZnMpOworKworKyAgaWYgKChmbGFncyAmIEFSR1BfSEVMUF9CVUdfQUREUikgJiYgYXJncF9wcm9ncmFtX2J1Z19hZGRyZXNzKQorKyAgICB7CisrICAgICAgaWYgKGFueXRoaW5nKQorKyAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKGZzLCAnXG4nKTsKKysgICAgICBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiAoZnMsIGRnZXR0ZXh0IChhcmdwLT5hcmdwX2RvbWFpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZXBvcnQgYnVncyB0byAlcy5cbiIpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3BfcHJvZ3JhbV9idWdfYWRkcmVzcyk7CisrICAgICAgYW55dGhpbmcgPSAxOworKyAgICB9CisrCisrI2lmIF9MSUJDIHx8IChIQVZFX0ZMT0NLRklMRSAmJiBIQVZFX0ZVTkxPQ0tGSUxFKQorKyAgZnVubG9ja2ZpbGUgKHN0cmVhbSk7CisrI2VuZGlmCisrCisrICBpZiAoaG9sKQorKyAgICBob2xfZnJlZSAoaG9sKTsKKysKKysgIF9fYXJncF9mbXRzdHJlYW1fZnJlZSAoZnMpOworK30KKysKKysvKiBPdXRwdXQgYSB1c2FnZSBtZXNzYWdlIGZvciBBUkdQIHRvIFNUUkVBTS4gIEZMQUdTIGFyZSBmcm9tIHRoZSBzZXQKKysgICBBUkdQX0hFTFBfKi4gIE5BTUUgaXMgd2hhdCB0byB1c2Ugd2hlcmV2ZXIgYSBgcHJvZ3JhbSBuYW1lJyBpcyBuZWVkZWQuICovCisrdm9pZCBhcmdwX2hlbHAgKGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLCBGSUxFICpzdHJlYW0sCisrICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmbGFncywgY2hhciAqbmFtZSkKKyt7CisrICBfaGVscCAoYXJncCwgMCwgc3RyZWFtLCBmbGFncywgbmFtZSk7CisrfQorKworK2NoYXIgKgorK19fYXJncF9zaG9ydF9wcm9ncmFtX25hbWUgKHZvaWQpCisreworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1BST0dSQU1fSU5WT0NBVElPTl9OQU1FX18KKysvKgorKyAqIHVDbGliYyBwcm92aWRlcyBib3RoIHByb2dyYW1faW52b2NhdGlvbl9uYW1lIGFuZAorKyAqIHByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lCisrICovCisrIHJldHVybiAoY2hhciAqKSBwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZTsKKysjIGVsc2UKKysgIC8qIEZJWE1FOiBXaGF0IG5vdz8gTWlsZXMgc3VnZ2VzdHMgdGhhdCBpdCBpcyBiZXR0ZXIgdG8gdXNlIE5VTEwsCisrICAgICBidXQgY3VycmVudGx5IHRoZSB2YWx1ZSBpcyBwYXNzZWQgb24gZGlyZWN0bHkgdG8gZnB1dHNfdW5sb2NrZWQsCisrICAgICBzbyB0aGF0IHJlcXVpcmVzIG1vcmUgY2hhbmdlcy4gKi8KKysjIGlmIF9fR05VQ19fCisrIyAgd2FybmluZyBObyByZWFzb25hYmxlIHZhbHVlIHRvIHJldHVybgorKyMgZW5kaWYgLyogX19HTlVDX18gKi8KKysgIHJldHVybiAiIjsKKysjIGVuZGlmCisrfQorKworKy8qIE91dHB1dCwgaWYgYXBwcm9wcmlhdGUsIGEgdXNhZ2UgbWVzc2FnZSBmb3IgU1RBVEUgdG8gU1RSRUFNLiAgRkxBR1MgYXJlCisrICAgZnJvbSB0aGUgc2V0IEFSR1BfSEVMUF8qLiAgKi8KKyt2b2lkCisrYXJncF9zdGF0ZV9oZWxwIChjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUsIEZJTEUgKnN0cmVhbSwgdW5zaWduZWQgZmxhZ3MpCisreworKyAgaWYgKCghc3RhdGUgfHwgISAoc3RhdGUtPmZsYWdzICYgQVJHUF9OT19FUlJTKSkgJiYgc3RyZWFtKQorKyAgICB7CisrICAgICAgaWYgKHN0YXRlICYmIChzdGF0ZS0+ZmxhZ3MgJiBBUkdQX0xPTkdfT05MWSkpCisrICAgICAgIGZsYWdzIHw9IEFSR1BfSEVMUF9MT05HX09OTFk7CisrCisrICAgICAgX2hlbHAgKHN0YXRlID8gc3RhdGUtPnJvb3RfYXJncCA6IDAsIHN0YXRlLCBzdHJlYW0sIGZsYWdzLAorKyAgICAgICAgICAgIHN0YXRlID8gc3RhdGUtPm5hbWUgOiBfX2FyZ3Bfc2hvcnRfcHJvZ3JhbV9uYW1lICgpKTsKKysKKysgICAgICBpZiAoIXN0YXRlIHx8ICEgKHN0YXRlLT5mbGFncyAmIEFSR1BfTk9fRVhJVCkpCisrICAgICAgIHsKKysgICAgICAgICBpZiAoZmxhZ3MgJiBBUkdQX0hFTFBfRVhJVF9FUlIpCisrICAgICAgICAgICBleGl0IChhcmdwX2Vycl9leGl0X3N0YXR1cyk7CisrICAgICAgICAgaWYgKGZsYWdzICYgQVJHUF9IRUxQX0VYSVRfT0spCisrICAgICAgICAgICBleGl0ICgwKTsKKysgICAgICAgfQorKyAgfQorK30KKysKKysvKiBJZiBhcHByb3ByaWF0ZSwgcHJpbnQgdGhlIHByaW50ZiBzdHJpbmcgRk1UIGFuZCBmb2xsb3dpbmcgYXJncywgcHJlY2VkZWQKKysgICBieSB0aGUgcHJvZ3JhbSBuYW1lIGFuZCBgOicsIHRvIHN0ZGVyciwgYW5kIGZvbGxvd2VkIGJ5IGEgYFRyeSAuLi4gLS1oZWxwJworKyAgIG1lc3NhZ2UsIHRoZW4gZXhpdCAoMSkuICAqLworK3ZvaWQKKythcmdwX2Vycm9yIChjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorK3sKKysgIGlmICghc3RhdGUgfHwgIShzdGF0ZS0+ZmxhZ3MgJiBBUkdQX05PX0VSUlMpKQorKyAgICB7CisrICAgICAgRklMRSAqc3RyZWFtID0gc3RhdGUgPyBzdGF0ZS0+ZXJyX3N0cmVhbSA6IHN0ZGVycjsKKysKKysgICAgICBpZiAoc3RyZWFtKQorKyAgICAgICB7CisrICAgICAgICAgdmFfbGlzdCBhcDsKKysKKysjaWYgX0xJQkMgfHwgKEhBVkVfRkxPQ0tGSUxFICYmIEhBVkVfRlVOTE9DS0ZJTEUpCisrICAgICAgICAgZmxvY2tmaWxlIChzdHJlYW0pOworKyNlbmRpZgorKworKyAgICAgICAgIHZhX3N0YXJ0IChhcCwgZm10KTsKKysKKysjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9JTl9MSUJJTworKyAgICAgICAgIGNoYXIgKmJ1ZjsKKysKKysgICAgICAgICBpZiAoX0lPX3Zhc3ByaW50ZiAoJmJ1ZiwgZm10LCBhcCkgPCAwKQorKyAgICAgICAgICAgYnVmID0gTlVMTDsKKysKKysgICAgICAgICBfX2Z4cHJpbnRmIChzdHJlYW0sICIlczogJXNcbiIsCisrICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPyBzdGF0ZS0+bmFtZSA6IF9fYXJncF9zaG9ydF9wcm9ncmFtX25hbWUgKCksIGJ1Zik7CisrCisrICAgICAgICAgZnJlZSAoYnVmKTsKKysjZWxzZQorKyAgICAgICAgIGZwdXRzX3VubG9ja2VkIChzdGF0ZSA/IHN0YXRlLT5uYW1lIDogX19hcmdwX3Nob3J0X3Byb2dyYW1fbmFtZSAoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtKTsKKysgICAgICAgICBwdXRjX3VubG9ja2VkICgnOicsIHN0cmVhbSk7CisrICAgICAgICAgcHV0Y191bmxvY2tlZCAoJyAnLCBzdHJlYW0pOworKworKyAgICAgICAgIHZmcHJpbnRmIChzdHJlYW0sIGZtdCwgYXApOworKworKyAgICAgICAgIHB1dGNfdW5sb2NrZWQgKCdcbicsIHN0cmVhbSk7CisrI2VuZGlmCisrCisrICAgICAgICAgYXJncF9zdGF0ZV9oZWxwIChzdGF0ZSwgc3RyZWFtLCBBUkdQX0hFTFBfU1REX0VSUik7CisrCisrICAgICAgICAgdmFfZW5kIChhcCk7CisrCisrI2lmIF9MSUJDIHx8IChIQVZFX0ZMT0NLRklMRSAmJiBIQVZFX0ZVTkxPQ0tGSUxFKQorKyAgICAgICAgIGZ1bmxvY2tmaWxlIChzdHJlYW0pOworKyNlbmRpZgorKyAgICAgICB9CisrICAgIH0KKyt9CisrCisrLyogU2ltaWxhciB0byB0aGUgc3RhbmRhcmQgZ251IGVycm9yLXJlcG9ydGluZyBmdW5jdGlvbiBlcnJvcigpLCBidXQgd2lsbAorKyAgIHJlc3BlY3QgdGhlIEFSR1BfTk9fRVhJVCBhbmQgQVJHUF9OT19FUlJTIGZsYWdzIGluIFNUQVRFLCBhbmQgd2lsbCBwcmludAorKyAgIHRvIFNUQVRFLT5lcnJfc3RyZWFtLiAgVGhpcyBpcyB1c2VmdWwgZm9yIGFyZ3VtZW50IHBhcnNpbmcgY29kZSB0aGF0IGlzCisrICAgc2hhcmVkIGJldHdlZW4gcHJvZ3JhbSBzdGFydHVwICh3aGVuIGV4aXRpbmcgaXMgZGVzaXJlZCkgYW5kIHJ1bnRpbWUKKysgICBvcHRpb24gcGFyc2luZyAod2hlbiB0eXBpY2FsbHkgYW4gZXJyb3IgY29kZSBpcyByZXR1cm5lZCBpbnN0ZWFkKS4gIFRoZQorKyAgIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIGZ1bmN0aW9uIGFuZCBhcmdwX2Vycm9yIGlzIHRoYXQgdGhlIGxhdHRlciBpcyBmb3IKKysgICAqcGFyc2luZyBlcnJvcnMqLCBhbmQgdGhlIGZvcm1lciBpcyBmb3Igb3RoZXIgcHJvYmxlbXMgdGhhdCBvY2N1ciBkdXJpbmcKKysgICBwYXJzaW5nIGJ1dCBkb24ndCByZWZsZWN0IGEgKHN5bnRhY3RpYykgcHJvYmxlbSB3aXRoIHRoZSBpbnB1dC4gICovCisrdm9pZAorK2FyZ3BfZmFpbHVyZSAoY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlLCBpbnQgc3RhdHVzLCBpbnQgZXJybnVtLAorKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorK3sKKysgIGlmICghc3RhdGUgfHwgIShzdGF0ZS0+ZmxhZ3MgJiBBUkdQX05PX0VSUlMpKQorKyAgICB7CisrICAgICAgRklMRSAqc3RyZWFtID0gc3RhdGUgPyBzdGF0ZS0+ZXJyX3N0cmVhbSA6IHN0ZGVycjsKKysKKysgICAgICBpZiAoc3RyZWFtKQorKyAgICAgICB7CisrI2lmIF9MSUJDIHx8IChIQVZFX0ZMT0NLRklMRSAmJiBIQVZFX0ZVTkxPQ0tGSUxFKQorKyAgICAgICAgIGZsb2NrZmlsZSAoc3RyZWFtKTsKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9JTl9MSUJJTworKyAgICAgICAgIF9fZnhwcmludGYgKHN0cmVhbSwgIiVzIiwKKysgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA/IHN0YXRlLT5uYW1lIDogX19hcmdwX3Nob3J0X3Byb2dyYW1fbmFtZSAoKSk7CisrI2Vsc2UKKysgICAgICAgICBmcHV0c191bmxvY2tlZCAoc3RhdGUgPyBzdGF0ZS0+bmFtZSA6IF9fYXJncF9zaG9ydF9wcm9ncmFtX25hbWUgKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSk7CisrI2VuZGlmCisrCisrICAgICAgICAgaWYgKGZtdCkKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgdmFfbGlzdCBhcDsKKysKKysgICAgICAgICAgICAgdmFfc3RhcnQgKGFwLCBmbXQpOworKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCisrICAgICAgICAgICAgIGNoYXIgKmJ1ZjsKKysKKysgICAgICAgICAgICAgaWYgKF9JT192YXNwcmludGYgKCZidWYsIGZtdCwgYXApIDwgMCkKKysgICAgICAgICAgICAgICBidWYgPSBOVUxMOworKworKyAgICAgICAgICAgICBfX2Z4cHJpbnRmIChzdHJlYW0sICI6ICVzIiwgYnVmKTsKKysKKysgICAgICAgICAgICAgZnJlZSAoYnVmKTsKKysjZWxzZQorKyAgICAgICAgICAgICBwdXRjX3VubG9ja2VkICgnOicsIHN0cmVhbSk7CisrICAgICAgICAgICAgIHB1dGNfdW5sb2NrZWQgKCcgJywgc3RyZWFtKTsKKysKKysgICAgICAgICAgICAgdmZwcmludGYgKHN0cmVhbSwgZm10LCBhcCk7CisrI2VuZGlmCisrCisrICAgICAgICAgICAgIHZhX2VuZCAoYXApOworKyAgICAgICAgICAgfQorKworKyAgICAgICAgIGlmIChlcnJudW0pCisrICAgICAgICAgICB7CisrI2lmIChkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPKSB8fCBkZWZpbmVkIEhBVkVfU1RSRVJST1JfUgorKyAgICAgICAgICAgICBjaGFyIGJ1ZlsyMDBdOworKyNlbmRpZgorKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCisrICAgICAgICAgICAgIF9fZnhwcmludGYgKHN0cmVhbSwgIjogJXMiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcl9yIChlcnJudW0sIGJ1Ziwgc2l6ZW9mIChidWYpKSk7CisrI2Vsc2UKKysgICAgICAgICAgICAgcHV0Y191bmxvY2tlZCAoJzonLCBzdHJlYW0pOworKyAgICAgICAgICAgICBwdXRjX3VubG9ja2VkICgnICcsIHN0cmVhbSk7CisrIyBpZmRlZiBIQVZFX1NUUkVSUk9SX1IKKysgICAgICAgICAgICAgZnB1dHMgKHN0cmVycm9yX3IgKGVycm51bSwgYnVmLCBzaXplb2YgKGJ1ZikpLCBzdHJlYW0pOworKyMgZWxzZQorKyAgICAgICAgICAgICBmcHV0cyAoc3RyZXJyb3IgKGVycm51bSksIHN0cmVhbSk7CisrIyBlbmRpZgorKyNlbmRpZgorKyAgICAgICAgICAgfQorKworKyNpZmRlZiBVU0VfSU5fTElCSU8KKysgICAgICAgICBpZiAoX0lPX2Z3aWRlIChzdHJlYW0sIDApID4gMCkKKysgICAgICAgICAgIHB1dHdjX3VubG9ja2VkIChMJ1xuJywgc3RyZWFtKTsKKysgICAgICAgICBlbHNlCisrI2VuZGlmCisrICAgICAgICAgICBwdXRjX3VubG9ja2VkICgnXG4nLCBzdHJlYW0pOworKworKyNpZiBfTElCQyB8fCAoSEFWRV9GTE9DS0ZJTEUgJiYgSEFWRV9GVU5MT0NLRklMRSkKKysgICAgICAgICBmdW5sb2NrZmlsZSAoc3RyZWFtKTsKKysjZW5kaWYKKysKKysgICAgICAgICBpZiAoc3RhdHVzICYmICghc3RhdGUgfHwgIShzdGF0ZS0+ZmxhZ3MgJiBBUkdQX05PX0VYSVQpKSkKKysgICAgICAgICAgIGV4aXQgKHN0YXR1cyk7CisrICAgICAgIH0KKysgICAgfQorK30KK2RpZmYgLS1naXQgYS9saWJ1YXJncC9hcmdwLXBhcnNlLmMgYi9saWJ1YXJncC9hcmdwLXBhcnNlLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi44NmIyYjI0CistLS0gL2Rldi9udWxsCisrKysgYi9saWJ1YXJncC9hcmdwLXBhcnNlLmMKK0BAIC0wLDAgKzEsOTQ5IEBACisrLyogSGllcmFyY2hpYWwgYXJndW1lbnQgcGFyc2luZywgbGF5ZXJlZCBvdmVyIGdldG9wdAorKyAgIENvcHlyaWdodCAoQykgMTk5NS0yMDAwLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzIGF0IGdudS5haS5taXQuZWR1Pi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4KKysKKysgICBNb2RpZmllZCBmb3IgdUNsaWJjIGJ5OiBTYWx2YXRvcmUgQ3JvIDxzYWx2YXRvcmUuY3JvIGF0IHN0LmNvbT4KKysqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKy8qIEFJWCByZXF1aXJlcyB0aGlzIHRvIGJlIHRoZSBmaXJzdCB0aGluZyBpbiB0aGUgZmlsZS4gICovCisrI2lmbmRlZiBfX0dOVUNfXworKyMgaWYgSEFWRV9BTExPQ0FfSCB8fCBkZWZpbmVkIF9MSUJDCisrIyAgaW5jbHVkZSA8YWxsb2NhLmg+CisrIyBlbHNlCisrIyAgaWZkZWYgX0FJWAorKyNwcmFnbWEgYWxsb2NhCisrIyAgZWxzZQorKyMgICBpZm5kZWYgYWxsb2NhIC8qIHByZWRlZmluZWQgYnkgSFAgY2MgK09saWJjYWxscyAqLworK2NoYXIgKmFsbG9jYSAoKTsKKysjICAgZW5kaWYKKysjICBlbmRpZgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDx1bmlzdGQuaD4KKysjaW5jbHVkZSA8bGltaXRzLmg+CisrI2luY2x1ZGUgPGdldG9wdC5oPgorKyNpbmNsdWRlIDxiaXRzL2dldG9wdF9pbnQuaD4KKysKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZuZGVmIF8KKysvKiBUaGlzIGlzIGZvciBvdGhlciBHTlUgZGlzdHJpYnV0aW9ucyB3aXRoIGludGVybmF0aW9uYWxpemVkIG1lc3NhZ2VzLgorKyAgIFdoZW4gY29tcGlsaW5nIGxpYmMsIHRoZSBfIG1hY3JvIGlzIHByZWRlZmluZWQuICAqLworKyMgaWYgKGRlZmluZWQgSEFWRV9MSUJJTlRMX0ggfHwgZGVmaW5lZCBfTElCQykgJiYgZGVmaW5lZCBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyMgIGluY2x1ZGUgPGxpYmludGwuaD4KKysjICBpZmRlZiBfTElCQworKyMgICB1bmRlZiBkZ2V0dGV4dAorKyMgICBkZWZpbmUgZGdldHRleHQoZG9tYWluLCBtc2dpZCkgXAorKyAgSU5UVVNFKF9fZGNnZXR0ZXh0KSAoZG9tYWluLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrIyAgZW5kaWYKKysjIGVsc2UKKysjICBkZWZpbmUgZGdldHRleHQoZG9tYWluLCBtc2dpZCkgKG1zZ2lkKQorKyMgIGRlZmluZSBnZXR0ZXh0KG1zZ2lkKSAobXNnaWQpCisrIyBlbmRpZgorKyNlbmRpZgorKyNpZm5kZWYgTl8KKysjIGRlZmluZSBOXyhtc2dpZCkgKG1zZ2lkKQorKyNlbmRpZgorKworKyNpbmNsdWRlIDxhcmdwLmg+CisrCisrLyogR2V0b3B0IHJldHVybiB2YWx1ZXMuICAqLworKyNkZWZpbmUgS0VZX0VORCAoLTEpICAgICAgICAgICAvKiBUaGUgZW5kIG9mIHRoZSBvcHRpb25zLiAgKi8KKysjZGVmaW5lIEtFWV9BUkcgMSAgICAgICAgICAgICAgLyogQSBub24tb3B0aW9uIGFyZ3VtZW50LiAgKi8KKysjZGVmaW5lIEtFWV9FUlIgJz8nICAgICAgICAgICAgLyogQW4gZXJyb3IgcGFyc2luZyB0aGUgb3B0aW9ucy4gICovCisrCisrLyogVGhlIG1ldGEtYXJndW1lbnQgdXNlZCB0byBwcmV2ZW50IGFueSBmdXJ0aGVyIGFyZ3VtZW50cyBiZWluZyBpbnRlcnByZXRlZAorKyAgIGFzIG9wdGlvbnMuICAqLworKyNkZWZpbmUgUVVPVEUgIi0tIgorKworKy8qIFRoZSBudW1iZXIgb2YgYml0cyB3ZSBzdGVhbCBpbiBhIGxvbmctb3B0aW9uIHZhbHVlIGZvciBvdXIgb3duIHVzZS4gICovCisrI2RlZmluZSBHUk9VUF9CSVRTIENIQVJfQklUCisrCisrLyogVGhlIG51bWJlciBvZiBiaXRzIGF2YWlsYWJsZSBmb3IgdGhlIHVzZXIgdmFsdWUuICAqLworKyNkZWZpbmUgVVNFUl9CSVRTICgoc2l6ZW9mICgoc3RydWN0IG9wdGlvbiAqKTApLT52YWwgKiBDSEFSX0JJVCkgLSBHUk9VUF9CSVRTKQorKyNkZWZpbmUgVVNFUl9NQVNLICgoMSA8PCBVU0VSX0JJVFMpIC0gMSkKKysKKysvKiBFWiBhbGlhcyBmb3IgQVJHUF9FUlJfVU5LTk9XTi4gICovCisrI2RlZmluZSBFQkFES0VZIEFSR1BfRVJSX1VOS05PV04KKysKKysvKiBEZWZhdWx0IG9wdGlvbnMuICAqLworKworKy8qIFdoZW4gYXJncCBpcyBnaXZlbiB0aGUgLS1IQU5HIHN3aXRjaCwgX0FSR1BfSEFORyBpcyBzZXQgYW5kIGFyZ3Agd2lsbCBzbGVlcAorKyAgIGZvciBvbmUgc2Vjb25kIGludGVydmFscywgZGVjcmVtZW50aW5nIF9BUkdQX0hBTkcgdW50aWwgaXQncyB6ZXJvLiAgVGh1cworKyAgIHlvdSBjYW4gZm9yY2UgdGhlIHByb2dyYW0gdG8gY29udGludWUgYnkgYXR0YWNoaW5nIGEgZGVidWdnZXIgYW5kIHNldHRpbmcKKysgICBpdCB0byAwIHlvdXJzZWxmLiAgKi8KKytzdGF0aWMgdm9sYXRpbGUgaW50IF9hcmdwX2hhbmc7CisrCisrI2RlZmluZSBPUFRfUFJPR05BTUUgICAtMgorKyNkZWZpbmUgT1BUX1VTQUdFICAgICAgLTMKKysjZGVmaW5lIE9QVF9IQU5HICAgICAgIC00CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBhcmdwX2RlZmF1bHRfb3B0aW9uc1tdID0KKyt7CisrICB7ImhlbHAiLCAgICAgICAnPycsICAgICAgICAgIDAsIDAsICBOXygiR2l2ZSB0aGlzIGhlbHAgbGlzdCIpLCAtMX0sCisrICB7InVzYWdlIiwgICAgICBPUFRfVVNBR0UsICAgIDAsIDAsICBOXygiR2l2ZSBhIHNob3J0IHVzYWdlIG1lc3NhZ2UiKX0sCisrICB7InByb2dyYW0tbmFtZSIsT1BUX1BST0dOQU1FLCJOQU1FIiwgT1BUSU9OX0hJRERFTiwgTl8oIlNldCB0aGUgcHJvZ3JhbSBuYW1lIil9LAorKyAgeyJIQU5HIiwgICAgICAgT1BUX0hBTkcsICAgICJTRUNTIiwgT1BUSU9OX0FSR19PUFRJT05BTCB8IE9QVElPTl9ISURERU4sCisrICAgICBOXygiSGFuZyBmb3IgU0VDUyBzZWNvbmRzIChkZWZhdWx0IDM2MDApIil9LAorKyAgezAsIDB9CisrfTsKKysKKytzdGF0aWMgZXJyb3JfdAorK2FyZ3BfZGVmYXVsdF9wYXJzZXIgKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQorK3sKKysgIHN3aXRjaCAoa2V5KQorKyAgICB7CisrICAgIGNhc2UgJz8nOgorKyAgICAgIGFyZ3Bfc3RhdGVfaGVscCAoc3RhdGUsIHN0YXRlLT5vdXRfc3RyZWFtLCBBUkdQX0hFTFBfU1REX0hFTFApOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIE9QVF9VU0FHRToKKysgICAgICBhcmdwX3N0YXRlX2hlbHAgKHN0YXRlLCBzdGF0ZS0+b3V0X3N0cmVhbSwKKysgICAgICAgICAgICAgICAgICAgICAgQVJHUF9IRUxQX1VTQUdFIHwgQVJHUF9IRUxQX0VYSVRfT0spOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIE9QVF9QUk9HTkFNRTogICAgICAgICAvKiBTZXQgdGhlIHByb2dyYW0gbmFtZS4gICovCisrI2lmIGRlZmluZWQgX0xJQkMgfHwgSEFWRV9ERUNMX1BST0dSQU1fSU5WT0NBVElPTl9OQU1FCisrICAgICAgcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUgPSBhcmc7CisrI2VuZGlmCisrICAgICAgLyogW05vdGUgdGhhdCBzb21lIHN5c3RlbXMgb25seSBoYXZlIFBST0dSQU1fSU5WT0NBVElPTl9TSE9SVF9OQU1FIChha2EKKysgICAgICAgIF9fUFJPR05BTUUpLCBpbiB3aGljaCBjYXNlLCBQUk9HUkFNX0lOVk9DQVRJT05fTkFNRSBpcyBqdXN0IGRlZmluZWQKKysgICAgICAgIHRvIGJlIHRoYXQsIHNvIHdlIGhhdmUgdG8gYmUgYSBiaXQgY2FyZWZ1bCBoZXJlLl0gICovCisrCisrICAgICAgLyogVXBkYXRlIHdoYXQgd2UgdXNlIGZvciBtZXNzYWdlcy4gICovCisrICAgICAgc3RhdGUtPm5hbWUgPSBzdHJyY2hyIChhcmcsICcvJyk7CisrICAgICAgaWYgKHN0YXRlLT5uYW1lKQorKyAgICAgICBzdGF0ZS0+bmFtZSsrOworKyAgICAgIGVsc2UKKysgICAgICAgc3RhdGUtPm5hbWUgPSBhcmc7CisrCisrI2lmIGRlZmluZWQgX0xJQkMgfHwgSEFWRV9ERUNMX1BST0dSQU1fSU5WT0NBVElPTl9TSE9SVF9OQU1FCisrICAgICAgcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWUgPSBzdGF0ZS0+bmFtZTsKKysjZW5kaWYKKysKKysgICAgICBpZiAoKHN0YXRlLT5mbGFncyAmIChBUkdQX1BBUlNFX0FSR1YwIHwgQVJHUF9OT19FUlJTKSkKKysgICAgICAgICA9PSBBUkdQX1BBUlNFX0FSR1YwKQorKyAgICAgICAvKiBVcGRhdGUgd2hhdCBnZXRvcHQgdXNlcyB0b28uICAqLworKyAgICAgICBzdGF0ZS0+YXJndlswXSA9IGFyZzsKKysKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSBPUFRfSEFORzoKKysgICAgICBfYXJncF9oYW5nID0gYXRvaSAoYXJnID8gYXJnIDogIjM2MDAiKTsKKysgICAgICB3aGlsZSAoX2FyZ3BfaGFuZy0tID4gMCkKKysgICAgICAgc2xlZXAgKDEpOworKyAgICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBFQkFES0VZOworKyAgICB9CisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwIGFyZ3BfZGVmYXVsdF9hcmdwID0KKysgIHthcmdwX2RlZmF1bHRfb3B0aW9ucywgJmFyZ3BfZGVmYXVsdF9wYXJzZXIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICJsaWJjIn07CisrCisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBhcmdwX3ZlcnNpb25fb3B0aW9uc1tdID0KKyt7CisrICB7InZlcnNpb24iLCAgICAnVicsICAgICAgICAgIDAsIDAsICBOXygiUHJpbnQgcHJvZ3JhbSB2ZXJzaW9uIiksIC0xfSwKKysgIHswLCAwfQorK307CisrCisrc3RhdGljIGVycm9yX3QKKythcmdwX3ZlcnNpb25fcGFyc2VyIChpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKKyt7CisrICBzd2l0Y2ggKGtleSkKKysgICAgeworKyAgICBjYXNlICdWJzoKKysgICAgICBpZiAoYXJncF9wcm9ncmFtX3ZlcnNpb25faG9vaykKKysgICAgICAgKCphcmdwX3Byb2dyYW1fdmVyc2lvbl9ob29rKSAoc3RhdGUtPm91dF9zdHJlYW0sIHN0YXRlKTsKKysgICAgICBlbHNlIGlmIChhcmdwX3Byb2dyYW1fdmVyc2lvbikKKysgICAgICAgZnByaW50ZiAoc3RhdGUtPm91dF9zdHJlYW0sICIlc1xuIiwgYXJncF9wcm9ncmFtX3ZlcnNpb24pOworKyAgICAgIGVsc2UKKysgICAgICAgYXJncF9lcnJvciAoc3RhdGUsIGRnZXR0ZXh0IChzdGF0ZS0+cm9vdF9hcmdwLT5hcmdwX2RvbWFpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoUFJPR1JBTSBFUlJPUikgTm8gdmVyc2lvbiBrbm93biE/IikpOworKyAgICAgIGlmICghIChzdGF0ZS0+ZmxhZ3MgJiBBUkdQX05PX0VYSVQpKQorKyAgICAgICBleGl0ICgwKTsKKysgICAgICBicmVhazsKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gRUJBREtFWTsKKysgICAgfQorKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncCBhcmdwX3ZlcnNpb25fYXJncCA9CisrICB7YXJncF92ZXJzaW9uX29wdGlvbnMsICZhcmdwX3ZlcnNpb25fcGFyc2VyLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAibGliYyJ9OworKworKy8qIFJldHVybnMgdGhlIG9mZnNldCBpbnRvIHRoZSBnZXRvcHQgbG9uZyBvcHRpb25zIGFycmF5IExPTkdfT1BUSU9OUyBvZiBhCisrICAgbG9uZyBvcHRpb24gd2l0aCBjYWxsZWQgTkFNRSwgb3IgLTEgaWYgbm9uZSBpcyBmb3VuZC4gIFBhc3NpbmcgTlVMTCBhcworKyAgIE5BTUUgd2lsbCByZXR1cm4gdGhlIG51bWJlciBvZiBvcHRpb25zLiAgKi8KKytzdGF0aWMgaW50CisrZmluZF9sb25nX29wdGlvbiAoc3RydWN0IG9wdGlvbiAqbG9uZ19vcHRpb25zLCBjb25zdCBjaGFyICpuYW1lKQorK3sKKysgIHN0cnVjdCBvcHRpb24gKmwgPSBsb25nX29wdGlvbnM7CisrICB3aGlsZSAobC0+bmFtZSAhPSBOVUxMKQorKyAgICBpZiAobmFtZSAhPSBOVUxMICYmIHN0cmNtcCAobC0+bmFtZSwgbmFtZSkgPT0gMCkKKysgICAgICByZXR1cm4gbCAtIGxvbmdfb3B0aW9uczsKKysgICAgZWxzZQorKyAgICAgIGwrKzsKKysgIGlmIChuYW1lID09IE5VTEwpCisrICAgIHJldHVybiBsIC0gbG9uZ19vcHRpb25zOworKyAgZWxzZQorKyAgICByZXR1cm4gLTE7CisrfQorKworKworKy8qIFRoZSBzdGF0ZSBvZiBhIGBncm91cCcgZHVyaW5nIHBhcnNpbmcuICBFYWNoIGdyb3VwIGNvcnJlc3BvbmRzIHRvIGEKKysgICBwYXJ0aWN1bGFyIGFyZ3Agc3RydWN0dXJlIGZyb20gdGhlIHRyZWUgb2Ygc3VjaCBkZXNjZW5kaW5nIGZyb20gdGhlIHRvcAorKyAgIGxldmVsIGFyZ3AgcGFzc2VkIHRvIGFyZ3BfcGFyc2UuICAqLworK3N0cnVjdCBncm91cAorK3sKKysgIC8qIFRoaXMgZ3JvdXAncyBwYXJzaW5nIGZ1bmN0aW9uLiAgKi8KKysgIGFyZ3BfcGFyc2VyX3QgcGFyc2VyOworKworKyAgLyogV2hpY2ggYXJncCB0aGlzIGdyb3VwIGlzIGZyb20uICAqLworKyAgY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3A7CisrCisrICAvKiBQb2ludHMgdG8gdGhlIHBvaW50IGluIFNIT1JUX09QVFMgY29ycmVzcG9uZGluZyB0byB0aGUgZW5kIG9mIHRoZSBzaG9ydAorKyAgICAgb3B0aW9ucyBmb3IgdGhpcyBncm91cC4gIFdlIHVzZSBpdCB0byBkZXRlcm1pbmUgZnJvbSB3aGljaCBncm91cCBhCisrICAgICBwYXJ0aWN1bGFyIHNob3J0IG9wdGlvbnMgaXMgZnJvbS4gICovCisrICBjaGFyICpzaG9ydF9lbmQ7CisrCisrICAvKiBUaGUgbnVtYmVyIG9mIG5vbi1vcHRpb24gYXJncyBzdWNlc3NmdWxseSBoYW5kbGVkIGJ5IHRoaXMgcGFyc2VyLiAgKi8KKysgIHVuc2lnbmVkIGFyZ3NfcHJvY2Vzc2VkOworKworKyAgLyogVGhpcyBncm91cCdzIHBhcnNlcidzIHBhcmVudCdzIGdyb3VwLiAgKi8KKysgIHN0cnVjdCBncm91cCAqcGFyZW50OworKyAgdW5zaWduZWQgcGFyZW50X2luZGV4OyAgICAgICAvKiBBbmQgdGhlIG91ciBwb3NpdGlvbiBpbiB0aGUgcGFyZW50LiAgICovCisrCisrICAvKiBUaGVzZSBmaWVsZHMgYXJlIHN3YXBwZWQgaW50byBhbmQgb3V0IG9mIHRoZSBzdGF0ZSBzdHJ1Y3R1cmUgd2hlbgorKyAgICAgY2FsbGluZyB0aGlzIGdyb3VwJ3MgcGFyc2VyLiAgKi8KKysgIHZvaWQgKmlucHV0LCAqKmNoaWxkX2lucHV0czsKKysgIHZvaWQgKmhvb2s7CisrfTsKKysKKysvKiBDYWxsIEdST1VQJ3MgcGFyc2VyIHdpdGggS0VZIGFuZCBBUkcsIHN3YXBwaW5nIGFueSBncm91cC1zcGVjaWZpYyBpbmZvCisrICAgZnJvbSBTVEFURSBiZWZvcmUgY2FsbGluZywgYW5kIGJhY2sgaW50byBzdGF0ZSBhZnRlcndhcmRzLiAgSWYgR1JPVVAgaGFzCisrICAgbm8gcGFyc2VyLCBFQkFES0VZIGlzIHJldHVybmVkLiAgKi8KKytzdGF0aWMgZXJyb3JfdAorK2dyb3VwX3BhcnNlIChzdHJ1Y3QgZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUsIGludCBrZXksIGNoYXIgKmFyZykKKyt7CisrICBpZiAoZ3JvdXAtPnBhcnNlcikKKysgICAgeworKyAgICAgIGVycm9yX3QgZXJyOworKyAgICAgIHN0YXRlLT5ob29rID0gZ3JvdXAtPmhvb2s7CisrICAgICAgc3RhdGUtPmlucHV0ID0gZ3JvdXAtPmlucHV0OworKyAgICAgIHN0YXRlLT5jaGlsZF9pbnB1dHMgPSBncm91cC0+Y2hpbGRfaW5wdXRzOworKyAgICAgIHN0YXRlLT5hcmdfbnVtID0gZ3JvdXAtPmFyZ3NfcHJvY2Vzc2VkOworKyAgICAgIGVyciA9ICgqZ3JvdXAtPnBhcnNlcikoa2V5LCBhcmcsIHN0YXRlKTsKKysgICAgICBncm91cC0+aG9vayA9IHN0YXRlLT5ob29rOworKyAgICAgIHJldHVybiBlcnI7CisrICAgIH0KKysgIGVsc2UKKysgICAgcmV0dXJuIEVCQURLRVk7CisrfQorKworK3N0cnVjdCBwYXJzZXIKKyt7CisrICBjb25zdCBzdHJ1Y3QgYXJncCAqYXJncDsKKysKKysgIC8qIFNIT1JUX09QVFMgaXMgdGhlIGdldG9wdCBzaG9ydCBvcHRpb25zIHN0cmluZyBmb3IgdGhlIHVuaW9uIG9mIGFsbCB0aGUKKysgICAgIGdyb3VwcyBvZiBvcHRpb25zLiAgKi8KKysgIGNoYXIgKnNob3J0X29wdHM7CisrICAvKiBMT05HX09QVFMgaXMgdGhlIGFycmF5IG9mIGdldG9wIGxvbmcgb3B0aW9uIHN0cnVjdHVyZXMgZm9yIHRoZSB1bmlvbiBvZgorKyAgICAgYWxsIHRoZSBncm91cHMgb2Ygb3B0aW9ucy4gICovCisrICBzdHJ1Y3Qgb3B0aW9uICpsb25nX29wdHM7CisrICAvKiBPUFRfREFUQSBpcyB0aGUgZ2V0b3B0IGRhdGEgdXNlZCBmb3IgdGhlIHJlLWVudHJhbnQgZ2V0b3B0LiAgKi8KKysgIHN0cnVjdCBfZ2V0b3B0X2RhdGEgb3B0X2RhdGE7CisrCisrICAvKiBTdGF0ZXMgb2YgdGhlIHZhcmlvdXMgcGFyc2luZyBncm91cHMuICAqLworKyAgc3RydWN0IGdyb3VwICpncm91cHM7CisrICAvKiBUaGUgZW5kIG9mIHRoZSBHUk9VUFMgYXJyYXkuICAqLworKyAgc3RydWN0IGdyb3VwICplZ3JvdXA7CisrICAvKiBBbiB2ZWN0b3IgY29udGFpbmluZyBzdG9yYWdlIGZvciB0aGUgQ0hJTERfSU5QVVRTIGZpZWxkIGluIGFsbCBncm91cHMuICAqLworKyAgdm9pZCAqKmNoaWxkX2lucHV0czsKKysKKysgIC8qIFRydWUgaWYgd2UgdGhpbmsgdXNpbmcgZ2V0b3B0IGlzIHN0aWxsIHVzZWZ1bDsgaWYgZmFsc2UsIHRoZW4KKysgICAgIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIGp1c3QgcGFzc2VkIHZlcmJhdGltIHdpdGggQVJHUF9LRVlfQVJHLiAgVGhpcyBpcworKyAgICAgY2xlYXJlZCB3aGVuZXZlciBnZXRvcHQgcmV0dXJucyBLRVlfRU5ELCBidXQgbWF5IGJlIHNldCBhZ2FpbiBpZiB0aGUgdXNlcgorKyAgICAgbW92ZXMgdGhlIG5leHQgYXJndW1lbnQgcG9pbnRlciBiYWNrd2FyZHMuICAqLworKyAgaW50IHRyeV9nZXRvcHQ7CisrCisrICAvKiBTdGF0ZSBibG9jayBzdXBwbGllZCB0byBwYXJzaW5nIHJvdXRpbmVzLiAgKi8KKysgIHN0cnVjdCBhcmdwX3N0YXRlIHN0YXRlOworKworKyAgLyogTWVtb3J5IHVzZWQgYnkgdGhpcyBwYXJzZXIuICAqLworKyAgdm9pZCAqc3RvcmFnZTsKKyt9OworKworKy8qIFRoZSBuZXh0IHVzYWJsZSBlbnRyaWVzIGluIHRoZSB2YXJpb3VzIHBhcnNlciB0YWJsZXMgYmVpbmcgZmlsbGVkIGluIGJ5CisrICAgY29udmVydF9vcHRpb25zLiAgKi8KKytzdHJ1Y3QgcGFyc2VyX2NvbnZlcnRfc3RhdGUKKyt7CisrICBzdHJ1Y3QgcGFyc2VyICpwYXJzZXI7CisrICBjaGFyICpzaG9ydF9lbmQ7CisrICBzdHJ1Y3Qgb3B0aW9uICpsb25nX2VuZDsKKysgIHZvaWQgKipjaGlsZF9pbnB1dHNfZW5kOworK307CisrCisrLyogQ29udmVydHMgYWxsIG9wdGlvbnMgaW4gQVJHUCAod2hpY2ggaXMgcHV0IGluIEdST1VQKSBhbmQgYW5jZXN0b3JzCisrICAgaW50byBnZXRvcHQgb3B0aW9ucyBzdG9yZWQgaW4gU0hPUlRfT1BUUyBhbmQgTE9OR19PUFRTOyBTSE9SVF9FTkQgYW5kCisrICAgQ1ZULT5MT05HX0VORCBhcmUgdGhlIHBvaW50cyBhdCB3aGljaCBuZXcgb3B0aW9ucyBhcmUgYWRkZWQuICBSZXR1cm5zIHRoZQorKyAgIG5leHQgdW51c2VkIGdyb3VwIGVudHJ5LiAgQ1ZUIGhvbGRzIHN0YXRlIHVzZWQgZHVyaW5nIHRoZSBjb252ZXJzaW9uLiAgKi8KKytzdGF0aWMgc3RydWN0IGdyb3VwICoKKytjb252ZXJ0X29wdGlvbnMgKGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLAorKyAgICAgICAgICAgICAgICBzdHJ1Y3QgZ3JvdXAgKnBhcmVudCwgdW5zaWduZWQgcGFyZW50X2luZGV4LAorKyAgICAgICAgICAgICAgICBzdHJ1Y3QgZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgcGFyc2VyX2NvbnZlcnRfc3RhdGUgKmN2dCkKKyt7CisrICAvKiBSRUFMIGlzIHRoZSBtb3N0IHJlY2VudCBub24tYWxpYXMgdmFsdWUgb2YgT1BULiAgKi8KKysgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqcmVhbCA9IGFyZ3AtPm9wdGlvbnM7CisrICBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCAqY2hpbGRyZW4gPSBhcmdwLT5jaGlsZHJlbjsKKysKKysgIGlmIChyZWFsIHx8IGFyZ3AtPnBhcnNlcikKKysgICAgeworKyAgICAgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0OworKworKyAgICAgIGlmIChyZWFsKQorKyAgICAgICBmb3IgKG9wdCA9IHJlYWw7ICFfX29wdGlvbl9pc19lbmQgKG9wdCk7IG9wdCsrKQorKyAgICAgICAgIHsKKysgICAgICAgICAgIGlmICghIChvcHQtPmZsYWdzICYgT1BUSU9OX0FMSUFTKSkKKysgICAgICAgICAgICAgLyogT1BUIGlzbid0IGFuIGFsaWFzLCBzbyB3ZSBjYW4gdXNlIHZhbHVlcyBmcm9tIGl0LiAgKi8KKysgICAgICAgICAgICAgcmVhbCA9IG9wdDsKKysKKysgICAgICAgICAgIGlmICghIChyZWFsLT5mbGFncyAmIE9QVElPTl9ET0MpKQorKyAgICAgICAgICAgICAvKiBBIHJlYWwgb3B0aW9uIChub3QganVzdCBkb2N1bWVudGF0aW9uKS4gICovCisrICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICBpZiAoX19vcHRpb25faXNfc2hvcnQgKG9wdCkpCisrICAgICAgICAgICAgICAgICAvKiBPUFQgY2FuIGJlIHVzZWQgYXMgYSBzaG9ydCBvcHRpb24uICAqLworKyAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAqY3Z0LT5zaG9ydF9lbmQrKyA9IG9wdC0+a2V5OworKyAgICAgICAgICAgICAgICAgICBpZiAocmVhbC0+YXJnKQorKyAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICpjdnQtPnNob3J0X2VuZCsrID0gJzonOworKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWwtPmZsYWdzICYgT1BUSU9OX0FSR19PUFRJT05BTCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgKmN2dC0+c2hvcnRfZW5kKysgPSAnOic7CisrICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAqY3Z0LT5zaG9ydF9lbmQgPSAnXDAnOyAvKiBrZWVwIDAgdGVybWluYXRlZCAqLworKyAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgIGlmIChvcHQtPm5hbWUKKysgICAgICAgICAgICAgICAgICAgJiYgZmluZF9sb25nX29wdGlvbiAoY3Z0LT5wYXJzZXItPmxvbmdfb3B0cywgb3B0LT5uYW1lKSA8IDApCisrICAgICAgICAgICAgICAgICAvKiBPUFQgY2FuIGJlIHVzZWQgYXMgYSBsb25nIG9wdGlvbi4gICovCisrICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgIGN2dC0+bG9uZ19lbmQtPm5hbWUgPSBvcHQtPm5hbWU7CisrICAgICAgICAgICAgICAgICAgIGN2dC0+bG9uZ19lbmQtPmhhc19hcmcgPQorKyAgICAgICAgICAgICAgICAgICAgIChyZWFsLT5hcmcKKysgICAgICAgICAgICAgICAgICAgICAgPyAocmVhbC0+ZmxhZ3MgJiBPUFRJT05fQVJHX09QVElPTkFMCisrICAgICAgICAgICAgICAgICAgICAgICAgID8gb3B0aW9uYWxfYXJndW1lbnQKKysgICAgICAgICAgICAgICAgICAgICAgICAgOiByZXF1aXJlZF9hcmd1bWVudCkKKysgICAgICAgICAgICAgICAgICAgICAgOiBub19hcmd1bWVudCk7CisrICAgICAgICAgICAgICAgICAgIGN2dC0+bG9uZ19lbmQtPmZsYWcgPSAwOworKyAgICAgICAgICAgICAgICAgICAvKiB3ZSBhZGQgYSBkaXNhbWJpZ3VhdGluZyBjb2RlIHRvIGFsbCB0aGUgdXNlcidzCisrICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyAod2hpY2ggaXMgcmVtb3ZlZCBiZWZvcmUgd2UgYWN0dWFsbHkgY2FsbAorKyAgICAgICAgICAgICAgICAgICAgICB0aGUgZnVuY3Rpb24gdG8gcGFyc2UgdGhlIHZhbHVlKTsgdGhpcyBtZWFucyB0aGF0CisrICAgICAgICAgICAgICAgICAgICAgIHRoZSB1c2VyIGxvc2VzIHVzZSBvZiB0aGUgaGlnaCA4IGJpdHMgaW4gYWxsIGhpcworKyAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgKHRoZSBzaWduIG9mIHRoZSBsb3dlciBiaXRzIGlzIHByZXNlcnZlZAorKyAgICAgICAgICAgICAgICAgICAgICBob3dldmVyKS4uLiAgKi8KKysgICAgICAgICAgICAgICAgICAgY3Z0LT5sb25nX2VuZC0+dmFsID0KKysgICAgICAgICAgICAgICAgICAgICAoKG9wdC0+a2V5IHwgcmVhbC0+a2V5KSAmIFVTRVJfTUFTSykKKysgICAgICAgICAgICAgICAgICAgICArICgoKGdyb3VwIC0gY3Z0LT5wYXJzZXItPmdyb3VwcykgKyAxKSA8PCBVU0VSX0JJVFMpOworKworKyAgICAgICAgICAgICAgICAgICAvKiBLZWVwIHRoZSBMT05HX09QVFMgbGlzdCB0ZXJtaW5hdGVkLiAgKi8KKysgICAgICAgICAgICAgICAgICAgKCsrY3Z0LT5sb25nX2VuZCktPm5hbWUgPSBOVUxMOworKyAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICB9CisrICAgICAgICAgICB9CisrCisrICAgICAgZ3JvdXAtPnBhcnNlciA9IGFyZ3AtPnBhcnNlcjsKKysgICAgICBncm91cC0+YXJncCA9IGFyZ3A7CisrICAgICAgZ3JvdXAtPnNob3J0X2VuZCA9IGN2dC0+c2hvcnRfZW5kOworKyAgICAgIGdyb3VwLT5hcmdzX3Byb2Nlc3NlZCA9IDA7CisrICAgICAgZ3JvdXAtPnBhcmVudCA9IHBhcmVudDsKKysgICAgICBncm91cC0+cGFyZW50X2luZGV4ID0gcGFyZW50X2luZGV4OworKyAgICAgIGdyb3VwLT5pbnB1dCA9IDA7CisrICAgICAgZ3JvdXAtPmhvb2sgPSAwOworKyAgICAgIGdyb3VwLT5jaGlsZF9pbnB1dHMgPSAwOworKworKyAgICAgIGlmIChjaGlsZHJlbikKKysgICAgICAgLyogQXNzaWduIEdST1VQJ3MgQ0hJTERfSU5QVVRTIGZpZWxkIHNvbWUgc3BhY2UgZnJvbQorKyAgICAgICAgICAgQ1ZULT5jaGlsZF9pbnB1dHNfZW5kLiovCisrICAgICAgIHsKKysgICAgICAgICB1bnNpZ25lZCBudW1fY2hpbGRyZW4gPSAwOworKyAgICAgICAgIHdoaWxlIChjaGlsZHJlbltudW1fY2hpbGRyZW5dLmFyZ3ApCisrICAgICAgICAgICBudW1fY2hpbGRyZW4rKzsKKysgICAgICAgICBncm91cC0+Y2hpbGRfaW5wdXRzID0gY3Z0LT5jaGlsZF9pbnB1dHNfZW5kOworKyAgICAgICAgIGN2dC0+Y2hpbGRfaW5wdXRzX2VuZCArPSBudW1fY2hpbGRyZW47CisrICAgICAgIH0KKysKKysgICAgICBwYXJlbnQgPSBncm91cCsrOworKyAgICB9CisrICBlbHNlCisrICAgIHBhcmVudCA9IDA7CisrCisrICBpZiAoY2hpbGRyZW4pCisrICAgIHsKKysgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CisrICAgICAgd2hpbGUgKGNoaWxkcmVuLT5hcmdwKQorKyAgICAgICBncm91cCA9CisrICAgICAgICAgY29udmVydF9vcHRpb25zIChjaGlsZHJlbisrLT5hcmdwLCBwYXJlbnQsIGluZGV4KyssIGdyb3VwLCBjdnQpOworKyAgICB9CisrCisrICByZXR1cm4gZ3JvdXA7CisrfQorKworKy8qIEZpbmQgdGhlIG1lcmdlZCBzZXQgb2YgZ2V0b3B0IG9wdGlvbnMsIHdpdGgga2V5cyBhcHByb3BpYXRlbHkgcHJlZml4ZWQuICovCisrc3RhdGljIHZvaWQKKytwYXJzZXJfY29udmVydCAoc3RydWN0IHBhcnNlciAqcGFyc2VyLCBjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwgaW50IGZsYWdzKQorK3sKKysgIHN0cnVjdCBwYXJzZXJfY29udmVydF9zdGF0ZSBjdnQ7CisrCisrICBjdnQucGFyc2VyID0gcGFyc2VyOworKyAgY3Z0LnNob3J0X2VuZCA9IHBhcnNlci0+c2hvcnRfb3B0czsKKysgIGN2dC5sb25nX2VuZCA9IHBhcnNlci0+bG9uZ19vcHRzOworKyAgY3Z0LmNoaWxkX2lucHV0c19lbmQgPSBwYXJzZXItPmNoaWxkX2lucHV0czsKKysKKysgIGlmIChmbGFncyAmIEFSR1BfSU5fT1JERVIpCisrICAgICpjdnQuc2hvcnRfZW5kKysgPSAnLSc7CisrICBlbHNlIGlmIChmbGFncyAmIEFSR1BfTk9fQVJHUykKKysgICAgKmN2dC5zaG9ydF9lbmQrKyA9ICcrJzsKKysgICpjdnQuc2hvcnRfZW5kID0gJ1wwJzsKKysKKysgIGN2dC5sb25nX2VuZC0+bmFtZSA9IE5VTEw7CisrCisrICBwYXJzZXItPmFyZ3AgPSBhcmdwOworKworKyAgaWYgKGFyZ3ApCisrICAgIHBhcnNlci0+ZWdyb3VwID0gY29udmVydF9vcHRpb25zIChhcmdwLCAwLCAwLCBwYXJzZXItPmdyb3VwcywgJmN2dCk7CisrICBlbHNlCisrICAgIHBhcnNlci0+ZWdyb3VwID0gcGFyc2VyLT5ncm91cHM7IC8qIE5vIHBhcnNlcnMgYXQgYWxsISAqLworK30KKysKKysvKiBMZW5ndGhzIG9mIHZhcmlvdXMgcGFyc2VyIGZpZWxkcyB3aGljaCB3ZSB3aWxsIGFsbG9jYXRlZC4gICovCisrc3RydWN0IHBhcnNlcl9zaXplcworK3sKKysgIHNpemVfdCBzaG9ydF9sZW47ICAgICAgICAgICAgLyogR2V0b3B0IHNob3J0IG9wdGlvbnMgc3RyaW5nLiAgKi8KKysgIHNpemVfdCBsb25nX2xlbjsgICAgICAgICAgICAgLyogR2V0b3B0IGxvbmcgb3B0aW9ucyB2ZWN0b3IuICAqLworKyAgc2l6ZV90IG51bV9ncm91cHM7ICAgICAgICAgICAvKiBHcm91cCBzdHJ1Y3R1cmVzIHdlIGFsbG9jYXRlLiAgKi8KKysgIHNpemVfdCBudW1fY2hpbGRfaW5wdXRzOyAgICAgLyogQ2hpbGQgaW5wdXQgc2xvdHMuICAqLworK307CisrCisrLyogRm9yIEFSR1AsIGluY3JlbWVudHMgdGhlIE5VTV9HUk9VUFMgZmllbGQgaW4gU1pTIGJ5IHRoZSB0b3RhbCBudW1iZXIgb2YKKysgYXJncCBzdHJ1Y3R1cmVzIGRlc2NlbmRlZCBmcm9tIGl0LCBhbmQgdGhlIFNIT1JUX0xFTiAmIExPTkdfTEVOIGZpZWxkcyBieQorKyB0aGUgbWF4aW11bSBsZW5ndGhzIG9mIHRoZSByZXN1bHRpbmcgbWVyZ2VkIGdldG9wdCBzaG9ydCBvcHRpb25zIHN0cmluZyBhbmQKKysgbG9uZy1vcHRpb25zIGFycmF5LCByZXNwZWN0aXZlbHkuICAqLworK3N0YXRpYyB2b2lkCisrY2FsY19zaXplcyAoY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsICBzdHJ1Y3QgcGFyc2VyX3NpemVzICpzenMpCisreworKyAgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgKmNoaWxkID0gYXJncC0+Y2hpbGRyZW47CisrICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdCA9IGFyZ3AtPm9wdGlvbnM7CisrCisrICBpZiAob3B0IHx8IGFyZ3AtPnBhcnNlcikKKysgICAgeworKyAgICAgIHN6cy0+bnVtX2dyb3VwcysrOworKyAgICAgIGlmIChvcHQpCisrICAgICAgIHsKKysgICAgICAgICBpbnQgbnVtX29wdHMgPSAwOworKyAgICAgICAgIHdoaWxlICghX19vcHRpb25faXNfZW5kIChvcHQrKykpCisrICAgICAgICAgICBudW1fb3B0cysrOworKyAgICAgICAgIHN6cy0+c2hvcnRfbGVuICs9IG51bV9vcHRzICogMzsgLyogb3B0ICsgdXAgdG8gMiBgOidzICovCisrICAgICAgICAgc3pzLT5sb25nX2xlbiArPSBudW1fb3B0czsKKysgICAgICAgfQorKyAgICB9CisrCisrICBpZiAoY2hpbGQpCisrICAgIHdoaWxlIChjaGlsZC0+YXJncCkKKysgICAgICB7CisrICAgICAgIGNhbGNfc2l6ZXMgKChjaGlsZCsrKS0+YXJncCwgc3pzKTsKKysgICAgICAgc3pzLT5udW1fY2hpbGRfaW5wdXRzKys7CisrICAgICAgfQorK30KKysKKysKKytleHRlcm4gY2hhciAqIF9fYXJncF9zaG9ydF9wcm9ncmFtX25hbWUgKHZvaWQpOworKy8qIEluaXRpYWxpemVzIFBBUlNFUiB0byBwYXJzZSBBUkdQIGluIGEgbWFubmVyIGRlc2NyaWJlZCBieSBGTEFHUy4gICovCisrc3RhdGljIGVycm9yX3QKKytwYXJzZXJfaW5pdCAoc3RydWN0IHBhcnNlciAqcGFyc2VyLCBjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwKKysgICAgICAgICAgICBpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGludCBmbGFncywgdm9pZCAqaW5wdXQpCisreworKyAgZXJyb3JfdCBlcnIgPSAwOworKyAgc3RydWN0IGdyb3VwICpncm91cDsKKysgIHN0cnVjdCBwYXJzZXJfc2l6ZXMgc3pzOworKyAgc3RydWN0IF9nZXRvcHRfZGF0YSBvcHRfZGF0YSA9IF9HRVRPUFRfREFUQV9JTklUSUFMSVpFUjsKKysKKysgIHN6cy5zaG9ydF9sZW4gPSAoZmxhZ3MgJiBBUkdQX05PX0FSR1MpID8gMCA6IDE7CisrICBzenMubG9uZ19sZW4gPSAwOworKyAgc3pzLm51bV9ncm91cHMgPSAwOworKyAgc3pzLm51bV9jaGlsZF9pbnB1dHMgPSAwOworKworKyAgaWYgKGFyZ3ApCisrICAgIGNhbGNfc2l6ZXMgKGFyZ3AsICZzenMpOworKworKyAgLyogTGVuZ3RocyBvZiB0aGUgdmFyaW91cyBiaXRzIG9mIHN0b3JhZ2UgdXNlZCBieSBQQVJTRVIuICAqLworKyNkZWZpbmUgR0xFTiAoc3pzLm51bV9ncm91cHMgKyAxKSAqIHNpemVvZiAoc3RydWN0IGdyb3VwKQorKyNkZWZpbmUgQ0xFTiAoc3pzLm51bV9jaGlsZF9pbnB1dHMgKiBzaXplb2YgKHZvaWQgKikpCisrI2RlZmluZSBMTEVOICgoc3pzLmxvbmdfbGVuICsgMSkgKiBzaXplb2YgKHN0cnVjdCBvcHRpb24pKQorKyNkZWZpbmUgU0xFTiAoc3pzLnNob3J0X2xlbiArIDEpCisrCisrICBwYXJzZXItPnN0b3JhZ2UgPSBtYWxsb2MgKEdMRU4gKyBDTEVOICsgTExFTiArIFNMRU4pOworKyAgaWYgKCEgcGFyc2VyLT5zdG9yYWdlKQorKyAgICByZXR1cm4gRU5PTUVNOworKworKyAgcGFyc2VyLT5ncm91cHMgPSBwYXJzZXItPnN0b3JhZ2U7CisrICBwYXJzZXItPmNoaWxkX2lucHV0cyA9IHBhcnNlci0+c3RvcmFnZSArIEdMRU47CisrICBwYXJzZXItPmxvbmdfb3B0cyA9IHBhcnNlci0+c3RvcmFnZSArIEdMRU4gKyBDTEVOOworKyAgcGFyc2VyLT5zaG9ydF9vcHRzID0gcGFyc2VyLT5zdG9yYWdlICsgR0xFTiArIENMRU4gKyBMTEVOOworKyAgcGFyc2VyLT5vcHRfZGF0YSA9IG9wdF9kYXRhOworKworKyAgbWVtc2V0IChwYXJzZXItPmNoaWxkX2lucHV0cywgMCwgc3pzLm51bV9jaGlsZF9pbnB1dHMgKiBzaXplb2YgKHZvaWQgKikpOworKyAgcGFyc2VyX2NvbnZlcnQgKHBhcnNlciwgYXJncCwgZmxhZ3MpOworKworKyAgbWVtc2V0ICgmcGFyc2VyLT5zdGF0ZSwgMCwgc2l6ZW9mIChzdHJ1Y3QgYXJncF9zdGF0ZSkpOworKyAgcGFyc2VyLT5zdGF0ZS5yb290X2FyZ3AgPSBwYXJzZXItPmFyZ3A7CisrICBwYXJzZXItPnN0YXRlLmFyZ2MgPSBhcmdjOworKyAgcGFyc2VyLT5zdGF0ZS5hcmd2ID0gYXJndjsKKysgIHBhcnNlci0+c3RhdGUuZmxhZ3MgPSBmbGFnczsKKysgIHBhcnNlci0+c3RhdGUuZXJyX3N0cmVhbSA9IHN0ZGVycjsKKysgIHBhcnNlci0+c3RhdGUub3V0X3N0cmVhbSA9IHN0ZG91dDsKKysgIHBhcnNlci0+c3RhdGUubmV4dCA9IDA7ICAgICAgLyogVGVsbCBnZXRvcHQgdG8gaW5pdGlhbGl6ZS4gICovCisrICBwYXJzZXItPnN0YXRlLnBzdGF0ZSA9IHBhcnNlcjsKKysKKysgIHBhcnNlci0+dHJ5X2dldG9wdCA9IDE7CisrCisrICAvKiBDYWxsIGVhY2ggcGFyc2VyIGZvciB0aGUgZmlyc3QgdGltZSwgZ2l2aW5nIGl0IGEgY2hhbmNlIHRvIHByb3BhZ2F0ZQorKyAgICAgdmFsdWVzIHRvIGNoaWxkIHBhcnNlcnMuICAqLworKyAgaWYgKHBhcnNlci0+Z3JvdXBzIDwgcGFyc2VyLT5lZ3JvdXApCisrICAgIHBhcnNlci0+Z3JvdXBzLT5pbnB1dCA9IGlucHV0OworKyAgZm9yIChncm91cCA9IHBhcnNlci0+Z3JvdXBzOworKyAgICAgICBncm91cCA8IHBhcnNlci0+ZWdyb3VwICYmICghZXJyIHx8IGVyciA9PSBFQkFES0VZKTsKKysgICAgICAgZ3JvdXArKykKKysgICAgeworKyAgICAgIGlmIChncm91cC0+cGFyZW50KQorKyAgICAgICAvKiBJZiBhIGNoaWxkIHBhcnNlciwgZ2V0IHRoZSBpbml0aWFsIGlucHV0IHZhbHVlIGZyb20gdGhlIHBhcmVudC4gKi8KKysgICAgICAgZ3JvdXAtPmlucHV0ID0gZ3JvdXAtPnBhcmVudC0+Y2hpbGRfaW5wdXRzW2dyb3VwLT5wYXJlbnRfaW5kZXhdOworKworKyAgICAgIGlmICghZ3JvdXAtPnBhcnNlcgorKyAgICAgICAgICYmIGdyb3VwLT5hcmdwLT5jaGlsZHJlbiAmJiBncm91cC0+YXJncC0+Y2hpbGRyZW4tPmFyZ3ApCisrICAgICAgIC8qIEZvciB0aGUgc3BlY2lhbCBjYXNlIHdoZXJlIG5vIHBhcnNpbmcgZnVuY3Rpb24gaXMgc3VwcGxpZWQgZm9yIGFuCisrICAgICAgICAgIGFyZ3AsIHByb3BhZ2F0ZSBpdHMgaW5wdXQgdG8gaXRzIGZpcnN0IGNoaWxkLCBpZiBhbnkgKHRoaXMganVzdAorKyAgICAgICAgICBtYWtlcyB2ZXJ5IHNpbXBsZSB3cmFwcGVyIGFyZ3BzIG1vcmUgY29udmVuaWVudCkuICAqLworKyAgICAgICBncm91cC0+Y2hpbGRfaW5wdXRzWzBdID0gZ3JvdXAtPmlucHV0OworKworKyAgICAgIGVyciA9IGdyb3VwX3BhcnNlIChncm91cCwgJnBhcnNlci0+c3RhdGUsIEFSR1BfS0VZX0lOSVQsIDApOworKyAgICB9CisrICBpZiAoZXJyID09IEVCQURLRVkpCisrICAgIGVyciA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIFNvbWUgcGFyc2VyIGRpZG4ndCB1bmRlcnN0YW5kLiAgKi8KKysKKysgIGlmIChlcnIpCisrICAgIHJldHVybiBlcnI7CisrCisrICBpZiAocGFyc2VyLT5zdGF0ZS5mbGFncyAmIEFSR1BfTk9fRVJSUykKKysgICAgeworKyAgICAgIHBhcnNlci0+b3B0X2RhdGEub3B0ZXJyID0gMDsKKysgICAgICBpZiAocGFyc2VyLT5zdGF0ZS5mbGFncyAmIEFSR1BfUEFSU0VfQVJHVjApCisrICAgICAgIC8qIGdldG9wdCBhbHdheXMgc2tpcHMgQVJHVlswXSwgc28gd2UgaGF2ZSB0byBmYWtlIGl0IG91dC4gIEFzIGxvbmcKKysgICAgICAgICAgYXMgT1BURVJSIGlzIDAsIHRoZW4gaXQgc2hvdWxkbid0IGFjdHVhbGx5IHRyeSB0byBhY2Nlc3MgaXQuICAqLworKyAgICAgICBwYXJzZXItPnN0YXRlLmFyZ3YtLSwgcGFyc2VyLT5zdGF0ZS5hcmdjKys7CisrICAgIH0KKysgIGVsc2UKKysgICAgcGFyc2VyLT5vcHRfZGF0YS5vcHRlcnIgPSAxOyAgICAgICAvKiBQcmludCBlcnJvciBtZXNzYWdlcy4gICovCisrCisrICBpZiAocGFyc2VyLT5zdGF0ZS5hcmd2ID09IGFyZ3YgJiYgYXJndlswXSkKKysgICAgLyogVGhlcmUncyBhbiBhcmd2WzBdOyB1c2UgaXQgZm9yIG1lc3NhZ2VzLiAgKi8KKysgICAgeworKyAgICAgIGNoYXIgKnNob3J0X25hbWUgPSBzdHJyY2hyIChhcmd2WzBdLCAnLycpOworKyAgICAgIHBhcnNlci0+c3RhdGUubmFtZSA9IHNob3J0X25hbWUgPyBzaG9ydF9uYW1lICsgMSA6IGFyZ3ZbMF07CisrICAgIH0KKysgIGVsc2UKKysgICAgcGFyc2VyLT5zdGF0ZS5uYW1lID0gX19hcmdwX3Nob3J0X3Byb2dyYW1fbmFtZSAoKTsKKysKKysgIHJldHVybiAwOworK30KKysKKysvKiBGcmVlIGFueSBzdG9yYWdlIGNvbnN1bWVkIGJ5IFBBUlNFUiAoYnV0IG5vdCBQQVJTRVIgaXRzZWxmKS4gICovCisrc3RhdGljIGVycm9yX3QKKytwYXJzZXJfZmluYWxpemUgKHN0cnVjdCBwYXJzZXIgKnBhcnNlciwKKysgICAgICAgICAgICAgICAgZXJyb3JfdCBlcnIsIGludCBhcmdfZWJhZGtleSwgaW50ICplbmRfaW5kZXgpCisreworKyAgc3RydWN0IGdyb3VwICpncm91cDsKKysKKysgIGlmIChlcnIgPT0gRUJBREtFWSAmJiBhcmdfZWJhZGtleSkKKysgICAgLyogU3VwcHJlc3MgZXJyb3JzIGdlbmVyYXRlZCBieSB1bnBhcnNlZCBhcmd1bWVudHMuICAqLworKyAgICBlcnIgPSAwOworKworKyAgaWYgKCEgZXJyKQorKyAgICB7CisrICAgICAgaWYgKHBhcnNlci0+c3RhdGUubmV4dCA9PSBwYXJzZXItPnN0YXRlLmFyZ2MpCisrICAgICAgIC8qIFdlIHN1Y2Nlc3NmdWxseSBwYXJzZWQgYWxsIGFyZ3VtZW50cyEgIENhbGwgYWxsIHRoZSBwYXJzZXJzIGFnYWluLAorKyAgICAgICAgICBqdXN0IGEgZmV3IG1vcmUgdGltZXMuLi4gKi8KKysgICAgICAgeworKyAgICAgICAgIGZvciAoZ3JvdXAgPSBwYXJzZXItPmdyb3VwczsKKysgICAgICAgICAgICAgIGdyb3VwIDwgcGFyc2VyLT5lZ3JvdXAgJiYgKCFlcnIgfHwgZXJyPT1FQkFES0VZKTsKKysgICAgICAgICAgICAgIGdyb3VwKyspCisrICAgICAgICAgICBpZiAoZ3JvdXAtPmFyZ3NfcHJvY2Vzc2VkID09IDApCisrICAgICAgICAgICAgIGVyciA9IGdyb3VwX3BhcnNlIChncm91cCwgJnBhcnNlci0+c3RhdGUsIEFSR1BfS0VZX05PX0FSR1MsIDApOworKyAgICAgICAgIGZvciAoZ3JvdXAgPSBwYXJzZXItPmVncm91cCAtIDE7CisrICAgICAgICAgICAgICBncm91cCA+PSBwYXJzZXItPmdyb3VwcyAmJiAoIWVyciB8fCBlcnI9PUVCQURLRVkpOworKyAgICAgICAgICAgICAgZ3JvdXAtLSkKKysgICAgICAgICAgIGVyciA9IGdyb3VwX3BhcnNlIChncm91cCwgJnBhcnNlci0+c3RhdGUsIEFSR1BfS0VZX0VORCwgMCk7CisrCisrICAgICAgICAgaWYgKGVyciA9PSBFQkFES0VZKQorKyAgICAgICAgICAgZXJyID0gMDsgICAgICAgICAgICAvKiBTb21lIHBhcnNlciBkaWRuJ3QgdW5kZXJzdGFuZC4gICovCisrCisrICAgICAgICAgLyogVGVsbCB0aGUgdXNlciB0aGF0IGFsbCBhcmd1bWVudHMgYXJlIHBhcnNlZC4gICovCisrICAgICAgICAgaWYgKGVuZF9pbmRleCkKKysgICAgICAgICAgICplbmRfaW5kZXggPSBwYXJzZXItPnN0YXRlLm5leHQ7CisrICAgICAgIH0KKysgICAgICBlbHNlIGlmIChlbmRfaW5kZXgpCisrICAgICAgIC8qIFJldHVybiBhbnkgcmVtYWluaW5nIGFyZ3VtZW50cyB0byB0aGUgdXNlci4gICovCisrICAgICAgICplbmRfaW5kZXggPSBwYXJzZXItPnN0YXRlLm5leHQ7CisrICAgICAgZWxzZQorKyAgICAgICAvKiBObyB3YXkgdG8gcmV0dXJuIHRoZSByZW1haW5pbmcgYXJndW1lbnRzLCB0aGV5IG11c3QgYmUgYm9ndXMuICovCisrICAgICAgIHsKKysgICAgICAgICBpZiAoIShwYXJzZXItPnN0YXRlLmZsYWdzICYgQVJHUF9OT19FUlJTKQorKyAgICAgICAgICAgICAmJiBwYXJzZXItPnN0YXRlLmVycl9zdHJlYW0pCisrICAgICAgICAgICBmcHJpbnRmIChwYXJzZXItPnN0YXRlLmVycl9zdHJlYW0sCisrICAgICAgICAgICAgICAgICAgICBkZ2V0dGV4dCAocGFyc2VyLT5hcmdwLT5hcmdwX2RvbWFpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXM6IFRvbyBtYW55IGFyZ3VtZW50c1xuIiksCisrICAgICAgICAgICAgICAgICAgICBwYXJzZXItPnN0YXRlLm5hbWUpOworKyAgICAgICAgIGVyciA9IEVCQURLRVk7CisrICAgICAgIH0KKysgICAgfQorKworKyAgLyogT2theSwgd2UncmUgYWxsIGRvbmUsIHdpdGggZWl0aGVyIGFuIGVycm9yIG9yIHN1Y2Nlc3M7IGNhbGwgdGhlIHBhcnNlcnMKKysgICAgIHRvIGluZGljYXRlIHdoaWNoIG9uZS4gICovCisrCisrICBpZiAoZXJyKQorKyAgICB7CisrICAgICAgLyogTWF5YmUgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZS4gICovCisrICAgICAgaWYgKGVyciA9PSBFQkFES0VZKQorKyAgICAgICAvKiBBbiBhcHByb3ByaWF0ZSBtZXNzYWdlIGRlc2NyaWJpbmcgd2hhdCB0aGUgZXJyb3Igd2FzIHNob3VsZCBoYXZlCisrICAgICAgICAgIGJlZW4gcHJpbnRlZCBlYXJsaWVyLiAgKi8KKysgICAgICAgYXJncF9zdGF0ZV9oZWxwICgmcGFyc2VyLT5zdGF0ZSwgcGFyc2VyLT5zdGF0ZS5lcnJfc3RyZWFtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgQVJHUF9IRUxQX1NURF9FUlIpOworKworKyAgICAgIC8qIFNpbmNlIHdlIGRpZG4ndCBleGl0LCBnaXZlIGVhY2ggcGFyc2VyIGFuIGVycm9yIGluZGljYXRpb24uICAqLworKyAgICAgIGZvciAoZ3JvdXAgPSBwYXJzZXItPmdyb3VwczsgZ3JvdXAgPCBwYXJzZXItPmVncm91cDsgZ3JvdXArKykKKysgICAgICAgZ3JvdXBfcGFyc2UgKGdyb3VwLCAmcGFyc2VyLT5zdGF0ZSwgQVJHUF9LRVlfRVJST1IsIDApOworKyAgICB9CisrICBlbHNlCisrICAgIC8qIE5vdGlmeSBwYXJzZXJzIG9mIHN1Y2Nlc3MsIGFuZCBwcm9wYWdhdGUgYmFjayB2YWx1ZXMgZnJvbSBwYXJzZXJzLiAgKi8KKysgICAgeworKyAgICAgIC8qIFdlIHBhc3Mgb3ZlciB0aGUgZ3JvdXBzIGluIHJldmVyc2Ugb3JkZXIgc28gdGhhdCBjaGlsZCBncm91cHMgYXJlCisrICAgICAgICBnaXZlbiBhIGNoYW5jZSB0byBkbyB0aGVyZSBwcm9jZXNzaW5nIGJlZm9yZSBwYXNzaW5nIGJhY2sgYSB2YWx1ZSB0bworKyAgICAgICAgdGhlIHBhcmVudC4gICovCisrICAgICAgZm9yIChncm91cCA9IHBhcnNlci0+ZWdyb3VwIC0gMQorKyAgICAgICAgICA7IGdyb3VwID49IHBhcnNlci0+Z3JvdXBzICYmICghZXJyIHx8IGVyciA9PSBFQkFES0VZKQorKyAgICAgICAgICA7IGdyb3VwLS0pCisrICAgICAgIGVyciA9IGdyb3VwX3BhcnNlIChncm91cCwgJnBhcnNlci0+c3RhdGUsIEFSR1BfS0VZX1NVQ0NFU1MsIDApOworKyAgICAgIGlmIChlcnIgPT0gRUJBREtFWSkKKysgICAgICAgZXJyID0gMDsgICAgICAgICAgICAgICAgLyogU29tZSBwYXJzZXIgZGlkbid0IHVuZGVyc3RhbmQuICAqLworKyAgICB9CisrCisrICAvKiBDYWxsIHBhcnNlcnMgb25jZSBtb3JlLCB0byBkbyBhbnkgZmluYWwgY2xlYW51cC4gIEVycm9ycyBhcmUgaWdub3JlZC4gICovCisrICBmb3IgKGdyb3VwID0gcGFyc2VyLT5lZ3JvdXAgLSAxOyBncm91cCA+PSBwYXJzZXItPmdyb3VwczsgZ3JvdXAtLSkKKysgICAgZ3JvdXBfcGFyc2UgKGdyb3VwLCAmcGFyc2VyLT5zdGF0ZSwgQVJHUF9LRVlfRklOSSwgMCk7CisrCisrICBpZiAoZXJyID09IEVCQURLRVkpCisrICAgIGVyciA9IEVJTlZBTDsKKysKKysgIGZyZWUgKHBhcnNlci0+c3RvcmFnZSk7CisrCisrICByZXR1cm4gZXJyOworK30KKysKKysvKiBDYWxsIHRoZSB1c2VyIHBhcnNlcnMgdG8gcGFyc2UgdGhlIG5vbi1vcHRpb24gYXJndW1lbnQgVkFMLCBhdCB0aGUgY3VycmVudAorKyAgIHBvc2l0aW9uLCByZXR1cm5pbmcgYW55IGVycm9yLiAgVGhlIHN0YXRlIE5FWFQgcG9pbnRlciBpcyBhc3N1bWVkIHRvIGhhdmUKKysgICBiZWVuIGFkanVzdGVkIChieSBnZXRvcHQpIHRvIHBvaW50IGFmdGVyIHRoaXMgYXJndW1lbnQ7IHRoaXMgZnVuY3Rpb24gd2lsbAorKyAgIGFkanVzdCBpdCBjb3JyZWN0bHkgdG8gcmVmbGVjdCBob3dldmVyIG1hbnkgYXJncyBhY3R1YWxseSBlbmQgdXAgYmVpbmcKKysgICBjb25zdW1lZC4gICovCisrc3RhdGljIGVycm9yX3QKKytwYXJzZXJfcGFyc2VfYXJnIChzdHJ1Y3QgcGFyc2VyICpwYXJzZXIsIGNoYXIgKnZhbCkKKyt7CisrICAvKiBTYXZlIHRoZSBzdGFydGluZyB2YWx1ZSBvZiBORVhULCBmaXJzdCBhZGp1c3RpbmcgaXQgc28gdGhhdCB0aGUgYXJnCisrICAgICB3ZSdyZSBwYXJzaW5nIGlzIGFnYWluIHRoZSBmcm9udCBvZiB0aGUgYXJnIHZlY3Rvci4gICovCisrICBpbnQgaW5kZXggPSAtLXBhcnNlci0+c3RhdGUubmV4dDsKKysgIGVycm9yX3QgZXJyID0gRUJBREtFWTsKKysgIHN0cnVjdCBncm91cCAqZ3JvdXA7CisrICBpbnQga2V5ID0gMDsgICAgICAgICAgICAgICAgIC8qIFdoaWNoIG9mIEFSR1BfS0VZX0FSR1tTXSB3ZSB1c2VkLiAgKi8KKysKKysgIC8qIFRyeSB0byBwYXJzZSB0aGUgYXJndW1lbnQgaW4gZWFjaCBwYXJzZXIuICAqLworKyAgZm9yIChncm91cCA9IHBhcnNlci0+Z3JvdXBzCisrICAgICAgIDsgZ3JvdXAgPCBwYXJzZXItPmVncm91cCAmJiBlcnIgPT0gRUJBREtFWQorKyAgICAgICA7IGdyb3VwKyspCisrICAgIHsKKysgICAgICBwYXJzZXItPnN0YXRlLm5leHQrKzsgICAgLyogRm9yIEFSR1BfS0VZX0FSRywgY29uc3VtZSB0aGUgYXJnLiAgKi8KKysgICAgICBrZXkgPSBBUkdQX0tFWV9BUkc7CisrICAgICAgZXJyID0gZ3JvdXBfcGFyc2UgKGdyb3VwLCAmcGFyc2VyLT5zdGF0ZSwga2V5LCB2YWwpOworKworKyAgICAgIGlmIChlcnIgPT0gRUJBREtFWSkKKysgICAgICAgLyogVGhpcyBwYXJzZXIgZG9lc24ndCBsaWtlIEFSR1BfS0VZX0FSRzsgdHJ5IEFSR1BfS0VZX0FSR1MgaW5zdGVhZC4gKi8KKysgICAgICAgeworKyAgICAgICAgIHBhcnNlci0+c3RhdGUubmV4dC0tOyAvKiBGb3IgQVJHUF9LRVlfQVJHUywgcHV0IGJhY2sgdGhlIGFyZy4gICovCisrICAgICAgICAga2V5ID0gQVJHUF9LRVlfQVJHUzsKKysgICAgICAgICBlcnIgPSBncm91cF9wYXJzZSAoZ3JvdXAsICZwYXJzZXItPnN0YXRlLCBrZXksIDApOworKyAgICAgICB9CisrICAgIH0KKysKKysgIGlmICghIGVycikKKysgICAgeworKyAgICAgIGlmIChrZXkgPT0gQVJHUF9LRVlfQVJHUykKKysgICAgICAgLyogVGhlIGRlZmF1bHQgZm9yIEFSR1BfS0VZX0FSR1MgaXMgdG8gYXNzdW1lIHRoYXQgaWYgTkVYVCBpc24ndAorKyAgICAgICAgICBjaGFuZ2VkIGJ5IHRoZSB1c2VyLCAqYWxsKiBhcmd1bWVudHMgc2hvdWxkIGJlIGNvbnNpZGVyZWQKKysgICAgICAgICAgY29uc3VtZWQuICAqLworKyAgICAgICBwYXJzZXItPnN0YXRlLm5leHQgPSBwYXJzZXItPnN0YXRlLmFyZ2M7CisrCisrICAgICAgaWYgKHBhcnNlci0+c3RhdGUubmV4dCA+IGluZGV4KQorKyAgICAgICAvKiBSZW1lbWJlciB0aGF0IHdlIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgYSBub24tb3B0aW9uCisrICAgICAgICAgIGFyZ3VtZW50IC0tIGJ1dCBvbmx5IGlmIHRoZSB1c2VyIGhhc24ndCBnb3R0ZW4gdHJpY2t5IGFuZCBzZXQKKysgICAgICAgICAgdGhlIGNsb2NrIGJhY2suICAqLworKyAgICAgICAoLS1ncm91cCktPmFyZ3NfcHJvY2Vzc2VkICs9IChwYXJzZXItPnN0YXRlLm5leHQgLSBpbmRleCk7CisrICAgICAgZWxzZQorKyAgICAgICAvKiBUaGUgdXNlciB3YW50cyB0byByZXBhcnNlIHNvbWUgYXJncywgZ2l2ZSBnZXRvcHQgYW5vdGhlciB0cnkuICAqLworKyAgICAgICBwYXJzZXItPnRyeV9nZXRvcHQgPSAxOworKyAgICB9CisrCisrICByZXR1cm4gZXJyOworK30KKysKKysvKiBDYWxsIHRoZSB1c2VyIHBhcnNlcnMgdG8gcGFyc2UgdGhlIG9wdGlvbiBPUFQsIHdpdGggYXJndW1lbnQgVkFMLCBhdCB0aGUKKysgICBjdXJyZW50IHBvc2l0aW9uLCByZXR1cm5pbmcgYW55IGVycm9yLiAgKi8KKytzdGF0aWMgZXJyb3JfdAorK3BhcnNlcl9wYXJzZV9vcHQgKHN0cnVjdCBwYXJzZXIgKnBhcnNlciwgaW50IG9wdCwgY2hhciAqdmFsKQorK3sKKysgIC8qIFRoZSBncm91cCBrZXkgZW5jb2RlZCBpbiB0aGUgaGlnaCBiaXRzOyAwIGZvciBzaG9ydCBvcHRzIG9yCisrICAgICBncm91cF9udW1iZXIgKyAxIGZvciBsb25nIG9wdHMuICAqLworKyAgaW50IGdyb3VwX2tleSA9IG9wdCA+PiBVU0VSX0JJVFM7CisrICBlcnJvcl90IGVyciA9IEVCQURLRVk7CisrCisrICBpZiAoZ3JvdXBfa2V5ID09IDApCisrICAgIC8qIEEgc2hvcnQgb3B0aW9uLiAgQnkgY29tcGFyaW5nIE9QVCdzIHBvc2l0aW9uIGluIFNIT1JUX09QVFMgdG8gdGhlCisrICAgICAgIHZhcmlvdXMgc3RhcnRpbmcgcG9zaXRpb25zIGluIGVhY2ggZ3JvdXAncyBTSE9SVF9FTkQgZmllbGQsIHdlIGNhbgorKyAgICAgICBkZXRlcm1pbmUgd2hpY2ggZ3JvdXAgT1BUIGNhbWUgZnJvbS4gICovCisrICAgIHsKKysgICAgICBzdHJ1Y3QgZ3JvdXAgKmdyb3VwOworKyAgICAgIGNoYXIgKnNob3J0X2luZGV4ID0gc3RyY2hyIChwYXJzZXItPnNob3J0X29wdHMsIG9wdCk7CisrCisrICAgICAgaWYgKHNob3J0X2luZGV4KQorKyAgICAgICBmb3IgKGdyb3VwID0gcGFyc2VyLT5ncm91cHM7IGdyb3VwIDwgcGFyc2VyLT5lZ3JvdXA7IGdyb3VwKyspCisrICAgICAgICAgaWYgKGdyb3VwLT5zaG9ydF9lbmQgPiBzaG9ydF9pbmRleCkKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgZXJyID0gZ3JvdXBfcGFyc2UgKGdyb3VwLCAmcGFyc2VyLT5zdGF0ZSwgb3B0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLT5vcHRfZGF0YS5vcHRhcmcpOworKyAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgIH0KKysgICAgfQorKyAgZWxzZQorKyAgICAvKiBBIGxvbmcgb3B0aW9uLiAgV2UgdXNlIHNoaWZ0cyBpbnN0ZWFkIG9mIG1hc2tpbmcgZm9yIGV4dHJhY3RpbmcKKysgICAgICAgdGhlIHVzZXIgdmFsdWUgaW4gb3JkZXIgdG8gcHJlc2VydmUgdGhlIHNpZ24uICAqLworKyAgICBlcnIgPQorKyAgICAgIGdyb3VwX3BhcnNlICgmcGFyc2VyLT5ncm91cHNbZ3JvdXBfa2V5IC0gMV0sICZwYXJzZXItPnN0YXRlLAorKyAgICAgICAgICAgICAgICAgIChvcHQgPDwgR1JPVVBfQklUUykgPj4gR1JPVVBfQklUUywKKysgICAgICAgICAgICAgICAgICBwYXJzZXItPm9wdF9kYXRhLm9wdGFyZyk7CisrCisrICBpZiAoZXJyID09IEVCQURLRVkpCisrICAgIC8qIEF0IGxlYXN0IGN1cnJlbnRseSwgYW4gb3B0aW9uIG5vdCByZWNvZ25pemVkIGlzIGFuIGVycm9yIGluIHRoZQorKyAgICAgICBwYXJzZXIsIGJlY2F1c2Ugd2UgcHJlLWNvbXB1dGUgd2hpY2ggcGFyc2VyIGlzIHN1cHBvc2VkIHRvIGRlYWwKKysgICAgICAgd2l0aCBlYWNoIG9wdGlvbi4gICovCisrICAgIHsKKysgICAgICBzdGF0aWMgY29uc3QgY2hhciBiYWRfa2V5X2VycltdID0KKysgICAgICAgTl8oIihQUk9HUkFNIEVSUk9SKSBPcHRpb24gc2hvdWxkIGhhdmUgYmVlbiByZWNvZ25pemVkIT8iKTsKKysgICAgICBpZiAoZ3JvdXBfa2V5ID09IDApCisrICAgICAgIGFyZ3BfZXJyb3IgKCZwYXJzZXItPnN0YXRlLCAiLSVjOiAlcyIsIG9wdCwKKysgICAgICAgICAgICAgICAgICAgICBkZ2V0dGV4dCAocGFyc2VyLT5hcmdwLT5hcmdwX2RvbWFpbiwgYmFkX2tleV9lcnIpKTsKKysgICAgICBlbHNlCisrICAgICAgIHsKKysgICAgICAgICBzdHJ1Y3Qgb3B0aW9uICpsb25nX29wdCA9IHBhcnNlci0+bG9uZ19vcHRzOworKyAgICAgICAgIHdoaWxlIChsb25nX29wdC0+dmFsICE9IG9wdCAmJiBsb25nX29wdC0+bmFtZSkKKysgICAgICAgICAgIGxvbmdfb3B0Kys7CisrICAgICAgICAgYXJncF9lcnJvciAoJnBhcnNlci0+c3RhdGUsICItLSVzOiAlcyIsCisrICAgICAgICAgICAgICAgICAgICAgICBsb25nX29wdC0+bmFtZSA/IGxvbmdfb3B0LT5uYW1lIDogIj8/PyIsCisrICAgICAgICAgICAgICAgICAgICAgICBkZ2V0dGV4dCAocGFyc2VyLT5hcmdwLT5hcmdwX2RvbWFpbiwgYmFkX2tleV9lcnIpKTsKKysgICAgICAgfQorKyAgICB9CisrCisrICByZXR1cm4gZXJyOworK30KKysKKysvKiBQYXJzZSB0aGUgbmV4dCBhcmd1bWVudCBpbiBQQVJTRVIgKGFzIGluZGljYXRlZCBieSBQQVJTRVItPnN0YXRlLm5leHQpLgorKyAgIEFueSBlcnJvciBmcm9tIHRoZSBwYXJzZXJzIGlzIHJldHVybmVkLCBhbmQgKkFSR1BfRUJBREtFWSBpbmRpY2F0ZXMKKysgICB3aGV0aGVyIGEgdmFsdWUgb2YgRUJBREtFWSBpcyBkdWUgdG8gYW4gdW5yZWNvZ25pemVkIGFyZ3VtZW50ICh3aGljaCBpcworKyAgIGdlbmVyYWxseSBub3QgZmF0YWwpLiAgKi8KKytzdGF0aWMgZXJyb3JfdAorK3BhcnNlcl9wYXJzZV9uZXh0IChzdHJ1Y3QgcGFyc2VyICpwYXJzZXIsIGludCAqYXJnX2ViYWRrZXkpCisreworKyAgaW50IG9wdDsKKysgIGVycm9yX3QgZXJyID0gMDsKKysKKysgIGlmIChwYXJzZXItPnN0YXRlLnF1b3RlZCAmJiBwYXJzZXItPnN0YXRlLm5leHQgPCBwYXJzZXItPnN0YXRlLnF1b3RlZCkKKysgICAgLyogVGhlIG5leHQgYXJndW1lbnQgcG9pbnRlciBoYXMgYmVlbiBtb3ZlZCB0byBiZWZvcmUgdGhlIHF1b3RlZAorKyAgICAgICByZWdpb24sIHNvIHByZXRlbmQgd2UgbmV2ZXIgc2F3IHRoZSBxdW90aW5nIGAtLScsIGFuZCBnaXZlIGdldG9wdAorKyAgICAgICBhbm90aGVyIGNoYW5jZS4gIElmIHRoZSB1c2VyIGhhc24ndCByZW1vdmVkIGl0LCBnZXRvcHQgd2lsbCBqdXN0CisrICAgICAgIHByb2Nlc3MgaXQgYWdhaW4uICAqLworKyAgICBwYXJzZXItPnN0YXRlLnF1b3RlZCA9IDA7CisrCisrICBpZiAocGFyc2VyLT50cnlfZ2V0b3B0ICYmICFwYXJzZXItPnN0YXRlLnF1b3RlZCkKKysgICAgLyogR2l2ZSBnZXRvcHQgYSBjaGFuY2UgdG8gcGFyc2UgdGhpcy4gICovCisrICAgIHsKKysgICAgICAvKiBQdXQgaXQgYmFjayBpbiBPUFRJTkQgZm9yIGdldG9wdC4gICovCisrICAgICAgcGFyc2VyLT5vcHRfZGF0YS5vcHRpbmQgPSBwYXJzZXItPnN0YXRlLm5leHQ7CisrICAgICAgLyogRGlzdGluZ3Vpc2ggS0VZX0VSUiBmcm9tIGEgcmVhbCBvcHRpb24uICAqLworKyAgICAgIHBhcnNlci0+b3B0X2RhdGEub3B0b3B0ID0gS0VZX0VORDsKKysgICAgICBpZiAocGFyc2VyLT5zdGF0ZS5mbGFncyAmIEFSR1BfTE9OR19PTkxZKQorKyAgICAgICBvcHQgPSBfZ2V0b3B0X2xvbmdfb25seV9yIChwYXJzZXItPnN0YXRlLmFyZ2MsIHBhcnNlci0+c3RhdGUuYXJndiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLT5zaG9ydF9vcHRzLCBwYXJzZXItPmxvbmdfb3B0cywgMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcnNlci0+b3B0X2RhdGEpOworKyAgICAgIGVsc2UKKysgICAgICAgb3B0ID0gX2dldG9wdF9sb25nX3IgKHBhcnNlci0+c3RhdGUuYXJnYywgcGFyc2VyLT5zdGF0ZS5hcmd2LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLT5zaG9ydF9vcHRzLCBwYXJzZXItPmxvbmdfb3B0cywgMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJzZXItPm9wdF9kYXRhKTsKKysgICAgICAvKiBBbmQgc2VlIHdoYXQgZ2V0b3B0IGRpZC4gICovCisrICAgICAgcGFyc2VyLT5zdGF0ZS5uZXh0ID0gcGFyc2VyLT5vcHRfZGF0YS5vcHRpbmQ7CisrCisrICAgICAgaWYgKG9wdCA9PSBLRVlfRU5EKQorKyAgICAgICAvKiBHZXRvcHQgc2F5cyB0aGVyZSBhcmUgbm8gbW9yZSBvcHRpb25zLCBzbyBzdG9wIHVzaW5nCisrICAgICAgICAgIGdldG9wdDsgd2UnbGwgY29udGludWUgaWYgbmVjZXNzYXJ5IG9uIG91ciBvd24uICAqLworKyAgICAgICB7CisrICAgICAgICAgcGFyc2VyLT50cnlfZ2V0b3B0ID0gMDsKKysgICAgICAgICBpZiAocGFyc2VyLT5zdGF0ZS5uZXh0ID4gMQorKyAgICAgICAgICAgICAmJiBzdHJjbXAgKHBhcnNlci0+c3RhdGUuYXJndltwYXJzZXItPnN0YXRlLm5leHQgLSAxXSwgUVVPVEUpCisrICAgICAgICAgICAgICAgICAgPT0gMCkKKysgICAgICAgICAgIC8qIE5vdCBvbmx5IGlzIHRoaXMgdGhlIGVuZCBvZiB0aGUgb3B0aW9ucywgYnV0IGl0J3MgYQorKyAgICAgICAgICAgICAgYHF1b3RlZCcgcmVnaW9uLCB3aGljaCBtYXkgaGF2ZSBhcmdzIHRoYXQgKmxvb2sqIGxpa2UKKysgICAgICAgICAgICAgIG9wdGlvbnMsIHNvIHdlIGRlZmluaXRlbHkgc2hvdWxkbid0IHRyeSB0byB1c2UgZ2V0b3B0IHBhc3QKKysgICAgICAgICAgICAgIGhlcmUsIHdoYXRldmVyIGhhcHBlbnMuICAqLworKyAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5xdW90ZWQgPSBwYXJzZXItPnN0YXRlLm5leHQ7CisrICAgICAgIH0KKysgICAgICBlbHNlIGlmIChvcHQgPT0gS0VZX0VSUiAmJiBwYXJzZXItPm9wdF9kYXRhLm9wdG9wdCAhPSBLRVlfRU5EKQorKyAgICAgICAvKiBLRVlfRVJSIGNhbiBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIGEgdmFsaWQgdXNlciBzaG9ydAorKyAgICAgICAgICBvcHRpb24sIGJ1dCBpbiB0aGUgY2FzZSBvZiBhIHJlYWwgZXJyb3IsIGdldG9wdCBzZXRzIE9QVE9QVAorKyAgICAgICAgICB0byB0aGUgb2ZmZW5kaW5nIGNoYXJhY3Rlciwgd2hpY2ggY2FuIG5ldmVyIGJlIEtFWV9FTkQuICAqLworKyAgICAgICB7CisrICAgICAgICAgKmFyZ19lYmFka2V5ID0gMDsKKysgICAgICAgICByZXR1cm4gRUJBREtFWTsKKysgICAgICAgfQorKyAgICB9CisrICBlbHNlCisrICAgIG9wdCA9IEtFWV9FTkQ7CisrCisrICBpZiAob3B0ID09IEtFWV9FTkQpCisrICAgIHsKKysgICAgICAvKiBXZSdyZSBwYXN0IHdoYXQgZ2V0b3B0IGNvbnNpZGVycyB0aGUgb3B0aW9ucy4gICovCisrICAgICAgaWYgKHBhcnNlci0+c3RhdGUubmV4dCA+PSBwYXJzZXItPnN0YXRlLmFyZ2MKKysgICAgICAgICB8fCAocGFyc2VyLT5zdGF0ZS5mbGFncyAmIEFSR1BfTk9fQVJHUykpCisrICAgICAgIC8qIEluZGljYXRlIHRoYXQgd2UncmUgZG9uZS4gICovCisrICAgICAgIHsKKysgICAgICAgICAqYXJnX2ViYWRrZXkgPSAxOworKyAgICAgICAgIHJldHVybiBFQkFES0VZOworKyAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAvKiBBIG5vbi1vcHRpb24gYXJnOyBzaW11bGF0ZSB3aGF0IGdldG9wdCBtaWdodCBoYXZlIGRvbmUuICAqLworKyAgICAgICB7CisrICAgICAgICAgb3B0ID0gS0VZX0FSRzsKKysgICAgICAgICBwYXJzZXItPm9wdF9kYXRhLm9wdGFyZyA9IHBhcnNlci0+c3RhdGUuYXJndltwYXJzZXItPnN0YXRlLm5leHQrK107CisrICAgICAgIH0KKysgICAgfQorKworKyAgaWYgKG9wdCA9PSBLRVlfQVJHKQorKyAgICAvKiBBIG5vbi1vcHRpb24gYXJndW1lbnQ7IHRyeSBlYWNoIHBhcnNlciBpbiB0dXJuLiAgKi8KKysgICAgZXJyID0gcGFyc2VyX3BhcnNlX2FyZyAocGFyc2VyLCBwYXJzZXItPm9wdF9kYXRhLm9wdGFyZyk7CisrICBlbHNlCisrICAgIGVyciA9IHBhcnNlcl9wYXJzZV9vcHQgKHBhcnNlciwgb3B0LCBwYXJzZXItPm9wdF9kYXRhLm9wdGFyZyk7CisrCisrICBpZiAoZXJyID09IEVCQURLRVkpCisrICAgICphcmdfZWJhZGtleSA9IChvcHQgPT0gS0VZX0VORCB8fCBvcHQgPT0gS0VZX0FSRyk7CisrCisrICByZXR1cm4gZXJyOworK30KKysKKysvKiBQYXJzZSB0aGUgb3B0aW9ucyBzdHJpbmdzIGluIEFSR0MgJiBBUkdWIGFjY29yZGluZyB0byB0aGUgYXJncCBpbiBBUkdQLgorKyAgIEZMQUdTIGlzIG9uZSBvZiB0aGUgQVJHUF8gZmxhZ3MgYWJvdmUuICBJZiBFTkRfSU5ERVggaXMgbm9uLU5VTEwsIHRoZQorKyAgIGluZGV4IGluIEFSR1Ygb2YgdGhlIGZpcnN0IHVucGFyc2VkIG9wdGlvbiBpcyByZXR1cm5lZCBpbiBpdC4gIElmIGFuCisrICAgdW5rbm93biBvcHRpb24gaXMgcHJlc2VudCwgRUlOVkFMIGlzIHJldHVybmVkOyBpZiBzb21lIHBhcnNlciByb3V0aW5lCisrICAgcmV0dXJuZWQgYSBub24temVybyB2YWx1ZSwgaXQgaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSAwIGlzIHJldHVybmVkLiAgKi8KKytlcnJvcl90CisrYXJncF9wYXJzZSAoY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsIGludCBhcmdjLCBjaGFyICoqYXJndiwgdW5zaWduZWQgZmxhZ3MsCisrICAgICAgICAgICAgIGludCAqZW5kX2luZGV4LCB2b2lkICppbnB1dCkKKyt7CisrICBlcnJvcl90IGVycjsKKysgIHN0cnVjdCBwYXJzZXIgcGFyc2VyOworKworKyAgLyogSWYgdHJ1ZSwgdGhlbiBlcnIgPT0gRUJBREtFWSBpcyBhIHJlc3VsdCBvZiBhIG5vbi1vcHRpb24gYXJndW1lbnQgZmFpbGluZworKyAgICAgdG8gYmUgcGFyc2VkICh3aGljaCBpbiBzb21lIGNhc2VzIGlzbid0IGFjdHVhbGx5IGFuIGVycm9yKS4gICovCisrICBpbnQgYXJnX2ViYWRrZXkgPSAwOworKworKyAgaWYgKCEgKGZsYWdzICYgQVJHUF9OT19IRUxQKSkKKysgICAgLyogQWRkIG91ciBvd24gb3B0aW9ucy4gICovCisrICAgIHsKKysgICAgICBzdHJ1Y3QgYXJncF9jaGlsZCAqY2hpbGQgPSBhbGxvY2EgKDQgKiBzaXplb2YgKHN0cnVjdCBhcmdwX2NoaWxkKSk7CisrICAgICAgc3RydWN0IGFyZ3AgKnRvcF9hcmdwID0gYWxsb2NhIChzaXplb2YgKHN0cnVjdCBhcmdwKSk7CisrCisrICAgICAgLyogVE9QX0FSR1AgaGFzIG5vIG9wdGlvbnMsIGl0IGp1c3Qgc2VydmVzIHRvIGdyb3VwIHRoZSB1c2VyICYgZGVmYXVsdAorKyAgICAgICAgYXJncHMuICAqLworKyAgICAgIG1lbXNldCAodG9wX2FyZ3AsIDAsIHNpemVvZiAoKnRvcF9hcmdwKSk7CisrICAgICAgdG9wX2FyZ3AtPmNoaWxkcmVuID0gY2hpbGQ7CisrCisrICAgICAgbWVtc2V0IChjaGlsZCwgMCwgNCAqIHNpemVvZiAoc3RydWN0IGFyZ3BfY2hpbGQpKTsKKysKKysgICAgICBpZiAoYXJncCkKKysgICAgICAgKGNoaWxkKyspLT5hcmdwID0gYXJncDsKKysgICAgICAoY2hpbGQrKyktPmFyZ3AgPSAmYXJncF9kZWZhdWx0X2FyZ3A7CisrICAgICAgaWYgKGFyZ3BfcHJvZ3JhbV92ZXJzaW9uIHx8IGFyZ3BfcHJvZ3JhbV92ZXJzaW9uX2hvb2spCisrICAgICAgIChjaGlsZCsrKS0+YXJncCA9ICZhcmdwX3ZlcnNpb25fYXJncDsKKysgICAgICBjaGlsZC0+YXJncCA9IDA7CisrCisrICAgICAgYXJncCA9IHRvcF9hcmdwOworKyAgICB9CisrCisrICAvKiBDb25zdHJ1Y3QgYSBwYXJzZXIgZm9yIHRoZXNlIGFyZ3VtZW50cy4gICovCisrICBlcnIgPSBwYXJzZXJfaW5pdCAoJnBhcnNlciwgYXJncCwgYXJnYywgYXJndiwgZmxhZ3MsIGlucHV0KTsKKysKKysgIGlmICghIGVycikKKysgICAgLyogUGFyc2UhICovCisrICAgIHsKKysgICAgICB3aGlsZSAoISBlcnIpCisrICAgICAgIGVyciA9IHBhcnNlcl9wYXJzZV9uZXh0ICgmcGFyc2VyLCAmYXJnX2ViYWRrZXkpOworKyAgICAgIGVyciA9IHBhcnNlcl9maW5hbGl6ZSAoJnBhcnNlciwgZXJyLCBhcmdfZWJhZGtleSwgZW5kX2luZGV4KTsKKysgICAgfQorKworKyAgcmV0dXJuIGVycjsKKyt9CisrCisrLyogUmV0dXJuIHRoZSBpbnB1dCBmaWVsZCBmb3IgQVJHUCBpbiB0aGUgcGFyc2VyIGNvcnJlc3BvbmRpbmcgdG8gU1RBVEU7IHVzZWQKKysgICBieSB0aGUgaGVscCByb3V0aW5lcy4gICovCisrdm9pZCAqCisrX19hcmdwX2lucHV0IChjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwgY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQorK3sKKysgIGlmIChzdGF0ZSkKKysgICAgeworKyAgICAgIHN0cnVjdCBncm91cCAqZ3JvdXA7CisrICAgICAgc3RydWN0IHBhcnNlciAqcGFyc2VyID0gc3RhdGUtPnBzdGF0ZTsKKysKKysgICAgICBmb3IgKGdyb3VwID0gcGFyc2VyLT5ncm91cHM7IGdyb3VwIDwgcGFyc2VyLT5lZ3JvdXA7IGdyb3VwKyspCisrICAgICAgIGlmIChncm91cC0+YXJncCA9PSBhcmdwKQorKyAgICAgICAgIHJldHVybiBncm91cC0+aW5wdXQ7CisrICAgIH0KKysKKysgIHJldHVybiAwOworK30KK2RpZmYgLS1naXQgYS9saWJ1YXJncC9hcmdwLXB2LmMgYi9saWJ1YXJncC9hcmdwLXB2LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mMTIyN2I1CistLS0gL2Rldi9udWxsCisrKysgYi9saWJ1YXJncC9hcmdwLXB2LmMKK0BAIC0wLDAgKzEsMjUgQEAKKysvKiBEZWZhdWx0IGRlZmluaXRpb24gZm9yIEFSR1BfUFJPR1JBTV9WRVJTSU9OLgorKyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKy8qIElmIHNldCBieSB0aGUgdXNlciBwcm9ncmFtIHRvIGEgbm9uLXplcm8gdmFsdWUsIHRoZW4gYSBkZWZhdWx0IG9wdGlvbgorKyAgIC0tdmVyc2lvbiBpcyBhZGRlZCAodW5sZXNzIHRoZSBBUkdQX05PX0hFTFAgZmxhZyBpcyB1c2VkKSwgd2hpY2ggd2lsbAorKyAgIHByaW50IHRoaXMgdGhpcyBzdHJpbmcgZm9sbG93ZWQgYnkgYSBuZXdsaW5lIGFuZCBleGl0ICh1bmxlc3MgdGhlCisrICAgQVJHUF9OT19FWElUIGZsYWcgaXMgdXNlZCkuICBPdmVycmlkZGVuIGJ5IEFSR1BfUFJPR1JBTV9WRVJTSU9OX0hPT0suICAqLworK2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV92ZXJzaW9uOworZGlmZiAtLWdpdCBhL2xpYnVhcmdwL2FyZ3AtcHZoLmMgYi9saWJ1YXJncC9hcmdwLXB2aC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMWYxZDk2MgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlidWFyZ3AvYXJncC1wdmguYworQEAgLTAsMCArMSwzMiBAQAorKy8qIERlZmF1bHQgZGVmaW5pdGlvbiBmb3IgQVJHUF9QUk9HUkFNX1ZFUlNJT05fSE9PSy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXMgYXQgZ251LmFpLm1pdC5lZHU+LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8YXJncC5oPgorKworKy8qIElmIHNldCBieSB0aGUgdXNlciBwcm9ncmFtIHRvIGEgbm9uLXplcm8gdmFsdWUsIHRoZW4gYSBkZWZhdWx0IG9wdGlvbgorKyAgIC0tdmVyc2lvbiBpcyBhZGRlZCAodW5sZXNzIHRoZSBBUkdQX05PX0hFTFAgZmxhZyBpcyB1c2VkKSwgd2hpY2ggY2FsbHMKKysgICB0aGlzIGZ1bmN0aW9uIHdpdGggYSBzdHJlYW0gdG8gcHJpbnQgdGhlIHZlcnNpb24gdG8gYW5kIGEgcG9pbnRlciB0byB0aGUKKysgICBjdXJyZW50IHBhcnNpbmcgc3RhdGUsIGFuZCB0aGVuIGV4aXRzICh1bmxlc3MgdGhlIEFSR1BfTk9fRVhJVCBmbGFnIGlzCisrICAgdXNlZCkuICBUaGlzIHZhcmlhYmxlIHRha2VzIHByZWNlZGVudCBvdmVyIEFSR1BfUFJPR1JBTV9WRVJTSU9OLiAgKi8KKyt2b2lkICgqYXJncF9wcm9ncmFtX3ZlcnNpb25faG9vaykgKEZJTEUgKnN0cmVhbSwgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKTsKK2RpZmYgLS1naXQgYS9saWJ1YXJncC9hcmdwLXhpbmwuYyBiL2xpYnVhcmdwL2FyZ3AteGlubC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZjFkMzAwMAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlidWFyZ3AvYXJncC14aW5sLmMKK0BAIC0wLDAgKzEsMzUgQEAKKysvKiBSZWFsIGRlZmluaXRpb25zIGZvciBleHRlcm4gaW5saW5lIGZ1bmN0aW9ucyBpbiBhcmdwLmgKKysgICBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXMgYXQgZ251LmFpLm1pdC5lZHU+LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBIQVZFX0ZFQVRVUkVTX0gKKysjIGluY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2VuZGlmCisrCisrI2lmbmRlZiBfX1VTRV9FWFRFUk5fSU5MSU5FUworKyMgZGVmaW5lIF9fVVNFX0VYVEVSTl9JTkxJTkVTICAxCisrI2VuZGlmCisrI2RlZmluZSBBUkdQX0VJCisrI3VuZGVmIF9fT1BUSU1JWkVfXworKyNkZWZpbmUgX19PUFRJTUlaRV9fIDEKKysjaW5jbHVkZSA8YXJncC5oPgorZGlmZiAtLWdpdCBhL3Rlc3QvYXJncC9NYWtlZmlsZSBiL3Rlc3QvYXJncC9NYWtlZmlsZQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjYxNmZlNzEKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3QvYXJncC9NYWtlZmlsZQorQEAgLTAsMCArMSw3IEBACisrIyB1Q2xpYmMgYXJncCB0ZXN0cworKyMgTGljZW5zZWQgdW5kZXIgdGhlIExHUEwgdjIuMSwgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCIGluIHRoaXMgdGFyYmFsbC4KKysKKyt0b3BfYnVpbGRkaXI9Li4vLi4vCisraW5jbHVkZSAuLi9SdWxlcy5tYWsKKystaW5jbHVkZSBNYWtlZmlsZS5pbgorK2luY2x1ZGUgLi4vVGVzdC5tYWsKK2RpZmYgLS1naXQgYS90ZXN0L2FyZ3AvTWFrZWZpbGUuaW4gYi90ZXN0L2FyZ3AvTWFrZWZpbGUuaW4KK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kODFiMzU5CistLS0gL2Rldi9udWxsCisrKysgYi90ZXN0L2FyZ3AvTWFrZWZpbGUuaW4KK0BAIC0wLDAgKzEsMTIgQEAKKysjIHVDbGliYyBhcmdwIHRlc3RzCisrIyBMaWNlbnNlZCB1bmRlciB0aGUgTEdQTCB2Mi4xLCBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIgaW4gdGhpcyB0YXJiYWxsLgorKworK1RFU1RTIDo9ICQoYWRkcHJlZml4IGFyZ3AtLCBleDEgZXgyIGV4MyBleDQgdGVzdCkgXAorKyAgICAgICAgIGJ1Zy1hcmdwMSB0c3QtYXJncDEgdHN0LWFyZ3AyCisrCisrRVhUUkFfTERGTEFHUyA9IC1sdWFyZ3AKKysKKytPUFRTX2FyZ3AtZXgzID0gQVJHMSBBUkcyCisrT1BUU19hcmdwLWV4NCA9IEFSRzEgc3RyaW5nMSBzdHJpbmcyIHN0cmluZzMKKytPUFRTX2J1Zy1hcmdwMSA9IC0tIC0taGVscAorKworZGlmZiAtLWdpdCBhL3Rlc3QvYXJncC9hcmdwLWV4MS5jIGIvdGVzdC9hcmdwL2FyZ3AtZXgxLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43YmI1ZjIyCistLS0gL2Rldi9udWxsCisrKysgYi90ZXN0L2FyZ3AvYXJncC1leDEuYworQEAgLTAsMCArMSwxNSBAQAorKy8qIEFyZ3AgZXhhbXBsZSAjMSAtLSBhIG1pbmltYWwgcHJvZ3JhbSB1c2luZyBhcmdwICovCisrCisrLyogVGhpcyBpcyAocHJvYmFibHkpIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBwcm9ncmFtIHRoYXQKKysgICB1c2VzIGFyZ3AuICBJdCB3b24ndCBkbyBtdWNoIGV4Y2VwdCBnaXZlIGFuIGVycm9yCisrICAgbWVzc2FnZXMgYW5kIGV4aXQgd2hlbiB0aGVyZSBhcmUgYW55IGFyZ3VtZW50cywgYW5kIHByaW50CisrICAgYSAocmF0aGVyIHBvaW50bGVzcykgbWVzc2FnZXMgZm9yIC0taGVscC4gICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxhcmdwLmg+CisrCisraW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICBhcmdwX3BhcnNlICgwLCBhcmdjLCBhcmd2LCAwLCAwLCAwKTsKKysgIGV4aXQgKDApOworK30KK2RpZmYgLS1naXQgYS90ZXN0L2FyZ3AvYXJncC1leDIuYyBiL3Rlc3QvYXJncC9hcmdwLWV4Mi5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYzQ5ZmJhYworLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdC9hcmdwL2FyZ3AtZXgyLmMKK0BAIC0wLDAgKzEsNDUgQEAKKysvKiBBcmdwIGV4YW1wbGUgIzIgLS0gYSBwcmV0dHkgbWluaW1hbCBwcm9ncmFtIHVzaW5nIGFyZ3AgKi8KKysKKysvKiBUaGlzIHByb2dyYW0gZG9lc24ndCB1c2UgYW55IG9wdGlvbnMgb3IgYXJndW1lbnRzLCBidXQgdXNlcworKyAgIGFyZ3AgdG8gYmUgY29tcGxpYW50IHdpdGggdGhlIEdOVSBzdGFuZGFyZCBjb21tYW5kIGxpbmUKKysgICBmb3JtYXQuCisrCisrICAgSW4gYWRkaXRpb24gdG8gbWFraW5nIHN1cmUgbm8gYXJndW1lbnRzIGFyZSBnaXZlbiwgYW5kCisrICAgaW1wbGVtZW50aW5nIGEgLS1oZWxwIG9wdGlvbiwgdGhpcyBleGFtcGxlIHdpbGwgaGF2ZSBhCisrICAgLS12ZXJzaW9uIG9wdGlvbiwgYW5kIHdpbGwgcHV0IHRoZSBnaXZlbiBkb2N1bWVudGF0aW9uIHN0cmluZworKyAgIGFuZCBidWcgYWRkcmVzcyBpbiB0aGUgLS1oZWxwIG91dHB1dCwgYXMgcGVyIEdOVSBzdGFuZGFyZHMuCisrCisrICAgVGhlIHZhcmlhYmxlIEFSR1AgY29udGFpbnMgdGhlIGFyZ3VtZW50IHBhcnNlciBzcGVjaWZpY2F0aW9uOworKyAgIGFkZGluZyBmaWVsZHMgdG8gdGhpcyBzdHJ1Y3R1cmUgaXMgdGhlIHdheSBtb3N0IHBhcmFtZXRlcnMgYXJlCisrICAgcGFzc2VkIHRvIGFyZ3BfcGFyc2UgKHRoZSBmaXJzdCB0aHJlZSBmaWVsZHMgYXJlIHVzdWFsbHkgdXNlZCwKKysgICBidXQgbm90IGluIHRoaXMgc21hbGwgcHJvZ3JhbSkuICBUaGVyZSBhcmUgYWxzbyB0d28gZ2xvYmFsCisrICAgdmFyaWFibGVzIHRoYXQgYXJncCBrbm93cyBhYm91dCBkZWZpbmVkIGhlcmUsCisrICAgQVJHUF9QUk9HUkFNX1ZFUlNJT04gYW5kIEFSR1BfUFJPR1JBTV9CVUdfQUREUkVTUyAodGhleSBhcmUKKysgICBnbG9iYWwgdmFyaWFibGVzIGJlY2F1c2UgdGhleSB3aWxsIGFsbW9zdCBhbHdheXMgYmUgY29uc3RhbnQKKysgICBmb3IgYSBnaXZlbiBwcm9ncmFtLCBldmVuIGlmIGl0IHVzZXMgZGlmZmVyZW50IGFyZ3VtZW50CisrICAgcGFyc2VycyBmb3IgdmFyaW91cyB0YXNrcykuICAqLworKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8YXJncC5oPgorKworK2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV92ZXJzaW9uID0KKysgICJhcmdwLWV4MiAxLjAiOworK2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV9idWdfYWRkcmVzcyA9CisrICAiPGJ1Zy1nbnUtdXRpbHNAQGdudS5vcmc+IjsKKysKKysvKiBQcm9ncmFtIGRvY3VtZW50YXRpb24uICAqLworK3N0YXRpYyBjaGFyIGRvY1tdID0KKysgICJBcmdwIGV4YW1wbGUgIzIgLS0gYSBwcmV0dHkgbWluaW1hbCBwcm9ncmFtIHVzaW5nIGFyZ3AiOworKworKy8qIE91ciBhcmd1bWVudCBwYXJzZXIuICBUaGUgQGNvZGV7b3B0aW9uc30sIEBjb2Rle3BhcnNlcn0sIGFuZAorKyAgIEBjb2Rle2FyZ3NfZG9jfSBmaWVsZHMgYXJlIHplcm8gYmVjYXVzZSB3ZSBoYXZlIG5laXRoZXIgb3B0aW9ucyBvcgorKyAgIGFyZ3VtZW50czsgQGNvZGV7ZG9jfSBhbmQgQGNvZGV7YXJncF9wcm9ncmFtX2J1Z19hZGRyZXNzfSB3aWxsIGJlCisrICAgdXNlZCBpbiB0aGUgb3V0cHV0IGZvciBAc2FtcHstLWhlbHB9LCBhbmQgdGhlIEBzYW1wey0tdmVyc2lvbn0KKysgICBvcHRpb24gd2lsbCBwcmludCBvdXQgQGNvZGV7YXJncF9wcm9ncmFtX3ZlcnNpb259LiAgKi8KKytzdGF0aWMgc3RydWN0IGFyZ3AgYXJncCA9IHsgMCwgMCwgMCwgZG9jIH07CisrCisraW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICBhcmdwX3BhcnNlICgmYXJncCwgYXJnYywgYXJndiwgMCwgMCwgMCk7CisrICBleGl0ICgwKTsKKyt9CitkaWZmIC0tZ2l0IGEvdGVzdC9hcmdwL2FyZ3AtZXgzLmMgYi90ZXN0L2FyZ3AvYXJncC1leDMuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjI0ZDVjNTAKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3QvYXJncC9hcmdwLWV4My5jCitAQCAtMCwwICsxLDE1MyBAQAorKy8qIEFyZ3AgZXhhbXBsZSAjMyAtLSBhIHByb2dyYW0gd2l0aCBvcHRpb25zIGFuZCBhcmd1bWVudHMgdXNpbmcgYXJncCAqLworKworKy8qIFRoaXMgcHJvZ3JhbSB1c2VzIHRoZSBzYW1lIGZlYXR1cmVzIGFzIGV4YW1wbGUgMiwgYW5kIHVzZXMgb3B0aW9ucyBhbmQKKysgICBhcmd1bWVudHMuCisrCisrICAgV2Ugbm93IHVzZSB0aGUgZmlyc3QgZm91ciBmaWVsZHMgaW4gQVJHUCwgc28gaGVyZSdzIGEgZGVzY3JpcHRpb24gb2YgdGhlbToKKysgICAgIE9QVElPTlMgIC0tIEEgcG9pbnRlciB0byBhIHZlY3RvciBvZiBzdHJ1Y3QgYXJncF9vcHRpb24gKHNlZSBiZWxvdykKKysgICAgIFBBUlNFUiAgIC0tIEEgZnVuY3Rpb24gdG8gcGFyc2UgYSBzaW5nbGUgb3B0aW9uLCBjYWxsZWQgYnkgYXJncAorKyAgICAgQVJHU19ET0MgLS0gQSBzdHJpbmcgZGVzY3JpYmluZyBob3cgdGhlIG5vbi1vcHRpb24gYXJndW1lbnRzIHNob3VsZCBsb29rCisrICAgICBET0MgICAgICAtLSBBIGRlc2NyaXB0aXZlIHN0cmluZyBhYm91dCB0aGlzIHByb2dyYW07IGlmIGl0IGNvbnRhaW5zIGEKKysgICAgICAgICAgICAgICAgIHZlcnRpY2FsIHRhYiBjaGFyYWN0ZXIgKFx2KSwgdGhlIHBhcnQgYWZ0ZXIgaXQgd2lsbCBiZQorKyAgICAgICAgICAgICAgICAgcHJpbnRlZCAqZm9sbG93aW5nKiB0aGUgb3B0aW9ucworKworKyAgIFRoZSBmdW5jdGlvbiBQQVJTRVIgdGFrZXMgdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6CisrICAgICBLRVkgIC0tIEFuIGludGVnZXIgc3BlY2lmeWluZyB3aGljaCBvcHRpb24gdGhpcyBpcyAodGFrZW4KKysgICAgICAgICAgICAgZnJvbSB0aGUgS0VZIGZpZWxkIGluIGVhY2ggc3RydWN0IGFyZ3Bfb3B0aW9uKSwgb3IKKysgICAgICAgICAgICAgYSBzcGVjaWFsIGtleSBzcGVjaWZ5aW5nIHNvbWV0aGluZyBlbHNlOyB0aGUgb25seQorKyAgICAgICAgICAgICBzcGVjaWFsIGtleXMgd2UgdXNlIGhlcmUgYXJlIEFSR1BfS0VZX0FSRywgbWVhbmluZworKyAgICAgICAgICAgICBhIG5vbi1vcHRpb24gYXJndW1lbnQsIGFuZCBBUkdQX0tFWV9FTkQsIG1lYW5pbmcKKysgICAgICAgICAgICAgdGhhdCBhbGwgYXJndW1lbnRzIGhhdmUgYmVlbiBwYXJzZWQKKysgICAgIEFSRyAgLS0gRm9yIGFuIG9wdGlvbiBLRVksIHRoZSBzdHJpbmcgdmFsdWUgb2YgaXRzCisrICAgICAgICAgICAgIGFyZ3VtZW50LCBvciBOVUxMIGlmIGl0IGhhcyBub25lCisrICAgICBTVEFURS0tIEEgcG9pbnRlciB0byBhIHN0cnVjdCBhcmdwX3N0YXRlLCBjb250YWluaW5nCisrICAgICAgICAgICAgIHZhcmlvdXMgdXNlZnVsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYXJzaW5nIHN0YXRlOyB1c2VkIGhlcmUKKysgICAgICAgICAgICAgYXJlIHRoZSBJTlBVVCBmaWVsZCwgd2hpY2ggcmVmbGVjdHMgdGhlIElOUFVUIGFyZ3VtZW50IHRvCisrICAgICAgICAgICAgIGFyZ3BfcGFyc2UsIGFuZCB0aGUgQVJHX05VTSBmaWVsZCwgd2hpY2ggaXMgdGhlIG51bWJlciBvZiB0aGUKKysgICAgICAgICAgICAgY3VycmVudCBub24tb3B0aW9uIGFyZ3VtZW50IGJlaW5nIHBhcnNlZAorKyAgIEl0IHNob3VsZCByZXR1cm4gZWl0aGVyIDAsIG1lYW5pbmcgc3VjY2VzcywgQVJHUF9FUlJfVU5LTk9XTiwgbWVhbmluZyB0aGUKKysgICBnaXZlbiBLRVkgd2Fzbid0IHJlY29nbml6ZWQsIG9yIGFuIGVycm5vIHZhbHVlIGluZGljYXRpbmcgc29tZSBvdGhlcgorKyAgIGVycm9yLgorKworKyAgIE5vdGUgdGhhdCBpbiB0aGlzIGV4YW1wbGUsIG1haW4gdXNlcyBhIHN0cnVjdHVyZSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZQorKyAgIHBhcnNlX29wdCBmdW5jdGlvbiwgYSBwb2ludGVyIHRvIHdoaWNoIGl0IHBhc3NlcyBpbiB0aGUgSU5QVVQgYXJndW1lbnQgdG8KKysgICBhcmdwX3BhcnNlLiAgT2YgY291cnNlLCBpdCdzIGFsc28gcG9zc2libGUgdG8gdXNlIGdsb2JhbCB2YXJpYWJsZXMKKysgICBpbnN0ZWFkLCBidXQgdGhpcyBpcyBzb21ld2hhdCBtb3JlIGZsZXhpYmxlLgorKworKyAgIFRoZSBPUFRJT05TIGZpZWxkIGNvbnRhaW5zIGEgcG9pbnRlciB0byBhIHZlY3RvciBvZiBzdHJ1Y3QgYXJncF9vcHRpb24nczsKKysgICB0aGF0IHN0cnVjdHVyZSBoYXMgdGhlIGZvbGxvd2luZyBmaWVsZHMgKGlmIHlvdSBhc3NpZ24geW91ciBvcHRpb24KKysgICBzdHJ1Y3R1cmVzIHVzaW5nIGFycmF5IGluaXRpYWxpemF0aW9uIGxpa2UgdGhpcyBleGFtcGxlLCB1bnNwZWNpZmllZAorKyAgIGZpZWxkcyB3aWxsIGJlIGRlZmF1bHRlZCB0byAwLCBhbmQgbmVlZCBub3QgYmUgc3BlY2lmaWVkKToKKysgICAgIE5BTUUgICAtLSBUaGUgbmFtZSBvZiB0aGlzIG9wdGlvbidzIGxvbmcgb3B0aW9uIChtYXkgYmUgemVybykKKysgICAgIEtFWSAgICAtLSBUaGUgS0VZIHRvIHBhc3MgdG8gdGhlIFBBUlNFUiBmdW5jdGlvbiB3aGVuIHBhcnNpbmcgdGhpcyBvcHRpb24sCisrICAgICAgICAgICAgICAgKmFuZCogdGhlIG5hbWUgb2YgdGhpcyBvcHRpb24ncyBzaG9ydCBvcHRpb24sIGlmIGl0IGlzIGEKKysgICAgICAgICAgICAgICBwcmludGFibGUgYXNjaWkgY2hhcmFjdGVyCisrICAgICBBUkcgICAgLS0gVGhlIG5hbWUgb2YgdGhpcyBvcHRpb24ncyBhcmd1bWVudCwgaWYgYW55CisrICAgICBGTEFHUyAgLS0gRmxhZ3MgZGVzY3JpYmluZyB0aGlzIG9wdGlvbjsgc29tZSBvZiB0aGVtIGFyZToKKysgICAgICAgICAgICAgICAgIE9QVElPTl9BUkdfT1BUSU9OQUwgLS0gVGhlIGFyZ3VtZW50IHRvIHRoaXMgb3B0aW9uIGlzIG9wdGlvbmFsCisrICAgICAgICAgICAgICAgICBPUFRJT05fQUxJQVMgICAgICAgIC0tIFRoaXMgb3B0aW9uIGlzIGFuIGFsaWFzIGZvciB0aGUKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMgb3B0aW9uCisrICAgICAgICAgICAgICAgICBPUFRJT05fSElEREVOICAgICAgIC0tIERvbid0IHNob3cgdGhpcyBvcHRpb24gaW4gLS1oZWxwIG91dHB1dAorKyAgICAgRE9DICAgIC0tIEEgZG9jdW1lbnRhdGlvbiBzdHJpbmcgZm9yIHRoaXMgb3B0aW9uLCBzaG93biBpbiAtLWhlbHAgb3V0cHV0CisrCisrICAgQW4gb3B0aW9ucyB2ZWN0b3Igc2hvdWxkIGJlIHRlcm1pbmF0ZWQgYnkgYW4gb3B0aW9uIHdpdGggYWxsIGZpZWxkcyB6ZXJvLiAqLworKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8YXJncC5oPgorKworK2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV92ZXJzaW9uID0KKysgICJhcmdwLWV4MyAxLjAiOworK2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV9idWdfYWRkcmVzcyA9CisrICAiPGJ1Zy1nbnUtdXRpbHNAQGdudS5vcmc+IjsKKysKKysvKiBQcm9ncmFtIGRvY3VtZW50YXRpb24uICAqLworK3N0YXRpYyBjaGFyIGRvY1tdID0KKysgICJBcmdwIGV4YW1wbGUgIzMgLS0gYSBwcm9ncmFtIHdpdGggb3B0aW9ucyBhbmQgYXJndW1lbnRzIHVzaW5nIGFyZ3AiOworKworKy8qIEEgZGVzY3JpcHRpb24gb2YgdGhlIGFyZ3VtZW50cyB3ZSBhY2NlcHQuICAqLworK3N0YXRpYyBjaGFyIGFyZ3NfZG9jW10gPSAiQVJHMSBBUkcyIjsKKysKKysvKiBUaGUgb3B0aW9ucyB3ZSB1bmRlcnN0YW5kLiAgKi8KKytzdGF0aWMgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdGlvbnNbXSA9IHsKKysgIHsidmVyYm9zZSIsICAndicsIDAsICAgICAgMCwgICJQcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IiB9LAorKyAgeyJxdWlldCIsICAgICdxJywgMCwgICAgICAwLCAgIkRvbid0IHByb2R1Y2UgYW55IG91dHB1dCIgfSwKKysgIHsic2lsZW50IiwgICAncycsIDAsICAgICAgT1BUSU9OX0FMSUFTIH0sCisrICB7Im91dHB1dCIsICAgJ28nLCAiRklMRSIsIDAsCisrICAgIk91dHB1dCB0byBGSUxFIGluc3RlYWQgb2Ygc3RhbmRhcmQgb3V0cHV0IiB9LAorKyAgeyAwIH0KKyt9OworKworKy8qIFVzZWQgYnkgQGNvZGV7bWFpbn0gdG8gY29tbXVuaWNhdGUgd2l0aCBAY29kZXtwYXJzZV9vcHR9LiAgKi8KKytzdHJ1Y3QgYXJndW1lbnRzCisreworKyAgY2hhciAqYXJnc1syXTsgICAgICAgICAgICAgICAvKiBAdmFye2FyZzF9ICYgQHZhcnthcmcyfSAqLworKyAgaW50IHNpbGVudCwgdmVyYm9zZTsKKysgIGNoYXIgKm91dHB1dF9maWxlOworK307CisrCisrLyogUGFyc2UgYSBzaW5nbGUgb3B0aW9uLiAgKi8KKytzdGF0aWMgZXJyb3JfdAorK3BhcnNlX29wdCAoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCisreworKyAgLyogR2V0IHRoZSBAdmFye2lucHV0fSBhcmd1bWVudCBmcm9tIEBjb2Rle2FyZ3BfcGFyc2V9LCB3aGljaCB3ZQorKyAgICAga25vdyBpcyBhIHBvaW50ZXIgdG8gb3VyIGFyZ3VtZW50cyBzdHJ1Y3R1cmUuICAqLworKyAgc3RydWN0IGFyZ3VtZW50cyAqYXJndW1lbnRzID0gc3RhdGUtPmlucHV0OworKworKyAgc3dpdGNoIChrZXkpCisrICAgIHsKKysgICAgY2FzZSAncSc6IGNhc2UgJ3MnOgorKyAgICAgIGFyZ3VtZW50cy0+c2lsZW50ID0gMTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSAndic6CisrICAgICAgYXJndW1lbnRzLT52ZXJib3NlID0gMTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSAnbyc6CisrICAgICAgYXJndW1lbnRzLT5vdXRwdXRfZmlsZSA9IGFyZzsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSBBUkdQX0tFWV9BUkc6CisrICAgICAgaWYgKHN0YXRlLT5hcmdfbnVtID49IDIpCisrICAgICAgIC8qIFRvbyBtYW55IGFyZ3VtZW50cy4gICovCisrICAgICAgIGFyZ3BfdXNhZ2UgKHN0YXRlKTsKKysKKysgICAgICBhcmd1bWVudHMtPmFyZ3Nbc3RhdGUtPmFyZ19udW1dID0gYXJnOworKworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIEFSR1BfS0VZX0VORDoKKysgICAgICBpZiAoc3RhdGUtPmFyZ19udW0gPCAyKQorKyAgICAgICAvKiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4gICovCisrICAgICAgIGFyZ3BfdXNhZ2UgKHN0YXRlKTsKKysgICAgICBicmVhazsKKysKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gQVJHUF9FUlJfVU5LTk9XTjsKKysgICAgfQorKyAgcmV0dXJuIDA7CisrfQorKworKy8qIE91ciBhcmdwIHBhcnNlci4gICovCisrc3RhdGljIHN0cnVjdCBhcmdwIGFyZ3AgPSB7IG9wdGlvbnMsIHBhcnNlX29wdCwgYXJnc19kb2MsIGRvYyB9OworKworK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKyAgc3RydWN0IGFyZ3VtZW50cyBhcmd1bWVudHM7CisrCisrICAvKiBEZWZhdWx0IHZhbHVlcy4gICovCisrICBhcmd1bWVudHMuc2lsZW50ID0gMDsKKysgIGFyZ3VtZW50cy52ZXJib3NlID0gMDsKKysgIGFyZ3VtZW50cy5vdXRwdXRfZmlsZSA9ICItIjsKKysKKysgIC8qIFBhcnNlIG91ciBhcmd1bWVudHM7IGV2ZXJ5IG9wdGlvbiBzZWVuIGJ5IEBjb2Rle3BhcnNlX29wdH0gd2lsbAorKyAgICAgYmUgcmVmbGVjdGVkIGluIEBjb2Rle2FyZ3VtZW50c30uICAqLworKyAgYXJncF9wYXJzZSAoJmFyZ3AsIGFyZ2MsIGFyZ3YsIDAsIDAsICZhcmd1bWVudHMpOworKworKyAgcHJpbnRmICgiQVJHMSA9ICVzXG5BUkcyID0gJXNcbk9VVFBVVF9GSUxFID0gJXNcbiIKKysgICAgICAgICAiVkVSQk9TRSA9ICVzXG5TSUxFTlQgPSAlc1xuIiwKKysgICAgICAgICBhcmd1bWVudHMuYXJnc1swXSwgYXJndW1lbnRzLmFyZ3NbMV0sCisrICAgICAgICAgYXJndW1lbnRzLm91dHB1dF9maWxlLAorKyAgICAgICAgIGFyZ3VtZW50cy52ZXJib3NlID8gInllcyIgOiAibm8iLAorKyAgICAgICAgIGFyZ3VtZW50cy5zaWxlbnQgPyAieWVzIiA6ICJubyIpOworKworKyAgZXhpdCAoMCk7CisrfQorZGlmZiAtLWdpdCBhL3Rlc3QvYXJncC9hcmdwLWV4NC5jIGIvdGVzdC9hcmdwL2FyZ3AtZXg0LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jNzdjN2VmCistLS0gL2Rldi9udWxsCisrKysgYi90ZXN0L2FyZ3AvYXJncC1leDQuYworQEAgLTAsMCArMSwxNjcgQEAKKysvKiBBcmdwIGV4YW1wbGUgIzQgLS0gYSBwcm9ncmFtIHdpdGggc29tZXdoYXQgbW9yZSBjb21wbGljYXRlZCBvcHRpb25zICovCisrCisrLyogVGhpcyBwcm9ncmFtIHVzZXMgdGhlIHNhbWUgZmVhdHVyZXMgYXMgZXhhbXBsZSAzLCBidXQgaGFzIG1vcmUKKysgICBvcHRpb25zLCBhbmQgc29tZXdoYXQgbW9yZSBzdHJ1Y3R1cmUgaW4gdGhlIC1oZWxwIG91dHB1dC4gIEl0CisrICAgYWxzbyBzaG93cyBob3cgeW91IGNhbiBgc3RlYWwnIHRoZSByZW1haW5kZXIgb2YgdGhlIGlucHV0CisrICAgYXJndW1lbnRzIHBhc3QgYSBjZXJ0YWluIHBvaW50LCBmb3IgcHJvZ3JhbXMgdGhhdCBhY2NlcHQgYQorKyAgIGxpc3Qgb2YgaXRlbXMuICBJdCBhbHNvIHNob3dzIHRoZSBzcGVjaWFsIGFyZ3AgS0VZIHZhbHVlCisrICAgQVJHUF9LRVlfTk9fQVJHUywgd2hpY2ggaXMgb25seSBnaXZlbiBpZiBubyBub24tb3B0aW9uCisrICAgYXJndW1lbnRzIHdlcmUgc3VwcGxpZWQgdG8gdGhlIHByb2dyYW0uCisrCisrICAgRm9yIHN0cnVjdHVyaW5nIHRoZSBoZWxwIG91dHB1dCwgdHdvIGZlYXR1cmVzIGFyZSB1c2VkLAorKyAgICpoZWFkZXJzKiB3aGljaCBhcmUgZW50cmllcyBpbiB0aGUgb3B0aW9ucyB2ZWN0b3Igd2l0aCB0aGUKKysgICBmaXJzdCBmb3VyIGZpZWxkcyBiZWluZyB6ZXJvLCBhbmQgYSB0d28gcGFydCBkb2N1bWVudGF0aW9uCisrICAgc3RyaW5nIChpbiB0aGUgdmFyaWFibGUgRE9DKSwgd2hpY2ggYWxsb3dzIGRvY3VtZW50YXRpb24gYm90aAorKyAgIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9wdGlvbnM7IHRoZSB0d28gcGFydHMgb2YgRE9DIGFyZQorKyAgIHNlcGFyYXRlZCBieSBhIHZlcnRpY2FsLXRhYiBjaGFyYWN0ZXIgKCdcdicsIG9yICdcMDEzJykuICBCeQorKyAgIGNvbnZlbnRpb24sIHRoZSBkb2N1bWVudGF0aW9uIGJlZm9yZSB0aGUgb3B0aW9ucyBpcyBqdXN0IGEKKysgICBzaG9ydCBzdHJpbmcgc2F5aW5nIHdoYXQgdGhlIHByb2dyYW0gZG9lcywgYW5kIHRoYXQgYWZ0ZXJ3YXJkcworKyAgIGlzIGxvbmdlciwgZGVzY3JpYmluZyB0aGUgYmVoYXZpb3IgaW4gbW9yZSBkZXRhaWwuICBBbGwKKysgICBkb2N1bWVudGF0aW9uIHN0cmluZ3MgYXJlIGF1dG9tYXRpY2FsbHkgZmlsbGVkIGZvciBvdXRwdXQsCisrICAgYWx0aG91Z2ggbmV3bGluZXMgbWF5IGJlIGluY2x1ZGVkIHRvIGZvcmNlIGEgbGluZSBicmVhayBhdCBhCisrICAgcGFydGljdWxhciBwb2ludC4gIEFsbCBkb2N1bWVudGF0aW9uIHN0cmluZ3MgYXJlIGFsc28gcGFzc2VkIHRvCisrICAgdGhlIGBnZXR0ZXh0JyBmdW5jdGlvbiwgZm9yIHBvc3NpYmxlIHRyYW5zbGF0aW9uIGludG8gdGhlCisrICAgY3VycmVudCBsb2NhbGUuICAqLworKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8YXJncC5oPgorKworK2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV92ZXJzaW9uID0KKysgICJhcmdwLWV4NCAxLjAiOworK2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV9idWdfYWRkcmVzcyA9CisrICAiPGJ1Zy1nbnUtdXRpbHNAQHByZXAuYWkubWl0LmVkdT4iOworKworKy8qIFByb2dyYW0gZG9jdW1lbnRhdGlvbi4gICovCisrc3RhdGljIGNoYXIgZG9jW10gPQorKyAgIkFyZ3AgZXhhbXBsZSAjNCAtLSBhIHByb2dyYW0gd2l0aCBzb21ld2hhdCBtb3JlIGNvbXBsaWNhdGVkXAorK29wdGlvbnNcCisrXHZUaGlzIHBhcnQgb2YgdGhlIGRvY3VtZW50YXRpb24gY29tZXMgKmFmdGVyKiB0aGUgb3B0aW9ucztcCisrIG5vdGUgdGhhdCB0aGUgdGV4dCBpcyBhdXRvbWF0aWNhbGx5IGZpbGxlZCwgYnV0IGl0J3MgcG9zc2libGVcCisrIHRvIGZvcmNlIGEgbGluZS1icmVhaywgZS5nLlxuPC0tIGhlcmUuIjsKKysKKysvKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBhcmd1bWVudHMgd2UgYWNjZXB0LiAgKi8KKytzdGF0aWMgY2hhciBhcmdzX2RvY1tdID0gIkFSRzEgW1NUUklORy4uLl0iOworKworKy8qIEtleXMgZm9yIG9wdGlvbnMgd2l0aG91dCBzaG9ydC1vcHRpb25zLiAgKi8KKysjZGVmaW5lIE9QVF9BQk9SVCAgMSAgICAgICAgICAgLyogLS1hYm9ydCAqLworKworKy8qIFRoZSBvcHRpb25zIHdlIHVuZGVyc3RhbmQuICAqLworK3N0YXRpYyBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0aW9uc1tdID0geworKyAgeyJ2ZXJib3NlIiwgICd2JywgMCwgICAgICAgMCwgIlByb2R1Y2UgdmVyYm9zZSBvdXRwdXQiIH0sCisrICB7InF1aWV0IiwgICAgJ3EnLCAwLCAgICAgICAwLCAiRG9uJ3QgcHJvZHVjZSBhbnkgb3V0cHV0IiB9LAorKyAgeyJzaWxlbnQiLCAgICdzJywgMCwgICAgICAgT1BUSU9OX0FMSUFTIH0sCisrICB7Im91dHB1dCIsICAgJ28nLCAiRklMRSIsICAwLAorKyAgICJPdXRwdXQgdG8gRklMRSBpbnN0ZWFkIG9mIHN0YW5kYXJkIG91dHB1dCIgfSwKKysKKysgIHswLDAsMCwwLCAiVGhlIGZvbGxvd2luZyBvcHRpb25zIHNob3VsZCBiZSBncm91cGVkIHRvZ2V0aGVyOiIgfSwKKysgIHsicmVwZWF0IiwgICAncicsICJDT1VOVCIsIE9QVElPTl9BUkdfT1BUSU9OQUwsCisrICAgIlJlcGVhdCB0aGUgb3V0cHV0IENPVU5UIChkZWZhdWx0IDEwKSB0aW1lcyJ9LAorKyAgeyJhYm9ydCIsICAgIE9QVF9BQk9SVCwgMCwgMCwgIkFib3J0IGJlZm9yZSBzaG93aW5nIGFueSBvdXRwdXQifSwKKysKKysgIHsgMCB9CisrfTsKKysKKysvKiBVc2VkIGJ5IEBjb2Rle21haW59IHRvIGNvbW11bmljYXRlIHdpdGggQGNvZGV7cGFyc2Vfb3B0fS4gICovCisrc3RydWN0IGFyZ3VtZW50cworK3sKKysgIGNoYXIgKmFyZzE7ICAgICAgICAgICAgICAgICAgLyogQHZhcnthcmcxfSAqLworKyAgY2hhciAqKnN0cmluZ3M7ICAgICAgICAgICAgICAvKiBbQHZhcntzdHJpbmd9QGRvdHN7fV0gKi8KKysgIGludCBzaWxlbnQsIHZlcmJvc2UsIGFib3J0OyAgLyogQHNhbXB7LXN9LCBAc2FtcHstdn0sIEBzYW1wey0tYWJvcnR9ICovCisrICBjaGFyICpvdXRwdXRfZmlsZTsgICAgICAgICAgIC8qIEB2YXJ7ZmlsZX0gYXJnIHRvIEBzYW1wey0tb3V0cHV0fSAqLworKyAgaW50IHJlcGVhdF9jb3VudDsgICAgICAgICAgICAvKiBAdmFye2NvdW50fSBhcmcgdG8gQHNhbXB7LS1yZXBlYXR9ICovCisrfTsKKysKKysvKiBQYXJzZSBhIHNpbmdsZSBvcHRpb24uICAqLworK3N0YXRpYyBlcnJvcl90CisrcGFyc2Vfb3B0IChpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKKyt7CisrICAvKiBHZXQgdGhlIEBjb2Rle2lucHV0fSBhcmd1bWVudCBmcm9tIEBjb2Rle2FyZ3BfcGFyc2V9LCB3aGljaCB3ZQorKyAgICAga25vdyBpcyBhIHBvaW50ZXIgdG8gb3VyIGFyZ3VtZW50cyBzdHJ1Y3R1cmUuICAqLworKyAgc3RydWN0IGFyZ3VtZW50cyAqYXJndW1lbnRzID0gc3RhdGUtPmlucHV0OworKworKyAgc3dpdGNoIChrZXkpCisrICAgIHsKKysgICAgY2FzZSAncSc6IGNhc2UgJ3MnOgorKyAgICAgIGFyZ3VtZW50cy0+c2lsZW50ID0gMTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSAndic6CisrICAgICAgYXJndW1lbnRzLT52ZXJib3NlID0gMTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSAnbyc6CisrICAgICAgYXJndW1lbnRzLT5vdXRwdXRfZmlsZSA9IGFyZzsKKysgICAgICBicmVhazsKKysgICAgY2FzZSAncic6CisrICAgICAgYXJndW1lbnRzLT5yZXBlYXRfY291bnQgPSBhcmcgPyBhdG9pIChhcmcpIDogMTA7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgT1BUX0FCT1JUOgorKyAgICAgIGFyZ3VtZW50cy0+YWJvcnQgPSAxOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIEFSR1BfS0VZX05PX0FSR1M6CisrICAgICAgYXJncF91c2FnZSAoc3RhdGUpOworKworKyAgICBjYXNlIEFSR1BfS0VZX0FSRzoKKysgICAgICAvKiBIZXJlIHdlIGtub3cgdGhhdCBAY29kZXtzdGF0ZS0+YXJnX251bSA9PSAwfSwgc2luY2Ugd2UKKysgICAgICAgIGZvcmNlIGFyZ3VtZW50IHBhcnNpbmcgdG8gZW5kIGJlZm9yZSBhbnkgbW9yZSBhcmd1bWVudHMgY2FuCisrICAgICAgICBnZXQgaGVyZS4gICovCisrICAgICAgYXJndW1lbnRzLT5hcmcxID0gYXJnOworKworKyAgICAgIC8qIE5vdyB3ZSBjb25zdW1lIGFsbCB0aGUgcmVzdCBvZiB0aGUgYXJndW1lbnRzLgorKyAgICAgICAgQGNvZGV7c3RhdGUtPm5leHR9IGlzIHRoZSBpbmRleCBpbiBAY29kZXtzdGF0ZS0+YXJndn0gb2YgdGhlCisrICAgICAgICBuZXh0IGFyZ3VtZW50IHRvIGJlIHBhcnNlZCwgd2hpY2ggaXMgdGhlIGZpcnN0IEB2YXJ7c3RyaW5nfQorKyAgICAgICAgd2UncmUgaW50ZXJlc3RlZCBpbiwgc28gd2UgY2FuIGp1c3QgdXNlCisrICAgICAgICBAY29kZXsmc3RhdGUtPmFyZ3Zbc3RhdGUtPm5leHRdfSBhcyB0aGUgdmFsdWUgZm9yCisrICAgICAgICBhcmd1bWVudHMtPnN0cmluZ3MuCisrCisrICAgICAgICBAZW1waHtJbiBhZGRpdGlvbn0sIGJ5IHNldHRpbmcgQGNvZGV7c3RhdGUtPm5leHR9IHRvIHRoZSBlbmQKKysgICAgICAgIG9mIHRoZSBhcmd1bWVudHMsIHdlIGNhbiBmb3JjZSBhcmdwIHRvIHN0b3AgcGFyc2luZyBoZXJlIGFuZAorKyAgICAgICAgcmV0dXJuLiAgKi8KKysgICAgICBhcmd1bWVudHMtPnN0cmluZ3MgPSAmc3RhdGUtPmFyZ3Zbc3RhdGUtPm5leHRdOworKyAgICAgIHN0YXRlLT5uZXh0ID0gc3RhdGUtPmFyZ2M7CisrCisrICAgICAgYnJlYWs7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEFSR1BfRVJSX1VOS05PV047CisrICAgIH0KKysgIHJldHVybiAwOworK30KKysKKysvKiBPdXIgYXJncCBwYXJzZXIuICAqLworK3N0YXRpYyBzdHJ1Y3QgYXJncCBhcmdwID0geyBvcHRpb25zLCBwYXJzZV9vcHQsIGFyZ3NfZG9jLCBkb2MgfTsKKysKKytpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgIGludCBpLCBqOworKyAgc3RydWN0IGFyZ3VtZW50cyBhcmd1bWVudHM7CisrCisrICAvKiBEZWZhdWx0IHZhbHVlcy4gICovCisrICBhcmd1bWVudHMuc2lsZW50ID0gMDsKKysgIGFyZ3VtZW50cy52ZXJib3NlID0gMDsKKysgIGFyZ3VtZW50cy5vdXRwdXRfZmlsZSA9ICItIjsKKysgIGFyZ3VtZW50cy5yZXBlYXRfY291bnQgPSAxOworKyAgYXJndW1lbnRzLmFib3J0ID0gMDsKKysKKysgIC8qIFBhcnNlIG91ciBhcmd1bWVudHM7IGV2ZXJ5IG9wdGlvbiBzZWVuIGJ5IEBjb2Rle3BhcnNlX29wdH0gd2lsbCBiZQorKyAgICAgcmVmbGVjdGVkIGluIEBjb2Rle2FyZ3VtZW50c30uICAqLworKyAgYXJncF9wYXJzZSAoJmFyZ3AsIGFyZ2MsIGFyZ3YsIDAsIDAsICZhcmd1bWVudHMpOworKworKyAgaWYgKGFyZ3VtZW50cy5hYm9ydCkKKysgICAgZXJyb3IgKDEwLCAwLCAiQUJPUlRFRCIpOworKworKyAgZm9yIChpID0gMDsgaSA8IGFyZ3VtZW50cy5yZXBlYXRfY291bnQ7IGkrKykKKysgICAgeworKyAgICAgIHByaW50ZiAoIkFSRzEgPSAlc1xuIiwgYXJndW1lbnRzLmFyZzEpOworKyAgICAgIHByaW50ZiAoIlNUUklOR1MgPSAiKTsKKysgICAgICBmb3IgKGogPSAwOyBhcmd1bWVudHMuc3RyaW5nc1tqXTsgaisrKQorKyAgICAgICBwcmludGYgKGogPT0gMCA/ICIlcyIgOiAiLCAlcyIsIGFyZ3VtZW50cy5zdHJpbmdzW2pdKTsKKysgICAgICBwcmludGYgKCJcbiIpOworKyAgICAgIHByaW50ZiAoIk9VVFBVVF9GSUxFID0gJXNcblZFUkJPU0UgPSAlc1xuU0lMRU5UID0gJXNcbiIsCisrICAgICAgICAgICAgIGFyZ3VtZW50cy5vdXRwdXRfZmlsZSwKKysgICAgICAgICAgICAgYXJndW1lbnRzLnZlcmJvc2UgPyAieWVzIiA6ICJubyIsCisrICAgICAgICAgICAgIGFyZ3VtZW50cy5zaWxlbnQgPyAieWVzIiA6ICJubyIpOworKyAgICB9CisrCisrICBleGl0ICgwKTsKKyt9CitkaWZmIC0tZ2l0IGEvdGVzdC9hcmdwL2FyZ3AtdGVzdC5jIGIvdGVzdC9hcmdwL2FyZ3AtdGVzdC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjNkNTczYgorLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdC9hcmdwL2FyZ3AtdGVzdC5jCitAQCAtMCwwICsxLDIwOSBAQAorKy8qIFRlc3QgcHJvZ3JhbSBmb3IgYXJncCBhcmd1bWVudCBwYXJzZXIKKysgICBDb3B5cmlnaHQgKEMpIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXMgYXQgZ251LmFpLm1pdC5lZHU+LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHRpbWUuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGFyZ3AuaD4KKysKKytjb25zdCBjaGFyICphcmdwX3Byb2dyYW1fdmVyc2lvbiA9ICJhcmdwLXRlc3QgMS4wIjsKKysKKytzdHJ1Y3QgYXJncF9vcHRpb24gc3ViX29wdGlvbnNbXSA9CisreworKyAgeyJzdWJvcHQxIiwgICAgICAgJ3MnLCAgICAgMCwgIDAsICJOZXN0ZWQgb3B0aW9uIDEifSwKKysgIHsic3Vib3B0MiIsICAgICAgICdTJywgICAgIDAsICAwLCAiTmVzdGVkIG9wdGlvbiAyIn0sCisrCisrICB7IDAsIDAsIDAsIDAsICJTb21lIG1vcmUgbmVzdGVkIG9wdGlvbnM6IiwgMTB9LAorKyAgeyJzdWJvcHQzIiwgICAgICAgJ3AnLCAgICAgMCwgIDAsICJOZXN0ZWQgb3B0aW9uIDMifSwKKysKKysgIHsic3Vib3B0NCIsICAgICAgICdxJywgICAgIDAsICAwLCAiTmVzdGVkIG9wdGlvbiA0IiwgMX0sCisrCisrICB7MH0KKyt9OworKworK3N0YXRpYyBjb25zdCBjaGFyIHN1Yl9hcmdzX2RvY1tdID0gIlNUUklORy4uLlxuLSI7Cisrc3RhdGljIGNvbnN0IGNoYXIgc3ViX2RvY1tdID0gIlx2VGhpcyBpcyB0aGUgZG9jIHN0cmluZyBmcm9tIHRoZSBzdWItYXJnLXBhcnNlci4iOworKworK3N0YXRpYyBlcnJvcl90Cisrc3ViX3BhcnNlX29wdCAoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCisreworKyAgc3dpdGNoIChrZXkpCisrICAgIHsKKysgICAgY2FzZSBBUkdQX0tFWV9OT19BUkdTOgorKyAgICAgIHByaW50ZiAoIk5PIFNVQiBBUkdTXG4iKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBBUkdQX0tFWV9BUkc6CisrICAgICAgcHJpbnRmICgiU1VCIEFSRzogJXNcbiIsIGFyZyk7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJ3MnIDogY2FzZSAnUyc6IGNhc2UgJ3AnOiBjYXNlICdxJzoKKysgICAgICBwcmludGYgKCJTVUIgS0VZICVjXG4iLCBrZXkpOworKyAgICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBBUkdQX0VSUl9VTktOT1dOOworKyAgICB9CisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGNoYXIgKgorK3N1Yl9oZWxwX2ZpbHRlciAoaW50IGtleSwgY29uc3QgY2hhciAqdGV4dCwgdm9pZCAqaW5wdXQpCisreworKyAgaWYgKGtleSA9PSBBUkdQX0tFWV9IRUxQX0VYVFJBKQorKyAgICByZXR1cm4gc3RyZHVwICgiVGhpcyBpcyBzb21lIGV4dHJhIHRleHQgZnJvbSB0aGUgc3ViIHBhcnNlciAobm90ZSB0aGF0IGl0IFwKKytpcyBwcmVjZWRlZCBieSBhIGJsYW5rIGxpbmUpLiIpOworKyAgZWxzZQorKyAgICByZXR1cm4gKGNoYXIgKil0ZXh0OworK30KKysKKytzdGF0aWMgc3RydWN0IGFyZ3Agc3ViX2FyZ3AgPSB7CisrICBzdWJfb3B0aW9ucywgc3ViX3BhcnNlX29wdCwgc3ViX2FyZ3NfZG9jLCBzdWJfZG9jLCAwLCBzdWJfaGVscF9maWx0ZXIKKyt9OworKworKy8qIFN0cnVjdHVyZSB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIHBhcnNpbmcgZnVuY3Rpb25zLiAgKi8KKytzdHJ1Y3QgcGFyYW1zCisreworKyAgdW5zaWduZWQgZm9vbmx5OyAgICAgICAgICAgICAvKiBWYWx1ZSBwYXJzZWQgZm9yIGZvb25seS4gICovCisrICB1bnNpZ25lZCBmb29ubHlfZGVmYXVsdDsgICAgIC8qIERlZmF1bHQgdmFsdWUgZm9yIGl0LiAgKi8KKyt9OworKworKyNkZWZpbmUgT1BUX1BHUlAgMQorKyNkZWZpbmUgT1BUX1NFU1MgMgorKworK3N0cnVjdCBhcmdwX29wdGlvbiBvcHRpb25zW10gPQorK3sKKysgIHsicGlkIiwgICAgICAgJ3AnLCAgICAgIlBJRCIsIDAsICJMaXN0IHRoZSBwcm9jZXNzIFBJRCJ9LAorKyAgeyJwZ3JwIiwgICAgICBPUFRfUEdSUCwiUEdSUCIsMCwgIkxpc3QgcHJvY2Vzc2VzIGluIHRoZSBwcm9jZXNzIGdyb3VwIFBHUlAifSwKKysgIHsibm8tcGFyZW50IiwgJ1AnLCAgICAwLCAgICAgMCwgIkluY2x1ZGUgcHJvY2Vzc2VzIHdpdGhvdXQgcGFyZW50cyJ9LAorKyAgezAsICAgICAgICAgICAneCcsICAgICAwLCAgICAgT1BUSU9OX0FMSUFTfSwKKysgIHsiYWxsLWZpZWxkcyIsJ1EnLCAgICAgMCwgICAgIDAsICJEb24ndCBlbGlkZSB1bnVzYWJsZSBmaWVsZHMgKG5vcm1hbGx5IgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGlmIHRoZXJlJ3Mgc29tZSByZWFzb24gcHMgY2FuJ3QiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcHJpbnQgYSBmaWVsZCBmb3IgYW55IHByb2Nlc3MsIGl0J3MiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcmVtb3ZlZCBmcm9tIHRoZSBvdXRwdXQgZW50aXJlbHkpIiB9LAorKyAgeyJyZXZlcnNlIiwgICAncicsICAgIDAsICAgICAgMCwgIlJldmVyc2UgdGhlIG9yZGVyIG9mIGFueSBzb3J0In0sCisrICB7ImdyYXR1aXRvdXNseS1sb25nLXJldmVyc2Utb3B0aW9uIiwgMCwgMCwgT1BUSU9OX0FMSUFTfSwKKysgIHsic2Vzc2lvbiIsICBPUFRfU0VTUywiU0lEIiwgIE9QVElPTl9BUkdfT1BUSU9OQUwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZGQgdGhlIHByb2Nlc3NlcyBmcm9tIHRoZSBzZXNzaW9uIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFNJRCAod2hpY2ggZGVmYXVsdHMgdG8gdGhlIHNpZCBvZiIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0aGUgY3VycmVudCBwcm9jZXNzKSIgfSwKKysKKysgIHswLDAsMCwwLCAiSGVyZSBhcmUgc29tZSBtb3JlIG9wdGlvbnM6In0sCisrICB7ImZvb25seSIsICdmJywgIlpPVCIsIE9QVElPTl9BUkdfT1BUSU9OQUwsICJHbG9yayBhIGZvb25seSJ9LAorKyAgeyJ6YXphIiwgJ3onLCAwLCAwLCAiU25pdCBhIHphciJ9LAorKworKyAgezB9CisrfTsKKysKKytzdGF0aWMgY29uc3QgY2hhciBhcmdzX2RvY1tdID0gIlNUUklORyI7Cisrc3RhdGljIGNvbnN0IGNoYXIgZG9jW10gPSAiVGVzdCBwcm9ncmFtIGZvciBhcmdwLiIKKysgIlx2VGhpcyBkb2Mgc3RyaW5nIGNvbWVzIGFmdGVyIHRoZSBvcHRpb25zLiIKKysgIlxuSGV5ISAgU29tZSBtYW51YWwgZm9ybWF0dGluZyEiCisrICJcblRoZSBjdXJyZW50IHRpbWUgaXM6ICVzIjsKKysKKytzdGF0aWMgdm9pZAorK3BvcHQgKGludCBrZXksIGNoYXIgKmFyZykKKyt7CisrICBjaGFyIGJ1ZlsxMF07CisrICBpZiAoaXNwcmludCAoa2V5KSkKKysgICAgc3ByaW50ZiAoYnVmLCAiJWMiLCBrZXkpOworKyAgZWxzZQorKyAgICBzcHJpbnRmIChidWYsICIlZCIsIGtleSk7CisrICBpZiAoYXJnKQorKyAgICBwcmludGYgKCJLRVkgJXM6ICVzXG4iLCBidWYsIGFyZyk7CisrICBlbHNlCisrICAgIHByaW50ZiAoIktFWSAlc1xuIiwgYnVmKTsKKyt9CisrCisrc3RhdGljIGVycm9yX3QKKytwYXJzZV9vcHQgKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQorK3sKKysgIHN0cnVjdCBwYXJhbXMgKnBhcmFtcyA9IHN0YXRlLT5pbnB1dDsKKysKKysgIHN3aXRjaCAoa2V5KQorKyAgICB7CisrICAgIGNhc2UgQVJHUF9LRVlfTk9fQVJHUzoKKysgICAgICBwcmludGYgKCJOTyBBUkdTXG4iKTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSBBUkdQX0tFWV9BUkc6CisrICAgICAgaWYgKHN0YXRlLT5hcmdfbnVtID4gMCkKKysgICAgICAgcmV0dXJuIEFSR1BfRVJSX1VOS05PV047IC8qIExlYXZlIGl0IGZvciB0aGUgc3ViLWFyZyBwYXJzZXIuICAqLworKyAgICAgIHByaW50ZiAoIkFSRzogJXNcbiIsIGFyZyk7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJ2YnOgorKyAgICAgIGlmIChhcmcpCisrICAgICAgIHBhcmFtcy0+Zm9vbmx5ID0gYXRvaSAoYXJnKTsKKysgICAgICBlbHNlCisrICAgICAgIHBhcmFtcy0+Zm9vbmx5ID0gcGFyYW1zLT5mb29ubHlfZGVmYXVsdDsKKysgICAgICBwb3B0IChrZXksIGFyZyk7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJ3AnOiBjYXNlICdQJzogY2FzZSBPUFRfUEdSUDogY2FzZSAneCc6IGNhc2UgJ1EnOgorKyAgICBjYXNlICdyJzogY2FzZSBPUFRfU0VTUzogY2FzZSAneic6CisrICAgICAgcG9wdCAoa2V5LCBhcmcpOworKyAgICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBBUkdQX0VSUl9VTktOT1dOOworKyAgICB9CisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGNoYXIgKgorK2hlbHBfZmlsdGVyIChpbnQga2V5LCBjb25zdCBjaGFyICp0ZXh0LCB2b2lkICppbnB1dCkKKyt7CisrICBjaGFyICpuZXdfdGV4dDsKKysgIHN0cnVjdCBwYXJhbXMgKnBhcmFtcyA9IGlucHV0OworKworKyAgaWYgKGtleSA9PSBBUkdQX0tFWV9IRUxQX1BPU1RfRE9DICYmIHRleHQpCisrICAgIHsKKysgICAgICB0aW1lX3Qgbm93ID0gdGltZSAoMCk7CisrICAgICAgYXNwcmludGYgKCZuZXdfdGV4dCwgdGV4dCwgY3RpbWUgKCZub3cpKTsKKysgICAgfQorKyAgZWxzZSBpZiAoa2V5ID09ICdmJykKKysgICAgLyogU2hvdyB0aGUgZGVmYXVsdCBmb3IgdGhlIC0tZm9vbmx5IG9wdGlvbi4gICovCisrICAgIGFzcHJpbnRmICgmbmV3X3RleHQsICIlcyAoWk9UIGRlZmF1bHRzIHRvICV4KSIsCisrICAgICAgICAgICAgIHRleHQsIHBhcmFtcy0+Zm9vbmx5X2RlZmF1bHQpOworKyAgZWxzZQorKyAgICBuZXdfdGV4dCA9IChjaGFyICopdGV4dDsKKysKKysgIHJldHVybiBuZXdfdGV4dDsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBhcmdwX2NoaWxkIGFyZ3BfY2hpbGRyZW5bXSA9IHsgeyAmc3ViX2FyZ3AgfSwgeyAwIH0gfTsKKytzdGF0aWMgc3RydWN0IGFyZ3AgYXJncCA9IHsKKysgIG9wdGlvbnMsIHBhcnNlX29wdCwgYXJnc19kb2MsIGRvYywgYXJncF9jaGlsZHJlbiwgaGVscF9maWx0ZXIKKyt9OworKworK2ludAorK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICBzdHJ1Y3QgcGFyYW1zIHBhcmFtczsKKysgIHBhcmFtcy5mb29ubHkgPSAwOworKyAgcGFyYW1zLmZvb25seV9kZWZhdWx0ID0gcmFuZG9tICgpOworKyAgYXJncF9wYXJzZSAoJmFyZ3AsIGFyZ2MsIGFyZ3YsIDAsIDAsICZwYXJhbXMpOworKyAgcHJpbnRmICgiQWZ0ZXIgcGFyc2luZzogZm9vbmx5ID0gJXhcbiIsIHBhcmFtcy5mb29ubHkpOworKyAgcmV0dXJuIDA7CisrfQorZGlmZiAtLWdpdCBhL3Rlc3QvYXJncC9idWctYXJncDEuYyBiL3Rlc3QvYXJncC9idWctYXJncDEuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmEyOGNmNGIKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3QvYXJncC9idWctYXJncDEuYworQEAgLTAsMCArMSwyNiBAQAorKyNpbmNsdWRlIDxhcmdwLmg+CisrCisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiB0ZXN0X29wdGlvbnNbXSA9CisreworKyAgeyBOVUxMLCAnYScsIE5VTEwsIE9QVElPTl9ET0MsIE5VTEwgfSwKKysgIHsgTlVMTCwgJ2InLCBOVUxMLCBPUFRJT05fRE9DLCBOVUxMIH0sCisrICB7IE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwgfQorK307CisrCisrc3RhdGljIHN0cnVjdCBhcmdwIHRlc3RfYXJncCA9CisreworKyAgdGVzdF9vcHRpb25zCisrfTsKKysKKysKKytzdGF0aWMgaW50CisrZG9fdGVzdCAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICBpbnQgaTsKKysgIGFyZ3BfcGFyc2UgKCZ0ZXN0X2FyZ3AsIGFyZ2MsIGFyZ3YsIDAsICZpLCBOVUxMKTsKKysgIHJldHVybiAwOworK30KKysKKysjZGVmaW5lIFRFU1RfRlVOQ1RJT04gZG9fdGVzdCAoYXJnYywgYXJndikKKysjaW5jbHVkZSAiLi4vdGVzdC1za2VsZXRvbi5jIgorZGlmZiAtLWdpdCBhL3Rlc3QvYXJncC90c3QtYXJncDEuYyBiL3Rlc3QvYXJncC90c3QtYXJncDEuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjgyN2RhY2EKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3QvYXJncC90c3QtYXJncDEuYworQEAgLTAsMCArMSwxMTggQEAKKysvKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgQ29udHJpYnV0ZWQgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXIgYXQgcmVkaGF0LmNvbT4sIDIwMDIuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxhcmdwLmg+CisrCisrCisrCisrCisrI2RlZmluZSBPUFRfVE9fVEhSRUFEICAgICAgICAgIDMwMAorKyNkZWZpbmUgT1BUX1RPX1BST0NFU1MgICAgICAgICAzMDEKKysjZGVmaW5lIE9QVF9TWU5DX1NJR05BTCAgICAgICAgICAgICAgICAzMDIKKysjZGVmaW5lIE9QVF9TWU5DX0pPSU4gICAgICAgICAgMzAzCisrI2RlZmluZSBPUFRfVE9QTEVWRUwgICAgICAgICAgIDMwNAorKworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gdGVzdF9vcHRpb25zW10gPQorKyAgeworKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAsICJcCisrVGhpcyBpcyBhIHRlc3QgZm9yIHRocmVhZHMgc28gd2UgYWxsb3cgdGhlciB1c2VyIHRvIHNlbGVjdGlvbiB0aGUgbnVtYmVyIG9mIFwKKyt0aHJlYWRzIHdoaWNoIGFyZSB1c2VkIGF0IGFueSBvbmUgdGltZS4gIEluZGVwZW5kZW50bHkgdGhlIHRvdGFsIG51bWJlciBvZiBcCisrcm91bmRzIGNhbiBiZSBzZWxlY3RlZC4gIFRoaXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiB0aHJlYWRzIHdoaWNoIHdpbGwgaGF2ZSBcCisrcnVuIHdoZW4gdGhlIHByb2Nlc3MgdGVybWluYXRlczoiIH0sCisrICAgIHsgInRocmVhZHMiLCAndCcsICJOVU1CRVIiLCAwLCAiTnVtYmVyIG9mIHRocmVhZHMgdXNlZCBhdCBvbmNlIiB9LAorKyAgICB7ICJzdGFydHMiLCAncycsICJOVU1CRVIiLCAwLCAiVG90YWwgbnVtYmVyIG9mIHdvcmtpbmcgdGhyZWFkcyIgfSwKKysgICAgeyAidG9wbGV2ZWwiLCBPUFRfVE9QTEVWRUwsICJOVU1CRVIiLCAwLAorKyAgICAgICJOdW1iZXIgb2YgdG9wbGV2ZWwgdGhyZWFkcyB3aGljaCBzdGFydCB0aGUgb3RoZXIgdGhyZWFkczsgdGhpcyBcCisraW1wbGllcyAtLXN5bmMtam9pbiIgfSwKKysKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwLCAiXAorK0VhY2ggdGhyZWFkIGNhbiBkbyBvbmUgb2YgdHdvIHRoaW5nczogc2xlZXAgb3IgZG8gd29yay4gIFRoZSBsYXR0ZXIgaXMgMTAwJSBcCisrQ1BVIGJvdW5kLiAgVGhlIHdvcmsgbG9hZCBpcyB0aGUgcHJvYmFiaWxpdHkgYSB0aHJlYWQgZG9lcyB3b3JrLiAgQWxsIHZhbHVlcyBcCisrZnJvbSB6ZXJvIHRvIDEwMCAoaW5jbHVzaXZlKSBhcmUgdmFsaWQuICBIb3cgb2Z0ZW4gZWFjaCB0aHJlYWQgcmVwZWF0cyB0aGlzIFwKKytjYW4gYmUgZGV0ZXJtaW5lZCBieSB0aGUgbnVtYmVyIG9mIHJvdW5kcy4gIFRoZSB3b3JrIGNvc3QgZGV0ZXJtaW5lcyBob3cgbG9uZyBcCisrZWFjaCB3b3JrIHNlc3Npb24gKG5vdCBzbGVlcGluZykgdGFrZXMuICBJZiBpdCBpcyB6ZXJvIGEgdGhyZWFkIHdvdWxkIFwKKytlZmZlY3RpdmVseSBub3RoaW5nLiAgQnkgc2V0dGluZyB0aGUgbnVtYmVyIG9mIHJvdW5kcyB0byB6ZXJvIHRoZSB0aHJlYWQgXAorK2RvZXMgbm8gd29yayBhdCBhbGwgYW5kIHB1cmUgdGhyZWFkIGNyZWF0aW9uIHRpbWVzIGNhbiBiZSBtZWFzdXJlZC4iIH0sCisrICAgIHsgIndvcmtsb2FkIiwgJ3cnLCAiUEVSQ0VOVCIsIDAsICJQZXJjZW50YWdlIG9mIHRpbWUgc3BlbnQgd29ya2luZyIgfSwKKysgICAgeyAid29ya2Nvc3QiLCAnYycsICJOVU1CRVIiLCAwLAorKyAgICAgICJGYWN0b3IgaW4gdGhlIGNvc3Qgb2YgZWFjaCByb3VuZCBvZiB3b3JraW5nIiB9LAorKyAgICB7ICJyb3VuZHMiLCAncicsICJOVU1CRVIiLCAwLCAiTnVtYmVyIG9mIHJvdW5kcyBlYWNoIHRocmVhZCBydW5zIiB9LAorKworKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAsICJcCisrVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGRpZmZlcmVudCBtZXRob2RzIGhvdyB0aHJlYWQgY3JlYXRpb24gY2FuIGJlIFwKKytzeW5jaHJvbml6ZWQuICBTeW5jaHJvbml6YXRpb24gaXMgbmVjZXNzYXJ5IHNpbmNlIHRoZSBudW1iZXIgb2YgY29uY3VycmVudGx5IFwKKytydW5uaW5nIHRocmVhZHMgaXMgbGltaXRlZC4iIH0sCisrICAgIHsgInN5bmMtc2lnbmFsIiwgT1BUX1NZTkNfU0lHTkFMLCBOVUxMLCAwLAorKyAgICAgICJTeW5jaHJvbml6ZSB1c2luZyBhIHNpZ25hbCAoZGVmYXVsdCkiIH0sCisrICAgIHsgInN5bmMtam9pbiIsIE9QVF9TWU5DX0pPSU4sIE5VTEwsIDAsICJTeW5jaHJvbml6ZSB1c2luZyBwdGhyZWFkX2pvaW4iIH0sCisrCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgIlwKKytPbmUgcGFyYW1ldGVyIGZvciBlYWNoIHRocmVhZHMgZXhlY3V0aW9uIGlzIHRoZSBzaXplIG9mIHRoZSBzdGFjay4gIElmIHRoaXMgXAorK3BhcmFtZXRlciBpcyBub3QgdXNlZCB0aGUgc3lzdGVtJ3MgZGVmYXVsdCBzdGFjayBzaXplIGlzIHVzZWQuICBJZiBtYW55IFwKKyt0aHJlYWRzIGFyZSB1c2VkIHRoZSBzdGFjayBzaXplIHNob3VsZCBiZSBjaG9zZW4gcXVpdGUgc21hbGwuIiB9LAorKyAgICB7ICJzdGFja3NpemUiLCAnUycsICJCWVRFUyIsIDAsICJTaXplIG9mIHRocmVhZHMgc3RhY2siIH0sCisrICAgIHsgImd1YXJkc2l6ZSIsICdnJywgIkJZVEVTIiwgMCwKKysgICAgICAiU2l6ZSBvZiBzdGFjayBndWFyZCBhcmVhOyBtdXN0IGZpdCBpbnRvIHRoZSBzdGFjayIgfSwKKysKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwLCAiU2lnbmFsIG9wdGlvbnM6IiB9LAorKyAgICB7ICJ0by10aHJlYWQiLCBPUFRfVE9fVEhSRUFELCBOVUxMLCAwLCAiU2VuZCBzaWduYWwgdG8gbWFpbiB0aHJlYWQiIH0sCisrICAgIHsgInRvLXByb2Nlc3MiLCBPUFRfVE9fUFJPQ0VTUywgTlVMTCwgMCwKKysgICAgICAiU2VuZCBzaWduYWwgdG8gcHJvY2VzcyAoZGVmYXVsdCkiIH0sCisrCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgIkFkbWluaXN0cmF0aXZlIG9wdGlvbnM6IiB9LAorKyAgICB7ICJwcm9ncmVzcyIsICdwJywgTlVMTCwgMCwgIlNob3cgc2lnbnMgb2YgcHJvZ3Jlc3MiIH0sCisrICAgIHsgInRpbWluZyIsICdUJywgTlVMTCwgMCwKKysgICAgICAiTWVhc3VyZSB0aW1lIGZyb20gc3RhcnR1cCB0byB0aGUgbGFzdCB0aHJlYWQgZmluaXNoaW5nIiB9LAorKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwgfQorKyAgfTsKKysKKysvKiBQcm90b3R5cGUgZm9yIG9wdGlvbiBoYW5kbGVyLiAgKi8KKytzdGF0aWMgZXJyb3JfdCBwYXJzZV9vcHQgKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKTsKKysKKysvKiBEYXRhIHN0cnVjdHVyZSB0byBjb21tdW5pY2F0ZSB3aXRoIGFyZ3AgZnVuY3Rpb25zLiAgKi8KKytzdGF0aWMgc3RydWN0IGFyZ3AgYXJncCA9CisreworKyAgdGVzdF9vcHRpb25zLCBwYXJzZV9vcHQKKyt9OworKworKworK3N0YXRpYyBpbnQKKytkb190ZXN0ICh2b2lkKQorK3sKKysgIGludCBhcmdjID0gMjsKKysgIGNoYXIgKmFyZ3ZbM10gPSB7IChjaGFyICopICJ0c3QtYXJncDEiLCAoY2hhciAqKSAiLS1oZWxwIiwgTlVMTCB9OworKyAgaW50IHJlbWFpbmluZzsKKysKKysgIC8qIFBhcnNlIGFuZCBwcm9jZXNzIGFyZ3VtZW50cy4gICovCisrICBhcmdwX3BhcnNlICgmYXJncCwgYXJnYywgYXJndiwgMCwgJnJlbWFpbmluZywgTlVMTCk7CisrCisrICByZXR1cm4gMDsKKyt9CisrCisrCisrLyogSGFuZGxlIHByb2dyYW0gYXJndW1lbnRzLiAgKi8KKytzdGF0aWMgZXJyb3JfdAorK3BhcnNlX29wdCAoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCisreworKyAgcmV0dXJuIEFSR1BfRVJSX1VOS05PV047CisrfQorKworKyNkZWZpbmUgVEVTVF9GVU5DVElPTiBkb190ZXN0ICgpCisrI2luY2x1ZGUgIi4uL3Rlc3Qtc2tlbGV0b24uYyIKK2RpZmYgLS1naXQgYS90ZXN0L2FyZ3AvdHN0LWFyZ3AyLmMgYi90ZXN0L2FyZ3AvdHN0LWFyZ3AyLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43MDVjZGNhCistLS0gL2Rldi9udWxsCisrKysgYi90ZXN0L2FyZ3AvdHN0LWFyZ3AyLmMKK0BAIC0wLDAgKzEsMTAxIEBACisrLyogQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIENvbnRyaWJ1dGVkIGJ5IEpha3ViIEplbGluZWsgPGpha3ViIGF0IHJlZGhhdC5jb20+LCAyMDA3LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8YXJncC5oPgorKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0MVtdID0KKysgIHsKKysgICAgeyAib3B0MSIsICcxJywgIk5VTUJFUiIsIDAsICJPcHRpb24gMSIgfSwKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMIH0KKysgIH07CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHQyW10gPQorKyAgeworKyAgICB7ICJvcHQyIiwgJzInLCAiTlVNQkVSIiwgMCwgIk9wdGlvbiAyIiB9LAorKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwgfQorKyAgfTsKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdDNbXSA9CisrICB7CisrICAgIHsgIm9wdDMiLCAnMycsICJOVU1CRVIiLCAwLCAiT3B0aW9uIDMiIH0sCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCB9CisrICB9OworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0NFtdID0KKysgIHsKKysgICAgeyAib3B0NCIsICc0JywgIk5VTUJFUiIsIDAsICJPcHRpb24gNCIgfSwKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMIH0KKysgIH07CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHQ1W10gPQorKyAgeworKyAgICB7ICJvcHQ1IiwgJzUnLCAiTlVNQkVSIiwgMCwgIk9wdGlvbiA1IiB9LAorKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwgfQorKyAgfTsKKysKKytzdGF0aWMgc3RydWN0IGFyZ3AgYXJncDUgPQorKyAgeworKyAgICBvcHQ1LCBOVUxMLCAiYXJncyBkb2M1IiwgImRvYzUiLCBOVUxMLCBOVUxMLCBOVUxMCisrICB9OworKworK3N0YXRpYyBzdHJ1Y3QgYXJncCBhcmdwNCA9CisrICB7CisrICAgIG9wdDQsIE5VTEwsICJhcmdzIGRvYzQiLCAiZG9jNCIsIE5VTEwsIE5VTEwsIE5VTEwKKysgIH07CisrCisrc3RhdGljIHN0cnVjdCBhcmdwIGFyZ3AzID0KKysgIHsKKysgICAgb3B0MywgTlVMTCwgImFyZ3MgZG9jMyIsICJkb2MzIiwgTlVMTCwgTlVMTCwgTlVMTAorKyAgfTsKKysKKytzdGF0aWMgc3RydWN0IGFyZ3BfY2hpbGQgY2hpbGRyZW4yW10gPQorKyAgeworKyAgICB7ICZhcmdwNCwgMCwgImNoaWxkMyIsIDMgfSwKKysgICAgeyAmYXJncDUsIDAsICJjaGlsZDQiLCA0IH0sCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCB9CisrICB9OworKworK3N0YXRpYyBzdHJ1Y3QgYXJncCBhcmdwMiA9CisrICB7CisrICAgIG9wdDIsIE5VTEwsICJhcmdzIGRvYzIiLCAiZG9jMiIsIGNoaWxkcmVuMiwgTlVMTCwgTlVMTAorKyAgfTsKKysKKytzdGF0aWMgc3RydWN0IGFyZ3BfY2hpbGQgY2hpbGRyZW4xW10gPQorKyAgeworKyAgICB7ICZhcmdwMiwgMCwgImNoaWxkMSIsIDEgfSwKKysgICAgeyAmYXJncDMsIDAsICJjaGlsZDIiLCAyIH0sCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCB9CisrICB9OworKworK3N0YXRpYyBzdHJ1Y3QgYXJncCBhcmdwMSA9CisrICB7CisrICAgIG9wdDEsIE5VTEwsICJhcmdzIGRvYzEiLCAiZG9jMSIsIGNoaWxkcmVuMSwgTlVMTCwgTlVMTAorKyAgfTsKKysKKysKKytzdGF0aWMgaW50CisrZG9fdGVzdCAodm9pZCkKKyt7CisrICBhcmdwX2hlbHAgKCZhcmdwMSwgc3Rkb3V0LCBBUkdQX0hFTFBfTE9ORywgKGNoYXIgKikgInRzdC1hcmdwMiIpOworKyAgcmV0dXJuIDA7CisrfQorKworKworKyNkZWZpbmUgVEVTVF9GVU5DVElPTiBkb190ZXN0ICgpCisrI2luY2x1ZGUgIi4uL3Rlc3Qtc2tlbGV0b24uYyIKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA0LURvbnQtc3VwcG9ydC1sb2NhbGlzZWQtb3B0aW1pemF0aW9ucy10aGlzLWhlbHBzLXRvLWgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDQtRG9udC1zdXBwb3J0LWxvY2FsaXNlZC1vcHRpbWl6YXRpb25zLXRoaXMtaGVscHMtdG8taC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjllMTNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA0LURvbnQtc3VwcG9ydC1sb2NhbGlzZWQtb3B0aW1pemF0aW9ucy10aGlzLWhlbHBzLXRvLWgucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSAzMTc4NWM1NDRhYmU4YjIxNWRiYjIyNjRmYjExZWU3MDUxNTE1Nzk3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMTYgQXVnIDIwMTUgMjA6NTg6NTkgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCA0LzddIERvbnQgc3VwcG9ydCBsb2NhbGlzZWQgb3B0aW1pemF0aW9ucyB0aGlzIGhlbHBzIHRvIGhhdmUgYQorIGdsb2JhbCAtTyBsZXZlbAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIGxpYnB0aHJlYWQvbnB0bC9wdGhyZWFkX211dGV4X3RpbWVkbG9jay5jIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYnB0aHJlYWQvbnB0bC9wdGhyZWFkX211dGV4X3RpbWVkbG9jay5jIGIvbGlicHRocmVhZC9ucHRsL3B0aHJlYWRfbXV0ZXhfdGltZWRsb2NrLmMKK2luZGV4IDA0MTg3ZjYuLmY1NmY2YzUgMTAwNjQ0CistLS0gYS9saWJwdGhyZWFkL25wdGwvcHRocmVhZF9tdXRleF90aW1lZGxvY2suYworKysrIGIvbGlicHRocmVhZC9ucHRsL3B0aHJlYWRfbXV0ZXhfdGltZWRsb2NrLmMKK0BAIC0yOCw3ICsyOCw5IEBACisgICogZXJyb3I6IGNhbid0IGZpbmQgYSByZWdpc3RlciBpbiBjbGFzcyDigJhHRU5FUkFMX1JFR1PigJkgd2hpbGUgcmVsb2FkaW5nIOKAmGFzbeKAmQorICAqLworIGludAorKyNpZm5kZWYgIF9fT1BUSU1JWkVfXworIGF0dHJpYnV0ZV9vcHRpbWl6ZSgiT3MiKQorKyNlbmRpZgorIHB0aHJlYWRfbXV0ZXhfdGltZWRsb2NrICgKKyAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgsCisgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKmFic3RpbWUpCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwNS1BbHdheXMtdXNlLU8yLWZvci1jb21waWxpbmctZm9yay5jLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA1LUFsd2F5cy11c2UtTzItZm9yLWNvbXBpbGluZy1mb3JrLmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ5YjI0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwNS1BbHdheXMtdXNlLU8yLWZvci1jb21waWxpbmctZm9yay5jLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gODgzZGViYzIyZTMwYTk0N2ZlNTg1OGNjMDdlZTVhZWJkM2QwN2EyZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDE2IEF1ZyAyMDE1IDIwOjU5OjU2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggNS83XSBBbHdheXMgdXNlIC1PMiBmb3IgY29tcGlsaW5nIGZvcmsuYworCitXaGVuIGNvbXBpbGluZyBpbiB0aHVtYiBtb2RlIGZvciBhcm0gd2l0aCAtT3MgZ2NjIGdpdmVzIHVwIHNpbmNlIGl0IGNhbgorbm90IGZpbmQgcmVnaXN0ZXJzIHRvIHNwaWxsLiBTbyB3ZSB1c2UgLU8yIG9wdGlvbiBmb3IgY29tcGlsaW5nIGZvcmsuYworSXQgbWF5IGJlIGFkZHJlc3NhYmxlIGluIGdjYy4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBsaWJwdGhyZWFkL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL01ha2VmaWxlLmFyY2ggfCA2ICsrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYnB0aHJlYWQvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hcm0vTWFrZWZpbGUuYXJjaCBiL2xpYnB0aHJlYWQvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hcm0vTWFrZWZpbGUuYXJjaAoraW5kZXggMGVhMGIyOS4uMDc2N2U5YyAxMDA2NDQKKy0tLSBhL2xpYnB0aHJlYWQvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hcm0vTWFrZWZpbGUuYXJjaAorKysrIGIvbGlicHRocmVhZC9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FybS9NYWtlZmlsZS5hcmNoCitAQCAtMjEsMyArMjEsOSBAQCBBU0ZMQUdTLXB0LXZmb3JrLlMgPSAtbWFybQorIENGTEFHUy1PTUlULXB0LXZmb3JrLlMgPSAtbXRodW1iCisgQVNGTEFHUy12Zm9yay5TID0gLW1hcm0KKyBDRkxBR1MtT01JVC12Zm9yay5TID0gLW10aHVtYgorKworKyMgRm9yIGFybSBmb3JrLmMgZG9lcyBub3QgY29tcGlsZSB3aXRoIC1PcyB3aGVuIGNvbXBpbGluZworKyMgaW4gdGh1bWIxIG1vZGUKKytpZmVxICgkKENPTVBJTEVfSU5fVEhVTUJfTU9ERSkseSkKKytDRkxBR1MtZm9yay5jID0gLU8yCisrZW5kaWYKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA2LWxkc28tbGltaXRlZC1zdXBwb3J0LWZvci1PUklHSU4taW4tcnBhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDYtbGRzby1saW1pdGVkLXN1cHBvcnQtZm9yLU9SSUdJTi1pbi1ycGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGQ4NzM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA2LWxkc28tbGltaXRlZC1zdXBwb3J0LWZvci1PUklHSU4taW4tcnBhdGgucGF0Y2gKQEAgLTAsMCArMSwyMzMgQEAKK0Zyb20gYjQwYzEyOWVkMmQ1M2I2OTQ2Mzg4M2E1NDIyZGQ0YTAxMmEzOThmOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1bmxpbmcgWmhlbmcgPHpoZW5nanVubGluZ0BodWF3ZWkuY29tPgorRGF0ZTogRnJpLCAzIEFwciAyMDE1IDA1OjAyOjI3ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggNi83XSBsZHNvOiBsaW1pdGVkIHN1cHBvcnQgZm9yICRPUklHSU4gaW4gcnBhdGgKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworRGVyaXZlZCBmcm9tOgoraHR0cDovL2xpc3RzLmJ1c3lib3gubmV0L3BpcGVybWFpbC91Y2xpYmMvMjAxMS1NYXJjaC8wNDUwMDMuaHRtbAorCitIb3dldmVyLCB0aGUgYWJvdmUgcGF0Y2ggaW50cm9kdWNlZCAnX2RsX3N0cmNocicgaW4gbGRzby9sZHNvL2RsLWVsZi5jLAorYW5kIGNhdXNlZCB0aGUgZm9sbG93aW5nIHVuZGVmaW5lZCByZWZlcmVuY2luZyBjb21waWxpbmcgZXJyb3I6CisKKyAgfCAuLi4vbGliZGwuYShsaWJkbC5vcyk6IEluIGZ1bmN0aW9uIGBzZWFyY2hfZm9yX25hbWVkX2xpYnJhcnknOgorICB8IC4uLi9kbC1lbGYuYzoxNTY6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9kbF9zdHJjaHInCisgIHwgY29sbGVjdDI6IGVycm9yOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCisKK1RoaXMgcHJvYmxlbSB3b3VsZCBiZSByZXByb2R1Y2VkIHRocm91Z2ggY29tcGlsaW5nIGdkYiBpbiBzdGF0aWMgbW9kZQordXNpbmcgdWNsaWJjLgorCitTbywgYWRkIHRoZSBkZWZpbml0aW9uIG9mICdfZGxfc3RyY2hyJyB0byBmaXggaXQuIFRoZSAnX2RsX3N0cnN0cicgaXMKK2FkZGVkIGFzIHdlbGwuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFRpbW8gVGVyw6RzIDx0aW1vLnRlcmFzIGF0IGlraS5maT4KK1NpZ25lZC1vZmYtYnk6IEp1bmxpbmcgWmhlbmcgPHpoZW5nanVubGluZ0BodWF3ZWkuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBsZHNvL2luY2x1ZGUvZGwtc3RyaW5nLmggfCAgMiArKworIGxkc28vbGRzby9kbC1lbGYuYyAgICAgICB8IDc5ICsrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGxkc28vbGRzby9sZHNvLmMgICAgICAgICB8IDE4ICsrKysrKysrKy0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1OSBpbnNlcnRpb25zKCspLCA0MCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xkc28vaW5jbHVkZS9kbC1zdHJpbmcuaCBiL2xkc28vaW5jbHVkZS9kbC1zdHJpbmcuaAoraW5kZXggYWFjYWQxMC4uMTRhZTYxNyAxMDA2NDQKKy0tLSBhL2xkc28vaW5jbHVkZS9kbC1zdHJpbmcuaAorKysrIGIvbGRzby9pbmNsdWRlL2RsLXN0cmluZy5oCitAQCAtMjA0LDcgKzIwNCw5IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgY2hhciAqIF9kbF9nZXRfbGFzdF9wYXRoX2NvbXBvbmVudChjaGFyICpwYXRoKQorICMgZGVmaW5lIF9kbF9zdHJjYXQgc3RyY2F0CisgIyBkZWZpbmUgX2RsX3N0cmNweSBzdHJjcHkKKyAjIGRlZmluZSBfZGxfc3RyY21wIHN0cmNtcAorKyMgZGVmaW5lIF9kbF9zdHJjaHIgc3RyY2hyCisgIyBkZWZpbmUgX2RsX3N0cnJjaHIgc3RycmNocgorKyMgZGVmaW5lIF9kbF9zdHJzdHIgc3Ryc3RyCisgIyBkZWZpbmUgX2RsX21lbWNweSBtZW1jcHkKKyAjIGRlZmluZSBfZGxfbWVtY21wIG1lbWNtcAorICMgZGVmaW5lIF9kbF9tZW1zZXQgbWVtc2V0CitkaWZmIC0tZ2l0IGEvbGRzby9sZHNvL2RsLWVsZi5jIGIvbGRzby9sZHNvL2RsLWVsZi5jCitpbmRleCA1NjMxOTA1Li42YWI3YWZlIDEwMDY0NAorLS0tIGEvbGRzby9sZHNvL2RsLWVsZi5jCisrKysgYi9sZHNvL2xkc28vZGwtZWxmLmMKK0BAIC0xMzMsNTYgKzEzMyw2MCBAQCBfZGxfcHJvdGVjdF9yZWxybyAoc3RydWN0IGVsZl9yZXNvbHZlICpsKQorICAqIGluIHVDbGliYy9sZHNvL3V0aWwvbGRkLmMgKi8KKyBzdGF0aWMgc3RydWN0IGVsZl9yZXNvbHZlICoKKyBzZWFyY2hfZm9yX25hbWVkX2xpYnJhcnkoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgcmZsYWdzLCBjb25zdCBjaGFyICpwYXRoX2xpc3QsCistCXN0cnVjdCBkeW5fZWxmICoqcnBudCkKKysJc3RydWN0IGR5bl9lbGYgKipycG50LCBjb25zdCBjaGFyKiBvcmlnaW4pCisgeworLQljaGFyICpwYXRoLCAqcGF0aF9uLCAqbXlsaWJuYW1lOworKwljaGFyICpteWxpYm5hbWU7CisrCWNvbnN0IGNoYXIgKnAsICpwbjsKKyAJc3RydWN0IGVsZl9yZXNvbHZlICp0cG50OworLQlpbnQgZG9uZTsKKysJaW50IHBsZW47CisgCisgCWlmIChwYXRoX2xpc3Q9PU5VTEwpCisgCQlyZXR1cm4gTlVMTDsKKyAKKy0JLyogV2UgbmVlZCBhIHdyaXRhYmxlIGNvcHkgb2YgdGhpcyBzdHJpbmcsIGJ1dCB3ZSBkb24ndAorLQkgKiBuZWVkIHRoaXMgYWxsb2NhdGVkIHBlcm1hbmVudGx5IHNpbmNlIHdlIGRvbid0IHdhbnQKKy0JICogdG8gbGVhayBtZW1vcnksIHNvIHVzZSBhbGxvY2EgdG8gcHV0IHBhdGggb24gdGhlIHN0YWNrICovCistCWRvbmUgPSBfZGxfc3RybGVuKHBhdGhfbGlzdCk7CistCXBhdGggPSBhbGxvY2EoZG9uZSArIDEpOworLQorIAkvKiBhbm90aGVyIGJpdCBvZiBsb2NhbCBzdG9yYWdlICovCisgCW15bGlibmFtZSA9IGFsbG9jYSgyMDUwKTsKKyAKKy0JX2RsX21lbWNweShwYXRoLCBwYXRoX2xpc3QsIGRvbmUrMSk7CistCisgCS8qIFVubGlrZSBsZGQuYywgZG9uJ3QgYm90aGVyIHRvIGVsaW1pbmF0ZSBkb3VibGUgLy9zICovCisgCisgCS8qIFJlcGxhY2UgY29sb25zIHdpdGggemVyb3MgaW4gcGF0aF9saXN0ICovCisgCS8qIDogYXQgdGhlIGJlZ2lubmluZyBvciBlbmQgb2YgcGF0aCBtYXBzIHRvIENXRCAqLworIAkvKiA6OiBhbnl3aGVyZSBtYXBzIENXRCAqLworIAkvKiAiIiBtYXBzIHRvIENXRCAqLworLQlkb25lID0gMDsKKy0JcGF0aF9uID0gcGF0aDsKKy0JZG8geworLQkJaWYgKCpwYXRoID09IDApIHsKKy0JCQkqcGF0aCA9ICc6JzsKKy0JCQlkb25lID0gMTsKKysJZm9yIChwID0gcGF0aF9saXN0OyBwICE9IE5VTEw7IHAgPSBwbikgeworKwkJcG4gPSBfZGxfc3RyY2hyKHAgKyAxLCAnOicpOworKwkJaWYgKHBuICE9IE5VTEwpIHsKKysJCQlwbGVuID0gcG4gLSBwOworKwkJCXBuKys7CisrCQl9IGVsc2UKKysJCQlwbGVuID0gX2RsX3N0cmxlbihwKTsKKysKKysJCWlmIChwbGVuID49IDcgJiYgX2RsX21lbWNtcChwLCAiJE9SSUdJTiIsIDcpID09IDApIHsKKysJCQlpbnQgb2xlbjsKKysJCQlpZiAocmZsYWdzICYmIHBsZW4gIT0gNykKKysJCQkJY29udGludWU7CisrCQkJaWYgKG9yaWdpbiA9PSBOVUxMKQorKwkJCQljb250aW51ZTsKKysJCQlmb3IgKG9sZW4gPSBfZGxfc3RybGVuKG9yaWdpbikgLSAxOyBvbGVuID49IDAgJiYgb3JpZ2luW29sZW5dICE9ICcvJzsgb2xlbi0tKQorKwkJCQk7CisrCQkJaWYgKG9sZW4gPD0gMCkKKysJCQkJY29udGludWU7CisrCQkJX2RsX21lbWNweSgmbXlsaWJuYW1lWzBdLCBvcmlnaW4sIG9sZW4pOworKwkJCV9kbF9tZW1jcHkoJm15bGlibmFtZVtvbGVuXSwgcCArIDcsIHBsZW4gLSA3KTsKKysJCQlteWxpYm5hbWVbb2xlbiArIHBsZW4gLSA3XSA9IDA7CisrCQl9IGVsc2UgaWYgKHBsZW4gIT0gMCkgeworKwkJCV9kbF9tZW1jcHkobXlsaWJuYW1lLCBwLCBwbGVuKTsKKysJCQlteWxpYm5hbWVbcGxlbl0gPSAwOworKwkJfSBlbHNlIHsKKysJCQlfZGxfc3RyY3B5KG15bGlibmFtZSwgIi4iKTsKKyAJCX0KKy0JCWlmICgqcGF0aCA9PSAnOicpIHsKKy0JCQkqcGF0aCA9IDA7CistCQkJaWYgKCpwYXRoX24pCistCQkJCV9kbF9zdHJjcHkobXlsaWJuYW1lLCBwYXRoX24pOworLQkJCWVsc2UKKy0JCQkJX2RsX3N0cmNweShteWxpYm5hbWUsICIuIik7IC8qIEFzc3VtZSBjdXJyZW50IGRpciBpZiBlbXB0eSBwYXRoICovCistCQkJX2RsX3N0cmNhdChteWxpYm5hbWUsICIvIik7CistCQkJX2RsX3N0cmNhdChteWxpYm5hbWUsIG5hbWUpOworKwkJX2RsX3N0cmNhdChteWxpYm5hbWUsICIvIik7CisrCQlfZGxfc3RyY2F0KG15bGlibmFtZSwgbmFtZSk7CisgI2lmZGVmIF9fTERTT19TQUZFX1JVTlBBVEhfXworLQkJCWlmICgqbXlsaWJuYW1lID09ICcvJykKKysJCWlmICgqbXlsaWJuYW1lID09ICcvJykKKyAjZW5kaWYKKy0JCQkJaWYgKCh0cG50ID0gX2RsX2xvYWRfZWxmX3NoYXJlZF9saWJyYXJ5KHJmbGFncywgcnBudCwgbXlsaWJuYW1lKSkgIT0gTlVMTCkKKy0JCQkJCXJldHVybiB0cG50OworLQkJCXBhdGhfbiA9IHBhdGgrMTsKKy0JCX0KKy0JCXBhdGgrKzsKKy0JfSB3aGlsZSAoIWRvbmUpOworKwkJaWYgKCh0cG50ID0gX2RsX2xvYWRfZWxmX3NoYXJlZF9saWJyYXJ5KHJmbGFncywgcnBudCwgbXlsaWJuYW1lKSkgIT0gTlVMTCkKKysJCQlyZXR1cm4gdHBudDsKKysJfQorIAlyZXR1cm4gTlVMTDsKKyB9CisgCitAQCAtMjM0LDcgKzIzOCw4IEBAIHN0cnVjdCBlbGZfcmVzb2x2ZSAqX2RsX2xvYWRfc2hhcmVkX2xpYnJhcnkodW5zaWduZWQgcmZsYWdzLCBzdHJ1Y3QgZHluX2VsZiAqKnJwCisgCWlmIChwbnQpIHsKKyAJCXBudCArPSAodW5zaWduZWQgbG9uZykgdHBudC0+ZHluYW1pY19pbmZvW0RUX1NUUlRBQl07CisgCQlfZGxfaWZfZGVidWdfZHByaW50KCJcdHNlYXJjaGluZyBSUEFUSD0nJXMnXG4iLCBwbnQpOworLQkJaWYgKCh0cG50MSA9IHNlYXJjaF9mb3JfbmFtZWRfbGlicmFyeShsaWJuYW1lLCByZmxhZ3MsIHBudCwgcnBudCkpICE9IE5VTEwpCisrCQlpZiAoKHRwbnQxID0gc2VhcmNoX2Zvcl9uYW1lZF9saWJyYXJ5KGxpYm5hbWUsIHJmbGFncywgcG50LCBycG50LAorKwkJCQkJCSAgICAgIHRwbnQtPmxpYm5hbWUpKSAhPSBOVUxMKQorIAkJCXJldHVybiB0cG50MTsKKyAJfQorICNlbmRpZgorQEAgLTI0Myw3ICsyNDgsNyBAQCBzdHJ1Y3QgZWxmX3Jlc29sdmUgKl9kbF9sb2FkX3NoYXJlZF9saWJyYXJ5KHVuc2lnbmVkIHJmbGFncywgc3RydWN0IGR5bl9lbGYgKipycAorIAkvKiBDaGVjayBpbiBMRF97RUxGX31MSUJSQVJZX1BBVEgsIGlmIHNwZWNpZmllZCBhbmQgYWxsb3dlZCAqLworIAlpZiAoX2RsX2xpYnJhcnlfcGF0aCkgeworIAkJX2RsX2lmX2RlYnVnX2RwcmludCgiXHRzZWFyY2hpbmcgTERfTElCUkFSWV9QQVRIPSclcydcbiIsIF9kbF9saWJyYXJ5X3BhdGgpOworLQkJaWYgKCh0cG50MSA9IHNlYXJjaF9mb3JfbmFtZWRfbGlicmFyeShsaWJuYW1lLCByZmxhZ3MsIF9kbF9saWJyYXJ5X3BhdGgsIHJwbnQpKSAhPSBOVUxMKQorKwkJaWYgKCh0cG50MSA9IHNlYXJjaF9mb3JfbmFtZWRfbGlicmFyeShsaWJuYW1lLCByZmxhZ3MsIF9kbF9saWJyYXJ5X3BhdGgsIHJwbnQsIE5VTEwpKSAhPSBOVUxMKQorIAkJeworIAkJCXJldHVybiB0cG50MTsKKyAJCX0KK0BAIC0yNTcsNyArMjYyLDcgQEAgc3RydWN0IGVsZl9yZXNvbHZlICpfZGxfbG9hZF9zaGFyZWRfbGlicmFyeSh1bnNpZ25lZCByZmxhZ3MsIHN0cnVjdCBkeW5fZWxmICoqcnAKKyAJaWYgKHBudCkgeworIAkJcG50ICs9ICh1bnNpZ25lZCBsb25nKSB0cG50LT5keW5hbWljX2luZm9bRFRfU1RSVEFCXTsKKyAJCV9kbF9pZl9kZWJ1Z19kcHJpbnQoIlx0c2VhcmNoaW5nIFJVTlBBVEg9JyVzJ1xuIiwgcG50KTsKKy0JCWlmICgodHBudDEgPSBzZWFyY2hfZm9yX25hbWVkX2xpYnJhcnkobGlibmFtZSwgcmZsYWdzLCBwbnQsIHJwbnQpKSAhPSBOVUxMKQorKwkJaWYgKCh0cG50MSA9IHNlYXJjaF9mb3JfbmFtZWRfbGlicmFyeShsaWJuYW1lLCByZmxhZ3MsIHBudCwgcnBudCwgTlVMTCkpICE9IE5VTEwpCisgCQkJcmV0dXJuIHRwbnQxOworIAl9CisgI2VuZGlmCitAQCAtMjkxLDcgKzI5Niw3IEBAIHN0cnVjdCBlbGZfcmVzb2x2ZSAqX2RsX2xvYWRfc2hhcmVkX2xpYnJhcnkodW5zaWduZWQgcmZsYWdzLCBzdHJ1Y3QgZHluX2VsZiAqKnJwCisgCS8qIExvb2sgZm9yIGxpYnJhcmllcyB3aGVyZXZlciB0aGUgc2hhcmVkIGxpYnJhcnkgbG9hZGVyCisgCSAqIHdhcyBpbnN0YWxsZWQgKi8KKyAJX2RsX2lmX2RlYnVnX2RwcmludCgiXHRzZWFyY2hpbmcgbGRzbyBkaXI9JyVzJ1xuIiwgX2RsX2xkc29wYXRoKTsKKy0JdHBudDEgPSBzZWFyY2hfZm9yX25hbWVkX2xpYnJhcnkobGlibmFtZSwgcmZsYWdzLCBfZGxfbGRzb3BhdGgsIHJwbnQpOworKwl0cG50MSA9IHNlYXJjaF9mb3JfbmFtZWRfbGlicmFyeShsaWJuYW1lLCByZmxhZ3MsIF9kbF9sZHNvcGF0aCwgcnBudCwgTlVMTCk7CisgCWlmICh0cG50MSAhPSBOVUxMKQorIAkJcmV0dXJuIHRwbnQxOworICNlbmRpZgorQEAgLTMwNCw3ICszMDksNyBAQCBzdHJ1Y3QgZWxmX3Jlc29sdmUgKl9kbF9sb2FkX3NoYXJlZF9saWJyYXJ5KHVuc2lnbmVkIHJmbGFncywgc3RydWN0IGR5bl9lbGYgKipycAorICNpZm5kZWYgX19MRFNPX0NBQ0hFX1NVUFBPUlRfXworIAkJCQkJIjoiIFVDTElCQ19SVU5USU1FX1BSRUZJWCAidXNyL1gxMVI2L2xpYiIKKyAjZW5kaWYKKy0JCQkJCSwgcnBudCk7CisrCQkJCQksIHJwbnQsIE5VTEwpOworIAlpZiAodHBudDEgIT0gTlVMTCkKKyAJCXJldHVybiB0cG50MTsKKyAKK2RpZmYgLS1naXQgYS9sZHNvL2xkc28vbGRzby5jIGIvbGRzby9sZHNvL2xkc28uYworaW5kZXggZjM4ZjllMy4uMzgxMjkwOCAxMDA2NDQKKy0tLSBhL2xkc28vbGRzby9sZHNvLmMKKysrKyBiL2xkc28vbGRzby9sZHNvLmMKK0BAIC00MDIsNiArNDAyLDIwIEBAIHN0YXRpYyBwdHJkaWZmX3QgX2RsX2J1aWxkX2xvY2FsX3Njb3BlIChzdHJ1Y3QgZWxmX3Jlc29sdmUgKipsaXN0LAorIAkJCQlwICs9IF9kbF9idWlsZF9sb2NhbF9zY29wZSAocCwgcS0+dHBudCk7CisgCXJldHVybiBwIC0gbGlzdDsKKyB9CisrIAorK3N0YXRpYyB2b2lkIF9kbF9zZXR1cF9wcm9nbmFtZShjb25zdCBjaGFyICphcmd2MCkKKyt7CisrCWNoYXIgaW1hZ2VbUEFUSF9NQVhdOworKwlzc2l6ZV90IHM7CisrCisrCXMgPSBfZGxfcmVhZGxpbmsoIi9wcm9jL3NlbGYvZXhlIiwgaW1hZ2UsIHNpemVvZihpbWFnZSkpOworKwlpZiAocyA+IDAgJiYgaW1hZ2VbMF0gPT0gJy8nKSB7CisrCQlpbWFnZVtzXSA9IDA7CisrCQlfZGxfcHJvZ25hbWUgPSBfZGxfc3RyZHVwKGltYWdlKTsKKysJfSBlbHNlIGlmIChhcmd2MCkgeworKwkJX2RsX3Byb2duYW1lID0gYXJndjA7CisrCX0KKyt9CisgCisgdm9pZCAqX2RsX2dldF9yZWFkeV90b19ydW4oc3RydWN0IGVsZl9yZXNvbHZlICp0cG50LCBETF9MT0FEQUREUl9UWVBFIGxvYWRfYWRkciwKKyAJCQkgIEVsZlcoYXV4dl90KSBhdXh2dFtBVF9FR0lEICsgMV0sIGNoYXIgKiplbnZwLCBjaGFyICoqYXJndgorQEAgLTQ1NCw5ICs0NjgsNyBAQCB2b2lkICpfZGxfZ2V0X3JlYWR5X3RvX3J1bihzdHJ1Y3QgZWxmX3Jlc29sdmUgKnRwbnQsIERMX0xPQURBRERSX1RZUEUgbG9hZF9hZGRyLAorIAkgKiBiZWVuIGZpeGVkIHVwIGJ5IG5vdy4gIFN0aWxsIG5vIGZ1bmN0aW9uIGNhbGxzIG91dHNpZGUgb2YgdGhpcworIAkgKiBsaWJyYXJ5LCBzaW5jZSB0aGUgZHluYW1pYyByZXNvbHZlciBpcyBub3QgeWV0IHJlYWR5LgorIAkgKi8KKy0JaWYgKGFyZ3ZbMF0pIHsKKy0JCV9kbF9wcm9nbmFtZSA9IGFyZ3ZbMF07CistCX0KKysJX2RsX3NldHVwX3Byb2duYW1lKGFyZ3ZbMF0pOworIAorICNpZmRlZiBfX0RTQlRfXworIAlfZGxfbGRzb19kc2J0ID0gKHZvaWQgKil0cG50LT5keW5hbWljX2luZm9bRFRfRFNCVF9CQVNFX0lEWF07CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwNy1ucHRsLWF0Zm9yay1IaWRlLXB0aHJlYWRfYXRmb3JrLWluLXNoYXJlZC12ZXJzaW9ucy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwNy1ucHRsLWF0Zm9yay1IaWRlLXB0aHJlYWRfYXRmb3JrLWluLXNoYXJlZC12ZXJzaW9ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTkzMmMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA3LW5wdGwtYXRmb3JrLUhpZGUtcHRocmVhZF9hdGZvcmstaW4tc2hhcmVkLXZlcnNpb25zLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gOTA1MTZhZjlmNzc2ZjljMjgzNWI0N2ZjNTI3NzVkY2IzMDdhODVhYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDIzIEp1biAyMDEyIDE1OjU5OjAxIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggNy83XSBucHRsL2F0Zm9yazogSGlkZSBwdGhyZWFkX2F0Zm9yayBpbiBzaGFyZWQgdmVyc2lvbnMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlicHRocmVhZC9ucHRsL01ha2VmaWxlLmluIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWJwdGhyZWFkL25wdGwvTWFrZWZpbGUuaW4gYi9saWJwdGhyZWFkL25wdGwvTWFrZWZpbGUuaW4KK2luZGV4IDU1ZWViYTIuLjhjYjhmYTkgMTAwNjQ0CistLS0gYS9saWJwdGhyZWFkL25wdGwvTWFrZWZpbGUuaW4KKysrKyBiL2xpYnB0aHJlYWQvbnB0bC9NYWtlZmlsZS5pbgorQEAgLTE2LDYgKzE2LDcgQEAgbGliYy1zaGFyZWQtcm91dGluZXMteSA9IGZvcndhcmQuYyBsaWJjLWNhbmNlbGxhdGlvbi5jCisgbGliYy1zdGF0aWMtcm91dGluZXMteSA9IGFsbG9jYV9jdXRvZmYuYyBsaWJjLWNhbmNlbGxhdGlvbi5jCisgbGlicHRocmVhZC1zaGFyZWQtb25seS1yb3V0aW5lcy15ID0gdmVyc2lvbi5jCisgbGlicHRocmVhZC1zdGF0aWMtb25seS1yb3V0aW5lcy15ID0gcHRocmVhZF9hdGZvcmsuYworKworIGxpYnB0aHJlYWQtcm91dGluZXMtICs9ICQobm90ZGlyICQod2lsZGNhcmQgJChsaWJwdGhyZWFkX0RJUikvZ2VuXyouYykpICMgZHVtbXkgZ2VuZXJhdGVkIGZpbGVzCisgbGlicHRocmVhZC1yb3V0aW5lcy0gKz0gYWxsb2NhdGVzdGFjay5jICMgZHVtbXkgaW5jbHVkZWQgYnkgcHRocmVhZF9jcmVhdGUuYworIGxpYnB0aHJlYWQtcm91dGluZXMtICs9IHB0aHJlYWRfbXV0ZXhfZ2V0cHJpb2NlaWxpbmcuYyBwdGhyZWFkX211dGV4X3NldHByaW9jZWlsaW5nLmMgIyBYWFg6IGRlbGV0ZSB0aG9zZSBvciB1c2UgdGhlbSEKK0BAIC0yMDEsNyArMjAyLDcgQEAgQ0ZMQUdTLW1zZ3NuZC5jID0gLWZleGNlcHRpb25zIC1mYXN5bmNocm9ub3VzLXVud2luZC10YWJsZXMKKyBDRkxBR1MtdGNkcmFpbi5jID0gLWZleGNlcHRpb25zIC1mYXN5bmNocm9ub3VzLXVud2luZC10YWJsZXMKKyAKKyBDRkxBR1MtcHQtc3lzdGVtLmMgPSAtZmV4Y2VwdGlvbnMgLUkkKHRvcF9zcmNkaXIpbGliYy9zdGRsaWIKKy0KKytDRkxBR1MtcHRocmVhZF9hdGZvcmsuYyA9IC1ETk9UX0lOX2xpYmMKKyAjCisgIyBUaGUgcmVzdCBvZiB0aGlzIGZpbGUgaXMgdUNsaWJjIHNwZWNpZmljLgorICMKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC9sb2NhbGUuY2ZnIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC9sb2NhbGUuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNjY0MzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L2xvY2FsZS5jZmcKQEAgLTAsMCArMSwzIEBACitVQ0xJQkNfSEFTX0xPQ0FMRT15CitVQ0xJQkNfSEFTX1hMT0NBTEU9eQorVUNMSUJDX0JVSUxEX01JTklNQUxfTE9DQUxFPXkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvb2JzdGFjay5jZmcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L29ic3RhY2suY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YmY5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L29ic3RhY2suY2ZnCkBAIC0wLDAgKzEgQEAKK1VDTElCQ19IQVNfT0JTVEFDSz15CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L3VDbGliYy5kaXN0cm8gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L3VDbGliYy5kaXN0cm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU3NTQ4MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvdUNsaWJjLmRpc3RybwpAQCAtMCwwICsxLDE5MyBAQAorIworIyBHZW5lcmFsIExpYnJhcnkgU2V0dGluZ3MKKyMKKyMgSEFWRV9OT19QSUMgaXMgbm90IHNldAorIyBET1BJQyBpcyBub3Qgc2V0CisjIEhBVkVfTk9fU0hBUkVEIGlzIG5vdCBzZXQKKyMgQVJDSF9IQVNfTk9fTERTTyBpcyBub3Qgc2V0CitIQVZFX1NIQVJFRD15CisjIEZPUkNFX1NIQVJFQUJMRV9URVhUX1NFR01FTlRTIGlzIG5vdCBzZXQKK0xEU09fTEREX1NVUFBPUlQ9eQorTERTT19DQUNIRV9TVVBQT1JUPXkKKyMgTERTT19QUkVMT0FEX0ZJTEVfU1VQUE9SVCBpcyBub3Qgc2V0CitMRFNPX0JBU0VfRklMRU5BTUU9ImxkLnNvIgorIyBVQ0xJQkNfU1RBVElDX0xEQ09ORklHIGlzIG5vdCBzZXQKK0xEU09fUlVOUEFUSD15CitVQ0xJQkNfQ1RPUl9EVE9SPXkKK0xEU09fR05VX0hBU0hfU1VQUE9SVD15CisjIEhBU19OT19USFJFQURTIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfVEhSRUFEUz15CitVQ0xJQkNfSEFTX1RIUkVBRFNfTkFUSVZFPXkKK1BUSFJFQURTX0RFQlVHX1NVUFBPUlQ9eQorIyBMSU5VWFRIUkVBRFNfT0xEIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfTEZTPXkKKyMgTUFMTE9DIGlzIG5vdCBzZXQKKyMgTUFMTE9DX1NJTVBMRSBpcyBub3Qgc2V0CitNQUxMT0NfU1RBTkRBUkQ9eQorTUFMTE9DX0dMSUJDX0NPTVBBVD15CitVQ0xJQkNfRFlOQU1JQ19BVEVYSVQ9eQorQ09NUEFUX0FURVhJVD15CitVQ0xJQkNfU1VTVjNfTEVHQUNZPXkKK1VDTElCQ19TVVNWM19MRUdBQ1lfTUFDUk9TPXkKK1VDTElCQ19TVVNWNF9MRUdBQ1k9eQorVUNMSUJDX0hBU19TSEFET1c9eQorVUNMSUJDX0hBU19QUk9HUkFNX0lOVk9DQVRJT05fTkFNRT15CitVQ0xJQkNfSEFTX19fUFJPR05BTUU9eQorVU5JWDk4UFRZX09OTFk9eQorQVNTVU1FX0RFVlBUUz15CitVQ0xJQkNfSEFTX0xJQlVUSUw9eQorVUNMSUJDX0hBU19UTV9FWFRFTlNJT05TPXkKK1VDTElCQ19IQVNfVFpfQ0FDSElORz15CitVQ0xJQkNfSEFTX1RaX0ZJTEU9eQorVUNMSUJDX0hBU19UWl9GSUxFX1JFQURfTUFOWT15CitVQ0xJQkNfVFpfRklMRV9QQVRIPSIvZXRjL1RaIgorCisjCisjIEFkdmFuY2VkIExpYnJhcnkgU2V0dGluZ3MKKyMKK1VDTElCQ19QV0RfQlVGRkVSX1NJWkU9MjU2CitVQ0xJQkNfR1JQX0JVRkZFUl9TSVpFPTI1NgorCisjCisjIE5ldHdvcmtpbmcgU3VwcG9ydAorIworVUNMSUJDX0hBU19JUFY2PXkKK1VDTElCQ19IQVNfUlBDPXkKK1VDTElCQ19IQVNfRlVMTF9SUEM9eQorVUNMSUJDX0hBU19SRUVOVFJBTlRfUlBDPXkKK1VDTElCQ19VU0VfTkVUTElOSz15CitVQ0xJQkNfU1VQUE9SVF9BSV9BRERSQ09ORklHPXkKKworVUNMSUJDX0hBU19CU0RfUkVTX0NMT1NFPXkKK1VDTElCQ19IQVNfTElCUkVTT0xWX1NUVUI9eQorVUNMSUJDX0hBU19MSUJOU0xfU1RVQj15CisKKyMKKyMgU3RyaW5nIGFuZCBTdGRpbyBTdXBwb3J0CisjCitVQ0xJQkNfSEFTX1NUUklOR19HRU5FUklDX09QVD15CitVQ0xJQkNfSEFTX1NUUklOR19BUkNIX09QVD15CitVQ0xJQkNfSEFTX0NUWVBFX1RBQkxFUz15CitVQ0xJQkNfSEFTX0NUWVBFX1NJR05FRD15CisjIFVDTElCQ19IQVNfQ1RZUEVfVU5TQUZFIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfQ1RZUEVfQ0hFQ0tFRD15CisjIFVDTElCQ19IQVNfQ1RZUEVfRU5GT1JDRUQgaXMgbm90IHNldAorVUNMSUJDX0hBU19XQ0hBUj15CisjIFVDTElCQ19IQVNfTE9DQUxFIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfSEVYQURFQ0lNQUxfRkxPQVRTPXkKK1VDTElCQ19IQVNfR0xJQkNfQ1VTVE9NX1BSSU5URj15CitVQ0xJQkNfUFJJTlRGX1NDQU5GX1BPU0lUSU9OQUxfQVJHUz05CitVQ0xJQkNfSEFTX1NDQU5GX0dMSUJDX0FfRkxBRz15CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laX05PTkUgaXMgbm90IHNldAorVUNMSUJDX0hBU19TVERJT19CVUZTSVpfMjU2PXkKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfNTEyIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfMTAyNCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzIwNDggaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl80MDk2IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfODE5MiBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NURElPX0JVSUxUSU5fQlVGRkVSX05PTkU9eQorIyBVQ0xJQkNfSEFTX1NURElPX0JVSUxUSU5fQlVGRkVSXzQgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVSUxUSU5fQlVGRkVSXzggaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX1NIVVRET1dOX09OX0FCT1JUIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfU1RESU9fR0VUQ19NQUNSTz15CitVQ0xJQkNfSEFTX1NURElPX1BVVENfTUFDUk89eQorVUNMSUJDX0hBU19TVERJT19BVVRPX1JXX1RSQU5TSVRJT049eQorIyBVQ0xJQkNfSEFTX0ZPUEVOX0xBUkdFRklMRV9NT0RFIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfRk9QRU5fRVhDTFVTSVZFX01PREU9eQorVUNMSUJDX0hBU19HTElCQ19DVVNUT01fU1RSRUFNUz15CitVQ0xJQkNfSEFTX1BSSU5URl9NX1NQRUM9eQorVUNMSUJDX0hBU19FUlJOT19NRVNTQUdFUz15CisjIFVDTElCQ19IQVNfU1lTX0VSUkxJU1QgaXMgbm90IHNldAorVUNMSUJDX0hBU19TSUdOVU1fTUVTU0FHRVM9eQorIyBVQ0xJQkNfSEFTX1NZU19TSUdMSVNUIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfR05VX0dFVE9QVD15CitVQ0xJQkNfSEFTX0dOVV9HRVRTVUJPUFQ9eQorCisjCisjIEJpZyBhbmQgVGFsbAorIworVUNMSUJDX0hBU19SRUdFWD15CisjIFVDTElCQ19IQVNfUkVHRVhfT0xEIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfRk5NQVRDSD15CisjIFVDTElCQ19IQVNfRk5NQVRDSF9PTEQgaXMgbm90IHNldAorVUNMSUJDX0hBU19XT1JERVhQPXkKK1VDTElCQ19IQVNfTkZUVz15CitVQ0xJQkNfSEFTX0ZUVz15CitVQ0xJQkNfSEFTX0ZUUz15CitVQ0xJQkNfSEFTX0dMT0I9eQorVUNMSUJDX0hBU19HTlVfR0xPQj15CisKKyMKKyMgTGlicmFyeSBJbnN0YWxsYXRpb24gT3B0aW9ucworIworU0hBUkVEX0xJQl9MT0FERVJfUFJFRklYPSIvbGliIgorUlVOVElNRV9QUkVGSVg9Ii8iCitERVZFTF9QUkVGSVg9Ii8vdXNyIgorTVVMVElMSUJfRElSPSJsaWIiCisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBVQ0xJQkNfQlVJTERfUElFIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19BUkM0UkFORE9NIGlzIG5vdCBzZXQKKyMgSEFWRV9OT19TU1AgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NTUCBpcyBub3Qgc2V0CitVQ0xJQkNfQlVJTERfUkVMUk89eQorVUNMSUJDX0JVSUxEX05PVz15CitVQ0xJQkNfQlVJTERfTk9FWEVDU1RBQ0s9eQorCisjCisjIHVDbGliYyBkZXZlbG9wbWVudC9kZWJ1Z2dpbmcgb3B0aW9ucworIworQ1JPU1NfQ09NUElMRVJfUFJFRklYPSIiCitVQ0xJQkNfRVhUUkFfQ0ZMQUdTPSIiCisjIERPREVCVUcgaXMgbm90IHNldAorIyBET0RFQlVHX1BUIGlzIG5vdCBzZXQKKyMgRE9TVFJJUCBpcyBub3Qgc2V0CisjIERPQVNTRVJUUyBpcyBub3Qgc2V0CisjIFNVUFBPUlRfTERfREVCVUcgaXMgbm90IHNldAorIyBTVVBQT1JUX0xEX0RFQlVHX0VBUkxZIGlzIG5vdCBzZXQKKyMgVUNMSUJDX01BTExPQ19ERUJVR0dJTkcgaXMgbm90IHNldAorVUNMSUJDX0hBU19CQUNLVFJBQ0U9eQorV0FSTklOR1M9Ii1XYWxsIgorIyBFWFRSQV9XQVJOSU5HUyBpcyBub3Qgc2V0CisjIERPTVVMVEkgaXMgbm90IHNldAorIyBVQ0xJQkNfTUpOM19PTkxZIGlzIG5vdCBzZXQKKworIyBtYXRoIHN0dWZmIGZvciBwZXJsCitET19DOTlfTUFUSD15CitVQ0xJQkNfSEFTX0xPTkdfRE9VQkxFX01BVEg9eQorVUNMSUJDX0hBU19GRU5WPXkKK1VDTElCQ19MSU5VWF9NT0RVTEVfMjY9eQorIyBVQ0xJQkNfTElOVVhfTU9EVUxFXzI0IGlzIG5vdCBzZXQKK1VDTElCQ19MSU5VWF9TUEVDSUZJQz15CitVQ0xJQkNfSEFTX1JFQUxUSU1FPXkKK1VDTElCQ19IQVNfQURWQU5DRURfUkVBTFRJTUU9eQorVUNMSUJDX0hBU19ORVRXT1JLX1NVUFBPUlQ9eQorVUNMSUJDX0hBU19TT0NLRVQ9eQorVUNMSUJDX0hBU19CU0RfRVJSPXkKK1VDTElCQ19IQVNfU1lTTE9HPXkKK1VDTElCQ19IQVNfQ1JZUFQ9eQorVUNMSUJDX0hBU19DUllQVF9JTVBMPXkKK1VDTElCQ19IQVNfR05VX0VSUk9SPXkKK1VDTElCQ19IQVNfUFRZPXkKK1VDTElCQ19CU0RfU1BFQ0lGSUM9eQorVUNMSUJDX0hBU19FUE9MTD15CitVQ0xJQkNfSEFTX0ZMT0FUUz15CisKKyMgVGhlIGJlbG93IG9wdGlvbiBpcyBuZWVkZWQgZm9yIEFSTSBzaW5jZSBkZXBlbmRpbmcKKyMgdXBvbmcgd2hhdCBpbnRydWN0aW9uIHNldCBpcyBjaG9zZW4gdGhpcyB3aWxsIGJlCisjIGVuYWJsZWQuIEFzIHN1Y2ggaXQgaXMgaGFybWxlc3MgYW5kIHdpbGwgYmUgcHVudGVkCisjIGJ5IG1lbnVjb25maWcgZm9yIG90aGVyIGFyY2hlcy4KKworIyBDT01QSUxFX0lOX1RIVU1CX01PREUgaXMgbm90IHNldAorCisjIG5lZWRlZCBieSBzeXN0ZW1kCitVQ0xJQkNfSEFTX1VUTVBYPXkKK1VDTElCQ19MSU5VWF9NT0RVTEVfMjY9eQorVUNMSUJDX0hBU19SRVNPTFZFUl9TVVBQT1JUPXkKKyMgbmVlZGVkIGZvciBMVFAKK1VDTElCQ19TVVNWNF9MRUdBQ1k9eQorVUNMSUJDX0hBU19PQlNPTEVURV9CU0RfU0lHTkFMPXkKK0RPX1hTSV9NQVRIPXkKK1VDTElCQ19TVjRfREVQUkVDQVRFRD15CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L3VDbGliYy5tYWNoaW5lIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC91Q2xpYmMubWFjaGluZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTVmNDQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC91Q2xpYmMubWFjaGluZQpAQCAtMCwwICsxLDE0IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIFZlcnNpb246IDAuOS4zMi1naXQKKyMgTW9uIEp1bCAxOSAwMTozNDoyOSAyMDEwCisjCisjCisjIFVzaW5nIEVMRiBmaWxlIGZvcm1hdAorIworRk9SQ0VfT1BUSU9OU19GT1JfQVJDSD15CitBUkNIX0hBU19NTVU9eQorQVJDSF9VU0VfTU1VPXkKK0tFUk5FTF9IRUFERVJTPSIvdXNyL2luY2x1ZGUiCitIQVZFX0RPVF9DT05GSUc9eQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtaW5pdGlhbF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtaW5pdGlhbF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkzN2NjYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1pbml0aWFsX2dpdC5iYgpAQCAtMCwwICsxLDM2IEBACitTRUNUSU9OID0gImJhc2UiCityZXF1aXJlIHVjbGliYy5pbmMKK3JlcXVpcmUgdWNsaWJjLWdpdC5pbmMKKworREVQRU5EUyA9ICJsaW51eC1saWJjLWhlYWRlcnMgbmN1cnNlcy1uYXRpdmUgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjLWluaXRpYWwgbGliZ2NjLWluaXRpYWwga2Vybi10b29scy1uYXRpdmUiCitQUk9WSURFUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1saWJjLWluaXRpYWwiCisKK1BBQ0tBR0VTID0gIiIKK1BBQ0tBR0VTX0RZTkFNSUMgPSAiIgorCitTVEFHSU5HQ0MgPSAiZ2NjLWNyb3NzLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCitTVEFHSU5HQ0NfY2xhc3MtbmF0aXZlc2RrID0gImdjYy1jcm9zc3Nkay1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorCitkb19pbnN0YWxsKCkgeworCSMgSW5zdGFsbCBpbml0aWFsIGhlYWRlcnMgaW50byB0aGUgY3Jvc3MgZGlyCisJbWFrZSBQUkVGSVg9JHtEfSBERVZFTF9QUkVGSVg9JHtwcmVmaXh9LyBSVU5USU1FX1BSRUZJWD0vIFwKKwkJaW5zdGFsbF9oZWFkZXJzIGluc3RhbGxfc3RhcnRmaWxlcworCisgICAgICAgICMgYWRkIGxpbmtzIHRvIGxpbnV4LWxpYmMtaGVhZGVyczogZmluYWwgdWNsaWJjIGJ1aWxkIG5lZWQgdGhpcy4KKyAgICAgICAgZm9yIHQgaW4gbGludXggYXNtIGFzbS1nZW5lcmljOyBkbworICAgICAgICAgICAgICAgIGlmIFsgLWQgJHtEfSR7aW5jbHVkZWRpcn0vJHQgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBybSAtcmYgJHtEfSR7aW5jbHVkZWRpcn0vJHQKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGxuIC1zZiAke1NUQUdJTkdfRElSX1RBUkdFVH0ke2luY2x1ZGVkaXJ9LyR0ICR7RH0ke2luY2x1ZGVkaXJ9LworICAgICAgICBkb25lCisKK30KK2RvX2NvbXBpbGUoKSB7CisJOgorfQorCitkb19zaXRlY29uZmlnICgpIHsKKyAgICAgICAgOgorfQorCitkb19wb3B1bGF0ZV9zeXNyb290W3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke1NUQUdJTkdfRElSX1RDQk9PVFNUUkFQfS8iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtcGFja2FnZS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtcGFja2FnZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4MTVmOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1wYWNrYWdlLmluYwpAQCAtMCwwICsxLDM3IEBACisjIEVuc3VyZSB0aGUgdWNsaWJjLWRldiBwYWNrYWdlIGlzIHByb2Nlc3NlZCBiZWZvcmUgdWNsaWJjLXN0YXRpY2RldiB0byBhbGxvdworIyAqX25vbnNoYXJlZC5hIGxpYnJhcmllcyB0byBiZSBwYWNrYWdlZCBpbiB0aGUgdWNsaWJjLWRldiBwYWNrYWdlLgorUEFDS0FHRVMgPSAibGRkIHVjbGliYy11dGlscy1kYmcgdWNsaWJjLXV0aWxzIHVjbGliYy1nY29udiB1Y2xpYmMtdGhyZWFkLWRiIHVjbGliYy1hcmdwIHVjbGliYy1iYWNrdHJhY2UgdWNsaWJjLWxpYmNyeXB0IHVjbGliYy1saWJpbnRsIHVjbGliYy1saWJuc2wgdWNsaWJjLWxpYnJlc29sdiB1Y2xpYmMtbGlibSB1Y2xpYmMtbGliZGwgdWNsaWJjLWxpYnV0aWwgdWNsaWJjLWxpYnB0aHJlYWQgdWNsaWJjLWxpYnJ0ICR7UE59LWRiZyAke1BOfS1kZXYgJHtQTn0tc3RhdGljZGV2ICR7UE59LWRvYyAke1BOfSIKKworRklMRVNfdWNsaWJjLWxpYmNyeXB0ID0gIiR7YmFzZV9saWJkaXJ9L2xpYmNyeXB0Ki5zby4qICR7YmFzZV9saWJkaXJ9L2xpYmNyeXB0LSouc28iCitGSUxFU191Y2xpYmMtbGliaW50bCA9ICIke2Jhc2VfbGliZGlyfS9saWJpbnRsKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYmludGwtKi5zbyIKK0ZJTEVTX3VjbGliYy1saWJuc2wgPSAiJHtiYXNlX2xpYmRpcn0vbGlibnNsKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYm5zbC0qLnNvIgorRklMRVNfdWNsaWJjLWxpYnJlc29sdiA9ICIke2Jhc2VfbGliZGlyfS9saWJyZXNvbHYqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlicmVzb2x2LSouc28iCitGSUxFU191Y2xpYmMtbGlibSA9ICIke2Jhc2VfbGliZGlyfS9saWJtKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYm0tKi5zbyIKK0ZJTEVTX3VjbGliYy1saWJkbCA9ICIke2Jhc2VfbGliZGlyfS9saWJkbCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJkbC0qLnNvIgorRklMRVNfdWNsaWJjLWxpYnV0aWwgPSAiJHtiYXNlX2xpYmRpcn0vbGlidXRpbCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJ1dGlsLSouc28iCitGSUxFU191Y2xpYmMtbGlicHRocmVhZCA9ICIke2Jhc2VfbGliZGlyfS9saWJwdGhyZWFkKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYnB0aHJlYWQtKi5zbyIKK0ZJTEVTX3VjbGliYy1saWJydCA9ICIke2Jhc2VfbGliZGlyfS9saWJydCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJydC0qLnNvIgorCitGSUxFU19sZGQgPSAiJHtiaW5kaXJ9L2xkZCIKK0ZJTEVTX3VjbGliYy11dGlscyA9ICIke2JpbmRpcn0gJHtzYmluZGlyfSIKK0ZJTEVTX3VjbGliYy11dGlscy1kYmcgKz0gIiR7YmluZGlyfS8uZGVidWcgJHtzYmluZGlyfS8uZGVidWciCitGSUxFU191Y2xpYmMtZ2NvbnYgPSAiJHtsaWJkaXJ9L2djb252IgorRklMRVNfdWNsaWJjLXRocmVhZC1kYiA9ICIke2Jhc2VfbGliZGlyfS9saWJ0aHJlYWRfZGIqIgorRklMRVNfdWNsaWJjLWFyZ3AgPSAiJHtiYXNlX2xpYmRpcn0vbGlidWFyZ3AtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJ1YXJncCouc28uKiIKK0ZJTEVTX3VjbGliYy1iYWNrdHJhY2UgPSAiJHtiYXNlX2xpYmRpcn0vbGlidWJhY2t0cmFjZS0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYnViYWNrdHJhY2UqLnNvLioiCisKKyMgVGhlIGxhc3QgbGluZSAoZ2RiIGFuZCBsaWIxKSBpcyBmb3IgdWNsaW51eC11Y2xpYmMgYnVpbGRzCit1Y2xpYmNfYmFzZWxpYnMgPSAiJHtiYXNlX2xpYmRpcn0vbGQqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGQqLnNvIFwKKyAgICAgICAgICAgICAgICAgICAke2Jhc2VfbGliZGlyfS9saWJjKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYnVDbGliYy0qLnNvIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGliYy5nZGIgJHtsaWJkaXJ9L2xpYmMgJHtiYXNlX2xpYmRpcn0vbGliMS5zbyBcCisgICAgICAgICAgICAgICAgICAiCitGSUxFU19TT0xJQlNERVYgPSAiJHtsaWJkaXJ9L2xpYioke1NPTElCU0RFVn0iCitGSUxFU18ke1BOfS1kZXYgKz0gIlwKKyAgICAgICAgJHtsaWJkaXJ9L2xpYiouc28gXAorICAgICAgICAke2xpYmRpcn0vKl9ub25zaGFyZWQuYSBcCisgICAgICAgICR7bGliZGlyfS9bU10qY3J0WzFpbl0ubyBcCisgICAgICAgICR7bGliZGlyfS9jcnRyZWxvYyoubyBcCisgICAgICAgICR7aW5jbHVkZWRpcn0vKi5oICR7aW5jbHVkZWRpcn0vKi8qLmggXAorICAgICAgICIKK0ZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0gJHt1Y2xpYmNfYmFzZWxpYnN9IC9zYmluL2xkY29uZmlnIFwKKyAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0gJHtkYXRhZGlyfS96b25laW5mbyAke2xpYmRpcn0vbG9jYWxlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMzYWEzZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy5pbmMKQEAgLTAsMCArMSwxNjggQEAKK1NVTU1BUlkgPSAiQyBsaWJyYXJ5IGZvciBlbWJlZGRlZCBzeXN0ZW1zIgorREVTQ1JJUFRJT04gPSAiVGhlIG5hbWUgdUNsaWJjIGlzIGFuIGFiYnJldmlhdGlvbiBmb3IgJ3RoZSBcCittaWNyb2NvbnRyb2xsZXIgQyBsaWJyYXJ5Jy4gRm9yIHNpbXBsaWNpdHksIHVDbGliYyBpcyBwcm9ub3VuY2VkIFwKKyd5ZXctc2VlLWxpYi1zZWUnLiAgVGhlIGdvYWwgb2YgdUNsaWJjIGlzIHRvIHByb3ZpZGUgYXMgbXVjaCBcCitmdW5jdGlvbmFsaXR5IGFzIHBvc3NpYmxlIGluIGEgc21hbGwgYW1vdW50IG9mIHNwYWNlLCBhbmQgaXQgaXMgaW50ZW5kZWQgXAorcHJpbWFyaWx5IGZvciBlbWJlZGRlZCB1c2UuIEl0IGlzIGFsc28gaGlnaGx5IGNvbmZpZ3VyYWJsZSBpbiBzdXBwb3J0ZWQgXAorZmVhdHVyZXMsIGF0IHRoZSBjb3N0IG9mIEFCSSBkaWZmZXJlbmNlcyBmb3IgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLiBcCit1Q2xpYmMgaGFzIGJlZW4gZGVzaWduZWQgZnJvbSB0aGUgZ3JvdW5kIHVwIHRvIGJlIGEgQyBsaWJyYXJ5IGZvciBcCitlbWJlZGRlZCBMaW51eC4gIEl0IGlzIE5PVCBjb21wYXRpYmxlIHdpdGggYmluYXJpZXMgbGlua2VkIGFnYWluc3QgZ2xpYmMuIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCisJCSAgICBmaWxlOi8vQ09QWUlORy5MSUIuYm9pbGVycGxhdGU7bWQ1PWFhZGRlYWRjZGRlYjkxODI5N2UwZTRhZmM1MmNlNDZmIFwKK2ZpbGU6Ly8ke1N9L3Rlc3QvcmVnZXgvdGVzdHJlZ2V4LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0zMTttZDU9MjM0ZWZiMjI3ZDBhNDA2NzdmODk1ZTRhMWUyNmU5NjAiCitQUiA9ICJyOSIKKworcmVxdWlyZSB1Y2xpYmMtY29uZmlnLmluYworCitQQVRIX3ByZXBlbmQgPSAiJHtTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU59LiR7U1RBR0lOR0NDfToiCitUT09MQ0hBSU5fT1BUSU9OUyA9ICIgLS1zeXNyb290PSR7U1RBR0lOR19ESVJfVENCT09UU1RSQVB9IgorCisjIHNpdGVjb25maWcuYmJjbGFzcyBydW5zIGNvbmZpZ3VyZSB3aGljaCBuZWVkcyBhIHdvcmtpbmcgY29tcGlsZXIKKyMgRm9yIHRoZSBjb21waWxlciB0byB3b3JrIHdlIG5lZWQgYSB3b3JraW5nIGxpYmMgeWV0IGxpYmMgaXNuJ3QKKyMgaW4gdGhlIHN5c3Jvb3RzIGRpcmVjdG9yeSBhdCB0aGlzIHBvaW50LiBUaGlzIG1lYW5zIHRoZSBsaWJjLnNvCisjIGxpbmtlciBzY3JpcHQgd29uJ3Qgd29yayBhcyB0aGUgLS1zeXNyb290IHNldHRpbmcgaXNuJ3QgY29ycmVjdC4KKyMgSGVyZSB3ZSBjcmVhdGUgYSBoYWNrZWQgdXAgbGliYyBsaW5rZXIgc2NyaXB0IGFuZCBwYXNzIGluIHRoZSByaWdodAorIyBmbGFncyB0byBsZXQgY29uZmlndXJlIHdvcmsuIFVnbHkuCitFWFRSQVNJVEVDT05GSUcgPSAiQ0ZMQUdTPScke0NGTEFHU30gLVdsLC1MJHtXT1JLRElSfS9zaXRlX2NvbmZpZ19saWJjIC1MJHtXT1JLRElSfS9zaXRlX2NvbmZpZ19saWJjIC1MJHtTWVNST09UX0RFU1RESVJ9JHtsaWJkaXJ9IC1MJHtTWVNST09UX0RFU1RESVJ9JHtiYXNlX2xpYmRpcn0gLVdsLC1MJHtTWVNST09UX0RFU1RESVJ9JHtsaWJkaXJ9IC1XbCwtTCR7U1lTUk9PVF9ERVNURElSfSR7YmFzZV9saWJkaXJ9JyIKK3NpdGVjb25maWdfZG9fc2l0ZWNvbmZpZ19nZW5jYWNoZV9wcmVwZW5kID0gIiBcCitta2RpciAtcCAke1dPUktESVJ9L3NpdGVfY29uZmlnX2xpYmM7IFwKK2NwICR7U1lTUk9PVF9ERVNURElSfSR7bGliZGlyfS9saWJjLnNvICR7V09SS0RJUn0vc2l0ZV9jb25maWdfbGliYzsgXAorc2VkIC1pIC1lICdzIyAke2Jhc2VfbGliZGlyfSMgJHtTWVNST09UX0RFU1RESVJ9JHtiYXNlX2xpYmRpcn0jZycgLWUgJ3MjICR7bGliZGlyfSMgJHtTWVNST09UX0RFU1RESVJ9JHtsaWJkaXJ9I2cnICR7V09SS0RJUn0vc2l0ZV9jb25maWdfbGliYy9saWJjLnNvOyBcCisiCisKKyMgRm9yIG5vdywgd2Ugd2lsbCBza2lwIGJ1aWxkaW5nIG9mIGEgZ2NjIHBhY2thZ2UgaWYgaXQgaXMgYSB1Y2xpYmMgb25lCisjIGFuZCBvdXIgYnVpbGQgaXMgbm90IGEgdWNsaWJjIG9uZSwgYW5kIHdlIHNraXAgYSBnbGliYyBvbmUgaWYgb3VyIGJ1aWxkCisjIGlzIGEgdWNsaWJjIGJ1aWxkLgorQ09NUEFUSUJMRV9IT1NUID0gIi4qLXVjbGliYy4qIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCisjIGRvX3N0YWdlIGJhcmZzIG9uIGEgQ0Mgd2l0aCB3aGl0ZXNwYWNlLCB0aGVyZWZvcmUgcHV0IHRoZSAnSE9TVF9DQ19BUkNIJyBpbgorIyB0aGUgQ0ZMQUdTICh3aGVuIGJ1aWxkaW5nIHRoZSB1dGlscykuCitPRU1BS0VfTk9fQ0MgPSAiJ1NUUklQVE9PTD10cnVlJyAnTEQ9JHtMRH0nIgorRVhUUkFfT0VNQUtFID0gIiR7T0VNQUtFX05PX0NDfSBcCisgICAgICAgICAgICAgICAgJ0hPU1RDQz0ke0JVSUxEX0NDfScgXAorICAgICAgICAgICAgICAgICdIT1NUX0NGTEFHUz0ke0JVSUxEX0NGTEFHU30nIFwKKyAgICAgICAgICAgICAgICAnQ0M9JHtDQ30nIFwKKyAgICAgICAgICAgICAgICBBUkNIPSR7VUNMSUJDX0FSQ0h9IgorCitFWFRSQV9PRU1BS0VfdGFza19kb19wYWNrYWdlID0gIiR7T0VNQUtFX05PX0NDfSIKKworIyBlbmFibGUgdmVyYm9zZSBvdXRwdXQ6CitleHBvcnQgVj0iMiIKKworIyAtTzxuPiAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciBlbmRzIHVwIHdpdGggR0NDIElDRSBvbiB0aHVtYiBhcyByZXBvcnRlZAorIyBodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQ0ODYwCisjCitDRkxBR1NfYXJtIDo9ICIke0BvZV9maWx0ZXJfb3V0KCctZm5vLW9taXQtZnJhbWUtcG9pbnRlcicsICcke0NGTEFHU30nLCBkKX0iCitVQ0xJQkNfRVhUUkFfQ0ZMQUdTICA6PSAiJHtAb2VfZmlsdGVyX291dCgnKC1JXFMrfC1pXFMrKScsICcke0NGTEFHU30nLCBkKX0iCisKK2RvX2NvbXBpbGVfcHJlcGVuZCAoKSB7CisgIHVuc2V0IENGTEFHUyBDUFBGTEFHUyBDWFhGTEFHUyBMREZMQUdTCisgIG9lX3J1bm1ha2UgcHJlZ2VuCit9CisKK2NvbmZpZ21hbmdsZSA9ICcvXktFUk5FTF9IRUFERVJTL2Q7IFwKKyAgICAgICAgICAgICAgICAvXlJVTlRJTUVfUFJFRklYL2Q7IFwKKyAgICAgICAgICAgICAgICAvXkRFVkVMX1BSRUZJWC9kOyBcCisgICAgICAgICAgICAgICAgL15TSEFSRURfTElCX0xPQURFUl9QUkVGSVgvZDsgXAorICAgICAgICAgICAgICAgIC9eVUNMSUJDX0VYVFJBX0NGTEFHUy9kOyBcCisgICAgICAgICAgICAgICAgcywuKlVDTElCQ19IQVNfV0NIQVIuKixVQ0xJQkNfSEFTX1dDSEFSPXksZzsgXAorICAgICAgICAgICAgICAgICR7QFsiIiwicywuKkNPTVBJTEVfSU5fVEhVTUJfTU9ERS4qLENPTVBJTEVfSU5fVEhVTUJfTU9ERT15LDsiXVtkLmdldFZhcigiQVJNX0lOU1RSVUNUSU9OX1NFVCIsIFRydWUpICE9ICJhcm0iXX0gXAorICAgICAgICAgICAgICAgICR7QFsiIiwicywuKlVDTElCQ19IQVNfTE9DQUxFLiosVUNMSUJDX0hBU19MT0NBTEU9eSw7Il1bZC5nZXRWYXIoIlVTRV9OTFMiLCBUcnVlKSA9PSAieWVzIl19IFwKKyAgICAgICAgICAgICAgICAke0BbIiIsInMsLipMRFNPX0dOVV9IQVNIX1NVUFBPUlQuKiwjIExEU09fR05VX0hBU0hfU1VQUE9SVCBpcyBub3Qgc2V0LDsiXVtkLmdldFZhcigiVEFSR0VUX0FSQ0giLCBUcnVlKSBpbiBbJ21pcHMnLCAnbWlwc2VsJywgJ21pcHM2NCcsICdtaXBzNjRlbCcsICdhdnIzMiddXX0gXAorICAgICAgICAgICAgICAgIC9eQ1JPU1MvZDsgXAorICAgICAgICAgICAgICAgIC9eVEFSR0VUX0FSQ0g9L2Q7IFwKKyAgICAgICAgICAgICAgICAvXlRBUkdFVF8vcyxeXChbXj1dKlwpLiosIyBcMSBpcyBub3Qgc2V0LGc7IFwKKyAgICAgICAgICAgICAgICBzLF5ET1NUUklQLiosIyBET1NUUklQIGlzIG5vdCBzZXQsZzsgXAorICAgICAgICAgICAgICAgIC9fW0VPXSpBQkkvZDsgXAorICAgICAgICAgICAgICAgIC9IQVNfRlBVL2Q7IFwKKyAgICAgICAgICAgICAgICAke0BbIiIsInMsLipNVUxUSUxJQl9ESVIuKixNVUxUSUxJQl9ESVI9XCIke2Jhc2VsaWJ9XCIsOyJdW2QuZ2V0VmFyKCJiYXNlbGliIiwgVHJ1ZSkgIT0gImxpYiJdfSBcCisgICAgICAgICAgICAgICAnCitPRV9GRUFUVVJFUyA6PSAiJHtAZmVhdHVyZXNfdG9fdWNsaWJjX2NvbmYoZCl9IgorT0VfREVMICAgICAgOj0gIiR7QGZlYXR1cmVzX3RvX3VjbGliY19kZWwoZCl9IgorcHl0aG9uICgpIHsKKyAgICBpZiAiJHtPRV9ERUx9IjoKKyAgICAgICAgZC5zZXRWYXIoJ2NvbmZpZ21hbmdsZV9hcHBlbmQnLCAiJHtPRV9ERUx9IiArICJcbiIpCisKKyAgICAjIGJ5IGRlZmF1bHQgdWNsaWJjIHVzZXMgbWlwczEgSVNBIGZvciBvMzIgQUJJCisgICAgIyBpZiB3ZSB1c2UgVEFSR0VUX0NDX0FSQ0g9Ii1tYXJjaD1taXBzMzIiIHdlIGVuZCB1cCAKKyAgICAjIHdpdGggY29uZmxpY3RpbmcgbWFyY2ggb3B0aW9ucyB0byBnY2MuIEhlcmUgd2UKKyAgICAjIGFzayBmb3IgTUlQUzMyIElTQSB0byBtYXRjaCB0aGUgY2hvc2VuIGFyY2gKKyAgICB0dW5lID0gZC5nZXRWYXIoIkRFRkFVTFRUVU5FIiwgVHJ1ZSkKKyAgICBpZiB0dW5lLnN0YXJ0c3dpdGgoJ21pcHMzMicpOgorICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgdHVuZSA9IHJlLnN1YignKGVsKSooLW5mKSonLCAnJywgdHVuZSkKKyAgICAgICAgZC5zZXRWYXIoJ2NvbmZpZ21hbmdsZV9hcHBlbmQnLAorICAgICAgICAgICAgICAgICAiL14jIyMgTUlQUzMyX0NIRUNLJC9hXFxcbkNPTkZJR19NSVBTX0lTQV8lcz15XG5cbiIgJSAodHVuZS51cHBlcigpKSkKKyAgICBpZiAiJHtPRV9GRUFUVVJFU30iOgorICAgICAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsCisgICAgICAgICAgICAgICAgICAgIi9eIyMjIERJU1RSTyBGRUFUVVJFUyQvYVxcXG4lc1xuXG4iICUKKyAgICAgICAgICAgICAgICAgICAoIlxcbiIuam9pbigoZC5leHBhbmQoIiR7T0VfRkVBVFVSRVN9Iikuc3BsaXQoIlxuIikpKSkpCisgICAgZC5zZXRWYXIoJ2NvbmZpZ21hbmdsZV9hcHBlbmQnLAorICAgICAgICAgICAgICAgICAiL14jIyMgQ1JPU1MkL2FcXFxuJXNcbiIgJQorICAgICAgICAgICAgICAgICAgKCJcXG4iLmpvaW4oWyJDUk9TU19DT01QSUxFUl9QUkVGSVg9XCIke1RBUkdFVF9QUkVGSVh9XCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIlVDTElCQ19FWFRSQV9DRkxBR1M9XCIke1VDTElCQ19FWFRSQV9DRkxBR1N9XCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJLRVJORUxfSEVBREVSUz1cIiR7U1RBR0lOR19JTkNESVJ9XCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJSVU5USU1FX1BSRUZJWD1cIi9cIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkRFVkVMX1BSRUZJWD1cIi8ke3ByZWZpeH1cIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlNIQVJFRF9MSUJfTE9BREVSX1BSRUZJWD1cIi9saWJcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICBdKQorICAgICAgICAgICAgICAgICAgKSkKKyAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsCisgICAgICAgICAgICAgICAgICIvXiMjIyBUR1QkL2FcXFxuVEFSR0VUX0FSQ0g9XCIlc1wiXFxuVEFSR0VUXyVzPXlcbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgKCIke1VDTElCQ19BUkNIfSIsICIke1VDTElCQ19BUkNIfSIpKQorICAgIGQuc2V0VmFyKCdjb25maWdtYW5nbGVfYXBwZW5kJywKKyAgICAiL14jIyMgRlBVJC9hXFxcbiVzXG5cbiIgJSAoWyJVQ0xJQkNfSEFTX0ZQVT15IiwiIyBVQ0xJQkNfSEFTX0ZQVSBpcyBub3Qgc2V0Il1bZC5nZXRWYXIoJ1RBUkdFVF9GUFUnLCBUcnVlKSBpbiBbICdzb2Z0JyBdXSkpCisgICAgaWYgIiR7VUNMSUJDX0VORElBTn0iOgorICAgICAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsCisgICAgICAgICAgICAgICAgICAgIi9eIyMjIEFCSSQvYVxcXG5BUkNIX1dBTlRTXyVzX0VORElBTj15XG5cbiIgJSAoIiR7VUNMSUJDX0VORElBTn0iKSkKKyAgICBpZiAiJHtVQ0xJQkNfQUJJfSI6CisgICAgICAgIGQuc2V0VmFyKCdjb25maWdtYW5nbGVfYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgICAiL14jIyMgQUJJJC9hXFxcbkNPTkZJR18lcz15XG5cbiIgJSAoIiR7VUNMSUJDX0FCSX0iKSkKK30KKworcHl0aG9uIGRvX3BhdGNoX2FwcGVuZCgpIHsKKyAgICBpbXBvcnQgc3VicHJvY2VzcworICAgIHN1YnByb2Nlc3MuY2FsbCgibG4gLXNmICR7U1RBR0lOR19JTkNESVJ9L2xpbnV4ICR7U30vaW5jbHVkZS9saW51eCIsIHNoZWxsPVRydWUpCisgICAgc3VicHJvY2Vzcy5jYWxsKCJsbiAtc2YgJHtTVEFHSU5HX0lOQ0RJUn0vYXNtICR7U30vaW5jbHVkZS9hc20iLCBzaGVsbD1UcnVlKQorfQorCitkb19jb25maWd1cmUoKSB7CisgICAgICAgIHJtIC1mICR7U30vLmNvbmZpZworCisgICAgICAgICMgT3BlbkVtYmVkZGVkIHNwbGl0cyB0aGUgdUNsaWJjLmNvbmZpZyBpbiB0d28gcGFydHM6CisgICAgICAgICMgdUNsaWJjLm1hY2hpbmUsIHVDbGliYy5kaXN0cm8KKyAgICAgICAgZWNobyAiIyMjIHVDbGliYy5tYWNoaW5lICMjIyIgPiR7U30vbWVyZ2VkLmNvbmZpZworICAgICAgICBjYXQgJHtXT1JLRElSfS91Q2xpYmMubWFjaGluZSA+PiR7U30vbWVyZ2VkLmNvbmZpZworICAgICAgICBlY2hvICIjIyMgdUNsaWJjLmRpc3RybyAjIyMiID4+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGNhdCAke1dPUktESVJ9L3VDbGliYy5kaXN0cm8gPj4ke1N9L21lcmdlZC5jb25maWcKKyAgICAgICAgZWNobyAiIyMjIENST1NTIiA+PiR7U30vbWVyZ2VkLmNvbmZpZworICAgICAgICBlY2hvICIjIyMgVEdUIiA+PiR7U30vbWVyZ2VkLmNvbmZpZworICAgICAgICBlY2hvICIjIyMgTU1VIiA+PiR7U30vbWVyZ2VkLmNvbmZpZworICAgICAgICBlY2hvICIjIyMgRlBVIiA+PiR7U30vbWVyZ2VkLmNvbmZpZworICAgICAgICBlY2hvICIjIyMgQUJJIiA+PiR7U30vbWVyZ2VkLmNvbmZpZworICAgICAgICBlY2hvICIjIyMgRElTVFJPIEZFQVRVUkVTIiA+PiR7U30vbWVyZ2VkLmNvbmZpZworICAgICAgICBlY2hvICIjIyMgTUlQUzMyX0NIRUNLIiA+PiR7U30vbWVyZ2VkLmNvbmZpZworCisgICAgICAgICMgTWFuZ2xlIHRoZSByZXN1bHRpbmcgLmNvbmZpZyBkZXBlbmRpbmcgb24gT0UgdmFyaWFibGVzCisgICAgICAgIHNlZCAtaSAtZSAnJHtjb25maWdtYW5nbGV9JyAke1N9L21lcmdlZC5jb25maWcKKwljcCAke1N9L21lcmdlZC5jb25maWcgLmNvbmZpZworICAgICAgICBtZXJnZV9jb25maWcuc2ggLXIgLW4gLW0gLmNvbmZpZyAke0AiICIuam9pbihmaW5kX2NmZ3MoZCkpfQorCWNtbDFfZG9fY29uZmlndXJlCisKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIFBSRUZJWD0ke0R9IGluc3RhbGwKKwlybSAtcmYgJHtEfSR7aW5jbHVkZWRpcn0vaWNvbnYuaAorfQorCisjIGJ1aWxkIGxkZCwgbGRjb25maWcgYW5kIGZyaWVuZHMgYnV0IG9ubHkgZm9yIGZ1bGwgdWNsaWJjCitkb19pbnN0YWxsX2FwcGVuZF9wbi11Y2xpYmMgKCkgeworICAgICAgICBvZV9ydW5tYWtlIFBSRUZJWD0ke0R9ICJTU1BfQUxMX0NGTEFHUz0ke1RBUkdFVF9MSU5LX0hBU0hfU1RZTEV9IiAtQyB1dGlscyB1dGlsc19pbnN0YWxsCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliY19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmNfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMDJiM2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmNfZ2l0LmJiCkBAIC0wLDAgKzEsMjIgQEAKK3JlcXVpcmUgdWNsaWJjLmluYworcmVxdWlyZSB1Y2xpYmMtcGFja2FnZS5pbmMKK3JlcXVpcmUgdWNsaWJjLWdpdC5pbmMKKworU1RBR0lOR0NDID0gImdjYy1jcm9zcy1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorU1RBR0lOR0NDX2NsYXNzLW5hdGl2ZXNkayA9ICJnY2MtY3Jvc3NzZGstaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKKworUFJPVklERVMgKz0gInZpcnR1YWwvbGliYyB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1saWJjLWZvci1nY2MiCisKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9YmludXRpbHMgXAorICAgICAgICAgICB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MtaW5pdGlhbCBcCisgICAgICAgICAgIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWxpYmMtaW5pdGlhbCBcCisgICAgICAgICAgIGxpbnV4LWxpYmMtaGVhZGVycyBuY3Vyc2VzLW5hdGl2ZSBcCisgICAgICAgICAgIGxpYmdjYy1pbml0aWFsIGtlcm4tdG9vbHMtbmF0aXZlIgorCitSREVQRU5EU18ke1BOfS1kZXYgPSAibGludXgtbGliYy1oZWFkZXJzLWRldiIKK1JQUk9WSURFU18ke1BOfS1kZXYgKz0gImxpYmMtZGV2IHZpcnR1YWwtbGliYy1kZXYiCisjIHVjbGliYyBkb2VzIG5vdCByZWFsbHkgaGF2ZSBsaWJzZWdmYXVsdCBidXQgdGhlbiB1c2luZyB0aGUgb25lIGZyb20gZ2xpYmMgaXMgYWxzbyBub3QKKyMgZ29pbmcgdG8gd29yay4gU28gd2UgcHJldGVuZCB0aGF0IHdlIGhhdmUgaXQgdG8gbWFrZSBiaXRiYWtlIG5vdCBwdWxsIG90aGVyIHJlY2lwZXMKKyMgdG8gc2F0aXNmeSB0aGlzIGRlcGVuZGVuY3kgZm9yIHRoZSBpbWFnZXMvdGFza3MKKworUlBST1ZJREVTXyR7UE59ICs9ICJsaWJzZWdmYXVsdCBydGxkKEdOVV9IQVNIKSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9hdXRvbW91bnQucnVsZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvYXV0b21vdW50LnJ1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNTc4ZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvYXV0b21vdW50LnJ1bGVzCkBAIC0wLDAgKzEsMTkgQEAKKyMgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIG1vZGlmaWVycyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHVzZWQgaW4gc29tZQorIyBvZiB0aGUgZGlmZmVyZW50IGZpZWxkcy4gVGhleSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgc3Vic2l0dXRpb25zOgorIworIyAlbiB0aGUgImtlcm5lbCBudW1iZXIiIG9mIHRoZSBkZXZpY2UuCisjICAgIEZvciBleGFtcGxlLCAnc2RhMycgaGFzIGEgImtlcm5lbCBudW1iZXIiIG9mICczJworIyAlZSB0aGUgc21hbGxlc3QgbnVtYmVyIGZvciB0aGF0IG5hbWUgd2hpY2ggZG9lcyBub3QgbWF0Y2hlcyBhbiBleGlzdGluZyBub2RlCisjICVrIHRoZSBrZXJuZWwgbmFtZSBmb3IgdGhlIGRldmljZQorIyAlTSB0aGUga2VybmVsIG1ham9yIG51bWJlciBmb3IgdGhlIGRldmljZQorIyAlbSB0aGUga2VybmVsIG1pbm9yIG51bWJlciBmb3IgdGhlIGRldmljZQorIyAlYiB0aGUgYnVzIGlkIGZvciB0aGUgZGV2aWNlCisjICVjIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdGhlIFBST0dSQU0KKyMgJXN7ZmlsZW5hbWV9IHRoZSBjb250ZW50IG9mIGEgc3lzZnMgYXR0cmlidXRlCisjICUlIHRoZSAnJScgY2hhciBpdHNlbGYKKyMKKworIyBNZWRpYSBhdXRvbW91bnRpbmcKK1NVQlNZU1RFTT09ImJsb2NrIiwgQUNUSU9OPT0iYWRkIiAgICBSVU4rPSIvZXRjL3VkZXYvc2NyaXB0cy9tb3VudC5zaCIKK1NVQlNZU1RFTT09ImJsb2NrIiwgQUNUSU9OPT0icmVtb3ZlIiBSVU4rPSIvZXRjL3VkZXYvc2NyaXB0cy9tb3VudC5zaCIKK1NVQlNZU1RFTT09ImJsb2NrIiwgQUNUSU9OPT0iY2hhbmdlIiwgRU5We0RJU0tfTUVESUFfQ0hBTkdFfT09IjEiIFJVTis9Ii9ldGMvdWRldi9zY3JpcHRzL21vdW50LnNoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL2F1dG9uZXQucnVsZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvYXV0b25ldC5ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTY3NmFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL2F1dG9uZXQucnVsZXMKQEAgLTAsMCArMSwxOSBAQAorIyBUaGVyZSBhcmUgYSBudW1iZXIgb2YgbW9kaWZpZXJzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgdXNlZCBpbiBzb21lCisjIG9mIHRoZSBkaWZmZXJlbnQgZmllbGRzLiBUaGV5IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBzdWJzaXR1dGlvbnM6CisjCisjICVuIHRoZSAia2VybmVsIG51bWJlciIgb2YgdGhlIGRldmljZS4KKyMgICAgRm9yIGV4YW1wbGUsICdzZGEzJyBoYXMgYSAia2VybmVsIG51bWJlciIgb2YgJzMnCisjICVlIHRoZSBzbWFsbGVzdCBudW1iZXIgZm9yIHRoYXQgbmFtZSB3aGljaCBkb2VzIG5vdCBtYXRjaGVzIGFuIGV4aXN0aW5nIG5vZGUKKyMgJWsgdGhlIGtlcm5lbCBuYW1lIGZvciB0aGUgZGV2aWNlCisjICVNIHRoZSBrZXJuZWwgbWFqb3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICVtIHRoZSBrZXJuZWwgbWlub3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICViIHRoZSBidXMgaWQgZm9yIHRoZSBkZXZpY2UKKyMgJWMgdGhlIHN0cmluZyByZXR1cm5lZCBieSB0aGUgUFJPR1JBTQorIyAlc3tmaWxlbmFtZX0gdGhlIGNvbnRlbnQgb2YgYSBzeXNmcyBhdHRyaWJ1dGUKKyMgJSUgdGhlICclJyBjaGFyIGl0c2VsZgorIworCisjIEhhbmRsZSBuZXR3b3JrIGludGVyZmFjZSBzZXR1cAorU1VCU1lTVEVNPT0ibmV0IiwgQUNUSU9OPT0iYWRkIiBSVU4rPSIvZXRjL3VkZXYvc2NyaXB0cy9uZXR3b3JrLnNoIgorU1VCU1lTVEVNPT0ibmV0IiwgQUNUSU9OPT0icmVtb3ZlIiBSVU4rPSIvZXRjL3VkZXYvc2NyaXB0cy9uZXR3b3JrLnNoIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbG9jYWxleHRyYS5ydWxlcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9sb2NhbGV4dHJhLnJ1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNTFkM2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbG9jYWxleHRyYS5ydWxlcwpAQCAtMCwwICsxLDIzIEBACisjIFRoZXJlIGFyZSBhIG51bWJlciBvZiBtb2RpZmllcnMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSB1c2VkIGluIHNvbWUKKyMgb2YgdGhlIGRpZmZlcmVudCBmaWVsZHMuIFRoZXkgcHJvdmlkZSB0aGUgZm9sbG93aW5nIHN1YnNpdHV0aW9uczoKKyMKKyMgJW4gdGhlICJrZXJuZWwgbnVtYmVyIiBvZiB0aGUgZGV2aWNlLgorIyAgICBGb3IgZXhhbXBsZSwgJ3NkYTMnIGhhcyBhICJrZXJuZWwgbnVtYmVyIiBvZiAnMycKKyMgJWUgdGhlIHNtYWxsZXN0IG51bWJlciBmb3IgdGhhdCBuYW1lIHdoaWNoIGRvZXMgbm90IG1hdGNoZXMgYW4gZXhpc3Rpbmcgbm9kZQorIyAlayB0aGUga2VybmVsIG5hbWUgZm9yIHRoZSBkZXZpY2UKKyMgJU0gdGhlIGtlcm5lbCBtYWpvciBudW1iZXIgZm9yIHRoZSBkZXZpY2UKKyMgJW0gdGhlIGtlcm5lbCBtaW5vciBudW1iZXIgZm9yIHRoZSBkZXZpY2UKKyMgJWIgdGhlIGJ1cyBpZCBmb3IgdGhlIGRldmljZQorIyAlYyB0aGUgc3RyaW5nIHJldHVybmVkIGJ5IHRoZSBQUk9HUkFNCisjICVze2ZpbGVuYW1lfSB0aGUgY29udGVudCBvZiBhIHN5c2ZzIGF0dHJpYnV0ZQorIyAlJSB0aGUgJyUnIGNoYXIgaXRzZWxmCisjCisKKyMgVGhlIGZpcnN0IHJ0YyBkZXZpY2UgaXMgc3ltbGlua2VkIHRvIC9kZXYvcnRjCitLRVJORUw9PSJydGMwIiwgU1lNTElOSys9InJ0YyIKKworI1RoZSBmaXJzdCBmcmFtZWJ1ZmZlciBpcyBzeW1saW5rZWQgdG8gL2Rldi9mYgorS0VSTkVMPT0iZmIwIiwgIFNZTUxJTksrPSJmYiIKKworIyBNYWtlIGFsbCBpbnB1dCBkZXZpY2VzIHJlYWQtd3JpdGUgdG8gdGhlIGlucHV0IGdyb3VwCitTVUJTWVNURU09PSJpbnB1dCIsIEdST1VQPSJpbnB1dCIsIE1PREU9IjY2MCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9tb3VudC5ibGFja2xpc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbW91bnQuYmxhY2tsaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0OTM0OTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbW91bnQuYmxhY2tsaXN0CkBAIC0wLDAgKzEsNSBAQAorL2Rldi9sb29wCisvZGV2L3JhbQorL2Rldi9tdGRibG9jaworL2Rldi9tZAorL2Rldi9kbS0qCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbW91bnQuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbW91bnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VlYTkxMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9tb3VudC5zaApAQCAtMCwwICsxLDkwIEBACisjIS9iaW4vc2gKKyMKKyMgQ2FsbGVkIGZyb20gdWRldgorIworIyBBdHRlbXB0IHRvIG1vdW50IGFueSBhZGRlZCBibG9jayBkZXZpY2VzIGFuZCB1bW91bnQgYW55IHJlbW92ZWQgZGV2aWNlcworCisKK01PVU5UPSIvYmluL21vdW50IgorUE1PVU5UPSIvdXNyL2Jpbi9wbW91bnQiCitVTU9VTlQ9Ii9iaW4vdW1vdW50IgorZm9yIGxpbmUgaW4gYGdyZXAgLXYgXiMgL2V0Yy91ZGV2L21vdW50LmJsYWNrbGlzdGAKK2RvCisJaWYgWyBgIGV4cHIgbWF0Y2ggIiRERVZOQU1FIiAiJGxpbmUiIGAgLWd0IDAgXTsKKwl0aGVuCisJCWxvZ2dlciAidWRldi9tb3VudC5zaCIgIlskREVWTkFNRV0gaXMgYmxhY2tsaXN0ZWQsIGlnbm9yaW5nIgorCQlleGl0IDAKKwlmaQorZG9uZQorCithdXRvbW91bnQoKSB7CQorCW5hbWU9ImBiYXNlbmFtZSAiJERFVk5BTUUiYCIKKworCSEgdGVzdCAtZCAiL3J1bi9tZWRpYS8kbmFtZSIgJiYgbWtkaXIgLXAgIi9ydW4vbWVkaWEvJG5hbWUiCisJIyBTaWxlbnQgdXRpbC1saW51eCdzIHZlcnNpb24gb2YgbW91bnRpbmcgYXV0bworCWlmIFsgInhgcmVhZGxpbmsgJE1PVU5UYCIgPSAieC9iaW4vbW91bnQudXRpbC1saW51eCIgXSA7CisJdGhlbgorCQlNT1VOVD0iJE1PVU5UIC1vIHNpbGVudCIKKwlmaQorCQorCSMgSWYgZmlsZXN5c3RlbSB0eXBlIGlzIHZmYXQsIGNoYW5nZSB0aGUgb3duZXJzaGlwIGdyb3VwIHRvICdkaXNrJywgYW5kCisJIyBncmFudCBpdCB3aXRoICB3L3IveCBwZXJtaXNzaW9ucy4KKwljYXNlICRJRF9GU19UWVBFIGluCisJdmZhdHxmYXQpCisJCU1PVU5UPSIkTU9VTlQgLW8gdW1hc2s9MDA3LGdpZD1gYXdrIC1GJzonICcvXmRpc2sve3ByaW50ICQzfScgL2V0Yy9ncm91cGAiCisJCTs7CisJIyBUT0RPCisJKikKKwkJOzsKKwllc2FjCisKKwlpZiAhICRNT1VOVCAtdCBhdXRvICRERVZOQU1FICIvcnVuL21lZGlhLyRuYW1lIgorCXRoZW4KKwkJI2xvZ2dlciAibW91bnQuc2gvYXV0b21vdW50IiAiJE1PVU5UIC10IGF1dG8gJERFVk5BTUUgXCIvcnVuL21lZGlhLyRuYW1lXCIgZmFpbGVkISIKKwkJcm1fZGlyICIvcnVuL21lZGlhLyRuYW1lIgorCWVsc2UKKwkJbG9nZ2VyICJtb3VudC5zaC9hdXRvbW91bnQiICJBdXRvLW1vdW50IG9mIFsvcnVuL21lZGlhLyRuYW1lXSBzdWNjZXNzZnVsIgorCQl0b3VjaCAiL3RtcC8uYXV0b21vdW50LSRuYW1lIgorCWZpCit9CisJCitybV9kaXIoKSB7CisJIyBXZSBkbyBub3Qgd2FudCB0byBybSAtciBwb3B1bGF0ZWQgZGlyZWN0b3JpZXMKKwlpZiB0ZXN0ICJgZmluZCAiJDEiIHwgd2MgLWwgfCB0ciAtZCAiICJgIiAtbHQgMiAtYSAtZCAiJDEiCisJdGhlbgorCQkhIHRlc3QgLXogIiQxIiAmJiBybSAtciAiJDEiCisJZWxzZQorCQlsb2dnZXIgIm1vdW50LnNoL2F1dG9tb3VudCIgIk5vdCByZW1vdmluZyBub24tZW1wdHkgZGlyZWN0b3J5IFskMV0iCisJZmkKK30KKworIyBObyBJRF9GU19UWVBFIGZvciBjZHJvbSBkZXZpY2UsIHlldCBpdCBzaG91bGQgYmUgbW91bnRlZAorbmFtZT0iYGJhc2VuYW1lICIkREVWTkFNRSJgIgorWyAtZSAvc3lzL2Jsb2NrLyRuYW1lL2RldmljZS9tZWRpYSBdICYmIG1lZGlhX3R5cGU9YGNhdCAvc3lzL2Jsb2NrLyRuYW1lL2RldmljZS9tZWRpYWAKKworaWYgWyAiJEFDVElPTiIgPSAiYWRkIiBdICYmIFsgLW4gIiRERVZOQU1FIiBdICYmIFsgLW4gIiRJRF9GU19UWVBFIiAtbyAiJG1lZGlhX3R5cGUiID0gImNkcm9tIiBdOyB0aGVuCisJaWYgWyAteCAiJFBNT1VOVCIgXTsgdGhlbgorCQkkUE1PVU5UICRERVZOQU1FIDI+IC9kZXYvbnVsbAorCWVsaWYgWyAteCAkTU9VTlQgXTsgdGhlbgorICAgIAkJJE1PVU5UICRERVZOQU1FIDI+IC9kZXYvbnVsbAorCWZpCisJCisJIyBJZiB0aGUgZGV2aWNlIGlzbid0IG1vdW50ZWQgYXQgdGhpcyBwb2ludCwgaXQgaXNuJ3QKKwkjIGNvbmZpZ3VyZWQgaW4gZnN0YWIgKG5vdGUgdGhlIHJvb3QgZmlsZXN5c3RlbSBjYW4gc2hvdyB1cCBhcworCSMgL2Rldi9yb290IGluIC9wcm9jL21vdW50cywgc28gY2hlY2sgdGhlIGRldmljZSBudW1iZXIgdG9vKQorCWlmIGV4cHIgJE1BSk9SICIqIiAyNTYgKyAkTUlOT1IgIT0gYHN0YXQgLWMgJWQgL2A7IHRoZW4KKwkJZ3JlcCAtcSAiXiRERVZOQU1FICIgL3Byb2MvbW91bnRzIHx8IGF1dG9tb3VudAorCWZpCitmaQorCisKK2lmIFsgIiRBQ1RJT04iID0gInJlbW92ZSIgXSB8fCBbICIkQUNUSU9OIiA9ICJjaGFuZ2UiIF0gJiYgWyAteCAiJFVNT1VOVCIgXSAmJiBbIC1uICIkREVWTkFNRSIgXTsgdGhlbgorCWZvciBtbnQgaW4gYGNhdCAvcHJvYy9tb3VudHMgfCBncmVwICIkREVWTkFNRSIgfCBjdXQgLWYgMiAtZCAiICIgYAorCWRvCisJCSRVTU9VTlQgJG1udAorCWRvbmUKKwkKKwkjIFJlbW92ZSBlbXB0eSBkaXJlY3RvcmllcyBmcm9tIGF1dG8tbW91bnRlcgorCW5hbWU9ImBiYXNlbmFtZSAiJERFVk5BTUUiYCIKKwl0ZXN0IC1lICIvdG1wLy5hdXRvbW91bnQtJG5hbWUiICYmIHJtX2RpciAiL3J1bi9tZWRpYS8kbmFtZSIKK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbmV0d29yay5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9uZXR3b3JrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZTkyNzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbmV0d29yay5zaApAQCAtMCwwICsxLDU0IEBACisjIS9iaW4vc2gKKworIyBXZSBnZXQgdHdvICJhZGQiIGV2ZW50cyBmb3IgaG9zdGFwIGNhcmRzIGR1ZSB0byB3aWZpMAorZWNobyAiJElOVEVSRkFDRSIgfCBncmVwIC1xIHdpZmkgJiYgZXhpdCAwCisKKyMgdWRldmQgZG9lcyBjbGVhcmVudigpLiBFeHBvcnQgc2hlbGwgUEFUSCB0byBjaGlsZHJlbi4KK2V4cG9ydCBQQVRICisKKyMgQ2hlY2sgaWYgL2V0Yy9pbml0LmQvbmV0d29yayBoYXMgYmVlbiBydW4geWV0IHRvIHNlZSBpZiB3ZSBhcmUgCisjIGNhbGxlZCBieSBzdGFydGluZyAvZXRjL3JjUy5kL1MwM3VkZXYgYW5kIG5vdCBieSBob3RwbHVnZ2luZyBhIGRldmljZQorIworIyBBdCB0aGlzIHN0YWdlLCBuZXR3b3JrIGludGVyZmFjZXMgc2hvdWxkIG5vdCBiZSBicm91Z2h0IHVwCisjIGF1dG9tYXRpY2FsbHkgYmVjYXVzZToKKyMgYSkJL2V0Yy9pbml0LmQvbmV0d29yayBoYXMgbm90IGJlZW4gcnVuIHlldCAoc2VjdXJpdHkgaXNzdWUpCisjIGIpIAkvdmFyIGhhcyBub3QgYmVlbiBwb3B1bGF0ZWQgeWV0IHNvIC9ldGMvcmVzb2x2LGNvbmYgcG9pbnRzIHRvIAorIwlvYmxpdmlvbiwgbWFraW5nIHRoZSBuZXR3b3JrIHVudXNhYmxlCisjCisKK3Nwb29mcD0iYGdyZXAgXnNwb29mcHJvdGVjdCAvZXRjL25ldHdvcmsvb3B0aW9uc2AiCitpZiB0ZXN0IC16ICIkc3Bvb2ZwIgordGhlbgorCSMgVGhpcyBpcyB0aGUgZGVmYXVsdCBmcm9tIC9ldGMvaW5pdC5kL25ldHdvcmsKKwlzcG9vZnBfdmFsPXllcworZWxzZQorCXNwb29mcF92YWw9JHtzcG9vZnAjc3Bvb2Zwcm90ZWN0PX0KK2ZpCisKK3Rlc3QgIiRzcG9vZnBfdmFsIiA9IHllcyAmJiBzcG9vZnBfdmFsPTEgfHwgc3Bvb2ZwX3ZhbD0wCisKKyMgSSB0aGluayBpdCBpcyBzYWZlIHRvIGFzc3VtZSB0aGF0ICJsbyIgd2lsbCBhbHdheXMgYmUgdGhlcmUgOykKK2lmIHRlc3QgImBjYXQgL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvbG8vcnBfZmlsdGVyYCIgIT0gIiRzcG9vZnBfdmFsIiAtYSAtbiAiJHNwb29mcF92YWwiCit0aGVuCisJZWNobyAiJElOVEVSRkFDRSIgPj4gL2Rldi91ZGV2X25ldHdvcmtfcXVldWUJCisJZXhpdCAwCitmaQorCisjCisjIENvZGUgdGFrZW4gZnJvbSBwY21jaWEtY3M6L2V0Yy9wY21jaWEvbmV0d29yaworIworCisjIGlmIHRoaXMgaW50ZXJmYWNlIGhhcyBhbiBlbnRyeSBpbiAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcywgbGV0IGlmdXBkb3duCisjIGhhbmRsZSBpdAoraWYgZ3JlcCAtcSAiaWZhY2UgXCskSU5URVJGQUNFIiAvZXRjL25ldHdvcmsvaW50ZXJmYWNlczsgdGhlbgorICBjYXNlICRBQ1RJT04gaW4KKyAgICBhZGQpCisgICAgCWlmY29uZmlnIHwgZ3JlcCAtcSAiXiRJTlRFUkZBQ0UiIHx8IGlmdXAgJElOVEVSRkFDRQorICAgIAk7OworICAgIHJlbW92ZSkKKyAgICAJaWZkb3duICRJTlRFUkZBQ0UKKyAgICAJOzsKKyAgZXNhYworICAKKyAgZXhpdCAwCitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mXzEuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZl8xLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZiZDkyNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZl8xLjEuYmIKQEAgLTAsMCArMSw0MSBAQAorU1VNTUFSWSA9ICJFeHRyYSBtYWNoaW5lIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZXMiCitERVNDUklQVElPTiA9ICJFeHRyYSBtYWNoaW5lIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHVkZXYsIHNwZWNpZmljYWxseSBibGFja2xpc3QgaW5mb3JtYXRpb24uIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworU1JDX1VSSSA9ICIgXAorICAgICAgIGZpbGU6Ly9hdXRvbW91bnQucnVsZXMgXAorICAgICAgIGZpbGU6Ly9tb3VudC5zaCBcCisgICAgICAgZmlsZTovL21vdW50LmJsYWNrbGlzdCBcCisgICAgICAgZmlsZTovL2F1dG9uZXQucnVsZXMgXAorICAgICAgIGZpbGU6Ly9uZXR3b3JrLnNoIFwKKyAgICAgICBmaWxlOi8vbG9jYWxleHRyYS5ydWxlcyBcCisiCisKK1MgPSAiJHtXT1JLRElSfSIKKworCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vdWRldi9ydWxlcy5kCisKKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9hdXRvbW91bnQucnVsZXMgICAgICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZC9hdXRvbW91bnQucnVsZXMKKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9hdXRvbmV0LnJ1bGVzICAgICAgICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZC9hdXRvbmV0LnJ1bGVzCisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbG9jYWxleHRyYS5ydWxlcyAgICAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3J1bGVzLmQvbG9jYWxleHRyYS5ydWxlcworCisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbW91bnQuYmxhY2tsaXN0ICAgICAke0R9JHtzeXNjb25mZGlyfS91ZGV2LworCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3NjcmlwdHMvCisKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9tb3VudC5zaCAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3NjcmlwdHMvbW91bnQuc2gKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9uZXR3b3JrLnNoICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvc2NyaXB0cworfQorCitGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L3VkZXYiCitSREVQRU5EU18ke1BOfSA9ICJ1ZGV2IgorQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vdWRldi9tb3VudC5ibGFja2xpc3QiCisKKyMgdG8gcmVwbGFjZSB1ZGV2LWV4dHJhLXJ1bGVzIGZyb20gbWV0YS1vZQorUlBST1ZJREVTXyR7UE59ID0gInVkZXYtZXh0cmEtcnVsZXMiCitSUkVQTEFDRVNfJHtQTn0gPSAidWRldi1leHRyYS1ydWxlcyIKK1JDT05GTElDVFNfJHtQTn0gPSAidWRldi1leHRyYS1ydWxlcyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDBkYWQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYuaW5jCkBAIC0wLDAgKzEsMTExIEBACitTVU1NQVJZID0gIi9kZXYvIGFuZCBob3RwbHVnIG1hbmFnZW1lbnQgZGFlbW9uIgorREVTQ1JJUFRJT04gPSAidWRldiBpcyBhIGRhZW1vbiB3aGljaCBkeW5hbWljYWxseSBjcmVhdGVzIGFuZCByZW1vdmVzIGRldmljZSBub2RlcyBmcm9tIFwKKy9kZXYvLCBoYW5kbGVzIGhvdHBsdWcgZXZlbnRzIGFuZCBsb2FkcyBkcml2ZXJzIGF0IGJvb3QgdGltZS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL2tlcm5lbC9ob3RwbHVnL3VkZXYvdWRldi5odG1sIgorTElDRU5TRSA9ICJHUEx2Mi4wKyAmIExHUEx2Mi4xKyIKK0xJQ0VOU0VfJHtQTn0gPSAiR1BMdjIuMCsiCitMSUNFTlNFX2xpYnVkZXYgPSAiTEdQTHYyLjErIgorTElDRU5TRV9saWJndWRldiA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvQ09QWUlORzttZDU9MTdjNGU1ZmI0OTVlNjcwN2FjOTJhMzg2NDkyNmY5NzkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2d1ZGV2L0NPUFlJTkc7bWQ1PWZiNDk0NDg1YTdkMDUwNTMwOGNiNjhlNDk5N2NjMjY2IgorCitMREZMQUdTICs9ICItbHJ0IgorCitERVBFTkRTID0gImdsaWItMi4wIGxpYnVzYiB1c2J1dGlscyBwY2l1dGlscyBnbGliLTIuMC1uYXRpdmUgZ3BlcmYtbmF0aXZlIGxpYnhzbHQtbmF0aXZlIHV0aWwtbGludXgiCitSUFJPVklERVNfJHtQTn0gPSAiaG90cGx1ZyIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzL2tlcm5lbC9ob3RwbHVnL3VkZXYtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4aW5nLWtleWJvYXJkX2ZvcmNlX3JlbGVhc2Uuc2gtc2hlbGwtc2NyaXB0LXBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXZvaWQtbW91c2UtYXV0b3N1c3BlbmQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLnJ1bGVzIFwKKyAgICAgICAgICAgZmlsZTovL3VkZXYucnVsZXMgXAorICAgICAgICAgICBmaWxlOi8vZGV2ZnMtdWRldi5ydWxlcyBcCisgICAgICAgICAgIGZpbGU6Ly9saW5rcy5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL3Blcm1pc3Npb25zLnJ1bGVzIFwKKyAgICAgICAgICAgZmlsZTovL2xvY2FsLnJ1bGVzIFwKKyAgICAgICAgICAgZmlsZTovL3VkZXYtY2FjaGUgXAorICAgICAgICAgICBmaWxlOi8vdWRldi1jYWNoZS5kZWZhdWx0IFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1pbnN0YWxsLXB0ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9ydWxlLXN5bnRheC1yZWdleC1wdGVzdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vaW5pdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVwZGF0ZS1yYy5kIHB0ZXN0CitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibWFrZSBwZXJsIHB5dGhvbiIKKworbGliZXhlY2RpciA9ICIke2Jhc2VfbGliZGlyfSIKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiBcCisgICAgICAgICAgICAgICAgLS13aXRoLXJvb3RsaWJkaXI9JHtiYXNlX2xpYmRpcn0gXAorICAgICAgICAgICAgICAgIC0td2l0aC1wY2ktaWRzLXBhdGg9JHtkYXRhZGlyfS9wY2kuaWRzIFwKKyAgICAgICAgICAgICAgICBhY19jdl9maWxlX191c3Jfc2hhcmVfcGNpX2lkcz1ubyBcCisgICAgICAgICAgICAgICAgYWNfY3ZfZmlsZV9fdXNyX3NoYXJlX2h3ZGF0YV9wY2lfaWRzPW5vIFwKKyAgICAgICAgICAgICAgICBhY19jdl9maWxlX191c3Jfc2hhcmVfbWlzY19wY2lfaWRzPXllcyBcCisgICAgICAgICAgICAgICAgLS1zYmluZGlyPSR7YmFzZV9zYmluZGlyfSBcCisgICAgICAgICAgICAgICAgLS1saWJleGVjZGlyPSR7bm9uYXJjaF9iYXNlX2xpYmRpcn0gXAorICAgICAgICAgICAgICAgIC0td2l0aC1yb290bGliZGlyPSR7YmFzZV9saWJkaXJ9IFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtcm9vdHByZWZpeD0gXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1zeXN0ZW1kc3lzdGVtdW5pdGRpciBcCisgICAgICAgICAgICAgICAiCisKK1BBQ0tBR0VTID0rICJ1ZGV2LWNhY2hlIgorUEFDS0FHRVMgPSsgImxpYnVkZXYiCitQQUNLQUdFUyA9KyAibGliZ3VkZXYiCisKK0lOSVRTQ1JJUFRfUEFDS0FHRVMgPSAidWRldiB1ZGV2LWNhY2hlIgorSU5JVFNDUklQVF9OQU1FX3VkZXYgPSAidWRldiIKK0lOSVRTQ1JJUFRfUEFSQU1TX3VkZXYgPSAic3RhcnQgMDQgUyAuIgorSU5JVFNDUklQVF9OQU1FX3VkZXYtY2FjaGUgPSAidWRldi1jYWNoZSIKK0lOSVRTQ1JJUFRfUEFSQU1TX3VkZXYtY2FjaGUgPSAic3RhcnQgMzYgUyAuIgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJleGVjZGlyfSAke2xpYmRpcn0vQ29uc29sZUtpdCAke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYgJHtiaW5kaXJ9L3VkZXZhZG0iCitSUkVDT01NRU5EU18ke1BOfSArPSAidWRldi1jYWNoZSIKKworIyB1ZGV2LXV0aWxzIGhhcyBiZWVuIHJlbW92ZWQgYXMgYSBwYWNrYWdlLiAgTm90ZSB0aGF0IHVkZXYgY29uZmxpY3RzIHdpdGggdWRldi11dGlscyBzbyB0aGF0CisjIHVkZXYtdXRpbHMgaXMgcmVtb3ZlZCBmcm9tIHN5c3RlbXMgb24gdXBncmFkZS4KK1JDT05GTElDVFNfJHtQTn0gKz0gInVkZXYtdXRpbHMiCitSUkVQTEFDRVNfJHtQTn0gKz0gInVkZXYtdXRpbHMiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS8uZGVidWciCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7YmFzZV9saWJkaXJ9L3VkZXYvLmRlYnVnLyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtiYXNlX2xpYmRpcn0vdWRldi8uZGVidWcvKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2Ly5kZWJ1Zy8qIgorRklMRVNfJHtQTn0tZGV2ID0gIiR7ZGF0YWRpcn0vcGtnY29uZmlnL3VkZXYucGMgXAorICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vbGlidWRldi5oICR7bGliZGlyfS9saWJ1ZGV2LnNvICR7bGliZGlyfS9saWJ1ZGV2LmxhIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGlidWRldi5hICR7bGliZGlyfS9wa2djb25maWcvbGlidWRldi5wYyBcCisgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS9ndWRldiogJHtsaWJkaXJ9L2xpYmd1ZGV2Ki5zbyAke2xpYmRpcn0vbGliZ3VkZXYqLmxhIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGliZ3VkZXYqLmEgJHtsaWJkaXJ9L3BrZ2NvbmZpZy9ndWRldioucGMiCitGSUxFU19saWJ1ZGV2ID0gIiR7YmFzZV9saWJkaXJ9L2xpYnVkZXYuc28uKiIKK0ZJTEVTX2xpYmd1ZGV2ID0gIiR7YmFzZV9saWJkaXJ9L2xpYmd1ZGV2Ki5zby4qICR7bGliZGlyfS9saWJndWRldiouc28uKiIKK0ZJTEVTX3VkZXYtY2FjaGUgPSAiJHtzeXNjb25mZGlyfS9pbml0LmQvdWRldi1jYWNoZSAke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdWRldi1jYWNoZSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvdWRldgorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3VkZXYtY2FjaGUgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3VkZXYtY2FjaGUKKwlzZWQgLWkgcyVAVURFVkRAJSR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi91ZGV2ZCUgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3VkZXYKKwlzZWQgLWkgcyVAVURFVkRAJSR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi91ZGV2ZCUgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3VkZXYtY2FjaGUKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3VkZXYtY2FjaGUuZGVmYXVsdCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3VkZXYtY2FjaGUKKworCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvY2FjaGUuZGF0YQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3J1bGVzLmQvCisKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9sb2NhbC5ydWxlcyAgICAgICAgICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZC9sb2NhbC5ydWxlcworCisJIyBoaWQyaGNpIGhhcyBtb3ZlZCB0byBibHVlejQuIHJlbW92ZWQgaW4gdWRldiBhcyBvZiB2ZXJzaW9uIDE2OQorCXJtIC1mICR7RH0ke2Jhc2VfbGliZGlyfS91ZGV2L2hpZDJoY2kKKworCWVjaG8gJ3VkZXZfcnVuPSIvdmFyL3J1bi91ZGV2IicgPj4gJHtEfSR7c3lzY29uZmRpcn0vdWRldi91ZGV2LmNvbmYKK30KKworIyBBcyBzeXN0ZW1kIGFsc28gYnVpbGRzIHVkZXYsIHNraXAgdGhpcyBwYWNrYWdlIGlmIHdlJ3JlIGRvaW5nIGEgc3lzdGVtZCBidWlsZC4KK3B5dGhvbiAoKSB7CisgICAgaWYgYmIudXRpbHMuY29udGFpbnMgKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIidzeXN0ZW1kJyBpbiBESVNUUk9fRkVBVFVSRVMiKQorfQorZG9fY29tcGlsZV9wdGVzdCgpIHsKKyAgICBvZV9ydW5tYWtlIHRlc3QtdWRldgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvMDAwMS1GaXhpbmcta2V5Ym9hcmRfZm9yY2VfcmVsZWFzZS5zaC1zaGVsbC1zY3JpcHQtcGF0aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LzAwMDEtRml4aW5nLWtleWJvYXJkX2ZvcmNlX3JlbGVhc2Uuc2gtc2hlbGwtc2NyaXB0LXBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFkZWFmYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LzAwMDEtRml4aW5nLWtleWJvYXJkX2ZvcmNlX3JlbGVhc2Uuc2gtc2hlbGwtc2NyaXB0LXBhdGgucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSAwZjgyOTBjOTQzZGEyOThhYmQyNjljYTYwZmQ4Mzc1ZGZiMjE5OTcxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZHJ1IERBTUlBTiA8YWxleGFuZHJ1LmRhbWlhbkBpbnRlbC5jb20+CitEYXRlOiBUaHUsIDEyIEp1bCAyMDEyIDEyOjU0OjQ4ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeGluZyBrZXlib2FyZF9mb3JjZV9yZWxlYXNlLnNoIHNoZWxsIHNjcmlwdCBwYXRoCisKK1dpdGggdGhlIGludHJvZHVjdGlvbiBvZiByb290cHJlZml4LCB0aGUga2V5Ym9hcmQtZm9yY2UtcmVsZWFzZS5zaC5pbgord2FzIG1vZGlmaWVkIHRvIGJlIGV4ZWN1dGVkIHdpdGggQHJvb3RwcmVmaXhAL2Jpbi9zaCwgd2hpY2ggaXMgd3JvbmcKK2JlY2F1c2UgQHJvb3RwcmVmaXhAIGRlZmF1bHRzIHRvIC91c3IgKHdoaWNoIGlzIGNvcnJlY3QpLCBidXQgdGhlCitzaGVsbCBpcyBhbHdheXMgYXQgL2Jpbi9zaCAoSUVFRSBTdGQgMTAwMy4yLTE5OTIpLgorCitUaGVyZWZvcmUgdGhlIGludGVycHJldGVyIGZvciBzaGVsbCBzY3JpcHRzIG5lZWRzIHRvIGJlIC9iaW4vc2ggYXQgYWxsIHRpbWVzLgorCitUaGUgdXBzdHJlYW0gbW92ZWQgdG8gY29uZmlndXJhYmxlIHJvb3QgcHJlZml4LCB0aGlzIHBhdGNoIHRhY2xrZXMgYSAKK3RyYW5zaXRpb24gYnVnLCBhbmQgd2lsbCBub3QgYmUgYXBwbGllZCB1cHN0cmVhbS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsZWdhY3kgdmVyc2lvbl0KKworU2lnbmVkLW9mZi1ieTogQWxleGFuZHJ1IERBTUlBTiA8YWxleGFuZHJ1LmRhbWlhbkBpbnRlbC5jb20+CistLS0KKyBzcmMva2V5bWFwL2tleWJvYXJkLWZvcmNlLXJlbGVhc2Uuc2guaW4gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMva2V5bWFwL2tleWJvYXJkLWZvcmNlLXJlbGVhc2Uuc2guaW4gYi9zcmMva2V5bWFwL2tleWJvYXJkLWZvcmNlLXJlbGVhc2Uuc2guaW4KK2luZGV4IGRkMDQwY2UuLjU5N2EzYTYgMTAwNzU1CistLS0gYS9zcmMva2V5bWFwL2tleWJvYXJkLWZvcmNlLXJlbGVhc2Uuc2guaW4KKysrKyBiL3NyYy9rZXltYXAva2V5Ym9hcmQtZm9yY2UtcmVsZWFzZS5zaC5pbgorQEAgLTEsNCArMSw0IEBACistIyFAcm9vdHByZWZpeEAvYmluL3NoIC1lCisrIyEvYmluL3NoIC1lCisgIyByZWFkIGxpc3Qgb2Ygc2NhbmNvZGVzLCBjb252ZXJ0IGhleCB0byBkZWNpbWFsIGFuZAorICMgYXBwZW5kIHRvIHRoZSBhdGtiZCBmb3JjZV9yZWxlYXNlIHN5c2ZzIGF0dHJpYnV0ZQorICMgJDEgc3lzZnMgZGV2cGF0aCBmb3Igc2VyaW9YCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvYWRkLWluc3RhbGwtcHRlc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9hZGQtaW5zdGFsbC1wdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmMyZTk0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvYWRkLWluc3RhbGwtcHRlc3QucGF0Y2gKQEAgLTAsMCArMSw4NiBAQAorQWRqdXN0ZW1lbnRzIGZvciBwdGVzdDoKKworLSBBZGQgJ2luc3RhbGwtcHRlc3QnIHJ1bGUuCistIFByaW50IGEgc3RhbmRhcmQgcmVzdWx0IGxpbmUgZm9yIGVhY2ggdGVzdC4KKy0gUmVwbGFjZSB0aGUgdXNlIG9mICJ0cmVlIiB3aXRoICJmaW5kIi4KKworU2lnbmVkLW9mZi1ieTogQmrDtnJuIFN0ZW5iZXJnIDxianN0QGVuZWEuY29tPgorU2lnbmVkLW9mZi1ieTogQWxleGFuZHJhIFNhZnRhIDxhbHN0QGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0FkZCBtaXNzaW5nIGZpbGVzIGZvciBydWxlLXN5bnRheC1jaGVjaworLSBBZGQgcnVsZS1zeW50YXgtY2hlY2sucHkKKy0gQWRkIHRoZSBkZXBsb3llZCB1ZGV2IHJ1bGVzIHRvIHRoZSB0ZXN0ZGF0YQorCitTaWduZWQtb2ZmLWJ5OiBNYXggS3J1bW1lbmFjaGVyIDxtYXgub3NzLjA5QGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tIGEvTWFrZWZpbGUuYW0JMjAxMi0wMy0xOCAxNjoyODoxNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBiL01ha2VmaWxlLmFtCTIwMTMtMDItMTggMTA6MDM6MzYuNTMxMTAxMjQ0ICswMTAwCitAQCAtNzA4LDMgKzcwOCwxOCBAQAorIAlmb3IgaSBpbiBzcmMvZG9jcy9odG1sLyoue2h0bWwsY3NzLHBuZ307IGRvIGVjaG8gJCRpOyBrdXAgcHV0ICQkaSAkJGkuc2lnbiAvcHViL2xpbnV4L3V0aWxzL2tlcm5lbC9ob3RwbHVnL2xpYnVkZXYvOyBkb25lCisgCWZvciBpIGluIHNyYy9ndWRldi9kb2NzL2h0bWwvKi57aHRtbCxjc3MscG5nfTsgZG8gcm0gLWYgJCRpLnNpZ247IGdwZyAtLWFybW9yIC0tZGV0YWNoLXNpZ24gLS1vdXRwdXQ9JCRpLnNpZ24gJCRpOyBkb25lCisgCWZvciBpIGluIHNyYy9ndWRldi9kb2NzL2h0bWwvKi57aHRtbCxjc3MscG5nfTsgZG8gZWNobyAkJGk7IGt1cCBwdXQgJCRpICQkaS5zaWduIC9wdWIvbGludXgvdXRpbHMva2VybmVsL2hvdHBsdWcvZ3VkZXYvOyBkb25lCisrCisrUlVMRVMgPSBydWxlcy8qIHNyYy9hY2NlbGVyb21ldGVyLzYxLWFjY2VsZXJvbWV0ZXIucnVsZXMgXAorKwkgc3JjL2Nkcm9tX2lkLzYwLWNkcm9tX2lkLnJ1bGVzIFwKKysJIHNyYy9rZXltYXAvOTUta2V5Ym9hcmQtZm9yY2UtcmVsZWFzZS5ydWxlcyBzcmMva2V5bWFwLzk1LWtleW1hcC5ydWxlcyBcCisrCSBzcmMvbXRkX3Byb2JlLzc1LXByb2JlX210ZC5ydWxlcyBzcmMvdjRsX2lkLzYwLXBlcnNpc3RlbnQtdjRsLnJ1bGVzCisrCisraW5zdGFsbC1wdGVzdDoKKysJaW5zdGFsbCB0ZXN0LXVkZXYgJChERVNURElSKQorKwljcCBNYWtlZmlsZSAkKERFU1RESVIpCisrCXNlZCAtaSAtZSAnc3xeTWFrZWZpbGU6fF9NYWtlZmlsZTp8JyAkKERFU1RESVIpL01ha2VmaWxlCisrCWluc3RhbGwgLWQgJChERVNURElSKS90ZXN0ICQoREVTVERJUikvcnVsZXMKKysJKGNkICQodG9wX3NyY2RpcikgJiYgaW5zdGFsbCAkKFRFU1RTKSAkKERFU1RESVIpL3Rlc3QpCisrCShjZCAkKHRvcF9zcmNkaXIpICYmIGluc3RhbGwgdGVzdC9ydWxlLXN5bnRheC1jaGVjay5weSAkKERFU1RESVIpL3Rlc3QpCisrCShjZCAkKHRvcF9zcmNkaXIpICYmIGluc3RhbGwgJChSVUxFUykgJChERVNURElSKS9ydWxlcykKKysJY3AgJCh0b3Bfc3JjZGlyKS90ZXN0L3N5cy50YXIueHogJChERVNURElSKS90ZXN0LworLS0tIGEvdGVzdC91ZGV2LXRlc3QucGwJMjAxMi0wMy0xOCAxNjo0MzozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBiL3Rlc3QvdWRldi10ZXN0LnBsCTIwMTMtMDItMTggMTA6MzE6MjkuNzA2MzU3MzIxICswMTAwCitAQCAtMTQ1OSwxMSArMTQ1OSwxMyBAQAorICAgICAgICAgICAgICAgICBwcmludCAiYWRkOiAgICAgICAgIGVycm9yIjsKKyAgICAgICAgICAgICAgICAgaWYgKCRydWxlcy0+e2V4cF9hZGRfZXJyb3J9KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiBhcyBleHBlY3RlZFxuIjsKKysgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiWEZBSUw6IFRFU1QgJG51bWJlcjogJHJ1bGVzLT57ZGVzY306IGFkZFxuIjsKKyAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiXG4iOworLSAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSgidHJlZSAkdWRldl9yb290Iik7CisrICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtKCJmaW5kICR1ZGV2X3Jvb3QiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiXG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICRlcnJvcisrOworKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJGQUlMOiBURVNUICRudW1iZXI6ICRydWxlcy0+e2Rlc2N9OiBhZGRcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXAoMSk7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KK0BAIC0xNDc5LDE1ICsxNDgxLDE4IEBACisgICAgICAgICAgICAgICAgIHByaW50ICJyZW1vdmU6ICAgICAgZXJyb3IiOworICAgICAgICAgICAgICAgICBpZiAoJHJ1bGVzLT57ZXhwX3JlbV9lcnJvcn0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiIGFzIGV4cGVjdGVkXG4iOworKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJYRkFJTDogVEVTVCAkbnVtYmVyOiAkcnVsZXMtPntkZXNjfTogcmVtb3ZlXG4iOworICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJcbiI7CistICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtKCJ0cmVlICR1ZGV2X3Jvb3QiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0oImZpbmQgJHVkZXZfcm9vdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9yKys7CisrICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkZBSUw6IFRFU1QgJG51bWJlcjogJHJ1bGVzLT57ZGVzY306IHJlbW92ZVxuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcCgxKTsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgcHJpbnQgInJlbW92ZTogICAgICBva1xuIjsKKysgICAgICAgICAgICAgICAgcHJpbnQgIlBBU1M6IFRFU1QgJG51bWJlcjogJHJ1bGVzLT57ZGVzY306IHJlbW92ZVxuIjsKKyAgICAgICAgIH0KKyAKKyAgICAgICAgIHByaW50ICJcbiI7CistLS0gYS9jb25maWd1cmUuYWMgICAgICAyMDEzLTExLTI4IDA5OjE0OjAyLjgxNDI0ODgyNiArMDEwMAorKysrIGIvY29uZmlndXJlLmFjICAgICAgMjAxMy0xMS0yOCAwOToxNDozNC4yNjA4NzQyOTYgKzAxMDAKK0BAIC02LDcgKzYsNyBAQAorICAgICAgICBbaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9rZXJuZWwvaG90cGx1Zy91ZGV2Lmh0bWxdKQorIEFDX0NPTkZJR19TUkNESVIoW3NyYy91ZGV2ZC5jXSkKKyBBQ19DT05GSUdfQVVYX0RJUihbYnVpbGQtYXV4XSkKKy1BTV9JTklUX0FVVE9NQUtFKFtjaGVjay1uZXdzIGZvcmVpZ24gMS4xMSAtV2FsbCAtV25vLXBvcnRhYmlsaXR5IHNpbGVudC1ydWxlcyB0YXItcGF4IG5vLWRpc3QtZ3ppcCBkaXN0LXh6IHN1YmRpci1vYmplY3RzXSkKKytBTV9JTklUX0FVVE9NQUtFKFtjaGVjay1uZXdzIGZvcmVpZ24gMS4xMSAtV2FsbCAtV25vLXBvcnRhYmlsaXR5IHNpbGVudC1ydWxlcyB0YXItcGF4IG5vLWRpc3QtZ3ppcCBkaXN0LXh6IHN1YmRpci1vYmplY3RzIHNlcmlhbC10ZXN0c10pCisgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgQUNfU1lTX0xBUkdFRklMRQorIEFDX0NPTkZJR19NQUNST19ESVIoW200XSkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvYXZvaWQtbW91c2UtYXV0b3N1c3BlbmQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9hdm9pZC1tb3VzZS1hdXRvc3VzcGVuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzMxYjMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvYXZvaWQtbW91c2UtYXV0b3N1c3BlbmQucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorU291cmNlOiBodHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvc3lzdGVtZC9zeXN0ZW1kL2NvbW1pdC9ydWxlcy80Mi11c2ItaGlkLXBtLnJ1bGVzP2lkPWUwMzg2Y2YyODA5MjE5YmJkZDMwODk1ZjQ2ZjFmNTY3YjU2OTAyYjYKKworU29tZSBVU0IgcG9ydHMgb24gZXh0ZXJuYWwgaHVicyBtYXkgYmUgcmVwb3J0ZWQgYXMgImZpeGVkIi4gV2Ugb25seSB3YW50Cit0byBhdXRvLWVuYWJsZSB0aGlzIG9uIHBvcnRzIHRoYXQgYXJlIGludGVybmFsIHRvIHRoZSBtYWNoaW5lLCBzbyBjaGVjawordGhlIHBhcmVudCBzdGF0ZSBhcyB3ZWxsLgorCitVcHN0cmVhbS1TdGF0dXM6IGJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEzLzA5LzEzCisKK0luZGV4OiB1ZGV2LTE4Mi9ydWxlcy80Mi11c2ItaGlkLXBtLnJ1bGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdWRldi0xODIub3JpZy9ydWxlcy80Mi11c2ItaGlkLXBtLnJ1bGVzCisrKysgdWRldi0xODIvcnVsZXMvNDItdXNiLWhpZC1wbS5ydWxlcworQEAgLTQ2LDQgKzQ2LDkgQEAgQUNUSU9OPT0iYWRkIiwgU1VCU1lTVEVNPT0idXNiIiwgQVRUUlN7aQorIEFDVElPTj09ImFkZCIsIFNVQlNZU1RFTT09InVzYiIsIEFUVFJ7aWRWZW5kb3J9PT0iMTRkZCIsIEFUVFJ7aWRQcm9kdWN0fT0iMDAwMiIsIFRFU1Q9PSJwb3dlci9jb250cm9sIiwgQVRUUntwb3dlci9jb250cm9sfT0iYXV0byIKKworICMgVVNCIEhJRCBkZXZpY2VzIHRoYXQgYXJlIGludGVybmFsIHRvIHRoZSBtYWNoaW5lIHNob3VsZCBhbHNvIGJlIHNhZmUgdG8gYXV0b3N1c3BlbmQKKysjIEFuZCBza2lwIGl0IGZvciBkZXZpY2VzIHdoaWNoIGFyZSBleHRlcm5hbCBidXQgc2F5ICJmaXhlZCIKKytBQ1RJT049PSJhZGQiLCBTVUJTWVNURU09PSJ1c2IiLCBTVUJTWVNURU1TPT0idXNiIiwgQVRUUlN7cmVtb3ZhYmxlfT09InJlbW92YWJsZSIsIEdPVE89InVzYl9oaWRfcG1fZW5kIgorK0FDVElPTj09ImFkZCIsIFNVQlNZU1RFTT09InVzYiIsIFNVQlNZU1RFTVM9PSJ1c2IiLCBBVFRSU3tyZW1vdmFibGV9PT0idW5rbm93biIsIEdPVE89InVzYl9oaWRfcG1fZW5kIgorIEFDVElPTj09ImFkZCIsIFNVQlNZU1RFTT09InVzYiIsIEFUVFJ7YkludGVyZmFjZUNsYXNzfT09IjAzIiwgQVRUUlN7cmVtb3ZhYmxlfT09ImZpeGVkIiwgVEVTVD09Ii4uL3Bvd2VyL2NvbnRyb2wiLCBBVFRSey4uL3Bvd2VyL2NvbnRyb2x9PSJhdXRvIgorK0xBQkVMPSJ1c2JfaGlkX3BtX2VuZCIKKysKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2RldmZzLXVkZXYucnVsZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9kZXZmcy11ZGV2LnJ1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYTFhZDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9kZXZmcy11ZGV2LnJ1bGVzCkBAIC0wLDAgKzEsMTA4IEBACisjIFRoZSB1c2Ugb2YgdGhlc2UgcnVsZXMgaXMgbm90IHJlY29tbWVuZGVkIG9yIHN1cHBvcnRlZC4KKyMgSW4gYSB3b3JsZCB3aGVyZSBkZXZpY2VzIGNhbiBjb21lIGFuZCBnbyBhdCBhbnkgdGltZSwgdGhlIGRldmZzIHNjaGVtZQorIyBvZiBzaW1wbGUgZGV2aWNlIGVudW1lcmF0aW9uIGRvZXMgbm90IGhlbHAgX2FueXRoaW5nXy4gSnVzdCBmb3JnZXQgYWJvdXQKKyMgaXQuIFVzZSBjdXN0b20gcnVsZXMgdG8gbmFtZSB5b3VyIGRldmljZSBvciBsb29rIGF0IHRoZSBwZXJzaXN0ZW50IGRldmljZQorIyBuYW1pbmcgc2NoZW1lLCB3aGljaCBpcyBpbXBsZW1lbnRlZCBmb3IgZGlza3MgYW5kIGFkZCB5b3VyIHN1YnN5c3RlbS4KKworIyBpZGUgYmxvY2sgZGV2aWNlcworQlVTPSJpZGUiLCBLRVJORUw9ImhkKiIsIFBST0dSQU09Ii9ldGMvdWRldi9pZGUtZGV2ZnMuc2ggJWsgJWIgJW4iLCBOQU1FPSIlayIsIFNZTUxJTks9IiVjezF9ICVjezJ9IgorCisjIG1kIGJsb2NrIGRldmljZXMKK0tFUk5FTD0ibWRbMC05XSoiLCBOQU1FPSJtZC8lbiIKKworIyBmbG9wcHkgZGV2aWNlcworS0VSTkVMPSJmZFswLTldKiIsIE5BTUU9ImZsb3BweS8lbiIKKworIyB0dHkgZGV2aWNlcworS0VSTkVMPSJ0dHlbMC05XSoiLCAgICBOQU1FPSJ2Yy8lbiIsIFNZTUxJTks9IiVrIgorS0VSTkVMPSJ0dHlTWzAtOV0qIiwgICBOQU1FPSJ0dHMvJW4iLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0idHR5VVNCWzAtOV0qIiwgTkFNRT0idHRzL1VTQiVuIgorCisjIHZjIGRldmljZXMKK0tFUk5FTD0idmNzIiwgICAgICAgIE5BTUU9InZjYy8wIgorS0VSTkVMPSJ2Y3NbMC05XSoiLCAgTkFNRT0idmNjLyVuIgorS0VSTkVMPSJ2Y3NhIiwgICAgICAgTkFNRT0idmNjL2EwIgorS0VSTkVMPSJ2Y3NhWzAtOV0qIiwgTkFNRT0idmNjL2ElbiIKKworIyB2NGwgZGV2aWNlcworS0VSTkVMPSJ2aWRlb1swLTldKiIsIE5BTUU9InY0bC92aWRlbyVuIgorS0VSTkVMPSJyYWRpb1swLTldKiIsIE5BTUU9InY0bC9yYWRpbyVuIgorS0VSTkVMPSJ2YmlbMC05XSoiLCAgIE5BTUU9InY0bC92YmklbiIKK0tFUk5FTD0idnR4WzAtOV0qIiwgICBOQU1FPSJ2NGwvdnR4JW4iCisKKyMgZG0gZGV2aWNlcyAoaWdub3JlIHRoZW0pCitLRVJORUw9ImRtLVswLTldKiIsIE5BTUU9IiIKKworIyBpMmMgZGV2aWNlcworS0VSTkVMPSJpMmMtWzAtOV0qIiwgTkFNRT0iaTJjLyVuIiwgU1lNTElOSz0iJWsiCisKKyMgbG9vcCBkZXZpY2VzCitLRVJORUw9Imxvb3BbMC05XSoiLCBOQU1FPSJsb29wLyVuIiwgU1lNTElOSz0iJWsiCisKKyMgcmFtZGlza3MKK0tFUk5FTD0icmFtWzAtOV0qIiwgTkFNRT0icmQvJW4iLCBTWU1MSU5LPSIlayIKKworIyBmcmFtZWJ1ZmZlciBkZXZpY2VzCitLRVJORUw9ImZiWzAtOV0qIiwgTkFNRT0iZmIvJW4iLCBTWU1MSU5LPSIlayIKKworIyBtaXNjCitLRVJORUw9InJ0YyIsICAgICBOQU1FPSJtaXNjLyVrIiwgU1lNTElOSz0iJWsiCitLRVJORUw9InBzYXV4IiwgICBOQU1FPSJtaXNjLyVrIiwgU1lNTElOSz0iJWsiCitLRVJORUw9ImFncGdhcnQiLCBOQU1FPSJtaXNjLyVrIiwgU1lNTElOSz0iJWsiCitLRVJORUw9InJ0YyIsICAgICBOQU1FPSJtaXNjLyVrIiwgU1lNTElOSz0iJWsiCitLRVJORUw9InBzYXV4IiwgICBOQU1FPSJtaXNjLyVrIiwgU1lNTElOSz0iJWsiCitLRVJORUw9InVpbnB1dCIsICBOQU1FPSJtaXNjLyVrIiwgU1lNTElOSz0iJWsiCisKKyMgYWxzYSBkZXZpY2VzCitLRVJORUw9ImNvbnRyb2xDWzAtOV0qIiwgTkFNRT0ic25kLyVrIgorS0VSTkVMPSJod1tDRDAtOV0qIiwgICAgIE5BTUU9InNuZC8layIKK0tFUk5FTD0icGNtW0NEMC05Y3BdKiIsICBOQU1FPSJzbmQvJWsiCitLRVJORUw9Im1pZGlbQ0QwLTldKiIsICAgTkFNRT0ic25kLyVrIgorS0VSTkVMPSJ0aW1lciIsICAgICAgICAgIE5BTUU9InNuZC8layIKK0tFUk5FTD0ic2VxIiwgICAgICAgICAgICBOQU1FPSJzbmQvJWsiCisKKyMgb3NzIGRldmljZXMKK0tFUk5FTD0iYXVkaW8qIiwgICAgIE5BTUU9InNvdW5kLyVrIiwgU1lNTElOSz0iJWsiCitLRVJORUw9ImRtbWlkaSIsICAgICBOQU1FPSJzb3VuZC8layIsIFNZTUxJTks9IiVrIgorS0VSTkVMPSJkc3AqIiwgICAgICAgTkFNRT0ic291bmQvJWsiLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0ibWlkaSoiLCAgICAgIE5BTUU9InNvdW5kLyVrIiwgU1lNTElOSz0iJWsiCitLRVJORUw9Im1peGVyKiIsICAgICBOQU1FPSJzb3VuZC8layIsIFNZTUxJTks9IiVrIgorS0VSTkVMPSJzZXF1ZW5jZXIqIiwgTkFNRT0ic291bmQvJWsiLCBTWU1MSU5LPSIlayIKKworIyBpbnB1dCBkZXZpY2VzCitLRVJORUw9Im1pY2UiLCAgIE5BTUU9ImlucHV0LyVrIgorS0VSTkVMPSJtb3VzZSoiLCBOQU1FPSJpbnB1dC8layIKK0tFUk5FTD0iZXZlbnQqIiwgTkFNRT0iaW5wdXQvJWsiCitLRVJORUw9ImpzKiIsICAgIE5BTUU9ImlucHV0LyVrIgorS0VSTkVMPSJ0cyoiLAkgTkFNRT0iaW5wdXQvJWsiCisKKyMgVVNCIGRldmljZXMKK0tFUk5FTD0iaGlkZGV2KiIsCU5BTUU9InVzYi8layIKK0tFUk5FTD0iYXVlcioiLAkJTkFNRT0idXNiLyVrIgorS0VSTkVMPSJsZWdvdXNidG93ZXIqIiwJTkFNRT0idXNiLyVrIgorS0VSTkVMPSJkYWJ1c2IqIiwJTkFNRT0idXNiLyVrIgorQlVTPSJ1c2IiLCBLRVJORUw9ImxwWzAtOV0qIiwJTkFNRT0idXNiLyVrIgorCisjIG5ldGxpbmsgZGV2aWNlcworS0VSTkVMPSJyb3V0ZSIsCQlOQU1FPSJuZXRsaW5rLyVrIgorS0VSTkVMPSJza2lwIiwJCU5BTUU9Im5ldGxpbmsvJWsiCitLRVJORUw9InVzZXJzb2NrIiwJTkFNRT0ibmV0bGluay8layIKK0tFUk5FTD0iZndtb25pdG9yIiwJTkFNRT0ibmV0bGluay8layIKK0tFUk5FTD0idGNwZGlhZyIsCU5BTUU9Im5ldGxpbmsvJWsiCitLRVJORUw9Im5mbG9nIiwJCU5BTUU9Im5ldGxpbmsvJWsiCitLRVJORUw9Inhmcm0iLAkJTkFNRT0ibmV0bGluay8layIKK0tFUk5FTD0iYXJwZCIsCQlOQU1FPSJuZXRsaW5rLyVrIgorS0VSTkVMPSJyb3V0ZTYiLAlOQU1FPSJuZXRsaW5rLyVrIgorS0VSTkVMPSJpcDZfZnciLAlOQU1FPSJuZXRsaW5rLyVrIgorS0VSTkVMPSJkbnJ0bXNnIiwJTkFNRT0ibmV0bGluay8layIKK0tFUk5FTD0idGFwKiIsCQlOQU1FPSJuZXRsaW5rLyVrIgorCisjIENBUEkgZGV2aWNlcworS0VSTkVMPSJjYXBpIiwJCU5BTUU9ImNhcGkyMCIsIFNZTUxJTks9ImlzZG4vY2FwaTIwIgorS0VSTkVMPSJjYXBpKiIsCQlOQU1FPSJjYXBpLyVuIgorCisjIE5ldHdvcmsgZGV2aWNlcworS0VSTkVMPSJ0dW4iLAkJTkFNRT0ibmV0LyVrIgorCisjIHJhdyBkZXZpY2VzCitLRVJORUw9InJhd1swLTldKiIsICAgICBOQU1FPSJyYXcvJWsiIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvZml4X3J1bGUtc3ludGF4LXJlZ2V4LXB0ZXN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvZml4X3J1bGUtc3ludGF4LXJlZ2V4LXB0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5M2M0NmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9maXhfcnVsZS1zeW50YXgtcmVnZXgtcHRlc3QucGF0Y2gKQEAgLTAsMCArMSw1OCBAQAorVGhlIHJ1bGUtc3ludGF4LWNoZWNrIHNjcmlwdCBmYWlscyB3aXRoIGVycm9ycyBsaWtlIHRoaXM6CisKK0ludmFsaWQgbGluZSAvbGliL3VkZXYvcnVsZXMuZC85NS1rZXltYXAucnVsZXM6NDk6IEVOVntETUlfVkVORE9SfT09IkFTVVMqIiwgS0VSTkVMUz09ImlucHV0KiIsIEFUVFJTe25hbWV9PT0iQXN1cyBFeHRyYSBCdXR0b25zIiwgQVRUUntbZG1pL2lkXXByb2R1Y3RfbmFtZX09PSJXM0oiLCBSVU4rPSJrZXltYXAgJG5hbWUgbW9kdWxlLWFzdXMtdzNqIgorKCcgIGNsYXVzZTonLCAnQVRUUntbZG1pL2lkXXByb2R1Y3RfbmFtZX09PSJXM0oiJykKKygpCisKKworTW92ZSBsaW5lIGNvbW1lbnQgZnJvbSBlbmQgb2YgcnVsZXMgZmlsZSB0byBpdHMgb3duIGxpbmUsIHRoZSByZWdleCB1c2VkIHRvCit0ZXN0IGNvcnJlY3Qgc3ludGF4IGNob2tlIG9uIGl0LgorCitUaGUgcnVsZS1zeW50YXgtY2hlY2sucHkgdXNlcyByZWdleCB3aGljaCBlcnJvdXJuZXNzbHkgY29tcGxhaW5zIG9uIEFUVFIgcnVsZXMKK29mIHRoZSBmb3JtIEFUVFJ7W2RtaS9pZF1ib2FyZF9uYW1lfT09IjMwQjciCitVc2UgdGhlIHJlZ2V4IGZyb20gc3lzdGVtZCdzIHNjcmlwdCB3aGljaCBhbGxvdyBbXSBjaGFyYWN0ZXJzIGFuZCBhZGRpdGlvbmFsCitjb21wYXJlIG9wZXJhdG9ycworCitUaGUgTWFrZWZpbGUgcGFzc2VzIHJ1bGVzLXRlc3Quc2ggc2NyaXB0IGEgYnVpbGQgaG9zdCBwYXRoIHRvIHRoZSB0ZXN0ZGF0YS4KK0lnbm9yZSB0aGUgYXJndW1lbnQgYW5kIHVzZSBhIHJlbGF0aXZlIHBhdGggaW5zdGVhZC4KKworCitTaWduZWQtb2ZmLWJ5OiBNYXggS3J1bW1lbmFjaGVyIDxtYXgub3NzLjA5QGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSAoY3Jvc3MgZW52aXJvbm1lbnQgcGF0aCkKKworZGlmZiAtTmF1ciB1ZGV2LTE4Mi5vcmlnL3NyYy9rZXltYXAvOTUta2V5bWFwLnJ1bGVzIHVkZXYtMTgyL3NyYy9rZXltYXAvOTUta2V5bWFwLnJ1bGVzCistLS0gdWRldi0xODIub3JpZy9zcmMva2V5bWFwLzk1LWtleW1hcC5ydWxlcwkyMDEyLTAyLTA3IDAwOjAxOjU1LjE1NDY0MDc5MiArMDEwMAorKysrIHVkZXYtMTgyL3NyYy9rZXltYXAvOTUta2V5bWFwLnJ1bGVzCTIwMTUtMDEtMjQgMjA6NTg6NDAuMTU2OTMwNTIwICswMTAwCitAQCAtOTQsNyArOTQsOCBAQAorIEVOVntETUlfVkVORE9SfT09Ikhld2xldHQtUGFja2FyZCIsIEFUVFJ7W2RtaS9pZF1wcm9kdWN0X25hbWV9PT0iSFAgRzYyIE5vdGVib29rIFBDIiwgUlVOKz0ia2V5bWFwICRuYW1lIDB4QjIgd3d3IgorIEVOVntETUlfVkVORE9SfT09Ikhld2xldHQtUGFja2FyZCIsIEFUVFJ7W2RtaS9pZF1wcm9kdWN0X25hbWV9PT0iSFAgUHJvQm9vayoiLCBSVU4rPSJrZXltYXAgJG5hbWUgMHhGOCByZmtpbGwiCisgIyBIUCBQYXZpbGxpb24gZHY2MzE1ZWEgaGFzIGVtcHR5IERNSV9WRU5ET1IKKy1BVFRSe1tkbWkvaWRdYm9hcmRfdmVuZG9yfT09IlF1YW50YSIsIEFUVFJ7W2RtaS9pZF1ib2FyZF9uYW1lfT09IjMwQjciLCBBVFRSe1tkbWkvaWRdYm9hcmRfdmVyc2lvbn09PSI2NS4yQiIsIFJVTis9ImtleW1hcCAkbmFtZSAweDg4IG1lZGlhIiAjICJxdWljayBwbGF5CisrIyAicXVpY2sgcGxheSIKKytBVFRSe1tkbWkvaWRdYm9hcmRfdmVuZG9yfT09IlF1YW50YSIsIEFUVFJ7W2RtaS9pZF1ib2FyZF9uYW1lfT09IjMwQjciLCBBVFRSe1tkbWkvaWRdYm9hcmRfdmVyc2lvbn09PSI2NS4yQiIsIFJVTis9ImtleW1hcCAkbmFtZSAweDg4IG1lZGlhIgorIAorICMgR2F0ZXdheSBjbG9uZSBvZiBBY2VyIEFzcGlyZSBPbmUgQU9BMTEwL0FPQTE1MAorIEVOVntETUlfVkVORE9SfT09IkdhdGV3YXkqIiwgQVRUUntbZG1pL2lkXXByb2R1Y3RfbmFtZX09PSIqQU9BMSoiLCBSVU4rPSJrZXltYXAgJG5hbWUgYWNlciIKK2RpZmYgLU5hdXIgdWRldi0xODIub3JpZy90ZXN0L3J1bGUtc3ludGF4LWNoZWNrLnB5IHVkZXYtMTgyL3Rlc3QvcnVsZS1zeW50YXgtY2hlY2sucHkKKy0tLSB1ZGV2LTE4Mi5vcmlnL3Rlc3QvcnVsZS1zeW50YXgtY2hlY2sucHkJMjAxMi0wMi0xNSAyMDoxMDoxMi44NzIzMzMzNDIgKzAxMDAKKysrKyB1ZGV2LTE4Mi90ZXN0L3J1bGUtc3ludGF4LWNoZWNrLnB5CTIwMTUtMDEtMjQgMjE6MDg6MDAuNDk2MDQ5NjAwICswMTAwCitAQCAtMjgsNyArMjgsNyBAQAorIG5vX2FyZ3NfdGVzdHMgPSByZS5jb21waWxlKCcoQUNUSU9OfERFVlBBVEh8S0VSTkVMUz98TkFNRXxTWU1MSU5LfFNVQlNZU1RFTVM/fERSSVZFUlM/fFRBR3xSRVNVTFR8VEVTVClccyooPzo9fCEpPVxzKiIoW14iXSopIiQnKQorIGFyZ3NfdGVzdHMgPSByZS5jb21waWxlKCcoQVRUUlM/fEVOVnxURVNUKXsoW2EtekEtWjAtOS9fLiolLV0rKX1ccyooPzo9fCEpPVxzKiIoW14iXSopIiQnKQorIG5vX2FyZ3NfYXNzaWduID0gcmUuY29tcGlsZSgnKE5BTUV8U1lNTElOS3xPV05FUnxHUk9VUHxNT0RFfFRBR3xQUk9HUkFNfFJVTnxMQUJFTHxHT1RPfFdBSVRfRk9SfE9QVElPTlN8SU1QT1JUKVxzKig/OlwrPXw6PXw9KVxzKiIoW14iXSopIiQnKQorLWFyZ3NfYXNzaWduID0gcmUuY29tcGlsZSgnKEFUVFJ8RU5WfElNUE9SVCl7KFthLXpBLVowLTkvXy4qJS1dKyl9XHMqPVxzKiIoW14iXSopIiQnKQorK2FyZ3NfYXNzaWduID0gcmUuY29tcGlsZSgnKEFUVFJ8RU5WfElNUE9SVHxSVU4peyhbXVthLXpBLVowLTkvXy4qJS1dKyl9XHMqKD18PT18XCs9KVxzKiIoW14iXSopIiQnKQorIAorIHJlc3VsdCA9IDAKKyBidWZmZXIgPSAnJworLS0tIHVkZXYtMTgyLm9yaWcvdGVzdC9ydWxlcy10ZXN0LnNoCTIwMTItMDEtMjkgMDE6MTU6NDYuMDAwMDAwMDAwICswMTAwCisrKysgdWRldi0xODIvdGVzdC9ydWxlcy10ZXN0LnNoCTIwMTUtMDEtMjQgMTc6NTM6NTEuMjAxODU4NjU4ICswMTAwCitAQCAtNCw3ICs0LDcgQEAKKyAjIChDKSAyMDEwIENhbm9uaWNhbCBMdGQuCisgIyBBdXRob3I6IE1hcnRpbiBQaXR0IDxtYXJ0aW4ucGl0dEB1YnVudHUuY29tPgorIAorLVsgLW4gIiRzcmNkaXIiIF0gfHwgc3JjZGlyPWBkaXJuYW1lICQwYC8uLgorK3NyY2Rpcj1gZGlybmFtZSAkMGAvLi4KKyAKKyAjIHNraXAgaWYgd2UgZG9uJ3QgaGF2ZSBweXRob24KKyB0eXBlIHB5dGhvbiA+L2Rldi9udWxsIDI+JjEgfHwgewpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2luaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFiMDI4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2luaXQKQEAgLTAsMCArMSwxNDIgQEAKKyMhL2Jpbi9zaAorCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICB1ZGV2CisjIFJlcXVpcmVkLVN0YXJ0OiAgICBtb3VudHZpcnRmcworIyBSZXF1aXJlZC1TdG9wOiAgICAgCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IFN0YXJ0IHVkZXZkLCBwb3B1bGF0ZSAvZGV2IGFuZCBsb2FkIGRyaXZlcnMuCisjIyMgRU5EIElOSVQgSU5GTworCitleHBvcnQgVFo9L2V0Yy9sb2NhbHRpbWUKKworWyAtZCAvc3lzL2NsYXNzIF0gfHwgZXhpdCAxCitbIC1yIC9wcm9jL21vdW50cyBdIHx8IGV4aXQgMQorWyAteCBAVURFVkRAIF0gfHwgZXhpdCAxCitTWVNDT05GX0NBQ0hFRD0iL2V0Yy91ZGV2L2NhY2hlLmRhdGEiCitTWVNDT05GX1RNUD0iL2Rldi9zaG0vdWRldi5jYWNoZSIKK0RFVkNBQ0hFX1JFR0VOPSIvZGV2L3NobS91ZGV2LXJlZ2VuIiAjIGNyZWF0ZSB0byByZXF1ZXN0IGNhY2hlIHJlZ2VuCisKKyMgQSBsaXN0IG9mIGZpbGVzIHdoaWNoIGFyZSB1c2VkIGFzIGEgY3JpdGVyaWEgdG8ganVkZ2Ugd2hldGhlciB0aGUgdWRldiBjYWNoZSBjb3VsZCBiZSByZXVzZWQuCitDTVBfRklMRV9MSVNUPSIvcHJvYy92ZXJzaW9uIC9wcm9jL2NtZGxpbmUgL3Byb2MvZGV2aWNlcyIKK1sgLWYgL3Byb2MvYXRhZ3MgXSAmJiBDTVBfRklMRV9MSVNUPSIkQ01QX0ZJTEVfTElTVCAvcHJvYy9hdGFncyIKKworIyBMaXN0IG9mIGZpbGVzIHdob3NlIG1ldGFkYXRhIChzaXplL210aW1lL25hbWUpIHdpbGwgYmUgaW5jbHVkZWQgaW4gY2FjaGVkCisjIHN5c3RlbSBzdGF0ZS4KK01FVEFfRklMRV9MSVNUPSJsaWIvdWRldi9ydWxlcy5kLyogZXRjL3VkZXYvcnVsZXMuZC8qIgorCisjIENvbW1hbmQgdG8gY29tcHV0ZSBzeXN0ZW0gY29uZmlndXJhdGlvbi4KK3N5c2NvbmZfY21kICgpIHsKKwljYXQgLS0gJENNUF9GSUxFX0xJU1QKKwlzdGF0IC1jICclcyAlWSAlbicgLS0gJE1FVEFfRklMRV9MSVNUIHwgYXdrIC1GLyAne3ByaW50ICQxICIgIiAkTkY7fScKK30KKworWyAtZiAvZXRjL2RlZmF1bHQvdWRldi1jYWNoZSBdICYmIC4gL2V0Yy9kZWZhdWx0L3VkZXYtY2FjaGUKK1sgLWYgL2V0Yy91ZGV2L3VkZXYuY29uZiBdICYmIC4gL2V0Yy91ZGV2L3VkZXYuY29uZgorWyAtZiAvZXRjL2RlZmF1bHQvcmNTIF0gJiYgLiAvZXRjL2RlZmF1bHQvcmNTCisKK2tpbGxfdWRldmQgKCkgeworICAgIHBpZD1gcGlkb2YgLXggdWRldmRgCisgICAgWyAtbiAiJHBpZCIgXSAmJiBraWxsICRwaWQKK30KKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgIGV4cG9ydCBBQ1RJT049YWRkCisgICAgIyBwcm9wYWdhdGUgL2RldiBmcm9tIC9zeXMKKyAgICBlY2hvICJTdGFydGluZyB1ZGV2IgorCisgICAgIyBDaGVjayBmb3IgcmVxdWlyZWVkIGRldnRtcGZzIGJlZm9yZSB0cnlpbmcgdG8gc3RhcnQgdWRldiBhbmQKKyAgICAjIG1vdW50IGEgbm8tZXhpc3RhbnQgZnMuCisgICAgaWYgISBncmVwIC1xIGRldnRtcGZzIC9wcm9jL2ZpbGVzeXN0ZW1zCisgICAgdGhlbgorICAgICAgICBlY2hvICJNaXNzaW5nIGRldnRtcGZzLCB3aGljaCBpcyByZXF1aXJlZCBmb3IgdWRldiB0byBydW4iOworICAgICAgICBlY2hvICJIYWx0aW5nLi4uIgorICAgICAgICBoYWx0CisgICAgZmkKKyAgICAjIG1vdW50IHRoZSBkZXZ0bXBmcyBvbiAvZGV2LCBpZiBub3QgYWxyZWFkeSBkb25lCisgICAgTEFORz1DIGF3ayAnJDIgPT0gIi9kZXYiICYmICgkMyA9PSAiZGV2dG1wZnMiKSB7IGV4aXQgMSB9JyAvcHJvYy9tb3VudHMgJiYgeworICAgICAgICAgICAgbW91bnQgLW4gLW8gbW9kZT0wNzU1IC10IGRldnRtcGZzIG5vbmUgIi9kZXYiCisgICAgfQorICAgIFsgLWUgL2Rldi9wdHMgXSB8fCBta2RpciAtbSAwNzU1IC9kZXYvcHRzCisgICAgWyAtZSAvZGV2L3NobSBdIHx8IG1rZGlyIC1tIDE3NzcgL2Rldi9zaG0KKyAgICAjIHRoZSBhdXRvbW91bnQgcnVsZSBmb3IgdWRldiBuZWVkcyAvdG1wIGRpcmVjdG9yeSBhdmFpbGFibGUsIGFzIC90bXAgaXMgYSBzeW1saW5rCisgICAgIyB0byAvdmFyL3RtcCB3aGljaCBpbiB0dXJuIGlzIGEgc3ltbGluayB0byAvdmFyL3ZvbGF0aWxlL3RtcCwgd2UgbmVlZCB0byBtYWtlIHN1cmUKKyAgICAjIC92YXIvdm9sYXRpbGUvdG1wIGRpcmVjdG9yeSB0byBiZSBhdmFpbGFibGUuCisgICAgbWtkaXIgLW0gMTc3NyAtcCAvdmFyL3ZvbGF0aWxlL3RtcAorCisgICAgIyBDYWNoZSBoYW5kbGluZy4KKyAgICBpZiBbICIkREVWQ0FDSEUiICE9ICIiIF07IHRoZW4KKyAgICAgICAgICAgIGlmIFsgLWUgJERFVkNBQ0hFIF07IHRoZW4KKwkJICAgIHN5c2NvbmZfY21kID4gIiRTWVNDT05GX1RNUCIKKwkJICAgIGlmIGNtcCAkU1lTQ09ORl9DQUNIRUQgJFNZU0NPTkZfVE1QID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXIgeG1mICRERVZDQUNIRSAtQyAvIC1tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90X2ZpcnN0X2Jvb3Q9MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgIiRWRVJCT1NFIiAhPSAibm8iIF0gJiYgZWNobyAidWRldjogdXNpbmcgY2FjaGUgZmlsZSAkREVWQ0FDSEUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyAtZSAkU1lTQ09ORl9UTVAgXSAmJiBybSAtZiAiJFNZU0NPTkZfVE1QIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgLWUgIiRERVZDQUNIRV9SRUdFTiIgXSAmJiBybSAtZiAiJERFVkNBQ0hFX1JFR0VOIgorICAgICAgICAgICAgICAgICAgICBlbHNlCisJCQkgICAgIyBPdXRwdXQgZGV0YWlsZWQgcmVhc29uIHdoeSB0aGUgY2FjaGVkIC9kZXYgaXMgbm90IHVzZWQKKwkJCSAgICBjYXQgPDxFT0YKK3VkZXY6IE5vdCB1c2luZyB1ZGV2IGNhY2hlIGJlY2F1c2Ugb2YgY2hhbmdlcyBkZXRlY3RlZCBpbiB0aGUgZm9sbG93aW5nIGZpbGVzOgordWRldjogICAgICRDTVBfRklMRV9MSVNUCit1ZGV2OiAgICAgJE1FVEFfRklMRV9MSVNUCit1ZGV2OiBUaGUgdWRldiBjYWNoZSB3aWxsIGJlIHJlZ2VuZXJhdGVkLiBUbyBpZGVudGlmeSB0aGUgZGV0ZWN0ZWQgY2hhbmdlcywKK3VkZXY6IGNvbXBhcmUgdGhlIGNhY2hlZCBzeXNjb25mIGF0ICAgJFNZU0NPTkZfQ0FDSEVECit1ZGV2OiBhZ2FpbnN0IHRoZSBjdXJyZW50IHN5c2NvbmYgYXQgICRTWVNDT05GX1RNUAorRU9GCisJCQkgICAgdG91Y2ggIiRERVZDQUNIRV9SRUdFTiIKKyAgICAgICAgICAgICAgICAgICAgZmkKKwkgICAgZWxzZQorCQkgICAgaWYgWyAiJFJPT1RGU19SRUFEX09OTFkiICE9ICJ5ZXMiIF07IHRoZW4KKwkJCSAgICAjIElmIHJvb3RmcyBpcyBub3QgcmVhZC1vbmx5LCBpdCdzIHBvc3NpYmxlIHRoYXQgYSBuZXcgdWRldiBjYWNoZSB3b3VsZCBiZSBnZW5lcmF0ZWQ7CisJCQkgICAgIyBvdGhlcndpc2UsIHdlIGRvIG5vdCBib3RoZXIgdG8gcmVhZCBmaWxlcy4KKwkJCSAgICB0b3VjaCAiJERFVkNBQ0hFX1JFR0VOIgorCQkgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgZmkKKworICAgICMgbWFrZV9leHRyYV9ub2RlcworICAgIGtpbGxfdWRldmQgPiAiL2Rldi9udWxsIiAyPiYxCisKKyAgICAjIHRyaWdnZXIgdGhlIHNvcnRlZCBldmVudHMKKyAgICBbIC1lIC9wcm9jL3N5cy9rZXJuZWwvaG90cGx1ZyBdICYmIGVjaG8gLWUgJ1wwMDAnID4vcHJvYy9zeXMva2VybmVsL2hvdHBsdWcKKyAgICBAVURFVkRAIC1kCisKKyAgICB1ZGV2YWRtIGNvbnRyb2wgLS1lbnY9U1RBUlRVUD0xCisgICAgaWYgWyAiJG5vdF9maXJzdF9ib290IiAhPSAiIiBdO3RoZW4KKyAgICAgICAgICAgIGlmIFsgIiRQUk9CRV9QTEFURk9STV9CVVMiICE9ICJ5ZXMiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBQTEFURk9STV9CVVNfTk9NQVRDSD0iLS1zdWJzeXN0ZW0tbm9tYXRjaD1wbGF0Zm9ybSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBQTEFURk9STV9CVVNfTk9NQVRDSD0iIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIHVkZXZhZG0gdHJpZ2dlciAtLWFjdGlvbj1hZGQgLS1zdWJzeXN0ZW0tbm9tYXRjaD10dHkgLS1zdWJzeXN0ZW0tbm9tYXRjaD1tZW0gLS1zdWJzeXN0ZW0tbm9tYXRjaD12YyAtLXN1YnN5c3RlbS1ub21hdGNoPXZ0Y29uc29sZSAtLXN1YnN5c3RlbS1ub21hdGNoPW1pc2MgLS1zdWJzeXN0ZW0tbm9tYXRjaD1kY29uIC0tc3Vic3lzdGVtLW5vbWF0Y2g9cGNpX2J1cyAtLXN1YnN5c3RlbS1ub21hdGNoPWdyYXBoaWNzIC0tc3Vic3lzdGVtLW5vbWF0Y2g9YmFja2xpZ2h0IC0tc3Vic3lzdGVtLW5vbWF0Y2g9dmlkZW80bGludXggJFBMQVRGT1JNX0JVU19OT01BVENICisgICAgICAgICAgICAodWRldmFkbSBzZXR0bGUgLS10aW1lb3V0PTM7IHVkZXZhZG0gY29udHJvbCAtLWVudj1TVEFSVFVQPSkmCisgICAgZWxzZQorICAgICAgICAgICAgdWRldmFkbSB0cmlnZ2VyIC0tYWN0aW9uPWFkZAorICAgICAgICAgICAgdWRldmFkbSBzZXR0bGUKKyAgICBmaQorICAgIDs7CisgIHN0b3ApCisgICAgZWNobyAiU3RvcHBpbmcgdWRldmQiCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tbmFtZSB1ZGV2ZCAtLXF1aWV0CisgICAgOzsKKyAgcmVzdGFydCkKKyAgICAkMCBzdG9wCisgICAgc2xlZXAgMQorICAgICQwIHN0YXJ0CisgICAgOzsKKyAgc3RhdHVzKQorICAgIHBpZD1gcGlkb2YgLXggdWRldmRgCisgICAgaWYgWyAtbiAiJHBpZCIgXTsgdGhlbgorCWVjaG8gInVkZXZkIChwaWQgJHBpZCkgaXMgcnVubmluZyAuLi4iCisgICAgZWxzZQorCWVjaG8gInVkZXZkIGlzIHN0b3BwZWQiCisgICAgZmkKKyAgICA7OworICAqKQorICAgIGVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydH0iCisgICAgZXhpdCAxCitlc2FjCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2xpbmtzLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9saW5rcy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZmY5MjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9saW5rcy5jb25mCkBAIC0wLDAgKzEsMjEgQEAKKyMgVGhpcyBmaWxlIGRvZXMgbm90IGV4aXN0LiBQbGVhc2UgZG8gbm90IGFzayB0aGUgZGViaWFuIG1haW50YWluZXIgYWJvdXQgaXQuCisjIFlvdSBtYXkgdXNlIGl0IHRvIGRvIHN0cmFuZ2UgYW5kIHdvbmRlcmZ1bCB0aGluZ3MsIGF0IHlvdXIgcmlzay4KKworTCBmZAkJL3Byb2Mvc2VsZi9mZAorTCBzdGRpbgkJL3Byb2Mvc2VsZi9mZC8wCitMIHN0ZG91dAkvcHJvYy9zZWxmL2ZkLzEKK0wgc3RkZXJyCS9wcm9jL3NlbGYvZmQvMgorTCBjb3JlCQkvcHJvYy9rY29yZQorTCBzbmRzdGF0CS9wcm9jL2Fzb3VuZC9vc3Mvc25kc3RhdAorTCBNQUtFREVWCS9zYmluL01BS0VERVYKKworRCBwdHMKK0Qgc2htCisKKyMgSGljIHN1bnQgbGVvbmVzLgorTSBwcHAJCWMgMTA4IDAKK0QgbG9vcAorTSBsb29wLzAJYiA3IDAKK0QgbmV0CitNIG5ldC90dW4JYyAxMCAyMDAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvbG9jYWwucnVsZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9sb2NhbC5ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTAyY2RkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvbG9jYWwucnVsZXMKQEAgLTAsMCArMSwxOSBAQAorIyBUaGVyZSBhcmUgYSBudW1iZXIgb2YgbW9kaWZpZXJzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgdXNlZCBpbiBzb21lCisjIG9mIHRoZSBkaWZmZXJlbnQgZmllbGRzLiBUaGV5IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBzdWJzaXR1dGlvbnM6CisjCisjICVuIHRoZSAia2VybmVsIG51bWJlciIgb2YgdGhlIGRldmljZS4KKyMgICAgRm9yIGV4YW1wbGUsICdzZGEzJyBoYXMgYSAia2VybmVsIG51bWJlciIgb2YgJzMnCisjICVlIHRoZSBzbWFsbGVzdCBudW1iZXIgZm9yIHRoYXQgbmFtZSB3aGljaCBkb2VzIG5vdCBtYXRjaGVzIGFuIGV4aXN0aW5nIG5vZGUKKyMgJWsgdGhlIGtlcm5lbCBuYW1lIGZvciB0aGUgZGV2aWNlCisjICVNIHRoZSBrZXJuZWwgbWFqb3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICVtIHRoZSBrZXJuZWwgbWlub3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICViIHRoZSBidXMgaWQgZm9yIHRoZSBkZXZpY2UKKyMgJWMgdGhlIHN0cmluZyByZXR1cm5lZCBieSB0aGUgUFJPR1JBTQorIyAlc3tmaWxlbmFtZX0gdGhlIGNvbnRlbnQgb2YgYSBzeXNmcyBhdHRyaWJ1dGUKKyMgJSUgdGhlICclJyBjaGFyIGl0c2VsZgorIworCisjIENyZWF0ZSBhIHN5bWxpbmsgdG8gYW55IHRvdWNoc2NyZWVuIGlucHV0IGRldmljZQorIyBUcmlnZ2VyIGJhc2VkIG9uIGlucHV0IHR5cGUsIHRoYXQgdGhlIGV2Yml0ICgtZSkgaGFzIEVWX1NZTiBhbmQgRVZfQUJTLAorIyBoYXMgYW4gRVZfQUJTIHZhbHVlICgtYSkgd2hpY2ggaXMgdXNlZCBmb3IgdG91Y2hzY3JlZW4gdHlwZSBkZXZpY2VzLgorU1VCU1lTVEVNPT0iaW5wdXQiLCBLRVJORUw9PSJldmVudFswLTldKiIsIEVOVntJRF9JTlBVVF9UT1VDSFNDUkVFTn09PSIxIiwgU1lNTElOSys9ImlucHV0L3RvdWNoc2NyZWVuMCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3Blcm1pc3Npb25zLnJ1bGVzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvcGVybWlzc2lvbnMucnVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA1YjczMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3Blcm1pc3Npb25zLnJ1bGVzCkBAIC0wLDAgKzEsMTMxIEBACitBQ1RJT04hPSJhZGQiLCBHT1RPPSJwZXJtaXNzaW9uc19lbmQiCisKKyMgd29ya2Fyb3VuZHMgbmVlZGVkIHRvIHN5bmNocm9uaXplIHdpdGggc3lzZnMKKyMgb25seSBuZWVkZWQgZm9yIGtlcm5lbHMgPCB2Mi42LjE4LXJjMQorRU5We1BIWVNERVZQQVRIfSE9Ij8qIiwgRU5We1BIWVNERVZCVVN9PT0iPyoiLAlXQUlUX0ZPUl9TWVNGUz0iYnVzIgorU1VCU1lTVEVNPT0ic2NzaSIsIEtFUk5FTD09IlswLTldKjpbMC05XSoiLAlXQUlUX0ZPUl9TWVNGUz0iaW9lcnJfY250IgorIyBvbmx5IG5lZWRlZCBmb3Iga2VybmVscyA8IDIuNi4xNgorU1VCU1lTVEVNPT0ibmV0IiwJCQkJV0FJVF9GT1JfU1lTRlM9ImFkZHJlc3MiCisjIG9ubHkgbmVlZGVkIGZvciBrZXJuZWxzIDwgMi42LjE3CitTVUJTWVNURU09PSJuZXQiLCBFTlZ7RFJJVkVSfT09Ij8qIiwJCVdBSVRfRk9SX1NZU0ZTPSJkZXZpY2UvZHJpdmVyIgorCisjIGRldmljZXMgbmVlZGVkIHRvIGxvYWQgdGhlIGRyaXZlcnMgcHJvdmlkaW5nIHRoZW0KK0tFUk5FTD09InR1biIsCQkJCQlPUFRJT05TKz0iaWdub3JlX3JlbW92ZSIKK0tFUk5FTD09InBwcCIsCQkJCQlPUFRJT05TKz0iaWdub3JlX3JlbW92ZSIKK0tFUk5FTD09Imxvb3BbMC05XSoiLAkJCQlPUFRJT05TKz0iaWdub3JlX3JlbW92ZSIKKworIyBkZWZhdWx0IHBlcm1pc3Npb25zIGZvciBibG9jayBkZXZpY2VzCitTVUJTWVNURU09PSJibG9jayIsCQkJCUdST1VQPSJkaXNrIgorIyB0aGUgYWFjcmFpZCBkcml2ZXIgaXMgYnJva2VuIGFuZCByZXBvcnRzIHRoYXQgZGlza3MgcmVtb3ZhYmxlIChzZWUgIzQwNDkyNykKK1NVQlNZU1RFTT09ImJsb2NrIiwgQVRUUlN7cmVtb3ZhYmxlfT09IjEiLCBcCisJRFJJVkVSUyE9ImFhY3JhaWQiLAkJCUdST1VQPSJmbG9wcHkiCisjIGFsbCBibG9jayBkZXZpY2VzIG9uIHRoZXNlIGJ1c2VzIGFyZSAicmVtb3ZhYmxlIgorU1VCU1lTVEVNPT0iYmxvY2siLCBTVUJTWVNURU1TPT0idXNifGllZWUxMzk0fG1tY3xwY21jaWEiLCBHUk9VUD0iZmxvcHB5IgorCisjIElERSBkZXZpY2VzCitLRVJORUw9PSJoZFthLXpdfHBjZFswLTldKiIsIAkJCURSSVZFUlM9PSJpZGUtY2Ryb218cGNkIiwgXAorCUlNUE9SVHtwcm9ncmFtfT0iY2Ryb21faWQgLS1leHBvcnQgJHRlbXBub2RlIgorRU5We0lEX0NEUk9NfT09Ij8qIiwJCQkJR1JPVVA9ImNkcm9tIgorS0VSTkVMPT0iaHRbMC05XSoiLCAJCQkJR1JPVVA9InRhcGUiCitLRVJORUw9PSJuaHRbMC05XSoiLCAJCQkJR1JPVVA9InRhcGUiCisKKyMgU0NTSSBkZXZpY2VzCitLRVJORUw9PSJzclswLTldKiIsIElNUE9SVHtwcm9ncmFtfT0iY2Ryb21faWQgLS1leHBvcnQgJHRlbXBub2RlIgorU1VCU1lTVEVNUz09InNjc2kiLCBBVFRSU3t0eXBlfT09IjEiLAkJCQlHUk9VUD0idGFwZSIKK1NVQlNZU1RFTVM9PSJzY3NpIiwgQVRUUlN7dHlwZX09PSIzIiwgQVRUUlN7dmVuZG9yfT09IkhQIiwJR1JPVVA9InNjYW5uZXIiCitTVUJTWVNURU1TPT0ic2NzaSIsIEFUVFJTe3R5cGV9PT0iMyIsIEFUVFJTe3ZlbmRvcn09PSJFcHNvbiIsCUdST1VQPSJzY2FubmVyIgorU1VCU1lTVEVNUz09InNjc2kiLCBBVFRSU3t0eXBlfT09IjMiLCBBVFRSU3t2ZW5kb3J9PT0iRVBTT04iLAlHUk9VUD0ic2Nhbm5lciIKK1NVQlNZU1RFTVM9PSJzY3NpIiwgQVRUUlN7dHlwZX09PSI0IiwJCQkJR1JPVVA9ImNkcm9tIgorU1VCU1lTVEVNUz09InNjc2kiLCBBVFRSU3t0eXBlfT09IjUiLAkJCQlHUk9VUD0iY2Ryb20iCitTVUJTWVNURU1TPT0ic2NzaSIsIEFUVFJTe3R5cGV9PT0iNiIsCQkJCUdST1VQPSJzY2FubmVyIgorU1VCU1lTVEVNUz09InNjc2kiLCBBVFRSU3t0eXBlfT09IjgiLAkJCQlHUk9VUD0idGFwZSIKKworIyBVU0IgZGV2aWNlcworS0VSTkVMPT0ibGVnb3VzYnRvd2VyKiIsCU1PREU9IjA2NjYiCitLRVJORUw9PSJscFswLTldKiIsIFNVQlNZU1RFTVM9PSJ1c2IiLAkJR1JPVVA9ImxwIgorCisjIHVzYmZzLWxpa2UgZGV2aWNlcworU1VCU1lTVEVNPT0idXNiIiwgRU5We0RFVlRZUEV9PT0idXNiX2RldmljZSIsIFwKKwkJCQlNT0RFPSIwNjY0IgorCisjIGlSaXZlciBtdXNpYyBwbGF5ZXJzCitTVUJTWVNURU09PSJ1c2IiLCBFTlZ7REVWVFlQRX09PSJ1c2JfZGV2aWNlIiwJR1JPVVA9InBsdWdkZXYiLCBcCisJQVRUUlN7aWRWZW5kb3J9PT0iNDEwMiIsIEFUVFJTe2lkUHJvZHVjdH09PSIxMFswMV1bMTM1Nzg5XSIKKworIyBzZXJpYWwgZGV2aWNlcworU1VCU1lTVEVNPT0idHR5IiwJCQkJR1JPVVA9ImRpYWxvdXQiCitTVUJTWVNURU09PSJjYXBpIiwJCQkJR1JPVVA9ImRpYWxvdXQiCitTVUJTWVNURU09PSJzbGFtciIsCQkJCUdST1VQPSJkaWFsb3V0IgorU1VCU1lTVEVNPT0iemFwdGVsIiwJCQkJR1JPVVA9ImRpYWxvdXQiCisKKyMgdmMgZGV2aWNlcyAoYWxsIG1lbWJlcnMgb2YgdGhlIHR0eSBzdWJzeXN0ZW0pCitLRVJORUw9PSJwdG14IiwJCQlNT0RFPSIwNjY2IiwJR1JPVVA9InJvb3QiCitLRVJORUw9PSJjb25zb2xlIiwJCU1PREU9IjA2MDAiLAlHUk9VUD0icm9vdCIKK0tFUk5FTD09InR0eSIsCQkJTU9ERT0iMDY2NiIsCUdST1VQPSJyb290IgorS0VSTkVMPT0idHR5WzAtOV0qIiwJCQkJR1JPVVA9InJvb3QiCitLRVJORUw9PSJwdHkqIiwJCQlNT0RFPSIwNjY2IiwJR1JPVVA9InR0eSIKKworIyB2aWRlbyBkZXZpY2VzCitTVUJTWVNURU09PSJ2aWRlbzRsaW51eCIsCQkJR1JPVVA9InZpZGVvIgorU1VCU1lTVEVNPT0iZHJtIiwJCQkJR1JPVVA9InZpZGVvIgorU1VCU1lTVEVNPT0iZHZiIiwJCQkJR1JPVVA9InZpZGVvIgorU1VCU1lTVEVNPT0iZW04MzAwIiwJCQkJR1JPVVA9InZpZGVvIgorU1VCU1lTVEVNPT0iZ3JhcGhpY3MiLAkJCQlHUk9VUD0idmlkZW8iCitTVUJTWVNURU09PSJudmlkaWEiLAkJCQlHUk9VUD0idmlkZW8iCisKKyMgbWlzYyBkZXZpY2VzCitLRVJORUw9PSJyYW5kb20iLAkJTU9ERT0iMDY2NiIKK0tFUk5FTD09InVyYW5kb20iLAkJTU9ERT0iMDY2NiIKK0tFUk5FTD09Im1lbSIsCQkJTU9ERT0iMDY0MCIsCUdST1VQPSJrbWVtIgorS0VSTkVMPT0ia21lbSIsCQkJTU9ERT0iMDY0MCIsCUdST1VQPSJrbWVtIgorS0VSTkVMPT0icG9ydCIsCQkJTU9ERT0iMDY0MCIsCUdST1VQPSJrbWVtIgorS0VSTkVMPT0iZnVsbCIsCQkJTU9ERT0iMDY2NiIKK0tFUk5FTD09Im51bGwiLAkJCU1PREU9IjA2NjYiCitLRVJORUw9PSJ6ZXJvIiwJCQlNT0RFPSIwNjY2IgorS0VSTkVMPT0iaW5vdGlmeSIsCQlNT0RFPSIwNjY2IgorS0VSTkVMPT0ic2dpX2ZldGNob3AiLAkJTU9ERT0iMDY2NiIKK0tFUk5FTD09InNvbnlwaSIsCQlNT0RFPSIwNjY2IgorS0VSTkVMPT0iYWdwZ2FydCIsCQkJCUdST1VQPSJ2aWRlbyIKK0tFUk5FTD09Im52cmFtIiwJCQkJR1JPVVA9Im52cmFtIgorS0VSTkVMPT0icnRjfHJ0Y1swLTldKiIsCQkJR1JPVVA9ImF1ZGlvIgorS0VSTkVMPT0idHBtKiIsCQkJTU9ERT0iMDYwMCIsCU9XTkVSPSJ0c3MiLCBHUk9VUD0idHNzIgorS0VSTkVMPT0iZnVzZSIsCQkJCQlHUk9VUD0iZnVzZSIKK0tFUk5FTD09ImtxZW11IiwJCU1PREU9IjA2NjYiCitLRVJORUw9PSJrdm0iLAkJCQkJR1JPVVA9Imt2bSIKK0tFUk5FTD09InR1biIsCQkJTU9ERT0iMDY2NiIsCisKK0tFUk5FTD09ImNkZW11WzAtOV0qIiwJCQkJR1JPVVA9ImNkcm9tIgorS0VSTkVMPT0icGt0Y2R2ZFswLTldKiIsCQkJR1JPVVA9ImNkcm9tIgorS0VSTkVMPT0icGt0Y2R2ZCIsCQlNT0RFPSIwNjQ0IgorCitLRVJORUw9PSJ1dmVyYnMqIiwJCQkJR1JPVVA9InJkbWEiCitLRVJORUw9PSJ1Y20qIiwJCQkJCUdST1VQPSJyZG1hIgorS0VSTkVMPT0icmRtYV91Y20iLAkJCQlHUk9VUD0icmRtYSIKKworIyBwcmludGVycyBhbmQgcGFyYWxsZWwgZGV2aWNlcworU1VCU1lTVEVNPT0icHJpbnRlciIsCQkJCUdST1VQPSJscCIKK1NVQlNZU1RFTT09InBwZGV2IiwJCQkJR1JPVVA9ImxwIgorS0VSTkVMPT0iaXJscHQqIiwJCQkJR1JPVVA9ImxwIgorS0VSTkVMPT0icHRbMC05XSoiLAkJCQlHUk9VUD0idGFwZSIKK0tFUk5FTD09InBodFswLTldKiIsCQkJCUdST1VQPSJ0YXBlIgorCisjIHNvdW5kIGRldmljZXMKK1NVQlNZU1RFTT09InNvdW5kIiwJCQkJR1JPVVA9ImF1ZGlvIgorCisjIGllZWUxMzk0IGRldmljZXMgICAgICAgCitLRVJORUw9PSJyYXcxMzk0IiwJCQkJR1JPVVA9ImRpc2siCitLRVJORUw9PSJkdjEzOTQqIiwJCQkJR1JPVVA9InZpZGVvIgorS0VSTkVMPT0idmlkZW8xMzk0KiIsCQkJCUdST1VQPSJ2aWRlbyIKKworIyBpbnB1dCBkZXZpY2VzCitLRVJORUw9PSJldmVudFswLTldKiIsIEFUVFJTe25hbWV9PT0iKmR2Yip8KkRWQip8KiBJUiAqIiBcCisJCQkJTU9ERT0iMDY2NCIsCUdST1VQPSJ2aWRlbyIKK0tFUk5FTD09ImpzWzAtOV0qIiwJCU1PREU9IjA2NjQiCitLRVJORUw9PSJsaXJjWzAtOV0qIiwJCQkJR1JPVVA9InZpZGVvIgorCisjIEFPRSBjaGFyYWN0ZXIgZGV2aWNlcworU1VCU1lTVEVNPT0iYW9lIiwJCU1PREU9IjAyMjAiLAlHUk9VUD0iZGlzayIKK1NVQlNZU1RFTT09ImFvZSIsIEtFUk5FTD09ImVyciIsIE1PREU9IjA0NDAiCisKK0xBQkVMPSJwZXJtaXNzaW9uc19lbmQiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTM5ODA2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCisKK3RhciAtQyB0ZXN0LyAteEpmIHRlc3Qvc3lzLnRhci54egorbWFrZSAtayBjaGVjay1URVNUUworbWFrZSB0ZXN0LXN5cy1kaXN0Y2xlYW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3J1bi5ydWxlcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3J1bi5ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWQ3MTM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvcnVuLnJ1bGVzCkBAIC0wLDAgKzEsMTQgQEAKKyMgZGVidWdnaW5nIG1vbml0b3IKK1JVTis9InNvY2tldDovb3JnL2tlcm5lbC91ZGV2L21vbml0b3IiCisKKyMgcnVuIGEgY29tbWFuZCBvbiByZW1vdmUgZXZlbnRzCitBQ1RJT049PSJyZW1vdmUiLCBFTlZ7UkVNT1ZFX0NNRH0hPSIiLCBSVU4rPSIkZW52e1JFTU9WRV9DTUR9IgorCisjIGlnbm9yZSB0aGUgZXZlbnRzIGdlbmVyYXRlZCBieSB2aXJ0dWFsIGNvbnNvbGVzCitLRVJORUw9PSJwdG14IiwJCU9QVElPTlMrPSJsYXN0X3J1bGUiCitLRVJORUw9PSJjb25zb2xlIiwJT1BUSU9OUys9Imxhc3RfcnVsZSIKK0tFUk5FTD09InR0eSIJLAlPUFRJT05TKz0ibGFzdF9ydWxlIgorS0VSTkVMPT0idHR5WzAtOV0qIiwJT1BUSU9OUys9Imxhc3RfcnVsZSIKK0tFUk5FTD09InB0eSoiLAkJT1BUSU9OUys9Imxhc3RfcnVsZSIKK1NVQlNZU1RFTT09InZjIiwJT1BUSU9OUys9Imxhc3RfcnVsZSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvdWRldi1jYWNoZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3VkZXYtY2FjaGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNmZmYxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3VkZXYtY2FjaGUKQEAgLTAsMCArMSw3NSBAQAorIyEvYmluL3NoIC1lCisKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHVkZXYtY2FjaGUKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgIG1vdW50YWxsCisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IGNhY2hlIC9kZXYgdG8gc3BlZWR1cCB0aGUgdWRldiBuZXh0IGJvb3QKKyMjIyBFTkQgSU5JVCBJTkZPCisKK2V4cG9ydCBUWj0vZXRjL2xvY2FsdGltZQorCitbIC1yIC9wcm9jL21vdW50cyBdIHx8IGV4aXQgMQorWyAteCBAVURFVkRAIF0gfHwgZXhpdCAxCitbIC1kIC9zeXMvY2xhc3MgXSB8fCBleGl0IDEKKworWyAtZiAvZXRjL2RlZmF1bHQvcmNTIF0gJiYgLiAvZXRjL2RlZmF1bHQvcmNTCitERVZDQUNIRV9UTVA9Ii9kZXYvc2htL3VkZXYtY2FjaGUtdG1wLnRhciIKK1NZU0NPTkZfQ0FDSEVEPSIvZXRjL3VkZXYvY2FjaGUuZGF0YSIKK1NZU0NPTkZfVE1QPSIvZGV2L3NobS91ZGV2LmNhY2hlIgorREVWQ0FDSEVfUkVHRU49Ii9kZXYvc2htL3VkZXYtcmVnZW4iICMgY3JlYXRlIHRvIHJlcXVlc3QgY2FjaGUgcmVnZW4KKworIyBBIGxpc3Qgb2YgZmlsZXMgd2hpY2ggYXJlIHVzZWQgYXMgYSBjcml0ZXJpYSB0byBqdWRnZSB3aGV0aGVyIHRoZSB1ZGV2IGNhY2hlIGNvdWxkIGJlIHJldXNlZC4KK0NNUF9GSUxFX0xJU1Q9Ii9wcm9jL3ZlcnNpb24gL3Byb2MvY21kbGluZSAvcHJvYy9kZXZpY2VzIgorWyAtZiAvcHJvYy9hdGFncyBdICYmIENNUF9GSUxFX0xJU1Q9IiRDTVBfRklMRV9MSVNUIC9wcm9jL2F0YWdzIgorCisjIExpc3Qgb2YgZmlsZXMgd2hvc2UgbWV0YWRhdGEgKHNpemUvbXRpbWUvbmFtZSkgd2lsbCBiZSBpbmNsdWRlZCBpbiBjYWNoZWQKKyMgc3lzdGVtIHN0YXRlLgorTUVUQV9GSUxFX0xJU1Q9ImxpYi91ZGV2L3J1bGVzLmQvKiBldGMvdWRldi9ydWxlcy5kLyoiCisKKyMgQ29tbWFuZCB0byBjb21wdXRlIHN5c3RlbSBjb25maWd1cmF0aW9uLgorc3lzY29uZl9jbWQgKCkgeworCWNhdCAtLSAkQ01QX0ZJTEVfTElTVAorCXN0YXQgLWMgJyVzICVZICVuJyAtLSAkTUVUQV9GSUxFX0xJU1QgfCBhd2sgLUYvICd7cHJpbnQgJDEgIiAiICRORjt9JworfQorCitbIC1mIC9ldGMvZGVmYXVsdC91ZGV2LWNhY2hlIF0gJiYgLiAvZXRjL2RlZmF1bHQvdWRldi1jYWNoZQorCitpZiBbICIkUk9PVEZTX1JFQURfT05MWSIgPSAieWVzIiBdOyB0aGVuCisgICAgWyAiJFZFUkJPU0UiICE9ICJubyIgXSAmJiBlY2hvICJ1ZGV2LWNhY2hlOiByZWFkLW9ubHkgcm9vdGZzLCBza2lwIGdlbmVyYXRpbmcgdWRldi1jYWNoZSIKKyAgICBleGl0IDAKK2ZpCisKK1sgIiRERVZDQUNIRSIgIT0gIiIgXSB8fCBleGl0IDAKK1sgIiR7VkVSQk9TRX0iID09ICJubyIgXSB8fCBlY2hvIC1uICJ1ZGV2LWNhY2hlOiBjaGVja2luZyBmb3IgJHtERVZDQUNIRV9SRUdFTn0uLi4gIgoraWYgISBbIC1lICIkREVWQ0FDSEVfUkVHRU4iIF07IHRoZW4KKwlbICIke1ZFUkJPU0V9IiA9PSAibm8iIF0gfHwgZWNobyAibm90IGZvdW5kLiIKKwlleGl0IDAKK2ZpCitbICIke1ZFUkJPU0V9IiA9PSAibm8iIF0gfHwgZWNobyAiZm91bmQuIgorZWNobyAiUG9wdWxhdGluZyBkZXYgY2FjaGUiCisKK2Vycl9jbGVhbnVwICgpIHsKKyAgICAgICAgZWNobyAidWRldi1jYWNoZTogdXBkYXRlIGZhaWxlZCEiCisgICAgICAgIHVkZXZhZG0gY29udHJvbCAtLXN0YXJ0LWV4ZWMtcXVldWUKKwlybSAtZiAtLSAiJFNZU0NPTkZfVE1QIiAiJERFVkNBQ0hFX1RNUCIgIiRERVZDQUNIRSIgIiRTWVNDT05GX0NBQ0hFRCIKK30KKworKAorCXNldCAtZQorCXRyYXAgJ2Vycl9jbGVhbnVwJyBFWElUCisJdWRldmFkbSBjb250cm9sIC0tc3RvcC1leGVjLXF1ZXVlCisJc3lzY29uZl9jbWQgPiAiJFNZU0NPTkZfVE1QIgorCWZpbmQgL2RldiAteGRldiBcKCAtdHlwZSBiIC1vIC10eXBlIGMgLW8gLXR5cGUgbCBcKSB8IGN1dCAtYyAyLSBcCisJCXwgeGFyZ3MgdGFyIGNmICIke0RFVkNBQ0hFX1RNUH0iCisJZ3ppcCA8ICIke0RFVkNBQ0hFX1RNUH0iID4gIiRERVZDQUNIRSIKKwlybSAtZiAiJHtERVZDQUNIRV9UTVB9IgorCW12ICIkU1lTQ09ORl9UTVAiICIkU1lTQ09ORl9DQUNIRUQiCisJdWRldmFkbSBjb250cm9sIC0tc3RhcnQtZXhlYy1xdWV1ZQorCXJtIC1mICIkREVWQ0FDSEVfUkVHRU4iCisJdHJhcCAtIEVYSVQKKykgJgorCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3VkZXYtY2FjaGUuZGVmYXVsdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3VkZXYtY2FjaGUuZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2I3MzI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvdWRldi1jYWNoZS5kZWZhdWx0CkBAIC0wLDAgKzEsNSBAQAorIyBEZWZhdWx0IGZvciAvZXRjL2luaXQuZC91ZGV2CisKKyMgQ29tbWVudCB0aGlzIG91dCB0byBkaXNhYmxlIGRldmljZSBjYWNoZQorREVWQ0FDSEU9Ii9ldGMvdWRldi1jYWNoZS50YXIuZ3oiCitQUk9CRV9QTEFURk9STV9CVVM9InllcyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3VkZXYucnVsZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi91ZGV2LnJ1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOWQ0YTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi91ZGV2LnJ1bGVzCkBAIC0wLDAgKzEsMTE2IEBACisjIFRoZXJlIGFyZSBhIG51bWJlciBvZiBtb2RpZmllcnMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSB1c2VkIGluIHNvbWUKKyMgb2YgdGhlIGRpZmZlcmVudCBmaWVsZHMuIFRoZXkgcHJvdmlkZSB0aGUgZm9sbG93aW5nIHN1YnNpdHV0aW9uczoKKyMKKyMgJW4gdGhlICJrZXJuZWwgbnVtYmVyIiBvZiB0aGUgZGV2aWNlLgorIyAgICBGb3IgZXhhbXBsZSwgJ3NkYTMnIGhhcyBhICJrZXJuZWwgbnVtYmVyIiBvZiAnMycKKyMgJWUgdGhlIHNtYWxsZXN0IG51bWJlciBmb3IgdGhhdCBuYW1lIHdoaWNoIGRvZXMgbm90IG1hdGNoZXMgYW4gZXhpc3Rpbmcgbm9kZQorIyAlayB0aGUga2VybmVsIG5hbWUgZm9yIHRoZSBkZXZpY2UKKyMgJU0gdGhlIGtlcm5lbCBtYWpvciBudW1iZXIgZm9yIHRoZSBkZXZpY2UKKyMgJW0gdGhlIGtlcm5lbCBtaW5vciBudW1iZXIgZm9yIHRoZSBkZXZpY2UKKyMgJWIgdGhlIGJ1cyBpZCBmb3IgdGhlIGRldmljZQorIyAlYyB0aGUgc3RyaW5nIHJldHVybmVkIGJ5IHRoZSBQUk9HUkFNCisjICVze2ZpbGVuYW1lfSB0aGUgY29udGVudCBvZiBhIHN5c2ZzIGF0dHJpYnV0ZQorIyAlJSB0aGUgJyUnIGNoYXIgaXRzZWxmCisjCisKKyMgd29ya2Fyb3VuZCBmb3IgZGV2aWNlcyB3aGljaCBkbyBub3QgcmVwb3J0IG1lZGlhIGNoYW5nZXMKK1NVQlNZU1RFTVM9PSJpZGUiLCBLRVJORUw9PSJoZFthLXpdIiwgQVRUUntyZW1vdmFibGV9PT0iMSIsIFwKKwlFTlZ7SURfTU9ERUx9PT0iSU9NRUdBX1pJUCoiLAlOQU1FPSIlayIsIE9QVElPTlMrPSJhbGxfcGFydGl0aW9ucyIKK1NVQlNZU1RFTVM9PSJpZGUiLCBLRVJORUw9PSJoZFthLXpdIiwgQVRUUlN7bWVkaWF9PT0iZmxvcHB5IiwgXAorCU9QVElPTlMrPSJhbGxfcGFydGl0aW9ucyIKKworIyBTQ1NJIGRldmljZXMKK1NVQlNZU1RFTVM9PSJzY3NpIiwgS0VSTkVMPT0ic3JbMC05XSoiLAlOQU1FPSJzY2QlbiIsIFNZTUxJTksrPSJzciVuIgorCisjIFVTQiBkZXZpY2VzCitTVUJTWVNURU1TPT0idXNiIiwgS0VSTkVMPT0iYXVlclswLTldKiIsCU5BTUU9InVzYi8layIKK1NVQlNZU1RFTVM9PSJ1c2IiLCBLRVJORUw9PSJjcGFkWzAtOV0qIiwJTkFNRT0idXNiLyVrIgorU1VCU1lTVEVNUz09InVzYiIsIEtFUk5FTD09ImRhYnVzYioiLAkJTkFNRT0idXNiLyVrIgorU1VCU1lTVEVNUz09InVzYiIsIEtFUk5FTD09ImhpZGRldioiLAkJTkFNRT0idXNiLyVrIgorU1VCU1lTVEVNUz09InVzYiIsIEtFUk5FTD09ImxlZ291c2J0b3dlcioiLAlOQU1FPSJ1c2IvJWsiCitTVUJTWVNURU1TPT0idXNiIiwgS0VSTkVMPT0ibHBbMC05XSoiLAkJTkFNRT0idXNiLyVrIgorU1VCU1lTVEVNUz09InVzYiIsIEtFUk5FTD09InR0eVVTQioiLCBcCisJQVRUUlN7cHJvZHVjdH09PSJQYWxtIEhhbmRoZWxkKnxIYW5kc3ByaW5nIFZpc29yfHBhbG1PbmUgSGFuZGhlbGQiLCBcCisJCQkJCVNZTUxJTksrPSJwaWxvdCIKKworIyB1c2Jmcy1saWtlIGRldmljZXMKK1NVQlNZU1RFTT09InVzYl9kZXZpY2UiLAlQUk9HUkFNPSIvYmluL3NoIC1jICdLPSVrOyBLPSQke0sjdXNiZGV2fTsgcHJpbnRmIGJ1cy91c2IvJSUwM2kvJSUwM2kgJCR7SyUlJSUuKn0gJCR7SyMqLn0nIiwgQUNUSU9OPT0iYWRkIiwgXAorCQkJCU5BTUU9IiVjIgorU1VCU1lTVEVNPT0idXNiIiwgRU5We0RFVlRZUEV9PT0idXNiX2RldmljZSIsCU5BTUU9ImJ1cy91c2IvJGVudntCVVNOVU19LyRlbnZ7REVWTlVNfSIKKworIyBzZXJpYWwgZGV2aWNlcworS0VSTkVMPT0iY2FwaSIsCQkJTkFNRT0iY2FwaTIwIiwgU1lNTElOSys9ImlzZG4vY2FwaTIwIgorS0VSTkVMPT0iY2FwaVswLTldKiIsCQlOQU1FPSJjYXBpLyVuIgorCisjIHZpZGVvIGRldmljZXMKK0tFUk5FTD09ImR2YioiLAkJCVBST0dSQU09Ii9iaW4vc2ggLWMgJ0s9JWs7IEs9JCR7SyNkdmJ9OyBwcmludGYgZHZiL2FkYXB0ZXIlJWkvJSVzICQke0slJSUlLip9ICQke0sjKi59IiwgQUNUSU9OPT0iYWRkIiwgXAorCQkJCU5BTUU9IiVjIgorS0VSTkVMPT0iY2FyZFswLTldKiIsCQlOQU1FPSJkcmkvJWsiCisKKyMgbWlzYyBkZXZpY2VzCitLRVJORUw9PSJod19yYW5kb20iLAkJTkFNRT0iaHdybmciCitLRVJORUw9PSJ0dW4iLAkJCU5BTUU9Im5ldC8layIKK0tFUk5FTD09ImV2dGNobiIsCQlOQU1FPSJ4ZW4vJWsiCisKK0tFUk5FTD09ImNkZW11WzAtOV0qIiwJCU5BTUU9ImNkZW11LyVuIgorS0VSTkVMPT0icGt0Y2R2ZFswLTldKiIsCU5BTUU9InBrdGNkdmQvJW4iCitLRVJORUw9PSJwa3RjZHZkIiwJCU5BTUU9InBrdGNkdmQvY29udHJvbCIKKworS0VSTkVMPT0iY3B1WzAtOV0qIiwJCU5BTUU9ImNwdS8lbi9jcHVpZCIKK0tFUk5FTD09Im1zclswLTldKiIsCQlOQU1FPSJjcHUvJW4vbXNyIgorS0VSTkVMPT0ibWljcm9jb2RlIiwJCU5BTUU9ImNwdS9taWNyb2NvZGUiCisKK0tFUk5FTD09InVtYWQqIiwJCU5BTUU9ImluZmluaWJhbmQvJWsiCitLRVJORUw9PSJpc3NtKiIsCQlOQU1FPSJpbmZpbmliYW5kLyVrIgorS0VSTkVMPT0idXZlcmJzKiIsCQlOQU1FPSJpbmZpbmliYW5kLyVrIgorS0VSTkVMPT0idWNtKiIsCQkJTkFNRT0iaW5maW5pYmFuZC8layIKK0tFUk5FTD09InJkbWFfdWNtIiwJCU5BTUU9ImluZmluaWJhbmQvJWsiCisKKyMgQUxTQSBkZXZpY2VzCitLRVJORUw9PSJjb250cm9sQ1swLTldKiIsCU5BTUU9InNuZC8layIKK0tFUk5FTD09Imh3Q1tEMC05XSoiLAkJTkFNRT0ic25kLyVrIgorS0VSTkVMPT0icGNtQ1tEMC05Y3BdKiIsCU5BTUU9InNuZC8layIKK0tFUk5FTD09Im1pZGlDW0QwLTldKiIsCQlOQU1FPSJzbmQvJWsiCitLRVJORUw9PSJ0aW1lciIsCQlOQU1FPSJzbmQvJWsiCitLRVJORUw9PSJzZXEiLAkJCU5BTUU9InNuZC8layIKKworIyBpZWVlMTM5NCBkZXZpY2VzICAgICAgIAorS0VSTkVMPT0iZHYxMzk0KiIsCQlOQU1FPSJkdjEzOTQvJW4iCitLRVJORUw9PSJ2aWRlbzEzOTQqIiwJCU5BTUU9InZpZGVvMTM5NC8lbiIKKworIyBpbnB1dCBkZXZpY2VzCitLRVJORUw9PSJtaWNlIiwJCQlOQU1FPSJpbnB1dC8layIKK0tFUk5FTD09Im1vdXNlWzAtOV0qIiwJCU5BTUU9ImlucHV0LyVrIgorS0VSTkVMPT0iZXZlbnRbMC05XSoiLAkJTkFNRT0iaW5wdXQvJWsiCitLRVJORUw9PSJqc1swLTldKiIsCQlOQU1FPSJpbnB1dC8layIKK0tFUk5FTD09InRzWzAtOV0qIiwJCU5BTUU9ImlucHV0LyVrIgorS0VSTkVMPT0idWlucHV0IiwJCU5BTUU9ImlucHV0LyVrIgorCisjIFphcHRlbAorS0VSTkVMPT0iemFwY3RsIiwJCU5BTUU9InphcC9jdGwiCitLRVJORUw9PSJ6YXB0aW1lciIsCQlOQU1FPSJ6YXAvdGltZXIiCitLRVJORUw9PSJ6YXBjaGFubmVsIiwJCU5BTUU9InphcC9jaGFubmVsIgorS0VSTkVMPT0iemFwcHNldWRvIiwJCU5BTUU9InphcC9wc2V1ZG8iCitLRVJORUw9PSJ6YXBbMC05XSoiLAkJTkFNRT0iemFwLyVuIgorCisjIEFPRSBjaGFyYWN0ZXIgZGV2aWNlcworU1VCU1lTVEVNPT0iYW9lIiwgS0VSTkVMPT0iZGlzY292ZXIiLAlOQU1FPSJldGhlcmQvJWsiCitTVUJTWVNURU09PSJhb2UiLCBLRVJORUw9PSJlcnIiLAlOQU1FPSJldGhlcmQvJWsiCitTVUJTWVNURU09PSJhb2UiLCBLRVJORUw9PSJpbnRlcmZhY2VzIiwJTkFNRT0iZXRoZXJkLyVrIgorU1VCU1lTVEVNPT0iYW9lIiwgS0VSTkVMPT0icmV2YWxpZGF0ZSIsCU5BTUU9ImV0aGVyZC8layIKKworIyBkZXZpY2UgbWFwcGVyIGNyZWF0ZXMgaXRzIG93biBkZXZpY2Ugbm9kZXMsIHNvIGlnbm9yZSB0aGVzZQorS0VSTkVMPT0iZG0tWzAtOV0qIiwJCU9QVElPTlMrPSJpZ25vcmVfZGV2aWNlIgorS0VSTkVMPT0iZGV2aWNlLW1hcHBlciIsCU5BTUU9Im1hcHBlci9jb250cm9sIgorCitLRVJORUw9PSJyZmNvbW1bMC05XSoiLCBOQU1FPSIlayIsIEdST1VQPSJ1c2VycyIsIE1PREU9IjA2NjAiCisKKyMgRmlybXdhcmUgSGVscGVyCitBQ1RJT049PSJhZGQiLCBTVUJTWVNURU09PSJmaXJtd2FyZSIsIFJVTis9Ii9saWIvdWRldi9maXJtd2FyZS5zaCIKKworIyBTYW1zdW5nIFVBUlRTCitLRVJORUw9PSJzM2MyNDEwX3NlcmlhbFswLTldIiwgICBOQU1FPSJ0dHlTQUMlbiIKKworIyBNWEMgVUFSVHMKK0tFUk5FTD09InR0eW14Y1swLTRdIiwgICBOQU1FPSJ0dHlteGMlbiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXZfMTgyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXZfMTgyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMTYzNTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldl8xODIuYmIKQEAgLTAsMCArMSw5IEBACitpbmNsdWRlIHVkZXYuaW5jCisKK1BSID0gInI5IgorCisjIG1vZHVsZS1pbml0LXRvb2xzIGZyb20ga21vZF9naXQgd2lsbCBwcm92aWRlIGxpYmttb2QgcnVudGltZQorREVQRU5EUyArPSAibW9kdWxlLWluaXQtdG9vbHMiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxYjk2NDQ1NjE3N2ZiZjQ4MDIzZGZlZTdkYjNhNzA4ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3ODU3ZWQxOWZhZmQ4ZjNjYThkZTQxMDE5NGU4YzczMzZlOWViOGEyMDYyNmVhOGE0YmE2NDQ5YjAxN2ZhYmE0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZC9hZGQtdmVyYm9zZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXBkYXRlLXJjLmQvdXBkYXRlLXJjLmQvYWRkLXZlcmJvc2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI0NDNmZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXBkYXRlLXJjLmQvdXBkYXRlLXJjLmQvYWRkLXZlcmJvc2UucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSB1cGRhdGUtcmMuZC91cGRhdGUtcmMuZC5vcmcJMjAwNS0wMS0wMyAwMDozMDo0Ny4wMDAwMDAwMDAgKzAyMDAKKysrKyB1cGRhdGUtcmMuZC91cGRhdGUtcmMuZAkyMDA3LTEyLTAxIDE5OjQxOjA4LjAwMDAwMDAwMCArMDIwMAorQEAgLTE5LDYgKzE5LDcgQEAKKyBub3RyZWFsbHk9MAorIGZvcmNlPTAKKyBkb3N0YXJ0PTAKKyt2ZXJib3NlPTAKKyAKKyB1c2FnZSgpCisgeworQEAgLTI4LDYgKzI5LDcgQEAKKyAgICAgICAgdXBkYXRlLXJjLmQgWy1uXSBbLXIgPHJvb3Q+XSBbLXNdIDxiYXNlbmFtZT4gc3RhcnR8c3RvcCBOTiBydW5sdmwgW3J1bmx2bF0gWy4uLl0gLgorIAkJLW46IG5vdCByZWFsbHkKKyAJCS1mOiBmb3JjZQorKwkJLXY6IHZlcmJvc2UKKyAJCS1yOiBhbHRlcm5hdGUgcm9vdCBwYXRoIChkZWZhdWx0IGlzIC8pCisgCQktczogaW52b2tlIHN0YXJ0IG1ldGhvZHMgaWYgYXBwcm9wcmlhdGUgdG8gY3VycmVudCBydW5sZXZlbAorIEVPRgorQEAgLTY5LDcgKzcxLDcgQEAKKyAJbGV2PWBlY2hvICQyIHwgY3V0IC1kLyAtZjFgCisgCW5uPWBlY2hvICQyIHwgY3V0IC1kLyAtZjJgCisgCWZuPSIke2V0Y2R9JHtsZXZ9LmQvJHtzdGFydHN0b3B9JHtubn0ke2JufSIKKy0JZWNobyAiICAkZm4gLT4gLi4vaW5pdC5kLyRibiIKKysJWyAkdmVyYm9zZSAtZXEgMSBdICYmIGVjaG8gIiAgJGZuIC0+IC4uL2luaXQuZC8kYm4iCisgCWlmIFsgJG5vdHJlYWxseSAtZXEgMCBdOyB0aGVuCisgCQlta2RpciAtcCBgZGlybmFtZSAkZm5gCisgIAkJbG4gLXMgLi4vaW5pdC5kLyRibiAkZm4KK0BAIC04OSw3ICs5MSw3IEBACisgCQlleGl0IDAKKyAJZmkKKyAKKy0JZWNobyAiIEFkZGluZyBzeXN0ZW0gc3RhcnR1cCBmb3IgJGluaXRkLyRibiAuLi4iCisrCWVjaG8gIiBBZGRpbmcgc3lzdGVtIHN0YXJ0dXAgZm9yICRpbml0ZC8kYm4uIgorIAorIAlmb3IgaSBpbiAkc3RhcnRsaW5rczsgZG8KKyAJCWRvbGluayBTICRpCitAQCAtMTA1LDYgKzEwNywxMCBAQAorIAkJCXNoaWZ0CisgCQkJY29udGludWUKKyAJCQk7OworKwkJLXYpCXZlcmJvc2U9MQorKwkJCXNoaWZ0CisrCQkJY29udGludWUKKysJCQk7OworIAkJLWYpCWZvcmNlPTEKKyAJCQlzaGlmdAorIAkJCWNvbnRpbnVlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kL2NoZWNrLWlmLXN5bWxpbmtzLWFyZS12YWxpZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXBkYXRlLXJjLmQvdXBkYXRlLXJjLmQvY2hlY2staWYtc3ltbGlua3MtYXJlLXZhbGlkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NTE3MWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kL2NoZWNrLWlmLXN5bWxpbmtzLWFyZS12YWxpZC5wYXRjaApAQCAtMCwwICsxLDU5IEBACitDaGVjayBpZiBzeW1saW5rcyBhcmUgdmFsaWQKKworV2hlbiB1c2luZyByb290IG9wdGlvbiBhbmQgJGluaXRkLyRibiBpcyBhIHN5bWxpbmssIHRoZSBzY3JpcHQgd291bGQgZmFpbCBiZWNhdXNlCit0aGUgc3ltbGluayBwb2ludHMgdG8gYSBwYXRoIG9uIHRhcmdldC4gRm9yIGV4YW1wbGU6CisKKy9wYXRoL3RvL3RhcmdldC9yb290ZnMvZXRjL2luaXQuZC9zeXNsb2cgLT4gL2V0Yy9pbml0LmQvc3lzbG9nLmJ1c3lib3gKKworSGVuY2UsIFsgLWYgL3BhdGgvdG8vdGFyZ2V0L3Jvb3Rmcy9ldGMvaW5pdC5kL3N5c2xvZyBdIGNvbmRpdGlvbiB3b3VsZCByZXR1cm4KK2ZhbHNlLgorCitUaGlzIHBhdGNoIGFkZHMgdGhlIHBvc2liaWxpdHkgdG8gY2hlY2sgd2hldGhlciB0aGUgZmlsZSB0aGUgc3ltbGluayBwb2ludHMgdG8KK2FjdHVhbGx5IGV4aXN0cyBpbiByb290ZnMgcGF0aCBhbmQgdGhlbiBjb250aW51ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IExhdXJlbnRpdSBQYWxjdSA8bGF1cmVudGl1LnBhbGN1QGludGVsLmNvbT4gCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorCitJbmRleDogZ2l0L3VwZGF0ZS1yYy5kCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvdXBkYXRlLXJjLmQKKysrKyBnaXQvdXBkYXRlLXJjLmQKK0BAIC0xNDcsMTMgKzE0NywzNCBAQCBmaQorIGJuPSQxCisgc2hpZnQKKyAKKytzbj0kaW5pdGQvJGJuCisraWYgWyAtTCAiJHNuIiAtYSAtbiAiJHJvb3QiIF07IHRoZW4KKysJaWYgd2hpY2ggcmVhZGxpbmsgPi9kZXYvbnVsbDsgdGhlbgorKwkJd2hpbGUgdHJ1ZTsgZG8KKysJCQlsaW5rc249IiQocmVhZGxpbmsgIiRzbiIpIgorKwkJCWlmIFsgLXogIiRsaW5rc24iIF07IHRoZW4KKysJCQkJYnJlYWsKKysJCQlmaQorKworKwkJCXNuPSIkbGlua3NuIgorKwkJCWNhc2UgIiRzbiIgaW4KKysJCQkJLyopIHNuPSIkcm9vdCRzbiIgOzsKKysJCQkJKikgIHNuPSIkaW5pdGQvJHNuIiA7OworKwkJCWVzYWMKKysJCWRvbmUKKysJZWxzZQorKwkJZWNobyAidXBkYXRlLXJjLmQ6IHJlYWRsaW5rIHRvb2wgbm90IHByZXNlbnQsIGNhbm5vdCBjaGVjayB3aGV0aGVyIFwKKysJCQkJJHNuIHN5bWxpbmsgcG9pbnRzIHRvIGEgdmFsaWQgZmlsZS4iID4mMgorKwlmaQorK2ZpCisrCisgaWYgWyAkMSAhPSAicmVtb3ZlIiBdOyB0aGVuCistCWlmIFsgISAtZiAiJGluaXRkLyRibiIgXTsgdGhlbgorKwlpZiBbICEgLWYgIiRzbiIgXTsgdGhlbgorIAkJZWNobyAidXBkYXRlLXJjLmQ6ICRpbml0ZC8kYm46IGZpbGUgZG9lcyBub3QgZXhpc3QiID4mMgorIAkJZXhpdCAxCisgCWZpCisgZWxzZQorLQlpZiBbIC1mICIkaW5pdGQvJGJuIiBdOyB0aGVuCisrCWlmIFsgLWYgIiRzbiIgXTsgdGhlbgorIAkJaWYgWyAkZm9yY2UgLWVxIDEgXTsgdGhlbgorIAkJCWVjaG8gInVwZGF0ZS1yYy5kOiAkaW5pdGQvJGJuIGV4aXN0cyBkdXJpbmcgcmMuZCBwdXJnZSAoY29udGludWluZykiID4mMgorIAkJZWxzZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZC9maXgtdG8taGFuZGxlLXByaW9yaXR5LW51bWJlcnMtY29ycmVjdGx5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZC9maXgtdG8taGFuZGxlLXByaW9yaXR5LW51bWJlcnMtY29ycmVjdGx5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YmMyMzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kL2ZpeC10by1oYW5kbGUtcHJpb3JpdHktbnVtYmVycy1jb3JyZWN0bHkucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0ZpeCB0byBoYW5kbGUgcHJpb3JpdHkgbnVtYmVycyBjb3JyZWN0bHkuCitQcmV2aW91c2x5LCBpZiB0aGUgcHJpb3JpdHkgbnVtYmVyIGlzICcwOCcgb3IgJzA5JywgZm9yIGV4YW1wbGUsCit0aGUgc2NyaXB0IGNhbm5vdCBoYW5kbGUgdGhlbSBjb3JyZWN0bHkgYXMgdGhlc2UgbnVtYmVycyBhcmUgdHJlYXRlZAorYXMgb2N0YWwgbnVtYmVycy4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgdXBkYXRlLXJjLmQgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS91cGRhdGUtcmMuZCBiL3VwZGF0ZS1yYy5kCitpbmRleCBlYzUwZDE1Li5jNzBiODU5IDEwMDY0NAorLS0tIGEvdXBkYXRlLXJjLmQKKysrKyBiL3VwZGF0ZS1yYy5kCitAQCAtMjA1LDcgKzIwNSw3IEBAIGNhc2UgJDEgaW4KKyAJCQkJZXhpdCAxCisgCQkJZmkKKyAJCQlzaGlmdAorLQkJCU5OPWBwcmludGYgJTAyZCAkMWAKKysJCQlOTj1gcHJpbnRmICUwMmQgJChleHByICQxICsgMClgCisgCQkJc2hpZnQKKyAJCQl3aGlsZSBbICJ4JDEiICE9ICJ4LiIgXTsgZG8KKyAJCQkJaWYgWyAkIyAtZXEgMCBdOyB0aGVuCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZF8wLjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kXzAuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTVjYjc4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZF8wLjcuYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJtYW5hZ2Ugc3ltbGlua3MgaW4gL2V0Yy9yY04uZCIKK0RFU0NSSVBUSU9OID0gInVwZGF0ZS1yYy5kIGlzIGEgdXRpbGl0aWVzIHRoYXQgYWxsb3dzIHRoZSBtYW5hZ2VtZW50IG9mIHN5bWxpbmtzIHRvIHRoZSBpbml0c2NyaXB0cyBpbiB0aGUgL2V0Yy9yY04uZCBkaXJlY3Rvcnkgc3RydWN0dXJlLiIKK1NFQ1RJT04gPSAiYmFzZSIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly91cGRhdGUtcmMuZDtiZWdpbmxpbmU9NTtlbmRsaW5lPTE1O21kNT0xNDhhNDgzMjFiMTBlYjM3YzFmYTNlZTAyYjk0MGE3NSIKKworUFIgPSAicjUiCisKKyMgUmV2aXNpb24gY29ycmVzcG9uZGluZyB0byB0YWcgdXBkYXRlLXJjLmRfMC43CitTUkNSRVYgPSAiZWNhNjgwZGRmMjhkMDI0OTU0ODk1ZjU5YTI0MWE2MjJkZDU3NWMxMSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3BoaWxiL3VwZGF0ZS1yYy5kLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtdmVyYm9zZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jaGVjay1pZi1zeW1saW5rcy1hcmUtdmFsaWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LXRvLWhhbmRsZS1wcmlvcml0eS1udW1iZXJzLWNvcnJlY3RseS5wYXRjaCBcCisgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGFsbGFyY2gKKworZG9fY29tcGlsZSgpIHsKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7U30vdXBkYXRlLXJjLmQgJHtEfSR7c2JpbmRpcn0vdXBkYXRlLXJjLmQKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQwNzJiYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4LmluYwpAQCAtMCwwICsxLDI2OCBAQAorU1VNTUFSWSA9ICJBIHN1aXRlIG9mIGJhc2ljIHN5c3RlbSBhZG1pbmlzdHJhdGlvbiB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJVdGlsLWxpbnV4IGluY2x1ZGVzIGEgc3VpdGUgb2YgYmFzaWMgc3lzdGVtIGFkbWluaXN0cmF0aW9uIHV0aWxpdGllcyBcCitjb21tb25seSBmb3VuZCBvbiBtb3N0IExpbnV4IHN5c3RlbXMuICBTb21lIG9mIHRoZSBtb3JlIGltcG9ydGFudCB1dGlsaXRpZXMgaW5jbHVkZSBcCitkaXNrIHBhcnRpdGlvbmluZywga2VybmVsIG1lc3NhZ2UgbWFuYWdlbWVudCwgZmlsZXN5c3RlbSBjcmVhdGlvbiwgYW5kIHN5c3RlbSBsb2dpbi4iCisKK1NFQ1RJT04gPSAiYmFzZSIKKworTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSsgJiBCU0QiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRS5saWNlbnNpbmc7bWQ1PTE3MTVmNWVlM2UwMTIwM2NhMWUxZTBiOWVlNjU5MThjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0RvY3VtZW50YXRpb24vbGljZW5zZXMvQ09QWUlORy5HUEx2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vRG9jdW1lbnRhdGlvbi9saWNlbnNlcy9DT1BZSU5HLkxHUEx2Mi4xO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9Eb2N1bWVudGF0aW9uL2xpY2Vuc2VzL0NPUFlJTkcuQlNELTM7bWQ1PTU4ZGNkODQ1MjY1MWZjOGIwN2QxZjY1Y2UwN2NhOGFmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0RvY3VtZW50YXRpb24vbGljZW5zZXMvQ09QWUlORy5VQ0I7bWQ1PTI2Mzg2MGY4OTY4ZDhiYWZhNTM5MmNhYjc0Mjg1MjYyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYnV1aWQvQ09QWUlORzttZDU9YjQ0MmZmYjc2MmNmOGQzZTlkZjFiOTllMGJiNGFmNzAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlibW91bnQvQ09QWUlORzttZDU9ZmI5M2YwMWQ0MzYxMDY5YzU2MTYzMjc3MDUzNzNiMTYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliYmxraWQvQ09QWUlORzttZDU9ZmI5M2YwMWQ0MzYxMDY5YzU2MTYzMjc3MDUzNzNiMTYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnIHN5c3RlbWQgdXBkYXRlLWFsdGVybmF0aXZlcyBweXRob24tZGlyCitERVBFTkRTID0gInpsaWIgbmN1cnNlcyIKK0RFUEVORFNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgbHpvLW5hdGl2ZSIKK0RFUEVORFNfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgbHpvLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzL3V0aWwtbGludXgvdiR7TUFKT1JfVkVSU0lPTn0vdXRpbC1saW51eC0ke1BWfS50YXIueHogXAorICAgICAgICAgICAiCisKK1BBQ0tBR0VTID0rICJ1dGlsLWxpbnV4LWFnZXR0eSB1dGlsLWxpbnV4LWZkaXNrIHV0aWwtbGludXgtY2ZkaXNrIHV0aWwtbGludXgtc2ZkaXNrIFwKKyAgICAgICAgICAgICB1dGlsLWxpbnV4LXN3YXBvbm9mZiB1dGlsLWxpbnV4LWxvc2V0dXAgdXRpbC1saW51eC11bW91bnQgXAorICAgICAgICAgICAgIHV0aWwtbGludXgtbW91bnQgdXRpbC1saW51eC1yZWFkcHJvZmlsZSB1dGlsLWxpbnV4LXV1aWRkIFwKKyAgICAgICAgICAgICB1dGlsLWxpbnV4LXV1aWRnZW4gdXRpbC1saW51eC1sc2NwdSB1dGlsLWxpbnV4LWZzY2sgdXRpbC1saW51eC1ibGtpZCBcCisgICAgICAgICAgICAgdXRpbC1saW51eC1ta2ZzIHV0aWwtbGludXgtbWNvb2tpZSB1dGlsLWxpbnV4LXJlc2V0IFwKKyAgICAgICAgICAgICB1dGlsLWxpbnV4LW1rZnMuY3JhbWZzIHV0aWwtbGludXgtZnNjay5jcmFtZnMgdXRpbC1saW51eC1mc3RyaW0gXAorICAgICAgICAgICAgIHV0aWwtbGludXgtcGFydHggJHtQTn0tYmFzaC1jb21wbGV0aW9uIHV0aWwtbGludXgtaHdjbG9jayBcCisgICAgICAgICAgICAgdXRpbC1saW51eC1maW5kZnMgdXRpbC1saW51eC1nZXRvcHQgdXRpbC1saW51eC1zdWxvZ2luIgorUEFDS0FHRVMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3B5bGlibW91bnQnLCAndXRpbC1saW51eC1weWxpYm1vdW50JywgJycsIGQpfSIKKworUEFDS0FHRVNfRFlOQU1JQyA9ICJedXRpbC1saW51eC1saWIuKiIKKworU0hBUkVEX0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtdXNlLXR0eS1ncm91cCBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1tYWtlaW5zdGFsbC1jaG93biBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tZW5hYmxlLWtpbGwgLS1lbmFibGUtbGFzdCAtLWVuYWJsZS1tZXNnIC0tZW5hYmxlLXBhcnR4IFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtcmF3IC0tZW5hYmxlLXJlc2V0IC0tZGlzYWJsZS1sb2dpbiBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS12aXB3IC0tZGlzYWJsZS1uZXdncnAgLS1kaXNhYmxlLWNoZm4tY2hzaCBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tZW5hYmxlLXdyaXRlIC0tZW5hYmxlLW1vdW50IFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtbGlidXVpZCAtLWVuYWJsZS1saWJibGtpZCAtLWVuYWJsZS1mc2NrIC0td2l0aG91dC11ZGV2IFwKKyAgICAgICAgICAgICAgICAgICAgICAgdXNyc2Jpbl9leGVjZGlyPScke3NiaW5kaXJ9JyBcCisiCisKK0VYVFJBX09FQ09ORiA9ICIke1NIQVJFRF9FWFRSQV9PRUNPTkZ9IC0tbGliZGlyPSR7YmFzZV9saWJkaXJ9IgorCitQQUNLQUdFQ09ORklHX2NsYXNzLXRhcmdldCA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbcGFtXSA9ICItLWVuYWJsZS1zdSAtLWVuYWJsZS1ydW51c2VyLC0tZGlzYWJsZS1zdSAtLWRpc2FibGUtcnVudXNlciwgbGlicGFtLCIKKworIyBSZXNwZWN0IHRoZSBzeXN0ZW1kIGZlYXR1cmUgZm9yIHV1aWRkCitQQUNLQUdFQ09ORklHW3N5c3RlbWRdID0gIi0td2l0aC1zeXN0ZW1kIC0td2l0aC1zeXN0ZW1kc3lzdGVtdW5pdGRpcj0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLywgLS13aXRob3V0LXN5c3RlbWQgLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyLHN5c3RlbWQiCisKKyMgQnVpbGQgc2V0cHJpdiByZXF1aXJlcyBsaWJjYXAtbmcKK1BBQ0tBR0VDT05GSUdbbGliY2FwLW5nXSA9ICItLWVuYWJsZS1zZXRwcml2LC0tZGlzYWJsZS1zZXRwcml2LGxpYmNhcC1uZywiCisKKyMgQnVpbGQgcHl0aG9uIGJpbmRpbmdzIGZvciBsaWJtb3VudAorUEFDS0FHRUNPTkZJR1tweWxpYm1vdW50XSA9ICItLXdpdGgtcHl0aG9uIC0tZW5hYmxlLXB5bGlibW91bnQsLS13aXRob3V0LXB5dGhvbiAtLWRpc2FibGUtcHlsaWJtb3VudCxweXRob24iCisKK0ZJTEVTXyR7UE59LWJhc2gtY29tcGxldGlvbiArPSAiJHtkYXRhZGlyfS9iYXNoLWNvbXBsZXRpb24iCitGSUxFU18ke1BOfS1kb2MgKz0gIiR7ZGF0YWRpcn0vZ2V0b3B0L2dldG9wdC0qLioiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vZGlzdC1wYWNrYWdlcy9saWJtb3VudC9weWxpYm1vdW50LmxhIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vJHtQWVRIT05fRElSfS9kaXN0LXBhY2thZ2VzL2xpYm1vdW50Ly5kZWJ1Zy8iCisKK0ZJTEVTX3V0aWwtbGludXgtYWdldHR5ID0gIiR7YmFzZV9zYmluZGlyfS9hZ2V0dHkiCitGSUxFU191dGlsLWxpbnV4LWZkaXNrID0gIiR7YmFzZV9zYmluZGlyfS9mZGlzay4ke0JQTn0iCitGSUxFU191dGlsLWxpbnV4LWZzdHJpbSA9ICIke2Jhc2Vfc2JpbmRpcn0vZnN0cmltIgorRklMRVNfdXRpbC1saW51eC1jZmRpc2sgPSAiJHtiYXNlX3NiaW5kaXJ9L2NmZGlzayIKK0ZJTEVTX3V0aWwtbGludXgtc2ZkaXNrID0gIiR7c2JpbmRpcn0vc2ZkaXNrIgorRklMRVNfdXRpbC1saW51eC1zd2Fwb25vZmYgPSAiJHtiYXNlX3NiaW5kaXJ9L3N3YXBvbi4ke0JQTn0gJHtiYXNlX3NiaW5kaXJ9L3N3YXBvZmYuJHtCUE59IgorRklMRVNfdXRpbC1saW51eC1sb3NldHVwID0gIiR7YmFzZV9zYmluZGlyfS9sb3NldHVwLiR7QlBOfSIKK0ZJTEVTX3V0aWwtbGludXgtbW91bnQgPSAiJHtiYXNlX2JpbmRpcn0vbW91bnQuJHtCUE59IgorRklMRVNfdXRpbC1saW51eC1tY29va2llID0gIiR7YmluZGlyfS9tY29va2llIgorRklMRVNfdXRpbC1saW51eC11bW91bnQgPSAiJHtiYXNlX2JpbmRpcn0vdW1vdW50LiR7QlBOfSIKK0ZJTEVTX3V0aWwtbGludXgtcmVhZHByb2ZpbGUgPSAiJHtzYmluZGlyfS9yZWFkcHJvZmlsZS4ke0JQTn0iCitGSUxFU191dGlsLWxpbnV4LXV1aWRnZW4gPSAiJHtiaW5kaXJ9L3V1aWRnZW4iCitGSUxFU191dGlsLWxpbnV4LXV1aWRkID0gIiR7c2JpbmRpcn0vdXVpZGQiCitGSUxFU191dGlsLWxpbnV4LXJlc2V0ID0gIiR7YmFzZV9iaW5kaXJ9L3Jlc2V0IgorRklMRVNfdXRpbC1saW51eC1wYXJ0eCA9ICIke3NiaW5kaXJ9L3BhcnR4IgorRklMRVNfdXRpbC1saW51eC1od2Nsb2NrID0gIiR7YmFzZV9zYmluZGlyfS9od2Nsb2NrLiR7QlBOfSIKK0ZJTEVTX3V0aWwtbGludXgtZmluZGZzID0gIiR7c2JpbmRpcn0vZmluZGZzIgorRklMRVNfdXRpbC1saW51eC1nZXRvcHQgPSAiJHtiYXNlX2JpbmRpcn0vZ2V0b3B0LiR7QlBOfSIKKworRklMRVNfdXRpbC1saW51eC1weWxpYm1vdW50ID0gIiR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L2Rpc3QtcGFja2FnZXMvbGlibW91bnQvcHlsaWJtb3VudC5zbyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vZGlzdC1wYWNrYWdlcy9saWJtb3VudC9fX2luaXRfXy4qIgorRklMRVNfdXRpbC1saW51eC1sc2NwdSA9ICIke2JpbmRpcn0vbHNjcHUiCisKK0ZJTEVTX3V0aWwtbGludXgtZnNjayA9ICIke2Jhc2Vfc2JpbmRpcn0vZnNjayoiCitGSUxFU191dGlsLWxpbnV4LW1rZnMgPSAiJHtzYmluZGlyfS9ta2ZzIgorCitGSUxFU191dGlsLWxpbnV4LWZzY2suY3JhbWZzID0gIiR7c2JpbmRpcn0vZnNjay5jcmFtZnMiCitGSUxFU191dGlsLWxpbnV4LW1rZnMuY3JhbWZzID0gIiR7c2JpbmRpcn0vbWtmcy5jcmFtZnMiCisKK0ZJTEVTX3V0aWwtbGludXgtc3Vsb2dpbiA9ICIke2Jhc2Vfc2JpbmRpcn0vc3Vsb2dpbioiCisKKyMgVXRpbC1saW51eCcgYmxraWQgcmVwbGFjZXMgdGhlIGUyZnNwcm9ncyBvbmUKK0ZJTEVTX3V0aWwtbGludXgtYmxraWQgPSAiJHtiYXNlX3NiaW5kaXJ9L2Jsa2lkKiIKK1JDT05GTElDVFNfdXRpbC1saW51eC1ibGtpZCA9ICJlMmZzcHJvZ3MtYmxraWQiCitSUkVQTEFDRVNfdXRpbC1saW51eC1ibGtpZCA9ICJlMmZzcHJvZ3MtYmxraWQiCisKKyMgcmVzZXQgY2FsbHMgJ3RwdXQnCitSREVQRU5EU191dGlsLWxpbnV4LXJlc2V0ICs9ICJuY3Vyc2VzIgorCitSREVQRU5EU18ke1BOfSA9ICJ1dGlsLWxpbnV4LXVtb3VudCB1dGlsLWxpbnV4LXN3YXBvbm9mZiB1dGlsLWxpbnV4LWxvc2V0dXAgdXRpbC1saW51eC1zdWxvZ2luIgorUlJFQ09NTUVORFNfJHtQTn0gPSAidXRpbC1saW51eC1mZGlzayB1dGlsLWxpbnV4LWNmZGlzayB1dGlsLWxpbnV4LXNmZGlzayB1dGlsLWxpbnV4LW1vdW50IHV0aWwtbGludXgtcmVhZHByb2ZpbGUgdXRpbC1saW51eC1ta2ZzICIKKworUlJFQ09NTUVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKK1JSRUNPTU1FTkRTXyR7UE59X2NsYXNzLW5hdGl2ZXNkayA9ICIiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlc2RrID0gIiIKKworUlBST1ZJREVTXyR7UE59LWRldiA9ICJ1dGlsLWxpbnV4LWxpYmJsa2lkLWRldiB1dGlsLWxpbnV4LWxpYm1vdW50LWRldiB1dGlsLWxpbnV4LWxpYnV1aWQtZGV2IgorCisjU1lTVEVNRF9QQUNLQUdFUyA9ICIke1BOfS11dWlkZCAke1BOfS1mc3RyaW0iCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tdXVpZGQgPSAidXVpZGQuc29ja2V0IHV1aWRkLnNlcnZpY2UiCitTWVNURU1EX0FVVE9fRU5BQkxFXyR7UE59LXV1aWRkID0gImRpc2FibGUiCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tZnN0cmltID0gImZzdHJpbS50aW1lciBmc3RyaW0uc2VydmljZSIKK1NZU1RFTURfQVVUT19FTkFCTEVfJHtQTn0tZnN0cmltID0gImRpc2FibGUiCisKK2RvX2NvbXBpbGUgKCkgeworCXNldCAtZQorCW9lX3J1bm1ha2UgQVJDSD0ke1RBUkdFVF9BUkNIfSBDUFU9IENQVU9QVD0gJ09QVD0ke0NGTEFHU30nIAorfQorCitkb19pbnN0YWxsICgpIHsKKwkjIHdpdGggY2NhY2hlIHRoZSB0aW1lc3RhbXBzIG9uIGNvbXBpbGVkIGZpbGVzIG1heQorCSMgZW5kIHVwIGVhcmxpZXIgdGhhbiBvbiB0aGVpciBpbnB1dHMsIHRoaXMgYWxsb3dzCisJIyBmb3IgdGhlIHJlc3VsdGFudCBjb21waWxhdGlvbiBpbiB0aGUgaW5zdGFsbCBzdGVwLgorCW9lX3J1bm1ha2UgQVJDSD0ke1RBUkdFVF9BUkNIfSBDUFU9IENQVU9QVD0gXAorCQknT1BUPSR7Q0ZMQUdTfScgJ0NDPSR7Q0N9JyAnTEQ9JHtMRH0nIFwKKwkJJ0xERkxBR1M9JHtMREZMQUdTfScgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorCisJbWtkaXIgLXAgJHtEfSR7YmFzZV9iaW5kaXJ9CisKKyAgICAgICAgc2JpbnByb2dzPSJhZ2V0dHkgY3RybGFsdGRlbCBjZmRpc2sgdmlwdyB2aWdyIgorICAgICAgICBzYmlucHJvZ3NfYT0icGl2b3Rfcm9vdCBod2Nsb2NrIG1rc3dhcCBta2ZzLm1pbml4IGZzY2subWluaXggbG9zZXR1cCBzd2Fwb24gc3dhcG9mZiBmZGlzayBmc2NrIGJsa2lkIGJsb2NrZGV2IGZzdHJpbSBzdWxvZ2luIHN3aXRjaF9yb290IgorICAgICAgICBiaW5wcm9nc19hPSJkbWVzZyBnZXRvcHQga2lsbCBtb3JlIHVtb3VudCBtb3VudCBsb2dpbiByZXNldCBzdSIKKworICAgICAgICBpZiBbICIke2Jhc2Vfc2JpbmRpcn0iICE9ICIke3NiaW5kaXJ9IiBdOyB0aGVuCisgICAgICAgIAlta2RpciAtcCAke0R9JHtiYXNlX3NiaW5kaXJ9CisgICAgICAgICAgICAgICAgZm9yIHAgaW4gJHNiaW5wcm9ncyAkc2JpbnByb2dzX2E7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBbIC1mICIke0R9JHtzYmluZGlyfS8kcCIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdiAiJHtEfSR7c2JpbmRpcn0vJHAiICIke0R9JHtiYXNlX3NiaW5kaXJ9LyRwIgorICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisKKyAgICAgICAgaWYgWyAiJHtiYXNlX2JpbmRpcn0iICE9ICIke2JpbmRpcn0iIF07IHRoZW4KKyAgICAgICAgCW1rZGlyIC1wICR7RH0ke2Jhc2VfYmluZGlyfQorICAgICAgICAgICAgICAgIGZvciBwIGluICRiaW5wcm9nc19hOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgaWYgWyAtZiAiJHtEfSR7YmluZGlyfS8kcCIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdiAiJHtEfSR7YmluZGlyfS8kcCIgIiR7RH0ke2Jhc2VfYmluZGlyfS8kcCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0LworCWVjaG8gJ01PVU5UQUxMPSItdCBub25mcyxub3NtYmZzLG5vbmNwZnMiJyA+ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvbW91bnRhbGwKKworCXJtIC1mICR7RH0ke2JpbmRpcn0vY2hrZHVwZXhlCit9CisKKyMgcmVzZXQgYW5kIG5vbG9naW4gY2F1c2VzIGEgY29uZmxpY3Qgd2l0aCBuY3Vyc2VzLW5hdGl2ZSBhbmQgc2hhZG93LW5hdGl2ZQorZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKwlybSAtZiAke0R9JHtiYXNlX2JpbmRpcn0vcmVzZXQKKwlybSAtZiAke0R9JHtiYXNlX3NiaW5kaXJ9L25vbG9naW4KK30KKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfSAgPSAiZG1lc2cga2lsbCBtb3JlIG1rc3dhcCBibG9ja2RldiBwaXZvdF9yb290IHN3aXRjaF9yb290IgorQUxURVJOQVRJVkVfJHtQTn0gKz0gIm1rZnMubWluaXggaGV4ZHVtcCBsYXN0IGxhc3RiIGxvZ2dlciBtZXNnIHJlbmljZSB3YWxsIgorQUxURVJOQVRJVkVfJHtQTn0gKz0gInNldHNpZCBjaHJ0IGZsb2NrIHV0bXBkdW1wIGVqZWN0IgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZG1lc2ddID0gIiR7YmFzZV9iaW5kaXJ9L2RtZXNnIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2tpbGxdID0gIiR7YmFzZV9iaW5kaXJ9L2tpbGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbW9yZV0gPSAiJHtiYXNlX2JpbmRpcn0vbW9yZSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtta3N3YXBdID0gIiR7YmFzZV9zYmluZGlyfS9ta3N3YXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbYmxvY2tkZXZdID0gIiR7YmFzZV9zYmluZGlyfS9ibG9ja2RldiIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtwaXZvdF9yb290XSA9ICIke2Jhc2Vfc2JpbmRpcn0vcGl2b3Rfcm9vdCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzd2l0Y2hfcm9vdF0gPSAiJHtiYXNlX3NiaW5kaXJ9L3N3aXRjaF9yb290IgorQUxURVJOQVRJVkVfTElOS19OQU1FW21rZnMubWluaXhdID0gIiR7YmFzZV9zYmluZGlyfS9ta2ZzLm1pbml4IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2VqZWN0XSA9ICIke2JpbmRpcn0vZWplY3QiCisKK0FMVEVSTkFUSVZFXyR7UE59LWRvYyA9ICJtb3VudHBvaW50LjEgbGFzdC4xIGxhc3RiLjEgbWVzZy4xIHdhbGwuMSBub2xvZ2luLjggc3Vsb2dpbi44IHV0bXBkdW1wLjEgcmVzZXQuMSBraWxsLjEgbGliYmxraWQuMyBibGtpZC44IGZpbmRmcy44IGZzY2suOCB1dWlkLjMiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtsYXN0LjFdID0gIiR7bWFuZGlyfS9tYW4xL2xhc3QuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtsYXN0Yi4xXSA9ICIke21hbmRpcn0vbWFuMS9sYXN0Yi4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW21lc2cuMV0gPSAiJHttYW5kaXJ9L21hbjEvbWVzZy4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW21vdW50cG9pbnQuMV0gPSAiJHttYW5kaXJ9L21hbjEvbW91bnRwb2ludC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW25vbG9naW4uOF0gPSAiJHttYW5kaXJ9L21hbjgvbm9sb2dpbi44IgorQUxURVJOQVRJVkVfTElOS19OQU1FW3Jlc2V0LjFdID0gIiR7bWFuZGlyfS9tYW4xL3Jlc2V0LjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3Vsb2dpbi44XSA9ICIke21hbmRpcn0vbWFuOC9zdWxvZ2luLjgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbdXRtcGR1bXAuMV0gPSAiJHttYW5kaXJ9L21hbjEvdXRtcGR1bXAuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt3YWxsLjFdID0gIiR7bWFuZGlyfS9tYW4xL3dhbGwuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtraWxsLjFdID0gIiR7bWFuZGlyfS9tYW4xL2tpbGwuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtsaWJibGtpZC4zXSA9ICIke21hbmRpcn0vbWFuMy9saWJibGtpZC4zIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2Jsa2lkLjhdID0gIiR7bWFuZGlyfS9tYW44L2Jsa2lkLjgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZmluZGZzLjhdID0gIiR7bWFuZGlyfS9tYW44L2ZpbmRmcy44IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2ZzY2suOF0gPSAiJHttYW5kaXJ9L21hbjgvZnNjay44IgorQUxURVJOQVRJVkVfTElOS19OQU1FW3V1aWQuM10gPSAiJHttYW5kaXJ9L21hbjMvdXVpZC4zIgorCitBTFRFUk5BVElWRV91dGlsLWxpbnV4LWh3Y2xvY2sgPSAiaHdjbG9jayIKKyMgVGhlcmUgc2VlbXMgdG8gYmUgcHJvYmxlbSwgYXRsZWFzdCBvbiBuc2x1Miwgd2l0aCB0aGVzZSwgdW50aWxsIHRoZXkgYXJlCisjIGZpeGVkIHRoZSBidXN5Ym94IG9uZXMgaGF2ZSBoaWdoZXIgcHJpb3JpdHkKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW2h3Y2xvY2tdID0gIjEwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2h3Y2xvY2tdID0gIiR7YmFzZV9zYmluZGlyfS9od2Nsb2NrIgorCitBTFRFUk5BVElWRV91dGlsLWxpbnV4LWZkaXNrID0gImZkaXNrIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2ZkaXNrXSA9ICIke2Jhc2Vfc2JpbmRpcn0vZmRpc2siCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtYWdldHR5ID0gImdldHR5IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2dldHR5XSA9ICIke2Jhc2Vfc2JpbmRpcn0vZ2V0dHkiCitBTFRFUk5BVElWRV9UQVJHRVRbZ2V0dHldID0gIiR7YmFzZV9zYmluZGlyfS9hZ2V0dHkiCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtbW91bnQgPSAibW91bnQiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbW91bnRdID0gIiR7YmFzZV9iaW5kaXJ9L21vdW50IgorCitBTFRFUk5BVElWRV91dGlsLWxpbnV4LXVtb3VudCA9ICJ1bW91bnQiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbdW1vdW50XSA9ICIke2Jhc2VfYmluZGlyfS91bW91bnQiCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtcmVhZHByb2ZpbGUgPSAicmVhZHByb2ZpbGUiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcmVhZHByb2ZpbGVdID0gIiR7c2JpbmRpcn0vcmVhZHByb2ZpbGUiCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtbG9zZXR1cCA9ICJsb3NldHVwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2xvc2V0dXBdID0gIiR7YmFzZV9zYmluZGlyfS9sb3NldHVwIgorCitBTFRFUk5BVElWRV91dGlsLWxpbnV4LXN3YXBvbm9mZiA9ICJzd2Fwb2ZmIHN3YXBvbiIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzd2Fwb2ZmXSA9ICIke2Jhc2Vfc2JpbmRpcn0vc3dhcG9mZiIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzd2Fwb25dID0gIiR7YmFzZV9zYmluZGlyfS9zd2Fwb24iCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtZnNjayA9ICJmc2NrLm1pbml4IGZzY2siCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZnNjay5taW5peF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2ZzY2subWluaXgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZnNja10gPSAiJHtiYXNlX3NiaW5kaXJ9L2ZzY2siCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtYmxraWQgPSAiYmxraWQiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbYmxraWRdID0gIiR7YmFzZV9zYmluZGlyfS9ibGtpZCIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1yZXNldCA9ICJyZXNldCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtyZXNldF0gPSAiJHtiaW5kaXJ9L3Jlc2V0IgorQUxURVJOQVRJVkVfVEFSR0VUW3Jlc2V0XSA9ICIke2Jhc2VfYmluZGlyfS9yZXNldCIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1nZXRvcHQgPSAiZ2V0b3B0IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2dldG9wdF0gPSAiJHtiYXNlX2JpbmRpcn0vZ2V0b3B0IgorCitBTFRFUk5BVElWRV91dGlsLWxpbnV4LXN1bG9naW4gPSAic3Vsb2dpbiIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzdWxvZ2luXSA9ICIke2Jhc2Vfc2JpbmRpcn0vc3Vsb2dpbiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitweXRob24gZG9fcGFja2FnZV9wcmVwZW5kICgpIHsKKyAgICBpZiAnLS1lbmFibGUtc3UnIGluIGQuZ2V0VmFyKCdFWFRSQV9PRUNPTkYnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBhbHRfbmFtZSA9ICJzdSIKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBhbHRfbmFtZSwgJyVzLyVzJyAlIChkLmdldFZhcignYmFzZV9iaW5kaXInLCBUcnVlKSwgYWx0X25hbWUpKQorICAgICAgICBkLmFwcGVuZFZhcignQUxURVJOQVRJVkVfJXMnICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpKSwgJyAnICsgYWx0X25hbWUpCit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsICcke2Jhc2VfbGliZGlyfScsICdebGliKC4qKVwuc29cLi4qJCcsCisgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm49J3V0aWwtbGludXgtbGliJXMnLAorICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSd1dGlsLWxpbnV4IGxpYiVzJywKKyAgICAgICAgICAgICAgICAgICAgICBleHRyYV9kZXBlbmRzPScnLCBwcmVwZW5kPVRydWUsIGFsbG93X2xpbmtzPVRydWUpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC9jb25maWd1cmUtc2JpbmRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L2NvbmZpZ3VyZS1zYmluZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YjFmZjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC9jb25maWd1cmUtc2JpbmRpci5wYXRjaApAQCAtMCwwICsxLDIzIEBACit1dGlsLWxpbnV4OiB0YWtlICR7c2JpbmRpcn0gZnJvbSB0aGUgZW52aXJvbm1lbnQgaWYgaXQgaXMgc2V0IHRoZXJlCitmaXggdGhlIHRlc3QsIHRoZSBbIF0gc3ludGF4IHdhcyBnZXR0aW5nIGVhdGVuIGJ5IGF1dG9jb25mCisKK1NpZ25lZC1vZmYtYnk6IFBoaWwgQmx1bmRlbGwgPHBiQHBiY2wubmV0PgorU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiB1dGlsLWxpbnV4LTIuMjIuMS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1dGlsLWxpbnV4LTIuMjIuMS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHV0aWwtbGludXgtMi4yMi4xL2NvbmZpZ3VyZS5hYworQEAgLTczLDcgKzczLDEwIEBAIEFDX1NVQlNUKFtsb2NhbHN0YXRlZGlyXSkKKyB1c3JiaW5fZXhlY2Rpcj0nJHtleGVjX3ByZWZpeH0vYmluJworIEFDX1NVQlNUKFt1c3JiaW5fZXhlY2Rpcl0pCisgCistdXNyc2Jpbl9leGVjZGlyPScke2V4ZWNfcHJlZml4fS9zYmluJworK2lmIHRlc3QgLXogIiR1c3JzYmluX2V4ZWNkaXIiIDsKKyt0aGVuCisrICAgdXNyc2Jpbl9leGVjZGlyPScke2V4ZWNfcHJlZml4fS9zYmluJworK2ZpCisgQUNfU1VCU1QoW3VzcnNiaW5fZXhlY2Rpcl0pCisgCisgY2FzZSAkbGliZGlyIGluCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC9maXgtcGFyYWxsZWwtYnVpbGQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC9maXgtcGFyYWxsZWwtYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiMjcxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L2ZpeC1wYXJhbGxlbC1idWlsZC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDc3NGY1NWY5ZGQyMmMwMWU0MDQxYTE4M2Q4ZGZmMTQ4MTFmMjkxMTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgNCBBcHIgMjAxNCAxNzozMzowNCArMDgwMAorU3ViamVjdDogW1BBVENIXSBzeXMtdXRpbHMvTWFrZW1vZHVsZS5hbTogZml4IHBhcmFsbGVsIGJ1aWxkIGlzc3VlCisKK1RoZSBydWxlIFNFVEFSQ0hfTUFOX0xJTktTIGlzIHVzZWQgZm9yIHRoZSBmaWxlcyB1bmRlciB0aGUgc3lzLXV0aWxzCitkaXIsIGZvciBleGFtcGxlOgorCitlY2hvICIuc28gbWFuOC9zZXRhcmNoLjgiID4gc3lzLXV0aWxzL2xpbnV4MzIuOAorCitidXQgaXQgZGVwZW5kcyBvbiBub3RoaW5nIHNvIHRoYXQgdGhlIHN5cy11dGlscyBkaXIgbWF5IG5vdCBleGlzdCwgd2UKK2NhbiBjcmVhdGUgdGhlIHN5cy11dGlscyBkaXIgdG8gZml4IHByb2JsZW0uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHN5cy11dGlscy9NYWtlbW9kdWxlLmFtIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9zeXMtdXRpbHMvTWFrZW1vZHVsZS5hbSBiL3N5cy11dGlscy9NYWtlbW9kdWxlLmFtCitpbmRleCA2MjY1MjgyLi42MmVhZDM3IDEwMDY0NAorLS0tIGEvc3lzLXV0aWxzL01ha2Vtb2R1bGUuYW0KKysrKyBiL3N5cy11dGlscy9NYWtlbW9kdWxlLmFtCitAQCAtMTI0LDYgKzEyNCw3IEBAIG1hbl9NQU5TICs9ICQoU0VUQVJDSF9NQU5fTElOS1MpCisgQ0xFQU5GSUxFUyArPSAkKFNFVEFSQ0hfTUFOX0xJTktTKQorIAorICQoU0VUQVJDSF9NQU5fTElOS1MpOgorKwkkKE1LRElSX1ApIHN5cy11dGlscworIAkkKEFNX1ZfR0VOKWVjaG8gIi5zbyBtYW44L3NldGFyY2guOCIgPiAkQAorIAorIGluc3RhbGwtZXhlYy1ob29rLXNldGFyY2g6CistLSAKKzEuOC4yLjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdWNsaWJjLV9fcHJvZ25hbWUtY29uZmxpY3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91Y2xpYmMtX19wcm9nbmFtZS1jb25mbGljdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDMxYTczCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdWNsaWJjLV9fcHJvZ25hbWUtY29uZmxpY3QucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorY29uZmlndXJlIHNob3VsZCBpbmNsdWRlIGVycm5vLmggaW5zdGVhZCBvZiBhcmdwLmggd2hlbgorY2hlY2tpbmcgZm9yIHByZXNlbmNlIG9mIHByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lCit1Y2xpYmMgZGVmaW5lcyB0aGlzIHRvIGJlIGNvbnN0IGNoYXIqIHVubGlrZSB1dGlsLWxpbnV4LW5nCit3aGljaCBkZWZpbmVzIHRoaXMgdG8gYmUgY2hhciogc28gdGhpcyBlcnJvciBnb2VzIHVubm90aWNlZAorb24gZ2xpYmMvZWdsaWJjIHN5c3RlbXMuCisKK2hlcmUgaXMgdGhlIGVycm9yIGl0IGZpeGVzCisKK2luIGZpbGUgaW5jbHVkZWQgZnJvbSBtb3VudFAuaDoxNDowLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgZnJvbSBjYWNoZS5jOjI5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy9ob21lL2tyYWovd29yay9zbHVnb3MvYnVpbGQvdG1wLXNsdWdvcy11Y2xpYmMvc3lzcm9vdHMvbnNsdTJsZS91c3IvaW5jbHVkZS9lcnJuby5oOjU1OjQ2OiBlcnJvcjogY29uZmxpY3RpbmcgdHlwZXMgZm9yICdfX3Byb2duYW1lJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisuLi8uLi8uLi9pbmNsdWRlL2MuaDoxMTg6MTQ6IG5vdGU6IHByZXZpb3VzIGRlY2xhcmF0aW9uIG9mICdfX3Byb2duYW1lJyB3YXMgaGVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCittYWtlWzNdOiAqKiogW2NhY2hlLmxvXSBFcnJvciAxICAgICAgICAgIAorCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBKb25hdGhhbiBMaXUgPG5ldDE0N0BnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworSW5kZXg6IHV0aWwtbGludXgtMi4yMi4xL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHV0aWwtbGludXgtMi4yMi4xLm9yaWcvY29uZmlndXJlLmFjCisrKysgdXRpbC1saW51eC0yLjIyLjEvY29uZmlndXJlLmFjCitAQCAtMzcyLDcgKzM3Miw3IEBAIGVzYWMKKyAKKyBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWUgaXMgZGVmaW5lZF0pCisgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworLQkjaW5jbHVkZSA8YXJncC5oPgorKwkjaW5jbHVkZSA8ZXJybm8uaD4KKyBdXSwgW1sKKyAJcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWUgPSAidGVzdCI7CisgXV0pXSwgWwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uYXRpdmUtcXNvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dGlsLWxpbnV4LW5hdGl2ZS1xc29ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGJmMjJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uYXRpdmUtcXNvcnQucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBmMjIwZDgwOWJlMWJhYTY1NDUwM2JmNmZmNTJmMzYzMGIwZDcwMTVjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDI2IE1hciAyMDE0IDAxOjMwOjI5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIHN1bi5jOiB1c2UgcXNvcnQoKSB0byBpbnN0ZWFkIG9mIHFzb3J0X3IoKQorCitxc29ydF9yKCkgd2FzIGFkZGVkIHRvIGdsaWJjIGluIHZlcnNpb24gMi44LCBzbyB0aGVyZSBpcyBubyBxc29ydF9yKCkgb24KK3RoZSBob3N0IGxpa2UgQ2VudE9TIDUueC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPdGhlcl0KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWJmZGlzay9zcmMvc3VuLmMgfCA1ICsrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworSW5kZXg6IHV0aWwtbGludXgtMi4yNC4yL2xpYmZkaXNrL3NyYy9zdW4uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHV0aWwtbGludXgtMi4yNC4yLm9yaWcvbGliZmRpc2svc3JjL3N1bi5jCisrKysgdXRpbC1saW51eC0yLjI0LjIvbGliZmRpc2svc3JjL3N1bi5jCitAQCAtNDMxLDEwICs0MzEsOSBAQCBzdGF0aWMgaW50IHN1bl92ZXJpZnlfZGlza2xhYmVsKHN0cnVjdCBmCisgICAgIH0KKyAgICAgdmVyaWZ5X3N1bl9zdGFydHMgPSBzdGFydHM7CisgCistICAgIHFzb3J0X3IoYXJyYXksQVJSQVlfU0laRShhcnJheSksc2l6ZW9mKGFycmF5WzBdKSwKKy0JICAoaW50ICgqKShjb25zdCB2b2lkICosY29uc3Qgdm9pZCAqLHZvaWQgKikpIHZlcmlmeV9zdW5fY21wLAorLQkgIHZlcmlmeV9zdW5fc3RhcnRzKTsKKy0KKysgICAgcXNvcnQoYXJyYXksQVJSQVlfU0laRShhcnJheSksc2l6ZW9mKGFycmF5WzBdKSwKKysgICAgICAgICAoaW50ICgqKShjb25zdCB2b2lkICosY29uc3Qgdm9pZCAqKSkgdmVyaWZ5X3N1bl9jbXApOworKyAKKyAgICAgaWYgKGFycmF5WzBdID09IC0xKSB7CisgCWZkaXNrX2luZm8oY3h0LCBfKCJObyBwYXJ0aXRpb25zIGRlZmluZWQuIikpOworIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V0aWwtbGludXgtbmF0aXZlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uYXRpdmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY0OTZkZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V0aWwtbGludXgtbmF0aXZlLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK1N1cHBvcnQgb2xkZXIgaG9zdHMgd2l0aCBsYXRlc3QgdXRpbC1saW51eC1uYXRpdmUKKworbWtvc3RlbXAgaXMgbm90IGRlZmluZWQgb24gb2xkZXIgbWFjaGluZXMuICBTbyB3ZSBkZXRlY3QgdGhpcyBhbmQKK3Byb3ZpZGUgYSBkZWZpbmUgdGhhdCB1c2VzIG1rc3RlbXAgaW5zdGVhZC4KKworT19DTE9FWEVDIGlzIG5vdCBkZWZpbmVkIG9uIG9sZGVyIG1hY2hpbmVzLiAgSXQgaXMgaG93ZXZlciBkZWZpbmVkCitpbiB0aGUgJ2MuaCcgaGVhZGVyLiAgRml4IHVwIHRoZSB1c2VycyB0byBpbmNsdWRlICdjLmgnLgorCitmZGlza3MvZmRpc2tzdW5sYWJlbC5jIHdhcyBtb2RpZmllZCB0byB1c2UgcXNvcnRfciwgaG93ZXZlcgordGhpcyBpcyBub3QgZGVmaW5lZCBvbiBvbGRlciBob3N0cy4gIFJldmVydDoKKyAgY29tbWl0IGM2OWJiY2E5YzFmNjY0NTA5N2JkMjBmZTNhMjFmNWE5OWEyYTA2OTgKKyAgZmRpc2s6IChzdW4pOiB1c2UgYXNrIEFQSSwgcmVtb3ZlIGdsb2JhbCB2YXJpYWJsZQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXQorUGF0Y2hlcyByZXZlcnQgdXBzdHJlYW0gY2hhbmdlcyBpbiBvcmRlciB0byBzdXBwb3J0IG9sZGVyCittYWNoaW5lcy4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMSArCisgaW5jbHVkZS9jLmggIHwgNyArKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZWIzNjgwYi4uOTNlMDE1ZiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzE4LDYgKzMxOCw3IEBAIEFDX0NIRUNLX0ZVTkNTKFsgXAorIAlsbHNlZWsgXAorIAlsc2VlazY0IFwKKyAJbWVtcGNweSBcCisrCW1rb3N0ZW1wIFwKKyAJbmFub3NsZWVwIFwKKyAJb3Blbl9tZW1zdHJlYW0gXAorIAlwZXJzb25hbGl0eSBcCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jLmggYi9pbmNsdWRlL2MuaAoraW5kZXggZTQyM2U4Yi4uY2YzM2I5NCAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvYy5oCisrKysgYi9pbmNsdWRlL2MuaAorQEAgLTIzMyw2ICsyMzMsMTMgQEAgc3RhdGljIGlubGluZSBpbnQgZGlyZmQoRElSICpkKQorICNlbmRpZgorIAorIC8qCisrICogbWtvc3RlbXAgcmVwbGFjZW1lbnQKKysgKi8KKysjaWZuZGVmIEhBVkVfTUtPU1RFTVAKKysjZGVmaW5lIG1rb3N0ZW1wKHRlbXBsYXRlLCBmbGFncykgbWtzdGVtcCh0ZW1wbGF0ZSkKKysjZW5kaWYKKysKKysvKgorICAqIE1BWEhPU1ROQU1FTEVOIHJlcGxhY2VtZW50CisgICovCisgc3RhdGljIGlubGluZSBzaXplX3QgZ2V0X2hvc3RuYW1lX21heCh2b2lkKQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dGlsLWxpbnV4LW5nLTIuMTYtbW91bnRfbG9ja19wYXRoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uZy0yLjE2LW1vdW50X2xvY2tfcGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzczZDdlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uZy0yLjE2LW1vdW50X2xvY2tfcGF0aC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitUaGUgRkhTIGluZGljYXRlcyB0aGF0IC9ldGMgbXVzdCBiZSBjYXBhYmxlIG9mIGJlaW5nIG1vdW50ZWQgUi9PLgorCitUaGUgRkhTIGFsc28gaW5kaWNhdGVzIHRoYXQgbG9jayBmaWxlcyBiZWxvbmcgaW4gL3Zhci9sb2NrLCBhbmQgL3ZhciBtdXN0CitiZSBSL1cgYXMgc29vbiBhcyBwb3NzaWJsZSBkdXJpbmcgYm9vdC4KKworVGhpcyBwYXRjaCBtb3ZlcyB0aGUgbXRhYiBsb2NrIGZpbGUgZnJvbSB0aGUgcG90ZW50aWFsbHkgUi9PIC9ldGMsIHRvIHRoZQorUi9XIC92YXIvbG9jayBhcmVhLiAgVGhpcyBsb2NrIGZpbGUgaXMgdXNlZCB3aGVuIG1vdW50aW5nIGRpc2tzIGFuZCBtYWtpbmcKK290aGVyIG1vdW50IGFkanVzdG1lbnRzLiAgVGhlIF9QQVRIX01PVU5URURfVE1QIGlzIG5vdCBhZGp1c3RlZCwgYXMgZmFpbGluZwordG8gd3JpdGUgdG8gdGhpcyBmaWxlIGRvZXMgbm90IGNhdXNlIGFueSBmdW5jdGlvbmFsIGxpbWl0YXRpb25zLgorCisoTm90ZSwgaWYgL2V0YyBpcyBSL08sIHRoZW4gL2V0Yy9tdGFiIHNob3VsZCBiZSBhIHN5bWxpbmsgdG8gL3Byb2MvbW91bnRzKQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKKy0tLSB1dGlsLWxpbnV4LW5nLTIuMTYvaW5jbHVkZS9wYXRobmFtZXMuaC5vcmlnCisrKysgdXRpbC1saW51eC1uZy0yLjE2L2luY2x1ZGUvcGF0aG5hbWVzLmgKK0BAIC05MCw3ICs5MCw3IEBACisgIyBlbmRpZgorICNlbmRpZgorIAorLSNkZWZpbmUgX1BBVEhfTU9VTlRFRF9MT0NLCV9QQVRIX01PVU5URUQgIn4iCisrI2RlZmluZSBfUEFUSF9NT1VOVEVEX0xPQ0sJIi92YXIvbG9jay9tdGFifiIKKyAjZGVmaW5lIF9QQVRIX01PVU5URURfVE1QCV9QQVRIX01PVU5URUQgIi50bXAiCisgCisgI2lmbmRlZiBfUEFUSF9ERVYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V0aWwtbGludXgtbmctcmVwbGFjZS1zaWdpbnRlcnJ1cHQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dGlsLWxpbnV4LW5nLXJlcGxhY2Utc2lnaW50ZXJydXB0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MTdhNzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dGlsLWxpbnV4LW5nLXJlcGxhY2Utc2lnaW50ZXJydXB0LnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBsb2dpbi11dGlscy9sb2dpbi5jIHwgNSArKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xvZ2luLXV0aWxzL2xvZ2luLmMgYi9sb2dpbi11dGlscy9sb2dpbi5jCitpbmRleCBlYmI3NmY1Li4zOGM4ODFiIDEwMDY0NAorLS0tIGEvbG9naW4tdXRpbHMvbG9naW4uYworKysrIGIvbG9naW4tdXRpbHMvbG9naW4uYworQEAgLTExMTAsNiArMTExMCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJY2hhciAqYnVmZjsKKyAJaW50IGNoaWxkQXJnYyA9IDA7CisgCWludCByZXRjb2RlOworKwlzdHJ1Y3Qgc2lnYWN0aW9uIGFjdDsKKyAKKyAJY2hhciAqcHdkYnVmID0gTlVMTDsKKyAJc3RydWN0IHBhc3N3ZCAqcHdkID0gTlVMTCwgX3B3ZDsKK0BAIC0xMTIzLDcgKzExMjQsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCXRpbWVvdXQgPSAodW5zaWduZWQgaW50KWdldGxvZ2luZGVmc19udW0oIkxPR0lOX1RJTUVPVVQiLCBMT0dJTl9USU1FT1VUKTsKKyAKKyAJc2lnbmFsKFNJR0FMUk0sIHRpbWVkb3V0KTsKKy0Jc2lnaW50ZXJydXB0KFNJR0FMUk0sIDEpOwkvKiB3ZSBoYXZlIHRvIGludGVycnVwdCBzeXNjYWxscyBsaWtlIGlvY3RsKCkgKi8KKysJKHZvaWQpIHNpZ2FjdGlvbihTSUdBTFJNLCBOVUxMLCAmYWN0KTsKKysJYWN0LnNhX2ZsYWdzICY9IH5TQV9SRVNUQVJUOworKwlzaWdhY3Rpb24oU0lHQUxSTSwgJmFjdCwgTlVMTCk7CisgCWFsYXJtKHRpbWVvdXQpOworIAlzaWduYWwoU0lHUVVJVCwgU0lHX0lHTik7CisgCXNpZ25hbChTSUdJTlQsIFNJR19JR04pOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eF8yLjI2LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eF8yLjI2LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM3ZGM2ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4XzIuMjYuMi5iYgpAQCAtMCwwICsxLDMwIEBACitNQUpPUl9WRVJTSU9OID0gIjIuMjYiCityZXF1aXJlIHV0aWwtbGludXguaW5jCisKKyMgVG8gc3VwcG9ydCBvbGRlciBob3N0cywgd2UgbmVlZCB0byBwYXRjaCBhbmQvb3IgcmV2ZXJ0CisjIHNvbWUgdXBzdHJlYW0gY2hhbmdlcy4gIE9ubHkgZG8gdGhpcyBmb3IgbmF0aXZlIHBhY2thZ2VzLgorT0xESE9TVCA9ICIiCitPTERIT1NUX2NsYXNzLW5hdGl2ZSA9ICJmaWxlOi8vdXRpbC1saW51eC1uYXRpdmUucGF0Y2ggXAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL3V0aWwtbGludXgtbmF0aXZlLXFzb3J0LnBhdGNoIFwKKwkJCSIKKworU1JDX1VSSSArPSAiZmlsZTovL3V0aWwtbGludXgtbmctcmVwbGFjZS1zaWdpbnRlcnJ1cHQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3V0aWwtbGludXgtbmctMi4xNi1tb3VudF9sb2NrX3BhdGgucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3VjbGliYy1fX3Byb2duYW1lLWNvbmZsaWN0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUtc2JpbmRpci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgICR7T0xESE9TVH0gXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjliZGYzNjhjMzk1ZjFiNzAzMjVkMGViMjJjN2Y0OGZiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBlMjliZGExNDI1MjhhNDhhMGE5NTNjMzlmZjYzMDkzNjUxYTQ4MDkwNDJlMTc5MGZiZDZhYTg2NjNmZDk2NjYiCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJzY2FuZl9jdl9hbGxvY19tb2RpZmllcj1tcyIKKworRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICIke1NIQVJFRF9FWFRSQV9PRUNPTkZ9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWZhbGxvY2F0ZSBcCisJCQkgICAgIC0tZGlzYWJsZS11c2UtdHR5LWdyb3VwIFwKKyIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmVzZGsgPSAiJHtTSEFSRURfRVhUUkFfT0VDT05GfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1mYWxsb2NhdGUgXAorCQkJCS0tZGlzYWJsZS11c2UtdHR5LWdyb3VwIFwKKyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdm9sYXRpbGUtYmluZHMvZmlsZXMvQ09QWUlORy5NSVQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL2ZpbGVzL0NPUFlJTkcuTUlUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlN2Q1NzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL2ZpbGVzL0NPUFlJTkcuTUlUCkBAIC0wLDAgKzEsMTcgQEAKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAorY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKK1NIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAorREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCitPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IKK1RIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS92b2xhdGlsZS1iaW5kcy9maWxlcy9tb3VudC1jb3B5YmluZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdm9sYXRpbGUtYmluZHMvZmlsZXMvbW91bnQtY29weWJpbmQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmFlYWY4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdm9sYXRpbGUtYmluZHMvZmlsZXMvbW91bnQtY29weWJpbmQKQEAgLTAsMCArMSwzNCBAQAorIyEvYmluL3NoCisjCisjIFBlcmZvcm0gYSBiaW5kIG1vdW50LCBjb3B5aW5nIGV4aXN0aW5nIGZpbGVzIGFzIHdlIGRvIHNvIHRvIGVuc3VyZSB0aGUKKyMgb3ZlcmxhaWQgcGF0aCBoYXMgdGhlIG5lY2Vzc2FyeSBjb250ZW50LgorCitpZiBbICQjIC1sdCAyIF07IHRoZW4KKyAgICBlY2hvID4mMiAiVXNhZ2U6ICQwIHNwZWMgbW91bnRwb2ludCBbT1BUSU9OU10iCisgICAgZXhpdCAxCitmaQorCitzcGVjPSQxCittb3VudHBvaW50PSQyCisKK2lmIFsgJCMgLWd0IDIgXTsgdGhlbgorICAgIG9wdGlvbnM9JDMKK2Vsc2UKKyAgICBvcHRpb25zPQorZmkKKworWyAtbiAiJG9wdGlvbnMiIF0gJiYgb3B0aW9ucz0iLCRvcHRpb25zIgorCitta2RpciAtcCAiJHtzcGVjJS8qfSIKK2lmIFsgLWQgIiRtb3VudHBvaW50IiBdOyB0aGVuCisgICAgaWYgWyAhIC1kICIkc3BlYyIgXTsgdGhlbgorICAgICAgICBta2RpciAiJHNwZWMiCisgICAgICAgIGNwIC1wUFIgIiRtb3VudHBvaW50Ii8uICIkc3BlYy8iCisgICAgZmkKK2VsaWYgWyAtZiAiJG1vdW50cG9pbnQiIF07IHRoZW4KKyAgICBpZiBbICEgLWYgIiRzcGVjIiBdOyB0aGVuCisgICAgICAgIGNwIC1wUCAiJG1vdW50cG9pbnQiICIkc3BlYyIKKyAgICBmaQorZmkKKworbW91bnQgLW8gImJpbmQkb3B0aW9ucyIgIiRzcGVjIiAiJG1vdW50cG9pbnQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL2ZpbGVzL3ZvbGF0aWxlLWJpbmRzLnNlcnZpY2UuaW4gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL2ZpbGVzL3ZvbGF0aWxlLWJpbmRzLnNlcnZpY2UuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIzMzU1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdm9sYXRpbGUtYmluZHMvZmlsZXMvdm9sYXRpbGUtYmluZHMuc2VydmljZS5pbgpAQCAtMCwwICsxLDE5IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPUJpbmQgbW91bnQgdm9sYXRpbGUgQHdoZXJlQAorRGVmYXVsdERlcGVuZGVuY2llcz1mYWxzZQorQmVmb3JlPWxvY2FsLWZzLnRhcmdldAorUmVxdWlyZXNNb3VudHNGb3I9QHdoYXRwYXJlbnRAIEB3aGVyZXBhcmVudEAKK0NvbmRpdGlvblBhdGhJc1JlYWRXcml0ZT1Ad2hhdHBhcmVudEAKK0NvbmRpdGlvblBhdGhFeGlzdHM9QHdoZXJlQAorQ29uZGl0aW9uUGF0aElzUmVhZFdyaXRlPSFAd2hlcmVACisKK1tTZXJ2aWNlXQorVHlwZT1vbmVzaG90CitSZW1haW5BZnRlckV4aXQ9WWVzCitTdGFuZGFyZE91dHB1dD1zeXNsb2cKK1RpbWVvdXRTZWM9MAorRXhlY1N0YXJ0PS9zYmluL21vdW50LWNvcHliaW5kIEB3aGF0QCBAd2hlcmVACitFeGVjU3RvcD0vYmluL3Vtb3VudCBAd2hlcmVACisKK1tJbnN0YWxsXQorV2FudGVkQnk9bG9jYWwtZnMudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL3ZvbGF0aWxlLWJpbmRzLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS92b2xhdGlsZS1iaW5kcy92b2xhdGlsZS1iaW5kcy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWU3Mjc1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS92b2xhdGlsZS1iaW5kcy92b2xhdGlsZS1iaW5kcy5iYgpAQCAtMCwwICsxLDcxIEBACitTVU1NQVJZID0gIlZvbGF0aWxlIGJpbmQgbW91bnQgc2V0dXAgYW5kIGNvbmZpZ3VyYXRpb24gZm9yIHJlYWQtb25seS1yb290ZnMiCitERVNDUklQVElPTiA9ICIke1NVTU1BUll9IgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLk1JVDttZDU9NTc1MGYzYWE0ZWEyYjAwYzJiZjIxYjJiMmE3YjcxNGQiCisKK1NSQ19VUkkgPSAiXAorICAgIGZpbGU6Ly9tb3VudC1jb3B5YmluZCBcCisgICAgZmlsZTovL0NPUFlJTkcuTUlUIFwKKyAgICBmaWxlOi8vdm9sYXRpbGUtYmluZHMuc2VydmljZS5pbiBcCisiCisKK1MgPSAiJHtXT1JLRElSfSIKKworaW5oZXJpdCBhbGxhcmNoIHN5c3RlbWQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJzeXN0ZW1kIgorCitWT0xBVElMRV9CSU5EUyA/PSAiXAorICAgIC92YXIvdm9sYXRpbGUvbGliIC92YXIvbGliXG5cCisiCitWT0xBVElMRV9CSU5EU1t0eXBlXSA9ICJsaXN0IgorVk9MQVRJTEVfQklORFNbc2VwYXJhdG9yXSA9ICJcbiIKKworZGVmIHZvbGF0aWxlX3N5c3RlbWRfc2VydmljZXMoZCk6CisgICAgc2VydmljZXMgPSBbXQorICAgIGZvciBsaW5lIGluIG9lLmRhdGEudHlwZWRfdmFsdWUoIlZPTEFUSUxFX0JJTkRTIiwgZCk6CisgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgd2hhdCwgd2hlcmUgPSBsaW5lLnNwbGl0KE5vbmUsIDEpCisgICAgICAgIHNlcnZpY2VzLmFwcGVuZCgiJXMuc2VydmljZSIgJSB3aGF0WzE6XS5yZXBsYWNlKCIvIiwgIi0iKSkKKyAgICByZXR1cm4gIiAiLmpvaW4oc2VydmljZXMpCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICIke0B2b2xhdGlsZV9zeXN0ZW1kX3NlcnZpY2VzKGQpfSIKKworRklMRVNfJHtQTn0gKz0gIiR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vKi5zZXJ2aWNlIgorCitkb19jb21waWxlICgpIHsKKyAgICB3aGlsZSByZWFkIHNwZWMgbW91bnRwb2ludDsgZG8KKyAgICAgICAgaWYgWyAteiAiJHNwZWMiIF07IHRoZW4KKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGZpCisKKyAgICAgICAgc2VydmljZWZpbGU9IiR7c3BlYyMvfSIKKyAgICAgICAgc2VydmljZWZpbGU9IiQoZWNobyAiJHNlcnZpY2VmaWxlIiB8IHRyIC8gLSkuc2VydmljZSIKKyAgICAgICAgc2VkIC1lICJzI0B3aGF0QCMkc3BlYyNnOyBzI0B3aGVyZUAjJG1vdW50cG9pbnQjZyIgXAorICAgICAgICAgICAgLWUgInMjQHdoYXRwYXJlbnRAIyR7c3BlYyUvKn0jZzsgcyNAd2hlcmVwYXJlbnRAIyR7bW91bnRwb2ludCUvKn0jZyIgXAorICAgICAgICAgICAgdm9sYXRpbGUtYmluZHMuc2VydmljZS5pbiA+JHNlcnZpY2VmaWxlCisgICAgZG9uZSA8PEVORAorJHtAZC5nZXRWYXIoJ1ZPTEFUSUxFX0JJTkRTJywgVHJ1ZSkucmVwbGFjZSgiXFxuIiwgIlxuIil9CitFTkQKKworICAgIGlmIFsgLWUgdmFyLXZvbGF0aWxlLWxpYi5zZXJ2aWNlIF07IHRoZW4KKyAgICAgICAgIyBBcyB0aGUgc2VlZCBpcyBzdG9yZWQgdW5kZXIgL3Zhci9saWIsIGVuc3VyZSB0aGF0IHRoaXMgc2VydmljZSBydW5zCisgICAgICAgICMgYWZ0ZXIgdGhlIHZvbGF0aWxlIC92YXIvbGliIGlzIG1vdW50ZWQuCisgICAgICAgIHNlZCAtaSAtZSAiL15CZWZvcmU9L3MvXCQvIHN5c3RlbWQtcmFuZG9tLXNlZWQuc2VydmljZS8iIFwKKyAgICAgICAgICAgICAgIC1lICIvXldhbnRlZEJ5PS9zL1wkLyBzeXN0ZW1kLXJhbmRvbS1zZWVkLnNlcnZpY2UvIiBcCisgICAgICAgICAgICAgICB2YXItdm9sYXRpbGUtbGliLnNlcnZpY2UKKyAgICBmaQorfQorZG9fY29tcGlsZVtkaXJzXSA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2Jhc2Vfc2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA3NTUgbW91bnQtY29weWJpbmQgJHtEfSR7YmFzZV9zYmluZGlyfS8KKworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKyAgICBmb3Igc2VydmljZSBpbiAke1NZU1RFTURfU0VSVklDRV92b2xhdGlsZS1iaW5kc307IGRvCisgICAgICAgIGluc3RhbGwgLW0gMDY0NCAkc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKyAgICBkb25lCit9Citkb19pbnN0YWxsW2RpcnNdID0gIiR7V09SS0RJUn0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3psaWIvc2l0ZV9jb25maWcvaGVhZGVycyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi9zaXRlX2NvbmZpZy9oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMjY4OTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3psaWIvc2l0ZV9jb25maWcvaGVhZGVycwpAQCAtMCwwICsxIEBACit6bGliLmgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L01ha2VmaWxlLXJ1bnRlc3RzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWItMS4yLjgvTWFrZWZpbGUtcnVudGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFlZWE4MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L01ha2VmaWxlLXJ1bnRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0FkZCAncHRlc3QnIHRhcmdldCB0byBNYWtlZmlsZSwgdG8gcnVuIHRlc3RzIHdpdGhvdXQgY2hlY2tpbmcgZGVwZW5kZW5jaWVzLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRlcnMgUm94ZWxsIDxhbmRlcnMucm94ZWxsQGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KK2RpZmYgLXVOciBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KKy0tLSBhL01ha2VmaWxlLmluCTIwMTMtMDYtMTAgMTM6NDg6MTQuMzIxOTU5MTYyICswMjAwCisrKysgYi9NYWtlZmlsZS5pbgkyMDEzLTA2LTEwIDEzOjQ5OjM2LjY4NjQ3NjQ0OCArMDIwMAorQEAgLTgzLDYgKzgzLDkgQEAKKyB0ZXN0OiBhbGwgdGVzdHN0YXRpYyB0ZXN0c2hhcmVkCisgCisgdGVzdHN0YXRpYzogc3RhdGljCisrCUBtYWtlIHJ1bnRlc3RzdGF0aWMKKysKKytydW50ZXN0c3RhdGljOgorIAlAVE1QU1Q9dG1wc3RfJCQ7IFwKKyAJaWYgZWNobyBoZWxsbyB3b3JsZCB8IC4vbWluaWd6aXAgfCAuL21pbmlnemlwIC1kICYmIC4vZXhhbXBsZSAkJFRNUFNUIDsgdGhlbiBcCisgCSAgZWNobyAnCQkqKiogemxpYiB0ZXN0IE9LICoqKic7IFwKK0BAIC05Miw2ICs5NSw5IEBACisgCXJtIC1mICQkVE1QU1QKKyAKKyB0ZXN0c2hhcmVkOiBzaGFyZWQKKysJQG1ha2UgcnVudGVzdHNoYXJlZAorKworK3J1bnRlc3RzaGFyZWQ6CisgCUBMRF9MSUJSQVJZX1BBVEg9YHB3ZGA6JChMRF9MSUJSQVJZX1BBVEgpIDsgZXhwb3J0IExEX0xJQlJBUllfUEFUSDsgXAorIAlMRF9MSUJSQVJZTjMyX1BBVEg9YHB3ZGA6JChMRF9MSUJSQVJZTjMyX1BBVEgpIDsgZXhwb3J0IExEX0xJQlJBUllOMzJfUEFUSDsgXAorIAlEWUxEX0xJQlJBUllfUEFUSD1gcHdkYDokKERZTERfTElCUkFSWV9QQVRIKSA7IGV4cG9ydCBEWUxEX0xJQlJBUllfUEFUSDsgXAorQEAgLTEwNSw2ICsxMTEsOSBAQAorIAlybSAtZiAkJFRNUFNICisgCisgdGVzdDY0OiBhbGw2NAorKwlAbWFrZSBydW50ZXN0YWxsNjQKKysKKytydW50ZXN0YWxsNjQ6CisgCUBUTVA2ND10bXA2NF8kJDsgXAorIAlpZiBlY2hvIGhlbGxvIHdvcmxkIHwgLi9taW5pZ3ppcDY0IHwgLi9taW5pZ3ppcDY0IC1kICYmIC4vZXhhbXBsZTY0ICQkVE1QNjQ7IHRoZW4gXAorIAkgIGVjaG8gJwkJKioqIHpsaWIgNjQtYml0IHRlc3QgT0sgKioqJzsgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWItMS4yLjgvbGRmbGFncy10ZXN0cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L2xkZmxhZ3MtdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTljNDBiNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L2xkZmxhZ3MtdGVzdHMucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorT2JleSBMREZMQUdTIGZvciB0ZXN0cworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSB6bGliLTEuMi44Lm9yaWcvTWFrZWZpbGUuaW4KKysrKyB6bGliLTEuMi44L01ha2VmaWxlLmluCitAQCAtMjYsNyArMjYsNyBAQCBDRkxBR1M9LU8KKworIFNGTEFHUz0tTworIExERkxBR1M9CistVEVTVF9MREZMQUdTPS1MLiBsaWJ6LmEKKytURVNUX0xERkxBR1M9LUwuICQoTERGTEFHUykKKyBMRFNIQVJFRD0kKENDKQorIENQUD0kKENDKSAtRQorCitAQCAtMTc2LDIyICsxNzYsMjIgQEAgcGxhY2VibyAkKFNIQVJFRExJQlYpOiAkKFBJQ19PQkpTKSBsaWJ6LgorCS1Acm1kaXIgb2JqcworCisgZXhhbXBsZSQoRVhFKTogZXhhbXBsZS5vICQoU1RBVElDTElCKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgZXhhbXBsZS5vICQoVEVTVF9MREZMQUdTKQorKwkkKENDKSAkKENGTEFHUykgLW8gJEAgZXhhbXBsZS5vICQoVEVTVF9MREZMQUdTKSAkKFNUQVRJQ0xJQikKKworIG1pbmlnemlwJChFWEUpOiBtaW5pZ3ppcC5vICQoU1RBVElDTElCKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgbWluaWd6aXAubyAkKFRFU1RfTERGTEFHUykKKysJJChDQykgJChDRkxBR1MpIC1vICRAIG1pbmlnemlwLm8gJChURVNUX0xERkxBR1MpICQoU1RBVElDTElCKQorCisgZXhhbXBsZXNoJChFWEUpOiBleGFtcGxlLm8gJChTSEFSRURMSUJWKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgZXhhbXBsZS5vIC1MLiAkKFNIQVJFRExJQlYpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBleGFtcGxlLm8gJChURVNUX0xERkxBR1MpICQoU0hBUkVETElCVikKKworIG1pbmlnemlwc2gkKEVYRSk6IG1pbmlnemlwLm8gJChTSEFSRURMSUJWKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgbWluaWd6aXAubyAtTC4gJChTSEFSRURMSUJWKQorKwkkKENDKSAkKENGTEFHUykgLW8gJEAgbWluaWd6aXAubyAkKFRFU1RfTERGTEFHUykgJChTSEFSRURMSUJWKQorCisgZXhhbXBsZTY0JChFWEUpOiBleGFtcGxlNjQubyAkKFNUQVRJQ0xJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAIGV4YW1wbGU2NC5vICQoVEVTVF9MREZMQUdTKQorKwkkKENDKSAkKENGTEFHUykgLW8gJEAgZXhhbXBsZTY0Lm8gJChURVNUX0xERkxBR1MpICQoU1RBVElDTElCKQorCisgbWluaWd6aXA2NCQoRVhFKTogbWluaWd6aXA2NC5vICQoU1RBVElDTElCKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgbWluaWd6aXA2NC5vICQoVEVTVF9MREZMQUdTKQorKwkkKENDKSAkKENGTEFHUykgLW8gJEAgbWluaWd6aXA2NC5vICQoVEVTVF9MREZMQUdTKSAkKFNUQVRJQ0xJQikKKworIGluc3RhbGwtbGliczogJChMSUJTKQorCS1AaWYgWyAhIC1kICQoREVTVERJUikkKGV4ZWNfcHJlZml4KSAgXTsgdGhlbiBta2RpciAtcCAkKERFU1RESVIpJChleGVjX3ByZWZpeCk7IGZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYi0xLjIuOC9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwM2I0ODIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYi0xLjIuOC9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaApAQCAtMCwwICsxLDIwIEBACisKK1doZW4gL2V0Yy9sZC5zby5jYWNoZSBpcyB3cml0ZWFibGUgYnkgdXNlciBydW5uaW5nIGJpdGJha2UgdGhlbiBpdCBjcmVhdGVzIGludmFsaWQgY2FjaGUgCisoaW4gbXkgY2FzZSBsaWJzdGRjKysuc28gY2Fubm90IGJlIGZvdW5kIGFmdGVyIGJ1aWxkaW5nIHpsaWIoLW5hdGl2ZSkgYW5kIEkgaGF2ZSB0byBjYWxsIAordG91Y2ggKi9saWJzdGRjKysuc28gJiYgL3NiaW4vbGRjb25maWcgdG8gZml4IGl0LgorCitTbyByZW1vdmUgbGRjb25maWcgY2FsbCBmcm9tIG1ha2UgaW5zdGFsbC1saWJzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitkaWZmIC11TnIgemxpYi0xLjIuNi5vcmlnL01ha2VmaWxlLmluIHpsaWItMS4yLjYvTWFrZWZpbGUuaW4KKy0tLSB6bGliLTEuMi42Lm9yaWcvTWFrZWZpbGUuaW4JMjAxMi0wMS0yOCAyMzo0ODo1MC4wMDAwMDAwMDAgKzAxMDAKKysrKyB6bGliLTEuMi42L01ha2VmaWxlLmluCTIwMTItMDItMTMgMTU6Mzg6MjAuNTc3NzAwNzIzICswMTAwCitAQCAtMTk5LDcgKzE5OSw2IEBACisgCSAgcm0gLWYgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQikgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQk0pOyBcCisgCSAgbG4gLXMgJChTSEFSRURMSUJWKSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCKTsgXAorIAkgIGxuIC1zICQoU0hBUkVETElCVikgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQk0pOyBcCistCSAgKCQoTERDT05GSUcpIHx8IHRydWUpICA+L2Rldi9udWxsIDI+JjE7IFwKKyAJZmkKKyAJY3AgemxpYi4zICQoREVTVERJUikkKG1hbjNkaXIpCisgCWNobW9kIDY0NCAkKERFU1RESVIpJChtYW4zZGlyKS96bGliLjMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODRkOWRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWItMS4yLjgvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL3NoCittYWtlIC1rIHJ1bnRlc3RzdGF0aWMgcnVudGVzdHNoYXJlZCB8IHNlZCAtciAtZSAncy9eKFxzK1wqKyAoLis/KSB0ZXN0IE9LIFwqKykvXDFcblBBU1M6IFwyLycgLWUgJ3MvXihccytcKisgKC4rPykgdGVzdCBGQUlMRUQgXCorKS9cMVxuRkFJTDogXDIvJwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWJfMS4yLjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYl8xLjIuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDcwYWRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWJfMS4yLjguYmIKQEAgLTAsMCArMSw1OSBAQAorU1VNTUFSWSA9ICJabGliIENvbXByZXNzaW9uIExpYnJhcnkiCitERVNDUklQVElPTiA9ICJabGliIGlzIGEgZ2VuZXJhbC1wdXJwb3NlLCBwYXRlbnQtZnJlZSwgbG9zc2xlc3MgZGF0YSBjb21wcmVzc2lvbiBcCitsaWJyYXJ5IHdoaWNoIGlzIHVzZWQgYnkgbWFueSBkaWZmZXJlbnQgcHJvZ3JhbXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3psaWIubmV0LyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiWmxpYiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3psaWIuaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTIzO21kNT1mZGU2MTJkZjFlNTkzM2M0MjhiNzM4NDRhMGM0OTRmZCIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LnpsaWIubmV0LyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLmxkY29uZmlnLmNhbGwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUtcnVudGVzdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGRmbGFncy10ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyOGYxMjA1ZDhkZDIwMDFmMjZmZWMxZThjMmNlYmUzNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4MzFkZjA0MzIzNmRmOGU5YTc2NjdiOWUzYmIzN2UxZmNiMTIyMGEwZjE2M2I2ZGUyNjI2Nzc0Yjk1OTBkMDU3IgorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibWFrZSIKKworaW5oZXJpdCBwdGVzdAorCitkb19jb25maWd1cmUgKCl7CisJLi9jb25maWd1cmUgLS1wcmVmaXg9JHtwcmVmaXh9IC0tc2hhcmVkIC0tbGliZGlyPSR7bGliZGlyfQorfQorCitkb19jb21waWxlICgpeworCW9lX3J1bm1ha2UKK30KKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIHN0YXRpYyBzaGFyZWQKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIERFU1RESVI9JHtEfSBpbnN0YWxsCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJaW5zdGFsbCAke0J9L01ha2VmaWxlICAgJHtEfSR7UFRFU1RfUEFUSH0KKwlpbnN0YWxsICR7Qn0vZXhhbXBsZSAgICAke0R9JHtQVEVTVF9QQVRIfQorCWluc3RhbGwgJHtCfS9taW5pZ3ppcCAgICR7RH0ke1BURVNUX1BBVEh9CisJaW5zdGFsbCAke0J9L2V4YW1wbGVzaCAgJHtEfSR7UFRFU1RfUEFUSH0KKwlpbnN0YWxsICR7Qn0vbWluaWd6aXBzaCAke0R9JHtQVEVTVF9QQVRIfQorfQorCisjIE1vdmUgemxpYiBzaGFyZWQgbGlicmFyaWVzIGZvciB0YXJnZXQgYnVpbGRzIHRvICRiYXNlX2xpYmRpciBzbyB0aGUgbGlicmFyeQorIyBjYW4gYmUgdXNlZCBpbiBlYXJseSBib290IGJlZm9yZSAkcHJlZml4IGlzIG1vdW50ZWQuCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7CisJaWYgWyAke2Jhc2VfbGliZGlyfSAhPSAke2xpYmRpcn0gXQorCXRoZW4KKwkJbWtkaXIgLXAgJHtEfS8ke2Jhc2VfbGliZGlyfQorCQltdiAke0R9LyR7bGliZGlyfS9saWJ6LnNvLiogJHtEfS8ke2Jhc2VfbGliZGlyfQorCQlsaWJuYW1lPWByZWFkbGluayAke0R9LyR7bGliZGlyfS9saWJ6LnNvYAorCQlsbiAtc2YgJHtAb2UucGF0aC5yZWxhdGl2ZSgiJHtsaWJkaXJ9IiwgIiR7YmFzZV9saWJkaXJ9Iil9LyRsaWJuYW1lICR7RH0ke2xpYmRpcn0vbGliei5zbworCWZpCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQtbmF0aXZlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQtbmF0aXZlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2NjOWZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1uYXRpdmUuaW5jCkBAIC0wLDAgKzEsNzAgQEAKK3JlcXVpcmUgYXB0LmluYworaW5oZXJpdCBuYXRpdmUKKworREVQRU5EUyArPSAiZHBrZy1uYXRpdmUgZ2V0dGV4dC1uYXRpdmUgZGItbmF0aXZlIGN1cmwtbmF0aXZlIHh6LW5hdGl2ZSIKK1BBQ0tBR0VTID0gIiIKK1VTRV9OTFMgPSAieWVzIgorCitTUkNfVVJJICs9ICJmaWxlOi8vZGJfbGlua2luZ19oYWNrLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLVJldmVydC1hbHdheXMtcnVuLWRwa2ctY29uZmlndXJlLWEtYXQtdGhlLWVuZC1vZi1vdXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtcmVtb3ZlLVdzdWdnZXN0LWF0dHJpYnV0ZS1mcm9tLUNGTEFHUy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1maXgtdGhlLWdjYy12ZXJzaW9uLWNoZWNrLnBhdGNoIFwKKyIKKworcHl0aG9uIGRvX2luc3RhbGwgKCkgeworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9faW5zdGFsbF9iYXNlJywgZCkKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2RvX2luc3RhbGxfY29uZmlnJywgZCkKK30KKworcHl0aG9uIGRvX2luc3RhbGxfY29uZmlnICgpIHsKKyAgICBpbmRpciA9IG9zLnBhdGguZGlybmFtZShkLmdldFZhcignRklMRScsMSkpCisgICAgaW5maWxlID0gZmlsZShvZS5wYXRoLmpvaW4oaW5kaXIsICdmaWxlcycsICdhcHQuY29uZicpLCAncicpCisgICAgZGF0YSA9IGluZmlsZS5yZWFkKCkKKyAgICBpbmZpbGUuY2xvc2UoKQorCisgICAgZGF0YSA9IGQuZXhwYW5kKGRhdGEpCisKKyAgICBvdXRkaXIgPSBvZS5wYXRoLmpvaW4oZC5nZXRWYXIoJ0QnLCBUcnVlKSwgZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgJ2FwdCcpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG91dGRpcik6CisgICAgICAgIG9zLm1ha2VkaXJzKG91dGRpcikKKworICAgIG91dHBhdGggPSBvZS5wYXRoLmpvaW4ob3V0ZGlyLCAnYXB0LmNvbmYuc2FtcGxlJykKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3V0cGF0aCk6CisgICAgICAgIG91dGZpbGUgPSBmaWxlKG91dHBhdGgsICd3JykKKyAgICAgICAgb3V0ZmlsZS53cml0ZShkYXRhKQorICAgICAgICBvdXRmaWxlLmNsb3NlKCkKK30KKworZG9faW5zdGFsbF9iYXNlICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1jZHJvbSAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWdldCAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWNvbmZpZyAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWNhY2hlICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9hcHQtc29ydHBrZ3MgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1leHRyYWN0dGVtcGxhdGVzICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9hcHQtZnRwYXJjaGl2ZSAke0R9JHtiaW5kaXJ9LworCisJb2VfbGliaW5zdGFsbCAtc28gLUMgYmluIGxpYmFwdC1wcml2YXRlICR7RH0ke2xpYmRpcn0vCisKKwlvZV9saWJpbnN0YWxsIC1zbyAtQyBiaW4gbGliYXB0LXBrZyRHTElCQ19WRVIkTElCU1REQ1BQX1ZFUiAke0R9JHtsaWJkaXJ9LworCW9lX2xpYmluc3RhbGwgLXNvIC1DIGJpbiBsaWJhcHQtaW5zdCRHTElCQ19WRVIkTElCU1REQ1BQX1ZFUiAke0R9JHtsaWJkaXJ9LworCisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L2FwdC9tZXRob2RzCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9tZXRob2RzLyogJHtEfSR7bGliZGlyfS9hcHQvbWV0aG9kcy8KKworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0CisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vZHNlbGVjdC9kZXNjLmFwdCAke0R9JHtsaWJkaXJ9L2Rwa2cvbWV0aG9kcy9hcHQvIAorCWluc3RhbGwgLW0gMDY0NCAke1N9L2RzZWxlY3QvbmFtZXMgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0LyAKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9kc2VsZWN0L2luc3RhbGwgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0LyAKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9kc2VsZWN0L3NldHVwICR7RH0ke2xpYmRpcn0vZHBrZy9tZXRob2RzL2FwdC8gCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vZHNlbGVjdC91cGRhdGUgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0LyAKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYXB0CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcHQvYXB0LmNvbmYuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYXB0L3ByZWZlcmVuY2VzLmQKKwlpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9hcHQvbGlzdHMvcGFydGlhbAorCWluc3RhbGwgLWQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvYXB0L2FyY2hpdmVzL3BhcnRpYWwKKworCWluc3RhbGwgLWQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbG9nL2FwdC8KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQtbmF0aXZlXzEuMC4xMC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1uYXRpdmVfMS4wLjEwLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU2NjBkYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQtbmF0aXZlXzEuMC4xMC4xLmJiCkBAIC0wLDAgKzEsNCBAQAorcmVxdWlyZSBhcHQtbmF0aXZlLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vbm9jb25maWd1cmUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL25vLWN1cmwucGF0Y2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LXBhY2thZ2UuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1wYWNrYWdlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTUzYWEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1wYWNrYWdlLmluYwpAQCAtMCwwICsxLDc4IEBACithcHQtbWFucGFnZXM9ImRvYy9hcHQtY2FjaGUuOCBcCisJICAgICAgZG9jL2FwdC1jZHJvbS44IFwKKwkgICAgICBkb2MvYXB0LWNvbmZpZy44IFwKKwkgICAgICBkb2MvYXB0LWdldC44IFwKKwkgICAgICBkb2MvYXB0LjggXAorCSAgICAgIGRvYy9hcHQuY29uZi41IFwKKwkgICAgICBkb2MvYXB0X3ByZWZlcmVuY2VzLjUgXAorCSAgICAgIGRvYy9zb3VyY2VzLmxpc3QuNSIKK2FwdC11dGlscy1tYW5wYWdlcz0iZG9jL2FwdC1leHRyYWN0dGVtcGxhdGVzLjEgXAorCQkgICAgZG9jL2FwdC1zb3J0cGtncy4xIgorCitkZWYgZ2V0X2ZpbGVzX2FwdF9kb2MoZCwgYmIsIG1hbnBhZ2VzKToKKyAgICBpbXBvcnQgcmUKKyAgICBtYW5wYWdlcyA9IHJlLnN1YihyJ1xiZG9jLyhcUyspLyhcUyspXC5cMVwuKC4pXGInLCByJyR7bWFuZGlyfS9cMS9tYW5cMy9cMi5cMycsIG1hbnBhZ2VzKQorICAgIG1hbnBhZ2VzID0gcmUuc3ViKHInXGJkb2MvKFxTKylcLiguKVxiJywgcicke21hbmRpcn0vbWFuXDIvXDEuXDInLCBtYW5wYWdlcykKKyAgICByZXR1cm4gbWFucGFnZXMKKworZGVmIGdldF9jb21tYW5kc19hcHRfZG9jKGQsIGJiLCBtYW5wYWdlcyk6CisgICAgcyA9IGxpc3QoKQorICAgIF9fZGlyX2NhY2hlX18gPSBsaXN0KCkKKyAgICBmb3IgbSBpbiBtYW5wYWdlcy5zcGxpdCgpOgorICAgICAgICBkZXN0ID0gZ2V0X2ZpbGVzX2FwdF9kb2MoZCwgYmIsIG0pCisgICAgICAgIGRpciA9IG9zLnBhdGguZGlybmFtZShkZXN0KQorICAgICAgICBpZiBub3QgZGlyIGluIF9fZGlyX2NhY2hlX186CisgICAgICAgICAgICBzLmFwcGVuZCgiaW5zdGFsbCAtZCAke0R9LyVzIiAlIGRpcikKKyAgICAgICAgICAgIF9fZGlyX2NhY2hlX18uYXBwZW5kKGRpcikKKyAgICAgICAgcy5hcHBlbmQoImluc3RhbGwgLW0gMDY0NCAlcyAke0R9LyVzIiAlIChtLCBkZXN0KSkKKyAgICByZXR1cm4gIlxuIi5qb2luKHMpCisKK1BBQ0tBR0VTICs9ICIke1BOfS11dGlscyAke1BOfS11dGlscy1kb2MiCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vYXB0LWNkcm9tICR7YmluZGlyfS9hcHQtZ2V0IFwKKwkgICAgICAgJHtiaW5kaXJ9L2FwdC1jb25maWcgJHtiaW5kaXJ9L2FwdC1jYWNoZSBcCisJICAgICAgICR7bGliZGlyfS9hcHQgJHtsaWJkaXJ9L2xpYmFwdCouc28uKiBcCisJICAgICAgICR7bG9jYWxzdGF0ZWRpcn0gJHtzeXNjb25mZGlyfSBcCisJICAgICAgICR7bGliZGlyfS9kcGtnIgorRklMRVNfJHtQTn0tdXRpbHMgPSAiJHtiaW5kaXJ9L2FwdC1zb3J0cGtncyAke2JpbmRpcn0vYXB0LWV4dHJhY3R0ZW1wbGF0ZXMiCitGSUxFU18ke1BOfS1kb2MgPSAiJHtAZ2V0X2ZpbGVzX2FwdF9kb2MoZCwgYmIsIGQuZ2V0VmFyKCdhcHQtbWFucGFnZXMnLCBUcnVlKSl9IFwKKwkJICAgJHtkb2NkaXJ9L2FwdCIKK0ZJTEVTXyR7UE59LXV0aWxzLWRvYyA9ICIke0BnZXRfZmlsZXNfYXB0X2RvYyhkLCBiYiwgZC5nZXRWYXIoJ2FwdC11dGlscy1tYW5wYWdlcycsIFRydWUpKX0iCitGSUxFU18ke1BOfS1kZXYgPSAiJHtsaWJkaXJ9L2xpYmFwdCouc28gJHtpbmNsdWRlZGlyfSIKKworZG9faW5zdGFsbCAoKSB7CisJc2V0IC14CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1IGJpbi9hcHQta2V5ICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9hcHQtY2Ryb20gJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1nZXQgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1jb25maWcgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1jYWNoZSAke0R9JHtiaW5kaXJ9LworCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9hcHQtc29ydHBrZ3MgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1leHRyYWN0dGVtcGxhdGVzICR7RH0ke2JpbmRpcn0vCisKKwlvZV9saWJpbnN0YWxsIC1zbyAtQyBiaW4gbGliYXB0LXBrZyAke0R9JHtsaWJkaXJ9CisJb2VfbGliaW5zdGFsbCAtc28gLUMgYmluIGxpYmFwdC1pbnN0ICR7RH0ke2xpYmRpcn0KKworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9hcHQvbWV0aG9kcworCWluc3RhbGwgLW0gMDc1NSBiaW4vbWV0aG9kcy8qICR7RH0ke2xpYmRpcn0vYXB0L21ldGhvZHMvCisKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vZHBrZy9tZXRob2RzL2FwdAorCWluc3RhbGwgLW0gMDY0NCAke1N9L2RzZWxlY3QvZGVzYy5hcHQgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0LyAKKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9kc2VsZWN0L25hbWVzICR7RH0ke2xpYmRpcn0vZHBrZy9tZXRob2RzL2FwdC8gCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vZHNlbGVjdC9pbnN0YWxsICR7RH0ke2xpYmRpcn0vZHBrZy9tZXRob2RzL2FwdC8gCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vZHNlbGVjdC9zZXR1cCAke0R9JHtsaWJkaXJ9L2Rwa2cvbWV0aG9kcy9hcHQvIAorCWluc3RhbGwgLW0gMDc1NSAke1N9L2RzZWxlY3QvdXBkYXRlICR7RH0ke2xpYmRpcn0vZHBrZy9tZXRob2RzL2FwdC8gCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwdAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYXB0L2FwdC5jb25mLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwdC9zb3VyY2VzLmxpc3QuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYXB0L3ByZWZlcmVuY2VzLmQKKwlpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9hcHQvbGlzdHMvcGFydGlhbAorCWluc3RhbGwgLWQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvYXB0L2FyY2hpdmVzL3BhcnRpYWwKKwlpbnN0YWxsIC1kICR7RH0ke2RvY2Rpcn0vYXB0L2V4YW1wbGVzCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vZG9jL2V4YW1wbGVzLyogJHtEfSR7ZG9jZGlyfS9hcHQvZXhhbXBsZXMvCisKKwlpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9L2FwdC1wa2cvCisJaW5zdGFsbCAtbSAwNjQ0IGluY2x1ZGUvYXB0LXBrZy8qLmggJHtEfSR7aW5jbHVkZWRpcn0vYXB0LXBrZy8KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI0OGI5YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQuaW5jCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiQWR2YW5jZWQgZnJvbnQtZW5kIGZvciBkcGtnIgorTElDRU5TRSA9ICJHUEx2Mi4wKyIKK1NFQ1RJT04gPSAiYmFzZSIKKworU1JDX1VSSSA9ICJodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi8yMDE1MDgwNVQwOTQ5MjhaL3Bvb2wvbWFpbi9hLyR7QlBOfS8ke0JQTn1fJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL3VzZS1ob3N0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21ha2VyYWNlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25vLW5scy1kcGtnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1nY2MtNC42LW51bGwtbm90LWRlZmluZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdHJ1bmNhdGUtZmlsZW5hbWUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9kb2MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZS1jb25maWd1cmUtaW4tbWFrZWZpbGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZS10ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjY1MDVjNDI5N2IzMzhhZGIyMDg3Y2U4N2JiYzRhMjc2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNmYjFkZTk1OTgzNjNjNDE2NTkxZDQ5ZTNjMjg1NDU4ZTA5NWIwMzVlNmMwNmQ1Yjk0NGE1NGUxNWZjOWI1NDMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkdQTDttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworRVhUUkFfQVVUT1JFQ09ORiA9ICItLWV4Y2x1ZGU9YXV0b3BvaW50LGF1dG9oZWFkZXIiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHJtIC1yZiAke1N9L2J1aWxkbGliL2NvbmZpZy5zdWIKKyAgICBybSAtcmYgJHtTfS9idWlsZGxpYi9jb25maWcuZ3Vlc3MKK30KKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vYXB0L21ldGhvZHMvLmRlYnVnLyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1SZXZlcnQtYWx3YXlzLXJ1bi1kcGtnLWNvbmZpZ3VyZS1hLWF0LXRoZS1lbmQtb2Ytb3VyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLVJldmVydC1hbHdheXMtcnVuLWRwa2ctY29uZmlndXJlLWEtYXQtdGhlLWVuZC1vZi1vdXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMzMDY5YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1SZXZlcnQtYWx3YXlzLXJ1bi1kcGtnLWNvbmZpZ3VyZS1hLWF0LXRoZS1lbmQtb2Ytb3VyLnBhdGNoCkBAIC0wLDAgKzEsMzc4IEBACitGcm9tIDEwNjc5N2YxYzY2ZmE1NzhkYWQyMWZkOTM4MGJmOWQ1NzY1NzNkZmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDIyIE1heSAyMDE1IDA4OjA1OjE1ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIFJldmVydCAiYWx3YXlzIHJ1biAnZHBrZyAtLWNvbmZpZ3VyZSAtYScgYXQgdGhlIGVuZCBvZiBvdXIKKyBkcGtnIGNhbGxpbmdzIgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitUaGlzIHJldmVydHMgY29tbWl0IGEyYTc1ZmY0NTE2Zjc2MDlmNGM1NWI0MjI3MGFiYjhkMDg5NDNjNjAsIHdoaWNoCithbHdheXMgcnVuICdkcGtnIC0tY29uZmlndXJlIC1hJyBhdCB0aGUgZW5kIG9mIG91ciBkcGtnIGNhbGxpbmdzLAorYnV0IGl0IGRvZXMgbm90IHdvcmsgZm9yIGNyb3NzLWNvbXBpbGUsIHNpbmNlIHRoZSByb290ZnMgZGlyIGNhbiBub3QKK2JlIHBhc3NlZCBpbnRvIGRwa2csIGFuZCBsZWFkIHRvIHRoZSBiZWxvdyBzaW1pbGFyIGVycm9yOgorICAgLS0tLS0tLQorICAgfG1rZGlyOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAnL3Vzci9saWIvb3BrZyc6IFBlcm1pc3Npb24gZGVuaWVkCisgICAtLS0tLS0tCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGFwdC1wa2cvZGViL2Rwa2dwbS5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkgKy0tCisgdGVzdC9pbnRlZ3JhdGlvbi9mcmFtZXdvcmsgICAgICAgICAgICAgICAgICAgICAgICAgfCAyNSArKysrLS0tLQorIHRlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQgICAgICAgICAgICAgIHwgNjcgKysrKysrKysrLS0tLS0tLS0tLQorIHRlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQtZGViODIyICAgICAgIHwgMTggKystLS0tCisgdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1lcnJvciAgICAgICAgfCAgMiArLQorIC4uLmVzdC1idWctNzY5NjA5LXRyaWdnZXJzLXN0aWxsLXBlbmRpbmctYWZ0ZXItcnVuIHwgNzUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIC4uLi90ZXN0LW5vLWZkcy1sZWFrZWQtdG8tbWFpbnRhaW5lci1zY3JpcHRzICAgICAgIHwgIDYgKy0KKyA3IGZpbGVzIGNoYW5nZWQsIDU2IGluc2VydGlvbnMoKyksIDE0NiBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA3NTUgdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWJ1Zy03Njk2MDktdHJpZ2dlcnMtc3RpbGwtcGVuZGluZy1hZnRlci1ydW4KKworZGlmZiAtLWdpdCBhL2FwdC1wa2cvZGViL2Rwa2dwbS5jYyBiL2FwdC1wa2cvZGViL2Rwa2dwbS5jYworaW5kZXggYjE4N2VmYi4uZjI2OTc2NCAxMDA2NDQKKy0tLSBhL2FwdC1wa2cvZGViL2Rwa2dwbS5jYworKysrIGIvYXB0LXBrZy9kZWIvZHBrZ3BtLmNjCitAQCAtMTA0OSwxMiArMTA0OSw2IEBAIHZvaWQgcGtnRFBrZ1BNOjpCdWlsZFBhY2thZ2VzUHJvZ3Jlc3NNYXAoKQorIAkgUGFja2FnZXNUb3RhbCsrOworICAgICAgIH0KKyAgICB9CistICAgLyogb25lIGV4dHJhOiBXZSBkb24ndCB3YW50IHRoZSBwcm9ncmVzcyBiYXIgdG8gcmVhY2ggMTAwJSwgZXNwZWNpYWxseSBub3QKKy0gICAgICBpZiB3ZSBjYWxsIGRwa2cgLS1jb25maWd1cmUgLS1wZW5kaW5nIGFuZCBwcm9jZXNzIGEgYnVuY2ggb2YgdHJpZ2dlcnMKKy0gICAgICB3aGlsZSBzaG93aW5nIDEwMCUuIEFsc28sIHNwaW5kb3duIHRha2VzIGEgd2hpbGUsIHNvIG5ldmVyIHJlYWNoaW5nIDEwMCUKKy0gICAgICBpcyB3YXkgbW9yZSBjb3JyZWN0IHRoYW4gcmVhY2hpbmcgMTAwJSB3aGlsZSBzdGlsbCBkb2luZyBzdHVmZiBldmVuIGlmCistICAgICAgZG9pbmcgaXQgdGhpcyB3YXkgaXMgc2xpZ2h0bHkgYmVuZGluZyB0aGUgcnVsZXMgKi8KKy0gICArK1BhY2thZ2VzVG90YWw7CisgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qfX19Ki8KKyAjaWYgKEFQVF9QS0dfTUFKT1IgPj0gNCAmJiBBUFRfUEtHX01JTk9SIDwgMTMpCitAQCAtMTI5NCw4ICsxMjg4LDkgQEAgYm9vbCBwa2dEUGtnUE06OkdvTm9BQklCcmVhayhBUFQ6OlByb2dyZXNzOjpQYWNrYWdlTWFuYWdlciAqcHJvZ3Jlc3MpCisgCisgICAgLy8gc3VwcG9ydCBzdWJwcmVzc2luZyBvZiB0cmlnZ2VycyBwcm9jZXNzaW5nIGZvciBzcGVjaWFsCisgICAgLy8gY2FzZXMgbGlrZSBkLWkgdGhhdCBydW5zIHRoZSB0cmlnZ2VycyBoYW5kbGluZyBtYW51YWxseQorKyAgIGJvb2wgY29uc3QgU21hcnRDb25mID0gKF9jb25maWctPkZpbmQoIlBhY2thZ2VNYW5hZ2VyOjpDb25maWd1cmUiLCAiYWxsIikgIT0gImFsbCIpOworICAgIGJvb2wgY29uc3QgVHJpZ2dlcnNQZW5kaW5nID0gX2NvbmZpZy0+RmluZEIoIkRQa2c6OlRyaWdnZXJzUGVuZGluZyIsIGZhbHNlKTsKKy0gICBpZiAoX2NvbmZpZy0+RmluZEIoIkRQa2c6OkNvbmZpZ3VyZVBlbmRpbmciLCB0cnVlKSA9PSB0cnVlKQorKyAgIGlmIChfY29uZmlnLT5GaW5kQigiRFBrZzo6Q29uZmlndXJlUGVuZGluZyIsIFNtYXJ0Q29uZikgPT0gdHJ1ZSkKKyAgICAgICBMaXN0LnB1c2hfYmFjayhJdGVtKEl0ZW06OkNvbmZpZ3VyZVBlbmRpbmcsIFBrZ0l0ZXJhdG9yKCkpKTsKKyAKKyAgICAvLyBmb3IgdGhlIHByb2dyZXNzCitkaWZmIC0tZ2l0IGEvdGVzdC9pbnRlZ3JhdGlvbi9mcmFtZXdvcmsgYi90ZXN0L2ludGVncmF0aW9uL2ZyYW1ld29yaworaW5kZXggNzBhZDM4MS4uMDA2NzJhZCAxMDA2NDQKKy0tLSBhL3Rlc3QvaW50ZWdyYXRpb24vZnJhbWV3b3JrCisrKysgYi90ZXN0L2ludGVncmF0aW9uL2ZyYW1ld29yaworQEAgLTExNzgsMTMgKzExNzgsMTAgQEAgdGVzdG5vcGFja2FnZSgpIHsKKyAJZmkKKyB9CisgCistdGVzdGRwa2dzdGF0dXMoKSB7CistCWxvY2FsIFNUQVRFPSIkMSIKKy0JbG9jYWwgTlI9IiQyIgorLQlzaGlmdCAyCistCW1zZ3Rlc3QgIlRlc3QgdGhhdCAkTlIgcGFja2FnZShzKSBhcmUgaW4gc3RhdGUgJFNUQVRFIHdpdGgiICJkcGtnIC1sICQqIgorLQlsb2NhbCBQS0dTPSIkKGRwa2cgLWwgIiRAIiAyPi9kZXYvbnVsbCB8IGdyZXAgIl4ke1NUQVRFfSIgfCB3YyAtbCkiCistCWlmIFsgIiRQS0dTIiAhPSAkTlIgXTsgdGhlbgorK3Rlc3RkcGtnaW5zdGFsbGVkKCkgeworKwltc2d0ZXN0ICJUZXN0IGZvciBjb3JyZWN0bHkgaW5zdGFsbGVkIHBhY2thZ2Uocykgd2l0aCIgImRwa2cgLWwgJCoiCisrCWxvY2FsIFBLR1M9IiQoZHBrZyAtbCAiJEAiIDI+L2Rldi9udWxsIHwgZ3JlcCAnXmknIHwgd2MgLWwpIgorKwlpZiBbICIkUEtHUyIgIT0gJCMgXTsgdGhlbgorIAkJZWNobyA+JjIgJFBLR1MKKyAJCWRwa2cgLWwgIiRAIiB8IGdyZXAgJ15bYS16XScgPiYyCisgCQltc2dmYWlsCitAQCAtMTE5MywxMiArMTE5MCwxNiBAQCB0ZXN0ZHBrZ3N0YXR1cygpIHsKKyAJZmkKKyB9CisgCistdGVzdGRwa2dpbnN0YWxsZWQoKSB7CistCXRlc3RkcGtnc3RhdHVzICdpaScgIiQjIiAiJEAiCistfQorLQorIHRlc3RkcGtnbm90aW5zdGFsbGVkKCkgeworLQl0ZXN0ZHBrZ3N0YXR1cyAnaWknICcwJyAiJEAiCisrCW1zZ3Rlc3QgIlRlc3QgZm9yIGNvcnJlY3RseSBub3QtaW5zdGFsbGVkIHBhY2thZ2Uocykgd2l0aCIgImRwa2cgLWwgJCoiCisrCWxvY2FsIFBLR1M9IiQoZHBrZyAtbCAiJEAiIDI+IC9kZXYvbnVsbCB8IGdyZXAgJ15pJyB8IHdjIC1sKSIKKysJaWYgWyAiJFBLR1MiICE9IDAgXTsgdGhlbgorKwkJZWNobworKwkJZHBrZyAtbCAiJEAiIHwgZ3JlcCAnXlthLXpdJyA+JjIKKysJCW1zZ2ZhaWwKKysJZWxzZQorKwkJbXNncGFzcworKwlmaQorIH0KKyAKKyB0ZXN0bWFya2VkYXV0bygpIHsKK2RpZmYgLS1naXQgYS90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZAoraW5kZXggNjhjYzA0My4uZDcyZTdlNyAxMDA3NTUKKy0tLSBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQKKysrKyBiL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQKK0BAIC0xOSwxNCArMTksMTMgQEAgdGVzdGVxdWFsICJkbHN0YXR1czoxOjA6UmV0cmlldmluZyBmaWxlIDEgb2YgMQorIGRsc3RhdHVzOjE6MDpSZXRyaWV2aW5nIGZpbGUgMSBvZiAxCisgcG1zdGF0dXM6ZHBrZy1leGVjOjA6UnVubmluZyBkcGtnCisgcG1zdGF0dXM6dGVzdGluZzowOkluc3RhbGxpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzoxNi42NjY3OlByZXBhcmluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjMzLjMzMzM6VW5wYWNraW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6NTA6UHJlcGFyaW5nIHRvIGNvbmZpZ3VyZSB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czpkcGtnLWV4ZWM6NTA6UnVubmluZyBkcGtnCistcG1zdGF0dXM6dGVzdGluZzo1MDpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjY2LjY2Njc6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzo4My4zMzMzOkluc3RhbGxlZCB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czpkcGtnLWV4ZWM6ODMuMzMzMzpSdW5uaW5nIGRwa2ciIGNhdCBhcHQtcHJvZ3Jlc3MubG9nCisrcG1zdGF0dXM6dGVzdGluZzoyMDpQcmVwYXJpbmcgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzo0MDpVbnBhY2tpbmcgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzo2MDpQcmVwYXJpbmcgdG8gY29uZmlndXJlIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOmRwa2ctZXhlYzo2MDpSdW5uaW5nIGRwa2cKKytwbXN0YXR1czp0ZXN0aW5nOjYwOkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOnRlc3Rpbmc6ODA6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzoxMDA6SW5zdGFsbGVkIHRlc3RpbmcgKGFtZDY0KSIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKKyAKKyAjIHVwZ3JhZGUKKyBleGVjIDM+IGFwdC1wcm9ncmVzcy5sb2cKK0BAIC0zNSwxNCArMzQsMTMgQEAgdGVzdGVxdWFsICJkbHN0YXR1czoxOjA6UmV0cmlldmluZyBmaWxlIDEgb2YgMQorIGRsc3RhdHVzOjE6MDpSZXRyaWV2aW5nIGZpbGUgMSBvZiAxCisgcG1zdGF0dXM6ZHBrZy1leGVjOjA6UnVubmluZyBkcGtnCisgcG1zdGF0dXM6dGVzdGluZzowOkluc3RhbGxpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzoxNi42NjY3OlByZXBhcmluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjMzLjMzMzM6VW5wYWNraW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6NTA6UHJlcGFyaW5nIHRvIGNvbmZpZ3VyZSB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czpkcGtnLWV4ZWM6NTA6UnVubmluZyBkcGtnCistcG1zdGF0dXM6dGVzdGluZzo1MDpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjY2LjY2Njc6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzo4My4zMzMzOkluc3RhbGxlZCB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czpkcGtnLWV4ZWM6ODMuMzMzMzpSdW5uaW5nIGRwa2ciIGNhdCBhcHQtcHJvZ3Jlc3MubG9nCisrcG1zdGF0dXM6dGVzdGluZzoyMDpQcmVwYXJpbmcgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzo0MDpVbnBhY2tpbmcgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzo2MDpQcmVwYXJpbmcgdG8gY29uZmlndXJlIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOmRwa2ctZXhlYzo2MDpSdW5uaW5nIGRwa2cKKytwbXN0YXR1czp0ZXN0aW5nOjYwOkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOnRlc3Rpbmc6ODA6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzoxMDA6SW5zdGFsbGVkIHRlc3RpbmcgKGFtZDY0KSIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKKyAKKyAjIHJlaW5zdGFsbAorIGV4ZWMgMz4gYXB0LXByb2dyZXNzLmxvZworQEAgLTUxLDI0ICs0OSwyMiBAQCB0ZXN0ZXF1YWwgImRsc3RhdHVzOjE6MDpSZXRyaWV2aW5nIGZpbGUgMSBvZiAxCisgZGxzdGF0dXM6MTowOlJldHJpZXZpbmcgZmlsZSAxIG9mIDEKKyBwbXN0YXR1czpkcGtnLWV4ZWM6MDpSdW5uaW5nIGRwa2cKKyBwbXN0YXR1czp0ZXN0aW5nOjA6SW5zdGFsbGluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjE2LjY2Njc6UHJlcGFyaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6MzMuMzMzMzpVbnBhY2tpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzo1MDpQcmVwYXJpbmcgdG8gY29uZmlndXJlIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOmRwa2ctZXhlYzo1MDpSdW5uaW5nIGRwa2cKKy1wbXN0YXR1czp0ZXN0aW5nOjUwOkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6NjYuNjY2NzpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjgzLjMzMzM6SW5zdGFsbGVkIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOmRwa2ctZXhlYzo4My4zMzMzOlJ1bm5pbmcgZHBrZyIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKKytwbXN0YXR1czp0ZXN0aW5nOjIwOlByZXBhcmluZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjQwOlVucGFja2luZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjYwOlByZXBhcmluZyB0byBjb25maWd1cmUgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6ZHBrZy1leGVjOjYwOlJ1bm5pbmcgZHBrZworK3Btc3RhdHVzOnRlc3Rpbmc6NjA6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzo4MDpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjEwMDpJbnN0YWxsZWQgdGVzdGluZyAoYW1kNjQpIiBjYXQgYXB0LXByb2dyZXNzLmxvZworIAorICMgYW5kIHJlbW92ZQorIGV4ZWMgMz4gYXB0LXByb2dyZXNzLmxvZworIHRlc3RzdWNjZXNzIGFwdGdldCByZW1vdmUgdGVzdGluZyAteSAtbyBBUFQ6OlN0YXR1cy1GZD0zCisgdGVzdGVxdWFsICJwbXN0YXR1czpkcGtnLWV4ZWM6MDpSdW5uaW5nIGRwa2cKKyBwbXN0YXR1czp0ZXN0aW5nOjA6UmVtb3ZpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzoyNTpQcmVwYXJpbmcgZm9yIHJlbW92YWwgb2YgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzo1MDpSZW1vdmluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjc1OlJlbW92ZWQgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6ZHBrZy1leGVjOjc1OlJ1bm5pbmcgZHBrZyIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKKytwbXN0YXR1czp0ZXN0aW5nOjMzLjMzMzM6UHJlcGFyaW5nIGZvciByZW1vdmFsIG9mIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOnRlc3Rpbmc6NjYuNjY2NzpSZW1vdmluZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjEwMDpSZW1vdmVkIHRlc3RpbmcgKGFtZDY0KSIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKKyAKKyAjIGluc3RhbGwgbm9uLW5hdGl2ZSBhbmQgZW5zdXJlIHdlIGdldCBwcm9wZXIgcHJvZ3Jlc3MgaW5mbworIGV4ZWMgMz4gYXB0LXByb2dyZXNzLmxvZworQEAgLTc5LDEzICs3NSwxMiBAQCB0ZXN0ZXF1YWwgImRsc3RhdHVzOjE6MDpSZXRyaWV2aW5nIGZpbGUgMSBvZiAxCisgZGxzdGF0dXM6MTowOlJldHJpZXZpbmcgZmlsZSAxIG9mIDEKKyBwbXN0YXR1czpkcGtnLWV4ZWM6MDpSdW5uaW5nIGRwa2cKKyBwbXN0YXR1czp0ZXN0aW5nMjowOkluc3RhbGxpbmcgdGVzdGluZzIgKGkzODYpCistcG1zdGF0dXM6dGVzdGluZzI6MTYuNjY2NzpQcmVwYXJpbmcgdGVzdGluZzIgKGkzODYpCistcG1zdGF0dXM6dGVzdGluZzI6MzMuMzMzMzpVbnBhY2tpbmcgdGVzdGluZzIgKGkzODYpCistcG1zdGF0dXM6dGVzdGluZzI6NTA6UHJlcGFyaW5nIHRvIGNvbmZpZ3VyZSB0ZXN0aW5nMiAoaTM4NikKKy1wbXN0YXR1czpkcGtnLWV4ZWM6NTA6UnVubmluZyBkcGtnCistcG1zdGF0dXM6dGVzdGluZzI6NTA6Q29uZmlndXJpbmcgdGVzdGluZzIgKGkzODYpCistcG1zdGF0dXM6dGVzdGluZzI6NjYuNjY2NzpDb25maWd1cmluZyB0ZXN0aW5nMiAoaTM4NikKKy1wbXN0YXR1czp0ZXN0aW5nMjo4My4zMzMzOkluc3RhbGxlZCB0ZXN0aW5nMiAoaTM4NikKKy1wbXN0YXR1czpkcGtnLWV4ZWM6ODMuMzMzMzpSdW5uaW5nIGRwa2ciIGNhdCBhcHQtcHJvZ3Jlc3MubG9nCisrcG1zdGF0dXM6dGVzdGluZzI6MjA6UHJlcGFyaW5nIHRlc3RpbmcyIChpMzg2KQorK3Btc3RhdHVzOnRlc3RpbmcyOjQwOlVucGFja2luZyB0ZXN0aW5nMiAoaTM4NikKKytwbXN0YXR1czp0ZXN0aW5nMjo2MDpQcmVwYXJpbmcgdG8gY29uZmlndXJlIHRlc3RpbmcyIChpMzg2KQorK3Btc3RhdHVzOmRwa2ctZXhlYzo2MDpSdW5uaW5nIGRwa2cKKytwbXN0YXR1czp0ZXN0aW5nMjo2MDpDb25maWd1cmluZyB0ZXN0aW5nMiAoaTM4NikKKytwbXN0YXR1czp0ZXN0aW5nMjo4MDpDb25maWd1cmluZyB0ZXN0aW5nMiAoaTM4NikKKytwbXN0YXR1czp0ZXN0aW5nMjoxMDA6SW5zdGFsbGVkIHRlc3RpbmcyIChpMzg2KSIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKKyAKKyBybSAtZiBhcHQtcHJvZ3Jlc3MqLmxvZworZGlmZiAtLWdpdCBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQtZGViODIyIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1kZWI4MjIKK2luZGV4IGJhZGM5ODUuLjlkMjI3OTQgMTAwNzU1CistLS0gYS90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkLWRlYjgyMgorKysrIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1kZWI4MjIKK0BAIC0yNyw0MSArMjcsMzcgQEAgTWVzc2FnZTogSW5zdGFsbGluZyB0ZXN0aW5nIChhbWQ2NCkKKyAKKyBTdGF0dXM6IHByb2dyZXNzCisgUGFja2FnZTogdGVzdGluZzphbWQ2NAorLVBlcmNlbnQ6IDE2LjY2NjcKKytQZXJjZW50OiAyMAorIE1lc3NhZ2U6IFByZXBhcmluZyB0ZXN0aW5nIChhbWQ2NCkKKyAKKyBTdGF0dXM6IHByb2dyZXNzCisgUGFja2FnZTogdGVzdGluZzphbWQ2NAorLVBlcmNlbnQ6IDMzLjMzMzMKKytQZXJjZW50OiA0MAorIE1lc3NhZ2U6IFVucGFja2luZyB0ZXN0aW5nIChhbWQ2NCkKKyAKKyBTdGF0dXM6IHByb2dyZXNzCisgUGFja2FnZTogdGVzdGluZzphbWQ2NAorLVBlcmNlbnQ6IDUwCisrUGVyY2VudDogNjAKKyBNZXNzYWdlOiBQcmVwYXJpbmcgdG8gY29uZmlndXJlIHRlc3RpbmcgKGFtZDY0KQorIAorIFN0YXR1czogcHJvZ3Jlc3MKKy1QZXJjZW50OiA1MAorK1BlcmNlbnQ6IDYwCisgTWVzc2FnZTogUnVubmluZyBkcGtnCisgCisgU3RhdHVzOiBwcm9ncmVzcworIFBhY2thZ2U6IHRlc3Rpbmc6YW1kNjQKKy1QZXJjZW50OiA1MAorK1BlcmNlbnQ6IDYwCisgTWVzc2FnZTogQ29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCisgCisgU3RhdHVzOiBwcm9ncmVzcworIFBhY2thZ2U6IHRlc3Rpbmc6YW1kNjQKKy1QZXJjZW50OiA2Ni42NjY3CisrUGVyY2VudDogODAKKyBNZXNzYWdlOiBDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKyAKKyBTdGF0dXM6IHByb2dyZXNzCisgUGFja2FnZTogdGVzdGluZzphbWQ2NAorLVBlcmNlbnQ6IDgzLjMzMzMKKytQZXJjZW50OiAxMDAKKyBNZXNzYWdlOiBJbnN0YWxsZWQgdGVzdGluZyAoYW1kNjQpCistCistU3RhdHVzOiBwcm9ncmVzcworLVBlcmNlbnQ6IDgzLjMzMzMKKy1NZXNzYWdlOiBSdW5uaW5nIGRwa2cKKyAiIGNhdCBhcHQtcHJvZ3Jlc3MubG9nCisgCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1lcnJvciBiL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQtZXJyb3IKK2luZGV4IDYzMjMwMDcuLmE0NzA5NWIgMTAwNzU1CistLS0gYS90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkLWVycm9yCisrKysgYi90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkLWVycm9yCitAQCAtMTgsNyArMTgsNyBAQCBzZXR1cGFwdGFyY2hpdmUKKyBleGVjIDM+IGFwdC1wcm9ncmVzcy5sb2cKKyB0ZXN0ZmFpbHVyZSBhcHRnZXQgaW5zdGFsbCBmb28xIGZvbzIgLXkgLW8gQVBUOjpTdGF0dXMtRmQ9MworIG1zZ3Rlc3QgIkVuc3VyZSBjb3JyZWN0IGVycm9yIG1lc3NhZ2UiCistaWYgZ3JlcCAtcSAiYXB0YXJjaGl2ZS9wb29sL2ZvbzJfMC44LjE1X2FtZDY0LmRlYjozNi4zNjM2OnRyeWluZyB0byBvdmVyd3JpdGUgJy91c3IvYmluL2ZpbGUtY29uZmxpY3QnLCB3aGljaCBpcyBhbHNvIGluIHBhY2thZ2UgZm9vMSAwLjguMTUiIGFwdC1wcm9ncmVzcy5sb2c7IHRoZW4KKytpZiBncmVwIC1xICJhcHRhcmNoaXZlL3Bvb2wvZm9vMl8wLjguMTVfYW1kNjQuZGViOjQwOnRyeWluZyB0byBvdmVyd3JpdGUgJy91c3IvYmluL2ZpbGUtY29uZmxpY3QnLCB3aGljaCBpcyBhbHNvIGluIHBhY2thZ2UgZm9vMSAwLjguMTUiIGFwdC1wcm9ncmVzcy5sb2c7IHRoZW4KKyAJbXNncGFzcworIGVsc2UKKyAJY2F0IGFwdC1wcm9ncmVzcy5sb2cKK2RpZmYgLS1naXQgYS90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYnVnLTc2OTYwOS10cmlnZ2Vycy1zdGlsbC1wZW5kaW5nLWFmdGVyLXJ1biBiL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1idWctNzY5NjA5LXRyaWdnZXJzLXN0aWxsLXBlbmRpbmctYWZ0ZXItcnVuCitkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKK2luZGV4IDE0NmZhNzYuLjAwMDAwMDAKKy0tLSBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1idWctNzY5NjA5LXRyaWdnZXJzLXN0aWxsLXBlbmRpbmctYWZ0ZXItcnVuCisrKysgL2Rldi9udWxsCitAQCAtMSw3NSArMCwwIEBACistIyEvYmluL3NoCistc2V0IC1lCistCistVEVTVERJUj0kKHJlYWRsaW5rIC1mICQoZGlybmFtZSAkMCkpCistLiAkVEVTVERJUi9mcmFtZXdvcmsKKy0KKy1zZXR1cGVudmlyb25tZW50CistY29uZmlnYXJjaGl0ZWN0dXJlICdhbWQ2NCcKKy0KKy1tc2d0ZXN0ICdDaGVjayBpZiBpbnN0YWxsZWQgZHBrZyBzdXBwb3J0cycgJ25vYXdhaXQgdHJpZ2dlcicKKy1pZiBkcGtnLWNoZWNrYnVpbGRkZXBzIC1kICdkcGtnICg+PSAxLjE2LjEpJyAvZGV2L251bGw7IHRoZW4KKy0JbXNncGFzcworLWVsc2UKKy0JbXNnc2tpcCAnZHBrZyB2ZXJzaW9uIHRvbyBvbGQnCistCWV4aXQgMAorLWZpCistY29uZmlnZHBrZ25vb3BjaHJvb3QKKy0KKy1idWlsZHRyaWdnZXJwYWNrYWdlcygpIHsKKy0JbG9jYWwgVFlQRT0iJDEiCistCXNldHVwc2ltcGxlbmF0aXZlcGFja2FnZSAidHJpZ2dlcmFibGUtJFRZUEUiICdhbGwnICcxLjAnICd1bnN0YWJsZScgIkRlcGVuZHM6IHRyaWdkZXBlbmRzLSRUWVBFIgorLQlCVUlMRERJUj0iaW5jb21pbmcvdHJpZ2dlcmFibGUtJHtUWVBFfS0xLjAiCistCWNhdCA+JHtCVUlMRERJUn0vZGViaWFuL3Bvc3RpbnN0IDw8RU9GCistIyEvYmluL3NoCistaWYgWyAiXCQxIiA9ICd0cmlnZ2VyZWQnIF07IHRoZW4KKy0JbHMgLWwgL3Byb2Mvc2VsZi9mZC8KKy1maQorLUVPRgorLQllY2hvICIkVFlQRSAvdXNyL3NoYXJlL2RvYyIgPiAke0JVSUxERElSfS9kZWJpYW4vdHJpZ2dlcnMKKy0JYnVpbGRwYWNrYWdlICIkQlVJTERESVIiICd1bnN0YWJsZScgJ21haW4nICduYXRpdmUnCistCXJtIC1yZiAiJEJVSUxERElSIgorLQlidWlsZHNpbXBsZW5hdGl2ZXBhY2thZ2UgInRyaWdkZXBlbmRzLSRUWVBFIiAnYWxsJyAnMS4wJyAndW5zdGFibGUnCistfQorLQorLSNidWlsZHRyaWdnZXJwYWNrYWdlcyAnaW50ZXJlc3QnCistYnVpbGR0cmlnZ2VycGFja2FnZXMgJ2ludGVyZXN0LW5vYXdhaXQnCistYnVpbGRzaW1wbGVuYXRpdmVwYWNrYWdlICJ0cmlnc3R1ZmYiICdhbGwnICcxLjAnICd1bnN0YWJsZScKKy0KKy1zZXR1cGFwdGFyY2hpdmUKKy0KKy1ydW50ZXN0cygpIHsKKy0JbG9jYWwgVFlQRT0iJDEiCistCW1zZ21zZyAnV29ya2luZyB3aXRoIHRyaWdnZXIgdHlwZScgIiRUWVBFIgorLQl0ZXN0c3VjY2VzcyBhcHRnZXQgaW5zdGFsbCB0cmlnZ2VyYWJsZS0kVFlQRSAteQorLQljcCByb290ZGlyL3RtcC90ZXN0c3VjY2Vzcy5vdXRwdXQgdGVybWluYWwub3V0cHV0CistCXRlc3RzdWNjZXNzIGdyZXAgJ15SRVdSSVRFICcgdGVybWluYWwub3V0cHV0CistCXRlc3RkcGtnaW5zdGFsbGVkIHRyaWdnZXJhYmxlLSRUWVBFIHRyaWdkZXBlbmRzLSRUWVBFCistCistCXRlc3RzdWNjZXNzIGFwdGdldCBpbnN0YWxsIHRyaWdkZXBlbmRzLSRUWVBFIC15IC0tcmVpbnN0YWxsCistCWNwIHJvb3RkaXIvdG1wL3Rlc3RzdWNjZXNzLm91dHB1dCB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdHN1Y2Nlc3MgZ3JlcCAnXlJFV1JJVEUgJyB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdHN1Y2Nlc3MgZ3JlcCAnIHJvb3Qgcm9vdCAnIHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0ZHBrZ2luc3RhbGxlZCB0cmlnZ2VyYWJsZS0kVFlQRSB0cmlnZGVwZW5kcy0kVFlQRQorLQorLQl0ZXN0c3VjY2VzcyBhcHRnZXQgaW5zdGFsbCB0cmlnc3R1ZmYgLXkKKy0JY3Agcm9vdGRpci90bXAvdGVzdHN1Y2Nlc3Mub3V0cHV0IHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0c3VjY2VzcyBncmVwICdeUkVXUklURSAnIHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0c3VjY2VzcyBncmVwICcgcm9vdCByb290ICcgdGVybWluYWwub3V0cHV0CistCXRlc3RkcGtnaW5zdGFsbGVkIHRyaWdnZXJhYmxlLSRUWVBFIHRyaWdkZXBlbmRzLSRUWVBFIHRyaWdzdHVmZgorLQorLQl0ZXN0c3VjY2VzcyBhcHRnZXQgcHVyZ2UgdHJpZ3N0dWZmIC15CistCWNwIHJvb3RkaXIvdG1wL3Rlc3RzdWNjZXNzLm91dHB1dCB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdHN1Y2Nlc3MgZ3JlcCAnXlJFV1JJVEUgJyB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdHN1Y2Nlc3MgZ3JlcCAnIHJvb3Qgcm9vdCAnIHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0ZHBrZ2luc3RhbGxlZCB0cmlnZ2VyYWJsZS0kVFlQRSB0cmlnZGVwZW5kcy0kVFlQRQorLQl0ZXN0ZHBrZ25vdGluc3RhbGxlZCB0cmlnc3R1ZmYKKy0KKy0JdGVzdHN1Y2Nlc3MgYXB0Z2V0IHB1cmdlIHRyaWdkZXBlbmRzLSRUWVBFIC15CistCWNwIHJvb3RkaXIvdG1wL3Rlc3RzdWNjZXNzLm91dHB1dCB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdGZhaWx1cmUgZ3JlcCAnXlJFV1JJVEUgJyB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdGZhaWx1cmUgZ3JlcCAnIHJvb3Qgcm9vdCAnIHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0ZHBrZ25vdGluc3RhbGxlZCB0cmlnZ2VyYWJsZS0kVFlQRSB0cmlnZGVwZW5kcy0kVFlQRQorLX0KKy0jcnVudGVzdHMgJ2ludGVyZXN0JworLXJ1bnRlc3RzICdpbnRlcmVzdC1ub2F3YWl0JworZGlmZiAtLWdpdCBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1uby1mZHMtbGVha2VkLXRvLW1haW50YWluZXItc2NyaXB0cyBiL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1uby1mZHMtbGVha2VkLXRvLW1haW50YWluZXItc2NyaXB0cworaW5kZXggNDFjMDU3MC4uZDM5NjBkNyAxMDA3NTUKKy0tLSBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1uby1mZHMtbGVha2VkLXRvLW1haW50YWluZXItc2NyaXB0cworKysrIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LW5vLWZkcy1sZWFrZWQtdG8tbWFpbnRhaW5lci1zY3JpcHRzCitAQCAtNTksOCArNTksNyBAQCBzdGFydHVwIHBhY2thZ2VzIGNvbmZpZ3VyZQorIGNvbmZpZ3VyZSAkUEtHTkFNRSAxLjAgPG5vbmU+Cisgc3RhdHVzIHVucGFja2VkICRQS0dOQU1FIDEuMAorIHN0YXR1cyBoYWxmLWNvbmZpZ3VyZWQgJFBLR05BTUUgMS4wCistc3RhdHVzIGluc3RhbGxlZCAkUEtHTkFNRSAxLjAKKy1zdGFydHVwIHBhY2thZ2VzIGNvbmZpZ3VyZSIgY3V0IC1mIDMtIC1kJyAnIHJvb3RkaXIvdmFyL2xvZy9kcGtnLmxvZworK3N0YXR1cyBpbnN0YWxsZWQgJFBLR05BTUUgMS4wIiBjdXQgLWYgMy0gLWQnICcgcm9vdGRpci92YXIvbG9nL2Rwa2cubG9nCisgfQorIGNoZWNraW5zdGFsbAorIAorQEAgLTg1LDggKzg0LDcgQEAgc3RhdHVzIGNvbmZpZy1maWxlcyAkUEtHTkFNRSAxLjAKKyBzdGF0dXMgY29uZmlnLWZpbGVzICRQS0dOQU1FIDEuMAorIHN0YXR1cyBjb25maWctZmlsZXMgJFBLR05BTUUgMS4wCisgc3RhdHVzIGNvbmZpZy1maWxlcyAkUEtHTkFNRSAxLjAKKy1zdGF0dXMgbm90LWluc3RhbGxlZCAkUEtHTkFNRSA8bm9uZT4KKy1zdGFydHVwIHBhY2thZ2VzIGNvbmZpZ3VyZSIgY3V0IC1mIDMtIC1kJyAnIHJvb3RkaXIvdmFyL2xvZy9kcGtnLmxvZworK3N0YXR1cyBub3QtaW5zdGFsbGVkICRQS0dOQU1FIDxub25lPiIgY3V0IC1mIDMtIC1kJyAnIHJvb3RkaXIvdmFyL2xvZy9kcGtnLmxvZworIH0KKyBjaGVja3B1cmdlCisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1maXgtdGhlLWdjYy12ZXJzaW9uLWNoZWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLWZpeC10aGUtZ2NjLXZlcnNpb24tY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVlYTU2ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1maXgtdGhlLWdjYy12ZXJzaW9uLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMTYwIEBACitGcm9tIDE1YzZlZjZhODI3ZDM2ODFhZDA2ZTg2MmQyN2FiM2RmYjg0Y2I2ODcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDI3IE1heSAyMDE1IDE0OjMwOjI4ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpeCB0aGUgZ2NjIHZlcnNpb24gY2hlY2sKKworVXBzdHJlYW0tU3RhdHVzOiBwZW5kaW5nCisKKyJHQ0MgZGlhZ25vc3RpYyBwdXNoIiBpcyBnY2MgNC42IGZlYXR1cmUsIGdjYyA0LjQuNyBvbiBjZW50b3MgZGlkIG5vdCBrbm93IGl0CisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGFwdC1wa2cvY2FjaGVzZXQuaCAgICAgICAgICAgfCAgNCArKy0tCisgYXB0LXBrZy9kZWIvZGVic3JjcmVjb3Jkcy5jYyB8IDEyICsrKysrKy0tLS0tLQorIGFwdC1wa2cvc3JjcmVjb3Jkcy5jYyAgICAgICAgfCAgNCArKy0tCisgYXB0LXBrZy9zcmNyZWNvcmRzLmggICAgICAgICB8ICA0ICsrLS0KKyBhcHQtcGtnL3ZlbmRvcmxpc3QuY2MgICAgICAgIHwgIDQgKystLQorIDUgZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9hcHQtcGtnL2NhY2hlc2V0LmggYi9hcHQtcGtnL2NhY2hlc2V0LmgKK2luZGV4IGI3MjI5YmMuLjhjYzI5MTcgMTAwNjQ0CistLS0gYS9hcHQtcGtnL2NhY2hlc2V0LmgKKysrKyBiL2FwdC1wa2cvY2FjaGVzZXQuaAorQEAgLTExOSwxMiArMTE5LDEyIEBAIHB1YmxpYzoKKyAJCWlubGluZSBzdGQ6OnN0cmluZyBGdWxsTmFtZShib29sIGNvbnN0IFByZXR0eSkgY29uc3QgeyByZXR1cm4gZ2V0UGtnKCkuRnVsbE5hbWUoUHJldHR5KTsgfQorIAkJaW5saW5lIHN0ZDo6c3RyaW5nIEZ1bGxOYW1lKCkgY29uc3QgeyByZXR1cm4gZ2V0UGtnKCkuRnVsbE5hbWUoKTsgfQorIAkJQVBUX0RFUFJFQ0FURUQgaW5saW5lIGNvbnN0IGNoYXIgKlNlY3Rpb24oKSBjb25zdCB7CistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICNlbmRpZgorIAkgICByZXR1cm4gZ2V0UGtnKCkuU2VjdGlvbigpOworLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyAjZW5kaWYKKyAJCX0KK2RpZmYgLS1naXQgYS9hcHQtcGtnL2RlYi9kZWJzcmNyZWNvcmRzLmNjIGIvYXB0LXBrZy9kZWIvZGVic3JjcmVjb3Jkcy5jYworaW5kZXggNDlhMzQ4ZC4uNGJjOWRjZiAxMDA2NDQKKy0tLSBhL2FwdC1wa2cvZGViL2RlYnNyY3JlY29yZHMuY2MKKysrKyBiL2FwdC1wa2cvZGViL2RlYnNyY3JlY29yZHMuY2MKK0BAIC0xMjYsMTMgKzEyNiwxMyBAQCBib29sIGRlYlNyY1JlY29yZFBhcnNlcjo6RmlsZXMoc3RkOjp2ZWN0b3I8cGtnU3JjUmVjb3Jkczo6RmlsZT4gJkYpCisgICAgZm9yIChzdGQ6OnZlY3Rvcjxwa2dTcmNSZWNvcmRzOjpGaWxlMj46OmNvbnN0X2l0ZXJhdG9yIGYyID0gRjIuYmVnaW4oKTsgZjIgIT0gRjIuZW5kKCk7ICsrZjIpCisgICAgeworICAgICAgIHBrZ1NyY1JlY29yZHM6OkZpbGUyIGY7CistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICNlbmRpZgorICAgICAgIGYuTUQ1SGFzaCA9IGYyLT5NRDVIYXNoOworICAgICAgIGYuU2l6ZSA9IGYyLT5TaXplOworLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyAjZW5kaWYKKyAgICAgICBmLlBhdGggPSBmMi0+UGF0aDsKK0BAIC0xOTAsMTQgKzE5MCwxNCBAQCBib29sIGRlYlNyY1JlY29yZFBhcnNlcjo6RmlsZXMyKHN0ZDo6dmVjdG9yPHBrZ1NyY1JlY29yZHM6OkZpbGUyPiAmTGlzdCkKKyAJIC8vIHdlIGhhdmUgaXQgYWxyZWFkeSwgc3RvcmUgdGhlIG5ldyBoYXNoIGFuZCBiZSBkb25lCisgCSBpZiAoZmlsZSAhPSBMaXN0LmVuZCgpKQorIAkgeworLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJLy8gc2V0IGZvciBjb21wYXRpYmlsaXR5IG9ubHksIHNvIHdhcm4gdXNlcnMgbm90IHVzCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgI2VuZGlmCisgCSAgICBpZiAoY2hlY2tzdW1GaWVsZCA9PSAiRmlsZXMiKQorIAkgICAgICAgZmlsZS0+TUQ1SGFzaCA9IGhhc2g7CistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorICNlbmRpZgorIAkgICAgLy8gYW4gZXJyb3IgaGVyZSBpbmRpY2F0ZXMgdGhhdCB3ZSBoYXZlIHR3byBkaWZmZXJlbnQgaGFzaGVzIGZvciB0aGUgc2FtZSBmaWxlCitAQCAtMjEyLDcgKzIxMiw3IEBAIGJvb2wgZGViU3JjUmVjb3JkUGFyc2VyOjpGaWxlczIoc3RkOjp2ZWN0b3I8cGtnU3JjUmVjb3Jkczo6RmlsZTI+ICZMaXN0KQorIAkgRi5GaWxlU2l6ZSA9IHN0cnRvdWxsKHNpemUuY19zdHIoKSwgTlVMTCwgMTApOworIAkgRi5IYXNoZXMucHVzaF9iYWNrKGhhc2hTdHJpbmcpOworIAorLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJLy8gc2V0IGZvciBjb21wYXRpYmlsaXR5IG9ubHksIHNvIHdhcm4gdXNlcnMgbm90IHVzCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCitAQCAtMjIwLDcgKzIyMCw3IEBAIGJvb2wgZGViU3JjUmVjb3JkUGFyc2VyOjpGaWxlczIoc3RkOjp2ZWN0b3I8cGtnU3JjUmVjb3Jkczo6RmlsZTI+ICZMaXN0KQorIAkgRi5TaXplID0gRi5GaWxlU2l6ZTsKKyAJIGlmIChjaGVja3N1bUZpZWxkID09ICJGaWxlcyIpCisgCSAgICBGLk1ENUhhc2ggPSBoYXNoOworLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyAjZW5kaWYKKyAKK2RpZmYgLS1naXQgYS9hcHQtcGtnL3NyY3JlY29yZHMuY2MgYi9hcHQtcGtnL3NyY3JlY29yZHMuY2MKK2luZGV4IDMxNzVlZTcuLjM0MGU3OTYgMTAwNjQ0CistLS0gYS9hcHQtcGtnL3NyY3JlY29yZHMuY2MKKysrKyBiL2FwdC1wa2cvc3JjcmVjb3Jkcy5jYworQEAgLTE2MCw3ICsxNjAsNyBAQCBib29sIHBrZ1NyY1JlY29yZHM6OlBhcnNlcjo6RmlsZXMyKHN0ZDo6dmVjdG9yPHBrZ1NyY1JlY29yZHM6OkZpbGUyPiAmRjIpLyp7e3sqLworICAgIGZvciAoc3RkOjp2ZWN0b3I8cGtnU3JjUmVjb3Jkczo6RmlsZT46OmNvbnN0X2l0ZXJhdG9yIGYgPSBGLmJlZ2luKCk7IGYgIT0gRi5lbmQoKTsgKytmKQorICAgIHsKKyAgICAgICBwa2dTcmNSZWNvcmRzOjpGaWxlMiBmMjsKKy0jaWYgX19HTlVDX18gPj0gNAorKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgI2VuZGlmCitAQCAtMTY4LDcgKzE2OCw3IEBAIGJvb2wgcGtnU3JjUmVjb3Jkczo6UGFyc2VyOjpGaWxlczIoc3RkOjp2ZWN0b3I8cGtnU3JjUmVjb3Jkczo6RmlsZTI+ICZGMikvKnt7eyovCisgICAgICAgZjIuU2l6ZSA9IGYtPlNpemU7CisgICAgICAgZjIuSGFzaGVzLnB1c2hfYmFjayhIYXNoU3RyaW5nKCJNRDVTdW0iLCBmLT5NRDVIYXNoKSk7CisgICAgICAgZjIuRmlsZVNpemUgPSBmLT5TaXplOworLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyAjZW5kaWYKKyAgICAgICBmMi5QYXRoID0gZi0+UGF0aDsKK2RpZmYgLS1naXQgYS9hcHQtcGtnL3NyY3JlY29yZHMuaCBiL2FwdC1wa2cvc3JjcmVjb3Jkcy5oCitpbmRleCBkZGUyMmJkLi45MWY4MDYxIDEwMDY0NAorLS0tIGEvYXB0LXBrZy9zcmNyZWNvcmRzLmgKKysrKyBiL2FwdC1wa2cvc3JjcmVjb3Jkcy5oCitAQCAtMzAsNyArMzAsNyBAQCBjbGFzcyBwa2dTcmNSZWNvcmRzCisgeworICAgIHB1YmxpYzoKKyAKKy0jaWYgX19HTlVDX18gPj0gNAorKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCisgCS8vIGVuc3VyZSB0aGF0IGNvbi0gJiBkZS1zdHJ1Y3RvciBkb24ndCB0cmlnZ2VyIHRoaXMgd2FybmluZworIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgcGtnU3JjUmVjb3JkcworICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBGaWxlU2l6ZTsKKyAgICAgICBIYXNoU3RyaW5nTGlzdCBIYXNoZXM7CisgICAgfTsKKy0jaWYgX19HTlVDX18gPj0gNAorKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisgI2VuZGlmCisgCitkaWZmIC0tZ2l0IGEvYXB0LXBrZy92ZW5kb3JsaXN0LmNjIGIvYXB0LXBrZy92ZW5kb3JsaXN0LmNjCitpbmRleCBmYjMzZmYxLi5iYTFkM2MzIDEwMDY0NAorLS0tIGEvYXB0LXBrZy92ZW5kb3JsaXN0LmNjCisrKysgYi9hcHQtcGtnL3ZlbmRvcmxpc3QuY2MKK0BAIC0xMSw3ICsxMSw3IEBACisgCisgI2luY2x1ZGUgPGFwdGkxOG4uaD4KKyAKKy0jaWYgX19HTlVDX18gPj0gNAorKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgI2VuZGlmCitAQCAtMTYzLDYgKzE2Myw2IEBAIGNvbnN0IFZlbmRvciogcGtnVmVuZG9yTGlzdDo6RmluZFZlbmRvcihjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+IEdQR1ZPdXRwdXQpCS8qCisgfQorIAkJCQkJCQkJCS8qfX19Ki8KKyAKKy0jaWYgX19HTlVDX18gPj0gNAorKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisgI2VuZGlmCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1yZW1vdmUtV3N1Z2dlc3QtYXR0cmlidXRlLWZyb20tQ0ZMQUdTLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLXJlbW92ZS1Xc3VnZ2VzdC1hdHRyaWJ1dGUtZnJvbS1DRkxBR1MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M0MmZmMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1yZW1vdmUtV3N1Z2dlc3QtYXR0cmlidXRlLWZyb20tQ0ZMQUdTLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0Zyb20gMmJmZjdlZTA2YTRmOTZlN2QzMjY5OTFkNjFmYjg2ZjhhYTY1MWQ0OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMjcgTWF5IDIwMTUgMDk6NDg6NDUgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gcmVtb3ZlIFdzdWdnZXN0LWF0dHJpYnV0ZSBmcm9tIENYWEZMQUdTCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitXc3VnZ2VzdC1hdHRyaWJ1dGUgaXMgR0NDIDQuNiBmZWF0dXJlLCBjZW50b3M2IGlzIHVzaW5nIEdDQworNC40Ljcgd2hpY2ggdW5rbm93biB0aGlzIGZsYWcsIHNvIHJlbW92ZSBpdCBmcm9tIENYWEZMQUdTCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGJ1aWxkbGliL2Vudmlyb25tZW50Lm1hay5pbiB8IDEgLQorIHRlc3QvbGliYXB0L21ha2VmaWxlICAgICAgICB8IDEgLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2J1aWxkbGliL2Vudmlyb25tZW50Lm1hay5pbiBiL2J1aWxkbGliL2Vudmlyb25tZW50Lm1hay5pbgoraW5kZXggYjBhOGQ5ZC4uOTFlZDAxMSAxMDA2NDQKKy0tLSBhL2J1aWxkbGliL2Vudmlyb25tZW50Lm1hay5pbgorKysrIGIvYnVpbGRsaWIvZW52aXJvbm1lbnQubWFrLmluCitAQCAtMTEsNyArMTEsNiBAQCBDUFBGTEFHUys9IEBDUFBGTEFHU0AgQERFRlNAIC1EX1JFRU5UUkFOVCAtRF9GT1JUSUZZX1NPVVJDRT0yCisgQ1hYID0gQENYWEAKKyBDWFhGTEFHUys9IEBDWFhGTEFHU0AgLVdhbGwgLVdleHRyYQorIENYWEZMQUdTKz0gLVdjYXN0LWFsaWduIC1XbG9naWNhbC1vcCAtV3JlZHVuZGFudC1kZWNscyAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XdW5zYWZlLWxvb3Atb3B0aW1pemF0aW9ucworLUNYWEZMQUdTKz0gLVdzdWdnZXN0LWF0dHJpYnV0ZT1wdXJlIC1Xc3VnZ2VzdC1hdHRyaWJ1dGU9Y29uc3QgLVdzdWdnZXN0LWF0dHJpYnV0ZT1ub3JldHVybgorICMgYSBiaXQgdG9vIHBlZGFudGljIHRvIGJlIHJ1biBieSBkZWZhdWx0CisgI0NYWEZMQUdTKz0gLVdwZWRhbnRpYyAtV25vLWxvbmctbG9uZyAtV25vLXZsYSAtV25vLXZhcmlhZGljLW1hY3JvcworIE5VTV9QUk9DUyA9IEBOVU1fUFJPQ1NACitkaWZmIC0tZ2l0IGEvdGVzdC9saWJhcHQvbWFrZWZpbGUgYi90ZXN0L2xpYmFwdC9tYWtlZmlsZQoraW5kZXggN2YyM2FjZS4uZTgwNWYxMyAxMDA2NDQKKy0tLSBhL3Rlc3QvbGliYXB0L21ha2VmaWxlCisrKysgYi90ZXN0L2xpYmFwdC9tYWtlZmlsZQorQEAgLTM5LDcgKzM5LDYgQEAgQ1hYRkxBR1MgKz0gLXB0aHJlYWQKKyAjIGRpc2FibGUgc29tZSBmbGFncyBmb3IgZ3Rlc3QgYWdhaW4KKyBDWFhGTEFHUys9IC1Xbm8tbWlzc2luZy1kZWNsYXJhdGlvbnMKKyBDWFhGTEFHUys9IC1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMKKy1DWFhGTEFHUys9IC1Xbm8tc3VnZ2VzdC1hdHRyaWJ1dGU9cHVyZSAtV25vLXN1Z2dlc3QtYXR0cmlidXRlPWNvbnN0IC1Xbm8tc3VnZ2VzdC1hdHRyaWJ1dGU9bm9yZXR1cm4KKyAKKyAjIEFsbCBHb29nbGUgVGVzdCBoZWFkZXJzLiAgVXN1YWxseSB5b3Ugc2hvdWxkbid0IGNoYW5nZSB0aGlzIGRlZmluaXRpb24uCisgR1RFU1RfSEVBREVSUyA9IC91c3IvaW5jbHVkZS9ndGVzdC8qLmggXAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L2Rpc2FibGUtY29uZmlndXJlLWluLW1ha2VmaWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9kaXNhYmxlLWNvbmZpZ3VyZS1pbi1tYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzJmNjRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9kaXNhYmxlLWNvbmZpZ3VyZS1pbi1tYWtlZmlsZS5wYXRjaApAQCAtMCwwICsxLDE4IEBACitEaXNhYmxlIGNvbmZpZ3VyZSBhdCBjb21waWxhdGlvbiBzdGFnZQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK0luZGV4OiBhcHQtMC45LjcuNy9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGFwdC0wLjkuNy43Lm9yaWcvTWFrZWZpbGUKKysrKyBhcHQtMC45LjcuNy9NYWtlZmlsZQorQEAgLTMzLDcgKzMzLDcgQEAgdmVyeWNsZWFuOiBjbGVhbgorICMgVGhlIHN0YXJ0dXAgdGFyZ2V0IGJ1aWxkcyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyZSBzY3JpcHRzLiBJdCBzaG91bGQKKyAjIGJlIHVzZWQgYWZ0ZXIgYSBDVlMgY2hlY2tvdXQuCisgQ09OVkVSVEVEPWVudmlyb25tZW50Lm1hayBpbmNsdWRlL2NvbmZpZy5oIGluY2x1ZGUvYXB0aTE4bi5oIGJ1aWxkL2RvYy9Eb3h5ZmlsZSBtYWtlZmlsZQorLWluY2x1ZGUgYnVpbGRsaWIvY29uZmlndXJlLm1haworKyNpbmNsdWRlIGJ1aWxkbGliL2NvbmZpZ3VyZS5tYWsKKyAkKEJVSUxERElSKS9pbmNsdWRlL2NvbmZpZy5oOiBidWlsZGxpYi9jb25maWcuaC5pbgorICQoQlVJTERESVIpL2luY2x1ZGUvYXB0aTE4bi5oOiBidWlsZGxpYi9hcHRpMThuLmguaW4KKyAkKEJVSUxERElSKS9lbnZpcm9ubWVudC5tYWs6IGJ1aWxkbGliL2Vudmlyb25tZW50Lm1hay5pbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9kaXNhYmxlLXRlc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L2Rpc2FibGUtdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzY3OTVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9kaXNhYmxlLXRlc3QucGF0Y2gKQEAgLTAsMCArMSw1OCBAQAorW1BBVENIXSBkaXNhYmxlIHRlc3QKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCit0ZXN0IG5lZWRzIGd0ZXN0IHBhY2thZ2UsIHNvIG5vdCBidWlsZCB0aGUgdGVzdCBkaXIKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUgICAgIHwgNyArKystLS0tCisgY29uZmlndXJlLmFjIHwgNiAtLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCA1ZjVmYjI3Li41MDcwZTk2IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtOSw4ICs5LDggQEAgZW5kaWYKKyAuUEhPTlk6IGRlZmF1bHQKKyBkZWZhdWx0OiBzdGFydHVwIGFsbAorIAorLS5QSE9OWTogaGVhZGVycyBsaWJyYXJ5IGNsZWFuIHZlcnljbGVhbiBhbGwgYmluYXJ5IHByb2dyYW0gZG9jIHRlc3QgdXBkYXRlLXBvCistYWxsIGhlYWRlcnMgbGlicmFyeSBjbGVhbiB2ZXJ5Y2xlYW4gYmluYXJ5IHByb2dyYW0gZG9jIG1hbnBhZ2VzIGRvY2Jvb2sgdGVzdCB1cGRhdGUtcG8gc3RhcnR1cCBkaXJzOgorKy5QSE9OWTogaGVhZGVycyBsaWJyYXJ5IGNsZWFuIHZlcnljbGVhbiBhbGwgYmluYXJ5IHByb2dyYW0gZG9jIHVwZGF0ZS1wbworK2FsbCBoZWFkZXJzIGxpYnJhcnkgY2xlYW4gdmVyeWNsZWFuIGJpbmFyeSBwcm9ncmFtIGRvYyBtYW5wYWdlcyBkb2Nib29rIHVwZGF0ZS1wbyBzdGFydHVwIGRpcnM6CisgCSQoTUFLRSkgLUMgdmVuZG9yICRACisgCSQoTUFLRSkgLUMgYXB0LXBrZyAkQAorIAkkKE1BS0UpIC1DIGFwdC1pbnN0ICRACitAQCAtMjEsOSArMjEsOCBAQCBhbGwgaGVhZGVycyBsaWJyYXJ5IGNsZWFuIHZlcnljbGVhbiBiaW5hcnkgcHJvZ3JhbSBkb2MgbWFucGFnZXMgZG9jYm9vayB0ZXN0IHVwZAorIAkkKE1BS0UpIC1DIGRzZWxlY3QgJEAKKyAjCSQoTUFLRSkgLUMgZG9jICRACisgCSQoTUFLRSkgLUMgcG8gJEAKKy0JJChNQUtFKSAtQyB0ZXN0ICRACisgCistYWxsIGhlYWRlcnMgbGlicmFyeSBjbGVhbiB2ZXJ5Y2xlYW4gYmluYXJ5IHByb2dyYW0gZG9jIG1hbnBhZ2VzIGRvY2Jvb2sgdGVzdCB1cGRhdGUtcG86IHN0YXJ0dXAgZGlycworK2FsbCBoZWFkZXJzIGxpYnJhcnkgY2xlYW4gdmVyeWNsZWFuIGJpbmFyeSBwcm9ncmFtIGRvYyBtYW5wYWdlcyBkb2Nib29rIHVwZGF0ZS1wbzogc3RhcnR1cCBkaXJzCisgCisgZGlyczogc3RhcnR1cAorIAorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNTY2M2FhZi4uYjBmOTU2NCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtODksMTIgKzg5LDYgQEAgQUNfQ0hFQ0tfTElCKGN1cmwsIGN1cmxfZWFzeV9pbml0LAorICAgICAgQUNfTVNHX0VSUk9SKFtmYWlsZWQ6IEkgbmVlZCBDVVJMIGR1ZSBodHRwcyBzdXBwb3J0XSksCisgKQorIAorLUFDX0xBTkdfUFVTSChbQysrXSkKKy1BQ19DSEVDS19IRUFERVIoZ3Rlc3QvZ3Rlc3QuaCwsCistICAgICBBQ19NU0dfRVJST1IoW2ZhaWxlZDogSSBuZWVkIGd0ZXN0IHRvIGJ1aWxkIHRlc3RzXSksCistKQorLUFDX0xBTkdfUE9QKFtDKytdKQorLQorIAorIEFDX1NVQlNUKEJEQkxJQikKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9maXgtZ2NjLTQuNi1udWxsLW5vdC1kZWZpbmVkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9maXgtZ2NjLTQuNi1udWxsLW5vdC1kZWZpbmVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMWFlNmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L2ZpeC1nY2MtNC42LW51bGwtbm90LWRlZmluZWQucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBhL2FwdC1wa2cvY29udHJpYi93ZWFrcHRyLmgKKysrKyBiL2FwdC1wa2cvY29udHJpYi93ZWFrcHRyLmgKK0BAIC0yMSw2ICsyMSw3IEBACisgI2lmbmRlZiBXRUFLX1BPSU5URVJfSAorICNkZWZpbmUgV0VBS19QT0lOVEVSX0gKKyAKKysjaW5jbHVkZSA8Y3N0ZGxpYj4KKyAjaW5jbHVkZSA8c2V0PgorIC8qKgorICAqIENsYXNzIGZvciBvYmplY3RzIHByb3ZpZGluZyBzdXBwb3J0IGZvciB3ZWFrIHBvaW50ZXJzLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9tYWtlcmFjZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvbWFrZXJhY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZlMzE2MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvbWFrZXJhY2UucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorSSB3YXMgc2VlaW5nIHZhcmlvdXMgaXNzdWVzIHdpdGggcGFyYWxsZWwgbWFrZSwgbWFpbmx5IGR1ZSB0byB0byB3aGF0IHdhcyBsaWtlbHkgCitwYXJ0aWFsbHkgaW5zdGFsbGVkIGhlYWRlcnMuIElmIHlvdSBjaGFuZ2UgaW50byB0aGUgc291cmNlIGRpcmVjdG9yeSBhbmQKKyJOT0lTWT0xIG1ha2UgIC4uL29iai9hcHQtcGtnL3NvdXJjZWxpc3Qub3BpYyIgaW4gYXB0LXBrZywgeW91J2xsIHNlZSBpdCAKK2RvZXNuJ3QgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIG9uIHRoZSBoZWFkZXJzIGJlaW5nIGluc3RhbGxlZC4gVGhpcyBwYXRjaAorZml4ZXMgdGhhdCBzbyB0aGluZ3MgYnVpbGQgY29ycmVjdGx5LgorCitSUCAyMDEyLzMvMTkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBhcHQtMC45LjkuNC9idWlsZGxpYi9saWJyYXJ5Lm1haworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGFwdC0wLjkuOS40Lm9yaWcvYnVpbGRsaWIvbGlicmFyeS5tYWsJMjAxMy0wNy0zMSAxNTo0NTowNy4zMjA0NDA1NzUgKzAzMDAKKysrKyBhcHQtMC45LjkuNC9idWlsZGxpYi9saWJyYXJ5Lm1hawkyMDEzLTA3LTMxIDE1OjQ2OjQ5LjQ0MDQ0MDU2MSArMDMwMAorQEAgLTYxLDcgKzYxLDcgQEAKKyAKKyAjIENvbXBpbGF0aW9uIHJ1bGVzCisgdnBhdGggJS5jYyAkKFNVQkRJUlMpCistJChPQkopLyUub3BpYzogJS5jYyAkKExJQlJBUllERVBFTkRTKQorKyQoT0JKKS8lLm9waWM6ICUuY2MgJChMSUJSQVJZREVQRU5EUykgJCgkKExPQ0FMKS1IRUFERVJTKQorIAllY2hvIENvbXBpbGluZyAkPCB0byAkQAorIAkkKENYWCkgLWMgJChJTkxJTkVERVBGTEFHKSAkKENQUEZMQUdTKSAkKENYWEZMQUdTKSAkKFBJQ0ZMQUdTKSAtbyAkQCAkPAorIAkkKERvRGVwKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9uby1ubHMtZHBrZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvbm8tbmxzLWRwa2cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA5OTZkNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvbm8tbmxzLWRwa2cucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBhL2FwdC1wa2cvZGViL2Rwa2dwbS5jYworKysrIGIvYXB0LXBrZy9kZWIvZHBrZ3BtLmNjCitAQCAtNDIsNiArNDIsMTIgQEAKKyAjaW5jbHVkZSA8YXB0aTE4bi5oPgorIAkJCQkJCQkJCS8qfX19Ki8KKyAKKysjaWZkZWYgVVNFX05MUworKyNkZWZpbmUgX2Rwa2coeCkgZGdldHRleHQoImRwa2ciLCB4KQorKyNlbHNlCisrI2RlZmluZSBfZHBrZyh4KSB4CisrI2VuZGlmCisrCisgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKKyAKKyBuYW1lc3BhY2UKK0BAIC0xMjc5LDcgKzEyODUsNyBAQCB2b2lkIHBrZ0RQa2dQTTo6V3JpdGVBcHBvcnRSZXBvcnQoY29uc3QKKyAgICB9CisgCisgICAgLy8gY2hlY2sgaWYgaXRzIG5vdCBhIGZvbGxvdyB1cCBlcnJvciAKKy0gICBjb25zdCBjaGFyICpuZWVkbGUgPSBkZ2V0dGV4dCgiZHBrZyIsICJkZXBlbmRlbmN5IHByb2JsZW1zIC0gbGVhdmluZyB1bmNvbmZpZ3VyZWQiKTsKKysgICBjb25zdCBjaGFyICpuZWVkbGUgPSBfZHBrZygiZGVwZW5kZW5jeSBwcm9ibGVtcyAtIGxlYXZpbmcgdW5jb25maWd1cmVkIik7CisgICAgaWYoc3Ryc3RyKGVycm9ybXNnLCBuZWVkbGUpICE9IE5VTEwpIHsKKyAgICAgICBzdGQ6OmNsb2cgPDwgXygiTm8gYXBwb3J0IHJlcG9ydCB3cml0dGVuIGJlY2F1c2UgdGhlIGVycm9yIG1lc3NhZ2UgaW5kaWNhdGVzIGl0cyBhIGZvbGxvd3VwIGVycm9yIGZyb20gYSBwcmV2aW91cyBmYWlsdXJlLiIpIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L25vY29uZmlndXJlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9ub2NvbmZpZ3VyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmM2NzIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9ub2NvbmZpZ3VyZS5wYXRjaApAQCAtMCwwICsxLDM3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKKworZGlmZiAtLWdpdCBhL2FwdC1wa2cvcGFja2FnZW1hbmFnZXIuY2MgYi9hcHQtcGtnL3BhY2thZ2VtYW5hZ2VyLmNjCitpbmRleCAyNDk1NDJjLi4wYTE5MTFmIDEwMDY0NAorLS0tIGEvYXB0LXBrZy9wYWNrYWdlbWFuYWdlci5jYworKysrIGIvYXB0LXBrZy9wYWNrYWdlbWFuYWdlci5jYworQEAgLTk1MiwxMCArOTUyLDEyIEBAIGJvb2wgcGtnUGFja2FnZU1hbmFnZXI6OlNtYXJ0VW5QYWNrKFBrZ0l0ZXJhdG9yIFBrZywgYm9vbCBjb25zdCBJbW1lZGlhdGUsIGludCBjCisgICAgICAgcmV0dXJuIGZhbHNlOworIAorICAgIGlmIChJbW1lZGlhdGUgPT0gdHJ1ZSkgeworKyNpZiAwCisgICAgICAgLy8gUGVyZm9ybSBpbW1lZGF0ZSBjb25maWd1cmF0aW9uIG9mIHRoZSBwYWNrYWdlLiAKKyAgICAgICAgICBpZiAoU21hcnRDb25maWd1cmUoUGtnLCBEZXB0aCArIDEpID09IGZhbHNlKQorICAgICAgICAgICAgIF9lcnJvci0+RXJyb3IoXygiQ291bGQgbm90IHBlcmZvcm0gaW1tZWRpYXRlIGNvbmZpZ3VyYXRpb24gb24gJyVzJy4gIgorICAgICAgICAgICAgICAgICJQbGVhc2Ugc2VlIG1hbiA1IGFwdC5jb25mIHVuZGVyIEFQVDo6SW1tZWRpYXRlLUNvbmZpZ3VyZSBmb3IgZGV0YWlscy4gKCVkKSIpLFBrZy5GdWxsTmFtZSgpLmNfc3RyKCksMik7CisrI2VuZGlmCisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworQEAgLTEwMzgsNiArMTA0MCw3IEBAIHBrZ1BhY2thZ2VNYW5hZ2VyOjpPcmRlclJlc3VsdCBwa2dQYWNrYWdlTWFuYWdlcjo6T3JkZXJJbnN0YWxsKCkKKyAgICAgICB9CisgICAgfQorIAorKyNpZiAwCisgICAgLy8gRmluYWwgcnVuIHRocm91Z2ggdGhlIGNvbmZpZ3VyZSBwaGFzZQorICAgIGlmIChDb25maWd1cmVBbGwoKSA9PSBmYWxzZSkKKyAgICAgICByZXR1cm4gRmFpbGVkOworQEAgLTEwNTIsNiArMTA1NSw3IEBAIHBrZ1BhY2thZ2VNYW5hZ2VyOjpPcmRlclJlc3VsdCBwa2dQYWNrYWdlTWFuYWdlcjo6T3JkZXJJbnN0YWxsKCkKKyAJIHJldHVybiBGYWlsZWQ7CisgICAgICAgfQorICAgIH0KKysjZW5kaWYKKyAJIAorICAgIHJldHVybiBDb21wbGV0ZWQ7CisgfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9ub2RvYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvbm9kb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ5ZTQyZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvbm9kb2MucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorRGlzYWJsZSBkb2N1bWVudGF0aW9uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworSW5kZXg6IGFwdC0wLjkuNy43L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXB0LTAuOS43Ljcub3JpZy9NYWtlZmlsZQorKysrIGFwdC0wLjkuNy43L01ha2VmaWxlCitAQCAtMTcsNyArMTcsNyBAQCBhbGwgaGVhZGVycyBsaWJyYXJ5IGNsZWFuIHZlcnljbGVhbiBiaW5hCisgCSQoTUFLRSkgLUMgY21kbGluZSAkQAorIAkkKE1BS0UpIC1DIGZ0cGFyY2hpdmUgJEAKKyAJJChNQUtFKSAtQyBkc2VsZWN0ICRACistCSQoTUFLRSkgLUMgZG9jICRACisrIwkkKE1BS0UpIC1DIGRvYyAkQAorIAkkKE1BS0UpIC1DIHBvICRACisgCSQoTUFLRSkgLUMgdGVzdCAkQAorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC90cnVuY2F0ZS1maWxlbmFtZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvdHJ1bmNhdGUtZmlsZW5hbWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIxYzQyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvdHJ1bmNhdGUtZmlsZW5hbWUucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorc3RydXRsLmNjOiB0aGUgZmlsZW5hbWUgY2FuJ3QgYmUgbG9uZ2VyIHRoYW4gMjU1CisKK1RoZSBVUkl0b0ZpbGVOYW1lIHRyYW5zbGF0ZXMgdGhlIHBhdGggaW50byB0aGUgZmlsZW5hbWUsIGJ1dCB0aGUKK2ZpbGVuYW1lIGNhbid0IGJlIGxvbmdlciB0aGFuIDI1NSBhY2NvcmRpbmcgdG8KKy91c3IvaW5jbHVkZS9saW51eC9saW1pdHMuaC4KKworVHJ1bmNhdGUgaXQgd2hlbiBpdCBpcyBsb25nZXIgdGhhbiAyNDAgKGxlYXZlIHNvbWUgc3BhY2VzIGZvcgorIi5QYWNrYWdlcyIgYW5kICIuX1JlbGVhc2UiIHN1ZmZpeCkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGFwdC1wa2cvY29udHJpYi9zdHJ1dGwuY2MgfCAgICA3ICsrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9hcHQtcGtnL2NvbnRyaWIvc3RydXRsLmNjIGIvYXB0LXBrZy9jb250cmliL3N0cnV0bC5jYworLS0tIGEvYXB0LXBrZy9jb250cmliL3N0cnV0bC5jYworKysrIGIvYXB0LXBrZy9jb250cmliL3N0cnV0bC5jYworQEAgLTM5OSw3ICszOTksMTIgQEAgc3RyaW5nIFVSSXRvRmlsZU5hbWUoY29uc3Qgc3RyaW5nICZVUkkpCisgICAgLy8gIlx4MDAtXHgyMHt9fFxcXFxeXFxbXFxdPD5cIlx4N0YtXHhGRiI7CisgICAgc3RyaW5nIE5ld1VSSSA9IFF1b3RlU3RyaW5nKFUsIlxcfHt9W108PlwiXn5fPSFAIyQlXiYqIik7CisgICAgcmVwbGFjZShOZXdVUkkuYmVnaW4oKSxOZXdVUkkuZW5kKCksJy8nLCdfJyk7CistICAgcmV0dXJuIE5ld1VSSTsKKysKKysgICAvLyBUcnVuY2F0ZSBmcm9tIHRoZSBoZWFkIHdoZW4gaXQgaXMgbG9uZ2VyIHRoYW4gMjQwCisrICAgaWYoTmV3VVJJLmxlbmd0aCgpID4gMjQwKQorKyAgICAgICByZXR1cm4gTmV3VVJJLnN1YnN0cihOZXdVUkkubGVuZ3RoKCkgLSAyNDAsIE5ld1VSSS5sZW5ndGgoKSAtIDEpOworKyAgIGVsc2UKKysgICAgICAgcmV0dXJuIE5ld1VSSTsKKyB9CisgCQkJCQkJCQkJLyp9fX0qLworIC8vIEJhc2U2NEVuY29kZSAtIEJhc2U2NCBFbmNvZGluZyByb3V0aW5lIGZvciBzaG9ydCBzdHJpbmdzCQkvKnt7eyovCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvdXNlLWhvc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L3VzZS1ob3N0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMGZjZmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L3VzZS1ob3N0LnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogYXB0LTAuOS43LjcvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXB0LTAuOS43Ljcub3JpZy9jb25maWd1cmUuYWMKKysrKyBhcHQtMC45LjcuNy9jb25maWd1cmUuYWMKK0BAIC0xMTIsNyArMTEyLDcgQEAgZG5sIFRoaXMgaXMgb2Z0ZW4gdGhlIGRwa2cgYXJjaGl0ZWN0dXJlCisgZG5sIEZpcnN0IGNoZWNrIGFnYWluc3QgdGhlIGZ1bGwgY2Fub25pY2FsIGNhbm9uY2lhbC1zeXN0ZW0tdHlwZSBpbiAkdGFyZ2V0CisgZG5sIGFuZCBpZiB0aGF0IGZhaWxzLCBqdXN0IGxvb2sgZm9yIHRoZSBjcHUKKyBBQ19NU0dfQ0hFQ0tJTkcoZGViaWFuIGFyY2hpdGVjdHVyZSkKKy1hcmNoc2V0PSJgZHBrZy1hcmNoaXRlY3R1cmUgLXFERUJfSE9TVF9BUkNIYCIKKythcmNoc2V0PSJgZWNobyAkaG9zdF9hbGlhc3xjdXQgLWQnLScgLWYxYCIKKyBpZiB0ZXN0ICJ4JGFyY2hzZXQiID0gIngiOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtmYWlsZWQ6IHVzZSAtLWhvc3Q9IG9yIG91dHB1dCBmcm9tIGRwa2ctYXJjaGl0ZWN0dXJlXSkKKyBmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdF8xLjAuMTAuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHRfMS4wLjEwLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY3N2UyYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHRfMS4wLjEwLjEuYmIKQEAgLTAsMCArMSwxOCBAQAorREVQRU5EUyA9ICJjdXJsIGRiIgorUkRFUEVORFNfJHtQTn0gPSAiZHBrZyBiYXNoIGRlYmlhbnV0aWxzIgorcmVxdWlyZSBhcHQuaW5jCisKK3JlcXVpcmUgYXB0LXBhY2thZ2UuaW5jCisKK1BBQ0tBR0VDT05GSUcgPz89ICJsem1hIgorUEFDS0FHRUNPTkZJR1tsem1hXSA9ICJhY19jdl9saWJfbHptYV9sem1hX2Vhc3lfZW5jb2Rlcj15ZXMsYWNfY3ZfbGliX2x6bWFfbHptYV9lYXN5X2VuY29kZXI9bm8seHoiCisKK0ZJTEVTXyR7UE59ICs9ICIke2JpbmRpcn0vYXB0LWtleSIKK2FwdC1tYW5wYWdlcyArPSAiZG9jL2FwdC1rZXkuOCIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgI1dyaXRlIHRoZSBjb3JyZWN0IGFwdC1hcmNoaXRlY3R1cmUgdG8gYXB0LmNvbmYKKyAgICBBUFRfQ09ORj0ke0R9L2V0Yy9hcHQvYXB0LmNvbmYKKyAgICBlY2hvICdBUFQ6OkFyY2hpdGVjdHVyZSAiJHtEUEtHX0FSQ0h9IjsnID4gJHtBUFRfQ09ORn0KKyAgICBvZV9saWJpbnN0YWxsIC1zbyAtQyBiaW4gbGliYXB0LXByaXZhdGUgJHtEfSR7bGliZGlyfS8KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9maWxlcy9hcHQuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9maWxlcy9hcHQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzM1MTM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL2FwdC5jb25mCkBAIC0wLDAgKzEsNDIgQEAKK0RpciAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9LyIKK3sKKyAgIFN0YXRlICJ2YXIvbGliL2FwdC8iCisgICB7CisgICAgICBMaXN0cyAiI0FQVENPTkYjL2xpc3RzLyI7CisgICAgICBzdGF0dXMgIiNST09URlMjL3Zhci9saWIvZHBrZy9zdGF0dXMiOworICAgfTsKKyAgIENhY2hlICJ2YXIvY2FjaGUvYXB0LyIKKyAgIHsKKyAgICAgIEFyY2hpdmVzICJhcmNoaXZlcy8iOworICAgICAgcGtnY2FjaGUgIiI7CisgICAgICBzcmNwa2djYWNoZSAiIjsKKyAgIH07CisgICBCaW4gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8iCisgICB7CisgICAgICBtZXRob2RzICIke1NUQUdJTkdfTElCRElSfS9hcHQvbWV0aG9kcy8iOworICAgICAgZ3ppcCAiL2Jpbi9nemlwIjsKKyAgICAgIGRwa2cgImRwa2ciOworICAgICAgZHBrZy1zb3VyY2UgImRwa2ctc291cmNlIjsKKyAgICAgIGRwa2ctYnVpbGRwYWNrYWdlICJkcGtnLWJ1aWxkcGFja2FnZSI7CisgICAgICBhcHQtZ2V0ICJhcHQtZ2V0IjsKKyAgICAgIGFwdC1jYWNoZSAiYXB0LWNhY2hlIjsKKyAgIH07CisgICBFdGMgIiNBUFRDT05GIyIKKyAgIHsKKyAgICAgIFByZWZlcmVuY2VzICJwcmVmZXJlbmNlcyI7CisgICB9OworfTsKKworQVBUCit7CisgIEluc3RhbGwtUmVjb21tZW5kcyAidHJ1ZSI7CisgIEltbWVkaWF0ZS1Db25maWd1cmUgImZhbHNlIjsKKyAgQXJjaGl0ZWN0dXJlICJpNTg2IjsKKyAgR2V0CisgIHsKKyAgICAgQXNzdW1lLVllcyAidHJ1ZSI7CisgICAgIEZvcmNlLVllcyAidHJ1ZSIKKyAgfTsKK307CisKK0RQa2c6Ok9wdGlvbnMgeyItLXJvb3Q9I1JPT1RGUyMiOyItLWFkbWluZGlyPSNST09URlMjL3Zhci9saWIvZHBrZyI7Ii0tZm9yY2UtYWxsIjsiLS1uby1kZWJzaWcifTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9maWxlcy9kYl9saW5raW5nX2hhY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvZmlsZXMvZGJfbGlua2luZ19oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MWQ0YjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvZmlsZXMvZGJfbGlua2luZ19oYWNrLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworSW5kZXg6IGFwdC0wLjcuMy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcHQtMC43LjMub3JpZy9jb25maWd1cmUuYWMJMjAwNy0wNy0wMSAxMDozODo0NS4wMDAwMDAwMDAgKzAwMDAKKysrKyBhcHQtMC43LjMvY29uZmlndXJlLmFjCTIwMDctMDgtMjEgMTM6Mzk6MjYuMDAwMDAwMDAwICswMDAwCitAQCAtNjcsOCArNjcsMjAgQEAKKyAgICAgICBbQUNfREVGSU5FKEhBVkVfQkRCKQorICAgICAgICBCREJMSUI9Ii1sZGIiCisgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKV0sCistICAgICAgW0JEQkxJQj0iIgorLSAgICAgICBBQ19NU0dfUkVTVUxUKG5vKV0KKysKKysgICAgICAgTElCUz0iJExJQlMgLWxwdGhyZWFkIgorKyAgICAgICBbQUNfTVNHX0NIRUNLSU5HKGlmIHdlIGNhbiBsaW5rIGFnYWluc3QgQmVya2VsZXlEQiB3aXRoIHB0aHJlYWQpCisrICAgICAgICBBQ19MSU5LX0lGRUxTRSgKKysgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisrICAgICAgICAgWyNpbmNsdWRlIDxkYi5oPl0sCisrICAgICAgICAgW2ludCByLCBzLCB0OyBkYl92ZXJzaW9uKCZyLCAmcywgJnQpO10KKysgICAgICAgICldLAorKyAgICAgICAgW0FDX0RFRklORShIQVZFX0JEQikKKysgICAgICAgICBCREJMSUI9Ii1sZGIgLWxwdGhyZWFkIgorKyAgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisrICAgICAgICBbQkRCTElCPSIiCisrICAgICAgICAgQUNfTVNHX1JFU1VMVChubyldCisrICAgICAgKV0gICAgICAgCisgICAgICldCisgKQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL2Vudmlyb25tZW50LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL2Vudmlyb25tZW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMDMwMzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvZmlsZXMvZW52aXJvbm1lbnQucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitJbmRleDogYXB0LTAuNi40Ni4yL2J1aWxkbGliL2Vudmlyb25tZW50Lm1hay5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGFwdC0wLjYuNDYuMi5vcmlnL2J1aWxkbGliL2Vudmlyb25tZW50Lm1hay5pbgkyMDA3LTAzLTI5IDExOjM4OjU4LjAwMDAwMDAwMCArMDEwMAorKysrIGFwdC0wLjYuNDYuMi9idWlsZGxpYi9lbnZpcm9ubWVudC5tYWsuaW4JMjAwNy0wMy0yOSAxMTozOToxMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC02Miw3ICs2Miw3IEBACisgCisgIyBTaGFyZWQgbGlicmFyeSB0aGluZ3MKKyBIT1NUX09TID0gQGhvc3Rfb3NACistaWZuZXEgKCQod29yZHMgJChmaWx0ZXIgbGludXgtZ251IGdudSUgJWdudSwkKEhPU1RfT1MpKSksMCkKKytpZm5lcSAoJCh3b3JkcyAkKGZpbHRlciBsaW51eC1nbnUgbGludXgtZ251ZWFiaSBnbnUlICVnbnUsJChIT1NUX09TKSkpLDApCisgICAgU09OQU1FX01BR0lDPS1XbCwtc29uYW1lIC1XbCwKKyAgICBMRkxBR1NfU089CisgZWxzZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL25vLWN1cmwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvZmlsZXMvbm8tY3VybC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDIzOGZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL25vLWN1cmwucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCistLS0KKyBjb25maWd1cmUuaW4gICAgIHwgICAgNiAtLS0tLS0KKyBtZXRob2RzL21ha2VmaWxlIHwgICAgNyAtLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxMyBkZWxldGlvbnMoLSkKKworLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC04NiwxMiArODYsNiBAQCBBQ19DSEVDS19IRUFERVIoZGIuaCwKKyAKKyBMSUJTPSIkc2F2ZUxJQlMiCisgCistQUNfQ0hFQ0tfTElCKGN1cmwsIGN1cmxfZWFzeV9pbml0LAorLSAgICAgW0FDX0NIRUNLX0hFQURFUihjdXJsL2N1cmwuaCwKKy0gICAgICAgIGN1cmxfb2s9eWVzLAorLSAgICAgICAgY3VybF9vaz1ubyldLAorLSAgICAgQUNfTVNHX0VSUk9SKFtmYWlsZWQ6IEkgbmVlZCBDVVJMIGR1ZSBodHRwcyBzdXBwb3J0XSksCistKQorIAorIEFDX1NVQlNUKEJEQkxJQikKKyAKKy0tLSBhL21ldGhvZHMvbWFrZWZpbGUKKysrKyBiL21ldGhvZHMvbWFrZWZpbGUKK0BAIC01MSwxMyArNTEsNiBAQCBMSUJfTUFLRVMgPSBhcHQtcGtnL21ha2VmaWxlCisgU09VUkNFID0gaHR0cC5jYyBodHRwX21haW4uY2MgcmZjMjU1M2VtdS5jYyBjb25uZWN0LmNjIHNlcnZlci5jYworIGluY2x1ZGUgJChQUk9HUkFNX0gpCisgCistIyBUaGUgaHR0cHMgbWV0aG9kCistUFJPR1JBTT1odHRwcworLVNMSUJTID0gLWxhcHQtcGtnIC1sY3VybCAkKElOVExMSUJTKQorLUxJQl9NQUtFUyA9IGFwdC1wa2cvbWFrZWZpbGUKKy1TT1VSQ0UgPSBodHRwcy5jYyBzZXJ2ZXIuY2MKKy1pbmNsdWRlICQoUFJPR1JBTV9IKQorLQorICMgVGhlIGZ0cCBtZXRob2QKKyBQUk9HUkFNPWZ0cAorIFNMSUJTID0gLWxhcHQtcGtnICQoU09DS0VUTElCUykgJChJTlRMTElCUykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGI3N2U4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYuaW5jCkBAIC0wLDAgKzEsNDMgQEAKK1NVTU1BUlkgPSAiQSBHTlUgdG9vbCB0aGF0IHByb2N1ZGUgc2hlbGwgc2NyaXB0cyB0byBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZSBzb2Z0d2FyZSIKK0RFU0NSSVBUSU9OID0gIkF1dG9jb25mIGlzIGFuIGV4dGVuc2libGUgcGFja2FnZSBvZiBNNCBtYWNyb3MgdGhhdCBwcm9kdWNlIHNoZWxsIHNjcmlwdHMgdG8gYXV0b21hdGljYWxseSBcIAorY29uZmlndXJlIHNvZnR3YXJlIHNvdXJjZSBjb2RlIHBhY2thZ2VzLiBBdXRvY29uZiBjcmVhdGVzIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZm9yIGEgcGFja2FnZSBmcm9tIGEgdGVtcGxhdGUgXAorZmlsZSB0aGF0IGxpc3RzIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGZlYXR1cmVzIHRoYXQgdGhlIHBhY2thZ2UgY2FuIHVzZSwgaW4gdGhlIGZvcm0gb2YgTTQgbWFjcm8gY2FsbHMuIgorTElDRU5TRSA9ICJHUEx2MyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvY29uZi8iCitTRUNUSU9OID0gImRldmVsIgorREVQRU5EUyArPSAibTQtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAibTQtbmF0aXZlIGdudS1jb25maWctbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmVzZGsgPSAibmF0aXZlc2RrLW00IG5hdGl2ZXNkay1nbnUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0gPSAibTQgZ251LWNvbmZpZyBcCisJCSAgcGVybCBcCisJCSAgcGVybC1tb2R1bGUtY2FycCBcCisJCSAgcGVybC1tb2R1bGUtY29uc3RhbnQgXAorCQkgIHBlcmwtbW9kdWxlLWVycm5vIFwKKwkJICBwZXJsLW1vZHVsZS1leHBvcnRlciBcCisJCSAgcGVybC1tb2R1bGUtZmlsZS1iYXNlbmFtZSBcCisJCSAgcGVybC1tb2R1bGUtZmlsZS1jb21wYXJlIFwKKwkJICBwZXJsLW1vZHVsZS1maWxlLWNvcHkgXAorCQkgIHBlcmwtbW9kdWxlLWZpbGUtZ2xvYiBcCisJCSAgcGVybC1tb2R1bGUtZmlsZS1wYXRoIFwKKwkJICBwZXJsLW1vZHVsZS1maWxlLXN0YXQgXAorCQkgIHBlcmwtbW9kdWxlLWdldG9wdC1sb25nIFwKKwkJICBwZXJsLW1vZHVsZS1pby1maWxlIFwKKwkJICBwZXJsLW1vZHVsZS1wb3NpeCBcCisJCSAgcGVybC1tb2R1bGUtZGF0YS1kdW1wZXIgXAorCQkgIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIm00LW5hdGl2ZSBnbnUtY29uZmlnLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2F1dG9jb25mL2F1dG9jb25mLSR7UFZ9LnRhci5neiBcCisJICAgZmlsZTovL3Byb2dyYW1fcHJlZml4LnBhdGNoIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX1BFUkw9JHtVU1JCSU5QQVRIfS9wZXJsIgorCitkb19jb25maWd1cmUoKSB7CisJb2VfcnVuY29uZgorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBybSAtcmYgJHtEfSR7ZGF0YWRpcn0vZW1hY3MKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2F1dG9yZWNvbmYtZXhjbHVkZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2F1dG9yZWNvbmYtZXhjbHVkZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWJkM2EyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3JlY29uZi1leGNsdWRlLnBhdGNoCkBAIC0wLDAgKzEsMTM5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGF1dG9jb25mLTIuNjMvYmluL2F1dG9yZWNvbmYuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdXRvY29uZi0yLjYzLm9yaWcvYmluL2F1dG9yZWNvbmYuaW4JMjAwOC0xMi0zMSAxNzozOTowMS4wMDAwMDAwMDAgKzAwMDAKKysrKyBhdXRvY29uZi0yLjYzL2Jpbi9hdXRvcmVjb25mLmluCTIwMDgtMTItMzEgMTc6NDM6MzguMDAwMDAwMDAwICswMDAwCitAQCAtNzYsNiArNzYsNyBAQAorICAgLWksIC0taW5zdGFsbCAgICAgICAgICAgIGNvcHkgbWlzc2luZyBhdXhpbGlhcnkgZmlsZXMKKyAgICAgICAtLW5vLXJlY3Vyc2l2ZSAgICAgICBkb24ndCByZWJ1aWxkIHN1Yi1wYWNrYWdlcworICAgLXMsIC0tc3ltbGluayAgICAgICAgICAgIHdpdGggLWksIGluc3RhbGwgc3ltYm9saWMgbGlua3MgaW5zdGVhZCBvZiBjb3BpZXMKKysgIC14LCAtLWV4Y2x1ZGU9U1RFUFMgICAgICBzdGVwcyB3ZSBzaG91bGQgbm90IHJ1bgorICAgLW0sIC0tbWFrZSAgICAgICAgICAgICAgIHdoZW4gYXBwbGljYWJsZSwgcmUtcnVuIC4vY29uZmlndXJlICYmIG1ha2UKKyAgIC1XLCAtLXdhcm5pbmdzPUNBVEVHT1JZICByZXBvcnQgdGhlIHdhcm5pbmdzIGZhbGxpbmcgaW4gQ0FURUdPUlkgW3N5bnRheF0KKyAKK0BAIC0xMzYsNiArMTM3LDEzIEBACisgIyBSZWN1cnNlIGludG8gc3VicGFja2FnZXMKKyBteSAkcmVjdXJzaXZlID0gMTsKKyAKKysjIFN0ZXBzIHRvIGV4Y2x1ZGUKKytteSBAZXhjbHVkZTsKKytteSBAZXg7CisrCisrbXkgJHVzZXNfZ2V0dGV4dDsKKytteSAkY29uZmlndXJlX2FjOworKworICMjIC0tLS0tLS0tLS0gIyMKKyAjIyBSb3V0aW5lcy4gICMjCisgIyMgLS0tLS0tLS0tLSAjIworQEAgLTE1Myw2ICsxNjEsNyBAQAorIAkgICdCfHByZXBlbmQtaW5jbHVkZT1zJwkgPT4gXEBwcmVwZW5kX2luY2x1ZGUsCisgCSAgJ2l8aW5zdGFsbCcgICAgICAgICAgICA9PiBcJGluc3RhbGwsCisgCSAgJ3N8c3ltbGluaycgICAgICAgICAgICA9PiBcJHN5bWxpbmssCisrICAJICAneHxleGNsdWRlPXMnICAgICAgICAgID0+IFxAZXhjbHVkZSwKKyAJICAnbXxtYWtlJyAgICAgICAgICAgICAgID0+IFwkcnVuX21ha2UsCisgCSAgJ3JlY3Vyc2l2ZSEnICAgICAgICAgICA9PiBcJHJlY3Vyc2l2ZSk7CisgCitAQCAtMTYyLDYgKzE3MSw4IEBACisgICBwYXJzZV9XQVJOSU5HUzsKKyAgIHBhcnNlX3dhcm5pbmdzICctLXdhcm5pbmdzJywgQHdhcm5pbmc7CisgCisrICBAZXhjbHVkZSA9IG1hcCB7IHNwbGl0IC8sLyB9IEBleGNsdWRlOworKworICAgIyBFdmVuIGlmIHRoZSB1c2VyIHNwZWNpZmllZCBhIGNvbmZpZ3VyZS5hYywgdHJpbSB0byBnZXQgdGhlCisgICAjIGRpcmVjdG9yeSwgYW5kIGxvb2sgZm9yIGNvbmZpZ3VyZS5hYyBhZ2Fpbi4gIEJlY2F1c2UgKGkpIHRoZSBjb2RlCisgICAjIGlzIHNpbXBsZXIsIGFuZCAoaWkpIHdlIGFyZSBzdGlsbCBhYmxlIHRvIGRpYWdub3NlIHNpbXVsdGFuZW91cworQEAgLTI1NSw2ICsyNjYsMTEgQEAKKyB7CisgICBteSAoJGFjbG9jYWwsICRmbGFncykgPSBAXzsKKyAKKysgIEBleCA9IGdyZXAgKC9eYWNsb2NhbCQvLCBAZXhjbHVkZSk7CisrICBpZiAoJCNleCAhPSAtMSkgeworKyAgICByZXR1cm47CisrICB9CisrCisgICAjIGFjbG9jYWwgMS44KyBkb2VzIGFsbCB0aGlzIGZvciBmcmVlLiAgSXQgY2FuIGJlIHJlY29nbml6ZWQgYnkgaXRzCisgICAjIC0tZm9yY2Ugc3VwcG9ydC4KKyAgIGlmICgkYWNsb2NhbF9zdXBwb3J0c19mb3JjZSkKK0BAIC0zNjgsNyArMzg0LDEwIEBACisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworLSAgICAgIHhzeXN0ZW1faGludCAoImF1dG9wb2ludCBpcyBuZWVkZWQgYmVjYXVzZSB0aGlzIHBhY2thZ2UgdXNlcyBHZXR0ZXh0IiwgIiRhdXRvcG9pbnQiKTsKKysgICAgICBAZXggPSBncmVwICgvXmF1dG9wb2ludCQvLCBAZXhjbHVkZSk7CisrICAgICAgaWYgKCQjZXggPT0gLTEpIHsKKysgICAgICAgIHhzeXN0ZW1faGludCAoImF1dG9wb2ludCBpcyBuZWVkZWQgYmVjYXVzZSB0aGlzIHBhY2thZ2UgdXNlcyBHZXR0ZXh0IiwgIiRhdXRvcG9pbnQiKTsKKysgICAgICB9CisgICAgIH0KKyAKKyAKK0BAIC01MzIsMTYgKzU1MSwxNyBAQAorIAl7CisgCSAgJGxpYnRvb2xpemUgLj0gIiAtLWx0ZGwiOworIAl9CistICAgICAgeHN5c3RlbV9oaW50ICgibGlidG9vbGl6ZSBpcyBuZWVkZWQgYmVjYXVzZSB0aGlzIHBhY2thZ2UgdXNlcyBMaWJ0b29sIiwgJGxpYnRvb2xpemUpOworLSAgICAgICRyZXJ1bl9hY2xvY2FsID0gMTsKKysgICAgICBAZXggPSBncmVwICgvXmxpYnRvb2xpemUkLywgQGV4Y2x1ZGUpOworKyAgICAgIGlmICgkI2V4ID09IC0xKSB7CisrICAgICAgICB4c3lzdGVtX2hpbnQgKCJsaWJ0b29saXplIGlzIG5lZWRlZCBiZWNhdXNlIHRoaXMgcGFja2FnZSB1c2VzIExpYnRvb2wiLCAkbGlidG9vbGl6ZSk7CisrICAgICAgICAkcmVydW5fYWNsb2NhbCA9IDE7CisrICAgICAgfQorICAgICB9CisgICBlbHNlCisgICAgIHsKKyAgICAgICB2ZXJiICIkY29uZmlndXJlX2FjOiBub3QgcnVubmluZyBsaWJ0b29saXplOiAtLWluc3RhbGwgbm90IGdpdmVuIjsKKyAgICAgfQorIAorLQorLQorICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMKKyAgICMgUmVydW5uaW5nIGFjbG9jYWwuICAjCisgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIworQEAgLTU3Miw3ICs1OTIsMTAgQEAKKyAgICMgbGF0dGVyIHJ1bnMgdGhlIGZvcm1lciwgYW5kIChpaSkgYXV0b2NvbmYgaXMgc3RyaWN0ZXIgdGhhbgorICAgIyBhdXRvaGVhZGVyLiAgU28gYWxsIGluIGFsbCwgYXV0b2NvbmYgc2hvdWxkIGdpdmUgYmV0dGVyIGVycm9yCisgICAjIG1lc3NhZ2VzLgorLSAgeHN5c3RlbSAoJGF1dG9jb25mKTsKKysgIEBleCA9IGdyZXAgKC9eYXV0b2NvbmYkLywgQGV4Y2x1ZGUpOworKyAgaWYgKCQjZXggPT0gLTEpIHsKKysgICAgeHN5c3RlbSAoIiRhdXRvY29uZiIpOworKyAgfQorIAorIAorICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjCitAQCAtNTkzLDcgKzYxNiwxMCBAQAorICAgICB9CisgICBlbHNlCisgICAgIHsKKy0gICAgICB4c3lzdGVtICgkYXV0b2hlYWRlcik7CisrICAgICAgQGV4ID0gZ3JlcCAoL15hdXRvaGVhZGVyJC8sIEBleGNsdWRlKTsKKysgICAgICBpZiAoJCNleCA9PSAtMSkgeworKyAgICAgICAgeHN5c3RlbSAoIiRhdXRvaGVhZGVyIik7CisrICAgICAgfQorICAgICB9CisgCisgCitAQCAtNjEwLDcgKzYzNiwxMCBAQAorICAgICAgICMgV2Ugc2hvdWxkIGFsd2F5cyBydW4gYXV0b21ha2UsIGFuZCBsZXQgaXQgZGVjaWRlIHdoZXRoZXIgaXQgc2hhbGwKKyAgICAgICAjIHVwZGF0ZSB0aGUgZmlsZSBvciBub3QuICBJbiBmYWN0LCB0aGUgZWZmZWN0IG9mIGAkZm9yY2UnIGlzIGFscmVhZHkKKyAgICAgICAjIGluY2x1ZGVkIGluIGAkYXV0b21ha2UnIHZpYSBgLS1uby1mb3JjZScuCistICAgICAgeHN5c3RlbSAoJGF1dG9tYWtlKTsKKysgICAgICBAZXggPSBncmVwICgvXmF1dG9tYWtlJC8sIEBleGNsdWRlKTsKKysgICAgICBpZiAoJCNleCA9PSAtMSkgeworKyAgICAgICAgeHN5c3RlbSAoIiRhdXRvbWFrZSIpOworKyAgICAgIH0KKyAgICAgfQorIAorIAorQEAgLTYzNCw3ICs2NjMsMTAgQEAKKyAJICAgIH0KKyAJICBlbHNlCisgCSAgICB7CistCSAgICAgIHhzeXN0ZW0gKCIkbWFrZSIpOworKyAgICAgICAgICAgICAgQGV4ID0gZ3JlcCAoL15tYWtlJC8sIEBleGNsdWRlKTsKKysgICAgICAgICAgICAgIGlmICgkI2V4ID09IC0xKSB7CisrCSAgICAgICAgeHN5c3RlbSAoIiRtYWtlIik7CisrICAgICAgICAgICAgICB9CisgCSAgICB9CisgCX0KKyAgICAgfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3JlY29uZi1nbnVjb25maWdpemUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvcmVjb25mLWdudWNvbmZpZ2l6ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmYxOGMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3JlY29uZi1nbnVjb25maWdpemUucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyMKKyMgUGF0Y2ggbWFuYWdlZCBieSBodHRwOi8vd3d3Lm1uLWxvZ2lzdGlrLmRlL3Vuc3VwcG9ydGVkL3B4YTI1MC9wYXRjaGVyCisjCisKK0luZGV4OiBhdXRvY29uZi0yLjYzL2Jpbi9hdXRvcmVjb25mLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXV0b2NvbmYtMi42My5vcmlnL2Jpbi9hdXRvcmVjb25mLmluCTIwMDgtMTItMzEgMTc6NDM6NTUuMDAwMDAwMDAwICswMDAwCisrKysgYXV0b2NvbmYtMi42My9iaW4vYXV0b3JlY29uZi5pbgkyMDA4LTEyLTMxIDE3OjQ2OjE2LjAwMDAwMDAwMCArMDAwMAorQEAgLTU4LDcgKzU4LDcgQEAKKyAkaGVscCA9ICJVc2FnZTogJDAgW09QVElPTl0uLi4gW0RJUkVDVE9SWV0uLi4KKyAKKyBSdW4gYGF1dG9jb25mJyAoYW5kIGBhdXRvaGVhZGVyJywgYGFjbG9jYWwnLCBgYXV0b21ha2UnLCBgYXV0b3BvaW50JworLShmb3JtZXJseSBgZ2V0dGV4dGl6ZScpLCBhbmQgYGxpYnRvb2xpemUnIHdoZXJlIGFwcHJvcHJpYXRlKQorKyhmb3JtZXJseSBgZ2V0dGV4dGl6ZScpLCBgbGlidG9vbGl6ZScsIGFuZCBgZ251LWNvbmZpZ2l6ZScgd2hlcmUgYXBwcm9wcmlhdGUpCisgcmVwZWF0ZWRseSB0byByZW1ha2UgdGhlIEdOVSBCdWlsZCBTeXN0ZW0gZmlsZXMgaW4gc3BlY2lmaWVkCisgRElSRUNUT1JJRVMgYW5kIHRoZWlyIHN1YmRpcmVjdG9yaWVzIChkZWZhdWx0aW5nIHRvIGAuJykuCisgCitAQCAtMTE1LDYgKzExNSw3IEBACisgbXkgJGxpYnRvb2xpemUgPSAkRU5WeydMSUJUT09MSVpFJ30gfHwgJ2xpYnRvb2xpemUnOworIG15ICRhdXRvcG9pbnQgID0gJEVOVnsnQVVUT1BPSU5UJ30gIHx8ICdhdXRvcG9pbnQnOworIG15ICRtYWtlICAgICAgID0gJEVOVnsnTUFLRSd9ICAgICAgIHx8ICdtYWtlJzsKKytteSAkZ251Y29uZmlnaXplID0gJEVOVnsnR05VQ09ORklHSVpFJ30gICAgICAgfHwgJ2dudS1jb25maWdpemUnOworIAorICMgLS1pbnN0YWxsIC0tIGFzIC0tYWRkLW1pc3NpbmcgaW4gb3RoZXIgdG9vbHMuCisgbXkgJGluc3RhbGwgPSAwOworQEAgLTY0NCw2ICs2NDUsMTAgQEAKKyAgICAgICB9CisgICAgIH0KKyAKKysgIEBleCA9IGdyZXAgKC9eZ251LWNvbmZpZ2l6ZSQvLCBAZXhjbHVkZSk7CisrICBpZiAoJCNleCA9PSAtMSkgeworKyAgICB4c3lzdGVtICgiJGdudWNvbmZpZ2l6ZSIpOworKyAgfQorIAorICAgIyAtLS0tLS0tLS0tLS0tLSAjCisgICAjIFJ1bm5pbmcgbWFrZS4gICMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2F1dG9yZWNvbmYtaW5jbHVkZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2F1dG9yZWNvbmYtaW5jbHVkZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTMyNmYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3JlY29uZi1pbmNsdWRlLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogYXV0b2NvbmYtMi42My9iaW4vYXV0b3JlY29uZi5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF1dG9jb25mLTIuNjMub3JpZy9iaW4vYXV0b3JlY29uZi5pbgkyMDA4LTA4LTI4IDAzOjA4OjEwLjAwMDAwMDAwMCArMDEwMAorKysrIGF1dG9jb25mLTIuNjMvYmluL2F1dG9yZWNvbmYuaW4JMjAwOC0xMi0zMSAxNzozODo0MC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xOTAsNiArMTkwLDcgQEAKKyAgICRhdXRvY29uZiAgIC49IGpvaW4gKCcgLS1wcmVwZW5kLWluY2x1ZGU9JywgJycsIG1hcCB7IHNoZWxsX3F1b3RlICgkXykgfSBAcHJlcGVuZF9pbmNsdWRlKTsKKyAgICRhdXRvaGVhZGVyIC49IGpvaW4gKCcgLS1pbmNsdWRlPScsICcnLCBtYXAgeyBzaGVsbF9xdW90ZSAoJF8pIH0gQGluY2x1ZGUpOworICAgJGF1dG9oZWFkZXIgLj0gam9pbiAoJyAtLXByZXBlbmQtaW5jbHVkZT0nLCAnJywgbWFwIHsgc2hlbGxfcXVvdGUgKCRfKSB9IEBwcmVwZW5kX2luY2x1ZGUpOworKyAgJGFjbG9jYWwgICAgLj0gam9pbiAoJyAtSSAnLCAnJywgbWFwIHsgc2hlbGxfcXVvdGUgKCRfKSB9IEBpbmNsdWRlKTsKKyAKKyAgICMgLS1pbnN0YWxsIGFuZCAtLXN5bWxpbms7CisgICBpZiAoJGluc3RhbGwpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvdGVzdC1hdXRvbWFrZS1yZXN1bHQtZm9ybWF0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3Rlc3QtYXV0b21ha2UtcmVzdWx0LWZvcm1hdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWU4MTc0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3Rlc3QtYXV0b21ha2UtcmVzdWx0LWZvcm1hdC5wYXRjaApAQCAtMCwwICsxLDEzNiBAQAorRnJvbSBhN2U3MjJmOTc0ZTI1MjlkM2U1NjRkOGQ5NGM4NmNjOGJkYmM0MGU3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUmFkdSBQYXRyaXUgPHJhZHUucGF0cml1QGVuZWEuY29tPgorRGF0ZTogTW9uLCAyNCBNYXIgMjAxNCAxNjozMzoxOSArMDIwMAorU3ViamVjdDogW1BBVENIXSBhdXRvdGVzdDogbmV3IHRlc3RzdWl0ZSBvcHRpb24gdG8gZW5hYmxlIGF1dG9tYWtlIHRlc3QKKyByZXN1bHQgZm9ybWF0CisKKyogbGliL2F1dG90ZXN0L2dlbmVyYWwubTQ6IGFkZGVkICItLWFtLWZtdCB8IC1BIiBjb21tYW5kIGxpbmUKK3BhcmFtZXRlciBmb3IgdGVzdHN1aXRlIHNjcmlwdCB0byBlbmFibGUgIlJFU1VMVDogdGVzdG5hbWUiIG91dHB1dDsKK3dpbGwgYmUgdXNlZCBieSB5b2N0byBwdGVzdCBwYWNrYWdlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJhZHUgUGF0cml1IDxyYWR1LnBhdHJpdUBlbmVhLmNvbT4KKy0tLQorIGxpYi9hdXRvdGVzdC9nZW5lcmFsLm00IHwgICAzOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvYXV0b3Rlc3QvZ2VuZXJhbC5tNCBiL2xpYi9hdXRvdGVzdC9nZW5lcmFsLm00CitpbmRleCA2MGMwMzUyLi5jMWY1YTliIDEwMDY0NAorLS0tIGEvbGliL2F1dG90ZXN0L2dlbmVyYWwubTQKKysrKyBiL2xpYi9hdXRvdGVzdC9nZW5lcmFsLm00CitAQCAtNDEyLDYgKzQxMiw5IEBAIGF0X3JlY2hlY2s9CisgIyBXaGV0aGVyIGEgd3JpdGUgZmFpbHVyZSBvY2N1cnJlZAorIGF0X3dyaXRlX2ZhaWw9MAorIAorKyMgQXV0b21ha2UgcmVzdWx0IGZvcm1hdCAicmVzdWx0OiB0ZXN0bmFtZSIKKythdF9hbV9mbXQ9ZmFsc2UKKysKKyAjIFRoZSBkaXJlY3Rvcnkgd2UgcnVuIHRoZSBzdWl0ZSBpbi4gIERlZmF1bHQgdG8gLiBpZiBubyAtQyBvcHRpb24uCisgYXRfZGlyPWBwd2RgCisgIyBBbiBhYnNvbHV0ZSByZWZlcmVuY2UgdG8gdGhpcyB0ZXN0c3VpdGUgc2NyaXB0LgorQEAgLTUzMCw2ICs1MzMsMTAgQEAgZG8KKyAJYXRfY2hlY2tfZmlsdGVyX3RyYWNlPWF0X2ZuX2ZpbHRlcl90cmFjZQorIAk7OworIAorKyAgICAtLWFtLWZtdCB8IC1BICkKKysJYXRfYW1fZm10PToKKysJOzsKKysKKyAgICAgW1swLTldIHwgWzAtOV1bMC05XSB8IFswLTldWzAtOV1bMC05XSB8IFswLTldWzAtOV1bMC05XVswLTldXSkKKyAJYXRfZm5fdmFsaWRhdGVfcmFuZ2VzIGF0X29wdGlvbgorIAlBU19WQVJfQVBQRU5EKFthdF9ncm91cHNdLCBbIiRhdF9vcHRpb24kYXNfbmwiXSkKK0BAIC03MTgsMTAgKzcyNSwxMCBAQCBtNF9kaXZlcnRfcHVzaChbSEVMUF9NT0RFU10pZG5sCisgY2F0IDw8X0FURU9GIHx8IGF0X3dyaXRlX2ZhaWw9MQorIAorIE9wZXJhdGlvbiBtb2RlczoKKy0gIC1oLCAtLWhlbHAgICAgIHByaW50IHRoZSBoZWxwIG1lc3NhZ2UsIHRoZW4gZXhpdAorLSAgLVYsIC0tdmVyc2lvbiAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorLSAgLWMsIC0tY2xlYW4gICAgcmVtb3ZlIGFsbCB0aGUgZmlsZXMgdGhpcyB0ZXN0IHN1aXRlIG1pZ2h0IGNyZWF0ZSBhbmQgZXhpdAorLSAgLWwsIC0tbGlzdCAgICAgZGVzY3JpYmVzIGFsbCB0aGUgdGVzdHMsIG9yIHRoZSBzZWxlY3RlZCBURVNUUworKyAgLWgsIC0taGVscCAgICAgIHByaW50IHRoZSBoZWxwIG1lc3NhZ2UsIHRoZW4gZXhpdAorKyAgLVYsIC0tdmVyc2lvbiAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKysgIC1jLCAtLWNsZWFuICAgICByZW1vdmUgYWxsIHRoZSBmaWxlcyB0aGlzIHRlc3Qgc3VpdGUgbWlnaHQgY3JlYXRlIGFuZCBleGl0CisrICAtbCwgLS1saXN0ICAgICAgZGVzY3JpYmVzIGFsbCB0aGUgdGVzdHMsIG9yIHRoZSBzZWxlY3RlZCBURVNUUworIF9BVEVPRgorIG00X2RpdmVydF9wb3AoW0hFTFBfTU9ERVNdKWRubAorIG00X3dyYXAoW200X2RpdmVydF9wdXNoKFtIRUxQX1RVTklOR19CRUdJTl0pZG5sCitAQCAtNzQ3LDYgKzc1NCw3IEBAIEV4ZWN1dGlvbiB0dW5pbmc6CisgICAtZCwgLS1kZWJ1ZyAgICBpbmhpYml0IGNsZWFuIHVwIGFuZCB0b3AtbGV2ZWwgbG9nZ2luZworIFsgICAgICAgICAgICAgICAgIGRlZmF1bHQgZm9yIGRlYnVnZ2luZyBzY3JpcHRzXQorICAgLXgsIC0tdHJhY2UgICAgZW5hYmxlIHRlc3RzIHNoZWxsIHRyYWNpbmcKKysgIC1BLCAtLWFtLWZtdCAgIGF1dG9tYWtlIHJlc3VsdCBmb3JtYXQgInJlc3VsdDogdGVzdG5hbWUiCisgX0FURU9GCisgbTRfZGl2ZXJ0X3BvcChbSEVMUF9UVU5JTkdfQkVHSU5dKV0pZG5sCisgbTRfZGl2ZXJ0X3B1c2goW0hFTFBfRU5EXSlkbmwKK0BAIC0xMTYyLDcgKzExNzAsOSBAQCBhdF9mbl9ncm91cF9iYW5uZXIgKCkKKyAgICAgWypdKSAgICAgICAgICBhdF9kZXNjX2xpbmU9IiRbMV06ICIgIDs7CisgICBlc2FjCisgICBBU19WQVJfQVBQRU5EKFthdF9kZXNjX2xpbmVdLCBbIiRbM10kWzRdIl0pCistICAkYXRfcXVpZXQgQVNfRUNIT19OKFsiJGF0X2Rlc2NfbGluZSJdKQorKyAgaWYgISAkYXRfYW1fZm10OyB0aGVuCisrICAgICRhdF9xdWlldCBBU19FQ0hPX04oWyIkYXRfZGVzY19saW5lIl0pCisrICBmaQorICAgZWNobyAiIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIGNvbXBpbGF0aW9uIC0qLSIgPj4gIiRhdF9ncm91cF9sb2ciCisgfQorIAorQEAgLTExODgsNDIgKzExOTgsNTEgQEAgX0FURU9GCisgICBjYXNlICRhdF94ZmFpbDokYXRfc3RhdHVzIGluCisgICAgIHllczowKQorIAlhdF9tc2c9IlVORVhQRUNURUQgUEFTUyIKKysJYXRfYW1fbXNnPSJYUEFTUyIKKyAJYXRfcmVzPXhwYXNzCisgCWF0X2VycmV4aXQ9JGF0X2VycmV4aXRfcAorIAlhdF9jb2xvcj0kYXRfcmVkCisgCTs7CisgICAgIG5vOjApCisgCWF0X21zZz0ib2siCisrCWF0X2FtX21zZz0iUEFTUyIKKyAJYXRfcmVzPXBhc3MKKyAJYXRfZXJyZXhpdD1mYWxzZQorIAlhdF9jb2xvcj0kYXRfZ3JuCisgCTs7CisgICAgICo6NzcpCisgCWF0X21zZz0nc2tpcHBlZCAoJ2BjYXQgIiRhdF9jaGVja19saW5lX2ZpbGUiYCcpJworKwlhdF9hbV9tc2c9IlNLSVAiCisgCWF0X3Jlcz1za2lwCisgCWF0X2VycmV4aXQ9ZmFsc2UKKyAJYXRfY29sb3I9JGF0X2JsdQorIAk7OworICAgICBubzoqIHwgKjo5OSkKKyAJYXRfbXNnPSdGQUlMRUQgKCdgY2F0ICIkYXRfY2hlY2tfbGluZV9maWxlImAnKScKKysJYXRfYW1fbXNnPSJGQUlMIgorIAlhdF9yZXM9ZmFpbAorIAlhdF9lcnJleGl0PSRhdF9lcnJleGl0X3AKKyAJYXRfY29sb3I9JGF0X3JlZAorIAk7OworICAgICB5ZXM6KikKKyAJYXRfbXNnPSdleHBlY3RlZCBmYWlsdXJlICgnYGNhdCAiJGF0X2NoZWNrX2xpbmVfZmlsZSJgJyknCisrCWF0X2FtX21zZz0iWEZBSUwiCisgCWF0X3Jlcz14ZmFpbAorIAlhdF9lcnJleGl0PWZhbHNlCisgCWF0X2NvbG9yPSRhdF9sZ24KKyAJOzsKKyAgIGVzYWMKKyAgIGVjaG8gIiRhdF9yZXMiID4gIiRhdF9qb2JfZGlyLyRhdF9yZXMiCistICAjIEluIHBhcmFsbGVsIG1vZGUsIG91dHB1dCB0aGUgc3VtbWFyeSBsaW5lIG9ubHkgYWZ0ZXJ3YXJkcy4KKy0gIGlmIHRlc3QgJGF0X2pvYnMgLW5lIDEgJiYgdGVzdCAtbiAiJGF0X3ZlcmJvc2UiOyB0aGVuCistICAgIEFTX0VDSE8oWyIkYXRfZGVzY19saW5lICRhdF9jb2xvciRhdF9tc2ckYXRfc3RkIl0pCisrICBpZiAkYXRfYW1fZm10OyB0aGVuCisrICAgICAgQVNfRUNITyhbIiRhdF9hbV9tc2c6ICRhdF9kZXNjIl0pCisgICBlbHNlCistICAgICMgTWFrZSBzdXJlIHRoZXJlIGlzIGEgc2VwYXJhdG9yIGV2ZW4gd2l0aCBsb25nIHRpdGxlcy4KKy0gICAgQVNfRUNITyhbIiAkYXRfY29sb3IkYXRfbXNnJGF0X3N0ZCJdKQorKyAgICAjIEluIHBhcmFsbGVsIG1vZGUsIG91dHB1dCB0aGUgc3VtbWFyeSBsaW5lIG9ubHkgYWZ0ZXJ3YXJkcy4KKysgICAgaWYgdGVzdCAkYXRfam9icyAtbmUgMSAmJiB0ZXN0IC1uICIkYXRfdmVyYm9zZSI7IHRoZW4KKysgICAgICBBU19FQ0hPKFsiJGF0X2Rlc2NfbGluZSAkYXRfY29sb3IkYXRfbXNnJGF0X3N0ZCJdKQorKyAgICBlbHNlCisrICAgICAgIyBNYWtlIHN1cmUgdGhlcmUgaXMgYSBzZXBhcmF0b3IgZXZlbiB3aXRoIGxvbmcgdGl0bGVzLgorKyAgICAgIEFTX0VDSE8oWyIgJGF0X2NvbG9yJGF0X21zZyRhdF9zdGQiXSkKKysgICAgZmkKKyAgIGZpCisgICBhdF9sb2dfbXNnPSIkYXRfZ3JvdXAuICRhdF9kZXNjICgkYXRfc2V0dXBfbGluZSk6ICRhdF9tc2ciCisgICBjYXNlICRhdF9zdGF0dXMgaW4KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9jaGVjay1hdXRvbWFrZS1jcm9zcy13YXJuaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvY2hlY2stYXV0b21ha2UtY3Jvc3Mtd2FybmluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzM5NGQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvY2hlY2stYXV0b21ha2UtY3Jvc3Mtd2FybmluZy5wYXRjaApAQCAtMCwwICsxLDM0IEBACitVc2UgLS13YXJuaW5nPWNyb3NzIG9ubHkgaWYgc3VwcG9ydGVkIGJ5IGF1dG9tYWtlCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCistLS0gYS9iaW4vYXV0b3JlY29uZi5pbgorKysrIGIvYmluL2F1dG9yZWNvbmYuaW4KK0BAIC0xMjcsNiArMTI3LDggQEAgbXkgJGFjbG9jYWxfc3VwcG9ydHNfd2FybmluZ3MgPSAwOworIG15ICRhdXRvbWFrZV9zdXBwb3J0c19mb3JjZV9taXNzaW5nID0gMDsKKyAjIERvZXMgYXV0b21ha2Ugc3VwcG9ydCAtV2Zvbz8KKyBteSAkYXV0b21ha2Vfc3VwcG9ydHNfd2FybmluZ3MgPSAwOworKyMgRG9lcyBhdXRvbWFrZSBzdXBwb3J0IC0td2FybmluZz1jcm9zcworK215ICRhdXRvbWFrZV9zdXBwb3J0c19jcm9zc193YXJuaW5nID0gMDsKKyAKKyBteSBAcHJlcGVuZF9pbmNsdWRlOworIG15IEBpbmNsdWRlOworQEAgLTE5MSw2ICsxOTMsNyBAQCBzdWIgcGFyc2VfYXJncyAoKQorICAgJGFjbG9jYWxfc3VwcG9ydHNfd2FybmluZ3MgPSAkYWNsb2NhbF9oZWxwID1+IC8tLXdhcm5pbmdzLzsKKyAgICRhdXRvbWFrZV9zdXBwb3J0c19mb3JjZV9taXNzaW5nID0gJGF1dG9tYWtlX2hlbHAgPX4gLy0tZm9yY2UtbWlzc2luZy87CisgICAkYXV0b21ha2Vfc3VwcG9ydHNfd2FybmluZ3MgPSAkYXV0b21ha2VfaGVscCA9fiAvLS13YXJuaW5ncy87CisrICAkYXV0b21ha2Vfc3VwcG9ydHNfY3Jvc3Nfd2FybmluZyA9ICRhdXRvbWFrZV9oZWxwID1+IC9jcm9zcy87CisgCisgICAjIERpc3BhdGNoIGF1dG9yZWNvbmYncyBvcHRpb24gdG8gdGhlIHRvb2xzLgorICAgIyAtLWluY2x1ZGU7CitAQCAtMjQ0LDYgKzI0Nyw4IEBAIHN1YiBwYXJzZV9hcmdzICgpCisgICAgICAgJGxpYnRvb2xpemUgLj0gJyAtLWRlYnVnJzsKKyAgICAgfQorICAgIyAtLXdhcm5pbmdzOworKyAgQHdhcm5pbmcgPSBncmVwIHsgJF8gbmUgImNyb3NzIiB9IEB3YXJuaW5nCisrICAgIGlmICEgJGF1dG9tYWtlX3N1cHBvcnRzX2Nyb3NzX3dhcm5pbmc7CisgICBpZiAoQHdhcm5pbmcpCisgICAgIHsKKyAgICAgICBteSAkd2FybiA9ICcgLS13YXJuaW5ncz0nIC4gam9pbiAoJywnLCBAd2FybmluZyk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9jb25maWdfc2l0ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2NvbmZpZ19zaXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMDQ0NDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9jb25maWdfc2l0ZS5wYXRjaApAQCAtMCwwICsxLDQwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUG9reSBwcm92aWRlcyBhIGxpc3Qgb2Ygc2l0ZSBmaWxlcyBpbiBDT05GSUdfU0lURSB3aGVyZWFzIGF1dG9jb25mIAorb25seSBleHBlY3RzIG9uZSBmaWxlLiBUaGlzIHBhdGNoIGNoYW5nZXMgYXV0b2NvbmYgdG8gYWNjZXB0IGEgbGlzdCBvZiAKK3RoZW0uCisKK1JQIDEvMi8xMAorCitVcGRhdGVkIGZvciAyLjY4IHZlcnNpb246IHRoZSBDT05GSUdfU0lURSB2YXIgd2FzIG5vdCBnZXR0aW5nIHVzZWQgYXQgYWxsCitmaXhlZCB0aGUgMi42OCBjb2RlIAorTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8wNS8yNworCitJbmRleDogYXV0b2NvbmYtMi42OC9saWIvYXV0b2NvbmYvZ2VuZXJhbC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF1dG9jb25mLTIuNjgub3JpZy9saWIvYXV0b2NvbmYvZ2VuZXJhbC5tNAorKysrIGF1dG9jb25mLTIuNjgvbGliL2F1dG9jb25mL2dlbmVyYWwubTQKK0BAIC0xODc4LDcgKzE4NzgsNiBAQCBBVV9ERUZVTihbQUNfVkFMSURBVEVfQ0FDSEVEX1NZU1RFTV9UVVBMCisgbTRfZGVmaW5lKFtBQ19TSVRFX0xPQURdLAorIFsjIFByZWZlciBhbiBleHBsaWNpdGx5IHNlbGVjdGVkIGZpbGUgdG8gYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbmVzLgorIGFjX3NpdGVfZmlsZTE9Tk9ORQorLWFjX3NpdGVfZmlsZTI9Tk9ORQorIGlmIHRlc3QgLW4gIiRDT05GSUdfU0lURSI7IHRoZW4KKyAgICMgV2UgZG8gbm90IHdhbnQgYSBQQVRIIHNlYXJjaCBmb3IgY29uZmlnLnNpdGUuCisgICBjYXNlICRDT05GSUdfU0lURSBpbiBAJTpAKCgKK0BAIC0xODg2LDE0ICsxODg1LDggQEAgaWYgdGVzdCAtbiAiJENPTkZJR19TSVRFIjsgdGhlbgorICAgICAqLyopIGFjX3NpdGVfZmlsZTE9JENPTkZJR19TSVRFOzsKKyAgICAgKikgICBhY19zaXRlX2ZpbGUxPS4vJENPTkZJR19TSVRFOzsKKyAgIGVzYWMKKy1lbGlmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgorLSAgYWNfc2l0ZV9maWxlMT0kcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCistICBhY19zaXRlX2ZpbGUyPSRwcmVmaXgvZXRjL2NvbmZpZy5zaXRlCistZWxzZQorLSAgYWNfc2l0ZV9maWxlMT0kYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKy0gIGFjX3NpdGVfZmlsZTI9JGFjX2RlZmF1bHRfcHJlZml4L2V0Yy9jb25maWcuc2l0ZQorIGZpCistZm9yIGFjX3NpdGVfZmlsZSBpbiAiJGFjX3NpdGVfZmlsZTEiICIkYWNfc2l0ZV9maWxlMiIKKytmb3IgYWNfc2l0ZV9maWxlIGluICRhY19zaXRlX2ZpbGUxCisgZG8KKyAgIHRlc3QgIngkYWNfc2l0ZV9maWxlIiA9IHhOT05FICYmIGNvbnRpbnVlCisgICBpZiB0ZXN0IC9kZXYvbnVsbCAhPSAiJGFjX3NpdGVfZmlsZSIgJiYgdGVzdCAtciAiJGFjX3NpdGVfZmlsZSI7IHRoZW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2ZpeF9wYXRoX3h0cmEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9maXhfcGF0aF94dHJhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZGY4OGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9maXhfcGF0aF94dHJhLnBhdGNoCkBAIC0wLDAgKzEsMTIwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworV2UgZG9uJ3QgYnVpbGQgeG1rbWYgc28gYW55IHZhbHVlcyByZXR1cm5lZCBmcm9tIGl0IGFyZSBnb2luZyB0byBiZSB3cm9uZy4KK1VzaW5nIGFueSBwYXRocyBpbiAvdXNyLyBmb3IgeCBoZWFkZXJzL2xpYnMgaXMgYSBiYWQgaWRlYSB3aGVuIGNyb3NzIGNvbXBpbGluZy4KK1RoaXMgcGF0Y2ggcmVtb3ZlcyB0aGVtIHRvIHN0b3AgYW55IGNvbmZ1c2lvbi4KKworUlAgLSAyMDA3MTExNQorCitJbmRleDogYXV0b2NvbmYtMi42OC9saWIvYXV0b2NvbmYvbGlicy5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF1dG9jb25mLTIuNjgub3JpZy9saWIvYXV0b2NvbmYvbGlicy5tNAorKysrIGF1dG9jb25mLTIuNjgvbGliL2F1dG9jb25mL2xpYnMubTQKK0BAIC0xNTksNTMgKzE1OSw2IEBAIG00X3BvcGRlZihbQUNfTGliX05hbWVdKWRubAorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKyAKKyAKKy0jIF9BQ19QQVRIX1hfWE1LTUYKKy0jIC0tLS0tLS0tLS0tLS0tLS0KKy0jIEludGVybmFsIHN1YnJvdXRpbmUgb2YgX0FDX1BBVEhfWC4KKy0jIFNldCBhY194X2luY2x1ZGVzIGFuZC9vciBhY194X2xpYnJhcmllcy4KKy1tNF9kZWZpbmUoW19BQ19QQVRIX1hfWE1LTUZdLAorLVtBQ19BUkdfVkFSKFhNS01GLCBbUGF0aCB0byB4bWttZiwgTWFrZWZpbGUgZ2VuZXJhdG9yIGZvciBYIFdpbmRvdyBTeXN0ZW1dKWRubAorLXJtIC1mIC1yIGNvbmZ0ZXN0LmRpcgorLWlmIG1rZGlyIGNvbmZ0ZXN0LmRpcjsgdGhlbgorLSAgY2QgY29uZnRlc3QuZGlyCistICBjYXQgPkltYWtlZmlsZSA8PCdfQUNFT0YnCistaW5jcm9vdDoKKy0JQGVjaG8gaW5jcm9vdD0nJHtJTkNST09UfScKKy11c3JsaWJkaXI6CistCUBlY2hvIHVzcmxpYmRpcj0nJHtVU1JMSUJESVJ9JworLWxpYmRpcjoKKy0JQGVjaG8gbGliZGlyPScke0xJQkRJUn0nCistX0FDRU9GCistICBpZiAoZXhwb3J0IENDOyAke1hNS01GLXhta21mfSkgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCAmJiB0ZXN0IC1mIE1ha2VmaWxlOyB0aGVuCistICAgICMgR05VIG1ha2Ugc29tZXRpbWVzIHByaW50cyAibWFrZVsxXTogRW50ZXJpbmcgLi4uIiwgd2hpY2ggd291bGQgY29uZnVzZSB1cy4KKy0gICAgZm9yIGFjX3ZhciBpbiBpbmNyb290IHVzcmxpYmRpciBsaWJkaXI7IGRvCistICAgICAgZXZhbCAiYWNfaW1fJGFjX3Zhcj1cYFwke01BS0UtbWFrZX0gJGFjX3ZhciAyPi9kZXYvbnVsbCB8IHNlZCAtbiAncy9eJGFjX3Zhcj0vL3AnXGAiCistICAgIGRvbmUKKy0gICAgIyBPcGVuIFdpbmRvd3MgeG1rbWYgcmVwb3J0ZWRseSBzZXRzIExJQkRJUiBpbnN0ZWFkIG9mIFVTUkxJQkRJUi4KKy0gICAgZm9yIGFjX2V4dGVuc2lvbiBpbiBhIHNvIHNsIGR5bGliIGxhIGRsbDsgZG8KKy0gICAgICBpZiB0ZXN0ICEgLWYgIiRhY19pbV91c3JsaWJkaXIvbGliWDExLiRhY19leHRlbnNpb24iICYmCistCSB0ZXN0IC1mICIkYWNfaW1fbGliZGlyL2xpYlgxMS4kYWNfZXh0ZW5zaW9uIjsgdGhlbgorLQlhY19pbV91c3JsaWJkaXI9JGFjX2ltX2xpYmRpcjsgYnJlYWsKKy0gICAgICBmaQorLSAgICBkb25lCistICAgICMgU2NyZWVuIG91dCBib2d1cyB2YWx1ZXMgZnJvbSB0aGUgaW1ha2UgY29uZmlndXJhdGlvbi4gIFRoZXkgYXJlCistICAgICMgYm9ndXMgYm90aCBiZWNhdXNlIHRoZXkgYXJlIHRoZSBkZWZhdWx0IGFueXdheSwgYW5kIGJlY2F1c2UKKy0gICAgIyB1c2luZyB0aGVtIHdvdWxkIGJyZWFrIGdjYyBvbiBzeXN0ZW1zIHdoZXJlIGl0IG5lZWRzIGZpeGVkIGluY2x1ZGVzLgorLSAgICBjYXNlICRhY19pbV9pbmNyb290IGluCistCS91c3IvaW5jbHVkZSkgYWNfeF9pbmNsdWRlcz0gOzsKKy0JKikgdGVzdCAtZiAiJGFjX2ltX2luY3Jvb3QvWDExL1hvcy5oIiAmJiBhY194X2luY2x1ZGVzPSRhY19pbV9pbmNyb290OzsKKy0gICAgZXNhYworLSAgICBjYXNlICRhY19pbV91c3JsaWJkaXIgaW4KKy0JL3Vzci9saWIgfCAvdXNyL2xpYjY0IHwgL2xpYiB8IC9saWI2NCkgOzsKKy0JKikgdGVzdCAtZCAiJGFjX2ltX3VzcmxpYmRpciIgJiYgYWNfeF9saWJyYXJpZXM9JGFjX2ltX3VzcmxpYmRpciA7OworLSAgICBlc2FjCistICBmaQorLSAgY2QgLi4KKy0gIHJtIC1mIC1yIGNvbmZ0ZXN0LmRpcgorLWZpCistXSkjIF9BQ19QQVRIX1hfWE1LTUYKKy0KKy0KKyAjIF9BQ19QQVRIX1hfRElSRUNUCisgIyAtLS0tLS0tLS0tLS0tLS0tLQorICMgSW50ZXJuYWwgc3Vicm91dGluZSBvZiBfQUNfUEFUSF9YLgorQEAgLTIxMyw0NCArMTY2LDcgQEAgZmkKKyBtNF9kZWZpbmUoW19BQ19QQVRIX1hfRElSRUNUXSwKKyBbIyBTdGFuZGFyZCBzZXQgb2YgY29tbW9uIGRpcmVjdG9yaWVzIGZvciBYIGhlYWRlcnMuCisgIyBDaGVjayBYMTEgYmVmb3JlIFgxMVJuIGJlY2F1c2UgaXQgaXMgb2Z0ZW4gYSBzeW1saW5rIHRvIHRoZSBjdXJyZW50IHJlbGVhc2UuCistYWNfeF9oZWFkZXJfZGlycz0nCistL3Vzci9YMTEvaW5jbHVkZQorLS91c3IvWDExUjcvaW5jbHVkZQorLS91c3IvWDExUjYvaW5jbHVkZQorLS91c3IvWDExUjUvaW5jbHVkZQorLS91c3IvWDExUjQvaW5jbHVkZQorLQorLS91c3IvaW5jbHVkZS9YMTEKKy0vdXNyL2luY2x1ZGUvWDExUjcKKy0vdXNyL2luY2x1ZGUvWDExUjYKKy0vdXNyL2luY2x1ZGUvWDExUjUKKy0vdXNyL2luY2x1ZGUvWDExUjQKKy0KKy0vdXNyL2xvY2FsL1gxMS9pbmNsdWRlCistL3Vzci9sb2NhbC9YMTFSNy9pbmNsdWRlCistL3Vzci9sb2NhbC9YMTFSNi9pbmNsdWRlCistL3Vzci9sb2NhbC9YMTFSNS9pbmNsdWRlCistL3Vzci9sb2NhbC9YMTFSNC9pbmNsdWRlCistCistL3Vzci9sb2NhbC9pbmNsdWRlL1gxMQorLS91c3IvbG9jYWwvaW5jbHVkZS9YMTFSNworLS91c3IvbG9jYWwvaW5jbHVkZS9YMTFSNgorLS91c3IvbG9jYWwvaW5jbHVkZS9YMTFSNQorLS91c3IvbG9jYWwvaW5jbHVkZS9YMTFSNAorLQorLS91c3IvWDM4Ni9pbmNsdWRlCistL3Vzci94Mzg2L2luY2x1ZGUKKy0vdXNyL1hGcmVlODYvaW5jbHVkZS9YMTEKKy0KKy0vdXNyL2luY2x1ZGUKKy0vdXNyL2xvY2FsL2luY2x1ZGUKKy0vdXNyL3Vuc3VwcG9ydGVkL2luY2x1ZGUKKy0vdXNyL2F0aGVuYS9pbmNsdWRlCistL3Vzci9sb2NhbC94MTFyNS9pbmNsdWRlCistL3Vzci9scHAvWGFtcGxlcy9pbmNsdWRlCistCistL3Vzci9vcGVud2luL2luY2x1ZGUKKy0vdXNyL29wZW53aW4vc2hhcmUvaW5jbHVkZScKKythY194X2hlYWRlcl9kaXJzPScnCisgCisgaWYgdGVzdCAiJGFjX3hfaW5jbHVkZXMiID0gbm87IHRoZW4KKyAgICMgR3Vlc3Mgd2hlcmUgdG8gZmluZCBpbmNsdWRlIGZpbGVzLCBieSBsb29raW5nIGZvciBYbGliLmguCitAQCAtMjk5LDcgKzIxNSw2IEBAIEFDX0RFRlVOKFtfQUNfUEFUSF9YXSwKKyBbQUNfQ0FDSEVfVkFMKGFjX2N2X2hhdmVfeCwKKyBbIyBPbmUgb3IgYm90aCBvZiB0aGUgdmFycyBhcmUgbm90IHNldCwgYW5kIHRoZXJlIGlzIG5vIGNhY2hlZCB2YWx1ZS4KKyBhY194X2luY2x1ZGVzPW5vIGFjX3hfbGlicmFyaWVzPW5vCistX0FDX1BBVEhfWF9YTUtNRgorIF9BQ19QQVRIX1hfRElSRUNUCisgY2FzZSAkYWNfeF9pbmNsdWRlcywkYWNfeF9saWJyYXJpZXMgaW4gIygKKyAgIG5vLCogfCAqLG5vIHwgKlwnKikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL3ByZWZlcmJhc2gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9wcmVmZXJiYXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNzZlZTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9wcmVmZXJiYXNoLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1RoaXMgdmFsdWUgaXMgdXNlZCB0byBkZXRlcm1pbmUgQ09ORklHX1NIRUxMIGFuZCBTSEVMTCB3aGljaCBtYXkgZ2V0IGV4cG9ydGVkIGludG8KK3NjcmlwdHMgc2hhcmVkIHZpYSBzc3RhdGUgb250byBvdGhlciBzeXN0ZW1zLgorCitTb21lIHN5c3RlbXMgaGF2ZSAvYmluL3NoIC0+IGRhc2ggYW5kIG90aGVycyAvYmluL3NoIC0+IGJhc2guIEJhc2ggaXMgcHJlZmVycmVkIAorYnV0IHNvbWV0aW1lcyB3ZSBjYW4gc29tZXRpbWVzIGVuZCB1cCBleHBvcnRpbmcgL2Jpbi9zaCB5ZXQgdXNlIGJhc2hpc21zLgorCitUaGlzIHBhdGNoIHB1dHMgYmFzaCBmaXJzdCBpbiB0aGUgc2VhcmNoIHJlc3VsdHMgd2hpY2ggYXZvaWRzIHRoZSBiYXNoL2Rhc2ggY29uZnVzaW9uLgorCitSUCAyMDEyLzkvMjMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpYyBjb25maWd1cmF0aW9uXQorCitJbmRleDogYXV0b2NvbmYtMi42OS9saWIvbTRzdWdhci9tNHNoLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXV0b2NvbmYtMi42OS5vcmlnL2xpYi9tNHN1Z2FyL200c2gubTQJMjAxMi0wMy0wNyAxNzozNToyNi4wMDAwMDAwMDAgKzAwMDAKKysrKyBhdXRvY29uZi0yLjY5L2xpYi9tNHN1Z2FyL200c2gubTQJMjAxMy0wOS0yMyAxNjoxMjozOC44NTM1OTc1MTUgKzAwMDAKK0BAIC0yMjksNyArMjI5LDcgQEAKKyAgICAgW19BU19QQVRIX1dBTEsoWy9iaW4kUEFUSF9TRVBBUkFUT1IvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIXSwKKyAgICAgICBbY2FzZSAkYXNfZGlyIGluIEAlOkAoCisgCSAvKikKKy0JICAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbworKwkgICBmb3IgYXNfYmFzZSBpbiBiYXNoIHNoIGtzaCBzaDU7IGRvCisgCSAgICAgIyBUcnkgb25seSBzaGVsbHMgdGhhdCBleGlzdCwgdG8gc2F2ZSBzZXZlcmFsIGZvcmtzLgorIAkgICAgIGFzX3NoZWxsPSRhc19kaXIvJGFzX2Jhc2UKKyAJICAgICBBU19JRihbeyB0ZXN0IC1mICIkYXNfc2hlbGwiIHx8IHRlc3QgLWYgIiRhc19zaGVsbC5leGUiOyB9ICYmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9wcm9ncmFtX3ByZWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL3Byb2dyYW1fcHJlZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OGE0MDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9wcm9ncmFtX3ByZWZpeC5wYXRjaApAQCAtMCwwICsxLDIwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIworIyBQYXRjaCBtYW5hZ2VkIGJ5IGh0dHA6Ly93d3cubW4tbG9naXN0aWsuZGUvdW5zdXBwb3J0ZWQvcHhhMjUwL3BhdGNoZXIKKyMKKworLS0tIGF1dG9jb25mLTIuNTcvbGliL2F1dG9jb25mL2dlbmVyYWwubTR+cHJvZ3JhbV9wcmVmaXgKKysrKyBhdXRvY29uZi0yLjU3L2xpYi9hdXRvY29uZi9nZW5lcmFsLm00CitAQCAtMTY3Niw4ICsxNjc2LDkgQEAKKyAjIFRoZSBhbGlhc2VzIHNhdmUgdGhlIG5hbWVzIHRoZSB1c2VyIHN1cHBsaWVkLCB3aGlsZSAkaG9zdCBldGMuCisgIyB3aWxsIGdldCBjYW5vbmljYWxpemVkLgorIHRlc3QgLW4gIiR0YXJnZXRfYWxpYXMiICYmCistICB0ZXN0ICIkcHJvZ3JhbV9wcmVmaXgkcHJvZ3JhbV9zdWZmaXgkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIgPSBcCistICAgIE5PTkVOT05Fcyx4LHgsICYmCisrICB0ZXN0ICIkdGFyZ2V0X2FsaWFzIiAhPSAiJGhvc3RfYWxpYXMiICYmCisrICAgIHRlc3QgIiRwcm9ncmFtX3ByZWZpeCRwcm9ncmFtX3N1ZmZpeCRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIiA9IFwKKysgICAgICBOT05FTk9ORXMseCx4LCAmJgorICAgcHJvZ3JhbV9wcmVmaXg9JHt0YXJnZXRfYWxpYXN9LVtdZG5sCisgXSkjIEFDX0NBTk9OSUNBTF9UQVJHRVQKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL3JlbW92ZS11c3ItbG9jYWwtbGliLWZyb20tbTQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9yZW1vdmUtdXNyLWxvY2FsLWxpYi1mcm9tLW00LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZDJlMmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9yZW1vdmUtdXNyLWxvY2FsLWxpYi1mcm9tLW00LnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK1dlIGhhdmUgcHJvYmxlbSB1c2luZyBoYXJkY29kZWQgZGlyZWN0b3JpZXMgbGlrZSAvdXNyL2xvY2FsIGhlcmUKK3doaWNoIHdpbGwgYmUgY2hlY2tlZCBmb3IgY3Jvc3MgYnVpbGRzLiBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIHdoaWNoCitpcyB2YWxpZCBmb3IgQUlYIG9ubHkuIFdlIGRvIG5vdCBoYXZlIEFJWCBhcyBvbmUgb2Ygb3VyIHN1cHBvcnRlZAorYnVpbGQgaG9zdCBvciB0YXJnZXQuIFRoZXJlZm9yZSB3ZSBnZXQgcmlkIG9mIHRoZSBoYXJkY29kZWQgcGF0aHMKK2FuZCBtYWtlIGxpZmUgZWFzaWVyIGZvciBjcm9zcyBjb21waWxhdGlvbiBwcm9jZXNzLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW1Vwc3RyZWFtIGRvZXMgY2FyZSBmb3IgQUlYIHdoaWxlIHdlIG1heSBub3RdCitJbmRleDogYXV0b2NvbmYtMi42OC9saWIvYXV0b2NvbmYvZnVuY3Rpb25zLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXV0b2NvbmYtMi42OC5vcmlnL2xpYi9hdXRvY29uZi9mdW5jdGlvbnMubTQJMjAxMC0wOS0yMiAxNDo1MjoxOS4wMDAwMDAwMDAgLTA3MDAKKysrKyBhdXRvY29uZi0yLjY4L2xpYi9hdXRvY29uZi9mdW5jdGlvbnMubTQJMjAxMS0wOC0wMyAxMTo1NzowNS44MjIxOTk1MTMgLTA3MDAKK0BAIC03NDksMTUgKzc0OSw2IEBAIGlmIHRlc3QgJGFjX2hhdmVfZnVuYyA9IG5vOyB0aGVuCisgICAgIFtMSUJTPSItbHV0aWwgJExJQlMiIGFjX2hhdmVfZnVuYz15ZXMgYWNfY3ZfZnVuY19nZXRsb2FkYXZnX3NldGdpZD15ZXNdKQorIGZpCisgCistaWYgdGVzdCAkYWNfaGF2ZV9mdW5jID0gbm87IHRoZW4KKy0gICMgVGhlcmUgaXMgYSBjb21tb25seSBhdmFpbGFibGUgbGlicmFyeSBmb3IgUlMvNjAwMCBBSVguCistICAjIFNpbmNlIGl0IGlzIG5vdCBhIHN0YW5kYXJkIHBhcnQgb2YgQUlYLCBpdCBtaWdodCBiZSBpbnN0YWxsZWQgbG9jYWxseS4KKy0gIGFjX2dldGxvYWRhdmdfTElCUz0kTElCUworLSAgTElCUz0iLUwvdXNyL2xvY2FsL2xpYiAkTElCUyIKKy0gIEFDX0NIRUNLX0xJQihnZXRsb2FkYXZnLCBnZXRsb2FkYXZnLAorLQkgICAgICAgW0xJQlM9Ii1sZ2V0bG9hZGF2ZyAkTElCUyJdLCBbTElCUz0kYWNfZ2V0bG9hZGF2Z19MSUJTXSkKKy1maQorLQorICMgTWFrZSBzdXJlIGl0IGlzIHJlYWxseSBpbiB0aGUgbGlicmFyeSwgaWYgd2UgdGhpbmsgd2UgZm91bmQgaXQsCisgIyBvdGhlcndpc2Ugc2V0IHVwIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbi4KKyBBQ19DSEVDS19GVU5DUyhnZXRsb2FkYXZnLCBbXSwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mXzIuNjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZl8yLjY5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwOTAwN2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZl8yLjY5LmJiCkBAIC0wLDAgKzEsMjUgQEAKK3JlcXVpcmUgYXV0b2NvbmYuaW5jCisKK1BSID0gInIxMSIKKworTElDRU5TRSA9ICJHUEx2MiAmIEdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUgXAorCQkgICAgZmlsZTovL0NPUFlJTkd2MzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCitTUkNfVVJJICs9ICJmaWxlOi8vYXV0b3JlY29uZi1pbmNsdWRlLnBhdGNoIFwKKwkgICAgZmlsZTovL2NoZWNrLWF1dG9tYWtlLWNyb3NzLXdhcm5pbmcucGF0Y2ggXAorCSAgICBmaWxlOi8vYXV0b3JlY29uZi1leGNsdWRlLnBhdGNoIFwKKwkgICAgZmlsZTovL2F1dG9yZWNvbmYtZ251Y29uZmlnaXplLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9jb25maWdfc2l0ZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXVzci1sb2NhbC1saWItZnJvbS1tNC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcHJlZmVyYmFzaC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYXV0b3Rlc3QtYXV0b21ha2UtcmVzdWx0LWZvcm1hdC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjgyZDA1ZTAzYjkzZTQ1ZjVhMzliODI4ZGM5YzZjMjliIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk1NGJkNjliMzkxZWRjMTJkNmE0YTUxYTJkZDE0NzY1NDNkYTVjNmJiZjA1YTk1YjU5ZGMwZGQ2ZmQ0YzI5NjkiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZmlsZTovL2ZpeF9wYXRoX3h0cmEucGF0Y2giCisKK0VYVFJBX09FQ09ORiArPSAiYWNfY3ZfcGF0aF9NND1tNCBhY19jdl9wcm9nX1RFU1RfRU1BQ1M9bm8iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi1uYXRpdmVfNS4xOC41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2dlbi9hdXRvZ2VuLW5hdGl2ZV81LjE4LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEyODUxMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi1uYXRpdmVfNS4xOC41LmJiCkBAIC0wLDAgKzEsMzMgQEAKK1NVTU1BUlkgPSAiQXV0b21hdGVkIHRleHQgYW5kIHByb2dyYW0gZ2VuZXJhdGlvbiB0b29sIgorREVTQ1JJUFRJT04gPSAiQXV0b0dlbiBpcyBhIHRvb2wgZGVzaWduZWQgdG8gc2ltcGxpZnkgdGhlIGNyZWF0aW9uIGFuZFwKKyBtYWludGVuYW5jZSBvZiBwcm9ncmFtcyB0aGF0IGNvbnRhaW4gbGFyZ2UgYW1vdW50cyBvZiByZXBldGl0aW91cyB0ZXh0LlwKKyBJdCBpcyBlc3BlY2lhbGx5IHZhbHVhYmxlIGluIHByb2dyYW1zIHRoYXQgaGF2ZSBzZXZlcmFsIGJsb2NrcyBvZiB0ZXh0XAorIHRoYXQgbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2dlbi8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYXV0b2dlbi9yZWwke1BWfS9hdXRvZ2VuLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9pbmNyZWFzZS10aW1lb3V0LWxpbWl0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21rLXRwbC1jb25maWcuc2gtZm9yY2UtZXhpdC12YWx1ZS10by1iZS0wLWluLXN1YnByb2MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVkaXJlY3Qtb3V0cHV0LWRpci5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzODVkN2M3ZGZiZTYwYmFiYmVlMjYxYzA1NDkyM2E1MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3YmJkYjczYjU1MThiYWY2NGM2ZDM3MzlmYjJlY2M2NmQyY2NjZGE4ODhjZTVhZDU3M2FiZTIzNWFiNWQ5NmJhIgorCitERVBFTkRTID0gImd1aWxlLW5hdGl2ZSBsaWJ0b29sLW5hdGl2ZSBsaWJ4bWwyLW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyBuYXRpdmUgcGtnY29uZmlnCisKKyMgYXV0b2dlbi1uYXRpdmUgbGlua3MgYWdhaW5zdCBsaWJndWlsZSB3aGljaCBtYXkgaGF2ZSBiZWVuIHJlbG9jYXRlZCB3aXRoIHNzdGF0ZQorIyB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZW5zdXJlIHRoZXJlIGlzbid0IGEgcmVsb2NhdGlvbiBpc3N1ZQorZXhwb3J0IEdVSUxFX0xPQURfUEFUSCA9ICIke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2d1aWxlLzIuMCIKK2V4cG9ydCBHVUlMRV9MT0FEX0NPTVBJTEVEX1BBVEggPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2d1aWxlLzIuMC9jY2FjaGUiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9hdXRvZ2VuIFwKKwkJR1VJTEVfTE9BRF9QQVRIPSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ3VpbGUvMi4wIFwKKwkJR1VJTEVfTE9BRF9DT01QSUxFRF9QQVRIPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9ndWlsZS8yLjAvY2NhY2hlCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4vaW5jcmVhc2UtdGltZW91dC1saW1pdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9pbmNyZWFzZS10aW1lb3V0LWxpbWl0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNGMxZDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4vaW5jcmVhc2UtdGltZW91dC1saW1pdC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitTdWJqZWN0OiBbUEFUQ0hdIGF1dG9nZW46IGluY3JlYXNlIHRpbWVvdXQgbGltaXQgZm9yIHNoZWxsIGNvbW1hbmRzCisKK09uIHNvbWUgb3ZlcmxvYWRlZCBob3N0cywgc2hlbGwgY29tbWFuZHMgb2YgYXV0b2dlbiBtYXkgY2FuIG5vdAorZmluaXNoIGluIDUgc2Vjcy4gVGhpcyBoYXMgY2F1c2VkIG1hbnkgYnVpbGQgZmFpbHVyZXMsIHNvIGluY3JlYXNlCit0aGUgdGltZW91dCBsaW1pdCB0byBmaXggdGhpcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBYaW4gT3V5YW5nIDxYaW4uT3V5YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAgICA2ICsrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDBhZjdjMTguLjU1NDRmNTkgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE3NSw5ICsxNzUsOSBAQCBjb25maWdfZW5kX3RpbWU9YGRhdGUgKyVzIDI+L2Rldi9udWxsYAorIHRpbWVfZGVsdGE9YGV4cHIgJHtjb25maWdfZW5kX3RpbWV9IC0gJHtjb25maWdfc3RhcnRfdGltZX0gMj4vZGV2L251bGxgCisgCisgaWYgdGVzdCAteiAiJHt0aW1lX2RlbHRhfSIKKy10aGVuIHRpbWVfZGVsdGE9MTAKKy1lbGlmIHRlc3QgJHt0aW1lX2RlbHRhfSAtbHQgNQorLXRoZW4gdGltZV9kZWx0YT01IDsgZmkKKyt0aGVuIHRpbWVfZGVsdGE9NjAKKytlbGlmIHRlc3QgJHt0aW1lX2RlbHRhfSAtbHQgMzAKKyt0aGVuIHRpbWVfZGVsdGE9MzAgOyBmaQorIAorIEFHX1RJTUVPVVQ9JHt0aW1lX2RlbHRhfQorIF0KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4vbWstdHBsLWNvbmZpZy5zaC1mb3JjZS1leGl0LXZhbHVlLXRvLWJlLTAtaW4tc3VicHJvYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9tay10cGwtY29uZmlnLnNoLWZvcmNlLWV4aXQtdmFsdWUtdG8tYmUtMC1pbi1zdWJwcm9jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NmRhN2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4vbWstdHBsLWNvbmZpZy5zaC1mb3JjZS1leGl0LXZhbHVlLXRvLWJlLTAtaW4tc3VicHJvYy5wYXRjaApAQCAtMCwwICsxLDMwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworbWstdHBsLWNvbmZpZy5zaDogZm9yY2UgZXhpdCB2YWx1ZSB0byBiZSAwIGluIHN1YnByb2Nlc3MKKworVGhlIHJldHVybiB2YWx1ZSBvZiBzdGF0ZW1lbnQgbGlzdD1gPHN1YmNvbW1hbmRzPmAgaXMgdGhlIGV4aXQgdmFsdWUgb2YgdGhlCitzdWJjb21tYW5kcy4gU28gaWYgdGhlIHN1YmNvbW1hbmRzIGZhaWxzLCB0aGUgY29tcGlsYXRpb24gZmFpbHMuIFRoaXMgaXMgb2J2aW91c2x5Citub3QgaW50ZW5kZWQuIEluIHRoZSBub3JtYWwgY2FzZSwgd2UgZXhwZWN0IHRoZSBncmVwIGNvbW1hbmQgdG8gZmFpbCBhcyB0aGVyZSBzaG91bGQKK2JlIG5vICdub3JldHVybicgd29yZCBpbiB0aGUgbGliZ3VpbGUgZmlsZXMuCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGF1dG9vcHRzL21rLXRwbC1jb25maWcuc2ggfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9hdXRvb3B0cy9tay10cGwtY29uZmlnLnNoIGIvYXV0b29wdHMvbWstdHBsLWNvbmZpZy5zaAoraW5kZXggOTI2ZjVhYi4uNmI0YTBmYiAxMDA3NTUKKy0tLSBhL2F1dG9vcHRzL21rLXRwbC1jb25maWcuc2gKKysrKyBiL2F1dG9vcHRzL21rLXRwbC1jb25maWcuc2gKK0BAIC0yMDIsNyArMjAyLDcgQEAgZml4X2d1aWxlKCkgeworIAorICAgICBsaXN0PWBzZXQgK2UgOyBleGVjIDI+L2Rldi9udWxsCisgICAgICAgICBmaW5kICR7bGliZ3VpbGVkaXJ9L2xpYmd1aWxlKiAtdHlwZSBmIHwgXAorLSAgICAgICAgICAgIHhhcmdzIGdyZXAgLWwgLUUgJ1w8bm9yZXR1cm5cPidgCisrICAgICAgICAgICAgeGFyZ3MgZ3JlcCAtbCAtRSAnXDxub3JldHVyblw+JyA7IGV4aXQgMGAKKyAKKyAgICAgdGVzdCAteiAiJGxpc3QiICYmIGV4aXQgMAorIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9yZWRpcmVjdC1vdXRwdXQtZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2dlbi9hdXRvZ2VuL3JlZGlyZWN0LW91dHB1dC1kaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUxMjZlZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9yZWRpcmVjdC1vdXRwdXQtZGlyLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK1tQQVRDSF0gcmVkaXJlY3QgdGhlIGRpciBvZiBta2xpYnNyYy1sb2cudHgKKworVXBzdHJlYW0tU3RhdHVlOiBQZW5kaW5nCisKK3JlZGlyZWN0IG1rbGlic3JjLWxvZy50eCB0byBidWlsZGRpciwgbm90IC90bXA7IG90aGVyd2lzZSBta2xpYnNyYy1sb2cudHgKK21heWJlIHVuYWJsZSB0byBiZSB3cml0dGVuIGlmIG90aGVyIHVzZXJzIGlzIGJ1aWxkaW5nIGF1dG9nZW4gYXQgdGhlIHNhbWUgdGltZS4KKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgcGtnL2xpYm9wdHMvbWtsaWJzcmMuc2ggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9wa2cvbGlib3B0cy9ta2xpYnNyYy5zaCBiL3BrZy9saWJvcHRzL21rbGlic3JjLnNoCitpbmRleCA0MTZiNDAyLi5kNjEyZmJjIDEwMDY0NAorLS0tIGEvcGtnL2xpYm9wdHMvbWtsaWJzcmMuc2gKKysrKyBiL3BrZy9saWJvcHRzL21rbGlic3JjLnNoCitAQCAtMTksNyArMTksNyBAQAorICMjICB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAKKyBzZXQgLWV4CistZXhlYyAyPiAvdG1wL21rbGlic3JjLWxvZy50eAorK2V4ZWMgMj4gJHRvcF9idWlsZGRpci9ta2xpYnNyYy1sb2cudHgKKyAKKyB0b3BfYnVpbGRkaXI9YGNkICR0b3BfYnVpbGRkaXIgOyBwd2RgCisgdG9wX3NyY2Rpcj1gY2QgJHRvcF9zcmNkaXIgOyBwd2RgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWRlYmQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2UuaW5jCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiQSBHTlUgdG9vbCBmb3IgYXV0b21hdGljYWxseSBnZW5lcmF0aW5nIE1ha2VmaWxlcyIKK0RFU0NSSVBUSU9OID0gIkF1dG9tYWtlIGlzIGEgdG9vbCBmb3IgYXV0b21hdGljYWxseSBnZW5lcmF0aW5nIGBNYWtlZmlsZS5pbicgZmlsZXMgY29tcGxpYW50IHdpdGggdGhlIEdOVSBDb2RpbmcgXAorU3RhbmRhcmRzLiBBdXRvbWFrZSByZXF1aXJlcyB0aGUgdXNlIG9mIEF1dG9jb25mLiIKK0xJQ0VOU0UgPSAiR1BMdjIiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b21ha2UvIgorU0VDVElPTiA9ICJkZXZlbCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2F1dG9tYWtlL2F1dG9tYWtlLSR7UFZ9LnRhci5neiIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitkb19jb25maWd1cmUoKSB7CisJb2VfcnVuY29uZgorfQorCitleHBvcnQgQVVUT01BS0UgPSAiJHtAYmIudXRpbHMud2hpY2goJ2F1dG9tYWtlJywgZC5nZXRWYXIoJ1BBVEgnLCBUcnVlKSl9IgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9hdXRvbWFrZSogJHtkYXRhZGlyfS9hY2xvY2FsKiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlL2J1aWxkdGVzdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlL2J1aWxkdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGQ1MzM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2UvYnVpbGR0ZXN0LnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1NwbGl0ICJjaGVjay1URVNUUyIgaW50byBhIGJ1aWxkdGVzdCBhbmQgcnVudGVzdCB0YXJnZXQsIHNvIHRoYXQgdGhleSBjYW4KK2JlIHJ1biBzZXBhcmF0ZWx5LgorCitTaWduZWQtb2ZmLWJ5OiBCasO2cm4gU3RlbmJlcmcgPGJqc3RAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGEvbGliL2FtL2NoZWNrLmFtCTIwMTItMTEtMTQgMTM6NDY6MTYuMzM1NDc1OTk1ICswMTAwCisrKysgYi9saWIvYW0vY2hlY2suYW0JMjAxMi0wOC0xMyAxODo0MDoxMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC00NCw3ICs0NCw3IEBACisgYW1fX3R0eV9jb2xvcnMgPSAkKGFtX190dHlfY29sb3JzX2R1bW15KQorIGVuZGlmICElP0NPTE9SJQorCistLlBIT05ZOiBjaGVjay1URVNUUworKy5QSE9OWTogY2hlY2stVEVTVFMgYnVpbGR0ZXN0LVRFU1RTIHJ1bnRlc3QtVEVTVFMKKworIGlmICU/UEFSQUxMRUxfVEVTVFMlCisKK0BAIC00NjUsNyArNDY1LDE0IEBACisKKyBlbHNlICElP1BBUkFMTEVMX1RFU1RTJQorCistY2hlY2stVEVTVFM6ICQoVEVTVFMpCisrQU1fUkVDVVJTSVZFX1RBUkdFVFMgKz0gYnVpbGR0ZXN0IHJ1bnRlc3QKKysKKytidWlsZHRlc3QtVEVTVFM6ICQoVEVTVFMpCisrCisrY2hlY2stVEVTVFM6IGJ1aWxkdGVzdC1URVNUUworKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBydW50ZXN0LVRFU1RTCisrCisrcnVudGVzdC1URVNUUzoKKwlAZmFpbGVkPTA7IGFsbD0wOyB4ZmFpbD0wOyB4cGFzcz0wOyBza2lwPTA7IFwKKwlzcmNkaXI9JChzcmNkaXIpOyBleHBvcnQgc3JjZGlyOyBcCisgIyMgTWFrZSBzdXJlIFNvbGFyaXMgVlBBVEgtZXhwYW5kcyBhbGwgbWVtYmVycyBvZiB0aGlzIGxpc3QsIGV2ZW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlL3B5LWNvbXBpbGUtY29tcGlsZS1vbmx5LW9wdGltaXplZC1ieXRlLWNvZGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS9weS1jb21waWxlLWNvbXBpbGUtb25seS1vcHRpbWl6ZWQtYnl0ZS1jb2RlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MzM0YTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS9weS1jb21waWxlLWNvbXBpbGUtb25seS1vcHRpbWl6ZWQtYnl0ZS1jb2RlLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKyogT0UtQ29yZSdzIHB5dGhvbiBjcmVhdGVzIHRoZSBzYW1lIGJpbmFyeSBvdXRwdXQKKyAgZm9yIGJvdGggcHljIGFuZCBweW8sIHNvIGRpc2FibGUgdGhlIGNyZWF0aW9uIG9mCisgIHB5YyBmaWxlcyBieSBhdXRvbWFrZS4KKworU2lnbmVkLW9mZi1ieTogQW5kcmVhcyBPYmVycml0dGVyIDxvYmlAb3BlbmRyZWFtYm94Lm9yZz4KKworVXBkYXRlZCBmb3IgYXV0b21ha2UtMS4xMi42CisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CisKK2RpZmYgLU51cmQgYXV0b21ha2UtMS4xMi42L2xpYi9weS1jb21waWxlIGF1dG9tYWtlLTEuMTIuNi9saWIvcHktY29tcGlsZQorLS0tIGF1dG9tYWtlLTEuMTIuNi9saWIvcHktY29tcGlsZQkyMDEyLTEyLTEzIDIxOjU3OjMxLjAwMDAwMDAwMCArMDIwMAorKysrIGF1dG9tYWtlLTEuMTIuNi9saWIvcHktY29tcGlsZQkyMDEyLTEyLTI3IDE5OjM0OjAxLjQyNjAxNTE0MCArMDIwMAorQEAgLTExNSwyNiArMTE1LDYgQEAKKyAgICAgZmlsZXRyYW5zPSJmaWxlcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgoJyRkZXN0ZGlyJyArIG9zLnNlcCArIHBhdGgpIgorIGZpCisgCistJFBZVEhPTiAtYyAiCistaW1wb3J0IHN5cywgb3MsIHB5X2NvbXBpbGUsIGltcAorLQorLWZpbGVzID0gJycnJGZpbGVzJycnCistCistc3lzLnN0ZG91dC53cml0ZSgnQnl0ZS1jb21waWxpbmcgcHl0aG9uIG1vZHVsZXMuLi5cbicpCistZm9yIGZpbGUgaW4gZmlsZXMuc3BsaXQoKToKKy0gICAgJHBhdGh0cmFucworLSAgICAkZmlsZXRyYW5zCistICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlcGF0aCkgb3Igbm90IChsZW4oZmlsZXBhdGgpID49IDMKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBmaWxlcGF0aFstMzpdID09ICcucHknKToKKy0JICAgIGNvbnRpbnVlCistICAgIHN5cy5zdGRvdXQud3JpdGUoZmlsZSkKKy0gICAgc3lzLnN0ZG91dC5mbHVzaCgpCistICAgIGlmIGhhc2F0dHIoaW1wLCAnZ2V0X3RhZycpOgorLSAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKGZpbGVwYXRoLCBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZXBhdGgpLCBwYXRoKQorLSAgICBlbHNlOgorLSAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKGZpbGVwYXRoLCBmaWxlcGF0aCArICdjJywgcGF0aCkKKy1zeXMuc3Rkb3V0LndyaXRlKCdcbicpIiB8fCBleGl0ICQ/CistCisgIyB0aGlzIHdpbGwgZmFpbCBmb3IgcHl0aG9uIDwgMS41LCBidXQgdGhhdCBkb2Vzbid0IG1hdHRlciAuLi4KKyAkUFlUSE9OIC1PIC1jICIKKyBpbXBvcnQgc3lzLCBvcywgcHlfY29tcGlsZSwgaW1wCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS9weXRob24tbGliZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2UvcHl0aG9uLWxpYmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzU0MWJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2UvcHl0aG9uLWxpYmRpci5wYXRjaApAQCAtMCwwICsxLDY1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorCitVcGRhdGVkIGZvciBhdXRvbWFrZS0xLjEyLjYKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KKworZGlmZiAtTnVyZCBhdXRvbWFrZS0xLjEyLjYvbTQvcHl0aG9uLm00IGF1dG9tYWtlLTEuMTIuNi9tNC9weXRob24ubTQKKy0tLSBhdXRvbWFrZS0xLjEyLjYvbTQvcHl0aG9uLm00CTIwMTItMTItMTMgMjI6MDI6MjUuMDAwMDAwMDAwICswMjAwCisrKysgYXV0b21ha2UtMS4xMi42L200L3B5dGhvbi5tNAkyMDEyLTEyLTI3IDE3OjQwOjI2LjU1ODE2NDY2MCArMDIwMAorQEAgLTkxLDEyICs5MSwxMyBAQAorICAgICBbYW1fY3ZfcHl0aG9uX3ZlcnNpb249YCRQWVRIT04gLWMgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3lzLnZlcnNpb25bWzozXV0pImBdKQorICAgQUNfU1VCU1QoW1BZVEhPTl9WRVJTSU9OXSwgWyRhbV9jdl9weXRob25fdmVyc2lvbl0pCisgCistICBkbmwgVXNlIHRoZSB2YWx1ZXMgb2YgJHByZWZpeCBhbmQgJGV4ZWNfcHJlZml4IGZvciB0aGUgY29ycmVzcG9uZGluZworLSAgZG5sIHZhbHVlcyBvZiBQWVRIT05fUFJFRklYIGFuZCBQWVRIT05fRVhFQ19QUkVGSVguICBUaGVzZSBhcmUgbWFkZQorKyAgZG5sIFVzZSB0aGUgdmFsdWVzIG9mICRwcmVmaXgsICRsaWJkaXIgYW5kICRleGVjX3ByZWZpeCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcKKysgIGRubCB2YWx1ZXMgb2YgUFlUSE9OX1BSRUZJWCBQWVRIT05fTElCX1BSRUZJWCwgYW5kIFBZVEhPTl9FWEVDX1BSRUZJWC4gIFRoZXNlIGFyZSBtYWRlCisgICBkbmwgZGlzdGluY3QgdmFyaWFibGVzIHNvIHRoZXkgY2FuIGJlIG92ZXJyaWRkZW4gaWYgbmVlZCBiZS4gIEhvd2V2ZXIsCisgICBkbmwgZ2VuZXJhbCBjb25zZW5zdXMgaXMgdGhhdCB5b3Ugc2hvdWxkbid0IG5lZWQgdGhpcyBhYmlsaXR5LgorIAorICAgQUNfU1VCU1QoW1BZVEhPTl9QUkVGSVhdLCBbJyR7cHJlZml4fSddKQorKyAgQUNfU1VCU1QoW1BZVEhPTl9MSUJfUFJFRklYXSwgWycke2xpYmRpcn0nXSkKKyAgIEFDX1NVQlNUKFtQWVRIT05fRVhFQ19QUkVGSVhdLCBbJyR7ZXhlY19wcmVmaXh9J10pCisgCisgICBkbmwgQXQgdGltZXMgKGxpa2Ugd2hlbiBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzKSB5b3UgbWF5IHdhbnQKK0BAIC0xNDgsNyArMTQ5LDggQEAKKyBlbHNlOgorICAgICBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCisgICAgIHNpdGVkaXIgPSBzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIoMCwgMCwgcHJlZml4PSckYW1fcHlfcHJlZml4JykKKy1zeXMuc3Rkb3V0LndyaXRlKHNpdGVkaXIpImAKKytzeXMuc3Rkb3V0LndyaXRlKHNpdGVkaXIpIiB8fAorKyAgICAgZWNobyAiJFBZVEhPTl9MSUJfUFJFRklYL3B5dGhvbiRQWVRIT05fVkVSU0lPTi9zaXRlLXBhY2thZ2VzImAKKyAgICAgIGNhc2UgJGFtX2N2X3B5dGhvbl9weXRob25kaXIgaW4KKyAgICAgICRhbV9weV9wcmVmaXgqKQorICAgICAgICBhbV9fc3RyaXBfcHJlZml4PWBlY2hvICIkYW1fcHlfcHJlZml4IiB8IHNlZCAnc3wufC58ZydgCitAQCAtMTU4LDcgKzE2MCw3IEBACisgICAgICAgIGNhc2UgJGFtX3B5X3ByZWZpeCBpbgorICAgICAgICAgIC91c3J8L1N5c3RlbSopIDs7CisgICAgICAgICAgKikKKy0JICBhbV9jdl9weXRob25fcHl0aG9uZGlyPSRQWVRIT05fUFJFRklYL2xpYi9weXRob24kUFlUSE9OX1ZFUlNJT04vc2l0ZS1wYWNrYWdlcworKwkgIGFtX2N2X3B5dGhvbl9weXRob25kaXI9JFBZVEhPTl9MSUJfUFJFRklYL3B5dGhvbiRQWVRIT05fVkVSU0lPTi9zaXRlLXBhY2thZ2VzCisgCSAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworQEAgLTE5MCw3ICsxOTIsOCBAQAorIGVsc2U6CisgICAgIGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcKKyAgICAgc2l0ZWRpciA9IHN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYigxLCAwLCBwcmVmaXg9JyRhbV9weV9wcmVmaXgnKQorLXN5cy5zdGRvdXQud3JpdGUoc2l0ZWRpcikiYAorK3N5cy5zdGRvdXQud3JpdGUoc2l0ZWRpcikiIHx8CisrICAgICBlY2hvICIkUFlUSE9OX0xJQl9QUkVGSVgvcHl0aG9uJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMiYAorICAgICAgY2FzZSAkYW1fY3ZfcHl0aG9uX3B5ZXhlY2RpciBpbgorICAgICAgJGFtX3B5X2V4ZWNfcHJlZml4KikKKyAgICAgICAgYW1fX3N0cmlwX3ByZWZpeD1gZWNobyAiJGFtX3B5X2V4ZWNfcHJlZml4IiB8IHNlZCAnc3wufC58ZydgCitAQCAtMjAwLDcgKzIwMyw3IEBACisgICAgICAgIGNhc2UgJGFtX3B5X2V4ZWNfcHJlZml4IGluCisgICAgICAgICAgL3VzcnwvU3lzdGVtKikgOzsKKyAgICAgICAgICAqKQorLQkgICBhbV9jdl9weXRob25fcHlleGVjZGlyPSRQWVRIT05fRVhFQ19QUkVGSVgvbGliL3B5dGhvbiRQWVRIT05fVkVSU0lPTi9zaXRlLXBhY2thZ2VzCisrCSAgIGFtX2N2X3B5dGhvbl9weWV4ZWNkaXI9JFBZVEhPTl9MSUJfUFJFRklYL3B5dGhvbiRQWVRIT05fVkVSU0lPTi9zaXRlLXBhY2thZ2VzCisgCSAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlXzEuMTUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZV8xLjE1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzM2RjMjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZV8xLjE1LmJiCkBAIC0wLDAgKzEsMzQgQEAKK3JlcXVpcmUgYXV0b21ha2UuaW5jCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJhdXRvY29uZi1uYXRpdmUiCisKK05BTUVWRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKKworUkRFUEVORFNfJHtQTn0gKz0gIlwKKyAgICBhdXRvY29uZiBcCisgICAgcGVybCBcCisgICAgcGVybC1tb2R1bGUtYnl0ZXMgXAorICAgIHBlcmwtbW9kdWxlLWRhdGEtZHVtcGVyIFwKKyAgICBwZXJsLW1vZHVsZS1zdHJpY3QgXAorICAgIHBlcmwtbW9kdWxlLXRleHQtcGFyc2V3b3JkcyBcCisgICAgcGVybC1tb2R1bGUtdGhyZWFkLXF1ZXVlIFwKKyAgICBwZXJsLW1vZHVsZS10aHJlYWRzIFwKKyAgICBwZXJsLW1vZHVsZS12YXJzICIKKworUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gImF1dG9jb25mLW5hdGl2ZSBwZXJsLW5hdGl2ZS1ydW50aW1lIgorCitTUkNfVVJJICs9ICIgZmlsZTovL3B5dGhvbi1saWJkaXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3B5LWNvbXBpbGUtY29tcGlsZS1vbmx5LW9wdGltaXplZC1ieXRlLWNvZGUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2J1aWxkdGVzdC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjcxNjk0NmExMDVjYTIyOGFiNTQ1ZmMzN2E3MGRmM2EzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc5NDZlOTQ1YTk2ZTI4MTUyYmE1YTZiZWIwNjI1Y2E3MTVjNmUzMmFjNTVmMmUzNTNlZjU0ZGVmMGM4ZWQ5MjQiCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX1BFUkw9JHtVU1JCSU5QQVRIfS9wZXJsIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy0yLjI1LjEuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtMi4yNS4xLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzgxN2ZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtMi4yNS4xLmluYwpAQCAtMCwwICsxLDQzIEBACitMSUNfRklMRVNfQ0hLU1VNPSJcCisgICAgZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyXAorICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9OWY2MDRkOGE0ZjhlNzRmNGY1MTQwODQ1YTIxYjY2NzRcCisgICAgZmlsZTovL0NPUFlJTkczO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNFwKKyAgICBmaWxlOi8vQ09QWUlORzMuTElCO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNlwKKyAgICBmaWxlOi8vZ2FzL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0XAorICAgIGZpbGU6Ly9pbmNsdWRlL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyXAorICAgIGZpbGU6Ly9pbmNsdWRlL0NPUFlJTkczO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNFwKKyAgICBmaWxlOi8vbGliaWJlcnR5L0NPUFlJTkcuTElCO21kNT1hOTE2NDY3YjkxMDc2ZTYzMWRkOGVkYjc0MjQ3NjljN1wKKyAgICBmaWxlOi8vYmZkL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0XAorICAgICIKKworZGVmIGJpbnV0aWxzX2JyYW5jaF92ZXJzaW9uKGQpOgorICAgIHB2c3BsaXQgPSBkLmdldFZhcignUFYnLCBUcnVlKS5zcGxpdCgnLicpCisgICAgcmV0dXJuIHB2c3BsaXRbMF0gKyAiXyIgKyBwdnNwbGl0WzFdCisKK0JJTlVQViA9ICIke0BiaW51dGlsc19icmFuY2hfdmVyc2lvbihkKX0iCisKK1NSQ1JFViA9ICIyYmQyNTkzMDIyMWRlYTRiZjMzYzEzYTg5YzExMTUxNDQ5MTQ0MGUyIgorU1JDX1VSSSA9ICJcCisgICAgIGdpdDovL3NvdXJjZXdhcmUub3JnL2dpdC9iaW51dGlscy1nZGIuZ2l0O2JyYW5jaD1iaW51dGlscy0ke0JJTlVQVn0tYnJhbmNoO3Byb3RvY29sPWdpdCBcCisgICAgIGZpbGU6Ly8wMDAyLWNvbmZpZ3VyZS13aWRlbi10aGUtcmVnZXhwLWZvci1TSC1hcmNoaXRlY3R1cmVzLnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMDMtUG9pbnQtc2NyaXB0cy1sb2NhdGlvbi10by1saWJkaXIucGF0Y2ggXAorICAgICBmaWxlOi8vMDAwNC1Pbmx5LWdlbmVyYXRlLWFuLVJQQVRILWVudHJ5LWlmLUxEX1JVTl9QQVRILWlzLW5vdC1lLnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMDUtRXhwbGljaXRseS1saW5rLXdpdGgtbGlibS1vbi11Y2xpYmMucGF0Y2ggXAorICAgICBmaWxlOi8vMDAwNi1Vc2UtbGlidG9vbC0yLjQucGF0Y2ggXAorICAgICBmaWxlOi8vMDAwNy1BZGQtdGhlLWFybXY1ZS1hcmNoaXRlY3R1cmUtdG8tYmludXRpbHMucGF0Y2ggXAorICAgICBmaWxlOi8vMDAwOC1kb24tdC1sZXQtdGhlLWRpc3Ryby1jb21waWxlci1wb2ludC10by10aGUtd3JvbmctaW5zLnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMDktVXBzdHJlYW0tU3RhdHVzLUluYXBwcm9wcmlhdGUtZGlzdHJpYnV0aW9uLWNvZGVzb3VyYy5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDEwLUZpeC1ycGF0aC1pbi1saWJ0b29sLXdoZW4tc3lzcm9vdC1pcy1lbmFibGVkLnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMTEtQ2hhbmdlLWRlZmF1bHQtZW11bGF0aW9uLWZvci1taXBzNjQtbGludXgucGF0Y2ggXAorICAgICBmaWxlOi8vMDAxMi1BZGQtWExQLWluc3RydWN0aW9ucy1zdXBwb3J0LnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMTMtRml4LWFuLWludGVybmFsLWVycm9yLWluLWRvX3ByaW50X3RvX21hcGZpbGUtc2Vlbi13aS5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDE0LWdvbGQtYXJtLVNraXAtcGljLWNoZWNrLWZvci1SX0FSTV9SRUwzMi5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDE1LUZpeC1keW5hbWljLWxpc3Qtc28tdGhhdC1zeW1ib2xzLW5vdC1pbi10aGUtbGlzdC1hcmUucGF0Y2ggXAorICAgICBmaWxlOi8vYmludXRpbHMtb2N0ZW9uMy5wYXRjaCBcCisgICAgIGZpbGU6Ly9hZGQtdGh1bmRlcngtc3VwcG9ydC1mb3ItZ2FzLnBhdGNoIFwKKyAgICAgIgorUyAgPSAiJHtXT1JLRElSfS9naXQiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgICAgICAgcm0gLXJmICR7U30vZ2RiICR7U30vbGliZGVjbnVtYmVyICR7U30vcmVhZGxpbmUgJHtTfS9zaW0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzLWNhbmFkaWFuLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzLWNhbmFkaWFuLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTE0NjQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3MtY2FuYWRpYW4uaW5jCkBAIC0wLDAgKzEsMjkgQEAKK2luaGVyaXQgY3Jvc3MtY2FuYWRpYW4KKworU1VNTUFSWSA9ICJHTlUgYmluYXJ5IHV0aWxpdGllcyAoY3Jvc3MtY2FuYWRpYW4gZm9yICR7VEFSR0VUX0FSQ0h9IHRhcmdldCkiCitQTiA9ICJiaW51dGlscy1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9IgorQlBOID0gImJpbnV0aWxzIgorCitERVBFTkRTID0gImZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSB2aXJ0dWFsLyR7SE9TVF9QUkVGSVh9Z2NjLWNyb3Nzc2RrIHZpcnR1YWwvbmF0aXZlc2RrLWxpYmMgbmF0aXZlc2RrLXpsaWIgbmF0aXZlc2RrLWdldHRleHQgbmF0aXZlc2RrLWZsZXgiCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC1zeXNyb290PSR7U0RLUEFUSH0vc3lzcm9vdHMvJHtUVU5FX1BLR0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30gXAorICAgICAgICAgICAgICAgICIKKworIyBXZSBoYXZlIHRvIHBvaW50IGJpbnV0aWxzIGF0IGEgc3lzcm9vdCBidXQgd2UgZG9uJ3QgbmVlZCB0byByZWJ1aWxkIGlmIHRoaXMgY2hhbmdlcworIyBlLmcuIHdlIHN3aXRjaCBiZXR3ZWVuIGRpZmZlcmVudCBtYWNoaW5lcyB3aXRoIGRpZmZlcmVudCB0dW5lcy4KK0VYVFJBX09FQ09ORlt2YXJkZXBzZXhjbHVkZV0gPSAiVFVORV9QS0dBUkNIIgorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJIyBXZSdyZSBub3QgaW50ZXJlc3RlZCBpbiB0aGUgbGlicyBvciBoZWFkZXJzLCB0aGVzZSB3b3VsZCBjb21lIGZyb20gdGhlIAorCSMgbmF0aXZlc2RrIG9yIHRhcmdldCB2ZXJzaW9uIG9mIHRoZSBiaW51dGlscyByZWNpcGUKKwlybSAtcmYgJHtEfSR7cHJlZml4fS8ke1RBUkdFVF9TWVN9CisJcm0gLWYgJHtEfSR7bGliZGlyfS9saWJiZmQqCisJcm0gLWYgJHtEfSR7bGliZGlyfS9saWJpYmVydHkqCisJcm0gLWYgJHtEfSR7bGliZGlyfS9saWJvcGNvZGVzKgorCXJtIC1mICR7RH0ke2luY2x1ZGVkaXJ9LyouaAorCQorCWNyb3NzX2NhbmFkaWFuX2JpbmRpcmxpbmtzCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3MtY2FuYWRpYW5fMi4yNS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3MtY2FuYWRpYW5fMi4yNS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYmFhMDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zcy1jYW5hZGlhbl8yLjI1LjEuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIGJpbnV0aWxzLmluYworcmVxdWlyZSBiaW51dGlscy0ke1BWfS5pbmMKK3JlcXVpcmUgYmludXRpbHMtY3Jvc3MtY2FuYWRpYW4uaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zcy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQzZDgwMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzLmluYwpAQCAtMCwwICsxLDMwIEBACitpbmhlcml0IGNyb3NzCitQUk9WSURFUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscyIKKworUE4gPSAiYmludXRpbHMtY3Jvc3MtJHtUQVJHRVRfQVJDSH0iCitCUE4gPSAiYmludXRpbHMiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitJTkhJQklUX0FVVE9UT09MU19ERVBTID0gIjEiCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtaW5zdGFsbC1saWJiZmQgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMgXAorICAgICAgICAgICAgICAgICIKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorCisJIyBXZSBkb24ndCByZWFsbHkgbmVlZCB0aGVzZSwgc28gd2UnbGwgcmVtb3ZlIHRoZW0uLi4KKwlybSAtcmYgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7bGliZGlyX25hdGl2ZX0vbGliaWJlcnR5LmEKKwlybSAtcmYgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vJHtUQVJHRVRfU1lTfQorCXJtIC1yZiAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS9saWIvbGRzY3JpcHRzCisJcm0gLXJmICR7RH0ke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9L3NoYXJlL2luZm8KKwlybSAtcmYgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vc2hhcmUvbG9jYWxlCisJcm0gLXJmICR7RH0ke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9L3NoYXJlL21hbgorCXJtZGlyICR7RH0ke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9L3NoYXJlIHx8IDoKKwlybWRpciAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS8ke2xpYmRpcn0vZ2NjLWxpYiB8fCA6CisJcm1kaXIgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vJHtsaWJkaXJ9NjQvZ2NjLWxpYiB8fCA6CisJcm1kaXIgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vJHtsaWJkaXJ9IHx8IDoKKwlybWRpciAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS8ke2xpYmRpcn02NCB8fCA6CisJcm1kaXIgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vJHtwcmVmaXh9IHx8IDoKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzXzIuMjUuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzXzIuMjUuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmQxZjdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3NfMi4yNS4xLmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSBiaW51dGlscy5pbmMKK3JlcXVpcmUgYmludXRpbHMtJHtQVn0uaW5jCityZXF1aXJlIGJpbnV0aWxzLWNyb3NzLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3NzZGtfMi4yNS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3NzZGtfMi4yNS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ODEwNmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zc3Nka18yLjI1LjEuYmIKQEAgLTAsMCArMSwxMyBAQAorcmVxdWlyZSBiaW51dGlscy1jcm9zc18ke1BWfS5iYgorCitpbmhlcml0IGNyb3Nzc2RrCisKK1BOID0gImJpbnV0aWxzLWNyb3Nzc2RrLSR7VEFSR0VUX0FSQ0h9IgorCitQUk9WSURFUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscy1jcm9zc3NkayIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtR2VuZXJhdGUtcmVsb2NhdGFibGUtU0RLcy5wYXRjaCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXNlZCAtaSAncyMvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliIyR7U0RLUEFUSE5BVElWRX0vbGliICR7U0RLUEFUSE5BVElWRX0vdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliIycgJHtTfS9sZC9jb25maWd1cmUudGd0Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMwNDg2NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLmluYwpAQCAtMCwwICsxLDE1MyBAQAorU1VNTUFSWSA9ICJHTlUgYmluYXJ5IHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBHTlUgQmludXRpbHMgYXJlIGEgY29sbGVjdGlvbiBvZiBiaW5hcnkgdG9vbHMuIFwKK1RoZSBtYWluIG9uZXMgYXJlIGxkIChHTlUgTGlua2VyKSwgYW5kIGFzIChHTlUgQXNzZW1ibGVyKS4gVGhpcyBcCitwYWNrYWdlIGFsc28gaW5jbHVkZXMgYWRkaXRpb24gdG9vbHMgc3VjaCBhcyBhZGRyMmxpbmUgKENvbnZlcnRzIFwKK2FkZHJlc3NlcyBpbnRvIGZpbGVuYW1lcyBhbmQgbGluZSBudW1iZXJzKSwgYXIgKHV0aWxpdHkgZm9yIGNyZWF0aW5nLCBcCittb2RpZnlpbmcgYW5kIGV4dHJhY3RpbmcgYXJjaGl2ZXMpLCBubSAobGlzdCBzeW1ib2xzIGluIG9iamVjdCBcCitmaWxlcyksIG9iamNvcHkgKGNvcHkgYW5kIHRyYW5zbGF0ZSBvYmplY3QgZmlsZXMpLCBvYmpkdW1wIChEaXNwbGF5IFwKK29iamVjdCBpbmZvcm1hdGlvbiksIGFuZCBvdGhlciB0b29scyBhbmQgcmVsYXRlZCBsaWJyYXJpZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2JpbnV0aWxzLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYzIgorCitERVBFTkRTID0gImZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSB6bGliLW5hdGl2ZSBnbnUtY29uZmlnLW5hdGl2ZSBhdXRvY29uZi1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgbXVsdGlsaWJfaGVhZGVyIHRleGluZm8KKworRklMRVNfJHtQTn0gPSAiIFwKKwkke2JpbmRpcn0vJHtUQVJHRVRfUFJFRklYfSogXAorCSR7bGliZGlyfS9saWIqLSouc28gXAorCSR7cHJlZml4fS8ke1RBUkdFVF9TWVN9L2Jpbi8qIFwKKyAgICAgICAgJHtiaW5kaXJ9L2VtYmVkc3B1IgorCitSUFJPVklERVNfJHtQTn0gKz0gIiR7UE59LXN5bWxpbmtzIgorCitGSUxFU18ke1BOfS1kZXYgPSAiIFwKKwkke2luY2x1ZGVkaXJ9IFwKKwkke2xpYmRpcn0vKi5sYSBcCisJJHtsaWJkaXJ9L2xpYmJmZC5zbyBcCisJJHtsaWJkaXJ9L2xpYm9wY29kZXMuc28iCisKKyMgUmF0aGVyIHRoYW4gZHVwbGljYXRpbmcgbXVsdGlwbGUgZW50cmllcyBmb3IgdGhlc2UsIG1ha2Ugb25lCisjIGxpc3QgYW5kIHJldXNlIGl0LgorCitVU0VfQUxURVJOQVRJVkVTX0ZPUiA9ICIgXAorCWFkZHIybGluZSBcCisJYXIgXAorCWFzIFwKKwljKytmaWx0IFwKKwllbGZlZGl0IFwKKwlncHJvZiBcCisJbGQgXAorCWxkLmJmZCBcCisJbGQuZ29sZCBkd3AgXAorCW5tIFwKKwlvYmpjb3B5IFwKKwlvYmpkdW1wIFwKKwlyYW5saWIgXAorCXJlYWRlbGYgXAorCXNpemUgXAorCXN0cmluZ3MgXAorCXN0cmlwIFwKKyIKKworcHl0aG9uIGRvX3BhY2thZ2VfcHJlcGVuZCgpIHsKKyAgICBtYWtlX2FsdHMgPSBkLmdldFZhcigiVVNFX0FMVEVSTkFUSVZFU19GT1IiLCBUcnVlKSBvciAiIgorICAgIHByZWZpeCA9IGQuZ2V0VmFyKCJUQVJHRVRfUFJFRklYIiwgVHJ1ZSkKKyAgICBiaW5kaXIgPSBkLmdldFZhcigiYmluZGlyIiwgVHJ1ZSkKKyAgICBmb3IgYWx0IGluIG1ha2VfYWx0cy5zcGxpdCgpOgorICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIGFsdCwgYmluZGlyICsgIi8iICsgcHJlZml4ICsgYWx0KQorICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIGFsdCwgYmluZGlyICsgIi8iICsgYWx0KQorfQorCisjIEZJTEVTXyR7UE59LWRiZyA9ICIke3ByZWZpeH0vJHtUQVJHRVRfU1lTfS9iaW4vLmRlYnVnICR7cHJlZml4fS8ke2xpYmRpcn0vLmRlYnVnIgorCitCID0gIiR7U30vYnVpbGQuJHtIT1NUX1NZU30uJHtUQVJHRVRfU1lTfSIKKworRVhUUkFfT0VDT05GID0gIi0tcHJvZ3JhbS1wcmVmaXg9JHtUQVJHRVRfUFJFRklYfSBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXdlcnJvciBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtcGx1Z2lucyBcCisgICAgICAgICAgICAgICAgJHtMREdPTER9IFwKKyAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ211bHRpYXJjaCcsICctLWVuYWJsZS02NC1iaXQtYmZkJywgJycsIGQpfSIKKworTERHT0xEX2NsYXNzLW5hdGl2ZSA9ICIiCitMREdPTERfY2xhc3MtY3Jvc3NzZGsgPSAiIgorTERHT0xEID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xkLWlzLWdvbGQnLCAnLS1lbmFibGUtZ29sZD1kZWZhdWx0IC0tZW5hYmxlLXRocmVhZHMnLCAnLS1lbmFibGUtZ29sZCAtLWVuYWJsZS1sZD1kZWZhdWx0JywgZCl9IgorCisjIFRoaXMgaXMgbmVjZXNzYXJ5IGR1ZSB0byBhIGJ1ZyBpbiB0aGUgYmludXRpbHMgTWFrZWZpbGVzCisjIEVYVFJBX09FTUFLRSA9ICJjb25maWd1cmUtYnVpbGQtbGliaWJlcnR5IGFsbCIKKworZXhwb3J0IEFSID0gIiR7SE9TVF9QUkVGSVh9YXIiCitleHBvcnQgQVMgPSAiJHtIT1NUX1BSRUZJWH1hcyIKK2V4cG9ydCBMRCA9ICIke0hPU1RfUFJFRklYfWxkIgorZXhwb3J0IE5NID0gIiR7SE9TVF9QUkVGSVh9bm0iCitleHBvcnQgUkFOTElCID0gIiR7SE9TVF9QUkVGSVh9cmFubGliIgorZXhwb3J0IE9CSkNPUFkgPSAiJHtIT1NUX1BSRUZJWH1vYmpjb3B5IgorZXhwb3J0IE9CSkRVTVAgPSAiJHtIT1NUX1BSRUZJWH1vYmpkdW1wIgorCitleHBvcnQgQVJfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9YXIiCitleHBvcnQgQVNfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9YXMiCitleHBvcnQgTERfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9bGQiCitleHBvcnQgTk1fRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9bm0iCitleHBvcnQgUkFOTElCX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfXJhbmxpYiIKKworZXhwb3J0IENDX0ZPUl9IT1NUID0gIiR7Q0NBQ0hFfSR7SE9TVF9QUkVGSVh9Z2NjICR7SE9TVF9DQ19BUkNIfSIKK2V4cG9ydCBDWFhfRk9SX0hPU1QgPSAiJHtDQ0FDSEV9JHtIT1NUX1BSRUZJWH1nY2MgJHtIT1NUX0NDX0FSQ0h9IgorCisjIGF1dG90b29scy5iYmNsYXNzIHNldHMgdGhlIF9GT1JfQlVJTEQgdmFyaWFibGVzLCBidXQgZm9yIHNvbWUgcmVhc29uIHdlIG5lZWQKKyMgdG8gdW5zZXQgTERfTElCUkFSWV9QQVRILgorZXhwb3J0IENDX0ZPUl9CVUlMRCA9ICJMRF9MSUJSQVJZX1BBVEg9ICR7QlVJTERfQ0N9IgorCitNVUxUSUFSQ0ggOj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAibXVsdGlhcmNoIiwgInllcyIsICJubyIsIGQpfSIKK2RvX2NvbmZpZ3VyZVt2YXJkZXBzXSArPSAiTVVMVElBUkNIIgorZG9fY29uZmlndXJlICgpIHsKKwkoY2QgJHtTfTsgZ251LWNvbmZpZ2l6ZSkgfHwgZGllICJGYWlsZWQgdG8gcnVuIGdudS1jb25maWdpemUiCisJb2VfcnVuY29uZgorIworIyBtdXN0IHByaW1lIGNvbmZpZy5jYWNoZSB0byBlbnN1cmUgdGhlIGJ1aWxkIG9mIGxpYmliZXJ0eQorIworCW1rZGlyIC1wICR7Qn0vYnVpbGQtJHtCVUlMRF9TWVN9CisJZm9yIGkgaW4gJHtDT05GSUdfU0lURX07IGRvCisJCWNhdCAkaSA+PiAke0J9L2J1aWxkLSR7QlVJTERfU1lTfS9jb25maWcuY2FjaGUgfHwgdHJ1ZQorCWRvbmUKK30KKworZG9faW5zdGFsbCAoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCSMgV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhlc2UsIHNvIHdlJ2xsIHJlbW92ZSB0aGVtLi4uCisJcm0gLXJmICR7RH0ke2xpYmRpcn0vbGRzY3JpcHRzCisKKwkjIEZpeCB0aGUgL3Vzci8ke1RBUkdFVF9TWVN9L2Jpbi8qIGxpbmtzCisJZm9yIGwgaW4gJHtEfSR7cHJlZml4fS8ke1RBUkdFVF9TWVN9L2Jpbi8qOyBkbworCQlybSAtZiAkbAorCQlsbiAtc2YgYGVjaG8gJHtwcmVmaXh9LyR7VEFSR0VUX1NZU30vYmluIFwKKwkJCXwgdHIgLXMgLyBcCisJCQl8IHNlZCAtZSAncyxeLywsJyAtZSAncyxbXi9dKiwuLixnJ2Ake2JpbmRpcn0vJHtUQVJHRVRfUFJFRklYfWBiYXNlbmFtZSAkbGAgJGwKKwlkb25lCisKKwkjIEluc3RhbGwgdGhlIGxpYmliZXJ0eSBoZWFkZXIKKwlpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9CisJaW5zdGFsbCAtbSA2NDQgJHtTfS9pbmNsdWRlL2Fuc2lkZWNsLmggJHtEfSR7aW5jbHVkZWRpcn0KKwlpbnN0YWxsIC1tIDY0NCAke1N9L2luY2x1ZGUvbGliaWJlcnR5LmggJHtEfSR7aW5jbHVkZWRpcn0KKworCWNkICR7RH0ke2JpbmRpcn0KKworCSMgU3ltbGlua3MgZm9yIGVhc2Ugb2YgcnVubmluZyB0aGVzZSBvbiB0aGUgbmF0aXZlIHRhcmdldAorCWZvciBwIGluICR7VEFSR0VUX1BSRUZJWH0qIDsgZG8KKwkJbG4gLXNmICRwIGBlY2hvICRwIHwgc2VkIC1lIHMsJHtUQVJHRVRfUFJFRklYfSwsYAorCWRvbmUKKworCWZvciBhbHQgaW4gJHtVU0VfQUxURVJOQVRJVkVTX0ZPUn07IGRvCisJCXJtIC1mICR7RH0ke2JpbmRpcn0vJGFsdAorCWRvbmUKKworCW9lX211bHRpbGliX2hlYWRlciBiZmQuaAorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfV9jbGFzcy10YXJnZXQgPSAiJHtVU0VfQUxURVJOQVRJVkVTX0ZPUn0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAxLUdlbmVyYXRlLXJlbG9jYXRhYmxlLVNES3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAxLUdlbmVyYXRlLXJlbG9jYXRhYmxlLVNES3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU4MGMxZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDEtR2VuZXJhdGUtcmVsb2NhdGFibGUtU0RLcy5wYXRjaApAQCAtMCwwICsxLDYyIEBACitGcm9tIGY3MWVjZjI1MWY4NGI0YmJjOWI3YTgzMmQ1Y2Q0YThiYWU5NWQ4M2IgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjU4OjU0ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDEvMTNdIEdlbmVyYXRlIHJlbG9jYXRhYmxlIFNES3MKKworVGhpcyBwYXRjaCB3aWxsIG1vZGlmeSB0aGUgRUxGIGxpbmtlciBzY3JpcHRzIHNvIHRoYXQgdGhlIGNyb3Nzc2RrCitsaW5rZXIgd2lsbCBnZW5lcmF0ZSBiaW5hcmllcyB3aXRoIGEgNDA5NiBieXRlcyBQVF9JTlRFUlAgc2VjdGlvbi4gV2hlbiB0aGUgYmluYXJpZXMKK3dpbGwgYmUgcmVsb2NhdGVkLCBhdCBTREsgaW5zdGFsbCB0aW1lLCB0aGUgaW50ZXJwcmV0ZXIgcGF0aCBjYW4gYmUgZWFzaWx5CitjaGFuZ2VkIGJ5IHRoZSByZWxvY2F0aW5nIHNjcmlwdC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtTREsgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IExhdXJlbnRpdSBQYWxjdSA8bGF1cmVudGl1LnBhbGN1QGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsZC9nZW5zY3JpcHRzLnNoICAgICAgfCAzICsrKworIGxkL3NjcmlwdHRlbXBsL2VsZi5zYyB8IDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGQvZ2Vuc2NyaXB0cy5zaCBiL2xkL2dlbnNjcmlwdHMuc2gKK2luZGV4IDQ5OTYwN2EuLjA3NWRkMDQgMTAwNzU1CistLS0gYS9sZC9nZW5zY3JpcHRzLnNoCisrKysgYi9sZC9nZW5zY3JpcHRzLnNoCitAQCAtMjc3LDYgKzI3Nyw3IEBAIERBVEFfQUxJR05NRU5UX3U9IiR7REFUQV9BTElHTk1FTlRfdS0ke0RBVEFfQUxJR05NRU5UX3J9fSIKKyBMRF9GTEFHPXIKKyBEQVRBX0FMSUdOTUVOVD0ke0RBVEFfQUxJR05NRU5UX3J9CisgREVGQVVMVF9EQVRBX0FMSUdOTUVOVD0iQUxJR04oJHtTRUdNRU5UX1NJWkV9KSIKKytQQVJUSUFMX0xJTktJTkc9IiAiCisgKCBlY2hvICIvKiBTY3JpcHQgZm9yIGxkIC1yOiBsaW5rIHdpdGhvdXQgcmVsb2NhdGlvbiAqLyIKKyAgIC4gJHtDVVNUT01JWkVSX1NDUklQVH0KKyAgIC4gJHtzcmNkaXJ9L3NjcmlwdHRlbXBsLyR7U0NSSVBUX05BTUV9LnNjCitAQCAtMjg1LDEwICsyODYsMTIgQEAgREVGQVVMVF9EQVRBX0FMSUdOTUVOVD0iQUxJR04oJHtTRUdNRU5UX1NJWkV9KSIKKyBMRF9GTEFHPXUKKyBEQVRBX0FMSUdOTUVOVD0ke0RBVEFfQUxJR05NRU5UX3V9CisgQ09OU1RSVUNUSU5HPSIgIgorK1BBUlRJQUxfTElOS0lORz0iICIKKyAoIGVjaG8gIi8qIFNjcmlwdCBmb3IgbGQgLVVyOiBsaW5rIHcvb3V0IHJlbG9jYXRpb24sIGRvIGNyZWF0ZSBjb25zdHJ1Y3RvcnMgKi8iCisgICAuICR7Q1VTVE9NSVpFUl9TQ1JJUFR9CisgICAuICR7c3JjZGlyfS9zY3JpcHR0ZW1wbC8ke1NDUklQVF9OQU1FfS5zYworICkgfCBzZWQgLWUgJy9eICokL2Q7cy9bIAldKiQvLycgPiBsZHNjcmlwdHMvJHtFTVVMQVRJT05fTkFNRX0ueHUKKyt1bnNldCBQQVJUSUFMX0xJTktJTkcKKyAKKyBMRF9GTEFHPQorIERBVEFfQUxJR05NRU5UPSR7REFUQV9BTElHTk1FTlRffQorZGlmZiAtLWdpdCBhL2xkL3NjcmlwdHRlbXBsL2VsZi5zYyBiL2xkL3NjcmlwdHRlbXBsL2VsZi5zYworaW5kZXggNDM2OGZkOS4uOWYwMWU4YyAxMDA2NDQKKy0tLSBhL2xkL3NjcmlwdHRlbXBsL2VsZi5zYworKysrIGIvbGQvc2NyaXB0dGVtcGwvZWxmLnNjCitAQCAtMTMxLDggKzEzMSw4IEBAIGlmIHRlc3QgLW4gIiR7Q09NTU9OUEFHRVNJWkV9IjsgdGhlbgorICAgREFUQV9TRUdNRU5UX0VORD0iLiA9IERBVEFfU0VHTUVOVF9FTkQgKC4pOyIKKyAgIERBVEFfU0VHTUVOVF9SRUxST19FTkQ9Ii4gPSBEQVRBX1NFR01FTlRfUkVMUk9fRU5EICgke1NFUEFSQVRFX0dPVFBMVC0wfSwgLik7IgorIGZpCistaWYgdGVzdCAteiAiJHtJTklUSUFMX1JFQURPTkxZX1NFQ1RJT05TfSR7Q1JFQVRFX1NITElCfSI7IHRoZW4KKy0gIElOSVRJQUxfUkVBRE9OTFlfU0VDVElPTlM9Ii5pbnRlcnAgICAgICAgJHtSRUxPQ0FUSU5HLTB9IDogeyAqKC5pbnRlcnApIH0iCisraWYgdGVzdCAteiAiJHtJTklUSUFMX1JFQURPTkxZX1NFQ1RJT05TfSR7Q1JFQVRFX1NITElCfSR7UEFSVElBTF9MSU5LSU5HfSI7IHRoZW4KKysgIElOSVRJQUxfUkVBRE9OTFlfU0VDVElPTlM9Ii5pbnRlcnAgICAgICAgJHtSRUxPQ0FUSU5HLTB9IDogeyAqKC5pbnRlcnApOyAuID0gMHgxMDAwOyB9IgorIGZpCisgaWYgdGVzdCAteiAiJFBMVCI7IHRoZW4KKyAgIElQTFQ9Ii5pcGx0ICAgICAgICAgJHtSRUxPQ0FUSU5HLTB9IDogeyAqKC5pcGx0KSB9IgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAyLWNvbmZpZ3VyZS13aWRlbi10aGUtcmVnZXhwLWZvci1TSC1hcmNoaXRlY3R1cmVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMi1jb25maWd1cmUtd2lkZW4tdGhlLXJlZ2V4cC1mb3ItU0gtYXJjaGl0ZWN0dXJlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGUyMWQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMi1jb25maWd1cmUtd2lkZW4tdGhlLXJlZ2V4cC1mb3ItU0gtYXJjaGl0ZWN0dXJlcy5wYXRjaApAQCAtMCwwICsxLDU2IEBACitGcm9tIGRmYmNmYjBkNzE3NjViMzM3ZTYzNTYyMjk5YTk0MzA0MzkyOGQyZDIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjA3OjMzICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDIvMTNdIGNvbmZpZ3VyZTogd2lkZW4gdGhlIHJlZ2V4cCBmb3IgU0ggYXJjaGl0ZWN0dXJlcworCitncHJvZiBuZWVkcyB0byBrbm93IGFib3V0IHVjbGliYworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSAgICAgICB8IDQgKystLQorIGdwcm9mL2NvbmZpZ3VyZSB8IDUgKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggODc2NzdiYy4uZTlmMmYxMyAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtMzM0MSw3ICszMzQxLDcgQEAgY2FzZSAiJHt0YXJnZXR9IiBpbgorICAgICA7OworICAgczM5MC0qLSogfCBzMzkweC0qLSopCisgICAgIDs7CistICBzaC0qLSogfCBzaFszNF0qLSotKikKKysgIHNoKi0qLSogfCBzaFszNF0qLSotKikKKyAgICAgOzsKKyAgIHNoNjQtKi0qIHwgc2g1Ki0qLSopCisgICAgIDs7CitAQCAtMzgxMiw3ICszODEyLDcgQEAgY2FzZSAiJHt0YXJnZXR9IiBpbgorICAgb3IxayotKi0qKQorICAgICBub2NvbmZpZ2RpcnM9IiRub2NvbmZpZ2RpcnMgZ2RiIgorICAgICA7OworLSAgc2gtKi0qIHwgc2g2NC0qLSopCisrICBzaCotKi0qIHwgc2g2NC0qLSopCisgICAgIGNhc2UgIiR7dGFyZ2V0fSIgaW4KKyAgICAgICBzaCotKi1lbGYpCisgICAgICAgICAgOzsKK2RpZmYgLS1naXQgYS9ncHJvZi9jb25maWd1cmUgYi9ncHJvZi9jb25maWd1cmUKK2luZGV4IGIwOWM4ZmIuLjc5OTYxYzUgMTAwNzU1CistLS0gYS9ncHJvZi9jb25maWd1cmUKKysrKyBiL2dwcm9mL2NvbmZpZ3VyZQorQEAgLTU4NjksNiArNTg2OSwxMSBAQCBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKKytsaW51eC11Y2xpYmMqKQorKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKysgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC9saWIvbGlidUNsaWJjLSouc29gCisrICA7OworKworIG5ldGJzZCopCisgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfF9waWNcLmEpJCcKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMy1Qb2ludC1zY3JpcHRzLWxvY2F0aW9uLXRvLWxpYmRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDMtUG9pbnQtc2NyaXB0cy1sb2NhdGlvbi10by1saWJkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVjZTc2NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDMtUG9pbnQtc2NyaXB0cy1sb2NhdGlvbi10by1saWJkaXIucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSBkZmIxNDEyZGE2N2JiZmUzZTk5M2QxMDdkMGI1ZTM5MmY0NDE0MWFiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTowOTo1OCArMDAwMAorU3ViamVjdDogW1BBVENIIDAzLzEzXSBQb2ludCBzY3JpcHRzIGxvY2F0aW9uIHRvIGxpYmRpcgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2RlYmlhbiBwYXRjaF0KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxkL01ha2VmaWxlLmFtIHwgMiArLQorIGxkL01ha2VmaWxlLmluIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGQvTWFrZWZpbGUuYW0gYi9sZC9NYWtlZmlsZS5hbQoraW5kZXggOTU3NWYxZi4uODRkZjBiZiAxMDA2NDQKKy0tLSBhL2xkL01ha2VmaWxlLmFtCisrKysgYi9sZC9NYWtlZmlsZS5hbQorQEAgLTU0LDcgKzU0LDcgQEAgZW5kaWYKKyAjIFdlIHB1dCB0aGUgc2NyaXB0cyBpbiB0aGUgZGlyZWN0b3J5ICQoc2NyaXB0ZGlyKS9sZHNjcmlwdHMuCisgIyBXZSBjYW4ndCBwdXQgdGhlIHNjcmlwdHMgaW4gJChkYXRhZGlyKSBiZWNhdXNlIHRoZSBTRUFSQ0hfRElSCisgIyBkaXJlY3RpdmVzIG5lZWQgdG8gYmUgZGlmZmVyZW50IGZvciBuYXRpdmUgYW5kIGNyb3NzIGxpbmtlcnMuCistc2NyaXB0ZGlyID0gJCh0b29sZGlyKS9saWIKKytzY3JpcHRkaXIgPSAkKGxpYmRpcikKKyAKKyBFTVVMID0gQEVNVUxACisgRU1VTEFUSU9OX09GSUxFUyA9IEBFTVVMQVRJT05fT0ZJTEVTQAorZGlmZiAtLWdpdCBhL2xkL01ha2VmaWxlLmluIGIvbGQvTWFrZWZpbGUuaW4KK2luZGV4IDlmNTZjYTEuLjI3Mjg2MGYgMTAwNjQ0CistLS0gYS9sZC9NYWtlZmlsZS5pbgorKysrIGIvbGQvTWFrZWZpbGUuaW4KK0BAIC0zODgsNyArMzg4LDcgQEAgQU1fQ0ZMQUdTID0gJChXQVJOX0NGTEFHUykKKyAjIFdlIHB1dCB0aGUgc2NyaXB0cyBpbiB0aGUgZGlyZWN0b3J5ICQoc2NyaXB0ZGlyKS9sZHNjcmlwdHMuCisgIyBXZSBjYW4ndCBwdXQgdGhlIHNjcmlwdHMgaW4gJChkYXRhZGlyKSBiZWNhdXNlIHRoZSBTRUFSQ0hfRElSCisgIyBkaXJlY3RpdmVzIG5lZWQgdG8gYmUgZGlmZmVyZW50IGZvciBuYXRpdmUgYW5kIGNyb3NzIGxpbmtlcnMuCistc2NyaXB0ZGlyID0gJCh0b29sZGlyKS9saWIKKytzY3JpcHRkaXIgPSAkKGxpYmRpcikKKyBCQVNFRElSID0gJChzcmNkaXIpLy4uCisgQkZERElSID0gJChCQVNFRElSKS9iZmQKKyBJTkNESVIgPSAkKEJBU0VESVIpL2luY2x1ZGUKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNC1Pbmx5LWdlbmVyYXRlLWFuLVJQQVRILWVudHJ5LWlmLUxEX1JVTl9QQVRILWlzLW5vdC1lLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNC1Pbmx5LWdlbmVyYXRlLWFuLVJQQVRILWVudHJ5LWlmLUxEX1JVTl9QQVRILWlzLW5vdC1lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzY2QyYTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA0LU9ubHktZ2VuZXJhdGUtYW4tUlBBVEgtZW50cnktaWYtTERfUlVOX1BBVEgtaXMtbm90LWUucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbSAzMTI2NjA4YjhjOTVhNzkyYWRlNTZjZjYyYTUzMWQ5MzVkMzkxYzUwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMToyNzoxNyArMDAwMAorU3ViamVjdDogW1BBVENIIDA0LzEzXSBPbmx5IGdlbmVyYXRlIGFuIFJQQVRIIGVudHJ5IGlmIExEX1JVTl9QQVRIIGlzIG5vdAorIGVtcHR5CisKK2ZvciBjYXNlcyB3aGVyZSAtcnBhdGggaXNuJ3Qgc3BlY2lmaWVkLiBkZWJpYW4gKCMxNTEwMjQpCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDaHJpcyBDaGltZWxpcyA8Y2hyaXNAZGViaWFuLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsZC9lbXVsdGVtcGwvZWxmMzIuZW0gfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9sZC9lbXVsdGVtcGwvZWxmMzIuZW0gYi9sZC9lbXVsdGVtcGwvZWxmMzIuZW0KK2luZGV4IDM2ZGVlOGUuLjA3YmVhNTIgMTAwNjQ0CistLS0gYS9sZC9lbXVsdGVtcGwvZWxmMzIuZW0KKysrKyBiL2xkL2VtdWx0ZW1wbC9lbGYzMi5lbQorQEAgLTExOTgsNiArMTE5OCw4IEBAIGZyYWdtZW50IDw8RU9GCisgCSAgICAgICYmIGNvbW1hbmRfbGluZS5ycGF0aCA9PSBOVUxMKQorIAkgICAgeworIAkgICAgICBsaWJfcGF0aCA9IChjb25zdCBjaGFyICopIGdldGVudiAoIkxEX1JVTl9QQVRIIik7CisrCSAgICAgIGlmICgobGliX3BhdGgpICYmIChzdHJsZW4gKGxpYl9wYXRoKSA9PSAwKSkKKysJCSAgbGliX3BhdGggPSBOVUxMOworIAkgICAgICBpZiAoZ2xkJHtFTVVMQVRJT05fTkFNRX1fc2VhcmNoX25lZWRlZCAobGliX3BhdGgsICZuLAorIAkJCQkJCSAgICAgIGZvcmNlKSkKKyAJCWJyZWFrOworQEAgLTE0NjEsNiArMTQ2Myw4IEBAIGdsZCR7RU1VTEFUSU9OX05BTUV9X2JlZm9yZV9hbGxvY2F0aW9uICh2b2lkKQorICAgcnBhdGggPSBjb21tYW5kX2xpbmUucnBhdGg7CisgICBpZiAocnBhdGggPT0gTlVMTCkKKyAgICAgcnBhdGggPSAoY29uc3QgY2hhciAqKSBnZXRlbnYgKCJMRF9SVU5fUEFUSCIpOworKyAgaWYgKChycGF0aCkgJiYgKHN0cmxlbiAocnBhdGgpID09IDApKQorKyAgICBycGF0aCA9IE5VTEw7CisgCisgICBmb3IgKGFiZmQgPSBsaW5rX2luZm8uaW5wdXRfYmZkczsgYWJmZDsgYWJmZCA9IGFiZmQtPmxpbmsubmV4dCkKKyAgICAgaWYgKGJmZF9nZXRfZmxhdm91ciAoYWJmZCkgPT0gYmZkX3RhcmdldF9lbGZfZmxhdm91cikKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNS1FeHBsaWNpdGx5LWxpbmstd2l0aC1saWJtLW9uLXVjbGliYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDUtRXhwbGljaXRseS1saW5rLXdpdGgtbGlibS1vbi11Y2xpYmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiZDkzZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDUtRXhwbGljaXRseS1saW5rLXdpdGgtbGlibS1vbi11Y2xpYmMucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorRnJvbSBmMTcwM2JjYzdhNWM1MDdlNDcxZTI2MzBiNWEyZGUxMjkxMDAzMTVhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTozMjo0OSArMDAwMAorU3ViamVjdDogW1BBVENIIDA1LzEzXSBFeHBsaWNpdGx5IGxpbmsgd2l0aCBsaWJtIG9uIHVjbGliYworCitEZXNjcmlwdGlvbjoKKworV2UgZG8gbm90IG5lZWQgdG8gaGF2ZSB0aGUgbGlidG9vbCBwYXRjaCBhbnltb3JlIGZvciBiaW51dGlscyBhZnRlcgorbGlidG9vbCBoYXMgYmVlbiB1cGRhdGVkIHVwc3RyZWFtIGl0IGluY2x1ZGUgc3VwcG9ydCBmb3IgaXQuIEhvd2V2ZXIKK2ZvciBidWlsZGluZyBnYXMgbmF0aXZlbHkgb24gdWNsaWJjIHN5c3RlbXMgd2UgaGF2ZSB0byBsaW5rIGl0IHdpdGgKKy1sbSBzbyB0aGF0IGl0IHBpY2tzIHVwIG1pc3Npbmcgc3ltYm9scy4KKworL2xvY2FsL2J1aWxkX2FyZWEvQlVJTEQvYXJtX3Y1dF9sZV91Y2xpYmMvYmludXRpbHMtMi4xNy41MC9vYmpkaXIvbGliaWJlcnR5L3BpYy9saWJpYmVydHkuYShmbG9hdGZvcm1hdC5vKToKK0luIGZ1bmN0aW9uIGBmbG9hdGZvcm1hdF9mcm9tX2RvdWJsZSc6CitmbG9hdGZvcm1hdC5jOigudGV4dCsweDFlYyk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGZyZXhwJworZmxvYXRmb3JtYXQuYzooLnRleHQrMHgyZjgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBsZGV4cCcKKy9sb2NhbC9idWlsZF9hcmVhL0JVSUxEL2FybV92NXRfbGVfdWNsaWJjL2JpbnV0aWxzLTIuMTcuNTAvb2JqZGlyL2xpYmliZXJ0eS9waWMvbGliaWJlcnR5LmEoZmxvYXRmb3JtYXQubyk6CitJbiBmdW5jdGlvbiBgZmxvYXRmb3JtYXRfdG9fZG91YmxlJzoKK2Zsb2F0Zm9ybWF0LmM6KC50ZXh0KzB4MzhhKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgbGRleHAnCitmbG9hdGZvcm1hdC5jOigudGV4dCsweDNkMik6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGxkZXhwJworZmxvYXRmb3JtYXQuYzooLnRleHQrMHg0M2UpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBsZGV4cCcKK2Zsb2F0Zm9ybWF0LmM6KC50ZXh0KzB4NGUyKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgbGRleHAnCitjb2xsZWN0MjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworbWFrZVs0XTogKioqIFthcy1uZXddIEVycm9yIDEKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnYXMvY29uZmlndXJlLnRndCB8IDYgKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ2FzL2NvbmZpZ3VyZS50Z3QgYi9nYXMvY29uZmlndXJlLnRndAoraW5kZXggOWFiYzc2OC4uMWQ5MmY1NSAxMDA2NDQKKy0tLSBhL2dhcy9jb25maWd1cmUudGd0CisrKysgYi9nYXMvY29uZmlndXJlLnRndAorQEAgLTQ3Nyw2ICs0NzcsMTIgQEAgY2FzZSAke2dlbmVyaWNfdGFyZ2V0fSBpbgorICAgKi0qLW5ldHdhcmUpCQkJCWZtdD1lbGYgZW09bmV0d2FyZSA7OworIGVzYWMKKyAKKytjYXNlICR7Z2VuZXJpY190YXJnZXR9IGluCisrICBhcm0tKi0qdWNsaWJjKikKKysgICAgbmVlZF9saWJtPXllcworKyAgICA7OworK2VzYWMKKysKKyBjYXNlICR7Y3B1X3R5cGV9IGluCisgICBhYXJjaDY0IHwgYWxwaGEgfCBhcm0gfCBpMzg2IHwgaWE2NCB8IG1pY3JvYmxhemUgfCBtaXBzIHwgbnMzMmsgfCBvcjFrIHwgb3Ixa25kIHwgcGRwMTEgfCBwcGMgfCBzcGFyYyB8IHo4MCB8IHo4aykKKyAgICAgYmZkX2dhcz15ZXMKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNi1Vc2UtbGlidG9vbC0yLjQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA2LVVzZS1saWJ0b29sLTIuNC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mjk2N2VmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNi1Vc2UtbGlidG9vbC0yLjQucGF0Y2gKQEAgLTAsMCArMSwxOTM2MSBAQAorRnJvbSAwM2ViOWI0ZmU1ODNlODhhMjJmZDhjMjViNDNmYmQ5YmFmZTIxYWY2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTozNDo0MSArMDAwMAorU3ViamVjdDogW1BBVENIIDA2LzEzXSBVc2UgbGlidG9vbCAyLjQKKworU28gd2UgY2FuIGdldCBsaWJ0b29sIHN5c3Jvb3Qgc3VwcG9ydAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGJmZC9jb25maWd1cmUgICAgICAgIHwgMTMyMCArKysrKysrKysrKysrKysrKy0tLS0tLQorIGJmZC9jb25maWd1cmUuYWMgICAgIHwgICAgMiArLQorIGJpbnV0aWxzL2NvbmZpZ3VyZSAgIHwgMTMxOCArKysrKysrKysrKysrKysrKy0tLS0tLQorIGNvbmZpZ3VyZSAgICAgICAgICAgIHwgICAgMiArLQorIGdhcy9jb25maWd1cmUgICAgICAgIHwgMTMxOCArKysrKysrKysrKysrKysrKy0tLS0tLQorIGdwcm9mL2NvbmZpZ3VyZSAgICAgIHwgMTMyMyArKysrKysrKysrKysrKysrKy0tLS0tLQorIGxkL2NvbmZpZ3VyZSAgICAgICAgIHwgMTcwMSArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLQorIGxpYnRvb2wubTQgICAgICAgICAgIHwgMTA4NiArKysrKysrKysrKysrLS0tLS0tCisgbHRtYWluLnNoICAgICAgICAgICAgfCAyOTI1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCisgbHRvcHRpb25zLm00ICAgICAgICAgfCAgICAyICstCisgbHR2ZXJzaW9uLm00ICAgICAgICAgfCAgIDEyICstCisgbHR+b2Jzb2xldGUubTQgICAgICAgfCAgICAyICstCisgb3Bjb2Rlcy9jb25maWd1cmUgICAgfCAxMzIwICsrKysrKysrKysrKysrKysrLS0tLS0tCisgb3Bjb2Rlcy9jb25maWd1cmUuYWMgfCAgICAyICstCisgMTQgZmlsZXMgY2hhbmdlZCwgODk1MiBpbnNlcnRpb25zKCspLCAzMzgxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYmZkL2NvbmZpZ3VyZSBiL2JmZC9jb25maWd1cmUKK2luZGV4IDg1ZTZiODIuLjNkM2RkODggMTAwNzU1CistLS0gYS9iZmQvY29uZmlndXJlCisrKysgYi9iZmQvY29uZmlndXJlCitAQCAtNjY4LDYgKzY2OCw5IEBAIE9UT09MCisgTElQTworIE5NRURJVAorIERTWU1VVElMCisrTUFOSUZFU1RfVE9PTAorK2FjX2N0X0FSCisrRExMVE9PTAorIE9CSkRVTVAKKyBMTl9TCisgTk0KK0BAIC03ODAsNiArNzgzLDcgQEAgZW5hYmxlX3N0YXRpYworIHdpdGhfcGljCisgZW5hYmxlX2Zhc3RfaW5zdGFsbAorIHdpdGhfZ251X2xkCisrd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBlbmFibGVfbGlidG9vbF9sb2NrCisgZW5hYmxlX3BsdWdpbnMKKyBlbmFibGVfbGFyZ2VmaWxlCitAQCAtMTQ1Niw2ICsxNDYwLDggQEAgT3B0aW9uYWwgUGFja2FnZXM6CisgICAtLXdpdGgtcGljICAgICAgICAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCisgICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCisrICAtLXdpdGgtbGlidG9vbC1zeXNyb290PURJUiBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUgorKyAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLgorICAgLS13aXRoLW1tYXAgICAgICAgICAgICAgdHJ5IHVzaW5nIG1tYXAgZm9yIEJGRCBpbnB1dCBmaWxlcyBpZiBhdmFpbGFibGUKKyAgIC0td2l0aC1zZXBhcmF0ZS1kZWJ1Zy1kaXI9RElSCisgICAgICAgICAgICAgICAgICAgICAgICAgICBMb29rIGZvciBnbG9iYWwgc2VwYXJhdGUgZGVidWcgaW5mbyBpbiBESVIKK0BAIC01Mzg2LDggKzUzOTIsOCBAQCBlc2FjCisgCisgCisgCistbWFjcm9fdmVyc2lvbj0nMi4yLjdhJworLW1hY3JvX3JldmlzaW9uPScxLjMxMzQnCisrbWFjcm9fdmVyc2lvbj0nMi40JworK21hY3JvX3JldmlzaW9uPScxLjMyOTMnCisgCisgCisgCitAQCAtNTQyNyw3ICs1NDMzLDcgQEAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncy4uLiAiID4mNjsgfQorICMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgorLWlmIHRlc3QgIlhgcHJpbnQgLXIgLS0gLW4gMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisraWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisgICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgIEVDSE89J3ByaW50IC1yIC0tJworIGVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCitAQCAtNjExMyw4ICs2MTE5LDggQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsKKyAjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworIHhzaV9zaGVsbD1ubworICggX2x0X2R1bW15PSJhL2IvYyIKKy0gIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCistICAgICAgPSBjLGEvYiwsIFwKKysgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisrICAgICAgPSBjLGEvYixiL2MsIFwKKyAgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAgJiYgeHNpX3NoZWxsPXllcworQEAgLTYxNjMsNiArNjE2OSw4MCBAQCBlc2FjCisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9faG9zdF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKi0qLWN5Z3dpbiogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKKysgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICAjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjE3OSw2ICs2MjU5LDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCisgZXNhYworIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyBjYXNlICRob3N0X29zIGluCisrICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCisrICAgIGZpCisrICAgIDs7CisgICBkYXJ3aW4qKQorICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK0BAIC02MzQ3LDcgKzY0MzIsOCBAQCBtaW5ndyogfCBwdzMyKikKKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgICBlbHNlCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JworKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICAgZmkKKyAgIDs7CitAQCAtNjUwMSw2ICs2NTg3LDIxIEBAIGVzYWMKKyBmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQorICRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQorKworK2ZpbGVfbWFnaWNfZ2xvYj0KKyt3YW50X25vY2FzZWdsb2I9bm8KKytpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgbWluZ3cqIHwgcHczMiopCisrICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisrICAgIGVsc2UKKysgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tcMV1cL1tcMV1cL2c7L2ciYAorKyAgICBmaQorKyAgICA7OworKyAgZXNhYworK2ZpCisrCisgZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCitAQCAtNjUxNiw5ICs2NjE3LDE2MiBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKyAKKyAKKyAKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCisraWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQorKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgorKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X0RMTFRPT0w9JGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X0RMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KKysgICAgRExMVE9PTD0iZmFsc2UiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBETExUT09MPSRhY19jdF9ETExUT09MCisrICBmaQorK2Vsc2UKKysgIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJworKworK2Nhc2UgJGhvc3Rfb3MgaW4KKytjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCisrICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCisrICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KKysgICotLWlkZW50aWZ5LXN0cmljdCopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgorKyAgICA7OworKyAgKikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCisrICAgIDs7CisrICBlc2FjCisrICA7OworKyopCisrICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKKysgIDs7CisrZXNhYworKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY2OyB9Cisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrdGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworKworKworKworKworKworKworKworK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgIGZvciBhY19wcm9nIGluIGFyCisrICBkbworKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02NTM0LDcgKzY3ODgsNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCisrICAgIGFjX2N2X3Byb2dfQVI9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02NTU0LDExICs2ODA4LDE1IEBAICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKyAKKysgICAgdGVzdCAtbiAiJEFSIiAmJiBicmVhaworKyAgZG9uZQorIGZpCistaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCisraWYgdGVzdCAteiAiJEFSIjsgdGhlbgorICAgYWNfY3RfQVI9JEFSCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKKysgIGZvciBhY19wcm9nIGluIGFyCisrZG8KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTY1NzQsNyArNjgzMiw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02NTkzLDYgKzY4NTEsMTAgQEAgZWxzZQorICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKysKKysgIHRlc3QgLW4gIiRhY19jdF9BUiIgJiYgYnJlYWsKKytkb25lCisrCisgICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KKyAgICAgQVI9ImZhbHNlIgorICAgZWxzZQorQEAgLTY2MDQsMTYgKzY4NjYsNzIgQEAgYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisgZXNhYworICAgICBBUj0kYWNfY3RfQVIKKyAgIGZpCistZWxzZQorLSAgQVI9IiRhY19jdl9wcm9nX0FSIgorIGZpCisgCistdGVzdCAteiAiJEFSIiAmJiBBUj1hcgorLXRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CisrOiAke0FSPWFyfQorKzogJHtBUl9GTEFHUz1jcnV9CisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2FyX2F0X2ZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9hcl9hdF9maWxlPW5vCisrICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKytpbnQKKyttYWluICgpCisreworIAorKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKysgIGVjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiY1JworKyAgICAgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisrCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCisrCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQorKwl7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysJaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KKysgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCisgCisrZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJfYXRfZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9hcl9hdF9maWxlIiA+JjY7IH0KKyAKKytpZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCisrICBhcmNoaXZlcl9saXN0X3NwZWM9CisrZWxzZQorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCisrZmkKKyAKKyAKKyAKK0BAIC02OTU1LDggKzcyNzMsOCBAQCBlc2FjCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKyAKKyAjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisgCisgIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCisgb3B0X2NyPQorQEAgLTY5OTIsNiArNzMxMCw3IEBAIGZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKyAgIGVsc2UKKyAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cKCRzeW1jb2RlJHN5bWNvZGUqXClbCSBdWwkgXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgIGZpCisrICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisgCisgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgIHBpcGVfd29ya3M9bm8KK0BAIC03MDMzLDYgKzczNTIsMTggQEAgX0xUX0VPRgorICAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisrLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisrI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKysvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKysgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxpZiBkZWZpbmVkKF9fb3NmX18pCisrLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxzZQorKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CisrI2VuZGlmCisrCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisgI2VuZGlmCitAQCAtNzA0NCw3ICs3Mzc1LDcgQEAgX0xUX0VPRgorIAkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorIAorIC8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KKy1jb25zdCBzdHJ1Y3QgeworK0xUX0RMU1lNX0NPTlNUIHN0cnVjdCB7CisgICBjb25zdCBjaGFyICpuYW1lOworICAgdm9pZCAgICAgICAqYWRkcmVzczsKKyB9CitAQCAtNzA3MCw4ICs3NDAxLDggQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyBfTFRfRU9GCisgCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKyAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKy0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorLQkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKyAJICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCisgCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CitAQCAtNzA4MSw4ICs3NDEyLDggQEAgX0xUX0VPRgorICAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgCSAgICBwaXBlX3dvcmtzPXllcworIAkgIGZpCistCSAgTElCUz0iJGx0X3NhdmVfTElCUyIKKy0JICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKysJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUworKwkgIENGTEFHUz0kbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUworIAllbHNlCisgCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CisgCWZpCitAQCAtNzExOSw2ICs3NDUwLDE2IEBAIGVsc2UKKyAkYXNfZWNobyAib2siID4mNjsgfQorIGZpCisgCisrIyBSZXNwb25zZSBmaWxlIHN1cHBvcnQuCisraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2VsaWYgJE5NIC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgJ1tAXUZJTEUnID4vZGV2L251bGw7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2ZpCisrCisrCisrCisrCisgCisgCisgCitAQCAtNzE0MCw2ICs3NDgxLDQ1IEBAIGZpCisgCisgCisgCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3lzcm9vdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN5c3Jvb3QuLi4gIiA+JjY7IH0KKysKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYnRvb2wtc3lzcm9vdCB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICB3aXRodmFsPSR3aXRoX2xpYnRvb2xfc3lzcm9vdDsKKytlbHNlCisrICB3aXRoX2xpYnRvb2xfc3lzcm9vdD1ubworK2ZpCisrCisrCisrbHRfc3lzcm9vdD0KKytjYXNlICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IGluICMoCisrIHllcykKKysgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKysgICBmaQorKyAgIDs7ICMoCisrIC8qKQorKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX2xpYnRvb2xfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKyAgIDs7ICMoCisrIG5vfCcnKQorKyAgIDs7ICMoCisrICopCisrICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjUKKyskYXNfZWNobyAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNjsgfQorKyAgIGFzX2ZuX2Vycm9yICJUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguIiAiJExJTkVOTyIgNQorKyAgIDs7CisrZXNhYworKworKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtsdF9zeXNyb290Oi1ub30iID4mNQorKyRhc19lY2hvICIke2x0X3N5c3Jvb3Q6LW5vfSIgPiY2OyB9CisrCisrCisrCisrCisrCisgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfbGlidG9vbF9sb2NrK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgIGVuYWJsZXZhbD0kZW5hYmxlX2xpYnRvb2xfbG9jazsKK0BAIC03MzQ2LDYgKzc3MjYsMTIzIEBAIGVzYWMKKyAKKyBuZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKKyAKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiRNQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJHthY190b29sX3ByZWZpeH1tdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3RfTUFOSUZFU1RfVE9PTD0kTUFOSUZFU1RfVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IG10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9IiRhY19jdF9NQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0ibXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9NQU5JRkVTVF9UT09MIiA9IHg7IHRoZW4KKysgICAgTUFOSUZFU1RfVE9PTD0iOiIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIE1BTklGRVNUX1RPT0w9JGFjX2N0X01BTklGRVNUX1RPT0wKKysgIGZpCisrZWxzZQorKyAgTUFOSUZFU1RfVE9PTD0iJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9tYWluZmVzdF90b29sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiY1CisrICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0CisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisrICBmaQorKyAgcm0gLWYgY29uZnRlc3QqCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNjsgfQorK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCisrICBNQU5JRkVTVF9UT09MPToKKytmaQorKworKworKworKworKworIAorICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICByaGFwc29keSogfCBkYXJ3aW4qKQorQEAgLTc5MDksNiArODQwNiw4IEBAIF9MVF9FT0YKKyAgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKKyAgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1CisgICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mNQorKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiY1CisrICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JjUKKyAgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKKyBpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorIF9MVF9FT0YKK0BAIC04MDczLDcgKzg1NzIsOCBAQCBmaQorIExJQlRPT0xfREVQUz0iJGx0bWFpbiIKKyAKKyAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKScKKytMSUJUT09MPSIkTElCVE9PTC8ke2hvc3RfYWxpYXN9LWxpYnRvb2wiCisgCisgCisgCitAQCAtODE2Miw3ICs4NjYyLDcgQEAgYWl4MyopCisgZXNhYworIAorICMgR2xvYmFsIHZhcmlhYmxlczoKKy1vZmlsZT1saWJ0b29sCisrb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCisgY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKyAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKK0BAIC04NDYwLDggKzg5NjAsNiBAQCBmaQorIGx0X3Byb2dfY29tcGlsZXJfcGljPQorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorIAorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCisgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworQEAgLTg2MjcsNiArOTEyNSwxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCisgCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKKyAJOzsKKysgICAgICBuYWdmb3IqKQorKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisrCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKKysJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisrCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKysJOzsKKyAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorQEAgLTg2ODksNyArOTE5Myw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKysgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgICopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKK0BAIC04NzQ2LDEzICs5MjUwLDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICAgOzsKKyBlc2FjCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CistJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CistCistCistCistCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKytsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKKyAKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorQEAgLTg4MTMsNiArOTMyMSwxMSBAQCBmaQorIAorIAorIAorKworKworKworKworKworICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisgIworQEAgLTkxNjMsNyArOTY3Niw4IEBAIF9MVF9FT0YKKyAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubworICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCistICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKyAKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworQEAgLTkyMTEsNyArOTcyNSw3IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkRUdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbCBcCisgCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKyAgICAgICB0aGVuCistCXRtcF9hZGRmbGFnPQorKwl0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKyAJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCisgCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgorICAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorQEAgLTkyNjIsMTIgKzk3NzYsMTIgQEAgX0xUX0VPRgorIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nLXJwYXRoICRsaWJkaXInCistCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisrCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworIAkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CistCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgCSAgZmkKKyAJICA7OworIAllc2FjCitAQCAtOTI4MSw4ICs5Nzk1LDggQEAgX0xUX0VPRgorIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisgCXdsYXJjPQorICAgICAgIGVsc2UKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZmkKKyAgICAgICA7OworIAorQEAgLTkzMDAsOCArOTgxNCw4IEBAIF9MVF9FT0YKKyAKKyBfTFRfRU9GCisgICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC05MzQ3LDggKzk4NjEsOCBAQCBfTFRfRU9GCisgCisgICAgICopCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtOTQ3OCw3ICs5OTkyLDEzIEBAIF9MVF9FT0YKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKKyAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKyAgICAgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTk0OTEsMjIgKzEwMDExLDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKK0BAIC05NTE4LDcgKzEwMDQ1LDEzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAllbHNlCisgCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAJICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0JIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC05NTMxLDIyICsxMDA2NCwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorIAkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorQEAgLTk1OTEsMjAgKzEwMTMxLDYzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCistICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKy0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCistICAgICAgbGliZXh0PWxpYgorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCistICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKy0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorLSAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKy0gICAgICBmaXhfc3JjZmlsZV9wYXRoPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKKy0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgY2wqKQorKwkjIE5hdGl2ZSBNU1ZDCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKysJZmlsZV9saXN0X3NwZWM9J0AnCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGVsc2UKKysJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZml+CisrCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgIGxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysJIyBEb24ndCB1c2UgcmFubGliCisrCW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKKysJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisrCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgKi5leGV8Ki5FWEUpIDs7CisrCSAgICAqKQorKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIDs7CisrCSAgZXNhY34KKysJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKysJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworKwkgIGZpJworKwk7OworKyAgICAgICopCisrCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorKwlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCTs7CisrICAgICAgZXNhYworICAgICAgIDs7CisgCisgICAgIGRhcndpbiogfCByaGFwc29keSopCitAQCAtOTY2NSw3ICsxMDI0OCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworQEAgLTk2NzMsNyArMTAyNTYsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDkqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZmkKK0BAIC05Njg5LDcgKzEwMjcyLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXgxMCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgICBmaQorQEAgLTk3MTMsMTAgKzEwMjk2LDEwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJaWE2NCopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAkqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWVzYWMKKyAgICAgICBlbHNlCitAQCAtOTc5NSwyMyArMTAzNzgsMzYgQEAgZmkKKyAKKyAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKyAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorLSAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKy0gICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKysJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisrCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKysJICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy1pbnQgZm9vKHZvaWQpIHt9CisraW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKy0gIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKy0KKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllcworK2Vsc2UKKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0gICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9CisrCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJZmkKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworQEAgLTk4OTYsNyArMTA0OTIsNyBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgZWxzZQorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKK0BAIC05OTE1LDkgKzEwNTExLDkgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCXdsYXJjPScke3dsfScKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKy0JICAkQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworKwkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgIGVsc2UKKyAJY2FzZSBgJENDIC1WIDI+JjFgIGluCisgCSoiQ29tcGlsZXJzIDUuMCIqKQorQEAgLTEwNDkzLDggKzExMDg5LDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgbmVlZF92ZXJzaW9uPW5vCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAKKy0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKysgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKysgIHllcywqKQorKyAgICAjIGdjYworICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorQEAgLTEwNTI3LDEzICsxMTEyNCw3MSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKysgICAgOzsKKysKKysgICosY2wqKQorKyAgICAjIE5hdGl2ZSBNU1ZDCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisrCisrICAgIGNhc2UgJGJ1aWxkX29zIGluCisrICAgIG1pbmd3KikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisrICAgICAgbHRfc2F2ZV9pZnM9JElGUworKyAgICAgIElGUz0nOycKKysgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisrICAgICAgZG8KKysgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisrICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKysgICAgICBkb25lCisrICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorKyAgICAgIDs7CisrICAgIGN5Z3dpbiopCisrICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKysgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKysgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICBmaQorKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKysgICAgICA7OworKyAgICBlc2FjCisrCisrICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKysgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisrICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisrICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisrICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisrICAgICAgICRSTSBcJGRscGF0aCcKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgIDs7CisgCisgICAqKQorKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgIDs7CisgICBlc2FjCistICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgIDs7CitAQCAtMTA2MjUsNyArMTEyODAsNyBAQCBoYWlrdSopCisgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9iZW9zL3N5c3RlbS9saWInCisrICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIDs7CisgCitAQCAtMTE0NjUsMTAgKzEyMTIwLDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTE1NzEsMTAgKzEyMjI2LDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTUxNjMsNyArMTU4MTgsNyBAQCBTSEFSRURfTERGTEFHUz0KKyBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSAieWVzIjsgdGhlbgorICAgeD1gc2VkIC1uIC1lICdzL15bIAldKlBJQ0ZMQUdbIAldKj1bIAldKi8vcCcgPCAuLi9saWJpYmVydHkvTWFrZWZpbGUgfCBzZWQgLW4gJyRwJ2AKKyAgIGlmIHRlc3QgLW4gIiR4IjsgdGhlbgorLSAgICBTSEFSRURfTElCQUREPSItTGBwd2RgLy4uL2xpYmliZXJ0eS9waWMgLWxpYmVydHkiCisrICAgIFNIQVJFRF9MSUJBREQ9ImBwd2RgLy4uL2xpYmliZXJ0eS9waWMvbGliaWJlcnR5LmEiCisgICBmaQorIAorICMgTW9yZSBoYWNrcyB0byBidWlsZCBETExzIG9uIFdpbmRvd3MuCitAQCAtMTY3ODAsMTMgKzE3NDM1LDIwIEBAIGV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b190b29sX2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfZmxhZz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2ZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyt3YW50X25vY2FzZWdsb2I9J2AkRUNITyAiJHdhbnRfbm9jYXNlZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrRExMVE9PTD0nYCRFQ0hPICIkRExMVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J2AkRUNITyAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSdgJEVDSE8gIiRhcmNoaXZlcl9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFNUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTY4MDEsMTQgKzE3NDYzLDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK25tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfc3lzcm9vdD0nYCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE1BR0lDX0NNRD0nYCRFQ0hPICIkTUFHSUNfQ01EIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbG9ja3M9J2AkRUNITyAiJG5lZWRfbG9ja3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK01BTklGRVNUX1RPT0w9J2AkRUNITyAiJE1BTklGRVNUX1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIERTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIExJUE89J2AkRUNITyAiJExJUE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE2ODQxLDEyICsxNzUwNiwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcQorIGhhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1maXhfc3JjZmlsZV9wYXRoPSdgJEVDSE8gIiRmaXhfc3JjZmlsZV9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBwcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcG9zdGxpbmtfY21kcz0nYCRFQ0hPICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNjkwMSw4ICsxNzU2NiwxMyBAQCByZWxvYWRfZmxhZyBcCisgT0JKRFVNUCBcCisgZGVwbGlic19jaGVja19tZXRob2QgXAorIGZpbGVfbWFnaWNfY21kIFwKKytmaWxlX21hZ2ljX2dsb2IgXAorK3dhbnRfbm9jYXNlZ2xvYiBcCisrRExMVE9PTCBcCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgXAorIEFSIFwKKyBBUl9GTEFHUyBcCisrYXJjaGl2ZXJfbGlzdF9zcGVjIFwKKyBTVFJJUCBcCisgUkFOTElCIFwKKyBDQyBcCitAQCAtMTY5MTIsMTIgKzE3NTgyLDE0IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCisrbm1fZmlsZV9saXN0X3NwZWMgXAorIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKKy1sdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCisrbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAorIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIFwKKyBuZWVkX2xvY2tzIFwKKytNQU5JRkVTVF9UT09MIFwKKyBEU1lNVVRJTCBcCisgTk1FRElUIFwKKyBMSVBPIFwKK0BAIC0xNjkzMyw3ICsxNzYwNSw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKKyBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKKy1maXhfc3JjZmlsZV9wYXRoIFwKKyBleGNsdWRlX2V4cHN5bXMgXAorIGluY2x1ZGVfZXhwc3ltcyBcCisgZmlsZV9saXN0X3NwZWMgXAorQEAgLTE2OTY5LDYgKzE3NjQwLDcgQEAgbW9kdWxlX2NtZHMgXAorIG1vZHVsZV9leHBzeW1fY21kcyBcCisgZXhwb3J0X3N5bWJvbHNfY21kcyBcCisgcHJlbGlua19jbWRzIFwKKytwb3N0bGlua19jbWRzIFwKKyBwb3N0aW5zdGFsbF9jbWRzIFwKKyBwb3N0dW5pbnN0YWxsX2NtZHMgXAorIGZpbmlzaF9jbWRzIFwKK0BAIC0xNzc0OCw3ICsxODQyMCw4IEBAICRhc19lY2hvIFgiJGZpbGUiIHwKKyAjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKyAjCisgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKy0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyMgICAgICAgICAgICAgICAgIEluYy4KKyAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorICMKKyAjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCitAQCAtMTc4NTEsMTkgKzE4NTI0LDQyIEBAIFNQMk5MPSRsdF9sdF9TUDJOTAorICMgdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlcy4KKyBOTDJTUD0kbHRfbHRfTkwyU1AKKyAKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlIG5hbWVzIHRvIFwkaG9zdCBmb3JtYXQuCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorKworKyMgY29udmVydCBcJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorKworICMgQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXIuCisgT0JKRFVNUD0kbHRfT0JKRFVNUAorIAorICMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgCistIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIi4KKysjIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisgZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCisgCisrIyBIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKytmaWxlX21hZ2ljX2dsb2I9JGx0X2ZpbGVfbWFnaWNfZ2xvYgorKworKyMgRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK3dhbnRfbm9jYXNlZ2xvYj0kbHRfd2FudF9ub2Nhc2VnbG9iCisrCisrIyBETEwgY3JlYXRpb24gcHJvZ3JhbS4KKytETExUT09MPSRsdF9ETExUT09MCisrCisrIyBDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzLgorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorKworICMgVGhlIGFyY2hpdmVyLgorIEFSPSRsdF9BUgorKworKyMgRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmUuCisgQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisgCisrIyBIb3cgdG8gZmVlZCBhIGZpbGUgbGlzdGluZyB0byB0aGUgYXJjaGl2ZXIuCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9hcmNoaXZlcl9saXN0X3NwZWMKKysKKyAjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtLgorIFNUUklQPSRsdF9TVFJJUAorIAorQEAgLTE3ODkzLDYgKzE4NTg5LDEyIEBAIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisgIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZC4KKyBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKKyAKKysjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgXCROTS4KKytubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKKysKKysjIFRoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyxhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLgorK2x0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKKysKKyAjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KKyBvYmpkaXI9JG9iamRpcgorIAorQEAgLTE3OTAyLDYgKzE4NjA0LDkgQEAgTUFHSUNfQ01EPSRNQUdJQ19DTUQKKyAjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworIG5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKKyAKKysjIE1hbmlmZXN0IHRvb2wuCisrTUFOSUZFU1RfVE9PTD0kbHRfTUFOSUZFU1RfVE9PTAorKworICMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KKyBEU1lNVVRJTD0kbHRfRFNZTVVUSUwKKyAKK0BAIC0xODAxNiwxMiArMTg3MjEsMTIgQEAgd2l0aF9nY2M9JEdDQworICMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KKyBub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCisgCistIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCistCisgIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCisgcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCisgCisrIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCisrCisgIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorIGxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCisgCitAQCAtMTgxMDgsOSArMTg4MTMsNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCisgIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCisgbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicworIAorLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KKy1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCistCisgIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKyAKK0BAIC0xODEyNiw2ICsxODgyOCw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCisgIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KKyBwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcworIAorKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KKytwb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzCisrCisgIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCisgZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjCisgCitAQCAtMTgxNTgsMjEwICsxODg2MywxNjkgQEAgbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisgICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKy0gIHNlZCAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS9xJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBjYXNlICR4c2lfc2hlbGwgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorLSMgY2FsbDoKKy0jICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorLSMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorLSMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorLSMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLSMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQorLSMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKy0jIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KKy1mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorLSAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifQorLX0KKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9JHsxJSU9Kn0KKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz0kezEjKj19CistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworLSAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sbworLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKQorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKy0gIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKKy0gIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCistICBlbHNlCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKy0gIGZpCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkYmFzZW5hbWUiYAorLX0KKy0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgY2FzZSAkezJ9IGluCistICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CistICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKy0gIGVzYWMKKy19CistCistIyBzZWQgc2NyaXB0czoKKy1teV9zZWRfbG9uZ19vcHQ9JzFzL15cKC1bXj1dKlwpPS4qL1wxLztxJworLW15X3NlZF9sb25nX2FyZz0nMXMvXi1bXj1dKj0vLycKKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAorLSAgZnVuY19vcHRfc3BsaXRfYXJnPWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAorLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLlteLl0qJC8ubG8vJ2AKKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJEAiYAorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKKy19CistCistX0xUX0VPRgorLWVzYWMKKy0KKy1jYXNlICRsdF9zaGVsbF9hcHBlbmQgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDErPVwkMiIKKy19CistX0xUX0VPRgorLSAgICA7OworLSAgKikKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDE9XCQkMVwkMiIKKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgZXNhYworLQorLQorLSAgc2VkIC1uICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLywkcCcgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorKyAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKysKKysgIGlmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWUgL2NcCisrZnVuY19kaXJuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfYmFzZW5hbWUgL2NcCisrZnVuY19iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIC9jXAorK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3RyaXBuYW1lICgpJC8sL159ICMgZnVuY19zdHJpcG5hbWUgL2NcCisrZnVuY19zdHJpcG5hbWUgKClcCisre1wKKytcICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmVcCisrXCAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuXAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M31cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3N0cmlwbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfbG9uZ19vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IC9jXAorK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfVwKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfbG9uZ19vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X3Nob3J0X29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IC9jXAorK2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fVwKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sbzJvICgpJC8sL159ICMgZnVuY19sbzJvIC9jXAorK2Z1bmNfbG8ybyAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7O1wKKytcICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sbzJvIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY194Zm9ybSAoKSQvLC9efSAjIGZ1bmNfeGZvcm0gL2NcCisrZnVuY194Zm9ybSAoKVwKKyt7XAorKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3hmb3JtIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcml0aCAoKSQvLC9efSAjIGZ1bmNfYXJpdGggL2NcCisrZnVuY19hcml0aCAoKVwKKyt7XAorKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSlcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXJpdGggaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xlbiAoKSQvLC9efSAjIGZ1bmNfbGVuIC9jXAorK2Z1bmNfbGVuICgpXAorK3tcCisrICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sZW4gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKytmaQorKworK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kIC9jXAorK2Z1bmNfYXBwZW5kICgpXAorK3tcCisrICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmRfcXVvdGVkICgpJC8sL159ICMgZnVuY19hcHBlbmRfcXVvdGVkIC9jXAorK2Z1bmNfYXBwZW5kX3F1b3RlZCAoKVwKKyt7XAorK1wgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSJcCisrXCAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmRfcXVvdGVkIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZWxzZQorKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2ZpCisrCisraWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiYyO30KKytmaQorKworKworKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgIGNobW9kICt4ICIkb2ZpbGUiCisgCitkaWZmIC0tZ2l0IGEvYmZkL2NvbmZpZ3VyZS5hYyBiL2JmZC9jb25maWd1cmUuYWMKK2luZGV4IGJhOThlMzkuLjg4MDYzY2YgMTAwNjQ0CistLS0gYS9iZmQvY29uZmlndXJlLmFjCisrKysgYi9iZmQvY29uZmlndXJlLmFjCitAQCAtNTY0LDcgKzU2NCw3IEBAIGNoYW5nZXF1b3RlKCwpZG5sCisgICB4PWBzZWQgLW4gLWUgJ3MvXlsgCV0qUElDRkxBR1sgCV0qPVsgCV0qLy9wJyA8IC4uL2xpYmliZXJ0eS9NYWtlZmlsZSB8IHNlZCAtbiAnJHAnYAorIGNoYW5nZXF1b3RlKFssXSlkbmwKKyAgIGlmIHRlc3QgLW4gIiR4IjsgdGhlbgorLSAgICBTSEFSRURfTElCQUREPSItTGBwd2RgLy4uL2xpYmliZXJ0eS9waWMgLWxpYmVydHkiCisrICAgIFNIQVJFRF9MSUJBREQ9ImBwd2RgLy4uL2xpYmliZXJ0eS9waWMvbGliaWJlcnR5LmEiCisgICBmaQorIAorICMgTW9yZSBoYWNrcyB0byBidWlsZCBETExzIG9uIFdpbmRvd3MuCitkaWZmIC0tZ2l0IGEvYmludXRpbHMvY29uZmlndXJlIGIvYmludXRpbHMvY29uZmlndXJlCitpbmRleCBiZTRiODFjLi42NjA2YTVmIDEwMDc1NQorLS0tIGEvYmludXRpbHMvY29uZmlndXJlCisrKysgYi9iaW51dGlscy9jb25maWd1cmUKK0BAIC02NTUsOCArNjU1LDExIEBAIE9UT09MCisgTElQTworIE5NRURJVAorIERTWU1VVElMCisrTUFOSUZFU1RfVE9PTAorIFJBTkxJQgorK2FjX2N0X0FSCisgQVIKKytETExUT09MCisgT0JKRFVNUAorIExOX1MKKyBOTQorQEAgLTc2Nyw2ICs3NzAsNyBAQCBlbmFibGVfc3RhdGljCisgd2l0aF9waWMKKyBlbmFibGVfZmFzdF9pbnN0YWxsCisgd2l0aF9nbnVfbGQKKyt3aXRoX2xpYnRvb2xfc3lzcm9vdAorIGVuYWJsZV9saWJ0b29sX2xvY2sKKyBlbmFibGVfcGx1Z2lucworIGVuYWJsZV9sYXJnZWZpbGUKK0BAIC0xNDM5LDYgKzE0NDMsOCBAQCBPcHRpb25hbCBQYWNrYWdlczoKKyAgIC0td2l0aC1waWMgICAgICAgICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KKyAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKysgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisrICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuCisgICAtLXdpdGgtemxpYiAgICAgICAgICAgICBpbmNsdWRlIHpsaWIgc3VwcG9ydCAoYXV0by95ZXMvbm8pIGRlZmF1bHQ9YXV0bworICAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIGRlZmF1bHQ9bm8KKyAgIC0td2l0aC1saWJpY29udi1wcmVmaXhbPURJUl0gIHNlYXJjaCBmb3IgbGliaWNvbnYgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKK0BAIC01MTUzLDggKzUxNTksOCBAQCBlc2FjCisgCisgCisgCistbWFjcm9fdmVyc2lvbj0nMi4yLjdhJworLW1hY3JvX3JldmlzaW9uPScxLjMxMzQnCisrbWFjcm9fdmVyc2lvbj0nMi40JworK21hY3JvX3JldmlzaW9uPScxLjMyOTMnCisgCisgCisgCitAQCAtNTE5NCw3ICs1MjAwLDcgQEAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncy4uLiAiID4mNjsgfQorICMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgorLWlmIHRlc3QgIlhgcHJpbnQgLXIgLS0gLW4gMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisraWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisgICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgIEVDSE89J3ByaW50IC1yIC0tJworIGVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCitAQCAtNTg4MCw4ICs1ODg2LDggQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsKKyAjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworIHhzaV9zaGVsbD1ubworICggX2x0X2R1bW15PSJhL2IvYyIKKy0gIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCistICAgICAgPSBjLGEvYiwsIFwKKysgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisrICAgICAgPSBjLGEvYixiL2MsIFwKKyAgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAgJiYgeHNpX3NoZWxsPXllcworQEAgLTU5MzAsNiArNTkzNiw4MCBAQCBlc2FjCisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9faG9zdF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKi0qLWN5Z3dpbiogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKKysgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICAjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNTk0Niw2ICs2MDI2LDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCisgZXNhYworIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyBjYXNlICRob3N0X29zIGluCisrICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCisrICAgIGZpCisrICAgIDs7CisgICBkYXJ3aW4qKQorICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK0BAIC02MTE0LDcgKzYxOTksOCBAQCBtaW5ndyogfCBwdzMyKikKKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgICBlbHNlCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JworKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICAgZmkKKyAgIDs7CitAQCAtNjI2OCw2ICs2MzU0LDIxIEBAIGVzYWMKKyBmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQorICRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQorKworK2ZpbGVfbWFnaWNfZ2xvYj0KKyt3YW50X25vY2FzZWdsb2I9bm8KKytpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgbWluZ3cqIHwgcHczMiopCisrICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisrICAgIGVsc2UKKysgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tcMV1cL1tcMV1cL2c7L2ciYAorKyAgICBmaQorKyAgICA7OworKyAgZXNhYworK2ZpCisrCisgZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCitAQCAtNjI4Myw5ICs2Mzg0LDE2MiBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKyAKKyAKKyAKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCisraWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQorKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgorKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X0RMTFRPT0w9JGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X0RMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KKysgICAgRExMVE9PTD0iZmFsc2UiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBETExUT09MPSRhY19jdF9ETExUT09MCisrICBmaQorK2Vsc2UKKysgIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJworKworK2Nhc2UgJGhvc3Rfb3MgaW4KKytjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCisrICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCisrICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KKysgICotLWlkZW50aWZ5LXN0cmljdCopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgorKyAgICA7OworKyAgKikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCisrICAgIDs7CisrICBlc2FjCisrICA7OworKyopCisrICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKKysgIDs7CisrZXNhYworKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY2OyB9Cisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrdGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworKworKworKworKworKworKworKworK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgIGZvciBhY19wcm9nIGluIGFyCisrICBkbworKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02MzAxLDcgKzY1NTUsNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCisrICAgIGFjX2N2X3Byb2dfQVI9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02MzIxLDExICs2NTc1LDE1IEBAICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKyAKKysgICAgdGVzdCAtbiAiJEFSIiAmJiBicmVhaworKyAgZG9uZQorIGZpCistaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCisraWYgdGVzdCAteiAiJEFSIjsgdGhlbgorICAgYWNfY3RfQVI9JEFSCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKKysgIGZvciBhY19wcm9nIGluIGFyCisrZG8KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTYzNDEsNyArNjU5OSw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02MzYwLDYgKzY2MTgsMTAgQEAgZWxzZQorICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKysKKysgIHRlc3QgLW4gIiRhY19jdF9BUiIgJiYgYnJlYWsKKytkb25lCisrCisgICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KKyAgICAgQVI9ImZhbHNlIgorICAgZWxzZQorQEAgLTYzNzEsMTYgKzY2MzMsNzIgQEAgYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisgZXNhYworICAgICBBUj0kYWNfY3RfQVIKKyAgIGZpCistZWxzZQorLSAgQVI9IiRhY19jdl9wcm9nX0FSIgorIGZpCisgCistdGVzdCAteiAiJEFSIiAmJiBBUj1hcgorLXRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CisrOiAke0FSPWFyfQorKzogJHtBUl9GTEFHUz1jcnV9CisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2FyX2F0X2ZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9hcl9hdF9maWxlPW5vCisrICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKytpbnQKKyttYWluICgpCisreworIAorKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKysgIGVjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiY1JworKyAgICAgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisrCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCisrCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQorKwl7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysJaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KKysgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCisgCisrZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJfYXRfZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9hcl9hdF9maWxlIiA+JjY7IH0KKyAKKytpZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCisrICBhcmNoaXZlcl9saXN0X3NwZWM9CisrZWxzZQorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCisrZmkKKyAKKyAKKyAKK0BAIC02NzIyLDggKzcwNDAsOCBAQCBlc2FjCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKyAKKyAjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisgCisgIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCisgb3B0X2NyPQorQEAgLTY3NTksNiArNzA3Nyw3IEBAIGZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKyAgIGVsc2UKKyAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cKCRzeW1jb2RlJHN5bWNvZGUqXClbCSBdWwkgXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgIGZpCisrICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisgCisgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgIHBpcGVfd29ya3M9bm8KK0BAIC02ODAwLDYgKzcxMTksMTggQEAgX0xUX0VPRgorICAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisrLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisrI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKysvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKysgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxpZiBkZWZpbmVkKF9fb3NmX18pCisrLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxzZQorKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CisrI2VuZGlmCisrCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisgI2VuZGlmCitAQCAtNjgxMSw3ICs3MTQyLDcgQEAgX0xUX0VPRgorIAkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorIAorIC8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KKy1jb25zdCBzdHJ1Y3QgeworK0xUX0RMU1lNX0NPTlNUIHN0cnVjdCB7CisgICBjb25zdCBjaGFyICpuYW1lOworICAgdm9pZCAgICAgICAqYWRkcmVzczsKKyB9CitAQCAtNjgzNyw4ICs3MTY4LDggQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyBfTFRfRU9GCisgCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKyAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKy0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorLQkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKyAJICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCisgCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CitAQCAtNjg0OCw4ICs3MTc5LDggQEAgX0xUX0VPRgorICAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgCSAgICBwaXBlX3dvcmtzPXllcworIAkgIGZpCistCSAgTElCUz0iJGx0X3NhdmVfTElCUyIKKy0JICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKysJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUworKwkgIENGTEFHUz0kbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUworIAllbHNlCisgCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CisgCWZpCitAQCAtNjg4Niw2ICs3MjE3LDIwIEBAIGVsc2UKKyAkYXNfZWNobyAib2siID4mNjsgfQorIGZpCisgCisrIyBSZXNwb25zZSBmaWxlIHN1cHBvcnQuCisraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2VsaWYgJE5NIC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgJ1tAXUZJTEUnID4vZGV2L251bGw7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2ZpCisrCisrCisrCisrCisrCisrCisrCisrCisgCisgCisgCitAQCAtNjkwNSw2ICs3MjUwLDQxIEBAIGZpCisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3lzcm9vdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN5c3Jvb3QuLi4gIiA+JjY7IH0KKysKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYnRvb2wtc3lzcm9vdCB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICB3aXRodmFsPSR3aXRoX2xpYnRvb2xfc3lzcm9vdDsKKytlbHNlCisrICB3aXRoX2xpYnRvb2xfc3lzcm9vdD1ubworK2ZpCisrCisrCisrbHRfc3lzcm9vdD0KKytjYXNlICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IGluICMoCisrIHllcykKKysgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKysgICBmaQorKyAgIDs7ICMoCisrIC8qKQorKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX2xpYnRvb2xfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKyAgIDs7ICMoCisrIG5vfCcnKQorKyAgIDs7ICMoCisrICopCisrICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjUKKyskYXNfZWNobyAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNjsgfQorKyAgIGFzX2ZuX2Vycm9yICJUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguIiAiJExJTkVOTyIgNQorKyAgIDs7CisrZXNhYworKworKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtsdF9zeXNyb290Oi1ub30iID4mNQorKyRhc19lY2hvICIke2x0X3N5c3Jvb3Q6LW5vfSIgPiY2OyB9CisrCisrCisrCisgCisgCisgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCitAQCAtNzExMyw2ICs3NDkzLDEyMyBAQCBlc2FjCisgCisgbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCisgCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1tdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIkTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9bXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJE1BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N0X01BTklGRVNUX1RPT0w9JE1BTklGRVNUX1RPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9Im10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9NQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPSB4OyB0aGVuCisrICAgIE1BTklGRVNUX1RPT0w9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBNQU5JRkVTVF9UT09MPSRhY19jdF9NQU5JRkVTVF9UT09MCisrICBmaQorK2Vsc2UKKysgIE1BTklGRVNUX1RPT0w9IiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD1ubworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mNQorKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKysgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcworKyAgZmkKKysgIHJtIC1mIGNvbmZ0ZXN0KgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgorKyAgTUFOSUZFU1RfVE9PTD06CisrZmkKKysKKysKKysKKysKKysKKyAKKyAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKK0BAIC03Njc2LDYgKzgxNzMsOCBAQCBfTFRfRU9GCisgICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1CisgICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mNQorICAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKKysgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mNQorKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiY1CisgICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCisgaW50IG1haW4oKSB7IHJldHVybiAwO30KKyBfTFRfRU9GCitAQCAtNzg3MSw3ICs4MzcwLDggQEAgZmkKKyBMSUJUT09MX0RFUFM9IiRsdG1haW4iCisgCisgIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KKy1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKytMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpciknCisrTElCVE9PTD0iJExJQlRPT0wvJHtob3N0X2FsaWFzfS1saWJ0b29sIgorIAorIAorIAorQEAgLTc5NjAsNyArODQ2MCw3IEBAIGFpeDMqKQorIGVzYWMKKyAKKyAjIEdsb2JhbCB2YXJpYWJsZXM6Cistb2ZpbGU9bGlidG9vbAorK29maWxlPSR7aG9zdF9hbGlhc30tbGlidG9vbAorIGNhbl9idWlsZF9zaGFyZWQ9eWVzCisgCisgIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCitAQCAtODI1OCw4ICs4NzU4LDYgQEAgZmkKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KKyAKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKy0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAorICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKK0BAIC04NDI1LDYgKzg5MjMsMTIgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAJbHRfcHJvZ19jb21waWxlcl9waWM9Jy0tc2hhcmVkJworIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLS1zdGF0aWMnCisgCTs7CisrICAgICAgbmFnZm9yKikKKysJIyBOQUcgRm9ydHJhbiBjb21waWxlcgorKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsLVdsLCwnCisrCWx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJworKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisrCTs7CisgICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKyAJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKK0BAIC04NDg3LDcgKzg5OTEsNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCisrICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICAqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7CitAQCAtODU0NCwxMyArOTA0OCwxNyBAQCBjYXNlICRob3N0X29zIGluCisgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgIDs7CisgZXNhYworLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNQorLSRhc19lY2hvICIkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorLQorLQorLQorLQorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljPSRsdF9wcm9nX2NvbXBpbGVyX3BpYworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CisrbHRfcHJvZ19jb21waWxlcl9waWM9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljCisgCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KK0BAIC04NjExLDYgKzkxMTksMTEgQEAgZmkKKyAKKyAKKyAKKysKKysKKysKKysKKysKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorICMKK0BAIC04OTYxLDcgKzk0NzQsOCBAQCBfTFRfRU9GCisgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhjbHVkZV9leHBzeW1zPSdbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnCisgCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKK0BAIC05MDA5LDcgKzk1MjMsNyBAQCBfTFRfRU9GCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorIAkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICAgdGhlbgorLQl0bXBfYWRkZmxhZz0KKysJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisgCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJworIAljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKK0BAIC05MDYwLDEyICs5NTc0LDEyIEBAIF9MVF9FT0YKKyAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJworLQkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworKwkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKyAJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorLQkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKysJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworIAkgIGZpCisgCSAgOzsKKyAJZXNhYworQEAgLTkwNzksOCArOTU5Myw4IEBAIF9MVF9FT0YKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworIAl3bGFyYz0KKyAgICAgICBlbHNlCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGZpCisgICAgICAgOzsKKyAKK0BAIC05MDk4LDggKzk2MTIsOCBAQCBfTFRfRU9GCisgCisgX0xUX0VPRgorICAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtOTE0NSw4ICs5NjU5LDggQEAgX0xUX0VPRgorIAorICAgICAqKQorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTkyNzYsNyArOTc5MCwxMyBAQCBfTFRfRU9GCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCisgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysgICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC05Mjg5LDIyICs5ODA5LDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKK0BAIC05MzE2LDcgKzk4NDMsMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCWVsc2UKKyAJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorIAkgIyBlbXB0eSBleGVjdXRhYmxlLgorLQkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTkzMjksMjIgKzk4NjIsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAJIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKK0BAIC05Mzg5LDIwICs5OTI5LDYzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCistICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKy0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCistICAgICAgbGliZXh0PWxpYgorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCistICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKy0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorLSAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKy0gICAgICBmaXhfc3JjZmlsZV9wYXRoPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKKy0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgY2wqKQorKwkjIE5hdGl2ZSBNU1ZDCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKysJZmlsZV9saXN0X3NwZWM9J0AnCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGVsc2UKKysJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZml+CisrCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgIGxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysJIyBEb24ndCB1c2UgcmFubGliCisrCW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKKysJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisrCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgKi5leGV8Ki5FWEUpIDs7CisrCSAgICAqKQorKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIDs7CisrCSAgZXNhY34KKysJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKysJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworKwkgIGZpJworKwk7OworKyAgICAgICopCisrCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorKwlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCTs7CisrICAgICAgZXNhYworICAgICAgIDs7CisgCisgICAgIGRhcndpbiogfCByaGFwc29keSopCitAQCAtOTQ2Myw3ICsxMDA0Niw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworQEAgLTk0NzEsNyArMTAwNTQsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDkqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZmkKK0BAIC05NDg3LDcgKzEwMDcwLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXgxMCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgICBmaQorQEAgLTk1MTEsMTAgKzEwMDk0LDEwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJaWE2NCopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAkqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWVzYWMKKyAgICAgICBlbHNlCitAQCAtOTU5MywyMyArMTAxNzYsMzYgQEAgZmkKKyAKKyAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKyAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorLSAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKy0gICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKysJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisrCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKysJICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy1pbnQgZm9vKHZvaWQpIHt9CisraW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKy0gIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKy0KKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllcworK2Vsc2UKKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0gICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9CisrCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJZmkKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworQEAgLTk2OTQsNyArMTAyOTAsNyBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgZWxzZQorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKK0BAIC05NzEzLDkgKzEwMzA5LDkgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCXdsYXJjPScke3dsfScKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKy0JICAkQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworKwkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgIGVsc2UKKyAJY2FzZSBgJENDIC1WIDI+JjFgIGluCisgCSoiQ29tcGlsZXJzIDUuMCIqKQorQEAgLTEwMjkxLDggKzEwODg3LDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgbmVlZF92ZXJzaW9uPW5vCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAKKy0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKysgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKysgIHllcywqKQorKyAgICAjIGdjYworICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorQEAgLTEwMzI1LDEzICsxMDkyMiw3MSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKysgICAgOzsKKysKKysgICosY2wqKQorKyAgICAjIE5hdGl2ZSBNU1ZDCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisrCisrICAgIGNhc2UgJGJ1aWxkX29zIGluCisrICAgIG1pbmd3KikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisrICAgICAgbHRfc2F2ZV9pZnM9JElGUworKyAgICAgIElGUz0nOycKKysgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisrICAgICAgZG8KKysgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisrICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKysgICAgICBkb25lCisrICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorKyAgICAgIDs7CisrICAgIGN5Z3dpbiopCisrICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKysgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKysgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICBmaQorKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKysgICAgICA7OworKyAgICBlc2FjCisrCisrICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKysgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisrICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisrICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisrICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisrICAgICAgICRSTSBcJGRscGF0aCcKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgIDs7CisgCisgICAqKQorKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgIDs7CisgICBlc2FjCistICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgIDs7CitAQCAtMTA0MjMsNyArMTEwNzgsNyBAQCBoYWlrdSopCisgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9iZW9zL3N5c3RlbS9saWInCisrICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIDs7CisgCitAQCAtMTEyNjMsMTAgKzExOTE4LDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTEzNjksMTAgKzEyMDI0LDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTUzNzMsMTMgKzE2MDI4LDIwIEBAIGV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b190b29sX2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfZmxhZz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2ZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyt3YW50X25vY2FzZWdsb2I9J2AkRUNITyAiJHdhbnRfbm9jYXNlZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrRExMVE9PTD0nYCRFQ0hPICIkRExMVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J2AkRUNITyAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSdgJEVDSE8gIiRhcmNoaXZlcl9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFNUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTUzOTQsMTQgKzE2MDU2LDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK25tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfc3lzcm9vdD0nYCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE1BR0lDX0NNRD0nYCRFQ0hPICIkTUFHSUNfQ01EIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbG9ja3M9J2AkRUNITyAiJG5lZWRfbG9ja3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK01BTklGRVNUX1RPT0w9J2AkRUNITyAiJE1BTklGRVNUX1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIERTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIExJUE89J2AkRUNITyAiJExJUE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE1NDM0LDEyICsxNjA5OSwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcQorIGhhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1maXhfc3JjZmlsZV9wYXRoPSdgJEVDSE8gIiRmaXhfc3JjZmlsZV9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBwcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcG9zdGxpbmtfY21kcz0nYCRFQ0hPICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNTQ5NCw4ICsxNjE1OSwxMyBAQCByZWxvYWRfZmxhZyBcCisgT0JKRFVNUCBcCisgZGVwbGlic19jaGVja19tZXRob2QgXAorIGZpbGVfbWFnaWNfY21kIFwKKytmaWxlX21hZ2ljX2dsb2IgXAorK3dhbnRfbm9jYXNlZ2xvYiBcCisrRExMVE9PTCBcCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgXAorIEFSIFwKKyBBUl9GTEFHUyBcCisrYXJjaGl2ZXJfbGlzdF9zcGVjIFwKKyBTVFJJUCBcCisgUkFOTElCIFwKKyBDQyBcCitAQCAtMTU1MDUsMTIgKzE2MTc1LDE0IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCisrbm1fZmlsZV9saXN0X3NwZWMgXAorIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKKy1sdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCisrbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAorIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIFwKKyBuZWVkX2xvY2tzIFwKKytNQU5JRkVTVF9UT09MIFwKKyBEU1lNVVRJTCBcCisgTk1FRElUIFwKKyBMSVBPIFwKK0BAIC0xNTUyNiw3ICsxNjE5OCw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKKyBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKKy1maXhfc3JjZmlsZV9wYXRoIFwKKyBleGNsdWRlX2V4cHN5bXMgXAorIGluY2x1ZGVfZXhwc3ltcyBcCisgZmlsZV9saXN0X3NwZWMgXAorQEAgLTE1NTYyLDYgKzE2MjMzLDcgQEAgbW9kdWxlX2NtZHMgXAorIG1vZHVsZV9leHBzeW1fY21kcyBcCisgZXhwb3J0X3N5bWJvbHNfY21kcyBcCisgcHJlbGlua19jbWRzIFwKKytwb3N0bGlua19jbWRzIFwKKyBwb3N0aW5zdGFsbF9jbWRzIFwKKyBwb3N0dW5pbnN0YWxsX2NtZHMgXAorIGZpbmlzaF9jbWRzIFwKK0BAIC0xNjMxOSw3ICsxNjk5MSw4IEBAICRhc19lY2hvIFgiJGZpbGUiIHwKKyAjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKyAjCisgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKy0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyMgICAgICAgICAgICAgICAgIEluYy4KKyAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorICMKKyAjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCitAQCAtMTY0MjIsMTkgKzE3MDk1LDQyIEBAIFNQMk5MPSRsdF9sdF9TUDJOTAorICMgdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlcy4KKyBOTDJTUD0kbHRfbHRfTkwyU1AKKyAKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlIG5hbWVzIHRvIFwkaG9zdCBmb3JtYXQuCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorKworKyMgY29udmVydCBcJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorKworICMgQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXIuCisgT0JKRFVNUD0kbHRfT0JKRFVNUAorIAorICMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgCistIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIi4KKysjIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisgZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCisgCisrIyBIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKytmaWxlX21hZ2ljX2dsb2I9JGx0X2ZpbGVfbWFnaWNfZ2xvYgorKworKyMgRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK3dhbnRfbm9jYXNlZ2xvYj0kbHRfd2FudF9ub2Nhc2VnbG9iCisrCisrIyBETEwgY3JlYXRpb24gcHJvZ3JhbS4KKytETExUT09MPSRsdF9ETExUT09MCisrCisrIyBDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzLgorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorKworICMgVGhlIGFyY2hpdmVyLgorIEFSPSRsdF9BUgorKworKyMgRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmUuCisgQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisgCisrIyBIb3cgdG8gZmVlZCBhIGZpbGUgbGlzdGluZyB0byB0aGUgYXJjaGl2ZXIuCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9hcmNoaXZlcl9saXN0X3NwZWMKKysKKyAjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtLgorIFNUUklQPSRsdF9TVFJJUAorIAorQEAgLTE2NDY0LDYgKzE3MTYwLDEyIEBAIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisgIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZC4KKyBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKKyAKKysjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgXCROTS4KKytubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKKysKKysjIFRoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyxhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLgorK2x0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKKysKKyAjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KKyBvYmpkaXI9JG9iamRpcgorIAorQEAgLTE2NDczLDYgKzE3MTc1LDkgQEAgTUFHSUNfQ01EPSRNQUdJQ19DTUQKKyAjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworIG5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKKyAKKysjIE1hbmlmZXN0IHRvb2wuCisrTUFOSUZFU1RfVE9PTD0kbHRfTUFOSUZFU1RfVE9PTAorKworICMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KKyBEU1lNVVRJTD0kbHRfRFNZTVVUSUwKKyAKK0BAIC0xNjU4NywxMiArMTcyOTIsMTIgQEAgd2l0aF9nY2M9JEdDQworICMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KKyBub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCisgCistIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCistCisgIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCisgcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCisgCisrIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCisrCisgIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorIGxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCisgCitAQCAtMTY2NzksOSArMTczODQsNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCisgIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCisgbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicworIAorLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KKy1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCistCisgIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKyAKK0BAIC0xNjY5Nyw2ICsxNzM5OSw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCisgIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KKyBwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcworIAorKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KKytwb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzCisrCisgIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCisgZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjCisgCitAQCAtMTY3MjksMjEwICsxNzQzNCwxNjkgQEAgbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisgICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKy0gIHNlZCAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS9xJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBjYXNlICR4c2lfc2hlbGwgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorLSMgY2FsbDoKKy0jICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorLSMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorLSMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorLSMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLSMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQorLSMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKy0jIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KKy1mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorLSAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifQorLX0KKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9JHsxJSU9Kn0KKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz0kezEjKj19CistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworLSAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sbworLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKQorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKy0gIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKKy0gIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCistICBlbHNlCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKy0gIGZpCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkYmFzZW5hbWUiYAorLX0KKy0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgY2FzZSAkezJ9IGluCistICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CistICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKy0gIGVzYWMKKy19CistCistIyBzZWQgc2NyaXB0czoKKy1teV9zZWRfbG9uZ19vcHQ9JzFzL15cKC1bXj1dKlwpPS4qL1wxLztxJworLW15X3NlZF9sb25nX2FyZz0nMXMvXi1bXj1dKj0vLycKKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAorLSAgZnVuY19vcHRfc3BsaXRfYXJnPWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAorLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLlteLl0qJC8ubG8vJ2AKKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJEAiYAorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKKy19CistCistX0xUX0VPRgorLWVzYWMKKy0KKy1jYXNlICRsdF9zaGVsbF9hcHBlbmQgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDErPVwkMiIKKy19CistX0xUX0VPRgorLSAgICA7OworLSAgKikKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDE9XCQkMVwkMiIKKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgZXNhYworLQorLQorLSAgc2VkIC1uICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLywkcCcgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorKyAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKysKKysgIGlmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWUgL2NcCisrZnVuY19kaXJuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfYmFzZW5hbWUgL2NcCisrZnVuY19iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIC9jXAorK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3RyaXBuYW1lICgpJC8sL159ICMgZnVuY19zdHJpcG5hbWUgL2NcCisrZnVuY19zdHJpcG5hbWUgKClcCisre1wKKytcICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmVcCisrXCAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuXAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M31cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3N0cmlwbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfbG9uZ19vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IC9jXAorK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfVwKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfbG9uZ19vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X3Nob3J0X29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IC9jXAorK2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fVwKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sbzJvICgpJC8sL159ICMgZnVuY19sbzJvIC9jXAorK2Z1bmNfbG8ybyAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7O1wKKytcICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sbzJvIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY194Zm9ybSAoKSQvLC9efSAjIGZ1bmNfeGZvcm0gL2NcCisrZnVuY194Zm9ybSAoKVwKKyt7XAorKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3hmb3JtIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcml0aCAoKSQvLC9efSAjIGZ1bmNfYXJpdGggL2NcCisrZnVuY19hcml0aCAoKVwKKyt7XAorKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSlcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXJpdGggaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xlbiAoKSQvLC9efSAjIGZ1bmNfbGVuIC9jXAorK2Z1bmNfbGVuICgpXAorK3tcCisrICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sZW4gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKytmaQorKworK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kIC9jXAorK2Z1bmNfYXBwZW5kICgpXAorK3tcCisrICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmRfcXVvdGVkICgpJC8sL159ICMgZnVuY19hcHBlbmRfcXVvdGVkIC9jXAorK2Z1bmNfYXBwZW5kX3F1b3RlZCAoKVwKKyt7XAorK1wgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSJcCisrXCAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmRfcXVvdGVkIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZWxzZQorKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2ZpCisrCisraWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiYyO30KKytmaQorKworKworKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgIGNobW9kICt4ICIkb2ZpbGUiCisgCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCBlOWYyZjEzLi5jYmNjYjE4IDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC04MDQxLDcgKzgwNDEsNyBAQCBjYXNlICIgJGJ1aWxkX2NvbmZpZ2RpcnMgIiBpbgorICAgICAjIEZvciBhbiBpbnN0YWxsZWQgbWFrZWluZm8sIHdlIHJlcXVpcmUgaXQgdG8gYmUgZnJvbSB0ZXhpbmZvIDQuNyBvcgorICAgICAjIGhpZ2hlciwgZWxzZSB3ZSB1c2UgdGhlICJtaXNzaW5nIiBkdW1teS4KKyAgICAgaWYgJHtNQUtFSU5GT30gLS12ZXJzaW9uIFwKKy0gICAgICAgfCBlZ3JlcCAndGV4aW5mb1teMC05XSooNFwuKFs3LTldfFsxLTldWzAtOV0pfFs1LTldfFsxLTldWzAtOV0pJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgICAgfCBlZ3JlcCAndGV4aW5mb1teMC05XSooWzEtM11bMC05XXw0Lls0LTldfDQuWzEtOV1bMC05XSt8WzUtOV0pJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICA6CisgICAgIGVsc2UKKyAgICAgICBNQUtFSU5GTz0iJE1JU1NJTkcgbWFrZWluZm8iCitkaWZmIC0tZ2l0IGEvZ2FzL2NvbmZpZ3VyZSBiL2dhcy9jb25maWd1cmUKK2luZGV4IGU5YmE1NTAuLjA3NDg4NmYgMTAwNzU1CistLS0gYS9nYXMvY29uZmlndXJlCisrKysgYi9nYXMvY29uZmlndXJlCitAQCAtNjQ1LDggKzY0NSwxMSBAQCBPVE9PTAorIExJUE8KKyBOTUVESVQKKyBEU1lNVVRJTAorK01BTklGRVNUX1RPT0wKKyBSQU5MSUIKKythY19jdF9BUgorIEFSCisrRExMVE9PTAorIE9CSkRVTVAKKyBMTl9TCisgTk0KK0BAIC03NTcsNiArNzYwLDcgQEAgZW5hYmxlX3N0YXRpYworIHdpdGhfcGljCisgZW5hYmxlX2Zhc3RfaW5zdGFsbAorIHdpdGhfZ251X2xkCisrd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBlbmFibGVfbGlidG9vbF9sb2NrCisgZW5hYmxlX3BsdWdpbnMKKyBlbmFibGVfbGFyZ2VmaWxlCitAQCAtMTQyMiw2ICsxNDI2LDggQEAgT3B0aW9uYWwgUGFja2FnZXM6CisgICAtLXdpdGgtcGljICAgICAgICAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCisgICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCisrICAtLXdpdGgtbGlidG9vbC1zeXNyb290PURJUiBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUgorKyAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLgorICAgLS13aXRoLXpsaWIgICAgICAgICAgICAgaW5jbHVkZSB6bGliIHN1cHBvcnQgKGF1dG8veWVzL25vKSBkZWZhdWx0PWF1dG8KKyAKKyBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKK0BAIC00OTAxLDggKzQ5MDcsOCBAQCBlc2FjCisgCisgCisgCistbWFjcm9fdmVyc2lvbj0nMi4yLjdhJworLW1hY3JvX3JldmlzaW9uPScxLjMxMzQnCisrbWFjcm9fdmVyc2lvbj0nMi40JworK21hY3JvX3JldmlzaW9uPScxLjMyOTMnCisgCisgCisgCitAQCAtNDk0Miw3ICs0OTQ4LDcgQEAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncy4uLiAiID4mNjsgfQorICMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgorLWlmIHRlc3QgIlhgcHJpbnQgLXIgLS0gLW4gMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisraWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisgICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgIEVDSE89J3ByaW50IC1yIC0tJworIGVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCitAQCAtNTYyOCw4ICs1NjM0LDggQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsKKyAjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworIHhzaV9zaGVsbD1ubworICggX2x0X2R1bW15PSJhL2IvYyIKKy0gIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCistICAgICAgPSBjLGEvYiwsIFwKKysgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisrICAgICAgPSBjLGEvYixiL2MsIFwKKyAgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAgJiYgeHNpX3NoZWxsPXllcworQEAgLTU2NzgsNiArNTY4NCw4MCBAQCBlc2FjCisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9faG9zdF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKi0qLWN5Z3dpbiogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKKysgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICAjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNTY5NCw2ICs1Nzc0LDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCisgZXNhYworIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyBjYXNlICRob3N0X29zIGluCisrICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCisrICAgIGZpCisrICAgIDs7CisgICBkYXJ3aW4qKQorICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK0BAIC01ODYyLDcgKzU5NDcsOCBAQCBtaW5ndyogfCBwdzMyKikKKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgICBlbHNlCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JworKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICAgZmkKKyAgIDs7CitAQCAtNjAxNiw2ICs2MTAyLDIxIEBAIGVzYWMKKyBmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQorICRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQorKworK2ZpbGVfbWFnaWNfZ2xvYj0KKyt3YW50X25vY2FzZWdsb2I9bm8KKytpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgbWluZ3cqIHwgcHczMiopCisrICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisrICAgIGVsc2UKKysgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tcMV1cL1tcMV1cL2c7L2ciYAorKyAgICBmaQorKyAgICA7OworKyAgZXNhYworK2ZpCisrCisgZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCitAQCAtNjAzMSw5ICs2MTMyLDE2MiBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKyAKKyAKKyAKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCisraWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQorKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgorKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X0RMTFRPT0w9JGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X0RMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KKysgICAgRExMVE9PTD0iZmFsc2UiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBETExUT09MPSRhY19jdF9ETExUT09MCisrICBmaQorK2Vsc2UKKysgIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJworKworK2Nhc2UgJGhvc3Rfb3MgaW4KKytjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCisrICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCisrICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KKysgICotLWlkZW50aWZ5LXN0cmljdCopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgorKyAgICA7OworKyAgKikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCisrICAgIDs7CisrICBlc2FjCisrICA7OworKyopCisrICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKKysgIDs7CisrZXNhYworKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY2OyB9Cisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrdGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworKworKworKworKworKworKworKworIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKKysgIGZvciBhY19wcm9nIGluIGFyCisrICBkbworKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02MDQ5LDcgKzYzMDMsNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCisrICAgIGFjX2N2X3Byb2dfQVI9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02MDY5LDExICs2MzIzLDE1IEBAICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKyAKKysgICAgdGVzdCAtbiAiJEFSIiAmJiBicmVhaworKyAgZG9uZQorIGZpCistaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCisraWYgdGVzdCAteiAiJEFSIjsgdGhlbgorICAgYWNfY3RfQVI9JEFSCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKKysgIGZvciBhY19wcm9nIGluIGFyCisrZG8KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTYwODksNyArNjM0Nyw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02MTA4LDYgKzYzNjYsMTAgQEAgZWxzZQorICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKysKKysgIHRlc3QgLW4gIiRhY19jdF9BUiIgJiYgYnJlYWsKKytkb25lCisrCisgICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KKyAgICAgQVI9ImZhbHNlIgorICAgZWxzZQorQEAgLTYxMTksMTIgKzYzODEsMTAgQEAgYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisgZXNhYworICAgICBBUj0kYWNfY3RfQVIKKyAgIGZpCistZWxzZQorLSAgQVI9IiRhY19jdl9wcm9nX0FSIgorIGZpCisgCistdGVzdCAteiAiJEFSIiAmJiBBUj1hcgorLXRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CisrOiAke0FSPWFyfQorKzogJHtBUl9GTEFHUz1jcnV9CisgCisgCisgCitAQCAtNjEzNiw2ICs2Mzk2LDY0IEBAIHRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2FyX2F0X2ZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9hcl9hdF9maWxlPW5vCisrICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKytpbnQKKyttYWluICgpCisreworKworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKysgIGVjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiY1JworKyAgICAgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisrCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCisrCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQorKwl7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysJaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KKysgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCisrCisrZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJfYXRfZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9hcl9hdF9maWxlIiA+JjY7IH0KKysKKytpZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCisrICBhcmNoaXZlcl9saXN0X3NwZWM9CisrZWxzZQorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCisrZmkKKysKKysKKysKKysKKysKKysKKysKKyBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCitAQCAtNjQ3MCw4ICs2Nzg4LDggQEAgZXNhYworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisgCisgIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorIAorICMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorIG9wdF9jcj0KK0BAIC02NTA3LDYgKzY4MjUsNyBAQCBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisgICBlbHNlCisgICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgICBmaQorKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgorIAorICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgICBwaXBlX3dvcmtzPW5vCitAQCAtNjU0OCw2ICs2ODY3LDE4IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLworKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisrLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisrICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2VsaWYgZGVmaW5lZChfX29zZl9fKQorKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2Vsc2UKKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAorKyNlbmRpZgorKworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworICNlbmRpZgorQEAgLTY1NTksNyArNjg5MCw3IEBAIF9MVF9FT0YKKyAJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyAvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCistY29uc3Qgc3RydWN0IHsKKytMVF9ETFNZTV9DT05TVCBzdHJ1Y3QgeworICAgY29uc3QgY2hhciAqbmFtZTsKKyAgIHZvaWQgICAgICAgKmFkZHJlc3M7CisgfQorQEAgLTY1ODUsOCArNjkxNiw4IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgX0xUX0VPRgorIAkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisgCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CistCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKKy0JICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKysJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUworKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUworIAkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisgCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgorIAkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorQEAgLTY1OTYsOCArNjkyNyw4IEBAIF9MVF9FT0YKKyAgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorIAkgICAgcGlwZV93b3Jrcz15ZXMKKyAJICBmaQorLQkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCistCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCisrCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKKysJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKKyAJZWxzZQorIAkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQorIAlmaQorQEAgLTY2MzQsNiArNjk2NSwyMSBAQCBlbHNlCisgJGFzX2VjaG8gIm9rIiA+JjY7IH0KKyBmaQorIAorKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgorK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbQF1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytmaQorKworKworKworKworKworKworKworKworKworIAorIAorIAorQEAgLTY2NTIsNiArNjk5OCw0MCBAQCBmaQorIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5c3Jvb3QiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXNyb290Li4uICIgPiY2OyB9CisrCisrIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Qgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgd2l0aHZhbD0kd2l0aF9saWJ0b29sX3N5c3Jvb3Q7CisrZWxzZQorKyAgd2l0aF9saWJ0b29sX3N5c3Jvb3Q9bm8KKytmaQorKworKworK2x0X3N5c3Jvb3Q9CisrY2FzZSAke3dpdGhfbGlidG9vbF9zeXNyb290fSBpbiAjKAorKyB5ZXMpCisrICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisrICAgZmkKKysgICA7OyAjKAorKyAvKikKKysgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9saWJ0b29sX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKysgICA7OyAjKAorKyBub3wnJykKKysgICA7OyAjKAorKyAqKQorKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY1CisrJGFzX2VjaG8gIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjY7IH0KKysgICBhc19mbl9lcnJvciAiVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiIgIiRMSU5FTk8iIDUKKysgICA7OworK2VzYWMKKysKKysgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7bHRfc3lzcm9vdDotbm99IiA+JjUKKyskYXNfZWNobyAiJHtsdF9zeXNyb290Oi1ub30iID4mNjsgfQorKworKworIAorIAorIAorQEAgLTY4NjEsNiArNzI0MSwxMjMgQEAgZXNhYworIAorIG5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorIAorK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1tdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJE1BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIke2FjX3Rvb2xfcHJlZml4fW10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytNQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRNQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdF9NQU5JRkVTVF9UT09MPSRNQU5JRkVTVF9UT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgbXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0iJGFjX2N0X01BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSJtdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X01BTklGRVNUX1RPT0wiID0geDsgdGhlbgorKyAgICBNQU5JRkVTVF9UT09MPSI6IgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgTUFOSUZFU1RfVE9PTD0kYWNfY3RfTUFOSUZFU1RfVE9PTAorKyAgZmkKKytlbHNlCisrICBNQU5JRkVTVF9UT09MPSIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIgorK2ZpCisrCisrdGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JjUKKysgICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisrICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKKysgIGZpCisrICBybSAtZiBjb25mdGVzdCoKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY2OyB9CisraWYgdGVzdCAieCRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiICE9IHh5ZXM7IHRoZW4KKysgIE1BTklGRVNUX1RPT0w9OgorK2ZpCisrCisrCisrCisrCisrCisgCisgICBjYXNlICRob3N0X29zIGluCisgICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCitAQCAtNzQyNCw2ICs3OTIxLDggQEAgX0xUX0VPRgorICAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mNQorICAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JjUKKyAgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiY1CisrICAgICAgZWNobyAiJFJBTkxJQiBsaWJjb25mdGVzdC5hIiA+JjUKKysgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mNQorICAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgorIGludCBtYWluKCkgeyByZXR1cm4gMDt9CisgX0xUX0VPRgorQEAgLTc2MTksNyArODExOCw4IEBAIGZpCisgTElCVE9PTF9ERVBTPSIkbHRtYWluIgorIAorICMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCistTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCisrTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpJworK0xJQlRPT0w9IiRMSUJUT09MLyR7aG9zdF9hbGlhc30tbGlidG9vbCIKKyAKKyAKKyAKK0BAIC03NzA4LDcgKzgyMDgsNyBAQCBhaXgzKikKKyBlc2FjCisgCisgIyBHbG9iYWwgdmFyaWFibGVzOgorLW9maWxlPWxpYnRvb2wKKytvZmlsZT0ke2hvc3RfYWxpYXN9LWxpYnRvb2wKKyBjYW5fYnVpbGRfc2hhcmVkPXllcworIAorICMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorQEAgLTgwMDYsOCArODUwNiw2IEBAIGZpCisgbHRfcHJvZ19jb21waWxlcl9waWM9CisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CisgCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CistJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAKKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCitAQCAtODE3Myw2ICs4NjcxLDEyIEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCWx0X3Byb2dfY29tcGlsZXJfcGljPSctLXNoYXJlZCcKKyAJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy0tc3RhdGljJworIAk7OworKyAgICAgIG5hZ2ZvciopCisrCSMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKysJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLC1XbCwsJworKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKKysJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworKwk7OworICAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKyAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCisgCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCitAQCAtODIzNSw3ICs4NzM5LDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQorKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKyAJbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJzs7CisgICAgICAgKikKKyAJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCc7OworQEAgLTgyOTIsMTMgKzg3OTYsMTcgQEAgY2FzZSAkaG9zdF9vcyBpbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgorICAgICA7OworIGVzYWMKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKy0kYXNfZWNobyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKy0KKy0KKy0KKy0KKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfcHJvZ19jb21waWxlcl9waWMKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorK2x0X3Byb2dfY29tcGlsZXJfcGljPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYworIAorICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCitAQCAtODM1OSw2ICs4ODY3LDExIEBAIGZpCisgCisgCisgCisrCisrCisrCisrCisrCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyAjCitAQCAtODcwOSw3ICs5MjIyLDggQEAgX0xUX0VPRgorICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCisgICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKy0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4Y2x1ZGVfZXhwc3ltcz0nW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJworIAorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCitAQCAtODc1Nyw3ICs5MjcxLDcgQEAgX0xUX0VPRgorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKyAJICYmIHRlc3QgIiR0bXBfZGlldCIgPSBubworICAgICAgIHRoZW4KKy0JdG1wX2FkZGZsYWc9CisrCXRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworIAl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKKyAJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisgICAgICAgICBwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCitAQCAtODgwOCwxMiArOTMyMiwxMiBAQCBfTFRfRU9GCisgCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSctcnBhdGggJGxpYmRpcicKKy0JICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKysJICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisgCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorIAkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKy0JICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisrCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAJICBmaQorIAkgIDs7CisgCWVzYWMKK0BAIC04ODI3LDggKzkzNDEsOCBAQCBfTFRfRU9GCisgCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKyAJd2xhcmM9CisgICAgICAgZWxzZQorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBmaQorICAgICAgIDs7CisgCitAQCAtODg0Niw4ICs5MzYwLDggQEAgX0xUX0VPRgorIAorIF9MVF9FT0YKKyAgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTg4OTMsOCArOTQwNyw4IEBAIF9MVF9FT0YKKyAKKyAgICAgKikKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC05MDI0LDcgKzk1MzgsMTMgQEAgX0xUX0VPRgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJworICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCistICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrICAgICAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtOTAzNywyMiArOTU1NywyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCitAQCAtOTA2NCw3ICs5NTkxLDEzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAllbHNlCisgCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAJICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0JIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC05MDc3LDIyICs5NjEwLDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorIAkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCitAQCAtOTEzNywyMCArOTY3Nyw2MyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCistICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorLSAgICAgIGxpYmV4dD1saWIKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKy0gICAgICBzaHJleHRfY21kcz0iLmRsbCIKKy0gICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCistICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKy0gICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorLSAgICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCistICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKy0gICAgICBvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCistICAgICAgZml4X3NyY2ZpbGVfcGF0aD0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCistICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICAgIGNsKikKKysJIyBOYXRpdmUgTVNWQworKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwlhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisrCWZpbGVfbGlzdF9zcGVjPSdAJworKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgc2VkIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBlbHNlCisrCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGZpfgorKwkgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKysJICBsaW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisrCSMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCApPSd0cnVlJworKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKwlleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrCSMgRG9uJ3QgdXNlIHJhbmxpYgorKwlvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCisrCXBvc3RsaW5rX2NtZHM9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKysJICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorKwkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKysJICAgICouZXhlfCouRVhFKSA7OworKwkgICAgKikKKysJICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorKwkgICAgICBsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgorKwkgICAgICA7OworKwkgIGVzYWN+CisrCSAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKysJICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisrCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKysJICBmaScKKysJOzsKKysgICAgICAqKQorKwkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKysJb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKysJIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKysJb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKwk7OworKyAgICAgIGVzYWMKKyAgICAgICA7OworIAorICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorQEAgLTkyMTEsNyArOTc5NCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworQEAgLTkyMTksNyArOTgwMiw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4OSopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBmaQorQEAgLTkyMzUsNyArOTgxOCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4MTAqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICAgZmkKK0BAIC05MjU5LDEwICs5ODQyLDEwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJaWE2NCopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAkqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWVzYWMKKyAgICAgICBlbHNlCitAQCAtOTM0MSwyMyArOTkyNCwzNiBAQCBmaQorIAorICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorIAkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCisgCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCistICAgICAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorLSAgICAgICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgorKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKysJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorKwkgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLWludCBmb28odm9pZCkge30KKytpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9CisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorLSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworLQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzCisrZWxzZQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm8KKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLSAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKysgICAgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjY7IH0KKysJaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgorKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlmaQorICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCitAQCAtOTQ0Miw3ICsxMDAzOCw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICBlbHNlCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworQEAgLTk0NjEsOSArMTAwNTcsOSBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJd2xhcmM9JyR7d2x9JworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorLQkgICRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisrCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgZWxzZQorIAljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKyAJKiJDb21waWxlcnMgNS4wIiopCitAQCAtMTAwMzksOCArMTA2MzUsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICBuZWVkX3ZlcnNpb249bm8KKyAgIG5lZWRfbGliX3ByZWZpeD1ubworIAorLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCistICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQorKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorKyAgeWVzLCopCisrICAgICMgZ2NjCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CitAQCAtMTAwNzMsMTMgKzEwNjcwLDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICAgOzsKKyAgICAgZXNhYworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworKyAgICA7OworKworKyAgKixjbCopCisrICAgICMgTmF0aXZlIE1TVkMKKysgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKysgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKysKKysgICAgY2FzZSAkYnVpbGRfb3MgaW4KKysgICAgbWluZ3cqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKysgICAgICBsdF9zYXZlX2lmcz0kSUZTCisrICAgICAgSUZTPSc7JworKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKysgICAgICBkbworKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKysgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorKyAgICAgIGRvbmUKKysgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisrICAgICAgOzsKKysgICAgY3lnd2luKikKKysgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisrICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisrICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIDs7CisrICAgICopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisrICAgICAgZWxzZQorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIGZpCisrICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisrICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKysgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKysgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKysgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisrICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKysgICAgICAgJFJNIFwkZGxwYXRoJworKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICAgOzsKKyAKKyAgICopCisrICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICAgOzsKKyAgIGVzYWMKKy0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgIHNobGlicGF0aF92YXI9UEFUSAorICAgOzsKK0BAIC0xMDE3MSw3ICsxMDgyNiw3IEBAIGhhaWt1KikKKyAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L2Jlb3Mvc3lzdGVtL2xpYicKKysgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgOzsKKyAKK0BAIC0xMTAxMSwxMCArMTE2NjYsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xMTExNywxMCArMTE3NzIsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xNTI3NCwxMyArMTU5MjksMjAgQEAgZXhlZXh0PSdgJEVDSE8gIiRleGVleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Vuc2V0PSdgJEVDSE8gIiRsdF91bnNldCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9OTDJTUD0nYCRFQ0hPICIkbHRfTkwyU1AiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9mbGFnPSdgJEVDSE8gIiRyZWxvYWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcmVsb2FkX2NtZHM9J2AkRUNITyAiJHJlbG9hZF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBPQkpEVU1QPSdgJEVDSE8gIiRPQkpEVU1QIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0nYCRFQ0hPICIkZGVwbGlic19jaGVja19tZXRob2QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbWFnaWNfY21kPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrZmlsZV9tYWdpY19nbG9iPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2dsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3dhbnRfbm9jYXNlZ2xvYj0nYCRFQ0hPICIkd2FudF9ub2Nhc2VnbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytETExUT09MPSdgJEVDSE8gIiRETExUT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0nYCRFQ0hPICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSPSdgJEVDSE8gIiRBUiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgQVJfRkxBR1M9J2AkRUNITyAiJEFSX0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKythcmNoaXZlcl9saXN0X3NwZWM9J2AkRUNITyAiJGFyY2hpdmVyX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgU1RSSVA9J2AkRUNITyAiJFNUUklQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBSQU5MSUI9J2AkRUNITyAiJFJBTkxJQiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNTI5NSwxNCArMTU5NTcsMTcgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkU0VEICIkZGUKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbm1fZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJG5tX2ZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9zeXNyb290PSdgJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBvYmpkaXI9J2AkRUNITyAiJG9iamRpciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTUFHSUNfQ01EPSdgJEVDSE8gIiRNQUdJQ19DTUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9waWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9sb2Nrcz0nYCRFQ0hPICIkbmVlZF9sb2NrcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrTUFOSUZFU1RfVE9PTD0nYCRFQ0hPICIkTUFOSUZFU1RfVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgRFNZTVVUSUw9J2AkRUNITyAiJERTWU1VVElMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBOTUVESVQ9J2AkRUNITyAiJE5NRURJVCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTElQTz0nYCRFQ0hPICIkTElQTyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTUzMzUsMTIgKzE2MDAwLDEyIEBAIGhhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xCisgaGFyZGNvZGVfYXV0b21hdGljPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluaGVyaXRfcnBhdGg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGxpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWZpeF9zcmNmaWxlX3BhdGg9J2AkRUNITyAiJGZpeF9zcmNmaWxlX3BhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGFsd2F5c19leHBvcnRfc3ltYm9scz0nYCRFQ0hPICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleHBvcnRfc3ltYm9sc19jbWRzPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleGNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5jbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHByZWxpbmtfY21kcz0nYCRFQ0hPICIkcHJlbGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytwb3N0bGlua19jbWRzPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSdgJEVDSE8gIiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE1Mzk1LDggKzE2MDYwLDEzIEBAIHJlbG9hZF9mbGFnIFwKKyBPQkpEVU1QIFwKKyBkZXBsaWJzX2NoZWNrX21ldGhvZCBcCisgZmlsZV9tYWdpY19jbWQgXAorK2ZpbGVfbWFnaWNfZ2xvYiBcCisrd2FudF9ub2Nhc2VnbG9iIFwKKytETExUT09MIFwKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCBcCisgQVIgXAorIEFSX0ZMQUdTIFwKKythcmNoaXZlcl9saXN0X3NwZWMgXAorIFNUUklQIFwKKyBSQU5MSUIgXAorIENDIFwKK0BAIC0xNTQwNiwxMiArMTYwNzYsMTQgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKKytubV9maWxlX2xpc3Rfc3BlYyBcCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgXAorLWx0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfcGljIFwKKytsdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyBcCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAorIG5lZWRfbG9ja3MgXAorK01BTklGRVNUX1RPT0wgXAorIERTWU1VVElMIFwKKyBOTUVESVQgXAorIExJUE8gXAorQEAgLTE1NDI3LDcgKzE2MDk5LDYgQEAgbm9fdW5kZWZpbmVkX2ZsYWcgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAorIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAorLWZpeF9zcmNmaWxlX3BhdGggXAorIGV4Y2x1ZGVfZXhwc3ltcyBcCisgaW5jbHVkZV9leHBzeW1zIFwKKyBmaWxlX2xpc3Rfc3BlYyBcCitAQCAtMTU0NjMsNiArMTYxMzQsNyBAQCBtb2R1bGVfY21kcyBcCisgbW9kdWxlX2V4cHN5bV9jbWRzIFwKKyBleHBvcnRfc3ltYm9sc19jbWRzIFwKKyBwcmVsaW5rX2NtZHMgXAorK3Bvc3RsaW5rX2NtZHMgXAorIHBvc3RpbnN0YWxsX2NtZHMgXAorIHBvc3R1bmluc3RhbGxfY21kcyBcCisgZmluaXNoX2NtZHMgXAorQEAgLTE2MjI3LDcgKzE2ODk5LDggQEAgJGFzX2VjaG8gWCIkZmlsZSIgfAorICMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgorICMKKyAjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorLSMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrIyAgICAgICAgICAgICAgICAgSW5jLgorICMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisgIworICMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KK0BAIC0xNjMzMCwxOSArMTcwMDMsNDIgQEAgU1AyTkw9JGx0X2x0X1NQMk5MCisgIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgorIE5MMlNQPSRsdF9sdF9OTDJTUAorIAorKyMgY29udmVydCBcJGJ1aWxkIGZpbGUgbmFtZXMgdG8gXCRob3N0IGZvcm1hdC4KKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisrCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4KKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisrCisgIyBBbiBvYmplY3Qgc3ltYm9sIGR1bXBlci4KKyBPQkpEVU1QPSRsdF9PQkpEVU1QCisgCisgIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKyAKKy0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gImZpbGVfbWFnaWMiLgorKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyBmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKKyAKKysjIEhvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK2ZpbGVfbWFnaWNfZ2xvYj0kbHRfZmlsZV9tYWdpY19nbG9iCisrCisrIyBGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrd2FudF9ub2Nhc2VnbG9iPSRsdF93YW50X25vY2FzZWdsb2IKKysKKysjIERMTCBjcmVhdGlvbiBwcm9ncmFtLgorK0RMTFRPT0w9JGx0X0RMTFRPT0wKKysKKysjIENvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXMuCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrCisgIyBUaGUgYXJjaGl2ZXIuCisgQVI9JGx0X0FSCisrCisrIyBGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZS4KKyBBUl9GTEFHUz0kbHRfQVJfRkxBR1MKKyAKKysjIEhvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlci4KKythcmNoaXZlcl9saXN0X3NwZWM9JGx0X2FyY2hpdmVyX2xpc3Rfc3BlYworKworICMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCisgU1RSSVA9JGx0X1NUUklQCisgCitAQCAtMTYzNzIsNiArMTcwNjgsMTIgQEAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKKyAjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgorIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeAorIAorKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciBcJE5NLgorK25tX2ZpbGVfbGlzdF9zcGVjPSRsdF9ubV9maWxlX2xpc3Rfc3BlYworKworKyMgVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzLGFuZCBpbiB3aGljaCBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuCisrbHRfc3lzcm9vdD0kbHRfc3lzcm9vdAorKworICMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgorIG9iamRpcj0kb2JqZGlyCisgCitAQCAtMTYzODEsNiArMTcwODMsOSBAQCBNQUdJQ19DTUQ9JE1BR0lDX0NNRAorICMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CisgbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworIAorKyMgTWFuaWZlc3QgdG9vbC4KKytNQU5JRkVTVF9UT09MPSRsdF9NQU5JRkVTVF9UT09MCisrCisgIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgorIERTWU1VVElMPSRsdF9EU1lNVVRJTAorIAorQEAgLTE2NDk1LDEyICsxNzIwMCwxMiBAQCB3aXRoX2djYz0kR0NDCisgIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorIG5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKKyAKKy0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCistd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKy0KKyAjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KKyBwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKKyAKKysjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCisrd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKysKKyAjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCisgbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKKyAKK0BAIC0xNjU4Nyw5ICsxNzI5Miw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKKyAjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KKyBsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCisgCistIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKKy0KKyAjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scworIAorQEAgLTE2NjA1LDYgKzE3MzA3LDkgQEAgaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKKyAjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorIHByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCisgCisrIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgorK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHMKKysKKyAjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KKyBmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWMKKyAKK0BAIC0xNjYzNywyMTAgKzE3MzQyLDE2OSBAQCBsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKyAgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworLSAgc2VkICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlL3EnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIGNhc2UgJHhzaV9zaGVsbCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCistIyBjYWxsOgorLSMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCistIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CistIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCistIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCistIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworLSMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorLWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCistICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9CistfQorLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorLSAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7CistICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PSR7IzF9CistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopICMgQm91cm5lIGNvbXBhdGlibGUgZnVuY3Rpb25zLgorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorLSAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAorLSAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKy0gIGVsc2UKKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorLSAgZmkKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCistfQorLQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy0jIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICBjYXNlICR7Mn0gaW4KKy0gICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKy0gICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworLSAgZXNhYworLX0KKy0KKy0jIHNlZCBzY3JpcHRzOgorLW15X3NlZF9sb25nX29wdD0nMXMvXlwoLVtePV0qXCk9LiovXDEvO3EnCistbXlfc2VkX2xvbmdfYXJnPScxcy9eLVtePV0qPS8vJworLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCistICBmdW5jX29wdF9zcGxpdF9hcmc9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19hcmciYAorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW14uXSokLy5sby8nYAorLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIkQCJgCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkMSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorLX0KKy0KKy1fTFRfRU9GCistZXNhYworLQorLWNhc2UgJGx0X3NoZWxsX2FwcGVuZCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMSs9XCQyIgorLX0KKy1fTFRfRU9GCistICAgIDs7CistICAqKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMT1cJCQxXCQyIgorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICBlc2FjCistCistCistICBzZWQgLW4gJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvLCRwJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisrICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisrICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorKworKyAgaWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZSAvY1wKKytmdW5jX2Rpcm5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19iYXNlbmFtZSAvY1wKKytmdW5jX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgL2NcCisrZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zdHJpcG5hbWUgKCkkLywvXn0gIyBmdW5jX3N0cmlwbmFtZSAvY1wKKytmdW5jX3N0cmlwbmFtZSAoKVwKKyt7XAorK1wgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZVwKKytcICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC5cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3RyaXBuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9sb25nX29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgL2NcCisrZnVuY19zcGxpdF9sb25nX29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9sb25nX29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgL2NcCisrZnVuY19zcGxpdF9zaG9ydF9vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9zaG9ydF9vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xvMm8gKCkkLywvXn0gIyBmdW5jX2xvMm8gL2NcCisrZnVuY19sbzJvICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7XAorK1wgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xvMm8gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3hmb3JtICgpJC8sL159ICMgZnVuY194Zm9ybSAvY1wKKytmdW5jX3hmb3JtICgpXAorK3tcCisrICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfeGZvcm0gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FyaXRoICgpJC8sL159ICMgZnVuY19hcml0aCAvY1wKKytmdW5jX2FyaXRoICgpXAorK3tcCisrICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcml0aCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbGVuICgpJC8sL159ICMgZnVuY19sZW4gL2NcCisrZnVuY19sZW4gKClcCisre1wKKysgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xlbiBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworK2ZpCisrCisraWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kICgpJC8sL159ICMgZnVuY19hcHBlbmQgL2NcCisrZnVuY19hcHBlbmQgKClcCisre1wKKysgICAgZXZhbCAiJHsxfSs9XFwkezJ9IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZF9xdW90ZWQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZF9xdW90ZWQgL2NcCisrZnVuY19hcHBlbmRfcXVvdGVkICgpXAorK3tcCisrXCAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IlwKKytcICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZF9xdW90ZWQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytlbHNlCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQorKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZmkKKysKKytpZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjI7fQorK2ZpCisrCisrCisrICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICAgY2htb2QgK3ggIiRvZmlsZSIKKyAKK2RpZmYgLS1naXQgYS9ncHJvZi9jb25maWd1cmUgYi9ncHJvZi9jb25maWd1cmUKK2luZGV4IDc5OTYxYzUuLmM0ZjZhYzkgMTAwNzU1CistLS0gYS9ncHJvZi9jb25maWd1cmUKKysrKyBiL2dwcm9mL2NvbmZpZ3VyZQorQEAgLTYyOSw4ICs2MjksMTEgQEAgT1RPT0wKKyBMSVBPCisgTk1FRElUCisgRFNZTVVUSUwKKytNQU5JRkVTVF9UT09MCisgUkFOTElCCisrYWNfY3RfQVIKKyBBUgorK0RMTFRPT0wKKyBPQkpEVU1QCisgTE5fUworIE5NCitAQCAtNzQxLDYgKzc0NCw3IEBAIGVuYWJsZV9zdGF0aWMKKyB3aXRoX3BpYworIGVuYWJsZV9mYXN0X2luc3RhbGwKKyB3aXRoX2dudV9sZAorK3dpdGhfbGlidG9vbF9zeXNyb290CisgZW5hYmxlX2xpYnRvb2xfbG9jaworIGVuYWJsZV9wbHVnaW5zCisgZW5hYmxlX2xhcmdlZmlsZQorQEAgLTEzOTksNiArMTQwMyw4IEBAIE9wdGlvbmFsIFBhY2thZ2VzOgorICAgLS13aXRoLXBpYyAgICAgICAgICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib3RoXQorICAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQorKyAgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD1ESVIgU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKKysgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS4KKyAKKyBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKKyAgIENDICAgICAgICAgIEMgY29tcGlsZXIgY29tbWFuZAorQEAgLTQ4MzEsOCArNDgzNyw4IEBAIGVzYWMKKyAKKyAKKyAKKy1tYWNyb192ZXJzaW9uPScyLjIuN2EnCistbWFjcm9fcmV2aXNpb249JzEuMzEzNCcKKyttYWNyb192ZXJzaW9uPScyLjQnCisrbWFjcm9fcmV2aXNpb249JzEuMzI5MycKKyAKKyAKKyAKK0BAIC00ODcyLDcgKzQ4NzgsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9CisgIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCistaWYgdGVzdCAiWGBwcmludCAtciAtLSAtbiAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKytpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKyAgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICAgRUNITz0ncHJpbnQgLXIgLS0nCisgZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KK0BAIC01NTU4LDggKzU1NjQsOCBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OworICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCisgeHNpX3NoZWxsPW5vCisgKCBfbHRfZHVtbXk9ImEvYi9jIgorLSAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKy0gICAgICA9IGMsYS9iLCwgXAorKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKysgICAgICA9IGMsYS9iLGIvYywgXAorICAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICAmJiB4c2lfc2hlbGw9eWVzCitAQCAtNTYwOCw2ICs1NjE0LDgwIEBAIGVzYWMKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b19ob3N0X2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqLSotY3lnd2luKiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQorKyAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9fdG9vbF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgICNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KKytsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKytjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC01NjI0LDYgKzU3MDQsMTEgQEAgY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyBlc2FjCisgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworIGNhc2UgJGhvc3Rfb3MgaW4KKysgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisrICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKysgICAgZmkKKysgICAgOzsKKyAgIGRhcndpbiopCisgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworQEAgLTU3OTIsNyArNTg3Nyw4IEBAIG1pbmd3KiB8IHB3MzIqKQorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgIGVsc2UKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCisrICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KKysgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgICBmaQorICAgOzsKK0BAIC01ODY5LDExICs1OTU1LDYgQEAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgIDs7CisgCistbGludXgtdWNsaWJjKikKKy0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCistICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvbGliL2xpYnVDbGliYy0qLnNvYAorLSAgOzsKKy0KKyBuZXRic2QqKQorICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCitAQCAtNTk1MSw2ICs2MDMyLDIxIEBAIGVzYWMKKyBmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQorICRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQorKworK2ZpbGVfbWFnaWNfZ2xvYj0KKyt3YW50X25vY2FzZWdsb2I9bm8KKytpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgbWluZ3cqIHwgcHczMiopCisrICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisrICAgIGVsc2UKKysgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tcMV1cL1tcMV1cL2c7L2ciYAorKyAgICBmaQorKyAgICA7OworKyAgZXNhYworK2ZpCisrCisgZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCitAQCAtNTk2Niw5ICs2MDYyLDE2MiBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKyAKKyAKKyAKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCisraWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQorKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgorKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X0RMTFRPT0w9JGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X0RMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KKysgICAgRExMVE9PTD0iZmFsc2UiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBETExUT09MPSRhY19jdF9ETExUT09MCisrICBmaQorK2Vsc2UKKysgIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJworKworK2Nhc2UgJGhvc3Rfb3MgaW4KKytjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCisrICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCisrICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KKysgICotLWlkZW50aWZ5LXN0cmljdCopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgorKyAgICA7OworKyAgKikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCisrICAgIDs7CisrICBlc2FjCisrICA7OworKyopCisrICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKKysgIDs7CisrZXNhYworKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY2OyB9Cisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrdGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworKworKworKworKworKworKworKworIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKKysgIGZvciBhY19wcm9nIGluIGFyCisrICBkbworKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC01OTg0LDcgKzYyMzMsNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCisrICAgIGFjX2N2X3Byb2dfQVI9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02MDA0LDExICs2MjUzLDE1IEBAICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKyAKKysgICAgdGVzdCAtbiAiJEFSIiAmJiBicmVhaworKyAgZG9uZQorIGZpCistaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCisraWYgdGVzdCAteiAiJEFSIjsgdGhlbgorICAgYWNfY3RfQVI9JEFSCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKKysgIGZvciBhY19wcm9nIGluIGFyCisrZG8KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTYwMjQsNyArNjI3Nyw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02MDQzLDYgKzYyOTYsMTAgQEAgZWxzZQorICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKysKKysgIHRlc3QgLW4gIiRhY19jdF9BUiIgJiYgYnJlYWsKKytkb25lCisrCisgICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KKyAgICAgQVI9ImZhbHNlIgorICAgZWxzZQorQEAgLTYwNTQsMTIgKzYzMTEsMTAgQEAgYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisgZXNhYworICAgICBBUj0kYWNfY3RfQVIKKyAgIGZpCistZWxzZQorLSAgQVI9IiRhY19jdl9wcm9nX0FSIgorIGZpCisgCistdGVzdCAteiAiJEFSIiAmJiBBUj1hcgorLXRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CisrOiAke0FSPWFyfQorKzogJHtBUl9GTEFHUz1jcnV9CisgCisgCisgCitAQCAtNjA3MSw2ICs2MzI2LDY0IEBAIHRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2FyX2F0X2ZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9hcl9hdF9maWxlPW5vCisrICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKytpbnQKKyttYWluICgpCisreworKworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKysgIGVjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiY1JworKyAgICAgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisrCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCisrCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQorKwl7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysJaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KKysgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCisrCisrZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJfYXRfZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9hcl9hdF9maWxlIiA+JjY7IH0KKysKKytpZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCisrICBhcmNoaXZlcl9saXN0X3NwZWM9CisrZWxzZQorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCisrZmkKKysKKysKKysKKysKKysKKysKKysKKyBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCitAQCAtNjQwNSw4ICs2NzE4LDggQEAgZXNhYworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisgCisgIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorIAorICMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorIG9wdF9jcj0KK0BAIC02NDQyLDYgKzY3NTUsNyBAQCBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisgICBlbHNlCisgICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgICBmaQorKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgorIAorICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgICBwaXBlX3dvcmtzPW5vCitAQCAtNjQ4Myw2ICs2Nzk3LDE4IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLworKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisrLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisrICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2VsaWYgZGVmaW5lZChfX29zZl9fKQorKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2Vsc2UKKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAorKyNlbmRpZgorKworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworICNlbmRpZgorQEAgLTY0OTQsNyArNjgyMCw3IEBAIF9MVF9FT0YKKyAJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyAvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCistY29uc3Qgc3RydWN0IHsKKytMVF9ETFNZTV9DT05TVCBzdHJ1Y3QgeworICAgY29uc3QgY2hhciAqbmFtZTsKKyAgIHZvaWQgICAgICAgKmFkZHJlc3M7CisgfQorQEAgLTY1MjAsOCArNjg0Niw4IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgX0xUX0VPRgorIAkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisgCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CistCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKKy0JICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKysJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUworKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUworIAkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisgCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgorIAkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorQEAgLTY1MzEsOCArNjg1Nyw4IEBAIF9MVF9FT0YKKyAgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorIAkgICAgcGlwZV93b3Jrcz15ZXMKKyAJICBmaQorLQkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCistCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCisrCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKKysJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKKyAJZWxzZQorIAkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQorIAlmaQorQEAgLTY1NjksNiArNjg5NSwxOCBAQCBlbHNlCisgJGFzX2VjaG8gIm9rIiA+JjY7IH0KKyBmaQorIAorKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgorK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbQF1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytmaQorKworKworKworKworKworKworIAorIAorIAorQEAgLTY1OTAsNiArNjkyOCw0MyBAQCBmaQorIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5c3Jvb3QiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXNyb290Li4uICIgPiY2OyB9CisrCisrIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Qgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgd2l0aHZhbD0kd2l0aF9saWJ0b29sX3N5c3Jvb3Q7CisrZWxzZQorKyAgd2l0aF9saWJ0b29sX3N5c3Jvb3Q9bm8KKytmaQorKworKworK2x0X3N5c3Jvb3Q9CisrY2FzZSAke3dpdGhfbGlidG9vbF9zeXNyb290fSBpbiAjKAorKyB5ZXMpCisrICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisrICAgZmkKKysgICA7OyAjKAorKyAvKikKKysgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9saWJ0b29sX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKysgICA7OyAjKAorKyBub3wnJykKKysgICA7OyAjKAorKyAqKQorKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY1CisrJGFzX2VjaG8gIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjY7IH0KKysgICBhc19mbl9lcnJvciAiVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiIgIiRMSU5FTk8iIDUKKysgICA7OworK2VzYWMKKysKKysgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7bHRfc3lzcm9vdDotbm99IiA+JjUKKyskYXNfZWNobyAiJHtsdF9zeXNyb290Oi1ub30iID4mNjsgfQorKworKworKworKworKworICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbiA6CisgICBlbmFibGV2YWw9JGVuYWJsZV9saWJ0b29sX2xvY2s7CitAQCAtNjc5Niw2ICs3MTcxLDEyMyBAQCBlc2FjCisgCisgbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCisgCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1tdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIkTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9bXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJE1BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N0X01BTklGRVNUX1RPT0w9JE1BTklGRVNUX1RPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9Im10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9NQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPSB4OyB0aGVuCisrICAgIE1BTklGRVNUX1RPT0w9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBNQU5JRkVTVF9UT09MPSRhY19jdF9NQU5JRkVTVF9UT09MCisrICBmaQorK2Vsc2UKKysgIE1BTklGRVNUX1RPT0w9IiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD1ubworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mNQorKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKysgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcworKyAgZmkKKysgIHJtIC1mIGNvbmZ0ZXN0KgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgorKyAgTUFOSUZFU1RfVE9PTD06CisrZmkKKysKKysKKysKKysKKysKKyAKKyAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKK0BAIC03MzU5LDYgKzc4NTEsOCBAQCBfTFRfRU9GCisgICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1CisgICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mNQorICAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKKysgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mNQorKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiY1CisgICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCisgaW50IG1haW4oKSB7IHJldHVybiAwO30KKyBfTFRfRU9GCitAQCAtNzU1NCw3ICs4MDQ4LDggQEAgZmkKKyBMSUJUT09MX0RFUFM9IiRsdG1haW4iCisgCisgIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KKy1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKytMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpciknCisrTElCVE9PTD0iJExJQlRPT0wvJHtob3N0X2FsaWFzfS1saWJ0b29sIgorIAorIAorIAorQEAgLTc2NDMsNyArODEzOCw3IEBAIGFpeDMqKQorIGVzYWMKKyAKKyAjIEdsb2JhbCB2YXJpYWJsZXM6Cistb2ZpbGU9bGlidG9vbAorK29maWxlPSR7aG9zdF9hbGlhc30tbGlidG9vbAorIGNhbl9idWlsZF9zaGFyZWQ9eWVzCisgCisgIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCitAQCAtNzk0MSw4ICs4NDM2LDYgQEAgZmkKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KKyAKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKy0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAorICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKK0BAIC04MTA4LDYgKzg2MDEsMTIgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAJbHRfcHJvZ19jb21waWxlcl9waWM9Jy0tc2hhcmVkJworIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLS1zdGF0aWMnCisgCTs7CisrICAgICAgbmFnZm9yKikKKysJIyBOQUcgRm9ydHJhbiBjb21waWxlcgorKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsLVdsLCwnCisrCWx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJworKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisrCTs7CisgICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKyAJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKK0BAIC04MTcwLDcgKzg2NjksNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCisrICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICAqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7CitAQCAtODIyNywxMyArODcyNiwxNyBAQCBjYXNlICRob3N0X29zIGluCisgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgIDs7CisgZXNhYworLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNQorLSRhc19lY2hvICIkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorLQorLQorLQorLQorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljPSRsdF9wcm9nX2NvbXBpbGVyX3BpYworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CisrbHRfcHJvZ19jb21waWxlcl9waWM9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljCisgCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KK0BAIC04Mjk0LDYgKzg3OTcsMTEgQEAgZmkKKyAKKyAKKyAKKysKKysKKysKKysKKysKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorICMKK0BAIC04NjQ0LDcgKzkxNTIsOCBAQCBfTFRfRU9GCisgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhjbHVkZV9leHBzeW1zPSdbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnCisgCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKK0BAIC04NjkyLDcgKzkyMDEsNyBAQCBfTFRfRU9GCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorIAkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICAgdGhlbgorLQl0bXBfYWRkZmxhZz0KKysJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisgCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJworIAljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKK0BAIC04NzQzLDEyICs5MjUyLDEyIEBAIF9MVF9FT0YKKyAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJworLQkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworKwkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKyAJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorLQkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKysJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworIAkgIGZpCisgCSAgOzsKKyAJZXNhYworQEAgLTg3NjIsOCArOTI3MSw4IEBAIF9MVF9FT0YKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworIAl3bGFyYz0KKyAgICAgICBlbHNlCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGZpCisgICAgICAgOzsKKyAKK0BAIC04NzgxLDggKzkyOTAsOCBAQCBfTFRfRU9GCisgCisgX0xUX0VPRgorICAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtODgyOCw4ICs5MzM3LDggQEAgX0xUX0VPRgorIAorICAgICAqKQorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTg5NTksNyArOTQ2OCwxMyBAQCBfTFRfRU9GCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCisgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysgICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC04OTcyLDIyICs5NDg3LDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKK0BAIC04OTk5LDcgKzk1MjEsMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCWVsc2UKKyAJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorIAkgIyBlbXB0eSBleGVjdXRhYmxlLgorLQkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTkwMTIsMjIgKzk1NDAsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAJIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKK0BAIC05MDcyLDIwICs5NjA3LDYzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCistICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKy0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCistICAgICAgbGliZXh0PWxpYgorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCistICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKy0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorLSAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKy0gICAgICBmaXhfc3JjZmlsZV9wYXRoPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKKy0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgY2wqKQorKwkjIE5hdGl2ZSBNU1ZDCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKysJZmlsZV9saXN0X3NwZWM9J0AnCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGVsc2UKKysJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZml+CisrCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgIGxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysJIyBEb24ndCB1c2UgcmFubGliCisrCW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKKysJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisrCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgKi5leGV8Ki5FWEUpIDs7CisrCSAgICAqKQorKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIDs7CisrCSAgZXNhY34KKysJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKysJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworKwkgIGZpJworKwk7OworKyAgICAgICopCisrCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorKwlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCTs7CisrICAgICAgZXNhYworICAgICAgIDs7CisgCisgICAgIGRhcndpbiogfCByaGFwc29keSopCitAQCAtOTE0Niw3ICs5NzI0LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCitAQCAtOTE1NCw3ICs5NzMyLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXg5KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisrCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGZpCitAQCAtOTE3MCw3ICs5NzQ4LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXgxMCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgICBmaQorQEAgLTkxOTQsMTAgKzk3NzIsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAlpYTY0KikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCSopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJZXNhYworICAgICAgIGVsc2UKK0BAIC05Mjc2LDIzICs5ODU0LDM2IEBAIGZpCisgCisgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisgCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKyAJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KKy0gICAgICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCistICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCistICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCisrCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorKwkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCisrCSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistaW50IGZvbyh2b2lkKSB7fQorK2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH0KKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CistICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCistCisrICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXMKKytlbHNlCisrICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD1ubworIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNjsgfQorKwlpZiB0ZXN0ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID0geWVzOyB0aGVuCisrICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWZpCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKK0BAIC05Mzc3LDcgKzk5NjgsNyBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgZWxzZQorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKK0BAIC05Mzk2LDkgKzk5ODcsOSBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJd2xhcmM9JyR7d2x9JworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorLQkgICRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisrCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgZWxzZQorIAljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKyAJKiJDb21waWxlcnMgNS4wIiopCitAQCAtOTk3NCw4ICsxMDU2NSw5IEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgIG5lZWRfdmVyc2lvbj1ubworICAgbmVlZF9saWJfcHJlZml4PW5vCisgCistICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KKy0gIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKiB8IHllcyxjZWdjYyopCisrICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCisrICB5ZXMsKikKKysgICAgIyBnY2MKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KK0BAIC0xMDAwOCwxMyArMTA2MDAsNzEgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgICA7OworICAgICBlc2FjCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisrICAgIDs7CisrCisrICAqLGNsKikKKysgICAgIyBOYXRpdmUgTVNWQworKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJworKworKyAgICBjYXNlICRidWlsZF9vcyBpbgorKyAgICBtaW5ndyopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQorKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKKysgICAgICBJRlM9JzsnCisrICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgorKyAgICAgIGRvCisrICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgorKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCisrICAgICAgZG9uZQorKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFthLXpBLVpdXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKysgICAgICA7OworKyAgICBjeWd3aW4qKQorKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKysgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKysgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisrICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCisrICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKysgICAgICBlbHNlCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgZmkKKysgICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKKysgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisrICAgICAgOzsKKysgICAgZXNhYworKworKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisrICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKysgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorKyAgICAgICAkUk0gXCRkbHBhdGgnCisrICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJworICAgICA7OworIAorICAgKikKKysgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgICA7OworICAgZXNhYworLSAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICAgc2hsaWJwYXRoX3Zhcj1QQVRICisgICA7OworQEAgLTEwMTA2LDcgKzEwNzU2LDcgQEAgaGFpa3UqKQorICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCistICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3QvYmVvcy9zeXN0ZW0vbGliJworKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICA7OworIAorQEAgLTEwOTQ2LDEwICsxMTU5NiwxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTExMDUyLDEwICsxMTcwMiwxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTEyOTI0LDEzICsxMzU3NCwyMCBAQCBleGVleHQ9J2AkRUNITyAiJGV4ZWV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfdW5zZXQ9J2AkRUNITyAiJGx0X3Vuc2V0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9TUDJOTD0nYCRFQ0hPICIkbHRfU1AyTkwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X05MMlNQPSdgJEVDSE8gIiRsdF9OTDJTUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfY3ZfdG9faG9zdF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcmVsb2FkX2ZsYWc9J2AkRUNITyAiJHJlbG9hZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfY21kcz0nYCRFQ0hPICIkcmVsb2FkX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE9CSkRVTVA9J2AkRUNITyAiJE9CSkRVTVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSdgJEVDSE8gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9tYWdpY19jbWQ9J2AkRUNITyAiJGZpbGVfbWFnaWNfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytmaWxlX21hZ2ljX2dsb2I9J2AkRUNITyAiJGZpbGVfbWFnaWNfZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrd2FudF9ub2Nhc2VnbG9iPSdgJEVDSE8gIiR3YW50X25vY2FzZWdsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK0RMTFRPT0w9J2AkRUNITyAiJERMTFRPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSdgJEVDSE8gIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgQVI9J2AkRUNITyAiJEFSIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUl9GTEFHUz0nYCRFQ0hPICIkQVJfRkxBR1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2FyY2hpdmVyX2xpc3Rfc3BlYz0nYCRFQ0hPICIkYXJjaGl2ZXJfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBTVFJJUD0nYCRFQ0hPICIkU1RSSVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFJBTkxJQj0nYCRFQ0hPICIkUkFOTElCIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBvbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTEyOTQ1LDE0ICsxMzYwMiwxNyBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRTRUQgIiRkZQorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytubV9maWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkbm1fZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3N5c3Jvb3Q9J2AkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9iamRpcj0nYCRFQ0hPICIkb2JqZGlyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBNQUdJQ19DTUQ9J2AkRUNITyAiJE1BR0lDX0NNRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1sdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBuZWVkX2xvY2tzPSdgJEVDSE8gIiRuZWVkX2xvY2tzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytNQU5JRkVTVF9UT09MPSdgJEVDSE8gIiRNQU5JRkVTVF9UT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBEU1lNVVRJTD0nYCRFQ0hPICIkRFNZTVVUSUwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE5NRURJVD0nYCRFQ0hPICIkTk1FRElUIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBMSVBPPSdgJEVDSE8gIiRMSVBPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xMjk4NSwxMiArMTM2NDUsMTIgQEAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3EKKyBoYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5oZXJpdF9ycGF0aD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbGlua19hbGxfZGVwbGlicz0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistZml4X3NyY2ZpbGVfcGF0aD0nYCRFQ0hPICIkZml4X3NyY2ZpbGVfcGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4cG9ydF9zeW1ib2xzX2NtZHM9J2AkRUNITyAiJGV4cG9ydF9zeW1ib2xzX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4Y2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcHJlbGlua19jbWRzPSdgJEVDSE8gIiRwcmVsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3Bvc3RsaW5rX2NtZHM9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9J2AkRUNITyAiJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBuZWVkX2xpYl9wcmVmaXg9J2AkRUNITyAiJG5lZWRfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTMwNDUsOCArMTM3MDUsMTMgQEAgcmVsb2FkX2ZsYWcgXAorIE9CSkRVTVAgXAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kIFwKKyBmaWxlX21hZ2ljX2NtZCBcCisrZmlsZV9tYWdpY19nbG9iIFwKKyt3YW50X25vY2FzZWdsb2IgXAorK0RMTFRPT0wgXAorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIFwKKyBBUiBcCisgQVJfRkxBR1MgXAorK2FyY2hpdmVyX2xpc3Rfc3BlYyBcCisgU1RSSVAgXAorIFJBTkxJQiBcCisgQ0MgXAorQEAgLTEzMDU2LDEyICsxMzcyMSwxNCBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXggXAorK25tX2ZpbGVfbGlzdF9zcGVjIFwKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCistbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9waWMgXAorK2x0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCisgbmVlZF9sb2NrcyBcCisrTUFOSUZFU1RfVE9PTCBcCisgRFNZTVVUSUwgXAorIE5NRURJVCBcCisgTElQTyBcCitAQCAtMTMwNzcsNyArMTM3NDQsNiBAQCBub191bmRlZmluZWRfZmxhZyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCBcCisgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCistZml4X3NyY2ZpbGVfcGF0aCBcCisgZXhjbHVkZV9leHBzeW1zIFwKKyBpbmNsdWRlX2V4cHN5bXMgXAorIGZpbGVfbGlzdF9zcGVjIFwKK0BAIC0xMzExMyw2ICsxMzc3OSw3IEBAIG1vZHVsZV9jbWRzIFwKKyBtb2R1bGVfZXhwc3ltX2NtZHMgXAorIGV4cG9ydF9zeW1ib2xzX2NtZHMgXAorIHByZWxpbmtfY21kcyBcCisrcG9zdGxpbmtfY21kcyBcCisgcG9zdGluc3RhbGxfY21kcyBcCisgcG9zdHVuaW5zdGFsbF9jbWRzIFwKKyBmaW5pc2hfY21kcyBcCitAQCAtMTM4NjksNyArMTQ1MzYsOCBAQCAkYXNfZWNobyBYIiRmaWxlIiB8CisgIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisgIworICMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCistIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysjICAgICAgICAgICAgICAgICBJbmMuCisgIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyAjCisgIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorQEAgLTEzOTcyLDE5ICsxNDY0MCw0MiBAQCBTUDJOTD0kbHRfbHRfU1AyTkwKKyAjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCisgTkwyU1A9JGx0X2x0X05MMlNQCisgCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZSBuYW1lcyB0byBcJGhvc3QgZm9ybWF0LgorK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKysKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0LgorK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKysKKyAjIEFuIG9iamVjdCBzeW1ib2wgZHVtcGVyLgorIE9CSkRVTVA9JGx0X09CSkRVTVAKKyAKKyAjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAorIAorLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSAiZmlsZV9tYWdpYyIuCisrIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorIGZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAorIAorKyMgSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrZmlsZV9tYWdpY19nbG9iPSRsdF9maWxlX21hZ2ljX2dsb2IKKysKKysjIEZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyt3YW50X25vY2FzZWdsb2I9JGx0X3dhbnRfbm9jYXNlZ2xvYgorKworKyMgRExMIGNyZWF0aW9uIHByb2dyYW0uCisrRExMVE9PTD0kbHRfRExMVE9PTAorKworKyMgQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllcy4KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKysKKyAjIFRoZSBhcmNoaXZlci4KKyBBUj0kbHRfQVIKKysKKysjIEZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlLgorIEFSX0ZMQUdTPSRsdF9BUl9GTEFHUworIAorKyMgSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyLgorK2FyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfYXJjaGl2ZXJfbGlzdF9zcGVjCisrCisgIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KKyBTVFJJUD0kbHRfU1RSSVAKKyAKK0BAIC0xNDAxNCw2ICsxNDcwNSwxMiBAQCBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworICMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCisgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4CisgCisrIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCisrbm1fZmlsZV9saXN0X3NwZWM9JGx0X25tX2ZpbGVfbGlzdF9zcGVjCisrCisrIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KKytsdF9zeXNyb290PSRsdF9zeXNyb290CisrCisgIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCisgb2JqZGlyPSRvYmpkaXIKKyAKK0BAIC0xNDAyMyw2ICsxNDcyMCw5IEBAIE1BR0lDX0NNRD0kTUFHSUNfQ01ECisgIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KKyBuZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCisgCisrIyBNYW5pZmVzdCB0b29sLgorK01BTklGRVNUX1RPT0w9JGx0X01BTklGRVNUX1RPT0wKKysKKyAjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCisgRFNZTVVUSUw9JGx0X0RTWU1VVElMCisgCitAQCAtMTQxMzcsMTIgKzE0ODM3LDEyIEBAIHdpdGhfZ2NjPSRHQ0MKKyAjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCisgbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZworIAorLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKy13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorLQorICMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorIHBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYworIAorKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKyt3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorKworICMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KKyBsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYworIAorQEAgLTE0MjI5LDkgKzE0OTI5LDYgQEAgaW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAorICMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorIGxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKKyAKKy0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCistZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAorLQorICMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorIGFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCisgCitAQCAtMTQyNDcsNiArMTQ5NDQsOSBAQCBpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcworICMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCisgcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHMKKyAKKysjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCisrcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kcworKworICMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorIGZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYworIAorQEAgLTE0Mjc5LDIxMCArMTQ5NzksMTY5IEBAIGx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorICAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CistICBzZWQgJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgY2FzZSAkeHNpX3NoZWxsIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKy0jIGNhbGw6CistIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKy0jICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKKy0jICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKy0jICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0jIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKy0jIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCistIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCistZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKy0gICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In0KKy19CistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PSR7MSUlPSp9CistICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKy0gICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7CistICBlc2FjCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSkKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgKikgIyBCb3VybmUgY29tcGF0aWJsZSBmdW5jdGlvbnMuCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCistICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkZGlybmFtZSJgCistICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorLSAgZWxzZQorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCistICBmaQorLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKKy19CistCistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLSMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsyfSBpbgorLSAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworLSAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CistICBlc2FjCistfQorLQorLSMgc2VkIHNjcmlwdHM6CistbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtW149XSpcKT0uKi9cMS87cScKKy1teV9zZWRfbG9uZ19hcmc9JzFzL14tW149XSo9Ly8nCistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bXi5dKiQvLmxvLydgCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiQxIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCistfQorLQorLV9MVF9FT0YKKy1lc2FjCistCistY2FzZSAkbHRfc2hlbGxfYXBwZW5kIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxKz1cJDIiCistfQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxPVwkJDFcJDIiCistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gIGVzYWMKKy0KKy0KKy0gIHNlZCAtbiAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS8sJHAnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKysgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKysgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisrCisrICBpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lIC9jXAorK2Z1bmNfZGlybmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Jhc2VuYW1lIC9jXAorK2Z1bmNfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAvY1wKKytmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3N0cmlwbmFtZSAoKSQvLC9efSAjIGZ1bmNfc3RyaXBuYW1lIC9jXAorK2Z1bmNfc3RyaXBuYW1lICgpXAorK3tcCisrXCAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlXAorK1wgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LlwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In1cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zdHJpcG5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X2xvbmdfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9sb25nX29wdCAvY1wKKytmdW5jX3NwbGl0X2xvbmdfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn1cCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz0kezEjKj19XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X2xvbmdfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCAvY1wKKytmdW5jX3NwbGl0X3Nob3J0X29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P31cCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X3Nob3J0X29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbG8ybyAoKSQvLC9efSAjIGZ1bmNfbG8ybyAvY1wKKytmdW5jX2xvMm8gKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOztcCisrXCAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbG8ybyBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfeGZvcm0gKCkkLywvXn0gIyBmdW5jX3hmb3JtIC9jXAorK2Z1bmNfeGZvcm0gKClcCisre1wKKysgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY194Zm9ybSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXJpdGggKCkkLywvXn0gIyBmdW5jX2FyaXRoIC9jXAorK2Z1bmNfYXJpdGggKClcCisre1wKKysgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FyaXRoIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sZW4gKCkkLywvXn0gIyBmdW5jX2xlbiAvY1wKKytmdW5jX2xlbiAoKVwKKyt7XAorKyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbGVuIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrZmkKKysKKytpZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZCAvY1wKKytmdW5jX2FwcGVuZCAoKVwKKyt7XAorKyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kX3F1b3RlZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCAvY1wKKytmdW5jX2FwcGVuZF9xdW90ZWQgKClcCisre1wKKytcICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iXAorK1wgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kX3F1b3RlZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JworKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2Vsc2UKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytmaQorKworK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mMjt9CisrZmkKKysKKysKKysgICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisgICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgICBjaG1vZCAreCAiJG9maWxlIgorIAorZGlmZiAtLWdpdCBhL2xkL2NvbmZpZ3VyZSBiL2xkL2NvbmZpZ3VyZQoraW5kZXggNDQwOGIwZC4uMmZiYWViZiAxMDA3NTUKKy0tLSBhL2xkL2NvbmZpZ3VyZQorKysrIGIvbGQvY29uZmlndXJlCitAQCAtNjU0LDggKzY1NCwxMSBAQCBPVE9PTAorIExJUE8KKyBOTUVESVQKKyBEU1lNVVRJTAorK01BTklGRVNUX1RPT0wKKyBSQU5MSUIKKythY19jdF9BUgorIEFSCisrRExMVE9PTAorIE9CSkRVTVAKKyBMTl9TCisgTk0KK0BAIC03NzYsNiArNzc5LDcgQEAgZW5hYmxlX3N0YXRpYworIHdpdGhfcGljCisgZW5hYmxlX2Zhc3RfaW5zdGFsbAorIHdpdGhfZ251X2xkCisrd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBlbmFibGVfbGlidG9vbF9sb2NrCisgZW5hYmxlX3BsdWdpbnMKKyBlbmFibGVfbGFyZ2VmaWxlCitAQCAtMTQ1Myw2ICsxNDU3LDggQEAgT3B0aW9uYWwgUGFja2FnZXM6CisgICAtLXdpdGgtcGljICAgICAgICAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCisgICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCisrICAtLXdpdGgtbGlidG9vbC1zeXNyb290PURJUiBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUgorKyAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLgorICAgLS13aXRoLWxpYi1wYXRoPWRpcjE6ZGlyMi4uLiAgc2V0IGRlZmF1bHQgTElCX1BBVEgKKyAgIC0td2l0aC1zeXNyb290PURJUiBTZWFyY2ggZm9yIHVzci9saWIgZXQgYWwgd2l0aGluIERJUi4KKyAgIC0td2l0aC16bGliICAgICAgICAgICAgIGluY2x1ZGUgemxpYiBzdXBwb3J0IChhdXRvL3llcy9ubykgZGVmYXVsdD1hdXRvCitAQCAtNTY0NSw4ICs1NjUxLDggQEAgZXNhYworIAorIAorIAorLW1hY3JvX3ZlcnNpb249JzIuMi43YScKKy1tYWNyb19yZXZpc2lvbj0nMS4zMTM0JworK21hY3JvX3ZlcnNpb249JzIuNCcKKyttYWNyb19yZXZpc2lvbj0nMS4zMjkzJworIAorIAorIAorQEAgLTU2ODYsNyArNTY5Miw3IEBAIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MuLi4gIiA+JjY7IH0KKyAjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KKy1pZiB0ZXN0ICJYYHByaW50IC1yIC0tIC1uIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorICAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgICBFQ0hPPSdwcmludCAtciAtLScKKyBlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorQEAgLTYzNzIsOCArNjM3OCw4IEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gIiA+JjY7CisgIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKKyB4c2lfc2hlbGw9bm8KKyAoIF9sdF9kdW1teT0iYS9iL2MiCistICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwiJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorLSAgICAgID0gYyxhL2IsLCBcCisrICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwke19sdF9kdW1teSM/P30iJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorKyAgICAgID0gYyxhL2IsYi9jLCBcCisgICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKKyAgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICYmIHhzaV9zaGVsbD15ZXMKK0BAIC02NDIyLDYgKzY0MjgsODAgQEAgZXNhYworIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICotKi1jeWd3aW4qICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCisrICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b190b29sX2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgorK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorK2Nhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfbGRfcmVsb2FkX2ZsYWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTY0MzgsNiArNjUxOCwxMSBAQCBjYXNlICRyZWxvYWRfZmxhZyBpbgorIGVzYWMKKyByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgY2FzZSAkaG9zdF9vcyBpbgorKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKysgICAgICByZWxvYWRfY21kcz1mYWxzZQorKyAgICBmaQorKyAgICA7OworICAgZGFyd2luKikKKyAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitAQCAtNjYwNiw3ICs2NjkxLDggQEAgbWluZ3cqIHwgcHczMiopCisgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICAgZWxzZQorLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKKysgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgorKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgIGZpCisgICA7OworQEAgLTY3NjAsNiArNjg0NiwyMSBAQCBlc2FjCisgZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKKyAkYXNfZWNobyAiJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KKysKKytmaWxlX21hZ2ljX2dsb2I9Cisrd2FudF9ub2Nhc2VnbG9iPW5vCisraWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKysgIGNhc2UgJGhvc3Rfb3MgaW4KKysgIG1pbmd3KiB8IHB3MzIqKQorKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcworKyAgICBlbHNlCisrICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bXDFdXC9bXDFdXC9nOy9nImAKKysgICAgZmkKKysgICAgOzsKKysgIGVzYWMKKytmaQorKworIGZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAorIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorQEAgLTY3NzUsOSArNjg3NiwxNjIgQEAgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisgCisgCisgCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK0RMTFRPT0w9JGFjX2N2X3Byb2dfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKKyskYXNfZWNobyAiJERMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N0X0RMTFRPT0w9JERMTFRPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iJGFjX2N0X0RMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJkbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9ETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfRExMVE9PTCIgPSB4OyB0aGVuCisrICAgIERMTFRPT0w9ImZhbHNlIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAorKyAgZmkKKytlbHNlCisrICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgorK2ZpCisrCisrdGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorKworKworKworKworKworKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKysKKytjYXNlICRob3N0X29zIGluCisrY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAorKyAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisrICAqLS1pZGVudGlmeS1zdHJpY3QqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKKysgICAgOzsKKysgICopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjaworKyAgICA7OworKyAgZXNhYworKyAgOzsKKysqKQorKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCisrICA7OworK2VzYWMKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNjsgfQorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKysKKysKKysKKysKKysKKysKKysKKyBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCisrICBmb3IgYWNfcHJvZyBpbiBhcgorKyAgZG8KKysgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjc5Myw3ICs3MDQ3LDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX0FSPSIke2FjX3Rvb2xfcHJlZml4fWFyIgorKyAgICBhY19jdl9wcm9nX0FSPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNjgxMywxMSArNzA2NywxNSBAQCAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisgCisrICAgIHRlc3QgLW4gIiRBUiIgJiYgYnJlYWsKKysgIGRvbmUKKyBmaQorLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FSIjsgdGhlbgorK2lmIHRlc3QgLXogIiRBUiI7IHRoZW4KKyAgIGFjX2N0X0FSPSRBUgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCisrICBmb3IgYWNfcHJvZyBpbiBhcgorK2RvCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02ODMzLDcgKzcwOTEsNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNjg1Miw2ICs3MTEwLDEwIEBAIGVsc2UKKyAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisrCisrICB0ZXN0IC1uICIkYWNfY3RfQVIiICYmIGJyZWFrCisrZG9uZQorKworICAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCisgICAgIEFSPSJmYWxzZSIKKyAgIGVsc2UKK0BAIC02ODYzLDEyICs3MTI1LDEyIEBAIGFjX3Rvb2xfd2FybmVkPXllcyA7OworIGVzYWMKKyAgICAgQVI9JGFjX2N0X0FSCisgICBmaQorLWVsc2UKKy0gIEFSPSIkYWNfY3ZfcHJvZ19BUiIKKyBmaQorIAorLXRlc3QgLXogIiRBUiIgJiYgQVI9YXIKKy10ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorKzogJHtBUj1hcn0KKys6ICR7QVJfRkxBR1M9Y3J1fQorKworKworIAorIAorIAorQEAgLTY4NzgsNiArNzE0MCw2MiBAQCB0ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9hcl9hdF9maWxlK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfYXJfYXRfZmlsZT1ubworKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKKysgICAgICBsdF9hcl90cnk9JyRBUiAkQVJfRkxBR1MgbGliY29uZnRlc3QuYSBAY29uZnRlc3QubHN0ID4mNScKKysgICAgICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgorKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKKysJeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisrICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQorKworK2ZpCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyX2F0X2ZpbGUiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfYXJfYXRfZmlsZSIgPiY2OyB9CisrCisraWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQorK2Vsc2UKKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQorK2ZpCisrCisrCisrCisrCisrCisgCisgCisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorQEAgLTcyMTQsOCArNzUzMiw4IEBAIGVzYWMKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorIAorICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKyAKKyAjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KKyBvcHRfY3I9CitAQCAtNzI1MSw2ICs3NTY5LDcgQEAgZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworICAgZWxzZQorICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICAgZmkKKysgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKKyAKKyAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICAgcGlwZV93b3Jrcz1ubworQEAgLTcyOTIsNiArNzYxMSwxOCBAQCBfTFRfRU9GCisgICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKysvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKysjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKysvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbHNlCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKysjZW5kaWYKKysKKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyAjZW5kaWYKK0BAIC03MzAzLDcgKzc2MzQsNyBAQCBfTFRfRU9GCisgCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgCisgLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworLWNvbnN0IHN0cnVjdCB7CisrTFRfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICB2b2lkICAgICAgICphZGRyZXNzOworIH0KK0BAIC03MzI5LDggKzc2NjAsOCBAQCBzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworIF9MVF9FT0YKKyAJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorIAkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorLQkgIGx0X3NhdmVfTElCUz0iJExJQlMiCistCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKysJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorIAkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKKyAJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKK0BAIC03MzQwLDggKzc2NzEsOCBAQCBfTFRfRU9GCisgICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAJICAgIHBpcGVfd29ya3M9eWVzCisgCSAgZmkKKy0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisrCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisgCWVsc2UKKyAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKKyAJZmkKK0BAIC03Mzc4LDYgKzc3MDksMTkgQEAgZWxzZQorICRhc19lY2hvICJvayIgPiY2OyB9CisgZmkKKyAKKysjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KKytpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW0BdRklMRScgPi9kZXYvbnVsbDsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZmkKKysKKysKKysKKysKKysKKysKKysKKyAKKyAKKyAKK0BAIC03Mzk4LDYgKzc3NDIsNDIgQEAgZmkKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzcm9vdC4uLiAiID4mNjsgfQorKworKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlidG9vbC1zeXNyb290IHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke3dpdGhfbGlidG9vbF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuIDoKKysgIHdpdGh2YWw9JHdpdGhfbGlidG9vbF9zeXNyb290OworK2Vsc2UKKysgIHdpdGhfbGlidG9vbF9zeXNyb290PW5vCisrZmkKKysKKysKKytsdF9zeXNyb290PQorK2Nhc2UgJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0gaW4gIygKKysgeWVzKQorKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorKyAgIGZpCisrICAgOzsgIygKKysgLyopCisrICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrICAgOzsgIygKKysgbm98JycpCisrICAgOzsgIygKKysgKikKKysgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNQorKyRhc19lY2hvICIke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY2OyB9CisrICAgYXNfZm5fZXJyb3IgIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1CisrICAgOzsKKytlc2FjCisrCisrIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke2x0X3N5c3Jvb3Q6LW5vfSIgPiY1CisrJGFzX2VjaG8gIiR7bHRfc3lzcm9vdDotbm99IiA+JjY7IH0KKysKKysKKysKKysKKyAKKyAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTc2MDUsNiArNzk4NSwxMjMgQEAgZXNhYworIAorIG5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorIAorK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1tdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJE1BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIke2FjX3Rvb2xfcHJlZml4fW10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytNQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRNQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdF9NQU5JRkVTVF9UT09MPSRNQU5JRkVTVF9UT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgbXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0iJGFjX2N0X01BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSJtdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X01BTklGRVNUX1RPT0wiID0geDsgdGhlbgorKyAgICBNQU5JRkVTVF9UT09MPSI6IgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgTUFOSUZFU1RfVE9PTD0kYWNfY3RfTUFOSUZFU1RfVE9PTAorKyAgZmkKKytlbHNlCisrICBNQU5JRkVTVF9UT09MPSIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIgorK2ZpCisrCisrdGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JjUKKysgICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisrICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKKysgIGZpCisrICBybSAtZiBjb25mdGVzdCoKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY2OyB9CisraWYgdGVzdCAieCRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiICE9IHh5ZXM7IHRoZW4KKysgIE1BTklGRVNUX1RPT0w9OgorK2ZpCisrCisrCisrCisrCisrCisgCisgICBjYXNlICRob3N0X29zIGluCisgICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCitAQCAtODE2OCw2ICs4NjY1LDggQEAgX0xUX0VPRgorICAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mNQorICAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JjUKKyAgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiY1CisrICAgICAgZWNobyAiJFJBTkxJQiBsaWJjb25mdGVzdC5hIiA+JjUKKysgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mNQorICAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgorIGludCBtYWluKCkgeyByZXR1cm4gMDt9CisgX0xUX0VPRgorQEAgLTgyMzYsNiArODczNSwxNiBAQCBkb25lCisgCisgCisgCisrZnVuY19zdHJpcG5hbWVfY25mICgpCisreworKyAgY2FzZSAkezJ9IGluCisrICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworKyAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworKyAgZXNhYworK30gIyBmdW5jX3N0cmlwbmFtZV9jbmYKKysKKysKKysKKyAKKyAKKyAjIFNldCBvcHRpb25zCitAQCAtODM2NCw3ICs4ODczLDggQEAgZmkKKyBMSUJUT09MX0RFUFM9IiRsdG1haW4iCisgCisgIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KKy1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKytMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpciknCisrTElCVE9PTD0iJExJQlRPT0wvJHtob3N0X2FsaWFzfS1saWJ0b29sIgorIAorIAorIAorQEAgLTg0NTMsNyArODk2Myw3IEBAIGFpeDMqKQorIGVzYWMKKyAKKyAjIEdsb2JhbCB2YXJpYWJsZXM6Cistb2ZpbGU9bGlidG9vbAorK29maWxlPSR7aG9zdF9hbGlhc30tbGlidG9vbAorIGNhbl9idWlsZF9zaGFyZWQ9eWVzCisgCisgIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCitAQCAtODc1MSw4ICs5MjYxLDYgQEAgZmkKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KKyAKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKy0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAorICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKK0BAIC04OTE4LDYgKzk0MjYsMTIgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAJbHRfcHJvZ19jb21waWxlcl9waWM9Jy0tc2hhcmVkJworIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLS1zdGF0aWMnCisgCTs7CisrICAgICAgbmFnZm9yKikKKysJIyBOQUcgRm9ydHJhbiBjb21waWxlcgorKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsLVdsLCwnCisrCWx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJworKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisrCTs7CisgICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKyAJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKK0BAIC04OTgwLDcgKzk0OTQsNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCisrICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICAqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7CitAQCAtOTAzNywxMyArOTU1MSwxNyBAQCBjYXNlICRob3N0X29zIGluCisgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgIDs7CisgZXNhYworLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNQorLSRhc19lY2hvICIkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorLQorLQorLQorLQorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljPSRsdF9wcm9nX2NvbXBpbGVyX3BpYworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CisrbHRfcHJvZ19jb21waWxlcl9waWM9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljCisgCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KK0BAIC05MTA0LDYgKzk2MjIsMTEgQEAgZmkKKyAKKyAKKyAKKysKKysKKysKKysKKysKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorICMKK0BAIC05NDU0LDcgKzk5NzcsOCBAQCBfTFRfRU9GCisgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhjbHVkZV9leHBzeW1zPSdbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnCisgCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKK0BAIC05NTAyLDcgKzEwMDI2LDcgQEAgX0xUX0VPRgorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKyAJICYmIHRlc3QgIiR0bXBfZGlldCIgPSBubworICAgICAgIHRoZW4KKy0JdG1wX2FkZGZsYWc9CisrCXRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworIAl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKKyAJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisgICAgICAgICBwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCitAQCAtOTU1MywxMiArMTAwNzcsMTIgQEAgX0xUX0VPRgorIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nLXJwYXRoICRsaWJkaXInCistCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisrCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworIAkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CistCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgCSAgZmkKKyAJICA7OworIAllc2FjCitAQCAtOTU3Miw4ICsxMDA5Niw4IEBAIF9MVF9FT0YKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworIAl3bGFyYz0KKyAgICAgICBlbHNlCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGZpCisgICAgICAgOzsKKyAKK0BAIC05NTkxLDggKzEwMTE1LDggQEAgX0xUX0VPRgorIAorIF9MVF9FT0YKKyAgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTk2MzgsOCArMTAxNjIsOCBAQCBfTFRfRU9GCisgCisgICAgICopCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtOTc2OSw3ICsxMDI5MywxMyBAQCBfTFRfRU9GCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCisgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysgICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC05NzgyLDIyICsxMDMxMiwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCitAQCAtOTgwOSw3ICsxMDM0NiwxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJZWxzZQorIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgCSAjIGVtcHR5IGV4ZWN1dGFibGUuCistCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtOTgyMiwyMiArMTAzNjUsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAJIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKK0BAIC05ODgxLDIxICsxMDQzMSw2NCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworLSAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCistICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKy0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCistICAgICAgbGliZXh0PWxpYgorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCistICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKy0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorLSAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKy0gICAgICBmaXhfc3JjZmlsZV9wYXRoPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKKy0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisrICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgICBjbCopCisrCSMgTmF0aXZlIE1TVkMKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworKwlmaWxlX2xpc3Rfc3BlYz0nQCcKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKysJICAgIHNlZCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZWxzZQorKwkgICAgc2VkIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBmaX4KKysJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisrCSAgbGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgKT0ndHJ1ZScKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKwkjIERvbid0IHVzZSByYW5saWIKKysJb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworKwlwb3N0bGlua19jbWRzPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKysJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisrCSAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICopCisrCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgOzsKKysJICBlc2FjfgorKwkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisrCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisrCSAgZmknCisrCTs7CisrICAgICAgKikKKysJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisrCW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCisrCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisrCW9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJOzsKKysgICAgICBlc2FjCisgICAgICAgOzsKKyAKKyAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKK0BAIC05OTU2LDcgKzEwNTQ5LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCitAQCAtOTk2NCw3ICsxMDU1Nyw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4OSopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBmaQorQEAgLTk5ODAsNyArMTA1NzMsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDEwKikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgIGZpCitAQCAtMTAwMDQsMTAgKzEwNTk3LDEwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJaWE2NCopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAkqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWVzYWMKKyAgICAgICBlbHNlCitAQCAtMTAwODYsMjMgKzEwNjc5LDM2IEBAIGZpCisgCisgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisgCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKyAJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KKy0gICAgICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCistICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCistICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCisrCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorKwkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCisrCSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistaW50IGZvbyh2b2lkKSB7fQorK2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH0KKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CistICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCistCisrICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXMKKytlbHNlCisrICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD1ubworIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNjsgfQorKwlpZiB0ZXN0ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID0geWVzOyB0aGVuCisrICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWZpCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKK0BAIC0xMDE4Nyw3ICsxMDc5Myw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICBlbHNlCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworQEAgLTEwMjA2LDkgKzEwODEyLDkgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCXdsYXJjPScke3dsfScKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKy0JICAkQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworKwkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgIGVsc2UKKyAJY2FzZSBgJENDIC1WIDI+JjFgIGluCisgCSoiQ29tcGlsZXJzIDUuMCIqKQorQEAgLTEwNzg0LDggKzExMzkwLDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgbmVlZF92ZXJzaW9uPW5vCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAKKy0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKysgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKysgIHllcywqKQorKyAgICAjIGdjYworICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorQEAgLTEwODE4LDEzICsxMTQyNSw3MSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKysgICAgOzsKKysKKysgICosY2wqKQorKyAgICAjIE5hdGl2ZSBNU1ZDCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisrCisrICAgIGNhc2UgJGJ1aWxkX29zIGluCisrICAgIG1pbmd3KikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisrICAgICAgbHRfc2F2ZV9pZnM9JElGUworKyAgICAgIElGUz0nOycKKysgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisrICAgICAgZG8KKysgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisrICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKysgICAgICBkb25lCisrICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorKyAgICAgIDs7CisrICAgIGN5Z3dpbiopCisrICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKysgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKysgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICBmaQorKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKysgICAgICA7OworKyAgICBlc2FjCisrCisrICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKysgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisrICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisrICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisrICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisrICAgICAgICRSTSBcJGRscGF0aCcKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgIDs7CisgCisgICAqKQorKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgIDs7CisgICBlc2FjCistICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgIDs7CitAQCAtMTA5MTYsNyArMTE1ODEsNyBAQCBoYWlrdSopCisgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9iZW9zL3N5c3RlbS9saWInCisrICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIDs7CisgCitAQCAtMTE3MTIsNyArMTIzNzcsNyBAQCBlbHNlCisgICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKy0jbGluZSAxMTcxNSAiY29uZmlndXJlIgorKyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyAKKyAjaWYgSEFWRV9ETEZDTl9ICitAQCAtMTE3NTYsMTAgKzEyNDIxLDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTE4MTgsNyArMTI0ODMsNyBAQCBlbHNlCisgICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKy0jbGluZSAxMTgyMSAiY29uZmlndXJlIgorKyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyAKKyAjaWYgSEFWRV9ETEZDTl9ICitAQCAtMTE4NjIsMTAgKzEyNTI3LDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTIyNTcsNiArMTI5MjIsNyBAQCAkUk0gLXIgY29uZnRlc3QqCisgCisgICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICAgbHRfc2F2ZV9DQz0kQ0MKKysgIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAgIGx0X3NhdmVfTEQ9JExECisgICBsdF9zYXZlX0dDQz0kR0NDCisgICBHQ0M9JEdYWAorQEAgLTEyMjc0LDYgKzEyOTQwLDcgQEAgJFJNIC1yIGNvbmZ0ZXN0KgorICAgZmkKKyAgIHRlc3QgLXogIiR7TERDWFgrc2V0fSIgfHwgTEQ9JExEQ1hYCisgICBDQz0ke0NYWC0iYysrIn0KKysgIENGTEFHUz0kQ1hYRkxBR1MKKyAgIGNvbXBpbGVyPSRDQworICAgY29tcGlsZXJfQ1hYPSRDQworICAgZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCitAQCAtMTI0MTMsOCArMTMwODAsOCBAQCB3aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKKyAgICAgICAjIENoZWNrIGlmIEdOVSBDKysgdXNlcyBHTlUgbGQgYXMgdGhlIHVuZGVybHlpbmcgbGlua2VyLCBzaW5jZSB0aGUKKyAgICAgICAjIGFyY2hpdmluZyBjb21tYW5kcyBiZWxvdyBhc3N1bWUgdGhhdCBHTlUgbGQgaXMgYmVpbmcgdXNlZC4KKyAgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCistICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKyAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDICRwaWNfZmxhZyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworIAorICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKK0BAIC0xMjU1Niw3ICsxMzIyMywxMyBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZQorICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9Jy1iZXJvaycKKyAgICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5CisgICAgICAgICAgICMgZXhlY3V0YWJsZS4KKy0gICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKyAgICAgICAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoX19DWFgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTEyNTY5LDIyICsxMzI0MiwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY3h4X3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF9fQ1hYIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoX19DWFgiOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWAorK2ZpCisgCisgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorIAorQEAgLTEyNTk3LDcgKzEzMjc3LDEzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICAgICBlbHNlCisgCSAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAJICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0JICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtMTI2MTAsMjIgKzEzMjk2LDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jeHhfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoX19DWFgiOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF9fQ1hYCisrZmkKKyAKKyAJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorIAkgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKK0BAIC0xMjY2OCwyOSArMTMzNjEsNzUgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgICA7OworIAorICAgICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKy0gICAgICAgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCBDWFgpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorLSAgICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKy0gICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctTCRsaWJkaXInCistICAgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJworLSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPXVuc3VwcG9ydGVkCistICAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPW5vCistICAgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD15ZXMKKy0KKy0gICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKy0gICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworLSAgICAgICAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCistICAgICAgICAgICMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCistICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorLQkgICAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworLSAgICAgICAgICBlbHNlCistCSAgICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKy0JICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CistICAgICAgICAgIGZpfgorLSAgICAgICAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCistICAgICAgICBlbHNlCistICAgICAgICAgIGxkX3NobGlic19DWFg9bm8KKy0gICAgICAgIGZpCistICAgICAgICA7OworKwljYXNlICRHWFgsJGNjX2Jhc2VuYW1lIGluCisrCSxjbCogfCBubyxjbCopCisrCSAgIyBOYXRpdmUgTVNWQworKwkgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKysJICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScgJworKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAorKwkgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9eWVzCisrCSAgZmlsZV9saXN0X3NwZWNfQ1hYPSdAJworKwkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCSAgbGliZXh0PWxpYgorKwkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwkgIHNocmV4dF9jbWRzPSIuZGxsIgorKwkgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKysJICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKysJICAgICAgJFNFRCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgICBlbHNlCisrCSAgICAgICRTRUQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgICAgZml+CisrCSAgICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisrCSAgICBsaW5rbmFtZXM9JworKwkgICMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJICAjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgQ1hYKT0ndHJ1ZScKKysJICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD15ZXMKKysJICAjIERvbid0IHVzZSByYW5saWIKKysJICBvbGRfcG9zdGluc3RhbGxfY21kc19DWFg9J2NobW9kIDY0NCAkb2xkbGliJworKwkgIHBvc3RsaW5rX2NtZHNfQ1hYPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorKwkgICAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICAgKikKKysJCWx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJCWx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCQk7OworKwkgICAgZXNhY34KKysJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkbHRfb3V0cHV0ZmlsZSJ+CisrCSAgICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKysJICAgIGZpJworKwkgIDs7CisrCSopCisrCSAgIyBnKysKKysJICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgQ1hYKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKysJICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctTCRsaWJkaXInCisrCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1hbGwtc3ltYm9scycKKysJICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKKysJICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPW5vCisrCSAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFg9eWVzCisrCisrCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworKwkgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorKwkgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKysJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisrCSAgICBlbHNlCisrCSAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworKwkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworKwkgICAgZml+CisrCSAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisrCSAgZWxzZQorKwkgICAgbGRfc2hsaWJzX0NYWD1ubworKwkgIGZpCisrCSAgOzsKKysJZXNhYworKwk7OworICAgICAgIGRhcndpbiogfCByaGFwc29keSopCisgCisgCitAQCAtMTI3OTYsNyArMTM1MzUsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAgICAgICAgICAgICA7OworICAgICAgICAgICAqKQorICAgICAgICAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCistICAgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKysgICAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgICAgICAgIGxkX3NobGlic19DWFg9bm8KK0BAIC0xMjg2NywxMCArMTM2MDYsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKyAJICAgICAgICAgICAgOzsKKyAJICAgICAgICAgIGlhNjQqKQorLQkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgICAgICAgICAgIDs7CisgCSAgICAgICAgICAqKQorLQkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKysJICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworIAkgICAgICAgICAgICA7OworIAkgICAgICAgIGVzYWMKKyAJICAgICAgZmkKK0BAIC0xMjkxMSw5ICsxMzY1MCw5IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICAgICAqKQorIAkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAJICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCistCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCSAgICAgIGVsc2UKKy0JICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgIC1vICRsaWInCisrCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgLW8gJGxpYicKKyAJICAgICAgZmkKKyAJICAgIGZpCisgCSAgICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKK0BAIC0xMjk4MywyMCArMTM3MjIsMjAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgICAgIHByZWxpbmtfY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgCQlybSAtcmYgJHRwbGRpcn4KKyAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9ianMgJGxpYm9ianMgJGNvbXBpbGVfZGVwbGlic34KKy0JCWNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgIicKKysJCWNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCInCisgCSAgICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorIAkJcm0gLXJmICR0cGxkaXJ+CisgCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvbGRvYmpzJG9sZF9kZXBsaWJzfgorLQkJJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYH4KKysJCSRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgfgorIAkJJFJBTkxJQiAkb2xkbGliJworIAkgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorIAkJcm0gLXJmICR0cGxkaXJ+CisgCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKy0JCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCisrCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKyAJICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgCQlybSAtcmYgJHRwbGRpcn4KKyAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorLQkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAJICAgICAgOzsKKyAJICAgICopICMgVmVyc2lvbiA2IGFuZCBhYm92ZSB1c2Ugd2VhayBzeW1ib2xzCisgCSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworQEAgLTEzMTkxLDcgKzEzOTMwLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCQkgIDs7CisgCSAgICAgICAgKikKKy0JICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwkgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAkJICA7OworIAkgICAgICBlc2FjCisgCitAQCAtMTMyMzcsNyArMTM5NzYsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgICBzb2xhcmlzKikKKyAgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgICAgIENDKikKKysgICAgICAgICAgQ0MqIHwgc3VuQ0MqKQorIAkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworICAgICAgICAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKKyAJICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nIC16ZGVmcycKK0BAIC0xMzI3OCw5ICsxNDAxNyw5IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisgCSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LXogJHt3bH1kZWZzJworIAkgICAgICBpZiAkQ0MgLS12ZXJzaW9uIHwgJEdSRVAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgorLQkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisrCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisgCSAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKy0JCSAgJENDIC1zaGFyZWQgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworKwkJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworIAorIAkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKyAJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KK0BAIC0xMzQxNSw2ICsxNDE1NCwxMyBAQCBwcml2YXRlOgorIH07CisgX0xUX0VPRgorIAorKworK19sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKytjYXNlICIkQ0MgJENGTEFHUyAiIGluICMoCisrKlwgLWZsdG8qXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby1sdG8iIDs7CisrKlwgLWZ3aG9wcipcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLXdob3ByIiA7OworK2VzYWMKKysKKyBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0xMzQyOCw3ICsxNDE3NCw3IEBAIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT1ubworIAorICAgZm9yIHAgaW4gYGV2YWwgIiRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZCJgOyBkbworLSAgICBjYXNlICRwIGluCisrICAgIGNhc2UgJHtwcmV2fSR7cH0gaW4KKyAKKyAgICAgLUwqIHwgLVIqIHwgLWwqKQorICAgICAgICAjIFNvbWUgY29tcGlsZXJzIHBsYWNlIHNwYWNlIGJldHdlZW4gIi17TCxSfSIgYW5kIHRoZSBwYXRoLgorQEAgLTEzNDM3LDEzICsxNDE4MywyMiBAQCBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgICAgICAgICAgdGVzdCAkcCA9ICItUiI7IHRoZW4KKyAJIHByZXY9JHAKKyAJIGNvbnRpbnVlCistICAgICAgIGVsc2UKKy0JIHByZXY9CisgICAgICAgIGZpCisgCisrICAgICAgICMgRXhwYW5kIHRoZSBzeXNyb290IHRvIGVhc2UgZXh0cmFjdGluZyB0aGUgZGlyZWN0b3JpZXMgbGF0ZXIuCisrICAgICAgIGlmIHRlc3QgLXogIiRwcmV2IjsgdGhlbgorKyAgICAgICAgIGNhc2UgJHAgaW4KKysgICAgICAgICAtTCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLUwnICcnICIkcCI7IHByZXY9LUw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworKyAgICAgICAgIC1SKikgZnVuY19zdHJpcG5hbWVfY25mICctUicgJycgIiRwIjsgcHJldj0tUjsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisrICAgICAgICAgLWwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1sJyAnJyAiJHAiOyBwcmV2PS1sOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKysgICAgICAgICBlc2FjCisrICAgICAgIGZpCisrICAgICAgIGNhc2UgJHAgaW4KKysgICAgICAgPSopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnPScgJycgIiRwIjsgcD0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKysgICAgICAgZXNhYworICAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorLQkgY2FzZSAkcCBpbgorLQkgLUwqIHwgLVIqKQorKwkgY2FzZSAke3ByZXZ9IGluCisrCSAtTCB8IC1SKQorIAkgICAjIEludGVybmFsIGNvbXBpbGVyIGxpYnJhcnkgcGF0aHMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhvc2UKKyAJICAgIyBwcm92aWRlZCB0aGUgdXNlci4gIFRoZSBwb3N0ZGVwcyBhbHJlYWR5IGNvbWUgYWZ0ZXIgdGhlCisgCSAgICMgdXNlciBzdXBwbGllZCBsaWJzIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyB0aGVtLgorQEAgLTEzNDYzLDggKzE0MjE4LDEwIEBAIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorIAkgICBwb3N0ZGVwc19DWFg9IiR7cG9zdGRlcHNfQ1hYfSAke3ByZXZ9JHtwfSIKKyAJIGZpCisgICAgICAgIGZpCisrICAgICAgIHByZXY9CisgICAgICAgIDs7CisgCisrICAgICoubHRvLiRvYmpleHQpIDs7ICMgSWdub3JlIEdDQyBMVE8gb2JqZWN0cworICAgICAqLiRvYmpleHQpCisgICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3Qgb2JqZWN0IGZpbGUgb25seSBzaG93cyB1cAorICAgICAgICAjIG9uY2UgaW4gdGhlIGNvbXBpbGVyIG91dHB1dC4KK0BAIC0xMzUwMCw2ICsxNDI1Nyw3IEBAIGVsc2UKKyBmaQorIAorICRSTSAtZiBjb25mZXN0LiRvYmpleHQKKytDRkxBR1M9JF9sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTCisgCisgIyBQT1JUTUU6IG92ZXJyaWRlIGFib3ZlIHRlc3Qgb24gc3lzdGVtcyB3aGVyZSBpdCBpcyBicm9rZW4KKyBjYXNlICRob3N0X29zIGluCitAQCAtMTM1MzUsNyArMTQyOTMsNyBAQCBsaW51eCopCisgCisgc29sYXJpcyopCisgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgQ0MqKQorKyAgQ0MqIHwgc3VuQ0MqKQorICAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKKyAgICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCisgICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKK0BAIC0xMzYwMCw4ICsxNDM1OCw2IEBAIGZpCisgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0KKyAKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKy0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAorICAgIyBDKysgc3BlY2lmaWMgY2FzZXMgZm9yIHBpYywgc3RhdGljLCB3bCwgZXRjLgorICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KK0BAIC0xMzcwNiw2ICsxNDQ2MiwxMSBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAkgIDs7CisgCWVzYWMKKyAJOzsKKysgICAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqIHwgY2VnY2MqKQorKwkjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisrCSMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisrCWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLURETExfRVhQT1JUJworKwk7OworICAgICAgIGRndXgqKQorIAljYXNlICRjY19iYXNlbmFtZSBpbgorIAkgIGVjKysqKQorQEAgLTEzODU4LDcgKzE0NjE5LDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAJOzsKKyAgICAgICBzb2xhcmlzKikKKyAJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0JICBDQyopCisrCSAgQ0MqIHwgc3VuQ0MqKQorIAkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworIAkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKyAJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCitAQCAtMTM5MjMsMTAgKzE0Njg0LDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIC1EUElDIgorICAgICA7OworIGVzYWMKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY1CistJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgiID4mNjsgfQorLQorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFg9JGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWAorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFgiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA+JjY7IH0KKytsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWAorIAorICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCitAQCAtMTM5ODQsNiArMTQ3NTIsOCBAQCBmaQorIAorIAorIAorKworKworICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisgIworQEAgLTE0MTYxLDYgKzE0OTMxLDcgQEAgZmkKKyAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAKKyAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICBleGNsdWRlX2V4cHN5bXNfQ1hYPSdfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionCisgICBjYXNlICRob3N0X29zIGluCisgICBhaXhbNC05XSopCisgICAgICMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorQEAgLTE0MTc1LDE1ICsxNDk0NiwyMCBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZQorICAgICA7OworICAgcHczMiopCisgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSIkbHRkbGxfY21kcyIKKy0gIDs7CisrICAgIDs7CisgICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87L14uKlsgXV9fbm1fXy9zL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCistICA7OworKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICBjbCopIDs7CisrICAgICopCisrICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleGNsdWRlX2V4cHN5bXNfQ1hYPSdbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnCisrICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworICAgKikKKyAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKy0gIDs7CisrICAgIDs7CisgICBlc2FjCistICBleGNsdWRlX2V4cHN5bXNfQ1hYPSdfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionCisgCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsZF9zaGxpYnNfQ1hYIiA+JjUKKyAkYXNfZWNobyAiJGxkX3NobGlic19DWFgiID4mNjsgfQorQEAgLTE0NDQ2LDggKzE1MjIyLDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgbmVlZF92ZXJzaW9uPW5vCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAKKy0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKysgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKysgIHllcywqKQorKyAgICAjIGdjYworICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorQEAgLTE0NDc5LDEzICsxNTI1Niw3MSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKysgICAgOzsKKysKKysgICosY2wqKQorKyAgICAjIE5hdGl2ZSBNU1ZDCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisrCisrICAgIGNhc2UgJGJ1aWxkX29zIGluCisrICAgIG1pbmd3KikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisrICAgICAgbHRfc2F2ZV9pZnM9JElGUworKyAgICAgIElGUz0nOycKKysgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisrICAgICAgZG8KKysgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisrICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKysgICAgICBkb25lCisrICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorKyAgICAgIDs7CisrICAgIGN5Z3dpbiopCisrICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKysgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKysgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICBmaQorKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKysgICAgICA7OworKyAgICBlc2FjCisrCisrICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKysgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisrICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisrICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisrICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisrICAgICAgICRSTSBcJGRscGF0aCcKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgIDs7CisgCisgICAqKQorKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgIDs7CisgICBlc2FjCistICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgIDs7CitAQCAtMTQ1NzYsNyArMTU0MTEsNyBAQCBoYWlrdSopCisgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9iZW9zL3N5c3RlbS9saWInCisrICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIDs7CisgCitAQCAtMTUwMzUsNiArMTU4NzAsNyBAQCBmaQorICAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisgCisgICBDQz0kbHRfc2F2ZV9DQworKyAgQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworICAgTERDWFg9JExECisgICBMRD0kbHRfc2F2ZV9MRAorICAgR0NDPSRsdF9zYXZlX0dDQworQEAgLTE3ODA3LDEzICsxODY0MywyMCBAQCBleGVleHQ9J2AkRUNITyAiJGV4ZWV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfdW5zZXQ9J2AkRUNITyAiJGx0X3Vuc2V0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9TUDJOTD0nYCRFQ0hPICIkbHRfU1AyTkwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X05MMlNQPSdgJEVDSE8gIiRsdF9OTDJTUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfY3ZfdG9faG9zdF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcmVsb2FkX2ZsYWc9J2AkRUNITyAiJHJlbG9hZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfY21kcz0nYCRFQ0hPICIkcmVsb2FkX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE9CSkRVTVA9J2AkRUNITyAiJE9CSkRVTVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSdgJEVDSE8gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9tYWdpY19jbWQ9J2AkRUNITyAiJGZpbGVfbWFnaWNfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytmaWxlX21hZ2ljX2dsb2I9J2AkRUNITyAiJGZpbGVfbWFnaWNfZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrd2FudF9ub2Nhc2VnbG9iPSdgJEVDSE8gIiR3YW50X25vY2FzZWdsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK0RMTFRPT0w9J2AkRUNITyAiJERMTFRPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSdgJEVDSE8gIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgQVI9J2AkRUNITyAiJEFSIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUl9GTEFHUz0nYCRFQ0hPICIkQVJfRkxBR1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2FyY2hpdmVyX2xpc3Rfc3BlYz0nYCRFQ0hPICIkYXJjaGl2ZXJfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBTVFJJUD0nYCRFQ0hPICIkU1RSSVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFJBTkxJQj0nYCRFQ0hPICIkUkFOTElCIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBvbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE3ODI4LDE0ICsxODY3MSwxNyBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRTRUQgIiRkZQorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytubV9maWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkbm1fZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3N5c3Jvb3Q9J2AkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9iamRpcj0nYCRFQ0hPICIkb2JqZGlyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBNQUdJQ19DTUQ9J2AkRUNITyAiJE1BR0lDX0NNRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1sdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBuZWVkX2xvY2tzPSdgJEVDSE8gIiRuZWVkX2xvY2tzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytNQU5JRkVTVF9UT09MPSdgJEVDSE8gIiRNQU5JRkVTVF9UT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBEU1lNVVRJTD0nYCRFQ0hPICIkRFNZTVVUSUwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE5NRURJVD0nYCRFQ0hPICIkTk1FRElUIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBMSVBPPSdgJEVDSE8gIiRMSVBPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNzg2OCwxMiArMTg3MTQsMTIgQEAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3EKKyBoYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5oZXJpdF9ycGF0aD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbGlua19hbGxfZGVwbGlicz0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistZml4X3NyY2ZpbGVfcGF0aD0nYCRFQ0hPICIkZml4X3NyY2ZpbGVfcGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4cG9ydF9zeW1ib2xzX2NtZHM9J2AkRUNITyAiJGV4cG9ydF9zeW1ib2xzX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4Y2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcHJlbGlua19jbWRzPSdgJEVDSE8gIiRwcmVsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3Bvc3RsaW5rX2NtZHM9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9J2AkRUNITyAiJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBuZWVkX2xpYl9wcmVmaXg9J2AkRUNITyAiJG5lZWRfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTc5MTIsOCArMTg3NTgsOCBAQCBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nYCRFQ0hPICIkb2xkX2FyY2hpdmVfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZQorIGNvbXBpbGVyX0NYWD0nYCRFQ0hPICIkY29tcGlsZXJfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBHQ0NfQ1hYPSdgJEVDSE8gIiRHQ0NfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFg9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbHRfcHJvZ19jb21waWxlcl93bF9DWFg9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfcHJvZ19jb21waWxlcl93bF9DWFg9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD0nYCRFQ0hPICIkYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNzk0MCwxMiArMTg3ODYsMTIgQEAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYIiB8ICRTRUQgIiRkZWxheV8KKyBoYXJkY29kZV9hdXRvbWF0aWNfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmhlcml0X3JwYXRoX0NYWD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistZml4X3NyY2ZpbGVfcGF0aF9DWFg9J2AkRUNITyAiJGZpeF9zcmNmaWxlX3BhdGhfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluY2x1ZGVfZXhwc3ltc19DWFg9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHByZWxpbmtfY21kc19DWFg9J2AkRUNITyAiJHByZWxpbmtfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3Bvc3RsaW5rX2NtZHNfQ1hYPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9saXN0X3NwZWNfQ1hYPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGhhcmRjb2RlX2FjdGlvbl9DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2FjdGlvbl9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFg9J2AkRUNITyAiJGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE3OTgzLDggKzE4ODI5LDEzIEBAIHJlbG9hZF9mbGFnIFwKKyBPQkpEVU1QIFwKKyBkZXBsaWJzX2NoZWNrX21ldGhvZCBcCisgZmlsZV9tYWdpY19jbWQgXAorK2ZpbGVfbWFnaWNfZ2xvYiBcCisrd2FudF9ub2Nhc2VnbG9iIFwKKytETExUT09MIFwKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCBcCisgQVIgXAorIEFSX0ZMQUdTIFwKKythcmNoaXZlcl9saXN0X3NwZWMgXAorIFNUUklQIFwKKyBSQU5MSUIgXAorIENDIFwKK0BAIC0xNzk5NCwxMiArMTg4NDUsMTQgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKKytubV9maWxlX2xpc3Rfc3BlYyBcCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgXAorLWx0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfcGljIFwKKytsdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyBcCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAorIG5lZWRfbG9ja3MgXAorK01BTklGRVNUX1RPT0wgXAorIERTWU1VVElMIFwKKyBOTUVESVQgXAorIExJUE8gXAorQEAgLTE4MDE1LDcgKzE4ODY4LDYgQEAgbm9fdW5kZWZpbmVkX2ZsYWcgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAorIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAorLWZpeF9zcmNmaWxlX3BhdGggXAorIGV4Y2x1ZGVfZXhwc3ltcyBcCisgaW5jbHVkZV9leHBzeW1zIFwKKyBmaWxlX2xpc3Rfc3BlYyBcCitAQCAtMTgwMzcsOCArMTg4ODksOCBAQCBMRF9DWFggXAorIHJlbG9hZF9mbGFnX0NYWCBcCisgY29tcGlsZXJfQ1hYIFwKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFggXAorLWx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggXAorK2x0X3Byb2dfY29tcGlsZXJfd2xfQ1hYIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFggXAorIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCBcCisgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWCBcCitAQCAtMTgwNTAsNyArMTg5MDIsNiBAQCBub191bmRlZmluZWRfZmxhZ19DWFggXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0NYWCBcCisgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFggXAorLWZpeF9zcmNmaWxlX3BhdGhfQ1hYIFwKKyBleGNsdWRlX2V4cHN5bXNfQ1hYIFwKKyBpbmNsdWRlX2V4cHN5bXNfQ1hYIFwKKyBmaWxlX2xpc3Rfc3BlY19DWFggXAorQEAgLTE4MDg0LDYgKzE4OTM1LDcgQEAgbW9kdWxlX2NtZHMgXAorIG1vZHVsZV9leHBzeW1fY21kcyBcCisgZXhwb3J0X3N5bWJvbHNfY21kcyBcCisgcHJlbGlua19jbWRzIFwKKytwb3N0bGlua19jbWRzIFwKKyBwb3N0aW5zdGFsbF9jbWRzIFwKKyBwb3N0dW5pbnN0YWxsX2NtZHMgXAorIGZpbmlzaF9jbWRzIFwKK0BAIC0xODA5OCw3ICsxODk1MCw4IEBAIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYIFwKKyBtb2R1bGVfY21kc19DWFggXAorIG1vZHVsZV9leHBzeW1fY21kc19DWFggXAorIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYIFwKKy1wcmVsaW5rX2NtZHNfQ1hYOyBkbworK3ByZWxpbmtfY21kc19DWFggXAorK3Bvc3RsaW5rX2NtZHNfQ1hYOyBkbworICAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KKyAgICAgKltcXFxcXFxcYFxcIlxcXCRdKikKKyAgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgLWUgXFwiXFxcJGRvdWJsZV9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRkZWxheV92YXJpYWJsZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgorQEAgLTE4ODkxLDcgKzE5NzQ0LDggQEAgJGFzX2VjaG8gWCIkZmlsZSIgfAorICMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgorICMKKyAjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorLSMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrIyAgICAgICAgICAgICAgICAgSW5jLgorICMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisgIworICMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KK0BAIC0xODk5NCwxOSArMTk4NDgsNDIgQEAgU1AyTkw9JGx0X2x0X1NQMk5MCisgIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgorIE5MMlNQPSRsdF9sdF9OTDJTUAorIAorKyMgY29udmVydCBcJGJ1aWxkIGZpbGUgbmFtZXMgdG8gXCRob3N0IGZvcm1hdC4KKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisrCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4KKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisrCisgIyBBbiBvYmplY3Qgc3ltYm9sIGR1bXBlci4KKyBPQkpEVU1QPSRsdF9PQkpEVU1QCisgCisgIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKyAKKy0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gImZpbGVfbWFnaWMiLgorKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyBmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKKyAKKysjIEhvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK2ZpbGVfbWFnaWNfZ2xvYj0kbHRfZmlsZV9tYWdpY19nbG9iCisrCisrIyBGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrd2FudF9ub2Nhc2VnbG9iPSRsdF93YW50X25vY2FzZWdsb2IKKysKKysjIERMTCBjcmVhdGlvbiBwcm9ncmFtLgorK0RMTFRPT0w9JGx0X0RMTFRPT0wKKysKKysjIENvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXMuCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrCisgIyBUaGUgYXJjaGl2ZXIuCisgQVI9JGx0X0FSCisrCisrIyBGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZS4KKyBBUl9GTEFHUz0kbHRfQVJfRkxBR1MKKyAKKysjIEhvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlci4KKythcmNoaXZlcl9saXN0X3NwZWM9JGx0X2FyY2hpdmVyX2xpc3Rfc3BlYworKworICMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCisgU1RSSVA9JGx0X1NUUklQCisgCitAQCAtMTkwMzYsNiArMTk5MTMsMTIgQEAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKKyAjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgorIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeAorIAorKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciBcJE5NLgorK25tX2ZpbGVfbGlzdF9zcGVjPSRsdF9ubV9maWxlX2xpc3Rfc3BlYworKworKyMgVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzLGFuZCBpbiB3aGljaCBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuCisrbHRfc3lzcm9vdD0kbHRfc3lzcm9vdAorKworICMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgorIG9iamRpcj0kb2JqZGlyCisgCitAQCAtMTkwNDUsNiArMTk5MjgsOSBAQCBNQUdJQ19DTUQ9JE1BR0lDX0NNRAorICMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CisgbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworIAorKyMgTWFuaWZlc3QgdG9vbC4KKytNQU5JRkVTVF9UT09MPSRsdF9NQU5JRkVTVF9UT09MCisrCisgIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgorIERTWU1VVElMPSRsdF9EU1lNVVRJTAorIAorQEAgLTE5MTU5LDEyICsyMDA0NSwxMiBAQCB3aXRoX2djYz0kR0NDCisgIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorIG5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKKyAKKy0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCistd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKy0KKyAjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KKyBwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKKyAKKysjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCisrd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKysKKyAjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCisgbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKKyAKK0BAIC0xOTI1MSw5ICsyMDEzNyw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKKyAjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KKyBsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCisgCistIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKKy0KKyAjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scworIAorQEAgLTE5MjY5LDYgKzIwMTUyLDkgQEAgaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKKyAjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorIHByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCisgCisrIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgorK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHMKKysKKyAjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KKyBmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWMKKyAKK0BAIC0xOTMxNSwyMTAgKzIwMjAxLDE2OSBAQCBsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKyAgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworLSAgc2VkICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlL3EnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIGNhc2UgJHhzaV9zaGVsbCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCistIyBjYWxsOgorLSMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCistIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CistIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCistIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCistIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworLSMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorLWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCistICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9CistfQorLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorLSAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7CistICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PSR7IzF9CistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopICMgQm91cm5lIGNvbXBhdGlibGUgZnVuY3Rpb25zLgorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorLSAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAorLSAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKy0gIGVsc2UKKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorLSAgZmkKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCistfQorLQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy0jIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICBjYXNlICR7Mn0gaW4KKy0gICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKy0gICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworLSAgZXNhYworLX0KKy0KKy0jIHNlZCBzY3JpcHRzOgorLW15X3NlZF9sb25nX29wdD0nMXMvXlwoLVtePV0qXCk9LiovXDEvO3EnCistbXlfc2VkX2xvbmdfYXJnPScxcy9eLVtePV0qPS8vJworLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCistICBmdW5jX29wdF9zcGxpdF9hcmc9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19hcmciYAorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW14uXSokLy5sby8nYAorLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIkQCJgCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkMSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorLX0KKy0KKy1fTFRfRU9GCistZXNhYworLQorLWNhc2UgJGx0X3NoZWxsX2FwcGVuZCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMSs9XCQyIgorLX0KKy1fTFRfRU9GCistICAgIDs7CistICAqKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMT1cJCQxXCQyIgorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICBlc2FjCistCistCistICBzZWQgLW4gJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvLCRwJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisrICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisrICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorKworKyAgaWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZSAvY1wKKytmdW5jX2Rpcm5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19iYXNlbmFtZSAvY1wKKytmdW5jX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgL2NcCisrZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zdHJpcG5hbWUgKCkkLywvXn0gIyBmdW5jX3N0cmlwbmFtZSAvY1wKKytmdW5jX3N0cmlwbmFtZSAoKVwKKyt7XAorK1wgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZVwKKytcICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC5cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3RyaXBuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9sb25nX29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgL2NcCisrZnVuY19zcGxpdF9sb25nX29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9sb25nX29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgL2NcCisrZnVuY19zcGxpdF9zaG9ydF9vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9zaG9ydF9vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xvMm8gKCkkLywvXn0gIyBmdW5jX2xvMm8gL2NcCisrZnVuY19sbzJvICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7XAorK1wgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xvMm8gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3hmb3JtICgpJC8sL159ICMgZnVuY194Zm9ybSAvY1wKKytmdW5jX3hmb3JtICgpXAorK3tcCisrICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfeGZvcm0gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FyaXRoICgpJC8sL159ICMgZnVuY19hcml0aCAvY1wKKytmdW5jX2FyaXRoICgpXAorK3tcCisrICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcml0aCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbGVuICgpJC8sL159ICMgZnVuY19sZW4gL2NcCisrZnVuY19sZW4gKClcCisre1wKKysgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xlbiBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworK2ZpCisrCisraWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kICgpJC8sL159ICMgZnVuY19hcHBlbmQgL2NcCisrZnVuY19hcHBlbmQgKClcCisre1wKKysgICAgZXZhbCAiJHsxfSs9XFwkezJ9IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZF9xdW90ZWQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZF9xdW90ZWQgL2NcCisrZnVuY19hcHBlbmRfcXVvdGVkICgpXAorK3tcCisrXCAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IlwKKytcICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZF9xdW90ZWQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytlbHNlCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQorKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZmkKKysKKytpZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjI7fQorK2ZpCisrCisrCisrICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICAgY2htb2QgK3ggIiRvZmlsZSIKKyAKK0BAIC0xOTU0NiwxMiArMjAzOTEsMTIgQEAgd2l0aF9nY2M9JEdDQ19DWFgKKyAjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCisgbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFgKKyAKKy0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCistd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2xfQ1hYCistCisgIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCisgcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWAorIAorKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKyt3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9DWFgKKysKKyAjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCisgbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYCisgCitAQCAtMTk2MzgsOSArMjA0ODMsNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoX0NYWAorICMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorIGxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnNfQ1hYCisgCistIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGhfQ1hYCistCisgIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYCisgCitAQCAtMTk2NTYsNiArMjA0OTgsOSBAQCBpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltc19DWFgKKyAjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorIHByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzX0NYWAorIAorKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KKytwb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzX0NYWAorKworICMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorIGZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlY19DWFgKKyAKK2RpZmYgLS1naXQgYS9saWJ0b29sLm00IGIvbGlidG9vbC5tNAoraW5kZXggNzk3NDY4Zi4uMDJiMTViMyAxMDA2NDQKKy0tLSBhL2xpYnRvb2wubTQKKysrKyBiL2xpYnRvb2wubTQKK0BAIC0xLDcgKzEsOCBAQAorICMgbGlidG9vbC5tNCAtIENvbmZpZ3VyZSBsaWJ0b29sIGZvciB0aGUgaG9zdCBzeXN0ZW0uIC0qLUF1dG9jb25mLSotCisgIworICMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCistIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysjICAgICAgICAgICAgICAgICBJbmMuCisgIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyAjCisgIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworQEAgLTEwLDcgKzExLDggQEAKKyAKKyBtNF9kZWZpbmUoW19MVF9DT1BZSU5HXSwgW2RubAorICMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCistIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysjICAgICAgICAgICAgICAgICBJbmMuCisgIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyAjCisgIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorQEAgLTM3LDcgKzM5LDcgQEAgbTRfZGVmaW5lKFtfTFRfQ09QWUlOR10sIFtkbmwKKyAjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorIF0pCisgCistIyBzZXJpYWwgNTYgTFRfSU5JVAorKyMgc2VyaWFsIDU3IExUX0lOSVQKKyAKKyAKKyAjIExUX1BSRVJFUShWRVJTSU9OKQorQEAgLTkyLDcgKzk0LDggQEAgX0xUX1NFVF9PUFRJT05TKFskMF0sIFskMV0pCisgTElCVE9PTF9ERVBTPSIkbHRtYWluIgorIAorICMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCistTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCisrTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpJworK0xJQlRPT0w9IiRMSUJUT09MLyR7aG9zdF9hbGlhc30tbGlidG9vbCIKKyBBQ19TVUJTVChMSUJUT09MKWRubAorIAorIF9MVF9TRVRVUAorQEAgLTE2NiwxMCArMTY5LDEzIEBAIF9MVF9ERUNMKFtdLCBbZXhlZXh0XSwgWzBdLCBbRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpXSlkbmwKKyBkbmwKKyBtNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKKyBtNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdKWRubAorK200X3JlcXVpcmUoW19MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TXSlkbmwKKyBtNF9yZXF1aXJlKFtfTFRfQ01EX1JFTE9BRF0pZG5sCisgbTRfcmVxdWlyZShbX0xUX0NIRUNLX01BR0lDX01FVEhPRF0pZG5sCisrbTRfcmVxdWlyZShbX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUJdKWRubAorIG00X3JlcXVpcmUoW19MVF9DTURfT0xEX0FSQ0hJVkVdKWRubAorIG00X3JlcXVpcmUoW19MVF9DTURfR0xPQkFMX1NZTUJPTFNdKWRubAorK200X3JlcXVpcmUoW19MVF9XSVRIX1NZU1JPT1RdKWRubAorIAorIF9MVF9DT05GSUdfTElCVE9PTF9JTklUKFsKKyAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyCitAQCAtMTk5LDcgKzIwNSw3IEBAIGFpeDMqKQorIGVzYWMKKyAKKyAjIEdsb2JhbCB2YXJpYWJsZXM6Cistb2ZpbGU9bGlidG9vbAorK29maWxlPSR7aG9zdF9hbGlhc30tbGlidG9vbAorIGNhbl9idWlsZF9zaGFyZWQ9eWVzCisgCisgIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCitAQCAtNjMyLDcgKzYzOCw3IEBAIG00X2lmc2V0KFtBQ19QQUNLQUdFX05BTUVdLCBbQUNfUEFDS0FHRV9OQU1FIF0pY29uZmlnLmx0W11kbmwKKyBtNF9pZnNldChbQUNfUEFDS0FHRV9WRVJTSU9OXSwgWyBBQ19QQUNLQUdFX1ZFUlNJT05dKQorIGNvbmZpZ3VyZWQgYnkgJFswXSwgZ2VuZXJhdGVkIGJ5IG00X1BBQ0tBR0VfU1RSSU5HLgorIAorLUNvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgVGhpcyBjb25maWcubHQgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCisgCitAQCAtNzQ2LDE1ICs3NTIsMTIgQEAgX0xUX0VPRgorICAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CistICBzZWQgJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorKyAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKyAKKy0gIF9MVF9QUk9HX1hTSV9TSEVMTEZOUworKyAgX0xUX1BST0dfUkVQTEFDRV9TSEVMTEZOUworIAorLSAgc2VkIC1uICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLywkcCcgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgIGNobW9kICt4ICIkb2ZpbGUiCisgXSwKK0BAIC05ODAsNiArOTgzLDggQEAgX0xUX0VPRgorICAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JkFTX01FU1NBR0VfTE9HX0ZECisrICAgICAgZWNobyAiJFJBTkxJQiBsaWJjb25mdGVzdC5hIiA+JkFTX01FU1NBR0VfTE9HX0ZECisrICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCisgaW50IG1haW4oKSB7IHJldHVybiAwO30KKyBfTFRfRU9GCitAQCAtMTA2OSwzMCArMTA3NCw0MSBAQCBtNF9kZWZ1bihbX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVNdLAorICAgZmkKKyBdKQorIAorLSMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbVEFHTkFNRV0pCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBMaW5rcyBhIG1pbmltYWwgcHJvZ3JhbSBhbmQgY2hlY2tzIHRoZSBleGVjdXRhYmxlCisgIyBmb3IgdGhlIHN5c3RlbSBkZWZhdWx0IGhhcmRjb2RlZCBsaWJyYXJ5IHBhdGguIEluIG1vc3QgY2FzZXMsCisgIyB0aGlzIGlzIC91c3IvbGliOi9saWIsIGJ1dCB3aGVuIHRoZSBNUEkgY29tcGlsZXJzIGFyZSB1c2VkCisgIyB0aGUgbG9jYXRpb24gb2YgdGhlIGNvbW11bmljYXRpb24gYW5kIE1QSSBsaWJzIGFyZSBpbmNsdWRlZCB0b28uCisgIyBJZiB3ZSBkb24ndCBmaW5kIGFueXRoaW5nLCB1c2UgdGhlIGRlZmF1bHQgbGlicmFyeSBwYXRoIGFjY29yZGluZworICMgdG8gdGhlIGFpeCBsZCBtYW51YWwuCisrIyBTdG9yZSB0aGUgcmVzdWx0cyBmcm9tIHRoZSBkaWZmZXJlbnQgY29tcGlsZXJzIGZvciBlYWNoIFRBR05BTUUuCisrIyBBbGxvdyB0byBvdmVycmlkZSB0aGVtIGZvciBhbGwgdGFncyB0aHJvdWdoIGx0X2N2X2FpeF9saWJwYXRoLgorIG00X2RlZnVuKFtfTFRfU1lTX01PRFVMRV9QQVRIX0FJWF0sCisgW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCistQUNfTElOS19JRkVMU0UoQUNfTEFOR19QUk9HUkFNLFsKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmldLFtdKQorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorK2lmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIEFDX0NBQ0hFX1ZBTChbX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSldLAorKyAgW0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU1dLFsKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nWworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9XScKKysgIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pIjsgdGhlbgorKyAgICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpXSxbXSkKKysgIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKSI7IHRoZW4KKysgICAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9Ii91c3IvbGliOi9saWIiCisrICBmaQorKyAgXSkKKysgIGFpeF9saWJwYXRoPSRfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKQorK2ZpCisgXSkjIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisgCisgCitAQCAtMTExNyw3ICsxMTMzLDcgQEAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKyAKKyBBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBwcmludCBzdHJpbmdzXSkKKyAjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KKy1pZiB0ZXN0ICJYYHByaW50IC1yIC0tIC1uIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorICAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgICBFQ0hPPSdwcmludCAtciAtLScKKyBlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorQEAgLTExNjEsNiArMTE3NywzOSBAQCBfTFRfREVDTChbXSwgW0VDSE9dLCBbMV0sIFtBbiBlY2hvIHByb2dyYW0gdGhhdCBwcm90ZWN0cyBiYWNrc2xhc2hlc10pCisgXSkjIF9MVF9QUk9HX0VDSE9fQkFDS1NMQVNICisgCisgCisrIyBfTFRfV0lUSF9TWVNST09UCisrIyAtLS0tLS0tLS0tLS0tLS0tCisrQUNfREVGVU4oW19MVF9XSVRIX1NZU1JPT1RdLAorK1tBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzeXNyb290XSkKKytBQ19BUkdfV0lUSChbbGlidG9vbC1zeXNyb290XSwKKytbICAtLXdpdGgtbGlidG9vbC1zeXNyb290Wz1ESVJdIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisrICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuXSwKKytbXSwgW3dpdGhfbGlidG9vbF9zeXNyb290PW5vXSkKKysKKytkbmwgbHRfc3lzcm9vdCB3aWxsIGFsd2F5cyBiZSBwYXNzZWQgdW5xdW90ZWQuICBXZSBxdW90ZSBpdCBoZXJlCisrZG5sIGluIGNhc2UgdGhlIHVzZXIgcGFzc2VkIGEgZGlyZWN0b3J5IG5hbWUuCisrbHRfc3lzcm9vdD0KKytjYXNlICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IGluICMoCisrIHllcykKKysgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKysgICBmaQorKyAgIDs7ICMoCisrIC8qKQorKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX2xpYnRvb2xfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKyAgIDs7ICMoCisrIG5vfCcnKQorKyAgIDs7ICMoCisrICopCisrICAgQUNfTVNHX1JFU1VMVChbJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH1dKQorKyAgIEFDX01TR19FUlJPUihbVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLl0pCisrICAgOzsKKytlc2FjCisrCisrIEFDX01TR19SRVNVTFQoWyR7bHRfc3lzcm9vdDotbm99XSkKKytfTFRfREVDTChbXSwgW2x0X3N5c3Jvb3RdLCBbMF0sIFtUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIF1kbmwKKytbZGVwZW5kZW50IGxpYnJhcmllcywgYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC5dKV0pCisrCisgIyBfTFRfRU5BQkxFX0xPQ0sKKyAjIC0tLS0tLS0tLS0tLS0tLQorIG00X2RlZnVuKFtfTFRfRU5BQkxFX0xPQ0tdLAorQEAgLTEzMjAsMTQgKzEzNjksNDcgQEAgbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCisgXSkjIF9MVF9FTkFCTEVfTE9DSworIAorIAorKyMgX0xUX1BST0dfQVIKKysjIC0tLS0tLS0tLS0tCisrbTRfZGVmdW4oW19MVF9QUk9HX0FSXSwKKytbQUNfQ0hFQ0tfVE9PTFMoQVIsIFthcl0sIGZhbHNlKQorKzogJHtBUj1hcn0KKys6ICR7QVJfRkxBR1M9Y3J1fQorK19MVF9ERUNMKFtdLCBbQVJdLCBbMV0sIFtUaGUgYXJjaGl2ZXJdKQorK19MVF9ERUNMKFtdLCBbQVJfRkxBR1NdLCBbMV0sIFtGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZV0pCisrCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0XSwgW2x0X2N2X2FyX2F0X2ZpbGVdLAorKyAgW2x0X2N2X2FyX2F0X2ZpbGU9bm8KKysgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNXSwKKysgICAgIFtlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKKysgICAgICBsdF9hcl90cnk9JyRBUiAkQVJfRkxBR1MgbGliY29uZnRlc3QuYSBAY29uZnRlc3QubHN0ID4mQVNfTUVTU0FHRV9MT0dfRkQnCisrICAgICAgQUNfVFJZX0VWQUwoW2x0X2FyX3RyeV0pCisrICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKysJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKysJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCisrCUFDX1RSWV9FVkFMKFtsdF9hcl90cnldKQorKwlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgorKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKysgICAgIF0pCisrICBdKQorKworK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KKytlbHNlCisrICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKKytmaQorK19MVF9ERUNMKFtdLCBbYXJjaGl2ZXJfbGlzdF9zcGVjXSwgWzFdLAorKyAgW0hvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlcl0pCisrXSkjIF9MVF9QUk9HX0FSCisrCisrCisgIyBfTFRfQ01EX09MRF9BUkNISVZFCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisgbTRfZGVmdW4oW19MVF9DTURfT0xEX0FSQ0hJVkVdLAorLVtBQ19DSEVDS19UT09MKEFSLCBhciwgZmFsc2UpCistdGVzdCAteiAiJEFSIiAmJiBBUj1hcgorLXRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CistX0xUX0RFQ0woW10sIFtBUl0sIFsxXSwgW1RoZSBhcmNoaXZlcl0pCistX0xUX0RFQ0woW10sIFtBUl9GTEFHU10sIFsxXSkKKytbX0xUX1BST0dfQVIKKyAKKyBBQ19DSEVDS19UT09MKFNUUklQLCBzdHJpcCwgOikKKyB0ZXN0IC16ICIkU1RSSVAiICYmIFNUUklQPToKK0BAIC0xNjIzLDcgKzE3MDUsNyBAQCBlbHNlCisgICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKy1bI2xpbmUgX19vbGluZV9fICJjb25maWd1cmUiCisrWyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyAKKyAjaWYgSEFWRV9ETEZDTl9ICitAQCAtMTY2NywxMCArMTc0OSwxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTIyMTAsOCArMjI5Miw5IEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgIG5lZWRfdmVyc2lvbj1ubworICAgbmVlZF9saWJfcHJlZml4PW5vCisgCistICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KKy0gIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKiB8IHllcyxjZWdjYyopCisrICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCisrICB5ZXMsKikKKysgICAgIyBnY2MKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KK0BAIC0yMjQ0LDEzICsyMzI3LDcxIEBAIG00X2lmKFskMV0sIFtdLFsKKyAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgICA7OworICAgICBlc2FjCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisrICAgIDs7CisrCisrICAqLGNsKikKKysgICAgIyBOYXRpdmUgTVNWQworKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisrCisrICAgIGNhc2UgJGJ1aWxkX29zIGluCisrICAgIG1pbmd3KikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisrICAgICAgbHRfc2F2ZV9pZnM9JElGUworKyAgICAgIElGUz0nOycKKysgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisrICAgICAgZG8KKysgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisrICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKysgICAgICBkb25lCisrICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW1thLXpBLVpdXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisrICAgICAgOzsKKysgICAgY3lnd2luKikKKysgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisrICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisrICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIDs7CisrICAgICopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IFskR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGxdOyB0aGVuCisrICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKysgICAgICBlbHNlCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgZmkKKysgICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKKysgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisrICAgICAgOzsKKysgICAgZXNhYworKworKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisrICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKysgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorKyAgICAgICAkUk0gXCRkbHBhdGgnCisrICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJworICAgICA7OworIAorICAgKikKKysgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgIDs7CisgICBlc2FjCistICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgIDs7CitAQCAtMjM0Miw3ICsyNDgzLDcgQEAgaGFpa3UqKQorICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCistICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3QvYmVvcy9zeXN0ZW0vbGliJworKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICA7OworIAorQEAgLTI5NTAsNiArMzA5MSwxMSBAQCBjYXNlICRyZWxvYWRfZmxhZyBpbgorIGVzYWMKKyByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgY2FzZSAkaG9zdF9vcyBpbgorKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKysgICAgICByZWxvYWRfY21kcz1mYWxzZQorKyAgICBmaQorKyAgICA7OworICAgZGFyd2luKikKKyAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitAQCAtMzAxNiw3ICszMTYyLDggQEAgbWluZ3cqIHwgcHczMiopCisgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICAgZWxzZQorLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKKysgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgorKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgIGZpCisgICA7OworQEAgLTMxNjcsNiArMzMxNCwyMSBAQCB0cGYqKQorICAgOzsKKyBlc2FjCisgXSkKKysKKytmaWxlX21hZ2ljX2dsb2I9Cisrd2FudF9ub2Nhc2VnbG9iPW5vCisraWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKysgIGNhc2UgJGhvc3Rfb3MgaW4KKysgIG1pbmd3KiB8IHB3MzIqKQorKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcworKyAgICBlbHNlCisrICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bW1wxXV1cL1tbXDFdXVwvZzsvZyJgCisrICAgIGZpCisrICAgIDs7CisrICBlc2FjCisrZmkKKysKKyBmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKKyB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KK0BAIC0zMTc0LDcgKzMzMzYsMTEgQEAgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisgX0xUX0RFQ0woW10sIFtkZXBsaWJzX2NoZWNrX21ldGhvZF0sIFsxXSwKKyAgICAgW01ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzXSkKKyBfTFRfREVDTChbXSwgW2ZpbGVfbWFnaWNfY21kXSwgWzFdLAorLSAgICBbQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSAiZmlsZV9tYWdpYyJdKQorKyAgICBbQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIl0pCisrX0xUX0RFQ0woW10sIFtmaWxlX21hZ2ljX2dsb2JdLCBbMV0sCisrICAgIFtIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIl0pCisrX0xUX0RFQ0woW10sIFt3YW50X25vY2FzZWdsb2JdLCBbMV0sCisrICAgIFtGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyJdKQorIF0pIyBfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9ECisgCisgCitAQCAtMzI3Nyw2ICszNDQzLDY3IEBAIGRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKKyBkbmwgQUNfREVGVU4oW0FNX1BST0dfTk1dLCBbXSkKKyBkbmwgQUNfREVGVU4oW0FDX1BST0dfTk1dLCBbXSkKKyAKKysjIF9MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgaG93IHRvIGRldGVybWluZSB0aGUgbmFtZSBvZiB0aGUgc2hhcmVkIGxpYnJhcnkKKysjIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIGxpbmsgbGlicmFyeS4KKysjICAtLSBQT1JUTUUgZmlsbCBpbiB3aXRoIHRoZSBkeW5hbWljIGxpYnJhcnkgY2hhcmFjdGVyaXN0aWNzCisrbTRfZGVmdW4oW19MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCXSwKKytbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKQorK200X3JlcXVpcmUoW19MVF9ERUNMX09CSkRVTVBdKQorK200X3JlcXVpcmUoW19MVF9ERUNMX0RMTFRPT0xdKQorK0FDX0NBQ0hFX0NIRUNLKFtob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzXSwKKytsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCwKKytbbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCisrCisrY2FzZSAkaG9zdF9vcyBpbgorK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKKysgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKysgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorKyAgKi0taWRlbnRpZnktc3RyaWN0KikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisrICAgIDs7CisrICAqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKysgICAgOzsKKysgIGVzYWMKKysgIDs7CisrKikKKysgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorKyAgOzsKKytlc2FjCisrXSkKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKyt0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisrCisrX0xUX0RFQ0woW10sIFtzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZF0sIFsxXSwKKysgICAgW0NvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXNdKQorK10pIyBfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQgorKworKworKyMgX0xUX1BBVEhfTUFOSUZFU1RfVE9PTAorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgbG9jYXRlIHRoZSBtYW5pZmVzdCB0b29sCisrbTRfZGVmdW4oW19MVF9QQVRIX01BTklGRVNUX1RPT0xdLAorK1tBQ19DSEVDS19UT09MKE1BTklGRVNUX1RPT0wsIG10LCA6KQorK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10CisrQUNfQ0FDSEVfQ0hFQ0soW2lmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbF0sIFtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2xdLAorKyAgW2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD1ubworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mQVNfTUVTU0FHRV9MT0dfRkQKKysgICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKKysgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisrICBmaQorKyAgcm0gLWYgY29uZnRlc3QqXSkKKytpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgorKyAgTUFOSUZFU1RfVE9PTD06CisrZmkKKytfTFRfREVDTChbXSwgW01BTklGRVNUX1RPT0xdLCBbMV0sIFtNYW5pZmVzdCB0b29sXSlkbmwKKytdKSMgX0xUX1BBVEhfTUFOSUZFU1RfVE9PTAorKworIAorICMgTFRfTElCX00KKyAjIC0tLS0tLS0tCitAQCAtMzQwMyw4ICszNjMwLDggQEAgZXNhYworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisgCisgIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbW14gXV0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKGxpYltbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKVtbIF1dKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKVtbIF1dKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChsaWJbW14gXV0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorIAorICMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorIG9wdF9jcj0KK0BAIC0zNDQwLDYgKzM2NjcsNyBAQCBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisgICBlbHNlCisgICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbWwkgXV1cKCRzeW1jb2RlJHN5bWNvZGUqXClbWwkgXV1bWwkgXV0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgICBmaQorKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgorIAorICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgICBwaXBlX3dvcmtzPW5vCitAQCAtMzQ3Myw2ICszNzAxLDE4IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLworKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisrLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisrICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLworKyMgZGVmaW5lIExUQCZ0QF9ETFNZTV9DT05TVAorKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKysvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKysjIGRlZmluZSBMVEAmdEBfRExTWU1fQ09OU1QKKysjZWxzZQorKyMgZGVmaW5lIExUQCZ0QF9ETFNZTV9DT05TVCBjb25zdAorKyNlbmRpZgorKworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworICNlbmRpZgorQEAgLTM0ODQsNyArMzcyNCw3IEBAIF9MVF9FT0YKKyAJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyAvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCistY29uc3Qgc3RydWN0IHsKKytMVEAmdEBfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICB2b2lkICAgICAgICphZGRyZXNzOworIH0KK0BAIC0zNTEwLDE1ICszNzUwLDE1IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgX0xUX0VPRgorIAkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisgCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CistCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKKy0JICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKysJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUworKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUworIAkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisgCSAgQ0ZMQUdTPSIkQ0ZMQUdTJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKSIKKyAJICBpZiBBQ19UUllfRVZBTChhY19saW5rKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgCSAgICBwaXBlX3dvcmtzPXllcworIAkgIGZpCistCSAgTElCUz0iJGx0X3NhdmVfTElCUyIKKy0JICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKysJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUworKwkgIENGTEFHUz0kbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUworIAllbHNlCisgCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiZBU19NRVNTQUdFX0xPR19GRAorIAlmaQorQEAgLTM1NTEsNiArMzc5MSwxMyBAQCBlbHNlCisgICBBQ19NU0dfUkVTVUxUKG9rKQorIGZpCisgCisrIyBSZXNwb25zZSBmaWxlIHN1cHBvcnQuCisraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2VsaWYgJE5NIC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgJ1tbQF1dRklMRScgPi9kZXYvbnVsbDsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZmkKKysKKyBfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF9waXBlXSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGVdLCBbMV0sCisgICAgIFtUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzXSkKKyBfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jZGVjbF0sIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbF0sIFsxXSwKK0BAIC0zNTYxLDYgKzM4MDgsOCBAQCBfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc10sCisgX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeF0sCisgICAgIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4XSwgWzFdLAorICAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWRdKQorK19MVF9ERUNMKFtdLCBbbm1fZmlsZV9saXN0X3NwZWNdLCBbMV0sCisrICAgIFtTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yICROTV0pCisgXSkgIyBfTFRfQ01EX0dMT0JBTF9TWU1CT0xTCisgCisgCitAQCAtMzU3Miw3ICszODIxLDYgQEAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9CisgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0KKyAKKy1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDXSkKKyBtNF9pZihbJDFdLCBbQ1hYXSwgWworICAgIyBDKysgc3BlY2lmaWMgY2FzZXMgZm9yIHBpYywgc3RhdGljLCB3bCwgZXRjLgorICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KK0BAIC0zNjc4LDYgKzM5MjYsMTIgQEAgbTRfaWYoWyQxXSwgW0NYWF0sIFsKKyAJICA7OworIAllc2FjCisgCTs7CisrICAgICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKKysJIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworKwkjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorKwltNF9pZihbJDFdLCBbR0NKXSwgW10sCisrCSAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCisrCTs7CisgICAgICAgZGd1eCopCisgCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisgCSAgZWMrKyopCitAQCAtMzgzMCw3ICs0MDg0LDcgQEAgbTRfaWYoWyQxXSwgW0NYWF0sIFsKKyAJOzsKKyAgICAgICBzb2xhcmlzKikKKyAJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0JICBDQyopCisrCSAgQ0MqIHwgc3VuQ0MqKQorIAkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworIAkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCitAQCAtNDA1Myw2ICs0MzA3LDEyIEBAIG00X2lmKFskMV0sIFtDWFhdLCBbCisgCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLS1zaGFyZWQnCisgCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLS1zdGF0aWMnCisgCTs7CisrICAgICAgbmFnZm9yKikKKysJIyBOQUcgRm9ydHJhbiBjb21waWxlcgorKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLC1XbCwsJworKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCisrCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisrCTs7CisgICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKyAJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKK0BAIC00MTE1LDcgKzQzNzUsNyBAQCBtNF9pZihbJDFdLCBbQ1hYXSwgWworICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKysgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisgCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICAqKQorIAlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCc7OworQEAgLTQxNzIsOSArNDQzMiwxMSBAQCBjYXNlICRob3N0X29zIGluCisgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKUAmdEBtNF9pZihbJDFdLFtdLFsgLURQSUNdLFttNF9pZihbJDFdLFtDWFhdLFsgLURQSUNdLFtdKV0pIgorICAgICA7OworIGVzYWMKKy1BQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpXSkKKy1fTFRfVEFHREVDTChbd2xdLCBbbHRfcHJvZ19jb21waWxlcl93bF0sIFsxXSwKKy0JW0hvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXJdKQorKworK0FDX0NBQ0hFX0NIRUNLKFtmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQ10sCisrICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYywgJDEpXSwKKysgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKV0pCisrX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSRfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljLCAkMSkKKyAKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorQEAgLTQxOTMsNiArNDQ1NSw4IEBAIGZpCisgX0xUX1RBR0RFQ0woW3BpY19mbGFnXSwgW2x0X3Byb2dfY29tcGlsZXJfcGljXSwgWzFdLAorIAlbQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzXSkKKyAKKytfTFRfVEFHREVDTChbd2xdLCBbbHRfcHJvZ19jb21waWxlcl93bF0sIFsxXSwKKysJW0hvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXJdKQorICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisgIworQEAgLTQyMTMsNiArNDQ3Nyw3IEBAIF9MVF9UQUdERUNMKFtsaW5rX3N0YXRpY19mbGFnXSwgW2x0X3Byb2dfY29tcGlsZXJfc3RhdGljXSwgWzFdLAorIG00X2RlZnVuKFtfTFRfTElOS0VSX1NITElCU10sCisgW0FDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAorIEFDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAorK200X3JlcXVpcmUoW19MVF9QQVRIX01BTklGRVNUX1RPT0xdKWRubAorIG00X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorIG00X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKKyBtNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorQEAgLTQyMjEsNiArNDQ4Niw3IEBAIG00X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyBtNF9pZihbJDFdLCBbQ1hYXSwgWworICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionXQorICAgY2FzZSAkaG9zdF9vcyBpbgorICAgYWl4W1s0LTldXSopCisgICAgICMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorQEAgLTQyMzUsMTUgKzQ1MDEsMjAgQEAgbTRfaWYoWyQxXSwgW0NYWF0sIFsKKyAgICAgOzsKKyAgIHB3MzIqKQorICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0iJGx0ZGxsX2NtZHMiCistICA7OworKyAgICA7OworICAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKy0gICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS87L14uKltbIF1dX19ubV9fL3MvXi4qW1sgXV1fX25tX19cKFtbXiBdXSpcKVtbIF1dW1teIF1dKi9cMSBEQVRBLzsvXklbWyBdXS9kOy9eW1tBSVRXXV1bWyBdXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworLSAgOzsKKysgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgY2wqKSA7OworKyAgICAqKQorKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvO3MvXi4qW1sgXV1fX25tX19cKFtbXiBdXSpcKVtbIF1dW1teIF1dKi9cMSBEQVRBLzsvXklbWyBdXS9kOy9eW1tBSVRXXV1bWyBdXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnXQorKyAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKyAgICopCisgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCistICA7OworKyAgICA7OworICAgZXNhYworLSAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCisgXSwgWworICAgcnVucGF0aF92YXI9CisgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CitAQCAtNDQxMSw3ICs0NjgyLDggQEAgX0xUX0VPRgorICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKyAgICAgICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKy0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltbQUlUV11dW1sgXV0vcy8uKltbIF1dLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS87cy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZSddCisgCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCitAQCAtNDQ1OSw3ICs0NzMxLDcgQEAgX0xUX0VPRgorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKyAJICYmIHRlc3QgIiR0bXBfZGlldCIgPSBubworICAgICAgIHRoZW4KKy0JdG1wX2FkZGZsYWc9CisrCXRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworIAl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKKyAJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisgICAgICAgICBwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCitAQCAtNDUxMCwxMiArNDc4MiwxMiBAQCBfTFRfRU9GCisgCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworIAkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorIAkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPSctcnBhdGggJGxpYmRpcicKKy0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisrCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKyAJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKy0JICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisrCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAJICBmaQorIAkgIDs7CisgCWVzYWMKK0BAIC00NTI5LDggKzQ4MDEsOCBAQCBfTFRfRU9GCisgCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisgCXdsYXJjPQorICAgICAgIGVsc2UKKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGZpCisgICAgICAgOzsKKyAKK0BAIC00NTQ4LDggKzQ4MjAsOCBAQCBfTFRfRU9GCisgCisgX0xUX0VPRgorICAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgZmkKK0BAIC00NTk1LDggKzQ4NjcsOCBAQCBfTFRfRU9GCisgCisgICAgICopCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgZmkKK0BAIC00NzI2LDcgKzQ5OTgsNyBAQCBfTFRfRU9GCisgCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJworICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCistICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorKyAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKyAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICAgZWxzZQorQEAgLTQ3MzcsNyArNTAwOSw3IEBAIF9MVF9FT0YKKyAJZWxzZQorIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgCSAjIGVtcHR5IGV4ZWN1dGFibGUuCistCSBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorKwkgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKyAJIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorIAkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisgCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorQEAgLTQ3ODEsMjAgKzUwNTMsNjMgQEAgX0xUX0VPRgorICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCistICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCistICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKy0gICAgICBsaWJleHQ9bGliCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCistICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCistICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCistICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCistICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKy0gICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworLSAgICAgIF9MVF9UQUdWQVIoZml4X3NyY2ZpbGVfcGF0aCwgJDEpPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKKy0gICAgICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKysgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICAgIGNsKikKKysJIyBOYXRpdmUgTVNWQworKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKKysJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisrCV9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisrCV9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nQCcKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgc2VkIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBlbHNlCisrCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGZpfgorKwkgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKysJICBsaW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisrCSMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCisrCV9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworKwlfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltbQUlUV11dW1sgXV0vcy8uKltbIF1dLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrCSMgRG9uJ3QgdXNlIHJhbmxpYgorKwlfTFRfVEFHVkFSKG9sZF9wb3N0aW5zdGFsbF9jbWRzLCAkMSk9J2NobW9kIDY0NCAkb2xkbGliJworKwlfTFRfVEFHVkFSKHBvc3RsaW5rX2NtZHMsICQxKT0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisrCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgKi5leGV8Ki5FWEUpIDs7CisrCSAgICAqKQorKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIDs7CisrCSAgZXNhY34KKysJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKysJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworKwkgIGZpJworKwk7OworKyAgICAgICopCisrCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKKysJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorKwlfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKysJIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKysJX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKysJX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisrCTs7CisrICAgICAgZXNhYworICAgICAgIDs7CisgCisgICAgIGRhcndpbiogfCByaGFwc29keSopCitAQCAtNDgyOCw3ICs1MTQzLDcgQEAgX0xUX0VPRgorIAorICAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKy0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCitAQCAtNDgzNiw3ICs1MTUxLDcgQEAgX0xUX0VPRgorIAorICAgICBocHV4OSopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZWxzZQorIAlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBmaQorQEAgLTQ4NTIsNyArNTE2Nyw3IEBAIF9MVF9FT0YKKyAKKyAgICAgaHB1eDEwKikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgZWxzZQorIAlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgIGZpCitAQCAtNDg3NiwxMCArNTE5MSwxMCBAQCBfTFRfRU9GCisgCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJaWE2NCopCistCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCSopCistCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAllc2FjCisgICAgICAgZWxzZQorQEAgLTQ5MjYsMTYgKzUyNDEsMzEgQEAgX0xUX0VPRgorIAorICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisgCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKyAJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KKy0gICAgICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCistICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCistICAgICAgICBBQ19MSU5LX0lGRUxTRShpbnQgZm9vKHZvaWQpIHt9LAorLSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworLSAgICAgICAgKQorLSAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKysJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKysJQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2xdLAorKwkgIFtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbF0sCisrCSAgW3NhdmVfTERGTEFHUz0iJExERkxBR1MiCisrCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKysJICAgQUNfTElOS19JRkVMU0UoCisrCSAgICAgW0FDX0xBTkdfU09VUkNFKAorKwkgICAgICAgIFtBQ19MQU5HX0NBU0UoW0NdLCBbW2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH1dXSwKKysJCQkgICAgICBbQysrXSwgW1tpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9XV0sCisrCQkJICAgICAgW0ZvcnRyYW4gNzddLCBbWworKyAgICAgIHN1YnJvdXRpbmUgZm9vCisrICAgICAgZW5kXV0sCisrCQkJICAgICAgW0ZvcnRyYW5dLCBbWworKyAgICAgIHN1YnJvdXRpbmUgZm9vCisrICAgICAgZW5kXV0pXSldLAorKwkgICAgICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzXSwKKysJICAgICAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vXSkKKysgICAgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiXSkKKysJaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgorKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJZmkKKyAgICAgICBlbHNlCisgCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCitAQCAtNTAyMCw3ICs1MzUwLDcgQEAgX0xUX0VPRgorICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgZWxzZQorIAlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCitAQCAtNTAzOSw5ICs1MzY5LDkgQEAgX0xUX0VPRgorICAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16IGRlZnMnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJd2xhcmM9JyR7d2x9JworLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorLQkgICRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisrCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgZWxzZQorIAljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKyAJKiJDb21waWxlcnMgNS4wIiopCitAQCAtNTMxMyw4ICs1NjQzLDYgQEAgX0xUX1RBR0RFQ0woW10sIFtpbmhlcml0X3JwYXRoXSwgWzBdLAorICAgICB0byBydW50aW1lIHBhdGggbGlzdF0pCisgX0xUX1RBR0RFQ0woW10sIFtsaW5rX2FsbF9kZXBsaWJzXSwgWzBdLAorICAgICBbV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzXSkKKy1fTFRfVEFHREVDTChbXSwgW2ZpeF9zcmNmaWxlX3BhdGhdLCBbMV0sCistICAgIFtGaXggdGhlIHNoZWxsIHZhcmlhYmxlICRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXJdKQorIF9MVF9UQUdERUNMKFtdLCBbYWx3YXlzX2V4cG9ydF9zeW1ib2xzXSwgWzBdLAorICAgICBbU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkXSkKKyBfTFRfVEFHREVDTChbXSwgW2V4cG9ydF9zeW1ib2xzX2NtZHNdLCBbMl0sCitAQCAtNTMyNSw2ICs1NjUzLDggQEAgX0xUX1RBR0RFQ0woW10sIFtpbmNsdWRlX2V4cHN5bXNdLCBbMV0sCisgICAgIFtTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWRdKQorIF9MVF9UQUdERUNMKFtdLCBbcHJlbGlua19jbWRzXSwgWzJdLAorICAgICBbQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXNdKQorK19MVF9UQUdERUNMKFtdLCBbcG9zdGxpbmtfY21kc10sIFsyXSwKKysgICAgW0NvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXNdKQorIF9MVF9UQUdERUNMKFtdLCBbZmlsZV9saXN0X3NwZWNdLCBbMV0sCisgICAgIFtTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXNdKQorIGRubCBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAorQEAgLTU0MjYsNiArNTc1Niw3IEBAIENDPSIkbHRfc2F2ZV9DQyIKKyBtNF9kZWZ1bihbX0xUX0xBTkdfQ1hYX0NPTkZJR10sCisgW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorIG00X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKKyttNF9yZXF1aXJlKFtfTFRfUEFUSF9NQU5JRkVTVF9UT09MXSlkbmwKKyBpZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3QgIlgkQ1hYIiAhPSAiWG5vIiAmJgorICAgICAoICh0ZXN0ICJYJENYWCIgPSAiWGcrKyIgJiYgYGcrKyAtdiA+L2Rldi9udWxsIDI+JjFgICkgfHwKKyAgICAgKHRlc3QgIlgkQ1hYIiAhPSAiWGcrKyIpKSkgOyB0aGVuCitAQCAtNTQ4Nyw2ICs1ODE4LDcgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAKKyAgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgICBsdF9zYXZlX0NDPSRDQworKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICAgbHRfc2F2ZV9MRD0kTEQKKyAgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgIEdDQz0kR1hYCitAQCAtNTUwNCw2ICs1ODM2LDcgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAgIGZpCisgICB0ZXN0IC16ICIke0xEQ1hYK3NldH0iIHx8IExEPSRMRENYWAorICAgQ0M9JHtDWFgtImMrKyJ9CisrICBDRkxBR1M9JENYWEZMQUdTCisgICBjb21waWxlcj0kQ0MKKyAgIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyAgIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKK0BAIC01NTI1LDggKzU4NTgsOCBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorICAgICAgICMgQ2hlY2sgaWYgR05VIEMrKyB1c2VzIEdOVSBsZCBhcyB0aGUgdW5kZXJseWluZyBsaW5rZXIsIHNpbmNlIHRoZQorICAgICAgICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgorICAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKy0gICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0gICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgCisgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworQEAgLTU2NjcsNyArNjAwMCw3IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgICAgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJworICAgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkKKyAgICAgICAgICAgIyBleGVjdXRhYmxlLgorLSAgICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorKyAgICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAKKyAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCitAQCAtNTY3OSw3ICs2MDEyLDcgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgZWxzZQorIAkgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgCSAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCistCSAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorKwkgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKyAJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorIAkgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKyAJICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KK0BAIC01NzIxLDI5ICs2MDU0LDc1IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgICAgICAgICA7OworIAorICAgICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKy0gICAgICAgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCistICAgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKy0gICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtYWxsLXN5bWJvbHMnCistICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKy0gICAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKy0gICAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworLQorLSAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorLSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCistICAgICAgICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKy0gICAgICAgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKy0gICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCistCSAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CistICAgICAgICAgIGVsc2UKKy0JICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworLQkgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKy0gICAgICAgICAgZml+CistICAgICAgICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKy0gICAgICAgIGVsc2UKKy0gICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworLSAgICAgICAgZmkKKy0gICAgICAgIDs7CisrCWNhc2UgJEdYWCwkY2NfYmFzZW5hbWUgaW4KKysJLGNsKiB8IG5vLGNsKikKKysJICAjIE5hdGl2ZSBNU1ZDCisrCSAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworKwkgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisrCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCisrCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisrCSAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKysJICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9J0AnCisrCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJICBsaWJleHQ9bGliCisrCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCSAgc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JworKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgICAkU0VEIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICAgIGVsc2UKKysJICAgICAgJFNFRCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgICBmaX4KKysJICAgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKysJICAgIGxpbmtuYW1lcz0nCisrCSAgIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorKwkgICMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCisrCSAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisrCSAgIyBEb24ndCB1c2UgcmFubGliCisrCSAgX0xUX1RBR1ZBUihvbGRfcG9zdGluc3RhbGxfY21kcywgJDEpPSdjaG1vZCA2NDQgJG9sZGxpYicKKysJICBfTFRfVEFHVkFSKHBvc3RsaW5rX2NtZHMsICQxKT0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorKwkgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKysJICAgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKysJICAgICAgKi5leGV8Ki5FWEUpIDs7CisrCSAgICAgICopCisrCQlsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisrCQlsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgorKwkJOzsKKysJICAgIGVzYWN+CisrCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGx0X291dHB1dGZpbGUifgorKwkgICAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKysJICAgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKysJICAgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisrCSAgICBmaScKKysJICA7OworKwkqKQorKwkgICMgZysrCisrCSAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKysJICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisrCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1hbGwtc3ltYm9scycKKysJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKysJICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisrCSAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisrCisrCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworKwkgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorKwkgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKysJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisrCSAgICBlbHNlCisrCSAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworKwkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworKwkgICAgZml+CisrCSAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisrCSAgZWxzZQorKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworKwkgIGZpCisrCSAgOzsKKysJZXNhYworKwk7OworICAgICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAgICBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUygkMSkKKyAJOzsKK0BAIC01ODE4LDcgKzYxOTcsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorICAgICAgICAgICAgIDs7CisgICAgICAgICAgICopCisgICAgICAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKyAgICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworQEAgLTU4ODksMTAgKzYyNjgsMTAgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworIAkgICAgICAgICAgICA7OworIAkgICAgICAgICAgaWE2NCopCistCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKysJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKyAJICAgICAgICAgICAgOzsKKyAJICAgICAgICAgICopCistCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgICAgICAgICAgIDs7CisgCSAgICAgICAgZXNhYworIAkgICAgICBmaQorQEAgLTU5MzMsOSArNjMxMiw5IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgICAgICAgICAgICopCisgCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorIAkgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJICAgICAgZWxzZQorLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgLW8gJGxpYicKKysJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAtbyAkbGliJworIAkgICAgICBmaQorIAkgICAgZmkKKyAJICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworQEAgLTYwMDUsMjAgKzYzODQsMjAgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAJICAgICAgX0xUX1RBR1ZBUihwcmVsaW5rX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAJCXJtIC1yZiAkdHBsZGlyfgorIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2JqcyAkbGlib2JqcyAkY29tcGlsZV9kZXBsaWJzfgorLQkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAiJworKwkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgIicKKyAJICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgCQlybSAtcmYgJHRwbGRpcn4KKyAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9sZG9ianMkb2xkX2RlcGxpYnN+CistCQkkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgfgorKwkJJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGB+CisgCQkkUkFOTElCICRvbGRsaWInCisgCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgCQlybSAtcmYgJHRwbGRpcn4KKyAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorLQkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKysJCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworIAkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAJCXJtIC1yZiAkdHBsZGlyfgorIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CistCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworIAkgICAgICA7OworIAkgICAgKikgIyBWZXJzaW9uIDYgYW5kIGFib3ZlIHVzZSB3ZWFrIHN5bWJvbHMKKyAJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCitAQCAtNjIxMyw3ICs2NTkyLDcgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAJICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJCSAgOzsKKyAJICAgICAgICAqKQorLQkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCQkgIDs7CisgCSAgICAgIGVzYWMKKyAKK0BAIC02MjU5LDcgKzY2MzgsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorIAorICAgICAgIHNvbGFyaXMqKQorICAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICAgICAgQ0MqKQorKyAgICAgICAgICBDQyogfCBzdW5DQyopCisgCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisgICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywkMSk9eWVzCisgCSAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtemRlZnMnCitAQCAtNjMwMCw5ICs2Njc5LDkgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorIAkgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS16ICR7d2x9ZGVmcycKKyAJICAgICAgaWYgJENDIC0tdmVyc2lvbiB8ICRHUkVQIC12ICdeMlwuNycgPiAvZGV2L251bGw7IHRoZW4KKy0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworIAkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CistCQkgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysJCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAKKyAJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisgCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCitAQCAtNjQzMSw2ICs2ODEwLDcgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorIAorICAgQ0M9JGx0X3NhdmVfQ0MKKysgIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKKyAgIExEQ1hYPSRMRAorICAgTEQ9JGx0X3NhdmVfTEQKKyAgIEdDQz0kbHRfc2F2ZV9HQ0MKK0BAIC02NDQ1LDYgKzY4MjUsMjkgQEAgQUNfTEFOR19QT1AKKyBdKSMgX0xUX0xBTkdfQ1hYX0NPTkZJRworIAorIAorKyMgX0xUX0ZVTkNfU1RSSVBOQU1FX0NORgorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgZnVuY19zdHJpcG5hbWVfY25mIHByZWZpeCBzdWZmaXggbmFtZQorKyMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCisrIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKysjIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKysjIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCisrIworKyMgVGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gdGhlIChub24tWFNJKSB2ZXJzaW9uIG9mIGZ1bmNfc3RyaXBuYW1lLAorKyMgZXhjZXB0IHRoaXMgb25lIGNhbiBiZSB1c2VkIGJ5IG00IGNvZGUgdGhhdCBtYXkgYmUgZXhlY3V0ZWQgYnkgY29uZmlndXJlLAorKyMgcmF0aGVyIHRoYW4gdGhlIGxpYnRvb2wgc2NyaXB0LgorK200X2RlZnVuKFtfTFRfRlVOQ19TVFJJUE5BTUVfQ05GXSxbZG5sCisrQUNfUkVRVUlSRShbX0xUX0RFQ0xfU0VEXSkKKytBQ19SRVFVSVJFKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pCisrZnVuY19zdHJpcG5hbWVfY25mICgpCisreworKyAgY2FzZSAkezJ9IGluCisrICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworKyAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworKyAgZXNhYworK30gIyBmdW5jX3N0cmlwbmFtZV9jbmYKKytdKSMgX0xUX0ZVTkNfU1RSSVBOQU1FX0NORgorKworICMgX0xUX1NZU19ISURERU5fTElCREVQUyhbVEFHTkFNRV0pCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEZpZ3VyZSBvdXQgImhpZGRlbiIgbGlicmFyeSBkZXBlbmRlbmNpZXMgZnJvbSB2ZXJib3NlCitAQCAtNjQ1Myw2ICs2ODU2LDcgQEAgQUNfTEFOR19QT1AKKyAjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KKyBtNF9kZWZ1bihbX0xUX1NZU19ISURERU5fTElCREVQU10sCisgW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorK0FDX1JFUVVJUkUoW19MVF9GVU5DX1NUUklQTkFNRV9DTkZdKWRubAorICMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdCBiZWluZyBsaW5rZWQ6CisgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPQorIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9CitAQCAtNjUwMyw2ICs2OTA3LDEzIEBAIHB1YmxpYyBjbGFzcyBmb28geworIH07CisgX0xUX0VPRgorIF0pCisrCisrX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1M9JENGTEFHUworK2Nhc2UgIiRDQyAkQ0ZMQUdTICIgaW4gIygKKysqXCAtZmx0bypcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLWx0byIgOzsKKysqXCAtZndob3ByKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8td2hvcHIiIDs7CisrZXNhYworKworIGRubCBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKKyBkbmwgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCitAQCAtNjUxNCw3ICs2OTI1LDcgQEAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9bm8KKyAKKyAgIGZvciBwIGluIGBldmFsICIkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQiYDsgZG8KKy0gICAgY2FzZSAkcCBpbgorKyAgICBjYXNlICR7cHJldn0ke3B9IGluCisgCisgICAgIC1MKiB8IC1SKiB8IC1sKikKKyAgICAgICAgIyBTb21lIGNvbXBpbGVycyBwbGFjZSBzcGFjZSBiZXR3ZWVuICIte0wsUn0iIGFuZCB0aGUgcGF0aC4KK0BAIC02NTIzLDEzICs2OTM0LDIyIEBAIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgICAgICAgIHRlc3QgJHAgPSAiLVIiOyB0aGVuCisgCSBwcmV2PSRwCisgCSBjb250aW51ZQorLSAgICAgICBlbHNlCistCSBwcmV2PQorICAgICAgICBmaQorIAorKyAgICAgICAjIEV4cGFuZCB0aGUgc3lzcm9vdCB0byBlYXNlIGV4dHJhY3RpbmcgdGhlIGRpcmVjdG9yaWVzIGxhdGVyLgorKyAgICAgICBpZiB0ZXN0IC16ICIkcHJldiI7IHRoZW4KKysgICAgICAgICBjYXNlICRwIGluCisrICAgICAgICAgLUwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1MJyAnJyAiJHAiOyBwcmV2PS1MOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKysgICAgICAgICAtUiopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLVInICcnICIkcCI7IHByZXY9LVI7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworKyAgICAgICAgIC1sKikgZnVuY19zdHJpcG5hbWVfY25mICctbCcgJycgIiRwIjsgcHJldj0tbDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisrICAgICAgICAgZXNhYworKyAgICAgICBmaQorKyAgICAgICBjYXNlICRwIGluCisrICAgICAgID0qKSBmdW5jX3N0cmlwbmFtZV9jbmYgJz0nICcnICIkcCI7IHA9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisrICAgICAgIGVzYWMKKyAgICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KKy0JIGNhc2UgJHAgaW4KKy0JIC1MKiB8IC1SKikKKysJIGNhc2UgJHtwcmV2fSBpbgorKwkgLUwgfCAtUikKKyAJICAgIyBJbnRlcm5hbCBjb21waWxlciBsaWJyYXJ5IHBhdGhzIHNob3VsZCBjb21lIGFmdGVyIHRob3NlCisgCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQorIAkgICAjIHVzZXIgc3VwcGxpZWQgbGlicyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgdGhlbS4KK0BAIC02NTQ5LDggKzY5NjksMTAgQEAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAJICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSIke19MVF9UQUdWQVIocG9zdGRlcHMsICQxKX0gJHtwcmV2fSR7cH0iCisgCSBmaQorICAgICAgICBmaQorKyAgICAgICBwcmV2PQorICAgICAgICA7OworIAorKyAgICAqLmx0by4kb2JqZXh0KSA7OyAjIElnbm9yZSBHQ0MgTFRPIG9iamVjdHMKKyAgICAgKi4kb2JqZXh0KQorICAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB0ZXN0IG9iamVjdCBmaWxlIG9ubHkgc2hvd3MgdXAKKyAgICAgICAgIyBvbmNlIGluIHRoZSBjb21waWxlciBvdXRwdXQuCitAQCAtNjU4Niw2ICs3MDA4LDcgQEAgZWxzZQorIGZpCisgCisgJFJNIC1mIGNvbmZlc3QuJG9iamV4dAorK0NGTEFHUz0kX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1MKKyAKKyAjIFBPUlRNRTogb3ZlcnJpZGUgYWJvdmUgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIGJyb2tlbgorIG00X2lmKFskMV0sIFtDWFhdLAorQEAgLTY2MjIsNyArNzA0NSw3IEBAIGxpbnV4KikKKyAKKyBzb2xhcmlzKikKKyAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICBDQyopCisrICBDQyogfCBzdW5DQyopCisgICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcworICAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKyAgICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcworQEAgLTY3MzUsNyArNzE1OCw5IEBAIGlmIHRlc3QgIiRfbHRfZGlzYWJsZV9GNzciICE9IHllczsgdGhlbgorICAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgIGx0X3NhdmVfQ0M9IiRDQyIKKyAgIGx0X3NhdmVfR0NDPSRHQ0MKKysgIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAgIENDPSR7Rjc3LSJmNzcifQorKyAgQ0ZMQUdTPSRGRkxBR1MKKyAgIGNvbXBpbGVyPSRDQworICAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworICAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorQEAgLTY3ODksNiArNzIxNCw3IEBAIGlmIHRlc3QgIiRfbHRfZGlzYWJsZV9GNzciICE9IHllczsgdGhlbgorIAorICAgR0NDPSRsdF9zYXZlX0dDQworICAgQ0M9IiRsdF9zYXZlX0NDIgorKyAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCisgZmkgIyB0ZXN0ICIkX2x0X2Rpc2FibGVfRjc3IiAhPSB5ZXMKKyAKKyBBQ19MQU5HX1BPUAorQEAgLTY4NjUsNyArNzI5MSw5IEBAIGlmIHRlc3QgIiRfbHRfZGlzYWJsZV9GQyIgIT0geWVzOyB0aGVuCisgICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICAgbHRfc2F2ZV9DQz0iJENDIgorICAgbHRfc2F2ZV9HQ0M9JEdDQworKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICAgQ0M9JHtGQy0iZjk1In0KKysgIENGTEFHUz0kRkNGTEFHUworICAgY29tcGlsZXI9JENDCisgICBHQ0M9JGFjX2N2X2ZjX2NvbXBpbGVyX2dudQorIAorQEAgLTY5MjEsNyArNzM0OSw4IEBAIGlmIHRlc3QgIiRfbHRfZGlzYWJsZV9GQyIgIT0geWVzOyB0aGVuCisgICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKyAKKyAgIEdDQz0kbHRfc2F2ZV9HQ0MKKy0gIENDPSIkbHRfc2F2ZV9DQyIKKysgIENDPSRsdF9zYXZlX0NDCisrICBDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCisgZmkgIyB0ZXN0ICIkX2x0X2Rpc2FibGVfRkMiICE9IHllcworIAorIEFDX0xBTkdfUE9QCitAQCAtNjk1OCwxMCArNzM4NywxMiBAQCBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisgCisgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKy1sdF9zYXZlX0NDPSIkQ0MiCisrbHRfc2F2ZV9DQz0kQ0MKKytsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgbHRfc2F2ZV9HQ0M9JEdDQworIEdDQz15ZXMKKyBDQz0ke0dDSi0iZ2NqIn0KKytDRkxBR1M9JEdDSkZMQUdTCisgY29tcGlsZXI9JENDCisgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworIF9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorQEAgLTY5OTIsNyArNzQyMyw4IEBAIGZpCisgQUNfTEFOR19SRVNUT1JFCisgCisgR0NDPSRsdF9zYXZlX0dDQworLUNDPSIkbHRfc2F2ZV9DQyIKKytDQz0kbHRfc2F2ZV9DQworK0NGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKKyBdKSMgX0xUX0xBTkdfR0NKX0NPTkZJRworIAorIAorQEAgLTcwMjcsOSArNzQ1OSwxMSBAQCBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisgCisgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyBsdF9zYXZlX0NDPSIkQ0MiCisrbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworIGx0X3NhdmVfR0NDPSRHQ0MKKyBHQ0M9CisgQ0M9JHtSQy0id2luZHJlcyJ9CisrQ0ZMQUdTPQorIGNvbXBpbGVyPSRDQworIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCitAQCAtNzA0Miw3ICs3NDc2LDggQEAgZmkKKyAKKyBHQ0M9JGx0X3NhdmVfR0NDCisgQUNfTEFOR19SRVNUT1JFCistQ0M9IiRsdF9zYXZlX0NDIgorK0NDPSRsdF9zYXZlX0NDCisrQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworIF0pIyBfTFRfTEFOR19SQ19DT05GSUcKKyAKKyAKK0BAIC03MTAxLDYgKzc1MzYsMTUgQEAgX0xUX0RFQ0woW10sIFtPQkpEVU1QXSwgWzFdLCBbQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXJdKQorIEFDX1NVQlNUKFtPQkpEVU1QXSkKKyBdKQorIAorKyMgX0xUX0RFQ0xfRExMVE9PTAorKyMgLS0tLS0tLS0tLS0tLS0tLQorKyMgRW5zdXJlIERMTFRPT0wgdmFyaWFibGUgaXMgc2V0LgorK200X2RlZnVuKFtfTFRfREVDTF9ETExUT09MXSwKKytbQUNfQ0hFQ0tfVE9PTChETExUT09MLCBkbGx0b29sLCBmYWxzZSkKKyt0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCisrX0xUX0RFQ0woW10sIFtETExUT09MXSwgWzFdLCBbRExMIGNyZWF0aW9uIHByb2dyYW1dKQorK0FDX1NVQlNUKFtETExUT09MXSkKKytdKQorIAorICMgX0xUX0RFQ0xfU0VECisgIyAtLS0tLS0tLS0tLS0KK0BAIC03MTk0LDggKzc2MzgsOCBAQCBtNF9kZWZ1bihbX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTXSwKKyAjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworIHhzaV9zaGVsbD1ubworICggX2x0X2R1bW15PSJhL2IvYyIKKy0gIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCistICAgICAgPSBjLGEvYiwsIFwKKysgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisrICAgICAgPSBjLGEvYixiL2MsIFwKKyAgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAgJiYgeHNpX3NoZWxsPXllcworQEAgLTcyMzQsMjA2ICs3Njc4LDE2MiBAQCBfTFRfREVDTChbTkwyU1BdLCBbbHRfTkwyU1BdLCBbMV0sIFt0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzXSlkbmwKKyBdKSMgX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTCisgCisgCistIyBfTFRfUFJPR19YU0lfU0hFTExGTlMKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSMgQm91cm5lIGFuZCBYU0kgY29tcGF0aWJsZSB2YXJpYW50cyBvZiBzb21lIHVzZWZ1bCBzaGVsbCBmdW5jdGlvbnMuCistbTRfZGVmdW4oW19MVF9QUk9HX1hTSV9TSEVMTEZOU10sCistW2Nhc2UgJHhzaV9zaGVsbCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCistIyBjYWxsOgorLSMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCistIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CistIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCistIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCistIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworLSMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorLWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCistICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9CistfQorLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorLSAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7CistICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICRbKl0gKSkKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KKy19CisrIyBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFIChGVU5DTkFNRSwgUkVQTEFDRU1FTlQtQk9EWSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgSW4gYCRjZmdmaWxlJywgbG9vayBmb3IgZnVuY3Rpb24gRlVOQ05BTUUgZGVsaW1pdGVkIGJ5IGBeRlVOQ05BTUUgKCkkJyBhbmQKKysjICdefSBGVU5DTkFNRSAnLCBhbmQgcmVwbGFjZSBpdHMgYm9keSB3aXRoIFJFUExBQ0VNRU5ULUJPRFkuCisrbTRfZGVmdW4oW19MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0VdLAorK1tkbmwgeworK3NlZCAtZSAnL14kMSAoKSQvLC9efSAjICQxIC9jXAorKyQxICgpXAorK3tcCisrbTRfYnBhdHN1YnN0cyhbJDJdLCBbJF0sIFtcXF0sIFteXChbCSBdXCldLCBbXFxcMV0pCisrfSAjIEV4dGVuZGVkLXNoZWxsICQxIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrXSkKKyAKKy1fTFRfRU9GCistICAgIDs7CistICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyAKKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKy0gIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKKy0gIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCistICBlbHNlCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKy0gIGZpCistfQorKyMgX0xUX1BST0dfUkVQTEFDRV9TSEVMTEZOUworKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgUmVwbGFjZSBleGlzdGluZyBwb3J0YWJsZSBpbXBsZW1lbnRhdGlvbnMgb2Ygc2V2ZXJhbCBzaGVsbCBmdW5jdGlvbnMgd2l0aAorKyMgZXF1aXZhbGVudCBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbnMgd2hlcmUgdGhvc2UgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZS4uCisrbTRfZGVmdW4oW19MVF9QUk9HX1JFUExBQ0VfU0hFTExGTlNdLAorK1tpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCisrICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2Rpcm5hbWVdLCBbZG5sCisrICAgIGNhc2UgJHsxfSBpbgorKyAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CisrICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworKyAgICBlc2FjXSkKKysKKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYmFzZW5hbWVdLCBbZG5sCisrICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJdKQorKworKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZV0sIFtkbmwKKysgICAgY2FzZSAkezF9IGluCisrICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKysgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CisrICAgIGVzYWMKKysgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99Il0pCisgCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCistfQorKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19zdHJpcG5hbWVdLCBbZG5sCisrICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKysgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorKyAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorKyAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorKyAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifV0pCisgCistZG5sIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUKKy1kbmwgQSBwb3J0YWJsZSB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gaXMgYWxyZWFkeSBkZWZpbmVkIGluIGdlbmVyYWwubTRzaAorLWRubCBzbyB0aGVyZSBpcyBubyBuZWVkIGZvciBpdCBoZXJlLgorKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19zcGxpdF9sb25nX29wdF0sIFtkbmwKKysgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9CisrICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1dKQorIAorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy0jIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICBjYXNlICR7Mn0gaW4KKy0gICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKy0gICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworLSAgZXNhYworLX0KKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfc3BsaXRfc2hvcnRfb3B0XSwgW2RubAorKyAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fQorKyAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XSkKKyAKKy0jIHNlZCBzY3JpcHRzOgorLW15X3NlZF9sb25nX29wdD0nMXMvXlwoLVtbXj1dXSpcKT0uKi9cMS87cScKKy1teV9zZWRfbG9uZ19hcmc9JzFzL14tW1tePV1dKj0vLycKKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfbG8yb10sIFtkbmwKKysgICAgY2FzZSAkezF9IGluCisrICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKysgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKysgICAgZXNhY10pCisgCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCistfQorKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY194Zm9ybV0sIFsgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb10pCisgCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAorLX0KKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYXJpdGhdLCBbICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkWypdICkpXSkKKyAKKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLltbXi5dXSokLy5sby8nYAorLX0KKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfbGVuXSwgWyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1dKQorK2ZpCisgCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJFtAXSJgCistfQorK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYXBwZW5kXSwgWyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXSkKKyAKKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJFsxXSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorLX0KKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYXBwZW5kX3F1b3RlZF0sIFtkbmwKKysgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSIKKytkbmwgbTQgZXhwYW5zaW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHRoZW4gdGhlIHNoZWxsIGV2YWwgdHVybnMgdGhhdCBpbnRvIFwKKysgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJdKQorIAorLV9MVF9FT0YKKy1lc2FjCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbW2EtekEtWl9dXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytlbHNlCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQorKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW1thLXpBLVpfXV1cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytmaQorIAorLWNhc2UgJGx0X3NoZWxsX2FwcGVuZCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCisrICBBQ19NU0dfV0FSTihbVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZV0pCisrZmkKKytdKQorIAorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkWzFdKz1cJFsyXSIKKy19CistX0xUX0VPRgorKyMgX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlMKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBEZXRlcm1pbmUgd2hpY2ggZmlsZSBuYW1lIGNvbnZlcnNpb24gZnVuY3Rpb25zIHNob3VsZCBiZSB1c2VkIGJ5CisrIyBmdW5jX3RvX2hvc3RfZmlsZSAoYW5kLCBpbXBsaWNpdGx5LCBieSBmdW5jX3RvX2hvc3RfcGF0aCkuICBUaGVzZSBhcmUgbmVlZGVkCisrIyBmb3IgY2VydGFpbiBjcm9zcy1jb21waWxlIGNvbmZpZ3VyYXRpb25zIGFuZCBuYXRpdmUgbWluZ3cuCisrbTRfZGVmdW4oW19MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TXSwKKytbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCisrQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXRdKQorK0FDX0NBQ0hFX1ZBTChsdF9jdl90b19ob3N0X2ZpbGVfY21kLAorK1tjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKyAgICAgOzsKKy0gICopCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiRbMV09XCQkWzFdXCRbMl0iCistfQorLQorLV9MVF9FT0YKKysgICotKi1jeWd3aW4qICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgIGVzYWMKKyAgICAgOzsKKy0gIGVzYWMKKysgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCisrICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICA7OworK2VzYWMKKytdKQorK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKytBQ19NU0dfUkVTVUxUKFskbHRfY3ZfdG9faG9zdF9maWxlX2NtZF0pCisrX0xUX0RFQ0woW3RvX2hvc3RfZmlsZV9jbWRdLCBbbHRfY3ZfdG9faG9zdF9maWxlX2NtZF0sCisrICAgICAgICAgWzBdLCBbY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXRdKWRubAorKworK0FDX01TR19DSEVDS0lORyhbaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdF0pCisrQUNfQ0FDSEVfVkFMKGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQsCisrWyNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KKytsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKytjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrZXNhYworIF0pCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorK0FDX01TR19SRVNVTFQoWyRsdF9jdl90b190b29sX2ZpbGVfY21kXSkKKytfTFRfREVDTChbdG9fdG9vbF9maWxlX2NtZF0sIFtsdF9jdl90b190b29sX2ZpbGVfY21kXSwKKysgICAgICAgICBbMF0sIFtjb252ZXJ0ICRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0XSlkbmwKKytdKSMgX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlMKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IDk1MDNlYzguLjcwZTg1NmUgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTEsMTAgKzEsOSBAQAorLSMgR2VuZXJhdGVkIGZyb20gbHRtYWluLm00c2guCisgCistIyBsaWJ0b29sIChHTlUgbGlidG9vbCAxLjMxMzQgMjAwOS0xMS0yOSkgMi4yLjdhCisrIyBsaWJ0b29sIChHTlUgbGlidG9vbCkgMi40CisgIyBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorIAorICMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LAorLSMgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTworICMgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgCitAQCAtMzgsNyArMzcsNiBAQAorICMgICAtbiwgLS1kcnktcnVuICAgICAgICAgICAgZGlzcGxheSBjb21tYW5kcyB3aXRob3V0IG1vZGlmeWluZyBhbnkgZmlsZXMKKyAjICAgICAgIC0tZmVhdHVyZXMgICAgICAgICAgIGRpc3BsYXkgYmFzaWMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorICMgICAgICAgLS1tb2RlPU1PREUgICAgICAgICAgdXNlIG9wZXJhdGlvbiBtb2RlIE1PREUKKy0jICAgICAgIC0tbm8tZmluaXNoICAgICAgICAgIGxldCBpbnN0YWxsIG1vZGUgYXZvaWQgZmluaXNoIGNvbW1hbmRzCisgIyAgICAgICAtLXByZXNlcnZlLWR1cC1kZXBzICBkb24ndCByZW1vdmUgZHVwbGljYXRlIGRlcGVuZGVuY3kgbGlicmFyaWVzCisgIyAgICAgICAtLXF1aWV0LCAtLXNpbGVudCAgICBkb24ndCBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCisgIyAgICAgICAtLW5vLXF1aWV0LCAtLW5vLXNpbGVudAorQEAgLTcxLDE3ICs2OSwxOSBAQAorICMgICAgICAgICBjb21waWxlcjoJCSRMVENDCisgIyAgICAgICAgIGNvbXBpbGVyIGZsYWdzOgkJJExUQ0ZMQUdTCisgIyAgICAgICAgIGxpbmtlcjoJCSRMRCAoZ251PyAkd2l0aF9nbnVfbGQpCistIyAgICAgICAgICRwcm9nbmFtZToJKEdOVSBsaWJ0b29sIDEuMzEzNCAyMDA5LTExLTI5KSAyLjIuN2EKKysjICAgICAgICAgJHByb2duYW1lOgkoR05VIGxpYnRvb2wpIDIuNAorICMgICAgICAgICBhdXRvbWFrZToJJGF1dG9tYWtlX3ZlcnNpb24KKyAjICAgICAgICAgYXV0b2NvbmY6CSRhdXRvY29uZl92ZXJzaW9uCisgIworICMgUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+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+XCRvbGRfYXJjaGl2ZV9jbWRzXCIiCisrCSAgICBldmFsIGNtZHM9XCJcJGNvbmNhdF9jbWRzflwkb2xkX2FyY2hpdmVfY21kc1wiCisgCSAgZmkKKyAJZmkKKyAgICAgICBmaQorQEAgLTgyNjgsMTIgKzkyNjgsMjMgQEAgRU9GCisgCSAgICAgICoubGEpCisgCQlmdW5jX2Jhc2VuYW1lICIkZGVwbGliIgorIAkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLQkJbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisrCQlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIKKysJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHRgCisgCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisgCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorLQkJbmV3ZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzICRsaWJkaXIvJG5hbWUiCisrCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAke2x0X3N5c3Jvb3Q6Kz19JGxpYmRpci8kbmFtZSIKKysJCTs7CisrCSAgICAgIC1MKikKKysJCWZ1bmNfc3RyaXBuYW1lIC1MICcnICIkZGVwbGliIgorKwkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAtTCRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQiCisgCQk7OworLQkgICAgICAqKSBuZXdkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMgJGRlcGxpYiIgOzsKKysJICAgICAgLVIqKQorKwkJZnVuY19zdHJpcG5hbWUgLVIgJycgIiRkZXBsaWIiCisrCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysJCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiIC1SJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKKysJCTs7CisrCSAgICAgICopIGZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiICRkZXBsaWIiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIGRvbmUKKyAJICAgIGRlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyIKK0BAIC04Mjg0LDEyICs5Mjk1LDE0IEBAIEVPRgorIAkgICAgICAqLmxhKQorIAkgICAgICAgIGZ1bmNfYmFzZW5hbWUgIiRsaWIiCisgCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistCQlsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGxpYmAKKysJCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkbGliIgorKwkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdGAKKysKKyAJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKyAJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCistCQluZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkbGliZGlyLyRuYW1lIgorKwkJZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgorIAkJOzsKKy0JICAgICAgKikgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGxpYiIgOzsKKysJICAgICAgKikgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRsaWIiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIGRvbmUKKyAJICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorQEAgLTgzMDMsMTAgKzkzMTYsMTEgQEAgRU9GCisgCQkjIHRoZSBsaWJyYXJ5OgorIAkJZnVuY19iYXNlbmFtZSAiJGxpYiIKKyAJCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0JCWxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorKwkJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRsaWIiCisrCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0YAorIAkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAorIAkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKy0JCW5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRsaWJkaXIvJG5hbWUiCisrCQlmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCisgCQk7OworIAkgICAgICBlc2FjCisgCSAgICBkb25lCitAQCAtODMxOCw3ICs5MzMyLDcgQEAgRU9GCisgCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFicz0iJGxpYiIgOzsKKyAJCSopIGFicz1gcHdkYCIvJGxpYiIgOzsKKyAJICAgICAgZXNhYworLQkgICAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkYWJzIgorKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGFicyIKKyAJICAgIGRvbmUKKyAJICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorIAkgICAgbmV3ZGxwcmVmaWxlcz0KK0BAIC04MzI3LDcgKzkzNDEsNyBAQCBFT0YKKyAJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSIkbGliIiA7OworIAkJKikgYWJzPWBwd2RgIi8kbGliIiA7OworIAkgICAgICBlc2FjCistCSAgICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRhYnMiCisrCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkYWJzIgorIAkgICAgZG9uZQorIAkgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisgCSAgZmkKK0BAIC04NDEyLDcgKzk0MjYsNyBAQCByZWxpbmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwiIgorICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyB9CisgCisteyB0ZXN0ICIkbW9kZSIgPSBsaW5rIHx8IHRlc3QgIiRtb2RlIiA9IHJlbGluazsgfSAmJgorK3sgdGVzdCAiJG9wdF9tb2RlIiA9IGxpbmsgfHwgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgfSAmJgorICAgICBmdW5jX21vZGVfbGluayAkezErIiRAIn0KKyAKKyAKK0BAIC04NDMyLDkgKzk0NDYsOSBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCisgICAgIGZvciBhcmcKKyAgICAgZG8KKyAgICAgICBjYXNlICRhcmcgaW4KKy0gICAgICAtZikgUk09IiRSTSAkYXJnIjsgcm1mb3JjZT15ZXMgOzsKKy0gICAgICAtKikgUk09IiRSTSAkYXJnIiA7OworLSAgICAgICopIGZpbGVzPSIkZmlsZXMgJGFyZyIgOzsKKysgICAgICAtZikgZnVuY19hcHBlbmQgUk0gIiAkYXJnIjsgcm1mb3JjZT15ZXMgOzsKKysgICAgICAtKikgZnVuY19hcHBlbmQgUk0gIiAkYXJnIiA7OworKyAgICAgICopIGZ1bmNfYXBwZW5kIGZpbGVzICIgJGFyZyIgOzsKKyAgICAgICBlc2FjCisgICAgIGRvbmUKKyAKK0BAIC04NDQzLDI0ICs5NDU3LDIzIEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAKKyAgICAgcm1kaXJzPQorIAorLSAgICBvcmlnb2JqZGlyPSIkb2JqZGlyIgorICAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisgICAgICAgZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCisgICAgICAgZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyAgICAgICBpZiB0ZXN0ICJYJGRpciIgPSBYLjsgdGhlbgorLQlvYmpkaXI9IiRvcmlnb2JqZGlyIgorKwlvZGlyPSIkb2JqZGlyIgorICAgICAgIGVsc2UKKy0Jb2JqZGlyPSIkZGlyLyRvcmlnb2JqZGlyIgorKwlvZGlyPSIkZGlyLyRvYmpkaXIiCisgICAgICAgZmkKKyAgICAgICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKyAgICAgICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistICAgICAgdGVzdCAiJG1vZGUiID0gdW5pbnN0YWxsICYmIG9iamRpcj0iJGRpciIKKysgICAgICB0ZXN0ICIkb3B0X21vZGUiID0gdW5pbnN0YWxsICYmIG9kaXI9IiRkaXIiCisgCistICAgICAgIyBSZW1lbWJlciBvYmpkaXIgZm9yIHJlbW92YWwgbGF0ZXIsIGJlaW5nIGNhcmVmdWwgdG8gYXZvaWQgZHVwbGljYXRlcworLSAgICAgIGlmIHRlc3QgIiRtb2RlIiA9IGNsZWFuOyB0aGVuCisrICAgICAgIyBSZW1lbWJlciBvZGlyIGZvciByZW1vdmFsIGxhdGVyLCBiZWluZyBjYXJlZnVsIHRvIGF2b2lkIGR1cGxpY2F0ZXMKKysgICAgICBpZiB0ZXN0ICIkb3B0X21vZGUiID0gY2xlYW47IHRoZW4KKyAJY2FzZSAiICRybWRpcnMgIiBpbgorLQkgICoiICRvYmpkaXIgIiopIDs7CistCSAgKikgcm1kaXJzPSIkcm1kaXJzICRvYmpkaXIiIDs7CisrCSAgKiIgJG9kaXIgIiopIDs7CisrCSAgKikgZnVuY19hcHBlbmQgcm1kaXJzICIgJG9kaXIiIDs7CisgCWVzYWMKKyAgICAgICBmaQorIAorQEAgLTg0ODYsMTggKzk0OTksMTcgQEAgZnVuY19tb2RlX3VuaW5zdGFsbCAoKQorIAorIAkgICMgRGVsZXRlIHRoZSBsaWJ0b29sIGxpYnJhcmllcyBhbmQgc3ltbGlua3MuCisgCSAgZm9yIG4gaW4gJGxpYnJhcnlfbmFtZXM7IGRvCistCSAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRuIgorKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuIgorIAkgIGRvbmUKKy0JICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG9sZF9saWJyYXJ5IgorKwkgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRvbGRfbGlicmFyeSIKKyAKKy0JICBjYXNlICIkbW9kZSIgaW4KKysJICBjYXNlICIkb3B0X21vZGUiIGluCisgCSAgY2xlYW4pCistCSAgICBjYXNlICIgICRsaWJyYXJ5X25hbWVzICIgaW4KKy0JICAgICMgIiAgIiBpbiB0aGUgYmVnaW5uaW5nIGNhdGNoZXMgZW1wdHkgJGRsbmFtZQorKwkgICAgY2FzZSAiICRsaWJyYXJ5X25hbWVzICIgaW4KKyAJICAgICoiICRkbG5hbWUgIiopIDs7CistCSAgICAqKSBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRkbG5hbWUiIDs7CisrCSAgICAqKSB0ZXN0IC1uICIkZGxuYW1lIiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGRsbmFtZSIgOzsKKyAJICAgIGVzYWMKKy0JICAgIHRlc3QgLW4gIiRsaWJkaXIiICYmIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG5hbWUgJG9iamRpci8ke25hbWV9aSIKKysJICAgIHRlc3QgLW4gIiRsaWJkaXIiICYmIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kbmFtZSAkb2Rpci8ke25hbWV9aSIKKyAJICAgIDs7CisgCSAgdW5pbnN0YWxsKQorIAkgICAgaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiOyB0aGVuCitAQCAtODUyNSwxOSArOTUzNywxOSBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCisgCSAgIyBBZGQgUElDIG9iamVjdCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byByZW1vdmUuCisgCSAgaWYgdGVzdCAtbiAiJHBpY19vYmplY3QiICYmCisgCSAgICAgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKy0JICAgIHJtZmlsZXM9IiRybWZpbGVzICRkaXIvJHBpY19vYmplY3QiCisrCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGRpci8kcGljX29iamVjdCIKKyAJICBmaQorIAorIAkgICMgQWRkIG5vbi1QSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KKyAJICBpZiB0ZXN0IC1uICIkbm9uX3BpY19vYmplY3QiICYmCisgCSAgICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCistCSAgICBybWZpbGVzPSIkcm1maWxlcyAkZGlyLyRub25fcGljX29iamVjdCIKKysJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZGlyLyRub25fcGljX29iamVjdCIKKyAJICBmaQorIAlmaQorIAk7OworIAorICAgICAgICopCistCWlmIHRlc3QgIiRtb2RlIiA9IGNsZWFuIDsgdGhlbgorKwlpZiB0ZXN0ICIkb3B0X21vZGUiID0gY2xlYW4gOyB0aGVuCisgCSAgbm9leGVuYW1lPSRuYW1lCisgCSAgY2FzZSAkZmlsZSBpbgorIAkgICouZXhlKQorQEAgLTg1NDcsNyArOTU1OSw3IEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAJICAgIG5vZXhlbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgCSAgICAjICRmaWxlIHdpdGggLmV4ZSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHJtZmlsZXMsCisgCSAgICAjIGFkZCAkZmlsZSB3aXRob3V0IC5leGUKKy0JICAgIHJtZmlsZXM9IiRybWZpbGVzICRmaWxlIgorKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRmaWxlIgorIAkgICAgOzsKKyAJICBlc2FjCisgCSAgIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgYSBsaWJ0b29sIHByb2dyYW0uCitAQCAtODU1Niw3ICs5NTY4LDcgQEAgZnVuY19tb2RlX3VuaW5zdGFsbCAoKQorIAkgICAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKKyAJICAgICAgcmVsaW5rX2NvbW1hbmQ9CisgCSAgICAgIGZ1bmNfc291cmNlICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorLQkgICAgICBybWZpbGVzPSIkcm1maWxlcyAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQiCisrCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQiCisgCSAgICBlbHNlCisgCSAgICAgIHJlbGlua19jb21tYW5kPQorIAkgICAgICBmdW5jX3NvdXJjZSAkZGlyLyRub2V4ZW5hbWUKK0BAIC04NTY0LDEyICs5NTc2LDEyIEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAKKyAJICAgICMgbm90ZSAkbmFtZSBzdGlsbCBjb250YWlucyAuZXhlIGlmIGl0IHdhcyBpbiAkZmlsZSBvcmlnaW5hbGx5CisgCSAgICAjIGFzIGRvZXMgdGhlIHZlcnNpb24gb2YgJGZpbGUgdGhhdCB3YXMgYWRkZWQgaW50byAkcm1maWxlcworLQkgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbmFtZSAkb2JqZGlyLyR7bmFtZX1TLiR7b2JqZXh0fSIKKysJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kbmFtZSAkb2Rpci8ke25hbWV9Uy4ke29iamV4dH0iCisgCSAgICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllcyAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCistCSAgICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvbHQtJG5hbWUiCisrCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci9sdC0kbmFtZSIKKyAJICAgIGZpCisgCSAgICBpZiB0ZXN0ICJYJG5vZXhlbmFtZSIgIT0gIlgkbmFtZSIgOyB0aGVuCistCSAgICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvbHQtJHtub2V4ZW5hbWV9LmMiCisrCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci9sdC0ke25vZXhlbmFtZX0uYyIKKyAJICAgIGZpCisgCSAgZmkKKyAJZmkKK0BAIC04NTc3LDcgKzk1ODksNiBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCisgICAgICAgZXNhYworICAgICAgIGZ1bmNfc2hvd19ldmFsICIkUk0gJHJtZmlsZXMiICdleGl0X3N0YXR1cz0xJworICAgICBkb25lCistICAgIG9iamRpcj0iJG9yaWdvYmpkaXIiCisgCisgICAgICMgVHJ5IHRvIHJlbW92ZSB0aGUgJHtvYmpkaXJ9cyBpbiB0aGUgZGlyZWN0b3JpZXMgd2hlcmUgd2UgZGVsZXRlZCBmaWxlcworICAgICBmb3IgZGlyIGluICRybWRpcnM7IGRvCitAQCAtODU4OSwxNiArOTYwMCwxNiBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCisgICAgIGV4aXQgJGV4aXRfc3RhdHVzCisgfQorIAorLXsgdGVzdCAiJG1vZGUiID0gdW5pbnN0YWxsIHx8IHRlc3QgIiRtb2RlIiA9IGNsZWFuOyB9ICYmCisreyB0ZXN0ICIkb3B0X21vZGUiID0gdW5pbnN0YWxsIHx8IHRlc3QgIiRvcHRfbW9kZSIgPSBjbGVhbjsgfSAmJgorICAgICBmdW5jX21vZGVfdW5pbnN0YWxsICR7MSsiJEAifQorIAorLXRlc3QgLXogIiRtb2RlIiAmJiB7CisrdGVzdCAteiAiJG9wdF9tb2RlIiAmJiB7CisgICBoZWxwPSIkZ2VuZXJpY19oZWxwIgorICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgTU9ERSIKKyB9CisgCisgdGVzdCAteiAiJGV4ZWNfY21kIiAmJiBcCistICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkbW9kZSciCisrICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkb3B0X21vZGUnIgorIAorIGlmIHRlc3QgLW4gIiRleGVjX2NtZCI7IHRoZW4KKyAgIGV2YWwgZXhlYyAiJGV4ZWNfY21kIgorZGlmZiAtLWdpdCBhL2x0b3B0aW9ucy5tNCBiL2x0b3B0aW9ucy5tNAoraW5kZXggNWVmMTJjZS4uMTdjZmQ1MSAxMDA2NDQKKy0tLSBhL2x0b3B0aW9ucy5tNAorKysrIGIvbHRvcHRpb25zLm00CitAQCAtOCw3ICs4LDcgQEAKKyAjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorICMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisgCistIyBzZXJpYWwgNiBsdG9wdGlvbnMubTQKKysjIHNlcmlhbCA3IGx0b3B0aW9ucy5tNAorIAorICMgVGhpcyBpcyB0byBoZWxwIGFjbG9jYWwgZmluZCB0aGVzZSBtYWNyb3MsIGFzIGl0IGNhbid0IHNlZSBtNF9kZWZpbmUuCisgQUNfREVGVU4oW0xUT1BUSU9OU19WRVJTSU9OXSwgW200X2lmKFsxXSldKQorZGlmZiAtLWdpdCBhL2x0dmVyc2lvbi5tNCBiL2x0dmVyc2lvbi5tNAoraW5kZXggYmY4N2Y3Ny4uOWM3YjVkNCAxMDA2NDQKKy0tLSBhL2x0dmVyc2lvbi5tNAorKysrIGIvbHR2ZXJzaW9uLm00CitAQCAtNywxNyArNywxNyBAQAorICMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisgIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyAKKy0jIEdlbmVyYXRlZCBmcm9tIGx0dmVyc2lvbi5pbi4KKysjIEBjb25maWd1cmVfaW5wdXRACisgCistIyBzZXJpYWwgMzEzNCBsdHZlcnNpb24ubTQKKysjIHNlcmlhbCAzMjkzIGx0dmVyc2lvbi5tNAorICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wKKyAKKy1tNF9kZWZpbmUoW0xUX1BBQ0tBR0VfVkVSU0lPTl0sIFsyLjIuN2FdKQorLW00X2RlZmluZShbTFRfUEFDS0FHRV9SRVZJU0lPTl0sIFsxLjMxMzRdKQorK200X2RlZmluZShbTFRfUEFDS0FHRV9WRVJTSU9OXSwgWzIuNF0pCisrbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1JFVklTSU9OXSwgWzEuMzI5M10pCisgCisgQUNfREVGVU4oW0xUVkVSU0lPTl9WRVJTSU9OXSwKKy1bbWFjcm9fdmVyc2lvbj0nMi4yLjdhJworLW1hY3JvX3JldmlzaW9uPScxLjMxMzQnCisrW21hY3JvX3ZlcnNpb249JzIuNCcKKyttYWNyb19yZXZpc2lvbj0nMS4zMjkzJworIF9MVF9ERUNMKCwgbWFjcm9fdmVyc2lvbiwgMCwgW1doaWNoIHJlbGVhc2Ugb2YgbGlidG9vbC5tNCB3YXMgdXNlZD9dKQorIF9MVF9ERUNMKCwgbWFjcm9fcmV2aXNpb24sIDApCisgXSkKK2RpZmYgLS1naXQgYS9sdH5vYnNvbGV0ZS5tNCBiL2x0fm9ic29sZXRlLm00CitpbmRleCBiZjkyYjVlLi5jNTczZGE5IDEwMDY0NAorLS0tIGEvbHR+b2Jzb2xldGUubTQKKysrKyBiL2x0fm9ic29sZXRlLm00CitAQCAtNyw3ICs3LDcgQEAKKyAjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorICMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisgCistIyBzZXJpYWwgNCBsdH5vYnNvbGV0ZS5tNAorKyMgc2VyaWFsIDUgbHR+b2Jzb2xldGUubTQKKyAKKyAjIFRoZXNlIGV4aXN0IGVudGlyZWx5IHRvIGZvb2wgYWNsb2NhbCB3aGVuIGJvb3RzdHJhcHBpbmcgbGlidG9vbC4KKyAjCitkaWZmIC0tZ2l0IGEvb3Bjb2Rlcy9jb25maWd1cmUgYi9vcGNvZGVzL2NvbmZpZ3VyZQoraW5kZXggYzljMDRjZS4uMzExNDFkOSAxMDA3NTUKKy0tLSBhL29wY29kZXMvY29uZmlndXJlCisrKysgYi9vcGNvZGVzL2NvbmZpZ3VyZQorQEAgLTY0OCw2ICs2NDgsOSBAQCBPVE9PTAorIExJUE8KKyBOTUVESVQKKyBEU1lNVVRJTAorK01BTklGRVNUX1RPT0wKKythY19jdF9BUgorK0RMTFRPT0wKKyBPQkpEVU1QCisgTE5fUworIE5NCitAQCAtNzYwLDYgKzc2Myw3IEBAIGVuYWJsZV9zdGF0aWMKKyB3aXRoX3BpYworIGVuYWJsZV9mYXN0X2luc3RhbGwKKyB3aXRoX2dudV9sZAorK3dpdGhfbGlidG9vbF9zeXNyb290CisgZW5hYmxlX2xpYnRvb2xfbG9jaworIGVuYWJsZV90YXJnZXRzCisgZW5hYmxlX3dlcnJvcgorQEAgLTE0MjAsNiArMTQyNCw4IEBAIE9wdGlvbmFsIFBhY2thZ2VzOgorICAgLS13aXRoLXBpYyAgICAgICAgICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib3RoXQorICAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQorKyAgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD1ESVIgU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKKysgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS4KKyAKKyBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKKyAgIENDICAgICAgICAgIEMgY29tcGlsZXIgY29tbWFuZAorQEAgLTUxMTAsOCArNTExNiw4IEBAIGVzYWMKKyAKKyAKKyAKKy1tYWNyb192ZXJzaW9uPScyLjIuN2EnCistbWFjcm9fcmV2aXNpb249JzEuMzEzNCcKKyttYWNyb192ZXJzaW9uPScyLjQnCisrbWFjcm9fcmV2aXNpb249JzEuMzI5MycKKyAKKyAKKyAKK0BAIC01MTUxLDcgKzUxNTcsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9CisgIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCistaWYgdGVzdCAiWGBwcmludCAtciAtLSAtbiAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKytpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKyAgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICAgRUNITz0ncHJpbnQgLXIgLS0nCisgZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KK0BAIC01ODM3LDggKzU4NDMsOCBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OworICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCisgeHNpX3NoZWxsPW5vCisgKCBfbHRfZHVtbXk9ImEvYi9jIgorLSAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKy0gICAgICA9IGMsYS9iLCwgXAorKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKysgICAgICA9IGMsYS9iLGIvYywgXAorICAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICAmJiB4c2lfc2hlbGw9eWVzCitAQCAtNTg4Nyw2ICs1ODkzLDgwIEBAIGVzYWMKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b19ob3N0X2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqLSotY3lnd2luKiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQorKyAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9fdG9vbF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgICNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KKytsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKytjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC01OTAzLDYgKzU5ODMsMTEgQEAgY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyBlc2FjCisgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworIGNhc2UgJGhvc3Rfb3MgaW4KKysgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisrICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKysgICAgZmkKKysgICAgOzsKKyAgIGRhcndpbiopCisgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworQEAgLTYwNzEsNyArNjE1Niw4IEBAIG1pbmd3KiB8IHB3MzIqKQorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgIGVsc2UKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCisrICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KKysgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgICBmaQorICAgOzsKK0BAIC02MjI1LDYgKzYzMTEsMjEgQEAgZXNhYworIGZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1CisgJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CisrCisrZmlsZV9tYWdpY19nbG9iPQorK3dhbnRfbm9jYXNlZ2xvYj1ubworK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisrICBjYXNlICRob3N0X29zIGluCisrICBtaW5ndyogfCBwdzMyKikKKysgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKKysgICAgZWxzZQorKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1wxXVwvW1wxXVwvZzsvZyJgCisrICAgIGZpCisrICAgIDs7CisrICBlc2FjCisrZmkKKysKKyBmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKKyB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KK0BAIC02MjQwLDkgKzYzNDEsMTYyIEBAIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorIAorIAorIAorKworKworKworKworKworKworKworKworKworKworIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisrICBhY19jdF9ETExUT09MPSRETExUT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorKyAgICBETExUT09MPSJmYWxzZSIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKysgIGZpCisrZWxzZQorKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCisrCisrY2FzZSAkaG9zdF9vcyBpbgorK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKKysgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKysgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorKyAgKi0taWRlbnRpZnktc3RyaWN0KikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisrICAgIDs7CisrICAqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKysgICAgOzsKKysgIGVzYWMKKysgIDs7CisrKikKKysgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorKyAgOzsKKytlc2FjCisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjY7IH0KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKyt0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisrCisrCisrCisrCisrCisrCisrCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKysgIGRvCisrICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTYyNTgsNyArNjUxMiw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKKysgICAgYWNfY3ZfcHJvZ19BUj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTYyNzgsMTEgKzY1MzIsMTUgQEAgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorKyAgICB0ZXN0IC1uICIkQVIiICYmIGJyZWFrCisrICBkb25lCisgZmkKKy1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKytpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCisgICBhY19jdF9BUj0kQVIKKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSBhcjsgYWNfd29yZD0kMgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKytkbworKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjI5OCw3ICs2NTU2LDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKKysgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTYzMTcsNiArNjU3NSwxMCBAQCBlbHNlCisgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorKworKyAgdGVzdCAtbiAiJGFjX2N0X0FSIiAmJiBicmVhaworK2RvbmUKKysKKyAgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgICBBUj0iZmFsc2UiCisgICBlbHNlCitAQCAtNjMyOCwxNiArNjU5MCw3MiBAQCBhY190b29sX3dhcm5lZD15ZXMgOzsKKyBlc2FjCisgICAgIEFSPSRhY19jdF9BUgorICAgZmkKKy1lbHNlCistICBBUj0iJGFjX2N2X3Byb2dfQVIiCisgZmkKKyAKKy10ZXN0IC16ICIkQVIiICYmIEFSPWFyCistdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKys6ICR7QVI9YXJ9CisrOiAke0FSX0ZMQUdTPWNydX0KKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfYXJfYXRfZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X2FyX2F0X2ZpbGU9bm8KKysgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworK2ludAorK21haW4gKCkKKyt7CisgCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorKyAgZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0CisrICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JjUnCisrICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKysJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKysJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCisrCXsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKwlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgorKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKyAKKytmaQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIAorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcl9hdF9maWxlIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQorIAorK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KKytlbHNlCisrICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKKytmaQorIAorIAorIAorQEAgLTY2NzksOCArNjk5Nyw4IEBAIGVzYWMKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorIAorICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKyAKKyAjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KKyBvcHRfY3I9CitAQCAtNjcxNiw2ICs3MDM0LDcgQEAgZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworICAgZWxzZQorICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICAgZmkKKysgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKKyAKKyAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICAgcGlwZV93b3Jrcz1ubworQEAgLTY3NTcsNiArNzA3NiwxOCBAQCBfTFRfRU9GCisgICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKysvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKysjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKysvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbHNlCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKysjZW5kaWYKKysKKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyAjZW5kaWYKK0BAIC02NzY4LDcgKzcwOTksNyBAQCBfTFRfRU9GCisgCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgCisgLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworLWNvbnN0IHN0cnVjdCB7CisrTFRfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICB2b2lkICAgICAgICphZGRyZXNzOworIH0KK0BAIC02Nzk0LDggKzcxMjUsOCBAQCBzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworIF9MVF9FT0YKKyAJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorIAkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorLQkgIGx0X3NhdmVfTElCUz0iJExJQlMiCistCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKysJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorIAkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKKyAJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKK0BAIC02ODA1LDggKzcxMzYsOCBAQCBfTFRfRU9GCisgICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAJICAgIHBpcGVfd29ya3M9eWVzCisgCSAgZmkKKy0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisrCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisgCWVsc2UKKyAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKKyAJZmkKK0BAIC02ODQzLDYgKzcxNzQsMTYgQEAgZWxzZQorICRhc19lY2hvICJvayIgPiY2OyB9CisgZmkKKyAKKysjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KKytpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW0BdRklMRScgPi9kZXYvbnVsbDsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZmkKKysKKysKKysKKysKKyAKKyAKKyAKK0BAIC02ODY0LDYgKzcyMDUsNDUgQEAgZmkKKyAKKyAKKyAKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzcm9vdC4uLiAiID4mNjsgfQorKworKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlidG9vbC1zeXNyb290IHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke3dpdGhfbGlidG9vbF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuIDoKKysgIHdpdGh2YWw9JHdpdGhfbGlidG9vbF9zeXNyb290OworK2Vsc2UKKysgIHdpdGhfbGlidG9vbF9zeXNyb290PW5vCisrZmkKKysKKysKKytsdF9zeXNyb290PQorK2Nhc2UgJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0gaW4gIygKKysgeWVzKQorKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorKyAgIGZpCisrICAgOzsgIygKKysgLyopCisrICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrICAgOzsgIygKKysgbm98JycpCisrICAgOzsgIygKKysgKikKKysgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNQorKyRhc19lY2hvICIke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY2OyB9CisrICAgYXNfZm5fZXJyb3IgIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1CisrICAgOzsKKytlc2FjCisrCisrIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke2x0X3N5c3Jvb3Q6LW5vfSIgPiY1CisrJGFzX2VjaG8gIiR7bHRfc3lzcm9vdDotbm99IiA+JjY7IH0KKysKKysKKysKKysKKysKKyAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4gOgorICAgZW5hYmxldmFsPSRlbmFibGVfbGlidG9vbF9sb2NrOworQEAgLTcwNzAsNiArNzQ1MCwxMjMgQEAgZXNhYworIAorIG5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorIAorK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1tdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJE1BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIke2FjX3Rvb2xfcHJlZml4fW10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytNQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRNQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdF9NQU5JRkVTVF9UT09MPSRNQU5JRkVTVF9UT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgbXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0iJGFjX2N0X01BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSJtdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X01BTklGRVNUX1RPT0wiID0geDsgdGhlbgorKyAgICBNQU5JRkVTVF9UT09MPSI6IgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgTUFOSUZFU1RfVE9PTD0kYWNfY3RfTUFOSUZFU1RfVE9PTAorKyAgZmkKKytlbHNlCisrICBNQU5JRkVTVF9UT09MPSIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIgorK2ZpCisrCisrdGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JjUKKysgICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisrICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKKysgIGZpCisrICBybSAtZiBjb25mdGVzdCoKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY2OyB9CisraWYgdGVzdCAieCRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiICE9IHh5ZXM7IHRoZW4KKysgIE1BTklGRVNUX1RPT0w9OgorK2ZpCisrCisrCisrCisrCisrCisgCisgICBjYXNlICRob3N0X29zIGluCisgICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCitAQCAtNzYzMyw2ICs4MTMwLDggQEAgX0xUX0VPRgorICAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mNQorICAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JjUKKyAgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiY1CisrICAgICAgZWNobyAiJFJBTkxJQiBsaWJjb25mdGVzdC5hIiA+JjUKKysgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mNQorICAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgorIGludCBtYWluKCkgeyByZXR1cm4gMDt9CisgX0xUX0VPRgorQEAgLTc3OTgsNyArODI5Nyw4IEBAIGZpCisgTElCVE9PTF9ERVBTPSIkbHRtYWluIgorIAorICMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCistTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCisrTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpJworK0xJQlRPT0w9IiRMSUJUT09MLyR7aG9zdF9hbGlhc30tbGlidG9vbCIKKyAKKyAKKyAKK0BAIC03ODg3LDcgKzgzODcsNyBAQCBhaXgzKikKKyBlc2FjCisgCisgIyBHbG9iYWwgdmFyaWFibGVzOgorLW9maWxlPWxpYnRvb2wKKytvZmlsZT0ke2hvc3RfYWxpYXN9LWxpYnRvb2wKKyBjYW5fYnVpbGRfc2hhcmVkPXllcworIAorICMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorQEAgLTgxODUsOCArODY4NSw2IEBAIGZpCisgbHRfcHJvZ19jb21waWxlcl9waWM9CisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CisgCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CistJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAKKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCitAQCAtODM1Miw2ICs4ODUwLDEyIEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCWx0X3Byb2dfY29tcGlsZXJfcGljPSctLXNoYXJlZCcKKyAJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy0tc3RhdGljJworIAk7OworKyAgICAgIG5hZ2ZvciopCisrCSMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKysJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLC1XbCwsJworKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKKysJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworKwk7OworICAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKyAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCisgCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCitAQCAtODQxNCw3ICs4OTE4LDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQorKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKyAJbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJzs7CisgICAgICAgKikKKyAJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCc7OworQEAgLTg0NzEsMTMgKzg5NzUsMTcgQEAgY2FzZSAkaG9zdF9vcyBpbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgorICAgICA7OworIGVzYWMKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKy0kYXNfZWNobyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKy0KKy0KKy0KKy0KKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfcHJvZ19jb21waWxlcl9waWMKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorK2x0X3Byb2dfY29tcGlsZXJfcGljPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYworIAorICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCitAQCAtODUzOCw2ICs5MDQ2LDExIEBAIGZpCisgCisgCisgCisrCisrCisrCisrCisrCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyAjCitAQCAtODg4OCw3ICs5NDAxLDggQEAgX0xUX0VPRgorICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCisgICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKy0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4Y2x1ZGVfZXhwc3ltcz0nW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJworIAorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCitAQCAtODkzNiw3ICs5NDUwLDcgQEAgX0xUX0VPRgorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKyAJICYmIHRlc3QgIiR0bXBfZGlldCIgPSBubworICAgICAgIHRoZW4KKy0JdG1wX2FkZGZsYWc9CisrCXRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworIAl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKKyAJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisgICAgICAgICBwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCitAQCAtODk4NywxMiArOTUwMSwxMiBAQCBfTFRfRU9GCisgCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSctcnBhdGggJGxpYmRpcicKKy0JICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKysJICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisgCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorIAkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKy0JICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisrCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAJICBmaQorIAkgIDs7CisgCWVzYWMKK0BAIC05MDA2LDggKzk1MjAsOCBAQCBfTFRfRU9GCisgCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKyAJd2xhcmM9CisgICAgICAgZWxzZQorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBmaQorICAgICAgIDs7CisgCitAQCAtOTAyNSw4ICs5NTM5LDggQEAgX0xUX0VPRgorIAorIF9MVF9FT0YKKyAgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTkwNzIsOCArOTU4Niw4IEBAIF9MVF9FT0YKKyAKKyAgICAgKikKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC05MjAzLDcgKzk3MTcsMTMgQEAgX0xUX0VPRgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJworICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCistICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrICAgICAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtOTIxNiwyMiArOTczNiwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCitAQCAtOTI0Myw3ICs5NzcwLDEzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAllbHNlCisgCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAJICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0JIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC05MjU2LDIyICs5Nzg5LDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorIAkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCitAQCAtOTMxNiwyMCArOTg1Niw2MyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCistICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorLSAgICAgIGxpYmV4dD1saWIKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKy0gICAgICBzaHJleHRfY21kcz0iLmRsbCIKKy0gICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCistICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKy0gICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorLSAgICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCistICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKy0gICAgICBvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCistICAgICAgZml4X3NyY2ZpbGVfcGF0aD0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCistICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICAgIGNsKikKKysJIyBOYXRpdmUgTVNWQworKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwlhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisrCWZpbGVfbGlzdF9zcGVjPSdAJworKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgc2VkIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBlbHNlCisrCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGZpfgorKwkgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKysJICBsaW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisrCSMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCApPSd0cnVlJworKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKwlleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrCSMgRG9uJ3QgdXNlIHJhbmxpYgorKwlvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCisrCXBvc3RsaW5rX2NtZHM9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKysJICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorKwkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKysJICAgICouZXhlfCouRVhFKSA7OworKwkgICAgKikKKysJICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorKwkgICAgICBsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgorKwkgICAgICA7OworKwkgIGVzYWN+CisrCSAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKysJICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisrCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKysJICBmaScKKysJOzsKKysgICAgICAqKQorKwkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKysJb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKysJIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKysJb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKwk7OworKyAgICAgIGVzYWMKKyAgICAgICA7OworIAorICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorQEAgLTkzOTAsNyArOTk3Myw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworQEAgLTkzOTgsNyArOTk4MSw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4OSopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBmaQorQEAgLTk0MTQsNyArOTk5Nyw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4MTAqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICAgZmkKK0BAIC05NDM4LDEwICsxMDAyMSwxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWlhNjQqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJKikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAllc2FjCisgICAgICAgZWxzZQorQEAgLTk1MjAsMjMgKzEwMTAzLDM2IEBAIGZpCisgCisgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisgCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKyAJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KKy0gICAgICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCistICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCistICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCisrCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorKwkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCisrCSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistaW50IGZvbyh2b2lkKSB7fQorK2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH0KKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CistICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCistCisrICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXMKKytlbHNlCisrICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD1ubworIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNjsgfQorKwlpZiB0ZXN0ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID0geWVzOyB0aGVuCisrICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWZpCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKK0BAIC05NjIxLDcgKzEwMjE3LDcgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgIGVsc2UKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCitAQCAtOTY0MCw5ICsxMDIzNiw5IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAl3bGFyYz0nJHt3bH0nCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CistCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICBlbHNlCisgCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorIAkqIkNvbXBpbGVycyA1LjAiKikKK0BAIC0xMDIxOCw4ICsxMDgxNCw5IEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgIG5lZWRfdmVyc2lvbj1ubworICAgbmVlZF9saWJfcHJlZml4PW5vCisgCistICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KKy0gIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKiB8IHllcyxjZWdjYyopCisrICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCisrICB5ZXMsKikKKysgICAgIyBnY2MKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KK0BAIC0xMDI1MiwxMyArMTA4NDksNzEgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgICA7OworICAgICBlc2FjCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisrICAgIDs7CisrCisrICAqLGNsKikKKysgICAgIyBOYXRpdmUgTVNWQworKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJworKworKyAgICBjYXNlICRidWlsZF9vcyBpbgorKyAgICBtaW5ndyopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQorKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKKysgICAgICBJRlM9JzsnCisrICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgorKyAgICAgIGRvCisrICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgorKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCisrICAgICAgZG9uZQorKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFthLXpBLVpdXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKysgICAgICA7OworKyAgICBjeWd3aW4qKQorKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKysgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKysgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisrICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCisrICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKysgICAgICBlbHNlCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgZmkKKysgICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKKysgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisrICAgICAgOzsKKysgICAgZXNhYworKworKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisrICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKysgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorKyAgICAgICAkUk0gXCRkbHBhdGgnCisrICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJworICAgICA7OworIAorICAgKikKKysgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgICA7OworICAgZXNhYworLSAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICAgc2hsaWJwYXRoX3Zhcj1QQVRICisgICA7OworQEAgLTEwMzUwLDcgKzExMDA1LDcgQEAgaGFpa3UqKQorICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCistICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3QvYmVvcy9zeXN0ZW0vbGliJworKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICA7OworIAorQEAgLTExMTkwLDEwICsxMTg0NSwxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTExMjk2LDEwICsxMTk1MSwxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTEyNDUwLDcgKzEzMTA1LDcgQEAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gInllcyI7IHRoZW4KKyAjIHNpbmNlIGxpYmJmZCBtYXkgbm90IHB1bGwgaW4gdGhlIGVudGlyZXR5IG9mIGxpYmliZXJ0eS4KKyAgIHg9YHNlZCAtbiAtZSAncy9eWyAJXSpQSUNGTEFHWyAJXSo9WyAJXSovL3AnIDwgLi4vbGliaWJlcnR5L01ha2VmaWxlIHwgc2VkIC1uICckcCdgCisgICBpZiB0ZXN0IC1uICIkeCI7IHRoZW4KKy0gICAgU0hBUkVEX0xJQkFERD0iLUxgcHdkYC8uLi9saWJpYmVydHkvcGljIC1saWJlcnR5IgorKyAgICBTSEFSRURfTElCQUREPSJgcHdkYC8uLi9saWJpYmVydHkvcGljL2xpYmliZXJ0eS5hIgorICAgZmkKKyAKKyAgIGNhc2UgIiR7aG9zdH0iIGluCitAQCAtMTM0MjIsMTMgKzE0MDc3LDIwIEBAIGV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b190b29sX2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfZmxhZz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2ZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyt3YW50X25vY2FzZWdsb2I9J2AkRUNITyAiJHdhbnRfbm9jYXNlZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrRExMVE9PTD0nYCRFQ0hPICIkRExMVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J2AkRUNITyAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSdgJEVDSE8gIiRhcmNoaXZlcl9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFNUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTM0NDMsMTQgKzE0MTA1LDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK25tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfc3lzcm9vdD0nYCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE1BR0lDX0NNRD0nYCRFQ0hPICIkTUFHSUNfQ01EIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbG9ja3M9J2AkRUNITyAiJG5lZWRfbG9ja3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK01BTklGRVNUX1RPT0w9J2AkRUNITyAiJE1BTklGRVNUX1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIERTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIExJUE89J2AkRUNITyAiJExJUE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTEzNDgzLDEyICsxNDE0OCwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcQorIGhhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1maXhfc3JjZmlsZV9wYXRoPSdgJEVDSE8gIiRmaXhfc3JjZmlsZV9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBwcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcG9zdGxpbmtfY21kcz0nYCRFQ0hPICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xMzU0Myw4ICsxNDIwOCwxMyBAQCByZWxvYWRfZmxhZyBcCisgT0JKRFVNUCBcCisgZGVwbGlic19jaGVja19tZXRob2QgXAorIGZpbGVfbWFnaWNfY21kIFwKKytmaWxlX21hZ2ljX2dsb2IgXAorK3dhbnRfbm9jYXNlZ2xvYiBcCisrRExMVE9PTCBcCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgXAorIEFSIFwKKyBBUl9GTEFHUyBcCisrYXJjaGl2ZXJfbGlzdF9zcGVjIFwKKyBTVFJJUCBcCisgUkFOTElCIFwKKyBDQyBcCitAQCAtMTM1NTQsMTIgKzE0MjI0LDE0IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCisrbm1fZmlsZV9saXN0X3NwZWMgXAorIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKKy1sdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCisrbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAorIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIFwKKyBuZWVkX2xvY2tzIFwKKytNQU5JRkVTVF9UT09MIFwKKyBEU1lNVVRJTCBcCisgTk1FRElUIFwKKyBMSVBPIFwKK0BAIC0xMzU3NSw3ICsxNDI0Nyw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKKyBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKKy1maXhfc3JjZmlsZV9wYXRoIFwKKyBleGNsdWRlX2V4cHN5bXMgXAorIGluY2x1ZGVfZXhwc3ltcyBcCisgZmlsZV9saXN0X3NwZWMgXAorQEAgLTEzNjExLDYgKzE0MjgyLDcgQEAgbW9kdWxlX2NtZHMgXAorIG1vZHVsZV9leHBzeW1fY21kcyBcCisgZXhwb3J0X3N5bWJvbHNfY21kcyBcCisgcHJlbGlua19jbWRzIFwKKytwb3N0bGlua19jbWRzIFwKKyBwb3N0aW5zdGFsbF9jbWRzIFwKKyBwb3N0dW5pbnN0YWxsX2NtZHMgXAorIGZpbmlzaF9jbWRzIFwKK0BAIC0xNDM2Nyw3ICsxNTAzOSw4IEBAICRhc19lY2hvIFgiJGZpbGUiIHwKKyAjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKyAjCisgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKy0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyMgICAgICAgICAgICAgICAgIEluYy4KKyAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorICMKKyAjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCitAQCAtMTQ0NzAsMTkgKzE1MTQzLDQyIEBAIFNQMk5MPSRsdF9sdF9TUDJOTAorICMgdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlcy4KKyBOTDJTUD0kbHRfbHRfTkwyU1AKKyAKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlIG5hbWVzIHRvIFwkaG9zdCBmb3JtYXQuCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorKworKyMgY29udmVydCBcJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorKworICMgQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXIuCisgT0JKRFVNUD0kbHRfT0JKRFVNUAorIAorICMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgCistIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIi4KKysjIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisgZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCisgCisrIyBIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKytmaWxlX21hZ2ljX2dsb2I9JGx0X2ZpbGVfbWFnaWNfZ2xvYgorKworKyMgRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK3dhbnRfbm9jYXNlZ2xvYj0kbHRfd2FudF9ub2Nhc2VnbG9iCisrCisrIyBETEwgY3JlYXRpb24gcHJvZ3JhbS4KKytETExUT09MPSRsdF9ETExUT09MCisrCisrIyBDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzLgorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorKworICMgVGhlIGFyY2hpdmVyLgorIEFSPSRsdF9BUgorKworKyMgRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmUuCisgQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisgCisrIyBIb3cgdG8gZmVlZCBhIGZpbGUgbGlzdGluZyB0byB0aGUgYXJjaGl2ZXIuCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9hcmNoaXZlcl9saXN0X3NwZWMKKysKKyAjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtLgorIFNUUklQPSRsdF9TVFJJUAorIAorQEAgLTE0NTEyLDYgKzE1MjA4LDEyIEBAIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisgIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZC4KKyBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKKyAKKysjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgXCROTS4KKytubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKKysKKysjIFRoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyxhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLgorK2x0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKKysKKyAjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KKyBvYmpkaXI9JG9iamRpcgorIAorQEAgLTE0NTIxLDYgKzE1MjIzLDkgQEAgTUFHSUNfQ01EPSRNQUdJQ19DTUQKKyAjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworIG5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKKyAKKysjIE1hbmlmZXN0IHRvb2wuCisrTUFOSUZFU1RfVE9PTD0kbHRfTUFOSUZFU1RfVE9PTAorKworICMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KKyBEU1lNVVRJTD0kbHRfRFNZTVVUSUwKKyAKK0BAIC0xNDYzNSwxMiArMTUzNDAsMTIgQEAgd2l0aF9nY2M9JEdDQworICMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KKyBub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCisgCistIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCistCisgIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCisgcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCisgCisrIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCisrCisgIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorIGxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCisgCitAQCAtMTQ3MjcsOSArMTU0MzIsNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCisgIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCisgbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicworIAorLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KKy1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCistCisgIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKyAKK0BAIC0xNDc0NSw2ICsxNTQ0Nyw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCisgIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KKyBwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcworIAorKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KKytwb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzCisrCisgIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCisgZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjCisgCitAQCAtMTQ3NzcsMjEwICsxNTQ4MiwxNjkgQEAgbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisgICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKy0gIHNlZCAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS9xJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBjYXNlICR4c2lfc2hlbGwgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorLSMgY2FsbDoKKy0jICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorLSMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorLSMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorLSMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLSMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQorLSMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKy0jIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KKy1mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorLSAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifQorLX0KKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9JHsxJSU9Kn0KKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz0kezEjKj19CistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworLSAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sbworLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKQorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKy0gIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKKy0gIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCistICBlbHNlCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKy0gIGZpCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkYmFzZW5hbWUiYAorLX0KKy0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgY2FzZSAkezJ9IGluCistICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CistICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKy0gIGVzYWMKKy19CistCistIyBzZWQgc2NyaXB0czoKKy1teV9zZWRfbG9uZ19vcHQ9JzFzL15cKC1bXj1dKlwpPS4qL1wxLztxJworLW15X3NlZF9sb25nX2FyZz0nMXMvXi1bXj1dKj0vLycKKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAorLSAgZnVuY19vcHRfc3BsaXRfYXJnPWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAorLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLlteLl0qJC8ubG8vJ2AKKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJEAiYAorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKKy19CistCistX0xUX0VPRgorLWVzYWMKKy0KKy1jYXNlICRsdF9zaGVsbF9hcHBlbmQgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDErPVwkMiIKKy19CistX0xUX0VPRgorLSAgICA7OworLSAgKikKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDE9XCQkMVwkMiIKKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgZXNhYworLQorLQorLSAgc2VkIC1uICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLywkcCcgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorKyAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKysKKysgIGlmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWUgL2NcCisrZnVuY19kaXJuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfYmFzZW5hbWUgL2NcCisrZnVuY19iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIC9jXAorK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3RyaXBuYW1lICgpJC8sL159ICMgZnVuY19zdHJpcG5hbWUgL2NcCisrZnVuY19zdHJpcG5hbWUgKClcCisre1wKKytcICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmVcCisrXCAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuXAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M31cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3N0cmlwbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfbG9uZ19vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IC9jXAorK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfVwKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfbG9uZ19vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X3Nob3J0X29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IC9jXAorK2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fVwKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sbzJvICgpJC8sL159ICMgZnVuY19sbzJvIC9jXAorK2Z1bmNfbG8ybyAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7O1wKKytcICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sbzJvIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY194Zm9ybSAoKSQvLC9efSAjIGZ1bmNfeGZvcm0gL2NcCisrZnVuY194Zm9ybSAoKVwKKyt7XAorKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3hmb3JtIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcml0aCAoKSQvLC9efSAjIGZ1bmNfYXJpdGggL2NcCisrZnVuY19hcml0aCAoKVwKKyt7XAorKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSlcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXJpdGggaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xlbiAoKSQvLC9efSAjIGZ1bmNfbGVuIC9jXAorK2Z1bmNfbGVuICgpXAorK3tcCisrICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sZW4gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKytmaQorKworK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kIC9jXAorK2Z1bmNfYXBwZW5kICgpXAorK3tcCisrICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmRfcXVvdGVkICgpJC8sL159ICMgZnVuY19hcHBlbmRfcXVvdGVkIC9jXAorK2Z1bmNfYXBwZW5kX3F1b3RlZCAoKVwKKyt7XAorK1wgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSJcCisrXCAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmRfcXVvdGVkIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZWxzZQorKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2ZpCisrCisraWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiYyO30KKytmaQorKworKworKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgIGNobW9kICt4ICIkb2ZpbGUiCisgCitkaWZmIC0tZ2l0IGEvb3Bjb2Rlcy9jb25maWd1cmUuYWMgYi9vcGNvZGVzL2NvbmZpZ3VyZS5hYworaW5kZXggYjkzZTg1NS4uNDNiYTk3NiAxMDA2NDQKKy0tLSBhL29wY29kZXMvY29uZmlndXJlLmFjCisrKysgYi9vcGNvZGVzL2NvbmZpZ3VyZS5hYworQEAgLTE2Nyw3ICsxNjcsNyBAQCBjaGFuZ2VxdW90ZSgsKWRubAorICAgeD1gc2VkIC1uIC1lICdzL15bIAldKlBJQ0ZMQUdbIAldKj1bIAldKi8vcCcgPCAuLi9saWJpYmVydHkvTWFrZWZpbGUgfCBzZWQgLW4gJyRwJ2AKKyBjaGFuZ2VxdW90ZShbLF0pZG5sCisgICBpZiB0ZXN0IC1uICIkeCI7IHRoZW4KKy0gICAgU0hBUkVEX0xJQkFERD0iLUxgcHdkYC8uLi9saWJpYmVydHkvcGljIC1saWJlcnR5IgorKyAgICBTSEFSRURfTElCQUREPSJgcHdkYC8uLi9saWJpYmVydHkvcGljL2xpYmliZXJ0eS5hIgorICAgZmkKKyAKKyAgIGNhc2UgIiR7aG9zdH0iIGluCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDctQWRkLXRoZS1hcm12NWUtYXJjaGl0ZWN0dXJlLXRvLWJpbnV0aWxzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNy1BZGQtdGhlLWFybXY1ZS1hcmNoaXRlY3R1cmUtdG8tYmludXRpbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAzNzYzNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDctQWRkLXRoZS1hcm12NWUtYXJjaGl0ZWN0dXJlLXRvLWJpbnV0aWxzLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gNzQzZjQyYWFlY2IxYWI4OWViYTBlYWY1ZTg4ZWQ2N2JiZjNiYTMwNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6Mzc6MTAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwNy8xM10gQWRkIHRoZSBhcm12NWUgYXJjaGl0ZWN0dXJlIHRvIGJpbnV0aWxzCisKK0JpbnV0aWxzIGhhcyBhIGNvbW1lbnQgdGhhdCBpbmRpY2F0ZXMgaXQgaXMgc3VwcG9zZWQgdG8gbWF0Y2ggZ2NjIGZvcgorYWxsIG9mIHRoZSBzdXBwb3J0ICItbWFyY2g9IiBzZXR0aW5ncywgYnV0IGl0IHdhcyBsYWNraW5nIHRoZSBhcm12NWUgc2V0dGluZy4KK1RoaXMgd2FzIGEgc2ltcGxlIHdheSB0byBhZGQgaXQsIGFzIHRodW1iIGluc3RydWN0aW9ucyBzaG91bGRuJ3QgYmUgZ2VuZXJhdGVkCitieSB0aGUgY29tcGlsZXIgYW55d2F5LgorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZAorVXBzdHJlYW0gbWFpbnRhaW5lciBpbmRpY2F0ZWQgdGhhdCB3ZSBzaG91bGQgbm90IGJlIHVzaW5nIGFybXY1ZSwgZXZlbgordGhvdWdoIGl0IGlzIGEgbGVnYWwgYXJjaGljdHVyZSBkZWZpbmVkIGJ5IG91ciBnY2MuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnYXMvY29uZmlnL3RjLWFybS5jIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9nYXMvY29uZmlnL3RjLWFybS5jIGIvZ2FzL2NvbmZpZy90Yy1hcm0uYworaW5kZXggMmRiNmMyZC4uYWI0ODE2OCAxMDA2NDQKKy0tLSBhL2dhcy9jb25maWcvdGMtYXJtLmMKKysrKyBiL2dhcy9jb25maWcvdGMtYXJtLmMKK0BAIC0yNDQ2Myw2ICsyNDQ2Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtX2FyY2hfb3B0aW9uX3RhYmxlIGFybV9hcmNoc1tdID0KKyAgIEFSTV9BUkNIX09QVCAoImFybXY0dCIsCUFSTV9BUkNIX1Y0VCwJIEZQVV9BUkNIX0ZQQSksCisgICBBUk1fQVJDSF9PUFQgKCJhcm12NHR4bSIsCUFSTV9BUkNIX1Y0VHhNLAkgRlBVX0FSQ0hfRlBBKSwKKyAgIEFSTV9BUkNIX09QVCAoImFybXY1IiwJQVJNX0FSQ0hfVjUsCSBGUFVfQVJDSF9WRlApLAorKyAgQVJNX0FSQ0hfT1BUICgiYXJtdjVlIiwJQVJNX0FSQ0hfVjVURSwJIEZQVV9BUkNIX1ZGUCksCisgICBBUk1fQVJDSF9PUFQgKCJhcm12NXQiLAlBUk1fQVJDSF9WNVQsCSBGUFVfQVJDSF9WRlApLAorICAgQVJNX0FSQ0hfT1BUICgiYXJtdjV0eG0iLAlBUk1fQVJDSF9WNVR4TSwJIEZQVV9BUkNIX1ZGUCksCisgICBBUk1fQVJDSF9PUFQgKCJhcm12NXRlIiwJQVJNX0FSQ0hfVjVURSwJIEZQVV9BUkNIX1ZGUCksCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDgtZG9uLXQtbGV0LXRoZS1kaXN0cm8tY29tcGlsZXItcG9pbnQtdG8tdGhlLXdyb25nLWlucy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDgtZG9uLXQtbGV0LXRoZS1kaXN0cm8tY29tcGlsZXItcG9pbnQtdG8tdGhlLXdyb25nLWlucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWU2OGZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwOC1kb24tdC1sZXQtdGhlLWRpc3Ryby1jb21waWxlci1wb2ludC10by10aGUtd3JvbmctaW5zLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gNGQzYTlmNmRiNjA0MDU1MzQ4MzMyYjU2ODg5ZDQ2NmMwNThmYTVmMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6Mzk6MDEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwOC8xM10gZG9uJ3QgbGV0IHRoZSBkaXN0cm8gY29tcGlsZXIgcG9pbnQgdG8gdGhlIHdyb25nCisgaW5zdGFsbGF0aW9uIGxvY2F0aW9uCisKK1RoYW5rcyB0byBSUCBmb3IgaGVscGluZyBmaW5kIHRoZSBzb3VyY2UgY29kZSBjYXVzaW5nIHRoZSBpc3N1ZS4KKworMjAxMC8wOC8xMworTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYmliZXJ0eS9NYWtlZmlsZS5pbiB8IDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliaWJlcnR5L01ha2VmaWxlLmluIGIvbGliaWJlcnR5L01ha2VmaWxlLmluCitpbmRleCA5Yjg3NzIwLi5mZjQzZjUzIDEwMDY0NAorLS0tIGEvbGliaWJlcnR5L01ha2VmaWxlLmluCisrKysgYi9saWJpYmVydHkvTWFrZWZpbGUuaW4KK0BAIC0zNjEsNyArMzYxLDggQEAgaW5zdGFsbC1zdHJpcDogaW5zdGFsbAorICMgbXVsdGlsaWItc3BlY2lmaWMgZmxhZ3MsIGl0J3Mgb3ZlcnJpZGRlbiBieSBGTEFHU19UT19QQVNTIGZyb20gdGhlCisgIyBkZWZhdWx0IG11bHRpbGliLCBzbyB3ZSBoYXZlIHRvIHRha2UgQ0ZMQUdTIGludG8gYWNjb3VudCBhcyB3ZWxsLAorICMgc2luY2UgaXQgd2lsbCBiZSBwYXNzZWQgdGhlIG11bHRpbGliIGZsYWdzLgorLU1VTFRJT1NESVIgPSBgJChDQykgJChDRkxBR1MpIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnlgCisrI01VTFRJT1NESVIgPSBgJChDQykgJChDRkxBR1MpIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnlgCisrTVVMVElPU0RJUiA9ICIiCisgaW5zdGFsbF90b19saWJkaXI6IGFsbAorIAlpZiB0ZXN0IC1uICIke3RhcmdldF9oZWFkZXJfZGlyfSI7IHRoZW4gXAorIAkJJHtta2luc3RhbGxkaXJzfSAkKERFU1RESVIpJChsaWJkaXIpLyQoTVVMVElPU0RJUik7IFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwOS1VcHN0cmVhbS1TdGF0dXMtSW5hcHByb3ByaWF0ZS1kaXN0cmlidXRpb24tY29kZXNvdXJjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwOS1VcHN0cmVhbS1TdGF0dXMtSW5hcHByb3ByaWF0ZS1kaXN0cmlidXRpb24tY29kZXNvdXJjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MDA3OTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA5LVVwc3RyZWFtLVN0YXR1cy1JbmFwcHJvcHJpYXRlLWRpc3RyaWJ1dGlvbi1jb2Rlc291cmMucGF0Y2gKQEAgLTAsMCArMSwyNzggQEAKK0Zyb20gZTAyZTExOWIyNzhjM2Y0MDRlOTc2NjllNzE4MGNhYzk0NDEzNGM5MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6NDE6MDQgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwOS8xM10gVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXN0cmlidXRpb246CisgY29kZXNvdXJjZXJ5XQorCitQYXRjaCBvcmlnaW5hbGx5IGNyZWF0ZWQgYnkgTWFyayBIYXRsZSwgZm9yd2FyZC1wb3J0ZWQgdG8KK2JpbnV0aWxzIDIuMjEgYnkgU2NvdHQgR2FybWFuLgorCitwdXJwb3NlOiAgd2FybiBmb3IgdXNlcyBvZiBzeXN0ZW0gZGlyZWN0b3JpZXMgd2hlbiBjcm9zcyBsaW5raW5nCisKK0NvZGUgTWVyZ2VkIGZyb20gU291cmNlcnkgRysrIGJpbnV0aWxzIDIuMTkgLSA0LjQtMjc3CisKKzIwMDgtMDctMDIgIEpvc2VwaCBNeWVycyAgPGpvc2VwaEBjb2Rlc291cmNlcnkuY29tPgorCisgICAgbGQvCisgICAgKiBsZC5oIChhcmdzX3R5cGUpOiBBZGQgZXJyb3JfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcy4KKyAgICAqIGxkLnRleGluZm8gKC0tZXJyb3ItcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcyk6IERvY3VtZW50LgorICAgICogbGRmaWxlLmMgKGxkZmlsZV9hZGRfbGlicmFyeV9wYXRoKTogQ2hlY2sKKyAgICBjb21tYW5kX2xpbmUuZXJyb3JfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcy4KKyAgICAqIGxkbWFpbi5jIChtYWluKTogSW5pdGlhbGl6ZQorICAgIGNvbW1hbmRfbGluZS5lcnJvcl9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLgorICAgICogbGV4c3VwLmMgKGVudW0gb3B0aW9uX3ZhbHVlcyk6IEFkZAorICAgIE9QVElPTl9FUlJPUl9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTLgorICAgIChsZF9vcHRpb25zKTogQWRkIC0tZXJyb3ItcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy4KKyAgICAocGFyc2VfYXJncyk6IEhhbmRsZSBuZXcgb3B0aW9uLgorCisyMDA3LTA2LTEzICBKb3NlcGggTXllcnMgIDxqb3NlcGhAY29kZXNvdXJjZXJ5LmNvbT4KKworICAgIGxkLworICAgICogY29uZmlnLmluOiBSZWdlbmVyYXRlLgorICAgICogbGQuaCAoYXJnc190eXBlKTogQWRkIHBvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMuCisgICAgKiBsZC50ZXhpbmZvICgtLW5vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMpOiBEb2N1bWVudC4KKyAgICAqIGxkZmlsZS5jIChsZGZpbGVfYWRkX2xpYnJhcnlfcGF0aCk6IENoZWNrCisgICAgY29tbWFuZF9saW5lLnBvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMuCisgICAgKiBsZG1haW4uYyAobWFpbik6IEluaXRpYWxpemUKKyAgICBjb21tYW5kX2xpbmUucG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcy4KKyAgICAqIGxleHN1cC5jIChlbnVtIG9wdGlvbl92YWx1ZXMpOiBBZGQKKyAgICBPUFRJT05fTk9fUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUy4KKyAgICAobGRfb3B0aW9ucyk6IEFkZCAtLW5vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMuCisgICAgKHBhcnNlX2FyZ3MpOiBIYW5kbGUgbmV3IG9wdGlvbi4KKworMjAwNy0wNC0yMCAgSm9zZXBoIE15ZXJzICA8am9zZXBoQGNvZGVzb3VyY2VyeS5jb20+CisKKyAgICBNZXJnZSBmcm9tIFNvdXJjZXJ5IEcrKyBiaW51dGlscyAyLjE3OgorCisgICAgMjAwNy0wMy0yMCAgSm9zZXBoIE15ZXJzICA8am9zZXBoQGNvZGVzb3VyY2VyeS5jb20+CisgICAgQmFzZWQgb24gcGF0Y2ggYnkgTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPi4KKyAgICBsZC8KKyAgICAqIGNvbmZpZ3VyZS5pbiAoLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcyk6IE5ldyBvcHRpb24uCisgICAgKiBjb25maWd1cmUsIGNvbmZpZy5pbjogUmVnZW5lcmF0ZS4KKyAgICAqIGxkZmlsZS5jIChsZGZpbGVfYWRkX2xpYnJhcnlfcGF0aCk6IElmCisgICAgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMgZGVmaW5lZCwgd2FybiBmb3IgdXNlIG9mIC9saWIsCisgICAgL3Vzci9saWIsIC91c3IvbG9jYWwvbGliIG9yIC91c3IvWDExUjYvbGliLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsZC9jb25maWcuaW4gICAgfCAgMyArKysKKyBsZC9jb25maWd1cmUgICAgfCAxNCArKysrKysrKysrKysrKworIGxkL2NvbmZpZ3VyZS5hYyB8IDEwICsrKysrKysrKysKKyBsZC9sZC5oICAgICAgICAgfCAgOCArKysrKysrKworIGxkL2xkLnRleGluZm8gICB8IDEyICsrKysrKysrKysrKworIGxkL2xkZmlsZS5jICAgICB8IDE3ICsrKysrKysrKysrKysrKysrCisgbGQvbGRsZXguaCAgICAgIHwgIDIgKysKKyBsZC9sZG1haW4uYyAgICAgfCAgMiArKworIGxkL2xleHN1cC5jICAgICB8IDE2ICsrKysrKysrKysrKysrKysKKyA5IGZpbGVzIGNoYW5nZWQsIDg0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xkL2NvbmZpZy5pbiBiL2xkL2NvbmZpZy5pbgoraW5kZXggMmFiNDg0NC4uNzY2ZDIzYyAxMDA2NDQKKy0tLSBhL2xkL2NvbmZpZy5pbgorKysrIGIvbGQvY29uZmlnLmluCitAQCAtMTEsNiArMTEsOSBAQAorICAgIGxhbmd1YWdlIGlzIHJlcXVlc3RlZC4gKi8KKyAjdW5kZWYgRU5BQkxFX05MUworIAorKy8qIERlZmluZSB0byB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBsaWJyYXJ5IGRpcmVjdG9yaWVzICovCisrI3VuZGVmIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTCisrCisgLyogQWRkaXRpb25hbCBleHRlbnNpb24gYSBzaGFyZWQgb2JqZWN0IG1pZ2h0IGhhdmUuICovCisgI3VuZGVmIEVYVFJBX1NITElCX0VYVEVOU0lPTgorIAorZGlmZiAtLWdpdCBhL2xkL2NvbmZpZ3VyZSBiL2xkL2NvbmZpZ3VyZQoraW5kZXggMmZiYWViZi4uNTcyNmEwOCAxMDA3NTUKKy0tLSBhL2xkL2NvbmZpZ3VyZQorKysrIGIvbGQvY29uZmlndXJlCitAQCAtNzg3LDYgKzc4Nyw3IEBAIHdpdGhfbGliX3BhdGgKKyBlbmFibGVfdGFyZ2V0cworIGVuYWJsZV82NF9iaXRfYmZkCisgd2l0aF9zeXNyb290CisrZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMKKyBlbmFibGVfZ29sZAorIGVuYWJsZV9nb3QKKyBlbmFibGVfd2Vycm9yCitAQCAtMTQ0Myw2ICsxNDQ0LDggQEAgT3B0aW9uYWwgRmVhdHVyZXM6CisgICAtLWRpc2FibGUtbGFyZ2VmaWxlICAgICBvbWl0IHN1cHBvcnQgZm9yIGxhcmdlIGZpbGVzCisgICAtLWVuYWJsZS10YXJnZXRzICAgICAgICBhbHRlcm5hdGl2ZSB0YXJnZXQgY29uZmlndXJhdGlvbnMKKyAgIC0tZW5hYmxlLTY0LWJpdC1iZmQgICAgIDY0LWJpdCBzdXBwb3J0IChvbiBob3N0cyB3aXRoIG5hcnJvd2VyIHdvcmQgc2l6ZXMpCisrICAtLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBsaWJyYXJ5IGRpcmVjdG9yaWVzCisgICAtLWVuYWJsZS1nb2xkWz1BUkddICAgICBidWlsZCBnb2xkIFtBUkc9e2RlZmF1bHQseWVzLG5vfV0KKyAgIC0tZW5hYmxlLWdvdD08dHlwZT4gICAgIEdPVCBoYW5kbGluZyBzY2hlbWUgKHRhcmdldCwgc2luZ2xlLCBuZWdhdGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpZ290KQorQEAgLTE2MzIzLDcgKzE2MzI2LDE4IEBAIGVsc2UKKyBmaQorIAorIAorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzK3NldH0iID0gc2V0OyB0aGVuIDoKKysgIGVuYWJsZXZhbD0kZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM7CisrZWxzZQorKyAgZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM9bm8KKytmaQorKworK2lmIHRlc3QgIngke2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzfSIgPSAieHllcyI7IHRoZW4KKyAKKyskYXNfZWNobyAiI2RlZmluZSBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUyAxIiA+PmNvbmZkZWZzLmgKKysKKytmaQorIAorICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1nb3Qgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX2dvdCtzZXR9IiA9IHNldDsgdGhlbiA6CitkaWZmIC0tZ2l0IGEvbGQvY29uZmlndXJlLmFjIGIvbGQvY29uZmlndXJlLmFjCitpbmRleCAxYmRkZmM5Li5lOWVkYjdmIDEwMDY0NAorLS0tIGEvbGQvY29uZmlndXJlLmFjCisrKysgYi9sZC9jb25maWd1cmUuYWMKK0BAIC05NCw2ICs5NCwxNiBAQCBBQ19TVUJTVCh1c2Vfc3lzcm9vdCkKKyBBQ19TVUJTVChUQVJHRVRfU1lTVEVNX1JPT1QpCisgQUNfU1VCU1QoVEFSR0VUX1NZU1RFTV9ST09UX0RFRklORSkKKyAKKytBQ19BUkdfRU5BQkxFKFtwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXSwKKysgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc10sCisrICAgICAgICAgICAgICAgIFt3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBsaWJyYXJ5IGRpcmVjdG9yaWVzXSksLAorKyAgICAgICAgIFtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcz1ub10pCisraWYgdGVzdCAieCR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXN9IiA9ICJ4eWVzIjsgdGhlbgorKyAgQUNfREVGSU5FKFtFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFU10sCisrICAgICAgIFsxXSwKKysgICAgICAgW0RlZmluZSB0byB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBsaWJyYXJ5IGRpcmVjdG9yaWVzXSkKKytmaQorKworIGRubCBVc2UgLS1lbmFibGUtZ29sZCB0byBkZWNpZGUgaWYgdGhpcyBsaW5rZXIgc2hvdWxkIGJlIHRoZSBkZWZhdWx0LgorIGRubCAiaW5zdGFsbF9hc19kZWZhdWx0IiBpcyBzZXQgdG8gZmFsc2UgaWYgZ29sZCBpcyB0aGUgZGVmYXVsdCBsaW5rZXIuCisgZG5sICJpbnN0YWxsZWRfbGlua2VyIiBpcyB0aGUgaW5zdGFsbGVkIEJGRCBsaW5rZXIgbmFtZS4KK2RpZmYgLS1naXQgYS9sZC9sZC5oIGIvbGQvbGQuaAoraW5kZXggZjc3M2NlNy4uYWRiYTBmNiAxMDA2NDQKKy0tLSBhL2xkL2xkLmgKKysrKyBiL2xkL2xkLmgKK0BAIC0xNjEsNiArMTYxLDE0IEBAIHR5cGVkZWYgc3RydWN0IHsKKyAgIC8qIElmIFRSVUUgd2UnbGwganVzdCBwcmludCB0aGUgZGVmYXVsdCBvdXRwdXQgb24gc3Rkb3V0LiAgKi8KKyAgIGJmZF9ib29sZWFuIHByaW50X291dHB1dF9mb3JtYXQ7CisgCisrICAvKiBJZiBUUlVFICh0aGUgZGVmYXVsdCkgd2FybiBmb3IgdXNlcyBvZiBzeXN0ZW0gZGlyZWN0b3JpZXMgd2hlbgorKyAgICAgY3Jvc3MgbGlua2luZy4gICovCisrICBiZmRfYm9vbGVhbiBwb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzOworKworKyAgLyogSWYgVFJVRSAoZGVmYXVsdCBGQUxTRSkgZ2l2ZSBhbiBlcnJvciBmb3IgdXNlcyBvZiBzeXN0ZW0KKysgICAgIGRpcmVjdG9yaWVzIHdoZW4gY3Jvc3MgbGlua2luZyBpbnN0ZWFkIG9mIGEgd2FybmluZy4gICovCisrICBiZmRfYm9vbGVhbiBlcnJvcl9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzOworKworICAgLyogQmlnIG9yIGxpdHRsZSBlbmRpYW4gYXMgc2V0IG9uIGNvbW1hbmQgbGluZS4gICovCisgICBlbnVtIGVuZGlhbl9lbnVtIGVuZGlhbjsKKyAKK2RpZmYgLS1naXQgYS9sZC9sZC50ZXhpbmZvIGIvbGQvbGQudGV4aW5mbworaW5kZXggNTAyNTgyYy4uZGFlMTY4YSAxMDA2NDQKKy0tLSBhL2xkL2xkLnRleGluZm8KKysrKyBiL2xkL2xkLnRleGluZm8KK0BAIC0yMjEyLDYgKzIyMTIsMTggQEAgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSBvcmlnaW5hbCBsaW5rZWQgZmlsZSBkb2VzIG5vdCBjaGFuZ2UuCisgCisgUGFzc2luZyBAY29kZXtub25lfSBmb3IgQHZhcntzdHlsZX0gZGlzYWJsZXMgdGhlIHNldHRpbmcgZnJvbSBhbnkKKyBAY29kZXstLWJ1aWxkLWlkfSBvcHRpb25zIGVhcmxpZXIgb24gdGhlIGNvbW1hbmQgbGluZS4KKysKKytAa2luZGV4IC0tbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0BpdGVtIC0tbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0RvIG5vdCB3YXJuIGZvciBAb3B0aW9uey1MfSBvcHRpb25zIHVzaW5nIHN5c3RlbSBkaXJlY3RvcmllcyBzdWNoIGFzCisrQGZpbGV7L3Vzci9saWJ9IHdoZW4gY3Jvc3MgbGlua2luZy4gIFRoaXMgb3B0aW9uIGlzIGludGVuZGVkIGZvciB1c2UKKytpbiBjaHJvb3QgZW52aXJvbm1lbnRzIHdoZW4gc3VjaCBkaXJlY3RvcmllcyBjb250YWluIHRoZSBjb3JyZWN0CisrbGlicmFyaWVzIGZvciB0aGUgdGFyZ2V0IHN5c3RlbSByYXRoZXIgdGhhbiB0aGUgaG9zdC4KKysKKytAa2luZGV4IC0tZXJyb3ItcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0BpdGVtIC0tZXJyb3ItcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0dpdmUgYW4gZXJyb3IgaW5zdGVhZCBvZiBhIHdhcm5pbmcgZm9yIEBvcHRpb257LUx9IG9wdGlvbnMgdXNpbmcKKytzeXN0ZW0gZGlyZWN0b3JpZXMgd2hlbiBjcm9zcyBsaW5raW5nLgorIEBlbmQgdGFibGUKKyAKKyBAYyBtYW4gZW5kCitkaWZmIC0tZ2l0IGEvbGQvbGRmaWxlLmMgYi9sZC9sZGZpbGUuYworaW5kZXggNzgyZWQ3Zi4uMTlhOWFiNCAxMDA2NDQKKy0tLSBhL2xkL2xkZmlsZS5jCisrKysgYi9sZC9sZGZpbGUuYworQEAgLTExNCw2ICsxMTQsMjMgQEAgbGRmaWxlX2FkZF9saWJyYXJ5X3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGJmZF9ib29sZWFuIGNtZGxpbmUpCisgICAgIG5ld19kaXJzLT5uYW1lID0gY29uY2F0IChsZF9zeXNyb290LCBuYW1lICsgMSwgKGNvbnN0IGNoYXIgKikgTlVMTCk7CisgICBlbHNlCisgICAgIG5ld19kaXJzLT5uYW1lID0geHN0cmR1cCAobmFtZSk7CisrCisrI2lmZGVmIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTCisrICBpZiAoY29tbWFuZF9saW5lLnBvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMKKysgICYmICgoIXN0cm5jbXAgKG5hbWUsICIvbGliIiwgNCkpCisrICAgICAgfHwgKCFzdHJuY21wIChuYW1lLCAiL3Vzci9saWIiLCA4KSkKKysgICAgICB8fCAoIXN0cm5jbXAgKG5hbWUsICIvdXNyL2xvY2FsL2xpYiIsIDE0KSkKKysgICAgICB8fCAoIXN0cm5jbXAgKG5hbWUsICIvdXNyL1gxMVI2L2xpYiIsIDE0KSkpKQorKyAgIHsKKysgICAgIGlmIChjb21tYW5kX2xpbmUuZXJyb3JfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcykKKysgICAgICAgZWluZm8gKF8oIiVYJVA6IGVycm9yOiBsaWJyYXJ5IHNlYXJjaCBwYXRoIFwiJXNcIiBpcyB1bnNhZmUgZm9yICIKKysgICAgICAgICAgICAiY3Jvc3MtY29tcGlsYXRpb25cbiIpLCBuYW1lKTsKKysgICAgIGVsc2UKKysgICAgICAgZWluZm8gKF8oIiVQOiB3YXJuaW5nOiBsaWJyYXJ5IHNlYXJjaCBwYXRoIFwiJXNcIiBpcyB1bnNhZmUgZm9yICIKKysgICAgICAgICAgICAiY3Jvc3MtY29tcGlsYXRpb25cbiIpLCBuYW1lKTsKKysgICB9CisrI2VuZGlmCisrCisgfQorIAorIC8qIFRyeSB0byBvcGVuIGEgQkZEIGZvciBhIGxhbmdfaW5wdXRfc3RhdGVtZW50LiAgKi8KK2RpZmYgLS1naXQgYS9sZC9sZGxleC5oIGIvbGQvbGRsZXguaAoraW5kZXggZTNlOWIyNC4uMjk0ODdhMyAxMDA2NDQKKy0tLSBhL2xkL2xkbGV4LmgKKysrKyBiL2xkL2xkbGV4LmgKK0BAIC0xNDAsNiArMTQwLDggQEAgZW51bSBvcHRpb25fdmFsdWVzCisgICBPUFRJT05fSUdOT1JFX1VOUkVTT0xWRURfU1lNQk9MLAorICAgT1BUSU9OX1BVU0hfU1RBVEUsCisgICBPUFRJT05fUE9QX1NUQVRFLAorKyAgT1BUSU9OX05PX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMsCisrICBPUFRJT05fRVJST1JfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUywKKyB9OworIAorIC8qIFRoZSBpbml0aWFsIHBhcnNlciBzdGF0ZXMuICAqLworZGlmZiAtLWdpdCBhL2xkL2xkbWFpbi5jIGIvbGQvbGRtYWluLmMKK2luZGV4IDgxOGQxMDguLjU0YzQ5ZjIgMTAwNjQ0CistLS0gYS9sZC9sZG1haW4uYworKysrIGIvbGQvbGRtYWluLmMKK0BAIC0yNjYsNiArMjY2LDggQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgY29tbWFuZF9saW5lLndhcm5fbWlzbWF0Y2ggPSBUUlVFOworICAgY29tbWFuZF9saW5lLndhcm5fc2VhcmNoX21pc21hdGNoID0gVFJVRTsKKyAgIGNvbW1hbmRfbGluZS5jaGVja19zZWN0aW9uX2FkZHJlc3NlcyA9IC0xOworKyAgY29tbWFuZF9saW5lLnBvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMgPSBUUlVFOworKyAgY29tbWFuZF9saW5lLmVycm9yX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMgPSBGQUxTRTsKKyAKKyAgIC8qIFdlIGluaXRpYWxpemUgREVNQU5HTElORyBiYXNlZCBvbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgICAgIENPTExFQ1RfTk9fREVNQU5HTEUuICBUaGUgZ2NjIGNvbGxlY3QyIHByb2dyYW0gd2lsbCBkZW1hbmdsZSB0aGUKK2RpZmYgLS1naXQgYS9sZC9sZXhzdXAuYyBiL2xkL2xleHN1cC5jCitpbmRleCA0ODEyYzk3Li4yMWI0OWRmIDEwMDY0NAorLS0tIGEvbGQvbGV4c3VwLmMKKysrKyBiL2xkL2xleHN1cC5jCitAQCAtNTEzLDYgKzUxMywxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGxkX29wdGlvbiBsZF9vcHRpb25zW10gPQorICAgeyB7InBvcC1zdGF0ZSIsIG5vX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fUE9QX1NUQVRFfSwKKyAgICAgJ1wwJywgTlVMTCwgTl8oIlBvcCBzdGF0ZSBvZiBmbGFncyBnb3Zlcm5pbmcgaW5wdXQgZmlsZSBoYW5kbGluZyIpLAorICAgICBUV09fREFTSEVTIH0sCisrICB7IHsibm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyIsIG5vX2FyZ3VtZW50LCBOVUxMLAorKyAgICAgT1BUSU9OX05PX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVN9LAorKyAgICAnXDAnLCBOVUxMLCBOXygiRG8gbm90IHdhcm4gZm9yIC1MIG9wdGlvbnMgdXNpbmcgc3lzdGVtIGRpcmVjdG9yaWVzIiksCisrICAgIFRXT19EQVNIRVMgfSwKKysgIHsgeyJlcnJvci1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIiwgbm9fYXJndW1lbnQsIE5VTEwsCisrICAgICsgICAgIE9QVElPTl9FUlJPUl9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTfSwKKysgICAgJ1wwJywgTlVMTCwgTl8oIkdpdmUgYW4gZXJyb3IgZm9yIC1MIG9wdGlvbnMgdXNpbmcgc3lzdGVtIGRpcmVjdG9yaWVzIiksCisrICAgIFRXT19EQVNIRVMgfSwKKyB9OworIAorICNkZWZpbmUgT1BUSU9OX0NPVU5UIEFSUkFZX1NJWkUgKGxkX29wdGlvbnMpCitAQCAtMTQ3NCw2ICsxNDgyLDE0IEBAIHBhcnNlX2FyZ3MgKHVuc2lnbmVkIGFyZ2MsIGNoYXIgKiphcmd2KQorIAkgICAgICBmcmVlIChvbGRwKTsKKyAJICAgIH0KKyAJICBicmVhazsKKysKKysJY2FzZSBPUFRJT05fTk9fUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUzoKKysJICBjb21tYW5kX2xpbmUucG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcyA9IEZBTFNFOworKwkgIGJyZWFrOworKworKwljYXNlIE9QVElPTl9FUlJPUl9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTOgorKwkgIGNvbW1hbmRfbGluZS5lcnJvcl9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzID0gVFJVRTsKKysJICBicmVhazsKKyAJfQorICAgICB9CisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTAtRml4LXJwYXRoLWluLWxpYnRvb2wtd2hlbi1zeXNyb290LWlzLWVuYWJsZWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEwLUZpeC1ycGF0aC1pbi1saWJ0b29sLXdoZW4tc3lzcm9vdC1pcy1lbmFibGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NTFlNzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEwLUZpeC1ycGF0aC1pbi1saWJ0b29sLXdoZW4tc3lzcm9vdC1pcy1lbmFibGVkLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK0Zyb20gZWRiZWU5YTY4ZTFjMmUxMWMwNTk2NjhhYTFkMTMwMDFkOWYzZGUwNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6NDI6MzggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxMC8xM10gRml4IHJwYXRoIGluIGxpYnRvb2wgd2hlbiBzeXNyb290IGlzIGVuYWJsZWQKKworRW5hYmxpbmcgc3lzcm9vdCBzdXBwb3J0IGluIGxpYnRvb2wgZXhwb3NlZCBhIGJ1ZyB3aGVyZSB0aGUgZmluYWwKK2xpYnJhcnkgaGFkIGFuIFJQQVRIIGVuY29kZWQgaW50byBpdCB3aGljaCBzdGlsbCBwb2ludGVkIHRvIHRoZQorc3lzcm9vdC4gVGhpcyB3b3JrcyBhcm91bmQgdGhlIGlzc3VlIHVudGlsIGl0IGdldHMgc29ydGVkIG91dAordXBzdHJlYW0uCisKK0ZpeCBzdWdnZXN0ZWQgYnkgUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGx0bWFpbi5zaCB8IDEwICsrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCitpbmRleCA3MGU4NTZlLi4xMWVlNjg0IDEwMDY0NAorLS0tIGEvbHRtYWluLnNoCisrKysgYi9sdG1haW4uc2gKK0BAIC04MDM1LDkgKzgwMzUsMTEgQEAgRU9GCisgCSAgdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbmsgJiYgcnBhdGg9IiRjb21waWxlX3JwYXRoJHJwYXRoIgorIAkgIGZvciBsaWJkaXIgaW4gJHJwYXRoOyBkbworIAkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisrCQkgIGZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorKwkJICBsaWJkaXI9JGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdAorKwkJICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRsaWJkaXIiCisrCQkgIGxpYmRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgCSAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorLQkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCistCQlsaWJkaXI9JGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdAorIAkJaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisgCQkgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisgCQllbHNlCitAQCAtODc3MCw2ICs4NzcyLDEwIEBAIEVPRgorICAgICAgIGhhcmRjb2RlX2xpYmRpcnM9CisgICAgICAgZm9yIGxpYmRpciBpbiAkY29tcGlsZV9ycGF0aCAkZmluYWxpemVfcnBhdGg7IGRvCisgCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorKwkgIGZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorKwkgIGxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CisrCSAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkbGliZGlyIgorKwkgIGxpYmRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisgCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKyAJICAgICAgaGFyZGNvZGVfbGliZGlycz0iJGxpYmRpciIKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMS1DaGFuZ2UtZGVmYXVsdC1lbXVsYXRpb24tZm9yLW1pcHM2NC1saW51eC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTEtQ2hhbmdlLWRlZmF1bHQtZW11bGF0aW9uLWZvci1taXBzNjQtbGludXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlkNTdlZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTEtQ2hhbmdlLWRlZmF1bHQtZW11bGF0aW9uLWZvci1taXBzNjQtbGludXgucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorRnJvbSAyYTVlODgxM2QzYzVkYjNlMmI3ZDlkZmEyYWIyN2NjY2Q1MTExZTUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTo0NDoxNCArMDAwMAorU3ViamVjdDogW1BBVENIIDExLzEzXSBDaGFuZ2UgZGVmYXVsdCBlbXVsYXRpb24gZm9yIG1pcHM2NCotKi1saW51eAorCit3ZSBjaGFuZ2UgdGhlIGRlZmF1bHQgZW11bGF0aW9ucyB0byBiZSBONjQgaW5zdGVhZCBvZiBOMzIKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFsgT0UgY29uZmlndXJhdGlvbiBTcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGJmZC9jb25maWcuYmZkICAgfCA4ICsrKystLS0tCisgbGQvY29uZmlndXJlLnRndCB8IDggKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2JmZC9jb25maWcuYmZkIGIvYmZkL2NvbmZpZy5iZmQKK2luZGV4IDdiY2I5MmEuLjAzZDJjNmYgMTAwNjQ0CistLS0gYS9iZmQvY29uZmlnLmJmZAorKysrIGIvYmZkL2NvbmZpZy5iZmQKK0BAIC0xMDYyLDEyICsxMDYyLDEyIEBAIGNhc2UgIiR7dGFyZ30iIGluCisgICAgIHRhcmdfc2VsdmVjcz0ibWlwc19lbGYzMl9sZV92ZWMgbWlwc19lbGY2NF9iZV92ZWMgbWlwc19lbGY2NF9sZV92ZWMgbWlwc19lY29mZl9iZV92ZWMgbWlwc19lY29mZl9sZV92ZWMiCisgICAgIDs7CisgICBtaXBzNjQqZWwtKi1saW51eCopCistICAgIHRhcmdfZGVmdmVjPW1pcHNfZWxmMzJfbnRyYWRfbGVfdmVjCistICAgIHRhcmdfc2VsdmVjcz0ibWlwc19lbGYzMl9udHJhZF9iZV92ZWMgbWlwc19lbGYzMl90cmFkX2xlX3ZlYyBtaXBzX2VsZjMyX3RyYWRfYmVfdmVjIG1pcHNfZWxmNjRfdHJhZF9sZV92ZWMgbWlwc19lbGY2NF90cmFkX2JlX3ZlYyIKKysgICAgdGFyZ19kZWZ2ZWM9bWlwc19lbGY2NF90cmFkX2xlX3ZlYworKyAgICB0YXJnX3NlbHZlY3M9Im1pcHNfZWxmMzJfbnRyYWRfYmVfdmVjIG1pcHNfZWxmMzJfbnRyYWRfbGVfdmVjIG1pcHNfZWxmMzJfdHJhZF9sZV92ZWMgbWlwc19lbGYzMl90cmFkX2JlX3ZlYyBtaXBzX2VsZjY0X3RyYWRfYmVfdmVjIgorICAgICA7OworICAgbWlwczY0Ki0qLWxpbnV4KikKKy0gICAgdGFyZ19kZWZ2ZWM9bWlwc19lbGYzMl9udHJhZF9iZV92ZWMKKy0gICAgdGFyZ19zZWx2ZWNzPSJtaXBzX2VsZjMyX250cmFkX2xlX3ZlYyBtaXBzX2VsZjMyX3RyYWRfYmVfdmVjIG1pcHNfZWxmMzJfdHJhZF9sZV92ZWMgbWlwc19lbGY2NF90cmFkX2JlX3ZlYyBtaXBzX2VsZjY0X3RyYWRfbGVfdmVjIgorKyAgICB0YXJnX2RlZnZlYz1taXBzX2VsZjY0X3RyYWRfYmVfdmVjCisrICAgIHRhcmdfc2VsdmVjcz0ibWlwc19lbGYzMl9udHJhZF9iZV92ZWMgbWlwc19lbGYzMl9udHJhZF9iZV92ZWMgbWlwc19lbGYzMl90cmFkX2JlX3ZlYyBtaXBzX2VsZjMyX3RyYWRfbGVfdmVjIG1pcHNfZWxmNjRfdHJhZF9sZV92ZWMiCisgICAgIDs7CisgICBtaXBzKmVsLSotbGludXgqKQorICAgICB0YXJnX2RlZnZlYz1taXBzX2VsZjMyX3RyYWRfbGVfdmVjCitkaWZmIC0tZ2l0IGEvbGQvY29uZmlndXJlLnRndCBiL2xkL2NvbmZpZ3VyZS50Z3QKK2luZGV4IDI0ZTM2ZDEuLjc0MGIyZWEgMTAwNjQ0CistLS0gYS9sZC9jb25maWd1cmUudGd0CisrKysgYi9sZC9jb25maWd1cmUudGd0CitAQCAtNDc2LDExICs0NzYsMTEgQEAgbWlwcyplbC0qLXZ4d29ya3MqKQl0YXJnX2VtdWw9ZWxmMzJlbG1pcHZ4d29ya3MKKyBtaXBzKi0qLXZ4d29ya3MqKQl0YXJnX2VtdWw9ZWxmMzJlYm1pcHZ4d29ya3MKKyAJCSAgICAgICAgdGFyZ19leHRyYV9lbXVscz0iZWxmMzJlbG1pcHZ4d29ya3MiIDs7CisgbWlwcyotKi13aW5kaXNzKQl0YXJnX2VtdWw9ZWxmMzJtaXBzd2luZGlzcyA7OworLW1pcHM2NCplbC0qLWxpbnV4LSopCXRhcmdfZW11bD1lbGYzMmx0c21pcG4zMgorLQkJCXRhcmdfZXh0cmFfZW11bHM9ImVsZjMyYnRzbWlwbjMyIGVsZjMybHRzbWlwIGVsZjMyYnRzbWlwIGVsZjY0bHRzbWlwIGVsZjY0YnRzbWlwIgorK21pcHM2NCplbC0qLWxpbnV4LSopCXRhcmdfZW11bD1lbGY2NGx0c21pcAorKwkJCXRhcmdfZXh0cmFfZW11bHM9ImVsZjMyYnRzbWlwbjMyIGVsZjMybHRzbWlwbjMyIGVsZjMybHRzbWlwIGVsZjMyYnRzbWlwIGVsZjY0YnRzbWlwIgorIAkJCXRhcmdfZXh0cmFfbGlicGF0aD0kdGFyZ19leHRyYV9lbXVscyA7OworLW1pcHM2NCotKi1saW51eC0qKQl0YXJnX2VtdWw9ZWxmMzJidHNtaXBuMzIKKy0JCQl0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmx0c21pcG4zMiBlbGYzMmJ0c21pcCBlbGYzMmx0c21pcCBlbGY2NGJ0c21pcCBlbGY2NGx0c21pcCIKKyttaXBzNjQqLSotbGludXgtKikJdGFyZ19lbXVsPWVsZjY0YnRzbWlwCisrCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJidHNtaXBuMzIgZWxmMzJsdHNtaXBuMzIgZWxmMzJidHNtaXAgZWxmMzJsdHNtaXAgZWxmNjRsdHNtaXAiCisgCQkJdGFyZ19leHRyYV9saWJwYXRoPSR0YXJnX2V4dHJhX2VtdWxzIDs7CisgbWlwcyplbC0qLWxpbnV4LSopCXRhcmdfZW11bD1lbGYzMmx0c21pcAorIAkJCXRhcmdfZXh0cmFfZW11bHM9ImVsZjMyYnRzbWlwIGVsZjMybHRzbWlwbjMyIGVsZjY0bHRzbWlwIGVsZjMyYnRzbWlwbjMyIGVsZjY0YnRzbWlwIgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEyLUFkZC1YTFAtaW5zdHJ1Y3Rpb25zLXN1cHBvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEyLUFkZC1YTFAtaW5zdHJ1Y3Rpb25zLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU2ZmY5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTItQWRkLVhMUC1pbnN0cnVjdGlvbnMtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDQyOCBAQAorRnJvbSA0NDgzMjllYTA5NzQ0N2FlZTczZDA1MDA0NTI5NWM1YTBhZTg1MTllIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTo1MTowNSArMDAwMAorU3ViamVjdDogW1BBVENIIDEyLzEzXSBBZGQgWExQIGluc3RydWN0aW9ucyBzdXBwb3J0CisKK0Zyb20gMjZhZGIwNmNlNTE1YWFkZmVjMDhjZTEzMTA5YjRiOTgyODdmNjc3YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5lYnUgUGhpbGlwcyA8bnBoaWxpcHNAbmV0bG9naWNtaWNyby5jb20+CitEYXRlOiBGcmksIDMwIEp1bCAyMDEwIDE1OjEwOjAzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZCBzdXBwb3J0IGZvciBOZXRsb2dpYyBYTFAKKworVXNpbmcgdGhlIG1pcHNpc2E2NHIybmxtIHRhcmdldCwgYWRkIHN1cHBvcnQgZm9yIFhMUCBmcm9tCitOZXRsb2dpYy4gQWxzbywgdXBkYXRlIHZlbmRvciBuYW1lIHRvIE5MTSB3aGVyZXZlciBhcHBsaWNhYmxlLgorLS0tCisgYmZkL2FvdXR4LmggICAgICAgICAgIHwgICAgMSArCisgYmZkL2FyY2h1cmVzLmMgICAgICAgIHwgICAgMSArCisgYmZkL2JmZC1pbjIuaCAgICAgICAgIHwgICAgMSArCisgYmZkL2NvbmZpZy5iZmQgICAgICAgIHwgICAgNSArKysrKworIGJmZC9jcHUtbWlwcy5jICAgICAgICB8ICAgIDYgKysrKy0tCisgYmZkL2VsZnh4LW1pcHMuYyAgICAgIHwgICAgOCArKysrKysrKworIGJpbnV0aWxzL3JlYWRlbGYuYyAgICB8ICAgIDEgKworIGdhcy9jb25maWcvdGMtbWlwcy5jICB8ICAgIDQgKysrLQorIGdhcy9jb25maWd1cmUgICAgICAgICB8ICAgIDMgKysrCisgZ2FzL2NvbmZpZ3VyZS50Z3QgICAgIHwgICAgMiArLQorIGluY2x1ZGUvZWxmL21pcHMuaCAgICB8ICAgIDEgKworIGluY2x1ZGUvb3Bjb2RlL21pcHMuaCB8ICAgMTAgKysrKysrKystLQorIGxkL2NvbmZpZ3VyZS50Z3QgICAgICB8ICAgIDIgKysKKyBvcGNvZGVzL21pcHMtZGlzLmMgICAgfCAgIDEyICsrKysrLS0tLS0tLQorIG9wY29kZXMvbWlwcy1vcGMuYyAgICB8ICAgMzMgKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCisgMTUgZmlsZXMgY2hhbmdlZCwgNjUgaW5zZXJ0aW9ucygrKSwgMjUgZGVsZXRpb25zKC0pCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgYmZkL2FvdXR4LmggICAgICAgICAgIHwgIDEgKworIGJmZC9hcmNodXJlcy5jICAgICAgICB8ICAxICsKKyBiZmQvYmZkLWluMi5oICAgICAgICAgfCAgMSArCisgYmZkL2NvbmZpZy5iZmQgICAgICAgIHwgIDUgKysrKysKKyBiZmQvY3B1LW1pcHMuYyAgICAgICAgfCAgNiArKysrLS0KKyBiZmQvZWxmeHgtbWlwcy5jICAgICAgfCAgOCArKysrKysrKworIGJpbnV0aWxzL3JlYWRlbGYuYyAgICB8ICAxICsKKyBnYXMvY29uZmlnL3RjLW1pcHMuYyAgfCAgNCArKystCisgZ2FzL2NvbmZpZ3VyZSAgICAgICAgIHwgIDMgKysrCisgZ2FzL2NvbmZpZ3VyZS50Z3QgICAgIHwgIDIgKy0KKyBpbmNsdWRlL2VsZi9taXBzLmggICAgfCAgMSArCisgaW5jbHVkZS9vcGNvZGUvbWlwcy5oIHwgMTAgKysrKysrKystLQorIGxkL2NvbmZpZ3VyZS50Z3QgICAgICB8ICAyICsrCisgb3Bjb2Rlcy9taXBzLWRpcy5jICAgIHwgMTIgKysrKystLS0tLS0tCisgb3Bjb2Rlcy9taXBzLW9wYy5jICAgIHwgMzMgKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCisgMTUgZmlsZXMgY2hhbmdlZCwgNjUgaW5zZXJ0aW9ucygrKSwgMjUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9iZmQvYW91dHguaCBiL2JmZC9hb3V0eC5oCitpbmRleCA5Mzg1YTk4Li5hODhkZjk5IDEwMDY0NAorLS0tIGEvYmZkL2FvdXR4LmgKKysrKyBiL2JmZC9hb3V0eC5oCitAQCAtODAyLDYgKzgwMiw3IEBAIE5BTUUgKGFvdXQsIG1hY2hpbmVfdHlwZSkgKGVudW0gYmZkX2FyY2hpdGVjdHVyZSBhcmNoLAorIAljYXNlIGJmZF9tYWNoX21pcHNpc2E2NHI2OgorIAljYXNlIGJmZF9tYWNoX21pcHNfc2IxOgorIAljYXNlIGJmZF9tYWNoX21pcHNfeGxyOgorKwljYXNlIGJmZF9tYWNoX21pcHNfeGxwOgorIAkgIC8qIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgTUlQUzMsIE1JUFM0LCBNSVBTMTYsIE1JUFMzMiwgZXRjLiAgKi8KKyAJICBhcmNoX2ZsYWdzID0gTV9NSVBTMjsKKyAJICBicmVhazsKK2RpZmYgLS1naXQgYS9iZmQvYXJjaHVyZXMuYyBiL2JmZC9hcmNodXJlcy5jCitpbmRleCBjOWZkNmM4Li41NDdiZDA5IDEwMDY0NAorLS0tIGEvYmZkL2FyY2h1cmVzLmMKKysrKyBiL2JmZC9hcmNodXJlcy5jCitAQCAtMTgwLDYgKzE4MCw3IEBAIERFU0NSSVBUSU9OCisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb25wCQk2NjAxCisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb24yCQk2NTAyCisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc194bHIgICAgICAgICAgICAgIDg4NzY4MiAgIHsqIGRlY2ltYWwgJ1hMUicgICp9CisrLiNkZWZpbmUgYmZkX21hY2hfbWlwc194bHAgICAgICAgICAgICAgIDg4NzY4MCAgIHsqIGRlY2ltYWwgJ1hMUCcgICp9CisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTMyICAgICAgICAgICAgIDMyCisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTMycjIgICAgICAgICAgIDMzCisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTMycjMgICAgICAgICAgIDM0CitkaWZmIC0tZ2l0IGEvYmZkL2JmZC1pbjIuaCBiL2JmZC9iZmQtaW4yLmgKK2luZGV4IGM3YTJiYjUuLjQxM2I3NzMgMTAwNjQ0CistLS0gYS9iZmQvYmZkLWluMi5oCisrKysgYi9iZmQvYmZkLWluMi5oCitAQCAtMTk2Nyw2ICsxOTY3LDcgQEAgZW51bSBiZmRfYXJjaGl0ZWN0dXJlCisgI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbnAgICAgICAgICAgNjYwMQorICNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb24yICAgICAgICAgIDY1MDIKKyAjZGVmaW5lIGJmZF9tYWNoX21pcHNfeGxyICAgICAgICAgICAgICA4ODc2ODIgICAvKiBkZWNpbWFsICdYTFInICAqLworKyNkZWZpbmUgYmZkX21hY2hfbWlwc194bHAgICAgICAgICAgICAgIDg4NzY4MCAgIC8qIGRlY2ltYWwgJ1hMUCcgICovCisgI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzIgICAgICAgICAgICAgMzIKKyAjZGVmaW5lIGJmZF9tYWNoX21pcHNpc2EzMnIyICAgICAgICAgICAzMworICNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTMycjMgICAgICAgICAgIDM0CitkaWZmIC0tZ2l0IGEvYmZkL2NvbmZpZy5iZmQgYi9iZmQvY29uZmlnLmJmZAoraW5kZXggMDNkMmM2Zi4uMjcwODZkYiAxMDA2NDQKKy0tLSBhL2JmZC9jb25maWcuYmZkCisrKysgYi9iZmQvY29uZmlnLmJmZAorQEAgLTEwNDEsNiArMTA0MSwxMSBAQCBjYXNlICIke3Rhcmd9IiBpbgorICAgICB0YXJnX2RlZnZlYz1taXBzX2VsZjMyX2xlX3ZlYworICAgICB0YXJnX3NlbHZlY3M9Im1pcHNfZWxmMzJfYmVfdmVjIG1pcHNfZWxmNjRfYmVfdmVjIG1pcHNfZWxmNjRfbGVfdmVjIgorICAgICA7OworKyAgbWlwc2lzYTY0Ki0qLWVsZiopCisrCXRhcmdfZGVmdmVjPW1pcHNfZWxmMzJfdHJhZF9iZV92ZWMKKysJdGFyZ19zZWx2ZWNzPSJtaXBzX2VsZjMyX3RyYWRfbGVfdmVjIG1pcHNfZWxmNjRfdHJhZF9iZV92ZWMgbWlwc19lbGY2NF90cmFkX2xlX3ZlYyIKKysJd2FudDY0PXRydWUKKysJOzsKKyAgIG1pcHMqLSotZWxmKiB8IG1pcHMqLSotcnRlbXMqIHwgbWlwcyotKi12eHdvcmtzIHwgbWlwcyotKi13aW5kaXNzKQorICAgICB0YXJnX2RlZnZlYz1taXBzX2VsZjMyX2JlX3ZlYworICAgICB0YXJnX3NlbHZlY3M9Im1pcHNfZWxmMzJfbGVfdmVjIG1pcHNfZWxmNjRfYmVfdmVjIG1pcHNfZWxmNjRfbGVfdmVjIgorZGlmZiAtLWdpdCBhL2JmZC9jcHUtbWlwcy5jIGIvYmZkL2NwdS1taXBzLmMKK2luZGV4IGI2MTdhYWEuLjE5YTk5ZDEgMTAwNjQ0CistLS0gYS9iZmQvY3B1LW1pcHMuYworKysrIGIvYmZkL2NwdS1taXBzLmMKK0BAIC0xMDMsNyArMTAzLDggQEAgZW51bQorICAgSV9taXBzb2N0ZW9ucCwKKyAgIElfbWlwc29jdGVvbjIsCisgICBJX3hsciwKKy0gIElfbWljcm9taXBzCisrICBJX21pY3JvbWlwcywKKysgIElfeGxwCisgfTsKKyAKKyAjZGVmaW5lIE5OKGluZGV4KSAoJmFyY2hfaW5mb19zdHJ1Y3RbKGluZGV4KSArIDFdKQorQEAgLTE1Myw3ICsxNTQsOCBAQCBzdGF0aWMgY29uc3QgYmZkX2FyY2hfaW5mb190eXBlIGFyY2hfaW5mb19zdHJ1Y3RbXSA9CisgICBOICg2NCwgNjQsIGJmZF9tYWNoX21pcHNfb2N0ZW9ucCwibWlwczpvY3Rlb24rIiwgIEZBTFNFLCBOTihJX21pcHNvY3Rlb25wKSksCisgICBOICg2NCwgNjQsIGJmZF9tYWNoX21pcHNfb2N0ZW9uMiwibWlwczpvY3Rlb24yIiwgIEZBTFNFLCBOTihJX21pcHNvY3Rlb24yKSksCisgICBOICg2NCwgNjQsIGJmZF9tYWNoX21pcHNfeGxyLCAibWlwczp4bHIiLCAgICAgICBGQUxTRSwgTk4oSV94bHIpKSwKKy0gIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc19taWNyb21pcHMsIm1pcHM6bWljcm9taXBzIixGQUxTRSwwKQorKyAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX21pY3JvbWlwcywibWlwczptaWNyb21pcHMiLEZBTFNFLE5OKElfbWljcm9taXBzKSksCisrICBOICg2NCwgNjQsIGJmZF9tYWNoX21pcHNfeGxwLCAibWlwczp4bHAiLCAgICAgIEZBTFNFLCAwKQorIH07CisgCisgLyogVGhlIGRlZmF1bHQgYXJjaGl0ZWN0dXJlIGlzIG1pcHM6MzAwMCwgYnV0IHdpdGggYSBtYWNoaW5lIG51bWJlciBvZgorZGlmZiAtLWdpdCBhL2JmZC9lbGZ4eC1taXBzLmMgYi9iZmQvZWxmeHgtbWlwcy5jCitpbmRleCAwZGY3YWJmLi5kMjY4ZTg2IDEwMDY0NAorLS0tIGEvYmZkL2VsZnh4LW1pcHMuYworKysrIGIvYmZkL2VsZnh4LW1pcHMuYworQEAgLTY2MDgsNiArNjYwOCw5IEBAIF9iZmRfZWxmX21pcHNfbWFjaCAoZmxhZ3dvcmQgZmxhZ3MpCisgICAgIGNhc2UgRV9NSVBTX01BQ0hfWExSOgorICAgICAgIHJldHVybiBiZmRfbWFjaF9taXBzX3hscjsKKyAKKysJY2FzZSBFX01JUFNfTUFDSF9YTFA6CisrICAgICAgcmV0dXJuIGJmZF9tYWNoX21pcHNfeGxwOworKworICAgICBkZWZhdWx0OgorICAgICAgIHN3aXRjaCAoZmxhZ3MgJiBFRl9NSVBTX0FSQ0gpCisgCXsKK0BAIC0xMTg3OCw2ICsxMTg4MSwxMCBAQCBtaXBzX3NldF9pc2FfZmxhZ3MgKGJmZCAqYWJmZCkKKyAgICAgICB2YWwgPSBFX01JUFNfQVJDSF82NFIyIHwgRV9NSVBTX01BQ0hfT0NURU9OMjsKKyAgICAgICBicmVhazsKKyAKKysJY2FzZSBiZmRfbWFjaF9taXBzX3hscDoKKysJICB2YWwgPSBFX01JUFNfQVJDSF82NFIyIHwgRV9NSVBTX01BQ0hfWExQOworKwkgIGJyZWFrOworKworICAgICBjYXNlIGJmZF9tYWNoX21pcHNpc2EzMjoKKyAgICAgICB2YWwgPSBFX01JUFNfQVJDSF8zMjsKKyAgICAgICBicmVhazsKK0BAIC0xNDc2NSw2ICsxNDc3Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWlwc19tYWNoX2V4dGVuc2lvbiBtaXBzX21hY2hfZXh0ZW5zaW9uc1tdID0KKyAgIHsgYmZkX21hY2hfbWlwc19vY3Rlb25wLCBiZmRfbWFjaF9taXBzX29jdGVvbiB9LAorICAgeyBiZmRfbWFjaF9taXBzX29jdGVvbiwgYmZkX21hY2hfbWlwc2lzYTY0cjIgfSwKKyAgIHsgYmZkX21hY2hfbWlwc19sb29uZ3Nvbl8zYSwgYmZkX21hY2hfbWlwc2lzYTY0cjIgfSwKKysgIHsgYmZkX21hY2hfbWlwc194bHAsIGJmZF9tYWNoX21pcHNpc2E2NHIyIH0sCisgCisgICAvKiBNSVBTNjQgZXh0ZW5zaW9ucy4gICovCisgICB7IGJmZF9tYWNoX21pcHNpc2E2NHIyLCBiZmRfbWFjaF9taXBzaXNhNjQgfSwKK2RpZmYgLS1naXQgYS9iaW51dGlscy9yZWFkZWxmLmMgYi9iaW51dGlscy9yZWFkZWxmLmMKK2luZGV4IDBjMDBiMmYuLjZlOWQ1ZTQgMTAwNjQ0CistLS0gYS9iaW51dGlscy9yZWFkZWxmLmMKKysrKyBiL2JpbnV0aWxzL3JlYWRlbGYuYworQEAgLTI4OTgsNiArMjg5OCw3IEBAIGdldF9tYWNoaW5lX2ZsYWdzICh1bnNpZ25lZCBlX2ZsYWdzLCB1bnNpZ25lZCBlX21hY2hpbmUpCisgCSAgICBjYXNlIEVfTUlQU19NQUNIX09DVEVPTjI6IHN0cmNhdCAoYnVmLCAiLCBvY3Rlb24yIik7IGJyZWFrOworIAkgICAgY2FzZSBFX01JUFNfTUFDSF9PQ1RFT04zOiBzdHJjYXQgKGJ1ZiwgIiwgb2N0ZW9uMyIpOyBicmVhazsKKyAJICAgIGNhc2UgRV9NSVBTX01BQ0hfWExSOiAgc3RyY2F0IChidWYsICIsIHhsciIpOyBicmVhazsKKysJCWNhc2UgRV9NSVBTX01BQ0hfWExQOiAgc3RyY2F0IChidWYsICIsIHhscCIpOyBicmVhazsKKyAJICAgIGNhc2UgMDoKKyAJICAgIC8qIFdlIHNpbXBseSBpZ25vcmUgdGhlIGZpZWxkIGluIHRoaXMgY2FzZSB0byBhdm9pZCBjb25mdXNpb246CisgCSAgICAgICBNSVBTIEVMRiBkb2VzIG5vdCBzcGVjaWZ5IEVGX01JUFNfTUFDSCwgaXQgaXMgYSBHTlUKK2RpZmYgLS1naXQgYS9nYXMvY29uZmlnL3RjLW1pcHMuYyBiL2dhcy9jb25maWcvdGMtbWlwcy5jCitpbmRleCBjM2UzZTJhLi44ZDY0MzQ0IDEwMDY0NAorLS0tIGEvZ2FzL2NvbmZpZy90Yy1taXBzLmMKKysrKyBiL2dhcy9jb25maWcvdGMtbWlwcy5jCitAQCAtNTUxLDYgKzU1MSw3IEBAIHN0YXRpYyBpbnQgbWlwc18zMmJpdG1vZGUgPSAwOworICAgIHx8IG1pcHNfb3B0cy5hcmNoID09IENQVV9STTcwMDAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB8fCBtaXBzX29wdHMuYXJjaCA9PSBDUFVfVlI1NTAwICAgICAgICAgICAgICAgICAgICBcCisgICAgfHwgbWlwc19vcHRzLm1pY3JvbWlwcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgIHx8IG1pcHNfb3B0cy5hcmNoID09IENQVV9YTFAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICApCisgCisgLyogV2hldGhlciB0aGUgcHJvY2Vzc29yIHVzZXMgaGFyZHdhcmUgaW50ZXJsb2NrcyB0byBwcm90ZWN0IHJlYWRzCitAQCAtNTgwLDYgKzU4MSw3IEBAIHN0YXRpYyBpbnQgbWlwc18zMmJpdG1vZGUgPSAwOworICAgICAmJiBtaXBzX29wdHMuaXNhICE9IElTQV9NSVBTMykgICAgICAgICAgICAgICAgICAgIFwKKyAgICB8fCBtaXBzX29wdHMuYXJjaCA9PSBDUFVfUjQzMDAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfHwgbWlwc19vcHRzLm1pY3JvbWlwcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgIHx8IG1pcHNfb3B0cy5hcmNoID09IENQVV9YTFAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICApCisgCisgLyogV2hldGhlciB0aGUgcHJvY2Vzc29yIHVzZXMgaGFyZHdhcmUgaW50ZXJsb2NrcyB0byBwcm90ZWN0IHJlYWRzCitAQCAtMTg2ODIsNyArMTg2ODQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1pcHNfY3B1X2luZm8gbWlwc19jcHVfaW5mb190YWJsZVtdID0KKyAgIC8qIEJyb2FkY29tIFhMUC4KKyAgICAgIFhMUCBpcyBtb3N0bHkgbGlrZSBYTFIsIHdpdGggdGhlIHByb21pbmVudCBleGNlcHRpb24gdGhhdCBpdCBpcworICAgICAgTUlQUzY0UjIgcmF0aGVyIHRoYW4gTUlQUzY0LiAgKi8KKy0gIHsgInhscCIsCSAgICAgIDAsIDAsCQkJSVNBX01JUFM2NFIyLCBDUFVfWExSIH0sCisrICB7ICJ4bHAiLAkgICAgICAwLCAwLAkJCUlTQV9NSVBTNjRSMiwgQ1BVX1hMUCB9LAorIAorICAgLyogRW5kIG1hcmtlciAqLworICAgeyBOVUxMLCAwLCAwLCAwLCAwIH0KK2RpZmYgLS1naXQgYS9nYXMvY29uZmlndXJlIGIvZ2FzL2NvbmZpZ3VyZQoraW5kZXggMDc0ODg2Zi4uODA5MWYyZiAxMDA3NTUKKy0tLSBhL2dhcy9jb25maWd1cmUKKysrKyBiL2dhcy9jb25maWd1cmUKK0BAIC0xMjgwOCw2ICsxMjgwOCw5IEBAIF9BQ0VPRgorIAkgIG1pcHNpc2E2NHI2IHwgbWlwc2lzYTY0cjZlbCkKKyAJICAgIG1pcHNfY3B1PW1pcHM2NHI2CisgCSAgICA7OworKwkgIG1pcHNpc2E2NHIybmxtIHwgbWlwc2lzYTY0cjJubG1lbCkKKysJCW1pcHNfY3B1PXhscAorKwkJOzsKKyAJICBtaXBzdHgzOSB8IG1pcHN0eDM5ZWwpCisgCSAgICBtaXBzX2NwdT1yMzkwMAorIAkgICAgOzsKK2RpZmYgLS1naXQgYS9nYXMvY29uZmlndXJlLnRndCBiL2dhcy9jb25maWd1cmUudGd0CitpbmRleCAxZDkyZjU1Li4wNmU4YjRmIDEwMDY0NAorLS0tIGEvZ2FzL2NvbmZpZ3VyZS50Z3QKKysrKyBiL2dhcy9jb25maWd1cmUudGd0CitAQCAtMzMyLDcgKzMzMiw3IEBAIGNhc2UgJHtnZW5lcmljX3RhcmdldH0gaW4KKyAgIG1pcHMtKi1zeXN2NCpNUCogfCBtaXBzLSotZ251KikJZm10PWVsZiBlbT10bWlwcyA7OworICAgbWlwcyotc2RlLWVsZiogfCBtaXBzKi1tdGktZWxmKiB8IG1pcHMqLWltZy1lbGYqKQorIAkJCQkJZm10PWVsZiBlbT10bWlwcyA7OworLSAgbWlwcy0qLWVsZiogfCBtaXBzLSotcnRlbXMqKQkJZm10PWVsZiA7OworKyAgbWlwcy0qLWVsZiogfCBtaXBzLSotcnRlbXMqKQkJZm10PWVsZiBlbT10bWlwcyA7OworICAgbWlwcy0qLW5ldGJzZCopCQkJZm10PWVsZiBlbT10bWlwcyA7OworICAgbWlwcy0qLW9wZW5ic2QqKQkJCWZtdD1lbGYgZW09dG1pcHMgOzsKKyAKK2RpZmYgLS1naXQgYS9pbmNsdWRlL2VsZi9taXBzLmggYi9pbmNsdWRlL2VsZi9taXBzLmgKK2luZGV4IDJlZDZhY2QuLmU1NDFmNTAgMTAwNjQ0CistLS0gYS9pbmNsdWRlL2VsZi9taXBzLmgKKysrKyBiL2luY2x1ZGUvZWxmL21pcHMuaAorQEAgLTI4NSw2ICsyODUsNyBAQCBFTkRfUkVMT0NfTlVNQkVSUyAoUl9NSVBTX21heGV4dCkKKyAjZGVmaW5lIEVfTUlQU19NQUNIX1NCMSAgICAgICAgIDB4MDA4YTAwMDAKKyAjZGVmaW5lIEVfTUlQU19NQUNIX09DVEVPTgkweDAwOGIwMDAwCisgI2RlZmluZSBFX01JUFNfTUFDSF9YTFIgICAgIAkweDAwOGMwMDAwCisrI2RlZmluZSBFX01JUFNfTUFDSF9YTFAgICAgICAgICAweDAwOGYwMDAwCisgI2RlZmluZSBFX01JUFNfTUFDSF9PQ1RFT04yCTB4MDA4ZDAwMDAKKyAjZGVmaW5lIEVfTUlQU19NQUNIX09DVEVPTjMJMHgwMDhlMDAwMAorICNkZWZpbmUgRV9NSVBTX01BQ0hfNTQwMAkweDAwOTEwMDAwCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGNvZGUvbWlwcy5oIGIvaW5jbHVkZS9vcGNvZGUvbWlwcy5oCitpbmRleCBlZjI2MTY3Li5lZjUzZWM2IDEwMDY0NAorLS0tIGEvaW5jbHVkZS9vcGNvZGUvbWlwcy5oCisrKysgYi9pbmNsdWRlL29wY29kZS9taXBzLmgKK0BAIC0xMjI3LDggKzEyMjcsMTAgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtaXBzX2lzYV90YWJsZVtdID0geworICNkZWZpbmUgSU5TTl9MT09OR1NPTl8yRiAgICAgICAgICAweDgwMDAwMDAwCisgLyogTG9vbmdzb24gM0EuICAqLworICNkZWZpbmUgSU5TTl9MT09OR1NPTl8zQSAgICAgICAgICAweDAwMDAwNDAwCistLyogUk1JIFhsciBpbnN0cnVjdGlvbiAqLworLSNkZWZpbmUgSU5TTl9YTFIgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKysvKiBOZXRsb2dpYyBYbHIgaW5zdHJ1Y3Rpb24gKi8KKysjZGVmaW5lIElOU05fWExSCQkweDAwMDAwMDIwCisrLyogTmV0bG9naWMgWGxQIGluc3RydWN0aW9uICovCisrI2RlZmluZSBJTlNOX1hMUAkJMHgwMDAwMDA0MAorIAorIC8qIERTUCBBU0UgKi8KKyAjZGVmaW5lIEFTRV9EU1AJCQkweDAwMDAwMDAxCitAQCAtMTMyNCw2ICsxMzI2LDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtaXBzX2lzYV90YWJsZVtdID0geworICNkZWZpbmUgQ1BVX09DVEVPTlAJNjYwMQorICNkZWZpbmUgQ1BVX09DVEVPTjIJNjUwMgorICNkZWZpbmUgQ1BVX1hMUiAgICAgCTg4NzY4MiAgIAkvKiBkZWNpbWFsICdYTFInICAgKi8KKysjZGVmaW5lIENQVV9YTFAgICAgICAgICA4ODc2ODAgICAgICAvKiBkZWNpbWFsICdYTFAnICAgKi8KKyAKKyAvKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gQ1BVIGlzIGluY2x1ZGVkIGluIElOU05fKiBtYXNrIE1BU0suICAqLworIAorQEAgLTEzOTgsNiArMTQwMSw5IEBAIGNwdV9pc19tZW1iZXIgKGludCBjcHUsIHVuc2lnbmVkIGludCBtYXNrKQorICAgICAgIHJldHVybiAoKG1hc2sgJiBJTlNOX0lTQV9NQVNLKSA9PSBJTlNOX0lTQTMyUjYpCisgCSAgICAgfHwgKChtYXNrICYgSU5TTl9JU0FfTUFTSykgPT0gSU5TTl9JU0E2NFI2KTsKKyAKKysgICAgY2FzZSBDUFVfWExQOgorKyAgICAgIHJldHVybiAobWFzayAmIElOU05fWExQKSAhPSAwOworKworICAgICBkZWZhdWx0OgorICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgfQorZGlmZiAtLWdpdCBhL2xkL2NvbmZpZ3VyZS50Z3QgYi9sZC9jb25maWd1cmUudGd0CitpbmRleCA3NDBiMmVhLi40ZGYxM2E3IDEwMDY0NAorLS0tIGEvbGQvY29uZmlndXJlLnRndAorKysrIGIvbGQvY29uZmlndXJlLnRndAorQEAgLTQ2Miw2ICs0NjIsOCBAQCBtaXBzKmVsLXNkZS1lbGYqKQl0YXJnX2VtdWw9ZWxmMzJsdHNtaXAKKyBtaXBzKi1zZGUtZWxmKiB8IG1pcHMqLW10aS1lbGYqIHwgbWlwcyotaW1nLWVsZiopCisgCQkJdGFyZ19lbXVsPWVsZjMyYnRzbWlwCisgCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJsdHNtaXAgZWxmMzJidHNtaXBuMzIgZWxmNjRidHNtaXAgZWxmMzJsdHNtaXBuMzIgZWxmNjRsdHNtaXAiIDs7CisrbWlwc2lzYTY0Ki0qLWVsZiopCXRhcmdfZW11bD1lbGYzMmJ0c21pcAorKwkJCXRhcmdfZXh0cmFfZW11bHM9ImVsZjMybHRzbWlwIGVsZjY0YnRzbWlwIGVsZjY0bHRzbWlwIiA7OworIG1pcHM2NCplbC1wczItZWxmKikJdGFyZ19lbXVsPWVsZjMybHI1OTAwbjMyCisgCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJscjU5MDAiCisgCQkJdGFyZ19leHRyYV9saWJwYXRoPSR0YXJnX2V4dHJhX2VtdWxzIDs7CitkaWZmIC0tZ2l0IGEvb3Bjb2Rlcy9taXBzLWRpcy5jIGIvb3Bjb2Rlcy9taXBzLWRpcy5jCitpbmRleCAxZWIxZDQ1Li5kNjg4MWFmIDEwMDY0NAorLS0tIGEvb3Bjb2Rlcy9taXBzLWRpcy5jCisrKysgYi9vcGNvZGVzL21pcHMtZGlzLmMKK0BAIC02NTUsMTMgKzY1NSwxMSBAQCBjb25zdCBzdHJ1Y3QgbWlwc19hcmNoX2Nob2ljZSBtaXBzX2FyY2hfY2hvaWNlc1tdID0KKyAgICAgbWlwc19jcDBzZWxfbmFtZXNfeGxyLCBBUlJBWV9TSVpFIChtaXBzX2NwMHNlbF9uYW1lc194bHIpLAorICAgICBtaXBzX2NwMV9uYW1lc19taXBzMzI2NCwgbWlwc19od3JfbmFtZXNfbnVtZXJpYyB9LAorIAorLSAgLyogWExQIGlzIG1vc3RseSBsaWtlIFhMUiwgd2l0aCB0aGUgcHJvbWluZW50IGV4Y2VwdGlvbiBpdCBpcyBiZWluZworLSAgICAgTUlQUzY0UjIuICAqLworLSAgeyAieGxwIiwgMSwgYmZkX21hY2hfbWlwc194bHIsIENQVV9YTFIsCistICAgIElTQV9NSVBTNjRSMiB8IElOU05fWExSLCAwLAorLSAgICBtaXBzX2NwMF9uYW1lc194bHIsCistICAgIG1pcHNfY3Awc2VsX25hbWVzX3hsciwgQVJSQVlfU0laRSAobWlwc19jcDBzZWxfbmFtZXNfeGxyKSwKKy0gICAgbWlwc19jcDFfbmFtZXNfbWlwczMyNjQsIG1pcHNfaHdyX25hbWVzX251bWVyaWMgfSwKKysgIHsgInhscCIsIDEsIGJmZF9tYWNoX21pcHNfeGxwLCBDUFVfWExQLAorKyAgICBJU0FfTUlQUzY0UjIgfCBJTlNOX1hMUCwgMCwKKysgICAgbWlwc19jcDBfbmFtZXNfbWlwczMyNjRyMiwKKysgICAgbWlwc19jcDBzZWxfbmFtZXNfbWlwczMyNjRyMiwgQVJSQVlfU0laRSAobWlwc19jcDBzZWxfbmFtZXNfbWlwczMyNjRyMiksCisrICAgIG1pcHNfaHdyX25hbWVzX21pcHMzMjY0cjIgfSwKKyAKKyAgIC8qIFRoaXMgZW50cnksIG1pcHMxNiwgaXMgaGVyZSBvbmx5IGZvciBJU0EvcHJvY2Vzc29yIHNlbGVjdGlvbjsgZG8KKyAgICAgIG5vdCBwcmludCBpdHMgbmFtZS4gICovCitkaWZmIC0tZ2l0IGEvb3Bjb2Rlcy9taXBzLW9wYy5jIGIvb3Bjb2Rlcy9taXBzLW9wYy5jCitpbmRleCAyYzNiYmFkLi45Nzg1YTdlIDEwMDY0NAorLS0tIGEvb3Bjb2Rlcy9taXBzLW9wYy5jCisrKysgYi9vcGNvZGVzL21pcHMtb3BjLmMKK0BAIC0zMTksNyArMzE5LDggQEAgZGVjb2RlX21pcHNfb3BlcmFuZCAoY29uc3QgY2hhciAqcCkKKyAjZGVmaW5lIElPQ1QJKElOU05fT0NURU9OIHwgSU5TTl9PQ1RFT05QIHwgSU5TTl9PQ1RFT04yKQorICNkZWZpbmUgSU9DVFAJKElOU05fT0NURU9OUCB8IElOU05fT0NURU9OMikKKyAjZGVmaW5lIElPQ1QyCUlOU05fT0NURU9OMgorLSNkZWZpbmUgWExSICAgICBJTlNOX1hMUgorKyNkZWZpbmUgWExSCUlOU05fWExSCisrI2RlZmluZSBYTFAJSU5TTl9YTFAKKyAjZGVmaW5lIElWSVJUCUFTRV9WSVJUCisgI2RlZmluZSBJVklSVDY0CUFTRV9WSVJUNjQKKyAKK0BAIC05NTYsNiArOTU3LDcgQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQorIHsiY2xvIiwJCQkiVSxzIiwJCTB4NzAwMDAwMjEsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMiwJCTAsCQlJMzJ8TjU1LAkwLAlJMzcgfSwKKyB7ImNseiIsCQkJImQscyIsCQkweDAwMDAwMDUwLCAweGZjMWYwN2ZmLCBXUl8xfFJEXzIsCQkwLAkJSTM3LAkJMCwJMCB9LAorIHsiY2x6IiwJCQkiVSxzIiwJCTB4NzAwMDAwMjAsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMiwJCTAsCQlJMzJ8TjU1LAkwLAlJMzcgfSwKKyt7ImNyYyIsCQkJImQscyx0IiwJMHg3MDAwMDAxYywgMHhmYzAwMDdmZiwJV1JfMXxSRF8yfFJEXzMsCTAsCQlYTFAsIAkJMCwJMCB9LAorIC8qIGN0YzAgaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdGFibGUuICAqLworIHsiY3RjMSIsCQkidCxHIiwJCTB4NDRjMDAwMDAsIDB4ZmZlMDA3ZmYsCVJEXzF8V1JfQ0N8Q00sCQkwLAkJSTEsCQkwLAkwIH0sCisgeyJjdGMxIiwJCSJ0LFMiLAkJMHg0NGMwMDAwMCwgMHhmZmUwMDdmZiwJUkRfMXxXUl9DQ3xDTSwJCTAsCQlJMSwJCTAsCTAgfSwKK0BAIC05ODgsMTIgKzk5MCwxMyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgeyJkYWRkaXUiLAkJInQscixqIiwJMHg2NDAwMDAwMCwgMHhmYzAwMDAwMCwgV1JfMXxSRF8yLAkJMCwJCUkzLAkJMCwJMCB9LAorIHsiZGFkZHUiLAkJImQsdix0IiwJMHgwMDAwMDAyZCwgMHhmYzAwMDdmZiwgV1JfMXxSRF8yfFJEXzMsCQkwLAkJSTMsCQkwLAkwIH0sCisgeyJkYWRkdSIsCQkidCxyLEkiLAkwLCAgICAoaW50KSBNX0RBRERVX0ksCUlOU05fTUFDUk8sCQkwLAkJSTMsCQkwLAkwIH0sCisteyJkYWRkd2MiLAkJImQscyx0IiwgCTB4NzAwMDAwMzgsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMnxSRF8zfFdSX0MwfFJEX0MwLCAwLAkJWExSLAkJMCwJMCB9LAorK3siZGFkZHdjIiwJCSJkLHMsdCIsIAkweDcwMDAwMDM4LCAweGZjMDAwN2ZmLCBXUl8xfFJEXzJ8UkRfM3xXUl9DMHxSRF9DMCwgMCwJCVhMUnxYTFAsCTAsCTAgfSwKKyB7ImRicmVhayIsCQkiIiwJCTB4NzAwMDAwM2YsIDB4ZmZmZmZmZmYsCTAsCQkJMCwJCU41LAkJMCwJMCB9LAorIHsiZGNsbyIsCQkiZCxzIiwJCTB4MDAwMDAwNTMsIDB4ZmMxZjA3ZmYsIFdSXzF8UkRfMiwJCTAsCQlJNjksCQkwLAkwIH0sCisgeyJkY2xvIiwJCSJVLHMiLAkgCTB4NzAwMDAwMjUsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMiwgCTAsCQlJNjR8TjU1LAkwLAlJNjkgfSwKKyB7ImRjbHoiLAkJImQscyIsCQkweDAwMDAwMDUyLCAweGZjMWYwN2ZmLCBXUl8xfFJEXzIsCQkwLAkJSTY5LAkJMCwJMCB9LAorIHsiZGNseiIsCQkiVSxzIiwJIAkweDcwMDAwMDI0LCAweGZjMDAwN2ZmLCBXUl8xfFJEXzIsIAkwLAkJSTY0fE41NSwJMCwJSTY5IH0sCisreyJkY3JjIiwJCSJkLHMsdCIsCTB4NzAwMDAwMWQsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMnxSRF8zLAkwLAkJWExQLCAJCTAsCTAgfSwKKyAvKiBkY3RyIGFuZCBkY3R3IGFyZSB1c2VkIG9uIHRoZSByNTAwMC4gICovCisgeyJkY3RyIiwJCSJvKGIpIiwJIAkweGJjMDUwMDAwLCAweGZjMWYwMDAwLCBSRF8yLAkJCTAsCQlJMywJCTAsCTAgfSwKKyB7ImRjdHciLAkJIm8oYikiLAkJMHhiYzA5MDAwMCwgMHhmYzFmMDAwMCwgUkRfMiwJCQkwLAkJSTMsCQkwLAkwIH0sCitAQCAtMTA2NSw2ICsxMDY4LDcgQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQorIHsiZG1mYzAiLAkJInQsRyxIIiwJMHg0MDIwMDAwMCwgMHhmZmUwMDdmOCwJV1JfMXxSRF9DMHxMQywJCTAsCQlJNjQsCQkwLAkwIH0sCisgeyJkbWZnYzAiLAkJInQsRyIsCQkweDQwNjAwMTAwLCAweGZmZTAwN2ZmLCBXUl8xfFJEX0MwfExDLAkJMCwJCTAsCQlJVklSVDY0LCAwIH0sCisgeyJkbWZnYzAiLAkJInQsRyxIIiwJMHg0MDYwMDEwMCwgMHhmZmUwMDdmOCwgV1JfMXxSRF9DMHxMQywJCTAsCQkwLAkJSVZJUlQ2NCwgMCB9LAorK3siZG1mdXIiLAkJInQsZCIsCQkweDcwMDAwMDFlLCAweGZmZTAwN2ZmLCBXUl8xLAkJCTAsCQlYTFAsCQkwLAkwIH0sCisgeyJkbXQiLAkJCSIiLAkJMHg0MTYwMGJjMSwgMHhmZmZmZmZmZiwgVFJBUCwJCQkwLAkJMCwJCU1UMzIsCTAgfSwKKyB7ImRtdCIsCQkJInQiLAkJMHg0MTYwMGJjMSwgMHhmZmUwZmZmZiwgV1JfMXxUUkFQLAkJMCwJCTAsCQlNVDMyLAkwIH0sCisgeyJkbXRjMCIsCQkidCxHIiwJCTB4NDBhMDAwMDAsIDB4ZmZlMDA3ZmYsCVJEXzF8V1JfQzB8V1JfQ0N8Q00sCTAsCQlJMywJCTAsCUVFIH0sCitAQCAtMTA4MCw2ICsxMDg0LDggQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQorIC8qIGRtZmMzIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHRhYmxlLiAgKi8KKyAvKiBkbXRjMyBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSB0YWJsZS4gICovCisgeyJkbXVoIiwJCSJkLHMsdCIsCTB4MDAwMDAwZGMsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMnxSRF8zLAkJMCwJCUk2OSwJCTAsCTAgfSwKKyt7ImRtdHVyIiwJCSJ0LGQiLAkJMHg3MDAwMDAxZiwgMHhmZmUwMDdmZiwJUkRfMSwJCQkwLAkJWExQLAkJMCwJMCB9LAorK3siZG11bCIsCQkiZCxzLHQiLAkweDcwMDAwMDA2LCAweGZjMDAwN2ZmLAlXUl8xfFJEXzJ8UkRfMywJCTAsCQlYTFAsCQkwLAkwIH0sCisgeyJkbXVsIiwJCSJkLHMsdCIsCTB4MDAwMDAwOWMsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMnxSRF8zLAkJMCwJCUk2OSwJCTAsCTAgfSwKKyB7ImRtdWwiLAkJImQsdix0IiwJMHg3MDAwMDAwMywgMHhmYzAwMDdmZiwgV1JfMXxSRF8yfFJEXzN8V1JfSElMTywJMCwJCUlPQ1QsCQkwLAkwIH0sCisgeyJkbXVsIiwJCSJkLHYsdCIsCTAsICAgIChpbnQpIE1fRE1VTCwJSU5TTl9NQUNSTywJCTAsCQlJMywJCTAsCU0zMnxJNjkgfSwKK0BAIC0xMjI5LDkgKzEyMzUsOSBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgeyJsZCIsCQkJInMsLWIoK1IpIiwJMHhlYzE4MDAwMCwgMHhmYzFjMDAwMCwgV1JfMSwJCQlSRF9wYywJCUk2OSwJCTAsCTAgfSwKKyB7ImxkIiwJCQkidCxBKGIpIiwJMCwgICAgKGludCkgTV9MRF9BQiwJSU5TTl9NQUNSTywJCTAsCQlJMSwJCTAsCTAgfSwKKyB7ImxkIiwJCQkidCxvKGIpIiwJMHhkYzAwMDAwMCwgMHhmYzAwMDAwMCwgV1JfMXxSRF8zfExNLAkJMCwJCUkzLAkJMCwJMCB9LAorLXsibGRhZGR3IiwJCSJ0LGIiLAkJMHg3MDAwMDAxMCwgMHhmYzAwZmZmZiwJTU9EXzF8UkRfMnxMTXxTTSwJMCwJCVhMUiwJCTAsCTAgfSwKKy17ImxkYWRkd3UiLAkJInQsYiIsCQkweDcwMDAwMDExLCAweGZjMDBmZmZmLAlNT0RfMXxSRF8yfExNfFNNLAkwLAkJWExSLAkJMCwJMCB9LAorLXsibGRhZGRkIiwJCSJ0LGIiLAkJMHg3MDAwMDAxMiwgMHhmYzAwZmZmZiwJTU9EXzF8UkRfMnxMTXxTTSwJMCwJCVhMUiwJCTAsCTAgfSwKKyt7ImxkYWRkdyIsCQkidCxiIiwJCTB4NzAwMDAwMTAsIDB4ZmMwMGZmZmYsCU1PRF8xfFJEXzJ8U00sCQkwLAkJWExSfFhMUCwJMCwJMCB9LAorK3sibGRhZGR3dSIsCQkidCxiIiwJCTB4NzAwMDAwMTEsIDB4ZmMwMGZmZmYsCU1PRF8xfFJEXzJ8U00sCQkwLAkJWExSfFhMUCwJMCwJMCB9LAorK3sibGRhZGRkIiwJCSJ0LGIiLAkJMHg3MDAwMDAxMiwgMHhmYzAwZmZmZiwJTU9EXzF8UkRfMnxTTSwJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisgeyJsZGMxIiwJCSJULG8oYikiLAkweGQ0MDAwMDAwLCAweGZjMDAwMDAwLCBXUl8xfFJEXzN8Q0xEfEZQX0QsCTAsCQlJMiwJCTAsCVNGIH0sCisgeyJsZGMxIiwJCSJFLG8oYikiLAkweGQ0MDAwMDAwLCAweGZjMDAwMDAwLCBXUl8xfFJEXzN8Q0xEfEZQX0QsCTAsCQlJMiwJCTAsCVNGIH0sCisgeyJsZGMxIiwJCSJULEEoYikiLAkwLCAgICAoaW50KSBNX0xEQzFfQUIsCUlOU05fTUFDUk8sCQlJTlNOMl9NX0ZQX0QsCUkyLAkJMCwJU0YgfSwKK0BAIC0xMzk2LDcgKzE0MDIsNyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgeyJtZmxvIiwJCSJkLDkiLAkJMHgwMDAwMDAxMiwgMHhmZjlmMDdmZiwgV1JfMXxSRF9MTywJCTAsCQkwLAkJRDMyLAkwIH0sCisgeyJtZmxvMSIsCQkiZCIsCQkweDcwMDAwMDEyLCAweGZmZmYwN2ZmLAlXUl8xfFJEX0xPLAkJMCwJCUVFLAkJMCwJMCB9LAorIHsibWZsaHh1IiwJCSJkIiwJCTB4MDAwMDAwNTIsIDB4ZmZmZjA3ZmYsCVdSXzF8TU9EX0hJTE8sCQkwLAkJMCwJCVNNVCwJMCB9LAorLXsibWZjciIsCQkidCxzIiwJCTB4NzAwMDAwMTgsIDB4ZmMwMGZmZmYsIFdSXzF8UkRfMiwJCTAsCQlYTFIsCQkwLAkwIH0sCisreyJtZmNyIiwJCSJ0LHMiLAkJMHg3MDAwMDAxOCwgMHhmYzAwZmZmZiwgV1JfMSwJCQkwLAkJWExSfFhMUCwJMCwJMCB9LAorIHsibWZzYSIsCQkiZCIsCQkweDAwMDAwMDI4LCAweGZmZmYwN2ZmLAlXUl8xLAkJCTAsCQlFRSwJCTAsCTAgfSwKKyB7Im1pbi5vYiIsCQkiWCxZLFEiLAkweDc4MDAwMDA2LCAweGZjMjAwMDNmLAlXUl8xfFJEXzJ8UkRfM3xGUF9ELAkwLAkJU0IxLAkJTVgsCTAgfSwKKyB7Im1pbi5vYiIsCQkiRCxTLFEiLAkweDQ4MDAwMDA2LCAweGZjMjAwMDNmLAlXUl8xfFJEXzJ8UkRfM3xGUF9ELAkwLAkJTjU0LAkJMCwJMCB9LAorQEAgLTE0NDEsMTAgKzE0NDcsMTMgQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQorIC8qIG1vdmUgaXMgYXQgdGhlIHRvcCBvZiB0aGUgdGFibGUuICAqLworIHsibXNnbi5xaCIsCQkiWCxZLFEiLAkweDc4MjAwMDAwLCAweGZjMjAwMDNmLAlXUl8xfFJEXzJ8UkRfM3xGUF9ELAkwLAkJMCwJCU1YLAkwIH0sCisgeyJtc2dzbmQiLAkJInQiLAkJMCwgICAgKGludCkgTV9NU0dTTkQsCUlOU05fTUFDUk8sCQkwLAkJWExSLAkJMCwJMCB9LAorK3sibXNnc25kcyIsCQkiZCx0IiwJCTB4NGEwMDAwMDEsIDB4ZmZlMDA3ZmYsCVdSXzF8UkRfMnxSRF9DMHxXUl9DMCwJMCwJCVhMUCwJCTAsCTAgfSwKKyB7Im1zZ2xkIiwJCSIiLCAJCTAsICAgIChpbnQpIE1fTVNHTEQsCUlOU05fTUFDUk8sCQkwLAkJWExSLAkJMCwJMCB9LAorIHsibXNnbGQiLAkJInQiLAkJMCwgICAgKGludCkgTV9NU0dMRF9ULAlJTlNOX01BQ1JPLAkJMCwJCVhMUiwJCTAsCTAgfSwKKy17Im1zZ3dhaXQiLAkJIiIsIAkJMCwgICAgKGludCkgTV9NU0dXQUlULAlJTlNOX01BQ1JPLAkJMCwJCVhMUiwJCTAsCTAgfSwKKy17Im1zZ3dhaXQiLAkJInQiLAkJMCwgICAgKGludCkgTV9NU0dXQUlUX1QsSU5TTl9NQUNSTywJCTAsCQlYTFIsCQkwLAkwIH0sCisreyJtc2dsZHMiLAkJImQsdCIsCQkweDRhMDAwMDAyLCAweGZmZTAwN2ZmLAlXUl8xfFJEXzJ8UkRfQzB8V1JfQzAsCTAsCQlYTFAsCQkwLAkwIH0sCisreyJtc2d3YWl0IiwJCSIiLAkJMCwgICAgKGludCkgTV9NU0dXQUlULCAgSU5TTl9NQUNSTywJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisreyJtc2d3YWl0IiwJCSJ0IiwJCTAsICAgIChpbnQpIE1fTVNHV0FJVF9ULElOU05fTUFDUk8sCQkwLAkJWExSfFhMUCwJMCwJMCB9LAorK3sibXNnc3luYyIsCQkiIiwJCTB4NGEwMDAwMDQsIDB4ZmZmZmZmZmYsMCwJCQkwLAkJWExQLAkJMCwJMCB9LAorIHsibXN1Yi5kIiwJCSJELFIsUyxUIiwJMHg0YzAwMDAyOSwgMHhmYzAwMDAzZiwgV1JfMXxSRF8yfFJEXzN8UkRfNHxGUF9ELCAwLAkJSTRfMzMsCQkwLAlJMzcgfSwKKyB7Im1zdWIuZCIsCQkiRCxTLFQiLAkweDQ2MjAwMDE5LCAweGZmZTAwMDNmLAlXUl8xfFJEXzJ8UkRfM3xGUF9ELAkwLAkJSUwyRSwJCTAsCTAgfSwKKyB7Im1zdWIuZCIsCQkiRCxTLFQiLAkweDcyMjAwMDE5LCAweGZmZTAwMDNmLAlXUl8xfFJEXzJ8UkRfM3xGUF9ELAkwLAkJSUwyRiwJCTAsCTAgfSwKK0BAIC0xNDk0LDcgKzE1MDMsNyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgeyJtdGxvIiwJCSJzLDciLAkJMHgwMDAwMDAxMywgMHhmYzFmZTdmZiwgUkRfMXxXUl9MTywJCTAsCQkwLAkJRDMyLAkwIH0sCisgeyJtdGxvMSIsCQkicyIsCQkweDcwMDAwMDEzLCAweGZjMWZmZmZmLAlSRF8xfFdSX0xPLAkJMCwJCUVFLAkJMCwJMCB9LAorIHsibXRsaHgiLAkJInMiLAkJMHgwMDAwMDA1MywgMHhmYzFmZmZmZiwJUkRfMXxNT0RfSElMTywJCTAsCQkwLAkJU01ULAkwIH0sCisteyJtdGNyIiwJCSJ0LHMiLAkJMHg3MDAwMDAxOSwgMHhmYzAwZmZmZiwgUkRfMXxSRF8yLAkJMCwJCVhMUiwJCTAsCTAgfSwKKyt7Im10Y3IiLAkJInQscyIsCQkweDcwMDAwMDE5LCAweGZjMDBmZmZmLCBSRF8xLAkJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisgeyJtdG0wIiwJCSJzIiwJCTB4NzAwMDAwMDgsIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCisgeyJtdG0xIiwJCSJzIiwJCTB4NzAwMDAwMGMsIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCisgeyJtdG0yIiwJCSJzIiwJCTB4NzAwMDAwMGQsIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCitAQCAtMTkyNCw5ICsxOTMzLDkgQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQorIHsic3V4YzEiLAkJIlMsdChiKSIsCTB4NGMwMDAwMGQsIDB4ZmMwMDA3ZmYsIFJEXzF8UkRfMnxSRF8zfFNNfEZQX0QsCTAsCQlJNV8zM3xONTUsCTAsCUkzN30sCisgeyJzdyIsCQkJInQsbyhiKSIsCTB4YWMwMDAwMDAsIDB4ZmMwMDAwMDAsCVJEXzF8UkRfM3xTTSwJCTAsCQlJMSwJCTAsCTAgfSwKKyB7InN3IiwJCQkidCxBKGIpIiwJMCwgICAgKGludCkgTV9TV19BQiwJSU5TTl9NQUNSTywJCTAsCQlJMSwJCTAsCTAgfSwKKy17InN3YXB3IiwJCSJ0LGIiLAkJMHg3MDAwMDAxNCwgMHhmYzAwZmZmZiwgTU9EXzF8UkRfMnxMTXxTTSwJMCwJCVhMUiwJCTAsCTAgfSwKKy17InN3YXB3dSIsCQkidCxiIiwJCTB4NzAwMDAwMTUsIDB4ZmMwMGZmZmYsIE1PRF8xfFJEXzJ8TE18U00sCTAsCQlYTFIsCQkwLAkwIH0sCisteyJzd2FwZCIsCQkidCxiIiwJCTB4NzAwMDAwMTYsIDB4ZmMwMGZmZmYsIE1PRF8xfFJEXzJ8TE18U00sCTAsCQlYTFIsCQkwLAkwIH0sCisreyJzd2FwdyIsCQkidCxiIiwJCTB4NzAwMDAwMTQsIDB4ZmMwMGZmZmYsIE1PRF8xfFJEXzJ8U00sCQkwLAkJWExSfFhMUCwJMCwJMCB9LAorK3sic3dhcHd1IiwJCSJ0LGIiLAkJMHg3MDAwMDAxNSwgMHhmYzAwZmZmZiwgTU9EXzF8UkRfMnxTTSwJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisreyJzd2FwZCIsCQkidCxiIiwJCTB4NzAwMDAwMTYsIDB4ZmMwMGZmZmYsIE1PRF8xfFJEXzJ8U00sCQkwLAkJWExSfFhMUCwJMCwJMCB9LAorIHsic3djMCIsCQkiRSxvKGIpIiwJMHhlMDAwMDAwMCwgMHhmYzAwMDAwMCwJUkRfM3xSRF9DMHxTTSwJCTAsCQlJMSwJCTAsCUlPQ1R8SU9DVFB8SU9DVDJ8STM3IH0sCisgeyJzd2MwIiwJCSJFLEEoYikiLAkwLCAgICAoaW50KSBNX1NXQzBfQUIsCUlOU05fTUFDUk8sCQkwLAkJSTEsCQkwLAlJT0NUfElPQ1RQfElPQ1QyfEkzNyB9LAorIHsic3djMSIsCQkiVCxvKGIpIiwJMHhlNDAwMDAwMCwgMHhmYzAwMDAwMCwJUkRfMXxSRF8zfFNNfEZQX1MsCTAsCQlJMSwJCTAsCTAgfSwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMy1GaXgtYW4taW50ZXJuYWwtZXJyb3ItaW4tZG9fcHJpbnRfdG9fbWFwZmlsZS1zZWVuLXdpLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMy1GaXgtYW4taW50ZXJuYWwtZXJyb3ItaW4tZG9fcHJpbnRfdG9fbWFwZmlsZS1zZWVuLXdpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZTAxYzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEzLUZpeC1hbi1pbnRlcm5hbC1lcnJvci1pbi1kb19wcmludF90b19tYXBmaWxlLXNlZW4td2kucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSA4ZThmNzdlYzJiNjI2MmU3ZDEwYWY1NDcwMGMzNDAxNzNkOTU3MjY3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjcgRmViIDIwMTUgMDk6MDU6NDkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxMy8xM10gRml4IGFuIGludGVybmFsIGVycm9yIGluIGRvX3ByaW50X3RvX21hcGZpbGUgc2VlbiB3aXRoCisgZ29sZCBvbiBhcm0KKworVGhpcyBpcyBkdWUgdG8gbWlzc2luZyBpbXBsZW1lbnRhdGlvbiBvZiBkb19wcmludF90b19tYXBmaWxlIGZvcgorYXRycmlidXRlYSBzZWN0aW9uIChBUk0uYXR0cmlidXRlcyksIGl0IHN0YXJ0ZWQgdG8gc2hvdyB1cCBhZnRlciBmaXgKK2ZvciBQUiBnb2xkLzE2OTgwIHdhcyBpbnN0YWxsZWQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKy0tLQorIGdvbGQvYXR0cmlidXRlcy5oIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ29sZC9hdHRyaWJ1dGVzLmggYi9nb2xkL2F0dHJpYnV0ZXMuaAoraW5kZXggMmFhN2E3OC4uM2QxMjZlNiAxMDA2NDQKKy0tLSBhL2dvbGQvYXR0cmlidXRlcy5oCisrKysgYi9nb2xkL2F0dHJpYnV0ZXMuaAorQEAgLTM4Nyw2ICszODcsMTAgQEAgY2xhc3MgT3V0cHV0X2F0dHJpYnV0ZXNfc2VjdGlvbl9kYXRhIDogcHVibGljIE91dHB1dF9zZWN0aW9uX2RhdGEKKyAgIHsgfQorIAorICBwcm90ZWN0ZWQ6CisrICAvLyBXcml0ZSB0byBhIG1hcCBmaWxlLgorKyAgdm9pZAorKyAgZG9fcHJpbnRfdG9fbWFwZmlsZShNYXBmaWxlKiBtYXBmaWxlKSBjb25zdAorKyAgeyBtYXBmaWxlLT5wcmludF9vdXRwdXRfZGF0YSh0aGlzLCBfKCIqKiBhdHRyaWJ1dGVzIikpOyB9CisgICAvLyBXcml0ZSB0aGUgZGF0YSB0byB0aGUgb3V0cHV0IGZpbGUuCisgICB2b2lkCisgICBkb193cml0ZShPdXRwdXRfZmlsZSopOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE0LWdvbGQtYXJtLVNraXAtcGljLWNoZWNrLWZvci1SX0FSTV9SRUwzMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTQtZ29sZC1hcm0tU2tpcC1waWMtY2hlY2stZm9yLVJfQVJNX1JFTDMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMjQzMDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE0LWdvbGQtYXJtLVNraXAtcGljLWNoZWNrLWZvci1SX0FSTV9SRUwzMi5wYXRjaApAQCAtMCwwICsxLDI1IEBACitGcm9tIGViZTI2ZDg1NTQ1MmQwN2UwMTUyYmQ3OGQ0OTY2NDc1ZDJkZTFkZTggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVGh1LCA1IE1hciAyMDE1IDA3OjMwOjMxICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGdvbGQvYXJtOiBTa2lwIHBpYyBjaGVjayBmb3IgUl9BUk1fUkVMMzIKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdvbGQvYXJtLmNjIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9nb2xkL2FybS5jYyBiL2dvbGQvYXJtLmNjCitpbmRleCA2YzQ3MmJiLi5mYjgwNDM1IDEwMDY0NAorLS0tIGEvZ29sZC9hcm0uY2MKKysrKyBiL2dvbGQvYXJtLmNjCitAQCAtNzgyOSw2ICs3ODI5LDcgQEAgVGFyZ2V0X2FybTxiaWdfZW5kaWFuPjo6U2Nhbjo6Y2hlY2tfbm9uX3BpYyhSZWxvYmoqIG9iamVjdCwKKyAgICAgY2FzZSBlbGZjcHA6OlJfQVJNX1RMU19EVFBNT0QzMjoKKyAgICAgY2FzZSBlbGZjcHA6OlJfQVJNX1RMU19EVFBPRkYzMjoKKyAgICAgY2FzZSBlbGZjcHA6OlJfQVJNX1RMU19UUE9GRjMyOgorKyAgICBjYXNlIGVsZmNwcDo6Ul9BUk1fUkVMMzI6CisgICAgICAgcmV0dXJuOworIAorICAgICBkZWZhdWx0OgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE1LUZpeC1keW5hbWljLWxpc3Qtc28tdGhhdC1zeW1ib2xzLW5vdC1pbi10aGUtbGlzdC1hcmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE1LUZpeC1keW5hbWljLWxpc3Qtc28tdGhhdC1zeW1ib2xzLW5vdC1pbi10aGUtbGlzdC1hcmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU0OWMzOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTUtRml4LWR5bmFtaWMtbGlzdC1zby10aGF0LXN5bWJvbHMtbm90LWluLXRoZS1saXN0LWFyZS5wYXRjaApAQCAtMCwwICsxLDEzMSBAQAorRnJvbSBlOWMxYmRhZDI2OWMwYzMzNTJlZWJjYzk0ODFlZDY1MTQ0MDAxYjBiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2FyeSBDb3V0YW50IDxjY291dGFudEBnb29nbGUuY29tPgorRGF0ZTogTW9uLCAxNiBGZWIgMjAxNSAyMjoxNToxMiAtMDgwMAorU3ViamVjdDogW1BBVENIXSBGaXggLS1keW5hbWljLWxpc3Qgc28gdGhhdCBzeW1ib2xzIG5vdCBpbiB0aGUgbGlzdCBhcmUgc3RpbGwKKyBleHBvcnRlZC4KKworSW4gUFIgMTM1NzcsIHRoZSBjb21wbGFpbnQgd2FzIHRoYXQgLUJzeW1ib2xpYyB3YXMgb3ZlcnJpZGluZyB0aGUgYmluZGluZworYmVoYXZpb3IgZm9yIHN5bWJvbHMgbGlzdGVkIGluIHRoZSAtLWR5bmFtaWMtbGlzdCBieSBzZXR0aW5nIHRoZSBEVF9TWU1CT0xJQwordGFnIGluIHRoZSBkeW5hbWljIHRhYmxlLiBJbiByZWFkaW5nIHRoZSBHbnUgbGQgbWFudWFsLCBJIGRlY2lkZWQgdGhhdAorLS1keW5hbWljLWxpc3Qgc2hvdWxkIGJlIG11dHVhbGx5IGV4Y2x1c2l2ZSBvZiAtQnN5bWJvbGljLCBhbmQgbW9kaWZpZWQKK2dvbGQgc28gdGhhdCAtLWR5bmFtaWMtbGlzdCB3b3VsZCB0cmVhdCBzeW1ib2xzIGxpc3RlZCBhcyBwcmVlbXB0aWJsZSwKK2FuZCBhbGwgb3RoZXIgc3ltYm9scyBhcyBpbnRlcm5hbGx5IGJvdW5kLiBJIHdhcyB3cm9uZy4KKworUFIgMTY5OTIgc2hvd3MgdGhhdCB3aXRoIC0tZHluYW1pYy1saXN0IChhbmQgbm90IC1Cc3ltYm9saWMpLCBhIHN5bWJvbAorbm90IGxpc3RlZCBpbiB0aGUgZHluYW1pYyBsaXN0IGlzIGJlaW5nIGludGVybmFsbHkgYm91bmQgd2l0aGluIHRoZQorc2hhcmVkIGxpYnJhcnksIGJ1dCBiZWNhdXNlIGl0J3Mgc3RpbGwgaW4gdGhlIGR5bmFtaWMgc3ltYm9sIHRhYmxlLCB3ZQorZXhwb3NlIGl0IHRvIGEgQ09QWSByZWxvY2F0aW9uLCBhbmQgdGhpbmdzIGdvIHJlYWxseSBiYWQgZnJvbSB0aGVyZS4KKworKEkgY2FuIHJlcHJvZHVjZSB0aGUgc2FtZSBmYWlsdXJlLCBzaW1wbHkgYnkgdHVybmluZyBvbiAtQnN5bWJvbGljLWZ1bmN0aW9ucword2l0aCB0aGUgR251IGxpbmtlci4gRXZlbiB0aG91Z2ggdGhlIHN5bWJvbCBpcyBib3VuZCBpbnRlcm5hbGx5LCBpdCdzCitzdGlsbCBleHBvcnRlZCB0byB0aGUgZHluYW1pYyBzeW1ib2wgdGFibGUsIGFuZCBpcyBleHBvc2VkIHRvIGEgQ09QWQorcmVsb2NhdGlvbi4pCisKK0kndmUgYmFja2VkIG91dCBwYXJ0IG9mIHRoZSBmaXggZm9yIFBSIDEzNTc3LCBhbmQgLUJzeW1ib2xpYyAob3IKKy1Cc3ltYm9saWMtZnVuY3Rpb25zKSBjYW4gbm93IGJlIHVzZWQgd2l0aCAtLWR5bmFtaWMtbGlzdCwgYnV0IGlmIHRoZQordHdvIGFyZSB1c2VkIHRvZ2V0aGVyLCB3ZSBkbyBub3Qgc2V0IERUX1NZTUJPTElDIG9yIERGX1NZTUJPTElDCisodGhpcyBtYXRjaGVzIEdudSBsZCBiZWhhdmlvcikuIFdlIG5vdyB0cmVhdCBzeW1ib2xzIGxpc3RlZCBpbiB0aGUKK2R5bmFtaWMgbGlzdCBhcyBwcmVtcHRpYmxlLCBidXQgd2UgZG8gbm90IGF1dG9tYXRpY2FsbHkgdHJlYXQgc3ltYm9scworbm90IGxpc3RlZCB0aGVyZSBhcyBub24tcHJlbXB0aWJsZS4KKworZ29sZC8KKwlQUiBnb2xkLzEzNTc3CisJUFIgZ29sZC8xNjk5MgorCSogbGF5b3V0LmNjIChMYXlvdXQ6OmZpbmlzaF9keW5hbWljX3NlY3Rpb24pOiBEb24ndCBzZXQgRFRfU1lNQk9MSUMgb3IKKwlERl9TWU1CT0xJQyBpZiAtLWR5bmFtaWMtbGlzdCBvcHRpb24gaXMgdXNlZC4KKwkqIG9wdGlvbnMuY2MgKEdlbmVyYWxfb3B0aW9uczo6ZmluYWxpemUpOiAtLWR5bmFtaWMtbGlzdCBpcyBub3QKKwltdXR1YWxseSBleGNsdXNpdmUgd2l0aCAtQnN5bWJvbGljLgorCSogc3ltdGFiLmggKFN5bWJvbDo6aXNfcHJlZW1wdGlibGUpOiBEb24ndCBleGNsdWRlIGR5bmFtaWMgc3ltYm9scyBub3QKKwlsaXN0ZWQgaW4gLS1keW5hbWljLWxpc3QuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW0gKGR5bmFtaWNfbGlzdF9saWIyLnNvKTogQWRkCisJLUJzeW1ib2xpYy1mdW5jdGlvbnMuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCistLS0KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworIGdvbGQvQ2hhbmdlTG9nICAgICAgICAgICAgIHwgMTQgKysrKysrKysrKysrKysKKyBnb2xkL2xheW91dC5jYyAgICAgICAgICAgICB8ICAzICsrLQorIGdvbGQvb3B0aW9ucy5jYyAgICAgICAgICAgIHwgIDcgLS0tLS0tLQorIGdvbGQvc3ltdGFiLmggICAgICAgICAgICAgIHwgIDYgKystLS0tCisgZ29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuYW0gfCAgMiArLQorIGdvbGQvdGVzdHN1aXRlL01ha2VmaWxlLmluIHwgIDIgKy0KKyA2IGZpbGVzIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ29sZC9sYXlvdXQuY2MgYi9nb2xkL2xheW91dC5jYworaW5kZXggYmNkYWFjOC4uNzgzNjY0MCAxMDA2NDQKKy0tLSBhL2dvbGQvbGF5b3V0LmNjCisrKysgYi9nb2xkL2xheW91dC5jYworQEAgLTQ4NzMsNyArNDg3Myw4IEBAIExheW91dDo6ZmluaXNoX2R5bmFtaWNfc2VjdGlvbihjb25zdCBJbnB1dF9vYmplY3RzKiBpbnB1dF9vYmplY3RzLAorICAgICBmbGFncyB8PSBlbGZjcHA6OkRGX1NUQVRJQ19UTFM7CisgICBpZiAocGFyYW1ldGVycy0+b3B0aW9ucygpLm9yaWdpbigpKQorICAgICBmbGFncyB8PSBlbGZjcHA6OkRGX09SSUdJTjsKKy0gIGlmIChwYXJhbWV0ZXJzLT5vcHRpb25zKCkuQnN5bWJvbGljKCkpCisrICBpZiAocGFyYW1ldGVycy0+b3B0aW9ucygpLkJzeW1ib2xpYygpCisrICAgICAgJiYgIXBhcmFtZXRlcnMtPm9wdGlvbnMoKS5oYXZlX2R5bmFtaWNfbGlzdCgpKQorICAgICB7CisgICAgICAgZmxhZ3MgfD0gZWxmY3BwOjpERl9TWU1CT0xJQzsKKyAgICAgICAvLyBBZGQgRFRfU1lNQk9MSUMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBsb2FkZXJzLgorZGlmZiAtLWdpdCBhL2dvbGQvb3B0aW9ucy5jYyBiL2dvbGQvb3B0aW9ucy5jYworaW5kZXggN2ViOGYyNy4uN2YxZjY5ZSAxMDA2NDQKKy0tLSBhL2dvbGQvb3B0aW9ucy5jYworKysrIGIvZ29sZC9vcHRpb25zLmNjCitAQCAtMTIwMCwxMyArMTIwMCw2IEBAIEdlbmVyYWxfb3B0aW9uczo6ZmluYWxpemUoKQorICAgLy8gaW4gdGhlIHBhdGgsIGFzIGFwcHJvcHJpYXRlLgorICAgdGhpcy0+YWRkX3N5c3Jvb3QoKTsKKyAKKy0gIC8vIC0tZHluYW1pYy1saXN0IG92ZXJyaWRlcyAtQnN5bWJvbGljIGFuZCAtQnN5bWJvbGljLWZ1bmN0aW9ucy4KKy0gIGlmICh0aGlzLT5oYXZlX2R5bmFtaWNfbGlzdCgpKQorLSAgICB7CistICAgICAgdGhpcy0+c2V0X0JzeW1ib2xpYyhmYWxzZSk7CistICAgICAgdGhpcy0+c2V0X0JzeW1ib2xpY19mdW5jdGlvbnMoZmFsc2UpOworLSAgICB9CistCisgICAvLyBOb3cgdGhhdCB3ZSd2ZSBub3JtYWxpemVkIHRoZSBvcHRpb25zLCBjaGVjayBmb3IgY29udHJhZGljdG9yeSBvbmVzLgorICAgaWYgKHRoaXMtPnNoYXJlZCgpICYmIHRoaXMtPmlzX3N0YXRpYygpKQorICAgICBnb2xkX2ZhdGFsKF8oIi1zaGFyZWQgYW5kIC1zdGF0aWMgYXJlIGluY29tcGF0aWJsZSIpKTsKK2RpZmYgLS1naXQgYS9nb2xkL3N5bXRhYi5oIGIvZ29sZC9zeW10YWIuaAoraW5kZXggYWEwY2I2OC4uOTQxMzM2MCAxMDA2NDQKKy0tLSBhL2dvbGQvc3ltdGFiLmgKKysrKyBiL2dvbGQvc3ltdGFiLmgKK0BAIC02MDQsMTAgKzYwNCw4IEBAIGNsYXNzIFN5bWJvbAorICAgICBpZiAocGFyYW1ldGVycy0+b3B0aW9ucygpLmluX2R5bmFtaWNfbGlzdCh0aGlzLT5uYW1lKCkpKQorICAgICAgIHJldHVybiB0cnVlOworIAorLSAgICAvLyBJZiB0aGUgdXNlciB1c2VkIC1Cc3ltYm9saWMgb3IgcHJvdmlkZWQgYSAtLWR5bmFtaWMtbGlzdCBzY3JpcHQsCistICAgIC8vIHRoZW4gbm90aGluZyAoZWxzZSkgaXMgcHJlZW1wdGlibGUuCistICAgIGlmIChwYXJhbWV0ZXJzLT5vcHRpb25zKCkuQnN5bWJvbGljKCkKKy0gICAgICAgIHx8IHBhcmFtZXRlcnMtPm9wdGlvbnMoKS5oYXZlX2R5bmFtaWNfbGlzdCgpKQorKyAgICAvLyBJZiB0aGUgdXNlciB1c2VkIC1Cc3ltYm9saWMsIHRoZW4gbm90aGluZyAoZWxzZSkgaXMgcHJlZW1wdGlibGUuCisrICAgIGlmIChwYXJhbWV0ZXJzLT5vcHRpb25zKCkuQnN5bWJvbGljKCkpCisgICAgICAgcmV0dXJuIGZhbHNlOworIAorICAgICAvLyBJZiB0aGUgdXNlciB1c2VkIC1Cc3ltYm9saWMtZnVuY3Rpb25zLCB0aGVuIGZ1bmN0aW9ucyBhcmUgbm90CitkaWZmIC0tZ2l0IGEvZ29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuYW0gYi9nb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbQoraW5kZXggZjc2N2MyMS4uN2I3M2Y5ZCAxMDA2NDQKKy0tLSBhL2dvbGQvdGVzdHN1aXRlL01ha2VmaWxlLmFtCisrKysgYi9nb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbQorQEAgLTE1MTgsNyArMTUxOCw3IEBAIGR5bmFtaWNfbGlzdF9saWIxLm86IGR5bmFtaWNfbGlzdF9saWIxLmNjCisgCSQoQ1hYQ09NUElMRSkgLWMgLWZwaWMgLW8gJEAgJDwKKyAKKyBkeW5hbWljX2xpc3RfbGliMi5zbzogZ2NjdGVzdGRpci9sZCBkeW5hbWljX2xpc3RfbGliMi5vICQoc3JjZGlyKS9keW5hbWljX2xpc3RfMi50CistCSQoQ1hYTElOSykgLUJnY2N0ZXN0ZGlyLyAtc2hhcmVkIC1XbCwtLWR5bmFtaWMtbGlzdCwkKHNyY2RpcikvZHluYW1pY19saXN0XzIudCBkeW5hbWljX2xpc3RfbGliMi5vCisrCSQoQ1hYTElOSykgLUJnY2N0ZXN0ZGlyLyAtc2hhcmVkIC1XbCwtQnN5bWJvbGljLWZ1bmN0aW9ucyAtV2wsLS1keW5hbWljLWxpc3QsJChzcmNkaXIpL2R5bmFtaWNfbGlzdF8yLnQgZHluYW1pY19saXN0X2xpYjIubworIGR5bmFtaWNfbGlzdF9saWIyLm86IGR5bmFtaWNfbGlzdF9saWIyLmNjCisgCSQoQ1hYQ09NUElMRSkgLWMgLWZwaWMgLW8gJEAgJDwKKyAKK2RpZmYgLS1naXQgYS9nb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbiBiL2dvbGQvdGVzdHN1aXRlL01ha2VmaWxlLmluCitpbmRleCAyMTdlNDcyLi5iNGFlM2ZkIDEwMDY0NAorLS0tIGEvZ29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuaW4KKysrKyBiL2dvbGQvdGVzdHN1aXRlL01ha2VmaWxlLmluCitAQCAtNTMxOSw3ICs1MzE5LDcgQEAgdW5pbnN0YWxsLWFtOgorIEBHQ0NfVFJVRUBATkFUSVZFX0xJTktFUl9UUlVFQAkkKENYWENPTVBJTEUpIC1jIC1mcGljIC1vICRAICQ8CisgCisgQEdDQ19UUlVFQEBOQVRJVkVfTElOS0VSX1RSVUVAZHluYW1pY19saXN0X2xpYjIuc286IGdjY3Rlc3RkaXIvbGQgZHluYW1pY19saXN0X2xpYjIubyAkKHNyY2RpcikvZHluYW1pY19saXN0XzIudAorLUBHQ0NfVFJVRUBATkFUSVZFX0xJTktFUl9UUlVFQAkkKENYWExJTkspIC1CZ2NjdGVzdGRpci8gLXNoYXJlZCAtV2wsLS1keW5hbWljLWxpc3QsJChzcmNkaXIpL2R5bmFtaWNfbGlzdF8yLnQgZHluYW1pY19saXN0X2xpYjIubworK0BHQ0NfVFJVRUBATkFUSVZFX0xJTktFUl9UUlVFQAkkKENYWExJTkspIC1CZ2NjdGVzdGRpci8gLXNoYXJlZCAtV2wsLUJzeW1ib2xpYy1mdW5jdGlvbnMgLVdsLC0tZHluYW1pYy1saXN0LCQoc3JjZGlyKS9keW5hbWljX2xpc3RfMi50IGR5bmFtaWNfbGlzdF9saWIyLm8KKyBAR0NDX1RSVUVAQE5BVElWRV9MSU5LRVJfVFJVRUBkeW5hbWljX2xpc3RfbGliMi5vOiBkeW5hbWljX2xpc3RfbGliMi5jYworIEBHQ0NfVFJVRUBATkFUSVZFX0xJTktFUl9UUlVFQAkkKENYWENPTVBJTEUpIC1jIC1mcGljIC1vICRAICQ8CisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL2FkZC10aHVuZGVyeC1zdXBwb3J0LWZvci1nYXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9hZGQtdGh1bmRlcngtc3VwcG9ydC1mb3ItZ2FzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNjg3NWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9hZGQtdGh1bmRlcngtc3VwcG9ydC1mb3ItZ2FzLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0FkZCB0aHVuZGVyeCBzdXBwb3J0IHRvIGdhcworCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9tbC9iaW51dGlscy8yMDE0LTEwL21zZzAwMTcwLmh0bWxdCisKK1NpZ25lZC1vZmYtYnk6IEphZ2FkZWVzaCBLcmlzaG5hbmphbmFwcGEgPGprcmlzaG5hbmphbmFwcGFAbXZpc3RhLmNvbT4KKworQXV0aG9yOiBBbmRyZXcgUGluc2tpIDxhcGluc2tpQGNhdml1bS5jb20+CitEYXRlOiBNb24sIDIwIE9jdCAyMDE0IDExOjQyOjU4IC0wNzAwCisKKyAgICBUaGlzIHBhdGNoIGFkZHMgLW1jcHU9dGh1bmRlcnggc3VwcG9ydCB0byBnYXMuCisKK2RpZmYgLU5hdXJwIGdpdF9vcmcvZ2FzL2NvbmZpZy90Yy1hYXJjaDY0LmMgZ2l0L2dhcy9jb25maWcvdGMtYWFyY2g2NC5jCistLS0gZ2l0X29yZy9nYXMvY29uZmlnL3RjLWFhcmNoNjQuYwkyMDE1LTA5LTA3IDAyOjEzOjUxLjk4ODk3MzUyMyAtMDcwMAorKysrIGdpdC9nYXMvY29uZmlnL3RjLWFhcmNoNjQuYwkyMDE1LTA5LTA3IDAyOjE1OjIxLjcwNTk4MTU0MCAtMDcwMAorQEAgLTcyMDYsNiArNzIwNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWFyY2g2NF9jcHVfb3B0aW9uX3QKKyAJCQkJIEFBUkNINjRfRkVBVFVSRV9DUkMpLCAiQ29ydGV4LUE1NyJ9LAorICAgeyJjb3J0ZXgtYTcyIiwgQUFSQ0g2NF9GRUFUVVJFIChBQVJDSDY0X0FSQ0hfVjgsCisgCQkJCSAgQUFSQ0g2NF9GRUFUVVJFX0NSQyksICJDb3J0ZXgtQTcyIn0sCisrICB7InRodW5kZXJ4IiwJCUFBUkNINjRfQVJDSF9WOCwgIkNhdml1bSBUaHVuZGVyWCJ9LAkJCQkgIAorICAgeyJleHlub3MtbTEiLCBBQVJDSDY0X0ZFQVRVUkUgKEFBUkNINjRfQVJDSF9WOCwKKyAJCQkJIEFBUkNINjRfRkVBVFVSRV9DUkMgfCBBQVJDSDY0X0ZFQVRVUkVfQ1JZUFRPKSwKKyAJCQkJICJTYW1zdW5nIEV4eW5vcyBNMSJ9LAorZGlmZiAtTmF1cnAgZ2l0X29yZy9nYXMvZG9jL2MtYWFyY2g2NC50ZXhpIGdpdC9nYXMvZG9jL2MtYWFyY2g2NC50ZXhpCistLS0gZ2l0X29yZy9nYXMvZG9jL2MtYWFyY2g2NC50ZXhpCTIwMTUtMDktMDcgMDI6MTM6NTEuOTY5OTczNTIyIC0wNzAwCisrKysgZ2l0L2dhcy9kb2MvYy1hYXJjaDY0LnRleGkJMjAxNS0wOS0wNyAwMjoxNjowMy4zNjQ5ODUyNjIgLTA3MDAKK0BAIC01OCw2ICs1OCw3IEBAIG9uIHRoZSB0YXJnZXQgcHJvY2Vzc29yLiAgVGhlIGZvbGxvd2luZworIEBjb2Rle2NvcnRleC1hNTN9LAorIEBjb2Rle2NvcnRleC1hNTd9LAorIEBjb2Rle2NvcnRleC1hNzJ9LAorK0Bjb2Rle3RodW5kZXJ4fSwKKyBAY29kZXtleHlub3MtbTF9LAorIEBjb2Rle3hnZW5lMX0sCisgYW5kCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9iaW51dGlscy1vY3Rlb24zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvYmludXRpbHMtb2N0ZW9uMy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTA4YzBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvYmludXRpbHMtb2N0ZW9uMy5wYXRjaApAQCAtMCwwICsxLDI3MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitodHRwczovL3NvdXJjZXdhcmUub3JnL2dpdC9naXR3ZWIuY2dpP3A9YmludXRpbHMtZ2RiLmdpdDthPWNvbW1pdDtoPTJjNjI5ODU2NTlkYTIxYTNmZTE2MDYyZDIxMWE3MTU4Zjc5YWQyZTkKKworU2lnbmVkLW9mZi1CeTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+CisKK0luZGV4OiBnaXQvYmZkL2FyY2h1cmVzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9iZmQvYXJjaHVyZXMuYworKysrIGdpdC9iZmQvYXJjaHVyZXMuYworQEAgLTE3OSw2ICsxNzksNyBAQCBERVNDUklQVElPTgorIC4jZGVmaW5lIGJmZF9tYWNoX21pcHNfb2N0ZW9uCQk2NTAxCisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb25wCQk2NjAxCisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb24yCQk2NTAyCisrLiNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb24zCQk2NTAzCisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc194bHIgICAgICAgICAgICAgIDg4NzY4MiAgIHsqIGRlY2ltYWwgJ1hMUicgICp9CisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc194bHAgICAgICAgICAgICAgIDg4NzY4MCAgIHsqIGRlY2ltYWwgJ1hMUCcgICp9CisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTMyICAgICAgICAgICAgIDMyCitJbmRleDogZ2l0L2JmZC9iZmQtaW4yLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9iZmQvYmZkLWluMi5oCisrKysgZ2l0L2JmZC9iZmQtaW4yLmgKK0BAIC0xOTY5LDYgKzE5NjksNyBAQCBlbnVtIGJmZF9hcmNoaXRlY3R1cmUKKyAjZGVmaW5lIGJmZF9tYWNoX21pcHNfb2N0ZW9uICAgICAgICAgICA2NTAxCisgI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbnAgICAgICAgICAgNjYwMQorICNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb24yICAgICAgICAgIDY1MDIKKysjZGVmaW5lIGJmZF9tYWNoX21pcHNfb2N0ZW9uMyAgICAgICAgICA2NTAzCisgI2RlZmluZSBiZmRfbWFjaF9taXBzX3hsciAgICAgICAgICAgICAgODg3NjgyICAgLyogZGVjaW1hbCAnWExSJyAgKi8KKyAjZGVmaW5lIGJmZF9tYWNoX21pcHNfeGxwICAgICAgICAgICAgICA4ODc2ODAgICAvKiBkZWNpbWFsICdYTFAnICAqLworICNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTMyICAgICAgICAgICAgIDMyCitJbmRleDogZ2l0L2JmZC9jcHUtbWlwcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvYmZkL2NwdS1taXBzLmMKKysrKyBnaXQvYmZkL2NwdS1taXBzLmMKK0BAIC0xMDIsNiArMTAyLDcgQEAgZW51bQorICAgSV9taXBzb2N0ZW9uLAorICAgSV9taXBzb2N0ZW9ucCwKKyAgIElfbWlwc29jdGVvbjIsCisrICBJX21pcHNvY3Rlb24zLAorICAgSV94bHIsCisgICBJX21pY3JvbWlwcywKKyAgIElfeGxwCitAQCAtMTUzLDYgKzE1NCw3IEBAIHN0YXRpYyBjb25zdCBiZmRfYXJjaF9pbmZvX3R5cGUgYXJjaF9pbmYKKyAgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc19vY3Rlb24sIm1pcHM6b2N0ZW9uIiwgIEZBTFNFLCBOTihJX21pcHNvY3Rlb24pKSwKKyAgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc19vY3Rlb25wLCJtaXBzOm9jdGVvbisiLCAgRkFMU0UsIE5OKElfbWlwc29jdGVvbnApKSwKKyAgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc19vY3Rlb24yLCJtaXBzOm9jdGVvbjIiLCAgRkFMU0UsIE5OKElfbWlwc29jdGVvbjIpKSwKKysgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc19vY3Rlb24zLCJtaXBzOm9jdGVvbjMiLCAgRkFMU0UsIE5OKElfbWlwc29jdGVvbjMpKSwKKyAgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc194bHIsICJtaXBzOnhsciIsICAgICAgIEZBTFNFLCBOTihJX3hscikpLAorICAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX21pY3JvbWlwcywibWlwczptaWNyb21pcHMiLEZBTFNFLE5OKElfbWljcm9taXBzKSksCisgICBOICg2NCwgNjQsIGJmZF9tYWNoX21pcHNfeGxwLCAibWlwczp4bHAiLCAgICAgIEZBTFNFLCAwKQorSW5kZXg6IGdpdC9iZmQvZWxmeHgtbWlwcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvYmZkL2VsZnh4LW1pcHMuYworKysrIGdpdC9iZmQvZWxmeHgtbWlwcy5jCitAQCAtNjYwNCw2ICs2NjA0LDkgQEAgX2JmZF9lbGZfbWlwc19tYWNoIChmbGFnd29yZCBmbGFncykKKyAgICAgY2FzZSBFX01JUFNfTUFDSF9MUzNBOgorICAgICAgIHJldHVybiBiZmRfbWFjaF9taXBzX2xvb25nc29uXzNhOworIAorKyAgICBjYXNlIEVfTUlQU19NQUNIX09DVEVPTjM6CisrICAgICAgcmV0dXJuIGJmZF9tYWNoX21pcHNfb2N0ZW9uMzsKKysKKyAgICAgY2FzZSBFX01JUFNfTUFDSF9PQ1RFT04yOgorICAgICAgIHJldHVybiBiZmRfbWFjaF9taXBzX29jdGVvbjI7CisgCitAQCAtMTE4NzgsNiArMTE4ODEsMTAgQEAgbWlwc19zZXRfaXNhX2ZsYWdzIChiZmQgKmFiZmQpCisgICAgICAgdmFsID0gRV9NSVBTX0FSQ0hfNjRSMiB8IEVfTUlQU19NQUNIX09DVEVPTjsKKyAgICAgICBicmVhazsKKyAKKysgICAgY2FzZSBiZmRfbWFjaF9taXBzX29jdGVvbjM6CisrICAgICAgdmFsID0gRV9NSVBTX0FSQ0hfNjRSMiB8IEVfTUlQU19NQUNIX09DVEVPTjM7CisrICAgICAgYnJlYWs7CisrCisgICAgIGNhc2UgYmZkX21hY2hfbWlwc194bHI6CisgICAgICAgdmFsID0gRV9NSVBTX0FSQ0hfNjQgfCBFX01JUFNfTUFDSF9YTFI7CisgICAgICAgYnJlYWs7CitAQCAtMTQ3NzMsNiArMTQ3ODAsNyBAQCBzdHJ1Y3QgbWlwc19tYWNoX2V4dGVuc2lvbgorIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWlwc19tYWNoX2V4dGVuc2lvbiBtaXBzX21hY2hfZXh0ZW5zaW9uc1tdID0KKyB7CisgICAvKiBNSVBTNjRyMiBleHRlbnNpb25zLiAgKi8KKysgIHsgYmZkX21hY2hfbWlwc19vY3Rlb24zLCBiZmRfbWFjaF9taXBzX29jdGVvbjIgfSwKKyAgIHsgYmZkX21hY2hfbWlwc19vY3Rlb24yLCBiZmRfbWFjaF9taXBzX29jdGVvbnAgfSwKKyAgIHsgYmZkX21hY2hfbWlwc19vY3Rlb25wLCBiZmRfbWFjaF9taXBzX29jdGVvbiB9LAorICAgeyBiZmRfbWFjaF9taXBzX29jdGVvbiwgYmZkX21hY2hfbWlwc2lzYTY0cjIgfSwKK0luZGV4OiBnaXQvZ2FzL2NvbmZpZy90Yy1taXBzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9nYXMvY29uZmlnL3RjLW1pcHMuYworKysrIGdpdC9nYXMvY29uZmlnL3RjLW1pcHMuYworQEAgLTMwNiw3ICszMDYsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZpbGVfYXNlX2V4cGxpY2l0OworIHVuc2lnbmVkIGxvbmcgbWlwc19ncHJtYXNrOworIHVuc2lnbmVkIGxvbmcgbWlwc19jcHJtYXNrWzRdOworIAorLS8qIFRydWUgaWYgYW55IE1JUFMxNiBjb2RlIHdhcyBwcm9kdWNlZC4gICovCisrLyogMlRydWUgaWYgYW55IE1JUFMxNiBjb2RlIHdhcyBwcm9kdWNlZC4gICovCisgc3RhdGljIGludCBmaWxlX2FzZV9taXBzMTY7CisgCisgI2RlZmluZSBJU0FfU1VQUE9SVFNfTUlQUzE2RSAobWlwc19vcHRzLmlzYSA9PSBJU0FfTUlQUzMyCQlcCitAQCAtNTEwLDcgKzUxMCw4IEBAIHN0YXRpYyBpbnQgbWlwc18zMmJpdG1vZGUgPSAwOworICNkZWZpbmUgQ1BVX0hBU19ST1IoQ1BVKQlDUFVfSEFTX0RST1IgKENQVSkKKyAKKyAvKiBUcnVlIGlmIENQVSBpcyBpbiB0aGUgT2N0ZW9uIGZhbWlseSAqLworLSNkZWZpbmUgQ1BVX0lTX09DVEVPTihDUFUpICgoQ1BVKSA9PSBDUFVfT0NURU9OIHx8IChDUFUpID09IENQVV9PQ1RFT05QIHx8IChDUFUpID09IENQVV9PQ1RFT04yKQorKyNkZWZpbmUgQ1BVX0lTX09DVEVPTihDUFUpICgoQ1BVKSA9PSBDUFVfT0NURU9OIHx8IChDUFUpID09IENQVV9PQ1RFT05QIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoQ1BVKSA9PSBDUFVfT0NURU9OMiB8fCAoQ1BVKSA9PSBDUFVfT0NURU9OMykKKyAKKyAvKiBUcnVlIGlmIENQVSBoYXMgc2VxL3NuZSBhbmQgc2VxaS9zbmVpIGluc3RydWN0aW9ucy4gICovCisgI2RlZmluZSBDUFVfSEFTX1NFUShDUFUpCShDUFVfSVNfT0NURU9OIChDUFUpKQorQEAgLTE4Njc3LDYgKzE4Njc4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtaXBzX2NwdV9pbmZvIG1pcHNfYworICAgeyAib2N0ZW9uIiwJICAgICAgMCwgMCwJCQlJU0FfTUlQUzY0UjIsIENQVV9PQ1RFT04gfSwKKyAgIHsgIm9jdGVvbisiLAkgICAgICAwLCAwLAkJCUlTQV9NSVBTNjRSMiwgQ1BVX09DVEVPTlAgfSwKKyAgIHsgIm9jdGVvbjIiLAkgICAgICAwLCAwLAkJCUlTQV9NSVBTNjRSMiwgQ1BVX09DVEVPTjIgfSwKKysgIHsgIm9jdGVvbjMiLCAgICAgICAgMCwgQVNFX1ZJUlQgfCBBU0VfVklSVDY0LCBJU0FfTUlQUzY0UjIsIENQVV9PQ1RFT04zIH0sCisgCisgICAvKiBSTUkgWGxyICovCisgICB7ICJ4bHIiLAkgICAgICAwLCAwLAkJCUlTQV9NSVBTNjQsICAgQ1BVX1hMUiB9LAorSW5kZXg6IGdpdC9nYXMvZG9jL2MtbWlwcy50ZXhpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvZ2FzL2RvYy9jLW1pcHMudGV4aQorKysrIGdpdC9nYXMvZG9jL2MtbWlwcy50ZXhpCitAQCAtMzgyLDYgKzM4Miw3IEBAIGxvb25nc29uM2EsCisgb2N0ZW9uLAorIG9jdGVvbissCisgb2N0ZW9uMiwKKytvY3Rlb24zLAorIHhsciwKKyB4bHAKKyBAZW5kIHF1b3RhdGlvbgorSW5kZXg6IGdpdC9nYXMvdGVzdHN1aXRlL2dhcy9taXBzL21pcHMuZXhwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvZ2FzL3Rlc3RzdWl0ZS9nYXMvbWlwcy9taXBzLmV4cAorKysrIGdpdC9nYXMvdGVzdHN1aXRlL2dhcy9taXBzL21pcHMuZXhwCitAQCAtMTEwMiw2ICsxMTAyLDcgQEAgaWYgeyBbaXN0YXJnZXQgbWlwcyotKi12eHdvcmtzKl0gfSB7CisgICAgIHJ1bl9saXN0X3Rlc3RfYXJjaGVzICJvY3Rlb24taWxsIglbbWlwc19hcmNoX2xpc3RfbWF0Y2hpbmcgb2N0ZW9uXQorICAgICBydW5fZHVtcF90ZXN0X2FyY2hlcyAib2N0ZW9uLXByZWYiCVttaXBzX2FyY2hfbGlzdF9tYXRjaGluZyBvY3Rlb25dCisgICAgIHJ1bl9kdW1wX3Rlc3RfYXJjaGVzICJvY3Rlb24yIglbbWlwc19hcmNoX2xpc3RfbWF0Y2hpbmcgb2N0ZW9uMl0KKysgICAgcnVuX2R1bXBfdGVzdF9hcmNoZXMgIm9jdGVvbjMiCVttaXBzX2FyY2hfbGlzdF9tYXRjaGluZyBvY3Rlb24zXQorIAorICAgICBydW5fZHVtcF90ZXN0ICJzbWFydG1pcHMiCisgICAgIHJ1bl9kdW1wX3Rlc3RfYXJjaGVzICJtaXBzMzItZHNwIglbbWlwc19hcmNoX2xpc3RfbWF0Y2hpbmcgbWlwczMycjIgXAorSW5kZXg6IGdpdC9nYXMvdGVzdHN1aXRlL2dhcy9taXBzL29jdGVvbjMuZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGdpdC9nYXMvdGVzdHN1aXRlL2dhcy9taXBzL29jdGVvbjMuZAorQEAgLTAsMCArMSwyMCBAQAorKyNvYmpkdW1wOiAtZCAtciAtLXNob3ctcmF3LWluc24KKysjbmFtZTogTUlQUyBvY3Rlb24zIGluc3RydWN0aW9ucworKworKy4qOiArZmlsZSBmb3JtYXQgLiptaXBzLioKKysKKytEaXNhc3NlbWJseSBvZiBzZWN0aW9uIC50ZXh0OgorKworK1swLTlhLWZdKyA8Zm9vPjoKKysuKjogICAgNzFlYzAwMDggICAgICAgIG10bTAgICAgdDMsdDAKKysuKjogICAgNzFhNDAwMDggICAgICAgIG10bTAgICAgdDEsYTAKKysuKjogICAgNzA4MzAwMGMgICAgICAgIG10bTEgICAgYTAsdjEKKysuKjogICAgNzBlMTAwMGMgICAgICAgIG10bTEgICAgYTMsYXQKKysuKjogICAgNzAyMjAwMGQgICAgICAgIG10bTIgICAgYXQsdjAKKysuKjogICAgNzA4MzAwMGMgICAgICAgIG10bTEgICAgYTAsdjEKKysuKjogICAgNzBhMjAwMDkgICAgICAgIG10cDAgICAgYTEsdjAKKysuKjogICAgNzBjNDAwMDkgICAgICAgIG10cDAgICAgYTIsYTAKKysuKjogICAgNzA4MzAwMGEgICAgICAgIG10cDEgICAgYTAsdjEKKysuKjogICAgNzBlMTAwMGEgICAgICAgIG10cDEgICAgYTMsYXQKKysuKjogICAgNzAyMjAwMGIgICAgICAgIG10cDIgICAgYXQsdjAKKysuKjogICAgNzA4MzAwMGEgICAgICAgIG10cDEgICAgYTAsdjEKK0luZGV4OiBnaXQvZ2FzL3Rlc3RzdWl0ZS9nYXMvbWlwcy9vY3Rlb24zLnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBnaXQvZ2FzL3Rlc3RzdWl0ZS9nYXMvbWlwcy9vY3Rlb24zLnMKK0BAIC0wLDAgKzEsMjIgQEAKKysrICAgICAgIC50ZXh0CisrICAgICAgIC5zZXQgbm9yZW9yZGVyCisrICAgICAgIC5zZXQgbm9hdAorKworK2ZvbzoKKysgICAgICAgIG10bTAgJDE1LCQxMgorKyAgICAgICAgbXRtMCAkMTMsJDQKKysKKysgICAgICAgIG10bTEgJDQsJDMKKysgICAgICAgIG10bTEgJDcsJDEKKysKKysgICAgICAgIG10bTIgJDEsJDIKKysgICAgICAgIG10bTEgJDQsJDMKKysKKysgICAgICAgIG10cDAgJDUsJDIKKysgICAgICAgIG10cDAgJDYsJDQKKysKKysgICAgICAgIG10cDEgJDQsJDMKKysgICAgICAgIG10cDEgJDcsJDEKKysKKysgICAgICAgIG10cDIgJDEsJDIKKysgICAgICAgIG10cDEgJDQsJDMKK0luZGV4OiBnaXQvaW5jbHVkZS9vcGNvZGUvbWlwcy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvaW5jbHVkZS9vcGNvZGUvbWlwcy5oCisrKysgZ2l0L2luY2x1ZGUvb3Bjb2RlL21pcHMuaAorQEAgLTExOTYsNiArMTE5Niw3IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWlwc19pc2FfdGFibGUKKyAjZGVmaW5lIElOU05fT0NURU9OCQkgIDB4MDAwMDA4MDAKKyAjZGVmaW5lIElOU05fT0NURU9OUAkJICAweDAwMDAwMjAwCisgI2RlZmluZSBJTlNOX09DVEVPTjIJCSAgMHgwMDAwMDEwMAorKyNkZWZpbmUgSU5TTl9PQ1RFT04zCQkgIDB4MDAwMDAwNDAKKyAKKyAvKiBNSVBTIFI1OTAwIGluc3RydWN0aW9uICovCisgI2RlZmluZSBJTlNOXzU5MDAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKK0BAIC0xMzI1LDYgKzEzMjYsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1pcHNfaXNhX3RhYmxlCisgI2RlZmluZSBDUFVfT0NURU9OCTY1MDEKKyAjZGVmaW5lIENQVV9PQ1RFT05QCTY2MDEKKyAjZGVmaW5lIENQVV9PQ1RFT04yCTY1MDIKKysjZGVmaW5lIENQVV9PQ1RFT04zCTY1MDMKKyAjZGVmaW5lIENQVV9YTFIgICAgIAk4ODc2ODIgICAJLyogZGVjaW1hbCAnWExSJyAgICovCisgI2RlZmluZSBDUFVfWExQICAgICAgICAgODg3NjgwICAgICAgLyogZGVjaW1hbCAnWExQJyAgICovCisgCitAQCAtMTM5MSw2ICsxMzkzLDkgQEAgY3B1X2lzX21lbWJlciAoaW50IGNwdSwgdW5zaWduZWQgaW50IG1hcworICAgICBjYXNlIENQVV9PQ1RFT04yOgorICAgICAgIHJldHVybiAobWFzayAmIElOU05fT0NURU9OMikgIT0gMDsKKyAKKysgICAgY2FzZSBDUFVfT0NURU9OMzoKKysgICAgICByZXR1cm4gKG1hc2sgJiBJTlNOX09DVEVPTjMpICE9IDA7CisrCisgICAgIGNhc2UgQ1BVX1hMUjoKKyAgICAgICByZXR1cm4gKG1hc2sgJiBJTlNOX1hMUikgIT0gMDsKKyAKK0luZGV4OiBnaXQvb3Bjb2Rlcy9taXBzLWRpcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvb3Bjb2Rlcy9taXBzLWRpcy5jCisrKysgZ2l0L29wY29kZXMvbWlwcy1kaXMuYworQEAgLTY0OSw2ICs2NDksMTEgQEAgY29uc3Qgc3RydWN0IG1pcHNfYXJjaF9jaG9pY2UgbWlwc19hcmNoXworICAgICBJU0FfTUlQUzY0UjIgfCBJTlNOX09DVEVPTjIsIDAsIG1pcHNfY3AwX25hbWVzX251bWVyaWMsCisgICAgIE5VTEwsIDAsIG1pcHNfY3AxX25hbWVzX21pcHMzMjY0LCBtaXBzX2h3cl9uYW1lc19udW1lcmljIH0sCisgCisrICB7ICJvY3Rlb24zIiwgICAxLCBiZmRfbWFjaF9taXBzX29jdGVvbjMsIENQVV9PQ1RFT04zLAorKyAgICBJU0FfTUlQUzY0UjIgfCBJTlNOX09DVEVPTjMsIEFTRV9WSVJUIHwgQVNFX1ZJUlQ2NCwKKysgICAgbWlwc19jcDBfbmFtZXNfbnVtZXJpYywKKysgICAgTlVMTCwgMCwgbWlwc19od3JfbmFtZXNfbnVtZXJpYyB9LAorKworICAgeyAieGxyIiwgMSwgYmZkX21hY2hfbWlwc194bHIsIENQVV9YTFIsCisgICAgIElTQV9NSVBTNjQgfCBJTlNOX1hMUiwgMCwKKyAgICAgbWlwc19jcDBfbmFtZXNfeGxyLAorSW5kZXg6IGdpdC9vcGNvZGVzL21pcHMtb3BjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9vcGNvZGVzL21pcHMtb3BjLmMKKysrKyBnaXQvb3Bjb2Rlcy9taXBzLW9wYy5jCitAQCAtMzE2LDkgKzMxNiwxMCBAQCBkZWNvZGVfbWlwc19vcGVyYW5kIChjb25zdCBjaGFyICpwKQorICNkZWZpbmUgTjUJKElOU05fNTQwMCB8IElOU05fNTUwMCkKKyAjZGVmaW5lIE41NAlJTlNOXzU0MDAKKyAjZGVmaW5lIE41NQlJTlNOXzU1MDAKKy0jZGVmaW5lIElPQ1QJKElOU05fT0NURU9OIHwgSU5TTl9PQ1RFT05QIHwgSU5TTl9PQ1RFT04yKQorLSNkZWZpbmUgSU9DVFAJKElOU05fT0NURU9OUCB8IElOU05fT0NURU9OMikKKy0jZGVmaW5lIElPQ1QyCUlOU05fT0NURU9OMgorKyNkZWZpbmUgSU9DVAkoSU5TTl9PQ1RFT04gfCBJTlNOX09DVEVPTlAgfCBJTlNOX09DVEVPTjIgfCBJTlNOX09DVEVPTjMpCisrI2RlZmluZSBJT0NUUAkoSU5TTl9PQ1RFT05QIHwgSU5TTl9PQ1RFT04yIHwgSU5TTl9PQ1RFT04zKQorKyNkZWZpbmUgSU9DVDIJKElOU05fT0NURU9OMiB8IElOU05fT0NURU9OMykKKysjZGVmaW5lIElPQ1QzICBJTlNOX09DVEVPTjMKKyAjZGVmaW5lIFhMUglJTlNOX1hMUgorICNkZWZpbmUgWExQCUlOU05fWExQCisgI2RlZmluZSBJVklSVAlBU0VfVklSVAorQEAgLTE1MDUsMTEgKzE1MDYsMTcgQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcAorIHsibXRsaHgiLAkJInMiLAkJMHgwMDAwMDA1MywgMHhmYzFmZmZmZiwJUkRfMXxNT0RfSElMTywJCTAsCQkwLAkJU01ULAkwIH0sCisgeyJtdGNyIiwJCSJ0LHMiLAkJMHg3MDAwMDAxOSwgMHhmYzAwZmZmZiwgUkRfMSwJCQkwLAkJWExSfFhMUCwJMCwJMCB9LAorIHsibXRtMCIsCQkicyIsCQkweDcwMDAwMDA4LCAweGZjMWZmZmZmLCBSRF8xLAkJCTAsCQlJT0NULAkJMCwJMCB9LAorK3sibXRtMCIsICAgICAgICAgICAgICAgICJzLHQiLCAgICAgICAgICAweDcwMDAwMDA4LCAweGZjMDBmZmZmLCBSRF8xfFJEXzIsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgSU9DVDMsICAgICAgICAgIDAsICAgICAgMCB9LAorIHsibXRtMSIsCQkicyIsCQkweDcwMDAwMDBjLCAweGZjMWZmZmZmLCBSRF8xLAkJCTAsCQlJT0NULAkJMCwJMCB9LAorK3sibXRtMSIsICAgICAgICAgICAgICAgICJzLHQiLCAgICAgICAgICAweDcwMDAwMDBjLCAweGZjMDBmZmZmLCBSRF8xfFJEXzIsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgSU9DVDMsICAgICAgICAgIDAsICAgICAgMCB9LAorIHsibXRtMiIsCQkicyIsCQkweDcwMDAwMDBkLCAweGZjMWZmZmZmLCBSRF8xLAkJCTAsCQlJT0NULAkJMCwJMCB9LAorK3sibXRtMiIsICAgICAgICAgICAgICAgICJzLHQiLCAgICAgICAgICAweDcwMDAwMDBkLCAweGZjMDBmZmZmLCBSRF8xfFJEXzIsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgSU9DVDMsICAgICAgICAgIDAsICAgICAgMCB9LAorIHsibXRwMCIsCQkicyIsCQkweDcwMDAwMDA5LCAweGZjMWZmZmZmLCBSRF8xLAkJCTAsCQlJT0NULAkJMCwJMCB9LAorK3sibXRwMCIsICAgICAgICAgICAgICAgICJzLHQiLCAgICAgICAgICAweDcwMDAwMDA5LCAweGZjMDBmZmZmLCBSRF8xfFJEXzIsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgSU9DVDMsICAgICAgICAgIDAsICAgICAgMCB9LAorIHsibXRwMSIsCQkicyIsCQkweDcwMDAwMDBhLCAweGZjMWZmZmZmLCBSRF8xLAkJCTAsCQlJT0NULAkJMCwJMCB9LAorK3sibXRwMSIsICAgICAgICAgICAgICAgICJzLHQiLCAgICAgICAgICAweDcwMDAwMDBhLCAweGZjMDBmZmZmLCBSRF8xfFJEXzIsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgSU9DVDMsICAgICAgICAgIDAsICAgICAgMCB9LAorIHsibXRwMiIsCQkicyIsCQkweDcwMDAwMDBiLCAweGZjMWZmZmZmLCBSRF8xLAkJCTAsCQlJT0NULAkJMCwJMCB9LAorK3sibXRwMiIsICAgICAgICAgICAgICAgICJzLHQiLCAgICAgICAgICAweDcwMDAwMDBiLCAweGZjMDBmZmZmLCBSRF8xfFJEXzIsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgSU9DVDMsICAgICAgICAgIDAsICAgICAgMCB9LAorIHsibXRzYSIsCQkicyIsCQkweDAwMDAwMDI5LCAweGZjMWZmZmZmLAlSRF8xLAkJCTAsCQlFRSwJCTAsCTAgfSwKKyB7Im10c2FiIiwJCSJzLGoiLAkJMHgwNDE4MDAwMCwgMHhmYzFmMDAwMCwJUkRfMSwJCQkwLAkJRUUsCQkwLAkwIH0sCisgeyJtdHNhaCIsCQkicyxqIiwJCTB4MDQxOTAwMDAsIDB4ZmMxZjAwMDAsCVJEXzEsCQkJMCwJCUVFLAkJMCwJMCB9LApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHNfMi4yNS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHNfMi4yNS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNDI2NzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlsc18yLjI1LjEuYmIKQEAgLTAsMCArMSwzOSBAQAorcmVxdWlyZSBiaW51dGlscy5pbmMKK3JlcXVpcmUgYmludXRpbHMtJHtQVn0uaW5jCisKK0RFUEVORFMgKz0gImZsZXggYmlzb24gemxpYiIKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtc3lzcm9vdD0vIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1pbnN0YWxsLWxpYmJmZCBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtaW5zdGFsbC1saWJpYmVydHkgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLXNoYXJlZCBcCisgICAgICAgICAgICAgICAgIgorCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0tZW5hYmxlLXRhcmdldHM9YWxsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtNjQtYml0LWJmZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZW5hYmxlLWluc3RhbGwtbGliaWJlcnR5IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtaW5zdGFsbC1saWJiZmQiCisKK2RvX2luc3RhbGxfY2xhc3MtbmF0aXZlICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJIyBJbnN0YWxsIHRoZSBsaWJpYmVydHkgaGVhZGVyCisJaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfQorCWluc3RhbGwgLW0gNjQ0ICR7U30vaW5jbHVkZS9hbnNpZGVjbC5oICR7RH0ke2luY2x1ZGVkaXJ9CisJaW5zdGFsbCAtbSA2NDQgJHtTfS9pbmNsdWRlL2xpYmliZXJ0eS5oICR7RH0ke2luY2x1ZGVkaXJ9CisKKwkjIFdlIG9ubHkgd2FudCBsaWJpYmVydHksIGxpYmJmZCBhbmQgbGlib3Bjb2RlcworCXJtIC1yZiAke0R9JHtiaW5kaXJ9CisJcm0gLXJmICR7RH0ke3ByZWZpeH0vJHtUQVJHRVRfU1lTfQorCXJtIC1yZiAke0R9JHtwcmVmaXh9L2xpYi9sZHNjcmlwdHMKKwlybSAtcmYgJHtEfSR7cHJlZml4fS9zaGFyZS9pbmZvCisJcm0gLXJmICR7RH0ke3ByZWZpeH0vc2hhcmUvbG9jYWxlCisJcm0gLXJmICR7RH0ke3ByZWZpeH0vc2hhcmUvbWFuCisJcm1kaXIgJHtEfSR7cHJlZml4fS9zaGFyZSB8fCA6CisJcm1kaXIgJHtEfS8ke2xpYmRpcn0vZ2NjLWxpYiB8fCA6CisJcm1kaXIgJHtEfS8ke2xpYmRpcn02NC9nY2MtbGliIHx8IDoKKwlybWRpciAke0R9LyR7bGliZGlyfSB8fCA6CisJcm1kaXIgJHtEfS8ke2xpYmRpcn02NCB8fCA6Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMWE0YmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9nbnVsaWIubWsgYi9saWIvZ251bGliLm1rCitpbmRleCBlMWQ3NGRiLi5jMGU5MmRkIDEwMDY0NAorLS0tIGEvbGliL2dudWxpYi5taworKysrIGIvbGliL2dudWxpYi5taworQEAgLTE4ODIsNyArMTg4Miw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uLzAwMDEtc3JjLWxvY2FsLm1rLWZpeC1wYXJhbGxlbC1pc3N1ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uLzAwMDEtc3JjLWxvY2FsLm1rLWZpeC1wYXJhbGxlbC1pc3N1ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTQzYTU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vMDAwMS1zcmMtbG9jYWwubWstZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gM2ExNWY3YzlhY2U2YzAyOTRlZGMzMTNhMTg0OGNhZmNjMzFiMmE5MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAyNCBBcHIgMjAxNSAwMDozODozMiAtMDcwMAorU3ViamVjdDogW1BBVENIXSBzcmMvbG9jYWwubWs6IGZpeCBwYXJhbGxlbCBpc3N1ZQorCitGaXhlZDoKK3JtIC1mIHNyYy95YWNjIHNyYy95YWNjLnRtcAorZWNobyAnIyEgL2Jpbi9zaCcgPnNyYy95YWNjLnRtcAorL2Jpbi9iYXNoOiBzcmMveWFjYy50bXA6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK01ha2VmaWxlOjY2NzA6IHJlY2lwZSBmb3IgdGFyZ2V0ICdzcmMveWFjYycgZmFpbGVkCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9sb2NhbC5tayB8ICAgIDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2xvY2FsLm1rIGIvc3JjL2xvY2FsLm1rCitpbmRleCA1NzNhZDAwLi4yOGJmYWU0IDEwMDY0NAorLS0tIGEvc3JjL2xvY2FsLm1rCisrKysgYi9zcmMvbG9jYWwubWsKK0BAIC0xMTksNiArMTE5LDcgQEAgTU9TVExZQ0xFQU5GSUxFUyArPSBzcmMveWFjYworIAorIHNyYy95YWNjOgorIAkkKEFNX1ZfR0VOKXJtIC1mICRAICRALnRtcAorKwkkKEFNX1ZfYXQpJChNS0RJUl9QKSBzcmMKKyAJJChBTV9WX2F0KWVjaG8gJyMhIC9iaW4vc2gnID4kQC50bXAKKyAJJChBTV9WX2F0KWVjaG8gImV4ZWMgJyQoYmluZGlyKS9iaXNvbicgLXkgIiciJCRAIicgPj4kQC50bXAKKyAJJChBTV9WX2F0KWNobW9kIGEreCAkQC50bXAKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi9iaXNvbi0yLjNfbTQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi9iaXNvbi0yLjNfbTQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ4Y2UxZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uL2Jpc29uLTIuM19tNC5wYXRjaApAQCAtMCwwICsxLDU5MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyMKKyMgUGF0Y2ggbWFuYWdlZCBieSBodHRwOi8vd3d3Lm1uLWxvZ2lzdGlrLmRlL3Vuc3VwcG9ydGVkL3B4YTI1MC9wYXRjaGVyCisjCisKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC9pbnR0eXBlcy1wcmkubTQKK0BAIC0wLDAgKzEsMzIgQEAKKysjIGludHR5cGVzLXByaS5tNCBzZXJpYWwgMSAoZ2V0dGV4dC0wLjExLjQpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworKyMgRGVmaW5lIFBSSV9NQUNST1NfQlJPS0VOIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMgYW5kIGRlZmluZXMgdGhlIFBSSSoKKysjIG1hY3JvcyB0byBub24tc3RyaW5nIHZhbHVlcy4gIFRoaXMgaXMgdGhlIGNhc2Ugb24gQUlYIDQuMy4zLgorKworK0FDX0RFRlVOKFtndF9JTlRUWVBFU19QUkldLAorK1sKKysgIEFDX1JFUVVJUkUoW2d0X0hFQURFUl9JTlRUWVBFU19IXSkKKysgIGlmIHRlc3QgJGd0X2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuCisrICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBpbnR0eXBlcy5oIFBSSXhOTiBtYWNyb3MgYXJlIGJyb2tlbl0sCisrICAgICAgZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbiwKKysgICAgICBbCisrICAgICAgICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPGludHR5cGVzLmg+CisrI2lmZGVmIFBSSWQzMgorK2NoYXIgKnAgPSBQUklkMzI7CisrI2VuZGlmCisrXSwgW10sIGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW49bm8sIGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW49eWVzKQorKyAgICAgIF0pCisrICBmaQorKyAgaWYgdGVzdCAiJGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW4iID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChQUklfTUFDUk9TX0JST0tFTiwgMSwKKysgICAgICBbRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMgYW5kIGRlZmluZXMgdW51c2FibGUgUFJJKiBtYWNyb3MuXSkKKysgIGZpCisrXSkKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC9sY21lc3NhZ2UubTQKK0BAIC0wLDAgKzEsMzIgQEAKKysjIGxjbWVzc2FnZS5tNCBzZXJpYWwgMyAoZ2V0dGV4dC0wLjExLjMpCisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrZG5sCisrZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKKytkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CisrZG5sIGZ1bmN0aW9uYWxpdHkuCisrZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKytkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCisrZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKysKKytkbmwgQXV0aG9yczoKKytkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS4KKysKKysjIENoZWNrIHdoZXRoZXIgTENfTUVTU0FHRVMgaXMgYXZhaWxhYmxlIGluIDxsb2NhbGUuaD4uCisrCisrQUNfREVGVU4oW0FNX0xDX01FU1NBR0VTXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIExDX01FU1NBR0VTXSwgYW1fY3ZfdmFsX0xDX01FU1NBR0VTLAorKyAgICBbQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsb2NhbGUuaD5dLCBbcmV0dXJuIExDX01FU1NBR0VTXSwKKysgICAgICAgYW1fY3ZfdmFsX0xDX01FU1NBR0VTPXllcywgYW1fY3ZfdmFsX0xDX01FU1NBR0VTPW5vKV0pCisrICBpZiB0ZXN0ICRhbV9jdl92YWxfTENfTUVTU0FHRVMgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfTENfTUVTU0FHRVMsIDEsCisrICAgICAgW0RlZmluZSBpZiB5b3VyIDxsb2NhbGUuaD4gZmlsZSBkZWZpbmVzIExDX01FU1NBR0VTLl0pCisrICBmaQorK10pCistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMS44NzUvbTQvdWludG1heF90Lm00CitAQCAtMCwwICsxLDI5IEBACisrIyB1aW50bWF4X3QubTQgc2VyaWFsIDYgKGdldHRleHQtMC4xMSkKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKysKKytBQ19QUkVSRVEoMi4xMykKKysKKysjIERlZmluZSB1aW50bWF4X3QgdG8gYHVuc2lnbmVkIGxvbmcnIG9yIGB1bnNpZ25lZCBsb25nIGxvbmcnCisrIyBpZiA8aW50dHlwZXMuaD4gZG9lcyBub3QgZXhpc3QuCisrCisrQUNfREVGVU4oW2ptX0FDX1RZUEVfVUlOVE1BWF9UXSwKKytbCisrICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfSU5UVFlQRVNfSF0pCisrICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfU1RESU5UX0hdKQorKyAgaWYgdGVzdCAkam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSBubyAmJiB0ZXN0ICRqbV9hY19jdl9oZWFkZXJfc3RkaW50X2ggPSBubzsgdGhlbgorKyAgICBBQ19SRVFVSVJFKFtqbV9BQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR10pCisrICAgIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nID0geWVzIFwKKysgICAgICAmJiBhY190eXBlPSd1bnNpZ25lZCBsb25nIGxvbmcnIFwKKysgICAgICB8fCBhY190eXBlPSd1bnNpZ25lZCBsb25nJworKyAgICBBQ19ERUZJTkVfVU5RVU9URUQodWludG1heF90LCAkYWNfdHlwZSwKKysgIFtEZWZpbmUgdG8gdW5zaWduZWQgbG9uZyBvciB1bnNpZ25lZCBsb25nIGxvbmcKKysgICBpZiA8aW50dHlwZXMuaD4gYW5kIDxzdGRpbnQuaD4gZG9uJ3QgZGVmaW5lLl0pCisrICBmaQorK10pCistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMS44NzUvbTQvZ2xpYmMyMS5tNAorQEAgLTAsMCArMSwzMiBAQAorKyMgZ2xpYmMyMS5tNCBzZXJpYWwgMiAoZmlsZXV0aWxzLTQuMS4zLCBnZXR0ZXh0LTAuMTAuNDApCisrZG5sIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrIyBUZXN0IGZvciB0aGUgR05VIEMgTGlicmFyeSwgdmVyc2lvbiAyLjEgb3IgbmV3ZXIuCisrIyBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytBQ19ERUZVTihbam1fR0xJQkMyMV0sCisrICBbCisrICAgIEFDX0NBQ0hFX0NIRUNLKHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBMaWJyYXJ5IDIuMSBvciBuZXdlciwKKysgICAgICBhY19jdl9nbnVfbGlicmFyeV8yXzEsCisrICAgICAgW0FDX0VHUkVQX0NQUChbTHVja3kgR05VIHVzZXJdLAorKwlbCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fR05VX0xJQlJBUllfXworKyAjaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxKSB8fCAoX19HTElCQ19fID4gMikKKysgIEx1Y2t5IEdOVSB1c2VyCisrICNlbmRpZgorKyNlbmRpZgorKwldLAorKwlhY19jdl9nbnVfbGlicmFyeV8yXzE9eWVzLAorKwlhY19jdl9nbnVfbGlicmFyeV8yXzE9bm8pCisrICAgICAgXQorKyAgICApCisrICAgIEFDX1NVQlNUKEdMSUJDMjEpCisrICAgIEdMSUJDMjE9IiRhY19jdl9nbnVfbGlicmFyeV8yXzEiCisrICBdCisrKQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L3N0ZGludF9oLm00CitAQCAtMCwwICsxLDI4IEBACisrIyBzdGRpbnRfaC5tNCBzZXJpYWwgMiAoZ2V0dGV4dC0wLjExLjQpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrIyBEZWZpbmUgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVggaWYgPHN0ZGludC5oPiBleGlzdHMsCisrIyBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwgYW5kIGRlY2xhcmVzIHVpbnRtYXhfdC4KKysKKytBQ19ERUZVTihbam1fQUNfSEVBREVSX1NURElOVF9IXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIHN0ZGludC5oXSwgam1fYWNfY3ZfaGVhZGVyX3N0ZGludF9oLAorKyAgW0FDX1RSWV9DT01QSUxFKAorKyAgICBbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxzdGRpbnQuaD5dLAorKyAgICBbdWludG1heF90IGkgPSAodWludG1heF90KSAtMTtdLAorKyAgICBqbV9hY19jdl9oZWFkZXJfc3RkaW50X2g9eWVzLAorKyAgICBqbV9hY19jdl9oZWFkZXJfc3RkaW50X2g9bm8pXSkKKysgIGlmIHRlc3QgJGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaCA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVgsIDEsCisrW0RlZmluZSBpZiA8c3RkaW50Lmg+IGV4aXN0cywgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sCisrICAgYW5kIGRlY2xhcmVzIHVpbnRtYXhfdC4gXSkKKysgIGZpCisrXSkKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC9pbnR0eXBlc19oLm00CitAQCAtMCwwICsxLDI4IEBACisrIyBpbnR0eXBlc19oLm00IHNlcmlhbCA0IChnZXR0ZXh0LTAuMTEuNCkKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKysKKysjIERlZmluZSBIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMsCisrIyBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwgYW5kIGRlY2xhcmVzIHVpbnRtYXhfdC4KKysKKytBQ19ERUZVTihbam1fQUNfSEVBREVSX0lOVFRZUEVTX0hdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgaW50dHlwZXMuaF0sIGptX2FjX2N2X2hlYWRlcl9pbnR0eXBlc19oLAorKyAgW0FDX1RSWV9DT01QSUxFKAorKyAgICBbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPl0sCisrICAgIFt1aW50bWF4X3QgaSA9ICh1aW50bWF4X3QpIC0xO10sCisrICAgIGptX2FjX2N2X2hlYWRlcl9pbnR0eXBlc19oPXllcywKKysgICAgam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2g9bm8pXSkKKysgIGlmIHRlc3QgJGptX2FjX2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYLCAxLAorK1tEZWZpbmUgaWYgPGludHR5cGVzLmg+IGV4aXN0cywgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sCisrICAgYW5kIGRlY2xhcmVzIHVpbnRtYXhfdC4gXSkKKysgIGZpCisrXSkKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC91bG9uZ2xvbmcubTQKK0BAIC0wLDAgKzEsMjMgQEAKKysjIHVsb25nbG9uZy5tNCBzZXJpYWwgMiAoZmlsZXV0aWxzLTQuMC4zMiwgZ2V0dGV4dC0wLjEwLjQwKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworK0FDX0RFRlVOKFtqbV9BQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR10sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB1bnNpZ25lZCBsb25nIGxvbmddLCBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZywKKysgIFtBQ19UUllfTElOSyhbdW5zaWduZWQgbG9uZyBsb25nIHVsbCA9IDE7IGludCBpID0gNjM7XSwKKysgICAgW3Vuc2lnbmVkIGxvbmcgbG9uZyB1bGxtYXggPSAodW5zaWduZWQgbG9uZyBsb25nKSAtMTsKKysgICAgIHJldHVybiB1bGwgPDwgaSB8IHVsbCA+PiBpIHwgdWxsbWF4IC8gdWxsIHwgdWxsbWF4ICUgdWxsO10sCisrICAgIGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nPXllcywKKysgICAgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmc9bm8pXSkKKysgIGlmIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX1VOU0lHTkVEX0xPTkdfTE9ORywgMSwKKysgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB1bnNpZ25lZCBsb25nIGxvbmcgdHlwZS5dKQorKyAgZmkKKytdKQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L2NvZGVzZXQubTQKK0BAIC0wLDAgKzEsMjMgQEAKKysjIGNvZGVzZXQubTQgc2VyaWFsIEFNMSAoZ2V0dGV4dC0wLjEwLjQwKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytBQ19ERUZVTihbQU1fTEFOR0lORk9fQ09ERVNFVF0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBubF9sYW5naW5mbyBhbmQgQ09ERVNFVF0sIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQsCisrICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxhbmdpbmZvLmg+XSwKKysgICAgICBbY2hhciogY3MgPSBubF9sYW5naW5mbyhDT0RFU0VUKTtdLAorKyAgICAgIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQ9eWVzLAorKyAgICAgIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQ9bm8pCisrICAgIF0pCisrICBpZiB0ZXN0ICRhbV9jdl9sYW5naW5mb19jb2Rlc2V0ID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX0xBTkdJTkZPX0NPREVTRVQsIDEsCisrICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSA8bGFuZ2luZm8uaD4gYW5kIG5sX2xhbmdpbmZvKENPREVTRVQpLl0pCisrICBmaQorK10pCistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMS44NzUvbTQvaW50ZGl2MC5tNAorQEAgLTAsMCArMSw3MiBAQAorKyMgaW50ZGl2MC5tNCBzZXJpYWwgMSAoZ2V0dGV4dC0wLjExLjMpCisrZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytBQ19ERUZVTihbZ3RfSU5URElWMF0sCisrWworKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCisrICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCisrCisrICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8gcmFpc2VzIFNJR0ZQRV0sCisrICAgIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlLAorKyAgICBbCisrICAgICAgQUNfVFJZX1JVTihbCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzaWduYWwuaD4KKysKKytzdGF0aWMgdm9pZAorKyNpZmRlZiBfX2NwbHVzcGx1cworK3NpZ2ZwZV9oYW5kbGVyIChpbnQgc2lnKQorKyNlbHNlCisrc2lnZnBlX2hhbmRsZXIgKHNpZykgaW50IHNpZzsKKysjZW5kaWYKKyt7CisrICAvKiBFeGl0IHdpdGggY29kZSAwIGlmIFNJR0ZQRSwgd2l0aCBjb2RlIDEgaWYgYW55IG90aGVyIHNpZ25hbC4gICovCisrICBleGl0IChzaWcgIT0gU0lHRlBFKTsKKyt9CisrCisraW50IHggPSAxOworK2ludCB5ID0gMDsKKytpbnQgejsKKytpbnQgbmFuOworKworK2ludCBtYWluICgpCisreworKyAgc2lnbmFsIChTSUdGUEUsIHNpZ2ZwZV9oYW5kbGVyKTsKKysvKiBJUklYIGFuZCBBSVggKHdoZW4gInhsYyAtcWNoZWNrIiBpcyB1c2VkKSB5aWVsZCBzaWduYWwgU0lHVFJBUC4gICovCisrI2lmIChkZWZpbmVkIChfX3NnaSkgfHwgZGVmaW5lZCAoX0FJWCkpICYmIGRlZmluZWQgKFNJR1RSQVApCisrICBzaWduYWwgKFNJR1RSQVAsIHNpZ2ZwZV9oYW5kbGVyKTsKKysjZW5kaWYKKysvKiBMaW51eC9TUEFSQyB5aWVsZHMgc2lnbmFsIFNJR0lMTC4gICovCisrI2lmIGRlZmluZWQgKF9fc3BhcmNfXykgJiYgZGVmaW5lZCAoX19saW51eF9fKQorKyAgc2lnbmFsIChTSUdJTEwsIHNpZ2ZwZV9oYW5kbGVyKTsKKysjZW5kaWYKKysKKysgIHogPSB4IC8geTsKKysgIG5hbiA9IHkgLyB5OworKyAgZXhpdCAoMSk7CisrfQorK10sIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPXllcywgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9bm8sCisrICAgICAgICBbCisrICAgICAgICAgICMgR3Vlc3MgYmFzZWQgb24gdGhlIENQVS4KKysgICAgICAgICAgY2FzZSAiJGhvc3RfY3B1IiBpbgorKyAgICAgICAgICAgIGFscGhhKiB8IGlbMzQ1NjddODYgfCBtNjhrIHwgczM5MCopCisrICAgICAgICAgICAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT0iZ3Vlc3NpbmcgeWVzIjs7CisrICAgICAgICAgICAgKikKKysgICAgICAgICAgICAgIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPSJndWVzc2luZyBubyI7OworKyAgICAgICAgICBlc2FjCisrICAgICAgICBdKQorKyAgICBdKQorKyAgY2FzZSAiJGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlIiBpbgorKyAgICAqeWVzKSB2YWx1ZT0xOzsKKysgICAgKikgdmFsdWU9MDs7CisrICBlc2FjCisrICBBQ19ERUZJTkVfVU5RVU9URUQoSU5URElWMF9SQUlTRVNfU0lHRlBFLCAkdmFsdWUsCisrICAgIFtEZWZpbmUgaWYgaW50ZWdlciBkaXZpc2lvbiBieSB6ZXJvIHJhaXNlcyBzaWduYWwgU0lHRlBFLl0pCisrXSkKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC9nbGliLm00CitAQCAtMCwwICsxLDE5NiBAQAorKyMgQ29uZmlndXJlIHBhdGhzIGZvciBHTElCCisrIyBPd2VuIFRheWxvciAgICAgOTctMTEtMworKworK2RubCBBTV9QQVRIX0dMSUIoW01JTklNVU0tVkVSU0lPTiwgW0FDVElPTi1JRi1GT1VORCBbLCBBQ1RJT04tSUYtTk9ULUZPVU5EIFssIE1PRFVMRVNdXV1dKQorK2RubCBUZXN0IGZvciBHTElCLCBhbmQgZGVmaW5lIEdMSUJfQ0ZMQUdTIGFuZCBHTElCX0xJQlMsIGlmICJnbW9kdWxlIiBvciAKKytkbmwgZ3RocmVhZCBpcyBzcGVjaWZpZWQgaW4gTU9EVUxFUywgcGFzcyB0byBnbGliLWNvbmZpZworK2RubAorK0FDX0RFRlVOKEFNX1BBVEhfR0xJQiwKKytbZG5sIAorK2RubCBHZXQgdGhlIGNmbGFncyBhbmQgbGlicmFyaWVzIGZyb20gdGhlIGdsaWItY29uZmlnIHNjcmlwdAorK2RubAorK0FDX0FSR19XSVRIKGdsaWItcHJlZml4LFsgIC0td2l0aC1nbGliLXByZWZpeD1QRlggICBQcmVmaXggd2hlcmUgR0xJQiBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sCisrICAgICAgICAgICAgZ2xpYl9jb25maWdfcHJlZml4PSIkd2l0aHZhbCIsIGdsaWJfY29uZmlnX3ByZWZpeD0iIikKKytBQ19BUkdfV0lUSChnbGliLWV4ZWMtcHJlZml4LFsgIC0td2l0aC1nbGliLWV4ZWMtcHJlZml4PVBGWCBFeGVjIHByZWZpeCB3aGVyZSBHTElCIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSwKKysgICAgICAgICAgICBnbGliX2NvbmZpZ19leGVjX3ByZWZpeD0iJHdpdGh2YWwiLCBnbGliX2NvbmZpZ19leGVjX3ByZWZpeD0iIikKKytBQ19BUkdfRU5BQkxFKGdsaWJ0ZXN0LCBbICAtLWRpc2FibGUtZ2xpYnRlc3QgICAgICAgRG8gbm90IHRyeSB0byBjb21waWxlIGFuZCBydW4gYSB0ZXN0IEdMSUIgcHJvZ3JhbV0sCisrCQkgICAgLCBlbmFibGVfZ2xpYnRlc3Q9eWVzKQorKworKyAgaWYgdGVzdCB4JGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4ICE9IHggOyB0aGVuCisrICAgICBnbGliX2NvbmZpZ19hcmdzPSIkZ2xpYl9jb25maWdfYXJncyAtLWV4ZWMtcHJlZml4PSRnbGliX2NvbmZpZ19leGVjX3ByZWZpeCIKKysgICAgIGlmIHRlc3QgeCR7R0xJQl9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgorKyAgICAgICAgR0xJQl9DT05GSUc9JGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4L2Jpbi9nbGliLWNvbmZpZworKyAgICAgZmkKKysgIGZpCisrICBpZiB0ZXN0IHgkZ2xpYl9jb25maWdfcHJlZml4ICE9IHggOyB0aGVuCisrICAgICBnbGliX2NvbmZpZ19hcmdzPSIkZ2xpYl9jb25maWdfYXJncyAtLXByZWZpeD0kZ2xpYl9jb25maWdfcHJlZml4IgorKyAgICAgaWYgdGVzdCB4JHtHTElCX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCisrICAgICAgICBHTElCX0NPTkZJRz0kZ2xpYl9jb25maWdfcHJlZml4L2Jpbi9nbGliLWNvbmZpZworKyAgICAgZmkKKysgIGZpCisrCisrICBmb3IgbW9kdWxlIGluIC4gJDQKKysgIGRvCisrICAgICAgY2FzZSAiJG1vZHVsZSIgaW4KKysgICAgICAgICBnbW9kdWxlKSAKKysgICAgICAgICAgICAgZ2xpYl9jb25maWdfYXJncz0iJGdsaWJfY29uZmlnX2FyZ3MgZ21vZHVsZSIKKysgICAgICAgICA7OworKyAgICAgICAgIGd0aHJlYWQpIAorKyAgICAgICAgICAgICBnbGliX2NvbmZpZ19hcmdzPSIkZ2xpYl9jb25maWdfYXJncyBndGhyZWFkIgorKyAgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgZG9uZQorKworKyAgQUNfUEFUSF9QUk9HKEdMSUJfQ09ORklHLCBnbGliLWNvbmZpZywgbm8pCisrICBtaW5fZ2xpYl92ZXJzaW9uPWlmZWxzZShbJDFdLCAsMC45OS43LCQxKQorKyAgQUNfTVNHX0NIRUNLSU5HKGZvciBHTElCIC0gdmVyc2lvbiA+PSAkbWluX2dsaWJfdmVyc2lvbikKKysgIG5vX2dsaWI9IiIKKysgIGlmIHRlc3QgIiRHTElCX0NPTkZJRyIgPSAibm8iIDsgdGhlbgorKyAgICBub19nbGliPXllcworKyAgZWxzZQorKyAgICBHTElCX0NGTEFHUz1gJEdMSUJfQ09ORklHICRnbGliX2NvbmZpZ19hcmdzIC0tY2ZsYWdzYAorKyAgICBHTElCX0xJQlM9YCRHTElCX0NPTkZJRyAkZ2xpYl9jb25maWdfYXJncyAtLWxpYnNgCisrICAgIGdsaWJfY29uZmlnX21ham9yX3ZlcnNpb249YCRHTElCX0NPTkZJRyAkZ2xpYl9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCisrICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDEvJ2AKKysgICAgZ2xpYl9jb25maWdfbWlub3JfdmVyc2lvbj1gJEdMSUJfQ09ORklHICRnbGliX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKKysgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMi8nYAorKyAgICBnbGliX2NvbmZpZ19taWNyb192ZXJzaW9uPWAkR0xJQl9DT05GSUcgJGdsaWJfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorKyAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wzLydgCisrICAgIGlmIHRlc3QgIngkZW5hYmxlX2dsaWJ0ZXN0IiA9ICJ4eWVzIiA7IHRoZW4KKysgICAgICBhY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKKysgICAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgorKyAgICAgIENGTEFHUz0iJENGTEFHUyAkR0xJQl9DRkxBR1MiCisrICAgICAgTElCUz0iJEdMSUJfTElCUyAkTElCUyIKKytkbmwKKytkbmwgTm93IGNoZWNrIGlmIHRoZSBpbnN0YWxsZWQgR0xJQiBpcyBzdWZmaWNpZW50bHkgbmV3LiAoQWxzbyBzYW5pdHkKKytkbmwgY2hlY2tzIHRoZSByZXN1bHRzIG9mIGdsaWItY29uZmlnIHRvIHNvbWUgZXh0ZW50CisrZG5sCisrICAgICAgcm0gLWYgY29uZi5nbGlidGVzdAorKyAgICAgIEFDX1RSWV9SVU4oWworKyNpbmNsdWRlIDxnbGliLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKworK2ludCAKKyttYWluICgpCisreworKyAgaW50IG1ham9yLCBtaW5vciwgbWljcm87CisrICBjaGFyICp0bXBfdmVyc2lvbjsKKysKKysgIHN5c3RlbSAoInRvdWNoIGNvbmYuZ2xpYnRlc3QiKTsKKysKKysgIC8qIEhQL1VYIDkgKCVAIyEpIHdyaXRlcyB0byBzc2NhbmYgc3RyaW5ncyAqLworKyAgdG1wX3ZlcnNpb24gPSBnX3N0cmR1cCgiJG1pbl9nbGliX3ZlcnNpb24iKTsKKysgIGlmIChzc2NhbmYodG1wX3ZlcnNpb24sICIlZC4lZC4lZCIsICZtYWpvciwgJm1pbm9yLCAmbWljcm8pICE9IDMpIHsKKysgICAgIHByaW50ZigiJXMsIGJhZCB2ZXJzaW9uIHN0cmluZ1xuIiwgIiRtaW5fZ2xpYl92ZXJzaW9uIik7CisrICAgICBleGl0KDEpOworKyAgIH0KKysKKysgIGlmICgoZ2xpYl9tYWpvcl92ZXJzaW9uICE9ICRnbGliX2NvbmZpZ19tYWpvcl92ZXJzaW9uKSB8fAorKyAgICAgIChnbGliX21pbm9yX3ZlcnNpb24gIT0gJGdsaWJfY29uZmlnX21pbm9yX3ZlcnNpb24pIHx8CisrICAgICAgKGdsaWJfbWljcm9fdmVyc2lvbiAhPSAkZ2xpYl9jb25maWdfbWljcm9fdmVyc2lvbikpCisrICAgIHsKKysgICAgICBwcmludGYoIlxuKioqICdnbGliLWNvbmZpZyAtLXZlcnNpb24nIHJldHVybmVkICVkLiVkLiVkLCBidXQgR0xJQiAoJWQuJWQuJWQpXG4iLCAKKysgICAgICAgICAgICAgJGdsaWJfY29uZmlnX21ham9yX3ZlcnNpb24sICRnbGliX2NvbmZpZ19taW5vcl92ZXJzaW9uLCAkZ2xpYl9jb25maWdfbWljcm9fdmVyc2lvbiwKKysgICAgICAgICAgICAgZ2xpYl9tYWpvcl92ZXJzaW9uLCBnbGliX21pbm9yX3ZlcnNpb24sIGdsaWJfbWljcm9fdmVyc2lvbik7CisrICAgICAgcHJpbnRmICgiKioqIHdhcyBmb3VuZCEgSWYgZ2xpYi1jb25maWcgd2FzIGNvcnJlY3QsIHRoZW4gaXQgaXMgYmVzdFxuIik7CisrICAgICAgcHJpbnRmICgiKioqIHRvIHJlbW92ZSB0aGUgb2xkIHZlcnNpb24gb2YgR0xJQi4gWW91IG1heSBhbHNvIGJlIGFibGUgdG8gZml4IHRoZSBlcnJvclxuIik7CisrICAgICAgcHJpbnRmKCIqKiogYnkgbW9kaWZ5aW5nIHlvdXIgTERfTElCUkFSWV9QQVRIIGVudmlyb21lbnQgdmFyaWFibGUsIG9yIGJ5IGVkaXRpbmdcbiIpOworKyAgICAgIHByaW50ZigiKioqIC9ldGMvbGQuc28uY29uZi4gTWFrZSBzdXJlIHlvdSBoYXZlIHJ1biBsZGNvbmZpZyBpZiB0aGF0IGlzXG4iKTsKKysgICAgICBwcmludGYoIioqKiByZXF1aXJlZCBvbiB5b3VyIHN5c3RlbS5cbiIpOworKyAgICAgIHByaW50ZigiKioqIElmIGdsaWItY29uZmlnIHdhcyB3cm9uZywgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBHTElCX0NPTkZJR1xuIik7CisrICAgICAgcHJpbnRmKCIqKiogdG8gcG9pbnQgdG8gdGhlIGNvcnJlY3QgY29weSBvZiBnbGliLWNvbmZpZywgYW5kIHJlbW92ZSB0aGUgZmlsZSBjb25maWcuY2FjaGVcbiIpOworKyAgICAgIHByaW50ZigiKioqIGJlZm9yZSByZS1ydW5uaW5nIGNvbmZpZ3VyZVxuIik7CisrICAgIH0gCisrICBlbHNlIGlmICgoZ2xpYl9tYWpvcl92ZXJzaW9uICE9IEdMSUJfTUFKT1JfVkVSU0lPTikgfHwKKysJICAgKGdsaWJfbWlub3JfdmVyc2lvbiAhPSBHTElCX01JTk9SX1ZFUlNJT04pIHx8CisrICAgICAgICAgICAoZ2xpYl9taWNyb192ZXJzaW9uICE9IEdMSUJfTUlDUk9fVkVSU0lPTikpCisrICAgIHsKKysgICAgICBwcmludGYoIioqKiBHTElCIGhlYWRlciBmaWxlcyAodmVyc2lvbiAlZC4lZC4lZCkgZG8gbm90IG1hdGNoXG4iLAorKwkgICAgIEdMSUJfTUFKT1JfVkVSU0lPTiwgR0xJQl9NSU5PUl9WRVJTSU9OLCBHTElCX01JQ1JPX1ZFUlNJT04pOworKyAgICAgIHByaW50ZigiKioqIGxpYnJhcnkgKHZlcnNpb24gJWQuJWQuJWQpXG4iLAorKwkgICAgIGdsaWJfbWFqb3JfdmVyc2lvbiwgZ2xpYl9taW5vcl92ZXJzaW9uLCBnbGliX21pY3JvX3ZlcnNpb24pOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBpZiAoKGdsaWJfbWFqb3JfdmVyc2lvbiA+IG1ham9yKSB8fAorKyAgICAgICAgKChnbGliX21ham9yX3ZlcnNpb24gPT0gbWFqb3IpICYmIChnbGliX21pbm9yX3ZlcnNpb24gPiBtaW5vcikpIHx8CisrICAgICAgICAoKGdsaWJfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKGdsaWJfbWlub3JfdmVyc2lvbiA9PSBtaW5vcikgJiYgKGdsaWJfbWljcm9fdmVyc2lvbiA+PSBtaWNybykpKQorKyAgICAgIHsKKysgICAgICAgIHJldHVybiAwOworKyAgICAgICB9CisrICAgICBlbHNlCisrICAgICAgeworKyAgICAgICAgcHJpbnRmKCJcbioqKiBBbiBvbGQgdmVyc2lvbiBvZiBHTElCICglZC4lZC4lZCkgd2FzIGZvdW5kLlxuIiwKKysgICAgICAgICAgICAgICBnbGliX21ham9yX3ZlcnNpb24sIGdsaWJfbWlub3JfdmVyc2lvbiwgZ2xpYl9taWNyb192ZXJzaW9uKTsKKysgICAgICAgIHByaW50ZigiKioqIFlvdSBuZWVkIGEgdmVyc2lvbiBvZiBHTElCIG5ld2VyIHRoYW4gJWQuJWQuJWQuIFRoZSBsYXRlc3QgdmVyc2lvbiBvZlxuIiwKKysJICAgICAgIG1ham9yLCBtaW5vciwgbWljcm8pOworKyAgICAgICAgcHJpbnRmKCIqKiogR0xJQiBpcyBhbHdheXMgYXZhaWxhYmxlIGZyb20gZnRwOi8vZnRwLmd0ay5vcmcuXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIElmIHlvdSBoYXZlIGFscmVhZHkgaW5zdGFsbGVkIGEgc3VmZmljaWVudGx5IG5ldyB2ZXJzaW9uLCB0aGlzIGVycm9yXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHdyb25nIGNvcHkgb2YgdGhlIGdsaWItY29uZmlnIHNoZWxsIHNjcmlwdCBpc1xuIik7CisrICAgICAgICBwcmludGYoIioqKiBiZWluZyBmb3VuZC4gVGhlIGVhc2llc3Qgd2F5IHRvIGZpeCB0aGlzIGlzIHRvIHJlbW92ZSB0aGUgb2xkIHZlcnNpb25cbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogb2YgR0xJQiwgYnV0IHlvdSBjYW4gYWxzbyBzZXQgdGhlIEdMSUJfQ09ORklHIGVudmlyb25tZW50IHRvIHBvaW50IHRvIHRoZVxuIik7CisrICAgICAgICBwcmludGYoIioqKiBjb3JyZWN0IGNvcHkgb2YgZ2xpYi1jb25maWcuIChJbiB0aGlzIGNhc2UsIHlvdSB3aWxsIGhhdmUgdG9cbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogbW9kaWZ5IHlvdXIgTERfTElCUkFSWV9QQVRIIGVudmlyb21lbnQgdmFyaWFibGUsIG9yIGVkaXQgL2V0Yy9sZC5zby5jb25mXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIHNvIHRoYXQgdGhlIGNvcnJlY3QgbGlicmFyaWVzIGFyZSBmb3VuZCBhdCBydW4tdGltZSkpXG4iKTsKKysgICAgICB9CisrICAgIH0KKysgIHJldHVybiAxOworK30KKytdLCwgbm9fZ2xpYj15ZXMsW2VjaG8gJGFjX24gImNyb3NzIGNvbXBpbGluZzsgYXNzdW1lZCBPSy4uLiAkYWNfYyJdKQorKyAgICAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKKysgICAgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKKysgICAgIGZpCisrICBmaQorKyAgaWYgdGVzdCAieCRub19nbGliIiA9IHggOyB0aGVuCisrICAgICBBQ19NU0dfUkVTVUxUKHllcykKKysgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pICAgICAKKysgIGVsc2UKKysgICAgIEFDX01TR19SRVNVTFQobm8pCisrICAgICBpZiB0ZXN0ICIkR0xJQl9DT05GSUciID0gIm5vIiA7IHRoZW4KKysgICAgICAgZWNobyAiKioqIFRoZSBnbGliLWNvbmZpZyBzY3JpcHQgaW5zdGFsbGVkIGJ5IEdMSUIgY291bGQgbm90IGJlIGZvdW5kIgorKyAgICAgICBlY2hvICIqKiogSWYgR0xJQiB3YXMgaW5zdGFsbGVkIGluIFBSRUZJWCwgbWFrZSBzdXJlIFBSRUZJWC9iaW4gaXMgaW4iCisrICAgICAgIGVjaG8gIioqKiB5b3VyIHBhdGgsIG9yIHNldCB0aGUgR0xJQl9DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIgorKyAgICAgICBlY2hvICIqKiogZnVsbCBwYXRoIHRvIGdsaWItY29uZmlnLiIKKysgICAgIGVsc2UKKysgICAgICAgaWYgdGVzdCAtZiBjb25mLmdsaWJ0ZXN0IDsgdGhlbgorKyAgICAgICAgOgorKyAgICAgICBlbHNlCisrICAgICAgICAgIGVjaG8gIioqKiBDb3VsZCBub3QgcnVuIEdMSUIgdGVzdCBwcm9ncmFtLCBjaGVja2luZyB3aHkuLi4iCisrICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAkR0xJQl9DRkxBR1MiCisrICAgICAgICAgIExJQlM9IiRMSUJTICRHTElCX0xJQlMiCisrICAgICAgICAgIEFDX1RSWV9MSU5LKFsKKysjaW5jbHVkZSA8Z2xpYi5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorK10sICAgICAgWyByZXR1cm4gKChnbGliX21ham9yX3ZlcnNpb24pIHx8IChnbGliX21pbm9yX3ZlcnNpb24pIHx8IChnbGliX21pY3JvX3ZlcnNpb24pKTsgXSwKKysgICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gY29tcGlsZWQsIGJ1dCBkaWQgbm90IHJ1bi4gVGhpcyB1c3VhbGx5IG1lYW5zIgorKyAgICAgICAgICBlY2hvICIqKiogdGhhdCB0aGUgcnVuLXRpbWUgbGlua2VyIGlzIG5vdCBmaW5kaW5nIEdMSUIgb3IgZmluZGluZyB0aGUgd3JvbmciCisrICAgICAgICAgIGVjaG8gIioqKiB2ZXJzaW9uIG9mIEdMSUIuIElmIGl0IGlzIG5vdCBmaW5kaW5nIEdMSUIsIHlvdSdsbCBuZWVkIHRvIHNldCB5b3VyIgorKyAgICAgICAgICBlY2hvICIqKiogTERfTElCUkFSWV9QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLCBvciBlZGl0IC9ldGMvbGQuc28uY29uZiB0byBwb2ludCIKKysgICAgICAgICAgZWNobyAiKioqIHRvIHRoZSBpbnN0YWxsZWQgbG9jYXRpb24gIEFsc28sIG1ha2Ugc3VyZSB5b3UgaGF2ZSBydW4gbGRjb25maWcgaWYgdGhhdCIKKysgICAgICAgICAgZWNobyAiKioqIGlzIHJlcXVpcmVkIG9uIHlvdXIgc3lzdGVtIgorKwkgIGVjaG8gIioqKiIKKysgICAgICAgICAgZWNobyAiKioqIElmIHlvdSBoYXZlIGFuIG9sZCB2ZXJzaW9uIGluc3RhbGxlZCwgaXQgaXMgYmVzdCB0byByZW1vdmUgaXQsIGFsdGhvdWdoIgorKyAgICAgICAgICBlY2hvICIqKiogeW91IG1heSBhbHNvIGJlIGFibGUgdG8gZ2V0IHRoaW5ncyB0byB3b3JrIGJ5IG1vZGlmeWluZyBMRF9MSUJSQVJZX1BBVEgiCisrICAgICAgICAgIGVjaG8gIioqKiIKKysgICAgICAgICAgZWNobyAiKioqIElmIHlvdSBoYXZlIGEgUmVkSGF0IDUuMCBzeXN0ZW0sIHlvdSBzaG91bGQgcmVtb3ZlIHRoZSBHVEsgcGFja2FnZSB0aGF0IgorKyAgICAgICAgICBlY2hvICIqKiogY2FtZSB3aXRoIHRoZSBzeXN0ZW0gd2l0aCB0aGUgY29tbWFuZCIKKysgICAgICAgICAgZWNobyAiKioqIgorKyAgICAgICAgICBlY2hvICIqKiogICAgcnBtIC0tZXJhc2UgLS1ub2RlcHMgZ3RrIGd0ay1kZXZlbCIgXSwKKysgICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gZmFpbGVkIHRvIGNvbXBpbGUgb3IgbGluay4gU2VlIHRoZSBmaWxlIGNvbmZpZy5sb2cgZm9yIHRoZSIKKysgICAgICAgICAgZWNobyAiKioqIGV4YWN0IGVycm9yIHRoYXQgb2NjdXJlZC4gVGhpcyB1c3VhbGx5IG1lYW5zIEdMSUIgd2FzIGluY29ycmVjdGx5IGluc3RhbGxlZCIKKysgICAgICAgICAgZWNobyAiKioqIG9yIHRoYXQgeW91IGhhdmUgbW92ZWQgR0xJQiBzaW5jZSBpdCB3YXMgaW5zdGFsbGVkLiBJbiB0aGUgbGF0dGVyIGNhc2UsIHlvdSIKKysgICAgICAgICAgZWNobyAiKioqIG1heSB3YW50IHRvIGVkaXQgdGhlIGdsaWItY29uZmlnIHNjcmlwdDogJEdMSUJfQ09ORklHIiBdKQorKyAgICAgICAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKKysgICAgICAgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKKysgICAgICAgZmkKKysgICAgIGZpCisrICAgICBHTElCX0NGTEFHUz0iIgorKyAgICAgR0xJQl9MSUJTPSIiCisrICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorKyAgZmkKKysgIEFDX1NVQlNUKEdMSUJfQ0ZMQUdTKQorKyAgQUNfU1VCU1QoR0xJQl9MSUJTKQorKyAgcm0gLWYgY29uZi5nbGlidGVzdAorK10pCistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMS44NzUvbTQvaW50dHlwZXMubTQKK0BAIC0wLDAgKzEsMjcgQEAKKysjIGludHR5cGVzLm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTEuNCkKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKysKKysjIERlZmluZSBIQVZFX0lOVFRZUEVTX0ggaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZG9lc24ndCBjbGFzaCB3aXRoCisrIyA8c3lzL3R5cGVzLmg+LgorKworK0FDX0RFRlVOKFtndF9IRUFERVJfSU5UVFlQRVNfSF0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBpbnR0eXBlcy5oXSwgZ3RfY3ZfaGVhZGVyX2ludHR5cGVzX2gsCisrICBbCisrICAgIEFDX1RSWV9DT01QSUxFKAorKyAgICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+XSwKKysgICAgICBbXSwgZ3RfY3ZfaGVhZGVyX2ludHR5cGVzX2g9eWVzLCBndF9jdl9oZWFkZXJfaW50dHlwZXNfaD1ubykKKysgIF0pCisrICBpZiB0ZXN0ICRndF9jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9JTlRUWVBFU19ILCAxLAorKyAgICAgIFtEZWZpbmUgaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4uXSkKKysgIGZpCisrXSkKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC9pc2MtcG9zaXgubTQKK0BAIC0wLDAgKzEsMjYgQEAKKysjIGlzYy1wb3NpeC5tNCBzZXJpYWwgMiAoZ2V0dGV4dC0wLjExLjIpCisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrIyBUaGlzIGZpbGUgaXMgbm90IG5lZWRlZCB3aXRoIGF1dG9jb25mLTIuNTMgYW5kIG5ld2VyLiAgUmVtb3ZlIGl0IGluIDIwMDUuCisrCisrIyBUaGlzIHRlc3QgcmVwbGFjZXMgdGhlIG9uZSBpbiBhdXRvY29uZi4KKysjIEN1cnJlbnRseSB0aGlzIG1hY3JvIHNob3VsZCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGF1dG9jb25mIG1hY3JvCisrIyBiZWNhdXNlIGdldHRleHQncyBnZXR0ZXh0Lm00IChkaXN0cmlidXRlZCBpbiB0aGUgYXV0b21ha2UgcGFja2FnZSkKKysjIHN0aWxsIHVzZXMgaXQuICBPdGhlcndpc2UsIHRoZSB1c2UgaW4gZ2V0dGV4dC5tNCBtYWtlcyBhdXRvaGVhZGVyCisrIyBnaXZlIHRoZXNlIGRpYWdub3N0aWNzOgorKyMgICBjb25maWd1cmUuaW46NTU2OiBBQ19UUllfQ09NUElMRSB3YXMgY2FsbGVkIGJlZm9yZSBBQ19JU0NfUE9TSVgKKysjICAgY29uZmlndXJlLmluOjU1NjogQUNfVFJZX1JVTiB3YXMgY2FsbGVkIGJlZm9yZSBBQ19JU0NfUE9TSVgKKysKKyt1bmRlZmluZShbQUNfSVNDX1BPU0lYXSkKKysKKytBQ19ERUZVTihbQUNfSVNDX1BPU0lYXSwKKysgIFsKKysgICAgZG5sIFRoaXMgdGVzdCByZXBsYWNlcyB0aGUgb2Jzb2xlc2NlbnQgQUNfSVNDX1BPU0lYIGtsdWRnZS4KKysgICAgQUNfQ0hFQ0tfTElCKGNwb3NpeCwgc3RyZXJyb3IsIFtMSUJTPSIkTElCUyAtbGNwb3NpeCJdKQorKyAgXQorKykKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzE2YzU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSA0YzBkNzczM2YzMDkwM2Y4ZDdjN2NkNzQzM2Y1YzhhNzUwNWUzNWY1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMjEgQXByIDIwMTUgMDA6NDg6NDUgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gZG9jL2xvY2FsLm1rOiBkb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KKworVXBkYXRlZCBmb3IgYmlzb24gMy4wLjQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBkb2MvbG9jYWwubWsgfCAgICA5ICstLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RvYy9sb2NhbC5tayBiL2RvYy9sb2NhbC5taworaW5kZXggYzM0MDQ1Mi4uNjQyZjM4NSAxMDA2NDQKKy0tLSBhL2RvYy9sb2NhbC5taworKysrIGIvZG9jL2xvY2FsLm1rCitAQCAtOTgsMTAgKzk4LDcgQEAgZW5kaWYgISBDUk9TU19DT01QSUxJTkcKKyAjIyBNYW4gUGFnZXMuICAjIworICMjIC0tLS0tLS0tLS0tICMjCisgCistZGlzdF9tYW5fTUFOUyA9ICQodG9wX3NyY2RpcikvZG9jL2Jpc29uLjEKKy0KKy1FWFRSQV9ESVNUICs9ICQoZGlzdF9tYW5fTUFOUzouMT0ueCkKKy1NQUlOVEFJTkVSQ0xFQU5GSUxFUyArPSAkKGRpc3RfbWFuX01BTlMpCisrRVhUUkFfRElTVCArPSBiaXNvbi54CisgCisgIyBEaWZmZXJlbmNlcyB0byBpZ25vcmUgd2hlbiBjb21wYXJpbmcgdGhlIG1hbiBwYWdlICh0aGUgZGF0ZSkuCisgcmVtb3ZlX3RpbWVfc3RhbXAgPSBcCitAQCAtMTI0LDEwICsxMjEsNiBAQCAkKHRvcF9zcmNkaXIpL2RvYy9iaXNvbi4xOiAkKE1BTl9ERVBTKQorIAlmaQorIAkkKEFNX1ZfYXQpcm0gLWYgJEAqLnQKKyAKKy1pZiBFTkFCTEVfWUFDQworLW5vZGlzdF9tYW5fTUFOUyA9IGRvYy95YWNjLjEKKy1lbmRpZgorLQorICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgIyMgR3JhcGh2aXogZXhhbXBsZXMgZ2VuZXJhdGlvbi4gIyMKKyAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uL200LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vbTQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEzOWRhNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uL200LnBhdGNoCkBAIC0wLDAgKzEsNDE0IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIworIyBQYXRjaCBtYW5hZ2VkIGJ5IGh0dHA6Ly93d3cubW4tbG9naXN0aWsuZGUvdW5zdXBwb3J0ZWQvcHhhMjUwL3BhdGNoZXIKKyMKKworSW5kZXg6IGJpc29uLTIuNC4yL200L2xjbWVzc2FnZS5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTIuNC4yL200L2xjbWVzc2FnZS5tNAorQEAgLTAsMCArMSwzMiBAQAorKyMgbGNtZXNzYWdlLm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTEuMykKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKytkbmwKKytkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKKytkbmwgZnVuY3Rpb25hbGl0eS4KKytkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKKytkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrZG5sIFRoZXkgYXJlICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorKworK2RubCBBdXRob3JzOgorK2RubCAgIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAxOTk1LgorKworKyMgQ2hlY2sgd2hldGhlciBMQ19NRVNTQUdFUyBpcyBhdmFpbGFibGUgaW4gPGxvY2FsZS5oPi4KKysKKytBQ19ERUZVTihbQU1fTENfTUVTU0FHRVNdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgTENfTUVTU0FHRVNdLCBhbV9jdl92YWxfTENfTUVTU0FHRVMsCisrICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxvY2FsZS5oPl0sIFtyZXR1cm4gTENfTUVTU0FHRVNdLAorKyAgICAgICBhbV9jdl92YWxfTENfTUVTU0FHRVM9eWVzLCBhbV9jdl92YWxfTENfTUVTU0FHRVM9bm8pXSkKKysgIGlmIHRlc3QgJGFtX2N2X3ZhbF9MQ19NRVNTQUdFUyA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoSEFWRV9MQ19NRVNTQUdFUywgMSwKKysgICAgICBbRGVmaW5lIGlmIHlvdXIgPGxvY2FsZS5oPiBmaWxlIGRlZmluZXMgTENfTUVTU0FHRVMuXSkKKysgIGZpCisrXSkKK0luZGV4OiBiaXNvbi0yLjQuMi9tNC91aW50bWF4X3QubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0yLjQuMi9tNC91aW50bWF4X3QubTQKK0BAIC0wLDAgKzEsMjkgQEAKKysjIHVpbnRtYXhfdC5tNCBzZXJpYWwgNiAoZ2V0dGV4dC0wLjExKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworK0FDX1BSRVJFUSgyLjEzKQorKworKyMgRGVmaW5lIHVpbnRtYXhfdCB0byBgdW5zaWduZWQgbG9uZycgb3IgYHVuc2lnbmVkIGxvbmcgbG9uZycKKysjIGlmIDxpbnR0eXBlcy5oPiBkb2VzIG5vdCBleGlzdC4KKysKKytBQ19ERUZVTihbam1fQUNfVFlQRV9VSU5UTUFYX1RdLAorK1sKKysgIEFDX1JFUVVJUkUoW2ptX0FDX0hFQURFUl9JTlRUWVBFU19IXSkKKysgIEFDX1JFUVVJUkUoW2ptX0FDX0hFQURFUl9TVERJTlRfSF0pCisrICBpZiB0ZXN0ICRqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaCA9IG5vICYmIHRlc3QgJGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaCA9IG5vOyB0aGVuCisrICAgIEFDX1JFUVVJUkUoW2ptX0FDX1RZUEVfVU5TSUdORURfTE9OR19MT05HXSkKKysgICAgdGVzdCAkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmcgPSB5ZXMgXAorKyAgICAgICYmIGFjX3R5cGU9J3Vuc2lnbmVkIGxvbmcgbG9uZycgXAorKyAgICAgIHx8IGFjX3R5cGU9J3Vuc2lnbmVkIGxvbmcnCisrICAgIEFDX0RFRklORV9VTlFVT1RFRCh1aW50bWF4X3QsICRhY190eXBlLAorKyAgW0RlZmluZSB0byB1bnNpZ25lZCBsb25nIG9yIHVuc2lnbmVkIGxvbmcgbG9uZworKyAgIGlmIDxpbnR0eXBlcy5oPiBhbmQgPHN0ZGludC5oPiBkb24ndCBkZWZpbmUuXSkKKysgIGZpCisrXSkKK0luZGV4OiBiaXNvbi0yLjQuMi9tNC91bG9uZ2xvbmcubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0yLjQuMi9tNC91bG9uZ2xvbmcubTQKK0BAIC0wLDAgKzEsMjMgQEAKKysjIHVsb25nbG9uZy5tNCBzZXJpYWwgMiAoZmlsZXV0aWxzLTQuMC4zMiwgZ2V0dGV4dC0wLjEwLjQwKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworK0FDX0RFRlVOKFtqbV9BQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR10sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB1bnNpZ25lZCBsb25nIGxvbmddLCBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZywKKysgIFtBQ19UUllfTElOSyhbdW5zaWduZWQgbG9uZyBsb25nIHVsbCA9IDE7IGludCBpID0gNjM7XSwKKysgICAgW3Vuc2lnbmVkIGxvbmcgbG9uZyB1bGxtYXggPSAodW5zaWduZWQgbG9uZyBsb25nKSAtMTsKKysgICAgIHJldHVybiB1bGwgPDwgaSB8IHVsbCA+PiBpIHwgdWxsbWF4IC8gdWxsIHwgdWxsbWF4ICUgdWxsO10sCisrICAgIGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nPXllcywKKysgICAgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmc9bm8pXSkKKysgIGlmIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX1VOU0lHTkVEX0xPTkdfTE9ORywgMSwKKysgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB1bnNpZ25lZCBsb25nIGxvbmcgdHlwZS5dKQorKyAgZmkKKytdKQorSW5kZXg6IGJpc29uLTIuNC4yL200L2ludGRpdjAubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0yLjQuMi9tNC9pbnRkaXYwLm00CitAQCAtMCwwICsxLDcyIEBACisrIyBpbnRkaXYwLm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTEuMykKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK0FDX0RFRlVOKFtndF9JTlRESVYwXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKysKKysgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGludGVnZXIgZGl2aXNpb24gYnkgemVybyByYWlzZXMgU0lHRlBFXSwKKysgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGUsCisrICAgIFsKKysgICAgICBBQ19UUllfUlVOKFsKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHNpZ25hbC5oPgorKworK3N0YXRpYyB2b2lkCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrc2lnZnBlX2hhbmRsZXIgKGludCBzaWcpCisrI2Vsc2UKKytzaWdmcGVfaGFuZGxlciAoc2lnKSBpbnQgc2lnOworKyNlbmRpZgorK3sKKysgIC8qIEV4aXQgd2l0aCBjb2RlIDAgaWYgU0lHRlBFLCB3aXRoIGNvZGUgMSBpZiBhbnkgb3RoZXIgc2lnbmFsLiAgKi8KKysgIGV4aXQgKHNpZyAhPSBTSUdGUEUpOworK30KKysKKytpbnQgeCA9IDE7CisraW50IHkgPSAwOworK2ludCB6OworK2ludCBuYW47CisrCisraW50IG1haW4gKCkKKyt7CisrICBzaWduYWwgKFNJR0ZQRSwgc2lnZnBlX2hhbmRsZXIpOworKy8qIElSSVggYW5kIEFJWCAod2hlbiAieGxjIC1xY2hlY2siIGlzIHVzZWQpIHlpZWxkIHNpZ25hbCBTSUdUUkFQLiAgKi8KKysjaWYgKGRlZmluZWQgKF9fc2dpKSB8fCBkZWZpbmVkIChfQUlYKSkgJiYgZGVmaW5lZCAoU0lHVFJBUCkKKysgIHNpZ25hbCAoU0lHVFJBUCwgc2lnZnBlX2hhbmRsZXIpOworKyNlbmRpZgorKy8qIExpbnV4L1NQQVJDIHlpZWxkcyBzaWduYWwgU0lHSUxMLiAgKi8KKysjaWYgZGVmaW5lZCAoX19zcGFyY19fKSAmJiBkZWZpbmVkIChfX2xpbnV4X18pCisrICBzaWduYWwgKFNJR0lMTCwgc2lnZnBlX2hhbmRsZXIpOworKyNlbmRpZgorKworKyAgeiA9IHggLyB5OworKyAgbmFuID0geSAvIHk7CisrICBleGl0ICgxKTsKKyt9CisrXSwgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9eWVzLCBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT1ubywKKysgICAgICAgIFsKKysgICAgICAgICAgIyBHdWVzcyBiYXNlZCBvbiB0aGUgQ1BVLgorKyAgICAgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisrICAgICAgICAgICAgYWxwaGEqIHwgaVszNDU2N104NiB8IG02OGsgfCBzMzkwKikKKysgICAgICAgICAgICAgIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPSJndWVzc2luZyB5ZXMiOzsKKysgICAgICAgICAgICAqKQorKyAgICAgICAgICAgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9Imd1ZXNzaW5nIG5vIjs7CisrICAgICAgICAgIGVzYWMKKysgICAgICAgIF0pCisrICAgIF0pCisrICBjYXNlICIkZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGUiIGluCisrICAgICp5ZXMpIHZhbHVlPTE7OworKyAgICAqKSB2YWx1ZT0wOzsKKysgIGVzYWMKKysgIEFDX0RFRklORV9VTlFVT1RFRChJTlRESVYwX1JBSVNFU19TSUdGUEUsICR2YWx1ZSwKKysgICAgW0RlZmluZSBpZiBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8gcmFpc2VzIHNpZ25hbCBTSUdGUEUuXSkKKytdKQorSW5kZXg6IGJpc29uLTIuNC4yL200L2dsaWIubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0yLjQuMi9tNC9nbGliLm00CitAQCAtMCwwICsxLDE5NiBAQAorKyMgQ29uZmlndXJlIHBhdGhzIGZvciBHTElCCisrIyBPd2VuIFRheWxvciAgICAgOTctMTEtMworKworK2RubCBBTV9QQVRIX0dMSUIoW01JTklNVU0tVkVSU0lPTiwgW0FDVElPTi1JRi1GT1VORCBbLCBBQ1RJT04tSUYtTk9ULUZPVU5EIFssIE1PRFVMRVNdXV1dKQorK2RubCBUZXN0IGZvciBHTElCLCBhbmQgZGVmaW5lIEdMSUJfQ0ZMQUdTIGFuZCBHTElCX0xJQlMsIGlmICJnbW9kdWxlIiBvciAKKytkbmwgZ3RocmVhZCBpcyBzcGVjaWZpZWQgaW4gTU9EVUxFUywgcGFzcyB0byBnbGliLWNvbmZpZworK2RubAorK0FDX0RFRlVOKEFNX1BBVEhfR0xJQiwKKytbZG5sIAorK2RubCBHZXQgdGhlIGNmbGFncyBhbmQgbGlicmFyaWVzIGZyb20gdGhlIGdsaWItY29uZmlnIHNjcmlwdAorK2RubAorK0FDX0FSR19XSVRIKGdsaWItcHJlZml4LFsgIC0td2l0aC1nbGliLXByZWZpeD1QRlggICBQcmVmaXggd2hlcmUgR0xJQiBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sCisrICAgICAgICAgICAgZ2xpYl9jb25maWdfcHJlZml4PSIkd2l0aHZhbCIsIGdsaWJfY29uZmlnX3ByZWZpeD0iIikKKytBQ19BUkdfV0lUSChnbGliLWV4ZWMtcHJlZml4LFsgIC0td2l0aC1nbGliLWV4ZWMtcHJlZml4PVBGWCBFeGVjIHByZWZpeCB3aGVyZSBHTElCIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSwKKysgICAgICAgICAgICBnbGliX2NvbmZpZ19leGVjX3ByZWZpeD0iJHdpdGh2YWwiLCBnbGliX2NvbmZpZ19leGVjX3ByZWZpeD0iIikKKytBQ19BUkdfRU5BQkxFKGdsaWJ0ZXN0LCBbICAtLWRpc2FibGUtZ2xpYnRlc3QgICAgICAgRG8gbm90IHRyeSB0byBjb21waWxlIGFuZCBydW4gYSB0ZXN0IEdMSUIgcHJvZ3JhbV0sCisrCQkgICAgLCBlbmFibGVfZ2xpYnRlc3Q9eWVzKQorKworKyAgaWYgdGVzdCB4JGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4ICE9IHggOyB0aGVuCisrICAgICBnbGliX2NvbmZpZ19hcmdzPSIkZ2xpYl9jb25maWdfYXJncyAtLWV4ZWMtcHJlZml4PSRnbGliX2NvbmZpZ19leGVjX3ByZWZpeCIKKysgICAgIGlmIHRlc3QgeCR7R0xJQl9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgorKyAgICAgICAgR0xJQl9DT05GSUc9JGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4L2Jpbi9nbGliLWNvbmZpZworKyAgICAgZmkKKysgIGZpCisrICBpZiB0ZXN0IHgkZ2xpYl9jb25maWdfcHJlZml4ICE9IHggOyB0aGVuCisrICAgICBnbGliX2NvbmZpZ19hcmdzPSIkZ2xpYl9jb25maWdfYXJncyAtLXByZWZpeD0kZ2xpYl9jb25maWdfcHJlZml4IgorKyAgICAgaWYgdGVzdCB4JHtHTElCX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCisrICAgICAgICBHTElCX0NPTkZJRz0kZ2xpYl9jb25maWdfcHJlZml4L2Jpbi9nbGliLWNvbmZpZworKyAgICAgZmkKKysgIGZpCisrCisrICBmb3IgbW9kdWxlIGluIC4gJDQKKysgIGRvCisrICAgICAgY2FzZSAiJG1vZHVsZSIgaW4KKysgICAgICAgICBnbW9kdWxlKSAKKysgICAgICAgICAgICAgZ2xpYl9jb25maWdfYXJncz0iJGdsaWJfY29uZmlnX2FyZ3MgZ21vZHVsZSIKKysgICAgICAgICA7OworKyAgICAgICAgIGd0aHJlYWQpIAorKyAgICAgICAgICAgICBnbGliX2NvbmZpZ19hcmdzPSIkZ2xpYl9jb25maWdfYXJncyBndGhyZWFkIgorKyAgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgZG9uZQorKworKyAgQUNfUEFUSF9QUk9HKEdMSUJfQ09ORklHLCBnbGliLWNvbmZpZywgbm8pCisrICBtaW5fZ2xpYl92ZXJzaW9uPWlmZWxzZShbJDFdLCAsMC45OS43LCQxKQorKyAgQUNfTVNHX0NIRUNLSU5HKGZvciBHTElCIC0gdmVyc2lvbiA+PSAkbWluX2dsaWJfdmVyc2lvbikKKysgIG5vX2dsaWI9IiIKKysgIGlmIHRlc3QgIiRHTElCX0NPTkZJRyIgPSAibm8iIDsgdGhlbgorKyAgICBub19nbGliPXllcworKyAgZWxzZQorKyAgICBHTElCX0NGTEFHUz1gJEdMSUJfQ09ORklHICRnbGliX2NvbmZpZ19hcmdzIC0tY2ZsYWdzYAorKyAgICBHTElCX0xJQlM9YCRHTElCX0NPTkZJRyAkZ2xpYl9jb25maWdfYXJncyAtLWxpYnNgCisrICAgIGdsaWJfY29uZmlnX21ham9yX3ZlcnNpb249YCRHTElCX0NPTkZJRyAkZ2xpYl9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCisrICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDEvJ2AKKysgICAgZ2xpYl9jb25maWdfbWlub3JfdmVyc2lvbj1gJEdMSUJfQ09ORklHICRnbGliX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKKysgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMi8nYAorKyAgICBnbGliX2NvbmZpZ19taWNyb192ZXJzaW9uPWAkR0xJQl9DT05GSUcgJGdsaWJfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorKyAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wzLydgCisrICAgIGlmIHRlc3QgIngkZW5hYmxlX2dsaWJ0ZXN0IiA9ICJ4eWVzIiA7IHRoZW4KKysgICAgICBhY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKKysgICAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgorKyAgICAgIENGTEFHUz0iJENGTEFHUyAkR0xJQl9DRkxBR1MiCisrICAgICAgTElCUz0iJEdMSUJfTElCUyAkTElCUyIKKytkbmwKKytkbmwgTm93IGNoZWNrIGlmIHRoZSBpbnN0YWxsZWQgR0xJQiBpcyBzdWZmaWNpZW50bHkgbmV3LiAoQWxzbyBzYW5pdHkKKytkbmwgY2hlY2tzIHRoZSByZXN1bHRzIG9mIGdsaWItY29uZmlnIHRvIHNvbWUgZXh0ZW50CisrZG5sCisrICAgICAgcm0gLWYgY29uZi5nbGlidGVzdAorKyAgICAgIEFDX1RSWV9SVU4oWworKyNpbmNsdWRlIDxnbGliLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKworK2ludCAKKyttYWluICgpCisreworKyAgaW50IG1ham9yLCBtaW5vciwgbWljcm87CisrICBjaGFyICp0bXBfdmVyc2lvbjsKKysKKysgIHN5c3RlbSAoInRvdWNoIGNvbmYuZ2xpYnRlc3QiKTsKKysKKysgIC8qIEhQL1VYIDkgKCVAIyEpIHdyaXRlcyB0byBzc2NhbmYgc3RyaW5ncyAqLworKyAgdG1wX3ZlcnNpb24gPSBnX3N0cmR1cCgiJG1pbl9nbGliX3ZlcnNpb24iKTsKKysgIGlmIChzc2NhbmYodG1wX3ZlcnNpb24sICIlZC4lZC4lZCIsICZtYWpvciwgJm1pbm9yLCAmbWljcm8pICE9IDMpIHsKKysgICAgIHByaW50ZigiJXMsIGJhZCB2ZXJzaW9uIHN0cmluZ1xuIiwgIiRtaW5fZ2xpYl92ZXJzaW9uIik7CisrICAgICBleGl0KDEpOworKyAgIH0KKysKKysgIGlmICgoZ2xpYl9tYWpvcl92ZXJzaW9uICE9ICRnbGliX2NvbmZpZ19tYWpvcl92ZXJzaW9uKSB8fAorKyAgICAgIChnbGliX21pbm9yX3ZlcnNpb24gIT0gJGdsaWJfY29uZmlnX21pbm9yX3ZlcnNpb24pIHx8CisrICAgICAgKGdsaWJfbWljcm9fdmVyc2lvbiAhPSAkZ2xpYl9jb25maWdfbWljcm9fdmVyc2lvbikpCisrICAgIHsKKysgICAgICBwcmludGYoIlxuKioqICdnbGliLWNvbmZpZyAtLXZlcnNpb24nIHJldHVybmVkICVkLiVkLiVkLCBidXQgR0xJQiAoJWQuJWQuJWQpXG4iLCAKKysgICAgICAgICAgICAgJGdsaWJfY29uZmlnX21ham9yX3ZlcnNpb24sICRnbGliX2NvbmZpZ19taW5vcl92ZXJzaW9uLCAkZ2xpYl9jb25maWdfbWljcm9fdmVyc2lvbiwKKysgICAgICAgICAgICAgZ2xpYl9tYWpvcl92ZXJzaW9uLCBnbGliX21pbm9yX3ZlcnNpb24sIGdsaWJfbWljcm9fdmVyc2lvbik7CisrICAgICAgcHJpbnRmICgiKioqIHdhcyBmb3VuZCEgSWYgZ2xpYi1jb25maWcgd2FzIGNvcnJlY3QsIHRoZW4gaXQgaXMgYmVzdFxuIik7CisrICAgICAgcHJpbnRmICgiKioqIHRvIHJlbW92ZSB0aGUgb2xkIHZlcnNpb24gb2YgR0xJQi4gWW91IG1heSBhbHNvIGJlIGFibGUgdG8gZml4IHRoZSBlcnJvclxuIik7CisrICAgICAgcHJpbnRmKCIqKiogYnkgbW9kaWZ5aW5nIHlvdXIgTERfTElCUkFSWV9QQVRIIGVudmlyb21lbnQgdmFyaWFibGUsIG9yIGJ5IGVkaXRpbmdcbiIpOworKyAgICAgIHByaW50ZigiKioqIC9ldGMvbGQuc28uY29uZi4gTWFrZSBzdXJlIHlvdSBoYXZlIHJ1biBsZGNvbmZpZyBpZiB0aGF0IGlzXG4iKTsKKysgICAgICBwcmludGYoIioqKiByZXF1aXJlZCBvbiB5b3VyIHN5c3RlbS5cbiIpOworKyAgICAgIHByaW50ZigiKioqIElmIGdsaWItY29uZmlnIHdhcyB3cm9uZywgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBHTElCX0NPTkZJR1xuIik7CisrICAgICAgcHJpbnRmKCIqKiogdG8gcG9pbnQgdG8gdGhlIGNvcnJlY3QgY29weSBvZiBnbGliLWNvbmZpZywgYW5kIHJlbW92ZSB0aGUgZmlsZSBjb25maWcuY2FjaGVcbiIpOworKyAgICAgIHByaW50ZigiKioqIGJlZm9yZSByZS1ydW5uaW5nIGNvbmZpZ3VyZVxuIik7CisrICAgIH0gCisrICBlbHNlIGlmICgoZ2xpYl9tYWpvcl92ZXJzaW9uICE9IEdMSUJfTUFKT1JfVkVSU0lPTikgfHwKKysJICAgKGdsaWJfbWlub3JfdmVyc2lvbiAhPSBHTElCX01JTk9SX1ZFUlNJT04pIHx8CisrICAgICAgICAgICAoZ2xpYl9taWNyb192ZXJzaW9uICE9IEdMSUJfTUlDUk9fVkVSU0lPTikpCisrICAgIHsKKysgICAgICBwcmludGYoIioqKiBHTElCIGhlYWRlciBmaWxlcyAodmVyc2lvbiAlZC4lZC4lZCkgZG8gbm90IG1hdGNoXG4iLAorKwkgICAgIEdMSUJfTUFKT1JfVkVSU0lPTiwgR0xJQl9NSU5PUl9WRVJTSU9OLCBHTElCX01JQ1JPX1ZFUlNJT04pOworKyAgICAgIHByaW50ZigiKioqIGxpYnJhcnkgKHZlcnNpb24gJWQuJWQuJWQpXG4iLAorKwkgICAgIGdsaWJfbWFqb3JfdmVyc2lvbiwgZ2xpYl9taW5vcl92ZXJzaW9uLCBnbGliX21pY3JvX3ZlcnNpb24pOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBpZiAoKGdsaWJfbWFqb3JfdmVyc2lvbiA+IG1ham9yKSB8fAorKyAgICAgICAgKChnbGliX21ham9yX3ZlcnNpb24gPT0gbWFqb3IpICYmIChnbGliX21pbm9yX3ZlcnNpb24gPiBtaW5vcikpIHx8CisrICAgICAgICAoKGdsaWJfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKGdsaWJfbWlub3JfdmVyc2lvbiA9PSBtaW5vcikgJiYgKGdsaWJfbWljcm9fdmVyc2lvbiA+PSBtaWNybykpKQorKyAgICAgIHsKKysgICAgICAgIHJldHVybiAwOworKyAgICAgICB9CisrICAgICBlbHNlCisrICAgICAgeworKyAgICAgICAgcHJpbnRmKCJcbioqKiBBbiBvbGQgdmVyc2lvbiBvZiBHTElCICglZC4lZC4lZCkgd2FzIGZvdW5kLlxuIiwKKysgICAgICAgICAgICAgICBnbGliX21ham9yX3ZlcnNpb24sIGdsaWJfbWlub3JfdmVyc2lvbiwgZ2xpYl9taWNyb192ZXJzaW9uKTsKKysgICAgICAgIHByaW50ZigiKioqIFlvdSBuZWVkIGEgdmVyc2lvbiBvZiBHTElCIG5ld2VyIHRoYW4gJWQuJWQuJWQuIFRoZSBsYXRlc3QgdmVyc2lvbiBvZlxuIiwKKysJICAgICAgIG1ham9yLCBtaW5vciwgbWljcm8pOworKyAgICAgICAgcHJpbnRmKCIqKiogR0xJQiBpcyBhbHdheXMgYXZhaWxhYmxlIGZyb20gZnRwOi8vZnRwLmd0ay5vcmcuXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIElmIHlvdSBoYXZlIGFscmVhZHkgaW5zdGFsbGVkIGEgc3VmZmljaWVudGx5IG5ldyB2ZXJzaW9uLCB0aGlzIGVycm9yXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHdyb25nIGNvcHkgb2YgdGhlIGdsaWItY29uZmlnIHNoZWxsIHNjcmlwdCBpc1xuIik7CisrICAgICAgICBwcmludGYoIioqKiBiZWluZyBmb3VuZC4gVGhlIGVhc2llc3Qgd2F5IHRvIGZpeCB0aGlzIGlzIHRvIHJlbW92ZSB0aGUgb2xkIHZlcnNpb25cbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogb2YgR0xJQiwgYnV0IHlvdSBjYW4gYWxzbyBzZXQgdGhlIEdMSUJfQ09ORklHIGVudmlyb25tZW50IHRvIHBvaW50IHRvIHRoZVxuIik7CisrICAgICAgICBwcmludGYoIioqKiBjb3JyZWN0IGNvcHkgb2YgZ2xpYi1jb25maWcuIChJbiB0aGlzIGNhc2UsIHlvdSB3aWxsIGhhdmUgdG9cbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogbW9kaWZ5IHlvdXIgTERfTElCUkFSWV9QQVRIIGVudmlyb21lbnQgdmFyaWFibGUsIG9yIGVkaXQgL2V0Yy9sZC5zby5jb25mXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIHNvIHRoYXQgdGhlIGNvcnJlY3QgbGlicmFyaWVzIGFyZSBmb3VuZCBhdCBydW4tdGltZSkpXG4iKTsKKysgICAgICB9CisrICAgIH0KKysgIHJldHVybiAxOworK30KKytdLCwgbm9fZ2xpYj15ZXMsW2VjaG8gJGFjX24gImNyb3NzIGNvbXBpbGluZzsgYXNzdW1lZCBPSy4uLiAkYWNfYyJdKQorKyAgICAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKKysgICAgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKKysgICAgIGZpCisrICBmaQorKyAgaWYgdGVzdCAieCRub19nbGliIiA9IHggOyB0aGVuCisrICAgICBBQ19NU0dfUkVTVUxUKHllcykKKysgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pICAgICAKKysgIGVsc2UKKysgICAgIEFDX01TR19SRVNVTFQobm8pCisrICAgICBpZiB0ZXN0ICIkR0xJQl9DT05GSUciID0gIm5vIiA7IHRoZW4KKysgICAgICAgZWNobyAiKioqIFRoZSBnbGliLWNvbmZpZyBzY3JpcHQgaW5zdGFsbGVkIGJ5IEdMSUIgY291bGQgbm90IGJlIGZvdW5kIgorKyAgICAgICBlY2hvICIqKiogSWYgR0xJQiB3YXMgaW5zdGFsbGVkIGluIFBSRUZJWCwgbWFrZSBzdXJlIFBSRUZJWC9iaW4gaXMgaW4iCisrICAgICAgIGVjaG8gIioqKiB5b3VyIHBhdGgsIG9yIHNldCB0aGUgR0xJQl9DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIgorKyAgICAgICBlY2hvICIqKiogZnVsbCBwYXRoIHRvIGdsaWItY29uZmlnLiIKKysgICAgIGVsc2UKKysgICAgICAgaWYgdGVzdCAtZiBjb25mLmdsaWJ0ZXN0IDsgdGhlbgorKyAgICAgICAgOgorKyAgICAgICBlbHNlCisrICAgICAgICAgIGVjaG8gIioqKiBDb3VsZCBub3QgcnVuIEdMSUIgdGVzdCBwcm9ncmFtLCBjaGVja2luZyB3aHkuLi4iCisrICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAkR0xJQl9DRkxBR1MiCisrICAgICAgICAgIExJQlM9IiRMSUJTICRHTElCX0xJQlMiCisrICAgICAgICAgIEFDX1RSWV9MSU5LKFsKKysjaW5jbHVkZSA8Z2xpYi5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorK10sICAgICAgWyByZXR1cm4gKChnbGliX21ham9yX3ZlcnNpb24pIHx8IChnbGliX21pbm9yX3ZlcnNpb24pIHx8IChnbGliX21pY3JvX3ZlcnNpb24pKTsgXSwKKysgICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gY29tcGlsZWQsIGJ1dCBkaWQgbm90IHJ1bi4gVGhpcyB1c3VhbGx5IG1lYW5zIgorKyAgICAgICAgICBlY2hvICIqKiogdGhhdCB0aGUgcnVuLXRpbWUgbGlua2VyIGlzIG5vdCBmaW5kaW5nIEdMSUIgb3IgZmluZGluZyB0aGUgd3JvbmciCisrICAgICAgICAgIGVjaG8gIioqKiB2ZXJzaW9uIG9mIEdMSUIuIElmIGl0IGlzIG5vdCBmaW5kaW5nIEdMSUIsIHlvdSdsbCBuZWVkIHRvIHNldCB5b3VyIgorKyAgICAgICAgICBlY2hvICIqKiogTERfTElCUkFSWV9QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLCBvciBlZGl0IC9ldGMvbGQuc28uY29uZiB0byBwb2ludCIKKysgICAgICAgICAgZWNobyAiKioqIHRvIHRoZSBpbnN0YWxsZWQgbG9jYXRpb24gIEFsc28sIG1ha2Ugc3VyZSB5b3UgaGF2ZSBydW4gbGRjb25maWcgaWYgdGhhdCIKKysgICAgICAgICAgZWNobyAiKioqIGlzIHJlcXVpcmVkIG9uIHlvdXIgc3lzdGVtIgorKwkgIGVjaG8gIioqKiIKKysgICAgICAgICAgZWNobyAiKioqIElmIHlvdSBoYXZlIGFuIG9sZCB2ZXJzaW9uIGluc3RhbGxlZCwgaXQgaXMgYmVzdCB0byByZW1vdmUgaXQsIGFsdGhvdWdoIgorKyAgICAgICAgICBlY2hvICIqKiogeW91IG1heSBhbHNvIGJlIGFibGUgdG8gZ2V0IHRoaW5ncyB0byB3b3JrIGJ5IG1vZGlmeWluZyBMRF9MSUJSQVJZX1BBVEgiCisrICAgICAgICAgIGVjaG8gIioqKiIKKysgICAgICAgICAgZWNobyAiKioqIElmIHlvdSBoYXZlIGEgUmVkSGF0IDUuMCBzeXN0ZW0sIHlvdSBzaG91bGQgcmVtb3ZlIHRoZSBHVEsgcGFja2FnZSB0aGF0IgorKyAgICAgICAgICBlY2hvICIqKiogY2FtZSB3aXRoIHRoZSBzeXN0ZW0gd2l0aCB0aGUgY29tbWFuZCIKKysgICAgICAgICAgZWNobyAiKioqIgorKyAgICAgICAgICBlY2hvICIqKiogICAgcnBtIC0tZXJhc2UgLS1ub2RlcHMgZ3RrIGd0ay1kZXZlbCIgXSwKKysgICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gZmFpbGVkIHRvIGNvbXBpbGUgb3IgbGluay4gU2VlIHRoZSBmaWxlIGNvbmZpZy5sb2cgZm9yIHRoZSIKKysgICAgICAgICAgZWNobyAiKioqIGV4YWN0IGVycm9yIHRoYXQgb2NjdXJlZC4gVGhpcyB1c3VhbGx5IG1lYW5zIEdMSUIgd2FzIGluY29ycmVjdGx5IGluc3RhbGxlZCIKKysgICAgICAgICAgZWNobyAiKioqIG9yIHRoYXQgeW91IGhhdmUgbW92ZWQgR0xJQiBzaW5jZSBpdCB3YXMgaW5zdGFsbGVkLiBJbiB0aGUgbGF0dGVyIGNhc2UsIHlvdSIKKysgICAgICAgICAgZWNobyAiKioqIG1heSB3YW50IHRvIGVkaXQgdGhlIGdsaWItY29uZmlnIHNjcmlwdDogJEdMSUJfQ09ORklHIiBdKQorKyAgICAgICAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKKysgICAgICAgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKKysgICAgICAgZmkKKysgICAgIGZpCisrICAgICBHTElCX0NGTEFHUz0iIgorKyAgICAgR0xJQl9MSUJTPSIiCisrICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorKyAgZmkKKysgIEFDX1NVQlNUKEdMSUJfQ0ZMQUdTKQorKyAgQUNfU1VCU1QoR0xJQl9MSUJTKQorKyAgcm0gLWYgY29uZi5nbGlidGVzdAorK10pCitJbmRleDogYmlzb24tMi40LjIvbTQvaXNjLXBvc2l4Lm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMi40LjIvbTQvaXNjLXBvc2l4Lm00CitAQCAtMCwwICsxLDI2IEBACisrIyBpc2MtcG9zaXgubTQgc2VyaWFsIDIgKGdldHRleHQtMC4xMS4yKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworKyMgVGhpcyBmaWxlIGlzIG5vdCBuZWVkZWQgd2l0aCBhdXRvY29uZi0yLjUzIGFuZCBuZXdlci4gIFJlbW92ZSBpdCBpbiAyMDA1LgorKworKyMgVGhpcyB0ZXN0IHJlcGxhY2VzIHRoZSBvbmUgaW4gYXV0b2NvbmYuCisrIyBDdXJyZW50bHkgdGhpcyBtYWNybyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIHRoZSBhdXRvY29uZiBtYWNybworKyMgYmVjYXVzZSBnZXR0ZXh0J3MgZ2V0dGV4dC5tNCAoZGlzdHJpYnV0ZWQgaW4gdGhlIGF1dG9tYWtlIHBhY2thZ2UpCisrIyBzdGlsbCB1c2VzIGl0LiAgT3RoZXJ3aXNlLCB0aGUgdXNlIGluIGdldHRleHQubTQgbWFrZXMgYXV0b2hlYWRlcgorKyMgZ2l2ZSB0aGVzZSBkaWFnbm9zdGljczoKKysjICAgY29uZmlndXJlLmluOjU1NjogQUNfVFJZX0NPTVBJTEUgd2FzIGNhbGxlZCBiZWZvcmUgQUNfSVNDX1BPU0lYCisrIyAgIGNvbmZpZ3VyZS5pbjo1NTY6IEFDX1RSWV9SVU4gd2FzIGNhbGxlZCBiZWZvcmUgQUNfSVNDX1BPU0lYCisrCisrdW5kZWZpbmUoW0FDX0lTQ19QT1NJWF0pCisrCisrQUNfREVGVU4oW0FDX0lTQ19QT1NJWF0sCisrICBbCisrICAgIGRubCBUaGlzIHRlc3QgcmVwbGFjZXMgdGhlIG9ic29sZXNjZW50IEFDX0lTQ19QT1NJWCBrbHVkZ2UuCisrICAgIEFDX0NIRUNLX0xJQihjcG9zaXgsIHN0cmVycm9yLCBbTElCUz0iJExJQlMgLWxjcG9zaXgiXSkKKysgIF0KKyspCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbl8yLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbl8yLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgyZTg4MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uXzIuMy5iYgpAQCAtMCwwICsxLDI2IEBACitTVU1NQVJZID0gIkdOVSBQcm9qZWN0IHBhcnNlciBnZW5lcmF0b3IgKHlhY2MgcmVwbGFjZW1lbnQpIgorREVTQ1JJUFRJT04gPSAiQmlzb24gaXMgYSBnZW5lcmFsLXB1cnBvc2UgcGFyc2VyIGdlbmVyYXRvciB0aGF0IGNvbnZlcnRzIGFuIGFubm90YXRlZCBjb250ZXh0LWZyZWUgZ3JhbW1hciBpbnRvIFwKK2FuIExBTFIoMSkgb3IgR0xSIHBhcnNlciBmb3IgdGhhdCBncmFtbWFyLiAgQmlzb24gaXMgdXB3YXJkIGNvbXBhdGlibGUgd2l0aCBZYWNjOiBhbGwgcHJvcGVybHktd3JpdHRlbiBZYWNjIFwKK2dyYW1tYXJzIG91Z2h0IHRvIHdvcmsgd2l0aCBCaXNvbiB3aXRoIG5vIGNoYW5nZS4gQW55b25lIGZhbWlsaWFyIHdpdGggWWFjYyBzaG91bGQgYmUgYWJsZSB0byB1c2UgQmlzb24gd2l0aCBcCitsaXR0bGUgdHJvdWJsZS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYmlzb24vIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIgorU0VDVElPTiA9ICJkZXZlbCIKK0RFUEVORFMgPSAiYmlzb24tbmF0aXZlIGZsZXgtbmF0aXZlIgorCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2Jpc29uL2Jpc29uLSR7UFZ9LnRhci5neiBcCisgICAgICAgICBmaWxlOi8vYmlzb24tMi4zX200LnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjIzMjdlZmRkNTA4MGUyYjFhY2I2ZTU2MGEwNGI0M2EiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTJmNzhhYTQ3NjFhNzRjZWI3ZmRmNzcwZjM1NTRkZDg0MzA4YzNiOTNjNDI1NWUzYTVjMTc1NThlY2RhMjkzZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCithY3BhdGhzID0gIi1JICR7U30vbTQiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlybSAtZiAke1N9L200LypnbC5tNAorCWNwICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ2V0dGV4dC9wby9NYWtlZmlsZS5pbi5pbiAke1N9L3J1bnRpbWUtcG8vCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbl8zLjAuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uXzMuMC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwOGU5YTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbl8zLjAuNC5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIkdOVSBQcm9qZWN0IHBhcnNlciBnZW5lcmF0b3IgKHlhY2MgcmVwbGFjZW1lbnQpIgorREVTQ1JJUFRJT04gPSAiQmlzb24gaXMgYSBnZW5lcmFsLXB1cnBvc2UgcGFyc2VyIGdlbmVyYXRvciB0aGF0IGNvbnZlcnRzIGFuIGFubm90YXRlZCBjb250ZXh0LWZyZWUgZ3JhbW1hciBpbnRvIFwKK2FuIExBTFIoMSkgb3IgR0xSIHBhcnNlciBmb3IgdGhhdCBncmFtbWFyLiAgQmlzb24gaXMgdXB3YXJkIGNvbXBhdGlibGUgd2l0aCBZYWNjOiBhbGwgcHJvcGVybHktd3JpdHRlbiBZYWNjIFwKK2dyYW1tYXJzIG91Z2h0IHRvIHdvcmsgd2l0aCBCaXNvbiB3aXRoIG5vIGNoYW5nZS4gQW55b25lIGZhbWlsaWFyIHdpdGggWWFjYyBzaG91bGQgYmUgYWJsZSB0byB1c2UgQmlzb24gd2l0aCBcCitsaXR0bGUgdHJvdWJsZS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYmlzb24vIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorU0VDVElPTiA9ICJkZXZlbCIKK0RFUEVORFMgPSAiYmlzb24tbmF0aXZlIGZsZXgtbmF0aXZlIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYmlzb24vYmlzb24tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL200LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1zcmMtbG9jYWwubWstZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoIFwKKyIKKworIyBObyBwb2ludCBpbiBoYXJkY29kaW5nIHBhdGggdG8gbTQsIGp1c3QgdXNlIFBBVEgKK0VYVFJBX09FQ09ORiArPSAiTTQ9bTQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjMzQyMjAxZGUxMDRjYzljZTBhMjFlMGFkMTBkNDAyMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhNzI0MjhjNzkxN2JkZjlmYTkzY2I4MTgxYzk3MWI2ZTIyODM0MTI1ODQ4Y2YxZDAzY2UxMGIxYmIwNzE2ZmUxIgorCitMREZMQUdTX3ByZXBlbmRfbGliYy11Y2xpYmMgPSAiIC1scnQgIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiZ2V0dGV4dC1taW5pbWFsLW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCithY3BhdGhzID0gIi1JICR7U30vbTQiCisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKwlmb3IgaSBpbiBtZmNhbGMgY2FsYysrIHJwY2FsYzsgZG8gbWtkaXIgLXAgJHtCfS9leGFtcGxlcy8kaTsgZG9uZQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vYmlzb24gXAorCQlCSVNPTl9QS0dEQVRBRElSPSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vYmlzb24KK30KK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jvb3RjaGFydDIvYm9vdGNoYXJ0Mi9ib290Y2hhcnRkX3N0b3Auc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ib290Y2hhcnQyL2Jvb3RjaGFydDIvYm9vdGNoYXJ0ZF9zdG9wLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYTc4ODcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ib290Y2hhcnQyL2Jvb3RjaGFydDIvYm9vdGNoYXJ0ZF9zdG9wLnNoCkBAIC0wLDAgKzEsMTggQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgYm9vdGNoYXJ0ZF9zdG9wCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkcmVtb3RlX2ZzICRhbGwKKyMgUmVxdWlyZWQtU3RvcDogCisjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IFN0b3AgYm9vdGNoYXJ0ZCBjb2xsZWN0aW9uCisjIERlc2NyaXB0aW9uOiAgICAgICBUaGlzIHNjcmlwdCBhY2NvbXBhbmllcyBib290Y2hhcnRkIGZyb20gYm9vdGNoYXJ0Mi4gCisjICAgICAgICAgICAgICAgICAgICBib290Y2hhcnRkIHNob3VsZCBzdG9wIGRldGVjdCB0aGUgZW5kIG9mIHRoZSBib290IHByb2Nlc3MKKyMgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgaWYgYSB3aW5kb3cgbWFuYWdlciBpcyBsYXVuY2hlZCwgYnV0IGZvcgorIyAgICAgICAgICAgICAgICAgICAgY29tbWFuZC1saW5lIG9ubHkgb3BlcmF0aW5nIHN5c3RlbXMsIHRoaXMgc2NyaXB0IHNob3VsZCBiZQorIyAgICAgICAgICAgICAgICAgICAgdXNlZCBpbnN0ZWFkLgorIyMjIEVORCBJTklUIElORk8KKworL3NiaW4vYm9vdGNoYXJ0ZCBzdG9wCisKKzogZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ib290Y2hhcnQyL2Jvb3RjaGFydDJfMC4xNC43LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYm9vdGNoYXJ0Mi9ib290Y2hhcnQyXzAuMTQuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjBhOTgwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYm9vdGNoYXJ0Mi9ib290Y2hhcnQyXzAuMTQuNy5iYgpAQCAtMCwwICsxLDE1NCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTMgTEcgRWxlY3Ryb25pY3MsIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDE0IEludGVsIENvcnAuCisKKyMgVGhpcyByZWNpcGUgY3JlYXRlcyBwYWNrYWdlcyBmb3IgdGhlIGJvb3RjaGFydDIgc3lzdGVtLXdpZGUgcHJvZmlsZXIgZGFlbW9uIAorIyBhbmQgcmVsYXRlZCB1dGlsaXRpZXMuIERlcGVuZGluZyBvbiB0aGUgaW1hZ2VzIHlvdSdyZSBidWlsZGluZywgYWRkaXRpb25hbAorIyBjb25maWd1cmF0aW9uIG1heSBiZSBuZWVkZWQgaW4gb3JkZXIgdG8gdXNlIGl0LgorIworIyBQYWNrYWdlczoKKyMgICAqICAgYm9vdGNoYXJ0MiAtIFRoZSBkYWVtb24gaXRzZWxmLgorIyAgICogICBweWJvb3RjaGFydGd1aSAtIFB5dGhvbiBwcm9ncmFtIHRvIHZpc3VhbGl6ZSBhbmQgZGlzcGxheSB0aGUgZGF0YQorIyAgICAgICBjb2xsZWN0ZWQgYnkgYm9vdGNoYXJ0MiBvciBjb21wYXRpYmxlIGRhZW1vbnMgc3VjaCBhcyB0aGUgb3JpZ2luYWwgCisjICAgICAgIGJvb3RjaGFydC4KKyMgICAqICAgYm9vdGNoYXJ0ZC1zdG9wLWluaXRzY3JpcHQgLSBBIFN5c1YgaW5pdCBzY3JpcHQgdG8gc3RvcCBkYXRhIGNvbGxlY3Rpb24KKyMgICAgICAgd2hlbiBib290aW5nIGNvbXBsZXRlcyAoc2VlIGJlbG93IGZvciBkZXRhaWxzLikKKyMKKyMgV2hpbGUgYm9vdGNoYXJ0MiBpcyBkZXNpZ25lZCB0byBzdG9wIGNvbGxlY3RpbmcgZGF0YSByb3VnaGx5IHdoZW4gdGhlIGJvb3QgCisjIHByb2Nlc3MgY29tcGxldGVzLCBpdCBpcyBub3QgZXhhY3RseSBhIHN0b3B3YXRjaC4gSXQgaGFzIGEgbGlzdCBvZiBwcm9ncmFtcyAKKyMgd2hpY2ggYXJlIHN1cHBvc2VkIHNpZ25pZnkgdGhhdCB0aGUgYm9vdCBwcm9jZXNzIGhhcyBjb21wbGV0ZWQgKGZvciBleGFtcGxlLAorIyBvcGVuYm94IG9yIGdub21lLXNoZWxsLCkgYnV0IGl0IHdhaXRzIGEgZnVsbCAyMCBzZWNvbmRzIGFmdGVyIHN1Y2ggYSBwcm9ncmFtCisjIGlzIGxhdW5jaGVkIGJlZm9yZSBzdG9wcGluZyBpdHNlbGYsIHRvIGNvbGxlY3QgYWRkaXRpb25hbCBkYXRhLgorIworIyBJZiB5b3UgYXJlIHVzaW5nIGEgd2luZG93IG1hbmFnZXIgb3IgR1VJIHdoaWNoIGlzbid0IGluY2x1ZGVkIGluIGJvb3RjaGFydDIncworIyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZSwgeW91IHNob3VsZCB3cml0ZSBiYmFwcGVuZCBmaWxlIHRvIGFtZW5kCisjIGJvb3RjaGFydGQuY29uZiBhbmQgYWRkIGl0IHRvIEVYSVRfUFJPQy4gQW4gZXhhbXBsZSBvZiB0aGlzIGlzIHNob3duIGluIHRoaXMKKyMgcmVjaXBlLCB3aGVyZSB0aGUgTWF0Y2hib3ggd2luZG93IG1hbmFnZXIgKHVzZWQgYnkgU2F0bykgaXMgYWRkZWQuCisjCisjIElmIHlvdSB3YW50IGRhdGEgY29sbGVjdGlvbiB0byBlbmQgYXQgYSBjZXJ0YWluIHBvaW50IGV4YWN0bHksIHlvdSBzaG91bGQKKyMgYXJyYW5nZSBmb3IgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGJlIHJ1bjoKKyMgICBib290Y2hhcnRkIHN0b3AKKyMgWW91IG1pZ2h0IHNldCB0aGlzIGNvbW1hbmQgdG8gYmUgbGF1bmNoZWQgYnkgdGhlIGRlc2t0b3AgZW52aXJvbm1lbnQgc2hpcHBlZAorIyBvbiB0aGUgaW1hZ2UgeW91J3JlIGJ1aWxkaW5nIGFmdGVyIHRoZSBvdGhlciBzdGFydHVwIHByb2dyYW1zIGFyZSBjb21wbGV0ZS4KKyMgVGhpcyB3aWxsIG5vdCBpbmN1ciB0aGUgMjAgc2Vjb25kIHdhaXQgcGVyaW9kIGFuZCB3aWxsIGNhdXNlIGJvb3RjaGFydDIgdG8KKyMgYmVoYXZlIGEgYml0IG1vcmUgbGlrZSBhIHN0b3B3YXRjaC4gQW4gZXhhbXBsZSBvZiB0aGlzIGlzIHNob3duIGluIHRoaXMgCisjIHJlY2lwZSwgc3BlY2lmaWNhbGx5IHRoZSBib290Y2hhcnRkLXN0b3AtaW5pdHNjcmlwdCBwYWNrYWdlLCB3aGljaCBzdG9wcyBkYXRhCisjIGNvbGxlY3Rpb24gYXMgdGhlIGxhc3QgYWN0aW9uIHdoZW4gc3dpdGNoaW5nIHRvIHJ1bmxldmVscyAyIHRocm91Z2ggNS4gWW91IGNhbgorIyBhZGQgYm9vdGNoYXJ0ZC1zdG9wLWluaXRzY3JpcHQgdG8gSU1BR0VfSU5TVEFMTCBpZiB5b3UgbmVlZCB0byB1c2UgaXQuCisjCisjIFVubGVzcyB5b3UncmUgZG9pbmcgc29tZXRoaW5nIHNwZWNpYWwsIGlmIHlvdXIgaW1hZ2UgZG9lcyBub3QgbGF1bmNoIGFuIFggCisjIHdpbmRvdyBtYW5hZ2VyLCB5b3Ugd2lsbCBuZWVkIHRvIGFkZCBib290Y2hhcnRkLXN0b3AtaW5pdHNjcmlwdCB0byB5b3VyIGltYWdlLgorIworIyBCb290Y2hhcnQyIGNhbiBiZSBzdGFydGVkIGluIHR3byB3YXlzLiBEYXRhIGNvbGxlY3Rpb24gY2FuIGJlIGluaXRpYXRlZCBieQorIyBydW5uaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKyMgICBib290Y2hhcnRkIHN0YXJ0CisjIEhvd2V2ZXIsIGZvciB0aGUgbW9zdCBjb21wbGV0ZSBkYXRhLCB0aGUgYm9vdGNoYXJ0MiBkZXZlbG9wZXJzIHJlY29tbWVuZAorIyBydW5uaW5nIGl0IGFzIFBJRCAxLiBUaGlzIGNhbiBiZSBkb25lIGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nIHRvIHRoZSBrZXJuZWwgCisjIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIGluIHRoZSBib290bG9hZGVyIHNldHVwOgorIyAgIGluaXQ9L3NiaW4vYm9vdGNoYXJ0ZAorIyBXaGVuIGludm9rZWQgdGhpcyB3YXksIGJvb3RjaGFydDIgd2lsbCBzZXQgaXRzZWxmIHVwIGFuZCB0aGVuIGF1dG9tYXRpY2FsbHkgCisjIHJ1biAvc2Jpbi9pbml0LiBGb3IgZXhhbXBsZSwgd2hlbiBib290aW5nIHRoZSBkZWZhdWx0IHFlbXV4ODYgaW1hZ2UsIG9uZSBtaWdodAorIyB1c2UgYSBjb21tYW5kIGxpa2UgdGhpczoKKyMgICBydW5xZW11IHFlbXV4ODYgYm9vdHBhcmFtcz0iaW5pdGNhbGxfZGVidWcgcHJpbnRrLnRpbWU9eSBxdWlldCBcCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXQ9L3NiaW4vYm9vdGNoYXJ0ZCIKKyMKKyMgTmVpdGhlciBtZXRob2QgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQgaGVyZSwgY2hvb3NlIHdoYXQgd29ya3MgZm9yIHlvdS4KKyMKKyMgSWYgeW91IGFyZSBidWlsZGluZyB5b3VyIGltYWdlIHdpdGggc3lzdGVtZCBpbnN0ZWFkIG9mIFN5c1YgaW5pdCwgYm9vdGNoYXJ0MgorIyBpbmNsdWRlcyBzeXN0ZW1kIHNlcnZpY2UgZmlsZXMgdG8gYmVnaW4gY29sbGVjdGlvbiBhdXRvbWF0aWNhbGx5IGF0IGJvb3QgYW5kIAorIyBlbmQgY29sbGVjdGlvbiBhdXRvbWF0aWNhbGx5IDIwIHNlY29uZHMgYWZ0ZXIgdGhlIGJvb3QgcHJvY2VzcyBoYXMgY29tcGxldGVkLgorIyBIb3dldmVyLCBiZSBhd2FyZSB0aGF0IHN5c3RlbWQgdGVuZHMgdG8gc3RhcnQgYm9vdGNoYXJ0MiByZWxhdGl2ZWx5IGxhdGUgaW50bworIyB0aGUgYm9vdCBwcm9jZXNzLCBzbyBpdCdzIGhpZ2hseSByZWNvbW1lbmRlZCB0byB1c2UgYm9vdGNoYXJ0MiBhcyBQSUQgMS4gSWYgCisjIHlvdSdyZSB1c2luZyBzeXN0ZW1kIGFuZCB5b3Ugd2lzaCB0byB1c2UgYW5vdGhlciBtZXRob2QgdG8gc3RvcCBkYXRhCisjIGNvbGxlY3Rpb24gYXQgYSB0aW1lIG9mIHlvdXIgY2hvb3NpbmcsIHlvdSBtYXkgZG8gc28gYXMgbG9uZyBhcyB5b3UgZ2V0IHRvIGl0CisjIGJlZm9yZSB0aGUgMjAgc2Vjb25kIHRpbWVvdXQgb2YgdGhlIHN5c3RlbWQgc2VydmljZSBmaWxlcy4gQWxzbywgeW91IG1heSB3cml0ZQorIyBhIGJiYXBwZW5kIHRvIHBhdGNoIGJvb3RjaGFydDItZG9uZS50aW1lci5pbiB0byBpbmNyZWFzZSBvciBkZWNyZWFzZSB0aGUKKyMgdGltZW91dC4gRGVjcmVhc2luZyBpdCB0byAwIHdpbGwgbWFrZSBpdCBiZWhhdmUgbGlrZQorIyBib290Y2hhcnRkLXN0b3AtaW5pdHNjcmlwdC4KKyMKKyMgQnkgZGVmYXVsdCwgd2hlbiBkYXRhIGNvbGxlY3Rpb24gaXMgc3RvcHBlZCwgYSBmaWxlIG5hbWVkIGJvb3RjaGFydC50Z3ogd2lsbAorIyBiZSBjcmVhdGVkIGluIC92YXIvbG9nLiBJZiBweWJvb3RjaGFydGd1aSBpcyBpbmNsdWRlZCBpbiB5b3VyIGltYWdlLAorIyBib290Y2hhcnQucG5nIHdpbGwgYWxzbyBiZSBjcmVhdGVkIGF0IHRoZSBzYW1lIHRpbWUuIEhvd2V2ZXIsIHRoaXMgcmVzdWx0cyBpbgorIyBhIG5vdGljZWFibGUgaGl0Y2ggb3IgcGF1c2UgYXQgYm9vdCB0aW1lLCB3aGljaCBtYXkgbm90IGJlIHdoYXQgeW91IHdhbnQgb24gYW4KKyMgZW1iZWRkZWQgZGV2aWNlLiBTbyB5b3UgbWF5IHByZWZlciB0byBvbWl0IHB5Ym9vdGNoYXJ0Z3VpIGZyb20geW91ciBpbWFnZS4gSW4KKyMgdGhhdCBjYXNlLCBjb3B5IGJvb3RjaGFydC50Z3ogb3ZlciB0byB5b3VyIGRldmVsb3BtZW50IHN5c3RlbSBhbmQgZ2VuZXJhdGUKKyMgYm9vdGNoYXJ0LnBuZyB0aGVyZS4gVG8gZ2V0IHB5Ym9vdGNoYXJ0Z3VpIG9uIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtLCB5b3UgY2FuCisjIGVpdGhlciBpbnN0YWxsIGl0IGRpcmVjdGx5IGZyb20gc29tZSBvdGhlciBzb3VyY2UsIG9yIGJ1aWxkIGJvb3RjaGFydDItbmF0aXZlCisjIGFuZCBmaW5kIHB5Ym9vdGNoYXJ0Z3VpIGluIHRoZSBuYXRpdmUgc3lzcm9vdDoKKyMgICAgYml0YmFrZSBib290Y2hhcnQyLW5hdGl2ZQorIyAgIC4vdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvYmluL3B5Ym9vdGNoYXJ0Z3VpIC9wYXRoL3RvL2Jvb3RjaGFydC50Z3oKKyMgTm90ZSB0aGF0LCB3aGV0aGVyIGluc3RhbGxlZCBvbiB5b3VyIGJ1aWxkIHN5c3RlbSBvciBvbiB5b3VyIGltYWdlLCB0aGUgCisjIHB5Ym9vdGNoYXJ0Z3VpIHByb3ZpZGVkIGJ5IHRoaXMgcmVjaXBlIGRvZXMgbm90IHN1cHBvcnQgdGhlIC1pIG9wdGlvbi4gWW91IAorIyB3aWxsIG5lZWQgdG8gaW5zdGFsbCBweWJvb3RjaGFydGd1aSBieSBvdGhlciBtZWFucyBpbiBvcmRlciB0byBydW4gaXQgaW4KKyMgaW50ZXJhY3RpdmUgbW9kZS4KKworU1VNTUFSWSA9ICJCb290aW5nIHNlcXVlbmNlIGFuZCBDUFUsSS9PIHVzYWdlIG1vbml0b3IiCitERVNDUklQVElPTiA9ICJNb25pdG9ycyB3aGVyZSB0aGUgc3lzdGVtIHNwZW5kcyBpdHMgdGltZSBhdCBzdGFydCwgY3JlYXRpbmcgYSBncmFwaCBvZiBhbGwgcHJvY2Vzc2VzLCBkaXNrIHV0aWxpemF0aW9uLCBhbmQgd2FpdCB0aW1lLiIKK0FVVEhPUiA9ICJXb25ob25nIEt3b24gPHdvbmhvbmcua3dvbkBsZ2UuY29tPiIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9tbWVla3MvYm9vdGNoYXJ0IgorTElDRU5TRSA9ICJHUEwtMy4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDRhYzQ2NzgzMTEyNTRkYjYyZWRmOGZkMzljYjgxMjQiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9tbWVla3MvYm9vdGNoYXJ0LmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9ib290Y2hhcnRkX3N0b3Auc2ggXAorICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKK1NSQ1JFViA9ICI2ZjA1MGI2NWFlOWYyNjY2NDVmMDRmMGFlY2FiOWVmYjg4Mzc1ZjFjIgorCitpbmhlcml0IHN5c3RlbWQKK2luaGVyaXQgdXBkYXRlLXJjLmQKK2luaGVyaXQgcHl0aG9ubmF0aXZlCisKKyMgVGhlIG9ubHkgcmVhc29uIHRvIGJ1aWxkIGJvb3RjaGFydDItbmF0aXZlIGlzIGZvciBhIG5hdGl2ZSBweWJvb3RjaGFydGd1aS4KK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiYm9vdGNoYXJ0Mi5zZXJ2aWNlIGJvb3RjaGFydDItZG9uZS5zZXJ2aWNlIGJvb3RjaGFydDItZG9uZS50aW1lciIKKworVVBEQVRFUkNQTiA9ICJib290Y2hhcnRkLXN0b3AtaW5pdHNjcmlwdCIKK0lOSVRTQ1JJUFRfTkFNRSA9ICJib290Y2hhcnRkX3N0b3Auc2giCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCA5OSAyIDMgNCA1IC4iCisKKyMgV2Ugd2FudCBuYXRpdmUgcHlib290Y2hhcnRndWkgdG8gZXhlY3V0ZSB3aXRoIHRoZSBjb3JyZWN0IFB5dGhvbiBpbnRlcnBldGVyLgorZG9fY29tcGlsZV9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKyAgICBlY2hvICIjISAke1BZVEhPTn0iIHwgY2F0IC0gJHtTfS9weWJvb3RjaGFydGd1aS5weSA+ICR7V09SS0RJUn0vdGVtcF9weWJvb3RjaGFydGd1aQorICAgIG12ICR7V09SS0RJUn0vdGVtcF9weWJvb3RjaGFydGd1aSAke1N9L3B5Ym9vdGNoYXJ0Z3VpLnB5CisgICAgY2htb2QgK3ggJHtTfS9weWJvb3RjaGFydGd1aQorfQorCitkb19jb21waWxlX3ByZXBlbmQgKCkgeworICAgIGV4cG9ydCBQWV9MSUJESVI9IiR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9IgorICAgIGV4cG9ydCBCSU5ESVI9IiR7YmluZGlyfSIKKyAgICBleHBvcnQgTElCRElSPSIke2Jhc2VfbGliZGlyfSIKK30KKworZG9faW5zdGFsbCAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfSAjIG5lZWRlZCBmb3IgLW5hdGl2ZQorICAgIGV4cG9ydCBQWV9MSUJESVI9IiR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9IgorICAgIGV4cG9ydCBCSU5ESVI9IiR7YmluZGlyfSIKKyAgICBleHBvcnQgREVTVERJUj0iJHtEfSIKKyAgICBleHBvcnQgTElCRElSPSIke2Jhc2VfbGliZGlyfSIKKworICAgIG9lX3J1bm1ha2UgaW5zdGFsbAorICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vYm9vdGNoYXJ0ZF9zdG9wLnNoICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCisgICAgZWNobyAnRVhJVF9QUk9DPSIkRVhJVF9QUk9DIG1hdGNoYm94LXdpbmRvdy1tYW5hZ2VyIicgPj4gJHtEfSR7c3lzY29uZmRpcn0vYm9vdGNoYXJ0ZC5jb25mCit9CisKK1BBQ0tBR0VTID0rICJweWJvb3RjaGFydGd1aSIKK0ZJTEVTX3B5Ym9vdGNoYXJ0Z3VpICs9ICIke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3B5Ym9vdGNoYXJ0Z3VpICR7YmluZGlyfS9weWJvb3RjaGFydGd1aSIKK1JERVBFTkRTX3B5Ym9vdGNoYXJ0Z3VpID0gInB5dGhvbi1weWNhaXJvIHB5dGhvbi1jb21wcmVzc2lvbiBweXRob24taW1hZ2UgcHl0aG9uLXRleHR1dGlscyBweXRob24tc2hlbGwgcHl0aG9uLWNvbXByZXNzaW9uIHB5dGhvbi1jb2RlY3MiCitSREVQRU5EU18ke1BOfV9jbGFzcy10YXJnZXQgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCAnc3lzdmluaXQtcGlkb2YnLCAncHJvY3BzJywgZCl9IgorUkRFUEVORFNfJHtQTn1fY2xhc3MtdGFyZ2V0ICs9ICJsc2IiCitERVBFTkRTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIHB5dGhvbi1weWNhaXJvLW5hdGl2ZSIKKworUEFDS0FHRVMgPSsgImJvb3RjaGFydGQtc3RvcC1pbml0c2NyaXB0IgorRklMRVNfYm9vdGNoYXJ0ZC1zdG9wLWluaXRzY3JpcHQgKz0gIiR7c3lzY29uZmRpcn0vaW5pdC5kICR7c3lzY29uZmRpcn0vcmMqLmQiCisKK0ZJTEVTXyR7UE59ICs9ICIke2Jhc2VfbGliZGlyfS9ib290Y2hhcnQvYm9vdGNoYXJ0LWNvbGxlY3RvciIKK0ZJTEVTXyR7UE59ICs9ICIke2Jhc2VfbGliZGlyfS9ib290Y2hhcnQvdG1wZnMiCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9IgorRklMRVNfJHtQTn0tZGJnICs9ICIke2Jhc2VfbGliZGlyfS9ib290Y2hhcnQvLmRlYnVnIgorRklMRVNfJHtQTn0tZG9jICs9ICIke2RhdGFkaXJ9L2RvY3MiCisKK1JDT05GTElDVFNfJHtQTn0gPSAiYm9vdGNoYXJ0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnRyZnMtdG9vbHMvYnRyZnMtdG9vbHMvZml4LXBhcmFsbGVsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnRyZnMtdG9vbHMvYnRyZnMtdG9vbHMvZml4LXBhcmFsbGVsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYzUzYzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idHJmcy10b29scy9idHJmcy10b29scy9maXgtcGFyYWxsZWwucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSAzNzNlYjUxMzI4YjVlMTA1Mjk3NjNjYWQ0NDEyMTBlNmIwZWZiMjRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDExIEZlYiAyMDE1IDIyOjA4OjQxIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIE1ha2VmaWxlOiBmaXggZm9yIHBhcmFsbGVsIGJ1aWxkCisKK0ZpeGVkOgorbWtmcy5jOjMwMDo0NjogZXJyb3I6ICdCVFJGU19CVUlMRF9WRVJTSU9OJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikKKyAgZnByaW50ZihzdGRlcnIsICJta2ZzLmJ0cmZzLCBwYXJ0IG9mICVzXG4iLCBCVFJGU19CVUlMRF9WRVJTSU9OKTsKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCA4NjBhMzkwLi44YTZmYmQ3IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMTQyLDcgKzE0Miw3IEBAIGVsc2UKKyAJY2hlY2tfZWNobyA9IHRydWUKKyBlbmRpZgorIAorLSUuby5kOiAlLmMKKyslLm8uZDogJS5jIHZlcnNpb24uaAorIAkkKFEpJChDQykgLU1NIC1NRyAtTUYgJEAgLU1UICQoQDouby5kPS5vKSAtTVQgJChAOi5vLmQ9LnN0YXRpYy5vKSAtTVQgJEAgJChDRkxBR1MpICQ8CisgCisgLmMubzoKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idHJmcy10b29scy9idHJmcy10b29sc180LjEuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J0cmZzLXRvb2xzL2J0cmZzLXRvb2xzXzQuMS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YzYyMmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idHJmcy10b29scy9idHJmcy10b29sc180LjEuMi5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkNoZWNrc3VtbWluZyBDb3B5IG9uIFdyaXRlIEZpbGVzeXN0ZW0gdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiQnRyZnMgaXMgYSBuZXcgY29weSBvbiB3cml0ZSBmaWxlc3lzdGVtIGZvciBMaW51eCBhaW1lZCBhdCBcCitpbXBsZW1lbnRpbmcgYWR2YW5jZWQgZmVhdHVyZXMgd2hpbGUgZm9jdXNpbmcgb24gZmF1bHQgdG9sZXJhbmNlLCByZXBhaXIgYW5kIFwKK2Vhc3kgYWRtaW5pc3RyYXRpb24uIFwKK1RoaXMgcGFja2FnZSBjb250YWlucyB1dGlsaXRpZXMgKG1rZnMsIGZzY2ssIGJ0cmZzY3RsKSB1c2VkIHRvIHdvcmsgd2l0aCBcCitidHJmcyBhbmQgYW4gdXRpbGl0eSAoYnRyZnMtY29udmVydCkgdG8gbWFrZSBhIGJ0cmZzIGZpbGVzeXN0ZW0gZnJvbSBhbiBleHQzLiIKKworSE9NRVBBR0UgPSAiaHR0cHM6Ly9idHJmcy53aWtpLmtlcm5lbC5vcmciCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mY2IwMmRjNTUyYTA0MWRlZTI3ZTRiODVjNzM5NjA2NyIKK1NFQ1RJT04gPSAiYmFzZSIKK0RFUEVORFMgPSAidXRpbC1saW51eCBhdHRyIGUyZnNwcm9ncyBsem8gYWNsIgorCitTUkNSRVYgPSAiN2YxMzI4Y2NiNWQxNTllZmU4NTBkNGVhZWE5YjQ5YmJlOGM0MTgxZSIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2tkYXZlL2J0cmZzLXByb2dzLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcGFyYWxsZWwucGF0Y2ggXAorIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWRvY3VtZW50YXRpb24iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICAgc2ggYXV0b2dlbi5zaAorfQorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvYnVpbGQtY29tcGFyZV9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2J1aWxkLWNvbXBhcmVfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYzM3ODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2J1aWxkLWNvbXBhcmVfZ2l0LmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiQnVpbGQgUmVzdWx0IENvbXBhcmUgU2NyaXB0IgorREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHNjcmlwdHMgdG8gZmluZCBvdXQgaWYgdGhlIGJ1aWxkIHJlc3VsdFwKK2RpZmZlcnMgdG8gYSBmb3JtZXIgYnVpbGQuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL29wZW5TVVNFL2J1aWxkLWNvbXBhcmUiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9vcGVuU1VTRS9idWlsZC1jb21wYXJlLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9SZW5hbWUtcnBtLWNoZWNrLnNoLXRvLXBrZy1kaWZmLnNoLnBhdGNoO3N0cmlwbGV2ZWw9MSBcCisgICAgICAgICAgIGZpbGU6Ly9JZ25vcmUtRFdBUkYtc2VjdGlvbnMucGF0Y2g7c3RyaXBsZXZlbD0xIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtQWRkLXN1cHBvcnQtZm9yLWRlYi1hbmQtaXBrLXBhY2thZ2luZy5wYXRjaCBcCisgICAgICAgICAgICIKK1BBVENIVE9PTCA9ICJnaXQiCisKK1NSQ1JFViA9ICJjNTM1MmMwNTRjNmVmMTU3MzVkYTMxYjc2ZDZkODg2MjBmNGFmZjBhIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitCQkNMQVNTRVhURU5EICs9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfS8ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDc1NSBmdW5jdGlvbnMuc2ggJHtEfS8ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDc1NSBwa2ctZGlmZi5zaCAke0R9LyR7YmluZGlyfQorICAgIGluc3RhbGwgLW0gNzU1IHNhbWUtYnVpbGQtcmVzdWx0LnNoICR7RH0vJHtiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSA3NTUgc3JwbS1jaGVjay5zaCAke0R9LyR7YmluZGlyfQorfQorCitSREVQRU5EU18ke1BOfSArPSAiYmFzaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvZmlsZXMvMDAwMS1BZGQtc3VwcG9ydC1mb3ItZGViLWFuZC1pcGstcGFja2FnaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy8wMDAxLUFkZC1zdXBwb3J0LWZvci1kZWItYW5kLWlway1wYWNrYWdpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMxNTIxOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvZmlsZXMvMDAwMS1BZGQtc3VwcG9ydC1mb3ItZGViLWFuZC1pcGstcGFja2FnaW5nLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK0Zyb20gMDJkYmM3ZTM0NzhlNDA5ZDZmNWUzZTFjNTNkYWRkZjg4MzhiZTk5OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorRGF0ZTogVHVlLCAxIFNlcCAyMDE1IDEyOjA0OjMzICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZCBzdXBwb3J0IGZvciBkZWIgYW5kIGlwayBwYWNrYWdpbmcKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorLS0tCisgZnVuY3Rpb25zLnNoIHwgMTUgKysrKysrKysrKysrKysrCisgcGtnLWRpZmYuc2ggIHwgIDYgKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9mdW5jdGlvbnMuc2ggYi9mdW5jdGlvbnMuc2gKK2luZGV4IDA2MDc5ZGYuLjg1YzkwMDMgMTAwNjQ0CistLS0gYS9mdW5jdGlvbnMuc2gKKysrKyBiL2Z1bmN0aW9ucy5zaAorQEAgLTg1LDYgKzg1LDEzIEBAIGZ1bmN0aW9uIHVucGFja2FnZSgpCisgICAgICAgICAgICAgQ1BJT19PUFRTPSItLWV4dHJhY3QgLS11bmNvbmRpdGlvbmFsIC0tcHJlc2VydmUtbW9kaWZpY2F0aW9uLXRpbWUgLS1tYWtlLWRpcmVjdG9yaWVzIC0tcXVpZXQiCisgICAgICAgICAgICAgcnBtMmNwaW8gJGZpbGUgfCBjcGlvICR7Q1BJT19PUFRTfQorICAgICAgICAgICAgIDs7CisrICAgICAgICAqLmlwa3wqLmRlYikKKysgICAgICAgICAgICBhciB4ICRmaWxlCisrICAgICAgICAgICAgdGFyIHhmIGNvbnRyb2wudGFyLmd6CisrICAgICAgICAgICAgcm0gY29udHJvbC50YXIuZ3oKKysgICAgICAgICAgICB0YXIgeGYgZGF0YS50YXIuZ3oKKysgICAgICAgICAgICBybSBkYXRhLnRhci5negorKyAgICAgICAgICAgIDs7CisgICAgIGVzYWMKKyAgICAgcG9wZCAxPi9kZXYvbnVsbAorIH0KK0BAIC0yNTUsNCArMjYyLDEyIEBAIGZ1bmN0aW9uIGNtcF9zcGVjICgpCisgICAgIHJtICRmaWxlMSAkZmlsZTIKKyAgICAgcmV0dXJuICRSRVMKKyB9CisrCisrZnVuY3Rpb24gYWRqdXN0X2NvbnRyb2xmaWxlICgpIHsKKysgICAgY2F0ICQxL2NvbnRyb2wgfCBzZWQgJy9eVmVyc2lvbjogL2QnID4gJDEvY29udHJvbC5maXhlZAorKyAgICBtdiAkMS9jb250cm9sLmZpeGVkICQxL2NvbnRyb2wKKysgICAgY2F0ICQyL2NvbnRyb2wgfCBzZWQgJy9eVmVyc2lvbjogL2QnID4gJDIvY29udHJvbC5maXhlZAorKyAgICBtdiAkMi9jb250cm9sLmZpeGVkICQyL2NvbnRyb2wKKyt9CisrCisgIyB2aW06IHR3PTY2NiB0cz0yIGV0CitkaWZmIC0tZ2l0IGEvcGtnLWRpZmYuc2ggYi9wa2ctZGlmZi5zaAoraW5kZXggMGYxZmE3Ni4uM2NmMTBhYSAxMDA2NDQKKy0tLSBhL3BrZy1kaWZmLnNoCisrKysgYi9wa2ctZGlmZi5zaAorQEAgLTEzOCw2ICsxMzgsMTIgQEAgZWNobyAiRXh0cmFjdGluZyBwYWNrYWdlcyIKKyB1bnBhY2thZ2UgJG9sZHBrZyAkZGlyL29sZAorIHVucGFja2FnZSAkbmV3cGtnICRkaXIvbmV3CisgCisrY2FzZSAkb2xkcGtnIGluCisrICAqLmRlYnwqLmlwaykKKysgICAgIGFkanVzdF9jb250cm9sZmlsZSAkZGlyL29sZCAkZGlyL25ldworKyAgOzsKKytlc2FjCisrCisgIyBmaWxlcyBpcyBzZXQgaW4gY21wX3NwZWMgZm9yIHJwbXMsIHNvIGlmIFJFUyBpcyBlbXB0eSB3ZSBzaG91bGQgYXNzdW1lCisgIyBpdCB3YXNuJ3QgYW4gcnBtIGFuZCBwaWNrIGFsbCBmaWxlcyBmb3IgY29tcGFyaXNvbi4KKyBpZiBbIC16ICRSRVMgXTsgdGhlbgorLS0gCisyLjEuMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2ZpbGVzL0lnbm9yZS1EV0FSRi1zZWN0aW9ucy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvZmlsZXMvSWdub3JlLURXQVJGLXNlY3Rpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZGExYWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2ZpbGVzL0lnbm9yZS1EV0FSRi1zZWN0aW9ucy5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tIDAxNTcxNTY5NGVhZGQ3MTRiOTAzZjMwYWRlODc2ZTA3MzhkNDQ5NzQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPgorRGF0ZTogTW9uLCA1IEphbiAyMDE1IDE1OjA5OjIwIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIElnbm9yZSBEV0FSRiBzZWN0aW9ucy4KKworQXNzdW1lIGZvciBub3cgdGhhdCB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSBEV0FSRiBzZWN0aW9ucyBkdWUgdG8gcGF0aAorZGlmZmVyZW5jZXMuIEhvd2V2ZXIsIGluIHRoZSBjYXNlIHRoZSB0b29sIGlzIHJhbiBvbiBhICJkZWJ1ZyIgcGFja2FnZQoraXQgd2lsbCBtb3N0IGxpa2VseSBmYWxzZWx5IHNheSB0aGUgcGFja2FnZXMgaGF2ZSBubyBkaWZmZXJlbmNlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvdGhlcl0KKworVGhlIHBhY2thZ2UgZGlmZmVyZW5jZSB0b29sIGlzIGNvcnJlY3RseSBsYWJlbGxpbmcgdGhlIHBhY2thZ2VzIGFzIGRpZmZlcmVudAord2hlbiB0aGUgRFdBUkYgc2VjdGlvbnMgZG9uJ3QgbWF0Y2ggZHVlIHRvIHBhdGhzLiBUaGUgcGF0aHMgaW4gdGhlIGRlYnVnIGluZm8KK3Nob3VsZCBhY3R1YWxseSBiZSBtYWRlIHRvIGJlIHRoZSBzYW1lIHVzaW5nIGNvbXBpbGUgZmxhZ3Mgb3Igc29tZSBvdGhlcgorbWVjaGFuaXNtLgorCitIb3dldmVyLCB0byBtYWtlIHRoZSB0b29sIG1vcmUgdXNlZnVsIHRvIFlvY3RvIHVudGlsIHRoZSB3b3JrIGNhbiBiZSBkb25lCit0byBlbnN1cmUgaWRlbnRpY2FsIHBhdGhzIGluIGRlYnVnIHNlY3Rpb25zLCB0aGlzIHBhdGNoIGlzIGJlaW5nIGFwcGxpZWQuCisKK1NpZ25lZC1vZmYtYnk6IFJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+CistLS0KKyBwa2ctZGlmZi5zaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3BrZy1kaWZmLnNoIGIvcGtnLWRpZmYuc2gKK2luZGV4IDU2MDM1YzEuLjBmMWZhNzYgMTAwNzU1CistLS0gYS9wa2ctZGlmZi5zaAorKysrIGIvcGtnLWRpZmYuc2gKK0BAIC02NTgsNyArNjU4LDcgQEAgY2hlY2tfc2luZ2xlX2ZpbGUoKQorICAgICAgICBlY2hvICIiID4kZmlsZTEKKyAgICAgICAgZWNobyAiIiA+JGZpbGUyCisgICAgICAgICMgRG9uJ3QgY29tcGFyZSAuYnVpbGQtaWQgYW5kIC5nbnVfZGVidWdsaW5rIHNlY3Rpb25zCistICAgICAgIHNlY3Rpb25zPSIkKG9iamR1bXAgLXMgbmV3LyRmaWxlIHwgZ3JlcCAiQ29udGVudHMgb2Ygc2VjdGlvbiAuKjoiIHwgc2VkIC1yICJzLC4qICguKik6LFwxLGciIHwgZ3JlcCAtdiAtZSAiXC5idWlsZC1pZCIgLWUgIlwuZ251X2RlYnVnbGluayIgfCB0ciAiXG4iICIgIikiCisrICAgICAgIHNlY3Rpb25zPSIkKG9iamR1bXAgLXMgbmV3LyRmaWxlIHwgZ3JlcCAiQ29udGVudHMgb2Ygc2VjdGlvbiAuKjoiIHwgc2VkIC1yICJzLC4qICguKik6LFwxLGciIHwgZ3JlcCAtdiAtZSAiXC5idWlsZC1pZCIgLWUgIlwuZ251X2RlYnVnbGluayIgLWUgIlwuZGVidWdfYWJicmV2IiAtZSAiXC5kZWJ1Z19hcmFuZ2VzIiAtZSAiXC5kZWJ1Z19mcmFtZSIgLWUgIlwuZGVidWdfaW5mbyIgLWUgIlwuZGVidWdfbGluZSIgLWUgIlwuZGVidWdfbG9jIiAtZSAiXC5kZWJ1Z19tYWNpbmZvIiAtZSAiXC5kZWJ1Z19wdWJuYW1lcyIgLWUgIlwuZGVidWdfcHVidHlwZXMiIC1lICJcLmRlYnVnX3JhbmdlcyIgIC1lICJcLmRlYnVnX3N0ciIgfCB0ciAiXG4iICIgIikiCisgICAgICAgIGZvciBzZWN0aW9uIGluICRzZWN0aW9uczsgZG8KKyAgICAgICAgICAgb2JqZHVtcCAtcyAtaiAkc2VjdGlvbiBvbGQvJGZpbGUgfCBzZWQgInMsXm9sZC8sLCIgPiAkZmlsZTEKKyAgICAgICAgICAgb2JqZHVtcCAtcyAtaiAkc2VjdGlvbiBuZXcvJGZpbGUgfCBzZWQgInMsXm5ldy8sLCIgPiAkZmlsZTIKKy0tIAorMS45LjMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy9SZW5hbWUtcnBtLWNoZWNrLnNoLXRvLXBrZy1kaWZmLnNoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy9SZW5hbWUtcnBtLWNoZWNrLnNoLXRvLXBrZy1kaWZmLnNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZjNhOWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2ZpbGVzL1JlbmFtZS1ycG0tY2hlY2suc2gtdG8tcGtnLWRpZmYuc2gucGF0Y2gKQEAgLTAsMCArMSwxNTk5IEBACitGcm9tIDRkZTNkZjVhMWIzNjFjZDA5YTA4MWYwZTBiZGI5NGNiZjY4NGVkNDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMTkgRmViIDIwMTUgMDA6MzQ6NDcgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gUmVuYW1lIHJwbS1jaGVjay5zaCB0byBwa2ctZGlmZi5zaC4KKworVGhlIHRvb2wgbm93IGFjY2VwdHMgcGFja2FnZSBpbnB1dCBvdGhlciB0aGFuIHJwbSwgc28gY2hhbmdlIHRoZSBuYW1lCit3aGljaCBjb3VsZCBiZSBtaXNsZWFkaW5nLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL29wZW5TVVNFL2J1aWxkLWNvbXBhcmUvcHVsbHNdCisKK1NpZ25lZC1vZmYtYnk6IFJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+CisKK1VwZGF0ZWQgZm9yIHJwbS1jaGVjay5zaC4KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBidWlsZC1jb21wYXJlLnNwZWMgICB8ICAgIDIgKy0KKyBwa2ctZGlmZi5zaCAgICAgICAgICB8ICA3NjUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBycG0tY2hlY2suc2ggICAgICAgICB8ICA3NjQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHNhbWUtYnVpbGQtcmVzdWx0LnNoIHwgICAgNCArLQorIDQgZmlsZXMgY2hhbmdlZCwgNzY4IGluc2VydGlvbnMoKyksIDc2NyBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgcGtnLWRpZmYuc2gKKyBkZWxldGUgbW9kZSAxMDA3NTUgcnBtLWNoZWNrLnNoCisKK2RpZmYgLS1naXQgYS9idWlsZC1jb21wYXJlLnNwZWMgYi9idWlsZC1jb21wYXJlLnNwZWMKK2luZGV4IDE0YTk3ZTkuLjVmNDdjYTEgMTAwNjQ0CistLS0gYS9idWlsZC1jb21wYXJlLnNwZWMKKysrKyBiL2J1aWxkLWNvbXBhcmUuc3BlYworQEAgLTI1LDcgKzI1LDcgQEAgVmVyc2lvbjogICAgICAgIDIwMTUuMDIuMTAKKyBSZWxlYXNlOiAgICAgICAgMAorIFNvdXJjZTE6ICAgICAgICBDT1BZSU5HCisgU291cmNlMjogICAgICAgIHNhbWUtYnVpbGQtcmVzdWx0LnNoCistU291cmNlMzogICAgICAgIHJwbS1jaGVjay5zaAorK1NvdXJjZTM6ICAgICAgICBwa2ctZGlmZi5zaAorIFNvdXJjZTQ6ICAgICAgICBmdW5jdGlvbnMuc2gKKyBTb3VyY2U1OiAgICAgICAgc3JwbS1jaGVjay5zaAorIEJ1aWxkUm9vdDogICAgICAle190bXBwYXRofS8le25hbWV9LSV7dmVyc2lvbn0tYnVpbGQKK2RpZmYgLS1naXQgYS9wa2ctZGlmZi5zaCBiL3BrZy1kaWZmLnNoCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNTYwMzVjMQorLS0tIC9kZXYvbnVsbAorKysrIGIvcGtnLWRpZmYuc2gKK0BAIC0wLDAgKzEsNzY1IEBACisrIyEgL2Jpbi9iYXNoCisrIworKyMgQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIFNVU0UgTGludXggUHJvZHVjdCBHbWJILCBHZXJtYW55LgorKyMgTGljZW5zZWQgdW5kZXIgR1BMIHYyLCBzZWUgQ09QWUlORyBmaWxlIGZvciBkZXRhaWxzLgorKyMKKysjIFdyaXR0ZW4gYnkgTWljaGFlbCBNYXR6IGFuZCBTdGVwaGFuIENvb2xvCisrIyBFbmhhbmNlZCBieSBBbmRyZWFzIEphZWdlcgorKworK0ZVTkNUSU9OUz0kezAlLyp9L2Z1bmN0aW9ucy5zaAorKworK2NoZWNrX2FsbD0KKytjYXNlICQxIGluCisrICAtYSB8IC0tY2hlY2stYWxsKQorKyAgICBjaGVja19hbGw9MQorKyAgICBzaGlmdAorK2VzYWMKKysKKytpZiB0ZXN0ICIkIyIgIT0gMjsgdGhlbgorKyAgIGVjaG8gInVzYWdlOiAkMCBbLWF8LS1jaGVjay1hbGxdIG9sZC5ycG0gbmV3LnJwbSIKKysgICBleGl0IDEKKytmaQorKworK3NlbGZfc2NyaXB0PSQoY2QgJChkaXJuYW1lICQwKTsgZWNobyAkKHB3ZCkvJChiYXNlbmFtZSAkMCkpCisrCisrc291cmNlICRGVU5DVElPTlMKKysKKytvbGRwa2c9YHJlYWRsaW5rIC1mICQxYAorK25ld3BrZz1gcmVhZGxpbmsgLWYgJDJgCisrcmVuYW1lX3NjcmlwdD1gbWt0ZW1wYAorKworK2lmIHRlc3QgISAtZiAiJG9sZHBrZyI7IHRoZW4KKysgICAgZWNobyAiY2FuJ3Qgb3BlbiAkMSIKKysgICAgZXhpdCAxCisrZmkKKysKKytpZiB0ZXN0ICEgLWYgIiRuZXdwa2ciOyB0aGVuCisrICAgIGVjaG8gImNhbid0IG9wZW4gJDIiCisrICAgIGV4aXQgMQorK2ZpCisrCisrI3VzYWdlIHVuamFyIDxmaWxlPgorK2Z1bmN0aW9uIHVuamFyKCkKKyt7CisrICAgIGxvY2FsIGZpbGUKKysgICAgZmlsZT0kMQorKworKyAgICBpZiBbWyAkKHR5cGUgLXAgZmFzdGphcikgXV07IHRoZW4KKysgICAgICAgIFVOSkFSPWZhc3RqYXIKKysgICAgZWxpZiBbWyAkKHR5cGUgLXAgamFyKSBdXTsgdGhlbgorKyAgICAgICAgVU5KQVI9amFyCisrICAgIGVsaWYgW1sgJCh0eXBlIC1wIHVuemlwKSBdXTsgdGhlbgorKyAgICAgICAgVU5KQVI9dW56aXAKKysgICAgZWxzZQorKyAgICAgICAgZWNobyAiRVJST1I6IGphciwgZmFzdGphciwgb3IgdW56aXAgaXMgbm90IGluc3RhbGxlZCAodHJ5aW5nIGZpbGUgJGZpbGUpIgorKyAgICAgICAgZXhpdCAxCisrICAgIGZpCisrCisrICAgIGNhc2UgJFVOSkFSIGluCisrICAgICAgICBqYXJ8ZmFzdGphcikKKysgICAgICAgICMgZWNobyBqYXIgLXhmICRmaWxlCisrICAgICAgICAke1VOSkFSfSAteGYgJGZpbGUKKysgICAgICAgIDs7CisrICAgICAgICB1bnppcCkKKysgICAgICAgIHVuemlwIC1vcXEgJGZpbGUKKysgICAgICAgIDs7CisrICAgIGVzYWMKKyt9CisrCisrIyBsaXN0IGZpbGVzIGluIGRpcmVjdG9yeQorKyN1c2FnZSB1bmphcl9sIDxmaWxlPgorK2Z1bmN0aW9uIHVuamFyX2woKQorK3sKKysgICAgbG9jYWwgZmlsZQorKyAgICBmaWxlPSQxCisrCisrICAgIGlmIFtbICQodHlwZSAtcCBmYXN0amFyKSBdXTsgdGhlbgorKyAgICAgICAgVU5KQVI9ZmFzdGphcgorKyAgICBlbGlmIFtbICQodHlwZSAtcCBqYXIpIF1dOyB0aGVuCisrICAgICAgICBVTkpBUj1qYXIKKysgICAgZWxpZiBbWyAkKHR5cGUgLXAgdW56aXApIF1dOyB0aGVuCisrICAgICAgICBVTkpBUj11bnppcAorKyAgICBlbHNlCisrICAgICAgICBlY2hvICJFUlJPUjogamFyLCBmYXN0amFyLCBvciB1bnppcCBpcyBub3QgaW5zdGFsbGVkICh0cnlpbmcgZmlsZSAkZmlsZSkiCisrICAgICAgICBleGl0IDEKKysgICAgZmkKKysKKysgICAgY2FzZSAkVU5KQVIgaW4KKysgICAgICAgIGphcnxmYXN0amFyKQorKyAgICAgICAgJHtVTkpBUn0gLXRmICRmaWxlCisrICAgICAgICA7OworKyAgICAgICAgdW56aXApCisrICAgICAgICB1bnppcCAtbCAkZmlsZQorKyAgICAgICAgOzsKKysgICAgZXNhYworK30KKysKKytmaWx0ZXJfZGlzYXNtKCkKKyt7CisrICAgc2VkIC1lICdzL14gKlswLTlhLWZdXCs6Ly8nIC1lICdzL1wkMHhbMC05YS1mXVwrLyRzb21ldGhpbmcvJyAtZSAncy9jYWxscSAqWzAtOWEtZl1cKy9jYWxscSAvJyAtZSAncy8jICpbMC05YS1mXVwrLyMgIC8nIC1lICdzL1woMHhcKVw/WzAtOWEtZl1cKygvb2Zmc2V0KC8nIC1lICdzL1swLTlhLWZdXCsgPC88LycgLWUgJ3MvXjxcKC4qXCk+Oi9cMTovJyAtZSAncy88XCguKlwpKzB4WzAtOWEtZl1cKz4vPFwxICsgb2ZzPi8nIAorK30KKysKKytlY2hvICJDb21wYXJpbmcgYGJhc2VuYW1lICRvbGRwa2dgIHRvIGBiYXNlbmFtZSAkbmV3cGtnYCIKKysKKytjYXNlICRvbGRwa2cgaW4KKysgICoucnBtKQorKyAgICAgY21wX3NwZWMgJHJlbmFtZV9zY3JpcHQgJG9sZHBrZyAkbmV3cGtnCisrICAgICBSRVM9JD8KKysgICAgIGNhc2UgJFJFUyBpbgorKyAgICAgICAwKQorKyAgICAgICAgICBlY2hvICJSUE0gbWV0YSBpbmZvcm1hdGlvbiBpcyBpZGVudGljYWwiCisrICAgICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCisrICAgICAgICAgICAgIGV4aXQgMAorKyAgICAgICAgICBmaQorKyAgICAgICAgICA7OworKyAgICAgICAxKQorKyAgICAgICAgICBlY2hvICJSUE0gbWV0YSBpbmZvcm1hdGlvbiBpcyBkaWZmZXJlbnQiCisrICAgICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCisrICAgICAgICAgICAgIGV4aXQgMQorKyAgICAgICAgICBmaQorKyAgICAgICAgICA7OworKyAgICAgICAyKQorKyAgICAgICAgICBlY2hvICJSUE0gZmlsZSBjaGVja3N1bSBkaWZmZXJzLiIKKysgICAgICAgICAgUkVTPTAKKysgICAgICAgICAgOzsKKysgICAgICAgKikKKysgICAgICAgICAgZWNobyAiV3JvbmcgZXhpdCBjb2RlISIKKysgICAgICAgICAgZXhpdCAxCisrICAgICAgICAgIDs7CisrICAgICBlc2FjCisrICAgICA7OworK2VzYWMKKysKKytmaWxlMT1gbWt0ZW1wYAorK2ZpbGUyPWBta3RlbXBgCisrCisrZGlyPWBta3RlbXAgLWRgCisrZWNobyAiRXh0cmFjdGluZyBwYWNrYWdlcyIKKyt1bnBhY2thZ2UgJG9sZHBrZyAkZGlyL29sZAorK3VucGFja2FnZSAkbmV3cGtnICRkaXIvbmV3CisrCisrIyBmaWxlcyBpcyBzZXQgaW4gY21wX3NwZWMgZm9yIHJwbXMsIHNvIGlmIFJFUyBpcyBlbXB0eSB3ZSBzaG91bGQgYXNzdW1lCisrIyBpdCB3YXNuJ3QgYW4gcnBtIGFuZCBwaWNrIGFsbCBmaWxlcyBmb3IgY29tcGFyaXNvbi4KKytpZiBbIC16ICRSRVMgXTsgdGhlbgorKyAgICBvbGRmaWxlcz1gY2QgJGRpci9vbGQ7IGZpbmQgLiAtdHlwZSBmYAorKyAgICBuZXdmaWxlcz1gY2QgJGRpci9uZXc7IGZpbmQgLiAtdHlwZSBmYAorKworKyAgICBmaWxlcz1gZWNobyAtZSAiJG9sZGZpbGVzXG4kbmV3ZmlsZXMiIHwgc29ydCAtdWAKKytmaQorKworK2NkICRkaXIKKytiYXNoICRyZW5hbWVfc2NyaXB0CisrCisrZGZpbGU9YG1rdGVtcGAKKysKKytkaWZmX3R3b19maWxlcygpCisreworKyAgaWYgISBjbXAgLXMgb2xkLyRmaWxlIG5ldy8kZmlsZTsgdGhlbgorKyAgICAgZWNobyAiJGZpbGUgZGlmZmVycyAoJGZ0eXBlKSIKKysgICAgIGhleGR1bXAgLUMgb2xkLyRmaWxlID4gJGZpbGUxCisrICAgICBoZXhkdW1wIC1DIG5ldy8kZmlsZSA+ICRmaWxlMgorKyAgICAgZGlmZiAtdSAkZmlsZTEgJGZpbGUyIHwgaGVhZCAtbiAyMDAKKysgICAgIHJldHVybiAxCisrICBmaQorKyAgcmV0dXJuIDAKKyt9CisrCisrdHJpbV9tYW5fZmlyc3RfbGluZSgpCisreworKyAgICAjIEhhbmRsZXMgdGhlIGZpcnN0IGxpbmUgaWYgaXQgaXMgbGlrZToKKysgICAgIy5cIiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBQb2Q6Ok1hbiAyLjI4IChQb2Q6OlNpbXBsZSAzLjI4KQorKyAgICAjLlwiIERPIE5PVCBNT0RJRlkgVEhJUyBGSUxFISAgSXQgd2FzIGdlbmVyYXRlZCBieSBoZWxwMm1hbiAxLjQzLjMuCisrICAgIGxvY2FsIGY9JDEKKysgICAgc2VkIC1pIC1lICcxeworKyAgICBzfF5cLlxcIltbOmJsYW5rOl1dXCtBdXRvbWF0aWNhbGx5W1s6Ymxhbms6XV1nZW5lcmF0ZWRbWzpibGFuazpdXWJ5W1s6Ymxhbms6XV1Qb2Q6Ok1hbltbOmJsYW5rOl1dLip8LlxcIiBPdmVybHkgdmVyYm9zZSBQb2Q6Ok1hbnwKKysgICAgc3xeXC5cXCJbWzpibGFuazpdXVwrRE9bWzpibGFuazpdXU5PVFtbOmJsYW5rOl1dTU9ESUZZW1s6Ymxhbms6XV1USElTW1s6Ymxhbms6XV1GSUxFIVtbOmJsYW5rOl1dXCtJdFtbOmJsYW5rOl1dd2FzW1s6Ymxhbms6XV1nZW5lcmF0ZWRbWzpibGFuazpdXWJ5W1s6Ymxhbms6XV1oZWxwMm1hbltbOmJsYW5rOl1dLip8LlxcIiBPdmVybHkgdmVyYm9zZSBoZWxwMm1hbnwKKysgICAgfScgJGYKKyt9CisrCisrdHJpbV9tYW5fVEgoKQorK3sKKysgICAgIyBIYW5kbGVzIGxpbmVzIGxpa2U6CisrICAgICMgLlRIIGRlYmhlbHBlciA3ICIyMDEwLTAyLTI3IiAiNy40LjE1IiAiRGViaGVscGVyIgorKyAgICAjIC5USCBESVJNTkdSLUNMSUVOVCAxIDIwMTAtMDItMjcgIkRpcm1uZ3IgMS4wLjMiICJHTlUgUHJpdmFjeSBHdWFyZCIKKysgICAgIyAuVEggY2NtYWtlIDEgIk1hcmNoIDA2LCAyMDEwIiAiY2NtYWtlIDIuOC4xLXJjMyIKKysgICAgIyAuVEggUUVNVS1JTUcgMSAiMjAxMC0wMy0xNCIgIiAiICIgIgorKyAgICAjIC5USCBrZGVjbWFrZSAxICJNYXkgMDcsIDIwMTAiICJjbWFrZSAyLjguMSIKKysgICAgIyAuVEggImFwcGVuZGVyLmgiIDMgIjEyIE1heSAyMDEwIiAiVmVyc2lvbiAxLjIuMSIgImxvZzRjIiBcIiAtKi0gbnJvZmYgLSotCisrICAgICMgLlRI4oCCImFwcGVuZGVyLmgi4oCCM+KAgiJUdWXigIJBdWfigIIzMeKAgjIwMTAi4oCCIlZlcnNpb27igIIxLjIuMSLigIIibG9nNGMi4oCCXCLigIItKi3igIJucm9mZuKAgi0qLQorKyAgICAjIC5USCAiT0ZGTElORUlNQVAiICIxIiAiMTEgTWF5IDIwMTAiICJKb2huIEdvZXJ6ZW4iICJPZmZsaW5lSU1BUCBNYW51YWwiCisrICAgICMgLlRIIGd2IDNndWlsZSAiMTMgTWF5IDIwMTAiCisrICAgICMuVEggIkdJVFwtQVJDSElNUE9SVCIgIjEiICIwOS8xMy8yMDEwIiAiR2l0IDFcJi43XCYuMSIgIkdpdCBNYW51YWwiCisrICAgICMgLlRIIExESVJFQ1RPUkQgOCAiMjAxMC0xMC0yMCIgInBlcmwgdjUuMTIuMiIgIlVzZXIgQ29udHJpYnV0ZWQgUGVybCBEb2N1bWVudGF0aW9uIgorKyAgICAjIC5USCBjY21ha2UgMSAiRmVicnVhcnkgMDUsIDIwMTIiICJjY21ha2UgMi44LjciCisrICAgICMgLlRI4oCCImFwcGVuZGVyLmgi4oCCM+KAgiJUdWXigIJBdWfigIIzMeKAgjIwMTAi4oCCIlZlcnNpb27igIIxLjIuMSLigIIibG9nNGMi4oCCXCLigIItKi3igIJucm9mZuKAgi0qLQorKyAgICAjIC5USCBBUkNIICIxIiAiU2VwdGVtYmVyIDIwMTAiICJHTlUgY29yZXV0aWxzIDguNSIgIlVzZXIgQ29tbWFuZHMiCisrICAgICMgLlRIICJHQ00tQ0FMSUJSQVRFIiAiMSIgIjAzIEZlYnJ1YXJ5IDIwMTIiICIiICIiCisrICAgICMuVEggTG9jYWxlOjpQbzRhOjpYbWwucG0gM3BtICIyMDE1LTAxLTMwIiAiUG80YSBUb29scyIgIlBvNGEgVG9vbHMiCisrICAgIGxvY2FsIGY9JDEKKysgICAgIyAoLlRIICAgcXVvdGVkIHNlY3Rpb24pIChxdW90ZWRfZGF0ZSkoKikKKysgICAgc2VkIC1pIC1lICdzfF5cKFtbOmJsYW5rOl1dKlwuVEhbWzpibGFuazpdXVwrIlteIl1cKyJbWzpibGFuazpdXVwrW15bOmJsYW5rOl1dXCtcKVtbOmJsYW5rOl1dXCtcKCJbXiJdXCsiXClcKFtbOmJsYW5rOl1dXCsuKlwpXD98XDEgInFxMjAwMC0wMS0wMSJcM3wnICRmCisrICAgICMgKC5USCB1bnF1b3RlZCBzZWN0aW9uKSAocXVvdGVkX2RhdGUpKCopCisrICAgIHNlZCAtaSAtZSAnc3xeXChbWzpibGFuazpdXSpcLlRIW1s6Ymxhbms6XV1cK1teIl1bXls6Ymxhbms6XV1cK1tbOmJsYW5rOl1dXCtbXls6Ymxhbms6XV1cK1wpW1s6Ymxhbms6XV1cK1woIlteIl1cKyJcKVwoW1s6Ymxhbms6XV1cKy4qXClcP3xcMSAidXEyMDAwLTAyLTAyIlwzfCcgJGYKKysgICAgIyAoLlRIICAgcXVvdGVkIHNlY3Rpb24pICh1bnF1b3RlZF9kYXRlKSgqKQorKyAgICBzZWQgLWkgLWUgJ3N8XlwoW1s6Ymxhbms6XV0qXC5USFtbOmJsYW5rOl1dXCsiW14iXVwrIltbOmJsYW5rOl1dXCtbXls6Ymxhbms6XV1cK1wpW1s6Ymxhbms6XV1cK1woW14iXVteWzpibGFuazpdXVwrXClcKFtbOmJsYW5rOl1dXCsuKlwpXD98XDEgcXUyMDAwLTAzLTAzXDN8JyAkZgorKyAgICAjICguVEggdW5xdW90ZWQgc2VjdGlvbikgKHVucXVvdGVkX2RhdGUpKCopCisrICAgIHNlZCAtaSAtZSAnc3xeXChbWzpibGFuazpdXSpcLlRIW1s6Ymxhbms6XV1cK1teIl1bXls6Ymxhbms6XV1cK1tbOmJsYW5rOl1dXCtbXls6Ymxhbms6XV1cK1wpW1s6Ymxhbms6XV1cK1woW14iXVteWzpibGFuazpdXVwrXClcKFtbOmJsYW5rOl1dXCsuKlwpXD98XDEgdXUyMDAwLTA0LTA0XDN8JyAkZgorK30KKysKKytzdHJpcF9udW1iZXJlZF9hbmNob3JzKCkKKyt7CisrICAjIFJlbW92ZSBudW1iZXJlZCBhbmNob3JzIG9uIERvY2Jvb2sgLyBIVE1MIGZpbGVzLgorKyAgIyBUaGlzIHNob3VsZCBiZSBzYXZlIHNpbmNlIHdlIHJlbW92ZSB0aGVtIGZyb20gb2xkIGFuZCBuZXcgZmlsZXMuCisrICAjIEEgdHJhaWxpbmcgPC9hPiBvciA8L2Rpdj4gdGFnIHdpbGwgc3RheSBhbHNvIG9uIGJvdGggZmlsZXMuCisrICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKyAgICAgc2VkIC1pIC1lICdzJTxbIF0qYVsgXVwrbmFtZVtePF0qWzAtOV1cK1tePF0qJSVnJyBcCisrICAgICAtZSAncyU8WyBdKmFbIF1cK2hyZWZbXjxdKiNbXjxdKlswLTldXCtbXjxdKiUlZycgXAorKyAgICAgLWUgJ3MlPFtePF0qaWQ9ImZ0blwuW148XSpbMC05XVwrW148XSolJWcnICRmCisrICBkb25lCisrfQorKworKworK2NoZWNrX2NvbXByZXNzZWRfZmlsZSgpCisreworKyAgbG9jYWwgZmlsZT0kMQorKyAgbG9jYWwgZXh0PSQyCisrICBsb2NhbCB0bXBkaXI9YG1rdGVtcCAtZGAKKysgIGxvY2FsIGZ0eXBlCisrICBsb2NhbCByZXQ9MAorKyAgZWNobyAiJGV4dCBmaWxlIHdpdGggb2RkIGZpbGVuYW1lOiAkZmlsZSIKKysgIGlmIHRlc3QgLW4gIiR0bXBkaXIiOyB0aGVuCisrICAgIG1rZGlyICR0bXBkaXIve29sZCxuZXd9CisrICAgIGNwIC0tcGFyZW50cyAtLWRlcmVmZXJlbmNlIG9sZC8kZmlsZSAkdG1wZGlyLworKyAgICBjcCAtLXBhcmVudHMgLS1kZXJlZmVyZW5jZSBuZXcvJGZpbGUgJHRtcGRpci8KKysgICAgaWYgcHVzaGQgJHRtcGRpciA+IC9kZXYvbnVsbCA7IHRoZW4KKysgICAgICBjYXNlICIkZXh0IiBpbgorKyAgICAgICAgYnoyKQorKyAgICAgICAgICBtdiBvbGQvJGZpbGV7LC5iejJ9CisrICAgICAgICAgIG12IG5ldy8kZmlsZXssLmJ6Mn0KKysgICAgICAgICAgYnppcDIgLWQgb2xkLyRmaWxlLmJ6MgorKyAgICAgICAgICBiemlwMiAtZCBuZXcvJGZpbGUuYnoyCisrICAgICAgICAgIDs7CisrICAgICAgICBnemlwKQorKyAgICAgICAgICBtdiBvbGQvJGZpbGV7LC5nen0KKysgICAgICAgICAgbXYgbmV3LyRmaWxleywuZ3p9CisrICAgICAgICAgIGd6aXAgLWQgb2xkLyRmaWxlLmd6CisrICAgICAgICAgIGd6aXAgLWQgbmV3LyRmaWxlLmd6CisrICAgICAgICAgIDs7CisrICAgICAgICB4eikKKysgICAgICAgICAgbXYgb2xkLyRmaWxleywueHp9CisrICAgICAgICAgIG12IG5ldy8kZmlsZXssLnh6fQorKyAgICAgICAgICB4eiAtZCBvbGQvJGZpbGUueHoKKysgICAgICAgICAgeHogLWQgbmV3LyRmaWxlLnh6CisrICAgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgICAgIGZ0eXBlPWAvdXNyL2Jpbi9maWxlIG9sZC8kZmlsZSB8IHNlZCAnc0BeW146XVwrOltbOmJsYW5rOl1dKkBAJ2AKKysgICAgICBjYXNlICRmdHlwZSBpbgorKyAgICAgICAgUE9TSVhcIHRhclwgYXJjaGl2ZSkKKysgICAgICAgICAgZWNobyAiJGV4dCBjb250ZW50IGlzOiAkZnR5cGUiCisrICAgICAgICAgIG12IG9sZC8kZmlsZXssLnRhcn0KKysgICAgICAgICAgbXYgbmV3LyRmaWxleywudGFyfQorKyAgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICR7ZmlsZX0udGFyOyB0aGVuCisrICAgICAgICAgICAgcmV0PTEKKysgICAgICAgICAgZmkKKysgICAgICAgICAgOzsKKysgICAgICAgIEFTQ0lJXCBjcGlvXCBhcmNoaXZlXCAqKQorKyAgICAgICAgICBlY2hvICIkZXh0IGNvbnRlbnQgaXM6ICRmdHlwZSIKKysgICAgICAgICAgbXYgb2xkLyRmaWxleywuY3Bpb30KKysgICAgICAgICAgbXYgbmV3LyRmaWxleywuY3Bpb30KKysgICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAke2ZpbGV9LmNwaW87IHRoZW4KKysgICAgICAgICAgICByZXQ9MQorKyAgICAgICAgICBmaQorKyAgICAgICAgICA7OworKyAgICAgICAgKikKKysgICAgICAgICAgZWNobyAidW5oYW5kbGVkICRleHQgY29udGVudDogJGZ0eXBlIgorKyAgICAgICAgICBpZiAhIGRpZmZfdHdvX2ZpbGVzOyB0aGVuCisrICAgICAgICAgICAgcmV0PTEKKysgICAgICAgICAgZmkKKysgICAgICAgICAgOzsKKysgICAgICBlc2FjCisrICAgICAgcG9wZCA+IC9kZXYvbnVsbAorKyAgICBmaQorKyAgICBybSAtcmYgIiR0bXBkaXIiCisrICBmaQorKyAgcmV0dXJuICRyZXQKKyt9CisrCisrY2hlY2tfc2luZ2xlX2ZpbGUoKQorK3sKKysgIGxvY2FsIGZpbGU9IiQxIgorKyAgY2FzZSAkZmlsZSBpbgorKyAgICAqLnNwZWMpCisrICAgICAgIHNlZCAtaSAtZSAicyxSZWxlYXNlOi4qJHJlbGVhc2UxLFJlbGVhc2U6IEBSRUxFQVNFQCwiIG9sZC8kZmlsZQorKyAgICAgICBzZWQgLWkgLWUgInMsUmVsZWFzZTouKiRyZWxlYXNlMixSZWxlYXNlOiBAUkVMRUFTRUAsIiBuZXcvJGZpbGUKKysgICAgICAgOzsKKysgICAgKi5leGUubWRifCouZGxsLm1kYikKKysgICAgICAgIyBKdXN0IGRlYnVnIGluZm9ybWF0aW9uLCB3ZSBjYW4gc2tpcCB0aGVtCisrICAgICAgIGVjaG8gIiRmaWxlIHNraXBwZWQgYXMgZGVidWcgZmlsZS4iCisrICAgICAgIHJldHVybiAwCisrICAgICAgIDs7CisrICAgICouYSkKKysgICAgICAgZmxpc3Q9YGFyIHQgbmV3LyRmaWxlYAorKyAgICAgICBwd2Q9JFBXRAorKyAgICAgICBmZGlyPWBkaXJuYW1lICRmaWxlYAorKyAgICAgICBjZCBvbGQvJGZkaXIKKysgICAgICAgYXIgeCBgYmFzZW5hbWUgJGZpbGVgCisrICAgICAgIGNkICRwd2QvbmV3LyRmZGlyCisrICAgICAgIGFyIHggYGJhc2VuYW1lICRmaWxlYAorKyAgICAgICBjZCAkcHdkCisrICAgICAgIGZvciBmIGluICRmbGlzdDsgZG8KKysgICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAkZmRpci8kZjsgdGhlbgorKyAgICAgICAgICAgICByZXR1cm4gMQorKyAgICAgICAgICBmaQorKyAgICAgICBkb25lCisrICAgICAgIHJldHVybiAwCisrICAgICAgIDs7CisrICAgICouY3BpbykKKysgICAgICAgZmxpc3Q9YGNwaW8gLS1xdWlldCAtLWxpc3QgLS1mb3JjZS1sb2NhbCA8ICJuZXcvJGZpbGUiYAorKyAgICAgICBwd2Q9JFBXRAorKyAgICAgICBmZGlyPSRmaWxlLmV4dHJhY3QuJFBQSUQuJCQKKysgICAgICAgbWtkaXIgb2xkLyRmZGlyIG5ldy8kZmRpcgorKyAgICAgICBjZCBvbGQvJGZkaXIKKysgICAgICAgY3BpbyAtLXF1aWV0IC0tZXh0cmFjdCAtLWZvcmNlLWxvY2FsIDwgIi4uLyR7ZmlsZSMjKi99IgorKyAgICAgICBjZCAkcHdkL25ldy8kZmRpcgorKyAgICAgICBjcGlvIC0tcXVpZXQgLS1leHRyYWN0IC0tZm9yY2UtbG9jYWwgPCAiLi4vJHtmaWxlIyMqL30iCisrICAgICAgIGNkICRwd2QKKysgICAgICAgbG9jYWwgcmV0PTAKKysgICAgICAgZm9yIGYgaW4gJGZsaXN0OyBkbworKyAgICAgICAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJGZkaXIvJGY7IHRoZW4KKysgICAgICAgICAgIHJldD0xCisrICAgICAgICAgICBpZiB0ZXN0IC16ICIkY2hlY2tfYWxsIjsgdGhlbgorKyAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgZmkKKysgICAgICAgICBmaQorKyAgICAgICBkb25lCisrICAgICAgIHJtIC1yZiBvbGQvJGZkaXIgbmV3LyRmZGlyCisrICAgICAgIHJldHVybiAkcmV0CisrICAgICAgIDs7CisrICAgICoudGFyfCoudGFyLmJ6MnwqLnRhci5nenwqLnRnenwqLnRiejIpCisrICAgICAgIGZsaXN0PWB0YXIgdGYgbmV3LyRmaWxlYAorKyAgICAgICBwd2Q9JFBXRAorKyAgICAgICBmZGlyPWBkaXJuYW1lICRmaWxlYAorKyAgICAgICBjZCBvbGQvJGZkaXIKKysgICAgICAgdGFyIHhmIGBiYXNlbmFtZSAkZmlsZWAKKysgICAgICAgY2QgJHB3ZC9uZXcvJGZkaXIKKysgICAgICAgdGFyIHhmIGBiYXNlbmFtZSAkZmlsZWAKKysgICAgICAgY2QgJHB3ZAorKyAgICAgICBsb2NhbCByZXQ9MAorKyAgICAgICBmb3IgZiBpbiAkZmxpc3Q7IGRvCisrICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAkZmRpci8kZjsgdGhlbgorKyAgICAgICAgICAgcmV0PTEKKysgICAgICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCisrICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICBmaQorKyAgICAgICAgIGZpCisrICAgICAgIGRvbmUKKysgICAgICAgcmV0dXJuICRyZXQKKysgICAgICAgOzsKKysgICAgKi56aXB8Ki5qYXJ8Ki53YXIpCisrICAgICAgIGNkIG9sZAorKyAgICAgICB1bmphcl9sIC4vJGZpbGUgfHNvcnQgPiBmbGlzdAorKyAgICAgICAjICAxMC0wNS0yMDEwIDE0OjM5CisrICAgICAgIHNlZCAtaSAtZSAicywgWzAtOV1bMC05XS1bMC05XVswLTldLVswLTldXCsgWzAtOV1bMC05XTpbMC05XVswLTldICwgZGF0ZSAsIiBmbGlzdAorKyAgICAgICAjIDIwMTItMDItMDMgMDc6NTkKKysgICAgICAgc2VkIC1pIC1lICJzLCAyMFswLTldWzAtOV0tWzAtOV1bMC05XS1bMC05XVswLTldIFswLTldWzAtOV06WzAtOV1bMC05XSAsIGRhdGUgLCIgZmxpc3QKKysgICAgICAgY2QgLi4vbmV3CisrICAgICAgIHVuamFyX2wgLi8kZmlsZSB8c29ydD4gZmxpc3QKKysgICAgICAgc2VkIC1pIC1lICJzLCBbMC05XVswLTldLVswLTldWzAtOV0tWzAtOV1cKyBbMC05XVswLTldOlswLTldWzAtOV0gLCBkYXRlICw7ICIgZmxpc3QKKysgICAgICAgc2VkIC1pIC1lICJzLCAyMFswLTldWzAtOV0tWzAtOV1bMC05XS1bMC05XVswLTldIFswLTldWzAtOV06WzAtOV1bMC05XSAsIGRhdGUgLCIgZmxpc3QKKysgICAgICAgY2QgLi4KKysgICAgICAgaWYgISBjbXAgLXMgb2xkL2ZsaXN0IG5ldy9mbGlzdDsgdGhlbgorKyAgICAgICAgICBlY2hvICIkZmlsZSBoYXMgZGlmZmVyZW50IGZpbGUgbGlzdCIKKysgICAgICAgICAgZGlmZiAtdSBvbGQvZmxpc3QgbmV3L2ZsaXN0CisrICAgICAgICAgIHJldHVybiAxCisrICAgICAgIGZpCisrICAgICAgIGZsaXN0PWBncmVwIGRhdGUgbmV3L2ZsaXN0IHwgc2VkIC1lICdzLC4qIGRhdGUgLCwnYAorKyAgICAgICBwd2Q9JFBXRAorKyAgICAgICBmZGlyPWBkaXJuYW1lICRmaWxlYAorKyAgICAgICBjZCBvbGQvJGZkaXIKKysgICAgICAgdW5qYXIgYGJhc2VuYW1lICRmaWxlYAorKyAgICAgICBjZCAkcHdkL25ldy8kZmRpcgorKyAgICAgICB1bmphciBgYmFzZW5hbWUgJGZpbGVgCisrICAgICAgIGNkICRwd2QKKysgICAgICAgbG9jYWwgcmV0PTAKKysgICAgICAgZm9yIGYgaW4gJGZsaXN0OyBkbworKyAgICAgICAgIGlmIHRlc3QgLWYgbmV3LyRmZGlyLyRmICYmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJGZkaXIvJGY7IHRoZW4KKysgICAgICAgICAgIHJldD0xCisrICAgICAgICAgICBpZiB0ZXN0IC16ICIkY2hlY2tfYWxsIjsgdGhlbgorKyAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgZmkKKysgICAgICAgICBmaQorKyAgICAgICBkb25lCisrICAgICAgIHJldHVybiAkcmV0OzsKKysgICAgICoucHljfCoucHlvKQorKyAgICAgICAgcGVybCAtZSAib3BlbiBmaCwgJys8JywgJ29sZC8kZmlsZSc7IHNlZWsgZmgsIDQsIFNFRUtfU0VUOyBwcmludCBmaCAnMDAwMCc7IgorKyAgICAgICAgcGVybCAtZSAib3BlbiBmaCwgJys8JywgJ25ldy8kZmlsZSc7IHNlZWsgZmgsIDQsIFNFRUtfU0VUOyBwcmludCBmaCAnMDAwMCc7IgorKyAgICAgICAgOzsKKysgICAgICouYnoyKQorKyAgICAgICAgYnVuemlwMiAtYyBvbGQvJGZpbGUgPiBvbGQvJHtmaWxlLy5iejIvfQorKyAgICAgICAgYnVuemlwMiAtYyBuZXcvJGZpbGUgPiBuZXcvJHtmaWxlLy5iejIvfQorKyAgICAgICAgY2hlY2tfc2luZ2xlX2ZpbGUgJHtmaWxlLy5iejIvfQorKyAgICAgICAgcmV0dXJuICQ/CisrICAgICAgICA7OworKyAgICAgKi5neikKKysgICAgICAgIGd1bnppcCAtYyBvbGQvJGZpbGUgPiBvbGQvJHtmaWxlLy5nei99CisrICAgICAgICBndW56aXAgLWMgbmV3LyRmaWxlID4gbmV3LyR7ZmlsZS8uZ3ovfQorKyAgICAgICAgY2hlY2tfc2luZ2xlX2ZpbGUgJHtmaWxlLy5nei99CisrICAgICAgICByZXR1cm4gJD8KKysgICAgICAgIDs7CisrICAgICAqLnJwbSkKKysJJHNlbGZfc2NyaXB0IC1hIG9sZC8kZmlsZSBuZXcvJGZpbGUKKysgICAgICAgIHJldHVybiAkPworKyAgICAgICAgOzsKKysgICAgICpwbmcpCisrCSMgVHJ5IHRvIHJlbW92ZSB0aW1lc3RhbXBzLCBvbmx5IGlmIGNvbnZlcnQgZnJvbSBJbWFnZU1hZ2ljayBpcyBpbnN0YWxsZWQKKysgICAgICAgIGlmIFtbICQodHlwZSAtcCBjb252ZXJ0KSBdXTsgdGhlbgorKwkgIGNvbnZlcnQgb2xkLyRmaWxlICtzZXQgZGF0ZTpjcmVhdGUgK3NldCBkYXRlOm1vZGlmeSBvbGQvJHtmaWxlLy5wbmcvX24ucG5nfQorKwkgIGNvbnZlcnQgb2xkLyRmaWxlICtzZXQgZGF0ZTpjcmVhdGUgK3NldCBkYXRlOm1vZGlmeSBuZXcvJHtmaWxlLy5wbmcvX24ucG5nfQorKwkgIGlmICEgY21wIC1zIG9sZC8ke2ZpbGUvLnBuZy9fbi5wbmd9IG5ldy8ke2ZpbGUvLnBuZy9fbi5wbmd9OyB0aGVuCisrCSAgICAgIGVjaG8gIiRmaWxlIGRpZmZlcnMgKCRmdHlwZSkiCisrCSAgICAgIGhleGR1bXAgLUMgb2xkLyR7ZmlsZS8ucG5nL19uLnBuZ30gPiAkZmlsZTEKKysJICAgICAgaGV4ZHVtcCAtQyBuZXcvJHtmaWxlLy5wbmcvX24ucG5nfSA+ICRmaWxlMgorKwkgICAgICBkaWZmIC11ICRmaWxlMSAkZmlsZTIgfCBoZWFkIC1uIDIwCisrCSAgICAgIHJldHVybiAxCisrCSAgZmkKKysJICByZXR1cm4gMAorKwlmaQorKyAgICAgICAgOzsKKysgICAgIC91c3Ivc2hhcmUvbG9jYWxlLyovTENfTUVTU0FHRVMvKi5tb3wvdXNyL3NoYXJlL2xvY2FsZS1idW5kbGUvKi9MQ19NRVNTQUdFUy8qLm1vKQorKyAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKyAgICAgICAgIHNlZCAtaSAtZSAicyxQT1QtQ3JlYXRpb24tRGF0ZTogLi4uLi0uLi0uLiAuLjouLisuLi4uLFBPVC1DcmVhdGlvbi1EYXRlOiAxOTcwLTAxLTAxIDAwOjAwKzAwMDAsIiAkZgorKyAgICAgICBkb25lCisrICAgICAgIDs7CisrICAgICAvdXNyL3NoYXJlL2RvYy9wYWNrYWdlcy8qLyouaHRtbHxcCisrICAgICAvdXNyL3NoYXJlL2RvYy9rZGUvSFRNTC8qLyovKi5odG1sfC91c3Ivc2hhcmUvZG9jLyovaHRtbC8qLmh0bWwpCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrICAgICAgICAgIyB0ZXhpMmh0bWwgb3V0cHV0LCBlLmcuIGluIGt2bSwgaW5kZW50LCBxZW11CisrCSBzZWQgLWkgLWUgInN8XjwhLS0gQ3JlYXRlZCBvbiAuKiwgMjAuLiBieSB0ZXhpMmh0bWwgLlwuLi58PCEtLSBDcmVhdGVkIG9uIEF1Z3VzdCA3LCAyMDA5IGJ5IHRleGkyaHRtbCAxLjgyfCIgJGYKKysJIHNlZCAtaSAtZSAnc3xeICpUaGlzIGRvY3VtZW50IHdhcyBnZW5lcmF0ZWQgYnkgPGVtPkF1dG9idWlsZDwvZW0+IG9uIDxlbT4uKiwgMjAuLjwvZW0+IHVzaW5nIDxhIGhyZWY9Imh0dHA6Ly93d3cubm9uZ251Lm9yZy90ZXhpMmh0bWwvIj48ZW0+dGV4aTJodG1sIC5cLi4uPC9lbT48L2E+LiR8ICBUaGlzIGRvY3VtZW50IHdhcyBnZW5lcmF0ZWQgYnkgPGVtPkF1dG9idWlsZDwvZW0+IG9uIDxlbT5BdWd1c3QgNywgMjAwOTwvZW0+IHVzaW5nIDxhIGhyZWY9Imh0dHA6Ly93d3cubm9uZ251Lm9yZy90ZXhpMmh0bWwvIj48ZW0+dGV4aTJodG1sIDEuODI8L2VtPjwvYT4ufCcgJGYKKysJICMgZG94eWdlbiBkb2N1LCBlLmcuIGluIGxpYnNzaCBhbmQgbG9nNGMKKysJIHNlZCAtaSAtZSAnc3xHZW5lcmF0ZWQgb24gLi4uIC4uLiBbMC05XSogWzAtOV0qOlswLTldWzAtOV06WzAtOV1bMC05XSAyMFswLTldWzAtOV0gZm9yIHxHZW5lcmF0ZWQgb24gTW9uIE1heSAxMCAyMDo0NTowMCAyMDEwIGZvciB8JyAkZgorKwkgIyBHZW5lcmF0ZWQgb24gU2F0IEF1ZyAxNCAyMDEwIDE2OjQ5OjQ4IGZvciBsaWJzc2gKKysJIHNlZCAtaSAtZSAnc3xHZW5lcmF0ZWQgb24gLi4uIC4uLiBbMC05XSogMjBbMC05XVswLTldIFswLTldKjpbMC05XVswLTldOlswLTldWzAtOV0gZm9yIHxHZW5lcmF0ZWQgb24gTW9uIE1heSAxMCAyMDo0NTowMCAyMDEwIGZvciB8JyAkZgorKyAgICAgICBkb25lCisrICAgICAgIHN0cmlwX251bWJlcmVkX2FuY2hvcnMKKysgICAgICAgOzsKKysgICAgIC91c3Ivc2hhcmUvamF2YWRvYy8qLmh0bWwgfFwKKysgICAgIC91c3Ivc2hhcmUvamF2YWRvYy8qLyouaHRtbHwvdXNyL3NoYXJlL2phdmFkb2MvKi8qLyouaHRtbCkKKysgICAgICAgc3RyaXBfbnVtYmVyZWRfYW5jaG9ycworKyAgICAgICAjIFRoZXJlIGFyZSBtb3JlIHRpbWVzdGFtcHMgaW4gaHRtbCwgc28gZmFyIHdlIGhhbmRsZSBvbmx5IHNvbWUgcHJpbWl0aXZlIHZlcnNpb25zLgorKyAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKyAgICAgICAgICMgSmF2YWRvYzoKKysgICAgICAgICAgIyA8aGVhZD4KKysgICAgICAgICAgIyA8IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jICh2ZXJzaW9uIDEuNy4wXzc1KSBvbiBUdWUgRmViIDAzIDAyOjIwOjEyIEdNVCAyMDE1IC0tPgorKyAgICAgICAgICAjIDwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVHVlIEZlYiAwMyAwMDowMjo0OCBHTVQgMjAxNSAtLT4KKysgICAgICAgICAgIyA8bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDE1LTAyLTAzIj4KKysgICAgICAgICAgIyA8L2hlYWQ+CisrICAgICAgICAgIHNlZCAtaSAtZSAnCisrICAgICAgICAgICAgL148aGVhZD4veworKyAgICAgICAgICAgICAgOiBuZXh0CisrICAgICAgICAgICAgICBuCisrICAgICAgICAgICAgICAvXjxcL2hlYWQ+L3sKKysgICAgICAgICAgICAgICAgYiBlbmRfaGVhZAorKyAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgcy9eXCg8IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jXCkgXCgoXChidWlsZFx8dmVyc2lvblwpIFswLTkuX11cKykgb24gLi4uIC4uLiAuLiAuLjouLjouLiBcKEdNVFx8VVRDXCkgLi4uLlwpIFwoLS0+XCkvXDEgc29tZS1kYXRlLXJlbW92ZWQtYnktYnVpbGQtY29tcGFyZSBcNS8KKysgICAgICAgICAgICAgIHQgbmV4dAorKyAgICAgICAgICAgICAgcy9eXCg8IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jXCkgXChvbiAuLi4gLi4uIC4uIC4uOi4uOi4uIFwoR01UXHxVVENcKSAuLi4uXCkgXCgtLT5cKS9cMSBzb21lLWRhdGUtcmVtb3ZlZC1ieS1idWlsZC1jb21wYXJlIFwzLworKyAgICAgICAgICAgICAgdCBuZXh0CisrICAgICAgICAgICAgICBzL148bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSJbMC05XVx7NFx9LVswLTldXHsyXH0tWzAtOV1cezJcfSI+LzxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9InNvbWUtZGF0ZS1yZW1vdmVkLWJ5LWJ1aWxkLWNvbXBhcmUiPi8KKysgICAgICAgICAgICAgIGIgbmV4dAorKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICA6IGVuZF9oZWFkCisrICAgICAgICAgICcgJGYKKysgICAgICAgICAjIEdqZG9jIEh0bWxEb2NsZXQ6CisrCSBzZWQgLWkgLWUgJ3MlR2VuZXJhdGVkIGJ5IEdqZG9jIEh0bWxEb2NsZXQgWzAtOSwuXSosIHBhcnQgb2YgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NsYXNzcGF0aC9jcC10b29scy8iIHRpdGxlPSIiIHRhcmdldD0iX3RvcCI+R05VIENsYXNzcGF0aCBUb29sczwvYT4sIG9uIC4qLCAyMC4uIFswLTldKjouLjouLiBcKGFcfHBcKVwubVwuIEdNVC4lR2VuZXJhdGVkIGJ5IEdqZG9jLiUnICRmCisrCSBzZWQgLWkgLWUgJ3MlPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9nbnUub3JnLy8vRFREIFhIVE1MIDEuMSBwbHVzIFRhcmdldCAxLjAvL0VOIlwoLipcKUdOVSBDbGFzc3BhdGggVG9vbHM8L2E+LCBvbiBbQS1aXVthLXpdKiBbMC05XSosIDIwPz8gWzAtOV0qOj8/Oj8/IFwoYXxwXClcLm1cLiBHTVQuPC9wPiU8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL2dudS5vcmcvLy9EVEQgWEhUTUwgMS4xIHBsdXMgVGFyZ2V0IDEuMC8vRU4iXDFHTlUgQ2xhc3NwYXRoIFRvb2xzPC9hPiwgb24gSmFudWFyeSAxLCAyMDA5IDA6MDA6MDAgYS5tLiBHTVQuPC9wPiUnICRmCisrCSBzZWQgLWkgLWUgJ3MlPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9nbnUub3JnLy8vRFREXCguKkdOVSBDbGFzc3BhdGggVG9vbHM8L2E+XCksIG9uIFthLXpBLVpdKiBbMC05XVswLTldLCAyMC4uIFswLTldKjouLjouLiBcKGFcfHBcKVwubVwuIEdNVC48L3A+JTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vZ251Lm9yZy8vL0RURFwxLG9uIE1heSAxLCAyMDEwIDE6MTE6NDIgcC5tLiBHTVQuPC9wPiUnICRmCisrCSAjIGRlcHJlY2F0ZWQtbGlzdCBpcyByYW5kb21seSBvcmRlcmVkLCBzb3J0IGl0IGZvciBjb21wYXJpc29uCisrCSBjYXNlICRmIGluCisrCSAgICovZGVwcmVjYXRlZC1saXN0Lmh0bWwpCisrCSAgICAgc29ydCAtbyAkZiAkZgorKwkgICAgIDs7CisrCSBlc2FjCisrICAgICAgIGRvbmUKKysgICAgICAgOzsKKysgICAgIC91c3Ivc2hhcmUvamF2YWRvYy9namRvYy5wcm9wZXJ0aWVzIHxcCisrICAgICAvdXNyL3NoYXJlL2phdmFkb2MvKi9namRvYy5wcm9wZXJ0aWVzKQorKyAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKwkgc2VkIC1pIC1lICdzfF4jW0EtWl1bYS16XVx7Mlx9IFtBLVpdW2Etel1cezJcfSBbMC05XVx7Mlx9IC4uOi4uOi4uIEdNVCAyMC4uJHwjRnJpIEphbiAwMSAxMToyNzozNiBHTVQgMjAwOXwnICRmCisrICAgICAgIGRvbmUKKysgICAgICAgOzsKKysgICAgICovZm9udHMuc2NhbGV8Ki9mb250cy5kaXJ8Ki9lbmNvZGluZ3MuZGlyKQorKyAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKyAgICAgICAgICMgc29ydCBmaWxlcyBiZWZvcmUgY29tcGFyaW5nCisrICAgICAgICAgc29ydCAtbyAkZiAkZgorKyAgICAgICBkb25lCisrICAgICAgIDs7CisrICAgICAvdmFyL2FkbS9wZXJsLW1vZHVsZXMvKikKKysgICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKysgICAgICAgICBzZWQgLWkgLWUgJ3N8Xj1oZWFkMiAuLi4gLi4uIC4uIC4uOi4uOi4uIC4uLi46IEM8TW9kdWxlPnw9aGVhZDIgV2VkIEp1bCAgMSAwMDowMDowMCAyMDA5OiBDPE1vZHVsZT58JyAkZgorKyAgICAgICBkb25lCisrICAgICAgIDs7CisrICAgICAvdXNyL3NoYXJlL21hbi9tYW4zLyozcG0pCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrICAgICAgICAgc2VkIC1pIC1lICdzfCAzICIyMC4uLS4uLS4uIiAicGVybCB2NS4uLi4uIiAiVXNlciBDb250cmlidXRlZCBQZXJsIERvY3VtZW50YXRpb24iJHwgMyAiMjAwOS0wMS0wMSIgInBlcmwgdjUuMTAuMCIgIlVzZXIgQ29udHJpYnV0ZWQgUGVybCBEb2N1bWVudGF0aW9uInwnICRmCisrICAgICAgICAgdHJpbV9tYW5fVEggJGYKKysgICAgICAgICB0cmltX21hbl9maXJzdF9saW5lICRmCisrICAgICAgIGRvbmUKKysgICAgICAgOzsKKysgICAgIC91c3Ivc2hhcmUvbWFuLyovbWFuKnwvdXNyL3NoYXJlL21hbi9tYW4qfC91c3IvbGliL3RleG1mL2RvYy9tYW4vKi8qKQorKworKyAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKyAgICAgICAgIHRyaW1fbWFuX1RIICRmCisrICAgICAgICAgdHJpbV9tYW5fZmlyc3RfbGluZSAkZgorKyAgICAgICAgICMgZ2VuZXJhdGVkIGJ5IGRvY2Jvb2sgeG1sOgorKyAgICAgICAgICMuXCIgICAgICBEYXRlOiAwOS8xMy8yMDEwCisrICAgICAgICAgc2VkIC1pIC1lICdzfERhdGU6IFswLTFdWzAtOV0vWzAtOV1bMC05XS8yMDFbMC05XXxEYXRlOiAwOS8xMy8yMDEwfCcgJGYKKysgICAgICAgZG9uZQorKyAgICAgICA7OworKyAgICAgKi5lbGMpCisrICAgICAgICMgZW1hY3MgbGlzcCBmaWxlcworKyAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKyAgICAgICAgIHNlZCAtaSAtZSAnc3xDb21waWxlZCBieSBhYnVpbGRALiogb24gLi4uIC4uLiAuLiAuLjouLjouLiAyMC4uJHxjb21waWxlZCBieSBhYnVpbGRAYnVpbGRob3N0IG9uIFdlZCBKdWwgMDEgMDA6MDA6MDAgMjAwOXwnICRmCisrICAgICAgIGRvbmUKKysgICAgICAgOzsKKysgICAgIC92YXIvbGliL3RleG1mL3dlYjJjLyovKmZtdCB8XAorKyAgICAgL3Zhci9saWIvdGV4bWYvd2ViMmMvbWV0YWZvbnQvKi5iYXNlfFwKKysgICAgIC92YXIvbGliL3RleG1mL3dlYjJjL21ldGFwb3N0LyoubWVtKQorKyAgICAgICAjIGJpbmFyeSBkdW1wIG9mIFRlWCBhbmQgTWV0YWZvbnQgZm9ybWF0cywgd2UgY2FuIGlnbm9yZSB0aGVtIGZvciBnb29kCisrICAgICAgIGVjaG8gImRpZmZlcmVuY2UgaW4gJGZpbGUgaWdub3JlZC4iCisrICAgICAgIHJldHVybiAwCisrICAgICAgIDs7CisrICAgICAqL2xpYnRvb2wpCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrCSAgc2VkIC1pIC1lICdzfF4jIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBbQS1aYS16MC05XSo6JHwjIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCB4NDI6fCcgJGYKKysgICAgICAgZG9uZQorKyAgICAgICA7OworKyAgICAgL2V0Yy9tYWlsLypjZnwvZXRjL3NlbmRtYWlsLmNmKQorKyAgICAgICAjIGZyb20gc2VuZG1haWwgcGFja2FnZQorKyAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKwkgICMgLSAjIyMjIyBidWlsdCBieSBhYnVpbGRAYnVpbGQzMyBvbiBUaHUgTWF5IDYgMTE6MjE6MTcgVVRDIDIwMTAKKysJICBzZWQgLWkgLWUgJ3N8YnVpbHQgYnkgYWJ1aWxkQFthLXowLTldKiBvbiAuLi4gLi4uIFswLTldKiBbMC05XSo6WzAtOV1bMC05XTpbMC05XVswLTldIC4qIDIwWzAtOV1bMC05XXxidWlsdCBieSBhYnVpbGRAYnVpbGQ0MiBvbiBUaHUgTWF5IDYgMTE6MjE6MTcgVVRDIDIwMTB8JyAkZgorKyAgICAgICBkb25lCisrICAgICAgIDs7CisrICAgICAvdXNyL3NoYXJlL2RvYy9rZGUvSFRNTC8qLyovaW5kZXguY2FjaGV8L3Vzci9zaGFyZS9kb2Mva2RlL0hUTUwvKi8qLyovaW5kZXguY2FjaGV8XAorKyAgICAgL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvKi8qLmh0bWx8L3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvKi8qLmRldmhlbHAyKQorKyAgICAgICAjIHZhcmlvdXMga2RlIGFuZCBndGsgcGFja2FnZXMKKysgICAgICAgc3RyaXBfbnVtYmVyZWRfYW5jaG9ycworKyAgICAgICA7OworKyAgICAqL2NyZWF0ZWQucmlkKQorKyAgICAgICAjIHJ1YnkgZG9jdW1lbnRhdGlvbgorKyAgICAgICAjIGZpbGUganVzdCBjb250YWlucyBhIHRpbWVzdGFtcCBhbmQgbm90aGluZyBlbHNlLCBzbyBpZ25vcmUgaXQKKysgICAgICAgZWNobyAiSWdub3JlICRmaWxlIgorKyAgICAgICByZXR1cm4gMAorKyAgICAgICA7OworKyAgICAqL3Jkb2MvZmlsZXMvKi5odG1sKQorKyAgICAgICAjIHJ1YnkgZG9jdW1lbnRhdGlvbgorKyAgICAgICAjIDx0ZD5Nb27igIJTZXDigIIyMOKAgjE5OjAyOjQz4oCCKzAwMDDigIIyMDEwPC90ZD4KKysgICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKysgICAgICAgICAgc2VkIC1pIC1lICdzJTx0ZD5bQS1aXVthLXpdW2Etel0gW0EtWl1bYS16XVthLXpdIFswLTldXCsgWzAtOV1cKzpbMC05XVwrOlswLTldXCsgKzAwMDAgMjAxWzAtOV08L3RkPiU8dGQ+TW9u4oCCU2Vw4oCCMjDigIIxOTowMjo0M+KAgiswMDAw4oCCMjAxMDwvdGQ+JWcnICRmCisrICAgICAgIGRvbmUKKysgICAgICAgc3RyaXBfbnVtYmVyZWRfYW5jaG9ycworKyAgICAgICA7OworKyAgICAqL0xpbnV4KkVudi5TZXQuc2gpCisrICAgICAgICMgTGlicmVPZmZpY2UgZmlsZXMsIGNvbnRhaW5zOgorKyAgICAgICAjIEdlbmVyYXRlZCBvbjogTW9uIEFwciAxOCAxMzoxOToyMiBVVEMgMjAxMQorKyAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKwkgc2VkIC1pIC1lICdzJV4jIEdlbmVyYXRlZCBvbjouKlVUQyAyMDFbMC05XSAqJCUjIEdlbmVyYXRlZCBvbjogU29tZXRpbWUlZycgJGYKKysgICAgICAgZG9uZQorKyAgICAgICA7OworKyAgICAvdXNyL2xpYi9saWJyZW9mZmljZS9zb2x2ZXIvaW5jLyovZGVsaXZlci5sb2cpCisrICAgICAgICMgTGlicmVPZmZpY2UgbG9nIGZpbGUKKysgICAgICBlY2hvICJJZ25vcmUgJGZpbGUiCisrICAgICAgcmV0dXJuIDAKKysgICAgICA7OworKyAgICAvdmFyL2FkbS91cGRhdGUtbWVzc2FnZXMvKnwvdmFyL2FkbS91cGRhdGUtc2NyaXB0cy8qKQorKyAgICAgICMgZW5jb2RlIHZlcnNpb24tcmVsZWFzZSBpbnNpZGUKKysgICAgICBvbGRmbj1gZWNobyAiJGZpbGUifHNlZCAtZSBzLy0kcmVsZWFzZTIvLSRyZWxlYXNlMS87YAorKworKyAgICAgICMgZmV0Y2htc3R0Zm9udHMgZW1iZWRzIHRoZSByZWxlYXNlIG51bWJlciBpbiB0aGUgdXBkYXRlIHNoZWxsIHNjcmlwdC4KKysgICAgICBlY2hvIHNlZCAtaSAtZSAicy8tJHJlbGVhc2UxLy0kcmVsZWFzZTIvZzsiICJvbGQvJG9sZGZuIgorKyAgICAgIHNlZCAtaSAtZSAicy8tJHJlbGVhc2UxLy0kcmVsZWFzZTIvZzsiICJvbGQvJG9sZGZuIgorKworKyAgICAgIGlmICEgZGlmZiAtdSBvbGQvJG9sZGZuIG5ldy8kZmlsZTsgdGhlbgorKyAgICAgICAgICAgZWNobyAiJG9sZGZuIGlzIG5vdCBzYW1lIGFzICRmaWxlIgorKyAgICAgICAgICAgcmV0dXJuIDEKKysgICAgICBmaQorKyAgICAgIGVjaG8gIiRmaWxlIGFuZCAkb2xkZm4gYXJlIHNhbWUiCisrICAgICAgcmV0dXJuIDAKKysgICAgICA7OworKyAgICAqLnBzKQorKyAgICAgIGZvciBmIGluICJvbGQvJGZpbGUiICJuZXcvJGZpbGUiOyBkbworKyAgICAgICAgc2VkIC1pIC1lICcKKysgICAgICAgICAgL14lJUNyZWF0aW9uRGF0ZTpbWzpibGFuazpdXS9kCisrICAgICAgICAgIC9eJSVDcmVhdG9yOltbOmJsYW5rOl1dZ3JvZmZbWzpibGFuazpdXXZlcnNpb25bWzpibGFuazpdXS9kCisrICAgICAgICAgIC9eJURWSVBTU291cmNlOltbOmJsYW5rOl1dL2QKKysgICAgICAgICcgIiRmIgorKyAgICAgIGRvbmUKKysgICAgOzsKKysgICAgKnBkZikKKysgICAgICAjIFBERiBmaWxlcyBjb250YWluIGEgdW5pcXVlIElELCByZW1vdmUgaXQKKysgICAgICAjIEZvcm1hdCBvZiB0aGUgSUQgaXM6CisrICAgICAgIyAvSUQgWzw5QUNFMjQ3QTcwQ0Y5QkVBRkVFMTVFMTE2MjU5QkQ2RD4gPDlBQ0UyNDdBNzBDRjlCRUFGRUUxNUUxMTYyNTlCRDZEPl0KKysgICAgICAjIHdpdGggb3B0aW9uYWwgc3BhY2VzLiBwZGZ0ZXggY3JlYXRlcyBhbHNvOgorKyAgICAgICMgL0NyZWF0aW9uRGF0ZSAoRDoyMDEyMDEwMzA4MzIwNlopCisrICAgICAgIyAvTW9kRGF0ZSAoRDoyMDEyMDEwMzA4MzIwNlopCisrICAgICAgIyBhbmQgcG9zc2libHkgWE1MIG1ldGFkYXRhIGFzIHdlbGwKKysgICAgICBmb3IgZiBpbiAib2xkLyRmaWxlIiAibmV3LyRmaWxlIjsgZG8KKysgICAgICAgIHNlZCAtaSBcCisrICAgICAgICAgICAgJy9vYmovLC9lbmRvYmoveworKyAgICAgICAgICAgICAgIHMlL0lEIFw/XFsgXD88W14+XVwrPiBcPzxbXj5dXCs+IFw/XF0lL0lEcmFuZG9tJWc7CisrICAgICAgICAgICAgICAgcyUvQ3JlYXRpb25EYXRlIFw/KEQ6W14pXSopJS9DcmVhdGlvbkRhdGUgKEQ6IFhYWCklZzsKKysgICAgICAgICAgICAgICBzJS9Nb2REYXRlIFw/KEQ6W14pXSopJS9Nb2REYXRlIChEOiBYWFgpJWc7CisrICAgICAgICAgICAgICAgcyU8cGRmOkNyZWF0aW9uRGF0ZT5bXjxdKjwvcGRmOkNyZWF0aW9uRGF0ZT4lPHBkZjpDcmVhdGlvbkRhdGU+WFhYPC9wZGY6Q3JlYXRpb25EYXRlPiVnOworKyAgICAgICAgICAgICAgIHMlPHBkZjpNb2REYXRlPltePF0qPC9wZGY6TW9kRGF0ZT4lPHBkZjpNb2REYXRlPlhYWDwvcGRmOk1vZERhdGU+JWc7CisrICAgICAgICAgICAgICAgcyU8eGFwOkNyZWF0ZURhdGU+W148XSo8L3hhcDpDcmVhdGVEYXRlPiU8eGFwOkNyZWF0ZURhdGU+WFhYPC94YXA6Q3JlYXRlRGF0ZT4lZzsKKysgICAgICAgICAgICAgICBzJTx4YXA6TW9kaWZ5RGF0ZT5bXjxdKjwveGFwOk1vZGlmeURhdGU+JTx4YXA6TW9kaWZ5RGF0ZT5YWFg8L3hhcDpNb2RpZnlEYXRlPiVnOworKyAgICAgICAgICAgICAgIHMlPHhhcDpNZXRhZGF0YURhdGU+W148XSo8L3hhcDpNZXRhZGF0YURhdGU+JTx4YXA6TWV0YWRhdGFEYXRlPlhYWDwveGFwOk1ldGFkYXRhRGF0ZT4lZzsKKysgICAgICAgICAgICB9JyAiJGYiCisrICAgICAgZG9uZQorKyAgICAgIDs7CisrICBlc2FjCisrCisrICBmdHlwZT1gL3Vzci9iaW4vZmlsZSBvbGQvJGZpbGUgfCBzZWQgJ3NAXlteOl1cKzpbWzpibGFuazpdXSpAQCdgCisrICBjYXNlICRmdHlwZSBpbgorKyAgICAgUEUzMlwgZXhlY3V0YWJsZSpNb25vXC9cLk5ldFwgYXNzZW1ibHkqKQorKyAgICAgICBlY2hvICJQRTMyIE1vbm8vLk5ldCBhc3NlbWJseTogJGZpbGUiCisrICAgICAgIGlmIFsgLXggL3Vzci9iaW4vbW9ub2RpcyBdIDsgdGhlbgorKyAgICAgICAgIG1vbm9kaXMgb2xkLyRmaWxlIDI+L2Rldi9udWxsfHNlZCAtZSAncy9HVUlEID0gey4qfS9HVUlEID0geyA0MiB9LzsnPiAke2ZpbGUxfQorKyAgICAgICAgIG1vbm9kaXMgbmV3LyRmaWxlIDI+L2Rldi9udWxsfHNlZCAtZSAncy9HVUlEID0gey4qfS9HVUlEID0geyA0MiB9LzsnPiAke2ZpbGUyfQorKyAgICAgICAgIGlmICEgY21wIC1zICR7ZmlsZTF9ICR7ZmlsZTJ9OyB0aGVuCisrICAgICAgICAgICBlY2hvICIkZmlsZSBkaWZmZXJzICgkZnR5cGUpIgorKyAgICAgICAgICAgZGlmZiAtdSAke2ZpbGUxfSAke2ZpbGUyfQorKyAgICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgICBmaQorKyAgICAgICBlbHNlCisrICAgICAgICAgZWNobyAiQ2Fubm90IGNvbXBhcmUsIG5vIG1vbm9kaXMgaW5zdGFsbGVkIgorKyAgICAgICAgIHJldHVybiAxCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICAgIEVMRipleGVjdXRhYmxlKnxFTEYqW0xNXVNCXCBzaGFyZWRcIG9iamVjdCopCisrICAgICAgIG9iamR1bXAgLWQgLS1uby1zaG93LXJhdy1pbnNuIG9sZC8kZmlsZSB8IGZpbHRlcl9kaXNhc20gPiAkZmlsZTEKKysgICAgICAgaWYgISB0ZXN0IC1zICRmaWxlMTsgdGhlbgorKyAgICAgICAgICMgb2JqZHVtcCBoYXMgbm8gaWRlYSBob3cgdG8gaGFuZGxlIGl0CisrICAgICAgICAgaWYgISBkaWZmX3R3b19maWxlczsgdGhlbgorKyAgICAgICAgICAgcmV0PTEKKysgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgZmkKKysgICAgICAgZmkgICAgICAgCisrICAgICAgIGVsZmRpZmY9CisrICAgICAgIHNlZCAtaSAtZSAicyxvbGQvLCwiICRmaWxlMQorKyAgICAgICBvYmpkdW1wIC1kIC0tbm8tc2hvdy1yYXctaW5zbiBuZXcvJGZpbGUgfCBmaWx0ZXJfZGlzYXNtID4gJGZpbGUyCisrICAgICAgIHNlZCAtaSAtZSAicyxuZXcvLCwiICRmaWxlMgorKyAgICAgICBpZiAhIGRpZmYgLXUgJGZpbGUxICRmaWxlMiA+ICRkZmlsZTsgdGhlbgorKyAgICAgICAgICBlY2hvICIkZmlsZSBkaWZmZXJzIGluIGFzc2VtYmxlciBvdXRwdXQiCisrICAgICAgICAgIGhlYWQgLW4gMjAwICRkZmlsZQorKyAgICAgICAgICBlbGZkaWZmPSIxIgorKyAgICAgICBmaQorKyAgICAgICBlY2hvICIiID4kZmlsZTEKKysgICAgICAgZWNobyAiIiA+JGZpbGUyCisrICAgICAgICMgRG9uJ3QgY29tcGFyZSAuYnVpbGQtaWQgYW5kIC5nbnVfZGVidWdsaW5rIHNlY3Rpb25zCisrICAgICAgIHNlY3Rpb25zPSIkKG9iamR1bXAgLXMgbmV3LyRmaWxlIHwgZ3JlcCAiQ29udGVudHMgb2Ygc2VjdGlvbiAuKjoiIHwgc2VkIC1yICJzLC4qICguKik6LFwxLGciIHwgZ3JlcCAtdiAtZSAiXC5idWlsZC1pZCIgLWUgIlwuZ251X2RlYnVnbGluayIgfCB0ciAiXG4iICIgIikiCisrICAgICAgIGZvciBzZWN0aW9uIGluICRzZWN0aW9uczsgZG8KKysgICAgICAgICAgb2JqZHVtcCAtcyAtaiAkc2VjdGlvbiBvbGQvJGZpbGUgfCBzZWQgInMsXm9sZC8sLCIgPiAkZmlsZTEKKysgICAgICAgICAgb2JqZHVtcCAtcyAtaiAkc2VjdGlvbiBuZXcvJGZpbGUgfCBzZWQgInMsXm5ldy8sLCIgPiAkZmlsZTIKKysgICAgICAgICAgaWYgISBkaWZmIC11ICRmaWxlMSAkZmlsZTIgPiAkZGZpbGU7IHRoZW4KKysgICAgICAgICAgICAgZWNobyAiJGZpbGUgZGlmZmVycyBpbiBFTEYgc2VjdGlvbiAkc2VjdGlvbiIKKysgICAgICAgICAgICAgaGVhZCAtbiAyMDAgJGRmaWxlCisrICAgICAgICAgICAgIGVsZmRpZmY9IjEiCisrICAgICAgICAgIGZpCisrICAgICAgIGRvbmUKKysgICAgICAgaWYgdGVzdCAteiAiJGVsZmRpZmYiOyB0aGVuCisrICAgICAgICAgIGVjaG8gIiRmaWxlOiBvbmx5IGRpZmZlcmVuY2Ugd2FzIGluIGJ1aWxkLWlkIG9yIGdudV9kZWJ1Z2xpbmssIEdPT0QuIgorKyAgICAgICAgICByZXR1cm4gMAorKyAgICAgICBmaQorKyAgICAgICByZXR1cm4gMQorKyAgICAgICA7OworKyAgICAgKkFTQ0lJKnwqdGV4dCopCisrICAgICAgIGlmICEgY21wIC1zIG9sZC8kZmlsZSBuZXcvJGZpbGU7IHRoZW4KKysgICAgICAgICBlY2hvICIkZmlsZSBkaWZmZXJzICgkZnR5cGUpIgorKyAgICAgICAgIGRpZmYgLXUgb2xkLyRmaWxlIG5ldy8kZmlsZSB8IGhlYWQgLW4gMjAwCisrICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgIGRpcmVjdG9yeXxzZXR1aWQsXCBkaXJlY3Rvcnl8c3RpY2t5LFwgZGlyZWN0b3J5KQorKyAgICAgICAjIHRhciBtaWdodCBwYWNrYWdlIGRpcmVjdG9yaWVzIC0gaWdub3JlIHRoZW0gaGVyZQorKyAgICAgICByZXR1cm4gMAorKyAgICAgICA7OworKyAgICAgYnppcDJcIGNvbXByZXNzZWRcIGRhdGEqKQorKyAgICAgICBpZiAhIGNoZWNrX2NvbXByZXNzZWRfZmlsZSAiJGZpbGUiICJiejIiOyB0aGVuCisrICAgICAgICAgICByZXR1cm4gMQorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAgZ3ppcFwgY29tcHJlc3NlZFwgZGF0YSopCisrICAgICAgIGlmICEgY2hlY2tfY29tcHJlc3NlZF9maWxlICIkZmlsZSIgImd6aXAiOyB0aGVuCisrICAgICAgICAgICByZXR1cm4gMQorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAgWFpcIGNvbXByZXNzZWRcIGRhdGEqKQorKyAgICAgICBpZiAhIGNoZWNrX2NvbXByZXNzZWRfZmlsZSAiJGZpbGUiICJ4eiI7IHRoZW4KKysgICAgICAgICAgIHJldHVybiAxCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICAgICBQT1NJWFwgdGFyXCBhcmNoaXZlKQorKyAgICAgICAgICBtdiBvbGQvJGZpbGV7LC50YXJ9CisrICAgICAgICAgIG12IG5ldy8kZmlsZXssLnRhcn0KKysgICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAke2ZpbGV9LnRhcjsgdGhlbgorKyAgICAgICAgICAgIHJldHVybiAxCisrICAgICAgICAgIGZpCisrICAgICAgIDs7CisrICAgICBjcGlvXCBhcmNoaXZlKQorKyAgICAgICAgICBtdiBvbGQvJGZpbGV7LC5jcGlvfQorKyAgICAgICAgICBtdiBuZXcvJGZpbGV7LC5jcGlvfQorKyAgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICR7ZmlsZX0uY3BpbzsgdGhlbgorKyAgICAgICAgICAgIHJldHVybiAxCisrICAgICAgICAgIGZpCisrICAgICA7OworKyAgICAgc3ltYm9saWNcIGxpbmtcIHRvXCAqKQorKyAgICAgICByZWFkbGluayAib2xkLyRmaWxlIiA+ICRmaWxlMQorKyAgICAgICByZWFkbGluayAibmV3LyRmaWxlIiA+ICRmaWxlMgorKyAgICAgICBpZiAhIGRpZmYgLXUgJGZpbGUxICRmaWxlMjsgdGhlbgorKyAgICAgICAgIGVjaG8gInN5bWxpbmsgdGFyZ2V0IGZvciAkZmlsZSBkaWZmZXJzIgorKyAgICAgICAgIHJldHVybiAxCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICAgICAqKQorKyAgICAgICBpZiAhIGRpZmZfdHdvX2ZpbGVzOyB0aGVuCisrICAgICAgICAgICByZXR1cm4gMQorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgZXNhYworKyAgcmV0dXJuIDAKKyt9CisrCisrIyBXZSBuZWVkIC9wcm9jIG1vdW50ZWQgZm9yIHNvbWUgdGVzdHMsIHNvIGNoZWNrIHRoYXQgaXQncyBtb3VudGVkIGFuZAorKyMgY29tcGxhaW4gaWYgbm90LgorK1BST0NfTU9VTlRFRD0wCisraWYgWyAhIC1kIC9wcm9jL3NlbGYvIF07IHRoZW4KKysgIGVjaG8gIi9wcm9jIGlzIG5vdCBtb3VudGVkIgorKyAgbW91bnQgLW9ydyAtbiAtdHByb2Mgbm9uZSAvcHJvYworKyAgUFJPQ19NT1VOVEVEPTEKKytmaQorKworKyMgcHJlc2VydmUgY21wX3NwZWMgcmVzdWx0IGZvciBjaGVja19hbGwgcnVucworK3JldD0kUkVTCisrZm9yIGZpbGUgaW4gJGZpbGVzOyBkbworKyAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJGZpbGU7IHRoZW4KKysgICAgICAgcmV0PTEKKysgICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKysgICAgICAgICAgIGJyZWFrCisrICAgICAgIGZpCisrICAgZmkKKytkb25lCisrCisraWYgWyAiJFBST0NfTU9VTlRFRCIgLWVxICIxIiBdOyB0aGVuCisrICBlY2hvICJVbm1vdW50aW5nIHByb2MiCisrICB1bW91bnQgL3Byb2MKKytmaQorKworK3JtICRmaWxlMSAkZmlsZTIgJGRmaWxlICRyZW5hbWVfc2NyaXB0Cisrcm0gLXJmICRkaXIKKytpZiB0ZXN0ICIkcmV0IiA9IDA7IHRoZW4KKysgICAgIGVjaG8gIlBhY2thZ2UgY29udGVudCBpcyBpZGVudGljYWwiCisrZmkKKytleGl0ICRyZXQKKysjIHZpbTogdHc9NjY2IHRzPTIgZXQKK2RpZmYgLS1naXQgYS9ycG0tY2hlY2suc2ggYi9ycG0tY2hlY2suc2gKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQoraW5kZXggZGQ0NzY0Mi4uMDAwMDAwMAorLS0tIGEvcnBtLWNoZWNrLnNoCisrKysgL2Rldi9udWxsCitAQCAtMSw3NjQgKzAsMCBAQAorLSMhIC9iaW4vYmFzaAorLSMKKy0jIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBTVVNFIExpbnV4IFByb2R1Y3QgR21iSCwgR2VybWFueS4KKy0jIExpY2Vuc2VkIHVuZGVyIEdQTCB2Miwgc2VlIENPUFlJTkcgZmlsZSBmb3IgZGV0YWlscy4KKy0jCistIyBXcml0dGVuIGJ5IE1pY2hhZWwgTWF0eiBhbmQgU3RlcGhhbiBDb29sbworLSMgRW5oYW5jZWQgYnkgQW5kcmVhcyBKYWVnZXIKKy0KKy1GVU5DVElPTlM9JHswJS8qfS9mdW5jdGlvbnMuc2gKKy0KKy1jaGVja19hbGw9CistY2FzZSAkMSBpbgorLSAgLWEgfCAtLWNoZWNrLWFsbCkKKy0gICAgY2hlY2tfYWxsPTEKKy0gICAgc2hpZnQKKy1lc2FjCistCistaWYgdGVzdCAiJCMiICE9IDI7IHRoZW4KKy0gICBlY2hvICJ1c2FnZTogJDAgWy1hfC0tY2hlY2stYWxsXSBvbGQucnBtIG5ldy5ycG0iCistICAgZXhpdCAxCistZmkKKy0KKy1zZWxmX3NjcmlwdD0kKGNkICQoZGlybmFtZSAkMCk7IGVjaG8gJChwd2QpLyQoYmFzZW5hbWUgJDApKQorLQorLXNvdXJjZSAkRlVOQ1RJT05TCistCistb2xkcGtnPWByZWFkbGluayAtZiAkMWAKKy1uZXdwa2c9YHJlYWRsaW5rIC1mICQyYAorLXJlbmFtZV9zY3JpcHQ9YG1rdGVtcGAKKy0KKy1pZiB0ZXN0ICEgLWYgIiRvbGRwa2ciOyB0aGVuCistICAgIGVjaG8gImNhbid0IG9wZW4gJDEiCistICAgIGV4aXQgMQorLWZpCistCistaWYgdGVzdCAhIC1mICIkbmV3cGtnIjsgdGhlbgorLSAgICBlY2hvICJjYW4ndCBvcGVuICQyIgorLSAgICBleGl0IDEKKy1maQorLQorLSN1c2FnZSB1bmphciA8ZmlsZT4KKy1mdW5jdGlvbiB1bmphcigpCisteworLSAgICBsb2NhbCBmaWxlCistICAgIGZpbGU9JDEKKy0KKy0gICAgaWYgW1sgJCh0eXBlIC1wIGZhc3RqYXIpIF1dOyB0aGVuCistICAgICAgICBVTkpBUj1mYXN0amFyCistICAgIGVsaWYgW1sgJCh0eXBlIC1wIGphcikgXV07IHRoZW4KKy0gICAgICAgIFVOSkFSPWphcgorLSAgICBlbGlmIFtbICQodHlwZSAtcCB1bnppcCkgXV07IHRoZW4KKy0gICAgICAgIFVOSkFSPXVuemlwCistICAgIGVsc2UKKy0gICAgICAgIGVjaG8gIkVSUk9SOiBqYXIsIGZhc3RqYXIsIG9yIHVuemlwIGlzIG5vdCBpbnN0YWxsZWQgKHRyeWluZyBmaWxlICRmaWxlKSIKKy0gICAgICAgIGV4aXQgMQorLSAgICBmaQorLQorLSAgICBjYXNlICRVTkpBUiBpbgorLSAgICAgICAgamFyfGZhc3RqYXIpCistICAgICAgICAjIGVjaG8gamFyIC14ZiAkZmlsZQorLSAgICAgICAgJHtVTkpBUn0gLXhmICRmaWxlCistICAgICAgICA7OworLSAgICAgICAgdW56aXApCistICAgICAgICB1bnppcCAtb3FxICRmaWxlCistICAgICAgICA7OworLSAgICBlc2FjCistfQorLQorLSMgbGlzdCBmaWxlcyBpbiBkaXJlY3RvcnkKKy0jdXNhZ2UgdW5qYXJfbCA8ZmlsZT4KKy1mdW5jdGlvbiB1bmphcl9sKCkKKy17CistICAgIGxvY2FsIGZpbGUKKy0gICAgZmlsZT0kMQorLQorLSAgICBpZiBbWyAkKHR5cGUgLXAgZmFzdGphcikgXV07IHRoZW4KKy0gICAgICAgIFVOSkFSPWZhc3RqYXIKKy0gICAgZWxpZiBbWyAkKHR5cGUgLXAgamFyKSBdXTsgdGhlbgorLSAgICAgICAgVU5KQVI9amFyCistICAgIGVsaWYgW1sgJCh0eXBlIC1wIHVuemlwKSBdXTsgdGhlbgorLSAgICAgICAgVU5KQVI9dW56aXAKKy0gICAgZWxzZQorLSAgICAgICAgZWNobyAiRVJST1I6IGphciwgZmFzdGphciwgb3IgdW56aXAgaXMgbm90IGluc3RhbGxlZCAodHJ5aW5nIGZpbGUgJGZpbGUpIgorLSAgICAgICAgZXhpdCAxCistICAgIGZpCistCistICAgIGNhc2UgJFVOSkFSIGluCistICAgICAgICBqYXJ8ZmFzdGphcikKKy0gICAgICAgICR7VU5KQVJ9IC10ZiAkZmlsZQorLSAgICAgICAgOzsKKy0gICAgICAgIHVuemlwKQorLSAgICAgICAgdW56aXAgLWwgJGZpbGUKKy0gICAgICAgIDs7CistICAgIGVzYWMKKy19CistCistZmlsdGVyX2Rpc2FzbSgpCisteworLSAgIHNlZCAtZSAncy9eICpbMC05YS1mXVwrOi8vJyAtZSAncy9cJDB4WzAtOWEtZl1cKy8kc29tZXRoaW5nLycgLWUgJ3MvY2FsbHEgKlswLTlhLWZdXCsvY2FsbHEgLycgLWUgJ3MvIyAqWzAtOWEtZl1cKy8jICAvJyAtZSAncy9cKDB4XClcP1swLTlhLWZdXCsoL29mZnNldCgvJyAtZSAncy9bMC05YS1mXVwrIDwvPC8nIC1lICdzL148XCguKlwpPjovXDE6LycgLWUgJ3MvPFwoLipcKSsweFswLTlhLWZdXCs+LzxcMSArIG9mcz4vJyAKKy19CistCistZWNobyAiQ29tcGFyaW5nIGBiYXNlbmFtZSAkb2xkcGtnYCB0byBgYmFzZW5hbWUgJG5ld3BrZ2AiCistCistY2FzZSAkb2xkcGtnIGluCistICAqLnJwbSkKKy0gICAgIGNtcF9zcGVjICRyZW5hbWVfc2NyaXB0ICRvbGRwa2cgJG5ld3BrZworLSAgICAgUkVTPSQ/CistICAgICBjYXNlICRSRVMgaW4KKy0gICAgICAgMCkKKy0gICAgICAgICAgZWNobyAiUlBNIG1ldGEgaW5mb3JtYXRpb24gaXMgaWRlbnRpY2FsIgorLSAgICAgICAgICBpZiB0ZXN0IC16ICIkY2hlY2tfYWxsIjsgdGhlbgorLSAgICAgICAgICAgICBleGl0IDAKKy0gICAgICAgICAgZmkKKy0gICAgICAgICAgOzsKKy0gICAgICAgMSkKKy0gICAgICAgICAgZWNobyAiUlBNIG1ldGEgaW5mb3JtYXRpb24gaXMgZGlmZmVyZW50IgorLSAgICAgICAgICBpZiB0ZXN0IC16ICIkY2hlY2tfYWxsIjsgdGhlbgorLSAgICAgICAgICAgICBleGl0IDEKKy0gICAgICAgICAgZmkKKy0gICAgICAgICAgOzsKKy0gICAgICAgMikKKy0gICAgICAgICAgZWNobyAiUlBNIGZpbGUgY2hlY2tzdW0gZGlmZmVycy4iCistICAgICAgICAgIFJFUz0wCistICAgICAgICAgIDs7CistICAgICAgICopCistICAgICAgICAgIGVjaG8gIldyb25nIGV4aXQgY29kZSEiCistICAgICAgICAgIGV4aXQgMQorLSAgICAgICAgICA7OworLSAgICAgZXNhYworLSAgICAgOzsKKy1lc2FjCistCistZmlsZTE9YG1rdGVtcGAKKy1maWxlMj1gbWt0ZW1wYAorLQorLWRpcj1gbWt0ZW1wIC1kYAorLWVjaG8gIkV4dHJhY3RpbmcgcGFja2FnZXMiCistdW5wYWNrYWdlICRvbGRwa2cgJGRpci9vbGQKKy11bnBhY2thZ2UgJG5ld3BrZyAkZGlyL25ldworLQorLSMgZmlsZXMgaXMgc2V0IGluIGNtcF9zcGVjIGZvciBycG1zLCBzbyBpZiBSRVMgaXMgZW1wdHkgd2Ugc2hvdWxkIGFzc3VtZQorLSMgaXQgd2Fzbid0IGFuIHJwbSBhbmQgcGljayBhbGwgZmlsZXMgZm9yIGNvbXBhcmlzb24uCistaWYgWyAteiAkUkVTIF07IHRoZW4KKy0gICAgb2xkZmlsZXM9YGNkICRkaXIvb2xkOyBmaW5kIC4gLXR5cGUgZmAKKy0gICAgbmV3ZmlsZXM9YGNkICRkaXIvbmV3OyBmaW5kIC4gLXR5cGUgZmAKKy0KKy0gICAgZmlsZXM9YGVjaG8gLWUgIiRvbGRmaWxlc1xuJG5ld2ZpbGVzIiB8IHNvcnQgLXVgCistZmkKKy0KKy1jZCAkZGlyCistYmFzaCAkcmVuYW1lX3NjcmlwdAorLQorLWRmaWxlPWBta3RlbXBgCistCistZGlmZl90d29fZmlsZXMoKQorLXsKKy0gIGlmICEgY21wIC1zIG9sZC8kZmlsZSBuZXcvJGZpbGU7IHRoZW4KKy0gICAgIGVjaG8gIiRmaWxlIGRpZmZlcnMgKCRmdHlwZSkiCistICAgICBoZXhkdW1wIC1DIG9sZC8kZmlsZSA+ICRmaWxlMQorLSAgICAgaGV4ZHVtcCAtQyBuZXcvJGZpbGUgPiAkZmlsZTIKKy0gICAgIGRpZmYgLXUgJGZpbGUxICRmaWxlMiB8IGhlYWQgLW4gMjAwCistICAgICByZXR1cm4gMQorLSAgZmkKKy0gIHJldHVybiAwCistfQorLQorLXRyaW1fbWFuX2ZpcnN0X2xpbmUoKQorLXsKKy0gICAgIyBIYW5kbGVzIHRoZSBmaXJzdCBsaW5lIGlmIGl0IGlzIGxpa2U6CistICAgICMuXCIgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgUG9kOjpNYW4gMi4yOCAoUG9kOjpTaW1wbGUgMy4yOCkKKy0gICAgIy5cIiBETyBOT1QgTU9ESUZZIFRISVMgRklMRSEgIEl0IHdhcyBnZW5lcmF0ZWQgYnkgaGVscDJtYW4gMS40My4zLgorLSAgICBsb2NhbCBmPSQxCistICAgIHNlZCAtaSAtZSAnMXsKKy0gICAgc3xeXC5cXCJbWzpibGFuazpdXVwrQXV0b21hdGljYWxseVtbOmJsYW5rOl1dZ2VuZXJhdGVkW1s6Ymxhbms6XV1ieVtbOmJsYW5rOl1dUG9kOjpNYW5bWzpibGFuazpdXS4qfC5cXCIgT3Zlcmx5IHZlcmJvc2UgUG9kOjpNYW58CistICAgIHN8XlwuXFwiW1s6Ymxhbms6XV1cK0RPW1s6Ymxhbms6XV1OT1RbWzpibGFuazpdXU1PRElGWVtbOmJsYW5rOl1dVEhJU1tbOmJsYW5rOl1dRklMRSFbWzpibGFuazpdXVwrSXRbWzpibGFuazpdXXdhc1tbOmJsYW5rOl1dZ2VuZXJhdGVkW1s6Ymxhbms6XV1ieVtbOmJsYW5rOl1daGVscDJtYW5bWzpibGFuazpdXS4qfC5cXCIgT3Zlcmx5IHZlcmJvc2UgaGVscDJtYW58CistICAgIH0nICRmCistfQorLQorLXRyaW1fbWFuX1RIKCkKKy17CistICAgICMgSGFuZGxlcyBsaW5lcyBsaWtlOgorLSAgICAjIC5USCBkZWJoZWxwZXIgNyAiMjAxMC0wMi0yNyIgIjcuNC4xNSIgIkRlYmhlbHBlciIKKy0gICAgIyAuVEggRElSTU5HUi1DTElFTlQgMSAyMDEwLTAyLTI3ICJEaXJtbmdyIDEuMC4zIiAiR05VIFByaXZhY3kgR3VhcmQiCistICAgICMgLlRIIGNjbWFrZSAxICJNYXJjaCAwNiwgMjAxMCIgImNjbWFrZSAyLjguMS1yYzMiCistICAgICMgLlRIIFFFTVUtSU1HIDEgIjIwMTAtMDMtMTQiICIgIiAiICIKKy0gICAgIyAuVEgga2RlY21ha2UgMSAiTWF5IDA3LCAyMDEwIiAiY21ha2UgMi44LjEiCistICAgICMgLlRIICJhcHBlbmRlci5oIiAzICIxMiBNYXkgMjAxMCIgIlZlcnNpb24gMS4yLjEiICJsb2c0YyIgXCIgLSotIG5yb2ZmIC0qLQorLSAgICAjIC5USOKAgiJhcHBlbmRlci5oIuKAgjPigIIiVHVl4oCCQXVn4oCCMzHigIIyMDEwIuKAgiJWZXJzaW9u4oCCMS4yLjEi4oCCImxvZzRjIuKAglwi4oCCLSot4oCCbnJvZmbigIItKi0KKy0gICAgIyAuVEggIk9GRkxJTkVJTUFQIiAiMSIgIjExIE1heSAyMDEwIiAiSm9obiBHb2VyemVuIiAiT2ZmbGluZUlNQVAgTWFudWFsIgorLSAgICAjIC5USCBndiAzZ3VpbGUgIjEzIE1heSAyMDEwIgorLSAgICAjLlRIICJHSVRcLUFSQ0hJTVBPUlQiICIxIiAiMDkvMTMvMjAxMCIgIkdpdCAxXCYuN1wmLjEiICJHaXQgTWFudWFsIgorLSAgICAjIC5USCBMRElSRUNUT1JEIDggIjIwMTAtMTAtMjAiICJwZXJsIHY1LjEyLjIiICJVc2VyIENvbnRyaWJ1dGVkIFBlcmwgRG9jdW1lbnRhdGlvbiIKKy0gICAgIyAuVEggY2NtYWtlIDEgIkZlYnJ1YXJ5IDA1LCAyMDEyIiAiY2NtYWtlIDIuOC43IgorLSAgICAjIC5USOKAgiJhcHBlbmRlci5oIuKAgjPigIIiVHVl4oCCQXVn4oCCMzHigIIyMDEwIuKAgiJWZXJzaW9u4oCCMS4yLjEi4oCCImxvZzRjIuKAglwi4oCCLSot4oCCbnJvZmbigIItKi0KKy0gICAgIyAuVEggQVJDSCAiMSIgIlNlcHRlbWJlciAyMDEwIiAiR05VIGNvcmV1dGlscyA4LjUiICJVc2VyIENvbW1hbmRzIgorLSAgICAjIC5USCAiR0NNLUNBTElCUkFURSIgIjEiICIwMyBGZWJydWFyeSAyMDEyIiAiIiAiIgorLSAgICAjLlRIIExvY2FsZTo6UG80YTo6WG1sLnBtIDNwbSAiMjAxNS0wMS0zMCIgIlBvNGEgVG9vbHMiICJQbzRhIFRvb2xzIgorLSAgICBsb2NhbCBmPSQxCistICAgICMgKC5USCAgIHF1b3RlZCBzZWN0aW9uKSAocXVvdGVkX2RhdGUpKCopCistICAgIHNlZCAtaSAtZSAnc3xeXChbWzpibGFuazpdXSpcLlRIW1s6Ymxhbms6XV1cKyJbXiJdXCsiW1s6Ymxhbms6XV1cK1teWzpibGFuazpdXVwrXClbWzpibGFuazpdXVwrXCgiW14iXVwrIlwpXChbWzpibGFuazpdXVwrLipcKVw/fFwxICJxcTIwMDAtMDEtMDEiXDN8JyAkZgorLSAgICAjICguVEggdW5xdW90ZWQgc2VjdGlvbikgKHF1b3RlZF9kYXRlKSgqKQorLSAgICBzZWQgLWkgLWUgJ3N8XlwoW1s6Ymxhbms6XV0qXC5USFtbOmJsYW5rOl1dXCtbXiJdW15bOmJsYW5rOl1dXCtbWzpibGFuazpdXVwrW15bOmJsYW5rOl1dXCtcKVtbOmJsYW5rOl1dXCtcKCJbXiJdXCsiXClcKFtbOmJsYW5rOl1dXCsuKlwpXD98XDEgInVxMjAwMC0wMi0wMiJcM3wnICRmCistICAgICMgKC5USCAgIHF1b3RlZCBzZWN0aW9uKSAodW5xdW90ZWRfZGF0ZSkoKikKKy0gICAgc2VkIC1pIC1lICdzfF5cKFtbOmJsYW5rOl1dKlwuVEhbWzpibGFuazpdXVwrIlteIl1cKyJbWzpibGFuazpdXVwrW15bOmJsYW5rOl1dXCtcKVtbOmJsYW5rOl1dXCtcKFteIl1bXls6Ymxhbms6XV1cK1wpXChbWzpibGFuazpdXVwrLipcKVw/fFwxIHF1MjAwMC0wMy0wM1wzfCcgJGYKKy0gICAgIyAoLlRIIHVucXVvdGVkIHNlY3Rpb24pICh1bnF1b3RlZF9kYXRlKSgqKQorLSAgICBzZWQgLWkgLWUgJ3N8XlwoW1s6Ymxhbms6XV0qXC5USFtbOmJsYW5rOl1dXCtbXiJdW15bOmJsYW5rOl1dXCtbWzpibGFuazpdXVwrW15bOmJsYW5rOl1dXCtcKVtbOmJsYW5rOl1dXCtcKFteIl1bXls6Ymxhbms6XV1cK1wpXChbWzpibGFuazpdXVwrLipcKVw/fFwxIHV1MjAwMC0wNC0wNFwzfCcgJGYKKy19CistCistc3RyaXBfbnVtYmVyZWRfYW5jaG9ycygpCisteworLSAgIyBSZW1vdmUgbnVtYmVyZWQgYW5jaG9ycyBvbiBEb2Nib29rIC8gSFRNTCBmaWxlcy4KKy0gICMgVGhpcyBzaG91bGQgYmUgc2F2ZSBzaW5jZSB3ZSByZW1vdmUgdGhlbSBmcm9tIG9sZCBhbmQgbmV3IGZpbGVzLgorLSAgIyBBIHRyYWlsaW5nIDwvYT4gb3IgPC9kaXY+IHRhZyB3aWxsIHN0YXkgYWxzbyBvbiBib3RoIGZpbGVzLgorLSAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0gICAgIHNlZCAtaSAtZSAncyU8WyBdKmFbIF1cK25hbWVbXjxdKlswLTldXCtbXjxdKiUlZycgXAorLSAgICAgLWUgJ3MlPFsgXSphWyBdXCtocmVmW148XSojW148XSpbMC05XVwrW148XSolJWcnIFwKKy0gICAgIC1lICdzJTxbXjxdKmlkPSJmdG5cLltePF0qWzAtOV1cK1tePF0qJSVnJyAkZgorLSAgZG9uZQorLX0KKy0KKy0KKy1jaGVja19jb21wcmVzc2VkX2ZpbGUoKQorLXsKKy0gIGxvY2FsIGZpbGU9JDEKKy0gIGxvY2FsIGV4dD0kMgorLSAgbG9jYWwgdG1wZGlyPWBta3RlbXAgLWRgCistICBsb2NhbCBmdHlwZQorLSAgbG9jYWwgcmV0PTAKKy0gIGVjaG8gIiRleHQgZmlsZSB3aXRoIG9kZCBmaWxlbmFtZTogJGZpbGUiCistICBpZiB0ZXN0IC1uICIkdG1wZGlyIjsgdGhlbgorLSAgICBta2RpciAkdG1wZGlyL3tvbGQsbmV3fQorLSAgICBjcCAtLXBhcmVudHMgLS1kZXJlZmVyZW5jZSBvbGQvJGZpbGUgJHRtcGRpci8KKy0gICAgY3AgLS1wYXJlbnRzIC0tZGVyZWZlcmVuY2UgbmV3LyRmaWxlICR0bXBkaXIvCistICAgIGlmIHB1c2hkICR0bXBkaXIgPiAvZGV2L251bGwgOyB0aGVuCistICAgICAgY2FzZSAiJGV4dCIgaW4KKy0gICAgICAgIGJ6MikKKy0gICAgICAgICAgbXYgb2xkLyRmaWxleywuYnoyfQorLSAgICAgICAgICBtdiBuZXcvJGZpbGV7LC5iejJ9CistICAgICAgICAgIGJ6aXAyIC1kIG9sZC8kZmlsZS5iejIKKy0gICAgICAgICAgYnppcDIgLWQgbmV3LyRmaWxlLmJ6MgorLSAgICAgICAgICA7OworLSAgICAgICAgZ3ppcCkKKy0gICAgICAgICAgbXYgb2xkLyRmaWxleywuZ3p9CistICAgICAgICAgIG12IG5ldy8kZmlsZXssLmd6fQorLSAgICAgICAgICBnemlwIC1kIG9sZC8kZmlsZS5negorLSAgICAgICAgICBnemlwIC1kIG5ldy8kZmlsZS5negorLSAgICAgICAgICA7OworLSAgICAgICAgeHopCistICAgICAgICAgIG12IG9sZC8kZmlsZXssLnh6fQorLSAgICAgICAgICBtdiBuZXcvJGZpbGV7LC54en0KKy0gICAgICAgICAgeHogLWQgb2xkLyRmaWxlLnh6CistICAgICAgICAgIHh6IC1kIG5ldy8kZmlsZS54egorLSAgICAgICAgICA7OworLSAgICAgIGVzYWMKKy0gICAgICBmdHlwZT1gL3Vzci9iaW4vZmlsZSBvbGQvJGZpbGUgfCBzZWQgJ3NAXlteOl1cKzpbWzpibGFuazpdXSpAQCdgCistICAgICAgY2FzZSAkZnR5cGUgaW4KKy0gICAgICAgIFBPU0lYXCB0YXJcIGFyY2hpdmUpCistICAgICAgICAgIGVjaG8gIiRleHQgY29udGVudCBpczogJGZ0eXBlIgorLSAgICAgICAgICBtdiBvbGQvJGZpbGV7LC50YXJ9CistICAgICAgICAgIG12IG5ldy8kZmlsZXssLnRhcn0KKy0gICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAke2ZpbGV9LnRhcjsgdGhlbgorLSAgICAgICAgICAgIHJldD0xCistICAgICAgICAgIGZpCistICAgICAgICAgIDs7CistICAgICAgICBBU0NJSVwgY3Bpb1wgYXJjaGl2ZVwgKikKKy0gICAgICAgICAgZWNobyAiJGV4dCBjb250ZW50IGlzOiAkZnR5cGUiCistICAgICAgICAgIG12IG9sZC8kZmlsZXssLmNwaW99CistICAgICAgICAgIG12IG5ldy8kZmlsZXssLmNwaW99CistICAgICAgICAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJHtmaWxlfS5jcGlvOyB0aGVuCistICAgICAgICAgICAgcmV0PTEKKy0gICAgICAgICAgZmkKKy0gICAgICAgICAgOzsKKy0gICAgICAgICopCistICAgICAgICAgIGVjaG8gInVuaGFuZGxlZCAkZXh0IGNvbnRlbnQ6ICRmdHlwZSIKKy0gICAgICAgICAgaWYgISBkaWZmX3R3b19maWxlczsgdGhlbgorLSAgICAgICAgICAgIHJldD0xCistICAgICAgICAgIGZpCistICAgICAgICAgIDs7CistICAgICAgZXNhYworLSAgICAgIHBvcGQgPiAvZGV2L251bGwKKy0gICAgZmkKKy0gICAgcm0gLXJmICIkdG1wZGlyIgorLSAgZmkKKy0gIHJldHVybiAkcmV0CistfQorLQorLWNoZWNrX3NpbmdsZV9maWxlKCkKKy17CistICBsb2NhbCBmaWxlPSIkMSIKKy0gIGNhc2UgJGZpbGUgaW4KKy0gICAgKi5zcGVjKQorLSAgICAgICBzZWQgLWkgLWUgInMsUmVsZWFzZTouKiRyZWxlYXNlMSxSZWxlYXNlOiBAUkVMRUFTRUAsIiBvbGQvJGZpbGUKKy0gICAgICAgc2VkIC1pIC1lICJzLFJlbGVhc2U6LiokcmVsZWFzZTIsUmVsZWFzZTogQFJFTEVBU0VALCIgbmV3LyRmaWxlCistICAgICAgIDs7CistICAgICouZXhlLm1kYnwqLmRsbC5tZGIpCistICAgICAgICMgSnVzdCBkZWJ1ZyBpbmZvcm1hdGlvbiwgd2UgY2FuIHNraXAgdGhlbQorLSAgICAgICBlY2hvICIkZmlsZSBza2lwcGVkIGFzIGRlYnVnIGZpbGUuIgorLSAgICAgICByZXR1cm4gMAorLSAgICAgICA7OworLSAgICAqLmEpCistICAgICAgIGZsaXN0PWBhciB0IG5ldy8kZmlsZWAKKy0gICAgICAgcHdkPSRQV0QKKy0gICAgICAgZmRpcj1gZGlybmFtZSAkZmlsZWAKKy0gICAgICAgY2Qgb2xkLyRmZGlyCistICAgICAgIGFyIHggYGJhc2VuYW1lICRmaWxlYAorLSAgICAgICBjZCAkcHdkL25ldy8kZmRpcgorLSAgICAgICBhciB4IGBiYXNlbmFtZSAkZmlsZWAKKy0gICAgICAgY2QgJHB3ZAorLSAgICAgICBmb3IgZiBpbiAkZmxpc3Q7IGRvCistICAgICAgICAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJGZkaXIvJGY7IHRoZW4KKy0gICAgICAgICAgICAgcmV0dXJuIDEKKy0gICAgICAgICAgZmkKKy0gICAgICAgZG9uZQorLSAgICAgICByZXR1cm4gMAorLSAgICAgICA7OworLSAgICAqLmNwaW8pCistICAgICAgIGZsaXN0PWBjcGlvIC0tcXVpZXQgLS1saXN0IC0tZm9yY2UtbG9jYWwgPCAibmV3LyRmaWxlImAKKy0gICAgICAgcHdkPSRQV0QKKy0gICAgICAgZmRpcj0kZmlsZS5leHRyYWN0LiRQUElELiQkCistICAgICAgIG1rZGlyIG9sZC8kZmRpciBuZXcvJGZkaXIKKy0gICAgICAgY2Qgb2xkLyRmZGlyCistICAgICAgIGNwaW8gLS1xdWlldCAtLWV4dHJhY3QgLS1mb3JjZS1sb2NhbCA8ICIuLi8ke2ZpbGUjIyovfSIKKy0gICAgICAgY2QgJHB3ZC9uZXcvJGZkaXIKKy0gICAgICAgY3BpbyAtLXF1aWV0IC0tZXh0cmFjdCAtLWZvcmNlLWxvY2FsIDwgIi4uLyR7ZmlsZSMjKi99IgorLSAgICAgICBjZCAkcHdkCistICAgICAgIGxvY2FsIHJldD0wCistICAgICAgIGZvciBmIGluICRmbGlzdDsgZG8KKy0gICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICRmZGlyLyRmOyB0aGVuCistICAgICAgICAgICByZXQ9MQorLSAgICAgICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKy0gICAgICAgICAgICAgYnJlYWsKKy0gICAgICAgICAgIGZpCistICAgICAgICAgZmkKKy0gICAgICAgZG9uZQorLSAgICAgICBybSAtcmYgb2xkLyRmZGlyIG5ldy8kZmRpcgorLSAgICAgICByZXR1cm4gJHJldAorLSAgICAgICA7OworLSAgICAqLnRhcnwqLnRhci5iejJ8Ki50YXIuZ3p8Ki50Z3p8Ki50YnoyKQorLSAgICAgICBmbGlzdD1gdGFyIHRmIG5ldy8kZmlsZWAKKy0gICAgICAgcHdkPSRQV0QKKy0gICAgICAgZmRpcj1gZGlybmFtZSAkZmlsZWAKKy0gICAgICAgY2Qgb2xkLyRmZGlyCistICAgICAgIHRhciB4ZiBgYmFzZW5hbWUgJGZpbGVgCistICAgICAgIGNkICRwd2QvbmV3LyRmZGlyCistICAgICAgIHRhciB4ZiBgYmFzZW5hbWUgJGZpbGVgCistICAgICAgIGNkICRwd2QKKy0gICAgICAgbG9jYWwgcmV0PTAKKy0gICAgICAgZm9yIGYgaW4gJGZsaXN0OyBkbworLSAgICAgICAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJGZkaXIvJGY7IHRoZW4KKy0gICAgICAgICAgIHJldD0xCistICAgICAgICAgICBpZiB0ZXN0IC16ICIkY2hlY2tfYWxsIjsgdGhlbgorLSAgICAgICAgICAgICBicmVhaworLSAgICAgICAgICAgZmkKKy0gICAgICAgICBmaQorLSAgICAgICBkb25lCistICAgICAgIHJldHVybiAkcmV0CistICAgICAgIDs7CistICAgICouemlwfCouamFyfCoud2FyKQorLSAgICAgICBjZCBvbGQKKy0gICAgICAgdW5qYXJfbCAuLyRmaWxlIHxzb3J0ID4gZmxpc3QKKy0gICAgICAgIyAgMTAtMDUtMjAxMCAxNDozOQorLSAgICAgICBzZWQgLWkgLWUgInMsIFswLTldWzAtOV0tWzAtOV1bMC05XS1bMC05XVwrIFswLTldWzAtOV06WzAtOV1bMC05XSAsIGRhdGUgLCIgZmxpc3QKKy0gICAgICAgIyAyMDEyLTAyLTAzIDA3OjU5CistICAgICAgIHNlZCAtaSAtZSAicywgMjBbMC05XVswLTldLVswLTldWzAtOV0tWzAtOV1bMC05XSBbMC05XVswLTldOlswLTldWzAtOV0gLCBkYXRlICwiIGZsaXN0CistICAgICAgIGNkIC4uL25ldworLSAgICAgICB1bmphcl9sIC4vJGZpbGUgfHNvcnQ+IGZsaXN0CistICAgICAgIHNlZCAtaSAtZSAicywgWzAtOV1bMC05XS1bMC05XVswLTldLVswLTldXCsgWzAtOV1bMC05XTpbMC05XVswLTldICwgZGF0ZSAsOyAiIGZsaXN0CistICAgICAgIHNlZCAtaSAtZSAicywgMjBbMC05XVswLTldLVswLTldWzAtOV0tWzAtOV1bMC05XSBbMC05XVswLTldOlswLTldWzAtOV0gLCBkYXRlICwiIGZsaXN0CistICAgICAgIGNkIC4uCistICAgICAgIGlmICEgY21wIC1zIG9sZC9mbGlzdCBuZXcvZmxpc3Q7IHRoZW4KKy0gICAgICAgICAgZWNobyAiJGZpbGUgaGFzIGRpZmZlcmVudCBmaWxlIGxpc3QiCistICAgICAgICAgIGRpZmYgLXUgb2xkL2ZsaXN0IG5ldy9mbGlzdAorLSAgICAgICAgICByZXR1cm4gMQorLSAgICAgICBmaQorLSAgICAgICBmbGlzdD1gZ3JlcCBkYXRlIG5ldy9mbGlzdCB8IHNlZCAtZSAncywuKiBkYXRlICwsJ2AKKy0gICAgICAgcHdkPSRQV0QKKy0gICAgICAgZmRpcj1gZGlybmFtZSAkZmlsZWAKKy0gICAgICAgY2Qgb2xkLyRmZGlyCistICAgICAgIHVuamFyIGBiYXNlbmFtZSAkZmlsZWAKKy0gICAgICAgY2QgJHB3ZC9uZXcvJGZkaXIKKy0gICAgICAgdW5qYXIgYGJhc2VuYW1lICRmaWxlYAorLSAgICAgICBjZCAkcHdkCistICAgICAgIGxvY2FsIHJldD0wCistICAgICAgIGZvciBmIGluICRmbGlzdDsgZG8KKy0gICAgICAgICBpZiB0ZXN0IC1mIG5ldy8kZmRpci8kZiAmJiAhIGNoZWNrX3NpbmdsZV9maWxlICRmZGlyLyRmOyB0aGVuCistICAgICAgICAgICByZXQ9MQorLSAgICAgICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKy0gICAgICAgICAgICAgYnJlYWsKKy0gICAgICAgICAgIGZpCistICAgICAgICAgZmkKKy0gICAgICAgZG9uZQorLSAgICAgICByZXR1cm4gJHJldDs7CistICAgICAqLnB5Y3wqLnB5bykKKy0gICAgICAgIHBlcmwgLWUgIm9wZW4gZmgsICcrPCcsICdvbGQvJGZpbGUnOyBzZWVrIGZoLCA0LCBTRUVLX1NFVDsgcHJpbnQgZmggJzAwMDAnOyIKKy0gICAgICAgIHBlcmwgLWUgIm9wZW4gZmgsICcrPCcsICduZXcvJGZpbGUnOyBzZWVrIGZoLCA0LCBTRUVLX1NFVDsgcHJpbnQgZmggJzAwMDAnOyIKKy0gICAgICAgIDs7CistICAgICAqLmJ6MikKKy0gICAgICAgIGJ1bnppcDIgLWMgb2xkLyRmaWxlID4gb2xkLyR7ZmlsZS8uYnoyL30KKy0gICAgICAgIGJ1bnppcDIgLWMgbmV3LyRmaWxlID4gbmV3LyR7ZmlsZS8uYnoyL30KKy0gICAgICAgIGNoZWNrX3NpbmdsZV9maWxlICR7ZmlsZS8uYnoyL30KKy0gICAgICAgIHJldHVybiAkPworLSAgICAgICAgOzsKKy0gICAgICouZ3opCistICAgICAgICBndW56aXAgLWMgb2xkLyRmaWxlID4gb2xkLyR7ZmlsZS8uZ3ovfQorLSAgICAgICAgZ3VuemlwIC1jIG5ldy8kZmlsZSA+IG5ldy8ke2ZpbGUvLmd6L30KKy0gICAgICAgIGNoZWNrX3NpbmdsZV9maWxlICR7ZmlsZS8uZ3ovfQorLSAgICAgICAgcmV0dXJuICQ/CistICAgICAgICA7OworLSAgICAgKi5ycG0pCistCSRzZWxmX3NjcmlwdCAtYSBvbGQvJGZpbGUgbmV3LyRmaWxlCistICAgICAgICByZXR1cm4gJD8KKy0gICAgICAgIDs7CistICAgICAqcG5nKQorLQkjIFRyeSB0byByZW1vdmUgdGltZXN0YW1wcywgb25seSBpZiBjb252ZXJ0IGZyb20gSW1hZ2VNYWdpY2sgaXMgaW5zdGFsbGVkCistICAgICAgICBpZiBbWyAkKHR5cGUgLXAgY29udmVydCkgXV07IHRoZW4KKy0JICBjb252ZXJ0IG9sZC8kZmlsZSArc2V0IGRhdGU6Y3JlYXRlICtzZXQgZGF0ZTptb2RpZnkgb2xkLyR7ZmlsZS8ucG5nL19uLnBuZ30KKy0JICBjb252ZXJ0IG9sZC8kZmlsZSArc2V0IGRhdGU6Y3JlYXRlICtzZXQgZGF0ZTptb2RpZnkgbmV3LyR7ZmlsZS8ucG5nL19uLnBuZ30KKy0JICBpZiAhIGNtcCAtcyBvbGQvJHtmaWxlLy5wbmcvX24ucG5nfSBuZXcvJHtmaWxlLy5wbmcvX24ucG5nfTsgdGhlbgorLQkgICAgICBlY2hvICIkZmlsZSBkaWZmZXJzICgkZnR5cGUpIgorLQkgICAgICBoZXhkdW1wIC1DIG9sZC8ke2ZpbGUvLnBuZy9fbi5wbmd9ID4gJGZpbGUxCistCSAgICAgIGhleGR1bXAgLUMgbmV3LyR7ZmlsZS8ucG5nL19uLnBuZ30gPiAkZmlsZTIKKy0JICAgICAgZGlmZiAtdSAkZmlsZTEgJGZpbGUyIHwgaGVhZCAtbiAyMAorLQkgICAgICByZXR1cm4gMQorLQkgIGZpCistCSAgcmV0dXJuIDAKKy0JZmkKKy0gICAgICAgIDs7CistICAgICAvdXNyL3NoYXJlL2xvY2FsZS8qL0xDX01FU1NBR0VTLyoubW98L3Vzci9zaGFyZS9sb2NhbGUtYnVuZGxlLyovTENfTUVTU0FHRVMvKi5tbykKKy0gICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0gICAgICAgICBzZWQgLWkgLWUgInMsUE9ULUNyZWF0aW9uLURhdGU6IC4uLi4tLi4tLi4gLi46Li4rLi4uLixQT1QtQ3JlYXRpb24tRGF0ZTogMTk3MC0wMS0wMSAwMDowMCswMDAwLCIgJGYKKy0gICAgICAgZG9uZQorLSAgICAgICA7OworLSAgICAgL3Vzci9zaGFyZS9kb2MvcGFja2FnZXMvKi8qLmh0bWx8XAorLSAgICAgL3Vzci9zaGFyZS9kb2Mva2RlL0hUTUwvKi8qLyouaHRtbHwvdXNyL3NoYXJlL2RvYy8qL2h0bWwvKi5odG1sKQorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLSAgICAgICAgICMgdGV4aTJodG1sIG91dHB1dCwgZS5nLiBpbiBrdm0sIGluZGVudCwgcWVtdQorLQkgc2VkIC1pIC1lICJzfF48IS0tIENyZWF0ZWQgb24gLiosIDIwLi4gYnkgdGV4aTJodG1sIC5cLi4ufDwhLS0gQ3JlYXRlZCBvbiBBdWd1c3QgNywgMjAwOSBieSB0ZXhpMmh0bWwgMS44MnwiICRmCistCSBzZWQgLWkgLWUgJ3N8XiAqVGhpcyBkb2N1bWVudCB3YXMgZ2VuZXJhdGVkIGJ5IDxlbT5BdXRvYnVpbGQ8L2VtPiBvbiA8ZW0+LiosIDIwLi48L2VtPiB1c2luZyA8YSBocmVmPSJodHRwOi8vd3d3Lm5vbmdudS5vcmcvdGV4aTJodG1sLyI+PGVtPnRleGkyaHRtbCAuXC4uLjwvZW0+PC9hPi4kfCAgVGhpcyBkb2N1bWVudCB3YXMgZ2VuZXJhdGVkIGJ5IDxlbT5BdXRvYnVpbGQ8L2VtPiBvbiA8ZW0+QXVndXN0IDcsIDIwMDk8L2VtPiB1c2luZyA8YSBocmVmPSJodHRwOi8vd3d3Lm5vbmdudS5vcmcvdGV4aTJodG1sLyI+PGVtPnRleGkyaHRtbCAxLjgyPC9lbT48L2E+LnwnICRmCistCSAjIGRveHlnZW4gZG9jdSwgZS5nLiBpbiBsaWJzc2ggYW5kIGxvZzRjCistCSBzZWQgLWkgLWUgJ3N8R2VuZXJhdGVkIG9uIC4uLiAuLi4gWzAtOV0qIFswLTldKjpbMC05XVswLTldOlswLTldWzAtOV0gMjBbMC05XVswLTldIGZvciB8R2VuZXJhdGVkIG9uIE1vbiBNYXkgMTAgMjA6NDU6MDAgMjAxMCBmb3IgfCcgJGYKKy0JICMgR2VuZXJhdGVkIG9uIFNhdCBBdWcgMTQgMjAxMCAxNjo0OTo0OCBmb3IgbGlic3NoCistCSBzZWQgLWkgLWUgJ3N8R2VuZXJhdGVkIG9uIC4uLiAuLi4gWzAtOV0qIDIwWzAtOV1bMC05XSBbMC05XSo6WzAtOV1bMC05XTpbMC05XVswLTldIGZvciB8R2VuZXJhdGVkIG9uIE1vbiBNYXkgMTAgMjA6NDU6MDAgMjAxMCBmb3IgfCcgJGYKKy0gICAgICAgZG9uZQorLSAgICAgICBzdHJpcF9udW1iZXJlZF9hbmNob3JzCistICAgICAgIDs7CistICAgICAvdXNyL3NoYXJlL2phdmFkb2MvKi5odG1sIHxcCistICAgICAvdXNyL3NoYXJlL2phdmFkb2MvKi8qLmh0bWx8L3Vzci9zaGFyZS9qYXZhZG9jLyovKi8qLmh0bWwpCistICAgICAgIHN0cmlwX251bWJlcmVkX2FuY2hvcnMKKy0gICAgICAgIyBUaGVyZSBhcmUgbW9yZSB0aW1lc3RhbXBzIGluIGh0bWwsIHNvIGZhciB3ZSBoYW5kbGUgb25seSBzb21lIHByaW1pdGl2ZSB2ZXJzaW9ucy4KKy0gICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0gICAgICAgICAjIEphdmFkb2M6CistICAgICAgICAgICMgPGhlYWQ+CistICAgICAgICAgICMgPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAodmVyc2lvbiAxLjcuMF83NSkgb24gVHVlIEZlYiAwMyAwMjoyMDoxMiBHTVQgMjAxNSAtLT4KKy0gICAgICAgICAgIyA8IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFR1ZSBGZWIgMDMgMDA6MDI6NDggR01UIDIwMTUgLS0+CistICAgICAgICAgICMgPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAxNS0wMi0wMyI+CistICAgICAgICAgICMgPC9oZWFkPgorLSAgICAgICAgICBzZWQgLWkgLWUgJworLSAgICAgICAgICAgIC9ePGhlYWQ+L3sKKy0gICAgICAgICAgICAgIDogbmV4dAorLSAgICAgICAgICAgICAgbgorLSAgICAgICAgICAgICAgL148XC9oZWFkPi97CistICAgICAgICAgICAgICAgIGIgZW5kX2hlYWQKKy0gICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgIHMvXlwoPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvY1wpIFwoKFwoYnVpbGRcfHZlcnNpb25cKSBbMC05Ll9dXCspIG9uIC4uLiAuLi4gLi4gLi46Li46Li4gXChHTVRcfFVUQ1wpIC4uLi5cKSBcKC0tPlwpL1wxIHNvbWUtZGF0ZS1yZW1vdmVkLWJ5LWJ1aWxkLWNvbXBhcmUgXDUvCistICAgICAgICAgICAgICB0IG5leHQKKy0gICAgICAgICAgICAgIHMvXlwoPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvY1wpIFwob24gLi4uIC4uLiAuLiAuLjouLjouLiBcKEdNVFx8VVRDXCkgLi4uLlwpIFwoLS0+XCkvXDEgc29tZS1kYXRlLXJlbW92ZWQtYnktYnVpbGQtY29tcGFyZSBcMy8KKy0gICAgICAgICAgICAgIHQgbmV4dAorLSAgICAgICAgICAgICAgcy9ePG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iWzAtOV1cezRcfS1bMC05XVx7Mlx9LVswLTldXHsyXH0iPi88bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSJzb21lLWRhdGUtcmVtb3ZlZC1ieS1idWlsZC1jb21wYXJlIj4vCistICAgICAgICAgICAgICBiIG5leHQKKy0gICAgICAgICAgICB9CistICAgICAgICAgICAgOiBlbmRfaGVhZAorLSAgICAgICAgICAnICRmCistICAgICAgICAgIyBHamRvYyBIdG1sRG9jbGV0OgorLQkgc2VkIC1pIC1lICdzJUdlbmVyYXRlZCBieSBHamRvYyBIdG1sRG9jbGV0IFswLTksLl0qLCBwYXJ0IG9mIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9jbGFzc3BhdGgvY3AtdG9vbHMvIiB0aXRsZT0iIiB0YXJnZXQ9Il90b3AiPkdOVSBDbGFzc3BhdGggVG9vbHM8L2E+LCBvbiAuKiwgMjAuLiBbMC05XSo6Li46Li4gXChhXHxwXClcLm1cLiBHTVQuJUdlbmVyYXRlZCBieSBHamRvYy4lJyAkZgorLQkgc2VkIC1pIC1lICdzJTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vZ251Lm9yZy8vL0RURCBYSFRNTCAxLjEgcGx1cyBUYXJnZXQgMS4wLy9FTiJcKC4qXClHTlUgQ2xhc3NwYXRoIFRvb2xzPC9hPiwgb24gW0EtWl1bYS16XSogWzAtOV0qLCAyMD8/IFswLTldKjo/Pzo/PyBcKGF8cFwpXC5tXC4gR01ULjwvcD4lPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9nbnUub3JnLy8vRFREIFhIVE1MIDEuMSBwbHVzIFRhcmdldCAxLjAvL0VOIlwxR05VIENsYXNzcGF0aCBUb29sczwvYT4sIG9uIEphbnVhcnkgMSwgMjAwOSAwOjAwOjAwIGEubS4gR01ULjwvcD4lJyAkZgorLQkgc2VkIC1pIC1lICdzJTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vZ251Lm9yZy8vL0RURFwoLipHTlUgQ2xhc3NwYXRoIFRvb2xzPC9hPlwpLCBvbiBbYS16QS1aXSogWzAtOV1bMC05XSwgMjAuLiBbMC05XSo6Li46Li4gXChhXHxwXClcLm1cLiBHTVQuPC9wPiU8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL2dudS5vcmcvLy9EVERcMSxvbiBNYXkgMSwgMjAxMCAxOjExOjQyIHAubS4gR01ULjwvcD4lJyAkZgorLQkgIyBkZXByZWNhdGVkLWxpc3QgaXMgcmFuZG9tbHkgb3JkZXJlZCwgc29ydCBpdCBmb3IgY29tcGFyaXNvbgorLQkgY2FzZSAkZiBpbgorLQkgICAqL2RlcHJlY2F0ZWQtbGlzdC5odG1sKQorLQkgICAgIHNvcnQgLW8gJGYgJGYKKy0JICAgICA7OworLQkgZXNhYworLSAgICAgICBkb25lCistICAgICAgIDs7CistICAgICAvdXNyL3NoYXJlL2phdmFkb2MvZ2pkb2MucHJvcGVydGllcyB8XAorLSAgICAgL3Vzci9zaGFyZS9qYXZhZG9jLyovZ2pkb2MucHJvcGVydGllcykKKy0gICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0JIHNlZCAtaSAtZSAnc3xeI1tBLVpdW2Etel1cezJcfSBbQS1aXVthLXpdXHsyXH0gWzAtOV1cezJcfSAuLjouLjouLiBHTVQgMjAuLiR8I0ZyaSBKYW4gMDEgMTE6Mjc6MzYgR01UIDIwMDl8JyAkZgorLSAgICAgICBkb25lCistICAgICAgIDs7CistICAgICAqL2ZvbnRzLnNjYWxlfCovZm9udHMuZGlyfCovZW5jb2RpbmdzLmRpcikKKy0gICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0gICAgICAgICAjIHNvcnQgZmlsZXMgYmVmb3JlIGNvbXBhcmluZworLSAgICAgICAgIHNvcnQgLW8gJGYgJGYKKy0gICAgICAgZG9uZQorLSAgICAgICA7OworLSAgICAgL3Zhci9hZG0vcGVybC1tb2R1bGVzLyopCistICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCistICAgICAgICAgc2VkIC1pIC1lICdzfF49aGVhZDIgLi4uIC4uLiAuLiAuLjouLjouLiAuLi4uOiBDPE1vZHVsZT58PWhlYWQyIFdlZCBKdWwgIDEgMDA6MDA6MDAgMjAwOTogQzxNb2R1bGU+fCcgJGYKKy0gICAgICAgZG9uZQorLSAgICAgICA7OworLSAgICAgL3Vzci9zaGFyZS9tYW4vbWFuMy8qM3BtKQorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLSAgICAgICAgIHNlZCAtaSAtZSAnc3wgMyAiMjAuLi0uLi0uLiIgInBlcmwgdjUuLi4uLiIgIlVzZXIgQ29udHJpYnV0ZWQgUGVybCBEb2N1bWVudGF0aW9uIiR8IDMgIjIwMDktMDEtMDEiICJwZXJsIHY1LjEwLjAiICJVc2VyIENvbnRyaWJ1dGVkIFBlcmwgRG9jdW1lbnRhdGlvbiJ8JyAkZgorLSAgICAgICAgIHRyaW1fbWFuX1RIICRmCistICAgICAgICAgdHJpbV9tYW5fZmlyc3RfbGluZSAkZgorLSAgICAgICBkb25lCistICAgICAgIDs7CistICAgICAvdXNyL3NoYXJlL21hbi8qL21hbip8L3Vzci9zaGFyZS9tYW4vbWFuKnwvdXNyL2xpYi90ZXhtZi9kb2MvbWFuLyovKikKKy0KKy0gICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0gICAgICAgICB0cmltX21hbl9USCAkZgorLSAgICAgICAgIHRyaW1fbWFuX2ZpcnN0X2xpbmUgJGYKKy0gICAgICAgICAjIGdlbmVyYXRlZCBieSBkb2Nib29rIHhtbDoKKy0gICAgICAgICAjLlwiICAgICAgRGF0ZTogMDkvMTMvMjAxMAorLSAgICAgICAgIHNlZCAtaSAtZSAnc3xEYXRlOiBbMC0xXVswLTldL1swLTldWzAtOV0vMjAxWzAtOV18RGF0ZTogMDkvMTMvMjAxMHwnICRmCistICAgICAgIGRvbmUKKy0gICAgICAgOzsKKy0gICAgICouZWxjKQorLSAgICAgICAjIGVtYWNzIGxpc3AgZmlsZXMKKy0gICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0gICAgICAgICBzZWQgLWkgLWUgJ3N8Q29tcGlsZWQgYnkgYWJ1aWxkQC4qIG9uIC4uLiAuLi4gLi4gLi46Li46Li4gMjAuLiR8Y29tcGlsZWQgYnkgYWJ1aWxkQGJ1aWxkaG9zdCBvbiBXZWQgSnVsIDAxIDAwOjAwOjAwIDIwMDl8JyAkZgorLSAgICAgICBkb25lCistICAgICAgIDs7CistICAgICAvdmFyL2xpYi90ZXhtZi93ZWIyYy8qLypmbXQgfFwKKy0gICAgIC92YXIvbGliL3RleG1mL3dlYjJjL21ldGFmb250LyouYmFzZXxcCistICAgICAvdmFyL2xpYi90ZXhtZi93ZWIyYy9tZXRhcG9zdC8qLm1lbSkKKy0gICAgICAgIyBiaW5hcnkgZHVtcCBvZiBUZVggYW5kIE1ldGFmb250IGZvcm1hdHMsIHdlIGNhbiBpZ25vcmUgdGhlbSBmb3IgZ29vZAorLSAgICAgICBlY2hvICJkaWZmZXJlbmNlIGluICRmaWxlIGlnbm9yZWQuIgorLSAgICAgICByZXR1cm4gMAorLSAgICAgICA7OworLSAgICAgKi9saWJ0b29sKQorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLQkgIHNlZCAtaSAtZSAnc3xeIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgW0EtWmEtejAtOV0qOiR8IyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgeDQyOnwnICRmCistICAgICAgIGRvbmUKKy0gICAgICAgOzsKKy0gICAgIC9ldGMvbWFpbC8qY2Z8L2V0Yy9zZW5kbWFpbC5jZikKKy0gICAgICAgIyBmcm9tIHNlbmRtYWlsIHBhY2thZ2UKKy0gICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0JICAjIC0gIyMjIyMgYnVpbHQgYnkgYWJ1aWxkQGJ1aWxkMzMgb24gVGh1IE1heSA2IDExOjIxOjE3IFVUQyAyMDEwCistCSAgc2VkIC1pIC1lICdzfGJ1aWx0IGJ5IGFidWlsZEBbYS16MC05XSogb24gLi4uIC4uLiBbMC05XSogWzAtOV0qOlswLTldWzAtOV06WzAtOV1bMC05XSAuKiAyMFswLTldWzAtOV18YnVpbHQgYnkgYWJ1aWxkQGJ1aWxkNDIgb24gVGh1IE1heSA2IDExOjIxOjE3IFVUQyAyMDEwfCcgJGYKKy0gICAgICAgZG9uZQorLSAgICAgICA7OworLSAgICAgL3Vzci9zaGFyZS9kb2Mva2RlL0hUTUwvKi8qL2luZGV4LmNhY2hlfC91c3Ivc2hhcmUvZG9jL2tkZS9IVE1MLyovKi8qL2luZGV4LmNhY2hlfFwKKy0gICAgIC91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sLyovKi5odG1sfC91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sLyovKi5kZXZoZWxwMikKKy0gICAgICAgIyB2YXJpb3VzIGtkZSBhbmQgZ3RrIHBhY2thZ2VzCistICAgICAgIHN0cmlwX251bWJlcmVkX2FuY2hvcnMKKy0gICAgICAgOzsKKy0gICAgKi9jcmVhdGVkLnJpZCkKKy0gICAgICAgIyBydWJ5IGRvY3VtZW50YXRpb24KKy0gICAgICAgIyBmaWxlIGp1c3QgY29udGFpbnMgYSB0aW1lc3RhbXAgYW5kIG5vdGhpbmcgZWxzZSwgc28gaWdub3JlIGl0CistICAgICAgIGVjaG8gIklnbm9yZSAkZmlsZSIKKy0gICAgICAgcmV0dXJuIDAKKy0gICAgICAgOzsKKy0gICAgKi9yZG9jL2ZpbGVzLyouaHRtbCkKKy0gICAgICAgIyBydWJ5IGRvY3VtZW50YXRpb24KKy0gICAgICAgIyA8dGQ+TW9u4oCCU2Vw4oCCMjDigIIxOTowMjo0M+KAgiswMDAw4oCCMjAxMDwvdGQ+CistICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCistICAgICAgICAgIHNlZCAtaSAtZSAncyU8dGQ+W0EtWl1bYS16XVthLXpdIFtBLVpdW2Etel1bYS16XSBbMC05XVwrIFswLTldXCs6WzAtOV1cKzpbMC05XVwrICswMDAwIDIwMVswLTldPC90ZD4lPHRkPk1vbuKAglNlcOKAgjIw4oCCMTk6MDI6NDPigIIrMDAwMOKAgjIwMTA8L3RkPiVnJyAkZgorLSAgICAgICBkb25lCistICAgICAgIHN0cmlwX251bWJlcmVkX2FuY2hvcnMKKy0gICAgICAgOzsKKy0gICAgKi9MaW51eCpFbnYuU2V0LnNoKQorLSAgICAgICAjIExpYnJlT2ZmaWNlIGZpbGVzLCBjb250YWluczoKKy0gICAgICAgIyBHZW5lcmF0ZWQgb246IE1vbiBBcHIgMTggMTM6MTk6MjIgVVRDIDIwMTEKKy0gICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0JIHNlZCAtaSAtZSAncyVeIyBHZW5lcmF0ZWQgb246LipVVEMgMjAxWzAtOV0gKiQlIyBHZW5lcmF0ZWQgb246IFNvbWV0aW1lJWcnICRmCistICAgICAgIGRvbmUKKy0gICAgICAgOzsKKy0gICAgL3Vzci9saWIvbGlicmVvZmZpY2Uvc29sdmVyL2luYy8qL2RlbGl2ZXIubG9nKQorLSAgICAgICAjIExpYnJlT2ZmaWNlIGxvZyBmaWxlCistICAgICAgZWNobyAiSWdub3JlICRmaWxlIgorLSAgICAgIHJldHVybiAwCistICAgICAgOzsKKy0gICAgL3Zhci9hZG0vdXBkYXRlLW1lc3NhZ2VzLyp8L3Zhci9hZG0vdXBkYXRlLXNjcmlwdHMvKikKKy0gICAgICAjIGVuY29kZSB2ZXJzaW9uLXJlbGVhc2UgaW5zaWRlCistICAgICAgb2xkZm49YGVjaG8gIiRmaWxlInxzZWQgLWUgcy8tJHJlbGVhc2UyLy0kcmVsZWFzZTEvO2AKKy0KKy0gICAgICAjIGZldGNobXN0dGZvbnRzIGVtYmVkcyB0aGUgcmVsZWFzZSBudW1iZXIgaW4gdGhlIHVwZGF0ZSBzaGVsbCBzY3JpcHQuCistICAgICAgZWNobyBzZWQgLWkgLWUgInMvLSRyZWxlYXNlMS8tJHJlbGVhc2UyL2c7IiAib2xkLyRvbGRmbiIKKy0gICAgICBzZWQgLWkgLWUgInMvLSRyZWxlYXNlMS8tJHJlbGVhc2UyL2c7IiAib2xkLyRvbGRmbiIKKy0KKy0gICAgICBpZiAhIGRpZmYgLXUgb2xkLyRvbGRmbiBuZXcvJGZpbGU7IHRoZW4KKy0gICAgICAgICAgIGVjaG8gIiRvbGRmbiBpcyBub3Qgc2FtZSBhcyAkZmlsZSIKKy0gICAgICAgICAgIHJldHVybiAxCistICAgICAgZmkKKy0gICAgICBlY2hvICIkZmlsZSBhbmQgJG9sZGZuIGFyZSBzYW1lIgorLSAgICAgIHJldHVybiAwCistICAgICAgOzsKKy0gICAgKi5wcykKKy0gICAgICBmb3IgZiBpbiAib2xkLyRmaWxlIiAibmV3LyRmaWxlIjsgZG8KKy0gICAgICAgIHNlZCAtaSAtZSAnCistCS9eJSVDcmVhdGlvbkRhdGU6W1s6Ymxhbms6XV0vZAorLQkvXiUlQ3JlYXRvcjpbWzpibGFuazpdXWdyb2ZmW1s6Ymxhbms6XV12ZXJzaW9uW1s6Ymxhbms6XV0vZAorLQknICIkZiIKKy0gICAgICBkb25lCistICAgIDs7CistICAgICpwZGYpCistICAgICAgIyBQREYgZmlsZXMgY29udGFpbiBhIHVuaXF1ZSBJRCwgcmVtb3ZlIGl0CistICAgICAgIyBGb3JtYXQgb2YgdGhlIElEIGlzOgorLSAgICAgICMgL0lEIFs8OUFDRTI0N0E3MENGOUJFQUZFRTE1RTExNjI1OUJENkQ+IDw5QUNFMjQ3QTcwQ0Y5QkVBRkVFMTVFMTE2MjU5QkQ2RD5dCistICAgICAgIyB3aXRoIG9wdGlvbmFsIHNwYWNlcy4gcGRmdGV4IGNyZWF0ZXMgYWxzbzoKKy0gICAgICAjIC9DcmVhdGlvbkRhdGUgKEQ6MjAxMjAxMDMwODMyMDZaKQorLSAgICAgICMgL01vZERhdGUgKEQ6MjAxMjAxMDMwODMyMDZaKQorLSAgICAgICMgYW5kIHBvc3NpYmx5IFhNTCBtZXRhZGF0YSBhcyB3ZWxsCistICAgICAgZm9yIGYgaW4gIm9sZC8kZmlsZSIgIm5ldy8kZmlsZSI7IGRvCistICAgICAgICBzZWQgLWkgXAorLSAgICAgICAgICAgICcvb2JqLywvZW5kb2JqL3sKKy0gICAgICAgICAgICAgICBzJS9JRCBcP1xbIFw/PFtePl1cKz4gXD88W14+XVwrPiBcP1xdJS9JRHJhbmRvbSVnOworLSAgICAgICAgICAgICAgIHMlL0NyZWF0aW9uRGF0ZSBcPyhEOlteKV0qKSUvQ3JlYXRpb25EYXRlIChEOiBYWFgpJWc7CistICAgICAgICAgICAgICAgcyUvTW9kRGF0ZSBcPyhEOlteKV0qKSUvTW9kRGF0ZSAoRDogWFhYKSVnOworLSAgICAgICAgICAgICAgIHMlPHBkZjpDcmVhdGlvbkRhdGU+W148XSo8L3BkZjpDcmVhdGlvbkRhdGU+JTxwZGY6Q3JlYXRpb25EYXRlPlhYWDwvcGRmOkNyZWF0aW9uRGF0ZT4lZzsKKy0gICAgICAgICAgICAgICBzJTxwZGY6TW9kRGF0ZT5bXjxdKjwvcGRmOk1vZERhdGU+JTxwZGY6TW9kRGF0ZT5YWFg8L3BkZjpNb2REYXRlPiVnOworLSAgICAgICAgICAgICAgIHMlPHhhcDpDcmVhdGVEYXRlPltePF0qPC94YXA6Q3JlYXRlRGF0ZT4lPHhhcDpDcmVhdGVEYXRlPlhYWDwveGFwOkNyZWF0ZURhdGU+JWc7CistICAgICAgICAgICAgICAgcyU8eGFwOk1vZGlmeURhdGU+W148XSo8L3hhcDpNb2RpZnlEYXRlPiU8eGFwOk1vZGlmeURhdGU+WFhYPC94YXA6TW9kaWZ5RGF0ZT4lZzsKKy0gICAgICAgICAgICAgICBzJTx4YXA6TWV0YWRhdGFEYXRlPltePF0qPC94YXA6TWV0YWRhdGFEYXRlPiU8eGFwOk1ldGFkYXRhRGF0ZT5YWFg8L3hhcDpNZXRhZGF0YURhdGU+JWc7CistICAgICAgICAgICAgfScgIiRmIgorLSAgICAgIGRvbmUKKy0gICAgICA7OworLSAgZXNhYworLQorLSAgZnR5cGU9YC91c3IvYmluL2ZpbGUgb2xkLyRmaWxlIHwgc2VkICdzQF5bXjpdXCs6W1s6Ymxhbms6XV0qQEAnYAorLSAgY2FzZSAkZnR5cGUgaW4KKy0gICAgIFBFMzJcIGV4ZWN1dGFibGUqTW9ub1wvXC5OZXRcIGFzc2VtYmx5KikKKy0gICAgICAgZWNobyAiUEUzMiBNb25vLy5OZXQgYXNzZW1ibHk6ICRmaWxlIgorLSAgICAgICBpZiBbIC14IC91c3IvYmluL21vbm9kaXMgXSA7IHRoZW4KKy0gICAgICAgICBtb25vZGlzIG9sZC8kZmlsZSAyPi9kZXYvbnVsbHxzZWQgLWUgJ3MvR1VJRCA9IHsuKn0vR1VJRCA9IHsgNDIgfS87Jz4gJHtmaWxlMX0KKy0gICAgICAgICBtb25vZGlzIG5ldy8kZmlsZSAyPi9kZXYvbnVsbHxzZWQgLWUgJ3MvR1VJRCA9IHsuKn0vR1VJRCA9IHsgNDIgfS87Jz4gJHtmaWxlMn0KKy0gICAgICAgICBpZiAhIGNtcCAtcyAke2ZpbGUxfSAke2ZpbGUyfTsgdGhlbgorLSAgICAgICAgICAgZWNobyAiJGZpbGUgZGlmZmVycyAoJGZ0eXBlKSIKKy0gICAgICAgICAgIGRpZmYgLXUgJHtmaWxlMX0gJHtmaWxlMn0KKy0gICAgICAgICAgIHJldHVybiAxCistICAgICAgICAgZmkKKy0gICAgICAgZWxzZQorLSAgICAgICAgIGVjaG8gIkNhbm5vdCBjb21wYXJlLCBubyBtb25vZGlzIGluc3RhbGxlZCIKKy0gICAgICAgICByZXR1cm4gMQorLSAgICAgICBmaQorLSAgICAgICA7OworLSAgICBFTEYqZXhlY3V0YWJsZSp8RUxGKltMTV1TQlwgc2hhcmVkXCBvYmplY3QqKQorLSAgICAgICBvYmpkdW1wIC1kIC0tbm8tc2hvdy1yYXctaW5zbiBvbGQvJGZpbGUgfCBmaWx0ZXJfZGlzYXNtID4gJGZpbGUxCistICAgICAgIGlmICEgdGVzdCAtcyAkZmlsZTE7IHRoZW4KKy0gICAgICAgICAjIG9iamR1bXAgaGFzIG5vIGlkZWEgaG93IHRvIGhhbmRsZSBpdAorLSAgICAgICAgIGlmICEgZGlmZl90d29fZmlsZXM7IHRoZW4KKy0gICAgICAgICAgIHJldD0xCistICAgICAgICAgICBicmVhaworLSAgICAgICAgIGZpCistICAgICAgIGZpICAgICAgIAorLSAgICAgICBlbGZkaWZmPQorLSAgICAgICBzZWQgLWkgLWUgInMsb2xkLywsIiAkZmlsZTEKKy0gICAgICAgb2JqZHVtcCAtZCAtLW5vLXNob3ctcmF3LWluc24gbmV3LyRmaWxlIHwgZmlsdGVyX2Rpc2FzbSA+ICRmaWxlMgorLSAgICAgICBzZWQgLWkgLWUgInMsbmV3LywsIiAkZmlsZTIKKy0gICAgICAgaWYgISBkaWZmIC11ICRmaWxlMSAkZmlsZTIgPiAkZGZpbGU7IHRoZW4KKy0gICAgICAgICAgZWNobyAiJGZpbGUgZGlmZmVycyBpbiBhc3NlbWJsZXIgb3V0cHV0IgorLSAgICAgICAgICBoZWFkIC1uIDIwMCAkZGZpbGUKKy0gICAgICAgICAgZWxmZGlmZj0iMSIKKy0gICAgICAgZmkKKy0gICAgICAgZWNobyAiIiA+JGZpbGUxCistICAgICAgIGVjaG8gIiIgPiRmaWxlMgorLSAgICAgICAjIERvbid0IGNvbXBhcmUgLmJ1aWxkLWlkIGFuZCAuZ251X2RlYnVnbGluayBzZWN0aW9ucworLSAgICAgICBzZWN0aW9ucz0iJChvYmpkdW1wIC1zIG5ldy8kZmlsZSB8IGdyZXAgIkNvbnRlbnRzIG9mIHNlY3Rpb24gLio6IiB8IHNlZCAtciAicywuKiAoLiopOixcMSxnIiB8IGdyZXAgLXYgLWUgIlwuYnVpbGQtaWQiIC1lICJcLmdudV9kZWJ1Z2xpbmsiIHwgdHIgIlxuIiAiICIpIgorLSAgICAgICBmb3Igc2VjdGlvbiBpbiAkc2VjdGlvbnM7IGRvCistICAgICAgICAgIG9iamR1bXAgLXMgLWogJHNlY3Rpb24gb2xkLyRmaWxlIHwgc2VkICJzLF5vbGQvLCwiID4gJGZpbGUxCistICAgICAgICAgIG9iamR1bXAgLXMgLWogJHNlY3Rpb24gbmV3LyRmaWxlIHwgc2VkICJzLF5uZXcvLCwiID4gJGZpbGUyCistICAgICAgICAgIGlmICEgZGlmZiAtdSAkZmlsZTEgJGZpbGUyID4gJGRmaWxlOyB0aGVuCistICAgICAgICAgICAgIGVjaG8gIiRmaWxlIGRpZmZlcnMgaW4gRUxGIHNlY3Rpb24gJHNlY3Rpb24iCistICAgICAgICAgICAgIGhlYWQgLW4gMjAwICRkZmlsZQorLSAgICAgICAgICAgICBlbGZkaWZmPSIxIgorLSAgICAgICAgICBmaQorLSAgICAgICBkb25lCistICAgICAgIGlmIHRlc3QgLXogIiRlbGZkaWZmIjsgdGhlbgorLSAgICAgICAgICBlY2hvICIkZmlsZTogb25seSBkaWZmZXJlbmNlIHdhcyBpbiBidWlsZC1pZCBvciBnbnVfZGVidWdsaW5rLCBHT09ELiIKKy0gICAgICAgICAgcmV0dXJuIDAKKy0gICAgICAgZmkKKy0gICAgICAgcmV0dXJuIDEKKy0gICAgICAgOzsKKy0gICAgICpBU0NJSSp8KnRleHQqKQorLSAgICAgICBpZiAhIGNtcCAtcyBvbGQvJGZpbGUgbmV3LyRmaWxlOyB0aGVuCistICAgICAgICAgZWNobyAiJGZpbGUgZGlmZmVycyAoJGZ0eXBlKSIKKy0gICAgICAgICBkaWZmIC11IG9sZC8kZmlsZSBuZXcvJGZpbGUgfCBoZWFkIC1uIDIwMAorLSAgICAgICAgIHJldHVybiAxCistICAgICAgIGZpCistICAgICAgIDs7CistICAgICBkaXJlY3Rvcnl8c2V0dWlkLFwgZGlyZWN0b3J5fHN0aWNreSxcIGRpcmVjdG9yeSkKKy0gICAgICAgIyB0YXIgbWlnaHQgcGFja2FnZSBkaXJlY3RvcmllcyAtIGlnbm9yZSB0aGVtIGhlcmUKKy0gICAgICAgcmV0dXJuIDAKKy0gICAgICAgOzsKKy0gICAgIGJ6aXAyXCBjb21wcmVzc2VkXCBkYXRhKikKKy0gICAgICAgaWYgISBjaGVja19jb21wcmVzc2VkX2ZpbGUgIiRmaWxlIiAiYnoyIjsgdGhlbgorLSAgICAgICAgICAgcmV0dXJuIDEKKy0gICAgICAgZmkKKy0gICAgICAgOzsKKy0gICAgIGd6aXBcIGNvbXByZXNzZWRcIGRhdGEqKQorLSAgICAgICBpZiAhIGNoZWNrX2NvbXByZXNzZWRfZmlsZSAiJGZpbGUiICJnemlwIjsgdGhlbgorLSAgICAgICAgICAgcmV0dXJuIDEKKy0gICAgICAgZmkKKy0gICAgICAgOzsKKy0gICAgIFhaXCBjb21wcmVzc2VkXCBkYXRhKikKKy0gICAgICAgaWYgISBjaGVja19jb21wcmVzc2VkX2ZpbGUgIiRmaWxlIiAieHoiOyB0aGVuCistICAgICAgICAgICByZXR1cm4gMQorLSAgICAgICBmaQorLSAgICAgICA7OworLSAgICAgUE9TSVhcIHRhclwgYXJjaGl2ZSkKKy0gICAgICAgICAgbXYgb2xkLyRmaWxleywudGFyfQorLSAgICAgICAgICBtdiBuZXcvJGZpbGV7LC50YXJ9CistICAgICAgICAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJHtmaWxlfS50YXI7IHRoZW4KKy0gICAgICAgICAgICByZXR1cm4gMQorLSAgICAgICAgICBmaQorLSAgICAgICA7OworLSAgICAgY3Bpb1wgYXJjaGl2ZSkKKy0gICAgICAgICAgbXYgb2xkLyRmaWxleywuY3Bpb30KKy0gICAgICAgICAgbXYgbmV3LyRmaWxleywuY3Bpb30KKy0gICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAke2ZpbGV9LmNwaW87IHRoZW4KKy0gICAgICAgICAgICByZXR1cm4gMQorLSAgICAgICAgICBmaQorLSAgICAgOzsKKy0gICAgIHN5bWJvbGljXCBsaW5rXCB0b1wgKikKKy0gICAgICAgcmVhZGxpbmsgIm9sZC8kZmlsZSIgPiAkZmlsZTEKKy0gICAgICAgcmVhZGxpbmsgIm5ldy8kZmlsZSIgPiAkZmlsZTIKKy0gICAgICAgaWYgISBkaWZmIC11ICRmaWxlMSAkZmlsZTI7IHRoZW4KKy0gICAgICAgICBlY2hvICJzeW1saW5rIHRhcmdldCBmb3IgJGZpbGUgZGlmZmVycyIKKy0gICAgICAgICByZXR1cm4gMQorLSAgICAgICBmaQorLSAgICAgICA7OworLSAgICAgKikKKy0gICAgICAgaWYgISBkaWZmX3R3b19maWxlczsgdGhlbgorLSAgICAgICAgICAgcmV0dXJuIDEKKy0gICAgICAgZmkKKy0gICAgICAgOzsKKy0gIGVzYWMKKy0gIHJldHVybiAwCistfQorLQorLSMgV2UgbmVlZCAvcHJvYyBtb3VudGVkIGZvciBzb21lIHRlc3RzLCBzbyBjaGVjayB0aGF0IGl0J3MgbW91bnRlZCBhbmQKKy0jIGNvbXBsYWluIGlmIG5vdC4KKy1QUk9DX01PVU5URUQ9MAorLWlmIFsgISAtZCAvcHJvYy9zZWxmLyBdOyB0aGVuCistICBlY2hvICIvcHJvYyBpcyBub3QgbW91bnRlZCIKKy0gIG1vdW50IC1vcncgLW4gLXRwcm9jIG5vbmUgL3Byb2MKKy0gIFBST0NfTU9VTlRFRD0xCistZmkKKy0KKy0jIHByZXNlcnZlIGNtcF9zcGVjIHJlc3VsdCBmb3IgY2hlY2tfYWxsIHJ1bnMKKy1yZXQ9JFJFUworLWZvciBmaWxlIGluICRmaWxlczsgZG8KKy0gICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICRmaWxlOyB0aGVuCistICAgICAgIHJldD0xCistICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCistICAgICAgICAgICBicmVhaworLSAgICAgICBmaQorLSAgIGZpCistZG9uZQorLQorLWlmIFsgIiRQUk9DX01PVU5URUQiIC1lcSAiMSIgXTsgdGhlbgorLSAgZWNobyAiVW5tb3VudGluZyBwcm9jIgorLSAgdW1vdW50IC9wcm9jCistZmkKKy0KKy1ybSAkZmlsZTEgJGZpbGUyICRkZmlsZSAkcmVuYW1lX3NjcmlwdAorLXJtIC1yZiAkZGlyCistaWYgdGVzdCAiJHJldCIgPSAwOyB0aGVuCistICAgICBlY2hvICJQYWNrYWdlIGNvbnRlbnQgaXMgaWRlbnRpY2FsIgorLWZpCistZXhpdCAkcmV0CistIyB2aW06IHR3PTY2NiB0cz0yIGV0CitkaWZmIC0tZ2l0IGEvc2FtZS1idWlsZC1yZXN1bHQuc2ggYi9zYW1lLWJ1aWxkLXJlc3VsdC5zaAoraW5kZXggYzg5MDdlMi4uN2U5YmQ0ZiAxMDA2NDQKKy0tLSBhL3NhbWUtYnVpbGQtcmVzdWx0LnNoCisrKysgYi9zYW1lLWJ1aWxkLXJlc3VsdC5zaAorQEAgLTcsMTEgKzcsMTEgQEAKKyAjIEVuaGFuY2VkIGJ5IEFuZHJlYXMgSmFlZ2VyIDxhakBzdXNlLmRlPgorICMKKyAjIFRoZSBzY3JpcHQgZGVjaWRlcyBpZiB0aGUgbmV3IGJ1aWxkIGRpZmZlcmVzIGZyb20gdGhlIGZvcm1lciBvbmUsCistIyB1c2luZyBycG0tY2hlY2suc2guCisrIyB1c2luZyBwa2ctZGlmZi5zaC4KKyAjIFRoZSBzY3JpcHQgaXMgY2FsbGVkIGFzIHBhcnQgb2YgdGhlIGJ1aWxkIHByb2Nlc3MgYXM6CisgIyAvdXNyL2xpYi9idWlsZC9zYW1lLWJ1aWxkLXJlc3VsdC5zaCAvLmJ1aWxkLm9sZHBhY2thZ2VzIC91c3Ivc3JjL3BhY2thZ2VzL1JQTVMgL3Vzci9zcmMvcGFja2FnZXMvU1JQTVMKKyAKKy1DTVBTQ1JJUFQ9JHswJS8qfS9ycG0tY2hlY2suc2gKKytDTVBTQ1JJUFQ9JHswJS8qfS9wa2ctZGlmZi5zaAorIFNDTVBTQ1JJUFQ9JHswJS8qfS9zcnBtLWNoZWNrLnNoCisgCisgY2hlY2tfYWxsPTEKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jY2FjaGUvY2NhY2hlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NjYWNoZS9jY2FjaGUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YWE2NGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jY2FjaGUvY2NhY2hlLmluYwpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gImEgZmFzdCBDL0MrKyBjb21waWxlciBjYWNoZSIKK0RFU0NSSVBUSU9OID0gImNjYWNoZSBpcyBhIGNvbXBpbGVyIGNhY2hlLiBJdCBzcGVlZHMgdXAgcmVjb21waWxhdGlvbiBcCitieSBjYWNoaW5nIHRoZSByZXN1bHQgb2YgcHJldmlvdXMgY29tcGlsYXRpb25zIGFuZCBkZXRlY3Rpbmcgd2hlbiB0aGUgXAorc2FtZSBjb21waWxhdGlvbiBpcyBiZWluZyBkb25lIGFnYWluLiBTdXBwb3J0ZWQgbGFuZ3VhZ2VzIGFyZSBDLCBDXCtcKywgXAorT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysuIgorSE9NRVBBR0UgPSAiaHR0cDovL2NjYWNoZS5zYW1iYS5vcmciCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MysiCisKK0RFUEVORFMgPSAiemxpYiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQuc2FtYmEub3JnL2NjYWNoZS5naXQiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2NhY2hlL2NjYWNoZV8zLjIuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NjYWNoZS9jY2FjaGVfMy4yLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU3ZGY3NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NjYWNoZS9jY2FjaGVfMy4yLjMuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlIGNjYWNoZS5pbmMKKworTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9YjNjMzM3ZTc2NjQ1NTlhNzg5ZDlmN2E5M2U1MjgzYzEiCisKK1NSQ1JFViA9ICI0Y2FkNDZlOGVlMDA1MzE0NGJiMDA5MTlmMGRhZGQyMGMxZjg3MDEzIgorCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1GaXgtcmVncmVzc2lvbi1pbi1yZWNlbnQtY2hhbmdlLXJlbGF0ZWQtdG8temxpYi1pbi1uLnBhdGNoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2NhY2hlL2ZpbGVzLzAwMDEtRml4LXJlZ3Jlc3Npb24taW4tcmVjZW50LWNoYW5nZS1yZWxhdGVkLXRvLXpsaWItaW4tbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NjYWNoZS9maWxlcy8wMDAxLUZpeC1yZWdyZXNzaW9uLWluLXJlY2VudC1jaGFuZ2UtcmVsYXRlZC10by16bGliLWluLW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjViZDlhYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NjYWNoZS9maWxlcy8wMDAxLUZpeC1yZWdyZXNzaW9uLWluLXJlY2VudC1jaGFuZ2UtcmVsYXRlZC10by16bGliLWluLW4ucGF0Y2gKQEAgLTAsMCArMSw3MyBAQAorRnJvbSBmNzRjNzYxMDc5MzMwNDYzMDk4NjE2ODBiNzQxYWRjNjdhYzJhMzRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm9lbCBSb3NkYWhsIDxqb2VsQHJvc2RhaGwubmV0PgorRGF0ZTogTW9uLCAxNyBBdWcgMjAxNSAxOTowNToxNCArMDIwMAorU3ViamVjdDogW1BBVENIXSBGaXggcmVncmVzc2lvbiBpbiByZWNlbnQgY2hhbmdlIHJlbGF0ZWQgdG8gemxpYiBpbgorIG5vbnN0YW5kYXJkIGxvY2F0aW9uCisKK1RvIGFsbG93IGZvciBzcGVjaWZ5aW5nIGEgLUwgZmxhZyBpbiBMREZMQUdTIGFuZCBoYXZlIGl0IHRha2UgZWZmZWN0IGZvcgorLWx6LCAwMjIwZGU5YzhlYmZiMThjYWFlMmFjMWFhMTYzZDA2MGU5OGNlYWRlIHB1dCAtbHogaW4gZXh0cmFfbGlicworaW5zdGVhZCBvZiBleHRyYV9sZGZsYWdzLiBIb3dldmVyLCBleHRyYV9saWJzIGlzIHN1cHBvc2VkIHRvIGNvbnRhaW4KK3BhdGhzIHRvIGxpYnJhcmllcyB3aGljaCBhcmUgcHJlcmVxdWlzaXRlcyBvZiB0aGUgY2NhY2hlIGxpbmsgcnVsZSwgYW5kCitzb21lIG9sZGVyIHZlcnNpb25zIG9mIG1ha2UgZ290IGNvbmZ1c2VkIGJ5IHNlZWluZyAtbHogYXMgYQorcHJlcmVxdWlzaXRlLgorCitUaGlzIGZpeCBpcyB0byByZXZlcnQgMDIyMGRlOWM4ZWJmYjE4Y2FhZTJhYzFhYTE2M2QwNjBlOThjZWFkZSBhbmQKK2luc3RlYWQgbWFrZSBzdXJlIHRoYXQgTERGTEFHUyBjb21lcyBiZWZvcmUgZXh0cmFfbGRmbGFncy4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorLS0tCisgTWFrZWZpbGUuaW4gIHwgIDIgKy0KKyBORVdTLnR4dCAgICAgfCAxMCArKysrKysrKysrCisgY29uZmlndXJlLmFjIHwgIDIgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCBlNzUxNWIxLi5kMzYyMWNkIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMjAsNyArMjAsNyBAQCBSQU5MSUIgPSBAUkFOTElCQAorIAorIGFsbF9jZmxhZ3MgPSAkKENGTEFHUykKKyBhbGxfY3BwZmxhZ3MgPSBAREVGU0AgQGV4dHJhX2NwcGZsYWdzQCAtRFNZU0NPTkZESVI9JChzeXNjb25mZGlyKSAtSS4gLUkkKHNyY2RpcikgJChDUFBGTEFHUykKKy1hbGxfbGRmbGFncyA9IEBleHRyYV9sZGZsYWdzQCAkKExERkxBR1MpCisrYWxsX2xkZmxhZ3MgPSAkKExERkxBR1MpIEBleHRyYV9sZGZsYWdzQAorIGV4dHJhX2xpYnMgPSBAZXh0cmFfbGlic0AKKyAKKyBiYXNlX3NvdXJjZXMgPSBcCitkaWZmIC0tZ2l0IGEvTkVXUy50eHQgYi9ORVdTLnR4dAoraW5kZXggZjEzZmVlYi4uZWFlYWRmNiAxMDA2NDQKKy0tLSBhL05FV1MudHh0CisrKysgYi9ORVdTLnR4dAorQEAgLTIsNiArMiwxNiBAQCBjY2FjaGUgbmV3cworID09PT09PT09PT09CisgCisgCisrVW5yZWxlYXNlZCAzLjIuNAorKy0tLS0tLS0tLS0tLS0tLS0KKysKKytCdWcgZml4ZXMKKyt+fn5+fn5+fn4KKysKKystIEZpeGVkIGJ1aWxkIGVycm9yIHJlbGF0ZWQgdG8gemxpYiBvbiBzeXN0ZW1zIHdpdGggb2xkZXIgbWFrZSB2ZXJzaW9ucworKyAgKHJlZ3Jlc3Npb24gaW4gY2NhY2hlIDMuMi4zKS4KKysKKysKKyBjY2FjaGUgMy4yLjMKKyAtLS0tLS0tLS0tLS0KKyBSZWxlYXNlIGRhdGU6IDIwMTUtMDgtMTYKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDhkOGNlOTIuLjllNjU1ODggMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEyMCw3ICsxMjAsNyBAQCBpZiB0ZXN0IHgke3VzZV9idW5kbGVkX3psaWJ9ID0geHllczsgdGhlbgorICAgICBleHRyYV9saWJzPSJ6bGliL2xpYnouYSIKKyAgICAgbWtkaXIgLXAgemxpYgorIGVsc2UKKy0gICAgZXh0cmFfbGlicz0iLWx6IgorKyAgICBleHRyYV9sZGZsYWdzPSItbHoiCisgZmkKKyAKKyBkbmwgTGlua2luZyBvbiBXaW5kb3dzIG5lZWRzIHdzMl8zMgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jZHJ0b29scy9jZHJ0b29scy1uYXRpdmVfMy4wMWEzMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NkcnRvb2xzL2NkcnRvb2xzLW5hdGl2ZV8zLjAxYTMxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZjM2ZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jZHJ0b29scy9jZHJ0b29scy1uYXRpdmVfMy4wMWEzMS5iYgpAQCAtMCwwICsxLDIxIEBACisjIGNkcnRvb2xzLW5hdGl2ZSBPRSBidWlsZCBmaWxlCisjIENvcHlyaWdodCAoQykgMjAwNC0yMDA2LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIHBhY2thZ2VzL0NPUFlJTkcpCitTVU1NQVJZID0gIkEgc2V0IG9mIHRvb2xzIGZvciBDRCByZWNvcmRpbmcsIGluY2x1ZGluZyBjZHJlY29yZCIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvY2RydG9vbHMvIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MiAmIENEREwtMS4wICYgTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MzJmNjgxNzBiZTQyNGMyY2Q2NDgwNDMzNzcyNmIzMTIiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3Byb2plY3QvY2RydG9vbHMvYWxwaGEvY2RydG9vbHMtJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gIjc4MTcyNTU3ODk0ZjQ2OWI0NTg0ZDAwOGU5M2VjNDY5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjE4M2I1YzEyNzc3Nzc5ZTc4ZDhiNjk0NjFhYWU1MjQwMWY4NjM3NjhlN2U3MzkxZDYwNzMwMDA2ZjhjYWRjNWEiCisKK1MgPSAiJHtXT1JLRElSfS9jZHJ0b29scy0zLjAxIgorCitpbmhlcml0IG5hdGl2ZQorCitkb19pbnN0YWxsKCkgeworCW1ha2UgaW5zdGFsbCBHTUFLRV9OT1dBUk49dHJ1ZSBJTlNfQkFTRT0ke3ByZWZpeH0gREVTVERJUj0ke0R9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jaHJwYXRoL2NocnBhdGgvc3RhbmRhcmRkb2MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jaHJwYXRoL2NocnBhdGgvc3RhbmRhcmRkb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk2ZjEwNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NocnBhdGgvY2hycGF0aC9zdGFuZGFyZGRvYy5wYXRjaApAQCAtMCwwICsxLDE5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworYXV0b2NvbmYvYXV0b21ha2Ugc2V0IGRvY2RpciBhdXRvbWF0aWNhbGx5LCB1c2UgdGhlaXIgdmFsdWUgZW5zdXJpbmcgCitkb2MgZmlsZXMgYXJlIHBsYWNlZCBpbnRvICRkYXRhZGlyL2RvYywgbm90ICRwcmVmaXgvZG9jLgorCitSUCA1LzcvMjAxMQorCitJbmRleDogY2hycGF0aC0wLjEzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY2hycGF0aC0wLjEzLm9yaWcvTWFrZWZpbGUuYW0JMjAxMS0wNy0wNSAyMzo0MDoxNC43Njk5MjAyNTQgKzAxMDAKKysrKyBjaHJwYXRoLTAuMTMvTWFrZWZpbGUuYW0JMjAxMS0wNy0wNSAyMzo0MDoxOS44MTk5MjA2MzUgKzAxMDAKK0BAIC0xLDcgKzEsNSBAQAorIFNVQkRJUlMgPSB0ZXN0c3VpdGUgZGViCisgCistZG9jZGlyID0gJChwcmVmaXgpL2RvYy8kKFBBQ0tBR0UpLSQoVkVSU0lPTikKKy0KKyBkb2NfREFUQSA9IEFVVEhPUlMgQ09QWUlORyBDaGFuZ2VMb2cgSU5TVEFMTCBORVdTIFJFQURNRQorIAorIGJpbl9QUk9HUkFNUyA9IGNocnBhdGgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NocnBhdGgvY2hycGF0aF8wLjE2LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2hycGF0aC9jaHJwYXRoXzAuMTYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEzYjA2ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NocnBhdGgvY2hycGF0aF8wLjE2LmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiVG9vbCB0byBlZGl0IHJwYXRoIGluIEVMRiBiaW5hcmllcyIKK0RFU0NSSVBUSU9OID0gImNocnBhdGggYWxsb3dzIHlvdSB0byBjaGFuZ2UgdGhlIHJwYXRoICh3aGVyZSB0aGUgXAorYXBwbGljYXRpb24gbG9va3MgZm9yIGxpYnJhcmllcykgaW4gYW4gYXBwbGljYXRpb24uIEl0IGRvZXMgbm90IFwKKyh5ZXQpIGFsbG93IHlvdSB0byBhZGQgYW4gcnBhdGggaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHkuIgorSE9NRVBBR0UgPSAiaHR0cDovL2FsaW90aC5kZWJpYW4ub3JnL3Byb2plY3RzL2NocnBhdGgvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYWxpb3RoLmRlYmlhbi5vcmcvdHJhY2tlci8/YXRpZD00MTI4MDcmZ3JvdXBfaWQ9MzEwNTIiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2FsaW90aC5kZWJpYW4ub3JnL2Zycy9kb3dubG9hZC5waHAvZmlsZS8zOTc5L2NocnBhdGgtMC4xNi50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vc3RhbmRhcmRkb2MucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyYmY4ZDFkMWVlMzQ1ZmM4YTc5MTU1NzZmNTY0OTk4MiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiYjBkNGM1NGJhYzI5OTBlMWJkZjgxMzJmMmM5NDc3YWU3NTI4NTlkNTIzZTE0MWU3MmIzYjExYTEyYzI2ZTdiIgorCitpbmhlcml0IGF1dG90b29scworCisjIFdlIGRvbid0IGhhdmUgYSBzdGFnZWQgY2hycGF0aC1uYXRpdmUgZm9yIGVuc3VyaW5nIG91ciBiaW5hcnkgaXMKKyMgcmVsb2NhdGFibGUsIHNvIHVzZSB0aGUgb25lIHdlJ3ZlIGp1c3QgYnVpbHQKK0NIUlBBVEhfQklOX2NsYXNzLW5hdGl2ZSA9ICIke0J9L2NocnBhdGgiCisKK1BST1ZJREVTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGNocnBhdGgtcmVwbGFjZW1lbnQtbmF0aXZlIgorTkFUSVZFX1BBQ0tBR0VfUEFUSF9TVUZGSVggPSAiLyR7UE59IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS1uYXRpdmVfMy4zLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS1uYXRpdmVfMy4zLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I0ZTc0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlLW5hdGl2ZV8zLjMuMS5iYgpAQCAtMCwwICsxLDE2IEBACityZXF1aXJlIGNtYWtlLmluYworaW5oZXJpdCBuYXRpdmUKKworIyBVc2luZyBjbWFrZSdzIGludGVybmFsIGxpYmFyY2hpdmUsIHNvIHNvbWUgZGVwZW5kZW5jaWVzIGFyZSBuZWVkZWQKK0RFUEVORFMgKz0gImJ6aXAyLW5hdGl2ZSB6bGliLW5hdGl2ZSIKKworU1JDX1VSSSArPSAiXAorICAgIGZpbGU6Ly9jbWxpYmFyY2hpdmUtZGlzYWJsZS1leHQyZnMucGF0Y2ggXAorIgorCisjIERpc2FibGUgY2NtYWtlIHNpbmNlIHdlIGRvbid0IGRlcGVuZCBvbiBuY3Vyc2VzCitDTUFLRV9FWFRSQUNPTkYgPSAiXAorICAgIC1EQlVJTERfQ3Vyc2VzRGlhbG9nPTAgXAorICAgIC1ERU5BQkxFX0FDTD0wIC1ESEFWRV9BQ0xfTElCQUNMX0g9MCBcCisgICAgLURIQVZFX1NZU19BQ0xfSD0wIFwKKyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2U5M2FjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UuaW5jCkBAIC0wLDAgKzEsNTIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA1LCBLb25pbmtsaWprZSBQaGlsaXBzIEVsZWN0cm9uaWNzIE5WLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBwYWNrYWdlcy9DT1BZSU5HKQorCitTVU1NQVJZID0gIkNyb3NzLXBsYXRmb3JtLCBvcGVuLXNvdXJjZSBtYWtlIHN5c3RlbSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuY21ha2Uub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3B1YmxpYy5raXR3YXJlLmNvbS9CdWcvbXlfdmlld19wYWdlLnBocCIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ29weXJpZ2h0LnR4dDttZDU9M2JhNWE2YzM0NDgxNjUyY2U1NzNlNWM0ZTFkNzA3ZTQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vU291cmNlL2NtYWtlLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xMDttZDU9MzQxNzM2ZGFlODNjOWUzNDRiNTNlZWIxYmM3ZDdiYzIiCisKK0NNQUtFX01BSk9SX1ZFUlNJT04gPSAiJHtAJy4nLmpvaW4oZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLicpWzA6Ml0pfSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmNtYWtlLm9yZy9maWxlcy92JHtDTUFLRV9NQUpPUl9WRVJTSU9OfS9jbWFrZS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vc3VwcG9ydC1vZS1xdDQtdG9vbHMtbmFtZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcXQ0LWZhaWwtc2lsZW50LnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTI2Mzg1NzZmNGUxZTYyMWZlZDZjMzQxMGQzYTFiMTIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2Q2NTAyMmM2YTA3MDdmMWM3MTEyZjk5ZTljOTgxNjc3ZmRkNTUxOGY3ZGRmYTBmNzc4ZDRjZWU3MTEzZTNkNiIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworIyBVZ2x5IGhhY2sgdG8gd29yayBhcm91bmQgdW5kZWZpbmVkIE9FX1FNQUtFX1BBVEhfRVhURVJOQUxfSE9TVF9CSU5TIHZhcmlhYmxlCisjIGFuZCBwb3NzaWJseSBtaXNzaW5nIHFtYWtlIGJpbmFyeSAocXRiYXNlLW5hdGl2ZSBjYW4gYmUgcmVtb3ZlZCBmcm9tIHN5c3Jvb3QKKyMgZS5nLiBpbiBvcmRlciB0byB1cGdyYWRlIGl0LCBldmVuIHdoZW4gdGhlcmUgaXMgdGFyZ2V0IHF0YmFzZSkKKworIyBGaXhlcyBlcnJvcnMgbGlrZSB0aGlzIGluIGNtYWtlKC1uYXRpdmUpLmRvX2NvbmZpZ3VyZToKKyN8IC0tIFBlcmZvcm1pbmcgVGVzdCBydW5fcGljX3Rlc3QgLSBTdWNjZXNzCisjfCBDTWFrZSBFcnJvciBhdCB0bXAtZWdsaWJjL3N5c3Jvb3RzL3FlbXVhcm0vdXNyL2xpYi9jbWFrZS9RdDVDb3JlL1F0NUNvcmVDb25maWcuY21ha2U6MjcgKG1lc3NhZ2UpOgorI3wgICBUaGUgaW1wb3J0ZWQgdGFyZ2V0ICJRdDU6OkNvcmUiIHJlZmVyZW5jZXMgdGhlIGZpbGUKKyN8CisjfCAgICAgICIvcW1ha2UiCisjfAorI3wgICBidXQgdGhpcyBmaWxlIGRvZXMgbm90IGV4aXN0LiAgUG9zc2libGUgcmVhc29ucyBpbmNsdWRlOgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlzZWQgLWkgJ3MvXmZpbmRfcGFja2FnZShRdDVDb3JlIFFVSUVUKSQvI2ZpbmRfcGFja2FnZShRdDVDb3JlIFFVSUVUKS9nJyAke1N9L1Rlc3RzL1J1bkNNYWtlL0NNYWtlTGlzdHMudHh0CisJc2VkIC1pICdzL14gIGZpbmRfcGFja2FnZShRdDVDb3JlIFJFUVVJUkVEKS8jICBmaW5kX3BhY2thZ2UoUXQ1Q29yZSBSRVFVSVJFRCkvZycgJHtTfS9UZXN0cy9RdDRBbmQ1QXV0b21vYy9DTWFrZUxpc3RzLnR4dAorCXNlZCAtaSAncy9eICBmaW5kX3BhY2thZ2UoUXQ1V2lkZ2V0cyBRVUlFVCBOT19NT0RVTEUpLyMgIGZpbmRfcGFja2FnZShRdDVXaWRnZXRzIFFVSUVUIE5PX01PRFVMRSkvZycgJHtTfS9UZXN0cy9DTWFrZUxpc3RzLnR4dAorCXNlZCAtaSAncy9eZmluZF9wYWNrYWdlKFF0NVdpZGdldHMgUVVJRVQpLyNmaW5kX3BhY2thZ2UoUXQ1V2lkZ2V0cyBRVUlFVCkvZycgJHtTfS9Tb3VyY2UvUXREaWFsb2cvQ01ha2VMaXN0cy50eHQKKwlzZWQgLWkgJ3MvXiAgZmluZF9wYWNrYWdlKFF0NVdpZGdldHMgUkVRVUlSRUQpLyMgIGZpbmRfcGFja2FnZShRdDVXaWRnZXRzIFJFUVVJUkVEKS9nJyAke1N9L1Rlc3RzL1F0QXV0b1VpY0ludGVyZmFjZS9DTWFrZUxpc3RzLnR4dAorCXNlZCAtaSAncy9eICBmaW5kX3BhY2thZ2UoUXQ1V2lkZ2V0cyBSRVFVSVJFRCkvIyAgZmluZF9wYWNrYWdlKFF0NVdpZGdldHMgUkVRVUlSRUQpL2cnICR7U30vVGVzdHMvUXRBdXRvZ2VuL0NNYWtlTGlzdHMudHh0CisJc2VkIC1pICdzL14gIGZpbmRfcGFja2FnZShRdDVDb3JlIFJFUVVJUkVEKS8jICBmaW5kX3BhY2thZ2UoUXQ1Q29yZSBSRVFVSVJFRCkvZycgJHtTfS9UZXN0cy9RdEF1dG9nZW4vYXV0b3JjY19kZXBlbmRzL0NNYWtlTGlzdHMudHh0Cit9CisKKyMgRXh0cmEgZmxhZ3MgdG8gcGFzcyB0byBjbWFrZSBpbnZva2VkIGJ5IGJvb3RzdHJhcAorQ01BS0VfRVhUUkFDT05GID0gIiIKKworZG9fY29uZmlndXJlICgpIHsKKwkke1N9L2NvbmZpZ3VyZSAtLXByZWZpeD0ke3ByZWZpeH0gLS0gJHtDTUFLRV9FWFRSQUNPTkZ9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9PRVRvb2xjaGFpbkNvbmZpZy5jbWFrZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL09FVG9vbGNoYWluQ29uZmlnLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMDE0YmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9PRVRvb2xjaGFpbkNvbmZpZy5jbWFrZQpAQCAtMCwwICsxLDE4IEBACitzZXQoIENNQUtFX1NZU1RFTV9OQU1FIExpbnV4ICkKK3NldCggQ01BS0VfQ19GTEFHUyAkRU5We0NGTEFHU30gQ0FDSEUgU1RSSU5HICIiIEZPUkNFICkKK3NldCggQ01BS0VfQ1hYX0ZMQUdTICRFTlZ7Q1hYRkxBR1N9ICBDQUNIRSBTVFJJTkcgIiIgRk9SQ0UgKQorc2V0KCBDTUFLRSBBU01fRkxBR1MgJHtDTUFLRV9DX0ZMQUdTfSBDQUNIRSBTVFJJTkcgIiIgRk9SQ0UgKQorc2V0KCBDTUFLRV9MREZMQUdTX0ZMQUdTICR7Q01BS0VfQ1hYX0ZMQUdTfSBDQUNIRSBTVFJJTkcgIiIgRk9SQ0UgKQorc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSCAkRU5We09FQ09SRV9UQVJHRVRfU1lTUk9PVH0gJEVOVntPRUNPUkVfTkFUSVZFX1NZU1JPT1R9ICkKK3NldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9QUk9HUkFNIE5FVkVSICkKK3NldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9MSUJSQVJZIE9OTFkgKQorc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX0lOQ0xVREUgT05MWSApCisKK3N0cmluZyhSRUdFWCBNQVRDSCAic3lzcm9vdHMvKFthLXpBLVowLTldKykiIENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgJEVOVntTREtUQVJHRVRTWVNST09UfSkKK3N0cmluZyhSRUdFWCBSRVBMQUNFICJzeXNyb290cy8iICIiIENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgJHtDTUFLRV9TWVNURU1fUFJPQ0VTU09SfSkKKworIyBJbmNsdWRlIHRoZSB0b29sY2hhaW4gY29uZmlndXJhdGlvbiBzdWJzY3JpcHRzCitmaWxlKCBHTE9CIHRvb2xjaGFpbl9jb25maWdfZmlsZXMgIiR7Q01BS0VfVE9PTENIQUlOX0ZJTEV9LmQvKi5jbWFrZSIgKQorZm9yZWFjaChjb25maWcgJHt0b29sY2hhaW5fY29uZmlnX2ZpbGVzfSkKKyAgICBpbmNsdWRlKCR7Y29uZmlnfSkKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvY21saWJhcmNoaXZlLWRpc2FibGUtZXh0MmZzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvY21saWJhcmNoaXZlLWRpc2FibGUtZXh0MmZzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMzY3MTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9jbWxpYmFyY2hpdmUtZGlzYWJsZS1leHQyZnMucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorRGlzYWJsZSB1c2Ugb2YgZXh0MmZzL2V4dDJfZnMuaCBieSBjbWFrZSdzIGludGVybmFsIGxpYmFyY2hpdmUgY29weQorCitXZSBkb24ndCB3YW50IHRvIGFkZCBhIGRlcGVuZGVuY3kgb24gZTJmc3Byb2dzLW5hdGl2ZSBmb3IgY21ha2UtbmF0aXZlLAorYW5kIHdlIGRvbid0IHVzZSBDUGFjayBzbyBqdXN0IGRpc2FibGUgdGhpcyBmdW5jdGlvbmFsaXR5LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ10KKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKKy0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvQ01ha2VMaXN0cy50eHQKKysrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvQ01ha2VMaXN0cy50eHQKK0BAIC0yMzcsMTIgKzIzNyw4IEBAIExBX0NIRUNLX0lOQ0xVREVfRklMRSgiY29weWZpbGUuaCIgSEFWRV9DT1BZRklMRV9IKQorIExBX0NIRUNLX0lOQ0xVREVfRklMRSgiZGlyZWN0LmgiIEhBVkVfRElSRUNUX0gpCisgTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJkbGZjbi5oIiBIQVZFX0RMRkNOX0gpCisgTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJlcnJuby5oIiBIQVZFX0VSUk5PX0gpCistTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJleHQyZnMvZXh0Ml9mcy5oIiBIQVZFX0VYVDJGU19FWFQyX0ZTX0gpCistCistQ0hFQ0tfQ19TT1VSQ0VfQ09NUElMRVMoIiNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKy0jaW5jbHVkZSA8ZXh0MmZzL2V4dDJfZnMuaD4KKy1pbnQgbWFpbih2b2lkKSB7IHJldHVybiBFWFQyX0lPQ19HRVRGTEFHUzsgfSIgSEFWRV9XT1JLSU5HX0VYVDJfSU9DX0dFVEZMQUdTKQorLQorK1NFVChIQVZFX0VYVDJGU19FWFQyX0ZTX0ggMCkKKytTRVQoSEFWRV9XT1JLSU5HX0VYVDJfSU9DX0dFVEZMQUdTIDApCisgTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJmY250bC5oIiBIQVZFX0ZDTlRMX0gpCisgTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJncnAuaCIgSEFWRV9HUlBfSCkKKyBMQV9DSEVDS19JTkNMVURFX0ZJTEUoImludHR5cGVzLmgiIEhBVkVfSU5UVFlQRVNfSCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL2RvbnQtcnVuLWNyb3NzLWJpbmFyaWVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvZG9udC1ydW4tY3Jvc3MtYmluYXJpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMwNTlmMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL2RvbnQtcnVuLWNyb3NzLWJpbmFyaWVzLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK2NtYWtlOiBkb24ndCBydW4gY3Jvc3MtYmluYXJpZXMgb24gaG9zdCBtYWNoaW5lCisKK1doZW4gZG9pbmcgdGhlIGNyb3NzIGJ1aWxkIHdlIG9idmlvdXNseSBjYW5ub3QgcnVuIHRob3NlIGJpbmFyaWVzIG9uCitob3N0IHNpbmNlIHRoZXkgY2FuIGJlIGJpbmFyeSBpbmNvbXBhdGlibGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CisKK0luZGV4OiBjbWFrZS0yLjguMTAuMS9DTWFrZUxpc3RzLnR4dAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNtYWtlLTIuOC4xMC4xLm9yaWcvQ01ha2VMaXN0cy50eHQKKysrKyBjbWFrZS0yLjguMTAuMS9DTWFrZUxpc3RzLnR4dAorQEAgLTU4OCw3ICs1ODgsOCBAQCBtYXJrX2FzX2FkdmFuY2VkKENNQUtFX1NUUklDVCkKKyAKKyAjIGJ1aWxkIHRoZSByZW1haW5pbmcgc3ViZGlyZWN0b3JpZXMKKyBhZGRfc3ViZGlyZWN0b3J5KFNvdXJjZSkKKy1hZGRfc3ViZGlyZWN0b3J5KFV0aWxpdGllcykKKysjIENvbWUgb24hIFJ1bm5pbmcgdGhlIGNyb3NzLWJpbmFyaWVzIG9uIGhvc3QgaXMgbm90IGEgZ29vZCBpZGVhLgorKyNhZGRfc3ViZGlyZWN0b3J5KFV0aWxpdGllcykKKyBhZGRfc3ViZGlyZWN0b3J5KFRlc3RzKQorIAorIGlmKEJVSUxEX1RFU1RJTkcpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9lbnZpcm9ubWVudC5kLWNtYWtlLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvZW52aXJvbm1lbnQuZC1jbWFrZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWI1NmI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvZW52aXJvbm1lbnQuZC1jbWFrZS5zaApAQCAtMCwwICsxIEBACithbGlhcyBjbWFrZT0iY21ha2UgLURDTUFLRV9UT09MQ0hBSU5fRklMRT0kT0VDT1JFX05BVElWRV9TWVNST09UL3Vzci9zaGFyZS9jbWFrZS9PRVRvb2xjaGFpbkNvbmZpZy5jbWFrZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL3F0NC1mYWlsLXNpbGVudC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL3F0NC1mYWlsLXNpbGVudC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGZjMjc3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvcXQ0LWZhaWwtc2lsZW50LnBhdGNoCkBAIC0wLDAgKzEsNzcgQEAKK0ZhaWwgc2lsZW50bHkgaWYgc3lzdGVtIFF0IGluc3RhbGxhdGlvbiBpcyBicm9rZW4KKworRml4ZXMgYSByZWdyZXNzaW9uIGluIGJlaGF2aW91ciBmcm9tIDIuOC4xMCB0byAyLjguMTEgcmVzdWx0aW5nIGluIHRoZQorZm9sbG93aW5nIGVycm9yIGlmIHRoZSBzeXN0ZW0gUXQgaW5zdGFsbGF0aW9uIGlzIGJyb2tlbjoKKworQ01ha2UgRXJyb3IgYXQgTW9kdWxlcy9GaW5kUXQ0LmNtYWtlOjEwMjggKHNldF9wcm9wZXJ0eSk6CisgIHNldF9wcm9wZXJ0eSBjb3VsZCBub3QgZmluZCBUQVJHRVQgUXQ0OjpRdENvcmUuICBQZXJoYXBzIGl0IGhhcyBub3QgeWV0CisgIGJlZW4gY3JlYXRlZC4KK0NhbGwgU3RhY2sgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpOgorICBUZXN0cy9SdW5DTWFrZS9DTWFrZUxpc3RzLnR4dDo3OSAoZmluZF9wYWNrYWdlKQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKK1RoZSBwYXRjaCB3YXMgc2xpZ2h0bHkgYWRhcHRlZCBpbiBvcmRlciB0byBtYXRjaCBjbWFrZSAzLjIuMjoKK0Fub3RoZXIgc2V0X3Byb3BlcnR5IHdhcyBpbnRyb2R1Y2VkIHdoaWNoIGhhZCB0byBiZSBpbmNsdWRlZAord2l0aGluIHRoZSBpZihRVF9RVENPUkVfRk9VTkQpIHN0YXRlbWVudC4KKworU2lnbmVkLW9mZi1ieTogTW9yaXR6IEJsdW1lIDxtb3JpdHouYmx1bWVAYm13LWNhcml0LmRlPgorLS0tCisgTW9kdWxlcy9GaW5kUXQ0LmNtYWtlIHwgMzkgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kUXQ0LmNtYWtlIGIvTW9kdWxlcy9GaW5kUXQ0LmNtYWtlCitpbmRleCA2NzA0NzY5Li45MDQ4ZTM1IDEwMDY0NAorLS0tIGEvTW9kdWxlcy9GaW5kUXQ0LmNtYWtlCisrKysgYi9Nb2R1bGVzL0ZpbmRRdDQuY21ha2UKK0BAIC0xMDAwLDI1ICsxMDAwLDI2IEBAIGlmIChRVF9RTUFLRV9FWEVDVVRBQkxFIEFORAorICAgICBlbmRpZigpCisgICBlbmRtYWNybygpCisgCistCistICAjIFNldCBRVF94eXpfTElCUkFSWSB2YXJpYWJsZSBhbmQgYWRkCistICAjIGxpYnJhcnkgaW5jbHVkZSBwYXRoIHRvIFFUX0lOQ0xVREVTCistICBfUVQ0X0FESlVTVF9MSUJfVkFSUyhRdENvcmUpCistICBzZXRfcHJvcGVydHkoVEFSR0VUIFF0NDo6UXRDb3JlIEFQUEVORCBQUk9QRVJUWQorLSAgICBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUworLSAgICAgICIke1FUX01LU1BFQ1NfRElSfS9kZWZhdWx0IgorLSAgICAgICR7UVRfSU5DTFVERV9ESVJ9CistICApCistICBzZXRfcHJvcGVydHkoVEFSR0VUIFF0NDo6UXRDb3JlIEFQUEVORCBQUk9QRVJUWQorLSAgICBJTlRFUkZBQ0VfQ09NUElMRV9ERUZJTklUSU9OUworLSAgICAgICQ8JDxOT1Q6JDxDT05GSUc6RGVidWc+PjpRVF9OT19ERUJVRz4KKy0gICkKKy0gIHNldF9wcm9wZXJ0eShUQVJHRVQgUXQ0OjpRdENvcmUgUFJPUEVSVFkKKy0gICAgSU5URVJGQUNFX1FUX01BSk9SX1ZFUlNJT04gNAorLSAgKQorLSAgc2V0X3Byb3BlcnR5KFRBUkdFVCBRdDQ6OlF0Q29yZSBBUFBFTkQgUFJPUEVSVFkKKy0gICAgQ09NUEFUSUJMRV9JTlRFUkZBQ0VfU1RSSU5HIFFUX01BSk9SX1ZFUlNJT04KKy0gICkKKysgIGlmKFFUX1FUQ09SRV9GT1VORCkKKysgICAgIyBTZXQgUVRfeHl6X0xJQlJBUlkgdmFyaWFibGUgYW5kIGFkZAorKyAgICAjIGxpYnJhcnkgaW5jbHVkZSBwYXRoIHRvIFFUX0lOQ0xVREVTCisrICAgIF9RVDRfQURKVVNUX0xJQl9WQVJTKFF0Q29yZSkKKysgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCBRdDQ6OlF0Q29yZSBBUFBFTkQgUFJPUEVSVFkKKysgICAgICBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUworKyAgICAgICAgIiR7UVRfTUtTUEVDU19ESVJ9L2RlZmF1bHQiCisrICAgICAgICAke1FUX0lOQ0xVREVfRElSfQorKyAgICApCisrICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgUXQ0OjpRdENvcmUgQVBQRU5EIFBST1BFUlRZCisrICAgICAgSU5URVJGQUNFX0NPTVBJTEVfREVGSU5JVElPTlMKKysgICAgICAgICQ8JDxOT1Q6JDxDT05GSUc6RGVidWc+PjpRVF9OT19ERUJVRz4KKysgICAgKQorKyAgICBzZXRfcHJvcGVydHkoVEFSR0VUIFF0NDo6UXRDb3JlIFBST1BFUlRZCisrICAgICAgSU5URVJGQUNFX1FUX01BSk9SX1ZFUlNJT04gNAorKyAgICApCisrICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgUXQ0OjpRdENvcmUgQVBQRU5EIFBST1BFUlRZCisrICAgICAgQ09NUEFUSUJMRV9JTlRFUkZBQ0VfU1RSSU5HIFFUX01BSk9SX1ZFUlNJT04KKysgICAgKQorKyAgZW5kaWYoKQorIAorICAgZm9yZWFjaChRVF9NT0RVTEUgJHtRVF9NT0RVTEVTfSkKKyAgICAgX1FUNF9BREpVU1RfTElCX1ZBUlMoJHtRVF9NT0RVTEV9KQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9zdXBwb3J0LW9lLXF0NC10b29scy1uYW1lcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL3N1cHBvcnQtb2UtcXQ0LXRvb2xzLW5hbWVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1Y2JjYTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9zdXBwb3J0LW9lLXF0NC10b29scy1uYW1lcy5wYXRjaApAQCAtMCwwICsxLDU0IEBACitjbWFrZTogc3VwcG9ydCBPcGVuRW1iZWRkZWQgUXQ0IHRvb2wgYmluYXJ5IG5hbWVzCisKK1RoZSBGaW5kUXQ0IG1vZHVsZSBsb29rcyBmb3IgUXQ0IGJpbmFyaWVzIHRvIGJlIGFibGUgdG8gZ2F0aGVyIHRoZQorcGF0aHMgdXNlZCBmb3IgY29tcGlsYXRpb24gYW5kIGFsc28gdG8gYmUgdXNpbmcgZHVyaW5nIG90aGVyIHByb2Nlc3NlcworKHRyYW5zbGF0aW9uIHVwZGF0ZSwgdHJhbnNsYXRpb24gYmluYXJ5IGdlbmVyYXRpbmcgYW5kIGxpa2UpIGhvd2V2ZXIKK09wZW5FbWJlZGRlZCBoYXMgcmVuYW1lZCB0aG9zZSB0byBhbGxvdyBvbGQgUU1ha2UgdG8gYmUgdXNlZCBpbgorcGFyYWxsZWwgd2l0aCB0aGUgY3VycmVudCBvbmUuIFRoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUKK09wZW5FbWJlZGRlZCBzcGVjaWZpYyBiaW5hcnkgbmFtZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CisKK1RoZSBwYXRjaCB3YXMgc2xpZ2h0bHkgYWRhcHRlZCBpbiBvcmRlciB0byBtYXRjaCBjbWFrZSAzLjIuMjoKK0luc3RlYWQgb2YgZmluZF9wcm9ncmFtLCBfZmluZF9xdDRfcHJvZ3JhbSBpcyBub3cgdXNlZC4KKworU2lnbmVkLW9mZi1ieTogTW9yaXR6IEJsdW1lIDxtb3JpdHouYmx1bWVAYm13LWNhcml0LmRlPgorLS0tCisgTW9kdWxlcy9GaW5kUXQ0LmNtYWtlIHwgMTAgKysrKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRRdDQuY21ha2UgYi9Nb2R1bGVzL0ZpbmRRdDQuY21ha2UKK2luZGV4IDExMDkxYjUuLjY3MDQ3NjkgMTAwNjQ0CistLS0gYS9Nb2R1bGVzL0ZpbmRRdDQuY21ha2UKKysrKyBiL01vZHVsZXMvRmluZFF0NC5jbWFrZQorQEAgLTUyMiw3ICs1MjIsNyBAQCBlbmRmdW5jdGlvbigpCisgCisgc2V0KFFUNF9JTlNUQUxMRURfVkVSU0lPTl9UT09fT0xEIEZBTFNFKQorIAorLXNldChfUVQ0X1FNQUtFX05BTUVTIHFtYWtlIHFtYWtlNCBxbWFrZS1xdDQgcW1ha2UtbWFjKQorK3NldChfUVQ0X1FNQUtFX05BTUVTIHFtYWtlIHFtYWtlMiBxbWFrZTQgcW1ha2UtcXQ0IHFtYWtlLW1hYykKKyBfcXQ0X2ZpbmRfcW1ha2UoIiR7X1FUNF9RTUFLRV9OQU1FU30iIFFUX1FNQUtFX0VYRUNVVEFCTEUgUVRWRVJTSU9OKQorIAorIGlmIChRVF9RTUFLRV9FWEVDVVRBQkxFIEFORAorQEAgLTExNDgsMTIgKzExNDgsMTIgQEAgaWYgKFFUX1FNQUtFX0VYRUNVVEFCTEUgQU5ECisgICBfZmluZF9xdDRfcHJvZ3JhbShRVF9NT0NfRVhFQ1VUQUJMRSBRdDQ6Om1vYyBtb2MtcXQ0IG1vYzQgbW9jKQorICAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfVUlDX0VYRUNVVEFCTEUgUXQ0Ojp1aWMgdWljLXF0NCB1aWM0IHVpYykKKyAgIF9maW5kX3F0NF9wcm9ncmFtKFFUX1VJQzNfRVhFQ1VUQUJMRSBRdDQ6OnVpYzMgdWljMykKKy0gIF9maW5kX3F0NF9wcm9ncmFtKFFUX1JDQ19FWEVDVVRBQkxFIFF0NDo6cmNjIHJjYykKKy0gIF9maW5kX3F0NF9wcm9ncmFtKFFUX0RCVVNDUFAyWE1MX0VYRUNVVEFCTEUgUXQ0OjpxZGJ1c2NwcDJ4bWwgcWRidXNjcHAyeG1sKQorLSAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfREJVU1hNTDJDUFBfRVhFQ1VUQUJMRSBRdDQ6OnFkYnVzeG1sMmNwcCBxZGJ1c3htbDJjcHApCisrICBfZmluZF9xdDRfcHJvZ3JhbShRVF9SQ0NfRVhFQ1VUQUJMRSBRdDQ6OnJjYyByY2M0IHJjYykKKysgIF9maW5kX3F0NF9wcm9ncmFtKFFUX0RCVVNDUFAyWE1MX0VYRUNVVEFCTEUgUXQ0OjpxZGJ1c2NwcDJ4bWwgcWRidXNjcHAyeG1sNCBxZGJ1c2NwcDJ4bWwpCisrICBfZmluZF9xdDRfcHJvZ3JhbShRVF9EQlVTWE1MMkNQUF9FWEVDVVRBQkxFIFF0NDo6cWRidXN4bWwyY3BwIHFkYnVzeG1sMmNwcDQgcWRidXN4bWwyY3BwKQorICAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfTFVQREFURV9FWEVDVVRBQkxFIFF0NDo6bHVwZGF0ZSBsdXBkYXRlLXF0NCBsdXBkYXRlNCBsdXBkYXRlKQorICAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfTFJFTEVBU0VfRVhFQ1VUQUJMRSBRdDQ6OmxyZWxlYXNlIGxyZWxlYXNlLXF0NCBscmVsZWFzZTQgbHJlbGVhc2UpCistICBfZmluZF9xdDRfcHJvZ3JhbShRVF9RQ09MTEVDVElPTkdFTkVSQVRPUl9FWEVDVVRBQkxFIFF0NDo6cWNvbGxlY3Rpb25nZW5lcmF0b3IgcWNvbGxlY3Rpb25nZW5lcmF0b3ItcXQ0IHFjb2xsZWN0aW9uZ2VuZXJhdG9yKQorKyAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfUUNPTExFQ1RJT05HRU5FUkFUT1JfRVhFQ1VUQUJMRSBRdDQ6OnFjb2xsZWN0aW9uZ2VuZXJhdG9yIHFjb2xsZWN0aW9uZ2VuZXJhdG9yLXF0NCBxY29sbGVjdGlvbmdlbmVyYXRvciBxY29sbGVjdGlvbmdlbmVyYXRvcjQpCisgICBfZmluZF9xdDRfcHJvZ3JhbShRVF9ERVNJR05FUl9FWEVDVVRBQkxFIFF0NDo6ZGVzaWduZXIgZGVzaWduZXItcXQ0IGRlc2lnbmVyNCBkZXNpZ25lcikKKyAgIF9maW5kX3F0NF9wcm9ncmFtKFFUX0xJTkdVSVNUX0VYRUNVVEFCTEUgUXQ0OjpsaW5ndWlzdCBsaW5ndWlzdC1xdDQgbGluZ3Vpc3Q0IGxpbmd1aXN0KQorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZV8zLjMuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlXzMuMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMTg4ZjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZV8zLjMuMS5iYgpAQCAtMCwwICsxLDUzIEBACityZXF1aXJlIGNtYWtlLmluYworCitpbmhlcml0IGNtYWtlCisKK0RFUEVORFMgKz0gImN1cmwgZXhwYXQgemxpYiBsaWJhcmNoaXZlIHh6IG5jdXJzZXMgYnppcDIiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgXAorICAgIGZpbGU6Ly9PRVRvb2xjaGFpbkNvbmZpZy5jbWFrZSBcCisgICAgZmlsZTovL2Vudmlyb25tZW50LmQtY21ha2Uuc2giCisKKyMgU3RyaXAgJHtwcmVmaXh9IGZyb20gJHtkb2NkaXJ9LCBzZXQgcmVzdWx0IGludG8gZG9jZGlyX3N0cmlwcGVkCitweXRob24gKCkgeworICAgIHByZWZpeD1kLmdldFZhcigicHJlZml4IiwgVHJ1ZSkKKyAgICBkb2NkaXI9ZC5nZXRWYXIoImRvY2RpciIsIFRydWUpCisKKyAgICBpZiBub3QgZG9jZGlyLnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgnZG9jZGlyIG11c3QgY29udGFpbiBwcmVmaXggYXMgaXRzIHByZWZpeCcpCisKKyAgICBkb2NkaXJfc3RyaXBwZWQgPSBkb2NkaXJbbGVuKHByZWZpeCk6XQorICAgIGlmIGxlbihkb2NkaXJfc3RyaXBwZWQpID4gMCBhbmQgZG9jZGlyX3N0cmlwcGVkWzBdID09ICcvJzoKKyAgICAgICAgZG9jZGlyX3N0cmlwcGVkID0gZG9jZGlyX3N0cmlwcGVkWzE6XQorCisgICAgZC5zZXRWYXIoImRvY2Rpcl9zdHJpcHBlZCIsIGRvY2Rpcl9zdHJpcHBlZCkKK30KKworRVhUUkFfT0VDTUFLRT0iIFwKKyAgICAtRENNQUtFX0RPQ19ESVI9JHtkb2NkaXJfc3RyaXBwZWR9L2NtYWtlLSR7Q01BS0VfTUFKT1JfVkVSU0lPTn0gXAorICAgIC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX0JaSVAyPTEgXAorICAgIC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX0NVUkw9MSBcCisgICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfRVhQQVQ9MSBcCisgICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfRk9STT0xIFwKKyAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9MSUJBUkNISVZFPTEgXAorICAgIC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX0xJQkxaTUE9MSBcCisgICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfWkxJQj0xIFwKKyAgICAtREtXU1lTX0NIQVJfSVNfU0lHTkVEPTEgXAorICAgIC1EQlVJTERfQ3Vyc2VzRGlhbG9nPTAgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGFyZ2VmaWxlJywgJy1ES1dTWVNfTEZTX1dPUktTPTEnLCAnLURLV1NZU19MRlNfRElTQUJMRT0xJywgZCl9IFwKKyIKKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworICAgIG1rZGlyIC1wICR7RH0ke2RhdGFkaXJ9L2NtYWtlCisgICAgaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS9PRVRvb2xjaGFpbkNvbmZpZy5jbWFrZSAke0R9JHtkYXRhZGlyfS9jbWFrZS8KKworICAgIG1rZGlyIC1wICR7RH0ke1NES1BBVEhOQVRJVkV9L2Vudmlyb25tZW50LXNldHVwLmQKKyAgICBpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L2Vudmlyb25tZW50LmQtY21ha2Uuc2ggJHtEfSR7U0RLUEFUSE5BVElWRX0vZW52aXJvbm1lbnQtc2V0dXAuZC9jbWFrZS5zaAorfQorCitGSUxFU18ke1BOfV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiAke1NES1BBVEhOQVRJVkV9IgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9jbWFrZS0ke0NNQUtFX01BSk9SX1ZFUlNJT059IgorRklMRVNfJHtQTn0tZG9jICs9ICIke2RvY2Rpcn0vY21ha2UtJHtDTUFLRV9NQUpPUl9WRVJTSU9OfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXNrdG9wLWZpbGUtdXRpbHMvZGVza3RvcC1maWxlLXV0aWxzLW5hdGl2ZV8wLjIyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGVza3RvcC1maWxlLXV0aWxzL2Rlc2t0b3AtZmlsZS11dGlscy1uYXRpdmVfMC4yMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjczNTY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGVza3RvcC1maWxlLXV0aWxzL2Rlc2t0b3AtZmlsZS11dGlscy1uYXRpdmVfMC4yMi5iYgpAQCAtMCwwICsxLDE2IEBACitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitTVU1NQVJZID0gIkNvbW1hbmQgbGluZSB1dGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCAqLmRlc2t0b3AgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL2Rlc2t0b3AtZmlsZS11dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgorREVQRU5EUyA9ICJnbGliLTIuMC1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL2ZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9kZXNrdG9wLWZpbGUtdXRpbHMvcmVsZWFzZXMvZGVza3RvcC1maWxlLXV0aWxzLSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gImM2YjlmOWFhYzFlYTE0MzA5MTE3OGMyMzQzN2U2Y2QwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg0MzUzMjY3MjY5MmY5OGU5YjJkNmFlNmNjODY1OGRhNTYyZGZkZTE2MDZjN2YzM2Q5ZDIyN2EzNDRkZTU2YzUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIG5hdGl2ZQorCitTID0gIiR7V09SS0RJUn0vZGVza3RvcC1maWxlLXV0aWxzLSR7UFZ9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL2Rpc3RjYy1jb25maWcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvZGlzdGNjLWNvbmZpZy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjc4MzBiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL2Rpc3RjYy1jb25maWcuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJTZXRzIHVwIGRpc3RjYyBmb3IgY29tcGlsYXRpb24gb24gdGhlIHRhcmdldCBkZXZpY2UiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1NSQ19VUkkgPSAiZmlsZTovL2Rpc3RjYy5zaCIKKworUyA9ICIke1dPUktESVJ9IgorCisjIERlZmF1bHQgdG8gdGhlIGhvc3QgbWFjaGluZSBmb3IgYSBydW5uaW5nIHFlbXUgc2Vzc2lvbgorRElTVENDX0hPU1RTID89ICIxOTIuMTY4LjcuMSIKKworZG9fY29uZmlndXJlKCkgeworCXNlZCAtaSAicyVARElTVENDX0hPU1RTQCUke0RJU1RDQ19IT1NUU30lIiBkaXN0Y2Muc2gKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3Byb2ZpbGUuZAorCWluc3RhbGwgLW0gMDc1NSBkaXN0Y2Muc2ggJHtEfSR7c3lzY29uZmRpcn0vcHJvZmlsZS5kLworfQorCitSREVQRU5EU18ke1BOfSA9ICJkaXN0Y2MiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvZGlzdGNjLWNvbmZpZy9kaXN0Y2Muc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvZGlzdGNjLWNvbmZpZy9kaXN0Y2Muc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQyMDU5MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RldmVsLWNvbmZpZy9kaXN0Y2MtY29uZmlnL2Rpc3RjYy5zaApAQCAtMCwwICsxLDQgQEAKK0RJU1RDQ19IT1NUUz0iQERJU1RDQ19IT1NUU0AiCisjRElTVENDX1ZFUkJPU0U9IjEiCisKK2V4cG9ydCBESVNUQ0NfSE9TVFMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RldmVsLWNvbmZpZy9uZnMtZXhwb3J0LXJvb3QuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvbmZzLWV4cG9ydC1yb290LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2OWQwMDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvbmZzLWV4cG9ydC1yb290LmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiQ29uZmlndXJhdGlvbiBzY3JpcHQgdG8gZXhwb3J0IHRhcmdldCByb290ZnMgZmlsZXN5c3RlbSIKK0RFU0NSSVBUSU9OID0gIkVuYWJsZXMgTkZTIGFjY2VzcyBmcm9tIGFueSBob3N0IHRvIHRoZSBlbnRpcmUgZmlsZXN5c3RlbSAoZm9yIGRldmVsb3BtZW50IHB1cnBvc2VzKS4iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICJmaWxlOi8vZXhwb3J0cyIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDA2NDQgZXhwb3J0cyAke0R9JHtzeXNjb25mZGlyfS8KK30KKworUkRFUEVORFNfJHtQTn0gPSAicGFja2FnZWdyb3VwLWNvcmUtbmZzLXNlcnZlciIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RldmVsLWNvbmZpZy9uZnMtZXhwb3J0LXJvb3QvZXhwb3J0cyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RldmVsLWNvbmZpZy9uZnMtZXhwb3J0LXJvb3QvZXhwb3J0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzUzYzVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL25mcy1leHBvcnQtcm9vdC9leHBvcnRzCkBAIC0wLDAgKzEgQEAKKy8gKihydyxub19yb290X3NxdWFzaCxhc3luYyxub19zdWJ0cmVlX2NoZWNrKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlmZnN0YXQvZGlmZnN0YXQvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlmZnN0YXQvZGlmZnN0YXQvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MzZiM2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaWZmc3RhdC9kaWZmc3RhdC9ydW4tcHRlc3QKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKKworLi90ZXN0aW5nL3J1bl90ZXN0LnNoIC4vdGVzdGluZy9jYXNlKi5wYXQgfHNlZCBcCisgIC1lICdzfCoqIG9rfFBBU1N8JyBcCisgIC1lICdzfD8/IGZhaWx8RkFJTHwnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaWZmc3RhdC9kaWZmc3RhdF8xLjYwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlmZnN0YXQvZGlmZnN0YXRfMS42MC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWJhNGRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlmZnN0YXQvZGlmZnN0YXRfMS42MC5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIlRvb2wgdG8gcHJvZHVjZSBhIHN0YXRpc3RpY3MgYmFzZWQgb24gYSBkaWZmIgorREVTQ1JJUFRJT04gPSAiZGlmZnN0YXQgcmVhZHMgdGhlIG91dHB1dCBvZiBkaWZmIGFuZCBkaXNwbGF5cyBhIGhpc3RvZ3JhbSBvZiBcCit0aGUgaW5zZXJ0aW9ucywgZGVsZXRpb25zLCBhbmQgbW9kaWZpY2F0aW9ucyBwZXItZmlsZS4gSXQgaXMgdXNlZnVsIGZvciBcCityZXZpZXdpbmcgbGFyZ2UsIGNvbXBsZXggcGF0Y2ggZmlsZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2RpZmZzdGF0LyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2luc3RhbGwtc2g7ZW5kbGluZT00MjttZDU9YjM1NDk3MjZjMTAyMmJlZTA5YzE3NGM3MmEwY2E0YTUiCisKK1NSQ19VUkkgPSAiZnRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvZGlmZnN0YXQvZGlmZnN0YXQtJHtQVn0udGd6IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiYTg4OWRhNGMwNmI1NDdhYTJkNzhmYTk2ODAwYWU2ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyMDMyZTQxOGI0M2JhZTcwZDU0OGUzMmRhOTAxZWJjNGFjMTI5NzIzODFkZTEzMTRiZWJkZTBiMTI2ZmIwMTIzIgorCitTID0gIiR7V09SS0RJUn0vZGlmZnN0YXQtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcHRlc3QKKworTERGTEFHUyArPSAiJHtUT09MQ0hBSU5fT1BUSU9OU30iCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJaWYgWyAhIC1lICR7U30vYWNpbmNsdWRlLm00IF07IHRoZW4KKwkJbXYgJHtTfS9hY2xvY2FsLm00ICR7U30vYWNpbmNsdWRlLm00CisJZmkKKwlhdXRvdG9vbHNfZG9fY29uZmlndXJlCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJY3AgLXIgJHtTfS90ZXN0aW5nICR7RH0ke1BURVNUX1BBVEh9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZGlzdGNjXzMuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9kaXN0Y2NfMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ODc5YzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZGlzdGNjXzMuMS5iYgpAQCAtMCwwICsxLDc0IEBACitTVU1NQVJZID0gIkEgcGFyYWxsZWwgYnVpbGQgc3lzdGVtIgorREVTQ1JJUFRJT04gPSAiZGlzdGNjIGlzIGEgcGFyYWxsZWwgYnVpbGQgc3lzdGVtIHRoYXQgZGlzdHJpYnV0ZXMgXAorY29tcGlsYXRpb24gb2YgQy9DKysvT2JqQyBjb2RlIGFjcm9zcyBtYWNoaW5lcyBvbiBhIG5ldHdvcmsuIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworREVQRU5EUyA9ICJhdmFoaSIKKworR1RLQ09ORklHID0gImd0ayIKK0dUS0NPTkZJR19saWJjLXVjbGliYyA9ICIiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICcke0dUS0NPTkZJR30nLCAnJywgZCl9IHBvcHQiCitQQUNLQUdFQ09ORklHW2d0a10gPSAiLS13aXRoLWd0aywtLXdpdGhvdXQtZ3RrIC0td2l0aG91dC1nbm9tZSxndGsrIgorIyB1c2Ugc3lzdGVtIHBvcHQgYnkgZGVmYXVsdAorUEFDS0FHRUNPTkZJR1twb3B0XSA9ICItLXdpdGhvdXQtaW5jbHVkZWQtcG9wdCwtLXdpdGgtaW5jbHVkZWQtcG9wdCxwb3B0IgorCitSUkVDT01NRU5EU18ke1BOfSA9ICJhdmFoaS1kYWVtb24iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9kaXN0Y2MvZGlzdGNjLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9zZXBhcmF0ZWJ1aWxkZGlyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtemVyb2NvbmYtSW5jbHVkZS1mY250bC5oLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RlZmF1bHQgXAorICAgICAgICAgICBmaWxlOi8vZGlzdGNjbW9uLWdub21lLmRlc2t0b3AgXAorICAgICAgICAgICBmaWxlOi8vZGlzdGNjIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc3RjYy5zZXJ2aWNlIgorU1JDUkVWID0gIjlhMTcyZDNkMjAwNDI3NTRhMzBjMGNkOWE1ZDYzZmQxYTgxMjBjMzEiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXBkYXRlLXJjLmQgdXNlcmFkZCBzeXN0ZW1kCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLVdlcnJvciBQWVRIT049L2Rldi9udWxsIgorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorVVNFUkFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSBcCisgICAgICAgICAgICAgICAgICAgICAgIC0taG9tZSAvZGV2L251bGwgXAorICAgICAgICAgICAgICAgICAgICAgICAtLW5vLWNyZWF0ZS1ob21lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1naWQgbm9ncm91cCBcCisgICAgICAgICAgICAgICAgICAgICAgIGRpc3RjYyIKKworSU5JVFNDUklQVF9OQU1FID0gImRpc3RjYyIKKworU1lTVEVNRF9QQUNLQUdFUyA9ICIke1BOfSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJkaXN0Y2Muc2VydmljZSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0CisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vZGlzdGNjICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9kZWZhdWx0ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvZGlzdGNjCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kaXN0Y2Muc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorICAgIHNlZCAtaSAtZSAncyxAQklORElSQCwke2JpbmRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZGlzdGNjLnNlcnZpY2UKKyAgICAke0RFU0tUT1BJTlNUQUxMfQorfQorREVTS1RPUElOU1RBTEwgPSAiIgorREVTS1RPUElOU1RBTExfbGliYy1nbGliYyAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9kaXN0Y2MvCisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZGlzdGNjbW9uLWdub21lLmRlc2t0b3AgJHtEfSR7ZGF0YWRpcn0vZGlzdGNjLworfQorUEFDS0FHRVMgKz0gImRpc3RjYy1kaXN0bW9uLWdub21lIgorCitGSUxFU18ke1BOfSA9ICIgJHtzeXNjb25mZGlyfSBcCisJCSR7YmluZGlyfS9kaXN0Y2MgXAorICAgICR7YmluZGlyfS9sc2Rpc3RjYyBcCisJCSR7YmluZGlyfS9kaXN0Y2NkIFwKKwkJJHtiaW5kaXJ9L2Rpc3RjY21vbi10ZXh0IFwKKwkJJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kaXN0Y2Muc2VydmljZSIKK0ZJTEVTX2Rpc3RjYy1kaXN0bW9uLWdub21lID0gIiAgJHtiaW5kaXJ9L2Rpc3RjY21vbi1nbm9tZSBcCisJCQkJJHtkYXRhZGlyfS9kaXN0Y2MiCisKK3BrZ19wb3N0cm1fJHtQTn0gKCkgeworCWRlbHVzZXIgZGlzdGNjIHx8IHRydWUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy8wMDAxLXplcm9jb25mLUluY2x1ZGUtZmNudGwuaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy8wMDAxLXplcm9jb25mLUluY2x1ZGUtZmNudGwuaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTdlYzljCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzLzAwMDEtemVyb2NvbmYtSW5jbHVkZS1mY250bC5oLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gODMzMWZjNDc1OWQ4MDk1MTJmNDA0ZTdhMjdmODE3YWQ2ZDYxNjQ1MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE4OjAwOjMzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHplcm9jb25mOiBJbmNsdWRlIGZjbnRsLmgKKworV2UgbmVlZCBpdCBmb3IgZ2V0dGluZyBkZWluaXRpb25zIGZvciBPXyogZS5nLiBPX0NSRUFUCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL3plcm9jb25mLmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3NyYy96ZXJvY29uZi5jIGIvc3JjL3plcm9jb25mLmMKK2luZGV4IDQxNGRkYzQuLjMxYmQzM2YgMTAwNjQ0CistLS0gYS9zcmMvemVyb2NvbmYuYworKysrIGIvc3JjL3plcm9jb25mLmMKK0BAIC0zMyw2ICszMyw3IEBACisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8bGltaXRzLmg+CisrI2luY2x1ZGUgPGZjbnRsLmg+CisgCisgI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9kb21haW4uaD4KKyAjaW5jbHVkZSA8YXZhaGktY29tbW9uL2Vycm9yLmg+CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kZWZhdWx0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2RlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNjNDE1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kZWZhdWx0CkBAIC0wLDAgKzEsMjQgQEAKKyMgRGVmYXVsdHMgZm9yIGRpc3RjYyBpbml0c2NyaXB0CisjIHNvdXJjZWQgYnkgL2V0Yy9pbml0LmQvZGlzdGNjCisKKyMKKyMgc2hvdWxkIGRpc3RjYyBiZSBzdGFydGVkIG9uIGJvb3Q/CisjCisjIFNUQVJURElTVENDPSJ0cnVlIgorCitTVEFSVERJU1RDQz0idHJ1ZSIKKworIworIyBXaGljaCBuZXR3b3Jrcy9ob3N0cyBzaG91bGQgYmUgYWxsb3dlZCB0byBjb25uZWN0IHRvIHRoZSBkYWVtb24/CisjIFlvdSBjYW4gbGlzdCBtdWx0aXBsZSBob3N0cy9uZXR3b3JrcyBzZXBhcmF0ZWQgYnkgc3BhY2VzLgorIyBOZXR3b3JrcyBoYXZlIHRvIGJlIGluIENJRFIgbm90YXRpb24sIGYuZS4gMTkyLjE2OC4xLjAvMjQKKyMgSG9zdHMgYXJlIHJlcHJlc2VudGVkIGJ5IGEgc2luZ2xlIElQIEFkcmVzcworIworIyBBTExPV0VETkVUUz0iMTI3LjAuMC4xIgorCitBTExPV0VETkVUUz0iMTkyLjE2OC43LjAvMjQiCisKKyMKKyMgT1BUSU9OUyBpcyB1c2VkIGZvciB0aGUgc3lzdGVtZCBzZXJ2aWNlIGZpbGUKKyMKK09QVElPTlM9Ii0tYWxsb3cgMTkyLjE2OC43LjAvMjQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvZGlzdGNjIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2Rpc3RjYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMzZmMGZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2Rpc3RjYwpAQCAtMCwwICsxLDExOSBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBkaXN0Y2MKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRyZW1vdGVfZnMgJHN5c2xvZworIyBSZXF1aXJlZC1TdG9wOiAgICAgJHJlbW90ZV9mcyAkc3lzbG9nCisjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAxCisjIFNob3J0LURlc2NyaXB0aW9uOiBzaW1wbGUgZGlzdHJpYnV0ZWQgY29tcGlsZXIgY2xpZW50IGFuZCBzZXJ2ZXIKKyMjIyBFTkQgSU5JVCBJTkZPCisjCisjIGRpc3RjY2QgRGViaWFuIGluaXQuZCBzY3JpcHQgY29udHJpYnV0ZWQgYnkgSmFzb24gVGhvbWFzLiAgKERlYmlhbiAjMTYxMTM2KQorIworIyBza2VsZXRvbglleGFtcGxlIGZpbGUgdG8gYnVpbGQgL2V0Yy9pbml0LmQvIHNjcmlwdHMuCisjCQlUaGlzIGZpbGUgc2hvdWxkIGJlIHVzZWQgdG8gY29uc3RydWN0IHNjcmlwdHMgZm9yIC9ldGMvaW5pdC5kLgorIworIwkJV3JpdHRlbiBieSBNaXF1ZWwgdmFuIFNtb29yZW5idXJnIDxtaXF1ZWxzQGNpc3Ryb24ubmw+LgorIwkJTW9kaWZpZWQgZm9yIERlYmlhbiBHTlUvTGludXgKKyMJCWJ5IElhbiBNdXJkb2NrIDxpbXVyZG9ja0BnbnUuYWkubWl0LmVkdT4uCisjCisjIFZlcnNpb246CUAoIylza2VsZXRvbiAgMS45LjEgIDA4LUFwci0yMDAyICBtaXF1ZWxzQGNpc3Ryb24ubmwKKyMKKworUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KK0RBRU1PTj0vdXNyL2Jpbi9kaXN0Y2NkCitOQU1FPWRpc3RjYworREVTQz0iRGlzdHJpYnV0ZWQgQ29tcGlsZXIgRGFlbW9uIgorREFFTU9OX0FSR1M9Ii0tcGlkLWZpbGU9L3Zhci9ydW4vJE5BTUUucGlkIC0tZGFlbW9uIgorIyBwbGVhc2UgY2hhbmdlIHRob3NlIHZhcmlhYmxlcyBieSBvdmVycmlkaW5nIHRoZW0gaW4gL2V0Yy9kZWZhdWx0cy9kaXN0Y2MKK0FMTE9XRURORVRTPSIxMjcuMC4wLjEiCisKKyMgUmVhZHMgY29uZmlnIGZpbGUgKHdpbGwgb3ZlcnJpZGUgZGVmYXVsdHMgYWJvdmUpCitbIC1yIC9ldGMvZGVmYXVsdC9kaXN0Y2MgXSAmJiAuIC9ldGMvZGVmYXVsdC9kaXN0Y2MKKwordGVzdCAteCAkREFFTU9OIHx8IGV4aXQgMAorCitzZXQgLWUKKworIyBTb3VyY2UgZnVuY3Rpb24gbGlicmFyeS4KKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKKyMgY29uc3RydWN0IGFjY2VzcyBsaXN0CitBTExPVz0iIgorZm9yIG5ldCBpbiAkQUxMT1dFRE5FVFMKK2RvCisJQUxMT1c9IiRBTExPVyAtLWFsbG93ICRuZXQiCitkb25lCisKK3Nob3VsZF9zdGFydCgpIHsKKwlpZiBbICIkU1RBUlRESVNUQ0MiICE9ICJ0cnVlIiBdICYmIFsgIiRTVEFSVERJU1RDQyIgIT0gIllFUyIgXTsgdGhlbgorCQllY2hvICJTVEFSVERJU1RDQyBpcyBzZXQgdG8gZmFsc2UgaW4gL2V0Yy9kZWZhdWx0L2Rpc3RjYyIKKwkJZWNobyAiJERBRU1PTiBub3Qgc3RhcnRpbmciCisJCWV4aXQgMAorCWZpCisJIyB3ZSBuZWVkIHBlcm1pc3Npb24gdG8gd3JpdGUgdG8gdGhlIHBpZCBmaWxlCisJdG91Y2ggL3Zhci9ydW4vJE5BTUUucGlkCisJY2hvd24gZGlzdGNjIC92YXIvcnVuLyROQU1FLnBpZAorfQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisJc2hvdWxkX3N0YXJ0CisJZWNobyAtbiAiU3RhcnRpbmcgJERFU0M6ICROQU1FIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLXBpZGZpbGUgL3Zhci9ydW4vJE5BTUUucGlkIFwKKwktLWV4ZWMgJERBRU1PTiAtLSAkREFFTU9OX0FSR1MgJEFMTE9XIHx8CisJeworCSAgICBjb2RlPSQ/CisJICAgIGVjaG8gIiQwOiBzdGFydCBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICRjb2RlIiA+JjIKKwkgICAgZXhpdCAkY29kZQorCX0KKwllY2hvICIuIgorCTs7CisgIHN0b3ApCisJZWNobyAtbiAiU3RvcHBpbmcgJERFU0M6ICROQU1FIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tcGlkZmlsZSAvdmFyL3J1bi8kTkFNRS5waWQgXAorCQktLWV4ZWMgJERBRU1PTiB8fAorCXsKKwkgICAgY29kZT0kPworCSAgICBlY2hvICIkMDogc3RvcCBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICRjb2RlIiA+JjIKKwkgICAgZXhpdCAkY29kZQorCX0KKwlybSAtZiAvdmFyL3J1bi8kTkFNRS5waWQgPi9kZXYvbnVsbCAyPiYxCisJZWNobyAiLiIKKwk7OworICByZXN0YXJ0fGZvcmNlLXJlbG9hZCkKKwkjCisJIwlJZiB0aGUgInJlbG9hZCIgb3B0aW9uIGlzIGltcGxlbWVudGVkLCBtb3ZlIHRoZSAiZm9yY2UtcmVsb2FkIgorCSMJb3B0aW9uIHRvIHRoZSAicmVsb2FkIiBlbnRyeSBhYm92ZS4gSWYgbm90LCAiZm9yY2UtcmVsb2FkIiBpcworCSMJanVzdCB0aGUgc2FtZSBhcyAicmVzdGFydCIuCisJIworCWVjaG8gLW4gIlJlc3RhcnRpbmcgJERFU0M6ICROQU1FIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tcGlkZmlsZSAvdmFyL3J1bi8kTkFNRS5waWQgXAorCQktLWV4ZWMgJERBRU1PTgorCXNsZWVwIDEKKwlzaG91bGRfc3RhcnQKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1waWRmaWxlIC92YXIvcnVuLyROQU1FLnBpZCBcCisJCS0tZXhlYyAkREFFTU9OIC0tICREQUVNT05fQVJHUyAkQUxMT1cgfHwKKwl7CisJICAgIGNvZGU9JD8KKwkgICAgcm0gLWYgL3Zhci9ydW4vJE5BTUUucGlkID4vZGV2L251bGwgMj4mMQorCSAgICBlY2hvICIkMDogcmVzdGFydCBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICRjb2RlIiA+JjIKKwkgICAgZXhpdCAkY29kZQorCX0KKwllY2hvICIuIgorCTs7CisKKyAgIHN0YXR1cykKKwlzdGF0dXMgJERBRU1PTgorCWV4aXQgJD8KKwk7OworICAqKQorCU49L2V0Yy9pbml0LmQvJE5BTUUKKwllY2hvICJVc2FnZTogJE4ge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR8c3RhdHVzfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2Rpc3RjYy5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2Rpc3RjYy5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNTNkZGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvZGlzdGNjLnNlcnZpY2UKQEAgLTAsMCArMSwxMSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1EaXN0Y2NkIEEgRGlzdHJpYnV0ZWQgQ29tcGlsYXRpb24gU2VydmVyCitBZnRlcj1uZXR3b3JrLnRhcmdldAorCitbU2VydmljZV0KK1VzZXI9ZGlzdGNjCitFbnZpcm9ubWVudEZpbGU9LS9ldGMvZGVmYXVsdC9kaXN0Y2MKK0V4ZWNTdGFydD1AQklORElSQC9kaXN0Y2NkIC0tdmVyYm9zZSAtLW5vLWRldGFjaCAtLWRhZW1vbiAkT1BUSU9OUworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvZGlzdGNjbW9uLWdub21lLmRlc2t0b3AgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvZGlzdGNjbW9uLWdub21lLmRlc2t0b3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I1ZDg1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kaXN0Y2Ntb24tZ25vbWUuZGVza3RvcApAQCAtMCwwICsxLDEyIEBACitbRGVza3RvcCBFbnRyeV0KK1ZlcnNpb249MC45LjQKK0V4ZWM9ZGlzdGNjbW9uLWdub21lCitOYW1lPWRpc3RjYyBtb25pdG9yCitHZW5lcmljTmFtZT1EaXN0cmlidXRlZCBDb21waWxlIE1vbml0b3IKK0NvbW1lbnQ9R3JhcGhpY2FsIHZpZXcgb2YgZGlzdHJpYnV0ZWQgY29tcGlsZSB0YXNrcworSWNvbj1kaXN0Y2Ntb24tZ25vbWUtaWNvbgorVHJ5RXhlYz1kaXN0Y2Ntb24tZ25vbWUKK1Rlcm1pbmFsPWZhbHNlCitUeXBlPUFwcGxpY2F0aW9uCitDYXRlZ29yaWVzPUdOT01FO0RldmVsb3BtZW50OworU3RhcnR1cE5vdGlmeT10cnVlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvc2VwYXJhdGVidWlsZGRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9zZXBhcmF0ZWJ1aWxkZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZTNlNDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvc2VwYXJhdGVidWlsZGRpci5wYXRjaApAQCAtMCwwICsxLDIxIEBACitXaGVuIGJ1aWxkaW5nIHdpdGggYSBzZXBhcmF0ZSBidWlsZCBkaXJlY3RvcnksIG1ha2UgaW5zdGFsbCBmYWlscywKK3VuYWJsZSB0byBmaW5kIHRoZSBnbm9tZV9kYXRhIGZpbGVzLiBUaGlzIHBhdGNoIGNvcnJlY3RzIHRoZQorcGF0Y2ggYW5kIGVuc3VyZXMgdGhlIGJ1aWxkIHdvcmtzIGluIHRoaXMgY2FzZS4KKworUlAgMjAxMy8zLzgKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBkaXN0Y2MtMy4xL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGlzdGNjLTMuMS5vcmlnL01ha2VmaWxlLmluCTIwMDgtMTItMDIgMjE6NTA6MzEuMDAwMDAwMDAwICswMDAwCisrKysgZGlzdGNjLTMuMS9NYWtlZmlsZS5pbgkyMDEzLTAzLTA4IDEwOjQ5OjI0LjIyNDQwMDkzNyArMDAwMAorQEAgLTEwODgsNyArMTA4OCw3IEBACisgaW5zdGFsbC1nbm9tZS1kYXRhOiAkKGdub21lX2RhdGEpCisgCSQobWtpbnN0YWxsZGlycykgIiQoREVTVERJUikkKHBrZ2RhdGFkaXIpIgorIAlmb3IgcCBpbiAkKGdub21lX2RhdGEpOyBkbwkJCQlcCistCSQoSU5TVEFMTF9EQVRBKSAiJCRwIiAiJChERVNURElSKSQocGtnZGF0YWRpcikiIHx8IGV4aXQgMTsgXAorKwkkKElOU1RBTExfREFUQSkgIiQoc3JjZGlyKS8kJHAiICIkKERFU1RESVIpJChwa2dkYXRhZGlyKSIgfHwgZXhpdCAxOyBcCisgCWRvbmUKKyAKKyBpbnN0YWxsLWNvbmY6ICQoY29uZl9maWxlcykgJChkZWZhdWx0X2ZpbGVzKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG1pZGVjb2RlL2RtaWRlY29kZV8yLjEyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG1pZGVjb2RlL2RtaWRlY29kZV8yLjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMTY1NTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kbWlkZWNvZGUvZG1pZGVjb2RlXzIuMTIuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJETUkgKERlc2t0b3AgTWFuYWdlbWVudCBJbnRlcmZhY2UpIHRhYmxlIHJlbGF0ZWQgdXRpbGl0aWVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ub25nbnUub3JnL2RtaWRlY29kZS8iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MzkzYTVjYTQ0NWY2OTY1ODczZWNhMDI1OWExN2Y4MzMiCisKK1NSQ19VUkkgPSAiJHtTQVZBTk5BSF9OT05HTlVfTUlSUk9SfS9kbWlkZWNvZGUvJHtCUH0udGFyLmJ6MiIKKworQ09NUEFUSUJMRV9IT1NUID0gIihpLjg2fHg4Nl82NHxhYXJjaDY0fGFybXxwb3dlcnBjfHBvd2VycGM2NCkuKi1saW51eCIKKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIERFU1RESVI9IiR7RH0iIGluc3RhbGwKK30KKworZG9fdW5wYWNrX2V4dHJhKCkgeworCXNlZCAtaSAtZSAnL15wcmVmaXgvczovdXNyL2xvY2FsOiR7ZXhlY19wcmVmaXh9OicgJHtTfS9NYWtlZmlsZQorfQorYWRkdGFzayB1bnBhY2tfZXh0cmEgYWZ0ZXIgZG9fdW5wYWNrIGJlZm9yZSBkb19wYXRjaAorCitTUkNfVVJJW21kNXN1bV0gPSAiYTQwNmYzY2JiMjc3MzY0OTE2OTg2OTdiZWVkZGI3ODEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTEzZmYzMDU1ZDU2M2E2MmE0MjA3ODliOGVlMzNiMDM4ZGU5YWZhMThlYTYxMjU0NzYwZGRmOGFiODdhNTA4OCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMvZG9jYm9vay1kc3NzbC1zdHlsZXNoZWV0cy1uYXRpdmVfMS43OS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMvZG9jYm9vay1kc3NzbC1zdHlsZXNoZWV0cy1uYXRpdmVfMS43OS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjFiNDhmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay1kc3NzbC1zdHlsZXNoZWV0cy9kb2Nib29rLWRzc3NsLXN0eWxlc2hlZXRzLW5hdGl2ZV8xLjc5LmJiCkBAIC0wLDAgKzEsNjggQEAKK1NVTU1BUlkgPSAiRFNTU0wgc3R5bGVzaGVldHMgdXNlZCB0byB0cmFuc2Zvcm0gU0dNTCBhbmQgWE1MIERvY0Jvb2sgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQiCisjIFNpbXBsZSBwZXJzbWlzc2l2ZQorTElDRU5TRSA9ICJEU1NTTCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9NDE7ZW5kbGluZT03NDttZDU9ODc1Mzg1MTU5YjJlZTc2ZWNmNTYxMzZhZTdmNTQyZDYiCisKK0RFUEVORFMgPSAic2dtbC1jb21tb24tbmF0aXZlIgorCitQUiA9ICJyNCIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vZG9jYm9vay9kb2Nib29rLWRzc3NsLSR7UFZ9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiYzE5MmQyMzI2NmI5YTY2NGNhMGFiYTRhNzc5NGM3YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyZjMyOWUxMjBiZWU5ZWY0MmZiZGQ3NGRkZDYwZTA1ZTQ5Nzg2YzVhNzk1M2EwZmY0YzY4MGFlNmJkZjBlMmJjIgorCitTID0gIiR7V09SS0RJUn0vZG9jYm9vay1kc3NzbC0ke1BWfSIKKworaW5oZXJpdCBuYXRpdmUKKworU1NUQVRFUE9TVElOU1RGVU5DUyArPSAiZG9jYm9va19kc3NzbF9zdHlsZXNoZWV0c19zc3RhdGVfcG9zdGluc3QiCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImRvY2Jvb2tfZHNzc2xfc3lzcm9vdF9wcmVwcm9jZXNzIgorQ0xFQU5GVU5DUyArPSAiZG9jYm9va19kc3NzbF9zdHlsZXNoZWV0c19zc3RhdGVfY2xlYW4iCisKKworZG9faW5zdGFsbCAoKSB7CisJIyBSZWZlciB0byBodHRwOi8vd3d3LmxpbnV4ZnJvbXNjcmF0Y2gub3JnL2JsZnMvdmlldy9zdGFibGUvcHN0L2RvY2Jvb2stZHNzc2wuaHRtbAorCSMgZm9yIGRldGFpbHMuCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1IGJpbi9jb2xsYXRlaW5kZXgucGwgJHtEfSR7YmluZGlyfQorCisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svZHNzc2wtc3R5bGVzaGVldHMtJHtQVn0KKwlpbnN0YWxsIC1tIDA2NDQgY2F0YWxvZyAke0R9JHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svZHNzc2wtc3R5bGVzaGVldHMtJHtQVn0KKwljcCAtdiAtUiAqICR7RH0ke2RhdGFkaXJ9L3NnbWwvZG9jYm9vay9kc3NzbC1zdHlsZXNoZWV0cy0ke1BWfQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9zZ21sCisJZWNobyAiQ0FUQUxPRyAke2RhdGFkaXJ9L3NnbWwvZG9jYm9vay9kc3NzbC1zdHlsZXNoZWV0cy0ke1BWfS9jYXRhbG9nIiA+IFwKKwkJICR7RH0ke3N5c2NvbmZkaXJ9L3NnbWwvZHNzc2wtZG9jYm9vay1zdHlsZXNoZWV0cy5jYXQKKwllY2hvICJDQVRBTE9HICR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL2Rzc3NsLXN0eWxlc2hlZXRzLSR7UFZ9L2NvbW1vbi9jYXRhbG9nIiA+PiBcCisJCSR7RH0ke3N5c2NvbmZkaXJ9L3NnbWwvZHNzc2wtZG9jYm9vay1zdHlsZXNoZWV0cy5jYXQKK30KKworZG9jYm9va19kc3NzbF9zdHlsZXNoZWV0c19zc3RhdGVfcG9zdGluc3QgKCkgeworCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290IiAtbyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF0KKwl0aGVuCisJCSMgRW5zdXJlIHRoYXQgdGhlIGNhdGFsb2cgZmlsZSBzZ21sLWRvY2Jvb2suY2F0IGlzIHByb3Blcmx5CisJCSMgdXBkYXRlZCB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZCBmcm9tIHNzdGF0ZSBjYWNoZS4KKwkJJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9pbnN0YWxsLWNhdGFsb2ctZG9jYm9vay1kc3NzbCBcCisJCQktLWFkZCAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmJhayBcCisJCQkke3N5c2NvbmZkaXJ9L3NnbWwvZHNzc2wtZG9jYm9vay1zdHlsZXNoZWV0cy5jYXQKKwkJJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9pbnN0YWxsLWNhdGFsb2ctZG9jYm9vay1kc3NzbCBcCisJCQktLWFkZCAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCBcCisJCQkke3N5c2NvbmZkaXJ9L3NnbWwvZHNzc2wtZG9jYm9vay1zdHlsZXNoZWV0cy5jYXQKKwlmaQorfQorCitkb2Nib29rX2Rzc3NsX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisgICAgaW5zdGFsbCAtZCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworICAgIGluc3RhbGwgLW0gNzU1ICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9pbnN0YWxsLWNhdGFsb2cgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9pbnN0YWxsLWNhdGFsb2ctZG9jYm9vay1kc3NzbAorfQorCitkb2Nib29rX2Rzc3NsX3N0eWxlc2hlZXRzX3NzdGF0ZV9jbGVhbiAoKSB7CisJIyBFbnN1cmUgdGhhdCB0aGUgY2F0YWxvZyBmaWxlIHNnbWwtZG9jYm9vay5jYXQgaXMgcHJvcGVybHkKKwkjIHVwZGF0ZWQgd2hlbiB0aGUgcGFja2FnZSBpcyByZW1vdmVkIGZyb20gc3N0YXRlIGNhY2hlLgorCWZpbGVzPSIke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmJhayAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCIKKwlmb3IgZiBpbiAkZmlsZXM7IGRvCisJCVsgISAtZiAkZiBdIHx8IHNlZCAtaSAnL1wvc2dtbFwvZHNzc2wtZG9jYm9vay1zdHlsZXNoZWV0cy5jYXQvZCcgJGYKKwlkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtMy4xLW5hdGl2ZV8zLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtMy4xLW5hdGl2ZV8zLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdkZjRmOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZG9jYm9vay1zZ21sLWR0ZC0zLjEtbmF0aXZlXzMuMS5iYgpAQCAtMCwwICsxLDIzIEBACityZXF1aXJlIGRvY2Jvb2stc2dtbC1kdGQtbmF0aXZlLmluYworCitMSUNFTlNFID0gIk9BU0lTIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS1PQVNJUzttZDU9YzYwODk4NWRkNWY3ZjIxNWU2NjllNzYzOWEwYjFkMmUiCisKK0RURF9WRVJTSU9OID0gIjMuMSIKKworUFIgPSAiJHtJTkNfUFJ9LjAiCisKKyMgTm90ZTogdGhlIHVwc3RyZWFtIHNvdXJjZXMgYXJlIG5vdCBkaXN0cmlidXRlZCB3aXRoIGEgbGljZW5zZSBmaWxlLgorIyBMSUNFTlNFLU9BU0lTIGlzIGluY2x1ZGVkIGFzIGEgInBhdGNoIiB0byB3b3JrYXJvdW5kIHRoaXMuIFdoZW4KKyMgdXBncmFkaW5nIHRoaXMgcmVjaXBlLCBwbGVhc2UgdmVyaWZ5IHdoZXRoZXIgdGhpcyBpcyBzdGlsbCBuZWVkZWQuCitTUkNfVVJJID0gImh0dHA6Ly93d3cuZG9jYm9vay5vcmcvc2dtbC8zLjEvZG9jYmszMS56aXAgXAorICAgICAgICAgICBmaWxlOi8vTElDRU5TRS1PQVNJUyIKKworU1JDX1VSSVttZDVzdW1dID0gIjQzMjc0OWMwYzgwNmRiYWU4MWM4YmNiNzBkYTNiNWQzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjIwMjYxZDI3NzFiOWEwNTJhYmZhM2Q4ZmFiMWFhNjJiZTA1NzkxYTAxMDI4MWM1NjZmOTA3M2JmMGU2NDQ1MzgiCisKK2RvX2NvbXBpbGUoKSB7CisJIyBSZWZlciB0byBodHRwOi8vd3d3LmxpbnV4ZnJvbXNjcmF0Y2gub3JnL2JsZnMvdmlldy9zdGFibGUvcHN0L3NnbWwtZHRkLTMuaHRtbAorCSMgZm9yIGRldGFpbHMuCisJc2VkIC1pIC1lICcvSVNPIDg4NzkvZCcgLWUgJ3N8RFREREVDTCAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFYzLjEvL0VOInxTR01MREVDTHxnJyBkb2Nib29rLmNhdAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay1zZ21sLWR0ZC9kb2Nib29rLXNnbWwtZHRkLTQuMS1uYXRpdmVfNC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay1zZ21sLWR0ZC9kb2Nib29rLXNnbWwtZHRkLTQuMS1uYXRpdmVfNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YzkzOTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtNC4xLW5hdGl2ZV80LjEuYmIKQEAgLTAsMCArMSwyMyBAQAorcmVxdWlyZSBkb2Nib29rLXNnbWwtZHRkLW5hdGl2ZS5pbmMKKworTElDRU5TRSA9ICJPQVNJUyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UtT0FTSVM7bWQ1PWM2MDg5ODVkZDVmN2YyMTVlNjY5ZTc2MzlhMGIxZDJlIgorCitEVERfVkVSU0lPTiA9ICI0LjEiCisKK1BSID0gIiR7SU5DX1BSfS4wIgorCisjIE5vdGU6IHRoZSB1cHN0cmVhbSBzb3VyY2VzIGFyZSBub3QgZGlzdHJpYnV0ZWQgd2l0aCBhIGxpY2Vuc2UgZmlsZS4KKyMgTElDRU5TRS1PQVNJUyBpcyBpbmNsdWRlZCBhcyBhICJwYXRjaCIgdG8gd29ya2Fyb3VuZCB0aGlzLiBXaGVuCisjIHVwZ3JhZGluZyB0aGlzIHJlY2lwZSwgcGxlYXNlIHZlcmlmeSB3aGV0aGVyIHRoaXMgaXMgc3RpbGwgbmVlZGVkLgorU1JDX1VSSSA9ICJodHRwOi8vZG9jYm9vay5vcmcvc2dtbC80LjEvZG9jYms0MS56aXAgXAorICAgICAgICAgICBmaWxlOi8vTElDRU5TRS1PQVNJUyIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ4OWY2ZmYyYTIxNzNlYjFlMTQyMTZjMTA1MzNlZGUyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImRlYWFmY2YwYTM2Nzc2OTJlN2FkNDQxMmMwZTQxYzFkYjNlOWRhNmNkY2RiM2RkMzJiMmNjMWY5Yzk3ZDYzMTEiCisKK2RvX2NvbXBpbGUoKSB7CisJIyBSZWZlciB0byBodHRwOi8vd3d3LmxpbnV4ZnJvbXNjcmF0Y2gub3JnL2JsZnMvdmlldy9zdGFibGUvcHN0L3NnbWwtZHRkLmh0bWwKKwkjIGZvciBkZXRhaWxzLgorCXNlZCAtaSAtZSAnL0lTTyA4ODc5L2QnIC1lICcvZ21sL2QnIGRvY2Jvb2suY2F0Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtNC41LW5hdGl2ZS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZG9jYm9vay1zZ21sLWR0ZC00LjUtbmF0aXZlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNzIzYzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtNC41LW5hdGl2ZS5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIGRvY2Jvb2stc2dtbC1kdGQtbmF0aXZlLmluYworCitMSUNFTlNFID0gIk9BU0lTIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS1PQVNJUzttZDU9YzYwODk4NWRkNWY3ZjIxNWU2NjllNzYzOWEwYjFkMmUiCisKK0RURF9WRVJTSU9OID0gIjQuNSIKKworUFIgPSAiJHtJTkNfUFJ9LjAiCitQViA9ICI0LjUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwN2M1ODFmNGJiY2JhNmQzYWFjODUzNjBhMTlmOTVmNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4MDQzZTUxNGU4MGM2YzE5Y2IxNDZiNWQzNzkzN2QxMzA1YmYzYWJmOWIwMDk3YzM2ZGY3ZjcwZjYxMWNkZjQzIgorCitkb19jb21waWxlKCkgeworCSMgUmVmZXIgdG8gaHR0cDovL3d3dy5saW51eGZyb21zY3JhdGNoLm9yZy9ibGZzL3ZpZXcvc3RhYmxlL3BzdC9zZ21sLWR0ZC5odG1sCisJIyBmb3IgZGV0YWlscy4KKwlzZWQgLWkgLWUgJy9JU08gODg3OS9kJyAtZScvZ21sL2QnIGRvY2Jvb2suY2F0Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtbmF0aXZlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZG9jYm9vay1zZ21sLWR0ZC1uYXRpdmUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNTA5ODcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtbmF0aXZlLmluYwpAQCAtMCwwICsxLDcwIEBACisjIFRoZSBEVERzIG9mIHRoZSB2YXJpb3VzIHZlcnNpb25zIGhhdmUgdG8gYmUgaW5zdGFsbGVkIGluIHBhcmFsbGVsIGFuZAorIyBzaG91bGQgbm90IHJlcGxhY2UgZWFjaCBvdGhlci4gVGhlIGluc3RhbGxhdGlvbiBzdGVwIGlzIGNvbW1vbiBmb3IKKyMgYWxsIHZlcnNpb25zIGFuZCBqdXN0IGRpZmZlcnMgaW4gJHtEVERfVkVSU0lPTn0gd2hpY2ggaXMgc2V0IGluIGVhY2gKKyMgdmVyc2lvbiByZWNpcGUuCisjCisjIFRoZSBEVERzIGRvIGhhdmUgc29tZSBxdWlya3MgKHNlZSBMRlMgZG9jdW1lbnRhdGlvbikuCitTVU1NQVJZID0gIkRvY3VtZW50IHR5cGUgZGVmaW5pdGlvbnMgZm9yIHZlcmlmaWNhdGlvbiBvZiBTR01MIGRhdGEgZmlsZXMiCitERVNDUklQVElPTiA9ICJEb2N1bWVudCB0eXBlIGRlZmluaXRpb25zIGZvciB2ZXJpZmljYXRpb24gb2YgU0dNTCBkYXRhIFwKK2ZpbGVzIGFnYWluc3QgdGhlIERvY0Jvb2sgcnVsZSBzZXQiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmRvY2Jvb2sub3JnL3NnbWwvIgorCitERVBFTkRTID0gInNnbWwtY29tbW9uLW5hdGl2ZSIKKworIyBOb3RlOiB0aGUgdXBzdHJlYW0gc291cmNlcyBhcmUgbm90IGRpc3RyaWJ1dGVkIHdpdGggYSBsaWNlbnNlIGZpbGUuCisjIExJQ0VOU0UtT0FTSVMgaXMgaW5jbHVkZWQgYXMgYSAicGF0Y2giIHRvIHdvcmthcm91bmQgdGhpcy4gV2hlbgorIyB1cGdyYWRpbmcgdGhpcyByZWNpcGUsIHBsZWFzZSB2ZXJpZnkgd2hldGhlciB0aGlzIGlzIHN0aWxsIG5lZWRlZC4KK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5kb2Nib29rLm9yZy9zZ21sLyR7RFREX1ZFUlNJT059L2RvY2Jvb2stJHtEVERfVkVSU0lPTn0uemlwIFwKKyAgICAgICAgICAgZmlsZTovL0xJQ0VOU0UtT0FTSVMiCisKKyMgVGhlIC56aXAgZmlsZSBleHRyYWN0cyB0byB0aGUgY3VycmVudCBkaXIKK1MgPSAiJHtXT1JLRElSfSIKKworSU5DX1BSID0gInIzIgorCitTU1RBVEVQT1NUSU5TVEZVTkNTICs9ICJkb2Nib29rX3NnbWxfZHRkX3NzdGF0ZV9wb3N0aW5zdCIKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiZG9jYm9va19zZ21sX2R0ZF9zeXNyb290X3ByZXByb2Nlc3MiCisKK2luaGVyaXQgbmF0aXZlCisKK2RvX2luc3RhbGwgKCkgeworCSMgUmVmZXIgdG8gaHR0cDovL3d3dy5saW51eGZyb21zY3JhdGNoLm9yZy9ibGZzL3ZpZXcvc3RhYmxlL3BzdC9zZ21sLWR0ZC5odG1sCisJIyBmb3IgZGV0YWlscy4KKwlpbnN0YWxsIC1kIC1tIDc1NSAke0R9JHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svc2dtbC1kdGQtJHtEVERfVkVSU0lPTn0KKwlpbnN0YWxsIGRvY2Jvb2suY2F0ICR7RH0ke2RhdGFkaXJ9L3NnbWwvZG9jYm9vay9zZ21sLWR0ZC0ke0RURF9WRVJTSU9OfS9jYXRhbG9nCisJY3AgLVBwUnIgKi5kdGQgKi5tb2QgKi5kY2wgJHtEfSR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL3NnbWwtZHRkLSR7RFREX1ZFUlNJT059CisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3NnbWwKKwllY2hvICJDQVRBTE9HICR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL3NnbWwtZHRkLSR7RFREX1ZFUlNJT059L2NhdGFsb2ciID4gXAorCQkke0R9JHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay1kdGQtJHtEVERfVkVSU0lPTn0uY2F0Cit9CisKK2RvY2Jvb2tfc2dtbF9kdGRfc3N0YXRlX3Bvc3RpbnN0ICgpIHsKKwlpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgLW8gIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCisJdGhlbgorCQkjIEVuc3VyZSB0aGF0IHRoZSBjYXRhbG9nIGZpbGUgc2dtbC1kb2Nib29rLmNhdCBpcyBwcm9wZXJseQorCQkjIHVwZGF0ZWQgd2hlbiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQgZnJvbSBzc3RhdGUgY2FjaGUuCisJCSR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vaW5zdGFsbC1jYXRhbG9nLWRvY2Jvb2stc2dtbC1kdGQtJHtEVERfVkVSU0lPTn0gXAorCQkJLS1hZGQgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5iYWsgXAorCQkJJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay1kdGQtJHtEVERfVkVSU0lPTn0uY2F0CisJCSR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vaW5zdGFsbC1jYXRhbG9nLWRvY2Jvb2stc2dtbC1kdGQtJHtEVERfVkVSU0lPTn0gXAorCQkJLS1hZGQgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQgXAorCQkJJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay1kdGQtJHtEVERfVkVSU0lPTn0uY2F0CisJZmkKK30KKworZG9jYm9va19zZ21sX2R0ZF9zeXNyb290X3ByZXByb2Nlc3MgKCkgeworICAgIGluc3RhbGwgLWQgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS8KKyAgICBpbnN0YWxsIC1tIDc1NSAke1NUQUdJTkdfQklORElSX05BVElWRX0vaW5zdGFsbC1jYXRhbG9nICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vaW5zdGFsbC1jYXRhbG9nLWRvY2Jvb2stc2dtbC1kdGQtJHtEVERfVkVSU0lPTn0KK30KKworQ0xFQU5GVU5DUyArPSAiZG9jYm9va19zZ21sX2R0ZF9zc3RhdGVfY2xlYW4iCisKK2RvY2Jvb2tfc2dtbF9kdGRfc3N0YXRlX2NsZWFuICgpIHsKKwkjIEVuc3VyZSB0aGF0IHRoZSBjYXRhbG9nIGZpbGUgc2dtbC1kb2Nib29rLmNhdCBpcyBwcm9wZXJseQorCSMgdXBkYXRlZCB3aGVuIHRoZSBwYWNrYWdlIGlzIHJlbW92ZWQgZnJvbSBzc3RhdGUgY2FjaGUuCisJZmlsZXM9IiR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suYmFrICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IgorCWZvciBmIGluICRmaWxlczsgZG8KKwkJWyAhIC1mICRmIF0gfHwgc2VkIC1pICcvXC9zZ21sXC9zZ21sLWRvY2Jvb2stZHRkLSR7RFREX1ZFUlNJT059LmNhdC9kJyAkZgorCWRvbmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZmlsZXMvTElDRU5TRS1PQVNJUyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZmlsZXMvTElDRU5TRS1PQVNJUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGE3ZjViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay1zZ21sLWR0ZC9maWxlcy9MSUNFTlNFLU9BU0lTCkBAIC0wLDAgKzEsMTYgQEAKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY0Jvb2sgWE1MIERURAorYW5kIGl0cyBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlCitpcyBoZXJlYnkgZ3JhbnRlZCBpbiBwZXJwZXR1aXR5LCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYXBwZWFyIGluIGFsbCBjb3BpZXMuICBUaGUgY29weXJpZ2h0Citob2xkZXJzIG1ha2Ugbm8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoZSBEVEQgZm9yCithbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzZWQgb3IgaW1wbGllZAord2FycmFudHkuCisKK0lmIHlvdSBtb2RpZnkgdGhlIERvY0Jvb2sgRFREIGluIGFueSB3YXksIGV4Y2VwdCBmb3IgZGVjbGFyaW5nIGFuZAorcmVmZXJlbmNpbmcgYWRkaXRpb25hbCBzZXRzIG9mIGdlbmVyYWwgZW50aXRpZXMgYW5kIGRlY2xhcmluZworYWRkaXRpb25hbCBub3RhdGlvbnMsIGxhYmVsIHlvdXIgRFREIGFzIGEgdmFyaWFudCBvZiBEb2NCb29rLiAgU2VlCit0aGUgbWFpbnRlbmFuY2UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworUGxlYXNlIGRpcmVjdCBhbGwgcXVlc3Rpb25zLCBidWcgcmVwb3J0cywgb3Igc3VnZ2VzdGlvbnMgZm9yIAorY2hhbmdlcyB0byB0aGUgZG9jYm9va0BsaXN0cy5vYXNpcy1vcGVuLm9yZyBtYWlsaW5nIGxpc3QuIEZvciBtb3JlCitpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXV0aWxzL2RvY2Jvb2stdXRpbHMtMC42LjE0L3JlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay11dGlscy9kb2Nib29rLXV0aWxzLTAuNi4xNC9yZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjA3OWQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay11dGlscy9kb2Nib29rLXV0aWxzLTAuNi4xNC9yZS5wYXRjaApAQCAtMCwwICsxLDI5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworRml4IHJ1bnRpbWUgZXJyb3Igb2NjdXJyZWQgZS5nLiB3aXRoIGRvY2Jvb2stdG8tbWFuIGNhbGxzOgorCisgIGdyZXA6IGNoYXJhY3RlciBjbGFzcyBzeW50YXggaXMgW1s6c3BhY2U6XV0sIG5vdCBbOnNwYWNlOl0KKyAgZ3JlcDogY2hhcmFjdGVyIGNsYXNzIHN5bnRheCBpcyBbWzpzcGFjZTpdXSwgbm90IFs6c3BhY2U6XQorICBqdzogVGhlcmUgaXMgbm8gZnJvbnRlbmQgY2FsbGVkICIvZG9jYm9vay91dGlscy0wLjYuMTQvZnJvbnRlbmRzL2RvY2Jvb2siLgorCitTZWUgYWxzbzoKKworICAgPGh0dHBzOi8vcWEubWFuZHJpdmEuY29tL3Nob3dfYnVnLmNnaT9pZD02MTEyNz4KKworU2lnbmVkLW9mZi1ieTogU3RlZmZlbiBTbGVkeiA8c2xlZHpAZHJlc2VhcmNoLWZlLmRlPgorCitkaWZmIC1OdXJkIGRvY2Jvb2stdXRpbHMtMC42LjE0LW9yaWcvYmluL2p3LmluIGRvY2Jvb2stdXRpbHMtMC42LjE0L2Jpbi9qdy5pbgorLS0tIGRvY2Jvb2stdXRpbHMtMC42LjE0LW9yaWcvYmluL2p3LmluCTIwMTItMDMtMjkgMDc6NTA6MDAuNzg5NTY0ODI2ICswMjAwCisrKysgZG9jYm9vay11dGlscy0wLjYuMTQvYmluL2p3LmluCTIwMTItMDMtMjkgMDc6NTI6MTAuMzcxMzAyOTY3ICswMjAwCitAQCAtODAsOSArODAsOSBAQAorIFNHTUxfQ0FUQUxPR1NfRElSPSIvZXRjL3NnbWwiCisgaWYgWyAtZiAiJFNHTUxfQ09ORiIgXQorIHRoZW4KKy0gIFJFPSdeWzpzcGFjZTpdKlNHTUxfQkFTRV9ESVJbOnNwYWNlOl0qPVs6c3BhY2U6XSonCisrICBSRT0nXltbOnNwYWNlOl1dKlNHTUxfQkFTRV9ESVJbWzpzcGFjZTpdXSo9W1s6c3BhY2U6XV0qJworICAgU0dNTF9CQVNFX0RJUj1gZ3JlcCAkUkUgJFNHTUxfQ09ORiB8IHNlZCAicy8kUkUvLyJgCistICBSRT0nXls6c3BhY2U6XSpTR01MX0NBVEFMT0dTX0RJUls6c3BhY2U6XSo9WzpzcGFjZTpdKicKKysgIFJFPSdeW1s6c3BhY2U6XV0qU0dNTF9DQVRBTE9HU19ESVJbWzpzcGFjZTpdXSo9W1s6c3BhY2U6XV0qJworICAgU0dNTF9DQVRBTE9HU19ESVI9YGdyZXAgJFJFICRTR01MX0NPTkYgfCBzZWQgInMvJFJFLy8iYAorIGZpCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXV0aWxzL2RvY2Jvb2stdXRpbHMtbmF0aXZlXzAuNi4xNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stdXRpbHMvZG9jYm9vay11dGlscy1uYXRpdmVfMC42LjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYTVmM2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXV0aWxzL2RvY2Jvb2stdXRpbHMtbmF0aXZlXzAuNi4xNC5iYgpAQCAtMCwwICsxLDYzIEBACitTVU1NQVJZID0gIlV0aWxpdGllcyBmb3IgZm9ybWF0dGluZyBhbmQgbWFuaXB1bGF0aW5nIERvY0Jvb2sgZG9jdW1lbnRzIgorREVTQ1JJUFRJT04gPSAiQSBjb2xsZWN0aW9uIG9mIGFsbCB0aGUgZnJlZSBzb2Z0d2FyZSB0b29scyB5b3UgbmVlZCB0byBcCit3b3JrIG9uIGFuZCBmb3JtYXQgRG9jQm9vayBkb2N1bWVudHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9kb2Nib29rLXRvb2xzLyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKK0RFUEVORFMgPSAib3BlbmphZGUtbmF0aXZlIHNnbWxzcGwtbmF0aXZlIGRvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMtbmF0aXZlIGRvY2Jvb2stc2dtbC1kdGQtMy4xLW5hdGl2ZSIKKworUFIgPSAicjMiCisKK1NSQ19VUkkgPSAiXAorCWZ0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9wdWIvZG9jYm9vay10b29scy9uZXctdHJpYWxzL1NPVVJDRVMvZG9jYm9vay11dGlscy0ke1BWfS50YXIuZ3ogXAorCWZpbGU6Ly9yZS5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2YjQxYjE4YzM2NWMwMWYyMjViYzQxN2NmNjMyZDgxYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0OGZhYWI4ZWU4YTc2MDVjOTM0MmZiN2I5MDZlMDgxNWUzY2VlODRhNDg5MTgyYWYzOGU4ZjdjMGRmMmU5MmU5IgorCitpbmhlcml0IGF1dG90b29scyBuYXRpdmUKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJIyBGaXggaGFyZC1jb2RlZCByZWZlcmVuY2VzIHRvIC9ldGMvc2dtbAorCWlmIFsgISAtZSAke1N9Ly5zZWRfZG9uZSBdOyB0aGVuCisJCXNlZCAtaSAtZSAic3wvZXRjL3NnbWx8JHtzeXNjb25mZGlyfS9zZ21sfGciICR7U30vYmluL2p3LmluCisJCXNlZCAtaSAtZSAic3wvZXRjL3NnbWx8JHtzeXNjb25mZGlyfS9zZ21sfGciICR7U30vZG9jL21hbi9NYWtlZmlsZS5hbQorCQlzZWQgLWkgLWUgInN8L2V0Yy9zZ21sfCR7c3lzY29uZmRpcn0vc2dtbHxnIiAke1N9L2RvYy9IVE1ML01ha2VmaWxlLmFtCisKKwkJIyBQb2ludCBqdyB0byB0aGUgbmF0aXZlIHN5c3Jvb3QgY2F0YWxvZworCQlzZWQgLWkgLWUgJ3N8XlNHTUxfRVhUUkFfQ0FUQUxPR1M9IiJ8U0dNTF9FWFRSQV9DQVRBTE9HUz0iOiR7c3lzY29uZmRpcn0vc2dtbC9jYXRhbG9nInxnJyAke1N9L2Jpbi9qdy5pbgorCQl0b3VjaCAke1N9Ly5zZWRfZG9uZQorCWZpCit9Citkb191bnBhY2tbY2xlYW5kaXJzXSArPSAiJHtTfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwkjIEluc3RhbGwgdGhlIGJpbmFyaWVzIGFuZCBhIGJ1bmNoIG9mIG90aGVyIGNvbW1vbmx5IHVzZWQgbmFtZXMgZm9yIHRoZW0uCisJZm9yIGRvY3R5cGUgaW4gaHRtbCBwcyBkdmkgbWFuIHBkZiBydGYgdGV4IHRleGkgdHh0CisJZG8KKwkJaW5zdGFsbCAtbSAwNzU1ICR7U30vYmluL2RvY2Jvb2syJGRvY3R5cGUgJHtEfSR7YmluZGlyfS8KKwkJbG4gLXNmIGRvY2Jvb2syeC0kZG9jdHlwZSAke0R9JHtiaW5kaXJ9L2RiMiRkb2N0eXBlCisJCWxuIC1zZiBkb2Nib29rMiRkb2N0eXBlICR7RH0ke2JpbmRpcn0vZGIyJGRvY3R5cGUKKwkJbG4gLXNmIGRvY2Jvb2syJGRvY3R5cGUgJHtEfSR7YmluZGlyfS9kb2Nib29rLXRvLSRkb2N0eXBlCisJZG9uZQorCisJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vYmluL2p3ICR7RH0ke2JpbmRpcn0vCisJZm9yIGkgaW4gYmFja2VuZHMvZHZpIGJhY2tlbmRzL2h0bWwgXAorCQliYWNrZW5kcy9wZGYgYmFja2VuZHMvcHMgYmFja2VuZHMvcnRmIGJhY2tlbmRzL3RleCBcCisJCWJhY2tlbmRzL3R4dCBcCisJCWhlbHBlcnMvZG9jYm9vazJtYW4tc3BlYy5wbCBoZWxwZXJzL2RvY2Jvb2sydGV4aS1zcGVjLnBsIFwKKwkJZG9jYm9vay11dGlscy5kc2wKKwlkbworCQlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L3NnbWwvZG9jYm9vay91dGlscy0ke1BWfS9gZGlybmFtZSAkaWAKKwkJaW5zdGFsbCAke1N9LyRpICR7RH0ke2RhdGFkaXJ9L3NnbWwvZG9jYm9vay91dGlscy0ke1BWfS8kaQorCWRvbmUKKwlmb3IgaSBpbiBiYWNrZW5kcy9tYW4gYmFja2VuZHMvdGV4aSBmcm9udGVuZHMvZG9jYm9vaworCWRvCisJCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL3V0aWxzLSR7UFZ9L2BkaXJuYW1lICRpYAorCQlpbnN0YWxsICR7Qn0vJGkgJHtEfSR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL3V0aWxzLSR7UFZ9LyRpCisJZG9uZQorCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhtbC1kdGQ0L0xJQ0VOU0UtT0FTSVMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhtbC1kdGQ0L0xJQ0VOU0UtT0FTSVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRhN2Y1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2steG1sL2RvY2Jvb2steG1sLWR0ZDQvTElDRU5TRS1PQVNJUwpAQCAtMCwwICsxLDE2IEBACitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIHRoZSBEb2NCb29rIFhNTCBEVEQKK2FuZCBpdHMgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZQoraXMgaGVyZWJ5IGdyYW50ZWQgaW4gcGVycGV0dWl0eSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGFwcGVhciBpbiBhbGwgY29waWVzLiAgVGhlIGNvcHlyaWdodAoraG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGUgRFREIGZvcgorYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzc2VkIG9yIGltcGxpZWQKK3dhcnJhbnR5LgorCitJZiB5b3UgbW9kaWZ5IHRoZSBEb2NCb29rIERURCBpbiBhbnkgd2F5LCBleGNlcHQgZm9yIGRlY2xhcmluZyBhbmQKK3JlZmVyZW5jaW5nIGFkZGl0aW9uYWwgc2V0cyBvZiBnZW5lcmFsIGVudGl0aWVzIGFuZCBkZWNsYXJpbmcKK2FkZGl0aW9uYWwgbm90YXRpb25zLCBsYWJlbCB5b3VyIERURCBhcyBhIHZhcmlhbnQgb2YgRG9jQm9vay4gIFNlZQordGhlIG1haW50ZW5hbmNlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1BsZWFzZSBkaXJlY3QgYWxsIHF1ZXN0aW9ucywgYnVnIHJlcG9ydHMsIG9yIHN1Z2dlc3Rpb25zIGZvciAKK2NoYW5nZXMgdG8gdGhlIGRvY2Jvb2tAbGlzdHMub2FzaXMtb3Blbi5vcmcgbWFpbGluZyBsaXN0LiBGb3IgbW9yZQoraW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2svLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9kb2Nib29rLXhtbC11cGRhdGUtY2F0YWxvZy54bWwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhtbC1kdGQ0L2RvY2Jvb2steG1sLXVwZGF0ZS1jYXRhbG9nLnhtbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTcwMzYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9kb2Nib29rLXhtbC11cGRhdGUtY2F0YWxvZy54bWwucGF0Y2gKQEAgLTAsMCArMSw1MTUgQEAKK2RvY2Jvb2steG1sOiB1cGRhdGUgY2F0YWxvZy54bWwKKworUmVmZXIgVWJ1bnR1IDEzLjA0IHRvIHVwZGF0ZSBjYXRhbG9nLnhtbAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGRvY2Jvb2stNC4wL2NhdGFsb2cueG1sICAgfCA3MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGRvY2Jvb2stNC4xLjIvY2F0YWxvZy54bWwgfCA2NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgZG9jYm9vay00LjIvY2F0YWxvZy54bWwgICB8IDY5ICsrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGRvY2Jvb2stNC4zL2NhdGFsb2cueG1sICAgfCA3MiArKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGRvY2Jvb2stNC40L2NhdGFsb2cueG1sICAgfCA2MyArKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGRvY2Jvb2stNC41L2NhdGFsb2cueG1sICAgfCA2MyArKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDYgZmlsZXMgY2hhbmdlZCwgMTY1IGluc2VydGlvbnMoKyksIDI0MCBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZG9jYm9vay00LjAvY2F0YWxvZy54bWwKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZG9jYm9vay00LjEuMi9jYXRhbG9nLnhtbAorCitkaWZmIC0tZ2l0IGEvZG9jYm9vay00LjAvY2F0YWxvZy54bWwgYi9kb2Nib29rLTQuMC9jYXRhbG9nLnhtbAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKKy0tLSAvZGV2L251bGwKKysrKyBiL2RvY2Jvb2stNC4wL2NhdGFsb2cueG1sCitAQCAtMCwwICsxLDcyIEBACisrPD94bWwgdmVyc2lvbj0nMS4wJz8+CisrPCFET0NUWVBFIGNhdGFsb2cgUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIiAKKysgICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgorKworKzxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KKysKKys8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPCEtLSBYTUwgQ2F0YWxvZyBkYXRhIGZvciBEb2NCb29rIFhNTCBWNC4wLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKys8IS0tIEZpbGUgY2F0YWxvZy54bWwgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrCisrPCEtLSBQbGVhc2UgZGlyZWN0IGFsbCBxdWVzdGlvbnMsIGJ1ZyByZXBvcnRzLCBvciBzdWdnZXN0aW9ucyBmb3IKKysgICAgIGNoYW5nZXMgdG8gdGhlIGRvY2Jvb2tAbGlzdHMub2FzaXMtb3Blbi5vcmcgbWFpbGluZyBsaXN0LiBGb3IgbW9yZQorKyAgICAgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnLy4KKysgIC0tPgorKworKzwhLS0gVGhpcyBpcyB0aGUgY2F0YWxvZyBkYXRhIGZpbGUgZm9yIERvY0Jvb2sgVjQuMC4gSXQgaXMgcHJvdmlkZWQgYXMKKysgICAgIGEgY29udmVuaWVuY2UgaW4gYnVpbGRpbmcgeW91ciBvd24gY2F0YWxvZyBmaWxlcy4gWW91IG5lZWQgbm90IHVzZQorKyAgICAgdGhlIGZpbGVuYW1lcyBsaXN0ZWQgaGVyZSwgYW5kIG5lZWQgbm90IHVzZSB0aGUgZmlsZW5hbWUgbWV0aG9kIG9mCisrICAgICBpZGVudGlmeWluZyBzdG9yYWdlIG9iamVjdHMgYXQgYWxsLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvcgorKyAgICAgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgRG9jQm9vayBEVEQuCisrICAgICBTZWUgWE1MIENhdGFsb2dzIGF0IGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvIGZvcgorKyAgICAgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gc3VwcGx5aW5nIGFuZCB1c2luZyBjYXRhbG9nIGRhdGEuCisrICAtLT4KKysKKys8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPCEtLSBEb2NCb29rIGRyaXZlciBmaWxlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL05vcm1hbiBXYWxzaC8vRFREIERvY0JrIFhNTCBWNC4wLy9FTiIKKysgICAgICAgIHVyaT0iZG9jYm9va3guZHRkIi8+CisrCisrPCEtLSBPdGhlciB3YXlzIHRvIHJlZmVyIHRvIERvY0Jvb2sgWE1MIHY0LjAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKzxwdWJsaWMgcHVibGljSWQ9Ii0vL05vcm1hbiBXYWxzaC8vRFREIERvY0Jvb2sgWE1MIFY0LjAvL0VOIgorKyAgICAgICAgdXJpPSJkb2Nib29reC5kdGQiLz4KKysKKys8c3lzdGVtIHN5c3RlbUlkPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMC9kb2Nib29reC5kdGQiCisrICAgICAgICB1cmk9ImRvY2Jvb2t4LmR0ZCIvPgorKworKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKys8IS0tIERvY0Jvb2sgbW9kdWxlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vTm9ybWFuIFdhbHNoLy9FTlRJVElFUyBEb2NCb29rIFhNTCBOb3RhdGlvbnMgVjQuMC8vRU4iCisrICAgICAgICB1cmk9ImRibm90bngubW9kIi8+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vTm9ybWFuIFdhbHNoLy9FTlRJVElFUyBEb2NCb29rIFhNTCBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuMC8vRU4iCisrICAgICAgICB1cmk9ImRiY2VudHgubW9kIi8+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vTm9ybWFuIFdhbHNoLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBJbmZvcm1hdGlvbiBQb29sIFY0LjAvL0VOIgorKyAgICAgICAgdXJpPSJkYnBvb2x4Lm1vZCIvPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL05vcm1hbiBXYWxzaC8vRUxFTUVOVFMgRG9jQm9vayBYTUwgRG9jdW1lbnQgSGllcmFyY2h5IFY0LjAvL0VOIgorKyAgICAgICAgdXJpPSJkYmhpZXJ4Lm1vZCIvPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL05vcm1hbiBXYWxzaC8vRU5USVRJRVMgRG9jQm9vayBYTUwgQWRkaXRpb25hbCBHZW5lcmFsIEVudGl0aWVzIFY0LjAvL0VOIgorKyAgICAgICAgdXJpPSJkYmdlbmVudC5tb2QiLz4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9Ob3JtYW4gV2Fsc2gvL0RURCBDQUxTIFRhYmxlIE1vZGVsIFhNTCBWNC4wLy9FTiIKKysgICAgICAgIHVyaT0iY2Fsc3RibHguZHRkIi8+CisrCisrPCEtLSBVTk9GRklDSUFMIGNvbnZlcnNpb24gb2YgdGhlIGV4Y2hhbmdlIHRhYmxlIG1vZGVsIHRvIFhNTCwgYmFzZWQgb24gdGhlIE9BU0lTIEV4Y2hhbmdlIC0tPgorKzwhLS0gICAgVGFibGUgTW9kZWwgUFVCTElDICItLy9TR01MIE9wZW4vL0RURCBFeGNoYW5nZSBUYWJsZSBNb2RlbCAxOTk2MDQzMC8vRU4iICAgICAgICAgICAtLT4KKys8cHVibGljIHB1YmxpY0lkPSItLy9Ob3JtYWwgV2Fsc2gvL0V4Y2hhbmdlIFRhYmxlIE1vZGVsIDE5OTYwNDMwIFhNTCBWNC4wLy9FTiIKKysgICAgICAgIHVyaT0ic29leHRibHguZHRkIi8+CisrCisrPCEtLSB0aGUgZm9sbG93aW5nIEZQSSBpcyBkZWNsYXJlZCBmb3IgdGhlIERURCBpbnNpZGUgdGhlIERURCwgYnV0IHdlJ2xsIC0tPgorKzwhLS0gdXNlIHRoZSB2ZXJzaW9uIGZyb20gdGhlIGxhdGVzdCBEb2NCb29rCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0RURCBYTUwgRXhjaGFuZ2UgVGFibGUgTW9kZWwgMTk5OTAzMTUvL0VOIgorKyAgICAgICAgdXJpPSJzb2V4dGJseC5kdGQiLz4gLS0+CisrCisrPCEtLSBFbmQgb2YgY2F0YWxvZyBkYXRhIGZvciBEb2NCb29rIFhNTCBWNC4wIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKysKKys8L2NhdGFsb2c+CitkaWZmIC0tZ2l0IGEvZG9jYm9vay00LjEuMi9jYXRhbG9nLnhtbCBiL2RvY2Jvb2stNC4xLjIvY2F0YWxvZy54bWwKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CistLS0gL2Rldi9udWxsCisrKysgYi9kb2Nib29rLTQuMS4yL2NhdGFsb2cueG1sCitAQCAtMCwwICsxLDY2IEBACisrPD94bWwgdmVyc2lvbj0nMS4wJz8+CisrPCFET0NUWVBFIGNhdGFsb2cgUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIiAKKysgICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgorKworKzxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KKysKKys8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPCEtLSBYTUwgQ2F0YWxvZyBkYXRhIGZvciBEb2NCb29rIFhNTCBWNC4xLjIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKzwhLS0gRmlsZSBjYXRhbG9nLnhtbCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKysKKys8IS0tIFBsZWFzZSBkaXJlY3QgYWxsIHF1ZXN0aW9ucywgYnVnIHJlcG9ydHMsIG9yIHN1Z2dlc3Rpb25zIGZvcgorKyAgICAgY2hhbmdlcyB0byB0aGUgZG9jYm9va0BsaXN0cy5vYXNpcy1vcGVuLm9yZyBtYWlsaW5nIGxpc3QuIEZvciBtb3JlCisrICAgICBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvLgorKyAgLS0+CisrCisrPCEtLSBUaGlzIGlzIHRoZSBjYXRhbG9nIGRhdGEgZmlsZSBmb3IgRG9jQm9vayBWNC4xLjIuIEl0IGlzIHByb3ZpZGVkIGFzCisrICAgICBhIGNvbnZlbmllbmNlIGluIGJ1aWxkaW5nIHlvdXIgb3duIGNhdGFsb2cgZmlsZXMuIFlvdSBuZWVkIG5vdCB1c2UKKysgICAgIHRoZSBmaWxlbmFtZXMgbGlzdGVkIGhlcmUsIGFuZCBuZWVkIG5vdCB1c2UgdGhlIGZpbGVuYW1lIG1ldGhvZCBvZgorKyAgICAgaWRlbnRpZnlpbmcgc3RvcmFnZSBvYmplY3RzIGF0IGFsbC4gIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IKKysgICAgIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIERvY0Jvb2sgRFRELgorKyAgICAgU2VlIFhNTCBDYXRhbG9ncyBhdCBodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5LyBmb3IKKysgICAgIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHN1cHBseWluZyBhbmQgdXNpbmcgY2F0YWxvZyBkYXRhLgorKyAgLS0+CisrCisrPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKzwhLS0gRG9jQm9vayBkcml2ZXIgZmlsZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCisrICAgICAgICB1cmk9ImRvY2Jvb2t4LmR0ZCIvPgorKworKzxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIgorKyAgICAgICAgdXJpPSJkb2Nib29reC5kdGQiLz4KKysKKys8c3lzdGVtIHN5c3RlbUlkPSJodHRwOi8vZG9jYm9vay5vcmcveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIKKysgICAgICAgIHVyaT0iZG9jYm9va3guZHRkIi8+CisrCisrPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKzwhLS0gRG9jQm9vayBtb2R1bGVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgQ0FMUyBUYWJsZSBNb2RlbCBWNC4xLjIvL0VOIgorKyAgICAgICAgdXJpPSJjYWxzdGJseC5kdGQiLz4KKysKKysgIDwhLS0gYWxyZWFkeSBpbmNsdWRlZCBpbiBkb2Nib29rIDQuMgorKzxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgWE1MIEV4Y2hhbmdlIFRhYmxlIE1vZGVsIDE5OTkwMzE1Ly9FTiIKKysgICAgICAgIHVyaT0ic29leHRibHguZHRkIi8+IC0tPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBJbmZvcm1hdGlvbiBQb29sIFY0LjEuMi8vRU4iCisrICAgICAgICB1cmk9ImRicG9vbHgubW9kIi8+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgRG9jdW1lbnQgSGllcmFyY2h5IFY0LjEuMi8vRU4iCisrICAgICAgICB1cmk9ImRiaGllcngubW9kIi8+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgQWRkaXRpb25hbCBHZW5lcmFsIEVudGl0aWVzIFY0LjEuMi8vRU4iCisrICAgICAgICB1cmk9ImRiZ2VuZW50Lm1vZCIvPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIE5vdGF0aW9ucyBWNC4xLjIvL0VOIgorKyAgICAgICAgdXJpPSJkYm5vdG54Lm1vZCIvPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIENoYXJhY3RlciBFbnRpdGllcyBWNC4xLjIvL0VOIgorKyAgICAgICAgdXJpPSJkYmNlbnR4Lm1vZCIvPgorKworKworKzwhLS0gRW5kIG9mIGNhdGFsb2cgZGF0YSBmb3IgRG9jQm9vayBYTUwgVjQuMS4yIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKysKKys8L2NhdGFsb2c+CitkaWZmIC0tZ2l0IGEvZG9jYm9vay00LjIvY2F0YWxvZy54bWwgYi9kb2Nib29rLTQuMi9jYXRhbG9nLnhtbAorLS0tIGEvZG9jYm9vay00LjIvY2F0YWxvZy54bWwKKysrKyBiL2RvY2Jvb2stNC4yL2NhdGFsb2cueG1sCitAQCAtMSw0ICsxLDcgQEAKKyA8P3htbCB2ZXJzaW9uPScxLjAnPz4KKys8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iCisrICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KKysKKyA8Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+CisgCisgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorQEAgLTI1LDYgKzI4LDEyIEBACisgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyAgICAgICAgIHVyaT0iZG9jYm9va3guZHRkIi8+CisgCisrPHN5c3RlbSBzeXN0ZW1JZD0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorKyAgICAgICAgdXJpPSJkb2Nib29reC5kdGQiLz4KKysKKys8c3lzdGVtIHN5c3RlbUlkPSJodHRwOi8vZG9jYm9vay5vcmcveG1sLzQuMi9kb2Nib29reC5kdGQiCisrICAgICAgICB1cmk9ImRvY2Jvb2t4LmR0ZCIvPgorKworIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKyA8IS0tIERvY0Jvb2sgbW9kdWxlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisgCitAQCAtNDksNjYgKzU4LDYgQEAKKyA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuMi8vRU4iCisgICAgICAgICB1cmk9ImRiY2VudHgubW9kIi8+CisgCistPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorLTwhLS0gSVNPIGVudGl0eSBzZXRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBEaWFjcml0aWNhbCBNYXJrcy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1kaWEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTnVtZXJpYyBhbmQgU3BlY2lhbCBHcmFwaGljLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLW51bS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBQdWJsaXNoaW5nLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLXB1Yi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHZW5lcmFsIFRlY2huaWNhbC8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby10ZWNoLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIExhdGluIDEvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tbGF0MS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBMYXRpbiAyLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWxhdDIuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR3JlZWsgTGV0dGVycy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1ncmsxLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE1vbm90b25pa28gR3JlZWsvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tZ3JrMi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHcmVlayBTeW1ib2xzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWdyazMuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWx0ZXJuYXRpdmUgR3JlZWsgU3ltYm9scy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1ncms0LmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogQXJyb3cgUmVsYXRpb25zLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc2EuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBCaW5hcnkgT3BlcmF0b3JzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc2IuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBEZWxpbWl0ZXJzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc2MuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBOZWdhdGVkIFJlbGF0aW9ucy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1hbXNuLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogT3JkaW5hcnkvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYW1zby5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IFJlbGF0aW9ucy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1hbXNyLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEJveCBhbmQgTGluZSBEcmF3aW5nLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWJveC5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBSdXNzaWFuIEN5cmlsbGljLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWN5cjEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTm9uLVJ1c3NpYW4gQ3lyaWxsaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tY3lyMi5lbnQiLz4KKy0KKyA8IS0tIEVuZCBvZiBjYXRhbG9nIGRhdGEgZm9yIERvY0Jvb2sgWE1MIFY0LjIgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorIAorZGlmZiAtLWdpdCBhL2RvY2Jvb2stNC4zL2NhdGFsb2cueG1sIGIvZG9jYm9vay00LjMvY2F0YWxvZy54bWwKKy0tLSBhL2RvY2Jvb2stNC4zL2NhdGFsb2cueG1sCisrKysgYi9kb2Nib29rLTQuMy9jYXRhbG9nLnhtbAorQEAgLTEsNCArMSw3IEBACisgPD94bWwgdmVyc2lvbj0nMS4wJz8+CisrPCFET0NUWVBFIGNhdGFsb2cgUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIgorKyAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+CisrCisgPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgorIAorIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KK0BAIC0yNSwxMiArMjgsMjEgQEAKKyA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjMvL0VOIgorICAgICAgICAgdXJpPSJkb2Nib29reC5kdGQiLz4KKyAKKys8c3lzdGVtIHN5c3RlbUlkPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMy9kb2Nib29reC5kdGQiCisrICAgICAgICB1cmk9ImRvY2Jvb2t4LmR0ZCIvPgorKworKzxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly9kb2Nib29rLm9yZy94bWwvNC4zL2RvY2Jvb2t4LmR0ZCIKKysgICAgICAgIHVyaT0iZG9jYm9va3guZHRkIi8+CisrCisgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorIDwhLS0gRG9jQm9vayBtb2R1bGVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKyAKKyA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgQ0FMUyBUYWJsZSBNb2RlbCBWNC4zLy9FTiIKKyAgICAgICAgIHVyaT0iY2Fsc3RibHguZHRkIi8+CisgCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIEhUTUwgVGFibGVzIFY0LjMvL0VOIgorKyAgICAgICAgdXJpPSJodG1sdGJseC5tb2QiLz4KKysKKyA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIFhNTCBFeGNoYW5nZSBUYWJsZSBNb2RlbCAxOTk5MDMxNS8vRU4iCisgICAgICAgICB1cmk9InNvZXh0Ymx4LmR0ZCIvPgorIAorQEAgLTQ5LDY2ICs2MSw2IEBACisgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgQ2hhcmFjdGVyIEVudGl0aWVzIFY0LjMvL0VOIgorICAgICAgICAgdXJpPSJkYmNlbnR4Lm1vZCIvPgorIAorLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKy08IS0tIElTTyBlbnRpdHkgc2V0cyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgRGlhY3JpdGljYWwgTWFya3MvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tZGlhLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE51bWVyaWMgYW5kIFNwZWNpYWwgR3JhcGhpYy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1udW0uZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgUHVibGlzaGluZy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1wdWIuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR2VuZXJhbCBUZWNobmljYWwvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tdGVjaC5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBMYXRpbiAxLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWxhdDEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTGF0aW4gMi8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1sYXQyLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdyZWVrIExldHRlcnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tZ3JrMS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBNb25vdG9uaWtvIEdyZWVrLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWdyazIuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR3JlZWsgU3ltYm9scy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1ncmszLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFsdGVybmF0aXZlIEdyZWVrIFN5bWJvbHMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tZ3JrNC5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IEFycm93IFJlbGF0aW9ucy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1hbXNhLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogQmluYXJ5IE9wZXJhdG9ycy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1hbXNiLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogRGVsaW1pdGVycy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1hbXNjLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogTmVnYXRlZCBSZWxhdGlvbnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYW1zbi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IE9yZGluYXJ5Ly9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc28uZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBSZWxhdGlvbnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYW1zci5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBCb3ggYW5kIExpbmUgRHJhd2luZy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1ib3guZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgUnVzc2lhbiBDeXJpbGxpYy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1jeXIxLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE5vbi1SdXNzaWFuIEN5cmlsbGljLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWN5cjIuZW50Ii8+CistCisgPCEtLSBFbmQgb2YgY2F0YWxvZyBkYXRhIGZvciBEb2NCb29rIFhNTCBWNC4zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKyAKK2RpZmYgLS1naXQgYS9kb2Nib29rLTQuNC9jYXRhbG9nLnhtbCBiL2RvY2Jvb2stNC40L2NhdGFsb2cueG1sCistLS0gYS9kb2Nib29rLTQuNC9jYXRhbG9nLnhtbAorKysrIGIvZG9jYm9vay00LjQvY2F0YWxvZy54bWwKK0BAIC0xLDQgKzEsNyBAQAorIDw/eG1sIHZlcnNpb249JzEuMCc/PgorKzwhRE9DVFlQRSBjYXRhbG9nIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIKKysgICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgorKworIDxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIiBwcmVmZXI9InB1YmxpYyI+CisgCisgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorQEAgLTU4LDY2ICs2MSw2IEBACisgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgQ2hhcmFjdGVyIEVudGl0aWVzIFY0LjQvL0VOIgorICAgICAgICAgdXJpPSJkYmNlbnR4Lm1vZCIvPgorIAorLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKy08IS0tIElTTyBlbnRpdHkgc2V0cyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgRGlhY3JpdGljYWwgTWFya3MvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29kaWEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTnVtZXJpYyBhbmQgU3BlY2lhbCBHcmFwaGljLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvbnVtLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIFB1Ymxpc2hpbmcvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29wdWIuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR2VuZXJhbCBUZWNobmljYWwvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc290ZWNoLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIExhdGluIDEvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29sYXQxLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIExhdGluIDIvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29sYXQyLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdyZWVrIExldHRlcnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29ncmsxLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE1vbm90b25pa28gR3JlZWsvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29ncmsyLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdyZWVrIFN5bWJvbHMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29ncmszLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFsdGVybmF0aXZlIEdyZWVrIFN5bWJvbHMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29ncms0LmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogQXJyb3cgUmVsYXRpb25zLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zYS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IEJpbmFyeSBPcGVyYXRvcnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29hbXNiLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogRGVsaW1pdGVycy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2Ftc2MuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBOZWdhdGVkIFJlbGF0aW9ucy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2Ftc24uZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBPcmRpbmFyeS8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2Ftc28uZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBSZWxhdGlvbnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29hbXNyLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEJveCBhbmQgTGluZSBEcmF3aW5nLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYm94LmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIFJ1c3NpYW4gQ3lyaWxsaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29jeXIxLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE5vbi1SdXNzaWFuIEN5cmlsbGljLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvY3lyMi5lbnQiLz4KKy0KKyA8IS0tIEVuZCBvZiBjYXRhbG9nIGRhdGEgZm9yIERvY0Jvb2sgWE1MIFY0LjQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorIAorZGlmZiAtLWdpdCBhL2RvY2Jvb2stNC41L2NhdGFsb2cueG1sIGIvZG9jYm9vay00LjUvY2F0YWxvZy54bWwKKy0tLSBhL2RvY2Jvb2stNC41L2NhdGFsb2cueG1sCisrKysgYi9kb2Nib29rLTQuNS9jYXRhbG9nLnhtbAorQEAgLTEsNCArMSw3IEBACisgPD94bWwgdmVyc2lvbj0nMS4wJz8+CisrPCFET0NUWVBFIGNhdGFsb2cgUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIgorKyAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+CisrCisgPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciIHByZWZlcj0icHVibGljIj4KKyAKKyA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CitAQCAtNTgsNjYgKzYxLDYgQEAKKyA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuNS8vRU4iCisgICAgICAgICB1cmk9ImRiY2VudHgubW9kIi8+CisgCistPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorLTwhLS0gSVNPIGVudGl0eSBzZXRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBEaWFjcml0aWNhbCBNYXJrcy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2RpYS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBOdW1lcmljIGFuZCBTcGVjaWFsIEdyYXBoaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29udW0uZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgUHVibGlzaGluZy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb3B1Yi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHZW5lcmFsIFRlY2huaWNhbC8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb3RlY2guZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTGF0aW4gMS8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2xhdDEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTGF0aW4gMi8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2xhdDIuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR3JlZWsgTGV0dGVycy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2dyazEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTW9ub3RvbmlrbyBHcmVlay8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2dyazIuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR3JlZWsgU3ltYm9scy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2dyazMuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWx0ZXJuYXRpdmUgR3JlZWsgU3ltYm9scy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2dyazQuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBBcnJvdyBSZWxhdGlvbnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29hbXNhLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogQmluYXJ5IE9wZXJhdG9ycy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2Ftc2IuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBEZWxpbWl0ZXJzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zYy5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IE5lZ2F0ZWQgUmVsYXRpb25zLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zbi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IE9yZGluYXJ5Ly9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zby5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IFJlbGF0aW9ucy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2Ftc3IuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQm94IGFuZCBMaW5lIERyYXdpbmcvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29ib3guZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgUnVzc2lhbiBDeXJpbGxpYy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2N5cjEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTm9uLVJ1c3NpYW4gQ3lyaWxsaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29jeXIyLmVudCIvPgorLQorIDwhLS0gRW5kIG9mIGNhdGFsb2cgZGF0YSBmb3IgRG9jQm9vayBYTUwgVjQuNSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKyA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisgCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9kb2Nib29rLXhtbC54bWwgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhtbC1kdGQ0L2RvY2Jvb2steG1sLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzFmNTU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9kb2Nib29rLXhtbC54bWwKQEAgLTAsMCArMSw2OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KKzxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIE5vdGF0aW9ucyBWNC40Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIERvY3VtZW50IEhpZXJhcmNoeSBWNC4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBIVE1MIFRhYmxlcyBWNC4zLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjMvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRUxFTUVOVFMgRG9jQm9vayBYTUwgSW5mb3JtYXRpb24gUG9vbCBWNC4wLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjAvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIEluZm9ybWF0aW9uIFBvb2wgVjQuNC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC40L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBBZGRpdGlvbmFsIEdlbmVyYWwgRW50aXRpZXMgVjQuNC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC40L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgSFRNTCBUYWJsZXMgVjQuNC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC40L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBBZGRpdGlvbmFsIEdlbmVyYWwgRW50aXRpZXMgVjQuNS8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgQ0FMUyBUYWJsZSBNb2RlbCBWNC4zLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjMvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIEluZm9ybWF0aW9uIFBvb2wgVjQuMy8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4zL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9FTlRJVElFUyBEb2NCb29rIFhNTCBOb3RhdGlvbnMgVjQuMC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4wL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBJbmZvcm1hdGlvbiBQb29sIFY0LjUvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNS9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgTm90YXRpb25zIFY0LjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIENBTFMgVGFibGUgTW9kZWwgVjQuMS4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjEuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9EVEQgQ0FMUyBUYWJsZSBNb2RlbCBYTUwgVjQuMC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4wL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYW4gV2Fsc2gvL0VOVElUSUVTIERvY0Jvb2sgWE1MIENoYXJhY3RlciBFbnRpdGllcyBWNC4wLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjAvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRUxFTUVOVFMgRG9jQm9vayBYTUwgRG9jdW1lbnQgSGllcmFyY2h5IFY0LjAvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMS4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjQvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgTm90YXRpb25zIFY0LjMvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMy9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIENBTFMgVGFibGUgTW9kZWwgVjQuMi8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYWwgV2Fsc2gvL0V4Y2hhbmdlIFRhYmxlIE1vZGVsIDE5OTYwNDMwIFhNTCBWNC4wLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjAvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIEFkZGl0aW9uYWwgR2VuZXJhbCBFbnRpdGllcyBWNC4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLm9yZy94bWwvNC40L2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLm9yZy94bWwvNC4xL2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgTm90YXRpb25zIFY0LjUvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNS9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9EVEQgRG9jQmsgWE1MIFY0LjAvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjMvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMy9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjUvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNS9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgQ2hhcmFjdGVyIEVudGl0aWVzIFY0LjUvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNS9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIEluZm9ybWF0aW9uIFBvb2wgVjQuMS4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjEuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9EVEQgRG9jQm9vayBYTUwgVjQuMC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4wL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBBZGRpdGlvbmFsIEdlbmVyYWwgRW50aXRpZXMgVjQuMy8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4zL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vZG9jYm9vay5vcmcveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjEuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIEhUTUwgVGFibGVzIFY0LjUvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNS9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgRG9jdW1lbnQgSGllcmFyY2h5IFY0LjQvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL2RvY2Jvb2sub3JnL3htbC80LjUvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNS9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgTm90YXRpb25zIFY0LjEuMi8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4xLjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIERvY3VtZW50IEhpZXJhcmNoeSBWNC4zLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjMvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuNS8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuMi8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjEuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgRG9jdW1lbnQgSGllcmFyY2h5IFY0LjUvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNS9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9FTlRJVElFUyBEb2NCb29rIFhNTCBBZGRpdGlvbmFsIEdlbmVyYWwgRW50aXRpZXMgVjQuMC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4wL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIENBTFMgVGFibGUgTW9kZWwgVjQuNC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC40L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMC9kb2Nib29reC5kdGQiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4wL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vZG9jYm9vay5vcmcveG1sLzQuMi9kb2Nib29reC5kdGQiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuMy8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4zL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIFhNTCBFeGNoYW5nZSBUYWJsZSBNb2RlbCAxOTk5MDMxNS8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuNC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC40L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuNC9kb2Nib29reC5kdGQiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC40L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBBZGRpdGlvbmFsIEdlbmVyYWwgRW50aXRpZXMgVjQuMS4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjEuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4zLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjMvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLm9yZy94bWwvNC4zL2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjMvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIEluZm9ybWF0aW9uIFBvb2wgVjQuMi8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgQ0FMUyBUYWJsZSBNb2RlbCBWNC41Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjUvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBEb2N1bWVudCBIaWVyYXJjaHkgVjQuMS4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjEuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgQ2hhcmFjdGVyIEVudGl0aWVzIFY0LjEuMi8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4xLjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xL2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC9jYXRhbG9nLnhtbCIvPgorPC9jYXRhbG9nPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNF80LjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhtbC1kdGQ0XzQuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTFiYzM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNF80LjUuYmIKQEAgLTAsMCArMSw2NCBAQAorU1VNTUFSWSA9ICJEb2N1bWVudCB0eXBlIGRlZmluaXRpb25zIGZvciB2ZXJpZmljYXRpb24gb2YgWE1MIGRhdGEgZmlsZXMiCitERVNDUklQVElPTiA9ICJEb2N1bWVudCB0eXBlIGRlZmluaXRpb25zIGZvciB2ZXJpZmljYXRpb24gb2YgWE1MIGRhdGEgXAorZmlsZXMgYWdhaW5zdCB0aGUgRG9jQm9vayBydWxlIHNldCwgaXQgc2hpcHMgd2l0aCB0aGUgbGF0ZXN0IERvY0Jvb2sgNC41IFwKK1hNTCBEVEQsIGFzIHdlbGwgYXMgYSBzZWxlY3RlZCBzZXQgb2YgbGVnYWN5IERURHMgZm9yIHVzZSB3aXRoIG9sZGVyIFwKK2RvY3VtZW50cywgaW5jbHVkaW5nIDQuMCwgNC4xLjIsIDQuMiwgNC4zIGFuZCA0LjQiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmRvY2Jvb2sub3JnL3htbC8iCisKK0xJQ0VOU0UgPSAiT0FTSVMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke1dPUktESVJ9L0xJQ0VOU0UtT0FTSVM7bWQ1PWM2MDg5ODVkZDVmN2YyMTVlNjY5ZTc2MzlhMGIxZDJlIgorCisjIE5vdGU6IHRoZSB1cHN0cmVhbSBzb3VyY2VzIGFyZSBub3QgZGlzdHJpYnV0ZWQgd2l0aCBhIGxpY2Vuc2UgZmlsZS4KKyMgTElDRU5TRS1PQVNJUyBpcyBpbmNsdWRlZCBhcyBhICJwYXRjaCIgdG8gd29ya2Fyb3VuZCB0aGlzLiBXaGVuCisjIHVwZ3JhZGluZyB0aGlzIHJlY2lwZSwgcGxlYXNlIHZlcmlmeSB3aGV0aGVyIHRoaXMgaXMgc3RpbGwgbmVlZGVkLgorU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vZC9kb2Nib29rLXhtbC9kb2Nib29rLXhtbF8ke1BWfS5vcmlnLnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9MSUNFTlNFLU9BU0lTIFwKKyAgICAgICAgICAgZmlsZTovL2RvY2Jvb2steG1sLXVwZGF0ZS1jYXRhbG9nLnhtbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kb2Nib29rLXhtbC54bWwgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDg3YjRkNDRlMTVjZmZiMWY0MDQ4YWYyM2Y5ODIwOGUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjBmOGVkY2Y2OTdmNTMxOGU2M2RkOThjOWE5MzFmM2ZlZTE2N2FmMDgwNWJhNDQxZGIzNzJlMGYxN2IyYTQ0ZiIKKworUz0iJHtXT1JLRElSfS9kb2Nib29rLXhtbC00LjUuYzMxNDI0IgorCitpbmhlcml0IGFsbGFyY2gKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTU1RBVEVQT1NUSU5TVEZVTkNTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGRvY2Jvb2tfeG1sX2R0ZF9zc3RhdGVfcG9zdGluc3QiCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1NfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZG9jYm9va194bWxfZHRkX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworZG9fY29uZmlncmUgKCl7CisgICAgOgorfQorCitkb19jb21waWxlICgpeworICAgIDoKK30KKworZG9faW5zdGFsbCAoKSB7CisgICAgIyBSZWZlciBkZWJpYW4gaHR0cHM6Ly9wYWNrYWdlcy5kZWJpYW4ub3JnL3NpZC9hbGwvZG9jYm9vay14bWwvZmlsZWxpc3QKKyAgICBmb3IgRFREVkVSU0lPTiBpbiA0LjAgNC4xLjIgNC4yIDQuMyA0LjQgNC41OyBkbworICAgICAgICBpbnN0YWxsIC1kIC1tIDc1NSAke0R9JHtkYXRhZGlyfS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLyR7RFREVkVSU0lPTn0KKyAgICAgICAgY3AgLXYgLVIgZG9jYm9vay0ke0RURFZFUlNJT059LyogJHtEfSR7ZGF0YWRpcn0veG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC8ke0RURFZFUlNJT059CisgICAgZG9uZQorCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS94bWwvCisgICAgaW5zdGFsbCAtbSA3NTUgICR7V09SS0RJUn0vZG9jYm9vay14bWwueG1sICR7RH0ke3N5c2NvbmZkaXJ9L3htbC9kb2Nib29rLXhtbC54bWwKK30KKworZG9jYm9va194bWxfZHRkX3NzdGF0ZV9wb3N0aW5zdCAoKSB7CisgICAgaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3QiIC1vICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXQorICAgIHRoZW4KKyAgICAgICAgIyBFbnN1cmUgdGhhdCB0aGUgY2F0YWxvZyBmaWxlIHNnbWwtZG9jYm9vay5jYXQgaXMgcHJvcGVybHkKKyAgICAgICAgIyB1cGRhdGVkIHdoZW4gdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkIGZyb20gc3N0YXRlIGNhY2hlLgorICAgICAgICBzZWQgLWkgLWUgInN8ZmlsZTovLy4qL3Vzci9zaGFyZS94bWx8ZmlsZTovLyR7ZGF0YWRpcn0veG1sfGciICR7U1lTUk9PVF9ERVNURElSfSR7c3lzY29uZmRpcn0veG1sL2RvY2Jvb2steG1sLnhtbAorICAgIGZpCit9CisKK2RvY2Jvb2tfeG1sX2R0ZF9zeXNyb290X3ByZXByb2Nlc3MgKCkgeworICAgICMgVXBkYXRlIHRoZSBoYXJkY29kZSBkaXIgaW4gZG9jYm9vay14bWwueG1sCisgICAgc2VkIC1pIC1lICJzfGZpbGU6Ly8vdXNyL3NoYXJlL3htbHxmaWxlOi8vJHtkYXRhZGlyfS94bWx8ZyIgJHtTWVNST09UX0RFU1RESVJ9JHtzeXNjb25mZGlyfS94bWwvZG9jYm9vay14bWwueG1sCit9CisKK0ZJTEVTXyR7UE59ID0gIiR7ZGF0YWRpcn0vKiAke3N5c2NvbmZkaXJ9L3htbC9kb2Nib29rLXhtbC54bWwiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uby1iYXNoaXNtLWluLWRvY2Jvb2steHNsLXVwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHMvZG9jYm9vay14c2wtc3R5bGVzaGVldHMtbm8tYmFzaGlzbS1pbi1kb2Nib29rLXhzbC11cC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTU5YTVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHMvZG9jYm9vay14c2wtc3R5bGVzaGVldHMtbm8tYmFzaGlzbS1pbi1kb2Nib29rLXhzbC11cC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitkb2Nib29rLXhzbC1zdHlsZXNoZWV0czogbm8gYmFzaGlzbSBpbiBkb2Nib29rLXhzbC11cGRhdGUKKworVGhlIGNoZWNrYmFzaGlzbXMgc2hvd3MgdGhlcmUgaXMgbm8gYmFzaGlzbSwgc28gdXNlIC9iaW4vc2guCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIHRvb2xzL2Jpbi9kb2Nib29rLXhzbC11cGRhdGUgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS90b29scy9iaW4vZG9jYm9vay14c2wtdXBkYXRlIGIvdG9vbHMvYmluL2RvY2Jvb2steHNsLXVwZGF0ZQoraW5kZXggYWJhMDAxNi4uY2M3M2FhMiAxMDA3NTUKKy0tLSBhL3Rvb2xzL2Jpbi9kb2Nib29rLXhzbC11cGRhdGUKKysrKyBiL3Rvb2xzL2Jpbi9kb2Nib29rLXhzbC11cGRhdGUKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgIyB2aW06IG51bWJlcgorIAorICMgZG9jYm9vay14c2wtdXBkYXRlIC0gVXBkYXRlIGVudmlyb25tZW50IHRvIGxhdGVzdCBkb2Nib29rLXhzbCBzbmFwc2hvdAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy9kb2Nib29rLXhzbC54bWwgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy9kb2Nib29rLXhzbC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFhNTc2YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2steG1sL2RvY2Jvb2steHNsLXN0eWxlc2hlZXRzL2RvY2Jvb2steHNsLnhtbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGNhdGFsb2cgUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIiAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+Cis8Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+Cis8ZGVsZWdhdGVVUkkgdXJpU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3hzbC1zdHlsZXNoZWV0cy0xLjc4LjEvY2F0YWxvZy54bWwiLz4KKzxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMtMS43OC4xL2NhdGFsb2cueG1sIi8+Cis8L2NhdGFsb2c+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0c18xLjc4LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0c18xLjc4LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmExYmRjNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2steG1sL2RvY2Jvb2steHNsLXN0eWxlc2hlZXRzXzEuNzguMS5iYgpAQCAtMCwwICsxLDY5IEBACitTVU1NQVJZID0gIlhTTCBzdHlsZXNoZWV0cyBmb3IgcHJvY2Vzc2luZyBEb2NCb29rIFhNTCB0byB2YXJpb3VzIG91dHB1dCBmb3JtYXRzIgorSE9NRVBBR0UgPSAiaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0IgorTElDRU5TRSA9ICJYU0wiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNmVlZWVkNDNkNDk4YzIyYTgzNTM4MjUzMzM1NjQ2MiIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vZG9jYm9vay9kb2Nib29rLXhzbC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2RvY2Jvb2steHNsLnhtbCBcCisgICAgICAgICAgIGZpbGU6Ly9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uby1iYXNoaXNtLWluLWRvY2Jvb2steHNsLXVwLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjZkZDBmODkxMzFjYzM1YmY0ZjJlZDEwNWExYzE3NzcxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM5OGY3Mjk2YWI1YzhjY2QyZTBiYzA3NjM0OTc2YTM3ZjUwODQ3ZGYyZDhhNTliZGIxZTE1NzY2NDcwMGI0NjciCisKK1MgPSAiJHtXT1JLRElSfS9kb2Nib29rLXhzbC0ke1BWfSIKKworaW5oZXJpdCBhbGxhcmNoCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworU1NUQVRFUE9TVElOU1RGVU5DU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBkb2Nib29rX3hzbF9zdHlsZXNoZWV0c19zc3RhdGVfcG9zdGluc3QiCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1NfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZG9jYm9va194c2xfc3R5bGVzaGVldHNfc3lzcm9vdF9wcmVwcm9jZXNzIgorCitkb19jb25maWd1cmUgKCl7CisJOgorfQorCitkb19jb21waWxlICgpeworCToKK30KKworZG9faW5zdGFsbCAoKSB7CisJIyBSZWZlciB0byBodHRwOi8vd3d3LmxpbnV4ZnJvbXNjcmF0Y2gub3JnL2JsZnMvdmlldy9zdGFibGUvcHN0L2RvY2Jvb2steHNsLmh0bWwKKwkjIGZvciBkZXRhaWxzLgorCWluc3RhbGwgLXYgLW03NTUgLWQgJHtEfSR7ZGF0YWRpcn0veG1sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzLTEuNzguMQorCisJY3AgLXYgLVIgVkVSU0lPTiBjb21tb24gZWNsaXBzZSBlcHViIGV4dGVuc2lvbnMgZm8gaGlnaGxpZ2h0aW5nIGh0bWwgXAorCQlodG1saGVscCBpbWFnZXMgamF2YWhlbHAgbGliIG1hbnBhZ2VzIHBhcmFtcyBwcm9maWxpbmcgXAorCQlyb3VuZHRyaXAgc2xpZGVzIHRlbXBsYXRlIHRlc3RzIHRvb2xzIHdlYmhlbHAgd2Vic2l0ZSBcCisJCXhodG1sIHhodG1sLTFfMSBjYXRhbG9nLnhtbCBcCisJJHtEfSR7ZGF0YWRpcn0veG1sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzLTEuNzguMQorCisJbG4gLXMgVkVSU0lPTiAke0R9LyR7ZGF0YWRpcn0veG1sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzLTEuNzguMS9WRVJTSU9OLnhzbAorCisJaW5zdGFsbCAtdiAtbTY0NCAtRCBSRUFETUUgXAorCQkke0R9JHtkYXRhZGlyfS9kb2MvZG9jYm9vay14c2wtMS43OC4xL1JFQURNRS50eHQKKwlpbnN0YWxsIC12IC1tNjQ0ICAgIFJFTEVBU0UtTk9URVMqIE5FV1MqIFwKKwkJJHtEfSR7ZGF0YWRpcn0vZG9jL2RvY2Jvb2steHNsLTEuNzguMQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS94bWwvCisJaW5zdGFsbCAtbSA3NTUgICR7V09SS0RJUn0vZG9jYm9vay14c2wueG1sICR7RH0ke3N5c2NvbmZkaXJ9L3htbC9kb2Nib29rLXhzbC54bWwKKworfQorCitkb2Nib29rX3hzbF9zdHlsZXNoZWV0c19zc3RhdGVfcG9zdGluc3QgKCkgeworICAgIGlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290IiAtbyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF0KKyAgICB0aGVuCisgICAgICAgICMgRW5zdXJlIHRoYXQgdGhlIGNhdGFsb2cgZmlsZSBzZ21sLWRvY2Jvb2suY2F0IGlzIHByb3Blcmx5CisgICAgICAgICMgdXBkYXRlZCB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZCBmcm9tIHNzdGF0ZSBjYWNoZS4KKyAgICAgICAgc2VkIC1pIC1lICJzfGZpbGU6Ly8uKi91c3Ivc2hhcmUveG1sfGZpbGU6Ly8ke2RhdGFkaXJ9L3htbHxnIiAke1NZU1JPT1RfREVTVERJUn0ke3N5c2NvbmZkaXJ9L3htbC9kb2Nib29rLXhzbC54bWwKKyAgICBmaQorfQorCitkb2Nib29rX3hzbF9zdHlsZXNoZWV0c19zeXNyb290X3ByZXByb2Nlc3MgKCkgeworICAgICMgVXBkYXRlIHRoZSBoYXJkY29kZSBkaXIgaW4gZG9jYm9vay14bWwueG1sCisgICAgc2VkIC1pIC1lICJzfGZpbGU6Ly8vdXNyL3NoYXJlL3htbHxmaWxlOi8vJHtkYXRhZGlyfS94bWx8ZyIgJHtTWVNST09UX0RFU1RESVJ9JHtzeXNjb25mZGlyfS94bWwvZG9jYm9vay14c2wueG1sCit9CisKK1JERVBFTkRTXyR7UE59ICs9ICJwZXJsIgorRklMRVNfJHtQTn0gPSAiJHtkYXRhZGlyfS94bWwvKiAke3N5c2NvbmZkaXJ9L3htbC9kb2Nib29rLXhzbC54bWwiCitGSUxFU18ke1BOfS1kb2MgPSAiJHtkYXRhZGlyfS9kb2MvKiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy8wMDAxLUluY2x1ZGUtZmNudGwuaC1mb3ItZ2V0dGluZy1sb2ZmX3QtZGVmaW5pdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy8wMDAxLUluY2x1ZGUtZmNudGwuaC1mb3ItZ2V0dGluZy1sb2ZmX3QtZGVmaW5pdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmY1YjdhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzLzAwMDEtSW5jbHVkZS1mY250bC5oLWZvci1nZXR0aW5nLWxvZmZfdC1kZWZpbml0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb20gYjdjNDJjNmE5ODI5YmVhOTExYjIyMjAxZWRkN2RmMmE5YmVjMWExNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjUyOjM0IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIEluY2x1ZGUgZmNudGwuaCBmb3IgZ2V0dGluZyBsb2ZmX3QgZGVmaW5pdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGRvc2ZzY2svZG9zZnNjay5oIHwgMiArKworIGRvc2ZzY2svbGZuLmMgICAgIHwgMSArCisgMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rvc2ZzY2svZG9zZnNjay5oIGIvZG9zZnNjay9kb3Nmc2NrLmgKK2luZGV4IGQ5MzE0YjEuLjIwNzZkNWYgMTAwNjQ0CistLS0gYS9kb3Nmc2NrL2Rvc2ZzY2suaAorKysrIGIvZG9zZnNjay9kb3Nmc2NrLmgKK0BAIC01MCw2ICs1MCw4IEBACisgI2RlZmluZSBDVF9MRV9MKHYpICh2KQorICNlbmRpZiAvKiBfX0JJR19FTkRJQU4gKi8KKyAKKysjaW5jbHVkZSA8ZmNudGwuaD4KKysKKyAjZGVmaW5lIFZGQVRfTE5fQVRUUiAoQVRUUl9STyB8IEFUVFJfSElEREVOIHwgQVRUUl9TWVMgfCBBVFRSX1ZPTFVNRSkKKyAKKyAvKiArK3JvbWFuOiBVc2Ugb3duIGRlZmluaXRpb24gb2YgYm9vdCBzZWN0b3Igc3RydWN0dXJlIC0tIHRoZSBrZXJuZWwgaGVhZGVycycKK2RpZmYgLS1naXQgYS9kb3Nmc2NrL2xmbi5jIGIvZG9zZnNjay9sZm4uYworaW5kZXggOWIyY2ZjMy4uYmIwNGZkYSAxMDA2NDQKKy0tLSBhL2Rvc2ZzY2svbGZuLmMKKysrKyBiL2Rvc2ZzY2svbGZuLmMKK0BAIC03LDYgKzcsNyBAQAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8bGltaXRzLmg+CisgI2luY2x1ZGUgPHRpbWUuaD4KKysjaW5jbHVkZSA8ZmNudGwuaD4KKyAKKyAjaW5jbHVkZSAiY29tbW9uLmgiCisgI2luY2x1ZGUgImlvLmgiCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9hbGlnbm1lbnRfaGFjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9hbGlnbm1lbnRfaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDZiMmRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2FsaWdubWVudF9oYWNrLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK1RoZSBwcm9ibGVtIGlzIHRoYXQgdW5zaWduZWQgY2hhclsyXSBpcworZ3VyYW50ZWVkIHRvIGJlIDhCaXQgYWxpZ25lZCBvbiBhcm0KK2J1dCB1bnNpZ25lZCBzaG9ydCBpcy9uZWVkcyB0byBiZSAxNmJpdCBhbGlnbmVkCit0aGUgdW5pb24geyB1bnNpZ25lZCBzaG9ydDsgdW5zaWduZWQgY2hhclsyXSB9IHRyaWNrIAorZGlkbid0IHdvcmsgc28gbm8gd2UgdXNlIHRoZSBhbHBoYSBoYWNrLgorCittZW1jcHkgaW50byBhbiAxNmJpdCBhbGlnbmVkCisKKyAgICAtemVja2UKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCitXZSdyZSB0cmFja2luZyBhbiBvbGQgcmVsZWFzZSBvZiBkb3Nmc3Rvb2xzIGR1ZSB0byBsaWNlbnNpbmcgaXNzdWVzLgorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIGRvc2ZzdG9vbHMvZG9zZnNjay9ib290LmMub3JpZwkyMDAzLTA1LTE1IDE5OjMyOjIzLjAwMDAwMDAwMCArMDIwMAorKysrIGRvc2ZzdG9vbHMvZG9zZnNjay9ib290LmMJMjAwMy0wNi0xMyAxNzo0NDoyNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zNiwxNyArMzYsMTUgQEAKKyAgICAgeyAweGZmLCAiNS4yNVwiIDMyMGsgZmxvcHB5IDJzLzQwdHIvOHNlYyIgfSwKKyB9OworIAorLSNpZiBkZWZpbmVkIF9fYWxwaGEgfHwgZGVmaW5lZCBfX2lhNjRfXyB8fCBkZWZpbmVkIF9fczM5MHhfXyB8fCBkZWZpbmVkIF9feDg2XzY0X18gfHwgZGVmaW5lZCBfX3BwYzY0X18KKysKKyAvKiBVbmFsaWduZWQgZmllbGRzIG11c3QgZmlyc3QgYmUgY29waWVkIGJ5dGUtd2lzZSAqLworICNkZWZpbmUgR0VUX1VOQUxJR05FRF9XKGYpCQkJXAorICAgICAoewkJCQkJCVwKKyAJdW5zaWduZWQgc2hvcnQgX192OwkJCVwKKyAJbWVtY3B5KCAmX192LCAmZiwgc2l6ZW9mKF9fdikgKTsJXAorLQlDRl9MRV9XKCAqKHVuc2lnbmVkIHNob3J0ICopJmYgKTsJXAorKwlDRl9MRV9XKCAqKHVuc2lnbmVkIHNob3J0ICopJl9fdiApOwlcCisgICAgIH0pCistI2Vsc2UKKy0jZGVmaW5lIEdFVF9VTkFMSUdORURfVyhmKSBDRl9MRV9XKCAqKHVuc2lnbmVkIHNob3J0ICopJmYgKQorLSNlbmRpZgorKworIAorIAorIHN0YXRpYyBjaGFyICpnZXRfbWVkaWFfZGVzY3IoIHVuc2lnbmVkIGNoYXIgbWVkaWEgKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMtbXNkb3NfZnMtdHlwZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy1tc2Rvc19mcy10eXBlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWFiZDFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMtbXNkb3NfZnMtdHlwZXMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRW5zdXJlIHRoZSBfX3M4IHR5cGUgaXMgcHJvcGVybHkgZGVmaW5lZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCitXZSdyZSB0cmFja2luZyBhbiBvbGQgcmVsZWFzZSBvZiBkb3Nmc3Rvb2xzIGR1ZSB0byBsaWNlbnNpbmcgaXNzdWVzLgorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIGRvc2ZzdG9vbHMtMi4xMC9kb3Nmc2NrL2Rvc2ZzY2suaC5vcmcJMjAwNi0wMi0yMSAwODozNjoxNC4wMDAwMDAwMDAgLTA3MDAKKysrKyBkb3Nmc3Rvb2xzLTIuMTAvZG9zZnNjay9kb3Nmc2NrLmgJMjAwNi0wMi0yMSAwODo0MDoxMi4wMDAwMDAwMDAgLTA3MDAKK0BAIC0yMiw2ICsyMiwxNCBAQAorICAgICAgICAjdW5kZWYgX19LRVJORUxfXworICNlbmRpZgorIAorKyNpZm5kZWYgX19zOAorKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKysjZW5kaWYKKysKKysjaWZuZGVmIF9fQVNNX1NUVUJfQllURU9SREVSX0hfXworKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgPGxpbnV4L21zZG9zX2ZzLmg+CisgCisgLyogMi4xIGtlcm5lbHMgdXNlIGxlMTZfdG9fY3B1KCkgdHlwZSBmdW5jdGlvbnMgZm9yIENGX0xFX1cgJiBDby4sIGJ1dCBkb24ndAorLS0tIGRvc2ZzdG9vbHMtMi4xMC9kb3Nmc2NrL2ZpbGUuYy5vcmcJMjAwNi0wMi0yMSAwODozNzozNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBkb3Nmc3Rvb2xzLTIuMTAvZG9zZnNjay9maWxlLmMJMjAwNi0wMi0yMSAwODozNzo0Ny4wMDAwMDAwMDAgLTA3MDAKK0BAIC0yMyw2ICsyMywxMCBAQAorICAgICAgICAjdW5kZWYgX19LRVJORUxfXworICNlbmRpZgorIAorKyNpZm5kZWYgX19zOAorKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSA8bGludXgvbXNkb3NfZnMuaD4KKyAKKyAjaW5jbHVkZSAiY29tbW9uLmgiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvZml4X3BvcHVsYXRlZF9kb3Nmc19jcmVhdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9maXhfcG9wdWxhdGVkX2Rvc2ZzX2NyZWF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkN2Y3MzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvZml4X3BvcHVsYXRlZF9kb3Nmc19jcmVhdGlvbi5wYXRjaApAQCAtMCwwICsxLDQ4OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1RoaXMgcGF0Y2ggZml4ZXMgcG9wdWxhdGVkIGRvc2ZzIGltYWdlIGNyZWF0aW9uIHdpdGggZGlyZWN0b3J5IAorc3RydWN0dXJlcy4gRWFybGllciBpdCB3YXMgY2F1c2luZyBzZWdmYXVsdDsgYW5kIG9ubHkgaW1hZ2UgCitwb3B1bGF0aW9uIHdpdGggbm8gc3ViZGlyZWN0b3JpZXMgd2FzIHdvcmtpbmcuCisKK0lzc3VlcyBmaXhlZDoKKzEuIChkaXItPmNvdW50ID09IGRpci0+ZW50cmllcykgY2hlY2sgd2FzIG9ubHkgbmVlZGVkIGZvciByb290IAorICAgZGlyZWN0b3J5IGVudHJpZXMuIEFuZCB0aGlzIGNoZWNrIGlzIHdyb25nIGZvciBub24tcm9vdCAKKyAgIGRpcmVjdG9yaWVzLgorMi4gRm9yIGVhY2ggZGlyIGVudHJ5IDIgZGlyLT50YWJsZSBlbnRyaWVzIHdlcmUgbmVlZGVkLCBvbmUgZm9yIAorICAgdGhlIGZpbGUvZGlyIGFuZCAybmQgZm9yIGxvbmcgZmlsZSBuYW1lIHN1cHBvcnQuIEVhcmxpZXIgbG9uZworICAgbmFtZSBzdXBwb3J0IHdhcyBhZGRlZCBmb3IgZmlsZW5hbWVzIGJ1dCB0aGUgMm5kIGVudHJ5IAorICAgYWxsb2NhdGlvbiwgaW5pdGlhbGl6YXRpb24gJiBjb3VudGluZyB3YXMgbWlzc2VkLgorMy4gVGhlIG1lbW9yeSBjbGVhcmluZyB3YXMgbWlzc2VkIGF0IHRoZSBjb2RlIHBhdGggYWZ0ZXIgZGlyLT50YWJsZSAKKyAgIG1lbXJveSBhbGxvY2F0aW9uLgorNC4gQWRkIGVudHJpZXMgZm9yIC4gJiAuLiBkaXJlY3RvcmllcyBpbiBhbGwgbm9uLXJvb3QgZGlyZWN0b3JpZXMuCis1LiBUaGUgLiBkaXJlY3RvcnkgcG9pbnRzIHRvIHRoZSBjb3JyZWN0IGVudHJ5IGluIGZhdCBub3cuCis2LiBBbGwgZGlyZWN0b3JpeSBlbnRyaWVzJyBzaXplIHdhcyBub3QgemVybyBhcyByZXF1aXJlZCBmb3IgZG9zZnNjaywKKyAgIE5vdyBhbGwgZGlyZWN0b3J5IGVudHJpZXMnIHNpemUgaXMgemVyby4KKworRW5oYW5jZW1lbnRzOgorMS4gQWRkZWQgc3VwcG9ydCBmb3IgbG9uZyBuYW1lcyBmb3IgZGlyZWN0b3J5IG5hbWVzLiBUaGlzIGlzIHNhbWUKKyAgIGFzIHRoZSBleGlzdGluZyBsb25nIG5hbWUgc3VwcG9ydCBmb3IgZmlsZW5hbWVzLgorMi4gQWRkZWQgZXJyb3IgbWVzc2FnZXMgZm9yIHByZXZpb3VzbHkgc2lsZW50IG1lbW9yeSBhbGxvY2F0aW9uIGFuZCAKKyAgIG90aGVyIGVycm9ycy4KKzMuIC1kIG9wdGlvbnMgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgd2l0aCBmYXQzMiwgc28gbm93IHRocm93aW5nIAorICAgYW4gZXJyb3IgZm9yIHRoYXQuCis0LiBVc2UgcHJlZGVmaW5lZCBzdHJ1Y3R1cmVzIGZyb20ga2VybmVsJ3MgbXNkb3NfZnMuaCBmaWxlLCByYXRoZXIgCisgICB0aGFuIGRlZmluaW5nIGFnYWluIGhlcmUuIEFuZCBhY2NvcmRpbmdseSBjaGFuZ2UgdGhlIG5hbWVzICYgdXNlCisgICBvZiBzdHJ1Y3R1cmUgdmFyaWFibGVzLgorCitPdXRzdGFuZGluZyBJc3N1ZXM6CisxLiBUaGUgLi4gZGlyZWN0b3J5IGVudHJ5IGRvIG5vdCBwb2ludCB0byB0aGUgcGFyZW50IG9mIGN1cnJlbnQKKyAgIGRpcmVjdG9yeS4gVGhpcyBpc3N1ZSBjYW4gYmUgZml4ZWQgYnkgcnVubmluZyBkb3Nmc2NrIC1hIGFmdGVyCisgICBpbWFnZSBjcmVhdGlvbi4KKzIuIEZvciBmaWxlcyB0aGUgZmlsZXNpemUgaXMgY29ycmVjdCwgYnV0IHRoZSBjbHVzdGVycyBzaXplIGlzIG1vcmUgCisgICB0aGFuIGl0IG5lZWRzIHRvIGJlLCB0aGlzIGFsc28gY2FuIGJlIGZpeGVkIGJ5IHJ1bm5pbmcgZG9zZnNjayAtYQorICAgYWZ0ZXIgaW1hZ2UgY3JlYXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IAorMjAxMS8xMi8xMworCisKK0luZGV4OiBkb3Nmc3Rvb2xzLTIuMTEvbWtkb3Nmcy9ta2Rvc2ZzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkb3Nmc3Rvb2xzLTIuMTEub3JpZy9ta2Rvc2ZzL21rZG9zZnMuYworKysrIGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL21rZG9zZnMuYworQEAgLTIxLDcgKzIxLDE3IEBACisgICAgSnVuZSAyMDA0IC0gSm9yZGFuIENyb3VzZSAoaW5mby5saW51eEBhbWQuY29tKQorICAgIEFkZGVkIC1kIDxkaXJlY3Rvcnk+IHN1cHBvcnQgdG8gcG9wdWxhdGUgdGhlIGltYWdlCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBBbGwgUmlnaHRzIFJlc2VydmVkCistICAgCisrCisrICAgMjAxMS0xMi0xMzogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKysgICBFbmhhbmNlZCB0aGUgLWQgPGRpcmVjdG9yeT4gc3VwcG9ydCBmb3IgcG9wdWxhdGlvbiBvZiBpbWFnZSB3aGlsZQorKyAgIGNyZWF0aW9uLiBFYXJsaWVyIHN1YmRpcmVjdG9yZXMgc3VwcG9ydCB3YXMgYnJva2VuLCBvbmx5IGZpbGVzIGluCisrICAgdGhlIHJvb3RkaXIgd2VyZSBzdXBwb3J0ZWQuIE5vdyBkaXJlY3RvcnkgaGlyYXJjaHkgaXMgc3VwcG9ydGVkLgorKyAgIEFsc28gYWRkZWQgbG9uZyBmaWxlbmFtZSBzdXBwb3J0IHRvIGRpcmVjdG9yeSBuYW1lcy4KKysgICAgIFRoZSAtZCA8ZGlyZWN0b3J5PiBvcHRpb24gKGltYWdlIHBvcHVsYXRpb24gd2hpbGUgY3JlYXRpb24pCisrICAgaXMgYnJva2VuIHdpdGggZmF0MzIuCisrICAgQ29weXJpZ2h0IChDKSAyMDExLCBJbnRlbCBDb3Jwb3JhdGlvbiwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorKworKworICAgIEZpeGVzL2FkZGl0aW9ucyBNYXkgMTk5OCBieSBSb21hbiBIb2RlaworICAgIDxSb21hbi5Ib2Rla0BpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT46CisgICAgLSBBdGFyaSBmb3JtYXQgc3VwcG9ydAorQEAgLTg2LDIzICs5NiwyMyBAQAorICMgdW5kZWYgX19LRVJORUxfXworICNlbmRpZgorIAorLSNpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCistCisrI2lmbmRlZiBfX0FTTV9TVFVCX0JZVEVPUkRFUl9IX18KKyAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorLSNpZmRlZiBfX2xlMTZfdG9fY3B1CistLyogKytyb21hbjogMi4xIGtlcm5lbCBoZWFkZXJzIGRlZmluZSB0aGVzZSBmdW5jdGlvbiwgdGhleSdyZSBwcm9iYWJseSBtb3JlCistICogZWZmaWNpZW50IHRoZW4gY29kaW5nIHRoZSBzd2FwcyBtYWNoaW5lLWluZGVwZW5kZW50bHkuICovCistI2RlZmluZSBDRl9MRV9XCV9fbGUxNl90b19jcHUKKy0jZGVmaW5lIENGX0xFX0wJX19sZTMyX3RvX2NwdQorLSNkZWZpbmUgQ1RfTEVfVwlfX2NwdV90b19sZTE2CistI2RlZmluZSBDVF9MRV9MCV9fY3B1X3RvX2xlMzIKKy0jZWxzZQorLSNkZWZpbmUgQ0ZfTEVfVyh2KSAoKCgodikgJiAweGZmKSA8PCA4KSB8ICgoKHYpID4+IDgpICYgMHhmZikpCistI2RlZmluZSBDRl9MRV9MKHYpICgoKHVuc2lnbmVkKSh2KT4+MjQpIHwgKCgodW5zaWduZWQpKHYpPj44KSYweGZmMDApIHwgXAorLSAgICAgICAgICAgICAgICgoKHVuc2lnbmVkKSh2KTw8OCkmMHhmZjAwMDApIHwgKCh1bnNpZ25lZCkodik8PDI0KSkKKysjZW5kaWYKKysKKysjaW5jbHVkZSA8bGludXgvbXNkb3NfZnMuaD4KKysKKysjdW5kZWYgQ0ZfTEVfVworKyN1bmRlZiBDRl9MRV9MCisrI3VuZGVmIENUX0xFX1cKKysjdW5kZWYgQ1RfTEVfTAorKworKyNpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCisrI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CisrI2RlZmluZSBDRl9MRV9XKHYpIGJzd2FwXzE2KHYpCisrI2RlZmluZSBDRl9MRV9MKHYpIGJzd2FwXzMyKHYpCisgI2RlZmluZSBDVF9MRV9XKHYpIENGX0xFX1codikKKyAjZGVmaW5lIENUX0xFX0wodikgQ0ZfTEVfTCh2KQorLSNlbmRpZiAvKiBkZWZpbmVkKF9fbGUxNl90b19jcHUpICovCisgICAgIAorICNlbHNlCisgCitAQCAtMjUzLDMzICsyNjMsNiBAQCBzdHJ1Y3QgZmF0MzJfZnNpbmZvIHsKKyAgIF9fdTMyCQlyZXNlcnZlZDJbNF07CisgfTsKKyAKKy0vKiBUaGlzIHN0b3JlcyB1cCB0byAxMyBjaGFycyBvZiB0aGUgbmFtZSAqLworLQorLXN0cnVjdCBtc2Rvc19kaXJfc2xvdCB7CistICAgICAgICBfX3U4ICAgIGlkOyAgICAgICAgICAgICAvKiBzZXF1ZW5jZSBudW1iZXIgZm9yIHNsb3QgKi8KKy0gICAgICAgIF9fdTggICAgbmFtZTBfNFsxMF07ICAgIC8qIGZpcnN0IDUgY2hhcmFjdGVycyBpbiBuYW1lICovCistICAgICAgICBfX3U4ICAgIGF0dHI7ICAgICAgICAgICAvKiBhdHRyaWJ1dGUgYnl0ZSAqLworLSAgICAgICAgX191OCAgICByZXNlcnZlZDsgICAgICAgLyogYWx3YXlzIDAgKi8KKy0gICAgICAgIF9fdTggICAgYWxpYXNfY2hlY2tzdW07IC8qIGNoZWNrc3VtIGZvciA4LjMgYWxpYXMgKi8KKy0gICAgICAgIF9fdTggICAgbmFtZTVfMTBbMTJdOyAgIC8qIDYgbW9yZSBjaGFyYWN0ZXJzIGluIG5hbWUgKi8KKy0gICAgICAgIF9fdTE2ICAgc3RhcnQ7ICAgICAgICAgIC8qIHN0YXJ0aW5nIGNsdXN0ZXIgbnVtYmVyLCAwIGluIGxvbmcgc2xvdHMgKi8KKy0gICAgICAgIF9fdTggICAgbmFtZTExXzEyWzRdOyAgIC8qIGxhc3QgMiBjaGFyYWN0ZXJzIGluIG5hbWUgKi8KKy19OworLQorLXN0cnVjdCBtc2Rvc19kaXJfZW50cnkKKy0gIHsKKy0gICAgY2hhcgluYW1lWzhdLCBleHRbM107CS8qIG5hbWUgYW5kIGV4dGVuc2lvbiAqLworLSAgICBfX3U4ICAgICAgICBhdHRyOwkJCS8qIGF0dHJpYnV0ZSBiaXRzICovCistICAgIF9fdTgJbGNhc2U7CQkJLyogQ2FzZSBmb3IgYmFzZSBhbmQgZXh0ZW5zaW9uICovCistICAgIF9fdTgJY3RpbWVfbXM7CQkvKiBDcmVhdGlvbiB0aW1lLCBtaWxsaXNlY29uZHMgKi8KKy0gICAgX191MTYJY3RpbWU7CQkJLyogQ3JlYXRpb24gdGltZSAqLworLSAgICBfX3UxNgljZGF0ZTsJCQkvKiBDcmVhdGlvbiBkYXRlICovCistICAgIF9fdTE2CWFkYXRlOwkJCS8qIExhc3QgYWNjZXNzIGRhdGUgKi8KKy0gICAgX191MTYJc3RhcnRoaTsJCS8qIGhpZ2ggMTYgYml0cyBvZiBmaXJzdCBjbC4gKEZBVDMyKSAqLworLSAgICBfX3UxNgl0aW1lLCBkYXRlLCBzdGFydDsJLyogdGltZSwgZGF0ZSBhbmQgZmlyc3QgY2x1c3RlciAqLworLSAgICBfX3UzMglzaXplOwkJCS8qIGZpbGUgc2l6ZSAoaW4gYnl0ZXMpICovCistICB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKy0KKyAvKiBUaGUgImJvb3QgY29kZSIgd2UgcHV0IGludG8gdGhlIGZpbGVzeXN0ZW0uLi4gaXQgd3JpdGVzIGEgbWVzc2FnZSBhbmQKKyAgICB0ZWxscyB0aGUgdXNlciB0byB0cnkgYWdhaW4gKi8KKyAKK0BAIC0zNTYsNyArMzM5LDYgQEAgc3RhdGljIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKnJvb3RfZGlyOworIHN0YXRpYyBpbnQgc2l6ZV9yb290X2RpcjsJLyogU2l6ZSBvZiB0aGUgcm9vdCBkaXJlY3RvcnkgaW4gYnl0ZXMgKi8KKyBzdGF0aWMgaW50IHNlY3RvcnNfcGVyX2NsdXN0ZXIgPSAwOwkvKiBOdW1iZXIgb2Ygc2VjdG9ycyBwZXIgZGlzayBjbHVzdGVyICovCisgc3RhdGljIGludCByb290X2Rpcl9lbnRyaWVzID0gMDsJLyogTnVtYmVyIG9mIHJvb3QgZGlyZWN0b3J5IGVudHJpZXMgKi8KKy1zdGF0aWMgaW50IHJvb3RfZGlyX251bV9lbnRyaWVzID0gMDsKKyBzdGF0aWMgaW50IGxhc3RfY2x1c3Rlcl93cml0dGVuID0gMDsKKyAKKyBzdGF0aWMgY2hhciAqYmxhbmtfc2VjdG9yOwkJLyogQmxhbmsgc2VjdG9yIC0gYWxsIHplcm9zICovCitAQCAtMTMxNSw3ICsxMjk3LDcgQEAgc2V0dXBfdGFibGVzICh2b2lkKQorICAgICAgIGRlLT5kYXRlID0gQ1RfTEVfVygodW5zaWduZWQgc2hvcnQpKGN0aW1lLT50bV9tZGF5ICsKKyAJCQkJCSAgKChjdGltZS0+dG1fbW9uKzEpIDw8IDUpICsKKyAJCQkJCSAgKChjdGltZS0+dG1feWVhci04MCkgPDwgOSkpKTsKKy0gICAgICBkZS0+Y3RpbWVfbXMgPSAwOworKyAgICAgIGRlLT5jdGltZV9jcyA9IDA7CisgICAgICAgZGUtPmN0aW1lID0gZGUtPnRpbWU7CisgICAgICAgZGUtPmNkYXRlID0gZGUtPmRhdGU7CisgICAgICAgZGUtPmFkYXRlID0gZGUtPmRhdGU7CitAQCAtMTQ1MSwxNiArMTQzMywyMyBAQCB3cml0ZV90YWJsZXMgKHZvaWQpCisgCisgLyogQWRkIGEgZmlsZSB0byB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBlbnRyeSwgYW5kIGFsc28gd3JpdGUgaXQgaW50byB0aGUgaW1hZ2UgKi8KKyAKKy1zdGF0aWMgdm9pZCBjb3B5X2ZpbGVuYW1lKGNoYXIgKmZpbGVuYW1lLCBjaGFyICpiYXNlLCBjaGFyICpleHQpIHsKKytzdGF0aWMgdm9pZCBjb3B5X2ZpbGVuYW1lKGNoYXIgKmZpbGVuYW1lLCBjaGFyICpkb3NfbmFtZSkgeworICAgCisgICBjaGFyICpjaCA9IGZpbGVuYW1lOworICAgaW50IGksIGxlbjsKKyAKKy0gIG1lbXNldChiYXNlLCAweDIwLCA4KTsKKy0gIG1lbXNldChleHQsIDB4MjAsIDMpOworKyAgaWYgKCFzdHJjbXAoZmlsZW5hbWUsICIuIikpIHsKKysgICAgc3RybmNweShkb3NfbmFtZSwgTVNET1NfRE9ULCBNU0RPU19OQU1FKTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgaWYgKCFzdHJjbXAoZmlsZW5hbWUsICIuLiIpKSB7CisrICAgIHN0cm5jcHkoZG9zX25hbWUsIE1TRE9TX0RPVERPVCwgTVNET1NfTkFNRSk7CisrICAgIHJldHVybjsKKysgIH0KKysgIG1lbXNldChkb3NfbmFtZSwgMHgyMCwgTVNET1NfTkFNRSk7CisgICAKKyAgIGZvcihsZW4gPSAwIDsgKmNoICYmICpjaCAhPSAnLic7IGNoKyspIHsKKy0gICAgYmFzZVtsZW4rK10gPSB0b3VwcGVyKCpjaCk7CisrICAgIGRvc19uYW1lW2xlbisrXSA9IHRvdXBwZXIoKmNoKTsKKyAgICAgaWYgKGxlbiA9PSA4KSBicmVhazsKKyAgIH0KKyAgIAorQEAgLTE0NjgsNyArMTQ1Nyw3IEBAIHN0YXRpYyB2b2lkIGNvcHlfZmlsZW5hbWUoY2hhciAqZmlsZW5hbWUKKyAgIGlmICgqY2gpIGNoKys7CisgICAKKyAgIGZvcihsZW4gPSAwIDsgKmNoOyBjaCsrKSB7CistICAgIGV4dFtsZW4rK10gPSB0b3VwcGVyKCpjaCk7CisrICAgIGRvc19uYW1lWzggKyBsZW4rK10gPSB0b3VwcGVyKCpjaCk7CisgICAgIGlmIChsZW4gPT0gMykgYnJlYWs7CisgICB9CisgfQorQEAgLTE1NTEsNyArMTU0MCw3IEBAIHN0YXRpYyBpbnQgYWRkX2ZpbGUoY2hhciAqZmlsZW5hbWUsIHN0cnUKKyAgIGludCBzdGFydDsKKyAgIGludCB1c2Vkc2VjLCB0b3RhbHNlYzsKKyAKKy0gIGNoYXIgbmFtZTgzWzhdLCBleHQ4M1szXTsKKysgIGNoYXIgZG9zX25hbWVbTVNET1NfTkFNRSsxXTsKKyAKKyAgIHN0cnVjdCBtc2Rvc19kaXJfc2xvdCAqc2xvdDsKKyAgIGludCBpOworQEAgLTE1NjIsMjMgKzE1NTEsMjIgQEAgc3RhdGljIGludCBhZGRfZmlsZShjaGFyICpmaWxlbmFtZSwgc3RydQorICAgaWYgKGRpci0+cm9vdCkgeworICAgICBpZiAoZGlyLT5jb3VudCA9PSBkaXItPmVudHJpZXMpIHsKKyAgICAgICBwcmludGYoIkVycm9yIC0gdG9vIG1hbnkgZGlyZWN0b3J5IGVudHJpZXNcbiIpOworKyAgICAgIHJldHVybjsKKyAgICAgfQorICAgfQorICAgZWxzZSB7CistICAgIGlmIChkaXItPmNvdW50ID09IGRpci0+ZW50cmllcykgeworLSAgICAgIGlmICghZGlyLT50YWJsZSkgCistCWRpci0+dGFibGUgPSAKKy0JICAoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKy0gICAgICBlbHNlIHsKKy0JZGlyLT50YWJsZSA9IAorLQkgIChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIHJlYWxsb2MoZGlyLT50YWJsZSwgKGRpci0+ZW50cmllcyArIDEpICogCistCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CistCistCW1lbXNldCgmZGlyLT50YWJsZVtkaXItPmVudHJpZXNdLCAwLCBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworLSAgICAgIH0KKy0KKy0gICAgICBkaXItPmVudHJpZXMrKzsKKy0gICAgfQorKyAgICAvKiAyIGVudHJpZXMsIG9uZSBleHRyYSBmb3IgbG9uZyBmaWxlbmFtZSAqLworKyAgICBpZiAoIWRpci0+dGFibGUpCisrICAgICAgZGlyLT50YWJsZSA9CisrICAgICAgICAoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqKSBtYWxsb2MoMiAqIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CisrICAgIGVsc2UKKysgICAgICBkaXItPnRhYmxlID0KKysgICAgICAgIChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIHJlYWxsb2MoZGlyLT50YWJsZSwgMiAqIChkaXItPmVudHJpZXMgKyAxKSAqCisrICAgICAgCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysgICAgaWYgKCFkaXItPnRhYmxlKQorKyAgICAgIHByaW50ZigiRXJyb3IgLSByZWFsbG9jIGZhaWxlZFxuIik7CisrICAgIG1lbXNldCgmZGlyLT50YWJsZVtkaXItPmVudHJpZXNdLCAwLCAyICogc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysgICAgZGlyLT5lbnRyaWVzICs9IDI7CisgICB9CisgCisgICBpbmZpbGUgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSwgMCk7CitAQCAtMTYxMSwxMyArMTU5OSwxMyBAQCBzdGF0aWMgaW50IGFkZF9maWxlKGNoYXIgKmZpbGVuYW1lLCBzdHJ1CisgICAgIHJldHVybiAtMTsKKyAgIH0KKyAKKy0gIHByaW50ZigiQUREICVzXG4iLCBmaWxlbmFtZSk7CisrICBwcmludGYoIkFERCBGSUxFICVzXG4iLCBmaWxlbmFtZSk7CisgCisgICAvKiBHcmFiIHRoZSBiYXNlbmFtZSBvZiB0aGUgZmlsZSAqLworICAgYmFzZSA9IGJhc2VuYW1lKGZpbGVuYW1lKTsKKyAgIAorLSAgLyogRXh0cmFjdCBvdXQgdGhlIDguMyBuYW1lICovCistICBjb3B5X2ZpbGVuYW1lKGJhc2UsIG5hbWU4MywgZXh0ODMpOworKyAgLyogY29udmVydCBmb3IgZG9zIGZhdCBzdHJ1Y3R1cmUgICovCisrICBjb3B5X2ZpbGVuYW1lKGJhc2UsIGRvc19uYW1lKTsKKyAKKyAgIC8qIE1ha2UgYW4gZXh0ZW5kZWQgbmFtZSBzbG90ICovCisgCitAQCAtMTYyOSwxMiArMTYxNyw5IEBAIHN0YXRpYyBpbnQgYWRkX2ZpbGUoY2hhciAqZmlsZW5hbWUsIHN0cnUKKyAgIAorICAgc2xvdC0+YWxpYXNfY2hlY2tzdW0gPSAwOworICAgCistICBmb3IoaSA9IDA7IGkgPCA4OyBpKyspIAorLSAgICBzbG90LT5hbGlhc19jaGVja3N1bSA9ICgoKHNsb3QtPmFsaWFzX2NoZWNrc3VtJjEpPDw3KXwoKHNsb3QtPmFsaWFzX2NoZWNrc3VtJjB4ZmUpPj4xKSkgKyBuYW1lODNbaV07CisrICBmb3IoaSA9IDA7IGkgPCBNU0RPU19OQU1FOyBpKyspCisrICAgIHNsb3QtPmFsaWFzX2NoZWNrc3VtID0gKCgoc2xvdC0+YWxpYXNfY2hlY2tzdW0mMSk8PDcpfCgoc2xvdC0+YWxpYXNfY2hlY2tzdW0mMHhmZSk+PjEpKSArIGRvc19uYW1lW2ldOworICAgCistICBmb3IoaSA9IDA7IGkgPCAzOyBpKyspIAorLSAgICBzbG90LT5hbGlhc19jaGVja3N1bSA9ICgoKHNsb3QtPmFsaWFzX2NoZWNrc3VtJjEpPDw3KXwoKHNsb3QtPmFsaWFzX2NoZWNrc3VtJjB4ZmUpPj4xKSkgKyBleHQ4M1tpXTsKKy0KKyAgIHAgPSBiYXNlOworIAorICAgY29weV9uYW1lKHNsb3QtPm5hbWUwXzQsIDEwLCAmcCk7CitAQCAtMTY0NSw4ICsxNjMwLDcgQEAgc3RhdGljIGludCBhZGRfZmlsZShjaGFyICpmaWxlbmFtZSwgc3RydQorICAgLyogR2V0IHRoZSBlbnRyeSBmcm9tIHRoZSByb290IGZpbGVzeXRlbSAqLworICAgZW50cnkgPSAmZGlyLT50YWJsZVtkaXItPmNvdW50KytdOworIAorLSAgc3RybmNweShlbnRyeS0+bmFtZSwgbmFtZTgzLCA4KTsKKy0gIHN0cm5jcHkoZW50cnktPmV4dCwgZXh0ODMsIDMpOworKyAgc3RybmNweShlbnRyeS0+bmFtZSwgZG9zX25hbWUsIE1TRE9TX05BTUUpOworIAorIAorICAgLyogSWYgdGhlIHVzZXIgaGFzIGl0IHJlYWQgb25seSwgdGhlbiBhZGQgcmVhZCBvbmx5IHRvIHRoZSBpbmNvbWluZworQEAgLTE2NjUsNyArMTY0OSw3IEBAIHN0YXRpYyBpbnQgYWRkX2ZpbGUoY2hhciAqZmlsZW5hbWUsIHN0cnUKKyAJCQkJICAgICAgKChjdGltZS0+dG1fbW9uKzEpIDw8IDUpICsKKyAJCQkJICAgICAgKChjdGltZS0+dG1feWVhci04MCkgPDwgOSkpKTsKKyAKKy0gIGVudHJ5LT5jdGltZV9tcyA9IDA7CisrICBlbnRyeS0+Y3RpbWVfY3MgPSAwOworICAgZW50cnktPmN0aW1lID0gZW50cnktPnRpbWU7CisgICBlbnRyeS0+Y2RhdGUgPSBlbnRyeS0+ZGF0ZTsKKyAgIGVudHJ5LT5hZGF0ZSA9IGVudHJ5LT5kYXRlOworQEAgLTE3MTEsNiArMTY5NSw3IEBAIHN0YXRpYyBpbnQgYWRkX2ZpbGUoY2hhciAqZmlsZW5hbWUsIHN0cnUKKyAKKyAgZXhpdF9hZGQ6CisgICBpZiAoaW5maWxlKSBjbG9zZShpbmZpbGUpOworKyAgcmV0dXJuIDA7CisgfQorIAorIC8qIEFkZCBhIG5ldyBkaXJlY3RvcnkgdG8gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgZW50cnksIGFuZCBpbiB0dXJuIHBvcHVsYXRlIAorQEAgLTE3MjcsMTAgKzE3MTIsMTggQEAgc3RhdGljIHZvaWQgYWRkX2RpcmVjdG9yeShjaGFyICpmaWxlbmFtZQorICAgc3RydWN0IGRpcmVudCAqZGVudHJ5ID0gMDsKKyAgIGludCByZW1haW47CisgICBjaGFyICpkYXRhOworKyAgY2hhciAqYmFzZTsKKysgIGNoYXIgZG9zX25hbWVbTVNET1NfTkFNRSsxXTsKKysgIHN0cnVjdCBtc2Rvc19kaXJfc2xvdCAqc2xvdDsKKysgIGludCBpOworKyAgY2hhciAqcDsKKyAKKyAgIC8qIElmIHRoZSBkaXJlY3RvcnkgZG9lc24ndCBleGlzdCAqLworLSAgaWYgKCFyZGRpcikgcmV0dXJuOworLSAgCisrICBpZiAoIXJkZGlyKSB7CisrICAgIHByaW50ZigiRXJyb3IgLSBkaXIgZG9lcyBub3QgZXhpc3Q6ICVzXG4iLCBmaWxlbmFtZSk7CisrICAgIHJldHVybjsKKysgIH0KKysKKyAgIGlmIChkaXItPnJvb3QpIHsKKyAgICAgaWYgKGRpci0+Y291bnQgPT0gZGlyLT5lbnRyaWVzKSB7CisgICAgICAgcHJpbnRmKCJFcnJvciAtIHRvbyBtYW55IGRpcmVjdG9yeSBlbnRyaWVzXG4iKTsKK0BAIC0xNzM4LDI4ICsxNzMxLDU4IEBAIHN0YXRpYyB2b2lkIGFkZF9kaXJlY3RvcnkoY2hhciAqZmlsZW5hbWUKKyAgICAgfQorICAgfQorICAgZWxzZSB7CistICAgIGlmIChkaXItPmNvdW50ID09IGRpci0+ZW50cmllcykgeworLSAgICAgIGlmICghZGlyLT50YWJsZSkgCistCWRpci0+dGFibGUgPSAoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKy0gICAgICBlbHNlIHsKKy0JZGlyLT50YWJsZSA9IChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIHJlYWxsb2MoZGlyLT50YWJsZSwgKGRpci0+ZW50cmllcyArIDEpICogCistCQkJCQkJCXNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CistCistCS8qIFplcm8gaXQgb3V0IHRvIGF2b2lkIGlzc3VlcyAqLworLQltZW1zZXQoJmRpci0+dGFibGVbZGlyLT5lbnRyaWVzXSwgMCwgc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKy0gICAgICB9CistCWRpci0+ZW50cmllcysrOworKyAgICAvKiAyIGVudHJpZXMsIG9uZSBleHRyYSBmb3IgbG9uZyBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgKi8KKysgICAgaWYgKCFkaXItPnRhYmxlKQorKyAgICAgIGRpci0+dGFibGUgPSAoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqKSBtYWxsb2MoMiAqIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CisrICAgIGVsc2UKKysgICAgICBkaXItPnRhYmxlID0gKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKikgcmVhbGxvYyhkaXItPnRhYmxlLCAyICogKGRpci0+ZW50cmllcyArIDEpICoKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysgICAgaWYgKCFkaXItPnRhYmxlKSB7CisrICAgICAgcHJpbnRmKCJFcnJvciAtIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisrICAgICAgZ290byBleGl0X2FkZF9kaXI7CisgICAgIH0KKysgICAgLyogWmVybyBpdCBvdXQgdG8gYXZvaWQgaXNzdWVzICovCisrICAgIG1lbXNldCgmZGlyLT50YWJsZVtkaXItPmVudHJpZXNdLCAwLCAyICogc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysgICAgZGlyLT5lbnRyaWVzICs9IDI7CisgICB9CisgCisrICBwcmludGYoIkFERCBESVIgJXNcbiIsIGZpbGVuYW1lKTsKKyAgIC8qIE5vdywgY3JlYXRlIGEgbmV3IGRpcmVjdG9yeSBlbnRyeSBmb3IgdGhlIG5ldyBkaXJlY3RvcnkgKi8KKyAgIG5ld2RpciA9IChzdHJ1Y3QgZGlyX2VudHJ5ICopIGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGRpcl9lbnRyeSkpOworLSAgaWYgKCFuZXdkaXIpIGdvdG8gZXhpdF9hZGRfZGlyOworKyAgaWYgKCFuZXdkaXIpIHsKKysgICAgcHJpbnRmKCJFcnJvciAtIGNhbGxvYyBmYWlsZWRcbiIpOworKyAgICBnb3RvIGV4aXRfYWRkX2RpcjsKKysgIH0KKysKKysgIC8qIEdyYWIgdGhlIGJhc2VuYW1lIG9mIHRoZSBmaWxlICovCisrICBiYXNlID0gYmFzZW5hbWUoZmlsZW5hbWUpOworKworKyAgLyogY29udmVydCBmb3IgZG9zIHN0cnVjdHVyZSAgKi8KKysgIGNvcHlfZmlsZW5hbWUoYmFzZSwgZG9zX25hbWUpOworKworKyAgLyogTWFrZSBhbiBleHRlbmRlZCBuYW1lIHNsb3QgKi8KKysgIHNsb3QgPSAoc3RydWN0IG1zZG9zX2Rpcl9zbG90ICopICZkaXItPnRhYmxlW2Rpci0+Y291bnQrK107CisrICBzbG90LT5pZCA9ICdBJzsKKysgIHNsb3QtPmF0dHIgPSAweDBGOworKyAgc2xvdC0+cmVzZXJ2ZWQgPSAwOworKyAgc2xvdC0+c3RhcnQgPSAwOworKworKyAgc2xvdC0+YWxpYXNfY2hlY2tzdW0gPSAwOworIAorKyAgZm9yIChpID0gMDsgaSA8IE1TRE9TX05BTUU7IGkrKykKKysgICAgc2xvdC0+YWxpYXNfY2hlY2tzdW0gPSAoKChzbG90LT5hbGlhc19jaGVja3N1bSYxKTw8Nyl8KChzbG90LT5hbGlhc19jaGVja3N1bSYweGZlKT4+MSkpICsgZG9zX25hbWVbaV07CisrCisrICBwID0gYmFzZTsKKysKKysgIGNvcHlfbmFtZShzbG90LT5uYW1lMF80LCAxMCwgJnApOworKyAgY29weV9uYW1lKHNsb3QtPm5hbWU1XzEwLCAxMiwgJnApOworKyAgY29weV9uYW1lKHNsb3QtPm5hbWUxMV8xMiwgNCwgJnApOworKworKyAgLyogR2V0IHRoZSBlbnRyeSBmcm9tIHRoZSByb290IGZpbGVzeXRlbSAqLworICAgZW50cnkgPSAmZGlyLT50YWJsZVtkaXItPmNvdW50KytdOworIAorLSAgc3RybmNweShlbnRyeS0+bmFtZSwgYmFzZW5hbWUoZmlsZW5hbWUpLCBzaXplb2YoZW50cnktPm5hbWUpKTsKKy0gIAorKyAgc3RybmNweShlbnRyeS0+bmFtZSwgZG9zX25hbWUsIE1TRE9TX05BTUUpOworKworICAgZW50cnktPmF0dHIgPSBBVFRSX0RJUjsKKyAgIGN0aW1lID0gbG9jYWx0aW1lKCZjcmVhdGVfdGltZSk7CisgCitAQCAtMTc3MCwyNSArMTc5MywzMiBAQCBzdGF0aWMgdm9pZCBhZGRfZGlyZWN0b3J5KGNoYXIgKmZpbGVuYW1lCisgCQkJCSAgICAgICgoY3RpbWUtPnRtX21vbisxKSA8PCA1KSArCisgCQkJCSAgICAgICgoY3RpbWUtPnRtX3llYXItODApIDw8IDkpKSk7CisgCistICBlbnRyeS0+Y3RpbWVfbXMgPSAwOworKyAgZW50cnktPmN0aW1lX2NzID0gMDsKKyAgIGVudHJ5LT5jdGltZSA9IGVudHJ5LT50aW1lOworICAgZW50cnktPmNkYXRlID0gZW50cnktPmRhdGU7CisgICBlbnRyeS0+YWRhdGUgPSBlbnRyeS0+ZGF0ZTsKKyAKKyAgIC8qIE5vdywgcmVhZCB0aGUgZGlyZWN0b3J5ICovCisgCistICB3aGlsZSgoZGVudHJ5ID0gcmVhZGRpcihyZGRpcikpKSB7CisrCisrICB3aGlsZSgoYmFzZVswXSAhPSAnLicpICYmIChkZW50cnkgPSByZWFkZGlyKHJkZGlyKSkpIHsKKyAgICAgc3RydWN0IHN0YXQgc3Q7CisgICAgIGNoYXIgKmJ1ZmZlcjsKKy0gICAgCistICAgIGlmICghc3RyY21wKGRlbnRyeS0+ZF9uYW1lLCAiLiIpIHx8ICFzdHJjbXAoZGVudHJ5LT5kX25hbWUsICIuLiIpKQorLSAgICAgIGNvbnRpbnVlOworIAorLSAgICAvKiBET1Mgd291bGRuJ3QgbGlrZSBhIHR5cGljYWwgdW5peCAuIChkb3QpIGZpbGUsIHNvIHdlIHNraXAgdGhvc2UgdG9vICovCistICAgIGlmIChkZW50cnktPmRfbmFtZVswXSA9PSAnLicpIGNvbnRpbnVlOworKyAgICBpZiAoZGVudHJ5LT5kX25hbWVbMF0gPT0gJy4nKSB7CisrICAgICAgICAvKiBkb3MgYWxzbyBoYXMgLiAmIC4uIGRpcmVjdG9yeSBlbnRyaWVzICovCisrICAgICAgaWYgKCEgKCghc3RyY21wKGRlbnRyeS0+ZF9uYW1lLCAiLiIpKSB8fCAoIXN0cmNtcChkZW50cnktPmRfbmFtZSwgIi4uIikpKSkgeworKyAgICAgICAgLyogaWdub3JlIG90aGVyIC4qIGZpbGVzICovCisrICAgICAgICBwcmludGYoIkVycm9yIC0gRmlsZS9EaXIgbmFtZSBpcyBub3QgZG9zIGNvbXBhdGlibGUsIGlnbm9yZWQ6ICVzXG4iLCBkZW50cnktPmRfbmFtZSk7CisrICAgICAgICBjb250aW51ZTsKKysgICAgICB9CisrICAgIH0KKyAKKyAgICAgYnVmZmVyID0gbWFsbG9jKHN0cmxlbihmaWxlbmFtZSkgKyBzdHJsZW4oZGVudHJ5LT5kX25hbWUpICsgMyk7CistICAgIGlmICghYnVmZmVyKSBjb250aW51ZTsKKysgICAgaWYgKCFidWZmZXIpIHsKKysgICAgICAgIHByaW50ZigiRXJyb3IgLSBtYWxsb2MgZmFpbGVkXG4iKTsKKysgICAgICAgIGdvdG8gZXhpdF9hZGRfZGlyOworKyAgICB9CisgICAgIAorICAgICBzcHJpbnRmKGJ1ZmZlciwgIiVzLyVzIiwgZmlsZW5hbWUsIGRlbnRyeS0+ZF9uYW1lKTsKKyAgICAgaWYgKCFzdGF0KGJ1ZmZlciwgJnN0KSkgeworQEAgLTE4MDYsMTEgKzE4MzYsMjMgQEAgc3RhdGljIHZvaWQgYWRkX2RpcmVjdG9yeShjaGFyICpmaWxlbmFtZQorICAgLyogTm93IHRoYXQgdGhlIGVudGlyZSBkaXJlY3RvcnkgaGFzIGJlZW4gd3JpdHRlbiwgZ28gYWhlYWQgYW5kIHdyaXRlIHRoZSBkaXJlY3RvcnkKKyAgICAgIGVudHJ5IGFzIHdlbGwgKi8KKyAKKysgIGVudHJ5LT5zaXplID0gMDsgLyogYSBkaXJlY3RvcnkgaGFzIHplcm8gc2l6ZSAqLworKworKyAgaWYgKGJhc2VbMF0gPT0gJy4nKSAgeyAvKiAuICYgLi4gcG9pbnQgdG8gcGFyZW50J3MgY2x1c3RlciAqLworKyAgICBnb3RvIGV4aXRfYWRkX2RpcjsKKysgIH0KKysKKyAgIGVudHJ5LT5zdGFydCA9IENUX0xFX1cobGFzdF9jbHVzdGVyX3dyaXR0ZW4pOworICAgZW50cnktPnN0YXJ0aGkgPSBDVF9MRV9XKChsYXN0X2NsdXN0ZXJfd3JpdHRlbiAmIDB4RkZGRjAwMDApID4+IDE2KTsgCistICBlbnRyeS0+c2l6ZSA9IG5ld2Rpci0+Y291bnQgKiBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSk7CisrCisrLyogLiBkaXIgc3RhcnQgcG9pbnRzIHRvIHBhcmVudCAqLworKyAgbmV3ZGlyLT50YWJsZVsxXS5zdGFydCA9IGVudHJ5LT5zdGFydDsKKysvKiAuLiBkaXIgcG9pbnRzIHRvIHBhcmVudCBvZiBwYXJlbnQqLworKy8qIC4uIGRpciBzdGFydCBpcyBub3Qgc2V0IHlldCwgd291bGQgbmVlZCBtb3JlIGNoYW5nZXMgdG8gdGhlIGNvZGUsCisrICogYnV0IGRvc2ZzY2sgY2FuIGZpeCB0aGVzZSAuLiBlbnRyeSBzdGFydCBwb2ludGVycyBjb3JyZWN0bHkgKi8KKysKKysgIHJlbWFpbiA9IG5ld2Rpci0+Y291bnQgKiBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSk7CisgICAKKy0gIHJlbWFpbiA9IGVudHJ5LT5zaXplOworICAgZGF0YSA9IChjaGFyICopIG5ld2Rpci0+dGFibGU7CisgCisgICB3aGlsZShyZW1haW4pIHsKK0BAIC0xODU4LDYgKzE5MDAsNyBAQCBzdGF0aWMgdm9pZCBhZGRfcm9vdF9kaXJlY3RvcnkoY2hhciAqZGlyCisgCisgICBpZiAoIW5ld2RpcikgeworICAgICBjbG9zZWRpcihkaXIpOworKyAgICBwcmludGYoIkVycm9yIC0gY2FsbG9jIGZhaWxlZCFcbiIpOworICAgICByZXR1cm47CisgICB9CisgCitAQCAtMTg3Nyw3ICsxOTIwLDEwIEBAIHN0YXRpYyB2b2lkIGFkZF9yb290X2RpcmVjdG9yeShjaGFyICpkaXIKKyAgICAgaWYgKGVudHJ5LT5kX25hbWVbMF0gPT0gJy4nKSBjb250aW51ZTsKKyAgCisgICAgIGJ1ZmZlciA9IG1hbGxvYyhzdHJsZW4oZGlybmFtZSkgKyBzdHJsZW4oZW50cnktPmRfbmFtZSkgKyAzKTsKKy0gICAgaWYgKCFidWZmZXIpIGNvbnRpbnVlOworKyAgICBpZiAoIWJ1ZmZlcikgeworKyAgICAgICAgcHJpbnRmKCJFcnJvciAtIG1hbGxvYyBmYWlsZWQhXG4iKTsKKysgICAgICAgIGNvbnRpbnVlOworKyAgICB9CisgCisgICAgIHNwcmludGYoYnVmZmVyLCAiJXMvJXMiLCBkaXJuYW1lLCBlbnRyeS0+ZF9uYW1lKTsKKyAgICAgaWYgKCFzdGF0KGJ1ZmZlciwgJnN0KSkgeworQEAgLTIyNDUsNiArMjI5MSw5IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgIGlmIChjaGVjayAmJiBsaXN0ZmlsZSkJLyogQXV0byBhbmQgc3BlY2lmaWVkIGJhZCBibG9jayBoYW5kbGluZyBhcmUgbXV0dWFsbHkgKi8KKyAgICAgZGllICgiLWMgYW5kIC1sIGFyZSBpbmNvbXBhdGlibGUiKTsJCS8qIGV4Y2x1c2l2ZSBvZiBlYWNoIG90aGVyISAqLworIAorKyAgaWYgKGRpcm5hbWUgJiYgKHNpemVfZmF0ID09IDMyKSkKKysgICAgZGllICgiLWQgaXMgaW5jb21wYXRpYmxlIHdpdGggRkFUMzIiKTsKKysKKyAgIGlmICghY3JlYXRlKSB7CisgICAgIGNoZWNrX21vdW50IChkZXZpY2VfbmFtZSk7CS8qIElzIHRoZSBkZXZpY2UgYWxyZWFkeSBtb3VudGVkPyAqLworICAgICBkZXYgPSBvcGVuIChkZXZpY2VfbmFtZSwgT19SRFdSKTsJLyogSXMgaXQgYSBzdWl0YWJsZSBkZXZpY2UgdG8gYnVpbGQgdGhlIEZTIG9uPyAqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2luY2x1ZGUtbGludXgtdHlwZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvaW5jbHVkZS1saW51eC10eXBlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjVjOGNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2luY2x1ZGUtbGludXgtdHlwZXMucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorbWtkc29mcyBpcyB1c2luZyB0eXBlcyBvZiB0aGUgc3R5bGUgX191OCwgd2hpY2ggaXQgZ2V0cyB3aXRoIHNvbWUKK3ZlcnNpb25zIG9mIGxpYmMgaGVhZGVycyB2aWEgbGludXgvaGRyZWcuaCBpbmNsdWRpbmcgYXNtL3R5cGVzLmguCitOZXdlciB2ZXJzaW9uIG9mIGZlZG9yYSAoYXQgbGVhc3QpIGhhdmUgYSBoZHJlZy5oIHdoaWNoZG9lcyBub3QKK2luY2x1ZGUgYXNtL3R5cGVzLmguIFRvIHdvcmsgYXJvdW5kIHRoaXMgcGF0Y2ggbWtkb3Nmcy5jIHRvIGV4cGxpY2l0eQoraW5jbHVkZSBsaW51eC90eXBlcy5oIHdoaWNoIHdpbGwgaW4gdHVybiBwdWxsIGluIGFzbS90eXBlcy5oIHdoaWNoCitkZWZpbmVzIHRoZXNlIHZhcmlhYmxlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCitXZSdyZSB0cmFja2luZyBhbiBvbGQgcmVsZWFzZSBvZiBkb3Nmc3Rvb2xzIGR1ZSB0byBsaWNlbnNpbmcgaXNzdWVzLgorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIGRvc2ZzdG9vbHMtMi4xMC9ta2Rvc2ZzL21rZG9zZnMuY34JMjAwNi0wNy0xMiAxODo0NjoyMS4wMDAwMDAwMDAgKzEwMDAKKysrKyBkb3Nmc3Rvb2xzLTIuMTAvbWtkb3Nmcy9ta2Rvc2ZzLmMJMjAwNi0wNy0xMiAxODo0NjoyMS4wMDAwMDAwMDAgKzEwMDAKK0BAIC02MCw2ICs2MCw3IEBACisgI2luY2x1ZGUgIi4uL3ZlcnNpb24uaCIKKyAKKyAjaW5jbHVkZSA8ZmNudGwuaD4KKysjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KKyAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyAjaW5jbHVkZSA8bGludXgvZmQuaD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ta2Rvc2ZzLWJvb3Rjb2RlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL21rZG9zZnMtYm9vdGNvZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUyMWJlZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ta2Rvc2ZzLWJvb3Rjb2RlLnBhdGNoCkBAIC0wLDAgKzEsMjQxIEBACitBZGQgb3B0aW9uIHRvIHJlYWQgaW4gYm9vdGNvZGUgZnJvbSBhIGZpbGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorV2UncmUgdHJhY2tpbmcgYW4gb2xkIHJlbGVhc2Ugb2YgZG9zZnN0b29scyBkdWUgdG8gbGljZW5zaW5nIGlzc3Vlcy4KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK0luZGV4OiBkb3Nmc3Rvb2xzLTIuMTEvbWtkb3Nmcy9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkb3Nmc3Rvb2xzLTIuMTEub3JpZy9ta2Rvc2ZzL0NoYW5nZUxvZwkxOTk3LTA2LTE4IDEwOjA5OjM4LjAwMDAwMDAwMCArMDAwMAorKysrIGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL0NoYW5nZUxvZwkyMDExLTEyLTA2IDEyOjE0OjIzLjYzNDAxMTU1OCArMDAwMAorQEAgLTEsMyArMSwxNCBAQAorKzE5dGggSnVuZSAyMDAzCQkJU2FtIEJpbmduZXIgKHNhbUBiaW5nbmVyLmNvbSkKKysKKysJQWRkZWQgb3B0aW9uIHRvIHJlYWQgaW4gYm9vdGNvZGUgZnJvbSBhIGZpbGUgc28gdGhhdCBpZiB5b3UgaGF2ZQorKwlmb3IgZXhhbXBsZSBXaW5kb3dzIDIwMDAgYm9vdCBjb2RlLCB5b3UgY2FuIGhhdmUgaXQgd3JpdGUgdGhhdAorKwlhcyB0aGUgYm9vdGNvZGUuICBUaGlzIGlzIGEgZHVtcCBvZiB0aGUgYmVoaW5uaW5nIG9mIGEgcGFydGl0aW9uCisrCWdlbmVyYWxseSA1MTIgYnl0ZXMsIGJ1dCBjYW4gYmUgdXAgdG8gcmVzZXJ2ZWQgc2VjdG9ycyo1MTIgYnl0ZXMuCisrICAgICAgICBBbHNvIHdyaXRlcyAweDgwIGFzIHRoZQlCSU9TIGRyaXZlIG51bWJlciBpZiB3ZSBhcmUgZm9ybWF0dGluZyBhCisrCWhhcmQgZHJpdmUsIGFuZCBzZXRzIHRoZSBudW1iZXIgb2YgaGlkZGVuIHNlY3RvcnMgdG8gYmUgdGhlCisrCW51bWJlciBvZiBzZWN0b3JzIGluIG9uZSB0cmFjay4gVGhlc2Ugd2VyZSByZXF1aXJlZCBzbyB0aGF0IERPUworKwljb3VsZCBib290IHVzaW5nIHRoZSBib290Y29kZS4KKysKKyAyOHRoIEphbnVhcnkgMTk5NQkJSC4gUGV0ZXIgQW52aW4gKGhwYUB5Z2dkcmFzaWwuY29tKQorIAorIAlCZXR0ZXIgYWxnb3JpdGhtIHRvIHNlbGVjdCBjbHVzdGVyIHNpemVzIG9uIGxhcmdlIGZpbGVzeXN0ZW1zLgorSW5kZXg6IGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL21rZG9zZnMuOAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRvc2ZzdG9vbHMtMi4xMS5vcmlnL21rZG9zZnMvbWtkb3Nmcy44CTIwMDQtMDItMjUgMTk6MzY6MDcuMDAwMDAwMDAwICswMDAwCisrKysgZG9zZnN0b29scy0yLjExL21rZG9zZnMvbWtkb3Nmcy44CTIwMTEtMTItMDYgMTI6MTk6NTQuNzc3ODg4NDM0ICswMDAwCitAQCAtNDQsNiArNDQsMTAgQEAKKyAuSSBtZXNzYWdlLWZpbGUKKyBdCisgWworKy5CIFwtQgorKy5JIGJvb3Rjb2RlLWZpbGUKKytdCisrWworIC5CIFwtbgorIC5JIHZvbHVtZS1uYW1lCisgXQorQEAgLTE2NSw2ICsxNjksMTggQEAKKyBjYXJyaWFnZSByZXR1cm4tbGluZSBmZWVkIGNvbWJpbmF0aW9ucywgYW5kIHRhYnMgaGF2ZSBiZWVuIGV4cGFuZGVkLgorIElmIHRoZSBmaWxlbmFtZSBpcyBhIGh5cGhlbiAoLSksIHRoZSB0ZXh0IGlzIHRha2VuIGZyb20gc3RhbmRhcmQgaW5wdXQuIAorIC5UUAorKy5CSSBcLUIgIiBib290Y29kZS1maWxlIgorK1VzZXMgYm9vdCBtYWNoaW5lIGNvZGUgZnJvbSBmaWxlICJmaWxlIi4gIE9uIGFueSB0aGluZyBvdGhlciB0aGFuIEZBVDMyLAorK3RoaXMgb25seSB3cml0ZXMgdGhlIGZpcnN0IDMgYnl0ZXMsIGFuZCA0ODAgYnl0ZXMgZnJvbSBvZmZzZXQgM0VoLiAgT24KKytGQVQzMiwgdGhpcyB3cml0ZXMgdGhlIGZpcnN0IDMgYnl0ZXMsIDQyMCBieXRlcyBmcm9tIG9mZnNldCA1QWggdG8gYm90aAorK3ByaW1hcnkgYW5kIGJhY2t1cCBib290IHNlY3RvcnMuICBBbHNvIHdyaXRlcyBhbGwgb3RoZXIgcmVzZXJ2ZWQgc2VjdG9ycworK2V4Y2x1ZGluZyB0aGUgc2VjdG9ycyBmb2xsb3dpbmcgYm9vdCBzZWN0b3JzICh1c3VhbGx5IHNlY3RvciAyIGFuZCA3KS4KKytEb2VzIG5vdCByZXF1aXJlIHRoYXQgdGhlIGlucHV0IGZpbGUgYmUgYXMgbGFyZ2UgYXMgcmVzZXJ2ZWRfc2VjdG9ycyo1MTIuCisrVG8gbWFrZSBhIEZBVDMyIHBhcnRpdGlvbiBib290YWJsZSwgeW91IHdpbGwgbmVlZCBhdCBsZWFzdCB0aGUgZmlyc3QKKysxMyBzZWN0b3JzICg2NjU2IGJ5dGVzKS4gIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGEgcGFydGl0aW9uIGFzIHRoZSBhcmd1bWVudAorK3RvIGNsb25lIHRoZSBib290IGNvZGUgZnJvbSB0aGF0IHBhcnRpdGlvbi4KKytpLmUgbWtkb3NmcyAtQiAvZGV2L3NkYTEgL2Rldi9zZGExCisrLlRQCisgLkJJIFwtbiAiIHZvbHVtZS1uYW1lIgorIFNldHMgdGhlIHZvbHVtZSBuYW1lIChsYWJlbCkgb2YgdGhlIGZpbGVzeXN0ZW0uICBUaGUgdm9sdW1lIG5hbWUgY2FuCisgYmUgdXAgdG8gMTEgY2hhcmFjdGVycyBsb25nLiAgVGhlIGRlZmF1bHQgaXMgbm8gbGFiZWwuCitAQCAtMTk4LDggKzIxNCw5IEBACisgc2ltcGx5IHdpbGwgbm90IHN1cHBvcnQgaXQgOykKKyAuU0ggQVVUSE9SCisgRGF2ZSBIdWRzb24gLSA8ZGF2ZUBodW1idWcuZGVtb24uY28udWs+OyBtb2RpZmllZCBieSBQZXRlciBBbnZpbgorLTxocGFAeWdnZHJhc2lsLmNvbT4uIEZpeGVzIGFuZCBhZGRpdGlvbnMgYnkgUm9tYW4gSG9kZWsKKy08cm9tYW5AaG9kZWsubmV0PiBmb3IgRGViaWFuL0dOVSBMaW51eC4KKys8aHBhQHlnZ2RyYXNpbC5jb20+IGFuZCBTYW0gQmluZ25lciA8c2FtQGJpbmduZXIuY29tPi4gRml4ZXMgYW5kCisrYWRkaXRpb25zIGJ5IFJvbWFuIEhvZGVrIDxSb21hbi5Ib2Rla0BpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KKytmb3IgRGViaWFuL0dOVSBMaW51eC4KKyAuU0ggQUNLTk9XTEVER0VNRU5UUworIC5CIG1rZG9zZnMKKyBpcyBiYXNlZCBvbiBjb2RlIGZyb20KK0luZGV4OiBkb3Nmc3Rvb2xzLTIuMTEvbWtkb3Nmcy9ta2Rvc2ZzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkb3Nmc3Rvb2xzLTIuMTEub3JpZy9ta2Rvc2ZzL21rZG9zZnMuYwkyMDA1LTAzLTEyIDE2OjEyOjE2LjAwMDAwMDAwMCArMDAwMAorKysrIGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL21rZG9zZnMuYwkyMDExLTEyLTA2IDEyOjI3OjU1LjEyMTg4NjA3NiArMDAwMAorQEAgLTI0LDYgKzI0LDEyIEBACisgICAgLSBOZXcgb3B0aW9ucyAtQSwgLVMsIC1DCisgICAgLSBTdXBwb3J0IGZvciBmaWxlc3lzdGVtcyA+IDJHQgorICAgIC0gRkFUMzIgc3VwcG9ydAorKworKyAgIEZpeGVzL2FkZGl0aW9ucyBKdW5lIDIwMDMgYnkgU2FtIEJpbmduZXIKKysgICA8c2FtQGJpbmduZXIuY29tPjoKKysgICAtIEFkZCAtQiBvcHRpb24gdG8gcmVhZCBpbiBib290Y29kZSBmcm9tIGEgZmlsZQorKyAgIC0gV3JpdGUgQklPUyBkcml2ZSBudW1iZXIgc28gdGhhdCBGUyBjYW4gcHJvcGVybHkgYm9vdAorKyAgIC0gU2V0IG51bWJlciBvZiBoaWRkZW4gc2VjdG9ycyBiZWZvcmUgYm9vdCBjb2RlIHRvIGJlIG9uZSB0cmFjaworICAgIAorICAgIENvcHlpbmc6ICAgICBDb3B5cmlnaHQgMTk5MywgMTk5NCBEYXZpZCBIdWRzb24gKGRhdmVAaHVtYnVnLmRlbW9uLmNvLnVrKQorIAorQEAgLTE1Myw2ICsxNTksOCBAQAorICNkZWZpbmUgRkFUX0JBRCAgICAgIDB4MGZmZmZmZjcKKyAKKyAjZGVmaW5lIE1TRE9TX0VYVF9TSUdOIDB4MjkJLyogZXh0ZW5kZWQgYm9vdCBzZWN0b3Igc2lnbmF0dXJlICovCisrI2RlZmluZSBIRF9EUklWRV9OVU1CRVIgMHg4MAkvKiBCb290IG9mZiBmaXJzdCBoYXJkIGRyaXZlICovCisrI2RlZmluZSBGRF9EUklWRV9OVU1CRVIgMHgwMAkvKiBCb290IG9mZiBmaXJzdCBmbG9wcHkgZHJpdmUgKi8KKyAjZGVmaW5lIE1TRE9TX0ZBVDEyX1NJR04gIkZBVDEyICAgIgkvKiBGQVQxMiBmaWxlc3lzdGVtIHNpZ25hdHVyZSAqLworICNkZWZpbmUgTVNET1NfRkFUMTZfU0lHTiAiRkFUMTYgICAiCS8qIEZBVDE2IGZpbGVzeXN0ZW0gc2lnbmF0dXJlICovCisgI2RlZmluZSBNU0RPU19GQVQzMl9TSUdOICJGQVQzMiAgICIJLyogRkFUMzIgZmlsZXN5c3RlbSBzaWduYXR1cmUgKi8KK0BAIC0xNzUsNiArMTgzLDggQEAKKyAjZGVmaW5lIEJPT1RDT0RFX1NJWkUJCTQ0OAorICNkZWZpbmUgQk9PVENPREVfRkFUMzJfU0laRQk0MjAKKyAKKysjZGVmaW5lIE1BWF9SRVNFUlZFRAkJMHhGRkZGCisrCisgLyogX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGlzIHVzZWQgb24gYWxsIHN0cnVjdHVyZXMgdG8gbWFrZSBnY2MgaWdub3JlIGFueQorICAqIGFsaWdubWVudHMgKi8KKyAKK0BAIC0yMDIsNyArMjEyLDcgQEAKKyAgIF9fdTE2ICAgICAgICAgZmF0X2xlbmd0aDsJLyogc2VjdG9ycy9GQVQgKi8KKyAgIF9fdTE2ICAgICAgICAgc2Vjc190cmFjazsJLyogc2VjdG9ycyBwZXIgdHJhY2sgKi8KKyAgIF9fdTE2ICAgICAgICAgaGVhZHM7CQkvKiBudW1iZXIgb2YgaGVhZHMgKi8KKy0gIF9fdTMyICAgICAgICAgaGlkZGVuOwkJLyogaGlkZGVuIHNlY3RvcnMgKHVudXNlZCkgKi8KKysgIF9fdTMyICAgICAgICAgaGlkZGVuOwkJLyogaGlkZGVuIHNlY3RvcnMgKG9uZSB0cmFjaykgKi8KKyAgIF9fdTMyICAgICAgICAgdG90YWxfc2VjdDsJLyogbnVtYmVyIG9mIHNlY3RvcnMgKGlmIHNlY3RvcnMgPT0gMCkgKi8KKyAgIHVuaW9uIHsKKyAgICAgc3RydWN0IHsKK0BAIC0yODUsNiArMjk1LDggQEAKKyAKKyAvKiBHbG9iYWwgdmFyaWFibGVzIC0gdGhlIHJvb3Qgb2YgYWxsIGV2aWwgOi0pIC0gc2VlIHRoZXNlIGFuZCB3ZWVwISAqLworIAorK3N0YXRpYyBjaGFyICp0ZW1wbGF0ZV9ib290X2NvZGU7CS8qIFZhcmlhYmxlIHRvIHN0b3JlIGEgZnVsbCB0ZW1wbGF0ZSBib290IHNlY3RvciBpbiAqLworK3N0YXRpYyBpbnQgdXNlX3RlbXBsYXRlID0gMDsKKyBzdGF0aWMgY2hhciAqcHJvZ3JhbV9uYW1lID0gIm1rZG9zZnMiOwkvKiBOYW1lIG9mIHRoZSBwcm9ncmFtICovCisgc3RhdGljIGNoYXIgKmRldmljZV9uYW1lID0gTlVMTDsJLyogTmFtZSBvZiB0aGUgZGV2aWNlIG9uIHdoaWNoIHRvIGNyZWF0ZSB0aGUgZmlsZXN5c3RlbSAqLworIHN0YXRpYyBpbnQgYXRhcmlfZm9ybWF0ID0gMDsJLyogVXNlIEF0YXJpIHZhcmlhdGlvbiBvZiBNUy1ET1MgRlMgZm9ybWF0ICovCitAQCAtODM3LDYgKzg0OSwxMiBAQAorICAgICB2aS0+dm9sdW1lX2lkWzJdID0gKHVuc2lnbmVkIGNoYXIpICgodm9sdW1lX2lkICYgMHgwMGZmMDAwMCkgPj4gMTYpOworICAgICB2aS0+dm9sdW1lX2lkWzNdID0gKHVuc2lnbmVkIGNoYXIpICh2b2x1bWVfaWQgPj4gMjQpOworICAgfQorKyAgaWYgKGJzLm1lZGlhID09IDB4ZjgpIHsKKysgICAgICB2aS0+ZHJpdmVfbnVtYmVyID0gSERfRFJJVkVfTlVNQkVSOyAgLyogU2V0IGJpb3MgZHJpdmUgbnVtYmVyIHRvIDgwaCAqLworKyAgfQorKyAgZWxzZSB7CisrICAgICAgdmktPmRyaXZlX251bWJlciA9IEZEX0RSSVZFX05VTUJFUjsgIC8qIFNldCBiaW9zIGRyaXZlIG51bWJlciB0byAwMGggKi8KKysgIH0KKyAKKyAgIGlmICghYXRhcmlfZm9ybWF0KSB7CisgICAgIG1lbWNweSh2aS0+dm9sdW1lX2xhYmVsLCB2b2x1bWVfbmFtZSwgMTEpOworQEAgLTEzNjIsNiArMTM4MCwzMiBAQAorICAgICogZGlyIGFyZWEgb24gRkFUMTIvMTYsIGFuZCB0aGUgZmlyc3QgY2x1c3RlciBvbiBGQVQzMi4gKi8KKyAgIHdyaXRlYnVmKCAoY2hhciAqKSByb290X2Rpciwgc2l6ZV9yb290X2RpciwgInJvb3QgZGlyZWN0b3J5IiApOworIAorKyAgaWYgKHVzZV90ZW1wbGF0ZSA9PSAxKSB7CisrICAgIC8qIGR1cGUgdGVtcGxhdGUgaW50byByZXNlcnZlZCBzZWN0b3JzICovCisrICAgIHNlZWt0byggMCwgIlN0YXJ0IG9mIHBhcnRpdGlvbiIgKTsKKysgICAgaWYgKHNpemVfZmF0ID09IDMyKSB7CisrICAgICAgd3JpdGVidWYoIHRlbXBsYXRlX2Jvb3RfY29kZSwgMywgImJhY2t1cCBqbXBCb290IiApOworKyAgICAgIHNlZWt0byggMHg1YSwgInNlY3RvciAxIGJvb3QgYXJlYSIgKTsKKysgICAgICB3cml0ZWJ1ZiggdGVtcGxhdGVfYm9vdF9jb2RlKzB4NWEsIDQyMCwgInNlY3RvciAxIGJvb3QgYXJlYSIgKTsKKysgICAgICBzZWVrdG8oIDUxMioyLCAidGhpcmQgc2VjdG9yIiApOworKyAgICAgIGlmIChiYWNrdXBfYm9vdCAhPSAwKSB7CisrICAgICAgICB3cml0ZWJ1ZiggdGVtcGxhdGVfYm9vdF9jb2RlKzUxMioyLCBiYWNrdXBfYm9vdCpzZWN0b3Jfc2l6ZSAtIDUxMioyLCAiZGF0YSB0byBiYWNrdXAgYm9vdCIgKTsKKysgICAgICAgIHNlZWt0byggYmFja3VwX2Jvb3Qqc2VjdG9yX3NpemUsICJiYWNrdXAgYm9vdCBzZWN0b3IiICk7CisrICAgICAgICB3cml0ZWJ1ZiggdGVtcGxhdGVfYm9vdF9jb2RlLCAzLCAiYmFja3VwIGptcEJvb3QiICk7CisrICAgICAgICBzZWVrdG8oIGJhY2t1cF9ib290KnNlY3Rvcl9zaXplKzB4NWEsICJiYWNrdXAgYm9vdCBzZWN0b3IgYm9vdCBhcmVhIiApOworKyAgICAgICAgd3JpdGVidWYoIHRlbXBsYXRlX2Jvb3RfY29kZSsweDVhLCA0MjAsICJiYWNrdXAgYm9vdCBzZWN0b3IgYm9vdCBhcmVhIiApOworKyAgICAgICAgc2Vla3RvKCAoYmFja3VwX2Jvb3QrMikqc2VjdG9yX3NpemUsICJzZWN0b3IgZm9sbG93aW5nIGJhY2t1cCBjb2RlIiApOworKyAgICAgICAgd3JpdGVidWYoIHRlbXBsYXRlX2Jvb3RfY29kZSsoYmFja3VwX2Jvb3QrMikqc2VjdG9yX3NpemUsIChyZXNlcnZlZF9zZWN0b3JzLWJhY2t1cF9ib290LTIpKjUxMiwgInJlbWFpbmluZyBkYXRhIiApOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICB3cml0ZWJ1ZiggdGVtcGxhdGVfYm9vdF9jb2RlKzUxMioyLCAocmVzZXJ2ZWRfc2VjdG9ycy0yKSo1MTIsICJyZW1haW5pbmcgZGF0YSIgKTsKKysgICAgICB9CisrICAgIH0gZWxzZSB7CisrICAgICAgd3JpdGVidWYoIHRlbXBsYXRlX2Jvb3RfY29kZSwgMywgImptcEJvb3QiICk7CisrICAgICAgc2Vla3RvKCAweDNlLCAic2VjdG9yIDEgYm9vdCBhcmVhIiApOworKyAgICAgIHdyaXRlYnVmKCB0ZW1wbGF0ZV9ib290X2NvZGUrMHgzZSwgNDQ4LCAiYm9vdCBjb2RlIiApOworKyAgICB9CisrICB9CisrCisgICBpZiAoYmxhbmtfc2VjdG9yKSBmcmVlKCBibGFua19zZWN0b3IgKTsKKyAgIGlmIChpbmZvX3NlY3RvcikgZnJlZSggaW5mb19zZWN0b3IgKTsKKyAgIGZyZWUgKHJvb3RfZGlyKTsgICAvKiBGcmVlIHVwIHRoZSByb290IGRpcmVjdG9yeSBzcGFjZSBmcm9tIHNldHVwX3RhYmxlcyAqLworQEAgLTEzNzYsNyArMTQyMCw3IEBACisgeworICAgZmF0YWxfZXJyb3IoIlwKKyBVc2FnZTogbWtkb3NmcyBbLUFdIFstY10gWy1DXSBbLXZdIFstSV0gWy1sIGJhZC1ibG9jay1maWxlXSBbLWIgYmFja3VwLWJvb3Qtc2VjdG9yXVxuXAorLSAgICAgICBbLW0gYm9vdC1tc2ctZmlsZV0gWy1uIHZvbHVtZS1uYW1lXSBbLWkgdm9sdW1lLWlkXVxuXAorKyAgICAgICBbLW0gYm9vdC1tc2ctZmlsZV0gWy1uIHZvbHVtZS1uYW1lXSBbLWkgdm9sdW1lLWlkXSBbLUIgYm9vdGNvZGVdXG5cCisgICAgICAgIFstcyBzZWN0b3JzLXBlci1jbHVzdGVyXSBbLVMgbG9naWNhbC1zZWN0b3Itc2l6ZV0gWy1mIG51bWJlci1vZi1GQVRzXVxuXAorICAgICAgICBbLWggaGlkZGVuLXNlY3RvcnNdIFstRiBmYXQtc2l6ZV0gWy1yIHJvb3QtZGlyLWVudHJpZXNdIFstUiByZXNlcnZlZC1zZWN0b3JzXVxuXAorICAgICAgICAvZGV2L25hbWUgW2Jsb2Nrc11cbiIpOworQEAgLTE0MzksNyArMTQ4Myw3IEBACisgICBwcmludGYgKCIlcyAiIFZFUlNJT04gIiAoIiBWRVJTSU9OX0RBVEUgIilcbiIsCisgCSAgIHByb2dyYW1fbmFtZSk7CisgCistICB3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJBYmNDZjpGOklpOmw6bTpuOnI6UjpzOlM6aDp2IikpICE9IEVPRikKKysgIHdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgIkFiY0NmOkY6SWk6bDptOm46cjpSOnM6Uzp2OkI6IikpICE9IEVPRikKKyAgICAgLyogU2NhbiB0aGUgY29tbWFuZCBsaW5lIGZvciBvcHRpb25zICovCisgICAgIHN3aXRjaCAoYykKKyAgICAgICB7CitAQCAtMTUwOSw2ICsxNTUzLDUxIEBACisgCWxpc3RmaWxlID0gb3B0YXJnOworIAlicmVhazsKKyAKKysgICAgICBjYXNlICdCJzogICAgICAgICAvKiBCIDogcmVhZCBpbiBib290Y29kZSAqLworKyAgICAgICAgaWYgKCBzdHJjbXAob3B0YXJnLCAiLSIpICkKKysJICB7CisrCSAgICBtc2dmaWxlID0gZm9wZW4ob3B0YXJnLCAiciIpOworKwkgICAgaWYgKCAhbXNnZmlsZSApCisrCSAgICAgIHBlcnJvcihvcHRhcmcpOworKwkgIH0KKysJZWxzZQorKwkgIG1zZ2ZpbGUgPSBzdGRpbjsKKysKKysJaWYgKCBtc2dmaWxlICkKKysJICB7CisrICAgICAgICAgICAgaWYgKCEodGVtcGxhdGVfYm9vdF9jb2RlID0gbWFsbG9jKCBNQVhfUkVTRVJWRUQgKSkpCisrICAgICAgICAgICAgICAgIGRpZSggIk91dCBvZiBtZW1vcnkiICk7CisrCSAgICAvKiBUaGUgdGVtcGxhdGUgYm9vdCBzZWN0b3IgaW5jbHVkaW5nIHJlc2VydmVkIG11c3Qgbm90IGJlID4gNjU1MzUgKi8KKysgICAgICAgICAgICB1c2VfdGVtcGxhdGUgPSAxOworKwkgICAgaSA9IDA7CisrCSAgICBkbworKwkgICAgICB7CisrCQljaCA9IGdldGMobXNnZmlsZSk7CisrCQlzd2l0Y2ggKGNoKQorKwkJICB7CisrCQkgIGNhc2UgRU9GOgorKwkJICAgIGJyZWFrOworKworKwkJICBkZWZhdWx0OgorKwkJICAgIHRlbXBsYXRlX2Jvb3RfY29kZVtpKytdID0gY2g7IC8qIFN0b3JlIGNoYXJhY3RlciAqLworKwkJICAgIGJyZWFrOworKwkJICB9CisrCSAgICAgIH0KKysJICAgIHdoaWxlICggY2ggIT0gRU9GICYmIGkgPCBNQVhfUkVTRVJWRUQgKTsKKysJICAgIGNoID0gZ2V0Yyhtc2dmaWxlKTsgLyogZmluZCBvdXQgaWYgd2UncmUgYXQgRU9GICovCisrCisrCSAgICAvKiBGaWxsIHVwIHdpdGggemVyb3MgKi8KKysJICAgIHdoaWxlKCBpIDwgTUFYX1JFU0VSVkVEICkKKysJCXRlbXBsYXRlX2Jvb3RfY29kZVtpKytdID0gJ1wwJzsKKysJICAgIAorKwkgICAgaWYgKCBjaCAhPSBFT0YgKQorKwkgICAgICBwcmludGYgKCJXYXJuaW5nOiB0ZW1wbGF0ZSB0b28gbG9uZzsgdHJ1bmNhdGVkIGFmdGVyICVkIGJ5dGVzXG4iLCBpKTsKKysJICAgIAorKwkgICAgaWYgKCBtc2dmaWxlICE9IHN0ZGluICkKKysJICAgICAgZmNsb3NlKG1zZ2ZpbGUpOworKwkgIH0KKysJYnJlYWs7CisrCisgICAgICAgY2FzZSAnbSc6CQkvKiBtIDogU2V0IGJvb3QgbWVzc2FnZSAqLworIAlpZiAoIHN0cmNtcChvcHRhcmcsICItIikgKQorIAkgIHsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ta2Rvc2ZzLWRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ta2Rvc2ZzLWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmE0NzExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL21rZG9zZnMtZGlyLnBhdGNoCkBAIC0wLDAgKzEsNjM5IEBACitBZGQgLWQgPGRpcmVjdG9yeT4gc3VwcG9ydCB0byBwb3B1bGF0ZSB0aGUgaW1hZ2UuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorV2UncmUgdHJhY2tpbmcgYW4gb2xkIHJlbGVhc2Ugb2YgZG9zZnN0b29scyBkdWUgdG8gbGljZW5zaW5nIGlzc3Vlcy4KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK0luZGV4OiBkb3Nmc3Rvb2xzLTIuMTEvbWtkb3Nmcy9ta2Rvc2ZzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkb3Nmc3Rvb2xzLTIuMTEub3JpZy9ta2Rvc2ZzL21rZG9zZnMuYwkyMDExLTEyLTA2IDEyOjI3OjU1LjAwMDAwMDAwMCArMDAwMAorKysrIGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL21rZG9zZnMuYwkyMDExLTEyLTA2IDEyOjM3OjEzLjQ0NTk1MDcwMyArMDAwMAorQEAgLTE4LDYgKzE4LDEwIEBACisgICAgYXMgYSBydWxlKSwgYW5kIG5vdCB0aGUgYmxvY2suICBGb3IgZXhhbXBsZSB0aGUgYm9vdCBibG9jayBkb2VzIG5vdAorICAgIG9jY3VweSBhIGZ1bGwgY2x1c3Rlci4KKyAKKysgICBKdW5lIDIwMDQgLSBKb3JkYW4gQ3JvdXNlIChpbmZvLmxpbnV4QGFtZC5jb20pCisrICAgQWRkZWQgLWQgPGRpcmVjdG9yeT4gc3VwcG9ydCB0byBwb3B1bGF0ZSB0aGUgaW1hZ2UKKysgICBDb3B5cmlnaHQgKEMpIDIwMDQsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKysgICAKKyAgICBGaXhlcy9hZGRpdGlvbnMgTWF5IDE5OTggYnkgUm9tYW4gSG9kZWsKKyAgICA8Um9tYW4uSG9kZWtAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+OgorICAgIC0gQXRhcmkgZm9ybWF0IHN1cHBvcnQKK0BAIC03MSw2ICs3NSw4IEBACisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDx0aW1lLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPGxpYmdlbi5oPgorKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyAKKyAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorICNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMCkKK0BAIC0xMTAsNiArMTE2LDggQEAKKyAgKiBzdWZmaWNpZW50IChvciBldmVuIGJldHRlciA6KSBmb3IgNjQgYml0IG9mZnNldHMgaW4gdGhlIG1lYW50aW1lICovCisgI2RlZmluZSBsbHNlZWsgbHNlZWsKKyAKKysjZGVmaW5lIFJPVU5EX1VQKHZhbHVlLCBkaXZpc29yKSAodmFsdWUgKyAoZGl2aXNvciAtICh2YWx1ZSAlIGRpdmlzb3IpKSkgLyBkaXZpc29yCisrCisgLyogQ29uc3RhbnQgZGVmaW5pdGlvbnMgKi8KKyAKKyAjZGVmaW5lIFRSVUUgMQkJCS8qIEJvb2xlYW4gY29uc3RhbnRzICovCitAQCAtMTQ5LDcgKzE1Nyw2IEBACisgI2RlZmluZSBBVFRSX1ZPTFVNRSAgOAkJLyogdm9sdW1lIGxhYmVsICovCisgI2RlZmluZSBBVFRSX0RJUiAgICAgMTYJCS8qIGRpcmVjdG9yeSAqLworICNkZWZpbmUgQVRUUl9BUkNIICAgIDMyCQkvKiBhcmNoaXZlZCAqLworLQorICNkZWZpbmUgQVRUUl9OT05FICAgIDAJCS8qIG5vIGF0dHJpYnV0ZSBiaXRzICovCisgI2RlZmluZSBBVFRSX1VOVVNFRCAgKEFUVFJfVk9MVU1FIHwgQVRUUl9BUkNIIHwgQVRUUl9TWVMgfCBBVFRSX0hJRERFTikKKyAJLyogYXR0cmlidXRlIGJpdHMgdGhhdCBhcmUgY29waWVkICJhcyBpcyIgKi8KK0BAIC0yNDUsNiArMjUyLDE5IEBACisgICBfX3UzMgkJcmVzZXJ2ZWQyWzRdOworIH07CisgCisrLyogVGhpcyBzdG9yZXMgdXAgdG8gMTMgY2hhcnMgb2YgdGhlIG5hbWUgKi8KKysKKytzdHJ1Y3QgbXNkb3NfZGlyX3Nsb3QgeworKyAgICAgICAgX191OCAgICBpZDsgICAgICAgICAgICAgLyogc2VxdWVuY2UgbnVtYmVyIGZvciBzbG90ICovCisrICAgICAgICBfX3U4ICAgIG5hbWUwXzRbMTBdOyAgICAvKiBmaXJzdCA1IGNoYXJhY3RlcnMgaW4gbmFtZSAqLworKyAgICAgICAgX191OCAgICBhdHRyOyAgICAgICAgICAgLyogYXR0cmlidXRlIGJ5dGUgKi8KKysgICAgICAgIF9fdTggICAgcmVzZXJ2ZWQ7ICAgICAgIC8qIGFsd2F5cyAwICovCisrICAgICAgICBfX3U4ICAgIGFsaWFzX2NoZWNrc3VtOyAvKiBjaGVja3N1bSBmb3IgOC4zIGFsaWFzICovCisrICAgICAgICBfX3U4ICAgIG5hbWU1XzEwWzEyXTsgICAvKiA2IG1vcmUgY2hhcmFjdGVycyBpbiBuYW1lICovCisrICAgICAgICBfX3UxNiAgIHN0YXJ0OyAgICAgICAgICAvKiBzdGFydGluZyBjbHVzdGVyIG51bWJlciwgMCBpbiBsb25nIHNsb3RzICovCisrICAgICAgICBfX3U4ICAgIG5hbWUxMV8xMls0XTsgICAvKiBsYXN0IDIgY2hhcmFjdGVycyBpbiBuYW1lICovCisrfTsKKysKKyBzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5CisgICB7CisgICAgIGNoYXIJbmFtZVs4XSwgZXh0WzNdOwkvKiBuYW1lIGFuZCBleHRlbnNpb24gKi8KK0BAIC0yOTMsNiArMzEzLDE1IEBACisgCisgI2RlZmluZSBNRVNTQUdFX09GRlNFVCAyOQkvKiBPZmZzZXQgb2YgbWVzc2FnZSBpbiBhYm92ZSBjb2RlICovCisgCisrLyogU3BlY2lhbCBzdHJ1Y3R1cmUgdG8ga2VlcCB0cmFjayBvZiBkaXJlY3RvcmllcyBhcyB3ZSBhZGQgdGhlbSBmb3IgdGhlIC1kIG9wdGlvbiAqLworKworK3N0cnVjdCBkaXJfZW50cnkgeworKyAgaW50IHJvb3Q7ICAgICAgICAgICAgICAgICAgICAgICAvKiBTcGVjaWZpZXMgaWYgdGhpcyBpcyB0aGUgcm9vdCBkaXIgb3Igbm90ICovCisrICBpbnQgY291bnQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBpdGVtcyBpbiB0aGUgdGFibGUgKi8KKysgIGludCBlbnRyaWVzOyAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRhYmxlICovCisrICBzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICp0YWJsZTsgIC8qIFBvaW50ZXIgdG8gdGhlIGVudHJ5IHRhYmxlICovCisrfTsKKysKKyAvKiBHbG9iYWwgdmFyaWFibGVzIC0gdGhlIHJvb3Qgb2YgYWxsIGV2aWwgOi0pIC0gc2VlIHRoZXNlIGFuZCB3ZWVwISAqLworIAorIHN0YXRpYyBjaGFyICp0ZW1wbGF0ZV9ib290X2NvZGU7CS8qIFZhcmlhYmxlIHRvIHN0b3JlIGEgZnVsbCB0ZW1wbGF0ZSBib290IHNlY3RvciBpbiAqLworQEAgLTMyNiw2ICszNTUsOSBAQAorIHN0YXRpYyBpbnQgc2l6ZV9yb290X2RpcjsJLyogU2l6ZSBvZiB0aGUgcm9vdCBkaXJlY3RvcnkgaW4gYnl0ZXMgKi8KKyBzdGF0aWMgaW50IHNlY3RvcnNfcGVyX2NsdXN0ZXIgPSAwOwkvKiBOdW1iZXIgb2Ygc2VjdG9ycyBwZXIgZGlzayBjbHVzdGVyICovCisgc3RhdGljIGludCByb290X2Rpcl9lbnRyaWVzID0gMDsJLyogTnVtYmVyIG9mIHJvb3QgZGlyZWN0b3J5IGVudHJpZXMgKi8KKytzdGF0aWMgaW50IHJvb3RfZGlyX251bV9lbnRyaWVzID0gMDsKKytzdGF0aWMgaW50IGxhc3RfY2x1c3Rlcl93cml0dGVuID0gMDsKKysKKyBzdGF0aWMgY2hhciAqYmxhbmtfc2VjdG9yOwkJLyogQmxhbmsgc2VjdG9yIC0gYWxsIHplcm9zICovCisgc3RhdGljIGludCBoaWRkZW5fc2VjdG9ycyA9IDA7CQkvKiBOdW1iZXIgb2YgaGlkZGVuIHNlY3RvcnMgKi8KKyAKK0BAIC0zOTksNyArNDMxLDYgQEAKKyAgIH0KKyB9CisgCistCisgLyogTWFyayBhIHNwZWNpZmllZCBzZWN0b3IgYXMgaGF2aW5nIGEgcGFydGljdWxhciB2YWx1ZSBpbiBpdCdzIEZBVCBlbnRyeSAqLworIAorIHN0YXRpYyB2b2lkCitAQCAtMTI2Niw2ICsxMjk3LDkgQEAKKyAgICAgICBkaWUgKCJ1bmFibGUgdG8gYWxsb2NhdGUgc3BhY2UgZm9yIHJvb3QgZGlyZWN0b3J5IGluIG1lbW9yeSIpOworICAgICB9CisgCisrCisrICBsYXN0X2NsdXN0ZXJfd3JpdHRlbiA9IDI7CisrICAKKyAgIG1lbXNldChyb290X2RpciwgMCwgc2l6ZV9yb290X2Rpcik7CisgICBpZiAoIG1lbWNtcCh2b2x1bWVfbmFtZSwgIiAgICAgICAgICAgIiwgMTEpICkKKyAgICAgeworQEAgLTEzMTQsMTEgKzEzNDgsMTEgQEAKKyAgIH0KKyAgIAorICAgaWYgKCEoYmxhbmtfc2VjdG9yID0gbWFsbG9jKCBzZWN0b3Jfc2l6ZSApKSkKKy0gICAgICBkaWUoICJPdXQgb2YgbWVtb3J5IiApOworKyAgICBkaWUoICJPdXQgb2YgbWVtb3J5IiApOworKyAgCisgICBtZW1zZXQoYmxhbmtfc2VjdG9yLCAwLCBzZWN0b3Jfc2l6ZSk7CisgfQorLQorLQorKyAgCisgLyogV3JpdGUgdGhlIG5ldyBmaWxlc3lzdGVtJ3MgZGF0YSB0YWJsZXMgdG8gd2hlcmV2ZXIgdGhleSdyZSBnb2luZyB0byBlbmQgdXAhICovCisgCisgI2RlZmluZSBlcnJvcihzdHIpCQkJCVwKK0BAIC0xMzQwLDcgKzEzNzQsNyBAQAorICAgZG8gewkJCQkJCQlcCisgICAgIGludCBfX3NpemUgPSAoc2l6ZSk7CQkJCVwKKyAgICAgaWYgKHdyaXRlIChkZXYsIGJ1ZiwgX19zaXplKSAhPSBfX3NpemUpCQlcCistCWVycm9yICgiZmFpbGVkIHdoaWxzdCB3cml0aW5nICIgZXJyc3RyKTsJXAorKyAgICAgICBlcnJvciAoImZhaWxlZCB3aGlsc3Qgd3JpdGluZyAiIGVycnN0cik7CVwKKyAgIH0gd2hpbGUoMCkKKyAKKyAKK0BAIC0xNDEyLDYgKzE0NDYsNDUyIEBACisgICBmcmVlIChmYXQpOyAgLyogRnJlZSB1cCB0aGUgZmF0IHRhYmxlIHNwYWNlIHJlc2VydmVkIGR1cmluZyBzZXR1cF90YWJsZXMgKi8KKyB9CisgCisrLyogQWRkIGEgZmlsZSB0byB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBlbnRyeSwgYW5kIGFsc28gd3JpdGUgaXQgaW50byB0aGUgaW1hZ2UgKi8KKysKKytzdGF0aWMgdm9pZCBjb3B5X2ZpbGVuYW1lKGNoYXIgKmZpbGVuYW1lLCBjaGFyICpiYXNlLCBjaGFyICpleHQpIHsKKysgIAorKyAgY2hhciAqY2ggPSBmaWxlbmFtZTsKKysgIGludCBpLCBsZW47CisrCisrICBtZW1zZXQoYmFzZSwgMHgyMCwgOCk7CisrICBtZW1zZXQoZXh0LCAweDIwLCAzKTsKKysgIAorKyAgZm9yKGxlbiA9IDAgOyAqY2ggJiYgKmNoICE9ICcuJzsgY2grKykgeworKyAgICBiYXNlW2xlbisrXSA9IHRvdXBwZXIoKmNoKTsKKysgICAgaWYgKGxlbiA9PSA4KSBicmVhazsKKysgIH0KKysgIAorKyAgZm9yICggOyAqY2ggJiYgKmNoICE9ICcuJzsgY2grKyk7CisrICBpZiAoKmNoKSBjaCsrOworKyAgCisrICBmb3IobGVuID0gMCA7ICpjaDsgY2grKykgeworKyAgICBleHRbbGVuKytdID0gdG91cHBlcigqY2gpOworKyAgICBpZiAobGVuID09IDMpIGJyZWFrOworKyAgfQorK30KKysKKysvKiBDaGVjayBmb3IgYW4gLmF0dHJpYi48ZmlsZW5hbWU+IGZpbGUsIGFuZCByZWFkIHRoZSBhdHRyaWJ1dGVzIHRoZXJlaW4gKi8KKysKKysvKiBXZSBhcmUgZ29pbmcgdG8gYmUgcHJldHR5IHBlZGFudGljIGFib3V0IHRoaXMuICBUaGUgZmlsZSBuZWVkcyAzCisrICAgYnl0ZXMgYXQgdGhlIGJlZ2lubmluZywgdGhlIGF0dHJpYnV0ZXMgYXJlIGxpc3RlZCBpbiB0aGlzIG9yZGVyOgorKyAgIAorKyAgIChIKWlkZGVufChTKXlzdGVtfChBKXJjaGl2ZWQKKysgICAKKysgICBBIGNhcGl0YWwgSFNBIG1lYW5zIHRvIGVuYWJsZSBpdCwgYW55dGhpbmcgZWxzZSB3aWxsIGRpc2FibGUgaXQKKysgICAoSSByZWNvbW1lbmQgYSAnLScpIFRoZSB1bml4IHVzZXIgYXR0cmlidXRlcyB3aWxsIHN0aWxsIGJlIHVzZWQgCisrICAgZm9yIHdyaXRlIGFjY2Vzcy4KKysKKysgICBGb3IgZXhhbXBsZSwgdG8gZW5hYmxlIHN5c3RlbSBmaWxlIGFjY2VzcyBmb3IgbGRsaW51eC5zeXMsIHdyaXRlIAorKyAgIHRoZSBmb2xsb3dpbmcgdG8gLmF0dHJpYi5sZGxpbnV4LnN5czogLVMtCisrKi8KKysKKyt1bnNpZ25lZCBjaGFyIGNoZWNrX2F0dHJpYl9maWxlKGNoYXIgKmRpciwgY2hhciAqZmlsZW5hbWUpIHsKKysKKysgIGNoYXIgYXR0cmliWzRdID0geyAnLScsICctJywgJy0nIH07CisrICB1bnNpZ25lZCBjaGFyICpidWZmZXIgPSAwOworKyAgaW50IHJldCA9IEFUVFJfTk9ORTsKKysgIGludCBmZCA9IC0xOworKworKyAgYnVmZmVyID0gKGNoYXIgKikgY2FsbG9jKDEsIHN0cmxlbihkaXIpICsgc3RybGVuKGZpbGVuYW1lKSArIDEwKTsKKysgIGlmICghYnVmZmVyKSByZXR1cm4gQVRUUl9OT05FOworKworKyAgc3ByaW50ZihidWZmZXIsICIlcy8uYXR0cmliLiVzIiwgZGlyLCBmaWxlbmFtZSk7CisrCisrICBpZiAoYWNjZXNzKGJ1ZmZlciwgUl9PSykpIAorKyAgICBnb3RvIGV4aXRfYXR0cmliOworKworKyAgaWYgKChmZCA9IG9wZW4oYnVmZmVyLCBPX1JET05MWSwgMCkpIDwgMCkKKysgICAgZ290byBleGl0X2F0dHJpYjsKKysKKysgIGlmIChyZWFkKGZkLCBhdHRyaWIsIDMpIDwgMCkKKysgICAgZ290byBleGl0X2F0dHJpYjsKKysgIAorKyAgaWYgKGF0dHJpYlswXSA9PSAnSCcpIHJldCB8PSBBVFRSX0hJRERFTjsKKysgIGlmIChhdHRyaWJbMV0gPT0gJ1MnKSByZXQgfD0gQVRUUl9TWVM7CisrICBpZiAoYXR0cmliWzJdID09ICdBJykgcmV0IHw9IEFUVFJfQVJDSDsKKysKKysgIHByaW50ZigiJXM6IFNldHRpbmcgYXRycmlidXRlICV4XG4iLCBmaWxlbmFtZSwgcmV0KTsKKysKKysgZXhpdF9hdHRyaWI6CisrICBpZiAoZmQgPj0gMCkgY2xvc2UoZmQpOworKyAgaWYgKGJ1ZmZlcikgZnJlZShidWZmZXIpOworKworKyAgcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIHZvaWQgY29weV9uYW1lKGNoYXIgKmJ1ZmZlciwgaW50IHNpemUsIGNoYXIgKipwb2ludGVyKSB7CisrICBpbnQgaTsKKysKKysgIGZvcihpID0gMDsgaSA8IHNpemU7IGkgKz0gMikgeworKyAgICBpZiAoKnBvaW50ZXIpIHsKKysgICAgICBidWZmZXJbaV0gPSAqKnBvaW50ZXI7CisrICAgICAgYnVmZmVyW2kgKyAxXSA9IDB4MDA7CisrICAgICAgKnBvaW50ZXIgPSAqKnBvaW50ZXIgPyAqcG9pbnRlciArIDEgOiAwOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgIGJ1ZmZlcltpXSA9IDB4RkY7CisrICAgICAgYnVmZmVyW2kgKyAxXSA9IDB4RkY7CisrICAgIH0KKysgIH0gIAorK30KKysKKytzdGF0aWMgaW50IGFkZF9maWxlKGNoYXIgKmZpbGVuYW1lLCBzdHJ1Y3QgZGlyX2VudHJ5ICpkaXIsIHVuc2lnbmVkIGNoYXIgYXR0cikgCisreworKyAgc3RydWN0IHN0YXQgc3RhdDsKKysgIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmVudHJ5OworKyAgaW50IGluZmlsZSA9IDA7CisrICBpbnQgc2VjdG9ycywgY2x1c3RlcnM7CisrICBzdHJ1Y3QgdG0gKmN0aW1lOworKyAgaW50IGMsIHM7CisrICBpbnQgcHRyOworKyAgY2hhciAqYnVmZmVyLCAqYmFzZTsKKysgIGludCBzdGFydDsKKysgIGludCB1c2Vkc2VjLCB0b3RhbHNlYzsKKysKKysgIGNoYXIgbmFtZTgzWzhdLCBleHQ4M1szXTsKKysKKysgIHN0cnVjdCBtc2Rvc19kaXJfc2xvdCAqc2xvdDsKKysgIGludCBpOworKyAgY2hhciAqcDsKKysKKysgIC8qIFRoZSByb290IGRpcmVjdG9yeSBpcyBzdGF0aWMsIGV2ZXJ5dGhpbmcgZWxzZSBncm93cyBhcyBuZWVkZWQgKi8KKysKKysgIGlmIChkaXItPnJvb3QpIHsKKysgICAgaWYgKGRpci0+Y291bnQgPT0gZGlyLT5lbnRyaWVzKSB7CisrICAgICAgcHJpbnRmKCJFcnJvciAtIHRvbyBtYW55IGRpcmVjdG9yeSBlbnRyaWVzXG4iKTsKKysgICAgfQorKyAgfQorKyAgZWxzZSB7CisrICAgIGlmIChkaXItPmNvdW50ID09IGRpci0+ZW50cmllcykgeworKyAgICAgIGlmICghZGlyLT50YWJsZSkgCisrCWRpci0+dGFibGUgPSAKKysJICAoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysgICAgICBlbHNlIHsKKysJZGlyLT50YWJsZSA9IAorKwkgIChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIHJlYWxsb2MoZGlyLT50YWJsZSwgKGRpci0+ZW50cmllcyArIDEpICogCisrCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CisrCisrCW1lbXNldCgmZGlyLT50YWJsZVtkaXItPmVudHJpZXNdLCAwLCBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworKyAgICAgIH0KKysKKysgICAgICBkaXItPmVudHJpZXMrKzsKKysgICAgfQorKyAgfQorKworKyAgaW5maWxlID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFksIDApOworKyAgaWYgKCFpbmZpbGUpIHJldHVybjsKKysgIAorKyAgaWYgKGZzdGF0KGluZmlsZSwgJnN0YXQpKQorKyAgICBnb3RvIGV4aXRfYWRkOworKyAKKysgIGlmIChTX0lTQ0hSKHN0YXQuc3RfbW9kZSkgfHxTX0lTQkxLKHN0YXQuc3RfbW9kZSkgfHwKKysgICAgICBTX0lTRklGTyhzdGF0LnN0X21vZGUpIHx8IFNfSVNMTksoc3RhdC5zdF9tb2RlKSkgeworKyAgICBwcmludGYoIkVycm9yIC0gY2Fubm90IGNyZWF0ZSBhIHNwZWNpYWwgZmlsZSBpbiBhIEZBVEZTXG4iKTsKKysgICAgZ290byBleGl0X2FkZDsKKysgIH0KKysKKysgIC8qIEZJWE1FOiBUaGlzIGlzbid0IHZlcnkgcHJldHR5ICovCisrCisrICB1c2Vkc2VjID0gc3RhcnRfZGF0YV9zZWN0b3IgKyAoc2l6ZV9yb290X2RpciAvIHNlY3Rvcl9zaXplKSArCisrICAgIChsYXN0X2NsdXN0ZXJfd3JpdHRlbiAqIGJzLmNsdXN0ZXJfc2l6ZSk7CisrCisrICB0b3RhbHNlYyA9IGJsb2NrcyAqIEJMT0NLX1NJWkUgLyBzZWN0b3Jfc2l6ZTsKKysgIAorKyAgLyogRmlndXJlIG91dCBob3cgbWFueSBzZWN0b3JzIC8gY2x1c3RvcnMgdGhlIGZpbGUgcmVxdWlyZXMgKi8KKysKKysgIHNlY3RvcnMgPSBST1VORF9VUChzdGF0LnN0X3NpemUsIHNlY3Rvcl9zaXplKTsKKysgIGNsdXN0ZXJzID0gUk9VTkRfVVAoc2VjdG9ycywgKGludCkgYnMuY2x1c3Rlcl9zaXplKTsKKysKKysgIGlmICh1c2Vkc2VjICsgc2VjdG9ycyA+IHRvdGFsc2VjKSB7CisrICAgIHByaW50ZigiRXJyb3IgLSAlcyBpcyB0b28gYmlnICglZCB2cyAlZClcbiIsIGZpbGVuYW1lLCBzZWN0b3JzLCB0b3RhbHNlYyAtIHVzZWRzZWMpOworKyAgICBjbG9zZShpbmZpbGUpOworKyAgICByZXR1cm4gLTE7CisrICB9CisrCisrICBwcmludGYoIkFERCAlc1xuIiwgZmlsZW5hbWUpOworKworKyAgLyogR3JhYiB0aGUgYmFzZW5hbWUgb2YgdGhlIGZpbGUgKi8KKysgIGJhc2UgPSBiYXNlbmFtZShmaWxlbmFtZSk7CisrICAKKysgIC8qIEV4dHJhY3Qgb3V0IHRoZSA4LjMgbmFtZSAqLworKyAgY29weV9maWxlbmFtZShiYXNlLCBuYW1lODMsIGV4dDgzKTsKKysKKysgIC8qIE1ha2UgYW4gZXh0ZW5kZWQgbmFtZSBzbG90ICovCisrCisrICBzbG90ID0gKHN0cnVjdCBtc2Rvc19kaXJfc2xvdCAqKSAmZGlyLT50YWJsZVtkaXItPmNvdW50KytdOworKyAgc2xvdC0+aWQgPSAnQSc7ICAKKysgIHNsb3QtPmF0dHIgPSAweDBGOworKyAgc2xvdC0+cmVzZXJ2ZWQgPSAwOworKyAgc2xvdC0+c3RhcnQgPSAwOworKyAgCisrICBzbG90LT5hbGlhc19jaGVja3N1bSA9IDA7CisrICAKKysgIGZvcihpID0gMDsgaSA8IDg7IGkrKykgCisrICAgIHNsb3QtPmFsaWFzX2NoZWNrc3VtID0gKCgoc2xvdC0+YWxpYXNfY2hlY2tzdW0mMSk8PDcpfCgoc2xvdC0+YWxpYXNfY2hlY2tzdW0mMHhmZSk+PjEpKSArIG5hbWU4M1tpXTsKKysgIAorKyAgZm9yKGkgPSAwOyBpIDwgMzsgaSsrKSAKKysgICAgc2xvdC0+YWxpYXNfY2hlY2tzdW0gPSAoKChzbG90LT5hbGlhc19jaGVja3N1bSYxKTw8Nyl8KChzbG90LT5hbGlhc19jaGVja3N1bSYweGZlKT4+MSkpICsgZXh0ODNbaV07CisrCisrICBwID0gYmFzZTsKKysKKysgIGNvcHlfbmFtZShzbG90LT5uYW1lMF80LCAxMCwgJnApOworKyAgY29weV9uYW1lKHNsb3QtPm5hbWU1XzEwLCAxMiwgJnApOworKyAgY29weV9uYW1lKHNsb3QtPm5hbWUxMV8xMiwgNCwgJnApOworKworKworKyAgLyogR2V0IHRoZSBlbnRyeSBmcm9tIHRoZSByb290IGZpbGVzeXRlbSAqLworKyAgZW50cnkgPSAmZGlyLT50YWJsZVtkaXItPmNvdW50KytdOworKworKyAgc3RybmNweShlbnRyeS0+bmFtZSwgbmFtZTgzLCA4KTsKKysgIHN0cm5jcHkoZW50cnktPmV4dCwgZXh0ODMsIDMpOworKworKworKyAgLyogSWYgdGhlIHVzZXIgaGFzIGl0IHJlYWQgb25seSwgdGhlbiBhZGQgcmVhZCBvbmx5IHRvIHRoZSBpbmNvbWluZworKyAgICAgYXR0cmlidXRlIHNldHRpbmdzICovCisrCisrICBpZiAoIShzdGF0LnN0X21vZGUgJiBTX0lXVVNSKSkgYXR0ciB8PSBBVFRSX1JPOworKyAgZW50cnktPmF0dHIgPSBhdHRyOworKworKyAgLyogU2V0IHRoZSBhY2Nlc3MgdGltZSBvbiB0aGUgZmlsZSAqLworKyAgY3RpbWUgPSBsb2NhbHRpbWUoJmNyZWF0ZV90aW1lKTsKKysKKysgIGVudHJ5LT50aW1lID0gQ1RfTEVfVygodW5zaWduZWQgc2hvcnQpKChjdGltZS0+dG1fc2VjID4+IDEpICsKKysJCQkJCSAgKGN0aW1lLT50bV9taW4gPDwgNSkgKyAoY3RpbWUtPnRtX2hvdXIgPDwgMTEpKSk7CisrCisrICBlbnRyeS0+ZGF0ZSA9IENUX0xFX1coKHVuc2lnbmVkIHNob3J0KShjdGltZS0+dG1fbWRheSArCisrCQkJCSAgICAgICgoY3RpbWUtPnRtX21vbisxKSA8PCA1KSArCisrCQkJCSAgICAgICgoY3RpbWUtPnRtX3llYXItODApIDw8IDkpKSk7CisrCisrICBlbnRyeS0+Y3RpbWVfbXMgPSAwOworKyAgZW50cnktPmN0aW1lID0gZW50cnktPnRpbWU7CisrICBlbnRyeS0+Y2RhdGUgPSBlbnRyeS0+ZGF0ZTsKKysgIGVudHJ5LT5hZGF0ZSA9IGVudHJ5LT5kYXRlOworKyAgZW50cnktPnNpemUgPSBzdGF0LnN0X3NpemU7CisrCisrICBzdGFydCA9IGxhc3RfY2x1c3Rlcl93cml0dGVuOworKworKyAgZW50cnktPnN0YXJ0ID0gQ1RfTEVfVyhzdGFydCk7ICAvKiBzdGFydCBzZWN0b3IgKi8KKysgIGVudHJ5LT5zdGFydGhpID0gQ1RfTEVfVygoc3RhcnQgJiAweEZGRkYwMDAwKSA+PiAxNik7IC8qIEhpZ2ggc3RhcnQgc2VjdG9yIChmb3IgRkFUMzIpICovCisrCisrICAvKiBXZSBtYXJrIGFsbCBvZiB0aGUgY2x1c3RlcnMgd2UgdXNlIGluIHRoZSBGQVQgKi8KKysgIAorKyAgZm9yKGMgPSAwOyBjIDwgY2x1c3RlcnM7IGMrKyApIHsKKysgICAgaW50IGZyZWU7CisrICAgIGludCBuZXh0ID0gYyA9PSAoY2x1c3RlcnMgLSAxKSA/IEZBVF9FT0YgOiBzdGFydCArIGMgKyAxOworKyAgICBtYXJrX0ZBVF9jbHVzdGVyKHN0YXJ0ICsgYywgbmV4dCk7ICAKKysgICAgbGFzdF9jbHVzdGVyX3dyaXR0ZW4rKzsKKysgIH0KKysgIAorKyAgLyogVGhpcyBjb25mdXNlZCBtZSB0b28gLSBjbHVzdGVyIDIgc3RhcnRzIGFmdGVyIHRoZQorKyAgICAgcm9vdCBkaXJlY3RvcnkgZGF0YSAtIHNlYXJjaCBtZSBhcyB0byB3aHkgKi8KKysKKysgIHB0ciA9IChzdGFydF9kYXRhX3NlY3RvciAqIHNlY3Rvcl9zaXplKSArIHNpemVfcm9vdF9kaXI7CisrICBwdHIgKz0gKHN0YXJ0IC0gMikgKiBicy5jbHVzdGVyX3NpemUgKiBzZWN0b3Jfc2l6ZTsKKysgICAgCisrICBidWZmZXIgPSAoY2hhciAqKSBtYWxsb2Moc2VjdG9yX3NpemUpOworKworKyAgaWYgKCFidWZmZXIpIHsKKysgICAgcHJpbnRmKCJFcnJvciAtIGNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeVxuIik7CisrICAgIGdvdG8gZXhpdF9hZGQ7CisrICB9CisrCisrICAvKiBXcml0ZSB0aGUgZmlsZSBpbnRvIHRoZSBmaWxlIGJsb2NrICovCisrCisrICBzZWVrdG8ocHRyLCAiZGF0YWZpbGUiKTsKKysKKysgIHdoaWxlKDEpIHsKKysgICAgaW50IHNpemUgPSByZWFkKGluZmlsZSwgYnVmZmVyLCBzZWN0b3Jfc2l6ZSk7ICAgIAorKyAgICBpZiAoc2l6ZSA8PSAwKSBicmVhazsKKysgICAgCisrICAgIHdyaXRlYnVmKGJ1ZmZlciwgc2l6ZSwgImRhdGEiKTsgICAgCisrICB9CisrCisrIGV4aXRfYWRkOgorKyAgaWYgKGluZmlsZSkgY2xvc2UoaW5maWxlKTsKKyt9CisrCisrLyogQWRkIGEgbmV3IGRpcmVjdG9yeSB0byB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBlbnRyeSwgYW5kIGluIHR1cm4gcG9wdWxhdGUgCisrICAgaXQgd2l0aCBpdHMgb3duIGZpbGVzICovCisrCisrLyogRklYTUU6ICBUaGlzIHNob3VsZCBjaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHNpemUgdG8gYWRkIGl0c2VsZiAqLworKworK3N0YXRpYyB2b2lkIGFkZF9kaXJlY3RvcnkoY2hhciAqZmlsZW5hbWUsIHN0cnVjdCBkaXJfZW50cnkgKmRpcikgeworKworKyAgc3RydWN0IGRpcl9lbnRyeSAqbmV3ZGlyID0gMDsKKysgIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmVudHJ5OworKyAgc3RydWN0IHRtICpjdGltZTsKKysgIERJUiAqcmRkaXIgPSBvcGVuZGlyKGZpbGVuYW1lKTsKKysgIHN0cnVjdCBkaXJlbnQgKmRlbnRyeSA9IDA7CisrICBpbnQgcmVtYWluOworKyAgY2hhciAqZGF0YTsKKysKKysgIC8qIElmIHRoZSBkaXJlY3RvcnkgZG9lc24ndCBleGlzdCAqLworKyAgaWYgKCFyZGRpcikgcmV0dXJuOworKyAgCisrICBpZiAoZGlyLT5yb290KSB7CisrICAgIGlmIChkaXItPmNvdW50ID09IGRpci0+ZW50cmllcykgeworKyAgICAgIHByaW50ZigiRXJyb3IgLSB0b28gbWFueSBkaXJlY3RvcnkgZW50cmllc1xuIik7CisrICAgICAgZ290byBleGl0X2FkZF9kaXI7CisrICAgIH0KKysgIH0KKysgIGVsc2UgeworKyAgICBpZiAoZGlyLT5jb3VudCA9PSBkaXItPmVudHJpZXMpIHsKKysgICAgICBpZiAoIWRpci0+dGFibGUpIAorKwlkaXItPnRhYmxlID0gKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKikgbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CisrICAgICAgZWxzZSB7CisrCWRpci0+dGFibGUgPSAoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqKSByZWFsbG9jKGRpci0+dGFibGUsIChkaXItPmVudHJpZXMgKyAxKSAqIAorKwkJCQkJCQlzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworKworKwkvKiBaZXJvIGl0IG91dCB0byBhdm9pZCBpc3N1ZXMgKi8KKysJbWVtc2V0KCZkaXItPnRhYmxlW2Rpci0+ZW50cmllc10sIDAsIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CisrICAgICAgfQorKwlkaXItPmVudHJpZXMrKzsKKysgICAgfQorKyAgfQorKworKyAgLyogTm93LCBjcmVhdGUgYSBuZXcgZGlyZWN0b3J5IGVudHJ5IGZvciB0aGUgbmV3IGRpcmVjdG9yeSAqLworKyAgbmV3ZGlyID0gKHN0cnVjdCBkaXJfZW50cnkgKikgY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgZGlyX2VudHJ5KSk7CisrICBpZiAoIW5ld2RpcikgZ290byBleGl0X2FkZF9kaXI7CisrCisrICBlbnRyeSA9ICZkaXItPnRhYmxlW2Rpci0+Y291bnQrK107CisrCisrICBzdHJuY3B5KGVudHJ5LT5uYW1lLCBiYXNlbmFtZShmaWxlbmFtZSksIHNpemVvZihlbnRyeS0+bmFtZSkpOworKyAgCisrICBlbnRyeS0+YXR0ciA9IEFUVFJfRElSOworKyAgY3RpbWUgPSBsb2NhbHRpbWUoJmNyZWF0ZV90aW1lKTsKKysKKysgIGVudHJ5LT50aW1lID0gQ1RfTEVfVygodW5zaWduZWQgc2hvcnQpKChjdGltZS0+dG1fc2VjID4+IDEpICsKKysJCQkJCSAgKGN0aW1lLT50bV9taW4gPDwgNSkgKyAoY3RpbWUtPnRtX2hvdXIgPDwgMTEpKSk7CisrCisrICBlbnRyeS0+ZGF0ZSA9IENUX0xFX1coKHVuc2lnbmVkIHNob3J0KShjdGltZS0+dG1fbWRheSArCisrCQkJCSAgICAgICgoY3RpbWUtPnRtX21vbisxKSA8PCA1KSArCisrCQkJCSAgICAgICgoY3RpbWUtPnRtX3llYXItODApIDw8IDkpKSk7CisrCisrICBlbnRyeS0+Y3RpbWVfbXMgPSAwOworKyAgZW50cnktPmN0aW1lID0gZW50cnktPnRpbWU7CisrICBlbnRyeS0+Y2RhdGUgPSBlbnRyeS0+ZGF0ZTsKKysgIGVudHJ5LT5hZGF0ZSA9IGVudHJ5LT5kYXRlOworKworKyAgLyogTm93LCByZWFkIHRoZSBkaXJlY3RvcnkgKi8KKysKKysgIHdoaWxlKChkZW50cnkgPSByZWFkZGlyKHJkZGlyKSkpIHsKKysgICAgc3RydWN0IHN0YXQgc3Q7CisrICAgIGNoYXIgKmJ1ZmZlcjsKKysgICAgCisrICAgIGlmICghc3RyY21wKGRlbnRyeS0+ZF9uYW1lLCAiLiIpIHx8ICFzdHJjbXAoZGVudHJ5LT5kX25hbWUsICIuLiIpKQorKyAgICAgIGNvbnRpbnVlOworKworKyAgICAvKiBET1Mgd291bGRuJ3QgbGlrZSBhIHR5cGljYWwgdW5peCAuIChkb3QpIGZpbGUsIHNvIHdlIHNraXAgdGhvc2UgdG9vICovCisrICAgIGlmIChkZW50cnktPmRfbmFtZVswXSA9PSAnLicpIGNvbnRpbnVlOworKworKyAgICBidWZmZXIgPSBtYWxsb2Moc3RybGVuKGZpbGVuYW1lKSArIHN0cmxlbihkZW50cnktPmRfbmFtZSkgKyAzKTsKKysgICAgaWYgKCFidWZmZXIpIGNvbnRpbnVlOworKyAgICAKKysgICAgc3ByaW50ZihidWZmZXIsICIlcy8lcyIsIGZpbGVuYW1lLCBkZW50cnktPmRfbmFtZSk7CisrICAgIGlmICghc3RhdChidWZmZXIsICZzdCkpIHsKKysgICAgICBpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgCisrCWFkZF9kaXJlY3RvcnkoYnVmZmVyLCBuZXdkaXIpOworKyAgICAgIGVsc2UgaWYgKFNfSVNSRUcoc3Quc3RfbW9kZSkpIHsKKysJdW5zaWduZWQgY2hhciBhdHRyaWIgPSBjaGVja19hdHRyaWJfZmlsZShmaWxlbmFtZSwgZGVudHJ5LT5kX25hbWUpOworKwlhZGRfZmlsZShidWZmZXIsIG5ld2RpciwgYXR0cmliKTsKKysgICAgICB9CisrICAgIH0KKysgCisrICAgIGZyZWUoYnVmZmVyKTsKKysgIH0KKysgIAorKyAgLyogTm93IHRoYXQgdGhlIGVudGlyZSBkaXJlY3RvcnkgaGFzIGJlZW4gd3JpdHRlbiwgZ28gYWhlYWQgYW5kIHdyaXRlIHRoZSBkaXJlY3RvcnkKKysgICAgIGVudHJ5IGFzIHdlbGwgKi8KKysKKysgIGVudHJ5LT5zdGFydCA9IENUX0xFX1cobGFzdF9jbHVzdGVyX3dyaXR0ZW4pOworKyAgZW50cnktPnN0YXJ0aGkgPSBDVF9MRV9XKChsYXN0X2NsdXN0ZXJfd3JpdHRlbiAmIDB4RkZGRjAwMDApID4+IDE2KTsgCisrICBlbnRyeS0+c2l6ZSA9IG5ld2Rpci0+Y291bnQgKiBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSk7CisrICAKKysgIHJlbWFpbiA9IGVudHJ5LT5zaXplOworKyAgZGF0YSA9IChjaGFyICopIG5ld2Rpci0+dGFibGU7CisrCisrICB3aGlsZShyZW1haW4pIHsKKysgICAgaW50IHNpemUgPSAKKysgICAgICByZW1haW4gPiBicy5jbHVzdGVyX3NpemUgKiBzZWN0b3Jfc2l6ZSA/IGJzLmNsdXN0ZXJfc2l6ZSAqIHNlY3Rvcl9zaXplIDogcmVtYWluOworKworKyAgICBpbnQgcG9zID0gKHN0YXJ0X2RhdGFfc2VjdG9yICogc2VjdG9yX3NpemUpICsgc2l6ZV9yb290X2RpcjsKKysgICAgcG9zICs9IChsYXN0X2NsdXN0ZXJfd3JpdHRlbiAtIDIpICogYnMuY2x1c3Rlcl9zaXplICogc2VjdG9yX3NpemU7CisrICAgIAorKyAgICBzZWVrdG8ocG9zLCAiYWRkX2RpciIpOworKyAgICB3cml0ZWJ1ZihkYXRhLCBzaXplLCAiYWRkX2RpciIpOworKyAgICAKKysgICAgcmVtYWluIC09IHNpemU7CisrICAgIGRhdGEgKz0gc2l6ZTsKKysKKysgICAgbWFya19GQVRfY2x1c3RlcihsYXN0X2NsdXN0ZXJfd3JpdHRlbiwgcmVtYWluID8gbGFzdF9jbHVzdGVyX3dyaXR0ZW4gKyAxIDogRkFUX0VPRik7ICAgICAgCisrICAgIGxhc3RfY2x1c3Rlcl93cml0dGVuKys7CisrICB9CisrICAKKysgZXhpdF9hZGRfZGlyOgorKyAgaWYgKHJkZGlyKSBjbG9zZWRpcihyZGRpcik7CisrICBpZiAobmV3ZGlyLT50YWJsZSkgZnJlZShuZXdkaXItPnRhYmxlKTsKKysgIGlmIChuZXdkaXIpIGZyZWUobmV3ZGlyKTsKKyt9ICAKKysgIAorKy8qIEdpdmVuIGEgZGlyZWN0b3J5LCBhZGQgYWxsIHRoZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZQorKyAgIGltYWdlLiAgCisrKi8KKysKKytzdGF0aWMgdm9pZCBhZGRfcm9vdF9kaXJlY3RvcnkoY2hhciAqZGlybmFtZSkgCisreworKyAgRElSICpkaXIgPSBvcGVuZGlyKGRpcm5hbWUpOworKyAgc3RydWN0IGRpcmVudCAqZW50cnkgPSAwOworKyAgc3RydWN0IGRpcl9lbnRyeSAqbmV3ZGlyID0gMDsKKysKKysgIGlmICghZGlyKSB7CisrICAgIHByaW50ZigiRXJyb3IgLSBkaXJlY3RvcnkgJXMgZG9lcyBub3QgZXhpc3RcbiIsIGRpcm5hbWUpOworKyAgICByZXR1cm47CisrICB9CisrIAorKyAgLyogQ3JlYXRlIHRoZSByb290IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgLSB0aGlzIGlzIGEgYml0IGRpZmZlcmVudCB0aGVuCisrICAgICBhYm92ZSwgYmVjYXVzZSB0aGUgdGFibGUgYWxyZWFkeSBleGlzdHMsIHdlIGp1c3QgcmVmZXIgdG8gaXQuICovCisrCisrICBuZXdkaXIgPSAoc3RydWN0IGRpcl9lbnRyeSAqKSBjYWxsb2MoMSxzaXplb2Yoc3RydWN0IGRpcl9lbnRyeSkpOworKworKyAgaWYgKCFuZXdkaXIpIHsKKysgICAgY2xvc2VkaXIoZGlyKTsKKysgICAgcmV0dXJuOworKyAgfQorKworKyAgbmV3ZGlyLT5lbnRyaWVzID0gcm9vdF9kaXJfZW50cmllczsKKysgIG5ld2Rpci0+cm9vdCA9IDE7CisrICBuZXdkaXItPmNvdW50ID0gMDsKKysgIG5ld2Rpci0+dGFibGUgPSByb290X2RpcjsKKysKKysgIHdoaWxlKChlbnRyeSA9IHJlYWRkaXIoZGlyKSkpIHsKKysgICAgc3RydWN0IHN0YXQgc3Q7CisrICAgIGNoYXIgKmJ1ZmZlcjsKKysgICAgCisrICAgIGlmICghc3RyY21wKGVudHJ5LT5kX25hbWUsICIuIikgfHwgIXN0cmNtcChlbnRyeS0+ZF9uYW1lLCAiLi4iKSkKKysgICAgICBjb250aW51ZTsKKysgICAgCisrICAgIC8qIERPUyB3b3VsZG4ndCBsaWtlIGEgdHlwaWNhbCB1bml4IC4gKGRvdCkgZmlsZSwgc28gd2Ugc2tpcCB0aG9zZSB0b28gKi8KKysgICAgaWYgKGVudHJ5LT5kX25hbWVbMF0gPT0gJy4nKSBjb250aW51ZTsKKysgCisrICAgIGJ1ZmZlciA9IG1hbGxvYyhzdHJsZW4oZGlybmFtZSkgKyBzdHJsZW4oZW50cnktPmRfbmFtZSkgKyAzKTsKKysgICAgaWYgKCFidWZmZXIpIGNvbnRpbnVlOworKworKyAgICBzcHJpbnRmKGJ1ZmZlciwgIiVzLyVzIiwgZGlybmFtZSwgZW50cnktPmRfbmFtZSk7CisrICAgIGlmICghc3RhdChidWZmZXIsICZzdCkpIHsKKysgICAgICBpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgCisrCWFkZF9kaXJlY3RvcnkoYnVmZmVyLCBuZXdkaXIpOworKyAgICAgIGVsc2UgaWYgKFNfSVNSRUcoc3Quc3RfbW9kZSkpIHsKKysJdW5zaWduZWQgY2hhciBhdHRyaWIgPSBjaGVja19hdHRyaWJfZmlsZShkaXJuYW1lLCBlbnRyeS0+ZF9uYW1lKTsKKysJYWRkX2ZpbGUoYnVmZmVyLCBuZXdkaXIsIGF0dHJpYik7CisrICAgICAgfQorKyAgICB9CisrCisrICAgIGZyZWUoYnVmZmVyKTsKKysgIH0KKysKKysgIGNsb3NlZGlyKGRpcik7CisrICBpZiAobmV3ZGlyKSBmcmVlKG5ld2Rpcik7CisrfQorIAorIC8qIFJlcG9ydCB0aGUgY29tbWFuZCB1c2FnZSBhbmQgcmV0dXJuIGEgZmFpbHVyZSBlcnJvciBjb2RlICovCisgCitAQCAtMTQyMyw3ICsxOTAzLDcgQEAKKyAgICAgICAgWy1tIGJvb3QtbXNnLWZpbGVdIFstbiB2b2x1bWUtbmFtZV0gWy1pIHZvbHVtZS1pZF0gWy1CIGJvb3Rjb2RlXVxuXAorICAgICAgICBbLXMgc2VjdG9ycy1wZXItY2x1c3Rlcl0gWy1TIGxvZ2ljYWwtc2VjdG9yLXNpemVdIFstZiBudW1iZXItb2YtRkFUc11cblwKKyAgICAgICAgWy1oIGhpZGRlbi1zZWN0b3JzXSBbLUYgZmF0LXNpemVdIFstciByb290LWRpci1lbnRyaWVzXSBbLVIgcmVzZXJ2ZWQtc2VjdG9yc11cblwKKy0gICAgICAgL2Rldi9uYW1lIFtibG9ja3NdXG4iKTsKKysgICAgICAgWy1kIGRpcmVjdG9yeV0gL2Rldi9uYW1lIFtibG9ja3NdXG4iKTsKKyB9CisgCisgLyoKK0BAIC0xNDYzLDYgKzE5NDMsOCBAQAorICAgaW50IGM7CisgICBjaGFyICp0bXA7CisgICBjaGFyICpsaXN0ZmlsZSA9IE5VTEw7CisrICBjaGFyICpkaXJuYW1lID0gTlVMTDsKKysKKyAgIEZJTEUgKm1zZ2ZpbGU7CisgICBzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworICAgaW50IGkgPSAwLCBwb3MsIGNoOworQEAgLTE0ODMsNyArMTk2NSw3IEBACisgICBwcmludGYgKCIlcyAiIFZFUlNJT04gIiAoIiBWRVJTSU9OX0RBVEUgIilcbiIsCisgCSAgIHByb2dyYW1fbmFtZSk7CisgCistICB3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJBYmNDZjpGOklpOmw6bTpuOnI6UjpzOlM6djpCOiIpKSAhPSBFT0YpCisrICB3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJBYmNDZDpmOkY6SWk6bDptOm46cjpSOnM6Uzp2OkI6IikpICE9IEVPRikKKyAgICAgLyogU2NhbiB0aGUgY29tbWFuZCBsaW5lIGZvciBvcHRpb25zICovCisgICAgIHN3aXRjaCAoYykKKyAgICAgICB7CitAQCAtMTUwOCw2ICsxOTkwLDEwIEBACisgCWNyZWF0ZSA9IFRSVUU7CisgCWJyZWFrOworIAorKyAgY2FzZSAnZCc6CisrCWRpcm5hbWUgPSBvcHRhcmc7CisrCWJyZWFrOworKworICAgICAgIGNhc2UgJ2YnOgkJLyogZiA6IENob29zZSBudW1iZXIgb2YgRkFUcyAqLworIAlucl9mYXRzID0gKGludCkgc3RydG9sIChvcHRhcmcsICZ0bXAsIDApOworIAlpZiAoKnRtcCB8fCBucl9mYXRzIDwgMSB8fCBucl9mYXRzID4gNCkKK0BAIC0xODExLDggKzIyOTcsMTAgQEAKKyAgIGVsc2UgaWYgKGxpc3RmaWxlKQorICAgICBnZXRfbGlzdF9ibG9ja3MgKGxpc3RmaWxlKTsKKyAKKy0gIHdyaXRlX3RhYmxlcyAoKTsJCS8qIFdyaXRlIHRoZSBmaWxlIHN5c3RlbSB0YWJsZXMgYXdheSEgKi8KKyAKKysgIGlmIChkaXJuYW1lKSBhZGRfcm9vdF9kaXJlY3RvcnkoZGlybmFtZSk7CisrCisrICB3cml0ZV90YWJsZXMgKCk7CQkvKiBXcml0ZSB0aGUgZmlsZSBzeXN0ZW0gdGFibGVzIGF3YXkhICovICAKKyAgIGV4aXQgKDApOwkJCS8qIFRlcm1pbmF0ZSB3aXRoIG5vIGVycm9ycyEgKi8KKyB9CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbXNkb3NfZmF0MTJfdW5kZWZpbmVkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL21zZG9zX2ZhdDEyX3VuZGVmaW5lZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWU4YTc1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL21zZG9zX2ZhdDEyX3VuZGVmaW5lZC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitGaXggYSBjb21waWxhdGlvbiBlcnJvciBkdWUgdG8gdW5kZWZpbmVkIE1TRE9TX0ZBVDEyLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KK1dlJ3JlIHRyYWNraW5nIGFuIG9sZCByZWxlYXNlIG9mIGRvc2ZzdG9vbHMgZHVlIHRvIGxpY2Vuc2luZyBpc3N1ZXMuCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gZG9zZnN0b29scy0yLjEwL2Rvc2ZzY2svYm9vdC5jLm9yaWcJMjAwNC0xMC0xNSAwODo1MTo0Mi4zOTQ3MjUxNzYgLTA2MDAKKysrKyBkb3Nmc3Rvb2xzLTIuMTAvZG9zZnNjay9ib290LmMJMjAwNC0xMC0xNSAwODo0OToxNi43NzY4NjI0NTYgLTA2MDAKK0BAIC0xNCw2ICsxNCw5IEBACisgI2luY2x1ZGUgImlvLmgiCisgI2luY2x1ZGUgImJvb3QuaCIKKyAKKysjaWZuZGVmIE1TRE9TX0ZBVDEyCisrI2RlZmluZSBNU0RPU19GQVQxMiA0MDg0CisrI2VuZGlmCisgCisgI2RlZmluZSBST1VORF9UT19NVUxUSVBMRShuLG0pICgobikgJiYgKG0pID8gKG4pKyhtKS0xLSgobiktMSklKG0pIDogMCkKKyAgICAgLyogZG9uJ3QgZGl2aWRlIGJ5IHplcm8gKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ub2ZhdDMyX2F1dG9zZWxlY3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbm9mYXQzMl9hdXRvc2VsZWN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0OGE3NmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbm9mYXQzMl9hdXRvc2VsZWN0LnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK0ZBVDMyIGFwcGVhcnMgdG8gYmUgYnJva2VuIHdoZW4gdXNlZCB3aXRoIHRoZSAtZCBvcHRpb24gdG8gcG9wdWxhdGUgdGhlIG1zZG9zCitpbWFnZS4gVGhpcyBkaXNhYmxlcyB0aGUgRkFUMzIgYXV0b3NlbGVjdGlvbiBjb2RlIHdoaWNoIG1lYW5zIHdlIGRvbid0IGdldAorYnJva2VuIGltYWdlcyB3aXRoIHRoZSAtZCBvcHRpb24uIEl0IGNhbiBzdGlsbCBiZSBlbmFibGVkIG9uIHRoZSBjb21tYW5kbGluZQorYXQgdGhlIHVzZXJzIG93biByaXNrLiBUaGlzIGNoYW5nZXMgdXMgYmFjayB0byB0aGUgMi4xMCB2ZXJzaW9uJ3MgYmVoYXZpb3VyCit3aGljaCB3YXMga25vd24gdG8gd29yayB3ZWxsIGV2ZW4gd2l0aCBsYXJnZSBpbWFnZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGVwZW5kcyBvbiBvdGhlciBwYXRjaGVzIHdlIGFwcGx5XQorCitSUCAyMDExLzEyLzEzCisKK0luZGV4OiBkb3Nmc3Rvb2xzLTIuMTEvbWtkb3Nmcy9ta2Rvc2ZzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkb3Nmc3Rvb2xzLTIuMTEub3JpZy9ta2Rvc2ZzL21rZG9zZnMuYwkyMDExLTEyLTEzIDEzOjU0OjM3LjUzODUwOTM5MSArMDAwMAorKysrIGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL21rZG9zZnMuYwkyMDExLTEyLTEzIDEzOjU1OjEwLjI1ODUwODYzMSArMDAwMAorQEAgLTgwOCwxMCArODA4LDEyIEBACisgICAgICAgYnMubWVkaWEgPSAoY2hhcikgMHhmODsgLyogU2V0IHVwIHRoZSBtZWRpYSBkZXNjcmlwdG9yIGZvciBhIGhhcmQgZHJpdmUgKi8KKyAgICAgICBicy5kaXJfZW50cmllc1swXSA9IChjaGFyKSAwOwkvKiBEZWZhdWx0IHRvIDUxMiBlbnRyaWVzICovCisgICAgICAgYnMuZGlyX2VudHJpZXNbMV0gPSAoY2hhcikgMjsKKysvKgorICAgICAgIGlmICghc2l6ZV9mYXQgJiYgYmxvY2tzKlNFQ1RPUlNfUEVSX0JMT0NLID4gMTA2NDk2MCkgeworIAkgIGlmICh2ZXJib3NlKSBwcmludGYoIkF1dG8tc2VsZWN0aW5nIEZBVDMyIGZvciBsYXJnZSBmaWxlc3lzdGVtXG4iKTsKKyAJICBzaXplX2ZhdCA9IDMyOworICAgICAgIH0KKysqLworICAgICAgIGlmIChzaXplX2ZhdCA9PSAzMikgeworIAkgIC8qIEZvciBGQVQzMiwgdHJ5IHRvIGRvIHRoZSBzYW1lIGFzIE0kJ3MgZm9ybWF0IGNvbW1hbmQ6CisgCSAgICogZnMgc2l6ZSA8IDI1Nk06IDAuNWsgY2x1c3RlcnMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29sc18yLjExLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzXzIuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVlYzQ4OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29sc18yLjExLmJiCkBAIC0wLDAgKzEsMzggQEAKKyMgZG9zZnN0b29scyBPRSBidWlsZCBmaWxlCisjIENvcHlyaWdodCAoQykgMjAwNC0yMDA2LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIHBhY2thZ2VzL0NPUFlJTkcpCitTVU1NQVJZID0gIkRPUyBGQVQgRmlsZXN5c3RlbSBVdGlsaXRpZXMiCitIT01FUEFHRSA9ICJodHRwOi8vZGFuaWVsLWJhdW1hbm4uY2gvc29mdHdhcmUvZG9zZnN0b29scy8iCisKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9ta2Rvc2ZzL0NPUFlJTkc7bWQ1PWNiZTY3ZjA4ZDY4ODNiZmY1ODdmNjE1ZjBjYzgxYWE4IgorUFIgPSAicjUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3BrZ3MuZmVkb3JhcHJvamVjdC5vcmcvcmVwby9wa2dzLyR7QlBOfS8ke0JQfS5zcmMudGFyLmd6LzQwN2Q0MDVhZGU0MTBmNzU5N2QzNjRhYjVkYzhjOWY2LyR7QlB9LnNyYy50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbWtkb3Nmcy1ib290Y29kZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ta2Rvc2ZzLWRpci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hbGlnbm1lbnRfaGFjay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tc2Rvc19mYXQxMl91bmRlZmluZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZG9zZnN0b29scy1tc2Rvc19mcy10eXBlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlLWxpbnV4LXR5cGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25vZmF0MzJfYXV0b3NlbGVjdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfcG9wdWxhdGVkX2Rvc2ZzX2NyZWF0aW9uLnBhdGNoIFwKKwkgICBmaWxlOi8vMDAwMS1JbmNsdWRlLWZjbnRsLmgtZm9yLWdldHRpbmctbG9mZl90LWRlZmluaXRpb24ucGF0Y2ggXAorCSAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjQwN2Q0MDVhZGU0MTBmNzU5N2QzNjRhYjVkYzhjOWY2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBlYWM2ZDEyMzg4YjNkOWVkNzg2ODQ1MjljMWIwZDkzNDZmYTJhYmJlNDA2YzRkNGEzZWI1YTAyM2M5OGE0ODQiCisKKyMgTWFrZWZpbGUgc2V0cyB0aGlzLCBidXQgd2UgY2xvYmJlciBpdHMgQ0ZMQUdTLCBzbworIyBhZGQgdGhpcyBpbiBoZXJlIHRvIGZvciBzdXJlIGFsbG93IGZvciBiaWcgZmlsZXMuCisjCitDRkxBR1NfYXBwZW5kID0gIiAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IgorQ0ZMQUdTX2FwcGVuZF9saWJjLW11c2wgPSAiIC1EX0dOVV9TT1VSQ0UiCisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgIlBSRUZJWD0ke0R9IiAiU0JJTkRJUj0ke0R9JHtiYXNlX3NiaW5kaXJ9IiBcCisJCSAgICJNQU5ESVI9JHtEfSR7bWFuZGlyfS9tYW44IiBpbnN0YWxsCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzXzMuMC4yOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29sc18zLjAuMjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMxMzFjYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29sc18zLjAuMjguYmIKQEAgLTAsMCArMSwyNCBAQAorIyBkb3Nmc3Rvb2xzIE9FIGJ1aWxkIGZpbGUKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgQ29weXJpZ2h0IChDKSAyMDE1LCBTw4PCtnJlbiBCcmlua21hbm4gPHNvZXJlbi5icmlua21hbm5AZ21haWw+ICBBbGwgUmlnaHRzIFJlc2VydmVkCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIHBhY2thZ2VzL0NPUFlJTkcpCitTVU1NQVJZID0gIkRPUyBGQVQgRmlsZXN5c3RlbSBVdGlsaXRpZXMiCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vZG9zZnN0b29scy9kb3Nmc3Rvb2xzIgorCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9yZWxlYXNlcy9kb3dubG9hZC92My4wLjI4L2Rvc2ZzdG9vbHMtMy4wLjI4LnRhci54eiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI2YTA0N2E2YzY1MTg2YjllYmIxODUzNzA5YWRiMzZkYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlZTk1OTEzMDQ0ZWNmMjcxOWI2M2VhMTEyMTI5MTc2NDk3MDlhNmU1MzIwOWE3MmQ2MjIxMzVhYWE4NTE3ZWUyIgorCitGSUxFU18ke1BOfSA9ICIke2Jhc2Vfc2JpbmRpcn0iCitGSUxFU18ke1BOfS1kb2MgPSAiJHttYW5kaXJ9ICR7ZG9jZGlyfSIKKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAiUFJFRklYPSR7RH0ke3ByZWZpeH0iICJTQklORElSPSR7RH0ke2Jhc2Vfc2JpbmRpcn0iIFwKKwkJICAgIk1BTkRJUj0ke0R9JHttYW5kaXJ9IiAiRE9DRElSPSR7RH0ke2RvY2Rpcn0iIGluc3RhbGwKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWVjMmNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLmluYwpAQCAtMCwwICsxLDc5IEBACitTVU1NQVJZID0gIlBhY2thZ2UgbWFpbnRlbmFuY2Ugc3lzdGVtIGZyb20gRGViaWFuIgorTElDRU5TRSA9ICJHUEx2Mi4wKyIKK1NFQ1RJT04gPSAiYmFzZSIKKworU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vZC9kcGtnL2Rwa2dfJHtQVn0udGFyLnh6IgorCitTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGZpbGU6Ly8wMDAxLVdoZW4tcnVubmluZy1kb19wYWNrYWdlX3dyaXRlX2RlYi13ZS1oYXZlLXRyZWVzLW9mLWgucGF0Y2giCisKK0RFUEVORFMgPSAiemxpYiBiemlwMiBwZXJsIG5jdXJzZXMiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJiemlwMi1yZXBsYWNlbWVudC1uYXRpdmUgemxpYi1uYXRpdmUgdmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzLW5hdGl2ZSBnZXR0ZXh0LW5hdGl2ZSBwZXJsLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gIiR7VklSVFVBTC1SVU5USU1FX3VwZGF0ZS1hbHRlcm5hdGl2ZXN9IHh6IHJ1bi1wb3N0aW5zdHMgcGVybCIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICJ4ei1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGVybG5hdGl2ZSBwa2djb25maWcgc3lzdGVtZAorCitweXRob24gKCkgeworICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdTWVNURU1EX1NFUlZJQ0VfJXMnICUgKHBuKSwgJ2Rwa2ctY29uZmlndXJlLnNlcnZpY2UnKQorfQorCitleHBvcnQgUEVSTCA9ICIke2JpbmRpcn0vcGVybCIKK1BFUkxfY2xhc3MtbmF0aXZlID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZS9wZXJsIgorCitleHBvcnQgUEVSTF9MSUJESVIgPSAiJHtsaWJkaXJ9L3BlcmwiCitQRVJMX0xJQkRJUl9jbGFzcy1uYXRpdmUgPSAiJHtsaWJkaXJ9L3BlcmwtbmF0aXZlL3BlcmwiCisKK0VYVFJBX09FQ09ORiA9ICJcCisJCS0tZGlzYWJsZS1kc2VsZWN0IFwKKwkJLS1lbmFibGUtc3RhcnQtc3RvcC1kYWVtb24gXAorCQktLXdpdGgtemxpYiBcCisJCS0td2l0aC1iejIgXAorCQktLXdpdGhvdXQtbGlibHptYSBcCisJCS0td2l0aG91dC1zZWxpbnV4IFwKKwkJIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgVEFSPXRhciIKKworZG9fY29uZmlndXJlICgpIHsKKyAgICBlY2hvID4+ICR7U30vbTQvY29tcGlsZXIubTQKKyAgICBzZWQgLWkgLWUgJ3MjUEVSTF9MSUJESVI9LiokI1BFUkxfTElCRElSPSIke2xpYmRpcn0vcGVybCIjJyAke1N9L2NvbmZpZ3VyZQorICAgIGF1dG90b29sc19kb19jb25maWd1cmUKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWlmIFsgIiR7UE59IiA9ICJkcGtnLW5hdGl2ZSIgXTsgdGhlbgorCQkjIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgZG9lc24ndCBoYXZlIGFuIG9mZmxpbmUgbW9kZQorCQlybSAke0R9JHtiaW5kaXJ9L3VwZGF0ZS1hbHRlcm5hdGl2ZXMKKwkJc2VkIC1pIC1lICdzfF4jIS4qJHtiaW5kaXJ9L3BlcmwtbmF0aXZlLiovcGVybHwjIS91c3IvYmluL2VudiBuYXRpdmVwZXJsfCcgJHtEfSR7YmluZGlyfS9kcGtnLSoKKwllbHNlCisJCXNlZCAtaSAtZSAnc3xeIyEuKiR7YmluZGlyfS9wZXJsLW5hdGl2ZS4qL3Blcmx8IyEvdXNyL2Jpbi9lbnYgcGVybHwnICR7RH0ke2JpbmRpcn0vZHBrZy0qCisJZmkKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN2aW5pdCcsJ2ZhbHNlJywndHJ1ZScsZCl9O3RoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCQlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCisJCQktZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyBcCisJCQktZSAncyxAQklORElSQCwke2JpbmRpcn0sZycgXAorCQkJLWUgJ3MsQFNZU1RFTURfVU5JVERJUkAsJHtzeXN0ZW1kX3VuaXRkaXJ9LGcnIFwKKwkJCSR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2Rwa2ctY29uZmlndXJlLnNlcnZpY2UKKwlmaQorfQorCitQUk9WID0gInZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcyIKK1BST1ZfY2xhc3MtbmF0aXZlID0gIiIKKworUFJPVklERVMgKz0gIiR7UFJPVn0iCisKK1BBQ0tBR0VTID0rICJ1cGRhdGUtYWx0ZXJuYXRpdmVzLWRwa2ciCitGSUxFU191cGRhdGUtYWx0ZXJuYXRpdmVzLWRwa2cgPSAiJHtiaW5kaXJ9L3VwZGF0ZS1hbHRlcm5hdGl2ZXMgJHtsb2NhbHN0YXRlZGlyfS9saWIvZHBrZy9hbHRlcm5hdGl2ZXMgJHtzeXNjb25mZGlyfS9hbHRlcm5hdGl2ZXMiCitSUFJPVklERVNfdXBkYXRlLWFsdGVybmF0aXZlcy1kcGtnICs9ICJ1cGRhdGUtYWx0ZXJuYXRpdmVzIgorCitQQUNLQUdFUyArPSAiJHtQTn0tcGVybCIKK0ZJTEVTXyR7UE59LXBlcmwgPSAiJHtsaWJkaXJ9L3BlcmwiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDAxLVdoZW4tcnVubmluZy1kb19wYWNrYWdlX3dyaXRlX2RlYi13ZS1oYXZlLXRyZWVzLW9mLWgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwMS1XaGVuLXJ1bm5pbmctZG9fcGFja2FnZV93cml0ZV9kZWItd2UtaGF2ZS10cmVlcy1vZi1oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NjdlZjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwMS1XaGVuLXJ1bm5pbmctZG9fcGFja2FnZV93cml0ZV9kZWItd2UtaGF2ZS10cmVlcy1vZi1oLnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK0Zyb20gZDE0ZmZkNzg2OTkzZGE2MGNhODRjNDgxMmRhOGE2NTk0YThjNzY0ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogV2VkLCAyNiBBdWcgMjAxNSAxNTo0ODoxMyArMDMwMAorU3ViamVjdDogW1BBVENIIDEvNV0gV2hlbiBydW5uaW5nIGRvX3BhY2thZ2Vfd3JpdGVfZGViLCB3ZSBoYXZlIHRyZWVzIG9mCisgaGFyZGxpbmtlZCBmaWxlcyBzdWNoIGFzIHRoZSBkYmcgc291cmNlIGZpbGVzIGluICR7UE59LWRiZy4gSWYgc29tZXRoaW5nCisgbWFrZXMgYW5vdGhlciBjb3B5IG9mIG9uZSBvZiB0aG9zZSBmaWxlcyAob3IgZGVsZXRlcyBvbmUpLCB0aGUgbnVtYmVyIG9mCisgbGlua3MgYSBmaWxlIGhhcyBjaGFuZ2VzIGFuZCB0YXIgY2FuIG5vdGljZSB0aGlzLCBlLmcuOgorCit8IERFQlVHOiBFeGVjdXRpbmcgcHl0aG9uIGZ1bmN0aW9uIGRvX3BhY2thZ2VfZGViCit8IGRwa2ctZGViOiBidWlsZGluZyBwYWNrYWdlIGBzZWQtcHRlc3QnIGluIGAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3NlZC80LjIuMi1yMC9kZXBsb3ktZGVicy9pNTg2L3NlZC1wdGVzdF80LjIuMi1yMC4zX2kzODYuZGViJy4KK3wgdGFyOiAuL3Vzci9saWIvc2VkL3B0ZXN0L3Rlc3RzdWl0ZS90c3QtcmVnZXgyOiBmaWxlIGNoYW5nZWQgYXMgd2UgcmVhZCBpdAorfCBkcGtnLWRlYjogZXJyb3I6IHN1YnByb2Nlc3MgdGFyIC1jZiByZXR1cm5lZCBlcnJvciBleGl0IHN0YXR1cyAxCisKK1RhciByZXR1cm5zIGFuIGVycm9yIG9mIDEgd2hlbiBmaWxlcyAnY2hhbmdlJyBhbmQgb3RoZXIgZXJyb3JzIGNvZGVzCitpbiBvdGhlciBlcnJvciBjYXNlcy4gV2UgdHdlYWsgZHBrZy1kZWIgaGVyZSBzbyB0aGF0IGl0IGlnbm9yZXMgYW4gZXhpdAorY29kZSBvZiAxIGZyb20gdGFyLiBUaGUgZmlsZXMgZG9uJ3QgcmVhbGx5IGNoYW5nZSAoYW5kIHdlIGhhdmUgbG9ja2luZyBpbgorcGxhY2UgdG8gYXZvaWQgdGhhdCBraW5kIG9mIGlzc3VlKS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitSUCAyMDE1LzMvMjcKKy0tLQorIGRwa2ctZGViL2J1aWxkLmMgfCAxMSArKysrKysrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9kcGtnLWRlYi9idWlsZC5jIGIvZHBrZy1kZWIvYnVpbGQuYworaW5kZXggZWEzZDg2MS4uMTU4OTkyNyAxMDA2NDQKKy0tLSBhL2Rwa2ctZGViL2J1aWxkLmMKKysrKyBiL2Rwa2ctZGViL2J1aWxkLmMKK0BAIC00NTgsNyArNDU4LDcgQEAgZG9fYnVpbGQoY29uc3QgY2hhciAqY29uc3QgKmFyZ3YpCisgICBjaGFyICpkZWJhcjsKKyAgIGNoYXIgKnRmYnVmOworICAgaW50IGFyZmQ7CistICBpbnQgcDFbMl0sIHAyWzJdLCBnemZkOworKyAgaW50IHAxWzJdLCBwMlsyXSwgZ3pmZCwgcmM7CisgICBwaWRfdCBjMSwgYzI7CisgCisgICAvKiBEZWNvZGUgb3VyIGFyZ3VtZW50cy4gKi8KK0BAIC01MzgsNyArNTM4LDkgQEAgZG9fYnVpbGQoY29uc3QgY2hhciAqY29uc3QgKmFyZ3YpCisgICB9CisgICBjbG9zZShwMVswXSk7CisgICBzdWJwcm9jX3JlYXAoYzIsIF8oIjxjb21wcmVzcz4gZnJvbSB0YXIgLWNmIiksIDApOworLSAgc3VicHJvY19yZWFwKGMxLCAidGFyIC1jZiIsIDApOworKyAgcmMgPSBzdWJwcm9jX3JlYXAoYzEsICJ0YXIgLWNmIiwgU1VCUFJPQ19SRVRFUlJPUik7CisrICBpZiAocmMgJiYgcmMgIT0gMSkKKysgICAgb2hzaGl0ZShfKCJzdWJwcm9jZXNzICVzIHJldHVybmVkIGVycm9yIGV4aXQgc3RhdHVzICVkIiksICJ0YXIgLWNmIiwgcmMpOworIAorICAgaWYgKGxzZWVrKGd6ZmQsIDAsIFNFRUtfU0VUKSkKKyAgICAgb2hzaGl0ZShfKCJmYWlsZWQgdG8gcmV3aW5kIHRlbXBvcmFyeSBmaWxlICglcykiKSwgXygiY29udHJvbCBtZW1iZXIiKSk7CitAQCAtNjI2LDcgKzYyOCwxMCBAQCBkb19idWlsZChjb25zdCBjaGFyICpjb25zdCAqYXJndikKKyAgIC8qIEFsbCBkb25lLCBjbGVhbiB1cCB3YWl0IGZvciB0YXIgYW5kIDxjb21wcmVzcz4gdG8gZmluaXNoIHRoZWlyIGpvYi4gKi8KKyAgIGNsb3NlKHAxWzFdKTsKKyAgIHN1YnByb2NfcmVhcChjMiwgXygiPGNvbXByZXNzPiBmcm9tIHRhciAtY2YiKSwgMCk7CistICBzdWJwcm9jX3JlYXAoYzEsICJ0YXIgLWNmIiwgMCk7CisrICByYyA9IHN1YnByb2NfcmVhcChjMSwgInRhciAtY2YiLCBTVUJQUk9DX1JFVEVSUk9SKTsKKysgIGlmIChyYyAmJiByYyAhPSAxKQorKyAgICBvaHNoaXRlKF8oInN1YnByb2Nlc3MgJXMgcmV0dXJuZWQgZXJyb3IgZXhpdCBzdGF0dXMgJWQiKSwgInRhciAtY2YiLCByYyk7CisrCisgICAvKiBPa2F5LCB3ZSBoYXZlIGRhdGEudGFyIGFzIHdlbGwgbm93LCBhZGQgaXQgdG8gdGhlIGFyIHdyYXBwZXIuICovCisgICBpZiAoZGViX2Zvcm1hdC5tYWpvciA9PSAyKSB7CisgICAgIGNoYXIgZGF0YW1lbWJlclsxNiArIDFdOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwMi1BZGFwdC10by1saW51eC13cnMta2VybmVsLXZlcnNpb24td2hpY2gtaGFzLWNoYXJhY3RlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDItQWRhcHQtdG8tbGludXgtd3JzLWtlcm5lbC12ZXJzaW9uLXdoaWNoLWhhcy1jaGFyYWN0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzFhNmEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDItQWRhcHQtdG8tbGludXgtd3JzLWtlcm5lbC12ZXJzaW9uLXdoaWNoLWhhcy1jaGFyYWN0ZS5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIGI0ZWE1NDE1OGMzOTk4NzRlMTIzOTRlYmM5MWFmZTk4OTU0Njk1ZTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjYgQXVnIDIwMTUgMTY6MTY6MTYgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzVdIEFkYXB0IHRvIGxpbnV4LXdycyBrZXJuZWwgdmVyc2lvbiwgd2hpY2ggaGFzIGNoYXJhY3RlcgorICdfJyBpbnNpZGUuIFJlbW92ZSB0aGUgZmlyc3QtY2hhci1kaWdpdC1jaGVjayAoYXMgdGhlIDEuMTUuOC41IHZlcnNpb24gZG9lcykuCisKK1NpZ25lZC1vZmYtYnk6IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBsaWIvZHBrZy9wYXJzZWhlbHAuYyB8IDYgKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9kcGtnL3BhcnNlaGVscC5jIGIvbGliL2Rwa2cvcGFyc2VoZWxwLmMKK2luZGV4IDc5YjI5MDguLjc3NThhYTUgMTAwNjQ0CistLS0gYS9saWIvZHBrZy9wYXJzZWhlbHAuYworKysrIGIvbGliL2Rwa2cvcGFyc2VoZWxwLmMKK0BAIC0yMzUsMTQgKzIzNSwxMiBAQCBwYXJzZXZlcnNpb24oc3RydWN0IGRwa2dfdmVyc2lvbiAqcnZlcnNpb24sIGNvbnN0IGNoYXIgKnN0cmluZywKKyAKKyAgIC8qIFhYWDogV291bGQgYmUgZmFzdGVyIHRvIHVzZSBzb21ldGhpbmcgbGlrZSBjaXN2ZXJzaW9uIGFuZCBjaXNyZXZpc2lvbi4gKi8KKyAgIHB0ciA9IHJ2ZXJzaW9uLT52ZXJzaW9uOworLSAgaWYgKCpwdHIgJiYgIWNfaXNkaWdpdCgqcHRyKyspKQorLSAgICByZXR1cm4gZHBrZ19wdXRfd2FybihlcnIsIF8oInZlcnNpb24gbnVtYmVyIGRvZXMgbm90IHN0YXJ0IHdpdGggZGlnaXQiKSk7CisgICBmb3IgKDsgKnB0cjsgcHRyKyspIHsKKy0gICAgaWYgKCFjX2lzZGlnaXQoKnB0cikgJiYgIWNfaXNhbHBoYSgqcHRyKSAmJiBzdHJjaHIoIi4tK346IiwgKnB0cikgPT0gTlVMTCkKKysgICAgaWYgKCFjX2lzZGlnaXQoKnB0cikgJiYgIWNfaXNhbHBoYSgqcHRyKSAmJiBzdHJjaHIoIi4tK346XyIsICpwdHIpID09IE5VTEwpCisgICAgICAgcmV0dXJuIGRwa2dfcHV0X3dhcm4oZXJyLCBfKCJpbnZhbGlkIGNoYXJhY3RlciBpbiB2ZXJzaW9uIG51bWJlciIpKTsKKyAgIH0KKyAgIGZvciAocHRyID0gcnZlcnNpb24tPnJldmlzaW9uOyAqcHRyOyBwdHIrKykgeworLSAgICBpZiAoIWNfaXNkaWdpdCgqcHRyKSAmJiAhY19pc2FscGhhKCpwdHIpICYmIHN0cmNocigiLit+IiwgKnB0cikgPT0gTlVMTCkKKysgICAgaWYgKCFjX2lzZGlnaXQoKnB0cikgJiYgIWNfaXNhbHBoYSgqcHRyKSAmJiBzdHJjaHIoIi4tK35fIiwgKnB0cikgPT0gTlVMTCkKKyAgICAgICByZXR1cm4gZHBrZ19wdXRfd2FybihlcnIsIF8oImludmFsaWQgY2hhcmFjdGVyIGluIHJldmlzaW9uIG51bWJlciIpKTsKKyAgIH0KKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDMtT3VyLXByZS1wb3N0aW5zdHMtZXhwZWN0LUQtdG8tYmUtc2V0LXdoZW4tcnVubmluZy1pbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDAzLU91ci1wcmUtcG9zdGluc3RzLWV4cGVjdC1ELXRvLWJlLXNldC13aGVuLXJ1bm5pbmctaW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY3N2M2YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDAzLU91ci1wcmUtcG9zdGluc3RzLWV4cGVjdC1ELXRvLWJlLXNldC13aGVuLXJ1bm5pbmctaW4ucGF0Y2gKQEAgLTAsMCArMSw2MCBAQAorRnJvbSAyNDIyOTk3MTQ5MjUxNWI2NGM4MWU4YzYzOTJlNWRmYmRjMjJiNDRjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDI2IEF1ZyAyMDE1IDE2OjI1OjQ1ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMy81XSBPdXIgcHJlL3Bvc3RpbnN0cyBleHBlY3QgJEQgdG8gYmUgc2V0IHdoZW4gcnVubmluZyBpbiBhCisgc3lzcm9vdCBhbmQgZG9uJ3QgZXhwZWN0IGEgY2hyb290LiBUaGlzIG1hdGNoZXMgdXAgb3VyIHN5c3RlbSBleHBlY3RhdGlvbnMKKyB3aXRoIHdoYXQgZHBrZyBkb2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIFNwZWNpZmljXQorCitSUCAyMDExLzEyLzA3CistLS0KKyBzcmMvc2NyaXB0LmMgfCAzMSArKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMjkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvc2NyaXB0LmMgYi9zcmMvc2NyaXB0LmMKK2luZGV4IGE5NTgxNDUuLjI0YzQ5ZjkgMTAwNjQ0CistLS0gYS9zcmMvc2NyaXB0LmMKKysrKyBiL3NyYy9zY3JpcHQuYworQEAgLTEwMCwzNiArMTAwLDkgQEAgbWFpbnRzY3JpcHRfcHJlX2V4ZWMoc3RydWN0IGNvbW1hbmQgKmNtZCkKKyAJc2l6ZV90IGluc3RkaXJsID0gc3RybGVuKGluc3RkaXIpOworIAorIAlpZiAoKmluc3RkaXIpIHsKKy0JCWlmIChzdHJuY21wKGFkbWluZGlyLCBpbnN0ZGlyLCBpbnN0ZGlybCkgIT0gMCkKKy0JCQlvaHNoaXQoXygiYWRtaW5kaXIgbXVzdCBiZSBpbnNpZGUgaW5zdGRpciBmb3IgZHBrZyB0byB3b3JrIHByb3Blcmx5IikpOworLQkJaWYgKHNldGVudigiRFBLR19BRE1JTkRJUiIsIGFkbWluZGlyICsgaW5zdGRpcmwsIDEpIDwgMCkKKy0JCQlvaHNoaXRlKF8oInVuYWJsZSB0byBzZXRlbnYgZm9yIHN1YnByb2Nlc3NlcyIpKTsKKy0KKy0JCWlmIChjaHJvb3QoaW5zdGRpcikpCistCQkJb2hzaGl0ZShfKCJmYWlsZWQgdG8gY2hyb290IHRvICclLjI1MHMnIiksIGluc3RkaXIpOworLQl9CistCS8qIFN3aXRjaCB0byBhIGtub3duIGdvb2QgZGlyZWN0b3J5IHRvIGdpdmUgdGhlIG1haW50YWluZXIgc2NyaXB0CistCSAqIGEgc2FuZXIgZW52aXJvbm1lbnQsIGFsc28gbmVlZGVkIGFmdGVyIHRoZSBjaHJvb3QoKS4gKi8KKy0JaWYgKGNoZGlyKCIvIikpCistCQlvaHNoaXRlKF8oImZhaWxlZCB0byBjaGRpciB0byAnJS4yNTVzJyIpLCAiLyIpOworLQlpZiAoZGVidWdfaGFzX2ZsYWcoZGJnX3NjcmlwdHMpKSB7CistCQlzdHJ1Y3QgdmFyYnVmIGFyZ3MgPSBWQVJCVUZfSU5JVDsKKy0JCWNvbnN0IGNoYXIgKiphcmd2ID0gY21kLT5hcmd2OworLQorLQkJd2hpbGUgKCorK2FyZ3YpIHsKKy0JCQl2YXJidWZfYWRkX2NoYXIoJmFyZ3MsICcgJyk7CistCQkJdmFyYnVmX2FkZF9zdHIoJmFyZ3MsICphcmd2KTsKKy0JCX0KKy0JCXZhcmJ1Zl9lbmRfc3RyKCZhcmdzKTsKKy0JCWRlYnVnKGRiZ19zY3JpcHRzLCAiZm9yay9leGVjICVzICglcyApIiwgY21kLT5maWxlbmFtZSwKKy0JCSAgICAgIGFyZ3MuYnVmKTsKKy0JCXZhcmJ1Zl9kZXN0cm95KCZhcmdzKTsKKysJCXNldGVudigiRCIsIGluc3RkaXIsIDEpOworIAl9CistCWlmICghaW5zdGRpcmwpCistCQlyZXR1cm4gY21kLT5maWxlbmFtZTsKKy0KKy0JYXNzZXJ0KHN0cmxlbihjbWQtPmZpbGVuYW1lKSA+PSBpbnN0ZGlybCk7CistCXJldHVybiBjbWQtPmZpbGVuYW1lICsgaW5zdGRpcmw7CisrCXJldHVybiBjbWQtPmZpbGVuYW1lOworIH0KKyAKKyAvKioKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDQtVGhlLWx1dGltZXMtZnVuY3Rpb24tZG9lc24tdC13b3JrLXByb3Blcmx5LWZvci1hbGwtcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDA0LVRoZS1sdXRpbWVzLWZ1bmN0aW9uLWRvZXNuLXQtd29yay1wcm9wZXJseS1mb3ItYWxsLXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZjODVjNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDA0LVRoZS1sdXRpbWVzLWZ1bmN0aW9uLWRvZXNuLXQtd29yay1wcm9wZXJseS1mb3ItYWxsLXMucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSBhZGI2YmZkMGZlZWNlYWYwMzBkZjBkZWJlMzM0M2Q3ZjczZTcwOGEwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDI2IEF1ZyAyMDE1IDE2OjI3OjQ1ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggNC81XSBUaGUgbHV0aW1lcyBmdW5jdGlvbiBkb2Vzbid0IHdvcmsgcHJvcGVybHkgZm9yIGFsbAorIHN5c3RlbXMuCisKK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIHNyYy9hcmNoaXZlcy5jIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvYXJjaGl2ZXMuYyBiL3NyYy9hcmNoaXZlcy5jCitpbmRleCBiZmY1ZjE0Li5iNzExMDEzIDEwMDY0NAorLS0tIGEvc3JjL2FyY2hpdmVzLmMKKysrKyBiL3NyYy9hcmNoaXZlcy5jCitAQCAtNDQ5LDggKzQ0OSw5IEBAIHRhcm9iamVjdF9zZXRfbXRpbWUoc3RydWN0IHRhcl9lbnRyeSAqdGUsIGNvbnN0IGNoYXIgKnBhdGgpCisgCisgICBpZiAodGUtPnR5cGUgPT0gVEFSX0ZJTEVUWVBFX1NZTUxJTkspIHsKKyAjaWZkZWYgSEFWRV9MVVRJTUVTCistICAgIGlmIChsdXRpbWVzKHBhdGgsIHR2KSAmJiBlcnJubyAhPSBFTk9TWVMpCisrLyogICAgaWYgKGx1dGltZXMocGF0aCwgdHYpICYmIGVycm5vICE9IEVOT1NZUykKKyAgICAgICBvaHNoaXRlKF8oImVycm9yIHNldHRpbmcgdGltZXN0YW1wcyBvZiAnJS4yNTVzJyIpLCBwYXRoKTsKKysqLworICNlbmRpZgorICAgfSBlbHNlIHsKKyAgICAgaWYgKHV0aW1lcyhwYXRoLCB0dikpCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDA1LWRwa2ctY29tcGlsZXIubTQtcmVtb3ZlLVd2bGEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwNS1kcGtnLWNvbXBpbGVyLm00LXJlbW92ZS1XdmxhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZTk2ZjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwNS1kcGtnLWNvbXBpbGVyLm00LXJlbW92ZS1XdmxhLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0Zyb20gMGFkN2JiYTgwZDViOTAzNTA4OWZmMmIyZjc3YTc3NGI1YjIwMTkxNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogV2VkLCAyNiBBdWcgMjAxNSAxNjoyODo1OSArMDMwMAorU3ViamVjdDogW1BBVENIIDUvNV0gZHBrZy1jb21waWxlci5tNDogcmVtb3ZlIC1XdmxhCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK1JlbW92ZSB0aGUgLVd2bGEgZmxhZyBmcm9tIHRoZSBzZXQgb2YgY29tcGlsZXIgd2FybmluZyBmbGFncywgc2luY2UgZ2NjCitvbiBvbGQgaG9zdCBzeXN0ZW1zIHN1Y2ggYXMgQ2VudE9TIDUuOCBkb2Vzbid0IHN1cHBvcnQgaXQsIGFuZCBpdAorY2F1c2VzIGEgYnVpbGQgZXJyb3IgZm9yIGRwa2ctbmF0aXZlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRG9ubiBTZWVsZXkgPGRvbm4uc2VlbGV5QHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgorLS0tCisgbTQvZHBrZy1jb21waWxlci5tNCB8IDEgLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9tNC9kcGtnLWNvbXBpbGVyLm00IGIvbTQvZHBrZy1jb21waWxlci5tNAoraW5kZXggNjgyODU3Yy4uMjNlZDdkMCAxMDA2NDQKKy0tLSBhL200L2Rwa2ctY29tcGlsZXIubTQKKysrKyBiL200L2Rwa2ctY29tcGlsZXIubTQKK0BAIC01Miw3ICs1Miw2IEBAIEFDX0RFRlVOKFtEUEtHX0NIRUNLX0NPTVBJTEVSX1dBUk5JTkdTXSwgWworICAgRFBLR19DSEVDS19DT01QSUxFUl9GTEFHKFstV2xvZ2ljYWwtb3BdKQorICAgRFBLR19DSEVDS19DT01QSUxFUl9GTEFHKFstV2xvZ2ljYWwtbm90LXBhcmVudGhlc2VzXSkKKyAgIERQS0dfQ0hFQ0tfQ09NUElMRVJfRkxBRyhbLVdzd2l0Y2gtYm9vbF0pCistICBEUEtHX0NIRUNLX0NPTVBJTEVSX0ZMQUcoWy1XdmxhXSkKKyAgIERQS0dfQ0hFQ0tfQ09NUElMRVJfRkxBRyhbLVdpbml0LXNlbGZdKQorICAgRFBLR19DSEVDS19DT01QSUxFUl9GTEFHKFstV3dyaXRlLXN0cmluZ3NdKQorICAgRFBLR19DSEVDS19DT01QSUxFUl9GTEFHKFstV2Nhc3QtYWxpZ25dKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvYWRkX2FybWViX3RyaXBsZXRfZW50cnkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvYWRkX2FybWViX3RyaXBsZXRfZW50cnkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYyNzVkZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9hZGRfYXJtZWJfdHJpcGxldF9lbnRyeS5wYXRjaApAQCAtMCwwICsxLDM4IEBACitBdXRob3I6IEtyaXNobmFuamFuYXBwYSwgSmFnYWRlZXNoIDxqYWdhZGVlc2gua3Jpc2huYW5qYW5hcHBhQGNhdml1bW5ldHdvcmtzLmNvbT4KK0RhdGU6ICAgV2VkIEFwciA4IDE4OjA4OjE0IDIwMTUgKzA1MzAKKworW1BBVENIXSBhZGQgYXJtZWIgdHJpcGxldCBlbnRyeSBpbnRvIHRyaXBsZXR0YWJsZS4KKworQ3Jvc3MtY29tcGxpbmcgZHBrZyBhcHBsaWNhdGlvbiBmb3IgYXJtZWIgZmFpbHMgd2l0aCBiZWxvdyBlcnJvcgorZHVyaW5nIGNvbmZpZ3VyZSB0YXNrLAorCisoc25pcCkKKyBjb25maWd1cmU6MjMxNDE6IGNoZWNraW5nIGRwa2cgY3B1IHR5cGUKKyBjb25maWd1cmU6MjMxNDg6IHJlc3VsdDogYXJtZWIKKyBjb25maWd1cmU6MjMxNTA6IFdBUk5JTkc6IGFybWViIG5vdCBmb3VuZCBpbiBjcHV0YWJsZQorIGNvbmZpZ3VyZToyMzE2MjogY2hlY2tpbmcgZHBrZyBvcGVyYXRpbmcgc3lzdGVtIHR5cGUKKyBjb25maWd1cmU6MjMxNjk6IHJlc3VsdDogbGludXgtZ251ZWFiaQorIGNvbmZpZ3VyZToyMzE3MTogV0FSTklORzogbGludXgtZ251ZWFiaSBub3QgZm91bmQgaW4gb3N0YWJsZQorIGNvbmZpZ3VyZToyMzE4MzogY2hlY2tpbmcgZHBrZyBhcmNoaXRlY3R1cmUgbmFtZQorIGNvbmZpZ3VyZToyMzE4OTogZXJyb3I6IGNhbm5vdCBkZXRlcm1pbmUgaG9zdCBkcGtnIGFyY2hpdGVjdHVyZQorLS0gQ1VUIC0tCisKK3RoZSByZXF1aXJlZCBjb21iaW5hdGlvbiBvZiAiZ251ZWFiaS1saW51eC1hcm1lYiIgd2FzIG5vdCBmb3VuZCBpbgordGhlIHRyaXBsZXR0YWJsZSBmaWxlIHRoZXJlYnkgcmV0dXJuaW5nIGRwa2dfYXJjaCBhcworZW1wdHkgaW4gY29uZmlndXJlIHNjcmlwdC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtyaXNobmFuamFuYXBwYSwgSmFnYWRlZXNoIDxqYWdhZGVlc2gua3Jpc2huYW5qYW5hcHBhQGNhdml1bW5ldHdvcmtzLmNvbT4KKworZGlmZiAtTmF1cnAgZHBrZy0xLjE3LjIxX29yZy90cmlwbGV0dGFibGUgZHBrZy0xLjE3LjIxL3RyaXBsZXR0YWJsZQorLS0tIGRwa2ctMS4xNy4yMV9vcmcvdHJpcGxldHRhYmxlCTIwMTUtMDQtMDggMTc6MDg6NTIuMzcwNzU5MTcxICswNTMwCisrKysgZHBrZy0xLjE3LjIxL3RyaXBsZXR0YWJsZQkyMDE1LTA0LTA4IDE3OjA5OjEyLjQwNjc1MjA4MSArMDUzMAorQEAgLTksNiArOSw3IEBAIG11c2xlYWJpaGYtbGludXgtYXJtCW11c2wtbGludXgtYXJtaGYKKyBtdXNsLWxpbnV4LTxjcHU+CW11c2wtbGludXgtPGNwdT4KKyBnbnVlYWJpaGYtbGludXgtYXJtCWFybWhmCisgZ251ZWFiaS1saW51eC1hcm0JYXJtZWwKKytnbnVlYWJpLWxpbnV4LWFybWViCWFybWViCisgZ251YWJpbjMyLWxpbnV4LW1pcHM2NGVsCW1pcHNuMzJlbAorIGdudWFiaW4zMi1saW51eC1taXBzNjQJbWlwc24zMgorIGdudWFiaTY0LWxpbnV4LW1pcHM2NGVsCW1pcHM2NGVsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvYXJjaF9wbS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9hcmNoX3BtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZDRjMGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvYXJjaF9wbS5wYXRjaApAQCAtMCwwICsxLDIyIEBACitjb25maWd1cmUgY2Fubm90IGRldGVybWluZSB0aGUgcHJvcGVyIGNwdSwgb3MsIG9yCithcmNoaXRlY3R1cmUgZm9yIG1pcHM2NCwgYW5kIHBvc3NpYmx5IG90aGVyIGFyY2gncworYmVjYXVzZSBvZiBmYXVsdHkgY29kZSBhZGRlZCB0byBBcmNoLnBtIGluIHRoZSBsYXRlc3QKK3JlbGVhc2UgZnJvbSB1cHN0cmVhbS4gIFdlIHJlbW92ZSB0aGF0IGNvZGUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBKb2UgU2xhdGVyIDxqc2xhdGVyQHdpbmRyaXZlci5jb20+CisKKworLS0tIGEvc2NyaXB0cy9EcGtnL0FyY2gucG0KKysrKyBiL3NjcmlwdHMvRHBrZy9BcmNoLnBtCitAQCAtMjMzLDkgKzIzMyw2IEBAIHN1YiByZWFkX3RyaXBsZXR0YWJsZSgpCisgCQkgICAgKG15ICRkdCA9ICRkZWJ0cmlwbGV0KSA9fiBzLzxjcHU+LyRfY3B1LzsKKyAJCSAgICAobXkgJGRhID0gJGRlYmFyY2gpID1+IHMvPGNwdT4vJF9jcHUvOworIAorLQkJICAgIG5leHQgaWYgZXhpc3RzICRkZWJhcmNoX3RvX2RlYnRyaXBsZXR7JGRhfQorLQkJICAgICAgICAgb3IgZXhpc3RzICRkZWJ0cmlwbGV0X3RvX2RlYmFyY2h7JGR0fTsKKy0KKyAJCSAgICAkZGViYXJjaF90b19kZWJ0cmlwbGV0eyRkYX0gPSAkZHQ7CisgCQkgICAgJGRlYnRyaXBsZXRfdG9fZGViYXJjaHskZHR9ID0gJGRhOworIAkJfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2Rwa2ctY29uZmlndXJlLnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvZHBrZy1jb25maWd1cmUuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGIwNzg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2Rwa2ctY29uZmlndXJlLnNlcnZpY2UKQEAgLTAsMCArMSwxNyBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1kcGtnIGZpcnN0IGJvb3QgY29uZmlndXJlCitEZWZhdWx0RGVwZW5kZW5jaWVzPW5vCitBZnRlcj1zeXN0ZW1kLXJlbW91bnQtZnMuc2VydmljZSBzeXN0ZW1kLXRtcGZpbGVzLXNldHVwLnNlcnZpY2UgdG1wLm1vdW50CitCZWZvcmU9c3lzaW5pdC50YXJnZXQKKworW1NlcnZpY2VdCitUeXBlPW9uZXNob3QKK0Vudmlyb25tZW50RmlsZT0tQFNZU0NPTkZESVJAL2RlZmF1bHQvcG9zdGluc3QKK0V4ZWNTdGFydD0tQEJBU0VfQklORElSQC9zaCAtYyAiIGlmIFsgJFBPU1RJTlNUX0xPR0dJTkcgPSAnMScgXTsgdGhlbiBAQklORElSQC9kcGtnIC0tY29uZmlndXJlIC1hID4gJExPR0ZJTEUgMj4mMTsgZWxzZSBAQklORElSQC9kcGtnIC0tY29uZmlndXJlIC1hOyBmaSIKK0V4ZWNTdGFydFBvc3Q9QEJBU0VfQklORElSQC9zeXN0ZW1jdGwgZGlzYWJsZSBkcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlCitTdGFuZGFyZE91dHB1dD1zeXNsb2cKK1JlbWFpbkFmdGVyRXhpdD1ObworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PWJhc2ljLnRhcmdldAorV2FudGVkQnk9c3lzaW5pdC50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9maXgtYWJzLXJlZGVmaW5lLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2ZpeC1hYnMtcmVkZWZpbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTczMzExYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9maXgtYWJzLXJlZGVmaW5lLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitkcGtnIGRlZmluZXM6CisjZGVmaW5lIERQS0dfQkVHSU5fREVDTFMJZXh0ZXJuICJDIiB7CisKK1RoYXQgbWFrZXMgaGVhZGVyIGNzdGRsaWIgaW5jbHVkZWQgaW4gYSBleHRlcm4gIkMiIGJsb2NrIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQKK2J5IGdjYyA0LjguIEl0IGZhaWxzIG9uIEZlZG9yYSAxOToKKworL3Vzci9pbmNsdWRlL2MrKy80LjguMS9jc3RkbGliOiBJbiBmdW5jdGlvbiDigJhsb25nIGxvbmcgaW50IHN0ZDo6YWJzKGxvbmcgbG9uZyBpbnQp4oCZOgorL3Vzci9pbmNsdWRlL2MrKy80LjguMS9jc3RkbGliOjE3NDoyMDogZXJyb3I6IGRlY2xhcmF0aW9uIG9mIEMgZnVuY3Rpb24g4oCYbG9uZyBsb25nIGludCBzdGQ6OmFicyhsb25nIGxvbmcgaW50KeKAmSBjb25mbGljdHMgd2l0aAorICAgYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9fYnVpbHRpbl9sbGFicyAoX194KTsgfQorICAgICAgICAgICAgICAgICAgICBeCisvdXNyL2luY2x1ZGUvYysrLzQuOC4xL2NzdGRsaWI6MTY2OjM6IGVycm9yOiBwcmV2aW91cyBkZWNsYXJhdGlvbiDigJhsb25nIGludCBzdGQ6OmFicyhsb25nIGludCnigJkgaGVyZQorICAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBfX2J1aWx0aW5fbGFicyhfX2kpOyB9CisgICBeCisKK01vdmUgaW5jbHVkZSBnZXR0ZXh0Lmggb3V0IG9mIHRoZSBleHRlcm4gIkMiIGJsb2NrIHRvIGZpeCB0aGlzIGlzc3VlLgorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKworLS0tIGRwa2ctMS4xNy4xL2xpYi9kcGtnL2kxOG4uaC5vcmlnCTIwMTMtMDgtMTMgMTc6MzE6MjguODcwOTM1NTczICswODAwCisrKysgZHBrZy0xLjE3LjEvbGliL2Rwa2cvaTE4bi5oCTIwMTMtMDgtMTMgMTc6MzE6MzcuODkzMDY1MjQ5ICswODAwCitAQCAtMjMsOCArMjMsNiBAQAorIAorICNpbmNsdWRlIDxkcGtnL21hY3Jvcy5oPgorIAorLURQS0dfQkVHSU5fREVDTFMKKy0KKyAvKioKKyAgKiBAZGVmZ3JvdXAgaTE4biBJbnRlcm5hdGlvbmFsaXphdGlvbiBzdXBwb3J0CisgICogQGluZ3JvdXAgZHBrZy1pbnRlcm5hbAorQEAgLTMzLDYgKzMxLDggQEAKKyAKKyAjaW5jbHVkZSA8Z2V0dGV4dC5oPgorIAorK0RQS0dfQkVHSU5fREVDTFMKKysKKyAvKiBXZSBuZWVkIHRvIGluY2x1ZGUgdGhpcyBiZWNhdXNlIHBnZXR0ZXh0KCkgdXNlcyBMQ19NRVNTQUdFUywgYnV0IGxpYmludGwuaAorICAqIHdoaWNoIGdldHMgcHVsbGVkIGJ5IGdldHRleHQuaCBvbmx5IGluY2x1ZGVzIGl0IGlmIGJ1aWxkaW5nIG9wdGltaXplZC4gKi8KKyAjaW5jbHVkZSA8bG9jYWxlLmg+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvZ2xpYmMyLjUtc3luY19maWxlX3JhbmdlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2dsaWJjMi41LXN5bmNfZmlsZV9yYW5nZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTZiOGE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2dsaWJjMi41LXN5bmNfZmlsZV9yYW5nZS5wYXRjaApAQCAtMCwwICsxLDg2IEBACitDZW50T1MgNS44IGtlcm5lbHMgYW5kIGhlYWRlcnMgc3VwcG9ydCB0aGUgc3luY19maWxlX3JhbmdlKCkgc3lzdGVtIGNhbGwsCitidXQgZ2xpYmMgMi41IGRvZXNuJ3QgcHJvdmlkZSB0aGUgc3lzY2FsbCBzdHViLiAgSXQgYXBwZWFycyB0aGF0IHRoaXMKK3Byb2JsZW0gaXMga25vd24gYnV0IHdpbGwgbmV2ZXIgYmUgZml4ZWQ6CisKKyAgaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD01MTg1ODEKKworICBCdWcgNTE4NTgxIC0gW1JIRUw1XSBnbGliYyBtaXNzZXMgc3luY19maWxlX3JhbmdlIHN5c2NhbGwgaW50ZXJmYWNlIAorCisgIFN0YXR1czogICAgICAgQ0xPU0VEIENBTlRGSVggCisgIExhc3QgQ2xvc2VkOiAgMjAwOS0xMS0yMiAyMjoxOTo1NQorCisgIEtpcmJ5IFpob3UgMjAwOS0wOC0yMCAyMzozNzo1NSBFRFQKKworICBEZXNjcmlwdGlvbiBvZiBwcm9ibGVtOgorCisgIGdsaWJjIG1pc3NlcyBzeW5jX2ZpbGVfcmFuZ2Ugc3lzY2FsbCBpbnRlcmZhY2UuICBUaGUgaGVhZGVyIGZpbGUgYW5kCisgIG1hbiBwYWdlIGJvdGggc2F5ICdzeW5jX2ZpbGVfcmFuZ2UnIHNob3VsZCBleGlzdC4gIEZyb20gbWFuIHBhZ2UsCisgIHN5bmNfZmlsZV9yYW5nZSBzaG91bGQgZXhpc3Qgc2luYyBrZXJuZWwtMi42LjE3CisKKyAgQW5kcmVhcyBTY2h3YWIgMjAwOS0wOC0yMSAwMzoyNDoyNCBFRFQKKworICBJdCBoYXMgb25seSBiZWVuIGFkZGVkIHRvIGdsaWJjIDIuNiwgYW5kIGNhbm5vdCBiZSBiYWNrcG9ydGVkIGR1ZSB0bworICBBQkkgYnJlYWthZ2UuICBZb3UgY2FuIGFsd2F5cyBmYWxsIGJhY2sgdG8gc3lzY2FsbCgzKS4KKworICBVbHJpY2ggRHJlcHBlciAyMDA5LTExLTIyIDIyOjE5OjU1IEVTVAorCisgIEFzIGNvbW1lbnQgIzEgc2F5cywgbm8gY2hhbmNlIHRvIGJhY2twb3J0IHRoaXMuCisKKyAgU2VlIHRoZSBzeXNjYWxsIG1hbiBwYWdlIGZvciBpbnN0cnVjdGlvbnMuCisKKyAgSm9uIEUgMjAxMC0wMy0xOSAxMDozMjozNyBFRFQKKworICB0aGVuIHdoeSBkb2N1bWVudCBpdCBpZiBpdCdzIGJyb2tlbiBhbmQgeW91J3JlIG5vdCBnb2luZyB0byBmaXggaXQ/CisgIC4uIG1pZ2h0IHdhbnQgdG8gRlRGTSBvdmVyIGF0IHN5bmNfZmlsZV9yYW5nZSgyKSAtIGluIHRoZSBtZWFudGltZSAtCisgIGJvcnJvd2luZyBmcm9tIGdsaWJjIDIuNiAuLiBhbnkgdGhvdWdodHMgb24gdGhpcyBpbXBsZW1lbnRhdGlvbiBmb3IgYQorICBoYWNreSB3b3JrYXJvdW5kIGZvciB0aG9zZSBzdGlsbCBvbiB5b3VyICJhbmNpZW50IHJlbGVhc2VzIiAuLiAoZWc6CisgIFJIRUw1LjMpPzoKKworICAjaWZkZWYgVUxJX1dPTlRfRklYX1RISVNfSU5fR0xJQkMyLjUKKyAgI2RlZmluZSBOUl9zeW5jX2ZpbGVfcmFuZ2UgMjc3CisgIGludCBzeW5jX2ZpbGVfcmFuZ2UgKGludCBmZCwgX19vZmY2NF90IGZyb20sIF9fb2ZmNjRfdCB0bywgdW5zaWduZWQgaW50IGZsYWdzKQorICB7CisgICAgcmV0dXJuIHN5c2NhbGwgKE5SX3N5bmNfZmlsZV9yYW5nZSwgZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0xPTkdfTE9OR19QQUlSICgobG9uZykgKGZyb20gPj4gMzIpLCAobG9uZykgZnJvbSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0xPTkdfTE9OR19QQUlSICgobG9uZykgKHRvID4+IDMyKSwgKGxvbmcpIHRvKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKTsKKyAgfQorICAjZW5kaWYKKworICBhc3N1bWluZyBvZiBjb3Vyc2UgdGhhdCB5b3UncmUgb24gYW4geDg2XzY0IGFuZCBpbmNsdWRlL2FzbS0KKyAgeDg2XzY0L3VuaXN0ZC5oIGhhcyB0aGUgY29ycmVjdCBlbnRyeQorCisgIChmd2l3IC0gZmlvIGlzIHN0YXJ0aW5nIHRvIHVzZSB0aGlzIG5vdykKKworUmF0aGVyIHRoYW4gYXR0ZW1wdGluZyB0byBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIHVzaW5nIHN5c2NhbGwoKSwKK3dlIHRha2UgdGhlIG1vcmUgY29uc2VydmF0aXZlIHJvdXRlIGFuZCBpZ25vcmUgaGVhZGVyIHN1cHBvcnQgZm9yCitzeW5jX2ZpbGVfcmFuZ2UoKSBmbGFncyB3aGVuIHRoZSBnbGliYyB2ZXJzaW9uIGlzIDw9IDIuNS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtldmVyeW9uZSBlbHNlIGJ1aWxkcyBvbiBuZXdlciBob3N0cyA6LSldCisKK1NpZ25lZC1vZmYtYnk6IERvbm4gU2VlbGV5IDxkb25uLnNlZWxleUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogTGVpIExpdSA8bGVpLmxpdTJAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9hcmNoaXZlcy5jIHwgICAgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworLS0tIGEvc3JjL2FyY2hpdmVzLmMKKysrKyBiL3NyYy9hcmNoaXZlcy5jCitAQCAtNzUsNyArNzUsNyBAQAorICAgLyogSWdub3JlIHRoZSByZXR1cm4gY29kZSBhcyBpdCBzaG91bGQgYmUgY29uc2lkZXJlZCBlcXVpdmFsZW50IHRvIGFuCisgICAgKiBhc3luY2hyb25vdXMgaGludCBmb3IgdGhlIGtlcm5lbCwgd2UgYXJlIGRvaW5nIGFuIGZzeW5jKCkgbGF0ZXIgb24KKyAgICAqIGFueXdheS4gKi8KKy0jaWYgZGVmaW5lZChTWU5DX0ZJTEVfUkFOR0VfV1JJVEUpCisrI2lmIGRlZmluZWQoU1lOQ19GSUxFX1JBTkdFX1dSSVRFKSAmJiBfX0dMSUJDX1BSRVJFUSgyLCA2KQorICAgc3luY19maWxlX3JhbmdlKGZkLCAwLCAwLCBTWU5DX0ZJTEVfUkFOR0VfV1JJVEUpOworICNlbGlmIGRlZmluZWQoSEFWRV9QT1NJWF9GQURWSVNFKQorICAgcG9zaXhfZmFkdmlzZShmZCwgMCwgMCwgUE9TSVhfRkFEVl9ET05UTkVFRCk7CitAQCAtMTE3OSw3ICsxMTc5LDcgQEAKKyAgIHJldHVybiAwOworIH0KKyAKKy0jaWYgZGVmaW5lZChTWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUpCisrI2lmIGRlZmluZWQoU1lOQ19GSUxFX1JBTkdFX1dBSVRfQkVGT1JFKSAmJiBfX0dMSUJDX1BSRVJFUSgyLCA2KQorIHN0YXRpYyB2b2lkCisgdGFyX3dyaXRlYmFja19iYXJyaWVyKHN0cnVjdCBmaWxlaW5saXN0ICpmaWxlcywgc3RydWN0IHBrZ2luZm8gKnBrZykKKyB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvbm9tYW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvbm9tYW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMwYzE1MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9ub21hbi5wYXRjaApAQCAtMCwwICsxLDE0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworZGlmZiAtcnVOIGRwa2ctMS4xNS44LjUtb3JpZy9NYWtlZmlsZS5hbSBkcGtnLTEuMTUuOC41L01ha2VmaWxlLmFtCistLS0gZHBrZy0xLjE1LjguNS1vcmlnL01ha2VmaWxlLmFtCTIwMTAtMTAtMDggMTI6Mjc6MTUuMDQyMDgzNzAzICswODAwCisrKysgZHBrZy0xLjE1LjguNS9NYWtlZmlsZS5hbQkyMDEwLTEwLTA4IDEyOjI3OjI3Ljc1NTE0ODIyOCArMDgwMAorQEAgLTEyLDggKzEyLDcgQEAKKyAJdXRpbHMgXAorIAkkKE1BWUJFX0RTRUxFQ1QpIFwKKyAJc2NyaXB0cyBcCistCXBvIFwKKy0JbWFuCisrCXBvCisgCisgQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9yZW1vdmUtdGFyLW5vLXRpbWVzdGFtcC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9yZW1vdmUtdGFyLW5vLXRpbWVzdGFtcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjQwOGZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL3JlbW92ZS10YXItbm8tdGltZXN0YW1wLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK2J1c3lib3gtMS4xOS40IHRhciB1dGlsaXR5IGRvZXNuJ3Qgc3VwcG9ydCAtLXdhcm5pbmc9bm8tdGltZXN0YW1wCisKK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorSW5kZXg6IGRwa2ctMS4xNy4xL2Rwa2ctZGViL2V4dHJhY3QuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRwa2ctMS4xNy4xLm9yaWcvZHBrZy1kZWIvZXh0cmFjdC5jCisrKysgZHBrZy0xLjE3LjEvZHBrZy1kZWIvZXh0cmFjdC5jCitAQCAtMzE4LDcgKzMxOCw2IEBAIGV4dHJhY3RoYWxmKGNvbnN0IGNoYXIgKmRlYmFyLCBjb25zdCBjaGEKKyAKKyAgICAgICBjb21tYW5kX2FkZF9hcmcoJmNtZCwgIi1mIik7CisgICAgICAgY29tbWFuZF9hZGRfYXJnKCZjbWQsICItIik7CistICAgICAgY29tbWFuZF9hZGRfYXJnKCZjbWQsICItLXdhcm5pbmc9bm8tdGltZXN0YW1wIik7CisgCisgICAgICAgbV9kdXAyKHAyWzBdLDApOworICAgICAgIGNsb3NlKHAyWzBdKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZ18xLjE4LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2dfMS4xOC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjM2ZhNGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2dfMS4xOC4yLmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgZHBrZy5pbmMKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCitTUkNfVVJJICs9ICJmaWxlOi8vbm9tYW4ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3JlbW92ZS10YXItbm8tdGltZXN0YW1wLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtYWJzLXJlZGVmaW5lLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hcmNoX3BtLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlIFwKKyAgICAgICAgICAgIGZpbGU6Ly9nbGliYzIuNS1zeW5jX2ZpbGVfcmFuZ2UucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2FkZF9hcm1lYl90cmlwbGV0X2VudHJ5LnBhdGNoIFwKKwkgICAgZmlsZTovLzAwMDItQWRhcHQtdG8tbGludXgtd3JzLWtlcm5lbC12ZXJzaW9uLXdoaWNoLWhhcy1jaGFyYWN0ZS5wYXRjaCBcCisJICAgIGZpbGU6Ly8wMDAzLU91ci1wcmUtcG9zdGluc3RzLWV4cGVjdC1ELXRvLWJlLXNldC13aGVuLXJ1bm5pbmctaW4ucGF0Y2ggXAorCSAgICBmaWxlOi8vMDAwNC1UaGUtbHV0aW1lcy1mdW5jdGlvbi1kb2Vzbi10LXdvcmstcHJvcGVybHktZm9yLWFsbC1zLnBhdGNoIFwKKwkgICAgZmlsZTovLzAwMDUtZHBrZy1jb21waWxlci5tNC1yZW1vdmUtV3ZsYS5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjYzYjlkODY5MDgxZWM0OWFkZWVmNmM1ZmY2MmQ2NTc2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjExNDg0ZjJhNzNkMDI3ZDY5NmU3MjBhNjAzODBkYjcxOTc4YmI1YzA2Y2Q4OGZlMzBjMjkxZTA2OWFjNDU3YTQiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNkOWJhNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MuaW5jCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiRXh0MiBGaWxlc3lzdGVtIFV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBFeHQyIEZpbGVzeXN0ZW0gVXRpbGl0aWVzIChlMmZzcHJvZ3MpIGNvbnRhaW4gYWxsIG9mIHRoZSBzdGFuZGFyZCB1dGlsaXRpZXMgZm9yIGNyZWF0aW5nLCBcCitmaXhpbmcsIGNvbmZpZ3VyaW5nICwgYW5kIGRlYnVnZ2luZyBleHQyIGZpbGVzeXN0ZW1zLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9lMmZzcHJvZ3Muc291cmNlZm9yZ2UubmV0LyIKKworTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2MiAmIEJTRCAmIE1JVCIKK0xJQ0VOU0VfZTJmc3Byb2dzLWUyZnNjayA9ICJHUEx2MiIKK0xJQ0VOU0VfZTJmc3Byb2dzLW1rZTJmcyA9ICJHUEx2MiIKK0xJQ0VOU0VfZTJmc3Byb2dzLWZzY2sgPSAiR1BMdjIiCitMSUNFTlNFX2UyZnNwcm9ncy10dW5lMmZzID0gIkdQTHYyIgorTElDRU5TRV9lMmZzcHJvZ3MtYmFkYmxvY2tzID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjQ4ZjIxZDc2NWI4NzViZDEwNDAwOTc1ZDEyYzFjYTIgXAorICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvZXh0MmZzL2V4dDJmcy5oO2JlZ2lubGluZT0xO2VuZGxpbmU9OTttZDU9NTk2YThkZWRjYjRlNzMxYzZiMjFjN2E0NmZiYTZiZWYgXAorICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvZTJwL2UycC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9NzttZDU9OGE3NGFkZThmOWQ2NTA5NWQ3MGVmMmQ0YmY0OGUzNmEgXAorICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdXVpZC91dWlkLmguaW47YmVnaW5saW5lPTE7ZW5kbGluZT0zMjttZDU9ZGJiODA3OWUxMTRhNWY4NDE5MzRiOTllNTljODgyMGEgXAorICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdXVpZC9DT1BZSU5HO21kNT01OGRjZDg0NTI2NTFmYzhiMDdkMWY2NWNlMDdjYThhZiBcCisgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9ldC9ldF9uYW1lLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xMTttZDU9ZWFkMjM2NDQ3ZGFjN2I5ODBkYmM1YjQ4MDRkOGM4MzYgXAorICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvc3Mvc3MuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT02ZTg5YWQ0N2RhNmU3NWZlY2QyYjVlMGU4MWUxZDRhNiIKK1NFQ1RJT04gPSAiYmFzZSIKK0RFUEVORFMgPSAidXRpbC1saW51eCIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vZTJmc3Byb2dzL2UyZnNwcm9ncy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbWtkaXIucGF0Y2giCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbyBwa2djb25maWcgbXVsdGlsaWJfaGVhZGVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDEtZTJmc3Byb2dzLWZpeC1jcm9zcy1jb21waWxhdGlvbi1wcm9ibGVtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAxLWUyZnNwcm9ncy1maXgtY3Jvc3MtY29tcGlsYXRpb24tcHJvYmxlbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzA0M2JlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAxLWUyZnNwcm9ncy1maXgtY3Jvc3MtY29tcGlsYXRpb24tcHJvYmxlbS5wYXRjaApAQCAtMCwwICsxLDU1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU3ViamVjdDogZTJmc3Byb2dzOiBmaXggY3Jvc3MgY29tcGlsYXRpb24gcHJvYmxlbQorCitUaGUgY2hlY2tpbmcgb2YgdHlwZXMgaW4gcGFyc2UtdHlwZXMuc2ggZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgaW4gYQorY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnQsIGJlY2F1c2UgdGhlIGdlbmVyYXRlZCBiaW5hcnkgaXMgZXhlY3V0ZWQKK29uIGJ1aWxkIG1hY2hpbmUuCisKK1NvIGV2ZW4gaWYgYXNtX3R5cGVzLmggaGFzIGdvdCBjb3JyZWN0IHN0YXRlbWVudHMgZm9yIHR5cGVzLCBpdCdzIHBvc3NpYmxlCit0aGF0IHRoZSBnZW5lcmF0ZWQgYmluYXJ5IHdpbGwgcmVwb3J0IGFuIGVycm9yLiBCZWNhdXNlIHRoZXNlIHR5cGVzIGFyZSBmb3IKK3RoZSB0YXJnZXQgbWFjaGluZS4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlnL3BhcnNlLXR5cGVzLnNoIHwgICAgNiArKysrLS0KKyBjb25maWd1cmUuaW4gICAgICAgICAgfCAgICA2ICsrKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlnL3BhcnNlLXR5cGVzLnNoIGIvY29uZmlnL3BhcnNlLXR5cGVzLnNoCitpbmRleCA1MDc2ZjZjLi4yNGQyYTk5IDEwMDc1NQorLS0tIGEvY29uZmlnL3BhcnNlLXR5cGVzLnNoCisrKysgYi9jb25maWcvcGFyc2UtdHlwZXMuc2gKK0BAIC0xMTgsOCArMTE4LDEwIEBAIGlmIC4vYXNtX3R5cGVzCisgdGhlbgorICAgICB0cnVlCisgZWxzZQorLSAgICBlY2hvICJQcm9ibGVtIGRldGVjdGVkIHdpdGggYXNtX3R5cGVzLmgiCistICAgIGVjaG8gIiIgPiBhc21fdHlwZXMuaAorKyAgICBpZiBbICIke0NST1NTX0NPTVBJTEV9IiAhPSAiMSIgXTsgdGhlbgorKwllY2hvICJQcm9ibGVtIGRldGVjdGVkIHdpdGggYXNtX3R5cGVzLmgiCisrCWVjaG8gIiIgPiBhc21fdHlwZXMuaAorKyAgICBmaQorIGZpCisgcm0gYXNtX3R5cGVzLmMgYXNtX3R5cGVzCisgCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCitpbmRleCA2OGFkZjBkLi5lZDE2OTdiIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC05NTMsNyArOTUzLDExIEBAIEFDX1NVQlNUKFNJWkVPRl9MT05HKQorIEFDX1NVQlNUKFNJWkVPRl9MT05HX0xPTkcpCisgQUNfU1VCU1QoU0laRU9GX09GRl9UKQorIEFDX0NfQklHRU5ESUFOCistQlVJTERfQ0M9IiRCVUlMRF9DQyIgQ1BQPSIkQ1BQIiAvYmluL3NoICRhY19hdXhfZGlyL3BhcnNlLXR5cGVzLnNoCisraWYgdGVzdCAkY3Jvc3NfY29tcGlsaW5nID0gbm87IHRoZW4KKysgIEJVSUxEX0NDPSIkQlVJTERfQ0MiIENQUD0iJENQUCIgL2Jpbi9zaCAkYWNfYXV4X2Rpci9wYXJzZS10eXBlcy5zaAorK2Vsc2UKKysgIENST1NTX0NPTVBJTEU9IjEiIEJVSUxEX0NDPSIkQlVJTERfQ0MiIENQUD0iJENQUCIgL2Jpbi9zaCAkYWNfYXV4X2Rpci9wYXJzZS10eXBlcy5zaAorK2ZpCisgQVNNX1RZUEVTX0hFQURFUj0uL2FzbV90eXBlcy5oCisgQUNfU1VCU1RfRklMRShBU01fVFlQRVNfSEVBREVSKQorIGRubAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1saWJleHQyZnMtZml4LXBvdGVudGlhbC1idWZmZXItb3ZlcmZsb3ctaW4tY2xvc2Vmcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1saWJleHQyZnMtZml4LXBvdGVudGlhbC1idWZmZXItb3ZlcmZsb3ctaW4tY2xvc2Vmcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmY3N2NjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAxLWxpYmV4dDJmcy1maXgtcG90ZW50aWFsLWJ1ZmZlci1vdmVyZmxvdy1pbi1jbG9zZWZzLnBhdGNoCkBAIC0wLDAgKzEsNTggQEAKK0Zyb20gNDlkMGZlMmExNGYyYTIzZGEyZmUyOTk2NDMzNzliOGMxZDM3ZGY3MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+CitEYXRlOiBGcmksIDYgRmViIDIwMTUgMTI6NDY6MzkgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gbGliZXh0MmZzOiBmaXggcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBpbiBjbG9zZWZzKCkKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitUaGUgYnVnIGZpeCBpbiBmNjZlNmNlNDQ0NjogImxpYmV4dDJmczogYXZvaWQgYnVmZmVyIG92ZXJmbG93IGlmCitzX2ZpcnN0X21ldGFfYmcgaXMgdG9vIGJpZyIgaGFkIGEgdHlwbyBpbiB0aGUgZml4IGZvcgorZXh0MmZzX2Nsb3NlZnMoKS4gIEluIHByYWN0aWNlIG1vc3Qgb2YgdGhlIHNlY3VyaXR5IGV4cG9zdXJlIHdhcyBmcm9tCit0aGUgb3BlbmZzIHBhdGgsIHNpbmNlIHRoaXMgbWVhbnQgaWYgdGhlcmUgd2FzIGEgY2FyZWZ1bGx5IGNyYWZ0ZWQKK2ZpbGUgc3lzdGVtLCBidWZmZXIgb3ZlcnJ1biB3b3VsZCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgZmlsZSBzeXN0ZW0gd2FzCitvcGVuZWQuCisKK0hvd2V2ZXIsIGlmIGNvcnJ1cHRlZCBmaWxlIHN5c3RlbSBkaWRuJ3QgdHJpcCBvdmVyIHNvbWUgY29ycnVwdGlvbgorY2hlY2ssIGFuZCB0aGVuIHRoZSBmaWxlIHN5c3RlbSB3YXMgbW9kaWZpZWQgdmlhIHR1bmUyZnMgb3IgZGVidWdmcywKK3N1Y2ggdGhhdCB0aGUgc3VwZXJibG9jayB3YXMgbWFya2VkIGRpcnR5IGFuZCB0aGVuIHdyaXR0ZW4gb3V0IHZpYSB0aGUKK2Nsb3NlZnMoKSBwYXRoLCBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGJ1ZmZlciBvdmVycnVuIGNvdWxkIGJlCit0cmlnZ2VyZWQgd2hlbiB0aGUgZmlsZSBzeXN0ZW0gaXMgY2xvc2VkLgorCitBbHNvIGNsZWFyIHVwIGEgc2lnbmVkIHZzIHVuc2lnbmVkIHdhcm5pbmcgd2hpbGUgd2UncmUgYXQgaXQuCisKK1RoYW5rcyB0byBOaWNrIEtyYWxldmljaCA8bm5rQGdvb2dsZS5jb20+IGZvciBhc2tpbmcgbWUgdG8gbG9vayBhdAorY29tcGlsZXIgd2FybmluZyBpbiB0aGUgY29kZSBpbiBxdWVzdGlvbiwgd2hpY2ggbGVkIG1lIHRvIG5vdGljZSB0aGUKK2J1ZyBpbiBmNjZlNmNlNDQ0Ni4KKworQWRkcmVzc2VzOiBDVkUtMjAxNS0xNTcyCisKK1NpZ25lZC1vZmYtYnk6IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+CistLS0KKyBsaWIvZXh0MmZzL2Nsb3NlZnMuYyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZXh0MmZzL2Nsb3NlZnMuYyBiL2xpYi9leHQyZnMvY2xvc2Vmcy5jCitpbmRleCAxZjk5MTEzLi5hYjViMmZiIDEwMDY0NAorLS0tIGEvbGliL2V4dDJmcy9jbG9zZWZzLmMKKysrKyBiL2xpYi9leHQyZnMvY2xvc2Vmcy5jCitAQCAtMjg3LDcgKzI4Nyw3IEBAIGVycmNvZGVfdCBleHQyZnNfZmx1c2gyKGV4dDJfZmlsc3lzIGZzLCBpbnQgZmxhZ3MpCisgCWRncnBfdAkJajsKKyAjZW5kaWYKKyAJY2hhcgkqZ3JvdXBfcHRyOworLQlpbnQJb2xkX2Rlc2NfYmxvY2tzOworKwlibGs2NF90CW9sZF9kZXNjX2Jsb2NrczsKKyAJc3RydWN0IGV4dDJmc19udW1lcmljX3Byb2dyZXNzX3N0cnVjdCBwcm9ncmVzczsKKyAKKyAJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKK0BAIC0zNDYsNyArMzQ2LDcgQEAgZXJyY29kZV90IGV4dDJmc19mbHVzaDIoZXh0Ml9maWxzeXMgZnMsIGludCBmbGFncykKKyAJZ3JvdXBfcHRyID0gKGNoYXIgKikgZ3JvdXBfc2hhZG93OworIAlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykgeworIAkJb2xkX2Rlc2NfYmxvY2tzID0gZnMtPnN1cGVyLT5zX2ZpcnN0X21ldGFfYmc7CistCQlpZiAob2xkX2Rlc2NfYmxvY2tzID4gZnMtPnN1cGVyLT5zX2ZpcnN0X21ldGFfYmcpCisrCQlpZiAob2xkX2Rlc2NfYmxvY2tzID4gZnMtPmRlc2NfYmxvY2tzKQorIAkJCW9sZF9kZXNjX2Jsb2NrcyA9IGZzLT5kZXNjX2Jsb2NrczsKKyAJfSBlbHNlCisgCQlvbGRfZGVzY19ibG9ja3MgPSBmcy0+ZGVzY19ibG9ja3M7CistLSAKKzIuMS4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1ta2UyZnMtYWRkLXRoZS1hYmlsaXR5LXRvLWNvcHktZmlsZXMtZnJvbS1hLWdpdmVuLWRpLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAxLW1rZTJmcy1hZGQtdGhlLWFiaWxpdHktdG8tY29weS1maWxlcy1mcm9tLWEtZ2l2ZW4tZGkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVhNDEzZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1ta2UyZnMtYWRkLXRoZS1hYmlsaXR5LXRvLWNvcHktZmlsZXMtZnJvbS1hLWdpdmVuLWRpLnBhdGNoCkBAIC0wLDAgKzEsOTggQEAKK0Zyb20gYzk4ZmVjMDA0ZjA3N2U1NjZiOWRmYTIwYjI1ZTNiODZjYjQ2MmEyZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAyNCBEZWMgMjAxMyAwMTo0MTowOCAtMDUwMAorU3ViamVjdDogW1BBVENIIDAxLzExXSBta2UyZnM6IGFkZCB0aGUgYWJpbGl0eSB0byBjb3B5IGZpbGVzIGZyb20gYSBnaXZlbgorIGRpcmVjdG9yeQorCitXZSB3aWxsIGFkZCBhIC1kIG9wdGlvbiB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIGFkZGluZyB0aGUgZmlsZXMgZnJvbSBhCitnaXZlbiBkaXJlY3RvcnkgdG8gdGhlIGZpbGVzeXN0ZW0sIGl0IGlzIHNpbWlsaWFyIHRvIGdlbmV4dDJmcywgYnV0CitnZW5leHQyZnMgZG9lc24ndCBmdWxseSBzdXBwb3J0IGV4dDQuCisKKyogV2UgYWxyZWFkeSBoYXZlIHRoZSBiYXNpYyBvcGVyYXRpb25zIGluIGRlYnVnZnM6CisgIC0gQ29weSByZWd1bGFyIGZpbGUKKyAgLSBDcmVhdGUgZGlyZWN0b3J5CisgIC0gQ3JlYXRlIHN5bWxpbmsKKyAgLSBDcmVhdGUgc3BlY2lhbCBmaWxlCisKKyAgV2Ugd2lsbCBtb3ZlIHRoZXNlIG9wZXJhdGlvbnMgaW50byBjcmVhdGVfaW5vZGUuaCBhbmQgY3JlYXRlX2lub2RlLmMsCisgIHRoZW4gbGV0IGJvdGggbWtlMmZzIGFuZCBkZWJ1Z2ZzIHVzZSB0aGVtLgorCisqIFdoYXQgd2UgbmVlZCB0byBkbyBhcmU6CisgIC0gQ29weSB0aGUgZ2l2ZW4gZGlyZWN0b3J5IHJlY3Vyc2l2ZWx5LCB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUKKyAgICBwb3B1bGF0ZV9mcygpCisgIC0gU2V0IHRoZSBvd25lciwgbW9kZSBhbmQgb3RoZXIgaW5mb3JtYXRpb25zCisgIC0gSGFuZGxlIHRoZSBoYXJkIGxpbmtzCisKK1RPRE86CisgIC0gVGhlIGxpYmV4dDJmcyBjYW4ndCBjcmVhdGUgdGhlIHNvY2tldCBmaWxlIChTX0lGU09DSyksIGRvIHdlIGhhdmUgYQorICAgIHBsYW4gdG8gc3VwcG9ydCBpdCA/CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitSZXZpZXdlZC1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CistLS0KKyBtaXNjL2NyZWF0ZV9pbm9kZS5jIHwgICAyNiArKysrKysrKysrKysrKysrKysrKysrKysrKworIG1pc2MvY3JlYXRlX2lub2RlLmggfCAgIDE3ICsrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA0MyBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG1pc2MvY3JlYXRlX2lub2RlLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbWlzYy9jcmVhdGVfaW5vZGUuaAorCitkaWZmIC0tZ2l0IGEvbWlzYy9jcmVhdGVfaW5vZGUuYyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi40NmFhYTYwCistLS0gL2Rldi9udWxsCisrKysgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitAQCAtMCwwICsxLDI2IEBACisrI2luY2x1ZGUgImNyZWF0ZV9pbm9kZS5oIgorKworKy8qIE1ha2UgYSBzcGVjaWFsIGZpbGUgd2hpY2ggaXMgYmxvY2ssIGNoYXJhY3RlciBhbmQgZmlmbyAqLworK2VycmNvZGVfdCBkb19ta25vZF9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KQorK3sKKyt9CisrCisrLyogTWFrZSBhIHN5bWxpbmsgbmFtZSAtPiB0YXJnZXQgKi8KKytlcnJjb2RlX3QgZG9fc3ltbGlua19pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgY2hhciAqdGFyZ2V0KQorK3sKKyt9CisrCisrLyogTWFrZSBhIGRpcmVjdG9yeSBpbiB0aGUgZnMgKi8KKytlcnJjb2RlX3QgZG9fbWtkaXJfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCkKKyt7CisrfQorKworKy8qIENvcHkgdGhlIG5hdGl2ZSBmaWxlIHRvIHRoZSBmcyAqLworK2VycmNvZGVfdCBkb193cml0ZV9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkZXN0KQorK3sKKyt9CisrCisrLyogQ29weSBmaWxlcyBmcm9tIHNvdXJjZV9kaXIgdG8gZnMgKi8KKytlcnJjb2RlX3QgcG9wdWxhdGVfZnMoZXh0Ml9pbm9fdCBwYXJlbnRfaW5vLCBjb25zdCBjaGFyICpzb3VyY2VfZGlyKQorK3sKKyt9CitkaWZmIC0tZ2l0IGEvbWlzYy9jcmVhdGVfaW5vZGUuaCBiL21pc2MvY3JlYXRlX2lub2RlLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi45ZmM5N2ZhCistLS0gL2Rldi9udWxsCisrKysgYi9taXNjL2NyZWF0ZV9pbm9kZS5oCitAQCAtMCwwICsxLDE3IEBACisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKyNpbmNsdWRlIDxmY250bC5oPgorKyNpbmNsdWRlICJldC9jb21fZXJyLmgiCisrI2luY2x1ZGUgImUycC9lMnAuaCIKKysjaW5jbHVkZSAiZXh0MmZzL2V4dDJmcy5oIgorKyNpbmNsdWRlICJubHMtZW5hYmxlLmgiCisrCisrZXh0Ml9maWxzeXMgICAgY3VycmVudF9mczsKKytleHQyX2lub190ICAgICByb290OworKworKy8qIEZvciBwb3B1bGF0aW5nIHRoZSBmaWxlc3lzdGVtICovCisrZXh0ZXJuIGVycmNvZGVfdCBwb3B1bGF0ZV9mcyhleHQyX2lub190IHBhcmVudF9pbm8sIGNvbnN0IGNoYXIgKnNvdXJjZV9kaXIpOworK2V4dGVybiBlcnJjb2RlX3QgZG9fbWtub2RfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCk7CisrZXh0ZXJuIGVycmNvZGVfdCBkb19zeW1saW5rX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBjaGFyICp0YXJnZXQpOworK2V4dGVybiBlcnJjb2RlX3QgZG9fbWtkaXJfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCk7CisrZXh0ZXJuIGVycmNvZGVfdCBkb193cml0ZV9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkZXN0KTsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAyLW1pc2MtY3JlYXRlX2lub2RlLmMtY29weS1maWxlcy1yZWN1cnNpdmVseS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMi1taXNjLWNyZWF0ZV9pbm9kZS5jLWNvcHktZmlsZXMtcmVjdXJzaXZlbHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJmZjY0NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMi1taXNjLWNyZWF0ZV9pbm9kZS5jLWNvcHktZmlsZXMtcmVjdXJzaXZlbHkucGF0Y2gKQEAgLTAsMCArMSwxMzUgQEAKK0Zyb20gMDhkZmJhZjRlM2Y3MDQyMzJmZjQ2ZDc4YzA3NThhNmNmZTM5NjFjOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyMyBEZWMgMjAxMyAwMjo1OToxMCAtMDUwMAorU3ViamVjdDogW1BBVENIIDAyLzExXSBtaXNjL2NyZWF0ZV9pbm9kZS5jOiBjb3B5IGZpbGVzIHJlY3Vyc2l2ZWx5CisKK1VzZSBvcGVuZGlyKCkgYW5kIHJlYWRkaXIoKSB0byByZWFkIHRoZSBuYXRpdmUgZGlyZWN0b3J5LCB0aGVuIHVzZQorbHN0YXQoKSB0byBpZGVudGlmeSB0aGUgZmlsZSB0eXBlIGFuZCBjYWxsIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIHRvCithZGQgdGhlIGZpbGUgdG8gdGhlIGZpbGVzeXN0ZW0sIGNhbGwgdGhlIHBvcHVsYXRlX2ZzKCkgcmVjdXJzaXZlbHkgaWYgaXQKK2lzIGEgZGlyZWN0b3J5LgorCitOT1RFOiB0aGUgbGliZXh0MmZzIGNhbid0IGNyZWF0ZSB0aGUgc29ja2V0IGZpbGUuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitSZXZpZXdlZC1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CistLS0KKyBtaXNjL2NyZWF0ZV9pbm9kZS5jIHwgICA5NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgOTcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbWlzYy9jcmVhdGVfaW5vZGUuYyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK2luZGV4IDQ2YWFhNjAuLmI2OGI5MTAgMTAwNjQ0CistLS0gYS9taXNjL2NyZWF0ZV9pbm9kZS5jCisrKysgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitAQCAtMSw1ICsxLDEzIEBACisgI2luY2x1ZGUgImNyZWF0ZV9pbm9kZS5oIgorIAorKyNpZiBfX1NURENfVkVSU0lPTl9fIDwgMTk5OTAxTAorKyMgaWYgX19HTlVDX18gPj0gMgorKyMgIGRlZmluZSBfX2Z1bmNfXyBfX0ZVTkNUSU9OX18KKysjIGVsc2UKKysjICBkZWZpbmUgX19mdW5jX18gIjx1bmtub3duPiIKKysjIGVuZGlmCisrI2VuZGlmCisrCisgLyogTWFrZSBhIHNwZWNpYWwgZmlsZSB3aGljaCBpcyBibG9jaywgY2hhcmFjdGVyIGFuZCBmaWZvICovCisgZXJyY29kZV90IGRvX21rbm9kX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpCisgeworQEAgLTIzLDQgKzMxLDkzIEBAIGVycmNvZGVfdCBkb193cml0ZV9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkZXN0KQorIC8qIENvcHkgZmlsZXMgZnJvbSBzb3VyY2VfZGlyIHRvIGZzICovCisgZXJyY29kZV90IHBvcHVsYXRlX2ZzKGV4dDJfaW5vX3QgcGFyZW50X2lubywgY29uc3QgY2hhciAqc291cmNlX2RpcikKKyB7CisrCWNvbnN0IGNoYXIJKm5hbWU7CisrCURJUgkJKmRoOworKwlzdHJ1Y3QgZGlyZW50CSpkZW50OworKwlzdHJ1Y3Qgc3RhdAlzdDsKKysJY2hhcgkJbG5fdGFyZ2V0W1BBVEhfTUFYXTsKKysJZXh0Ml9pbm9fdAlpbm87CisrCWVycmNvZGVfdAlyZXR2YWw7CisrCWludAkJcmVhZF9jbnQ7CisrCisrCXJvb3QgPSBFWFQyX1JPT1RfSU5POworKworKwlpZiAoY2hkaXIoc291cmNlX2RpcikgPCAwKSB7CisrCQljb21fZXJyKF9fZnVuY19fLCBlcnJubywKKysJCQlfKCJ3aGlsZSBjaGFuZ2luZyB3b3JraW5nIGRpcmVjdG9yeSB0byBcIiVzXCIiKSwgc291cmNlX2Rpcik7CisrCQlyZXR1cm4gZXJybm87CisrCX0KKysKKysJaWYgKCEoZGggPSBvcGVuZGlyKCIuIikpKSB7CisrCQljb21fZXJyKF9fZnVuY19fLCBlcnJubywKKysJCQlfKCJ3aGlsZSBvcGVubmluZyBkaXJlY3RvcnkgXCIlc1wiIiksIHNvdXJjZV9kaXIpOworKwkJcmV0dXJuIGVycm5vOworKwl9CisrCisrCXdoaWxlKChkZW50ID0gcmVhZGRpcihkaCkpKSB7CisrCQlpZigoIXN0cmNtcChkZW50LT5kX25hbWUsICIuIikpIHx8ICghc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4uIikpKQorKwkJCWNvbnRpbnVlOworKwkJbHN0YXQoZGVudC0+ZF9uYW1lLCAmc3QpOworKwkJbmFtZSA9IGRlbnQtPmRfbmFtZTsKKysKKysJCXN3aXRjaChzdC5zdF9tb2RlICYgU19JRk1UKSB7CisrCQkJY2FzZSBTX0lGQ0hSOgorKwkJCWNhc2UgU19JRkJMSzoKKysJCQljYXNlIFNfSUZJRk86CisrCQkJCWlmICgocmV0dmFsID0gZG9fbWtub2RfaW50ZXJuYWwocGFyZW50X2lubywgbmFtZSwgJnN0KSkpIHsKKysJCQkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwKKysJCQkJCQlfKCJ3aGlsZSBjcmVhdGluZyBzcGVjaWFsIGZpbGUgXCIlc1wiIiksIG5hbWUpOworKwkJCQkJcmV0dXJuIHJldHZhbDsKKysJCQkJfQorKwkJCQlicmVhazsKKysJCQljYXNlIFNfSUZTT0NLOgorKwkJCQkvKiBGSVhNRTogdGhlcmUgaXMgbm8gbWFrZSBzb2NrZXQgZnVuY3Rpb24gYXRtLiAqLworKwkJCQljb21fZXJyKF9fZnVuY19fLCAwLAorKwkJCQkJXygiaWdub3Jpbmcgc29ja2V0IGZpbGUgXCIlc1wiIiksIG5hbWUpOworKwkJCQljb250aW51ZTsKKysJCQljYXNlIFNfSUZMTks6CisrCQkJCWlmKChyZWFkX2NudCA9IHJlYWRsaW5rKG5hbWUsIGxuX3RhcmdldCwgc2l6ZW9mKGxuX3RhcmdldCkpKSA9PSAtMSkgeworKwkJCQkJY29tX2VycihfX2Z1bmNfXywgZXJybm8sCisrCQkJCQkJXygid2hpbGUgdHJ5aW5nIHRvIHJlYWRsaW5rIFwiJXNcIiIpLCBuYW1lKTsKKysJCQkJCXJldHVybiBlcnJubzsKKysJCQkJfQorKwkJCQlsbl90YXJnZXRbcmVhZF9jbnRdID0gJ1wwJzsKKysJCQkJaWYgKChyZXR2YWwgPSBkb19zeW1saW5rX2ludGVybmFsKHBhcmVudF9pbm8sIG5hbWUsIGxuX3RhcmdldCkpKSB7CisrCQkJCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsCisrCQkJCQkJXygid2hpbGUgd3JpdGluZyBzeW1saW5rXCIlc1wiIiksIG5hbWUpOworKwkJCQkJcmV0dXJuIHJldHZhbDsKKysJCQkJfQorKwkJCQlicmVhazsKKysJCQljYXNlIFNfSUZSRUc6CisrCQkJCWlmICgocmV0dmFsID0gZG9fd3JpdGVfaW50ZXJuYWwocGFyZW50X2lubywgbmFtZSwgbmFtZSkpKSB7CisrCQkJCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsCisrCQkJCQkJXygid2hpbGUgd3JpdGluZyBmaWxlIFwiJXNcIiIpLCBuYW1lKTsKKysJCQkJCXJldHVybiByZXR2YWw7CisrCQkJCX0KKysJCQkJYnJlYWs7CisrCQkJY2FzZSBTX0lGRElSOgorKwkJCQlpZiAoKHJldHZhbCA9IGRvX21rZGlyX2ludGVybmFsKHBhcmVudF9pbm8sIG5hbWUsICZzdCkpKSB7CisrCQkJCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsCisrCQkJCQkJXygid2hpbGUgbWFraW5nIGRpciBcIiVzXCIiKSwgbmFtZSk7CisrCQkJCQlyZXR1cm4gcmV0dmFsOworKwkJCQl9CisrCQkJCWlmICgocmV0dmFsID0gZXh0MmZzX25hbWVpKGN1cnJlbnRfZnMsIHJvb3QsIHBhcmVudF9pbm8sIG5hbWUsICZpbm8pKSkgeworKwkJCQkJY29tX2VycihuYW1lLCByZXR2YWwsIDApOworKwkJCQkJCXJldHVybiByZXR2YWw7CisrCQkJCX0KKysJCQkJLyogUG9wdWxhdGUgdGhlIGRpciByZWN1cnNpdmVseSovCisrCQkJCXJldHZhbCA9IHBvcHVsYXRlX2ZzKGlubywgbmFtZSk7CisrCQkJCWlmIChyZXR2YWwpIHsKKysJCQkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgXygid2hpbGUgYWRkaW5nIGRpciBcIiVzXCIiKSwgbmFtZSk7CisrCQkJCQlyZXR1cm4gcmV0dmFsOworKwkJCQl9CisrCQkJCWNoZGlyKCIuLiIpOworKwkJCQlicmVhazsKKysJCQlkZWZhdWx0OgorKwkJCQljb21fZXJyKF9fZnVuY19fLCAwLAorKwkJCQkJXygiaWdub3JpbmcgZW50cnkgXCIlc1wiIiksIG5hbWUpOworKwkJfQorKwl9CisrCWNsb3NlZGlyKGRoKTsKKysJcmV0dXJuIHJldHZhbDsKKyB9CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMy1taXNjLWNyZWF0ZV9pbm9kZS5jLWNyZWF0ZS1zcGVjaWFsLWZpbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDMtbWlzYy1jcmVhdGVfaW5vZGUuYy1jcmVhdGUtc3BlY2lhbC1maWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NDdiNmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDMtbWlzYy1jcmVhdGVfaW5vZGUuYy1jcmVhdGUtc3BlY2lhbC1maWxlLnBhdGNoCkBAIC0wLDAgKzEsMTAzIEBACitGcm9tIGFlN2QzMzgyM2JmYzMzMGUwOGIyNWM1ZmU0ZDI1ODM4ZWY3Yzc3Y2UgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjMgRGVjIDIwMTMgMDM6MTM6MjggLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCAwMy8xMV0gbWlzYy9jcmVhdGVfaW5vZGUuYzogY3JlYXRlIHNwZWNpYWwgZmlsZQorCitUaGUgZG9fbWtub2RfaW50ZXJuYWwoKSBpcyB1c2VkIGZvciBjcmVhdGluZyBzcGVjaWFsIGZpbGUgd2hpY2ggaXMKK2Jsb2NrLCBjaGFyYWN0ZXIgYW5kIGZpZm8sIG1vc3Qgb2YgdGhlIGNvZGUgYXJlIGZyb20gZGVidWdmcy9kZWJ1Z2ZzLmMsCit0aGUgZGVidWdmcy9kZWJ1Z2ZzLmMgd2lsbCBiZSBtb2RpZmllZCB0byB1c2UgdGhpcyBmdW5jdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Jldmlld2VkLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1pc2MvY3JlYXRlX2lub2RlLmMgfCAgIDcyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA3MiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5jIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworaW5kZXggYjY4YjkxMC4uNGRhOGFmZiAxMDA2NDQKKy0tLSBhL21pc2MvY3JlYXRlX2lub2RlLmMKKysrKyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK0BAIC0xMSw2ICsxMSw3OCBAQAorIC8qIE1ha2UgYSBzcGVjaWFsIGZpbGUgd2hpY2ggaXMgYmxvY2ssIGNoYXJhY3RlciBhbmQgZmlmbyAqLworIGVycmNvZGVfdCBkb19ta25vZF9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KQorIHsKKysJZXh0Ml9pbm9fdAkJaW5vOworKwllcnJjb2RlX3QgCQlyZXR2YWw7CisrCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworKwl1bnNpZ25lZCBsb25nCQltYWpvciwgbWlub3IsIG1vZGU7CisrCWludAkJCWZpbGV0eXBlOworKworKwlzd2l0Y2goc3QtPnN0X21vZGUgJiBTX0lGTVQpIHsKKysJCWNhc2UgU19JRkNIUjoKKysJCQltb2RlID0gTElOVVhfU19JRkNIUjsKKysJCQlmaWxldHlwZSA9IEVYVDJfRlRfQ0hSREVWOworKwkJCWJyZWFrOworKwkJY2FzZSBTX0lGQkxLOgorKwkJCW1vZGUgPSBMSU5VWF9TX0lGQkxLOworKwkJCWZpbGV0eXBlID0gIEVYVDJfRlRfQkxLREVWOworKwkJCWJyZWFrOworKwkJY2FzZSBTX0lGSUZPOgorKwkJCW1vZGUgPSBMSU5VWF9TX0lGSUZPOworKwkJCWZpbGV0eXBlID0gRVhUMl9GVF9GSUZPOworKwkJCWJyZWFrOworKwl9CisrCisrCWlmICghKGN1cnJlbnRfZnMtPmZsYWdzICYgRVhUMl9GTEFHX1JXKSkgeworKwkJY29tX2VycihfX2Z1bmNfXywgMCwgIkZpbGVzeXN0ZW0gb3BlbmVkIHJlYWQvb25seSIpOworKwkJcmV0dXJuIC0xOworKwl9CisrCXJldHZhbCA9IGV4dDJmc19uZXdfaW5vZGUoY3VycmVudF9mcywgY3dkLCAwMTA3NTUsIDAsICZpbm8pOworKwlpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsIDApOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorKworKyNpZmRlZiBERUJVR0ZTCisrCXByaW50ZigiQWxsb2NhdGVkIGlub2RlOiAldVxuIiwgaW5vKTsKKysjZW5kaWYKKysJcmV0dmFsID0gZXh0MmZzX2xpbmsoY3VycmVudF9mcywgY3dkLCBuYW1lLCBpbm8sIGZpbGV0eXBlKTsKKysJaWYgKHJldHZhbCA9PSBFWFQyX0VUX0RJUl9OT19TUEFDRSkgeworKwkJcmV0dmFsID0gZXh0MmZzX2V4cGFuZF9kaXIoY3VycmVudF9mcywgY3dkKTsKKysJCWlmIChyZXR2YWwpIHsKKysJCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsICJ3aGlsZSBleHBhbmRpbmcgZGlyZWN0b3J5Iik7CisrCQkJcmV0dXJuIHJldHZhbDsKKysJCX0KKysJCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIGN3ZCwgbmFtZSwgaW5vLCBmaWxldHlwZSk7CisrCX0KKysJaWYgKHJldHZhbCkgeworKwkJY29tX2VycihuYW1lLCByZXR2YWwsIDApOworKwkJcmV0dXJuIC0xOworKwl9CisrICAgICAgICBpZiAoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihjdXJyZW50X2ZzLT5pbm9kZV9tYXAsIGlubykpCisrCQljb21fZXJyKF9fZnVuY19fLCAwLCAiV2FybmluZzogaW5vZGUgYWxyZWFkeSBzZXQiKTsKKysJZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzMihjdXJyZW50X2ZzLCBpbm8sICsxLCAwKTsKKysJbWVtc2V0KCZpbm9kZSwgMCwgc2l6ZW9mKGlub2RlKSk7CisrCWlub2RlLmlfbW9kZSA9IG1vZGU7CisrCWlub2RlLmlfYXRpbWUgPSBpbm9kZS5pX2N0aW1lID0gaW5vZGUuaV9tdGltZSA9CisrCQljdXJyZW50X2ZzLT5ub3cgPyBjdXJyZW50X2ZzLT5ub3cgOiB0aW1lKDApOworKworKwltYWpvciA9IG1ham9yKHN0LT5zdF9yZGV2KTsKKysJbWlub3IgPSBtaW5vcihzdC0+c3RfcmRldik7CisrCisrCWlmICgobWFqb3IgPCAyNTYpICYmIChtaW5vciA8IDI1NikpIHsKKysJCWlub2RlLmlfYmxvY2tbMF0gPSBtYWpvciAqIDI1NiArIG1pbm9yOworKwkJaW5vZGUuaV9ibG9ja1sxXSA9IDA7CisrCX0gZWxzZSB7CisrCQlpbm9kZS5pX2Jsb2NrWzBdID0gMDsKKysJCWlub2RlLmlfYmxvY2tbMV0gPSAobWlub3IgJiAweGZmKSB8IChtYWpvciA8PCA4KSB8ICgobWlub3IgJiB+MHhmZikgPDwgMTIpOworKwl9CisrCWlub2RlLmlfbGlua3NfY291bnQgPSAxOworKworKwlyZXR2YWwgPSBleHQyZnNfd3JpdGVfbmV3X2lub2RlKGN1cnJlbnRfZnMsIGlubywgJmlub2RlKTsKKysJaWYgKHJldHZhbCkKKysJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgIndoaWxlIGNyZWF0aW5nIGlub2RlICV1IiwgaW5vKTsKKysKKysJcmV0dXJuIHJldHZhbDsKKyB9CisgCisgLyogTWFrZSBhIHN5bWxpbmsgbmFtZSAtPiB0YXJnZXQgKi8KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA0LW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLXN5bWxpbmsucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDQtbWlzYy1jcmVhdGVfaW5vZGUuYy1jcmVhdGUtc3ltbGluay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2QxOThjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA0LW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLXN5bWxpbmsucGF0Y2gKQEAgLTAsMCArMSw2MyBAQAorRnJvbSAwOWQzMDQ5Nzc2ODgyMTY3ZjcyNDllZTI2MjY1YjQxNjNkNzIyMmMxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDIzIERlYyAyMDEzIDAzOjE5OjU1IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvMTFdIG1pc2MvY3JlYXRlX2lub2RlLmM6IGNyZWF0ZSBzeW1saW5rCisKK1RoZSBkb19zeW1saW5rX2ludGVybmFsKCkgaXMgdXNlZCBmb3IgY3JlYXRpbmcgc3ltbGlua3MsIG1vc3Qgb2YgdGhlCitjb2RlIGFyZSBmcm9tIGRlYnVnZnMvZGVidWdmcy5jLCB0aGUgZGVidWdmcy9kZWJ1Z2ZzLmMgd2lsbCBiZSBtb2RpZmllZAordG8gdXNlIHRoaXMgZnVuY3Rpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitSZXZpZXdlZC1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CistLS0KKyBtaXNjL2NyZWF0ZV9pbm9kZS5jIHwgICAzMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAzMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5jIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworaW5kZXggNGRhOGFmZi4uZjg0NTEwMyAxMDA2NDQKKy0tLSBhL21pc2MvY3JlYXRlX2lub2RlLmMKKysrKyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK0BAIC04OCw2ICs4OCwzOCBAQCBlcnJjb2RlX3QgZG9fbWtub2RfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCkKKyAvKiBNYWtlIGEgc3ltbGluayBuYW1lIC0+IHRhcmdldCAqLworIGVycmNvZGVfdCBkb19zeW1saW5rX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBjaGFyICp0YXJnZXQpCisgeworKwljaGFyCQkJKmNwOworKwlleHQyX2lub190CQlwYXJlbnRfaW5vOworKwllcnJjb2RlX3QJCXJldHZhbDsKKysJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisrCXN0cnVjdCBzdGF0CQlzdDsKKysKKysJY3AgPSBzdHJyY2hyKG5hbWUsICcvJyk7CisrCWlmIChjcCkgeworKwkJKmNwID0gMDsKKysJCWlmICgocmV0dmFsID0gIGV4dDJmc19uYW1laShjdXJyZW50X2ZzLCByb290LCBjd2QsIG5hbWUsICZwYXJlbnRfaW5vKSkpeworKwkJCWNvbV9lcnIobmFtZSwgcmV0dmFsLCAwKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfQorKwkJbmFtZSA9IGNwKzE7CisrCX0gZWxzZQorKwkJcGFyZW50X2lubyA9IGN3ZDsKKysKKyt0cnlfYWdhaW46CisrCXJldHZhbCA9IGV4dDJmc19zeW1saW5rKGN1cnJlbnRfZnMsIHBhcmVudF9pbm8sIDAsIG5hbWUsIHRhcmdldCk7CisrCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9ESVJfTk9fU1BBQ0UpIHsKKysJCXJldHZhbCA9IGV4dDJmc19leHBhbmRfZGlyKGN1cnJlbnRfZnMsIHBhcmVudF9pbm8pOworKwkJaWYgKHJldHZhbCkgeworKwkJCWNvbV9lcnIoImRvX3N5bWxpbmtfaW50ZXJuYWwiLCByZXR2YWwsICJ3aGlsZSBleHBhbmRpbmcgZGlyZWN0b3J5Iik7CisrCQkJcmV0dXJuIHJldHZhbDsKKysJCX0KKysJCWdvdG8gdHJ5X2FnYWluOworKwl9CisrCWlmIChyZXR2YWwpIHsKKysJCWNvbV9lcnIoImV4dDJmc19zeW1saW5rIiwgcmV0dmFsLCAwKTsKKysJCXJldHVybiByZXR2YWw7CisrCX0KKysKKyB9CisgCisgLyogTWFrZSBhIGRpcmVjdG9yeSBpbiB0aGUgZnMgKi8KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA1LW1pc2MtY3JlYXRlX2lub2RlLmMtY29weS1yZWd1bGFyLWZpbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDUtbWlzYy1jcmVhdGVfaW5vZGUuYy1jb3B5LXJlZ3VsYXItZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTM1Y2Q4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA1LW1pc2MtY3JlYXRlX2lub2RlLmMtY29weS1yZWd1bGFyLWZpbGUucGF0Y2gKQEAgLTAsMCArMSwyMjQgQEAKK0Zyb20gMjk3M2M3NGFmYWE1MzJmM2Y3MjYzOWI0NjMzMjJiMjUyMzUxOWMyMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyMyBEZWMgMjAxMyAwMzoyODoxMiAtMDUwMAorU3ViamVjdDogW1BBVENIIDA1LzExXSBtaXNjL2NyZWF0ZV9pbm9kZS5jOiBjb3B5IHJlZ3VsYXIgZmlsZQorCitUaGUgZG9fd3JpdGVfaW50ZXJuYWwoKSBpcyB1c2VkIGZvciBjb3B5aW5nIGZpbGUgZnJvbSBuYXRpdmUgZnMgdG8KK3RhcmdldCwgbW9zdCBvZiB0aGUgY29kZSBhcmUgZnJvbSBkZWJ1Z2ZzL2RlYnVnZnMuYywgdGhlCitkZWJ1Z2ZzL2RlYnVnZnMuYyB3aWxsIGJlIG1vZGlmaWVkIHRvIHVzZSB0aGlzIGZ1bmN0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorUmV2aWV3ZWQtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCisgbWlzYy9jcmVhdGVfaW5vZGUuYyB8ICAxODMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDE4MyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5jIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworaW5kZXggZjg0NTEwMy4uOThmNGE5MyAxMDA2NDQKKy0tLSBhL21pc2MvY3JlYXRlX2lub2RlLmMKKysrKyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK0BAIC04LDYgKzgsMTYgQEAKKyAjIGVuZGlmCisgI2VuZGlmCisgCisrLyogNjRLaUIgaXMgdGhlIG1pbmltaXVtIGJsa3NpemUgdG8gYmVzdCBtaW5pbWl6ZSBzeXN0ZW0gY2FsbCBvdmVyaGVhZC4gKi8KKysjaWZuZGVmIElPX0JVRlNJWkUKKysjZGVmaW5lIElPX0JVRlNJWkUgNjQqMTAyNAorKyNlbmRpZgorKworKy8qIEJsb2NrIHNpemUgZm9yIGBzdF9ibG9ja3MnICovCisrI2lmbmRlZiBTX0JMS1NJWkUKKysjZGVmaW5lIFNfQkxLU0laRSA1MTIKKysjZW5kaWYKKysKKyAvKiBNYWtlIGEgc3BlY2lhbCBmaWxlIHdoaWNoIGlzIGJsb2NrLCBjaGFyYWN0ZXIgYW5kIGZpZm8gKi8KKyBlcnJjb2RlX3QgZG9fbWtub2RfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCkKKyB7CitAQCAtMTI3LDkgKzEzNywxODIgQEAgZXJyY29kZV90IGRvX21rZGlyX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpCisgeworIH0KKyAKKytzdGF0aWMgZXJyY29kZV90IGNvcHlfZmlsZShpbnQgZmQsIGV4dDJfaW5vX3QgbmV3ZmlsZSwgaW50IGJ1ZnNpemUsIGludCBtYWtlX2hvbGVzKQorK3sKKysJZXh0Ml9maWxlX3QJZTJfZmlsZTsKKysJZXJyY29kZV90CXJldHZhbDsKKysJaW50CQlnb3Q7CisrCXVuc2lnbmVkIGludAl3cml0dGVuOworKwljaGFyCQkqYnVmOworKwljaGFyCQkqcHRyOworKwljaGFyCQkqemVyb19idWY7CisrCWludAkJY21wOworKworKwlyZXR2YWwgPSBleHQyZnNfZmlsZV9vcGVuKGN1cnJlbnRfZnMsIG5ld2ZpbGUsCisrCQkJCSAgRVhUMl9GSUxFX1dSSVRFLCAmZTJfZmlsZSk7CisrCWlmIChyZXR2YWwpCisrCQlyZXR1cm4gcmV0dmFsOworKworKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShidWZzaXplLCAmYnVmKTsKKysJaWYgKHJldHZhbCkgeworKwkJY29tX2VycigiY29weV9maWxlIiwgcmV0dmFsLCAiY2FuJ3QgYWxsb2NhdGUgYnVmZmVyXG4iKTsKKysJCXJldHVybiByZXR2YWw7CisrCX0KKysKKysJLyogVGhpcyBpcyB1c2VkIGZvciBjaGVja2luZyB3aGV0aGVyIHRoZSB3aG9sZSBibG9jayBpcyB6ZXJvICovCisrCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtemVybyhidWZzaXplLCAmemVyb19idWYpOworKwlpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKCJjb3B5X2ZpbGUiLCByZXR2YWwsICJjYW4ndCBhbGxvY2F0ZSBidWZmZXJcbiIpOworKwkJZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorKworKwl3aGlsZSAoMSkgeworKwkJZ290ID0gcmVhZChmZCwgYnVmLCBidWZzaXplKTsKKysJCWlmIChnb3QgPT0gMCkKKysJCQlicmVhazsKKysJCWlmIChnb3QgPCAwKSB7CisrCQkJcmV0dmFsID0gZXJybm87CisrCQkJZ290byBmYWlsOworKwkJfQorKwkJcHRyID0gYnVmOworKworKwkJLyogU3BhcnNlIGNvcHkgKi8KKysJCWlmIChtYWtlX2hvbGVzKSB7CisrCQkJLyogQ2hlY2sgd2hldGhlciBhbGwgaXMgemVybyAqLworKwkJCWNtcCA9IG1lbWNtcChwdHIsIHplcm9fYnVmLCBnb3QpOworKwkJCWlmIChjbXAgPT0gMCkgeworKwkJCQkgLyogVGhlIHdob2xlIGJsb2NrIGlzIHplcm8sIG1ha2UgYSBob2xlICovCisrCQkJCXJldHZhbCA9IGV4dDJmc19maWxlX2xzZWVrKGUyX2ZpbGUsIGdvdCwgRVhUMl9TRUVLX0NVUiwgTlVMTCk7CisrCQkJCWlmIChyZXR2YWwpCisrCQkJCQlnb3RvIGZhaWw7CisrCQkJCWdvdCA9IDA7CisrCQkJfQorKwkJfQorKworKwkJLyogTm9ybWFsIGNvcHkgKi8KKysJCXdoaWxlIChnb3QgPiAwKSB7CisrCQkJcmV0dmFsID0gZXh0MmZzX2ZpbGVfd3JpdGUoZTJfZmlsZSwgcHRyLAorKwkJCQkJCSAgIGdvdCwgJndyaXR0ZW4pOworKwkJCWlmIChyZXR2YWwpCisrCQkJCWdvdG8gZmFpbDsKKysKKysJCQlnb3QgLT0gd3JpdHRlbjsKKysJCQlwdHIgKz0gd3JpdHRlbjsKKysJCX0KKysJfQorKwlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CisrCWV4dDJmc19mcmVlX21lbSgmemVyb19idWYpOworKwlyZXR2YWwgPSBleHQyZnNfZmlsZV9jbG9zZShlMl9maWxlKTsKKysJcmV0dXJuIHJldHZhbDsKKysKKytmYWlsOgorKwlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CisrCWV4dDJmc19mcmVlX21lbSgmemVyb19idWYpOworKwkodm9pZCkgZXh0MmZzX2ZpbGVfY2xvc2UoZTJfZmlsZSk7CisrCXJldHVybiByZXR2YWw7CisrfQorKworIC8qIENvcHkgdGhlIG5hdGl2ZSBmaWxlIHRvIHRoZSBmcyAqLworIGVycmNvZGVfdCBkb193cml0ZV9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkZXN0KQorIHsKKysJaW50CQlmZDsKKysJc3RydWN0IHN0YXQJc3RhdGJ1ZjsKKysJZXh0Ml9pbm9fdAluZXdmaWxlOworKwllcnJjb2RlX3QJcmV0dmFsOworKwlzdHJ1Y3QgZXh0Ml9pbm9kZSBpbm9kZTsKKysJaW50CQlidWZzaXplID0gSU9fQlVGU0laRTsKKysJaW50CQltYWtlX2hvbGVzID0gMDsKKysKKysJZmQgPSBvcGVuKHNyYywgT19SRE9OTFkpOworKwlpZiAoZmQgPCAwKSB7CisrCQljb21fZXJyKHNyYywgZXJybm8sIDApOworKwkJcmV0dXJuIGVycm5vOworKwl9CisrCWlmIChmc3RhdChmZCwgJnN0YXRidWYpIDwgMCkgeworKwkJY29tX2VycihzcmMsIGVycm5vLCAwKTsKKysJCWNsb3NlKGZkKTsKKysJCXJldHVybiBlcnJubzsKKysJfQorKworKwlyZXR2YWwgPSBleHQyZnNfbmFtZWkoY3VycmVudF9mcywgcm9vdCwgY3dkLCBkZXN0LCAmbmV3ZmlsZSk7CisrCWlmIChyZXR2YWwgPT0gMCkgeworKwkJY29tX2VycihfX2Z1bmNfXywgMCwgIlRoZSBmaWxlICclcycgYWxyZWFkeSBleGlzdHNcbiIsIGRlc3QpOworKwkJY2xvc2UoZmQpOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorKworKwlyZXR2YWwgPSBleHQyZnNfbmV3X2lub2RlKGN1cnJlbnRfZnMsIGN3ZCwgMDEwNzU1LCAwLCAmbmV3ZmlsZSk7CisrCWlmIChyZXR2YWwpIHsKKysJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgMCk7CisrCQljbG9zZShmZCk7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisrI2lmZGVmIERFQlVHRlMKKysJcHJpbnRmKCJBbGxvY2F0ZWQgaW5vZGU6ICV1XG4iLCBuZXdmaWxlKTsKKysjZW5kaWYKKysJcmV0dmFsID0gZXh0MmZzX2xpbmsoY3VycmVudF9mcywgY3dkLCBkZXN0LCBuZXdmaWxlLAorKwkJCQlFWFQyX0ZUX1JFR19GSUxFKTsKKysJaWYgKHJldHZhbCA9PSBFWFQyX0VUX0RJUl9OT19TUEFDRSkgeworKwkJcmV0dmFsID0gZXh0MmZzX2V4cGFuZF9kaXIoY3VycmVudF9mcywgY3dkKTsKKysJCWlmIChyZXR2YWwpIHsKKysJCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsICJ3aGlsZSBleHBhbmRpbmcgZGlyZWN0b3J5Iik7CisrCQkJY2xvc2UoZmQpOworKwkJCXJldHVybiByZXR2YWw7CisrCQl9CisrCQlyZXR2YWwgPSBleHQyZnNfbGluayhjdXJyZW50X2ZzLCBjd2QsIGRlc3QsIG5ld2ZpbGUsCisrCQkJCQlFWFQyX0ZUX1JFR19GSUxFKTsKKysJfQorKwlpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKGRlc3QsIHJldHZhbCwgMCk7CisrCQljbG9zZShmZCk7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisrICAgICAgICBpZiAoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihjdXJyZW50X2ZzLT5pbm9kZV9tYXAsIG5ld2ZpbGUpKQorKwkJY29tX2VycihfX2Z1bmNfXywgMCwgIldhcm5pbmc6IGlub2RlIGFscmVhZHkgc2V0Iik7CisrCWV4dDJmc19pbm9kZV9hbGxvY19zdGF0czIoY3VycmVudF9mcywgbmV3ZmlsZSwgKzEsIDApOworKwltZW1zZXQoJmlub2RlLCAwLCBzaXplb2YoaW5vZGUpKTsKKysJaW5vZGUuaV9tb2RlID0gKHN0YXRidWYuc3RfbW9kZSAmIH5MSU5VWF9TX0lGTVQpIHwgTElOVVhfU19JRlJFRzsKKysJaW5vZGUuaV9hdGltZSA9IGlub2RlLmlfY3RpbWUgPSBpbm9kZS5pX210aW1lID0KKysJCWN1cnJlbnRfZnMtPm5vdyA/IGN1cnJlbnRfZnMtPm5vdyA6IHRpbWUoMCk7CisrCWlub2RlLmlfbGlua3NfY291bnQgPSAxOworKwlpbm9kZS5pX3NpemUgPSBzdGF0YnVmLnN0X3NpemU7CisrCWlmIChjdXJyZW50X2ZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYKKysJICAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTKSB7CisrCQlpbnQgaTsKKysJCXN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIgKmVoOworKworKwkJZWggPSAoc3RydWN0IGV4dDNfZXh0ZW50X2hlYWRlciAqKSAmaW5vZGUuaV9ibG9ja1swXTsKKysJCWVoLT5laF9kZXB0aCA9IDA7CisrCQllaC0+ZWhfZW50cmllcyA9IDA7CisrCQllaC0+ZWhfbWFnaWMgPSBleHQyZnNfY3B1X3RvX2xlMTYoRVhUM19FWFRfTUFHSUMpOworKwkJaSA9IChzaXplb2YoaW5vZGUuaV9ibG9jaykgLSBzaXplb2YoKmVoKSkgLworKwkJCXNpemVvZihzdHJ1Y3QgZXh0M19leHRlbnQpOworKwkJZWgtPmVoX21heCA9IGV4dDJmc19jcHVfdG9fbGUxNihpKTsKKysJCWlub2RlLmlfZmxhZ3MgfD0gRVhUNF9FWFRFTlRTX0ZMOworKwl9CisrCisrCWlmICgocmV0dmFsID0gZXh0MmZzX3dyaXRlX25ld19pbm9kZShjdXJyZW50X2ZzLCBuZXdmaWxlLCAmaW5vZGUpKSkgeworKwkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAid2hpbGUgY3JlYXRpbmcgaW5vZGUgJXUiLCBuZXdmaWxlKTsKKysJCWNsb3NlKGZkKTsKKysJCXJldHVybiByZXR2YWw7CisrCX0KKysJaWYgKExJTlVYX1NfSVNSRUcoaW5vZGUuaV9tb2RlKSkgeworKwkJaWYgKHN0YXRidWYuc3RfYmxvY2tzIDwgc3RhdGJ1Zi5zdF9zaXplIC8gU19CTEtTSVpFKSB7CisrCQkJbWFrZV9ob2xlcyA9IDE7CisrCQkJLyoKKysJCQkgKiBVc2UgSS9PIGJsb2Nrc2l6ZSBhcyBidWZmZXIgc2l6ZSB3aGVuCisrCQkJICogY29weWluZyBzcGFyc2UgZmlsZXMuCisrCQkJICovCisrCQkJYnVmc2l6ZSA9IHN0YXRidWYuc3RfYmxrc2l6ZTsKKysJCX0KKysJCXJldHZhbCA9IGNvcHlfZmlsZShmZCwgbmV3ZmlsZSwgYnVmc2l6ZSwgbWFrZV9ob2xlcyk7CisrCQlpZiAocmV0dmFsKQorKwkJCWNvbV9lcnIoImNvcHlfZmlsZSIsIHJldHZhbCwgMCk7CisrCX0KKysJY2xvc2UoZmQpOworKworKwlyZXR1cm4gMDsKKyB9CisgCisgLyogQ29weSBmaWxlcyBmcm9tIHNvdXJjZV9kaXIgdG8gZnMgKi8KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA2LW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLWRpcmVjdG9yeS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwNi1taXNjLWNyZWF0ZV9pbm9kZS5jLWNyZWF0ZS1kaXJlY3RvcnkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM3Y2E5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwNi1taXNjLWNyZWF0ZV9pbm9kZS5jLWNyZWF0ZS1kaXJlY3RvcnkucGF0Y2gKQEAgLTAsMCArMSw2MiBAQAorRnJvbSBjOGQxYzQzYmUyNDQ4OTAzNjEzN2Y4ZmRlYmNmY2NjMjA4ZjdjYzhiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDIzIERlYyAyMDEzIDAzOjM0OjE0IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMDYvMTFdIG1pc2MvY3JlYXRlX2lub2RlLmM6IGNyZWF0ZSBkaXJlY3RvcnkKKworVGhlIGRvX21rZGlyX2ludGVybmFsKCkgaXMgdXNlZCBmb3IgbWFraW5nIGRpciBvbiB0aGUgdGFyZ2V0IGZzLCBtb3N0IG9mCit0aGUgY29kZSBhcmUgZnJvbSBkZWJ1Z2ZzL2RlYnVnZnMuYywgdGhlIGRlYnVnZnMvZGVidWdmcy5jIHdpbGwgYmUKK21vZGlmaWVkIHRvIHVzZSB0aGlzIGZ1bmN0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorUmV2aWV3ZWQtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCisgbWlzYy9jcmVhdGVfaW5vZGUuYyB8ICAgMzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAzMSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5jIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworaW5kZXggOThmNGE5My4uNmE4YzkyYSAxMDA2NDQKKy0tLSBhL21pc2MvY3JlYXRlX2lub2RlLmMKKysrKyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK0BAIC0xMzUsNiArMTM1LDM3IEBAIHRyeV9hZ2FpbjoKKyAvKiBNYWtlIGEgZGlyZWN0b3J5IGluIHRoZSBmcyAqLworIGVycmNvZGVfdCBkb19ta2Rpcl9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KQorIHsKKysJY2hhcgkJCSpjcDsKKysJZXh0Ml9pbm9fdAkJcGFyZW50X2lubywgaW5vOworKwllcnJjb2RlX3QJCXJldHZhbDsKKysJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisrCisrCisrCWNwID0gc3RycmNocihuYW1lLCAnLycpOworKwlpZiAoY3ApIHsKKysJCSpjcCA9IDA7CisrCQlpZiAoKHJldHZhbCA9ICBleHQyZnNfbmFtZWkoY3VycmVudF9mcywgcm9vdCwgY3dkLCBuYW1lLCAmcGFyZW50X2lubykpKXsKKysJCQljb21fZXJyKG5hbWUsIHJldHZhbCwgMCk7CisrCQkJcmV0dXJuIHJldHZhbDsKKysJCX0KKysJCW5hbWUgPSBjcCsxOworKwl9IGVsc2UKKysJCXBhcmVudF9pbm8gPSBjd2Q7CisrCisrdHJ5X2FnYWluOgorKwlyZXR2YWwgPSBleHQyZnNfbWtkaXIoY3VycmVudF9mcywgcGFyZW50X2lubywgMCwgbmFtZSk7CisrCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9ESVJfTk9fU1BBQ0UpIHsKKysJCXJldHZhbCA9IGV4dDJmc19leHBhbmRfZGlyKGN1cnJlbnRfZnMsIHBhcmVudF9pbm8pOworKwkJaWYgKHJldHZhbCkgeworKwkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfQorKwkJZ290byB0cnlfYWdhaW47CisrCX0KKysJaWYgKHJldHZhbCkgeworKwkJY29tX2VycigiZXh0MmZzX21rZGlyIiwgcmV0dmFsLCAwKTsKKysJCXJldHVybiByZXR2YWw7CisrCX0KKyB9CisgCisgc3RhdGljIGVycmNvZGVfdCBjb3B5X2ZpbGUoaW50IGZkLCBleHQyX2lub190IG5ld2ZpbGUsIGludCBidWZzaXplLCBpbnQgbWFrZV9ob2xlcykKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA3LW1pc2MtY3JlYXRlX2lub2RlLmMtc2V0LW93bmVyLW1vZGUtdGltZS1mb3ItdGhlLWlub2QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDctbWlzYy1jcmVhdGVfaW5vZGUuYy1zZXQtb3duZXItbW9kZS10aW1lLWZvci10aGUtaW5vZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjk2MzkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA3LW1pc2MtY3JlYXRlX2lub2RlLmMtc2V0LW93bmVyLW1vZGUtdGltZS1mb3ItdGhlLWlub2QucGF0Y2gKQEAgLTAsMCArMSw4MSBAQAorRnJvbSAyYjFmNmU2YjM4NjcwM2E1ZDdlNjBiN2Q4YjcyNzQ2ZjNkMzFhOGJjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDIzIERlYyAyMDEzIDAzOjM5OjU2IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMDcvMTFdIG1pc2MvY3JlYXRlX2lub2RlLmM6IHNldCBvd25lci9tb2RlL3RpbWUgZm9yIHRoZSBpbm9kZQorCitTZXQgdGhlIHVpZCwgZ2lkLCBtb2RlIGFuZCB0aW1lIGZvciBpbm9kZS4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Jldmlld2VkLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1pc2MvY3JlYXRlX2lub2RlLmMgfCAgIDQ1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0NSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5jIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworaW5kZXggNmE4YzkyYS4uYWFkNzM1NCAxMDA2NDQKKy0tLSBhL21pc2MvY3JlYXRlX2lub2RlLmMKKysrKyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK0BAIC0xOCw2ICsxOCw0MCBAQAorICNkZWZpbmUgU19CTEtTSVpFIDUxMgorICNlbmRpZgorIAorKy8qIEZpbGwgdGhlIHVpZCwgZ2lkLCBtb2RlIGFuZCB0aW1lIGZvciB0aGUgaW5vZGUgKi8KKytzdGF0aWMgdm9pZCBmaWxsX2lub2RlKHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwgc3RydWN0IHN0YXQgKnN0KQorK3sKKysJaWYgKHN0ICE9IE5VTEwpIHsKKysJCWlub2RlLT5pX3VpZCA9IHN0LT5zdF91aWQ7CisrCQlpbm9kZS0+aV9naWQgPSBzdC0+c3RfZ2lkOworKwkJaW5vZGUtPmlfbW9kZSB8PSBzdC0+c3RfbW9kZTsKKysJCWlub2RlLT5pX2F0aW1lID0gc3QtPnN0X2F0aW1lOworKwkJaW5vZGUtPmlfbXRpbWUgPSBzdC0+c3RfbXRpbWU7CisrCQlpbm9kZS0+aV9jdGltZSA9IHN0LT5zdF9jdGltZTsKKysJfQorK30KKysKKysvKiBTZXQgdGhlIHVpZCwgZ2lkLCBtb2RlIGFuZCB0aW1lIGZvciB0aGUgaW5vZGUgKi8KKytlcnJjb2RlX3Qgc2V0X2lub2RlX2V4dHJhKGV4dDJfaW5vX3QgY3dkLCBleHQyX2lub190IGlubywgc3RydWN0IHN0YXQgKnN0KQorK3sKKysJZXJyY29kZV90CQlyZXR2YWw7CisrCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworKworKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZShjdXJyZW50X2ZzLCBpbm8sICZpbm9kZSk7CisrICAgICAgICBpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsICJ3aGlsZSByZWFkaW5nIGlub2RlICV1IiwgaW5vKTsKKysJCXJldHVybiByZXR2YWw7CisrCX0KKysKKysJZmlsbF9pbm9kZSgmaW5vZGUsIHN0KTsKKysKKysJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2lub2RlKGN1cnJlbnRfZnMsIGlubywgJmlub2RlKTsKKysJaWYgKHJldHZhbCkgeworKwkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAid2hpbGUgd3JpdGluZyBpbm9kZSAldSIsIGlubyk7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisrfQorKworIC8qIE1ha2UgYSBzcGVjaWFsIGZpbGUgd2hpY2ggaXMgYmxvY2ssIGNoYXJhY3RlciBhbmQgZmlmbyAqLworIGVycmNvZGVfdCBkb19ta25vZF9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KQorIHsKK0BAIC00MzUsNiArNDY5LDE3IEBAIGVycmNvZGVfdCBwb3B1bGF0ZV9mcyhleHQyX2lub190IHBhcmVudF9pbm8sIGNvbnN0IGNoYXIgKnNvdXJjZV9kaXIpCisgCQkJCWNvbV9lcnIoX19mdW5jX18sIDAsCisgCQkJCQlfKCJpZ25vcmluZyBlbnRyeSBcIiVzXCIiKSwgbmFtZSk7CisgCQl9CisrCisrCQlpZiAoKHJldHZhbCA9ICBleHQyZnNfbmFtZWkoY3VycmVudF9mcywgcm9vdCwgcGFyZW50X2lubywgbmFtZSwgJmlubykpKXsKKysJCQljb21fZXJyKG5hbWUsIHJldHZhbCwgMCk7CisrCQkJcmV0dXJuIHJldHZhbDsKKysJCX0KKysKKysJCWlmICgocmV0dmFsID0gc2V0X2lub2RlX2V4dHJhKHBhcmVudF9pbm8sIGlubywgJnN0KSkpIHsKKysJCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsCisrCQkJCV8oIndoaWxlIHNldHRpbmcgaW5vZGUgZm9yIFwiJXNcIiIpLCBuYW1lKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfQorIAl9CisgCWNsb3NlZGlyKGRoKTsKKyAJcmV0dXJuIHJldHZhbDsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA4LW1rZTJmcy5jLWFkZC1hbi1vcHRpb24tZC1yb290LWRpcmVjdG9yeS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwOC1ta2UyZnMuYy1hZGQtYW4tb3B0aW9uLWQtcm9vdC1kaXJlY3RvcnkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY5ODY3MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwOC1ta2UyZnMuYy1hZGQtYW4tb3B0aW9uLWQtcm9vdC1kaXJlY3RvcnkucGF0Y2gKQEAgLTAsMCArMSwxNjggQEAKK0Zyb20gZGY4NTY5MjllNDJiZDRmM2JkYzhkNGY1OWVlODJhZThiMjg1MzJlNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAyNCBEZWMgMjAxMyAwMTo1MDo0NSAtMDUwMAorU3ViamVjdDogW1BBVENIIDA4LzExXSBta2UyZnMuYzogYWRkIGFuIG9wdGlvbjogLWQgcm9vdC1kaXJlY3RvcnkKKworVGhpcyBvcHRpb24gaXMgdXNlZCBmb3IgYWRkaW5nIHRoZSBmaWxlcyBmcm9tIGEgZ2l2ZW4gZGlyZWN0b3J5ICh0aGUKK3Jvb3QtZGlyZWN0b3J5KSB0byB0aGUgZmlsZXN5c3RlbSwgaXQgaXMgc2ltaWxpYXIgdG8gZ2VuZXh0MmZzLCBidXQKK2dlbmV4dDJmcyBkb2Vzbid0IGZ1bGx5IHN1cHBvcnQgZXh0NC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Jldmlld2VkLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1pc2MvTWFrZWZpbGUuaW4gfCAgIDE0ICsrKysrKysrKystLS0tCisgbWlzYy9ta2UyZnMuYyAgICB8ICAgMzIgKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbWlzYy9NYWtlZmlsZS5pbiBiL21pc2MvTWFrZWZpbGUuaW4KK2luZGV4IDU1M2MzNjEuLjgyNTM3MjMgMTAwNjQ0CistLS0gYS9taXNjL01ha2VmaWxlLmluCisrKysgYi9taXNjL01ha2VmaWxlLmluCitAQCAtNDIsNyArNDIsOCBAQCBMUFJPR1M9CQlARTJJTklUUkRfUFJPR0AKKyAKKyBUVU5FMkZTX09CSlM9CXR1bmUyZnMubyB1dGlsLm8KKyBNS0xQRl9PQkpTPQlta2xvc3QrZm91bmQubworLU1LRTJGU19PQkpTPQlta2UyZnMubyB1dGlsLm8gcHJvZmlsZS5vIHByb2ZfZXJyLm8gZGVmYXVsdF9wcm9maWxlLm8KKytNS0UyRlNfT0JKUz0JbWtlMmZzLm8gdXRpbC5vIHByb2ZpbGUubyBwcm9mX2Vyci5vIGRlZmF1bHRfcHJvZmlsZS5vIFwKKysJCQljcmVhdGVfaW5vZGUubworIENIQVRUUl9PQkpTPQljaGF0dHIubworIExTQVRUUl9PQkpTPQlsc2F0dHIubworIFVVSURHRU5fT0JKUz0JdXVpZGdlbi5vCitAQCAtNjAsNyArNjEsOCBAQCBFMkZSRUVGUkFHX09CSlM9IGUyZnJlZWZyYWcubworIFBST0ZJTEVEX1RVTkUyRlNfT0JKUz0JcHJvZmlsZWQvdHVuZTJmcy5vIHByb2ZpbGVkL3V0aWwubworIFBST0ZJTEVEX01LTFBGX09CSlM9CXByb2ZpbGVkL21rbG9zdCtmb3VuZC5vCisgUFJPRklMRURfTUtFMkZTX09CSlM9CXByb2ZpbGVkL21rZTJmcy5vIHByb2ZpbGVkL3V0aWwubyBwcm9maWxlZC9wcm9maWxlLm8gXAorLQkJCXByb2ZpbGVkL3Byb2ZfZXJyLm8gcHJvZmlsZWQvZGVmYXVsdF9wcm9maWxlLm8KKysJCQlwcm9maWxlZC9wcm9mX2Vyci5vIHByb2ZpbGVkL2RlZmF1bHRfcHJvZmlsZS5vIFwKKysJCQlwcm9maWxlZC9jcmVhdGVfaW5vZGUubworIFBST0ZJTEVEX0NIQVRUUl9PQkpTPQlwcm9maWxlZC9jaGF0dHIubworIFBST0ZJTEVEX0xTQVRUUl9PQkpTPQlwcm9maWxlZC9sc2F0dHIubworIFBST0ZJTEVEX1VVSURHRU5fT0JKUz0JcHJvZmlsZWQvdXVpZGdlbi5vCitAQCAtODIsNyArODQsNyBAQCBTUkNTPQkkKHNyY2RpcikvdHVuZTJmcy5jICQoc3JjZGlyKS9ta2xvc3QrZm91bmQuYyAkKHNyY2RpcikvbWtlMmZzLmMgXAorIAkJJChzcmNkaXIpL3V1aWRnZW4uYyAkKHNyY2RpcikvYmxraWQuYyAkKHNyY2RpcikvbG9nc2F2ZS5jIFwKKyAJCSQoc3JjZGlyKS9maWxlZnJhZy5jICQoc3JjZGlyKS9iYXNlX2RldmljZS5jIFwKKyAJCSQoc3JjZGlyKS9pc21vdW50ZWQuYyAkKHNyY2RpcikvLi4vZTJmc2NrL3Byb2ZpbGUuYyBcCistCQkkKHNyY2RpcikvZTJ1bmRvLmMgJChzcmNkaXIpL2UyZnJlZWZyYWcuYworKwkJJChzcmNkaXIpL2UydW5kby5jICQoc3JjZGlyKS9lMmZyZWVmcmFnLmMgJChzcmNkaXIpL2NyZWF0ZV9pbm9kZS5jCisgCisgTElCUz0gJChMSUJFWFQyRlMpICQoTElCQ09NX0VSUikgCisgREVQTElCUz0gJChMSUJFWFQyRlMpICQoREVQTElCQ09NX0VSUikKK0BAIC02MzAsNyArNjMyLDcgQEAgbWtlMmZzLm86ICQoc3JjZGlyKS9ta2UyZnMuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICAkKHRvcF9zcmNkaXIpL2xpYi9lMnAvZTJwLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oIFwKKyAgJChzcmNkaXIpL3V0aWwuaCBwcm9maWxlLmggcHJvZl9lcnIuaCAkKHRvcF9zcmNkaXIpL3ZlcnNpb24uaCBcCistICQoc3JjZGlyKS9ubHMtZW5hYmxlLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvbWtxdW90YS5oIFwKKysgJChzcmNkaXIpL25scy1lbmFibGUuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9ta3F1b3RhLmggJChzcmNkaXIpL2NyZWF0ZV9pbm9kZS5oXAorICAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCBcCisgICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmgKKyBjaGF0dHIubzogJChzcmNkaXIpL2NoYXR0ci5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorQEAgLTcxMCwzICs3MTIsNyBAQCBlMmZyZWVmcmFnLm86ICQoc3JjZGlyKS9lMmZyZWVmcmFnLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAgJChzcmNkaXIpL2UyZnJlZWZyYWcuaAorK2NyZWF0ZV9pbm9kZS5vOiAkKHNyY2RpcikvY3JlYXRlX2lub2RlLmggJChzcmNkaXIpL2NyZWF0ZV9pbm9kZS5jIFwKKysgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggXAorKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZTJwL2UycC5oIFwKKysgJChzcmNkaXIpL25scy1lbmFibGUuaAorZGlmZiAtLWdpdCBhL21pc2MvbWtlMmZzLmMgYi9taXNjL21rZTJmcy5jCitpbmRleCAyZThiYTYwLi41NzhiNjJkIDEwMDY0NAorLS0tIGEvbWlzYy9ta2UyZnMuYworKysrIGIvbWlzYy9ta2UyZnMuYworQEAgLTIyLDcgKzIyLDYgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN0cmluZ3MuaD4KKy0jaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8dGltZS5oPgorICNpZmRlZiBfX2xpbnV4X18KK0BAIC00NCwyNCArNDMsMTkgQEAgZXh0ZXJuIGludCBvcHRpbmQ7CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2VuZGlmCisgI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAjaW5jbHVkZSA8bGliZ2VuLmg+CisgI2luY2x1ZGUgPGxpbWl0cy5oPgorICNpbmNsdWRlIDxibGtpZC9ibGtpZC5oPgorIAorICNpbmNsdWRlICJleHQyZnMvZXh0Ml9mcy5oIgorICNpbmNsdWRlICJleHQyZnMvZXh0MmZzUC5oIgorLSNpbmNsdWRlICJldC9jb21fZXJyLmgiCisgI2luY2x1ZGUgInV1aWQvdXVpZC5oIgorLSNpbmNsdWRlICJlMnAvZTJwLmgiCistI2luY2x1ZGUgImV4dDJmcy9leHQyZnMuaCIKKyAjaW5jbHVkZSAidXRpbC5oIgorICNpbmNsdWRlICJwcm9maWxlLmgiCisgI2luY2x1ZGUgInByb2ZfZXJyLmgiCisgI2luY2x1ZGUgIi4uL3ZlcnNpb24uaCIKKy0jaW5jbHVkZSAibmxzLWVuYWJsZS5oIgorICNpbmNsdWRlICJxdW90YS9ta3F1b3RhLmgiCisrI2luY2x1ZGUgImNyZWF0ZV9pbm9kZS5oIgorIAorICNkZWZpbmUgU1RSSURFX0xFTkdUSCA4CisgCitAQCAtMTA1LDYgKzk5LDcgQEAgc3RhdGljIGNoYXIgKm1vdW50X2RpcjsKKyBjaGFyICpqb3VybmFsX2RldmljZTsKKyBzdGF0aWMgaW50IHN5bmNfa2x1ZGdlOwkvKiBTZXQgdXNpbmcgdGhlIE1LRTJGU19TWU5DIGVudi4gb3B0aW9uICovCisgc3RhdGljIGNoYXIgKipmc190eXBlczsKKytjb25zdCBjaGFyICpyb290X2RpcjsgIC8qIENvcHkgZmlsZXMgZnJvbSB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSAqLworIAorIHN0YXRpYyBwcm9maWxlX3QJcHJvZmlsZTsKKyAKK0BAIC0xMTYsNyArMTExLDggQEAgc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkKKyAJZnByaW50ZihzdGRlcnIsIF8oIlVzYWdlOiAlcyBbLWN8LWwgZmlsZW5hbWVdIFstYiBibG9jay1zaXplXSAiCisgCSJbLUMgY2x1c3Rlci1zaXplXVxuXHRbLWkgYnl0ZXMtcGVyLWlub2RlXSBbLUkgaW5vZGUtc2l6ZV0gIgorIAkiWy1KIGpvdXJuYWwtb3B0aW9uc11cbiIKKy0JIlx0Wy1HIGZsZXgtZ3JvdXAtc2l6ZV0gWy1OIG51bWJlci1vZi1pbm9kZXNdXG4iCisrCSJcdFstRyBmbGV4LWdyb3VwLXNpemVdIFstTiBudW1iZXItb2YtaW5vZGVzXSAiCisrCSJbLWQgcm9vdC1kaXJlY3RvcnldXG4iCisgCSJcdFstbSByZXNlcnZlZC1ibG9ja3MtcGVyY2VudGFnZV0gWy1vIGNyZWF0b3Itb3NdXG4iCisgCSJcdFstZyBibG9ja3MtcGVyLWdyb3VwXSBbLUwgdm9sdW1lLWxhYmVsXSAiCisgCSJbLU0gbGFzdC1tb3VudGVkLWRpcmVjdG9yeV1cblx0Wy1PIGZlYXR1cmVbLC4uLl1dICIKK0BAIC0xMzk0LDcgKzEzOTAsNyBAQCBwcm9maWxlX2Vycm9yOgorIAl9CisgCisgCXdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwKKy0JCSAgICAiYjpjZzppOmpsOm06bm86cXI6czp0OnZDOkRFOkZHOkk6SjpLTDpNOk46TzpSOlNUOlU6ViIpKSAhPSBFT0YpIHsKKysJCSAgICAiYjpjZzppOmpsOm06bm86cXI6czp0OmQ6dkM6REU6Rkc6STpKOktMOk06TjpPOlI6U1Q6VTpWIikpICE9IEVPRikgeworIAkJc3dpdGNoIChjKSB7CisgCQljYXNlICdiJzoKKyAJCQlibG9ja3NpemUgPSBwYXJzZV9udW1fYmxvY2tzMihvcHRhcmcsIC0xKTsKK0BAIC0xNTgyLDYgKzE1NzgsOSBAQCBwcm9maWxlX2Vycm9yOgorIAkJY2FzZSAnVSc6CisgCQkJZnNfdXVpZCA9IG9wdGFyZzsKKyAJCQlicmVhazsKKysJCWNhc2UgJ2QnOgorKwkJCXJvb3RfZGlyID0gb3B0YXJnOworKwkJCWJyZWFrOworIAkJY2FzZSAndic6CisgCQkJdmVyYm9zZSA9IDE7CisgCQkJYnJlYWs7CitAQCAtMjcyNiw2ICsyNzI1LDIxIEBAIG5vX2pvdXJuYWw6CisgCQkJCSAgICAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX1FVT1RBKSkKKyAJCWNyZWF0ZV9xdW90YV9pbm9kZXMoZnMpOworIAorKwkvKiBDb3B5IGZpbGVzIGZyb20gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgKi8KKysJaWYgKHJvb3RfZGlyKSB7CisrCQlpZiAoIXF1aWV0KQorKwkJCXByaW50ZigiJXMiLCBfKCJDb3B5aW5nIGZpbGVzIGludG8gdGhlIGRldmljZTogIikpOworKworKwkJY3VycmVudF9mcyA9IGZzOworKwkJcm9vdCA9IEVYVDJfUk9PVF9JTk87CisrCQlyZXR2YWwgPSBwb3B1bGF0ZV9mcyhyb290LCByb290X2Rpcik7CisrCQlpZiAocmV0dmFsKQorKwkJCWZwcmludGYoc3RkZXJyLCAiJXMiLAorKwkJCQlfKCJcbkVycm9yIHdoaWxlIHBvcHVsYXRpbmcgZmlsZSBzeXN0ZW0iKSk7CisrCQllbHNlIGlmICghcXVpZXQpCisrCQkJcHJpbnRmKCIlcyIsIF8oImRvbmVcbiIpKTsKKysJfQorKworIAlpZiAoIXF1aWV0KQorIAkJcHJpbnRmKCIlcyIsIF8oIldyaXRpbmcgc3VwZXJibG9ja3MgYW5kICIKKyAJCSAgICAgICAiZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAiKSk7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwOS1taXNjLWNyZWF0ZV9pbm9kZS5jLWhhbmRsZS1oYXJkbGlua3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDktbWlzYy1jcmVhdGVfaW5vZGUuYy1oYW5kbGUtaGFyZGxpbmtzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMzBlZTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDktbWlzYy1jcmVhdGVfaW5vZGUuYy1oYW5kbGUtaGFyZGxpbmtzLnBhdGNoCkBAIC0wLDAgKzEsMjEwIEBACitGcm9tIGQ4M2RjOTUwYjNlYzFmYmRlMzNiMjNkNDJjNTE1NDA5MWE3NGY0ZDkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjMgRGVjIDIwMTMgMDM6NDQ6MDMgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCAwOS8xMV0gbWlzYy9jcmVhdGVfaW5vZGUuYzogaGFuZGxlIGhhcmRsaW5rcworCitDcmVhdGUgdGhlIGlub2RlIGFuZCBzYXZlIHRoZSBuYXRpdmUgaW5vZGUgbnVtYmVyIHdoZW4gd2UgbWVldCB0aGUgaGFyZAorbGluayAoc3RfbmxpbmsgPiAxKSBhdCB0aGUgZmlyc3QgdGltZSwgdXNlIGV4dDJmc19saW5rKCkgdG8gbGluayB0aGUKK25hbWUgdG8gdGhlIHRhcmdldCBpbm9kZSBudW1iZXIgd2hlbiB3ZSBtZWV0IHRoZSBzYW1lIG5hdGl2ZSBpbm9kZQorbnVtYmVyIGFnYWluLgorCitUaGlzIGFsZ29yaXRobSBpcyByZWZlcnJlZCBmcm9tIHRoZSBnZW5leHQyZnMuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitSZXZpZXdlZC1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CistLS0KKyBtaXNjL2NyZWF0ZV9pbm9kZS5jIHwgICA4OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBtaXNjL2NyZWF0ZV9pbm9kZS5oIHwgICAxOCArKysrKysrKysrKworIG1pc2MvbWtlMmZzLmMgICAgICAgfCAgIDEyICsrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDExOCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5jIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworaW5kZXggYWFkNzM1NC4uNzYzNTA0ZCAxMDA2NDQKKy0tLSBhL21pc2MvY3JlYXRlX2lub2RlLmMKKysrKyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK0BAIC0xOCw2ICsxOCw0NCBAQAorICNkZWZpbmUgU19CTEtTSVpFIDUxMgorICNlbmRpZgorIAorKy8qIEZvciBzYXZpbmcgdGhlIGhhcmQgbGlua3MgKi8KKytpbnQgaGRsaW5rX2NudCA9IEhETElOS19DTlQ7CisrCisrLyogTGluayBhbiBpbm9kZSBudW1iZXIgdG8gYSBkaXJlY3RvcnkgKi8KKytzdGF0aWMgZXJyY29kZV90IGFkZF9saW5rKGV4dDJfaW5vX3QgcGFyZW50X2lubywgZXh0Ml9pbm9fdCBpbm8sIGNvbnN0IGNoYXIgKm5hbWUpCisreworKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKysJZXJyY29kZV90CQlyZXR2YWw7CisrCisrCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGN1cnJlbnRfZnMsIGlubywgJmlub2RlKTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgIndoaWxlIHJlYWRpbmcgaW5vZGUgJXUiLCBpbm8pOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorKworKwlyZXR2YWwgPSBleHQyZnNfbGluayhjdXJyZW50X2ZzLCBwYXJlbnRfaW5vLCBuYW1lLCBpbm8sIGlub2RlLmlfZmxhZ3MpOworKwlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CisrCQlyZXR2YWwgPSBleHQyZnNfZXhwYW5kX2RpcihjdXJyZW50X2ZzLCBwYXJlbnRfaW5vKTsKKysJCWlmIChyZXR2YWwpIHsKKysJCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsICJ3aGlsZSBleHBhbmRpbmcgZGlyZWN0b3J5Iik7CisrCQkJcmV0dXJuIHJldHZhbDsKKysJCX0KKysJCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIHBhcmVudF9pbm8sIG5hbWUsIGlubywgaW5vZGUuaV9mbGFncyk7CisrCX0KKysJaWYgKHJldHZhbCkgeworKwkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAid2hpbGUgbGlua2luZyAlcyIsIG5hbWUpOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorKworKwlpbm9kZS5pX2xpbmtzX2NvdW50Kys7CisrCisrCXJldHZhbCA9IGV4dDJmc193cml0ZV9pbm9kZShjdXJyZW50X2ZzLCBpbm8sICZpbm9kZSk7CisrCWlmIChyZXR2YWwpCisrCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsICJ3aGlsZSB3cml0aW5nIGlub2RlICV1IiwgaW5vKTsKKysKKysJcmV0dXJuIHJldHZhbDsKKyt9CisrCisgLyogRmlsbCB0aGUgdWlkLCBnaWQsIG1vZGUgYW5kIHRpbWUgZm9yIHRoZSBpbm9kZSAqLworIHN0YXRpYyB2b2lkIGZpbGxfaW5vZGUoc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgc3RhdCAqc3QpCisgeworQEAgLTI3OCw2ICszMTYsMTcgQEAgZmFpbDoKKyAJcmV0dXJuIHJldHZhbDsKKyB9CisgCisraW50IGlzX2hhcmRsaW5rKGV4dDJfaW5vX3QgaW5vKQorK3sKKysJaW50IGk7CisrCisrCWZvcihpID0gMDsgaSA8IGhkbGlua3MuY291bnQ7IGkrKykgeworKwkJaWYoaGRsaW5rcy5oZGxbaV0uc3JjX2lubyA9PSBpbm8pCisrCQkJcmV0dXJuIGk7CisrCX0KKysJcmV0dXJuIC0xOworK30KKysKKyAvKiBDb3B5IHRoZSBuYXRpdmUgZmlsZSB0byB0aGUgZnMgKi8KKyBlcnJjb2RlX3QgZG9fd3JpdGVfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZGVzdCkKKyB7CitAQCAtMzg4LDkgKzQzNywxMSBAQCBlcnJjb2RlX3QgcG9wdWxhdGVfZnMoZXh0Ml9pbm9fdCBwYXJlbnRfaW5vLCBjb25zdCBjaGFyICpzb3VyY2VfZGlyKQorIAlzdHJ1Y3QgZGlyZW50CSpkZW50OworIAlzdHJ1Y3Qgc3RhdAlzdDsKKyAJY2hhcgkJbG5fdGFyZ2V0W1BBVEhfTUFYXTsKKysJdW5zaWduZWQgaW50CXNhdmVfaW5vZGU7CisgCWV4dDJfaW5vX3QJaW5vOworIAllcnJjb2RlX3QJcmV0dmFsOworIAlpbnQJCXJlYWRfY250OworKwlpbnQJCWhkbGluazsKKyAKKyAJcm9vdCA9IEVYVDJfUk9PVF9JTk87CisgCitAQCAtNDEyLDYgKzQ2MywyMiBAQCBlcnJjb2RlX3QgcG9wdWxhdGVfZnMoZXh0Ml9pbm9fdCBwYXJlbnRfaW5vLCBjb25zdCBjaGFyICpzb3VyY2VfZGlyKQorIAkJbHN0YXQoZGVudC0+ZF9uYW1lLCAmc3QpOworIAkJbmFtZSA9IGRlbnQtPmRfbmFtZTsKKyAKKysJCS8qIENoZWNrIGZvciBoYXJkbGlua3MgKi8KKysJCXNhdmVfaW5vZGUgPSAwOworKwkJaWYgKCFTX0lTRElSKHN0LnN0X21vZGUpICYmICFTX0lTTE5LKHN0LnN0X21vZGUpICYmIHN0LnN0X25saW5rID4gMSkgeworKwkJCWhkbGluayA9IGlzX2hhcmRsaW5rKHN0LnN0X2lubyk7CisrCQkJaWYgKGhkbGluayA+PSAwKSB7CisrCQkJCXJldHZhbCA9IGFkZF9saW5rKHBhcmVudF9pbm8sCisrCQkJCQkJaGRsaW5rcy5oZGxbaGRsaW5rXS5kc3RfaW5vLCBuYW1lKTsKKysJCQkJaWYgKHJldHZhbCkgeworKwkJCQkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAid2hpbGUgbGlua2luZyAlcyIsIG5hbWUpOworKwkJCQkJcmV0dXJuIHJldHZhbDsKKysJCQkJfQorKwkJCQljb250aW51ZTsKKysJCQl9IGVsc2UKKysJCQkJc2F2ZV9pbm9kZSA9IDE7CisrCQl9CisrCisgCQlzd2l0Y2goc3Quc3RfbW9kZSAmIFNfSUZNVCkgeworIAkJCWNhc2UgU19JRkNIUjoKKyAJCQljYXNlIFNfSUZCTEs6CitAQCAtNDgwLDYgKzU0NywyNyBAQCBlcnJjb2RlX3QgcG9wdWxhdGVfZnMoZXh0Ml9pbm9fdCBwYXJlbnRfaW5vLCBjb25zdCBjaGFyICpzb3VyY2VfZGlyKQorIAkJCQlfKCJ3aGlsZSBzZXR0aW5nIGlub2RlIGZvciBcIiVzXCIiKSwgbmFtZSk7CisgCQkJcmV0dXJuIHJldHZhbDsKKyAJCX0KKysKKysJCS8qIFNhdmUgdGhlIGhhcmRsaW5rIGlubyAqLworKwkJaWYgKHNhdmVfaW5vZGUpIHsKKysJCQkvKgorKwkJCSAqIENoZWNrIHdoZXRoZXIgbmVlZCBtb3JlIG1lbW9yeSwgYW5kIHdlIGRvbid0IG5lZWQKKysJCQkgKiBmcmVlKCkgc2luY2UgdGhlIGxpZmVzcGFuIHdpbGwgYmUgb3ZlciBhZnRlciB0aGUgZnMKKysJCQkgKiBwb3B1bGF0ZWQuCisrCQkJICovCisrCQkJaWYgKGhkbGlua3MuY291bnQgPT0gaGRsaW5rX2NudCkgeworKwkJCQlpZiAoKGhkbGlua3MuaGRsID0gcmVhbGxvYyAoaGRsaW5rcy5oZGwsCisrCQkJCQkJKGhkbGlua19jbnQgKyBIRExJTktfQ05UKSAqCisrCQkJCQkJc2l6ZW9mIChzdHJ1Y3QgaGRsaW5rX3MpKSkgPT0gTlVMTCkgeworKwkJCQkJY29tX2VycihuYW1lLCBlcnJubywgIk5vdCBlbm91Z2ggbWVtb3J5Iik7CisrCQkJCQlyZXR1cm4gZXJybm87CisrCQkJCX0KKysJCQkJaGRsaW5rX2NudCArPSBIRExJTktfQ05UOworKwkJCX0KKysJCQloZGxpbmtzLmhkbFtoZGxpbmtzLmNvdW50XS5zcmNfaW5vID0gc3Quc3RfaW5vOworKwkJCWhkbGlua3MuaGRsW2hkbGlua3MuY291bnRdLmRzdF9pbm8gPSBpbm87CisrCQkJaGRsaW5rcy5jb3VudCsrOworKwkJfQorIAl9CisgCWNsb3NlZGlyKGRoKTsKKyAJcmV0dXJuIHJldHZhbDsKK2RpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5oIGIvbWlzYy9jcmVhdGVfaW5vZGUuaAoraW5kZXggOWZjOTdmYS4uMmI2ZDQyOSAxMDA2NDQKKy0tLSBhL21pc2MvY3JlYXRlX2lub2RlLmgKKysrKyBiL21pc2MvY3JlYXRlX2lub2RlLmgKK0BAIC02LDkgKzYsMjcgQEAKKyAjaW5jbHVkZSAiZXh0MmZzL2V4dDJmcy5oIgorICNpbmNsdWRlICJubHMtZW5hYmxlLmgiCisgCisrc3RydWN0IGhkbGlua19zCisreworKwlleHQyX2lub190IHNyY19pbm87CisrCWV4dDJfaW5vX3QgZHN0X2lubzsKKyt9OworKworK3N0cnVjdCBoZGxpbmtzX3MKKyt7CisrCWludCBjb3VudDsKKysJc3RydWN0IGhkbGlua19zICpoZGw7CisrfTsKKysKKytzdHJ1Y3QgaGRsaW5rc19zIGhkbGlua3M7CisrCisgZXh0Ml9maWxzeXMgICAgY3VycmVudF9mczsKKyBleHQyX2lub190ICAgICByb290OworIAorKy8qIEZvciBzYXZpbmcgdGhlIGhhcmQgbGlua3MgKi8KKysjZGVmaW5lIEhETElOS19DTlQgICAgIDQKKytleHRlcm4gaW50IGhkbGlua19jbnQ7CisrCisgLyogRm9yIHBvcHVsYXRpbmcgdGhlIGZpbGVzeXN0ZW0gKi8KKyBleHRlcm4gZXJyY29kZV90IHBvcHVsYXRlX2ZzKGV4dDJfaW5vX3QgcGFyZW50X2lubywgY29uc3QgY2hhciAqc291cmNlX2Rpcik7CisgZXh0ZXJuIGVycmNvZGVfdCBkb19ta25vZF9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KTsKK2RpZmYgLS1naXQgYS9taXNjL21rZTJmcy5jIGIvbWlzYy9ta2UyZnMuYworaW5kZXggNTc4YjYyZC4uYTYzZjBiNyAxMDA2NDQKKy0tLSBhL21pc2MvbWtlMmZzLmMKKysrKyBiL21pc2MvbWtlMmZzLmMKK0BAIC0yNzMwLDYgKzI3MzAsMTggQEAgbm9fam91cm5hbDoKKyAJCWlmICghcXVpZXQpCisgCQkJcHJpbnRmKCIlcyIsIF8oIkNvcHlpbmcgZmlsZXMgaW50byB0aGUgZGV2aWNlOiAiKSk7CisgCisrCQkvKgorKwkJICogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaGFyZGxpbmtzLCB3ZSBkb24ndCBuZWVkIGZyZWUoKQorKwkJICogc2luY2UgdGhlIGxpZmVzcGFuIHdpbGwgYmUgb3ZlciBhZnRlciB0aGUgZnMgcG9wdWxhdGVkLgorKwkJICovCisrCQlpZiAoKGhkbGlua3MuaGRsID0gKHN0cnVjdCBoZGxpbmtfcyAqKQorKwkJCQltYWxsb2MoaGRsaW5rX2NudCAqIHNpemVvZihzdHJ1Y3QgaGRsaW5rX3MpKSkgPT0gTlVMTCkgeworKwkJCWZwcmludGYoc3RkZXJyLCAiJXMiLCBfKCJcbk5vdCBlbm91Z2ggbWVtb3J5XG4iKSk7CisrCQkJcmV0dmFsID0gZXh0MmZzX2Nsb3NlKGZzKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfQorKworKwkJaGRsaW5rcy5jb3VudCA9IDA7CisgCQljdXJyZW50X2ZzID0gZnM7CisgCQlyb290ID0gRVhUMl9ST09UX0lOTzsKKyAJCXJldHZhbCA9IHBvcHVsYXRlX2ZzKHJvb3QsIHJvb3RfZGlyKTsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDEwLWRlYnVnZnMtdXNlLXRoZS1mdW5jdGlvbnMtaW4tbWlzYy1jcmVhdGVfaW5vZGUuYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAxMC1kZWJ1Z2ZzLXVzZS10aGUtZnVuY3Rpb25zLWluLW1pc2MtY3JlYXRlX2lub2RlLmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE2Y2E4ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAxMC1kZWJ1Z2ZzLXVzZS10aGUtZnVuY3Rpb25zLWluLW1pc2MtY3JlYXRlX2lub2RlLmMucGF0Y2gKQEAgLTAsMCArMSw0OTYgQEAKK0Zyb20gZGI4OTk5MmZhYjIyMTVmNTJkY2U0YzU5NWEzOTI3MWI0ZmYzMDAwYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyMyBEZWMgMjAxMyAwNDoyMjoyMiAtMDUwMAorU3ViamVjdDogW1BBVENIIDEwLzExXSBkZWJ1Z2ZzOiB1c2UgdGhlIGZ1bmN0aW9ucyBpbiBtaXNjL2NyZWF0ZV9pbm9kZS5jCisKKyogVXNlIHRoZSBmdW5jdGlvbnMgaW4gbWlzYy9jcmVhdGVfaW5vZGUuYywgYW5kIHJlbW92ZSB0aGUgZHVwbGljYXRlZAorICBjb2RlLgorCisqIFRoZSBDUkVBVEVfSU5PREVfREVQUyBpbiB0aGUgZGVidWdmcy9NYWtlZmlsZS5pbiBpcyB1c2VkIGZvciByZWNvcmRpbmcKKyAgY3JlYXRlX2lub2RlLm8ncyBkZXBlbmRzIHdoaWNoIGlzIGZyb20gbWlzYy9NYWtlZmlsZS5pbiwgd2UgaGF2ZSB0bworICByZWNvbXBpbGUgY3JlYXRlX2lub2RlLm8gYmVjYXVzZSB3ZSBuZWVkIGl0IHRvIHByaW50IG1vcmUgbWVzc2FnZXMgd2hlbgorICBpdCBpcyB1c2VkIGJ5IGRlYnVnZnMsIGp1c3QgbGlrZSB3ZSByZWNvbXBpbGUgZTJmcmVlZnJhZy5vLCBidXQgaXQgc2VlbXMKKyAgdGhhdCB0aGUgZTJmcmVlZnJhZy5vJ3MgZGVwZW5kcyBpbiBkZWJ1Z2ZzL01ha2VmaWxlLmluIGlzIGluY29ycmVjdCwgaXQKKyAgd291bGQgbm90IHJlYnVpbGQgd2hlbiBpdHMgZGVwZW5kcyAoZS5nLjogbGliL2NvbmZpZy5oKSBpcyBjaGFuZ2VkLAorICB3aGljaCB3b3VsZCBjYXVzZSB1bmV4cGVjdGVkIGVycm9ycy4gTWFrZSBkdXBsaWNhdGVkIGNvZGUgaW4KKyAgZGVidWdmcy9NYWtlZmlsZS5pbiBhbmQgbWlzYy9NYWtlZmlsZS5pbiBpcyBub3QgYSBnb29kIGlkZWEsIG1heWJlIHdlJ2QKKyAgYmV0dGVyIGRlZmluZSBDUkVBVEVfSU5PREVfREVQUyBpbiB0aGUgdG9wIE1ha2VmaWxlLCBJJ2QgbGlrZSB0byBzZW5kCisgIGFub3RoZXIgcGF0Y2ggYW5kIGZpeCB0aGUgZTJmcmVlZnJhZyBpZiB5b3UgYXJlIGZpbmUgd2l0aCBpdC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Jldmlld2VkLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIGRlYnVnZnMvTWFrZWZpbGUuaW4gfCAgIDE3ICsrLQorIGRlYnVnZnMvZGVidWdmcy5jICAgfCAgMzA1ICsrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGRlYnVnZnMvZGVidWdmcy5oICAgfCAgICAxICsKKyAzIGZpbGVzIGNoYW5nZWQsIDMxIGluc2VydGlvbnMoKyksIDI5MiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RlYnVnZnMvTWFrZWZpbGUuaW4gYi9kZWJ1Z2ZzL01ha2VmaWxlLmluCitpbmRleCBiZjAzN2UwLi5mNTFiNzhlIDEwMDY0NAorLS0tIGEvZGVidWdmcy9NYWtlZmlsZS5pbgorKysrIGIvZGVidWdmcy9NYWtlZmlsZS5pbgorQEAgLTE4LDcgKzE4LDcgQEAgTUtfQ01EUz0JX1NTX0RJUl9PVkVSUklERT0uLi9saWIvc3MgLi4vbGliL3NzL21rX2NtZHMKKyAKKyBERUJVR19PQkpTPSBkZWJ1Z19jbWRzLm8gZGVidWdmcy5vIHV0aWwubyBuY2hlY2subyBpY2hlY2subyBscy5vIFwKKyAJbHNkZWwubyBkdW1wLm8gc2V0X2ZpZWxkcy5vIGxvZ2R1bXAubyBodHJlZS5vIHVudXNlZC5vIGUyZnJlZWZyYWcubyBcCistCWZpbGVmcmFnLm8gZXh0ZW50X2NtZHMubyBleHRlbnRfaW5vZGUubyB6YXAubworKwlmaWxlZnJhZy5vIGV4dGVudF9jbWRzLm8gZXh0ZW50X2lub2RlLm8gemFwLm8gY3JlYXRlX2lub2RlLm8KKyAKKyBST19ERUJVR19PQkpTPSByb19kZWJ1Z19jbWRzLm8gcm9fZGVidWdmcy5vIHV0aWwubyBuY2hlY2subyBpY2hlY2subyBscy5vIFwKKyAJbHNkZWwubyBsb2dkdW1wLm8gaHRyZWUubyBlMmZyZWVmcmFnLm8gZmlsZWZyYWcubyBleHRlbnRfY21kcy5vIFwKK0BAIC0yOCw3ICsyOCwxMyBAQCBTUkNTPSBkZWJ1Z19jbWRzLmMgJChzcmNkaXIpL2RlYnVnZnMuYyAkKHNyY2RpcikvdXRpbC5jICQoc3JjZGlyKS9scy5jIFwKKyAJJChzcmNkaXIpL25jaGVjay5jICQoc3JjZGlyKS9pY2hlY2suYyAkKHNyY2RpcikvbHNkZWwuYyBcCisgCSQoc3JjZGlyKS9kdW1wLmMgJChzcmNkaXIpL3NldF9maWVsZHMuYyAke3NyY2Rpcn0vbG9nZHVtcC5jIFwKKyAJJChzcmNkaXIpL2h0cmVlLmMgJChzcmNkaXIpL3VudXNlZC5jICR7c3JjZGlyfS8uLi9taXNjL2UyZnJlZWZyYWcuYyBcCistCSQoc3JjZGlyKS9maWxlZnJhZy5jICQoc3JjZGlyKS9leHRlbnRfaW5vZGUuYyAkKHNyY2RpcikvemFwLmMKKysJJChzcmNkaXIpL2ZpbGVmcmFnLmMgJChzcmNkaXIpL2V4dGVudF9pbm9kZS5jICQoc3JjZGlyKS96YXAuYyBcCisrCSQoc3JjZGlyKS8uLi9taXNjL2NyZWF0ZV9pbm9kZS5jCisrCisrQ1JFQVRFX0lOT0RFX0RFUFM9ICQoc3JjZGlyKS8uLi9taXNjL2NyZWF0ZV9pbm9kZS5oIFwKKysJJChzcmNkaXIpLy4uL21pc2MvY3JlYXRlX2lub2RlLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisrCSQoc3JjZGlyKS8uLi9saWIvZXh0MmZzL2V4dDJmcy5oICQoc3JjZGlyKS8uLi9saWIvZXQvY29tX2Vyci5oIFwKKysJJChzcmNkaXIpLy4uL2xpYi9lMnAvZTJwLmggJChzcmNkaXIpLy4uL21pc2MvbmxzLWVuYWJsZS5oCisgCisgTElCUz0gJChMSUJFWFQyRlMpICQoTElCRTJQKSAkKExJQlNTKSAkKExJQkNPTV9FUlIpICQoTElCQkxLSUQpIFwKKyAJJChMSUJVVUlEKQorQEAgLTgxLDYgKzg3LDExIEBAIGUyZnJlZWZyYWcubzogJChzcmNkaXIpLy4uL21pc2MvZTJmcmVlZnJhZy5jCisgCSQoRSkgIglDQyAkQCIKKyAJJChRKSAkKENDKSAtYyAkKEFMTF9DRkxBR1MpIC1JJChzcmNkaXIpICQ8IC1EREVCVUdGUyAtbyAkQAorIAorK2NyZWF0ZV9pbm9kZS5vOiAkKENSRUFURV9JTk9ERV9ERVBTKQorKwkkKEUpICIJQ0MgJEAiCisrCSQoUSkgJChDQykgLWMgJChBTExfQ0ZMQUdTKSAtSSQoc3JjZGlyKSBcCisrCQkgJChzcmNkaXIpLy4uL21pc2MvY3JlYXRlX2lub2RlLmMgLURERUJVR0ZTIC1vICRACisrCisgZGVidWdmcy44OiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvZGVidWdmcy44LmluCisgCSQoRSkgIglTVUJTVCAkQCIKKyAJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvZGVidWdmcy44LmluIGRlYnVnZnMuOAorQEAgLTE0Miw3ICsxNTMsNyBAQCBkZWJ1Z2ZzLm86ICQoc3JjZGlyKS9kZWJ1Z2ZzLmMgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICAkKHRvcF9zcmNkaXIpL2xpYi9lMnAvZTJwLmggJCh0b3Bfc3JjZGlyKS92ZXJzaW9uLmggJChzcmNkaXIpL2pmc191c2VyLmggXAorICAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMva2VybmVsLWpiZC5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9qZnNfY29tcGF0LmggXAorLSAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMva2VybmVsLWxpc3QuaAorKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMva2VybmVsLWxpc3QuaCAkKHRvcF9zcmNkaXIpL21pc2MvdXRpbC5oCisgdXRpbC5vOiAkKHNyY2RpcikvdXRpbC5jICQoc3JjZGlyKS9kZWJ1Z2ZzLmggXAorICAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorZGlmZiAtLWdpdCBhL2RlYnVnZnMvZGVidWdmcy5jIGIvZGVidWdmcy9kZWJ1Z2ZzLmMKK2luZGV4IDljMjE1ZjcuLjYyZTlmNDQgMTAwNjQ0CistLS0gYS9kZWJ1Z2ZzL2RlYnVnZnMuYworKysrIGIvZGVidWdmcy9kZWJ1Z2ZzLmMKK0BAIC0yNSw4ICsyNSw2IEBAIGV4dGVybiBjaGFyICpvcHRhcmc7CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2VuZGlmCisgI2luY2x1ZGUgPGZjbnRsLmg+CistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgorIAorICNpbmNsdWRlICJkZWJ1Z2ZzLmgiCisgI2luY2x1ZGUgInV1aWQvdXVpZC5oIgorQEAgLTQxLDIyICszOSwxMSBAQCBleHRlcm4gY2hhciAqb3B0YXJnOworICNkZWZpbmUgQlVGU0laIDgxOTIKKyAjZW5kaWYKKyAKKy0vKiA2NEtpQiBpcyB0aGUgbWluaW1pdW0gYmxrc2l6ZSB0byBiZXN0IG1pbmltaXplIHN5c3RlbSBjYWxsIG92ZXJoZWFkLiAqLworLSNpZm5kZWYgSU9fQlVGU0laRQorLSNkZWZpbmUgSU9fQlVGU0laRSA2NCoxMDI0CistI2VuZGlmCistCistLyogQmxvY2sgc2l6ZSBmb3IgYHN0X2Jsb2NrcycgKi8KKy0jaWZuZGVmIFNfQkxLU0laRQorLSNkZWZpbmUgU19CTEtTSVpFIDUxMgorLSNlbmRpZgorLQorIHNzX3JlcXVlc3RfdGFibGUgKmV4dHJhX2NtZHM7CisgY29uc3QgY2hhciAqZGVidWdfcHJvZ19uYW1lOworIGludCBzY2lfaWR4OworIAorLWV4dDJfZmlsc3lzCWN1cnJlbnRfZnMgPSBOVUxMOworLWV4dDJfaW5vX3QJcm9vdCwgY3dkOworK2V4dDJfaW5vX3QJY3dkOworIAorIHN0YXRpYyB2b2lkIG9wZW5fZmlsZXN5c3RlbShjaGFyICpkZXZpY2UsIGludCBvcGVuX2ZsYWdzLCBibGs2NF90IHN1cGVyYmxvY2ssCisgCQkJICAgIGJsazY0X3QgYmxvY2tzaXplLCBpbnQgY2F0YXN0cm9waGljLAorQEAgLTE1NzYsMTg5ICsxNTYzLDI0IEBAIHZvaWQgZG9fZmluZF9mcmVlX2lub2RlKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgfQorIAorICNpZm5kZWYgUkVBRF9PTkxZCistc3RhdGljIGVycmNvZGVfdCBjb3B5X2ZpbGUoaW50IGZkLCBleHQyX2lub190IG5ld2ZpbGUsIGludCBidWZzaXplLCBpbnQgbWFrZV9ob2xlcykKKy17CistCWV4dDJfZmlsZV90CWUyX2ZpbGU7CistCWVycmNvZGVfdAlyZXR2YWw7CistCWludAkJZ290OworLQl1bnNpZ25lZCBpbnQJd3JpdHRlbjsKKy0JY2hhcgkJKmJ1ZjsKKy0JY2hhcgkJKnB0cjsKKy0JY2hhcgkJKnplcm9fYnVmOworLQlpbnQJCWNtcDsKKy0KKy0JcmV0dmFsID0gZXh0MmZzX2ZpbGVfb3BlbihjdXJyZW50X2ZzLCBuZXdmaWxlLAorLQkJCQkgIEVYVDJfRklMRV9XUklURSwgJmUyX2ZpbGUpOworLQlpZiAocmV0dmFsKQorLQkJcmV0dXJuIHJldHZhbDsKKy0KKy0JcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oYnVmc2l6ZSwgJmJ1Zik7CistCWlmIChyZXR2YWwpIHsKKy0JCWNvbV9lcnIoImNvcHlfZmlsZSIsIHJldHZhbCwgImNhbid0IGFsbG9jYXRlIGJ1ZmZlclxuIik7CistCQlyZXR1cm4gcmV0dmFsOworLQl9CistCistCS8qIFRoaXMgaXMgdXNlZCBmb3IgY2hlY2tpbmcgd2hldGhlciB0aGUgd2hvbGUgYmxvY2sgaXMgemVybyAqLworLQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbXplcm8oYnVmc2l6ZSwgJnplcm9fYnVmKTsKKy0JaWYgKHJldHZhbCkgeworLQkJY29tX2VycigiY29weV9maWxlIiwgcmV0dmFsLCAiY2FuJ3QgYWxsb2NhdGUgYnVmZmVyXG4iKTsKKy0JCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKy0JCXJldHVybiByZXR2YWw7CistCX0KKy0KKy0Jd2hpbGUgKDEpIHsKKy0JCWdvdCA9IHJlYWQoZmQsIGJ1ZiwgYnVmc2l6ZSk7CistCQlpZiAoZ290ID09IDApCistCQkJYnJlYWs7CistCQlpZiAoZ290IDwgMCkgeworLQkJCXJldHZhbCA9IGVycm5vOworLQkJCWdvdG8gZmFpbDsKKy0JCX0KKy0JCXB0ciA9IGJ1ZjsKKy0KKy0JCS8qIFNwYXJzZSBjb3B5ICovCistCQlpZiAobWFrZV9ob2xlcykgeworLQkJCS8qIENoZWNrIHdoZXRoZXIgYWxsIGlzIHplcm8gKi8KKy0JCQljbXAgPSBtZW1jbXAocHRyLCB6ZXJvX2J1ZiwgZ290KTsKKy0JCQlpZiAoY21wID09IDApIHsKKy0JCQkJIC8qIFRoZSB3aG9sZSBibG9jayBpcyB6ZXJvLCBtYWtlIGEgaG9sZSAqLworLQkJCQlyZXR2YWwgPSBleHQyZnNfZmlsZV9sc2VlayhlMl9maWxlLCBnb3QsIEVYVDJfU0VFS19DVVIsIE5VTEwpOworLQkJCQlpZiAocmV0dmFsKQorLQkJCQkJZ290byBmYWlsOworLQkJCQlnb3QgPSAwOworLQkJCX0KKy0JCX0KKy0KKy0JCS8qIE5vcm1hbCBjb3B5ICovCistCQl3aGlsZSAoZ290ID4gMCkgeworLQkJCXJldHZhbCA9IGV4dDJmc19maWxlX3dyaXRlKGUyX2ZpbGUsIHB0ciwKKy0JCQkJCQkgICBnb3QsICZ3cml0dGVuKTsKKy0JCQlpZiAocmV0dmFsKQorLQkJCQlnb3RvIGZhaWw7CistCistCQkJZ290IC09IHdyaXR0ZW47CistCQkJcHRyICs9IHdyaXR0ZW47CistCQl9CistCX0KKy0JZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworLQlleHQyZnNfZnJlZV9tZW0oJnplcm9fYnVmKTsKKy0JcmV0dmFsID0gZXh0MmZzX2ZpbGVfY2xvc2UoZTJfZmlsZSk7CistCXJldHVybiByZXR2YWw7CistCistZmFpbDoKKy0JZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworLQlleHQyZnNfZnJlZV9tZW0oJnplcm9fYnVmKTsKKy0JKHZvaWQpIGV4dDJmc19maWxlX2Nsb3NlKGUyX2ZpbGUpOworLQlyZXR1cm4gcmV0dmFsOworLX0KKy0KKy0KKyB2b2lkIGRvX3dyaXRlKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgeworLQlpbnQJCWZkOworLQlzdHJ1Y3Qgc3RhdAlzdGF0YnVmOworLQlleHQyX2lub190CW5ld2ZpbGU7CisgCWVycmNvZGVfdAlyZXR2YWw7CistCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworLQlpbnQJCWJ1ZnNpemUgPSBJT19CVUZTSVpFOworLQlpbnQJCW1ha2VfaG9sZXMgPSAwOworIAorIAlpZiAoY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAzLCAzLCAid3JpdGUiLAorIAkJCQkiPG5hdGl2ZSBmaWxlPiA8bmV3IGZpbGU+IiwgQ0hFQ0tfRlNfUlcpKQorIAkJcmV0dXJuOworIAorLQlmZCA9IG9wZW4oYXJndlsxXSwgT19SRE9OTFkpOworLQlpZiAoZmQgPCAwKSB7CistCQljb21fZXJyKGFyZ3ZbMV0sIGVycm5vLCAwKTsKKy0JCXJldHVybjsKKy0JfQorLQlpZiAoZnN0YXQoZmQsICZzdGF0YnVmKSA8IDApIHsKKy0JCWNvbV9lcnIoYXJndlsxXSwgZXJybm8sIDApOworLQkJY2xvc2UoZmQpOworLQkJcmV0dXJuOworLQl9CistCistCXJldHZhbCA9IGV4dDJmc19uYW1laShjdXJyZW50X2ZzLCByb290LCBjd2QsIGFyZ3ZbMl0sICZuZXdmaWxlKTsKKy0JaWYgKHJldHZhbCA9PSAwKSB7CistCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJUaGUgZmlsZSAnJXMnIGFscmVhZHkgZXhpc3RzXG4iLCBhcmd2WzJdKTsKKy0JCWNsb3NlKGZkKTsKKy0JCXJldHVybjsKKy0JfQorLQorLQlyZXR2YWwgPSBleHQyZnNfbmV3X2lub2RlKGN1cnJlbnRfZnMsIGN3ZCwgMDEwNzU1LCAwLCAmbmV3ZmlsZSk7CistCWlmIChyZXR2YWwpIHsKKysJaWYgKChyZXR2YWwgPSBkb193cml0ZV9pbnRlcm5hbChjd2QsIGFyZ3ZbMV0sIGFyZ3ZbMl0pKSkKKyAJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAwKTsKKy0JCWNsb3NlKGZkKTsKKy0JCXJldHVybjsKKy0JfQorLQlwcmludGYoIkFsbG9jYXRlZCBpbm9kZTogJXVcbiIsIG5ld2ZpbGUpOworLQlyZXR2YWwgPSBleHQyZnNfbGluayhjdXJyZW50X2ZzLCBjd2QsIGFyZ3ZbMl0sIG5ld2ZpbGUsCistCQkJICAgICBFWFQyX0ZUX1JFR19GSUxFKTsKKy0JaWYgKHJldHZhbCA9PSBFWFQyX0VUX0RJUl9OT19TUEFDRSkgeworLQkJcmV0dmFsID0gZXh0MmZzX2V4cGFuZF9kaXIoY3VycmVudF9mcywgY3dkKTsKKy0JCWlmIChyZXR2YWwpIHsKKy0JCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKy0JCQljbG9zZShmZCk7CistCQkJcmV0dXJuOworLQkJfQorLQkJcmV0dmFsID0gZXh0MmZzX2xpbmsoY3VycmVudF9mcywgY3dkLCBhcmd2WzJdLCBuZXdmaWxlLAorLQkJCQkgICAgIEVYVDJfRlRfUkVHX0ZJTEUpOworLQl9CistCWlmIChyZXR2YWwpIHsKKy0JCWNvbV9lcnIoYXJndlsyXSwgcmV0dmFsLCAwKTsKKy0JCWNsb3NlKGZkKTsKKy0JCXJldHVybjsKKy0JfQorLSAgICAgICAgaWYgKGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoY3VycmVudF9mcy0+aW5vZGVfbWFwLG5ld2ZpbGUpKQorLQkJY29tX2Vycihhcmd2WzBdLCAwLCAiV2FybmluZzogaW5vZGUgYWxyZWFkeSBzZXQiKTsKKy0JZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzMihjdXJyZW50X2ZzLCBuZXdmaWxlLCArMSwgMCk7CistCW1lbXNldCgmaW5vZGUsIDAsIHNpemVvZihpbm9kZSkpOworLQlpbm9kZS5pX21vZGUgPSAoc3RhdGJ1Zi5zdF9tb2RlICYgfkxJTlVYX1NfSUZNVCkgfCBMSU5VWF9TX0lGUkVHOworLQlpbm9kZS5pX2F0aW1lID0gaW5vZGUuaV9jdGltZSA9IGlub2RlLmlfbXRpbWUgPQorLQkJY3VycmVudF9mcy0+bm93ID8gY3VycmVudF9mcy0+bm93IDogdGltZSgwKTsKKy0JaW5vZGUuaV9saW5rc19jb3VudCA9IDE7CistCWlub2RlLmlfc2l6ZSA9IHN0YXRidWYuc3Rfc2l6ZTsKKy0JaWYgKGN1cnJlbnRfZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorLQkgICAgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFMpIHsKKy0JCWludCBpOworLQkJc3RydWN0IGV4dDNfZXh0ZW50X2hlYWRlciAqZWg7CistCistCQllaCA9IChzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICopICZpbm9kZS5pX2Jsb2NrWzBdOworLQkJZWgtPmVoX2RlcHRoID0gMDsKKy0JCWVoLT5laF9lbnRyaWVzID0gMDsKKy0JCWVoLT5laF9tYWdpYyA9IGV4dDJmc19jcHVfdG9fbGUxNihFWFQzX0VYVF9NQUdJQyk7CistCQlpID0gKHNpemVvZihpbm9kZS5pX2Jsb2NrKSAtIHNpemVvZigqZWgpKSAvCistCQkJc2l6ZW9mKHN0cnVjdCBleHQzX2V4dGVudCk7CistCQllaC0+ZWhfbWF4ID0gZXh0MmZzX2NwdV90b19sZTE2KGkpOworLQkJaW5vZGUuaV9mbGFncyB8PSBFWFQ0X0VYVEVOVFNfRkw7CistCX0KKy0JaWYgKGRlYnVnZnNfd3JpdGVfbmV3X2lub2RlKG5ld2ZpbGUsICZpbm9kZSwgYXJndlswXSkpIHsKKy0JCWNsb3NlKGZkKTsKKy0JCXJldHVybjsKKy0JfQorLQlpZiAoTElOVVhfU19JU1JFRyhpbm9kZS5pX21vZGUpKSB7CistCQlpZiAoc3RhdGJ1Zi5zdF9ibG9ja3MgPCBzdGF0YnVmLnN0X3NpemUgLyBTX0JMS1NJWkUpIHsKKy0JCQltYWtlX2hvbGVzID0gMTsKKy0JCQkvKgorLQkJCSAqIFVzZSBJL08gYmxvY2tzaXplIGFzIGJ1ZmZlciBzaXplIHdoZW4KKy0JCQkgKiBjb3B5aW5nIHNwYXJzZSBmaWxlcy4KKy0JCQkgKi8KKy0JCQlidWZzaXplID0gc3RhdGJ1Zi5zdF9ibGtzaXplOworLQkJfQorLQkJcmV0dmFsID0gY29weV9maWxlKGZkLCBuZXdmaWxlLCBidWZzaXplLCBtYWtlX2hvbGVzKTsKKy0JCWlmIChyZXR2YWwpCistCQkJY29tX2VycigiY29weV9maWxlIiwgcmV0dmFsLCAwKTsKKy0JfQorLQljbG9zZShmZCk7CisgfQorIAorIHZvaWQgZG9fbWtub2QoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB7CisgCXVuc2lnbmVkIGxvbmcJbW9kZSwgbWFqb3IsIG1pbm9yOworLQlleHQyX2lub190CW5ld2ZpbGU7CisgCWVycmNvZGVfdCAJcmV0dmFsOworLQlzdHJ1Y3QgZXh0Ml9pbm9kZSBpbm9kZTsKKyAJaW50CQlmaWxldHlwZSwgbnI7CisrCXN0cnVjdCBzdGF0CXN0OworIAorIAlpZiAoY2hlY2tfZnNfb3Blbihhcmd2WzBdKSkKKyAJCXJldHVybjsKK0BAIC0xNzY3LDExNSArMTU4OSw1MCBAQCB2b2lkIGRvX21rbm9kKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJVc2FnZTogbWtub2QgPG5hbWU+IFtwfCBbY3xiXSA8bWFqb3I+IDxtaW5vcj5dIik7CisgCQlyZXR1cm47CisgCX0KKysKKyAJbW9kZSA9IG1pbm9yID0gbWFqb3IgPSAwOworIAlzd2l0Y2ggKGFyZ3ZbMl1bMF0pIHsKKyAJCWNhc2UgJ3AnOgorLQkJCW1vZGUgPSBMSU5VWF9TX0lGSUZPOworLQkJCWZpbGV0eXBlID0gRVhUMl9GVF9GSUZPOworKwkJCXN0LnN0X21vZGUgPSBTX0lGSUZPOworIAkJCW5yID0gMzsKKyAJCQlicmVhazsKKyAJCWNhc2UgJ2MnOgorLQkJCW1vZGUgPSBMSU5VWF9TX0lGQ0hSOworLQkJCWZpbGV0eXBlID0gRVhUMl9GVF9DSFJERVY7CisrCQkJc3Quc3RfbW9kZSA9IFNfSUZDSFI7CisgCQkJbnIgPSA1OworIAkJCWJyZWFrOworIAkJY2FzZSAnYic6CistCQkJbW9kZSA9IExJTlVYX1NfSUZCTEs7CistCQkJZmlsZXR5cGUgPSBFWFQyX0ZUX0JMS0RFVjsKKysJCQlzdC5zdF9tb2RlID0gU19JRkJMSzsKKyAJCQluciA9IDU7CisgCQkJYnJlYWs7CisgCQlkZWZhdWx0OgorLQkJCWZpbGV0eXBlID0gMDsKKyAJCQluciA9IDA7CisgCX0KKysKKyAJaWYgKG5yID09IDUpIHsKKyAJCW1ham9yID0gc3RydG91bChhcmd2WzNdLCBhcmd2KzMsIDApOworIAkJbWlub3IgPSBzdHJ0b3VsKGFyZ3ZbNF0sIGFyZ3YrNCwgMCk7CisgCQlpZiAobWFqb3IgPiA2NTUzNSB8fCBtaW5vciA+IDY1NTM1IHx8IGFyZ3ZbM11bMF0gfHwgYXJndls0XVswXSkKKyAJCQluciA9IDA7CisgCX0KKysKKyAJaWYgKGFyZ2MgIT0gbnIpCisgCQlnb3RvIHVzYWdlOworLQlpZiAoY2hlY2tfZnNfcmVhZF93cml0ZShhcmd2WzBdKSkKKy0JCXJldHVybjsKKy0JcmV0dmFsID0gZXh0MmZzX25ld19pbm9kZShjdXJyZW50X2ZzLCBjd2QsIDAxMDc1NSwgMCwgJm5ld2ZpbGUpOworLQlpZiAocmV0dmFsKSB7CisrCisrCXN0LnN0X3JkZXYgPSBtYWtlZGV2KG1ham9yLCBtaW5vcik7CisrCWlmICgocmV0dmFsID0gZG9fbWtub2RfaW50ZXJuYWwoY3dkLCBhcmd2WzFdLCAmc3QpKSkKKyAJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAwKTsKKy0JCXJldHVybjsKKy0JfQorLQlwcmludGYoIkFsbG9jYXRlZCBpbm9kZTogJXVcbiIsIG5ld2ZpbGUpOworLQlyZXR2YWwgPSBleHQyZnNfbGluayhjdXJyZW50X2ZzLCBjd2QsIGFyZ3ZbMV0sIG5ld2ZpbGUsIGZpbGV0eXBlKTsKKy0JaWYgKHJldHZhbCA9PSBFWFQyX0VUX0RJUl9OT19TUEFDRSkgeworLQkJcmV0dmFsID0gZXh0MmZzX2V4cGFuZF9kaXIoY3VycmVudF9mcywgY3dkKTsKKy0JCWlmIChyZXR2YWwpIHsKKy0JCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKy0JCQlyZXR1cm47CistCQl9CistCQlyZXR2YWwgPSBleHQyZnNfbGluayhjdXJyZW50X2ZzLCBjd2QsIGFyZ3ZbMV0sIG5ld2ZpbGUsCistCQkJCSAgICAgZmlsZXR5cGUpOworLQl9CistCWlmIChyZXR2YWwpIHsKKy0JCWNvbV9lcnIoYXJndlsxXSwgcmV0dmFsLCAwKTsKKy0JCXJldHVybjsKKy0JfQorLSAgICAgICAgaWYgKGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoY3VycmVudF9mcy0+aW5vZGVfbWFwLG5ld2ZpbGUpKQorLQkJY29tX2Vycihhcmd2WzBdLCAwLCAiV2FybmluZzogaW5vZGUgYWxyZWFkeSBzZXQiKTsKKy0JZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzMihjdXJyZW50X2ZzLCBuZXdmaWxlLCArMSwgMCk7CistCW1lbXNldCgmaW5vZGUsIDAsIHNpemVvZihpbm9kZSkpOworLQlpbm9kZS5pX21vZGUgPSBtb2RlOworLQlpbm9kZS5pX2F0aW1lID0gaW5vZGUuaV9jdGltZSA9IGlub2RlLmlfbXRpbWUgPQorLQkJY3VycmVudF9mcy0+bm93ID8gY3VycmVudF9mcy0+bm93IDogdGltZSgwKTsKKy0JaWYgKChtYWpvciA8IDI1NikgJiYgKG1pbm9yIDwgMjU2KSkgeworLQkJaW5vZGUuaV9ibG9ja1swXSA9IG1ham9yKjI1NittaW5vcjsKKy0JCWlub2RlLmlfYmxvY2tbMV0gPSAwOworLQl9IGVsc2UgeworLQkJaW5vZGUuaV9ibG9ja1swXSA9IDA7CistCQlpbm9kZS5pX2Jsb2NrWzFdID0gKG1pbm9yICYgMHhmZikgfCAobWFqb3IgPDwgOCkgfCAoKG1pbm9yICYgfjB4ZmYpIDw8IDEyKTsKKy0JfQorLQlpbm9kZS5pX2xpbmtzX2NvdW50ID0gMTsKKy0JaWYgKGRlYnVnZnNfd3JpdGVfbmV3X2lub2RlKG5ld2ZpbGUsICZpbm9kZSwgYXJndlswXSkpCistCQlyZXR1cm47CisgfQorIAorIHZvaWQgZG9fbWtkaXIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB7CistCWNoYXIJKmNwOworLQlleHQyX2lub190CXBhcmVudDsKKy0JY2hhcgkqbmFtZTsKKyAJZXJyY29kZV90IHJldHZhbDsKKyAKKyAJaWYgKGNvbW1vbl9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMiwgMiwgIm1rZGlyIiwKKyAJCQkJIjxmaWxlbmFtZT4iLCBDSEVDS19GU19SVykpCisgCQlyZXR1cm47CisgCistCWNwID0gc3RycmNocihhcmd2WzFdLCAnLycpOworLQlpZiAoY3ApIHsKKy0JCSpjcCA9IDA7CistCQlwYXJlbnQgPSBzdHJpbmdfdG9faW5vZGUoYXJndlsxXSk7CistCQlpZiAoIXBhcmVudCkgeworLQkJCWNvbV9lcnIoYXJndlsxXSwgRU5PRU5ULCAwKTsKKy0JCQlyZXR1cm47CistCQl9CistCQluYW1lID0gY3ArMTsKKy0JfSBlbHNlIHsKKy0JCXBhcmVudCA9IGN3ZDsKKy0JCW5hbWUgPSBhcmd2WzFdOworLQl9CistCistdHJ5X2FnYWluOgorLQlyZXR2YWwgPSBleHQyZnNfbWtkaXIoY3VycmVudF9mcywgcGFyZW50LCAwLCBuYW1lKTsKKy0JaWYgKHJldHZhbCA9PSBFWFQyX0VUX0RJUl9OT19TUEFDRSkgeworLQkJcmV0dmFsID0gZXh0MmZzX2V4cGFuZF9kaXIoY3VycmVudF9mcywgcGFyZW50KTsKKy0JCWlmIChyZXR2YWwpIHsKKy0JCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKy0JCQlyZXR1cm47CistCQl9CistCQlnb3RvIHRyeV9hZ2FpbjsKKy0JfQorLQlpZiAocmV0dmFsKSB7CistCQljb21fZXJyKCJleHQyZnNfbWtkaXIiLCByZXR2YWwsIDApOworLQkJcmV0dXJuOworLQl9CisrCWlmICgocmV0dmFsID0gZG9fbWtkaXJfaW50ZXJuYWwoY3dkLCBhcmd2WzFdLCBOVUxMKSkpCisrCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgMCk7CisgCisgfQorIAorQEAgLTIyNzAsNDQgKzIwMjcsMTQgQEAgdm9pZCBkb19wdW5jaChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAorIHZvaWQgZG9fc3ltbGluayhpbnQgYXJnYywgY2hhciAqYXJndltdKQorIHsKKy0JY2hhcgkJKmNwOworLQlleHQyX2lub190CXBhcmVudDsKKy0JY2hhcgkJKm5hbWUsICp0YXJnZXQ7CisgCWVycmNvZGVfdAlyZXR2YWw7CisgCisgCWlmIChjb21tb25fYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDMsIDMsICJzeW1saW5rIiwKKyAJCQkJIjxmaWxlbmFtZT4gPHRhcmdldD4iLCBDSEVDS19GU19SVykpCisgCQlyZXR1cm47CisgCistCWNwID0gc3RycmNocihhcmd2WzFdLCAnLycpOworLQlpZiAoY3ApIHsKKy0JCSpjcCA9IDA7CistCQlwYXJlbnQgPSBzdHJpbmdfdG9faW5vZGUoYXJndlsxXSk7CistCQlpZiAoIXBhcmVudCkgeworLQkJCWNvbV9lcnIoYXJndlsxXSwgRU5PRU5ULCAwKTsKKy0JCQlyZXR1cm47CistCQl9CistCQluYW1lID0gY3ArMTsKKy0JfSBlbHNlIHsKKy0JCXBhcmVudCA9IGN3ZDsKKy0JCW5hbWUgPSBhcmd2WzFdOworLQl9CistCXRhcmdldCA9IGFyZ3ZbMl07CistCistdHJ5X2FnYWluOgorLQlyZXR2YWwgPSBleHQyZnNfc3ltbGluayhjdXJyZW50X2ZzLCBwYXJlbnQsIDAsIG5hbWUsIHRhcmdldCk7CistCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9ESVJfTk9fU1BBQ0UpIHsKKy0JCXJldHZhbCA9IGV4dDJmc19leHBhbmRfZGlyKGN1cnJlbnRfZnMsIHBhcmVudCk7CistCQlpZiAocmV0dmFsKSB7CistCQkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJ3aGlsZSBleHBhbmRpbmcgZGlyZWN0b3J5Iik7CistCQkJcmV0dXJuOworLQkJfQorLQkJZ290byB0cnlfYWdhaW47CistCX0KKy0JaWYgKHJldHZhbCkgeworLQkJY29tX2VycigiZXh0MmZzX3N5bWxpbmsiLCByZXR2YWwsIDApOworLQkJcmV0dXJuOworLQl9CisrCWlmICgocmV0dmFsID0gZG9fc3ltbGlua19pbnRlcm5hbChjd2QsIGFyZ3ZbMV0sIGFyZ3ZbMl0pKSkKKysJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAwKTsKKyAKKyB9CisgCitkaWZmIC0tZ2l0IGEvZGVidWdmcy9kZWJ1Z2ZzLmggYi9kZWJ1Z2ZzL2RlYnVnZnMuaAoraW5kZXggNmI0ZjZlZi4uMmQ0NjRjMSAxMDA2NDQKKy0tLSBhL2RlYnVnZnMvZGVidWdmcy5oCisrKysgYi9kZWJ1Z2ZzL2RlYnVnZnMuaAorQEAgLTUsNiArNSw3IEBACisgI2luY2x1ZGUgInNzL3NzLmgiCisgI2luY2x1ZGUgImV4dDJmcy9leHQyX2ZzLmgiCisgI2luY2x1ZGUgImV4dDJmcy9leHQyZnMuaCIKKysjaW5jbHVkZSAiLi4vbWlzYy9jcmVhdGVfaW5vZGUuaCIKKyAKKyAjaWZkZWYgX19TVERDX18KKyAjZGVmaW5lIE5PQVJHUyB2b2lkCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAxMS1ta2UyZnMuOC5pbi11cGRhdGUtdGhlLW1hbnVhbC1mb3ItdGhlLWQtb3B0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDExLW1rZTJmcy44LmluLXVwZGF0ZS10aGUtbWFudWFsLWZvci10aGUtZC1vcHRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRkMmNiOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAxMS1ta2UyZnMuOC5pbi11cGRhdGUtdGhlLW1hbnVhbC1mb3ItdGhlLWQtb3B0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0Zyb20gODlmY2E0MzlmMWI1ODU5NWYyZjQyNDU5OGEyNzg2OWY4YzdiZDgxNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyMyBEZWMgMjAxMyAwNDo0MzoxOCAtMDUwMAorU3ViamVjdDogW1BBVENIIDExLzExXSBta2UyZnMuOC5pbjogdXBkYXRlIHRoZSBtYW51YWwgZm9yIHRoZSAtZCBvcHRpb24KKworVXBkYXRlIHRoZSBtYW51YWwgZm9yIHRoZSAtZCBvcHRpb24KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Jldmlld2VkLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1pc2MvbWtlMmZzLjguaW4gfCAgICA3ICsrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9taXNjL21rZTJmcy44LmluIGIvbWlzYy9ta2UyZnMuOC5pbgoraW5kZXggZmVhNTBkYS4uYjFjYTQ4NiAxMDA2NDQKKy0tLSBhL21pc2MvbWtlMmZzLjguaW4KKysrKyBiL21pc2MvbWtlMmZzLjguaW4KK0BAIC01Miw2ICs1MiwxMCBAQCBta2UyZnMgXC0gY3JlYXRlIGFuIGV4dDIvZXh0My9leHQ0IGZpbGVzeXN0ZW0KKyAuSSBudW1iZXItb2YtaW5vZGVzCisgXQorIFsKKysuQiBcLWQKKysuSSByb290LWRpcmVjdG9yeQorK10KKytbCisgLkIgXC1uCisgXQorIFsKK0BAIC01MDIsNiArNTA2LDkgQEAgdGhlCisgcmF0aW8pLiAgVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB0aGUgbnVtYmVyCisgb2YgZGVzaXJlZCBpbm9kZXMgZGlyZWN0bHkuCisgLlRQCisrLkJJIFwtZCAiIHJvb3QtZGlyZWN0b3J5IgorK0FkZCB0aGUgZmlsZXMgZnJvbSB0aGUgcm9vdC1kaXJlY3RvcnkgdG8gdGhlIGZpbGVzeXN0ZW0uCisrLlRQCisgLkJJIFwtbyAiIGNyZWF0b3Itb3MiCisgT3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAiY3JlYXRvciBvcGVyYXRpbmcgc3lzdGVtIiBmaWVsZCBvZiB0aGUKKyBmaWxlc3lzdGVtLiAgVGhlIGNyZWF0b3IgZmllbGQgaXMgc2V0IGJ5IGRlZmF1bHQgdG8gdGhlIG5hbWUgb2YgdGhlIE9TIHRoZQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMTItRml4LW11c2wtYnVpbGQtZmFpbHVyZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMTItRml4LW11c2wtYnVpbGQtZmFpbHVyZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI4MDA4ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAxMi1GaXgtbXVzbC1idWlsZC1mYWlsdXJlcy5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIGM2ZmY3ZmViOTAzOGQ2ZThhYWZmZTJlNjliMjA1YWQ1ZmEzM2RmMmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEJhcmtlciA8cGF1bEBwYXVsYmFya2VyLm1lLnVrPgorRGF0ZTogTW9uLCAxOCBBdWcgMjAxNCAyMTowMjo1NiArMDIwMAorU3ViamVjdDogW1BBVENIXSBGaXggbXVzbCBidWlsZCBmYWlsdXJlcworCitJbiBsaWIvZXh0MmZzL3VuaXhfaW8uYywgX191NjQgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBfX3VpbnQ2NF90LiBUaGlzIHR5cGUKK2lzIGd1YXJhbnRlZWQgYnkgdGhlIGUyZnNwcm9ncyBidWlsZCBzeXN0ZW0uCisoNzk1YzAyZGVmMzY4MWE5OWNjNzkyYTVlYmMxNjJkMDZmOGExZWViNykKKworSW4gbWlzYy9jcmVhdGVfaW5vZGUuYywgPGxpbWl0cy5oPiBpcyBuZWVkZWQgZm9yIHRoZSBkZWZpbml0aW9uIG9mIFBBVEhfTUFYLgorKGJiY2NjNmYzYzZhMTA2NzIxZmI2ZjFlZjRkZjZiYzMyYzc5ODYyMzUpCisKK0JvdGggb2YgdGhlc2UgZml4ZXMgaGF2ZSBiZWVuIG1hZGUgdXBzdHJlYW0gd2l0aCB0aGUgZ2l0IGNvbW1pdCBJRHMgZ2l2ZW4gYnV0Cit0aG9zZSBhcmUgbGFyZ2VyIGNvbW1pdHMgY29udGFpbmluZyBvdGhlciBjaGFuZ2VzIG5vdCBuZWVkZWQgaGVyZS4KKworU2lnbmVkLW9mZi1ieTogUGF1bCBCYXJrZXIgPHBhdWxAcGF1bGJhcmtlci5tZS51az4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorLS0tCisgbGliL2V4dDJmcy91bml4X2lvLmMgfCA2ICsrKy0tLQorIG1pc2MvY3JlYXRlX2lub2RlLmMgIHwgMSArCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZXh0MmZzL3VuaXhfaW8uYyBiL2xpYi9leHQyZnMvdW5peF9pby5jCitpbmRleCAxOWJlNjMwLi4wY2MwZjUyIDEwMDY0NAorLS0tIGEvbGliL2V4dDJmcy91bml4X2lvLmMKKysrKyBiL2xpYi9leHQyZnMvdW5peF9pby5jCitAQCAtOTMxLDEwICs5MzEsMTAgQEAgc3RhdGljIGVycmNvZGVfdCB1bml4X2Rpc2NhcmQoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2ssCisgCisgCWlmIChjaGFubmVsLT5mbGFncyAmIENIQU5ORUxfRkxBR1NfQkxPQ0tfREVWSUNFKSB7CisgI2lmZGVmIEJMS0RJU0NBUkQKKy0JCV9fdWludDY0X3QgcmFuZ2VbMl07CisrCQlfX3U2NCByYW5nZVsyXTsKKyAKKy0JCXJhbmdlWzBdID0gKF9fdWludDY0X3QpKGJsb2NrKSAqIGNoYW5uZWwtPmJsb2NrX3NpemU7CistCQlyYW5nZVsxXSA9IChfX3VpbnQ2NF90KShjb3VudCkgKiBjaGFubmVsLT5ibG9ja19zaXplOworKwkJcmFuZ2VbMF0gPSAoX191NjQpKGJsb2NrKSAqIGNoYW5uZWwtPmJsb2NrX3NpemU7CisrCQlyYW5nZVsxXSA9IChfX3U2NCkoY291bnQpICogY2hhbm5lbC0+YmxvY2tfc2l6ZTsKKyAKKyAJCXJldCA9IGlvY3RsKGRhdGEtPmRldiwgQkxLRElTQ0FSRCwgJnJhbmdlKTsKKyAjZWxzZQorZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmMgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitpbmRleCA2ZDhkZTA0Li5mY2VjNWFhIDEwMDY0NAorLS0tIGEvbWlzYy9jcmVhdGVfaW5vZGUuYworKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworQEAgLTEsNCArMSw1IEBACisgI2luY2x1ZGUgImNyZWF0ZV9pbm9kZS5oIgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyAKKyAjaWYgX19TVERDX1ZFUlNJT05fXyA8IDE5OTkwMUwKKyAjIGlmIF9fR05VQ19fID49IDIKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9DVkUtMjAxNS0wMjQ3LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9DVkUtMjAxNS0wMjQ3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZTY3YzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL0NWRS0yMDE1LTAyNDcucGF0Y2gKQEAgLTAsMCArMSw1OCBAQAorRnJvbSBmNjZlNmNlNDQ0NjczOGMyYzdmNDNkNDE5ODhhM2ViNzMzNDdlMmY1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KK0RhdGU6IFNhdCwgOSBBdWcgMjAxNCAxMjoyNDo1NCAtMDQwMAorU3ViamVjdDogbGliZXh0MmZzOiBhdm9pZCBidWZmZXIgb3ZlcmZsb3cgaWYgc19maXJzdF9tZXRhX2JnIGlzIHRvbyBiaWcKKworSWYgc19maXJzdF9tZXRhX2JnIGlzIGdyZWF0ZXIgdGhhbiB0aGUgb2YgbnVtYmVyIGJsb2NrIGdyb3VwCitkZXNjcmlwdG9yIGJsb2NrcywgdGhlbiByZWFkaW5nIG9yIHdyaXRpbmcgdGhlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzCit3aWxsIGVuZCB1cCBvdmVycnVuaW5nIHRoZSBtZW1vcnkgYnVmZmVyIGFsbG9jYXRlZCBmb3IgdGhlCitkZXNjcmlwdG9ycy4gIEZpeCB0aGlzIGJ5IGxpbWl0aW5nIGZpcnN0X21ldGFfYmcgdG8gbm8gbW9yZSB0aGFuCitmcy0+ZGVzY19ibG9ja3MuICBUaGlzIGRvZXNuJ3QgY29ycmVjdCB0aGUgYmFkIHNfZmlyc3RfbWV0YV9iZyB2YWx1ZSwKK2J1dCBpdCBhdm9pZHMgY2F1c2luZyB0aGUgZTJmc3Byb2dzIHVzZXJzcGFjZSBwcm9ncmFtcyBmcm9tCitwb3RlbnRpYWxseSBjcmFzaGluZy4KKworRml4ZXMgQ1ZFLTIwMTUtMDI0NworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgorU2lnbmVkLW9mZi1ieTogU29uYSBTYXJtYWRpIDxzb25hLnNhcm1hZGlAZW5lYS5jb20+CisKK2RpZmYgLS1naXQgYS9saWIvZXh0MmZzL2Nsb3NlZnMuYyBiL2xpYi9leHQyZnMvY2xvc2Vmcy5jCitpbmRleCA0NTk5ZWVmLi4xZjk5MTEzIDEwMDY0NAorLS0tIGEvbGliL2V4dDJmcy9jbG9zZWZzLmMKKysrKyBiL2xpYi9leHQyZnMvY2xvc2Vmcy5jCitAQCAtMzQ0LDkgKzM0NCwxMSBAQCBlcnJjb2RlX3QgZXh0MmZzX2ZsdXNoMihleHQyX2ZpbHN5cyBmcywgaW50IGZsYWdzKQorIAkgKiBzdXBlcmJsb2NrcyBhbmQgZ3JvdXAgZGVzY3JpcHRvcnMuCisgCSAqLworIAlncm91cF9wdHIgPSAoY2hhciAqKSBncm91cF9zaGFkb3c7CistCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKQorKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykgeworIAkJb2xkX2Rlc2NfYmxvY2tzID0gZnMtPnN1cGVyLT5zX2ZpcnN0X21ldGFfYmc7CistCWVsc2UKKysJCWlmIChvbGRfZGVzY19ibG9ja3MgPiBmcy0+c3VwZXItPnNfZmlyc3RfbWV0YV9iZykKKysJCQlvbGRfZGVzY19ibG9ja3MgPSBmcy0+ZGVzY19ibG9ja3M7CisrCX0gZWxzZQorIAkJb2xkX2Rlc2NfYmxvY2tzID0gZnMtPmRlc2NfYmxvY2tzOworIAorIAlleHQyZnNfbnVtZXJpY19wcm9ncmVzc19pbml0KGZzLCAmcHJvZ3Jlc3MsIE5VTEwsCitkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9vcGVuZnMuYyBiL2xpYi9leHQyZnMvb3BlbmZzLmMKK2luZGV4IGExYTM1MTcuLmJhNTAxZTYgMTAwNjQ0CistLS0gYS9saWIvZXh0MmZzL29wZW5mcy5jCisrKysgYi9saWIvZXh0MmZzL29wZW5mcy5jCitAQCAtMzc4LDkgKzM3OCwxMSBAQCBlcnJjb2RlX3QgZXh0MmZzX29wZW4yKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmlvX29wdGlvbnMsCisgI2lmZGVmIFdPUkRTX0JJR0VORElBTgorIAlncm91cHNfcGVyX2Jsb2NrID0gRVhUMl9ERVNDX1BFUl9CTE9DSyhmcy0+c3VwZXIpOworICNlbmRpZgorLQlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykKKysJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpIHsKKyAJCWZpcnN0X21ldGFfYmcgPSBmcy0+c3VwZXItPnNfZmlyc3RfbWV0YV9iZzsKKy0JZWxzZQorKwkJaWYgKGZpcnN0X21ldGFfYmcgPiBmcy0+ZGVzY19ibG9ja3MpCisrCQkJZmlyc3RfbWV0YV9iZyA9IGZzLT5kZXNjX2Jsb2NrczsKKysJfSBlbHNlCisgCQlmaXJzdF9tZXRhX2JnID0gZnMtPmRlc2NfYmxvY2tzOworIAlpZiAoZmlyc3RfbWV0YV9iZykgeworIAkJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2Jsayhmcy0+aW8sIGdyb3VwX2Jsb2NrICsKKy0tIAorY2dpdCB2MC4xMC4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvYWNpbmNsdWRlLm00IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9hY2luY2x1ZGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBiZDdkYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvYWNpbmNsdWRlLm00CkBAIC0wLDAgKzEsMTM1IEBACisjIEV4dHJhY3RlZCBmcm9tIHRoZSBwYWNrYWdlJ3Mgc2hpcHBlZCBhY2xvY2FsLm00LiBDdXN0b20gbWFjcm9zIHNob3VsZCBiZSBpbgorIyBhY2luY2x1ZGUubTQgc28gcnVubmluZyBhY2xvY2FsIGRvZXNuJ3QgYmxvdyB0aGVtIGF3YXkuCisjCisjIFNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKKyMgZnJvbSBodHRwOi8vYXV0b2NvbmYtYXJjaGl2ZS5jcnlwLnRvL2F4X3Rscy5odG1sCisjCisjIFRoaXMgd2FzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjoKKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHJlc3BlY3RpdmUgQXV0b2NvbmYgTWFjcm8ncyBjb3B5cmlnaHQKKyMgb3duZXIgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IHRoZQorIyBjb25maWd1cmUgc2NyaXB0cyB0aGF0IGFyZSB0aGUgb3V0cHV0IG9mIEF1dG9jb25mIHdoZW4gcHJvY2Vzc2luZworIyB0aGUgTWFjcm8uIFlvdSBuZWVkIG5vdCBmb2xsb3cgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSB3aGVuIHVzaW5nIG9yIGRpc3RyaWJ1dGluZyBzdWNoIHNjcmlwdHMsIGV2ZW4gdGhvdWdoCisjIHBvcnRpb25zIG9mIHRoZSB0ZXh0IG9mIHRoZSBNYWNybyBhcHBlYXIgaW4gdGhlbS4gVGhlIEdOVSBHZW5lcmFsCisjIFB1YmxpYyBMaWNlbnNlIChHUEwpIGRvZXMgZ292ZXJuIGFsbCBvdGhlciB1c2Ugb2YgdGhlIG1hdGVyaWFsIHRoYXQKKyMgY29uc3RpdHV0ZXMgdGhlIEF1dG9jb25mIE1hY3JvLgorIworIyBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwgYXBwbGllcyB0byB2ZXJzaW9ucyBvZiB0aGUKKyMgQXV0b2NvbmYgTWFjcm8gcmVsZWFzZWQgYnkgdGhlIEF1dG9jb25mIE1hY3JvIEFyY2hpdmUuIFdoZW4geW91IG1ha2UKKyMgYW5kIGRpc3RyaWJ1dGUgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBBdXRvY29uZiBNYWNybywgeW91IG1heQorIyBleHRlbmQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMIHRvIGFwcGx5IHRvIHlvdXIgbW9kaWZpZWQKKyMgdmVyc2lvbiBhcyB3ZWxsLgorIworQUNfREVGVU4oW0FYX1RMU10sIFsKKyAgQUNfTVNHX0NIRUNLSU5HKGZvciB0aHJlYWQgbG9jYWwgc3RvcmFnZSAoVExTKSBjbGFzcykKKyAgQUNfQ0FDSEVfVkFMKGFjX2N2X3RscywgWworICAgIGF4X3Rsc19rZXl3b3Jkcz0iX190aHJlYWQgX19kZWNsc3BlYyh0aHJlYWQpIG5vbmUiCisgICAgZm9yIGF4X3Rsc19rZXl3b3JkIGluICRheF90bHNfa2V5d29yZHM7IGRvCisgICAgICAgY2FzZSAkYXhfdGxzX2tleXdvcmQgaW4KKyAgICAgICAgICBub25lKSBhY19jdl90bHM9bm9uZSA7IGJyZWFrIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgICBBQ19UUllfQ09NUElMRSgKKyAgICAgICAgICAgICAgICBbI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZAorICAgICAgICAgICAgICAgICBmb28odm9pZCkgeworICAgICAgICAgICAgICAgICBzdGF0aWMgXSAkYXhfdGxzX2tleXdvcmQgWyBpbnQgYmFyOworICAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgICAgICB9XSwKKyAgICAgICAgICAgICAgICAgW10sCisgICAgICAgICAgICAgICAgIFthY19jdl90bHM9JGF4X3Rsc19rZXl3b3JkIDsgYnJlYWtdLAorICAgICAgICAgICAgICAgICBhY19jdl90bHM9bm9uZQorICAgICAgICAgICAgICkKKyAgICAgICAgICBlc2FjCisgICAgZG9uZQorXSkKKworICBpZiB0ZXN0ICIkYWNfY3ZfdGxzIiAhPSAibm9uZSI7IHRoZW4KKyAgICBkbmwgQUNfREVGSU5FKFtUTFNdLCBbXSwgW0lmIHRoZSBjb21waWxlciBzdXBwb3J0cyBhIFRMUyBzdG9yYWdlIGNsYXNzIGRlZmluZSBpdCB0byB0aGF0IGhlcmVdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChbVExTXSwgJGFjX2N2X3RscywgW0lmIHRoZSBjb21waWxlciBzdXBwb3J0cyBhIFRMUyBzdG9yYWdlIGNsYXNzIGRlZmluZSBpdCB0byB0aGF0IGhlcmVdKQorICBmaQorICBBQ19NU0dfUkVTVUxUKCRhY19jdl90bHMpCitdKQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAgICAgICAgIGh0dHA6Ly93d3cubm9uZ251Lm9yZy9hdXRvY29uZi1hcmNoaXZlL2NoZWNrX2dudV9tYWtlLmh0bWwKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIFNZTk9QU0lTCisjCisjICAgQ0hFQ0tfR05VX01BS0UoKQorIworIyBERVNDUklQVElPTgorIworIyAgIFRoaXMgbWFjcm8gc2VhcmNoZXMgZm9yIGEgR05VIHZlcnNpb24gb2YgbWFrZS4gSWYgYSBtYXRjaCBpcyBmb3VuZCwgdGhlCisjICAgbWFrZWZpbGUgdmFyaWFibGUgYGlmR05VbWFrZScgaXMgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcsIG90aGVyd2lzZSBpdAorIyAgIGlzIHNldCB0byAiIyIuIFRoaXMgaXMgdXNlZnVsIGZvciBpbmNsdWRpbmcgYSBzcGVjaWFsIGZlYXR1cmVzIGluIGEKKyMgICBNYWtlZmlsZSwgd2hpY2ggY2Fubm90IGJlIGhhbmRsZWQgYnkgb3RoZXIgdmVyc2lvbnMgb2YgbWFrZS4gVGhlCisjICAgdmFyaWFibGUgX2N2X2dudV9tYWtlX2NvbW1hbmQgaXMgc2V0IHRvIHRoZSBjb21tYW5kIHRvIGludm9rZSBHTlUgbWFrZQorIyAgIGlmIGl0IGV4aXN0cywgdGhlIGVtcHR5IHN0cmluZyBvdGhlcndpc2UuCisjCisjICAgSGVyZSBpcyBhbiBleGFtcGxlIG9mIGl0cyB1c2U6CisjCisjICAgTWFrZWZpbGUuaW4gbWlnaHQgY29udGFpbjoKKyMKKyMgICAgICAgIyBBIGZhaWxzYWZlIHdheSBvZiBwdXR0aW5nIGEgZGVwZW5kZW5jeSBydWxlIGludG8gYSBtYWtlZmlsZQorIyAgICAgICAkKERFUEVORCk6CisjICAgICAgICAgICAgICAgJChDQykgLU1NICQoc3JjZGlyKS8qLmMgPiAkKERFUEVORCkKKyMKKyMgICAgICAgQGlmR05VbWFrZUAgaWZlcSAoJChERVBFTkQpLCQod2lsZGNhcmQgJChERVBFTkQpKSkKKyMgICAgICAgQGlmR05VbWFrZUAgaW5jbHVkZSAkKERFUEVORCkKKyMgICAgICAgQGlmR05VbWFrZUAgZW5kaWYKKyMKKyMgICBUaGVuIGNvbmZpZ3VyZS5pbiB3b3VsZCBub3JtYWxseSBjb250YWluOgorIworIyAgICAgICBDSEVDS19HTlVfTUFLRSgpCisjICAgICAgIEFDX09VVFBVVChNYWtlZmlsZSkKKyMKKyMgICBUaGVuIHBlcmhhcHMgdG8gY2F1c2UgZ251IG1ha2UgdG8gb3ZlcnJpZGUgYW55IG90aGVyIG1ha2UsIHdlIGNvdWxkIGRvCisjICAgc29tZXRoaW5nIGxpa2UgdGhpcyAobm90ZSB0aGF0IEdOVSBtYWtlIGFsd2F5cyBsb29rcyBmb3IgR05VbWFrZWZpbGUKKyMgICBmaXJzdCk6CisjCisjICAgICAgIGlmICAhIHRlc3QgeCRfY3ZfZ251X21ha2VfY29tbWFuZCA9IHggOyB0aGVuCisjICAgICAgICAgICAgICAgbXYgTWFrZWZpbGUgR05VbWFrZWZpbGUKKyMgICAgICAgICAgICAgICBlY2hvIC5ERUZBVUxUOiA+IE1ha2VmaWxlIDsKKyMgICAgICAgICAgICAgICBlY2hvIFwgICRfY3ZfZ251X21ha2VfY29tbWFuZCBcJEAgPj4gTWFrZWZpbGU7CisjICAgICAgIGZpCisjCisjICAgVGhlbiwgaWYgYW55ICh3ZWxsIGFsbW9zdCBhbnkpIG90aGVyIG1ha2UgaXMgY2FsbGVkLCBhbmQgR05VIG1ha2UgYWxzbworIyAgIGV4aXN0cywgdGhlbiB0aGUgb3RoZXIgbWFrZSB3cmFwcyB0aGUgR05VIG1ha2UuCisjCisjIExJQ0VOU0UKKyMKKyMgICBDb3B5cmlnaHQgKGMpIDIwMDggSm9obiBEYXJyaW5ndG9uIDxqLmRhcnJpbmd0b25AZWx2aXMubXVyZG9jaC5lZHUuYXU+CisjCisjICAgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCisjICAgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQgbm90aWNlCisjICAgYW5kIHRoaXMgbm90aWNlIGFyZSBwcmVzZXJ2ZWQuCisjCisjIE5vdGU6IE1vZGlmaWVkIGJ5IFRlZCBUcydvIHRvIGFkZCBAaWZOb3RHTlVNYWtlQAorCitBQ19ERUZVTigKKyAgICAgICAgW0NIRUNLX0dOVV9NQUtFXSwgWyBBQ19DQUNIRV9DSEVDSyggZm9yIEdOVSBtYWtlLF9jdl9nbnVfbWFrZV9jb21tYW5kLAorICAgICAgICAgICAgICAgIF9jdl9nbnVfbWFrZV9jb21tYW5kPScnIDsKK2RubCBTZWFyY2ggYWxsIHRoZSBjb21tb24gbmFtZXMgZm9yIEdOVSBtYWtlCisgICAgICAgICAgICAgICAgZm9yIGEgaW4gIiRNQUtFIiBtYWtlIGdtYWtlIGdudW1ha2UgOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGEiIDsgdGhlbiBjb250aW51ZSA7IGZpIDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIHNoIC1jICIkYSAtLXZlcnNpb24iIDI+IC9kZXYvbnVsbCB8IGdyZXAgR05VICAyPiYxID4gL2Rldi9udWxsICkgOyAgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3ZfZ251X21ha2VfY29tbWFuZD0kYSA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkb25lIDsKKyAgICAgICAgKSA7CitkbmwgSWYgdGhlcmUgd2FzIGEgR05VIHZlcnNpb24sIHRoZW4gc2V0IEBpZkdOVW1ha2VAIHRvIHRoZSBlbXB0eSBzdHJpbmcsICcjJyBvdGhlcndpc2UKKyAgICAgICAgaWYgdGVzdCAgIngkX2N2X2dudV9tYWtlX2NvbW1hbmQiICE9ICJ4IiAgOyB0aGVuCisgICAgICAgICAgICAgICAgaWZHTlVtYWtlPScnIDsKKyAgICAgICAgICAgICAgICBpZk5vdEdOVW1ha2U9JyMnIDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmR05VbWFrZT0nIycgOworICAgICAgICAgICAgICAgIGlmTm90R05VbWFrZT0nJyA7CisgICAgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVCgiTm90IGZvdW5kIik7CisgICAgICAgIGZpCisgICAgICAgIEFDX1NVQlNUKGlmR05VbWFrZSkKKyAgICAgICAgQUNfU1VCU1QoaWZOb3RHTlVtYWtlKQorXSApCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL2NhY2hlX2lub2RlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9jYWNoZV9pbm9kZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWVmOGU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9jYWNoZV9pbm9kZS5wYXRjaApAQCAtMCwwICsxLDUyIEBACitUaGUgY29tbWVudCB0byB0aGlzIGZ1bmN0aW9uIHNheXM6CisKKyIiIgorICAqIFN0dXBpZCBhbGdvcml0aG0gLS0tIHdlIG5vdyBqdXN0IHNlYXJjaCBmb3J3YXJkIHN0YXJ0aW5nIGZyb20gdGhlCisgICogZ29hbC4gIFNob3VsZCBwdXQgaW4gYSBzbWFydGVyIG9uZSBzb21lZGF5Li4uLgorIiIiCisKK1RoaXMgYWRkcyBpbiBhIHJhdGhlciBoYWNreSBhbGdvcnRoaW0gd2hpY2ggc3RhcnRzIHdoZXJlIHdlIGZpbmlzaGVkCitzZWFyY2hpbmcgcHJldmlvdXNseSB1c2luZyBhIHN0YXRpYyB2YXJpYWJsZSByYXRoZXIgdGhhbiBzdGFydGluZyAKK2Zyb20gc2NyYXRjaCBpZiBhIGhpbnQgaXNuJ3QgcHJvdmlkZWQuCisKK1RoaXMgd2FzIGFmdGVyIG5vdGljaW5nIHRoYXQgbWtmcy5leHQ0IC1GIFggLWQgWSB3YXMgc3BlbmRpbmcgKmxvdHMqCitvZiB0aW1lIGluIGV4dDJmc19uZXdfYmxvY2syIGNhbGxlZCBmcm9tIGV4dDJmc19ibWFwIGZyb20gZXh0MmZzX2ZpbGVfd3JpdGUoKS4KKworTnVtYmVycyB3aXNlLCB0aGlzIHRvb2sgYSBjb3JlLWltYWdlLXNhdG8tc2RrIG1rZnMgdGltZSBmcm9tIG92ZXIgCis4IG1pbnV0ZXMgdG8gYXJvdW5kIDM1IHNlY29uZHMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitSUCAyMDE1LzAyLzIwCisKK0luZGV4OiBlMmZzcHJvZ3MtMS40Mi45L2xpYi9leHQyZnMvYWxsb2MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGUyZnNwcm9ncy0xLjQyLjkub3JpZy9saWIvZXh0MmZzL2FsbG9jLmMKKysrKyBlMmZzcHJvZ3MtMS40Mi45L2xpYi9leHQyZnMvYWxsb2MuYworQEAgLTE2MCw2ICsxNjAsOCBAQCBlcnJjb2RlX3QgZXh0MmZzX25ld19pbm9kZShleHQyX2ZpbHN5cyBmCisgCXJldHVybiAwOworIH0KKyAKKytzdGF0aWMgYmxrNjRfdCBsYXN0X2dvYWwgPSAwOworKworIC8qCisgICogU3R1cGlkIGFsZ29yaXRobSAtLS0gd2Ugbm93IGp1c3Qgc2VhcmNoIGZvcndhcmQgc3RhcnRpbmcgZnJvbSB0aGUKKyAgKiBnb2FsLiAgU2hvdWxkIHB1dCBpbiBhIHNtYXJ0ZXIgb25lIHNvbWVkYXkuLi4uCitAQCAtMTcwLDYgKzE3Miw5IEBAIGVycmNvZGVfdCBleHQyZnNfbmV3X2Jsb2NrMihleHQyX2ZpbHN5cworIAlibGs2NF90CWk7CisgCWludAljX3JhdGlvOworIAorKyAgICAgICAgaWYgKCFnb2FsKQorKyAgICAgICAgICAgIGdvYWwgPSBsYXN0X2dvYWw7CisrCisgCUVYVDJfQ0hFQ0tfTUFHSUMoZnMsIEVYVDJfRVRfTUFHSUNfRVhUMkZTX0ZJTFNZUyk7CisgCisgCWlmICghbWFwKQorQEAgLTE5NCw2ICsxOTksNyBAQCBlcnJjb2RlX3QgZXh0MmZzX25ld19ibG9jazIoZXh0Ml9maWxzeXMKKyAKKyAJCWlmICghZXh0MmZzX2Zhc3RfdGVzdF9ibG9ja19iaXRtYXAyKG1hcCwgaSkpIHsKKyAJCQkqcmV0ID0gaTsKKysJCQlsYXN0X2dvYWwgPSBpOworIAkJCXJldHVybiAwOworIAkJfQorIAkJaSA9IChpICsgY19yYXRpbykgJiB+KGNfcmF0aW8gLSAxKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvZml4LWljYWNoZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvZml4LWljYWNoZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzhjYzRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9maXgtaWNhY2hlLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK2lub2RlLmM6IG9ubHkgdXBkYXRlIHRoZSBpY2FjaGUgZm9yIGV4dDJfaW5vZGUKKworV2Ugb25seSByZWFkIHRoZSBjYWNoZSB3aGVuOgorCitidWZzaXplID09IHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZSkKKwordGhlbiB3ZSBzaG91bGQgb25seSB1cGRhdGUgdGhlIGNhY2hlIGluIHRoZSBzYW1lIGNvbmRpdGlvbiwgb3RoZXJ3aXNlCit0aGVyZSB3b3VsZCBiZSBlcnJvcnMsIGZvciBleGFtcGxlOgorCitjYWNoZVswXTogY2FjaGVkIGlubyAxNCB3aGVuIGJ1ZnNpemUgPSAxMjggYnkgZXh0MmZzX3dyaXRlX2lub2RlX2Z1bGwoKQorY2FjaGVbMV06IGNhY2hlZCBpbm8gMTQgd2hlbiBidWZzaXplID0gMTU2IGJ5IGV4dDJmc19yZWFkX2lub2RlX2Z1bGwoKQorCitUaGVuIHVwZGF0ZSB0aGUgY2FjaGU6CitjYWNoZVswXTogY2FjaGVkIGlubyAxNSB3aGVuIGJ1ZnNpemUgPSAxNTYgYnkgZXh0MmZzX3JlYWRfaW5vZGVfZnVsbCgpCisKK1RoZW4gdGhlIGlubyAxNCB3b3VsZCBoaXQgdGhlIGNhY2hlWzFdIHdoZW4gYnVmc2l6ZSA9IDEyOCAoYnV0IGl0IHdhcworY2FjaGVkIGJ5IGJ1ZnNpemUgPSAxNTYpLCBzbyB0aGVyZSB3b3VsZCBiZSBlcnJvcnMuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbGliL2V4dDJmcy9pbm9kZS5jIHwgMjAgKysrKysrKysrKysrLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvaW5vZGUuYyBiL2xpYi9leHQyZnMvaW5vZGUuYworLS0tIGEvbGliL2V4dDJmcy9pbm9kZS5jCisrKysgYi9saWIvZXh0MmZzL2lub2RlLmMKK0BAIC02MTIsMTAgKzYxMiwxMiBAQCBlcnJjb2RlX3QgZXh0MmZzX3JlYWRfaW5vZGVfZnVsbChleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisgI2VuZGlmCisgCisgCS8qIFVwZGF0ZSB0aGUgaW5vZGUgY2FjaGUgKi8KKy0JZnMtPmljYWNoZS0+Y2FjaGVfbGFzdCA9IChmcy0+aWNhY2hlLT5jYWNoZV9sYXN0ICsgMSkgJQorLQkJZnMtPmljYWNoZS0+Y2FjaGVfc2l6ZTsKKy0JZnMtPmljYWNoZS0+Y2FjaGVbZnMtPmljYWNoZS0+Y2FjaGVfbGFzdF0uaW5vID0gaW5vOworLQlmcy0+aWNhY2hlLT5jYWNoZVtmcy0+aWNhY2hlLT5jYWNoZV9sYXN0XS5pbm9kZSA9ICppbm9kZTsKKysJaWYgKGJ1ZnNpemUgPT0gc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKSkgeworKwkJZnMtPmljYWNoZS0+Y2FjaGVfbGFzdCA9IChmcy0+aWNhY2hlLT5jYWNoZV9sYXN0ICsgMSkgJQorKwkJCWZzLT5pY2FjaGUtPmNhY2hlX3NpemU7CisrCQlmcy0+aWNhY2hlLT5jYWNoZVtmcy0+aWNhY2hlLT5jYWNoZV9sYXN0XS5pbm8gPSBpbm87CisrCQlmcy0+aWNhY2hlLT5jYWNoZVtmcy0+aWNhY2hlLT5jYWNoZV9sYXN0XS5pbm9kZSA9ICppbm9kZTsKKysJfQorIAorIAlyZXR1cm4gMDsKKyB9CitAQCAtNjQ4LDEwICs2NTAsMTIgQEAgZXJyY29kZV90IGV4dDJmc193cml0ZV9pbm9kZV9mdWxsKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKyAKKyAJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSBpbm9kZSBjYWNoZSBuZWVkcyB0byBiZSB1cGRhdGVkICovCisgCWlmIChmcy0+aWNhY2hlKSB7CistCQlmb3IgKGk9MDsgaSA8IGZzLT5pY2FjaGUtPmNhY2hlX3NpemU7IGkrKykgeworLQkJCWlmIChmcy0+aWNhY2hlLT5jYWNoZVtpXS5pbm8gPT0gaW5vKSB7CistCQkJCWZzLT5pY2FjaGUtPmNhY2hlW2ldLmlub2RlID0gKmlub2RlOworLQkJCQlicmVhazsKKysJCWlmIChidWZzaXplID09IHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZSkpIHsKKysJCQlmb3IgKGk9MDsgaSA8IGZzLT5pY2FjaGUtPmNhY2hlX3NpemU7IGkrKykgeworKwkJCQlpZiAoZnMtPmljYWNoZS0+Y2FjaGVbaV0uaW5vID09IGlubykgeworKwkJCQkJZnMtPmljYWNoZS0+Y2FjaGVbaV0uaW5vZGUgPSAqaW5vZGU7CisrCQkJCQlicmVhazsKKysJCQkJfQorIAkJCX0KKyAJCX0KKyAJfSBlbHNlIHsKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL21pc2MtbWtlMmZzLmMtcmV0dXJuLWVycm9yLXdoZW4tZmFpbGVkLXRvLXBvcHVsYXRlLWZzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9taXNjLW1rZTJmcy5jLXJldHVybi1lcnJvci13aGVuLWZhaWxlZC10by1wb3B1bGF0ZS1mcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmEwY2UwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9taXNjLW1rZTJmcy5jLXJldHVybi1lcnJvci13aGVuLWZhaWxlZC10by1wb3B1bGF0ZS1mcy5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIGU0ZmZkNmZlOTc1ODg4ZDMwNmI1ZjcwMGJhNTRhZjE4YjU5ZjY3NTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMjAgTWFyIDIwMTQgMTE6MTA6MjEgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gbWlzYy9ta2UyZnMuYzogcmV0dXJuIGVycm9yIHdoZW4gZmFpbGVkIHRvIHBvcHVsYXRlIGZpbGVzeXN0ZW0KKworV2UgbmVlZCByZXR1cm4gcmV0dmFsIHdoZW4gIm1rZTJmcyAtZCIgZmFpbGVkLCBvdGhlcndpc2UgdGhlICIkPyIgd291bGQKK2JlIDAgd2hpY2ggaXMgbWlzbGVhZGluZy4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBtaXNjL21rZTJmcy5jIHwgNyArKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL21pc2MvbWtlMmZzLmMgYi9taXNjL21rZTJmcy5jCitpbmRleCBhNjNmMGI3Li44NDYxOTBlIDEwMDY0NAorLS0tIGEvbWlzYy9ta2UyZnMuYworKysrIGIvbWlzYy9ta2UyZnMuYworQEAgLTI3NDUsMTAgKzI3NDUsMTEgQEAgbm9fam91cm5hbDoKKyAJCWN1cnJlbnRfZnMgPSBmczsKKyAJCXJvb3QgPSBFWFQyX1JPT1RfSU5POworIAkJcmV0dmFsID0gcG9wdWxhdGVfZnMocm9vdCwgcm9vdF9kaXIpOworLQkJaWYgKHJldHZhbCkKKysJCWlmIChyZXR2YWwpIHsKKyAJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwKKy0JCQkJXygiXG5FcnJvciB3aGlsZSBwb3B1bGF0aW5nIGZpbGUgc3lzdGVtIikpOworLQkJZWxzZSBpZiAoIXF1aWV0KQorKwkJCQlfKCJcbkVycm9yIHdoaWxlIHBvcHVsYXRpbmcgZmlsZSBzeXN0ZW1cbiIpKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfSBlbHNlIGlmICghcXVpZXQpCisgCQkJcHJpbnRmKCIlcyIsIF8oImRvbmVcbiIpKTsKKyAJfQorIAorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvbWtkaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL21rZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhN2EyOTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL21rZGlyLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWVpIExlaSA8bGVpLm1laUBpbnRlbC5jb20+CisKK0luZGV4OiBlMmZzcHJvZ3MtMS40MS41L3BvL01ha2VmaWxlLmluLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZTJmc3Byb2dzLTEuNDEuNS5vcmlnL3BvL01ha2VmaWxlLmluLmluCTIwMDktMDItMTQgMTM6NDk6MDguMDAwMDAwMDAwICswMDAwCisrKysgZTJmc3Byb2dzLTEuNDEuNS9wby9NYWtlZmlsZS5pbi5pbgkyMDA5LTA4LTE5IDE3OjUyOjMxLjAwMDAwMDAwMCArMDEwMAorQEAgLTMwLDcgKzMwLDcgQEAKKyBJTlNUQUxMID0gQElOU1RBTExACisgSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKKyBNS0lOU1RBTExESVJTID0gQE1LSU5TVEFMTERJUlNACistbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQoTUtJTlNUQUxMRElSUykKKytta2luc3RhbGxkaXJzID0gJChNS0lOU1RBTExESVJTKQorIAorIEdNU0dGTVQgPSBAR01TR0ZNVEAKKyBNU0dGTVQgPSBATVNHRk1UQAorSW5kZXg6IGUyZnNwcm9ncy0xLjQxLjUvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZTJmc3Byb2dzLTEuNDEuNS5vcmlnL2NvbmZpZ3VyZS5pbgkyMDA5LTA4LTE5IDE3OjUzOjUwLjAwMDAwMDAwMCArMDEwMAorKysrIGUyZnNwcm9ncy0xLjQxLjUvY29uZmlndXJlLmluCTIwMDktMDgtMTkgMTc6NDg6MzguMDAwMDAwMDAwICswMTAwCitAQCAtOTcwLDYgKzk3MCw4IEBACisgZmkKKyBBQ19TVUJTVChCVUlMRF9DRkxBR1MpCisgQUNfU1VCU1QoQlVJTERfTERGTEFHUykKKytNS0lOU1RBTExESVJTPSJta2RpciAtcCIKKytBQ19TVUJTVChNS0lOU1RBTExESVJTKQorIGRubAorIGRubCBNYWtlIG91ciBvdXRwdXQgZmlsZXMsIGJlaW5nIHN1cmUgdGhhdCB3ZSBjcmVhdGUgdGhlIHNvbWUgbWlzY2VsbGFuZW91cyAKKyBkbmwgZGlyZWN0b3JpZXMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvcHRlc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3B0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YTUzZTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3B0ZXN0LnBhdGNoCkBAIC0wLDAgKzEsNjYgQEAKK0luZGV4OiBlMmZzcHJvZ3MtMS40Mi45L3Rlc3RzL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZTJmc3Byb2dzLTEuNDIuOS5vcmlnL3Rlc3RzL01ha2VmaWxlLmluCisrKysgZTJmc3Byb2dzLTEuNDIuOS90ZXN0cy9NYWtlZmlsZS5pbgorQEAgLTE4LDcgKzE4LDcgQEAgdGVzdF9vbmU6ICQoc3JjZGlyKS90ZXN0X29uZS5pbiBNYWtlZmlsZQorIAlAZWNobyAiIyEvYmluL3NoIiA+IHRlc3Rfb25lCisgQEhUUkVFX0NNVEAJQGVjaG8gIkhUUkVFPXkiID4+IHRlc3Rfb25lCisgQFFVT1RBX0NNVEAJQGVjaG8gIlFVT1RBPXkiID4+IHRlc3Rfb25lCistCUBlY2hvICJTUkNESVI9QHNyY2RpckAiID4+IHRlc3Rfb25lCisrCUBlY2hvICJTUkNESVI9L3Vzci9saWIvZTJmc3Byb2dzL3B0ZXN0L3Rlc3QiID4+IHRlc3Rfb25lCisgCUBlY2hvICJESUZGX09QVFM9QFVOSV9ESUZGX09QVFNAIiA+PiB0ZXN0X29uZQorIAlAY2F0ICQoc3JjZGlyKS90ZXN0X29uZS5pbiA+PiB0ZXN0X29uZQorIAlAY2htb2QgK3ggdGVzdF9vbmUKK0BAIC0yNiw3ICsyNiw3IEBAIHRlc3Rfb25lOiAkKHNyY2RpcikvdGVzdF9vbmUuaW4gTWFrZWZpbGUKKyB0ZXN0X3NjcmlwdDogdGVzdF9vbmUgdGVzdF9zY3JpcHQuaW4gTWFrZWZpbGUgbWtlMmZzLmNvbmYKKyAJQGVjaG8gIkNyZWF0aW5nIHRlc3Rfc2NyaXB0Li4uIgorIAlAZWNobyAiIyEvYmluL3NoIiA+IHRlc3Rfc2NyaXB0CistCUBlY2hvICJTUkNESVI9QHNyY2RpckAiID4+IHRlc3Rfc2NyaXB0CisrCUBlY2hvICJTUkNESVI9L3Vzci9saWIvZTJmc3Byb2dzL3B0ZXN0L3Rlc3QiID4+IHRlc3Rfc2NyaXB0CisgCUBjYXQgJChzcmNkaXIpL3Rlc3Rfc2NyaXB0LmluID4+IHRlc3Rfc2NyaXB0CisgCUBjaG1vZCAreCB0ZXN0X3NjcmlwdAorIAorSW5kZXg6IGUyZnNwcm9ncy0xLjQyLjkvdGVzdHMvdGVzdF9jb25maWcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlMmZzcHJvZ3MtMS40Mi45Lm9yaWcvdGVzdHMvdGVzdF9jb25maWcKKysrKyBlMmZzcHJvZ3MtMS40Mi45L3Rlc3RzL3Rlc3RfY29uZmlnCitAQCAtMywyMyArMywyMyBAQAorICMKKyAKKyB1bnNldCBMQU5HIExBTkdVQUdFIExDX0FERFJFU1MgTENfQUxMIExDX0NPTExBVEUgTENfQ1RZUEUgTENfSURFTlRJRklDQVRJT04gTENfTUVBU1VSRU1FTlQgTENfTUVTU0FHRVMgTENfTU9ORVRBUlkgTENfTkFNRSBMQ19OVU1FUklDIExDX1BBUEVSIExDX1RFTEVQSE9ORSBMQ19USU1FIFBBR0VSCistRlNDSz0iJFVTRV9WQUxHUklORCAuLi9lMmZzY2svZTJmc2NrIgorLU1LRTJGUz0iJFVTRV9WQUxHUklORCAuLi9taXNjL21rZTJmcyIKKy1EVU1QRTJGUz0iJFVTRV9WQUxHUklORCAuLi9taXNjL2R1bXBlMmZzIgorLVRVTkUyRlM9IiRVU0VfVkFMR1JJTkQgLi4vbWlzYy90dW5lMmZzIgorLUNIQVRUUj0iJFVTRV9WQUxHUklORC4uL21pc2MvY2hhdHRyIgorLUxTQVRUUj0iJFVTRV9WQUxHUklORCAuLi9taXNjL2xzYXR0ciIKKy1FMklNQUdFPSIkVVNFX1ZBTEdSSU5EIC4uL21pc2MvZTJpbWFnZSIKKy1FMklNQUdFX0VYRT0iLi4vbWlzYy9lMmltYWdlIgorLURFQlVHRlM9IiRVU0VfVkFMR1JJTkQgLi4vZGVidWdmcy9kZWJ1Z2ZzIgorLURFQlVHRlNfRVhFPSIuLi9kZWJ1Z2ZzL2RlYnVnZnMiCistVEVTVF9CSVRTPSIuLi9kZWJ1Z2ZzL2RlYnVnZnMiCistUkVTSVpFMkZTX0VYRT0iLi4vcmVzaXplL3Jlc2l6ZTJmcyIKKytGU0NLPSIkVVNFX1ZBTEdSSU5EIGUyZnNjayIKKytNS0UyRlM9IiRVU0VfVkFMR1JJTkQgbWtlMmZzIgorK0RVTVBFMkZTPSIkVVNFX1ZBTEdSSU5EIGR1bXBlMmZzIgorK1RVTkUyRlM9IiRVU0VfVkFMR1JJTkQgdHVuZTJmcyIKKytDSEFUVFI9IiRVU0VfVkFMR1JJTkQgY2hhdHRyIgorK0xTQVRUUj0iJFVTRV9WQUxHUklORCBsc2F0dHIiCisrRTJJTUFHRT0iJFVTRV9WQUxHUklORCBlMmltYWdlIgorK0UySU1BR0VfRVhFPSIvc2Jpbi9lMmltYWdlIgorK0RFQlVHRlM9IiRVU0VfVkFMR1JJTkQgZGVidWdmcyIKKytERUJVR0ZTX0VYRT0iL3NiaW4vZGVidWdmcyIKKytURVNUX0JJVFM9Ii9zYmluL2RlYnVnZnMiCisrUkVTSVpFMkZTX0VYRT0iL3NiaW4vcmVzaXplMmZzIgorIFJFU0laRTJGUz0iJFVTRV9WQUxHUklORCAkUkVTSVpFMkZTX0VYRSIKKy1FMlVORE9fRVhFPSIuLi9taXNjL2UydW5kbyIKKy1URVNUX1JFTD0uLi90ZXN0cy9wcm9ncy90ZXN0X3JlbAorLVRFU1RfSUNPVU5UPS4uL3Rlc3RzL3Byb2dzL3Rlc3RfaWNvdW50CistQ1JDU1VNPS4uL3Rlc3RzL3Byb2dzL2NyY3N1bQorK0UyVU5ET19FWEU9Ii9zYmluL2UydW5kbyIKKytURVNUX1JFTD0uL3Byb2dzL3Rlc3RfcmVsCisrVEVTVF9JQ09VTlQ9Li9wcm9ncy90ZXN0X2ljb3VudAorK0NSQ1NVTT0uL3Byb2dzL2NyY3N1bQorIExEX0xJQlJBUllfUEFUSD0uLi9saWI6Li4vbGliL2V4dDJmczouLi9saWIvZTJwOi4uL2xpYi9ldDouLi9saWIvc3MKKyBEWUxEX0xJQlJBUllfUEFUSD0uLi9saWI6Li4vbGliL2V4dDJmczouLi9saWIvZTJwOi4uL2xpYi9ldDouLi9saWIvc3MKKyBleHBvcnQgTERfTElCUkFSWV9QQVRICmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3F1aWV0LWRlYnVnZnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3F1aWV0LWRlYnVnZnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwZTlkNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvcXVpZXQtZGVidWdmcy5wYXRjaApAQCAtMCwwICsxLDE5IEBACitXaGVuIGV4ZWN1dGluZyBhIHNjcmlwdCBkb24ndCBlY2hvIGV2ZXJ5IGNvbW1hbmQsIGFzIHdlIGRvIHRoaXMgZm9yIGVudGlyZQorZmlsZXN5c3RlbXMgYXQgcm9vdGZzIHRpbWUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2RlYnVnZnMvZGVidWdmcy5jIGIvZGVidWdmcy9kZWJ1Z2ZzLmMKK2luZGV4IDU1OTAyOTUuLmFjNTcyOTIgMTAwNjQ0CistLS0gYS9kZWJ1Z2ZzL2RlYnVnZnMuYworKysrIGIvZGVidWdmcy9kZWJ1Z2ZzLmMKK0BAIC0yMzc4LDcgKzIzNzgsNyBAQCBzdGF0aWMgaW50IHNvdXJjZV9maWxlKGNvbnN0IGNoYXIgKmNtZF9maWxlLCBpbnQgc3NfaWR4KQorIAkJY3AgPSBzdHJjaHIoYnVmLCAnXHInKTsKKyAJCWlmIChjcCkKKyAJCQkqY3AgPSAwOworLQkJcHJpbnRmKCJkZWJ1Z2ZzOiAlc1xuIiwgYnVmKTsKKysJCS8qcHJpbnRmKCJkZWJ1Z2ZzOiAlc1xuIiwgYnVmKTsqLworIAkJcmV0dmFsID0gc3NfZXhlY3V0ZV9saW5lKHNzX2lkeCwgYnVmKTsKKyAJCWlmIChyZXR2YWwpIHsKKyAJCQlzc19wZXJyb3Ioc3NfaWR4LCByZXR2YWwsIGJ1Zik7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2U2ZWI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIGIxMzllMDNhYzJmNzJlNjQ0ZTU0N2M3ZWU5YjE1MTQzODNhZjRkOTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZWkgRGludSA8YW5kcmVpLmFkcmlhbnguZGludUBpbnRlbC5jb20+CitEYXRlOiBXZWQsIDMwIEphbiAyMDEzIDE1OjIyOjA0ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIFdoZW4gL2V0Yy9sZC5zby5jYWNoZSBpcyB3cml0ZWFibGUgYnkgdXNlciBydW5uaW5nIGJpdGJha2UKKyB0aGVuIGl0IGNyZWF0ZXMgaW52YWxpZCBjYWNoZSAoaW4gbXkgY2FzZSBsaWJzdGRjKysuc28KKyBjYW5ub3QgYmUgZm91bmQgYWZ0ZXIgYnVpbGRpbmcgemxpYigtbmF0aXZlKSBhbmQgSSBoYXZlIHRvCisgY2FsbCB0b3VjaCAqL2xpYnN0ZGMrKy5zbyAmJiAvc2Jpbi9sZGNvbmZpZyB0byBmaXggaXQuCisKK1NvIHJlbW92ZSBsZGNvbmZpZyBjYWxsIGZyb20gbWFrZSBpbnN0YWxsLWxpYnMKKworUGF0Y2ggYXV0aG9yZWQgYnkgTWFydGluIEphbnNhLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgRGludSA8YW5kcmVpLmFkcmlhbnguZGludUBpbnRlbC5jb20+CistLS0KKyBsaWIvTWFrZWZpbGUuZWxmLWxpYiB8ICAgIDMgLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUuZWxmLWxpYiBiL2xpYi9NYWtlZmlsZS5lbGYtbGliCitpbmRleCA3ODQ3OWQzLi40YTRhNWFjIDEwMDY0NAorLS0tIGEvbGliL01ha2VmaWxlLmVsZi1saWIKKysrKyBiL2xpYi9NYWtlZmlsZS5lbGYtbGliCitAQCAtNTAsOCArNTAsNiBAQCBpbnN0YWxsLXNobGlicyBpbnN0YWxsOjogJChFTEZfTElCKSBpbnN0YWxsZGlycy1lbGYtbGliICQoREVQX0lOU1RBTExfU1lNTElOSykKKyAJJChFKSAiCVNZTUxJTksgJChsaWJkaXIpLyQoRUxGX0lNQUdFKS5zbyIKKyAJJChRKSAkKElOU1RBTExfU1lNTElOSykgJChFTEZfSU5TVEFMTF9ESVIpLyQoRUxGX1NPTkFNRSkgXAorIAkJJChsaWJkaXIpLyQoRUxGX0lNQUdFKS5zbyAkKERFU1RESVIpCistCSQoRSkgIglMRENPTkZJRyIKKy0JJChRKSAtJChMRENPTkZJRykKKyAKKyBpbnN0YWxsLXN0cmlwOiBpbnN0YWxsCisgCSQoRSkgIglTVFJJUC1MSUIgJChFTEZfSU5TVEFMTF9ESVIpLyQoRUxGX0xJQikiCitAQCAtNjcsNyArNjUsNiBAQCB1bmluc3RhbGwtc2hsaWJzIHVuaW5zdGFsbDo6CisgCSQoUk0pIC1mICQoREVTVERJUikkKEVMRl9JTlNUQUxMX0RJUikvJChFTEZfTElCKSBcCisgCQkkKERFU1RESVIpJChFTEZfSU5TVEFMTF9ESVIpLyQoRUxGX1NPTkFNRSkgXAorIAkJJChERVNURElSKSQobGliZGlyKS8kKEVMRl9JTUFHRSkuc28KKy0JLSQoTERDT05GSUcpCisgCisgY2xlYW46OgorIAkkKFJNKSAtcmYgZWxmc2hhcmVkCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWMyNTEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9ydW4tcHRlc3QKQEAgLTAsMCArMSwxMSBAQAorIyEvYmluL3NoCisKK2NkIC4vdGVzdAorLi90ZXN0X3NjcmlwdCAmPi4uL3Rlc3QubG9nCitpZiBbICQ/IC1lcSAwIF0KK3RoZW4KKwllY2hvICJQQVNTOiBlMmZzcHJvZ3MiCisJcm0gdGVzdC5sb2cKK2Vsc2UKKwllY2hvICJGQUlMOiBlMmZzcHJvZ3MiCitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9nc18xLjQyLjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzXzEuNDIuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2UyOWM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9nc18xLjQyLjkuYmIKQEAgLTAsMCArMSwxMTYgQEAKK3JlcXVpcmUgZTJmc3Byb2dzLmluYworCitSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTiA9ICJVcGRhdGluZyBiYWNrcG9ydGVkIHBhdGNoZXMgdG8gMS40Mi4xMyBpcyB0b28gbXVjaCBwYWluLiBMZXQncyB3YWl0IHVudGlsIDEuNDMgaXMgcmVsZWFzZWQuIgorCitTUkNfVVJJICs9ICJmaWxlOi8vYWNpbmNsdWRlLm00IFwKKyAgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZml4LWljYWNoZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcXVpZXQtZGVidWdmcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1ta2UyZnMtYWRkLXRoZS1hYmlsaXR5LXRvLWNvcHktZmlsZXMtZnJvbS1hLWdpdmVuLWRpLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAyLW1pc2MtY3JlYXRlX2lub2RlLmMtY29weS1maWxlcy1yZWN1cnNpdmVseS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMy1taXNjLWNyZWF0ZV9pbm9kZS5jLWNyZWF0ZS1zcGVjaWFsLWZpbGUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDQtbWlzYy1jcmVhdGVfaW5vZGUuYy1jcmVhdGUtc3ltbGluay5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwNS1taXNjLWNyZWF0ZV9pbm9kZS5jLWNvcHktcmVndWxhci1maWxlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDA2LW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLWRpcmVjdG9yeS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwNy1taXNjLWNyZWF0ZV9pbm9kZS5jLXNldC1vd25lci1tb2RlLXRpbWUtZm9yLXRoZS1pbm9kLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDA4LW1rZTJmcy5jLWFkZC1hbi1vcHRpb24tZC1yb290LWRpcmVjdG9yeS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwOS1taXNjLWNyZWF0ZV9pbm9kZS5jLWhhbmRsZS1oYXJkbGlua3MucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMTAtZGVidWdmcy11c2UtdGhlLWZ1bmN0aW9ucy1pbi1taXNjLWNyZWF0ZV9pbm9kZS5jLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDExLW1rZTJmcy44LmluLXVwZGF0ZS10aGUtbWFudWFsLWZvci10aGUtZC1vcHRpb24ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMTItRml4LW11c2wtYnVpbGQtZmFpbHVyZXMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtZTJmc3Byb2dzLWZpeC1jcm9zcy1jb21waWxhdGlvbi1wcm9ibGVtLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9taXNjLW1rZTJmcy5jLXJldHVybi1lcnJvci13aGVuLWZhaWxlZC10by1wb3B1bGF0ZS1mcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vY2FjaGVfaW5vZGUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL0NWRS0yMDE1LTAyNDcucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtbGliZXh0MmZzLWZpeC1wb3RlbnRpYWwtYnVmZmVyLW92ZXJmbG93LWluLWNsb3NlZnMucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiM2Y4ZTQxZTYzYjQzMmJhMTE0YjMzZjU4Njc0NTYzZjciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMmY5MmFjMDZlOTJmYTAwZjJhZGEzZWU2N2RhZDAxMmQ3NGQ2ODU1Mzc1MjdhZDEyNDFkODJmMmQwNDFmMjgwMiIKKworRVhUUkFfT0VDT05GICs9ICItLWxpYmRpcj0ke2Jhc2VfbGliZGlyfSAtLXNiaW5kaXI9JHtiYXNlX3NiaW5kaXJ9IC0tZW5hYmxlLWVsZi1zaGxpYnMgLS1kaXNhYmxlLWxpYnV1aWQgLS1kaXNhYmxlLXV1aWRkIC0tZW5hYmxlLXZlcmJvc2UtbWFrZWNtZHMiCitFWFRSQV9PRUNPTkZfZGFyd2luID0gIi0tbGliZGlyPSR7YmFzZV9saWJkaXJ9IC0tc2JpbmRpcj0ke2Jhc2Vfc2JpbmRpcn0gLS1lbmFibGUtYnNkLXNobGlicyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCWNwICR7V09SS0RJUn0vYWNpbmNsdWRlLm00ICR7U30vCit9CisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbC1saWJzCisJIyBXZSB1c2UgYmxraWQgZnJvbSB1dGlsLWxpbnV4IG5vdyBzbyByZW1vdmUgZnJvbSBoZXJlCisJcm0gLWYgJHtEfSR7YmFzZV9saWJkaXJ9L2xpYmJsa2lkKgorCXJtIC1yZiAke0R9JHtpbmNsdWRlZGlyfS9ibGtpZAorCXJtIC1mICR7RH0ke2Jhc2VfbGliZGlyfS9wa2djb25maWcvYmxraWQucGMKKwlybSAtZiAke0R9JHtiYXNlX3NiaW5kaXJ9L2Jsa2lkCisJcm0gLWYgJHtEfSR7YmFzZV9zYmluZGlyfS9mc2NrCisJcm0gLWYgJHtEfSR7YmFzZV9zYmluZGlyfS9maW5kZnMKKworCSMgZTJpbml0cmRfaGVscGVyIGFuZCB0aGUgcGtnY29uZmlnIGZpbGVzIGJlbG9uZyBpbiBsaWJkaXIKKwlpZiBbICEgJHtEfSR7bGliZGlyfSAtZWYgJHtEfSR7YmFzZV9saWJkaXJ9IF07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9CisJCW12ICR7RH0ke2Jhc2VfbGliZGlyfS9lMmluaXRyZF9oZWxwZXIgJHtEfSR7bGliZGlyfQorCQltdiAke0R9JHtiYXNlX2xpYmRpcn0vcGtnY29uZmlnICR7RH0ke2xpYmRpcn0KKwlmaQorCisJb2VfbXVsdGlsaWJfaGVhZGVyIGV4dDJmcy9leHQyX3R5cGVzLmgKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCW12ICR7RH0ke2JpbmRpcn0vY2hhdHRyICR7RH0ke2Jhc2VfYmluZGlyfS9jaGF0dHIuZTJmc3Byb2dzCisKKwlpbnN0YWxsIC12IC1tIDc1NSAke1N9L2NvbnRyaWIvcG9wdWxhdGUtZXh0ZnMuc2ggJHtEfSR7YmFzZV9zYmluZGlyfS8KK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgeworCSMgQ2xlYW4gaG9zdCBwYXRoIGluIGNvbXBpbGVfZXQsIG1rX2NtZHMKKwlzZWQgLWkgLWUgInMsRVRfRElSPVwiJHtTfS9saWIvZXRcIixFVF9ESVI9XCIke2RhdGFkaXJ9L2V0XCIsZyIgJHtEfSR7YmluZGlyfS9jb21waWxlX2V0CisJc2VkIC1pIC1lICJzLFNTX0RJUj1cIiR7U30vbGliL3NzXCIsU1NfRElSPVwiJHtkYXRhZGlyfS9zc1wiLGciICR7RH0ke2JpbmRpcn0vbWtfY21kcworfQorCitSREVQRU5EU19lMmZzcHJvZ3MgPSAiZTJmc3Byb2dzLWJhZGJsb2NrcyIKK1JSRUNPTU1FTkRTX2UyZnNwcm9ncyA9ICJlMmZzcHJvZ3MtbWtlMmZzIGUyZnNwcm9ncy1lMmZzY2siCisKK1BBQ0tBR0VTID0rICJlMmZzcHJvZ3MtZTJmc2NrIGUyZnNwcm9ncy1ta2UyZnMgZTJmc3Byb2dzLXR1bmUyZnMgZTJmc3Byb2dzLWJhZGJsb2NrcyBlMmZzcHJvZ3MtcmVzaXplMmZzIgorUEFDS0FHRVMgPSsgImxpYmNvbWVyciBsaWJzcyBsaWJlMnAgbGliZXh0MmZzIgorCitGSUxFU19lMmZzcHJvZ3MtcmVzaXplMmZzID0gIiR7YmFzZV9zYmluZGlyfS9yZXNpemUyZnMqIgorRklMRVNfZTJmc3Byb2dzLWUyZnNjayA9ICIke2Jhc2Vfc2JpbmRpcn0vZTJmc2NrICR7YmFzZV9zYmluZGlyfS9mc2NrLmV4dCoiCitGSUxFU19lMmZzcHJvZ3MtbWtlMmZzID0gIiR7YmFzZV9zYmluZGlyfS9ta2UyZnMgJHtiYXNlX3NiaW5kaXJ9L21rZnMuZXh0KiAke3N5c2NvbmZkaXJ9L21rZTJmcy5jb25mIgorRklMRVNfZTJmc3Byb2dzLXR1bmUyZnMgPSAiJHtiYXNlX3NiaW5kaXJ9L3R1bmUyZnMgJHtiYXNlX3NiaW5kaXJ9L2UybGFiZWwiCitGSUxFU19lMmZzcHJvZ3MtYmFkYmxvY2tzID0gIiR7YmFzZV9zYmluZGlyfS9iYWRibG9ja3MiCitGSUxFU19saWJjb21lcnIgPSAiJHtiYXNlX2xpYmRpcn0vbGliY29tX2Vyci5zby4qIgorRklMRVNfbGlic3MgPSAiJHtiYXNlX2xpYmRpcn0vbGlic3Muc28uKiIKK0ZJTEVTX2xpYmUycCA9ICIke2Jhc2VfbGliZGlyfS9saWJlMnAuc28uKiIKK0ZJTEVTX2xpYmV4dDJmcyA9ICIke2xpYmRpcn0vZTJpbml0cmRfaGVscGVyICR7YmFzZV9saWJkaXJ9L2xpYmV4dDJmcy5zby4qIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9LyovKi5hd2sgJHtkYXRhZGlyfS8qLyouc2VkICR7YmFzZV9saWJkaXJ9Lyouc28iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImNoYXR0ciIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtjaGF0dHJdID0gIiR7YmFzZV9iaW5kaXJ9L2NoYXR0ciIKK0FMVEVSTkFUSVZFX1RBUkdFVFtjaGF0dHJdID0gIiR7YmFzZV9iaW5kaXJ9L2NoYXR0ci5lMmZzcHJvZ3MiCisKK0FMVEVSTkFUSVZFXyR7UE59LWRvYyA9ICJsaWJibGtpZC4zIGJsa2lkLjggZmluZGZzLjggZnNjay44IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2xpYmJsa2lkLjNdID0gIiR7bWFuZGlyfS9tYW4zL2xpYmJsa2lkLjMiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbYmxraWQuOF0gPSAiJHttYW5kaXJ9L21hbjgvYmxraWQuOCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtmaW5kZnMuOF0gPSAiJHttYW5kaXJ9L21hbjgvZmluZGZzLjgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZnNjay44XSA9ICIke21hbmRpcn0vbWFuOC9mc2NrLjgiCisKK2luaGVyaXQgcHRlc3QKK1NSQ19VUkkgKz0gImZpbGU6Ly9ydW4tcHRlc3QiCitTUkNfVVJJICs9ICJmaWxlOi8vcHRlc3QucGF0Y2giCisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICIke1BOfSAke1BOfS10dW5lMmZzIGNvcmV1dGlscyBwcm9jcHMiCisjUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gImV4cGVjdCIKKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIC1DICR7Qn0vdGVzdHMKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwljcCAtYSAke0J9L3Rlc3RzICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKKwljcCAtYSAke1N9L3Rlc3RzLyogJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorCXNlZCAtZSAncyEuLi9lMmZzY2svZTJmc2NrIWUyZnNjayFnJyAtaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0LyovZXhwZWN0KgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvYXJtX2JhY2tlbmQuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2FybV9iYWNrZW5kLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRlNDY3NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2FybV9iYWNrZW5kLmRpZmYKQEAgLTAsMCArMSw0NDkgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL2FybV9pbml0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0Ni5vcmlnL2JhY2tlbmRzL2FybV9pbml0LmMJMjAwOS0wNC0yMSAxNDo1MDowMS4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9hcm1faW5pdC5jCTIwMTAtMDQtMjQgMTA6MTE6MTMuMDAwMDAwMDAwICswMDAwCitAQCAtMzIsMjEgKzMyLDMyIEBACisgI2RlZmluZSBSRUxPQ19QUkVGSVgJUl9BUk1fCisgI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKyAKKysjaW5jbHVkZSAibGliZWJsX2FybS5oIgorKworIC8qIFRoaXMgZGVmaW5lcyB0aGUgY29tbW9uIHJlbG9jIGhvb2tzIGJhc2VkIG9uIGFybV9yZWxvYy5kZWYuICAqLworICNpbmNsdWRlICJjb21tb24tcmVsb2MuYyIKKyAKKyAKKyBjb25zdCBjaGFyICoKKyBhcm1faW5pdCAoZWxmLCBtYWNoaW5lLCBlaCwgZWhsZW4pCistICAgICBFbGYgKmVsZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBFbGYgKmVsZjsKKyAgICAgIEdFbGZfSGFsZiBtYWNoaW5lIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKyAgICAgIEVibCAqZWg7CisgICAgICBzaXplX3QgZWhsZW47CisgeworKyAgaW50IHNvZnRfZmxvYXQgPSAwOworKworICAgLyogQ2hlY2sgd2hldGhlciB0aGUgRWxmX0JIIG9iamVjdCBoYXMgYSBzdWZmaWNlbnQgc2l6ZS4gICovCisgICBpZiAoZWhsZW4gPCBzaXplb2YgKEVibCkpCisgICAgIHJldHVybiBOVUxMOworIAorKyAgaWYgKGVsZikgeworKyAgICBHRWxmX0VoZHIgZWhkcl9tZW07CisrICAgIEdFbGZfRWhkciAqZWhkciA9IGdlbGZfZ2V0ZWhkciAoZWxmLCAmZWhkcl9tZW0pOworKyAgICBpZiAoZWhkciAmJiAoZWhkci0+ZV9mbGFncyAmIEVGX0FSTV9TT0ZUX0ZMT0FUKSkKKysgICAgICBzb2Z0X2Zsb2F0ID0gMTsKKysgIH0KKysKKyAgIC8qIFdlIGhhbmRsZSBpdC4gICovCisgICBlaC0+bmFtZSA9ICJBUk0iOworICAgYXJtX2luaXRfcmVsb2MgKGVoKTsKK0BAIC01OCw3ICs2OSwxMCBAQAorICAgSE9PSyAoZWgsIGNvcmVfbm90ZSk7CisgICBIT09LIChlaCwgYXV4dl9pbmZvKTsKKyAgIEhPT0sgKGVoLCBjaGVja19vYmplY3RfYXR0cmlidXRlKTsKKy0gIEhPT0sgKGVoLCByZXR1cm5fdmFsdWVfbG9jYXRpb24pOworKyAgaWYgKHNvZnRfZmxvYXQpCisrICAgIGVoLT5yZXR1cm5fdmFsdWVfbG9jYXRpb24gPSBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX3NvZnQ7CisrICBlbHNlCisrICAgIGVoLT5yZXR1cm5fdmFsdWVfbG9jYXRpb24gPSBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX2hhcmQ7CisgCisgICByZXR1cm4gTU9EVkVSU0lPTjsKKyB9CitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvYXJtX3JlZ3MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ2Lm9yaWcvYmFja2VuZHMvYXJtX3JlZ3MuYwkyMDA5LTA0LTIxIDE0OjUwOjAxLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL2FybV9yZWdzLmMJMjAxMC0wNC0yNCAxMDoxMToxMy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yOCw2ICsyOCw3IEBACisgI2VuZGlmCisgCisgI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxkd2FyZi5oPgorIAorICNkZWZpbmUgQkFDS0VORCBhcm1fCitAQCAtNTgsNyArNTksMTUgQEAKKyAgICAgICBuYW1lbGVuID0gMjsKKyAgICAgICBicmVhazsKKyAKKy0gICAgY2FzZSAxMCAuLi4gMTI6CisrICAgIGNhc2UgMTAgLi4uIDExOgorKyAgICAgIG5hbWVbMF0gPSAncic7CisrICAgICAgbmFtZVsxXSA9ICcxJzsKKysgICAgICBuYW1lWzJdID0gcmVnbm8gJSAxMCArICcwJzsKKysgICAgICBuYW1lbGVuID0gMzsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAxMjoKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKyAgICAgICBuYW1lWzBdID0gJ3InOworICAgICAgIG5hbWVbMV0gPSAnMSc7CisgICAgICAgbmFtZVsyXSA9IHJlZ25vICUgMTAgKyAnMCc7CitAQCAtNzMsNiArODIsOSBAQAorICAgICAgIGJyZWFrOworIAorICAgICBjYXNlIDE2ICsgMCAuLi4gMTYgKyA3OgorKyAgICAgIC8qIEFBRFdBUkYgc2F5cyB0aGF0IHRoZXJlIGFyZSBubyByZWdpc3RlcnMgaW4gdGhhdCByYW5nZSwKKysgICAgICAgKiBidXQgZ2NjIG1hcHMgRlBBIHJlZ2lzdGVycyBoZXJlCisrICAgICAgICovCisgICAgICAgcmVnbm8gKz0gOTYgLSAxNjsKKyAgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworICAgICBjYXNlIDk2ICsgMCAuLi4gOTYgKyA3OgorQEAgLTg0LDExICs5NiwxMzkgQEAKKyAgICAgICBuYW1lbGVuID0gMjsKKyAgICAgICBicmVhazsKKyAKKysgICAgY2FzZSA2NCArIDAgLi4uIDY0ICsgOToKKysgICAgICAqc2V0bmFtZSA9ICJWRlAiOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfZmxvYXQ7CisrICAgICAgbmFtZVswXSA9ICdzJzsKKysgICAgICBuYW1lWzFdID0gcmVnbm8gLSA2NCArICcwJzsKKysgICAgICBuYW1lbGVuID0gMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSA2NCArIDEwIC4uLiA2NCArIDMxOgorKyAgICAgICpzZXRuYW1lID0gIlZGUCI7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICAqdHlwZSA9IERXX0FURV9mbG9hdDsKKysgICAgICBuYW1lWzBdID0gJ3MnOworKyAgICAgIG5hbWVbMV0gPSAocmVnbm8gLSA2NCkgLyAxMCArICcwJzsKKysgICAgICBuYW1lWzJdID0gKHJlZ25vIC0gNjQpICUgMTAgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDM7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgMTA0ICsgMCAuLi4gMTA0ICsgNzoKKysgICAgICAvKiBYWFggVE9ETzoKKysgICAgICAgKiBUaGlzIGNhbiBiZSBlaXRoZXIgaW50ZWwgd2lyZWxlc3MgTU1YIGdlbmVyYWwgcHVycG9zZS9jb250cm9sCisrICAgICAgICogcmVnaXN0ZXJzIG9yIHhzY2FsZSBhY2N1bXVsYXRvciwgd2hpY2ggaGF2ZSBkaWZmZXJlbnQgdXNhZ2UuCisrICAgICAgICogV2Ugb25seSBoYXZlIHRoZSBpbnRlbCB3aXJlbGVzcyBNTVggaGVyZSBub3cuCisrICAgICAgICogVGhlIG5hbWUgbmVlZHMgdG8gYmUgY2hhbmdlZCBmb3IgdGhlIHhzY2FsZSBhY2N1bXVsYXRvciB0b28uICovCisrICAgICAgKnNldG5hbWUgPSAiTU1YIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIG1lbWNweShuYW1lLCAid2NnciIsIDQpOworKyAgICAgIG5hbWVbNF0gPSByZWdubyAtIDEwNCArICcwJzsKKysgICAgICBuYW1lbGVuID0gNTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAxMTIgKyAwIC4uLiAxMTIgKyA5OgorKyAgICAgICpzZXRuYW1lID0gIk1NWCI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgKmJpdHMgPSA2NDsKKysgICAgICBuYW1lWzBdID0gJ3cnOworKyAgICAgIG5hbWVbMV0gPSAncic7CisrICAgICAgbmFtZVsyXSA9IHJlZ25vIC0gMTEyICsgJzAnOworKyAgICAgIG5hbWVsZW4gPSAzOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIDExMiArIDEwIC4uLiAxMTIgKyAxNToKKysgICAgICAqc2V0bmFtZSA9ICJNTVgiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgICpiaXRzID0gNjQ7CisrICAgICAgbmFtZVswXSA9ICd3JzsKKysgICAgICBuYW1lWzFdID0gJ3InOworKyAgICAgIG5hbWVbMl0gPSAnMSc7CisrICAgICAgbmFtZVszXSA9IHJlZ25vIC0gMTEyIC0gMTAgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDQ7CisrICAgICAgYnJlYWs7CisrCisgICAgIGNhc2UgMTI4OgorKyAgICAgICpzZXRuYW1lID0gInNwZWNpYWwiOworICAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworICAgICAgIHJldHVybiBzdHBjcHkgKG5hbWUsICJzcHNyIikgKyAxIC0gbmFtZTsKKyAKKysgICAgY2FzZSAxMjk6CisrICAgICAgKnNldG5hbWUgPSAic3BlY2lhbCI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgcmV0dXJuIHN0cGNweShuYW1lLCAic3Bzcl9maXEiKSArIDEgLSBuYW1lOworKworKyAgICBjYXNlIDEzMDoKKysgICAgICAqc2V0bmFtZSA9ICJzcGVjaWFsIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX2lycSIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTMxOgorKyAgICAgICpzZXRuYW1lID0gInNwZWNpYWwiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgIHJldHVybiBzdHBjcHkobmFtZSwgInNwc3JfYWJ0IikgKyAxIC0gbmFtZTsKKysKKysgICAgY2FzZSAxMzI6CisrICAgICAgKnNldG5hbWUgPSAic3BlY2lhbCI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgcmV0dXJuIHN0cGNweShuYW1lLCAic3Bzcl91bmQiKSArIDEgLSBuYW1lOworKworKyAgICBjYXNlIDEzMzoKKysgICAgICAqc2V0bmFtZSA9ICJzcGVjaWFsIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX3N2YyIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTQ0IC4uLiAxNTA6CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgcmV0dXJuIHNwcmludGYobmFtZSwgInIlZF91c3IiLCByZWdubyAtIDE0NCArIDgpICsgMTsKKysKKysgICAgY2FzZSAxNTEgLi4uIDE1NzoKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICByZXR1cm4gc3ByaW50ZihuYW1lLCAiciVkX2ZpcSIsIHJlZ25vIC0gMTUxICsgOCkgKyAxOworKworKyAgICBjYXNlIDE1OCAuLi4gMTU5OgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfaXJxIiwgcmVnbm8gLSAxNTggKyAxMykgKyAxOworKworKyAgICBjYXNlIDE2MCAuLi4gMTYxOgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfYWJ0IiwgcmVnbm8gLSAxNjAgKyAxMykgKyAxOworKworKyAgICBjYXNlIDE2MiAuLi4gMTYzOgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfdW5kIiwgcmVnbm8gLSAxNjIgKyAxMykgKyAxOworKworKyAgICBjYXNlIDE2NCAuLi4gMTY1OgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfc3ZjIiwgcmVnbm8gLSAxNjQgKyAxMykgKyAxOworKworKyAgICBjYXNlIDE5MiAuLi4gMTk5OgorKyAgICAgKnNldG5hbWUgPSAiTU1YIjsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgIG5hbWVbMF0gPSAndyc7CisrICAgICAgbmFtZVsxXSA9ICdjJzsKKysgICAgICBuYW1lWzJdID0gcmVnbm8gLSAxOTIgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDM7CisrICAgICAgYnJlYWs7CisrCisgICAgIGNhc2UgMjU2ICsgMCAuLi4gMjU2ICsgOToKKysgICAgICAvKiBYWFggVE9ETzogTmVvbiBhbHNvIHVzZXMgdGhvc2UgcmVnaXN0ZXJzIGFuZCBjYW4gY29udGFpbgorKyAgICAgICAqIGJvdGggZmxvYXQgYW5kIGludGVnZXJzICovCisgICAgICAgKnNldG5hbWUgPSAiVkZQIjsKKyAgICAgICAqdHlwZSA9IERXX0FURV9mbG9hdDsKKyAgICAgICAqYml0cyA9IDY0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL2FybV9yZXR2YWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ2Lm9yaWcvYmFja2VuZHMvYXJtX3JldHZhbC5jCTIwMTAtMDEtMTIgMTY6NTc6NTQuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvYXJtX3JldHZhbC5jCTIwMTAtMDQtMjQgMTA6MTE6MTMuMDAwMDAwMDAwICswMDAwCitAQCAtNDUsNiArNDUsMTMgQEAKKyAjZGVmaW5lIG5sb2NfaW50cmVnCTEKKyAjZGVmaW5lIG5sb2NfaW50cmVncyhuKQkoMiAqIChuKSkKKyAKKysvKiBmMSAgKi8gLyogWFhYIFRPRE86IGYwIGNhbiBhbHNvIGhhdmUgbnVtYmVyIDk2IGlmIHByb2dyYW0gd2FzIGNvbXBpbGVkIHdpdGggLW1hYmk9YWFwY3MgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ZwcmVnW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMTYgfSwKKysgIH07CisrI2RlZmluZSBubG9jX2ZwcmVnICAxCisrCisgLyogVGhlIHJldHVybiB2YWx1ZSBpcyBhIHN0cnVjdHVyZSBhbmQgaXMgYWN0dWFsbHkgc3RvcmVkIGluIHN0YWNrIHNwYWNlCisgICAgcGFzc2VkIGluIGEgaGlkZGVuIGFyZ3VtZW50IGJ5IHRoZSBjYWxsZXIuICBCdXQsIHRoZSBjb21waWxlcgorICAgIGhlbHBmdWxseSByZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoYXQgc3BhY2UgaW4gcjAuICAqLworQEAgLTU1LDggKzYyLDkgQEAKKyAjZGVmaW5lIG5sb2NfYWdncmVnYXRlIDEKKyAKKyAKKy1pbnQKKy1hcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisrc3RhdGljIGludAorK2FybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3AsCisrCQkgICAgICAgICAgICBpbnQgc29mdF9mbG9hdCkKKyB7CisgICAvKiBTdGFydCB3aXRoIHRoZSBmdW5jdGlvbidzIHR5cGUsIGFuZCBnZXQgdGhlIERXX0FUX3R5cGUgYXR0cmlidXRlLAorICAgICAgd2hpY2ggaXMgdGhlIHR5cGUgb2YgdGhlIHJldHVybiB2YWx1ZS4gICovCitAQCAtMTA5LDE0ICsxMTcsMzEgQEAKKyAJICBlbHNlCisgCSAgICByZXR1cm4gLTE7CisgCX0KKysgICAgICBpZiAodGFnID09IERXX1RBR19iYXNlX3R5cGUpCisrCXsKKysJICBEd2FyZl9Xb3JkIGVuY29kaW5nOworKwkgIGlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9lbmNvZGluZywKKysJICAgICAgICAgICAgICAgICAgICAgICAmYXR0cl9tZW0pLCAmZW5jb2RpbmcpICE9IDApCisrCSAgICByZXR1cm4gLTE7CisrCisrCSAgaWYgKChlbmNvZGluZyA9PSBEV19BVEVfZmxvYXQpICYmICFzb2Z0X2Zsb2F0KQorKwkgICAgeworKwkgICAgICAqbG9jcCA9IGxvY19mcHJlZzsKKysJICAgICAgaWYgKHNpemUgPD0gOCkKKysJCXJldHVybiBubG9jX2ZwcmVnOworKwkgICAgICBnb3RvIGFnZ3JlZ2F0ZTsKKysJICAgIH0KKysJfQorICAgICAgIGlmIChzaXplIDw9IDE2KQorIAl7CisgCWludHJlZzoKKyAJICAqbG9jcCA9IGxvY19pbnRyZWc7CisgCSAgcmV0dXJuIHNpemUgPD0gNCA/IG5sb2NfaW50cmVnIDogbmxvY19pbnRyZWdzICgoc2l6ZSArIDMpIC8gNCk7CisgCX0KKysgICAgICAvKiBmYWxsIHRocm91Z2guICovCisgCisgICAgIGFnZ3JlZ2F0ZToKKysgICAgICAvKiBYWFggVE9ETyBzb21ldGltZXMgYWdncmVnYXRlcyBhcmUgcmV0dXJuZWQgaW4gcjAgKC1tYWJpPWFhcGNzKSAqLworICAgICAgICpsb2NwID0gbG9jX2FnZ3JlZ2F0ZTsKKyAgICAgICByZXR1cm4gbmxvY19hZ2dyZWdhdGU7CisgCitAQCAtMTM1LDMgKzE2MCwxOCBAQAorICAgICAgRFdBUkYgYW5kIG1pZ2h0IGJlIHZhbGlkLiAgKi8KKyAgIHJldHVybiAtMjsKKyB9CisrCisrLyogcmV0dXJuIGxvY2F0aW9uIGZvciAtbWFiaT1hcGNzLWdudSAtbXNvZnQtZmxvYXQgKi8KKytpbnQKKythcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX3NvZnQgKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyt7CisrICAgcmV0dXJuIGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChmdW5jdHlwZWRpZSwgbG9jcCwgMSk7CisrfQorKworKy8qIHJldHVybiBsb2NhdGlvbiBmb3IgLW1hYmk9YXBjcy1nbnUgLW1oYXJkLWZsb2F0IChjdXJyZW50IGRlZmF1bHQpICovCisraW50CisrYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl9oYXJkIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisreworKyAgIHJldHVybiBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXyAoZnVuY3R5cGVkaWUsIGxvY3AsIDApOworK30KKysKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9saWJlbGYvZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0Ni5vcmlnL2xpYmVsZi9lbGYuaAkyMDEwLTA0LTI0IDEwOjExOjExLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2xpYmVsZi9lbGYuaAkyMDEwLTA0LTI0IDEwOjExOjEzLjAwMDAwMDAwMCArMDAwMAorQEAgLTIyOTAsNiArMjI5MCw5IEBACisgI2RlZmluZSBFRl9BUk1fRUFCSV9WRVI0CTB4MDQwMDAwMDAKKyAjZGVmaW5lIEVGX0FSTV9FQUJJX1ZFUjUJMHgwNTAwMDAwMAorIAorKy8qIEVJX09TQUJJIHZhbHVlcyAqLworKyNkZWZpbmUgRUxGT1NBQklfQVJNX0FFQUJJICAgIDY0ICAgICAgLyogQ29udGFpbnMgc3ltYm9sIHZlcnNpb25pbmcuICovCisrCisgLyogQWRkaXRpb25hbCBzeW1ib2wgdHlwZXMgZm9yIFRodW1iLiAgKi8KKyAjZGVmaW5lIFNUVF9BUk1fVEZVTkMJCVNUVF9MT1BST0MgLyogQSBUaHVtYiBmdW5jdGlvbi4gICovCisgI2RlZmluZSBTVFRfQVJNXzE2QklUCQlTVFRfSElQUk9DIC8qIEEgVGh1bWIgbGFiZWwuICAqLworQEAgLTIzMDcsMTIgKzIzMTAsMTkgQEAKKyAKKyAvKiBQcm9jZXNzb3Igc3BlY2lmaWMgdmFsdWVzIGZvciB0aGUgUGhkciBwX3R5cGUgZmllbGQuICAqLworICNkZWZpbmUgUFRfQVJNX0VYSURYCQkoUFRfTE9QUk9DICsgMSkJLyogQVJNIHVud2luZCBzZWdtZW50LiAgKi8KKysjZGVmaW5lIFBUX0FSTV9VTldJTkQJCVBUX0FSTV9FWElEWAorIAorIC8qIFByb2Nlc3NvciBzcGVjaWZpYyB2YWx1ZXMgZm9yIHRoZSBTaGRyIHNoX3R5cGUgZmllbGQuICAqLworICNkZWZpbmUgU0hUX0FSTV9FWElEWAkJKFNIVF9MT1BST0MgKyAxKSAvKiBBUk0gdW53aW5kIHNlY3Rpb24uICAqLworICNkZWZpbmUgU0hUX0FSTV9QUkVFTVBUTUFQCShTSFRfTE9QUk9DICsgMikgLyogUHJlZW1wdGlvbiBkZXRhaWxzLiAgKi8KKyAjZGVmaW5lIFNIVF9BUk1fQVRUUklCVVRFUwkoU0hUX0xPUFJPQyArIDMpIC8qIEFSTSBhdHRyaWJ1dGVzIHNlY3Rpb24uICAqLworIAorKy8qIFByb2Nlc3NvciBzcGVjaWZpYyB2YWx1ZXMgZm9yIHRoZSBEeW4gZF90YWcgZmllbGQuICAqLworKyNkZWZpbmUgRFRfQVJNX1JFU0VSVkVEMQkoRFRfTE9QUk9DICsgMCkKKysjZGVmaW5lIERUX0FSTV9TWU1UQUJTWgkJKERUX0xPUFJPQyArIDEpCisrI2RlZmluZSBEVF9BUk1fUFJFRU1UTUFCCShEVF9MT1BST0MgKyAyKQorKyNkZWZpbmUgRFRfQVJNX1JFU0VSVkVEMgkoRFRfTE9QUk9DICsgMykKKysjZGVmaW5lIERUX0FSTV9OVU0JCTQKKyAKKyAvKiBBUk0gcmVsb2NzLiAgKi8KKyAKK0BAIC0yMzQ0LDEyICsyMzU0LDc1IEBACisgI2RlZmluZSBSX0FSTV9HT1RQQwkJMjUJLyogMzIgYml0IFBDIHJlbGF0aXZlIG9mZnNldCB0byBHT1QgKi8KKyAjZGVmaW5lIFJfQVJNX0dPVDMyCQkyNgkvKiAzMiBiaXQgR09UIGVudHJ5ICovCisgI2RlZmluZSBSX0FSTV9QTFQzMgkJMjcJLyogMzIgYml0IFBMVCBhZGRyZXNzICovCisrI2RlZmluZSBSX0FSTV9DQUxMCQkyOAorKyNkZWZpbmUgUl9BUk1fSlVNUDI0CQkyOQorKyNkZWZpbmUgUl9BUk1fVEhNX0pVTVAyNAkzMAorKyNkZWZpbmUgUl9BUk1fQkFTRV9BQlMJCTMxCisgI2RlZmluZSBSX0FSTV9BTFVfUENSRUxfN18wCTMyCisgI2RlZmluZSBSX0FSTV9BTFVfUENSRUxfMTVfOAkzMworICNkZWZpbmUgUl9BUk1fQUxVX1BDUkVMXzIzXzE1CTM0CisgI2RlZmluZSBSX0FSTV9MRFJfU0JSRUxfMTFfMAkzNQorICNkZWZpbmUgUl9BUk1fQUxVX1NCUkVMXzE5XzEyCTM2CisgI2RlZmluZSBSX0FSTV9BTFVfU0JSRUxfMjdfMjAJMzcKKysjZGVmaW5lIFJfQVJNX1RBUkdFVDEJCTM4CisrI2RlZmluZSBSX0FSTV9TQlJFTDMxCQkzOQorKyNkZWZpbmUgUl9BUk1fVjRCWAkJNDAKKysjZGVmaW5lIFJfQVJNX1RBUkdFVDIJCTQxCisrI2RlZmluZSBSX0FSTV9QUkVMMzEJCTQyCisrI2RlZmluZSBSX0FSTV9NT1ZXX0FCU19OQwk0MworKyNkZWZpbmUgUl9BUk1fTU9WVF9BQlMJCTQ0CisrI2RlZmluZSBSX0FSTV9NT1ZXX1BSRUxfTkMJNDUKKysjZGVmaW5lIFJfQVJNX01PVlRfUFJFTAkJNDYKKysjZGVmaW5lIFJfQVJNX1RITV9NT1ZXX0FCU19OQwk0NworKyNkZWZpbmUgUl9BUk1fVEhNX01PVlRfQUJTCTQ4CisrI2RlZmluZSBSX0FSTV9USE1fTU9WV19QUkVMX05DCTQ5CisrI2RlZmluZSBSX0FSTV9USE1fTU9WVF9QUkVMCTUwCisrI2RlZmluZSBSX0FSTV9USE1fSlVNUDE5CTUxCisrI2RlZmluZSBSX0FSTV9USE1fSlVNUDYJCTUyCisrI2RlZmluZSBSX0FSTV9USE1fQUxVX1BSRUxfMTFfMAk1MworKyNkZWZpbmUgUl9BUk1fVEhNX1BDMTIJCTU0CisrI2RlZmluZSBSX0FSTV9BQlMzMl9OT0kJCTU1CisrI2RlZmluZSBSX0FSTV9SRUwzMl9OT0kJCTU2CisrI2RlZmluZSBSX0FSTV9BTFVfUENfRzBfTkMJNTcKKysjZGVmaW5lIFJfQVJNX0FMVV9QQ19HMAkJNTgKKysjZGVmaW5lIFJfQVJNX0FMVV9QQ19HMV9OQwk1OQorKyNkZWZpbmUgUl9BUk1fQUxVX1BDX0cxCQk2MAorKyNkZWZpbmUgUl9BUk1fQUxVX1BDX0cyCQk2MQorKyNkZWZpbmUgUl9BUk1fTERSX1BDX0cxCQk2MgorKyNkZWZpbmUgUl9BUk1fTERSX1BDX0cyCQk2MworKyNkZWZpbmUgUl9BUk1fTERSU19QQ19HMAk2NAorKyNkZWZpbmUgUl9BUk1fTERSU19QQ19HMQk2NQorKyNkZWZpbmUgUl9BUk1fTERSU19QQ19HMgk2NgorKyNkZWZpbmUgUl9BUk1fTERDX1BDX0cwCQk2NworKyNkZWZpbmUgUl9BUk1fTERDX1BDX0cxCQk2OAorKyNkZWZpbmUgUl9BUk1fTERDX1BDX0cyCQk2OQorKyNkZWZpbmUgUl9BUk1fQUxVX1NCX0cwX05DCTcwCisrI2RlZmluZSBSX0FSTV9BTFVfU0JfRzAJCTcxCisrI2RlZmluZSBSX0FSTV9BTFVfU0JfRzFfTkMJNzIKKysjZGVmaW5lIFJfQVJNX0FMVV9TQl9HMQkJNzMKKysjZGVmaW5lIFJfQVJNX0FMVV9TQl9HMgkJNzQKKysjZGVmaW5lIFJfQVJNX0xEUl9TQl9HMAkJNzUKKysjZGVmaW5lIFJfQVJNX0xEUl9TQl9HMQkJNzYKKysjZGVmaW5lIFJfQVJNX0xEUl9TQl9HMgkJNzcKKysjZGVmaW5lIFJfQVJNX0xEUlNfU0JfRzAJNzgKKysjZGVmaW5lIFJfQVJNX0xEUlNfU0JfRzEJNzkKKysjZGVmaW5lIFJfQVJNX0xEUlNfU0JfRzIJODAKKysjZGVmaW5lIFJfQVJNX0xEQ19HMAkJODEKKysjZGVmaW5lIFJfQVJNX0xEQ19HMQkJODIKKysjZGVmaW5lIFJfQVJNX0xEQ19HMgkJODMKKysjZGVmaW5lIFJfQVJNX01PVldfQlJFTF9OQwk4NAorKyNkZWZpbmUgUl9BUk1fTU9WVF9CUkVMCQk4NQorKyNkZWZpbmUgUl9BUk1fTU9WV19CUkVMCQk4NgorKyNkZWZpbmUgUl9BUk1fVEhNX01PVldfQlJFTF9OQwk4NworKyNkZWZpbmUgUl9BUk1fVEhNX01PVlRfQlJFTAk4OAorKyNkZWZpbmUgUl9BUk1fVEhNX01PVldfQlJFTAk4OQorKy8qIDkwLTkzIHVuYWxsb2NhdGVkICovCisrI2RlZmluZSBSX0FSTV9QTFQzMl9BQlMJCTk0CisrI2RlZmluZSBSX0FSTV9HT1RfQUJTCQk5NQorKyNkZWZpbmUgUl9BUk1fR09UX1BSRUwJCTk2CisrI2RlZmluZSBSX0FSTV9HT1RfQlJFTDEyCTk3CisrI2RlZmluZSBSX0FSTV9HT1RPRkYxMgkJOTgKKysjZGVmaW5lIFJfQVJNX0dPVFJFTEFYCQk5OQorICNkZWZpbmUgUl9BUk1fR05VX1ZURU5UUlkJMTAwCisgI2RlZmluZSBSX0FSTV9HTlVfVlRJTkhFUklUCTEwMQorICNkZWZpbmUgUl9BUk1fVEhNX1BDMTEJCTEwMgkvKiB0aHVtYiB1bmNvbmRpdGlvbmFsIGJyYW5jaCAqLworQEAgLTIzNjQsNiArMjQzNywxMiBAQAorIAkJCQkJICAgc3RhdGljIFRMUyBibG9jayBvZmZzZXQgKi8KKyAjZGVmaW5lIFJfQVJNX1RMU19MRTMyCQkxMDgJLyogMzIgYml0IG9mZnNldCByZWxhdGl2ZSB0byBzdGF0aWMKKyAJCQkJCSAgIFRMUyBibG9jayAqLworKyNkZWZpbmUgUl9BUk1fVExTX0xETzEyCQkxMDkKKysjZGVmaW5lIFJfQVJNX1RMU19MRTEyCQkxMTAKKysjZGVmaW5lIFJfQVJNX1RMU19JRTEyR1AJMTExCisrLyogMTEyIC0gMTI3IHByaXZhdGUgcmFuZ2UgKi8KKysjZGVmaW5lIFJfQVJNX01FX1RPTwkJMTI4CS8qIG9ic29sZXRlICovCisrCisgI2RlZmluZSBSX0FSTV9SWFBDMjUJCTI0OQorICNkZWZpbmUgUl9BUk1fUlNCUkVMMzIJCTI1MAorICNkZWZpbmUgUl9BUk1fVEhNX1JQQzIyCQkyNTEKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9saWJlYmxfYXJtLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9saWJlYmxfYXJtLmgJMjAxMC0wNC0yNCAxMDoxMToxMy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsOSBAQAorKyNpZm5kZWYgX0xJQkVCTF9BUk1fSAorKyNkZWZpbmUgX0xJQkVCTF9BUk1fSCAxCisrCisrI2luY2x1ZGUgPGxpYmR3Lmg+CisrCisrZXh0ZXJuIGludCBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX3NvZnQoRHdhcmZfRGllICosIGNvbnN0IER3YXJmX09wICoqbG9jcCk7CisrZXh0ZXJuIGludCBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX2hhcmQoRHdhcmZfRGllICosIGNvbnN0IER3YXJmX09wICoqbG9jcCk7CisrCisrI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9lbGZfYWRkaXRpb25zLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9lbGZfYWRkaXRpb25zLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJhYTcwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2VsZl9hZGRpdGlvbnMuZGlmZgpAQCAtMCwwICsxLDcxIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9saWJlbGYvZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0Ni5vcmlnL2xpYmVsZi9lbGYuaAkyMDEwLTA0LTI0IDEwOjEzOjUwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2xpYmVsZi9lbGYuaAkyMDEwLTA0LTI0IDEwOjIyOjQzLjAwMDAwMDAwMCArMDAwMAorQEAgLTE0Myw2ICsxNDMsNyBAQAorICNkZWZpbmUgRUxGT1NBQklfSFBVWAkJMQkvKiBIUC1VWCAqLworICNkZWZpbmUgRUxGT1NBQklfTkVUQlNECQkyCS8qIE5ldEJTRC4gICovCisgI2RlZmluZSBFTEZPU0FCSV9MSU5VWAkJMwkvKiBMaW51eC4gICovCisrI2RlZmluZSBFTEZPU0FCSV9IVVJECQk0CS8qIEdOVS9IdXJkICovCisgI2RlZmluZSBFTEZPU0FCSV9TT0xBUklTCTYJLyogU3VuIFNvbGFyaXMuICAqLworICNkZWZpbmUgRUxGT1NBQklfQUlYCQk3CS8qIElCTSBBSVguICAqLworICNkZWZpbmUgRUxGT1NBQklfSVJJWAkJOAkvKiBTR0kgSXJpeC4gICovCitAQCAtMTUwLDggKzE1MSwxMyBAQAorICNkZWZpbmUgRUxGT1NBQklfVFJVNjQJCTEwCS8qIENvbXBhcSBUUlU2NCBVTklYLiAgKi8KKyAjZGVmaW5lIEVMRk9TQUJJX01PREVTVE8JMTEJLyogTm92ZWxsIE1vZGVzdG8uICAqLworICNkZWZpbmUgRUxGT1NBQklfT1BFTkJTRAkxMgkvKiBPcGVuQlNELiAgKi8KKysjZGVmaW5lIEVMRk9TQUJJX09QRU5WTVMJMTMJLyogT3BlblZNUyAqLworKyNkZWZpbmUgRUxGT1NBQklfTlNLCQkxNAkvKiBIZXdsZXR0LVBhY2thcmQgTm9uLVN0b3AgS2VybmVsICovCisrI2RlZmluZSBFTEZPU0FCSV9BUk9TCQkxNQkvKiBBbWlnYSBSZXNlYXJjaCBPUyAqLworKy8qIDY0LTI1NSBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgdmFsdWUgcmFuZ2UgKi8KKyAjZGVmaW5lIEVMRk9TQUJJX0FSTV9BRUFCSQk2NAkvKiBBUk0gRUFCSSAqLworICNkZWZpbmUgRUxGT1NBQklfQVJNCQk5NwkvKiBBUk0gKi8KKysvKiBUaGlzIGlzIGRlcHJlY2F0ZWQ/IEl0J3Mgbm90IGluIHRoZSBsYXRlc3QgdmVyc2lvbiBhbnltb3JlLiAqLworICNkZWZpbmUgRUxGT1NBQklfU1RBTkRBTE9ORQkyNTUJLyogU3RhbmRhbG9uZSAoZW1iZWRkZWQpIGFwcGxpY2F0aW9uICovCisgCisgI2RlZmluZSBFSV9BQklWRVJTSU9OCTgJCS8qIEFCSSB2ZXJzaW9uICovCitAQCAtMjA2LDcgKzIxMiw3IEBACisgI2RlZmluZSBFTV9IOF8zMDBICTQ3CQkvKiBIaXRhY2hpIEg4LzMwMEggKi8KKyAjZGVmaW5lIEVNX0g4UwkJNDgJCS8qIEhpdGFjaGkgSDhTICovCisgI2RlZmluZSBFTV9IOF81MDAJNDkJCS8qIEhpdGFjaGkgSDgvNTAwICovCistI2RlZmluZSBFTV9JQV82NAk1MAkJLyogSW50ZWwgTWVyY2VkICovCisrI2RlZmluZSBFTV9JQV82NAk1MAkJLyogSW50ZWwgSUE2NCAqLworICNkZWZpbmUgRU1fTUlQU19YCTUxCQkvKiBTdGFuZm9yZCBNSVBTLVggKi8KKyAjZGVmaW5lIEVNX0NPTERGSVJFCTUyCQkvKiBNb3Rvcm9sYSBDb2xkZmlyZSAqLworICNkZWZpbmUgRU1fNjhIQzEyCTUzCQkvKiBNb3Rvcm9sYSBNNjhIQzEyICovCitAQCAtMjIwLDcgKzIyNiw4IEBACisgI2RlZmluZSBFTV9USU5ZSgk2MQkJLyogQWR2YW5jZWQgTG9naWMgQ29ycC4gVGlueWogZW1iLmZhbSovCisgI2RlZmluZSBFTV9YODZfNjQJNjIJCS8qIEFNRCB4ODYtNjQgYXJjaGl0ZWN0dXJlICovCisgI2RlZmluZSBFTV9QRFNQCQk2MwkJLyogU29ueSBEU1AgUHJvY2Vzc29yICovCistCisrI2RlZmluZQlFTV9QRFAxMAk2NAkJLyogRGlnaXRhbCBFcXVpcG1lbnQgQ29ycC4gUERQLTEwICovCisrI2RlZmluZSBFTV9QRFAxMQk2NQkJLyogRGlnaXRhbCBFcXVpcG1lbnQgQ29ycC4gUERQLTExICovCisgI2RlZmluZSBFTV9GWDY2CQk2NgkJLyogU2llbWVucyBGWDY2IG1pY3JvY29udHJvbGxlciAqLworICNkZWZpbmUgRU1fU1Q5UExVUwk2NwkJLyogU1RNaWNyb2VsZWN0cm9uaWNzIFNUOSsgOC8xNiBtYyAqLworICNkZWZpbmUgRU1fU1Q3CQk2OAkJLyogU1RtaWNyb2VsZWN0cm9uaWNzIFNUNyA4IGJpdCBtYyAqLworQEAgLTI1MCw3ICsyNTcsMjIgQEAKKyAjZGVmaW5lIEVNX09QRU5SSVNDCTkyCQkvKiBPcGVuUklTQyAzMi1iaXQgZW1iZWRkZWQgcHJvY2Vzc29yICovCisgI2RlZmluZSBFTV9BUkNfQTUJOTMJCS8qIEFSQyBDb3JlcyBUYW5nZW50LUE1ICovCisgI2RlZmluZSBFTV9YVEVOU0EJOTQJCS8qIFRlbnNpbGljYSBYdGVuc2EgQXJjaGl0ZWN0dXJlICovCistI2RlZmluZSBFTV9OVU0JCTk1CisrI2RlZmluZQlFTV9WSURFT0NPUkUJOTUJCS8qIEFscGhhbW9zYWljIFZpZGVvQ29yZSBwcm9jZXNzb3IgKi8KKysjZGVmaW5lCUVNX1RNTV9HUFAJOTYJCS8qIFRob21wc29uIE11bHRpbWVkaWEgR2VuZXJhbCBQdXJwb3NlIFByb2Nlc3NvciAqLworKyNkZWZpbmUJRU1fTlMzMksJOTcJCS8qIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgMzIwMDAgc2VyaWVzICovCisrI2RlZmluZQlFTV9UUEMJCTk4CQkvKiBUZW5vciBOZXR3b3JrIFRQQyBwcm9jZXNzb3IgKi8KKysjZGVmaW5lCUVNX1NOUDFLCTk5CQkvKiBUcmViaWEgU05QIDEwMDAgcHJvY2Vzc29yICovCisrI2RlZmluZQlFTV9TVDIwMAkxMDAJCS8qIFNUTWljcm9lbGVjdHJvbmljcyAod3d3LnN0LmNvbSkgU1QyMDAgbWljcm9jb250cm9sbGVyICovCisrI2RlZmluZSBFTV9JUDJLICAgICAgICAgMTAxCQkvKiBVYmljb20gSVAyWFhYIG1pY3JvY29udHJvbGxlciBmYW1pbHkgKi8KKysjZGVmaW5lCUVNX01BWAkJMTAyCQkvKiBNQVggUHJvY2Vzc29yICovCisrI2RlZmluZSBFTV9DUiAgICAgICAgICAgMTAzCQkvKiBOYXRpb25hbCBTZW1pY29uZHVjdG9yIENvbXBhY3RSSVNDICovCisrI2RlZmluZQlFTV9GMk1DMTYJMTA0CQkvKiBGdWppdHN1IEYyTUMxNiAqLworKyNkZWZpbmUgRU1fTVNQNDMwICAgICAgIDEwNQkJLyogVEkgbXNwNDMwIG1pY3JvIGNvbnRyb2xsZXIgKi8KKysjZGVmaW5lIEVNX0JMQUNLRklOICAgICAxMDYJCS8qIEFuYWxvZyBEZXZpY2VzIEJsYWNrZmluIChEU1ApIHByb2Nlc3NvciAqLworKyNkZWZpbmUgRU1fU0VfQzMzCTEwNwkJLyogUzFDMzMgRmFtaWx5IG9mIFNlaWtvIEVwc29uIHByb2Nlc3NvcnMgKi8KKysjZGVmaW5lCUVNX1NFUAkJMTA4CQkvKiBTaGFycCBlbWJlZGRlZCBtaWNyb3Byb2Nlc3NvciAqLworKyNkZWZpbmUgRU1fQVJDQQkJMTA5CQkvKiBBcmNhIFJJU0MgTWljcm9wcm9jZXNzb3IgKi8KKysjZGVmaW5lIEVNX05VTQkJMTEwCisgCisgLyogSWYgaXQgaXMgbmVjZXNzYXJ5IHRvIGFzc2lnbiBuZXcgdW5vZmZpY2lhbCBFTV8qIHZhbHVlcywgcGxlYXNlCisgICAgcGljayBsYXJnZSByYW5kb20gbnVtYmVycyAoMHg4NTIzLCAweGE3ZjIsIGV0Yy4pIHRvIG1pbmltaXplIHRoZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmX2JlZ2luLmMtQ1ZFLTIwMTQtOTQ0Ny1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9lbGZfYmVnaW4uYy1DVkUtMjAxNC05NDQ3LWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGU4ZGRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmX2JlZ2luLmMtQ1ZFLTIwMTQtOTQ0Ny1maXgucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRnJvbSAzMjNjYTA0YTBjOTE4OTU0NDA3NWMxOWI0OWRhNjdmNjQ0M2E4OTUwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGkgeGluIDxsaXhpbi5mbnN0QGNuLmZ1aml0c3UuY29tPgorRGF0ZTogV2VkLCAyMSBKYW4gMjAxNSAwOTozMzozOCArMDkwMAorU3ViamVjdDogW1BBVENIXSBlbGZfYmVnaW4uYzogQ1ZFLTIwMTQtOTQ0NyBmaXgKKwordGhpcyBwYXRjaCBpcyBmcm9tOgorIGh0dHBzOi8vZ2l0LmZlZG9yYWhvc3RlZC5vcmcvY2dpdC9lbGZ1dGlscy5naXQvY29tbWl0Lz9pZD0xNDcwMThlNzI5ZTdjMjJlZWFiZjE1YjgyZDI2ZTRiZjY4YTBkMThlCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogTGkgWGluIDxsaXhpbi5mbnN0QGNuLmZ1aml0c3UuY29tPgorLS0tCisgbGliZWxmL2VsZl9iZWdpbi5jIHwgNyArKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmVsZi9lbGZfYmVnaW4uYyBiL2xpYmVsZi9lbGZfYmVnaW4uYworaW5kZXggZTQ2YWRkMy4uZTgzYmEzNSAxMDA2NDQKKy0tLSBhL2xpYmVsZi9lbGZfYmVnaW4uYworKysrIGIvbGliZWxmL2VsZl9iZWdpbi5jCitAQCAtNzM2LDExICs3MzYsOCBAQCByZWFkX2xvbmdfbmFtZXMgKEVsZiAqZWxmKQorIAkgICAgYnJlYWs7CisgCisgCSAgLyogTlVMLXRlcm1pbmF0ZSB0aGUgc3RyaW5nLiAgKi8KKy0JICAqcnVucCA9ICdcMCc7CistCistCSAgLyogU2tpcCB0aGUgTlVMIGJ5dGUgYW5kIHRoZSBcMDEyLiAgKi8KKy0JICBydW5wICs9IDI7CistCisrCSAgKnJ1bnArKyA9ICdcMCc7CisrIAorIAkgIC8qIEEgc2FuaXR5IGNoZWNrLiAgU29tZWJvZHkgbWlnaHQgaGF2ZSBnZW5lcmF0ZWQgaW52YWxpZAorIAkgICAgIGFyY2hpdmUuICAqLworIAkgIGlmIChydW5wID49IG5ld3AgKyBsZW4pCistLSAKKzEuOC40LjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmdXRpbHMtYXItYy1maXgtbnVtLXBhc3NlZC10by1tZW1zZXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9lbGZ1dGlscy1hci1jLWZpeC1udW0tcGFzc2VkLXRvLW1lbXNldC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjE5NjE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmdXRpbHMtYXItYy1maXgtbnVtLXBhc3NlZC10by1tZW1zZXQucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCithci5jIChkb19vcGVyX2RlbGV0ZSk6IEZpeCBudW0gcGFzc2VkIHRvIG1lbXNldAorbmF0aXZlIGJ1aWxkIGZhaWxlZCBhcyBmb2xsb3dpbmcgb24gRmVkb3JhMTgrOiAKK2FyLmM6IEluIGZ1bmN0aW9uICdkb19vcGVyX2RlbGV0ZSc6Cithci5jOjkxODozMTogZXJyb3I6IGFyZ3VtZW50IHRvICdzaXplb2YnIGluICdtZW1zZXQnIGNhbGwgaXMgdGhlIHNhbWUgZXhwcmVzc2lvbiBhcyB0aGUgZGVzdGluYXRpb247IGRpZCB5b3UgbWVhbiB0byBkZXJlZmVyZW5jZSBpdD8gWy1XZXJyb3I9c2l6ZW9mLXBvaW50ZXItbWVtYWNjZXNzXQorICAgbWVtc2V0IChmb3VuZCwgJ1wwJywgc2l6ZW9mIChmb3VuZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitUaGUgb3JpZ2luYWwgY29tbWl0IGlzIGh0dHA6Ly9naXQuZmVkb3JhaG9zdGVkLm9yZy9jZ2l0L2VsZnV0aWxzLmdpdC9jb21taXQvc3JjL2FyLmM/aWQ9MWE0ZDA2NjhkMThiZjEwOTBjNWMwOGNkYjVjYjNiYTJiOGViNTQxMAorCitTaWduZWQtb2ZmLWJ5OiBaaGVuaHVhIEx1byA8emhlbmh1YS5sdW9AZnJlZXNjYWxlLmNvbT4KKworLS0tIGVsZnV0aWxzLTAuMTQ4L3NyYy9hci5jLm9yZwkyMDEzLTAzLTEyIDIxOjEyOjE3LjkyODI4MTM3NSAtMDUwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9hci5jCTIwMTMtMDMtMTIgMjE6MTU6MzAuMDUzMjg1MjcxIC0wNTAwCitAQCAtOTE1LDcgKzkxNSw3IEBACisgCQlsb25nIGludCBpbnN0YW5jZSkKKyB7CisgICBib29sICpmb3VuZCA9IGFsbG9jYSAoc2l6ZW9mIChib29sKSAqIGFyZ2MpOworLSAgbWVtc2V0IChmb3VuZCwgJ1wwJywgc2l6ZW9mIChmb3VuZCkpOworKyAgbWVtc2V0IChmb3VuZCwgJ1wwJywgc2l6ZW9mIChib29sKSAqIGFyZ2MpOworIAorICAgLyogTGlzdCBvZiB0aGUgZmlsZXMgd2Uga2VlcC4gICovCisgICBzdHJ1Y3QgYXJtZW0gKnRvX2NvcHkgPSBOVUxMOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmdXRpbHMtZnNpemUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9lbGZ1dGlscy1mc2l6ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmYzNTNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmdXRpbHMtZnNpemUucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitUaGUgRUxGX1RfTElCIGFuZCBFTEZfVF9HTlVIQVNIIHNpemVzIHdlcmUgbWlzc2luZyBmcm9tIGZzaXplIHRhYmxlLgorCitUaGlzIGNvdWxkIGNhdXNlIGEgZmFpbHVyZSBpbiB0aGUgZWxmKl94bGF0ZXRvZiBmdW5jdGlvbi4KKworZGlmZiAtdXIgZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZXh0dHlwZXMuaCBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZXh0dHlwZXMuaAorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2V4dHR5cGVzLmgJMjAwOS0wMS0wOCAxMjo1NjozNy4wMDAwMDAwMDAgLTA4MDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZXh0dHlwZXMuaAkyMDEwLTA4LTE4IDE0OjAwOjMzLjAwMDAwMDAwMCAtMDcwMAorQEAgLTk0LDYgKzk0LDcgQEAKKyBWZXJuYXV4MzIgKEV4dF8pOworIFN5bWluZm8zMiAoRXh0Xyk7CisgTW92ZTMyIChFeHRfKTsKKytMaWIzMiAoRXh0Xyk7CisgYXV4dl90MzIgKEV4dF8pOworIAorIEVoZHI2NCAoRXh0Xyk7CitAQCAtMTEwLDYgKzExMSw3IEBACisgVmVybmF1eDY0IChFeHRfKTsKKyBTeW1pbmZvNjQgKEV4dF8pOworIE1vdmU2NCAoRXh0Xyk7CisrTGliNjQgKEV4dF8pOworIGF1eHZfdDY0IChFeHRfKTsKKyAKKyAjdW5kZWYgU1RBUlQKK2RpZmYgLXVyIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfZnNpemUuYyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9mc2l6ZS5jCistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9mc2l6ZS5jCTIwMDktMDEtMDggMTI6NTY6MzcuMDAwMDAwMDAwIC0wODAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZnNpemUuYwkyMDEwLTA4LTE4IDE0OjExOjU3LjAwMDAwMDAwMCAtMDcwMAorQEAgLTg3LDcgKzg3LDkgQEAKKyAgICAgICBbRUxGX1RfTkhEUl0JPSBzaXplb2YgKEVsZlcyKExJQkVMRkJJVFMsIEV4dF9OaGRyKSksCQkgICAgICBcCisgICAgICAgW0VMRl9UX1NZTUlORk9dCT0gc2l6ZW9mIChFbGZXMihMSUJFTEZCSVRTLCBFeHRfU3ltaW5mbykpLAkgICAgICBcCisgICAgICAgW0VMRl9UX01PVkVdCT0gc2l6ZW9mIChFbGZXMihMSUJFTEZCSVRTLCBFeHRfTW92ZSkpLAkJICAgICAgXAorLSAgICAgIFtFTEZfVF9BVVhWXQk9IHNpemVvZiAoRWxmVzIoTElCRUxGQklUUywgRXh0X2F1eHZfdCkpCisrICAgICAgW0VMRl9UX0xJQl0JPSBzaXplb2YgKEVsZlcyKExJQkVMRkJJVFMsIEV4dF9MaWIpKSwJCSAgICAgIFwKKysgICAgICBbRUxGX1RfQVVYVl0JPSBzaXplb2YgKEVsZlcyKExJQkVMRkJJVFMsIEV4dF9hdXh2X3QpKSwJICAgICAgXAorKyAgICAgIFtFTEZfVF9HTlVIQVNIXQk9IEVMRlcyKExJQkVMRkJJVFMsIEZTWl9XT1JEKQorICAgICAgIFRZUEVfU0laRVMgKDMyKQorICAgICB9LAorICAgICBbRUxGQ0xBU1M2NCAtIDFdID0gewpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZml4LWJ1aWxkLWdjYy00LjgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9maXgtYnVpbGQtZ2NjLTQuOC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTI4NjkwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZml4LWJ1aWxkLWdjYy00LjgucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorVGhpcyBwYXRjaCBmaXhlcyBhIHdhcm5pbmcgc2VlbiB3aXRoIGdjYyA0LjggKGVzcGVjaWFsbHkgb24gdWJ1bnR1IDEzLjEwKQorCit8IGFkZHIybGluZS5jOiBJbiBmdW5jdGlvbiAnaGFuZGxlX2FkZHJlc3MnOgorfCBhZGRyMmxpbmUuYzo0NTA6NzogZXJyb3I6IGZvcm1hdCAnJWEnIGV4cGVjdHMgYXJndW1lbnQgb2YgdHlwZSAnZmxvYXQgKicsIGJ1dCBhcmd1bWVudCAzIGhhcyB0eXBlICdjaGFyICoqJyBbLVdlcnJvcj1mb3JtYXQ9XQorfCAgICAgICAgaWYgKHNzY2FuZiAoc3RyaW5nLCAiKCVhW14pXSklIiBQUklpTUFYICIlbiIsICZuYW1lLCAmYWRkciwgJmkpID09IDIKK3wgICAgICAgIF4KK3wgYWRkcjJsaW5lLmM6NDUzOjc6IGVycm9yOiBmb3JtYXQgJyVhJyBleHBlY3RzIGFyZ3VtZW50IG9mIHR5cGUgJ2Zsb2F0IConLCBidXQgYXJndW1lbnQgMyBoYXMgdHlwZSAnY2hhciAqKicgWy1XZXJyb3I9Zm9ybWF0PV0KK3wgICAgICAgIHN3aXRjaCAoc3NjYW5mIChzdHJpbmcsICIlYVteLStdJW4lIiBQUklpTUFYICIlbiIsICZuYW1lLCAmaSwgJmFkZHIsICZqKSkKK3wgICAgICAgIF4KK3wgY2MxOiBhbGwgd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMKKworCislYSBpcyBvbGQgR05VIHN0eWxlIGFuZCBzaG91bGQgYmUgYWJhbmRvbmVkIGluIGZhdm9yIG9mICVtCisKK0Fsc28gc2VlCisKK2h0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTQzNjEKKwordG8gc3VwcG9ydCB0aGlzIGFzc2VydGlvbgorCitUaGlzIHBhdGNoIGlzIGFkZGVkIHZpYSByZWRoYXQtY29tcGF0aWJpbGl0eSBwYXRjaCBzbyBsZXRzIHJldmVydCB0aGlzIHBhcnQKK2hlcmUuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbQ2F1c2VkIGJ5IGFuIGVhcmxpZXIgcGF0Y2hdCisKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvYWRkcjJsaW5lLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9hZGRyMmxpbmUuYwkyMDEzLTA5LTIzIDE3OjQ2OjQ1LjUxMzU4NjUzOCAtMDcwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9hZGRyMmxpbmUuYwkyMDEzLTA5LTIzIDE3OjQ2OjQ2LjMyOTU4NjU1OCAtMDcwMAorQEAgLTQ0NywxMCArNDQ3LDEwIEBACisgICAgICAgYm9vbCBwYXJzZWQgPSBmYWxzZTsKKyAgICAgICBpbnQgaSwgajsKKyAgICAgICBjaGFyICpuYW1lID0gTlVMTDsKKy0gICAgICBpZiAoc3NjYW5mIChzdHJpbmcsICIoJWFbXildKSUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZhZGRyLCAmaSkgPT0gMgorKyAgICAgIGlmIChzc2NhbmYgKHN0cmluZywgIiglbVteKV0pJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmFkZHIsICZpKSA9PSAyCisgCSAgJiYgc3RyaW5nW2ldID09ICdcMCcpCisgCXBhcnNlZCA9IGFkanVzdF90b19zZWN0aW9uIChuYW1lLCAmYWRkciwgZHdmbCk7CistICAgICAgc3dpdGNoIChzc2NhbmYgKHN0cmluZywgIiVhW14tK10lbiUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZpLCAmYWRkciwgJmopKQorKyAgICAgIHN3aXRjaCAoc3NjYW5mIChzdHJpbmcsICIlbVteLStdJW4lIiBQUklpTUFYICIlbiIsICZuYW1lLCAmaSwgJmFkZHIsICZqKSkKKyAJeworIAlkZWZhdWx0OgorIAkgIGJyZWFrOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3Rlc3RzL2xpbmUyYWRkci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy90ZXN0cy9saW5lMmFkZHIuYwkyMDEzLTA5LTIzIDE3OjQ2OjQ1LjUyMTU4NjUzOCAtMDcwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3Rlc3RzL2xpbmUyYWRkci5jCTIwMTMtMDktMjMgMTc6NDY6NDYuMzI5NTg2NTU4IC0wNzAwCitAQCAtMTMyLDcgKzEzMiw3IEBACisgICAgIHsKKyAgICAgICBzdHJ1Y3QgYXJncyBhID0geyAuYXJnID0gYXJndltjbnRdIH07CisgCistICAgICAgc3dpdGNoIChzc2NhbmYgKGEuYXJnLCAiJWFbXjpdOiVkIiwgJmEuZmlsZSwgJmEubGluZSkpCisrICAgICAgc3dpdGNoIChzc2NhbmYgKGEuYXJnLCAiJW1bXjpdOiVkIiwgJmEuZmlsZSwgJmEubGluZSkpCisgCXsKKyAJZGVmYXVsdDoKKyAJY2FzZSAwOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZml4X2Zvcl9nY2MtNC43LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZml4X2Zvcl9nY2MtNC43LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNjM0YjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9maXhfZm9yX2djYy00LjcucGF0Y2gKQEAgLTAsMCArMSw3MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBwZW5kaW5nCitnY2MgNC43IGRvZXMgbm90IGxpa2UgcG9pbnRlciBjb252ZXJzaW9uLCBzbyBoYXZlIGEgdm9pZCAqIHRtcCB2YXIgdG8gd29yayAKK2Fyb3VuZCBmb2xsb3dpbmcgY29tcGlsYXRpb24gaXNzdWUuCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDExLzA3LzA3CisKK3wgbWQ1LmM6IEluIGZ1bmN0aW9uICdtZDVfZmluaXNoX2N0eCc6Cit8IG1kNS5jOjEwODozOiBlcnJvcjogZGVyZWZlcmVuY2luZyB0eXBlLXB1bm5lZCBwb2ludGVyIHdpbGwgYnJlYWsgc3RyaWN0LWFsaWFzaW5nIHJ1bGVzIFstV2Vycm9yPXN0cmljdC1hbGlhc2luZ10KK3wgbWQ1LmM6MTA5OjM6IGVycm9yOiBkZXJlZmVyZW5jaW5nIHR5cGUtcHVubmVkIHBvaW50ZXIgd2lsbCBicmVhayBzdHJpY3QtYWxpYXNpbmcgcnVsZXMgWy1XZXJyb3I9c3RyaWN0LWFsaWFzaW5nXQorfCBjYzE6IGFsbCB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycworfCAKK3wgbWFrZVsyXTogKioqIFttZDUub10gRXJyb3IgMQorfCBtYWtlWzJdOiAqKiogV2FpdGluZyBmb3IgdW5maW5pc2hlZCBqb2JzLi4uLgorfCBzaGExLmM6IEluIGZ1bmN0aW9uICdzaGExX2ZpbmlzaF9jdHgnOgorfCBzaGExLmM6MTA5OjM6IGVycm9yOiBkZXJlZmVyZW5jaW5nIHR5cGUtcHVubmVkIHBvaW50ZXIgd2lsbCBicmVhayBzdHJpY3QtYWxpYXNpbmcgcnVsZXMgWy1XZXJyb3I9c3RyaWN0LWFsaWFzaW5nXQorfCBzaGExLmM6MTExOjM6IGVycm9yOiBkZXJlZmVyZW5jaW5nIHR5cGUtcHVubmVkIHBvaW50ZXIgd2lsbCBicmVhayBzdHJpY3QtYWxpYXNpbmcgcnVsZXMgWy1XZXJyb3I9c3RyaWN0LWFsaWFzaW5nXQorfCBjYzE6IGFsbCB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycworfCAKK3wgbWFrZVsyXTogKioqIFtzaGExLm9dIEVycm9yIDEKKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYi9tZDUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliL21kNS5jCisrKysgZWxmdXRpbHMtMC4xNDgvbGliL21kNS5jCitAQCAtOTUsNiArOTUsNyBAQCBtZDVfZmluaXNoX2N0eCAoY3R4LCByZXNidWYpCisgICAvKiBUYWtlIHlldCB1bnByb2Nlc3NlZCBieXRlcyBpbnRvIGFjY291bnQuICAqLworICAgbWQ1X3VpbnQzMiBieXRlcyA9IGN0eC0+YnVmbGVuOworICAgc2l6ZV90IHBhZDsKKysgIHZvaWQgKiB0bXA7CisgCisgICAvKiBOb3cgY291bnQgcmVtYWluaW5nIGJ5dGVzLiAgKi8KKyAgIGN0eC0+dG90YWxbMF0gKz0gYnl0ZXM7CitAQCAtMTA1LDkgKzEwNiwxMCBAQCBtZDVfZmluaXNoX2N0eCAoY3R4LCByZXNidWYpCisgICBtZW1jcHkgKCZjdHgtPmJ1ZmZlcltieXRlc10sIGZpbGxidWYsIHBhZCk7CisgCisgICAvKiBQdXQgdGhlIDY0LWJpdCBmaWxlIGxlbmd0aCBpbiAqYml0cyogYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLiAgKi8KKy0gICoobWQ1X3VpbnQzMiAqKSAmY3R4LT5idWZmZXJbYnl0ZXMgKyBwYWRdID0gU1dBUCAoY3R4LT50b3RhbFswXSA8PCAzKTsKKy0gICoobWQ1X3VpbnQzMiAqKSAmY3R4LT5idWZmZXJbYnl0ZXMgKyBwYWQgKyA0XSA9IFNXQVAgKChjdHgtPnRvdGFsWzFdIDw8IDMpIHwKKy0JCQkJCQkJKGN0eC0+dG90YWxbMF0gPj4gMjkpKTsKKysgIHRtcCA9ICZjdHgtPmJ1ZmZlcltieXRlcyArIHBhZF07CisrICAqKG1kNV91aW50MzIgKikgdG1wID0gU1dBUCAoY3R4LT50b3RhbFswXSA8PCAzKTsKKysgIHRtcCA9ICZjdHgtPmJ1ZmZlcltieXRlcyArIHBhZCArIDRdOworKyAgKihtZDVfdWludDMyICopIHRtcCA9IFNXQVAgKChjdHgtPnRvdGFsWzFdIDw8IDMpIHwgKGN0eC0+dG90YWxbMF0gPj4gMjkpKTsKKyAKKyAgIC8qIFByb2Nlc3MgbGFzdCBieXRlcy4gICovCisgICBtZDVfcHJvY2Vzc19ibG9jayAoY3R4LT5idWZmZXIsIGJ5dGVzICsgcGFkICsgOCwgY3R4KTsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWIvc2hhMS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWIvc2hhMS5jCisrKysgZWxmdXRpbHMtMC4xNDgvbGliL3NoYTEuYworQEAgLTk2LDYgKzk2LDcgQEAgc2hhMV9maW5pc2hfY3R4IChjdHgsIHJlc2J1ZikKKyAgIC8qIFRha2UgeWV0IHVucHJvY2Vzc2VkIGJ5dGVzIGludG8gYWNjb3VudC4gICovCisgICBzaGExX3VpbnQzMiBieXRlcyA9IGN0eC0+YnVmbGVuOworICAgc2l6ZV90IHBhZDsKKysgIHZvaWQgKiB0bXA7CisgCisgICAvKiBOb3cgY291bnQgcmVtYWluaW5nIGJ5dGVzLiAgKi8KKyAgIGN0eC0+dG90YWxbMF0gKz0gYnl0ZXM7CitAQCAtMTA2LDkgKzEwNywxMCBAQCBzaGExX2ZpbmlzaF9jdHggKGN0eCwgcmVzYnVmKQorICAgbWVtY3B5ICgmY3R4LT5idWZmZXJbYnl0ZXNdLCBmaWxsYnVmLCBwYWQpOworIAorICAgLyogUHV0IHRoZSA2NC1iaXQgZmlsZSBsZW5ndGggaW4gKmJpdHMqIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gICovCistICAqKHNoYTFfdWludDMyICopICZjdHgtPmJ1ZmZlcltieXRlcyArIHBhZF0gPSBTV0FQICgoY3R4LT50b3RhbFsxXSA8PCAzKSB8CistCQkJCQkJICAgICAoY3R4LT50b3RhbFswXSA+PiAyOSkpOworLSAgKihzaGExX3VpbnQzMiAqKSAmY3R4LT5idWZmZXJbYnl0ZXMgKyBwYWQgKyA0XSA9IFNXQVAgKGN0eC0+dG90YWxbMF0gPDwgMyk7CisrICB0bXAgPSAmY3R4LT5idWZmZXJbYnl0ZXMgKyBwYWRdOworKyAgKihzaGExX3VpbnQzMiAqKSB0bXAgPSBTV0FQICgoY3R4LT50b3RhbFsxXSA8PCAzKSB8IChjdHgtPnRvdGFsWzBdID4+IDI5KSk7CisrICB0bXAgPSAmY3R4LT5idWZmZXJbYnl0ZXMgKyBwYWQgKyA0XTsKKysgICooc2hhMV91aW50MzIgKikgdG1wID0gU1dBUCAoY3R4LT50b3RhbFswXSA8PCAzKTsKKyAKKyAgIC8qIFByb2Nlc3MgbGFzdCBieXRlcy4gICovCisgICBzaGExX3Byb2Nlc3NfYmxvY2sgKGN0eC0+YnVmZmVyLCBieXRlcyArIHBhZCArIDgsIGN0eCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9ocHBhX2JhY2tlbmQuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2hwcGFfYmFja2VuZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NmI5N2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9ocHBhX2JhY2tlbmQuZGlmZgpAQCAtMCwwICsxLDgwMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvcGFyaXNjX2luaXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL3BhcmlzY19pbml0LmMJMjAxMC0wNC0yNCAxMDoxMDo1MC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsNzQgQEAKKysvKiBJbml0aWFsaXphdGlvbiBvZiBQQS1SSVNDIHNwZWNpZmljIGJhY2tlbmQgbGlicmFyeS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUsIDIwMDYgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMi4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNkZWZpbmUgQkFDS0VORAkJcGFyaXNjXworKyNkZWZpbmUgUkVMT0NfUFJFRklYCVJfUEFSSVNDXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrI2luY2x1ZGUgImxpYmVibF9wYXJpc2MuaCIKKysKKysvKiBUaGlzIGRlZmluZXMgdGhlIGNvbW1vbiByZWxvYyBob29rcyBiYXNlZCBvbiBwYXJpc2NfcmVsb2MuZGVmLiAgKi8KKysjaW5jbHVkZSAiY29tbW9uLXJlbG9jLmMiCisrCisrCisrY29uc3QgY2hhciAqCisrcGFyaXNjX2luaXQgKGVsZiwgbWFjaGluZSwgZWgsIGVobGVuKQorKyAgICAgRWxmICplbGYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgR0VsZl9IYWxmIG1hY2hpbmUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgRWJsICplaDsKKysgICAgIHNpemVfdCBlaGxlbjsKKyt7CisrICBpbnQgcGE2NCA9IDA7CisrCisrICAvKiBDaGVjayB3aGV0aGVyIHRoZSBFbGZfQkggb2JqZWN0IGhhcyBhIHN1ZmZpY2VudCBzaXplLiAgKi8KKysgIGlmIChlaGxlbiA8IHNpemVvZiAoRWJsKSkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICBpZiAoZWxmKSB7CisrICAgIEdFbGZfRWhkciBlaGRyX21lbTsKKysgICAgR0VsZl9FaGRyICplaGRyID0gZ2VsZl9nZXRlaGRyIChlbGYsICZlaGRyX21lbSk7CisrICAgIGlmIChlaGRyICYmIChlaGRyLT5lX2ZsYWdzICYgRUZfUEFSSVNDX1dJREUpKQorKyAgICAgIHBhNjQgPSAxOworKyAgfQorKyAgLyogV2UgaGFuZGxlIGl0LiAgKi8KKysgIGVoLT5uYW1lID0gIlBBLVJJU0MiOworKyAgcGFyaXNjX2luaXRfcmVsb2MgKGVoKTsKKysgIEhPT0sgKGVoLCByZWxvY19zaW1wbGVfdHlwZSk7CisrICBIT09LIChlaCwgbWFjaGluZV9mbGFnX2NoZWNrKTsKKysgIEhPT0sgKGVoLCBzeW1ib2xfdHlwZV9uYW1lKTsKKysgIEhPT0sgKGVoLCBzZWdtZW50X3R5cGVfbmFtZSk7CisrICBIT09LIChlaCwgc2VjdGlvbl90eXBlX25hbWUpOworKyAgSE9PSyAoZWgsIHJlZ2lzdGVyX2luZm8pOworKyAgaWYgKHBhNjQpCisrICAgIGVoLT5yZXR1cm5fdmFsdWVfbG9jYXRpb24gPSBwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXzY0OworKyAgZWxzZQorKyAgICBlaC0+cmV0dXJuX3ZhbHVlX2xvY2F0aW9uID0gcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8zMjsKKysKKysgIHJldHVybiBNT0RWRVJTSU9OOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9wYXJpc2NfcmVncy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvcGFyaXNjX3JlZ3MuYwkyMDEwLTA0LTI0IDEwOjEwOjUwLjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSwxNTkgQEAKKysvKiBSZWdpc3RlciBuYW1lcyBhbmQgbnVtYmVycyBmb3IgUEEtUklTQyBEV0FSRi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGR3YXJmLmg+CisrCisrI2RlZmluZSBCQUNLRU5EIHBhcmlzY18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworK3NzaXplX3QKKytwYXJpc2NfcmVnaXN0ZXJfaW5mbyAoRWJsICplYmwsIGludCByZWdubywgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sCisrCQkgICAgIGNvbnN0IGNoYXIgKipwcmVmaXgsIGNvbnN0IGNoYXIgKipzZXRuYW1lLAorKwkJICAgICBpbnQgKmJpdHMsIGludCAqdHlwZSkKKyt7CisrICBpbnQgcGE2NCA9IDA7CisrCisrICBpZiAoZWJsLT5lbGYpIHsKKysgICAgR0VsZl9FaGRyIGVoZHJfbWVtOworKyAgICBHRWxmX0VoZHIgKmVoZHIgPSBnZWxmX2dldGVoZHIgKGVibC0+ZWxmLCAmZWhkcl9tZW0pOworKyAgICBpZiAoZWhkci0+ZV9mbGFncyAmIEVGX1BBUklTQ19XSURFKQorKyAgICAgIHBhNjQgPSAxOworKyAgfQorKworKyAgaW50IG5yZWdzID0gcGE2NCA/IDEyNyA6IDEyODsKKysKKysgIGlmIChuYW1lID09IE5VTEwpCisrICAgIHJldHVybiBucmVnczsKKysKKysgIGlmIChyZWdubyA8IDAgfHwgcmVnbm8gPj0gbnJlZ3MgfHwgbmFtZWxlbiA8IDYpCisrICAgIHJldHVybiAtMTsKKysKKysgICpwcmVmaXggPSAiJSI7CisrCisrICBpZiAocmVnbm8gPCAzMikKKysgIHsKKysgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgaWYgKHBhNjQpCisrICAgIHsKKysJKmJpdHMgPSA2NDsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgCSpiaXRzID0gMzI7CisrICAgIH0KKysgIH0KKysgIGVsc2UgaWYgKHJlZ25vID09IDMyKQorKyAgeworKyAgICAqc2V0bmFtZSA9ICJzcGVjaWFsIjsKKysgICAgaWYgKHBhNjQpCisrICAgIHsKKysJKmJpdHMgPSA2OworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAJKmJpdHMgPSA1OworKyAgICB9CisrICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgfQorKyAgZWxzZQorKyAgeworKyAgICAqc2V0bmFtZSA9ICJGUFUiOworKyAgICAqdHlwZSA9IERXX0FURV9mbG9hdDsKKysgICAgaWYgKHBhNjQpCisrICAgIHsKKysJKmJpdHMgPSA2NDsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgCSpiaXRzID0gMzI7CisrICAgIH0KKysgIH0KKysKKysgIGlmIChyZWdubyA8IDMzKSB7CisrICAgIHN3aXRjaCAocmVnbm8pCisrICAgICAgeworKyAgICAgIGNhc2UgMCAuLi4gOToKKysgICAgICAgIG5hbWVbMF0gPSAncic7CisrICAgICAgICBuYW1lWzFdID0gcmVnbm8gKyAnMCc7CisrICAgICAgICBuYW1lbGVuID0gMjsKKysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2UgMTAgLi4uIDMxOgorKyAgICAgICAgbmFtZVswXSA9ICdyJzsKKysgICAgICAgIG5hbWVbMV0gPSByZWdubyAvIDEwICsgJzAnOworKyAgICAgICAgbmFtZVsyXSA9IHJlZ25vICUgMTAgKyAnMCc7CisrICAgICAgICBuYW1lbGVuID0gMzsKKysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2UgMzI6CisrCSpwcmVmaXggPSBOVUxMOworKwluYW1lWzBdID0gJ1MnOworKwluYW1lWzFdID0gJ0EnOworKwluYW1lWzJdID0gJ1InOworKwluYW1lbGVuID0gMzsKKysJYnJlYWs7CisrICAgICAgfQorKyAgfQorKyAgZWxzZSB7CisrICAgIGlmIChwYTY0ICYmICgocmVnbm8gLSA3MikgJSAyKSkgeworKyAgICAgICpzZXRuYW1lID0gTlVMTDsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgICBzd2l0Y2ggKHJlZ25vKQorKyAgICAgIHsKKysgICAgICBjYXNlIDcyICsgMCAuLi4gNzIgKyAxMToKKysgICAgICAgIG5hbWVbMF0gPSAnZic7CisrCW5hbWVbMV0gPSAncic7CisrICAgICAgICBuYW1lWzJdID0gKHJlZ25vICsgOCAtIDcyKSAvIDIgKyAnMCc7CisrICAgICAgICBuYW1lbGVuID0gMzsKKysgICAgICAgIGlmICgocmVnbm8gKyA4IC0gNzIpICUgMikgeworKwkgIG5hbWVbM10gPSAnUic7CisrCSAgbmFtZWxlbisrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgICAgY2FzZSA3MiArIDEyIC4uLiA3MiArIDU1OgorKyAgICAgICAgbmFtZVswXSA9ICdmJzsKKysJbmFtZVsxXSA9ICdyJzsKKysgICAgICAgIG5hbWVbMl0gPSAocmVnbm8gKyA4IC0gNzIpIC8gMiAvIDEwICsgJzAnOworKyAgICAgICAgbmFtZVszXSA9IChyZWdubyArIDggLSA3MikgLyAyICUgMTAgKyAnMCc7CisrICAgICAgICBuYW1lbGVuID0gNDsKKysgICAgICAgIGlmICgocmVnbm8gKyA4IC0gNzIpICUgMikgeworKwkgIG5hbWVbNF0gPSAnUic7CisrCSAgbmFtZWxlbisrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysgICAgICAgICpzZXRuYW1lID0gTlVMTDsKKysgICAgICAgIHJldHVybiAwOworKyAgICAgIH0KKysgIH0KKysgIG5hbWVbbmFtZWxlbisrXSA9ICdcMCc7CisrICByZXR1cm4gbmFtZWxlbjsKKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvcGFyaXNjX3JlbG9jLmRlZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL3BhcmlzY19yZWxvYy5kZWYJMjAxMC0wNC0yNCAxMDoxMDo1MC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsMTI4IEBACisrLyogTGlzdCB0aGUgcmVsb2NhdGlvbiB0eXBlcyBmb3IgUEEtUklTQy4gIC0qLSBDIC0qLQorKyAgIENvcHlyaWdodCAoQykgMjAwNSBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrLyoJICAgIE5BTUUsCQlSRUx8RVhFQ3xEWU4JKi8KKysKKytSRUxPQ19UWVBFIChOT05FLAkJRVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoRElSMzIsCQlSRUx8RVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoRElSMjFMLAkJUkVMfEVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKERJUjE3UiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxN0YsCQlSRUwpCisrUkVMT0NfVFlQRSAoRElSMTRSLAkJUkVMfERZTikKKytSRUxPQ19UWVBFIChQQ1JFTDMyLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBDUkVMMjFMLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBDUkVMMTdSLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBDUkVMMTdGLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBDUkVMMTRSLAkJUkVMfEVYRUMpCisrUkVMT0NfVFlQRSAoRFBSRUwyMUwsCQlSRUwpCisrUkVMT0NfVFlQRSAoRFBSRUwxNFdSLAkJUkVMKQorK1JFTE9DX1RZUEUgKERQUkVMMTREUiwgICAgICAgICAgUkVMKQorK1JFTE9DX1RZUEUgKERQUkVMMTRSLAkJUkVMKQorK1JFTE9DX1RZUEUgKEdQUkVMMjFMLAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE0UiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkYyMUwsCQlSRUwpCisrUkVMT0NfVFlQRSAoTFRPRkYxNFIsCQlSRUwpCisrUkVMT0NfVFlQRSAoRExUSU5EMTRGLAkJMCkKKytSRUxPQ19UWVBFIChTRVRCQVNFLAkJMCkKKytSRUxPQ19UWVBFIChTRUNSRUwzMiwJCVJFTCkKKytSRUxPQ19UWVBFIChCQVNFUkVMMjFMLAkJMCkKKytSRUxPQ19UWVBFIChCQVNFUkVMMTdSLAkJMCkKKytSRUxPQ19UWVBFIChCQVNFUkVMMTRSLAkJMCkKKytSRUxPQ19UWVBFIChTRUdCQVNFLAkJMCkKKytSRUxPQ19UWVBFIChTRUdSRUwzMiwJCVJFTCkKKytSRUxPQ19UWVBFIChQTFRPRkYyMUwsCQkwKQorK1JFTE9DX1RZUEUgKFBMVE9GRjE0UiwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTRGLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMzIsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjIxTCwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTRSLAkwKQorK1JFTE9DX1RZUEUgKEZQVFI2NCwJCTApCisrUkVMT0NfVFlQRSAoUExBQkVMMzIsCQlSRUx8RFlOKQorK1JFTE9DX1RZUEUgKFBDUkVMNjQsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMjJDLAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDIyRiwJCTApCisrUkVMT0NfVFlQRSAoUENSRUwxNFdSLAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDE0RFIsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMTZGLAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDE2V0YsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMTZERiwJCTApCisrUkVMT0NfVFlQRSAoRElSNjQsCQlSRUx8RFlOKQorK1JFTE9DX1RZUEUgKERJUjE0V1IsCQlSRUwpCisrUkVMT0NfVFlQRSAoRElSMTREUiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxNkYsCQlSRUwpCisrUkVMT0NfVFlQRSAoRElSMTZXRiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxNkRGLAkJUkVMKQorK1JFTE9DX1RZUEUgKEdQUkVMNjQsCQkwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTRXUiwJCTApCisrUkVMT0NfVFlQRSAoR1BSRUwxNERSLAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE2RiwJCTApCisrUkVMT0NfVFlQRSAoR1BSRUwxNldGLAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE2REYsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGNjQsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGMTRXUiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkYxNERSLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjE2RiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkYxNldGLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjE2REYsCQkwKQorK1JFTE9DX1RZUEUgKFNFQ1JFTDY0LAkJMCkKKytSRUxPQ19UWVBFIChCQVNFUkVMMTRXUiwJMCkKKytSRUxPQ19UWVBFIChCQVNFUkVMMTREUiwJMCkKKytSRUxPQ19UWVBFIChTRUdSRUw2NCwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTRXUiwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTREUiwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTZGLAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNldGLAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNkRGLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSNjQsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjE0V1IsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjE0RFIsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjE2RiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTZXRiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTZERiwJMCkKKytSRUxPQ19UWVBFIChDT1BZLAkJRVhFQykKKytSRUxPQ19UWVBFIChJUExULAkJRVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoRVBMVCwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwzMiwJCURZTikKKytSRUxPQ19UWVBFIChUUFJFTDIxTCwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwxNFIsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMjFMLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTRSLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTRGLAkwKQorK1JFTE9DX1RZUEUgKFRQUkVMNjQsCQkwKQorK1JFTE9DX1RZUEUgKFRQUkVMMTRXUiwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwxNERSLAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDE2RiwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwxNldGLAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDE2REYsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQNjQsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTRXUiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDE0RFIsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNkYsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNldGLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTZERiwJMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQTU9EMzIsCURZTikKKytSRUxPQ19UWVBFIChUTFNfRFRQTU9ENjQsCURZTikKKysKKysjZGVmaW5lIE5PX1JFTEFUSVZFX1JFTE9DICAgICAgIDEKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9wYXJpc2NfcmV0dmFsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9wYXJpc2NfcmV0dmFsLmMJMjAxMC0wNC0yNCAxMDoxMDo1MC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsMjEzIEBACisrLyogRnVuY3Rpb24gcmV0dXJuIHZhbHVlIGxvY2F0aW9uIGZvciBMaW51eC9QQS1SSVNDIEFCSS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDUgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPGR3YXJmLmg+CisrCisrI2RlZmluZSBCQUNLRU5EIHBhcmlzY18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKyNpbmNsdWRlICJsaWJlYmxfcGFyaXNjLmgiCisrCisrLyogJXIyOCwgb3IgcGFpciAlcjI4LCAlcjI5LiAgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZzMyW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMjggfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMjkgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgfTsKKysKKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzI4IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzI5IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgIH07CisrI2RlZmluZSBubG9jX2ludHJlZwkxCisrI2RlZmluZSBubG9jX2ludHJlZ3BhaXIJNAorKworKy8qICVmcjRMLCBvciBwYWlyICVmcjRMLCAlZnI0UiBvbiBwYS0zMiAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfZnByZWczMltdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSA3MiB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gNzMgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfZnByZWczMiAyCisrI2RlZmluZSBubG9jX2ZwcmVncGFpcjMyIDQKKysKKysvKiAkZnI0ICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19mcHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSA3MiB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfZnByZWcgIDEKKysKKysjaWYgMAorKy8qIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3R1cmUgYW5kIGlzIGFjdHVhbGx5IHN0b3JlZCBpbiBzdGFjayBzcGFjZQorKyAgIHBhc3NlZCBpbiBhIGhpZGRlbiBhcmd1bWVudCBieSB0aGUgY2FsbGVyLiBBZGRyZXNzIG9mIHRoZSBsb2NhdGlvbiBpcyBzdG9yZWQKKysgICBpbiAlcjI4IGJlZm9yZSBmdW5jdGlvbiBjYWxsLCBidXQgaXQgbWF5IGJlIGNoYW5nZWQgYnkgZnVuY3Rpb24uICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19hZ2dyZWdhdGVbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9icmVnMjggfSwKKysgIH07CisrI2RlZmluZSBubG9jX2FnZ3JlZ2F0ZSAxCisrI2VuZGlmCisrCisrc3RhdGljIGludAorK3BhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3AsIGludCBwYTY0KQorK3sKKysgIER3YXJmX1dvcmQgcmVnc2l6ZSA9IHBhNjQgPyA4IDogNDsKKysKKysgIC8qIFN0YXJ0IHdpdGggdGhlIGZ1bmN0aW9uJ3MgdHlwZSwgYW5kIGdldCB0aGUgRFdfQVRfdHlwZSBhdHRyaWJ1dGUsCisrICAgICB3aGljaCBpcyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlLiAgKi8KKysKKysgIER3YXJmX0F0dHJpYnV0ZSBhdHRyX21lbTsKKysgIER3YXJmX0F0dHJpYnV0ZSAqYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlIChmdW5jdHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysgIGlmIChhdHRyID09IE5VTEwpCisrICAgIC8qIFRoZSBmdW5jdGlvbiBoYXMgbm8gcmV0dXJuIHZhbHVlLCBsaWtlIGEgYHZvaWQnIGZ1bmN0aW9uIGluIEMuICAqLworKyAgICByZXR1cm4gMDsKKysKKysgIER3YXJmX0RpZSBkaWVfbWVtOworKyAgRHdhcmZfRGllICp0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysgIGludCB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKworKyAgLyogRm9sbG93IHR5cGVkZWZzIGFuZCBxdWFsaWZpZXJzIHRvIGdldCB0byB0aGUgYWN0dWFsIHR5cGUuICAqLworKyAgd2hpbGUgKHRhZyA9PSBEV19UQUdfdHlwZWRlZgorKwkgfHwgdGFnID09IERXX1RBR19jb25zdF90eXBlIHx8IHRhZyA9PSBEV19UQUdfdm9sYXRpbGVfdHlwZQorKwkgfHwgdGFnID09IERXX1RBR19yZXN0cmljdF90eXBlIHx8IHRhZyA9PSBEV19UQUdfbXV0YWJsZV90eXBlKQorKyAgICB7CisrICAgICAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKyAgICAgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKyAgICAgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrICAgIH0KKysKKysgIHN3aXRjaCAodGFnKQorKyAgICB7CisrICAgIGNhc2UgLTE6CisrICAgICAgcmV0dXJuIC0xOworKworKyAgICBjYXNlIERXX1RBR19zdWJyYW5nZV90eXBlOgorKyAgICAgIGlmICghIGR3YXJmX2hhc2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9ieXRlX3NpemUpKQorKwl7CisrCSAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKwkgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKwkgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrCX0KKysgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworKworKyAgICBjYXNlIERXX1RBR19iYXNlX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2VudW1lcmF0aW9uX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3BvaW50ZXJfdHlwZToKKysgICAgY2FzZSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlOgorKyAgICAgIHsKKysgICAgICAgIER3YXJmX1dvcmQgc2l6ZTsKKysJaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2J5dGVfc2l6ZSwKKysJCQkJCSAmYXR0cl9tZW0pLCAmc2l6ZSkgIT0gMCkKKysJICB7CisrCSAgICBpZiAodGFnID09IERXX1RBR19wb2ludGVyX3R5cGUgfHwgdGFnID09IERXX1RBR19wdHJfdG9fbWVtYmVyX3R5cGUpCisrCSAgICAgIHNpemUgPSA0OworKwkgICAgZWxzZQorKwkgICAgICByZXR1cm4gLTE7CisrCSAgfQorKwlpZiAodGFnID09IERXX1RBR19iYXNlX3R5cGUpCisrCSAgeworKwkgICAgRHdhcmZfV29yZCBlbmNvZGluZzsKKysJICAgIGlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9lbmNvZGluZywKKysJCQkJCSAgICAgJmF0dHJfbWVtKSwgJmVuY29kaW5nKSAhPSAwKQorKwkgICAgICByZXR1cm4gLTE7CisrCisrCSAgICBpZiAoZW5jb2RpbmcgPT0gRFdfQVRFX2Zsb2F0KQorKwkgICAgICB7CisrCQlpZiAocGE2NCkgeworKwkJICAqbG9jcCA9IGxvY19mcHJlZzsKKysJCSAgaWYgKHNpemUgPD0gOCkKKysJCSAgICAgIHJldHVybiBubG9jX2ZwcmVnOworKwkJfQorKwkJZWxzZSB7CisrCQkgICpsb2NwID0gbG9jX2ZwcmVnMzI7CisrCQkgIGlmIChzaXplIDw9IDQpCisrCQkgICAgcmV0dXJuIG5sb2NfZnByZWczMjsKKysJCSAgZWxzZSBpZiAoc2l6ZSA8PSA4KQorKwkJICAgIHJldHVybiBubG9jX2ZwcmVncGFpcjMyOworKwkJfQorKwkJZ290byBhZ2dyZWdhdGU7CisrCSAgICAgIH0KKysJICB9CisrCWlmIChwYTY0KQorKwkgICpsb2NwID0gbG9jX2ludHJlZzsKKysJZWxzZQorKwkgICpsb2NwID0gbG9jX2ludHJlZzMyOworKwlpZiAoc2l6ZSA8PSByZWdzaXplKQorKwkgIHJldHVybiBubG9jX2ludHJlZzsKKysJaWYgKHNpemUgPD0gMiAqIHJlZ3NpemUpCisrCSAgcmV0dXJuIG5sb2NfaW50cmVncGFpcjsKKysKKysJLyogRWxzZSBmYWxsIHRocm91Z2guICAqLworKyAgICAgIH0KKysKKysgICAgY2FzZSBEV19UQUdfc3RydWN0dXJlX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2NsYXNzX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3VuaW9uX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2FycmF5X3R5cGU6CisrICAgIGFnZ3JlZ2F0ZTogeworKyAgICAgICAgRHdhcmZfV29yZCBzaXplOworKwlpZiAoZHdhcmZfYWdncmVnYXRlX3NpemUgKHR5cGVkaWUsICZzaXplKSAhPSAwKQorKwkgIHJldHVybiAtMTsKKysJaWYgKHBhNjQpCisrICAgICAgICAgICpsb2NwID0gbG9jX2ludHJlZzsKKysJZWxzZQorKwkgICpsb2NwID0gbG9jX2ludHJlZzMyOworKyAgICAgICAgaWYgKHNpemUgPD0gcmVnc2l6ZSkKKysJICByZXR1cm4gbmxvY19pbnRyZWc7CisrICAgICAgICBpZiAoc2l6ZSA8PSAyICogcmVnc2l6ZSkKKysJICByZXR1cm4gbmxvY19pbnRyZWdwYWlyOworKyNpZiAwCisrCS8qIHRoZXJlIHNob3VsZCBiZSBzb21lIHdheSB0byBrbm93IHRoaXMgbG9jYXRpb24uLi4gQnV0IEkgZG8gbm90IHNlZSBpdC4gKi8KKysgICAgICAgICpsb2NwID0gbG9jX2FnZ3JlZ2F0ZTsKKysgICAgICAgIHJldHVybiBubG9jX2FnZ3JlZ2F0ZTsKKysjZW5kaWYKKysJLyogZmFsbCB0aHJvdWdoLiAgKi8KKysgICAgICB9CisrICAgIH0KKysKKysgIC8qIFhYWCBXZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9ycyBmcm9tIGVibCBjYWxscy4KKysgICAgIFRoaXMgdmFsdWUgbWVhbnMgd2UgZG8gbm90IHVuZGVyc3RhbmQgdGhlIHR5cGUsIGJ1dCBpdCBpcyB3ZWxsLWZvcm1lZAorKyAgICAgRFdBUkYgYW5kIG1pZ2h0IGJlIHZhbGlkLiAgKi8KKysgIHJldHVybiAtMjsKKyt9CisrCisraW50CisrcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8zMiAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorK3sKKysgIHJldHVybiBwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXyAoZnVuY3R5cGVkaWUsIGxvY3AsIDApOworK30KKysKKytpbnQKKytwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXzY0IChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisreworKyAgcmV0dXJuIHBhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChmdW5jdHlwZWRpZSwgbG9jcCwgMSk7CisrfQorKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL3BhcmlzY19zeW1ib2wuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL3BhcmlzY19zeW1ib2wuYwkyMDEwLTA0LTI0IDEwOjEwOjUwLjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSwxMTIgQEAKKysvKiBQQS1SSVNDIHNwZWNpZmljIHN5bWJvbGljIG5hbWUgaGFuZGxpbmcuCisrICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA1IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDIuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8ZWxmLmg+CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKworKyNkZWZpbmUgQkFDS0VORAkJcGFyaXNjXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrY29uc3QgY2hhciAqCisrcGFyaXNjX3NlZ21lbnRfdHlwZV9uYW1lIChpbnQgc2VnbWVudCwgY2hhciAqYnVmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKysJCQlzaXplX3QgbGVuIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKKyt7CisrICBzd2l0Y2ggKHNlZ21lbnQpCisrICAgIHsKKysgICAgY2FzZSBQVF9QQVJJU0NfQVJDSEVYVDoKKysgICAgICByZXR1cm4gIlBBUklTQ19BUkNIRVhUIjsKKysgICAgY2FzZSBQVF9QQVJJU0NfVU5XSU5EOgorKyAgICAgIHJldHVybiAiUEFSSVNDX1VOV0lORCI7CisrICAgIGRlZmF1bHQ6CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgIHJldHVybiBOVUxMOworK30KKysKKysvKiBSZXR1cm4gc3ltYm9saWMgcmVwcmVzZW50YXRpb24gb2Ygc3ltYm9sIHR5cGUuICAqLworK2NvbnN0IGNoYXIgKgorK3BhcmlzY19zeW1ib2xfdHlwZV9uYW1lKGludCBzeW1ib2wsIGNoYXIgKmJ1ZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrICAgIHNpemVfdCBsZW4gX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpKQorK3sKKysJaWYgKHN5bWJvbCA9PSBTVFRfUEFSSVNDX01JTExJQ09ERSkKKysJICByZXR1cm4gIlBBUklTQ19NSUxMSSI7CisrCXJldHVybiBOVUxMOworK30KKysKKysvKiBSZXR1cm4gc3ltYm9saWMgcmVwcmVzZW50YXRpb24gb2Ygc2VjdGlvbiB0eXBlLiAgKi8KKytjb25zdCBjaGFyICoKKytwYXJpc2Nfc2VjdGlvbl90eXBlX25hbWUgKGludCB0eXBlLAorKwkJCWNoYXIgKmJ1ZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrCQkJc2l6ZV90IGxlbiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkpCisreworKyAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAgIGNhc2UgU0hUX1BBUklTQ19FWFQ6CisrICAgICAgcmV0dXJuICJQQVJJU0NfRVhUIjsKKysgICAgY2FzZSBTSFRfUEFSSVNDX1VOV0lORDoKKysgICAgICByZXR1cm4gIlBBUklTQ19VTldJTkQiOworKyAgICBjYXNlIFNIVF9QQVJJU0NfRE9DOgorKyAgICAgIHJldHVybiAiUEFSSVNDX0RPQyI7CisrICAgIH0KKysKKysgIHJldHVybiBOVUxMOworK30KKysKKysvKiBDaGVjayB3aGV0aGVyIG1hY2hpbmUgZmxhZ3MgYXJlIHZhbGlkLiAgKi8KKytib29sCisrcGFyaXNjX21hY2hpbmVfZmxhZ19jaGVjayAoR0VsZl9Xb3JkIGZsYWdzKQorK3sKKysgIGlmIChmbGFncyAmfiAoRUZfUEFSSVNDX1RSQVBOSUwgfCBFRl9QQVJJU0NfRVhUIHwgRUZfUEFSSVNDX0xTQiB8CisrCUVGX1BBUklTQ19XSURFIHwgRUZfUEFSSVNDX05PX0tBQlAgfAorKwlFRl9QQVJJU0NfTEFaWVNXQVAgfCBFRl9QQVJJU0NfQVJDSCkpCisrICAgIHJldHVybiAwOworKworKyAgR0VsZl9Xb3JkIGFyY2ggPSBmbGFncyAmIEVGX1BBUklTQ19BUkNIOworKworKyAgcmV0dXJuICgoYXJjaCA9PSBFRkFfUEFSSVNDXzFfMCkgfHwgKGFyY2ggPT0gRUZBX1BBUklTQ18xXzEpIHx8CisrICAgICAgKGFyY2ggPT0gRUZBX1BBUklTQ18yXzApKTsKKyt9CisrCisrLyogQ2hlY2sgZm9yIHRoZSBzaW1wbGUgcmVsb2MgdHlwZXMuICAqLworK0VsZl9UeXBlCisrcGFyaXNjX3JlbG9jX3NpbXBsZV90eXBlIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksIGludCB0eXBlKQorK3sKKysgIHN3aXRjaCAodHlwZSkKKysgICAgeworKyAgICBjYXNlIFJfUEFSSVNDX0RJUjY0OgorKyAgICBjYXNlIFJfUEFSSVNDX1NFQ1JFTDY0OgorKyAgICAgIHJldHVybiBFTEZfVF9YV09SRDsKKysgICAgY2FzZSBSX1BBUklTQ19ESVIzMjoKKysgICAgY2FzZSBSX1BBUklTQ19TRUNSRUwzMjoKKysgICAgICByZXR1cm4gRUxGX1RfV09SRDsKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gRUxGX1RfTlVNOworKyAgICB9CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL2xpYmVibF9wYXJpc2MuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL2xpYmVibF9wYXJpc2MuaAkyMDEwLTA0LTI0IDEwOjEwOjUwLjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw5IEBACisrI2lmbmRlZiBfTElCRUJMX0hQUEFfSAorKyNkZWZpbmUgX0xJQkVCTF9IUFBBX0ggMQorKworKyNpbmNsdWRlIDxsaWJkdy5oPgorKworK2V4dGVybiBpbnQgcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8zMihEd2FyZl9EaWUgKiwgY29uc3QgRHdhcmZfT3AgKipsb2NwKTsKKytleHRlcm4gaW50IHBhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fNjQoRHdhcmZfRGllICosIGNvbnN0IER3YXJmX09wICoqbG9jcCk7CisrCisrI2VuZGlmCitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0Ni5vcmlnL2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTAtMDQtMjQgMTA6MTA6NDEuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxMC0wNC0yNCAxMDoxMDo1MC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yOSwxMSArMjksMTEgQEAKKyAJICAgLUkkKHRvcF9zcmNkaXIpL2xpYmVsZiAtSSQodG9wX3NyY2RpcikvbGliZHcKKyAKKyAKKy1tb2R1bGVzID0gaTM4NiBzaCB4ODZfNjQgaWE2NCBhbHBoYSBhcm0gc3BhcmMgcHBjIHBwYzY0IHMzOTAKKyttb2R1bGVzID0gaTM4NiBzaCB4ODZfNjQgaWE2NCBhbHBoYSBhcm0gc3BhcmMgcHBjIHBwYzY0IHMzOTAgcGFyaXNjCisgbGliZWJsX3BpYyA9IGxpYmVibF9pMzg2X3BpYy5hIGxpYmVibF9zaF9waWMuYSBsaWJlYmxfeDg2XzY0X3BpYy5hIFwKKyAJICAgICBsaWJlYmxfaWE2NF9waWMuYSBsaWJlYmxfYWxwaGFfcGljLmEgbGliZWJsX2FybV9waWMuYSBcCisgCSAgICAgbGliZWJsX3NwYXJjX3BpYy5hIGxpYmVibF9wcGNfcGljLmEgbGliZWJsX3BwYzY0X3BpYy5hIFwKKy0JICAgICBsaWJlYmxfczM5MF9waWMuYQorKwkgICAgIGxpYmVibF9zMzkwX3BpYy5hIGxpYmVibF9wYXJpc2NfcGljLmEKKyBub2luc3RfTElCUkFSSUVTID0gJChsaWJlYmxfcGljKQorIG5vaW5zdF9EQVRBID0gJChsaWJlYmxfcGljOl9waWMuYT0uc28pCisgCitAQCAtOTUsNiArOTUsOSBAQAorIGxpYmVibF9zMzkwX3BpY19hX1NPVVJDRVMgPSAkKHMzOTBfU1JDUykKKyBhbV9saWJlYmxfczM5MF9waWNfYV9PQkpFQ1RTID0gJChzMzkwX1NSQ1M6LmM9Lm9zKQorIAorK3BhcmlzY19TUkNTID0gcGFyaXNjX2luaXQuYyBwYXJpc2Nfc3ltYm9sLmMgcGFyaXNjX3JlZ3MuYyBwYXJpc2NfcmV0dmFsLmMKKytsaWJlYmxfcGFyaXNjX3BpY19hX1NPVVJDRVMgPSAkKHBhcmlzY19TUkNTKQorK2FtX2xpYmVibF9wYXJpc2NfcGljX2FfT0JKRUNUUyA9ICQocGFyaXNjX1NSQ1M6LmM9Lm9zKQorIAorIGxpYmVibF8lLnNvIGxpYmVibF8lLm1hcDogbGliZWJsXyVfcGljLmEgJChsaWJlbGYpICQobGliZHcpCisgCUBybSAtZiAkKEA6LnNvPS5tYXApCitJbmRleDogZWxmdXRpbHMtMC4xNDYvbGliZWxmL2VsZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDYub3JpZy9saWJlbGYvZWxmLmgJMjAxMC0wNC0xMyAyMDowODowMi4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9saWJlbGYvZWxmLmgJMjAxMC0wNC0yNCAxMDoxMDo1MC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNzg5LDE2ICsxNzg5LDI0IEBACisgI2RlZmluZSBSX1BBUklTQ19QQ1JFTDE3RgkxMgkvKiAxNyBiaXRzIG9mIHJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QQ1JFTDE0UgkxNAkvKiBSaWdodCAxNCBiaXRzIG9mIHJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19EUFJFTDIxTAkxOAkvKiBMZWZ0IDIxIGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0RQUkVMMTRXUgkxOQorKyNkZWZpbmUgUl9QQVJJU0NfRFBSRUwxNERSCTIwCisgI2RlZmluZSBSX1BBUklTQ19EUFJFTDE0UgkyMgkvKiBSaWdodCAxNCBiaXRzIG9mIHJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19HUFJFTDIxTAkyNgkvKiBHUC1yZWxhdGl2ZSwgbGVmdCAyMSBiaXRzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0dQUkVMMTRSCTMwCS8qIEdQLXJlbGF0aXZlLCByaWdodCAxNCBiaXRzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGMjFMCTM0CS8qIExULXJlbGF0aXZlLCBsZWZ0IDIxIGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfTFRPRkYxNFIJMzgJLyogTFQtcmVsYXRpdmUsIHJpZ2h0IDE0IGJpdHMuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfRExUSU5EMTRGCTM5CisrI2RlZmluZSBSX1BBUklTQ19TRVRCQVNFCTQwCisgI2RlZmluZSBSX1BBUklTQ19TRUNSRUwzMgk0MQkvKiAzMiBiaXRzIHNlY3Rpb24gcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0JBU0VSRUwyMUwJNDIKKysjZGVmaW5lIFJfUEFSSVNDX0JBU0VSRUwxN1IJNDMKKysjZGVmaW5lIFJfUEFSSVNDX0JBU0VSRUwxNFIJNDYKKyAjZGVmaW5lIFJfUEFSSVNDX1NFR0JBU0UJNDgJLyogTm8gcmVsb2NhdGlvbiwgc2V0IHNlZ21lbnQgYmFzZS4gICovCisgI2RlZmluZSBSX1BBUklTQ19TRUdSRUwzMgk0OQkvKiAzMiBiaXRzIHNlZ21lbnQgcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BMVE9GRjIxTAk1MAkvKiBQTFQgcmVsLiBhZGRyZXNzLCBsZWZ0IDIxIGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMTRSCTU0CS8qIFBMVCByZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMTRGCTU1CisgI2RlZmluZSBSX1BBUklTQ19MVE9GRl9GUFRSMzIJNTcJLyogMzIgYml0cyBMVC1yZWwuIGZ1bmN0aW9uIHBvaW50ZXIuICovCisgI2RlZmluZSBSX1BBUklTQ19MVE9GRl9GUFRSMjFMCTU4CS8qIExULXJlbC4gZmN0IHB0ciwgbGVmdCAyMSBiaXRzLiAqLworICNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfRlBUUjE0Ugk2MgkvKiBMVC1yZWwuIGZjdCBwdHIsIHJpZ2h0IDE0IGJpdHMuICovCitAQCAtMTgwNyw2ICsxODE1LDcgQEAKKyAjZGVmaW5lIFJfUEFSSVNDX1BMQUJFTDIxTAk2NgkvKiBMZWZ0IDIxIGJpdHMgb2YgZmRlc2MgYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QTEFCRUwxNFIJNzAJLyogUmlnaHQgMTQgYml0cyBvZiBmZGVzYyBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMNjQJNzIJLyogNjQgYml0cyBQQy1yZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfUENSRUwyMkMJNzMKKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMjJGCTc0CS8qIDIyIGJpdHMgUEMtcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTRXUgk3NQkvKiBQQy1yZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUENSRUwxNERSCTc2CS8qIFBDIHJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCitAQCAtMTgzMiw2ICsxODQxLDggQEAKKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGMTZXRgkxMDIJLyogMTYgYml0cyBMVC1yZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfTFRPRkYxNkRGCTEwMwkvKiAxNiBiaXRzIExULXJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19TRUNSRUw2NAkxMDQJLyogNjQgYml0cyBzZWN0aW9uIHJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19CQVNFUkVMMTRXUgkxMDcKKysjZGVmaW5lIFJfUEFSSVNDX0JBU0VSRUwxNERSCTEwOAorICNkZWZpbmUgUl9QQVJJU0NfU0VHUkVMNjQJMTEyCS8qIDY0IGJpdHMgc2VnbWVudCByZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMTRXUgkxMTUJLyogUExULXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNERSCTExNgkvKiBQTFQtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2kzODZfZGlzLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9pMzg2X2Rpcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1Y2MwMWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9pMzg2X2Rpcy5oCkBAIC0wLDAgKzEsMTY1NyBAQAorI2RlZmluZSBNTkVNT05JQ19CSVRTIDEwCisjZGVmaW5lIFNVRkZJWF9CSVRTIDMKKyNkZWZpbmUgRkNUMV9CSVRTIDcKKyNkZWZpbmUgU1RSMV9CSVRTIDQKKyNkZWZpbmUgT0ZGMV8xX0JJVFMgNworI2RlZmluZSBPRkYxXzFfQklBUyAzCisjZGVmaW5lIE9GRjFfMl9CSVRTIDcKKyNkZWZpbmUgT0ZGMV8yX0JJQVMgNAorI2RlZmluZSBPRkYxXzNfQklUUyAxCisjZGVmaW5lIE9GRjFfM19CSUFTIDcKKyNkZWZpbmUgRkNUMl9CSVRTIDYKKyNkZWZpbmUgU1RSMl9CSVRTIDIKKyNkZWZpbmUgT0ZGMl8xX0JJVFMgNworI2RlZmluZSBPRkYyXzFfQklBUyA1CisjZGVmaW5lIE9GRjJfMl9CSVRTIDcKKyNkZWZpbmUgT0ZGMl8yX0JJQVMgNAorI2RlZmluZSBPRkYyXzNfQklUUyA0CisjZGVmaW5lIE9GRjJfM19CSUFTIDcKKyNkZWZpbmUgRkNUM19CSVRTIDQKKyNkZWZpbmUgU1RSM19CSVRTIDEKKyNkZWZpbmUgT0ZGM18xX0JJVFMgNgorI2RlZmluZSBPRkYzXzFfQklBUyAxMAorI2RlZmluZSBPRkYzXzJfQklUUyAxCisjZGVmaW5lIE9GRjNfMl9CSUFTIDIxCisKKyNpbmNsdWRlIDxpMzg2X2RhdGEuaD4KKworI2RlZmluZSBzdWZmaXhfbm9uZSAwCisjZGVmaW5lIHN1ZmZpeF93IDEKKyNkZWZpbmUgc3VmZml4X3cwIDIKKyNkZWZpbmUgc3VmZml4X1cgMworI2RlZmluZSBzdWZmaXhfdHR0biA0CisjZGVmaW5lIHN1ZmZpeF9EIDcKKyNkZWZpbmUgc3VmZml4X3cxIDUKKyNkZWZpbmUgc3VmZml4X1cxIDYKKworc3RhdGljIGNvbnN0IG9wZmN0X3Qgb3AxX2ZjdFtdID0KK3sKKyAgTlVMTCwKKyAgRkNUX01PRCRSX00sCisgIEZDVF9Nb2QkUl9tLAorICBGQ1RfYWJzLAorICBGQ1RfYXgsCisgIEZDVF9heCR3LAorICBGQ1RfY2NjLAorICBGQ1RfZGRkLAorICBGQ1RfZGlzcDgsCisgIEZDVF9kc19ieCwKKyAgRkNUX2RzX3NpLAorICBGQ1RfZHgsCisgIEZDVF9lc19kaSwKKyAgRkNUX2ZyZWcsCisgIEZDVF9pbW0kcywKKyAgRkNUX2ltbSR3LAorICBGQ1RfaW1tMTYsCisgIEZDVF9pbW04LAorICBGQ1RfaW1tczgsCisgIEZDVF9tbXhyZWcsCisgIEZDVF9tb2QkMTZyX20sCisgIEZDVF9tb2QkNjRyX20sCisgIEZDVF9tb2QkOHJfbSwKKyAgRkNUX21vZCRyX20sCisgIEZDVF9tb2Qkcl9tJHcsCisgIEZDVF9yZWcsCisgIEZDVF9yZWckdywKKyAgRkNUX3JlZzE2LAorICBGQ1RfcmVnNjQsCisgIEZDVF9yZWwsCisgIEZDVF9zZWwsCisgIEZDVF9zcmVnMiwKKyAgRkNUX3NyZWczLAorICBGQ1Rfc3RyaW5nLAorICBGQ1RfeG1tcmVnLAorfTsKK3N0YXRpYyBjb25zdCBjaGFyIG9wMV9zdHJbXSA9CisgICIlYXhcMCIKKyAgIiVjbFwwIgorICAiJWVheFwwIgorICAiJXN0XDAiCisgICIleG1tMFwwIgorICAiKiI7CitzdGF0aWMgY29uc3QgdWludDhfdCBvcDFfc3RyX2lkeFtdID0geworICAwLAorICA0LAorICA4LAorICAxMywKKyAgMTcsCisgIDIzLAorfTsKK3N0YXRpYyBjb25zdCBvcGZjdF90IG9wMl9mY3RbXSA9Cit7CisgIE5VTEwsCisgIEZDVF9NT0QkUl9NLAorICBGQ1RfTW9kJFJfbSwKKyAgRkNUX2FicywKKyAgRkNUX2Fic3ZhbCwKKyAgRkNUX2F4JHcsCisgIEZDVF9jY2MsCisgIEZDVF9kZGQsCisgIEZDVF9kc19zaSwKKyAgRkNUX2R4LAorICBGQ1RfZXNfZGksCisgIEZDVF9mcmVnLAorICBGQ1RfaW1tOCwKKyAgRkNUX21teHJlZywKKyAgRkNUX21vZCQ2NHJfbSwKKyAgRkNUX21vZCRyX20sCisgIEZDVF9tb2Qkcl9tJHcsCisgIEZDVF9tb2RhJHJfbSwKKyAgRkNUX3JlZywKKyAgRkNUX3JlZyR3LAorICBGQ1RfcmVnNjQsCisgIEZDVF9zcmVnMywKKyAgRkNUX3N0cmluZywKKyAgRkNUX3htbXJlZywKK307CitzdGF0aWMgY29uc3QgY2hhciBvcDJfc3RyW10gPQorICAiJWVjeFwwIgorICAiJXN0IjsKK3N0YXRpYyBjb25zdCB1aW50OF90IG9wMl9zdHJfaWR4W10gPSB7CisgIDAsCisgIDUsCit9Oworc3RhdGljIGNvbnN0IG9wZmN0X3Qgb3AzX2ZjdFtdID0KK3sKKyAgTlVMTCwKKyAgRkNUX21teHJlZywKKyAgRkNUX21vZCRyX20sCisgIEZDVF9yZWcsCisgIEZDVF9zdHJpbmcsCisgIEZDVF94bW1yZWcsCit9Oworc3RhdGljIGNvbnN0IGNoYXIgb3AzX3N0cltdID0KKyAgIiVlZHgiOworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgb3AzX3N0cl9pZHhbXSA9IHsKKyAgMCwKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGluc3RyX2VuYyBpbnN0cnRhYltdID0KK3sKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWFhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hYWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FhbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWFzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZHN1YnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkc3VicHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZG5wZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZG5wcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FycGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYm91bmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTcsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnNmLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2JzciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ic3dhcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnRjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idHIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnRzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0cywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAyOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY2FsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDEsIC5mY3QxID0gMjEsIC5zdHIxID0gNiwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xjYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xjYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSA2LCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY2xjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NsaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3lzY2FsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY2x0cywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3lzcmV0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zeXNlbnRlciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3lzZXhpdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21jLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wcywgLnJlcCA9IDAsIC5yZXBlID0gMSwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDAsIC5mY3QxID0gMTIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcHhjaGcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDExLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDgsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcHhjaGc4YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3B1aWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dGRxMnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cGQyZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnR0cGQyZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kYWEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RhcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGVjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGVjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGl2LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZW1tcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZW50ZXIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zub3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjaHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZhYnMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z0c3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z4YW0sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZDEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZGwydCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkbDJlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRwaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkbGcyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRsbjIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZHosIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2YyeG0xLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meWwyeCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnB0YW4sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZwYXRhbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnh0cmFjdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnByZW0xLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGVjc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maW5jc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mcHJlbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnlsMnhwMSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnNxcnQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzaW5jb3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZybmRpbnQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzY2FsZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnNpbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmFkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmFkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWJyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWJyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZGVudiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZGN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5zdGVudiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zuc3RjdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z4Y2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmFkZHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWFkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92ZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm11bHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmltdWwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3VicCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maXN1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWJycCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maXN1YnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbnN0c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDEsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbWlwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYnN0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjaHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbGV4LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maW5pdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZndhaXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZuY2xleCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92YmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92dSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZuYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZuZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZuYmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92bnUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb20sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbXBwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29taSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbWlwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mdWNvbWksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z1Y29taXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkZWNzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpZGl2bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpZGl2LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdnJwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpZGl2cmwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWRpdnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2cnAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmZyZWUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZiZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWNvbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92dSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWNvbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlsZGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWxkbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maW5jc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbmluaXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maXN0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3RwbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maXN0dHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maXN0dHBsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3RwdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mdWNvbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mcnN0b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mdWNvbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5zYXZlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5zdHN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaGx0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pZGl2LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ltdWwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMiwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAzLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW4sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW4sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDExLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbmMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbmMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnMsIC5yZXAgPSAxLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAwLCAuZmN0MSA9IDExLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW50LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW50MywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW50bywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW52ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3dhcGdzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnZscGcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2lyZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA2LCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2osIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA0LCAubW9kcm0gPSAwLCAuZmN0MSA9IDgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2osIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA0LCAubW9kcm0gPSAwLCAuZmN0MSA9IDI5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2V0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9qbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ptcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMjksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ptcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDEsIC5mY3QxID0gMjEsIC5zdHIxID0gNiwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xqbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGptcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDEsIC5mY3QxID0gMjEsIC5zdHIxID0gNiwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xhaGYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xhciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGVhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xlYXZlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZXMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGZzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xncywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZ2R0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMiwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9saWR0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMiwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sbGR0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sbXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sb2NrLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sb2RzLCAucmVwID0gMSwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbG9vcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbG9vcGUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xvb3BuZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbHNsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sdHIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMzUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTgsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA3LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIxLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnMsIC5yZXAgPSAxLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c2JsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnN3bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Z6YmwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92endsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX211bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX25lZywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhdXNlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ub3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcGNudCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ub3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX291dCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vdXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX291dHMsIC5yZXAgPSAxLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3BmLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMiwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMzIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2hhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3BhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoZiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmRtc3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JkcG1jLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yZHRzYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmV0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9scmV0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9scmV0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm9sLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm9sLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcnNtLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYWhmLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYXIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYXIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2FyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2JiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NiYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NiYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2NhcywgLnJlcCA9IDAsIC5yZXBlID0gMSwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDQsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NobCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMiwgLnN0cjMgPSAwLCAub2ZmM18xID0gNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NobGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMiwgLnN0cjMgPSAwLCAub2ZmM18xID0gNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NociwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NocmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDIsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDIsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bWNhbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtbGF1bmNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXJlc3VtZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm14b2ZmLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXJlYWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm13cml0ZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zZ2R0bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW9uaXRvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gMywgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAxLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDQsIC5zdHIzID0gMSwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9td2FpdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gMywgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAxLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaWR0bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2xkdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc21zdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3RjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N0aSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3RvcywgLnJlcCA9IDEsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N0ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Rlc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdGVzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV90ZXN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91ZDJhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92ZXJyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92ZXJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV93YmludmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wcmVmZXRjaHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNobnRhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wcmVmZXRjaHQwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wcmVmZXRjaHQxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wcmVmZXRjaHQyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ub3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3dybXNyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94YWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAxMSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSA4LCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94Y2hnLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hjaGcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94bGF0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZW1tcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYW5kbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhbmRuLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1hZGR3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYWRkd2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9weG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHhvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZG5wcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wZXFwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcGx0cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBsZXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wdW5vcmRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG5lcXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbmx0cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBubGVwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG9yZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wZXFzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcGx0c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBsZXNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wdW5vcmRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG5lcXNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbmx0c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBubGVzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG9yZHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnhyc3RvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnhzYXZlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZG14Y3NyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdG14Y3NyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92dXBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92dXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnVwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnVwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRkdXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzbGR1cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhscHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZscHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZobHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92aGxwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3VucGNrbHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdW5wY2tscHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91bnBja2hwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3VucGNraHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c2hkdXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZocGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZsaHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTgsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92aHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bGhwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZocGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZhcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZhcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZhcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZhcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzaTJzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzaTJzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwaTJwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBpMnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bnRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRzZDJzaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRzczJzaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRwZDJwaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRwczJwaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBkMnBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0c2Qyc2ksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzczJzaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBzMnBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdWNvbWlzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Vjb21pc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jb21pc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jb21pc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9nZXRzZWMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm1za3BkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjYsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bXNrcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zcXJ0cGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zcXJ0c2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zcXJ0c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zcXJ0cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yc3FydHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcnNxcnRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjcHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNwcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kbnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kbnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3JwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29ycHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94b3JwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvcnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tdWxzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX211bHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbXVscGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tdWxwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNkMnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0c3Myc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwZDJwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBzMnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cHMyZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnR0cHMyZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRkcTJwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3Vic3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWJwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWluc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9taW5zcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21pbnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWlucHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kaXZzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RpdnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGl2cGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kaXZwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21heHNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWF4c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tYXhwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21heHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbHdkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbHdkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3Nzd2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrc3N3YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndGIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3RiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3RkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2t1c3diLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3Vzd2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2toYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2toYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tod2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tod2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2toZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2toZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrc3NkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2tzc2R3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbHFkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hxZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZHFhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZHF1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2h1Zmx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmaHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDE2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNodWZ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAxLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA4LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXFkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaGFkZHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaGFkZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaHN1YnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaHN1YnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkcWEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkcXUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bnRpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BpbnNydywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDE2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGluc3J3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMSwgLnN0cjMgPSAwLCAub2ZmM18xID0gOCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BleHRydywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMywgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wZXh0cncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDMsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDgsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHVmcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDE2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2h1ZnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA4LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkcTJxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjYsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92cTJkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI2LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Ztc2tiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjYsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdm1za2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VidXNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnVzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ1c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VidXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHVzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGR1c2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHVzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXh1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXh1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhdmdiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGF2Z2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Bhdmd3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGF2Z3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsaHV3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGh1dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxodywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxodywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm50ZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3Vic2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3Vic2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3Vic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3Vic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWluc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWluc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkc2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkc2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZGRxdSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsdWRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bHVkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzYWRidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzYWRidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21hc2ttb3ZkcXUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyNiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tYXNrbW92cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3ViZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2h1ZmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2h1ZmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZHN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhhZGRzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYWRkdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYWRkdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3VidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3VidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3ViZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3ViZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3Vic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waHN1YnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNpZ25iLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNpZ25iLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNpZ253LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNpZ253LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNpZ25kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNpZ25kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGhyc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsaHJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhYnNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFic2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhYnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFic2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWJzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhbGlnbnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFsaWduciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bWNsZWFyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXhvbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1wdHJsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1wdHJzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmFkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZmVuY2UsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21mZW5jZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2ZlbmNlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbGZsdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYmxlbmRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ibGVuZHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2JsZW5kdnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSA1LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYmxlbmR2cGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDUsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kcHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RwcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW5zZXJ0cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bnRkcWEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tcHNhZGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2t1c2R3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGJsZW5kdmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDUsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYmxlbmR3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcXEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXN0cmksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVzdHJtLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBpc3RyaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21waXN0cm0sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BobWlucG9zdXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waW5zcmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BpbnNyZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHVkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHV3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnVkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnV3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnN4YncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92c3hiZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3ZzeGJxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnN4d2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92c3h3cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3ZzeGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnp4YncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92enhiZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Z6eGJxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnp4d2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92enh3cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Z6eGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHRlc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3VuZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvdW5kcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm91bmRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3VuZHNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCit9Oworc3RhdGljIGNvbnN0IHVpbnQ4X3QgbWF0Y2hfZGF0YVtdID0KK3sKKyAgMHgxMSwgMHgzNywKKyAgMHgyMiwgMHhkNSwgMHhhLAorICAweDIyLCAweGQ0LCAweGEsCisgIDB4MTEsIDB4M2YsCisgIDB4MSwgMHhmZSwgMHgxNCwKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAweDEwLAorICAweDIsIDB4ZmUsIDB4ODIsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmZSwgMHgxMCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDEyLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4NCwKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAwLAorICAweDEyLCAweDgzLCAweDM4LCAwLAorICAweDIsIDB4ZmUsIDAsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDAsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHhkMCwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDI0LAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MjAsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHgyMCwKKyAgMHgyLCAweGZlLCAweDIwLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4MjIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1NCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NSwgMCwgMCwKKyAgMHgxMiwgMHg2MywgMCwgMCwKKyAgMHgxMiwgMHg2MiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJjLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmQsIDAsIDAsCisgIDB4MTIsIDB4ZiwgMHhmOCwgMHhjOCwKKyAgMHgyMywgMHhmLCAweGEzLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmEsIDB4MzgsIDB4MjAsCisgIDB4MjMsIDB4ZiwgMHhiYiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJhLCAweDM4LCAweDM4LAorICAweDIzLCAweGYsIDB4YjMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiYSwgMHgzOCwgMHgzMCwKKyAgMHgyMywgMHhmLCAweGFiLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmEsIDB4MzgsIDB4MjgsCisgIDB4MTEsIDB4ZTgsCisgIDB4MTIsIDB4ZmYsIDB4MzgsIDB4MTAsCisgIDB4MTEsIDB4OWEsCisgIDB4MTIsIDB4ZmYsIDB4MzgsIDB4MTgsCisgIDB4MTEsIDB4OTgsCisgIDB4MTEsIDB4OTksCisgIDB4MTEsIDB4ZjgsCisgIDB4MTEsIDB4ZmMsCisgIDB4MTEsIDB4ZmEsCisgIDB4MjIsIDB4ZiwgMHg1LAorICAweDIyLCAweGYsIDB4NiwKKyAgMHgyMiwgMHhmLCAweDcsCisgIDB4MjIsIDB4ZiwgMHgzNCwKKyAgMHgyMiwgMHhmLCAweDM1LAorICAweDExLCAweGY1LAorICAweDEzLCAweGYsIDB4ZjAsIDB4NDAsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHgzYywKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAweDM4LAorICAweDEyLCAweDgzLCAweDM4LCAweDM4LAorICAweDIsIDB4ZmUsIDB4MzgsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgzYSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweGMyLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhjMiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGMyLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4YTYsCisgIDB4MTMsIDB4ZiwgMHhmZSwgMHhiMCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGM3LCAweDM4LCAweDgsCisgIDB4MjIsIDB4ZiwgMHhhMiwKKyAgMHgzNCwgMHhmMywgMHhmLCAweGU2LCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4ZTYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlNiwgMCwgMCwKKyAgMHgxMSwgMHgyNywKKyAgMHgxMSwgMHgyZiwKKyAgMHgyLCAweGZlLCAweGZlLCAweDM4LCAweDgsCisgIDB4MSwgMHhmOCwgMHg0OCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDMwLAorICAweDIyLCAweGYsIDB4NzcsCisgIDB4MTEsIDB4YzgsCisgIDB4MjIsIDB4ZDksIDB4ZDAsCisgIDB4MjIsIDB4ZDksIDB4ZTAsCisgIDB4MjIsIDB4ZDksIDB4ZTEsCisgIDB4MjIsIDB4ZDksIDB4ZTQsCisgIDB4MjIsIDB4ZDksIDB4ZTUsCisgIDB4MjIsIDB4ZDksIDB4ZTgsCisgIDB4MjIsIDB4ZDksIDB4ZTksCisgIDB4MjIsIDB4ZDksIDB4ZWEsCisgIDB4MjIsIDB4ZDksIDB4ZWIsCisgIDB4MjIsIDB4ZDksIDB4ZWMsCisgIDB4MjIsIDB4ZDksIDB4ZWQsCisgIDB4MjIsIDB4ZDksIDB4ZWUsCisgIDB4MjIsIDB4ZDksIDB4ZjAsCisgIDB4MjIsIDB4ZDksIDB4ZjEsCisgIDB4MjIsIDB4ZDksIDB4ZjIsCisgIDB4MjIsIDB4ZDksIDB4ZjMsCisgIDB4MjIsIDB4ZDksIDB4ZjQsCisgIDB4MjIsIDB4ZDksIDB4ZjUsCisgIDB4MjIsIDB4ZDksIDB4ZjYsCisgIDB4MjIsIDB4ZDksIDB4ZjcsCisgIDB4MjIsIDB4ZDksIDB4ZjgsCisgIDB4MjIsIDB4ZDksIDB4ZjksCisgIDB4MjIsIDB4ZDksIDB4ZmEsCisgIDB4MjIsIDB4ZDksIDB4ZmIsCisgIDB4MjIsIDB4ZDksIDB4ZmMsCisgIDB4MjIsIDB4ZDksIDB4ZmQsCisgIDB4MjIsIDB4ZDksIDB4ZmUsCisgIDB4MjIsIDB4ZDksIDB4ZmYsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4YzAsCisgIDB4MTIsIDB4ZGMsIDB4ZjgsIDB4YzAsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhjOCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhjOCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDgsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4ZTAsCisgIDB4MTIsIDB4ZGMsIDB4ZjgsIDB4ZTAsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMHgyMCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhlOCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhlOCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDI4LAorICAweDEyLCAweGRkLCAweGY4LCAweGQwLAorICAweDIsIDB4ZmIsIDB4ZDksIDB4MzgsIDB4MTAsCisgIDB4MTIsIDB4ZGQsIDB4ZjgsIDB4ZDgsCisgIDB4MiwgMHhmYiwgMHhkOSwgMHgzOCwgMHgxOCwKKyAgMHgxMiwgMHhkOSwgMHgzOCwgMHgyMCwKKyAgMHgxMiwgMHhkOSwgMHgzOCwgMHgyOCwKKyAgMHgxMiwgMHhkOSwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkOSwgMHgzOCwgMHgzOCwKKyAgMHgxMiwgMHhkOSwgMHhmOCwgMHhjOCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhjMCwKKyAgMHgyLCAweGZiLCAweGRhLCAweDM4LCAwLAorICAweDEyLCAweGRhLCAweGY4LCAweGM4LAorICAweDEyLCAweGRlLCAweGY4LCAweGM4LAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDB4OCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhlMCwKKyAgMHgyLCAweGZiLCAweGRhLCAweDM4LCAweDIwLAorICAweDEyLCAweGRlLCAweGY4LCAweGU4LAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDB4MjgsCisgIDB4MjIsIDB4ZGYsIDB4ZTAsCisgIDB4MTIsIDB4ZGYsIDB4MzgsIDB4MjAsCisgIDB4MTIsIDB4ZGYsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGYsIDB4MzgsIDB4MzAsCisgIDB4MjIsIDB4ZDksIDB4ZTAsCisgIDB4MzMsIDB4OWIsIDB4ZGIsIDB4ZTIsCisgIDB4MzMsIDB4OWIsIDB4ZGIsIDB4ZTMsCisgIDB4MTEsIDB4OWIsCisgIDB4MjIsIDB4ZGIsIDB4ZTIsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4YzAsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4YzgsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4ZDAsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4ZDgsCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4YzAsCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4YzgsCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4ZDAsCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4ZDgsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4ZDAsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMHgxMCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhkOCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDE4LAorICAweDIyLCAweGRlLCAweGQ5LAorICAweDEyLCAweGRiLCAweGY4LCAweGYwLAorICAweDEyLCAweGRmLCAweGY4LCAweGYwLAorICAweDEyLCAweGRiLCAweGY4LCAweGU4LAorICAweDEyLCAweGRmLCAweGY4LCAweGU4LAorICAweDIyLCAweGQ5LCAweGZmLAorICAweDIyLCAweGQ5LCAweGY2LAorICAweDEyLCAweGQ4LCAweGY4LCAweGYwLAorICAweDEyLCAweGRjLCAweGY4LCAweGYwLAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4MzAsCisgIDB4MTIsIDB4ZGEsIDB4MzgsIDB4MzAsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGUsIDB4MzgsIDB4MzAsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4ZjgsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4ZjgsCisgIDB4MTIsIDB4ZGMsIDB4ZjgsIDB4ZjgsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMHgzOCwKKyAgMHgxMiwgMHhkYSwgMHgzOCwgMHgzOCwKKyAgMHgxMiwgMHhkZSwgMHgzOCwgMHgzOCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhmMCwKKyAgMHgxMiwgMHhkZCwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhkMCwKKyAgMHgyLCAweGZiLCAweGRhLCAweDM4LCAweDEwLAorICAweDEyLCAweGRhLCAweGY4LCAweGQ4LAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDB4MTgsCisgIDB4MTIsIDB4ZGYsIDB4MzgsIDAsCisgIDB4MTIsIDB4ZGIsIDB4MzgsIDAsCisgIDB4MTIsIDB4ZGYsIDB4MzgsIDB4MjgsCisgIDB4MjIsIDB4ZDksIDB4ZjcsCisgIDB4MjIsIDB4ZGIsIDB4ZTMsCisgIDB4MiwgMHhmYiwgMHhkYiwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZiLCAweGRiLCAweDM4LCAweDE4LAorICAweDEyLCAweGRmLCAweDM4LCAweDM4LAorICAweDIsIDB4ZmIsIDB4ZGIsIDB4MzgsIDB4OCwKKyAgMHgxMiwgMHhkZCwgMHgzOCwgMHg4LAorICAweDEyLCAweGRiLCAweDM4LCAweDI4LAorICAweDEyLCAweGRiLCAweDM4LCAweDM4LAorICAweDEyLCAweGQ5LCAweGY4LCAweGMwLAorICAweDIsIDB4ZmIsIDB4ZDksIDB4MzgsIDAsCisgIDB4MTIsIDB4ZGQsIDB4ZjgsIDB4ZTAsCisgIDB4MTIsIDB4ZGQsIDB4MzgsIDB4MjAsCisgIDB4MTIsIDB4ZGQsIDB4ZjgsIDB4ZTgsCisgIDB4MTIsIDB4ZGQsIDB4MzgsIDB4MzAsCisgIDB4MTIsIDB4ZGQsIDB4MzgsIDB4MzgsCisgIDB4MTEsIDB4ZjQsCisgIDB4MiwgMHhmZSwgMHhmNiwgMHgzOCwgMHgzOCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDI4LAorICAweDIzLCAweGYsIDB4YWYsIDAsIDAsCisgIDB4MiwgMHhmZCwgMHg2OSwgMCwgMCwKKyAgMHgxLCAweGZlLCAweGU0LAorICAweDEsIDB4ZmUsIDB4ZWMsCisgIDB4MiwgMHhmZSwgMHhmZSwgMHgzOCwgMCwKKyAgMHgxLCAweGY4LCAweDQwLAorICAweDEsIDB4ZmUsIDB4NmMsCisgIDB4MTEsIDB4Y2QsCisgIDB4MTEsIDB4Y2MsCisgIDB4MTEsIDB4Y2UsCisgIDB4MjIsIDB4ZiwgMHg4LAorICAweDMzLCAweGYsIDB4MSwgMHhmOCwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDB4MzgsCisgIDB4MTEsIDB4Y2YsCisgIDB4MSwgMHhmMCwgMHg3MCwKKyAgMHgxMiwgMHhmLCAweGYwLCAweDgwLAorICAweDEzLCAweGYsIDB4ZjAsIDB4OTAsIDB4MzgsIDAsCisgIDB4MTEsIDB4ZTMsCisgIDB4MTEsIDB4ZWIsCisgIDB4MTEsIDB4ZTksCisgIDB4MTIsIDB4ZmYsIDB4MzgsIDB4MjAsCisgIDB4MTEsIDB4ZWEsCisgIDB4MTIsIDB4ZmYsIDB4MzgsIDB4MjgsCisgIDB4MTEsIDB4OWYsCisgIDB4MjMsIDB4ZiwgMHgyLCAwLCAwLAorICAweDEyLCAweGM1LCAwLCAwLAorICAweDEyLCAweDhkLCAwLCAwLAorICAweDExLCAweGM5LAorICAweDEyLCAweGM0LCAwLCAwLAorICAweDIzLCAweGYsIDB4YjQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiNSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDB4MTAsCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAweDE4LAorICAweDIzLCAweGYsIDAsIDB4MzgsIDB4MTAsCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAweDMwLAorICAweDExLCAweGYwLAorICAweDEsIDB4ZmUsIDB4YWMsCisgIDB4MTEsIDB4ZTIsCisgIDB4MTEsIDB4ZTEsCisgIDB4MTEsIDB4ZTAsCisgIDB4MjMsIDB4ZiwgMHgzLCAwLCAwLAorICAweDIzLCAweGYsIDB4YjIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMHgxOCwKKyAgMHgyLCAweGZlLCAweDg4LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4OGEsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHhjNiwgMHgzOCwgMCwKKyAgMHgxLCAweGYwLCAweGIwLAorICAweDEsIDB4ZmUsIDB4YTAsCisgIDB4MSwgMHhmZSwgMHhhMiwKKyAgMHgyMywgMHhmLCAweDIwLCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MjIsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgyMSwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDIzLCAweGMwLCAweGMwLAorICAweDEyLCAweDhjLCAwLCAwLAorICAweDEyLCAweDhlLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4YTQsCisgIDB4MjMsIDB4ZiwgMHhiZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJmLCAwLCAwLAorICAweDIzLCAweGYsIDB4YjYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiNywgMCwgMCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MTgsCisgIDB4MjIsIDB4ZjMsIDB4OTAsCisgIDB4MTEsIDB4OTAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHhiOCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDEwLAorICAweDIsIDB4ZmUsIDB4OCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweGEsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHg4LAorICAweDIsIDB4ZmUsIDB4ODIsIDB4MzgsIDB4OCwKKyAgMHgxLCAweGZlLCAweGMsCisgIDB4MSwgMHhmZSwgMHhlNiwKKyAgMHgxLCAweGZlLCAweGVlLAorICAweDEsIDB4ZmUsIDB4NmUsCisgIDB4MTIsIDB4OGYsIDB4MzgsIDAsCisgIDB4MTIsIDB4ZiwgMHhjNywgMHg4MSwKKyAgMHgxMSwgMHg5ZCwKKyAgMHgxMiwgMHhmZiwgMHgzOCwgMHgzMCwKKyAgMHgxLCAweGY4LCAweDUwLAorICAweDEsIDB4ZjgsIDB4NTgsCisgIDB4MSwgMHhmZCwgMHg2OCwKKyAgMHgxLCAweGU3LCAweDYsCisgIDB4MTIsIDB4ZiwgMHhjNywgMHg4MCwKKyAgMHgxMSwgMHg2MCwKKyAgMHgxMSwgMHg2MSwKKyAgMHgxMSwgMHg5YywKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDEwLAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDE4LAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDB4MTgsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMHgxOCwKKyAgMHgyMiwgMHhmLCAweDMyLAorICAweDIyLCAweGYsIDB4MzMsCisgIDB4MjIsIDB4ZiwgMHgzMSwKKyAgMHgxMSwgMHhjMywKKyAgMHgxMSwgMHhjMiwKKyAgMHgxMSwgMHhjYiwKKyAgMHgxMSwgMHhjYSwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAwLAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDAsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMCwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDgsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHg4LAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDB4OCwKKyAgMHgyMiwgMHhmLCAweGFhLAorICAweDExLCAweDllLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDB4MzgsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHgzOCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAweDM4LAorICAweDIsIDB4ZmUsIDB4MTgsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgxYSwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDFjLAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MTgsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHgxOCwKKyAgMHgxLCAweGZlLCAweGFlLAorICAweDEzLCAweGYsIDB4ZjAsIDB4OTAsIDB4MzgsIDAsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMHgyMCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDB4MjAsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMHgyOCwKKyAgMHgyMywgMHhmLCAweGE0LCAwLCAwLAorICAweDIzLCAweGYsIDB4YTUsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHgyOCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAweDI4LAorICAweDIzLCAweGYsIDB4YWMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhhZCwgMCwgMCwKKyAgMHgzMywgMHhmLCAweDEsIDB4YzEsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGMyLAorICAweDMzLCAweGYsIDB4MSwgMHhjMywKKyAgMHgzMywgMHhmLCAweDEsIDB4YzQsCisgIDB4MjMsIDB4ZiwgMHg3OCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDc5LCAwLCAwLAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMCwKKyAgMHgzMywgMHhmLCAweDEsIDB4YzgsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGM5LAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMHg4LAorICAweDIzLCAweGYsIDAsIDB4MzgsIDAsCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAweDIwLAorICAweDExLCAweGY5LAorICAweDExLCAweGZkLAorICAweDExLCAweGZiLAorICAweDEsIDB4ZmUsIDB4YWEsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMHg4LAorICAweDIsIDB4ZmUsIDB4MjgsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgyYSwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDJjLAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MjgsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHgyOCwKKyAgMHgyLCAweGZlLCAweDg0LCAwLCAwLAorICAweDEsIDB4ZmUsIDB4YTgsCisgIDB4MiwgMHhmZSwgMHhmNiwgMHgzOCwgMCwKKyAgMHgyMiwgMHhmLCAweGIsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMHgyMCwKKyAgMHgyMywgMHhmLCAwLCAweDM4LCAweDI4LAorICAweDIyLCAweGYsIDB4OSwKKyAgMHgyMywgMHhmLCAweGQsIDB4MzgsIDAsCisgIDB4MjMsIDB4ZiwgMHhkLCAweDM4LCAweDgsCisgIDB4MjMsIDB4ZiwgMHgxOCwgMHgzOCwgMCwKKyAgMHgyMywgMHhmLCAweDE4LCAweDM4LCAweDgsCisgIDB4MjMsIDB4ZiwgMHgxOCwgMHgzOCwgMHgxMCwKKyAgMHgyMywgMHhmLCAweDE4LCAweDM4LCAweDE4LAorICAweDIzLCAweGYsIDB4MWYsIDAsIDAsCisgIDB4MjIsIDB4ZiwgMHgzMCwKKyAgMHgxMywgMHhmLCAweGZlLCAweGMwLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4ODYsIDAsIDAsCisgIDB4MSwgMHhmOCwgMHg5MCwKKyAgMHgxMSwgMHhkNywKKyAgMHgyLCAweGZlLCAweDMwLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4MzIsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHgzNCwKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAweDMwLAorICAweDIsIDB4ZmUsIDB4ODIsIDB4MzgsIDB4MzAsCisgIDB4MjIsIDB4ZiwgMHg3NywKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRiLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGRmLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmNSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGViLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZWIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGVmLCAwLCAwLAorICAweDIzLCAweGYsIDB4NTUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NCwgMCwgMCwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAwLAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4MSwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDIsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHgzLAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NCwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDUsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg2LAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NywKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAwLAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4MSwKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDIsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHgzLAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NCwKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDUsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg2LAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NywKKyAgMHgyMywgMHhmLCAweGFlLCAweDM4LCAweDgsCisgIDB4MjMsIDB4ZiwgMHhhZSwgMHgzOCwgMCwKKyAgMHgyMywgMHhmLCAweGFlLCAweDM4LCAweDEwLAorICAweDIzLCAweGYsIDB4YWUsIDB4MzgsIDB4MTgsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgxMCwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDEwLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTAsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxMCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDExLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MTEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxMSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDExLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4MTIsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgxMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDEyLCAwLCAwLAorICAweDIzLCAweGYsIDB4MTIsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgxMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDEzLCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MTMsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxMywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDEzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxNCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDE1LCAwLCAwLAorICAweDIzLCAweGYsIDB4MTUsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgxNiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDE2LCAwLCAwLAorICAweDIzLCAweGYsIDB4MTYsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgxNiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDE3LCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MTcsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxNywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDE3LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MjgsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyOCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDI5LCAwLCAwLAorICAweDIzLCAweGYsIDB4MjksIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgyYSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDJhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyYSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDJiLCAwLCAwLAorICAweDIzLCAweGYsIDB4MmIsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgyYywgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDJjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyYywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDJkLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4MmQsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgyZCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDJkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyZSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDJmLCAwLCAwLAorICAweDIzLCAweGYsIDB4MmYsIDAsIDAsCisgIDB4MjIsIDB4ZiwgMHgzNywKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDUwLCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4NTAsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1MSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDUxLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NTEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1MSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDUyLCAwLCAwLAorICAweDIzLCAweGYsIDB4NTIsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1MywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDUzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU1LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1NiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTcsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NywgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDU4LCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NTgsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1OCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU4LCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NTksIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1OSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU5LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTksIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1YSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDVhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NWEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1YSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDViLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1YiwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDVjLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1YywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDVjLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NWQsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1ZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDVkLCAwLCAwLAorICAweDIzLCAweGYsIDB4NWQsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1ZSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDVlLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NWUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1ZSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDVmLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1ZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDVmLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjAsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2MCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDYxLCAwLCAwLAorICAweDIzLCAweGYsIDB4NjEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2MiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDYyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2MywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDY0LCAwLCAwLAorICAweDIzLCAweGYsIDB4NjQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2NSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDY1LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2NiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDY3LCAwLCAwLAorICAweDIzLCAweGYsIDB4NjcsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2OCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDY4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2OSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDZhLCAwLCAwLAorICAweDIzLCAweGYsIDB4NmEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2YiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDZiLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NmMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2ZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDZlLCAwLCAwLAorICAweDIzLCAweGYsIDB4NmUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2ZiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDZmLCAwLCAwLAorICAweDIzLCAweGYsIDB4NmYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDcwLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NzAsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3MCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDc0LCAwLCAwLAorICAweDIzLCAweGYsIDB4NzQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3NSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDc1LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3NiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDdjLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4N2MsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3ZCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDdkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4N2UsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg3ZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDdlLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4N2YsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg3ZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDdmLCAwLCAwLAorICAweDIzLCAweGYsIDB4YzMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhjNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGM0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4YzUsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHhjNSwgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGM2LCAwLCAwLAorICAweDIzLCAweGYsIDB4YzYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkMSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQxLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQzLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQ0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkNSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQ2LCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4ZDYsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHhkNiwgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQ3LCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4ZDcsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkOCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQ4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkOSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRhLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkYywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGRjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZGQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRlLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlMCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGUwLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlMSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGUyLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlMywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGUzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlNCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGU1LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlNywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGU3LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTgsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlOCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGU5LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTksIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlYSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGVhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZWMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlYywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGVkLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZWQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGVlLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4ZjAsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmMSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGYxLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGYzLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGY0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmNiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGY3LCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4ZjcsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmOCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGY4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmOSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGZhLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZmEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmYiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGZiLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZmMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmYywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGZkLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZmQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGZlLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDAsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDEsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHgxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MiwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4MywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDQsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHg0LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NSwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg2LCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4NiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDcsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHg3LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4OCwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDgsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg5LCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4OSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweGEsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHhhLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4YiwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweGIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxYywgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDFjLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MWQsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHgxZCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDFlLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4MWUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHhmLCAwLCAwLAorICAweDM0LCAweGYsIDB4M2EsIDB4ZiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGM3LCAweDM4LCAweDMwLAorICAweDM0LCAweGYzLCAweGYsIDB4YzcsIDB4MzgsIDB4MzAsCisgIDB4MjMsIDB4ZiwgMHhjNywgMHgzOCwgMHgzMCwKKyAgMHgyMywgMHhmLCAweGM3LCAweDM4LCAweDM4LAorICAweDM0LCAweDY2LCAweGYsIDB4NzEsIDB4ZjgsIDB4ZDAsCisgIDB4MjMsIDB4ZiwgMHg3MSwgMHhmOCwgMHhkMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcxLCAweGY4LCAweGUwLAorICAweDIzLCAweGYsIDB4NzEsIDB4ZjgsIDB4ZTAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MSwgMHhmOCwgMHhmMCwKKyAgMHgyMywgMHhmLCAweDcxLCAweGY4LCAweGYwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzIsIDB4ZjgsIDB4ZDAsCisgIDB4MjMsIDB4ZiwgMHg3MiwgMHhmOCwgMHhkMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcyLCAweGY4LCAweGUwLAorICAweDIzLCAweGYsIDB4NzIsIDB4ZjgsIDB4ZTAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MiwgMHhmOCwgMHhmMCwKKyAgMHgyMywgMHhmLCAweDcyLCAweGY4LCAweGYwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzMsIDB4ZjgsIDB4ZDAsCisgIDB4MjMsIDB4ZiwgMHg3MywgMHhmOCwgMHhkMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDczLCAweGY4LCAweGQ4LAorICAweDM0LCAweDY2LCAweGYsIDB4NzMsIDB4ZjgsIDB4ZjAsCisgIDB4MjMsIDB4ZiwgMHg3MywgMHhmOCwgMHhmMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDczLCAweGY4LCAweGY4LAorICAweDMzLCAweGYsIDB4YWUsIDB4ZTgsCisgIDB4MzMsIDB4ZiwgMHhhZSwgMHhmMCwKKyAgMHgzMywgMHhmLCAweGFlLCAweGY4LAorICAweDIzLCAweGYsIDB4YWUsIDB4MzgsIDB4MzgsCisgIDB4MjMsIDB4ZiwgMHhmLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4YywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweGQsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxNCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDE1LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NDAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg0MSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDIxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MmEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg0MiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDJiLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MTAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHhlLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjksIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg2MSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDYwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NjMsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg2MiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDM3LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NDEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHgyMCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDIyLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4M2MsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzZCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDNmLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4M2UsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzOCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDM5LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4M2IsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzYSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDIwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyMiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDIzLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjQsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyNSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDMwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzMiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDMzLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzQsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzNSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDI4LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NDAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxNywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDgsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg5LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4YSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweGIsIDAsIDAsCisgIDB4MSwgMHhlNywgMHg3LAorfTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L202OGtfYmFja2VuZC5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvbTY4a19iYWNrZW5kLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI2MjFmOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L202OGtfYmFja2VuZC5kaWZmCkBAIC0wLDAgKzEsMzA5IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9tNjhrX2luaXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL202OGtfaW5pdC5jCTIwMTAtMDQtMjQgMTA6MTE6MzguMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDQ5IEBACisrLyogSW5pdGlhbGl6YXRpb24gb2YgbTY4ayBzcGVjaWZpYyBiYWNrZW5kIGxpYnJhcnkuCisrICAgQ29weXJpZ2h0IChDKSAyMDA3IEt1cnQgUm9lY2t4IDxrdXJ0QHJvZWNreC5iZT4KKysKKysgICBUaGlzIHNvZnR3YXJlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBUaGlzIHNvZnRhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNkZWZpbmUgQkFDS0VORAkJbTY4a18KKysjZGVmaW5lIFJFTE9DX1BSRUZJWAlSXzY4S18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworKy8qIFRoaXMgZGVmaW5lcyB0aGUgY29tbW9uIHJlbG9jIGhvb2tzIGJhc2VkIG9uIG02OGtfcmVsb2MuZGVmLiAgKi8KKysjaW5jbHVkZSAiY29tbW9uLXJlbG9jLmMiCisrCisrCisrY29uc3QgY2hhciAqCisrbTY4a19pbml0IChlbGYsIG1hY2hpbmUsIGVoLCBlaGxlbikKKysgICAgIEVsZiAqZWxmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysgICAgIEdFbGZfSGFsZiBtYWNoaW5lIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysgICAgIEVibCAqZWg7CisrICAgICBzaXplX3QgZWhsZW47CisreworKyAgLyogQ2hlY2sgd2hldGhlciB0aGUgRWxmX0JIIG9iamVjdCBoYXMgYSBzdWZmaWNlbnQgc2l6ZS4gICovCisrICBpZiAoZWhsZW4gPCBzaXplb2YgKEVibCkpCisrICAgIHJldHVybiBOVUxMOworKworKyAgLyogV2UgaGFuZGxlIGl0LiAgKi8KKysgIGVoLT5uYW1lID0gIm02OGsiOworKyAgbTY4a19pbml0X3JlbG9jIChlaCk7CisrICBIT09LIChlaCwgcmVsb2Nfc2ltcGxlX3R5cGUpOworKyAgSE9PSyAoZWgsIHJlZ2lzdGVyX2luZm8pOworKworKyAgcmV0dXJuIE1PRFZFUlNJT047CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL202OGtfcmVncy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbTY4a19yZWdzLmMJMjAxMC0wNC0yNCAxMDoxMTozOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsMTA2IEBACisrLyogUmVnaXN0ZXIgbmFtZXMgYW5kIG51bWJlcnMgZm9yIG02OGsgRFdBUkYuCisrICAgQ29weXJpZ2h0IChDKSAyMDA3IEt1cnQgUm9lY2t4IDxrdXJ0QHJvZWNreC5iZT4KKysKKysgICBUaGlzIHNvZnR3YXJlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGR3YXJmLmg+CisrCisrI2RlZmluZSBCQUNLRU5EIG02OGtfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKytzc2l6ZV90CisrbTY4a19yZWdpc3Rlcl9pbmZvIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrCQkgICBpbnQgcmVnbm8sIGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLAorKwkJICAgY29uc3QgY2hhciAqKnByZWZpeCwgY29uc3QgY2hhciAqKnNldG5hbWUsCisrCQkgICBpbnQgKmJpdHMsIGludCAqdHlwZSkKKyt7CisrCWlmIChuYW1lID09IE5VTEwpCisrCQlyZXR1cm4gMjU7CisrCisrCWlmIChyZWdubyA8IDAgfHwgcmVnbm8gPiAyNCB8fCBuYW1lbGVuIDwgNSkKKysJCXJldHVybiAtMTsKKysKKysJKnByZWZpeCA9ICIlIjsKKysJKmJpdHMgPSAzMjsKKysJKnR5cGUgPSAocmVnbm8gPCA4ID8gRFdfQVRFX3NpZ25lZAorKwkJOiByZWdubyA8IDE2ID8gRFdfQVRFX2FkZHJlc3MgOiBEV19BVEVfZmxvYXQpOworKworKwlpZiAocmVnbm8gPCA4KQorKwl7CisrCQkqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysJfQorKwllbHNlIGlmIChyZWdubyA8IDE2KQorKwl7CisrCQkqc2V0bmFtZSA9ICJhZGRyZXNzIjsKKysJfQorKwllbHNlIGlmIChyZWdubyA8IDI0KQorKwl7CisrCQkqc2V0bmFtZSA9ICJGUFUiOworKwl9CisrCWVsc2UKKysJeworKwkJKnNldG5hbWUgPSAiYWRkcmVzcyI7CisrCQkqdHlwZSA9IERXX0FURV9hZGRyZXNzOworKwl9CisrCisrCXN3aXRjaCAocmVnbm8pCisrCXsKKysJY2FzZSAwIC4uLiA3OgorKwkJbmFtZVswXSA9ICdkJzsKKysJCW5hbWVbMV0gPSByZWdubyArICcwJzsKKysJCW5hbWVsZW4gPSAyOworKwkJYnJlYWs7CisrCisrCWNhc2UgOCAuLi4gMTM6CisrCQluYW1lWzBdID0gJ2EnOworKwkJbmFtZVsxXSA9IHJlZ25vIC0gOCArICcwJzsKKysJCW5hbWVsZW4gPSAyOworKwkJYnJlYWs7CisrCisrCWNhc2UgMTQ6CisrCQluYW1lWzBdID0gJ2YnOworKwkJbmFtZVsxXSA9ICdwJzsKKysgICAJCW5hbWVsZW4gPSAyOworKwkJYnJlYWs7CisrCisrCWNhc2UgMTU6CisrCQluYW1lWzBdID0gJ3MnOworKwkJbmFtZVsxXSA9ICdwJzsKKysgICAJCW5hbWVsZW4gPSAyOworKwkJYnJlYWs7CisrCisrCWNhc2UgMTYgLi4uIDIzOgorKwkJbmFtZVswXSA9ICdmJzsKKysJCW5hbWVbMV0gPSAncCc7CisrCQluYW1lWzJdID0gcmVnbm8gLSAxNiArICcwJzsKKysgICAJCW5hbWVsZW4gPSAzOworKwkJYnJlYWs7CisrCisrCWNhc2UgMjQ6CisrCQluYW1lWzBdID0gJ3AnOworKwkJbmFtZVsxXSA9ICdjJzsKKysJCW5hbWVsZW4gPSAyOworKwl9CisrCisrCW5hbWVbbmFtZWxlbisrXSA9ICdcMCc7CisrCXJldHVybiBuYW1lbGVuOworK30KKysKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9tNjhrX3JlbG9jLmRlZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL202OGtfcmVsb2MuZGVmCTIwMTAtMDQtMjQgMTA6MTE6MzguMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDQ1IEBACisrLyogTGlzdCB0aGUgcmVsb2NhdGlvbiB0eXBlcyBmb3IgbTY4ay4gIC0qLSBDIC0qLQorKyAgIENvcHlyaWdodCAoQykgMjAwNyBLdXJ0IFJvZWNreCA8a3VydEByb2Vja3guYmU+CisrCisrICAgVGhpcyBzb2Z0d2FyZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrKi8KKysKKysvKiAJICAgIE5BTUUsCQlSRUx8RVhFQ3xEWU4JKi8KKysKKytSRUxPQ19UWVBFIChOT05FLAkJMCkKKytSRUxPQ19UWVBFICgzMiwJCQlSRUx8RVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoMTYsCQkJUkVMKQorK1JFTE9DX1RZUEUgKDgsCQkJUkVMKQorK1JFTE9DX1RZUEUgKFBDMzIsCQlSRUx8RVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoUEMxNiwJCVJFTCkKKytSRUxPQ19UWVBFIChQQzgsCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UMzIsCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UMTYsCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UOCwJCVJFTCkKKytSRUxPQ19UWVBFIChHT1QzMk8sCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UMTZPLAkJUkVMKQorK1JFTE9DX1RZUEUgKEdPVDhPLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDMyLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDE2LAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDgsCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUMzJPLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDE2TywJCVJFTCkKKytSRUxPQ19UWVBFIChQTFQ4TywJCVJFTCkKKytSRUxPQ19UWVBFIChDT1BZLAkJRVhFQykKKytSRUxPQ19UWVBFIChHTE9CX0RBVCwJCUVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKEpNUF9TTE9ULAkJRVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoUkVMQVRJVkUsCQlFWEVDfERZTikKKytSRUxPQ19UWVBFIChHTlVfVlRJTkhFUklULAlSRUwpCisrUkVMT0NfVFlQRSAoR05VX1ZURU5UUlksCVJFTCkKKysKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9saWJlbGYvZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0Ni5vcmlnL2xpYmVsZi9lbGYuaAkyMDEwLTA0LTI0IDEwOjExOjEzLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2xpYmVsZi9lbGYuaAkyMDEwLTA0LTI0IDEwOjEzOjUwLjAwMDAwMDAwMCArMDAwMAorQEAgLTExMjUsNiArMTEyNSw5IEBACisgI2RlZmluZSBSXzY4S19HTE9CX0RBVAkyMAkJLyogQ3JlYXRlIEdPVCBlbnRyeSAqLworICNkZWZpbmUgUl82OEtfSk1QX1NMT1QJMjEJCS8qIENyZWF0ZSBQTFQgZW50cnkgKi8KKyAjZGVmaW5lIFJfNjhLX1JFTEFUSVZFCTIyCQkvKiBBZGp1c3QgYnkgcHJvZ3JhbSBiYXNlICovCisrLyogVGhlIG5leHQgMiBhcmUgR05VIGV4dGVuc2lvbnMgdG8gZW5hYmxlIEMrKyB2dGFibGUgZ2FyYmFnZSBjb2xsZWN0aW9uLiAgKi8KKysjZGVmaW5lIFJfNjhLX0dOVV9WVElOSEVSSVQgMjMKKysjZGVmaW5lIFJfNjhLX0dOVV9WVEVOVFJZICAgMjQKKyAjZGVmaW5lIFJfNjhLX1RMU19HRDMyICAgICAgMjUgICAgICAgICAgLyogMzIgYml0IEdPVCBvZmZzZXQgZm9yIEdEICovCisgI2RlZmluZSBSXzY4S19UTFNfR0QxNiAgICAgIDI2ICAgICAgICAgIC8qIDE2IGJpdCBHT1Qgb2Zmc2V0IGZvciBHRCAqLworICNkZWZpbmUgUl82OEtfVExTX0dEOCAgICAgICAyNyAgICAgICAgICAvKiA4IGJpdCBHT1Qgb2Zmc2V0IGZvciBHRCAqLworSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDYub3JpZy9iYWNrZW5kcy9NYWtlZmlsZS5hbQkyMDEwLTA0LTI0IDEwOjExOjIzLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTAtMDQtMjQgMTA6MTE6MzguMDAwMDAwMDAwICswMDAwCitAQCAtMjksMTEgKzI5LDEyIEBACisgCSAgIC1JJCh0b3Bfc3JjZGlyKS9saWJlbGYgLUkkKHRvcF9zcmNkaXIpL2xpYmR3CisgCisgCistbW9kdWxlcyA9IGkzODYgc2ggeDg2XzY0IGlhNjQgYWxwaGEgYXJtIHNwYXJjIHBwYyBwcGM2NCBzMzkwIHBhcmlzYyBtaXBzCisrbW9kdWxlcyA9IGkzODYgc2ggeDg2XzY0IGlhNjQgYWxwaGEgYXJtIHNwYXJjIHBwYyBwcGM2NCBzMzkwIHBhcmlzYyBtaXBzIG02OGsKKyBsaWJlYmxfcGljID0gbGliZWJsX2kzODZfcGljLmEgbGliZWJsX3NoX3BpYy5hIGxpYmVibF94ODZfNjRfcGljLmEgXAorIAkgICAgIGxpYmVibF9pYTY0X3BpYy5hIGxpYmVibF9hbHBoYV9waWMuYSBsaWJlYmxfYXJtX3BpYy5hIFwKKyAJICAgICBsaWJlYmxfc3BhcmNfcGljLmEgbGliZWJsX3BwY19waWMuYSBsaWJlYmxfcHBjNjRfcGljLmEgXAorLQkgICAgIGxpYmVibF9zMzkwX3BpYy5hIGxpYmVibF9wYXJpc2NfcGljLmEgbGliZWJsX21pcHNfcGljLmEKKysJICAgICBsaWJlYmxfczM5MF9waWMuYSBsaWJlYmxfcGFyaXNjX3BpYy5hIGxpYmVibF9taXBzX3BpYy5hIFwKKysJICAgICBsaWJlYmxfbTY4a19waWMuYQorIG5vaW5zdF9MSUJSQVJJRVMgPSAkKGxpYmVibF9waWMpCisgbm9pbnN0X0RBVEEgPSAkKGxpYmVibF9waWM6X3BpYy5hPS5zbykKKyAKK0BAIC0xMDMsNiArMTA0LDEwIEBACisgbGliZWJsX21pcHNfcGljX2FfU09VUkNFUyA9ICQobWlwc19TUkNTKQorIGFtX2xpYmVibF9taXBzX3BpY19hX09CSkVDVFMgPSAkKG1pcHNfU1JDUzouYz0ub3MpCisgCisrbTY4a19TUkNTID0gbTY4a19pbml0LmMgbTY4a19zeW1ib2wuYyBtNjhrX3JlZ3MuYworK2xpYmVibF9tNjhrX3BpY19hX1NPVVJDRVMgPSAkKG02OGtfU1JDUykKKythbV9saWJlYmxfbTY4a19waWNfYV9PQkpFQ1RTID0gJChtNjhrX1NSQ1M6LmM9Lm9zKQorKworIGxpYmVibF8lLnNvIGxpYmVibF8lLm1hcDogbGliZWJsXyVfcGljLmEgJChsaWJlbGYpICQobGliZHcpCisgCUBybSAtZiAkKEA6LnNvPS5tYXApCisgCWVjaG8gJ0VMRlVUSUxTXyQoUEFDS0FHRV9WRVJTSU9OKSB7IGdsb2JhbDogJCpfaW5pdDsgbG9jYWw6ICo7IH07JyBcCitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbTY4a19zeW1ib2wuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL202OGtfc3ltYm9sLmMJMjAxMC0wNC0yNCAxMDoxMTozOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsNDMgQEAKKysvKiBtNjhrIHNwZWNpZmljIHN5bWJvbGljIG5hbWUgaGFuZGxpbmcuCisrICAgQ29weXJpZ2h0IChDKSAyMDA3IEt1cnQgUm9lY2t4IDxrdXJ0QHJvZWNreC5iZT4KKysKKysgICBUaGlzIHNvZnR3YXJlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBUaGlzIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8ZWxmLmg+CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKworKyNkZWZpbmUgQkFDS0VORAkJbTY4a18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworKy8qIENoZWNrIGZvciB0aGUgc2ltcGxlIHJlbG9jIHR5cGVzLiAgKi8KKytFbGZfVHlwZQorK202OGtfcmVsb2Nfc2ltcGxlX3R5cGUgKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgaW50IHR5cGUpCisreworKyAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAgIGNhc2UgUl82OEtfMzI6CisrICAgICAgcmV0dXJuIEVMRl9UX1NXT1JEOworKyAgICBjYXNlIFJfNjhLXzE2OgorKyAgICAgIHJldHVybiBFTEZfVF9IQUxGOworKyAgICBjYXNlIFJfNjhLXzg6CisrICAgICAgcmV0dXJuIEVMRl9UX0JZVEU7CisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEVMRl9UX05VTTsKKysgICAgfQorK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L21pcHNfYmFja2VuZC5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvbWlwc19iYWNrZW5kLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y4MWE3NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L21pcHNfYmFja2VuZC5kaWZmCkBAIC0wLDAgKzEsNzEzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9taXBzX2luaXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL21pcHNfaW5pdC5jCTIwMTAtMDItMjQgMTg6NTc6MzUuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDYwIEBACisrLyogSW5pdGlhbGl6YXRpb24gb2YgbWlwcyBzcGVjaWZpYyBiYWNrZW5kIGxpYnJhcnkuCisrICAgQ29weXJpZ2h0IChDKSAyMDA2IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2RlZmluZSBCQUNLRU5ECQltaXBzXworKyNkZWZpbmUgUkVMT0NfUFJFRklYCVJfTUlQU18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworKy8qIFRoaXMgZGVmaW5lcyB0aGUgY29tbW9uIHJlbG9jIGhvb2tzIGJhc2VkIG9uIG1pcHNfcmVsb2MuZGVmLiAgKi8KKysjaW5jbHVkZSAiY29tbW9uLXJlbG9jLmMiCisrCisrY29uc3QgY2hhciAqCisrbWlwc19pbml0IChlbGYsIG1hY2hpbmUsIGVoLCBlaGxlbikKKysgICAgIEVsZiAqZWxmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysgICAgIEdFbGZfSGFsZiBtYWNoaW5lIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysgICAgIEVibCAqZWg7CisrICAgICBzaXplX3QgZWhsZW47CisreworKyAgLyogQ2hlY2sgd2hldGhlciB0aGUgRWxmX0JIIG9iamVjdCBoYXMgYSBzdWZmaWNlbnQgc2l6ZS4gICovCisrICBpZiAoZWhsZW4gPCBzaXplb2YgKEVibCkpCisrICAgIHJldHVybiBOVUxMOworKworKyAgLyogV2UgaGFuZGxlIGl0LiAgKi8KKysgIGlmIChtYWNoaW5lID09IEVNX01JUFMpCisrICAgIGVoLT5uYW1lID0gIk1JUFMgUjMwMDAgYmlnLWVuZGlhbiI7CisrICBlbHNlIGlmIChtYWNoaW5lID09IEVNX01JUFNfUlMzX0xFKQorKyAgICBlaC0+bmFtZSA9ICJNSVBTIFIzMDAwIGxpdHRsZS1lbmRpYW4iOworKworKyAgbWlwc19pbml0X3JlbG9jIChlaCk7CisrICBIT09LIChlaCwgcmVsb2Nfc2ltcGxlX3R5cGUpOworKyAgSE9PSyAoZWgsIHJldHVybl92YWx1ZV9sb2NhdGlvbik7CisrICBIT09LIChlaCwgcmVnaXN0ZXJfaW5mbyk7CisrCisrICByZXR1cm4gTU9EVkVSU0lPTjsKKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvbWlwc19yZWdzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9taXBzX3JlZ3MuYwkyMDEwLTAyLTI0IDE4OjU3OjM1LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSwxMDQgQEAKKysvKiBSZWdpc3RlciBuYW1lcyBhbmQgbnVtYmVycyBmb3IgTUlQUyBEV0FSRi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDYgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGR3YXJmLmg+CisrCisrI2RlZmluZSBCQUNLRU5EIG1pcHNfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKytzc2l6ZV90CisrbWlwc19yZWdpc3Rlcl9pbmZvIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSwKKysJCSAgICBpbnQgcmVnbm8sIGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLAorKwkJICAgIGNvbnN0IGNoYXIgKipwcmVmaXgsIGNvbnN0IGNoYXIgKipzZXRuYW1lLAorKwkJICAgIGludCAqYml0cywgaW50ICp0eXBlKQorK3sKKysgIGlmIChuYW1lID09IE5VTEwpCisrICAgIHJldHVybiA2NjsKKysKKysgIGlmIChyZWdubyA8IDAgfHwgcmVnbm8gPiA2NSB8fCBuYW1lbGVuIDwgNCkKKysgICAgcmV0dXJuIC0xOworKworKyAgKnByZWZpeCA9ICIkIjsKKysKKysgIGlmIChyZWdubyA8IDMyKQorKyAgICB7CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgaWYgKHJlZ25vIDwgMzIgKyAxMCkKKysgICAgICAgIHsKKysgICAgICAgICAgbmFtZVswXSA9IHJlZ25vICsgJzAnOworKyAgICAgICAgICBuYW1lbGVuID0gMTsKKysgICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgIG5hbWVbMF0gPSAocmVnbm8gLyAxMCkgKyAnMCc7CisrICAgICAgICAgIG5hbWVbMV0gPSAocmVnbm8gJSAxMCkgKyAnMCc7CisrICAgICAgICAgIG5hbWVsZW4gPSAyOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChyZWdubyA8IDY0KQorKyAgICB7CisrICAgICAgKnNldG5hbWUgPSAiRlBVIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9mbG9hdDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIG5hbWVbMF0gPSAnZic7CisrICAgICAgaWYgKHJlZ25vIDwgMzIgKyAxMCkKKysJeworKwkgIG5hbWVbMV0gPSAocmVnbm8gLSAzMikgKyAnMCc7CisrCSAgbmFtZWxlbiA9IDI7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICBuYW1lWzFdID0gKHJlZ25vIC0gMzIpIC8gMTAgKyAnMCc7CisrCSAgbmFtZVsyXSA9IChyZWdubyAtIDMyKSAlIDEwICsgJzAnOworKwkgIG5hbWVsZW4gPSAzOworKwl9CisrICAgIH0KKysgIGVsc2UgaWYgKHJlZ25vID09IDY0KQorKyAgICB7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgbmFtZVswXSA9ICdoJzsKKysgICAgICBuYW1lWzFdID0gJ2knOworKyAgICAgIG5hbWVsZW4gPSAyOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICBuYW1lWzBdID0gJ2wnOworKyAgICAgIG5hbWVbMV0gPSAnbyc7CisrICAgICAgbmFtZWxlbiA9IDI7CisrICAgIH0KKysKKysgIG5hbWVbbmFtZWxlbisrXSA9ICdcMCc7CisrICByZXR1cm4gbmFtZWxlbjsKKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvbWlwc19yZWxvYy5kZWYKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9taXBzX3JlbG9jLmRlZgkyMDEwLTAyLTI0IDE4OjU3OjM1LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw3OSBAQAorKy8qIExpc3QgdGhlIHJlbG9jYXRpb24gdHlwZXMgZm9yIG1pcHMuICAtKi0gQyAtKi0KKysgICBDb3B5cmlnaHQgKEMpIDIwMDYgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKy8qIAkgICAgTkFNRSwJCVJFTHxFWEVDfERZTgkqLworKworK1JFTE9DX1RZUEUgKE5PTkUsICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFICgxNiwgICAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoMzIsICAgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFJFTDMyLCAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFICgyNiwgICAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoSEkxNiwgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKExPMTYsICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHUFJFTDE2LCAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoTElURVJBTCwgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVDE2LCAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChQQzE2LCAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoQ0FMTDE2LCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdQUkVMMzIsICAgICAgICAgICAgMCkKKysKKytSRUxPQ19UWVBFIChTSElGVDUsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoU0hJRlQ2LCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKDY0LCAgICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1RfRElTUCwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UX1BBR0UsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVF9PRlNULCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1RfSEkxNiwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UX0xPMTYsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFNVQiwgICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChJTlNFUlRfQSwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoSU5TRVJUX0IsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKERFTEVURSwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChISUdIRVIsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoSElHSEVTVCwgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKENBTExfSEkxNiwgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChDQUxMX0xPMTYsICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoU0NOX0RJU1AsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFJFTDE2LCAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChBRERfSU1NRURJQVRFLCAgICAgIDApCisrUkVMT0NfVFlQRSAoUEpVTVAsICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFJFTEdPVCwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChKQUxSLCAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0RUUE1PRDMyLCAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBSRUwzMiwgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQTU9ENjQsICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0RUUFJFTDY0LCAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19HRCwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfTERNLCAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0RUUFJFTF9ISTE2LCAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBSRUxfTE8xNiwgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfR09UVFBSRUwsICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX1RQUkVMMzIsICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19UUFJFTDY0LCAgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfVFBSRUxfSEkxNiwgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX1RQUkVMX0xPMTYsICAgICAwKQorKworKyNkZWZpbmUgTk9fQ09QWV9SRUxPQyAxCisrI2RlZmluZSBOT19SRUxBVElWRV9SRUxPQyAxCitJbmRleDogZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvbWlwc19yZXR2YWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL21pcHNfcmV0dmFsLmMJMjAxMC0wMi0yNCAxODo1NzozNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsMzIxIEBACisrLyogRnVuY3Rpb24gcmV0dXJuIHZhbHVlIGxvY2F0aW9uIGZvciBMaW51eC9taXBzIEFCSS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDUgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxkd2FyZi5oPgorKyNpbmNsdWRlIDxlbGYuaD4KKysKKysjaW5jbHVkZSAiLi4vbGliZWJsL2xpYmVibFAuaCIKKysjaW5jbHVkZSAiLi4vbGliZHcvbGliZHdQLmgiCisrCisrI2RlZmluZSBCQUNLRU5EIG1pcHNfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKysvKiBUaGUgQUJJIG9mIHRoZSBmaWxlLiAgQWxzbyBzZWUgRUZfTUlQU19BQkkyIGFib3ZlLiAqLworKyNkZWZpbmUgRUZfTUlQU19BQkkJCTB4MDAwMEYwMDAKKysKKysvKiBUaGUgb3JpZ2luYWwgbzMyIGFiaS4gKi8KKysjZGVmaW5lIEVfTUlQU19BQklfTzMyICAgICAgICAgIDB4MDAwMDEwMDAKKysKKysvKiBPMzIgZXh0ZW5kZWQgdG8gd29yayBvbiA2NCBiaXQgYXJjaGl0ZWN0dXJlcyAqLworKyNkZWZpbmUgRV9NSVBTX0FCSV9PNjQgICAgICAgICAgMHgwMDAwMjAwMAorKworKy8qIEVBQkkgaW4gMzIgYml0IG1vZGUgKi8KKysjZGVmaW5lIEVfTUlQU19BQklfRUFCSTMyICAgICAgIDB4MDAwMDMwMDAKKysKKysvKiBFQUJJIGluIDY0IGJpdCBtb2RlICovCisrI2RlZmluZSBFX01JUFNfQUJJX0VBQkk2NCAgICAgICAweDAwMDA0MDAwCisrCisrLyogQWxsIHRoZSBwb3NzaWJsZSBNSVBTIEFCSXMuICovCisrZW51bSBtaXBzX2FiaQorKyAgeworKyAgICBNSVBTX0FCSV9VTktOT1dOID0gMCwKKysgICAgTUlQU19BQklfTjMyLAorKyAgICBNSVBTX0FCSV9PMzIsCisrICAgIE1JUFNfQUJJX042NCwKKysgICAgTUlQU19BQklfTzY0LAorKyAgICBNSVBTX0FCSV9FQUJJMzIsCisrICAgIE1JUFNfQUJJX0VBQkk2NCwKKysgICAgTUlQU19BQklfTEFTVAorKyAgfTsKKysKKysvKiBGaW5kIHRoZSBtaXBzIEFCSSBvZiB0aGUgY3VycmVudCBmaWxlICovCisrZW51bSBtaXBzX2FiaSBmaW5kX21pcHNfYWJpKEVsZiAqZWxmKQorK3sKKysgIEdFbGZfRWhkciBlaGRyX21lbTsKKysgIEdFbGZfRWhkciAqZWhkciA9IGdlbGZfZ2V0ZWhkciAoZWxmLCAmZWhkcl9tZW0pOworKworKyAgaWYgKGVoZHIgPT0gTlVMTCkKKysgICAgcmV0dXJuIE1JUFNfQUJJX0xBU1Q7CisrCisrICBHRWxmX1dvcmQgZWxmX2ZsYWdzID0gZWhkci0+ZV9mbGFnczsKKysKKysgIC8qIENoZWNrIGVsZl9mbGFncyB0byBzZWUgaWYgaXQgc3BlY2lmaWVzIHRoZSBBQkkgYmVpbmcgdXNlZC4gICovCisrICBzd2l0Y2ggKChlbGZfZmxhZ3MgJiBFRl9NSVBTX0FCSSkpCisrICAgIHsKKysgICAgY2FzZSBFX01JUFNfQUJJX08zMjoKKysgICAgICByZXR1cm4gTUlQU19BQklfTzMyOworKyAgICBjYXNlIEVfTUlQU19BQklfTzY0OgorKyAgICAgIHJldHVybiBNSVBTX0FCSV9PNjQ7CisrICAgIGNhc2UgRV9NSVBTX0FCSV9FQUJJMzI6CisrICAgICAgcmV0dXJuIE1JUFNfQUJJX0VBQkkzMjsKKysgICAgY2FzZSBFX01JUFNfQUJJX0VBQkk2NDoKKysgICAgICByZXR1cm4gTUlQU19BQklfRUFCSTY0OworKyAgICBkZWZhdWx0OgorKyAgICAgIGlmICgoZWxmX2ZsYWdzICYgRUZfTUlQU19BQkkyKSkKKysJcmV0dXJuIE1JUFNfQUJJX04zMjsKKysgICAgfQorKworKyAgLyogR0NDIGNyZWF0ZXMgYSBwc2V1ZG8tc2VjdGlvbiB3aG9zZSBuYW1lIGRlc2NyaWJlcyB0aGUgQUJJLiAgKi8KKysgIHNpemVfdCBzaHN0cm5keDsKKysgIGlmIChlbGZfZ2V0c2hkcnN0cm5keCAoZWxmLCAmc2hzdHJuZHgpIDwgMCkKKysgICAgcmV0dXJuIE1JUFNfQUJJX0xBU1Q7CisrCisrICBjb25zdCBjaGFyICpuYW1lOworKyAgRWxmX1NjbiAqc2NuID0gTlVMTDsKKysgIHdoaWxlICgoc2NuID0gZWxmX25leHRzY24gKGVsZiwgc2NuKSkgIT0gTlVMTCkKKysgICAgeworKyAgICAgIEdFbGZfU2hkciBzaGRyX21lbTsKKysgICAgICBHRWxmX1NoZHIgKnNoZHIgPSBnZWxmX2dldHNoZHIgKHNjbiwgJnNoZHJfbWVtKTsKKysgICAgICBpZiAoc2hkciA9PSBOVUxMKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX0xBU1Q7CisrCisrICAgICAgbmFtZSA9IGVsZl9zdHJwdHIgKGVsZiwgc2hzdHJuZHgsIHNoZHItPnNoX25hbWUpID86ICIiOworKyAgICAgIGlmIChzdHJuY21wIChuYW1lLCAiLm1kZWJ1Zy4iLCA4KSAhPSAwKQorKyAgICAgICAgY29udGludWU7CisrCisrICAgICAgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuYWJpMzIiKSA9PSAwKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX08zMjsKKysgICAgICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmFiaU4zMiIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfTjMyOworKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuYWJpNjQiKSA9PSAwKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX042NDsKKysgICAgICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmFiaU82NCIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfTzY0OworKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuZWFiaTMyIikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9FQUJJMzI7CisrICAgICAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5lYWJpNjQiKSA9PSAwKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX0VBQkk2NDsKKysgICAgICBlbHNlCisrICAgICAgICByZXR1cm4gTUlQU19BQklfVU5LTk9XTjsKKysgICAgfQorKworKyAgcmV0dXJuIE1JUFNfQUJJX1VOS05PV047CisrfQorKworK3Vuc2lnbmVkIGludAorK21pcHNfYWJpX3JlZ3NpemUgKGVudW0gbWlwc19hYmkgYWJpKQorK3sKKysgIHN3aXRjaCAoYWJpKQorKyAgICB7CisrICAgIGNhc2UgTUlQU19BQklfRUFCSTMyOgorKyAgICBjYXNlIE1JUFNfQUJJX08zMjoKKysgICAgICByZXR1cm4gNDsKKysgICAgY2FzZSBNSVBTX0FCSV9OMzI6CisrICAgIGNhc2UgTUlQU19BQklfTjY0OgorKyAgICBjYXNlIE1JUFNfQUJJX082NDoKKysgICAgY2FzZSBNSVBTX0FCSV9FQUJJNjQ6CisrICAgICAgcmV0dXJuIDg7CisrICAgIGNhc2UgTUlQU19BQklfVU5LTk9XTjoKKysgICAgY2FzZSBNSVBTX0FCSV9MQVNUOgorKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiAwOworKyAgICB9CisrfQorKworKworKy8qICR2MCBvciBwYWlyICR2MCwgJHYxICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19pbnRyZWdfbzMyW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMiB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWczIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgIH07CisrCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19pbnRyZWdbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzMgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfaW50cmVnCTEKKysjZGVmaW5lIG5sb2NfaW50cmVncGFpcgk0CisrCisrLyogJGYwIChmbG9hdCksIG9yIHBhaXIgJGYwLCAkZjEgKGRvdWJsZSkuCisrICogZjIvZjMgYXJlIHVzZWQgZm9yIENPTVBMRVggKD0gMiBkb3VibGVzKSByZXR1cm5zIGluIEZvcnRyYW4gKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ZwcmVnX28zMltdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzMiB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzMgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDM0IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzNSB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICB9OworKworKy8qICRmMCwgb3IgcGFpciAkZjAsICRmMi4gICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19mcHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzMiB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzQgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfZnByZWcgIDEKKysjZGVmaW5lIG5sb2NfZnByZWdwYWlyIDQKKysjZGVmaW5lIG5sb2NfZnByZWdxdWFkIDgKKysKKysvKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RydWN0dXJlIGFuZCBpcyBhY3R1YWxseSBzdG9yZWQgaW4gc3RhY2sgc3BhY2UKKysgICBwYXNzZWQgaW4gYSBoaWRkZW4gYXJndW1lbnQgYnkgdGhlIGNhbGxlci4gIEJ1dCwgdGhlIGNvbXBpbGVyCisrICAgaGVscGZ1bGx5IHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhhdCBzcGFjZSBpbiAkdjAuICAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfYWdncmVnYXRlW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfYnJlZzIsIC5udW1iZXIgPSAwIH0KKysgIH07CisrI2RlZmluZSBubG9jX2FnZ3JlZ2F0ZSAxCisrCisraW50CisrbWlwc19yZXR1cm5fdmFsdWVfbG9jYXRpb24gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyt7CisrICAvKiBGaXJzdCBmaW5kIHRoZSBBQkkgdXNlZCBieSB0aGUgZWxmIG9iamVjdCAqLworKyAgZW51bSBtaXBzX2FiaSBhYmkgPSBmaW5kX21pcHNfYWJpKGZ1bmN0eXBlZGllLT5jdS0+ZGJnLT5lbGYpOworKworKyAgLyogU29tZXRoaW5nIHdlbnQgc2VyaW91c2x5IHdyb25nIHdoaWxlIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBBQkkgKi8KKysgIGlmIChhYmkgPT0gTUlQU19BQklfTEFTVCkKKysgICAgcmV0dXJuIC0xOworKworKyAgLyogV2UgY291bGRuJ3QgaWRlbnRpZnkgdGhlIEFCSSwgYnV0IHRoZSBmaWxlIHNlZW1zIHZhbGlkICovCisrICBpZiAoYWJpID09IE1JUFNfQUJJX1VOS05PV04pCisrICAgIHJldHVybiAtMjsKKysKKysgIC8qIENhbid0IGhhbmRsZSBFQUJJIHZhcmlhbnRzICovCisrICBpZiAoKGFiaSA9PSBNSVBTX0FCSV9FQUJJMzIpIHx8IChhYmkgPT0gTUlQU19BQklfRUFCSTY0KSkKKysgICAgcmV0dXJuIC0yOworKworKyAgdW5zaWduZWQgaW50IHJlZ3NpemUgPSBtaXBzX2FiaV9yZWdzaXplIChhYmkpOworKyAgaWYgKCFyZWdzaXplKQorKyAgICByZXR1cm4gLTI7CisrCisrICAvKiBTdGFydCB3aXRoIHRoZSBmdW5jdGlvbidzIHR5cGUsIGFuZCBnZXQgdGhlIERXX0FUX3R5cGUgYXR0cmlidXRlLAorKyAgICAgd2hpY2ggaXMgdGhlIHR5cGUgb2YgdGhlIHJldHVybiB2YWx1ZS4gICovCisrCisrICBEd2FyZl9BdHRyaWJ1dGUgYXR0cl9tZW07CisrICBEd2FyZl9BdHRyaWJ1dGUgKmF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAoZnVuY3R5cGVkaWUsIERXX0FUX3R5cGUsICZhdHRyX21lbSk7CisrICBpZiAoYXR0ciA9PSBOVUxMKQorKyAgICAvKiBUaGUgZnVuY3Rpb24gaGFzIG5vIHJldHVybiB2YWx1ZSwgbGlrZSBhIGB2b2lkJyBmdW5jdGlvbiBpbiBDLiAgKi8KKysgICAgcmV0dXJuIDA7CisrCisrICBEd2FyZl9EaWUgZGllX21lbTsKKysgIER3YXJmX0RpZSAqdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrICBpbnQgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysKKysgIC8qIEZvbGxvdyB0eXBlZGVmcyBhbmQgcXVhbGlmaWVycyB0byBnZXQgdG8gdGhlIGFjdHVhbCB0eXBlLiAgKi8KKysgIHdoaWxlICh0YWcgPT0gRFdfVEFHX3R5cGVkZWYKKysJIHx8IHRhZyA9PSBEV19UQUdfY29uc3RfdHlwZSB8fCB0YWcgPT0gRFdfVEFHX3ZvbGF0aWxlX3R5cGUKKysJIHx8IHRhZyA9PSBEV19UQUdfcmVzdHJpY3RfdHlwZSB8fCB0YWcgPT0gRFdfVEFHX211dGFibGVfdHlwZSkKKysgICAgeworKyAgICAgIGF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysgICAgICB0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysgICAgICB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKyAgICB9CisrCisrICBzd2l0Y2ggKHRhZykKKysgICAgeworKyAgICBjYXNlIC0xOgorKyAgICAgIHJldHVybiAtMTsKKysKKysgICAgY2FzZSBEV19UQUdfc3VicmFuZ2VfdHlwZToKKysgICAgICBpZiAoISBkd2FyZl9oYXNhdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfYnl0ZV9zaXplKSkKKysJeworKwkgIGF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysJICB0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysJICB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKwl9CisrICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKysKKysgICAgY2FzZSBEV19UQUdfYmFzZV90eXBlOgorKyAgICBjYXNlIERXX1RBR19lbnVtZXJhdGlvbl90eXBlOgorKyAgICBjYXNlIERXX1RBR19wb2ludGVyX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3B0cl90b19tZW1iZXJfdHlwZToKKysgICAgICB7CisrICAgICAgICBEd2FyZl9Xb3JkIHNpemU7CisrCWlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9ieXRlX3NpemUsCisrCQkJCQkgJmF0dHJfbWVtKSwgJnNpemUpICE9IDApCisrCSAgeworKwkgICAgaWYgKHRhZyA9PSBEV19UQUdfcG9pbnRlcl90eXBlIHx8IHRhZyA9PSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlKQorKwkgICAgICBzaXplID0gcmVnc2l6ZTsKKysJICAgIGVsc2UKKysJICAgICAgcmV0dXJuIC0xOworKwkgIH0KKysJaWYgKHRhZyA9PSBEV19UQUdfYmFzZV90eXBlKQorKwkgIHsKKysJICAgIER3YXJmX1dvcmQgZW5jb2Rpbmc7CisrCSAgICBpZiAoZHdhcmZfZm9ybXVkYXRhIChkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfZW5jb2RpbmcsCisrCQkJCQkgICAgICZhdHRyX21lbSksICZlbmNvZGluZykgIT0gMCkKKysJICAgICAgcmV0dXJuIC0xOworKworKyNkZWZpbmUgQUJJX0xPQyhsb2MsIHJlZ3NpemUpICgocmVnc2l6ZSkgPT0gNCA/IChsb2MgIyMgX28zMikgOiAobG9jKSkKKysKKysJICAgIGlmIChlbmNvZGluZyA9PSBEV19BVEVfZmxvYXQpCisrCSAgICAgIHsKKysJCSpsb2NwID0gQUJJX0xPQyhsb2NfZnByZWcsIHJlZ3NpemUpOworKwkJaWYgKHNpemUgPD0gcmVnc2l6ZSkKKysJCSAgICByZXR1cm4gbmxvY19mcHJlZzsKKysKKysJCWlmIChzaXplIDw9IDIqcmVnc2l6ZSkKKysgICAgICAgICAgICAgICAgICByZXR1cm4gbmxvY19mcHJlZ3BhaXI7CisrCisrCQlpZiAoc2l6ZSA8PSA0KnJlZ3NpemUgJiYgYWJpID09IE1JUFNfQUJJX08zMikKKysgICAgICAgICAgICAgICAgICByZXR1cm4gbmxvY19mcHJlZ3F1YWQ7CisrCisrCQlnb3RvIGFnZ3JlZ2F0ZTsKKysJICAgICAgfQorKwkgIH0KKysJKmxvY3AgPSBBQklfTE9DKGxvY19pbnRyZWcsIHJlZ3NpemUpOworKwlpZiAoc2l6ZSA8PSByZWdzaXplKQorKwkgIHJldHVybiBubG9jX2ludHJlZzsKKysJaWYgKHNpemUgPD0gMipyZWdzaXplKQorKwkgIHJldHVybiBubG9jX2ludHJlZ3BhaXI7CisrCisrCS8qIEVsc2UgZmFsbCB0aHJvdWdoLiBTaG91bGRuJ3QgaGFwcGVuIHRob3VnaCAoYXQgbGVhc3Qgd2l0aCBnY2MpICovCisrICAgICAgfQorKworKyAgICBjYXNlIERXX1RBR19zdHJ1Y3R1cmVfdHlwZToKKysgICAgY2FzZSBEV19UQUdfY2xhc3NfdHlwZToKKysgICAgY2FzZSBEV19UQUdfdW5pb25fdHlwZToKKysgICAgY2FzZSBEV19UQUdfYXJyYXlfdHlwZToKKysgICAgYWdncmVnYXRlOgorKyAgICAgIC8qIFhYWCBUT0RPOiBDYW4ndCBoYW5kbGUgc3RydWN0dXJlIHJldHVybiB3aXRoIG90aGVyIEFCSSdzIHlldCA6LS8gKi8KKysgICAgICBpZiAoKGFiaSAhPSBNSVBTX0FCSV9PMzIpICYmIChhYmkgIT0gTUlQU19BQklfTzY0KSkKKysgICAgICAgIHJldHVybiAtMjsKKysKKysgICAgICAqbG9jcCA9IGxvY19hZ2dyZWdhdGU7CisrICAgICAgcmV0dXJuIG5sb2NfYWdncmVnYXRlOworKyAgICB9CisrCisrICAvKiBYWFggV2UgZG9uJ3QgaGF2ZSBhIGdvb2Qgd2F5IHRvIHJldHVybiBzcGVjaWZpYyBlcnJvcnMgZnJvbSBlYmwgY2FsbHMuCisrICAgICBUaGlzIHZhbHVlIG1lYW5zIHdlIGRvIG5vdCB1bmRlcnN0YW5kIHRoZSB0eXBlLCBidXQgaXQgaXMgd2VsbC1mb3JtZWQKKysgICAgIERXQVJGIGFuZCBtaWdodCBiZSB2YWxpZC4gICovCisrICByZXR1cm4gLTI7CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL21pcHNfc3ltYm9sLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9taXBzX3N5bWJvbC5jCTIwMTAtMDItMjQgMTg6NTc6MzUuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDUyIEBACisrLyogTUlQUyBzcGVjaWZpYyBzeW1ib2xpYyBuYW1lIGhhbmRsaW5nLgorKyAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNSBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysgICBXcml0dGVuIGJ5IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+LCAyMDAyLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGVsZi5oPgorKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQJCW1pcHNfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKysvKiBDaGVjayBmb3IgdGhlIHNpbXBsZSByZWxvYyB0eXBlcy4gICovCisrRWxmX1R5cGUKKyttaXBzX3JlbG9jX3NpbXBsZV90eXBlIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksIGludCB0eXBlKQorK3sKKysgIHN3aXRjaCAodHlwZSkKKysgICAgeworKyAgICBjYXNlIFJfTUlQU18xNjoKKysgICAgICByZXR1cm4gRUxGX1RfSEFMRjsKKysgICAgY2FzZSBSX01JUFNfMzI6CisrICAgICAgcmV0dXJuIEVMRl9UX1dPUkQ7CisrICAgIGNhc2UgUl9NSVBTXzY0OgorKyAgICAgIHJldHVybiBFTEZfVF9YV09SRDsKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gRUxGX1RfTlVNOworKyAgICB9CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ1L2xpYmVibC9lYmxvcGVuYmFja2VuZC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDUub3JpZy9saWJlYmwvZWJsb3BlbmJhY2tlbmQuYwkyMDEwLTAyLTI0IDE4OjU1OjUxLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ1L2xpYmVibC9lYmxvcGVuYmFja2VuZC5jCTIwMTAtMDItMjQgMTg6NTc6MzUuMDAwMDAwMDAwICswMDAwCitAQCAtOTEsNiArOTEsOCBAQAorICAgeyAic3BhcmMiLCAiZWxmX3NwYXJjIiwgInNwYXJjIiwgNSwgRU1fU1BBUkMsIDAsIDAgfSwKKyAgIHsgInNwYXJjIiwgImVsZl9zcGFyY3Y4cGx1cyIsICJzcGFyYyIsIDUsIEVNX1NQQVJDMzJQTFVTLCAwLCAwIH0sCisgICB7ICJzMzkwIiwgImVibF9zMzkwIiwgInMzOTAiLCA0LCBFTV9TMzkwLCAwLCAwIH0sCisrICB7ICJtaXBzIiwgImVsZl9taXBzIiwgIm1pcHMiLCA0LCBFTV9NSVBTLCAwLCAwIH0sCisrICB7ICJtaXBzIiwgImVsZl9taXBzZWwiLCAibWlwc2VsIiwgNCwgRU1fTUlQU19SUzNfTEUsIDAsIDAgfSwKKyAKKyAgIHsgIm0zMiIsICJlbGZfbTMyIiwgIm0zMiIsIDMsIEVNX00zMiwgMCwgMCB9LAorICAgeyAibTY4ayIsICJlbGZfbTY4ayIsICJtNjhrIiwgNCwgRU1fNjhLLCAwLCAwIH0sCitJbmRleDogZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvY29tbW9uLXJlbG9jLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0NS5vcmlnL2JhY2tlbmRzL2NvbW1vbi1yZWxvYy5jCTIwMTAtMDItMjQgMTg6NTU6NTEuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvY29tbW9uLXJlbG9jLmMJMjAxMC0wMi0yNCAxODo1NzozNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMDksMTEgKzEwOSwxMyBAQAorIH0KKyAKKyAKKysjaWZuZGVmIE5PX0NPUFlfUkVMT0MKKyBib29sCisgRUJMSE9PSyhjb3B5X3JlbG9jX3ApIChpbnQgcmVsb2MpCisgeworICAgcmV0dXJuIHJlbG9jID09IFJfVFlQRSAoQ09QWSk7CisgfQorKyNlbmRpZgorIAorIGJvb2wKKyBFQkxIT09LKG5vbmVfcmVsb2NfcCkgKGludCByZWxvYykKK0BAIC0xMzUsNyArMTM3LDkgQEAKKyAgIGVibC0+cmVsb2NfdHlwZV9uYW1lID0gRUJMSE9PSyhyZWxvY190eXBlX25hbWUpOworICAgZWJsLT5yZWxvY190eXBlX2NoZWNrID0gRUJMSE9PSyhyZWxvY190eXBlX2NoZWNrKTsKKyAgIGVibC0+cmVsb2NfdmFsaWRfdXNlID0gRUJMSE9PSyhyZWxvY192YWxpZF91c2UpOworKyNpZm5kZWYgTk9fQ09QWV9SRUxPQworICAgZWJsLT5jb3B5X3JlbG9jX3AgPSBFQkxIT09LKGNvcHlfcmVsb2NfcCk7CisrI2VuZGlmCisgICBlYmwtPm5vbmVfcmVsb2NfcCA9IEVCTEhPT0sobm9uZV9yZWxvY19wKTsKKyAjaWZuZGVmIE5PX1JFTEFUSVZFX1JFTE9DCisgICBlYmwtPnJlbGF0aXZlX3JlbG9jX3AgPSBFQkxIT09LKHJlbGF0aXZlX3JlbG9jX3ApOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDUub3JpZy9iYWNrZW5kcy9NYWtlZmlsZS5hbQkyMDEwLTAyLTI0IDE4OjU3OjI2LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTAtMDItMjQgMTg6NTc6NTcuMDAwMDAwMDAwICswMDAwCitAQCAtMjksMTEgKzI5LDExIEBACisgCSAgIC1JJCh0b3Bfc3JjZGlyKS9saWJlbGYgLUkkKHRvcF9zcmNkaXIpL2xpYmR3CisgCisgCistbW9kdWxlcyA9IGkzODYgc2ggeDg2XzY0IGlhNjQgYWxwaGEgYXJtIHNwYXJjIHBwYyBwcGM2NCBzMzkwIHBhcmlzYworK21vZHVsZXMgPSBpMzg2IHNoIHg4Nl82NCBpYTY0IGFscGhhIGFybSBzcGFyYyBwcGMgcHBjNjQgczM5MCBwYXJpc2MgbWlwcworIGxpYmVibF9waWMgPSBsaWJlYmxfaTM4Nl9waWMuYSBsaWJlYmxfc2hfcGljLmEgbGliZWJsX3g4Nl82NF9waWMuYSBcCisgCSAgICAgbGliZWJsX2lhNjRfcGljLmEgbGliZWJsX2FscGhhX3BpYy5hIGxpYmVibF9hcm1fcGljLmEgXAorIAkgICAgIGxpYmVibF9zcGFyY19waWMuYSBsaWJlYmxfcHBjX3BpYy5hIGxpYmVibF9wcGM2NF9waWMuYSBcCistCSAgICAgbGliZWJsX3MzOTBfcGljLmEgbGliZWJsX3BhcmlzY19waWMuYQorKwkgICAgIGxpYmVibF9zMzkwX3BpYy5hIGxpYmVibF9wYXJpc2NfcGljLmEgbGliZWJsX21pcHNfcGljLmEKKyBub2luc3RfTElCUkFSSUVTID0gJChsaWJlYmxfcGljKQorIG5vaW5zdF9EQVRBID0gJChsaWJlYmxfcGljOl9waWMuYT0uc28pCisgCitAQCAtOTksNiArOTksMTAgQEAKKyBsaWJlYmxfcGFyaXNjX3BpY19hX1NPVVJDRVMgPSAkKHBhcmlzY19TUkNTKQorIGFtX2xpYmVibF9wYXJpc2NfcGljX2FfT0JKRUNUUyA9ICQocGFyaXNjX1NSQ1M6LmM9Lm9zKQorIAorK21pcHNfU1JDUyA9IG1pcHNfaW5pdC5jIG1pcHNfc3ltYm9sLmMgbWlwc19yZWdzLmMgbWlwc19yZXR2YWwuYworK2xpYmVibF9taXBzX3BpY19hX1NPVVJDRVMgPSAkKG1pcHNfU1JDUykKKythbV9saWJlYmxfbWlwc19waWNfYV9PQkpFQ1RTID0gJChtaXBzX1NSQ1M6LmM9Lm9zKQorKworIGxpYmVibF8lLnNvIGxpYmVibF8lLm1hcDogbGliZWJsXyVfcGljLmEgJChsaWJlbGYpICQobGliZHcpCisgCUBybSAtZiAkKEA6LnNvPS5tYXApCisgCWVjaG8gJ0VMRlVUSUxTXyQoUEFDS0FHRV9WRVJTSU9OKSB7IGdsb2JhbDogJCpfaW5pdDsgbG9jYWw6ICo7IH07JyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9ubS1GaXgtc2l6ZS1wYXNzZWQtdG8tc25wcmludGYtZm9yLWludmFsaWQtc2hfbmFtZS1jYXNlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvbm0tRml4LXNpemUtcGFzc2VkLXRvLXNucHJpbnRmLWZvci1pbnZhbGlkLXNoX25hbWUtY2FzZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjVkYWQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvbm0tRml4LXNpemUtcGFzc2VkLXRvLXNucHJpbnRmLWZvci1pbnZhbGlkLXNoX25hbWUtY2FzZS5wYXRjaApAQCAtMCwwICsxLDI3IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK25tOiBGaXggc2l6ZSBwYXNzZWQgdG8gc25wcmludGYgZm9yIGludmFsaWQgc2hfbmFtZSBjYXNlLgorbmF0aXZlIGJ1aWxkIGZhaWxlZCBhcyBmb2xsb3dpbmcgb24gRmVkb3JhMTg6CitubS5jOiBJbiBmdW5jdGlvbiAnc2hvd19zeW1ib2xzX3N5c3YnOgorbm0uYzo3NTY6Mjc6IGVycm9yOiBhcmd1bWVudCB0byAnc2l6ZW9mJyBpbiAnc25wcmludGYnIGNhbGwgaXMgdGhlIHNhbWUgZXhwcmVzc2lvbiBhcyB0aGUgZGVzdGluYXRpb247IGRpZCB5b3UgbWVhbiB0byBwcm92aWRlIGFuIGV4cGxpY2l0IGxlbmd0aD8gWy1XZXJyb3I9c2l6ZW9mLXBvaW50ZXItbWVtYWNjZXNzXQorICAgIHNucHJpbnRmIChuYW1lLCBzaXplb2YgbmFtZSwgIltpbnZhbGlkIHNoX25hbWUgJSMiIFBSSXgzMiAiXSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisKK1RoZSBvcmlnaW5hbCBjb21taXQgaXMgaHR0cDovL2dpdC5mZWRvcmFob3N0ZWQub3JnL2NnaXQvZWxmdXRpbHMuZ2l0L2NvbW1pdC9zcmMvbm0uYz9pZD01N2JkNjZjYWJmNmU2YjllY2Y2MjJjZGJmMzUwODA0ODk3YThkZjU4CisKK1NpZ25lZC1vZmYtYnk6IFpoZW5odWEgTHVvIDx6aGVuaHVhLmx1b0BmcmVlc2NhbGUuY29tPgorCistLS0gZWxmdXRpbHMtMC4xNDgvc3JjL25tLmMub3JnCTIwMTMtMDMtMTEgMjI6MzY6MTEuMDAwMDAwMDAwIC0wNTAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL25tLmMJMjAxMy0wMy0xMSAyMjo0NjowOS4wMDAwMDAwMDAgLTA1MDAKK0BAIC03NTIsOCArNzUyLDkgQEAKKyAJCQkgICAgICAgZ2VsZl9nZXRzaGRyIChzY24sICZzaGRyX21lbSktPnNoX25hbWUpOworICAgICAgIGlmICh1bmxpa2VseSAobmFtZSA9PSBOVUxMKSkKKyAJeworLQkgIG5hbWUgPSBhbGxvY2EgKHNpemVvZiAiW2ludmFsaWQgc2hfbmFtZSAweDEyMzQ1Njc4XSIpOworLQkgIHNucHJpbnRmIChuYW1lLCBzaXplb2YgbmFtZSwgIltpbnZhbGlkIHNoX25hbWUgJSMiIFBSSXgzMiAiXSIsCisrCSAgY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gc2l6ZW9mICJbaW52YWxpZCBzaF9uYW1lIDB4MTIzNDU2NzhdIjsKKysJICBuYW1lID0gYWxsb2NhIChidWZzeik7CisrCSAgc25wcmludGYgKG5hbWUsIGJ1ZnN6LCAiW2ludmFsaWQgc2hfbmFtZSAlIyIgUFJJeDMyICJdIiwKKyAJCSAgICBnZWxmX2dldHNoZHIgKHNjbiwgJnNoZHJfbWVtKS0+c2hfbmFtZSk7CisgCX0KKyAgICAgICBzY25uYW1lc1tlbGZfbmR4c2NuIChzY24pXSA9IG5hbWU7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3JlZGhhdC1wb3J0YWJpbGl0eS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YTkxMmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZgpAQCAtMCwwICsxLDc1NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitJbmRleDogZWxmdXRpbHMtMC4xNDgvYmFja2VuZHMvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9iYWNrZW5kcy9DaGFuZ2VMb2cJMjAxMC0wNC0xMyAyMDowODowMi4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9iYWNrZW5kcy9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMDYsNiArMTA2LDEwIEBACisgCSogcHBjX2F0dHJzLmMgKHBwY19jaGVja19vYmplY3RfYXR0cmlidXRlKTogSGFuZGxlIHRhZworIAlHTlVfUG93ZXJfQUJJX1N0cnVjdF9SZXR1cm4uCisgCisrMjAwOS0wMS0yMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAobGliZWJsXyUuc28pOiBVc2UgJChMRF9BU19ORUVERUQpLgorKworIDIwMDgtMTAtMDQgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGkzODZfcmVsb2MuZGVmOiBGaXggZW50cmllcyBmb3IgVExTX0dPVERFU0MsIFRMU19ERVNDX0NBTEwsIGFuZAorQEAgLTQzMyw2ICs0MzcsMTEgQEAKKyAJKiBzcGFyY19pbml0LmM6IExpa2V3aXNlLgorIAkqIHg4Nl82NF9pbml0LmM6IExpa2V3aXNlLgorIAorKzIwMDUtMTEtMjIgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKExEX0FTX05FRURFRCk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkobGliZWJsXyUuc28gcnVsZSk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2wsLS1hcy1uZWVkZWQuCisrCisgMjAwNS0xMS0xOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBwcGM2NF9yZWxvYy5kZWY6IFJFTDMwIC0+IEFERFIzMC4KK0BAIC00NTUsNiArNDY0LDkgQEAKKyAJKiBNYWtlZmlsZS5hbSAodW5pbnN0YWxsKTogRG9uJ3QgdHJ5IHRvIHJlbW92ZSAkKHBrZ2luY2x1ZGVkaXIpLgorIAkoQ0xFQU5GSUxFUyk6IEFkZCBsaWJlYmxfJChtKS5zby4KKyAKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAJKiBwcGNfcmVsb2MuZGVmOiBVcGRhdGUgYml0cyBwZXIgQWxhbiBNb2RyYSA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1Pi4KKyAJKiBwcGM2NF9yZWxvYy5kZWY6IExpa2V3aXNlLgorIAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2JhY2tlbmRzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9iYWNrZW5kcy9NYWtlZmlsZS5hbQkyMDEwLTA0LTEzIDIwOjA4OjAyLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtMTAzLDcgKzEwMyw3IEBACisgCSQoTElOSykgLXNoYXJlZCAtbyAkKEA6Lm1hcD0uc28pIFwKKyAJCS1XbCwtLXdob2xlLWFyY2hpdmUgJDwgJChjcHVfJCopIC1XbCwtLW5vLXdob2xlLWFyY2hpdmUgXAorIAkJLVdsLC0tdmVyc2lvbi1zY3JpcHQsJChAOi5zbz0ubWFwKSBcCistCQktV2wsLXosZGVmcyAtV2wsLS1hcy1uZWVkZWQgJChsaWJlbGYpICQobGliZHcpICQobGlibXVkZmxhcCkKKysJCS1XbCwteixkZWZzICQoTERfQVNfTkVFREVEKSAkKGxpYmVsZikgJChsaWJkdykgJChsaWJtdWRmbGFwKQorIAkkKHRleHRyZWxfY2hlY2spCisgCisgbGliZWJsX2kzODYuc286ICQoY3B1X2kzODYpCitJbmRleDogZWxmdXRpbHMtMC4xNDgvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9DaGFuZ2VMb2cJMjAxMC0wNC0yMSAxNDoyNjo0MC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yLDYgKzIsMTAgQEAKKyAKKyAJKiBjb25maWd1cmUuYWMgKExPQ0FMRURJUiwgREFUQURJUk5BTUUpOiBSZW1vdmVkLgorIAorKzIwMDktMTEtMjIgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogY29uZmlndXJlLmFjOiBVc2Ugc2VkIGFuZCBleHByIGluc3RlYWQgb2YgbW9kZXJuIGJhc2ggZXh0ZW5zaW9ucy4KKysKKyAyMDA5LTA5LTIxICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBjb25maWd1cmUuYWM6IFVwZGF0ZSBmb3IgbW9yZSBtb2Rlcm4gYXV0b2NvbmYuCitAQCAtMTAsNiArMTQsMTAgQEAKKyAKKyAJKiBjb25maWd1cmUuYWMgKHppcF9MSUJTKTogQ2hlY2sgZm9yIGxpYmx6bWEgdG9vLgorIAorKzIwMDktMDgtMTcgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgLWZnbnU4OS1pbmxpbmU7IGFkZCBpdCB0byBXRVhUUkEgaWYgaXQgd29ya3MuCisrCisgMjAwOS0wNC0xOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBjb25maWd1cmUuYWMgKGV1X3ZlcnNpb24pOiBSb3VuZCBkb3duIGhlcmUsIG5vdCBpbiB2ZXJzaW9uLmggbWFjcm9zLgorQEAgLTIxLDYgKzI5LDggQEAKKyAKKyAyMDA5LTAxLTIzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIF9fYnVpbHRpbl9wb3Bjb3VudC4KKysKKyAJKiBjb25maWd1cmUuYWMgKHpsaWIgY2hlY2spOiBDaGVjayBmb3IgZ3pkaXJlY3QsIG5lZWQgemxpYiA+PSAxLjIuMi4zLgorIAorIAkqIGNvbmZpZ3VyZS5hYyAoX190aHJlYWQgY2hlY2spOiBVc2UgQUNfTElOS19JRkVMU0UsIGluIGNhc2Ugb2YKK0BAIC0xMDEsNiArMTExLDEwIEBACisgCSogY29uZmlndXJlLmFjOiBBZGQgZHVtbXkgYXV0b21ha2UgY29uZGl0aW9uYWwgdG8gZ2V0IGRlcGVuZGVuY2llcworIAlmb3Igbm9uLWdlbmVyaWMgbGlua2VyIHJpZ2h0LiAgU2VlIHNyYy9NYWtlZmlsZS5hbS4KKyAKKysyMDA1LTExLTIyICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIC0tYXMtbmVlZGVkIGxpbmtlciBvcHRpb24uCisrCisgMjAwNS0xMS0xOCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBNYWtlZmlsZS5hbSAoRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUyk6IE5ldyB2YXJpYWJsZS4KK0BAIC0xNDgsNiArMTYyLDE3IEBACisgCSogTWFrZWZpbGUuYW0gKGFsbF9TVUJESVJTKTogQWRkIGxpYmR3ZmwuCisgCSogY29uZmlndXJlLmFjOiBXcml0ZSBsaWJkd2ZsL01ha2VmaWxlLgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogY29uZmlndXJlLmFjIChXRVhUUkEpOiBDaGVjayBmb3IgLVdleHRyYSBhbmQgc2V0IHRoaXMgc3Vic3RpdHV0aW9uLgorKworKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIHN0cnVjdCBzdGF0IHN0Xz90aW0gbWVtYmVycy4KKysJKiBzcmMvc3RyaXAuYyAocHJvY2Vzc19maWxlKTogVXNlIHN0Xz90aW1lIGlmIHN0Xz90aW0gYXJlIG5vdCB0aGVyZS4KKysKKysJKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciBmdXRpbWVzIGZ1bmN0aW9uLgorKwkqIHNyYy9zdHJpcC5jIChoYW5kbGVfZWxmKSBbISBIQVZFX0ZVVElNRVNdOiBVc2UgdXRpbWVzIGluc3RlYWQuCisrCShoYW5kbGVfYXIpIFshIEhBVkVfRlVUSU1FU106IExpa2V3aXNlLgorKworIDIwMDUtMDUtMTkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogY29uZmlndXJlLmFjIFtBSF9CT1RUT01dIChJTlRERUNMLCBfSU5UREVDTCk6IE5ldyBtYWNyb3MuCitJbmRleDogZWxmdXRpbHMtMC4xNDgvY29uZmlnL2V1LmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9jb25maWcvZXUuYW0JMjAxMC0wNC0yMSAxNDoyNjo0MC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9jb25maWcvZXUuYW0JMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yNSwxMSArMjUsMTQgQEAKKyAjIyA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LgorICMjCisgCisrV0VYVFJBID0gQFdFWFRSQUAKKytMRF9BU19ORUVERUQgPSBATERfQVNfTkVFREVEQAorKworIERFRlMgPSAtRF9HTlVfU09VUkNFIC1ESEFWRV9DT05GSUdfSCAtRExPQ0FMRURJUj0nIiR7bG9jYWxlZGlyfSInCisgSU5DTFVERVMgPSAtSS4gLUkkKHNyY2RpcikgLUkkKHRvcF9zcmNkaXIpL2xpYiAtSS4uCisgQU1fQ0ZMQUdTID0gLXN0ZD1nbnU5OSAtV2FsbCAtV3NoYWRvdyBcCisgCSAgICAkKGlmICQoJCgqRilfbm9fV2Vycm9yKSwsLVdlcnJvcikgXAorLQkgICAgJChpZiAkKCQoKkYpX25vX1d1bnVzZWQpLCwtV3VudXNlZCAtV2V4dHJhKSBcCisrCSAgICAkKGlmICQoJCgqRilfbm9fV3VudXNlZCksLC1XdW51c2VkICQoV0VYVFJBKSkgXAorIAkgICAgJChpZiAkKCQoKkYpX25vX1dmb3JtYXQpLC1Xbm8tZm9ybWF0LC1XZm9ybWF0PTIpIFwKKyAJICAgICQoJCgqRilfQ0ZMQUdTKQorIAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2NvbmZpZy5oLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9jb25maWcuaC5pbgkyMDEwLTA2LTI4IDE5OjA3OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2NvbmZpZy5oLmluCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDggQEAKKyAvKiBjb25maWcuaC5pbi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5hYyBieSBhdXRvaGVhZGVyLiAgKi8KKyAKKysvKiBIYXZlIF9fYnVpbHRpbl9wb3Bjb3VudC4gKi8KKysjdW5kZWYgSEFWRV9CVUlMVElOX1BPUENPVU5UCisrCisgLyogJGxpYmRpciBzdWJkaXJlY3RvcnkgY29udGFpbmluZyBsaWJlYmwgbW9kdWxlcy4gKi8KKyAjdW5kZWYgTElCRUJMX1NVQkRJUgorIAorQEAgLTU1LDQgKzU4LDcgQEAKKyAvKiBEZWZpbmUgZm9yIGxhcmdlIGZpbGVzLCBvbiBBSVgtc3R5bGUgaG9zdHMuICovCisgI3VuZGVmIF9MQVJHRV9GSUxFUworIAorKy8qIFN0dWJiZWQgb3V0IGlmIG1pc3NpbmcgY29tcGlsZXIgc3VwcG9ydC4gKi8KKysjdW5kZWYgX190aHJlYWQKKysKKyAjaW5jbHVkZSA8ZXUtY29uZmlnLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNDgvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9jb25maWd1cmUuYWMJMjAxMC0wNi0yOCAxOTowNzoyNi4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9jb25maWd1cmUuYWMJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC03Myw2ICs3Myw1NCBAQAorIEFTX0lGKFt0ZXN0ICJ4JGFjX2N2X2M5OSIgIT0geHllc10sCisgICAgICAgQUNfTVNHX0VSUk9SKFtnY2Mgd2l0aCBDOTkgc3VwcG9ydCByZXF1aXJlZF0pKQorIAorK0FDX0NBQ0hFX0NIRUNLKFtmb3IgLVdleHRyYSBvcHRpb24gdG8gJENDXSwgYWNfY3ZfY2Nfd2V4dHJhLCBbZG5sCisrb2xkX0NGTEFHUz0iJENGTEFHUyIKKytDRkxBR1M9IiRDRkxBR1MgLVdleHRyYSIKKytBQ19DT01QSUxFX0lGRUxTRShbdm9pZCBmb28gKHZvaWQpIHsgfV0sCisrCQkgIGFjX2N2X2NjX3dleHRyYT15ZXMsIGFjX2N2X2NjX3dleHRyYT1ubykKKytDRkxBR1M9IiRvbGRfQ0ZMQUdTIl0pCisrQUNfU1VCU1QoV0VYVFJBKQorK0FTX0lGKFt0ZXN0ICJ4JGFjX2N2X2NjX3dleHRyYSIgPSB4eWVzXSwgW1dFWFRSQT0tV2V4dHJhXSwgW1dFWFRSQT0tV10pCisrCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtZmdudTg5LWlubGluZSBvcHRpb24gdG8gJENDXSwgYWNfY3ZfY2NfZ251ODlfaW5saW5lLCBbZG5sCisrb2xkX0NGTEFHUz0iJENGTEFHUyIKKytDRkxBR1M9IiRDRkxBR1MgLWZnbnU4OS1pbmxpbmUgLVdlcnJvciIKKytBQ19DT01QSUxFX0lGRUxTRShbCisrdm9pZCBmb28gKHZvaWQpCisreworKyAgaW5saW5lIHZvaWQgYmFyICh2b2lkKSB7fQorKyAgYmFyICgpOworK30KKytleHRlcm4gaW5saW5lIHZvaWQgYmF6ICh2b2lkKSB7fQorK10sIGFjX2N2X2NjX2dudTg5X2lubGluZT15ZXMsIGFjX2N2X2NjX2dudTg5X2lubGluZT1ubykKKytDRkxBR1M9IiRvbGRfQ0ZMQUdTIl0pCisrQVNfSUYoW3Rlc3QgIngkYWNfY3ZfY2NfZ251ODlfaW5saW5lIiA9IHh5ZXNdLAorKyAgICAgIFtXRVhUUkE9IiR7V0VYVFJBOiskV0VYVFJBIH0tZmdudTg5LWlubGluZSJdKQorKworK0FDX0NBQ0hFX0NIRUNLKFtmb3IgLS1hcy1uZWVkZWQgbGlua2VyIG9wdGlvbl0sCisrCSAgICAgICBhY19jdl9hc19uZWVkZWQsIFtkbmwKKytjYXQgPiBjb25mdGVzdC5jIDw8RU9GCisraW50IG1haW4gKHZvaWQpIHsgcmV0dXJuIDA7IH0KKytFT0YKKytpZiBBQ19UUllfQ09NTUFORChbJHtDQy1jY30gJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MKKysJCQkgICAgLWZQSUMgLXNoYXJlZCAtbyBjb25mdGVzdC5zbyBjb25mdGVzdC5jCisrCQkJICAgIC1XbCwtLWFzLW5lZWRlZCAxPiZBU19NRVNTQUdFX0xPR19GRF0pCisrdGhlbgorKyAgYWNfY3ZfYXNfbmVlZGVkPXllcworK2Vsc2UKKysgIGFjX2N2X2FzX25lZWRlZD1ubworK2ZpCisrcm0gLWYgY29uZnRlc3QqXSkKKytBU19JRihbdGVzdCAieCRhY19jdl9hc19uZWVkZWQiID0geHllc10sCisrICAgICAgW0xEX0FTX05FRURFRD0tV2wsLS1hcy1uZWVkZWRdLCBbTERfQVNfTkVFREVEPV0pCisrQUNfU1VCU1QoTERfQVNfTkVFREVEKQorKworK0FDX0NBQ0hFX0NIRUNLKFtmb3IgX19idWlsdGluX3BvcGNvdW50XSwgYWNfY3ZfcG9wY291bnQsIFtkbmwKKytBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLCBbW2V4aXQgKF9fYnVpbHRpbl9wb3Bjb3VudCAoMTI3KSk7XV0pXSwKKysJICAgICAgIGFjX2N2X3BvcGNvdW50PXllcywgYWNfY3ZfcG9wY291bnQ9bm8pXSkKKytBU19JRihbdGVzdCAieCRhY19jdl9wb3Bjb3VudCIgPSB4eWVzXSwKKysgICAgICBbQUNfREVGSU5FKFtIQVZFX0JVSUxUSU5fUE9QQ09VTlRdLCBbMV0sIFtIYXZlIF9fYnVpbHRpbl9wb3Bjb3VudC5dKV0pCisrCisgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBfX3RocmVhZCBzdXBwb3J0XSwgYWNfY3ZfdGxzLCBbZG5sCisgIyBVc2UgdGhlIHNhbWUgZmxhZ3MgdGhhdCB3ZSB1c2UgZm9yIG91ciBEU09zLCBzbyB0aGUgdGVzdCBpcyByZXByZXNlbnRhdGl2ZS4KKyAjIFNvbWUgb2xkIGNvbXBpbGVyL2xpbmtlci9saWJjIGNvbWJpbmF0aW9ucyBmYWlsIHNvbWUgd2F5cyBhbmQgbm90IG90aGVycy4KK0BAIC04OCw3ICsxMzYsMTAgQEAKKyBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKyBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIl0pCisgQVNfSUYoW3Rlc3QgIngkYWNfY3ZfdGxzIiAhPSB4eWVzXSwKKy0gICAgICBBQ19NU0dfRVJST1IoW19fdGhyZWFkIHN1cHBvcnQgcmVxdWlyZWRdKSkKKysgICAgICBbQVNfSUYoW3Rlc3QgIiR1c2VfbG9ja3MiID0geWVzXSwKKysJICAgICBbQUNfTVNHX0VSUk9SKFstLWVuYWJsZS10aHJlYWQtc2FmZXR5IHJlcXVpcmVzIF9fdGhyZWFkIHN1cHBvcnRdKV0sCisrCSAgICAgW0FDX0RFRklORShbX190aHJlYWRdLCBbLyogZW1wdHk6IG5vIG11bHRpLXRocmVhZCBzdXBwb3J0ICovXSwKKysJCQlbU3R1YmJlZCBvdXQgaWYgbWlzc2luZyBjb21waWxlciBzdXBwb3J0Ll0pXSldKQorIAorIGRubCBUaGlzIHRlc3QgbXVzdCBjb21lIGFzIGVhcmx5IGFzIHBvc3NpYmxlIGFmdGVyIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uCisgZG5sIHRlc3RzLCBiZWNhdXNlIHRoZSBjaG9pY2Ugb2YgdGhlIGZpbGUgbW9kZWwgY2FuIChpbiBwcmluY2lwbGUpIGFmZmVjdAorQEAgLTI1MSw3ICszMDIsNyBAQAorIAorICMgMS4yMzQ8d2hhdGV2ZXI+IC0+IDEyMzQ8d2hhdGV2ZXI+CisgY2FzZSAiJFBBQ0tBR0VfVkVSU0lPTiIgaW4KKy1bWzAtOV1dLiopIGV1X3ZlcnNpb249IiR7UEFDS0FHRV9WRVJTSU9OLy4vfSIgOzsKKytbWzAtOV1dLiopIGV1X3ZlcnNpb249YGVjaG8gIiRQQUNLQUdFX1ZFUlNJT04iIHwgc2VkICdzQFwuQEAnYCA7OworICopICAgICAJICAgQUNfTVNHX0VSUk9SKFtjb25mdXNlZCBieSB2ZXJzaW9uIG51bWJlciAnJFBBQ0tBR0VfVkVSU0lPTiddKSA7OworIGVzYWMKKyBjYXNlICIkZXVfdmVyc2lvbiIgaW4KK0BAIC0yODAsNiArMzMxLDYgQEAKKyBlc2FjCisgCisgIyBSb3VuZCB1cCB0byB0aGUgbmV4dCByZWxlYXNlIEFQSSAoeC55KSB2ZXJzaW9uLgorLVtldV92ZXJzaW9uPSRbKCRldV92ZXJzaW9uICsgOTk5KSAvIDEwMDBdXQorK2V1X3ZlcnNpb249YGV4cHIgXCggJGV1X3ZlcnNpb24gKyA5OTkgXCkgLyAxMDAwYAorIAorIEFDX09VVFBVVAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYi9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYi9DaGFuZ2VMb2cJMjAxMC0wNi0yOCAxOTowNTo1Ni4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWIvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtMTQsNiArMTQsOSBAQAorIAorIDIwMDktMDEtMjMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogZXUtY29uZmlnLmggWyEgSEFWRV9CVUlMVElOX1BPUENPVU5UXQorKwkoX19idWlsdGluX3BvcGNvdW50KTogTmV3IGlubGluZSBmdW5jdGlvbi4KKysKKyAJKiBldS1jb25maWcuaDogQWRkIG11bHRpcGxlIGluY2x1c2lvbiBwcm90ZWN0aW9uLgorIAorIDIwMDktMDEtMTcgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorQEAgLTcwLDYgKzczLDExIEBACisgCSogTWFrZWZpbGUuYW0gKGxpYmV1X2FfU09VUkNFUyk6IEFkZCBpdC4KKyAJKiBzeXN0ZW0uaDogRGVjbGFyZSBjcmMzMl9maWxlLgorIAorKzIwMDUtMDItMDcgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wNC0zMCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogTWFrZWZpbGUuYW06IFVzZSAtZmZ1bmN0aW9uLXNlY3Rpb25zIGZvciB4bWFsbG9jLmMuCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliL2V1LWNvbmZpZy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWIvZXUtY29uZmlnLmgJMjAwOS0wOC0xMiAxNDoyMzoyMi4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWIvZXUtY29uZmlnLmgJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xODIsNiArMTgyLDE3IEBACisgLyogVGhpcyBtYWNybyBpcyB1c2VkIGJ5IHRoZSB0ZXN0cyBjb25kaXRpb25hbGl6ZSBmb3Igc3RhbmRhbG9uZSBidWlsZGluZy4gICovCisgI2RlZmluZSBFTEZVVElMU19IRUFERVIobmFtZSkgPGxpYiMjbmFtZS5oPgorIAorKyNpZm5kZWYgSEFWRV9CVUlMVElOX1BPUENPVU5UCisrIyBkZWZpbmUgX19idWlsdGluX3BvcGNvdW50IGhha21lbV9wb3Bjb3VudAorK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKQorK2hha21lbV9wb3Bjb3VudCAodW5zaWduZWQgaW50IHgpCisreworKyAgLyogSEFLTUVNIDE2OSAqLworKyAgdW5zaWduZWQgaW50IG4gPSB4IC0gKCh4ID4+IDEpICYgMDMzMzMzMzMzMzMzKSAtICgoeCA+PiAyKSAmIDAxMTExMTExMTExMSk7CisrICByZXR1cm4gKChuICsgKG4gPj4gMykpICYgMDMwNzA3MDcwNzA3KSAlIDYzOworK30KKysjZW5kaWYJLyogSEFWRV9CVUlMVElOX1BPUENPVU5UICovCisrCisgCisgI2lmZGVmIFNIQVJFRAorICMgZGVmaW5lIE9MRF9WRVJTSU9OKG5hbWUsIHZlcnNpb24pIFwKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJhc20vQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJhc20vQ2hhbmdlTG9nCTIwMTAtMDMtMDUgMDU6NDg6MjMuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliYXNtL0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTY3LDYgKzY3LDExIEBACisgCSogYXNtX2Vycm9yLmM6IEFkZCBuZXcgZXJyb3IgQVNNX0VfSU9FUlJPUi4KKyAJKiBsaWJhc21QLmg6IEFkZCBBU01fRV9JT0VSUk9SIGRlZmluaXRpb24uCisgCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAyMDA1LTAyLTE1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBNYWtlZmlsZS5hbSAoQU1fQ0ZMQUdTKTogQWRkIC1XdW51c2VkIC1XZXh0cmEgLVdmb3JtYXQ9Mi4KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJjcHUvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJjcHUvQ2hhbmdlTG9nCTIwMTAtMDMtMDUgMDU6NDg6MjMuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliY3B1L0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTksNiArOSw5IEBACisgCisgMjAwOS0wMS0yMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBpMzg2X2Rpc2FzbS5jIChpMzg2X2Rpc2FzbSk6IEFkZCBhYm9ydCBhZnRlciBhc3NlcnQtY29uc3RhbnQgZm9yIG9sZAorKwljb21waWxlcnMgdGhhdCBkb24ndCByZWFsaXplIGl0J3Mgbm9yZXR1cm4uCisrCisgCSogTWFrZWZpbGUuYW0gKGkzODZfcGFyc2VfQ0ZMQUdTKTogVXNlIHF1b3RlcyBhcm91bmQgY29tbWFuZAorIAlzdWJzdGl0dXRpb24gdGhhdCBjYW4gcHJvZHVjZSBsZWFkaW5nIHdoaXRlc3BhY2UuCisgCitAQCAtMzM4LDYgKzM0MSwxMSBAQAorIAkqIGRlZnMvaTM4Ni5kb2M6IE5ldyBmaWxlLgorIAkqIGRlZnMveDg2XzY0OiBOZXcgZmlsZS4KKyAKKysyMDA1LTA0LTA0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbnN0ZWFkIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wMi0xNSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogTWFrZWZpbGUgKEFNX0NGTEFHUyk6IEFkZCAtV3VudXNlZCAtV2V4dHJhIC1XZm9ybWF0PTIuCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliY3B1L2kzODZfZGlzYXNtLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmNwdS9pMzg2X2Rpc2FzbS5jCTIwMDktMDEtMDggMjA6NTY6MzYuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliY3B1L2kzODZfZGlzYXNtLmMJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC03OTEsNiArNzkxLDcgQEAKKyAKKyAJCQlkZWZhdWx0OgorIAkJCSAgYXNzZXJ0ICghICJJTlZBTElEIG5vdCBoYW5kbGVkIik7CisrCQkJICBhYm9ydCAoKTsKKyAJCQl9CisgCQkgICAgfQorIAkJICBlbHNlCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZHcvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJkdy9DaGFuZ2VMb2cJMjAxMC0wNi0yOCAxOTowNTo1Ni4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJkdy9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yNzYsNiArMjc2LDEwIEBACisgCisgCSogZHdhcmZfaGFzYXR0cl9pbnRlZ3JhdGUuYzogSW50ZWdyYXRlIERXX0FUX3NwZWNpZmljYXRpb24gdG9vLgorIAorKzIwMDktMDgtMTcgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogbGliZHcuaDogRGlzYWJsZSBleHRlcm4gaW5saW5lcyBmb3IgR0NDIDQuMi4KKysKKyAyMDA5LTA4LTEwICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIGR3YXJmX2dldHNjb3BldmFyLmM6IFVzZSBkd2FyZl9kaWVuYW1lLgorQEAgLTEwNDQsNiArMTA0OCwxMSBAQAorIAorIDIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKyAJKiBkd2FyZl9mb3JtcmVmX2RpZS5jIChkd2FyZl9mb3JtcmVmX2RpZSk6IEFkZCBDVSBoZWFkZXIgb2Zmc2V0IHRvCisgCWZvcm1yZWYgb2Zmc2V0LgorIAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmR3L2xpYmR3LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmR3L2xpYmR3LmgJMjAxMC0wNi0yOCAxOTowNTo1Ni4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJkdy9saWJkdy5oCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtODQyLDcgKzg0Miw3IEBACisgCisgCisgLyogSW5saW5lIG9wdGltaXphdGlvbnMuICAqLworLSNpZmRlZiBfX09QVElNSVpFX18KKysjaWYgZGVmaW5lZCBfX09QVElNSVpFX18gJiYgIShfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID09IDIpCisgLyogUmV0dXJuIGF0dHJpYnV0ZSBjb2RlIG9mIGdpdmVuIGF0dHJpYnV0ZS4gICovCisgX19saWJkd19leHRlcm5faW5saW5lIHVuc2lnbmVkIGludAorIGR3YXJmX3doYXRhdHRyIChEd2FyZl9BdHRyaWJ1dGUgKmF0dHIpCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZHdmbC9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmR3ZmwvQ2hhbmdlTG9nCTIwMTAtMDYtMjggMTk6MDU6NTYuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZHdmbC9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMjY1LDYgKzEyNjUsMTEgQEAKKyAKKyAyMDA1LTA3LTIxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworKzIwMDUtMDctMjEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisgCSogTWFrZWZpbGUuYW0gKG5vaW5zdF9IRUFERVJTKTogQWRkIGxvYzJjLmMuCisgCisgCSogdGVzdDIuYyAobWFpbik6IENoZWNrIHNzY2FuZiByZXN1bHQgdG8gcXVpZXQgd2FybmluZy4KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlYmwvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlYmwvQ2hhbmdlTG9nCTIwMTAtMDMtMDUgMDU6NDg6MjMuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWJsL0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTYyNCw2ICs2MjQsMTEgQEAKKyAJKiBNYWtlZmlsZS5hbSAobGliZWJsXypfc29fU09VUkNFUyk6IFNldCB0byAkKCpfU1JDUykgc28gZGVwZW5kZW5jeQorIAl0cmFja2luZyB3b3JrcyByaWdodC4KKyAKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIDIwMDUtMDUtMjEgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGxpYmVibF94ODZfNjQubWFwOiBBZGQgeDg2XzY0X2NvcmVfbm90ZS4KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvQ2hhbmdlTG9nCTIwMTAtMDYtMTQgMjE6MTc6MjAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTY1Nyw2ICs2NTcsMTEgQEAKKyAKKyAJKiBlbGYuaDogVXBkYXRlIGZyb20gZ2xpYmMuCisgCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAyMDA1LTA1LTA4ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIGVsZl9iZWdpbi5jIChyZWFkX2ZpbGUpIFtfTVVERkxBUF06IERvbid0IHVzZSBtbWFwIGZvciBub3cuCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2NvbW1vbi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvY29tbW9uLmgJMjAwOS0wMS0wOCAyMDo1NjozNi4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvY29tbW9uLmgJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNjAsNyArMTYwLDcgQEAKKyAgIChWYXIpID0gKHNpemVvZiAoVmFyKSA9PSAxCQkJCQkJICAgICAgXAorIAkgICA/ICh1bnNpZ25lZCBjaGFyKSAoVmFyKQkJCQkJICAgICAgXAorIAkgICA6IChzaXplb2YgKFZhcikgPT0gMgkJCQkJCSAgICAgIFwKKy0JICAgICAgPyBic3dhcF8xNiAoVmFyKQkJCQkJCSAgICAgIFwKKysJICAgICAgPyAodW5zaWduZWQgc2hvcnQgaW50KSBic3dhcF8xNiAoVmFyKQkJCSAgICAgIFwKKyAJICAgICAgOiAoc2l6ZW9mIChWYXIpID09IDQJCQkJCSAgICAgIFwKKyAJCSA/IGJzd2FwXzMyIChWYXIpCQkJCQkgICAgICBcCisgCQkgOiBic3dhcF82NCAoVmFyKSkpKQorQEAgLTE2OSw3ICsxNjksNyBAQAorICAgKERzdCkgPSAoc2l6ZW9mIChWYXIpID09IDEJCQkJCQkgICAgICBcCisgCSAgID8gKHVuc2lnbmVkIGNoYXIpIChWYXIpCQkJCQkgICAgICBcCisgCSAgIDogKHNpemVvZiAoVmFyKSA9PSAyCQkJCQkJICAgICAgXAorLQkgICAgICA/IGJzd2FwXzE2IChWYXIpCQkJCQkJICAgICAgXAorKwkgICAgICA/ICh1bnNpZ25lZCBzaG9ydCBpbnQpIGJzd2FwXzE2IChWYXIpCQkJICAgICAgXAorIAkgICAgICA6IChzaXplb2YgKFZhcikgPT0gNAkJCQkJICAgICAgXAorIAkJID8gYnN3YXBfMzIgKFZhcikJCQkJCSAgICAgIFwKKyAJCSA6IGJzd2FwXzY0IChWYXIpKSkpCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL2FkZHIybGluZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvYWRkcjJsaW5lLmMJMjAxMC0wNS0yOCAxNDozODozMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvYWRkcjJsaW5lLmMJMjAxMC0wNy0wMyAxMzowNTo0MC4wMDAwMDAwMDAgKzAwMDAKK0BAIC00NDcsMTAgKzQ0NywxMCBAQAorICAgICAgIGJvb2wgcGFyc2VkID0gZmFsc2U7CisgICAgICAgaW50IGksIGo7CisgICAgICAgY2hhciAqbmFtZSA9IE5VTEw7CistICAgICAgaWYgKHNzY2FuZiAoc3RyaW5nLCAiKCVtW14pXSklIiBQUklpTUFYICIlbiIsICZuYW1lLCAmYWRkciwgJmkpID09IDIKKysgICAgICBpZiAoc3NjYW5mIChzdHJpbmcsICIoJWFbXildKSUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZhZGRyLCAmaSkgPT0gMgorIAkgICYmIHN0cmluZ1tpXSA9PSAnXDAnKQorIAlwYXJzZWQgPSBhZGp1c3RfdG9fc2VjdGlvbiAobmFtZSwgJmFkZHIsIGR3ZmwpOworLSAgICAgIHN3aXRjaCAoc3NjYW5mIChzdHJpbmcsICIlbVteLStdJW4lIiBQUklpTUFYICIlbiIsICZuYW1lLCAmaSwgJmFkZHIsICZqKSkKKysgICAgICBzd2l0Y2ggKHNzY2FuZiAoc3RyaW5nLCAiJWFbXi0rXSVuJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmksICZhZGRyLCAmaikpCisgCXsKKyAJZGVmYXVsdDoKKyAJICBicmVhazsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvQ2hhbmdlTG9nCTIwMTAtMDYtMjggMTk6MDU6NTYuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA0OjA4LjAwMDAwMDAwMCArMDAwMAorQEAgLTE2NSw4ICsxNjUsMTYgQEAKKyAJKiByZWFkZWxmLmMgKGF0dHJfY2FsbGJhY2spOiBVc2UgcHJpbnRfYmxvY2sgb25seSB3aGVuIHdlIGRvbid0IHVzZQorIAlwcmludF9vcHMuCisgCisrMjAwOS0wOC0xNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBsZC5oOiBEaXNhYmxlIGV4dGVybiBpbmxpbmVzIGZvciBHQ0MgNC4yLgorKworIDIwMDktMDgtMTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogc3RyaW5ncy5jIChyZWFkX2Jsb2NrKTogQ29uZGl0aW9uYWxpemUgcG9zaXhfZmFkdmlzZSB1c2UKKysJb24gW1BPU0lYX0ZBRFZfU0VRVUVOVElBTF0uCisrCUZyb20gUGV0ciBTYWxpbmdlciA8UGV0ci5TYWxpbmdlckBzZXpuYW0uY3o+LgorKworIAkqIGFyLmMgKGRvX29wZXJfZXh0cmFjdCk6IFVzZSBwYXRoY29uZiBpbnN0ZWFkIG9mIHN0YXRmcy4KKyAKKyAyMDA5LTA4LTAxICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KK0BAIC0zMzAsNiArMzM4LDggQEAKKyAJKiByZWFkZWxmLmMgKHByaW50X2RlYnVnX2ZyYW1lX3NlY3Rpb24pOiBVc2UgdCBpbnN0ZWFkIG9mIGogZm9ybWF0cworIAlmb3IgcHRyZGlmZl90IE9GRlNFVC4KKyAKKysJKiBhZGRyMmxpbmUuYyAoaGFuZGxlX2FkZHJlc3MpOiBVc2UgJWEgaW5zdGVhZCBvZiAlbSBmb3IgY29tcGF0aWJpbGl0eS4KKysKKyAyMDA5LTAxLTIxICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBlbGZsaW50LmMgKGNoZWNrX3Byb2dyYW1faGVhZGVyKTogRml4IHR5cG8gaW4gLmVoX2ZyYW1lX2hkciBzZWN0aW9uCitAQCAtNTEzLDYgKzUyMywxMSBAQAorIAl0aGF0IG1hdGNoZXMgaXRzIFBUX0xPQUQncyBwX2ZsYWdzICZ+IFBGX1cuICBPbiBzcGFyYywgUEZfWCByZWFsbHkKKyAJaXMgdmFsaWQgaW4gUkVMUk8uCisgCisrMjAwOC0wMy0wMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiByZWFkZWxmLmMgKGR1bXBfYXJjaGl2ZV9pbmRleCk6IFR3ZWFrIHBvcnRhYmlsaXR5IGhhY2sKKysJdG8gbWF0Y2ggW19fR05VQ19fIDwgNF0gdG9vLgorKworIDIwMDgtMDItMjkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogcmVhZGVsZi5jIChwcmludF9hdHRyaWJ1dGVzKTogQWRkIGEgY2FzdC4KK0BAIC03NjQsNiArNzc5LDggQEAKKyAKKyAJKiByZWFkZWxmLmMgKGhleF9kdW1wKTogRml4IHJvdW5kaW5nIGVycm9yIGluIHdoaXRlc3BhY2UgY2FsY3VsYXRpb24uCisgCisrCSogTWFrZWZpbGUuYW0gKHJlYWRlbGZfbm9fV2Vycm9yKTogTmV3IHZhcmlhYmxlLgorKworIDIwMDctMTAtMTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogbWFrZS1kZWJ1Zy1hcmNoaXZlLmluOiBOZXcgZmlsZS4KK0BAIC0xMjAzLDYgKzEyMjAsMTAgQEAKKyAJKiBlbGZsaW50LmMgKHZhbGlkX2VfbWFjaGluZSk6IEFkZCBFTV9BTFBIQS4KKyAJUmVwb3J0ZWQgYnkgQ2hyaXN0aWFuIEFpY2hpbmdlciA8R3JlZWswQGdteC5uZXQ+LgorIAorKwkqIHN0cmluZ3MuYyAobWFwX2ZpbGUpOiBEZWZpbmUgUE9TSVhfTUFEVl9TRVFVRU5USUFMIHRvCisrCU1BRFZfU0VRVUVOVElBTCBpZiB1bmRlZmluZWQuICAJRG9uJ3QgY2FsbCBwb3NpeF9tYWR2aXNlCisrCWlmIG5laXRoZXIgaXMgZGVmaW5lZC4KKysKKyAyMDA2LTA4LTA4ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBlbGZsaW50LmMgKGNoZWNrX2R5bmFtaWMpOiBEb24ndCByZXF1aXJlIERUX0hBU0ggZm9yIERUX1NZTVRBQi4KK0BAIC0xMjc5LDYgKzEzMDAsMTAgQEAKKyAJKiBNYWtlZmlsZS5hbTogQWRkIGhhY2tzIHRvIGNyZWF0ZSBkZXBlbmRlbmN5IGZpbGVzIGZvciBub24tZ2VuZXJpYworIAlsaW5rZXIuCisgCisrMjAwNi0wNC0wNSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBzdHJpbmdzLmMgKE1BUF9QT1BVTEFURSk6IERlZmluZSB0byAwIGlmIHVuZGVmaW5lZC4KKysKKyAyMDA2LTA2LTEyICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBsZGdlbmVyaWMuYyAobGRfZ2VuZXJpY19nZW5lcmF0ZV9zZWN0aW9ucyk6IERvbid0IGNyZWF0ZSAuaW50ZXJwCitAQCAtMTYyNyw2ICsxNjUyLDExIEBACisgCSogcmVhZGVsZi5jIChwcmludF9kZWJ1Z19sb2Nfc2VjdGlvbik6IEZpeCBpbmRlbnRhdGlvbiBmb3IgbGFyZ2VyCisgCWFkZHJlc3Mgc2l6ZS4KKyAKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIDIwMDUtMDUtMzAgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogcmVhZGVsZi5jIChwcmludF9kZWJ1Z19saW5lX3NlY3Rpb24pOiBQcmludCBzZWN0aW9uIG9mZnNldCBvZiBlYWNoCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL2ZpbmR0ZXh0cmVsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9maW5kdGV4dHJlbC5jCTIwMDktMDItMTEgMDE6MTI6NTkuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2ZpbmR0ZXh0cmVsLmMJMjAxMC0wNy0wMyAxMzowNDowOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC00OTAsNyArNDkwLDExIEBACisgCisgCisgc3RhdGljIHZvaWQKKy1jaGVja19yZWwgKHNpemVfdCBuc2VnbWVudHMsIHN0cnVjdCBzZWdtZW50cyBzZWdtZW50c1tuc2VnbWVudHNdLAorK2NoZWNrX3JlbCAoc2l6ZV90IG5zZWdtZW50cywgc3RydWN0IHNlZ21lbnRzIHNlZ21lbnRzWworKyNpZiBfX0dOVUNfXyA+PSA0CisrCQkJCQkJICAgICAgbnNlZ21lbnRzCisrI2VuZGlmCisrCSAgIF0sCisgCSAgIEdFbGZfQWRkciBhZGRyLCBFbGYgKmVsZiwgRWxmX1NjbiAqc3ltc2NuLCBEd2FyZiAqZHcsCisgCSAgIGNvbnN0IGNoYXIgKmZuYW1lLCBib29sIG1vcmVfdGhhbl9vbmUsIHZvaWQgKiprbm93bnNyY3MpCisgeworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9sZC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvbGQuaAkyMDA5LTA2LTEzIDIyOjM5OjUxLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9sZC5oCTIwMTAtMDctMDMgMTM6MDQ6MDguMDAwMDAwMDAwICswMDAwCitAQCAtMTEyMiw2ICsxMTIyLDcgQEAKKyAKKyAvKiBDaGVja2VkIHdoZXRoZXIgdGhlIHN5bWJvbCBpcyB1bmRlZmluZWQgYW5kIHJlZmVyZW5jZWQgZnJvbSBhIERTTy4gICovCisgZXh0ZXJuIGJvb2wgbGlua2VkX2Zyb21fZHNvX3AgKHN0cnVjdCBzY25pbmZvICpzY25pbmZvLCBzaXplX3Qgc3ltaWR4KTsKKysjaWYgZGVmaW5lZCBfX09QVElNSVpFX18gJiYgIShfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID09IDIpCisgI2lmZGVmIF9fR05VQ19TVERDX0lOTElORV9fCisgX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fKSkKKyAjZW5kaWYKK0BAIC0xMTM5LDUgKzExNDAsNiBAQAorIAorICAgcmV0dXJuIHN5bS0+ZGVmaW5lZCAmJiBzeW0tPmluX2RzbzsKKyB9CisrI2VuZGlmCS8qIE9wdGltaXppbmcgYW5kIG5vdCBHQ0MgNC4yLiAgKi8KKyAKKyAjZW5kaWYJLyogbGQuaCAqLworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL01ha2VmaWxlLmFtCTIwMTAtMDMtMDUgMDU6NDg6MjMuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL01ha2VmaWxlLmFtCTIwMTAtMDctMDMgMTM6MDQ6MDguMDAwMDAwMDAwICswMDAwCitAQCAtOTksNiArOTksOSBAQAorICMgWFhYIFdoaWxlIHRoZSBmaWxlIGlzIG5vdCBmaW5pc2hlZCwgZG9uJ3Qgd2FybiBhYm91dCB0aGlzCisgbGRnZW5lcmljX25vX1d1bnVzZWQgPSB5ZXMKKyAKKysjIEJ1Z2d5IG9sZCBjb21waWxlcnMuCisrcmVhZGVsZl9ub19XZXJyb3IgPSB5ZXMKKysKKyByZWFkZWxmX0xEQUREID0gJChsaWJkdykgJChsaWJlYmwpICQobGliZWxmKSAkKGxpYmV1KSAkKGxpYm11ZGZsYXApIC1sZGwKKyBubV9MREFERCA9ICQobGliZHcpICQobGliZWJsKSAkKGxpYmVsZikgJChsaWJldSkgJChsaWJtdWRmbGFwKSAtbGRsCisgc2l6ZV9MREFERCA9ICQobGliZWxmKSAkKGxpYmV1KSAkKGxpYm11ZGZsYXApCisKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvcmVhZGVsZi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvcmVhZGVsZi5jCTIwMTAtMDYtMjggMTk6MDU6NTYuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL3JlYWRlbGYuYwkyMDEwLTA3LTAzIDEzOjA0OjA4LjAwMDAwMDAwMCArMDAwMAorQEAgLTc4NDUsNyArNzg0NSw3IEBACisgCSAgaWYgKHVubGlrZWx5IChlbGZfcmFuZCAoZWxmLCBhc19vZmYpID09IDApCisgCSAgICAgIHx8IHVubGlrZWx5ICgoc3ViZWxmID0gZWxmX2JlZ2luICgtMSwgRUxGX0NfUkVBRF9NTUFQLCBlbGYpKQorIAkJCSAgID09IE5VTEwpKQorLSNpZiBfX0dMSUJDX18gPCAyIHx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPCA3KQorKyNpZiBfX0dMSUJDX18gPCAyIHx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPCA3KSB8fCBfX0dOVUNfXyA8IDQKKyAJICAgIHdoaWxlICgxKQorICNlbmRpZgorIAkgICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9zdHJpbmdzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9zdHJpbmdzLmMJMjAwOS0wMi0xMSAwMToxMjo1OS4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvc3RyaW5ncy5jCTIwMTAtMDctMDMgMTM6MDQ6MDguMDAwMDAwMDAwICswMDAwCitAQCAtNTEsNiArNTEsMTAgQEAKKyAKKyAjaW5jbHVkZSA8c3lzdGVtLmg+CisgCisrI2lmbmRlZiBNQVBfUE9QVUxBVEUKKysjIGRlZmluZSBNQVBfUE9QVUxBVEUgMAorKyNlbmRpZgorKworIAorIC8qIFByb3RvdHlwZXMgb2YgbG9jYWwgZnVuY3Rpb25zLiAgKi8KKyBzdGF0aWMgaW50IHJlYWRfZmQgKGludCBmZCwgY29uc3QgY2hhciAqZm5hbWUsIG9mZjY0X3QgZmRsZW4pOworQEAgLTQ5MSw4ICs0OTUsMTMgQEAKKyAJCSAgICBmZCwgc3RhcnRfb2ZmKTsKKyAgICAgICBpZiAobWVtICE9IE1BUF9GQUlMRUQpCisgCXsKKysjaWYgIWRlZmluZWQgUE9TSVhfTUFEVl9TRVFVRU5USUFMICYmIGRlZmluZWQgTUFEVl9TRVFVRU5USUFMCisrIyBkZWZpbmUgUE9TSVhfTUFEVl9TRVFVRU5USUFMIE1BRFZfU0VRVUVOVElBTAorKyNlbmRpZgorKyNpZmRlZiBQT1NJWF9NQURWX1NFUVVFTlRJQUwKKyAJICAvKiBXZSB3aWxsIGdvIHRocm91Z2ggdGhlIG1hcHBpbmcgc2VxdWVudGlhbGx5LiAgKi8KKyAJICAodm9pZCkgcG9zaXhfbWFkdmlzZSAobWVtLCBtYXBfc2l6ZSwgUE9TSVhfTUFEVl9TRVFVRU5USUFMKTsKKysjZW5kaWYKKyAJICBicmVhazsKKyAJfQorICAgICAgIGlmIChlcnJubyAhPSBFSU5WQUwgJiYgZXJybm8gIT0gRU5PTUVNKQorQEAgLTU4Niw5ICs1OTUsMTEgQEAKKyAgICAgICBlbGZtYXBfb2ZmID0gZnJvbSAmIH4ocHMgLSAxKTsKKyAgICAgICBlbGZtYXBfYmFzZSA9IGVsZm1hcCA9IG1hcF9maWxlIChmZCwgZWxmbWFwX29mZiwgZmRsZW4sICZlbGZtYXBfc2l6ZSk7CisgCisrI2lmZGVmIFBPU0lYX0ZBRFZfU0VRVUVOVElBTAorICAgICAgIGlmICh1bmxpa2VseSAoZWxmbWFwID09IE1BUF9GQUlMRUQpKQorIAkvKiBMZXQgdGhlIGtlcm5lbCBrbm93IHdlIGFyZSBnb2luZyB0byByZWFkIGV2ZXJ5dGhpbmcgaW4gc2VxdWVuY2UuICAqLworIAkodm9pZCkgcG9zaXhfZmFkdmlzZSAoZmQsIDAsIDAsIFBPU0lYX0ZBRFZfU0VRVUVOVElBTCk7CisrI2VuZGlmCisgICAgIH0KKyAKKyAgIGlmICh1bmxpa2VseSAoZWxmbWFwID09IE1BUF9GQUlMRUQpKQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9zdHJpcC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvc3RyaXAuYwkyMDEwLTAxLTE1IDA5OjA1OjU1LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9zdHJpcC5jCTIwMTAtMDctMDMgMTM6MDQ6MDguMDAwMDAwMDAwICswMDAwCitAQCAtNTMsNiArNTMsMTIgQEAKKyAjaW5jbHVkZSA8bGliZWJsLmg+CisgI2luY2x1ZGUgPHN5c3RlbS5oPgorIAorKyNpZmRlZiBIQVZFX0ZVVElNRVMKKysjIGRlZmluZSBGVVRJTUVTKGZkLCBmbmFtZSwgdHZwKSBmdXRpbWVzIChmZCwgdHZwKQorKyNlbHNlCisrIyBkZWZpbmUgRlVUSU1FUyhmZCwgZm5hbWUsIHR2cCkgdXRpbWVzIChmbmFtZSwgdHZwKQorKyNlbmRpZgorKworIAorIC8qIE5hbWUgYW5kIHZlcnNpb24gb2YgcHJvZ3JhbS4gICovCisgc3RhdGljIHZvaWQgcHJpbnRfdmVyc2lvbiAoRklMRSAqc3RyZWFtLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpOworQEAgLTMwMSw4ICszMDcsMTggQEAKKyAKKyAgICAgICAvKiBJZiB3ZSBoYXZlIHRvIHByZXNlcnZlIHRoZSB0aW1lc3RhbXAsIHdlIG5lZWQgaXQgaW4gdGhlCisgCSBmb3JtYXQgdXRpbWVzKCkgdW5kZXJzdGFuZHMuICAqLworKyNpZmRlZiBIQVZFX1NUUlVDVF9TVEFUX1NUX0FUSU0KKyAgICAgICBUSU1FU1BFQ19UT19USU1FVkFMICgmdHZbMF0sICZwcmVfc3Quc3RfYXRpbSk7CisrI2Vsc2UKKysgICAgICB0dlswXS50dl9zZWMgPSBwcmVfc3Quc3RfYXRpbWU7CisrICAgICAgdHZbMF0udHZfdXNlYyA9IDA7CisrI2VuZGlmCisrI2lmZGVmIEhBVkVfU1RSVUNUX1NUQVRfU1RfTVRJTQorICAgICAgIFRJTUVTUEVDX1RPX1RJTUVWQUwgKCZ0dlsxXSwgJnByZV9zdC5zdF9tdGltKTsKKysjZWxzZQorKyAgICAgIHR2WzFdLnR2X3NlYyA9IHByZV9zdC5zdF9hdGltZTsKKysgICAgICB0dlsxXS50dl91c2VjID0gMDsKKysjZW5kaWYKKyAgICAgfQorIAorICAgLyogT3BlbiB0aGUgZmlsZS4gICovCitAQCAtMTc0Nyw3ICsxNzYzLDcgQEAKKyAgIC8qIElmIHJlcXVlc3RlZCwgcHJlc2VydmUgdGhlIHRpbWVzdGFtcC4gICovCisgICBpZiAodHZwICE9IE5VTEwpCisgICAgIHsKKy0gICAgICBpZiAoZnV0aW1lcyAoZmQsIHR2cCkgIT0gMCkKKysgICAgICBpZiAoRlVUSU1FUyAoZmQsIG91dHB1dF9mbmFtZSwgdHZwKSAhPSAwKQorIAl7CisgCSAgZXJyb3IgKDAsIGVycm5vLCBnZXR0ZXh0ICgiXAorIGNhbm5vdCBzZXQgYWNjZXNzIGFuZCBtb2RpZmljYXRpb24gZGF0ZSBvZiAnJXMnIiksCitAQCAtMTgwNCw3ICsxODIwLDcgQEAKKyAKKyAgIGlmICh0dnAgIT0gTlVMTCkKKyAgICAgeworLSAgICAgIGlmICh1bmxpa2VseSAoZnV0aW1lcyAoZmQsIHR2cCkgIT0gMCkpCisrICAgICAgaWYgKHVubGlrZWx5IChGVVRJTUVTIChmZCwgZm5hbWUsIHR2cCkgIT0gMCkpCisgCXsKKyAJICBlcnJvciAoMCwgZXJybm8sIGdldHRleHQgKCJcCisgY2Fubm90IHNldCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiBkYXRlIG9mICclcyciKSwgZm5hbWUpOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3Rlc3RzL0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvdGVzdHMvQ2hhbmdlTG9nCTIwMTAtMDYtMjggMTk6MDU6NTYuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvdGVzdHMvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDQ6MDguMDAwMDAwMDAwICswMDAwCitAQCAtMTU0LDYgKzE1NCw4IEBACisgCisgMjAwOC0wMS0yMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBsaW5lMmFkZHIuYyAobWFpbik6IFJldmVydCBsYXN0IGNoYW5nZS4KKysKKyAJKiB0ZXN0ZmlsZTQ1LlMuYnoyOiBBZGQgdGVzdHMgZm9yIGNsdHEsIGNxdG8uCisgCSogdGVzdGZpbGU0NS5leHBlY3QuYnoyOiBBZGp1c3QuCisgCitAQCAtODYyLDYgKzg2NCwxMSBAQAorIAkqIE1ha2VmaWxlLmFtIChURVNUUyk6IEFkZCBydW4tZWxmbGludC10ZXN0LnNoLgorIAkoRVhUUkFfRElTVCk6IEFkZCBydW4tZWxmbGludC10ZXN0LnNoIGFuZCB0ZXN0ZmlsZTE4LmJ6Mi4KKyAKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIDIwMDUtMDUtMjQgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGdldC1maWxlcy5jIChtYWluKTogVXNlIGNvcnJlY3QgZm9ybWF0IHNwZWNpZmllci4KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC90ZXN0cy9saW5lMmFkZHIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvdGVzdHMvbGluZTJhZGRyLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC90ZXN0cy9saW5lMmFkZHIuYwkyMDEwLTA3LTAzIDEzOjA0OjA4LjAwMDAwMDAwMCArMDAwMAorQEAgLTEzMiw3ICsxMzIsNyBAQAorICAgICB7CisgICAgICAgc3RydWN0IGFyZ3MgYSA9IHsgLmFyZyA9IGFyZ3ZbY250XSB9OworIAorLSAgICAgIHN3aXRjaCAoc3NjYW5mIChhLmFyZywgIiVtW146XTolZCIsICZhLmZpbGUsICZhLmxpbmUpKQorKyAgICAgIHN3aXRjaCAoc3NjYW5mIChhLmFyZywgIiVhW146XTolZCIsICZhLmZpbGUsICZhLmxpbmUpKQorIAl7CisgCWRlZmF1bHQ6CisgCWNhc2UgMDoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3JlZGhhdC1yb2J1c3RpZnkuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3JlZGhhdC1yb2J1c3RpZnkuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDM5ODU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvcmVkaGF0LXJvYnVzdGlmeS5kaWZmCkBAIC0wLDAgKzEsMTcwOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA3OjEwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC02NDksMTAgKzY0OSw1MyBAQAorIAlJZiBzZWN0aW9uIGNvbnRlbnQgaGFzbid0IGJlZW4gcmVhZCB5ZXQsIGRvIGl0IGJlZm9yZSBsb29raW5nIGZvciB0aGUKKyAJYmxvY2sgc2l6ZS4gIElmIG5vIHNlY3Rpb24gZGF0YSBwcmVzZW50LCBpbmZlciBzaXplIG9mIHNlY3Rpb24gaGVhZGVyLgorIAorKzIwMDUtMDUtMTQgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorKworKwkqIGxpYmVsZlAuaCAoSU5WQUxJRF9ORFgpOiBEZWZpbmUuCisrCSogZ2VsZl9nZXRkeW4uYyAoZ2VsZl9nZXRkeW4pOiBVc2UgaXQuICBSZW1vdmUgbmR4IDwgMCB0ZXN0IGlmIGFueS4KKysJKiBnZWxmX2dldGxpYi5jIChnZWxmX2dldGxpYik6IExpa2V3aXNlLgorKwkqIGdlbGZfZ2V0bW92ZS5jIChnZWxmX2dldG1vdmUpOiBMaWtld2lzZS4KKysJKiBnZWxmX2dldHJlbC5jIChnZWxmX2dldHJlbCk6IExpa2V3aXNlLgorKwkqIGdlbGZfZ2V0cmVsYS5jIChnZWxmX2dldHJlbGEpOiBMaWtld2lzZS4KKysJKiBnZWxmX2dldHN5bS5jIChnZWxmX2dldHN5bSk6IExpa2V3aXNlLgorKwkqIGdlbGZfZ2V0c3ltaW5mby5jIChnZWxmX2dldHN5bWluZm8pOiBMaWtld2lzZS4KKysJKiBnZWxmX2dldHN5bXNobmR4LmMgKGdlbGZfZ2V0c3ltc2huZHgpOiBMaWtld2lzZS4KKysJKiBnZWxmX2dldHZlcnN5bS5jIChnZWxmX2dldHZlcnN5bSk6IExpa2V3aXNlLgorKwkqIGdlbGZfdXBkYXRlX2R5bi5jIChnZWxmX3VwZGF0ZV9keW4pOiBMaWtld2lzZS4KKysJKiBnZWxmX3VwZGF0ZV9saWIuYyAoZ2VsZl91cGRhdGVfbGliKTogTGlrZXdpc2UuCisrCSogZ2VsZl91cGRhdGVfbW92ZS5jIChnZWxmX3VwZGF0ZV9tb3ZlKTogTGlrZXdpc2UuCisrCSogZ2VsZl91cGRhdGVfcmVsLmMgKGdlbGZfdXBkYXRlX3JlbCk6IExpa2V3aXNlLgorKwkqIGdlbGZfdXBkYXRlX3JlbGEuYyAoZ2VsZl91cGRhdGVfcmVsYSk6IExpa2V3aXNlLgorKwkqIGdlbGZfdXBkYXRlX3N5bS5jIChnZWxmX3VwZGF0ZV9zeW0pOiBMaWtld2lzZS4KKysJKiBnZWxmX3VwZGF0ZV9zeW1pbmZvLmMgKGdlbGZfdXBkYXRlX3N5bWluZm8pOiBMaWtld2lzZS4KKysJKiBnZWxmX3VwZGF0ZV9zeW1zaG5keC5jIChnZWxmX3VwZGF0ZV9zeW1zaG5keCk6IExpa2V3aXNlLgorKwkqIGdlbGZfdXBkYXRlX3ZlcnN5bS5jIChnZWxmX3VwZGF0ZV92ZXJzeW0pOiBMaWtld2lzZS4KKysJKiBlbGZfbmV3c2NuLmMgKGVsZl9uZXdzY24pOiBDaGVjayBmb3Igb3ZlcmZsb3cuCisrCSogZWxmMzJfdXBkYXRlZmlsZS5jIChfX2VsZncyKExJQkVMRkJJVFMsdXBkYXRlbW1hcCkpOiBMaWtld2lzZS4KKysJKF9fZWxmdzIoTElCRUxGQklUUyx1cGRhdGVmaWxlKSk6IExpa2V3aXNlLgorKwkqIGVsZl9iZWdpbi5jIChmaWxlX3JlYWRfZWxmKTogTGlrZXdpc2UuCisrCSogZWxmMzJfbmV3cGhkci5jIChlbGZ3MihMSUJFTEZCSVRTLG5ld3BoZHIpKTogTGlrZXdpc2UuCisrCSogZWxmX2dldGFyc3ltLmMgKGVsZl9nZXRhcnN5bSk6IExpa2V3aXNlLgorKwkqIGVsZjMyX2dldHNoZHIuYyAoZWxmdzIoTElCRUxGQklUUyxnZXRzaGRyKSk6IExpa2V3aXNlLgorIDIwMDUtMDUtMTEgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGVsZi5oOiBVcGRhdGUgYWdhaW4uCisgCisrMjAwNS0wNS0xNyAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisrCisrCSogZWxmMzJfZ2V0cGhkci5jIChlbGZ3MihMSUJFTEZCSVRTLGdldHBoZHIpKTogQ2hlY2sgaWYgcHJvZ3JhbSBoZWFkZXIKKysJdGFibGUgZml0cyBpbnRvIG9iamVjdCdzIGJvdW5kcy4KKysJKiBlbGZfZ2V0c2hzdHJuZHguYyAoZWxmX2dldHNoc3RybmR4KTogQWRkIGVsZi0+c3RhcnRfb2Zmc2V0IHRvCisrCWVsZi0+bWFwX2FkZHJlc3MuICBDaGVjayBpZiBmaXJzdCBzZWN0aW9uIGhlYWRlciBmaXRzIGludG8gb2JqZWN0J3MKKysJYm91bmRzLgorKwkqIGVsZjMyX2dldHNoZHIuYyAoZWxmdzIoTElCRUxGQklUUyxnZXRzaGRyKSk6CisrCUNoZWNrIGlmIHNlY3Rpb24gaGVhZGVyIHRhYmxlIGZpdHMgaW50byBvYmplY3QncyBib3VuZHMuCisrCSogZWxmX2JlZ2luLmMgKGdldF9zaG51bSk6IEVuc3VyZSBzZWN0aW9uIGhlYWRlcnMgZml0cyBpbnRvCisrCW9iamVjdCdzIGJvdW5kcy4KKysJKGZpbGVfcmVhZF9lbGYpOiBNYWtlIHN1cmUgc2NuY250IGlzIHNtYWxsIGVub3VnaCB0byBhbGxvY2F0ZSBib3RoCisrCUVsZlhYX1NoZHIgYW5kIEVsZl9TY24gYXJyYXkuICBNYWtlIHN1cmUgc2VjdGlvbiBhbmQgcHJvZ3JhbSBoZWFkZXIKKysJdGFibGVzIGZpdCBpbnRvIG9iamVjdCdzIGJvdW5kcy4gIEF2b2lkIG1lbW9yeSBsZWFrIG9uIGZhaWx1cmUuCisrCisgMjAwNS0wNS0wOSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogZWxmLmg6IFVwZGF0ZSBmcm9tIGdsaWJjLgorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGYzMl9nZXRwaGRyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9lbGYzMl9nZXRwaGRyLmMJMjAxMC0wNC0yMSAxNDoyNjo0MC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmMzJfZ2V0cGhkci5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMTE0LDYgKzExNCwxNiBAQAorIAorICAgICAgIGlmIChlbGYtPm1hcF9hZGRyZXNzICE9IE5VTEwpCisgCXsKKysJICAvKiBGaXJzdCBzZWUgd2hldGhlciB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIEVMRiBoZWFkZXIgaXMKKysJICAgICB2YWxpZCBhbmQgaXQgZG9lcyBub3QgYXNrIGZvciB0b28gbXVjaC4gICovCisrCSAgaWYgKHVubGlrZWx5IChlaGRyLT5lX3Bob2ZmID49IGVsZi0+bWF4aW11bV9zaXplKQorKwkgICAgICB8fCB1bmxpa2VseSAoZWxmLT5tYXhpbXVtX3NpemUgLSBlaGRyLT5lX3Bob2ZmIDwgc2l6ZSkpCisrCSAgICB7CisrCSAgICAgIC8qIFNvbWV0aGluZyBpcyB3cm9uZy4gICovCisrCSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX1BIRFIpOworKwkgICAgICBnb3RvIG91dDsKKysJICAgIH0KKysKKyAJICAvKiBBbGwgdGhlIGRhdGEgaXMgYWxyZWFkeSBtYXBwZWQuICBVc2UgaXQuICAqLworIAkgIHZvaWQgKmZpbGVfcGhkciA9ICgoY2hhciAqKSBlbGYtPm1hcF9hZGRyZXNzCisgCQkJICAgICArIGVsZi0+c3RhcnRfb2Zmc2V0ICsgZWhkci0+ZV9waG9mZik7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZjMyX2dldHNoZHIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2VsZjMyX2dldHNoZHIuYwkyMDA5LTA2LTEzIDIyOjQxOjQyLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGYzMl9nZXRzaGRyLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIFJldHVybiBzZWN0aW9uIGhlYWRlci4KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDUsIDIwMDcsIDIwMDkgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMTk5OC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDE5OTguCisgCitAQCAtODEsNyArODEsOCBAQAorICAgICBnb3RvIG91dDsKKyAKKyAgIHNpemVfdCBzaG51bTsKKy0gIGlmIChfX2VsZl9nZXRzaGRybnVtX3JkbG9jayAoZWxmLCAmc2hudW0pICE9IDApCisrICBpZiAoX19lbGZfZ2V0c2hkcm51bV9yZGxvY2sgKGVsZiwgJnNobnVtKSAhPSAwCisrICAgICAgfHwgc2hudW0gPiBTSVpFX01BWCAvIHNpemVvZiAoRWxmVzIoTElCRUxGQklUUyxTaGRyKSkpCisgICAgIGdvdG8gb3V0OworICAgc2l6ZV90IHNpemUgPSBzaG51bSAqIHNpemVvZiAoRWxmVzIoTElCRUxGQklUUyxTaGRyKSk7CisgCitAQCAtOTgsNiArOTksMTYgQEAKKyAKKyAgIGlmIChlbGYtPm1hcF9hZGRyZXNzICE9IE5VTEwpCisgICAgIHsKKysgICAgICAvKiBGaXJzdCBzZWUgd2hldGhlciB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIEVMRiBoZWFkZXIgaXMKKysJIHZhbGlkIGFuZCBpdCBkb2VzIG5vdCBhc2sgZm9yIHRvbyBtdWNoLiAgKi8KKysgICAgICBpZiAodW5saWtlbHkgKGVoZHItPmVfc2hvZmYgPj0gZWxmLT5tYXhpbXVtX3NpemUpCisrCSAgfHwgdW5saWtlbHkgKGVsZi0+bWF4aW11bV9zaXplIC0gZWhkci0+ZV9zaG9mZiA8IHNpemUpKQorKwl7CisrCSAgLyogU29tZXRoaW5nIGlzIHdyb25nLiAgKi8KKysJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9TRUNUSU9OX0hFQURFUik7CisrCSAgZ290byBmcmVlX2FuZF9vdXQ7CisrCX0KKysKKyAgICAgICBFbGZXMihMSUJFTEZCSVRTLFNoZHIpICpub3RjdnQ7CisgCisgICAgICAgLyogQWxsIHRoZSBkYXRhIGlzIGFscmVhZHkgbWFwcGVkLiAgSWYgd2UgY291bGQgdXNlIGl0CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZjMyX25ld3BoZHIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2VsZjMyX25ld3BoZHIuYwkyMDEwLTAxLTEyIDE2OjU3OjU0LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGYzMl9uZXdwaGRyLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMzUsNiArMTM1LDEyIEBACisgCSAgIHx8IGNvdW50ID09IFBOX1hOVU0KKyAJICAgfHwgZWxmLT5zdGF0ZS5FTEZXKGVsZixMSUJFTEZCSVRTKS5waGRyID09IE5VTEwpCisgICAgIHsKKysgICAgICBpZiAodW5saWtlbHkgKGNvdW50ID4gU0laRV9NQVggLyBzaXplb2YgKEVsZlcyKExJQkVMRkJJVFMsUGhkcikpKSkKKysJeworKwkgIHJlc3VsdCA9IE5VTEw7CisrCSAgZ290byBvdXQ7CisrCX0KKysKKyAgICAgICAvKiBBbGxvY2F0ZSBhIG5ldyBwcm9ncmFtIGhlYWRlciB3aXRoIHRoZSBhcHByb3ByaWF0ZSBudW1iZXIgb2YKKyAJIGVsZW1lbnRzLiAgKi8KKyAgICAgICByZXN1bHQgPSAoRWxmVzIoTElCRUxGQklUUyxQaGRyKSAqKQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGYzMl91cGRhdGVmaWxlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9lbGYzMl91cGRhdGVmaWxlLmMJMjAxMC0wMS0xMiAxNjo1Nzo1NC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmMzJfdXBkYXRlZmlsZS5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMjIzLDYgKzIyMyw5IEBACisgICAvKiBXcml0ZSBhbGwgdGhlIHNlY3Rpb25zLiAgV2VsbCwgb25seSB0aG9zZSB3aGljaCBhcmUgbW9kaWZpZWQuICAqLworICAgaWYgKHNobnVtID4gMCkKKyAgICAgeworKyAgICAgIGlmICh1bmxpa2VseSAoc2hudW0gPiBTSVpFX01BWCAvIHNpemVvZiAoRWxmX1NjbiAqKSkpCisrIAlyZXR1cm4gMTsKKysKKyAgICAgICBFbGZfU2NuTGlzdCAqbGlzdCA9ICZlbGYtPnN0YXRlLkVMRlcoZWxmLExJQkVMRkJJVFMpLnNjbnM7CisgICAgICAgRWxmX1NjbiAqKnNjbnMgPSAoRWxmX1NjbiAqKikgYWxsb2NhIChzaG51bSAqIHNpemVvZiAoRWxmX1NjbiAqKSk7CisgICAgICAgY2hhciAqY29uc3Qgc2hkcl9zdGFydCA9ICgoY2hhciAqKSBlbGYtPm1hcF9hZGRyZXNzICsgZWxmLT5zdGFydF9vZmZzZXQKK0BAIC02NDUsNiArNjQ4LDEwIEBACisgICAvKiBXcml0ZSBhbGwgdGhlIHNlY3Rpb25zLiAgV2VsbCwgb25seSB0aG9zZSB3aGljaCBhcmUgbW9kaWZpZWQuICAqLworICAgaWYgKHNobnVtID4gMCkKKyAgICAgeworKyAgICAgIGlmICh1bmxpa2VseSAoc2hudW0gPiBTSVpFX01BWCAvIChzaXplb2YgKEVsZl9TY24gKikKKysJCQkJCSsgc2l6ZW9mIChFbGZXMihMSUJFTEZCSVRTLFNoZHIpKSkpKQorKwlyZXR1cm4gMTsKKysKKyAgICAgICBvZmZfdCBzaGRyX29mZnNldCA9IGVsZi0+c3RhcnRfb2Zmc2V0ICsgZWhkci0+ZV9zaG9mZjsKKyAjaWYgRVZfTlVNICE9IDIKKyAgICAgICB4ZmN0X3Qgc2hkcl9mY3RwID0gX19lbGZfeGZjdHN0b21bX19saWJlbGZfdmVyc2lvbiAtIDFdW0VWX0NVUlJFTlQgLSAxXVtFTEZXKEVMRkNMQVNTLCBMSUJFTEZCSVRTKSAtIDFdW0VMRl9UX1NIRFJdOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGZfYmVnaW4uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2VsZl9iZWdpbi5jCTIwMTAtMDQtMjEgMTQ6MjY6NDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZl9iZWdpbi5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMTY1LDcgKzE2NSw4IEBACisgCisgICAgICAgaWYgKHVubGlrZWx5IChyZXN1bHQgPT0gMCkgJiYgZWhkci5lMzItPmVfc2hvZmYgIT0gMCkKKyAJeworLQkgIGlmIChlaGRyLmUzMi0+ZV9zaG9mZiArIHNpemVvZiAoRWxmMzJfU2hkcikgPiBtYXhzaXplKQorKwkgIGlmICh1bmxpa2VseSAoZWhkci5lMzItPmVfc2hvZmYgPj0gbWF4c2l6ZSkKKysJICAgICAgfHwgdW5saWtlbHkgKG1heHNpemUgLSBlaGRyLmUzMi0+ZV9zaG9mZiA8IHNpemVvZiAoRWxmMzJfU2hkcikpKQorIAkgICAgLyogQ2Fubm90IHJlYWQgdGhlIGZpcnN0IHNlY3Rpb24gaGVhZGVyLiAgKi8KKyAJICAgIHJldHVybiAwOworIAorQEAgLTIxMyw3ICsyMTQsOCBAQAorIAorICAgICAgIGlmICh1bmxpa2VseSAocmVzdWx0ID09IDApICYmIGVoZHIuZTY0LT5lX3Nob2ZmICE9IDApCisgCXsKKy0JICBpZiAoZWhkci5lNjQtPmVfc2hvZmYgKyBzaXplb2YgKEVsZjY0X1NoZHIpID4gbWF4c2l6ZSkKKysJICBpZiAodW5saWtlbHkgKGVoZHIuZTY0LT5lX3Nob2ZmID49IG1heHNpemUpCisrCSAgICAgIHx8IHVubGlrZWx5IChlaGRyLmU2NC0+ZV9zaG9mZiArIHNpemVvZiAoRWxmNjRfU2hkcikgPiBtYXhzaXplKSkKKyAJICAgIC8qIENhbm5vdCByZWFkIHRoZSBmaXJzdCBzZWN0aW9uIGhlYWRlci4gICovCisgCSAgICByZXR1cm4gMDsKKyAKK0BAIC0yODUsNiArMjg3LDE1IEBACisgICAgIC8qIENvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBzZWN0aW9ucy4gICovCisgICAgIHJldHVybiBOVUxMOworIAorKyAgLyogQ2hlY2sgZm9yIHRvbyBtYW55IHNlY3Rpb25zLiAgKi8KKysgIGlmIChlX2lkZW50W0VJX0NMQVNTXSA9PSBFTEZDTEFTUzMyKQorKyAgICB7CisrICAgICAgaWYgKHNjbmNudCA+IFNJWkVfTUFYIC8gKHNpemVvZiAoRWxmX1NjbikgKyBzaXplb2YgKEVsZjMyX1NoZHIpKSkKKysJcmV0dXJuIE5VTEw7CisrICAgIH0KKysgIGVsc2UgaWYgKHNjbmNudCA+IFNJWkVfTUFYIC8gKHNpemVvZiAoRWxmX1NjbikgKyBzaXplb2YgKEVsZjY0X1NoZHIpKSkKKysgICAgcmV0dXJuIE5VTEw7CisrCisgICAvKiBXZSBjYW4gbm93IGFsbG9jYXRlIHRoZSBtZW1vcnkuICBFdmVuIGlmIHRoZXJlIGFyZSBubyBzZWN0aW9uIGhlYWRlcnMsCisgICAgICB3ZSBhbGxvY2F0ZSBzcGFjZSBmb3IgYSB6ZXJvdGggc2VjdGlvbiBpbiBjYXNlIHdlIG5lZWQgaXQgbGF0ZXIuICAqLworICAgY29uc3Qgc2l6ZV90IHNjbm1heCA9IChzY25jbnQgPzogKGNtZCA9PSBFTEZfQ19SRFdSIHx8IGNtZCA9PSBFTEZfQ19SRFdSX01NQVApCitAQCAtMzI0LDYgKzMzNSwxNiBAQAorIAl7CisgCSAgLyogV2UgY2FuIHVzZSB0aGUgbW1hcHBlZCBtZW1vcnkuICAqLworIAkgIGVsZi0+c3RhdGUuZWxmMzIuZWhkciA9IGVoZHI7CisrCisrCSAgaWYgKHVubGlrZWx5IChlaGRyLT5lX3Nob2ZmID49IG1heHNpemUpCisrCSAgICAgIHx8IHVubGlrZWx5IChtYXhzaXplIC0gZWhkci0+ZV9zaG9mZgorKwkJCSAgIDwgc2NuY250ICogc2l6ZW9mIChFbGYzMl9TaGRyKSkpCisrCSAgICB7CisrCSAgICBmcmVlX2FuZF9vdXQ6CisrCSAgICAgIGZyZWUgKGVsZik7CisrCSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0ZJTEUpOworKwkgICAgICByZXR1cm4gTlVMTDsKKysJICAgIH0KKyAJICBlbGYtPnN0YXRlLmVsZjMyLnNoZHIKKyAJICAgID0gKEVsZjMyX1NoZHIgKikgKChjaGFyICopIGVoZHIgKyBlaGRyLT5lX3Nob2ZmKTsKKyAKK0BAIC00MTAsNiArNDMxLDExIEBACisgCXsKKyAJICAvKiBXZSBjYW4gdXNlIHRoZSBtbWFwcGVkIG1lbW9yeS4gICovCisgCSAgZWxmLT5zdGF0ZS5lbGY2NC5laGRyID0gZWhkcjsKKysKKysJICBpZiAodW5saWtlbHkgKGVoZHItPmVfc2hvZmYgPj0gbWF4c2l6ZSkKKysJICAgICAgfHwgdW5saWtlbHkgKGVoZHItPmVfc2hvZmYKKysJCQkgICArIHNjbmNudCAqIHNpemVvZiAoRWxmMzJfU2hkcikgPiBtYXhzaXplKSkKKysJICAgIGdvdG8gZnJlZV9hbmRfb3V0OworIAkgIGVsZi0+c3RhdGUuZWxmNjQuc2hkcgorIAkgICAgPSAoRWxmNjRfU2hkciAqKSAoKGNoYXIgKikgZWhkciArIGVoZHItPmVfc2hvZmYpOworIAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGZfZ2V0YXJzeW0uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2VsZl9nZXRhcnN5bS5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZl9nZXRhcnN5bS5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMTc5LDYgKzE3OSw5IEBACisgICAgICAgc2l6ZV90IGluZGV4X3NpemUgPSBhdG9sICh0bXBidWYpOworIAorICAgICAgIGlmIChTQVJNQUcgKyBzaXplb2YgKHN0cnVjdCBhcl9oZHIpICsgaW5kZXhfc2l6ZSA+IGVsZi0+bWF4aW11bV9zaXplCisrI2lmIFNJWkVfTUFYIDw9IDQyOTQ5NjcyOTVVCisrCSAgfHwgbiA+PSBTSVpFX01BWCAvIHNpemVvZiAoRWxmX0Fyc3ltKQorKyNlbmRpZgorIAkgIHx8IG4gKiBzaXplb2YgKHVpbnQzMl90KSA+IGluZGV4X3NpemUpCisgCXsKKyAJICAvKiBUaGlzIGluZGV4IHRhYmxlIGNhbm5vdCBiZSByaWdodCBzaW5jZSBpdCBkb2VzIG5vdCBmaXQgaW50bworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGZfZ2V0c2hkcnN0cm5keC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZWxmX2dldHNoZHJzdHJuZHguYwkyMDA5LTA2LTEzIDIyOjMxOjM1LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGZfZ2V0c2hkcnN0cm5keC5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMTI1LDEwICsxMjUsMjUgQEAKKyAJICAgICAgaWYgKGVsZi0+bWFwX2FkZHJlc3MgIT0gTlVMTAorIAkJICAmJiBlbGYtPnN0YXRlLmVsZjMyLmVoZHItPmVfaWRlbnRbRUlfREFUQV0gPT0gTVlfRUxGREFUQQorIAkJICAmJiAoQUxMT1dfVU5BTElHTkVECistCQkgICAgICB8fCAoKChzaXplX3QpICgoY2hhciAqKSBlbGYtPm1hcF9hZGRyZXNzICsgb2Zmc2V0KSkKKysJCSAgICAgIHx8ICgoKHNpemVfdCkgKChjaGFyICopIGVsZi0+bWFwX2FkZHJlc3MKKysJCQkgICArIGVsZi0+c3RhcnRfb2Zmc2V0ICsgb2Zmc2V0KSkKKyAJCQkgICYgKF9fYWxpZ25vZl9fIChFbGYzMl9TaGRyKSAtIDEpKSA9PSAwKSkKKy0JCS8qIFdlIGNhbiBkaXJlY3RseSBhY2Nlc3MgdGhlIG1lbW9yeS4gICovCistCQludW0gPSAoKEVsZjMyX1NoZHIgKikgKGVsZi0+bWFwX2FkZHJlc3MgKyBvZmZzZXQpKS0+c2hfbGluazsKKysJCXsKKysJCSAgLyogRmlyc3Qgc2VlIHdoZXRoZXIgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBFTEYgaGVhZGVyIGlzCisrCQkgICAgIHZhbGlkIGFuZCBpdCBkb2VzIG5vdCBhc2sgZm9yIHRvbyBtdWNoLiAgKi8KKysJCSAgaWYgKHVubGlrZWx5IChlbGYtPm1heGltdW1fc2l6ZSAtIG9mZnNldAorKwkJCQk8IHNpemVvZiAoRWxmMzJfU2hkcikpKQorKwkJICAgIHsKKysJCSAgICAgIC8qIFNvbWV0aGluZyBpcyB3cm9uZy4gICovCisrCQkgICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9TRUNUSU9OX0hFQURFUik7CisrCQkgICAgICByZXN1bHQgPSAtMTsKKysJCSAgICAgIGdvdG8gb3V0OworKwkJICAgIH0KKysKKysJCSAgLyogV2UgY2FuIGRpcmVjdGx5IGFjY2VzcyB0aGUgbWVtb3J5LiAgKi8KKysJCSAgbnVtID0gKChFbGYzMl9TaGRyICopIChlbGYtPm1hcF9hZGRyZXNzICsgZWxmLT5zdGFydF9vZmZzZXQKKysJCQkJCSArIG9mZnNldCkpLT5zaF9saW5rOworKwkJfQorIAkgICAgICBlbHNlCisgCQl7CisgCQkgIC8qIFdlIGF2b2lkIHJlYWRpbmcgaW4gYWxsIHRoZSBzZWN0aW9uIGhlYWRlcnMuICBKdXN0IHJlYWQKK0BAIC0xNjMsMTAgKzE3OCwyNSBAQAorIAkgICAgICBpZiAoZWxmLT5tYXBfYWRkcmVzcyAhPSBOVUxMCisgCQkgICYmIGVsZi0+c3RhdGUuZWxmNjQuZWhkci0+ZV9pZGVudFtFSV9EQVRBXSA9PSBNWV9FTEZEQVRBCisgCQkgICYmIChBTExPV19VTkFMSUdORUQKKy0JCSAgICAgIHx8ICgoKHNpemVfdCkgKChjaGFyICopIGVsZi0+bWFwX2FkZHJlc3MgKyBvZmZzZXQpKQorKwkJICAgICAgfHwgKCgoc2l6ZV90KSAoKGNoYXIgKikgZWxmLT5tYXBfYWRkcmVzcworKwkJCSAgICsgZWxmLT5zdGFydF9vZmZzZXQgKyBvZmZzZXQpKQorIAkJCSAgJiAoX19hbGlnbm9mX18gKEVsZjY0X1NoZHIpIC0gMSkpID09IDApKQorLQkJLyogV2UgY2FuIGRpcmVjdGx5IGFjY2VzcyB0aGUgbWVtb3J5LiAgKi8KKy0JCW51bSA9ICgoRWxmNjRfU2hkciAqKSAoZWxmLT5tYXBfYWRkcmVzcyArIG9mZnNldCkpLT5zaF9saW5rOworKwkJeworKwkJICAvKiBGaXJzdCBzZWUgd2hldGhlciB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIEVMRiBoZWFkZXIgaXMKKysJCSAgICAgdmFsaWQgYW5kIGl0IGRvZXMgbm90IGFzayBmb3IgdG9vIG11Y2guICAqLworKwkJICBpZiAodW5saWtlbHkgKGVsZi0+bWF4aW11bV9zaXplIC0gb2Zmc2V0CisrCQkJCTwgc2l6ZW9mIChFbGY2NF9TaGRyKSkpCisrCQkgICAgeworKwkJICAgICAgLyogU29tZXRoaW5nIGlzIHdyb25nLiAgKi8KKysJCSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX1NFQ1RJT05fSEVBREVSKTsKKysJCSAgICAgIHJlc3VsdCA9IC0xOworKwkJICAgICAgZ290byBvdXQ7CisrCQkgICAgfQorKworKwkJICAvKiBXZSBjYW4gZGlyZWN0bHkgYWNjZXNzIHRoZSBtZW1vcnkuICAqLworKwkJICBudW0gPSAoKEVsZjY0X1NoZHIgKikgKGVsZi0+bWFwX2FkZHJlc3MgKyBlbGYtPnN0YXJ0X29mZnNldAorKwkJCQkJICsgb2Zmc2V0KSktPnNoX2xpbms7CisrCQl9CisgCSAgICAgIGVsc2UKKyAJCXsKKyAJCSAgLyogV2UgYXZvaWQgcmVhZGluZyBpbiBhbGwgdGhlIHNlY3Rpb24gaGVhZGVycy4gIEp1c3QgcmVhZAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGZfbmV3c2NuLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9lbGZfbmV3c2NuLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmX25ld3Njbi5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMTA0LDEwICsxMDQsMTggQEAKKyAgIGVsc2UKKyAgICAgeworICAgICAgIC8qIFdlIG11c3QgYWxsb2NhdGUgYSBuZXcgZWxlbWVudC4gICovCistICAgICAgRWxmX1Njbkxpc3QgKm5ld3A7CisrICAgICAgRWxmX1Njbkxpc3QgKm5ld3AgPSBOVUxMOworIAorICAgICAgIGFzc2VydCAoZWxmLT5zdGF0ZS5lbGYuc2NuaW5jciA+IDApOworIAorKyAgICAgIGlmICgKKysjaWYgU0laRV9NQVggPD0gNDI5NDk2NzI5NVUKKysJICBsaWtlbHkgKGVsZi0+c3RhdGUuZWxmLnNjbmluY3IKKysJCSAgPCBTSVpFX01BWCAvIDIgLyBzaXplb2YgKEVsZl9TY24pIC0gc2l6ZW9mIChFbGZfU2NuTGlzdCkpCisrI2Vsc2UKKysJICAxCisrI2VuZGlmCisrCSAgKQorICAgICAgIG5ld3AgPSAoRWxmX1Njbkxpc3QgKikgY2FsbG9jIChzaXplb2YgKEVsZl9TY25MaXN0KQorIAkJCQkgICAgICsgKChlbGYtPnN0YXRlLmVsZi5zY25pbmNyICo9IDIpCisgCQkJCQkqIHNpemVvZiAoRWxmX1NjbikpLCAxKTsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRkeW4uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfZ2V0ZHluLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRkeW4uYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogR2V0IGluZm9ybWF0aW9uIGZyb20gZHluYW1pYyB0YWJsZSBhdCB0aGUgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTkzLDcgKzkzLDcgQEAKKyAJIHRhYmxlIGVudHJpZXMgaGFzIHRvIGJlIGFkb3B0ZWQuICBUaGUgdXNlciBiZXR0ZXIgaGFzIHByb3ZpZGVkCisgCSBhIGJ1ZmZlciB3aGVyZSB3ZSBjYW4gc3RvcmUgdGhlIGluZm9ybWF0aW9uLiAgV2hpbGUgY29weWluZyB0aGUKKyAJIGRhdGEgd2UgYXJlIGNvbnZlcnRpbmcgdGhlIGZvcm1hdC4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjMyX0R5bikgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGYzMl9EeW4sICZkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitAQCAtMTE0LDcgKzExNCw3IEBACisgCisgICAgICAgLyogVGhlIGRhdGEgaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtLiAgSnVzdCBtYWtlIHN1cmUgdGhlCisgCSBpbmRleCBpcyBPSy4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEdFbGZfRHluKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEdFbGZfRHluLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldGxpYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9nZXRsaWIuYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldGxpYi5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBHZXQgbGlicmFyeSBmcm9tIHRhYmxlIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDQgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDQuCisgCitAQCAtODYsNyArODYsNyBAQAorICAgLyogVGhlIGRhdGEgaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtLiAgSnVzdCBtYWtlIHN1cmUgdGhlCisgICAgICBpbmRleCBpcyBPSy4gICovCisgICBHRWxmX0xpYiAqcmVzdWx0ID0gTlVMTDsKKy0gIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChHRWxmX0xpYikgPiBkYXRhLT5kX3NpemUpKQorKyAgaWYgKElOVkFMSURfTkRYIChuZHgsIEdFbGZfTGliLCBkYXRhKSkKKyAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworICAgZWxzZQorICAgICB7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0bW92ZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9nZXRtb3ZlLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRtb3ZlLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIEdldCBtb3ZlIHN0cnVjdHVyZSBhdCB0aGUgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTgzLDcgKzgzLDcgQEAKKyAKKyAgIC8qIFRoZSBkYXRhIGlzIGFscmVhZHkgaW4gdGhlIGNvcnJlY3QgZm9ybS4gIEp1c3QgbWFrZSBzdXJlIHRoZQorICAgICAgaW5kZXggaXMgT0suICAqLworLSAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEdFbGZfTW92ZSkgPiBkYXRhLT5kX3NpemUpKQorKyAgaWYgKElOVkFMSURfTkRYIChuZHgsIEdFbGZfTW92ZSwgZGF0YSkpCisgICAgIHsKKyAgICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgICAgICAgZ290byBvdXQ7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0cmVsYS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9nZXRyZWxhLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRyZWxhLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIEdldCBSRUxBIHJlbG9jYXRpb24gaW5mb3JtYXRpb24gYXQgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTcxLDEyICs3MSw2IEBACisgICBpZiAoZGF0YV9zY24gPT0gTlVMTCkKKyAgICAgcmV0dXJuIE5VTEw7CisgCistICBpZiAodW5saWtlbHkgKG5keCA8IDApKQorLSAgICB7CistICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworLSAgICAgIHJldHVybiBOVUxMOworLSAgICB9CistCisgICBpZiAodW5saWtlbHkgKGRhdGFfc2NuLT5kLmRfdHlwZSAhPSBFTEZfVF9SRUxBKSkKKyAgICAgeworICAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0hBTkRMRSk7CitAQCAtOTMsNyArODcsNyBAQAorICAgaWYgKHNjbi0+ZWxmLT5jbGFzcyA9PSBFTEZDTEFTUzMyKQorICAgICB7CisgICAgICAgLyogV2UgaGF2ZSB0byBjb252ZXJ0IHRoZSBkYXRhLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmMzJfUmVsYSkgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGYzMl9SZWxhLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIHJlc3VsdCA9IE5VTEw7CitAQCAtMTE0LDcgKzEwOCw3IEBACisgICAgIHsKKyAgICAgICAvKiBTaW1wbHkgY29weSB0aGUgZGF0YSBhZnRlciB3ZSBtYWRlIHN1cmUgd2UgYXJlIGFjdHVhbGx5IGdldHRpbmcKKyAJIGNvcnJlY3QgZGF0YS4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjY0X1JlbGEpID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmNjRfUmVsYSwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICByZXN1bHQgPSBOVUxMOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHJlbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9nZXRyZWwuYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHJlbC5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBHZXQgUkVMIHJlbG9jYXRpb24gaW5mb3JtYXRpb24gYXQgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTcxLDEyICs3MSw2IEBACisgICBpZiAoZGF0YV9zY24gPT0gTlVMTCkKKyAgICAgcmV0dXJuIE5VTEw7CisgCistICBpZiAodW5saWtlbHkgKG5keCA8IDApKQorLSAgICB7CistICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworLSAgICAgIHJldHVybiBOVUxMOworLSAgICB9CistCisgICBpZiAodW5saWtlbHkgKGRhdGFfc2NuLT5kLmRfdHlwZSAhPSBFTEZfVF9SRUwpKQorICAgICB7CisgICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSEFORExFKTsKK0BAIC05Myw3ICs4Nyw3IEBACisgICBpZiAoc2NuLT5lbGYtPmNsYXNzID09IEVMRkNMQVNTMzIpCisgICAgIHsKKyAgICAgICAvKiBXZSBoYXZlIHRvIGNvbnZlcnQgdGhlIGRhdGEuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGYzMl9SZWwpID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmMzJfUmVsLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIHJlc3VsdCA9IE5VTEw7CitAQCAtMTEzLDcgKzEwNyw3IEBACisgICAgIHsKKyAgICAgICAvKiBTaW1wbHkgY29weSB0aGUgZGF0YSBhZnRlciB3ZSBtYWRlIHN1cmUgd2UgYXJlIGFjdHVhbGx5IGdldHRpbmcKKyAJIGNvcnJlY3QgZGF0YS4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjY0X1JlbCkgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGY2NF9SZWwsICZkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgcmVzdWx0ID0gTlVMTDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRzeW0uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfZ2V0c3ltLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRzeW0uYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogR2V0IHN5bWJvbCBpbmZvcm1hdGlvbiBmcm9tIHN5bWJvbCB0YWJsZSBhdCB0aGUgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAxOTk5LgorIAorQEAgLTkwLDcgKzkwLDcgQEAKKyAJIHRhYmxlIGVudHJpZXMgaGFzIHRvIGJlIGFkb3B0ZWQuICBUaGUgdXNlciBiZXR0ZXIgaGFzIHByb3ZpZGVkCisgCSBhIGJ1ZmZlciB3aGVyZSB3ZSBjYW4gc3RvcmUgdGhlIGluZm9ybWF0aW9uLiAgV2hpbGUgY29weWluZyB0aGUKKyAJIGRhdGEgd2UgYXJlIGNvbnZlcnRpbmcgdGhlIGZvcm1hdC4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjMyX1N5bSkgPiBkYXRhLT5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGYzMl9TeW0sIGRhdGEpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworQEAgLTExOSw3ICsxMTksNyBAQAorIAorICAgICAgIC8qIFRoZSBkYXRhIGlzIGFscmVhZHkgaW4gdGhlIGNvcnJlY3QgZm9ybS4gIEp1c3QgbWFrZSBzdXJlIHRoZQorIAkgaW5kZXggaXMgT0suICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChHRWxmX1N5bSkgPiBkYXRhLT5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBHRWxmX1N5bSwgZGF0YSkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0c3ltaW5mby5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9nZXRzeW1pbmZvLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRzeW1pbmZvLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIEdldCBhZGRpdGlvbmFsIHN5bWJvbCBpbmZvcm1hdGlvbiBmcm9tIHN5bWJvbCB0YWJsZSBhdCB0aGUgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTg0LDcgKzg0LDcgQEAKKyAKKyAgIC8qIFRoZSBkYXRhIGlzIGFscmVhZHkgaW4gdGhlIGNvcnJlY3QgZm9ybS4gIEp1c3QgbWFrZSBzdXJlIHRoZQorICAgICAgaW5kZXggaXMgT0suICAqLworLSAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEdFbGZfU3ltaW5mbykgPiBkYXRhLT5kX3NpemUpKQorKyAgaWYgKElOVkFMSURfTkRYIChuZHgsIEdFbGZfU3ltaW5mbywgZGF0YSkpCisgICAgIHsKKyAgICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgICAgICAgZ290byBvdXQ7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0c3ltc2huZHguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfZ2V0c3ltc2huZHguYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHN5bXNobmR4LmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDYgKzEsNiBAQAorIC8qIEdldCBzeW1ib2wgaW5mb3JtYXRpb24gYW5kIHNlcGFyYXRlIHNlY3Rpb24gaW5kZXggZnJvbSBzeW1ib2wgdGFibGUKKyAgICBhdCB0aGUgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTkwLDcgKzkwLDcgQEAKKyAgICAgIHNlY3Rpb24gaW5kZXggdGFibGUuICAqLworICAgaWYgKGxpa2VseSAoc2huZHhkYXRhX3NjbiAhPSBOVUxMKSkKKyAgICAgeworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGYzMl9Xb3JkKSA+IHNobmR4ZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmMzJfV29yZCwgJnNobmR4ZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworQEAgLTExMCw3ICsxMTAsNyBAQAorIAkgdGFibGUgZW50cmllcyBoYXMgdG8gYmUgYWRvcHRlZC4gIFRoZSB1c2VyIGJldHRlciBoYXMgcHJvdmlkZWQKKyAJIGEgYnVmZmVyIHdoZXJlIHdlIGNhbiBzdG9yZSB0aGUgaW5mb3JtYXRpb24uICBXaGlsZSBjb3B5aW5nIHRoZQorIAkgZGF0YSB3ZSBhcmUgY29udmVydGluZyB0aGUgZm9ybWF0LiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmMzJfU3ltKSA+IHN5bWRhdGEtPmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjMyX1N5bSwgc3ltZGF0YSkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitAQCAtMTM5LDcgKzEzOSw3IEBACisgCisgICAgICAgLyogVGhlIGRhdGEgaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtLiAgSnVzdCBtYWtlIHN1cmUgdGhlCisgCSBpbmRleCBpcyBPSy4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEdFbGZfU3ltKSA+IHN5bWRhdGEtPmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEdFbGZfU3ltLCBzeW1kYXRhKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXR2ZXJzeW0uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfZ2V0dmVyc3ltLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXR2ZXJzeW0uYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogR2V0IHN5bWJvbCB2ZXJzaW9uIGluZm9ybWF0aW9uIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMTk5OS0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDE5OTkuCisgCitAQCAtOTIsNyArOTIsNyBAQAorIAorICAgLyogVGhlIGRhdGEgaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtLiAgSnVzdCBtYWtlIHN1cmUgdGhlCisgICAgICBpbmRleCBpcyBPSy4gICovCistICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoR0VsZl9WZXJzeW0pID4gZGF0YS0+ZF9zaXplKSkKKysgIGlmIChJTlZBTElEX05EWCAobmR4LCBHRWxmX1ZlcnN5bSwgZGF0YSkpCisgICAgIHsKKyAgICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgICAgICAgcmVzdWx0ID0gTlVMTDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfZHluLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX3VwZGF0ZV9keW4uYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9keW4uYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogVXBkYXRlIGluZm9ybWF0aW9uIGluIGR5bmFtaWMgdGFibGUgYXQgdGhlIGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMC4KKyAKK0BAIC03MSwxMiArNzEsNiBAQAorICAgaWYgKGRhdGEgPT0gTlVMTCkKKyAgICAgcmV0dXJuIDA7CisgCistICBpZiAodW5saWtlbHkgKG5keCA8IDApKQorLSAgICB7CistICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworLSAgICAgIHJldHVybiAwOworLSAgICB9CistCisgICBpZiAodW5saWtlbHkgKGRhdGFfc2NuLT5kLmRfdHlwZSAhPSBFTEZfVF9EWU4pKQorICAgICB7CisgICAgICAgLyogVGhlIHR5cGUgb2YgdGhlIGRhdGEgYmV0dGVyIHNob3VsZCBtYXRjaC4gICovCitAQCAtMTAyLDcgKzk2LDcgQEAKKyAJfQorIAorICAgICAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmMzJfRHluKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjMyX0R5biwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0BAIC0xMTYsNyArMTEwLDcgQEAKKyAgIGVsc2UKKyAgICAgeworICAgICAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmNjRfRHluKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjY0X0R5biwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfbGliLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX3VwZGF0ZV9saWIuYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9saWIuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogVXBkYXRlIGxpYnJhcnkgaW4gdGFibGUgYXQgdGhlIGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwNC4KKyAKK0BAIC02OCwxMiArNjgsNiBAQAorICAgaWYgKGRhdGEgPT0gTlVMTCkKKyAgICAgcmV0dXJuIDA7CisgCistICBpZiAodW5saWtlbHkgKG5keCA8IDApKQorLSAgICB7CistICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworLSAgICAgIHJldHVybiAwOworLSAgICB9CistCisgICBFbGZfRGF0YV9TY24gKmRhdGFfc2NuID0gKEVsZl9EYXRhX1NjbiAqKSBkYXRhOworICAgaWYgKHVubGlrZWx5IChkYXRhX3Njbi0+ZC5kX3R5cGUgIT0gRUxGX1RfTElCKSkKKyAgICAgeworQEAgLTg3LDcgKzgxLDcgQEAKKyAKKyAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKyAgIGludCByZXN1bHQgPSAwOworLSAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjY0X0xpYikgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjY0X0xpYiwgJmRhdGFfc2NuLT5kKSkKKyAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworICAgZWxzZQorICAgICB7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX21vdmUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfdXBkYXRlX21vdmUuYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9tb3ZlLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIFVwZGF0ZSBtb3ZlIHN0cnVjdHVyZSBhdCB0aGUgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTc1LDggKzc1LDcgQEAKKyAgIGFzc2VydCAoc2l6ZW9mIChHRWxmX01vdmUpID09IHNpemVvZiAoRWxmNjRfTW92ZSkpOworIAorICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgaWYgKHVubGlrZWx5IChuZHggPCAwKQorLSAgICAgIHx8IHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEdFbGZfTW92ZSkgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgaWYgKElOVkFMSURfTkRYIChuZHgsIEdFbGZfTW92ZSwgJmRhdGFfc2NuLT5kKSkKKyAgICAgeworICAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAgICAgICByZXR1cm4gMDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfcmVsYS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl91cGRhdGVfcmVsYS5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX3JlbGEuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogVXBkYXRlIFJFTEEgcmVsb2NhdGlvbiBpbmZvcm1hdGlvbiBhdCBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtNjgsMTIgKzY4LDYgQEAKKyAgIGlmIChkc3QgPT0gTlVMTCkKKyAgICAgcmV0dXJuIDA7CisgCistICBpZiAodW5saWtlbHkgKG5keCA8IDApKQorLSAgICB7CistICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworLSAgICAgIHJldHVybiAwOworLSAgICB9CistCisgICBpZiAodW5saWtlbHkgKGRhdGFfc2NuLT5kLmRfdHlwZSAhPSBFTEZfVF9SRUxBKSkKKyAgICAgeworICAgICAgIC8qIFRoZSB0eXBlIG9mIHRoZSBkYXRhIGJldHRlciBzaG91bGQgbWF0Y2guICAqLworQEAgLTEwMSw3ICs5NSw3IEBACisgCX0KKyAKKyAgICAgICAvKiBDaGVjayB3aGV0aGVyIHdlIGhhdmUgdG8gcmVzaXplIHRoZSBkYXRhIGJ1ZmZlci4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjMyX1JlbGEpID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmMzJfUmVsYSwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0BAIC0xMTcsNyArMTExLDcgQEAKKyAgIGVsc2UKKyAgICAgeworICAgICAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmNjRfUmVsYSkgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGY2NF9SZWxhLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9yZWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfdXBkYXRlX3JlbC5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX3JlbC5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBVcGRhdGUgUkVMIHJlbG9jYXRpb24gaW5mb3JtYXRpb24gYXQgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTY4LDEyICs2OCw2IEBACisgICBpZiAoZHN0ID09IE5VTEwpCisgICAgIHJldHVybiAwOworIAorLSAgaWYgKHVubGlrZWx5IChuZHggPCAwKSkKKy0gICAgeworLSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKy0gICAgICByZXR1cm4gMDsKKy0gICAgfQorLQorICAgaWYgKHVubGlrZWx5IChkYXRhX3Njbi0+ZC5kX3R5cGUgIT0gRUxGX1RfUkVMKSkKKyAgICAgeworICAgICAgIC8qIFRoZSB0eXBlIG9mIHRoZSBkYXRhIGJldHRlciBzaG91bGQgbWF0Y2guICAqLworQEAgLTk5LDcgKzkzLDcgQEAKKyAJfQorIAorICAgICAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmMzJfUmVsKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjMyX1JlbCwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0BAIC0xMTQsNyArMTA4LDcgQEAKKyAgIGVsc2UKKyAgICAgeworICAgICAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmNjRfUmVsKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjY0X1JlbCwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfc3ltLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX3VwZGF0ZV9zeW0uYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9zeW0uYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogVXBkYXRlIHN5bWJvbCBpbmZvcm1hdGlvbiBpbiBzeW1ib2wgdGFibGUgYXQgdGhlIGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMC4KKyAKK0BAIC03MiwxMiArNzIsNiBAQAorICAgaWYgKGRhdGEgPT0gTlVMTCkKKyAgICAgcmV0dXJuIDA7CisgCistICBpZiAodW5saWtlbHkgKG5keCA8IDApKQorLSAgICB7CistICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworLSAgICAgIHJldHVybiAwOworLSAgICB9CistCisgICBpZiAodW5saWtlbHkgKGRhdGFfc2NuLT5kLmRfdHlwZSAhPSBFTEZfVF9TWU0pKQorICAgICB7CisgICAgICAgLyogVGhlIHR5cGUgb2YgdGhlIGRhdGEgYmV0dGVyIHNob3VsZCBtYXRjaC4gICovCitAQCAtMTAyLDcgKzk2LDcgQEAKKyAJfQorIAorICAgICAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmMzJfU3ltKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjMyX1N5bSwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0BAIC0xMjUsNyArMTE5LDcgQEAKKyAgIGVsc2UKKyAgICAgeworICAgICAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmNjRfU3ltKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjY0X1N5bSwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfc3ltaW5mby5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl91cGRhdGVfc3ltaW5mby5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX3N5bWluZm8uYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogVXBkYXRlIGFkZGl0aW9uYWwgc3ltYm9sIGluZm9ybWF0aW9uIGluIHN5bWJvbCB0YWJsZSBhdCB0aGUgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTcyLDEyICs3Miw2IEBACisgICBpZiAoZGF0YSA9PSBOVUxMKQorICAgICByZXR1cm4gMDsKKyAKKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkpCistICAgIHsKKy0gICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CistICAgICAgcmV0dXJuIDA7CistICAgIH0KKy0KKyAgIGlmICh1bmxpa2VseSAoZGF0YV9zY24tPmQuZF90eXBlICE9IEVMRl9UX1NZTUlORk8pKQorICAgICB7CisgICAgICAgLyogVGhlIHR5cGUgb2YgdGhlIGRhdGEgYmV0dGVyIHNob3VsZCBtYXRjaC4gICovCitAQCAtOTMsNyArODcsNyBAQAorICAgcndsb2NrX3dybG9jayAoc2NuLT5lbGYtPmxvY2spOworIAorICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEdFbGZfU3ltaW5mbykgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgaWYgKElOVkFMSURfTkRYIChuZHgsIEdFbGZfU3ltaW5mbywgJmRhdGFfc2NuLT5kKSkKKyAgICAgeworICAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAgICAgICBnb3RvIG91dDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfc3ltc2huZHguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfdXBkYXRlX3N5bXNobmR4LmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfc3ltc2huZHguYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNiArMSw2IEBACisgLyogVXBkYXRlIHN5bWJvbCBpbmZvcm1hdGlvbiBhbmQgc2VjdGlvbiBpbmRleCBpbiBzeW1ib2wgdGFibGUgYXQgdGhlCisgICAgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTc3LDEyICs3Nyw2IEBACisgICBpZiAoc3ltZGF0YSA9PSBOVUxMKQorICAgICByZXR1cm4gMDsKKyAKKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkpCistICAgIHsKKy0gICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CistICAgICAgcmV0dXJuIDA7CistICAgIH0KKy0KKyAgIGlmICh1bmxpa2VseSAoc3ltZGF0YV9zY24tPmQuZF90eXBlICE9IEVMRl9UX1NZTSkpCisgICAgIHsKKyAgICAgICAvKiBUaGUgdHlwZSBvZiB0aGUgZGF0YSBiZXR0ZXIgc2hvdWxkIG1hdGNoLiAgKi8KK0BAIC0xMjgsNyArMTIyLDcgQEAKKyAJfQorIAorICAgICAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmMzJfU3ltKSA+IHN5bWRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjMyX1N5bSwgJnN5bWRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0BAIC0xNTEsNyArMTQ1LDcgQEAKKyAgIGVsc2UKKyAgICAgeworICAgICAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmNjRfU3ltKSA+IHN5bWRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjY0X1N5bSwgJnN5bWRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfdmVyc3ltLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX3VwZGF0ZV92ZXJzeW0uYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV92ZXJzeW0uYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogVXBkYXRlIHN5bWJvbCB2ZXJzaW9uIGluZm9ybWF0aW9uLgorLSAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMS4KKyAKK0BAIC03NSw4ICs3NSw3IEBACisgICBhc3NlcnQgKHNpemVvZiAoR0VsZl9WZXJzeW0pID09IHNpemVvZiAoRWxmNjRfVmVyc3ltKSk7CisgCisgICAvKiBDaGVjayB3aGV0aGVyIHdlIGhhdmUgdG8gcmVzaXplIHRoZSBkYXRhIGJ1ZmZlci4gICovCistICBpZiAodW5saWtlbHkgKG5keCA8IDApCistICAgICAgfHwgdW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoR0VsZl9WZXJzeW0pID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgIGlmIChJTlZBTElEX05EWCAobmR4LCBHRWxmX1ZlcnN5bSwgJmRhdGFfc2NuLT5kKSkKKyAgICAgeworICAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAgICAgICByZXR1cm4gMDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvbGliZWxmUC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvbGliZWxmUC5oCTIwMTAtMDEtMTIgMTY6NTc6NTQuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2xpYmVsZlAuaAkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTYwOCw0ICs2MDgsOCBAQAorIC8qIEFsaWduIG9mZnNldCB0byA0IGJ5dGVzIGFzIG5lZWRlZCBmb3Igbm90ZSBuYW1lIGFuZCBkZXNjcmlwdG9yIGRhdGEuICAqLworICNkZWZpbmUgTk9URV9BTElHTihuKQkoKChuKSArIDMpICYgLTRVKQorIAorKy8qIENvbnZlbmllbmNlIG1hY3JvLiAgKi8KKysjZGVmaW5lIElOVkFMSURfTkRYKG5keCwgdHlwZSwgZGF0YSkgXAorKyAgdW5saWtlbHkgKChkYXRhKS0+ZF9zaXplIC8gc2l6ZW9mICh0eXBlKSA8PSAodW5zaWduZWQgaW50KSAobmR4KSkKKysKKyAjZW5kaWYgIC8qIGxpYmVsZlAuaCAqLworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNzoxMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMTY0MCw2ICsxNjQwLDE2IEBACisgCW9iamVjdCBzeW1ib2xzIG9yIHN5bWJvbHMgd2l0aCB1bmtub3duIHR5cGUuCisgCShjaGVja19yZWwpOiBMaWtld2lzZS4KKyAKKysyMDA1LTA2LTA5ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIHJlYWRlbGYuYyAoaGFuZGxlX2R5bmFtaWMsIGhhbmRsZV9zeW10YWIpOiBDaGVjayBmb3IgYm9ndXMgc2hfbGluay4KKysJKGhhbmRsZV92ZXJuZWVkLCBoYW5kbGVfdmVyZGVmLCBoYW5kbGVfdmVyc3ltLCBoYW5kbGVfaGFzaCk6IExpa2V3aXNlLgorKwkoaGFuZGxlX3NjbmdycCk6IENoZWNrIGZvciBib2d1cyBzaF9pbmZvLgorKworKwkqIHN0cmlwLmMgKGhhbmRsZV9lbGYpOiBDaGVjayBmb3IgYm9ndXMgdmFsdWVzIGluIHNoX2xpbmssIHNoX2luZm8sCisrCXN0X3NobmR4LCBlX3Noc3RybmR4LCBhbmQgU0hUX0dST1VQIG9yIFNIVF9TWU1UQUJfU0hORFggZGF0YS4KKysJRG9uJ3QgdXNlIGFzc2VydCBvbiBpbnB1dCB2YWx1ZXMsIGluc3RlYWQgYmFpbCB3aXRoICJpbGxmb3JtZWQiIGVycm9yLgorKworIDIwMDUtMDYtMDggIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogcmVhZGVsZi5jIChwcmludF9vcHMpOiBBZGQgY29uc3RzLgorQEAgLTE2OTAsNiArMTcwMCwxOSBAQAorIAorIAkqIHJlYWRlbGYuYyAoZHdhcmZfdGFnX3N0cmluZyk6IEFkZCBuZXcgdGFncy4KKyAKKysyMDA1LTA1LTE3ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKysKKysJKiBlbGZsaW50LmMgKGNoZWNrX2hhc2gpOiBEb24ndCBjaGVjayBlbnRyaWVzIGJleW9uZCBlbmQgb2Ygc2VjdGlvbi4KKysJKGNoZWNrX25vdGUpOiBEb24ndCBjcmFzaCBpZiBnZWxmX3Jhd2NodW5rIGZhaWxzLgorKwkoc2VjdGlvbl9uYW1lKTogUmV0dXJuIDxpbnZhbGlkPiBpZiBnZWxmX2dldHNoZHIgcmV0dXJucyBOVUxMLgorKworKzIwMDUtMDUtMTQgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorKworKwkqIGVsZmxpbnQuYyAoc2VjdGlvbl9uYW1lKTogUmV0dXJuICI8aW52YWxpZD4iIGluc3RlYWQgb2YKKysJY3Jhc2hpbmcgb24gaW52YWxpZCBzZWN0aW9uIG5hbWUuCisrCShjaGVja19zeW10YWIsIGlzX3JlbF9keW4sIGNoZWNrX3JlbGEsIGNoZWNrX3JlbCwgY2hlY2tfZHluYW1pYywKKysJY2hlY2tfc3ltdGFiX3NobmR4LCBjaGVja19oYXNoLCBjaGVja192ZXJzeW0pOiBSb2J1c3RpZnkuCisrCisgMjAwNS0wNS0wOCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBzdHJpcC5jIChoYW5kbGVfZWxmKTogRG9uJ3QgdHJhbnNsYXRlIGhhc2ggYW5kIHZlcnN5bSBkYXRhIGZvcm1hdHMsCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL2VsZmxpbnQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL2VsZmxpbnQuYwkyMDEwLTA0LTEzIDIwOjA4OjAyLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9lbGZsaW50LmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMzEsNiArMTMxLDEwIEBACisgLyogQXJyYXkgdG8gY291bnQgcmVmZXJlbmNlcyBpbiBzZWN0aW9uIGdyb3Vwcy4gICovCisgc3RhdGljIGludCAqc2NucmVmOworIAorKy8qIE51bWJlcnMgb2Ygc2VjdGlvbnMgYW5kIHByb2dyYW0gaGVhZGVycy4gICovCisrc3RhdGljIHVuc2lnbmVkIGludCBzaG51bTsKKytzdGF0aWMgdW5zaWduZWQgaW50IHBobnVtOworKworIAorIGludAorIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCitAQCAtMzE5LDEwICszMjMsMTkgQEAKKyB7CisgICBHRWxmX1NoZHIgc2hkcl9tZW07CisgICBHRWxmX1NoZHIgKnNoZHI7CisrICBjb25zdCBjaGFyICpyZXQ7CisrCisrICBpZiAoKHVuc2lnbmVkIGludCkgaWR4ID4gc2hudW0pCisrICAgIHJldHVybiAiPGludmFsaWQ+IjsKKyAKKyAgIHNoZHIgPSBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLCBpZHgpLCAmc2hkcl9tZW0pOworKyAgaWYgKHNoZHIgPT0gTlVMTCkKKysgICAgcmV0dXJuICI8aW52YWxpZD4iOworIAorLSAgcmV0dXJuIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwgc2hkci0+c2hfbmFtZSk7CisrICByZXQgPSBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsIHNoZHItPnNoX25hbWUpOworKyAgaWYgKHJldCA9PSBOVUxMKQorKyAgICByZXR1cm4gIjxpbnZhbGlkPiI7CisrICByZXR1cm4gcmV0OworIH0KKyAKKyAKK0BAIC0zNDQsMTEgKzM1Nyw2IEBACisgICAoc2l6ZW9mICh2YWxpZF9lX21hY2hpbmUpIC8gc2l6ZW9mICh2YWxpZF9lX21hY2hpbmVbMF0pKQorIAorIAorLS8qIE51bWJlcnMgb2Ygc2VjdGlvbnMgYW5kIHByb2dyYW0gaGVhZGVycy4gICovCistc3RhdGljIHVuc2lnbmVkIGludCBzaG51bTsKKy1zdGF0aWMgdW5zaWduZWQgaW50IHBobnVtOworLQorLQorIHN0YXRpYyB2b2lkCisgY2hlY2tfZWxmX2hlYWRlciAoRWJsICplYmwsIEdFbGZfRWhkciAqZWhkciwgc2l6ZV90IHNpemUpCisgeworQEAgLTYzMiw3ICs2NDAsOCBAQAorIAkgIH0KKyAgICAgICB9CisgCistICBpZiAoc2hkci0+c2hfZW50c2l6ZSAhPSBnZWxmX2ZzaXplIChlYmwtPmVsZiwgRUxGX1RfU1lNLCAxLCBFVl9DVVJSRU5UKSkKKysgIHNpemVfdCBzaF9lbnRzaXplID0gZ2VsZl9mc2l6ZSAoZWJsLT5lbGYsIEVMRl9UX1NZTSwgMSwgRVZfQ1VSUkVOVCk7CisrICBpZiAoc2hkci0+c2hfZW50c2l6ZSAhPSBzaF9lbnRzaXplKQorICAgICBFUlJPUiAoZ2V0dGV4dCAoIlwKKyBzZWN0aW9uIFslMnVdICclcyc6IGVudHJ5IHNpemUgaXMgZG9lcyBub3QgbWF0Y2ggRWxmWFhfU3ltXG4iKSwKKyAJICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSk7CitAQCAtNjcwLDcgKzY3OSw3IEBACisgCSAgICAgICB4bmR4c2NuaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgeG5keHNjbmlkeCkpOworICAgICB9CisgCistICBmb3IgKHNpemVfdCBjbnQgPSAxOyBjbnQgPCBzaGRyLT5zaF9zaXplIC8gc2hkci0+c2hfZW50c2l6ZTsgKytjbnQpCisrICBmb3IgKHNpemVfdCBjbnQgPSAxOyBjbnQgPCBzaGRyLT5zaF9zaXplIC8gc2hfZW50c2l6ZTsgKytjbnQpCisgICAgIHsKKyAgICAgICBzeW0gPSBnZWxmX2dldHN5bXNobmR4IChkYXRhLCB4bmR4ZGF0YSwgY250LCAmc3ltX21lbSwgJnhuZHgpOworICAgICAgIGlmIChzeW0gPT0gTlVMTCkKK0BAIC02OTAsNyArNjk5LDggQEAKKyAgICAgICBlbHNlCisgCXsKKyAJICBuYW1lID0gZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmssIHN5bS0+c3RfbmFtZSk7CistCSAgYXNzZXJ0IChuYW1lICE9IE5VTEwpOworKwkgIGFzc2VydCAobmFtZSAhPSBOVUxMCisrCQkgIHx8IHN0cnNoZHItPnNoX3R5cGUgIT0gU0hUX1NUUlRBQik7CisgCX0KKyAKKyAgICAgICBpZiAoc3ltLT5zdF9zaG5keCA9PSBTSE5fWElOREVYKQorQEAgLTEwMzgsOSArMTA0OCwxMSBAQAorICAgICB7CisgICAgICAgR0VsZl9TaGRyIHJjc2hkcl9tZW07CisgICAgICAgY29uc3QgR0VsZl9TaGRyICpyY3NoZHIgPSBnZWxmX2dldHNoZHIgKHNjbiwgJnJjc2hkcl9tZW0pOworLSAgICAgIGFzc2VydCAocmNzaGRyICE9IE5VTEwpOworIAorLSAgICAgIGlmIChyY3NoZHItPnNoX3R5cGUgPT0gU0hUX0RZTkFNSUMpCisrICAgICAgaWYgKHJjc2hkciA9PSBOVUxMKQorKwlicmVhazsKKysKKysgICAgICBpZiAocmNzaGRyLT5zaF90eXBlID09IFNIVF9EWU5BTUlDICYmIHJjc2hkci0+c2hfZW50c2l6ZSkKKyAJeworIAkgIC8qIEZvdW5kIHRoZSBkeW5hbWljIHNlY3Rpb24uICBMb29rIHRocm91Z2ggaXQuICAqLworIAkgIEVsZl9EYXRhICpkID0gZWxmX2dldGRhdGEgKHNjbiwgTlVMTCk7CitAQCAtMTA1MCw3ICsxMDYyLDkgQEAKKyAJICAgIHsKKyAJICAgICAgR0VsZl9EeW4gZHluX21lbTsKKyAJICAgICAgR0VsZl9EeW4gKmR5biA9IGdlbGZfZ2V0ZHluIChkLCBjbnQsICZkeW5fbWVtKTsKKy0JICAgICAgYXNzZXJ0IChkeW4gIT0gTlVMTCk7CisrCisrCSAgICAgIGlmIChkeW4gPT0gTlVMTCkKKysJCWJyZWFrOworIAorIAkgICAgICBpZiAoZHluLT5kX3RhZyA9PSBEVF9SRUxDT1VOVCkKKyAJCXsKK0BAIC0xMDY0LDcgKzEwNzgsOSBAQAorIAkJICAgICAgLyogRG9lcyB0aGUgbnVtYmVyIHNwZWNpZmllZCBudW1iZXIgb2YgcmVsYXRpdmUKKyAJCQkgcmVsb2NhdGlvbnMgZXhjZWVkIHRoZSB0b3RhbCBudW1iZXIgb2YKKyAJCQkgcmVsb2NhdGlvbnM/ICAqLworLQkJICAgICAgaWYgKGR5bi0+ZF91bi5kX3ZhbCA+IHNoZHItPnNoX3NpemUgLyBzaGRyLT5zaF9lbnRzaXplKQorKwkJICAgICAgaWYgKHNoZHItPnNoX2VudHNpemUgIT0gMAorKwkJCSAgJiYgZHluLT5kX3VuLmRfdmFsID4gKHNoZHItPnNoX3NpemUKKysJCQkJCQkvIHNoZHItPnNoX2VudHNpemUpKQorIAkJCUVSUk9SIChnZXR0ZXh0ICgiXAorIHNlY3Rpb24gWyUyZF0gJyVzJzogRFRfUkVMQ09VTlQgdmFsdWUgJWQgdG9vIGhpZ2ggZm9yIHRoaXMgc2VjdGlvblxuIiksCisgCQkJICAgICAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCksCitAQCAtMTIyNCw3ICsxMjQwLDggQEAKKyAJfQorICAgICB9CisgCistICBpZiAoc2hkci0+c2hfZW50c2l6ZSAhPSBnZWxmX2ZzaXplIChlYmwtPmVsZiwgcmVsdHlwZSwgMSwgRVZfQ1VSUkVOVCkpCisrICBzaXplX3Qgc2hfZW50c2l6ZSA9IGdlbGZfZnNpemUgKGVibC0+ZWxmLCByZWx0eXBlLCAxLCBFVl9DVVJSRU5UKTsKKysgIGlmIChzaGRyLT5zaF9lbnRzaXplICE9IHNoX2VudHNpemUpCisgICAgIEVSUk9SIChnZXR0ZXh0IChyZWx0eXBlID09IEVMRl9UX1JFTEEgPyAiXAorIHNlY3Rpb24gWyUyZF0gJyVzJzogc2VjdGlvbiBlbnRyeSBzaXplIGRvZXMgbm90IG1hdGNoIEVsZlhYX1JlbGFcbiIgOiAiXAorIHNlY3Rpb24gWyUyZF0gJyVzJzogc2VjdGlvbiBlbnRyeSBzaXplIGRvZXMgbm90IG1hdGNoIEVsZlhYX1JlbFxuIiksCitAQCAtMTQ0Nyw3ICsxNDY0LDggQEAKKyAgIEVsZl9EYXRhICpzeW1kYXRhID0gZWxmX2dldGRhdGEgKHN5bXNjbiwgTlVMTCk7CisgICBlbnVtIGxvYWRfc3RhdGUgc3RhdGUgPSBzdGF0ZV91bmRlY2lkZWQ7CisgCistICBmb3IgKHNpemVfdCBjbnQgPSAwOyBjbnQgPCBzaGRyLT5zaF9zaXplIC8gc2hkci0+c2hfZW50c2l6ZTsgKytjbnQpCisrICBzaXplX3Qgc2hfZW50c2l6ZSA9IGdlbGZfZnNpemUgKGVibC0+ZWxmLCBFTEZfVF9SRUxBLCAxLCBFVl9DVVJSRU5UKTsKKysgIGZvciAoc2l6ZV90IGNudCA9IDA7IGNudCA8IHNoZHItPnNoX3NpemUgLyBzaF9lbnRzaXplOyArK2NudCkKKyAgICAgeworICAgICAgIEdFbGZfUmVsYSByZWxhX21lbTsKKyAgICAgICBHRWxmX1JlbGEgKnJlbGEgPSBnZWxmX2dldHJlbGEgKGRhdGEsIGNudCwgJnJlbGFfbWVtKTsKK0BAIC0xNDk3LDcgKzE1MTUsOCBAQAorICAgRWxmX0RhdGEgKnN5bWRhdGEgPSBlbGZfZ2V0ZGF0YSAoc3ltc2NuLCBOVUxMKTsKKyAgIGVudW0gbG9hZF9zdGF0ZSBzdGF0ZSA9IHN0YXRlX3VuZGVjaWRlZDsKKyAKKy0gIGZvciAoc2l6ZV90IGNudCA9IDA7IGNudCA8IHNoZHItPnNoX3NpemUgLyBzaGRyLT5zaF9lbnRzaXplOyArK2NudCkKKysgIHNpemVfdCBzaF9lbnRzaXplID0gZ2VsZl9mc2l6ZSAoZWJsLT5lbGYsIEVMRl9UX1JFTCwgMSwgRVZfQ1VSUkVOVCk7CisrICBmb3IgKHNpemVfdCBjbnQgPSAwOyBjbnQgPCBzaGRyLT5zaF9zaXplIC8gc2hfZW50c2l6ZTsgKytjbnQpCisgICAgIHsKKyAgICAgICBHRWxmX1JlbCByZWxfbWVtOworICAgICAgIEdFbGZfUmVsICpyZWwgPSBnZWxmX2dldHJlbCAoZGF0YSwgY250LCAmcmVsX21lbSk7CitAQCAtMTYwMCw3ICsxNjE5LDggQEAKKyAJICAgc2hkci0+c2hfbGluaywgc2VjdGlvbl9uYW1lIChlYmwsIHNoZHItPnNoX2xpbmspLAorIAkgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpKTsKKyAKKy0gIGlmIChzaGRyLT5zaF9lbnRzaXplICE9IGdlbGZfZnNpemUgKGVibC0+ZWxmLCBFTEZfVF9EWU4sIDEsIEVWX0NVUlJFTlQpKQorKyAgc2l6ZV90IHNoX2VudHNpemUgPSBnZWxmX2ZzaXplIChlYmwtPmVsZiwgRUxGX1RfRFlOLCAxLCBFVl9DVVJSRU5UKTsKKysgIGlmIChzaGRyLT5zaF9lbnRzaXplICE9IHNoX2VudHNpemUpCisgICAgIEVSUk9SIChnZXR0ZXh0ICgiXAorIHNlY3Rpb24gWyUyZF0gJyVzJzogc2VjdGlvbiBlbnRyeSBzaXplIGRvZXMgbm90IG1hdGNoIEVsZlhYX0R5blxuIiksCisgCSAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCkpOworQEAgLTE2MTAsNyArMTYzMCw3IEBACisgCSAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCkpOworIAorICAgYm9vbCBub25fbnVsbF93YXJuZWQgPSBmYWxzZTsKKy0gIGZvciAoY250ID0gMDsgY250IDwgc2hkci0+c2hfc2l6ZSAvIHNoZHItPnNoX2VudHNpemU7ICsrY250KQorKyAgZm9yIChjbnQgPSAwOyBjbnQgPCBzaGRyLT5zaF9zaXplIC8gc2hfZW50c2l6ZTsgKytjbnQpCisgICAgIHsKKyAgICAgICBHRWxmX0R5biBkeW5fbWVtOworICAgICAgIEdFbGZfRHluICpkeW4gPSBnZWxmX2dldGR5biAoZGF0YSwgY250LCAmZHluX21lbSk7CitAQCAtMTg5MSw2ICsxOTExLDggQEAKKyAJICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSk7CisgCisgICBpZiAoc3ltc2hkciAhPSBOVUxMCisrICAgICAgJiYgc2hkci0+c2hfZW50c2l6ZQorKyAgICAgICYmIHN5bXNoZHItPnNoX2VudHNpemUKKyAgICAgICAmJiAoc2hkci0+c2hfc2l6ZSAvIHNoZHItPnNoX2VudHNpemUKKyAJICA8IHN5bXNoZHItPnNoX3NpemUgLyBzeW1zaGRyLT5zaF9lbnRzaXplKSkKKyAgICAgRVJST1IgKGdldHRleHQgKCJcCitAQCAtMTkxNyw2ICsxOTM5LDEyIEBACisgICAgIH0KKyAKKyAgIEVsZl9EYXRhICpkYXRhID0gZWxmX2dldGRhdGEgKGVsZl9nZXRzY24gKGVibC0+ZWxmLCBpZHgpLCBOVUxMKTsKKysgIGlmIChkYXRhID09IE5VTEwpCisrICAgIHsKKysgICAgICBFUlJPUiAoZ2V0dGV4dCAoInNlY3Rpb24gWyUyZF0gJyVzJzogY2Fubm90IGdldCBzZWN0aW9uIGRhdGFcbiIpLAorKyAJICAgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpKTsKKysgICAgICByZXR1cm47CisrICAgIH0KKyAKKyAgIGlmICgqKChFbGYzMl9Xb3JkICopIGRhdGEtPmRfYnVmKSAhPSAwKQorICAgICBFUlJPUiAoZ2V0dGV4dCAoInN5bWJvbCAwIHNob3VsZCBoYXZlIHplcm8gZXh0ZW5kZWQgc2VjdGlvbiBpbmRleFxuIikpOworQEAgLTE5NTksNyArMTk4Nyw3IEBACisgCisgICBzaXplX3QgbWF4aWR4ID0gbmNoYWluOworIAorLSAgaWYgKHN5bXNoZHIgIT0gTlVMTCkKKysgIGlmIChzeW1zaGRyICE9IE5VTEwgJiYgc3ltc2hkci0+c2hfZW50c2l6ZSAhPSAwKQorICAgICB7CisgICAgICAgc2l6ZV90IHN5bXNpemUgPSBzeW1zaGRyLT5zaF9zaXplIC8gc3ltc2hkci0+c2hfZW50c2l6ZTsKKyAKK0BAIC0xOTcwLDE4ICsxOTk4LDI4IEBACisgICAgICAgbWF4aWR4ID0gc3ltc2l6ZTsKKyAgICAgfQorIAorKyAgRWxmMzJfV29yZCAqYnVmID0gKEVsZjMyX1dvcmQgKikgZGF0YS0+ZF9idWY7CisrICBFbGYzMl9Xb3JkICplbmQgPSAoRWxmMzJfV29yZCAqKSAoKGNoYXIgKikgZGF0YS0+ZF9idWYgKyBzaGRyLT5zaF9zaXplKTsKKyAgIHNpemVfdCBjbnQ7CisgICBmb3IgKGNudCA9IDI7IGNudCA8IDIgKyBuYnVja2V0OyArK2NudCkKKy0gICAgaWYgKCgoRWxmMzJfV29yZCAqKSBkYXRhLT5kX2J1ZilbY250XSA+PSBtYXhpZHgpCisrICAgIHsKKysgICAgICBpZiAoYnVmICsgY250ID49IGVuZCkKKysJYnJlYWs7CisrICAgICAgZWxzZSBpZiAoYnVmW2NudF0gPj0gbWF4aWR4KQorICAgICAgIEVSUk9SIChnZXR0ZXh0ICgiXAorIHNlY3Rpb24gWyUyZF0gJyVzJzogaGFzaCBidWNrZXQgcmVmZXJlbmNlICV6dSBvdXQgb2YgYm91bmRzXG4iKSwKKyAJICAgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpLCBjbnQgLSAyKTsKKysgICAgfQorIAorICAgZm9yICg7IGNudCA8IDIgKyBuYnVja2V0ICsgbmNoYWluOyArK2NudCkKKy0gICAgaWYgKCgoRWxmMzJfV29yZCAqKSBkYXRhLT5kX2J1ZilbY250XSA+PSBtYXhpZHgpCisrICAgIHsKKysgICAgICBpZiAoYnVmICsgY250ID49IGVuZCkKKysJYnJlYWs7CisrICAgICAgZWxzZSBpZiAoYnVmW2NudF0gPj0gbWF4aWR4KQorICAgICAgIEVSUk9SIChnZXR0ZXh0ICgiXAorIHNlY3Rpb24gWyUyZF0gJyVzJzogaGFzaCBjaGFpbiByZWZlcmVuY2UgJXp1IG91dCBvZiBib3VuZHNcbiIpLAorIAkgICAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCksIGNudCAtIDIgLSBuYnVja2V0KTsKKysgICAgfQorIH0KKyAKKyAKK0BAIC0yMDExLDE4ICsyMDQ5LDI4IEBACisgICAgICAgbWF4aWR4ID0gc3ltc2l6ZTsKKyAgICAgfQorIAorKyAgRWxmNjRfWHdvcmQgKmJ1ZiA9IChFbGY2NF9Yd29yZCAqKSBkYXRhLT5kX2J1ZjsKKysgIEVsZjY0X1h3b3JkICplbmQgPSAoRWxmNjRfWHdvcmQgKikgKChjaGFyICopIGRhdGEtPmRfYnVmICsgc2hkci0+c2hfc2l6ZSk7CisgICBzaXplX3QgY250OworICAgZm9yIChjbnQgPSAyOyBjbnQgPCAyICsgbmJ1Y2tldDsgKytjbnQpCistICAgIGlmICgoKEVsZjY0X1h3b3JkICopIGRhdGEtPmRfYnVmKVtjbnRdID49IG1heGlkeCkKKysgICAgeworKyAgICAgIGlmIChidWYgKyBjbnQgPj0gZW5kKQorKwlicmVhazsKKysgICAgICBlbHNlIGlmIChidWZbY250XSA+PSBtYXhpZHgpCisgICAgICAgRVJST1IgKGdldHRleHQgKCJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBoYXNoIGJ1Y2tldCByZWZlcmVuY2UgJXp1IG91dCBvZiBib3VuZHNcbiIpLAorIAkgICAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCksIGNudCAtIDIpOworKyAgICB9CisgCisgICBmb3IgKDsgY250IDwgMiArIG5idWNrZXQgKyBuY2hhaW47ICsrY250KQorLSAgICBpZiAoKChFbGY2NF9Yd29yZCAqKSBkYXRhLT5kX2J1ZilbY250XSA+PSBtYXhpZHgpCisrICAgIHsKKysgICAgICBpZiAoYnVmICsgY250ID49IGVuZCkKKysJYnJlYWs7CisrICAgICAgZWxzZSBpZiAoYnVmW2NudF0gPj0gbWF4aWR4KQorICAgICAgIEVSUk9SIChnZXR0ZXh0ICgiXAorIHNlY3Rpb24gWyUyZF0gJyVzJzogaGFzaCBjaGFpbiByZWZlcmVuY2UgJSIgUFJJdTY0ICIgb3V0IG9mIGJvdW5kc1xuIiksCistCSAgICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSwgKHVpbnQ2NF90KSAoY250IC0gMiAtIG5idWNrZXQpKTsKKysJICAgICAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCksICh1aW50NjRfdCkgY250IC0gMiAtIG5idWNrZXQpOworKyAgICB9CisgfQorIAorIAorQEAgLTIwNDcsNyArMjA5NSw3IEBACisgICBpZiAoc2hkci0+c2hfc2l6ZSA8ICg0ICsgYml0bWFza193b3JkcyArIG5idWNrZXRzKSAqIHNpemVvZiAoRWxmMzJfV29yZCkpCisgICAgIHsKKyAgICAgICBFUlJPUiAoZ2V0dGV4dCAoIlwKKy1zZWN0aW9uIFslMmRdICclcyc6IGhhc2ggdGFibGUgc2VjdGlvbiBpcyB0b28gc21hbGwgKGlzICVsZCwgZXhwZWN0ZWQgYXQgbGVhc3QlbGQpXG4iKSwKKytzZWN0aW9uIFslMmRdICclcyc6IGhhc2ggdGFibGUgc2VjdGlvbiBpcyB0b28gc21hbGwgKGlzICVsZCwgZXhwZWN0ZWQgYXQgbGVhc3QgJWxkKVxuIiksCisgCSAgICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSwgKGxvbmcgaW50KSBzaGRyLT5zaF9zaXplLAorIAkgICAgIChsb25nIGludCkgKCg0ICsgYml0bWFza193b3JkcyArIG5idWNrZXRzKSAqIHNpemVvZiAoRWxmMzJfV29yZCkpKTsKKyAgICAgICByZXR1cm47CitAQCAtMjcxOSw4ICsyNzY3LDkgQEAKKyAKKyAgIC8qIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHZlcnNpb24gc3ltYm9sIHRhYmxlIG11c3QgYmUgdGhlCisgICAgICBzYW1lIGFzIHRoZSBudW1iZXIgb2Ygc3ltYm9scy4gICovCistICBpZiAoc2hkci0+c2hfc2l6ZSAvIHNoZHItPnNoX2VudHNpemUKKy0gICAgICAhPSBzeW1zaGRyLT5zaF9zaXplIC8gc3ltc2hkci0+c2hfZW50c2l6ZSkKKysgIGlmIChzaGRyLT5zaF9lbnRzaXplICYmIHN5bXNoZHItPnNoX2VudHNpemUKKysgICAgICAmJiAoc2hkci0+c2hfc2l6ZSAvIHNoZHItPnNoX2VudHNpemUKKysJICAhPSBzeW1zaGRyLT5zaF9zaXplIC8gc3ltc2hkci0+c2hfZW50c2l6ZSkpCisgICAgIEVSUk9SIChnZXR0ZXh0ICgiXAorIHNlY3Rpb24gWyUyZF0gJyVzJyBoYXMgZGlmZmVyZW50IG51bWJlciBvZiBlbnRyaWVzIHRoYW4gc3ltYm9sIHRhYmxlIFslMmRdICclcydcbiIpLAorIAkgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpLAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9yZWFkZWxmLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9yZWFkZWxmLmMJMjAxMC0wNy0wMyAxMzowNzoxMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvcmVhZGVsZi5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMTE3Miw2ICsxMTcyLDggQEAKKyAgIEVsZjMyX1dvcmQgKmdycHJlZiA9IChFbGYzMl9Xb3JkICopIGRhdGEtPmRfYnVmOworIAorICAgR0VsZl9TeW0gc3ltX21lbTsKKysgIEdFbGZfU3ltICpzeW0gPSBnZWxmX2dldHN5bSAoc3ltZGF0YSwgc2hkci0+c2hfaW5mbywgJnN5bV9tZW0pOworKworICAgcHJpbnRmICgoZ3JwcmVmWzBdICYgR1JQX0NPTURBVCkKKyAJICA/IG5nZXR0ZXh0ICgiXAorIFxuQ09NREFUIHNlY3Rpb24gZ3JvdXAgWyUyenVdICclcycgd2l0aCBzaWduYXR1cmUgJyVzJyBjb250YWlucyAlenUgZW50cnk6XG4iLAorQEAgLTExODQsOCArMTE4Niw4IEBACisgCQkgICAgICBkYXRhLT5kX3NpemUgLyBzaXplb2YgKEVsZjMyX1dvcmQpIC0gMSksCisgCSAgZWxmX25keHNjbiAoc2NuKSwKKyAJICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsIHNoZHItPnNoX25hbWUpLAorLQkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzeW1zaGRyLT5zaF9saW5rLAorLQkJICAgICAgZ2VsZl9nZXRzeW0gKHN5bWRhdGEsIHNoZHItPnNoX2luZm8sICZzeW1fbWVtKS0+c3RfbmFtZSkKKysJICAoc3ltID09IE5VTEwgPyBOVUxMCisrCSAgIDogZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHN5bXNoZHItPnNoX2xpbmssIHN5bS0+c3RfbmFtZSkpCisgCSAgPzogZ2V0dGV4dCAoIjxJTlZBTElEIFNZTUJPTD4iKSwKKyAJICBkYXRhLT5kX3NpemUgLyBzaXplb2YgKEVsZjMyX1dvcmQpIC0gMSk7CisgCitAQCAtMTMzNiw3ICsxMzM4LDggQEAKKyBoYW5kbGVfZHluYW1pYyAoRWJsICplYmwsIEVsZl9TY24gKnNjbiwgR0VsZl9TaGRyICpzaGRyKQorIHsKKyAgIGludCBjbGFzcyA9IGdlbGZfZ2V0Y2xhc3MgKGVibC0+ZWxmKTsKKy0gIEdFbGZfU2hkciBnbGluazsKKysgIEdFbGZfU2hkciBnbGlua19tZW07CisrICBHRWxmX1NoZHIgKmdsaW5rOworICAgRWxmX0RhdGEgKmRhdGE7CisgICBzaXplX3QgY250OworICAgc2l6ZV90IHNoc3RybmR4OworQEAgLTEzNTEsNiArMTM1NCwxMSBAQAorICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorIAkgICBnZXR0ZXh0ICgiY2Fubm90IGdldCBzZWN0aW9uIGhlYWRlciBzdHJpbmcgdGFibGUgaW5kZXgiKSk7CisgCisrICBnbGluayA9IGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLCAmZ2xpbmtfbWVtKTsKKysgIGlmIChnbGluayA9PSBOVUxMKQorKyAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCBnZXR0ZXh0ICgiaW52YWxpZCBzaF9saW5rIHZhbHVlIGluIHNlY3Rpb24gJVp1IiksCisrCSAgIGVsZl9uZHhzY24gKHNjbikpOworKworICAgcHJpbnRmIChuZ2V0dGV4dCAoIlwKKyBcbkR5bmFtaWMgc2VnbWVudCBjb250YWlucyAlbHUgZW50cnk6XG4gQWRkcjogJSMwKiIgUFJJeDY0ICIgIE9mZnNldDogJSMwOCIgUFJJeDY0ICIgIExpbmsgdG8gc2VjdGlvbjogWyUydV0gJyVzJ1xuIiwKKyAJCSAgICAiXAorQEAgLTEzNjAsOSArMTM2OCw3IEBACisgCSAgY2xhc3MgPT0gRUxGQ0xBU1MzMiA/IDEwIDogMTgsIHNoZHItPnNoX2FkZHIsCisgCSAgc2hkci0+c2hfb2Zmc2V0LAorIAkgIChpbnQpIHNoZHItPnNoX2xpbmssCistCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LAorLQkJICAgICAgZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgc2hkci0+c2hfbGluayksCistCQkJCSAgICAmZ2xpbmspLT5zaF9uYW1lKSk7CisrCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LCBnbGluay0+c2hfbmFtZSkpOworICAgZnB1dHNfdW5sb2NrZWQgKGdldHRleHQgKCIgIFR5cGUgICAgICAgICAgICAgIFZhbHVlXG4iKSwgc3Rkb3V0KTsKKyAKKyAgIGZvciAoY250ID0gMDsgY250IDwgc2hkci0+c2hfc2l6ZSAvIHNoZHItPnNoX2VudHNpemU7ICsrY250KQorQEAgLTE5NDUsNiArMTk1MSwxMyBAQAorICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorIAkgICBnZXR0ZXh0ICgiY2Fubm90IGdldCBzZWN0aW9uIGhlYWRlciBzdHJpbmcgdGFibGUgaW5kZXgiKSk7CisgCisrICBHRWxmX1NoZHIgZ2xpbmtfbWVtOworKyAgR0VsZl9TaGRyICpnbGluayA9IGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLAorKwkJCQkgICAmZ2xpbmtfbWVtKTsKKysgIGlmIChnbGluayA9PSBOVUxMKQorKyAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCBnZXR0ZXh0ICgiaW52YWxpZCBzaF9saW5rIHZhbHVlIGluIHNlY3Rpb24gJVp1IiksCisrCSAgIGVsZl9uZHhzY24gKHNjbikpOworKworICAgLyogTm93IHdlIGNhbiBjb21wdXRlIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgc2VjdGlvbi4gICovCisgICB1bnNpZ25lZCBpbnQgbnN5bXMgPSBkYXRhLT5kX3NpemUgLyAoY2xhc3MgPT0gRUxGQ0xBU1MzMgorIAkJCQkgICAgICAgPyBzaXplb2YgKEVsZjMyX1N5bSkKK0BAIC0xOTU1LDE1ICsxOTY4LDEyIEBACisgCQkgICAgbnN5bXMpLAorIAkgICh1bnNpZ25lZCBpbnQpIGVsZl9uZHhzY24gKHNjbiksCisgCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LCBzaGRyLT5zaF9uYW1lKSwgbnN5bXMpOworLSAgR0VsZl9TaGRyIGdsaW5rOworICAgcHJpbnRmIChuZ2V0dGV4dCAoIiAlbHUgbG9jYWwgc3ltYm9sICBTdHJpbmcgdGFibGU6IFslMnVdICclcydcbiIsCisgCQkgICAgIiAlbHUgbG9jYWwgc3ltYm9scyAgU3RyaW5nIHRhYmxlOiBbJTJ1XSAnJXMnXG4iLAorIAkJICAgIHNoZHItPnNoX2luZm8pLAorIAkgICh1bnNpZ25lZCBsb25nIGludCkgc2hkci0+c2hfaW5mbywKKyAJICAodW5zaWduZWQgaW50KSBzaGRyLT5zaF9saW5rLAorLQkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwKKy0JCSAgICAgIGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLAorLQkJCQkgICAgJmdsaW5rKS0+c2hfbmFtZSkpOworKwkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwgZ2xpbmstPnNoX25hbWUpKTsKKyAKKyAgIGZwdXRzX3VubG9ja2VkIChjbGFzcyA9PSBFTEZDTEFTUzMyCisgCQkgID8gZ2V0dGV4dCAoIlwKK0BAIC0yMTk5LDcgKzIyMDksMTMgQEAKKyAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwKKyAJICAgZ2V0dGV4dCAoImNhbm5vdCBnZXQgc2VjdGlvbiBoZWFkZXIgc3RyaW5nIHRhYmxlIGluZGV4IikpOworIAorLSAgR0VsZl9TaGRyIGdsaW5rOworKyAgR0VsZl9TaGRyIGdsaW5rX21lbTsKKysgIEdFbGZfU2hkciAqZ2xpbmsgPSBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLCBzaGRyLT5zaF9saW5rKSwKKysJCQkJICAgJmdsaW5rX21lbSk7CisrICBpZiAoZ2xpbmsgPT0gTlVMTCkKKysgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgZ2V0dGV4dCAoImludmFsaWQgc2hfbGluayB2YWx1ZSBpbiBzZWN0aW9uICVadSIpLAorKwkgICBlbGZfbmR4c2NuIChzY24pKTsKKysKKyAgIHByaW50ZiAobmdldHRleHQgKCJcCisgXG5WZXJzaW9uIG5lZWRzIHNlY3Rpb24gWyUydV0gJyVzJyBjb250YWlucyAlZCBlbnRyeTpcbiBBZGRyOiAlIzAqIiBQUkl4NjQgIiAgT2Zmc2V0OiAlIzA4IiBQUkl4NjQgIiAgTGluayB0byBzZWN0aW9uOiBbJTJ1XSAnJXMnXG4iLAorIAkJICAgICJcCitAQCAtMjIxMCw5ICsyMjI2LDcgQEAKKyAJICBjbGFzcyA9PSBFTEZDTEFTUzMyID8gMTAgOiAxOCwgc2hkci0+c2hfYWRkciwKKyAJICBzaGRyLT5zaF9vZmZzZXQsCisgCSAgKHVuc2lnbmVkIGludCkgc2hkci0+c2hfbGluaywKKy0JICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsCistCQkgICAgICBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLCBzaGRyLT5zaF9saW5rKSwKKy0JCQkJICAgICZnbGluayktPnNoX25hbWUpKTsKKysJICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsIGdsaW5rLT5zaF9uYW1lKSk7CisgCisgICB1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMDsKKyAgIGZvciAoaW50IGNudCA9IHNoZHItPnNoX2luZm87IC0tY250ID49IDA7ICkKK0BAIC0yMjY1LDggKzIyNzksMTQgQEAKKyAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwKKyAJICAgZ2V0dGV4dCAoImNhbm5vdCBnZXQgc2VjdGlvbiBoZWFkZXIgc3RyaW5nIHRhYmxlIGluZGV4IikpOworIAorKyAgR0VsZl9TaGRyIGdsaW5rX21lbTsKKysgIEdFbGZfU2hkciAqZ2xpbmsgPSBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLCBzaGRyLT5zaF9saW5rKSwKKysJCQkJICAgJmdsaW5rX21lbSk7CisrICBpZiAoZ2xpbmsgPT0gTlVMTCkKKysgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgZ2V0dGV4dCAoImludmFsaWQgc2hfbGluayB2YWx1ZSBpbiBzZWN0aW9uICVadSIpLAorKwkgICBlbGZfbmR4c2NuIChzY24pKTsKKysKKyAgIGludCBjbGFzcyA9IGdlbGZfZ2V0Y2xhc3MgKGVibC0+ZWxmKTsKKy0gIEdFbGZfU2hkciBnbGluazsKKyAgIHByaW50ZiAobmdldHRleHQgKCJcCisgXG5WZXJzaW9uIGRlZmluaXRpb24gc2VjdGlvbiBbJTJ1XSAnJXMnIGNvbnRhaW5zICVkIGVudHJ5OlxuIEFkZHI6ICUjMCoiIFBSSXg2NCAiICBPZmZzZXQ6ICUjMDgiIFBSSXg2NCAiICBMaW5rIHRvIHNlY3Rpb246IFslMnVdICclcydcbiIsCisgCQkgICAgIlwKK0BAIC0yMjc4LDkgKzIyOTgsNyBAQAorIAkgIGNsYXNzID09IEVMRkNMQVNTMzIgPyAxMCA6IDE4LCBzaGRyLT5zaF9hZGRyLAorIAkgIHNoZHItPnNoX29mZnNldCwKKyAJICAodW5zaWduZWQgaW50KSBzaGRyLT5zaF9saW5rLAorLQkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwKKy0JCSAgICAgIGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLAorLQkJCQkgICAgJmdsaW5rKS0+c2hfbmFtZSkpOworKwkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwgZ2xpbmstPnNoX25hbWUpKTsKKyAKKyAgIHVuc2lnbmVkIGludCBvZmZzZXQgPSAwOworICAgZm9yIChpbnQgY250ID0gc2hkci0+c2hfaW5mbzsgLS1jbnQgPj0gMDsgKQorQEAgLTI1NDIsOCArMjU2MCwxNCBAQAorICAgICAgIGZpbGVuYW1lID0gTlVMTDsKKyAgICAgfQorIAorKyAgR0VsZl9TaGRyIGdsaW5rX21lbTsKKysgIEdFbGZfU2hkciAqZ2xpbmsgPSBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLCBzaGRyLT5zaF9saW5rKSwKKysJCQkJICAgJmdsaW5rX21lbSk7CisrICBpZiAoZ2xpbmsgPT0gTlVMTCkKKysgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgZ2V0dGV4dCAoImludmFsaWQgc2hfbGluayB2YWx1ZSBpbiBzZWN0aW9uICVadSIpLAorKwkgICBlbGZfbmR4c2NuIChzY24pKTsKKysKKyAgIC8qIFByaW50IHRoZSBoZWFkZXIuICAqLworLSAgR0VsZl9TaGRyIGdsaW5rOworICAgcHJpbnRmIChuZ2V0dGV4dCAoIlwKKyBcblZlcnNpb24gc3ltYm9scyBzZWN0aW9uIFslMnVdICclcycgY29udGFpbnMgJWQgZW50cnk6XG4gQWRkcjogJSMwKiIgUFJJeDY0ICIgIE9mZnNldDogJSMwOCIgUFJJeDY0ICIgIExpbmsgdG8gc2VjdGlvbjogWyUydV0gJyVzJyIsCisgCQkgICAgIlwKK0BAIC0yNTU1LDkgKzI1NzksNyBAQAorIAkgIGNsYXNzID09IEVMRkNMQVNTMzIgPyAxMCA6IDE4LCBzaGRyLT5zaF9hZGRyLAorIAkgIHNoZHItPnNoX29mZnNldCwKKyAJICAodW5zaWduZWQgaW50KSBzaGRyLT5zaF9saW5rLAorLQkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwKKy0JCSAgICAgIGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLAorLQkJCQkgICAgJmdsaW5rKS0+c2hfbmFtZSkpOworKwkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwgZ2xpbmstPnNoX25hbWUpKTsKKyAKKyAgIC8qIE5vdyB3ZSBjYW4gZmluYWxseSBsb29rIGF0IHRoZSBhY3R1YWwgY29udGVudHMgb2YgdGhpcyBzZWN0aW9uLiAgKi8KKyAgIGZvciAodW5zaWduZWQgaW50IGNudCA9IDA7IGNudCA8IHNoZHItPnNoX3NpemUgLyBzaGRyLT5zaF9lbnRzaXplOyArK2NudCkKK0BAIC0yNjA5LDcgKzI2MzEsMTcgQEAKKyAgIGZvciAoRWxmMzJfV29yZCBjbnQgPSAwOyBjbnQgPCBuYnVja2V0OyArK2NudCkKKyAgICAgKytjb3VudHNbbGVuZ3Roc1tjbnRdXTsKKyAKKy0gIEdFbGZfU2hkciBnbGluazsKKysgIEdFbGZfU2hkciBnbGlua19tZW07CisrICBHRWxmX1NoZHIgKmdsaW5rID0gZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwKKysJCQkJCSAgICAgICBzaGRyLT5zaF9saW5rKSwKKysJCQkJICAgJmdsaW5rX21lbSk7CisrICBpZiAoZ2xpbmsgPT0gTlVMTCkKKysgICAgeworKyAgICAgIGVycm9yICgwLCAwLCBnZXR0ZXh0ICgiaW52YWxpZCBzaF9saW5rIHZhbHVlIGluIHNlY3Rpb24gJVp1IiksCisrCSAgICAgZWxmX25keHNjbiAoc2NuKSk7CisrICAgICAgcmV0dXJuOworKyAgICB9CisrCisgICBwcmludGYgKG5nZXR0ZXh0ICgiXAorIFxuSGlzdG9ncmFtIGZvciBidWNrZXQgbGlzdCBsZW5ndGggaW4gc2VjdGlvbiBbJTJ1XSAnJXMnICh0b3RhbCBvZiAlZCBidWNrZXQpOlxuIEFkZHI6ICUjMCoiIFBSSXg2NCAiICBPZmZzZXQ6ICUjMDgiIFBSSXg2NCAiICBMaW5rIHRvIHNlY3Rpb246IFslMnVdICclcydcbiIsCisgCQkgICAgIlwKK0BAIC0yNjIyLDkgKzI2NTQsNyBAQAorIAkgIHNoZHItPnNoX2FkZHIsCisgCSAgc2hkci0+c2hfb2Zmc2V0LAorIAkgICh1bnNpZ25lZCBpbnQpIHNoZHItPnNoX2xpbmssCistCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LAorLQkJICAgICAgZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgc2hkci0+c2hfbGluayksCistCQkJCSAgICAmZ2xpbmspLT5zaF9uYW1lKSk7CisrCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LCBnbGluay0+c2hfbmFtZSkpOworIAorICAgaWYgKGV4dHJhc3RyICE9IE5VTEwpCisgICAgIGZwdXRzIChleHRyYXN0ciwgc3Rkb3V0KTsKK0BAIC00MzEyLDYgKzQzNDIsMTYgQEAKKyAgICAgICByZXR1cm47CisgICAgIH0KKyAKKysgIEdFbGZfU2hkciBnbGlua19tZW07CisrICBHRWxmX1NoZHIgKmdsaW5rOworKyAgZ2xpbmsgPSBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLCBzaGRyLT5zaF9saW5rKSwgJmdsaW5rX21lbSk7CisrICBpZiAoZ2xpbmsgPT0gTlVMTCkKKysgICAgeworKyAgICAgIGVycm9yICgwLCAwLCBnZXR0ZXh0ICgiaW52YWxpZCBzaF9saW5rIHZhbHVlIGluIHNlY3Rpb24gJVp1IiksCisrCSAgICAgZWxmX25keHNjbiAoc2NuKSk7CisrICAgICAgcmV0dXJuOworKyAgICB9CisrCisgICBwcmludGYgKG5nZXR0ZXh0ICgiXAorIFxuRFdBUkYgc2VjdGlvbiBbJTJ6dV0gJyVzJyBhdCBvZmZzZXQgJSMiIFBSSXg2NCAiIGNvbnRhaW5zICV6dSBlbnRyeTpcbiIsCisgCQkgICAgIlwKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvc3RyaXAuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL3N0cmlwLmMJMjAxMC0wNy0wMyAxMzowNzoxMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvc3RyaXAuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTU2MSw2ICs1NjEsMTEgQEAKKyAgICAgICBnb3RvIGZhaWxfY2xvc2U7CisgICAgIH0KKyAKKysgIGlmIChzaHN0cm5keCA+PSBzaG51bSkKKysgICAgZ290byBpbGxmb3JtZWQ7CisrCisrI2RlZmluZSBlbGZfYXNzZXJ0KHRlc3QpIGRvIHsgaWYgKCEodGVzdCkpIGdvdG8gaWxsZm9ybWVkOyB9IHdoaWxlICgwKQorKworICAgLyogU3RvcmFnZSBmb3Igc2VjdGlvbiBpbmZvcm1hdGlvbi4gIFdlIGxlYXZlIHJvb20gZm9yIHR3byBtb3JlCisgICAgICBlbnRyaWVzIHNpbmNlIHdlIHVuY29uZGl0aW9uYWxseSBjcmVhdGUgYSBzZWN0aW9uIGhlYWRlciBzdHJpbmcKKyAgICAgIHRhYmxlLiAgTWF5YmUgc29tZSB3ZWlyZCB0b29sIGNyZWF0ZWQgYW4gRUxGIGZpbGUgd2l0aG91dCBvbmUuCitAQCAtNTgyLDcgKzU4Nyw3IEBACisgICAgIHsKKyAgICAgICAvKiBUaGlzIHNob3VsZCBhbHdheXMgYmUgdHJ1ZSAoaS5lLiwgdGhlcmUgc2hvdWxkIG5vdCBiZSBhbnkKKyAJIGhvbGVzIGluIHRoZSBudW1iZXJpbmcpLiAgKi8KKy0gICAgICBhc3NlcnQgKGVsZl9uZHhzY24gKHNjbikgPT0gY250KTsKKysgICAgICBlbGZfYXNzZXJ0IChlbGZfbmR4c2NuIChzY24pID09IGNudCk7CisgCisgICAgICAgc2hkcl9pbmZvW2NudF0uc2NuID0gc2NuOworIAorQEAgLTU5NSw2ICs2MDAsNyBAQAorIAkJCQkJc2hkcl9pbmZvW2NudF0uc2hkci5zaF9uYW1lKTsKKyAgICAgICBpZiAoc2hkcl9pbmZvW2NudF0ubmFtZSA9PSBOVUxMKQorIAl7CisrCWlsbGZvcm1lZDoKKyAJICBlcnJvciAoMCwgMCwgZ2V0dGV4dCAoImlsbGZvcm1lZCBmaWxlICclcyciKSwgZm5hbWUpOworIAkgIGdvdG8gZmFpbF9jbG9zZTsKKyAJfQorQEAgLTYwNCw2ICs2MTAsOCBAQAorIAorICAgICAgIC8qIFJlbWVtYmVyIHRoZSBzaGRyLnNoX2xpbmsgdmFsdWUuICAqLworICAgICAgIHNoZHJfaW5mb1tjbnRdLm9sZF9zaF9saW5rID0gc2hkcl9pbmZvW2NudF0uc2hkci5zaF9saW5rOworKyAgICAgIGlmIChzaGRyX2luZm9bY250XS5vbGRfc2hfbGluayA+PSBzaG51bSkKKysJZ290byBpbGxmb3JtZWQ7CisgCisgICAgICAgLyogU2VjdGlvbnMgaW4gZmlsZXMgb3RoZXIgdGhhbiByZWxvY2F0YWJsZSBvYmplY3QgZmlsZXMgd2hpY2gKKyAJIGFyZSBub3QgbG9hZGVkIGNhbiBiZSBmcmVlbHkgbW92ZWQgYnkgdXMuICBJbiByZWxvY2F0YWJsZQorQEAgLTYxNiw3ICs2MjQsNyBAQAorIAkgYXBwcm9wcmlhdGUgcmVmZXJlbmNlLiAgKi8KKyAgICAgICBpZiAodW5saWtlbHkgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfdHlwZSA9PSBTSFRfU1lNVEFCX1NITkRYKSkKKyAJeworLQkgIGFzc2VydCAoc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnNoZHIuc2hfbGlua10uc3ltdGFiX2lkeCA9PSAwKTsKKysJICBlbGZfYXNzZXJ0IChzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc2hkci5zaF9saW5rXS5zeW10YWJfaWR4ID09IDApOworIAkgIHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2xpbmtdLnN5bXRhYl9pZHggPSBjbnQ7CisgCX0KKyAgICAgICBlbHNlIGlmICh1bmxpa2VseSAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF90eXBlID09IFNIVF9HUk9VUCkpCitAQCAtNjMzLDcgKzY0MSwxMiBAQAorIAkgIGZvciAoaW5uZXIgPSAxOworIAkgICAgICAgaW5uZXIgPCBzaGRyX2luZm9bY250XS5kYXRhLT5kX3NpemUgLyBzaXplb2YgKEVsZjMyX1dvcmQpOworIAkgICAgICAgKytpbm5lcikKKysJICAgIHsKKysJICAgICAgaWYgKGdycHJlZltpbm5lcl0gPCBzaG51bSkKKyAJICAgIHNoZHJfaW5mb1tncnByZWZbaW5uZXJdXS5ncm91cF9pZHggPSBjbnQ7CisrCSAgICAgIGVsc2UKKysJCWdvdG8gaWxsZm9ybWVkOworKwkgICAgfQorIAorIAkgIGlmIChpbm5lciA9PSAxIHx8IChpbm5lciA9PSAyICYmIChncnByZWZbMF0gJiBHUlBfQ09NREFUKSA9PSAwKSkKKyAJICAgIC8qIElmIHRoZSBzZWN0aW9uIGdyb3VwIGNvbnRhaW5zIG9ubHkgb25lIGVsZW1lbnQgYW5kIHRoaXMKK0BAIC02NDQsNyArNjU3LDcgQEAKKyAJfQorICAgICAgIGVsc2UgaWYgKHVubGlrZWx5IChzaGRyX2luZm9bY250XS5zaGRyLnNoX3R5cGUgPT0gU0hUX0dOVV92ZXJzeW0pKQorIAl7CistCSAgYXNzZXJ0IChzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc2hkci5zaF9saW5rXS52ZXJzaW9uX2lkeCA9PSAwKTsKKysJICBlbGZfYXNzZXJ0IChzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc2hkci5zaF9saW5rXS52ZXJzaW9uX2lkeCA9PSAwKTsKKyAJICBzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc2hkci5zaF9saW5rXS52ZXJzaW9uX2lkeCA9IGNudDsKKyAJfQorIAorQEAgLTY1Miw3ICs2NjUsNyBAQAorIAkgZGlzY2FyZGVkIHJpZ2h0IGF3YXkuICAqLworICAgICAgIGlmICgoc2hkcl9pbmZvW2NudF0uc2hkci5zaF9mbGFncyAmIFNIRl9HUk9VUCkgIT0gMCkKKyAJeworLQkgIGFzc2VydCAoc2hkcl9pbmZvW2NudF0uZ3JvdXBfaWR4ICE9IDApOworKwkgIGVsZl9hc3NlcnQgKHNoZHJfaW5mb1tjbnRdLmdyb3VwX2lkeCAhPSAwKTsKKyAKKyAJICBpZiAoc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLmdyb3VwX2lkeF0uaWR4ID09IDApCisgCSAgICB7CitAQCAtNzI3LDExICs3NDAsMTUgQEAKKyAJICAgIHsKKyAJICAgICAgLyogSWYgYSByZWxvY2F0aW9uIHNlY3Rpb24gaXMgbWFya2VkIGFzIGJlaW5nIHJlbW92ZWQgbWFrZQorIAkJIHN1cmUgdGhlIHNlY3Rpb24gaXQgaXMgcmVsb2NhdGluZyBpcyByZW1vdmVkLCB0b28uICAqLworLQkgICAgICBpZiAoKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfdHlwZSA9PSBTSFRfUkVMCisrCSAgICAgIGlmIChzaGRyX2luZm9bY250XS5zaGRyLnNoX3R5cGUgPT0gU0hUX1JFTAorIAkJICAgfHwgc2hkcl9pbmZvW2NudF0uc2hkci5zaF90eXBlID09IFNIVF9SRUxBKQorLQkJICAmJiBzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc2hkci5zaF9pbmZvXS5pZHggIT0gMCkKKysJCXsKKysJCSAgaWYgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfaW5mbyA+PSBzaG51bSkKKysJCSAgICBnb3RvIGlsbGZvcm1lZDsKKysJCSAgZWxzZSBpZiAoc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnNoZHIuc2hfaW5mb10uaWR4ICE9IDApCisgCQlzaGRyX2luZm9bY250XS5pZHggPSAxOworIAkgICAgfQorKwkgICAgfQorIAorIAkgIGlmIChzaGRyX2luZm9bY250XS5pZHggPT0gMSkKKyAJICAgIHsKK0BAIC03NTgsNyArNzc1LDcgQEAKKyAJCSAgaWYgKHNoZHJfaW5mb1tjbnRdLnN5bXRhYl9pZHggIT0gMAorIAkJICAgICAgJiYgc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnN5bXRhYl9pZHhdLmRhdGEgPT0gTlVMTCkKKyAJCSAgICB7CistCQkgICAgICBhc3NlcnQgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfdHlwZSA9PSBTSFRfU1lNVEFCKTsKKysJCSAgICAgIGVsZl9hc3NlcnQgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfdHlwZSA9PSBTSFRfU1lNVEFCKTsKKyAKKyAJCSAgICAgIHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zeW10YWJfaWR4XS5kYXRhCisgCQkJPSBlbGZfZ2V0ZGF0YSAoc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnN5bXRhYl9pZHhdLnNjbiwKK0BAIC03OTgsNiArODE1LDkgQEAKKyAJCSAgICAgIGVsc2UgaWYgKHNjbmlkeCA9PSBTSE5fWElOREVYKQorIAkJCXNjbmlkeCA9IHhuZHg7CisgCisrCQkgICAgICBpZiAoc2NuaWR4ID49IHNobnVtKQorKwkJCWdvdG8gaWxsZm9ybWVkOworKworIAkJICAgICAgaWYgKHNoZHJfaW5mb1tzY25pZHhdLmlkeCA9PSAwKQorIAkJCS8qIFRoaXMgc3ltYm9sIHRhYmxlIGhhcyBhIHJlYWwgc3ltYm9sIGluCisgCQkJICAgYSBkaXNjYXJkZWQgc2VjdGlvbi4gIFNvIHByZXNlcnZlIHRoZQorQEAgLTgyOCwxMiArODQ4LDE2IEBACisgCQl9CisgCisgCSAgICAgIC8qIEhhbmRsZSByZWZlcmVuY2VzIHRocm91Z2ggc2hfaW5mby4gICovCistCSAgICAgIGlmIChTSF9JTkZPX0xJTktfUCAoJnNoZHJfaW5mb1tjbnRdLnNoZHIpCistCQkgICYmIHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2luZm9dLmlkeCA9PSAwKQorKwkgICAgICBpZiAoU0hfSU5GT19MSU5LX1AgKCZzaGRyX2luZm9bY250XS5zaGRyKSkKKysJCXsKKysJCSAgaWYgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfaW5mbyA+PSBzaG51bSkKKysJCSAgICBnb3RvIGlsbGZvcm1lZDsKKysJCSAgZWxzZSBpZiAoIHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2luZm9dLmlkeCA9PSAwKQorIAkJeworIAkJICBzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc2hkci5zaF9pbmZvXS5pZHggPSAxOworIAkJICBjaGFuZ2VzIHw9IHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfaW5mbyA8IGNudDsKKyAJCX0KKysJCX0KKyAKKyAJICAgICAgLyogTWFyayB0aGUgc2VjdGlvbiBhcyBpbnZlc3RpZ2F0ZWQuICAqLworIAkgICAgICBzaGRyX2luZm9bY250XS5pZHggPSAyOworQEAgLTk3Miw3ICs5OTYsNyBAQAorIAkgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsIGdldHRleHQgKCJ3aGlsZSBnZW5lcmF0aW5nIG91dHB1dCBmaWxlOiAlcyIpLAorIAkJIGVsZl9lcnJtc2cgKC0xKSk7CisgCistCWFzc2VydCAoZWxmX25keHNjbiAoc2hkcl9pbmZvW2NudF0ubmV3c2NuKSA9PSBzaGRyX2luZm9bY250XS5pZHgpOworKwllbGZfYXNzZXJ0IChlbGZfbmR4c2NuIChzaGRyX2luZm9bY250XS5uZXdzY24pID09IHNoZHJfaW5mb1tjbnRdLmlkeCk7CisgCisgCS8qIEFkZCB0aGlzIG5hbWUgdG8gdGhlIHNlY3Rpb24gaGVhZGVyIHN0cmluZyB0YWJsZS4gICovCisgCXNoZHJfaW5mb1tjbnRdLnNlID0gZWJsX3N0cnRhYmFkZCAoc2hzdCwgc2hkcl9pbmZvW2NudF0ubmFtZSwgMCk7CitAQCAtMTAwOSw3ICsxMDMzLDcgQEAKKyAJZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwKKyAJICAgICAgIGdldHRleHQgKCJ3aGlsZSBjcmVhdGUgc2VjdGlvbiBoZWFkZXIgc2VjdGlvbjogJXMiKSwKKyAJICAgICAgIGVsZl9lcnJtc2cgKC0xKSk7CistICAgICAgYXNzZXJ0IChlbGZfbmR4c2NuIChzaGRyX2luZm9bY250XS5uZXdzY24pID09IHNoZHJfaW5mb1tjbnRdLmlkeCk7CisrICAgICAgZWxmX2Fzc2VydCAoZWxmX25keHNjbiAoc2hkcl9pbmZvW2NudF0ubmV3c2NuKSA9PSBzaGRyX2luZm9bY250XS5pZHgpOworIAorICAgICAgIHNoZHJfaW5mb1tjbnRdLmRhdGEgPSBlbGZfbmV3ZGF0YSAoc2hkcl9pbmZvW2NudF0ubmV3c2NuKTsKKyAgICAgICBpZiAoc2hkcl9pbmZvW2NudF0uZGF0YSA9PSBOVUxMKQorQEAgLTEwNjUsNyArMTA4OSw3IEBACisgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCisgCSAgIGdldHRleHQgKCJ3aGlsZSBjcmVhdGUgc2VjdGlvbiBoZWFkZXIgc2VjdGlvbjogJXMiKSwKKyAJICAgZWxmX2Vycm1zZyAoLTEpKTsKKy0gIGFzc2VydCAoZWxmX25keHNjbiAoc2hkcl9pbmZvW2NudF0ubmV3c2NuKSA9PSBpZHgpOworKyAgZWxmX2Fzc2VydCAoZWxmX25keHNjbiAoc2hkcl9pbmZvW2NudF0ubmV3c2NuKSA9PSBpZHgpOworIAorICAgLyogRmluYWxpemUgdGhlIHN0cmluZyB0YWJsZSBhbmQgZmlsbCBpbiB0aGUgY29ycmVjdCBpbmRpY2VzIGluIHRoZQorICAgICAgc2VjdGlvbiBoZWFkZXJzLiAgKi8KK0BAIC0xMTU1LDIwICsxMTc5LDIwIEBACisgCQkgICAgc2huZHhkYXRhID0gZWxmX2dldGRhdGEgKHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zeW10YWJfaWR4XS5zY24sCisgCQkJCQkgICAgIE5VTEwpOworIAorLQkJICAgIGFzc2VydCAoKHZlcnNpb25kYXRhLT5kX3NpemUgLyBzaXplb2YgKEVsZjMyX1dvcmQpKQorKwkJICAgIGVsZl9hc3NlcnQgKCh2ZXJzaW9uZGF0YS0+ZF9zaXplIC8gc2l6ZW9mIChFbGYzMl9Xb3JkKSkKKyAJCQkgICAgPj0gc2hkcl9pbmZvW2NudF0uZGF0YS0+ZF9zaXplIC8gZWxzaXplKTsKKyAJCSAgfQorIAorIAkJaWYgKHNoZHJfaW5mb1tjbnRdLnZlcnNpb25faWR4ICE9IDApCisgCQkgIHsKKy0JCSAgICBhc3NlcnQgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfdHlwZSA9PSBTSFRfRFlOU1lNKTsKKysJCSAgICBlbGZfYXNzZXJ0IChzaGRyX2luZm9bY250XS5zaGRyLnNoX3R5cGUgPT0gU0hUX0RZTlNZTSk7CisgCQkgICAgLyogVGhpcyBzZWN0aW9uIGhhcyBhc3NvY2lhdGVkIHZlcnNpb24KKyAJCSAgICAgICBpbmZvcm1hdGlvbi4gIFdlIGhhdmUgdG8gbW9kaWZ5IHRoYXQKKyAJCSAgICAgICBpbmZvcm1hdGlvbiwgdG9vLiAgKi8KKyAJCSAgICB2ZXJzaW9uZGF0YSA9IGVsZl9nZXRkYXRhIChzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0udmVyc2lvbl9pZHhdLnNjbiwKKyAJCQkJCSAgICAgICBOVUxMKTsKKyAKKy0JCSAgICBhc3NlcnQgKCh2ZXJzaW9uZGF0YS0+ZF9zaXplIC8gc2l6ZW9mIChHRWxmX1ZlcnN5bSkpCisrCQkgICAgZWxmX2Fzc2VydCAoKHZlcnNpb25kYXRhLT5kX3NpemUgLyBzaXplb2YgKEdFbGZfVmVyc3ltKSkKKyAJCQkgICAgPj0gc2hkcl9pbmZvW2NudF0uZGF0YS0+ZF9zaXplIC8gZWxzaXplKTsKKyAJCSAgfQorIAorQEAgLTEyMjMsNyArMTI0Nyw3IEBACisgCQkgICAgICBzZWMgPSBzaGRyX2luZm9bc3ltLT5zdF9zaG5keF0uaWR4OworIAkJICAgIGVsc2UKKyAJCSAgICAgIHsKKy0JCQlhc3NlcnQgKHNobmR4ZGF0YSAhPSBOVUxMKTsKKysJCQllbGZfYXNzZXJ0IChzaG5keGRhdGEgIT0gTlVMTCk7CisgCisgCQkJc2VjID0gc2hkcl9pbmZvW3hzaG5keF0uaWR4OworIAkJICAgICAgfQorQEAgLTEyNDQsNyArMTI2OCw3IEBACisgCQkJICAgIG54c2huZHggPSBzZWM7CisgCQkJICB9CisgCistCQkJYXNzZXJ0IChzZWMgPCBTSE5fTE9SRVNFUlZFIHx8IHNobmR4ZGF0YSAhPSBOVUxMKTsKKysJCQllbGZfYXNzZXJ0IChzZWMgPCBTSE5fTE9SRVNFUlZFIHx8IHNobmR4ZGF0YSAhPSBOVUxMKTsKKyAKKyAJCQlpZiAoKGlubmVyICE9IGRlc3RpZHggfHwgbnNobmR4ICE9IHN5bS0+c3Rfc2huZHgKKyAJCQkgICAgIHx8IChzaG5keGRhdGEgIT0gTlVMTCAmJiBueHNobmR4ICE9IHhzaG5keCkpCitAQCAtMTI2OCw3ICsxMjkyLDcgQEAKKyAJCQkgICAgIHx8IHNoZHJfaW5mb1tjbnRdLmRlYnVnX2RhdGEgPT0gTlVMTCkKKyAJCSAgICAgIC8qIFRoaXMgaXMgYSBzZWN0aW9uIHN5bWJvbCBmb3IgYSBzZWN0aW9uIHdoaWNoIGhhcworIAkJCSBiZWVuIHJlbW92ZWQuICAqLworLQkJICAgICAgYXNzZXJ0IChHRUxGX1NUX1RZUEUgKHN5bS0+c3RfaW5mbykgPT0gU1RUX1NFQ1RJT04pOworKwkJICAgICAgZWxmX2Fzc2VydCAoR0VMRl9TVF9UWVBFIChzeW0tPnN0X2luZm8pID09IFNUVF9TRUNUSU9OKTsKKyAJCSAgfQorIAorIAkJaWYgKGRlc3RpZHggIT0gaW5uZXIpCitAQCAtMTQ1NSwxMSArMTQ3OSwxMSBAQAorIAkJICB7CisgCQkgICAgR0VsZl9TeW0gc3ltX21lbTsKKyAJCSAgICBHRWxmX1N5bSAqc3ltID0gZ2VsZl9nZXRzeW0gKHN5bWQsIGlubmVyLCAmc3ltX21lbSk7CistCQkgICAgYXNzZXJ0IChzeW0gIT0gTlVMTCk7CisrCQkgICAgZWxmX2Fzc2VydCAoc3ltICE9IE5VTEwpOworIAorIAkJICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBlbGZfc3RycHRyIChlbGYsIHN0cnNobmR4LAorIAkJCQkJCSAgIHN5bS0+c3RfbmFtZSk7CistCQkgICAgYXNzZXJ0IChuYW1lICE9IE5VTEwpOworKwkJICAgIGVsZl9hc3NlcnQgKG5hbWUgIT0gTlVMTCk7CisgCQkgICAgc2l6ZV90IGhpZHggPSBlbGZfaGFzaCAobmFtZSkgJSBuYnVja2V0OworIAorIAkJICAgIGlmIChidWNrZXRbaGlkeF0gPT0gMCkKK0BAIC0xNDc4LDcgKzE1MDIsNyBAQAorIAkgICAgZWxzZQorIAkgICAgICB7CisgCQkvKiBBbHBoYSBhbmQgUzM5MCA2NC1iaXQgdXNlIDY0LWJpdCBTSFRfSEFTSCBlbnRyaWVzLiAgKi8KKy0JCWFzc2VydCAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF9lbnRzaXplCisrCQllbGZfYXNzZXJ0IChzaGRyX2luZm9bY250XS5zaGRyLnNoX2VudHNpemUKKyAJCQk9PSBzaXplb2YgKEVsZjY0X1h3b3JkKSk7CisgCisgCQlFbGY2NF9Yd29yZCAqYnVja2V0ID0gKEVsZjY0X1h3b3JkICopIGhhc2hkLT5kX2J1ZjsKK0BAIC0xNTA5LDExICsxNTMzLDExIEBACisgCQkgIHsKKyAJCSAgICBHRWxmX1N5bSBzeW1fbWVtOworIAkJICAgIEdFbGZfU3ltICpzeW0gPSBnZWxmX2dldHN5bSAoc3ltZCwgaW5uZXIsICZzeW1fbWVtKTsKKy0JCSAgICBhc3NlcnQgKHN5bSAhPSBOVUxMKTsKKysJCSAgICBlbGZfYXNzZXJ0IChzeW0gIT0gTlVMTCk7CisgCisgCQkgICAgY29uc3QgY2hhciAqbmFtZSA9IGVsZl9zdHJwdHIgKGVsZiwgc3Ryc2huZHgsCisgCQkJCQkJICAgc3ltLT5zdF9uYW1lKTsKKy0JCSAgICBhc3NlcnQgKG5hbWUgIT0gTlVMTCk7CisrCQkgICAgZWxmX2Fzc2VydCAobmFtZSAhPSBOVUxMKTsKKyAJCSAgICBzaXplX3QgaGlkeCA9IGVsZl9oYXNoIChuYW1lKSAlIG5idWNrZXQ7CisgCisgCQkgICAgaWYgKGJ1Y2tldFtoaWR4XSA9PSAwKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvcmVtb3ZlLXVudXNlZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3JlbW92ZS11bnVzZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmExOTc5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3JlbW92ZS11bnVzZWQucGF0Y2gKQEAgLTAsMCArMSwxNTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMgZnJvbSB0aGUgY29kZSB0byBwcmV2ZW50IC1XZXJyb3IgY2F1c2luZyBhIGJ1aWxkCitmYWlsdXJlIG9uIGhvc3RzIHdpdGggR0NDIDQuNi4KKworVGhlc2UgY2hhbmdlcyBhcmUgYWxsIHVwc3RyZWFtIHNvIHNob3VsZCBub3QgYmUgcmVxdWlyZWQgb25jZSB3ZSd2ZSB1cGRhdGVkCit0byBlbGZ1dGlscyAwLjE1MiBvciBsYXRlci4gVGhlcmVmb3JlIHRoaXMgcGF0Y2ggY29uc29saWRhdGVzIHNldmVyYWwKK2NoYW5nZXMgZnJvbSBlbGZ1dGlscyB1cHN0cmVhbSBieSBSb2xhbmQgTWNHcmF0aCBpbnRvIGEgc2luZ2xlIGZpbGUgc28gdGhhdAoraXQncyBlYXNpZXIgdG8gcmVtb3ZlIGxhdGVyIG9uY2Ugd2UgdXBncmFkZS4KK0xpbmtzIHRvIHVwc3RyZWFtIGdpdHdlYiBvZiB0aGUgY29uc29saWRhdGVkIGNvbW1pdHMgZm9sbG93OgorLSBodHRwOi8vZ2l0LmZlZG9yYWhvc3RlZC5vcmcvZ2l0P3A9ZWxmdXRpbHMuZ2l0O2E9Y29tbWl0O2g9NzA5NGQwMGExNjlhZmIyN2UwMzIzZjg1ODBlODE3Nzk4YWU3YzI0MAorLSBodHRwOi8vZ2l0LmZlZG9yYWhvc3RlZC5vcmcvZ2l0P3A9ZWxmdXRpbHMuZ2l0O2E9Y29tbWl0O2g9ZmQ5OTI1NDMxODUxMjZlYjAyODBjMWVlMDg4M2UwNzMwMjA0OTliNAorLSBodHRwOi8vZ2l0LmZlZG9yYWhvc3RlZC5vcmcvZ2l0P3A9ZWxmdXRpbHMuZ2l0O2E9Y29tbWl0O2g9NGRiODlmMDRiYjU5MzI3YWJkN2EzYjYwZTg4ZjJlN2U3M2M2NWM3OQorLSBodHRwOi8vZ2l0LmZlZG9yYWhvc3RlZC5vcmcvZ2l0P3A9ZWxmdXRpbHMuZ2l0O2E9Y29tbWl0O2g9OGY2YzE3OTVhYjlkNDFmMDM4MDVlZWJkNTU3NjcwNzBhZGU1NWFhYworLSBodHRwOi8vZ2l0LmZlZG9yYWhvc3RlZC5vcmcvZ2l0P3A9ZWxmdXRpbHMuZ2l0O2E9Y29tbWl0O2g9MjQwNzg0YjQ4YWEyNzY4MjJjNWE2MWM5YWQ2YTQzNTUwNTFjZTI1OQorCitKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+IC0gMDYvMDQvMTEKKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmFzbS9hc21fbmV3c2NuLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmFzbS9hc21fbmV3c2NuLmMKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJhc20vYXNtX25ld3Njbi5jCitAQCAtMTYyLDcgKzE2Miw2IEBAIGFzbV9uZXdzY24gKGN0eCwgc2NubmFtZSwgdHlwZSwgZmxhZ3MpCisgICAgICBHRWxmX1h3b3JkIGZsYWdzOworIHsKKyAgIHNpemVfdCBzY25uYW1lX2xlbiA9IHN0cmxlbiAoc2NubmFtZSkgKyAxOworLSAgdW5zaWduZWQgbG9uZyBpbnQgaHZhbDsKKyAgIEFzbVNjbl90ICpyZXN1bHQ7CisgCisgICAvKiBJZiBubyBjb250ZXh0IGlzIGdpdmVuIHRoZXJlIG1pZ2h0IGJlIGFuIGVhcmxpZXIgZXJyb3IuICAqLworQEAgLTE4MCw4ICsxNzksNiBAQCBhc21fbmV3c2NuIChjdHgsIHNjbm5hbWUsIHR5cGUsIGZsYWdzKQorICAgICAgIHJldHVybiBOVUxMOworICAgICB9CisgCistICBodmFsID0gZWxmX2hhc2ggKHNjbm5hbWUpOworLQorICAgcndsb2NrX3dybG9jayAoY3R4LT5sb2NrKTsKKyAKKyAgIC8qIFRoaXMgaXMgYSBuZXcgc2VjdGlvbi4gICovCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL2VsZmxpbnQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL2VsZmxpbnQuYworKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9lbGZsaW50LmMKK0BAIC03MDcsOSArNzA3LDEwIEBAIHNlY3Rpb24gWyUyZF0gJyVzJzogc3ltYm9sICV6dTogaW52YWxpZCAKKyAJeworIAkgIGlmICh4bmR4ZGF0YSA9PSBOVUxMKQorIAkgICAgeworLQkgICAgICBFUlJPUiAoZ2V0dGV4dCAoIlwKKysJICAgICAgaWYgKCFub194bmR4X3dhcm5lZCkKKysJCUVSUk9SIChnZXR0ZXh0ICgiXAorIHNlY3Rpb24gWyUyZF0gJyVzJzogc3ltYm9sICV6dTogdG9vIGxhcmdlIHNlY3Rpb24gaW5kZXggYnV0IG5vIGV4dGVuZGVkIHNlY3Rpb24gaW5kZXggc2VjdGlvblxuIiksCistCQkgICAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCksIGNudCk7CisrCQkgICAgICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSwgY250KTsKKyAJICAgICAgbm9feG5keF93YXJuZWQgPSB0cnVlOworIAkgICAgfQorIAkgIGVsc2UgaWYgKHhuZHggPCBTSE5fTE9SRVNFUlZFKQorQEAgLTE1OTIsMTAgKzE1OTMsNiBAQCBjaGVja19keW5hbWljIChFYmwgKmVibCwgR0VsZl9FaGRyICplaGRyCisgICAgICAgW0RUX1NUUlNaXSA9IHRydWUsCisgICAgICAgW0RUX1NZTUVOVF0gPSB0cnVlCisgICAgIH07CistICBHRWxmX0FkZHIgcmVsYWRkciA9IDA7CistICBHRWxmX1dvcmQgcmVsc3ogPSAwOworLSAgR0VsZl9BZGRyIHBsdHJlbGFkZHIgPSAwOworLSAgR0VsZl9Xb3JkIHBsdHJlbHN6ID0gMDsKKyAKKyAgIG1lbXNldCAoaGFzX2R0LCAnXDAnLCBzaXplb2YgKGhhc19kdCkpOworICAgbWVtc2V0IChoYXNfdmFsX2R0LCAnXDAnLCBzaXplb2YgKGhhc192YWxfZHQpKTsKK0BAIC0xNjk0LDE1ICsxNjkxLDYgQEAgc2VjdGlvbiBbJTJkXSAnJXMnOiBlbnRyeSAlenU6IGxldmVsIDIgdAorIHNlY3Rpb24gWyUyZF0gJyVzJzogZW50cnkgJXp1OiBEVF9QTFRSRUwgdmFsdWUgbXVzdCBiZSBEVF9SRUwgb3IgRFRfUkVMQVxuIiksCisgCSAgICAgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpLCBjbnQpOworIAorLSAgICAgIGlmIChkeW4tPmRfdGFnID09IERUX1JFTCkKKy0JcmVsYWRkciA9IGR5bi0+ZF91bi5kX3B0cjsKKy0gICAgICBpZiAoZHluLT5kX3RhZyA9PSBEVF9SRUxTWikKKy0JcmVsc3ogPSBkeW4tPmRfdW4uZF92YWw7CistICAgICAgaWYgKGR5bi0+ZF90YWcgPT0gRFRfSk1QUkVMKQorLQlwbHRyZWxhZGRyID0gZHluLT5kX3VuLmRfcHRyOworLSAgICAgIGlmIChkeW4tPmRfdGFnID09IERUX1BMVFJFTFNaKQorLQlwbHRyZWxzeiA9IGR5bi0+ZF91bi5kX3ZhbDsKKy0KKyAgICAgICAvKiBDaGVjayB0aGF0IGFkZHJlc3NlcyBmb3IgZW50cmllcyBhcmUgaW4gbG9hZGVkIHNlZ21lbnRzLiAgKi8KKyAgICAgICBzd2l0Y2ggKGR5bi0+ZF90YWcpCisgCXsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvbGRnZW5lcmljLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9sZGdlbmVyaWMuYworKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9sZGdlbmVyaWMuYworQEAgLTI4NSwxMiArMjg1LDEwIEBAIHN0YXRpYyBpbnQKKyBjaGVja19mb3JfZHVwbGljYXRlMiAoc3RydWN0IHVzZWRmaWxlcyAqbmV3cCwgc3RydWN0IHVzZWRmaWxlcyAqbGlzdCkKKyB7CisgICBzdHJ1Y3QgdXNlZGZpbGVzICpmaXJzdDsKKy0gIHN0cnVjdCB1c2VkZmlsZXMgKnByZXZwOworIAorICAgaWYgKGxpc3QgPT0gTlVMTCkKKyAgICAgcmV0dXJuIDA7CisgCistICBwcmV2cCA9IGxpc3Q7CisgICBsaXN0ID0gZmlyc3QgPSBsaXN0LT5uZXh0OworICAgZG8KKyAgICAgeworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9sZHNjcmlwdC55Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvbGRzY3JpcHQueQorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9sZHNjcmlwdC55CitAQCAtODAyLDEyICs4MDIsOSBAQCBhZGRfdmVyc2lvbnMgKHN0cnVjdCB2ZXJzaW9uICp2ZXJzaW9ucykKKyAKKyAgIGRvCisgICAgIHsKKy0gICAgICBzdHJ1Y3QgdmVyc2lvbiAqb2xkcDsKKy0KKyAgICAgICBhZGRfaWRfbGlzdCAodmVyc2lvbnMtPnZlcnNpb25uYW1lLCB2ZXJzaW9ucy0+bG9jYWxfbmFtZXMsIHRydWUpOworICAgICAgIGFkZF9pZF9saXN0ICh2ZXJzaW9ucy0+dmVyc2lvbm5hbWUsIHZlcnNpb25zLT5nbG9iYWxfbmFtZXMsIGZhbHNlKTsKKyAKKy0gICAgICBvbGRwID0gdmVyc2lvbnM7CisgICAgICAgdmVyc2lvbnMgPSB2ZXJzaW9ucy0+bmV4dDsKKyAgICAgfQorICAgd2hpbGUgKHZlcnNpb25zICE9IE5VTEwpOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy91bnN0cmlwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy91bnN0cmlwLmMKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvdW5zdHJpcC5jCitAQCAtMTMwMSw3ICsxMzAxLDYgQEAgbW9yZSBzZWN0aW9ucyBpbiBzdHJpcHBlZCBmaWxlIHRoYW4gZGVidQorICAgLyogTWF0Y2ggZWFjaCBkZWJ1Z2luZm8gc2VjdGlvbiB3aXRoIGl0cyBjb3JyZXNwb25kaW5nIHN0cmlwcGVkIHNlY3Rpb24uICAqLworICAgYm9vbCBjaGVja19wcmVsaW5rID0gZmFsc2U7CisgICBFbGZfU2NuICp1bnN0cmlwcGVkX3N5bXRhYiA9IE5VTEw7CistICBzaXplX3QgdW5zdHJpcHBlZF9zdHJ0YWJfbmR4ID0gU0hOX1VOREVGOworICAgc2l6ZV90IGFsbG9jX2F2YWlsID0gMDsKKyAgIHNjbiA9IE5VTEw7CisgICB3aGlsZSAoKHNjbiA9IGVsZl9uZXh0c2NuICh1bnN0cmlwcGVkLCBzY24pKSAhPSBOVUxMKQorQEAgLTEzMTMsNyArMTMxMiw2IEBAIG1vcmUgc2VjdGlvbnMgaW4gc3RyaXBwZWQgZmlsZSB0aGFuIGRlYnUKKyAgICAgICBpZiAoc2hkci0+c2hfdHlwZSA9PSBTSFRfU1lNVEFCKQorIAl7CisgCSAgdW5zdHJpcHBlZF9zeW10YWIgPSBzY247CistCSAgdW5zdHJpcHBlZF9zdHJ0YWJfbmR4ID0gc2hkci0+c2hfbGluazsKKyAJICBjb250aW51ZTsKKyAJfQorIAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9sZHNjcmlwdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvbGRzY3JpcHQuYworKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9sZHNjcmlwdC5jCitAQCAtMjcyOCwxMiArMjcyOCw5IEBAIGFkZF92ZXJzaW9ucyAoc3RydWN0IHZlcnNpb24gKnZlcnNpb25zKQorIAorICAgZG8KKyAgICAgeworLSAgICAgIHN0cnVjdCB2ZXJzaW9uICpvbGRwOworLQorICAgICAgIGFkZF9pZF9saXN0ICh2ZXJzaW9ucy0+dmVyc2lvbm5hbWUsIHZlcnNpb25zLT5sb2NhbF9uYW1lcywgdHJ1ZSk7CisgICAgICAgYWRkX2lkX2xpc3QgKHZlcnNpb25zLT52ZXJzaW9ubmFtZSwgdmVyc2lvbnMtPmdsb2JhbF9uYW1lcywgZmFsc2UpOworIAorLSAgICAgIG9sZHAgPSB2ZXJzaW9uczsKKyAgICAgICB2ZXJzaW9ucyA9IHZlcnNpb25zLT5uZXh0OworICAgICB9CisgICB3aGlsZSAodmVyc2lvbnMgIT0gTlVMTCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3Rlc3RzdWl0ZS1pZ25vcmUtZWxmbGludC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3OTJkNWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZgpAQCAtMCwwICsxLDIxIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK09uIG1hbnkgYXJjaGl0ZWN0dXJlcyB0aGlzIHRlc3QgZmFpbHMgYmVjYXVzZSBiaW5hcmllcy9saWJzIHByb2R1Y2VkIGJ5CitiaW51dGlscyBkb24ndCBwYXNzIGVsZmxpbnQuIEhvd2V2ZXIgZWxmdXRpbHMgc2hvdWxkbid0IEZUQkZTIGJlY2F1c2Ugb2YgdGhpcy4KKworU28gd2UgcnVuIHRoZSB0ZXN0cyBvbiBhbGwgYXJjaHMgdG8gc2VlIHdoYXQgYnJlYWtzLCBidXQgaWYgaXQgYnJlYWtzIHdlIGlnbm9yZQordGhlIHJlc3VsdCAoZXhpdGNvZGUgNzcgbWVhbnM6IHRoaXMgdGVzdCB3YXMgc2tpcHBlZCkuCisKK0luZGV4OiBlbGZ1dGlscy0wLjEyOC90ZXN0cy9ydW4tZWxmbGludC1zZWxmLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xMjgub3JpZy90ZXN0cy9ydW4tZWxmbGludC1zZWxmLnNoCTIwMDctMDctMDggMjE6NDY6MTYuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xMjgvdGVzdHMvcnVuLWVsZmxpbnQtc2VsZi5zaAkyMDA3LTA3LTA4IDIxOjQ2OjQ5LjAwMDAwMDAwMCArMDAwMAorQEAgLTMyLDcgKzMyLDcgQEAKKyAjICBlY2hvICQxCisgICBpZiBbIC1mICQxIF07IHRoZW4KKyAgICAgdGVzdHJ1biAuLi9zcmMvZWxmbGludCAtLXF1aWV0IC0tZ251LWxkICQxIHx8CistICAgIHsgZWNobyAiKioqIGZhaWx1cmUgaW4gJDEiOyBzdGF0dXM9MTsgfQorKyAgICB7IGVjaG8gIioqKiBmYWlsdXJlIGluICQxIjsgc3RhdHVzPTc3OyB9CisgICBmaQorIH0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3VjbGliYy1zdXBwb3J0LWZvci1lbGZ1dGlscy0wLjE0OC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3VjbGliYy1zdXBwb3J0LWZvci1lbGZ1dGlscy0wLjE0OC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2YxNmFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvdWNsaWJjLXN1cHBvcnQtZm9yLWVsZnV0aWxzLTAuMTQ4LnBhdGNoCkBAIC0wLDAgKzEsOTEgQEAKK29uIHVjbGliYyBzeXN0ZW1zIGxpYmludGwgYW5kIGxpYnVhcmdwIGFyZSBzZXBhcmF0ZSBmcm9tIGxpYmMuCitzbyB0aGV5IG5lZWQgdG8gYmUgc3BlY2lmaWVkIG9uIGNvbW1hbmRsaW5lIHdoZW4gd2UgdXNlIHByb3h5LWxpYmludGwKK3RoZW4gbGliaW50bCBpcyBhIHN0YXRpYyBhcmNoaXZlIHNvIGl0IHNob3VsZCBiZSBsaXN0ZWQgbGFzdCBzaW5jZQorZWxmdXRpbHMgZG9lcyBub3QgcmVzcGVjdCBkaXNhYmxlLW5scyB3ZSBuZWVkIHRvIGxpbmsgaW4gbGliaW50bAorCitXZSBhZGQgYSBuZXcgb3B0aW9uIC0tZW5hYmxlLXVjbGliYyB3aGljaCB3aWxsIGJlIHVzZWQgdG8gY29udHJvbAordGhlIHVjbGliYyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBkdXJpbmcgYnVpbGQuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1Y2xpYmMgc3BlY2lmaWNdCisKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGVsZnV0aWxzLTAuMTQ4L2NvbmZpZ3VyZS5hYworQEAgLTU1LDkgKzU1LDE2IEBAIEFTX0lGKFt0ZXN0ICIkdXNlX2xvY2tzIiA9IHllc10sIFtBQ19ERUYKKyAKKyBBSF9URU1QTEFURShbVVNFX0xPQ0tTXSwgW0RlZmluZWQgaWYgbGlicmFyaWVzIHNob3VsZCBiZSB0aHJlYWQtc2FmZS5dKQorIAorK0FDX0FSR19FTkFCTEUoW3VjbGliY10sCisrQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXVjbGliY10sIFtVc2UgdWNsaWJjIGZvciBzeXN0ZW0gbGlicmFyaWVzXSksCisrdXNlX3VjbGliYz15ZXMsIHVzZV91Y2xpYmM9bm8pCisrQU1fQ09ORElUSU9OQUwoVVNFX1VDTElCQywgdGVzdCAiJHVzZV91Y2xpYmMiID0geWVzKQorK0FTX0lGKFt0ZXN0ICIkdXNlX3VjbGliYyIgPSB5ZXNdLCBbQUNfREVGSU5FKFVTRV9VQ0xJQkMpXSkKKysKKytBSF9URU1QTEFURShbVVNFX1VDTElCQ10sIFtEZWZpbmVkIGlmIHVjbGliYyBsaWJyYXJpZXMgYXJlIHVzZWQuXSkKKysKKyBkbmwgQWRkIGFsbCB0aGUgbGFuZ3VhZ2VzIGZvciB3aGljaCB0cmFuc2xhdGlvbnMgYXJlIGF2YWlsYWJsZS4KKyBBTExfTElOR1VBUz0KKy0KKyBBQ19QUk9HX0NDCisgQUNfUFJPR19SQU5MSUIKKyBBQ19QUk9HX1lBQ0MKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9NYWtlZmlsZS5hbQorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9NYWtlZmlsZS5hbQorQEAgLTkzLDcgKzkzLDEyIEBAIGlmICFNVURGTEFQCisgbGliZWxmX3BpY19hX1NPVVJDRVMgPQorIGFtX2xpYmVsZl9waWNfYV9PQkpFQ1RTID0gJChsaWJlbGZfYV9TT1VSQ0VTOi5jPS5vcykKKyAKKysKKyBsaWJlbGZfc29fTERMSUJTID0KKytpZiBVU0VfVUNMSUJDCisrbGliZWxmX3NvX0xETElCUyArPSAtbGludGwgLWx1YXJncAorK2VuZGlmCisrCisgaWYgVVNFX0xPQ0tTCisgbGliZWxmX3NvX0xETElCUyArPSAtbHB0aHJlYWQKKyBlbmRpZgorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmR3L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJkdy9NYWtlZmlsZS5hbQorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmR3L01ha2VmaWxlLmFtCitAQCAtOTgsNiArOTgsMTEgQEAgaWYgIU1VREZMQVAKKyBsaWJkd19waWNfYV9TT1VSQ0VTID0KKyBhbV9saWJkd19waWNfYV9PQkpFQ1RTID0gJChsaWJkd19hX1NPVVJDRVM6LmM9Lm9zKQorIAorK2xpYmR3X3NvX0xETElCUyA9CisraWYgVVNFX1VDTElCQworK2xpYmR3X3NvX0xETElCUyArPSAtbGludGwgLWx1YXJncAorK2VuZGlmCisrCisgbGliZHdfc29fU09VUkNFUyA9CisgbGliZHcuc286ICQoc3JjZGlyKS9saWJkdy5tYXAgbGliZHdfcGljLmEgXAorIAkgIC4uL2xpYmR3ZmwvbGliZHdmbF9waWMuYSAuLi9saWJlYmwvbGliZWJsLmEgXAorQEAgLTEwOCw3ICsxMTMsNyBAQCBsaWJkdy5zbzogJChzcmNkaXIpL2xpYmR3Lm1hcCBsaWJkd19waWMuCisgCQktV2wsLS1lbmFibGUtbmV3LWR0YWdzLC1ycGF0aCwkKHBrZ2xpYmRpcikgXAorIAkJLVdsLC0tdmVyc2lvbi1zY3JpcHQsJDwsLS1uby11bmRlZmluZWQgXAorIAkJLVdsLC0td2hvbGUtYXJjaGl2ZSAkKGZpbHRlci1vdXQgJDwsJF4pIC1XbCwtLW5vLXdob2xlLWFyY2hpdmVcCistCQktbGRsICQoemlwX0xJQlMpCisrCQktbGRsICQoemlwX0xJQlMpICQobGliZHdfc29fTERMSUJTKQorIAlpZiByZWFkZWxmIC1kICRAIHwgZmdyZXAgLXEgVEVYVFJFTDsgdGhlbiBleGl0IDE7IGZpCisgCWxuIC1mcyAkQCAkQC4kKFZFUlNJT04pCisgCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliY3B1L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJjcHUvTWFrZWZpbGUuYW0KKysrKyBlbGZ1dGlscy0wLjE0OC9saWJjcHUvTWFrZWZpbGUuYW0KK0BAIC02Myw2ICs2MywxMCBAQCBpMzg2X3BhcnNlX0NGTEFHUyA9IC1ETk1ORVM9ImB3YyAtbCA8IGkzCisgaTM4Nl9sZXgubzogaTM4Nl9wYXJzZS5oCisgaTM4Nl9nZW5kaXNfTERBREQgPSAkKGxpYmV1KSAtbG0gJChsaWJtdWRmbGFwKQorIAorK2lmIFVTRV9VQ0xJQkMKKytpMzg2X2dlbmRpc19MREFERCArPSAtbHVhcmdwIC1saW50bAorK2VuZGlmCisrCisgaTM4Nl9wYXJzZS5oOiBpMzg2X3BhcnNlLmMgOworIAorIG5vaW5zdF9IRUFERVJTID0gbWVtb3J5LWFjY2Vzcy5oIGkzODZfcGFyc2UuaCBpMzg2X2RhdGEuaApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgveDg2XzY0X2Rpcy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgveDg2XzY0X2Rpcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMTk4YmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC94ODZfNjRfZGlzLmgKQEAgLTAsMCArMSwxNjMyIEBACisjZGVmaW5lIE1ORU1PTklDX0JJVFMgMTAKKyNkZWZpbmUgU1VGRklYX0JJVFMgMworI2RlZmluZSBGQ1QxX0JJVFMgNworI2RlZmluZSBTVFIxX0JJVFMgNAorI2RlZmluZSBPRkYxXzFfQklUUyA3CisjZGVmaW5lIE9GRjFfMV9CSUFTIDMKKyNkZWZpbmUgT0ZGMV8yX0JJVFMgNworI2RlZmluZSBPRkYxXzJfQklBUyA0CisjZGVmaW5lIE9GRjFfM19CSVRTIDEKKyNkZWZpbmUgT0ZGMV8zX0JJQVMgNworI2RlZmluZSBGQ1QyX0JJVFMgNgorI2RlZmluZSBTVFIyX0JJVFMgMgorI2RlZmluZSBPRkYyXzFfQklUUyA3CisjZGVmaW5lIE9GRjJfMV9CSUFTIDUKKyNkZWZpbmUgT0ZGMl8yX0JJVFMgNworI2RlZmluZSBPRkYyXzJfQklBUyA0CisjZGVmaW5lIE9GRjJfM19CSVRTIDQKKyNkZWZpbmUgT0ZGMl8zX0JJQVMgNworI2RlZmluZSBGQ1QzX0JJVFMgNAorI2RlZmluZSBTVFIzX0JJVFMgMQorI2RlZmluZSBPRkYzXzFfQklUUyA2CisjZGVmaW5lIE9GRjNfMV9CSUFTIDEwCisjZGVmaW5lIE9GRjNfMl9CSVRTIDEKKyNkZWZpbmUgT0ZGM18yX0JJQVMgMjEKKworI2luY2x1ZGUgPGkzODZfZGF0YS5oPgorCisjZGVmaW5lIHN1ZmZpeF9ub25lIDAKKyNkZWZpbmUgc3VmZml4X3cgMQorI2RlZmluZSBzdWZmaXhfdzAgMgorI2RlZmluZSBzdWZmaXhfVyAzCisjZGVmaW5lIHN1ZmZpeF90dHRuIDQKKyNkZWZpbmUgc3VmZml4X0QgNworI2RlZmluZSBzdWZmaXhfdzEgNQorI2RlZmluZSBzdWZmaXhfVzEgNgorCitzdGF0aWMgY29uc3Qgb3BmY3RfdCBvcDFfZmN0W10gPQoreworICBOVUxMLAorICBGQ1RfTU9EJFJfTSwKKyAgRkNUX01vZCRSX20sCisgIEZDVF9hYnMsCisgIEZDVF9heCwKKyAgRkNUX2F4JHcsCisgIEZDVF9jY2MsCisgIEZDVF9kZGQsCisgIEZDVF9kaXNwOCwKKyAgRkNUX2RzX2J4LAorICBGQ1RfZHNfc2ksCisgIEZDVF9keCwKKyAgRkNUX2VzX2RpLAorICBGQ1RfZnJlZywKKyAgRkNUX2ltbSRzLAorICBGQ1RfaW1tJHcsCisgIEZDVF9pbW0xNiwKKyAgRkNUX2ltbTY0JHcsCisgIEZDVF9pbW04LAorICBGQ1RfaW1tczgsCisgIEZDVF9tbXhyZWcsCisgIEZDVF9tb2QkMTZyX20sCisgIEZDVF9tb2QkNjRyX20sCisgIEZDVF9tb2QkOHJfbSwKKyAgRkNUX21vZCRyX20sCisgIEZDVF9tb2Qkcl9tJHcsCisgIEZDVF9yZWcsCisgIEZDVF9yZWckdywKKyAgRkNUX3JlZzY0LAorICBGQ1RfcmVsLAorICBGQ1Rfc2VsLAorICBGQ1Rfc3JlZzIsCisgIEZDVF9zcmVnMywKKyAgRkNUX3N0cmluZywKKyAgRkNUX3htbXJlZywKK307CitzdGF0aWMgY29uc3QgY2hhciBvcDFfc3RyW10gPQorICAiJWF4XDAiCisgICIlY2xcMCIKKyAgIiVyYXhcMCIKKyAgIiVzdFwwIgorICAiJXhtbTBcMCIKKyAgIioiOworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgb3AxX3N0cl9pZHhbXSA9IHsKKyAgMCwKKyAgNCwKKyAgOCwKKyAgMTMsCisgIDE3LAorICAyMywKK307CitzdGF0aWMgY29uc3Qgb3BmY3RfdCBvcDJfZmN0W10gPQoreworICBOVUxMLAorICBGQ1RfTU9EJFJfTSwKKyAgRkNUX01vZCRSX20sCisgIEZDVF9hYnMsCisgIEZDVF9hYnN2YWwsCisgIEZDVF9heCR3LAorICBGQ1RfY2NjLAorICBGQ1RfZGRkLAorICBGQ1RfZHNfc2ksCisgIEZDVF9keCwKKyAgRkNUX2VzX2RpLAorICBGQ1RfZnJlZywKKyAgRkNUX2ltbTgsCisgIEZDVF9tbXhyZWcsCisgIEZDVF9tb2QkNjRyX20sCisgIEZDVF9tb2Qkcl9tLAorICBGQ1RfbW9kJHJfbSR3LAorICBGQ1Rfb3JlZywKKyAgRkNUX29yZWckdywKKyAgRkNUX3JlZywKKyAgRkNUX3JlZyR3LAorICBGQ1RfcmVnNjQsCisgIEZDVF9zcmVnMywKKyAgRkNUX3N0cmluZywKKyAgRkNUX3htbXJlZywKK307CitzdGF0aWMgY29uc3QgY2hhciBvcDJfc3RyW10gPQorICAiJXJjeFwwIgorICAiJXN0IjsKK3N0YXRpYyBjb25zdCB1aW50OF90IG9wMl9zdHJfaWR4W10gPSB7CisgIDAsCisgIDUsCit9Oworc3RhdGljIGNvbnN0IG9wZmN0X3Qgb3AzX2ZjdFtdID0KK3sKKyAgTlVMTCwKKyAgRkNUX21teHJlZywKKyAgRkNUX21vZCRyX20sCisgIEZDVF9yZWcsCisgIEZDVF9zdHJpbmcsCisgIEZDVF94bW1yZWcsCit9Oworc3RhdGljIGNvbnN0IGNoYXIgb3AzX3N0cltdID0KKyAgIiVyZHgiOworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgb3AzX3N0cl9pZHhbXSA9IHsKKyAgMCwKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGluc3RyX2VuYyBpbnN0cnRhYltdID0KK3sKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGRzdWJwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZHN1YnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRucGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRucHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzbHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnNmLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2JzciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ic3dhcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnRjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idHIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnRzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0cywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAyOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY2FsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDEsIC5mY3QxID0gMjIsIC5zdHIxID0gNiwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xjYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMiwgLnN0cjEgPSA2LCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY2xjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NsaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3lzY2FsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY2x0cywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3lzcmV0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zeXNlbnRlciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3lzZXhpdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21jLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wcywgLnJlcCA9IDAsIC5yZXBlID0gMSwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDAsIC5mY3QxID0gMTIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcHhjaGcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDExLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDgsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NwdWlkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRkcTJwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBkMmRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHBkMmRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGVjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGl2LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZW1tcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZW50ZXIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zub3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjaHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZhYnMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z0c3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z4YW0sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZDEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZGwydCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkbDJlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRwaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkbGcyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRsbjIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZHosIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2YyeG0xLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meWwyeCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnB0YW4sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZwYXRhbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnh0cmFjdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnByZW0xLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGVjc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maW5jc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mcHJlbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnlsMnhwMSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnNxcnQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzaW5jb3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZybmRpbnQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzY2FsZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnNpbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmFkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmFkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWJyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWJyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZGVudiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZGN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5zdGVudiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zuc3RjdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z4Y2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmFkZHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWFkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92ZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm11bHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmltdWwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3VicCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maXN1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWJycCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maXN1YnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbnN0c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDEsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbWlwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYnN0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjaHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbGV4LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maW5pdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZndhaXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZuY2xleCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92YmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92dSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZuYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZuZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZuYmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92bnUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb20sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbXBwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29taSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbWlwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mdWNvbWksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z1Y29taXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkZWNzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpZGl2bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpZGl2LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdnJwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpZGl2cmwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWRpdnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2cnAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmZyZWUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZiZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWNvbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92dSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWNvbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlsZGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWxkbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maW5jc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbmluaXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maXN0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3RwbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maXN0dHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maXN0dHBsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3RwdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mdWNvbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mcnN0b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mdWNvbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5zYXZlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5zdHN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaGx0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pZGl2LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ltdWwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMiwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAzLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW4sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW4sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDExLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbmMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnMsIC5yZXAgPSAxLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAwLCAuZmN0MSA9IDExLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW50LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW50MywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW52ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3dhcGdzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnZscGcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2lyZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA2LCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2osIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA0LCAubW9kcm0gPSAwLCAuZmN0MSA9IDgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2osIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA0LCAubW9kcm0gPSAwLCAuZmN0MSA9IDI5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2V0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9qbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ptcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMjksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ptcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDEsIC5mY3QxID0gMjIsIC5zdHIxID0gNiwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xqbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGptcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDEsIC5mY3QxID0gMjIsIC5zdHIxID0gNiwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xhaGYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xhciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZWEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGVhdmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xmcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZ3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGdkdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGlkdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGxkdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbG1zdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbG9jaywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbG9kcywgLnJlcCA9IDEsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xvb3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xvb3BlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sb29wbmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xzbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbHRyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDM1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTgsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzLCAucmVwID0gMSwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNibCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Zzd2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92emJsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnp3bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tdWwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9uZWcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYXVzZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wY250LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX25vdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3V0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX291dCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3V0cywgLnJlcCA9IDEsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDAsIC5mY3QxID0gMTAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3BmLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2hxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMiwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMzIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2hmLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yZG1zciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmRwbWMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JkdHNjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMTYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xyZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xyZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm9sLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yc20sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NhaGYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NhciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NhciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYXIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NiYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2JiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NiYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2JiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zY2FzLCAucmVwID0gMCwgLnJlcGUgPSAxLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2V0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAyLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAyLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NociwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hyZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMiwgLnN0cjMgPSAwLCAub2ZmM18xID0gNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NocmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMiwgLnN0cjMgPSAwLCAub2ZmM18xID0gNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtY2FsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1sYXVuY2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtcmVzdW1lLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXhvZmYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtcmVhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXdyaXRlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NnZHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vbml0b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDMsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMSwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA0LCAuc3RyMyA9IDEsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbXdhaXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDMsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMSwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2lkdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2xkdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc21zdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3RjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N0aSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3RvcywgLnJlcCA9IDEsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N0ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Rlc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdGVzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV90ZXN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91ZDJhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92ZXJyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92ZXJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV93YmludmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wcmVmZXRjaHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNobnRhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wcmVmZXRjaHQwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wcmVmZXRjaHQxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wcmVmZXRjaHQyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ub3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3dybXNyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94YWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAxMSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSA4LCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94Y2hnLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hjaGcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94bGF0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZW1tcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYW5kbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhbmRuLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1hZGR3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYWRkd2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9weG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHhvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZG5wcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wZXFwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcGx0cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBsZXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wdW5vcmRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG5lcXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbmx0cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBubGVwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG9yZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wZXFzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcGx0c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBsZXNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wdW5vcmRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG5lcXNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbmx0c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBubGVzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG9yZHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnhyc3RvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnhzYXZlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZG14Y3NyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdG14Y3NyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92dXBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92dXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnVwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnVwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRkdXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzbGR1cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhscHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZscHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZobHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92aGxwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3VucGNrbHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdW5wY2tscHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91bnBja2hwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3VucGNraHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c2hkdXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZocGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZsaHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTgsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92aHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bGhwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZocGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZhcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZhcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZhcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZhcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzaTJzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzaTJzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwaTJwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBpMnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bnRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRzZDJzaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRzczJzaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRwZDJwaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRwczJwaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBkMnBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0c2Qyc2ksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzczJzaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBzMnBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdWNvbWlzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Vjb21pc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jb21pc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jb21pc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9nZXRzZWMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm1za3BkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjYsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bXNrcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zcXJ0cGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zcXJ0c2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zcXJ0c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zcXJ0cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yc3FydHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcnNxcnRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjcHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNwcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kbnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kbnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3JwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29ycHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94b3JwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvcnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tdWxzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX211bHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbXVscGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tdWxwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNkMnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0c3Myc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwZDJwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBzMnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cHMyZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnR0cHMyZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRkcTJwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3Vic3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWJwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWluc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9taW5zcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21pbnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWlucHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kaXZzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RpdnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGl2cGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kaXZwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21heHNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWF4c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tYXhwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21heHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbHdkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbHdkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3Nzd2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrc3N3YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndGIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3RiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3RkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2t1c3diLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3Vzd2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2toYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2toYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tod2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tod2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2toZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2toZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrc3NkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2tzc2R3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbHFkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hxZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZHFhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZHF1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2h1Zmx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmaHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDE2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNodWZ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAxLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA4LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXFkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaGFkZHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaGFkZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaHN1YnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaHN1YnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkcWEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkcXUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bnRpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BpbnNydywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDE2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGluc3J3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMSwgLnN0cjMgPSAwLCAub2ZmM18xID0gOCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BleHRydywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMywgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wZXh0cncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDMsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDgsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHVmcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDE2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2h1ZnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA4LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkcTJxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjYsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92cTJkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI2LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Ztc2tiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjYsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdm1za2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VidXNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnVzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ1c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VidXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHVzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGR1c2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHVzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXh1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXh1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhdmdiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGF2Z2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Bhdmd3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGF2Z3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsaHV3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGh1dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxodywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxodywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm50ZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3Vic2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3Vic2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3Vic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3Vic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWluc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWluc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkc2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkc2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZGRxdSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsdWRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bHVkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzYWRidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzYWRidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21hc2ttb3ZkcXUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyNiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tYXNrbW92cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3ViZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2h1ZmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2h1ZmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZHN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhhZGRzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYWRkdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYWRkdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3VidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3VidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3ViZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3ViZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3Vic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waHN1YnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNpZ25iLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNpZ25iLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNpZ253LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNpZ253LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNpZ25kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNpZ25kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGhyc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsaHJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhYnNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFic2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhYnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFic2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWJzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhbGlnbnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFsaWduciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bWNsZWFyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXhvbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1wdHJsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1wdHJzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmFkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZmVuY2UsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21mZW5jZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2ZlbmNlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbGZsdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYmxlbmRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ibGVuZHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2JsZW5kdnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSA1LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYmxlbmR2cGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDUsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kcHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RwcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW5zZXJ0cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bnRkcWEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tcHNhZGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2t1c2R3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGJsZW5kdmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDUsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYmxlbmR3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcXEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXN0cmksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVzdHJtLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBpc3RyaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21waXN0cm0sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BobWlucG9zdXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waW5zcmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BpbnNyZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHVkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHV3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnVkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnV3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnN4YncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92c3hiZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3ZzeGJxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnN4d2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92c3h3cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3ZzeGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnp4YncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92enhiZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Z6eGJxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnp4d2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92enh3cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Z6eGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHRlc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3VuZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvdW5kcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm91bmRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3VuZHNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCit9Oworc3RhdGljIGNvbnN0IHVpbnQ4X3QgbWF0Y2hfZGF0YVtdID0KK3sKKyAgMHgxLCAweGZlLCAweDE0LAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZlLCAweDEwLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4MTIsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHg0LAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDAsCisgIDB4MTIsIDB4ODMsIDB4MzgsIDAsCisgIDB4MiwgMHhmZSwgMCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkMCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweGQwLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4MjQsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHgyMCwKKyAgMHgyLCAweGZlLCAweDgyLCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4MjAsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgyMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU0LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1NSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU1LCAwLCAwLAorICAweDEyLCAweDYzLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiZCwgMCwgMCwKKyAgMHgxMiwgMHhmLCAweGY4LCAweGM4LAorICAweDIzLCAweGYsIDB4YTMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiYSwgMHgzOCwgMHgyMCwKKyAgMHgyMywgMHhmLCAweGJiLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmEsIDB4MzgsIDB4MzgsCisgIDB4MjMsIDB4ZiwgMHhiMywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJhLCAweDM4LCAweDMwLAorICAweDIzLCAweGYsIDB4YWIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiYSwgMHgzOCwgMHgyOCwKKyAgMHgxMSwgMHhlOCwKKyAgMHgxMiwgMHhmZiwgMHgzOCwgMHgxMCwKKyAgMHgxMiwgMHhmZiwgMHgzOCwgMHgxOCwKKyAgMHgxMSwgMHg5OCwKKyAgMHgxMSwgMHg5OSwKKyAgMHgxMSwgMHhmOCwKKyAgMHgxMSwgMHhmYywKKyAgMHgxMSwgMHhmYSwKKyAgMHgyMiwgMHhmLCAweDUsCisgIDB4MjIsIDB4ZiwgMHg2LAorICAweDIyLCAweGYsIDB4NywKKyAgMHgyMiwgMHhmLCAweDM0LAorICAweDIyLCAweGYsIDB4MzUsCisgIDB4MTEsIDB4ZjUsCisgIDB4MTMsIDB4ZiwgMHhmMCwgMHg0MCwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDNjLAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MzgsCisgIDB4MTIsIDB4ODMsIDB4MzgsIDB4MzgsCisgIDB4MiwgMHhmZSwgMHgzOCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDNhLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4YzIsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGMyLCAwLCAwLAorICAweDIzLCAweGYsIDB4YzIsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHhhNiwKKyAgMHgxMywgMHhmLCAweGZlLCAweGIwLCAwLCAwLAorICAweDIzLCAweGYsIDB4YzcsIDB4MzgsIDB4OCwKKyAgMHgyMiwgMHhmLCAweGEyLAorICAweDM0LCAweGYzLCAweGYsIDB4ZTYsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHhlNiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGU2LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4ZmUsIDB4MzgsIDB4OCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDMwLAorICAweDIyLCAweGYsIDB4NzcsCisgIDB4MTEsIDB4YzgsCisgIDB4MjIsIDB4ZDksIDB4ZDAsCisgIDB4MjIsIDB4ZDksIDB4ZTAsCisgIDB4MjIsIDB4ZDksIDB4ZTEsCisgIDB4MjIsIDB4ZDksIDB4ZTQsCisgIDB4MjIsIDB4ZDksIDB4ZTUsCisgIDB4MjIsIDB4ZDksIDB4ZTgsCisgIDB4MjIsIDB4ZDksIDB4ZTksCisgIDB4MjIsIDB4ZDksIDB4ZWEsCisgIDB4MjIsIDB4ZDksIDB4ZWIsCisgIDB4MjIsIDB4ZDksIDB4ZWMsCisgIDB4MjIsIDB4ZDksIDB4ZWQsCisgIDB4MjIsIDB4ZDksIDB4ZWUsCisgIDB4MjIsIDB4ZDksIDB4ZjAsCisgIDB4MjIsIDB4ZDksIDB4ZjEsCisgIDB4MjIsIDB4ZDksIDB4ZjIsCisgIDB4MjIsIDB4ZDksIDB4ZjMsCisgIDB4MjIsIDB4ZDksIDB4ZjQsCisgIDB4MjIsIDB4ZDksIDB4ZjUsCisgIDB4MjIsIDB4ZDksIDB4ZjYsCisgIDB4MjIsIDB4ZDksIDB4ZjcsCisgIDB4MjIsIDB4ZDksIDB4ZjgsCisgIDB4MjIsIDB4ZDksIDB4ZjksCisgIDB4MjIsIDB4ZDksIDB4ZmEsCisgIDB4MjIsIDB4ZDksIDB4ZmIsCisgIDB4MjIsIDB4ZDksIDB4ZmMsCisgIDB4MjIsIDB4ZDksIDB4ZmQsCisgIDB4MjIsIDB4ZDksIDB4ZmUsCisgIDB4MjIsIDB4ZDksIDB4ZmYsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4YzAsCisgIDB4MTIsIDB4ZGMsIDB4ZjgsIDB4YzAsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhjOCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhjOCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDgsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4ZTAsCisgIDB4MTIsIDB4ZGMsIDB4ZjgsIDB4ZTAsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMHgyMCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhlOCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhlOCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDI4LAorICAweDEyLCAweGRkLCAweGY4LCAweGQwLAorICAweDIsIDB4ZmIsIDB4ZDksIDB4MzgsIDB4MTAsCisgIDB4MTIsIDB4ZGQsIDB4ZjgsIDB4ZDgsCisgIDB4MiwgMHhmYiwgMHhkOSwgMHgzOCwgMHgxOCwKKyAgMHgxMiwgMHhkOSwgMHgzOCwgMHgyMCwKKyAgMHgxMiwgMHhkOSwgMHgzOCwgMHgyOCwKKyAgMHgxMiwgMHhkOSwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkOSwgMHgzOCwgMHgzOCwKKyAgMHgxMiwgMHhkOSwgMHhmOCwgMHhjOCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhjMCwKKyAgMHgyLCAweGZiLCAweGRhLCAweDM4LCAwLAorICAweDEyLCAweGRhLCAweGY4LCAweGM4LAorICAweDEyLCAweGRlLCAweGY4LCAweGM4LAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDB4OCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhlMCwKKyAgMHgyLCAweGZiLCAweGRhLCAweDM4LCAweDIwLAorICAweDEyLCAweGRlLCAweGY4LCAweGU4LAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDB4MjgsCisgIDB4MjIsIDB4ZGYsIDB4ZTAsCisgIDB4MTIsIDB4ZGYsIDB4MzgsIDB4MjAsCisgIDB4MTIsIDB4ZGYsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGYsIDB4MzgsIDB4MzAsCisgIDB4MjIsIDB4ZDksIDB4ZTAsCisgIDB4MzMsIDB4OWIsIDB4ZGIsIDB4ZTIsCisgIDB4MzMsIDB4OWIsIDB4ZGIsIDB4ZTMsCisgIDB4MTEsIDB4OWIsCisgIDB4MjIsIDB4ZGIsIDB4ZTIsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4YzAsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4YzgsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4ZDAsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4ZDgsCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4YzAsCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4YzgsCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4ZDAsCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4ZDgsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4ZDAsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMHgxMCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhkOCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDE4LAorICAweDIyLCAweGRlLCAweGQ5LAorICAweDEyLCAweGRiLCAweGY4LCAweGYwLAorICAweDEyLCAweGRmLCAweGY4LCAweGYwLAorICAweDEyLCAweGRiLCAweGY4LCAweGU4LAorICAweDEyLCAweGRmLCAweGY4LCAweGU4LAorICAweDIyLCAweGQ5LCAweGZmLAorICAweDIyLCAweGQ5LCAweGY2LAorICAweDEyLCAweGQ4LCAweGY4LCAweGYwLAorICAweDEyLCAweGRjLCAweGY4LCAweGYwLAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4MzAsCisgIDB4MTIsIDB4ZGEsIDB4MzgsIDB4MzAsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGUsIDB4MzgsIDB4MzAsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4ZjgsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4ZjgsCisgIDB4MTIsIDB4ZGMsIDB4ZjgsIDB4ZjgsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMHgzOCwKKyAgMHgxMiwgMHhkYSwgMHgzOCwgMHgzOCwKKyAgMHgxMiwgMHhkZSwgMHgzOCwgMHgzOCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhmMCwKKyAgMHgxMiwgMHhkZCwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhkMCwKKyAgMHgyLCAweGZiLCAweGRhLCAweDM4LCAweDEwLAorICAweDEyLCAweGRhLCAweGY4LCAweGQ4LAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDB4MTgsCisgIDB4MTIsIDB4ZGYsIDB4MzgsIDAsCisgIDB4MTIsIDB4ZGIsIDB4MzgsIDAsCisgIDB4MTIsIDB4ZGYsIDB4MzgsIDB4MjgsCisgIDB4MjIsIDB4ZDksIDB4ZjcsCisgIDB4MjIsIDB4ZGIsIDB4ZTMsCisgIDB4MiwgMHhmYiwgMHhkYiwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZiLCAweGRiLCAweDM4LCAweDE4LAorICAweDEyLCAweGRmLCAweDM4LCAweDM4LAorICAweDIsIDB4ZmIsIDB4ZGIsIDB4MzgsIDB4OCwKKyAgMHgxMiwgMHhkZCwgMHgzOCwgMHg4LAorICAweDEyLCAweGRiLCAweDM4LCAweDI4LAorICAweDEyLCAweGRiLCAweDM4LCAweDM4LAorICAweDEyLCAweGQ5LCAweGY4LCAweGMwLAorICAweDIsIDB4ZmIsIDB4ZDksIDB4MzgsIDAsCisgIDB4MTIsIDB4ZGQsIDB4ZjgsIDB4ZTAsCisgIDB4MTIsIDB4ZGQsIDB4MzgsIDB4MjAsCisgIDB4MTIsIDB4ZGQsIDB4ZjgsIDB4ZTgsCisgIDB4MTIsIDB4ZGQsIDB4MzgsIDB4MzAsCisgIDB4MTIsIDB4ZGQsIDB4MzgsIDB4MzgsCisgIDB4MTEsIDB4ZjQsCisgIDB4MiwgMHhmZSwgMHhmNiwgMHgzOCwgMHgzOCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDI4LAorICAweDIzLCAweGYsIDB4YWYsIDAsIDAsCisgIDB4MiwgMHhmZCwgMHg2OSwgMCwgMCwKKyAgMHgxLCAweGZlLCAweGU0LAorICAweDEsIDB4ZmUsIDB4ZWMsCisgIDB4MiwgMHhmZSwgMHhmZSwgMHgzOCwgMCwKKyAgMHgxLCAweGZlLCAweDZjLAorICAweDExLCAweGNkLAorICAweDExLCAweGNjLAorICAweDIyLCAweGYsIDB4OCwKKyAgMHgzMywgMHhmLCAweDEsIDB4ZjgsCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAweDM4LAorICAweDExLCAweGNmLAorICAweDEsIDB4ZjAsIDB4NzAsCisgIDB4MTIsIDB4ZiwgMHhmMCwgMHg4MCwKKyAgMHgxMywgMHhmLCAweGYwLCAweDkwLCAweDM4LCAwLAorICAweDExLCAweGUzLAorICAweDExLCAweGViLAorICAweDExLCAweGU5LAorICAweDEyLCAweGZmLCAweDM4LCAweDIwLAorICAweDExLCAweGVhLAorICAweDEyLCAweGZmLCAweDM4LCAweDI4LAorICAweDExLCAweDlmLAorICAweDIzLCAweGYsIDB4MiwgMCwgMCwKKyAgMHgxMiwgMHg4ZCwgMCwgMCwKKyAgMHgxMSwgMHhjOSwKKyAgMHgyMywgMHhmLCAweGI0LCAwLCAwLAorICAweDIzLCAweGYsIDB4YjUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAweDEwLAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMHgxOCwKKyAgMHgyMywgMHhmLCAwLCAweDM4LCAweDEwLAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMHgzMCwKKyAgMHgxMSwgMHhmMCwKKyAgMHgxLCAweGZlLCAweGFjLAorICAweDExLCAweGUyLAorICAweDExLCAweGUxLAorICAweDExLCAweGUwLAorICAweDIzLCAweGYsIDB4MywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGIyLCAwLCAwLAorICAweDIzLCAweGYsIDAsIDB4MzgsIDB4MTgsCisgIDB4MiwgMHhmZSwgMHg4OCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDhhLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4YzYsIDB4MzgsIDAsCisgIDB4MSwgMHhmMCwgMHhiMCwKKyAgMHgxLCAweGZlLCAweGEwLAorICAweDEsIDB4ZmUsIDB4YTIsCisgIDB4MjMsIDB4ZiwgMHgyMCwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDIyLCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MjEsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgyMywgMHhjMCwgMHhjMCwKKyAgMHgxMiwgMHg4YywgMCwgMCwKKyAgMHgxMiwgMHg4ZSwgMCwgMCwKKyAgMHgxLCAweGZlLCAweGE0LAorICAweDIzLCAweGYsIDB4YmUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGI2LCAwLCAwLAorICAweDIzLCAweGYsIDB4YjcsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHhmNiwgMHgzOCwgMHgyMCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDE4LAorICAweDIyLCAweGYzLCAweDkwLAorICAweDExLCAweDkwLAorICAweDM0LCAweGYzLCAweGYsIDB4YjgsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHhmNiwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZlLCAweDgsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHhhLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4OCwKKyAgMHgyLCAweGZlLCAweDgyLCAweDM4LCAweDgsCisgIDB4MSwgMHhmZSwgMHhjLAorICAweDEsIDB4ZmUsIDB4ZTYsCisgIDB4MSwgMHhmZSwgMHhlZSwKKyAgMHgxLCAweGZlLCAweDZlLAorICAweDEyLCAweDhmLCAweGY4LCAweGMwLAorICAweDEyLCAweDhmLCAweDM4LCAwLAorICAweDEyLCAweGYsIDB4YzcsIDB4ODEsCisgIDB4MTEsIDB4OWQsCisgIDB4MTIsIDB4ZmYsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZmYsIDB4MzgsIDB4MzAsCisgIDB4MSwgMHhmOCwgMHg1MCwKKyAgMHgxLCAweGY4LCAweDU4LAorICAweDEsIDB4ZmQsIDB4NjgsCisgIDB4MSwgMHhlNywgMHg2LAorICAweDEyLCAweGYsIDB4YzcsIDB4ODAsCisgIDB4MTEsIDB4OWMsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAweDEwLAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMHgxOCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAweDE4LAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDB4MTgsCisgIDB4MjIsIDB4ZiwgMHgzMiwKKyAgMHgyMiwgMHhmLCAweDMzLAorICAweDIyLCAweGYsIDB4MzEsCisgIDB4MTEsIDB4YzMsCisgIDB4MTEsIDB4YzIsCisgIDB4MTEsIDB4Y2IsCisgIDB4MTEsIDB4Y2EsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAwLAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDAsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMHg4LAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDB4OCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAweDgsCisgIDB4MjIsIDB4ZiwgMHhhYSwKKyAgMHgxMSwgMHg5ZSwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDM4LAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDB4MzgsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMHgzOCwKKyAgMHgyLCAweGZlLCAweDE4LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4MWEsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHgxYywKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAweDE4LAorICAweDIsIDB4ZmUsIDB4ODIsIDB4MzgsIDB4MTgsCisgIDB4MSwgMHhmZSwgMHhhZSwKKyAgMHgxMywgMHhmLCAweGYwLCAweDkwLCAweDM4LCAwLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDB4MjAsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHgyMCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDB4MjgsCisgIDB4MjMsIDB4ZiwgMHhhNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGE1LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDB4MjgsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMHgyOCwKKyAgMHgyMywgMHhmLCAweGFjLCAwLCAwLAorICAweDIzLCAweGYsIDB4YWQsIDAsIDAsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGMxLAorICAweDMzLCAweGYsIDB4MSwgMHhjMiwKKyAgMHgzMywgMHhmLCAweDEsIDB4YzMsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGM0LAorICAweDIzLCAweGYsIDB4NzgsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3OSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDAsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGM4LAorICAweDMzLCAweGYsIDB4MSwgMHhjOSwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDB4OCwKKyAgMHgyMywgMHhmLCAwLCAweDM4LCAwLAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMHgyMCwKKyAgMHgxMSwgMHhmOSwKKyAgMHgxMSwgMHhmZCwKKyAgMHgxMSwgMHhmYiwKKyAgMHgxLCAweGZlLCAweGFhLAorICAweDIzLCAweGYsIDAsIDB4MzgsIDB4OCwKKyAgMHgyLCAweGZlLCAweDI4LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4MmEsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHgyYywKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAweDI4LAorICAweDIsIDB4ZmUsIDB4ODIsIDB4MzgsIDB4MjgsCisgIDB4MiwgMHhmZSwgMHg4NCwgMCwgMCwKKyAgMHgxLCAweGZlLCAweGE4LAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDAsCisgIDB4MjIsIDB4ZiwgMHhiLAorICAweDIzLCAweGYsIDAsIDB4MzgsIDB4MjAsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMHgyOCwKKyAgMHgyMiwgMHhmLCAweDksCisgIDB4MjMsIDB4ZiwgMHhkLCAweDM4LCAwLAorICAweDIzLCAweGYsIDB4ZCwgMHgzOCwgMHg4LAorICAweDIzLCAweGYsIDB4MTgsIDB4MzgsIDAsCisgIDB4MjMsIDB4ZiwgMHgxOCwgMHgzOCwgMHg4LAorICAweDIzLCAweGYsIDB4MTgsIDB4MzgsIDB4MTAsCisgIDB4MjMsIDB4ZiwgMHgxOCwgMHgzOCwgMHgxOCwKKyAgMHgyMywgMHhmLCAweDFmLCAwLCAwLAorICAweDIyLCAweGYsIDB4MzAsCisgIDB4MTMsIDB4ZiwgMHhmZSwgMHhjMCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDg2LCAwLCAwLAorICAweDEsIDB4ZjgsIDB4OTAsCisgIDB4MTEsIDB4ZDcsCisgIDB4MiwgMHhmZSwgMHgzMCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDMyLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4MzQsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHgzMCwKKyAgMHgyLCAweGZlLCAweDgyLCAweDM4LCAweDMwLAorICAweDIyLCAweGYsIDB4NzcsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkYiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGRiLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZGYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkZiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGY1LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlYiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGViLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZWYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU1LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTQsIDAsIDAsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMCwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDEsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHgyLAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4MywKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDQsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg1LAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NiwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDcsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMCwKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDEsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHgyLAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4MywKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDQsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg1LAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NiwKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDcsCisgIDB4MjMsIDB4ZiwgMHhhZSwgMHgzOCwgMHg4LAorICAweDIzLCAweGYsIDB4YWUsIDB4MzgsIDAsCisgIDB4MjMsIDB4ZiwgMHhhZSwgMHgzOCwgMHgxMCwKKyAgMHgyMywgMHhmLCAweGFlLCAweDM4LCAweDE4LAorICAweDM0LCAweGYyLCAweGYsIDB4MTAsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgxMCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDEwLCAwLCAwLAorICAweDIzLCAweGYsIDB4MTAsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgxMSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDExLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxMSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDEyLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MTIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxMiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDEyLCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MTIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxMywgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDEzLCAweGMwLCAweGMwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxMywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDE0LCAwLCAwLAorICAweDIzLCAweGYsIDB4MTQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxNSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDE1LCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MTYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxNiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDE2LCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MTYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxNywgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDE3LCAweGMwLCAweGMwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTcsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxNywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDI4LCAwLCAwLAorICAweDIzLCAweGYsIDB4MjgsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyOSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDI5LCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4MmEsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgyYSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDJhLCAwLCAwLAorICAweDIzLCAweGYsIDB4MmEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyYiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDJiLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4MmMsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgyYywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDJjLCAwLCAwLAorICAweDIzLCAweGYsIDB4MmMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyZCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDJkLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MmQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDJlLCAwLCAwLAorICAweDIzLCAweGYsIDB4MmUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDJmLCAwLCAwLAorICAweDIyLCAweGYsIDB4MzcsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1MCwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDUwLCAweGMwLCAweGMwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTEsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1MSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDUxLCAwLCAwLAorICAweDIzLCAweGYsIDB4NTEsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1MiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDUyLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NTMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1MywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU0LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1NSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU1LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU3LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTcsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1OCwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDU4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTgsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1OCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDU5LCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NTksIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1OSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU5LCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NWEsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1YSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDVhLCAwLCAwLAorICAweDIzLCAweGYsIDB4NWEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1YiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDViLCAwLCAwLAorICAweDIzLCAweGYsIDB4NWIsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1YywgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDVjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NWMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1YywgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDVkLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1ZCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDVkLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NWUsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1ZSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDVlLCAwLCAwLAorICAweDIzLCAweGYsIDB4NWUsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1ZiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDVmLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NWYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1ZiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDYwLCAwLCAwLAorICAweDIzLCAweGYsIDB4NjAsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2MSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDYxLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2MiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDYzLCAwLCAwLAorICAweDIzLCAweGYsIDB4NjMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2NCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDY0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2NSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDY2LCAwLCAwLAorICAweDIzLCAweGYsIDB4NjYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2NywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDY3LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjgsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2OCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDY5LCAwLCAwLAorICAweDIzLCAweGYsIDB4NjksIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2YSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDZhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NmIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2YiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDZjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NmQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2ZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDZlLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NmYsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg2ZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDZmLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzAsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg3MCwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDcwLCAwLCAwLAorICAweDIzLCAweGYsIDB4NzAsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3NCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDc0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3NSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDc2LCAwLCAwLAorICAweDIzLCAweGYsIDB4NzYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3YywgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDdjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4N2QsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg3ZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDdlLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4N2UsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3ZSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDdmLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4N2YsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3ZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGMzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4YzQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhjNCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGM1LCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4YzUsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhjNiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGM2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkMSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQyLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkMywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkNCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQ1LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkNiwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweGQ2LCAweGMwLCAweGMwLAorICAweDM0LCAweGYzLCAweGYsIDB4ZDYsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkNywgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweGQ3LCAweGMwLCAweGMwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDgsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkOCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQ5LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDksIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkYSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGRhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZGMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkYywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRkLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGRlLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTAsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlMCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGUxLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlMiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGUyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlMywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGU0LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlNSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGU1LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTcsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlNywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGU4LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTgsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlOSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGU5LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZWEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlYSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGVjLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZWMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlZCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGVkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZWUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlZSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweGYwLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmMSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGYyLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmMywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGYzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmNCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGY2LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmNywgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweGY3LCAweGMwLCAweGMwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjgsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmOCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGY5LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjksIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmYSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGZhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZmIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmYiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGZjLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZmMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmZCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGZkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZmUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmZSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAwLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4MSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDIsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHgyLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MywgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDMsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg0LCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4NCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDUsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHg1LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NiwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDYsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg3LCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4NywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDgsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHg4LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4OSwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDksIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHhhLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4YSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweGIsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHhiLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MWMsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHgxYywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDFkLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4MWQsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxZSwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDFlLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4ZiwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDNhLCAweGYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhjNywgMHgzOCwgMHgzMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweGM3LCAweDM4LCAweDMwLAorICAweDIzLCAweGYsIDB4YzcsIDB4MzgsIDB4MzAsCisgIDB4MjMsIDB4ZiwgMHhjNywgMHgzOCwgMHgzOCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcxLCAweGY4LCAweGQwLAorICAweDIzLCAweGYsIDB4NzEsIDB4ZjgsIDB4ZDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MSwgMHhmOCwgMHhlMCwKKyAgMHgyMywgMHhmLCAweDcxLCAweGY4LCAweGUwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzEsIDB4ZjgsIDB4ZjAsCisgIDB4MjMsIDB4ZiwgMHg3MSwgMHhmOCwgMHhmMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcyLCAweGY4LCAweGQwLAorICAweDIzLCAweGYsIDB4NzIsIDB4ZjgsIDB4ZDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MiwgMHhmOCwgMHhlMCwKKyAgMHgyMywgMHhmLCAweDcyLCAweGY4LCAweGUwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzIsIDB4ZjgsIDB4ZjAsCisgIDB4MjMsIDB4ZiwgMHg3MiwgMHhmOCwgMHhmMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDczLCAweGY4LCAweGQwLAorICAweDIzLCAweGYsIDB4NzMsIDB4ZjgsIDB4ZDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MywgMHhmOCwgMHhkOCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDczLCAweGY4LCAweGYwLAorICAweDIzLCAweGYsIDB4NzMsIDB4ZjgsIDB4ZjAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MywgMHhmOCwgMHhmOCwKKyAgMHgzMywgMHhmLCAweGFlLCAweGU4LAorICAweDMzLCAweGYsIDB4YWUsIDB4ZjAsCisgIDB4MzMsIDB4ZiwgMHhhZSwgMHhmOCwKKyAgMHgyMywgMHhmLCAweGFlLCAweDM4LCAweDM4LAorICAweDIzLCAweGYsIDB4ZiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweGMsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHhkLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MTQsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxNSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDQwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NDEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHgyMSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDJhLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NDIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyYiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDEwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4ZSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDI5LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NjEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg2MCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDYzLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NjIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzNywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDQxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4MjAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHgyMiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDNjLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4M2QsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzZiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDNlLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzgsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzOSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDNiLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4M2EsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyMCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDIxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyMywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDI0LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzMCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDMxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzMywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDM0LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyOCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDQwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MTcsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg4LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4OSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweGEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHhiLCAwLCAwLAorICAweDEsIDB4ZTcsIDB4NywKK307CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My8wMDAxLWVsZl9nZXRhcnN5bS1TaWxlbmNlLVdlcnJvci1tYXliZS11bmluaXRpYWxpemVkLWZhbHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My8wMDAxLWVsZl9nZXRhcnN5bS1TaWxlbmNlLVdlcnJvci1tYXliZS11bmluaXRpYWxpemVkLWZhbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc1NGMxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzLzAwMDEtZWxmX2dldGFyc3ltLVNpbGVuY2UtV2Vycm9yLW1heWJlLXVuaW5pdGlhbGl6ZWQtZmFscy5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDY2OGFjY2YzMjJmZDcxODVlMjczYmZkNTBiODQzMjBlNzFkOWRlNWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDEwIEFwciAyMDE1IDAwOjI5OjE4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGVsZl9nZXRhcnN5bTogU2lsZW5jZSAtV2Vycm9yPW1heWJlLXVuaW5pdGlhbGl6ZWQgZmFsc2UKKyBwb3NpdGl2ZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIGxpYmVsZi9lbGZfZ2V0YXJzeW0uYyB8IDkgKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmVsZi9lbGZfZ2V0YXJzeW0uYyBiL2xpYmVsZi9lbGZfZ2V0YXJzeW0uYworaW5kZXggZDBiYjI4YS4uMDg5NTRkMiAxMDA2NDQKKy0tLSBhL2xpYmVsZi9lbGZfZ2V0YXJzeW0uYworKysrIGIvbGliZWxmL2VsZl9nZXRhcnN5bS5jCitAQCAtMTY1LDggKzE2NSwxMyBAQCBlbGZfZ2V0YXJzeW0gKGVsZiwgcHRyKQorICAgICAgIGludCB3ID0gaW5kZXg2NF9wID8gOCA6IDQ7CisgCisgICAgICAgLyogV2UgaGF2ZSBhbiBhcmNoaXZlLiAgVGhlIGZpcnN0IHdvcmQgaW4gdGhlcmUgaXMgdGhlIG51bWJlciBvZgorLQkgZW50cmllcyBpbiB0aGUgdGFibGUuICAqLworLSAgICAgIHVpbnQ2NF90IG47CisrCSBlbnRyaWVzIGluIHRoZSB0YWJsZS4KKysJIFNldCB0byBTSVpFX01BWCBqdXN0IHRvIHNpbGVuY2UgLVdlcnJvcj1tYXliZS11bmluaXRpYWxpemVkCisrCSBlbGZfZ2V0YXJzeW0uYzoyOTA6OTogZXJyb3I6ICduJyBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkIGluIHRoaXMgZnVuY3Rpb24KKysJIFRoZSByZWFkX251bWJlcl9lbnRyaWVzIGZ1bmN0aW9uIGRvZXNuJ3QgaW5pdGlhbGl6ZSBuIG9ubHkgd2hlbiByZXR1cm5pbmcKKysJIC0xIHdoaWNoIGluIHR1cm4gZW5zdXJlcyB0byBqdW1wIG92ZXIgdXNhZ2Ugb2YgdGhpcyB1bmluaXRpYWxpemVkIHZhcmlhYmxlLgorKwkgKi8KKysgICAgICB1aW50NjRfdCBuID0gU0laRV9NQVg7CisgICAgICAgc2l6ZV90IG9mZiA9IGVsZi0+c3RhcnRfb2Zmc2V0ICsgU0FSTUFHICsgc2l6ZW9mIChzdHJ1Y3QgYXJfaGRyKTsKKyAgICAgICBpZiAocmVhZF9udW1iZXJfZW50cmllcyAoJm4sIGVsZiwgJm9mZiwgaW5kZXg2NF9wKSA8IDApCisgCXsKKy0tIAorMi4zLjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvMDAwMS1maXgtYS1zdGFjay11c2FnZS13YXJuaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvMDAwMS1maXgtYS1zdGFjay11c2FnZS13YXJuaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MjNiZjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My8wMDAxLWZpeC1hLXN0YWNrLXVzYWdlLXdhcm5pbmcucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorW1BBVENIXSBmaXggYSBzdGFjay11c2FnZSB3YXJuaW5nCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitub3QgdXNlIGEgdmFyaWFibGUgdG8gYXMgYSBhcnJheSBzaXplLCBvdGhlcndpc2UgdGhlIHdhcm5pbmcgdG8gZXJyb3IgdGhhdAorc3RhY2sgdXNhZ2UgbWlnaHQgYmUgdW5ib3VuZGVkIFstV2Vycm9yPXN0YWNrLXVzYWdlPV0gd2lsbCBoYXBwZW4KKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgYmFja2VuZHMvcHBjX2luaXRyZWcuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2JhY2tlbmRzL3BwY19pbml0cmVnLmMgYi9iYWNrZW5kcy9wcGNfaW5pdHJlZy5jCitpbmRleCA2NGY1Mzc5Li41MmRkZTNlIDEwMDY0NAorLS0tIGEvYmFja2VuZHMvcHBjX2luaXRyZWcuYworKysrIGIvYmFja2VuZHMvcHBjX2luaXRyZWcuYworQEAgLTkzLDcgKzkzLDcgQEAgcHBjX3NldF9pbml0aWFsX3JlZ2lzdGVyc190aWQgKHBpZF90IHRpZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisgCXJldHVybiBmYWxzZTsKKyAgICAgfQorICAgY29uc3Qgc2l6ZV90IGdwcnMgPSBzaXplb2YgKHVzZXJfcmVncy5yLmdwcikgLyBzaXplb2YgKCp1c2VyX3JlZ3Muci5ncHIpOworLSAgRHdhcmZfV29yZCBkd2FyZl9yZWdzW2dwcnNdOworKyAgRHdhcmZfV29yZCBkd2FyZl9yZWdzW3NpemVvZiAodXNlcl9yZWdzLnIuZ3ByKSAvIHNpemVvZiAoKnVzZXJfcmVncy5yLmdwcildOworICAgZm9yICh1bnNpZ25lZCBncHIgPSAwOyBncHIgPCBncHJzOyBncHIrKykKKyAgICAgZHdhcmZfcmVnc1tncHJdID0gdXNlcl9yZWdzLnIuZ3ByW2dwcl07CisgICBpZiAoISBzZXRmdW5jICgwLCBncHJzLCBkd2FyZl9yZWdzLCBhcmcpKQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My8wMDAxLXJlbW92ZS10aGUtdW5uZWVkLWNoZWNraW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvMDAwMS1yZW1vdmUtdGhlLXVubmVlZC1jaGVja2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmU5MmQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvMDAwMS1yZW1vdmUtdGhlLXVubmVlZC1jaGVja2luZy5wYXRjaApAQCAtMCwwICsxLDM4IEBACitEaXNhYmxlIHRoZSB0ZXN0IHRvIGNvbnZlcnQgZXVjLWpwCisKK1JlbW92ZSB0aGUgdGVzdCAiVGVzdCBhZ2FpbnN0IEhQLVVYIDExLjExIGJ1ZzoKK05vIGNvbnZlcnRlciBmcm9tIEVVQy1KUCB0byBVVEYtOCBpcyBwcm92aWRlZCIKK3NpbmNlIHdlIGRvbid0IHN1cHBvcnQgSFAtVVggYW5kIGlmIHRoZSBldWMtanAgaXMgbm90CitpbnN0YWxsZWQgb24gdGhlIGhvc3QsIHRoZSBkZXBlbmRlbmNlIHdpbGwgYmUgYnVpbHQgd2l0aG91dAoraWNvbnYgc3VwcG9ydCBhbmQgd2lsbCBjYXVzZSBndWlsZC1uYXRpdmUgYnVpbGRpbmcgZmFpbC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgbTQvaWNvbnYubTQgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbTQvaWNvbnYubTQgYi9tNC9pY29udi5tNAoraW5kZXggYTUwMzY0Ni4uMjk5ZjFlYiAxMDA2NDQKKy0tLSBhL200L2ljb252Lm00CisrKysgYi9tNC9pY29udi5tNAorQEAgLTE1OSw2ICsxNTksNyBAQCBpbnQgbWFpbiAoKQorICAgICAgIH0KKyAgIH0KKyAjZW5kaWYKKysjaWYgMAorICAgLyogVGVzdCBhZ2FpbnN0IEhQLVVYIDExLjExIGJ1ZzogTm8gY29udmVydGVyIGZyb20gRVVDLUpQIHRvIFVURi04IGlzCisgICAgICBwcm92aWRlZC4gICovCisgICBpZiAoLyogVHJ5IHN0YW5kYXJkaXplZCBuYW1lcy4gICovCitAQCAtMTcwLDYgKzE3MSw3IEBAIGludCBtYWluICgpCisgICAgICAgLyogVHJ5IEhQLVVYIG5hbWVzLiAgKi8KKyAgICAgICAmJiBpY29udl9vcGVuICgidXRmOCIsICJldWNKUCIpID09IChpY29udl90KSgtMSkpCisgICAgIHJlc3VsdCB8PSAxNjsKKysjZW5kaWYKKyAgIHJldHVybiByZXN1bHQ7CisgfV1dKV0sCisgICAgICAgICBbYW1fY3ZfZnVuY19pY29udl93b3Jrcz15ZXNdLAorLS0gCisyLjAuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9hcm1fYmFja2VuZC5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvYXJtX2JhY2tlbmQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTdjNGU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvYXJtX2JhY2tlbmQuZGlmZgpAQCAtMCwwICsxLDYyNSBAQAorRnJvbSAwZGIxNjg3ZWVlMGI0ZDE2Y2NiYzQwZGI1YTA2YjU3NGZjYTY2MTRjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAxNCBOb3YgMjAxNCAxNToyNTo0MiArMDgwMAorU3ViamVjdDogW1BBVENIXSBSZWJhc2UgYXJtX2JhY2tlbmQuZGlmZiBmcm9tIDAuMTU5IHRvIDAuMTYwCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGJhY2tlbmRzL2FybV9pbml0LmMgICAgICAgICAgICAgICAgIHwgIDE4ICsrKystCisgYmFja2VuZHMvYXJtX3JlZ3MuYyAgICAgICAgICAgICAgICAgfCAxMzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgYmFja2VuZHMvYXJtX3JldHZhbC5jICAgICAgICAgICAgICAgfCAgNDQgKysrKysrKysrKystCisgYmFja2VuZHMvbGliZWJsX2FybS5oICAgICAgICAgICAgICAgfCAgIDkgKysrCisgbGliZWxmL2VsZi5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTEgKysrCisgdGVzdHMvcnVuLWFkZHJjZmkuc2ggICAgICAgICAgICAgICAgfCAgOTMgKysrKysrKysrKysrKysrKysrKysrKysrLQorIHRlc3RzL3J1bi1hbGxyZWdzLnNoICAgICAgICAgICAgICAgIHwgIDk1ICsrKysrKysrKysrKysrKysrKysrKysrKystCisgdGVzdHMvcnVuLXJlYWRlbGYtbWl4ZWQtY29yZW5vdGUuc2ggfCAgMTEgKystCisgOCBmaWxlcyBjaGFuZ2VkLCA0MDEgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGJhY2tlbmRzL2xpYmVibF9hcm0uaAorCitkaWZmIC0tZ2l0IGEvYmFja2VuZHMvYXJtX2luaXQuYyBiL2JhY2tlbmRzL2FybV9pbml0LmMKK2luZGV4IDMyODNjOTcuLjhiNTdkM2YgMTAwNjQ0CistLS0gYS9iYWNrZW5kcy9hcm1faW5pdC5jCisrKysgYi9iYWNrZW5kcy9hcm1faW5pdC5jCitAQCAtMzUsMjEgKzM1LDMyIEBACisgI2RlZmluZSBSRUxPQ19QUkVGSVgJUl9BUk1fCisgI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKyAKKysjaW5jbHVkZSAibGliZWJsX2FybS5oIgorKworIC8qIFRoaXMgZGVmaW5lcyB0aGUgY29tbW9uIHJlbG9jIGhvb2tzIGJhc2VkIG9uIGFybV9yZWxvYy5kZWYuICAqLworICNpbmNsdWRlICJjb21tb24tcmVsb2MuYyIKKyAKKyAKKyBjb25zdCBjaGFyICoKKyBhcm1faW5pdCAoZWxmLCBtYWNoaW5lLCBlaCwgZWhsZW4pCistICAgICBFbGYgKmVsZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBFbGYgKmVsZjsKKyAgICAgIEdFbGZfSGFsZiBtYWNoaW5lIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKyAgICAgIEVibCAqZWg7CisgICAgICBzaXplX3QgZWhsZW47CisgeworKyAgaW50IHNvZnRfZmxvYXQgPSAwOworKworICAgLyogQ2hlY2sgd2hldGhlciB0aGUgRWxmX0JIIG9iamVjdCBoYXMgYSBzdWZmaWNlbnQgc2l6ZS4gICovCisgICBpZiAoZWhsZW4gPCBzaXplb2YgKEVibCkpCisgICAgIHJldHVybiBOVUxMOworIAorKyAgaWYgKGVsZikgeworKyAgICBHRWxmX0VoZHIgZWhkcl9tZW07CisrICAgIEdFbGZfRWhkciAqZWhkciA9IGdlbGZfZ2V0ZWhkciAoZWxmLCAmZWhkcl9tZW0pOworKyAgICBpZiAoZWhkciAmJiAoZWhkci0+ZV9mbGFncyAmIEVGX0FSTV9TT0ZUX0ZMT0FUKSkKKysgICAgICBzb2Z0X2Zsb2F0ID0gMTsKKysgIH0KKysKKyAgIC8qIFdlIGhhbmRsZSBpdC4gICovCisgICBlaC0+bmFtZSA9ICJBUk0iOworICAgYXJtX2luaXRfcmVsb2MgKGVoKTsKK0BAIC02MSw3ICs3MiwxMCBAQCBhcm1faW5pdCAoZWxmLCBtYWNoaW5lLCBlaCwgZWhsZW4pCisgICBIT09LIChlaCwgY29yZV9ub3RlKTsKKyAgIEhPT0sgKGVoLCBhdXh2X2luZm8pOworICAgSE9PSyAoZWgsIGNoZWNrX29iamVjdF9hdHRyaWJ1dGUpOworLSAgSE9PSyAoZWgsIHJldHVybl92YWx1ZV9sb2NhdGlvbik7CisrICBpZiAoc29mdF9mbG9hdCkKKysgICAgZWgtPnJldHVybl92YWx1ZV9sb2NhdGlvbiA9IGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fc29mdDsKKysgIGVsc2UKKysgICAgZWgtPnJldHVybl92YWx1ZV9sb2NhdGlvbiA9IGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25faGFyZDsKKyAgIEhPT0sgKGVoLCBhYmlfY2ZpKTsKKyAgIEhPT0sgKGVoLCBjaGVja19yZWxvY190YXJnZXRfdHlwZSk7CisgCitkaWZmIC0tZ2l0IGEvYmFja2VuZHMvYXJtX3JlZ3MuYyBiL2JhY2tlbmRzL2FybV9yZWdzLmMKK2luZGV4IDIxYzVhZDMuLjRlZTEwMzkgMTAwNjQ0CistLS0gYS9iYWNrZW5kcy9hcm1fcmVncy5jCisrKysgYi9iYWNrZW5kcy9hcm1fcmVncy5jCitAQCAtMzEsNiArMzEsNyBAQAorICNlbmRpZgorIAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8ZHdhcmYuaD4KKyAKKyAjZGVmaW5lIEJBQ0tFTkQgYXJtXworQEAgLTc2LDYgKzc3LDkgQEAgYXJtX3JlZ2lzdGVyX2luZm8gKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKyAgICAgICBicmVhazsKKyAKKyAgICAgY2FzZSAxNiArIDAgLi4uIDE2ICsgNzoKKysgICAgICAvKiBBQURXQVJGIHNheXMgdGhhdCB0aGVyZSBhcmUgbm8gcmVnaXN0ZXJzIGluIHRoYXQgcmFuZ2UsCisrICAgICAgICogYnV0IGdjYyBtYXBzIEZQQSByZWdpc3RlcnMgaGVyZQorKyAgICAgICAqLworICAgICAgIHJlZ25vICs9IDk2IC0gMTY7CisgICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyAgICAgY2FzZSA5NiArIDAgLi4uIDk2ICsgNzoKK0BAIC04NywxMSArOTEsMTM5IEBAIGFybV9yZWdpc3Rlcl9pbmZvIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisgICAgICAgbmFtZWxlbiA9IDI7CisgICAgICAgYnJlYWs7CisgCisrICAgIGNhc2UgNjQgKyAwIC4uLiA2NCArIDk6CisrICAgICAgKnNldG5hbWUgPSAiVkZQIjsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgICp0eXBlID0gRFdfQVRFX2Zsb2F0OworKyAgICAgIG5hbWVbMF0gPSAncyc7CisrICAgICAgbmFtZVsxXSA9IHJlZ25vIC0gNjQgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgNjQgKyAxMCAuLi4gNjQgKyAzMToKKysgICAgICAqc2V0bmFtZSA9ICJWRlAiOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfZmxvYXQ7CisrICAgICAgbmFtZVswXSA9ICdzJzsKKysgICAgICBuYW1lWzFdID0gKHJlZ25vIC0gNjQpIC8gMTAgKyAnMCc7CisrICAgICAgbmFtZVsyXSA9IChyZWdubyAtIDY0KSAlIDEwICsgJzAnOworKyAgICAgIG5hbWVsZW4gPSAzOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIDEwNCArIDAgLi4uIDEwNCArIDc6CisrICAgICAgLyogWFhYIFRPRE86CisrICAgICAgICogVGhpcyBjYW4gYmUgZWl0aGVyIGludGVsIHdpcmVsZXNzIE1NWCBnZW5lcmFsIHB1cnBvc2UvY29udHJvbAorKyAgICAgICAqIHJlZ2lzdGVycyBvciB4c2NhbGUgYWNjdW11bGF0b3IsIHdoaWNoIGhhdmUgZGlmZmVyZW50IHVzYWdlLgorKyAgICAgICAqIFdlIG9ubHkgaGF2ZSB0aGUgaW50ZWwgd2lyZWxlc3MgTU1YIGhlcmUgbm93LgorKyAgICAgICAqIFRoZSBuYW1lIG5lZWRzIHRvIGJlIGNoYW5nZWQgZm9yIHRoZSB4c2NhbGUgYWNjdW11bGF0b3IgdG9vLiAqLworKyAgICAgICpzZXRuYW1lID0gIk1NWCI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICBtZW1jcHkobmFtZSwgIndjZ3IiLCA0KTsKKysgICAgICBuYW1lWzRdID0gcmVnbm8gLSAxMDQgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDU7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgMTEyICsgMCAuLi4gMTEyICsgOToKKysgICAgICAqc2V0bmFtZSA9ICJNTVgiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgICpiaXRzID0gNjQ7CisrICAgICAgbmFtZVswXSA9ICd3JzsKKysgICAgICBuYW1lWzFdID0gJ3InOworKyAgICAgIG5hbWVbMl0gPSByZWdubyAtIDExMiArICcwJzsKKysgICAgICBuYW1lbGVuID0gMzsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAxMTIgKyAxMCAuLi4gMTEyICsgMTU6CisrICAgICAgKnNldG5hbWUgPSAiTU1YIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICAqYml0cyA9IDY0OworKyAgICAgIG5hbWVbMF0gPSAndyc7CisrICAgICAgbmFtZVsxXSA9ICdyJzsKKysgICAgICBuYW1lWzJdID0gJzEnOworKyAgICAgIG5hbWVbM10gPSByZWdubyAtIDExMiAtIDEwICsgJzAnOworKyAgICAgIG5hbWVsZW4gPSA0OworKyAgICAgIGJyZWFrOworKworICAgICBjYXNlIDEyODoKKysgICAgICAqc2V0bmFtZSA9ICJzdGF0ZSI7CisgICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisgICAgICAgcmV0dXJuIHN0cGNweSAobmFtZSwgInNwc3IiKSArIDEgLSBuYW1lOworIAorKyAgICBjYXNlIDEyOToKKysgICAgICAqc2V0bmFtZSA9ICJzdGF0ZSI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgcmV0dXJuIHN0cGNweShuYW1lLCAic3Bzcl9maXEiKSArIDEgLSBuYW1lOworKworKyAgICBjYXNlIDEzMDoKKysgICAgICAqc2V0bmFtZSA9ICJzdGF0ZSI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgcmV0dXJuIHN0cGNweShuYW1lLCAic3Bzcl9pcnEiKSArIDEgLSBuYW1lOworKworKyAgICBjYXNlIDEzMToKKysgICAgICAqc2V0bmFtZSA9ICJzdGF0ZSI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgcmV0dXJuIHN0cGNweShuYW1lLCAic3Bzcl9hYnQiKSArIDEgLSBuYW1lOworKworKyAgICBjYXNlIDEzMjoKKysgICAgICAqc2V0bmFtZSA9ICJzdGF0ZSI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgcmV0dXJuIHN0cGNweShuYW1lLCAic3Bzcl91bmQiKSArIDEgLSBuYW1lOworKworKyAgICBjYXNlIDEzMzoKKysgICAgICAqc2V0bmFtZSA9ICJzdGF0ZSI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgcmV0dXJuIHN0cGNweShuYW1lLCAic3Bzcl9zdmMiKSArIDEgLSBuYW1lOworKworKyAgICBjYXNlIDE0NCAuLi4gMTUwOgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfdXNyIiwgcmVnbm8gLSAxNDQgKyA4KSArIDE7CisrCisrICAgIGNhc2UgMTUxIC4uLiAxNTc6CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgcmV0dXJuIHNwcmludGYobmFtZSwgInIlZF9maXEiLCByZWdubyAtIDE1MSArIDgpICsgMTsKKysKKysgICAgY2FzZSAxNTggLi4uIDE1OToKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICByZXR1cm4gc3ByaW50ZihuYW1lLCAiciVkX2lycSIsIHJlZ25vIC0gMTU4ICsgMTMpICsgMTsKKysKKysgICAgY2FzZSAxNjAgLi4uIDE2MToKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICByZXR1cm4gc3ByaW50ZihuYW1lLCAiciVkX2FidCIsIHJlZ25vIC0gMTYwICsgMTMpICsgMTsKKysKKysgICAgY2FzZSAxNjIgLi4uIDE2MzoKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICByZXR1cm4gc3ByaW50ZihuYW1lLCAiciVkX3VuZCIsIHJlZ25vIC0gMTYyICsgMTMpICsgMTsKKysKKysgICAgY2FzZSAxNjQgLi4uIDE2NToKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICByZXR1cm4gc3ByaW50ZihuYW1lLCAiciVkX3N2YyIsIHJlZ25vIC0gMTY0ICsgMTMpICsgMTsKKysKKysgICAgY2FzZSAxOTIgLi4uIDE5OToKKysgICAgICpzZXRuYW1lID0gIk1NWCI7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICBuYW1lWzBdID0gJ3cnOworKyAgICAgIG5hbWVbMV0gPSAnYyc7CisrICAgICAgbmFtZVsyXSA9IHJlZ25vIC0gMTkyICsgJzAnOworKyAgICAgIG5hbWVsZW4gPSAzOworKyAgICAgIGJyZWFrOworKworICAgICBjYXNlIDI1NiArIDAgLi4uIDI1NiArIDk6CisrICAgICAgLyogWFhYIFRPRE86IE5lb24gYWxzbyB1c2VzIHRob3NlIHJlZ2lzdGVycyBhbmQgY2FuIGNvbnRhaW4KKysgICAgICAgKiBib3RoIGZsb2F0IGFuZCBpbnRlZ2VycyAqLworICAgICAgICpzZXRuYW1lID0gIlZGUCI7CisgICAgICAgKnR5cGUgPSBEV19BVEVfZmxvYXQ7CisgICAgICAgKmJpdHMgPSA2NDsKK2RpZmYgLS1naXQgYS9iYWNrZW5kcy9hcm1fcmV0dmFsLmMgYi9iYWNrZW5kcy9hcm1fcmV0dmFsLmMKK2luZGV4IDdhY2VkNzQuLjA1MjEzMmUgMTAwNjQ0CistLS0gYS9iYWNrZW5kcy9hcm1fcmV0dmFsLmMKKysrKyBiL2JhY2tlbmRzL2FybV9yZXR2YWwuYworQEAgLTQ4LDYgKzQ4LDEzIEBAIHN0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfaW50cmVnW10gPQorICNkZWZpbmUgbmxvY19pbnRyZWcJMQorICNkZWZpbmUgbmxvY19pbnRyZWdzKG4pCSgyICogKG4pKQorIAorKy8qIGYxICAqLyAvKiBYWFggVE9ETzogZjAgY2FuIGFsc28gaGF2ZSBudW1iZXIgOTYgaWYgcHJvZ3JhbSB3YXMgY29tcGlsZWQgd2l0aCAtbWFiaT1hYXBjcyAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfZnByZWdbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcxNiB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfZnByZWcgIDEKKysKKyAvKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RydWN0dXJlIGFuZCBpcyBhY3R1YWxseSBzdG9yZWQgaW4gc3RhY2sgc3BhY2UKKyAgICBwYXNzZWQgaW4gYSBoaWRkZW4gYXJndW1lbnQgYnkgdGhlIGNhbGxlci4gIEJ1dCwgdGhlIGNvbXBpbGVyCisgICAgaGVscGZ1bGx5IHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhhdCBzcGFjZSBpbiByMC4gICovCitAQCAtNTgsOCArNjUsOSBAQCBzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2FnZ3JlZ2F0ZVtdID0KKyAjZGVmaW5lIG5sb2NfYWdncmVnYXRlIDEKKyAKKyAKKy1pbnQKKy1hcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisrc3RhdGljIGludAorK2FybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3AsCisrCQkgICAgICAgICAgICBpbnQgc29mdF9mbG9hdCkKKyB7CisgICAvKiBTdGFydCB3aXRoIHRoZSBmdW5jdGlvbidzIHR5cGUsIGFuZCBnZXQgdGhlIERXX0FUX3R5cGUgYXR0cmlidXRlLAorICAgICAgd2hpY2ggaXMgdGhlIHR5cGUgb2YgdGhlIHJldHVybiB2YWx1ZS4gICovCitAQCAtOTgsMTQgKzEwNiwzMSBAQCBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisgCSAgICBlbHNlCisgCSAgICAgIHJldHVybiAtMTsKKyAJICB9CisrCWlmICh0YWcgPT0gRFdfVEFHX2Jhc2VfdHlwZSkKKysJeworKwkgIER3YXJmX1dvcmQgZW5jb2Rpbmc7CisrCSAgaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2VuY29kaW5nLAorKwkgICAgICAgICAgICAgICAgICAgICAgICZhdHRyX21lbSksICZlbmNvZGluZykgIT0gMCkKKysJICAgIHJldHVybiAtMTsKKysKKysJICBpZiAoKGVuY29kaW5nID09IERXX0FURV9mbG9hdCkgJiYgIXNvZnRfZmxvYXQpCisrCSAgICB7CisrCSAgICAgICpsb2NwID0gbG9jX2ZwcmVnOworKwkgICAgICBpZiAoc2l6ZSA8PSA4KQorKwkJcmV0dXJuIG5sb2NfZnByZWc7CisrCSAgICAgIGdvdG8gYWdncmVnYXRlOworKwkgICAgfQorKwl9CisgCWlmIChzaXplIDw9IDE2KQorIAkgIHsKKyAJICBpbnRyZWc6CisgCSAgICAqbG9jcCA9IGxvY19pbnRyZWc7CisgCSAgICByZXR1cm4gc2l6ZSA8PSA0ID8gbmxvY19pbnRyZWcgOiBubG9jX2ludHJlZ3MgKChzaXplICsgMykgLyA0KTsKKyAJICB9CisrCSAgLyogZmFsbCB0aHJvdWdoLiAqLworIAorICAgICAgIGFnZ3JlZ2F0ZToKKysJLyogWFhYIFRPRE8gc29tZXRpbWVzIGFnZ3JlZ2F0ZXMgYXJlIHJldHVybmVkIGluIHIwICgtbWFiaT1hYXBjcykgKi8KKyAJKmxvY3AgPSBsb2NfYWdncmVnYXRlOworIAlyZXR1cm4gbmxvY19hZ2dyZWdhdGU7CisgICAgICAgfQorQEAgLTEyNSwzICsxNTAsMTggQEAgYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbiAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorICAgICAgRFdBUkYgYW5kIG1pZ2h0IGJlIHZhbGlkLiAgKi8KKyAgIHJldHVybiAtMjsKKyB9CisrCisrLyogcmV0dXJuIGxvY2F0aW9uIGZvciAtbWFiaT1hcGNzLWdudSAtbXNvZnQtZmxvYXQgKi8KKytpbnQKKythcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX3NvZnQgKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyt7CisrICAgcmV0dXJuIGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChmdW5jdHlwZWRpZSwgbG9jcCwgMSk7CisrfQorKworKy8qIHJldHVybiBsb2NhdGlvbiBmb3IgLW1hYmk9YXBjcy1nbnUgLW1oYXJkLWZsb2F0IChjdXJyZW50IGRlZmF1bHQpICovCisraW50CisrYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl9oYXJkIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisreworKyAgIHJldHVybiBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXyAoZnVuY3R5cGVkaWUsIGxvY3AsIDApOworK30KKysKK2RpZmYgLS1naXQgYS9iYWNrZW5kcy9saWJlYmxfYXJtLmggYi9iYWNrZW5kcy9saWJlYmxfYXJtLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jMDA3NzBjCistLS0gL2Rldi9udWxsCisrKysgYi9iYWNrZW5kcy9saWJlYmxfYXJtLmgKK0BAIC0wLDAgKzEsOSBAQAorKyNpZm5kZWYgX0xJQkVCTF9BUk1fSAorKyNkZWZpbmUgX0xJQkVCTF9BUk1fSCAxCisrCisrI2luY2x1ZGUgPGxpYmR3Lmg+CisrCisrZXh0ZXJuIGludCBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX3NvZnQoRHdhcmZfRGllICosIGNvbnN0IER3YXJmX09wICoqbG9jcCk7CisrZXh0ZXJuIGludCBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX2hhcmQoRHdhcmZfRGllICosIGNvbnN0IER3YXJmX09wICoqbG9jcCk7CisrCisrI2VuZGlmCitkaWZmIC0tZ2l0IGEvbGliZWxmL2VsZi5oIGIvbGliZWxmL2VsZi5oCitpbmRleCBhM2NjZTNlLi4wODkxNjc0IDEwMDY0NAorLS0tIGEvbGliZWxmL2VsZi5oCisrKysgYi9saWJlbGYvZWxmLmgKK0BAIC0yMzQ2LDYgKzIzNDYsOSBAQCB0eXBlZGVmIEVsZjMyX0FkZHIgRWxmMzJfQ29uZmxpY3Q7CisgI2RlZmluZSBFRl9BUk1fRUFCSV9WRVI0CTB4MDQwMDAwMDAKKyAjZGVmaW5lIEVGX0FSTV9FQUJJX1ZFUjUJMHgwNTAwMDAwMAorIAorKy8qIEVJX09TQUJJIHZhbHVlcyAqLworKyNkZWZpbmUgRUxGT1NBQklfQVJNX0FFQUJJICAgIDY0ICAgICAgLyogQ29udGFpbnMgc3ltYm9sIHZlcnNpb25pbmcuICovCisrCisgLyogQWRkaXRpb25hbCBzeW1ib2wgdHlwZXMgZm9yIFRodW1iLiAgKi8KKyAjZGVmaW5lIFNUVF9BUk1fVEZVTkMJCVNUVF9MT1BST0MgLyogQSBUaHVtYiBmdW5jdGlvbi4gICovCisgI2RlZmluZSBTVFRfQVJNXzE2QklUCQlTVFRfSElQUk9DIC8qIEEgVGh1bWIgbGFiZWwuICAqLworQEAgLTIzNjMsMTIgKzIzNjYsMTkgQEAgdHlwZWRlZiBFbGYzMl9BZGRyIEVsZjMyX0NvbmZsaWN0OworIAorIC8qIFByb2Nlc3NvciBzcGVjaWZpYyB2YWx1ZXMgZm9yIHRoZSBQaGRyIHBfdHlwZSBmaWVsZC4gICovCisgI2RlZmluZSBQVF9BUk1fRVhJRFgJCShQVF9MT1BST0MgKyAxKQkvKiBBUk0gdW53aW5kIHNlZ21lbnQuICAqLworKyNkZWZpbmUgUFRfQVJNX1VOV0lORAkJUFRfQVJNX0VYSURYCisgCisgLyogUHJvY2Vzc29yIHNwZWNpZmljIHZhbHVlcyBmb3IgdGhlIFNoZHIgc2hfdHlwZSBmaWVsZC4gICovCisgI2RlZmluZSBTSFRfQVJNX0VYSURYCQkoU0hUX0xPUFJPQyArIDEpIC8qIEFSTSB1bndpbmQgc2VjdGlvbi4gICovCisgI2RlZmluZSBTSFRfQVJNX1BSRUVNUFRNQVAJKFNIVF9MT1BST0MgKyAyKSAvKiBQcmVlbXB0aW9uIGRldGFpbHMuICAqLworICNkZWZpbmUgU0hUX0FSTV9BVFRSSUJVVEVTCShTSFRfTE9QUk9DICsgMykgLyogQVJNIGF0dHJpYnV0ZXMgc2VjdGlvbi4gICovCisgCisrLyogUHJvY2Vzc29yIHNwZWNpZmljIHZhbHVlcyBmb3IgdGhlIER5biBkX3RhZyBmaWVsZC4gICovCisrI2RlZmluZSBEVF9BUk1fUkVTRVJWRUQxCShEVF9MT1BST0MgKyAwKQorKyNkZWZpbmUgRFRfQVJNX1NZTVRBQlNaCQkoRFRfTE9QUk9DICsgMSkKKysjZGVmaW5lIERUX0FSTV9QUkVFTVRNQUIJKERUX0xPUFJPQyArIDIpCisrI2RlZmluZSBEVF9BUk1fUkVTRVJWRUQyCShEVF9MT1BST0MgKyAzKQorKyNkZWZpbmUgRFRfQVJNX05VTQkJNAorIAorIC8qIEFBcmNoNjQgcmVsb2NzLiAgKi8KKyAKK0BAIC0yNjQ3LDYgKzI2NTcsNyBAQCB0eXBlZGVmIEVsZjMyX0FkZHIgRWxmMzJfQ29uZmxpY3Q7CisgCQkJCQkgICBUTFMgYmxvY2sgKExEUiwgU1RSKS4gICovCisgI2RlZmluZSBSX0FSTV9UTFNfSUUxMkdQCTExMQkvKiAxMiBiaXQgR09UIGVudHJ5IHJlbGF0aXZlCisgCQkJCQkgICB0byBHT1Qgb3JpZ2luIChMRFIpLiAgKi8KKysvKiAxMTIgLSAxMjcgcHJpdmF0ZSByYW5nZSAqLworICNkZWZpbmUgUl9BUk1fTUVfVE9PCQkxMjgJLyogT2Jzb2xldGUuICAqLworICNkZWZpbmUgUl9BUk1fVEhNX1RMU19ERVNDU0VRCTEyOQorICNkZWZpbmUgUl9BUk1fVEhNX1RMU19ERVNDU0VRMTYJMTI5CitkaWZmIC0tZ2l0IGEvdGVzdHMvcnVuLWFkZHJjZmkuc2ggYi90ZXN0cy9ydW4tYWRkcmNmaS5zaAoraW5kZXggNWQzMzI0Ni4uNzg0NjRhOCAxMDA3NTUKKy0tLSBhL3Rlc3RzL3J1bi1hZGRyY2ZpLnNoCisrKysgYi90ZXN0cy9ydW4tYWRkcmNmaS5zaAorQEAgLTI1MzAsNiArMjUzMCwzOCBAQCBkd2FyZl9jZmlfYWRkcmZyYW1lICguZWhfZnJhbWUpOiBubyBtYXRjaGluZyBhZGRyZXNzIHJhbmdlCisgCUZQQSByZWcyMSAoZjUpOiB1bmRlZmluZWQKKyAJRlBBIHJlZzIyIChmNik6IHVuZGVmaW5lZAorIAlGUEEgcmVnMjMgKGY3KTogdW5kZWZpbmVkCisrCVZGUCByZWc2NCAoczApOiB1bmRlZmluZWQKKysJVkZQIHJlZzY1IChzMSk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNjYgKHMyKTogdW5kZWZpbmVkCisrCVZGUCByZWc2NyAoczMpOiB1bmRlZmluZWQKKysJVkZQIHJlZzY4IChzNCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNjkgKHM1KTogdW5kZWZpbmVkCisrCVZGUCByZWc3MCAoczYpOiB1bmRlZmluZWQKKysJVkZQIHJlZzcxIChzNyk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNzIgKHM4KTogdW5kZWZpbmVkCisrCVZGUCByZWc3MyAoczkpOiB1bmRlZmluZWQKKysJVkZQIHJlZzc0IChzMTApOiB1bmRlZmluZWQKKysJVkZQIHJlZzc1IChzMTEpOiB1bmRlZmluZWQKKysJVkZQIHJlZzc2IChzMTIpOiB1bmRlZmluZWQKKysJVkZQIHJlZzc3IChzMTMpOiB1bmRlZmluZWQKKysJVkZQIHJlZzc4IChzMTQpOiB1bmRlZmluZWQKKysJVkZQIHJlZzc5IChzMTUpOiB1bmRlZmluZWQKKysJVkZQIHJlZzgwIChzMTYpOiB1bmRlZmluZWQKKysJVkZQIHJlZzgxIChzMTcpOiB1bmRlZmluZWQKKysJVkZQIHJlZzgyIChzMTgpOiB1bmRlZmluZWQKKysJVkZQIHJlZzgzIChzMTkpOiB1bmRlZmluZWQKKysJVkZQIHJlZzg0IChzMjApOiB1bmRlZmluZWQKKysJVkZQIHJlZzg1IChzMjEpOiB1bmRlZmluZWQKKysJVkZQIHJlZzg2IChzMjIpOiB1bmRlZmluZWQKKysJVkZQIHJlZzg3IChzMjMpOiB1bmRlZmluZWQKKysJVkZQIHJlZzg4IChzMjQpOiB1bmRlZmluZWQKKysJVkZQIHJlZzg5IChzMjUpOiB1bmRlZmluZWQKKysJVkZQIHJlZzkwIChzMjYpOiB1bmRlZmluZWQKKysJVkZQIHJlZzkxIChzMjcpOiB1bmRlZmluZWQKKysJVkZQIHJlZzkyIChzMjgpOiB1bmRlZmluZWQKKysJVkZQIHJlZzkzIChzMjkpOiB1bmRlZmluZWQKKysJVkZQIHJlZzk0IChzMzApOiB1bmRlZmluZWQKKysJVkZQIHJlZzk1IChzMzEpOiB1bmRlZmluZWQKKyAJRlBBIHJlZzk2IChmMCk6IHVuZGVmaW5lZAorIAlGUEEgcmVnOTcgKGYxKTogdW5kZWZpbmVkCisgCUZQQSByZWc5OCAoZjIpOiB1bmRlZmluZWQKK0BAIC0yNTM4LDcgKzI1NzAsNjYgQEAgZHdhcmZfY2ZpX2FkZHJmcmFtZSAoLmVoX2ZyYW1lKTogbm8gbWF0Y2hpbmcgYWRkcmVzcyByYW5nZQorIAlGUEEgcmVnMTAxIChmNSk6IHVuZGVmaW5lZAorIAlGUEEgcmVnMTAyIChmNik6IHVuZGVmaW5lZAorIAlGUEEgcmVnMTAzIChmNyk6IHVuZGVmaW5lZAorLQlpbnRlZ2VyIHJlZzEyOCAoc3Bzcik6IHVuZGVmaW5lZAorKwlNTVggcmVnMTA0ICh3Y2dyMCk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTA1ICh3Y2dyMSk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTA2ICh3Y2dyMik6IHVuZGVmaW5lZAorKwlNTVggcmVnMTA3ICh3Y2dyMyk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTA4ICh3Y2dyNCk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTA5ICh3Y2dyNSk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTEwICh3Y2dyNik6IHVuZGVmaW5lZAorKwlNTVggcmVnMTExICh3Y2dyNyk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTEyICh3cjApOiB1bmRlZmluZWQKKysJTU1YIHJlZzExMyAod3IxKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMTQgKHdyMik6IHVuZGVmaW5lZAorKwlNTVggcmVnMTE1ICh3cjMpOiB1bmRlZmluZWQKKysJTU1YIHJlZzExNiAod3I0KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMTcgKHdyNSk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTE4ICh3cjYpOiB1bmRlZmluZWQKKysJTU1YIHJlZzExOSAod3I3KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMjAgKHdyOCk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTIxICh3cjkpOiB1bmRlZmluZWQKKysJTU1YIHJlZzEyMiAod3IxMCk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTIzICh3cjExKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMjQgKHdyMTIpOiB1bmRlZmluZWQKKysJTU1YIHJlZzEyNSAod3IxMyk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTI2ICh3cjE0KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMjcgKHdyMTUpOiB1bmRlZmluZWQKKysJc3RhdGUgcmVnMTI4IChzcHNyKTogdW5kZWZpbmVkCisrCXN0YXRlIHJlZzEyOSAoc3Bzcl9maXEpOiB1bmRlZmluZWQKKysJc3RhdGUgcmVnMTMwIChzcHNyX2lycSk6IHVuZGVmaW5lZAorKwlzdGF0ZSByZWcxMzEgKHNwc3JfYWJ0KTogdW5kZWZpbmVkCisrCXN0YXRlIHJlZzEzMiAoc3Bzcl91bmQpOiB1bmRlZmluZWQKKysJc3RhdGUgcmVnMTMzIChzcHNyX3N2Yyk6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE0NCAocjhfdXNyKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTQ1IChyOV91c3IpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNDYgKHIxMF91c3IpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNDcgKHIxMV91c3IpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNDggKHIxMl91c3IpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNDkgKHIxM191c3IpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTAgKHIxNF91c3IpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTEgKHI4X2ZpcSk6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE1MiAocjlfZmlxKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTUzIChyMTBfZmlxKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTU0IChyMTFfZmlxKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTU1IChyMTJfZmlxKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTU2IChyMTNfZmlxKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTU3IChyMTRfZmlxKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTU4IChyMTNfaXJxKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTU5IChyMTRfaXJxKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTYwIChyMTNfYWJ0KTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTYxIChyMTRfYWJ0KTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTYyIChyMTNfdW5kKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTYzIChyMTRfdW5kKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTY0IChyMTNfc3ZjKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTY1IChyMTRfc3ZjKTogdW5kZWZpbmVkCisrCU1NWCByZWcxOTIgKHdjMCk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTkzICh3YzEpOiB1bmRlZmluZWQKKysJTU1YIHJlZzE5NCAod2MyKTogdW5kZWZpbmVkCisrCU1NWCByZWcxOTUgKHdjMyk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTk2ICh3YzQpOiB1bmRlZmluZWQKKysJTU1YIHJlZzE5NyAod2M1KTogdW5kZWZpbmVkCisrCU1NWCByZWcxOTggKHdjNik6IHVuZGVmaW5lZAorKwlNTVggcmVnMTk5ICh3YzcpOiB1bmRlZmluZWQKKyAJVkZQIHJlZzI1NiAoZDApOiB1bmRlZmluZWQKKyAJVkZQIHJlZzI1NyAoZDEpOiB1bmRlZmluZWQKKyAJVkZQIHJlZzI1OCAoZDIpOiB1bmRlZmluZWQKK2RpZmYgLS1naXQgYS90ZXN0cy9ydW4tYWxscmVncy5zaCBiL3Rlc3RzL3J1bi1hbGxyZWdzLnNoCitpbmRleCA2ZjM4NjJlLi4xMzU1N2Q1IDEwMDc1NQorLS0tIGEvdGVzdHMvcnVuLWFsbHJlZ3Muc2gKKysrKyBiL3Rlc3RzL3J1bi1hbGxyZWdzLnNoCitAQCAtMjY3MSw3ICsyNjcxLDI4IEBAIGludGVnZXIgcmVnaXN0ZXJzOgorIAkgMTM6IHNwIChzcCksIGFkZHJlc3MgMzIgYml0cworIAkgMTQ6IGxyIChsciksIGFkZHJlc3MgMzIgYml0cworIAkgMTU6IHBjIChwYyksIGFkZHJlc3MgMzIgYml0cworLQkxMjg6IHNwc3IgKHNwc3IpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTE0NDogcjhfdXNyIChyOF91c3IpLCBzaWduZWQgMzIgYml0cworKwkxNDU6IHI5X3VzciAocjlfdXNyKSwgc2lnbmVkIDMyIGJpdHMKKysJMTQ2OiByMTBfdXNyIChyMTBfdXNyKSwgc2lnbmVkIDMyIGJpdHMKKysJMTQ3OiByMTFfdXNyIChyMTFfdXNyKSwgc2lnbmVkIDMyIGJpdHMKKysJMTQ4OiByMTJfdXNyIChyMTJfdXNyKSwgc2lnbmVkIDMyIGJpdHMKKysJMTQ5OiByMTNfdXNyIChyMTNfdXNyKSwgc2lnbmVkIDMyIGJpdHMKKysJMTUwOiByMTRfdXNyIChyMTRfdXNyKSwgc2lnbmVkIDMyIGJpdHMKKysJMTUxOiByOF9maXEgKHI4X2ZpcSksIHNpZ25lZCAzMiBiaXRzCisrCTE1MjogcjlfZmlxIChyOV9maXEpLCBzaWduZWQgMzIgYml0cworKwkxNTM6IHIxMF9maXEgKHIxMF9maXEpLCBzaWduZWQgMzIgYml0cworKwkxNTQ6IHIxMV9maXEgKHIxMV9maXEpLCBzaWduZWQgMzIgYml0cworKwkxNTU6IHIxMl9maXEgKHIxMl9maXEpLCBzaWduZWQgMzIgYml0cworKwkxNTY6IHIxM19maXEgKHIxM19maXEpLCBzaWduZWQgMzIgYml0cworKwkxNTc6IHIxNF9maXEgKHIxNF9maXEpLCBzaWduZWQgMzIgYml0cworKwkxNTg6IHIxM19pcnEgKHIxM19pcnEpLCBzaWduZWQgMzIgYml0cworKwkxNTk6IHIxNF9pcnEgKHIxNF9pcnEpLCBzaWduZWQgMzIgYml0cworKwkxNjA6IHIxM19hYnQgKHIxM19hYnQpLCBzaWduZWQgMzIgYml0cworKwkxNjE6IHIxNF9hYnQgKHIxNF9hYnQpLCBzaWduZWQgMzIgYml0cworKwkxNjI6IHIxM191bmQgKHIxM191bmQpLCBzaWduZWQgMzIgYml0cworKwkxNjM6IHIxNF91bmQgKHIxNF91bmQpLCBzaWduZWQgMzIgYml0cworKwkxNjQ6IHIxM19zdmMgKHIxM19zdmMpLCBzaWduZWQgMzIgYml0cworKwkxNjU6IHIxNF9zdmMgKHIxNF9zdmMpLCBzaWduZWQgMzIgYml0cworIEZQQSByZWdpc3RlcnM6CisgCSAxNjogZjAgKGYwKSwgZmxvYXQgOTYgYml0cworIAkgMTc6IGYxIChmMSksIGZsb2F0IDk2IGJpdHMKK0BAIC0yNjg5LDcgKzI3MTAsNzIgQEAgRlBBIHJlZ2lzdGVyczoKKyAJMTAxOiBmNSAoZjUpLCBmbG9hdCA5NiBiaXRzCisgCTEwMjogZjYgKGY2KSwgZmxvYXQgOTYgYml0cworIAkxMDM6IGY3IChmNyksIGZsb2F0IDk2IGJpdHMKKytNTVggcmVnaXN0ZXJzOgorKwkxMDQ6IHdjZ3IwICh3Y2dyMCksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTA1OiB3Y2dyMSAod2NncjEpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTEwNjogd2NncjIgKHdjZ3IyKSwgdW5zaWduZWQgMzIgYml0cworKwkxMDc6IHdjZ3IzICh3Y2dyMyksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTA4OiB3Y2dyNCAod2NncjQpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTEwOTogd2NncjUgKHdjZ3I1KSwgdW5zaWduZWQgMzIgYml0cworKwkxMTA6IHdjZ3I2ICh3Y2dyNiksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTExOiB3Y2dyNyAod2NncjcpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTExMjogd3IwICh3cjApLCB1bnNpZ25lZCA2NCBiaXRzCisrCTExMzogd3IxICh3cjEpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTExNDogd3IyICh3cjIpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTExNTogd3IzICh3cjMpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTExNjogd3I0ICh3cjQpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTExNzogd3I1ICh3cjUpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTExODogd3I2ICh3cjYpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTExOTogd3I3ICh3cjcpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTEyMDogd3I4ICh3cjgpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTEyMTogd3I5ICh3cjkpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTEyMjogd3IxMCAod3IxMCksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTIzOiB3cjExICh3cjExKSwgdW5zaWduZWQgNjQgYml0cworKwkxMjQ6IHdyMTIgKHdyMTIpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTEyNTogd3IxMyAod3IxMyksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTI2OiB3cjE0ICh3cjE0KSwgdW5zaWduZWQgNjQgYml0cworKwkxMjc6IHdyMTUgKHdyMTUpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTE5Mjogd2MwICh3YzApLCB1bnNpZ25lZCAzMiBiaXRzCisrCTE5Mzogd2MxICh3YzEpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTE5NDogd2MyICh3YzIpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTE5NTogd2MzICh3YzMpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTE5Njogd2M0ICh3YzQpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTE5Nzogd2M1ICh3YzUpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTE5ODogd2M2ICh3YzYpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTE5OTogd2M3ICh3YzcpLCB1bnNpZ25lZCAzMiBiaXRzCisgVkZQIHJlZ2lzdGVyczoKKysJIDY0OiBzMCAoczApLCBmbG9hdCAzMiBiaXRzCisrCSA2NTogczEgKHMxKSwgZmxvYXQgMzIgYml0cworKwkgNjY6IHMyIChzMiksIGZsb2F0IDMyIGJpdHMKKysJIDY3OiBzMyAoczMpLCBmbG9hdCAzMiBiaXRzCisrCSA2ODogczQgKHM0KSwgZmxvYXQgMzIgYml0cworKwkgNjk6IHM1IChzNSksIGZsb2F0IDMyIGJpdHMKKysJIDcwOiBzNiAoczYpLCBmbG9hdCAzMiBiaXRzCisrCSA3MTogczcgKHM3KSwgZmxvYXQgMzIgYml0cworKwkgNzI6IHM4IChzOCksIGZsb2F0IDMyIGJpdHMKKysJIDczOiBzOSAoczkpLCBmbG9hdCAzMiBiaXRzCisrCSA3NDogczEwIChzMTApLCBmbG9hdCAzMiBiaXRzCisrCSA3NTogczExIChzMTEpLCBmbG9hdCAzMiBiaXRzCisrCSA3NjogczEyIChzMTIpLCBmbG9hdCAzMiBiaXRzCisrCSA3NzogczEzIChzMTMpLCBmbG9hdCAzMiBiaXRzCisrCSA3ODogczE0IChzMTQpLCBmbG9hdCAzMiBiaXRzCisrCSA3OTogczE1IChzMTUpLCBmbG9hdCAzMiBiaXRzCisrCSA4MDogczE2IChzMTYpLCBmbG9hdCAzMiBiaXRzCisrCSA4MTogczE3IChzMTcpLCBmbG9hdCAzMiBiaXRzCisrCSA4MjogczE4IChzMTgpLCBmbG9hdCAzMiBiaXRzCisrCSA4MzogczE5IChzMTkpLCBmbG9hdCAzMiBiaXRzCisrCSA4NDogczIwIChzMjApLCBmbG9hdCAzMiBiaXRzCisrCSA4NTogczIxIChzMjEpLCBmbG9hdCAzMiBiaXRzCisrCSA4NjogczIyIChzMjIpLCBmbG9hdCAzMiBiaXRzCisrCSA4NzogczIzIChzMjMpLCBmbG9hdCAzMiBiaXRzCisrCSA4ODogczI0IChzMjQpLCBmbG9hdCAzMiBiaXRzCisrCSA4OTogczI1IChzMjUpLCBmbG9hdCAzMiBiaXRzCisrCSA5MDogczI2IChzMjYpLCBmbG9hdCAzMiBiaXRzCisrCSA5MTogczI3IChzMjcpLCBmbG9hdCAzMiBiaXRzCisrCSA5MjogczI4IChzMjgpLCBmbG9hdCAzMiBiaXRzCisrCSA5MzogczI5IChzMjkpLCBmbG9hdCAzMiBiaXRzCisrCSA5NDogczMwIChzMzApLCBmbG9hdCAzMiBiaXRzCisrCSA5NTogczMxIChzMzEpLCBmbG9hdCAzMiBiaXRzCisgCTI1NjogZDAgKGQwKSwgZmxvYXQgNjQgYml0cworIAkyNTc6IGQxIChkMSksIGZsb2F0IDY0IGJpdHMKKyAJMjU4OiBkMiAoZDIpLCBmbG9hdCA2NCBiaXRzCitAQCAtMjcyMiw2ICsyODA4LDEzIEBAIFZGUCByZWdpc3RlcnM6CisgCTI4NTogZDI5IChkMjkpLCBmbG9hdCA2NCBiaXRzCisgCTI4NjogZDMwIChkMzApLCBmbG9hdCA2NCBiaXRzCisgCTI4NzogZDMxIChkMzEpLCBmbG9hdCA2NCBiaXRzCisrc3RhdGUgcmVnaXN0ZXJzOgorKwkxMjg6IHNwc3IgKHNwc3IpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTEyOTogc3Bzcl9maXEgKHNwc3JfZmlxKSwgdW5zaWduZWQgMzIgYml0cworKwkxMzA6IHNwc3JfaXJxIChzcHNyX2lycSksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTMxOiBzcHNyX2FidCAoc3Bzcl9hYnQpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTEzMjogc3Bzcl91bmQgKHNwc3JfdW5kKSwgdW5zaWduZWQgMzIgYml0cworKwkxMzM6IHNwc3Jfc3ZjIChzcHNyX3N2YyksIHVuc2lnbmVkIDMyIGJpdHMKKyBFT0YKKyAKKyAjIFNlZSBydW4tcmVhZGVsZi1taXhlZC1jb3Jlbm90ZS5zaCBmb3IgaW5zdHJ1Y3Rpb25zIHRvIHJlZ2VuZXJhdGUKK2RpZmYgLS1naXQgYS90ZXN0cy9ydW4tcmVhZGVsZi1taXhlZC1jb3Jlbm90ZS5zaCBiL3Rlc3RzL3J1bi1yZWFkZWxmLW1peGVkLWNvcmVub3RlLnNoCitpbmRleCAwMWU0NTk0Li45YThhMzgwIDEwMDc1NQorLS0tIGEvdGVzdHMvcnVuLXJlYWRlbGYtbWl4ZWQtY29yZW5vdGUuc2gKKysrKyBiL3Rlc3RzL3J1bi1yZWFkZWxmLW1peGVkLWNvcmVub3RlLnNoCitAQCAtMzAsMTIgKzMwLDExIEBAIE5vdGUgc2VnbWVudCBvZiA4OTIgYnl0ZXMgYXQgb2Zmc2V0IDB4Mjc0OgorICAgICBwaWQ6IDExMDg3LCBwcGlkOiAxMTA2MywgcGdycDogMTEwODcsIHNpZDogMTEwNjMKKyAgICAgdXRpbWU6IDAuMDAwMDAwLCBzdGltZTogMC4wMTAwMDAsIGN1dGltZTogMC4wMDAwMDAsIGNzdGltZTogMC4wMDAwMDAKKyAgICAgb3JpZ19yMDogLTEsIGZwdmFsaWQ6IDEKKy0gICAgcjA6ICAgICAgICAgICAgIDEgIHIxOiAgIC0xMDkxNjcyNTA4ICByMjogICAtMTA5MTY3MjUwMAorLSAgICByMzogICAgICAgICAgICAgMCAgcjQ6ICAgICAgICAgICAgIDAgIHI1OiAgICAgICAgICAgICAwCistICAgIHI2OiAgICAgICAgIDMzNzI4ICByNzogICAgICAgICAgICAgMCAgcjg6ICAgICAgICAgICAgIDAKKy0gICAgcjk6ICAgICAgICAgICAgIDAgIHIxMDogIC0xMjI1NzAzNDk2ICByMTE6ICAtMTA5MTY3Mjg0NAorLSAgICByMTI6ICAgICAgICAgICAgMCAgc3A6ICAgIDB4YmVlZTY0ZjQgIGxyOiAgICAweGI2ZGMzZjQ4CistICAgIHBjOiAgICAweDAwMDA4NTAwICBzcHNyOiAgMHg2MDAwMDAxMAorKyAgICByMDogICAgICAgICAgICAxICByMTogIC0xMDkxNjcyNTA4ICByMjogIC0xMDkxNjcyNTAwICByMzogICAgICAgICAgICAwCisrICAgIHI0OiAgICAgICAgICAgIDAgIHI1OiAgICAgICAgICAgIDAgIHI2OiAgICAgICAgMzM3MjggIHI3OiAgICAgICAgICAgIDAKKysgICAgcjg6ICAgICAgICAgICAgMCAgcjk6ICAgICAgICAgICAgMCAgcjEwOiAtMTIyNTcwMzQ5NiAgcjExOiAtMTA5MTY3Mjg0NAorKyAgICByMTI6ICAgICAgICAgICAwICBzcDogICAweGJlZWU2NGY0ICBscjogICAweGI2ZGMzZjQ4ICBwYzogICAweDAwMDA4NTAwCisrICAgIHNwc3I6ICAweDYwMDAwMDEwCisgICBDT1JFICAgICAgICAgICAgICAgICAxMjQgIFBSUFNJTkZPCisgICAgIHN0YXRlOiAwLCBzbmFtZTogUiwgem9tYjogMCwgbmljZTogMCwgZmxhZzogMHgwMDQwMDUwMAorICAgICB1aWQ6IDAsIGdpZDogMCwgcGlkOiAxMTA4NywgcHBpZDogMTEwNjMsIHBncnA6IDExMDg3LCBzaWQ6IDExMDYzCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2FybV9mdW5jX3ZhbHVlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvYXJtX2Z1bmNfdmFsdWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZlNGRmNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2FybV9mdW5jX3ZhbHVlLnBhdGNoCkBAIC0wLDAgKzEsMTY1IEBACitGcm9tOiBNYXJrIFdpZWxhYXJkIDxtandAcmVkaGF0LmNvbT4KK0RhdGU6IFN1biwgMTUgSnVuIDIwMTQgMTE6MzA6MzUgKzAyMDAKK1N1YmplY3Q6IGxpYmVibDogQWRkIHN5bV9mdW5jX3ZhbHVlIGhvb2suCisKK1RoZSBBUk0gRUFCSSBzYXlzIHRoYXQgdGhlIHplcm8gYml0IG9mIGZ1bmN0aW9uIHN5bWJvbCBzdF92YWx1ZSBpbmRpY2F0ZXMKK3doZXRoZXIgdGhlIHN5bWJvbCBwb2ludHMgdG8gYSBUSFVNQiBvciBBUk0gZnVuY3Rpb24uIEFkZCBhIG5ldyBlYmwgaG9vawordG8gYWRqdXN0IHRoZSBzdF92YWx1ZSBpbiBzdWNoIGEgY2FzZSBzbyB0aGF0IHdlIGdldCB0aGUgYWN0dWFsIHZhbHVlIHRoYXQKK3RoZSBzeW1ib2wgcG9pbnRzIHRvLiBJdCBpc24ndCBlYXNpbHkgcG9zc2libGUgdG8gcmV1c2UgdGhlIGV4aXN0aW5nCityZXNvbHZlX3N5bV92YWx1ZSBmb3IgdGhpcyBwdXJwb3NlLCBzbyB3ZSBlbmQgdXAgd2l0aCBhbm90aGVyIGhvb2sgdGhhdAorY2FuIGJlIHVzZWQgZnJvbSBkd2ZsX21vZHVsZV9nZXRzeW0gYW5kIGVsZmxpbnQuCisKK1JlYmFzZSBhcm1fZnVuY192YWx1ZS5wYXRjaCBmcm9tIDAuMTU5IHRvIDAuMTYwCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBiYWNrZW5kcy9hcm1faW5pdC5jICAgICAgICAgIHwgICAgMSArCisgYmFja2VuZHMvYXJtX3N5bWJvbC5jICAgICAgICB8ICAgIDggKysrKysrKysKKyBsaWJkd2ZsL2R3ZmxfbW9kdWxlX2dldHN5bS5jIHwgICAgMiArLQorIGxpYmVibC9NYWtlZmlsZS5hbSAgICAgICAgICAgfCAgICAzICsrLQorIGxpYmVibC9lYmwtaG9va3MuaCAgICAgICAgICAgfCAgICAzICsrKworIGxpYmVibC9lYmxzeW1mdW5jdmFsLmMgICAgICAgfCAgIDQzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGxpYmVibC9saWJlYmwuaCAgICAgICAgICAgICAgfCAgIDExICsrKysrKysrKysrCisgNyBmaWxlcyBjaGFuZ2VkLCA2OSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYmFja2VuZHMvYXJtX2luaXQuYyBiL2JhY2tlbmRzL2FybV9pbml0LmMKK2luZGV4IDcxNzExODYuLjlmMDM2MzAgMTAwNjQ0CistLS0gYS9iYWNrZW5kcy9hcm1faW5pdC5jCisrKysgYi9iYWNrZW5kcy9hcm1faW5pdC5jCitAQCAtNzgsNiArNzgsNyBAQCBhcm1faW5pdCAoZWxmLCBtYWNoaW5lLCBlaCwgZWhsZW4pCisgICAgIGVoLT5yZXR1cm5fdmFsdWVfbG9jYXRpb24gPSBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX2hhcmQ7CisgICBIT09LIChlaCwgYWJpX2NmaSk7CisgICBIT09LIChlaCwgY2hlY2tfcmVsb2NfdGFyZ2V0X3R5cGUpOworKyAgSE9PSyAoZWgsIHN5bV9mdW5jX3ZhbHVlKTsKKyAgIEhPT0sgKGVoLCBzeW1ib2xfdHlwZV9uYW1lKTsKKyAKKyAgIC8qIFdlIG9ubHkgdW53aW5kIHRoZSBjb3JlIGludGVnZXIgcmVnaXN0ZXJzLiAgKi8KK2RpZmYgLS1naXQgYS9iYWNrZW5kcy9hcm1fc3ltYm9sLmMgYi9iYWNrZW5kcy9hcm1fc3ltYm9sLmMKK2luZGV4IGRhNGE1MGEuLmNjZWEwM2IgMTAwNjQ0CistLS0gYS9iYWNrZW5kcy9hcm1fc3ltYm9sLmMKKysrKyBiL2JhY2tlbmRzL2FybV9zeW1ib2wuYworQEAgLTEzMCw2ICsxMzAsMTQgQEAgYXJtX2NoZWNrX3JlbG9jX3RhcmdldF90eXBlIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksIEVsZjY0X1dvcmQgc2hfdHkKKyAgIHJldHVybiBzaF90eXBlID09IFNIVF9BUk1fRVhJRFg7CisgfQorIAorKy8qIEFSTSBFQUJJIHNheXMgdGhhdCB0aGUgbG93IGJpdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZnVuY3Rpb24KKysgICBzeW1ib2wgdmFsdWUgaXMgYSBUSFVNQiBmdW5jdGlvbiBvciBub3QuICBNYXNrIGl0IG9mZi4gICovCisrR0VsZl9BZGRyCisrYXJtX3N5bV9mdW5jX3ZhbHVlIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksIEdFbGZfQWRkciB2YWwpCisreworKyAgcmV0dXJuIHZhbCAmIH4oR0VsZl9BZGRyKTE7CisrfQorKworIGNvbnN0IGNoYXIgKgorIGFybV9zeW1ib2xfdHlwZV9uYW1lIChpbnQgdHlwZSwKKyAJCSAgICAgIGNoYXIgKmJ1ZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCitkaWZmIC0tZ2l0IGEvbGliZHdmbC9kd2ZsX21vZHVsZV9nZXRzeW0uYyBiL2xpYmR3ZmwvZHdmbF9tb2R1bGVfZ2V0c3ltLmMKK2luZGV4IDQyZDJiNjcuLmZiMTkyZDcgMTAwNjQ0CistLS0gYS9saWJkd2ZsL2R3ZmxfbW9kdWxlX2dldHN5bS5jCisrKysgYi9saWJkd2ZsL2R3ZmxfbW9kdWxlX2dldHN5bS5jCitAQCAtMTE5LDcgKzExOSw3IEBAIF9fbGliZHdmbF9nZXRzeW0gKER3ZmxfTW9kdWxlICptb2QsIGludCBuZHgsIEdFbGZfU3ltICpzeW0sIEdFbGZfQWRkciAqYWRkciwKKyAgICAgIGRlc2NyaXB0b3JzKS4gICovCisgCisgICBjaGFyICppZGVudDsKKy0gIEdFbGZfQWRkciBzdF92YWx1ZSA9IHN5bS0+c3RfdmFsdWUgJiBlYmxfZnVuY19hZGRyX21hc2sgKG1vZC0+ZWJsKTsKKysgIEdFbGZfQWRkciBzdF92YWx1ZSA9IGVibF9zeW1fZnVuY192YWx1ZSAobW9kLT5lYmwsIHN5bS0+c3RfdmFsdWUpOworICAgKnJlc29sdmVkID0gZmFsc2U7CisgICBpZiAoISBhZGp1c3Rfc3RfdmFsdWUgJiYgbW9kLT5lX3R5cGUgIT0gRVRfUkVMICYmIGFsbG9jCisgICAgICAgJiYgKEdFTEZfU1RfVFlQRSAoc3ltLT5zdF9pbmZvKSA9PSBTVFRfRlVOQworZGlmZiAtLWdpdCBhL2xpYmVibC9NYWtlZmlsZS5hbSBiL2xpYmVibC9NYWtlZmlsZS5hbQoraW5kZXggZWM0NDc3Yi4uODg5YzIxYiAxMDA2NDQKKy0tLSBhL2xpYmVibC9NYWtlZmlsZS5hbQorKysrIGIvbGliZWJsL01ha2VmaWxlLmFtCitAQCAtNTUsNyArNTUsOCBAQCBnZW5fU09VUkNFUyA9IGVibG9wZW5iYWNrZW5kLmMgZWJsY2xvc2ViYWNrZW5kLmMgZWJsc3RydGFiLmMgXAorIAkgICAgICBlYmxzeXN2aGFzaGVudHJ5c2l6ZS5jIGVibGF1eHZpbmZvLmMgZWJsY2hlY2tvYmphdHRyLmMgXAorIAkgICAgICBlYmxfY2hlY2tfc3BlY2lhbF9zZWN0aW9uLmMgZWJsX3N5c2NhbGxfYWJpLmMgZWJsYWJpY2ZpLmMgXAorIAkgICAgICBlYmxzdG90aGVyLmMgZWJsaW5pdHJlZy5jIGVibGR3YXJmdG9yZWduby5jIGVibG5vcm1hbGl6ZXBjLmMgXAorLQkgICAgICBlYmx1bndpbmQuYyBlYmxyZXNvbHZlc3ltLmMgZWJsY2hlY2tyZWxvY3RhcmdldHR5cGUuYworKwkgICAgICBlYmx1bndpbmQuYyBlYmxyZXNvbHZlc3ltLmMgZWJsY2hlY2tyZWxvY3RhcmdldHR5cGUuYyBcCisrCSAgICAgIGVibHN5bWZ1bmN2YWwuYworIAorIGxpYmVibF9hX1NPVVJDRVMgPSAkKGdlbl9TT1VSQ0VTKQorIAorZGlmZiAtLWdpdCBhL2xpYmVibC9lYmwtaG9va3MuaCBiL2xpYmVibC9lYmwtaG9va3MuaAoraW5kZXggMmUzMTQ0Ni4uOWRmOTQ1ZCAxMDA2NDQKKy0tLSBhL2xpYmVibC9lYmwtaG9va3MuaAorKysrIGIvbGliZWJsL2VibC1ob29rcy5oCitAQCAtMTkxLDUgKzE5MSw4IEBAIGJvb2wgRUJMSE9PSyh1bndpbmQpIChFYmwgKmVibCwgRHdhcmZfQWRkciBwYywgZWJsX3RpZF9yZWdpc3RlcnNfdCAqc2V0ZnVuYywKKyAgICAoZS5nLiBmdW5jdGlvbiBkZXNjcmlwdG9yIHJlc29sdmluZykgICovCisgYm9vbCBFQkxIT09LKHJlc29sdmVfc3ltX3ZhbHVlKSAoRWJsICplYmwsIEdFbGZfQWRkciAqYWRkcik7CisgCisrLyogUmV0dXJucyB0aGUgcmVhbCB2YWx1ZSBvZiBhIHN5bWJvbCBmdW5jdGlvbiBhZGRyZXNzIG9yIG9mZnNldC4gICovCisrR0VsZl9BZGRyIEVCTEhPT0soc3ltX2Z1bmNfdmFsdWUpIChFYmwgKmVibCwgR0VsZl9BZGRyIHZhbCk7CisrCisgLyogRGVzdHJ1Y3RvciBmb3IgRUxGIGJhY2tlbmQgaGFuZGxlLiAgKi8KKyB2b2lkIEVCTEhPT0soZGVzdHIpIChzdHJ1Y3QgZWJsICopOworZGlmZiAtLWdpdCBhL2xpYmVibC9lYmxzeW1mdW5jdmFsLmMgYi9saWJlYmwvZWJsc3ltZnVuY3ZhbC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYzBiMzIyZgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGliZWJsL2VibHN5bWZ1bmN2YWwuYworQEAgLTAsMCArMSw0MyBAQAorKy8qIFR1cm4gYSBzeW1ib2wgZnVuY3Rpb24gdmFsdWUgaW50byBhIHJlYWwgZnVuY3Rpb24gYWRkcmVzcyBvciBvZmZzZXQuCisrICAgQ29weXJpZ2h0IChDKSAyMDE0IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBlbGZ1dGlscy4KKysKKysgICBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIKKysKKysgICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKysgICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisrICAgICAgIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbgorKworKyAgIG9yCisrCisrICAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKysgICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisrICAgICAgIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbgorKworKyAgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisrCisrICAgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorKyAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZgorKyAgIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxsaWJlYmxQLmg+CisrI2luY2x1ZGUgPGFzc2VydC5oPgorKworK0dFbGZfQWRkcgorK2VibF9zeW1fZnVuY192YWx1ZSAoRWJsICplYmwsIEdFbGZfQWRkciB2YWwpCisreworKyAgaWYgKGVibCA9PSBOVUxMIHx8IGVibC0+c3ltX2Z1bmNfdmFsdWUgPT0gTlVMTCkKKysgICAgcmV0dXJuIHZhbDsKKysKKysgIHJldHVybiBlYmwtPnN5bV9mdW5jX3ZhbHVlIChlYmwsIHZhbCk7CisrfQorZGlmZiAtLWdpdCBhL2xpYmVibC9saWJlYmwuaCBiL2xpYmVibC9saWJlYmwuaAoraW5kZXggN2RiZjQ2MC4uOTZjMDc2YiAxMDA2NDQKKy0tLSBhL2xpYmVibC9saWJlYmwuaAorKysrIGIvbGliZWJsL2xpYmVibC5oCitAQCAtNDcyLDYgKzQ3MiwxNyBAQCBleHRlcm4gYm9vbCBlYmxfdW53aW5kIChFYmwgKmVibCwgRHdhcmZfQWRkciBwYywgZWJsX3RpZF9yZWdpc3RlcnNfdCAqc2V0ZnVuYywKKyBleHRlcm4gYm9vbCBlYmxfcmVzb2x2ZV9zeW1fdmFsdWUgKEVibCAqZWJsLCBHRWxmX0FkZHIgKmFkZHIpCisgICAgX19ub25udWxsX2F0dHJpYnV0ZV9fICgyKTsKKyAKKysvKiBSZXR1cm5zIHRoZSByZWFsIHZhbHVlIG9mIGEgc3ltYm9sIGZ1bmN0aW9uIGFkZHJlc3Mgb3Igb2Zmc2V0CisrICAgKGUuZy4gd2hlbiB0aGUgc3RfdmFsdWUgY29udGFpbnMgc29tZSBmbGFnIGJpdHMgdGhhdCBuZWVkIHRvIGJlCisrICAgbWFza2VkIG9mZikuICBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIGVibF9yZXNvbHZlX3N5bV92YWx1ZSB3aGljaAorKyAgIG9ubHkgd29ya3MgZm9yIGFjdHVhbCBzeW1ib2wgYWRkcmVzc2VzIChpbiBub24tRVRfUkVMIGZpbGVzKSB0aGF0CisrICAgbWlnaHQgcmVzb2x2ZSB0byBhbiBhZGRyZXNzIGluIGEgZGlmZmVyZW50IHNlY3Rpb24uCisrICAgZWJsX3N5bV9mdW5jX3ZhbHVlIGlzIGNhbGxlZCB0byB0dXJuIHRoZSBnaXZlbiB2YWx1ZSBpbnRvIHRoZSBhCisrICAgcmVhbCBhZGRyZXNzIG9yIG9mZnNldCAodGhlIG9yaWdpbmFsIHZhbHVlIG1pZ2h0IG5vdCBiZSBhIHJlYWwKKysgICBhZGRyZXNzKS4gIFRoaXMgd29ya3MgZm9yIGJvdGggRVRfUkVMIHdoZW4gdGhlIHZhbHVlIGlzIGEgc2VjdGlvbgorKyAgIG9mZnNldCBvciBFVF9FWEVDIG9yIEVUX0RZTiBzeW1ib2wgdmFsdWVzLCB3aGljaCBhcmUgYWRkcmVzc2VzLiAgKi8KKytleHRlcm4gR0VsZl9BZGRyIGVibF9zeW1fZnVuY192YWx1ZSAoRWJsICplYmwsIEdFbGZfQWRkciB2YWwpOworKworICNpZmRlZiBfX2NwbHVzcGx1cworIH0KKyAjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2FybV91bndpbmRfcmV0X21hc2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9hcm1fdW53aW5kX3JldF9tYXNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYmIzNmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9hcm1fdW53aW5kX3JldF9tYXNrLnBhdGNoCkBAIC0wLDAgKzEsODMgQEAKK0Zyb206IE1hcmsgV2llbGFhcmQgPG1qd0ByZWRoYXQuY29tPgorRGF0ZTogU3VuLCAxNSBKdW4gMjAxNCAxMjozMDowMiArMDIwMAorU3ViamVjdDogbGliZWJsOiBBZGQgZWJsX3Vud2luZF9yZXRfbWFzay4KKworQW5vdGhlciBBUk0gb2RkaXR5LiBBIHJldHVybiB2YWx1ZSBhZGRyZXNzIGluIGFuIHVud2luZCB3aWxsIGNvbnRhaW4gYW4KK2V4dHJhIGJpdCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRvIHJldHVybiB0byBhIHJlZ3VsYXIgQVJNIG9yIFRIVU1CIGZ1bmN0aW9uLgorQWRkIGEgbmV3IGVibCBmdW5jdGlvbiB0byByZXR1cm4gYSBtYXNrIHRvIHVzZSB0byBnZXQgdGhlIGFjdHVhbCByZXR1cm4KK2FkZHJlc3MgZHVyaW5nIGFuIHVud2luZCBlYmxfdW53aW5kX3JldF9tYXNrLgorCitSZWJhc2UgYXJtX3Vud2luZF9yZXRfbWFzay5wYXRjaCBmcm9tIDAuMTU5IHRvIDAuMTYwCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGJhY2tlbmRzL2FybV9pbml0LmMgfCAzICsrKworIGxpYmVibC9lYmxpbml0cmVnLmMgfCA4ICsrKysrKysrCisgbGliZWJsL2xpYmVibC5oICAgICB8IDQgKysrKworIGxpYmVibC9saWJlYmxQLmggICAgfCA2ICsrKysrKworIDQgZmlsZXMgY2hhbmdlZCwgMjEgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvYmFja2VuZHMvYXJtX2luaXQuYyBiL2JhY2tlbmRzL2FybV9pbml0LmMKK2luZGV4IDIyNjY4MjkuLmY4ZGYwNDIgMTAwNjQ0CistLS0gYS9iYWNrZW5kcy9hcm1faW5pdC5jCisrKysgYi9iYWNrZW5kcy9hcm1faW5pdC5jCitAQCAtODcsNSArODcsOCBAQCBhcm1faW5pdCAoZWxmLCBtYWNoaW5lLCBlaCwgZWhsZW4pCisgICAvKiBCaXQgemVybyBlbmNvZGVzIHdoZXRoZXIgYW4gZnVuY3Rpb24gYWRkcmVzcyBpcyBUSFVNQiBvciBBUk0uICovCisgICBlaC0+ZnVuY19hZGRyX21hc2sgPSB+KEdFbGZfQWRkcikxOworIAorKyAgLyogQml0IHplcm8gZW5jb2RlcyB3aGV0aGVyIHRvIHJldHVybiB0byBhIFRIVU1CIG9yIEFSTSBmdW5jdGlvbi4gKi8KKysgIGVoLT51bndpbmRfcmV0X21hc2sgPSB+KEdFbGZfQWRkcikxOworKworICAgcmV0dXJuIE1PRFZFUlNJT047CisgfQorZGlmZiAtLWdpdCBhL2xpYmVibC9lYmxpbml0cmVnLmMgYi9saWJlYmwvZWJsaW5pdHJlZy5jCitpbmRleCA1NzI5YjNjLi5jYTY4MWMwIDEwMDY0NAorLS0tIGEvbGliZWJsL2VibGluaXRyZWcuYworKysrIGIvbGliZWJsL2VibGluaXRyZWcuYworQEAgLTU2LDMgKzU2LDExIEBAIGVibF9mdW5jX2FkZHJfbWFzayAoRWJsICplYmwpCisgICByZXR1cm4gKChlYmwgPT0gTlVMTCB8fCBlYmwtPmZ1bmNfYWRkcl9tYXNrID09IDApCisgCSAgPyB+KEdFbGZfQWRkcikwIDogZWJsLT5mdW5jX2FkZHJfbWFzayk7CisgfQorKworK0dFbGZfQWRkcgorK2VibF91bndpbmRfcmV0X21hc2sgKEVibCAqZWJsKQorK3sKKysgIHJldHVybiAoKGVibCA9PSBOVUxMIHx8IGVibC0+dW53aW5kX3JldF9tYXNrID09IDApCisrCSAgPyB+KEdFbGZfQWRkcikwIDogZWJsLT51bndpbmRfcmV0X21hc2spOworK30KKysKK2RpZmYgLS1naXQgYS9saWJlYmwvbGliZWJsLmggYi9saWJlYmwvbGliZWJsLmgKK2luZGV4IDQwY2Y2MzUuLmJlNzAwMjcgMTAwNjQ0CistLS0gYS9saWJlYmwvbGliZWJsLmgKKysrKyBiL2xpYmVibC9saWJlYmwuaAorQEAgLTQyMCw2ICs0MjAsMTAgQEAgZXh0ZXJuIHNpemVfdCBlYmxfZnJhbWVfbnJlZ3MgKEVibCAqZWJsKQorICAgIHRhYmxlcykgaXMgbmVlZGVkLiAgKi8KKyBleHRlcm4gR0VsZl9BZGRyIGVibF9mdW5jX2FkZHJfbWFzayAoRWJsICplYmwpOworIAorKy8qIE1hc2sgdG8gdXNlIGZvciB1bndpbmQgcmV0dXJuIGFkZHJlc3MgaW4gY2FzZSB0aGUgYXJjaGl0ZWN0dXJlIGFkZHMKKysgICBzb21lIGV4dHJhIG5vbi1hZGRyZXNzIGJpdHMgdG8gaXQuICAqLworK2V4dGVybiBHRWxmX0FkZHIgZWJsX3Vud2luZF9yZXRfbWFzayAoRWJsICplYmwpOworKworIC8qIENvbnZlcnQgKlJFR05PIGFzIGlzIGluIERXQVJGIHRvIGEgbG93ZXIgcmFuZ2Ugc3VpdGFibGUgZm9yCisgICAgRHdhcmZfRnJhbWUtPlJFR1MgaW5kZXhpbmcuICAqLworIGV4dGVybiBib29sIGVibF9kd2FyZl90b19yZWdubyAoRWJsICplYmwsIHVuc2lnbmVkICpyZWdubykKK2RpZmYgLS1naXQgYS9saWJlYmwvbGliZWJsUC5oIGIvbGliZWJsL2xpYmVibFAuaAoraW5kZXggZGJkNjdmMy4uZTE4YWNlNiAxMDA2NDQKKy0tLSBhL2xpYmVibC9saWJlYmxQLmgKKysrKyBiL2xpYmVibC9saWJlYmxQLmgKK0BAIC03MCw2ICs3MCwxMiBAQCBzdHJ1Y3QgZWJsCisgICAgICBvdGhlcndpc2UgaXQgc2hvdWxkIGJlIHRoZSBhY3R1YWwgbWFzayB0byB1c2UuICAqLworICAgR0VsZl9BZGRyIGZ1bmNfYWRkcl9tYXNrOworIAorKyAgLyogTWFzayB0byB1c2UgdG8gZ2V0IHRoZSByZXR1cm4gYWRkcmVzcyBmcm9tIGFuIHVud2luZCBpbiBjYXNlIHRoZQorKyAgICAgYXJjaGl0ZWN0dXJlIGFkZHMgc29tZSBleHRyYSBub24tYWRkcmVzcyBiaXRzIHRvIGl0LiAgV2hlbiBub3QKKysgICAgIGluaXRpYWxpemVkICgwKSB0aGVuIGVibF91bndpbmRfcmV0X21hc2sgd2lsbCByZXR1cm4gfjAsIG90aGVyd2lzZQorKyAgICAgaXQgc2hvdWxkIGJlIHRoZSBhY3R1YWwgbWFzayB0byB1c2UuICAqLworKyAgR0VsZl9BZGRyIHVud2luZF9yZXRfbWFzazsKKysKKyAgIC8qIEZ1bmN0aW9uIGRlc2NyaXB0b3IgbG9hZCBhZGRyZXNzIGFuZCB0YWJsZSBhcyB1c2VkIGJ5CisgICAgICBlYmxfcmVzb2x2ZV9zeW1fdmFsdWUgaWYgYXZhaWxhYmxlIGZvciB0aGlzIGFyY2guICAqLworICAgR0VsZl9BZGRyIGZkX2FkZHI7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2ZpeGhlYWRlcmNoZWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvZml4aGVhZGVyY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRlM2IyNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2ZpeGhlYWRlcmNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK0ZvciBzb21lIGJpbmFyaWVzIHdlIGNhbiBnZXQgYSBpbnZhbGlkIHNlY3Rpb24gYWxpZ25tZW50LCBmb3IgZXhhbXBsZSBpZiAKK3NoX2FsaWduID0gMSBhbmQgc2hfYWRkcmFsaWduIGlzIDAuIEluIHRoZSBjYXNlIG9mIGEgemVybyBzaXplIHNlY3Rpb24gbGlrZSAKKyIubm90ZS5HTlUtc3RhY2siLCB0aGlzIGlzIGlycmVsYXZlbnQgYXMgZmFyIGFzIEkgY2FuIHRlbGwgYW5kIHdlIHNob3VsZG4ndAorZXJyb3IgaW4gdGhpcyBjYXNlLgorCitSUCAyMDE0LzYvMTEKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2RpZmYgLS1naXQgYS9saWJlbGYvZWxmMzJfdXBkYXRlbnVsbC5jIGIvbGliZWxmL2VsZjMyX3VwZGF0ZW51bGwuYworLS0tIGEvbGliZWxmL2VsZjMyX3VwZGF0ZW51bGwuYworKysrIGIvbGliZWxmL2VsZjMyX3VwZGF0ZW51bGwuYworQEAgLTMzOSw4ICszMzksOCBAQCBfX2VsZncyKExJQkVMRkJJVFMsdXBkYXRlbnVsbF93cmxvY2spIChFbGYgKmVsZiwgaW50ICpjaGFuZ2VfYm9wLCBzaXplX3Qgc2hudW0pCisgCQkgICAgIHdlIHRlc3QgZm9yIHRoZSBhbGlnbm1lbnQgb2YgdGhlIHNlY3Rpb24gYmVpbmcgbGFyZ2UKKyAJCSAgICAgZW5vdWdoIGZvciB0aGUgbGFyZ2VzdCBhbGlnbm1lbnQgcmVxdWlyZWQgYnkgYSBkYXRhCisgCQkgICAgIGJsb2NrLiAgKi8KKy0JCSAgaWYgKHVubGlrZWx5ICghIHBvd2Vyb2YyIChzaGRyLT5zaF9hZGRyYWxpZ24pKQorLQkJICAgICAgfHwgdW5saWtlbHkgKChzaGRyLT5zaF9hZGRyYWxpZ24gPzogMSkgPCBzaF9hbGlnbikpCisrCQkgIGlmIChzaGRyLT5zaF9zaXplICYmICh1bmxpa2VseSAoISBwb3dlcm9mMiAoc2hkci0+c2hfYWRkcmFsaWduKSkKKysJCSAgICAgIHx8IHVubGlrZWx5ICgoc2hkci0+c2hfYWRkcmFsaWduID86IDEpIDwgc2hfYWxpZ24pKSkKKyAJCSAgICB7CisgCQkgICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9BTElHTik7CisgCQkgICAgICByZXR1cm4gLTE7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9ocHBhX2JhY2tlbmQuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2hwcGFfYmFja2VuZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MWE3MjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9ocHBhX2JhY2tlbmQuZGlmZgpAQCAtMCwwICsxLDgwMCBAQAorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL3BhcmlzY19pbml0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9wYXJpc2NfaW5pdC5jCTIwMTQtMDQtMjEgMTE6MTI6MTIuMjI4MTUwMjgwICswMDAwCitAQCAtMCwwICsxLDc0IEBACisrLyogSW5pdGlhbGl6YXRpb24gb2YgUEEtUklTQyBzcGVjaWZpYyBiYWNrZW5kIGxpYnJhcnkuCisrICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA1LCAyMDA2IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDIuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjZGVmaW5lIEJBQ0tFTkQJCXBhcmlzY18KKysjZGVmaW5lIFJFTE9DX1BSRUZJWAlSX1BBUklTQ18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKyNpbmNsdWRlICJsaWJlYmxfcGFyaXNjLmgiCisrCisrLyogVGhpcyBkZWZpbmVzIHRoZSBjb21tb24gcmVsb2MgaG9va3MgYmFzZWQgb24gcGFyaXNjX3JlbG9jLmRlZi4gICovCisrI2luY2x1ZGUgImNvbW1vbi1yZWxvYy5jIgorKworKworK2NvbnN0IGNoYXIgKgorK3BhcmlzY19pbml0IChlbGYsIG1hY2hpbmUsIGVoLCBlaGxlbikKKysgICAgIEVsZiAqZWxmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysgICAgIEdFbGZfSGFsZiBtYWNoaW5lIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysgICAgIEVibCAqZWg7CisrICAgICBzaXplX3QgZWhsZW47CisreworKyAgaW50IHBhNjQgPSAwOworKworKyAgLyogQ2hlY2sgd2hldGhlciB0aGUgRWxmX0JIIG9iamVjdCBoYXMgYSBzdWZmaWNlbnQgc2l6ZS4gICovCisrICBpZiAoZWhsZW4gPCBzaXplb2YgKEVibCkpCisrICAgIHJldHVybiBOVUxMOworKworKyAgaWYgKGVsZikgeworKyAgICBHRWxmX0VoZHIgZWhkcl9tZW07CisrICAgIEdFbGZfRWhkciAqZWhkciA9IGdlbGZfZ2V0ZWhkciAoZWxmLCAmZWhkcl9tZW0pOworKyAgICBpZiAoZWhkciAmJiAoZWhkci0+ZV9mbGFncyAmIEVGX1BBUklTQ19XSURFKSkKKysgICAgICBwYTY0ID0gMTsKKysgIH0KKysgIC8qIFdlIGhhbmRsZSBpdC4gICovCisrICBlaC0+bmFtZSA9ICJQQS1SSVNDIjsKKysgIHBhcmlzY19pbml0X3JlbG9jIChlaCk7CisrICBIT09LIChlaCwgcmVsb2Nfc2ltcGxlX3R5cGUpOworKyAgSE9PSyAoZWgsIG1hY2hpbmVfZmxhZ19jaGVjayk7CisrICBIT09LIChlaCwgc3ltYm9sX3R5cGVfbmFtZSk7CisrICBIT09LIChlaCwgc2VnbWVudF90eXBlX25hbWUpOworKyAgSE9PSyAoZWgsIHNlY3Rpb25fdHlwZV9uYW1lKTsKKysgIEhPT0sgKGVoLCByZWdpc3Rlcl9pbmZvKTsKKysgIGlmIChwYTY0KQorKyAgICBlaC0+cmV0dXJuX3ZhbHVlX2xvY2F0aW9uID0gcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl82NDsKKysgIGVsc2UKKysgICAgZWgtPnJldHVybl92YWx1ZV9sb2NhdGlvbiA9IHBhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fMzI7CisrCisrICByZXR1cm4gTU9EVkVSU0lPTjsKKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvcGFyaXNjX3JlZ3MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL3BhcmlzY19yZWdzLmMJMjAxNC0wNC0yMSAxMToxMjoxMi4yMjgxNTAyODAgKzAwMDAKK0BAIC0wLDAgKzEsMTU5IEBACisrLyogUmVnaXN0ZXIgbmFtZXMgYW5kIG51bWJlcnMgZm9yIFBBLVJJU0MgRFdBUkYuCisrICAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxkd2FyZi5oPgorKworKyNkZWZpbmUgQkFDS0VORCBwYXJpc2NfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKytzc2l6ZV90CisrcGFyaXNjX3JlZ2lzdGVyX2luZm8gKEVibCAqZWJsLCBpbnQgcmVnbm8sIGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLAorKwkJICAgICBjb25zdCBjaGFyICoqcHJlZml4LCBjb25zdCBjaGFyICoqc2V0bmFtZSwKKysJCSAgICAgaW50ICpiaXRzLCBpbnQgKnR5cGUpCisreworKyAgaW50IHBhNjQgPSAwOworKworKyAgaWYgKGVibC0+ZWxmKSB7CisrICAgIEdFbGZfRWhkciBlaGRyX21lbTsKKysgICAgR0VsZl9FaGRyICplaGRyID0gZ2VsZl9nZXRlaGRyIChlYmwtPmVsZiwgJmVoZHJfbWVtKTsKKysgICAgaWYgKGVoZHItPmVfZmxhZ3MgJiBFRl9QQVJJU0NfV0lERSkKKysgICAgICBwYTY0ID0gMTsKKysgIH0KKysKKysgIGludCBucmVncyA9IHBhNjQgPyAxMjcgOiAxMjg7CisrCisrICBpZiAobmFtZSA9PSBOVUxMKQorKyAgICByZXR1cm4gbnJlZ3M7CisrCisrICBpZiAocmVnbm8gPCAwIHx8IHJlZ25vID49IG5yZWdzIHx8IG5hbWVsZW4gPCA2KQorKyAgICByZXR1cm4gLTE7CisrCisrICAqcHJlZml4ID0gIiUiOworKworKyAgaWYgKHJlZ25vIDwgMzIpCisrICB7CisrICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgIGlmIChwYTY0KQorKyAgICB7CisrCSpiaXRzID0gNjQ7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgIAkqYml0cyA9IDMyOworKyAgICB9CisrICB9CisrICBlbHNlIGlmIChyZWdubyA9PSAzMikKKysgIHsKKysgICAgKnNldG5hbWUgPSAic3BlY2lhbCI7CisrICAgIGlmIChwYTY0KQorKyAgICB7CisrCSpiaXRzID0gNjsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgCSpiaXRzID0gNTsKKysgICAgfQorKyAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgIH0KKysgIGVsc2UKKysgIHsKKysgICAgKnNldG5hbWUgPSAiRlBVIjsKKysgICAgKnR5cGUgPSBEV19BVEVfZmxvYXQ7CisrICAgIGlmIChwYTY0KQorKyAgICB7CisrCSpiaXRzID0gNjQ7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgIAkqYml0cyA9IDMyOworKyAgICB9CisrICB9CisrCisrICBpZiAocmVnbm8gPCAzMykgeworKyAgICBzd2l0Y2ggKHJlZ25vKQorKyAgICAgIHsKKysgICAgICBjYXNlIDAgLi4uIDk6CisrICAgICAgICBuYW1lWzBdID0gJ3InOworKyAgICAgICAgbmFtZVsxXSA9IHJlZ25vICsgJzAnOworKyAgICAgICAgbmFtZWxlbiA9IDI7CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNlIDEwIC4uLiAzMToKKysgICAgICAgIG5hbWVbMF0gPSAncic7CisrICAgICAgICBuYW1lWzFdID0gcmVnbm8gLyAxMCArICcwJzsKKysgICAgICAgIG5hbWVbMl0gPSByZWdubyAlIDEwICsgJzAnOworKyAgICAgICAgbmFtZWxlbiA9IDM7CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNlIDMyOgorKwkqcHJlZml4ID0gTlVMTDsKKysJbmFtZVswXSA9ICdTJzsKKysJbmFtZVsxXSA9ICdBJzsKKysJbmFtZVsyXSA9ICdSJzsKKysJbmFtZWxlbiA9IDM7CisrCWJyZWFrOworKyAgICAgIH0KKysgIH0KKysgIGVsc2UgeworKyAgICBpZiAocGE2NCAmJiAoKHJlZ25vIC0gNzIpICUgMikpIHsKKysgICAgICAqc2V0bmFtZSA9IE5VTEw7CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysgICAgc3dpdGNoIChyZWdubykKKysgICAgICB7CisrICAgICAgY2FzZSA3MiArIDAgLi4uIDcyICsgMTE6CisrICAgICAgICBuYW1lWzBdID0gJ2YnOworKwluYW1lWzFdID0gJ3InOworKyAgICAgICAgbmFtZVsyXSA9IChyZWdubyArIDggLSA3MikgLyAyICsgJzAnOworKyAgICAgICAgbmFtZWxlbiA9IDM7CisrICAgICAgICBpZiAoKHJlZ25vICsgOCAtIDcyKSAlIDIpIHsKKysJICBuYW1lWzNdID0gJ1InOworKwkgIG5hbWVsZW4rKzsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2UgNzIgKyAxMiAuLi4gNzIgKyA1NToKKysgICAgICAgIG5hbWVbMF0gPSAnZic7CisrCW5hbWVbMV0gPSAncic7CisrICAgICAgICBuYW1lWzJdID0gKHJlZ25vICsgOCAtIDcyKSAvIDIgLyAxMCArICcwJzsKKysgICAgICAgIG5hbWVbM10gPSAocmVnbm8gKyA4IC0gNzIpIC8gMiAlIDEwICsgJzAnOworKyAgICAgICAgbmFtZWxlbiA9IDQ7CisrICAgICAgICBpZiAoKHJlZ25vICsgOCAtIDcyKSAlIDIpIHsKKysJICBuYW1lWzRdID0gJ1InOworKwkgIG5hbWVsZW4rKzsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICAgIGRlZmF1bHQ6CisrICAgICAgICAqc2V0bmFtZSA9IE5VTEw7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgICB9CisrICB9CisrICBuYW1lW25hbWVsZW4rK10gPSAnXDAnOworKyAgcmV0dXJuIG5hbWVsZW47CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL3BhcmlzY19yZWxvYy5kZWYKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9wYXJpc2NfcmVsb2MuZGVmCTIwMTQtMDQtMjEgMTE6MTI6MTIuMjI4MTUwMjgwICswMDAwCitAQCAtMCwwICsxLDEyOCBAQAorKy8qIExpc3QgdGhlIHJlbG9jYXRpb24gdHlwZXMgZm9yIFBBLVJJU0MuICAtKi0gQyAtKi0KKysgICBDb3B5cmlnaHQgKEMpIDIwMDUgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKy8qCSAgICBOQU1FLAkJUkVMfEVYRUN8RFlOCSovCisrCisrUkVMT0NfVFlQRSAoTk9ORSwJCUVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKERJUjMyLAkJUkVMfEVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKERJUjIxTCwJCVJFTHxFWEVDfERZTikKKytSRUxPQ19UWVBFIChESVIxN1IsCQlSRUwpCisrUkVMT0NfVFlQRSAoRElSMTdGLAkJUkVMKQorK1JFTE9DX1RZUEUgKERJUjE0UiwJCVJFTHxEWU4pCisrUkVMT0NfVFlQRSAoUENSRUwzMiwJCVJFTCkKKytSRUxPQ19UWVBFIChQQ1JFTDIxTCwJCVJFTCkKKytSRUxPQ19UWVBFIChQQ1JFTDE3UiwJCVJFTCkKKytSRUxPQ19UWVBFIChQQ1JFTDE3RiwJCVJFTCkKKytSRUxPQ19UWVBFIChQQ1JFTDE0UiwJCVJFTHxFWEVDKQorK1JFTE9DX1RZUEUgKERQUkVMMjFMLAkJUkVMKQorK1JFTE9DX1RZUEUgKERQUkVMMTRXUiwJCVJFTCkKKytSRUxPQ19UWVBFIChEUFJFTDE0RFIsICAgICAgICAgIFJFTCkKKytSRUxPQ19UWVBFIChEUFJFTDE0UiwJCVJFTCkKKytSRUxPQ19UWVBFIChHUFJFTDIxTCwJCTApCisrUkVMT0NfVFlQRSAoR1BSRUwxNFIsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGMjFMLAkJUkVMKQorK1JFTE9DX1RZUEUgKExUT0ZGMTRSLAkJUkVMKQorK1JFTE9DX1RZUEUgKERMVElORDE0RiwJCTApCisrUkVMT0NfVFlQRSAoU0VUQkFTRSwJCTApCisrUkVMT0NfVFlQRSAoU0VDUkVMMzIsCQlSRUwpCisrUkVMT0NfVFlQRSAoQkFTRVJFTDIxTCwJCTApCisrUkVMT0NfVFlQRSAoQkFTRVJFTDE3UiwJCTApCisrUkVMT0NfVFlQRSAoQkFTRVJFTDE0UiwJCTApCisrUkVMT0NfVFlQRSAoU0VHQkFTRSwJCTApCisrUkVMT0NfVFlQRSAoU0VHUkVMMzIsCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUT0ZGMjFMLAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNFIsCQkwKQorK1JFTE9DX1RZUEUgKFBMVE9GRjE0RiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjMyLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIyMUwsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjE0UiwJMCkKKytSRUxPQ19UWVBFIChGUFRSNjQsCQkwKQorK1JFTE9DX1RZUEUgKFBMQUJFTDMyLAkJUkVMfERZTikKKytSRUxPQ19UWVBFIChQQ1JFTDY0LAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDIyQywJCTApCisrUkVMT0NfVFlQRSAoUENSRUwyMkYsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMTRXUiwJCTApCisrUkVMT0NfVFlQRSAoUENSRUwxNERSLAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDE2RiwJCTApCisrUkVMT0NfVFlQRSAoUENSRUwxNldGLAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDE2REYsCQkwKQorK1JFTE9DX1RZUEUgKERJUjY0LAkJUkVMfERZTikKKytSRUxPQ19UWVBFIChESVIxNFdSLAkJUkVMKQorK1JFTE9DX1RZUEUgKERJUjE0RFIsCQlSRUwpCisrUkVMT0NfVFlQRSAoRElSMTZGLAkJUkVMKQorK1JFTE9DX1RZUEUgKERJUjE2V0YsCQlSRUwpCisrUkVMT0NfVFlQRSAoRElSMTZERiwJCVJFTCkKKytSRUxPQ19UWVBFIChHUFJFTDY0LAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE0V1IsCQkwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTREUiwJCTApCisrUkVMT0NfVFlQRSAoR1BSRUwxNkYsCQkwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTZXRiwJCTApCisrUkVMT0NfVFlQRSAoR1BSRUwxNkRGLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjY0LAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjE0V1IsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGMTREUiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkYxNkYsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGMTZXRiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkYxNkRGLAkJMCkKKytSRUxPQ19UWVBFIChTRUNSRUw2NCwJCTApCisrUkVMT0NfVFlQRSAoQkFTRVJFTDE0V1IsCTApCisrUkVMT0NfVFlQRSAoQkFTRVJFTDE0RFIsCTApCisrUkVMT0NfVFlQRSAoU0VHUkVMNjQsCQkwKQorK1JFTE9DX1RZUEUgKFBMVE9GRjE0V1IsCQkwKQorK1JFTE9DX1RZUEUgKFBMVE9GRjE0RFIsCQkwKQorK1JFTE9DX1RZUEUgKFBMVE9GRjE2RiwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTZXRiwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTZERiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjY0LAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIxNFdSLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIxNERSLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIxNkYsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjE2V0YsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjE2REYsCTApCisrUkVMT0NfVFlQRSAoQ09QWSwJCUVYRUMpCisrUkVMT0NfVFlQRSAoSVBMVCwJCUVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKEVQTFQsCQkwKQorK1JFTE9DX1RZUEUgKFRQUkVMMzIsCQlEWU4pCisrUkVMT0NfVFlQRSAoVFBSRUwyMUwsCQkwKQorK1JFTE9DX1RZUEUgKFRQUkVMMTRSLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDIxTCwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDE0UiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDE0RiwJMCkKKytSRUxPQ19UWVBFIChUUFJFTDY0LAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDE0V1IsCQkwKQorK1JFTE9DX1RZUEUgKFRQUkVMMTREUiwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwxNkYsCQkwKQorK1JFTE9DX1RZUEUgKFRQUkVMMTZXRiwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwxNkRGLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDY0LAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDE0V1IsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNERSLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTZGLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTZXRiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDE2REYsCTApCisrUkVMT0NfVFlQRSAoVExTX0RUUE1PRDMyLAlEWU4pCisrUkVMT0NfVFlQRSAoVExTX0RUUE1PRDY0LAlEWU4pCisrCisrI2RlZmluZSBOT19SRUxBVElWRV9SRUxPQyAgICAgICAxCitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvcGFyaXNjX3JldHZhbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvcGFyaXNjX3JldHZhbC5jCTIwMTQtMDQtMjEgMTE6MTI6MTIuMjI4MTUwMjgwICswMDAwCitAQCAtMCwwICsxLDIxMyBAQAorKy8qIEZ1bmN0aW9uIHJldHVybiB2YWx1ZSBsb2NhdGlvbiBmb3IgTGludXgvUEEtUklTQyBBQkkuCisrICAgQ29weXJpZ2h0IChDKSAyMDA1IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxkd2FyZi5oPgorKworKyNkZWZpbmUgQkFDS0VORCBwYXJpc2NfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysjaW5jbHVkZSAibGliZWJsX3BhcmlzYy5oIgorKworKy8qICVyMjgsIG9yIHBhaXIgJXIyOCwgJXIyOS4gICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19pbnRyZWczMltdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzI4IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzI5IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgIH07CisrCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19pbnRyZWdbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcyOCB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcyOSB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCisrICB9OworKyNkZWZpbmUgbmxvY19pbnRyZWcJMQorKyNkZWZpbmUgbmxvY19pbnRyZWdwYWlyCTQKKysKKysvKiAlZnI0TCwgb3IgcGFpciAlZnI0TCwgJWZyNFIgb24gcGEtMzIgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ZwcmVnMzJbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gNzIgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDczIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgIH07CisrI2RlZmluZSBubG9jX2ZwcmVnMzIgMgorKyNkZWZpbmUgbmxvY19mcHJlZ3BhaXIzMiA0CisrCisrLyogJGZyNCAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfZnByZWdbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gNzIgfSwKKysgIH07CisrI2RlZmluZSBubG9jX2ZwcmVnICAxCisrCisrI2lmIDAKKysvKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RydWN0dXJlIGFuZCBpcyBhY3R1YWxseSBzdG9yZWQgaW4gc3RhY2sgc3BhY2UKKysgICBwYXNzZWQgaW4gYSBoaWRkZW4gYXJndW1lbnQgYnkgdGhlIGNhbGxlci4gQWRkcmVzcyBvZiB0aGUgbG9jYXRpb24gaXMgc3RvcmVkCisrICAgaW4gJXIyOCBiZWZvcmUgZnVuY3Rpb24gY2FsbCwgYnV0IGl0IG1heSBiZSBjaGFuZ2VkIGJ5IGZ1bmN0aW9uLiAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfYWdncmVnYXRlW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfYnJlZzI4IH0sCisrICB9OworKyNkZWZpbmUgbmxvY19hZ2dyZWdhdGUgMQorKyNlbmRpZgorKworK3N0YXRpYyBpbnQKKytwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXyAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwLCBpbnQgcGE2NCkKKyt7CisrICBEd2FyZl9Xb3JkIHJlZ3NpemUgPSBwYTY0ID8gOCA6IDQ7CisrCisrICAvKiBTdGFydCB3aXRoIHRoZSBmdW5jdGlvbidzIHR5cGUsIGFuZCBnZXQgdGhlIERXX0FUX3R5cGUgYXR0cmlidXRlLAorKyAgICAgd2hpY2ggaXMgdGhlIHR5cGUgb2YgdGhlIHJldHVybiB2YWx1ZS4gICovCisrCisrICBEd2FyZl9BdHRyaWJ1dGUgYXR0cl9tZW07CisrICBEd2FyZl9BdHRyaWJ1dGUgKmF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAoZnVuY3R5cGVkaWUsIERXX0FUX3R5cGUsICZhdHRyX21lbSk7CisrICBpZiAoYXR0ciA9PSBOVUxMKQorKyAgICAvKiBUaGUgZnVuY3Rpb24gaGFzIG5vIHJldHVybiB2YWx1ZSwgbGlrZSBhIGB2b2lkJyBmdW5jdGlvbiBpbiBDLiAgKi8KKysgICAgcmV0dXJuIDA7CisrCisrICBEd2FyZl9EaWUgZGllX21lbTsKKysgIER3YXJmX0RpZSAqdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrICBpbnQgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysKKysgIC8qIEZvbGxvdyB0eXBlZGVmcyBhbmQgcXVhbGlmaWVycyB0byBnZXQgdG8gdGhlIGFjdHVhbCB0eXBlLiAgKi8KKysgIHdoaWxlICh0YWcgPT0gRFdfVEFHX3R5cGVkZWYKKysJIHx8IHRhZyA9PSBEV19UQUdfY29uc3RfdHlwZSB8fCB0YWcgPT0gRFdfVEFHX3ZvbGF0aWxlX3R5cGUKKysJIHx8IHRhZyA9PSBEV19UQUdfcmVzdHJpY3RfdHlwZSkKKysgICAgeworKyAgICAgIGF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysgICAgICB0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysgICAgICB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKyAgICB9CisrCisrICBzd2l0Y2ggKHRhZykKKysgICAgeworKyAgICBjYXNlIC0xOgorKyAgICAgIHJldHVybiAtMTsKKysKKysgICAgY2FzZSBEV19UQUdfc3VicmFuZ2VfdHlwZToKKysgICAgICBpZiAoISBkd2FyZl9oYXNhdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfYnl0ZV9zaXplKSkKKysJeworKwkgIGF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysJICB0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysJICB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKwl9CisrICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKysKKysgICAgY2FzZSBEV19UQUdfYmFzZV90eXBlOgorKyAgICBjYXNlIERXX1RBR19lbnVtZXJhdGlvbl90eXBlOgorKyAgICBjYXNlIERXX1RBR19wb2ludGVyX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3B0cl90b19tZW1iZXJfdHlwZToKKysgICAgICB7CisrICAgICAgICBEd2FyZl9Xb3JkIHNpemU7CisrCWlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9ieXRlX3NpemUsCisrCQkJCQkgJmF0dHJfbWVtKSwgJnNpemUpICE9IDApCisrCSAgeworKwkgICAgaWYgKHRhZyA9PSBEV19UQUdfcG9pbnRlcl90eXBlIHx8IHRhZyA9PSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlKQorKwkgICAgICBzaXplID0gNDsKKysJICAgIGVsc2UKKysJICAgICAgcmV0dXJuIC0xOworKwkgIH0KKysJaWYgKHRhZyA9PSBEV19UQUdfYmFzZV90eXBlKQorKwkgIHsKKysJICAgIER3YXJmX1dvcmQgZW5jb2Rpbmc7CisrCSAgICBpZiAoZHdhcmZfZm9ybXVkYXRhIChkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfZW5jb2RpbmcsCisrCQkJCQkgICAgICZhdHRyX21lbSksICZlbmNvZGluZykgIT0gMCkKKysJICAgICAgcmV0dXJuIC0xOworKworKwkgICAgaWYgKGVuY29kaW5nID09IERXX0FURV9mbG9hdCkKKysJICAgICAgeworKwkJaWYgKHBhNjQpIHsKKysJCSAgKmxvY3AgPSBsb2NfZnByZWc7CisrCQkgIGlmIChzaXplIDw9IDgpCisrCQkgICAgICByZXR1cm4gbmxvY19mcHJlZzsKKysJCX0KKysJCWVsc2UgeworKwkJICAqbG9jcCA9IGxvY19mcHJlZzMyOworKwkJICBpZiAoc2l6ZSA8PSA0KQorKwkJICAgIHJldHVybiBubG9jX2ZwcmVnMzI7CisrCQkgIGVsc2UgaWYgKHNpemUgPD0gOCkKKysJCSAgICByZXR1cm4gbmxvY19mcHJlZ3BhaXIzMjsKKysJCX0KKysJCWdvdG8gYWdncmVnYXRlOworKwkgICAgICB9CisrCSAgfQorKwlpZiAocGE2NCkKKysJICAqbG9jcCA9IGxvY19pbnRyZWc7CisrCWVsc2UKKysJICAqbG9jcCA9IGxvY19pbnRyZWczMjsKKysJaWYgKHNpemUgPD0gcmVnc2l6ZSkKKysJICByZXR1cm4gbmxvY19pbnRyZWc7CisrCWlmIChzaXplIDw9IDIgKiByZWdzaXplKQorKwkgIHJldHVybiBubG9jX2ludHJlZ3BhaXI7CisrCisrCS8qIEVsc2UgZmFsbCB0aHJvdWdoLiAgKi8KKysgICAgICB9CisrCisrICAgIGNhc2UgRFdfVEFHX3N0cnVjdHVyZV90eXBlOgorKyAgICBjYXNlIERXX1RBR19jbGFzc190eXBlOgorKyAgICBjYXNlIERXX1RBR191bmlvbl90eXBlOgorKyAgICBjYXNlIERXX1RBR19hcnJheV90eXBlOgorKyAgICBhZ2dyZWdhdGU6IHsKKysgICAgICAgIER3YXJmX1dvcmQgc2l6ZTsKKysJaWYgKGR3YXJmX2FnZ3JlZ2F0ZV9zaXplICh0eXBlZGllLCAmc2l6ZSkgIT0gMCkKKysJICByZXR1cm4gLTE7CisrCWlmIChwYTY0KQorKyAgICAgICAgICAqbG9jcCA9IGxvY19pbnRyZWc7CisrCWVsc2UKKysJICAqbG9jcCA9IGxvY19pbnRyZWczMjsKKysgICAgICAgIGlmIChzaXplIDw9IHJlZ3NpemUpCisrCSAgcmV0dXJuIG5sb2NfaW50cmVnOworKyAgICAgICAgaWYgKHNpemUgPD0gMiAqIHJlZ3NpemUpCisrCSAgcmV0dXJuIG5sb2NfaW50cmVncGFpcjsKKysjaWYgMAorKwkvKiB0aGVyZSBzaG91bGQgYmUgc29tZSB3YXkgdG8ga25vdyB0aGlzIGxvY2F0aW9uLi4uIEJ1dCBJIGRvIG5vdCBzZWUgaXQuICovCisrICAgICAgICAqbG9jcCA9IGxvY19hZ2dyZWdhdGU7CisrICAgICAgICByZXR1cm4gbmxvY19hZ2dyZWdhdGU7CisrI2VuZGlmCisrCS8qIGZhbGwgdGhyb3VnaC4gICovCisrICAgICAgfQorKyAgICB9CisrCisrICAvKiBYWFggV2UgZG9uJ3QgaGF2ZSBhIGdvb2Qgd2F5IHRvIHJldHVybiBzcGVjaWZpYyBlcnJvcnMgZnJvbSBlYmwgY2FsbHMuCisrICAgICBUaGlzIHZhbHVlIG1lYW5zIHdlIGRvIG5vdCB1bmRlcnN0YW5kIHRoZSB0eXBlLCBidXQgaXQgaXMgd2VsbC1mb3JtZWQKKysgICAgIERXQVJGIGFuZCBtaWdodCBiZSB2YWxpZC4gICovCisrICByZXR1cm4gLTI7CisrfQorKworK2ludAorK3BhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fMzIgKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyt7CisrICByZXR1cm4gcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8gKGZ1bmN0eXBlZGllLCBsb2NwLCAwKTsKKyt9CisrCisraW50CisrcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl82NCAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorK3sKKysgIHJldHVybiBwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXyAoZnVuY3R5cGVkaWUsIGxvY3AsIDEpOworK30KKysKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9wYXJpc2Nfc3ltYm9sLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9wYXJpc2Nfc3ltYm9sLmMJMjAxNC0wNC0yMSAxMToxMjoxMi4yMjgxNTAyODAgKzAwMDAKK0BAIC0wLDAgKzEsMTEyIEBACisrLyogUEEtUklTQyBzcGVjaWZpYyBzeW1ib2xpYyBuYW1lIGhhbmRsaW5nLgorKyAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAyLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGVsZi5oPgorKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQJCXBhcmlzY18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworK2NvbnN0IGNoYXIgKgorK3BhcmlzY19zZWdtZW50X3R5cGVfbmFtZSAoaW50IHNlZ21lbnQsIGNoYXIgKmJ1ZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrCQkJc2l6ZV90IGxlbiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkpCisreworKyAgc3dpdGNoIChzZWdtZW50KQorKyAgICB7CisrICAgIGNhc2UgUFRfUEFSSVNDX0FSQ0hFWFQ6CisrICAgICAgcmV0dXJuICJQQVJJU0NfQVJDSEVYVCI7CisrICAgIGNhc2UgUFRfUEFSSVNDX1VOV0lORDoKKysgICAgICByZXR1cm4gIlBBUklTQ19VTldJTkQiOworKyAgICBkZWZhdWx0OgorKyAgICAgIGJyZWFrOworKyAgICB9CisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrLyogUmV0dXJuIHN5bWJvbGljIHJlcHJlc2VudGF0aW9uIG9mIHN5bWJvbCB0eXBlLiAgKi8KKytjb25zdCBjaGFyICoKKytwYXJpc2Nfc3ltYm9sX3R5cGVfbmFtZShpbnQgc3ltYm9sLCBjaGFyICpidWYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorKyAgICBzaXplX3QgbGVuIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKKyt7CisrCWlmIChzeW1ib2wgPT0gU1RUX1BBUklTQ19NSUxMSUNPREUpCisrCSAgcmV0dXJuICJQQVJJU0NfTUlMTEkiOworKwlyZXR1cm4gTlVMTDsKKyt9CisrCisrLyogUmV0dXJuIHN5bWJvbGljIHJlcHJlc2VudGF0aW9uIG9mIHNlY3Rpb24gdHlwZS4gICovCisrY29uc3QgY2hhciAqCisrcGFyaXNjX3NlY3Rpb25fdHlwZV9uYW1lIChpbnQgdHlwZSwKKysJCQljaGFyICpidWYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorKwkJCXNpemVfdCBsZW4gX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpKQorK3sKKysgIHN3aXRjaCAodHlwZSkKKysgICAgeworKyAgICBjYXNlIFNIVF9QQVJJU0NfRVhUOgorKyAgICAgIHJldHVybiAiUEFSSVNDX0VYVCI7CisrICAgIGNhc2UgU0hUX1BBUklTQ19VTldJTkQ6CisrICAgICAgcmV0dXJuICJQQVJJU0NfVU5XSU5EIjsKKysgICAgY2FzZSBTSFRfUEFSSVNDX0RPQzoKKysgICAgICByZXR1cm4gIlBBUklTQ19ET0MiOworKyAgICB9CisrCisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrLyogQ2hlY2sgd2hldGhlciBtYWNoaW5lIGZsYWdzIGFyZSB2YWxpZC4gICovCisrYm9vbAorK3BhcmlzY19tYWNoaW5lX2ZsYWdfY2hlY2sgKEdFbGZfV29yZCBmbGFncykKKyt7CisrICBpZiAoZmxhZ3MgJn4gKEVGX1BBUklTQ19UUkFQTklMIHwgRUZfUEFSSVNDX0VYVCB8IEVGX1BBUklTQ19MU0IgfAorKwlFRl9QQVJJU0NfV0lERSB8IEVGX1BBUklTQ19OT19LQUJQIHwKKysJRUZfUEFSSVNDX0xBWllTV0FQIHwgRUZfUEFSSVNDX0FSQ0gpKQorKyAgICByZXR1cm4gMDsKKysKKysgIEdFbGZfV29yZCBhcmNoID0gZmxhZ3MgJiBFRl9QQVJJU0NfQVJDSDsKKysKKysgIHJldHVybiAoKGFyY2ggPT0gRUZBX1BBUklTQ18xXzApIHx8IChhcmNoID09IEVGQV9QQVJJU0NfMV8xKSB8fAorKyAgICAgIChhcmNoID09IEVGQV9QQVJJU0NfMl8wKSk7CisrfQorKworKy8qIENoZWNrIGZvciB0aGUgc2ltcGxlIHJlbG9jIHR5cGVzLiAgKi8KKytFbGZfVHlwZQorK3BhcmlzY19yZWxvY19zaW1wbGVfdHlwZSAoRWJsICplYmwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBpbnQgdHlwZSkKKyt7CisrICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgY2FzZSBSX1BBUklTQ19ESVI2NDoKKysgICAgY2FzZSBSX1BBUklTQ19TRUNSRUw2NDoKKysgICAgICByZXR1cm4gRUxGX1RfWFdPUkQ7CisrICAgIGNhc2UgUl9QQVJJU0NfRElSMzI6CisrICAgIGNhc2UgUl9QQVJJU0NfU0VDUkVMMzI6CisrICAgICAgcmV0dXJuIEVMRl9UX1dPUkQ7CisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEVMRl9UX05VTTsKKysgICAgfQorK30KK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9saWJlYmxfcGFyaXNjLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9saWJlYmxfcGFyaXNjLmgJMjAxNC0wNC0yMSAxMToxMjoxMi4yMjgxNTAyODAgKzAwMDAKK0BAIC0wLDAgKzEsOSBAQAorKyNpZm5kZWYgX0xJQkVCTF9IUFBBX0gKKysjZGVmaW5lIF9MSUJFQkxfSFBQQV9IIDEKKysKKysjaW5jbHVkZSA8bGliZHcuaD4KKysKKytleHRlcm4gaW50IHBhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fMzIoRHdhcmZfRGllICosIGNvbnN0IER3YXJmX09wICoqbG9jcCk7CisrZXh0ZXJuIGludCBwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXzY0KER3YXJmX0RpZSAqLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApOworKworKyNlbmRpZgorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTgub3JpZy9iYWNrZW5kcy9NYWtlZmlsZS5hbQkyMDE0LTA0LTIxIDExOjEyOjEyLjI1MjE0OTczNyArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTQtMDQtMjEgMTE6MTM6MTEuOTEwODAxMTA1ICswMDAwCitAQCAtMzMsMTEgKzMzLDEyIEBACisgCisgCisgbW9kdWxlcyA9IGkzODYgc2ggeDg2XzY0IGlhNjQgYWxwaGEgYXJtIGFhcmNoNjQgc3BhcmMgcHBjIHBwYzY0IHMzOTAgXAorLQkgIHRpbGVneAorKwkgIHRpbGVneCBwYXJpc2MKKyBsaWJlYmxfcGljID0gbGliZWJsX2kzODZfcGljLmEgbGliZWJsX3NoX3BpYy5hIGxpYmVibF94ODZfNjRfcGljLmEgICAgXAorIAkgICAgIGxpYmVibF9pYTY0X3BpYy5hIGxpYmVibF9hbHBoYV9waWMuYSBsaWJlYmxfYXJtX3BpYy5hICAgIFwKKyAJICAgICBsaWJlYmxfYWFyY2g2NF9waWMuYSBsaWJlYmxfc3BhcmNfcGljLmEgbGliZWJsX3BwY19waWMuYSBcCistCSAgICAgbGliZWJsX3BwYzY0X3BpYy5hIGxpYmVibF9zMzkwX3BpYy5hIGxpYmVibF90aWxlZ3hfcGljLmEKKysJICAgICBsaWJlYmxfcHBjNjRfcGljLmEgbGliZWJsX3MzOTBfcGljLmEgbGliZWJsX3RpbGVneF9waWMuYSBcCisrCSAgICAgbGliZWJsX3BhcmlzY19waWMuYQorIG5vaW5zdF9MSUJSQVJJRVMgPSAkKGxpYmVibF9waWMpCisgbm9pbnN0X0RBVEEgPSAkKGxpYmVibF9waWM6X3BpYy5hPS5zbykKKyAKK0BAIC0xMTYsNiArMTE3LDkgQEAKKyBsaWJlYmxfdGlsZWd4X3BpY19hX1NPVVJDRVMgPSAkKHRpbGVneF9TUkNTKQorIGFtX2xpYmVibF90aWxlZ3hfcGljX2FfT0JKRUNUUyA9ICQodGlsZWd4X1NSQ1M6LmM9Lm9zKQorIAorK3BhcmlzY19TUkNTID0gcGFyaXNjX2luaXQuYyBwYXJpc2Nfc3ltYm9sLmMgcGFyaXNjX3JlZ3MuYyBwYXJpc2NfcmV0dmFsLmMKKytsaWJlYmxfcGFyaXNjX3BpY19hX1NPVVJDRVMgPSAkKHBhcmlzY19TUkNTKQorK2FtX2xpYmVibF9wYXJpc2NfcGljX2FfT0JKRUNUUyA9ICQocGFyaXNjX1NSQ1M6LmM9Lm9zKQorIAorIGxpYmVibF8lLnNvIGxpYmVibF8lLm1hcDogbGliZWJsXyVfcGljLmEgJChsaWJlbGYpICQobGliZHcpCisgCUBybSAtZiAkKEA6LnNvPS5tYXApCitJbmRleDogZWxmdXRpbHMtMC4xNTgvbGliZWxmL2VsZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTgub3JpZy9saWJlbGYvZWxmLmgJMjAxNC0wNC0yMSAxMToxMjoxMi4yNTIxNDk3MzcgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9saWJlbGYvZWxmLmgJMjAxNC0wNC0yMSAxMToxMjoxMi4yMjgxNTAyODAgKzAwMDAKK0BAIC0xODE0LDE2ICsxODE0LDI0IEBACisgI2RlZmluZSBSX1BBUklTQ19QQ1JFTDE3RgkxMgkvKiAxNyBiaXRzIG9mIHJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QQ1JFTDE0UgkxNAkvKiBSaWdodCAxNCBiaXRzIG9mIHJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19EUFJFTDIxTAkxOAkvKiBMZWZ0IDIxIGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0RQUkVMMTRXUgkxOQorKyNkZWZpbmUgUl9QQVJJU0NfRFBSRUwxNERSCTIwCisgI2RlZmluZSBSX1BBUklTQ19EUFJFTDE0UgkyMgkvKiBSaWdodCAxNCBiaXRzIG9mIHJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19HUFJFTDIxTAkyNgkvKiBHUC1yZWxhdGl2ZSwgbGVmdCAyMSBiaXRzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0dQUkVMMTRSCTMwCS8qIEdQLXJlbGF0aXZlLCByaWdodCAxNCBiaXRzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGMjFMCTM0CS8qIExULXJlbGF0aXZlLCBsZWZ0IDIxIGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfTFRPRkYxNFIJMzgJLyogTFQtcmVsYXRpdmUsIHJpZ2h0IDE0IGJpdHMuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfRExUSU5EMTRGCTM5CisrI2RlZmluZSBSX1BBUklTQ19TRVRCQVNFCTQwCisgI2RlZmluZSBSX1BBUklTQ19TRUNSRUwzMgk0MQkvKiAzMiBiaXRzIHNlY3Rpb24gcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0JBU0VSRUwyMUwJNDIKKysjZGVmaW5lIFJfUEFSSVNDX0JBU0VSRUwxN1IJNDMKKysjZGVmaW5lIFJfUEFSSVNDX0JBU0VSRUwxNFIJNDYKKyAjZGVmaW5lIFJfUEFSSVNDX1NFR0JBU0UJNDgJLyogTm8gcmVsb2NhdGlvbiwgc2V0IHNlZ21lbnQgYmFzZS4gICovCisgI2RlZmluZSBSX1BBUklTQ19TRUdSRUwzMgk0OQkvKiAzMiBiaXRzIHNlZ21lbnQgcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BMVE9GRjIxTAk1MAkvKiBQTFQgcmVsLiBhZGRyZXNzLCBsZWZ0IDIxIGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMTRSCTU0CS8qIFBMVCByZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMTRGCTU1CisgI2RlZmluZSBSX1BBUklTQ19MVE9GRl9GUFRSMzIJNTcJLyogMzIgYml0cyBMVC1yZWwuIGZ1bmN0aW9uIHBvaW50ZXIuICovCisgI2RlZmluZSBSX1BBUklTQ19MVE9GRl9GUFRSMjFMCTU4CS8qIExULXJlbC4gZmN0IHB0ciwgbGVmdCAyMSBiaXRzLiAqLworICNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfRlBUUjE0Ugk2MgkvKiBMVC1yZWwuIGZjdCBwdHIsIHJpZ2h0IDE0IGJpdHMuICovCitAQCAtMTgzMiw2ICsxODQwLDcgQEAKKyAjZGVmaW5lIFJfUEFSSVNDX1BMQUJFTDIxTAk2NgkvKiBMZWZ0IDIxIGJpdHMgb2YgZmRlc2MgYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QTEFCRUwxNFIJNzAJLyogUmlnaHQgMTQgYml0cyBvZiBmZGVzYyBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMNjQJNzIJLyogNjQgYml0cyBQQy1yZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfUENSRUwyMkMJNzMKKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMjJGCTc0CS8qIDIyIGJpdHMgUEMtcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTRXUgk3NQkvKiBQQy1yZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUENSRUwxNERSCTc2CS8qIFBDIHJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCitAQCAtMTg1Nyw2ICsxODY2LDggQEAKKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGMTZXRgkxMDIJLyogMTYgYml0cyBMVC1yZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfTFRPRkYxNkRGCTEwMwkvKiAxNiBiaXRzIExULXJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19TRUNSRUw2NAkxMDQJLyogNjQgYml0cyBzZWN0aW9uIHJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19CQVNFUkVMMTRXUgkxMDcKKysjZGVmaW5lIFJfUEFSSVNDX0JBU0VSRUwxNERSCTEwOAorICNkZWZpbmUgUl9QQVJJU0NfU0VHUkVMNjQJMTEyCS8qIDY0IGJpdHMgc2VnbWVudCByZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMTRXUgkxMTUJLyogUExULXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNERSCTExNgkvKiBQTFQtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL202OGtfYmFja2VuZC5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvbTY4a19iYWNrZW5kLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjViNTY2ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL202OGtfYmFja2VuZC5kaWZmCkBAIC0wLDAgKzEsNDkzIEBACitGcm9tOiBLdXJ0IFJvZWNreCA8a3VydEByb2Vja3guYmU+CitGcm9tOiBUaG9yc3RlbiBHbGFzZXIgPHRnQG1pcmJzZC5kZT4KK1N1YmplY3Q6IG02OGsgc3VwcG9ydAorCitXcml0dGVuIGJ5IEt1cnQgUm9lY2t4LCBleGNlcHQgZm9yIHRoZSByZXR2YWwgc3VwcG9ydCB3aGljaCB3YXMgd3JpdHRlbgorYnkgVGhvcnN0ZW4gR2xhc2VyCisKKworSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL202OGtfaW5pdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbTY4a19pbml0LmMJMjAxNC0wNC0yMSAxMToxNDoyMy44MTMxNzU3MDQgKzAwMDAKK0BAIC0wLDAgKzEsNTAgQEAKKysvKiBJbml0aWFsaXphdGlvbiBvZiBtNjhrIHNwZWNpZmljIGJhY2tlbmQgbGlicmFyeS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDcgS3VydCBSb2Vja3ggPGt1cnRAcm9lY2t4LmJlPgorKworKyAgIFRoaXMgc29mdHdhcmUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFRoaXMgc29mdGFyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2RlZmluZSBCQUNLRU5ECQltNjhrXworKyNkZWZpbmUgUkVMT0NfUFJFRklYCVJfNjhLXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrLyogVGhpcyBkZWZpbmVzIHRoZSBjb21tb24gcmVsb2MgaG9va3MgYmFzZWQgb24gbTY4a19yZWxvYy5kZWYuICAqLworKyNpbmNsdWRlICJjb21tb24tcmVsb2MuYyIKKysKKysKKytjb25zdCBjaGFyICoKKyttNjhrX2luaXQgKGVsZiwgbWFjaGluZSwgZWgsIGVobGVuKQorKyAgICAgRWxmICplbGYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgR0VsZl9IYWxmIG1hY2hpbmUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgRWJsICplaDsKKysgICAgIHNpemVfdCBlaGxlbjsKKyt7CisrICAvKiBDaGVjayB3aGV0aGVyIHRoZSBFbGZfQkggb2JqZWN0IGhhcyBhIHN1ZmZpY2VudCBzaXplLiAgKi8KKysgIGlmIChlaGxlbiA8IHNpemVvZiAoRWJsKSkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICAvKiBXZSBoYW5kbGUgaXQuICAqLworKyAgZWgtPm5hbWUgPSAibTY4ayI7CisrICBtNjhrX2luaXRfcmVsb2MgKGVoKTsKKysgIEhPT0sgKGVoLCByZWxvY19zaW1wbGVfdHlwZSk7CisrICBIT09LIChlaCwgcmV0dXJuX3ZhbHVlX2xvY2F0aW9uKTsKKysgIEhPT0sgKGVoLCByZWdpc3Rlcl9pbmZvKTsKKysKKysgIHJldHVybiBNT0RWRVJTSU9OOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9tNjhrX3JlZ3MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL202OGtfcmVncy5jCTIwMTQtMDQtMjEgMTE6MTQ6MjMuODEzMTc1NzA0ICswMDAwCitAQCAtMCwwICsxLDEwNiBAQAorKy8qIFJlZ2lzdGVyIG5hbWVzIGFuZCBudW1iZXJzIGZvciBtNjhrIERXQVJGLgorKyAgIENvcHlyaWdodCAoQykgMjAwNyBLdXJ0IFJvZWNreCA8a3VydEByb2Vja3guYmU+CisrCisrICAgVGhpcyBzb2Z0d2FyZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxkd2FyZi5oPgorKworKyNkZWZpbmUgQkFDS0VORCBtNjhrXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrc3NpemVfdAorK202OGtfcmVnaXN0ZXJfaW5mbyAoRWJsICplYmwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorKwkJICAgaW50IHJlZ25vLCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwKKysJCSAgIGNvbnN0IGNoYXIgKipwcmVmaXgsIGNvbnN0IGNoYXIgKipzZXRuYW1lLAorKwkJICAgaW50ICpiaXRzLCBpbnQgKnR5cGUpCisreworKwlpZiAobmFtZSA9PSBOVUxMKQorKwkJcmV0dXJuIDI1OworKworKwlpZiAocmVnbm8gPCAwIHx8IHJlZ25vID4gMjQgfHwgbmFtZWxlbiA8IDUpCisrCQlyZXR1cm4gLTE7CisrCisrCSpwcmVmaXggPSAiJSI7CisrCSpiaXRzID0gMzI7CisrCSp0eXBlID0gKHJlZ25vIDwgOCA/IERXX0FURV9zaWduZWQKKysJCTogcmVnbm8gPCAxNiA/IERXX0FURV9hZGRyZXNzIDogRFdfQVRFX2Zsb2F0KTsKKysKKysJaWYgKHJlZ25vIDwgOCkKKysJeworKwkJKnNldG5hbWUgPSAiaW50ZWdlciI7CisrCX0KKysJZWxzZSBpZiAocmVnbm8gPCAxNikKKysJeworKwkJKnNldG5hbWUgPSAiYWRkcmVzcyI7CisrCX0KKysJZWxzZSBpZiAocmVnbm8gPCAyNCkKKysJeworKwkJKnNldG5hbWUgPSAiRlBVIjsKKysJfQorKwllbHNlCisrCXsKKysJCSpzZXRuYW1lID0gImFkZHJlc3MiOworKwkJKnR5cGUgPSBEV19BVEVfYWRkcmVzczsKKysJfQorKworKwlzd2l0Y2ggKHJlZ25vKQorKwl7CisrCWNhc2UgMCAuLi4gNzoKKysJCW5hbWVbMF0gPSAnZCc7CisrCQluYW1lWzFdID0gcmVnbm8gKyAnMCc7CisrCQluYW1lbGVuID0gMjsKKysJCWJyZWFrOworKworKwljYXNlIDggLi4uIDEzOgorKwkJbmFtZVswXSA9ICdhJzsKKysJCW5hbWVbMV0gPSByZWdubyAtIDggKyAnMCc7CisrCQluYW1lbGVuID0gMjsKKysJCWJyZWFrOworKworKwljYXNlIDE0OgorKwkJbmFtZVswXSA9ICdmJzsKKysJCW5hbWVbMV0gPSAncCc7CisrICAgCQluYW1lbGVuID0gMjsKKysJCWJyZWFrOworKworKwljYXNlIDE1OgorKwkJbmFtZVswXSA9ICdzJzsKKysJCW5hbWVbMV0gPSAncCc7CisrICAgCQluYW1lbGVuID0gMjsKKysJCWJyZWFrOworKworKwljYXNlIDE2IC4uLiAyMzoKKysJCW5hbWVbMF0gPSAnZic7CisrCQluYW1lWzFdID0gJ3AnOworKwkJbmFtZVsyXSA9IHJlZ25vIC0gMTYgKyAnMCc7CisrICAgCQluYW1lbGVuID0gMzsKKysJCWJyZWFrOworKworKwljYXNlIDI0OgorKwkJbmFtZVswXSA9ICdwJzsKKysJCW5hbWVbMV0gPSAnYyc7CisrCQluYW1lbGVuID0gMjsKKysJfQorKworKwluYW1lW25hbWVsZW4rK10gPSAnXDAnOworKwlyZXR1cm4gbmFtZWxlbjsKKyt9CisrCitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbTY4a19yZWxvYy5kZWYKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9tNjhrX3JlbG9jLmRlZgkyMDE0LTA0LTIxIDExOjE0OjIzLjgxMzE3NTcwNCArMDAwMAorQEAgLTAsMCArMSw0NSBAQAorKy8qIExpc3QgdGhlIHJlbG9jYXRpb24gdHlwZXMgZm9yIG02OGsuICAtKi0gQyAtKi0KKysgICBDb3B5cmlnaHQgKEMpIDIwMDcgS3VydCBSb2Vja3ggPGt1cnRAcm9lY2t4LmJlPgorKworKyAgIFRoaXMgc29mdHdhcmUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKyovCisrCisrLyogCSAgICBOQU1FLAkJUkVMfEVYRUN8RFlOCSovCisrCisrUkVMT0NfVFlQRSAoTk9ORSwJCTApCisrUkVMT0NfVFlQRSAoMzIsCQkJUkVMfEVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKDE2LAkJCVJFTCkKKytSRUxPQ19UWVBFICg4LAkJCVJFTCkKKytSRUxPQ19UWVBFIChQQzMyLAkJUkVMfEVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKFBDMTYsCQlSRUwpCisrUkVMT0NfVFlQRSAoUEM4LAkJUkVMKQorK1JFTE9DX1RZUEUgKEdPVDMyLAkJUkVMKQorK1JFTE9DX1RZUEUgKEdPVDE2LAkJUkVMKQorK1JFTE9DX1RZUEUgKEdPVDgsCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UMzJPLAkJUkVMKQorK1JFTE9DX1RZUEUgKEdPVDE2TywJCVJFTCkKKytSRUxPQ19UWVBFIChHT1Q4TywJCVJFTCkKKytSRUxPQ19UWVBFIChQTFQzMiwJCVJFTCkKKytSRUxPQ19UWVBFIChQTFQxNiwJCVJFTCkKKytSRUxPQ19UWVBFIChQTFQ4LAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDMyTywJCVJFTCkKKytSRUxPQ19UWVBFIChQTFQxNk8sCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUOE8sCQlSRUwpCisrUkVMT0NfVFlQRSAoQ09QWSwJCUVYRUMpCisrUkVMT0NfVFlQRSAoR0xPQl9EQVQsCQlFWEVDfERZTikKKytSRUxPQ19UWVBFIChKTVBfU0xPVCwJCUVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKFJFTEFUSVZFLAkJRVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoR05VX1ZUSU5IRVJJVCwJUkVMKQorK1JFTE9DX1RZUEUgKEdOVV9WVEVOVFJZLAlSRUwpCisrCitJbmRleDogZWxmdXRpbHMtMC4xNTgvbGliZWxmL2VsZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTgub3JpZy9saWJlbGYvZWxmLmgJMjAxNC0wNC0yMSAxMToxNDoyMy44MTMxNzU3MDQgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9saWJlbGYvZWxmLmgJMjAxNC0wNC0yMSAxMToxNDoyMy44MTMxNzU3MDQgKzAwMDAKK0BAIC0xMTU3LDYgKzExNTcsOSBAQAorICNkZWZpbmUgUl82OEtfR0xPQl9EQVQJMjAJCS8qIENyZWF0ZSBHT1QgZW50cnkgKi8KKyAjZGVmaW5lIFJfNjhLX0pNUF9TTE9UCTIxCQkvKiBDcmVhdGUgUExUIGVudHJ5ICovCisgI2RlZmluZSBSXzY4S19SRUxBVElWRQkyMgkJLyogQWRqdXN0IGJ5IHByb2dyYW0gYmFzZSAqLworKy8qIFRoZSBuZXh0IDIgYXJlIEdOVSBleHRlbnNpb25zIHRvIGVuYWJsZSBDKysgdnRhYmxlIGdhcmJhZ2UgY29sbGVjdGlvbi4gICovCisrI2RlZmluZSBSXzY4S19HTlVfVlRJTkhFUklUIDIzCisrI2RlZmluZSBSXzY4S19HTlVfVlRFTlRSWSAgIDI0CisgI2RlZmluZSBSXzY4S19UTFNfR0QzMiAgICAgIDI1ICAgICAgICAgIC8qIDMyIGJpdCBHT1Qgb2Zmc2V0IGZvciBHRCAqLworICNkZWZpbmUgUl82OEtfVExTX0dEMTYgICAgICAyNiAgICAgICAgICAvKiAxNiBiaXQgR09UIG9mZnNldCBmb3IgR0QgKi8KKyAjZGVmaW5lIFJfNjhLX1RMU19HRDggICAgICAgMjcgICAgICAgICAgLyogOCBiaXQgR09UIG9mZnNldCBmb3IgR0QgKi8KK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTU4Lm9yaWcvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxNC0wNC0yMSAxMToxNDoyMy44MTMxNzU3MDQgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9NYWtlZmlsZS5hbQkyMDE0LTA0LTIxIDExOjE0OjQ4LjM0NDYyMTE2NyArMDAwMAorQEAgLTMzLDEyICszMywxMiBAQAorIAorIAorIG1vZHVsZXMgPSBpMzg2IHNoIHg4Nl82NCBpYTY0IGFscGhhIGFybSBhYXJjaDY0IHNwYXJjIHBwYyBwcGM2NCBzMzkwIFwKKy0JICB0aWxlZ3ggcGFyaXNjIG1pcHMKKysJICB0aWxlZ3ggcGFyaXNjIG1pcHMgbTY4aworIGxpYmVibF9waWMgPSBsaWJlYmxfaTM4Nl9waWMuYSBsaWJlYmxfc2hfcGljLmEgbGliZWJsX3g4Nl82NF9waWMuYSAgICBcCisgCSAgICAgbGliZWJsX2lhNjRfcGljLmEgbGliZWJsX2FscGhhX3BpYy5hIGxpYmVibF9hcm1fcGljLmEgICAgXAorIAkgICAgIGxpYmVibF9hYXJjaDY0X3BpYy5hIGxpYmVibF9zcGFyY19waWMuYSBsaWJlYmxfcHBjX3BpYy5hIFwKKyAJICAgICBsaWJlYmxfcHBjNjRfcGljLmEgbGliZWJsX3MzOTBfcGljLmEgbGliZWJsX3RpbGVneF9waWMuYSBcCistCSAgICAgbGliZWJsX3BhcmlzY19waWMuYSBsaWJlYmxfbWlwc19waWMuYQorKwkgICAgIGxpYmVibF9wYXJpc2NfcGljLmEgbGliZWJsX21pcHNfcGljLmEgbGliZWJsX202OGtfcGljLmEKKyBub2luc3RfTElCUkFSSUVTID0gJChsaWJlYmxfcGljKQorIG5vaW5zdF9EQVRBID0gJChsaWJlYmxfcGljOl9waWMuYT0uc28pCisgCitAQCAtMTI1LDYgKzEyNSwxMCBAQAorIGxpYmVibF9taXBzX3BpY19hX1NPVVJDRVMgPSAkKG1pcHNfU1JDUykKKyBhbV9saWJlYmxfbWlwc19waWNfYV9PQkpFQ1RTID0gJChtaXBzX1NSQ1M6LmM9Lm9zKQorIAorK202OGtfU1JDUyA9IG02OGtfaW5pdC5jIG02OGtfc3ltYm9sLmMgbTY4a19yZWdzLmMgbTY4a19yZXR2YWwuYworK2xpYmVibF9tNjhrX3BpY19hX1NPVVJDRVMgPSAkKG02OGtfU1JDUykKKythbV9saWJlYmxfbTY4a19waWNfYV9PQkpFQ1RTID0gJChtNjhrX1NSQ1M6LmM9Lm9zKQorKworIGxpYmVibF8lLnNvIGxpYmVibF8lLm1hcDogbGliZWJsXyVfcGljLmEgJChsaWJlbGYpICQobGliZHcpCisgCUBybSAtZiAkKEA6LnNvPS5tYXApCisgCWVjaG8gJ0VMRlVUSUxTXyQoUEFDS0FHRV9WRVJTSU9OKSB7IGdsb2JhbDogJCpfaW5pdDsgbG9jYWw6ICo7IH07JyBcCitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbTY4a19zeW1ib2wuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL202OGtfc3ltYm9sLmMJMjAxNC0wNC0yMSAxMToxNDoyMy44MTMxNzU3MDQgKzAwMDAKK0BAIC0wLDAgKzEsNDMgQEAKKysvKiBtNjhrIHNwZWNpZmljIHN5bWJvbGljIG5hbWUgaGFuZGxpbmcuCisrICAgQ29weXJpZ2h0IChDKSAyMDA3IEt1cnQgUm9lY2t4IDxrdXJ0QHJvZWNreC5iZT4KKysKKysgICBUaGlzIHNvZnR3YXJlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBUaGlzIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8ZWxmLmg+CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKworKyNkZWZpbmUgQkFDS0VORAkJbTY4a18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworKy8qIENoZWNrIGZvciB0aGUgc2ltcGxlIHJlbG9jIHR5cGVzLiAgKi8KKytFbGZfVHlwZQorK202OGtfcmVsb2Nfc2ltcGxlX3R5cGUgKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgaW50IHR5cGUpCisreworKyAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAgIGNhc2UgUl82OEtfMzI6CisrICAgICAgcmV0dXJuIEVMRl9UX1NXT1JEOworKyAgICBjYXNlIFJfNjhLXzE2OgorKyAgICAgIHJldHVybiBFTEZfVF9IQUxGOworKyAgICBjYXNlIFJfNjhLXzg6CisrICAgICAgcmV0dXJuIEVMRl9UX0JZVEU7CisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEVMRl9UX05VTTsKKysgICAgfQorK30KK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9tNjhrX3JldHZhbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbTY4a19yZXR2YWwuYwkyMDE0LTA0LTIxIDExOjE0OjIzLjgxMzE3NTcwNCArMDAwMAorQEAgLTAsMCArMSwxNzIgQEAKKysvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgbG9jYXRpb24gZm9yIExpbnV4L202OGsgQUJJLgorKyAgIENvcHlyaWdodCAoQykgMjAwNS0yMDEwIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKGMpIDIwMTEgVGhvcnN0ZW4gR2xhc2VyLCBEZWJpYW4uCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8ZHdhcmYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQgbTY4a18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworKworKy8qICVkMCwgb3IgcGFpciAlZDAsICVkMSwgb3IgJWEwICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19pbnRyZWdbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcwIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzEgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgfTsKKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX3B0cnJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzggfSwKKysgIH07CisrI2RlZmluZSBubG9jX2ludHJlZwkxCisrI2RlZmluZSBubG9jX2ludHJlZ3BhaXIJNAorKyNkZWZpbmUgbmxvY19wdHJyZWcJMQorKworKy8qICVmMCAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfZnByZWdbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcxNiB9CisrICB9OworKyNkZWZpbmUgbmxvY19mcHJlZwkxCisrCisrLyogU3RydWN0dXJlcyBhcmUgYSBiaXQgbW9yZSBjb21wbGljYXRlZCAtIHNtYWxsIHN0cnVjdHVyZXMgYXJlIHJldHVybmVkCisrICAgaW4gJWQwIC8gJWQxICgtZnJlZy1zdHJ1Y3QtcmV0dXJuIHdoaWNoIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCksIGxhcmdlCisrICAgc3RydWN0dXJlcyB1c2UgJWExIChpbiBjb25zdHJhc3QgdG8gdGhlIFNZU1YgcHNBQkkgd2hpY2ggc2F5cyAlYTApIGFzCisrICAgcmVlbnRyYW50IHN0b3JhZ2Ugc3BhY2UgaW5kaWNhdG9yLiAgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2FnZ3JlZ2F0ZVtdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX2JyZWc5LCAubnVtYmVyID0gMCB9CisrICB9OworKyNkZWZpbmUgbmxvY19hZ2dyZWdhdGUgMQorKworK2ludAorK202OGtfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisreworKyAgRHdhcmZfV29yZCBzaXplOworKworKyAgLyogU3RhcnQgd2l0aCB0aGUgZnVuY3Rpb24ncyB0eXBlLCBhbmQgZ2V0IHRoZSBEV19BVF90eXBlIGF0dHJpYnV0ZSwKKysgICAgIHdoaWNoIGlzIHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gdmFsdWUuICAqLworKworKyAgRHdhcmZfQXR0cmlidXRlIGF0dHJfbWVtOworKyAgRHdhcmZfQXR0cmlidXRlICphdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKGZ1bmN0eXBlZGllLCBEV19BVF90eXBlLAorKwkJCQkJCSZhdHRyX21lbSk7CisrICBpZiAoYXR0ciA9PSBOVUxMKQorKyAgICAvKiBUaGUgZnVuY3Rpb24gaGFzIG5vIHJldHVybiB2YWx1ZSwgbGlrZSBhIGB2b2lkJyBmdW5jdGlvbiBpbiBDLiAgKi8KKysgICAgcmV0dXJuIDA7CisrCisrICBEd2FyZl9EaWUgZGllX21lbTsKKysgIER3YXJmX0RpZSAqdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrICBpbnQgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysKKysgIC8qIEZvbGxvdyB0eXBlZGVmcyBhbmQgcXVhbGlmaWVycyB0byBnZXQgdG8gdGhlIGFjdHVhbCB0eXBlLiAgKi8KKysgIHdoaWxlICh0YWcgPT0gRFdfVEFHX3R5cGVkZWYKKysJIHx8IHRhZyA9PSBEV19UQUdfY29uc3RfdHlwZSB8fCB0YWcgPT0gRFdfVEFHX3ZvbGF0aWxlX3R5cGUKKysJIHx8IHRhZyA9PSBEV19UQUdfcmVzdHJpY3RfdHlwZSkKKysgICAgeworKyAgICAgIGF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysgICAgICB0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysgICAgICB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKyAgICB9CisrCisrICBzd2l0Y2ggKHRhZykKKysgICAgeworKyAgICBjYXNlIC0xOgorKyAgICAgIHJldHVybiAtMTsKKysKKysgICAgY2FzZSBEV19UQUdfc3VicmFuZ2VfdHlwZToKKysgICAgICBpZiAoISBkd2FyZl9oYXNhdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfYnl0ZV9zaXplKSkKKysJeworKwkgIGF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysJICB0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysJICB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKwl9CisrICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKysKKysgICAgY2FzZSBEV19UQUdfYmFzZV90eXBlOgorKyAgICBjYXNlIERXX1RBR19lbnVtZXJhdGlvbl90eXBlOgorKyAgICBjYXNlIERXX1RBR19wb2ludGVyX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3B0cl90b19tZW1iZXJfdHlwZToKKysgICAgICBpZiAoZHdhcmZfZm9ybXVkYXRhIChkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfYnl0ZV9zaXplLAorKwkJCQkJCSAmYXR0cl9tZW0pLCAmc2l6ZSkgIT0gMCkKKysJeworKwkgIGlmICh0YWcgPT0gRFdfVEFHX3BvaW50ZXJfdHlwZSB8fCB0YWcgPT0gRFdfVEFHX3B0cl90b19tZW1iZXJfdHlwZSkKKysJICAgIHNpemUgPSA0OworKwkgIGVsc2UKKysJICAgIHJldHVybiAtMTsKKysJfQorKyAgICAgIGlmICh0YWcgPT0gRFdfVEFHX3BvaW50ZXJfdHlwZSB8fCB0YWcgPT0gRFdfVEFHX3B0cl90b19tZW1iZXJfdHlwZSkKKysJeworKwkgICpsb2NwID0gbG9jX3B0cnJlZzsKKysgICAgICAgICAgcmV0dXJuIG5sb2NfcHRycmVnOworKwl9CisrICAgICAgaWYgKHRhZyA9PSBEV19UQUdfYmFzZV90eXBlKQorKwl7CisrCSAgRHdhcmZfV29yZCBlbmNvZGluZzsKKysJICBpZiAoZHdhcmZfZm9ybXVkYXRhIChkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfZW5jb2RpbmcsCisrCQkJCQkJICAgICAmYXR0cl9tZW0pLAorKwkJCSAgICAgICAmZW5jb2RpbmcpICE9IDApCisrCSAgICByZXR1cm4gLTE7CisrCSAgaWYgKGVuY29kaW5nID09IERXX0FURV9mbG9hdCkKKysJICAgIHsKKysJICAgICAgLyogWFhYIHJlYWxseSAxMD8gKi8KKysgICAgICAgICAgICAgIGlmIChzaXplID4gMTApCisrICAgICAgICAgICAgICAgIHJldHVybiAtMjsKKysgICAgICAgICAgICAgICpsb2NwID0gbG9jX2ZwcmVnOworKyAgICAgICAgICAgICAgcmV0dXJuIG5sb2NfZnByZWc7CisrCSAgICB9CisrCX0KKysgICAgICBpZiAoc2l6ZSA8PSA4KQorKwl7CisrCWludHJlZzoKKysJICAvKiBYWFggY2hlY2sgZW5kaWFubmVzcyBvZiBkd29yZCBwYWlyLCBpbnQ2NCB2cyBhZ2dyZWdhdGUgKi8KKysJICAqbG9jcCA9IGxvY19pbnRyZWc7CisrCSAgcmV0dXJuIHNpemUgPD0gNCA/IG5sb2NfaW50cmVnIDogbmxvY19pbnRyZWdwYWlyOworKwl9CisrCisrICAgIGFnZ3JlZ2F0ZToKKysgICAgICAqbG9jcCA9IGxvY19hZ2dyZWdhdGU7CisrICAgICAgcmV0dXJuIG5sb2NfYWdncmVnYXRlOworKworKyAgICBjYXNlIERXX1RBR19zdHJ1Y3R1cmVfdHlwZToKKysgICAgY2FzZSBEV19UQUdfY2xhc3NfdHlwZToKKysgICAgY2FzZSBEV19UQUdfdW5pb25fdHlwZToKKysgICAgY2FzZSBEV19UQUdfYXJyYXlfdHlwZToKKysgICAgICBpZiAoZHdhcmZfYWdncmVnYXRlX3NpemUgKHR5cGVkaWUsICZzaXplKSA9PSAwCisrCSAgJiYgc2l6ZSA+IDAgJiYgc2l6ZSA8PSA4KQorKwkvKiBub3QgYWNjdXJhdGUgZm9yIGEgc3RydWN0IHdob3NlIG9ubHkgbWVtYmVyIGlzIGEgZmxvYXQgKi8KKysJZ290byBpbnRyZWc7CisrICAgICAgZ290byBhZ2dyZWdhdGU7CisrICAgIH0KKysKKysgIC8qIFhYWCBXZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9ycyBmcm9tIGVibCBjYWxscy4KKysgICAgIFRoaXMgdmFsdWUgbWVhbnMgd2UgZG8gbm90IHVuZGVyc3RhbmQgdGhlIHR5cGUsIGJ1dCBpdCBpcyB3ZWxsLWZvcm1lZAorKyAgICAgRFdBUkYgYW5kIG1pZ2h0IGJlIHZhbGlkLiAgKi8KKysgIHJldHVybiAtMjsKKyt9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9taXBzX2JhY2tlbmQuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL21pcHNfYmFja2VuZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3M2EzZjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9taXBzX2JhY2tlbmQuZGlmZgpAQCAtMCwwICsxLDcxMiBAQAorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL21pcHNfaW5pdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbWlwc19pbml0LmMJMjAxNC0wNC0yMSAxMToxMzozNi45MTAyMzU5NjUgKzAwMDAKK0BAIC0wLDAgKzEsNjAgQEAKKysvKiBJbml0aWFsaXphdGlvbiBvZiBtaXBzIHNwZWNpZmljIGJhY2tlbmQgbGlicmFyeS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDYgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjZGVmaW5lIEJBQ0tFTkQJCW1pcHNfCisrI2RlZmluZSBSRUxPQ19QUkVGSVgJUl9NSVBTXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrLyogVGhpcyBkZWZpbmVzIHRoZSBjb21tb24gcmVsb2MgaG9va3MgYmFzZWQgb24gbWlwc19yZWxvYy5kZWYuICAqLworKyNpbmNsdWRlICJjb21tb24tcmVsb2MuYyIKKysKKytjb25zdCBjaGFyICoKKyttaXBzX2luaXQgKGVsZiwgbWFjaGluZSwgZWgsIGVobGVuKQorKyAgICAgRWxmICplbGYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgR0VsZl9IYWxmIG1hY2hpbmUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgRWJsICplaDsKKysgICAgIHNpemVfdCBlaGxlbjsKKyt7CisrICAvKiBDaGVjayB3aGV0aGVyIHRoZSBFbGZfQkggb2JqZWN0IGhhcyBhIHN1ZmZpY2VudCBzaXplLiAgKi8KKysgIGlmIChlaGxlbiA8IHNpemVvZiAoRWJsKSkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICAvKiBXZSBoYW5kbGUgaXQuICAqLworKyAgaWYgKG1hY2hpbmUgPT0gRU1fTUlQUykKKysgICAgZWgtPm5hbWUgPSAiTUlQUyBSMzAwMCBiaWctZW5kaWFuIjsKKysgIGVsc2UgaWYgKG1hY2hpbmUgPT0gRU1fTUlQU19SUzNfTEUpCisrICAgIGVoLT5uYW1lID0gIk1JUFMgUjMwMDAgbGl0dGxlLWVuZGlhbiI7CisrCisrICBtaXBzX2luaXRfcmVsb2MgKGVoKTsKKysgIEhPT0sgKGVoLCByZWxvY19zaW1wbGVfdHlwZSk7CisrICBIT09LIChlaCwgcmV0dXJuX3ZhbHVlX2xvY2F0aW9uKTsKKysgIEhPT0sgKGVoLCByZWdpc3Rlcl9pbmZvKTsKKysKKysgIHJldHVybiBNT0RWRVJTSU9OOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9taXBzX3JlZ3MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL21pcHNfcmVncy5jCTIwMTQtMDQtMjEgMTE6MTM6MzYuOTEwMjM1OTY1ICswMDAwCitAQCAtMCwwICsxLDEwNCBAQAorKy8qIFJlZ2lzdGVyIG5hbWVzIGFuZCBudW1iZXJzIGZvciBNSVBTIERXQVJGLgorKyAgIENvcHlyaWdodCAoQykgMjAwNiBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8ZHdhcmYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQgbWlwc18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworK3NzaXplX3QKKyttaXBzX3JlZ2lzdGVyX2luZm8gKEVibCAqZWJsIF9fYXR0cmlidXRlX18oKHVudXNlZCkpLAorKwkJICAgIGludCByZWdubywgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sCisrCQkgICAgY29uc3QgY2hhciAqKnByZWZpeCwgY29uc3QgY2hhciAqKnNldG5hbWUsCisrCQkgICAgaW50ICpiaXRzLCBpbnQgKnR5cGUpCisreworKyAgaWYgKG5hbWUgPT0gTlVMTCkKKysgICAgcmV0dXJuIDY2OworKworKyAgaWYgKHJlZ25vIDwgMCB8fCByZWdubyA+IDY1IHx8IG5hbWVsZW4gPCA0KQorKyAgICByZXR1cm4gLTE7CisrCisrICAqcHJlZml4ID0gIiQiOworKworKyAgaWYgKHJlZ25vIDwgMzIpCisrICAgIHsKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICBpZiAocmVnbm8gPCAzMiArIDEwKQorKyAgICAgICAgeworKyAgICAgICAgICBuYW1lWzBdID0gcmVnbm8gKyAnMCc7CisrICAgICAgICAgIG5hbWVsZW4gPSAxOworKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgbmFtZVswXSA9IChyZWdubyAvIDEwKSArICcwJzsKKysgICAgICAgICAgbmFtZVsxXSA9IChyZWdubyAlIDEwKSArICcwJzsKKysgICAgICAgICAgbmFtZWxlbiA9IDI7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKHJlZ25vIDwgNjQpCisrICAgIHsKKysgICAgICAqc2V0bmFtZSA9ICJGUFUiOworKyAgICAgICp0eXBlID0gRFdfQVRFX2Zsb2F0OworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgbmFtZVswXSA9ICdmJzsKKysgICAgICBpZiAocmVnbm8gPCAzMiArIDEwKQorKwl7CisrCSAgbmFtZVsxXSA9IChyZWdubyAtIDMyKSArICcwJzsKKysJICBuYW1lbGVuID0gMjsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIG5hbWVbMV0gPSAocmVnbm8gLSAzMikgLyAxMCArICcwJzsKKysJICBuYW1lWzJdID0gKHJlZ25vIC0gMzIpICUgMTAgKyAnMCc7CisrCSAgbmFtZWxlbiA9IDM7CisrCX0KKysgICAgfQorKyAgZWxzZSBpZiAocmVnbm8gPT0gNjQpCisrICAgIHsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICBuYW1lWzBdID0gJ2gnOworKyAgICAgIG5hbWVbMV0gPSAnaSc7CisrICAgICAgbmFtZWxlbiA9IDI7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIG5hbWVbMF0gPSAnbCc7CisrICAgICAgbmFtZVsxXSA9ICdvJzsKKysgICAgICBuYW1lbGVuID0gMjsKKysgICAgfQorKworKyAgbmFtZVtuYW1lbGVuKytdID0gJ1wwJzsKKysgIHJldHVybiBuYW1lbGVuOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9taXBzX3JlbG9jLmRlZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL21pcHNfcmVsb2MuZGVmCTIwMTQtMDQtMjEgMTE6MTM6MzYuOTEwMjM1OTY1ICswMDAwCitAQCAtMCwwICsxLDc5IEBACisrLyogTGlzdCB0aGUgcmVsb2NhdGlvbiB0eXBlcyBmb3IgbWlwcy4gIC0qLSBDIC0qLQorKyAgIENvcHlyaWdodCAoQykgMjAwNiBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrLyogCSAgICBOQU1FLAkJUkVMfEVYRUN8RFlOCSovCisrCisrUkVMT0NfVFlQRSAoTk9ORSwgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKDE2LCAgICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFICgzMiwgICAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoUkVMMzIsICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKDI2LCAgICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChISTE2LCAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoTE8xNiwgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTYsICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChMSVRFUkFMLCAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UMTYsICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFBDMTYsICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChDQUxMMTYsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR1BSRUwzMiwgICAgICAgICAgICAwKQorKworK1JFTE9DX1RZUEUgKFNISUZUNSwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChTSElGVDYsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoNjQsICAgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVF9ESVNQLCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1RfUEFHRSwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UX09GU1QsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVF9ISTE2LCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1RfTE8xNiwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoU1VCLCAgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKElOU0VSVF9BLCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChJTlNFUlRfQiwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoREVMRVRFLCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEhJR0hFUiwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChISUdIRVNULCAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoQ0FMTF9ISTE2LCAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKENBTExfTE8xNiwgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChTQ05fRElTUCwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoUkVMMTYsICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEFERF9JTU1FRElBVEUsICAgICAgMCkKKytSRUxPQ19UWVBFIChQSlVNUCwgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoUkVMR09ULCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEpBTFIsICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQTU9EMzIsICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0RUUFJFTDMyLCAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBNT0Q2NCwgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQUkVMNjQsICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0dELCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19MRE0sICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQUkVMX0hJMTYsICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0RUUFJFTF9MTzE2LCAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19HT1RUUFJFTCwgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfVFBSRUwzMiwgICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX1RQUkVMNjQsICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19UUFJFTF9ISTE2LCAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfVFBSRUxfTE8xNiwgICAgIDApCisrCisrI2RlZmluZSBOT19DT1BZX1JFTE9DIDEKKysjZGVmaW5lIE5PX1JFTEFUSVZFX1JFTE9DIDEKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9taXBzX3JldHZhbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbWlwc19yZXR2YWwuYwkyMDE0LTA0LTIxIDExOjEzOjM2LjkxMDIzNTk2NSArMDAwMAorQEAgLTAsMCArMSwzMjEgQEAKKysvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgbG9jYXRpb24gZm9yIExpbnV4L21pcHMgQUJJLgorKyAgIENvcHlyaWdodCAoQykgMjAwNSBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPGR3YXJmLmg+CisrI2luY2x1ZGUgPGVsZi5oPgorKworKyNpbmNsdWRlICIuLi9saWJlYmwvbGliZWJsUC5oIgorKyNpbmNsdWRlICIuLi9saWJkdy9saWJkd1AuaCIKKysKKysjZGVmaW5lIEJBQ0tFTkQgbWlwc18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworKy8qIFRoZSBBQkkgb2YgdGhlIGZpbGUuICBBbHNvIHNlZSBFRl9NSVBTX0FCSTIgYWJvdmUuICovCisrI2RlZmluZSBFRl9NSVBTX0FCSQkJMHgwMDAwRjAwMAorKworKy8qIFRoZSBvcmlnaW5hbCBvMzIgYWJpLiAqLworKyNkZWZpbmUgRV9NSVBTX0FCSV9PMzIgICAgICAgICAgMHgwMDAwMTAwMAorKworKy8qIE8zMiBleHRlbmRlZCB0byB3b3JrIG9uIDY0IGJpdCBhcmNoaXRlY3R1cmVzICovCisrI2RlZmluZSBFX01JUFNfQUJJX082NCAgICAgICAgICAweDAwMDAyMDAwCisrCisrLyogRUFCSSBpbiAzMiBiaXQgbW9kZSAqLworKyNkZWZpbmUgRV9NSVBTX0FCSV9FQUJJMzIgICAgICAgMHgwMDAwMzAwMAorKworKy8qIEVBQkkgaW4gNjQgYml0IG1vZGUgKi8KKysjZGVmaW5lIEVfTUlQU19BQklfRUFCSTY0ICAgICAgIDB4MDAwMDQwMDAKKysKKysvKiBBbGwgdGhlIHBvc3NpYmxlIE1JUFMgQUJJcy4gKi8KKytlbnVtIG1pcHNfYWJpCisrICB7CisrICAgIE1JUFNfQUJJX1VOS05PV04gPSAwLAorKyAgICBNSVBTX0FCSV9OMzIsCisrICAgIE1JUFNfQUJJX08zMiwKKysgICAgTUlQU19BQklfTjY0LAorKyAgICBNSVBTX0FCSV9PNjQsCisrICAgIE1JUFNfQUJJX0VBQkkzMiwKKysgICAgTUlQU19BQklfRUFCSTY0LAorKyAgICBNSVBTX0FCSV9MQVNUCisrICB9OworKworKy8qIEZpbmQgdGhlIG1pcHMgQUJJIG9mIHRoZSBjdXJyZW50IGZpbGUgKi8KKytlbnVtIG1pcHNfYWJpIGZpbmRfbWlwc19hYmkoRWxmICplbGYpCisreworKyAgR0VsZl9FaGRyIGVoZHJfbWVtOworKyAgR0VsZl9FaGRyICplaGRyID0gZ2VsZl9nZXRlaGRyIChlbGYsICZlaGRyX21lbSk7CisrCisrICBpZiAoZWhkciA9PSBOVUxMKQorKyAgICByZXR1cm4gTUlQU19BQklfTEFTVDsKKysKKysgIEdFbGZfV29yZCBlbGZfZmxhZ3MgPSBlaGRyLT5lX2ZsYWdzOworKworKyAgLyogQ2hlY2sgZWxmX2ZsYWdzIHRvIHNlZSBpZiBpdCBzcGVjaWZpZXMgdGhlIEFCSSBiZWluZyB1c2VkLiAgKi8KKysgIHN3aXRjaCAoKGVsZl9mbGFncyAmIEVGX01JUFNfQUJJKSkKKysgICAgeworKyAgICBjYXNlIEVfTUlQU19BQklfTzMyOgorKyAgICAgIHJldHVybiBNSVBTX0FCSV9PMzI7CisrICAgIGNhc2UgRV9NSVBTX0FCSV9PNjQ6CisrICAgICAgcmV0dXJuIE1JUFNfQUJJX082NDsKKysgICAgY2FzZSBFX01JUFNfQUJJX0VBQkkzMjoKKysgICAgICByZXR1cm4gTUlQU19BQklfRUFCSTMyOworKyAgICBjYXNlIEVfTUlQU19BQklfRUFCSTY0OgorKyAgICAgIHJldHVybiBNSVBTX0FCSV9FQUJJNjQ7CisrICAgIGRlZmF1bHQ6CisrICAgICAgaWYgKChlbGZfZmxhZ3MgJiBFRl9NSVBTX0FCSTIpKQorKwlyZXR1cm4gTUlQU19BQklfTjMyOworKyAgICB9CisrCisrICAvKiBHQ0MgY3JlYXRlcyBhIHBzZXVkby1zZWN0aW9uIHdob3NlIG5hbWUgZGVzY3JpYmVzIHRoZSBBQkkuICAqLworKyAgc2l6ZV90IHNoc3RybmR4OworKyAgaWYgKGVsZl9nZXRzaGRyc3RybmR4IChlbGYsICZzaHN0cm5keCkgPCAwKQorKyAgICByZXR1cm4gTUlQU19BQklfTEFTVDsKKysKKysgIGNvbnN0IGNoYXIgKm5hbWU7CisrICBFbGZfU2NuICpzY24gPSBOVUxMOworKyAgd2hpbGUgKChzY24gPSBlbGZfbmV4dHNjbiAoZWxmLCBzY24pKSAhPSBOVUxMKQorKyAgICB7CisrICAgICAgR0VsZl9TaGRyIHNoZHJfbWVtOworKyAgICAgIEdFbGZfU2hkciAqc2hkciA9IGdlbGZfZ2V0c2hkciAoc2NuLCAmc2hkcl9tZW0pOworKyAgICAgIGlmIChzaGRyID09IE5VTEwpCisrICAgICAgICByZXR1cm4gTUlQU19BQklfTEFTVDsKKysKKysgICAgICBuYW1lID0gZWxmX3N0cnB0ciAoZWxmLCBzaHN0cm5keCwgc2hkci0+c2hfbmFtZSkgPzogIiI7CisrICAgICAgaWYgKHN0cm5jbXAgKG5hbWUsICIubWRlYnVnLiIsIDgpICE9IDApCisrICAgICAgICBjb250aW51ZTsKKysKKysgICAgICBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5hYmkzMiIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfTzMyOworKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuYWJpTjMyIikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9OMzI7CisrICAgICAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5hYmk2NCIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfTjY0OworKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuYWJpTzY0IikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9PNjQ7CisrICAgICAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5lYWJpMzIiKSA9PSAwKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX0VBQkkzMjsKKysgICAgICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmVhYmk2NCIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfRUFCSTY0OworKyAgICAgIGVsc2UKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9VTktOT1dOOworKyAgICB9CisrCisrICByZXR1cm4gTUlQU19BQklfVU5LTk9XTjsKKyt9CisrCisrdW5zaWduZWQgaW50CisrbWlwc19hYmlfcmVnc2l6ZSAoZW51bSBtaXBzX2FiaSBhYmkpCisreworKyAgc3dpdGNoIChhYmkpCisrICAgIHsKKysgICAgY2FzZSBNSVBTX0FCSV9FQUJJMzI6CisrICAgIGNhc2UgTUlQU19BQklfTzMyOgorKyAgICAgIHJldHVybiA0OworKyAgICBjYXNlIE1JUFNfQUJJX04zMjoKKysgICAgY2FzZSBNSVBTX0FCSV9ONjQ6CisrICAgIGNhc2UgTUlQU19BQklfTzY0OgorKyAgICBjYXNlIE1JUFNfQUJJX0VBQkk2NDoKKysgICAgICByZXR1cm4gODsKKysgICAgY2FzZSBNSVBTX0FCSV9VTktOT1dOOgorKyAgICBjYXNlIE1JUFNfQUJJX0xBU1Q6CisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKyt9CisrCisrCisrLyogJHYwIG9yIHBhaXIgJHYwLCAkdjEgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZ19vMzJbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzMgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgfTsKKysKKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzIgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMyB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCisrICB9OworKyNkZWZpbmUgbmxvY19pbnRyZWcJMQorKyNkZWZpbmUgbmxvY19pbnRyZWdwYWlyCTQKKysKKysvKiAkZjAgKGZsb2F0KSwgb3IgcGFpciAkZjAsICRmMSAoZG91YmxlKS4KKysgKiBmMi9mMyBhcmUgdXNlZCBmb3IgQ09NUExFWCAoPSAyIGRvdWJsZXMpIHJldHVybnMgaW4gRm9ydHJhbiAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfZnByZWdfbzMyW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDMyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzMyB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzQgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDM1IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgIH07CisrCisrLyogJGYwLCBvciBwYWlyICRmMCwgJGYyLiAgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ZwcmVnW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDMyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzNCB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCisrICB9OworKyNkZWZpbmUgbmxvY19mcHJlZyAgMQorKyNkZWZpbmUgbmxvY19mcHJlZ3BhaXIgNAorKyNkZWZpbmUgbmxvY19mcHJlZ3F1YWQgOAorKworKy8qIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3R1cmUgYW5kIGlzIGFjdHVhbGx5IHN0b3JlZCBpbiBzdGFjayBzcGFjZQorKyAgIHBhc3NlZCBpbiBhIGhpZGRlbiBhcmd1bWVudCBieSB0aGUgY2FsbGVyLiAgQnV0LCB0aGUgY29tcGlsZXIKKysgICBoZWxwZnVsbHkgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGF0IHNwYWNlIGluICR2MC4gICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19hZ2dyZWdhdGVbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9icmVnMiwgLm51bWJlciA9IDAgfQorKyAgfTsKKysjZGVmaW5lIG5sb2NfYWdncmVnYXRlIDEKKysKKytpbnQKKyttaXBzX3JldHVybl92YWx1ZV9sb2NhdGlvbiAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorK3sKKysgIC8qIEZpcnN0IGZpbmQgdGhlIEFCSSB1c2VkIGJ5IHRoZSBlbGYgb2JqZWN0ICovCisrICBlbnVtIG1pcHNfYWJpIGFiaSA9IGZpbmRfbWlwc19hYmkoZnVuY3R5cGVkaWUtPmN1LT5kYmctPmVsZik7CisrCisrICAvKiBTb21ldGhpbmcgd2VudCBzZXJpb3VzbHkgd3Jvbmcgd2hpbGUgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIEFCSSAqLworKyAgaWYgKGFiaSA9PSBNSVBTX0FCSV9MQVNUKQorKyAgICByZXR1cm4gLTE7CisrCisrICAvKiBXZSBjb3VsZG4ndCBpZGVudGlmeSB0aGUgQUJJLCBidXQgdGhlIGZpbGUgc2VlbXMgdmFsaWQgKi8KKysgIGlmIChhYmkgPT0gTUlQU19BQklfVU5LTk9XTikKKysgICAgcmV0dXJuIC0yOworKworKyAgLyogQ2FuJ3QgaGFuZGxlIEVBQkkgdmFyaWFudHMgKi8KKysgIGlmICgoYWJpID09IE1JUFNfQUJJX0VBQkkzMikgfHwgKGFiaSA9PSBNSVBTX0FCSV9FQUJJNjQpKQorKyAgICByZXR1cm4gLTI7CisrCisrICB1bnNpZ25lZCBpbnQgcmVnc2l6ZSA9IG1pcHNfYWJpX3JlZ3NpemUgKGFiaSk7CisrICBpZiAoIXJlZ3NpemUpCisrICAgIHJldHVybiAtMjsKKysKKysgIC8qIFN0YXJ0IHdpdGggdGhlIGZ1bmN0aW9uJ3MgdHlwZSwgYW5kIGdldCB0aGUgRFdfQVRfdHlwZSBhdHRyaWJ1dGUsCisrICAgICB3aGljaCBpcyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlLiAgKi8KKysKKysgIER3YXJmX0F0dHJpYnV0ZSBhdHRyX21lbTsKKysgIER3YXJmX0F0dHJpYnV0ZSAqYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlIChmdW5jdHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysgIGlmIChhdHRyID09IE5VTEwpCisrICAgIC8qIFRoZSBmdW5jdGlvbiBoYXMgbm8gcmV0dXJuIHZhbHVlLCBsaWtlIGEgYHZvaWQnIGZ1bmN0aW9uIGluIEMuICAqLworKyAgICByZXR1cm4gMDsKKysKKysgIER3YXJmX0RpZSBkaWVfbWVtOworKyAgRHdhcmZfRGllICp0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysgIGludCB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKworKyAgLyogRm9sbG93IHR5cGVkZWZzIGFuZCBxdWFsaWZpZXJzIHRvIGdldCB0byB0aGUgYWN0dWFsIHR5cGUuICAqLworKyAgd2hpbGUgKHRhZyA9PSBEV19UQUdfdHlwZWRlZgorKwkgfHwgdGFnID09IERXX1RBR19jb25zdF90eXBlIHx8IHRhZyA9PSBEV19UQUdfdm9sYXRpbGVfdHlwZQorKwkgfHwgdGFnID09IERXX1RBR19yZXN0cmljdF90eXBlKQorKyAgICB7CisrICAgICAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKyAgICAgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKyAgICAgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrICAgIH0KKysKKysgIHN3aXRjaCAodGFnKQorKyAgICB7CisrICAgIGNhc2UgLTE6CisrICAgICAgcmV0dXJuIC0xOworKworKyAgICBjYXNlIERXX1RBR19zdWJyYW5nZV90eXBlOgorKyAgICAgIGlmICghIGR3YXJmX2hhc2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9ieXRlX3NpemUpKQorKwl7CisrCSAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKwkgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKwkgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrCX0KKysgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworKworKyAgICBjYXNlIERXX1RBR19iYXNlX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2VudW1lcmF0aW9uX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3BvaW50ZXJfdHlwZToKKysgICAgY2FzZSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlOgorKyAgICAgIHsKKysgICAgICAgIER3YXJmX1dvcmQgc2l6ZTsKKysJaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2J5dGVfc2l6ZSwKKysJCQkJCSAmYXR0cl9tZW0pLCAmc2l6ZSkgIT0gMCkKKysJICB7CisrCSAgICBpZiAodGFnID09IERXX1RBR19wb2ludGVyX3R5cGUgfHwgdGFnID09IERXX1RBR19wdHJfdG9fbWVtYmVyX3R5cGUpCisrCSAgICAgIHNpemUgPSByZWdzaXplOworKwkgICAgZWxzZQorKwkgICAgICByZXR1cm4gLTE7CisrCSAgfQorKwlpZiAodGFnID09IERXX1RBR19iYXNlX3R5cGUpCisrCSAgeworKwkgICAgRHdhcmZfV29yZCBlbmNvZGluZzsKKysJICAgIGlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9lbmNvZGluZywKKysJCQkJCSAgICAgJmF0dHJfbWVtKSwgJmVuY29kaW5nKSAhPSAwKQorKwkgICAgICByZXR1cm4gLTE7CisrCisrI2RlZmluZSBBQklfTE9DKGxvYywgcmVnc2l6ZSkgKChyZWdzaXplKSA9PSA0ID8gKGxvYyAjIyBfbzMyKSA6IChsb2MpKQorKworKwkgICAgaWYgKGVuY29kaW5nID09IERXX0FURV9mbG9hdCkKKysJICAgICAgeworKwkJKmxvY3AgPSBBQklfTE9DKGxvY19mcHJlZywgcmVnc2l6ZSk7CisrCQlpZiAoc2l6ZSA8PSByZWdzaXplKQorKwkJICAgIHJldHVybiBubG9jX2ZwcmVnOworKworKwkJaWYgKHNpemUgPD0gMipyZWdzaXplKQorKyAgICAgICAgICAgICAgICAgIHJldHVybiBubG9jX2ZwcmVncGFpcjsKKysKKysJCWlmIChzaXplIDw9IDQqcmVnc2l6ZSAmJiBhYmkgPT0gTUlQU19BQklfTzMyKQorKyAgICAgICAgICAgICAgICAgIHJldHVybiBubG9jX2ZwcmVncXVhZDsKKysKKysJCWdvdG8gYWdncmVnYXRlOworKwkgICAgICB9CisrCSAgfQorKwkqbG9jcCA9IEFCSV9MT0MobG9jX2ludHJlZywgcmVnc2l6ZSk7CisrCWlmIChzaXplIDw9IHJlZ3NpemUpCisrCSAgcmV0dXJuIG5sb2NfaW50cmVnOworKwlpZiAoc2l6ZSA8PSAyKnJlZ3NpemUpCisrCSAgcmV0dXJuIG5sb2NfaW50cmVncGFpcjsKKysKKysJLyogRWxzZSBmYWxsIHRocm91Z2guIFNob3VsZG4ndCBoYXBwZW4gdGhvdWdoIChhdCBsZWFzdCB3aXRoIGdjYykgKi8KKysgICAgICB9CisrCisrICAgIGNhc2UgRFdfVEFHX3N0cnVjdHVyZV90eXBlOgorKyAgICBjYXNlIERXX1RBR19jbGFzc190eXBlOgorKyAgICBjYXNlIERXX1RBR191bmlvbl90eXBlOgorKyAgICBjYXNlIERXX1RBR19hcnJheV90eXBlOgorKyAgICBhZ2dyZWdhdGU6CisrICAgICAgLyogWFhYIFRPRE86IENhbid0IGhhbmRsZSBzdHJ1Y3R1cmUgcmV0dXJuIHdpdGggb3RoZXIgQUJJJ3MgeWV0IDotLyAqLworKyAgICAgIGlmICgoYWJpICE9IE1JUFNfQUJJX08zMikgJiYgKGFiaSAhPSBNSVBTX0FCSV9PNjQpKQorKyAgICAgICAgcmV0dXJuIC0yOworKworKyAgICAgICpsb2NwID0gbG9jX2FnZ3JlZ2F0ZTsKKysgICAgICByZXR1cm4gbmxvY19hZ2dyZWdhdGU7CisrICAgIH0KKysKKysgIC8qIFhYWCBXZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9ycyBmcm9tIGVibCBjYWxscy4KKysgICAgIFRoaXMgdmFsdWUgbWVhbnMgd2UgZG8gbm90IHVuZGVyc3RhbmQgdGhlIHR5cGUsIGJ1dCBpdCBpcyB3ZWxsLWZvcm1lZAorKyAgICAgRFdBUkYgYW5kIG1pZ2h0IGJlIHZhbGlkLiAgKi8KKysgIHJldHVybiAtMjsKKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbWlwc19zeW1ib2wuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL21pcHNfc3ltYm9sLmMJMjAxNC0wNC0yMSAxMToxMzozNi45MTAyMzU5NjUgKzAwMDAKK0BAIC0wLDAgKzEsNTIgQEAKKysvKiBNSVBTIHNwZWNpZmljIHN5bWJvbGljIG5hbWUgaGFuZGxpbmcuCisrICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA1IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKyAgIFdyaXR0ZW4gYnkgSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4sIDIwMDIuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8ZWxmLmg+CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKworKyNkZWZpbmUgQkFDS0VORAkJbWlwc18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworKy8qIENoZWNrIGZvciB0aGUgc2ltcGxlIHJlbG9jIHR5cGVzLiAgKi8KKytFbGZfVHlwZQorK21pcHNfcmVsb2Nfc2ltcGxlX3R5cGUgKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgaW50IHR5cGUpCisreworKyAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAgIGNhc2UgUl9NSVBTXzE2OgorKyAgICAgIHJldHVybiBFTEZfVF9IQUxGOworKyAgICBjYXNlIFJfTUlQU18zMjoKKysgICAgICByZXR1cm4gRUxGX1RfV09SRDsKKysgICAgY2FzZSBSX01JUFNfNjQ6CisrICAgICAgcmV0dXJuIEVMRl9UX1hXT1JEOworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBFTEZfVF9OVU07CisrICAgIH0KKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNTgvbGliZWJsL2VibG9wZW5iYWNrZW5kLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE1OC5vcmlnL2xpYmVibC9lYmxvcGVuYmFja2VuZC5jCTIwMTQtMDQtMjEgMTE6MTM6MzYuOTE0MjM1ODc1ICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvbGliZWJsL2VibG9wZW5iYWNrZW5kLmMJMjAxNC0wNC0yMSAxMToxMzozNi45MTAyMzU5NjUgKzAwMDAKK0BAIC03MSw2ICs3MSw4IEBACisgICB7ICJzcGFyYyIsICJlbGZfc3BhcmMiLCAic3BhcmMiLCA1LCBFTV9TUEFSQywgMCwgMCB9LAorICAgeyAic3BhcmMiLCAiZWxmX3NwYXJjdjhwbHVzIiwgInNwYXJjIiwgNSwgRU1fU1BBUkMzMlBMVVMsIDAsIDAgfSwKKyAgIHsgInMzOTAiLCAiZWJsX3MzOTAiLCAiczM5MCIsIDQsIEVNX1MzOTAsIDAsIDAgfSwKKysgIHsgIm1pcHMiLCAiZWxmX21pcHMiLCAibWlwcyIsIDQsIEVNX01JUFMsIDAsIDAgfSwKKysgIHsgIm1pcHMiLCAiZWxmX21pcHNlbCIsICJtaXBzZWwiLCA0LCBFTV9NSVBTX1JTM19MRSwgMCwgMCB9LAorIAorICAgeyAibTMyIiwgImVsZl9tMzIiLCAibTMyIiwgMywgRU1fTTMyLCAwLCAwIH0sCisgICB7ICJtNjhrIiwgImVsZl9tNjhrIiwgIm02OGsiLCA0LCBFTV82OEssIDAsIDAgfSwKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9jb21tb24tcmVsb2MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTU4Lm9yaWcvYmFja2VuZHMvY29tbW9uLXJlbG9jLmMJMjAxNC0wNC0yMSAxMToxMzozNi45MTQyMzU4NzUgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9jb21tb24tcmVsb2MuYwkyMDE0LTA0LTIxIDExOjEzOjM2LjkxMDIzNTk2NSArMDAwMAorQEAgLTExMiwxMSArMTEyLDEzIEBACisgfQorIAorIAorKyNpZm5kZWYgTk9fQ09QWV9SRUxPQworIGJvb2wKKyBFQkxIT09LKGNvcHlfcmVsb2NfcCkgKGludCByZWxvYykKKyB7CisgICByZXR1cm4gcmVsb2MgPT0gUl9UWVBFIChDT1BZKTsKKyB9CisrI2VuZGlmCisgCisgYm9vbAorIEVCTEhPT0sobm9uZV9yZWxvY19wKSAoaW50IHJlbG9jKQorQEAgLTEzOCw3ICsxNDAsOSBAQAorICAgZWJsLT5yZWxvY190eXBlX25hbWUgPSBFQkxIT09LKHJlbG9jX3R5cGVfbmFtZSk7CisgICBlYmwtPnJlbG9jX3R5cGVfY2hlY2sgPSBFQkxIT09LKHJlbG9jX3R5cGVfY2hlY2spOworICAgZWJsLT5yZWxvY192YWxpZF91c2UgPSBFQkxIT09LKHJlbG9jX3ZhbGlkX3VzZSk7CisrI2lmbmRlZiBOT19DT1BZX1JFTE9DCisgICBlYmwtPmNvcHlfcmVsb2NfcCA9IEVCTEhPT0soY29weV9yZWxvY19wKTsKKysjZW5kaWYKKyAgIGVibC0+bm9uZV9yZWxvY19wID0gRUJMSE9PSyhub25lX3JlbG9jX3ApOworICNpZm5kZWYgTk9fUkVMQVRJVkVfUkVMT0MKKyAgIGVibC0+cmVsYXRpdmVfcmVsb2NfcCA9IEVCTEhPT0socmVsYXRpdmVfcmVsb2NfcCk7CitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE1OC5vcmlnL2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTQtMDQtMjEgMTE6MTM6MzYuOTE0MjM1ODc1ICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxNC0wNC0yMSAxMToxNDoxMC44NDE0Njg5MzQgKzAwMDAKK0BAIC0zMywxMiArMzMsMTIgQEAKKyAKKyAKKyBtb2R1bGVzID0gaTM4NiBzaCB4ODZfNjQgaWE2NCBhbHBoYSBhcm0gYWFyY2g2NCBzcGFyYyBwcGMgcHBjNjQgczM5MCBcCistCSAgdGlsZWd4IHBhcmlzYworKwkgIHRpbGVneCBwYXJpc2MgbWlwcworIGxpYmVibF9waWMgPSBsaWJlYmxfaTM4Nl9waWMuYSBsaWJlYmxfc2hfcGljLmEgbGliZWJsX3g4Nl82NF9waWMuYSAgICBcCisgCSAgICAgbGliZWJsX2lhNjRfcGljLmEgbGliZWJsX2FscGhhX3BpYy5hIGxpYmVibF9hcm1fcGljLmEgICAgXAorIAkgICAgIGxpYmVibF9hYXJjaDY0X3BpYy5hIGxpYmVibF9zcGFyY19waWMuYSBsaWJlYmxfcHBjX3BpYy5hIFwKKyAJICAgICBsaWJlYmxfcHBjNjRfcGljLmEgbGliZWJsX3MzOTBfcGljLmEgbGliZWJsX3RpbGVneF9waWMuYSBcCistCSAgICAgbGliZWJsX3BhcmlzY19waWMuYQorKwkgICAgIGxpYmVibF9wYXJpc2NfcGljLmEgbGliZWJsX21pcHNfcGljLmEKKyBub2luc3RfTElCUkFSSUVTID0gJChsaWJlYmxfcGljKQorIG5vaW5zdF9EQVRBID0gJChsaWJlYmxfcGljOl9waWMuYT0uc28pCisgCitAQCAtMTIxLDYgKzEyMSwxMCBAQAorIGxpYmVibF9wYXJpc2NfcGljX2FfU09VUkNFUyA9ICQocGFyaXNjX1NSQ1MpCisgYW1fbGliZWJsX3BhcmlzY19waWNfYV9PQkpFQ1RTID0gJChwYXJpc2NfU1JDUzouYz0ub3MpCisgCisrbWlwc19TUkNTID0gbWlwc19pbml0LmMgbWlwc19zeW1ib2wuYyBtaXBzX3JlZ3MuYyBtaXBzX3JldHZhbC5jCisrbGliZWJsX21pcHNfcGljX2FfU09VUkNFUyA9ICQobWlwc19TUkNTKQorK2FtX2xpYmVibF9taXBzX3BpY19hX09CSkVDVFMgPSAkKG1pcHNfU1JDUzouYz0ub3MpCisrCisgbGliZWJsXyUuc28gbGliZWJsXyUubWFwOiBsaWJlYmxfJV9waWMuYSAkKGxpYmVsZikgJChsaWJkdykKKyAJQHJtIC1mICQoQDouc289Lm1hcCkKKyAJZWNobyAnRUxGVVRJTFNfJChQQUNLQUdFX1ZFUlNJT04pIHsgZ2xvYmFsOiAkKl9pbml0OyBsb2NhbDogKjsgfTsnIFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL21pcHNfcmVhZGVsZl93LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvbWlwc19yZWFkZWxmX3cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU2NjllNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL21pcHNfcmVhZGVsZl93LnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK0Zyb206IEt1cnQgUm9lY2t4IDxrdXJ0QHJvZWNreC5iZT4KK1N1YmplY3Q6IE1ha2UgcmVhZGVsZiAtdyBvdXRwdXQgZGVidWcgaW5mb3JtYXRpb24gb24gbWlwcworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy82NjIwNDEKK0ZvcndhcmRlZDogbm90LW5lZWRlZAorCitVcHN0cmVhbXMgd2FudHMgYSBjaGFuZ2Ugd2hlcmUgdGhpcyBpcyBoYW5kbGVkIGJ5IGEgaG9vayB0aGF0IG5lZWRzCit0byBiZSBmaWxsZWQgaW4gYnkgdGhlIGJhY2tlbmQgZm9yIHRoZSBhcmNoLgorCitJbmRleDogZWxmdXRpbHMtMC4xNTMvc3JjL3JlYWRlbGYuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTUzLm9yaWcvc3JjL3JlYWRlbGYuYwkyMDEyLTA4LTEwIDIyOjAxOjU1LjAwMDAwMDAwMCArMDIwMAorKysrIGVsZnV0aWxzLTAuMTUzL3NyYy9yZWFkZWxmLmMJMjAxMi0wOS0xOCAyMTo0NjoyNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC03MzY0LDcgKzczNjQsOCBAQAorICAgICAgIEdFbGZfU2hkciBzaGRyX21lbTsKKyAgICAgICBHRWxmX1NoZHIgKnNoZHIgPSBnZWxmX2dldHNoZHIgKHNjbiwgJnNoZHJfbWVtKTsKKyAKKy0gICAgICBpZiAoc2hkciAhPSBOVUxMICYmIHNoZHItPnNoX3R5cGUgPT0gU0hUX1BST0dCSVRTKQorKyAgICAgIGlmIChzaGRyICE9IE5VTEwgJiYgKAorKwkgKHNoZHItPnNoX3R5cGUgPT0gU0hUX1BST0dCSVRTKSB8fCAoc2hkci0+c2hfdHlwZSA9PSBTSFRfTUlQU19EV0FSRikpKQorIAl7CisgCSAgc3RhdGljIGNvbnN0IHN0cnVjdAorIAkgIHsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL25vbl9saW51eC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL25vbl9saW51eC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWIxYjM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvbm9uX2xpbnV4LnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0luZGV4OiBlbGZ1dGlscy0wLjE1OS9saWJkd2ZsL2xpbnV4LXBpZC1hdHRhY2guYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTU5Lm9yaWcvbGliZHdmbC9saW51eC1waWQtYXR0YWNoLmMKKysrKyBlbGZ1dGlscy0wLjE1OS9saWJkd2ZsL2xpbnV4LXBpZC1hdHRhY2guYworQEAgLTM5Myw2ICszOTMsMTYgQEAgcGlkX2dldHRocmVhZCAoRHdmbCAqZHdmbCBfX2F0dHJpYnV0ZV9fCisgICByZXR1cm4gZmFsc2U7CisgfQorIAorK2Jvb2wKKytpbnRlcm5hbF9mdW5jdGlvbgorK19fbGliZHdmbF9wdHJhY2VfYXR0YWNoIChwaWRfdCB0aWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorKwkJCSBib29sICp0aWRfd2FzX3N0b3BwZWRwIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKKyt7CisrICBlcnJubyA9IEVOT1NZUzsKKysgIF9fbGliZHdmbF9zZXRlcnJubyAoRFdGTF9FX0VSUk5PKTsKKysgIHJldHVybiBmYWxzZTsKKyt9CisrCisgc3RhdGljIGJvb2wKKyBwaWRfbWVtb3J5X3JlYWQgKER3ZmwgKmR3ZmwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorICAgICAgICAgICAgICAgICAgRHdhcmZfQWRkciBhZGRyIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKK0BAIC00MTksNiArNDI5LDEzIEBAIHBpZF9kZXRhY2ggKER3ZmwgKmR3ZmwgX19hdHRyaWJ1dGVfXyAoKHUKKyB7CisgfQorIAorK3ZvaWQKKytpbnRlcm5hbF9mdW5jdGlvbgorK19fbGliZHdmbF9wdHJhY2VfZGV0YWNoIChwaWRfdCB0aWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorKwkJCSBib29sIHRpZF93YXNfc3RvcHBlZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkpCisreworK30KKysKKyBzdGF0aWMgdm9pZAorIHBpZF90aHJlYWRfZGV0YWNoIChEd2ZsX1RocmVhZCAqdGhyZWFkIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKyAJCSAgdm9pZCAqdGhyZWFkX2FyZyBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3JlZGhhdC1wb3J0YWJpbGl0eS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZmYwN2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZgpAQCAtMCwwICsxLDEwMjEgQEAKK1JlYmFzZSB0byAxLjE2MgorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBDaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgfCAgIDMwICsrKysrKysrKysrKysrKysrKysrKworIGJhY2tlbmRzL0NoYW5nZUxvZyAgICAgICAgICB8ICAgMTIgKysrKysrKysrCisgYmFja2VuZHMvTWFrZWZpbGUuYW0gICAgICAgIHwgICAgMiArLQorIGNvbmZpZy9DaGFuZ2VMb2cgICAgICAgICAgICB8ICAgIDQgKysrCisgY29uZmlnL2V1LmFtICAgICAgICAgICAgICAgIHwgICAxNCArKysrKysrLS0tCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgIHwgICA2MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCisgbGliL0NoYW5nZUxvZyAgICAgICAgICAgICAgIHwgICAgOCArKysrKysKKyBsaWIvZXUtY29uZmlnLmggICAgICAgICAgICAgfCAgIDEwICsrKysrKysKKyBsaWJhc20vQ2hhbmdlTG9nICAgICAgICAgICAgfCAgICA1ICsrKysKKyBsaWJjcHUvQ2hhbmdlTG9nICAgICAgICAgICAgfCAgICA4ICsrKysrKworIGxpYmNwdS9pMzg2X2Rpc2FzbS5jICAgICAgICB8ICAgIDEgKworIGxpYmR3L0NoYW5nZUxvZyAgICAgICAgICAgICB8ICAgMTMgKysrKysrKysrCisgbGliZHcvZHdhcmZfYmVnaW5fZWxmLmMgICAgIHwgICAgOCArKysrKysKKyBsaWJkdy9saWJkdy5oICAgICAgICAgICAgICAgfCAgICAyICstCisgbGliZHdmbC9DaGFuZ2VMb2cgICAgICAgICAgIHwgICAyMCArKysrKysrKysrKysrKworIGxpYmR3ZmwvbGludXgtY29yZS1hdHRhY2guYyB8ICAgMjkgKysrKysrKysrKysrKysrKysrKysKKyBsaWJkd2ZsL2xpbnV4LXBpZC1hdHRhY2guYyAgfCAgIDE0ICsrKysrKysrKysKKyBsaWJlYmwvQ2hhbmdlTG9nICAgICAgICAgICAgfCAgICA1ICsrKysKKyBsaWJlbGYvQ2hhbmdlTG9nICAgICAgICAgICAgfCAgIDEwICsrKysrKysKKyBsaWJlbGYvY29tbW9uLmggICAgICAgICAgICAgfCAgICA0ICstLQorIGxpYmVsZi9nbnVoYXNoX3hsYXRlLmggICAgICB8ICAgIDYgKysrLS0KKyBzcmMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgfCAgIDMwICsrKysrKysrKysrKysrKysrKysrKworIHNyYy9NYWtlZmlsZS5hbSAgICAgICAgICAgICB8ICAgIDUgKysrKworIHNyYy9hZGRyMmxpbmUuYyAgICAgICAgICAgICB8ICAgIDQgKy0tCisgc3JjL2ZpbmR0ZXh0cmVsLmMgICAgICAgICAgIHwgICAgNiArKysrLQorIHNyYy9sZC5oICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKysKKyBzcmMvcmVhZGVsZi5jICAgICAgICAgICAgICAgfCAgIDE1ICsrKysrKystLS0tCisgc3JjL3N0cmluZ3MuYyAgICAgICAgICAgICAgIHwgICAxMSArKysrKysrKworIHNyYy9zdHJpcC5jICAgICAgICAgICAgICAgICB8ICAgIDYgKysrKysKKyB0ZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgfCAgIDE0ICsrKysrKysrKysKKyB0ZXN0cy9NYWtlZmlsZS5hbSAgICAgICAgICAgfCAgICAxICsKKyB0ZXN0cy9iYWNrdHJhY2UuYyAgICAgICAgICAgfCAgICAxICsKKyB0ZXN0cy9saW5lMmFkZHIuYyAgICAgICAgICAgfCAgICAyICstCisgMzMgZmlsZXMgY2hhbmdlZCwgMzQzIGluc2VydGlvbnMoKyksIDIwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCitpbmRleCBkODI5NzgzLi44OWJmZDI0IDEwMDY0NAorLS0tIGEvQ2hhbmdlTG9nCisrKysgYi9DaGFuZ2VMb2cKK0BAIC0yNTMsNiArMjUzLDggQEAKKyAKKyAyMDEyLTAxLTI0ICBNYXJrIFdpZWxhYXJkICA8bWp3QHJlZGhhdC5jb20+CisgCisrCSogY29uZmlndXJlLmFjOiBXcmFwIEFDX0NPTVBJTEVfSUZFTFNFIHNvdXJjZXMgaW4gQUNfTEFOR19TT1VSQ0UuCisrCisgCSogQ09QWUlORzogRml4IGFkZHJlc3MuIFVwZGF0ZWQgdmVyc2lvbiBmcm9tIGdudWxpYi4KKyAKKyAyMDEyLTAxLTIzICBNYXJrIFdpZWxhYXJkICA8bWp3QHJlZGhhdC5jb20+CitAQCAtMjcxLDYgKzI3Myw5IEBACisgCisgMjAxMS0xMC0wOCAgTWlrZSBGcnlzaW5nZXIgIDx2YXBpZXJAZ2VudG9vLm9yZz4KKyAKKysJKiBjb25maWd1cmUuYWMgKC0tZGlzYWJsZS13ZXJyb3IpOiBIYW5kbGUgaXQsIGNvbnRyb2xsaW5nIEJVSUxEX1dFUlJPUgorKwlhdXRvbWFrZSBvcHRpb24uCisrCisgCSogY29uZmlndXJlLmFjOiBGaXggdXNlIG9mIEFDX0FSR19FTkFCTEUgdG8gaGFuZGxlICRlbmFibGV2YWwgY29ycmVjdGx5LgorIAorIDIwMTEtMTAtMDIgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBnbWFpbC5jb20+CitAQCAtMjkyLDYgKzI5NywxMCBAQAorIAorIAkqIGNvbmZpZ3VyZS5hYyAoTE9DQUxFRElSLCBEQVRBRElSTkFNRSk6IFJlbW92ZWQuCisgCisrMjAwOS0xMS0yMiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBjb25maWd1cmUuYWM6IFVzZSBzZWQgYW5kIGV4cHIgaW5zdGVhZCBvZiBtb2Rlcm4gYmFzaCBleHRlbnNpb25zLgorKworIDIwMDktMDktMjEgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGNvbmZpZ3VyZS5hYzogVXBkYXRlIGZvciBtb3JlIG1vZGVybiBhdXRvY29uZi4KK0BAIC0zMDAsNiArMzA5LDEwIEBACisgCisgCSogY29uZmlndXJlLmFjICh6aXBfTElCUyk6IENoZWNrIGZvciBsaWJsem1hIHRvby4KKyAKKysyMDA5LTA4LTE3ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIC1mZ251ODktaW5saW5lOyBhZGQgaXQgdG8gV0VYVFJBIGlmIGl0IHdvcmtzLgorKworIDIwMDktMDQtMTkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogY29uZmlndXJlLmFjIChldV92ZXJzaW9uKTogUm91bmQgZG93biBoZXJlLCBub3QgaW4gdmVyc2lvbi5oIG1hY3Jvcy4KK0BAIC0zMTEsNiArMzI0LDggQEAKKyAKKyAyMDA5LTAxLTIzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIF9fYnVpbHRpbl9wb3Bjb3VudC4KKysKKyAJKiBjb25maWd1cmUuYWMgKHpsaWIgY2hlY2spOiBDaGVjayBmb3IgZ3pkaXJlY3QsIG5lZWQgemxpYiA+PSAxLjIuMi4zLgorIAorIAkqIGNvbmZpZ3VyZS5hYyAoX190aHJlYWQgY2hlY2spOiBVc2UgQUNfTElOS19JRkVMU0UsIGluIGNhc2Ugb2YKK0BAIC0zOTEsNiArNDA2LDEwIEBACisgCSogY29uZmlndXJlLmFjOiBBZGQgZHVtbXkgYXV0b21ha2UgY29uZGl0aW9uYWwgdG8gZ2V0IGRlcGVuZGVuY2llcworIAlmb3Igbm9uLWdlbmVyaWMgbGlua2VyIHJpZ2h0LiAgU2VlIHNyYy9NYWtlZmlsZS5hbS4KKyAKKysyMDA1LTExLTIyICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIC0tYXMtbmVlZGVkIGxpbmtlciBvcHRpb24uCisrCisgMjAwNS0xMS0xOCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBNYWtlZmlsZS5hbSAoRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUyk6IE5ldyB2YXJpYWJsZS4KK0BAIC00MzgsNiArNDU3LDE3IEBACisgCSogTWFrZWZpbGUuYW0gKGFsbF9TVUJESVJTKTogQWRkIGxpYmR3ZmwuCisgCSogY29uZmlndXJlLmFjOiBXcml0ZSBsaWJkd2ZsL01ha2VmaWxlLgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogY29uZmlndXJlLmFjIChXRVhUUkEpOiBDaGVjayBmb3IgLVdleHRyYSBhbmQgc2V0IHRoaXMgc3Vic3RpdHV0aW9uLgorKworKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIHN0cnVjdCBzdGF0IHN0Xz90aW0gbWVtYmVycy4KKysJKiBzcmMvc3RyaXAuYyAocHJvY2Vzc19maWxlKTogVXNlIHN0Xz90aW1lIGlmIHN0Xz90aW0gYXJlIG5vdCB0aGVyZS4KKysKKysJKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciBmdXRpbWVzIGZ1bmN0aW9uLgorKwkqIHNyYy9zdHJpcC5jIChoYW5kbGVfZWxmKSBbISBIQVZFX0ZVVElNRVNdOiBVc2UgdXRpbWVzIGluc3RlYWQuCisrCShoYW5kbGVfYXIpIFshIEhBVkVfRlVUSU1FU106IExpa2V3aXNlLgorKworIDIwMDUtMDUtMTkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogY29uZmlndXJlLmFjIFtBSF9CT1RUT01dIChJTlRERUNMLCBfSU5UREVDTCk6IE5ldyBtYWNyb3MuCitkaWZmIC0tZ2l0IGEvYmFja2VuZHMvQ2hhbmdlTG9nIGIvYmFja2VuZHMvQ2hhbmdlTG9nCitpbmRleCBmZTYxZDljLi45NTk5NjIzIDEwMDY0NAorLS0tIGEvYmFja2VuZHMvQ2hhbmdlTG9nCisrKysgYi9iYWNrZW5kcy9DaGFuZ2VMb2cKK0BAIC00OTgsNiArNDk4LDEwIEBACisgCSogcHBjX2F0dHJzLmMgKHBwY19jaGVja19vYmplY3RfYXR0cmlidXRlKTogSGFuZGxlIHRhZworIAlHTlVfUG93ZXJfQUJJX1N0cnVjdF9SZXR1cm4uCisgCisrMjAwOS0wMS0yMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAobGliZWJsXyUuc28pOiBVc2UgJChMRF9BU19ORUVERUQpLgorKworIDIwMDgtMTAtMDQgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGkzODZfcmVsb2MuZGVmOiBGaXggZW50cmllcyBmb3IgVExTX0dPVERFU0MsIFRMU19ERVNDX0NBTEwsIGFuZAorQEAgLTgyNSw2ICs4MjksMTEgQEAKKyAJKiBzcGFyY19pbml0LmM6IExpa2V3aXNlLgorIAkqIHg4Nl82NF9pbml0LmM6IExpa2V3aXNlLgorIAorKzIwMDUtMTEtMjIgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKExEX0FTX05FRURFRCk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkobGliZWJsXyUuc28gcnVsZSk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2wsLS1hcy1uZWVkZWQuCisrCisgMjAwNS0xMS0xOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBwcGM2NF9yZWxvYy5kZWY6IFJFTDMwIC0+IEFERFIzMC4KK0BAIC04NDcsNiArODU2LDkgQEAKKyAJKiBNYWtlZmlsZS5hbSAodW5pbnN0YWxsKTogRG9uJ3QgdHJ5IHRvIHJlbW92ZSAkKHBrZ2luY2x1ZGVkaXIpLgorIAkoQ0xFQU5GSUxFUyk6IEFkZCBsaWJlYmxfJChtKS5zby4KKyAKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAJKiBwcGNfcmVsb2MuZGVmOiBVcGRhdGUgYml0cyBwZXIgQWxhbiBNb2RyYSA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1Pi4KKyAJKiBwcGM2NF9yZWxvYy5kZWY6IExpa2V3aXNlLgorIAorZGlmZiAtLWdpdCBhL2JhY2tlbmRzL01ha2VmaWxlLmFtIGIvYmFja2VuZHMvTWFrZWZpbGUuYW0KK2luZGV4IDIxZDdiZDIuLmZlOTIwYzkgMTAwNjQ0CistLS0gYS9iYWNrZW5kcy9NYWtlZmlsZS5hbQorKysrIGIvYmFja2VuZHMvTWFrZWZpbGUuYW0KK0BAIC0xMTksNyArMTE5LDcgQEAgbGliZWJsXyUuc28gbGliZWJsXyUubWFwOiBsaWJlYmxfJV9waWMuYSAkKGxpYmVsZikgJChsaWJkdykKKyAJJChMSU5LKSAtc2hhcmVkIC1vICQoQDoubWFwPS5zbykgXAorIAkJLVdsLC0td2hvbGUtYXJjaGl2ZSAkPCAkKGNwdV8kKikgLVdsLC0tbm8td2hvbGUtYXJjaGl2ZSBcCisgCQktV2wsLS12ZXJzaW9uLXNjcmlwdCwkKEA6LnNvPS5tYXApIFwKKy0JCS1XbCwteixkZWZzIC1XbCwtLWFzLW5lZWRlZCAkKGxpYmVsZikgJChsaWJkdykKKysJCS1XbCwteixkZWZzICQoTERfQVNfTkVFREVEKSAkKGxpYmVsZikgJChsaWJkdykKKyAJQCQodGV4dHJlbF9jaGVjaykKKyAKKyBsaWJlYmxfaTM4Ni5zbzogJChjcHVfaTM4NikKK2RpZmYgLS1naXQgYS9jb25maWcvQ2hhbmdlTG9nIGIvY29uZmlnL0NoYW5nZUxvZworaW5kZXggNjRiNThlMS4uNjNiM2U5MCAxMDA2NDQKKy0tLSBhL2NvbmZpZy9DaGFuZ2VMb2cKKysrKyBiL2NvbmZpZy9DaGFuZ2VMb2cKK0BAIC0xMDYsNiArMTA2LDEwIEBACisgCisgCSoga25vd24tZHdhcmYuYXdrOiBVc2UgZ2F3ay4KKyAKKysyMDExLTEwLTA4ICBNaWtlIEZyeXNpbmdlciAgPHZhcGllckBnZW50b28ub3JnPgorKworKwkqIGV1LmFtIFtCVUlMRF9XRVJST1JdOiBDb25kaXRpb25hbGl6ZSAtV2Vycm9yIHVzZSBvbiB0aGlzLgorKworIDIwMTAtMDctMDIgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGVsZnV0aWxzLnNwZWMuaW46IEFkZCBtb3JlIEJ1aWxkUmVxdWlyZXMuCitkaWZmIC0tZ2l0IGEvY29uZmlnL2V1LmFtIGIvY29uZmlnL2V1LmFtCitpbmRleCA3MGQzMmRlLi42NWFmMDg1IDEwMDY0NAorLS0tIGEvY29uZmlnL2V1LmFtCisrKysgYi9jb25maWcvZXUuYW0KK0BAIC0xLDYgKzEsNiBAQAorICMjIENvbW1vbiBhdXRvbWFrZSBmcmFnbWVudHMgZm9yIGVsZnV0aWxzIHN1YmRpcmVjdG9yeSBtYWtlZmlsZXMuCisgIyMKKy0jIyBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQgUmVkIEhhdCwgSW5jLgorKyMjIENvcHlyaWdodCAoQykgMjAxMC0yMDExLCAyMDE0IFJlZCBIYXQsIEluYy4KKyAjIworICMjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGVsZnV0aWxzLgorICMjCitAQCAtMjksNiArMjksOSBAQAorICMjIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAjIworIAorK1dFWFRSQSA9IEBXRVhUUkFACisrTERfQVNfTkVFREVEID0gQExEX0FTX05FRURFREAKKysKKyBERUZTID0gLURfR05VX1NPVVJDRSAtREhBVkVfQ09ORklHX0ggLURMT0NBTEVESVI9JyIke2xvY2FsZWRpcn0iJworIEFNX0NQUEZMQUdTID0gLUkuIC1JJChzcmNkaXIpIC1JJCh0b3Bfc3JjZGlyKS9saWIgLUkuLgorIAorQEAgLTM4LDEyICs0MSwxNyBAQCBTVEFDS19VU0FHRV9XQVJOSU5HPS1Xc3RhY2stdXNhZ2U9MjYyMTQ0CisgZWxzZQorIFNUQUNLX1VTQUdFX1dBUk5JTkc9CisgZW5kaWYKKy1BTV9DRkxBR1MgPSAtc3RkPWdudTk5IC1XYWxsIC1Xc2hhZG93IC1XZm9ybWF0PTIgXAorK0FNX0NGTEFHUyA9IC1zdGQ9Z251OTkgLVdhbGwgLVdzaGFkb3cgXAorIAkgICAgJChpZiAkKCQoKkYpX25vX1dlcnJvciksLC1XZXJyb3IpIFwKKy0JICAgICQoaWYgJCgkKCpGKV9ub19XdW51c2VkKSwsLVd1bnVzZWQgLVdleHRyYSkgXAorKwkgICAgJChpZiAkKCQoKkYpX25vX1d1bnVzZWQpLCwtV3VudXNlZCAkKFdFWFRSQSkpIFwKKysJICAgICQoaWYgJCgkKCpGKV9ub19XZm9ybWF0KSwtV25vLWZvcm1hdCwtV2Zvcm1hdD0yKSBcCisgCSAgICAkKGlmICQoJCgqRilfbm9fV3N0YWNrX3VzYWdlKSwsJChTVEFDS19VU0FHRV9XQVJOSU5HKSkgXAorIAkgICAgJCgkKCpGKV9DRkxBR1MpCisgCisraWYgQlVJTERfV0VSUk9SCisrQU1fQ0ZMQUdTICs9ICQoaWYgJCgkKCpGKV9ub19XZXJyb3IpLCwtV2Vycm9yKQorK2VuZGlmCisrCisgQ09NUElMRS5vcyA9ICQoZmlsdGVyLW91dCAtZnByb2ZpbGUtYXJjcyAtZnRlc3QtY292ZXJhZ2UsICQoQ09NUElMRSkpCisgCisgREVGUy5vcyA9IC1EUElDIC1EU0hBUkVECitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiYzlmZjU2Li4yN2ExZWYzIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMDYsNiArMTA2LDU1IEBAIENGTEFHUz0iJG9sZF9DRkxBR1MiXSkKKyBBU19JRihbdGVzdCAieCRhY19jdl9jOTkiICE9IHh5ZXNdLAorICAgICAgIEFDX01TR19FUlJPUihbZ2NjIHdpdGggR05VOTkgc3VwcG9ydCByZXF1aXJlZF0pKQorIAorK0FDX0NBQ0hFX0NIRUNLKFtmb3IgLVdleHRyYSBvcHRpb24gdG8gJENDXSwgYWNfY3ZfY2Nfd2V4dHJhLCBbZG5sCisrb2xkX0NGTEFHUz0iJENGTEFHUyIKKytDRkxBR1M9IiRDRkxBR1MgLVdleHRyYSIKKytBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW3ZvaWQgZm9vICh2b2lkKSB7IH1dKV0sCisrCQkgIGFjX2N2X2NjX3dleHRyYT15ZXMsIGFjX2N2X2NjX3dleHRyYT1ubykKKytDRkxBR1M9IiRvbGRfQ0ZMQUdTIl0pCisrQUNfU1VCU1QoV0VYVFJBKQorK0FTX0lGKFt0ZXN0ICJ4JGFjX2N2X2NjX3dleHRyYSIgPSB4eWVzXSwgW1dFWFRSQT0tV2V4dHJhXSwgW1dFWFRSQT0tV10pCisrCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtZmdudTg5LWlubGluZSBvcHRpb24gdG8gJENDXSwgYWNfY3ZfY2NfZ251ODlfaW5saW5lLCBbZG5sCisrb2xkX0NGTEFHUz0iJENGTEFHUyIKKytDRkxBR1M9IiRDRkxBR1MgLWZnbnU4OS1pbmxpbmUgLVdlcnJvciIKKytBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoWworK3ZvaWQgZm9vICh2b2lkKQorK3sKKysgIGlubGluZSB2b2lkIGJhciAodm9pZCkge30KKysgIGJhciAoKTsKKyt9CisrZXh0ZXJuIGlubGluZSB2b2lkIGJheiAodm9pZCkge30KKytdKV0sIGFjX2N2X2NjX2dudTg5X2lubGluZT15ZXMsIGFjX2N2X2NjX2dudTg5X2lubGluZT1ubykKKytDRkxBR1M9IiRvbGRfQ0ZMQUdTIl0pCisrQVNfSUYoW3Rlc3QgIngkYWNfY3ZfY2NfZ251ODlfaW5saW5lIiA9IHh5ZXNdLAorKyAgICAgIFtXRVhUUkE9IiR7V0VYVFJBOiskV0VYVFJBIH0tZmdudTg5LWlubGluZSJdKQorKworK0FDX0NBQ0hFX0NIRUNLKFtmb3IgLS1hcy1uZWVkZWQgbGlua2VyIG9wdGlvbl0sCisrCSAgICAgICBhY19jdl9hc19uZWVkZWQsIFtkbmwKKytjYXQgPiBjb25mdGVzdC5jIDw8RU9GCisraW50IG1haW4gKHZvaWQpIHsgcmV0dXJuIDA7IH0KKytFT0YKKytpZiBBQ19UUllfQ09NTUFORChbJHtDQy1jY30gJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MKKysJCQkgICAgLWZQSUMgLXNoYXJlZCAtbyBjb25mdGVzdC5zbyBjb25mdGVzdC5jCisrCQkJICAgIC1XbCwtLWFzLW5lZWRlZCAxPiZBU19NRVNTQUdFX0xPR19GRF0pCisrdGhlbgorKyAgYWNfY3ZfYXNfbmVlZGVkPXllcworK2Vsc2UKKysgIGFjX2N2X2FzX25lZWRlZD1ubworK2ZpCisrcm0gLWYgY29uZnRlc3QqXSkKKytBU19JRihbdGVzdCAieCRhY19jdl9hc19uZWVkZWQiID0geHllc10sCisrICAgICAgW0xEX0FTX05FRURFRD0tV2wsLS1hcy1uZWVkZWRdLCBbTERfQVNfTkVFREVEPV0pCisrQUNfU1VCU1QoTERfQVNfTkVFREVEKQorKworK0FDX0NBQ0hFX0NIRUNLKFtmb3IgX19idWlsdGluX3BvcGNvdW50XSwgYWNfY3ZfcG9wY291bnQsIFtkbmwKKytBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLCBbW2V4aXQgKF9fYnVpbHRpbl9wb3Bjb3VudCAoMTI3KSk7XV0pXSwKKysJICAgICAgIGFjX2N2X3BvcGNvdW50PXllcywgYWNfY3ZfcG9wY291bnQ9bm8pXSkKKytBU19JRihbdGVzdCAieCRhY19jdl9wb3Bjb3VudCIgPSB4eWVzXSwKKysgICAgICBbQUNfREVGSU5FKFtIQVZFX0JVSUxUSU5fUE9QQ09VTlRdLCBbMV0sIFtIYXZlIF9fYnVpbHRpbl9wb3Bjb3VudC5dKV0pCisrCisrCisgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBfX3RocmVhZCBzdXBwb3J0XSwgYWNfY3ZfdGxzLCBbZG5sCisgIyBVc2UgdGhlIHNhbWUgZmxhZ3MgdGhhdCB3ZSB1c2UgZm9yIG91ciBEU09zLCBzbyB0aGUgdGVzdCBpcyByZXByZXNlbnRhdGl2ZS4KKyAjIFNvbWUgb2xkIGNvbXBpbGVyL2xpbmtlci9saWJjIGNvbWJpbmF0aW9ucyBmYWlsIHNvbWUgd2F5cyBhbmQgbm90IG90aGVycy4KK0BAIC0xMjIsNyArMTcxLDEwIEBAIHN0YXRpYyBfX3RocmVhZCBpbnQgYTsgaW50IGZvbyAoaW50IGIpIHsgcmV0dXJuIGEgKyBiOyB9XV0sCisgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisgTERGTEFHUz0iJHNhdmVfTERGTEFHUyJdKQorIEFTX0lGKFt0ZXN0ICJ4JGFjX2N2X3RscyIgIT0geHllc10sCistICAgICAgQUNfTVNHX0VSUk9SKFtfX3RocmVhZCBzdXBwb3J0IHJlcXVpcmVkXSkpCisrICAgICAgW0FTX0lGKFt0ZXN0ICIkdXNlX2xvY2tzIiA9IHllc10sCisrCSAgICAgW0FDX01TR19FUlJPUihbLS1lbmFibGUtdGhyZWFkLXNhZmV0eSByZXF1aXJlcyBfX3RocmVhZCBzdXBwb3J0XSldLAorKwkgICAgIFtBQ19ERUZJTkUoW19fdGhyZWFkXSwgWy8qIGVtcHR5OiBubyBtdWx0aS10aHJlYWQgc3VwcG9ydCAqL10sCisrCQkJW1N0dWJiZWQgb3V0IGlmIG1pc3NpbmcgY29tcGlsZXIgc3VwcG9ydC5dKV0pXSkKKyAKKyBkbmwgVGhpcyB0ZXN0IG11c3QgY29tZSBhcyBlYXJseSBhcyBwb3NzaWJsZSBhZnRlciB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbgorIGRubCB0ZXN0cywgYmVjYXVzZSB0aGUgY2hvaWNlIG9mIHRoZSBmaWxlIG1vZGVsIGNhbiAoaW4gcHJpbmNpcGxlKSBhZmZlY3QKK0BAIC0yMjQsNiArMjc2LDExIEBAIEFNX0NPTkRJVElPTkFMKFVTRV9WQUxHUklORCwgdGVzdCAiJHVzZV92YWxncmluZCIgPSB5ZXMpCisgQU1fQ09ORElUSU9OQUwoQlVJTERfU1RBVElDLCBbZG5sCisgdGVzdCAiJHVzZV9ncHJvZiIgPSB5ZXMgLW8gIiR1c2VfZ2NvdiIgPSB5ZXNdKQorIAorK0FDX0FSR19FTkFCTEUoW3dlcnJvcl0sCisrQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS13ZXJyb3JdLFtkbyBub3QgYnVpbGQgd2l0aCAtV2Vycm9yXSksCisrCSAgICAgICBbZW5hYmxlX3dlcnJvcj0kZW5hYmxldmFsXSwgW2VuYWJsZV93ZXJyb3I9eWVzXSkKKytBTV9DT05ESVRJT05BTChCVUlMRF9XRVJST1IsIHRlc3QgIiRlbmFibGVfd2Vycm9yIiA9IHllcykKKysKKyBBQ19BUkdfRU5BQkxFKFt0ZXN0cy1ycGF0aF0sCisgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXRlc3RzLXJwYXRoXSxbYnVpbGQgJE9SSUdJTi11c2luZyBycGF0aCBpbnRvIHRlc3RzXSksCisgCSAgICAgICBbdGVzdHNfdXNlX3JwYXRoPSRlbmFibGV2YWxdLCBbdGVzdHNfdXNlX3JwYXRoPW5vXSkKK0BAIC0zODgsNyArNDQ1LDcgQEAgY2FzZSAiJGV1X3ZlcnNpb24iIGluCisgZXNhYworIAorICMgUm91bmQgdXAgdG8gdGhlIG5leHQgcmVsZWFzZSBBUEkgKHgueSkgdmVyc2lvbi4KKy1ldV92ZXJzaW9uPSQoKCAoZXVfdmVyc2lvbiArIDk5OSkgLyAxMDAwICkpCisrZXVfdmVyc2lvbj1gZXhwciBcKCAkZXVfdmVyc2lvbiArIDk5OSBcKSAvIDEwMDBgCisgCisgZG5sIFVuaXF1ZSBJRCBmb3IgdGhpcyBidWlsZC4KKyBNT0RWRVJTSU9OPSJCdWlsZCBmb3IgJHtMSUJFQkxfU1VCRElSfSAke2V1X3ZlcnNpb259ICR7YWNfY3ZfYnVpbGR9IgorZGlmZiAtLWdpdCBhL2xpYi9DaGFuZ2VMb2cgYi9saWIvQ2hhbmdlTG9nCitpbmRleCBkMDRiZjE3Li43MjBjOThkIDEwMDY0NAorLS0tIGEvbGliL0NoYW5nZUxvZworKysrIGIvbGliL0NoYW5nZUxvZworQEAgLTczLDYgKzczLDkgQEAKKyAKKyAyMDA5LTAxLTIzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIGV1LWNvbmZpZy5oIFshIEhBVkVfQlVJTFRJTl9QT1BDT1VOVF0KKysJKF9fYnVpbHRpbl9wb3Bjb3VudCk6IE5ldyBpbmxpbmUgZnVuY3Rpb24uCisrCisgCSogZXUtY29uZmlnLmg6IEFkZCBtdWx0aXBsZSBpbmNsdXNpb24gcHJvdGVjdGlvbi4KKyAKKyAyMDA5LTAxLTE3ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KK0BAIC0xMjksNiArMTMyLDExIEBACisgCSogTWFrZWZpbGUuYW0gKGxpYmV1X2FfU09VUkNFUyk6IEFkZCBpdC4KKyAJKiBzeXN0ZW0uaDogRGVjbGFyZSBjcmMzMl9maWxlLgorIAorKzIwMDUtMDItMDcgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wNC0zMCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogTWFrZWZpbGUuYW06IFVzZSAtZmZ1bmN0aW9uLXNlY3Rpb25zIGZvciB4bWFsbG9jLmMuCitkaWZmIC0tZ2l0IGEvbGliL2V1LWNvbmZpZy5oIGIvbGliL2V1LWNvbmZpZy5oCitpbmRleCA0MDBjZGM2Li44NzJmNmJjIDEwMDY0NAorLS0tIGEvbGliL2V1LWNvbmZpZy5oCisrKysgYi9saWIvZXUtY29uZmlnLmgKK0BAIC0xNjMsNiArMTYzLDE2IEBAIGFzbSAoIi5zZWN0aW9uIHByZWRpY3RfZGF0YSwgXCJhd1wiOyAucHJldmlvdXNcbiIKKyAvKiBUaGlzIG1hY3JvIGlzIHVzZWQgYnkgdGhlIHRlc3RzIGNvbmRpdGlvbmFsaXplIGZvciBzdGFuZGFsb25lIGJ1aWxkaW5nLiAgKi8KKyAjZGVmaW5lIEVMRlVUSUxTX0hFQURFUihuYW1lKSA8bGliIyNuYW1lLmg+CisgCisrI2lmbmRlZiBIQVZFX0JVSUxUSU5fUE9QQ09VTlQKKysjIGRlZmluZSBfX2J1aWx0aW5fcG9wY291bnQgaGFrbWVtX3BvcGNvdW50Cisrc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCisraGFrbWVtX3BvcGNvdW50ICh1bnNpZ25lZCBpbnQgeCkKKyt7CisrICAvKiBIQUtNRU0gMTY5ICovCisrICB1bnNpZ25lZCBpbnQgbiA9IHggLSAoKHggPj4gMSkgJiAwMzMzMzMzMzMzMzMpIC0gKCh4ID4+IDIpICYgMDExMTExMTExMTExKTsKKysgIHJldHVybiAoKG4gKyAobiA+PiAzKSkgJiAwMzA3MDcwNzA3MDcpICUgNjM7CisrfQorKyNlbmRpZgkvKiBIQVZFX0JVSUxUSU5fUE9QQ09VTlQgKi8KKyAKKyAjaWZkZWYgU1lNQk9MX1ZFUlNJT05JTkcKKyAjIGRlZmluZSBPTERfVkVSU0lPTihuYW1lLCB2ZXJzaW9uKSBcCitkaWZmIC0tZ2l0IGEvbGliYXNtL0NoYW5nZUxvZyBiL2xpYmFzbS9DaGFuZ2VMb2cKK2luZGV4IDliMjVhZjkuLjMyYjlmZDAgMTAwNjQ0CistLS0gYS9saWJhc20vQ2hhbmdlTG9nCisrKysgYi9saWJhc20vQ2hhbmdlTG9nCitAQCAtODcsNiArODcsMTEgQEAKKyAJKiBhc21fZXJyb3IuYzogQWRkIG5ldyBlcnJvciBBU01fRV9JT0VSUk9SLgorIAkqIGxpYmFzbVAuaDogQWRkIEFTTV9FX0lPRVJST1IgZGVmaW5pdGlvbi4KKyAKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIDIwMDUtMDItMTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIE1ha2VmaWxlLmFtIChBTV9DRkxBR1MpOiBBZGQgLVd1bnVzZWQgLVdleHRyYSAtV2Zvcm1hdD0yLgorZGlmZiAtLWdpdCBhL2xpYmNwdS9DaGFuZ2VMb2cgYi9saWJjcHUvQ2hhbmdlTG9nCitpbmRleCBhMjBmNDQwLi41ZWEyM2I3IDEwMDY0NAorLS0tIGEvbGliY3B1L0NoYW5nZUxvZworKysrIGIvbGliY3B1L0NoYW5nZUxvZworQEAgLTUxLDYgKzUxLDkgQEAKKyAKKyAyMDA5LTAxLTIzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIGkzODZfZGlzYXNtLmMgKGkzODZfZGlzYXNtKTogQWRkIGFib3J0IGFmdGVyIGFzc2VydC1jb25zdGFudCBmb3Igb2xkCisrCWNvbXBpbGVycyB0aGF0IGRvbid0IHJlYWxpemUgaXQncyBub3JldHVybi4KKysKKyAJKiBNYWtlZmlsZS5hbSAoaTM4Nl9wYXJzZV9DRkxBR1MpOiBVc2UgcXVvdGVzIGFyb3VuZCBjb21tYW5kCisgCXN1YnN0aXR1dGlvbiB0aGF0IGNhbiBwcm9kdWNlIGxlYWRpbmcgd2hpdGVzcGFjZS4KKyAKK0BAIC0zODAsNiArMzgzLDExIEBACisgCSogZGVmcy9pMzg2LmRvYzogTmV3IGZpbGUuCisgCSogZGVmcy94ODZfNjQ6IE5ldyBmaWxlLgorIAorKzIwMDUtMDQtMDQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluc3RlYWQgb2YgLVdleHRyYS4KKysKKyAyMDA1LTAyLTE1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBNYWtlZmlsZSAoQU1fQ0ZMQUdTKTogQWRkIC1XdW51c2VkIC1XZXh0cmEgLVdmb3JtYXQ9Mi4KK2RpZmYgLS1naXQgYS9saWJjcHUvaTM4Nl9kaXNhc20uYyBiL2xpYmNwdS9pMzg2X2Rpc2FzbS5jCitpbmRleCA4MzIyNDFmLi5jN2EwZGYwIDEwMDY0NAorLS0tIGEvbGliY3B1L2kzODZfZGlzYXNtLmMKKysrKyBiL2xpYmNwdS9pMzg2X2Rpc2FzbS5jCitAQCAtODIyLDYgKzgyMiw3IEBAIGkzODZfZGlzYXNtIChjb25zdCB1aW50OF90ICoqc3RhcnRwLCBjb25zdCB1aW50OF90ICplbmQsIEdFbGZfQWRkciBhZGRyLAorIAorIAkJCWRlZmF1bHQ6CisgCQkJICBhc3NlcnQgKCEgIklOVkFMSUQgbm90IGhhbmRsZWQiKTsKKysJCQkgIGFib3J0ICgpOworIAkJCX0KKyAJCSAgICB9CisgCQkgIGVsc2UKK2RpZmYgLS1naXQgYS9saWJkdy9DaGFuZ2VMb2cgYi9saWJkdy9DaGFuZ2VMb2cKK2luZGV4IDQ4N2UzNGEuLjA2YzczN2IgMTAwNjQ0CistLS0gYS9saWJkdy9DaGFuZ2VMb2cKKysrKyBiL2xpYmR3L0NoYW5nZUxvZworQEAgLTg4OSw2ICs4ODksMTAgQEAKKyAKKyAJKiBNYWtlZmlsZS5hbSAoa25vd24tZHdhcmYuaCk6IFJ1biBnYXdrIG9uIGNvbmZpZy9rbm93bi1kd2FyZi5hd2suCisgCisrMjAxMS0wNy0yMCAgTWFyayBXaWVsYWFyZCAgPG1qd0ByZWRoYXQuY29tPgorKworKwkqIGR3YXJmX2JlZ2luX2VsZi5jOiBBZGQgZmFsbGJhY2sgZm9yIGJlNjR0b2ggaWYgbm90IGRlZmluZWQuCisrCisgMjAxMS0wNy0xNCAgTWFyayBXaWVsYWFyZCAgPG1qd0ByZWRoYXQuY29tPgorIAorIAkqIGxpYmR3LmggKGR3YXJmX29mZmRpZSk6IEZpeCBkb2N1bWVudGF0aW9uIHRvIG1lbnRpb24gLmRlYnVnX2luZm8uCitAQCAtMTI0OCw2ICsxMjUyLDEwIEBACisgCisgCSogZHdhcmZfaGFzYXR0cl9pbnRlZ3JhdGUuYzogSW50ZWdyYXRlIERXX0FUX3NwZWNpZmljYXRpb24gdG9vLgorIAorKzIwMDktMDgtMTcgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogbGliZHcuaDogRGlzYWJsZSBleHRlcm4gaW5saW5lcyBmb3IgR0NDIDQuMi4KKysKKyAyMDA5LTA4LTEwICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIGR3YXJmX2dldHNjb3BldmFyLmM6IFVzZSBkd2FyZl9kaWVuYW1lLgorQEAgLTIwMTYsNiArMjAyNCwxMSBAQAorIAorIDIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKyAJKiBkd2FyZl9mb3JtcmVmX2RpZS5jIChkd2FyZl9mb3JtcmVmX2RpZSk6IEFkZCBDVSBoZWFkZXIgb2Zmc2V0IHRvCisgCWZvcm1yZWYgb2Zmc2V0LgorIAorZGlmZiAtLWdpdCBhL2xpYmR3L2R3YXJmX2JlZ2luX2VsZi5jIGIvbGliZHcvZHdhcmZfYmVnaW5fZWxmLmMKK2luZGV4IDRlMGQ1OTAuLmE2NjE2YTEgMTAwNjQ0CistLS0gYS9saWJkdy9kd2FyZl9iZWdpbl9lbGYuYworKysrIGIvbGliZHcvZHdhcmZfYmVnaW5fZWxmLmMKK0BAIC00Nyw2ICs0NywxNCBAQAorICNpZiBVU0VfWkxJQgorICMgaW5jbHVkZSA8ZW5kaWFuLmg+CisgIyBkZWZpbmUgY3JjMzIJCWxvc2VyX2NyYzMyCisrIyBpZm5kZWYgYmU2NHRvaAorKyMgIGluY2x1ZGUgPGJ5dGVzd2FwLmg+CisrIyAgaWYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTgorKyMgICBkZWZpbmUgYmU2NHRvaCh4KSBic3dhcF82NCAoeCkKKysjICBlbHNlCisrIyAgIGRlZmluZSBiZTY0dG9oKHgpICh4KQorKyMgIGVuZGlmCisrIyBlbmRpZgorICMgaW5jbHVkZSA8emxpYi5oPgorICMgdW5kZWYgY3JjMzIKKyAjZW5kaWYKK2RpZmYgLS1naXQgYS9saWJkdy9saWJkdy5oIGIvbGliZHcvbGliZHcuaAoraW5kZXggNDczZTFhMi4uNWE1MTFjZCAxMDA2NDQKKy0tLSBhL2xpYmR3L2xpYmR3LmgKKysrKyBiL2xpYmR3L2xpYmR3LmgKK0BAIC0xMDA0LDcgKzEwMDQsNyBAQCBleHRlcm4gRHdhcmZfT09NIGR3YXJmX25ld19vb21faGFuZGxlciAoRHdhcmYgKmRiZywgRHdhcmZfT09NIGhhbmRsZXIpOworIAorIAorIC8qIElubGluZSBvcHRpbWl6YXRpb25zLiAgKi8KKy0jaWZkZWYgX19PUFRJTUlaRV9fCisrI2lmIGRlZmluZWQgX19PUFRJTUlaRV9fICYmICEoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA9PSAyKQorIC8qIFJldHVybiBhdHRyaWJ1dGUgY29kZSBvZiBnaXZlbiBhdHRyaWJ1dGUuICAqLworIF9fbGliZHdfZXh0ZXJuX2lubGluZSB1bnNpZ25lZCBpbnQKKyBkd2FyZl93aGF0YXR0ciAoRHdhcmZfQXR0cmlidXRlICphdHRyKQorZGlmZiAtLWdpdCBhL2xpYmR3ZmwvQ2hhbmdlTG9nIGIvbGliZHdmbC9DaGFuZ2VMb2cKK2luZGV4IGE1MjUzZTIuLjU5YWJmYWMgMTAwNjQ0CistLS0gYS9saWJkd2ZsL0NoYW5nZUxvZworKysrIGIvbGliZHdmbC9DaGFuZ2VMb2cKK0BAIC03MDQsNiArNzA0LDIxIEBACisgCShkd2ZsX21vZHVsZV9hZGRyc3ltKSAoaV90b19zeW1maWxlKTogTmV3IGZ1bmN0aW9uLgorIAkoZHdmbF9tb2R1bGVfYWRkcnN5bSkgKHNlYXJjaF90YWJsZSk6IFVzZSBpdC4KKyAKKysyMDEzLTExLTA5ICBKYW4gS3JhdG9jaHZpbCAgPGphbi5rcmF0b2NodmlsQHJlZGhhdC5jb20+CisrCisrCU9sZGVyIE9TIGNvbXBhdGliaWxpdHkgYml0cy4KKysJKiBsaW51eC1jb3JlLWF0dGFjaC5jIChiZTY0dG9oLCBsZTY0dG9oLCBiZTMydG9oLCBsZTMydG9oKTogUHJvdmlkZQorKwlmYWxsYmFja3MgaWYgbm90IGRlZmluZWQgYnkgc3lzdGVtLgorKworKzIwMTMtMTEtMDkgIEphbiBLcmF0b2NodmlsICA8amFuLmtyYXRvY2h2aWxAcmVkaGF0LmNvbT4KKysKKysJSGFuZGxlIFQtc3RvcHBlZCBkZXRhY2ggZm9yIG9sZCBrZXJuZWxzLgorKwkqIGxpbnV4LXBpZC1hdHRhY2guYyAoc3RydWN0IHBpZF9hcmcpOiBOZXcgZmllbGQgc3RvcHBlZC4KKysJKHB0cmFjZV9hdHRhY2gpOiBOZXcgcGFyYW1ldGVyIHN0b3BwZWRwLiAgU2V0IGl0IGFwcHJvcHJpYXRlbHkuCisrCShwaWRfc2V0X2luaXRpYWxfcmVnaXN0ZXJzKTogUGFzcyB0aGUgbmV3IGZpZWxkLgorKwkocGlkX3RocmVhZF9kZXRhY2gpOiBIYW5kbGUgdGhlIGNhc2Ugb2YgU1RPUFBFRCBmb3Igb2xkIGtlcm5lbHMuCisrCShfX2xpYmR3ZmxfYXR0YWNoX3N0YXRlX2Zvcl9waWQpOiBJbml0aWFsaXplIFNUT1BQRUQuCisrCisgMjAxMy0xMS0wNyAgSmFuIEtyYXRvY2h2aWwgIDxqYW4ua3JhdG9jaHZpbEByZWRoYXQuY29tPgorIAkgICAgTWFyayBXaWVsYWFyZCAgPG1qd0ByZWRoYXQuY29tPgorIAorQEAgLTI0NjksNiArMjQ4NCwxMSBAQAorIAorIDIwMDUtMDctMjEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisrMjAwNS0wNy0yMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKyAJKiBNYWtlZmlsZS5hbSAobm9pbnN0X0hFQURFUlMpOiBBZGQgbG9jMmMuYy4KKyAKKyAJKiB0ZXN0Mi5jIChtYWluKTogQ2hlY2sgc3NjYW5mIHJlc3VsdCB0byBxdWlldCB3YXJuaW5nLgorZGlmZiAtLWdpdCBhL2xpYmR3ZmwvbGludXgtY29yZS1hdHRhY2guYyBiL2xpYmR3ZmwvbGludXgtY29yZS1hdHRhY2guYworaW5kZXggNWE3YjNiMy4uZDA1YWM3ZSAxMDA2NDQKKy0tLSBhL2xpYmR3ZmwvbGludXgtY29yZS1hdHRhY2guYworKysrIGIvbGliZHdmbC9saW51eC1jb3JlLWF0dGFjaC5jCitAQCAtMjksNiArMjksMzUgQEAKKyAjaW5jbHVkZSAibGliZHdmbFAuaCIKKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSAic3lzdGVtLmgiCisrI2luY2x1ZGUgPGVuZGlhbi5oPgorKyNpbmNsdWRlIDxieXRlc3dhcC5oPgorKyNpZiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOCisrIyBpZm5kZWYgYmU2NHRvaAorKyMgIGRlZmluZSBiZTY0dG9oKHgpIGJzd2FwXzY0ICh4KQorKyMgZW5kaWYKKysjIGlmbmRlZiBsZTY0dG9oCisrIyAgZGVmaW5lIGxlNjR0b2goeCkgKHgpCisrIyBlbmRpZgorKyMgaWZuZGVmIGJlMzJ0b2gKKysjICBkZWZpbmUgYmUzMnRvaCh4KSBic3dhcF8zMiAoeCkKKysjIGVuZGlmCisrIyBpZm5kZWYgbGUzMnRvaAorKyMgIGRlZmluZSBsZTMydG9oKHgpICh4KQorKyMgZW5kaWYKKysjZWxzZQorKyMgaWZuZGVmIGJlNjR0b2gKKysjICBkZWZpbmUgYmU2NHRvaCh4KSAoeCkKKysjIGVuZGlmCisrIyBpZm5kZWYgbGU2NHRvaAorKyMgIGRlZmluZSBsZTY0dG9oKHgpIGJzd2FwXzY0ICh4KQorKyMgZW5kaWYKKysjIGlmbmRlZiBiZTMydG9oCisrIyAgZGVmaW5lIGJlMzJ0b2goeCkgKHgpCisrIyBlbmRpZgorKyMgaWZuZGVmIGxlMzJ0b2gKKysjICBkZWZpbmUgbGUzMnRvaCh4KSBic3dhcF8zMiAoeCkKKysjIGVuZGlmCisrI2VuZGlmCisgCisgI2luY2x1ZGUgIi4uL2xpYmR3L21lbW9yeS1hY2Nlc3MuaCIKKyAKK2RpZmYgLS1naXQgYS9saWJkd2ZsL2xpbnV4LXBpZC1hdHRhY2guYyBiL2xpYmR3ZmwvbGludXgtcGlkLWF0dGFjaC5jCitpbmRleCBhZTcxNzAyLi4wNzZiMmMzIDEwMDY0NAorLS0tIGEvbGliZHdmbC9saW51eC1waWQtYXR0YWNoLmMKKysrKyBiL2xpYmR3ZmwvbGludXgtcGlkLWF0dGFjaC5jCitAQCAtMjU1LDYgKzI1NSwxMSBAQCB2b2lkCisgaW50ZXJuYWxfZnVuY3Rpb24KKyBfX2xpYmR3ZmxfcHRyYWNlX2RldGFjaCAocGlkX3QgdGlkLCBib29sIHRpZF93YXNfc3RvcHBlZCkKKyB7CisrICAvLyBPbGRlciBrZXJuZWxzICh0ZXN0ZWQga2VybmVsLTIuNi4xOC0zNDguMTIuMS5lbDUueDg2XzY0KSBuZWVkIHNwZWNpYWwKKysgIC8vIGhhbmRsaW5nIG9mIHRoZSBkZXRhY2htZW50IHRvIGtlZXAgdGhlIHByb2Nlc3MgU3RhdGU6IFQgKHN0b3BwZWQpLgorKyAgaWYgKHRpZF93YXNfc3RvcHBlZCkKKysgICAgc3lzY2FsbCAoX19OUl90a2lsbCwgdGlkLCBTSUdTVE9QKTsKKysKKyAgIC8qIFRoaXMgaGFuZGxpbmcgaXMgbmVlZGVkIG9ubHkgb24gb2xkZXIgTGludXgga2VybmVscyBzdWNoIGFzCisgICAgICAyLjYuMzItMzU4LjIzLjIuZWw2LnBwYzY0LiAgTGF0ZXIga2VybmVscyBzdWNoIGFzCisgICAgICAzLjExLjctMjAwLmZjMTkueDg2XzY0IHJlbWVtYmVyIHRoZSBUIChzdG9wcGVkKSBzdGF0ZQorQEAgLTI2Miw2ICsyNjcsMTUgQEAgX19saWJkd2ZsX3B0cmFjZV9kZXRhY2ggKHBpZF90IHRpZCwgYm9vbCB0aWRfd2FzX3N0b3BwZWQpCisgICAgICBQVFJBQ0VfREVUQUNILiAgKi8KKyAgIHB0cmFjZSAoUFRSQUNFX0RFVEFDSCwgdGlkLCBOVUxMLAorIAkgICh2b2lkICopIChpbnRwdHJfdCkgKHRpZF93YXNfc3RvcHBlZCA/IFNJR1NUT1AgOiAwKSk7CisrCisrICBpZiAodGlkX3dhc19zdG9wcGVkKQorKyAgICB7CisrICAgICAgLy8gV2FpdCB0aWxsIHRoZSBTSUdTVE9QIHNldHRsZXMgZG93bi4KKysgICAgICBpbnQgaTsKKysgICAgICBmb3IgKGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspCisrCWlmIChsaW51eF9wcm9jX3BpZF9pc19zdG9wcGVkICh0aWQpKQorKwkgIGJyZWFrOworKyAgICB9CisgfQorIAorIHN0YXRpYyB2b2lkCitkaWZmIC0tZ2l0IGEvbGliZWJsL0NoYW5nZUxvZyBiL2xpYmVibC9DaGFuZ2VMb2cKK2luZGV4IDUxYWU2MGYuLmFlZTAyMTcgMTAwNjQ0CistLS0gYS9saWJlYmwvQ2hhbmdlTG9nCisrKysgYi9saWJlYmwvQ2hhbmdlTG9nCitAQCAtNzgwLDYgKzc4MCwxMSBAQAorIAkqIE1ha2VmaWxlLmFtIChsaWJlYmxfKl9zb19TT1VSQ0VTKTogU2V0IHRvICQoKl9TUkNTKSBzbyBkZXBlbmRlbmN5CisgCXRyYWNraW5nIHdvcmtzIHJpZ2h0LgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wNS0yMSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogbGliZWJsX3g4Nl82NC5tYXA6IEFkZCB4ODZfNjRfY29yZV9ub3RlLgorZGlmZiAtLWdpdCBhL2xpYmVsZi9DaGFuZ2VMb2cgYi9saWJlbGYvQ2hhbmdlTG9nCitpbmRleCAzMDAxN2NkLi45Y2E5YzczIDEwMDY0NAorLS0tIGEvbGliZWxmL0NoYW5nZUxvZworKysrIGIvbGliZWxmL0NoYW5nZUxvZworQEAgLTM5OCw2ICszOTgsMTEgQEAKKyAKKyAJKiBlbGYta25vd2xlZGdlLmggKFNFQ1RJT05fU1RSSVBfUCk6IFJlbW92ZSA8IFNIVF9OVU0gY2hlY2suCisgCisrMjAxMS0wMy0xMCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBnbnVoYXNoX3hsYXRlLmggKGVsZl9jdnRfZ251aGFzaCk6IEF2b2lkIHBvc3QtaW5jcmVtZW50IGluIGJzd2FwXzMyCisrCWFyZ3VtZW50LCBzaW5jZSBzb21lIGltcGxlbWVudGF0aW9ucyBhcmUgYnVnZ3kgbWFjcm9zLgorKworIDIwMTEtMDItMjYgIE1hcmsgV2llbGFhcmQgIDxtandAcmVkaGF0LmNvbT4KKyAKKyAJKiBlbGZfZW5kLmMgKGVsZl9lbmQpOiBDYWxsIHJ3bG9ja191bmxvY2sgYmVmb3JlIHJ3bG9ja19maW5pLgorQEAgLTEwNzUsNiArMTA4MCwxMSBAQAorIAorIAkqIGVsZi5oOiBVcGRhdGUgZnJvbSBnbGliYy4KKyAKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIDIwMDUtMDUtMDggIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogZWxmX2JlZ2luLmMgKHJlYWRfZmlsZSkgW19NVURGTEFQXTogRG9uJ3QgdXNlIG1tYXAgZm9yIG5vdy4KK2RpZmYgLS1naXQgYS9saWJlbGYvY29tbW9uLmggYi9saWJlbGYvY29tbW9uLmgKK2luZGV4IDc0NGYxYmIuLjE4NWVhNTkgMTAwNjQ0CistLS0gYS9saWJlbGYvY29tbW9uLmgKKysrKyBiL2xpYmVsZi9jb21tb24uaAorQEAgLTEzOSw3ICsxMzksNyBAQCBsaWJlbGZfcmVsZWFzZV9hbGwgKEVsZiAqZWxmKQorICAgKFZhcikgPSAoc2l6ZW9mIChWYXIpID09IDEJCQkJCQkgICAgICBcCisgCSAgID8gKHVuc2lnbmVkIGNoYXIpIChWYXIpCQkJCQkgICAgICBcCisgCSAgIDogKHNpemVvZiAoVmFyKSA9PSAyCQkJCQkJICAgICAgXAorLQkgICAgICA/IGJzd2FwXzE2IChWYXIpCQkJCQkJICAgICAgXAorKwkgICAgICA/ICh1bnNpZ25lZCBzaG9ydCBpbnQpIGJzd2FwXzE2IChWYXIpCQkJICAgICAgXAorIAkgICAgICA6IChzaXplb2YgKFZhcikgPT0gNAkJCQkJICAgICAgXAorIAkJID8gYnN3YXBfMzIgKFZhcikJCQkJCSAgICAgIFwKKyAJCSA6IGJzd2FwXzY0IChWYXIpKSkpCitAQCAtMTQ4LDcgKzE0OCw3IEBAIGxpYmVsZl9yZWxlYXNlX2FsbCAoRWxmICplbGYpCisgICAoRHN0KSA9IChzaXplb2YgKFZhcikgPT0gMQkJCQkJCSAgICAgIFwKKyAJICAgPyAodW5zaWduZWQgY2hhcikgKFZhcikJCQkJCSAgICAgIFwKKyAJICAgOiAoc2l6ZW9mIChWYXIpID09IDIJCQkJCQkgICAgICBcCistCSAgICAgID8gYnN3YXBfMTYgKFZhcikJCQkJCQkgICAgICBcCisrCSAgICAgID8gKHVuc2lnbmVkIHNob3J0IGludCkgYnN3YXBfMTYgKFZhcikJCQkgICAgICBcCisgCSAgICAgIDogKHNpemVvZiAoVmFyKSA9PSA0CQkJCQkgICAgICBcCisgCQkgPyBic3dhcF8zMiAoVmFyKQkJCQkJICAgICAgXAorIAkJIDogYnN3YXBfNjQgKFZhcikpKSkKK2RpZmYgLS1naXQgYS9saWJlbGYvZ251aGFzaF94bGF0ZS5oIGIvbGliZWxmL2dudWhhc2hfeGxhdGUuaAoraW5kZXggMDRkOWNhMS4uM2UyNTkzNiAxMDA2NDQKKy0tLSBhL2xpYmVsZi9nbnVoYXNoX3hsYXRlLmgKKysrKyBiL2xpYmVsZi9nbnVoYXNoX3hsYXRlLmgKK0BAIC0xLDUgKzEsNSBAQAorIC8qIENvbnZlcnNpb24gZnVuY3Rpb25zIGZvciB2ZXJzaW9uaW5nIGluZm9ybWF0aW9uLgorLSAgIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTEgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDYuCisgCitAQCAtNjksNyArNjksOSBAQCBlbGZfY3Z0X2dudWhhc2ggKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGxlbiwgaW50IGVuY29kZSkKKyAgIGRlc3QzMiA9IChFbGYzMl9Xb3JkICopICZkZXN0NjRbYml0bWFza193b3Jkc107CisgICB3aGlsZSAobGVuID49IDQpCisgICAgIHsKKy0gICAgICAqZGVzdDMyKysgPSBic3dhcF8zMiAoKnNyYzMyKyspOworKyAgICAgICpkZXN0MzIgPSBic3dhcF8zMiAoKnNyYzMyKTsKKysgICAgICArK2Rlc3QzMjsKKysgICAgICArK3NyYzMyOworICAgICAgIGxlbiAtPSA0OworICAgICB9CisgfQorZGlmZiAtLWdpdCBhL3NyYy9DaGFuZ2VMb2cgYi9zcmMvQ2hhbmdlTG9nCitpbmRleCAxNWU2ZmFlLi43ODUzNWM4IDEwMDY0NAorLS0tIGEvc3JjL0NoYW5nZUxvZworKysrIGIvc3JjL0NoYW5nZUxvZworQEAgLTE1OTgsOCArMTU5OCwxNiBAQAorIAkqIHJlYWRlbGYuYyAoYXR0cl9jYWxsYmFjayk6IFVzZSBwcmludF9ibG9jayBvbmx5IHdoZW4gd2UgZG9uJ3QgdXNlCisgCXByaW50X29wcy4KKyAKKysyMDA5LTA4LTE3ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIGxkLmg6IERpc2FibGUgZXh0ZXJuIGlubGluZXMgZm9yIEdDQyA0LjIuCisrCisgMjAwOS0wOC0xNCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBzdHJpbmdzLmMgKHJlYWRfYmxvY2spOiBDb25kaXRpb25hbGl6ZSBwb3NpeF9mYWR2aXNlIHVzZQorKwlvbiBbUE9TSVhfRkFEVl9TRVFVRU5USUFMXS4KKysJRnJvbSBQZXRyIFNhbGluZ2VyIDxQZXRyLlNhbGluZ2VyQHNlem5hbS5jej4uCisrCisgCSogYXIuYyAoZG9fb3Blcl9leHRyYWN0KTogVXNlIHBhdGhjb25mIGluc3RlYWQgb2Ygc3RhdGZzLgorIAorIDIwMDktMDgtMDEgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorQEAgLTE3NjMsNiArMTc3MSw4IEBACisgCSogcmVhZGVsZi5jIChwcmludF9kZWJ1Z19mcmFtZV9zZWN0aW9uKTogVXNlIHQgaW5zdGVhZCBvZiBqIGZvcm1hdHMKKyAJZm9yIHB0cmRpZmZfdCBPRkZTRVQuCisgCisrCSogYWRkcjJsaW5lLmMgKGhhbmRsZV9hZGRyZXNzKTogVXNlICVhIGluc3RlYWQgb2YgJW0gZm9yIGNvbXBhdGliaWxpdHkuCisrCisgMjAwOS0wMS0yMSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogZWxmbGludC5jIChjaGVja19wcm9ncmFtX2hlYWRlcik6IEZpeCB0eXBvIGluIC5laF9mcmFtZV9oZHIgc2VjdGlvbgorQEAgLTE5NDYsNiArMTk1NiwxMSBAQAorIAl0aGF0IG1hdGNoZXMgaXRzIFBUX0xPQUQncyBwX2ZsYWdzICZ+IFBGX1cuICBPbiBzcGFyYywgUEZfWCByZWFsbHkKKyAJaXMgdmFsaWQgaW4gUkVMUk8uCisgCisrMjAwOC0wMy0wMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiByZWFkZWxmLmMgKGR1bXBfYXJjaGl2ZV9pbmRleCk6IFR3ZWFrIHBvcnRhYmlsaXR5IGhhY2sKKysJdG8gbWF0Y2ggW19fR05VQ19fIDwgNF0gdG9vLgorKworIDIwMDgtMDItMjkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogcmVhZGVsZi5jIChwcmludF9hdHRyaWJ1dGVzKTogQWRkIGEgY2FzdC4KK0BAIC0yMTk3LDYgKzIyMTIsOCBAQAorIAorIAkqIHJlYWRlbGYuYyAoaGV4X2R1bXApOiBGaXggcm91bmRpbmcgZXJyb3IgaW4gd2hpdGVzcGFjZSBjYWxjdWxhdGlvbi4KKyAKKysJKiBNYWtlZmlsZS5hbSAocmVhZGVsZl9ub19XZXJyb3IpOiBOZXcgdmFyaWFibGUuCisrCisgMjAwNy0xMC0xNSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBtYWtlLWRlYnVnLWFyY2hpdmUuaW46IE5ldyBmaWxlLgorQEAgLTI2MzYsNiArMjY1MywxMCBAQAorIAkqIGVsZmxpbnQuYyAodmFsaWRfZV9tYWNoaW5lKTogQWRkIEVNX0FMUEhBLgorIAlSZXBvcnRlZCBieSBDaHJpc3RpYW4gQWljaGluZ2VyIDxHcmVlazBAZ214Lm5ldD4uCisgCisrCSogc3RyaW5ncy5jIChtYXBfZmlsZSk6IERlZmluZSBQT1NJWF9NQURWX1NFUVVFTlRJQUwgdG8KKysJTUFEVl9TRVFVRU5USUFMIGlmIHVuZGVmaW5lZC4gIAlEb24ndCBjYWxsIHBvc2l4X21hZHZpc2UKKysJaWYgbmVpdGhlciBpcyBkZWZpbmVkLgorKworIDIwMDYtMDgtMDggIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGVsZmxpbnQuYyAoY2hlY2tfZHluYW1pYyk6IERvbid0IHJlcXVpcmUgRFRfSEFTSCBmb3IgRFRfU1lNVEFCLgorQEAgLTI3MTIsNiArMjczMywxMCBAQAorIAkqIE1ha2VmaWxlLmFtOiBBZGQgaGFja3MgdG8gY3JlYXRlIGRlcGVuZGVuY3kgZmlsZXMgZm9yIG5vbi1nZW5lcmljCisgCWxpbmtlci4KKyAKKysyMDA2LTA0LTA1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIHN0cmluZ3MuYyAoTUFQX1BPUFVMQVRFKTogRGVmaW5lIHRvIDAgaWYgdW5kZWZpbmVkLgorKworIDIwMDYtMDYtMTIgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGxkZ2VuZXJpYy5jIChsZF9nZW5lcmljX2dlbmVyYXRlX3NlY3Rpb25zKTogRG9uJ3QgY3JlYXRlIC5pbnRlcnAKK0BAIC0zMDYwLDYgKzMwODUsMTEgQEAKKyAJKiByZWFkZWxmLmMgKHByaW50X2RlYnVnX2xvY19zZWN0aW9uKTogRml4IGluZGVudGF0aW9uIGZvciBsYXJnZXIKKyAJYWRkcmVzcyBzaXplLgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wNS0zMCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiByZWFkZWxmLmMgKHByaW50X2RlYnVnX2xpbmVfc2VjdGlvbik6IFByaW50IHNlY3Rpb24gb2Zmc2V0IG9mIGVhY2gKK2RpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0KK2luZGV4IGRiYWMzZWIuLjkwMjhhYTEgMTAwNjQ0CistLS0gYS9zcmMvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9NYWtlZmlsZS5hbQorQEAgLTkwLDYgKzkwLDExIEBAIGVuZGlmCisgbGRnZW5lcmljX25vX1d1bnVzZWQgPSB5ZXMKKyBsZGdlbmVyaWNfbm9fV3N0YWNrX3VzYWdlID0geWVzCisgCisrIyBCdWdneSBvbGQgY29tcGlsZXJzIG9yIGxpYmMgaGVhZGVycy4KKytyZWFkZWxmX25vX1dlcnJvciA9IHllcworK3N0cmluZ3Nfbm9fV2Vycm9yID0geWVzCisrYWRkcjJsaW5lX25vX1dmb3JtYXQgPSB5ZXMKKysKKyAjIEJhZCwgYmFkIHN0YWNrIHVzYWdlLi4uCisgcmVhZGVsZl9ub19Xc3RhY2tfdXNhZ2UgPSB5ZXMKKyBubV9ub19Xc3RhY2tfdXNhZ2UgPSB5ZXMKK2RpZmYgLS1naXQgYS9zcmMvYWRkcjJsaW5lLmMgYi9zcmMvYWRkcjJsaW5lLmMKK2luZGV4IDBjZTg1NGYuLmQyZDBjOGMgMTAwNjQ0CistLS0gYS9zcmMvYWRkcjJsaW5lLmMKKysrKyBiL3NyYy9hZGRyMmxpbmUuYworQEAgLTYyMiwxMCArNjIyLDEwIEBAIGhhbmRsZV9hZGRyZXNzIChjb25zdCBjaGFyICpzdHJpbmcsIER3ZmwgKmR3ZmwpCisgICAgICAgYm9vbCBwYXJzZWQgPSBmYWxzZTsKKyAgICAgICBpbnQgaSwgajsKKyAgICAgICBjaGFyICpuYW1lID0gTlVMTDsKKy0gICAgICBpZiAoc3NjYW5mIChzdHJpbmcsICIoJW1bXildKSUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZhZGRyLCAmaSkgPT0gMgorKyAgICAgIGlmIChzc2NhbmYgKHN0cmluZywgIiglYVteKV0pJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmFkZHIsICZpKSA9PSAyCisgCSAgJiYgc3RyaW5nW2ldID09ICdcMCcpCisgCXBhcnNlZCA9IGFkanVzdF90b19zZWN0aW9uIChuYW1lLCAmYWRkciwgZHdmbCk7CistICAgICAgc3dpdGNoIChzc2NhbmYgKHN0cmluZywgIiVtW14tK10lbiUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZpLCAmYWRkciwgJmopKQorKyAgICAgIHN3aXRjaCAoc3NjYW5mIChzdHJpbmcsICIlYVteLStdJW4lIiBQUklpTUFYICIlbiIsICZuYW1lLCAmaSwgJmFkZHIsICZqKSkKKyAJeworIAlkZWZhdWx0OgorIAkgIGJyZWFrOworZGlmZiAtLWdpdCBhL3NyYy9maW5kdGV4dHJlbC5jIGIvc3JjL2ZpbmR0ZXh0cmVsLmMKK2luZGV4IDI2NGEwNmIuLmQ3ZGUyMDIgMTAwNjQ0CistLS0gYS9zcmMvZmluZHRleHRyZWwuYworKysrIGIvc3JjL2ZpbmR0ZXh0cmVsLmMKK0BAIC01MDIsNyArNTAyLDExIEBAIHB0cmNvbXBhcmUgKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikKKyAKKyAKKyBzdGF0aWMgdm9pZAorLWNoZWNrX3JlbCAoc2l6ZV90IG5zZWdtZW50cywgc3RydWN0IHNlZ21lbnRzIHNlZ21lbnRzW25zZWdtZW50c10sCisrY2hlY2tfcmVsIChzaXplX3QgbnNlZ21lbnRzLCBzdHJ1Y3Qgc2VnbWVudHMgc2VnbWVudHNbCisrI2lmIF9fR05VQ19fID49IDQKKysJCQkJCQkgICAgICBuc2VnbWVudHMKKysjZW5kaWYKKysJICAgXSwKKyAJICAgR0VsZl9BZGRyIGFkZHIsIEVsZiAqZWxmLCBFbGZfU2NuICpzeW1zY24sIER3YXJmICpkdywKKyAJICAgY29uc3QgY2hhciAqZm5hbWUsIGJvb2wgbW9yZV90aGFuX29uZSwgdm9pZCAqKmtub3duc3JjcykKKyB7CitkaWZmIC0tZ2l0IGEvc3JjL2xkLmggYi9zcmMvbGQuaAoraW5kZXggMjlmNDAzMS4uODY5NWMzMSAxMDA2NDQKKy0tLSBhL3NyYy9sZC5oCisrKysgYi9zcmMvbGQuaAorQEAgLTExMTQsNiArMTExNCw3IEBAIGV4dGVybiBib29sIGR5bmFtaWNhbGx5X2xpbmtlZF9wICh2b2lkKTsKKyAKKyAvKiBDaGVja2VkIHdoZXRoZXIgdGhlIHN5bWJvbCBpcyB1bmRlZmluZWQgYW5kIHJlZmVyZW5jZWQgZnJvbSBhIERTTy4gICovCisgZXh0ZXJuIGJvb2wgbGlua2VkX2Zyb21fZHNvX3AgKHN0cnVjdCBzY25pbmZvICpzY25pbmZvLCBzaXplX3Qgc3ltaWR4KTsKKysjaWYgZGVmaW5lZCBfX09QVElNSVpFX18gJiYgIShfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID09IDIpCisgI2lmZGVmIF9fR05VQ19TVERDX0lOTElORV9fCisgX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fKSkKKyAjZW5kaWYKK0BAIC0xMTMxLDUgKzExMzIsNiBAQCBsaW5rZWRfZnJvbV9kc29fcCAoc3RydWN0IHNjbmluZm8gKnNjbmluZm8sIHNpemVfdCBzeW1pZHgpCisgCisgICByZXR1cm4gc3ltLT5kZWZpbmVkICYmIHN5bS0+aW5fZHNvOworIH0KKysjZW5kaWYJLyogT3B0aW1pemluZyBhbmQgbm90IEdDQyA0LjIuICAqLworIAorICNlbmRpZgkvKiBsZC5oICovCitkaWZmIC0tZ2l0IGEvc3JjL3JlYWRlbGYuYyBiL3NyYy9yZWFkZWxmLmMKK2luZGV4IGI0Y2IzYTguLjYwNmQyMjAgMTAwNjQ0CistLS0gYS9zcmMvcmVhZGVsZi5jCisrKysgYi9zcmMvcmVhZGVsZi5jCitAQCAtNDM2NCwxMCArNDM2NCwxMiBAQCBsaXN0cHRyX2Jhc2UgKHN0cnVjdCBsaXN0cHRyICpwKQorICAgcmV0dXJuIGJhc2U7CisgfQorIAorK3N0YXRpYyBjb25zdCBjaGFyICpsaXN0cHRyX25hbWU7CisrCisgc3RhdGljIGludAorLWNvbXBhcmVfbGlzdHB0ciAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwgdm9pZCAqYXJnKQorK2NvbXBhcmVfbGlzdHB0ciAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKKyB7CistICBjb25zdCBjaGFyICpuYW1lID0gYXJnOworKyAgY29uc3QgY2hhciAqY29uc3QgbmFtZSA9IGxpc3RwdHJfbmFtZTsKKyAgIHN0cnVjdCBsaXN0cHRyICpwMSA9ICh2b2lkICopIGE7CisgICBzdHJ1Y3QgbGlzdHB0ciAqcDIgPSAodm9pZCAqKSBiOworIAorQEAgLTQ0NjMsOCArNDQ2NSwxMSBAQCBzdGF0aWMgdm9pZAorIHNvcnRfbGlzdHB0ciAoc3RydWN0IGxpc3RwdHJfdGFibGUgKnRhYmxlLCBjb25zdCBjaGFyICpuYW1lKQorIHsKKyAgIGlmICh0YWJsZS0+biA+IDApCistICAgIHFzb3J0X3IgKHRhYmxlLT50YWJsZSwgdGFibGUtPm4sIHNpemVvZiB0YWJsZS0+dGFibGVbMF0sCistCSAgICAgJmNvbXBhcmVfbGlzdHB0ciwgKHZvaWQgKikgbmFtZSk7CisrICAgIHsKKysgICAgICBsaXN0cHRyX25hbWUgPSBuYW1lOworKyAgICAgIHFzb3J0ICh0YWJsZS0+dGFibGUsIHRhYmxlLT5uLCBzaXplb2YgdGFibGUtPnRhYmxlWzBdLAorKwkgICAgICZjb21wYXJlX2xpc3RwdHIpOworKyAgICB9CisgfQorIAorIHN0YXRpYyBib29sCitAQCAtOTU2MSw3ICs5NTY2LDcgQEAgZHVtcF9hcmNoaXZlX2luZGV4IChFbGYgKmVsZiwgY29uc3QgY2hhciAqZm5hbWUpCisgCSAgaWYgKHVubGlrZWx5IChlbGZfcmFuZCAoZWxmLCBhc19vZmYpID09IDApCisgCSAgICAgIHx8IHVubGlrZWx5ICgoc3ViZWxmID0gZWxmX2JlZ2luICgtMSwgRUxGX0NfUkVBRF9NTUFQLCBlbGYpKQorIAkJCSAgID09IE5VTEwpKQorLSNpZiBfX0dMSUJDX18gPCAyIHx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPCA3KQorKyNpZiBfX0dMSUJDX18gPCAyIHx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPCA3KSB8fCBfX0dOVUNfXyA8IDQKKyAJICAgIHdoaWxlICgxKQorICNlbmRpZgorIAkgICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorZGlmZiAtLWdpdCBhL3NyYy9zdHJpbmdzLmMgYi9zcmMvc3RyaW5ncy5jCitpbmRleCBiMmJjZTdiLi5mZTBhYjZjIDEwMDY0NAorLS0tIGEvc3JjL3N0cmluZ3MuYworKysrIGIvc3JjL3N0cmluZ3MuYworQEAgLTQzLDYgKzQzLDEwIEBACisgCisgI2luY2x1ZGUgPHN5c3RlbS5oPgorIAorKyNpZm5kZWYgTUFQX1BPUFVMQVRFCisrIyBkZWZpbmUgTUFQX1BPUFVMQVRFIDAKKysjZW5kaWYKKysKKyAKKyAvKiBQcm90b3R5cGVzIG9mIGxvY2FsIGZ1bmN0aW9ucy4gICovCisgc3RhdGljIGludCByZWFkX2ZkIChpbnQgZmQsIGNvbnN0IGNoYXIgKmZuYW1lLCBvZmY2NF90IGZkbGVuKTsKK0BAIC00ODksOCArNDkzLDEzIEBAIG1hcF9maWxlIChpbnQgZmQsIG9mZjY0X3Qgc3RhcnRfb2ZmLCBvZmY2NF90IGZkbGVuLCBzaXplX3QgKm1hcF9zaXplcCkKKyAJCSAgICBmZCwgc3RhcnRfb2ZmKTsKKyAgICAgICBpZiAobWVtICE9IE1BUF9GQUlMRUQpCisgCXsKKysjaWYgIWRlZmluZWQgUE9TSVhfTUFEVl9TRVFVRU5USUFMICYmIGRlZmluZWQgTUFEVl9TRVFVRU5USUFMCisrIyBkZWZpbmUgUE9TSVhfTUFEVl9TRVFVRU5USUFMIE1BRFZfU0VRVUVOVElBTAorKyNlbmRpZgorKyNpZmRlZiBQT1NJWF9NQURWX1NFUVVFTlRJQUwKKyAJICAvKiBXZSB3aWxsIGdvIHRocm91Z2ggdGhlIG1hcHBpbmcgc2VxdWVudGlhbGx5LiAgKi8KKyAJICAodm9pZCkgcG9zaXhfbWFkdmlzZSAobWVtLCBtYXBfc2l6ZSwgUE9TSVhfTUFEVl9TRVFVRU5USUFMKTsKKysjZW5kaWYKKyAJICBicmVhazsKKyAJfQorICAgICAgIGlmIChlcnJubyAhPSBFSU5WQUwgJiYgZXJybm8gIT0gRU5PTUVNKQorQEAgLTU4MSw5ICs1OTAsMTEgQEAgcmVhZF9ibG9jayAoaW50IGZkLCBjb25zdCBjaGFyICpmbmFtZSwgb2ZmNjRfdCBmZGxlbiwgb2ZmNjRfdCBmcm9tLCBvZmY2NF90IHRvKQorICAgICAgIGVsZm1hcF9vZmYgPSBmcm9tICYgfihwcyAtIDEpOworICAgICAgIGVsZm1hcF9iYXNlID0gZWxmbWFwID0gbWFwX2ZpbGUgKGZkLCBlbGZtYXBfb2ZmLCBmZGxlbiwgJmVsZm1hcF9zaXplKTsKKyAKKysjaWZkZWYgUE9TSVhfRkFEVl9TRVFVRU5USUFMCisgICAgICAgaWYgKHVubGlrZWx5IChlbGZtYXAgPT0gTUFQX0ZBSUxFRCkpCisgCS8qIExldCB0aGUga2VybmVsIGtub3cgd2UgYXJlIGdvaW5nIHRvIHJlYWQgZXZlcnl0aGluZyBpbiBzZXF1ZW5jZS4gICovCisgCSh2b2lkKSBwb3NpeF9mYWR2aXNlIChmZCwgMCwgMCwgUE9TSVhfRkFEVl9TRVFVRU5USUFMKTsKKysjZW5kaWYKKyAgICAgfQorIAorICAgaWYgKHVubGlrZWx5IChlbGZtYXAgPT0gTUFQX0ZBSUxFRCkpCitkaWZmIC0tZ2l0IGEvc3JjL3N0cmlwLmMgYi9zcmMvc3RyaXAuYworaW5kZXggNWU2OTMzNC4uOGJkMTc5MCAxMDA2NDQKKy0tLSBhL3NyYy9zdHJpcC5jCisrKysgYi9zcmMvc3RyaXAuYworQEAgLTQ0LDYgKzQ0LDEyIEBACisgI2luY2x1ZGUgPGxpYmVibC5oPgorICNpbmNsdWRlIDxzeXN0ZW0uaD4KKyAKKysjaWZkZWYgSEFWRV9GVVRJTUVTCisrIyBkZWZpbmUgRlVUSU1FUyhmZCwgZm5hbWUsIHR2cCkgZnV0aW1lcyAoZmQsIHR2cCkKKysjZWxzZQorKyMgZGVmaW5lIEZVVElNRVMoZmQsIGZuYW1lLCB0dnApIHV0aW1lcyAoZm5hbWUsIHR2cCkKKysjZW5kaWYKKysKKyB0eXBlZGVmIHVpbnQ4X3QgR0VsZl9CeXRlOworIAorIC8qIE5hbWUgYW5kIHZlcnNpb24gb2YgcHJvZ3JhbS4gICovCitkaWZmIC0tZ2l0IGEvdGVzdHMvQ2hhbmdlTG9nIGIvdGVzdHMvQ2hhbmdlTG9nCitpbmRleCAxOTg3OGFjLi42ODE1MDI4IDEwMDY0NAorLS0tIGEvdGVzdHMvQ2hhbmdlTG9nCisrKysgYi90ZXN0cy9DaGFuZ2VMb2cKK0BAIC02MDksNiArNjA5LDEzIEBACisgCisgMjAxMy0xMi0wMiAgSmFuIEtyYXRvY2h2aWwgIDxqYW4ua3JhdG9jaHZpbEByZWRoYXQuY29tPgorIAorKwlIYW5kbGUgVC1zdG9wcGVkIGRldGFjaCBmb3Igb2xkIGtlcm5lbHMuCisrCSogYmFja3RyYWNlLmM6IEluY2x1ZGUgc3lzL3N5c2NhbGwuaC4KKysJKGxpbnV4X3Byb2NfcGlkX2lzX3N0b3BwZWQpOiBOZXcgZnVuY3Rpb24uCisrCShwdHJhY2VfZGV0YWNoX3N0b3BwZWQpOiBIYW5kbGUgb2xkIGtlcm5lbHMuCisrCisrMjAxMy0xMi0wMiAgSmFuIEtyYXRvY2h2aWwgIDxqYW4ua3JhdG9jaHZpbEByZWRoYXQuY29tPgorKworIAkqIE1ha2VmaWxlLmFtIChjaGVja19QUk9HUkFNUyk6IEFkZCBiYWNrdHJhY2UsIGJhY2t0cmFjZS1jaGlsZCwKKyAJYmFja3RyYWNlLWRhdGEgYW5kIGJhY2t0cmFjZS1kd2FyZi4KKyAJKEJVSUxUX1NPVVJDRVMsIGNsZWFuLWxvY2FsLCBiYWNrdHJhY2UtY2hpbGQtYmlhcmNoKTogTmV3LgorQEAgLTE0NzMsNiArMTQ4MCw4IEBACisgCisgMjAwOC0wMS0yMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBsaW5lMmFkZHIuYyAobWFpbik6IFJldmVydCBsYXN0IGNoYW5nZS4KKysKKyAJKiB0ZXN0ZmlsZTQ1LlMuYnoyOiBBZGQgdGVzdHMgZm9yIGNsdHEsIGNxdG8uCisgCSogdGVzdGZpbGU0NS5leHBlY3QuYnoyOiBBZGp1c3QuCisgCitAQCAtMjE4MSw2ICsyMTkwLDExIEBACisgCSogTWFrZWZpbGUuYW0gKFRFU1RTKTogQWRkIHJ1bi1lbGZsaW50LXRlc3Quc2guCisgCShFWFRSQV9ESVNUKTogQWRkIHJ1bi1lbGZsaW50LXRlc3Quc2ggYW5kIHRlc3RmaWxlMTguYnoyLgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wNS0yNCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogZ2V0LWZpbGVzLmMgKG1haW4pOiBVc2UgY29ycmVjdCBmb3JtYXQgc3BlY2lmaWVyLgorZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IDQyNWY4Y2QuLjY5NzYwYTQgMTAwNjQ0CistLS0gYS90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0zODIsNiArMzgyLDcgQEAgZ2V0X2xpbmVzX0xEQUREID0gJChsaWJkdykgJChsaWJlbGYpCisgZ2V0X2ZpbGVzX0xEQUREID0gJChsaWJkdykgJChsaWJlbGYpCisgZ2V0X2FyYW5nZXNfTERBREQgPSAkKGxpYmR3KSAkKGxpYmVsZikKKyBhbGxmY3RzX0xEQUREID0gJChsaWJkdykgJChsaWJlbGYpCisrbGluZTJhZGRyX25vX1dmb3JtYXQgPSB5ZXMKKyBsaW5lMmFkZHJfTERBREQgPSAkKGxpYmR3KSAkKGFyZ3BfTERBREQpCisgYWRkcnNjb3Blc19MREFERCA9ICQobGliZHcpICQoYXJncF9MREFERCkKKyBmdW5jc2NvcGVzX0xEQUREID0gJChsaWJkdykgJChhcmdwX0xEQUREKQorZGlmZiAtLWdpdCBhL3Rlc3RzL2JhY2t0cmFjZS5jIGIvdGVzdHMvYmFja3RyYWNlLmMKK2luZGV4IGFiZDU2YWIuLjZhN2M2NjEgMTAwNjQ0CistLS0gYS90ZXN0cy9iYWNrdHJhY2UuYworKysrIGIvdGVzdHMvYmFja3RyYWNlLmMKK0BAIC0zNiw2ICszNiw3IEBACisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxhcmdwLmg+CisrI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisgI2luY2x1ZGUgRUxGVVRJTFNfSEVBREVSKGR3ZmwpCisgCisgI2lmbmRlZiBfX2xpbnV4X18KK2RpZmYgLS1naXQgYS90ZXN0cy9saW5lMmFkZHIuYyBiL3Rlc3RzL2xpbmUyYWRkci5jCitpbmRleCBlMGQ2NWQzLi43YzE3MWI5IDEwMDY0NAorLS0tIGEvdGVzdHMvbGluZTJhZGRyLmMKKysrKyBiL3Rlc3RzL2xpbmUyYWRkci5jCitAQCAtMTI0LDcgKzEyNCw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgIHsKKyAgICAgICBzdHJ1Y3QgYXJncyBhID0geyAuYXJnID0gYXJndltjbnRdIH07CisgCistICAgICAgc3dpdGNoIChzc2NhbmYgKGEuYXJnLCAiJW1bXjpdOiVkIiwgJmEuZmlsZSwgJmEubGluZSkpCisrICAgICAgc3dpdGNoIChzc2NhbmYgKGEuYXJnLCAiJWFbXjpdOiVkIiwgJmEuZmlsZSwgJmEubGluZSkpCisgCXsKKyAJZGVmYXVsdDoKKyAJY2FzZSAwOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvc2NhbmYtZm9ybWF0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvc2NhbmYtZm9ybWF0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwODUxOWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9zY2FuZi1mb3JtYXQucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbTogS3VydCBSb2Vja3ggPGt1cnRAcm9lY2t4LmJlPgorU3ViamVjdDogVXNlICVtWyBpbnN0ZWFkIG9mICVhWyBpbiBzY2FuZigpCisKKyVhIHdhcyBhIGdudSBleHRlbnRpb24sIGJ1dCBDOTkgbWFkZSB0aGlzIGEgZmxvYXQuICBTbyBpdCBnb3QKK2NoYW5nZWQgdG8gJW0gKHN1cHBvcnRlZCBieSBnbGliYyAyLjcpLCBidXQgJWFbIGFuZCAlYXMgYXJlCitzdGlsbCBzdXBwb3J0ZWQgYnkgZ2xpYmMuICBUaGUgcG9ydGFiaWxpdHkgYnJhbmNoIGNoYW5nZWQgdGhpcworZnJvbSAlbSB0byAlYSBhZ2FpbiBzaW5jZSB0aGF0J3Mgc3VwcG9ydGVkIGJ5IG1vcmUgdmVyc2lvbnMgb2YKK2dsaWJjLiAgSG93ZXZlciBnY2MgZ2l2ZXMgYSB3YXJuaW5nIGFib3V0IHRoaXMgdXNpbmcgLVdmb3JtYXQKK2FuZCB3ZSBoYXZlIGEgbmV3IGVub3VnaCBsaWJjIHRvIHVzZSAlbS4KKworSW5kZXg6IGVsZnV0aWxzLTAuMTUzL3NyYy9hZGRyMmxpbmUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTUzLm9yaWcvc3JjL2FkZHIybGluZS5jCTIwMTItMDItMjQgMjI6Mjk6NTAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTMvc3JjL2FkZHIybGluZS5jCTIwMTItMDItMjQgMjI6Mjk6NTIuMDAwMDAwMDAwICswMDAwCitAQCAtNDU1LDEwICs0NTUsMTAgQEAKKyAgICAgICBib29sIHBhcnNlZCA9IGZhbHNlOworICAgICAgIGludCBpLCBqOworICAgICAgIGNoYXIgKm5hbWUgPSBOVUxMOworLSAgICAgIGlmIChzc2NhbmYgKHN0cmluZywgIiglYVteKV0pJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmFkZHIsICZpKSA9PSAyCisrICAgICAgaWYgKHNzY2FuZiAoc3RyaW5nLCAiKCVtW14pXSklIiBQUklpTUFYICIlbiIsICZuYW1lLCAmYWRkciwgJmkpID09IDIKKyAJICAmJiBzdHJpbmdbaV0gPT0gJ1wwJykKKyAJcGFyc2VkID0gYWRqdXN0X3RvX3NlY3Rpb24gKG5hbWUsICZhZGRyLCBkd2ZsKTsKKy0gICAgICBzd2l0Y2ggKHNzY2FuZiAoc3RyaW5nLCAiJWFbXi0rXSVuJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmksICZhZGRyLCAmaikpCisrICAgICAgc3dpdGNoIChzc2NhbmYgKHN0cmluZywgIiVtW14tK10lbiUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZpLCAmYWRkciwgJmopKQorIAl7CisgCWRlZmF1bHQ6CisgCSAgYnJlYWs7CitJbmRleDogZWxmdXRpbHMtMC4xNTMvdGVzdHMvbGluZTJhZGRyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE1My5vcmlnL3Rlc3RzL2xpbmUyYWRkci5jCTIwMTItMDItMjQgMjI6Mjk6NTAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTMvdGVzdHMvbGluZTJhZGRyLmMJMjAxMi0wMi0yNCAyMjoyOTo1Mi4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMzIsNyArMTMyLDcgQEAKKyAgICAgeworICAgICAgIHN0cnVjdCBhcmdzIGEgPSB7IC5hcmcgPSBhcmd2W2NudF0gfTsKKyAKKy0gICAgICBzd2l0Y2ggKHNzY2FuZiAoYS5hcmcsICIlYVteOl06JWQiLCAmYS5maWxlLCAmYS5saW5lKSkKKysgICAgICBzd2l0Y2ggKHNzY2FuZiAoYS5hcmcsICIlbVteOl06JWQiLCAmYS5maWxlLCAmYS5saW5lKSkKKyAJeworIAlkZWZhdWx0OgorIAljYXNlIDA6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3Rlc3RzdWl0ZS1pZ25vcmUtZWxmbGludC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZTU3OTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZgpAQCAtMCwwICsxLDM5IEBACitPbiBtYW55IGFyY2hpdGVjdHVyZXMgdGhpcyB0ZXN0IGZhaWxzIGJlY2F1c2UgYmluYXJpZXMvbGlicyBwcm9kdWNlZCBieQorYmludXRpbHMgZG9uJ3QgcGFzcyBlbGZsaW50LiBIb3dldmVyIGVsZnV0aWxzIHNob3VsZG4ndCBGVEJGUyBiZWNhdXNlIG9mIHRoaXMuCisKK1NvIHdlIHJ1biB0aGUgdGVzdHMgb24gYWxsIGFyY2hzIHRvIHNlZSB3aGF0IGJyZWFrcywgYnV0IGlmIGl0IGJyZWFrcyB3ZSBpZ25vcmUKK3RoZSByZXN1bHQgKGV4aXRjb2RlIDc3IG1lYW5zOiB0aGlzIHRlc3Qgd2FzIHNraXBwZWQpLgorCitJbmRleDogZWxmdXRpbHMtMC4xNTYvdGVzdHMvcnVuLWVsZmxpbnQtc2VsZi5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTU2Lm9yaWcvdGVzdHMvcnVuLWVsZmxpbnQtc2VsZi5zaAkyMDEzLTA3LTI4IDE0OjM1OjM2LjAwMDAwMDAwMCArMDIwMAorKysrIGVsZnV0aWxzLTAuMTU2L3Rlc3RzL3J1bi1lbGZsaW50LXNlbGYuc2gJMjAxMy0wNy0yOCAxNDozNjoxMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xOCw0ICsxOCw0IEBACisgCisgLiAkc3JjZGlyL3Rlc3Qtc3Vici5zaAorIAorLXRlc3RydW5fb25fc2VsZiAke2Fic190b3BfYnVpbGRkaXJ9L3NyYy9lbGZsaW50IC0tcXVpZXQgLS1nbnUtbGQKKyt0ZXN0cnVuX29uX3NlbGZfc2tpcCAke2Fic190b3BfYnVpbGRkaXJ9L3NyYy9lbGZsaW50IC0tcXVpZXQgLS1nbnUtbGQKK0luZGV4OiBlbGZ1dGlscy0wLjE1Ni90ZXN0cy90ZXN0LXN1YnIuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE1Ni5vcmlnL3Rlc3RzL3Rlc3Qtc3Vici5zaAkyMDEzLTA3LTI4IDE0OjM1OjM2LjAwMDAwMDAwMCArMDIwMAorKysrIGVsZnV0aWxzLTAuMTU2L3Rlc3RzL3Rlc3Qtc3Vici5zaAkyMDEzLTA3LTI4IDE0OjM1OjM2LjAwMDAwMDAwMCArMDIwMAorQEAgLTE0OSwzICsxNDksMTggQEAKKyAgICMgT25seSBleGl0IGlmIHNvbWV0aGluZyBmYWlsZWQKKyAgIGlmIHRlc3QgJGV4aXRfc3RhdHVzICE9IDA7IHRoZW4gZXhpdCAkZXhpdF9zdGF0dXM7IGZpCisgfQorKworKyMgU2FtZSBhcyB0ZXN0cnVuX29uX3NlbGYoKSwgYnV0IHNraXAgb24gZmFpbHVyZS4KKyt0ZXN0cnVuX29uX3NlbGZfc2tpcCgpCisreworKyAgZXhpdF9zdGF0dXM9MAorKworKyAgZm9yIGZpbGUgaW4gJHNlbGZfdGVzdF9maWxlczsgZG8KKysgICAgICB0ZXN0cnVuICQqICRmaWxlIFwKKysJICB8fCB7IGVjaG8gIioqKiBmYWlsdXJlIGluICQqICRmaWxlIjsgZXhpdF9zdGF0dXM9Nzc7IH0KKysgIGRvbmUKKysKKysgICMgT25seSBleGl0IGlmIHNvbWV0aGluZyBmYWlsZWQKKysgIGlmIHRlc3QgJGV4aXRfc3RhdHVzICE9IDA7IHRoZW4gZXhpdCAkZXhpdF9zdGF0dXM7IGZpCisrfQorKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvdWNsaWJjLXN1cHBvcnQtZm9yLWVsZnV0aWxzLTAuMTYxLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvdWNsaWJjLXN1cHBvcnQtZm9yLWVsZnV0aWxzLTAuMTYxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNTMzYmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My91Y2xpYmMtc3VwcG9ydC1mb3ItZWxmdXRpbHMtMC4xNjEucGF0Y2gKQEAgLTAsMCArMSwxMDYgQEAKK0Zyb20gM2RhZWMyZGQxMWEwNDk1NWY5NWU4ZjY1YTQ4ODIwMTAzZDg0ZGJlYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1bmxpbmcgWmhlbmcgPHpoZW5nanVubGluZ0BodWF3ZWkuY29tPgorRGF0ZTogVGh1LCA5IEFwciAyMDE1IDEyOjEyOjQ5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIHVjbGliYyBzdXBwb3J0IGZvciBlbGZ1dGlscyAwLjE2MQorCitvbiB1Y2xpYmMgc3lzdGVtcyBsaWJpbnRsIGFuZCBsaWJ1YXJncCBhcmUgc2VwYXJhdGUgZnJvbSBsaWJjLgorc28gdGhleSBuZWVkIHRvIGJlIHNwZWNpZmllZCBvbiBjb21tYW5kbGluZSB3aGVuIHdlIHVzZSBwcm94eS1saWJpbnRsCit0aGVuIGxpYmludGwgaXMgYSBzdGF0aWMgYXJjaGl2ZSBzbyBpdCBzaG91bGQgYmUgbGlzdGVkIGxhc3Qgc2luY2UKK2VsZnV0aWxzIGRvZXMgbm90IHJlc3BlY3QgZGlzYWJsZS1ubHMgd2UgbmVlZCB0byBsaW5rIGluIGxpYmludGwKKworV2UgYWRkIGEgbmV3IG9wdGlvbiAtLWVuYWJsZS11Y2xpYmMgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGNvbnRyb2wKK3RoZSB1Y2xpYmMgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZHVyaW5nIGJ1aWxkLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3VjbGliYyBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtPgorU2lnbmVkLW9mZi1ieTogSnVubGluZyBaaGVuZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CitbSnVubGluZyBaaGVuZzoKKyAtIGFkanVzdCBjb250ZXh0CitdCistLS0KKyBjb25maWd1cmUuYWMgICAgICAgfCA4ICsrKysrKysrCisgbGliY3B1L01ha2VmaWxlLmFtIHwgNCArKysrCisgbGliZHcvTWFrZWZpbGUuYW0gIHwgNyArKysrKystCisgbGliZWxmL01ha2VmaWxlLmFtIHwgNSArKysrKworIDQgZmlsZXMgY2hhbmdlZCwgMjMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBhMWFkNmRiLi44MWZjMzNmIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC03MCw2ICs3MCwxNCBAQCBBU19JRihbdGVzdCAiJHVzZV9sb2NrcyIgPSB5ZXNdLAorIAorIEFIX1RFTVBMQVRFKFtVU0VfTE9DS1NdLCBbRGVmaW5lZCBpZiBsaWJyYXJpZXMgc2hvdWxkIGJlIHRocmVhZC1zYWZlLl0pCisgCisrQUNfQVJHX0VOQUJMRShbdWNsaWJjXSwKKytBU19IRUxQX1NUUklORyhbLS1lbmFibGUtdWNsaWJjXSwgW1VzZSB1Y2xpYmMgZm9yIHN5c3RlbSBsaWJyYXJpZXNdKSwKKyt1c2VfdWNsaWJjPXllcywgdXNlX3VjbGliYz1ubykKKytBTV9DT05ESVRJT05BTChVU0VfVUNMSUJDLCB0ZXN0ICIkdXNlX3VjbGliYyIgPSB5ZXMpCisrQVNfSUYoW3Rlc3QgIiR1c2VfdWNsaWJjIiA9IHllc10sIFtBQ19ERUZJTkUoVVNFX1VDTElCQyldKQorKworK0FIX1RFTVBMQVRFKFtVU0VfVUNMSUJDXSwgW0RlZmluZWQgaWYgdWNsaWJjIGxpYnJhcmllcyBhcmUgdXNlZC5dKQorKworIEFDX1BST0dfQ0MKKyBBQ19QUk9HX1JBTkxJQgorIEFDX1BST0dfWUFDQworZGlmZiAtLWdpdCBhL2xpYmNwdS9NYWtlZmlsZS5hbSBiL2xpYmNwdS9NYWtlZmlsZS5hbQoraW5kZXggM2JlY2NmMy4uOWJhNmMwNCAxMDA2NDQKKy0tLSBhL2xpYmNwdS9NYWtlZmlsZS5hbQorKysrIGIvbGliY3B1L01ha2VmaWxlLmFtCitAQCAtODAsNiArODAsMTAgQEAgaTM4Nl9wYXJzZV9DRkxBR1MgPSAtRE5NTkVTPSJgd2MgLWwgPCBpMzg2Lm1uZW1vbmljc2AiCisgaTM4Nl9sZXgubzogaTM4Nl9wYXJzZS5oCisgaTM4Nl9nZW5kaXNfTERBREQgPSAkKGxpYmV1KSAtbG0KKyAKKytpZiBVU0VfVUNMSUJDCisraTM4Nl9nZW5kaXNfTERBREQgKz0gLWx1YXJncCAtbGludGwKKytlbmRpZgorKworIGkzODZfcGFyc2UuaDogaTM4Nl9wYXJzZS5jIDsKKyAKKyBFWFRSQV9ESVNUID0gZGVmcy9pMzg2CitkaWZmIC0tZ2l0IGEvbGliZHcvTWFrZWZpbGUuYW0gYi9saWJkdy9NYWtlZmlsZS5hbQoraW5kZXggODg3ZGE2Yi4uZDMxYjQyOCAxMDA2NDQKKy0tLSBhL2xpYmR3L01ha2VmaWxlLmFtCisrKysgYi9saWJkdy9NYWtlZmlsZS5hbQorQEAgLTEwMiw2ICsxMDIsMTEgQEAgZW5kaWYKKyBsaWJkd19waWNfYV9TT1VSQ0VTID0KKyBhbV9saWJkd19waWNfYV9PQkpFQ1RTID0gJChsaWJkd19hX1NPVVJDRVM6LmM9Lm9zKQorIAorK2xpYmR3X3NvX0xETElCUyA9CisraWYgVVNFX1VDTElCQworK2xpYmR3X3NvX0xETElCUyArPSAtbGludGwgLWx1YXJncAorK2VuZGlmCisrCisgbGliZHdfc29fU09VUkNFUyA9CisgbGliZHcuc28kKEVYRUVYVCk6ICQoc3JjZGlyKS9saWJkdy5tYXAgbGliZHdfcGljLmEgLi4vbGliZHdlbGYvbGliZHdlbGZfcGljLmEgXAorIAkgIC4uL2xpYmR3ZmwvbGliZHdmbF9waWMuYSAuLi9saWJlYmwvbGliZWJsLmEgXAorQEAgLTExMiw3ICsxMTcsNyBAQCBsaWJkdy5zbyQoRVhFRVhUKTogJChzcmNkaXIpL2xpYmR3Lm1hcCBsaWJkd19waWMuYSAuLi9saWJkd2VsZi9saWJkd2VsZl9waWMuYSBcCisgCQktV2wsLS1lbmFibGUtbmV3LWR0YWdzLC1ycGF0aCwkKHBrZ2xpYmRpcikgXAorIAkJLVdsLC0tdmVyc2lvbi1zY3JpcHQsJDwsLS1uby11bmRlZmluZWQgXAorIAkJLVdsLC0td2hvbGUtYXJjaGl2ZSAkKGZpbHRlci1vdXQgJDwsJF4pIC1XbCwtLW5vLXdob2xlLWFyY2hpdmVcCistCQktbGRsICQoemlwX0xJQlMpCisrCQktbGRsICQoemlwX0xJQlMpICQobGliZHdfc29fTERMSUJTKQorIAlAJCh0ZXh0cmVsX2NoZWNrKQorIAlsbiAtZnMgJEAgJEAuJChWRVJTSU9OKQorIAorZGlmZiAtLWdpdCBhL2xpYmVsZi9NYWtlZmlsZS5hbSBiL2xpYmVsZi9NYWtlZmlsZS5hbQoraW5kZXggYWZjYjJhYS4uMDI4MzZhMSAxMDA2NDQKKy0tLSBhL2xpYmVsZi9NYWtlZmlsZS5hbQorKysrIGIvbGliZWxmL01ha2VmaWxlLmFtCitAQCAtOTMsNyArOTMsMTIgQEAgbGliZWxmX2FfU09VUkNFUyA9IGVsZl92ZXJzaW9uLmMgZWxmX2hhc2guYyBlbGZfZXJyb3IuYyBlbGZfZmlsbC5jIFwKKyBsaWJlbGZfcGljX2FfU09VUkNFUyA9CisgYW1fbGliZWxmX3BpY19hX09CSkVDVFMgPSAkKGxpYmVsZl9hX1NPVVJDRVM6LmM9Lm9zKQorIAorKworIGxpYmVsZl9zb19MRExJQlMgPQorK2lmIFVTRV9VQ0xJQkMKKytsaWJlbGZfc29fTERMSUJTICs9IC1saW50bCAtbHVhcmdwCisrZW5kaWYKKysKKyBpZiBVU0VfTE9DS1MKKyBsaWJlbGZfc29fTERMSUJTICs9IC1scHRocmVhZAorIGVuZGlmCistLSAKKzEuOC4zLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvRml4X2VsZl9jdnRfZ3VuaGFzaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzL0ZpeF9lbGZfY3Z0X2d1bmhhc2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg2MWU4OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzL0ZpeF9lbGZfY3Z0X2d1bmhhc2gucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRml4IGVsZl9jdnRfZ3VuaGFzaCBpZiBkZXN0IGFuZCBzcmMgYXJlIHNhbWUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGUgJ2Rlc3QnIGFuZCAnc3JjJyBjYW4gYmUgc2FtZSwgd2UgbmVlZCB0byBzYXZlIHRoZSB2YWx1ZSBvZiBzcmMzMlsyXQorYmVmb3JlIHN3YXBpbmcgaXQuCisKK1NpZ25lZC1vZmYtYnk6IEJhb3NoYW4gUGFuZyA8QmFvU2hhbi5QYW5nQHdpbmRyaXZlci5jb20+CitkaWZmIC0tZ2l0IGEvbGliZWxmL2dudWhhc2hfeGxhdGUuaCBiL2xpYmVsZi9nbnVoYXNoX3hsYXRlLmgKK2luZGV4IDZmYWYxMTMuLjA0ZDljYTEgMTAwNjQ0CistLS0gYS9saWJlbGYvZ251aGFzaF94bGF0ZS5oCisrKysgYi9saWJlbGYvZ251aGFzaF94bGF0ZS5oCitAQCAtNDAsNiArNDAsNyBAQCBlbGZfY3Z0X2dudWhhc2ggKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGxlbiwgaW50IGVuY29kZSkKKyAgICAgIHdvcmRzLiAgV2UgbXVzdCBkZXRhbmdsZSB0aGVtIGhlcmUuICAgKi8KKyAgIEVsZjMyX1dvcmQgKmRlc3QzMiA9IGRlc3Q7CisgICBjb25zdCBFbGYzMl9Xb3JkICpzcmMzMiA9IHNyYzsKKysgIEVsZjMyX1dvcmQgc2F2ZV9zcmMzMl8yID0gc3JjMzJbMl07IC8vIGRlc3QgY291bGQgYmUgZXF1YWwgdG8gc3JjCisgCisgICAvKiBGaXJzdCBmb3VyIGNvbnRyb2wgd29yZHMsIDMyIGJpdHMuICAqLworICAgZm9yICh1bnNpZ25lZCBpbnQgY250ID0gMDsgY250IDwgNDsgKytjbnQpCitAQCAtNTAsNyArNTEsNyBAQCBlbGZfY3Z0X2dudWhhc2ggKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGxlbiwgaW50IGVuY29kZSkKKyAgICAgICBsZW4gLT0gNDsKKyAgICAgfQorIAorLSAgRWxmMzJfV29yZCBiaXRtYXNrX3dvcmRzID0gZW5jb2RlID8gc3JjMzJbMl0gOiBkZXN0MzJbMl07CisrICBFbGYzMl9Xb3JkIGJpdG1hc2tfd29yZHMgPSBlbmNvZGUgPyBzYXZlX3NyYzMyXzIgOiBkZXN0MzJbMl07CisgCisgICAvKiBOb3cgdGhlIDY0IGJpdCB3b3Jkcy4gICovCisgICBFbGY2NF9Yd29yZCAqZGVzdDY0ID0gKEVsZjY0X1h3b3JkICopICZkZXN0MzJbNF07CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy9kc28tbGluay1jaGFuZ2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy9kc28tbGluay1jaGFuZ2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBjZDNlZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzL2Rzby1saW5rLWNoYW5nZS5wYXRjaApAQCAtMCwwICsxLDMyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIyBUaGlzIHBhdGNoIG1ha2VzIHRoZSBsaW5rIHRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgbGliZHcgZXhwbGljaXQsIGFzIHJlY2VudAorIyBsZCBubyBsb25nZXIgaW1wbGljaXRseSBsaW5rcyB0aGVtLiBTZWUKKyMgaHR0cDovL2xpc3RzLmZlZG9yYXByb2plY3Qub3JnL3BpcGVybWFpbC9kZXZlbC8yMDEwLU1hcmNoLzEzMzYwMS5odG1sIGFzCisjIGEgc2ltaWxhciBleGFtcGxlIG9mIHRoZSBlcnJvciBtZXNzYWdlIHlvdSBjYW4gZW5jb3VudGVyIHdpdGhvdXQgdGhpcyBwYXRjaCwKKyMgYW5kIGh0dHBzOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9VbmRlcnN0YW5kaW5nRFNPTGlua0NoYW5nZSBhbmQKKyMgaHR0cHM6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93aWtpL0ZlYXR1cmVzL0NoYW5nZUluSW1wbGljaXREU09MaW5raW5nIGZvciBtb3JlCisjIGRldGFpbHMuCisKKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9NYWtlZmlsZS5hbQorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9NYWtlZmlsZS5hbQorQEAgLTg2LDcgKzg2LDcgQEAgbGliZHcgPSAuLi9saWJkdy9saWJkdy5hICQoemlwX0xJQlMpICQobAorIGxpYmVsZiA9IC4uL2xpYmVsZi9saWJlbGYuYQorIGVsc2UKKyBsaWJhc20gPSAuLi9saWJhc20vbGliYXNtLnNvCistbGliZHcgPSAuLi9saWJkdy9saWJkdy5zbworK2xpYmR3ID0gLi4vbGliZHcvbGliZHcuc28gJCh6aXBfTElCUykgJChsaWJlbGYpICQobGliZWJsKSAtbGRsCisgbGliZWxmID0gLi4vbGliZWxmL2xpYmVsZi5zbworIGVuZGlmCisgbGliZWJsID0gLi4vbGliZWJsL2xpYmVibC5hCistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGVsZnV0aWxzLTAuMTQ4L3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMTcyLDcgKzE3Miw3IEBAIGxpYmR3ID0gLi4vbGliZHcvbGliZHcuYSAkKHppcF9MSUJTKSAkKGwKKyBsaWJlbGYgPSAuLi9saWJlbGYvbGliZWxmLmEKKyBsaWJhc20gPSAuLi9saWJhc20vbGliYXNtLmEKKyBlbHNlCistbGliZHcgPSAuLi9saWJkdy9saWJkdy5zbworK2xpYmR3ID0gLi4vbGliZHcvbGliZHcuc28gJCh6aXBfTElCUykgJChsaWJlbGYpICQobGliZWJsKSAtbGRsCisgbGliZWxmID0gLi4vbGliZWxmL2xpYmVsZi5zbworIGxpYmFzbSA9IC4uL2xpYmFzbS9saWJhc20uc28KKyBlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvbWVtcGNweS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzL21lbXBjcHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRlMzFmYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzL21lbXBjcHkucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorCit1Y2xpYmMgZG9lcyBub3QgZXhwb3J0IF9fbWVtcGNweSBsaWtlIGdsaWJjIHNvIHdlIGFsaWFzIGl0IGhlcmUuCitUaGlzIHBhdGNoIG1heSBtYWtlIHNlbnNlIGZvciB1cHN0cmVhbSBidXQgZWxmdXRpbHMgdXNlcyBtb3JlCitnbGliYyBzcGVjaWZpYyBmZWF0dXJlcyBsaWtlIG9ic3RhY2tfcHJpbnRmIHdoaWNoIGFyZSBtaXNzaW5nIGluCit1Y2xpYmMgdGhleSBuZWVkIHRvIGJlIGZpeGVkIGFsb25nIHRvIG1ha2UgaXQgd29yayBhbGwgdGhlIHdheQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGVbRWxmdXRpbHMgdXNlcyBtb3JlIGdsaWJjIHNwZWNpZmljIGZlYXR1cmVzXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZl9iZWdpbi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZWxmX2JlZ2luLmMKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmX2JlZ2luLmMKK0BAIC02OCw2ICs2OCw5IEBACisgI2luY2x1ZGUgImxpYmVsZlAuaCIKKyAjaW5jbHVkZSAiY29tbW9uLmgiCisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysjZGVmaW5lIF9fbWVtcGNweSBtZW1wY3B5CisrI2VuZGlmCisgCisgLyogQ3JlYXRlIGRlc2NyaXB0b3IgZm9yIGFyY2hpdmUgaW4gbWVtb3J5LiAgKi8KKyBzdGF0aWMgaW5saW5lIEVsZiAqCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE0OC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzXzAuMTQ4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkODQ5MGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE0OC5iYgpAQCAtMCwwICsxLDkxIEBACitTVU1NQVJZID0gIlV0aWxpdGllcyBhbmQgbGlicmFyaWVzIGZvciBoYW5kbGluZyBjb21waWxlZCBvYmplY3QgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvZWxmdXRpbHMiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIihHUEwtMisgJiBFbGZ1dGlscy1FeGNlcHRpb24pIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjNcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9FWENFUFRJT047bWQ1PTU3MGFkY2IwYzEyMThhYjU3ZjIyNDljNjdkMGNlNDE3IgorREVQRU5EUyA9ICJsaWJ0b29sIGJ6aXAyIHpsaWIgdmlydHVhbC9saWJpbnRsIgorCitQUiA9ICJyMTEiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL3JlbGVhc2VzL2UvbC8ke0JQTn0vJHtCUH0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gImEwYmVkMTEzMDEzNWYxN2FkMjc1MzNiMDAzNGRiYThkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhhZWJmYTRhNzQ1ZGIyMWNmNTQyOWM5NTQxZmU0ODI3MjliNjJlZmM3ZTUzZTkxMTAxNTFiNDE2OWZlODg3ZGEiCisKKyMgcGljayB0aGUgcGF0Y2ggZnJvbSBkZWJpYW4KKyMgaHR0cDovL2Z0cC5kZS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vZS9lbGZ1dGlscy9lbGZ1dGlsc18wLjE0OC0xLmRlYmlhbi50YXIuZ3oKKworU1JDX1VSSSArPSAiXAorICAgICAgICBmaWxlOi8vcmVkaGF0LXBvcnRhYmlsaXR5LmRpZmYgXAorICAgICAgICBmaWxlOi8vcmVkaGF0LXJvYnVzdGlmeS5kaWZmIFwKKyAgICAgICAgZmlsZTovL2hwcGFfYmFja2VuZC5kaWZmIFwKKyAgICAgICAgZmlsZTovL2FybV9iYWNrZW5kLmRpZmYgXAorICAgICAgICBmaWxlOi8vbWlwc19iYWNrZW5kLmRpZmYgXAorICAgICAgICBmaWxlOi8vbTY4a19iYWNrZW5kLmRpZmYgXAorICAgICAgICBmaWxlOi8vdGVzdHN1aXRlLWlnbm9yZS1lbGZsaW50LmRpZmYgXAorICAgICAgICBmaWxlOi8vZWxmX2FkZGl0aW9ucy5kaWZmIFwKKyAgICAgICAgZmlsZTovL2VsZnV0aWxzLWZzaXplLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL3JlbW92ZS11bnVzZWQucGF0Y2ggXAorICAgICAgICBmaWxlOi8vbWVtcGNweS5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9maXhfZm9yX2djYy00LjcucGF0Y2ggXAorICAgICAgICBmaWxlOi8vZHNvLWxpbmstY2hhbmdlLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL25tLUZpeC1zaXplLXBhc3NlZC10by1zbnByaW50Zi1mb3ItaW52YWxpZC1zaF9uYW1lLWNhc2UucGF0Y2ggXAorICAgICAgICBmaWxlOi8vZWxmdXRpbHMtYXItYy1maXgtbnVtLXBhc3NlZC10by1tZW1zZXQucGF0Y2ggXAorICAgICAgICBmaWxlOi8vRml4X2VsZl9jdnRfZ3VuaGFzaC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9lbGZfYmVnaW4uYy1DVkUtMjAxNC05NDQ3LWZpeC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9maXgtYnVpbGQtZ2NjLTQuOC5wYXRjaCBcCisiCisjIE9ubHkgYXBwbHkgd2hlbiBidWlsZGluZyB1Y2xpYmMgYmFzZWQgdGFyZ2V0IHJlY2lwZQorU1JDX1VSSV9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIGZpbGU6Ly91Y2xpYmMtc3VwcG9ydC1mb3ItZWxmdXRpbHMtMC4xNDgucGF0Y2giCisKKyMgVGhlIGJ1aWxkc3lzdGVtIHdhbnRzIHRvIGdlbmVyYXRlIDIgLmggZmlsZXMgZnJvbSBzb3VyY2UgdXNpbmcgYSBiaW5hcnkgaXQganVzdCBidWlsdCwKKyMgd2hpY2ggY2FuIG5vdCBwYXNzIHRoZSBjcm9zcyBjb21waWxpbmcsIHNvIGxldCdzIHdvcmsgYXJvdW5kIGl0IGJ5IGFkZGluZyAyIC5oIGZpbGVzCisjIGFsb25nIHdpdGggdGhlIGRvX2NvbmZpZ3VyZV9wcmVwZW5kKCkKKworU1JDX1VSSSArPSAiXAorICAgICAgICBmaWxlOi8vaTM4Nl9kaXMuaCBcCisgICAgICAgIGZpbGU6Ly94ODZfNjRfZGlzLmggXAorIgoraW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCitFWFRSQV9PRUNPTkYgPSAiLS1wcm9ncmFtLXByZWZpeD1ldS0gLS13aXRob3V0LWx6bWEiCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgLS13aXRob3V0LWJ6bGliIgorRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS1lbmFibGUtdWNsaWJjIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBzZWQgLWkgJy9eaTM4Nl9kaXMuaDovLCs0IHsvLiovZH0nICR7U30vbGliY3B1L01ha2VmaWxlLmFtCisKKyAgICBjcCAke1dPUktESVJ9LypkaXMuaCAke1N9L2xpYmNwdQorfQorCisjIHdlIGNhbiBub3QgYnVpbGQgY29tcGxldGUgZWxmdXRpbHMgd2hlbiB1c2luZyB1Y2xpYmMKKyMgYnV0IHNvbWUgcmVjaXBlcyBlLmcuIGdjYyA0LjUgZGVwZW5kcyBvbiBsaWJlbGYgc28gd2UKKyMgYnVpbGQgb25seSBsaWJlbGYgZm9yIHVjbGliYyBjYXNlCisKK0VYVFJBX09FTUFLRV9saWJjLXVjbGliYyA9ICItQyBsaWJlbGYiCitFWFRSQV9PRU1BS0VfY2xhc3MtbmF0aXZlID0gIiIKK0VYVFJBX09FTUFLRV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKKyMgUGFja2FnZSB1dGlsaXRpZXMgc2VwYXJhdGVseQorUEFDS0FHRVMgPSsgIiR7UE59LWJpbnV0aWxzIGxpYmVsZiBsaWJhc20gbGliZHciCitGSUxFU18ke1BOfS1iaW51dGlscyA9ICJcCisgICAgJHtiaW5kaXJ9L2V1LWFkZHIybGluZSBcCisgICAgJHtiaW5kaXJ9L2V1LWxkIFwKKyAgICAke2JpbmRpcn0vZXUtbm0gXAorICAgICR7YmluZGlyfS9ldS1yZWFkZWxmIFwKKyAgICAke2JpbmRpcn0vZXUtc2l6ZSBcCisgICAgJHtiaW5kaXJ9L2V1LXN0cmlwIgorCitGSUxFU19saWJlbGYgPSAiJHtsaWJkaXJ9L2xpYmVsZi0ke1BWfS5zbyAke2xpYmRpcn0vbGliZWxmLnNvLioiCitGSUxFU19saWJhc20gPSAiJHtsaWJkaXJ9L2xpYmFzbS0ke1BWfS5zbyAke2xpYmRpcn0vbGliYXNtLnNvLioiCitGSUxFU19saWJkdyAgPSAiJHtsaWJkaXJ9L2xpYmR3LSR7UFZ9LnNvICR7bGliZGlyfS9saWJkdy5zby4qICR7bGliZGlyfS9lbGZ1dGlscy9saWIqIgorIyBTb21lIHBhY2thZ2VzIGhhdmUgdGhlIHZlcnNpb24gcHJlY2VlZGluZyB0aGUgLnNvIGluc3RlYWQgcHJvcGVybHkKKyMgdmVyc2lvbmVkIC5zby48dmVyc2lvbj4sIHNvIHdlIG5lZWQgdG8gcmVvcmRlciBhbmQgcmVwYWNrYWdlLgorI0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vKi0ke1BWfS5zbyAke2Jhc2VfbGliZGlyfS8qLSR7UFZ9LnNvIgorI0ZJTEVTX1NPTElCU0RFViA9ICIke2xpYmRpcn0vbGliYXNtLnNvICR7bGliZGlyfS9saWJkdy5zbyAke2xpYmRpcn0vbGliZWxmLnNvIgorCisjIFRoZSBwYWNrYWdlIGNvbnRhaW5zIHN5bWxpbmtzIHRoYXQgdHJpcCB1cCBpbnNhbmUKK0lOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliZHcgPSAiZGV2LXNvIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE2My5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzkxODEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNjMuYmIKQEAgLTAsMCArMSw4NyBAQAorU1VNTUFSWSA9ICJVdGlsaXRpZXMgYW5kIGxpYnJhcmllcyBmb3IgaGFuZGxpbmcgY29tcGlsZWQgb2JqZWN0IGZpbGVzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL2VsZnV0aWxzIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICIoR1BMdjMgJiBFbGZ1dGlscy1FeGNlcHRpb24pIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCitERVBFTkRTID0gImxpYnRvb2wgYnppcDIgemxpYiB2aXJ0dWFsL2xpYmludGwiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL3JlbGVhc2VzL2UvbC9lbGZ1dGlscy8ke1BWfS8ke0JQfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzdjZTg3ZjI1OTk4N2QyZTU0ZTRkODdiODZjYmVlNDEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2M3NzRmMWVlZjMyOTMwOWYzYjA1ZTczMGJkYWM1MDAxMzE1NWQ0Mzc1MThhMmVjMGUyNDg3MWQzMTJmMmUyMyIKKworU1JDX1VSSSArPSAiXAorICAgICAgICBmaWxlOi8vbWVtcGNweS5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9kc28tbGluay1jaGFuZ2UucGF0Y2ggXAorICAgICAgICBmaWxlOi8vRml4X2VsZl9jdnRfZ3VuaGFzaC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9maXhoZWFkZXJjaGVjay5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDAxLWVsZl9nZXRhcnN5bS1TaWxlbmNlLVdlcnJvci1tYXliZS11bmluaXRpYWxpemVkLWZhbHMucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwMS1yZW1vdmUtdGhlLXVubmVlZC1jaGVja2luZy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDAxLWZpeC1hLXN0YWNrLXVzYWdlLXdhcm5pbmcucGF0Y2ggXAorIgorCisjIHBpY2sgdGhlIHBhdGNoIGZyb20gZGViaWFuCisjIGh0dHA6Ly9mdHAuZGUuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2UvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNTktNC5kZWJpYW4udGFyLnh6CitTUkNfVVJJICs9ICJcCisgICAgICAgIGZpbGU6Ly9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9ocHBhX2JhY2tlbmQuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9hcm1fYmFja2VuZC5kaWZmIFwKKyAgICAgICAgZmlsZTovL21pcHNfYmFja2VuZC5kaWZmIFwKKyAgICAgICAgZmlsZTovL202OGtfYmFja2VuZC5kaWZmIFwKKyAgICAgICAgZmlsZTovL3Rlc3RzdWl0ZS1pZ25vcmUtZWxmbGludC5kaWZmIFwKKyAgICAgICAgZmlsZTovL3NjYW5mLWZvcm1hdC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9taXBzX3JlYWRlbGZfdy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9hcm1fZnVuY192YWx1ZS5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9hcm1fdW53aW5kX3JldF9tYXNrLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL25vbl9saW51eC5wYXRjaCBcCisiCisKKyMgT25seSBhcHBseSB3aGVuIGJ1aWxkaW5nIHVjbGliYyBiYXNlZCB0YXJnZXQgcmVjaXBlCitTUkNfVVJJX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgZmlsZTovL3VjbGliYy1zdXBwb3J0LWZvci1lbGZ1dGlscy0wLjE2MS5wYXRjaCIKKworIyBUaGUgYnVpbGRzeXN0ZW0gd2FudHMgdG8gZ2VuZXJhdGUgMiAuaCBmaWxlcyBmcm9tIHNvdXJjZSB1c2luZyBhIGJpbmFyeSBpdCBqdXN0IGJ1aWx0LAorIyB3aGljaCBjYW4gbm90IHBhc3MgdGhlIGNyb3NzIGNvbXBpbGluZywgc28gbGV0J3Mgd29yayBhcm91bmQgaXQgYnkgYWRkaW5nIDIgLmggZmlsZXMKKyMgYWxvbmcgd2l0aCB0aGUgZG9fY29uZmlndXJlX3ByZXBlbmQoKQorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK0VYVFJBX09FQ09ORiA9ICItLXByb2dyYW0tcHJlZml4PWV1LSAtLXdpdGhvdXQtbHptYSIKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLXdpdGhvdXQtYnpsaWIiCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLWVuYWJsZS11Y2xpYmMiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiAhPSAieDg2XzY0IiBdICYmIFsgLXogYGVjaG8gIiR7VEFSR0VUX0FSQ0h9InxncmVwICdpLjg2J2AgXTt0aGVuCisJCXJtICR7RH0ke2JpbmRpcn0vZXUtb2JqZHVtcAorCWZpCit9CisKKyMgd2UgY2FuIG5vdCBidWlsZCBjb21wbGV0ZSBlbGZ1dGlscyB3aGVuIHVzaW5nIHVjbGliYworIyBidXQgc29tZSByZWNpcGVzIGUuZy4gZ2NjIDQuNSBkZXBlbmRzIG9uIGxpYmVsZiBzbyB3ZQorIyBidWlsZCBvbmx5IGxpYmVsZiBmb3IgdWNsaWJjIGNhc2UKKworRVhUUkFfT0VNQUtFX2xpYmMtdWNsaWJjID0gIi1DIGxpYmVsZiIKK0VYVFJBX09FTUFLRV9jbGFzcy1uYXRpdmUgPSAiIgorRVhUUkFfT0VNQUtFX2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworIyBQYWNrYWdlIHV0aWxpdGllcyBzZXBhcmF0ZWx5CitQQUNLQUdFUyA9KyAiJHtQTn0tYmludXRpbHMgbGliZWxmIGxpYmFzbSBsaWJkdyIKK0ZJTEVTXyR7UE59LWJpbnV0aWxzID0gIlwKKyAgICAke2JpbmRpcn0vZXUtYWRkcjJsaW5lIFwKKyAgICAke2JpbmRpcn0vZXUtbGQgXAorICAgICR7YmluZGlyfS9ldS1ubSBcCisgICAgJHtiaW5kaXJ9L2V1LXJlYWRlbGYgXAorICAgICR7YmluZGlyfS9ldS1zaXplIFwKKyAgICAke2JpbmRpcn0vZXUtc3RyaXAiCisKK0ZJTEVTX2xpYmVsZiA9ICIke2xpYmRpcn0vbGliZWxmLSR7UFZ9LnNvICR7bGliZGlyfS9saWJlbGYuc28uKiIKK0ZJTEVTX2xpYmFzbSA9ICIke2xpYmRpcn0vbGliYXNtLSR7UFZ9LnNvICR7bGliZGlyfS9saWJhc20uc28uKiIKK0ZJTEVTX2xpYmR3ICA9ICIke2xpYmRpcn0vbGliZHctJHtQVn0uc28gJHtsaWJkaXJ9L2xpYmR3LnNvLiogJHtsaWJkaXJ9L2VsZnV0aWxzL2xpYioiCisjIFNvbWUgcGFja2FnZXMgaGF2ZSB0aGUgdmVyc2lvbiBwcmVjZWVkaW5nIHRoZSAuc28gaW5zdGVhZCBwcm9wZXJseQorIyB2ZXJzaW9uZWQgLnNvLjx2ZXJzaW9uPiwgc28gd2UgbmVlZCB0byByZW9yZGVyIGFuZCByZXBhY2thZ2UuCisjRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8qLSR7UFZ9LnNvICR7YmFzZV9saWJkaXJ9LyotJHtQVn0uc28iCisjRklMRVNfU09MSUJTREVWID0gIiR7bGliZGlyfS9saWJhc20uc28gJHtsaWJkaXJ9L2xpYmR3LnNvICR7bGliZGlyfS9saWJlbGYuc28iCisKKyMgVGhlIHBhY2thZ2UgY29udGFpbnMgc3ltbGlua3MgdGhhdCB0cmlwIHVwIGluc2FuZQorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJkdyA9ICJkZXYtc28iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAwMDEtY29uZmlndXJlLmluLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZXhwZWN0L2V4cGVjdC8wMDAxLWNvbmZpZ3VyZS5pbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTk1YTI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZXhwZWN0L2V4cGVjdC8wMDAxLWNvbmZpZ3VyZS5pbi5wYXRjaApAQCAtMCwwICsxLDEwOCBAQAorQWxsb3cgY3Jvc3MgY29tcGlsaW5nLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRlcnMgUm94ZWxsIDxhbmRlcnMucm94ZWxsQGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KK2RpZmYgLXVOciBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgorLS0tIGEvY29uZmlndXJlLmluCTIwMTItMTItMTQgMTU6MzE6MzIuNjIzMTgwNDUwICswMTAwCisrKysgYi9jb25maWd1cmUuaW4JMjAxMi0xMi0xNCAxNTo1MzozNC41MTgyMzM1MTkgKzAxMDAKK0BAIC00ODEsNyArNDgxLDcgQEAKKyAsCisgCUFDX01TR19SRVNVTFQobm8pCisgLAorLQlBQ19NU0dfRVJST1IoW0V4cGVjdCBjYW4ndCBiZSBjcm9zcyBjb21waWxlZF0pCisrCUFDX01TR19SRVNVTFQobm8pCisgKQorIAorIEFDX01TR19DSEVDS0lORyhbaWYgYW55IHZhbHVlIGV4aXN0cyBmb3IgV05PSEFOR10pCitAQCAtNTA2LDcgKzUwNiw5IEBACisgCUFDX01TR19SRVNVTFQobm8pCisgCUFDX0RFRklORShXTk9IQU5HX0JBQ0tVUF9WQUxVRSwgMSkKKyAsCistCUFDX01TR19FUlJPUihbRXhwZWN0IGNhbid0IGJlIGNyb3NzIGNvbXBpbGVkXSkKKysJQUNfTVNHX1JFU1VMVCh5ZXMpCisrCUFDX0RFRklORV9VTlFVT1RFRChXTk9IQU5HX0JBQ0tVUF9WQUxVRSwgYGNhdCB3bm9oYW5nYCkKKysJcm0gLWYgd25vaGFuZworICkKKyAKKyAjCitAQCAtNTc0LDcgKzU3Niw4IEBACisgCUFDX0RFRklORShSRUFSTV9TSUcpCisgLAorIAlBQ19NU0dfUkVTVUxUKG5vKQorLSwgQUNfTVNHX1dBUk4oW0V4cGVjdCBjYW4ndCBiZSBjcm9zcyBjb21waWxlZF0pCisrLAorKwlBQ19NU0dfUkVTVUxUKG5vKQorICkKKyAKKyAjIEhQVVg3IGhhcyB0cm91YmxlIHdpdGggdGhlIGJpZyBjYXQgc28gc3BsaXQgaXQKK0BAIC03MjUsNyArNzI4LDkgQEAKKyAsCisgICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICwKKy0JQUNfTVNHX0VSUk9SKFtFeHBlY3QgY2FuJ3QgYmUgY3Jvc3MgY29tcGlsZWRdKQorKyAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisrICAgICAgICBBQ19ERUZJTkUoSEFWRV9TR1RUWUIpCisrICAgICAgICBQVFlfVFlQRT1zZ3R0eWIKKyApCisgCisgIyBtYWNoIHN5c3RlbXMgaGF2ZSBpbmNsdWRlIGZpbGVzIGZvciB1bmltcGxlbWVudGVkIGZlYXR1cmVzCitAQCAtNzQ5LDcgKzc1NCw5IEBACisgLAorICAgICAgICAgQUNfTVNHX1JFU1VMVChubykKKyAsCistCUFDX01TR19FUlJPUihbRXhwZWN0IGNhbid0IGJlIGNyb3NzIGNvbXBpbGVkXSkKKysgICAgICAgIEFDX0RFRklORShIQVZFX1RFUk1JTykKKysgICAgICAgIFBUWV9UWVBFPXRlcm1pb3MKKysgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorICkKKyAKKyAgICMgbm93IGNoZWNrIGZvciB0aGUgbmV3IHN0eWxlIHR0eXMgKG5vdCB5ZXQgcG9zaXgpCitAQCAtNzcxLDcgKzc3OCw5IEBACisgICAsCisgICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgLAorLQlBQ19NU0dfRVJST1IoW0V4cGVjdCBjYW4ndCBiZSBjcm9zcyBjb21waWxlZF0pCisrICAgICAgICBBQ19ERUZJTkUoSEFWRV9URVJNSU9TKQorKyAgICAgICAgUFRZX1RZUEU9dGVybWlvcworKyAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICApCisgZmkKKyAKK0BAIC03OTQsNyArODAzLDcgQEAKKyAsCisgCUFDX01TR19SRVNVTFQobm8pCisgLAorLQlBQ19NU0dfRVJST1IoW0V4cGVjdCBjYW4ndCBiZSBjcm9zcyBjb21waWxlZF0pCisrCUFDX01TR19SRVNVTFQobm8pCisgKQorIAorIEFDX01TR19DSEVDS0lORyhbaWYgVElPQ0dXSU5TWiBpbiB0ZXJtaW9zLmhdKQorQEAgLTgxNiw3ICs4MjUsNyBAQAorICwKKyAJQUNfTVNHX1JFU1VMVChubykKKyAsCistCUFDX01TR19FUlJPUihbRXhwZWN0IGNhbid0IGJlIGNyb3NzIGNvbXBpbGVkXSkKKysJQUNfTVNHX1JFU1VMVChubykKKyApCisgCisgIyBmaW5hbGx5IGNoZWNrIGZvciBDcmF5IHN0eWxlIHR0eXMKK0BAIC04MzcsNyArODQ2LDcgQEAKKyAsCisgCUFDX01TR19SRVNVTFQobm8pCisgLAorLQlBQ19NU0dfRVJST1IoW0V4cGVjdCBjYW4ndCBiZSBjcm9zcyBjb21waWxlZF0pCisrCUFDX01TR19SRVNVTFQobm8pCisgKQorIAorICMKK0BAIC04ODksNyArODk4LDggQEAKKyAJQUNfTVNHX1JFU1VMVCh5ZXMpLAorIAlBQ19NU0dfUkVTVUxUKG5vKQorICwKKy0JQUNfTVNHX0VSUk9SKFtFeHBlY3QgY2FuJ3QgYmUgY3Jvc3MgY29tcGlsZWRdKQorKwlBQ19ERUZJTkUoSEFWRV9TVl9USU1FWk9ORSkKKysJQUNfTVNHX1JFU1VMVCh5ZXMpLAorICkKKyAKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDAwMS1leHBlY3QtaW5zdGFsbC1zY3JpcHRzLXdpdGhvdXQtdXNpbmctdGhlLWZpeGxpbmUxLXRjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZXhwZWN0L2V4cGVjdC8wMDAxLWV4cGVjdC1pbnN0YWxsLXNjcmlwdHMtd2l0aG91dC11c2luZy10aGUtZml4bGluZTEtdGMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc0YWQ4NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDAwMS1leHBlY3QtaW5zdGFsbC1zY3JpcHRzLXdpdGhvdXQtdXNpbmctdGhlLWZpeGxpbmUxLXRjLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbd3JsaW51eCBzcGVjaWZpY10KKworU3ViamVjdDogZXhwZWN0OiBpbnN0YWxsIHNjcmlwdHMgd2l0aG91dCB1c2luZyB0aGUgZml4bGluZTEgdGNsIHNjcmlwdAorCitPbiBvbGRlciBtYWNoaW5lcyBsaWtlIFNMRUQxMS4yLCB3ZSBhcmUgZW5jb3VudGVyaW5nIGRvX2luc3RhbGwgZmFpbHVyZXMKK2NvbXBsYWluaW5nIHRoYXQgJ0dMSUJDXzIuMTQnIGlzIG5vdCBmb3VuZCBpbiAvbGliNjQvbGliYy5zby42IGJ1dCBpcyByZXF1aXJlZAorYnkgbGlidGNsOC42LnNvLjAuCisKK1RoaXMgaXMgYmVjYXVzZSB0aGF0IHdlJ3JlIGV4ZWN1dGluZyB0aGUgZml4bGluZTEgdGNsIHNjcmlwdCB3aGljaCByZXF1aXJlcworbGlidGNsOC42LnNvLjAgaW4gc3lzcm9vdC4gSG93ZXZlciwgYWxsIGNvbW1hbmRzIGluIFNDUklQVFMgYWxyZWFkeSBoYXZlIGdvdAordGhlIGNvcnJlY3QgZmlyc3QgbGluZSwgdGhhdCBpcyAnIyEvYmluL3NoJy4gV2UgZG9uJ3QgbmVlZCB0byBtb2RpZnkgYW55dGhpbmcuCitUaGF0J3Mgd2h5IHdlIGNvdWxkIGp1c3QgY29weSB0aGVtLgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IGMwNWM4ODAuLmYxMzk0ZmYgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0zODAsNyArMzgwLDcgQEAgZGlzdDogZGlzdC1jbGVhbiBkb2MKKyAJY3AgJChESVNUX1JPT1QpLyQoUEtHX0RJUikudGFyLmd6ICQodG9wX2J1aWxkZGlyKQorIAorICQoU0NSSVBUUyk6CistCSQoVENMU0gpICQoc3JjZGlyKS9maXhsaW5lMSAkKFNIT1JUX0JJTkRJUikgPCAkKHNyY2RpcikvZXhhbXBsZS8kQCA+ICRACisrCWNwICQoc3JjZGlyKS9leGFtcGxlLyRAICRACisgCisgIyMgV2UgY2Fubm90IHVzZSBUQ0xfTElCUyBiZWxvdyAoYWZ0ZXIgVENMX0xJQl9TUEVDKSBiZWNhdXNlIGl0cworICMjIGV4cGFuc2lvbiByZWZlcmVuY2VzIHRoZSBjb250ZW50cyBvZiBMSUJTLCB3aGljaCBjb250YWlucyBsaW5rZXIKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZXhwZWN0L2V4cGVjdC8wMDAyLXRjbC5tNC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDAwMi10Y2wubTQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM0YzZiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDAwMi10Y2wubTQucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXNlIHByb3BlciAtTCBwYXRoIHdoZW4gY3Jvc3MgY29tcGlsaW5nLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRlcnMgUm94ZWxsIDxhbmRlcnMucm94ZWxsQGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KK2RpZmYgLXVOciBhL3RjbGNvbmZpZy90Y2wubTQgYi90Y2xjb25maWcvdGNsLm00CistLS0gYS90Y2xjb25maWcvdGNsLm00CTIwMTItMTItMTQgMDk6MTY6NTguNzg5ODYxMjgxICswMTAwCisrKysgYi90Y2xjb25maWcvdGNsLm00CTIwMTItMTItMTQgMTA6NTU6NDMuNTQyMjk3MDEwICswMTAwCitAQCAtMzcxLDcgKzM3MSw3IEBACisgICAgICMgb2YgVENMX0JVSUxEX0xJQl9TUEVDLiBBbiBleHRlbnNpb24gc2hvdWxkIG1ha2UgdXNlIG9mIFRDTF9MSUJfU1BFQworICAgICAjIGluc3RlYWQgb2YgVENMX0JVSUxEX0xJQl9TUEVDIHNpbmNlIGl0IHdpbGwgd29yayB3aXRoIGJvdGggYW4KKyAgICAgIyBpbnN0YWxsZWQgYW5kIHVuaW5zdGFsbGVkIHZlcnNpb24gb2YgVGNsLgorLSAgICBpZiB0ZXN0IC1mICIke1RDTF9CSU5fRElSfS9NYWtlZmlsZSIgOyB0aGVuCisrICAgIGlmIHRlc3QgLWYgIiR7VENMX0JJTl9ESVJ9L01ha2VmaWxlIiB8fCB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAgICAgICAgVENMX0xJQl9TUEVDPSIke1RDTF9CVUlMRF9MSUJfU1BFQ30iCisgICAgICAgICBUQ0xfU1RVQl9MSUJfU1BFQz0iJHtUQ0xfQlVJTERfU1RVQl9MSUJfU1BFQ30iCisgICAgICAgICBUQ0xfU1RVQl9MSUJfUEFUSD0iJHtUQ0xfQlVJTERfU1RVQl9MSUJfUEFUSH0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAxLWV4YW1wbGUtc2hlYmFuZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDEtZXhhbXBsZS1zaGViYW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1OTdmMzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAxLWV4YW1wbGUtc2hlYmFuZy5wYXRjaApAQCAtMCwwICsxLDE0NCBAQAorQXV0aG9yOiBNaWtlIE1hcmtsZXkgPG1pa2VAbWFya2xleS5vcmc+CitBdXRob3I6IFNlcmdlaSBHb2xvdmFuIDxzZ29sb3ZhbkBkZWJpYW4ub3JnPgorRGVzY3JpcHRpb246IEZpeGVzIHNoZWJhbmdzIGluIGV4YW1wbGVzIChDbG9zZXM6ICMxNTIzNjcpLgorCitCYWNrcG9ydGVkIGZyb20gRGViaWFuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworSW5kZXg6IGV4cGVjdDUuNDUvZXhhbXBsZS9iZWVyLmV4cAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGV4cGVjdDUuNDUub3JpZy9leGFtcGxlL2JlZXIuZXhwCTIwMDYtMDEtMjUgMTM6NTE6MzkuMDAwMDAwMDAwIC0wODAwCisrKysgZXhwZWN0NS40NS9leGFtcGxlL2JlZXIuZXhwCTIwMTMtMTEtMDEgMTc6MzU6MTkuODE3MzE4MzQxIC0wNzAwCitAQCAtMSw0ICsxLDkgQEAKKy0jIS9kZXBvdC9wYXRoL2V4cGVjdCAtZgorKyMhL2Jpbi9zaAorKyMgLSotIHRjbCAtKi0KKysjIFRoZSBuZXh0IGxpbmUgaXMgZXhlY3V0ZWQgYnkgL2Jpbi9zaCwgYnV0IG5vdCB0Y2wgXAorK2V4ZWMgdGNsc2ggIiQwIiAkezErIiRAIn0KKysKKytwYWNrYWdlIHJlcXVpcmUgRXhwZWN0CisgCisgIyA5OSBib3R0bGVzIG9mIGJlZXIgb24gdGhlIHdhbGwsIEV4cGVjdC1zdHlsZQorICMgQXV0aG9yOiBEb24gTGliZXMgPGxpYmVzQG5pc3QuZ292PgorSW5kZXg6IGV4cGVjdDUuNDUvZXhhbXBsZS9leHBlY3RkLnByb3RvCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZXhwZWN0NS40NS5vcmlnL2V4YW1wbGUvZXhwZWN0ZC5wcm90bwkyMDEwLTA3LTAyIDA5OjAzOjMxLjAwMDAwMDAwMCAtMDcwMAorKysrIGV4cGVjdDUuNDUvZXhhbXBsZS9leHBlY3RkLnByb3RvCTIwMTMtMTEtMDEgMTc6MzU6MTkuODIxMzE4MzQxIC0wNzAwCitAQCAtMSw0ICsxLDEwIEBACistIyEvZGVwb3QvdGNsL3NyYy9leHBlY3QvZSAtLQorKyMhL2Jpbi9zaAorKyMgLSotIHRjbCAtKi0KKysjIFRoZSBuZXh0IGxpbmUgaXMgZXhlY3V0ZWQgYnkgL2Jpbi9zaCwgYnV0IG5vdCB0Y2wgXAorK2V4ZWMgdGNsc2ggIiQwIiAkezErIiRAIn0KKysKKytwYWNrYWdlIHJlcXVpcmUgRXhwZWN0CisrCisgIyBEZXNjcmlwdGlvbjogU2ltcGxlIGZyYWdtZW50IHRvIGJlZ2luIGEgdGVsbmV0IGRhZW1vbgorICMgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBDaGFwdGVyIDE3IG9mICJFeHBsb3JpbmcgRXhwZWN0IgorICMgQXV0aG9yOiBEb24gTGliZXMsIE5JU1QKK0luZGV4OiBleHBlY3Q1LjQ1L2V4YW1wbGUvaXJzaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGV4cGVjdDUuNDUub3JpZy9leGFtcGxlL2lyc2gJMjAxMC0wNy0wMiAwOTowMzozMS4wMDAwMDAwMDAgLTA3MDAKKysrKyBleHBlY3Q1LjQ1L2V4YW1wbGUvaXJzaAkyMDEzLTExLTAxIDE3OjM1OjE5LjgyMTMxODM0MSAtMDcwMAorQEAgLTEsNCArMSw5IEBACistIyEvZGVwb3QvcGF0aC9leHBlY3QgLS0KKysjIS9iaW4vc2gKKysjIC0qLSB0Y2wgLSotCisrIyBUaGUgbmV4dCBsaW5lIGlzIGV4ZWN1dGVkIGJ5IC9iaW4vc2gsIGJ1dCBub3QgdGNsIFwKKytleGVjIHRjbHNoICIkMCIgJHsxKyIkQCJ9CisrCisrcGFja2FnZSByZXF1aXJlIEV4cGVjdAorIAorICMgRG8gcnNoIGludGVyYWN0aXZlbHkuICBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorICMgICAgcnNoIDxyZW1vdGU+IGxzIC1sICJ8IiBtb3JlCitJbmRleDogZXhwZWN0NS40NS9leGFtcGxlL3Bhc3N3ZC5jZ2kKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBleHBlY3Q1LjQ1Lm9yaWcvZXhhbXBsZS9wYXNzd2QuY2dpCTIwMDAtMDEtMDYgMTU6MjI6MDcuMDAwMDAwMDAwIC0wODAwCisrKysgZXhwZWN0NS40NS9leGFtcGxlL3Bhc3N3ZC5jZ2kJMjAxMy0xMS0wMSAxNzozNToxOS44MjEzMTgzNDEgLTA3MDAKK0BAIC0xLDQgKzEsOSBAQAorLSMhL2RlcG90L3BhdGgvZXhwZWN0IC0tCisrIyEvYmluL3NoCisrIyAtKi0gdGNsIC0qLQorKyMgVGhlIG5leHQgbGluZSBpcyBleGVjdXRlZCBieSAvYmluL3NoLCBidXQgbm90IHRjbCBcCisrZXhlYyB0Y2xzaCAiJDAiICR7MSsiJEAifQorKworK3BhY2thZ2UgcmVxdWlyZSBFeHBlY3QKKyAKKyAjIFRoaXMgaXMgYSBDR0kgc2NyaXB0IHRvIHByb2Nlc3MgcmVxdWVzdHMgY3JlYXRlZCBieSB0aGUgYWNjb21wYW55aW5nCisgIyBwYXNzd2QuaHRtbCBmb3JtLiAgVGhpcyBzY3JpcHQgaXMgcHJldHR5IGJhc2ljLCBhbHRob3VnaCBpdCBpcworSW5kZXg6IGV4cGVjdDUuNDUvZXhhbXBsZS9wYXNzd2Rwcm9tcHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBleHBlY3Q1LjQ1Lm9yaWcvZXhhbXBsZS9wYXNzd2Rwcm9tcHQJMjAwMy0wOS0wNSAxMjowMTo1OS4wMDAwMDAwMDAgLTA3MDAKKysrKyBleHBlY3Q1LjQ1L2V4YW1wbGUvcGFzc3dkcHJvbXB0CTIwMTMtMTEtMDEgMTc6MzU6MTkuODIxMzE4MzQxIC0wNzAwCitAQCAtMSw0ICsxLDkgQEAKKy0jIS9kZXBvdC9wYXRoL2V4cGVjdAorKyMhL2Jpbi9zaAorKyMgLSotIHRjbCAtKi0KKysjIFRoZSBuZXh0IGxpbmUgaXMgZXhlY3V0ZWQgYnkgL2Jpbi9zaCwgYnV0IG5vdCB0Y2wgXAorK2V4ZWMgdGNsc2ggIiQwIiAkezErIiRAIn0KKysKKytwYWNrYWdlIHJlcXVpcmUgRXhwZWN0CisgCisgIyBUaGlzIHNjcmlwdCBwcm9tcHRzIGZvciBhIHBhc3N3ZCBmcm9tIHN0ZGluIHdoaWxlIGVjaG9pbmcgKidzCisgCitJbmRleDogZXhwZWN0NS40NS9leGFtcGxlL3JlcHJvbXB0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZXhwZWN0NS40NS5vcmlnL2V4YW1wbGUvcmVwcm9tcHQJMjAwMC0wMS0wNiAxNToyMjowNy4wMDAwMDAwMDAgLTA4MDAKKysrKyBleHBlY3Q1LjQ1L2V4YW1wbGUvcmVwcm9tcHQJMjAxMy0xMS0wMSAxNzozNToxOS44MjEzMTgzNDEgLTA3MDAKK0BAIC0xLDQgKzEsOSBAQAorLSMhL2RlcG90L3BhdGgvZXhwZWN0IC0tCisrIyEvYmluL3NoCisrIyAtKi0gdGNsIC0qLQorKyMgVGhlIG5leHQgbGluZSBpcyBleGVjdXRlZCBieSAvYmluL3NoLCBidXQgbm90IHRjbCBcCisrZXhlYyB0Y2xzaCAiJDAiICR7MSsiJEAifQorKworK3BhY2thZ2UgcmVxdWlyZSBFeHBlY3QKKyAKKyAjIE5hbWU6IHJlcHJvbXB0CisgIyBEZXNjcmlwdGlvbjogcmVwcm9tcHQgZXZlcnkgc28gb2Z0ZW4gdW50aWwgdXNlciBlbnRlcnMgc29tZXRoaW5nCitJbmRleDogZXhwZWN0NS40NS9leGFtcGxlL3Rlcm1fZXhwZWN0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZXhwZWN0NS40NS5vcmlnL2V4YW1wbGUvdGVybV9leHBlY3QJMjAwNS0wMi0xNSAxMDoxMTozMS4wMDAwMDAwMDAgLTA4MDAKKysrKyBleHBlY3Q1LjQ1L2V4YW1wbGUvdGVybV9leHBlY3QJMjAxMy0xMS0wMSAxNzozNToxOS44MjEzMTgzNDEgLTA3MDAKK0BAIC0xLDQgKzEsOSBAQAorLSMhL2RlcG90L3BhdGgvZXhwZWN0aworKyMhL2Jpbi9zaAorKyMgLSotIHRjbCAtKi0KKysjIFRoZSBuZXh0IGxpbmUgaXMgZXhlY3V0ZWQgYnkgL2Jpbi9zaCwgYnV0IG5vdCB0Y2wgXAorK2V4ZWMgd2lzaCAiJDAiICR7MSsiJEAifQorKworK3BhY2thZ2UgcmVxdWlyZSBFeHBlY3QKKyAKKyAjIE5hbWU6IHRrdGVybSAtIHRlcm1pbmFsIGVtdWxhdG9yIHVzaW5nIEV4cGVjdCBhbmQgVGsgdGV4dCB3aWRnZXQsIHYzLjAKKyAjIEF1dGhvcjogRG9uIExpYmVzLCBKdWx5ICc5NAorSW5kZXg6IGV4cGVjdDUuNDUvZXhhbXBsZS92cmZ5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZXhwZWN0NS40NS5vcmlnL2V4YW1wbGUvdnJmeQkyMDEwLTA3LTAyIDA5OjAzOjMxLjAwMDAwMDAwMCAtMDcwMAorKysrIGV4cGVjdDUuNDUvZXhhbXBsZS92cmZ5CTIwMTMtMTEtMDEgMTc6MzU6MTkuODIxMzE4MzQxIC0wNzAwCitAQCAtMSw0ICsxLDkgQEAKKy0jIS9kZXBvdC9wYXRoL2V4cGVjdCAtZgorKyMhL2Jpbi9zaAorKyMgLSotIHRjbCAtKi0KKysjIFRoZSBuZXh0IGxpbmUgaXMgZXhlY3V0ZWQgYnkgL2Jpbi9zaCwgYnV0IG5vdCB0Y2wgXAorK2V4ZWMgdGNsc2ggIiQwIiAkezErIiRAIn0KKysKKytwYWNrYWdlIHJlcXVpcmUgRXhwZWN0CisgCisgCisgIyBzZXBhcmF0ZSBhZGRyZXNzIGludG8gdXNlciBhbmQgaG9zdAorSW5kZXg6IGV4cGVjdDUuNDUvZXhhbXBsZS94cmxvZ2luCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZXhwZWN0NS40NS5vcmlnL2V4YW1wbGUveHJsb2dpbgkyMDAwLTAxLTA2IDE1OjIyOjA4LjAwMDAwMDAwMCAtMDgwMAorKysrIGV4cGVjdDUuNDUvZXhhbXBsZS94cmxvZ2luCTIwMTMtMTEtMDEgMTc6MzU6MTkuODIxMzE4MzQxIC0wNzAwCitAQCAtMSw0ICsxLDEwIEBACistIyEvZGVwb3QvcGF0aC9leHBlY3QgLS0KKysjIS9iaW4vc2gKKysjIC0qLSB0Y2wgLSotCisrIyBUaGUgbmV4dCBsaW5lIGlzIGV4ZWN1dGVkIGJ5IC9iaW4vc2gsIGJ1dCBub3QgdGNsIFwKKytleGVjIHRjbHNoICIkMCIgJHsxKyIkQCJ9CisrCisrcGFja2FnZSByZXF1aXJlIEV4cGVjdAorKworICMgeHJsb2dpbiAtIHJsb2dpbiBidXQgd2l0aCBjdXJyZW50IERJU1BMQVkKKyAjCisgIyBZb3UgY2FuIGV4dGVuZCB0aGlzIGlkZWEgdG8gc2F2ZSBhbnkgYXJiaXRyYXJ5IGluZm9ybWF0aW9uIGFjcm9zcyBybG9naW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3RfNS40NS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3RfNS40NS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzJhYWI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZXhwZWN0L2V4cGVjdF81LjQ1LmJiCkBAIC0wLDAgKzEsNjQgQEAKK1NVTU1BUlkgPSAidG9vbCBmb3IgYXV0b21hdGluZyBpbnRlcmFjdGl2ZSBhcHBsaWNhdGlvbnMgYWNjb3JkaW5nIHRvIGEgc2NyaXB0IgorREVTQ1JJUFRJT04gPSAiRXhwZWN0IGlzIGEgdG9vbCBmb3IgYXV0b21hdGluZyBpbnRlcmFjdGl2ZSBhcHBsaWNhdGlvbnMgYWNjb3JkaW5nIHRvIGEgc2NyaXB0LiBcCitGb2xsb3dpbmcgdGhlIHNjcmlwdCwgRXhwZWN0IGtub3dzIHdoYXQgY2FuIGJlIGV4cGVjdGVkIGZyb20gYSBwcm9ncmFtIGFuZCB3aGF0IFwKK3RoZSBjb3JyZWN0IHJlc3BvbnNlIHNob3VsZCBiZS4gRXhwZWN0IGlzIGFsc28gdXNlZnVsIGZvciB0ZXN0aW5nIHRoZXNlIHNhbWUgXAorYXBwbGljYXRpb25zLiBBbmQgYnkgYWRkaW5nIFRrLCB5b3UgY2FuIGFsc28gd3JhcCBpbnRlcmFjdGl2ZSBhcHBsaWNhdGlvbnMgaW4gXAorWDExIEdVSXMuIEFuIGludGVycHJldGVkIGxhbmd1YWdlIHByb3ZpZGVzIGJyYW5jaGluZyBhbmQgaGlnaC1sZXZlbCBjb250cm9sIFwKK3N0cnVjdHVyZXMgdG8gZGlyZWN0IHRoZSBkaWFsb2d1ZS4gSW4gYWRkaXRpb24sIHRoZSB1c2VyIGNhbiB0YWtlIGNvbnRyb2wgYW5kIFwKK2ludGVyYWN0IGRpcmVjdGx5IHdoZW4gZGVzaXJlZCwgYWZ0ZXJ3YXJkIHJldHVybmluZyBjb250cm9sIHRvIHRoZSBzY3JpcHQuIFwKKyIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZXhwZWN0LyIKK0xJQ0VOU0UgPSAiUEQiCitTRUNUSU9OID0gImRldmVsIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9saWNlbnNlLnRlcm1zO21kNT1mYmYyZGU3ZTkxMDI1MDViMTQzOWRiMDZmYzM2Y2U1YyIKKworREVQRU5EUyArPSAidGNsIgorUkRFUEVORFNfJHtQTn0gPSAidGNsIgorCitpbmhlcml0IGF1dG90b29scworCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vZXhwZWN0L0V4cGVjdC8ke1BWfS8ke0JQTn0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUuaW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi10Y2wubTQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDEtZXhhbXBsZS1zaGViYW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZXhwZWN0LWluc3RhbGwtc2NyaXB0cy13aXRob3V0LXVzaW5nLXRoZS1maXhsaW5lMS10Yy5wYXRjaCBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjQ0ZTFhNGY0Yzg3N2U5ZGRjNWE1NDJkZmE3ZWNjOTJiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImIyOGRjYTkwNDI4YTNiMzBlNjUwNTI1Y2RjMTYyNTVkNzZiYjZjY2Q2NWQ0NDhiZTUzZTYyMGQ5NWQ1Y2MwNDAiCisKK1MgPSAiJHtXT1JLRElSfS8ke0JQTn0ke1BWfSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9CisgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke0R9JHtsaWJkaXJ9L2V4cGVjdCR7UFZ9L2xpYmV4cGVjdCouc28gICAke0R9JHtsaWJkaXJ9LworICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtTfS9maXhsaW5lMSAgICAgICAgICAgJHtEfSR7bGliZGlyfS9leHBlY3Qke1BWfS8KKyAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7U30vZXhhbXBsZS8qICAgICAgICAgICR7RH0ke2xpYmRpcn0vZXhwZWN0JHtQVn0vCisgICAgICAgIHJtICR7RH0ke2xpYmRpcn0vZXhwZWN0JHtQVn0vbGliZXhwZWN0Ki5zbworICAgICAgICBzZWQgLWUgJ3N8JGRpcnwke2xpYmRpcn18JyAtaSAke0R9JHtsaWJkaXJ9L2V4cGVjdCR7UFZ9L3BrZ0luZGV4LnRjbAorfQorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC10Y2w9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtdGNsaW5jbHVkZT0ke1NUQUdJTkdfSU5DRElSfS90Y2w4LjYgXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS1zaGFyZWQgXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS10aHJlYWRzIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXJwYXRoIFwKKyAgICAgICAgICAgICAgICAiCitFWFRSQV9PRU1BS0VfaW5zdGFsbCA9ICIgJ1NDUklQVFM9JyAiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9LyR7QlBOfSR7UFZ9Ly5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICIKK0ZJTEVTXyR7UE59LWRldiA9ICIke2xpYmRpcl9uYXRpdmV9L2V4cGVjdCR7UFZ9L2xpYmV4cGVjdCouc28gXAorICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vZXhwZWN0LmggXAorICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vZXhwZWN0X3RjbC5oIFwKKyAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L2V4cGVjdF9jb21tLmggXAorICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vdGNsZGJnLmggXAorICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vKi5oIFwKKyAgICAgICAgICAgICAgICAgICIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9saWJleHBlY3Qke1BWfS5zbyBcCisgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2V4cGVjdCR7UFZ9LyogXAorICAgICAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmRpc2svZ3B0ZmRpc2tfMS4wLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9mZGlzay9ncHRmZGlza18xLjAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGIwZTMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmRpc2svZ3B0ZmRpc2tfMS4wLjAuYmIKQEAgLTAsMCArMSwyMCBAQAorREVTQ1JJUFRJT04gPSAiR1BUIGZkaXNrIGlzIGEgZGlzayBwYXJ0aXRpb25pbmcgdG9vbCBsb29zZWx5IG1vZGVsZWQgb24gTGludXggZmRpc2ssIGJ1dCB1c2VkIGZvciBtb2RpZnlpbmcgR1VJRCBQYXJ0aXRpb24gVGFibGUgKEdQVCkgZGlza3MuIFRoZSByZWxhdGVkIEZpeFBhcnRzIHV0aWxpdHkgZml4ZXMgc29tZSBjb21tb24gcHJvYmxlbXMgb24gTWFzdGVyIEJvb3QgUmVjb3JkIChNQlIpIGRpc2tzLiIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIgorCitERVBFTkRTID0gInV0aWwtbGludXggcG9wdCBuY3Vyc2VzIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS8ke0JQTn0vJHtQVn0vJHtCUH0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjIwNjFmOTE3YWYwODQyMTU4OThkNGZlYTA0ZDgzODhmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjViNjY5NTY3NDNhNzk5ZmMwNDcxY2RiMDMyNjY1YzEzOTFlODJmOWM1YjNmMWQ3ZDcyNmQyOWZlMmJhMDFkNmMiCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorICAgIGluc3RhbGwgLW0gMDc1NSBjZ2Rpc2sgJHtEfSR7c2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA3NTUgZ2Rpc2sgJHtEfSR7c2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA3NTUgc2dkaXNrICR7RH0ke3NiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSAwNzU1IGZpeHBhcnRzICR7RH0ke3NiaW5kaXJ9Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZpbGUvZmlsZS8wMDAxLUFkZC1QLXByb21wdC1pbnRvLVVzYWdlLWluZm8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGUvMDAwMS1BZGQtUC1wcm9tcHQtaW50by1Vc2FnZS1pbmZvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMTZiMmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGUvMDAwMS1BZGQtUC1wcm9tcHQtaW50by1Vc2FnZS1pbmZvLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gMDhhYmY5NDRiMmJmZjI3YjZkZDMyNWRkMTViNDg2MWNlYmVmMTEzYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1bmxpbmcgWmhlbmcgPHpoZW5nanVubGluZ0BodWF3ZWkuY29tPgorRGF0ZTogV2VkLCA4IEFwciAyMDE1IDAzOjI2OjU3ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZCAtUCBwcm9tcHQgaW50byBVc2FnZSBpbmZvCisKK0N1cnJlbnRseSwgVXNhZ2UgaW5mbyBkb2Vzbid0IGluY2x1ZGUgLVAgcHJvbXB0LCBhZGQgaXQ6CisKK3Jvb3RAYXJtYTllbDp+IyBmaWxlCitVc2FnZTogZmlsZSBbLWJjRWhpa0xsTm5wcnN2ejBdIFstLWFwcGxlXSBbLS1taW1lLWVuY29kaW5nXSBbLS1taW1lLXR5cGVdCisgICAgICAgICAgICBbLWUgdGVzdG5hbWVdIFstRiBzZXBhcmF0b3JdIFstZiBuYW1lZmlsZV0gWy1tIG1hZ2ljZmlsZXNdCisgICAgICAgICAgICBbLVAgcGFyYW1ldGVyPWxpbWl0c10gZmlsZSAuLi4KKyAgICAgICBmaWxlIC1DIFstbSBtYWdpY2ZpbGVzXQorICAgICAgIGZpbGUgWy0taGVscF0KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogSnVubGluZyBaaGVuZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CistLS0KKyBzcmMvZmlsZS5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9maWxlLmMgYi9zcmMvZmlsZS5jCitpbmRleCAyYjE1ZTIxLi5lNWE5NTdiIDEwMDY0NAorLS0tIGEvc3JjL2ZpbGUuYworKysrIGIvc3JjL2ZpbGUuYworQEAgLTc2LDggKzc2LDggQEAgaW50IGdldG9wdF9sb25nKGludCBhcmdjLCBjaGFyICogY29uc3QgKmFyZ3YsIGNvbnN0IGNoYXIgKm9wdHN0cmluZywgY29uc3Qgc3RydWMKKyAjIGRlZmluZSBVU0FHRSAgXAorICAgICAiVXNhZ2U6ICVzIFsiIEZJTEVfRkxBR1MgXAorIAkiXSBbLS1hcHBsZV0gWy0tZXh0ZW5zaW9uXSBbLS1taW1lLWVuY29kaW5nXSBbLS1taW1lLXR5cGVdXG4iIFwKKy0gICAgIiAgICAgICAgICAgIFstZSB0ZXN0bmFtZV0gWy1GIHNlcGFyYXRvcl0gWy1mIG5hbWVmaWxlXSBbLW0gbWFnaWNmaWxlc10gIiBcCistICAgICJmaWxlIC4uLlxuIiBcCisrICAgICIgICAgICAgICAgICBbLWUgdGVzdG5hbWVdIFstRiBzZXBhcmF0b3JdIFstZiBuYW1lZmlsZV0gWy1tIG1hZ2ljZmlsZXNdXG4gIiBcCisrICAgICIgICAgICAgICAgICBbLVAgcGFyYW1ldGVyPWxpbWl0c10gZmlsZSAuLi5cbiIgXAorICAgICAiICAgICAgICVzIC1DIFstbSBtYWdpY2ZpbGVzXVxuIiBcCisgICAgICIgICAgICAgJXMgWy0taGVscF1cbiIKKyAKKy0tIAorMS44LjMuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGUvZGViaWFuLTc0MjI2Mi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZpbGUvZmlsZS9kZWJpYW4tNzQyMjYyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZjQ4NWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGUvZGViaWFuLTc0MjI2Mi5wYXRjaApAQCAtMCwwICsxLDE5IEBACitUaGUgYXdrIHBhdHRlcm4gd2FzIGNoZWNrZWQgKmJlZm9yZSogdGhlIFBlcmwgcGF0dGVybiwgc28gdGhlIHBlcmwKK3NjcmlwdCB3aXRoIEJFR0lOey4uLn0gd291bGQgYmUgcmVwb3J0ZWQgYXMgYXdrLCB0aGlzIHBhdGNoIGZpeGVzIGl0LgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtkZWJpYW5dCisKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waCBCaWVkbCA8ZGViaWFuLmF4aG5AbWFuY2htYWwuaW4tdWxtLmRlPgorU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KK2RpZmYgLS1naXQgYS9tYWdpYy9NYWdkaXIvY29tbWFuZHMgYi9tYWdpYy9NYWdkaXIvY29tbWFuZHMKKy0tLSBhL21hZ2ljL01hZ2Rpci9jb21tYW5kcworKysrIGIvbWFnaWMvTWFnZGlyL2NvbW1hbmRzCitAQCAtNTcsNiArNTcsNyBAQAorIDAJc3RyaW5nL3d0CSMhXCAvdXNyL2Jpbi9hd2sJYXdrIHNjcmlwdCB0ZXh0IGV4ZWN1dGFibGUKKyAhOm1pbWUJdGV4dC94LWF3aworIDAJcmVnZXgvNDA5Ngk9Xlxcc3swLDEwMH1CRUdJTlxcc3swLDEwMH1be10JYXdrIG9yIHBlcmwgc2NyaXB0IHRleHQKKyshOnN0cmVuZ3RoIC0gMTIKKyAKKyAjIEFUJlQgQmVsbCBMYWJzJyBQbGFuIDkgc2hlbGwKKyAwCXN0cmluZy93dAkjIVwgL2Jpbi9yYwlQbGFuIDkgcmMgc2hlbGwgc2NyaXB0IHRleHQgZXhlY3V0YWJsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlXzUuMjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGVfNS4yNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGI5NWQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlXzUuMjQuYmIKQEAgLTAsMCArMSwzNiBAQAorU1VNTUFSWSA9ICJGaWxlIGNsYXNzaWZpY2F0aW9uIHRvb2wiCitERVNDUklQVElPTiA9ICJGaWxlIGF0dGVtcHRzIHRvIGNsYXNzaWZ5IGZpbGVzIGRlcGVuZGluZyBcCitvbiB0aGVpciBjb250ZW50cyBhbmQgcHJpbnRzIGEgZGVzY3JpcHRpb24gaWYgYSBtYXRjaCBpcyBmb3VuZC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmRhcndpbnN5cy5jb20vZmlsZS8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKKyMgdHdvIGNsYXVzZSBCU0QKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORztiZWdpbmxpbmU9MjttZDU9NmE3MzgyODcyZWRiNjhkMzNlMWE5Mzk4YjZlMDMxODgiCisKK0RFUEVORFMgPSAiemxpYiBmaWxlLW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gInpsaWItbmF0aXZlIgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vZmlsZS9maWxlLmdpdCBcCisgICAgICAgIGZpbGU6Ly9kZWJpYW4tNzQyMjYyLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDEtQWRkLVAtcHJvbXB0LWludG8tVXNhZ2UtaW5mby5wYXRjaCBcCisgICAgICAgICIKKworU1JDUkVWID0gIjNjMDg3NGJlNGQzMjMyZDY3MmIyMGY1MTM0NTFhMzljZmQ3YzU4NWEiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9taXNjLyoubWdjIgorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJY3JlYXRlX2NtZGxpbmVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9maWxlIFwKKwkJLS1tYWdpYy1maWxlICR7ZGF0YWRpcn0vbWlzYy9tYWdpYy5tZ2MKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworCWNyZWF0ZV9jbWRsaW5lX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZmlsZSBcCisJCS0tbWFnaWMtZmlsZSAke2RhdGFkaXJ9L21pc2MvbWFnaWMubWdjCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmlsZXMvZG9fbm90X2NyZWF0ZV9wZGZfZG9jLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9maWxlcy9kb19ub3RfY3JlYXRlX3BkZl9kb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMyODMzYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmlsZXMvZG9fbm90X2NyZWF0ZV9wZGZfZG9jLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSAoZW1iZWRkZWQgc3BlY2lmaWMpCisKK1NpZ25lZC1vZmYtYnk6IExhdXJlbnRpdSBQYWxjdSA8bGF1cmVudGl1LnBhbGN1QGludGVsLmNvbT4KKworSW5kZXg6IGZsZXgtMi41LjM3L2RvYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGZsZXgtMi41LjM3Lm9yaWcvZG9jL01ha2VmaWxlLmFtCTIwMTItMDctMjEgMDQ6MTg6MjcuMDAwMDAwMDAwICswMzAwCisrKysgZmxleC0yLjUuMzcvZG9jL01ha2VmaWxlLmFtCTIwMTMtMDctMzAgMTc6NTc6MDkuODM0ODM0NTMxICswMzAwCitAQCAtMiw3ICsyLDcgQEAKKyAKKyBpbmZvX1RFWElORk9TID0JZmxleC50ZXhpCisgZGlzdF9tYW5fTUFOUyA9IGZsZXguMQorLWRpc3RfZG9jX0RBVEE9IGZsZXgucGRmCisrRVhUUkFfRElTVD0gZmxleC5wZGYKKyAKKyBDTEVBTkZJTEVTID0gXAorIAlmbGV4LmhrcyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZpbGVzL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmlsZXMvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJmZmJhMTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZpbGVzL3J1bi1wdGVzdApAQCAtMCwwICsxLDI5IEBACisjIS9iaW4vc2gKKwordGVzdDE9InRlc3QtYWxsb2MtZXh0cmEgdGVzdC1hcnJheS1uciB0ZXN0LWFycmF5LXIgdGVzdC1iYXNpYy1uciB0ZXN0LWJhc2ljLXIgdGVzdC1leHRlbmRlZCB0ZXN0LXF1b3RlcyBcCit0ZXN0LWJpc29uLW5yIHRlc3QtYmlzb24teXlsbG9jIHRlc3QtYmlzb24teXlsdmFsIHRlc3QtYysrLWJhc2ljIHRlc3QtYy1jcHAtbnIgdGVzdC1wcmVmaXgtbnIgdGVzdC1jY2wgXAordGVzdC1jLWNwcC1yIHRlc3QtYysrLW11bHRpcGxlLXNjYW5uZXJzIHRlc3QtbWVtLXIgdGVzdC1tZW0tbnIgdGVzdC1kZWJ1Zy1uciB0ZXN0LWxpbmVkaXItciB0ZXN0LW5vYW5zaS1yIFwKK3Rlc3QteXlleHRyYSB0ZXN0LWhlYWRlci1yIHRlc3Qtbm9hbnNpLW5yIHRlc3QtZGVidWctciBURU1QTEFURSB0ZXN0LXRvcCB0ZXN0LWhlYWRlci1uciB0ZXN0LXByZWZpeC1yIgordGVzdDI9InRlc3QtbXVsdGlwbGUtc2Nhbm5lcnMtbnIgdGVzdC1wb3NpeGx5LWNvcnJlY3QgdGVzdC1wb3NpeCB0ZXN0LXN0cmluZy1yIHRlc3Qtc3RyaW5nLW5yIgordGVzdDM9InRlc3QtcHRocmVhZCB0ZXN0LWluY2x1ZGUtYnktcHVzaCB0ZXN0LWluY2x1ZGUtYnktYnVmZmVyIHRlc3QtaW5jbHVkZS1ieS1yZWVudHJhbnQiCit0ZXN0ND0idGVzdC1saW5lbm8tbnIgdGVzdC1saW5lbm8tciB0ZXN0LWxpbmVuby10cmFpbGluZyIKK3Rlc3Q1PSJ0ZXN0LWMrKy15eXdyYXAgdGVzdC1yZXNjYW4tciB0ZXN0LXJlc2Nhbi1uciIKK3Rlc3Q2PSJ0ZXN0LXJlamVjdC1uciB0ZXN0LXJlamVjdC1yIgordGVzdDc9InRlc3QtcmVqZWN0LXNlciB0ZXN0LXJlamVjdC12ZXIiCit0ZXN0OD0idGVzdC1tdWx0aXBsZS1zY2FubmVycy1yIgorCitvdXRwdXQoKSB7CisgIGlmIFsgJD8gLWVxIDAgXTsgXAorICAgIHRoZW4gZWNobyAiUEFTUzogJGkiOyBcCisgICAgZWxzZSBlY2hvICJGQUlMOiAkaSI7IFwKKyAgZmk7Cit9CisKK2ZvciBpIGluICR0ZXN0MTsgZG8gJGkvJGkgPCAkaS90ZXN0LmlucHV0ID4vZGV2L251bGw7IG91dHB1dDsgZG9uZQorZm9yIGkgaW4gJHRlc3QyOyBkbyAkaS8kaSA+L2Rldi9udWxsOyBvdXRwdXQ7IGRvbmUKK2ZvciBpIGluICR0ZXN0MzsgZG8gY2QgJGk7IC4vJGkgdGVzdC0xLmlucHV0ID4vZGV2L251bGw7IG91dHB1dDsgY2QgLi47IGRvbmUKK2ZvciBpIGluICR0ZXN0NDsgZG8gdGVzdCBgJGkvJGkgPCAkaS90ZXN0LmlucHV0YCAtZXEgYCRpLyRpIDEgPCAkaS90ZXN0LmlucHV0YCA+L2Rldi9udWxsOyBvdXRwdXQ7IGRvbmUKK2ZvciBpIGluICR0ZXN0NTsgZG8gJGkvJGkgJGkvdGVzdC5pbnB1dCA+L2Rldi9udWxsOyBvdXRwdXQ7IGRvbmUKK2ZvciBpIGluICR0ZXN0NjsgZG8gdGVzdC1yZWplY3QvJGkgPCB0ZXN0LXJlamVjdC90ZXN0LmlucHV0ID4vZGV2L251bGw7IG91dHB1dDsgZG9uZQorZm9yIGkgaW4gJHRlc3Q3OyBkbyB0ZXN0LXJlamVjdC8kaSB0ZXN0LXJlamVjdC8kaS50YWJsZXMgPCB0ZXN0LXJlamVjdC90ZXN0LmlucHV0ID4vZGV2L251bGw7IG91dHB1dDsgZG9uZQorY2QgJHRlc3Q4OyAuLyR0ZXN0OCA+L2Rldi9udWxsOyBpPSR0ZXN0OCBvdXRwdXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmxleC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZsZXguaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YTI2ZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZsZXguaW5jCkBAIC0wLDAgKzEsNDQgQEAKK1NVTU1BUlkgPSAiRmxleCAoVGhlIEZhc3QgTGV4aWNhbCBBbmFseXplcikiCitERVNDUklQVElPTiA9ICJGbGV4IGlzIGEgZmFzdCBsZXhpY2FsIGFuYWx5c2VyIGdlbmVyYXRvci4gIEZsZXggaXMgYSB0b29sIGZvciBnZW5lcmF0aW5nIHByb2dyYW1zIHRoYXQgcmVjb2duaXplIFwKK2xleGljYWwgcGF0dGVybnMgaW4gdGV4dC4iCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2ZsZXgvIgorCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJCU0QiCitERVBFTkRTICs9ICIke0AnYmlzb24tbmF0aXZlIGZsZXgtbmF0aXZlJyBpZiAnJHtQVEVTVF9FTkFCTEVEfScgPT0gJzEnIGVsc2UgJyd9IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9mbGV4L2ZsZXgtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8gcHRlc3QKKworCitNNCA9ICIke2JpbmRpcn0vbTQiCitNNF9jbGFzcy1uYXRpdmUgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L200IgorCitFWFRSQV9PRUNPTkYgKz0gImFjX2N2X3BhdGhfTTQ9JHtNNH0iCitFWFRSQV9PRU1BS0UgKz0gIm00PSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9tNCIKKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2ZsZXggTTQ9JHtNNH0KK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2ZsZXggTTQ9JHtNNH0KK30KKworUkRFUEVORFNfJHtQTn0gKz0gIm00IgorCitkb19jb21waWxlX3B0ZXN0KCkgeworCWZvciBpIGluIGBmaW5kICR7U30vdGVzdHMvIC10eXBlIGQgfGdyZXAgLUV2ICJjb25jYXRlbmF0ZWQtb3B0aW9uc3xyZWplY3R8dGFibGUtb3B0cyIgfCBhd2sgLUYvICd7cHJpbnQgJE5GfSdgOyBcCisJICBkbyBvZV9ydW5tYWtlIC1DICR7U30vdGVzdHMvJGkgLWYgJHtCfS90ZXN0cy8kaS9NYWtlZmlsZSB0b3BfYnVpbGRkaXI9JHtCfSBGTEVYPWZsZXggJGk7IFwKKwlkb25lCisJb2VfcnVubWFrZSAtQyAke1N9L3Rlc3RzL3Rlc3QtcmVqZWN0IC1mICR7Qn0vdGVzdHMvdGVzdC1yZWplY3QvTWFrZWZpbGUgdG9wX2J1aWxkZGlyPSR7Qn0gRkxFWD1mbGV4IHRlc3QtcmVqZWN0LW5yIHRlc3QtcmVqZWN0LXIgdGVzdC1yZWplY3Qtc2VyIHRlc3QtcmVqZWN0LXZlcgorfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCWZvciBpIGluIGBmaW5kICR7U30vdGVzdHMvIC10eXBlIGQgfCBhd2sgLUYvICd7cHJpbnQgJE5GfSdgOyBcCisJICBkbyBjcCAtciAke1N9L3Rlc3RzLyRpICR7RH0ke1BURVNUX1BBVEh9OyBcCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9mbGV4XzIuNS4zOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmxleF8yLjUuMzkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ4NTc0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmxleF8yLjUuMzkuYmIKQEAgLTAsMCArMSw5IEBACityZXF1aXJlIGZsZXguaW5jCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWU0NzQyY2Y5MmU4OTA0MGIzOTQ4NmE2MjE5YjY4MDY3IgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJICs9ICJmaWxlOi8vZG9fbm90X2NyZWF0ZV9wZGZfZG9jLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzdkNDRjNmJiOGMwNzA1ZTAwMTdhYjlhODRhMTUwMmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWRkMmI1NWYzYmMzOGNiNTEyYjQ4ZmFkN2Q3MmY0M2IxMWVmMjQ0NDg3ZmYyNWZjMDBhYWJlYzFlMzJiNjE3ZiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTI0NTRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjguaW5jCkBAIC0wLDAgKzEsMTE4IEBACityZXF1aXJlIGdjYy1jb21tb24uaW5jCisKKyMgVGhpcmQgZGlnaXQgaW4gUFYgc2hvdWxkIGJlIGluY3JlbWVudGVkIGFmdGVyIGEgbWlub3IgcmVsZWFzZQorCitQViA9ICI0LjguNCIKKworIyBCSU5WIHNob3VsZCBiZSBpbmNyZW1lbnRlZCB0byBhIHJldmlzaW9uIGFmdGVyIGEgbWlub3IgZ2NjIHJlbGVhc2UKKworQklOViA9ICI0LjguNCIKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vZ2NjLTQuODoiCisKK0RFUEVORFMgPSsgIm1wZnIgZ21wIGxpYm1wYyB6bGliIgorTkFUSVZFREVQUyA9ICJtcGZyLW5hdGl2ZSBnbXAtbmF0aXZlIGxpYm1wYy1uYXRpdmUgemxpYi1uYXRpdmUiCisKK0xJQ0VOU0UgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24gJiBHUEx2MyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJcCisgICAgZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKKyAgICBmaWxlOi8vQ09QWUlORzM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICBmaWxlOi8vQ09QWUlORzMuTElCO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiBcCisgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCisgICAgZmlsZTovL0NPUFlJTkcuUlVOVElNRTttZDU9ZmU2MGQ4NzA0ODU2N2Q0ZmU4YzhhMGVkMjQ0OGJjYzggXAorIgorCitTUkNfVVJJID0gIlwKKyAgICAke0dOVV9NSVJST1J9L2djYy9nY2MtJHtQVn0vZ2NjLSR7UFZ9LnRhci5iejIgXAorICAgIGZpbGU6Ly8wMDAyLXVjbGliYy1jb25mLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaCBcCisgICAgZmlsZTovLzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwOS1jOTktc25wcmludGYucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDEwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaCBcCisgICAgZmlsZTovLzAwMTEtaW5kZXhfbWFjcm8ucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDEyLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxMy1saWJzdGRjLW5hbWVzcGFjZS5wYXRjaCBcCisgICAgZmlsZTovLzAwMTQtc2gtcHIyNDgzNi5wYXRjaCBcCisgICAgZmlsZTovLzAwMTUtYXJtLVVzZS1UQVJHRVRfRU5ESUFOX09QVElPTi1mb3ItZGV0ZXJtaW5pbmctTVVMVElMSS5wYXRjaCBcCisgICAgZmlsZTovLzAwMTYtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDE3LWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaCBcCisgICAgZmlsZTovLzAwMTgtZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDE5LTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyMC1vcHRpb25hbC1saWJzdGRjLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyMS1nY2MtZGlzYWJsZS1NQVNLX1JFTEFYX1BJQ19DQUxMUy1iaXQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDIyLUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDIzLVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyNC1QUi10YXJnZXQtMzIyMTkucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDI1LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyNi1saWJnY2Mtc2psai1jaGVjay5wYXRjaCBcCisgICAgZmlsZTovLzAwMjctY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDI4LU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDI5LURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDMwLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaCBcCisgICAgZmlsZTovLzAwMzEtRGlzYWJsZS1zZHQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDMyLWxpYnRvb2wucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDMzLWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDM0LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDM1LXdjYXN0LXF1YWwtUFItNTUzODMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDM4LWdjYy00LjgtYnVpbGQtYXJncy5wYXRjaCBcCisgICAgZmlsZTovLzAwNDAtZml4LWcrKy1zeXNyb290LnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0MS1saWJ0b29sLWF2b2lkLWxpYmRpci5wYXRjaCBcCisgICAgZmlsZTovLzAwNDItcHI1Nzc0OC5wYXRjaCBcCisgICAgZmlsZTovLzAwNDMtY3BwLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0NC1nZW5ndHlwZXMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDQ2LWxpYmF0b21pYy1kZXB0cmFja2luZy5wYXRjaCBcCisgICAgZmlsZTovLzAwNDctcmVwb21lbWJ1Zy5wYXRjaCBcCisgICAgZmlsZTovLzAwNDktRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaCBcCisgICAgZmlsZTovL3RhcmdldC1nY2MtaW5jbHVkZWRpci5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiNWE4NGEzMDgzOWIyYWNhMjJhMmQ3MjNkZTJhNjI2ZWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNGE4MGFhMjM3OThiOGU5YjU3OTM0OTRiOGM5NzZiMzliOGQ5YWEyZTUzY2Q1ZWQ1NTM0YWZmNjYyYTdmODY5NSIKKworUyA9ICIke1RNUERJUn0vd29yay1zaGFyZWQvZ2NjLSR7UFZ9LSR7UFJ9L2djYy0ke1BWfSIKK0IgPSAiJHtXT1JLRElSfS9nY2MtJHtQVn0vYnVpbGQuJHtIT1NUX1NZU30uJHtUQVJHRVRfU1lTfSIKKworIyBMYW5ndWFnZSBPdmVycmlkZXMKK0ZPUlRSQU4gPSAiIgorSkFWQSA9ICIiCisKK0xUTyA9ICItLWVuYWJsZS1sdG8iCisKK0VYVFJBX09FQ09ORl9CQVNFID0gIlwKKyAgICAke0xUT30gXAorICAgIC0tZW5hYmxlLWxpYnNzcCBcCisgICAgLS1kaXNhYmxlLWJvb3RzdHJhcCBcCisgICAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAorICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCisgICAgLS13aXRoLWxpbmtlci1oYXNoLXN0eWxlPSR7TElOS0VSX0hBU0hfU1RZTEV9IFwKKyAgICAtLWVuYWJsZS1saW5rZXItYnVpbGQtaWQgXAorICAgIC0td2l0aC1wcGw9bm8gXAorICAgIC0td2l0aC1jbG9vZz1ubyBcCisgICAgLS1lbmFibGUtY2hlY2tpbmc9cmVsZWFzZSBcCisgICAgLS1lbmFibGUtY2hlYWRlcnM9Y19nbG9iYWwgXAorIgorCitFWFRSQV9PRUNPTkZfSU5JVElBTCA9ICJcCisgICAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAorICAgIC0tZGlzYWJsZS1saWJnb21wIFwKKyAgICAtLWRpc2FibGUtbGlic3NwIFwKKyAgICAtLWRpc2FibGUtbGlicXVhZG1hdGggXAorICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCisgICAgLS1kaXNhYmxlLWx0byBcCisgICAgLS1kaXNhYmxlLXBsdWdpbiBcCisgICAgLS1lbmFibGUtZGVjaW1hbC1mbG9hdD1ubyBcCisiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0tZGlzYWJsZS1kZWNpbWFsLWZsb2F0ICIKKworRVhUUkFfT0VDT05GX1BBVEhTID0gIlwgCisgICAgLS13aXRoLWd4eC1pbmNsdWRlLWRpcj0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke3RhcmdldF9pbmNsdWRlZGlyfS9jKysvJHtCSU5WfSBcIAorICAgIC0td2l0aC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcIAorICAgIC0td2l0aC1idWlsZC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcCisiCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ODgwMTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSBiZjNkOTZhZTU4ZmExODBiOGI0NjhkMjVkYzJlMDIwOWRhY2EyNzUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6Mzc6MTEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwMS8zNV0gZ2NjLTQuMy4xOiBBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGNvbmZpZ3VyZSAgICB8ICAgIDIgKy0KKyBjb25maWd1cmUuYWMgfCAgICAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IGQ4MDk1MzUuLjFiNzZjOTAgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTc0MzksNyArNzQzOSw3IEBAIGZpCisgIyBmb3IgdGFyZ2V0X2FsaWFzIGFuZCBnY2MgZG9lc24ndCBtYW5hZ2UgaXQgY29uc2lzdGVudGx5LgorIHRhcmdldF9jb25maWdhcmdzPSItLWNhY2hlLWZpbGU9Li9jb25maWcuY2FjaGUgJHt0YXJnZXRfY29uZmlnYXJnc30iCisgCistRkxBR1NfRk9SX1RBUkdFVD0KKytGTEFHU19GT1JfVEFSR0VUPSIkQVJDSF9GTEFHU19GT1JfVEFSR0VUIgorIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2RpcnMgIiBpbgorICAqIiBuZXdsaWIgIiopCisgICBjYXNlICIgJHRhcmdldF9jb25maWdhcmdzICIgaW4KK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDQ4ZWMxYWEuLjg5ZDFkM2YgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI4NzMsNyArMjg3Myw3IEBAIGZpCisgIyBmb3IgdGFyZ2V0X2FsaWFzIGFuZCBnY2MgZG9lc24ndCBtYW5hZ2UgaXQgY29uc2lzdGVudGx5LgorIHRhcmdldF9jb25maWdhcmdzPSItLWNhY2hlLWZpbGU9Li9jb25maWcuY2FjaGUgJHt0YXJnZXRfY29uZmlnYXJnc30iCisgCistRkxBR1NfRk9SX1RBUkdFVD0KKytGTEFHU19GT1JfVEFSR0VUPSIkQVJDSF9GTEFHU19GT1JfVEFSR0VUIgorIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2RpcnMgIiBpbgorICAqIiBuZXdsaWIgIiopCisgICBjYXNlICIgJHRhcmdldF9jb25maWdhcmdzICIgaW4KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwMi11Y2xpYmMtY29uZi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDItdWNsaWJjLWNvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRhM2IxMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDItdWNsaWJjLWNvbmYucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorRnJvbSBkMDMwOTczYzg3MmMwMGQ5MTY5MjFkODRkZWVlMGFmMmMwZDM4MDgxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6Mzg6MjUgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwMi8zNV0gdWNsaWJjLWNvbmYKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2ggfCAgICA0ICsrKysKKyBsaWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZyAgICAgfCAgICA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaCBiL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAoraW5kZXggNjBiMDQ5Ny4uNmRjN2VhZCAxMDA3NTUKKy0tLSBhL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAorKysrIGIvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCitAQCAtMTA2LDYgKzEwNiwxMCBAQCBpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIC1hICRIX1JFQUxfVEFSR0VUID0gaTY4Ni1wYy1saW51eC1nbnUgXQorICB0aGVuCisgICBtYWtlIGFsbC1nZGIgYWxsLWRlamFnbnUgYWxsLWxkIHx8IGV4aXQgMQorICAgbWFrZSBpbnN0YWxsLWdkYiBpbnN0YWxsLWRlamFnbnUgaW5zdGFsbC1sZCB8fCBleGl0IDEKKytlbGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgLWEgJEhfUkVBTF9UQVJHRVQgPSBpNjg2LXBjLWxpbnV4LXVjbGliYyBdCisrIHRoZW4KKysgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCisrICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQorIGVsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCBdIDsgdGhlbgorICAgbWFrZSBib290c3RyYXAgfHwgZXhpdCAxCisgICBtYWtlIGluc3RhbGwgfHwgZXhpdCAxCitkaWZmIC0tZ2l0IGEvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcgYi9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZworaW5kZXggNzQzZDk1MS4uYWU0ZWE2MCAxMDA3NTUKKy0tLSBhL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCisrKysgYi9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZworQEAgLTYwMyw3ICs2MDMsNyBAQCBob3N0X29zPWBlY2hvICRob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKKyAKKyAjIFRyYW5zZm9ybSBsaW51eCogdG8gKi0qLWxpbnV4LWdudSosIHRvIHN1cHBvcnQgb2xkIGNvbmZpZ3VyZSBzY3JpcHRzLgorIGNhc2UgJGhvc3Rfb3MgaW4KKy1saW51eC1nbnUqKSA7OworK2xpbnV4LWdudSp8bGludXgtdWNsaWJjKikgOzsKKyBsaW51eCopIGhvc3Q9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoLiotLiotbGludXhcKVwoLipcKSQvXDEtZ251XDIvJ2AKKyBlc2FjCisgCitAQCAtMTI0Nyw3ICsxMjQ3LDcgQEAgbGludXgtZ251b2xkbGQqIHwgbGludXgtZ251YW91dCogfCBsaW51eC1nbnVjb2ZmKikKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgqKQorICAgdmVyc2lvbl90eXBlPWxpbnV4CisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIG5lZWRfdmVyc2lvbj1ubworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwOThlOTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaApAQCAtMCwwICsxLDg3IEBACitGcm9tIGQyZDlkZDc1NmM0MzU2ZDE0ZGQ3YWUwMDM4NTYzNDRjYjRmMzc5ODUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MDoxMiArMDQwMAorU3ViamVjdDogW1BBVENIIDAzLzM1XSBnY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjIHwgICAgNSArKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaCAgfCAgICA5ICsrKysrKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaCAgfCAgICA5ICsrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgMjMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKK2luZGV4IDBkMzA5YTUuLmYyZjFlMWYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjCitAQCAtMjYzLDUgKzI2MywxMCBAQCBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KKyAjaWZkZWYgX0dMSUJDWFhfTE9OR19ET1VCTEVfQ09NUEFUCisgI2RlZmluZSBfR0xJQkNYWF9MREJMX0NPTVBBVChkYmwsIGxkYmwpIFwKKyAgIGV4dGVybiAiQyIgdm9pZCBsZGJsICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoYWxpYXMgKCNkYmwpKSkKKysjaWZkZWYgX19VQ0xJQkNfXworKy8vIFRoaXMgaXMgYmVjYXVzZSBfX2NfbG9jYWxlIGlzIG9mIHR5cGUgX19jdHlwZV90b3VwbG93X3QqIHdoaWNoIGlzIHNob3J0IG9uIHVjbGliYy4gZm9yIGdsaWJjIGl0cyBpbnQqCisrX0dMSUJDWFhfTERCTF9DT01QQVQoX1pTdDE0X19jb252ZXJ0X3RvX3ZJZEV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BzLCBfWlN0MTRfX2NvbnZlcnRfdG9fdkllRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUHMpOworKyNlbHNlCisgX0dMSUJDWFhfTERCTF9DT01QQVQoX1pTdDE0X19jb252ZXJ0X3RvX3ZJZEV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BpLCBfWlN0MTRfX2NvbnZlcnRfdG9fdkllRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUGkpOworKyNlbmRpZgorICNlbmRpZiAvLyBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmgKK2luZGV4IGI1ZmQ5ODkuLjNkYTlhNWQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAorQEAgLTQwLDEzICs0MCwyMiBAQAorIAorICNpbmNsdWRlIDxjbG9jYWxlPgorIAorKyNpZmRlZiBfX1VDTElCQ19fCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2VuZGlmCisrCisgI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwCisgCisgbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCisgeworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysgIHR5cGVkZWYgX19jdHlwZV90b3VwbG93X3QqCV9fY19sb2NhbGU7CisrI2Vsc2UKKyAgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7CisrI2VuZGlmCisgCisgICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBkb3VibGUgYW5kIGxvbmcgZG91YmxlIHRvIHN0cmluZyBhbmQKKyAgIC8vIHJldHVybiBsZW5ndGggb2Ygc3RyaW5nLiAgSWYgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaAoraW5kZXggMmQ4ZTk3OC4uMTRlYjA4ZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCitAQCAtMzMsNiArMzMsMTEgQEAKKyAKKyAvLyBJbmZvcm1hdGlvbiBhcyBnbGVhbmVkIGZyb20gL3Vzci9pbmNsdWRlL2N0eXBlLmgKKyAKKysjaWZkZWYgX19VQ0xJQkNfXworKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNlbmRpZgorKworIG5hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQorIHsKKyBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorQEAgLTQxLDcgKzQ2LDExIEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgICBzdHJ1Y3QgY3R5cGVfYmFzZQorICAgeworICAgICAvLyBOb24tc3RhbmRhcmQgdHlwZWRlZnMuCisrI2lmZGVmIF9fVUNMSUJDX18KKysgICAgdHlwZWRlZiBjb25zdCBfX2N0eXBlX3RvdXBsb3dfdCoJX190b190eXBlOworKyNlbHNlCisgICAgIHR5cGVkZWYgY29uc3QgaW50KiAJCV9fdG9fdHlwZTsKKysjZW5kaWYKKyAKKyAgICAgLy8gTkI6IE9mZnNldHMgaW50byBjdHlwZTxjaGFyPjo6X01fdGFibGUgZm9yY2UgYSBwYXJ0aWN1bGFyIHNpemUKKyAgICAgLy8gb24gdGhlIG1hc2sgdHlwZS4gQmVjYXVzZSBvZiB0aGlzLCB3ZSBkb24ndCB1c2UgYW4gZW51bS4KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZjVmMzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2gKQEAgLTAsMCArMSwyODYyIEBACitGcm9tIGE1NWM3NTFhNDQ5YzJjYmYwYjNmY2MwN2FhYjFiODZiZjk2NjE1MTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MTozOSArMDQwMAorU3ViamVjdDogW1BBVENIIDA0LzM1XSB1Y2xpYmMtbG9jYWxlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM3ICsrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oICAgICAgfCAgIDYzICsrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCAgMTYwICsrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCAgMTE3ICsrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjICAgICAgICB8ICAzMDggKysrKysrKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyAgICAgICAgfCAgIDgwICsrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIHwgIDMwMCArKysrKysrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyAgICAgICB8ICAxMDAgKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAgMTE4ICsrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8ICA2OTIgKysrKysrKysrKysrKysrKysrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8ICAxNjAgKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjICB8ICA0MDYgKysrKysrKysrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oICAgfCAgIDY4ICsrCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDc1ICsrKworIGxpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oICAgICAgIHwgICAgMiArCisgbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyICAgICAgICAgICAgICAgICAgfCAgICAyICsKKyAxNiBmaWxlcyBjaGFuZ2VkLCAyNjg4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00IGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAoraW5kZXggMDg3MWE2YS4uMzI2ZDdlZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKKysrKyBiL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKK0BAIC0xOTA1LDYgKzE5MDUsOSBAQCBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKKyAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCisgICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgorICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgorKyAgICAgICotdWNsaWJjKikKKysgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCisrICAgICAgICA7OworICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQorIAllbmFibGVfY2xvY2FsZV9mbGFnPWdudQorIAk7OworQEAgLTIwNjksNiArMjA3Miw0MCBAQCBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKKyAgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjCisgICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorICAgICAgIDs7CisrICAgIHVjbGliYykKKysgICAgICBBQ19NU0dfUkVTVUxUKHVjbGliYykKKysKKysgICAgICAjIERlY2xhcmUgaW50ZW50aW9uIHRvIHVzZSBnZXR0ZXh0LCBhbmQgYWRkIHN1cHBvcnQgZm9yIHNwZWNpZmljCisrICAgICAgIyBsYW5ndWFnZXMuCisrICAgICAgIyBGb3Igc29tZSByZWFzb24sIEFMTF9MSU5HVUFTIGhhcyB0byBiZSBiZWZvcmUgQU0tR05VLUdFVFRFWFQKKysgICAgICBBTExfTElOR1VBUz0iZGUgZnIiCisrCisrICAgICAgIyBEb24ndCBjYWxsIEFNLUdOVS1HRVRURVhUIGhlcmUuIEluc3RlYWQsIGFzc3VtZSBnbGliYy4KKysgICAgICBBQ19DSEVDS19QUk9HKGNoZWNrX21zZ2ZtdCwgbXNnZm10LCB5ZXMsIG5vKQorKyAgICAgIGlmIHRlc3QgeCIkY2hlY2tfbXNnZm10IiA9IHgieWVzIiAmJiB0ZXN0IHgiJGVuYWJsZV9ubHMiID0geCJ5ZXMiOyB0aGVuCisrICAgICAgICBVU0VfTkxTPXllcworKyAgICAgIGZpCisrICAgICAgIyBFeHBvcnQgdGhlIGJ1aWxkIG9iamVjdHMuCisrICAgICAgZm9yIGxpbmcgaW4gJEFMTF9MSU5HVUFTOyBkbyBcCisrICAgICAgICBnbGliY3h4X01PRklMRVM9IiRnbGliY3h4X01PRklMRVMgJGxpbmcubW8iOyBcCisrICAgICAgICBnbGliY3h4X1BPRklMRVM9IiRnbGliY3h4X1BPRklMRVMgJGxpbmcucG8iOyBcCisrICAgICAgZG9uZQorKyAgICAgIEFDX1NVQlNUKGdsaWJjeHhfTU9GSUxFUykKKysgICAgICBBQ19TVUJTVChnbGliY3h4X1BPRklMRVMpCisrCisrICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysgICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisrICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisrICAgICAgQ0NUWVBFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKyAgICAgIDs7CisgICBlc2FjCisgCisgICAjIFRoaXMgaXMgd2hlcmUgdGhlIHRlc3RzdWl0ZSBsb29rcyBmb3IgbG9jYWxlIGNhdGFsb2dzLCB1c2luZyB0aGUKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yYWUzZTRhCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK0BAIC0wLDAgKzEsNjMgQEAKKysvLyBQcm90b3R5cGVzIGZvciBHTElCQyB0aHJlYWQgbG9jYWxlIF9fLXByZWZpeGVkIGZ1bmN0aW9ucyAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLyBXcml0dGVuIGJ5IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisrI2luY2x1ZGUgPGNsb2NhbGU+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgY2xlYW4gdGhpcyB1cAorKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCisrZXh0ZXJuICJDIiBfX3R5cGVvZihubF9sYW5naW5mb19sKSBfX25sX2xhbmdpbmZvX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJjb2xsX2wpIF9fc3RyY29sbF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RyZnRpbWVfbCkgX19zdHJmdGltZV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9kX2wpIF9fc3RydG9kX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2ZfbCkgX19zdHJ0b2ZfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvbGRfbCkgX19zdHJ0b2xkX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ4ZnJtX2wpIF9fc3RyeGZybV9sOworK2V4dGVybiAiQyIgX190eXBlb2YobmV3bG9jYWxlKSBfX25ld2xvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKGZyZWVsb2NhbGUpIF9fZnJlZWxvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKGR1cGxvY2FsZSkgX19kdXBsb2NhbGU7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorK2V4dGVybiAiQyIgX190eXBlb2YoaXN3Y3R5cGVfbCkgX19pc3djdHlwZV9sOworK2V4dGVybiAiQyIgX190eXBlb2YodG93bG93ZXJfbCkgX190b3dsb3dlcl9sOworK2V4dGVybiAiQyIgX190eXBlb2YodG93dXBwZXJfbCkgX190b3d1cHBlcl9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzY29sbF9sKSBfX3djc2NvbGxfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc2Z0aW1lX2wpIF9fd2NzZnRpbWVfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc3hmcm1fbCkgX193Y3N4ZnJtX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3R5cGVfbCkgX193Y3R5cGVfbDsKKysjZW5kaWYKKysKKysjZW5kaWYgLy8gR0xJQkMgMi4zIGFuZCBsYXRlcgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjUwODFkYzEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworQEAgLTAsMCArMSwxNjAgQEAKKysvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxjZXJybm8+ICAvLyBGb3IgZXJybm8KKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxzdGRleGNlcHQ+CisrI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3N0cnRvbF9sKFMsIEUsIEIsIEwpICAgICAgc3RydG9sKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvdWxfbChTLCBFLCBCLCBMKSAgICAgc3RydG91bCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b2xsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvbGwoKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG91bGxfbChTLCBFLCBCLCBMKSAgICBzdHJ0b3VsbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKysjZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCisrI2RlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKysjd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworKyNkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKysjZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZmxvYXQmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2Y7CisrCSAgZWxzZQorKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fZDsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBsb25nIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19sZDsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB2b2lkCisrICBsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCSAgICBfX2NfbG9jYWxlIF9fb2xkKQorKyAgeworKyAgICBfX2Nsb2MgPSBfX25ld2xvY2FsZSgxIDw8IExDX0FMTCwgX19zLCBfX29sZCk7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgaWYgKCFfX2Nsb2MpCisrICAgICAgeworKwkvLyBUaGlzIG5hbWVkIGxvY2FsZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIE9TLgorKwlfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUgIgorKwkJCSAgICAgICJuYW1lIG5vdCB2YWxpZCIpKTsKKysgICAgICB9CisrI2VuZGlmCisrICB9CisrCisrICB2b2lkCisrICBsb2NhbGU6OmZhY2V0OjpfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKysgIHsKKysgICAgaWYgKF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKKysgICAgICBfX2ZyZWVsb2NhbGUoX19jbG9jKTsKKysgIH0KKysKKysgIF9fY19sb2NhbGUKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKysgIHsgcmV0dXJuIF9fZHVwbG9jYWxlKF9fY2xvYyk7IH0KKyt9IC8vIG5hbWVzcGFjZSBzdGQKKysKKytuYW1lc3BhY2UgX19nbnVfY3h4CisreworKyAgY29uc3QgY2hhciogY29uc3QgY2F0ZWdvcnlfbmFtZXNbNiArIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTXSA9CisrICAgIHsKKysgICAgICAiTENfQ1RZUEUiLAorKyAgICAgICJMQ19OVU1FUklDIiwKKysgICAgICAiTENfVElNRSIsCisrICAgICAgIkxDX0NPTExBVEUiLAorKyAgICAgICJMQ19NT05FVEFSWSIsCisrICAgICAgIkxDX01FU1NBR0VTIiwKKysjaWYgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgIT0gMAorKyAgICAgICJMQ19QQVBFUiIsCisrICAgICAgIkxDX05BTUUiLAorKyAgICAgICJMQ19BRERSRVNTIiwKKysgICAgICAiTENfVEVMRVBIT05FIiwKKysgICAgICAiTENfTUVBU1VSRU1FTlQiLAorKyAgICAgICJMQ19JREVOVElGSUNBVElPTiIKKysjZW5kaWYKKysgICAgfTsKKyt9CisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIGNvbnN0IGNoYXIqIGNvbnN0KiBjb25zdCBsb2NhbGU6Ol9TX2NhdGVnb3JpZXMgPSBfX2dudV9jeHg6OmNhdGVnb3J5X25hbWVzOworK30gIC8vIG5hbWVzcGFjZSBzdGQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZGEwN2MxZgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK0BAIC0wLDAgKzEsMTE3IEBACisrLy8gV3JhcHBlciBmb3IgdW5kZXJseWluZyBDLWxhbmd1YWdlIGxvY2FsaXphdGlvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjggIFN0YW5kYXJkIGxvY2FsZSBjYXRlZ29yaWVzLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaWZuZGVmIF9DX0xPQ0FMRV9ICisrI2RlZmluZSBfQ19MT0NBTEVfSCAxCisrCisrI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorKworKyNpbmNsdWRlIDxjc3RyaW5nPiAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c3RybGVuCisrI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzbnByaW50ZiBvciBzdGQ6OnNwcmludGYKKysjaW5jbHVkZSA8Y2xvY2FsZT4KKysjaW5jbHVkZSA8bGFuZ2luZm8uaD4JCS8vIEZvciBjb2RlY3Z0CisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrI2luY2x1ZGUgPGljb252Lmg+CQkvLyBGb3IgY29kZWN2dCB1c2luZyBpY29udiwgaWNvbnZfdAorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyNpbmNsdWRlIDxsaWJpbnRsLmg+IAkJLy8gRm9yIG1lc3NhZ2VzCisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgd2hhdCBpcyBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgZm9yCisrI2VuZGlmCisrI2RlZmluZSBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgMQorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBjYXRlZ29yaWVzCisrI2VuZGlmCisrLy8gI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyA2CisrI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwCisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKytuYW1lc3BhY2UgX19nbnVfY3h4CisreworKyAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworK30KKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICB0eXBlZGVmIF9fbG9jYWxlX3QJCV9fY19sb2NhbGU7CisrI2Vsc2UKKysgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7CisrI2VuZGlmCisrCisrICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBfVHYgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCisrICAvLyBzdHJpbmcuICBJZiBzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCisrICAvLyB0aGUgdW5zYWZlIHNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAorKyAgLy8gYmUgYXZvaWRlZC4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KKysgICAgaW50CisrICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsCisrCQkgICAgIGNvbnN0IGludCBfX3NpemUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKKysJCSAgICAgY29uc3QgY2hhciogX19mbXQsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fcHJlYykKKysgICAgeworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fY2xvYyk7CisrI2Vsc2UKKysJCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMpCisrICAgIHsKKysjIGlmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fb2xkKSArIDFdOworKyAgICAgIHN0ZDo6c3RyY3B5KF9fc2F2LCBfX29sZCk7CisrICAgICAgc3RkOjpzZXRsb2NhbGUoTENfQUxMLCAiQyIpOworKyMgZW5kaWYKKysjZW5kaWYKKysKKysgICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7CisrI2VsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisrI2VuZGlmCisrICAgICAgcmV0dXJuIF9fcmV0OworKyAgICB9CisrfQorKworKyNlbmRpZgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNjRhYTk2MgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworQEAgLTAsMCArMSwzMDggQEAKKysvLyBzdGQ6OmNvZGVjdnQgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuNSAtIFRlbXBsYXRlIGNsYXNzIGNvZGVjdnQKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Y3N0ZGxpYj4gIC8vIEZvciBNQl9DVVJfTUFYCisrI2luY2x1ZGUgPGNsaW1pdHM+ICAvLyBGb3IgTUJfTEVOX01BWAorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBTcGVjaWFsaXphdGlvbnMuCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAorKwkgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCisrCSBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAorKwkgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CisrICB7CisrICAgIHJlc3VsdCBfX3JldCA9IG9rOworKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysKKysgICAgLy8gd2NzbnJ0b21icyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKysgICAgLy8gaW4gY2FzZSB3ZSBmYWxsIGJhY2sgdG8gd2NydG9tYiBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogd2NzbnJ0b21icyBpcyBhIEdOVSBleHRlbnNpb24KKysgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9fZnJvbSwgX190b19uZXh0ID0gX190bzsKKysJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAorKwkgJiYgX19yZXQgPT0gb2s7KQorKyAgICAgIHsKKysJY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQgPSB3bWVtY2hyKF9fZnJvbV9uZXh0LCBMJ1wwJywKKysJCQkJCQkgICAgICBfX2Zyb21fZW5kIC0gX19mcm9tX25leHQpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7CisrCisrCV9fZnJvbSA9IF9fZnJvbV9uZXh0OworKwljb25zdCBzaXplX3QgX19jb252ID0gd2NzbnJ0b21icyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKKysJCQkJCSBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCisrCQkJCQkgX190b19lbmQgLSBfX3RvX25leHQsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gd2NydG9tYi4KKysJICAgIGZvciAoOyBfX2Zyb20gPCBfX2Zyb21fbmV4dDsgKytfX2Zyb20pCisrCSAgICAgIF9fdG9fbmV4dCArPSB3Y3J0b21iKF9fdG9fbmV4dCwgKl9fZnJvbSwgJl9fdG1wX3N0YXRlKTsKKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJICAgIF9fcmV0ID0gZXJyb3I7CisrCSAgfQorKwllbHNlIGlmIChfX2Zyb21fbmV4dCAmJiBfX2Zyb21fbmV4dCA8IF9fZnJvbV9jaHVua19lbmQpCisrCSAgeworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgIH0KKysKKysJaWYgKF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3JldCA9PSBvaykKKysJICB7CisrCSAgICBleHRlcm5fdHlwZSBfX2J1ZltNQl9MRU5fTUFYXTsKKysJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKKysJICAgIGNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3J0b21iKF9fYnVmLCAqX19mcm9tX25leHQsICZfX3RtcF9zdGF0ZSk7CisrCSAgICBpZiAoX19jb252ID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihfX3RvX2VuZCAtIF9fdG9fbmV4dCkpCisrCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICAgIGVsc2UKKysJICAgICAgeworKwkJbWVtY3B5KF9fdG9fbmV4dCwgX19idWYsIF9fY29udik7CisrCQlfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCQlfX3RvX25leHQgKz0gX19jb252OworKwkJKytfX2Zyb21fbmV4dDsKKysJICAgICAgfQorKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorKwlpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAorKwlpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKKysgIHsKKysgICAgcmVzdWx0IF9fcmV0ID0gb2s7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIHN0b3JlIGEgTCdcMCcgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KKysgICAgLy8gTkI6IG1ic25ydG93Y3MgaXMgYSBHTlUgZXh0ZW5zaW9uCisrICAgIGZvciAoX19mcm9tX25leHQgPSBfX2Zyb20sIF9fdG9fbmV4dCA9IF9fdG87CisrCSBfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX190b19uZXh0IDwgX190b19lbmQKKysJICYmIF9fcmV0ID09IG9rOykKKysgICAgICB7CisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOworKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tX25leHQsICdcMCcsCisrCQkJCQkJCQkgIF9fZnJvbV9lbmQKKysJCQkJCQkJCSAgLSBfX2Zyb21fbmV4dCkpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7CisrCisrCV9fZnJvbSA9IF9fZnJvbV9uZXh0OworKwlzaXplX3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKKysJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbV9uZXh0LAorKwkJCQkgICBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyBtYnJ0b3djLgorKwkgICAgZm9yICg7OyArK19fdG9fbmV4dCwgX19mcm9tICs9IF9fY29udikKKysJICAgICAgeworKwkJX19jb252ID0gbWJydG93YyhfX3RvX25leHQsIF9fZnJvbSwgX19mcm9tX2VuZCAtIF9fZnJvbSwKKysJCQkJICZfX3RtcF9zdGF0ZSk7CisrCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCisrCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQorKwkJICBicmVhazsKKysJICAgICAgfQorKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb207CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCSAgICBfX3JldCA9IGVycm9yOworKwkgIH0KKysJZWxzZSBpZiAoX19mcm9tX25leHQgJiYgX19mcm9tX25leHQgPCBfX2Zyb21fY2h1bmtfZW5kKQorKwkgIHsKKysJICAgIC8vIEl0IGlzIHVuY2xlYXIgd2hhdCB0byByZXR1cm4gaW4gdGhpcyBjYXNlIChzZWUgRFIgMzgyKS4KKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb21fY2h1bmtfZW5kOworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICB9CisrCisrCWlmIChfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX19yZXQgPT0gb2spCisrCSAgeworKwkgICAgaWYgKF9fdG9fbmV4dCA8IF9fdG9fZW5kKQorKwkgICAgICB7CisrCQkvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncworKwkJX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkJKytfX2Zyb21fbmV4dDsKKysJCSpfX3RvX25leHQrKyA9IEwnXDAnOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgaW50CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCisrICB7CisrICAgIC8vIFhYWCBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCB0aGUgZW5jb2RpbmcgaXMKKysgICAgLy8gc3RhdGVsZXNzIGFuZCBpcyBlaXRoZXIgc2luZ2xlLWJ5dGUgb3IgdmFyaWFibGUtd2lkdGguCisrICAgIGludCBfX3JldCA9IDA7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKyAgICBpZiAoTUJfQ1VSX01BWCA9PSAxKQorKyAgICAgIF9fcmV0ID0gMTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGludAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKyAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncy4KKysgICAgaW50IF9fcmV0ID0gTUJfQ1VSX01BWDsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGludAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2xlbmd0aChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAorKwkgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0CisrICB7CisrICAgIGludCBfX3JldCA9IDA7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIGFkdmFuY2UgcGFzdCBpdCBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KKysKKysgICAgLy8gQSBkdW1teSBpbnRlcm5hbCBidWZmZXIgaXMgbmVlZGVkIGluIG9yZGVyIGZvciBtYnNucnRvY3dzIHRvIGNvbnNpZGVyCisrICAgIC8vIGl0cyBmb3VydGggcGFyYW1ldGVyIChpdCB3b3VsZG4ndCB3aXRoIE5VTEwgYXMgZmlyc3QgcGFyYW1ldGVyKS4KKysgICAgd2NoYXJfdCogX190byA9IHN0YXRpY19jYXN0PHdjaGFyX3QqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZih3Y2hhcl90KQorKwkJCQkJCQkgICAqIF9fbWF4KSk7CisrICAgIHdoaWxlIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKKysgICAgICB7CisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOworKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tLCAnXDAnLAorKwkJCQkJCQkJICBfX2VuZAorKwkJCQkJCQkJICAtIF9fZnJvbSkpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZW5kOworKworKwljb25zdCBleHRlcm5fdHlwZSogX190bXBfZnJvbSA9IF9fZnJvbTsKKysJc2l6ZV90IF9fY29udiA9IG1ic25ydG93Y3MoX190bywgJl9fZnJvbSwKKysJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbSwKKysJCQkJICAgX19tYXgsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gbWJydG93Yy4KKysJICAgIGZvciAoX19mcm9tID0gX190bXBfZnJvbTs7IF9fZnJvbSArPSBfX2NvbnYpCisrCSAgICAgIHsKKysJCV9fY29udiA9IG1icnRvd2MoTlVMTCwgX19mcm9tLCBfX2VuZCAtIF9fZnJvbSwKKysJCQkJICZfX3RtcF9zdGF0ZSk7CisrCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCisrCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQorKwkJICBicmVhazsKKysJICAgICAgfQorKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKKysJICAgIGJyZWFrOworKwkgIH0KKysJaWYgKCFfX2Zyb20pCisrCSAgX19mcm9tID0gX19mcm9tX2NodW5rX2VuZDsKKysKKysJX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKKysJX19tYXggLT0gX19jb252OworKworKwlpZiAoX19mcm9tIDwgX19lbmQgJiYgX19tYXgpCisrCSAgeworKwkgICAgLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MKKysJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKKysJICAgICsrX19mcm9tOworKwkgICAgKytfX3JldDsKKysJICAgIC0tX19tYXg7CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jMjY2NGE3CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDgwIEBACisrLy8gc3RkOjpjb2xsYXRlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi40LjEuMiAgY29sbGF0ZSB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKKysjZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKysjZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCisrI2RlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIFRoZXNlIGFyZSBiYXNpY2FsbHkgZXh0ZW5zaW9ucyB0byBjaGFyX3RyYWl0cywgYW5kIHBlcmhhcHMgc2hvdWxkCisrICAvLyBiZSBwdXQgdGhlcmUgaW5zdGVhZCBvZiBoZXJlLgorKyAgdGVtcGxhdGU8PgorKyAgICBpbnQKKysgICAgY29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiBfX29uZSwgY29uc3QgY2hhciogX190d28pIGNvbnN0CisrICAgIHsKKysgICAgICBpbnQgX19jbXAgPSBfX3N0cmNvbGxfbChfX29uZSwgX190d28sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOworKyAgICAgIHJldHVybiAoX19jbXAgPj4gKDggKiBzaXplb2YgKGludCkgLSAyKSkgfCAoX19jbXAgIT0gMCk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgc2l6ZV90CisrICAgIGNvbGxhdGU8Y2hhcj46Ol9NX3RyYW5zZm9ybShjaGFyKiBfX3RvLCBjb25zdCBjaGFyKiBfX2Zyb20sCisrCQkJCXNpemVfdCBfX24pIGNvbnN0CisrICAgIHsgcmV0dXJuIF9fc3RyeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICBpbnQKKysgICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fY29tcGFyZShjb25zdCB3Y2hhcl90KiBfX29uZSwKKysJCQkJIGNvbnN0IHdjaGFyX3QqIF9fdHdvKSBjb25zdAorKyAgICB7CisrICAgICAgaW50IF9fY21wID0gX193Y3Njb2xsX2woX19vbmUsIF9fdHdvLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsKKysgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDApOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHNpemVfdAorKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV90cmFuc2Zvcm0od2NoYXJfdCogX190bywgY29uc3Qgd2NoYXJfdCogX19mcm9tLAorKwkJCQkgICBzaXplX3QgX19uKSBjb25zdAorKyAgICB7IHJldHVybiBfX3djc3hmcm1fbChfX3RvLCBfX2Zyb20sIF9fbiwgX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyOTRlM2EKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDMwMCBAQAorKy8vIHN0ZDo6Y3R5cGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuMS4yICBjdHlwZSB2aXJ0dWFsIGZ1bmN0aW9ucy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICB3Y3R5cGUoKFMpKQorKyNkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgdG93dXBwZXIoKEMpKQorKyNkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgdG93bG93ZXIoKEMpKQorKyNkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAorKyAgLy8gdmFyaW91cyAvY29uZmlnL29zLyogZmlsZXMuCisrICB0ZW1wbGF0ZTw+CisrICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKysgICAgOiBjdHlwZTxjaGFyPigwLCBmYWxzZSwgX19yZWZzKQorKyAgICB7CisrICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKKysJeworKwkgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY3R5cGUpOworKwkgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZSwgX19zKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIHRoaXMtPl9NX3RvdXBwZXIgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b3VwcGVyOworKwkgIHRoaXMtPl9NX3RvbG93ZXIgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b2xvd2VyOworKwkgIHRoaXMtPl9NX3RhYmxlID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfYjsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICBjdHlwZTx3Y2hhcl90Pjo6X193bWFza190eXBlCisrICBjdHlwZTx3Y2hhcl90Pjo6X01fY29udmVydF90b193bWFzayhjb25zdCBtYXNrIF9fbSkgY29uc3QKKysgIHsKKysgICAgX193bWFza190eXBlIF9fcmV0OworKyAgICBzd2l0Y2ggKF9fbSkKKysgICAgICB7CisrICAgICAgY2FzZSBzcGFjZToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJzcGFjZSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBwcmludDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJwcmludCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBjbnRybDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJjbnRybCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSB1cHBlcjoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJ1cHBlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBsb3dlcjoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJsb3dlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBhbHBoYToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJhbHBoYSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBkaWdpdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJkaWdpdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBwdW5jdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJwdW5jdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSB4ZGlnaXQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgieGRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGFsbnVtOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImFsbnVtIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGdyYXBoOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImdyYXBoIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBkZWZhdWx0OgorKwlfX3JldCA9IF9fd21hc2tfdHlwZSgpOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvdXBwZXIod2NoYXJfdCBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfX3Rvd3VwcGVyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKyAgICAgICAgKl9fbG8gPSBfX3Rvd3VwcGVyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgICAgICsrX19sbzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvbG93ZXIod2NoYXJfdCBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfX3Rvd2xvd2VyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKyAgICAgICAgKl9fbG8gPSBfX3Rvd2xvd2VyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgICAgICsrX19sbzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgYm9vbAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9faXMobWFzayBfX20sIHdjaGFyX3QgX19jKSBjb25zdAorKyAgeworKyAgICAvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKyAgICAvLyBsaWJyYXJ5IGZvciBibGFuay4KKysgICAgYm9vbCBfX3JldCA9IGZhbHNlOworKyAgICBjb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworKyAgICBmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrICAgICAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0KKysJICAmJiBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJeworKwkgIF9fcmV0ID0gdHJ1ZTsKKysJICBicmVhazsKKysJfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9faXMoY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgbWFzayogX192ZWMpIGNvbnN0CisrICB7CisrICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytfX3ZlYywgKytfX2xvKQorKyAgICAgIHsKKysJLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysJLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CisrCW1hc2sgX19tID0gMDsKKysJZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorKwkgIGlmIChfX2lzd2N0eXBlX2woKl9fbG8sIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwkgICAgX19tIHw9IF9NX2JpdFtfX2JpdGN1cl07CisrCSpfX3ZlYyA9IF9fbTsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSAmJiAhdGhpcy0+ZG9faXMoX19tLCAqX19sbykpCisrICAgICAgKytfX2xvOworKyAgICByZXR1cm4gX19sbzsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSAmJiB0aGlzLT5kb19pcyhfX20sICpfX2xvKSAhPSAwKQorKyAgICAgICsrX19sbzsKKysgICAgcmV0dXJuIF9fbG87CisrICB9CisrCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb193aWRlbihjaGFyIF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9NX3dpZGVuW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldOyB9CisrCisrICBjb25zdCBjaGFyKgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgd2NoYXJfdCogX19kZXN0KSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKwkqX19kZXN0ID0gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG8pXTsKKysJKytfX2xvOworKwkrK19fZGVzdDsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgY2hhcgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fbmFycm93KHdjaGFyX3QgX193YywgY2hhciBfX2RmYXVsdCkgY29uc3QKKysgIHsKKysgICAgaWYgKF9fd2MgPj0gMCAmJiBfX3djIDwgMTI4ICYmIF9NX25hcnJvd19vaykKKysgICAgICByZXR1cm4gX01fbmFycm93W19fd2NdOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIGNvbnN0IGludCBfX2MgPSB3Y3RvYihfX3djKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fbmFycm93KGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIGNoYXIgX19kZmF1bHQsCisrCSAgICBjaGFyKiBfX2Rlc3QpIGNvbnN0CisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgaWYgKF9NX25hcnJvd19vaykKKysgICAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrCXsKKysJICBpZiAoKl9fbG8gPj0gMCAmJiAqX19sbyA8IDEyOCkKKysJICAgICpfX2Rlc3QgPSBfTV9uYXJyb3dbKl9fbG9dOworKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgY29uc3QgaW50IF9fYyA9IHdjdG9iKCpfX2xvKTsKKysJICAgICAgKl9fZGVzdCA9IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysJICAgIH0KKysJICArK19fbG87CisrCSAgKytfX2Rlc3Q7CisrCX0KKysgICAgZWxzZQorKyAgICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysJeworKwkgIGNvbnN0IGludCBfX2MgPSB3Y3RvYigqX19sbyk7CisrCSAgKl9fZGVzdCA9IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysJICArK19fbG87CisrCSAgKytfX2Rlc3Q7CisrCX0KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgdm9pZAorKyAgY3R5cGU8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfY3R5cGUoKQorKyAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIHdpbnRfdCBfX2k7CisrICAgIGZvciAoX19pID0gMDsgX19pIDwgMTI4OyArK19faSkKKysgICAgICB7CisrCWNvbnN0IGludCBfX2MgPSB3Y3RvYihfX2kpOworKwlpZiAoX19jID09IEVPRikKKysJICBicmVhazsKKysJZWxzZQorKwkgIF9NX25hcnJvd1tfX2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKTsKKysgICAgICB9CisrICAgIGlmIChfX2kgPT0gMTI4KQorKyAgICAgIF9NX25hcnJvd19vayA9IHRydWU7CisrICAgIGVsc2UKKysgICAgICBfTV9uYXJyb3dfb2sgPSBmYWxzZTsKKysgICAgZm9yIChzaXplX3QgX19qID0gMDsKKysJIF9faiA8IHNpemVvZihfTV93aWRlbikgLyBzaXplb2Yod2ludF90KTsgKytfX2opCisrICAgICAgX01fd2lkZW5bX19qXSA9IGJ0b3djKF9faik7CisrCisrICAgIGZvciAoc2l6ZV90IF9fayA9IDA7IF9fayA8PSAxMTsgKytfX2spCisrICAgICAgeworKwlfTV9iaXRbX19rXSA9IHN0YXRpY19jYXN0PG1hc2s+KF9JU2JpdChfX2spKTsKKysJX01fd21hc2tbX19rXSA9IF9NX2NvbnZlcnRfdG9fd21hc2soX01fYml0W19fa10pOworKyAgICAgIH0KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICB9CisrI2VuZGlmIC8vICBfR0xJQkNYWF9VU0VfV0NIQVJfVAorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTM1OTRkOQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMTAwIEBACisrLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IGdldHRleHQgc3R1ZmYKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKytleHRlcm4gIkMiIGNoYXIgKl9fZGNnZXR0ZXh0KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCQkJICAgICBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KTsKKysjdW5kZWYgZ2V0dGV4dAorKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgX19kY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorKyNlbHNlCisrI3VuZGVmIGdldHRleHQKKysjZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gU3BlY2lhbGl6YXRpb25zLgorKyAgdGVtcGxhdGU8PgorKyAgICBzdHJpbmcKKysgICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KGdldHRleHQoX19kZmF1bHQuY19zdHIoKSkpOworKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysgICAgICByZXR1cm4gc3RyaW5nKF9fbXNnKTsKKysjZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbHNlCisrICAgICAgY29uc3QgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9fZGZhdWx0LmNfc3RyKCkpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbmRpZgorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHdzdHJpbmcKKysgICAgbWVzc2FnZXM8d2NoYXJfdD46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgd3N0cmluZyYgX19kZmF1bHQpIGNvbnN0CisrICAgIHsKKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV9tZXNzYWdlcyk7CisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZWxzZQorKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZW5kaWYKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjE0MjQwNzgKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK0BAIC0wLDAgKzEsMTE4IEBACisrLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKytleHRlcm4gIkMiIGNoYXIgKl9fdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKKytleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCQkJICBjb25zdCBjaGFyICpkaXJuYW1lKTsKKysjZWxzZQorKyN1bmRlZiBfX3RleHRkb21haW4KKysjdW5kZWYgX19iaW5kdGV4dGRvbWFpbgorKyNkZWZpbmUgX190ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIF9fYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisrI2VuZGlmCisrCisrICAvLyBOb24tdmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoc2l6ZV90IF9fcmVmcykKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfZ2V0X2NfbG9jYWxlKCkpLAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfU19nZXRfY19uYW1lKCkpCisrICAgICB7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCXNpemVfdCBfX3JlZnMpCisrICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYykpLAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfX3MpCisrICAgICB7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKyAgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCisrCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CisrICAgIHsKKysgICAgICBfX2JpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CisrICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7CisrICAgIH0KKysKKysgIC8vIFZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6fm1lc3NhZ2VzKCkKKysgICAgeworKyAgICAgIGlmIChfTV9uYW1lX21lc3NhZ2VzICE9IF9TX2dldF9jX25hbWUoKSkKKysJZGVsZXRlIFtdIF9NX25hbWVfbWVzc2FnZXM7CisrICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZworKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLAorKwkJCSAgICAgIGNvbnN0IGxvY2FsZSYpIGNvbnN0CisrICAgIHsKKysgICAgICAvLyBObyBlcnJvciBjaGVja2luZyBpcyBkb25lLCBhc3N1bWUgdGhlIGNhdGFsb2cgZXhpc3RzIGFuZCBjYW4KKysgICAgICAvLyBiZSB1c2VkLgorKyAgICAgIF9fdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdm9pZAorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRhbG9nKSBjb25zdAorKyAgICB7IH0KKysKKysgICAvLyBtZXNzYWdlc19ieW5hbWUKKysgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlc19ieW5hbWU8X0NoYXJUPjo6bWVzc2FnZXNfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKysgICAgIDogbWVzc2FnZXM8X0NoYXJUPihfX3JlZnMpCisrICAgICB7CisrICAgICAgIGlmICh0aGlzLT5fTV9uYW1lX21lc3NhZ2VzICE9IGxvY2FsZTo6ZmFjZXQ6Ol9TX2dldF9jX25hbWUoKSkKKysJIGRlbGV0ZSBbXSB0aGlzLT5fTV9uYW1lX21lc3NhZ2VzOworKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKysgICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgIHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysKKysgICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKKysJIHsKKysJICAgdGhpcy0+X1NfZGVzdHJveV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrCSAgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsKKysJIH0KKysgICAgIH0KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYWE1MjczMQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsNjkyIEBACisrLy8gc3RkOjptb25leXB1bmN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi42LjMuMiAgbW9uZXlwdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBvcHRpbWl6ZSB0aGlzIGZvciB1Y2xpYmMKKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6CisrICAvLyBzcGFjZSBub25lIHN5bWJvbCBzaWduIHZhbHVlCisrICBtb25leV9iYXNlOjpwYXR0ZXJuCisrICBtb25leV9iYXNlOjpfU19jb25zdHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VkZXMsIGNoYXIgX19zcGFjZSwgY2hhciBfX3Bvc24pCisrICB7CisrICAgIHBhdHRlcm4gX19yZXQ7CisrCisrICAgIC8vIFRoaXMgaW5zYW5lbHkgY29tcGxpY2F0ZWQgcm91dGluZSBhdHRlbXB0cyB0byBjb25zdHJ1Y3QgYSB2YWxpZAorKyAgICAvLyBwYXR0ZXJuIGZvciB1c2Ugd2l0aCBtb255ZXB1bmN0LiBBIGNvdXBsZSBvZiBpbnZhcmlhbnRzOgorKworKyAgICAvLyBpZiAoX19wcmVjZWRlcykgc3ltYm9sIC0+IHZhbHVlCisrICAgIC8vIGVsc2UgdmFsdWUgLT4gc3ltYm9sCisrCisrICAgIC8vIGlmIChfX3NwYWNlKSBzcGFjZQorKyAgICAvLyBlbHNlIG5vbmUKKysKKysgICAgLy8gbm9uZSA9PSBuZXZlciBmaXJzdAorKyAgICAvLyBzcGFjZSBuZXZlciBmaXJzdCBvciBsYXN0CisrCisrICAgIC8vIEFueSBlbGVnYW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGFyZSB3ZWxjb21lLgorKyAgICBzd2l0Y2ggKF9fcG9zbikKKysgICAgICB7CisrICAgICAgY2FzZSAwOgorKyAgICAgIGNhc2UgMToKKysJLy8gMSBUaGUgc2lnbiBwcmVjZWRlcyB0aGUgdmFsdWUgYW5kIHN5bWJvbC4KKysJX19yZXQuZmllbGRbMF0gPSBzaWduOworKwlpZiAoX19zcGFjZSkKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24uCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24gYW5kIGVuZHMgd2l0aCBub25lLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgMjoKKysJLy8gMiBUaGUgc2lnbiBmb2xsb3dzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgorKwlpZiAoX19zcGFjZSkKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIGVpdGhlciBlbmRzIHdpdGggc2lnbi4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkgICAgX19yZXQuZmllbGRbM10gPSBzaWduOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gZW5kcyB3aXRoIHNpZ24gdGhlbiBub25lLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgMzoKKysJLy8gMyBUaGUgc2lnbiBpbW1lZGlhdGVseSBwcmVjZWRlcyB0aGUgc3ltYm9sLgorKwlpZiAoX19wcmVjZWRlcykKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHNpZ247CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkJX19yZXQuZmllbGRbM10gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzaWduOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgNDoKKysJLy8gNCBUaGUgc2lnbiBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBzeW1ib2wuCisrCWlmIChfX3ByZWNlZGVzKQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkgICAgX19yZXQuZmllbGRbMV0gPSBzaWduOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gc2lnbjsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysJOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysJCQkJCQkgICAgIGNvbnN0IGNoYXIqKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCB0cnVlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fVEhPVVNBTkRTX1NFUCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBpZiAoIV9fbnBvc24pCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwKKysJCQkJCQkJX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgLy8gX0ludGwgPT0gdHJ1ZQorKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfRlJBQ19ESUdJVFMsCisrCQkJCQkJICAgICAgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisrCQkJCQkJCV9fbnBvc24pOworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKwkJCQkJCSAgICAgIGNvbnN0IGNoYXIqKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCBmYWxzZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fREVDSU1BTF9QT0lOVCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX1RIT1VTQU5EU19TRVAsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBpZiAoIV9fbnBvc24pCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwKKysJCQkJCQkJX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgLy8gX0ludGwgPT0gZmFsc2UKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJCQkJCQkJX19ucG9zbik7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkJCQkJCQljb25zdCBjaGFyKikKKysjZWxzZQorKwkJCQkJCQljb25zdCBjaGFyKiBfX25hbWUpCisrI2VuZGlmCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIHRydWU+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxzZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKysJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysKKysJICBjb25zdCBjaGFyKiBfX2Nwb3NzaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NuZWdzaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NjdXJyID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOworKworKwkgIHdjaGFyX3QqIF9fd2NzX3BzID0gMDsKKysJICB3Y2hhcl90KiBfX3djc19ucyA9IDA7CisrCSAgY29uc3QgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIHRyeQorKwkgICAgeworKwkgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKysJICAgICAgc2l6ZV90IF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOworKwkgICAgICBpZiAoIV9fbnBvc24pCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7CisrCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICAgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgICAgICAvLyBfSW50bCA9PSB0cnVlLgorKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsKKysJICAgICAgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgd2NoYXJfdCogX193Y3MgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djcywgJl9fY2N1cnIsIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX193Y3M7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICAgIH0KKysJICBjYXRjaCAoLi4uKQorKwkgICAgeworKwkgICAgICBkZWxldGUgX01fZGF0YTsKKysJICAgICAgX01fZGF0YSA9IDA7CisrCSAgICAgIGRlbGV0ZSBfX3djc19wczsKKysJICAgICAgZGVsZXRlIF9fd2NzX25zOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJICAgIH0KKysKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX0ZSQUNfRElHSVRTLAorKwkJCQkJCSAgICAgIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkJCQkJCQlfX25wb3NuKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICB2b2lkCisrICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCQkJCQkJICAgICAgIGNvbnN0IGNoYXIqKQorKyNlbHNlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fbmFtZSkKKysjZW5kaWYKKysgIHsKKysgICAgaWYgKCFfTV9kYXRhKQorKyAgICAgIF9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIGZhbHNlPjsKKysKKysgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxzZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKysgICAgICAgICAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrI2VuZGlmCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrICAgICAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKworKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19DVVJSRU5DWV9TWU1CT0wsIF9fY2xvYyk7CisrCisrCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOworKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKKysJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICB0cnkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKysgICAgICAgICAgICAgIHNpemVfdCBfX2xlbjsKKysgICAgICAgICAgICAgIF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOworKyAgICAgICAgICAgICAgaWYgKF9fbGVuKQorKyAgICAgICAgICAgICAgICB7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NuZWdzaWduKTsKKysJICAgICAgaWYgKCFfX25wb3NuKQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiKCkiOworKwkgICAgICBlbHNlIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX25zID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfbnMsICZfX2NuZWdzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX193Y3NfbnM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgICAgIC8vIF9JbnRsID09IHRydWUuCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICAgIH0KKysgICAgICAgICAgY2F0Y2ggKC4uLikKKysJICAgIHsKKysJICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgICAgICAgICAgICBfTV9kYXRhID0gMDsKKysJICAgICAgZGVsZXRlIF9fd2NzX3BzOworKwkgICAgICBkZWxldGUgX193Y3NfbnM7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJICAgIH0KKysKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ucG9zbik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCisrICAgICAgICAgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsKKysgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZQorKyAgICAgICAgICAmJiB3Y3NjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgTCIoKSIpICE9IDApCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fY3Vycl9zeW1ib2w7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi44ODNlYzFhCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtMCwwICsxLDE2MCBAQAorKy8vIHN0ZDo6bnVtcHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjMuMS4yICBudW1wdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8Y2hhcj47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKysKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19udW1fYmFzZTo6X1Nfb2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19vdXRbX19pXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX291dFtfX2ldOworKworKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKERFQ0lNQUxfUE9JTlQsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChUSE9VU0FORFNfU0VQLAorKwkJCQkJCQlfX2Nsb2MpKTsKKysKKysJICAvLyBDaGVjayBmb3IgTlVMTCwgd2hpY2ggaW1wbGllcyBubyBncm91cGluZy4KKysJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSAnXDAnKQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChHUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJfQorKworKyAgICAgIC8vIE5COiBUaGVyZSBpcyBubyB3YXkgdG8gZXh0YWN0IHRoaXMgaW5mbyBmcm9tIHBvc2l4IGxvY2FsZXMuCisrICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woWUVTU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lID0gInRydWUiOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lX3NpemUgPSA0OworKyAgICAgIC8vIF9NX2ZhbHNlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChOT1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWUgPSAiZmFsc2UiOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBudW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG51bXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8d2NoYXJfdD47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKysKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysKKysJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV0pOworKworKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal0pOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIC8vIE5COiBJbiB0aGUgR05VIG1vZGVsIHdjaGFyX3QgaXMgYWx3YXlzIDMyIGJpdCB3aWRlLgorKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysKKysJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCX0KKysKKysgICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFjdCB0aGlzIGluZm8gZnJvbSBwb3NpeCBsb2NhbGVzLgorKyAgICAgIC8vIF9NX3RydWVuYW1lID0gX19ubF9sYW5naW5mb19sKFlFU1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZSA9IEwidHJ1ZSI7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7CisrICAgICAgLy8gX01fZmFsc2VuYW1lID0gX19ubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZSA9IEwiZmFsc2UiOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBudW1wdW5jdDx3Y2hhcl90Pjo6fm51bXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKyAjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lMDcwN2Q3CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDQwNiBAQAorKy8vIHN0ZDo6dGltZV9nZXQsIHN0ZDo6dGltZV9wdXQgaW1wbGVtZW50YXRpb24sIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEuMiAtIHRpbWVfZ2V0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6CisrICAgIF9NX3B1dChjaGFyKiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3QgY2hhciogX19mb3JtYXQsCisrCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3N0cmZ0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisrCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyNlbHNlCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdHJmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKyAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorKyAgICAgIGlmIChfX2xlbiA9PSAwKQorKwlfX3NbMF0gPSAnXDAnOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPGNoYXI+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOworKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSAiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSAiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2FtID0gIkFNIjsKKysJICBfTV9kYXRhLT5fTV9wbSA9ICJQTSI7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gIiI7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gIlN1bmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9ICJNb25kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSAiVHVlc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9ICJXZWRuZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSAiVGh1cnNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSAiRnJpZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gIlNhdHVyZGF5IjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gIlN1biI7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSAiTW9uIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9ICJUdWUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gIldlZCI7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSAiVGh1IjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9ICJGcmkiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gIlNhdCI7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gIkphbnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSAiRmVicnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSAiTWFyY2giOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSAiQXByaWwiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSAiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gIkp1bmUiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSAiSnVseSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9ICJBdWd1c3QiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSAiU2VwdGVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gIk9jdG9iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSAiTm92ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSAiRGVjZW1iZXIiOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9ICJKYW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gIkZlYiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSAiTWFyIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9ICJBcHIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gIk1heSI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSAiSnVuIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9ICJKdWwiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gIkF1ZyI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSAiU2VwIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9ICJPY3QiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gIk5vdiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSAiRGVjIjsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChUX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfRF9UX0ZNVCwKKysJCQkJCQkJICAgICBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtID0gX19ubF9sYW5naW5mb19sKEFNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wbSA9IF9fbmxfbGFuZ2luZm9fbChQTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKFRfRk1UX0FNUE0sIF9fY2xvYyk7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gX19ubF9sYW5naW5mb19sKERBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBfX25sX2xhbmdpbmZvX2woREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gX19ubF9sYW5naW5mb19sKERBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBfX25sX2xhbmdpbmZvX2woREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gX19ubF9sYW5naW5mb19sKERBWV83LCBfX2Nsb2MpOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gX19ubF9sYW5naW5mb19sKEFCREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNywgX19jbG9jKTsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fbmxfbGFuZ2luZm9fbChNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gX19ubF9sYW5naW5mb19sKE1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBfX25sX2xhbmdpbmZvX2woTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fbmxfbGFuZ2luZm9fbChNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gX19ubF9sYW5naW5mb19sKE1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX25sX2xhbmdpbmZvX2woTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fbmxfbGFuZ2luZm9fbChNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gX19ubF9sYW5naW5mb19sKE1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEyLCBfX2Nsb2MpOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMiwgX19jbG9jKTsKKysJfQorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46OgorKyAgICBfTV9wdXQod2NoYXJfdCogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IHdjaGFyX3QqIF9fZm9ybWF0LAorKwkgICBjb25zdCB0bSogX190bSkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKysJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrI2Vsc2UKKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHdjc2Z0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisrICAgICAgaWYgKF9fbGVuID09IDApCisrCV9fc1swXSA9IEwnXDAnOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPHdjaGFyX3Q+OworKworKyN3YXJuaW5nIHdpZGUgdGltZSBzdHVmZgorKy8vICAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOworKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gTCIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gTCIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2FtID0gTCJBTSI7CisrCSAgX01fZGF0YS0+X01fcG0gPSBMIlBNIjsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBMIiI7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gTCJTdW5kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBMIk1vbmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IEwiVHVlc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9IEwiV2VkbmVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gTCJUaHVyc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IEwiRnJpZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gTCJTYXR1cmRheSI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IEwiU3VuIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IEwiTW9uIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IEwiVHVlIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IEwiV2VkIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IEwiVGh1IjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IEwiRnJpIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IEwiU2F0IjsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBMIkphbnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBMIkZlYnJ1YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gTCJNYXJjaCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IEwiQXByaWwiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBMIk1heSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IEwiSnVuZSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IEwiSnVseSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IEwiQXVndXN0IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gTCJTZXB0ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBMIk9jdG9iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBMIk5vdmVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gTCJEZWNlbWJlciI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gTCJKYW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gTCJGZWIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gTCJNYXIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gTCJBcHIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gTCJNYXkiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gTCJKdW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gTCJKdWwiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gTCJBdWciOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gTCJTZXAiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gTCJPY3QiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gTCJOb3YiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gTCJEZWMiOworKwl9CisrI2lmIDAKKysgICAgICBlbHNlCisrCXsKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOworKworKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90ICpfX3c7IH0gX191OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9EX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dUX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1BNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wbSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1RfRk1UX0FNUE0sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX191Ll9fdzsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gX191Ll9fdzsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX191Ll9fdzsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEyLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX3UuX193OworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEyLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX191Ll9fdzsKKysJfQorKyNlbmRpZiAvLyAwCisrICAgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYmE4ZTg1OAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitAQCAtMCwwICsxLDY4IEBACisrLy8gc3RkOjp0aW1lX2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQgZnVuY3Rpb25zCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcykKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY2FjaGVfdHlwZSogX19jYWNoZSwgc2l6ZV90IF9fcmVmcykKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKF9fY2FjaGUpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCSAgICAgc2l6ZV90IF9fcmVmcykKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9fcykKKysgICAgeworKyAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX190bXA7CisrICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+Ojp+X190aW1lcHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX25hbWVfdGltZXB1bmN0ICE9IF9TX2dldF9jX25hbWUoKSkKKysJZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysgICAgfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitpbmRleCBmNDBkZGNmLi5jNTdhNzUxIDEwMDc1NQorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorQEAgLTE1ODIyLDYgKzE1ODIyLDkgQEAgZmkKKyAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCisgICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgorICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgorKyAgICAgICotdWNsaWJjKikKKysgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCisrICAgICAgICA7OworICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQorIAllbmFibGVfY2xvY2FsZV9mbGFnPWdudQorIAk7OworQEAgLTE2MDc5LDYgKzE2MDgyLDc4IEBAICRhc19lY2hvICJuZXdsaWIiID4mNjsgfQorICAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy90aW1lX21lbWJlcnMuY2MKKyAgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgICAgICAgOzsKKysgICAgdWNsaWJjKQorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1Y2xpYmMiID4mNQorKyRhc19lY2hvICJ1Y2xpYmMiID4mNjsgfQorKworKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKKysgICAgICAjIGxhbmd1YWdlcy4KKysgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAorKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKKysKKysgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgorKyAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXNnZm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgbXNnZm10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jaGVja19tc2dmbXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9IiRjaGVja19tc2dmbXQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9InllcyIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKysgIHRlc3QgLXogIiRhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCIgJiYgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9Im5vIgorK2ZpCisrZmkKKytjaGVja19tc2dmbXQ9JGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10CisraWYgdGVzdCAtbiAiJGNoZWNrX21zZ2ZtdCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY2hlY2tfbXNnZm10IiA+JjUKKyskYXNfZWNobyAiJGNoZWNrX21zZ2ZtdCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrICAgICAgaWYgdGVzdCB4IiRjaGVja19tc2dmbXQiID0geCJ5ZXMiICYmIHRlc3QgeCIkZW5hYmxlX25scyIgPSB4InllcyI7IHRoZW4KKysgICAgICAgIFVTRV9OTFM9eWVzCisrICAgICAgZmkKKysgICAgICAjIEV4cG9ydCB0aGUgYnVpbGQgb2JqZWN0cy4KKysgICAgICBmb3IgbGluZyBpbiAkQUxMX0xJTkdVQVM7IGRvIFwKKysgICAgICAgIGdsaWJjeHhfTU9GSUxFUz0iJGdsaWJjeHhfTU9GSUxFUyAkbGluZy5tbyI7IFwKKysgICAgICAgIGdsaWJjeHhfUE9GSUxFUz0iJGdsaWJjeHhfUE9GSUxFUyAkbGluZy5wbyI7IFwKKysgICAgICBkb25lCisrCisrCisrCisrICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysgICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisrICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisrICAgICAgQ0NUWVBFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKyAgICAgIDs7CisgICBlc2FjCisgCisgICAjIFRoaXMgaXMgd2hlcmUgdGhlIHRlc3RzdWl0ZSBsb29rcyBmb3IgbG9jYWxlIGNhdGFsb2dzLCB1c2luZyB0aGUKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaCBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCitpbmRleCA1ODBkNzI1Li4zZmU2MWI4IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCitAQCAtMTAxLDcgKzEwMSw5IEBAIHVzaW5nIHN0ZDo6d21lbWNtcDsKKyB1c2luZyBzdGQ6OndtZW1jcHk7CisgdXNpbmcgc3RkOjp3bWVtbW92ZTsKKyB1c2luZyBzdGQ6OndtZW1zZXQ7CisrI2lmIF9HTElCQ1hYX0hBVkVfV0NTRlRJTUUKKyB1c2luZyBzdGQ6Ondjc2Z0aW1lOworKyNlbmRpZgorIAorICNpZiBfR0xJQkNYWF9VU0VfQzk5CisgdXNpbmcgc3RkOjp3Y3N0b2xkOworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhciBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgoraW5kZXggMGU2YjFmYy4uNDA1YWVlMiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgorKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCitAQCAtMTc1LDcgKzE3NSw5IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgICB1c2luZyA6Ondjc2NvbGw7CisgICB1c2luZyA6Ondjc2NweTsKKyAgIHVzaW5nIDo6d2NzY3NwbjsKKysjaWYgX0dMSUJDWFhfSEFWRV9XQ1NGVElNRQorICAgdXNpbmcgOjp3Y3NmdGltZTsKKysjZW5kaWYKKyAgIHVzaW5nIDo6d2NzbGVuOworICAgdXNpbmcgOjp3Y3NuY2F0OworICAgdXNpbmcgOjp3Y3NuY21wOworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNiYmZlNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaApAQCAtMCwwICsxLDI1NyBAQAorRnJvbSA2YTNlODUwNmExMmMxMjcyOGQ4YjI5OTAxZGVmZDczOGJlNDM3NTdmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDI6MzYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNS8zNV0gdWNsaWJjLWxvY2FsZS1ub19feAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCAgICAgIHwgICA0NSArKysrKysrKysrKysrKysrKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyAgICAgIHwgICAxNCAtLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8ICAgIDEgKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgICAgICAgIHwgICAgNyAtLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyB8ICAgIDcgLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgICAgICAgfCAgICA3ICstLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggICAgICAgIHwgICAxOCArKystLS0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgICAgNCAtLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgICAgICAgIHwgICAgMyAtLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgICAgMyAtLQorIDEwIGZpbGVzIGNoYW5nZWQsIDU1IGluc2VydGlvbnMoKyksIDU0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitpbmRleCAyYWUzZTRhLi5lNzRmZGRmIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK0BAIC02MCw0ICs2MCw0OSBAQCBleHRlcm4gIkMiIF9fdHlwZW9mKHdjc3hmcm1fbCkgX193Y3N4ZnJtX2w7CisgZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3R5cGVfbCkgX193Y3R5cGVfbDsKKyAjZW5kaWYKKyAKKysjIGRlZmluZSBfX25sX2xhbmdpbmZvX2wgbmxfbGFuZ2luZm9fbAorKyMgZGVmaW5lIF9fc3RyY29sbF9sIHN0cmNvbGxfbAorKyMgZGVmaW5lIF9fc3RyZnRpbWVfbCBzdHJmdGltZV9sCisrIyBkZWZpbmUgX19zdHJ0b2RfbCBzdHJ0b2RfbAorKyMgZGVmaW5lIF9fc3RydG9mX2wgc3RydG9mX2wKKysjIGRlZmluZSBfX3N0cnRvbGRfbCBzdHJ0b2xkX2wKKysjIGRlZmluZSBfX3N0cnhmcm1fbCBzdHJ4ZnJtX2wKKysjIGRlZmluZSBfX25ld2xvY2FsZSBuZXdsb2NhbGUKKysjIGRlZmluZSBfX2ZyZWVsb2NhbGUgZnJlZWxvY2FsZQorKyMgZGVmaW5lIF9fZHVwbG9jYWxlIGR1cGxvY2FsZQorKyMgZGVmaW5lIF9fdXNlbG9jYWxlIHVzZWxvY2FsZQorKworKyMgaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysjICBkZWZpbmUgX19pc3djdHlwZV9sIGlzd2N0eXBlX2wKKysjICBkZWZpbmUgX190b3dsb3dlcl9sIHRvd2xvd2VyX2wKKysjICBkZWZpbmUgX190b3d1cHBlcl9sIHRvd3VwcGVyX2wKKysjICBkZWZpbmUgX193Y3Njb2xsX2wgd2NzY29sbF9sCisrIyAgZGVmaW5lIF9fd2NzZnRpbWVfbCB3Y3NmdGltZV9sCisrIyAgZGVmaW5lIF9fd2NzeGZybV9sIHdjc3hmcm1fbAorKyMgIGRlZmluZSBfX3djdHlwZV9sIHdjdHlwZV9sCisrIyBlbmRpZgorKworKyNlbHNlCisrIyBkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjIGRlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorKyMgZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCisrIyBkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCisrIyB3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CisrIyBkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKysjIGRlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCisrIyBkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorKy8vIyBkZWZpbmUgX191c2Vsb2NhbGUgPworKy8vCisrIyBpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyMgIGRlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCisrIyAgZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgICB0b3dsb3dlcigoQykpCisrIyAgZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgICB0b3d1cHBlcigoQykpCisrIyAgZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCisrLy8jICBkZWZpbmUgX193Y3NmdGltZV9sKFMsIE0sIEYsIFQsIEwpICB3Y3NmdGltZSgoUyksIChNKSwgKEYpLCAoVCkpCisrIyAgZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKysjICBkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgIHdjdHlwZSgoUykpCisrIyBlbmRpZgorKworICNlbmRpZiAvLyBHTElCQyAyLjMgYW5kIGxhdGVyCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitpbmRleCA1MDgxZGMxLi4yMTQzMGQwIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK0BAIC0zOSwyMCArMzksNiBAQAorICNpbmNsdWRlIDxsYW5naW5mby5oPgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19zdHJ0b2xfbChTLCBFLCBCLCBMKSAgICAgIHN0cnRvbCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b3VsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvdWwoKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG9sbF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b2xsKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvdWxsX2woUywgRSwgQiwgTCkgICAgc3RydG91bGwoKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG9mX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2YoKFMpLCAoRSkpCistI2RlZmluZSBfX3N0cnRvZF9sKFMsIEUsIEwpICAgICAgICAgc3RydG9kKChTKSwgKEUpKQorLSNkZWZpbmUgX19zdHJ0b2xkX2woUywgRSwgTCkgICAgICAgIHN0cnRvbGQoKFMpLCAoRSkpCistI3dhcm5pbmcgc2hvdWxkIGR1bW15IF9fbmV3bG9jYWxlIGNoZWNrIGZvciBDfFBPU0lYID8KKy0jZGVmaW5lIF9fbmV3bG9jYWxlKGEsIGIsIGMpICAgICAgICBOVUxMCistI2RlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCistI2RlZmluZSBfX2R1cGxvY2FsZShhKSAgICAgICAgICAgICAgX19jX2xvY2FsZSgpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIHRlbXBsYXRlPD4KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitpbmRleCBkYTA3YzFmLi40YmNhNWYxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitAQCAtNjgsNiArNjgsNyBAQCBuYW1lc3BhY2UgX19nbnVfY3h4CisgeworICAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworIH0KKysjZGVmaW5lIF9fdXNlbG9jYWxlIHVzZWxvY2FsZQorICNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworaW5kZXggYzI2NjRhNy4uZWM1YzMyOSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK0BAIC0zNiwxMyArMzYsNiBAQAorICNpbmNsdWRlIDxsb2NhbGU+CisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorLSNkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorLSNkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKy0jZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gVGhlc2UgYXJlIGJhc2ljYWxseSBleHRlbnNpb25zIHRvIGNoYXJfdHJhaXRzLCBhbmQgcGVyaGFwcyBzaG91bGQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitpbmRleCA3Mjk0ZTNhLi43YjEyODYxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitAQCAtMzgsMTMgKzM4LDYgQEAKKyAjdW5kZWYgX0xJQkMKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgIHdjdHlwZSgoUykpCistI2RlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICB0b3d1cHBlcigoQykpCistI2RlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICB0b3dsb3dlcigoQykpCistI2RlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICBpc3djdHlwZSgoQyksIChNKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworaW5kZXggMTM1OTRkOS4uZDc2OTNiNCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworQEAgLTM5LDEzICszOSwxMCBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCBnZXR0ZXh0IHN0dWZmCisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCistZXh0ZXJuICJDIiBjaGFyICpfX2RjZ2V0dGV4dChjb25zdCBjaGFyICpkb21haW5uYW1lLAorLQkJCSAgICAgY29uc3QgY2hhciAqbXNnaWQsIGludCBjYXRlZ29yeSk7CisgI3VuZGVmIGdldHRleHQKKy0jZGVmaW5lIGdldHRleHQobXNnaWQpIF9fZGNnZXR0ZXh0KE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKysjZGVmaW5lIGdldHRleHQobXNnaWQpIGRjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisgI2Vsc2UKKy0jdW5kZWYgZ2V0dGV4dAorICNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQorICNlbmRpZgorIAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitpbmRleCAxNDI0MDc4Li5kODlkYTMzIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorQEAgLTM2LDE1ICszNiwxMSBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLWV4dGVybiAiQyIgY2hhciAqX190ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOworLWV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorLQkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUpOworLSNlbHNlCistI3VuZGVmIF9fdGV4dGRvbWFpbgorLSN1bmRlZiBfX2JpbmR0ZXh0ZG9tYWluCistI2RlZmluZSBfX3RleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorLSNkZWZpbmUgX19iaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI3VuZGVmIHRleHRkb21haW4KKysjdW5kZWYgYmluZHRleHRkb21haW4KKysjZGVmaW5lIHRleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisgI2VuZGlmCisgCisgICAvLyBOb24tdmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorQEAgLTcwLDcgKzY2LDcgQEAgZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCisgCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CisgICAgIHsKKy0gICAgICBfX2JpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CisrICAgICAgYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKyAgICAgICByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsKKyAgICAgfQorIAorQEAgLTkwLDcgKzg2LDcgQEAgZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisgICAgIHsKKyAgICAgICAvLyBObyBlcnJvciBjaGVja2luZyBpcyBkb25lLCBhc3N1bWUgdGhlIGNhdGFsb2cgZXhpc3RzIGFuZCBjYW4KKyAgICAgICAvLyBiZSB1c2VkLgorLSAgICAgIF9fdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisrICAgICAgdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKyAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitpbmRleCBhYTUyNzMxLi4yZTZmODBhIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitAQCAtNDMsMTAgKzQzLDYgQEAKKyAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKyAjZW5kaWYKKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK2luZGV4IDg4M2VjMWEuLjJjNzA2NDIgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtNDEsOSArNDEsNiBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKKyB7CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK2luZGV4IGUwNzA3ZDcuLmQ4NDhlZDUgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitAQCAtNDAsOSArNDAsNiBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKKyB7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MDY4NTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoCkBAIC0wLDAgKzEsNjggQEAKK0Zyb20gMjI1NTExYTNhZWIxOTNhOTE2YjM5OTlmMGI2NDBhMzkyY2FhNjdjZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ1OjU3ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDYvMzVdIHVjbGliYy1sb2NhbGUtd2NoYXJfZml4CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgfCAgICA0ICsrLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICB8ICAgMTMgKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK2luZGV4IDJlNmY4MGEuLjMxZWJiOWYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC00MDEsNyArNDAxLDcgQEAgbmFtZXNwYWNlIHN0ZAorICMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKy0jIGVsc2UKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisgIyBlbmRpZgorQEAgLTU1Niw3ICs1NTYsNyBAQCBuYW1lc3BhY2Ugc3RkCisgIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworLSMgZWxzZQorKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKyAjIGVuZGlmCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK2luZGV4IDJjNzA2NDIuLmQ1Yzg5NjEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtMTI3LDEyICsxMjcsMjUgQEAgbmFtZXNwYWNlIHN0ZAorIAl7CisgCSAgLy8gTmFtZWQgbG9jYWxlLgorIAkgIC8vIE5COiBJbiB0aGUgR05VIG1vZGVsIHdjaGFyX3QgaXMgYWx3YXlzIDMyIGJpdCB3aWRlLgorKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBudW1lcmljCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorIAkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisgCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworIAorIAkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKyAKKyAJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKKyAJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NTExMjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoCkBAIC0wLDAgKzEsNTQyIEBACitGcm9tIDZmZmU3YzQ2ZjUyZDI3ODY0YzNkZjM2NjNlMTZlYzlkZGVlNzFlOGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0Njo1OCArMDQwMAorU3ViamVjdDogW1BBVENIIDA3LzM1XSB1Y2xpYmMtbG9jYWxlLXVwZGF0ZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCAgICAgIHwgICAgMyArCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCAgIDc0ICsrKysrKysrKy0tLS0tLS0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCAgIDQyICsrKysrKy0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCAgIDUxICsrKysrKysrKystLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAgIDEyICsrLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8ICAgMzQgKysrKystLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgICAgICAgfCAgICA1ICsrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyAgfCAgIDE4ICsrKy0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oICAgfCAgIDE3ICsrKy0tCisgOSBmaWxlcyBjaGFuZ2VkLCAxNTggaW5zZXJ0aW9ucygrKSwgOTggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK2luZGV4IGU3NGZkZGYuLjk3MWE2YjQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorQEAgLTMxLDYgKzMxLDkgQEAKKyAKKyAjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyAjaW5jbHVkZSA8Y2xvY2FsZT4KKysjaW5jbHVkZSA8Y3N0ZGxpYj4KKysjaW5jbHVkZSA8Y3N0cmluZz4KKysjaW5jbHVkZSA8Y3N0ZGRlZj4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBjbGVhbiB0aGlzIHVwCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitpbmRleCAyMTQzMGQwLi4xYjlkOGUxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK0BAIC0zOSwyMyArMzksMjAgQEAKKyAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy1uYW1lc3BhY2Ugc3RkCisteworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisrCisgICB0ZW1wbGF0ZTw+CisgICAgIHZvaWQKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBmbG9hdCYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisgCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICAgIHsKKy0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKy0JeworLQkgIGNoYXIqIF9fc2FuaXR5OworLQkgIGVycm5vID0gMDsKKy0JICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fZjsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwlfX3YgPSBfX2Y7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdGVtcGxhdGU8PgorQEAgLTYzLDE2ICs2MCwxMyBAQCBuYW1lc3BhY2Ugc3RkCisgICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fZDsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19kOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPD4KK0BAIC04MCwxNiArNzQsMTMgQEAgbmFtZXNwYWNlIHN0ZAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGxvbmcgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKy0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCistCSAgICBfX3YgPSBfX2xkOworLQkgIGVsc2UKKy0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworLQl9CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19sZDsKKysgICAgICBlbHNlCisrCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICB9CisgCisgICB2b2lkCitAQCAtMTEwLDE3ICsxMDEsMTggQEAgbmFtZXNwYWNlIHN0ZAorICAgdm9pZAorICAgbG9jYWxlOjpmYWNldDo6X1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICB7CistICAgIGlmIChfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCisrICAgIGlmIChfX2Nsb2MgJiYgX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorICAgICAgIF9fZnJlZWxvY2FsZShfX2Nsb2MpOworICAgfQorIAorICAgX19jX2xvY2FsZQorICAgbG9jYWxlOjpmYWNldDo6X1NfY2xvbmVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorICAgeyByZXR1cm4gX19kdXBsb2NhbGUoX19jbG9jKTsgfQorLX0gLy8gbmFtZXNwYWNlIHN0ZAorIAorLW5hbWVzcGFjZSBfX2dudV9jeHgKKy17CisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorKworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisrCisgICBjb25zdCBjaGFyKiBjb25zdCBjYXRlZ29yeV9uYW1lc1s2ICsgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVNdID0KKyAgICAgeworICAgICAgICJMQ19DVFlQRSIsCitAQCAtMTM4LDkgKzEzMCwxMSBAQCBuYW1lc3BhY2UgX19nbnVfY3h4CisgICAgICAgIkxDX0lERU5USUZJQ0FUSU9OIgorICNlbmRpZgorICAgICB9OworLX0KKyAKKy1uYW1lc3BhY2Ugc3RkCisteworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKysKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorKworICAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7CistfSAgLy8gbmFtZXNwYWNlIHN0ZAorKworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitpbmRleCA0YmNhNWYxLi42NGE2ZDQ2IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitAQCAtMzksMjEgKzM5LDIzIEBACisgI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorIAorICNpbmNsdWRlIDxjc3RyaW5nPiAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c3RybGVuCistI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzbnByaW50ZiBvciBzdGQ6OnNwcmludGYKKysjaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnZzbnByaW50ZiBvciBzdGQ6OnZzcHJpbnRmCisgI2luY2x1ZGUgPGNsb2NhbGU+CisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CQkvLyBGb3IgY29kZWN2dAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCB0aGlzCisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyNpZmRlZiBfR0xJQkNYWF9VU0VfSUNPTlYKKyAjaW5jbHVkZSA8aWNvbnYuaD4JCS8vIEZvciBjb2RlY3Z0IHVzaW5nIGljb252LCBpY29udl90CisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCistI2luY2x1ZGUgPGxpYmludGwuaD4gCQkvLyBGb3IgbWVzc2FnZXMKKysjaWZkZWYgSEFWRV9MSUJJTlRMX0gKKysjaW5jbHVkZSA8bGliaW50bC5oPgkJLy8gRm9yIG1lc3NhZ2VzCisgI2VuZGlmCisrI2luY2x1ZGUgPGNzdGRhcmc+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgd2hhdCBpcyBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgZm9yCisrLy8gcHNtOiB1c2VkIGluIG9zL2dudS1saW51eC9jdHlwZV9ub25pbmxpbmUuaAorICNlbmRpZgorICNkZWZpbmUgX0dMSUJDWFhfQ19MT0NBTEVfR05VIDEKKyAKK0BAIC03OCwyMyArODAsMjUgQEAgbmFtZXNwYWNlIHN0ZAorICNlbHNlCisgICB0eXBlZGVmIGludCoJCQlfX2NfbG9jYWxlOworICNlbmRpZgorLQorLSAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgX1R2IHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgorLSAgLy8gc3RyaW5nLiAgSWYgc25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworLSAgLy8gdGhlIHVuc2FmZSBzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKysgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIGRvdWJsZSB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKysgIC8vIHN0cmluZy4gIElmIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCisrICAvLyB0aGUgdW5zYWZlIHZzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKyAgIC8vIGJlIGF2b2lkZWQuCistICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CistICAgIGludAorLSAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LAorLQkJICAgICBjb25zdCBpbnQgX19zaXplIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSksCistCQkgICAgIGNvbnN0IGNoYXIqIF9fZm10LAorLSNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworLQkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX3ByZWMpCisrICAgIGlubGluZSBpbnQKKysgICAgX19jb252ZXJ0X2Zyb21fdihjb25zdCBfX2NfbG9jYWxlJgorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysJX19jbG9jIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKKysjZW5kaWYKKysJCSAgICAgLAorKwkJICAgICBjaGFyKiBfX291dCwKKysJCSAgICAgY29uc3QgaW50IF9fc2l6ZSwKKysJCSAgICAgY29uc3QgY2hhciogX19mbXQsIC4uLikKKyAgICAgeworKyAgICAgIHZhX2xpc3QgX19hcmdzOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKworICAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fY2xvYyk7CisgI2Vsc2UKKy0JCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMpCistICAgIHsKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICAgICAgIGNoYXIqIF9fb2xkID0gc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKyAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fb2xkKSArIDFdOworQEAgLTEwMyw3ICsxMDcsOSBAQCBuYW1lc3BhY2Ugc3RkCisgIyBlbmRpZgorICNlbmRpZgorIAorLSAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKKysgICAgICB2YV9zdGFydChfX2FyZ3MsIF9fZm10KTsKKysgICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnZzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19hcmdzKTsKKysgICAgICB2YV9lbmQoX19hcmdzKTsKKyAKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKyAgICAgICBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fb2xkKTsKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitpbmRleCA3YjEyODYxLi4xM2UwMTFkIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitAQCAtMzMsMTYgKzMzLDIwIEBACisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyAKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgI2RlZmluZSBfTElCQworICNpbmNsdWRlIDxsb2NhbGU+CisgI3VuZGVmIF9MSUJDCisrI2Vsc2UKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNlbmRpZgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLW5hbWVzcGFjZSBzdGQKKy17CisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKysKKyAgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAorICAgLy8gdmFyaW91cyAvY29uZmlnL29zLyogZmlsZXMuCistICB0ZW1wbGF0ZTw+CisgICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKyAgICAgOiBjdHlwZTxjaGFyPigwLCBmYWxzZSwgX19yZWZzKQorICAgICB7CitAQCAtNTcsNiArNjEsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2VuZGlmCisgCX0KKyAgICAgfQorKyAgICBjdHlwZV9ieW5hbWU8Y2hhcj46On5jdHlwZV9ieW5hbWUoKQorKyAgICB7IH0KKyAKKyAjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgIGN0eXBlPHdjaGFyX3Q+OjpfX3dtYXNrX3R5cGUKK0BAIC0xMzgsMTcgKzE0NCwzMyBAQCBuYW1lc3BhY2Ugc3RkCisgICBjdHlwZTx3Y2hhcl90Pjo6CisgICBkb19pcyhtYXNrIF9fbSwgd2NoYXJfdCBfX2MpIGNvbnN0CisgICB7CistICAgIC8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCistICAgIC8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKyAgICAvLyBUaGUgY2FzZSBvZiBfX20gPT0gY3R5cGVfYmFzZTo6c3BhY2UgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCwKKysgICAgLy8gZHVlIHRvIGl0cyB1c2UgaW4gbWFueSBpc3RyZWFtIGZ1bmN0aW9ucy4gIFRoZXJlZm9yZSB3ZSBkZWFsIHdpdGgKKysgICAgLy8gaXQgZmlyc3QsIGV4cGxvaXRpbmcgdGhlIGtub3dsZWRnZSB0aGF0IG9uIEdOVSBzeXN0ZW1zIF9NX2JpdFs1XQorKyAgICAvLyBpcyB0aGUgbWFzayBjb3JyZXNwb25kaW5nIHRvIGN0eXBlX2Jhc2U6OnNwYWNlLiAgTkI6IGFuIGVuY29kaW5nCisrICAgIC8vIGNoYW5nZSB3b3VsZCBub3QgYWZmZWN0IGNvcnJlY3RuZXNzIQorKworICAgICBib29sIF9fcmV0ID0gZmFsc2U7CistICAgIGNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CistICAgIGZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKy0gICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQorLQkgICYmIF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorLQl7CistCSAgX19yZXQgPSB0cnVlOworLQkgIGJyZWFrOworLQl9CisrICAgIGlmIChfX20gPT0gX01fYml0WzVdKQorKyAgICAgIF9fcmV0ID0gX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbNV0sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgZWxzZQorKyAgICAgIHsKKysJLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysJLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CisrCWZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysJICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXSkKKysJICAgIHsKKysJICAgICAgaWYgKF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwkJeworKwkJICBfX3JldCA9IHRydWU7CisrCQkgIGJyZWFrOworKwkJfQorKwkgICAgICBlbHNlIGlmIChfX20gPT0gX01fYml0W19fYml0Y3VyXSkKKysJCWJyZWFrOworKwkgICAgfQorKyAgICAgIH0KKysKKyAgICAgcmV0dXJuIF9fcmV0OworICAgfQorIAorQEAgLTI5MCw0ICszMTIsNSBAQCBuYW1lc3BhY2Ugc3RkCisgI2VuZGlmCisgICB9CisgI2VuZGlmIC8vICBfR0xJQkNYWF9VU0VfV0NIQVJfVAorLX0KKysKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK2luZGV4IGQ4OWRhMzMuLjA2NzY1N2EgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitAQCAtNTMsMTIgKzUzLDE2IEBACisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorIAkJCQlzaXplX3QgX19yZWZzKQorLSAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpKSwKKy0gICAgIF9NX25hbWVfbWVzc2FnZXMoX19zKQorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhOVUxMKSwKKysgICAgIF9NX25hbWVfbWVzc2FnZXMoTlVMTCkKKyAgICAgIHsKKy0gICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CistICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdGQ6OnN0cmxlbihfX3MpICsgMTsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07CisrICAgICAgIHN0ZDo6bWVtY3B5KF9fdG1wLCBfX3MsIF9fbGVuKTsKKyAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKworKyAgICAgICAvLyBMYXN0IHRvIGF2b2lkIGxlYWtpbmcgbWVtb3J5IGlmIG5ldyB0aHJvd3MuCisrICAgICAgIF9NX2NfbG9jYWxlX21lc3NhZ2VzID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKKyAgICAgIH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitpbmRleCAzMWViYjlmLi43Njc5YjljIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitAQCAtMzMsOSArMzMsMTQgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitAQCAtMjA2LDcgKzIxMSw3IEBAIG5hbWVzcGFjZSBzdGQKKyAJICB9CisgCWJyZWFrOworICAgICAgIGRlZmF1bHQ6CistCTsKKysJX19yZXQgPSBwYXR0ZXJuKCk7CisgICAgICAgfQorICAgICByZXR1cm4gX19yZXQ7CisgICB9CitAQCAtMzkwLDcgKzM5NSw5IEBAIG5hbWVzcGFjZSBzdGQKKyAJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKyAjZWxzZQorIAkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorLQkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgIAkgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworIAkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisgI2VuZGlmCisgCitAQCAtNDc3LDggKzQ4NCw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgICAgICBmcmVlKF9fb2xkKTsKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworIAkgICAgfQorQEAgLTQ5OCw4ICs1MDUsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgZnJlZShfX29sZCk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAJfQorICAgICB9CitAQCAtNTQ1LDggKzU1MiwxMSBAQCBuYW1lc3BhY2Ugc3RkCisgCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisgI2Vsc2UKKyAJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKy0JICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CistCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKysgICAgICAgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisrICAgICAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9fbGxlbik7CisrICAgICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisgI2VuZGlmCisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitAQCAtNjMzLDggKzY0Myw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgICAgICBmcmVlKF9fb2xkKTsKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgICAgICAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAJICAgIH0KK0BAIC02NTMsOCArNjYzLDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgIGZyZWUoX19vbGQpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgCX0KKyAgICAgfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitpbmRleCBkNWM4OTYxLi44YWU4OTY5IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworQEAgLTMzLDkgKzMzLDE0IEBACisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyAKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgI2RlZmluZSBfTElCQworICNpbmNsdWRlIDxsb2NhbGU+CisgI3VuZGVmIF9MSUJDCisrI2Vsc2UKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNlbmRpZgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitpbmRleCBkODQ4ZWQ1Li5mMjRkNTNlIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworQEAgLTUzLDExICs1MywxNCBAQCBuYW1lc3BhY2Ugc3RkCisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX19zdHJmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorIAkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKyAjZWxzZQorLSAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisrICAgICAgbWVtY3B5KF9fc2F2LCBfX29sZCwgX19sbGVuKTsKKyAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RyZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworLSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0gICAgICBmcmVlKF9fb2xkKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorICAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorICAgICAgIGlmIChfX2xlbiA9PSAwKQorQEAgLTIwNywxMSArMjEwLDE0IEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisgCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworICNlbHNlCistICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKysgICAgICBtZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xsZW4pOworICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSB3Y3NmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CistICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLSAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisgICAgICAgaWYgKF9fbGVuID09IDApCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitpbmRleCBiYThlODU4Li4xNjY1ZGRlIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK0BAIC01MCwxMiArNTAsMjEgQEAKKyAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKyAJCQkJICAgICBzaXplX3QgX19yZWZzKQorICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKy0gICAgX01fbmFtZV90aW1lcHVuY3QoX19zKQorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChOVUxMKQorICAgICB7CistICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CistICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RkOjpzdHJsZW4oX19zKSArIDE7CisrICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07CisrICAgICAgc3RkOjptZW1jcHkoX190bXAsIF9fcywgX19sZW4pOworICAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX190bXA7CistICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsKKysKKysgICAgICB0cnkKKysJeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOyB9CisrICAgICAgY2F0Y2goLi4uKQorKwl7CisrCSAgZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OworKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwl9CisrCisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA4LW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODIzODA5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSA5ZjIxNTg0NTE5ODFjZjBhODBjZmFiZGM3OWFlMzFiYjY5NzZhODAxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDg6MTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwOC8zNV0gbWlzc2luZy1leGVjaW5mb19oCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgYm9laG0tZ2MvaW5jbHVkZS9nYy5oIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYm9laG0tZ2MvaW5jbHVkZS9nYy5oIGIvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCitpbmRleCBjNTFlMDE3Li5hN2JhOGRjIDEwMDY0NAorLS0tIGEvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCisrKysgYi9ib2VobS1nYy9pbmNsdWRlL2djLmgKK0BAIC01MDMsNyArNTAzLDcgQEAgR0NfQVBJIEdDX1BUUiBHQ19tYWxsb2NfYXRvbWljX2lnbm9yZV9vZmZfcGFnZSBHQ19QUk9UTygoc2l6ZV90IGxiKSk7CisgI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykKKyAjIGluY2x1ZGUgPGZlYXR1cmVzLmg+CisgIyBpZiAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEgfHwgX19HTElCQ19fID4gMikgXAorLSAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pCisrICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykgJiYgIWRlZmluZWQoX19VQ0xJQkNfXykKKyAjICAgaWZuZGVmIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgICBkZWZpbmUgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQorICMgICBlbmRpZgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDktYzk5LXNucHJpbnRmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNjg3NzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIGUzOTNlMDc2ZjFhYjgyZDI1ZTFhYTA0ZDZlZGVhMjdiNDFkM2ViMDYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0OTowMyArMDQwMAorU3ViamVjdDogW1BBVENIIDA5LzM1XSBjOTktc25wcmludGYKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8gYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KK2luZGV4IGU4NWJkODMuLjZhZjgzOWEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbworQEAgLTEzOSw3ICsxMzksNyBAQCBuYW1lc3BhY2Ugc3RkCisgICB1c2luZyA6OnZzcHJpbnRmOworIH0gLy8gbmFtZXNwYWNlIHN0ZAorIAorLSNpZiBfR0xJQkNYWF9VU0VfQzk5CisrI2lmIF9HTElCQ1hYX1VTRV9DOTkgfHwgZGVmaW5lZChfX1VDTElCQ19fKQorIAorICN1bmRlZiBzbnByaW50ZgorICN1bmRlZiB2ZnNjYW5mCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxMC1jOTktY29tcGxleC11Z2x5LWhhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYyODU3MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gNzNmNjlkODA2ZTJjOTU2MWE1NDk5NTIyMzQzMWExMDc2Y2ZkNjE2NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ5OjU3ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTAvMzVdIGM5OS1jb21wbGV4LXVnbHktaGFjaworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZSB8ICAgIDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK2luZGV4IGM1N2E3NTEuLmExMzMzZTIgMTAwNzU1CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitAQCAtMTg3MzQsNiArMTg3MzQsOSBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgSVNPIEM5OSBzdXBwb3J0IHRvIFRSMSBpbiA8Y29tcGxleC5oPi4uLiAiID4mNjsgfQorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpbmNsdWRlIDxjb21wbGV4Lmg+CisrI2lmZGVmIF9fVUNMSUJDX18KKysjZXJyb3IgdWdseSBoYWNrIHRvIG1ha2Ugc3VyZSBjb25maWd1cmUgdGVzdCBmYWlscyBoZXJlIGZvciBjcm9zcyB1bnRpbCB1Q2xpYmMgc3VwcG9ydHMgdGhlIGNvbXBsZXggZnVuY3MKKysjZW5kaWYKKyBpbnQKKyBtYWluICgpCisgeworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDExLWluZGV4X21hY3JvLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxMS1pbmRleF9tYWNyby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWU3OWIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxMS1pbmRleF9tYWNyby5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIGIwMzc5NTNlNDAzMTJiNDVhYjg0ZWQwYTNhZDg4MmJiNWU0MTMxMDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1MTowMiArMDQwMAorU3ViamVjdDogW1BBVENIIDExLzM1XSBpbmRleF9tYWNybworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlICAgICAgIHwgICAgMyArKysKKyBsaWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaCB8ICAgIDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUKK2luZGV4IDM4ZWIxZTguLjE1OGQyMWEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQorKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUKK0BAIC01NSw2ICs1NSw5IEBACisgI2luY2x1ZGUgPGJpdHMvZ3Roci5oPgorICNpbmNsdWRlIDx0cjEvZnVuY3Rpb25hbD4KKyAKKysvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCisrI3VuZGVmIGluZGV4CisrCisgIyBpZmRlZiBfX0dDCisgIyAgIGRlZmluZSBfX0dDX0NPTlNUIGNvbnN0CisgIyBlbHNlCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmggYi9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAoraW5kZXggZDdiNWNiZC4uYjliM2FjYiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAorQEAgLTQ4LDYgKzQ4LDkgQEAKKyAjaW5jbHVkZSA8ZXh0L21lbW9yeT4gLy8gRm9yIHVuaW5pdGlhbGl6ZWRfY29weV9uCisgI2luY2x1ZGUgPGV4dC9udW1lcmljPiAvLyBGb3IgcG93ZXIKKyAKKysvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCisrI3VuZGVmIGluZGV4CisrCisgbmFtZXNwYWNlIF9fZ251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCisgeworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTItbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDEyLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2OGQ0NWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDEyLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK0Zyb20gYTBjYjEzYmRkOThhOTQxYjgxZmRhZmU0Y2Q5NmU0YzU2OWZlYjY1MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjUyOjM2ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTIvMzVdIGxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBsaWJtdWRmbGFwL21mLWhvb2tzMi5jIHwgICAxMCArKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMgYi9saWJtdWRmbGFwL21mLWhvb2tzMi5jCitpbmRleCA0YWYxN2RmLi5hM2M2YjJmIDEwMDY0NAorLS0tIGEvbGlibXVkZmxhcC9tZi1ob29rczIuYworKysrIGIvbGlibXVkZmxhcC9tZi1ob29rczIuYworQEAgLTQyNCw3ICs0MjQsNyBAQCBXUkFQUEVSMih2b2lkLCBiemVybywgdm9pZCAqcywgc2l6ZV90IG4pCisgeworICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQocywgbiwgX19NRl9DSEVDS19XUklURSwgImJ6ZXJvIHJlZ2lvbiIpOworLSAgYnplcm8gKHMsIG4pOworKyAgbWVtc2V0IChzLCAwLCBuKTsKKyB9CisgCisgCitAQCAtNDM0LDcgKzQzNCw3IEBAIFdSQVBQRVIyKHZvaWQsIGJjb3B5LCBjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRlc3QsIHNpemVfdCBuKQorICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQoc3JjLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY29weSBzcmMiKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChkZXN0LCBuLCBfX01GX0NIRUNLX1dSSVRFLCAiYmNvcHkgZGVzdCIpOworLSAgYmNvcHkgKHNyYywgZGVzdCwgbik7CisrICBtZW1tb3ZlIChkZXN0LCBzcmMsIG4pOworIH0KKyAKKyAKK0BAIC00NDQsNyArNDQ0LDcgQEAgV1JBUFBFUjIoaW50LCBiY21wLCBjb25zdCB2b2lkICpzMSwgY29uc3Qgdm9pZCAqczIsIHNpemVfdCBuKQorICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQoczEsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjbXAgMXN0IGFyZyIpOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMyLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY21wIDJuZCBhcmciKTsKKy0gIHJldHVybiBiY21wIChzMSwgczIsIG4pOworKyAgcmV0dXJuIG4gPT0gMCA/IDAgOiBtZW1jbXAgKHMxLCBzMiwgbik7CisgfQorIAorIAorQEAgLTQ1Myw3ICs0NTMsNyBAQCBXUkFQUEVSMihjaGFyICosIGluZGV4LCBjb25zdCBjaGFyICpzLCBpbnQgYykKKyAgIHNpemVfdCBuID0gc3RybGVuIChzKTsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIENMQU1QQUREKG4sIDEpLCBfX01GX0NIRUNLX1JFQUQsICJpbmRleCByZWdpb24iKTsKKy0gIHJldHVybiBpbmRleCAocywgYyk7CisrICByZXR1cm4gc3RyY2hyIChzLCBjKTsKKyB9CisgCisgCitAQCAtNDYyLDcgKzQ2Miw3IEBAIFdSQVBQRVIyKGNoYXIgKiwgcmluZGV4LCBjb25zdCBjaGFyICpzLCBpbnQgYykKKyAgIHNpemVfdCBuID0gc3RybGVuIChzKTsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIENMQU1QQUREKG4sIDEpLCBfX01GX0NIRUNLX1JFQUQsICJyaW5kZXggcmVnaW9uIik7CistICByZXR1cm4gcmluZGV4IChzLCBjKTsKKysgIHJldHVybiBzdHJyY2hyIChzLCBjKTsKKyB9CisgCisgLyogWFhYOiAgc3RwY3B5LCBtZW1jY3B5ICovCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTMtbGlic3RkYy1uYW1lc3BhY2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDEzLWxpYnN0ZGMtbmFtZXNwYWNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhM2VmZGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDEzLWxpYnN0ZGMtbmFtZXNwYWNlLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gMTA0ZTRkNjYyMDhmMjcyNmIxNGQyZjVlZWJjZTkwNzAwY2JjODNjOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjU0OjAyICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTMvMzVdIGxpYnN0ZGMrKy1uYW1lc3BhY2UKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIHwgICAgNCArKystCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oICAgICB8ICAgIDQgKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK2luZGV4IDA2NzY1N2EuLmRkNzZhNmMgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitAQCAtMzIsNyArMzIsOCBAQAorIC8vCisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKy0KKytuYW1lc3BhY2Ugc3RkCisreworICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworICNlbmRpZgorQEAgLTExNiwzICsxMTcsNCBAQAorIAkgICB0aGlzLT5fU19jcmVhdGVfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfbWVzc2FnZXMsIF9fcyk7CisgCSB9CisgICAgICB9CisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAoraW5kZXggMTY2NWRkZS4uOTA1YzQzMyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitAQCAtMzMsNyArMzMsOCBAQAorIC8vCisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKy0KKytuYW1lc3BhY2Ugc3RkCisreworICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzKQorICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKK0BAIC03NSwzICs3Niw0IEBACisgICAgICAgZGVsZXRlIF9NX2RhdGE7CisgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworICAgICB9CisrfQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE0LXNoLXByMjQ4MzYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE0LXNoLXByMjQ4MzYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I4ZmQ1MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTQtc2gtcHIyNDgzNi5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitGcm9tIGVkYzlhY2IxODE4MTBmMjM0YjZiOWY3ZDI4MjBiMGU0ZjZhMWVlYWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1NDo0OCArMDQwMAorU3ViamVjdDogW1BBVENIIDE0LzM1XSBzaC1wcjI0ODM2CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitodHRwOi8vc291cmNlZm9yZ2UubmV0L21haWxhcmNoaXZlL2ZvcnVtLnBocD90aHJlYWRfaWQ9ODk1OTMwNCZmb3J1bV9pZD01MzQ4CitodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTI0ODM2CistLS0KKyBnY2MvY29uZmlndXJlICAgIHwgICAgMiArLQorIGdjYy9jb25maWd1cmUuYWMgfCAgICAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggZTEyYTE4MC4uMTM1YmJmNSAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0yMzM3OCw3ICsyMzM3OCw3IEBAIGZvbzoJLmxvbmcJMjUKKyAJdGxzX2ZpcnN0X21pbm9yPTE0CisgCXRsc19hc19vcHQ9Ii1tNjQgLUFlc2FtZSAtLWZhdGFsLXdhcm5pbmdzIgorIAk7OworLSAgc2gtKi0qIHwgc2hbMzRdLSotKikKKysgIHNoLSotKiB8IHNoWzM0XSotKi0qKQorICAgICBjb25mdGVzdF9zPScKKyAJLnNlY3Rpb24gIi50ZGF0YSIsImF3VCIsQHByb2diaXRzCisgZm9vOgkubG9uZwkyNQorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCBlYmEzNTc3Li42MzYzYTIxIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTMxNDEsNyArMzE0MSw3IEBAIGZvbzoJLmxvbmcJMjUKKyAJdGxzX2ZpcnN0X21pbm9yPTE0CisgCXRsc19hc19vcHQ9Ii1tNjQgLUFlc2FtZSAtLWZhdGFsLXdhcm5pbmdzIgorIAk7OworLSAgc2gtKi0qIHwgc2hbMzRdLSotKikKKysgIHNoLSotKiB8IHNoWzM0XSotKi0qKQorICAgICBjb25mdGVzdF9zPScKKyAJLnNlY3Rpb24gIi50ZGF0YSIsImF3VCIsQHByb2diaXRzCisgZm9vOgkubG9uZwkyNQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE1LWFybS1Vc2UtVEFSR0VUX0VORElBTl9PUFRJT04tZm9yLWRldGVybWluaW5nLU1VTFRJTEkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE1LWFybS1Vc2UtVEFSR0VUX0VORElBTl9PUFRJT04tZm9yLWRldGVybWluaW5nLU1VTFRJTEkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA4MTIyMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTUtYXJtLVVzZS1UQVJHRVRfRU5ESUFOX09QVElPTi1mb3ItZGV0ZXJtaW5pbmctTVVMVElMSS5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDUwZTUzNjYwMDViMGY2YWYyNzM3OGUyYTVjM2NiOWY5OTM2YTdlNjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1ODozNiArMDQwMAorU3ViamVjdDogW1BBVENIIDE1LzM1XSBhcm06IFVzZSBUQVJHRVRfRU5ESUFOX09QVElPTiBmb3IgZGV0ZXJtaW5pbmcKKyBNVUxUSUxJQl9ERUZBVUxUUworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmggYi9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAoraW5kZXggNDg4ZWZhNC4uNzUzZGMzYSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCisrKysgYi9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorQEAgLTQ2LDcgKzQ2LDcgQEAKKyAKKyAjdW5kZWYgIE1VTFRJTElCX0RFRkFVTFRTCisgI2RlZmluZSBNVUxUSUxJQl9ERUZBVUxUUyBcCistCXsgIm1hcm0iLCAibWxpdHRsZS1lbmRpYW4iLCAibWZsb2F0LWFiaT1oYXJkIiwgIm1uby10aHVtYi1pbnRlcndvcmsiIH0KKysJeyAibWFybSIsIFRBUkdFVF9FTkRJQU5fT1BUSU9OLCAibWZsb2F0LWFiaT1oYXJkIiwgIm1uby10aHVtYi1pbnRlcndvcmsiIH0KKyAKKyAvKiBOb3cgd2UgZGVmaW5lIHRoZSBzdHJpbmdzIHVzZWQgdG8gYnVpbGQgdGhlIHNwZWMgZmlsZS4gICovCisgI3VuZGVmICBMSUJfU1BFQworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE2LWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNi1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTU1ZTQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNi1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaApAQCAtMCwwICsxLDIyMSBAQAorRnJvbSAxNjAzOTdlZjNjMzMzMTA5OWFmMDI4ZjFiOGQzZTA4NWIwN2Q4OGFkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTk6MDAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNi8zNV0gZ2NjOiBwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uOiBjb2Rlc291cmNlcnldCistLS0KKyBnY2MvTWFrZWZpbGUuaW4gICAgIHwgICAgMiArLQorIGdjYy9jb21tb24ub3B0ICAgICAgfCAgICA0ICsrKysKKyBnY2MvY29uZmlnLmluICAgICAgIHwgICAgNiArKysrKysKKyBnY2MvY29uZmlndXJlICAgICAgIHwgICAyMCArKysrKysrKysrKysrKysrKystLQorIGdjYy9jb25maWd1cmUuYWMgICAgfCAgIDEwICsrKysrKysrKysKKyBnY2MvZG9jL2ludm9rZS50ZXhpIHwgICAgOSArKysrKysrKysKKyBnY2MvZ2NjLmMgICAgICAgICAgIHwgICAgMiArKworIGdjYy9pbmNwYXRoLmMgICAgICAgfCAgIDE5ICsrKysrKysrKysrKysrKysrKysKKyA4IGZpbGVzIGNoYW5nZWQsIDY5IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC44LjQvZ2NjL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL01ha2VmaWxlLmluCisrKysgZ2NjLTQuOC40L2djYy9NYWtlZmlsZS5pbgorQEAgLTIwMTksNyArMjAxOSw3IEBAIGF0dHJpYnMubyA6IGF0dHJpYnMuYyAkKENPTkZJR19IKSAkKFNZU1QKKyAKKyBpbmNwYXRoLm86IGluY3BhdGguYyBpbmNwYXRoLmggJChDT05GSUdfSCkgJChTWVNURU1fSCkgJChDUFBMSUJfSCkgXAorIAkJaW50bC5oIHByZWZpeC5oIGNvcmV0eXBlcy5oICQoVE1fSCkgY3BwZGVmYXVsdC5oICQoVEFSR0VUX0gpIFwKKy0JCSQoTUFDSE1PREVfSCkKKysJCSQoTUFDSE1PREVfSCkgJChGTEFHU19IKSB0b3BsZXYuaAorIAorIENGTEFHUy1wcmVmaXgubyArPSAtRFBSRUZJWD1cIiQocHJlZml4KVwiIC1EQkFTRVZFUj0kKEJBU0VWRVJfcykKKyBwcmVmaXgubzogcHJlZml4LmMgJChDT05GSUdfSCkgJChTWVNURU1fSCkgY29yZXR5cGVzLmggcHJlZml4LmggXAorSW5kZXg6IGdjYy00LjguNC9nY2MvY29tbW9uLm9wdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb21tb24ub3B0CisrKysgZ2NjLTQuOC40L2djYy9jb21tb24ub3B0CitAQCAtNTk1LDYgKzU5NSwxMCBAQCBXcGVkYW50aWMKKyBDb21tb24gVmFyKHBlZGFudGljKSBXYXJuaW5nCisgSXNzdWUgd2FybmluZ3MgbmVlZGVkIGZvciBzdHJpY3QgY29tcGxpYW5jZSB0byB0aGUgc3RhbmRhcmQKKyAKKytXcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0NvbW1vbiBWYXIoZmxhZ19wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzKSBJbml0KDEpIFdhcm5pbmcKKytXYXJuIGZvciAtSSBhbmQgLUwgb3B0aW9ucyB1c2luZyBzeXN0ZW0gZGlyZWN0b3JpZXMgaWYgY3Jvc3MgY29tcGlsaW5nCisrCisgV3NoYWRvdworIENvbW1vbiBWYXIod2Fybl9zaGFkb3cpIFdhcm5pbmcKKyBXYXJuIHdoZW4gb25lIGxvY2FsIHZhcmlhYmxlIHNoYWRvd3MgYW5vdGhlcgorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy5pbgorKysrIGdjYy00LjguNC9nY2MvY29uZmlnLmluCitAQCAtMTM4LDYgKzEzOCwxMiBAQAorICNlbmRpZgorIAorIAorKy8qIERlZmluZSB0byB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXMgKi8KKysjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorKyN1bmRlZiBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUworKyNlbmRpZgorKworKworIC8qIERlZmluZSBpZiB5b3Ugd2FudCBhbGwgb3BlcmF0aW9ucyBvbiBSVEwgKHRoZSBiYXNpYyBkYXRhIHN0cnVjdHVyZSBvZiB0aGUKKyAgICBvcHRpbWl6ZXIgYW5kIGJhY2sgZW5kKSB0byBiZSBjaGVja2VkIGZvciBkeW5hbWljIHR5cGUgc2FmZXR5IGF0IHJ1bnRpbWUuCisgICAgVGhpcyBpcyBxdWl0ZSBleHBlbnNpdmUuICovCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlndXJlCisrKysgZ2NjLTQuOC40L2djYy9jb25maWd1cmUKK0BAIC05MTgsNiArOTE4LDcgQEAgd2l0aF9nYworIHdpdGhfc3lzdGVtX3psaWIKKyBlbmFibGVfbWFpbnRhaW5lcl9tb2RlCisgZW5hYmxlX3ZlcnNpb25fc3BlY2lmaWNfcnVudGltZV9saWJzCisrZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMKKyBlbmFibGVfcGx1Z2luCisgZW5hYmxlX2xpYnF1YWRtYXRoX3N1cHBvcnQKKyB3aXRoX2xpbmtlcl9oYXNoX3N0eWxlCitAQCAtMTYzOSw2ICsxNjQwLDggQEAgT3B0aW9uYWwgRmVhdHVyZXM6CisgICAtLWVuYWJsZS12ZXJzaW9uLXNwZWNpZmljLXJ1bnRpbWUtbGlicworICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGF0IHJ1bnRpbWUgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgY29tcGlsZXItc3BlY2lmaWMgZGlyZWN0b3J5CisrICAtLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXMKKyAgIC0tZW5hYmxlLXBsdWdpbiAgICAgICAgIGVuYWJsZSBwbHVnaW4gc3VwcG9ydAorICAgLS1kaXNhYmxlLWxpYnF1YWRtYXRoLXN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGUgbGlicXVhZG1hdGggc3VwcG9ydCBmb3IgRm9ydHJhbgorQEAgLTE3ODQ3LDcgKzE3ODUwLDcgQEAgZWxzZQorICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCistI2xpbmUgMTc4NTAgImNvbmZpZ3VyZSIKKysjbGluZSAxNzg1MyAiY29uZmlndXJlIgorICNpbmNsdWRlICJjb25mZGVmcy5oIgorIAorICNpZiBIQVZFX0RMRkNOX0gKK0BAIC0xNzk1Myw3ICsxNzk1Niw3IEBAIGVsc2UKKyAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorLSNsaW5lIDE3OTU2ICJjb25maWd1cmUiCisrI2xpbmUgMTc5NTkgImNvbmZpZ3VyZSIKKyAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyAKKyAjaWYgSEFWRV9ETEZDTl9ICitAQCAtMjcyMTksNiArMjcyMjIsMTkgQEAgaWYgdGVzdCAiJHtlbmFibGVfdmVyc2lvbl9zcGVjaWZpY19ydW50aQorIGZpCisgCisgCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgZW5hYmxldmFsPSRlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllczsKKytlbHNlCisrICBlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcz1ubworK2ZpCisrCisraWYgdGVzdCAieCR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXN9IiA9ICJ4eWVzIjsgdGhlbgorKworKyRhc19lY2hvICIjZGVmaW5lIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTIDEiID4+Y29uZmRlZnMuaAorKworK2ZpCisrCisgIyBTdWJzdGl0dXRlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisgCisgCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlndXJlLmFjCisrKysgZ2NjLTQuOC40L2djYy9jb25maWd1cmUuYWMKK0BAIC01MTIwLDYgKzUxMjAsMTYgQEAgQUNfQVJHX0VOQUJMRSh2ZXJzaW9uLXNwZWNpZmljLXJ1bnRpbWUtbAorICAgICAgICAgICAgICAgICBbc3BlY2lmeSB0aGF0IHJ1bnRpbWUgbGlicmFyaWVzIHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIGluIGEgY29tcGlsZXItc3BlY2lmaWMgZGlyZWN0b3J5XSldKQorIAorK0FDX0FSR19FTkFCTEUoW3BvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXNdLAorKyAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc10sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXNdKSwsCisrICAgICAgICAgICAgIFtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcz1ub10pCisraWYgdGVzdCAieCR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXN9IiA9ICJ4eWVzIjsgdGhlbgorKyAgQUNfREVGSU5FKFtFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFU10sCisrICAgICAgICAgICBbMV0sCisrICAgICAgICAgICBbRGVmaW5lIHRvIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3Rvcmllc10pCisrZmkKKysKKyAjIFN1YnN0aXR1dGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyBBQ19TVUJTVChzdWJkaXJzKQorIEFDX1NVQlNUKHNyY2RpcikKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2RvYy9pbnZva2UudGV4aQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9kb2MvaW52b2tlLnRleGkKKysrKyBnY2MtNC44LjQvZ2NjL2RvYy9pbnZva2UudGV4aQorQEAgLTI1OCw2ICsyNTgsNyBAQCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0c30uCisgLVdvdmVybGVuZ3RoLXN0cmluZ3MgIC1XcGFja2VkICAtV3BhY2tlZC1iaXRmaWVsZC1jb21wYXQgIC1XcGFkZGVkIEBnb2wKKyAtV3BhcmVudGhlc2VzICAtV3BlZGFudGljLW1zLWZvcm1hdCAtV25vLXBlZGFudGljLW1zLWZvcm1hdCBAZ29sCisgLVdwb2ludGVyLWFyaXRoICAtV25vLXBvaW50ZXItdG8taW50LWNhc3QgQGdvbAorKy1Xbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyBAZ29sCisgLVdyZWR1bmRhbnQtZGVjbHMgIC1Xbm8tcmV0dXJuLWxvY2FsLWFkZHIgQGdvbAorIC1XcmV0dXJuLXR5cGUgIC1Xc2VxdWVuY2UtcG9pbnQgIC1Xc2hhZG93IEBnb2wKKyAtV3NpZ24tY29tcGFyZSAgLVdzaWduLWNvbnZlcnNpb24gIC1Xc2l6ZW9mLXBvaW50ZXItbWVtYWNjZXNzIEBnb2wKK0BAIC00MDIyLDYgKzQwMjMsMTQgQEAgaGVhZGVycy0tLWZvciB0aGF0LCBAb3B0aW9uey1XdW5rbm93bi1wcgorICBmb3IgbW9zdCB0YXJnZXRzLCBpdCBpcyBtYWRlIHVwIG9mIGNvZGUgYW5kIHRodXMgcmVxdWlyZXMgdGhlIHN0YWNrCisgIHRvIGJlIG1hZGUgZXhlY3V0YWJsZSBpbiBvcmRlciBmb3IgdGhlIHByb2dyYW0gdG8gd29yayBwcm9wZXJseS4KKyAKKytAaXRlbSAtV25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKytAb3BpbmRleCBXbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0RvIG5vdCB3YXJuIGZvciBAb3B0aW9uey1JfSBvciBAb3B0aW9uey1MfSBvcHRpb25zIHVzaW5nIHN5c3RlbQorK2RpcmVjdG9yaWVzIHN1Y2ggYXMgQGZpbGV7L3Vzci9pbmNsdWRlfSB3aGVuIGNyb3NzIGNvbXBpbGluZy4gIFRoaXMKKytvcHRpb24gaXMgaW50ZW5kZWQgZm9yIHVzZSBpbiBjaHJvb3QgZW52aXJvbm1lbnRzIHdoZW4gc3VjaAorK2RpcmVjdG9yaWVzIGNvbnRhaW4gdGhlIGNvcnJlY3QgaGVhZGVycyBhbmQgbGlicmFyaWVzIGZvciB0aGUgdGFyZ2V0Cisrc3lzdGVtIHJhdGhlciB0aGFuIHRoZSBob3N0LgorKworIEBpdGVtIC1XZmxvYXQtZXF1YWwKKyBAb3BpbmRleCBXZmxvYXQtZXF1YWwKKyBAb3BpbmRleCBXbm8tZmxvYXQtZXF1YWwKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2djYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2djYy5jCisrKysgZ2NjLTQuOC40L2djYy9nY2MuYworQEAgLTc0MSw2ICs3NDEsOCBAQCBwcm9wZXIgcG9zaXRpb24gYW1vbmcgdGhlIG90aGVyIG91dHB1dCBmCisgICAgIiV7ZnVzZS1sZD0qOi1mdXNlLWxkPSUqfVwKKyAgICAgJVggJXtvKn0gJXtlKn0gJXtOfSAle259ICV7cn1cCisgICAgICV7c30gJXt0fSAle3UqfSAle3p9ICV7Wn0gJXshbm9zdGRsaWI6JXshbm9zdGFydGZpbGVzOiVTfX1cCisrICAgICV7V25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXM6LS1uby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzfVwKKysgICAgJXtXZXJyb3I9cG9pc29uLXN5c3RlbS1kaXJlY3RvcmllczotLWVycm9yLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXN9XAorICAgICAle3N0YXRpYzp9ICV7TCp9ICUobWZ3cmFwKSAlKGxpbmtfbGliZ2NjKSAiIFNBTklUSVpFUl9FQVJMWV9TUEVDICIgJW9cCisgICAgICV7Zm9wZW5tcHxmdHJlZS1wYXJhbGxlbGl6ZS1sb29wcz0qOiU6aW5jbHVkZShsaWJnb21wLnNwZWMpJShsaW5rX2dvbXApfVwKKyAgICAgJXtmZ251LXRtOiU6aW5jbHVkZShsaWJpdG0uc3BlYyklKGxpbmtfaXRtKX1cCitJbmRleDogZ2NjLTQuOC40L2djYy9pbmNwYXRoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvaW5jcGF0aC5jCisrKysgZ2NjLTQuOC40L2djYy9pbmNwYXRoLmMKK0BAIC0yOCw2ICsyOCw3IEBACisgI2luY2x1ZGUgImludGwuaCIKKyAjaW5jbHVkZSAiaW5jcGF0aC5oIgorICNpbmNsdWRlICJjcHBkZWZhdWx0LmgiCisrI2luY2x1ZGUgImRpYWdub3N0aWMtY29yZS5oIgorIAorIC8qIE1pY3Jvc29mdCBXaW5kb3dzIGRvZXMgbm90IG5hdGl2ZWx5IHN1cHBvcnQgaW5vZGVzLgorICAgIFZNUyBoYXMgbm9uLW51bWVyaWMgaW5vZGVzLiAgKi8KK0BAIC0zODIsNiArMzgzLDI0IEBAIG1lcmdlX2luY2x1ZGVfY2hhaW5zIChjb25zdCBjaGFyICpzeXNyb28KKyAJfQorICAgICAgIGZwcmludGYgKHN0ZGVyciwgXygiRW5kIG9mIHNlYXJjaCBsaXN0LlxuIikpOworICAgICB9CisrCisrI2lmZGVmIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTCisrICBpZiAoZmxhZ19wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzKQorKyAgICB7CisrICAgICAgIHN0cnVjdCBjcHBfZGlyICpwOworKworKyAgICAgICBmb3IgKHAgPSBoZWFkc1tRVU9URV07IHA7IHAgPSBwLT5uZXh0KQorKyAgICAgICAgIHsKKysgICAgICAgICAgaWYgKCghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvaW5jbHVkZSIsIDEyKSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvbG9jYWwvaW5jbHVkZSIsIDE4KSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvWDExUjYvaW5jbHVkZSIsIDE4KSkpCisrICAgICAgICAgICAgd2FybmluZyAoT1BUX1dwb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLAorKyAgICAgICAgICAgICAgICAgICAgICJpbmNsdWRlIGxvY2F0aW9uIFwiJXNcIiBpcyB1bnNhZmUgZm9yICIKKysgICAgICAgICAgICAgICAgICAgICAiY3Jvc3MtY29tcGlsYXRpb24iLAorKyAgICAgICAgICAgICAgICAgICAgIHAtPm5hbWUpOworKyAgICAgICAgIH0KKysgICAgfQorKyNlbmRpZgorIH0KKyAKKyAvKiBVc2UgZ2l2ZW4gLUkgcGF0aHMgZm9yICNpbmNsdWRlICIuLi4iIGJ1dCBub3QgI2luY2x1ZGUgPC4uLj4sIGFuZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE3LWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTgxZWZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSBlOTljOWM5NzI2NmQ2ZDNlOGNhYzc5OGFhOTE0MDgyNTBjNGQ2MGNmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MDA6MzQgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNy8zNV0gZ2NjLXBvaXNvbi1kaXItZXh0ZW5kCisKK0FkZCAvc3cvaW5jbHVkZSBhbmQgL29wdC9pbmNsdWRlIGJhc2VkIG9uIHRoZSBvcmlnaW5hbAoremVja2Utbm8taG9zdC1pbmNsdWRlcy5wYXRjaCBwYXRjaC4gIFRoZSBvcmlnaW5hbCBwYXRjaCBjaGVja2VkIGZvcgorL3Vzci9pbmNsdWRlLCAvc3cvaW5jbHVkZSBhbmQgL29wdC9pbmNsdWRlIGFuZCB0aGVuIHRyaWdnZXJlZCBhIGZhaWx1cmUgYW5kCithYm9ydGVkLgorCitJbnN0ZWFkLCB3ZSBhZGQgdGhlIHR3byBtaXNzaW5nIGl0ZW1zIHRvIHRoZSBjdXJyZW50IHNjYW4uICBJZiB0aGUgdXNlcgord2FudHMgdGhpcyB0byBiZSBhIGZhaWx1cmUsIHRoZXkgY2FuIGFkZCAiLVdlcnJvcj1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIi4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvaW5jcGF0aC5jIHwgICAgNCArKystCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2luY3BhdGguYyBiL2djYy9pbmNwYXRoLmMKK2luZGV4IGNkNDFjNzguLmVhYzRhOTIgMTAwNjQ0CistLS0gYS9nY2MvaW5jcGF0aC5jCisrKysgYi9nY2MvaW5jcGF0aC5jCitAQCAtMzkzLDcgKzM5Myw5IEBAIG1lcmdlX2luY2x1ZGVfY2hhaW5zIChjb25zdCBjaGFyICpzeXNyb290LCBjcHBfcmVhZGVyICpwZmlsZSwgaW50IHZlcmJvc2UpCisgICAgICAgICAgeworICAgICAgICAgICBpZiAoKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9pbmNsdWRlIiwgMTIpKQorICAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9sb2NhbC9pbmNsdWRlIiwgMTgpKQorLSAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvWDExUjYvaW5jbHVkZSIsIDE4KSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi9zdy9pbmNsdWRlIiwgMTEpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL29wdC9pbmNsdWRlIiwgMTIpKSkKKyAgICAgICAgICAgICB3YXJuaW5nIChPUFRfV3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMsCisgICAgICAgICAgICAgICAgICAgICAgImluY2x1ZGUgbG9jYXRpb24gXCIlc1wiIGlzIHVuc2FmZSBmb3IgIgorICAgICAgICAgICAgICAgICAgICAgICJjcm9zcy1jb21waWxhdGlvbiIsCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTgtZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE4LWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyOGNhZmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE4LWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoCkBAIC0wLDAgKzEsNzMgQEAKK0Zyb20gNTYyMDdmYTI5MjNlOGVkZjc3NGU5OGZmYWM4MjY2NjA5MTA3NmJlMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjA4OjMxICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTgvMzVdIGdjYy00LjMuMzogU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVAorCitCZWZvcmUgY29tbWl0dGluZywgSSBub3RpY2VkIHRoYXQgUFIvMzIxNjEgd2FzIG1hcmtlZCBhcyBhIGR1cCBvZiBQUi8zMjAwOSwgYnV0IG15IHByZXZpb3VzIHBhdGNoIGRpZCBub3QgZml4IGl0LgorCitUaGlzIGFsdGVybmF0aXZlIHBhdGNoIGlzIGJldHRlciBiZWNhdXNlIGl0IGxldHMgeW91IGp1c3QgdXNlIENGTEFHU19GT1JfVEFSR0VUIHRvIHNldCB0aGUgY29tcGlsYXRpb24gZmxhZ3MgZm9yIGxpYmdjYy4gU2luY2UgYm9vdHN0cmFwcGVkIHRhcmdldCBsaWJyYXJpZXMgYXJlIG5ldmVyIGNvbXBpbGVkIHdpdGggdGhlIG5hdGl2ZSBjb21waWxlciwgaXQgbWFrZXMgbGl0dGxlIHNlbnNlIHRvIHVzZSBkaWZmZXJlbnQgZmxhZ3MgZm9yIHN0YWdlMSBhbmQgbGF0ZXIgc3RhZ2VzLiBBbmQgaXQgYWxzbyBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8gdXNlIGEgZGlmZmVyZW50IHZhcmlhYmxlIHRoYW4gQ0ZMQUdTX0ZPUl9UQVJHRVQuCisKK090aGVyIGNoYW5nZXMgSSBoYWQgdG8gZG8gaW5jbHVkZToKKworLSBtb3ZpbmcgdGhlIGNyZWF0aW9uIG9mIGRlZmF1bHQgQ0ZMQUdTX0ZPUl9UQVJHRVQgZnJvbSBNYWtlZmlsZS5hbSB0byBjb25maWd1cmUuYWMsIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBCT09UX0NGTEFHUyBhcmUgc3Vic3RpdHV0ZWQgaW50byBDRkxBR1NfRk9SX1RBUkdFVCAod2hpY2ggaXMgIi1PMiAtZyAkKENGTEFHUykiKSB2aWEgJChDRkxBR1MpLiBJdCBpcyBhbHNvIGNsZWFuZXIgdGhpcyB3YXkgdGhvdWdoLgorCistIHBhc3NpbmcgdGhlIHJpZ2h0IENGTEFHUyB0byBjb25maWd1cmUgc2NyaXB0cyBhcyBleHBvcnRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKworSSBhbHNvIHN0b3BwZWQgcGFzc2luZyBMSUJDRkxBR1MgdG8gY29uZmlndXJlIHNjcmlwdHMgc2luY2UgdGhleSBhcmUgdW51c2VkIGluIHRoZSB3aG9sZSBzcmMgdHJlZS4gQW5kIEkgdXBkYXRlZCB0aGUgZG9jdW1lbnRhdGlvbiBhcyBILVAgcmVtaW5kZWQgbWUgdG8gZG8uCisKK0Jvb3RzdHJhcHBlZC9yZWd0ZXN0ZWQgaTY4Ni1wYy1saW51eC1nbnUsIHdpbGwgY29tbWl0IHRvIDQuNCBzaG9ydGx5LiBPayBmb3IgNC4zPworCitTaWduZWQtb2ZmLWJ5OiBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb25maWd1cmUgfCAgIDMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDMyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggMWI3NmM5MC4uZTRkY2U3YyAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNjc3Miw2ICs2NzcyLDM4IEBAIGZpCisgCisgCisgCisrIyBEdXJpbmcgZ2NjIGJvb3RzdHJhcCwgaWYgd2UgdXNlIHNvbWUgcmFuZG9tIGNjIGZvciBzdGFnZTEgdGhlbiBDRkxBR1MKKysjIG1pZ2h0IGJlIGVtcHR5IG9yICItZyIuICBXZSBkb24ndCByZXF1aXJlIGEgQysrIGNvbXBpbGVyLCBzbyBDWFhGTEFHUworKyMgbWlnaHQgYWxzbyBiZSBlbXB0eSAob3IgIi1nIiwgaWYgYSBub24tR0NDIEMrKyBjb21waWxlciBpcyBpbiB0aGUgcGF0aCkuCisrIyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IFRBUkdFVCBsaWJyYXJpZXMgKHdoaWNoIHdlIGtub3cgYXJlIGJ1aWx0IHdpdGgKKysjIGdjYykgYXJlIGJ1aWx0IHdpdGggIi1PMiAtZyIsIHNvIGluY2x1ZGUgdGhvc2Ugb3B0aW9ucyB3aGVuIHNldHRpbmcKKysjIENGTEFHU19GT1JfVEFSR0VUIGFuZCBDWFhGTEFHU19GT1JfVEFSR0VULgorK2lmIHRlc3QgIngkQ0ZMQUdTX0ZPUl9UQVJHRVQiID0geDsgdGhlbgorKyAgQ0ZMQUdTX0ZPUl9UQVJHRVQ9JENGTEFHUworKyAgY2FzZSAiICRDRkxBR1MgIiBpbgorKyAgICAqIiAtTzIgIiopIDs7CisrICAgICopIENGTEFHU19GT1JfVEFSR0VUPSItTzIgJENGTEFHUyIgOzsKKysgIGVzYWMKKysgIGNhc2UgIiAkQ0ZMQUdTICIgaW4KKysgICAgKiIgLWcgIiogfCAqIiAtZzMgIiopIDs7CisrICAgICopIENGTEFHU19GT1JfVEFSR0VUPSItZyAkQ0ZMQUdTIiA7OworKyAgZXNhYworK2ZpCisrCisrCisraWYgdGVzdCAieCRDWFhGTEFHU19GT1JfVEFSR0VUIiA9IHg7IHRoZW4KKysgIENYWEZMQUdTX0ZPUl9UQVJHRVQ9JENYWEZMQUdTCisrICBjYXNlICIgJENYWEZMQUdTICIgaW4KKysgICAgKiIgLU8yICIqKSA7OworKyAgICAqKSBDWFhGTEFHU19GT1JfVEFSR0VUPSItTzIgJENYWEZMQUdTIiA7OworKyAgZXNhYworKyAgY2FzZSAiICRDWFhGTEFHUyAiIGluCisrICAgICoiIC1nICIqIHwgKiIgLWczICIqKSA7OworKyAgICAqKSBDWFhGTEFHU19GT1JfVEFSR0VUPSItZyAkQ1hYRkxBR1MiIDs7CisrICBlc2FjCisrZmkKKysKKysKKyAjIEhhbmRsZSAtLXdpdGgtaGVhZGVycz1YWFguICBJZiB0aGUgdmFsdWUgaXMgbm90ICJ5ZXMiLCB0aGUgY29udGVudHMgb2YKKyAjIHRoZSBuYW1lZCBkaXJlY3RvcnkgYXJlIGNvcGllZCB0byAkKHRvb2xkaXIpL3N5cy1pbmNsdWRlLgorIGlmIHRlc3QgeCIke3dpdGhfaGVhZGVyc30iICE9IHggJiYgdGVzdCB4IiR7d2l0aF9oZWFkZXJzfSIgIT0geG5vIDsgdGhlbgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE5LTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxOS02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTc1Y2ZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxOS02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaApAQCAtMCwwICsxLDc5IEBACitGcm9tIDE4ZmRlNTc0MGIwOTMyNGRmYjljZjQxZTk4NDk2NzI1NzNmZjVmYTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxMDowNiArMDQwMAorU3ViamVjdDogW1BBVENIIDE5LzM1XSA2NC1iaXQgbXVsdGlsaWIgaGFjay4KKworR0NDIGhhcyBpbnRlcm5hbCBtdWx0aWxpYiBoYW5kbGluZyBjb2RlIGJ1dCBpdCBhc3N1bWVzIGEgdmVyeSBzcGVjaWZpYyByaWdpZCBkaXJlY3RvcnkKK2xheW91dC4gVGhlIGJ1aWxkIHN5c3RlbSBpbXBsZW1lbnRhdGlvbiBvZiBtdWx0aWxpYiBsYXlvdXQgaXMgdmVyeSBnZW5lcmljIGFuZCBhbGxvd3MKK2NvbXBsZXRlIGN1c3RvbWlzYXRpb24gb2YgdGhlIGxpYnJhcnkgZGlyZWN0b3JpZXMuCisKK1RoaXMgcGF0Y2ggaXMgYSBwYXJ0aWFsIHNvbHV0aW9uIHRvIGFsbG93IGFueSBjdXN0b20gZGlyZWN0b3JpZXMgdG8gYmUgcGFzc2VkIGludG8gZ2NjCithbmQgaGFuZGxlZCBjb3JyZWN0bHkuIEl0IGZvcmNlcyBnY2MgdG8gdXNlIHRoZSBiYXNlX2xpYmRpciAod2hpY2ggaXMgdGhlIGN1cnJlbnQKK2RpcmVjdG9yeSwgIi4iKS4gV2UgbmVlZCB0byBkbyB0aGlzIGZvciBlYWNoIG11bHRpbGliIHRoYXQgaXMgY29uZmlndXJlZCBhcyB3ZSBkb24ndAora25vdyB3aGljaCBjb21waWxlciBvcHRpb25zIG1heSBiZSBiZWluZyBwYXNzZWQgaW50byB0aGUgY29tcGlsZXIuIFNpbmNlIHdlIGhhdmUgYSBjb21waWxlcgorcGVyIG11bGl0bGliIGF0IHRoaXMgcG9pbnQgdGhhdCBpc24ndCBhbiBpc3N1ZS4KKworVGhlIG9uZSBwcm9ibGVtIGlzIHRoZSB0YXJnZXQgY29tcGlsZXIgaXMgb25seSBnb2luZyB0byB3b3JrIGZvciB0aGUgZGVmYXVsdCBtdWx0bGlsaWIgYXQKK3RoaXMgcG9pbnQuIElkZWFsbHkgd2UnZCBmaWd1cmUgb3V0IHdoaWNoIG11bHRpbGlicyB3ZXJlIGJlaW5nIGVuYWJsZWQgd2l0aCB3aGljaCBwYXRocworYW5kIGJlIGFibGUgdG8gcGF0Y2ggdGhlc2UgZW50cmllcyB3aXRoIGEgY29tcGxldGUgc2V0IG9mIGNvcnJlY3QgcGF0aHMgYnV0IHRoaXMgd2UKK2Rvbid0IGhhdmUgc3VjaCBjb2RlIGF0IHRoaXMgcG9pbnQuIFRoaXMgaXMgc29tZXRoaW5nIHRoZSB0YXJnZXQgZ2NjIHJlY2lwZSBzaG91bGQgZG8KK2FuZCBvdmVycmlkZSB0aGVzZSBwbGF0Zm9ybSBkZWZhdWx0cyBpbiBpdHMgYnVpbGQgY29uZmlnLgorCitSUCAxNS84LzExCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBFbHZpcyBEb3dzb24gPGVsdmlzLmRvd3NvbkBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NCAgIHwgICAgNiArKy0tLS0KKyBnY2MvY29uZmlnL21pcHMvdC1saW51eDY0ICAgfCAgIDEwICsrKy0tLS0tLS0KKyBnY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQgfCAgICA1ICsrLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQorCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL2kzODYvdC1saW51eDY0CisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKK0BAIC0zMiw3ICszMiw1IEBACisgIworIGNvbW1hPSwKKyBNVUxUSUxJQl9PUFRJT05TICAgID0gJChzdWJzdCAkKGNvbW1hKSwvLCQoVE1fTVVMVElMSUJfQ09ORklHKSkKKy1NVUxUSUxJQl9ESVJOQU1FUyAgID0gJChwYXRzdWJzdCBtJSwgJSwgJChzdWJzdCAvLCAsJChNVUxUSUxJQl9PUFRJT05TKSkpCistTVVMVElMSUJfT1NESVJOQU1FUyA9IG02ND0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOng4Nl82NC1saW51eC1nbnUpCistTVVMVElMSUJfT1NESVJOQU1FUys9IG0zMj0kKGlmICQod2lsZGNhcmQgJChzaGVsbCBlY2hvICQoU1lTVEVNX0hFQURFUl9ESVIpKS8uLi8uLi91c3IvbGliMzIpLC4uL2xpYjMyLC4uL2xpYikkKGNhbGwgaWZfbXVsdGlhcmNoLDppMzg2LWxpbnV4LWdudSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTKz0gbXgzMj0uLi9saWJ4MzIkKGNhbGwgaWZfbXVsdGlhcmNoLDp4ODZfNjQtbGludXgtZ251eDMyKQorK01VTFRJTElCX0RJUk5BTUVTID0gLiAuCisrTVVMVElMSUJfT1NESVJOQU1FUyA9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL21pcHMvdC1saW51eDY0CisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKK0BAIC0xNywxMCArMTcsNiBAQAorICMgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIAorIE1VTFRJTElCX09QVElPTlMgPSBtYWJpPW4zMi9tYWJpPTMyL21hYmk9NjQKKy1NVUxUSUxJQl9ESVJOQU1FUyA9IG4zMiAzMiA2NAorLU1JUFNfRUwgPSAkKGlmICQoZmlsdGVyICVlbCwgJChmaXJzdHdvcmQgJChzdWJzdCAtLCAsJCh0YXJnZXQpKSkpLGVsKQorLU1JUFNfU09GVCA9ICQoaWYgJChzdHJpcCAkKGZpbHRlciBNQVNLX1NPRlRfRkxPQVRfQUJJLCAkKHRhcmdldF9jcHVfZGVmYXVsdCkpICQoZmlsdGVyIHNvZnQsICQod2l0aF9mbG9hdCkpKSxzb2Z0KQorLU1VTFRJTElCX09TRElSTkFNRVMgPSBcCistCS4uL2xpYjMyJChjYWxsIGlmX211bHRpYXJjaCw6bWlwczY0JChNSVBTX0VMKS1saW51eC1nbnVhYmluMzIkKE1JUFNfU09GVCkpIFwKKy0JLi4vbGliJChjYWxsIGlmX211bHRpYXJjaCw6bWlwcyQoTUlQU19FTCktbGludXgtZ251JChNSVBTX1NPRlQpKSBcCistCS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6bWlwczY0JChNSVBTX0VMKS1saW51eC1nbnVhYmk2NCQoTUlQU19TT0ZUKSkKKytNVUxUSUxJQl9ESVJOQU1FUyA9IC4gLiAuCisrTVVMVElMSUJfT1NESVJOQU1FUyA9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCisrCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQKK0BAIC0yNiw3ICsyNiw2IEBACisgIyBNVUxUSUxJQl9PU0RJUk5BTUVTIGFjY29yZGluZyB0byB3aGF0IGlzIGZvdW5kIG9uIHRoZSB0YXJnZXQuCisgCisgTVVMVElMSUJfT1BUSU9OUyAgICA6PSBtNjQvbTMyCistTVVMVElMSUJfRElSTkFNRVMgICA6PSA2NCAzMgorK01VTFRJTElCX0RJUk5BTUVTICAgOj0gLiAuCisgTVVMVElMSUJfRVhUUkFfT1BUUyA6PSAKKy1NVUxUSUxJQl9PU0RJUk5BTUVTIDo9IG02ND0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOnBvd2VycGM2NC1saW51eC1nbnUpCistTVVMVElMSUJfT1NESVJOQU1FUyArPSBtMzI9JChpZiAkKHdpbGRjYXJkICQoc2hlbGwgZWNobyAkKFNZU1RFTV9IRUFERVJfRElSKSkvLi4vLi4vdXNyL2xpYjMyKSwuLi9saWIzMiwuLi9saWIpJChjYWxsIGlmX211bHRpYXJjaCw6cG93ZXJwYy1saW51eC1nbnUpCisrTVVMVElMSUJfT1NESVJOQU1FUyA6PSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyMC1vcHRpb25hbC1saWJzdGRjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyMC1vcHRpb25hbC1saWJzdGRjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZjAyMWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDIwLW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2gKQEAgLTAsMCArMSwxMDIgQEAKK0Zyb20gMzA3YzhmZjNlZjY2NmI3YmQ1YWM3MzM4NjNmMmZiYjI3YTlkNTIxZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjEyOjU2ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjAvMzVdIG9wdGlvbmFsIGxpYnN0ZGMKKworZ2NjLXJ1bnRpbWUgYnVpbGRzIGxpYnN0ZGMrKyBzZXBhcmF0ZWx5IGZyb20gZ2NjLWNyb3NzLSouIEl0cyBjb25maWd1cmUgdGVzdHMgdXNpbmcgZysrCit3aWxsIG5vdCBydW4gY29ycmVjdGx5IHNpbmNlIGJ5IGRlZmF1bHQgdGhlIGxpbmtlciB3aWxsIHRyeSB0byBsaW5rIGFnYWluc3QgbGlic3RkYysrCit3aGljaCBzaG91bGRuJ3QgZXhpc3QgeWV0LiBXZSBuZWVkIGFuIG9wdGlvbiB0byBkaXNhYmxlIC1sc3RkYysrCitvcHRpb24gd2hpbHN0IGxlYXZpbmcgLWxjLCAtbGdjYyBhbmQgb3RoZXIgYXV0b21hdGljIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGFkZGVkIGJ5IGdjYworZHJpdmVyLiBUaGlzIHBhdGNoIGFkZHMgc3VjaCBhbiBvcHRpb24gd2hpY2ggb25seSBkaXNhYmxlcyB0aGUgLWxzdGRjKysuCisKK0EgInN0YW5kYXJkIiBnY2MgYnVpbGQgdXNlcyB4Z2NjIGFuZCBoZW5jZSBhdm9pZHMgdGhpcy4gV2Ugc2hvdWxkIGFzayB1cHN0cmVhbSBob3cgdG8KK2RvIHRoaXMgb2ZmaWNpYWxseSwgdGhlIGxpa2VseSBhbnN3ZXIgaXMgZG9uJ3QgYnVpbGQgbGlic3RkYysrIHNlcGFyYXRlbHkuCisKK1JQIDI5LzYvMTAKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGdjYy9jLWZhbWlseS9jLm9wdCAgfCAgICA0ICsrKysKKyBnY2MvY3AvZysrc3BlYy5jICAgIHwgICAgMSArCisgZ2NjL2RvYy9pbnZva2UudGV4aSB8ICAgIDkgKysrKysrKy0tCisgZ2NjL2djYy5jICAgICAgICAgICB8ICAgIDEgKworIDQgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jLWZhbWlseS9jLm9wdCBiL2djYy9jLWZhbWlseS9jLm9wdAoraW5kZXggMTBhZTg0ZC4uZGMzZmZkZiAxMDA2NDQKKy0tLSBhL2djYy9jLWZhbWlseS9jLm9wdAorKysrIGIvZ2NjL2MtZmFtaWx5L2Mub3B0CitAQCAtMTI5OSw2ICsxMjk5LDEwIEBAIG5vc3RkaW5jKysKKyBDKysgT2JqQysrCisgRG8gbm90IHNlYXJjaCBzdGFuZGFyZCBzeXN0ZW0gaW5jbHVkZSBkaXJlY3RvcmllcyBmb3IgQysrCisgCisrbm9zdGRsaWIrKworK0RyaXZlcgorK0RvIG5vdCBsaW5rIHN0YW5kYXJkIEMrKyBydW50aW1lIGxpYnJhcnkKKysKKyBvCisgQyBPYmpDIEMrKyBPYmpDKysgSm9pbmVkIFNlcGFyYXRlCisgOyBEb2N1bWVudGVkIGluIGNvbW1vbi5vcHQKK2RpZmYgLS1naXQgYS9nY2MvY3AvZysrc3BlYy5jIGIvZ2NjL2NwL2crK3NwZWMuYworaW5kZXggYjg5NmVlYS4uZjU1MjE2YiAxMDA2NDQKKy0tLSBhL2djYy9jcC9nKytzcGVjLmMKKysrKyBiL2djYy9jcC9nKytzcGVjLmMKK0BAIC0xMjYsNiArMTI2LDcgQEAgbGFuZ19zcGVjaWZpY19kcml2ZXIgKHN0cnVjdCBjbF9kZWNvZGVkX29wdGlvbiAqKmluX2RlY29kZWRfb3B0aW9ucywKKyAgICAgICBzd2l0Y2ggKGRlY29kZWRfb3B0aW9uc1tpXS5vcHRfaW5kZXgpCisgCXsKKyAJY2FzZSBPUFRfbm9zdGRsaWI6CisrCWNhc2UgT1BUX25vc3RkbGliX186CisgCWNhc2UgT1BUX25vZGVmYXVsdGxpYnM6CisgCSAgbGlicmFyeSA9IC0xOworIAkgIGJyZWFrOworZGlmZiAtLWdpdCBhL2djYy9kb2MvaW52b2tlLnRleGkgYi9nY2MvZG9jL2ludm9rZS50ZXhpCitpbmRleCBhMDIyNjIyLi5mMTVjOTkxIDEwMDY0NAorLS0tIGEvZ2NjL2RvYy9pbnZva2UudGV4aQorKysrIGIvZ2NjL2RvYy9pbnZva2UudGV4aQorQEAgLTE5MCw3ICsxOTAsNyBAQCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLgorIC1mcmVwbyAgLWZuby1ydHRpICAtZnN0YXRzICAtZnRlbXBsYXRlLWJhY2t0cmFjZS1saW1pdD1AdmFye259IEBnb2wKKyAtZnRlbXBsYXRlLWRlcHRoPUB2YXJ7bn0gQGdvbAorIC1mbm8tdGhyZWFkc2FmZS1zdGF0aWNzIC1mdXNlLWN4YS1hdGV4aXQgIC1mbm8td2VhayAgLW5vc3RkaW5jKysgQGdvbAorLS1mbm8tZGVmYXVsdC1pbmxpbmUgIC1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbiBAZ29sCisrLW5vc3RkbGliKysgLWZuby1kZWZhdWx0LWlubGluZSAgLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIEBnb2wKKyAtZnZpc2liaWxpdHktbXMtY29tcGF0IEBnb2wKKyAtZmV4dC1udW1lcmljLWxpdGVyYWxzIEBnb2wKKyAtV2FiaSAgLVdjb252ZXJzaW9uLW51bGwgIC1XY3Rvci1kdG9yLXByaXZhY3kgQGdvbAorQEAgLTQ1Myw3ICs0NTMsNyBAQCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0c30uCisgLW5vc3RhcnRmaWxlcyAgLW5vZGVmYXVsdGxpYnMgIC1ub3N0ZGxpYiAtcGllIC1yZHluYW1pYyBAZ29sCisgLXMgIC1zdGF0aWMgLXN0YXRpYy1saWJnY2MgLXN0YXRpYy1saWJzdGRjKysgQGdvbAorIC1zdGF0aWMtbGliYXNhbiAtc3RhdGljLWxpYnRzYW4gQGdvbAorLS1zaGFyZWQgLXNoYXJlZC1saWJnY2MgIC1zeW1ib2xpYyBAZ29sCisrLXNoYXJlZCAtc2hhcmVkLWxpYmdjYyAgLXN5bWJvbGljIC1ub3N0ZGxpYisrIEBnb2wKKyAtVCBAdmFye3NjcmlwdH0gIC1XbCxAdmFye29wdGlvbn0gIC1YbGlua2VyIEB2YXJ7b3B0aW9ufSBAZ29sCisgLXUgQHZhcntzeW1ib2x9fQorIAorQEAgLTk4ODYsNiArOTg4NiwxMSBAQCBUaGVzZSBlbnRyaWVzIGFyZSB1c3VhbGx5IHJlc29sdmVkIGJ5IGVudHJpZXMgaW4KKyBsaWJjLiAgVGhlc2UgZW50cnkgcG9pbnRzIHNob3VsZCBiZSBzdXBwbGllZCB0aHJvdWdoIHNvbWUgb3RoZXIKKyBtZWNoYW5pc20gd2hlbiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQuCisgCisrQGl0ZW0gLW5vc3RkbGliKysKKytAb3BpbmRleCBub3N0ZGxpYisrCisrRG8gbm90IHVzZSB0aGUgc3RhbmRhcmQgc3lzdGVtIEMrKyBydW50aW1lIGxpYnJhcmllcyB3aGVuIGxpbmtpbmcuCisrT25seSB0aGUgbGlicmFyaWVzIHlvdSBzcGVjaWZ5IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBsaW5rZXIuCisrCisgQGNpbmRleCBAb3B0aW9uey1sZ2NjfSwgdXNlIHdpdGggQG9wdGlvbnstbm9zdGRsaWJ9CisgQGNpbmRleCBAb3B0aW9uey1ub3N0ZGxpYn0gYW5kIHVucmVzb2x2ZWQgcmVmZXJlbmNlcworIEBjaW5kZXggdW5yZXNvbHZlZCByZWZlcmVuY2VzIGFuZCBAb3B0aW9uey1ub3N0ZGxpYn0KK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IGVmZGI2MjUuLjQ3Nzc1MmYgMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTc0OCw2ICs3NDgsNyBAQCBwcm9wZXIgcG9zaXRpb24gYW1vbmcgdGhlIG90aGVyIG91dHB1dCBmaWxlcy4gICovCisgICAgICUobWZsaWIpICIgU1RBQ0tfU1BMSVRfU1BFQyAiXAorICAgICAle2Zwcm9maWxlLWFyY3N8ZnByb2ZpbGUtZ2VuZXJhdGUqfGNvdmVyYWdlOi1sZ2Nvdn0gIiBTQU5JVElaRVJfU1BFQyAiIFwKKyAgICAgJXshbm9zdGRsaWI6JXshbm9kZWZhdWx0bGliczolKGxpbmtfc3NwKSAlKGxpbmtfZ2NjX2Nfc2VxdWVuY2UpfX1cCisrICAgICV7IW5vc3RkbGliKys6fVwKKyAgICAgJXshbm9zdGRsaWI6JXshbm9zdGFydGZpbGVzOiVFfX0gJXtUKn0gfX19fX19IgorICNlbmRpZgorIAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDIxLWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjEtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViM2M2MWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDIxLWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaApAQCAtMCwwICsxLDU5IEBACitGcm9tIDAwNDY5NmUwNTRhZTlkYzcxZDUxMmNjNzU1Y2NjNDA3NGZjNjJiMmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxNDoyMCArMDQwMAorU3ViamVjdDogW1BBVENIIDIxLzM1XSBnY2M6IGRpc2FibGUgTUFTS19SRUxBWF9QSUNfQ0FMTFMgYml0CisKK1RoZSBuZXcgZmVhdHVyZSBhZGRlZCBhZnRlciA0LjMuMworImh0dHA6Ly93d3cucHViYnMubmV0LzIwMDkwOS9nY2MvOTQwNDgtcGF0Y2gtYWRkLXN1cHBvcnQtZm9yLXJtaXBzamFsci5odG1sIgord2lsbCBjYXVzZSBjYzFwbHVzIGVhdCB1cCBhbGwgdGhlIHN5c3RlbSBtZW1vcnkgd2hlbiBidWlsZCB3ZWJraXQtZ3RrLgorVGhlIGZ1bmN0aW9uIG1pcHNfZ2V0X3BpY19jYWxsX3N5bWJvbCBrZWVwcyBvbiByZWN1cnNpdmVseSBjYWxsaW5nIGl0c2VsZi4KK0Rpc2FibGUgdGhpcyBmZWF0dXJlIHRvIHdhbGsgYXNpZGUgdGhlIGJ1Zy4KKworU2lnbmVkLW9mZi1ieTogRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKy0tLQorIGdjYy9jb25maWd1cmUgICAgfCAgICA3IC0tLS0tLS0KKyBnY2MvY29uZmlndXJlLmFjIHwgICAgNyAtLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCBiNjVkMjFkLi5iZGFiNDVhIDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTI1ODI5LDEzICsyNTgyOSw2IEBAICRhc19lY2hvX24gImNoZWNraW5nIGFzc2VtYmxlciBhbmQgbGlua2VyIGZvciBleHBsaWNpdCBKQUxSIHJlbG9jYXRpb24uLi4gIiA+JjY7CisgICAgICAgICBybSAtZiBjb25mdGVzdC4qCisgICAgICAgZmkKKyAgICAgZmkKKy0gICAgaWYgdGVzdCAkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MgPSB5ZXM7IHRoZW4KKy0gICAgICBpZiB0ZXN0IHgkdGFyZ2V0X2NwdV9kZWZhdWx0ID0geDsgdGhlbgorLSAgICAgICAgdGFyZ2V0X2NwdV9kZWZhdWx0PU1BU0tfUkVMQVhfUElDX0NBTExTCistICAgICAgZWxzZQorLSAgICAgICAgdGFyZ2V0X2NwdV9kZWZhdWx0PSIoJHRhcmdldF9jcHVfZGVmYXVsdCl8TUFTS19SRUxBWF9QSUNfQ0FMTFMiCistICAgICAgZmkKKy0gICAgZmkKKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyIgPiY1CisgJGFzX2VjaG8gIiRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyIgPiY2OyB9CisgCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IGUyMjZiODUuLjVmNWM5MDkgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtNDA5OSwxMyArNDA5OSw2IEBAIHg6CisgICAgICAgICBybSAtZiBjb25mdGVzdC4qCisgICAgICAgZmkKKyAgICAgZmkKKy0gICAgaWYgdGVzdCAkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MgPSB5ZXM7IHRoZW4KKy0gICAgICBpZiB0ZXN0IHgkdGFyZ2V0X2NwdV9kZWZhdWx0ID0geDsgdGhlbgorLSAgICAgICAgdGFyZ2V0X2NwdV9kZWZhdWx0PU1BU0tfUkVMQVhfUElDX0NBTExTCistICAgICAgZWxzZQorLSAgICAgICAgdGFyZ2V0X2NwdV9kZWZhdWx0PSIoJHRhcmdldF9jcHVfZGVmYXVsdCl8TUFTS19SRUxBWF9QSUNfQ0FMTFMiCistICAgICAgZmkKKy0gICAgZmkKKyAgICAgQUNfTVNHX1JFU1VMVCgkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MpCisgCisgICAgIEFDX0NBQ0hFX0NIRUNLKFtsaW5rZXIgZm9yIC5laF9mcmFtZSBwZXJzb25hbGl0eSByZWxheGF0aW9uXSwKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyMi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyMi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYzhhYmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDIyLUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSA3ZjVjOWRjYzcxYzhiODNhMGI1NTk2MjY2Y2M0YmRmMDkzNmU4ZTAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTY6MjggKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMi8zNV0gQ09MTEVDVF9HQ0NfT1BUSU9OUworCitUaGlzIHBhdGNoIGFkZHMgLS1zeXNyb290IGludG8gQ09MTEVDVF9HQ0NfT1BUSU9OUyB3aGljaCBpcyB1c2VkIHRvCitpbnZva2UgY29sbGVjdDIuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2djYy5jIHwgICAgOSArKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IDQ3Nzc1MmYuLjUxMDYyYWEgMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTQwOTgsNiArNDA5OCwxNSBAQCBzZXRfY29sbGVjdF9nY2Nfb3B0aW9ucyAodm9pZCkKKyAJCXNpemVvZiAoIkNPTExFQ1RfR0NDX09QVElPTlM9IikgLSAxKTsKKyAKKyAgIGZpcnN0X3RpbWUgPSBUUlVFOworKyNpZmRlZiBIQVZFX0xEX1NZU1JPT1QKKysgIGlmICh0YXJnZXRfc3lzdGVtX3Jvb3RfY2hhbmdlZCAmJiB0YXJnZXRfc3lzdGVtX3Jvb3QpCisrICAgIHsKKysgICAgICBvYnN0YWNrX2dyb3cgKCZjb2xsZWN0X29ic3RhY2ssICInLS1zeXNyb290PSIsIHNpemVvZigiJy0tc3lzcm9vdD0iKS0xKTsKKysgICAgICBvYnN0YWNrX2dyb3cgKCZjb2xsZWN0X29ic3RhY2ssIHRhcmdldF9zeXN0ZW1fcm9vdCxzdHJsZW4odGFyZ2V0X3N5c3RlbV9yb290KSk7CisrICAgICAgb2JzdGFja19ncm93ICgmY29sbGVjdF9vYnN0YWNrLCAiJyIsIDEpOworKyAgICAgIGZpcnN0X3RpbWUgPSBGQUxTRTsKKysgICAgfQorKyNlbmRpZgorICAgZm9yIChpID0gMDsgKGludCkgaSA8IG5fc3dpdGNoZXM7IGkrKykKKyAgICAgeworICAgICAgIGNvbnN0IGNoYXIgKmNvbnN0ICphcmdzOworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDIzLVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyMy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTQ0MzVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyMy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaApAQCAtMCwwICsxLDg4IEBACitGcm9tIDQ2ZDUyNDM5MDUyZjA4NzZhOTJkY2Y4YTBhYjljNjBkNzVjODAzMGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxNzoyNSArMDQwMAorU3ViamVjdDogW1BBVENIIDIzLzM1XSBVc2UgdGhlIGRlZmF1bHRzLmggaW4gJHtCfSBpbnN0ZWFkIG9mICR7U30sIGFuZCB0LW9lCisgaW4gJHtCfQorCitVc2UgdGhlIGRlZmF1bHRzLmggaW4gJHtCfSBpbnN0ZWFkIG9mICR7U30sIGFuZCB0LW9lIGluICR7Qn0sIHNvIHRoYXQKK3RoZSBzb3VyY2UgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGdjYy1jcm9zcy1pbml0aWFsLAorZ2NjLWNyb3NzLWludGVybWVkaWF0ZSwgZ2NjLWNyb3NzLCBnY2MtcnVudGltZSwgYW5kIGFsc28gdGhlIHNkayBidWlsZC4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvTWFrZWZpbGUuaW4gIHwgICAgMiArLQorIGdjYy9jb25maWd1cmUgICAgfCAgICA0ICsrLS0KKyBnY2MvY29uZmlndXJlLmFjIHwgICAgNCArKy0tCisgZ2NjL21rY29uZmlnLnNoICB8ICAgIDQgKystLQorIDQgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL01ha2VmaWxlLmluIGIvZ2NjL01ha2VmaWxlLmluCitpbmRleCA5MGEyYmJhLi4yMzIwNDk3IDEwMDY0NAorLS0tIGEvZ2NjL01ha2VmaWxlLmluCisrKysgYi9nY2MvTWFrZWZpbGUuaW4KK0BAIC00NjksNyArNDY5LDcgQEAgVEFSR0VUX1NZU1RFTV9ST09UID0gQFRBUkdFVF9TWVNURU1fUk9PVEAKKyBUQVJHRVRfU1lTVEVNX1JPT1RfREVGSU5FID0gQFRBUkdFVF9TWVNURU1fUk9PVF9ERUZJTkVACisgCisgeG1ha2VfZmlsZT1AeG1ha2VfZmlsZUAKKy10bWFrZV9maWxlPUB0bWFrZV9maWxlQAorK3RtYWtlX2ZpbGU9QHRtYWtlX2ZpbGVAIC4vdC1vZQorIFRNX0VORElBTl9DT05GSUc9QFRNX0VORElBTl9DT05GSUdACisgVE1fTVVMVElMSUJfQ09ORklHPUBUTV9NVUxUSUxJQl9DT05GSUdACisgVE1fTVVMVElMSUJfRVhDRVBUSU9OU19DT05GSUc9QFRNX01VTFRJTElCX0VYQ0VQVElPTlNfQ09ORklHQAorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCBiZGFiNDVhLi5kNTg3OTkzIDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTExNTM5LDggKzExNTM5LDggQEAgZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCisgICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgorICAgICAgICA7OworICAgICBkZWZhdWx0cy5oICkKKy0gICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS8kZiIKKy0gICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vJGYiCisrICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vJGYiCisgICAgICAgIDs7CisgICAgICogKQorICAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggNWY1YzkwOS4uNWU1ZTg0ZiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC0xNzIwLDggKzE3MjAsOCBAQCBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisgICAgICAgIDs7CisgICAgIGRlZmF1bHRzLmggKQorLSAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpLyRmIgorLSAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi8kZiIKKyAgICAgICAgOzsKKyAgICAgKiApCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvY29uZmlnLyRmIgorZGlmZiAtLWdpdCBhL2djYy9ta2NvbmZpZy5zaCBiL2djYy9ta2NvbmZpZy5zaAoraW5kZXggMjlmZGZjNy4uZTA0OGRjZSAxMDA2NDQKKy0tLSBhL2djYy9ta2NvbmZpZy5zaAorKysrIGIvZ2NjL21rY29uZmlnLnNoCitAQCAtNzcsNyArNzcsNyBAQCBpZiBbIC1uICIkSEVBREVSUyIgXTsgdGhlbgorICAgICBpZiBbICQjIC1nZSAxIF07IHRoZW4KKyAJZWNobyAnI2lmZGVmIElOX0dDQycgPj4gJHtvdXRwdXR9VAorIAlmb3IgZmlsZSBpbiAiJEAiOyBkbworLQkgICAgaWYgdGVzdCB4IiRmaWxlIiA9IHgiZGVmYXVsdHMuaCI7IHRoZW4KKysJICAgIGlmIHRlc3QgeCIkZmlsZSIgPSB4Ii4vZGVmYXVsdHMuaCI7IHRoZW4KKyAJCXBvc3Rwb25lX2RlZmF1bHRzX2g9InllcyIKKyAJICAgIGVsc2UKKyAJCWVjaG8gIiMgaW5jbHVkZSBcIiRmaWxlXCIiID4+ICR7b3V0cHV0fVQKK0BAIC0xMDMsNyArMTAzLDcgQEAgZXNhYworIAorICMgSWYgd2UgcG9zdHBvbmVkIGluY2x1ZGluZyBkZWZhdWx0cy5oLCBhZGQgdGhlICNpbmNsdWRlIG5vdy4KKyBpZiB0ZXN0IHgiJHBvc3Rwb25lX2RlZmF1bHRzX2giID0geCJ5ZXMiOyB0aGVuCistICAgIGVjaG8gIiMgaW5jbHVkZSBcImRlZmF1bHRzLmhcIiIgPj4gJHtvdXRwdXR9VAorKyAgICBlY2hvICIjIGluY2x1ZGUgXCIuL2RlZmF1bHRzLmhcIiIgPj4gJHtvdXRwdXR9VAorIGZpCisgCisgIyBBZGQgbXVsdGlwbGUgaW5jbHVzaW9uIHByb3RlY3Rpb24gZ3VhcmQsIHBhcnQgdHdvLgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI0LVBSLXRhcmdldC0zMjIxOS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjQtUFItdGFyZ2V0LTMyMjE5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0N2Q4NDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI0LVBSLXRhcmdldC0zMjIxOS5wYXRjaApAQCAtMCwwICsxLDY3IEBACitGcm9tIGUwZDE1ZjRmOGJmMjhjMzUxYjkyMTVjYTM3ZjFjYWEyNGRmMGUxZmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxODo1NCArMDQwMAorU3ViamVjdDogW1BBVENIIDI0LzM1XSBQUiB0YXJnZXQvMzIyMTkKKworKiB2YXJhc20uYyAoZGVmYXVsdF9iaW5kc19sb2NhbF9wXzEpOiBXZWFrIGRhdGEgaXMgbm90IGxvY2FsLgorCitTaWduZWQtb2ZmLWJ5OiBCZXJuaGFyZCBSZXV0bmVyLUZpc2NoZXIgPHJlcC5kb3Qubm9wQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKy0tLQorIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3Zpc2liaWxpdHktMjEuYyB8ICAgMTQgKysrKysrKysrKysrKysKKyBnY2MvdmFyYXNtLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA5ICsrKystLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmlzaWJpbGl0eS0yMS5jCisKK2RpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92aXNpYmlsaXR5LTIxLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92aXNpYmlsaXR5LTIxLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iZTdkZWRhCistLS0gL2Rldi9udWxsCisrKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92aXNpYmlsaXR5LTIxLmMKK0BAIC0wLDAgKzEsMTQgQEAKKysvKiBQUiB0YXJnZXQvMzIyMTkgKi8KKysvKiB7IGRnLWRvIHJ1biB9ICovCisrLyogeyBkZy1yZXF1aXJlLXZpc2liaWxpdHkgIiIgfSAqLworKy8qIHsgZGctb3B0aW9ucyAiLWZQSUMiIHsgdGFyZ2V0IGZwaWMgfSB9ICovCisrCisrZXh0ZXJuIHZvaWQgZigpIF9fYXR0cmlidXRlX18oKHdlYWssdmlzaWJpbGl0eSgiaGlkZGVuIikpKTsKKytleHRlcm4gaW50IHB1dHMoIGNoYXIgY29uc3QqICk7CisraW50IG1haW4oKQorK3sKKysJaWYgKGYpCisrCQlmKCk7CisrCXJldHVybiAwOworK30KKysKK2RpZmYgLS1naXQgYS9nY2MvdmFyYXNtLmMgYi9nY2MvdmFyYXNtLmMKK2luZGV4IDY2NDgxMDMuLmZhZGJhNzggMTAwNjQ0CistLS0gYS9nY2MvdmFyYXNtLmMKKysrKyBiL2djYy92YXJhc20uYworQEAgLTY2NzUsNiArNjY3NSwxMCBAQCBkZWZhdWx0X2JpbmRzX2xvY2FsX3BfMSAoY29uc3RfdHJlZSBleHAsIGludCBzaGxpYikKKyAgIC8qIFN0YXRpYyB2YXJpYWJsZXMgYXJlIGFsd2F5cyBsb2NhbC4gICovCisgICBlbHNlIGlmICghIFRSRUVfUFVCTElDIChleHApKQorICAgICBsb2NhbF9wID0gdHJ1ZTsKKysgIC8qIGhpZGRlbiB3ZWFrIGNhbid0IGJlIG92ZXJyaWRkZW4gYnkgc29tZXRoaW5nIG5vbi1sb2NhbCwgYWxsCisrICAgICB0aGF0IGlzIHBvc3NpYmxlIGlzIHRoYXQgaXQgaXMgbm90IGRlZmluZWQgYXQgYWxsLiAqLworKyAgZWxzZSBpZiAoREVDTF9XRUFLIChleHApKQorKyAgICBsb2NhbF9wID0gZmFsc2U7CisgICAvKiBBIHZhcmlhYmxlIGlzIGxvY2FsIGlmIHRoZSB1c2VyIGhhcyBzYWlkIGV4cGxpY2l0bHkgdGhhdCBpdCB3aWxsCisgICAgICBiZS4gICovCisgICBlbHNlIGlmICgoREVDTF9WSVNJQklMSVRZX1NQRUNJRklFRCAoZXhwKQorQEAgLTY2ODgsMTEgKzY2OTIsNiBAQCBkZWZhdWx0X2JpbmRzX2xvY2FsX3BfMSAoY29uc3RfdHJlZSBleHAsIGludCBzaGxpYikKKyAgICAgIGxvY2FsLiAgKi8KKyAgIGVsc2UgaWYgKERFQ0xfVklTSUJJTElUWSAoZXhwKSAhPSBWSVNJQklMSVRZX0RFRkFVTFQpCisgICAgIGxvY2FsX3AgPSB0cnVlOworLSAgLyogRGVmYXVsdCB2aXNpYmlsaXR5IHdlYWsgZGF0YSBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIHN0cm9uZyBzeW1ib2wKKy0gICAgIGluIGFub3RoZXIgbW9kdWxlIGFuZCBzbyBhcmUgbm90IGxvY2FsLiAgKi8KKy0gIGVsc2UgaWYgKERFQ0xfV0VBSyAoZXhwKQorLQkgICAmJiAhcmVzb2x2ZWRfbG9jYWxseSkKKy0gICAgbG9jYWxfcCA9IGZhbHNlOworICAgLyogSWYgUElDLCB0aGVuIGFzc3VtZSB0aGF0IGFueSBnbG9iYWwgbmFtZSBjYW4gYmUgb3ZlcnJpZGRlbiBieQorICAgICAgc3ltYm9scyByZXNvbHZlZCBmcm9tIG90aGVyIG1vZHVsZXMuICAqLworICAgZWxzZSBpZiAoc2hsaWIpCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjUtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI1LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNzkxNGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI1LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gYWY4YTU2ZWE0ZTE3YjI5MDllZmYyYzU3NzA0YWI0M2VmMjRmMjhkMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIwOjAxICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjUvMzVdIGZvcnRyYW4gY3Jvc3MtY29tcGlsZSBoYWNrLgorCisqIEZvcnRyYW4gd291bGQgaGF2ZSBzZWFyY2hlZCBmb3IgYXJtLWFuZ3N0cm9tLWdudWVhYmktZ2ZvcnRyYW4gYnV0IHdvdWxkIGhhdmUgdXNlZAordXNlZCBnZm9ydGFuLiBGb3IgZ2NjXzQuMi4yLmJiIHdlIHdhbnQgdG8gdXNlIHRoZSBnZm9ydHJhbiBjb21waWxlciBmcm9tIG91ciBjcm9zcworZGlyZWN0b3J5LgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgbGliZ2ZvcnRyYW4vY29uZmlndXJlICAgIHwgICAgMiArLQorIGxpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYyB8ICAgIDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZSBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQoraW5kZXggODM4NWU5Ni4uYjhmN2E5MiAxMDA3NTUKKy0tLSBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQorKysrIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlCitAQCAtMTI3MDQsNyArMTI3MDQsNyBAQCBlc2FjCisgCisgIyBXZSBuZWVkIGdmb3J0cmFuIHRvIGNvbXBpbGUgcGFydHMgb2YgdGhlIGxpYnJhcnkKKyAjQUNfUFJPR19GQyhnZm9ydHJhbikKKy1GQz0iJEdGT1JUUkFOIgorKyNGQz0iJEdGT1JUUkFOIgorIGFjX2V4dD0ke2FjX2ZjX3NyY2V4dC1mfQorIGFjX2NvbXBpbGU9JyRGQyAtYyAkRkNGTEFHUyAkYWNfZmNmbGFnc19zcmNleHQgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisgYWNfbGluaz0nJEZDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkRkNGTEFHUyAkTERGTEFHUyAkYWNfZmNmbGFnc19zcmNleHQgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCitkaWZmIC0tZ2l0IGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjCitpbmRleCA3ZDk3ZmVkLi4zZjlmNDg0IDEwMDY0NAorLS0tIGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjCisrKysgYi9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKK0BAIC0yMjcsNyArMjI3LDcgQEAgQUNfU1VCU1QoZW5hYmxlX3N0YXRpYykKKyAKKyAjIFdlIG5lZWQgZ2ZvcnRyYW4gdG8gY29tcGlsZSBwYXJ0cyBvZiB0aGUgbGlicmFyeQorICNBQ19QUk9HX0ZDKGdmb3J0cmFuKQorLUZDPSIkR0ZPUlRSQU4iCisrI0ZDPSIkR0ZPUlRSQU4iCisgQUNfUFJPR19GQyhnZm9ydHJhbikKKyAKKyAjIGV4dHJhIExEIEZsYWdzIHdoaWNoIGFyZSByZXF1aXJlZCBmb3IgdGFyZ2V0cworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI2LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyNi1saWJnY2Mtc2psai1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGVmYWI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyNi1saWJnY2Mtc2psai1jaGVjay5wYXRjaApAQCAtMCwwICsxLDc0IEBACitGcm9tIDA4YzIzOTg0NDVlNmNhYzI4MjQ4OGY2NGFlNmJmMjljYmNkOGRiMjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMDo1MCArMDQwMAorU3ViamVjdDogW1BBVENIIDI2LzM1XSBsaWJnY2Mtc2psai1jaGVjaworCithY19mbl9jX3RyeV9jb21waWxlIGRvZXNudCBzZWVtIHRvIGtlZXAgdGhlIGludGVybWVkaWF0ZSBmaWxlcword2hpY2ggYXJlIG5lZWRlZCBmb3Igc2psaiB0ZXN0IHRvIHBhc3Mgc2luY2UgaXQgZ3JlcHMgaW50byB0aGUKK2dlbmVyYXRlZCBmaWxlLiBTbyB3ZSBydW4gdGhlIGNvbXBpbGVyIGNvbW1hbmQgdXNpbmcgQUNfVFJZX0NPTU1BTkQKK3doaWNoIHRoZW4gZ2VuZXJhdGVzIHRoZSBuZWVkZWQgLnMgZmlsZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYmdjYy9jb25maWd1cmUgICAgfCAgIDEwICsrKysrKy0tLS0KKyBsaWJnY2MvY29uZmlndXJlLmFjIHwgICAxMCArKysrLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmdjYy9jb25maWd1cmUgYi9saWJnY2MvY29uZmlndXJlCitpbmRleCAxNDI1ZGY2Li5kMThlM2NiIDEwMDY0NAorLS0tIGEvbGliZ2NjL2NvbmZpZ3VyZQorKysrIGIvbGliZ2NjL2NvbmZpZ3VyZQorQEAgLTQyMDgsMTcgKzQyMDgsMTkgQEAgdm9pZCBmb28gKCkKKyB9CisgCisgX0FDRU9GCistQ0ZMQUdTX2hvbGQ9JENGTEFHUworLUNGTEFHUz0iLS1zYXZlLXRlbXBzIC1mZXhjZXB0aW9ucyIKKyBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz11bmtub3duCistaWYgYWNfZm5fY190cnlfY29tcGlsZTsgdGhlbiA6CisraWYgeyBhY190cnk9JyR7Q0MtY2N9IC1mZXhjZXB0aW9ucyAtUyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LnMgMT4mNScKKysgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY190cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbgorICAgaWYgZ3JlcCBfVW53aW5kX1NqTGpfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXllcworICAgZWxpZiBncmVwIF9VbndpbmRfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPW5vCisgICBmaQorIGZpCistQ0ZMQUdTPSRDRkxBR1NfaG9sZAorIHJtIC1mIGNvbmZ0ZXN0KgorIAorIGZpCitkaWZmIC0tZ2l0IGEvbGliZ2NjL2NvbmZpZ3VyZS5hYyBiL2xpYmdjYy9jb25maWd1cmUuYWMKK2luZGV4IDhiN2FiYTUuLmM3Yzk2NDQgMTAwNjQ0CistLS0gYS9saWJnY2MvY29uZmlndXJlLmFjCisrKysgYi9saWJnY2MvY29uZmlndXJlLmFjCitAQCAtMjE2LDE2ICsyMTYsMTQgQEAgdm9pZCBmb28gKCkKKyAgIGJhcigpOworIH0KKyBdKV0pCistQ0ZMQUdTX2hvbGQ9JENGTEFHUworLUNGTEFHUz0iLS1zYXZlLXRlbXBzIC1mZXhjZXB0aW9ucyIKKyBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz11bmtub3duCistQVNfSUYoW2FjX2ZuX2NfdHJ5X2NvbXBpbGVdLAorLSAgW2lmIGdyZXAgX1Vud2luZF9TakxqX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorK2lmIEFDX1RSWV9DT01NQU5EKCR7Q0MtY2N9IC1mZXhjZXB0aW9ucyAtUyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LnMgMT4mQVNfTUVTU0FHRV9MT0dfRkQpOyB0aGVuCisrICBpZiBncmVwIF9VbndpbmRfU2pMal9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9eWVzCisgICBlbGlmIGdyZXAgX1Vud2luZF9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9bm8KKy0gIGZpXSkKKy1DRkxBR1M9JENGTEFHU19ob2xkCisrICBmaQorK2ZpCisgcm0gLWYgY29uZnRlc3QqCisgXSkKKyAKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyNy1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjctY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVlOTUyMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjctY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSBhMGY5YmQwOWM4MTZhZDI5ZWNmN2MyOWQ2YzI3ZjdkZjk3NzEwMzY0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjI6MDAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNy8zNV0gY3BwOiBob25vciBzeXNyb290LgorCitDdXJyZW50bHksIGlmIHRoZSBnY2MgdG9vbGNoYWluIGlzIHJlbG9jYXRlZCBhbmQgaW5zdGFsbGVkIGZyb20gc3N0YXRlLCB0aGVuIHlvdSB0cnkgYW5kIGNvbXBpbGUKK3ByZXByb2Nlc3NlZCBzb3VyY2UgKC5pIG9yIC5paSBmaWxlcyksIHRoZSBjb21waWxlciB3aWxsIHRyeSBhbmQgYWNjZXNzIHRoZSBidWlsdGluIHN5c3Jvb3QgbG9jYXRpb24KK3JhdGhlciB0aGFuIHRoZSAtLXN5c3Jvb3Qgb3B0aW9uIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZGxpbmUuIElmIGFjY2VzcyB0byB0aGF0IGRpcmVjdG9yeSBpcworcGVybWlzc2lvbiBkZW5pZWQgKHVucmVhZGFibGUpLCBnY2Mgd2lsbCBlcnJvci4KKworVGhpcyBoYXBwZW5zIHdoZW4gY2NhY2hlIGlzIGluIHVzZSBkdWUgdG8gdGhlIGZhY3QgaXQgdXNlcyBwcmVwcm9jZXNzZWQgc291cmNlIGZpbGVzLgorCitUaGUgZml4IGJlbG93IGFkZHMgJUkgdG8gdGhlIGNwcC1vdXRwdXQgc3BlYyBtYWNybyBzbyB0aGUgZGVmYXVsdCBzdWJzdGl0dXRpb25zIGZvciAtaXByZWZpeCwKKy1pc3lzdGVtLCAtaXN5c3Jvb3QgaGFwcGVuIGFuZCB0aGUgY29ycmVjdCBzeXNyb290IGlzIHVzZWQuCisKK1tZT0NUTyAjMjA3NF0KKworUlAgMjAxMi8wNC8xMworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jcC9sYW5nLXNwZWNzLmggfCAgICAyICstCisgZ2NjL2djYy5jICAgICAgICAgICB8ICAgIDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jcC9sYW5nLXNwZWNzLmggYi9nY2MvY3AvbGFuZy1zcGVjcy5oCitpbmRleCBhMDAxYzNlLi4xYWFlMWU0IDEwMDY0NAorLS0tIGEvZ2NjL2NwL2xhbmctc3BlY3MuaAorKysrIGIvZ2NjL2NwL2xhbmctc3BlY3MuaAorQEAgLTYzLDUgKzYzLDUgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAgIHsiLmlpIiwgIkBjKystY3BwLW91dHB1dCIsIDAsIDAsIDB9LAorICAgeyJAYysrLWNwcC1vdXRwdXQiLAorICAgICIleyFNOiV7IU1NOiV7IUU6XAorLSAgICBjYzFwbHVzIC1mcHJlcHJvY2Vzc2VkICVpICUoY2MxX29wdGlvbnMpICUyXAorKyAgICBjYzFwbHVzIC1mcHJlcHJvY2Vzc2VkICVpICVJICUoY2MxX29wdGlvbnMpICUyXAorICAgICAleyFmc3ludGF4LW9ubHk6JShpbnZva2VfYXMpfX19fSIsIDAsIDAsIDB9LAorZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggNTEwNjJhYS4uY2Y2Yjk5ZSAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtMTA0Miw3ICsxMDQyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb21waWxlciBkZWZhdWx0X2NvbXBpbGVyc1tdID0KKyAgICAgICAgICAgICAgICAgICAgICVXe28qOi0tb3V0cHV0LXBjaD0lKn19JVZ9fX19fX0iLCAwLCAwLCAwfSwKKyAgIHsiLmkiLCAiQGNwcC1vdXRwdXQiLCAwLCAwLCAwfSwKKyAgIHsiQGNwcC1vdXRwdXQiLAorLSAgICIleyFNOiV7IU1NOiV7IUU6Y2MxIC1mcHJlcHJvY2Vzc2VkICVpICUoY2MxX29wdGlvbnMpICV7IWZzeW50YXgtb25seTolKGludm9rZV9hcyl9fX19IiwgMCwgMCwgMH0sCisrICAgIiV7IU06JXshTU06JXshRTpjYzEgLWZwcmVwcm9jZXNzZWQgJWkgJUkgJShjYzFfb3B0aW9ucykgJXshZnN5bnRheC1vbmx5OiUoaW52b2tlX2FzKX19fX0iLCAwLCAwLCAwfSwKKyAgIHsiLnMiLCAiQGFzc2VtYmxlciIsIDAsIDAsIDB9LAorICAgeyJAYXNzZW1ibGVyIiwKKyAgICAiJXshTToleyFNTToleyFFOiV7IVM6YXMgJShhc21fZGVidWcpICUoYXNtX29wdGlvbnMpICVpICVBIH19fX0iLCAwLCAwLCAwfSwKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyOC1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyOC1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2Mzg3MjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI4LU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSAzMDFlMThkNDcxMWRiNTkyNWU3NjdmYWQwOGRmZmE5Y2ZlMGEyZjFmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjM6MDggKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyOC8zNV0gTUlQUzY0OiBEZWZhdWx0IHRvIE42NCBBQkkKKworTUlQUzY0IGRlZmF1bHRzIHRvIG4zMiBBQkksIHRoaXMgcGF0Y2ggbWFrZXMgaXQKK3NvIHRoYXQgaXQgZGVmYXVsdHMgdG8gTjY0IEFCSQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIGNvbmZpZyBzcGVjaWZpY10KKy0tLQorIGdjYy9jb25maWcuZ2NjIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy5nY2MgYi9nY2MvY29uZmlnLmdjYworaW5kZXggMWEwYmU1MC4uOTg5YzJmYiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcuZ2NjCisrKysgYi9nY2MvY29uZmlnLmdjYworQEAgLTE3OTcsNyArMTc5Nyw3IEBAIG1pcHMqLW10aS1saW51eCopCisgbWlwczY0Ki0qLWxpbnV4KiB8IG1pcHNpc2E2NCotKi1saW51eCopCisgCXRtX2ZpbGU9ImRieGVsZi5oIGVsZm9zLmggZ251LXVzZXIuaCBsaW51eC5oIGdsaWJjLXN0ZGludC5oICR7dG1fZmlsZX0gbWlwcy9nbnUtdXNlci5oIG1pcHMvZ251LXVzZXI2NC5oIG1pcHMvbGludXg2NC5oIG1pcHMvbGludXgtY29tbW9uLmgiCisgCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gbWlwcy90LWxpbnV4NjQiCistCXRtX2RlZmluZXM9IiR7dG1fZGVmaW5lc30gTUlQU19BQklfREVGQVVMVD1BQklfTjMyIgorKwl0bV9kZWZpbmVzPSIke3RtX2RlZmluZXN9IE1JUFNfQUJJX0RFRkFVTFQ9QUJJXzY0IgorIAljYXNlICR7dGFyZ2V0fSBpbgorIAkJbWlwczY0ZWwtc3QtbGludXgtZ251KQorIAkJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gbWlwcy9zdC5oIgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI5LURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI5LURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFhNmQ5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjktRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaApAQCAtMCwwICsxLDIwOSBAQAorRnJvbSAyOWQxMjM0NGZiNjgyYTA1M2RlNTNlYjA4Yjk1NzA0Y2YzYjY3YWYyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjQ6NTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyOS8zNV0gRGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIGFuZCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIKKyByZWxhdGl2ZSB0byBTWVNURU1MSUJTX0RJUgorCitUaGlzIHBhdGNoIGRlZmluZXMgR0xJQkNfRFlOQU1JQ19MSU5LRVIgYW5kIFVDTElCQ19EWU5BTUlDX0xJTktFUgorcmVsYXRpdmUgdG8gU1lTVEVNTElCU19ESVIgd2hpY2ggY2FuIGJlIHNldCBpbiBnZW5lcmF0ZWQgaGVhZGVycworVGhpcyBicmVha3MgdGhlIGFzc3VtcHRpb24gb2YgaGFyZGNvZGVkIG11bHRpbGliIGluIGdjYworQ2hhbmdlIGlzIG9ubHkgZm9yIHRoZSBzdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlcyBpbiBPRSBpbmNsdWRpbmcKK1NILCBzcGFyYywgYWxwaGEgZm9yIHBvc3NpYmxlIGZ1dHVyZSBzdXBwb3J0IChpZiBhbnkpCisKK1JlbW92ZXMgdGhlIGRvX2hlYWRlcmZpeCB0YXNrIGluIG1ldGFkYXRhCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgY29uZmlndXJhdGlvbl0KKy0tLQorIGdjYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmggfCAgICA0ICsrLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggIHwgICAgNCArKy0tCisgZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmggICB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL2kzODYvbGludXguaCAgICAgIHwgICAgMiArLQorIGdjYy9jb25maWcvaTM4Ni9saW51eDY0LmggICAgfCAgICA2ICsrKy0tLQorIGdjYy9jb25maWcvbWlwcy9saW51eC5oICAgICAgfCAgICAyICstCisgZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaCAgICB8ICAgIDggKysrKy0tLS0KKyBnY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmggIHwgICAgOCArKysrLS0tLQorIGdjYy9jb25maWcvc2gvbGludXguaCAgICAgICAgfCAgICAyICstCisgZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oICAgICB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaCAgIHwgICAgNCArKy0tCisgMTEgZmlsZXMgY2hhbmdlZCwgMjIgaW5zZXJ0aW9ucygrKSwgMjIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmgKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAorQEAgLTIzLDggKzIzLDggQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4KKyAjZGVmaW5lIEVYVFJBX1NQRUNTIFwKKyB7ICJlbGZfZHluYW1pY19saW5rZXIiLCBFTEZfRFlOQU1JQ19MSU5LRVIgfSwKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSCSIvbGliL2xkLWxpbnV4LnNvLjIiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUglTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorICNpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19VQ0xJQkMKKyAjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVKSAiJXttZ2xpYmM6IiBHICI7OiIgVSAifSIKKyAjZWxpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19HTElCQworSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCitAQCAtNjgsOCArNjgsOCBAQAorICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgYW5kIFRBUkdFVF9ERUZBVUxUX0ZMT0FUX0FCSS4gICovCisgCisgI3VuZGVmICBHTElCQ19EWU5BTUlDX0xJTktFUgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVCAiL2xpYi9sZC1saW51eC5zby4zIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfSEFSRF9GTE9BVCAiL2xpYi9sZC1saW51eC1hcm1oZi5zby4zIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVCBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMyIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX0hBUkRfRkxPQVQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LWFybWhmLnNvLjMiCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9ERUZBVUxUIEdMSUJDX0RZTkFNSUNfTElOS0VSX1NPRlRfRkxPQVQKKyAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFwKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorQEAgLTU3LDcgKzU3LDcgQEAKKyAKKyAjZGVmaW5lIExJQkdDQ19TUEVDICIle21mbG9hdC1hYmk9c29mdCo6LWxmbG9hdH0gLWxnY2MiCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI2RlZmluZSBMSU5VWF9UQVJHRVRfTElOS19TUEVDICAiJXtoKn0gXAorICAgICV7c3RhdGljOi1Cc3RhdGljfSBcCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcvaTM4Ni9saW51eC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgKK0BAIC0yMCw0ICsyMCw0IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuCisgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OICJlbGZfaTM4NiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAorQEAgLTI3LDYgKzI3LDYgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USQorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT042NCAiZWxmX3g4Nl82NCIKKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OWDMyICJlbGYzMl94ODZfNjQiCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLWxpbnV4LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliNjQvbGQtbGludXgteDg2LTY0LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUlgzMiAiL2xpYngzMi9sZC1saW51eC14MzIuc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1saW51eC14ODYtNjQuc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSWDMyIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC14MzIuc28uMiIKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL21pcHMvbGludXguaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL21pcHMvbGludXguaAorQEAgLTE3LDQgKzE3LDQgQEAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgRworIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLnNvLjEiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQuc28uMSIKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvbWlwcy9saW51eDY0LmgKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaAorQEAgLTIyLDEwICsyMiwxMCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLgorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT042NCAiZWxmNjQle0VCOmJ9JXtFTDpsfXRzbWlwIgorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT05OMzIgImVsZjMyJXtFQjpifSV7RUw6bH10c21pcG4zMiIKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQuc28uMSIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWI2NC9sZC5zby4xIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgIi9saWIzMi9sZC5zby4xIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSTjMyICIvbGliMzIvbGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC5zby4xIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQuc28uMSIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSTjMyIFNZU1RFTUxJQlNfRElSICJsZC5zby4xIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSTjMyIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMCIKKyAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUk4zMiAiL3N5c3RlbS9iaW4vbGlua2VyMzIiCisgI2RlZmluZSBHTlVfVVNFUl9EWU5BTUlDX0xJTktFUk4zMiBcCisgICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIgKEdMSUJDX0RZTkFNSUNfTElOS0VSTjMyLCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIsIFwKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAorQEAgLTM2NiwxNCArMzY2LDE0IEBAIGV4dGVybiBpbnQgZG90X3N5bWJvbHM7CisgI3VuZGVmCUxJTktfT1NfREVGQVVMVF9TUEVDCisgI2RlZmluZSBMSU5LX09TX0RFRkFVTFRfU1BFQyAiJShsaW5rX29zX2xpbnV4KSIKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQuc28uMSIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLnNvLjEiCisgI2lmZGVmIExJTlVYNjRfREVGQVVMVF9BQklfRUxGdjIKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIiV7bWFiaT1lbGZ2MTovbGliNjQvbGQ2NC5zby4xOzovbGliNjQvbGQ2NC5zby4yfSIKKyAjZWxzZQorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYyOi9saWI2NC9sZDY0LnNvLjI7Oi9saWI2NC9sZDY0LnNvLjF9IgorICNlbmRpZgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYi9sZDY0LXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLnNvLjAiCisgI2lmIERFRkFVTFRfTElCQyA9PSBMSUJDX1VDTElCQworICNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUpICIle21nbGliYzoiIEcgIjs6IiBVICJ9IgorICNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX0dMSUJDCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcvc2gvbGludXguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvc2gvbGludXguaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL3NoL2xpbnV4LmgKK0BAIC00Myw3ICs0Myw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuCisgCisgI2RlZmluZSBUQVJHRVRfQVNNX0ZJTEVfRU5EIGZpbGVfZW5kX2luZGljYXRlX2V4ZWNfc3RhY2sKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjdW5kZWYgU1VCVEFSR0VUX0xJTktfRU1VTF9TVUZGSVgKKyAjZGVmaW5lIFNVQlRBUkdFVF9MSU5LX0VNVUxfU1VGRklYICJfbGludXgiCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcvc3BhcmMvbGludXguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvc3BhcmMvbGludXguaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgKK0BAIC04Myw3ICs4Myw3IEBAIGV4dGVybiBjb25zdCBjaGFyICpob3N0X2RldGVjdF9sb2NhbF9jcHUKKyAgICBXaGVuIHRoZSAtc2hhcmVkIGxpbmsgb3B0aW9uIGlzIHVzZWQgYSBmaW5hbCBsaW5rIGlzIG5vdCBiZWluZworICAgIGRvbmUuICAqLworIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICN1bmRlZiAgTElOS19TUEVDCisgI2RlZmluZSBMSU5LX1NQRUMgIi1tIGVsZjMyX3NwYXJjICV7c2hhcmVkOi1zaGFyZWR9IFwKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaAorQEAgLTkyLDggKzkyLDggQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4KKyAgICBXaGVuIHRoZSAtc2hhcmVkIGxpbmsgb3B0aW9uIGlzIHVzZWQgYSBmaW5hbCBsaW5rIGlzIG5vdCBiZWluZworICAgIGRvbmUuICAqLworIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC1saW51eC5zby4yIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYjY0L2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjaWZkZWYgU1BBUkNfQklfQVJDSAorIAorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL2xpbnV4LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL2xpbnV4LmgKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9saW51eC5oCitAQCAtNzMsMTAgKzczLDEwIEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVEkKKyAgICBHTElCQ19EWU5BTUlDX0xJTktFUiBtdXN0IGJlIGRlZmluZWQgZm9yIGVhY2ggdGFyZ2V0IHVzaW5nIHRoZW0sIG9yCisgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBhbmQgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBmb3IgdGFyZ2V0cworICAgIHN1cHBvcnRpbmcgYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBjb21waWxhdGlvbi4gICovCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliL2xkNjQtdUNsaWJjLnNvLjAiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgIi9saWIvbGR4MzItdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgU1lTVEVNTElCU19ESVIgImxkeDMyLXVDbGliYy5zby4wIgorICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSICIvc3lzdGVtL2Jpbi9saW5rZXIiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIzMiAiL3N5c3RlbS9iaW4vbGlua2VyIgorICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSNjQgIi9zeXN0ZW0vYmluL2xpbmtlcjY0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMwLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2VhZmY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSBjMTgxNmMxNjAxNTZmOTljMzRlNmEwYTAzMTFiYjAyMTkzMjY4MDRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjY6MzcgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAzMC8zNV0gZ2NjOiBGaXggYXJndW1lbnQgbGlzdCB0b28gbG9uZyBlcnJvci4KKworVGhlcmUgd291bGQgYmUgYW4gIkFyZ3VtZW50IGxpc3QgdG9vIGxvbmciIGVycm9yIHdoZW4gdGhlCitidWlsZCBkaXJlY3RvcnkgaXMgbG9uZ2VyIHRoYW4gMjAwLCB0aGlzIGlzIGNhdXNlZCBieToKKworaGVhZGVycz1gZWNobyAkKFBMVUdJTl9IRUFERVJTKSB8IHRyICcgJyAnXDAxMicgfCBzb3J0IC11YAorCitUaGUgUExVR0lOX0hFQURFUlMgaXMgdG9vIGxvbmcgYmVmb3JlIHNvcnQsIHNvIHRoZSAiZWNobyIgY2FuJ3QgaGFuZGxlCitpdCwgdXNlIHRoZSAkKHNvcnQgbGlzdCkgb2YgR05VIG1ha2Ugd2hpY2ggY2FuIGhhbmRsZSB0aGUgdG9vIGxvbmcgbGlzdAord291bGQgZml4IHRoZSBwcm9ibGVtLCB0aGUgaGVhZGVyIHdvdWxkIGJlIHNob3J0IGVub3VnaCBhZnRlciBzb3J0ZWQuCitUaGUgInRyICcgJyAnXDAxMiciIHdhcyB1c2VkIGZvciB0cmFuc2xhdGluZyB0aGUgc3BhY2UgdG8gIlxuIiwgdGhlCiskKHNvcnQgbGlzdCkgZG9lc24ndCBuZWVkIHRoaXMuCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvTWFrZWZpbGUuaW4gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KK2luZGV4IDIzMjA0OTcuLjg1NjJhNjIgMTAwNjQ0CistLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrKyBiL2djYy9NYWtlZmlsZS5pbgorQEAgLTQ2MjcsNyArNDYyNyw3IEBAIGluc3RhbGwtcGx1Z2luOiBpbnN0YWxsZGlycyBsYW5nLmluc3RhbGwtcGx1Z2luIHMtaGVhZGVyLXZhcnMgaW5zdGFsbC1nZW5ndHlwZQorICMgV2Uga2VlcCB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgZmlsZXMgaW4gY29uZmlnIG9yIGMtZmFtaWx5IGFuZCAuZGVmCisgIyBmaWxlcy4gQWxsIG90aGVyIGZpbGVzIGFyZSBmbGF0dGVuZWQgdG8gYSBzaW5nbGUgZGlyZWN0b3J5LgorIAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKHBsdWdpbl9pbmNsdWRlZGlyKQorLQloZWFkZXJzPWBlY2hvICQoUExVR0lOX0hFQURFUlMpIHwgdHIgJyAnICdcMDEyJyB8IHNvcnQgLXVgOyBcCisrCWhlYWRlcnM9IiQoc29ydCAkKFBMVUdJTl9IRUFERVJTKSkiOyBcCisgCXNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2A7IFwKKyAJZm9yIGZpbGUgaW4gJCRoZWFkZXJzOyBkbyBcCisgCSAgaWYgWyAtZiAkJGZpbGUgXSA7IHRoZW4gXAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMxLURpc2FibGUtc2R0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMS1EaXNhYmxlLXNkdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzFkNWUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMS1EaXNhYmxlLXNkdC5wYXRjaApAQCAtMCwwICsxLDExMyBAQAorRnJvbSBiODUyNjViYzk0ZWMxYmVhZjFkM2I2OTdjMDNkYjYyOTkxNTUzNDY3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6Mjg6MTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAzMS8zNV0gRGlzYWJsZSBzZHQuCisKK1dlIGRvbid0IGxpc3QgZHRyYWNlIGluIERFUEVORFMgc28gd2Ugc2hvdWxkbid0IGJlIGRlcGVuZGluZyBvbiB0aGlzIGhlYWRlci4KK0l0IG1heSBvciBtYXkgbm90IGV4aXN0IGZyb20gcHJlaXZvdXMgYnVpbGRzIHRob3VnaC4gVG8gYmUgZGV0ZXJtaW5zdGljLCBkaXNhYmxlCitzZHQuaCB1c2FnZSBhbHdheXMuIFRoaXMgYXZvaWRzIGJ1aWxkIGZhaWx1cmVzIGlmIHRoZSBoZWFkZXIgaXMgcmVtb3ZlZCBhZnRlciBjb25maWd1cmUKK2J1dCBiZWZvcmUgbGliZ2NjIGlzIGNvbXBpbGVkIGZvciBleGFtcGxlLgorCitSUCAyMDEyLzgvNworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitEaXNhYmxlIHNkdCBmb3IgbGlic3RkYysrLXYzLgorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtoYWNrXQorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICAgICAgICAgICB8IDEyICsrKysrKy0tLS0tLQorIGdjYy9jb25maWd1cmUuYWMgICAgICAgICAgfCAxOCArKysrKysrKystLS0tLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlndXJlICAgIHwgIDYgKysrLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYyB8ICAyICstCisgNCBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCAzYzU1MGE2Li4wMWM3NjI2IDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTI2ODEyLDEyICsyNjgxMiwxMiBAQCBmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5IiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkuLi4gIiA+JjY7IH0KKyBoYXZlX3N5c19zZHRfaD1ubworLWlmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgorLSAgaGF2ZV9zeXNfc2R0X2g9eWVzCistCistJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCistCistZmkKKysjaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCisrIyAgaGF2ZV9zeXNfc2R0X2g9eWVzCisrIworKyMkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKysjCisrI2ZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXZlX3N5c19zZHRfaCIgPiY1CisgJGFzX2VjaG8gIiRoYXZlX3N5c19zZHRfaCIgPiY2OyB9CisgCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IDM2MDFhYjYuLjA2ZTUwMWYgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtNDc3OSwxNSArNDc3OSwxNSBAQCBpZiB0ZXN0IHgkZ2NjX2N2X2xpYmNfcHJvdmlkZXNfc3NwID0geHllczsgdGhlbgorIGZpCisgCisgIyBUZXN0IGZvciA8c3lzL3NkdC5oPiBvbiB0aGUgdGFyZ2V0LgorLUdDQ19UQVJHRVRfVEVNUExBVEUoW0hBVkVfU1lTX1NEVF9IXSkKKy1BQ19NU0dfQ0hFQ0tJTkcoc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5KQorLWhhdmVfc3lzX3NkdF9oPW5vCistaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCistICBoYXZlX3N5c19zZHRfaD15ZXMKKy0gIEFDX0RFRklORShIQVZFX1NZU19TRFRfSCwgMSwKKy0gICAgICAgICAgICBbRGVmaW5lIGlmIHlvdXIgdGFyZ2V0IEMgbGlicmFyeSBwcm92aWRlcyBzeXMvc2R0LmhdKQorLWZpCistQUNfTVNHX1JFU1VMVCgkaGF2ZV9zeXNfc2R0X2gpCisrI0dDQ19UQVJHRVRfVEVNUExBVEUoW0hBVkVfU1lTX1NEVF9IXSkKKysjQUNfTVNHX0NIRUNLSU5HKHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSkKKysjaGF2ZV9zeXNfc2R0X2g9bm8KKysjaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCisrIyAgaGF2ZV9zeXNfc2R0X2g9eWVzCisrIyAgQUNfREVGSU5FKEhBVkVfU1lTX1NEVF9ILCAxLAorKyMgICAgICAgICAgICBbRGVmaW5lIGlmIHlvdXIgdGFyZ2V0IEMgbGlicmFyeSBwcm92aWRlcyBzeXMvc2R0LmhdKQorKyNmaQorKyNBQ19NU0dfUkVTVUxUKCRoYXZlX3N5c19zZHRfaCkKKyAKKyAjIENoZWNrIGlmIFRGbW9kZSBsb25nIGRvdWJsZSBzaG91bGQgYmUgdXNlZCBieSBkZWZhdWx0IG9yIG5vdC4KKyAjIFNvbWUgZ2xpYmMgdGFyZ2V0cyB1c2VkIERGbW9kZSBsb25nIGRvdWJsZSwgYnV0IHdpdGggZ2xpYmMgMi40CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK2luZGV4IDQ5NTNjOWYuLjUzYTExNDUgMTAwNzU1CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitAQCAtMjA1NzgsMTEgKzIwNTc4LDExIEBAIGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKyBhY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworIGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKyAKKy0gIGlmIHRlc3QgJGdsaWJjeHhfY3Zfc3lzX3NkdF9oID0geWVzOyB0aGVuCisrIyAgaWYgdGVzdCAkZ2xpYmN4eF9jdl9zeXNfc2R0X2ggPSB5ZXM7IHRoZW4KKyAKKy0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKysjJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCisgCistICBmaQorKyMgIGZpCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsaWJjeHhfY3Zfc3lzX3NkdF9oIiA+JjUKKyAkYXNfZWNobyAiJGdsaWJjeHhfY3Zfc3lzX3NkdF9oIiA+JjY7IH0KKyAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlLmFjIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYworaW5kZXggNzNkNDMwYS4uZjIxMzVlMiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMKK0BAIC0yMTEsNyArMjExLDcgQEAgR0xJQkNYWF9DSEVDS19TQ19OUFJPQ0VTU09SU19PTkxOCisgR0xJQkNYWF9DSEVDS19TQ19OUFJPQ19PTkxOCisgR0xJQkNYWF9DSEVDS19QVEhSRUFEU19OVU1fUFJPQ0VTU09SU19OUAorIEdMSUJDWFhfQ0hFQ0tfU1lTQ1RMX0hXX05DUFUKKy1HTElCQ1hYX0NIRUNLX1NEVF9ICisrI0dMSUJDWFhfQ0hFQ0tfU0RUX0gKKyAKKyAjIENoZWNrIGZvciBhdmFpbGFibGUgaGVhZGVycy4KKyBBQ19DSEVDS19IRUFERVJTKFtlbmRpYW4uaCBleGVjaW5mby5oIGZsb2F0LmggZnAuaCBpZWVlZnAuaCBpbnR0eXBlcy5oIFwKKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMyLWxpYnRvb2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMyLWxpYnRvb2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IzZDFiNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzItbGlidG9vbC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDZjNzE1ZmNmYTI2MmFkYWRjYTgxYzY4YTFmM2Y2OWFhMzE4N2E1MDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyOToxMSArMDQwMAorU3ViamVjdDogW1BBVENIIDMyLzM1XSBsaWJ0b29sCisKK2xpYnN0ZGMrKyBmcm9tIGdjYy1ydW50aW1lIGdldHMgY3JlYXRlZCB3aXRoIC1ycGF0aD0vdXNyL2xpYi8uLi9saWIgZm9yIHFlbXV4ODYtNjQKK3doZW4gcnVubmluZyBvbiBhbSB4ODZfNjQgYnVpbGQgaG9zdC4KKworVGhpcyBwYXRjaCBzdG9wcyB0aGlzIHNwZWFkaW5nIHRvIGxpYmRpciBpbiB0aGUgbGlic3RkYysrLmxhIGZpbGUgd2l0aGluIGxpYnRvb2wuCitBcmd1YWJseSwgaXQgc2hvdWxkbid0IGJlIHBhc3NpbmcgdGhpcyBpbnRvIGxpYnRvb2wgaW4gdGhlIGZpcnN0IHBsYWNlIGJ1dAorZm9yIG5vdyB0aGlzIHJlc29sdmVzIHRoZSBuYXN0aWVzdCBwcm9ibGVtcyB0aGlzIGNhdXNlcy4KKworZnVuY19ub3JtYWxfYWJzcGF0aCB3b3VsZCByZXNvbHZlIGFuIGVtcHR5IHBhdGggdG8gYHB3ZGAgc28gd2UgbmVlZAordG8gZmlsdGVyIHRoZSB6ZXJvIGNhc2UuCisKK1JQIDIwMTIvOC8yNAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGx0bWFpbi5zaCB8ICAgIDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2x0bWFpbi5zaCBiL2x0bWFpbi5zaAoraW5kZXggYTAzNDMzZi4uNDZmNDdjMiAxMDA2NDQKKy0tLSBhL2x0bWFpbi5zaAorKysrIGIvbHRtYWluLnNoCitAQCAtNjM1OSw2ICs2MzU5LDEwIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCWZ1bmNfd2FybmluZyAiaWdub3JpbmcgbXVsdGlwbGUgXGAtcnBhdGgncyBmb3IgYSBsaWJ0b29sIGxpYnJhcnkiCisgCisgICAgICAgaW5zdGFsbF9saWJkaXI9IiQxIgorKyAgICAgIGlmIHRlc3QgLW4gIiRpbnN0YWxsX2xpYmRpciI7IHRoZW4KKysJZnVuY19ub3JtYWxfYWJzcGF0aCAiJGluc3RhbGxfbGliZGlyIgorKwlpbnN0YWxsX2xpYmRpcj0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKKysgICAgICBmaQorIAorICAgICAgIG9sZGxpYnM9CisgICAgICAgaWYgdGVzdCAteiAiJHJwYXRoIjsgdGhlbgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMzLWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMzLWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk5OTg0ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzMtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaApAQCAtMCwwICsxLDQzIEBACitGcm9tIDk3ZTQ1OTFjMjAzMTA0MjVlN2FjYTBlNjcxMmE4ZDk0ODBlNzc0NGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTozMDozMiArMDQwMAorU3ViamVjdDogW1BBVENIIDMzLzM1XSBnY2M6IGFybXY0OiBwYXNzIGZpeC12NGJ4IHRvIGxpbmtlciB0byBzdXBwb3J0IEVBQkkuCisKK1RoZSBMSU5LX1NQRUMgZm9yIGxpbnV4IGdldHMgb3ZlcndyaXR0ZW4gYnkgbGludXgtZWFiaS5oIHdoaWNoCittZWFucyB0aGUgdmFsdWUgb2YgVEFSR0VUX0ZJWF9WNEJYX1NQRUMgZ2V0cyBsb3N0IGFuZCBhcyBhIHJlc3VsdAordGhlIG9wdGlvbiBpcyBub3QgcGFzc2VkIHRvIGxpbmtlciB3aGVuIGNob3NpbmcgbWFyY2g9YXJtdjQKK1RoaXMgcGF0Y2ggcmVkZWZpbmVzIHRoaXMgaW4gbGludXgtZWFiaS5oIGFuZCByZWluc2VydHMgaXQKK2ZvciBlYWJpIGRlZmF1bHRpbmcgdG9vbGNoYWlucy4KKworV2UgbWlnaHQgd2FudCB0byBzZW5kIGl0IHVwc3RyZWFtLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCB8ICAgIDYgKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCitpbmRleCA4MGY0NTRkLi40ZGIzZWI5IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCisrKysgYi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKK0BAIC03NywxMCArNzcsMTQgQEAKKyAgICAgJXttZmxvYXQtYWJpPXNvZnQqOiIgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVCAifSBcCisgICAgICV7IW1mbG9hdC1hYmk9KjoiIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgIn0iCisgCisrLyogRm9yIGFybXY0IHdlIHBhc3MgLS1maXgtdjRieCB0byBsaW5rZXIgdG8gc3VwcG9ydCBFQUJJICovCisrI3VuZGVmIFRBUkdFVF9GSVhfVjRCWF9TUEVDCisrI2RlZmluZSBUQVJHRVRfRklYX1Y0QlhfU1BFQyAiJXttY3B1PWFybTh8bWNwdT1hcm04MTB8bWNwdT1zdHJvbmdhcm0qfG1hcmNoPWFybXY0OiAtLWZpeC12NGJ4fSIKKysKKyAvKiBBdCB0aGlzIHBvaW50LCBicGFiaS5oIHdpbGwgaGF2ZSBjbG9iYmVyZWQgTElOS19TUEVDLiAgV2Ugd2FudCB0bworICAgIHVzZSB0aGUgR05VL0xpbnV4IHZlcnNpb24sIG5vdCB0aGUgZ2VuZXJpYyBCUEFCSSB2ZXJzaW9uLiAgKi8KKyAjdW5kZWYgIExJTktfU1BFQworLSNkZWZpbmUgTElOS19TUEVDIEJFOF9MSU5LX1NQRUMJCQkJCQlcCisrI2RlZmluZSBMSU5LX1NQRUMgQkU4X0xJTktfU1BFQyBUQVJHRVRfRklYX1Y0QlhfU1BFQwkJCVwKKyAgIExJTlVYX09SX0FORFJPSURfTEQgKExJTlVYX1RBUkdFVF9MSU5LX1NQRUMsCQkJCVwKKyAJCSAgICAgICBMSU5VWF9UQVJHRVRfTElOS19TUEVDICIgIiBBTkRST0lEX0xJTktfU1BFQykKKyAKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzNC1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzNC1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YjlmODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDM0LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2gKQEAgLTAsMCArMSwxMDIgQEAKK0Zyb20gZmM1ZTRiZWFlYTg1NmEyYjQ4NmM3NzBhZDNhZGRjMGY1YmIzMTAwZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjMzOjA0ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMzQvMzVdIFVzZSB0aGUgbXVsdGlsaWIgY29uZmlnIGZpbGVzIGZyb20gJHtCfSBpbnN0ZWFkIG9mCisgdXNpbmcgdGhlIG9uZXMgZnJvbSAke1N9CisKK1VzZSB0aGUgbXVsdGlsaWIgY29uZmlnIGZpbGVzIGZyb20gJHtCfSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBvbmVzIGZyb20gJHtTfQorc28gdGhhdCB0aGUgc291cmNlIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBnY2MtY3Jvc3MtaW5pdGlhbCwKK2djYy1jcm9zcy1pbnRlcm1lZGlhdGUsIGdjYy1jcm9zcywgZ2NjLXJ1bnRpbWUsIGFuZCBhbHNvIHRoZSBzZGsgYnVpbGQuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKy0tLQorIGdjYy9jb25maWd1cmUgICAgfCAgIDIyICsrKysrKysrKysrKysrKysrKy0tLS0KKyBnY2MvY29uZmlndXJlLmFjIHwgICAyMiArKysrKysrKysrKysrKysrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAzNiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDhiYzBjOTguLjNjZDA4MTcgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMTE1MTksMTAgKzExNTE5LDIwIEBAIGRvbmUKKyB0bWFrZV9maWxlXz0KKyBmb3IgZiBpbiAke3RtYWtlX2ZpbGV9CisgZG8KKy0JaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCistCXRoZW4KKy0JCXRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKKy0JZmkKKysgIGNhc2UgJGYgaW4KKysgICAgKi90LWxpbnV4NjQgKQorKyAgICAgICBpZiB0ZXN0IC1mIC4vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gLi9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICAgICogKQorKyAgICAgICBpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKKysgICAgICAgdGhlbgorKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgIGVzYWMKKyBkb25lCisgdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlX30iCisgCitAQCAtMTE1MzMsNiArMTE1NDMsMTAgQEAgdG1fZmlsZV9saXN0PSJvcHRpb25zLmgiCisgdG1faW5jbHVkZV9saXN0PSJvcHRpb25zLmggaW5zbi1jb25zdGFudHMuaCIKKyBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgIGNhc2UgJGYgaW4KKysgICAgKi9saW51eDY0LmggKQorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi9jb25maWcvJGYiCisrICAgICAgIDs7CisgICAgIC4vKiApCisgICAgICAgIGY9YGVjaG8gJGYgfCBzZWQgJ3MvXi4uLy8nYAorICAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAkZiIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggNWU1ZTg0Zi4uNDE1YTZkZiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC0xNzAwLDEwICsxNzAwLDIwIEBAIGRvbmUKKyB0bWFrZV9maWxlXz0KKyBmb3IgZiBpbiAke3RtYWtlX2ZpbGV9CisgZG8KKy0JaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCistCXRoZW4KKy0JCXRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKKy0JZmkKKysgIGNhc2UgJGYgaW4KKysgICAgKi90LWxpbnV4NjQgKQorKyAgICAgICBpZiB0ZXN0IC1mIC4vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gLi9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICAgICogKQorKyAgICAgICBpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKKysgICAgICAgdGhlbgorKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgIGVzYWMKKyBkb25lCisgdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlX30iCisgCitAQCAtMTcxNCw2ICsxNzI0LDEwIEBAIHRtX2ZpbGVfbGlzdD0ib3B0aW9ucy5oIgorIHRtX2luY2x1ZGVfbGlzdD0ib3B0aW9ucy5oIGluc24tY29uc3RhbnRzLmgiCisgZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCisgICBjYXNlICRmIGluCisrICAgICovbGludXg2NC5oICkKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi9jb25maWcvJGYiCisrICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICA7OworICAgICAuLyogKQorICAgICAgICBmPWBlY2hvICRmIHwgc2VkICdzL14uLi8vJ2AKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gJGYiCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzUtd2Nhc3QtcXVhbC1QUi01NTM4My5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzUtd2Nhc3QtcXVhbC1QUi01NTM4My5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTRjZjRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzNS13Y2FzdC1xdWFsLVBSLTU1MzgzLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK0Zyb20gZGVmZmRiMGIyNDk3YTEwNjA2MWQzZWEyYzZhM2ZlZjRmYmEzNDQ1ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjM5OjUxICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMzUvMzVdIHdjYXN0LXF1YWwgUFIvNTUzODMKKworVGhpcyBpcyBhIGJhY2twb3J0IGZyb20gZ2NjIGJ1Z3ppbGxhCisKK2h0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTUzODMKKworVGhpcyBjb21taXQgZml4ZXMgYSB3cm9uZyB3YXJuaW5nIGJlaGF2aW9yLiBUaGlzIGJ1ZyB3aGljaCBoYXMgbm8KK3dvcmthcm91bmQgb3RoZXIgdGhhbiBkaXNhYmxpbmcgdGhlIHdhcm5pbmcuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKy0tLQorIGdjYy9jL2MtdHlwZWNrLmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQorIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL1djYXN0LXF1YWwtMS5jIHwgICAgNiArKystLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jL2MtdHlwZWNrLmMgYi9nY2MvYy9jLXR5cGVjay5jCitpbmRleCBkZGI2ZDM5Li5jNjI0MTIwIDEwMDY0NAorLS0tIGEvZ2NjL2MvYy10eXBlY2suYworKysrIGIvZ2NjL2MvYy10eXBlY2suYworQEAgLTQ0NjQsNyArNDQ2NCw3IEBAIGhhbmRsZV93YXJuX2Nhc3RfcXVhbCAobG9jYXRpb25fdCBsb2MsIHRyZWUgdHlwZSwgdHJlZSBvdHlwZSkKKyAgICAgLyogVGhlcmUgYXJlIHF1YWxpZmllcnMgcHJlc2VudCBpbiBJTl9PVFlQRSB0aGF0IGFyZSBub3QgcHJlc2VudAorICAgICAgICBpbiBJTl9UWVBFLiAgKi8KKyAgICAgd2FybmluZ19hdCAobG9jLCBPUFRfV2Nhc3RfcXVhbCwKKy0JCSJjYXN0IGRpc2NhcmRzICVxI3YgcXVhbGlmaWVyIGZyb20gcG9pbnRlciB0YXJnZXQgdHlwZSIsCisrCQkiY2FzdCBkaXNjYXJkcyAlcXYgcXVhbGlmaWVyIGZyb20gcG9pbnRlciB0YXJnZXQgdHlwZSIsCisgCQlkaXNjYXJkZWQpOworIAorICAgaWYgKGFkZGVkIHx8IGRpc2NhcmRlZCkKK2RpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9XY2FzdC1xdWFsLTEuYyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL1djYXN0LXF1YWwtMS5jCitpbmRleCA2NDBlNGYwLi41NjM4MmM3IDEwMDY0NAorLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vV2Nhc3QtcXVhbC0xLmMKKysrKyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL1djYXN0LXF1YWwtMS5jCitAQCAtODUsMTEgKzg1LDExIEBAIGYzICh2b2lkICoqKmJhcikKKyB2b2lkCisgZjQgKHZvaWQgKiBjb25zdCAqKmJhcikKKyB7CistICBjb25zdCB2b2lkICoqKnA5ID0gKGNvbnN0IHZvaWQgKioqKSBiYXI7IC8qIHsgZGctd2FybmluZyAiY2FzdCIgfSAqLworKyAgY29uc3Qgdm9pZCAqKipwOSA9IChjb25zdCB2b2lkICoqKikgYmFyOyAvKiB7IGRnLXdhcm5pbmcgImNhc3QgZGlzY2FyZHMgLmNvbnN0LiBxdWFsaWZpZXIiIH0gKi8KKyAgIHZvaWQgKiBjb25zdCAqKnAxMSA9ICh2b2lkICogY29uc3QgKiopIGJhcjsKKy0gIHZvaWQgKiogY29uc3QgKnAxMyA9ICh2b2lkICoqIGNvbnN0ICopIGJhcjsgLyogeyBkZy13YXJuaW5nICJjYXN0IiB9ICovCisrICB2b2lkICoqIGNvbnN0ICpwMTMgPSAodm9pZCAqKiBjb25zdCAqKSBiYXI7IC8qIHsgZGctd2FybmluZyAiY2FzdCBkaXNjYXJkcyAuY29uc3QuIHF1YWxpZmllciIgfSAqLworICAgY29uc3Qgdm9pZCAqIGNvbnN0ICoqcDE1ID0gKGNvbnN0IHZvaWQgKiBjb25zdCAqKikgYmFyOyAvKiB7IGRnLXdhcm5pbmcgImNhc3QiIH0gKi8KKy0gIGNvbnN0IHZvaWQgKiogY29uc3QgKnAxNyA9IChjb25zdCB2b2lkICoqIGNvbnN0ICopIGJhcjsgLyogeyBkZy13YXJuaW5nICJjYXN0IiB9ICovCisrICBjb25zdCB2b2lkICoqIGNvbnN0ICpwMTcgPSAoY29uc3Qgdm9pZCAqKiBjb25zdCAqKSBiYXI7IC8qIHsgZGctd2FybmluZyAiY2FzdCBkaXNjYXJkcyAuY29uc3QuIHF1YWxpZmllciIgfSAqLworICAgdm9pZCAqIGNvbnN0ICogY29uc3QgKiBwMTkgPSAodm9pZCAqIGNvbnN0ICogY29uc3QgKikgYmFyOworICAgY29uc3Qgdm9pZCAqIGNvbnN0ICogY29uc3QgKnAyMSA9IChjb25zdCB2b2lkICogY29uc3QgKiBjb25zdCAqKSBiYXI7CisgfQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDM4LWdjYy00LjgtYnVpbGQtYXJncy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzgtZ2NjLTQuOC1idWlsZC1hcmdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjODI5MGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDM4LWdjYy00LjgtYnVpbGQtYXJncy5wYXRjaApAQCAtMCwwICsxLDY0IEBACitXaGVuIGNyb3NzIGNvbXBpbGluZyBhIHRhcmdldCBnY2MsIHRhcmdldCBmbGFncyBtYXkgYmUgdXNlZCBvbiB0aGUgaG9zdAorCitDb25maWd1cmUgaWRlbnRpZmllcyBhIG51bWJlciBvZiB3YXJuaW5nIGZsYWdzIChXQVJOX0NGTEFHUyBhbmQKK1dBUk5fQ1hYRkxBR1MpIGZyb20gdGhlICRDQyB2YWx1ZS4gIFRoZSBjcm9zcyBjb21waWxlciBtYXkgYmUgZGlmZmVyZW50Citmcm9tIHRoZSBob3N0IGNvbXBpbGVyIGFuZCBtYXkgbm90IHN1cHBvcnQgdGhlIHNhbWUgc2V0IG9mIGZsYWdzLiAgVGhpcworbGVhZHMgdG8gcHJvYmxlbXMgc3VjaCBhczoKKworY2MxcGx1czogZXJyb3I6IHVucmVjb2duaXplZCBjb21tYW5kIGxpbmUgb3B0aW9uICItV25vLW5hcnJvd2luZyIKK2NjMXBsdXM6IGVycm9yOiB1bnJlY29nbml6ZWQgY29tbWFuZCBsaW5lIG9wdGlvbiAiLVduby1vdmVybGVuZ3RoLXN0cmluZ3MiCisKK1dvcmsgYXJvdW5kIHRoaXMgcHJvYmxlbSBieSByZW1vdmluZyB0aGUgd2FybmluZyBmbGFncyBmcm9tIHRoZQorQlVJTERfQ1hYRkxBR1MgdmFsdWUsIGluIGEgd2F5IHNpbWlsYXIgdG8gdGhlIEJVSUxEX0NGTEFHUy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZ3VyZQorKysrIGdjYy00LjguNC9nY2MvY29uZmlndXJlCitAQCAtMTc4NjQsNyArMTc4NjQsNyBAQCBlbHNlCisgICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKy0jbGluZSAxNzg1MyAiY29uZmlndXJlIgorKyNsaW5lIDE3ODY3ICJjb25maWd1cmUiCisgI2luY2x1ZGUgImNvbmZkZWZzLmgiCisgCisgI2lmIEhBVkVfRExGQ05fSAorQEAgLTE3OTcwLDcgKzE3OTcwLDcgQEAgZWxzZQorICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCistI2xpbmUgMTc5NTkgImNvbmZpZ3VyZSIKKysjbGluZSAxNzk3MyAiY29uZmlndXJlIgorICNpbmNsdWRlICJjb25mZGVmcy5oIgorIAorICNpZiBIQVZFX0RMRkNOX0gKK0BAIC0yNjkxOCwxOCArMjY5MTgsMTUgQEAgJGFzX2VjaG8gIiNkZWZpbmUgVEFSR0VUX0xJQkNfUFJPVklERVNfUworIGZpCisgCisgIyBUZXN0IGZvciA8c3lzL3NkdC5oPiBvbiB0aGUgdGFyZ2V0LgorLQorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5IiA+JjUKKy0kYXNfZWNob19uICJjaGVja2luZyBzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkuLi4gIiA+JjY7IH0KKy1oYXZlX3N5c19zZHRfaD1ubworKyNHQ0NfVEFSR0VUX1RFTVBMQVRFKFtIQVZFX1NZU19TRFRfSF0pCisrI0FDX01TR19DSEVDS0lORyhzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkpCisrI2hhdmVfc3lzX3NkdF9oPW5vCisgI2lmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgorICMgIGhhdmVfc3lzX3NkdF9oPXllcworLSMKKy0jJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCistIworKyMgIEFDX0RFRklORShIQVZFX1NZU19TRFRfSCwgMSwKKysjICAgICAgICAgICAgW0RlZmluZSBpZiB5b3VyIHRhcmdldCBDIGxpYnJhcnkgcHJvdmlkZXMgc3lzL3NkdC5oXSkKKyAjZmkKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhdmVfc3lzX3NkdF9oIiA+JjUKKy0kYXNfZWNobyAiJGhhdmVfc3lzX3NkdF9oIiA+JjY7IH0KKysjQUNfTVNHX1JFU1VMVCgkaGF2ZV9zeXNfc2R0X2gpCisgCisgIyBDaGVjayBpZiBURm1vZGUgbG9uZyBkb3VibGUgc2hvdWxkIGJlIHVzZWQgYnkgZGVmYXVsdCBvciBub3QuCisgIyBTb21lIGdsaWJjIHRhcmdldHMgdXNlZCBERm1vZGUgbG9uZyBkb3VibGUsIGJ1dCB3aXRoIGdsaWJjIDIuNApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQwLWZpeC1nKystc3lzcm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTBhYTVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorUG9ydGlvbnMgb2YKKworaHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL2djYy1wYXRjaGVzQGdjYy5nbnUub3JnL21zZzI2MDEzLmh0bWwKKworYXJlIG5vdCB1cHN0cmVhbWVkIHlldC4gU28gbGV0cyBrZWVwIG1pc3NpbmcgcGllY2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IGdjYy00LjguMS9nY2MvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYwkyMDEzLTA3LTE1IDE1OjU1OjQ5LjQ4ODM5OTEzMiAtMDcwMAorKysrIGdjYy00LjguMS9nY2MvY29uZmlndXJlLmFjCTIwMTMtMDctMTUgMTY6MDI6MzEuNzcyNDA2Njc5IC0wNzAwCitAQCAtMTQ4LDcgKzE0OCw5IEBACisgaWYgdGVzdCAiJHt3aXRoX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGdjY19neHhfd2l0aG91dF9zeXNyb290PWBleHByICIke2djY19neHhfaW5jbHVkZV9kaXJ9IiA6ICIke3dpdGhfc3lzcm9vdH0iJ1woLipcKSdgCisgICBpZiB0ZXN0ICIke2djY19neHhfd2l0aG91dF9zeXNyb290fSI7IHRoZW4KKy0gICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGlmIHRlc3QgeCR7d2l0aF9zeXNyb290fSAhPSB4LzsgdGhlbgorKyAgICAgIGdjY19neHhfaW5jbHVkZV9kaXI9IiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IgorKyAgICBmaQorICAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyX2FkZF9zeXNyb290PTEKKyAgIGZpCisgZmkKK0luZGV4OiBnY2MtNC44LjEvZ2NjL2NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2djYy9jb25maWd1cmUJMjAxMy0wNy0xNSAxNTo1NTo0OS40NzIzOTkxMzIgLTA3MDAKKysrKyBnY2MtNC44LjEvZ2NjL2NvbmZpZ3VyZQkyMDEzLTA3LTE1IDE2OjAyOjMxLjc4MDQwNjY4MCAtMDcwMAorQEAgLTMzMjUsNyArMzMyNSw5IEBACisgaWYgdGVzdCAiJHt3aXRoX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGdjY19neHhfd2l0aG91dF9zeXNyb290PWBleHByICIke2djY19neHhfaW5jbHVkZV9kaXJ9IiA6ICIke3dpdGhfc3lzcm9vdH0iJ1woLipcKSdgCisgICBpZiB0ZXN0ICIke2djY19neHhfd2l0aG91dF9zeXNyb290fSI7IHRoZW4KKy0gICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGlmIHRlc3QgeCR7d2l0aF9zeXNyb290fSAhPSB4LzsgdGhlbgorKyAgICAgIGdjY19neHhfaW5jbHVkZV9kaXI9IiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IgorKyAgICBmaQorICAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyX2FkZF9zeXNyb290PTEKKyAgIGZpCisgZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDEtbGlidG9vbC1hdm9pZC1saWJkaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQxLWxpYnRvb2wtYXZvaWQtbGliZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZDk2MTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQxLWxpYnRvb2wtYXZvaWQtbGliZGlyLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK0F2b2lkIHVzaW5nIGxpYmRpciBmcm9tIC5sYSB3aGljaCB1c3VhbGx5IHBvaW50cyB0byBhIGhvc3QgcGF0aAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorU2lnbmVkLW9mZi1ieTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgorCitkaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCitpbmRleCBhMDM0MzNmLi4xOTAyYTkwIDEwMDY0NAorLS0tIGEvbHRtYWluLnNoCisrKysgYi9sdG1haW4uc2gKK0BAIC01NjI4LDYgKzU2MjgsOSBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgorIAkgICAgbGliZGlyPSIkYWJzX2xhZGlyIgorIAkgIGVsc2UKKysJICAgICMgSW5zdGVhZCBvZiB1c2luZyBsaWJkaXIgZnJvbSAubGEgd2hpY2ggdXN1YWxseSBwb2ludHMgdG8gYSBob3N0IHBhdGgsCisrCSAgICAjIHVzZSB0aGUgcGF0aCB0aGUgLmxhIGlzIGNvbnRhaW5lZCBpbi4KKysJICAgIGxpYmRpcj0iJGFic19sYWRpciIKKyAJICAgIGRpcj0iJGxpYmRpciIKKyAJICAgIGFic2Rpcj0iJGxpYmRpciIKKyAJICBmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Mi1wcjU3NzQ4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Mi1wcjU3NzQ4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNTZmNzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQyLXByNTc3NDgucGF0Y2gKQEAgLTAsMCArMSw3OCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWoKKworMjAxMy0wOC0wMSAgTWFydGluIEphbWJvciAgPG1qYW1ib3JAc3VzZS5jej4KKworCVBSIG1pZGRsZS1lbmQvNTc3NDgKKwkqIHN0b3ItbGF5b3V0LmMgKGNvbXB1dGVfcmVjb3JkX21vZGUpOiBUcmVhdCB6ZXJvLXNpemVkIGFycmF5IGZpZWxkcworCWxpa2UgaW5jb21wbGV0ZSB0eXBlcy4KKwordGVzdHN1aXRlLworCSogZ2NjLmRnL3RvcnR1cmUvcHI1Nzc0OC5jOiBOZXcgdGVzdC4KKworCitJbmRleDogZ2NjLTQuOC4xL2djYy9zdG9yLWxheW91dC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL3N0b3ItbGF5b3V0LmMJMjAxMy0wNC0yOCAxMDoyOToxOC4wMDAwMDAwMDAgLTA3MDAKKysrKyBnY2MtNC44LjEvZ2NjL3N0b3ItbGF5b3V0LmMJMjAxMy0wOC0wMSAxNTowMjowOC4wMTgwMDYxMjUgLTA3MDAKK0BAIC0xNjE4LDcgKzE2MTgsOSBAQAorIAkJICAgJiYgaW50ZWdlcl96ZXJvcCAoVFlQRV9TSVpFIChUUkVFX1RZUEUgKGZpZWxkKSkpKSkKKyAJICB8fCAhIGhvc3RfaW50ZWdlcnAgKGJpdF9wb3NpdGlvbiAoZmllbGQpLCAxKQorIAkgIHx8IERFQ0xfU0laRSAoZmllbGQpID09IDAKKy0JICB8fCAhIGhvc3RfaW50ZWdlcnAgKERFQ0xfU0laRSAoZmllbGQpLCAxKSkKKysJICB8fCAhIGhvc3RfaW50ZWdlcnAgKERFQ0xfU0laRSAoZmllbGQpLCAxKQorKwkgIHx8IChUUkVFX0NPREUgKFRSRUVfVFlQRSAoZmllbGQpKSA9PSBBUlJBWV9UWVBFCisrCSAgICAgICYmIHRyZWVfbG93X2NzdCAoREVDTF9TSVpFIChmaWVsZCksIDEpID09IDApKQorIAlyZXR1cm47CisgCisgICAgICAgLyogSWYgdGhpcyBmaWVsZCBpcyB0aGUgd2hvbGUgc3RydWN0LCByZW1lbWJlciBpdHMgbW9kZSBzbworSW5kZXg6IGdjYy00LjguMS9nY2MvdGVzdHN1aXRlL2djYy5kZy90b3J0dXJlL3ByNTc3NDguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGdjYy00LjguMS9nY2MvdGVzdHN1aXRlL2djYy5kZy90b3J0dXJlL3ByNTc3NDguYwkyMDEzLTA4LTAxIDE1OjAyOjA4LjA2MjAwNjEyNiAtMDcwMAorQEAgLTAsMCArMSw0NSBAQAorKy8qIFBSIG1pZGRsZS1lbmQvNTc3NDggKi8KKysvKiB7IGRnLWRvIHJ1biB9ICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKworK2V4dGVybiB2b2lkIGFib3J0ICh2b2lkKTsKKysKKyt0eXBlZGVmIGxvbmcgbG9uZyBWCisrICBfX2F0dHJpYnV0ZV9fICgodmVjdG9yX3NpemUgKDIgKiBzaXplb2YgKGxvbmcgbG9uZykpLCBtYXlfYWxpYXMpKTsKKysKKyt0eXBlZGVmIHN0cnVjdCBTIHsgViBhOyBWIGJbMF07IH0gUCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkICgxKSkpOworKworK3N0cnVjdCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBUIHsgY2hhciBjOyBQIHM7IH07CisrCisrdm9pZCBfX2F0dHJpYnV0ZV9fKChub2lubGluZSwgbm9jbG9uZSkpCisrY2hlY2sgKHN0cnVjdCBUICp0KQorK3sKKysgIGlmICh0LT5zLmJbMF1bMF0gIT0gMyB8fCB0LT5zLmJbMF1bMV0gIT0gNCkKKysgICAgYWJvcnQgKCk7CisrfQorKworK2ludCBfX2F0dHJpYnV0ZV9fKChub2lubGluZSwgbm9jbG9uZSkpCisrZ2V0X2kgKHZvaWQpCisreworKyAgcmV0dXJuIDA7CisrfQorKworK3ZvaWQgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUsIG5vY2xvbmUpKQorK2ZvbyAoUCAqcCkKKyt7CisrICBWIGEgPSB7IDMsIDQgfTsKKysgIGludCBpID0gZ2V0X2koKTsKKysgIHAtPmJbaV0gPSBhOworK30KKysKKytpbnQKKyttYWluICgpCisreworKyAgc3RydWN0IFQgKnQgPSAoc3RydWN0IFQgKikgbWFsbG9jICgxMjgpOworKworKyAgZm9vICgmdC0+cyk7CisrICBjaGVjayAodCk7CisrCisrICByZXR1cm4gMDsKKyt9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQzLWNwcC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDMtY3BwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZjg2NDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQzLWNwcC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitUaGUgT0UgZW52aXJvbm1lbnQgc2V0cyBhbmQgZXhwb3J0cyBDUFAgYXMgYmVpbmcgdGhlIHRhcmdldCBnY2MuIFdoZW4gYnVpbGRpbmcgCitnY2MtY3Jvc3MtY2FuYWRpYW4gZm9yIGEgbWluZ3cgdGFyZ2V0dGVkIHNkaywgdGhlIGZvbGxvd2luZyBjYW4gYmUgZm91bmQgaW4KK2J1aWxkLng4Nl82NC1wb2t5c2RrLW1pbmd3MzIuaTU4Ni1wb2t5LWxpbnV4L2J1aWxkLXg4Nl82NC1saW51eC9saWJpYmVydHkvY29uZmlnLmxvZzoKKworY29uZmlndXJlOjM2NDE6IGNoZWNraW5nIGZvciBfRklMRV9PRkZTRVRfQklUUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzCitjb25maWd1cmU6MzY2NjogZ2NjICAtYyAtaXN5c3RlbS9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAgY29uZnRlc3QuYyA+JjUKK2NvbmZpZ3VyZTozNjY2OiAkPyA9IDAKK2NvbmZpZ3VyZTozNjk4OiByZXN1bHQ6IG5vCitjb25maWd1cmU6Mzc4NjogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IKK2NvbmZpZ3VyZTozODU2OiByZXN1bHQ6IHg4Nl82NC1wb2t5c2RrLW1pbmd3MzItZ2NjIC1FIC0tc3lzcm9vdD0vbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1uYXRpdmVzZGstbWluZ3czMi1wb2t5c2RrLW1pbmd3MzIKK2NvbmZpZ3VyZTozODc2OiB4ODZfNjQtcG9reXNkay1taW5ndzMyLWdjYyAtRSAtLXN5c3Jvb3Q9L21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbmF0aXZlc2RrLW1pbmd3MzItcG9reXNkay1taW5ndzMyICBjb25mdGVzdC5jCitjb25maWd1cmU6Mzg3NjogJD8gPSAwCisKK05vdGUgdGhpcyBpcyBhICpidWlsZCogdGFyZ2V0IChpbiBidWlsZC14ODZfNjQtbGludXgpIHNvIGl0IHNob3VsZCBiZSB1c2luZyAKK3RoZSBob3N0ICJnY2MiLCBub3QgeDg2XzY0LXBva3lzZGstbWluZ3czMi1nY2MuIFNpbmNlIHRoZSBtaW5ndzMyIGhlYWRlcnMgYXJlIAordmVyeSBkaWZmZXJlbnQsIHVzaW5nIHRoZSB3cm9uZyBjcHAgaXMgYSByZWFsIHByb2JsZW0uIEl0IGlzIGxlYWtpbmcgaW50byAKK2NvbmZpZ3VyZSB0aHJvdWdoIHRoZSBDUFAgdmFyaWFibGUuIFVsdGltYXRlbHkgdGhpcyBsZWFkcyB0byBidWlsZCBmYWlsdXJlcyAKK3JlbGF0ZWQgdG8gbm90IGJlaW5nIGFibGUgdG8gaW5jbHVkZSBhIHByb2Nlc3MuaCBmaWxlIGZvciBwZW0tdW5peC5jLgorCitUaGUgZml4IGlzIHRvIGVuc3VyZSB3ZSBleHBvcnQgYSBzYW5lIENQUCB2YWx1ZSBpbnRvIHRoZSBidWlsZCBlbnZpcm9ubWVudCB3aGVuCit1c2luZyBidWlsZCB0YXJnZXRzLiBXZSBjb3VsZCBkZWZpbmUgYSBDUFBfRk9SX0JVSUxEIHZhbHVlIHdoaWNoIG1heSBiZSB0aGUgdmVyc2lvbgord2hpY2ggbmVlZHMgdG8gYmUgdXBzdHJlYW1lZCBidXQgZm9yIG5vdywgdGhpcyBmaXggaXMgZ29vZCBlbm91Z2ggdG8gYXZvaWQgdGhlIAorcHJvYmxlbS4KKworUlAgMjIvMDgvMjAxMworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGdjYy00LjguMS9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL01ha2VmaWxlLmluCTIwMTMtMDMtMzAgMTE6MjU6MDMuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL01ha2VmaWxlLmluCTIwMTMtMDgtMTMgMTI6MDM6MTcuMTUxOTg4ODgyICswMDAwCitAQCAtMTQ5LDYgKzE0OSw3IEBACisgCUFSPSIkKEFSX0ZPUl9CVUlMRCkiOyBleHBvcnQgQVI7IFwKKyAJQVM9IiQoQVNfRk9SX0JVSUxEKSI7IGV4cG9ydCBBUzsgXAorIAlDQz0iJChDQ19GT1JfQlVJTEQpIjsgZXhwb3J0IENDOyBcCisrCUNQUD0iJChDQ19GT1JfQlVJTEQpIC1FIjsgZXhwb3J0IENQUDsgXAorIAlDRkxBR1M9IiQoQ0ZMQUdTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ0ZMQUdTOyBcCisgCUNPTkZJR19TSEVMTD0iJChTSEVMTCkiOyBleHBvcnQgQ09ORklHX1NIRUxMOyBcCisgCUNYWD0iJChDWFhfRk9SX0JVSUxEKSI7IGV4cG9ydCBDWFg7IFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDQtZ2VuZ3R5cGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0NC1nZW5ndHlwZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM4NzYxZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDQtZ2VuZ3R5cGVzLnBhdGNoCkBAIC0wLDAgKzEsOTcgQEAKK2dlbmd0eXBlIGlzIGdlbmVyYXRlZCBmb3IgYm90aCB0aGUgYnVpbGQgc3lzdGVtIGFuZCB0aGUgdGFyZ2V0LiAtREdFTkVSQVRPUl9GSUxFCit3YXMgYWRkZWQgaW4gdGhlIHBhdGNoIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDEyLTA3L21zZzAwMjczLmh0bWwKK2FuZCB3YXMgYXBwbGllZCB0byBib3RoIHZlcnNpb25zIG9mIGdlbmd0eXBlLgorCitVbmZvcnR1bmF0ZWx5IHRoZSBwcmVzZW5jZSBvZiB0aGlzIGZsYWcgdHJpZ2dlcnMgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gKGJjb25maWcuaCkgCit0byBiZSBpbmNsdWRlZCBmb3IgdGhlIHRhcmdldCBidWlsZCBvZiBnZW5ndHlwZS4gQ29tcGlsaW5nIGdlbmd0eXBlIHdpdGggdGhlIHRhcmdldCAKK2NvbXBpbGVyIGFuZCBiY29uZmlnLmggY2FuIHJlc3VsdCBpbiBlcnJvcnMgaWYgdGhlIGJ1aWxkIGFuZCB0YXJnZXQgc3lzdGVtcyBhcmUgCitkaXNzaW1pbGFyLiBBbiBleGFtcGxlIGNhc2UgdGhpcyBmYWlscyBpcyBjcm9zcyBjb21waWxpbmcgZ2NjIG9uIGxpbnV4IGZvciBhIGRhcndpbiAKK3RhcmdldCBzeXN0ZW06CisKK0luIGZpbGUgaW5jbHVkZWQgZnJvbSAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmstc2hhcmVkL2djYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL2dlbmd0eXBlLXBhcnNlLmM6MjU6MDoKK3wgL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrLXNoYXJlZC9nY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9nZW5ndHlwZS1wYXJzZS5jOiBJbiBmdW5jdGlvbiAndm9pZCBwYXJzZV9lcnJvcihjb25zdCBjaGFyKiwgLi4uKSc6Cit8IC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay1zaGFyZWQvZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2Mvc3lzdGVtLmg6OTM6NTM6IGVycm9yOiAnZnB1dGNfdW5sb2NrZWQnIHdhcyBub3QgZGVjbGFyZWQgaW4gdGhpcyBzY29wZQorfCAgIyAgZGVmaW5lIGZwdXRjKEMsIFN0cmVhbSkgZnB1dGNfdW5sb2NrZWQgKEMsIFN0cmVhbSkKKword2hpY2ggb2NjdXJzIHNpbmNlIGF1dG8tYnVpbGQuaCBhbmQgYXV0by1ob3N0LmggaGF2ZSBkaWZmZXJuZXQgdmFsdWVzIG9mCitIQVZFX0ZQVVRDX1VOTE9DS0VEOgorCisjZGVmaW5lIEhBVkVfRlBVVENfVU5MT0NLRUQgMQorLyogI3VuZGVmIEhBVkVfRlBVVFNfVU5MT0NLRUQgKi8KKworVGhlIG9idmlvdXMgZml4IGlzIHRvIG9ubHkgaW5jbHVkZSB0aGUgZmxhZyBvbiBidWlsZC8gdGFyZ2V0cyB3aGljaCB0aGlzIHBhdGNoIGRvZXMsIGhvd2V2ZXIgCit0aGlzIGFsc28gbGVhZHMgdG8gY29tcGlsZSBlcnJvcnMgZHVlIHRvIGNvbnN0X3RyZWUgYmVpbmcgdW5kZWZpbmVkIGJ1dCB1c2VkIGluIGRvdWJsZV9pbnQuaAorCitJIGFkZGVkIGEgR0VORVJBVE9SX0ZJTEUyIGZsYWcgdG8gd29ya2Fyb3VuZCB0aG9zZSBpbiB0aGUgCit0YXJnZXQgY2FzZSBhbmQgYWxsb3cgdGhlIGJ1aWxkIHRvIHN1Y2NlZWQuCisKK09ubHkgdGhlIGJ1aWxkL2dlbmd0eXBlcyBzaG91bGQgaGF2ZSB0aGUgLURHRU5FUkFUT1JfRklMRSAKKworUlAgMjIvOC8yMDEzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ2NjLTQuOC4xL2djYy9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2djYy9NYWtlZmlsZS5pbgkyMDEzLTA4LTE5IDExOjQwOjM2Ljg0NDAxNDQyNCArMDAwMAorKysrIGdjYy00LjguMS9nY2MvTWFrZWZpbGUuaW4JMjAxMy0wOC0xOSAxMTo0MDozNy43ODQwMTQ0MDIgKzAwMDAKK0BAIC0zOTAzLDI3ICszOTAzLDI5IEBACisgCisgZ2VuZ3R5cGUtbGV4Lm8gYnVpbGQvZ2VuZ3R5cGUtbGV4Lm8gOiBnZW5ndHlwZS1sZXguYyBnZW5ndHlwZS5oICQoU1lTVEVNX0gpCisgZ2VuZ3R5cGUtbGV4Lm86ICQoQ09ORklHX0gpICQoQkNPTkZJR19IKQorLUNGTEFHUy1nZW5ndHlwZS1sZXgubyArPSAtREdFTkVSQVRPUl9GSUxFCisrQ0ZMQUdTLWJ1aWxkL2dlbmd0eXBlLWxleC5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKyBidWlsZC9nZW5ndHlwZS1sZXgubzogJChCQ09ORklHX0gpCisgCisgZ2VuZ3R5cGUtcGFyc2UubyBidWlsZC9nZW5ndHlwZS1wYXJzZS5vIDogZ2VuZ3R5cGUtcGFyc2UuYyBnZW5ndHlwZS5oIFwKKyAgICQoU1lTVEVNX0gpCisgZ2VuZ3R5cGUtcGFyc2UubzogJChDT05GSUdfSCkKKy1DRkxBR1MtZ2VuZ3R5cGUtcGFyc2UubyArPSAtREdFTkVSQVRPUl9GSUxFCisrQ0ZMQUdTLWJ1aWxkL2dlbmd0eXBlLXBhcnNlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorIGJ1aWxkL2dlbmd0eXBlLXBhcnNlLm86ICQoQkNPTkZJR19IKQorIAorIGdlbmd0eXBlLXN0YXRlLm8gYnVpbGQvZ2VuZ3R5cGUtc3RhdGUubzogZ2VuZ3R5cGUtc3RhdGUuYyAkKFNZU1RFTV9IKSBcCisgICBnZW5ndHlwZS5oIGVycm9ycy5oIGRvdWJsZS1pbnQuaCB2ZXJzaW9uLmggJChIQVNIVEFCX0gpICQoT0JTVEFDS19IKSBcCisgICAkKFhSRUdFWF9IKQorIGdlbmd0eXBlLXN0YXRlLm86ICQoQ09ORklHX0gpCistQ0ZMQUdTLWdlbmd0eXBlLXN0YXRlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorK0NGTEFHUy1nZW5ndHlwZS1zdGF0ZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUyCisrQ0ZMQUdTLWJ1aWxkL2dlbmd0eXBlLXN0YXRlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorIGJ1aWxkL2dlbmd0eXBlLXN0YXRlLm86ICQoQkNPTkZJR19IKQorIAorIGdlbmd0eXBlLm8gYnVpbGQvZ2VuZ3R5cGUubyA6IGdlbmd0eXBlLmMgJChTWVNURU1fSCkgZ2VuZ3R5cGUuaCAJXAorICAgcnRsLmRlZiBpbnNuLW5vdGVzLmRlZiBlcnJvcnMuaCBkb3VibGUtaW50LmggdmVyc2lvbi5oICQoSEFTSFRBQl9IKSBcCisgICAkKE9CU1RBQ0tfSCkgJChYUkVHRVhfSCkKKyBnZW5ndHlwZS5vOiAkKENPTkZJR19IKQorLUNGTEFHUy1nZW5ndHlwZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKytDRkxBR1MtZ2VuZ3R5cGUubyArPSAtREdFTkVSQVRPUl9GSUxFMgorK0NGTEFHUy1idWlsZC9nZW5ndHlwZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKyBidWlsZC9nZW5ndHlwZS5vOiAkKEJDT05GSUdfSCkKKyAKKyBidWlsZC9nZW5tZGRlcHMubzogZ2VubWRkZXBzLmMgJChCQ09ORklHX0gpICQoU1lTVEVNX0gpIGNvcmV0eXBlcy5oCVwKK0BAIC0zOTg4LDcgKzM5OTAsNyBAQAorICMgYW55IHN5c3RlbSBoZWFkZXIgaXMgaW5jbHVkZWQuCisgZ2VuZ3R5cGUtbGV4LmMgOiBnZW5ndHlwZS1sZXgubAorIAktJChGTEVYKSAkKEZMRVhGTEFHUykgLW8kQCAkPCAmJiB7IFwKKy0JICBlY2hvICcjaW5jbHVkZSAiYmNvbmZpZy5oIicgPiAkQC50bXA7IFwKKysJICBlY2hvICcnID4gJEAudG1wOyBcCisgCSAgY2F0ICRAID4+ICRALnRtcDsgXAorIAkgIG12ICRALnRtcCAkQDsgXAorIAl9CitJbmRleDogZ2NjLTQuOC4xL2djYy9kb3VibGUtaW50LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2MvZG91YmxlLWludC5oCTIwMTMtMDEtMzAgMTE6MDQ6MzAuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL2djYy9kb3VibGUtaW50LmgJMjAxMy0wOC0xOSAxMTo0MTo1MS41NjQwMTI3MTkgKzAwMDAKK0BAIC00NDgsMTAgKzQ0OCwxMiBAQAorIAorIAorICNpZm5kZWYgR0VORVJBVE9SX0ZJTEUKKysjaWZuZGVmIEdFTkVSQVRPUl9GSUxFMgorIC8qIENvbnZlcnNpb24gdG8gYW5kIGZyb20gR01QIGludGVnZXIgcmVwcmVzZW50YXRpb25zLiAgKi8KKyAKKyB2b2lkIG1wel9zZXRfZG91YmxlX2ludCAobXB6X3QsIGRvdWJsZV9pbnQsIGJvb2wpOworIGRvdWJsZV9pbnQgbXB6X2dldF9kb3VibGVfaW50IChjb25zdF90cmVlLCBtcHpfdCwgYm9vbCk7CisgI2VuZGlmCisrI2VuZGlmCisgCisgI2VuZGlmIC8qIERPVUJMRV9JTlRfSCAqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Ni1saWJhdG9taWMtZGVwdHJhY2tpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQ2LWxpYmF0b21pYy1kZXB0cmFja2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWE0ZjQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Ni1saWJhdG9taWMtZGVwdHJhY2tpbmcucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorZ2NjIDQuOCB3b24ndCBidWlsZCB3aXRoIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIHNpbmNlIHRoZSAqLlBwbyBmaWxlcworZG9uJ3QgZ2V0IGNyZWF0ZWQgdW5sZXNzIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgaXMgdHJ1ZS4KKworVGhpcyBwYXRjaCBlbnN1cmVzIHdlIG9ubHkgdXNlIHRob3NlIGNvbXBpbGVyIG9wdGlvbnMgd2hlbiBpdHMgZW5hYmxlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworKFByb2JsZW0gd2FzIGFscmVhZHkgcmVwb3J0ZWQgdXBzdHJlYW0sIGF0dGFjaGVkIHRoaXMgcGF0Y2ggdGhlcmUKK2h0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTU5MzApCisKK1JQIAorMjAxMi8wOS8yMgorCitJbmRleDogZ2NjLTQuOC4xL2xpYmF0b21pYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2xpYmF0b21pYy9NYWtlZmlsZS5hbQkyMDEzLTAxLTE0IDE4OjE2OjIzLjAwMDAwMDAwMCArMDAwMAorKysrIGdjYy00LjguMS9saWJhdG9taWMvTWFrZWZpbGUuYW0JMjAxMy0wOS0yMiAxMDozODoxOC45MDQwNjQ3NTAgKzAwMDAKK0BAIC0xMDAsNyArMTAwLDggQEAKKyBJRlVOQ19ERUYJPSAtRElGVU5DX0FMVD0kKFBBVF9TKQorIElGVU5DX09QVAk9ICQod29yZCAkKFBBVF9TKSwkKElGVU5DX09QVElPTlMpKQorIAorLU1fREVQUwkJPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9UUlVFQE1fREVQUwkJPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9GQUxTRUBNX0RFUFMJCT0gCisgTV9TSVpFCQk9IC1ETj0kKFBBVF9OKQorIE1fSUZVTkMJCT0gJChpZiAkKFBBVF9TKSwkKElGVU5DX0RFRikgJChJRlVOQ19PUFQpKQorIE1fRklMRQkJPSAkKFBBVF9CQVNFKV9uLmMKK0luZGV4OiBnY2MtNC44LjEvbGliYXRvbWljL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvbGliYXRvbWljL01ha2VmaWxlLmluCTIwMTMtMDUtMzEgMDk6MDk6MjYuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL2xpYmF0b21pYy9NYWtlZmlsZS5pbgkyMDEzLTA5LTIyIDEwOjQwOjQyLjUyMDA1OTkxNyArMDAwMAorQEAgLTI5OCw3ICsyOTgsOCBAQAorIFBBVF9TID0gJCh3b3JkIDMsJChQQVRfU1BMSVQpKQorIElGVU5DX0RFRiA9IC1ESUZVTkNfQUxUPSQoUEFUX1MpCisgSUZVTkNfT1BUID0gJCh3b3JkICQoUEFUX1MpLCQoSUZVTkNfT1BUSU9OUykpCistTV9ERVBTID0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfVFJVRUBNX0RFUFMgPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9GQUxTRUBNX0RFUFMgPSAKKyBNX1NJWkUgPSAtRE49JChQQVRfTikKKyBNX0lGVU5DID0gJChpZiAkKFBBVF9TKSwkKElGVU5DX0RFRikgJChJRlVOQ19PUFQpKQorIE1fRklMRSA9ICQoUEFUX0JBU0UpX24uYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Ny1yZXBvbWVtYnVnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Ny1yZXBvbWVtYnVnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZmQ1NWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQ3LXJlcG9tZW1idWcucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorV2hlbiBjb21waWxpbmcgYSBwcm9qZWN0IHVzaW5nIC1mcmVwbywgLnJwbyBmaWxlcyBhcmUgd3JpdHRlbiBhbG9uZ3NpZGUKK3RoZSAubyBmaWxlLCB0aGUgc3ltYm9scyBlaXRoZXIgaGF2ZSBPIG9yIEMgYWdhaW5zdCB0aGVtLiBEdXJpbmcgZmluYWwgbGlua2luZywKK3RoZSBvYmplY3RzIGNhbiBiZSByZWNvbXBpbGVkIHdpdGggc29tZSBvZiB0aGUgZW50cmllcyB0d2Vha2VkL2Nob3NlbiBieSB0aGUgCit0bGluay5jIGNvZGUgKHZpc2libGUgd2l0aCBUTElOS19WRVJCT1NFPTMpLCBpdCBkb2VzIHRoaXMgYnkgY2hhbmdpbmcgTyAtPiBDCitpbiB0aGUgLnJwbyBmaWxlcy4KKworTXkgdGVzdHMgc2hvd2VkIHRoYXQgaW5pdF9yZXBvIChjcC9yZXBvLmMpIHdhcyBjb3JyZWN0bHkgY2FsbGluZyAKK0lERU5USUZJRVJfUkVQT19DSE9TRU4gYWdhaW5zdCB0aGUgcmlnaHQgaWRlbnRpZmVycyBhbmQgc2V0dGluZyB0aGUKK2Nob3NlbiBiaXQuCisKK0J5IHRoZSB0aW1lIGZpbmlzaF9yZXBvKCkgb3IgZW1pdF9yZXBvX3AoKSB3ZXJlIGNhbGxlZCwgdGhlIHBvaW50ZXIgcmV0dXJuZWQKK2J5IGdldF9pZGVudGlmaWVyKCkgZm9yIHRoZSBzeW1ib2wgbWFya2VkIGR1cmluZyBpbml0X3JlcG8gaGFkIGNoYW5nZWQgYW5kCit0aGUgY2hvc2VuIGJpdCB3YXMgbm8gbG9uZ2VyIHNldC4gVGhpcyBsZWFkIHRvIGxpbmtpbmcgYnVncyBsaWtlOgorCitjb2xsZWN0OiByZWxpbmtpbmcKK2NvbGxlY3QyOiBlcnJvcjogJ19aTks2c3Vkb2t1NUNsZWFySU5TXzhTZXF1ZW5jZUVFY2xFUlMxXycgd2FzIGFzc2lnbmVkIHRvICdib2FyZC5ycG8nLCBidXQgd2FzIG5vdCBkZWZpbmVkIGR1cmluZyByZWNvbXBpbGF0aW9uLCBvciB2aWNlIHZlcnNhCisKK1RoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBpcyBnZXR0aW5nIGNhbGxlZCBiZWZvcmUKK2ZpbmlzaF9yZXBvKCkgaXMgY2FsbGVkIGFuZCBnZ2NfcHJvdGVjdF9pZGVudGlmaWVycyBpcyBzZXQgdG8gZmFsc2UgCitzbyB0aGUgaWRlbnRpZmllcnMgYXJlIG5vdCBwcmVzZXJ2ZWQuIFRoZXkgYXJlIHJlY3JlYXRlZCBidXQgdGhlIAorY2hvc2VuIGJpdHMgZ2V0IHdpcGVkIG91dCB3aGljaCBpcyB3aHkgdGhlIHBvaW50ZXIgY2hhbmdlcyBhbmQgdGhlIAorY2hvc2VuIGJpdCBpcyBub3Qgc2V0LgorCitUaGUgZml4IGlzIHRvIGNoYW5nZSBnZ2NfcHJvdGVjdF9pZGVudGlmaWVycyAqYWZ0ZXIqIHRoZSBmaW5pc2hfcmVwbyAKK2NhbGxzIGFyZSBtYWRlLgorCitSZXByb2R1Y3Rpb24gaXMgdHJpY2t5IHNpbmNlIHlvdSBuZWVkIHRvIHRyaWdnZXIgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGF0CitqdXN0IHRoZSByaWdodCBtb21lbnQuCisKK1JQIDIwMTMvMTAvOQorCitbWU9DVE8gIzUxMzNdCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ2NjLTQuOC4xL2djYy90b3BsZXYuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2djYy90b3BsZXYuYwkyMDEzLTAzLTI4IDA4OjI5OjUxLjAwMDAwMDAwMCArMDAwMAorKysrIGdjYy00LjguMS9nY2MvdG9wbGV2LmMJMjAxMy0xMC0wOSAyMDoyNzoxNy4wODkyMjgwMjMgKzAwMDAKK0BAIC01NTEsMTEgKzU1MSwxMSBAQAorICAgaWYgKGZsYWdfc3ludGF4X29ubHkgfHwgZmxhZ193cGEpCisgICAgIHJldHVybjsKKyAKKy0gIGdnY19wcm90ZWN0X2lkZW50aWZpZXJzID0gZmFsc2U7CistCisgICAvKiBUaGlzIG11c3QgYWxzbyBjYWxsIGZpbmFsaXplX2NvbXBpbGF0aW9uX3VuaXQuICAqLworICAgbGFuZ19ob29rcy5kZWNscy5maW5hbF93cml0ZV9nbG9iYWxzICgpOworIAorKyAgZ2djX3Byb3RlY3RfaWRlbnRpZmllcnMgPSBmYWxzZTsKKysKKyAgIGlmIChzZWVuX2Vycm9yICgpKQorICAgICByZXR1cm47CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQ5LUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQ5LUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk4ZjhmZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDktRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDllMGUxOWVhYzI1NjJmNzM4NTg2MDJmZTI2ZTIwNDRlYjhiMjBjNDcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kcnUtQ2V6YXIgU2FyZGFuIDxhbGV4YW5kcnUuc2FyZGFuQGZyZWVzY2FsZS5jb20+CitEYXRlOiBXZWQsIDUgRmViIDIwMTQgMTY6NTI6MzEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gRW5hYmxlIFNQRSAmIEFsdGlWZWMgZ2VuZXJhdGlvbiBvbiBwb3dlcGMqbGludXggdGFyZ2V0CisKK1doZW4gaXMgY29uZmlndXJlZCB3aXRoIC0tdGFyZ2V0PXBvd2VycGMtbGludXgsIHRoZSByZXN1bHRpbmcgR0NDIHdpbGwgCitub3QgYmUgYWJsZSB0byBnZW5lcmF0ZSBjb2RlIGZvciBTUEUgdGFyZ2V0cyAoZTUwMHYxL3YyKS4KK0dDQyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eHNwZSB3aWxsIG5vdCBiZSBhYmxlIHRvCitnZW5lcmF0ZSBBbHRpVmVjIGluc3RydWN0aW9ucyAoZm9yIGU2NTAwKS4KK1RoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmZpZ3VyZWQgZmlsZSBzdWNoIHRoYXQgU1BFIG9yIEFsdGlWZWMgY29kZQorY2FuIGJlIGdlbmVyYXRlZCB3aGVuIGdjYyBpcyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eC4KK1RoZSBBQkkgYW5kIHNwZWNpZmZpYyBpbnN0cnVjdGlvbnMgY2FuIGJlIHNlbGVjdGVkIHRocm91Z2ggdGhlCisiLW1hYmk9c3BlIG9yIC1tYWJpPWFsdGl2ZWMiIGFuZCB0aGUgIi1tc3BlIG9yIC1tYWx0aXZlYyIgcGFyYW1ldGVycy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kcnUtQ2V6YXIgU2FyZGFuIDxhbGV4YW5kcnUuc2FyZGFuQGZyZWVzY2FsZS5jb20+CistLS0KKyBnY2MvY29uZmlnLmdjYyB8ICAgIDcgKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcuZ2NjIGIvZ2NjL2NvbmZpZy5nY2MKK2luZGV4IGNiN2E5NGUuLmQzOTJjMmIgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnLmdjYworKysrIGIvZ2NjL2NvbmZpZy5nY2MKK0BAIC0yMDY4LDcgKzIwNjgsMTIgQEAgcG93ZXJwYy0qLXJ0ZW1zKikKKyAJdG1ha2VfZmlsZT0icnM2MDAwL3QtZnBydWxlcyByczYwMDAvdC1ydGVtcyB0LXJ0ZW1zIHJzNjAwMC90LXBwY2NvbW0iCisgCTs7CisgcG93ZXJwYyotKi1saW51eCopCistCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBmcmVlYnNkLXNwZWMuaCByczYwMDAvc3lzdjQuaCIKKysJY2FzZSAke3RhcmdldH0gaW4KKysJICAgIHBvd2VycGMqLSotbGludXgqc3BlKiB8IHBvd2VycGMqLSotbGludXgqYWx0aXZlYyopCisrCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieGVsZi5oIGVsZm9zLmggZnJlZWJzZC1zcGVjLmggcnM2MDAwL3N5c3Y0LmgiIDs7CisrCSAgICAqKQorKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnhlbGYuaCBlbGZvcy5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIHJzNjAwMC9saW51eGFsdGl2ZWMuaCByczYwMDAvbGludXhzcGUuaCByczYwMDAvZTUwMC5oIiA7OworKwllc2FjCisgCWV4dHJhX29wdGlvbnM9IiR7ZXh0cmFfb3B0aW9uc30gcnM2MDAwL3N5c3Y0Lm9wdCIKKyAJdG1ha2VfZmlsZT0icnM2MDAwL3QtZnBydWxlcyByczYwMDAvdC1wcGNvcyAke3RtYWtlX2ZpbGV9IHJzNjAwMC90LXBwY2NvbW0iCisgCWNhc2UgJHt0YXJnZXR9IGluCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvdGFyZ2V0LWdjYy1pbmNsdWRlZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvdGFyZ2V0LWdjYy1pbmNsdWRlZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0OGM2NmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC90YXJnZXQtZ2NjLWluY2x1ZGVkaXIucGF0Y2gKQEAgLTAsMCArMSw4MSBAQAorRW5zdXJlIHRhcmdldCBnY2MgaGVhZGVycyBjYW4gYmUgaW5jbHVkZWQKKworVGhlcmUgYXJlIGEgZmV3IGhlYWRlcnMgaW5zdGFsbGVkIGFzIHBhcnQgb2YgdGhlIE9wZW5FbWJlZGRlZAorZ2NjLXJ1bnRpbWUgdGFyZ2V0IChvbXAuaCwgc3NwLyouaCkuIEJlaW5nIGluc3RhbGxlZCBmcm9tIGEgcmVjaXBlCitidWlsdCBmb3IgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUsIHRoZXNlIGFyZSB3aXRoaW4gdGhlIHRhcmdldAorc3lzcm9vdCBhbmQgbm90IGNyb3NzL25hdGl2ZXNkazsgdGh1cyB0aGV5IHdlcmVuJ3QgYWJsZSB0byBiZQorZm91bmQgYnkgZ2NjIHdpdGggdGhlIGV4aXN0aW5nIHNlYXJjaCBwYXRocy4gQWRkIHN1cHBvcnQgZm9yCitwaWNraW5nIHVwIHRoZXNlIGhlYWRlcnMgdW5kZXIgdGhlIHN5c3Jvb3Qgc3VwcGxpZWQgb24gdGhlIGdjYworY29tbWFuZCBsaW5lIGluIG9yZGVyIHRvIHJlc29sdmUgdGhpcy4KKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gYS9nY2MvTWFrZWZpbGUuaW4JMjAxNC0xMi0yMyAxMTo1NzozMy4zMjc4NzMzMzEgKzAwMDAKKysrKyBiL2djYy9NYWtlZmlsZS5pbgkyMDE1LTAxLTIxIDExOjMyOjM1LjQ0NzMwNTM5NCArMDAwMAorQEAgLTU4Nyw2ICs1ODcsNyBAQAorIAorICMgRGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21waWxlciBmaW5kcyBsaWJyYXJpZXMgZXRjLgorIGxpYnN1YmRpciA9ICQobGliZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKHZlcnNpb24pCisrbGlic3ViZGlyX3RhcmdldCA9IGdjYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikKKyAjIERpcmVjdG9yeSBpbiB3aGljaCB0aGUgY29tcGlsZXIgZmluZHMgZXhlY3V0YWJsZXMKKyBsaWJleGVjc3ViZGlyID0gJChsaWJleGVjZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKHZlcnNpb24pCisgIyBEaXJlY3RvcnkgaW4gd2hpY2ggYWxsIHBsdWdpbiByZXNvdXJjZXMgYXJlIGluc3RhbGxlZAorQEAgLTI1MzQsNiArMjUzNSw3IEBACisgCisgUFJFUFJPQ0VTU09SX0RFRklORVMgPSBcCisgICAtREdDQ19JTkNMVURFX0RJUj1cIiQobGlic3ViZGlyKS9pbmNsdWRlXCIgXAorKyAgLURHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUPVwiJChsaWJzdWJkaXJfdGFyZ2V0KS9pbmNsdWRlXCIgXAorICAgLURGSVhFRF9JTkNMVURFX0RJUj1cIiQobGlic3ViZGlyKS9pbmNsdWRlLWZpeGVkXCIgXAorICAgLURHUExVU1BMVVNfSU5DTFVERV9ESVI9XCIkKGdjY19neHhfaW5jbHVkZV9kaXIpXCIgXAorICAgLURHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1Q9JChnY2NfZ3h4X2luY2x1ZGVfZGlyX2FkZF9zeXNyb290KSBcCistLS0gYS9nY2MvY3BwZGVmYXVsdC5jCTIwMTUtMDEtMTMgMTc6NDA6MjYuMTMxMDEyNzI1ICswMDAwCisrKysgYi9nY2MvY3BwZGVmYXVsdC5jCTIwMTUtMDEtMjEgMTE6MzA6MDguOTI4NDI2NDkyICswMDAwCitAQCAtNTksNiArNTksMTAgQEAKKyAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMuICAqLworICAgICB7IEdDQ19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKyAjZW5kaWYKKysjaWZkZWYgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVAorKyAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycyB1bmRlciB0aGUgc3BlY2lmaWVkIHN5c3Jvb3QuICAqLworKyAgICB7IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VULCAiR0NDIiwgMCwgMCwgMSwgMCB9LAorKyNlbmRpZgorICNpZmRlZiBMT0NBTF9JTkNMVURFX0RJUgorICAgICAvKiAvdXNyL2xvY2FsL2luY2x1ZGUgY29tZXMgYmVmb3JlIHRoZSBmaXhpbmNsdWRlZCBoZWFkZXIgZmlsZXMuICAqLworICAgICB7IExPQ0FMX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAxLCAyIH0sCitkaWZmIC0tZ2l0IGEvZ2NjL2RlZmF1bHRzLmggYi9nY2MvZGVmYXVsdHMuaAoraW5kZXggZjk0YWUxNy4uZDk4YjQwYiAxMDA2NDQKKy0tLSBhL2djYy9kZWZhdWx0cy5oCisrKysgYi9nY2MvZGVmYXVsdHMuaAorQEAgLTEzOTAsNCArMTM5MCwxMyBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKyAKKyAjZW5kaWYgLyogR0NDX0lOU05fRkxBR1NfSCAgKi8KKyAKKysvKiBEZWZhdWx0IHByZWZpeGVzIHRvIGF0dGFjaCB0byBjb21tYW5kIG5hbWVzLiAgKi8KKysKKysjaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMQorKyNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xICIvbGliLyIKKysjZW5kaWYKKysjaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMgorKyNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yICIvdXNyL2xpYi8iCisrI2VuZGlmCisrCisgI2VuZGlmICAvKiAhIEdDQ19ERUZBVUxUU19IICovCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA5ZjBiNzgxLi4xNzRmY2E4IDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC0xMTg5LDEzICsxMTg5LDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmdjY19saWJleGVjX3ByZWZpeDsKKyAKKyAvKiBEZWZhdWx0IHByZWZpeGVzIHRvIGF0dGFjaCB0byBjb21tYW5kIG5hbWVzLiAgKi8KKyAKKy0jaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMQorLSNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xICIvbGliLyIKKy0jZW5kaWYKKy0jaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMgorLSNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yICIvdXNyL2xpYi8iCistI2VuZGlmCistCisgI2lmZGVmIENST1NTX0RJUkVDVE9SWV9TVFJVQ1RVUkUgIC8qIERvbid0IHVzZSB0aGVzZSBwcmVmaXhlcyBmb3IgYSBjcm9zcyBjb21waWxlci4gICovCisgI3VuZGVmIE1EX0VYRUNfUFJFRklYCisgI3VuZGVmIE1EX1NUQVJURklMRV9QUkVGSVgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTFiYTVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkuaW5jCkBAIC0wLDAgKzEsMTI3IEBACityZXF1aXJlIGdjYy1jb21tb24uaW5jCisKKyMgVGhpcmQgZGlnaXQgaW4gUFYgc2hvdWxkIGJlIGluY3JlbWVudGVkIGFmdGVyIGEgbWlub3IgcmVsZWFzZQorCitQViA9ICI0LjkuMyIKKworIyBCSU5WIHNob3VsZCBiZSBpbmNyZW1lbnRlZCB0byBhIHJldmlzaW9uIGFmdGVyIGEgbWlub3IgZ2NjIHJlbGVhc2UKKworQklOViA9ICI0LjkuMyIKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vZ2NjLTQuOToiCisKK0RFUEVORFMgPSsgIm1wZnIgZ21wIGxpYm1wYyB6bGliIgorTkFUSVZFREVQUyA9ICJtcGZyLW5hdGl2ZSBnbXAtbmF0aXZlIGxpYm1wYy1uYXRpdmUgemxpYi1uYXRpdmUiCisKK0xJQ0VOU0UgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24gJiBHUEx2MyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJcCisgICAgZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKKyAgICBmaWxlOi8vQ09QWUlORzM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICBmaWxlOi8vQ09QWUlORzMuTElCO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiBcCisgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCisgICAgZmlsZTovL0NPUFlJTkcuUlVOVElNRTttZDU9ZmU2MGQ4NzA0ODU2N2Q0ZmU4YzhhMGVkMjQ0OGJjYzggXAorIgorCitTUkNfVVJJID0gIlwKKyAgICAke0dOVV9NSVJST1J9L2djYy9nY2MtJHtQVn0vZ2NjLSR7UFZ9LnRhci5iejIgXAorICAgIGZpbGU6Ly8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAyLXVjbGliYy1jb25mLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaCBcCisgICAgZmlsZTovLzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwOS1jOTktc25wcmludGYucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDEwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaCBcCisgICAgZmlsZTovLzAwMTEtaW5kZXhfbWFjcm8ucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDEzLWxpYnN0ZGMtbmFtZXNwYWNlLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxNC1zaC1wcjI0ODM2LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxNS1hcm0tVXNlLVRBUkdFVF9FTkRJQU5fT1BUSU9OLWZvci1kZXRlcm1pbmluZy1NVUxUSUxJLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxNi1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaCBcCisgICAgZmlsZTovLzAwMTctZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxOC1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBcCisgICAgZmlsZTovLzAwMTktNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDIwLW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDIxLWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaCBcCisgICAgZmlsZTovLzAwMjItQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaCBcCisgICAgZmlsZTovLzAwMjMtVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDI0LVBSLXRhcmdldC0zMjIxOS5wYXRjaCBcCisgICAgZmlsZTovLzAwMjUtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDI2LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyNy1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaCBcCisgICAgZmlsZTovLzAwMjgtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaCBcCisgICAgZmlsZTovLzAwMjktRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaCBcCisgICAgZmlsZTovLzAwMzAtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAzMS1EaXNhYmxlLXNkdC5wYXRjaCBcCisgICAgZmlsZTovLzAwMzItbGlidG9vbC5wYXRjaCBcCisgICAgZmlsZTovLzAwMzMtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaCBcCisgICAgZmlsZTovLzAwMzQtVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaCBcCisgICAgZmlsZTovLzAwNDAtZml4LWcrKy1zeXNyb290LnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0MS1saWJ0b29sLWF2b2lkLWxpYmRpci5wYXRjaCBcCisgICAgZmlsZTovLzAwNDMtY3BwLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0NC1nZW5ndHlwZXMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDQ2LWxpYmF0b21pYy1kZXB0cmFja2luZy5wYXRjaCBcCisgICAgZmlsZTovLzAwNDctcmVwb21lbWJ1Zy5wYXRjaCBcCisgICAgZmlsZTovLzAwNDktRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaCBcCisgICAgZmlsZTovLzAwNTAtUmV2ZXJ0LVVzZS1kYnhfcmVnX251bWJlci1mb3Itc3Bhbm5pbmctcmVnaXN0ZXJzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA1MS1lYWJpc3BlLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA1Mi1BZGQtdGFyZ2V0LWhvb2stdG8tb3ZlcnJpZGUtRFdBUkYyLWZyYW1lLXJlZ2lzdGVyLXNpLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA1My1nY2MtZml4LXNlZ2ZhdWx0LWZyb20tY2FsbGluZy1mcmVlLW9uLW5vbi1tYWxsb2MtZC1hLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA1NC1nY2MtTWFrZWZpbGUuaW4tZml4LXBhcmFsbGVsLWJ1aWxkaW5nLWZhaWx1cmUucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDU1LWR3YXJmLXJlZy1wcm9jZXNzaW5nLWhlbHBlci5wYXRjaCBcCisgICAgZmlsZTovLzAwNTYtZGVmaW5lLWRlZmF1bHQtY2ZhLXJlZ2lzdGVyLW1hcHBpbmcucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDU3LWFhcmNoNjQtY29uZmlnLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA1OC1nY2MtcjIxMjE3MS5wYXRjaCBcCisgICAgZmlsZTovLzAwNTktZ2NjLVBSLXJ0bC1vcHRpbWl6YXRpb24tNjMzNDgucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDYwLU9ubHktYWxsb3ctZTUwMC1kb3VibGUtaW4tU1BFX1NJTURfUkVHTk9fUC1yZWdpc3RlcnMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDYxLXRhcmdldC1nY2MtaW5jbHVkZWRpci5wYXRjaCBcCisgICAgZmlsZTovLzAwNjItVXNlLVNZU1RFTUxJQlNfRElSLXJlcGxhY2VtZW50LWluc3RlYWQtb2YtaGFyZGNvZGluZy5wYXRjaCBcCisgICAgZmlsZTovLzAwNjMtbmF0aXZlc2RrLWdjYy1zdXBwb3J0LnBhdGNoIFwKKyAgICBmaWxlOi8vMDA2NC1oYW5kbGUtdGFyZ2V0LXN5c3Jvb3QtbXVsdGlsaWIucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjZmODMxYjRkMjUxODcyNzM2ZThlOWNjMDk3NDZmMzI3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjIzMzJiMmE1YTMyMWI1NzUwOGI5MDMxMzU0YTg1MDNhZjZmZGZiODY4YjhjMTc0OGQzMzAyOGQxMDBhOGI2N2UiCisKK1MgPSAiJHtUTVBESVJ9L3dvcmstc2hhcmVkL2djYy0ke1BWfS0ke1BSfS9nY2MtJHtQVn0iCitCID0gIiR7V09SS0RJUn0vZ2NjLSR7UFZ9L2J1aWxkLiR7SE9TVF9TWVN9LiR7VEFSR0VUX1NZU30iCisKKyMgTGFuZ3VhZ2UgT3ZlcnJpZGVzCitGT1JUUkFOID0gIiIKK0pBVkEgPSAiIgorCitMVE8gPSAiLS1lbmFibGUtbHRvIgorCitFWFRSQV9PRUNPTkZfQkFTRSA9ICJcCisgICAgJHtMVE99IFwKKyAgICAtLWVuYWJsZS1saWJzc3AgXAorICAgIC0tZGlzYWJsZS1ib290c3RyYXAgXAorICAgIC0tZGlzYWJsZS1saWJtdWRmbGFwIFwKKyAgICAtLXdpdGgtc3lzdGVtLXpsaWIgXAorICAgIC0td2l0aC1saW5rZXItaGFzaC1zdHlsZT0ke0xJTktFUl9IQVNIX1NUWUxFfSBcCisgICAgLS1lbmFibGUtbGlua2VyLWJ1aWxkLWlkIFwKKyAgICAtLXdpdGgtcHBsPW5vIFwKKyAgICAtLXdpdGgtY2xvb2c9bm8gXAorICAgIC0tZW5hYmxlLWNoZWNraW5nPXJlbGVhc2UgXAorICAgIC0tZW5hYmxlLWNoZWFkZXJzPWNfZ2xvYmFsIFwKKyIKKworRVhUUkFfT0VDT05GX0lOSVRJQUwgPSAiXAorICAgIC0tZGlzYWJsZS1saWJtdWRmbGFwIFwKKyAgICAtLWRpc2FibGUtbGliZ29tcCBcCisgICAgLS1kaXNhYmxlLWxpYnNzcCBcCisgICAgLS1kaXNhYmxlLWxpYnF1YWRtYXRoIFwKKyAgICAtLXdpdGgtc3lzdGVtLXpsaWIgXAorICAgIC0tZGlzYWJsZS1sdG8gXAorICAgIC0tZGlzYWJsZS1wbHVnaW4gXAorICAgIC0tZW5hYmxlLWRlY2ltYWwtZmxvYXQ9bm8gXAorIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLWRpc2FibGUtZGVjaW1hbC1mbG9hdCAiCisKK0VYVFJBX09FQ09ORl9QQVRIUyA9ICJcCisgICAgLS13aXRoLWd4eC1pbmNsdWRlLWRpcj0vbm90L2V4aXN0e3RhcmdldF9pbmNsdWRlZGlyfS9jKysvJHtCSU5WfSBcCisgICAgLS13aXRoLXN5c3Jvb3Q9L25vdC9leGlzdCBcCisgICAgLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKKyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTg4MDExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gYmYzZDk2YWU1OGZhMTgwYjhiNDY4ZDI1ZGMyZTAyMDlkYWNhMjc1MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjM3OjExICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDEvMzVdIGdjYy00LjMuMTogQVJDSF9GTEFHU19GT1JfVEFSR0VUCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBjb25maWd1cmUgICAgfCAgICAyICstCisgY29uZmlndXJlLmFjIHwgICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCBkODA5NTM1Li4xYjc2YzkwIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC03NDM5LDcgKzc0MzksNyBAQCBmaQorICMgZm9yIHRhcmdldF9hbGlhcyBhbmQgZ2NjIGRvZXNuJ3QgbWFuYWdlIGl0IGNvbnNpc3RlbnRseS4KKyB0YXJnZXRfY29uZmlnYXJncz0iLS1jYWNoZS1maWxlPS4vY29uZmlnLmNhY2hlICR7dGFyZ2V0X2NvbmZpZ2FyZ3N9IgorIAorLUZMQUdTX0ZPUl9UQVJHRVQ9CisrRkxBR1NfRk9SX1RBUkdFVD0iJEFSQ0hfRkxBR1NfRk9SX1RBUkdFVCIKKyBjYXNlICIgJHRhcmdldF9jb25maWdkaXJzICIgaW4KKyAgKiIgbmV3bGliICIqKQorICAgY2FzZSAiICR0YXJnZXRfY29uZmlnYXJncyAiIGluCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA0OGVjMWFhLi44OWQxZDNmIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yODczLDcgKzI4NzMsNyBAQCBmaQorICMgZm9yIHRhcmdldF9hbGlhcyBhbmQgZ2NjIGRvZXNuJ3QgbWFuYWdlIGl0IGNvbnNpc3RlbnRseS4KKyB0YXJnZXRfY29uZmlnYXJncz0iLS1jYWNoZS1maWxlPS4vY29uZmlnLmNhY2hlICR7dGFyZ2V0X2NvbmZpZ2FyZ3N9IgorIAorLUZMQUdTX0ZPUl9UQVJHRVQ9CisrRkxBR1NfRk9SX1RBUkdFVD0iJEFSQ0hfRkxBR1NfRk9SX1RBUkdFVCIKKyBjYXNlICIgJHRhcmdldF9jb25maWdkaXJzICIgaW4KKyAgKiIgbmV3bGliICIqKQorICAgY2FzZSAiICR0YXJnZXRfY29uZmlnYXJncyAiIGluCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDItdWNsaWJjLWNvbmYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAyLXVjbGliYy1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYTNiMTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAyLXVjbGliYy1jb25mLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK0Zyb20gZDAzMDk3M2M4NzJjMDBkOTE2OTIxZDg0ZGVlZTBhZjJjMGQzODA4MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjM4OjI1ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDIvMzVdIHVjbGliYy1jb25mCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoIHwgICAgNCArKysrCisgbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcgICAgIHwgICAgNCArKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2ggYi9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKK2luZGV4IDYwYjA0OTcuLjZkYzdlYWQgMTAwNzU1CistLS0gYS9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKKysrKyBiL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAorQEAgLTEwNiw2ICsxMDYsMTAgQEAgaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCAtYSAkSF9SRUFMX1RBUkdFVCA9IGk2ODYtcGMtbGludXgtZ251IF0KKyAgdGhlbgorICAgbWFrZSBhbGwtZ2RiIGFsbC1kZWphZ251IGFsbC1sZCB8fCBleGl0IDEKKyAgIG1ha2UgaW5zdGFsbC1nZGIgaW5zdGFsbC1kZWphZ251IGluc3RhbGwtbGQgfHwgZXhpdCAxCisrZWxpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIC1hICRIX1JFQUxfVEFSR0VUID0gaTY4Ni1wYy1saW51eC11Y2xpYmMgXQorKyB0aGVuCisrICBtYWtlIGFsbC1nZGIgYWxsLWRlamFnbnUgYWxsLWxkIHx8IGV4aXQgMQorKyAgbWFrZSBpbnN0YWxsLWdkYiBpbnN0YWxsLWRlamFnbnUgaW5zdGFsbC1sZCB8fCBleGl0IDEKKyBlbGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgXSA7IHRoZW4KKyAgIG1ha2UgYm9vdHN0cmFwIHx8IGV4aXQgMQorICAgbWFrZSBpbnN0YWxsIHx8IGV4aXQgMQorZGlmZiAtLWdpdCBhL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnIGIvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKK2luZGV4IDc0M2Q5NTEuLmFlNGVhNjAgMTAwNzU1CistLS0gYS9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZworKysrIGIvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKK0BAIC02MDMsNyArNjAzLDcgQEAgaG9zdF9vcz1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisgCisgIyBUcmFuc2Zvcm0gbGludXgqIHRvICotKi1saW51eC1nbnUqLCB0byBzdXBwb3J0IG9sZCBjb25maWd1cmUgc2NyaXB0cy4KKyBjYXNlICRob3N0X29zIGluCistbGludXgtZ251KikgOzsKKytsaW51eC1nbnUqfGxpbnV4LXVjbGliYyopIDs7CisgbGludXgqKSBob3N0PWBlY2hvICRob3N0IHwgc2VkICdzL15cKC4qLS4qLWxpbnV4XClcKC4qXCkkL1wxLWdudVwyLydgCisgZXNhYworIAorQEAgLTEyNDcsNyArMTI0Nyw3IEBAIGxpbnV4LWdudW9sZGxkKiB8IGxpbnV4LWdudWFvdXQqIHwgbGludXgtZ251Y29mZiopCisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIHZlcnNpb25fdHlwZT1saW51eAorICAgbmVlZF9saWJfcHJlZml4PW5vCisgICBuZWVkX3ZlcnNpb249bm8KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDk4ZTk5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2gKQEAgLTAsMCArMSw4NyBAQAorRnJvbSBkMmQ5ZGQ3NTZjNDM1NmQxNGRkN2FlMDAzODU2MzQ0Y2I0ZjM3OTg1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDA6MTIgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwMy8zNV0gZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYyB8ICAgIDUgKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmggIHwgICAgOSArKysrKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmggIHwgICAgOSArKysrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDIzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjCitpbmRleCAwZDMwOWE1Li5mMmYxZTFmIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYworQEAgLTI2Myw1ICsyNjMsMTAgQEAgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCisgI2lmZGVmIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVAorICNkZWZpbmUgX0dMSUJDWFhfTERCTF9DT01QQVQoZGJsLCBsZGJsKSBcCisgICBleHRlcm4gIkMiIHZvaWQgbGRibCAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKGFsaWFzICgjZGJsKSkpCisrI2lmZGVmIF9fVUNMSUJDX18KKysvLyBUaGlzIGlzIGJlY2F1c2UgX19jX2xvY2FsZSBpcyBvZiB0eXBlIF9fY3R5cGVfdG91cGxvd190KiB3aGljaCBpcyBzaG9ydCBvbiB1Y2xpYmMuIGZvciBnbGliYyBpdHMgaW50KgorK19HTElCQ1hYX0xEQkxfQ09NUEFUKF9aU3QxNF9fY29udmVydF90b192SWRFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQcywgX1pTdDE0X19jb252ZXJ0X3RvX3ZJZUV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BzKTsKKysjZWxzZQorIF9HTElCQ1hYX0xEQkxfQ09NUEFUKF9aU3QxNF9fY29udmVydF90b192SWRFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQaSwgX1pTdDE0X19jb252ZXJ0X3RvX3ZJZUV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BpKTsKKysjZW5kaWYKKyAjZW5kaWYgLy8gX0dMSUJDWFhfTE9OR19ET1VCTEVfQ09NUEFUCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oCitpbmRleCBiNWZkOTg5Li4zZGE5YTVkIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmgKK0BAIC00MCwxMyArNDAsMjIgQEAKKyAKKyAjaW5jbHVkZSA8Y2xvY2FsZT4KKyAKKysjaWZkZWYgX19VQ0xJQkNfXworKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNlbmRpZgorKworICNkZWZpbmUgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgMAorIAorIG5hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQorIHsKKyBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorIAorKyNpZmRlZiBfX1VDTElCQ19fCisrICB0eXBlZGVmIF9fY3R5cGVfdG91cGxvd190KglfX2NfbG9jYWxlOworKyNlbHNlCisgICB0eXBlZGVmIGludCoJCQlfX2NfbG9jYWxlOworKyNlbmRpZgorIAorICAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgZG91YmxlIGFuZCBsb25nIGRvdWJsZSB0byBzdHJpbmcgYW5kCisgICAvLyByZXR1cm4gbGVuZ3RoIG9mIHN0cmluZy4gIElmIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmggYi9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgKK2luZGV4IDJkOGU5NzguLjE0ZWIwOGYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaAorQEAgLTMzLDYgKzMzLDExIEBACisgCisgLy8gSW5mb3JtYXRpb24gYXMgZ2xlYW5lZCBmcm9tIC91c3IvaW5jbHVkZS9jdHlwZS5oCisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjZW5kaWYKKysKKyBuYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKKyB7CisgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KK0BAIC00MSw3ICs0NiwxMSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorICAgc3RydWN0IGN0eXBlX2Jhc2UKKyAgIHsKKyAgICAgLy8gTm9uLXN0YW5kYXJkIHR5cGVkZWZzLgorKyNpZmRlZiBfX1VDTElCQ19fCisrICAgIHR5cGVkZWYgY29uc3QgX19jdHlwZV90b3VwbG93X3QqCV9fdG9fdHlwZTsKKysjZWxzZQorICAgICB0eXBlZGVmIGNvbnN0IGludCogCQlfX3RvX3R5cGU7CisrI2VuZGlmCisgCisgICAgIC8vIE5COiBPZmZzZXRzIGludG8gY3R5cGU8Y2hhcj46Ol9NX3RhYmxlIGZvcmNlIGEgcGFydGljdWxhciBzaXplCisgICAgIC8vIG9uIHRoZSBtYXNrIHR5cGUuIEJlY2F1c2Ugb2YgdGhpcywgd2UgZG9uJ3QgdXNlIGFuIGVudW0uCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWY1ZjMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoCkBAIC0wLDAgKzEsMjg2MiBAQAorRnJvbSBhNTVjNzUxYTQ0OWMyY2JmMGIzZmNjMDdhYWIxYjg2YmY5NjYxNTEwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDE6MzkgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNC8zNV0gdWNsaWJjLWxvY2FsZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzNyArKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCAgICAgIHwgICA2MyArKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyAgICAgIHwgIDE2MCArKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oICAgICAgIHwgIDExNyArKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYyAgICAgICAgfCAgMzA4ICsrKysrKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgICAgICAgIHwgICA4MCArKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyB8ICAzMDAgKysrKysrKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgICAgICAgfCAgMTAwICsrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggICAgICAgIHwgIDExOCArKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgICAgICAgfCAgNjkyICsrKysrKysrKysrKysrKysrKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgICAgICAgfCAgMTYwICsrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyAgfCAgNDA2ICsrKysrKysrKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCAgIHwgICA2OCArKworIGxpYnN0ZGMrKy12My9jb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA3NSArKysKKyBsaWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaCAgICAgICB8ICAgIDIgKworIGxpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhciAgICAgICAgICAgICAgICAgIHwgICAgMiArCisgMTYgZmlsZXMgY2hhbmdlZCwgMjY4OCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNCBiL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKK2luZGV4IDA4NzFhNmEuLjMyNmQ3ZWYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CisrKysgYi9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CitAQCAtMTkwNSw2ICsxOTA1LDkgQEAgQUNfREVGVU4oW0dMSUJDWFhfRU5BQkxFX0NMT0NBTEVdLCBbCisgICAjIERlZmF1bHQgdG8gImdlbmVyaWMiLgorICAgaWYgdGVzdCAkZW5hYmxlX2Nsb2NhbGVfZmxhZyA9IGF1dG87IHRoZW4KKyAgICAgY2FzZSAke3RhcmdldF9vc30gaW4KKysgICAgICAqLXVjbGliYyopCisrICAgICAgICBlbmFibGVfY2xvY2FsZV9mbGFnPXVjbGliYworKyAgICAgICAgOzsKKyAgICAgICBsaW51eCogfCBnbnUqIHwga2ZyZWVic2QqLWdudSB8IGtuZXRic2QqLWdudSkKKyAJZW5hYmxlX2Nsb2NhbGVfZmxhZz1nbnUKKyAJOzsKK0BAIC0yMDY5LDYgKzIwNzIsNDAgQEAgQUNfREVGVU4oW0dMSUJDWFhfRU5BQkxFX0NMT0NBTEVdLCBbCisgICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5jYworICAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvYysrbG9jYWxlX2ludGVybmFsLmgKKyAgICAgICA7OworKyAgICB1Y2xpYmMpCisrICAgICAgQUNfTVNHX1JFU1VMVCh1Y2xpYmMpCisrCisrICAgICAgIyBEZWNsYXJlIGludGVudGlvbiB0byB1c2UgZ2V0dGV4dCwgYW5kIGFkZCBzdXBwb3J0IGZvciBzcGVjaWZpYworKyAgICAgICMgbGFuZ3VhZ2VzLgorKyAgICAgICMgRm9yIHNvbWUgcmVhc29uLCBBTExfTElOR1VBUyBoYXMgdG8gYmUgYmVmb3JlIEFNLUdOVS1HRVRURVhUCisrICAgICAgQUxMX0xJTkdVQVM9ImRlIGZyIgorKworKyAgICAgICMgRG9uJ3QgY2FsbCBBTS1HTlUtR0VUVEVYVCBoZXJlLiBJbnN0ZWFkLCBhc3N1bWUgZ2xpYmMuCisrICAgICAgQUNfQ0hFQ0tfUFJPRyhjaGVja19tc2dmbXQsIG1zZ2ZtdCwgeWVzLCBubykKKysgICAgICBpZiB0ZXN0IHgiJGNoZWNrX21zZ2ZtdCIgPSB4InllcyIgJiYgdGVzdCB4IiRlbmFibGVfbmxzIiA9IHgieWVzIjsgdGhlbgorKyAgICAgICAgVVNFX05MUz15ZXMKKysgICAgICBmaQorKyAgICAgICMgRXhwb3J0IHRoZSBidWlsZCBvYmplY3RzLgorKyAgICAgIGZvciBsaW5nIGluICRBTExfTElOR1VBUzsgZG8gXAorKyAgICAgICAgZ2xpYmN4eF9NT0ZJTEVTPSIkZ2xpYmN4eF9NT0ZJTEVTICRsaW5nLm1vIjsgXAorKyAgICAgICAgZ2xpYmN4eF9QT0ZJTEVTPSIkZ2xpYmN4eF9QT0ZJTEVTICRsaW5nLnBvIjsgXAorKyAgICAgIGRvbmUKKysgICAgICBBQ19TVUJTVChnbGliY3h4X01PRklMRVMpCisrICAgICAgQUNfU1VCU1QoZ2xpYmN4eF9QT0ZJTEVTKQorKworKyAgICAgIENMT0NBTEVfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrICAgICAgQ0xPQ0FMRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKyAgICAgIENDT0RFQ1ZUX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworKyAgICAgIENDT0xMQVRFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworKyAgICAgIENDVFlQRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrICAgICAgQ01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrICAgICAgQ01FU1NBR0VTX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKysgICAgICBDTU9ORVlfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKyAgICAgIENOVU1FUklDX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKyAgICAgIENUSU1FX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysgICAgICA7OworICAgZXNhYworIAorICAgIyBUaGlzIGlzIHdoZXJlIHRoZSB0ZXN0c3VpdGUgbG9va3MgZm9yIGxvY2FsZSBjYXRhbG9ncywgdXNpbmcgdGhlCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMmFlM2U0YQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitAQCAtMCwwICsxLDYzIEBACisrLy8gUHJvdG90eXBlcyBmb3IgR0xJQkMgdGhyZWFkIGxvY2FsZSBfXy1wcmVmaXhlZCBmdW5jdGlvbnMgLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8gV3JpdHRlbiBieSBKYWt1YiBKZWxpbmVrIDxqYWt1YkByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorKyNpbmNsdWRlIDxjbG9jYWxlPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGNsZWFuIHRoaXMgdXAKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKworK2V4dGVybiAiQyIgX190eXBlb2YobmxfbGFuZ2luZm9fbCkgX19ubF9sYW5naW5mb19sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RyY29sbF9sKSBfX3N0cmNvbGxfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cmZ0aW1lX2wpIF9fc3RyZnRpbWVfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvZF9sKSBfX3N0cnRvZF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9mX2wpIF9fc3RydG9mX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2xkX2wpIF9fc3RydG9sZF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RyeGZybV9sKSBfX3N0cnhmcm1fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKG5ld2xvY2FsZSkgX19uZXdsb2NhbGU7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihmcmVlbG9jYWxlKSBfX2ZyZWVsb2NhbGU7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihkdXBsb2NhbGUpIF9fZHVwbG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YodXNlbG9jYWxlKSBfX3VzZWxvY2FsZTsKKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKytleHRlcm4gIkMiIF9fdHlwZW9mKGlzd2N0eXBlX2wpIF9faXN3Y3R5cGVfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHRvd2xvd2VyX2wpIF9fdG93bG93ZXJfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHRvd3VwcGVyX2wpIF9fdG93dXBwZXJfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc2NvbGxfbCkgX193Y3Njb2xsX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3NmdGltZV9sKSBfX3djc2Z0aW1lX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3N4ZnJtX2wpIF9fd2NzeGZybV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2N0eXBlX2wpIF9fd2N0eXBlX2w7CisrI2VuZGlmCisrCisrI2VuZGlmIC8vIEdMSUJDIDIuMyBhbmQgbGF0ZXIKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi41MDgxZGMxCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK0BAIC0wLDAgKzEsMTYwIEBACisrLy8gV3JhcHBlciBmb3IgdW5kZXJseWluZyBDLWxhbmd1YWdlIGxvY2FsaXphdGlvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjggIFN0YW5kYXJkIGxvY2FsZSBjYXRlZ29yaWVzLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8Y2Vycm5vPiAgLy8gRm9yIGVycm5vCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8c3RkZXhjZXB0PgorKyNpbmNsdWRlIDxsYW5naW5mby5oPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19zdHJ0b2xfbChTLCBFLCBCLCBMKSAgICAgIHN0cnRvbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b3VsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvdWwoKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG9sbF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b2xsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvdWxsX2woUywgRSwgQiwgTCkgICAgc3RydG91bGwoKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG9mX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2YoKFMpLCAoRSkpCisrI2RlZmluZSBfX3N0cnRvZF9sKFMsIEUsIEwpICAgICAgICAgc3RydG9kKChTKSwgKEUpKQorKyNkZWZpbmUgX19zdHJ0b2xkX2woUywgRSwgTCkgICAgICAgIHN0cnRvbGQoKFMpLCAoRSkpCisrI3dhcm5pbmcgc2hvdWxkIGR1bW15IF9fbmV3bG9jYWxlIGNoZWNrIGZvciBDfFBPU0lYID8KKysjZGVmaW5lIF9fbmV3bG9jYWxlKGEsIGIsIGMpICAgICAgICBOVUxMCisrI2RlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCisrI2RlZmluZSBfX2R1cGxvY2FsZShhKSAgICAgICAgICAgICAgX19jX2xvY2FsZSgpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGZsb2F0JiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19mOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2Q7CisrCSAgZWxzZQorKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgbG9uZyBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgbG9uZyBkb3VibGUgX19sZCA9IF9fc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fbGQ7CisrCSAgZWxzZQorKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisrCX0KKysgICAgfQorKworKyAgdm9pZAorKyAgbG9jYWxlOjpmYWNldDo6X1NfY3JlYXRlX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorKwkJCQkgICAgX19jX2xvY2FsZSBfX29sZCkKKysgIHsKKysgICAgX19jbG9jID0gX19uZXdsb2NhbGUoMSA8PCBMQ19BTEwsIF9fcywgX19vbGQpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIGlmICghX19jbG9jKQorKyAgICAgIHsKKysJLy8gVGhpcyBuYW1lZCBsb2NhbGUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgdW5kZXJseWluZyBPUy4KKysJX190aHJvd19ydW50aW1lX2Vycm9yKF9fTigibG9jYWxlOjpmYWNldDo6X1NfY3JlYXRlX2NfbG9jYWxlICIKKysJCQkgICAgICAibmFtZSBub3QgdmFsaWQiKSk7CisrICAgICAgfQorKyNlbmRpZgorKyAgfQorKworKyAgdm9pZAorKyAgbG9jYWxlOjpmYWNldDo6X1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICB7CisrICAgIGlmIChfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCisrICAgICAgX19mcmVlbG9jYWxlKF9fY2xvYyk7CisrICB9CisrCisrICBfX2NfbG9jYWxlCisrICBsb2NhbGU6OmZhY2V0OjpfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICB7IHJldHVybiBfX2R1cGxvY2FsZShfX2Nsb2MpOyB9CisrfSAvLyBuYW1lc3BhY2Ugc3RkCisrCisrbmFtZXNwYWNlIF9fZ251X2N4eAorK3sKKysgIGNvbnN0IGNoYXIqIGNvbnN0IGNhdGVnb3J5X25hbWVzWzYgKyBfR0xJQkNYWF9OVU1fQ0FURUdPUklFU10gPQorKyAgICB7CisrICAgICAgIkxDX0NUWVBFIiwKKysgICAgICAiTENfTlVNRVJJQyIsCisrICAgICAgIkxDX1RJTUUiLAorKyAgICAgICJMQ19DT0xMQVRFIiwKKysgICAgICAiTENfTU9ORVRBUlkiLAorKyAgICAgICJMQ19NRVNTQUdFUyIsCisrI2lmIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTICE9IDAKKysgICAgICAiTENfUEFQRVIiLAorKyAgICAgICJMQ19OQU1FIiwKKysgICAgICAiTENfQUREUkVTUyIsCisrICAgICAgIkxDX1RFTEVQSE9ORSIsCisrICAgICAgIkxDX01FQVNVUkVNRU5UIiwKKysgICAgICAiTENfSURFTlRJRklDQVRJT04iCisrI2VuZGlmCisrICAgIH07CisrfQorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICBjb25zdCBjaGFyKiBjb25zdCogY29uc3QgbG9jYWxlOjpfU19jYXRlZ29yaWVzID0gX19nbnVfY3h4OjpjYXRlZ29yeV9uYW1lczsKKyt9ICAvLyBuYW1lc3BhY2Ugc3RkCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmRhMDdjMWYKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitAQCAtMCwwICsxLDExNyBAQAorKy8vIFdyYXBwZXIgZm9yIHVuZGVybHlpbmcgQy1sYW5ndWFnZSBsb2NhbGl6YXRpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi44ICBTdGFuZGFyZCBsb2NhbGUgY2F0ZWdvcmllcy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2lmbmRlZiBfQ19MT0NBTEVfSAorKyNkZWZpbmUgX0NfTE9DQUxFX0ggMQorKworKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKysKKysjaW5jbHVkZSA8Y3N0cmluZz4gICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnN0cmxlbgorKyNpbmNsdWRlIDxjc3RkaW8+ICAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c25wcmludGYgb3Igc3RkOjpzcHJpbnRmCisrI2luY2x1ZGUgPGNsb2NhbGU+CisrI2luY2x1ZGUgPGxhbmdpbmZvLmg+CQkvLyBGb3IgY29kZWN2dAorKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyNpbmNsdWRlIDxpY29udi5oPgkJLy8gRm9yIGNvZGVjdnQgdXNpbmcgaWNvbnYsIGljb252X3QKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKysjaW5jbHVkZSA8bGliaW50bC5oPiAJCS8vIEZvciBtZXNzYWdlcworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIHdoYXQgaXMgX0dMSUJDWFhfQ19MT0NBTEVfR05VIGZvcgorKyNlbmRpZgorKyNkZWZpbmUgX0dMSUJDWFhfQ19MT0NBTEVfR05VIDEKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggY2F0ZWdvcmllcworKyNlbmRpZgorKy8vICNkZWZpbmUgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgNgorKyNkZWZpbmUgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgMAorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrbmFtZXNwYWNlIF9fZ251X2N4eAorK3sKKysgIGV4dGVybiAiQyIgX190eXBlb2YodXNlbG9jYWxlKSBfX3VzZWxvY2FsZTsKKyt9CisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgdHlwZWRlZiBfX2xvY2FsZV90CQlfX2NfbG9jYWxlOworKyNlbHNlCisrICB0eXBlZGVmIGludCoJCQlfX2NfbG9jYWxlOworKyNlbmRpZgorKworKyAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgX1R2IHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgorKyAgLy8gc3RyaW5nLiAgSWYgc25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworKyAgLy8gdGhlIHVuc2FmZSBzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKysgIC8vIGJlIGF2b2lkZWQuCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CisrICAgIGludAorKyAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LAorKwkJICAgICBjb25zdCBpbnQgX19zaXplIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSksCisrCQkgICAgIGNvbnN0IGNoYXIqIF9fZm10LAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKwkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX3ByZWMpCisrICAgIHsKKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjKQorKyAgICB7CisrIyBpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBjaGFyKiBfX29sZCA9IHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX29sZCkgKyAxXTsKKysgICAgICBzdGQ6OnN0cmNweShfX3NhdiwgX19vbGQpOworKyAgICAgIHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgIkMiKTsKKysjIGVuZGlmCisrI2VuZGlmCisrCisrICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjpzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19wcmVjLCBfX3YpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKyAgICAgIF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19vbGQpOworKyNlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrICAgICAgZGVsZXRlIFtdIF9fc2F2OworKyNlbmRpZgorKyAgICAgIHJldHVybiBfX3JldDsKKysgICAgfQorK30KKysKKysjZW5kaWYKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjY0YWE5NjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMzA4IEBACisrLy8gc3RkOjpjb2RlY3Z0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi4xLjUgLSBUZW1wbGF0ZSBjbGFzcyBjb2RlY3Z0CisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGNzdGRsaWI+ICAvLyBGb3IgTUJfQ1VSX01BWAorKyNpbmNsdWRlIDxjbGltaXRzPiAgLy8gRm9yIE1CX0xFTl9NQVgKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gU3BlY2lhbGl6YXRpb25zLgorKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgY29kZWN2dF9iYXNlOjpyZXN1bHQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKKysJIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorKwkgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKKysJIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAorKyAgeworKyAgICByZXN1bHQgX19yZXQgPSBvazsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIHdjc25ydG9tYnMgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2UgZmFsbCBiYWNrIHRvIHdjcnRvbWIgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KKysgICAgLy8gTkI6IHdjc25ydG9tYnMgaXMgYSBHTlUgZXh0ZW5zaW9uCisrICAgIGZvciAoX19mcm9tX25leHQgPSBfX2Zyb20sIF9fdG9fbmV4dCA9IF9fdG87CisrCSBfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX190b19uZXh0IDwgX190b19lbmQKKysJICYmIF9fcmV0ID09IG9rOykKKysgICAgICB7CisrCWNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kID0gd21lbWNocihfX2Zyb21fbmV4dCwgTCdcMCcsCisrCQkJCQkJICAgICAgX19mcm9tX2VuZCAtIF9fZnJvbV9uZXh0KTsKKysJaWYgKCFfX2Zyb21fY2h1bmtfZW5kKQorKwkgIF9fZnJvbV9jaHVua19lbmQgPSBfX2Zyb21fZW5kOworKworKwlfX2Zyb20gPSBfX2Zyb21fbmV4dDsKKysJY29uc3Qgc2l6ZV90IF9fY29udiA9IHdjc25ydG9tYnMoX190b19uZXh0LCAmX19mcm9tX25leHQsCisrCQkJCQkgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbV9uZXh0LAorKwkJCQkJIF9fdG9fZW5kIC0gX190b19uZXh0LCAmX19zdGF0ZSk7CisrCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisrCSAgeworKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKKysJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKysJICAgIC8vIHdjcnRvbWIuCisrCSAgICBmb3IgKDsgX19mcm9tIDwgX19mcm9tX25leHQ7ICsrX19mcm9tKQorKwkgICAgICBfX3RvX25leHQgKz0gd2NydG9tYihfX3RvX25leHQsICpfX2Zyb20sICZfX3RtcF9zdGF0ZSk7CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCSAgICBfX3JldCA9IGVycm9yOworKwkgIH0KKysJZWxzZSBpZiAoX19mcm9tX25leHQgJiYgX19mcm9tX25leHQgPCBfX2Zyb21fY2h1bmtfZW5kKQorKwkgIHsKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb21fY2h1bmtfZW5kOworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICB9CisrCisrCWlmIChfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX19yZXQgPT0gb2spCisrCSAgeworKwkgICAgZXh0ZXJuX3R5cGUgX19idWZbTUJfTEVOX01BWF07CisrCSAgICBfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7CisrCSAgICBjb25zdCBzaXplX3QgX19jb252ID0gd2NydG9tYihfX2J1ZiwgKl9fZnJvbV9uZXh0LCAmX190bXBfc3RhdGUpOworKwkgICAgaWYgKF9fY29udiA+IHN0YXRpY19jYXN0PHNpemVfdD4oX190b19lbmQgLSBfX3RvX25leHQpKQorKwkgICAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCW1lbWNweShfX3RvX25leHQsIF9fYnVmLCBfX2NvbnYpOworKwkJX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkJX190b19uZXh0ICs9IF9fY29udjsKKysJCSsrX19mcm9tX25leHQ7CisrCSAgICAgIH0KKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgY29kZWN2dF9iYXNlOjpyZXN1bHQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAorKwljb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKysJaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKKysJaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CisrICB7CisrICAgIHJlc3VsdCBfX3JldCA9IG9rOworKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysKKysgICAgLy8gbWJzbnJ0b3djcyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKysgICAgLy8gaW4gY2FzZSB3ZSBzdG9yZSBhIEwnXDAnIGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiBtYnNucnRvd2NzIGlzIGEgR05VIGV4dGVuc2lvbgorKyAgICBmb3IgKF9fZnJvbV9uZXh0ID0gX19mcm9tLCBfX3RvX25leHQgPSBfX3RvOworKwkgX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fdG9fbmV4dCA8IF9fdG9fZW5kCisrCSAmJiBfX3JldCA9PSBvazspCisrICAgICAgeworKwljb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZDsKKysJX19mcm9tX2NodW5rX2VuZCA9IHN0YXRpY19jYXN0PGNvbnN0IGV4dGVybl90eXBlKj4obWVtY2hyKF9fZnJvbV9uZXh0LCAnXDAnLAorKwkJCQkJCQkJICBfX2Zyb21fZW5kCisrCQkJCQkJCQkgIC0gX19mcm9tX25leHQpKTsKKysJaWYgKCFfX2Zyb21fY2h1bmtfZW5kKQorKwkgIF9fZnJvbV9jaHVua19lbmQgPSBfX2Zyb21fZW5kOworKworKwlfX2Zyb20gPSBfX2Zyb21fbmV4dDsKKysJc2l6ZV90IF9fY29udiA9IG1ic25ydG93Y3MoX190b19uZXh0LCAmX19mcm9tX25leHQsCisrCQkJCSAgIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb21fbmV4dCwKKysJCQkJICAgX190b19lbmQgLSBfX3RvX25leHQsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gbWJydG93Yy4KKysJICAgIGZvciAoOzsgKytfX3RvX25leHQsIF9fZnJvbSArPSBfX2NvbnYpCisrCSAgICAgIHsKKysJCV9fY29udiA9IG1icnRvd2MoX190b19uZXh0LCBfX2Zyb20sIF9fZnJvbV9lbmQgLSBfX2Zyb20sCisrCQkJCSAmX190bXBfc3RhdGUpOworKwkJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKQorKwkJICAgIHx8IF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSkKKysJCSAgYnJlYWs7CisrCSAgICAgIH0KKysJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tOworKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgPSBlcnJvcjsKKysJICB9CisrCWVsc2UgaWYgKF9fZnJvbV9uZXh0ICYmIF9fZnJvbV9uZXh0IDwgX19mcm9tX2NodW5rX2VuZCkKKysJICB7CisrCSAgICAvLyBJdCBpcyB1bmNsZWFyIHdoYXQgdG8gcmV0dXJuIGluIHRoaXMgY2FzZSAoc2VlIERSIDM4MikuCisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tX2NodW5rX2VuZDsKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgfQorKworKwlpZiAoX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fcmV0ID09IG9rKQorKwkgIHsKKysJICAgIGlmIChfX3RvX25leHQgPCBfX3RvX2VuZCkKKysJICAgICAgeworKwkJLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MKKysJCV9fdG1wX3N0YXRlID0gX19zdGF0ZTsKKysJCSsrX19mcm9tX25leHQ7CisrCQkqX190b19uZXh0KysgPSBMJ1wwJzsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGludAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKQorKyAgeworKyAgICAvLyBYWFggVGhpcyBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGVuY29kaW5nIGlzCisrICAgIC8vIHN0YXRlbGVzcyBhbmQgaXMgZWl0aGVyIHNpbmdsZS1ieXRlIG9yIHZhcmlhYmxlLXdpZHRoLgorKyAgICBpbnQgX19yZXQgPSAwOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysgICAgaWYgKE1CX0NVUl9NQVggPT0gMSkKKysgICAgICBfX3JldCA9IDE7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBpbnQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKQorKyAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysgICAgLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MuCisrICAgIGludCBfX3JldCA9IE1CX0NVUl9NQVg7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBpbnQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19sZW5ndGgoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKKysJICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdAorKyAgeworKyAgICBpbnQgX19yZXQgPSAwOworKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysKKysgICAgLy8gbWJzbnJ0b3djcyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKysgICAgLy8gaW4gY2FzZSB3ZSBhZHZhbmNlIHBhc3QgaXQgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KKysgICAgLy8gTkI6IG1ic25ydG93Y3MgaXMgYSBHTlUgZXh0ZW5zaW9uCisrCisrICAgIC8vIEEgZHVtbXkgaW50ZXJuYWwgYnVmZmVyIGlzIG5lZWRlZCBpbiBvcmRlciBmb3IgbWJzbnJ0b2N3cyB0byBjb25zaWRlcgorKyAgICAvLyBpdHMgZm91cnRoIHBhcmFtZXRlciAoaXQgd291bGRuJ3Qgd2l0aCBOVUxMIGFzIGZpcnN0IHBhcmFtZXRlcikuCisrICAgIHdjaGFyX3QqIF9fdG8gPSBzdGF0aWNfY2FzdDx3Y2hhcl90Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2Yod2NoYXJfdCkKKysJCQkJCQkJICAgKiBfX21heCkpOworKyAgICB3aGlsZSAoX19mcm9tIDwgX19lbmQgJiYgX19tYXgpCisrICAgICAgeworKwljb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZDsKKysJX19mcm9tX2NodW5rX2VuZCA9IHN0YXRpY19jYXN0PGNvbnN0IGV4dGVybl90eXBlKj4obWVtY2hyKF9fZnJvbSwgJ1wwJywKKysJCQkJCQkJCSAgX19lbmQKKysJCQkJCQkJCSAgLSBfX2Zyb20pKTsKKysJaWYgKCFfX2Zyb21fY2h1bmtfZW5kKQorKwkgIF9fZnJvbV9jaHVua19lbmQgPSBfX2VuZDsKKysKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fdG1wX2Zyb20gPSBfX2Zyb207CisrCXNpemVfdCBfX2NvbnYgPSBtYnNucnRvd2NzKF9fdG8sICZfX2Zyb20sCisrCQkJCSAgIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb20sCisrCQkJCSAgIF9fbWF4LCAmX19zdGF0ZSk7CisrCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisrCSAgeworKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKKysJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKysJICAgIC8vIG1icnRvd2MuCisrCSAgICBmb3IgKF9fZnJvbSA9IF9fdG1wX2Zyb207OyBfX2Zyb20gKz0gX19jb252KQorKwkgICAgICB7CisrCQlfX2NvbnYgPSBtYnJ0b3djKE5VTEwsIF9fZnJvbSwgX19lbmQgLSBfX2Zyb20sCisrCQkJCSAmX190bXBfc3RhdGUpOworKwkJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKQorKwkJICAgIHx8IF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSkKKysJCSAgYnJlYWs7CisrCSAgICAgIH0KKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJICAgIF9fcmV0ICs9IF9fZnJvbSAtIF9fdG1wX2Zyb207CisrCSAgICBicmVhazsKKysJICB9CisrCWlmICghX19mcm9tKQorKwkgIF9fZnJvbSA9IF9fZnJvbV9jaHVua19lbmQ7CisrCisrCV9fcmV0ICs9IF9fZnJvbSAtIF9fdG1wX2Zyb207CisrCV9fbWF4IC09IF9fY29udjsKKysKKysJaWYgKF9fZnJvbSA8IF9fZW5kICYmIF9fbWF4KQorKwkgIHsKKysJICAgIC8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzCisrCSAgICBfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7CisrCSAgICArK19fZnJvbTsKKysJICAgICsrX19yZXQ7CisrCSAgICAtLV9fbWF4OworKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYzI2NjRhNworLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworQEAgLTAsMCArMSw4MCBAQAorKy8vIHN0ZDo6Y29sbGF0ZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNC4xLjIgIGNvbGxhdGUgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fc3RyY29sbF9sKFMxLCBTMiwgTCkgICAgICBzdHJjb2xsKChTMSksIChTMikpCisrI2RlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCisrI2RlZmluZSBfX3djc2NvbGxfbChTMSwgUzIsIEwpICAgICAgd2NzY29sbCgoUzEpLCAoUzIpKQorKyNkZWZpbmUgX193Y3N4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHdjc3hmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBUaGVzZSBhcmUgYmFzaWNhbGx5IGV4dGVuc2lvbnMgdG8gY2hhcl90cmFpdHMsIGFuZCBwZXJoYXBzIHNob3VsZAorKyAgLy8gYmUgcHV0IHRoZXJlIGluc3RlYWQgb2YgaGVyZS4KKysgIHRlbXBsYXRlPD4KKysgICAgaW50CisrICAgIGNvbGxhdGU8Y2hhcj46Ol9NX2NvbXBhcmUoY29uc3QgY2hhciogX19vbmUsIGNvbnN0IGNoYXIqIF9fdHdvKSBjb25zdAorKyAgICB7CisrICAgICAgaW50IF9fY21wID0gX19zdHJjb2xsX2woX19vbmUsIF9fdHdvLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsKKysgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDApOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHNpemVfdAorKyAgICBjb2xsYXRlPGNoYXI+OjpfTV90cmFuc2Zvcm0oY2hhciogX190bywgY29uc3QgY2hhciogX19mcm9tLAorKwkJCQlzaXplX3QgX19uKSBjb25zdAorKyAgICB7IHJldHVybiBfX3N0cnhmcm1fbChfX3RvLCBfX2Zyb20sIF9fbiwgX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgaW50CisrICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX2NvbXBhcmUoY29uc3Qgd2NoYXJfdCogX19vbmUsCisrCQkJCSBjb25zdCB3Y2hhcl90KiBfX3R3bykgY29uc3QKKysgICAgeworKyAgICAgIGludCBfX2NtcCA9IF9fd2NzY29sbF9sKF9fb25lLCBfX3R3bywgX01fY19sb2NhbGVfY29sbGF0ZSk7CisrICAgICAgcmV0dXJuIChfX2NtcCA+PiAoOCAqIHNpemVvZiAoaW50KSAtIDIpKSB8IChfX2NtcCAhPSAwKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBzaXplX3QKKysgICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fdHJhbnNmb3JtKHdjaGFyX3QqIF9fdG8sIGNvbnN0IHdjaGFyX3QqIF9fZnJvbSwKKysJCQkJICAgc2l6ZV90IF9fbikgY29uc3QKKysgICAgeyByZXR1cm4gX193Y3N4ZnJtX2woX190bywgX19mcm9tLCBfX24sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOyB9CisrI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjk0ZTNhCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworQEAgLTAsMCArMSwzMDAgQEAKKysvLyBzdGQ6OmN0eXBlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi4xLjEuMiAgY3R5cGUgdmlydHVhbCBmdW5jdGlvbnMuCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNkZWZpbmUgX0xJQkMKKysjaW5jbHVkZSA8bG9jYWxlPgorKyN1bmRlZiBfTElCQworKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgd2N0eXBlKChTKSkKKysjZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgIHRvd3VwcGVyKChDKSkKKysjZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgIHRvd2xvd2VyKChDKSkKKysjZGVmaW5lIF9faXN3Y3R5cGVfbChDLCBNLCBMKSAgICAgIGlzd2N0eXBlKChDKSwgKE0pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBOQjogVGhlIG90aGVyIGN0eXBlPGNoYXI+IHNwZWNpYWxpemF0aW9ucyBhcmUgaW4gc3JjL2xvY2FsZS5jYyBhbmQKKysgIC8vIHZhcmlvdXMgL2NvbmZpZy9vcy8qIGZpbGVzLgorKyAgdGVtcGxhdGU8PgorKyAgICBjdHlwZV9ieW5hbWU8Y2hhcj46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCisrICAgIDogY3R5cGU8Y2hhcj4oMCwgZmFsc2UsIF9fcmVmcykKKysgICAgeworKyAgICAgIGlmIChzdGQ6OnN0cmNtcChfX3MsICJDIikgIT0gMCAmJiBzdGQ6OnN0cmNtcChfX3MsICJQT1NJWCIpICE9IDApCisrCXsKKysJICB0aGlzLT5fU19kZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlKTsKKysJICB0aGlzLT5fU19jcmVhdGVfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY3R5cGUsIF9fcyk7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICB0aGlzLT5fTV90b3VwcGVyID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfdG91cHBlcjsKKysJICB0aGlzLT5fTV90b2xvd2VyID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfdG9sb3dlcjsKKysJICB0aGlzLT5fTV90YWJsZSA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX2I7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgY3R5cGU8d2NoYXJfdD46Ol9fd21hc2tfdHlwZQorKyAgY3R5cGU8d2NoYXJfdD46Ol9NX2NvbnZlcnRfdG9fd21hc2soY29uc3QgbWFzayBfX20pIGNvbnN0CisrICB7CisrICAgIF9fd21hc2tfdHlwZSBfX3JldDsKKysgICAgc3dpdGNoIChfX20pCisrICAgICAgeworKyAgICAgIGNhc2Ugc3BhY2U6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgic3BhY2UiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgcHJpbnQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgicHJpbnQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgY250cmw6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiY250cmwiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgdXBwZXI6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgidXBwZXIiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgbG93ZXI6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgibG93ZXIiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgYWxwaGE6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiYWxwaGEiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgZGlnaXQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiZGlnaXQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgcHVuY3Q6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgicHVuY3QiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgeGRpZ2l0OgorKwlfX3JldCA9IF9fd2N0eXBlX2woInhkaWdpdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBhbG51bToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJhbG51bSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBncmFwaDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJncmFwaCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysJX19yZXQgPSBfX3dtYXNrX3R5cGUoKTsKKysgICAgICB9CisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIHdjaGFyX3QKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b3VwcGVyKHdjaGFyX3QgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX190b3d1cHBlcl9sKF9fYywgX01fY19sb2NhbGVfY3R5cGUpOyB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvdXBwZXIod2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKyAgICAgIHsKKysgICAgICAgICpfX2xvID0gX190b3d1cHBlcl9sKCpfX2xvLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrICAgICAgICArK19fbG87CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIHdjaGFyX3QKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b2xvd2VyKHdjaGFyX3QgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX190b3dsb3dlcl9sKF9fYywgX01fY19sb2NhbGVfY3R5cGUpOyB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvbG93ZXIod2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKyAgICAgIHsKKysgICAgICAgICpfX2xvID0gX190b3dsb3dlcl9sKCpfX2xvLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrICAgICAgICArK19fbG87CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIGJvb2wKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX2lzKG1hc2sgX19tLCB3Y2hhcl90IF9fYykgY29uc3QKKysgIHsKKysgICAgLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysgICAgLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKKysgICAgY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKysgICAgZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorKyAgICAgIGlmIChfX20gJiBfTV9iaXRbX19iaXRjdXJdCisrCSAgJiYgX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCisrCXsKKysJICBfX3JldCA9IHRydWU7CisrCSAgYnJlYWs7CisrCX0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX2lzKGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdAorKyAgeworKyAgICBmb3IgKDsgX19sbyA8IF9faGk7ICsrX192ZWMsICsrX19sbykKKysgICAgICB7CisrCS8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrCS8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKwljb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworKwltYXNrIF9fbSA9IDA7CisrCWZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysJICBpZiAoX19pc3djdHlwZV9sKCpfX2xvLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJICAgIF9fbSB8PSBfTV9iaXRbX19iaXRjdXJdOworKwkqX192ZWMgPSBfX207CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkgJiYgIXRoaXMtPmRvX2lzKF9fbSwgKl9fbG8pKQorKyAgICAgICsrX19sbzsKKysgICAgcmV0dXJuIF9fbG87CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkgJiYgdGhpcy0+ZG9faXMoX19tLCAqX19sbykgIT0gMCkKKysgICAgICArK19fbG87CisrICAgIHJldHVybiBfX2xvOworKyAgfQorKworKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fd2lkZW4oY2hhciBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfTV93aWRlbltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpXTsgfQorKworKyAgY29uc3QgY2hhcioKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIHdjaGFyX3QqIF9fZGVzdCkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKyAgICAgIHsKKysJKl9fZGVzdCA9IF9NX3dpZGVuW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpfX2xvKV07CisrCSsrX19sbzsKKysJKytfX2Rlc3Q7CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIGNoYXIKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX25hcnJvdyh3Y2hhcl90IF9fd2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0CisrICB7CisrICAgIGlmIChfX3djID49IDAgJiYgX193YyA8IDEyOCAmJiBfTV9uYXJyb3dfb2spCisrICAgICAgcmV0dXJuIF9NX25hcnJvd1tfX3djXTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOworKyNlbmRpZgorKyAgICBjb25zdCBpbnQgX19jID0gd2N0b2IoX193Yyk7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX25hcnJvdyhjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpLCBjaGFyIF9fZGZhdWx0LAorKwkgICAgY2hhciogX19kZXN0KSBjb25zdAorKyAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIGlmIChfTV9uYXJyb3dfb2spCisrICAgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKwl7CisrCSAgaWYgKCpfX2xvID49IDAgJiYgKl9fbG8gPCAxMjgpCisrCSAgICAqX19kZXN0ID0gX01fbmFycm93WypfX2xvXTsKKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIGNvbnN0IGludCBfX2MgPSB3Y3RvYigqX19sbyk7CisrCSAgICAgICpfX2Rlc3QgPSAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7CisrCSAgICB9CisrCSAgKytfX2xvOworKwkgICsrX19kZXN0OworKwl9CisrICAgIGVsc2UKKysgICAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrCXsKKysJICBjb25zdCBpbnQgX19jID0gd2N0b2IoKl9fbG8pOworKwkgICpfX2Rlc3QgPSAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7CisrCSAgKytfX2xvOworKwkgICsrX19kZXN0OworKwl9CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIHZvaWQKKysgIGN0eXBlPHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX2N0eXBlKCkKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOworKyNlbmRpZgorKyAgICB3aW50X3QgX19pOworKyAgICBmb3IgKF9faSA9IDA7IF9faSA8IDEyODsgKytfX2kpCisrICAgICAgeworKwljb25zdCBpbnQgX19jID0gd2N0b2IoX19pKTsKKysJaWYgKF9fYyA9PSBFT0YpCisrCSAgYnJlYWs7CisrCWVsc2UKKysJICBfTV9uYXJyb3dbX19pXSA9IHN0YXRpY19jYXN0PGNoYXI+KF9fYyk7CisrICAgICAgfQorKyAgICBpZiAoX19pID09IDEyOCkKKysgICAgICBfTV9uYXJyb3dfb2sgPSB0cnVlOworKyAgICBlbHNlCisrICAgICAgX01fbmFycm93X29rID0gZmFsc2U7CisrICAgIGZvciAoc2l6ZV90IF9faiA9IDA7CisrCSBfX2ogPCBzaXplb2YoX01fd2lkZW4pIC8gc2l6ZW9mKHdpbnRfdCk7ICsrX19qKQorKyAgICAgIF9NX3dpZGVuW19fal0gPSBidG93YyhfX2opOworKworKyAgICBmb3IgKHNpemVfdCBfX2sgPSAwOyBfX2sgPD0gMTE7ICsrX19rKQorKyAgICAgIHsKKysJX01fYml0W19fa10gPSBzdGF0aWNfY2FzdDxtYXNrPihfSVNiaXQoX19rKSk7CisrCV9NX3dtYXNrW19fa10gPSBfTV9jb252ZXJ0X3RvX3dtYXNrKF9NX2JpdFtfX2tdKTsKKysgICAgICB9CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgfQorKyNlbmRpZiAvLyAgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjEzNTk0ZDkKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCitAQCAtMCwwICsxLDEwMCBAQAorKy8vIHN0ZDo6bWVzc2FnZXMgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjcuMS4yICBtZXNzYWdlcyB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBnZXR0ZXh0IHN0dWZmCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrZXh0ZXJuICJDIiBjaGFyICpfX2RjZ2V0dGV4dChjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkJCSAgICAgY29uc3QgY2hhciAqbXNnaWQsIGludCBjYXRlZ29yeSk7CisrI3VuZGVmIGdldHRleHQKKysjZGVmaW5lIGdldHRleHQobXNnaWQpIF9fZGNnZXR0ZXh0KE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKysjZWxzZQorKyN1bmRlZiBnZXR0ZXh0CisrI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSAobXNnaWQpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIFNwZWNpYWxpemF0aW9ucy4KKysgIHRlbXBsYXRlPD4KKysgICAgc3RyaW5nCisrICAgIG1lc3NhZ2VzPGNoYXI+Ojpkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHN0cmluZyYgX19kZmF1bHQpIGNvbnN0CisrICAgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrICAgICAgY29uc3QgY2hhciogX19tc2cgPSBjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihnZXR0ZXh0KF9fZGZhdWx0LmNfc3RyKCkpKTsKKysgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2VsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV9tZXNzYWdlcyk7CisrICAgICAgY29uc3QgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9fZGZhdWx0LmNfc3RyKCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysgICAgICByZXR1cm4gc3RyaW5nKF9fbXNnKTsKKysjZWxzZQorKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKTsKKysgICAgICByZXR1cm4gc3RyaW5nKF9fbXNnKTsKKysjZW5kaWYKKysgICAgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB3c3RyaW5nCisrICAgIG1lc3NhZ2VzPHdjaGFyX3Q+Ojpkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHdzdHJpbmcmIF9fZGZhdWx0KSBjb25zdAorKyAgICB7CisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysgICAgICBjaGFyKiBfX21zZyA9IGdldHRleHQoX01fY29udmVydF90b19jaGFyKF9fZGZhdWx0KSk7CisrICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfbWVzc2FnZXMpOworKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKKysjIGVsc2UKKysgICAgICBjaGFyKiBfX21zZyA9IGdldHRleHQoX01fY29udmVydF90b19jaGFyKF9fZGZhdWx0KSk7CisrICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKKysjIGVuZGlmCisrICAgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xNDI0MDc4CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitAQCAtMCwwICsxLDExOCBAQAorKy8vIHN0ZDo6bWVzc2FnZXMgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjcuMS4yICBtZXNzYWdlcyBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHByb3RvdHlwZXMgZm9yICp0ZXh0ZG9tYWluIGZ1bmNzCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrZXh0ZXJuICJDIiBjaGFyICpfX3RleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSk7CisrZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCQkJCSAgY29uc3QgY2hhciAqZGlybmFtZSk7CisrI2Vsc2UKKysjdW5kZWYgX190ZXh0ZG9tYWluCisrI3VuZGVmIF9fYmluZHRleHRkb21haW4KKysjZGVmaW5lIF9fdGV4dGRvbWFpbihEKSAgICAgICAgICAgKCh2b2lkKTApCisrI2RlZmluZSBfX2JpbmR0ZXh0ZG9tYWluKEQsUCkgICAgICgodm9pZCkwKQorKyNlbmRpZgorKworKyAgLy8gTm9uLXZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKHNpemVfdCBfX3JlZnMpCisrICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2dldF9jX2xvY2FsZSgpKSwKKysgICAgIF9NX25hbWVfbWVzc2FnZXMoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICAgeyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorKwkJCQlzaXplX3QgX19yZWZzKQorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpKSwKKysgICAgIF9NX25hbWVfbWVzc2FnZXMoX19zKQorKyAgICAgeworKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKysgICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysgICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZworKyAgICBtZXNzYWdlczxfQ2hhclQ+OjpvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jLAorKwkJCSAgIGNvbnN0IGNoYXIqIF9fZGlyKSBjb25zdAorKyAgICB7CisrICAgICAgX19iaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworKyAgICAgIHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOworKyAgICB9CisrCisrICAvLyBWaXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIG1lc3NhZ2VzPF9DaGFyVD46On5tZXNzYWdlcygpCisrICAgIHsKKysgICAgICBpZiAoX01fbmFtZV9tZXNzYWdlcyAhPSBfU19nZXRfY19uYW1lKCkpCisrCWRlbGV0ZSBbXSBfTV9uYW1lX21lc3NhZ2VzOworKyAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cKKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywKKysJCQkgICAgICBjb25zdCBsb2NhbGUmKSBjb25zdAorKyAgICB7CisrICAgICAgLy8gTm8gZXJyb3IgY2hlY2tpbmcgaXMgZG9uZSwgYXNzdW1lIHRoZSBjYXRhbG9nIGV4aXN0cyBhbmQgY2FuCisrICAgICAgLy8gYmUgdXNlZC4KKysgICAgICBfX3RleHRkb21haW4oX19zLmNfc3RyKCkpOworKyAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHZvaWQKKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fY2xvc2UoY2F0YWxvZykgY29uc3QKKysgICAgeyB9CisrCisrICAgLy8gbWVzc2FnZXNfYnluYW1lCisrICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXNfYnluYW1lPF9DaGFyVD46Om1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCisrICAgICA6IG1lc3NhZ2VzPF9DaGFyVD4oX19yZWZzKQorKyAgICAgeworKyAgICAgICBpZiAodGhpcy0+X01fbmFtZV9tZXNzYWdlcyAhPSBsb2NhbGU6OmZhY2V0OjpfU19nZXRfY19uYW1lKCkpCisrCSBkZWxldGUgW10gdGhpcy0+X01fbmFtZV9tZXNzYWdlczsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICB0aGlzLT5fTV9uYW1lX21lc3NhZ2VzID0gX190bXA7CisrCisrICAgICAgIGlmIChzdGQ6OnN0cmNtcChfX3MsICJDIikgIT0gMCAmJiBzdGQ6OnN0cmNtcChfX3MsICJQT1NJWCIpICE9IDApCisrCSB7CisrCSAgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfbWVzc2FnZXMpOworKwkgICB0aGlzLT5fU19jcmVhdGVfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfbWVzc2FnZXMsIF9fcyk7CisrCSB9CisrICAgICB9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmFhNTI3MzEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDY5MiBAQAorKy8vIHN0ZDo6bW9uZXlwdW5jdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNi4zLjIgIG1vbmV5cHVuY3QgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgb3B0aW1pemUgdGhpcyBmb3IgdWNsaWJjCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIENvbnN0cnVjdCBhbmQgcmV0dXJuIHZhbGlkIHBhdHRlcm4gY29uc2lzdGluZyBvZiBzb21lIGNvbWJpbmF0aW9uIG9mOgorKyAgLy8gc3BhY2Ugbm9uZSBzeW1ib2wgc2lnbiB2YWx1ZQorKyAgbW9uZXlfYmFzZTo6cGF0dGVybgorKyAgbW9uZXlfYmFzZTo6X1NfY29uc3RydWN0X3BhdHRlcm4oY2hhciBfX3ByZWNlZGVzLCBjaGFyIF9fc3BhY2UsIGNoYXIgX19wb3NuKQorKyAgeworKyAgICBwYXR0ZXJuIF9fcmV0OworKworKyAgICAvLyBUaGlzIGluc2FuZWx5IGNvbXBsaWNhdGVkIHJvdXRpbmUgYXR0ZW1wdHMgdG8gY29uc3RydWN0IGEgdmFsaWQKKysgICAgLy8gcGF0dGVybiBmb3IgdXNlIHdpdGggbW9ueWVwdW5jdC4gQSBjb3VwbGUgb2YgaW52YXJpYW50czoKKysKKysgICAgLy8gaWYgKF9fcHJlY2VkZXMpIHN5bWJvbCAtPiB2YWx1ZQorKyAgICAvLyBlbHNlIHZhbHVlIC0+IHN5bWJvbAorKworKyAgICAvLyBpZiAoX19zcGFjZSkgc3BhY2UKKysgICAgLy8gZWxzZSBub25lCisrCisrICAgIC8vIG5vbmUgPT0gbmV2ZXIgZmlyc3QKKysgICAgLy8gc3BhY2UgbmV2ZXIgZmlyc3Qgb3IgbGFzdAorKworKyAgICAvLyBBbnkgZWxlZ2FudCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBhcmUgd2VsY29tZS4KKysgICAgc3dpdGNoIChfX3Bvc24pCisrICAgICAgeworKyAgICAgIGNhc2UgMDoKKysgICAgICBjYXNlIDE6CisrCS8vIDEgVGhlIHNpZ24gcHJlY2VkZXMgdGhlIHZhbHVlIGFuZCBzeW1ib2wuCisrCV9fcmV0LmZpZWxkWzBdID0gc2lnbjsKKysJaWYgKF9fc3BhY2UpCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBzdGFydHMgd2l0aCBzaWduLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbM10gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBzdGFydHMgd2l0aCBzaWduIGFuZCBlbmRzIHdpdGggbm9uZS4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgfQorKwlicmVhazsKKysgICAgICBjYXNlIDI6CisrCS8vIDIgVGhlIHNpZ24gZm9sbG93cyB0aGUgdmFsdWUgYW5kIHN5bWJvbC4KKysJaWYgKF9fc3BhY2UpCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBlaXRoZXIgZW5kcyB3aXRoIHNpZ24uCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMV0gPSBzcGFjZTsKKysJICAgIF9fcmV0LmZpZWxkWzNdID0gc2lnbjsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIGVuZHMgd2l0aCBzaWduIHRoZW4gbm9uZS4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsyXSA9IHNpZ247CisrCSAgICBfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgfQorKwlicmVhazsKKysgICAgICBjYXNlIDM6CisrCS8vIDMgVGhlIHNpZ24gaW1tZWRpYXRlbHkgcHJlY2VkZXMgdGhlIHN5bWJvbC4KKysJaWYgKF9fcHJlY2VkZXMpCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSBzaWduOworKwkgICAgX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwlicmVhazsKKysgICAgICBjYXNlIDQ6CisrCS8vIDQgVGhlIHNpZ24gaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgc3ltYm9sLgorKwlpZiAoX19wcmVjZWRlcykKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc2lnbjsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IHNpZ247CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsyXSA9IHNpZ247CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWJyZWFrOworKyAgICAgIGRlZmF1bHQ6CisrCTsKKysgICAgICB9CisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrCQkJCQkJICAgICBjb25zdCBjaGFyKikKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8Y2hhciwgdHJ1ZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fREVDSU1BTF9QT0lOVCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX1RIT1VTQU5EU19TRVAsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgaWYgKCFfX25wb3NuKQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIoKSI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sCisrCQkJCQkJCV9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgIC8vIF9JbnRsID09IHRydWUKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fbmxfbGFuZ2luZm9fbChfX0lOVF9DVVJSX1NZTUJPTCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX0ZSQUNfRElHSVRTLAorKwkJCQkJCSAgICAgIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkJCQkJCQlfX25wb3NuKTsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysJCQkJCQkgICAgICBjb25zdCBjaGFyKikKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8Y2hhciwgZmFsc2U+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9IG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX0RFQ0lNQUxfUE9JTlQsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9USE9VU0FORFNfU0VQLAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgaWYgKCFfX25wb3NuKQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIoKSI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sCisrCQkJCQkJCV9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgIC8vIF9JbnRsID09IGZhbHNlCisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX25sX2xhbmdpbmZvX2woX19DVVJSRU5DWV9TWU1CT0wsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0ZSQUNfRElHSVRTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwKKysJCQkJCQkJX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisrCQkJCQkJCV9fbnBvc24pOworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJCQkJCQkJY29uc3QgY2hhciopCisrI2Vsc2UKKysJCQkJCQkJY29uc3QgY2hhciogX19uYW1lKQorKyNlbmRpZgorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTx3Y2hhcl90LCB0cnVlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV0pOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisrI2Vsc2UKKysJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKysJICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcy4uLiBzaG91bGQgYmUgbW9uZXRhcnkKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfXworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVsc2UKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbmRpZgorKyNlbHNlCisrCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrI2VuZGlmCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCisrCSAgY29uc3QgY2hhciogX19jcG9zc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jbmVnc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jY3VyciA9IF9fbmxfbGFuZ2luZm9fbChfX0lOVF9DVVJSX1NZTUJPTCwgX19jbG9jKTsKKysKKysJICB3Y2hhcl90KiBfX3djc19wcyA9IDA7CisrCSAgd2NoYXJfdCogX193Y3NfbnMgPSAwOworKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICB0cnkKKysJICAgIHsKKysJICAgICAgbWJzdGF0ZV90IF9fc3RhdGU7CisrCSAgICAgIHNpemVfdCBfX2xlbiA9IHN0cmxlbihfX2Nwb3NzaWduKTsKKysJICAgICAgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfcHMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19wcywgJl9fY3Bvc3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX3djc19wczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICAgICAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NuZWdzaWduKTsKKysJICAgICAgaWYgKCFfX25wb3NuKQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiKCkiOworKwkgICAgICBlbHNlIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX25zID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfbnMsICZfX2NuZWdzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX193Y3NfbnM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAgICAgLy8gX0ludGwgPT0gdHJ1ZS4KKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jY3Vycik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIHdjaGFyX3QqIF9fd2NzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3MsICZfX2NjdXJyLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fd2NzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICAgICAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgICB9CisrCSAgY2F0Y2ggKC4uLikKKysJICAgIHsKKysJICAgICAgZGVsZXRlIF9NX2RhdGE7CisrCSAgICAgIF9NX2RhdGEgPSAwOworKwkgICAgICBkZWxldGUgX193Y3NfcHM7CisrCSAgICAgIGRlbGV0ZSBfX3djc19uczsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisrCSAgICB9CisrCisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9GUkFDX0RJR0lUUywKKysJCQkJCQkgICAgICBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwKKysJCQkJCQkJX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJCQkJCQkJX19ucG9zbik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgdm9pZAorKyAgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkJCQkJCSAgICAgICBjb25zdCBjaGFyKikKKysjZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX25hbWUpCisrI2VuZGlmCisrICB7CisrICAgIGlmICghX01fZGF0YSkKKysgICAgICBfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTx3Y2hhcl90LCBmYWxzZT47CisrCisrICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrICAgICAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV0pOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisrI2Vsc2UKKysJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKysJICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcy4uLiBzaG91bGQgYmUgbW9uZXRhcnkKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfXworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVsc2UKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbmRpZgorKyNlbHNlCisrICAgICAgICAgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKyAgICAgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysKKysJICBjb25zdCBjaGFyKiBfX2Nwb3NzaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NuZWdzaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NjdXJyID0gX19ubF9sYW5naW5mb19sKF9fQ1VSUkVOQ1lfU1lNQk9MLCBfX2Nsb2MpOworKworKwkgIHdjaGFyX3QqIF9fd2NzX3BzID0gMDsKKysJICB3Y2hhcl90KiBfX3djc19ucyA9IDA7CisrCSAgY29uc3QgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgdHJ5CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgbWJzdGF0ZV90IF9fc3RhdGU7CisrICAgICAgICAgICAgICBzaXplX3QgX19sZW47CisrICAgICAgICAgICAgICBfX2xlbiA9IHN0cmxlbihfX2Nwb3NzaWduKTsKKysgICAgICAgICAgICAgIGlmIChfX2xlbikKKysgICAgICAgICAgICAgICAgeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfcHMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19wcywgJl9fY3Bvc3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX3djc19wczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jbmVnc2lnbik7CisrCSAgICAgIGlmICghX19ucG9zbikKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIigpIjsKKysJICAgICAgZWxzZSBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19ucyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX25zLCAmX19jbmVnc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fd2NzX25zOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgICAgICAvLyBfSW50bCA9PSB0cnVlLgorKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsKKysJICAgICAgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgd2NoYXJfdCogX193Y3MgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djcywgJl9fY2N1cnIsIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX193Y3M7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgICB9CisrICAgICAgICAgIGNhdGNoICguLi4pCisrCSAgICB7CisrCSAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICAgICAgICAgICAgX01fZGF0YSA9IDA7CisrCSAgICAgIGRlbGV0ZSBfX3djc19wczsKKysJICAgICAgZGVsZXRlIF9fd2NzX25zOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKyAgICAgICAgICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisrCSAgICB9CisrCisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0ZSQUNfRElHSVRTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwKKysJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisrCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbnBvc24pOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZQorKyAgICAgICAgICAmJiB3Y3NjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgTCIoKSIpICE9IDApCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fY3Vycl9zeW1ib2w7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT46On5tb25leXB1bmN0KCkKKysgICAgeworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUKKysgICAgICAgICAgJiYgd2NzY21wKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24sIEwiKCkiKSAhPSAwKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sOworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICB9CisrI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uODgzZWMxYQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworQEAgLTAsMCArMSwxNjAgQEAKKysvLyBzdGQ6Om51bXB1bmN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi4zLjEuMiAgbnVtcHVuY3QgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBudW1wdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX251bXB1bmN0X2NhY2hlPGNoYXI+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7CisrCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworKworKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbnVtX2Jhc2U6Ol9TX29lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfb3V0W19faV0gPSBfX251bV9iYXNlOjpfU19hdG9tc19vdXRbX19pXTsKKysKKysJICBmb3IgKHNpemVfdCBfX2ogPSAwOyBfX2ogPCBfX251bV9iYXNlOjpfU19pZW5kOyArK19faikKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX2luW19fal0gPSBfX251bV9iYXNlOjpfU19hdG9tc19pbltfX2pdOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChERUNJTUFMX1BPSU5ULAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woVEhPVVNBTkRTX1NFUCwKKysJCQkJCQkJX19jbG9jKSk7CisrCisrCSAgLy8gQ2hlY2sgZm9yIE5VTEwsIHdoaWNoIGltcGxpZXMgbm8gZ3JvdXBpbmcuCisrCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gJ1wwJykKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCX0KKysKKysgICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFjdCB0aGlzIGluZm8gZnJvbSBwb3NpeCBsb2NhbGVzLgorKyAgICAgIC8vIF9NX3RydWVuYW1lID0gX19ubF9sYW5naW5mb19sKFlFU1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZSA9ICJ0cnVlIjsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZV9zaXplID0gNDsKKysgICAgICAvLyBfTV9mYWxzZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woTk9TVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lID0gImZhbHNlIjsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWVfc2l6ZSA9IDU7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbnVtcHVuY3Q8Y2hhcj46On5udW1wdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBudW1wdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX251bXB1bmN0X2NhY2hlPHdjaGFyX3Q+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7CisrCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19udW1fYmFzZTo6X1Nfb2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19vdXRbX19pXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fbnVtX2Jhc2U6Ol9TX2F0b21zX291dFtfX2ldKTsKKysKKysJICBmb3IgKHNpemVfdCBfX2ogPSAwOyBfX2ogPCBfX251bV9iYXNlOjpfU19pZW5kOyArK19faikKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX2luW19fal0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90PihfX251bV9iYXNlOjpfU19hdG9tc19pbltfX2pdKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICAvLyBOQjogSW4gdGhlIEdOVSBtb2RlbCB3Y2hhcl90IGlzIGFsd2F5cyAzMiBiaXQgd2lkZS4KKysJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrCisrCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gTCdcMCcpCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKEdST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwl9CisrCisrICAgICAgLy8gTkI6IFRoZXJlIGlzIG5vIHdheSB0byBleHRhY3QgdGhpcyBpbmZvIGZyb20gcG9zaXggbG9jYWxlcy4KKysgICAgICAvLyBfTV90cnVlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChZRVNTVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWUgPSBMInRydWUiOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lX3NpemUgPSA0OworKyAgICAgIC8vIF9NX2ZhbHNlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChOT1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWUgPSBMImZhbHNlIjsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWVfc2l6ZSA9IDU7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbnVtcHVuY3Q8d2NoYXJfdD46On5udW1wdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysgI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZTA3MDdkNworLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworQEAgLTAsMCArMSw0MDYgQEAKKysvLyBzdGQ6OnRpbWVfZ2V0LCBzdGQ6OnRpbWVfcHV0IGltcGxlbWVudGF0aW9uLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4xLjIgLSB0aW1lX2dldCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4zLjIgLSB0aW1lX3B1dCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorKyNlbmRpZgorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8Y2hhcj46OgorKyAgICBfTV9wdXQoY2hhciogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IGNoYXIqIF9fZm9ybWF0LAorKwkgICBjb25zdCB0bSogX190bSkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX19zdHJmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorKwkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysjZWxzZQorKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RyZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKysgICAgICBpZiAoX19sZW4gPT0gMCkKKysJX19zWzBdID0gJ1wwJzsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX3RpbWVwdW5jdF9jYWNoZTxjaGFyPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19nZXRfY19sb2NhbGUoKTsKKysKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9ICIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9ICIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fdGltZV9lcmFfZm9ybWF0ID0gIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gIiI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9hbSA9ICJBTSI7CisrCSAgX01fZGF0YS0+X01fcG0gPSAiUE0iOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9ICIiOworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX01fZGF0YS0+X01fZGF5MSA9ICJTdW5kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSAiTW9uZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gIlR1ZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSAiV2VkbmVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gIlRodXJzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gIkZyaWRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NyA9ICJTYXR1cmRheSI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9ICJTdW4iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gIk1vbiI7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSAiVHVlIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9ICJXZWQiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gIlRodSI7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSAiRnJpIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9ICJTYXQiOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9ICJKYW51YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gIkZlYnJ1YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gIk1hcmNoIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gIkFwcmlsIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gIk1heSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9ICJKdW5lIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gIkp1bHkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSAiQXVndXN0IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gIlNlcHRlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9ICJPY3RvYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gIk5vdmVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gIkRlY2VtYmVyIjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSAiSmFuIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9ICJGZWIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gIk1hciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSAiQXByIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9ICJNYXkiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gIkp1biI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSAiSnVsIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9ICJBdWciOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gIlNlcCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSAiT2N0IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9ICJOb3YiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gIkRlYyI7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOworKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKERfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGltZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKERfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX0RfVF9GTVQsCisrCQkJCQkJCSAgICAgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbSA9IF9fbmxfbGFuZ2luZm9fbChBTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG0gPSBfX25sX2xhbmdpbmZvX2woUE1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChUX0ZNVF9BTVBNLCBfX2Nsb2MpOworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX01fZGF0YS0+X01fZGF5MSA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gX19ubF9sYW5naW5mb19sKERBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBfX25sX2xhbmdpbmZvX2woREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gX19ubF9sYW5naW5mb19sKERBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBfX25sX2xhbmdpbmZvX2woREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NyA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNywgX19jbG9jKTsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gX19ubF9sYW5naW5mb19sKEFCREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzcsIF9fY2xvYyk7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gX19ubF9sYW5naW5mb19sKE1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBfX25sX2xhbmdpbmZvX2woTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IF9fbmxfbGFuZ2luZm9fbChNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gX19ubF9sYW5naW5mb19sKE1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBfX25sX2xhbmdpbmZvX2woTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IF9fbmxfbGFuZ2luZm9fbChNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gX19ubF9sYW5naW5mb19sKE1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSBfX25sX2xhbmdpbmZvX2woTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9IF9fbmxfbGFuZ2luZm9fbChNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gX19ubF9sYW5naW5mb19sKE1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gX19ubF9sYW5naW5mb19sKE1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gX19ubF9sYW5naW5mb19sKE1PTl8xMiwgX19jbG9jKTsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMTIsIF9fY2xvYyk7CisrCX0KKysgICAgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjoKKysgICAgX01fcHV0KHdjaGFyX3QqIF9fcywgc2l6ZV90IF9fbWF4bGVuLCBjb25zdCB3Y2hhcl90KiBfX2Zvcm1hdCwKKysJICAgY29uc3QgdG0qIF9fdG0pIGNvbnN0CisrICAgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwgX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisrCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyNlbHNlCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSB3Y3NmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKyAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorKyAgICAgIGlmIChfX2xlbiA9PSAwKQorKwlfX3NbMF0gPSBMJ1wwJzsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX3RpbWVwdW5jdF9jYWNoZTx3Y2hhcl90PjsKKysKKysjd2FybmluZyB3aWRlIHRpbWUgc3R1ZmYKKysvLyAgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19nZXRfY19sb2NhbGUoKTsKKysKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IEwiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9IEwiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gTCIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fdGltZV9lcmFfZm9ybWF0ID0gTCIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9hbSA9IEwiQU0iOworKwkgIF9NX2RhdGEtPl9NX3BtID0gTCJQTSI7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gTCIiOworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX01fZGF0YS0+X01fZGF5MSA9IEwiU3VuZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gTCJNb25kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBMIlR1ZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBMIldlZG5lc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IEwiVGh1cnNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBMIkZyaWRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NyA9IEwiU2F0dXJkYXkiOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBMIlN1biI7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSBMIk1vbiI7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBMIlR1ZSI7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBMIldlZCI7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSBMIlRodSI7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBMIkZyaSI7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBMIlNhdCI7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gTCJKYW51YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gTCJGZWJydWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IEwiTWFyY2giOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBMIkFwcmlsIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gTCJNYXkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBMIkp1bmUiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBMIkp1bHkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSBMIkF1Z3VzdCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9IEwiU2VwdGVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gTCJPY3RvYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gTCJOb3ZlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IEwiRGVjZW1iZXIiOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IEwiSmFuIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IEwiRmViIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9IEwiTWFyIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IEwiQXByIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9IEwiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9IEwiSnVuIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IEwiSnVsIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9IEwiQXVnIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9IEwiU2VwIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IEwiT2N0IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IEwiTm92IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IEwiRGVjIjsKKysJfQorKyNpZiAwCisrICAgICAgZWxzZQorKwl7CisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKKysKKysJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCAqX193OyB9IF9fdTsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGltZV9lcmFfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX0RfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW0gPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dQTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG0gPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dUX0ZNVF9BTVBNLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IF9fdS5fX3c7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NyA9IF9fdS5fX3c7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IF9fdS5fX3c7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gX191Ll9fdzsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IF9fdS5fX3c7CisrCX0KKysjZW5kaWYgLy8gMAorKyAgICB9CisrI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmJhOGU4NTgKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorQEAgLTAsMCArMSw2OCBAQAorKy8vIHN0ZDo6dGltZV9nZXQsIHN0ZDo6dGltZV9wdXQgaW1wbGVtZW50YXRpb24sIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEuMiAtIHRpbWVfZ2V0IGZ1bmN0aW9ucworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4zLjIgLSB0aW1lX3B1dCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KHNpemVfdCBfX3JlZnMpCisrICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLAorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChfU19nZXRfY19uYW1lKCkpCisrICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NhY2hlX3R5cGUqIF9fY2FjaGUsIHNpemVfdCBfX3JlZnMpCisrICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShfX2NhY2hlKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLAorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChfU19nZXRfY19uYW1lKCkpCisrICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorKwkJCQkgICAgIHNpemVfdCBfX3JlZnMpCisrICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLAorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChfX3MpCisrICAgIHsKKysgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKysgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICBfTV9uYW1lX3RpbWVwdW5jdCA9IF9fdG1wOworKyAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6fl9fdGltZXB1bmN0KCkKKysgICAgeworKyAgICAgIGlmIChfTV9uYW1lX3RpbWVwdW5jdCAhPSBfU19nZXRfY19uYW1lKCkpCisrCWRlbGV0ZSBbXSBfTV9uYW1lX3RpbWVwdW5jdDsKKysgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrICAgIH0KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQoraW5kZXggZjQwZGRjZi4uYzU3YTc1MSAxMDA3NTUKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK0BAIC0xNTgyMiw2ICsxNTgyMiw5IEBAIGZpCisgICAjIERlZmF1bHQgdG8gImdlbmVyaWMiLgorICAgaWYgdGVzdCAkZW5hYmxlX2Nsb2NhbGVfZmxhZyA9IGF1dG87IHRoZW4KKyAgICAgY2FzZSAke3RhcmdldF9vc30gaW4KKysgICAgICAqLXVjbGliYyopCisrICAgICAgICBlbmFibGVfY2xvY2FsZV9mbGFnPXVjbGliYworKyAgICAgICAgOzsKKyAgICAgICBsaW51eCogfCBnbnUqIHwga2ZyZWVic2QqLWdudSB8IGtuZXRic2QqLWdudSkKKyAJZW5hYmxlX2Nsb2NhbGVfZmxhZz1nbnUKKyAJOzsKK0BAIC0xNjA3OSw2ICsxNjA4Miw3OCBAQCAkYXNfZWNobyAibmV3bGliIiA+JjY7IH0KKyAgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjCisgICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorICAgICAgIDs7CisrICAgIHVjbGliYykKKysgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdWNsaWJjIiA+JjUKKyskYXNfZWNobyAidWNsaWJjIiA+JjY7IH0KKysKKysgICAgICAjIERlY2xhcmUgaW50ZW50aW9uIHRvIHVzZSBnZXR0ZXh0LCBhbmQgYWRkIHN1cHBvcnQgZm9yIHNwZWNpZmljCisrICAgICAgIyBsYW5ndWFnZXMuCisrICAgICAgIyBGb3Igc29tZSByZWFzb24sIEFMTF9MSU5HVUFTIGhhcyB0byBiZSBiZWZvcmUgQU0tR05VLUdFVFRFWFQKKysgICAgICBBTExfTElOR1VBUz0iZGUgZnIiCisrCisrICAgICAgIyBEb24ndCBjYWxsIEFNLUdOVS1HRVRURVhUIGhlcmUuIEluc3RlYWQsIGFzc3VtZSBnbGliYy4KKysgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm1zZ2ZtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IG1zZ2ZtdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2hlY2tfbXNnZm10K3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGNoZWNrX21zZ2ZtdCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10PSIkY2hlY2tfbXNnZm10IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10PSJ5ZXMiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQiICYmIGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10PSJubyIKKytmaQorK2ZpCisrY2hlY2tfbXNnZm10PSRhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdAorK2lmIHRlc3QgLW4gIiRjaGVja19tc2dmbXQiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGNoZWNrX21zZ2ZtdCIgPiY1CisrJGFzX2VjaG8gIiRjaGVja19tc2dmbXQiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworKyAgICAgIGlmIHRlc3QgeCIkY2hlY2tfbXNnZm10IiA9IHgieWVzIiAmJiB0ZXN0IHgiJGVuYWJsZV9ubHMiID0geCJ5ZXMiOyB0aGVuCisrICAgICAgICBVU0VfTkxTPXllcworKyAgICAgIGZpCisrICAgICAgIyBFeHBvcnQgdGhlIGJ1aWxkIG9iamVjdHMuCisrICAgICAgZm9yIGxpbmcgaW4gJEFMTF9MSU5HVUFTOyBkbyBcCisrICAgICAgICBnbGliY3h4X01PRklMRVM9IiRnbGliY3h4X01PRklMRVMgJGxpbmcubW8iOyBcCisrICAgICAgICBnbGliY3h4X1BPRklMRVM9IiRnbGliY3h4X1BPRklMRVMgJGxpbmcucG8iOyBcCisrICAgICAgZG9uZQorKworKworKworKyAgICAgIENMT0NBTEVfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrICAgICAgQ0xPQ0FMRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKyAgICAgIENDT0RFQ1ZUX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworKyAgICAgIENDT0xMQVRFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworKyAgICAgIENDVFlQRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrICAgICAgQ01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrICAgICAgQ01FU1NBR0VTX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKysgICAgICBDTU9ORVlfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKyAgICAgIENOVU1FUklDX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKyAgICAgIENUSU1FX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysgICAgICA7OworICAgZXNhYworIAorICAgIyBUaGlzIGlzIHdoZXJlIHRoZSB0ZXN0c3VpdGUgbG9va3MgZm9yIGxvY2FsZSBjYXRhbG9ncywgdXNpbmcgdGhlCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmggYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaAoraW5kZXggNTgwZDcyNS4uM2ZlNjFiOCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaAorQEAgLTEwMSw3ICsxMDEsOSBAQCB1c2luZyBzdGQ6OndtZW1jbXA7CisgdXNpbmcgc3RkOjp3bWVtY3B5OworIHVzaW5nIHN0ZDo6d21lbW1vdmU7CisgdXNpbmcgc3RkOjp3bWVtc2V0OworKyNpZiBfR0xJQkNYWF9IQVZFX1dDU0ZUSU1FCisgdXNpbmcgc3RkOjp3Y3NmdGltZTsKKysjZW5kaWYKKyAKKyAjaWYgX0dMSUJDWFhfVVNFX0M5OQorIHVzaW5nIHN0ZDo6d2NzdG9sZDsKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIgYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIKK2luZGV4IDBlNmIxZmMuLjQwNWFlZTIgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIKKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgorQEAgLTE3NSw3ICsxNzUsOSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorICAgdXNpbmcgOjp3Y3Njb2xsOworICAgdXNpbmcgOjp3Y3NjcHk7CisgICB1c2luZyA6Ondjc2NzcG47CisrI2lmIF9HTElCQ1hYX0hBVkVfV0NTRlRJTUUKKyAgIHVzaW5nIDo6d2NzZnRpbWU7CisrI2VuZGlmCisgICB1c2luZyA6Ondjc2xlbjsKKyAgIHVzaW5nIDo6d2NzbmNhdDsKKyAgIHVzaW5nIDo6d2NzbmNtcDsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYmJmZTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2gKQEAgLTAsMCArMSwyNTcgQEAKK0Zyb20gNmEzZTg1MDZhMTJjMTI3MjhkOGIyOTkwMWRlZmQ3MzhiZTQzNzU3ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQyOjM2ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDUvMzVdIHVjbGliYy1sb2NhbGUtbm9fX3gKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggICAgICB8ICAgNDUgKysrKysrKysrKysrKysrKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgICAgICB8ICAgMTQgLS0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCAgICAxICsKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjICAgICAgICB8ICAgIDcgLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCAgICA3IC0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjICAgICAgIHwgICAgNyArLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oICAgICAgICB8ICAgMTggKysrLS0tLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8ICAgIDQgLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8ICAgIDMgLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjICB8ICAgIDMgLS0KKyAxMCBmaWxlcyBjaGFuZ2VkLCA1NSBpbnNlcnRpb25zKCspLCA1NCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAoraW5kZXggMmFlM2U0YS4uZTc0ZmRkZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitAQCAtNjAsNCArNjAsNDkgQEAgZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3N4ZnJtX2wpIF9fd2NzeGZybV9sOworIGV4dGVybiAiQyIgX190eXBlb2Yod2N0eXBlX2wpIF9fd2N0eXBlX2w7CisgI2VuZGlmCisgCisrIyBkZWZpbmUgX19ubF9sYW5naW5mb19sIG5sX2xhbmdpbmZvX2wKKysjIGRlZmluZSBfX3N0cmNvbGxfbCBzdHJjb2xsX2wKKysjIGRlZmluZSBfX3N0cmZ0aW1lX2wgc3RyZnRpbWVfbAorKyMgZGVmaW5lIF9fc3RydG9kX2wgc3RydG9kX2wKKysjIGRlZmluZSBfX3N0cnRvZl9sIHN0cnRvZl9sCisrIyBkZWZpbmUgX19zdHJ0b2xkX2wgc3RydG9sZF9sCisrIyBkZWZpbmUgX19zdHJ4ZnJtX2wgc3RyeGZybV9sCisrIyBkZWZpbmUgX19uZXdsb2NhbGUgbmV3bG9jYWxlCisrIyBkZWZpbmUgX19mcmVlbG9jYWxlIGZyZWVsb2NhbGUKKysjIGRlZmluZSBfX2R1cGxvY2FsZSBkdXBsb2NhbGUKKysjIGRlZmluZSBfX3VzZWxvY2FsZSB1c2Vsb2NhbGUKKysKKysjIGlmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrIyAgZGVmaW5lIF9faXN3Y3R5cGVfbCBpc3djdHlwZV9sCisrIyAgZGVmaW5lIF9fdG93bG93ZXJfbCB0b3dsb3dlcl9sCisrIyAgZGVmaW5lIF9fdG93dXBwZXJfbCB0b3d1cHBlcl9sCisrIyAgZGVmaW5lIF9fd2NzY29sbF9sIHdjc2NvbGxfbAorKyMgIGRlZmluZSBfX3djc2Z0aW1lX2wgd2NzZnRpbWVfbAorKyMgIGRlZmluZSBfX3djc3hmcm1fbCB3Y3N4ZnJtX2wKKysjICBkZWZpbmUgX193Y3R5cGVfbCB3Y3R5cGVfbAorKyMgZW5kaWYKKysKKysjZWxzZQorKyMgZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICBubF9sYW5naW5mbygoTikpCisrIyBkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKKysjIGRlZmluZSBfX3N0cnRvZF9sKFMsIEUsIEwpICAgICAgICAgc3RydG9kKChTKSwgKEUpKQorKyMgZGVmaW5lIF9fc3RydG9mX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2YoKFMpLCAoRSkpCisrIyBkZWZpbmUgX19zdHJ0b2xkX2woUywgRSwgTCkgICAgICAgIHN0cnRvbGQoKFMpLCAoRSkpCisrIyBkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyMgd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworKyMgZGVmaW5lIF9fbmV3bG9jYWxlKGEsIGIsIGMpICAgICAgICBOVUxMCisrIyBkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorKyMgZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKysvLyMgZGVmaW5lIF9fdXNlbG9jYWxlID8KKysvLworKyMgaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysjICBkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgIGlzd2N0eXBlKChDKSwgKE0pKQorKyMgIGRlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICAgdG93bG93ZXIoKEMpKQorKyMgIGRlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICAgdG93dXBwZXIoKEMpKQorKyMgIGRlZmluZSBfX3djc2NvbGxfbChTMSwgUzIsIEwpICAgICAgd2NzY29sbCgoUzEpLCAoUzIpKQorKy8vIyAgZGVmaW5lIF9fd2NzZnRpbWVfbChTLCBNLCBGLCBULCBMKSAgd2NzZnRpbWUoKFMpLCAoTSksIChGKSwgKFQpKQorKyMgIGRlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCisrIyAgZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgICB3Y3R5cGUoKFMpKQorKyMgZW5kaWYKKysKKyAjZW5kaWYgLy8gR0xJQkMgMi4zIGFuZCBsYXRlcgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworaW5kZXggNTA4MWRjMS4uMjE0MzBkMCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitAQCAtMzksMjAgKzM5LDYgQEAKKyAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fc3RydG9sX2woUywgRSwgQiwgTCkgICAgICBzdHJ0b2woKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG91bF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b3VsKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvbGxfbChTLCBFLCBCLCBMKSAgICAgc3RydG9sbCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b3VsbF9sKFMsIEUsIEIsIEwpICAgIHN0cnRvdWxsKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorLSNkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKy0jZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorLSN3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CistI2RlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorLSNkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorLSNkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICB0ZW1wbGF0ZTw+CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAoraW5kZXggZGEwN2MxZi4uNGJjYTVmMSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorQEAgLTY4LDYgKzY4LDcgQEAgbmFtZXNwYWNlIF9fZ251X2N4eAorIHsKKyAgIGV4dGVybiAiQyIgX190eXBlb2YodXNlbG9jYWxlKSBfX3VzZWxvY2FsZTsKKyB9CisrI2RlZmluZSBfX3VzZWxvY2FsZSB1c2Vsb2NhbGUKKyAjZW5kaWYKKyAKKyBuYW1lc3BhY2Ugc3RkCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK2luZGV4IGMyNjY0YTcuLmVjNWMzMjkgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCitAQCAtMzYsMTMgKzM2LDYgQEAKKyAjaW5jbHVkZSA8bG9jYWxlPgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKKy0jZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKy0jZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCistI2RlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIC8vIFRoZXNlIGFyZSBiYXNpY2FsbHkgZXh0ZW5zaW9ucyB0byBjaGFyX3RyYWl0cywgYW5kIHBlcmhhcHMgc2hvdWxkCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworaW5kZXggNzI5NGUzYS4uN2IxMjg2MSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworQEAgLTM4LDEzICszOCw2IEBACisgI3VuZGVmIF9MSUJDCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICB3Y3R5cGUoKFMpKQorLSNkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgdG93dXBwZXIoKEMpKQorLSNkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgdG93bG93ZXIoKEMpKQorLSNkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK2luZGV4IDEzNTk0ZDkuLmQ3NjkzYjQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK0BAIC0zOSwxMyArMzksMTAgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggZ2V0dGV4dCBzdHVmZgorICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLWV4dGVybiAiQyIgY2hhciAqX19kY2dldHRleHQoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKy0JCQkgICAgIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpOworICN1bmRlZiBnZXR0ZXh0CistI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBfX2RjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBkY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorICNlbHNlCistI3VuZGVmIGdldHRleHQKKyAjZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKyAjZW5kaWYKKyAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAoraW5kZXggMTQyNDA3OC4uZDg5ZGEzMyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK0BAIC0zNiwxNSArMzYsMTEgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKy1leHRlcm4gIkMiIGNoYXIgKl9fdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKKy1leHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKy0JCQkJICBjb25zdCBjaGFyICpkaXJuYW1lKTsKKy0jZWxzZQorLSN1bmRlZiBfX3RleHRkb21haW4KKy0jdW5kZWYgX19iaW5kdGV4dGRvbWFpbgorLSNkZWZpbmUgX190ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKKy0jZGVmaW5lIF9fYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyN1bmRlZiB0ZXh0ZG9tYWluCisrI3VuZGVmIGJpbmR0ZXh0ZG9tYWluCisrI2RlZmluZSB0ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIGJpbmR0ZXh0ZG9tYWluKEQsUCkgICAgICgodm9pZCkwKQorICNlbmRpZgorIAorICAgLy8gTm9uLXZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KK0BAIC03MCw3ICs2Niw3IEBAIGV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorICAgICBtZXNzYWdlczxfQ2hhclQ+OjpvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jLAorIAkJCSAgIGNvbnN0IGNoYXIqIF9fZGlyKSBjb25zdAorICAgICB7CistICAgICAgX19iaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworKyAgICAgIGJpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CisgICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7CisgICAgIH0KKyAKK0BAIC05MCw3ICs4Niw3IEBAIGV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorICAgICB7CisgICAgICAgLy8gTm8gZXJyb3IgY2hlY2tpbmcgaXMgZG9uZSwgYXNzdW1lIHRoZSBjYXRhbG9nIGV4aXN0cyBhbmQgY2FuCisgICAgICAgLy8gYmUgdXNlZC4KKy0gICAgICBfX3RleHRkb21haW4oX19zLmNfc3RyKCkpOworKyAgICAgIHRleHRkb21haW4oX19zLmNfc3RyKCkpOworICAgICAgIHJldHVybiAwOworICAgICB9CisgCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworaW5kZXggYWE1MjczMS4uMmU2ZjgwYSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTQzLDEwICs0Myw2IEBACisgI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisgI2VuZGlmCisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIC8vIENvbnN0cnVjdCBhbmQgcmV0dXJuIHZhbGlkIHBhdHRlcm4gY29uc2lzdGluZyBvZiBzb21lIGNvbWJpbmF0aW9uIG9mOgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitpbmRleCA4ODNlYzFhLi4yYzcwNjQyIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworQEAgLTQxLDkgKzQxLDYgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKyAjZW5kaWYKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKy0jZW5kaWYKKyAKKyBuYW1lc3BhY2Ugc3RkCisgeworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitpbmRleCBlMDcwN2Q3Li5kODQ4ZWQ1IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworQEAgLTQwLDkgKzQwLDYgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKyAjZW5kaWYKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKy0jZW5kaWYKKyAKKyBuYW1lc3BhY2Ugc3RkCisgeworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDA2ODU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaApAQCAtMCwwICsxLDY4IEBACitGcm9tIDIyNTUxMWEzYWViMTkzYTkxNmIzOTk5ZjBiNjQwYTM5MmNhYTY3Y2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0NTo1NyArMDQwMAorU3ViamVjdDogW1BBVENIIDA2LzM1XSB1Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIHwgICAgNCArKy0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgfCAgIDEzICsrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitpbmRleCAyZTZmODBhLi4zMWViYjlmIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitAQCAtNDAxLDcgKzQwMSw3IEBAIG5hbWVzcGFjZSBzdGQKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CistIyBlbHNlCisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworICMgZW5kaWYKK0BAIC01NTYsNyArNTU2LDcgQEAgbmFtZXNwYWNlIHN0ZAorICMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKy0jIGVsc2UKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisgIyBlbmRpZgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitpbmRleCAyYzcwNjQyLi5kNWM4OTYxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworQEAgLTEyNywxMiArMTI3LDI1IEBAIG5hbWVzcGFjZSBzdGQKKyAJeworIAkgIC8vIE5hbWVkIGxvY2FsZS4KKyAJICAvLyBOQjogSW4gdGhlIEdOVSBtb2RlbCB3Y2hhcl90IGlzIGFsd2F5cyAzMiBiaXQgd2lkZS4KKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcy4uLiBzaG91bGQgYmUgbnVtZXJpYworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKyAJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworIAkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKyAKKyAJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrI2VuZGlmCisgCisgCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gTCdcMCcpCisgCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODUxMTIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaApAQCAtMCwwICsxLDU0MiBAQAorRnJvbSA2ZmZlN2M0NmY1MmQyNzg2NGMzZGYzNjYzZTE2ZWM5ZGRlZTcxZThmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDY6NTggKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNy8zNV0gdWNsaWJjLWxvY2FsZS11cGRhdGUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggICAgICB8ICAgIDMgKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyAgICAgIHwgICA3NCArKysrKysrKystLS0tLS0tLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oICAgICAgIHwgICA0MiArKysrKystLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIHwgICA1MSArKysrKysrKysrLS0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggICAgICAgIHwgICAxMiArKy0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgICAgICAgfCAgIDM0ICsrKysrLS0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgICAgICAgIHwgICAgNSArKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgICAxOCArKystLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCAgIHwgICAxNyArKystLQorIDkgZmlsZXMgY2hhbmdlZCwgMTU4IGluc2VydGlvbnMoKyksIDk4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitpbmRleCBlNzRmZGRmLi45NzFhNmI0IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK0BAIC0zMSw2ICszMSw5IEBACisgCisgI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisgI2luY2x1ZGUgPGNsb2NhbGU+CisrI2luY2x1ZGUgPGNzdGRsaWI+CisrI2luY2x1ZGUgPGNzdHJpbmc+CisrI2luY2x1ZGUgPGNzdGRkZWY+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgY2xlYW4gdGhpcyB1cAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworaW5kZXggMjE0MzBkMC4uMWI5ZDhlMSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitAQCAtMzksMjMgKzM5LDIwIEBACisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistbmFtZXNwYWNlIHN0ZAorLXsKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorKworICAgdGVtcGxhdGU8PgorICAgICB2b2lkCisgICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZmxvYXQmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorICAgICB7CistICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCistCXsKKy0JICBjaGFyKiBfX3Nhbml0eTsKKy0JICBlcnJubyA9IDA7CistCSAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKy0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCistCSAgICBfX3YgPSBfX2Y7CistCSAgZWxzZQorLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CistCX0KKysgICAgICBjaGFyKiBfX3Nhbml0eTsKKysgICAgICBlcnJubyA9IDA7CisrICAgICAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19mOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPD4KK0BAIC02MywxNiArNjAsMTMgQEAgbmFtZXNwYWNlIHN0ZAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisgCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICAgIHsKKy0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKy0JeworLQkgIGNoYXIqIF9fc2FuaXR5OworLQkgIGVycm5vID0gMDsKKy0JICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKy0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCistCSAgICBfX3YgPSBfX2Q7CistCSAgZWxzZQorLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CistCX0KKysgICAgICBjaGFyKiBfX3Nhbml0eTsKKysgICAgICBlcnJubyA9IDA7CisrICAgICAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCV9fdiA9IF9fZDsKKysgICAgICBlbHNlCisrCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICB9CisgCisgICB0ZW1wbGF0ZTw+CitAQCAtODAsMTYgKzc0LDEzIEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBsb25nIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisgCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICAgIHsKKy0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKy0JeworLQkgIGNoYXIqIF9fc2FuaXR5OworLQkgIGVycm5vID0gMDsKKy0JICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CistICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorLQkgICAgX192ID0gX19sZDsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCV9fdiA9IF9fbGQ7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdm9pZAorQEAgLTExMCwxNyArMTAxLDE4IEBAIG5hbWVzcGFjZSBzdGQKKyAgIHZvaWQKKyAgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorICAgeworLSAgICBpZiAoX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorKyAgICBpZiAoX19jbG9jICYmIF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKKyAgICAgICBfX2ZyZWVsb2NhbGUoX19jbG9jKTsKKyAgIH0KKyAKKyAgIF9fY19sb2NhbGUKKyAgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKyAgIHsgcmV0dXJuIF9fZHVwbG9jYWxlKF9fY2xvYyk7IH0KKy19IC8vIG5hbWVzcGFjZSBzdGQKKyAKKy1uYW1lc3BhY2UgX19nbnVfY3h4CisteworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKysKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorKworICAgY29uc3QgY2hhciogY29uc3QgY2F0ZWdvcnlfbmFtZXNbNiArIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTXSA9CisgICAgIHsKKyAgICAgICAiTENfQ1RZUEUiLAorQEAgLTEzOCw5ICsxMzAsMTEgQEAgbmFtZXNwYWNlIF9fZ251X2N4eAorICAgICAgICJMQ19JREVOVElGSUNBVElPTiIKKyAjZW5kaWYKKyAgICAgfTsKKy19CisgCistbmFtZXNwYWNlIHN0ZAorLXsKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisrCisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKysKKyAgIGNvbnN0IGNoYXIqIGNvbnN0KiBjb25zdCBsb2NhbGU6Ol9TX2NhdGVnb3JpZXMgPSBfX2dudV9jeHg6OmNhdGVnb3J5X25hbWVzOworLX0gIC8vIG5hbWVzcGFjZSBzdGQKKysKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAoraW5kZXggNGJjYTVmMS4uNjRhNmQ0NiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorQEAgLTM5LDIxICszOSwyMyBAQAorICNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKyAKKyAjaW5jbHVkZSA8Y3N0cmluZz4gICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnN0cmxlbgorLSNpbmNsdWRlIDxjc3RkaW8+ICAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c25wcmludGYgb3Igc3RkOjpzcHJpbnRmCisrI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjp2c25wcmludGYgb3Igc3RkOjp2c3ByaW50ZgorICNpbmNsdWRlIDxjbG9jYWxlPgorICNpbmNsdWRlIDxsYW5naW5mby5oPgkJLy8gRm9yIGNvZGVjdnQKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggdGhpcworICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysjaWZkZWYgX0dMSUJDWFhfVVNFX0lDT05WCisgI2luY2x1ZGUgPGljb252Lmg+CQkvLyBGb3IgY29kZWN2dCB1c2luZyBpY29udiwgaWNvbnZfdAorICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLSNpbmNsdWRlIDxsaWJpbnRsLmg+IAkJLy8gRm9yIG1lc3NhZ2VzCisrI2lmZGVmIEhBVkVfTElCSU5UTF9ICisrI2luY2x1ZGUgPGxpYmludGwuaD4JCS8vIEZvciBtZXNzYWdlcworICNlbmRpZgorKyNpbmNsdWRlIDxjc3RkYXJnPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHdoYXQgaXMgX0dMSUJDWFhfQ19MT0NBTEVfR05VIGZvcgorKy8vIHBzbTogdXNlZCBpbiBvcy9nbnUtbGludXgvY3R5cGVfbm9uaW5saW5lLmgKKyAjZW5kaWYKKyAjZGVmaW5lIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSAxCisgCitAQCAtNzgsMjMgKzgwLDI1IEBAIG5hbWVzcGFjZSBzdGQKKyAjZWxzZQorICAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKyAjZW5kaWYKKy0KKy0gIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIF9UdiB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKy0gIC8vIHN0cmluZy4gIElmIHNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKy0gIC8vIHRoZSB1bnNhZmUgc3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisrICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBkb3VibGUgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCisrICAvLyBzdHJpbmcuICBJZiB2c25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworKyAgLy8gdGhlIHVuc2FmZSB2c3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisgICAvLyBiZSBhdm9pZGVkLgorLSAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgorLSAgICBpbnQKKy0gICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwKKy0JCSAgICAgY29uc3QgaW50IF9fc2l6ZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpLAorLQkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKy0JCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19wcmVjKQorKyAgICBpbmxpbmUgaW50CisrICAgIF9fY29udmVydF9mcm9tX3YoY29uc3QgX19jX2xvY2FsZSYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrCV9fY2xvYyBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCisrI2VuZGlmCisrCQkgICAgICwKKysJCSAgICAgY2hhciogX19vdXQsCisrCQkgICAgIGNvbnN0IGludCBfX3NpemUsCisrCQkgICAgIGNvbnN0IGNoYXIqIF9fZm10LCAuLi4pCisgICAgIHsKKysgICAgICB2YV9saXN0IF9fYXJnczsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysKKyAgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX2Nsb2MpOworICNlbHNlCistCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjKQorLSAgICB7CisgIyBpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAgICAgICBjaGFyKiBfX29sZCA9IHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisgICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX29sZCkgKyAxXTsKK0BAIC0xMDMsNyArMTA3LDkgQEAgbmFtZXNwYWNlIHN0ZAorICMgZW5kaWYKKyAjZW5kaWYKKyAKKy0gICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7CisrICAgICAgdmFfc3RhcnQoX19hcmdzLCBfX2ZtdCk7CisrICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjp2c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fYXJncyk7CisrICAgICAgdmFfZW5kKF9fYXJncyk7CisgCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisgICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworaW5kZXggN2IxMjg2MS4uMTNlMDExZCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworQEAgLTMzLDE2ICszMywyMCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy1uYW1lc3BhY2Ugc3RkCisteworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisrCisgICAvLyBOQjogVGhlIG90aGVyIGN0eXBlPGNoYXI+IHNwZWNpYWxpemF0aW9ucyBhcmUgaW4gc3JjL2xvY2FsZS5jYyBhbmQKKyAgIC8vIHZhcmlvdXMgL2NvbmZpZy9vcy8qIGZpbGVzLgorLSAgdGVtcGxhdGU8PgorICAgICBjdHlwZV9ieW5hbWU8Y2hhcj46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCisgICAgIDogY3R5cGU8Y2hhcj4oMCwgZmFsc2UsIF9fcmVmcykKKyAgICAgeworQEAgLTU3LDYgKzYxLDggQEAgbmFtZXNwYWNlIHN0ZAorICNlbmRpZgorIAl9CisgICAgIH0KKysgICAgY3R5cGVfYnluYW1lPGNoYXI+Ojp+Y3R5cGVfYnluYW1lKCkKKysgICAgeyB9CisgCisgI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgICBjdHlwZTx3Y2hhcl90Pjo6X193bWFza190eXBlCitAQCAtMTM4LDE3ICsxNDQsMzMgQEAgbmFtZXNwYWNlIHN0ZAorICAgY3R5cGU8d2NoYXJfdD46OgorICAgZG9faXMobWFzayBfX20sIHdjaGFyX3QgX19jKSBjb25zdAorICAgeworLSAgICAvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorLSAgICAvLyBsaWJyYXJ5IGZvciBibGFuay4KKysgICAgLy8gVGhlIGNhc2Ugb2YgX19tID09IGN0eXBlX2Jhc2U6OnNwYWNlIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQsCisrICAgIC8vIGR1ZSB0byBpdHMgdXNlIGluIG1hbnkgaXN0cmVhbSBmdW5jdGlvbnMuICBUaGVyZWZvcmUgd2UgZGVhbCB3aXRoCisrICAgIC8vIGl0IGZpcnN0LCBleHBsb2l0aW5nIHRoZSBrbm93bGVkZ2UgdGhhdCBvbiBHTlUgc3lzdGVtcyBfTV9iaXRbNV0KKysgICAgLy8gaXMgdGhlIG1hc2sgY29ycmVzcG9uZGluZyB0byBjdHlwZV9iYXNlOjpzcGFjZS4gIE5COiBhbiBlbmNvZGluZworKyAgICAvLyBjaGFuZ2Ugd291bGQgbm90IGFmZmVjdCBjb3JyZWN0bmVzcyEKKysKKyAgICAgYm9vbCBfX3JldCA9IGZhbHNlOworLSAgICBjb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworLSAgICBmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCistICAgICAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0KKy0JICAmJiBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKy0JeworLQkgIF9fcmV0ID0gdHJ1ZTsKKy0JICBicmVhazsKKy0JfQorKyAgICBpZiAoX19tID09IF9NX2JpdFs1XSkKKysgICAgICBfX3JldCA9IF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrWzVdLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrICAgIGVsc2UKKysgICAgICB7CisrCS8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrCS8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKwljb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworKwlmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrCSAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0pCisrCSAgICB7CisrCSAgICAgIGlmIChfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJCXsKKysJCSAgX19yZXQgPSB0cnVlOworKwkJICBicmVhazsKKysJCX0KKysJICAgICAgZWxzZSBpZiAoX19tID09IF9NX2JpdFtfX2JpdGN1cl0pCisrCQlicmVhazsKKysJICAgIH0KKysgICAgICB9CisrCisgICAgIHJldHVybiBfX3JldDsKKyAgIH0KKyAKK0BAIC0yOTAsNCArMzEyLDUgQEAgbmFtZXNwYWNlIHN0ZAorICNlbmRpZgorICAgfQorICNlbmRpZiAvLyAgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKy19CisrCisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitpbmRleCBkODlkYTMzLi4wNjc2NTdhIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorQEAgLTUzLDEyICs1MywxNiBAQAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKyAJCQkJc2l6ZV90IF9fcmVmcykKKy0gICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKSksCistICAgICBfTV9uYW1lX21lc3NhZ2VzKF9fcykKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoTlVMTCksCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKE5VTEwpCisgICAgICB7CistICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworLSAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RkOjpzdHJsZW4oX19zKSArIDE7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbX19sZW5dOworKyAgICAgICBzdGQ6Om1lbWNweShfX3RtcCwgX19zLCBfX2xlbik7CisgICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysKKysgICAgICAgLy8gTGFzdCB0byBhdm9pZCBsZWFraW5nIG1lbW9yeSBpZiBuZXcgdGhyb3dzLgorKyAgICAgICBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CisgICAgICB9CisgCisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworaW5kZXggMzFlYmI5Zi4uNzY3OWI5YyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTMzLDkgKzMzLDE0IEBACisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyAKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgI2RlZmluZSBfTElCQworICNpbmNsdWRlIDxsb2NhbGU+CisgI3VuZGVmIF9MSUJDCisrI2Vsc2UKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNlbmRpZgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworQEAgLTIwNiw3ICsyMTEsNyBAQCBuYW1lc3BhY2Ugc3RkCisgCSAgfQorIAlicmVhazsKKyAgICAgICBkZWZhdWx0OgorLQk7CisrCV9fcmV0ID0gcGF0dGVybigpOworICAgICAgIH0KKyAgICAgcmV0dXJuIF9fcmV0OworICAgfQorQEAgLTM5MCw3ICszOTUsOSBAQCBuYW1lc3BhY2Ugc3RkCisgCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisgI2Vsc2UKKyAJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKy0JICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAJICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7CisrICAgICAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKyAJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworICNlbmRpZgorIAorQEAgLTQ3Nyw4ICs0ODQsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0JICAgICAgZnJlZShfX29sZCk7CisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorIAkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAJICAgIH0KK0BAIC00OTgsOCArNTA1LDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgIGZyZWUoX19vbGQpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgCX0KKyAgICAgfQorQEAgLTU0NSw4ICs1NTIsMTEgQEAgbmFtZXNwYWNlIHN0ZAorIAkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworICNlbHNlCisgCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCistCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworLQkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrICAgICAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworKyAgICAgICAgICBtZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xsZW4pOworKyAgICAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworICNlbmRpZgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworQEAgLTYzMyw4ICs2NDMsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0JICAgICAgZnJlZShfX29sZCk7CisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorICAgICAgICAgICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgCSAgICB9CitAQCAtNjUzLDggKzY2Myw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKyAjZWxzZQorLQkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0JICBmcmVlKF9fb2xkKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrCSAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorIAl9CisgICAgIH0KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworaW5kZXggZDVjODk2MS4uOGFlODk2OSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC0zMyw5ICszMywxNCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworaW5kZXggZDg0OGVkNS4uZjI0ZDUzZSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK0BAIC01MywxMSArNTMsMTQgQEAgbmFtZXNwYWNlIHN0ZAorICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fc3RyZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKyAJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisgI2Vsc2UKKy0gICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7CisrICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworKyAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9fbGxlbik7CisgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0cmZ0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKy0gICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistICAgICAgZnJlZShfX29sZCk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKyAgICAgICBpZiAoX19sZW4gPT0gMCkKK0BAIC0yMDcsMTEgKzIxMCwxNCBAQCBuYW1lc3BhY2Ugc3RkCisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorIAkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKyAjZWxzZQorLSAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisrICAgICAgbWVtY3B5KF9fc2F2LCBfX29sZCwgX19sbGVuKTsKKyAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gd2NzZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworLSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0gICAgICBmcmVlKF9fb2xkKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorICAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorICAgICAgIGlmIChfX2xlbiA9PSAwKQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAoraW5kZXggYmE4ZTg1OC4uMTY2NWRkZSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitAQCAtNTAsMTIgKzUwLDIxIEBACisgICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisgCQkJCSAgICAgc2l6ZV90IF9fcmVmcykKKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCistICAgIF9NX25hbWVfdGltZXB1bmN0KF9fcykKKysgICAgX01fbmFtZV90aW1lcHVuY3QoTlVMTCkKKyAgICAgeworLSAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworLSAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0ZDo6c3RybGVuKF9fcykgKyAxOworKyAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbX19sZW5dOworKyAgICAgIHN0ZDo6bWVtY3B5KF9fdG1wLCBfX3MsIF9fbGVuKTsKKyAgICAgICBfTV9uYW1lX3RpbWVwdW5jdCA9IF9fdG1wOworLSAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7CisrCisrICAgICAgdHJ5CisrCXsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsgfQorKyAgICAgIGNhdGNoKC4uLikKKysJeworKwkgIGRlbGV0ZSBbXSBfTV9uYW1lX3RpbWVwdW5jdDsKKysJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJfQorKworICAgICB9CisgCisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgyMzgwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gOWYyMTU4NDUxOTgxY2YwYTgwY2ZhYmRjNzlhZTMxYmI2OTc2YTgwMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ4OjEwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDgvMzVdIG1pc3NpbmctZXhlY2luZm9faAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGJvZWhtLWdjL2luY2x1ZGUvZ2MuaCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCBiL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAoraW5kZXggYzUxZTAxNy4uYTdiYThkYyAxMDA2NDQKKy0tLSBhL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAorKysrIGIvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCitAQCAtNTAzLDcgKzUwMyw3IEBAIEdDX0FQSSBHQ19QVFIgR0NfbWFsbG9jX2F0b21pY19pZ25vcmVfb2ZmX3BhZ2UgR0NfUFJPVE8oKHNpemVfdCBsYikpOworICNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX0dMSUJDX18pCisgIyBpbmNsdWRlIDxmZWF0dXJlcy5oPgorICMgaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxIHx8IF9fR0xJQkNfXyA+IDIpIFwKKy0gICAgICYmICFkZWZpbmVkKF9faWE2NF9fKQorKyAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pICYmICFkZWZpbmVkKF9fVUNMSUJDX18pCisgIyAgIGlmbmRlZiBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgICAgZGVmaW5lIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgZW5kaWYKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwOS1jOTktc25wcmludGYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTY4Nzc4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwOS1jOTktc25wcmludGYucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSBlMzkzZTA3NmYxYWI4MmQyNWUxYWEwNGQ2ZWRlYTI3YjQxZDNlYjA2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDk6MDMgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwOS8zNV0gYzk5LXNucHJpbnRmCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvCitpbmRleCBlODViZDgzLi42YWY4MzlhIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KK0BAIC0xMzksNyArMTM5LDcgQEAgbmFtZXNwYWNlIHN0ZAorICAgdXNpbmcgOjp2c3ByaW50ZjsKKyB9IC8vIG5hbWVzcGFjZSBzdGQKKyAKKy0jaWYgX0dMSUJDWFhfVVNFX0M5OQorKyNpZiBfR0xJQkNYWF9VU0VfQzk5IHx8IGRlZmluZWQoX19VQ0xJQkNfXykKKyAKKyAjdW5kZWYgc25wcmludGYKKyAjdW5kZWYgdmZzY2FuZgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDEwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2Mjg1NzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDEwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDczZjY5ZDgwNmUyYzk1NjFhNTQ5OTUyMjM0MzFhMTA3NmNmZDYxNjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0OTo1NyArMDQwMAorU3ViamVjdDogW1BBVENIIDEwLzM1XSBjOTktY29tcGxleC11Z2x5LWhhY2sKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWd1cmUgfCAgICAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitpbmRleCBjNTdhNzUxLi5hMTMzM2UyIDEwMDc1NQorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorQEAgLTE4NzM0LDYgKzE4NzM0LDkgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIElTTyBDOTkgc3VwcG9ydCB0byBUUjEgaW4gPGNvbXBsZXguaD4uLi4gIiA+JjY7IH0KKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaW5jbHVkZSA8Y29tcGxleC5oPgorKyNpZmRlZiBfX1VDTElCQ19fCisrI2Vycm9yIHVnbHkgaGFjayB0byBtYWtlIHN1cmUgY29uZmlndXJlIHRlc3QgZmFpbHMgaGVyZSBmb3IgY3Jvc3MgdW50aWwgdUNsaWJjIHN1cHBvcnRzIHRoZSBjb21wbGV4IGZ1bmNzCisrI2VuZGlmCisgaW50CisgbWFpbiAoKQorIHsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxMS1pbmRleF9tYWNyby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTEtaW5kZXhfbWFjcm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlNzliMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTEtaW5kZXhfbWFjcm8ucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorRnJvbSBiMDM3OTUzZTQwMzEyYjQ1YWI4NGVkMGEzYWQ4ODJiYjVlNDEzMTAxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTE6MDIgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMS8zNV0gaW5kZXhfbWFjcm8KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZSAgICAgICB8ICAgIDMgKysrCisgbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmggfCAgICAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZSBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCitpbmRleCAzOGViMWU4Li4xNThkMjFhIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUKKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCitAQCAtNTUsNiArNTUsOSBAQAorICNpbmNsdWRlIDxiaXRzL2d0aHIuaD4KKyAjaW5jbHVkZSA8dHIxL2Z1bmN0aW9uYWw+CisgCisrLyogY29wZSB3LyBpbmRleCBkZWZpbmVkIGFzIG1hY3JvLCBTdVN2MyBwcm9wb3NhbCAqLworKyN1bmRlZiBpbmRleAorKworICMgaWZkZWYgX19HQworICMgICBkZWZpbmUgX19HQ19DT05TVCBjb25zdAorICMgZWxzZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgKK2luZGV4IGQ3YjVjYmQuLmI5YjNhY2IgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAorKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgKK0BAIC00OCw2ICs0OCw5IEBACisgI2luY2x1ZGUgPGV4dC9tZW1vcnk+IC8vIEZvciB1bmluaXRpYWxpemVkX2NvcHlfbgorICNpbmNsdWRlIDxleHQvbnVtZXJpYz4gLy8gRm9yIHBvd2VyCisgCisrLyogY29wZSB3LyBpbmRleCBkZWZpbmVkIGFzIG1hY3JvLCBTdVN2MyBwcm9wb3NhbCAqLworKyN1bmRlZiBpbmRleAorKworIG5hbWVzcGFjZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQorIHsKKyBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDEzLWxpYnN0ZGMtbmFtZXNwYWNlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxMy1saWJzdGRjLW5hbWVzcGFjZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTNlZmRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxMy1saWJzdGRjLW5hbWVzcGFjZS5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIDEwNGU0ZDY2MjA4ZjI3MjZiMTRkMmY1ZWViY2U5MDcwMGNiYzgzYzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1NDowMiArMDQwMAorU3ViamVjdDogW1BBVENIIDEzLzM1XSBsaWJzdGRjKystbmFtZXNwYWNlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCB8ICAgIDQgKysrLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCAgICAgfCAgICA0ICsrKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitpbmRleCAwNjc2NTdhLi5kZDc2YTZjIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorQEAgLTMyLDcgKzMyLDggQEAKKyAvLworIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CistCisrbmFtZXNwYWNlIHN0ZAorK3sKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKKyAjZW5kaWYKK0BAIC0xMTYsMyArMTE3LDQgQEAKKyAJICAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3MpOworIAkgfQorICAgICAgfQorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK2luZGV4IDE2NjVkZGUuLjkwNWM0MzMgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorQEAgLTMzLDcgKzMzLDggQEAKKyAvLworIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CistCisrbmFtZXNwYWNlIHN0ZAorK3sKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcykKKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCitAQCAtNzUsMyArNzYsNCBAQAorICAgICAgIGRlbGV0ZSBfTV9kYXRhOworICAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKyAgICAgfQorK30KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNC1zaC1wcjI0ODM2LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNC1zaC1wcjI0ODM2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOGZkNTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE0LXNoLXByMjQ4MzYucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorRnJvbSBlZGM5YWNiMTgxODEwZjIzNGI2YjlmN2QyODIwYjBlNGY2YTFlZWFmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTQ6NDggKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNC8zNV0gc2gtcHIyNDgzNgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9tYWlsYXJjaGl2ZS9mb3J1bS5waHA/dGhyZWFkX2lkPTg5NTkzMDQmZm9ydW1faWQ9NTM0OAoraHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0yNDgzNgorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICB8ICAgIDIgKy0KKyBnY2MvY29uZmlndXJlLmFjIHwgICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IGUxMmExODAuLjEzNWJiZjUgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMjMzNzgsNyArMjMzNzgsNyBAQCBmb286CS5sb25nCTI1CisgCXRsc19maXJzdF9taW5vcj0xNAorIAl0bHNfYXNfb3B0PSItbTY0IC1BZXNhbWUgLS1mYXRhbC13YXJuaW5ncyIKKyAJOzsKKy0gIHNoLSotKiB8IHNoWzM0XS0qLSopCisrICBzaC0qLSogfCBzaFszNF0qLSotKikKKyAgICAgY29uZnRlc3Rfcz0nCisgCS5zZWN0aW9uICIudGRhdGEiLCJhd1QiLEBwcm9nYml0cworIGZvbzoJLmxvbmcJMjUKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggZWJhMzU3Ny4uNjM2M2EyMSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC0zMTQxLDcgKzMxNDEsNyBAQCBmb286CS5sb25nCTI1CisgCXRsc19maXJzdF9taW5vcj0xNAorIAl0bHNfYXNfb3B0PSItbTY0IC1BZXNhbWUgLS1mYXRhbC13YXJuaW5ncyIKKyAJOzsKKy0gIHNoLSotKiB8IHNoWzM0XS0qLSopCisrICBzaC0qLSogfCBzaFszNF0qLSotKikKKyAgICAgY29uZnRlc3Rfcz0nCisgCS5zZWN0aW9uICIudGRhdGEiLCJhd1QiLEBwcm9nYml0cworIGZvbzoJLmxvbmcJMjUKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNS1hcm0tVXNlLVRBUkdFVF9FTkRJQU5fT1BUSU9OLWZvci1kZXRlcm1pbmluZy1NVUxUSUxJLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNS1hcm0tVXNlLVRBUkdFVF9FTkRJQU5fT1BUSU9OLWZvci1kZXRlcm1pbmluZy1NVUxUSUxJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YzQ2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE1LWFybS1Vc2UtVEFSR0VUX0VORElBTl9PUFRJT04tZm9yLWRldGVybWluaW5nLU1VTFRJTEkucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorRnJvbSA1MGU1MzY2MDA1YjBmNmFmMjczNzhlMmE1YzNjYjlmOTkzNmE3ZTYyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTg6MzYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNS8zNV0gYXJtOiBVc2UgVEFSR0VUX0VORElBTl9PUFRJT04gZm9yIGRldGVybWluaW5nCisgTVVMVElMSUJfREVGQVVMVFMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGdjYy00LjkuMi9nY2MvY29uZmlnL2FybS9jb2ZmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvY29uZmlnL2FybS9jb2ZmLmgKKysrKyBnY2MtNC45LjIvZ2NjL2NvbmZpZy9hcm0vY29mZi5oCitAQCAtMzIsOCArMzIsMTEgQEAKKyAjZGVmaW5lIFRBUkdFVF9ERUZBVUxUIChNQVNLX0FQQ1NfRlJBTUUpCisgCisgI2lmbmRlZiBNVUxUSUxJQl9ERUZBVUxUUworKyNpZm5kZWYgVEFSR0VUX0VORElBTl9PUFRJT04KKysjZGVmaW5lIFRBUkdFVF9FTkRJQU5fT1BUSU9OICJtbGl0dGxlLWVuZGlhbiIKKysjZW5kaWYKKyAjZGVmaW5lIE1VTFRJTElCX0RFRkFVTFRTIFwKKy0gIHsgIm1hcm0iLCAibWxpdHRsZS1lbmRpYW4iLCAibWZsb2F0LWFiaT1zb2Z0IiwgIm1uby10aHVtYi1pbnRlcndvcmsiIH0KKysgIHsgIm1hcm0iLCBUQVJHRVRfRU5ESUFOX09QVElPTiwgIm1mbG9hdC1hYmk9c29mdCIsICJtbm8tdGh1bWItaW50ZXJ3b3JrIiB9CisgI2VuZGlmCisgDAorIC8qIFRoaXMgaXMgQ09GRiwgYnV0IHByZWZlciBzdGFicy4gICovCitJbmRleDogZ2NjLTQuOS4yL2djYy9jb25maWcvYXJtL2VsZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2NvbmZpZy9hcm0vZWxmLmgKKysrKyBnY2MtNC45LjIvZ2NjL2NvbmZpZy9hcm0vZWxmLmgKK0BAIC0xMTYsOCArMTE2LDExIEBACisgI2VuZGlmCisgCisgI2lmbmRlZiBNVUxUSUxJQl9ERUZBVUxUUworKyNpZm5kZWYgVEFSR0VUX0VORElBTl9PUFRJT04KKysjZGVmaW5lIFRBUkdFVF9FTkRJQU5fT1BUSU9OICJtbGl0dGxlLWVuZGlhbiIKKysjZW5kaWYKKyAjZGVmaW5lIE1VTFRJTElCX0RFRkFVTFRTIFwKKy0gIHsgIm1hcm0iLCAibWxpdHRsZS1lbmRpYW4iLCAibWZsb2F0LWFiaT1zb2Z0IiwgIm1uby10aHVtYi1pbnRlcndvcmsiLCAiZm5vLWxlYWRpbmctdW5kZXJzY29yZSIgfQorKyAgeyAibWFybSIsIFRBUkdFVF9FTkRJQU5fT1BUSU9OLCAibWZsb2F0LWFiaT1zb2Z0IiwgIm1uby10aHVtYi1pbnRlcndvcmsiLCAiZm5vLWxlYWRpbmctdW5kZXJzY29yZSIgfQorICNlbmRpZgorIAwKKyAjZGVmaW5lIFRBUkdFVF9BU01fRklMRV9TVEFSVF9BUFBfT0ZGIHRydWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTYtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE2LWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NWVmOTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE2LWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoCkBAIC0wLDAgKzEsMTkwIEBACitGcm9tIDE2MDM5N2VmM2MzMzMxMDk5YWYwMjhmMWI4ZDNlMDg1YjA3ZDg4YWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1OTowMCArMDQwMAorU3ViamVjdDogW1BBVENIIDE2LzM1XSBnY2M6IHBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXN0cmlidXRpb246IGNvZGVzb3VyY2VyeV0KKy0tLQorIGdjYy9NYWtlZmlsZS5pbiAgICAgfCAgICAyICstCisgZ2NjL2NvbW1vbi5vcHQgICAgICB8ICAgIDQgKysrKworIGdjYy9jb25maWcuaW4gICAgICAgfCAgICA2ICsrKysrKworIGdjYy9jb25maWd1cmUgICAgICAgfCAgIDIwICsrKysrKysrKysrKysrKysrKy0tCisgZ2NjL2NvbmZpZ3VyZS5hYyAgICB8ICAgMTAgKysrKysrKysrKworIGdjYy9kb2MvaW52b2tlLnRleGkgfCAgICA5ICsrKysrKysrKworIGdjYy9nY2MuYyAgICAgICAgICAgfCAgICAyICsrCisgZ2NjL2luY3BhdGguYyAgICAgICB8ICAgMTkgKysrKysrKysrKysrKysrKysrKworIDggZmlsZXMgY2hhbmdlZCwgNjkgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbW1vbi5vcHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2NvbW1vbi5vcHQKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jb21tb24ub3B0CitAQCAtNjAzLDYgKzYwMywxMCBAQCBXcGVkYW50aWMKKyBDb21tb24gVmFyKHBlZGFudGljKSBXYXJuaW5nCisgSXNzdWUgd2FybmluZ3MgbmVlZGVkIGZvciBzdHJpY3QgY29tcGxpYW5jZSB0byB0aGUgc3RhbmRhcmQKKyAKKytXcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0NvbW1vbiBWYXIoZmxhZ19wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzKSBJbml0KDEpIFdhcm5pbmcKKytXYXJuIGZvciAtSSBhbmQgLUwgb3B0aW9ucyB1c2luZyBzeXN0ZW0gZGlyZWN0b3JpZXMgaWYgY3Jvc3MgY29tcGlsaW5nCisrCisgV3NoYWRvdworIENvbW1vbiBWYXIod2Fybl9zaGFkb3cpIFdhcm5pbmcKKyBXYXJuIHdoZW4gb25lIGxvY2FsIHZhcmlhYmxlIHNoYWRvd3MgYW5vdGhlcgorSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvY29uZmlnLmluCisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnLmluCitAQCAtMTM4LDYgKzEzOCwxMiBAQAorICNlbmRpZgorIAorIAorKy8qIERlZmluZSB0byB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXMgKi8KKysjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorKyN1bmRlZiBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUworKyNlbmRpZgorKworKworIC8qIERlZmluZSBpZiB5b3Ugd2FudCBhbGwgb3BlcmF0aW9ucyBvbiBSVEwgKHRoZSBiYXNpYyBkYXRhIHN0cnVjdHVyZSBvZiB0aGUKKyAgICBvcHRpbWl6ZXIgYW5kIGJhY2sgZW5kKSB0byBiZSBjaGVja2VkIGZvciBkeW5hbWljIHR5cGUgc2FmZXR5IGF0IHJ1bnRpbWUuCisgICAgVGhpcyBpcyBxdWl0ZSBleHBlbnNpdmUuICovCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jb25maWd1cmUKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWd1cmUKK0BAIC05MjgsNiArOTI4LDcgQEAgd2l0aF9zeXN0ZW1femxpYgorIGVuYWJsZV9tYWludGFpbmVyX21vZGUKKyBlbmFibGVfbGlua19tdXRleAorIGVuYWJsZV92ZXJzaW9uX3NwZWNpZmljX3J1bnRpbWVfbGlicworK2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzCisgZW5hYmxlX3BsdWdpbgorIGVuYWJsZV9ob3N0X3NoYXJlZAorIGVuYWJsZV9saWJxdWFkbWF0aF9zdXBwb3J0CitAQCAtMTY0OCw2ICsxNjQ5LDggQEAgT3B0aW9uYWwgRmVhdHVyZXM6CisgICAtLWVuYWJsZS12ZXJzaW9uLXNwZWNpZmljLXJ1bnRpbWUtbGlicworICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGF0IHJ1bnRpbWUgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgY29tcGlsZXItc3BlY2lmaWMgZGlyZWN0b3J5CisrICAtLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXMKKyAgIC0tZW5hYmxlLXBsdWdpbiAgICAgICAgIGVuYWJsZSBwbHVnaW4gc3VwcG9ydAorICAgLS1lbmFibGUtaG9zdC1zaGFyZWQgICAgYnVpbGQgaG9zdCBjb2RlIGFzIHNoYXJlZCBsaWJyYXJpZXMKKyAgIC0tZGlzYWJsZS1saWJxdWFkbWF0aC1zdXBwb3J0CitAQCAtMjc3MDIsNiArMjc3MDUsMTkgQEAgaWYgdGVzdCAiJHtlbmFibGVfdmVyc2lvbl9zcGVjaWZpY19ydW50aQorIGZpCisgCisgCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgZW5hYmxldmFsPSRlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllczsKKytlbHNlCisrICBlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcz1ubworK2ZpCisrCisraWYgdGVzdCAieCR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXN9IiA9ICJ4eWVzIjsgdGhlbgorKworKyRhc19lY2hvICIjZGVmaW5lIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTIDEiID4+Y29uZmRlZnMuaAorKworK2ZpCisrCisgIyBTdWJzdGl0dXRlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisgCisgCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jb25maWd1cmUuYWMKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWd1cmUuYWMKK0BAIC01MzY2LDYgKzUzNjYsMTYgQEAgQUNfQVJHX0VOQUJMRSh2ZXJzaW9uLXNwZWNpZmljLXJ1bnRpbWUtbAorICAgICAgICAgICAgICAgICBbc3BlY2lmeSB0aGF0IHJ1bnRpbWUgbGlicmFyaWVzIHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIGluIGEgY29tcGlsZXItc3BlY2lmaWMgZGlyZWN0b3J5XSldKQorIAorK0FDX0FSR19FTkFCTEUoW3BvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXNdLAorKyAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc10sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXNdKSwsCisrICAgICAgICAgICAgIFtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcz1ub10pCisraWYgdGVzdCAieCR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXN9IiA9ICJ4eWVzIjsgdGhlbgorKyAgQUNfREVGSU5FKFtFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFU10sCisrICAgICAgICAgICBbMV0sCisrICAgICAgICAgICBbRGVmaW5lIHRvIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3Rvcmllc10pCisrZmkKKysKKyAjIFN1YnN0aXR1dGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyBBQ19TVUJTVChzdWJkaXJzKQorIEFDX1NVQlNUKHNyY2RpcikKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9kb2MvaW52b2tlLnRleGkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2RvYy9pbnZva2UudGV4aQorKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2RvYy9pbnZva2UudGV4aQorQEAgLTI2MCw2ICsyNjAsNyBAQCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0c30uCisgLVdvdmVybGVuZ3RoLXN0cmluZ3MgIC1XcGFja2VkICAtV3BhY2tlZC1iaXRmaWVsZC1jb21wYXQgIC1XcGFkZGVkIEBnb2wKKyAtV3BhcmVudGhlc2VzICAtV3BlZGFudGljLW1zLWZvcm1hdCAtV25vLXBlZGFudGljLW1zLWZvcm1hdCBAZ29sCisgLVdwb2ludGVyLWFyaXRoICAtV25vLXBvaW50ZXItdG8taW50LWNhc3QgQGdvbAorKy1Xbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyBAZ29sCisgLVdyZWR1bmRhbnQtZGVjbHMgIC1Xbm8tcmV0dXJuLWxvY2FsLWFkZHIgQGdvbAorIC1XcmV0dXJuLXR5cGUgIC1Xc2VxdWVuY2UtcG9pbnQgIC1Xc2hhZG93IEBnb2wKKyAtV3NpZ24tY29tcGFyZSAgLVdzaWduLWNvbnZlcnNpb24gLVdmbG9hdC1jb252ZXJzaW9uIEBnb2wKK0BAIC00MjMwLDYgKzQyMzEsMTQgQEAgaGVhZGVycy0tLWZvciB0aGF0LCBAb3B0aW9uey1XdW5rbm93bi1wcgorICBmb3IgbW9zdCB0YXJnZXRzLCBpdCBpcyBtYWRlIHVwIG9mIGNvZGUgYW5kIHRodXMgcmVxdWlyZXMgdGhlIHN0YWNrCisgIHRvIGJlIG1hZGUgZXhlY3V0YWJsZSBpbiBvcmRlciBmb3IgdGhlIHByb2dyYW0gdG8gd29yayBwcm9wZXJseS4KKyAKKytAaXRlbSAtV25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKytAb3BpbmRleCBXbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0RvIG5vdCB3YXJuIGZvciBAb3B0aW9uey1JfSBvciBAb3B0aW9uey1MfSBvcHRpb25zIHVzaW5nIHN5c3RlbQorK2RpcmVjdG9yaWVzIHN1Y2ggYXMgQGZpbGV7L3Vzci9pbmNsdWRlfSB3aGVuIGNyb3NzIGNvbXBpbGluZy4gIFRoaXMKKytvcHRpb24gaXMgaW50ZW5kZWQgZm9yIHVzZSBpbiBjaHJvb3QgZW52aXJvbm1lbnRzIHdoZW4gc3VjaAorK2RpcmVjdG9yaWVzIGNvbnRhaW4gdGhlIGNvcnJlY3QgaGVhZGVycyBhbmQgbGlicmFyaWVzIGZvciB0aGUgdGFyZ2V0Cisrc3lzdGVtIHJhdGhlciB0aGFuIHRoZSBob3N0LgorKworIEBpdGVtIC1XZmxvYXQtZXF1YWwKKyBAb3BpbmRleCBXZmxvYXQtZXF1YWwKKyBAb3BpbmRleCBXbm8tZmxvYXQtZXF1YWwKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9nY2MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvZ2NjLmMKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9nY2MuYworQEAgLTc2NCw2ICs3NjQsOCBAQCBwcm9wZXIgcG9zaXRpb24gYW1vbmcgdGhlIG90aGVyIG91dHB1dCBmCisgICAgIiV7ZnVzZS1sZD0qOi1mdXNlLWxkPSUqfVwKKyAgICAgJVggJXtvKn0gJXtlKn0gJXtOfSAle259ICV7cn1cCisgICAgICV7c30gJXt0fSAle3UqfSAle3p9ICV7Wn0gJXshbm9zdGRsaWI6JXshbm9zdGFydGZpbGVzOiVTfX0gIiBWVEFCTEVfVkVSSUZJQ0FUSU9OX1NQRUMgIiBcCisrICAgICV7V25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXM6LS1uby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzfVwKKysgICAgJXtXZXJyb3I9cG9pc29uLXN5c3RlbS1kaXJlY3RvcmllczotLWVycm9yLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXN9XAorICAgICAle3N0YXRpYzp9ICV7TCp9ICUobWZ3cmFwKSAlKGxpbmtfbGliZ2NjKSAiIFNBTklUSVpFUl9FQVJMWV9TUEVDICIgJW9cCisgICAgICV7Zm9wZW5tcHxmdHJlZS1wYXJhbGxlbGl6ZS1sb29wcz0qOiU6aW5jbHVkZShsaWJnb21wLnNwZWMpJShsaW5rX2dvbXApfVwKKyAgICAgJXtmZ251LXRtOiU6aW5jbHVkZShsaWJpdG0uc3BlYyklKGxpbmtfaXRtKX1cCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvaW5jcGF0aC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9pbmNwYXRoLmMKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9pbmNwYXRoLmMKK0BAIC0yOCw2ICsyOCw3IEBACisgI2luY2x1ZGUgImludGwuaCIKKyAjaW5jbHVkZSAiaW5jcGF0aC5oIgorICNpbmNsdWRlICJjcHBkZWZhdWx0LmgiCisrI2luY2x1ZGUgImRpYWdub3N0aWMtY29yZS5oIgorIAorIC8qIE1pY3Jvc29mdCBXaW5kb3dzIGRvZXMgbm90IG5hdGl2ZWx5IHN1cHBvcnQgaW5vZGVzLgorICAgIFZNUyBoYXMgbm9uLW51bWVyaWMgaW5vZGVzLiAgKi8KK0BAIC0zODIsNiArMzgzLDI0IEBAIG1lcmdlX2luY2x1ZGVfY2hhaW5zIChjb25zdCBjaGFyICpzeXNyb28KKyAJfQorICAgICAgIGZwcmludGYgKHN0ZGVyciwgXygiRW5kIG9mIHNlYXJjaCBsaXN0LlxuIikpOworICAgICB9CisrCisrI2lmZGVmIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTCisrICBpZiAoZmxhZ19wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzKQorKyAgICB7CisrICAgICAgIHN0cnVjdCBjcHBfZGlyICpwOworKworKyAgICAgICBmb3IgKHAgPSBoZWFkc1tRVU9URV07IHA7IHAgPSBwLT5uZXh0KQorKyAgICAgICAgIHsKKysgICAgICAgICAgaWYgKCghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvaW5jbHVkZSIsIDEyKSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvbG9jYWwvaW5jbHVkZSIsIDE4KSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvWDExUjYvaW5jbHVkZSIsIDE4KSkpCisrICAgICAgICAgICAgd2FybmluZyAoT1BUX1dwb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLAorKyAgICAgICAgICAgICAgICAgICAgICJpbmNsdWRlIGxvY2F0aW9uIFwiJXNcIiBpcyB1bnNhZmUgZm9yICIKKysgICAgICAgICAgICAgICAgICAgICAiY3Jvc3MtY29tcGlsYXRpb24iLAorKyAgICAgICAgICAgICAgICAgICAgIHAtPm5hbWUpOworKyAgICAgICAgIH0KKysgICAgfQorKyNlbmRpZgorIH0KKyAKKyAvKiBVc2UgZ2l2ZW4gLUkgcGF0aHMgZm9yICNpbmNsdWRlICIuLi4iIGJ1dCBub3QgI2luY2x1ZGUgPC4uLj4sIGFuZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE3LWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTgxZWZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSBlOTljOWM5NzI2NmQ2ZDNlOGNhYzc5OGFhOTE0MDgyNTBjNGQ2MGNmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MDA6MzQgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNy8zNV0gZ2NjLXBvaXNvbi1kaXItZXh0ZW5kCisKK0FkZCAvc3cvaW5jbHVkZSBhbmQgL29wdC9pbmNsdWRlIGJhc2VkIG9uIHRoZSBvcmlnaW5hbAoremVja2Utbm8taG9zdC1pbmNsdWRlcy5wYXRjaCBwYXRjaC4gIFRoZSBvcmlnaW5hbCBwYXRjaCBjaGVja2VkIGZvcgorL3Vzci9pbmNsdWRlLCAvc3cvaW5jbHVkZSBhbmQgL29wdC9pbmNsdWRlIGFuZCB0aGVuIHRyaWdnZXJlZCBhIGZhaWx1cmUgYW5kCithYm9ydGVkLgorCitJbnN0ZWFkLCB3ZSBhZGQgdGhlIHR3byBtaXNzaW5nIGl0ZW1zIHRvIHRoZSBjdXJyZW50IHNjYW4uICBJZiB0aGUgdXNlcgord2FudHMgdGhpcyB0byBiZSBhIGZhaWx1cmUsIHRoZXkgY2FuIGFkZCAiLVdlcnJvcj1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIi4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvaW5jcGF0aC5jIHwgICAgNCArKystCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2luY3BhdGguYyBiL2djYy9pbmNwYXRoLmMKK2luZGV4IGNkNDFjNzguLmVhYzRhOTIgMTAwNjQ0CistLS0gYS9nY2MvaW5jcGF0aC5jCisrKysgYi9nY2MvaW5jcGF0aC5jCitAQCAtMzkzLDcgKzM5Myw5IEBAIG1lcmdlX2luY2x1ZGVfY2hhaW5zIChjb25zdCBjaGFyICpzeXNyb290LCBjcHBfcmVhZGVyICpwZmlsZSwgaW50IHZlcmJvc2UpCisgICAgICAgICAgeworICAgICAgICAgICBpZiAoKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9pbmNsdWRlIiwgMTIpKQorICAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9sb2NhbC9pbmNsdWRlIiwgMTgpKQorLSAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvWDExUjYvaW5jbHVkZSIsIDE4KSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi9zdy9pbmNsdWRlIiwgMTEpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL29wdC9pbmNsdWRlIiwgMTIpKSkKKyAgICAgICAgICAgICB3YXJuaW5nIChPUFRfV3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMsCisgICAgICAgICAgICAgICAgICAgICAgImluY2x1ZGUgbG9jYXRpb24gXCIlc1wiIGlzIHVuc2FmZSBmb3IgIgorICAgICAgICAgICAgICAgICAgICAgICJjcm9zcy1jb21waWxhdGlvbiIsCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTgtZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE4LWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyOGNhZmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE4LWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoCkBAIC0wLDAgKzEsNzMgQEAKK0Zyb20gNTYyMDdmYTI5MjNlOGVkZjc3NGU5OGZmYWM4MjY2NjA5MTA3NmJlMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjA4OjMxICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTgvMzVdIGdjYy00LjMuMzogU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVAorCitCZWZvcmUgY29tbWl0dGluZywgSSBub3RpY2VkIHRoYXQgUFIvMzIxNjEgd2FzIG1hcmtlZCBhcyBhIGR1cCBvZiBQUi8zMjAwOSwgYnV0IG15IHByZXZpb3VzIHBhdGNoIGRpZCBub3QgZml4IGl0LgorCitUaGlzIGFsdGVybmF0aXZlIHBhdGNoIGlzIGJldHRlciBiZWNhdXNlIGl0IGxldHMgeW91IGp1c3QgdXNlIENGTEFHU19GT1JfVEFSR0VUIHRvIHNldCB0aGUgY29tcGlsYXRpb24gZmxhZ3MgZm9yIGxpYmdjYy4gU2luY2UgYm9vdHN0cmFwcGVkIHRhcmdldCBsaWJyYXJpZXMgYXJlIG5ldmVyIGNvbXBpbGVkIHdpdGggdGhlIG5hdGl2ZSBjb21waWxlciwgaXQgbWFrZXMgbGl0dGxlIHNlbnNlIHRvIHVzZSBkaWZmZXJlbnQgZmxhZ3MgZm9yIHN0YWdlMSBhbmQgbGF0ZXIgc3RhZ2VzLiBBbmQgaXQgYWxzbyBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8gdXNlIGEgZGlmZmVyZW50IHZhcmlhYmxlIHRoYW4gQ0ZMQUdTX0ZPUl9UQVJHRVQuCisKK090aGVyIGNoYW5nZXMgSSBoYWQgdG8gZG8gaW5jbHVkZToKKworLSBtb3ZpbmcgdGhlIGNyZWF0aW9uIG9mIGRlZmF1bHQgQ0ZMQUdTX0ZPUl9UQVJHRVQgZnJvbSBNYWtlZmlsZS5hbSB0byBjb25maWd1cmUuYWMsIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBCT09UX0NGTEFHUyBhcmUgc3Vic3RpdHV0ZWQgaW50byBDRkxBR1NfRk9SX1RBUkdFVCAod2hpY2ggaXMgIi1PMiAtZyAkKENGTEFHUykiKSB2aWEgJChDRkxBR1MpLiBJdCBpcyBhbHNvIGNsZWFuZXIgdGhpcyB3YXkgdGhvdWdoLgorCistIHBhc3NpbmcgdGhlIHJpZ2h0IENGTEFHUyB0byBjb25maWd1cmUgc2NyaXB0cyBhcyBleHBvcnRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKworSSBhbHNvIHN0b3BwZWQgcGFzc2luZyBMSUJDRkxBR1MgdG8gY29uZmlndXJlIHNjcmlwdHMgc2luY2UgdGhleSBhcmUgdW51c2VkIGluIHRoZSB3aG9sZSBzcmMgdHJlZS4gQW5kIEkgdXBkYXRlZCB0aGUgZG9jdW1lbnRhdGlvbiBhcyBILVAgcmVtaW5kZWQgbWUgdG8gZG8uCisKK0Jvb3RzdHJhcHBlZC9yZWd0ZXN0ZWQgaTY4Ni1wYy1saW51eC1nbnUsIHdpbGwgY29tbWl0IHRvIDQuNCBzaG9ydGx5LiBPayBmb3IgNC4zPworCitTaWduZWQtb2ZmLWJ5OiBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb25maWd1cmUgfCAgIDMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDMyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggMWI3NmM5MC4uZTRkY2U3YyAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNjc3Miw2ICs2NzcyLDM4IEBAIGZpCisgCisgCisgCisrIyBEdXJpbmcgZ2NjIGJvb3RzdHJhcCwgaWYgd2UgdXNlIHNvbWUgcmFuZG9tIGNjIGZvciBzdGFnZTEgdGhlbiBDRkxBR1MKKysjIG1pZ2h0IGJlIGVtcHR5IG9yICItZyIuICBXZSBkb24ndCByZXF1aXJlIGEgQysrIGNvbXBpbGVyLCBzbyBDWFhGTEFHUworKyMgbWlnaHQgYWxzbyBiZSBlbXB0eSAob3IgIi1nIiwgaWYgYSBub24tR0NDIEMrKyBjb21waWxlciBpcyBpbiB0aGUgcGF0aCkuCisrIyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IFRBUkdFVCBsaWJyYXJpZXMgKHdoaWNoIHdlIGtub3cgYXJlIGJ1aWx0IHdpdGgKKysjIGdjYykgYXJlIGJ1aWx0IHdpdGggIi1PMiAtZyIsIHNvIGluY2x1ZGUgdGhvc2Ugb3B0aW9ucyB3aGVuIHNldHRpbmcKKysjIENGTEFHU19GT1JfVEFSR0VUIGFuZCBDWFhGTEFHU19GT1JfVEFSR0VULgorK2lmIHRlc3QgIngkQ0ZMQUdTX0ZPUl9UQVJHRVQiID0geDsgdGhlbgorKyAgQ0ZMQUdTX0ZPUl9UQVJHRVQ9JENGTEFHUworKyAgY2FzZSAiICRDRkxBR1MgIiBpbgorKyAgICAqIiAtTzIgIiopIDs7CisrICAgICopIENGTEFHU19GT1JfVEFSR0VUPSItTzIgJENGTEFHUyIgOzsKKysgIGVzYWMKKysgIGNhc2UgIiAkQ0ZMQUdTICIgaW4KKysgICAgKiIgLWcgIiogfCAqIiAtZzMgIiopIDs7CisrICAgICopIENGTEFHU19GT1JfVEFSR0VUPSItZyAkQ0ZMQUdTIiA7OworKyAgZXNhYworK2ZpCisrCisrCisraWYgdGVzdCAieCRDWFhGTEFHU19GT1JfVEFSR0VUIiA9IHg7IHRoZW4KKysgIENYWEZMQUdTX0ZPUl9UQVJHRVQ9JENYWEZMQUdTCisrICBjYXNlICIgJENYWEZMQUdTICIgaW4KKysgICAgKiIgLU8yICIqKSA7OworKyAgICAqKSBDWFhGTEFHU19GT1JfVEFSR0VUPSItTzIgJENYWEZMQUdTIiA7OworKyAgZXNhYworKyAgY2FzZSAiICRDWFhGTEFHUyAiIGluCisrICAgICoiIC1nICIqIHwgKiIgLWczICIqKSA7OworKyAgICAqKSBDWFhGTEFHU19GT1JfVEFSR0VUPSItZyAkQ1hYRkxBR1MiIDs7CisrICBlc2FjCisrZmkKKysKKysKKyAjIEhhbmRsZSAtLXdpdGgtaGVhZGVycz1YWFguICBJZiB0aGUgdmFsdWUgaXMgbm90ICJ5ZXMiLCB0aGUgY29udGVudHMgb2YKKyAjIHRoZSBuYW1lZCBkaXJlY3RvcnkgYXJlIGNvcGllZCB0byAkKHRvb2xkaXIpL3N5cy1pbmNsdWRlLgorIGlmIHRlc3QgeCIke3dpdGhfaGVhZGVyc30iICE9IHggJiYgdGVzdCB4IiR7d2l0aF9oZWFkZXJzfSIgIT0geG5vIDsgdGhlbgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE5LTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxOS02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNThiZTBjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxOS02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaApAQCAtMCwwICsxLDgyIEBACitGcm9tIDE4ZmRlNTc0MGIwOTMyNGRmYjljZjQxZTk4NDk2NzI1NzNmZjVmYTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxMDowNiArMDQwMAorU3ViamVjdDogW1BBVENIIDE5LzM1XSA2NC1iaXQgbXVsdGlsaWIgaGFjay4KKworR0NDIGhhcyBpbnRlcm5hbCBtdWx0aWxpYiBoYW5kbGluZyBjb2RlIGJ1dCBpdCBhc3N1bWVzIGEgdmVyeSBzcGVjaWZpYyByaWdpZCBkaXJlY3RvcnkKK2xheW91dC4gVGhlIGJ1aWxkIHN5c3RlbSBpbXBsZW1lbnRhdGlvbiBvZiBtdWx0aWxpYiBsYXlvdXQgaXMgdmVyeSBnZW5lcmljIGFuZCBhbGxvd3MKK2NvbXBsZXRlIGN1c3RvbWlzYXRpb24gb2YgdGhlIGxpYnJhcnkgZGlyZWN0b3JpZXMuCisKK1RoaXMgcGF0Y2ggaXMgYSBwYXJ0aWFsIHNvbHV0aW9uIHRvIGFsbG93IGFueSBjdXN0b20gZGlyZWN0b3JpZXMgdG8gYmUgcGFzc2VkIGludG8gZ2NjCithbmQgaGFuZGxlZCBjb3JyZWN0bHkuIEl0IGZvcmNlcyBnY2MgdG8gdXNlIHRoZSBiYXNlX2xpYmRpciAod2hpY2ggaXMgdGhlIGN1cnJlbnQKK2RpcmVjdG9yeSwgIi4iKS4gV2UgbmVlZCB0byBkbyB0aGlzIGZvciBlYWNoIG11bHRpbGliIHRoYXQgaXMgY29uZmlndXJlZCBhcyB3ZSBkb24ndAora25vdyB3aGljaCBjb21waWxlciBvcHRpb25zIG1heSBiZSBiZWluZyBwYXNzZWQgaW50byB0aGUgY29tcGlsZXIuIFNpbmNlIHdlIGhhdmUgYSBjb21waWxlcgorcGVyIG11bGl0bGliIGF0IHRoaXMgcG9pbnQgdGhhdCBpc24ndCBhbiBpc3N1ZS4KKworVGhlIG9uZSBwcm9ibGVtIGlzIHRoZSB0YXJnZXQgY29tcGlsZXIgaXMgb25seSBnb2luZyB0byB3b3JrIGZvciB0aGUgZGVmYXVsdCBtdWx0bGlsaWIgYXQKK3RoaXMgcG9pbnQuIElkZWFsbHkgd2UnZCBmaWd1cmUgb3V0IHdoaWNoIG11bHRpbGlicyB3ZXJlIGJlaW5nIGVuYWJsZWQgd2l0aCB3aGljaCBwYXRocworYW5kIGJlIGFibGUgdG8gcGF0Y2ggdGhlc2UgZW50cmllcyB3aXRoIGEgY29tcGxldGUgc2V0IG9mIGNvcnJlY3QgcGF0aHMgYnV0IHRoaXMgd2UKK2Rvbid0IGhhdmUgc3VjaCBjb2RlIGF0IHRoaXMgcG9pbnQuIFRoaXMgaXMgc29tZXRoaW5nIHRoZSB0YXJnZXQgZ2NjIHJlY2lwZSBzaG91bGQgZG8KK2FuZCBvdmVycmlkZSB0aGVzZSBwbGF0Zm9ybSBkZWZhdWx0cyBpbiBpdHMgYnVpbGQgY29uZmlnLgorCitSUCAxNS84LzExCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBFbHZpcyBEb3dzb24gPGVsdmlzLmRvd3NvbkBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NCAgIHwgICAgNiArKy0tLS0KKyBnY2MvY29uZmlnL21pcHMvdC1saW51eDY0ICAgfCAgIDEwICsrKy0tLS0tLS0KKyBnY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQgfCAgICA1ICsrLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQorCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnL2kzODYvdC1saW51eDY0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKK0BAIC0zMiw3ICszMiw1IEBACisgIworIGNvbW1hPSwKKyBNVUxUSUxJQl9PUFRJT05TICAgID0gJChzdWJzdCAkKGNvbW1hKSwvLCQoVE1fTVVMVElMSUJfQ09ORklHKSkKKy1NVUxUSUxJQl9ESVJOQU1FUyAgID0gJChwYXRzdWJzdCBtJSwgJSwgJChzdWJzdCAvLCAsJChNVUxUSUxJQl9PUFRJT05TKSkpCistTVVMVElMSUJfT1NESVJOQU1FUyA9IG02ND0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOng4Nl82NC1saW51eC1nbnUpCistTVVMVElMSUJfT1NESVJOQU1FUys9IG0zMj0kKGlmICQod2lsZGNhcmQgJChzaGVsbCBlY2hvICQoU1lTVEVNX0hFQURFUl9ESVIpKS8uLi8uLi91c3IvbGliMzIpLC4uL2xpYjMyLC4uL2xpYikkKGNhbGwgaWZfbXVsdGlhcmNoLDppMzg2LWxpbnV4LWdudSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTKz0gbXgzMj0uLi9saWJ4MzIkKGNhbGwgaWZfbXVsdGlhcmNoLDp4ODZfNjQtbGludXgtZ251eDMyKQorK01VTFRJTElCX0RJUk5BTUVTID0gLiAuCisrTVVMVElMSUJfT1NESVJOQU1FUyA9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnL21pcHMvdC1saW51eDY0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKK0BAIC0xNywxMCArMTcsNiBAQAorICMgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIAorIE1VTFRJTElCX09QVElPTlMgPSBtYWJpPW4zMi9tYWJpPTMyL21hYmk9NjQKKy1NVUxUSUxJQl9ESVJOQU1FUyA9IG4zMiAzMiA2NAorLU1JUFNfRUwgPSAkKGlmICQoZmlsdGVyICVlbCwgJChmaXJzdHdvcmQgJChzdWJzdCAtLCAsJCh0YXJnZXQpKSkpLGVsKQorLU1JUFNfU09GVCA9ICQoaWYgJChzdHJpcCAkKGZpbHRlciBNQVNLX1NPRlRfRkxPQVRfQUJJLCAkKHRhcmdldF9jcHVfZGVmYXVsdCkpICQoZmlsdGVyIHNvZnQsICQod2l0aF9mbG9hdCkpKSxzb2Z0KQorLU1VTFRJTElCX09TRElSTkFNRVMgPSBcCistCS4uL2xpYjMyJChjYWxsIGlmX211bHRpYXJjaCw6bWlwczY0JChNSVBTX0VMKS1saW51eC1nbnVhYmluMzIkKE1JUFNfU09GVCkpIFwKKy0JLi4vbGliJChjYWxsIGlmX211bHRpYXJjaCw6bWlwcyQoTUlQU19FTCktbGludXgtZ251JChNSVBTX1NPRlQpKSBcCistCS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6bWlwczY0JChNSVBTX0VMKS1saW51eC1nbnVhYmk2NCQoTUlQU19TT0ZUKSkKKytNVUxUSUxJQl9ESVJOQU1FUyA9IC4gLiAuCisrTVVMVElMSUJfT1NESVJOQU1FUyA9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCisrCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0CisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQKK0BAIC0yNiwxMCArMjYsOSBAQAorICMgTVVMVElMSUJfT1NESVJOQU1FUyBhY2NvcmRpbmcgdG8gd2hhdCBpcyBmb3VuZCBvbiB0aGUgdGFyZ2V0LgorIAorIE1VTFRJTElCX09QVElPTlMgICAgOj0gbTY0L20zMgorLU1VTFRJTElCX0RJUk5BTUVTICAgOj0gNjQgMzIKKytNVUxUSUxJQl9ESVJOQU1FUyAgIDo9IC4gLgorIE1VTFRJTElCX0VYVFJBX09QVFMgOj0gCistTVVMVElMSUJfT1NESVJOQU1FUyA6PSBtNjQ9Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDpwb3dlcnBjNjQtbGludXgtZ251KQorLU1VTFRJTElCX09TRElSTkFNRVMgKz0gbTMyPSQoaWYgJCh3aWxkY2FyZCAkKHNoZWxsIGVjaG8gJChTWVNURU1fSEVBREVSX0RJUikpLy4uLy4uL3Vzci9saWIzMiksLi4vbGliMzIsLi4vbGliKSQoY2FsbCBpZl9tdWx0aWFyY2gsOnBvd2VycGMtbGludXgtZ251KQorK01VTFRJTElCX09TRElSTkFNRVMgOj0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKKyAKKyByczYwMDAtbGludXgubzogJChzcmNkaXIpL2NvbmZpZy9yczYwMDAvcnM2MDAwLWxpbnV4LmMKKyAJJChDT01QSUxFKSAkPApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMC1vcHRpb25hbC1saWJzdGRjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMC1vcHRpb25hbC1saWJzdGRjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNDY2MTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIwLW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2gKQEAgLTAsMCArMSw5OCBAQAorRnJvbSAzMDdjOGZmM2VmNjY2YjdiZDVhYzczMzg2M2YyZmJiMjdhOWQ1MjFlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTI6NTYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMC8zNV0gb3B0aW9uYWwgbGlic3RkYworCitnY2MtcnVudGltZSBidWlsZHMgbGlic3RkYysrIHNlcGFyYXRlbHkgZnJvbSBnY2MtY3Jvc3MtKi4gSXRzIGNvbmZpZ3VyZSB0ZXN0cyB1c2luZyBnKysKK3dpbGwgbm90IHJ1biBjb3JyZWN0bHkgc2luY2UgYnkgZGVmYXVsdCB0aGUgbGlua2VyIHdpbGwgdHJ5IHRvIGxpbmsgYWdhaW5zdCBsaWJzdGRjKysKK3doaWNoIHNob3VsZG4ndCBleGlzdCB5ZXQuIFdlIG5lZWQgYW4gb3B0aW9uIHRvIGRpc2FibGUgLWxzdGRjKysKK29wdGlvbiB3aGlsc3QgbGVhdmluZyAtbGMsIC1sZ2NjIGFuZCBvdGhlciBhdXRvbWF0aWMgbGlicmFyeSBkZXBlbmRlbmNpZXMgYWRkZWQgYnkgZ2NjCitkcml2ZXIuIFRoaXMgcGF0Y2ggYWRkcyBzdWNoIGFuIG9wdGlvbiB3aGljaCBvbmx5IGRpc2FibGVzIHRoZSAtbHN0ZGMrKy4KKworQSAic3RhbmRhcmQiIGdjYyBidWlsZCB1c2VzIHhnY2MgYW5kIGhlbmNlIGF2b2lkcyB0aGlzLiBXZSBzaG91bGQgYXNrIHVwc3RyZWFtIGhvdyB0bworZG8gdGhpcyBvZmZpY2lhbGx5LCB0aGUgbGlrZWx5IGFuc3dlciBpcyBkb24ndCBidWlsZCBsaWJzdGRjKysgc2VwYXJhdGVseS4KKworUlAgMjkvNi8xMAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgZ2NjL2MtZmFtaWx5L2Mub3B0ICB8ICAgIDQgKysrKworIGdjYy9jcC9nKytzcGVjLmMgICAgfCAgICAxICsKKyBnY2MvZG9jL2ludm9rZS50ZXhpIHwgICAgOSArKysrKysrLS0KKyBnY2MvZ2NjLmMgICAgICAgICAgIHwgICAgMSArCisgNCBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvYy1mYW1pbHkvYy5vcHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2MtZmFtaWx5L2Mub3B0CisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvYy1mYW1pbHkvYy5vcHQKK0BAIC0xMzIzLDYgKzEzMjMsMTAgQEAgbm9zdGRpbmMrKworIEMrKyBPYmpDKysKKyBEbyBub3Qgc2VhcmNoIHN0YW5kYXJkIHN5c3RlbSBpbmNsdWRlIGRpcmVjdG9yaWVzIGZvciBDKysKKyAKKytub3N0ZGxpYisrCisrRHJpdmVyCisrRG8gbm90IGxpbmsgc3RhbmRhcmQgQysrIHJ1bnRpbWUgbGlicmFyeQorKworIG8KKyBDIE9iakMgQysrIE9iakMrKyBKb2luZWQgU2VwYXJhdGUKKyA7IERvY3VtZW50ZWQgaW4gY29tbW9uLm9wdAorSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2NwL2crK3NwZWMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvY3AvZysrc3BlYy5jCisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY3AvZysrc3BlYy5jCitAQCAtMTM4LDYgKzEzOCw3IEBAIGxhbmdfc3BlY2lmaWNfZHJpdmVyIChzdHJ1Y3QgY2xfZGVjb2RlZF8KKyAgICAgICBzd2l0Y2ggKGRlY29kZWRfb3B0aW9uc1tpXS5vcHRfaW5kZXgpCisgCXsKKyAJY2FzZSBPUFRfbm9zdGRsaWI6CisrCWNhc2UgT1BUX25vc3RkbGliX186CisgCWNhc2UgT1BUX25vZGVmYXVsdGxpYnM6CisgCSAgbGlicmFyeSA9IC0xOworIAkgIGJyZWFrOworSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2RvYy9pbnZva2UudGV4aQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvZG9jL2ludm9rZS50ZXhpCisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvZG9jL2ludm9rZS50ZXhpCitAQCAtMTkzLDYgKzE5Myw3IEBAIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCisgLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIEBnb2wKKyAtZnZ0YWJsZS12ZXJpZnk9QHZhcntzdGR8cHJlaW5pdHxub25lfSBAZ29sCisgLWZ2dHYtY291bnRzIC1mdnR2LWRlYnVnIEBnb2wKKystbm9zdGRsaWIrKyBAZ29sCisgLWZ2aXNpYmlsaXR5LW1zLWNvbXBhdCBAZ29sCisgLWZleHQtbnVtZXJpYy1saXRlcmFscyBAZ29sCisgLVdhYmkgIC1XY29udmVyc2lvbi1udWxsICAtV2N0b3ItZHRvci1wcml2YWN5IEBnb2wKK0BAIC00NTcsNyArNDU4LDcgQEAgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdHN9LgorIC1ub3N0YXJ0ZmlsZXMgIC1ub2RlZmF1bHRsaWJzICAtbm9zdGRsaWIgLXBpZSAtcmR5bmFtaWMgQGdvbAorIC1zICAtc3RhdGljIC1zdGF0aWMtbGliZ2NjIC1zdGF0aWMtbGlic3RkYysrIEBnb2wKKyAtc3RhdGljLWxpYmFzYW4gLXN0YXRpYy1saWJ0c2FuIC1zdGF0aWMtbGlibHNhbiAtc3RhdGljLWxpYnVic2FuIEBnb2wKKy0tc2hhcmVkIC1zaGFyZWQtbGliZ2NjICAtc3ltYm9saWMgQGdvbAorKy1zaGFyZWQgLXNoYXJlZC1saWJnY2MgIC1zeW1ib2xpYyAtbm9zdGRsaWIrKyBAZ29sCisgLVQgQHZhcntzY3JpcHR9ICAtV2wsQHZhcntvcHRpb259ICAtWGxpbmtlciBAdmFye29wdGlvbn0gQGdvbAorIC11IEB2YXJ7c3ltYm9sfX0KKyAKK0BAIC0xMDI4NSw2ICsxMDI4NiwxMSBAQCBUaGVzZSBlbnRyaWVzIGFyZSB1c3VhbGx5IHJlc29sdmVkIGJ5IGVuCisgbGliYy4gIFRoZXNlIGVudHJ5IHBvaW50cyBzaG91bGQgYmUgc3VwcGxpZWQgdGhyb3VnaCBzb21lIG90aGVyCisgbWVjaGFuaXNtIHdoZW4gdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkLgorIAorK0BpdGVtIC1ub3N0ZGxpYisrCisrQG9waW5kZXggbm9zdGRsaWIrKworK0RvIG5vdCB1c2UgdGhlIHN0YW5kYXJkIHN5c3RlbSBDKysgcnVudGltZSBsaWJyYXJpZXMgd2hlbiBsaW5raW5nLgorK09ubHkgdGhlIGxpYnJhcmllcyB5b3Ugc3BlY2lmeSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgbGlua2VyLgorKworIEBjaW5kZXggQG9wdGlvbnstbGdjY30sIHVzZSB3aXRoIEBvcHRpb257LW5vc3RkbGlifQorIEBjaW5kZXggQG9wdGlvbnstbm9zdGRsaWJ9IGFuZCB1bnJlc29sdmVkIHJlZmVyZW5jZXMKKyBAY2luZGV4IHVucmVzb2x2ZWQgcmVmZXJlbmNlcyBhbmQgQG9wdGlvbnstbm9zdGRsaWJ9CitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvZ2NjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2djYy5jCisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvZ2NjLmMKK0BAIC03NzIsNiArNzcyLDcgQEAgcHJvcGVyIHBvc2l0aW9uIGFtb25nIHRoZSBvdGhlciBvdXRwdXQgZgorICAgICAlKG1mbGliKSAiIFNUQUNLX1NQTElUX1NQRUMgIlwKKyAgICAgJXtmcHJvZmlsZS1hcmNzfGZwcm9maWxlLWdlbmVyYXRlKnxjb3ZlcmFnZTotbGdjb3Z9ICIgU0FOSVRJWkVSX1NQRUMgIiBcCisgICAgICV7IW5vc3RkbGliOiV7IW5vZGVmYXVsdGxpYnM6JShsaW5rX3NzcCkgJShsaW5rX2djY19jX3NlcXVlbmNlKX19XAorKyAgICAleyFub3N0ZGxpYisrOn1cCisgICAgICV7IW5vc3RkbGliOiV7IW5vc3RhcnRmaWxlczolRX19ICV7VCp9IH19fX19fSIKKyAjZW5kaWYKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjEtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMS1nY2MtZGlzYWJsZS1NQVNLX1JFTEFYX1BJQ19DQUxMUy1iaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIzYzYxZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjEtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK0Zyb20gMDA0Njk2ZTA1NGFlOWRjNzFkNTEyY2M3NTVjY2M0MDc0ZmM2MmIyZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE0OjIwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjEvMzVdIGdjYzogZGlzYWJsZSBNQVNLX1JFTEFYX1BJQ19DQUxMUyBiaXQKKworVGhlIG5ldyBmZWF0dXJlIGFkZGVkIGFmdGVyIDQuMy4zCisiaHR0cDovL3d3dy5wdWJicy5uZXQvMjAwOTA5L2djYy85NDA0OC1wYXRjaC1hZGQtc3VwcG9ydC1mb3Itcm1pcHNqYWxyLmh0bWwiCit3aWxsIGNhdXNlIGNjMXBsdXMgZWF0IHVwIGFsbCB0aGUgc3lzdGVtIG1lbW9yeSB3aGVuIGJ1aWxkIHdlYmtpdC1ndGsuCitUaGUgZnVuY3Rpb24gbWlwc19nZXRfcGljX2NhbGxfc3ltYm9sIGtlZXBzIG9uIHJlY3Vyc2l2ZWx5IGNhbGxpbmcgaXRzZWxmLgorRGlzYWJsZSB0aGlzIGZlYXR1cmUgdG8gd2FsayBhc2lkZSB0aGUgYnVnLgorCitTaWduZWQtb2ZmLWJ5OiBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICB8ICAgIDcgLS0tLS0tLQorIGdjYy9jb25maWd1cmUuYWMgfCAgICA3IC0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IGI2NWQyMWQuLmJkYWI0NWEgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMjU4MjksMTMgKzI1ODI5LDYgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgYXNzZW1ibGVyIGFuZCBsaW5rZXIgZm9yIGV4cGxpY2l0IEpBTFIgcmVsb2NhdGlvbi4uLiAiID4mNjsKKyAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgICBmaQorICAgICBmaQorLSAgICBpZiB0ZXN0ICRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyA9IHllczsgdGhlbgorLSAgICAgIGlmIHRlc3QgeCR0YXJnZXRfY3B1X2RlZmF1bHQgPSB4OyB0aGVuCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9TUFTS19SRUxBWF9QSUNfQ0FMTFMKKy0gICAgICBlbHNlCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9IigkdGFyZ2V0X2NwdV9kZWZhdWx0KXxNQVNLX1JFTEFYX1BJQ19DQUxMUyIKKy0gICAgICBmaQorLSAgICBmaQorICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jIiA+JjUKKyAkYXNfZWNobyAiJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jIiA+JjY7IH0KKyAKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggZTIyNmI4NS4uNWY1YzkwOSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC00MDk5LDEzICs0MDk5LDYgQEAgeDoKKyAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgICBmaQorICAgICBmaQorLSAgICBpZiB0ZXN0ICRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyA9IHllczsgdGhlbgorLSAgICAgIGlmIHRlc3QgeCR0YXJnZXRfY3B1X2RlZmF1bHQgPSB4OyB0aGVuCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9TUFTS19SRUxBWF9QSUNfQ0FMTFMKKy0gICAgICBlbHNlCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9IigkdGFyZ2V0X2NwdV9kZWZhdWx0KXxNQVNLX1JFTEFYX1BJQ19DQUxMUyIKKy0gICAgICBmaQorLSAgICBmaQorICAgICBBQ19NU0dfUkVTVUxUKCRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYykKKyAKKyAgICAgQUNfQ0FDSEVfQ0hFQ0soW2xpbmtlciBmb3IgLmVoX2ZyYW1lIHBlcnNvbmFsaXR5IHJlbGF4YXRpb25dLAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIyLUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIyLUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBjOGFiZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjItQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIDdmNWM5ZGNjNzFjOGI4M2EwYjU1OTYyNjZjYzRiZGYwOTM2ZThlMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxNjoyOCArMDQwMAorU3ViamVjdDogW1BBVENIIDIyLzM1XSBDT0xMRUNUX0dDQ19PUFRJT05TCisKK1RoaXMgcGF0Y2ggYWRkcyAtLXN5c3Jvb3QgaW50byBDT0xMRUNUX0dDQ19PUFRJT05TIHdoaWNoIGlzIHVzZWQgdG8KK2ludm9rZSBjb2xsZWN0Mi4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvZ2NjLmMgfCAgICA5ICsrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggNDc3NzUyZi4uNTEwNjJhYSAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtNDA5OCw2ICs0MDk4LDE1IEBAIHNldF9jb2xsZWN0X2djY19vcHRpb25zICh2b2lkKQorIAkJc2l6ZW9mICgiQ09MTEVDVF9HQ0NfT1BUSU9OUz0iKSAtIDEpOworIAorICAgZmlyc3RfdGltZSA9IFRSVUU7CisrI2lmZGVmIEhBVkVfTERfU1lTUk9PVAorKyAgaWYgKHRhcmdldF9zeXN0ZW1fcm9vdF9jaGFuZ2VkICYmIHRhcmdldF9zeXN0ZW1fcm9vdCkKKysgICAgeworKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgIictLXN5c3Jvb3Q9Iiwgc2l6ZW9mKCInLS1zeXNyb290PSIpLTEpOworKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgdGFyZ2V0X3N5c3RlbV9yb290LHN0cmxlbih0YXJnZXRfc3lzdGVtX3Jvb3QpKTsKKysgICAgICBvYnN0YWNrX2dyb3cgKCZjb2xsZWN0X29ic3RhY2ssICInIiwgMSk7CisrICAgICAgZmlyc3RfdGltZSA9IEZBTFNFOworKyAgICB9CisrI2VuZGlmCisgICBmb3IgKGkgPSAwOyAoaW50KSBpIDwgbl9zd2l0Y2hlczsgaSsrKQorICAgICB7CisgICAgICAgY29uc3QgY2hhciAqY29uc3QgKmFyZ3M7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjMtVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIzLVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZGZlOWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIzLVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoCkBAIC0wLDAgKzEsOTYgQEAKK0Zyb20gZjdkNDljYTQ0NWU2MGZhYTFiNTI1NmM2YjRmOTZjMWVlNWMwZTM1MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE3OjI1ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjMvMzVdIFVzZSB0aGUgZGVmYXVsdHMuaCBpbiAke0J9IGluc3RlYWQgb2YgJHtTfSwgYW5kIHQtb2UKKyBpbiAke0J9CisKK1VzZSB0aGUgZGVmYXVsdHMuaCBpbiAke0J9IGluc3RlYWQgb2YgJHtTfSwgYW5kIHQtb2UgaW4gJHtCfSwgc28gdGhhdAordGhlIHNvdXJjZSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gZ2NjLWNyb3NzLWluaXRpYWwsCitnY2MtY3Jvc3MtaW50ZXJtZWRpYXRlLCBnY2MtY3Jvc3MsIGdjYy1ydW50aW1lLCBhbmQgYWxzbyB0aGUgc2RrIGJ1aWxkLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworV2hpbGUgY29tcGlsaW5nIGdjYy1jcm9zc3Nkay1pbml0aWFsLXg4Nl82NCBvbiBzb21lIGhvc3QsIHRoZXJlIGlzCitvY2Nhc2lvbmFsbHkgZmFpbHVyZSB0aGF0IHRlc3QgdGhlIGV4aXN0YW5jZSBvZiBkZWZhdWx0LmggZG9lc24ndAord29yaywgdGhlIHJlYXNvbiBpcyB0bV9pbmNsdWRlX2xpc3Q9JyoqIGRlZmF1bHRzLmgnIHJhdGhlciB0aGFuCit0bV9pbmNsdWRlX2xpc3Q9JyoqIC4vZGVmYXVsdHMuaCcKKworU28gd2UgYWRkIHRoZSB0ZXN0IGNvbmRpdGlvbiBmb3IgdGhpcyBzaXR1YXRpb24uCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBnY2MvTWFrZWZpbGUuaW4gIHwgICAgMiArLQorIGdjYy9jb25maWd1cmUgICAgfCAgICA0ICsrLS0KKyBnY2MvY29uZmlndXJlLmFjIHwgICAgNCArKy0tCisgZ2NjL21rY29uZmlnLnNoICB8ICAgIDQgKystLQorIDQgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL01ha2VmaWxlLmluIGIvZ2NjL01ha2VmaWxlLmluCitpbmRleCBkMWFiMjJmLi4xNWZlNGI2IDEwMDY0NAorLS0tIGEvZ2NjL01ha2VmaWxlLmluCisrKysgYi9nY2MvTWFrZWZpbGUuaW4KK0BAIC00ODMsNyArNDgzLDcgQEAgVEFSR0VUX1NZU1RFTV9ST09UID0gQFRBUkdFVF9TWVNURU1fUk9PVEAKKyBUQVJHRVRfU1lTVEVNX1JPT1RfREVGSU5FID0gQFRBUkdFVF9TWVNURU1fUk9PVF9ERUZJTkVACisgCisgeG1ha2VfZmlsZT1AeG1ha2VfZmlsZUAKKy10bWFrZV9maWxlPUB0bWFrZV9maWxlQAorK3RtYWtlX2ZpbGU9QHRtYWtlX2ZpbGVAIC4vdC1vZQorIFRNX0VORElBTl9DT05GSUc9QFRNX0VORElBTl9DT05GSUdACisgVE1fTVVMVElMSUJfQ09ORklHPUBUTV9NVUxUSUxJQl9DT05GSUdACisgVE1fTVVMVElMSUJfRVhDRVBUSU9OU19DT05GSUc9QFRNX01VTFRJTElCX0VYQ0VQVElPTlNfQ09ORklHQAorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCA1Mzk5YjJiLi42MGEwNGJkIDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTExNjMxLDggKzExNjMxLDggQEAgZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCisgICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgorICAgICAgICA7OworICAgICBkZWZhdWx0cy5oICkKKy0gICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS8kZiIKKy0gICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vJGYiCisrICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vJGYiCisgICAgICAgIDs7CisgICAgICogKQorICAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggZjg3YzNiNi4uNDYwZTBkOSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC0xNzQwLDggKzE3NDAsOCBAQCBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisgICAgICAgIDs7CisgICAgIGRlZmF1bHRzLmggKQorLSAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpLyRmIgorLSAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi8kZiIKKyAgICAgICAgOzsKKyAgICAgKiApCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvY29uZmlnLyRmIgorZGlmZiAtLWdpdCBhL2djYy9ta2NvbmZpZy5zaCBiL2djYy9ta2NvbmZpZy5zaAoraW5kZXggYzcxNDZlZC4uYjE1M2Y0NSAxMDA2NDQKKy0tLSBhL2djYy9ta2NvbmZpZy5zaAorKysrIGIvZ2NjL21rY29uZmlnLnNoCitAQCAtNzcsNyArNzcsNyBAQCBpZiBbIC1uICIkSEVBREVSUyIgXTsgdGhlbgorICAgICBpZiBbICQjIC1nZSAxIF07IHRoZW4KKyAJZWNobyAnI2lmZGVmIElOX0dDQycgPj4gJHtvdXRwdXR9VAorIAlmb3IgZmlsZSBpbiAiJEAiOyBkbworLQkgICAgaWYgdGVzdCB4IiRmaWxlIiA9IHgiZGVmYXVsdHMuaCI7IHRoZW4KKysJICAgIGlmIHRlc3QgeCIkZmlsZSIgPSB4Ii4vZGVmYXVsdHMuaCIgLW8geCIkZmlsZSIgPSB4ImRlZmF1bHRzLmgiOyB0aGVuCisgCQlwb3N0cG9uZV9kZWZhdWx0c19oPSJ5ZXMiCisgCSAgICBlbHNlCisgCQllY2hvICIjIGluY2x1ZGUgXCIkZmlsZVwiIiA+PiAke291dHB1dH1UCitAQCAtMTA2LDcgKzEwNiw3IEBAIGVzYWMKKyAKKyAjIElmIHdlIHBvc3Rwb25lZCBpbmNsdWRpbmcgZGVmYXVsdHMuaCwgYWRkIHRoZSAjaW5jbHVkZSBub3cuCisgaWYgdGVzdCB4IiRwb3N0cG9uZV9kZWZhdWx0c19oIiA9IHgieWVzIjsgdGhlbgorLSAgICBlY2hvICIjIGluY2x1ZGUgXCJkZWZhdWx0cy5oXCIiID4+ICR7b3V0cHV0fVQKKysgICAgZWNobyAiIyBpbmNsdWRlIFwiLi9kZWZhdWx0cy5oXCIiID4+ICR7b3V0cHV0fVQKKyBmaQorIAorICMgQWRkIG11bHRpcGxlIGluY2x1c2lvbiBwcm90ZWN0aW9uIGd1YXJkLCBwYXJ0IHR3by4KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNC1QUi10YXJnZXQtMzIyMTkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI0LVBSLXRhcmdldC0zMjIxOS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWFjZjdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNC1QUi10YXJnZXQtMzIyMTkucGF0Y2gKQEAgLTAsMCArMSw2MiBAQAorRnJvbSBlMGQxNWY0ZjhiZjI4YzM1MWI5MjE1Y2EzN2YxY2FhMjRkZjBlMWZkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTg6NTQgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNC8zNV0gUFIgdGFyZ2V0LzMyMjE5CisKKyogdmFyYXNtLmMgKGRlZmF1bHRfYmluZHNfbG9jYWxfcF8xKTogV2VhayBkYXRhIGlzIG5vdCBsb2NhbC4KKworU2lnbmVkLW9mZi1ieTogQmVybmhhcmQgUmV1dG5lci1GaXNjaGVyIDxyZXAuZG90Lm5vcEBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CistLS0KKyBnY2MvdGVzdHN1aXRlL2djYy5kZy92aXNpYmlsaXR5LTIxLmMgfCAgIDE0ICsrKysrKysrKysrKysrCisgZ2NjL3ZhcmFzbS5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgOSArKysrLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3Zpc2liaWxpdHktMjEuYworCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvdmFyYXNtLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL3ZhcmFzbS5jCisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvdmFyYXNtLmMKK0BAIC02NzcxLDYgKzY3NzEsMTAgQEAgZGVmYXVsdF9iaW5kc19sb2NhbF9wXzEgKGNvbnN0X3RyZWUgZXhwLAorICAgLyogU3RhdGljIHZhcmlhYmxlcyBhcmUgYWx3YXlzIGxvY2FsLiAgKi8KKyAgIGVsc2UgaWYgKCEgVFJFRV9QVUJMSUMgKGV4cCkpCisgICAgIGxvY2FsX3AgPSB0cnVlOworKyAgLyogaGlkZGVuIHdlYWsgY2FuJ3QgYmUgb3ZlcnJpZGRlbiBieSBzb21ldGhpbmcgbm9uLWxvY2FsLCBhbGwKKysgICAgIHRoYXQgaXMgcG9zc2libGUgaXMgdGhhdCBpdCBpcyBub3QgZGVmaW5lZCBhdCBhbGwuICovCisrICBlbHNlIGlmIChERUNMX1dFQUsgKGV4cCkpCisrICAgIGxvY2FsX3AgPSBmYWxzZTsKKyAgIC8qIEEgdmFyaWFibGUgaXMgbG9jYWwgaWYgdGhlIHVzZXIgaGFzIHNhaWQgZXhwbGljaXRseSB0aGF0IGl0IHdpbGwKKyAgICAgIGJlLiAgKi8KKyAgIGVsc2UgaWYgKChERUNMX1ZJU0lCSUxJVFlfU1BFQ0lGSUVEIChleHApCitAQCAtNjc4NCwxMSArNjc4OCw2IEBAIGRlZmF1bHRfYmluZHNfbG9jYWxfcF8xIChjb25zdF90cmVlIGV4cCwKKyAgICAgIGxvY2FsLiAgKi8KKyAgIGVsc2UgaWYgKERFQ0xfVklTSUJJTElUWSAoZXhwKSAhPSBWSVNJQklMSVRZX0RFRkFVTFQpCisgICAgIGxvY2FsX3AgPSB0cnVlOworLSAgLyogRGVmYXVsdCB2aXNpYmlsaXR5IHdlYWsgZGF0YSBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIHN0cm9uZyBzeW1ib2wKKy0gICAgIGluIGFub3RoZXIgbW9kdWxlIGFuZCBzbyBhcmUgbm90IGxvY2FsLiAgKi8KKy0gIGVsc2UgaWYgKERFQ0xfV0VBSyAoZXhwKQorLQkgICAmJiAhcmVzb2x2ZWRfbG9jYWxseSkKKy0gICAgbG9jYWxfcCA9IGZhbHNlOworICAgLyogSWYgUElDLCB0aGVuIGFzc3VtZSB0aGF0IGFueSBnbG9iYWwgbmFtZSBjYW4gYmUgb3ZlcnJpZGRlbiBieQorICAgICAgc3ltYm9scyByZXNvbHZlZCBmcm9tIG90aGVyIG1vZHVsZXMuICAqLworICAgZWxzZSBpZiAoc2hsaWIpCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvdGVzdHN1aXRlL2djYy5kZy92aXNpYmlsaXR5LTIyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zpc2liaWxpdHktMjIuYworQEAgLTAsMCArMSwxMyBAQAorKy8qIFBSIHRhcmdldC8zMjIxOSAqLworKy8qIHsgZGctZG8gcnVuIH0gKi8KKysvKiB7IGRnLXJlcXVpcmUtdmlzaWJpbGl0eSAiIiB9ICovCisrLyogeyBkZy1vcHRpb25zICItZlBJQyIgeyB0YXJnZXQgZnBpYyB9IH0gKi8KKysKKytleHRlcm4gdm9pZCBmKCkgX19hdHRyaWJ1dGVfXygod2Vhayx2aXNpYmlsaXR5KCJoaWRkZW4iKSkpOworK2V4dGVybiBpbnQgcHV0cyggY2hhciBjb25zdCogKTsKKytpbnQgbWFpbigpCisreworKyAgaWYgKGYpCisrICAgIGYoKTsKKysgIHJldHVybiAwOworK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjUtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI1LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNzkxNGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI1LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gYWY4YTU2ZWE0ZTE3YjI5MDllZmYyYzU3NzA0YWI0M2VmMjRmMjhkMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIwOjAxICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjUvMzVdIGZvcnRyYW4gY3Jvc3MtY29tcGlsZSBoYWNrLgorCisqIEZvcnRyYW4gd291bGQgaGF2ZSBzZWFyY2hlZCBmb3IgYXJtLWFuZ3N0cm9tLWdudWVhYmktZ2ZvcnRyYW4gYnV0IHdvdWxkIGhhdmUgdXNlZAordXNlZCBnZm9ydGFuLiBGb3IgZ2NjXzQuMi4yLmJiIHdlIHdhbnQgdG8gdXNlIHRoZSBnZm9ydHJhbiBjb21waWxlciBmcm9tIG91ciBjcm9zcworZGlyZWN0b3J5LgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgbGliZ2ZvcnRyYW4vY29uZmlndXJlICAgIHwgICAgMiArLQorIGxpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYyB8ICAgIDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZSBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQoraW5kZXggODM4NWU5Ni4uYjhmN2E5MiAxMDA3NTUKKy0tLSBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQorKysrIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlCitAQCAtMTI3MDQsNyArMTI3MDQsNyBAQCBlc2FjCisgCisgIyBXZSBuZWVkIGdmb3J0cmFuIHRvIGNvbXBpbGUgcGFydHMgb2YgdGhlIGxpYnJhcnkKKyAjQUNfUFJPR19GQyhnZm9ydHJhbikKKy1GQz0iJEdGT1JUUkFOIgorKyNGQz0iJEdGT1JUUkFOIgorIGFjX2V4dD0ke2FjX2ZjX3NyY2V4dC1mfQorIGFjX2NvbXBpbGU9JyRGQyAtYyAkRkNGTEFHUyAkYWNfZmNmbGFnc19zcmNleHQgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisgYWNfbGluaz0nJEZDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkRkNGTEFHUyAkTERGTEFHUyAkYWNfZmNmbGFnc19zcmNleHQgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCitkaWZmIC0tZ2l0IGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjCitpbmRleCA3ZDk3ZmVkLi4zZjlmNDg0IDEwMDY0NAorLS0tIGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjCisrKysgYi9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKK0BAIC0yMjcsNyArMjI3LDcgQEAgQUNfU1VCU1QoZW5hYmxlX3N0YXRpYykKKyAKKyAjIFdlIG5lZWQgZ2ZvcnRyYW4gdG8gY29tcGlsZSBwYXJ0cyBvZiB0aGUgbGlicmFyeQorICNBQ19QUk9HX0ZDKGdmb3J0cmFuKQorLUZDPSIkR0ZPUlRSQU4iCisrI0ZDPSIkR0ZPUlRSQU4iCisgQUNfUFJPR19GQyhnZm9ydHJhbikKKyAKKyAjIGV4dHJhIExEIEZsYWdzIHdoaWNoIGFyZSByZXF1aXJlZCBmb3IgdGFyZ2V0cworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI2LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNi1saWJnY2Mtc2psai1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGVmYWI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNi1saWJnY2Mtc2psai1jaGVjay5wYXRjaApAQCAtMCwwICsxLDc0IEBACitGcm9tIDA4YzIzOTg0NDVlNmNhYzI4MjQ4OGY2NGFlNmJmMjljYmNkOGRiMjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMDo1MCArMDQwMAorU3ViamVjdDogW1BBVENIIDI2LzM1XSBsaWJnY2Mtc2psai1jaGVjaworCithY19mbl9jX3RyeV9jb21waWxlIGRvZXNudCBzZWVtIHRvIGtlZXAgdGhlIGludGVybWVkaWF0ZSBmaWxlcword2hpY2ggYXJlIG5lZWRlZCBmb3Igc2psaiB0ZXN0IHRvIHBhc3Mgc2luY2UgaXQgZ3JlcHMgaW50byB0aGUKK2dlbmVyYXRlZCBmaWxlLiBTbyB3ZSBydW4gdGhlIGNvbXBpbGVyIGNvbW1hbmQgdXNpbmcgQUNfVFJZX0NPTU1BTkQKK3doaWNoIHRoZW4gZ2VuZXJhdGVzIHRoZSBuZWVkZWQgLnMgZmlsZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYmdjYy9jb25maWd1cmUgICAgfCAgIDEwICsrKysrKy0tLS0KKyBsaWJnY2MvY29uZmlndXJlLmFjIHwgICAxMCArKysrLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmdjYy9jb25maWd1cmUgYi9saWJnY2MvY29uZmlndXJlCitpbmRleCAxNDI1ZGY2Li5kMThlM2NiIDEwMDY0NAorLS0tIGEvbGliZ2NjL2NvbmZpZ3VyZQorKysrIGIvbGliZ2NjL2NvbmZpZ3VyZQorQEAgLTQyMDgsMTcgKzQyMDgsMTkgQEAgdm9pZCBmb28gKCkKKyB9CisgCisgX0FDRU9GCistQ0ZMQUdTX2hvbGQ9JENGTEFHUworLUNGTEFHUz0iLS1zYXZlLXRlbXBzIC1mZXhjZXB0aW9ucyIKKyBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz11bmtub3duCistaWYgYWNfZm5fY190cnlfY29tcGlsZTsgdGhlbiA6CisraWYgeyBhY190cnk9JyR7Q0MtY2N9IC1mZXhjZXB0aW9ucyAtUyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LnMgMT4mNScKKysgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY190cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbgorICAgaWYgZ3JlcCBfVW53aW5kX1NqTGpfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXllcworICAgZWxpZiBncmVwIF9VbndpbmRfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPW5vCisgICBmaQorIGZpCistQ0ZMQUdTPSRDRkxBR1NfaG9sZAorIHJtIC1mIGNvbmZ0ZXN0KgorIAorIGZpCitkaWZmIC0tZ2l0IGEvbGliZ2NjL2NvbmZpZ3VyZS5hYyBiL2xpYmdjYy9jb25maWd1cmUuYWMKK2luZGV4IDhiN2FiYTUuLmM3Yzk2NDQgMTAwNjQ0CistLS0gYS9saWJnY2MvY29uZmlndXJlLmFjCisrKysgYi9saWJnY2MvY29uZmlndXJlLmFjCitAQCAtMjE2LDE2ICsyMTYsMTQgQEAgdm9pZCBmb28gKCkKKyAgIGJhcigpOworIH0KKyBdKV0pCistQ0ZMQUdTX2hvbGQ9JENGTEFHUworLUNGTEFHUz0iLS1zYXZlLXRlbXBzIC1mZXhjZXB0aW9ucyIKKyBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz11bmtub3duCistQVNfSUYoW2FjX2ZuX2NfdHJ5X2NvbXBpbGVdLAorLSAgW2lmIGdyZXAgX1Vud2luZF9TakxqX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorK2lmIEFDX1RSWV9DT01NQU5EKCR7Q0MtY2N9IC1mZXhjZXB0aW9ucyAtUyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LnMgMT4mQVNfTUVTU0FHRV9MT0dfRkQpOyB0aGVuCisrICBpZiBncmVwIF9VbndpbmRfU2pMal9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9eWVzCisgICBlbGlmIGdyZXAgX1Vud2luZF9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9bm8KKy0gIGZpXSkKKy1DRkxBR1M9JENGTEFHU19ob2xkCisrICBmaQorK2ZpCisgcm0gLWYgY29uZnRlc3QqCisgXSkKKyAKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNy1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjctY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVlOTUyMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjctY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSBhMGY5YmQwOWM4MTZhZDI5ZWNmN2MyOWQ2YzI3ZjdkZjk3NzEwMzY0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjI6MDAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNy8zNV0gY3BwOiBob25vciBzeXNyb290LgorCitDdXJyZW50bHksIGlmIHRoZSBnY2MgdG9vbGNoYWluIGlzIHJlbG9jYXRlZCBhbmQgaW5zdGFsbGVkIGZyb20gc3N0YXRlLCB0aGVuIHlvdSB0cnkgYW5kIGNvbXBpbGUKK3ByZXByb2Nlc3NlZCBzb3VyY2UgKC5pIG9yIC5paSBmaWxlcyksIHRoZSBjb21waWxlciB3aWxsIHRyeSBhbmQgYWNjZXNzIHRoZSBidWlsdGluIHN5c3Jvb3QgbG9jYXRpb24KK3JhdGhlciB0aGFuIHRoZSAtLXN5c3Jvb3Qgb3B0aW9uIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZGxpbmUuIElmIGFjY2VzcyB0byB0aGF0IGRpcmVjdG9yeSBpcworcGVybWlzc2lvbiBkZW5pZWQgKHVucmVhZGFibGUpLCBnY2Mgd2lsbCBlcnJvci4KKworVGhpcyBoYXBwZW5zIHdoZW4gY2NhY2hlIGlzIGluIHVzZSBkdWUgdG8gdGhlIGZhY3QgaXQgdXNlcyBwcmVwcm9jZXNzZWQgc291cmNlIGZpbGVzLgorCitUaGUgZml4IGJlbG93IGFkZHMgJUkgdG8gdGhlIGNwcC1vdXRwdXQgc3BlYyBtYWNybyBzbyB0aGUgZGVmYXVsdCBzdWJzdGl0dXRpb25zIGZvciAtaXByZWZpeCwKKy1pc3lzdGVtLCAtaXN5c3Jvb3QgaGFwcGVuIGFuZCB0aGUgY29ycmVjdCBzeXNyb290IGlzIHVzZWQuCisKK1tZT0NUTyAjMjA3NF0KKworUlAgMjAxMi8wNC8xMworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jcC9sYW5nLXNwZWNzLmggfCAgICAyICstCisgZ2NjL2djYy5jICAgICAgICAgICB8ICAgIDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jcC9sYW5nLXNwZWNzLmggYi9nY2MvY3AvbGFuZy1zcGVjcy5oCitpbmRleCBhMDAxYzNlLi4xYWFlMWU0IDEwMDY0NAorLS0tIGEvZ2NjL2NwL2xhbmctc3BlY3MuaAorKysrIGIvZ2NjL2NwL2xhbmctc3BlY3MuaAorQEAgLTYzLDUgKzYzLDUgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAgIHsiLmlpIiwgIkBjKystY3BwLW91dHB1dCIsIDAsIDAsIDB9LAorICAgeyJAYysrLWNwcC1vdXRwdXQiLAorICAgICIleyFNOiV7IU1NOiV7IUU6XAorLSAgICBjYzFwbHVzIC1mcHJlcHJvY2Vzc2VkICVpICUoY2MxX29wdGlvbnMpICUyXAorKyAgICBjYzFwbHVzIC1mcHJlcHJvY2Vzc2VkICVpICVJICUoY2MxX29wdGlvbnMpICUyXAorICAgICAleyFmc3ludGF4LW9ubHk6JShpbnZva2VfYXMpfX19fSIsIDAsIDAsIDB9LAorZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggNTEwNjJhYS4uY2Y2Yjk5ZSAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtMTA0Miw3ICsxMDQyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb21waWxlciBkZWZhdWx0X2NvbXBpbGVyc1tdID0KKyAgICAgICAgICAgICAgICAgICAgICVXe28qOi0tb3V0cHV0LXBjaD0lKn19JVZ9fX19fX0iLCAwLCAwLCAwfSwKKyAgIHsiLmkiLCAiQGNwcC1vdXRwdXQiLCAwLCAwLCAwfSwKKyAgIHsiQGNwcC1vdXRwdXQiLAorLSAgICIleyFNOiV7IU1NOiV7IUU6Y2MxIC1mcHJlcHJvY2Vzc2VkICVpICUoY2MxX29wdGlvbnMpICV7IWZzeW50YXgtb25seTolKGludm9rZV9hcyl9fX19IiwgMCwgMCwgMH0sCisrICAgIiV7IU06JXshTU06JXshRTpjYzEgLWZwcmVwcm9jZXNzZWQgJWkgJUkgJShjYzFfb3B0aW9ucykgJXshZnN5bnRheC1vbmx5OiUoaW52b2tlX2FzKX19fX0iLCAwLCAwLCAwfSwKKyAgIHsiLnMiLCAiQGFzc2VtYmxlciIsIDAsIDAsIDB9LAorICAgeyJAYXNzZW1ibGVyIiwKKyAgICAiJXshTToleyFNTToleyFFOiV7IVM6YXMgJShhc21fZGVidWcpICUoYXNtX29wdGlvbnMpICVpICVBIH19fX0iLCAwLCAwLCAwfSwKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyOC1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyOC1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2Mzg3MjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI4LU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSAzMDFlMThkNDcxMWRiNTkyNWU3NjdmYWQwOGRmZmE5Y2ZlMGEyZjFmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjM6MDggKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyOC8zNV0gTUlQUzY0OiBEZWZhdWx0IHRvIE42NCBBQkkKKworTUlQUzY0IGRlZmF1bHRzIHRvIG4zMiBBQkksIHRoaXMgcGF0Y2ggbWFrZXMgaXQKK3NvIHRoYXQgaXQgZGVmYXVsdHMgdG8gTjY0IEFCSQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIGNvbmZpZyBzcGVjaWZpY10KKy0tLQorIGdjYy9jb25maWcuZ2NjIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy5nY2MgYi9nY2MvY29uZmlnLmdjYworaW5kZXggMWEwYmU1MC4uOTg5YzJmYiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcuZ2NjCisrKysgYi9nY2MvY29uZmlnLmdjYworQEAgLTE3OTcsNyArMTc5Nyw3IEBAIG1pcHMqLW10aS1saW51eCopCisgbWlwczY0Ki0qLWxpbnV4KiB8IG1pcHNpc2E2NCotKi1saW51eCopCisgCXRtX2ZpbGU9ImRieGVsZi5oIGVsZm9zLmggZ251LXVzZXIuaCBsaW51eC5oIGdsaWJjLXN0ZGludC5oICR7dG1fZmlsZX0gbWlwcy9nbnUtdXNlci5oIG1pcHMvZ251LXVzZXI2NC5oIG1pcHMvbGludXg2NC5oIG1pcHMvbGludXgtY29tbW9uLmgiCisgCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gbWlwcy90LWxpbnV4NjQiCistCXRtX2RlZmluZXM9IiR7dG1fZGVmaW5lc30gTUlQU19BQklfREVGQVVMVD1BQklfTjMyIgorKwl0bV9kZWZpbmVzPSIke3RtX2RlZmluZXN9IE1JUFNfQUJJX0RFRkFVTFQ9QUJJXzY0IgorIAljYXNlICR7dGFyZ2V0fSBpbgorIAkJbWlwczY0ZWwtc3QtbGludXgtZ251KQorIAkJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gbWlwcy9zdC5oIgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI5LURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI5LURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY5ZDI5MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjktRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaApAQCAtMCwwICsxLDIyOCBAQAorRnJvbSAyOWQxMjM0NGZiNjgyYTA1M2RlNTNlYjA4Yjk1NzA0Y2YzYjY3YWYyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjQ6NTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyOS8zNV0gRGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIGFuZCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIKKyByZWxhdGl2ZSB0byBTWVNURU1MSUJTX0RJUgorCitUaGlzIHBhdGNoIGRlZmluZXMgR0xJQkNfRFlOQU1JQ19MSU5LRVIgYW5kIFVDTElCQ19EWU5BTUlDX0xJTktFUgorcmVsYXRpdmUgdG8gU1lTVEVNTElCU19ESVIgd2hpY2ggY2FuIGJlIHNldCBpbiBnZW5lcmF0ZWQgaGVhZGVycworVGhpcyBicmVha3MgdGhlIGFzc3VtcHRpb24gb2YgaGFyZGNvZGVkIG11bHRpbGliIGluIGdjYworQ2hhbmdlIGlzIG9ubHkgZm9yIHRoZSBzdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlcyBpbiBPRSBpbmNsdWRpbmcKK1NILCBzcGFyYywgYWxwaGEgZm9yIHBvc3NpYmxlIGZ1dHVyZSBzdXBwb3J0IChpZiBhbnkpCisKK1JlbW92ZXMgdGhlIGRvX2hlYWRlcmZpeCB0YXNrIGluIG1ldGFkYXRhCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgY29uZmlndXJhdGlvbl0KKy0tLQorIGdjYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmggfCAgICA0ICsrLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggIHwgICAgNCArKy0tCisgZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmggICB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL2kzODYvbGludXguaCAgICAgIHwgICAgMiArLQorIGdjYy9jb25maWcvaTM4Ni9saW51eDY0LmggICAgfCAgICA2ICsrKy0tLQorIGdjYy9jb25maWcvbWlwcy9saW51eC5oICAgICAgfCAgICAyICstCisgZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaCAgICB8ICAgIDggKysrKy0tLS0KKyBnY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmggIHwgICAgOCArKysrLS0tLQorIGdjYy9jb25maWcvc2gvbGludXguaCAgICAgICAgfCAgICAyICstCisgZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oICAgICB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaCAgIHwgICAgNCArKy0tCisgMTEgZmlsZXMgY2hhbmdlZCwgMjIgaW5zZXJ0aW9ucygrKSwgMjIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKKysrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAorQEAgLTIzLDggKzIzLDggQEAKKyAjZGVmaW5lIEVYVFJBX1NQRUNTIFwKKyB7ICJlbGZfZHluYW1pY19saW5rZXIiLCBFTEZfRFlOQU1JQ19MSU5LRVIgfSwKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSCSIvbGliL2xkLWxpbnV4LnNvLjIiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUglTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorICNpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19VQ0xJQkMKKyAjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVKSAiJXttZ2xpYmM6IiBHICI7OiIgVSAifSIKKyAjZWxpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19HTElCQworSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKKysrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCitAQCAtNjgsOCArNjgsOCBAQAorICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgYW5kIFRBUkdFVF9ERUZBVUxUX0ZMT0FUX0FCSS4gICovCisgCisgI3VuZGVmICBHTElCQ19EWU5BTUlDX0xJTktFUgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVCAiL2xpYi9sZC1saW51eC5zby4zIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfSEFSRF9GTE9BVCAiL2xpYi9sZC1saW51eC1hcm1oZi5zby4zIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVCBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMyIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX0hBUkRfRkxPQVQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LWFybWhmLnNvLjMiCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9ERUZBVUxUIEdMSUJDX0RZTkFNSUNfTElOS0VSX1NPRlRfRkxPQVQKKyAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFwKK0luZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAorQEAgLTU3LDcgKzU3LDcgQEAKKyAKKyAjZGVmaW5lIExJQkdDQ19TUEVDICIle21mbG9hdC1hYmk9c29mdCo6LWxmbG9hdH0gLWxnY2MiCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI2RlZmluZSBMSU5VWF9UQVJHRVRfTElOS19TUEVDICAiJXtoKn0gXAorICAgICV7c3RhdGljOi1Cc3RhdGljfSBcCitJbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvaTM4Ni9saW51eC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKKysrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKK0BAIC0yMCw0ICsyMCw0IEBACisgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OICJlbGZfaTM4NiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKK0luZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKKysrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAorQEAgLTI3LDYgKzI3LDYgQEAKKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9ONjQgImVsZl94ODZfNjQiCisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTlgzMiAiZWxmMzJfeDg2XzY0IgorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC1saW51eC5zby4yIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYjY0L2xkLWxpbnV4LXg4Ni02NC5zby4yIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgIi9saWJ4MzIvbGQtbGludXgteDMyLnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQtbGludXgteDg2LTY0LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUlgzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgteDMyLnNvLjIiCitJbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvbWlwcy9saW51eC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKKysrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKK0BAIC0xOCw4ICsxOCw4IEBACisgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFwKKy0gICIle21uYW49MjAwODovbGliL2xkLWxpbnV4LW1pcHNuOC5zby4xOzovbGliL2xkLnNvLjF9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LW1pcHNuOC5zby4xOzoiIFNZU1RFTUxJQlNfRElSICJsZC5zby4xfSIKKyAKKyAjdW5kZWYgVUNMSUJDX0RZTkFNSUNfTElOS0VSCisgI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIvbGQtdUNsaWJjLW1pcHNuOC5zby4wOzovbGliL2xkLXVDbGliYy5zby4wfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMtbWlwc244LnNvLjA7OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wfSIKK0luZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvbWlwcy9saW51eDY0LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKKysrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAorQEAgLTIzLDIwICsyMywyMCBAQAorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT05OMzIgImVsZjMyJXtFQjpifSV7RUw6bH10c21pcG4zMiIKKyAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIvbGQtbGludXgtbWlwc244LnNvLjE7Oi9saWIvbGQuc28uMX0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBcCistICAiJXttbmFuPTIwMDg6L2xpYjY0L2xkLWxpbnV4LW1pcHNuOC5zby4xOzovbGliNjQvbGQuc28uMX0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIzMi9sZC1saW51eC1taXBzbjguc28uMTs6L2xpYjMyL2xkLnNvLjF9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LW1pcHNuOC5zby4xOzoiIFNZU1RFTUxJQlNfRElSICJsZC5zby4xfSIKKyAKKyAjdW5kZWYgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIKKyAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyIFwKKy0gICIle21uYW49MjAwODovbGliL2xkLXVDbGliYy1taXBzbjguc28uMDs6L2xpYi9sZC11Q2xpYmMuc28uMH0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLW1pcHNuOC5zby4wOzoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMH0iCisgI3VuZGVmIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0CisgI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBcCistICAiJXttbmFuPTIwMDg6L2xpYi9sZDY0LXVDbGliYy1taXBzbjguc28uMDs6L2xpYi9sZDY0LXVDbGliYy5zby4wfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy1taXBzbjguc28uMDs6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMH0iCisgI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIzMi9sZC11Q2xpYmMtbWlwc244LnNvLjA7Oi9saWIzMi9sZC11Q2xpYmMuc28uMH0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLW1pcHNuOC5zby4wOzoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMH0iCisgCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVJOMzIgIi9zeXN0ZW0vYmluL2xpbmtlcjMyIgorICNkZWZpbmUgR05VX1VTRVJfRFlOQU1JQ19MSU5LRVJOMzIgXAorSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKKysrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCitAQCAtMzY3LDE0ICszNjcsMTQgQEAKKyAjdW5kZWYJTElOS19PU19ERUZBVUxUX1NQRUMKKyAjZGVmaW5lIExJTktfT1NfREVGQVVMVF9TUEVDICIlKGxpbmtfb3NfbGludXgpIgorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC5zby4xIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQuc28uMSIKKyAjaWZkZWYgTElOVVg2NF9ERUZBVUxUX0FCSV9FTEZ2MgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYxOi9saWI2NC9sZDY0LnNvLjE7Oi9saWI2NC9sZDY0LnNvLjJ9IgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYxOiIgU1lTVEVNTElCU19ESVIgImxkNjQuc28uMTs6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4yfSIKKyAjZWxzZQorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYyOi9saWI2NC9sZDY0LnNvLjI7Oi9saWI2NC9sZDY0LnNvLjF9IgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYyOiIgU1lTVEVNTElCU19ESVIgImxkNjQuc28uMjs6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4xfSIKKyAjZW5kaWYKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLXVDbGliYy5zby4wIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWIvbGQ2NC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy5zby4wIgorICNpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19VQ0xJQkMKKyAjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVKSAiJXttZ2xpYmM6IiBHICI7OiIgVSAifSIKKyAjZWxpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19HTElCQworSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL3NoL2xpbnV4LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL3NoL2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKKysrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9zaC9saW51eC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCitAQCAtNDMsNyArNDMsNyBAQAorIAorICNkZWZpbmUgVEFSR0VUX0FTTV9GSUxFX0VORCBmaWxlX2VuZF9pbmRpY2F0ZV9leGVjX3N0YWNrCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI3VuZGVmIFNVQlRBUkdFVF9MSU5LX0VNVUxfU1VGRklYCisgI2RlZmluZSBTVUJUQVJHRVRfTElOS19FTVVMX1NVRkZJWCAiX2xpbnV4IgorSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKKysrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCitAQCAtODMsNyArODMsNyBAQAorICAgIFdoZW4gdGhlIC1zaGFyZWQgbGluayBvcHRpb24gaXMgdXNlZCBhIGZpbmFsIGxpbmsgaXMgbm90IGJlaW5nCisgICAgZG9uZS4gICovCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI3VuZGVmICBMSU5LX1NQRUMKKyAjZGVmaW5lIExJTktfU1BFQyAiLW0gZWxmMzJfc3BhcmMgJXtzaGFyZWQ6LXNoYXJlZH0gXAorSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA5MTA2NTM1ICswMDAwCisrKysgZ2NjLTQuOS4wL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCitAQCAtOTIsOCArOTIsOCBAQAorICAgIFdoZW4gdGhlIC1zaGFyZWQgbGluayBvcHRpb24gaXMgdXNlZCBhIGZpbmFsIGxpbmsgaXMgbm90IGJlaW5nCisgICAgZG9uZS4gICovCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLWxpbnV4LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliNjQvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICNpZmRlZiBTUEFSQ19CSV9BUkNICisgCitJbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvbGludXguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKK0BAIC03MywxMCArNzMsMTAgQEAKKyAgICBHTElCQ19EWU5BTUlDX0xJTktFUiBtdXN0IGJlIGRlZmluZWQgZm9yIGVhY2ggdGFyZ2V0IHVzaW5nIHRoZW0sIG9yCisgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBhbmQgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBmb3IgdGFyZ2V0cworICAgIHN1cHBvcnRpbmcgYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBjb21waWxhdGlvbi4gICovCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliL2xkNjQtdUNsaWJjLnNvLjAiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgIi9saWIvbGR4MzItdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgU1lTVEVNTElCU19ESVIgImxkeDMyLXVDbGliYy5zby4wIgorICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSICIvc3lzdGVtL2Jpbi9saW5rZXIiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIzMiAiL3N5c3RlbS9iaW4vbGlua2VyIgorICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSNjQgIi9zeXN0ZW0vYmluL2xpbmtlcjY0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMwLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2VhZmY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSBjMTgxNmMxNjAxNTZmOTljMzRlNmEwYTAzMTFiYjAyMTkzMjY4MDRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjY6MzcgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAzMC8zNV0gZ2NjOiBGaXggYXJndW1lbnQgbGlzdCB0b28gbG9uZyBlcnJvci4KKworVGhlcmUgd291bGQgYmUgYW4gIkFyZ3VtZW50IGxpc3QgdG9vIGxvbmciIGVycm9yIHdoZW4gdGhlCitidWlsZCBkaXJlY3RvcnkgaXMgbG9uZ2VyIHRoYW4gMjAwLCB0aGlzIGlzIGNhdXNlZCBieToKKworaGVhZGVycz1gZWNobyAkKFBMVUdJTl9IRUFERVJTKSB8IHRyICcgJyAnXDAxMicgfCBzb3J0IC11YAorCitUaGUgUExVR0lOX0hFQURFUlMgaXMgdG9vIGxvbmcgYmVmb3JlIHNvcnQsIHNvIHRoZSAiZWNobyIgY2FuJ3QgaGFuZGxlCitpdCwgdXNlIHRoZSAkKHNvcnQgbGlzdCkgb2YgR05VIG1ha2Ugd2hpY2ggY2FuIGhhbmRsZSB0aGUgdG9vIGxvbmcgbGlzdAord291bGQgZml4IHRoZSBwcm9ibGVtLCB0aGUgaGVhZGVyIHdvdWxkIGJlIHNob3J0IGVub3VnaCBhZnRlciBzb3J0ZWQuCitUaGUgInRyICcgJyAnXDAxMiciIHdhcyB1c2VkIGZvciB0cmFuc2xhdGluZyB0aGUgc3BhY2UgdG8gIlxuIiwgdGhlCiskKHNvcnQgbGlzdCkgZG9lc24ndCBuZWVkIHRoaXMuCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvTWFrZWZpbGUuaW4gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KK2luZGV4IDIzMjA0OTcuLjg1NjJhNjIgMTAwNjQ0CistLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrKyBiL2djYy9NYWtlZmlsZS5pbgorQEAgLTQ2MjcsNyArNDYyNyw3IEBAIGluc3RhbGwtcGx1Z2luOiBpbnN0YWxsZGlycyBsYW5nLmluc3RhbGwtcGx1Z2luIHMtaGVhZGVyLXZhcnMgaW5zdGFsbC1nZW5ndHlwZQorICMgV2Uga2VlcCB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgZmlsZXMgaW4gY29uZmlnIG9yIGMtZmFtaWx5IGFuZCAuZGVmCisgIyBmaWxlcy4gQWxsIG90aGVyIGZpbGVzIGFyZSBmbGF0dGVuZWQgdG8gYSBzaW5nbGUgZGlyZWN0b3J5LgorIAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKHBsdWdpbl9pbmNsdWRlZGlyKQorLQloZWFkZXJzPWBlY2hvICQoUExVR0lOX0hFQURFUlMpIHwgdHIgJyAnICdcMDEyJyB8IHNvcnQgLXVgOyBcCisrCWhlYWRlcnM9IiQoc29ydCAkKFBMVUdJTl9IRUFERVJTKSkiOyBcCisgCXNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2A7IFwKKyAJZm9yIGZpbGUgaW4gJCRoZWFkZXJzOyBkbyBcCisgCSAgaWYgWyAtZiAkJGZpbGUgXSA7IHRoZW4gXAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMxLURpc2FibGUtc2R0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMS1EaXNhYmxlLXNkdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzFkNWUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMS1EaXNhYmxlLXNkdC5wYXRjaApAQCAtMCwwICsxLDExMyBAQAorRnJvbSBiODUyNjViYzk0ZWMxYmVhZjFkM2I2OTdjMDNkYjYyOTkxNTUzNDY3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6Mjg6MTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAzMS8zNV0gRGlzYWJsZSBzZHQuCisKK1dlIGRvbid0IGxpc3QgZHRyYWNlIGluIERFUEVORFMgc28gd2Ugc2hvdWxkbid0IGJlIGRlcGVuZGluZyBvbiB0aGlzIGhlYWRlci4KK0l0IG1heSBvciBtYXkgbm90IGV4aXN0IGZyb20gcHJlaXZvdXMgYnVpbGRzIHRob3VnaC4gVG8gYmUgZGV0ZXJtaW5zdGljLCBkaXNhYmxlCitzZHQuaCB1c2FnZSBhbHdheXMuIFRoaXMgYXZvaWRzIGJ1aWxkIGZhaWx1cmVzIGlmIHRoZSBoZWFkZXIgaXMgcmVtb3ZlZCBhZnRlciBjb25maWd1cmUKK2J1dCBiZWZvcmUgbGliZ2NjIGlzIGNvbXBpbGVkIGZvciBleGFtcGxlLgorCitSUCAyMDEyLzgvNworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitEaXNhYmxlIHNkdCBmb3IgbGlic3RkYysrLXYzLgorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtoYWNrXQorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICAgICAgICAgICB8IDEyICsrKysrKy0tLS0tLQorIGdjYy9jb25maWd1cmUuYWMgICAgICAgICAgfCAxOCArKysrKysrKystLS0tLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlndXJlICAgIHwgIDYgKysrLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYyB8ICAyICstCisgNCBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCAzYzU1MGE2Li4wMWM3NjI2IDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTI2ODEyLDEyICsyNjgxMiwxMiBAQCBmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5IiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkuLi4gIiA+JjY7IH0KKyBoYXZlX3N5c19zZHRfaD1ubworLWlmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgorLSAgaGF2ZV9zeXNfc2R0X2g9eWVzCistCistJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCistCistZmkKKysjaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCisrIyAgaGF2ZV9zeXNfc2R0X2g9eWVzCisrIworKyMkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKysjCisrI2ZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXZlX3N5c19zZHRfaCIgPiY1CisgJGFzX2VjaG8gIiRoYXZlX3N5c19zZHRfaCIgPiY2OyB9CisgCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IDM2MDFhYjYuLjA2ZTUwMWYgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtNDc3OSwxNSArNDc3OSwxNSBAQCBpZiB0ZXN0IHgkZ2NjX2N2X2xpYmNfcHJvdmlkZXNfc3NwID0geHllczsgdGhlbgorIGZpCisgCisgIyBUZXN0IGZvciA8c3lzL3NkdC5oPiBvbiB0aGUgdGFyZ2V0LgorLUdDQ19UQVJHRVRfVEVNUExBVEUoW0hBVkVfU1lTX1NEVF9IXSkKKy1BQ19NU0dfQ0hFQ0tJTkcoc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5KQorLWhhdmVfc3lzX3NkdF9oPW5vCistaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCistICBoYXZlX3N5c19zZHRfaD15ZXMKKy0gIEFDX0RFRklORShIQVZFX1NZU19TRFRfSCwgMSwKKy0gICAgICAgICAgICBbRGVmaW5lIGlmIHlvdXIgdGFyZ2V0IEMgbGlicmFyeSBwcm92aWRlcyBzeXMvc2R0LmhdKQorLWZpCistQUNfTVNHX1JFU1VMVCgkaGF2ZV9zeXNfc2R0X2gpCisrI0dDQ19UQVJHRVRfVEVNUExBVEUoW0hBVkVfU1lTX1NEVF9IXSkKKysjQUNfTVNHX0NIRUNLSU5HKHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSkKKysjaGF2ZV9zeXNfc2R0X2g9bm8KKysjaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCisrIyAgaGF2ZV9zeXNfc2R0X2g9eWVzCisrIyAgQUNfREVGSU5FKEhBVkVfU1lTX1NEVF9ILCAxLAorKyMgICAgICAgICAgICBbRGVmaW5lIGlmIHlvdXIgdGFyZ2V0IEMgbGlicmFyeSBwcm92aWRlcyBzeXMvc2R0LmhdKQorKyNmaQorKyNBQ19NU0dfUkVTVUxUKCRoYXZlX3N5c19zZHRfaCkKKyAKKyAjIENoZWNrIGlmIFRGbW9kZSBsb25nIGRvdWJsZSBzaG91bGQgYmUgdXNlZCBieSBkZWZhdWx0IG9yIG5vdC4KKyAjIFNvbWUgZ2xpYmMgdGFyZ2V0cyB1c2VkIERGbW9kZSBsb25nIGRvdWJsZSwgYnV0IHdpdGggZ2xpYmMgMi40CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK2luZGV4IDQ5NTNjOWYuLjUzYTExNDUgMTAwNzU1CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitAQCAtMjA1NzgsMTEgKzIwNTc4LDExIEBAIGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKyBhY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworIGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKyAKKy0gIGlmIHRlc3QgJGdsaWJjeHhfY3Zfc3lzX3NkdF9oID0geWVzOyB0aGVuCisrIyAgaWYgdGVzdCAkZ2xpYmN4eF9jdl9zeXNfc2R0X2ggPSB5ZXM7IHRoZW4KKyAKKy0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKysjJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCisgCistICBmaQorKyMgIGZpCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsaWJjeHhfY3Zfc3lzX3NkdF9oIiA+JjUKKyAkYXNfZWNobyAiJGdsaWJjeHhfY3Zfc3lzX3NkdF9oIiA+JjY7IH0KKyAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlLmFjIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYworaW5kZXggNzNkNDMwYS4uZjIxMzVlMiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMKK0BAIC0yMTEsNyArMjExLDcgQEAgR0xJQkNYWF9DSEVDS19TQ19OUFJPQ0VTU09SU19PTkxOCisgR0xJQkNYWF9DSEVDS19TQ19OUFJPQ19PTkxOCisgR0xJQkNYWF9DSEVDS19QVEhSRUFEU19OVU1fUFJPQ0VTU09SU19OUAorIEdMSUJDWFhfQ0hFQ0tfU1lTQ1RMX0hXX05DUFUKKy1HTElCQ1hYX0NIRUNLX1NEVF9ICisrI0dMSUJDWFhfQ0hFQ0tfU0RUX0gKKyAKKyAjIENoZWNrIGZvciBhdmFpbGFibGUgaGVhZGVycy4KKyBBQ19DSEVDS19IRUFERVJTKFtlbmRpYW4uaCBleGVjaW5mby5oIGZsb2F0LmggZnAuaCBpZWVlZnAuaCBpbnR0eXBlcy5oIFwKKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMyLWxpYnRvb2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMyLWxpYnRvb2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IzZDFiNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzItbGlidG9vbC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDZjNzE1ZmNmYTI2MmFkYWRjYTgxYzY4YTFmM2Y2OWFhMzE4N2E1MDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyOToxMSArMDQwMAorU3ViamVjdDogW1BBVENIIDMyLzM1XSBsaWJ0b29sCisKK2xpYnN0ZGMrKyBmcm9tIGdjYy1ydW50aW1lIGdldHMgY3JlYXRlZCB3aXRoIC1ycGF0aD0vdXNyL2xpYi8uLi9saWIgZm9yIHFlbXV4ODYtNjQKK3doZW4gcnVubmluZyBvbiBhbSB4ODZfNjQgYnVpbGQgaG9zdC4KKworVGhpcyBwYXRjaCBzdG9wcyB0aGlzIHNwZWFkaW5nIHRvIGxpYmRpciBpbiB0aGUgbGlic3RkYysrLmxhIGZpbGUgd2l0aGluIGxpYnRvb2wuCitBcmd1YWJseSwgaXQgc2hvdWxkbid0IGJlIHBhc3NpbmcgdGhpcyBpbnRvIGxpYnRvb2wgaW4gdGhlIGZpcnN0IHBsYWNlIGJ1dAorZm9yIG5vdyB0aGlzIHJlc29sdmVzIHRoZSBuYXN0aWVzdCBwcm9ibGVtcyB0aGlzIGNhdXNlcy4KKworZnVuY19ub3JtYWxfYWJzcGF0aCB3b3VsZCByZXNvbHZlIGFuIGVtcHR5IHBhdGggdG8gYHB3ZGAgc28gd2UgbmVlZAordG8gZmlsdGVyIHRoZSB6ZXJvIGNhc2UuCisKK1JQIDIwMTIvOC8yNAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGx0bWFpbi5zaCB8ICAgIDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2x0bWFpbi5zaCBiL2x0bWFpbi5zaAoraW5kZXggYTAzNDMzZi4uNDZmNDdjMiAxMDA2NDQKKy0tLSBhL2x0bWFpbi5zaAorKysrIGIvbHRtYWluLnNoCitAQCAtNjM1OSw2ICs2MzU5LDEwIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCWZ1bmNfd2FybmluZyAiaWdub3JpbmcgbXVsdGlwbGUgXGAtcnBhdGgncyBmb3IgYSBsaWJ0b29sIGxpYnJhcnkiCisgCisgICAgICAgaW5zdGFsbF9saWJkaXI9IiQxIgorKyAgICAgIGlmIHRlc3QgLW4gIiRpbnN0YWxsX2xpYmRpciI7IHRoZW4KKysJZnVuY19ub3JtYWxfYWJzcGF0aCAiJGluc3RhbGxfbGliZGlyIgorKwlpbnN0YWxsX2xpYmRpcj0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKKysgICAgICBmaQorIAorICAgICAgIG9sZGxpYnM9CisgICAgICAgaWYgdGVzdCAteiAiJHJwYXRoIjsgdGhlbgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMzLWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMzLWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIzNmMzNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzMtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tIDk3ZTQ1OTFjMjAzMTA0MjVlN2FjYTBlNjcxMmE4ZDk0ODBlNzc0NGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTozMDozMiArMDQwMAorU3ViamVjdDogW1BBVENIIDMzLzM1XSBnY2M6IGFybXY0OiBwYXNzIGZpeC12NGJ4IHRvIGxpbmtlciB0byBzdXBwb3J0IEVBQkkuCisKK1RoZSBMSU5LX1NQRUMgZm9yIGxpbnV4IGdldHMgb3ZlcndyaXR0ZW4gYnkgbGludXgtZWFiaS5oIHdoaWNoCittZWFucyB0aGUgdmFsdWUgb2YgVEFSR0VUX0ZJWF9WNEJYX1NQRUMgZ2V0cyBsb3N0IGFuZCBhcyBhIHJlc3VsdAordGhlIG9wdGlvbiBpcyBub3QgcGFzc2VkIHRvIGxpbmtlciB3aGVuIGNob3NpbmcgbWFyY2g9YXJtdjQKK1RoaXMgcGF0Y2ggcmVkZWZpbmVzIHRoaXMgaW4gbGludXgtZWFiaS5oIGFuZCByZWluc2VydHMgaXQKK2ZvciBlYWJpIGRlZmF1bHRpbmcgdG9vbGNoYWlucy4KKworV2UgbWlnaHQgd2FudCB0byBzZW5kIGl0IHVwc3RyZWFtLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCB8ICAgIDYgKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKK0BAIC03NywxMCArNzcsMTQgQEAKKyAgICAgJXttZmxvYXQtYWJpPXNvZnQqOiIgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVCAifSBcCisgICAgICV7IW1mbG9hdC1hYmk9KjoiIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgIn0iCisgCisrLyogRm9yIGFybXY0IHdlIHBhc3MgLS1maXgtdjRieCB0byBsaW5rZXIgdG8gc3VwcG9ydCBFQUJJICovCisrI3VuZGVmIFRBUkdFVF9GSVhfVjRCWF9TUEVDCisrI2RlZmluZSBUQVJHRVRfRklYX1Y0QlhfU1BFQyAiJXttY3B1PWFybTh8bWNwdT1hcm04MTB8bWNwdT1zdHJvbmdhcm0qfG1hcmNoPWFybXY0OiAtLWZpeC12NGJ4fSIKKysKKyAvKiBBdCB0aGlzIHBvaW50LCBicGFiaS5oIHdpbGwgaGF2ZSBjbG9iYmVyZWQgTElOS19TUEVDLiAgV2Ugd2FudCB0bworICAgIHVzZSB0aGUgR05VL0xpbnV4IHZlcnNpb24sIG5vdCB0aGUgZ2VuZXJpYyBCUEFCSSB2ZXJzaW9uLiAgKi8KKyAjdW5kZWYgIExJTktfU1BFQworLSNkZWZpbmUgTElOS19TUEVDIEVBQklfTElOS19TUEVDCQkJCQlcCisrI2RlZmluZSBMSU5LX1NQRUMgVEFSR0VUX0ZJWF9WNEJYX1NQRUMgRUFCSV9MSU5LX1NQRUMJCQlcCisgICBMSU5VWF9PUl9BTkRST0lEX0xEIChMSU5VWF9UQVJHRVRfTElOS19TUEVDLAkJCQlcCisgCQkgICAgICAgTElOVVhfVEFSR0VUX0xJTktfU1BFQyAiICIgQU5EUk9JRF9MSU5LX1NQRUMpCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDM0LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDM0LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZiOWY4OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzQtVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaApAQCAtMCwwICsxLDEwMiBAQAorRnJvbSBmYzVlNGJlYWVhODU2YTJiNDg2Yzc3MGFkM2FkZGMwZjViYjMxMDBlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MzM6MDQgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAzNC8zNV0gVXNlIHRoZSBtdWx0aWxpYiBjb25maWcgZmlsZXMgZnJvbSAke0J9IGluc3RlYWQgb2YKKyB1c2luZyB0aGUgb25lcyBmcm9tICR7U30KKworVXNlIHRoZSBtdWx0aWxpYiBjb25maWcgZmlsZXMgZnJvbSAke0J9IGluc3RlYWQgb2YgdXNpbmcgdGhlIG9uZXMgZnJvbSAke1N9CitzbyB0aGF0IHRoZSBzb3VyY2UgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGdjYy1jcm9zcy1pbml0aWFsLAorZ2NjLWNyb3NzLWludGVybWVkaWF0ZSwgZ2NjLWNyb3NzLCBnY2MtcnVudGltZSwgYW5kIGFsc28gdGhlIHNkayBidWlsZC4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICB8ICAgMjIgKysrKysrKysrKysrKysrKysrLS0tLQorIGdjYy9jb25maWd1cmUuYWMgfCAgIDIyICsrKysrKysrKysrKysrKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDM2IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggOGJjMGM5OC4uM2NkMDgxNyAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0xMTUxOSwxMCArMTE1MTksMjAgQEAgZG9uZQorIHRtYWtlX2ZpbGVfPQorIGZvciBmIGluICR7dG1ha2VfZmlsZX0KKyBkbworLQlpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKKy0JdGhlbgorLQkJdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorLQlmaQorKyAgY2FzZSAkZiBpbgorKyAgICAqL3QtbGludXg2NCApCisrICAgICAgIGlmIHRlc3QgLWYgLi9jb25maWcvJGYKKysgICAgICAgdGhlbgorKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSAuL2NvbmZpZy8kZiIKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgKiApCisrICAgICAgIGlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgZXNhYworIGRvbmUKKyB0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGVffSIKKyAKK0BAIC0xMTUzMyw2ICsxMTU0MywxMCBAQCB0bV9maWxlX2xpc3Q9Im9wdGlvbnMuaCIKKyB0bV9pbmNsdWRlX2xpc3Q9Im9wdGlvbnMuaCBpbnNuLWNvbnN0YW50cy5oIgorIGZvciBmIGluICR0bV9maWxlOyBkbworICAgY2FzZSAkZiBpbgorKyAgICAqL2xpbnV4NjQuaCApCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgOzsKKyAgICAgLi8qICkKKyAgICAgICAgZj1gZWNobyAkZiB8IHNlZCAncy9eLi4vLydgCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9ICRmIgorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCA1ZTVlODRmLi40MTVhNmRmIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTE3MDAsMTAgKzE3MDAsMjAgQEAgZG9uZQorIHRtYWtlX2ZpbGVfPQorIGZvciBmIGluICR7dG1ha2VfZmlsZX0KKyBkbworLQlpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKKy0JdGhlbgorLQkJdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorLQlmaQorKyAgY2FzZSAkZiBpbgorKyAgICAqL3QtbGludXg2NCApCisrICAgICAgIGlmIHRlc3QgLWYgLi9jb25maWcvJGYKKysgICAgICAgdGhlbgorKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSAuL2NvbmZpZy8kZiIKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgKiApCisrICAgICAgIGlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgZXNhYworIGRvbmUKKyB0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGVffSIKKyAKK0BAIC0xNzE0LDYgKzE3MjQsMTAgQEAgdG1fZmlsZV9saXN0PSJvcHRpb25zLmgiCisgdG1faW5jbHVkZV9saXN0PSJvcHRpb25zLmggaW5zbi1jb25zdGFudHMuaCIKKyBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgIGNhc2UgJGYgaW4KKysgICAgKi9saW51eDY0LmggKQorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi9jb25maWcvJGYiCisrICAgICAgIDs7CisgICAgIC4vKiApCisgICAgICAgIGY9YGVjaG8gJGYgfCBzZWQgJ3MvXi4uLy8nYAorICAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAkZiIKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQwLWZpeC1nKystc3lzcm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTBhYTVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorUG9ydGlvbnMgb2YKKworaHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL2djYy1wYXRjaGVzQGdjYy5nbnUub3JnL21zZzI2MDEzLmh0bWwKKworYXJlIG5vdCB1cHN0cmVhbWVkIHlldC4gU28gbGV0cyBrZWVwIG1pc3NpbmcgcGllY2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IGdjYy00LjguMS9nY2MvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYwkyMDEzLTA3LTE1IDE1OjU1OjQ5LjQ4ODM5OTEzMiAtMDcwMAorKysrIGdjYy00LjguMS9nY2MvY29uZmlndXJlLmFjCTIwMTMtMDctMTUgMTY6MDI6MzEuNzcyNDA2Njc5IC0wNzAwCitAQCAtMTQ4LDcgKzE0OCw5IEBACisgaWYgdGVzdCAiJHt3aXRoX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGdjY19neHhfd2l0aG91dF9zeXNyb290PWBleHByICIke2djY19neHhfaW5jbHVkZV9kaXJ9IiA6ICIke3dpdGhfc3lzcm9vdH0iJ1woLipcKSdgCisgICBpZiB0ZXN0ICIke2djY19neHhfd2l0aG91dF9zeXNyb290fSI7IHRoZW4KKy0gICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGlmIHRlc3QgeCR7d2l0aF9zeXNyb290fSAhPSB4LzsgdGhlbgorKyAgICAgIGdjY19neHhfaW5jbHVkZV9kaXI9IiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IgorKyAgICBmaQorICAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyX2FkZF9zeXNyb290PTEKKyAgIGZpCisgZmkKK0luZGV4OiBnY2MtNC44LjEvZ2NjL2NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2djYy9jb25maWd1cmUJMjAxMy0wNy0xNSAxNTo1NTo0OS40NzIzOTkxMzIgLTA3MDAKKysrKyBnY2MtNC44LjEvZ2NjL2NvbmZpZ3VyZQkyMDEzLTA3LTE1IDE2OjAyOjMxLjc4MDQwNjY4MCAtMDcwMAorQEAgLTMzMjUsNyArMzMyNSw5IEBACisgaWYgdGVzdCAiJHt3aXRoX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGdjY19neHhfd2l0aG91dF9zeXNyb290PWBleHByICIke2djY19neHhfaW5jbHVkZV9kaXJ9IiA6ICIke3dpdGhfc3lzcm9vdH0iJ1woLipcKSdgCisgICBpZiB0ZXN0ICIke2djY19neHhfd2l0aG91dF9zeXNyb290fSI7IHRoZW4KKy0gICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGlmIHRlc3QgeCR7d2l0aF9zeXNyb290fSAhPSB4LzsgdGhlbgorKyAgICAgIGdjY19neHhfaW5jbHVkZV9kaXI9IiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IgorKyAgICBmaQorICAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyX2FkZF9zeXNyb290PTEKKyAgIGZpCisgZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDEtbGlidG9vbC1hdm9pZC1saWJkaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQxLWxpYnRvb2wtYXZvaWQtbGliZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZDk2MTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQxLWxpYnRvb2wtYXZvaWQtbGliZGlyLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK0F2b2lkIHVzaW5nIGxpYmRpciBmcm9tIC5sYSB3aGljaCB1c3VhbGx5IHBvaW50cyB0byBhIGhvc3QgcGF0aAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorU2lnbmVkLW9mZi1ieTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgorCitkaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCitpbmRleCBhMDM0MzNmLi4xOTAyYTkwIDEwMDY0NAorLS0tIGEvbHRtYWluLnNoCisrKysgYi9sdG1haW4uc2gKK0BAIC01NjI4LDYgKzU2MjgsOSBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgorIAkgICAgbGliZGlyPSIkYWJzX2xhZGlyIgorIAkgIGVsc2UKKysJICAgICMgSW5zdGVhZCBvZiB1c2luZyBsaWJkaXIgZnJvbSAubGEgd2hpY2ggdXN1YWxseSBwb2ludHMgdG8gYSBob3N0IHBhdGgsCisrCSAgICAjIHVzZSB0aGUgcGF0aCB0aGUgLmxhIGlzIGNvbnRhaW5lZCBpbi4KKysJICAgIGxpYmRpcj0iJGFic19sYWRpciIKKyAJICAgIGRpcj0iJGxpYmRpciIKKyAJICAgIGFic2Rpcj0iJGxpYmRpciIKKyAJICBmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0My1jcHAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQzLWNwcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWY4NjQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0My1jcHAucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorVGhlIE9FIGVudmlyb25tZW50IHNldHMgYW5kIGV4cG9ydHMgQ1BQIGFzIGJlaW5nIHRoZSB0YXJnZXQgZ2NjLiBXaGVuIGJ1aWxkaW5nIAorZ2NjLWNyb3NzLWNhbmFkaWFuIGZvciBhIG1pbmd3IHRhcmdldHRlZCBzZGssIHRoZSBmb2xsb3dpbmcgY2FuIGJlIGZvdW5kIGluCitidWlsZC54ODZfNjQtcG9reXNkay1taW5ndzMyLmk1ODYtcG9reS1saW51eC9idWlsZC14ODZfNjQtbGludXgvbGliaWJlcnR5L2NvbmZpZy5sb2c6CisKK2NvbmZpZ3VyZTozNjQxOiBjaGVja2luZyBmb3IgX0ZJTEVfT0ZGU0VUX0JJVFMgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcworY29uZmlndXJlOjM2NjY6IGdjYyAgLWMgLWlzeXN0ZW0vbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtTzIgLXBpcGUgIGNvbmZ0ZXN0LmMgPiY1Citjb25maWd1cmU6MzY2NjogJD8gPSAwCitjb25maWd1cmU6MzY5ODogcmVzdWx0OiBubworY29uZmlndXJlOjM3ODY6IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yCitjb25maWd1cmU6Mzg1NjogcmVzdWx0OiB4ODZfNjQtcG9reXNkay1taW5ndzMyLWdjYyAtRSAtLXN5c3Jvb3Q9L21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbmF0aXZlc2RrLW1pbmd3MzItcG9reXNkay1taW5ndzMyCitjb25maWd1cmU6Mzg3NjogeDg2XzY0LXBva3lzZGstbWluZ3czMi1nY2MgLUUgLS1zeXNyb290PS9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LW5hdGl2ZXNkay1taW5ndzMyLXBva3lzZGstbWluZ3czMiAgY29uZnRlc3QuYworY29uZmlndXJlOjM4NzY6ICQ/ID0gMAorCitOb3RlIHRoaXMgaXMgYSAqYnVpbGQqIHRhcmdldCAoaW4gYnVpbGQteDg2XzY0LWxpbnV4KSBzbyBpdCBzaG91bGQgYmUgdXNpbmcgCit0aGUgaG9zdCAiZ2NjIiwgbm90IHg4Nl82NC1wb2t5c2RrLW1pbmd3MzItZ2NjLiBTaW5jZSB0aGUgbWluZ3czMiBoZWFkZXJzIGFyZSAKK3ZlcnkgZGlmZmVyZW50LCB1c2luZyB0aGUgd3JvbmcgY3BwIGlzIGEgcmVhbCBwcm9ibGVtLiBJdCBpcyBsZWFraW5nIGludG8gCitjb25maWd1cmUgdGhyb3VnaCB0aGUgQ1BQIHZhcmlhYmxlLiBVbHRpbWF0ZWx5IHRoaXMgbGVhZHMgdG8gYnVpbGQgZmFpbHVyZXMgCityZWxhdGVkIHRvIG5vdCBiZWluZyBhYmxlIHRvIGluY2x1ZGUgYSBwcm9jZXNzLmggZmlsZSBmb3IgcGVtLXVuaXguYy4KKworVGhlIGZpeCBpcyB0byBlbnN1cmUgd2UgZXhwb3J0IGEgc2FuZSBDUFAgdmFsdWUgaW50byB0aGUgYnVpbGQgZW52aXJvbm1lbnQgd2hlbgordXNpbmcgYnVpbGQgdGFyZ2V0cy4gV2UgY291bGQgZGVmaW5lIGEgQ1BQX0ZPUl9CVUlMRCB2YWx1ZSB3aGljaCBtYXkgYmUgdGhlIHZlcnNpb24KK3doaWNoIG5lZWRzIHRvIGJlIHVwc3RyZWFtZWQgYnV0IGZvciBub3csIHRoaXMgZml4IGlzIGdvb2QgZW5vdWdoIHRvIGF2b2lkIHRoZSAKK3Byb2JsZW0uCisKK1JQIDIyLzA4LzIwMTMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnY2MtNC44LjEvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9NYWtlZmlsZS5pbgkyMDEzLTAzLTMwIDExOjI1OjAzLjAwMDAwMDAwMCArMDAwMAorKysrIGdjYy00LjguMS9NYWtlZmlsZS5pbgkyMDEzLTA4LTEzIDEyOjAzOjE3LjE1MTk4ODg4MiArMDAwMAorQEAgLTE0OSw2ICsxNDksNyBAQAorIAlBUj0iJChBUl9GT1JfQlVJTEQpIjsgZXhwb3J0IEFSOyBcCisgCUFTPSIkKEFTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQVM7IFwKKyAJQ0M9IiQoQ0NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDQzsgXAorKwlDUFA9IiQoQ0NfRk9SX0JVSUxEKSAtRSI7IGV4cG9ydCBDUFA7IFwKKyAJQ0ZMQUdTPSIkKENGTEFHU19GT1JfQlVJTEQpIjsgZXhwb3J0IENGTEFHUzsgXAorIAlDT05GSUdfU0hFTEw9IiQoU0hFTEwpIjsgZXhwb3J0IENPTkZJR19TSEVMTDsgXAorIAlDWFg9IiQoQ1hYX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ1hYOyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ0LWdlbmd0eXBlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDQtZ2VuZ3R5cGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzODc2MWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ0LWdlbmd0eXBlcy5wYXRjaApAQCAtMCwwICsxLDk3IEBACitnZW5ndHlwZSBpcyBnZW5lcmF0ZWQgZm9yIGJvdGggdGhlIGJ1aWxkIHN5c3RlbSBhbmQgdGhlIHRhcmdldC4gLURHRU5FUkFUT1JfRklMRQord2FzIGFkZGVkIGluIHRoZSBwYXRjaCBodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAxMi0wNy9tc2cwMDI3My5odG1sCithbmQgd2FzIGFwcGxpZWQgdG8gYm90aCB2ZXJzaW9ucyBvZiBnZW5ndHlwZS4KKworVW5mb3J0dW5hdGVseSB0aGUgcHJlc2VuY2Ugb2YgdGhpcyBmbGFnIHRyaWdnZXJzIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIChiY29uZmlnLmgpIAordG8gYmUgaW5jbHVkZWQgZm9yIHRoZSB0YXJnZXQgYnVpbGQgb2YgZ2VuZ3R5cGUuIENvbXBpbGluZyBnZW5ndHlwZSB3aXRoIHRoZSB0YXJnZXQgCitjb21waWxlciBhbmQgYmNvbmZpZy5oIGNhbiByZXN1bHQgaW4gZXJyb3JzIGlmIHRoZSBidWlsZCBhbmQgdGFyZ2V0IHN5c3RlbXMgYXJlIAorZGlzc2ltaWxhci4gQW4gZXhhbXBsZSBjYXNlIHRoaXMgZmFpbHMgaXMgY3Jvc3MgY29tcGlsaW5nIGdjYyBvbiBsaW51eCBmb3IgYSBkYXJ3aW4gCit0YXJnZXQgc3lzdGVtOgorCitJbiBmaWxlIGluY2x1ZGVkIGZyb20gL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrLXNoYXJlZC9nY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9nZW5ndHlwZS1wYXJzZS5jOjI1OjA6Cit8IC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay1zaGFyZWQvZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2MvZ2VuZ3R5cGUtcGFyc2UuYzogSW4gZnVuY3Rpb24gJ3ZvaWQgcGFyc2VfZXJyb3IoY29uc3QgY2hhciosIC4uLiknOgorfCAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmstc2hhcmVkL2djYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL3N5c3RlbS5oOjkzOjUzOiBlcnJvcjogJ2ZwdXRjX3VubG9ja2VkJyB3YXMgbm90IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUKK3wgICMgIGRlZmluZSBmcHV0YyhDLCBTdHJlYW0pIGZwdXRjX3VubG9ja2VkIChDLCBTdHJlYW0pCisKK3doaWNoIG9jY3VycyBzaW5jZSBhdXRvLWJ1aWxkLmggYW5kIGF1dG8taG9zdC5oIGhhdmUgZGlmZmVybmV0IHZhbHVlcyBvZgorSEFWRV9GUFVUQ19VTkxPQ0tFRDoKKworI2RlZmluZSBIQVZFX0ZQVVRDX1VOTE9DS0VEIDEKKy8qICN1bmRlZiBIQVZFX0ZQVVRTX1VOTE9DS0VEICovCisKK1RoZSBvYnZpb3VzIGZpeCBpcyB0byBvbmx5IGluY2x1ZGUgdGhlIGZsYWcgb24gYnVpbGQvIHRhcmdldHMgd2hpY2ggdGhpcyBwYXRjaCBkb2VzLCBob3dldmVyIAordGhpcyBhbHNvIGxlYWRzIHRvIGNvbXBpbGUgZXJyb3JzIGR1ZSB0byBjb25zdF90cmVlIGJlaW5nIHVuZGVmaW5lZCBidXQgdXNlZCBpbiBkb3VibGVfaW50LmgKKworSSBhZGRlZCBhIEdFTkVSQVRPUl9GSUxFMiBmbGFnIHRvIHdvcmthcm91bmQgdGhvc2UgaW4gdGhlIAordGFyZ2V0IGNhc2UgYW5kIGFsbG93IHRoZSBidWlsZCB0byBzdWNjZWVkLgorCitPbmx5IHRoZSBidWlsZC9nZW5ndHlwZXMgc2hvdWxkIGhhdmUgdGhlIC1ER0VORVJBVE9SX0ZJTEUgCisKK1JQIDIyLzgvMjAxMworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGdjYy00LjguMS9nY2MvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2MvTWFrZWZpbGUuaW4JMjAxMy0wOC0xOSAxMTo0MDozNi44NDQwMTQ0MjQgKzAwMDAKKysrKyBnY2MtNC44LjEvZ2NjL01ha2VmaWxlLmluCTIwMTMtMDgtMTkgMTE6NDA6MzcuNzg0MDE0NDAyICswMDAwCitAQCAtMzkwMywyNyArMzkwMywyOSBAQAorIAorIGdlbmd0eXBlLWxleC5vIGJ1aWxkL2dlbmd0eXBlLWxleC5vIDogZ2VuZ3R5cGUtbGV4LmMgZ2VuZ3R5cGUuaCAkKFNZU1RFTV9IKQorIGdlbmd0eXBlLWxleC5vOiAkKENPTkZJR19IKSAkKEJDT05GSUdfSCkKKy1DRkxBR1MtZ2VuZ3R5cGUtbGV4Lm8gKz0gLURHRU5FUkFUT1JfRklMRQorK0NGTEFHUy1idWlsZC9nZW5ndHlwZS1sZXgubyArPSAtREdFTkVSQVRPUl9GSUxFCisgYnVpbGQvZ2VuZ3R5cGUtbGV4Lm86ICQoQkNPTkZJR19IKQorIAorIGdlbmd0eXBlLXBhcnNlLm8gYnVpbGQvZ2VuZ3R5cGUtcGFyc2UubyA6IGdlbmd0eXBlLXBhcnNlLmMgZ2VuZ3R5cGUuaCBcCisgICAkKFNZU1RFTV9IKQorIGdlbmd0eXBlLXBhcnNlLm86ICQoQ09ORklHX0gpCistQ0ZMQUdTLWdlbmd0eXBlLXBhcnNlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorK0NGTEFHUy1idWlsZC9nZW5ndHlwZS1wYXJzZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKyBidWlsZC9nZW5ndHlwZS1wYXJzZS5vOiAkKEJDT05GSUdfSCkKKyAKKyBnZW5ndHlwZS1zdGF0ZS5vIGJ1aWxkL2dlbmd0eXBlLXN0YXRlLm86IGdlbmd0eXBlLXN0YXRlLmMgJChTWVNURU1fSCkgXAorICAgZ2VuZ3R5cGUuaCBlcnJvcnMuaCBkb3VibGUtaW50LmggdmVyc2lvbi5oICQoSEFTSFRBQl9IKSAkKE9CU1RBQ0tfSCkgXAorICAgJChYUkVHRVhfSCkKKyBnZW5ndHlwZS1zdGF0ZS5vOiAkKENPTkZJR19IKQorLUNGTEFHUy1nZW5ndHlwZS1zdGF0ZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKytDRkxBR1MtZ2VuZ3R5cGUtc3RhdGUubyArPSAtREdFTkVSQVRPUl9GSUxFMgorK0NGTEFHUy1idWlsZC9nZW5ndHlwZS1zdGF0ZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKyBidWlsZC9nZW5ndHlwZS1zdGF0ZS5vOiAkKEJDT05GSUdfSCkKKyAKKyBnZW5ndHlwZS5vIGJ1aWxkL2dlbmd0eXBlLm8gOiBnZW5ndHlwZS5jICQoU1lTVEVNX0gpIGdlbmd0eXBlLmggCVwKKyAgIHJ0bC5kZWYgaW5zbi1ub3Rlcy5kZWYgZXJyb3JzLmggZG91YmxlLWludC5oIHZlcnNpb24uaCAkKEhBU0hUQUJfSCkgXAorICAgJChPQlNUQUNLX0gpICQoWFJFR0VYX0gpCisgZ2VuZ3R5cGUubzogJChDT05GSUdfSCkKKy1DRkxBR1MtZ2VuZ3R5cGUubyArPSAtREdFTkVSQVRPUl9GSUxFCisrQ0ZMQUdTLWdlbmd0eXBlLm8gKz0gLURHRU5FUkFUT1JfRklMRTIKKytDRkxBR1MtYnVpbGQvZ2VuZ3R5cGUubyArPSAtREdFTkVSQVRPUl9GSUxFCisgYnVpbGQvZ2VuZ3R5cGUubzogJChCQ09ORklHX0gpCisgCisgYnVpbGQvZ2VubWRkZXBzLm86IGdlbm1kZGVwcy5jICQoQkNPTkZJR19IKSAkKFNZU1RFTV9IKSBjb3JldHlwZXMuaAlcCitAQCAtMzk4OCw3ICszOTkwLDcgQEAKKyAjIGFueSBzeXN0ZW0gaGVhZGVyIGlzIGluY2x1ZGVkLgorIGdlbmd0eXBlLWxleC5jIDogZ2VuZ3R5cGUtbGV4LmwKKyAJLSQoRkxFWCkgJChGTEVYRkxBR1MpIC1vJEAgJDwgJiYgeyBcCistCSAgZWNobyAnI2luY2x1ZGUgImJjb25maWcuaCInID4gJEAudG1wOyBcCisrCSAgZWNobyAnJyA+ICRALnRtcDsgXAorIAkgIGNhdCAkQCA+PiAkQC50bXA7IFwKKyAJICBtdiAkQC50bXAgJEA7IFwKKyAJfQorSW5kZXg6IGdjYy00LjguMS9nY2MvZG91YmxlLWludC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL2RvdWJsZS1pbnQuaAkyMDEzLTAxLTMwIDExOjA0OjMwLjAwMDAwMDAwMCArMDAwMAorKysrIGdjYy00LjguMS9nY2MvZG91YmxlLWludC5oCTIwMTMtMDgtMTkgMTE6NDE6NTEuNTY0MDEyNzE5ICswMDAwCitAQCAtNDQ4LDEwICs0NDgsMTIgQEAKKyAKKyAKKyAjaWZuZGVmIEdFTkVSQVRPUl9GSUxFCisrI2lmbmRlZiBHRU5FUkFUT1JfRklMRTIKKyAvKiBDb252ZXJzaW9uIHRvIGFuZCBmcm9tIEdNUCBpbnRlZ2VyIHJlcHJlc2VudGF0aW9ucy4gICovCisgCisgdm9pZCBtcHpfc2V0X2RvdWJsZV9pbnQgKG1wel90LCBkb3VibGVfaW50LCBib29sKTsKKyBkb3VibGVfaW50IG1wel9nZXRfZG91YmxlX2ludCAoY29uc3RfdHJlZSwgbXB6X3QsIGJvb2wpOworICNlbmRpZgorKyNlbmRpZgorIAorICNlbmRpZiAvKiBET1VCTEVfSU5UX0ggKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDYtbGliYXRvbWljLWRlcHRyYWNraW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0Ni1saWJhdG9taWMtZGVwdHJhY2tpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVhNGY0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDYtbGliYXRvbWljLWRlcHRyYWNraW5nLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK2djYyA0Ljggd29uJ3QgYnVpbGQgd2l0aCAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyBzaW5jZSB0aGUgKi5QcG8gZmlsZXMKK2Rvbid0IGdldCBjcmVhdGVkIHVubGVzcyAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIGlzIHRydWUuCisKK1RoaXMgcGF0Y2ggZW5zdXJlcyB3ZSBvbmx5IHVzZSB0aG9zZSBjb21waWxlciBvcHRpb25zIHdoZW4gaXRzIGVuYWJsZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKKyhQcm9ibGVtIHdhcyBhbHJlYWR5IHJlcG9ydGVkIHVwc3RyZWFtLCBhdHRhY2hlZCB0aGlzIHBhdGNoIHRoZXJlCitodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTU1OTMwKQorCitSUCAKKzIwMTIvMDkvMjIKKworSW5kZXg6IGdjYy00LjguMS9saWJhdG9taWMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9saWJhdG9taWMvTWFrZWZpbGUuYW0JMjAxMy0wMS0xNCAxODoxNjoyMy4wMDAwMDAwMDAgKzAwMDAKKysrKyBnY2MtNC44LjEvbGliYXRvbWljL01ha2VmaWxlLmFtCTIwMTMtMDktMjIgMTA6Mzg6MTguOTA0MDY0NzUwICswMDAwCitAQCAtMTAwLDcgKzEwMCw4IEBACisgSUZVTkNfREVGCT0gLURJRlVOQ19BTFQ9JChQQVRfUykKKyBJRlVOQ19PUFQJPSAkKHdvcmQgJChQQVRfUyksJChJRlVOQ19PUFRJT05TKSkKKyAKKy1NX0RFUFMJCT0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfVFJVRUBNX0RFUFMJCT0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfRkFMU0VATV9ERVBTCQk9IAorIE1fU0laRQkJPSAtRE49JChQQVRfTikKKyBNX0lGVU5DCQk9ICQoaWYgJChQQVRfUyksJChJRlVOQ19ERUYpICQoSUZVTkNfT1BUKSkKKyBNX0ZJTEUJCT0gJChQQVRfQkFTRSlfbi5jCitJbmRleDogZ2NjLTQuOC4xL2xpYmF0b21pYy9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2xpYmF0b21pYy9NYWtlZmlsZS5pbgkyMDEzLTA1LTMxIDA5OjA5OjI2LjAwMDAwMDAwMCArMDAwMAorKysrIGdjYy00LjguMS9saWJhdG9taWMvTWFrZWZpbGUuaW4JMjAxMy0wOS0yMiAxMDo0MDo0Mi41MjAwNTk5MTcgKzAwMDAKK0BAIC0yOTgsNyArMjk4LDggQEAKKyBQQVRfUyA9ICQod29yZCAzLCQoUEFUX1NQTElUKSkKKyBJRlVOQ19ERUYgPSAtRElGVU5DX0FMVD0kKFBBVF9TKQorIElGVU5DX09QVCA9ICQod29yZCAkKFBBVF9TKSwkKElGVU5DX09QVElPTlMpKQorLU1fREVQUyA9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCisrQEFNREVQX1RSVUVATV9ERVBTID0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfRkFMU0VATV9ERVBTID0gCisgTV9TSVpFID0gLUROPSQoUEFUX04pCisgTV9JRlVOQyA9ICQoaWYgJChQQVRfUyksJChJRlVOQ19ERUYpICQoSUZVTkNfT1BUKSkKKyBNX0ZJTEUgPSAkKFBBVF9CQVNFKV9uLmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDctcmVwb21lbWJ1Zy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDctcmVwb21lbWJ1Zy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWZkNTVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0Ny1yZXBvbWVtYnVnLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK1doZW4gY29tcGlsaW5nIGEgcHJvamVjdCB1c2luZyAtZnJlcG8sIC5ycG8gZmlsZXMgYXJlIHdyaXR0ZW4gYWxvbmdzaWRlCit0aGUgLm8gZmlsZSwgdGhlIHN5bWJvbHMgZWl0aGVyIGhhdmUgTyBvciBDIGFnYWluc3QgdGhlbS4gRHVyaW5nIGZpbmFsIGxpbmtpbmcsCit0aGUgb2JqZWN0cyBjYW4gYmUgcmVjb21waWxlZCB3aXRoIHNvbWUgb2YgdGhlIGVudHJpZXMgdHdlYWtlZC9jaG9zZW4gYnkgdGhlIAordGxpbmsuYyBjb2RlICh2aXNpYmxlIHdpdGggVExJTktfVkVSQk9TRT0zKSwgaXQgZG9lcyB0aGlzIGJ5IGNoYW5naW5nIE8gLT4gQworaW4gdGhlIC5ycG8gZmlsZXMuCisKK015IHRlc3RzIHNob3dlZCB0aGF0IGluaXRfcmVwbyAoY3AvcmVwby5jKSB3YXMgY29ycmVjdGx5IGNhbGxpbmcgCitJREVOVElGSUVSX1JFUE9fQ0hPU0VOIGFnYWluc3QgdGhlIHJpZ2h0IGlkZW50aWZlcnMgYW5kIHNldHRpbmcgdGhlCitjaG9zZW4gYml0LgorCitCeSB0aGUgdGltZSBmaW5pc2hfcmVwbygpIG9yIGVtaXRfcmVwb19wKCkgd2VyZSBjYWxsZWQsIHRoZSBwb2ludGVyIHJldHVybmVkCitieSBnZXRfaWRlbnRpZmllcigpIGZvciB0aGUgc3ltYm9sIG1hcmtlZCBkdXJpbmcgaW5pdF9yZXBvIGhhZCBjaGFuZ2VkIGFuZAordGhlIGNob3NlbiBiaXQgd2FzIG5vIGxvbmdlciBzZXQuIFRoaXMgbGVhZCB0byBsaW5raW5nIGJ1Z3MgbGlrZToKKworY29sbGVjdDogcmVsaW5raW5nCitjb2xsZWN0MjogZXJyb3I6ICdfWk5LNnN1ZG9rdTVDbGVhcklOU184U2VxdWVuY2VFRWNsRVJTMV8nIHdhcyBhc3NpZ25lZCB0byAnYm9hcmQucnBvJywgYnV0IHdhcyBub3QgZGVmaW5lZCBkdXJpbmcgcmVjb21waWxhdGlvbiwgb3IgdmljZSB2ZXJzYQorCitUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gaXMgZ2V0dGluZyBjYWxsZWQgYmVmb3JlCitmaW5pc2hfcmVwbygpIGlzIGNhbGxlZCBhbmQgZ2djX3Byb3RlY3RfaWRlbnRpZmllcnMgaXMgc2V0IHRvIGZhbHNlIAorc28gdGhlIGlkZW50aWZpZXJzIGFyZSBub3QgcHJlc2VydmVkLiBUaGV5IGFyZSByZWNyZWF0ZWQgYnV0IHRoZSAKK2Nob3NlbiBiaXRzIGdldCB3aXBlZCBvdXQgd2hpY2ggaXMgd2h5IHRoZSBwb2ludGVyIGNoYW5nZXMgYW5kIHRoZSAKK2Nob3NlbiBiaXQgaXMgbm90IHNldC4KKworVGhlIGZpeCBpcyB0byBjaGFuZ2UgZ2djX3Byb3RlY3RfaWRlbnRpZmllcnMgKmFmdGVyKiB0aGUgZmluaXNoX3JlcG8gCitjYWxscyBhcmUgbWFkZS4KKworUmVwcm9kdWN0aW9uIGlzIHRyaWNreSBzaW5jZSB5b3UgbmVlZCB0byB0cmlnZ2VyIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBhdAoranVzdCB0aGUgcmlnaHQgbW9tZW50LgorCitSUCAyMDEzLzEwLzkKKworW1lPQ1RPICM1MTMzXQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGdjYy00LjguMS9nY2MvdG9wbGV2LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2MvdG9wbGV2LmMJMjAxMy0wMy0yOCAwODoyOTo1MS4wMDAwMDAwMDAgKzAwMDAKKysrKyBnY2MtNC44LjEvZ2NjL3RvcGxldi5jCTIwMTMtMTAtMDkgMjA6Mjc6MTcuMDg5MjI4MDIzICswMDAwCitAQCAtNTUxLDExICs1NTEsMTEgQEAKKyAgIGlmIChmbGFnX3N5bnRheF9vbmx5IHx8IGZsYWdfd3BhKQorICAgICByZXR1cm47CisgCistICBnZ2NfcHJvdGVjdF9pZGVudGlmaWVycyA9IGZhbHNlOworLQorICAgLyogVGhpcyBtdXN0IGFsc28gY2FsbCBmaW5hbGl6ZV9jb21waWxhdGlvbl91bml0LiAgKi8KKyAgIGxhbmdfaG9va3MuZGVjbHMuZmluYWxfd3JpdGVfZ2xvYmFscyAoKTsKKyAKKysgIGdnY19wcm90ZWN0X2lkZW50aWZpZXJzID0gZmFsc2U7CisrCisgICBpZiAoc2Vlbl9lcnJvciAoKSkKKyAgICAgcmV0dXJuOworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0OS1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0OS1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5OGY4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ5LUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSA5ZTBlMTllYWMyNTYyZjczODU4NjAyZmUyNmUyMDQ0ZWI4YjIwYzQ3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZHJ1LUNlemFyIFNhcmRhbiA8YWxleGFuZHJ1LnNhcmRhbkBmcmVlc2NhbGUuY29tPgorRGF0ZTogV2VkLCA1IEZlYiAyMDE0IDE2OjUyOjMxICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIEVuYWJsZSBTUEUgJiBBbHRpVmVjIGdlbmVyYXRpb24gb24gcG93ZXBjKmxpbnV4IHRhcmdldAorCitXaGVuIGlzIGNvbmZpZ3VyZWQgd2l0aCAtLXRhcmdldD1wb3dlcnBjLWxpbnV4LCB0aGUgcmVzdWx0aW5nIEdDQyB3aWxsIAorbm90IGJlIGFibGUgdG8gZ2VuZXJhdGUgY29kZSBmb3IgU1BFIHRhcmdldHMgKGU1MDB2MS92MikuCitHQ0MgY29uZmlndXJlZCB3aXRoIC0tdGFyZ2V0PXBvd2VycGMtbGludXhzcGUgd2lsbCBub3QgYmUgYWJsZSB0bworZ2VuZXJhdGUgQWx0aVZlYyBpbnN0cnVjdGlvbnMgKGZvciBlNjUwMCkuCitUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25maWd1cmVkIGZpbGUgc3VjaCB0aGF0IFNQRSBvciBBbHRpVmVjIGNvZGUKK2NhbiBiZSBnZW5lcmF0ZWQgd2hlbiBnY2MgaXMgY29uZmlndXJlZCB3aXRoIC0tdGFyZ2V0PXBvd2VycGMtbGludXguCitUaGUgQUJJIGFuZCBzcGVjaWZmaWMgaW5zdHJ1Y3Rpb25zIGNhbiBiZSBzZWxlY3RlZCB0aHJvdWdoIHRoZQorIi1tYWJpPXNwZSBvciAtbWFiaT1hbHRpdmVjIiBhbmQgdGhlICItbXNwZSBvciAtbWFsdGl2ZWMiIHBhcmFtZXRlcnMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogQWxleGFuZHJ1LUNlemFyIFNhcmRhbiA8YWxleGFuZHJ1LnNhcmRhbkBmcmVlc2NhbGUuY29tPgorLS0tCisgZ2NjL2NvbmZpZy5nY2MgfCAgICA3ICsrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnLmdjYyBiL2djYy9jb25maWcuZ2NjCitpbmRleCBjYjdhOTRlLi5kMzkyYzJiIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy5nY2MKKysrKyBiL2djYy9jb25maWcuZ2NjCitAQCAtMjA2OCw3ICsyMDY4LDEyIEBAIHBvd2VycGMtKi1ydGVtcyopCisgCXRtYWtlX2ZpbGU9InJzNjAwMC90LWZwcnVsZXMgcnM2MDAwL3QtcnRlbXMgdC1ydGVtcyByczYwMDAvdC1wcGNjb21tIgorIAk7OworIHBvd2VycGMqLSotbGludXgqKQorLQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieGVsZi5oIGVsZm9zLmggZnJlZWJzZC1zcGVjLmggcnM2MDAwL3N5c3Y0LmgiCisrCWNhc2UgJHt0YXJnZXR9IGluCisrCSAgICBwb3dlcnBjKi0qLWxpbnV4KnNwZSogfCBwb3dlcnBjKi0qLWxpbnV4KmFsdGl2ZWMqKQorKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnhlbGYuaCBlbGZvcy5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIiA7OworKwkgICAgKikKKysJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBmcmVlYnNkLXNwZWMuaCByczYwMDAvc3lzdjQuaCByczYwMDAvbGludXhhbHRpdmVjLmggcnM2MDAwL2xpbnV4c3BlLmggcnM2MDAwL2U1MDAuaCIgOzsKKysJZXNhYworIAlleHRyYV9vcHRpb25zPSIke2V4dHJhX29wdGlvbnN9IHJzNjAwMC9zeXN2NC5vcHQiCisgCXRtYWtlX2ZpbGU9InJzNjAwMC90LWZwcnVsZXMgcnM2MDAwL3QtcHBjb3MgJHt0bWFrZV9maWxlfSByczYwMDAvdC1wcGNjb21tIgorIAljYXNlICR7dGFyZ2V0fSBpbgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTAtUmV2ZXJ0LVVzZS1kYnhfcmVnX251bWJlci1mb3Itc3Bhbm5pbmctcmVnaXN0ZXJzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1MC1SZXZlcnQtVXNlLWRieF9yZWdfbnVtYmVyLWZvci1zcGFubmluZy1yZWdpc3RlcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVhZDZmNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTAtUmV2ZXJ0LVVzZS1kYnhfcmVnX251bWJlci1mb3Itc3Bhbm5pbmctcmVnaXN0ZXJzLnBhdGNoCkBAIC0wLDAgKzEsODAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGcm9tIGNiOWIxYzA0MWI2MzRhNGMxMjg4OTZlM2QzZWVkNDA4MjYwOGM3OTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCAzIE1heSAyMDE0IDE5OjI1OjE3IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFJldmVydCAiMjAxMy0wNS0yMSAgQ2hyaXN0aWFuIEJydWVsIAorIDxjaHJpc3RpYW4uYnJ1ZWxAc3QuY29tPiIKKworVGhpcyByZXZlcnRzIGNvbW1pdCAzOTgzMDM2YThiNmIyNzEwYzU3Nzc3MTk0ZjIxNTA3ODE5YTczNTUzLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitDb25mbGljdHM6CisJZ2NjL0NoYW5nZUxvZworLS0tCisgZ2NjL0NoYW5nZUxvZyAgIHwgMjE5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCisgZ2NjL2R3YXJmMm91dC5jIHwgIDMzICsrKysrLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMjM0IGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2R3YXJmMm91dC5jIGIvZ2NjL2R3YXJmMm91dC5jCitpbmRleCAxMjcyMzI2Li42YWMyYjI4IDEwMDY0NAorLS0tIGEvZ2NjL2R3YXJmMm91dC5jCisrKysgYi9nY2MvZHdhcmYyb3V0LmMKK0BAIC0xMDg3MCwyNyArMTA4NzAsMjUgQEAgc3RhdGljIGR3X2xvY19kZXNjcl9yZWYKKyBtdWx0aXBsZV9yZWdfbG9jX2Rlc2NyaXB0b3IgKHJ0eCBydGwsIHJ0eCByZWdzLAorIAkJCSAgICAgZW51bSB2YXJfaW5pdF9zdGF0dXMgaW5pdGlhbGl6ZWQpCisgeworLSAgaW50IHNpemUsIGk7CisrICBpbnQgbnJlZ3MsIHNpemUsIGk7CisrICB1bnNpZ25lZCByZWc7CisgICBkd19sb2NfZGVzY3JfcmVmIGxvY19yZXN1bHQgPSBOVUxMOworIAorLSAgLyogU2ltcGxlLCBjb250aWd1b3VzIHJlZ2lzdGVycy4gICovCistICBpZiAocmVncyA9PSBOVUxMX1JUWCkKKy0gICAgeworLSAgICAgIHVuc2lnbmVkIHJlZyA9IFJFR05PIChydGwpOworLSAgICAgIGludCBucmVnczsKKy0KKysgIHJlZyA9IFJFR05PIChydGwpOworICNpZmRlZiBMRUFGX1JFR19SRU1BUAorLSAgICAgIGlmIChjcnRsLT51c2VzX29ubHlfbGVhZl9yZWdzKQorLQl7CistCSAgaW50IGxlYWZfcmVnID0gTEVBRl9SRUdfUkVNQVAgKHJlZyk7CistCSAgaWYgKGxlYWZfcmVnICE9IC0xKQorLQkgICAgcmVnID0gKHVuc2lnbmVkKSBsZWFmX3JlZzsKKy0JfQorKyAgaWYgKGNydGwtPnVzZXNfb25seV9sZWFmX3JlZ3MpCisrICAgIHsKKysgICAgICBpbnQgbGVhZl9yZWcgPSBMRUFGX1JFR19SRU1BUCAocmVnKTsKKysgICAgICBpZiAobGVhZl9yZWcgIT0gLTEpCisrCXJlZyA9ICh1bnNpZ25lZCkgbGVhZl9yZWc7CisrICAgIH0KKyAjZW5kaWYKKysgIGdjY19hc3NlcnQgKCh1bnNpZ25lZCkgREJYX1JFR0lTVEVSX05VTUJFUiAocmVnKSA9PSBkYnhfcmVnX251bWJlciAocnRsKSk7CisrICBucmVncyA9IGhhcmRfcmVnbm9fbnJlZ3NbUkVHTk8gKHJ0bCldW0dFVF9NT0RFIChydGwpXTsKKyAKKy0gICAgICBnY2NfYXNzZXJ0ICgodW5zaWduZWQpIERCWF9SRUdJU1RFUl9OVU1CRVIgKHJlZykgPT0gZGJ4X3JlZ19udW1iZXIgKHJ0bCkpOworLSAgICAgIG5yZWdzID0gaGFyZF9yZWdub19ucmVnc1tSRUdOTyAocnRsKV1bR0VUX01PREUgKHJ0bCldOworLQorKyAgLyogU2ltcGxlLCBjb250aWd1b3VzIHJlZ2lzdGVycy4gICovCisrICBpZiAocmVncyA9PSBOVUxMX1JUWCkKKysgICAgeworICAgICAgIHNpemUgPSBHRVRfTU9ERV9TSVpFIChHRVRfTU9ERSAocnRsKSkgLyBucmVnczsKKyAKKyAgICAgICBsb2NfcmVzdWx0ID0gTlVMTDsKK0BAIC0xMDkxOCw5ICsxMDkxNiwxMCBAQCBtdWx0aXBsZV9yZWdfbG9jX2Rlc2NyaXB0b3IgKHJ0eCBydGwsIHJ0eCByZWdzLAorICAgICB7CisgICAgICAgZHdfbG9jX2Rlc2NyX3JlZiB0OworIAorLSAgICAgIHQgPSBvbmVfcmVnX2xvY19kZXNjcmlwdG9yIChkYnhfcmVnX251bWJlciAoWFZFQ0VYUCAocmVncywgMCwgaSkpLAorKyAgICAgIHQgPSBvbmVfcmVnX2xvY19kZXNjcmlwdG9yIChSRUdOTyAoWFZFQ0VYUCAocmVncywgMCwgaSkpLAorIAkJCQkgIFZBUl9JTklUX1NUQVRVU19JTklUSUFMSVpFRCk7CisgICAgICAgYWRkX2xvY19kZXNjciAoJmxvY19yZXN1bHQsIHQpOworKyAgICAgIHNpemUgPSBHRVRfTU9ERV9TSVpFIChHRVRfTU9ERSAoWFZFQ0VYUCAocmVncywgMCwgMCkpKTsKKyAgICAgICBhZGRfbG9jX2Rlc2NyX29wX3BpZWNlICgmbG9jX3Jlc3VsdCwgc2l6ZSk7CisgICAgIH0KKyAKKy0tIAorMS45LjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1MS1lYWJpc3BlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1MS1lYWJpc3BlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZTM4OTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUxLWVhYmlzcGUucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1Rha2VuIGZyb20gaHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMTQtMDQvbXNnMDIwNjQuaHRtbAorCisyMDE0LTA0LTMwICBDZXNhciBQaGlsaXBwaWRpcyAgPGNlc2FyQGNvZGVzb3VyY2VyeS5jb20+CisKKwlnY2MvCisJKiBkd2FyZjJjZmkuYyAoZHdmX3JlZ25vKTogRG9uJ3QgYXNzZXJ0IHJlZyBpcyBhIHBzZXVkbworCXJlZ2lzdGVyLgorCQorCitkaWZmIC0tZ2l0IGEvZ2NjL2R3YXJmMmNmaS5jIGIvZ2NjL2R3YXJmMmNmaS5jCitpbmRleCA0MTgwODkwLi40MGVmMGUyIDEwMDY0NAorLS0tIGEvZ2NjL2R3YXJmMmNmaS5jCisrKysgYi9nY2MvZHdhcmYyY2ZpLmMKK0BAIC05MDYsNyArOTA2LDYgQEAgbm90aWNlX2VoX3Rocm93IChydHggaW5zbikKKyBzdGF0aWMgaW5saW5lIHVuc2lnbmVkCisgZHdmX3JlZ25vIChjb25zdF9ydHggcmVnKQorIHsKKy0gIGdjY19hc3NlcnQgKFJFR05PIChyZWcpIDwgRklSU1RfUFNFVURPX1JFR0lTVEVSKTsKKyAgIHJldHVybiBEV0FSRl9GUkFNRV9SRUdOVU0gKFJFR05PIChyZWcpKTsKKyB9CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUyLUFkZC10YXJnZXQtaG9vay10by1vdmVycmlkZS1EV0FSRjItZnJhbWUtcmVnaXN0ZXItc2kucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUyLUFkZC10YXJnZXQtaG9vay10by1vdmVycmlkZS1EV0FSRjItZnJhbWUtcmVnaXN0ZXItc2kucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY5NThiMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTItQWRkLXRhcmdldC1ob29rLXRvLW92ZXJyaWRlLURXQVJGMi1mcmFtZS1yZWdpc3Rlci1zaS5wYXRjaApAQCAtMCwwICsxLDEzOCBAQAorRnJvbSBkNjI2Mjk3ZTg3ZTE5MjUxYTI4NGVhMWU5MzYwZTgzMWI0ODk5OWNhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogbXBmIDxtcGZAMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0PgorRGF0ZTogVGh1LCA0IFNlcCAyMDE0IDA4OjMyOjA1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZCB0YXJnZXQgaG9vayB0byBvdmVycmlkZSBEV0FSRjIgZnJhbWUgcmVnaXN0ZXIgc2l6ZQorCitnY2MvCisKKwkqIHRhcmdldC5kZWYgKFRBUkdFVF9EV0FSRl9GUkFNRV9SRUdfTU9ERSk6IE5ldyB0YXJnZXQgaG9vay4KKwkqIHRhcmdob29rcy5jIChkZWZhdWx0X2R3YXJmX2ZyYW1lX3JlZ19tb2RlKTogTmV3IGZ1bmN0aW9uLgorCSogdGFyZ2hvb2tzLmggKGRlZmF1bHRfZHdhcmZfZnJhbWVfcmVnX21vZGUpOiBOZXcgcHJvdG90eXBlLgorCSogZG9jL3RtLnRleGkuaW4gKFRBUkdFVF9EV0FSRl9GUkFNRV9SRUdfTU9ERSk6IERvY3VtZW50LgorCSogZG9jL3RtLnRleGk6IFJlZ2VuZXJhdGUuCisJKiBkd2FyZjJjZmkuYyAoZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMpOiBBYnN0cmFjdCBtb2RlCisJc2VsZWN0aW9uIGxvZ2ljIHRvIGRlZmF1bHRfZHdhcmZfZnJhbWVfcmVnX21vZGUuCisKKworCitnaXQtc3ZuLWlkOiBzdm4rc3NoOi8vZ2NjLmdudS5vcmcvc3ZuL2djYy90cnVua0AyMTQ4OTggMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtnY2MgNS4wXQorCistLS0KKyBnY2MvQ2hhbmdlTG9nICAgICAgfCAxMCArKysrKysrKysrCisgZ2NjL2RvYy90bS50ZXhpICAgIHwgIDcgKysrKysrKworIGdjYy9kb2MvdG0udGV4aS5pbiB8ICAyICsrCisgZ2NjL2R3YXJmMmNmaS5jICAgIHwgIDQgKy0tLQorIGdjYy90YXJnZXQuZGVmICAgICB8IDExICsrKysrKysrKysrCisgZ2NjL3Rhcmdob29rcy5jICAgIHwgMTMgKysrKysrKysrKysrKworIGdjYy90YXJnaG9va3MuaCAgICB8ICAxICsKKyA3IGZpbGVzIGNoYW5nZWQsIDQ1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC45LjIvZ2NjL2RvYy90bS50ZXhpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2RvYy90bS50ZXhpCisrKysgZ2NjLTQuOS4yL2djYy9kb2MvdG0udGV4aQorQEAgLTkwMTcsNiArOTAxNywxMyBAQCByZWdpc3RlciBpbiBEd2FyZi4gIE90aGVyd2lzZSwgdGhpcyBob29rCisgSWYgbm90IGRlZmluZWQsIHRoZSBkZWZhdWx0IGlzIHRvIHJldHVybiBAY29kZXtOVUxMX1JUWH0uCisgQGVuZCBkZWZ0eXBlZm4KKyAKKytAZGVmdHlwZWZuIHtUYXJnZXQgSG9va30ge2VudW0gbWFjaGluZV9tb2RlfSBUQVJHRVRfRFdBUkZfRlJBTUVfUkVHX01PREUgKGludCBAdmFye3JlZ25vfSkKKytHaXZlbiBhIHJlZ2lzdGVyLCB0aGlzIGhvb2sgc2hvdWxkIHJldHVybiB0aGUgbW9kZSB3aGljaCB0aGUKKytjb3JyZXNwb25kaW5nIER3YXJmIGZyYW1lIHJlZ2lzdGVyIHNob3VsZCBoYXZlLiAgVGhpcyBpcyBub3JtYWxseQorK3VzZWQgdG8gcmV0dXJuIGEgc21hbGxlciBtb2RlIHRoYW4gdGhlIHJhdyBtb2RlIHRvIHByZXZlbnQgY2FsbAorK2Nsb2JiZXJlZCBwYXJ0cyBvZiBhIHJlZ2lzdGVyIGFsdGVyaW5nIHRoZSBmcmFtZSByZWdpc3RlciBzaXplCisrQGVuZCBkZWZ0eXBlZm4KKysKKyBAZGVmdHlwZWZuIHtUYXJnZXQgSG9va30gdm9pZCBUQVJHRVRfSU5JVF9EV0FSRl9SRUdfU0laRVNfRVhUUkEgKHRyZWUgQHZhcnthZGRyZXNzfSkKKyBJZiBzb21lIHJlZ2lzdGVycyBhcmUgcmVwcmVzZW50ZWQgaW4gRHdhcmYtMiB1bndpbmQgaW5mb3JtYXRpb24gaW4KKyBtdWx0aXBsZSBwaWVjZXMsIGRlZmluZSB0aGlzIGhvb2sgdG8gZmlsbCBpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUKK0luZGV4OiBnY2MtNC45LjIvZ2NjL2RvYy90bS50ZXhpLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2RvYy90bS50ZXhpLmluCisrKysgZ2NjLTQuOS4yL2djYy9kb2MvdG0udGV4aS5pbgorQEAgLTY3NDUsNiArNjc0NSw4IEBAIHRoZSB0YXJnZXQgc3VwcG9ydHMgRFdBUkYgMiBmcmFtZSB1bndpbmQKKyAKKyBAaG9vayBUQVJHRVRfRFdBUkZfUkVHSVNURVJfU1BBTgorIAorK0Bob29rIFRBUkdFVF9EV0FSRl9GUkFNRV9SRUdfTU9ERQorKworIEBob29rIFRBUkdFVF9JTklUX0RXQVJGX1JFR19TSVpFU19FWFRSQQorIAorIEBob29rIFRBUkdFVF9BU01fVFRZUEUKK0luZGV4OiBnY2MtNC45LjIvZ2NjL2R3YXJmMmNmaS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2R3YXJmMmNmaS5jCisrKysgZ2NjLTQuOS4yL2djYy9kd2FyZjJjZmkuYworQEAgLTI3MSwxMSArMjcxLDkgQEAgZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMgKHRyZQorICAgICAgIGlmIChybnVtIDwgRFdBUkZfRlJBTUVfUkVHSVNURVJTKQorIAl7CisgCSAgSE9TVF9XSURFX0lOVCBvZmZzZXQgPSBybnVtICogR0VUX01PREVfU0laRSAobW9kZSk7CistCSAgZW51bSBtYWNoaW5lX21vZGUgc2F2ZV9tb2RlID0gcmVnX3Jhd19tb2RlW2ldOworIAkgIEhPU1RfV0lERV9JTlQgc2l6ZTsKKysJICBlbnVtIG1hY2hpbmVfbW9kZSBzYXZlX21vZGUgPSB0YXJnZXRtLmR3YXJmX2ZyYW1lX3JlZ19tb2RlIChpKTsKKyAKKy0JICBpZiAoSEFSRF9SRUdOT19DQUxMX1BBUlRfQ0xPQkJFUkVEIChpLCBzYXZlX21vZGUpKQorLQkgICAgc2F2ZV9tb2RlID0gY2hvb3NlX2hhcmRfcmVnX21vZGUgKGksIDEsIHRydWUpOworIAkgIGlmIChkbnVtID09IERXQVJGX0ZSQU1FX1JFVFVSTl9DT0xVTU4pCisgCSAgICB7CisgCSAgICAgIGlmIChzYXZlX21vZGUgPT0gVk9JRG1vZGUpCitJbmRleDogZ2NjLTQuOS4yL2djYy90YXJnZXQuZGVmCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL3RhcmdldC5kZWYKKysrKyBnY2MtNC45LjIvZ2NjL3RhcmdldC5kZWYKK0BAIC0zMjE4LDYgKzMyMTgsMTcgQEAgSWYgbm90IGRlZmluZWQsIHRoZSBkZWZhdWx0IGlzIHRvIHJldHVybgorICBydHgsIChydHggcmVnKSwKKyAgaG9va19ydHhfcnR4X251bGwpCisgCisrLyogR2l2ZW4gYSByZWdpc3RlciByZXR1cm4gdGhlIG1vZGUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgRFdBUkYgZnJhbWUKKysgICByZWdpc3Rlci4gICovCisrREVGSE9PSworKyhkd2FyZl9mcmFtZV9yZWdfbW9kZSwKKysgIkdpdmVuIGEgcmVnaXN0ZXIsIHRoaXMgaG9vayBzaG91bGQgcmV0dXJuIHRoZSBtb2RlIHdoaWNoIHRoZVxuXAorK2NvcnJlc3BvbmRpbmcgRHdhcmYgZnJhbWUgcmVnaXN0ZXIgc2hvdWxkIGhhdmUuICBUaGlzIGlzIG5vcm1hbGx5XG5cCisrdXNlZCB0byByZXR1cm4gYSBzbWFsbGVyIG1vZGUgdGhhbiB0aGUgcmF3IG1vZGUgdG8gcHJldmVudCBjYWxsXG5cCisrY2xvYmJlcmVkIHBhcnRzIG9mIGEgcmVnaXN0ZXIgYWx0ZXJpbmcgdGhlIGZyYW1lIHJlZ2lzdGVyIHNpemUiLAorKyBlbnVtIG1hY2hpbmVfbW9kZSwgKGludCByZWdubyksCisrIGRlZmF1bHRfZHdhcmZfZnJhbWVfcmVnX21vZGUpCisrCisgLyogSWYgZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMgbmVlZHMgdG8gZmlsbCBpbiB0YWJsZQorICAgIGVudHJpZXMgbm90IGNvcnJlc3BvbmRpbmcgZGlyZWN0bHkgdG8gcmVnaXN0ZXJzIGJlbG93CisgICAgRklSU1RfUFNFVURPX1JFR0lTVEVSLCB0aGlzIGhvb2sgc2hvdWxkIGdlbmVyYXRlIHRoZSBuZWNlc3NhcnkKK0luZGV4OiBnY2MtNC45LjIvZ2NjL3Rhcmdob29rcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL3Rhcmdob29rcy5jCisrKysgZ2NjLTQuOS4yL2djYy90YXJnaG9va3MuYworQEAgLTE0MzgsNiArMTQzOCwxOSBAQCBkZWZhdWx0X2RlYnVnX3Vud2luZF9pbmZvICh2b2lkKQorICAgcmV0dXJuIFVJX05PTkU7CisgfQorIAorKy8qIERldGVybWluZSB0aGUgY29ycmVjdCBtb2RlIGZvciBhIER3YXJmIGZyYW1lIHJlZ2lzdGVyIHRoYXQgcmVwcmVzZW50cworKyAgIHJlZ2lzdGVyIFJFR05PLiAgKi8KKysKKytlbnVtIG1hY2hpbmVfbW9kZQorK2RlZmF1bHRfZHdhcmZfZnJhbWVfcmVnX21vZGUgKGludCByZWdubykKKyt7CisrICBlbnVtIG1hY2hpbmVfbW9kZSBzYXZlX21vZGUgPSByZWdfcmF3X21vZGVbcmVnbm9dOworKworKyAgaWYgKEhBUkRfUkVHTk9fQ0FMTF9QQVJUX0NMT0JCRVJFRCAocmVnbm8sIHNhdmVfbW9kZSkpCisrICAgIHNhdmVfbW9kZSA9IGNob29zZV9oYXJkX3JlZ19tb2RlIChyZWdubywgMSwgdHJ1ZSk7CisrICByZXR1cm4gc2F2ZV9tb2RlOworK30KKysKKyAvKiBUbyBiZSB1c2VkIGJ5IHRhcmdldHMgd2hlcmUgcmVnX3Jhd19tb2RlIGRvZXNuJ3QgcmV0dXJuIHRoZSByaWdodAorICAgIG1vZGUgZm9yIHJlZ2lzdGVycyB1c2VkIGluIGFwcGx5X2J1aWx0aW5fcmV0dXJuIGFuZCBhcHBseV9idWlsdGluX2FyZy4gICovCisgCitJbmRleDogZ2NjLTQuOS4yL2djYy90YXJnaG9va3MuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMi5vcmlnL2djYy90YXJnaG9va3MuaAorKysrIGdjYy00LjkuMi9nY2MvdGFyZ2hvb2tzLmgKK0BAIC0xOTQsNiArMTk0LDcgQEAgZXh0ZXJuIGludCBkZWZhdWx0X2xhYmVsX2FsaWduX21heF9za2lwCisgZXh0ZXJuIGludCBkZWZhdWx0X2p1bXBfYWxpZ25fbWF4X3NraXAgKHJ0eCk7CisgZXh0ZXJuIHNlY3Rpb24gKiBkZWZhdWx0X2Z1bmN0aW9uX3NlY3Rpb24odHJlZSBkZWNsLCBlbnVtIG5vZGVfZnJlcXVlbmN5IGZyZXEsCisgCQkJCQkgIGJvb2wgc3RhcnR1cCwgYm9vbCBleGl0KTsKKytleHRlcm4gZW51bSBtYWNoaW5lX21vZGUgZGVmYXVsdF9kd2FyZl9mcmFtZV9yZWdfbW9kZSAoaW50KTsKKyBleHRlcm4gZW51bSBtYWNoaW5lX21vZGUgZGVmYXVsdF9nZXRfcmVnX3Jhd19tb2RlIChpbnQpOworIAorIGV4dGVybiB2b2lkICpkZWZhdWx0X2dldF9wY2hfdmFsaWRpdHkgKHNpemVfdCAqKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTMtZ2NjLWZpeC1zZWdmYXVsdC1mcm9tLWNhbGxpbmctZnJlZS1vbi1ub24tbWFsbG9jLWQtYS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTMtZ2NjLWZpeC1zZWdmYXVsdC1mcm9tLWNhbGxpbmctZnJlZS1vbi1ub24tbWFsbG9jLWQtYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2I0NDVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1My1nY2MtZml4LXNlZ2ZhdWx0LWZyb20tY2FsbGluZy1mcmVlLW9uLW5vbi1tYWxsb2MtZC1hLnBhdGNoCkBAIC0wLDAgKzEsNjYgQEAKK0Zyb20gYTIyYTIyMmM4ZjkyOTlmNmMwN2EwMjc0Mzg4YWRlN2Q0YWI4YzI4ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAyMCBKdW4gMjAxNCAxNjo0MTowOCAtMDQwMAorU3ViamVjdDogW1BBVENIXSBnY2M6IGZpeCBzZWdmYXVsdCBmcm9tIGNhbGxpbmcgZnJlZSBvbiBub24tbWFsbG9jJ2QgYXJlYQorCitXZSBzZWUgdGhlIGZvbGxvd2luZyBvbiBhIDMyYml0IGdjYyBpbnN0YWxsZWQgb24gNjQgYml0IGhvc3Q6CisKKyAgUmVhZGluZyBzeW1ib2xzIGZyb20gLi9pNTg2LXBva3ltbGxpYjMyLWxpbnV4LWdjYy4uLmRvbmUuCisgIChnZGIpIHJ1bgorICBTdGFydGluZyBwcm9ncmFtOiB4ODYtcG9reW1sbGliMzItbGludXgvbGliMzItZ2NjLzQuOS4wLXIwL2ltYWdlL3Vzci9iaW4vaTU4Ni1wb2t5bWxsaWIzMi1saW51eC1nY2MKKworICBQcm9ncmFtIHJlY2VpdmVkIHNpZ25hbCBTSUdTRUdWLCBTZWdtZW50YXRpb24gZmF1bHQuCisgIDB4ZjdlOTU3ZTAgaW4gZnJlZSAoKSBmcm9tIC9saWIvaTM4Ni1saW51eC1nbnUvbGliYy5zby42CisgIChnZGIpIGJ0CisgICMwICAweGY3ZTk1N2UwIGluIGZyZWUgKCkgZnJvbSAvbGliL2kzODYtbGludXgtZ251L2xpYmMuc28uNgorICAjMSAgMHgwODA0YjczYyBpbiBzZXRfbXVsdGlsaWJfZGlyICgpIGF0IGdjYy00LjkuMC9nY2MvZ2NjLmM6NzgyNworICAjMiAgbWFpbiAoYXJnYz0xLCBhcmd2PTB4ZmZmZmQ1MDQpIGF0IGdjYy00LjkuMC9nY2MvZ2NjLmM6NjY4OAorICAoZ2RiKQorCitUaGUgcHJvYmxlbSBhcmlzZXMgYmVjYXVzZSB3ZSBjb25kaXRpb25hbGx5IGFzc2lnbiB0aGUgcG9pbnRlciB3ZQorZXZlbnR1YWxseSBmcmVlLCBhbmQgdGhlIGNvbmRpdGlvbmFsIG1heSBhc3NpZ24gdGhlIHBvaW50ZXIgdG8gdGhlCitub24tbWFsbG9jJ2QgaW50ZXJuYWwgc3RyaW5nICIuIiB3aGljaCBmYWlscyB3aGVuIHdlIGZyZWUgaXQgaGVyZToKKworICAgaWYgKG11bHRpbGliX2RpciA9PSBOVUxMICYmIG11bHRpbGliX29zX2RpciAhPSBOVUxMCisgICAgICAgJiYgc3RyY21wIChtdWx0aWxpYl9vc19kaXIsICIuIikgPT0gMCkKKyAgICAgeworICAgICAgIGZyZWUgKENPTlNUX0NBU1QgKGNoYXIgKiwgbXVsdGlsaWJfb3NfZGlyKSk7CisgICAgICAgLi4uCisKK0FzIHN1Z2dlc3RlZCBieSBKYWt1YiwgZW5zdXJlIHRoZSAiLiIgY2FzZSBpcyBhbHNvIG1hbGxvYydkIHZpYQoreHN0cmR1cCgpIGFuZCBoZW5jZSB0aGUgcG9pbnRlciBmb3IgdGhlICIuIiBjYXNlIGNhbiBiZSBmcmVlZC4KKworQ2M6IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+CitDYzogSmVmZiBMYXcgPGxhd0ByZWRoYXQuY29tPgorQ2M6IE1hdHRoaWFzIEtsb3NlIDxkb2tvQHVidW50dS5jb20+CitDQzogVG9iaWFzIEJ1cm51cyA8YnVybnVzQG5ldC1iLmRlPgorVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZCBbIGh0dHBzOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAxNC0wNi9tc2cwMjA2OS5odG1sIF0KK1NpZ25lZC1vZmYtYnk6IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA5YWMxOGU2MGQ4MDEuLjE2OGFjZjdlYjBjOSAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtNzc5MCwxMCArNzc5MCwxNSBAQCBzZXRfbXVsdGlsaWJfZGlyICh2b2lkKQorIAkJcTIrKzsKKyAJICAgICAgaWYgKCpxMiA9PSAnOicpCisgCQltbF9lbmQgPSBxMjsKKy0JICAgICAgbmV3X211bHRpbGliX29zX2RpciA9IFhORVdWRUMgKGNoYXIsIG1sX2VuZCAtIHEpOworLQkgICAgICBtZW1jcHkgKG5ld19tdWx0aWxpYl9vc19kaXIsIHEgKyAxLCBtbF9lbmQgLSBxIC0gMSk7CistCSAgICAgIG5ld19tdWx0aWxpYl9vc19kaXJbbWxfZW5kIC0gcSAtIDFdID0gJ1wwJzsKKy0JICAgICAgbXVsdGlsaWJfb3NfZGlyID0gKm5ld19tdWx0aWxpYl9vc19kaXIgPyBuZXdfbXVsdGlsaWJfb3NfZGlyIDogIi4iOworKwkgICAgICBpZiAobWxfZW5kIC0gcSA9PSAxKQorKwkJbXVsdGlsaWJfb3NfZGlyID0geHN0cmR1cCAoIi4iKTsKKysJICAgICAgZWxzZQorKwkJeworKwkJICBuZXdfbXVsdGlsaWJfb3NfZGlyID0gWE5FV1ZFQyAoY2hhciwgbWxfZW5kIC0gcSk7CisrCQkgIG1lbWNweSAobmV3X211bHRpbGliX29zX2RpciwgcSArIDEsIG1sX2VuZCAtIHEgLSAxKTsKKysJCSAgbmV3X211bHRpbGliX29zX2RpclttbF9lbmQgLSBxIC0gMV0gPSAnXDAnOworKwkJICBtdWx0aWxpYl9vc19kaXIgPSBuZXdfbXVsdGlsaWJfb3NfZGlyOworKwkJfQorIAorIAkgICAgICBpZiAocTIgPCBlbmQgJiYgKnEyID09ICc6JykKKyAJCXsKKy0tIAorMS45LjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1NC1nY2MtTWFrZWZpbGUuaW4tZml4LXBhcmFsbGVsLWJ1aWxkaW5nLWZhaWx1cmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU0LWdjYy1NYWtlZmlsZS5pbi1maXgtcGFyYWxsZWwtYnVpbGRpbmctZmFpbHVyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZThlZmExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1NC1nY2MtTWFrZWZpbGUuaW4tZml4LXBhcmFsbGVsLWJ1aWxkaW5nLWZhaWx1cmUucGF0Y2gKQEAgLTAsMCArMSw2MSBAQAorZ2NjL01ha2VmaWxlLmluOiBmaXggcGFyYWxsZWwgYnVpbGRpbmcgZmFpbHVyZQorCitUaGUgZ2NjLWFyLm8sIGdjYy1ubS5vLCBnY2MtcmFubGliLm8gYW5kIGVycm9ycy5vIGluY2x1ZGVkCitjb25maWcuaCB3aGljaCB3YXMgYSBnZW5lcmF0ZWQgZmlsZS4gQnV0IG5vIGV4cGxpY2l0eSBydWxlCit0byBjbGFyaWZ5IHRoZSBkZXBlbmRlbmN5LiBUaGVyZSB3YXMgcG90ZW50aWFsIGJ1aWxkaW5nCitmYWlsdXJlIHdoaWxlIHBhcmFsbGVsIG1ha2UuCisKK0ZvciBnY2MtYXIubywgZ2NjLW5tLm8gYW5kIGdjYy1yYW5saWIubywgdGhleSB3ZXJlIGNvbXBpbGVkIGZyb20gb25lIEMKK3NvdXJjZSBmaWxlIGdjYy1hci5jLCB3ZSBhZGQgdGhlbSB0byBBTExfSE9TVF9CQUNLRU5EX09CSlMsIHNvIHRoZQorJyQoQUxMX0hPU1RfT0JKUykgOiB8ICQoZ2VuZXJhdGVkX2ZpbGVzKScgcnVsZSBjb3VsZCB3b3JrIGZvciB0aGVzZQorb2JqZWN0cy4KKworRm9yIGVycm9ycy5vLCBpdCBpcyBwYXJ0IG9mIGdlbmd0eXBlLCBhbmQgdGhlIGdlbmd0eXBlIGdlbmVyYXRvciBwcm9ncmFtCitpcyBzcGVjaWFsOiBUd28gdmVyc2lvbnMgYXJlIGJ1aWx0LiBPbmUgaXMgZm9yIHRoZSBidWlsZCBtYWNoaW5lLCBhbmQgb25lCitpcyBmb3IgdGhlIGhvc3QuIFdlIHJlZmVyZWQgd2hhdCBnZW5ndHlwZS1wYXJzZS5vIGRpZCAod2hpY2ggYWxzbyBpcyBwYXJ0CitvZiBnZW5ndHlwZSkuCisKK1tHQ0MgIzYxODk5XQoraHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NjE4OTkKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2djYy1wYXRjaGVzQGdjYy5nbnUub3JnXQorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBnY2MvTWFrZWZpbGUuaW4gfCA3ICsrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KK2luZGV4IDY0NzVjYmEuLjU2ZTUwYmIgMTAwNjQ0CistLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrKyBiL2djYy9NYWtlZmlsZS5pbgorQEAgLTE0ODEsMTMgKzE0ODEsMTYgQEAgT0JKUy1saWJjb21tb24tdGFyZ2V0ID0gJChjb21tb25fb3V0X29iamVjdF9maWxlKSBwcmVmaXgubyBwYXJhbXMubyBcCisgCW9wdHMubyBvcHRzLWNvbW1vbi5vIG9wdGlvbnMubyB2ZWMubyBob29rcy5vIGNvbW1vbi9jb21tb24tdGFyZ2hvb2tzLm8gXAorIAloYXNoLXRhYmxlLm8gZmlsZS1maW5kLm8KKyAKKysjIE9iamVjdHMgY29tcGlsZWQgZnJvbSBvbmUgQyBzb3VyY2UgZmlsZSBnY2MtYXIuYworK09CSlMtZ2NjLWFyID0gZ2NjLWFyLm8gZ2NjLW5tLm8gZ2NjLXJhbmxpYi5vCisrCisgIyBUaGlzIGxpc3RzIGFsbCBob3N0IG9iamVjdHMgZm9yIHRoZSBmcm9udCBlbmRzLgorIEFMTF9IT1NUX0ZST05URU5EX09CSlMgPSAkKGZvcmVhY2ggdiwkKENPTkZJR19MQU5HVUFHRVMpLCQoJCh2KV9PQkpTKSkKKyAKKyBBTExfSE9TVF9CQUNLRU5EX09CSlMgPSAkKEdDQ19PQkpTKSAkKE9CSlMpICQoT0JKUy1saWJjb21tb24pIFwKKyAgICQoT0JKUy1saWJjb21tb24tdGFyZ2V0KSBAVFJFRUJST1dTRVJAIG1haW4ubyBjLWZhbWlseS9jcHBzcGVjLm8gXAorICAgJChDT0xMRUNUMl9PQkpTKSAkKEVYVFJBX0dDQ19PQkpTKSAkKEdDT1ZfT0JKUykgJChHQ09WX0RVTVBfT0JKUykgXAorLSAgbHRvLXdyYXBwZXIubworKyAgbHRvLXdyYXBwZXIubyAkKE9CSlMtZ2NjLWFyKQorIAorICMgVGhpcyBsaXN0cyBhbGwgaG9zdCBvYmplY3QgZmlsZXMsIHdoZXRoZXIgdGhleSBhcmUgaW5jbHVkZWQgaW4gdGhpcworICMgY29tcGlsYXRpb24gb3Igbm90LgorQEAgLTI0MzcsNiArMjQ0MCw4IEBAIGdlbmd0eXBlLXBhcnNlLm86ICQoQ09ORklHX0gpCisgQ0ZMQUdTLWJ1aWxkL2dlbmd0eXBlLXBhcnNlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorIGJ1aWxkL2dlbmd0eXBlLXBhcnNlLm86ICQoQkNPTkZJR19IKQorIAorK2Vycm9ycy5vIDogJChDT05GSUdfSCkKKysKKyBnZW5ndHlwZS1zdGF0ZS5vIGJ1aWxkL2dlbmd0eXBlLXN0YXRlLm86IGdlbmd0eXBlLXN0YXRlLmMgJChTWVNURU1fSCkgXAorICAgZ2VuZ3R5cGUuaCBlcnJvcnMuaCBkb3VibGUtaW50LmggdmVyc2lvbi5oICQoSEFTSFRBQl9IKSAkKE9CU1RBQ0tfSCkgXAorICAgJChYUkVHRVhfSCkKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU1LWR3YXJmLXJlZy1wcm9jZXNzaW5nLWhlbHBlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTUtZHdhcmYtcmVnLXByb2Nlc3NpbmctaGVscGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1N2RhYjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU1LWR3YXJmLXJlZy1wcm9jZXNzaW5nLWhlbHBlci5wYXRjaApAQCAtMCwwICsxLDE0OCBAQAorRnJvbSA0ZmQzOWYxMzI5Mzc5ZTAwZjk1ODM5NGFkZGU2YmU5NmYwY2FmMjFmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogaGFpbnF1ZSA8aGFpbnF1ZUAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQ+CitEYXRlOiBGcmksIDUgRGVjIDIwMTQgMTY6NTM6MjIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gMjAxNC0xMi0wNSAgT2xpdmllciBIYWlucXVlICA8aGFpbnF1ZUBhZGFjb3JlLmNvbT4KKworICAgICAgICAqIGR3YXJmMmNmaS5jIChpbml0X29uZV9kd2FyZl9yZWdfc2l6ZSk6IE5ldyBoZWxwZXIsIHByb2Nlc3NpbmcKKyAgICAgICAgb25lIHBhcnRpY3VsYXIgcmVnIGZvciBleHBhbmRfYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplcy4KKyAgICAgICAgKGV4cGFuZF9idWlsdGluX2luaXRfZHdhcmZfcmVnX3NpemVzKTogUmV3b3JrIHRvIHVzZSBoZWxwZXIgYW5kCisgICAgICAgIGFjY291bnQgZm9yIGR3YXJmIHJlZ2lzdGVyIHNwYW5zLgorCisKKworZ2l0LXN2bi1pZDogc3ZuK3NzaDovL2djYy5nbnUub3JnL3N2bi9nY2MvdHJ1bmtAMjE4NDI4IDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhNAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZ2NjIDUuMF0KKworLS0tCisgZ2NjL0NoYW5nZUxvZyAgIHwgIDcgKysrKysKKyBnY2MvZHdhcmYyY2ZpLmMgfCA5OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDg1IGluc2VydGlvbnMoKyksIDIwIGRlbGV0aW9ucygtKQorCitJbmRleDogZ2NjLTQuOS4yL2djYy9kd2FyZjJjZmkuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMi5vcmlnL2djYy9kd2FyZjJjZmkuYworKysrIGdjYy00LjkuMi9nY2MvZHdhcmYyY2ZpLmMKK0BAIC0yNTIsNyArMjUyLDU5IEBAIGluaXRfcmV0dXJuX2NvbHVtbl9zaXplIChlbnVtIG1hY2hpbmVfbW8KKyAJCSAgZ2VuX2ludF9tb2RlIChzaXplLCBtb2RlKSk7CisgfQorIAorLS8qIEdlbmVyYXRlIGNvZGUgdG8gaW5pdGlhbGl6ZSB0aGUgcmVnaXN0ZXIgc2l6ZSB0YWJsZS4gICovCisrLyogRGF0YXN0cnVjdHVyZSB1c2VkIGJ5IGV4cGFuZF9idWlsdGluX2luaXRfZHdhcmZfcmVnX3NpemVzIGFuZAorKyAgIGluaXRfb25lX2R3YXJmX3JlZ19zaXplIHRvIGNvbW11bmljYXRlIG9uIHdoYXQgaGFzIGJlZW4gZG9uZSBieSB0aGUKKysgICBsYXR0ZXIuICAqLworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgLyogV2hldGhlciB0aGUgZHdhcmYgcmV0dXJuIGNvbHVtbiB3YXMgaW5pdGlhbGl6ZWQuICAqLworKyAgYm9vbCB3cm90ZV9yZXR1cm5fY29sdW1uOworKworKyAgLyogRm9yIGVhY2ggaGFyZCByZWdpc3RlciBSRUdOTywgd2hldGhlciBpbml0X29uZV9kd2FyZl9yZWdfc2l6ZQorKyAgICAgd2FzIGdpdmVuIFJFR05PIHRvIHByb2Nlc3MgYWxyZWFkeS4gICovCisrICBib29sIHByb2Nlc3NlZF9yZWdubyBbRklSU1RfUFNFVURPX1JFR0lTVEVSXTsKKysKKyt9IGluaXRfb25lX2R3YXJmX3JlZ19zdGF0ZTsKKysKKysvKiBIZWxwZXIgZm9yIGV4cGFuZF9idWlsdGluX2luaXRfZHdhcmZfcmVnX3NpemVzLiAgR2VuZXJhdGUgY29kZSB0bworKyAgIGluaXRpYWxpemUgdGhlIGR3YXJmIHJlZ2lzdGVyIHNpemUgdGFibGUgZW50cnkgY29ycmVzcG9uZGluZyB0byByZWdpc3RlcgorKyAgIFJFR05PIGluIFJFR01PREUuICBUQUJMRSBpcyB0aGUgdGFibGUgYmFzZSBhZGRyZXNzLCBTTE9UTU9ERSBpcyB0aGUgbW9kZSB0bworKyAgIHVzZSBmb3IgdGhlIHNpemUgZW50cnkgdG8gaW5pdGlhbGl6ZSwgYW5kIElOSVRfU1RBVEUgaXMgdGhlIGNvbW11bmljYXRpb24KKysgICBkYXRhc3RydWN0dXJlIGNvbnZleWluZyB3aGF0IHdlJ3JlIGRvaW5nIHRvIG91ciBjYWxsZXIuICAqLworKworK3N0YXRpYworK3ZvaWQgaW5pdF9vbmVfZHdhcmZfcmVnX3NpemUgKGludCByZWdubywgbWFjaGluZV9tb2RlIHJlZ21vZGUsCisrCQkJICAgICAgcnR4IHRhYmxlLCBtYWNoaW5lX21vZGUgc2xvdG1vZGUsCisrCQkJICAgICAgaW5pdF9vbmVfZHdhcmZfcmVnX3N0YXRlICppbml0X3N0YXRlKQorK3sKKysgIGNvbnN0IHVuc2lnbmVkIGludCBkbnVtID0gRFdBUkZfRlJBTUVfUkVHTlVNIChyZWdubyk7CisrICBjb25zdCB1bnNpZ25lZCBpbnQgcm51bSA9IERXQVJGMl9GUkFNRV9SRUdfT1VUIChkbnVtLCAxKTsKKysKKysgIGNvbnN0IEhPU1RfV0lERV9JTlQgc2xvdG9mZnNldCA9IHJudW0gKiBHRVRfTU9ERV9TSVpFIChzbG90bW9kZSk7CisrICBjb25zdCBIT1NUX1dJREVfSU5UIHJlZ3NpemUgPSBHRVRfTU9ERV9TSVpFIChyZWdtb2RlKTsKKysKKysgIGluaXRfc3RhdGUtPnByb2Nlc3NlZF9yZWdub1tyZWdub10gPSB0cnVlOworKworKyAgaWYgKHJudW0gPj0gRFdBUkZfRlJBTUVfUkVHSVNURVJTKQorKyAgICByZXR1cm47CisrCisrICBpZiAoZG51bSA9PSBEV0FSRl9GUkFNRV9SRVRVUk5fQ09MVU1OKQorKyAgICB7CisrICAgICAgaWYgKHJlZ21vZGUgPT0gVk9JRG1vZGUpCisrCXJldHVybjsKKysgICAgICBpbml0X3N0YXRlLT53cm90ZV9yZXR1cm5fY29sdW1uID0gdHJ1ZTsKKysgICAgfQorKworKyAgaWYgKHNsb3RvZmZzZXQgPCAwKQorKyAgICByZXR1cm47CisrCisrICBlbWl0X21vdmVfaW5zbiAoYWRqdXN0X2FkZHJlc3MgKHRhYmxlLCBzbG90bW9kZSwgc2xvdG9mZnNldCksCisrCQkgIGdlbl9pbnRfbW9kZSAocmVnc2l6ZSwgc2xvdG1vZGUpKTsKKyt9CisrCisrLyogR2VuZXJhdGUgY29kZSB0byBpbml0aWFsaXplIHRoZSBkd2FyZiByZWdpc3RlciBzaXplIHRhYmxlIGxvY2F0ZWQKKysgICBhdCB0aGUgcHJvdmlkZWQgQUREUkVTUy4gICovCisgCisgdm9pZAorIGV4cGFuZF9idWlsdGluX2luaXRfZHdhcmZfcmVnX3NpemVzICh0cmVlIGFkZHJlc3MpCitAQCAtMjYxLDM1ICszMTMsNDAgQEAgZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMgKHRyZQorICAgZW51bSBtYWNoaW5lX21vZGUgbW9kZSA9IFRZUEVfTU9ERSAoY2hhcl90eXBlX25vZGUpOworICAgcnR4IGFkZHIgPSBleHBhbmRfbm9ybWFsIChhZGRyZXNzKTsKKyAgIHJ0eCBtZW0gPSBnZW5fcnR4X01FTSAoQkxLbW9kZSwgYWRkcik7CistICBib29sIHdyb3RlX3JldHVybl9jb2x1bW4gPSBmYWxzZTsKKysKKysgIGluaXRfb25lX2R3YXJmX3JlZ19zdGF0ZSBpbml0X3N0YXRlOworKworKyAgbWVtc2V0ICgoY2hhciAqKSZpbml0X3N0YXRlLCAwLCBzaXplb2YgKGluaXRfc3RhdGUpKTsKKyAKKyAgIGZvciAoaSA9IDA7IGkgPCBGSVJTVF9QU0VVRE9fUkVHSVNURVI7IGkrKykKKyAgICAgeworLSAgICAgIHVuc2lnbmVkIGludCBkbnVtID0gRFdBUkZfRlJBTUVfUkVHTlVNIChpKTsKKy0gICAgICB1bnNpZ25lZCBpbnQgcm51bSA9IERXQVJGMl9GUkFNRV9SRUdfT1VUIChkbnVtLCAxKTsKKy0KKy0gICAgICBpZiAocm51bSA8IERXQVJGX0ZSQU1FX1JFR0lTVEVSUykKKy0JeworLQkgIEhPU1RfV0lERV9JTlQgb2Zmc2V0ID0gcm51bSAqIEdFVF9NT0RFX1NJWkUgKG1vZGUpOworLQkgIEhPU1RfV0lERV9JTlQgc2l6ZTsKKy0JICBlbnVtIG1hY2hpbmVfbW9kZSBzYXZlX21vZGUgPSB0YXJnZXRtLmR3YXJmX2ZyYW1lX3JlZ19tb2RlIChpKTsKKysgICAgICBtYWNoaW5lX21vZGUgc2F2ZV9tb2RlOworKyAgICAgIHJ0eCBzcGFuOworIAorLQkgIGlmIChkbnVtID09IERXQVJGX0ZSQU1FX1JFVFVSTl9DT0xVTU4pCisrICAgICAgLyogTm8gcG9pbnQgaW4gcHJvY2Vzc2luZyBhIHJlZ2lzdGVyIG11bHRpcGxlIHRpbWVzLiAgVGhpcyBjb3VsZCBoYXBwZW4KKysgICAgICAgIHdpdGggcmVnaXN0ZXIgc3BhbnMsIGUuZy4gd2hlbiBhIHJlZyBpcyBmaXJzdCBwcm9jZXNzZWQgYXMgYSBwaWVjZSBvZgorKyAgICAgICAgYSBzcGFuLCB0aGVuIGFzIGEgcmVnaXN0ZXIgb24gaXRzIG93biBsYXRlciBvbi4gICovCisrCisrICAgICAgaWYgKGluaXRfc3RhdGUucHJvY2Vzc2VkX3JlZ25vW2ldKQorKyAgICAgICBjb250aW51ZTsKKysKKysgICAgICBzYXZlX21vZGUgPSB0YXJnZXRtLmR3YXJmX2ZyYW1lX3JlZ19tb2RlIChpKTsKKysgICAgICBzcGFuID0gdGFyZ2V0bS5kd2FyZl9yZWdpc3Rlcl9zcGFuIChnZW5fcnR4X1JFRyAoc2F2ZV9tb2RlLCBpKSk7CisrICAgICAgaWYgKCFzcGFuKQorKyAgICAgICBpbml0X29uZV9kd2FyZl9yZWdfc2l6ZSAoaSwgc2F2ZV9tb2RlLCBtZW0sIG1vZGUsICZpbml0X3N0YXRlKTsKKysgICAgICBlbHNlCisrICAgICAgIHsKKysgICAgICAgICBmb3IgKGludCBzaSA9IDA7IHNpIDwgWFZFQ0xFTiAoc3BhbiwgMCk7IHNpKyspCisgCSAgICB7CistCSAgICAgIGlmIChzYXZlX21vZGUgPT0gVk9JRG1vZGUpCistCQljb250aW51ZTsKKy0JICAgICAgd3JvdGVfcmV0dXJuX2NvbHVtbiA9IHRydWU7CistCSAgICB9CistCSAgc2l6ZSA9IEdFVF9NT0RFX1NJWkUgKHNhdmVfbW9kZSk7CistCSAgaWYgKG9mZnNldCA8IDApCistCSAgICBjb250aW51ZTsKKysgICAgICAgICAgICAgcnR4IHJlZyA9IFhWRUNFWFAgKHNwYW4sIDAsIHNpKTsKKysgICAgICAgICAgICAgaW5pdF9vbmVfZHdhcmZfcmVnX3NpemUKKysgICAgICAgICAgICAgICAoUkVHTk8gKHJlZyksIEdFVF9NT0RFIChyZWcpLCBtZW0sIG1vZGUsICZpbml0X3N0YXRlKTsKKysgICAgICAgICAgIH0KKyAKKy0JICBlbWl0X21vdmVfaW5zbiAoYWRqdXN0X2FkZHJlc3MgKG1lbSwgbW9kZSwgb2Zmc2V0KSwKKy0JCQkgIGdlbl9pbnRfbW9kZSAoc2l6ZSwgbW9kZSkpOworIAl9CisgICAgIH0KKyAKKy0gIGlmICghd3JvdGVfcmV0dXJuX2NvbHVtbikKKysgIGlmICghaW5pdF9zdGF0ZS53cm90ZV9yZXR1cm5fY29sdW1uKQorICAgICBpbml0X3JldHVybl9jb2x1bW5fc2l6ZSAobW9kZSwgbWVtLCBEV0FSRl9GUkFNRV9SRVRVUk5fQ09MVU1OKTsKKyAKKyAjaWZkZWYgRFdBUkZfQUxUX0ZSQU1FX1JFVFVSTl9DT0xVTU4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTYtZGVmaW5lLWRlZmF1bHQtY2ZhLXJlZ2lzdGVyLW1hcHBpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU2LWRlZmluZS1kZWZhdWx0LWNmYS1yZWdpc3Rlci1tYXBwaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNmM5NGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU2LWRlZmluZS1kZWZhdWx0LWNmYS1yZWdpc3Rlci1tYXBwaW5nLnBhdGNoCkBAIC0wLDAgKzEsNzUgQEAKK0Zyb20gYzAyMzVhMzNkZThjNGY3OGNjZTM1YjJhOGMyMDM1YzgzZmUxYmQxNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IGhhaW5xdWUgPGhhaW5xdWVAMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0PgorRGF0ZTogRnJpLCA1IERlYyAyMDE0IDE3OjAxOjQyICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIDIwMTQtMTItMDUgIE9saXZpZXIgSGFpbnF1ZSAgPGhhaW5xdWVAYWRhY29yZS5jb20+CisKKyAgICAgICAgZ2NjLworICAgICAgICAqIGRlZmF1bHRzLmg6IChEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTik6IERlZmluZSBkZWZhdWx0LgorICAgICAgICAqIGR3YXJmMmNmaS5jIChpbml0X29uZV9kd2FyZl9yZWdfc2l6ZSk6IEhvbm9yCisgICAgICAgIERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OLgorCisgICAgICAgIGxpYmdjYy8KKyAgICAgICAgKiB1bndpbmQtZHcyLmMgKERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OKTogUmVtb3ZlIGRlZmF1bHQgZGVmLAorICAgICAgICBub3cgcHJvdmlkZWQgYnkgZGVmYXVsdHMuaC4KKworCisKK2dpdC1zdm4taWQ6IHN2bitzc2g6Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL3RydW5rQDIxODQyOSAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2djYyA1LjBdCisKKy0tLQorIGdjYy9DaGFuZ2VMb2cgICAgICAgfCA2ICsrKysrKworIGdjYy9kZWZhdWx0cy5oICAgICAgfCA1ICsrKysrCisgZ2NjL2R3YXJmMmNmaS5jICAgICB8IDMgKystCisgbGliZ2NjL0NoYW5nZUxvZyAgICB8IDUgKysrKysKKyBsaWJnY2MvdW53aW5kLWR3Mi5jIHwgNCAtLS0tCisgNSBmaWxlcyBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitJbmRleDogZ2NjLTQuOS4yL2djYy9kZWZhdWx0cy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2RlZmF1bHRzLmgKKysrKyBnY2MtNC45LjIvZ2NjL2RlZmF1bHRzLmgKK0BAIC00MzgsNiArNDM4LDExIEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVEkKKyAjZGVmaW5lIERXQVJGX0ZSQU1FX1JFR05VTShSRUcpIERCWF9SRUdJU1RFUl9OVU1CRVIgKFJFRykKKyAjZW5kaWYKKyAKKysvKiBUaGUgbWFwcGluZyBmcm9tIGR3YXJmIENGQSByZWcgbnVtYmVyIHRvIGludGVybmFsIGR3YXJmIHJlZyBudW1iZXJzLiAgKi8KKysjaWZuZGVmIERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OCisrI2RlZmluZSBEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTihSRUdOTykgKFJFR05PKQorKyNlbmRpZgorKworIC8qIE1hcCByZWdpc3RlciBudW1iZXJzIGhlbGQgaW4gdGhlIGNhbGwgZnJhbWUgaW5mbyB0aGF0IGdjYyBoYXMKKyAgICBjb2xsZWN0ZWQgdXNpbmcgRFdBUkZfRlJBTUVfUkVHTlVNIHRvIHRob3NlIHRoYXQgc2hvdWxkIGJlIG91dHB1dCBpbgorICAgIC5kZWJ1Z19mcmFtZSBhbmQgLmVoX2ZyYW1lLiAgKi8KK0luZGV4OiBnY2MtNC45LjIvZ2NjL2R3YXJmMmNmaS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2R3YXJmMmNmaS5jCisrKysgZ2NjLTQuOS4yL2djYy9kd2FyZjJjZmkuYworQEAgLTI4MCw4ICsyODAsOSBAQCB2b2lkIGluaXRfb25lX2R3YXJmX3JlZ19zaXplIChpbnQgcmVnbm8sCisgeworICAgY29uc3QgdW5zaWduZWQgaW50IGRudW0gPSBEV0FSRl9GUkFNRV9SRUdOVU0gKHJlZ25vKTsKKyAgIGNvbnN0IHVuc2lnbmVkIGludCBybnVtID0gRFdBUkYyX0ZSQU1FX1JFR19PVVQgKGRudW0sIDEpOworKyAgY29uc3QgdW5zaWduZWQgaW50IGRjb2wgPSBEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTiAocm51bSk7CisgCistICBjb25zdCBIT1NUX1dJREVfSU5UIHNsb3RvZmZzZXQgPSBybnVtICogR0VUX01PREVfU0laRSAoc2xvdG1vZGUpOworKyAgY29uc3QgSE9TVF9XSURFX0lOVCBzbG90b2Zmc2V0ID0gZGNvbCAqIEdFVF9NT0RFX1NJWkUgKHNsb3Rtb2RlKTsKKyAgIGNvbnN0IEhPU1RfV0lERV9JTlQgcmVnc2l6ZSA9IEdFVF9NT0RFX1NJWkUgKHJlZ21vZGUpOworIAorICAgaW5pdF9zdGF0ZS0+cHJvY2Vzc2VkX3JlZ25vW3JlZ25vXSA9IHRydWU7CitJbmRleDogZ2NjLTQuOS4yL2xpYmdjYy91bndpbmQtZHcyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9saWJnY2MvdW53aW5kLWR3Mi5jCisrKysgZ2NjLTQuOS4yL2xpYmdjYy91bndpbmQtZHcyLmMKK0BAIC01NSwxMCArNTUsNiBAQAorICNkZWZpbmUgUFJFX0dDQzNfRFdBUkZfRlJBTUVfUkVHSVNURVJTIERXQVJGX0ZSQU1FX1JFR0lTVEVSUworICNlbmRpZgorIAorLSNpZm5kZWYgRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4KKy0jZGVmaW5lIERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OKFJFR05PKSAoUkVHTk8pCistI2VuZGlmCistCisgLyogPz8/IEZvciB0aGUgcHVibGljIGZ1bmN0aW9uIGludGVyZmFjZXMsIHdlIHRlbmQgdG8gZ2NjX2Fzc2VydCB0aGF0IHRoZQorICAgIGNvbHVtbiBudW1iZXJzIGFyZSBpbiByYW5nZS4gIEZvciB0aGUgZHdhcmYyIHVud2luZCBpbmZvIHRoaXMgZG9lcyBoYXBwZW4sCisgICAgYWx0aG91Z2ggc28gZmFyIGluIGEgY2FzZSB0aGF0IGRvZXNuJ3QgYWN0dWFsbHkgbWF0dGVyLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Ny1hYXJjaDY0LWNvbmZpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTctYWFyY2g2NC1jb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI5NTU5NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTctYWFyY2g2NC1jb25maWcucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRGlzYWJsZSB0aGUgTVVMVElMSUJfT1NESVJOQU1FUyBhbmQgb3RoZXIgbXVsdGlsaWIgb3B0aW9ucy4KKworSGFyZCBjb2RpbmcgdGhlIE1VTFRJTElCX09TRElSTkFNRVMgd2l0aCAuLi9saWI2NCBpcyBjYXVzaW5nIHByb2JsZW1zIG9uCitzeXN0ZW1zIHdoZXJlIHRoZSBsaWJkaXIgaXMgTk9UIHNldCB0byAvbGliNjQuICBUaGlzIGlzIGFsbG93ZWQgYnkgdGhlIEFCSSwgYXMKK2xvbmcgYXMgdGhlIGR5bmFtaWMgbG9hZGVyIGlzIHByZXNlbnQgaW4gL2xpYi4KKworV2Ugc2ltcGx5IHdhbnQgdG8gdXNlIHRoZSBkZWZhdWx0IHJ1bGVzIGluIGdjYyB0byBmaW5kIGFuZCBjb25maWd1cmUgdGhlIAorbm9ybWFsIGxpYmRpci4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogZ2NjLTQuOS4xL2djYy9jb25maWcvYWFyY2g2NC90LWFhcmNoNjQtbGludXgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjEub3JpZy9nY2MvY29uZmlnL2FhcmNoNjQvdC1hYXJjaDY0LWxpbnV4CisrKysgZ2NjLTQuOS4xL2djYy9jb25maWcvYWFyY2g2NC90LWFhcmNoNjQtbGludXgKK0BAIC0yMSwxMSArMjEsMTEgQEAKKyBMSUIxQVNNU1JDICAgPSBhYXJjaDY0L2xpYjFmdW5jcy5hc20KKyBMSUIxQVNNRlVOQ1MgPSBfYWFyY2g2NF9zeW5jX2NhY2hlX3JhbmdlCisgCistQUFSQ0hfQkUgPSAkKGlmICQoZmluZHN0cmluZyBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUPTEsICQodG1fZGVmaW5lcykpLF9iZSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTID0gLj0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOmFhcmNoNjQkKEFBUkNIX0JFKS1saW51eC1nbnUpCistTVVMVElBUkNIX0RJUk5BTUUgPSAkKGNhbGwgaWZfbXVsdGlhcmNoLGFhcmNoNjQkKEFBUkNIX0JFKS1saW51eC1nbnUpCisrI0FBUkNIX0JFID0gJChpZiAkKGZpbmRzdHJpbmcgVEFSR0VUX0JJR19FTkRJQU5fREVGQVVMVD0xLCAkKHRtX2RlZmluZXMpKSxfYmUpCisrI01VTFRJTElCX09TRElSTkFNRVMgPSAuPS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6YWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKKysjTVVMVElBUkNIX0RJUk5BTUUgPSAkKGNhbGwgaWZfbXVsdGlhcmNoLGFhcmNoNjQkKEFBUkNIX0JFKS1saW51eC1nbnUpCisgCisgIyBEaXNhYmxlIHRoZSBtdWx0aWxpYiBmb3IgbGludXgtZ251IHRhcmdldHMgZm9yIHRoZSB0aW1lIGJlaW5nOyBmb2N1cworICMgb24gdGhlIGJhcmVtZXRhbCB0YXJnZXRzLgorLU1VTFRJTElCX09QVElPTlMgICAgPQorLU1VTFRJTElCX0RJUk5BTUVTICAgPQorKyNNVUxUSUxJQl9PUFRJT05TICAgID0KKysjTVVMVElMSUJfRElSTkFNRVMgICA9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU4LWdjYy1yMjEyMTcxLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1OC1nY2MtcjIxMjE3MS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDQyYmE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1OC1nY2MtcjIxMjE3MS5wYXRjaApAQCAtMCwwICsxLDExMyBAQAorRnJvbSBjYTAzY2YxYjEzM2Q2NmViOTc4YzY4ZjZkYmMzNDVlOWFhYmNiYTg4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogdXJvcyA8dXJvc0AxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQ+CitEYXRlOiBNb24sIDMwIEp1biAyMDE0IDE5OjMwOjUyICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIHIyMTIxNzEKKworKiBleGNlcHQuYyAoZW1pdF9ub3RlX2VoX3JlZ2lvbl9lbmQpOiBOZXcgaGVscGVyCisgZnVuY3Rpb24uIAkoY29udmVydF90b19laF9yZWdpb25fcmFuZ2VzKTogVXNlCisgZW1pdF9ub3RlX2VoX3JlZ2lvbl9lbmQgdG8gCWVtaXQgRUhfUkVHSU9OX0VORCBub3RlLiAKKyAqIGp1bXAuYyAoY2xlYW51cF9iYXJyaWVycyk6IERvIG5vdCBzcGxpdCBhIGNhbGwgYW5kIGl0cyAKKyBjb3JyZXNwb25kaW5nIENBTExfQVJHX0xPQ0FUSU9OIG5vdGUuCisKK2dpdC1zdm4taWQ6IHN2bitzc2g6Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL3RydW5rQDIxMjE3MSAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbaHR0cHM6Ly9nY2MuZ251Lm9yZy92aWV3Y3ZzL2djYz92aWV3PXJldmlzaW9uJnJldmlzaW9uPTIxMjE3MV0KK1NpZ25lZC1vZmYtYnk6IEJhb3NoYW4gUGFuZyA8YmFvc2hhbi5wYW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBnY2MvZXhjZXB0LmMgfCAgIDIzICsrKysrKysrKysrKysrKysrKy0tLS0tCisgZ2NjL2p1bXAuYyAgIHwgICAxOSArKysrKysrKysrKysrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAzMyBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2V4Y2VwdC5jIGIvZ2NjL2V4Y2VwdC5jCitpbmRleCBkYzVjMWQyLi43YWMxMTRmIDEwMDY0NAorLS0tIGEvZ2NjL2V4Y2VwdC5jCisrKysgYi9nY2MvZXhjZXB0LmMKK0BAIC0yNDY2LDYgKzI0NjYsMjAgQEAgYWRkX2NhbGxfc2l0ZSAocnR4IGxhbmRpbmdfcGFkLCBpbnQgYWN0aW9uLCBpbnQgc2VjdGlvbikKKyAgIHJldHVybiBjYWxsX3NpdGVfYmFzZSArIGNydGwtPmVoLmNhbGxfc2l0ZV9yZWNvcmRfdltzZWN0aW9uXS0+bGVuZ3RoICgpIC0gMTsKKyB9CisgCisrc3RhdGljIHJ0eAorK2VtaXRfbm90ZV9laF9yZWdpb25fZW5kIChydHggaW5zbikKKyt7CisrICBydHggbmV4dCA9IE5FWFRfSU5TTiAoaW5zbik7CisrCisrICAvKiBNYWtlIHN1cmUgd2UgZG8gbm90IHNwbGl0IGEgY2FsbCBhbmQgaXRzIGNvcnJlc3BvbmRpbmcKKysgICAgIENBTExfQVJHX0xPQ0FUSU9OIG5vdGUuICAqLworKyAgaWYgKG5leHQgJiYgTk9URV9QIChuZXh0KQorKyAgICAgICYmIE5PVEVfS0lORCAobmV4dCkgPT0gTk9URV9JTlNOX0NBTExfQVJHX0xPQ0FUSU9OKQorKyAgICBpbnNuID0gbmV4dDsKKysKKysgIHJldHVybiBlbWl0X25vdGVfYWZ0ZXIgKE5PVEVfSU5TTl9FSF9SRUdJT05fRU5ELCBpbnNuKTsKKyt9CisrCisgLyogVHVybiBSRUdfRUhfUkVHSU9OIG5vdGVzIGJhY2sgaW50byBOT1RFX0lOU05fRUhfUkVHSU9OIG5vdGVzLgorICAgIFRoZSBuZXcgbm90ZSBudW1iZXJzIHdpbGwgbm90IHJlZmVyIHRvIHJlZ2lvbiBudW1iZXJzLCBidXQKKyAgICBpbnN0ZWFkIHRvIGNhbGwgc2l0ZSBlbnRyaWVzLiAgKi8KK0BAIC0yNTQ0LDggKzI1NTgsOCBAQCBjb252ZXJ0X3RvX2VoX3JlZ2lvbl9yYW5nZXMgKHZvaWQpCisgCQlub3RlID0gZW1pdF9ub3RlX2JlZm9yZSAoTk9URV9JTlNOX0VIX1JFR0lPTl9CRUcsCisgCQkJCQkgZmlyc3Rfbm9fYWN0aW9uX2luc25fYmVmb3JlX3N3aXRjaCk7CisgCQlOT1RFX0VIX0hBTkRMRVIgKG5vdGUpID0gY2FsbF9zaXRlOworLQkJbm90ZSA9IGVtaXRfbm90ZV9hZnRlciAoTk9URV9JTlNOX0VIX1JFR0lPTl9FTkQsCistCQkJCQlsYXN0X25vX2FjdGlvbl9pbnNuX2JlZm9yZV9zd2l0Y2gpOworKwkJbm90ZQorKwkJICA9IGVtaXRfbm90ZV9laF9yZWdpb25fZW5kIChsYXN0X25vX2FjdGlvbl9pbnNuX2JlZm9yZV9zd2l0Y2gpOworIAkJTk9URV9FSF9IQU5ETEVSIChub3RlKSA9IGNhbGxfc2l0ZTsKKyAJCWdjY19hc3NlcnQgKGxhc3RfYWN0aW9uICE9IC0zCisgCQkJICAgIHx8IChsYXN0X2FjdGlvbl9pbnNuCitAQCAtMjU2OSw4ICsyNTgzLDcgQEAgY29udmVydF90b19laF9yZWdpb25fcmFuZ2VzICh2b2lkKQorIAkJICAgIGZpcnN0X25vX2FjdGlvbl9pbnNuID0gTlVMTF9SVFg7CisgCQkgIH0KKyAKKy0JCW5vdGUgPSBlbWl0X25vdGVfYWZ0ZXIgKE5PVEVfSU5TTl9FSF9SRUdJT05fRU5ELAorLQkJCQkJbGFzdF9hY3Rpb25faW5zbik7CisrCQlub3RlID0gZW1pdF9ub3RlX2VoX3JlZ2lvbl9lbmQgKGxhc3RfYWN0aW9uX2luc24pOworIAkJTk9URV9FSF9IQU5ETEVSIChub3RlKSA9IGNhbGxfc2l0ZTsKKyAJICAgICAgfQorIAorQEAgLTI2MTcsNyArMjYzMCw3IEBAIGNvbnZlcnRfdG9fZWhfcmVnaW9uX3JhbmdlcyAodm9pZCkKKyAKKyAgIGlmIChsYXN0X2FjdGlvbiA+PSAtMSAmJiAhIGZpcnN0X25vX2FjdGlvbl9pbnNuKQorICAgICB7CistICAgICAgbm90ZSA9IGVtaXRfbm90ZV9hZnRlciAoTk9URV9JTlNOX0VIX1JFR0lPTl9FTkQsIGxhc3RfYWN0aW9uX2luc24pOworKyAgICAgIG5vdGUgPSBlbWl0X25vdGVfZWhfcmVnaW9uX2VuZCAobGFzdF9hY3Rpb25faW5zbik7CisgICAgICAgTk9URV9FSF9IQU5ETEVSIChub3RlKSA9IGNhbGxfc2l0ZTsKKyAgICAgfQorIAorZGlmZiAtLWdpdCBhL2djYy9qdW1wLmMgYi9nY2MvanVtcC5jCitpbmRleCA5NDE4ZjY1Li5hNWU1ZjUyIDEwMDY0NAorLS0tIGEvZ2NjL2p1bXAuYworKysrIGIvZ2NjL2p1bXAuYworQEAgLTEyMSwxNSArMTIxLDI2IEBAIHJlYnVpbGRfanVtcF9sYWJlbHNfY2hhaW4gKHJ0eCBjaGFpbikKKyBzdGF0aWMgdW5zaWduZWQgaW50CisgY2xlYW51cF9iYXJyaWVycyAodm9pZCkKKyB7CistICBydHggaW5zbiwgbmV4dCwgcHJldjsKKy0gIGZvciAoaW5zbiA9IGdldF9pbnNucyAoKTsgaW5zbjsgaW5zbiA9IG5leHQpCisrICBydHggaW5zbjsKKysgIGZvciAoaW5zbiA9IGdldF9pbnNucyAoKTsgaW5zbjsgaW5zbiA9IE5FWFRfSU5TTiAoaW5zbikpCisgICAgIHsKKy0gICAgICBuZXh0ID0gTkVYVF9JTlNOIChpbnNuKTsKKyAgICAgICBpZiAoQkFSUklFUl9QIChpbnNuKSkKKyAJeworLQkgIHByZXYgPSBwcmV2X25vbm5vdGVfaW5zbiAoaW5zbik7CisrCSAgcnR4IHByZXYgPSBwcmV2X25vbm5vdGVfaW5zbiAoaW5zbik7CisgCSAgaWYgKCFwcmV2KQorIAkgICAgY29udGludWU7CisrCisrCSAgaWYgKENBTExfUCAocHJldikpCisrCSAgICB7CisrCSAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBkbyBub3Qgc3BsaXQgYSBjYWxsIGFuZCBpdHMgY29ycmVzcG9uZGluZworKwkJIENBTExfQVJHX0xPQ0FUSU9OIG5vdGUuICAqLworKwkgICAgICBydHggbmV4dCA9IE5FWFRfSU5TTiAocHJldik7CisrCisrCSAgICAgIGlmIChOT1RFX1AgKG5leHQpCisrCQkgICYmIE5PVEVfS0lORCAobmV4dCkgPT0gTk9URV9JTlNOX0NBTExfQVJHX0xPQ0FUSU9OKQorKwkJcHJldiA9IG5leHQ7CisrCSAgICB9CisrCisgCSAgaWYgKEJBUlJJRVJfUCAocHJldikpCisgCSAgICBkZWxldGVfaW5zbiAoaW5zbik7CisgCSAgZWxzZSBpZiAocHJldiAhPSBQUkVWX0lOU04gKGluc24pKQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTktZ2NjLVBSLXJ0bC1vcHRpbWl6YXRpb24tNjMzNDgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU5LWdjYy1QUi1ydGwtb3B0aW1pemF0aW9uLTYzMzQ4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlODI3Y2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU5LWdjYy1QUi1ydGwtb3B0aW1pemF0aW9uLTYzMzQ4LnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK0Zyb20gNmVhZTNlNjM3ZmNjMjJkMjFiNTFkNDRkNjFlM2E5Y2I0ODI1ZTc3NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUaHUsIDMwIE9jdCAyMDE0IDIwOjM3OjE0IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdUFIgcnRsLW9wdGltaXphdGlvbi82MzM0OAorIAorUFIgcnRsLW9wdGltaXphdGlvbi82MzM0OAorKiBlbWl0LXJ0bC5jICh0cnlfc3BsaXQpOiBEbyBub3QgZW1pdCBleHRyYSBiYXJyaWVyLgorCitOb3RlOiB0aGlzIHBhdGNoIGlzIHRvIGZpeCB0aGUgc2lkZSBlZmZlY3QgaW50cm9kdWNlZCBieSByMjEyMTcxIHdoaWNoIHdhcyByZXBvcnRlZCBhdDoKK2h0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTYzMzQ4CisKK2dpdC1zdm4taWQ6IHN2bitzc2g6Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL3RydW5rQDIxNTYxMyAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbaHR0cHM6Ly9nY2MuZ251Lm9yZy92aWV3Y3ZzL2djYz92aWV3PXJldmlzaW9uJnJldmlzaW9uPTIxNTYxM10KK1NpZ25lZC1vZmYtYnk6IEJhb3NoYW4gUGFuZyA8YmFvc2hhbi5wYW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgZ2NjL2VtaXQtcnRsLmMgfCAgIDExIC0tLS0tLS0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAwIGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2VtaXQtcnRsLmMgYi9nY2MvZW1pdC1ydGwuYworaW5kZXggNDczNmY4ZC4uYWU2OWRiZCAxMDA2NDQKKy0tLSBhL2djYy9lbWl0LXJ0bC5jCisrKysgYi9nY2MvZW1pdC1ydGwuYworQEAgLTM0MjIsNyArMzQyMiw2IEBAIHRyeV9zcGxpdCAocnR4IHBhdCwgcnR4IHRyaWFsLCBpbnQgbGFzdCkKKyB7CisgICBydHggYmVmb3JlID0gUFJFVl9JTlNOICh0cmlhbCk7CisgICBydHggYWZ0ZXIgPSBORVhUX0lOU04gKHRyaWFsKTsKKy0gIGludCBoYXNfYmFycmllciA9IDA7CisgICBydHggbm90ZSwgc2VxLCB0ZW07CisgICBpbnQgcHJvYmFiaWxpdHk7CisgICBydHggaW5zbl9sYXN0LCBpbnNuOworQEAgLTM0NDEsMTQgKzM0NDAsNiBAQCB0cnlfc3BsaXQgKHJ0eCBwYXQsIHJ0eCB0cmlhbCwgaW50IGxhc3QpCisgCisgICBzcGxpdF9icmFuY2hfcHJvYmFiaWxpdHkgPSAtMTsKKyAKKy0gIC8qIElmIHdlIGFyZSBzcGxpdHRpbmcgYSBKVU1QX0lOU04sIGl0IG1pZ2h0IGJlIGZvbGxvd2VkIGJ5IGEgQkFSUklFUi4KKy0gICAgIFdlIG1heSBuZWVkIHRvIGhhbmRsZSB0aGlzIHNwZWNpYWxseS4gICovCistICBpZiAoYWZ0ZXIgJiYgQkFSUklFUl9QIChhZnRlcikpCistICAgIHsKKy0gICAgICBoYXNfYmFycmllciA9IDE7CistICAgICAgYWZ0ZXIgPSBORVhUX0lOU04gKGFmdGVyKTsKKy0gICAgfQorLQorICAgaWYgKCFzZXEpCisgICAgIHJldHVybiB0cmlhbDsKKyAKK0BAIC0zNTk0LDggKzM1ODUsNiBAQCB0cnlfc3BsaXQgKHJ0eCBwYXQsIHJ0eCB0cmlhbCwgaW50IGxhc3QpCisgICB0ZW0gPSBlbWl0X2luc25fYWZ0ZXJfc2V0bG9jIChzZXEsIHRyaWFsLCBJTlNOX0xPQ0FUSU9OICh0cmlhbCkpOworIAorICAgZGVsZXRlX2luc24gKHRyaWFsKTsKKy0gIGlmIChoYXNfYmFycmllcikKKy0gICAgZW1pdF9iYXJyaWVyX2FmdGVyICh0ZW0pOworIAorICAgLyogUmVjdXJzaXZlbHkgY2FsbCB0cnlfc3BsaXQgZm9yIGVhY2ggbmV3IGluc24gY3JlYXRlZDsgYnkgdGhlCisgICAgICB0aW1lIGNvbnRyb2wgcmV0dXJucyBoZXJlIHRoYXQgaW5zbiB3aWxsIGJlIGZ1bGx5IHNwbGl0LCBzbworLS0gCisxLjcuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYwLU9ubHktYWxsb3ctZTUwMC1kb3VibGUtaW4tU1BFX1NJTURfUkVHTk9fUC1yZWdpc3RlcnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYwLU9ubHktYWxsb3ctZTUwMC1kb3VibGUtaW4tU1BFX1NJTURfUkVHTk9fUC1yZWdpc3RlcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVhOWZkZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjAtT25seS1hbGxvdy1lNTAwLWRvdWJsZS1pbi1TUEVfU0lNRF9SRUdOT19QLXJlZ2lzdGVycy5wYXRjaApAQCAtMCwwICsxLDU1IEBACitGcm9tIDVjMDA5MjA3MDI1MzExM2NmMGQ5YzQ1ZWFjYzg4NGIzZWNjMzRkODEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBqc20yOCA8anNtMjhAMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0PgorRGF0ZTogU2F0LCAyNSBPY3QgMjAxNCAwMDoyMzoxNyArMDAwMAorU3ViamVjdDogW1BBVENIXSBPbmx5IGFsbG93IGU1MDAgZG91YmxlIGluIFNQRV9TSU1EX1JFR05PX1AgcmVnaXN0ZXJzLgorCityczYwMDBfaGFyZF9yZWdub19ucmVnc19pbnRlcm5hbCBhbGxvd3MgU1BFIHZlY3RvcnMgaW4gc2luZ2xlCityZWdpc3RlcnMgc2F0aXNmeWluZyBTUEVfU0lNRF9SRUdOT19QIChpLmUuIHJlZ2lzdGVyIG51bWJlcnMgMCB0bworMzEpLiAgSG93ZXZlciwgdGhlIGNvcnJlc3BvbmRpbmcgdGVzdCBmb3IgZTUwMCBkb3VibGUgdHJlYXRzIGFsbAorcmVnaXN0ZXJzIGFzIGJlaW5nIGFibGUgdG8gc3RvcmUgYSA2NC1iaXQgdmFsdWUsIHJhdGhlciB0aGFuIGp1c3QKK3Rob3NlIEdQUnMuCisKK0xvZ2ljYWxseSB0aGlzIGluY29uc2lzdGVuY3kgaXMgd3Jvbmc7IGluIGFkZGl0aW9uLCBpdCBjYXVzZXMgcHJvYmxlbXMKK3Vud2luZGluZyBmcm9tIHNpZ25hbCBoYW5kbGVycy4gIGxpbnV4LXVud2luZC5oIHVzZXMKK0FSR19QT0lOVEVSX1JFR05VTSBhcyBhIHBsYWNlIHRvIHN0b3JlIHRoZSByZXR1cm4gYWRkcmVzcyBmcm9tIGEKK3NpZ25hbCBoYW5kbGVyLCBidXQgdGhpcyBsb2dpYyBpbiByczYwMDBfaGFyZF9yZWdub19ucmVnc19pbnRlcm5hbAorcmVzdWx0cyBpbiB0aGF0IGJlaW5nIGNvbnNpZGVyZWQgYW4gOC1ieXRlIHJlZ2lzdGVyLCByZXN1bHRpbmcgaW4KK2Fzc2VydGlvbiBmYWlsdXJlcy4KKyg8aHR0cHM6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDE0LTA5L21zZzAyNjI1Lmh0bWw+IGZpcnN0CituZWVkcyB0byBiZSBhcHBsaWVkIGZvciB1bndpbmRpbmcgdG8gd29yayBpbiBnZW5lcmFsIG9uIGU1MDAuKSAgVGhpcworcGF0Y2ggbWFrZXMgcnM2MDAwX2hhcmRfcmVnbm9fbnJlZ3NfaW50ZXJuYWwgaGFuZGxlIHRoZSBlNTAwIGRvdWJsZQorY2FzZSBjb25zaXN0ZW50bHkgd2l0aCBTUEUgdmVjdG9ycy4KKworVGVzdGVkIHdpdGggbm8gcmVncmVzc2lvbnMgd2l0aCBjcm9zcyB0byBwb3dlcnBjLWxpbnV4LWdudXNwZSAoZ2l2ZW4KK3RoZSBhZm9yZW1lbnRpb25lZCBwYXRjaCBhcHBsaWVkKS4gIEZhaWx1cmVzIG9mIHNpZ25hbCBoYW5kbGluZwordW53aW5kaW5nIHRlc3RzIHN1Y2ggYXMgZ2NjLmRnL2NsZWFudXAtezgsOSwxMCwxMX0uYyBhcmUgZml4ZWQgYnkgdGhpcworcGF0Y2guCisKKwkqIGNvbmZpZy9yczYwMDAvcnM2MDAwLmMgKHJzNjAwMF9oYXJkX3JlZ25vX25yZWdzX2ludGVybmFsKTogRG8KKwlub3QgYWxsb3cgZTUwMCBkb3VibGUgaW4gcmVnaXN0ZXJzIG5vdCBzYXRpc3lmaW5nCisJU1BFX1NJTURfUkVHTk9fUC4KKworCitnaXQtc3ZuLWlkOiBzdm4rc3NoOi8vZ2NjLmdudS5vcmcvc3ZuL2djYy90cnVua0AyMTY2ODggMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtnY2MgNS4wXQorCistLS0KKyBnY2MvQ2hhbmdlTG9nICAgICAgICAgICAgICB8IDYgKysrKysrCisgZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmMgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGdjYy00LjkuMi9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMi5vcmlnL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5jCisrKysgZ2NjLTQuOS4yL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5jCitAQCAtMTcwMyw3ICsxNzAzLDcgQEAgcnM2MDAwX2hhcmRfcmVnbm9fbnJlZ3NfaW50ZXJuYWwgKGludCByZQorICAgICAgU0Ntb2RlIHNvIGFzIHRvIHBhc3MgdGhlIHZhbHVlIGNvcnJlY3RseSBpbiBhIHBhaXIgb2YKKyAgICAgIHJlZ2lzdGVycy4gICovCisgICBlbHNlIGlmIChUQVJHRVRfRTUwMF9ET1VCTEUgJiYgRkxPQVRfTU9ERV9QIChtb2RlKSAmJiBtb2RlICE9IFNDbW9kZQorLQkgICAmJiAhREVDSU1BTF9GTE9BVF9NT0RFX1AgKG1vZGUpKQorKwkgICAmJiAhREVDSU1BTF9GTE9BVF9NT0RFX1AgKG1vZGUpICYmIFNQRV9TSU1EX1JFR05PX1AgKHJlZ25vKSkKKyAgICAgcmVnX3NpemUgPSBVTklUU19QRVJfRlBfV09SRDsKKyAKKyAgIGVsc2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjEtdGFyZ2V0LWdjYy1pbmNsdWRlZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2MS10YXJnZXQtZ2NjLWluY2x1ZGVkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ4YzY2ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjEtdGFyZ2V0LWdjYy1pbmNsdWRlZGlyLnBhdGNoCkBAIC0wLDAgKzEsODEgQEAKK0Vuc3VyZSB0YXJnZXQgZ2NjIGhlYWRlcnMgY2FuIGJlIGluY2x1ZGVkCisKK1RoZXJlIGFyZSBhIGZldyBoZWFkZXJzIGluc3RhbGxlZCBhcyBwYXJ0IG9mIHRoZSBPcGVuRW1iZWRkZWQKK2djYy1ydW50aW1lIHRhcmdldCAob21wLmgsIHNzcC8qLmgpLiBCZWluZyBpbnN0YWxsZWQgZnJvbSBhIHJlY2lwZQorYnVpbHQgZm9yIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCB0aGVzZSBhcmUgd2l0aGluIHRoZSB0YXJnZXQKK3N5c3Jvb3QgYW5kIG5vdCBjcm9zcy9uYXRpdmVzZGs7IHRodXMgdGhleSB3ZXJlbid0IGFibGUgdG8gYmUKK2ZvdW5kIGJ5IGdjYyB3aXRoIHRoZSBleGlzdGluZyBzZWFyY2ggcGF0aHMuIEFkZCBzdXBwb3J0IGZvcgorcGlja2luZyB1cCB0aGVzZSBoZWFkZXJzIHVuZGVyIHRoZSBzeXNyb290IHN1cHBsaWVkIG9uIHRoZSBnY2MKK2NvbW1hbmQgbGluZSBpbiBvcmRlciB0byByZXNvbHZlIHRoaXMuCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGEvZ2NjL01ha2VmaWxlLmluCTIwMTQtMTItMjMgMTE6NTc6MzMuMzI3ODczMzMxICswMDAwCisrKysgYi9nY2MvTWFrZWZpbGUuaW4JMjAxNS0wMS0yMSAxMTozMjozNS40NDczMDUzOTQgKzAwMDAKK0BAIC01ODcsNiArNTg3LDcgQEAKKyAKKyAjIERpcmVjdG9yeSBpbiB3aGljaCB0aGUgY29tcGlsZXIgZmluZHMgbGlicmFyaWVzIGV0Yy4KKyBsaWJzdWJkaXIgPSAkKGxpYmRpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJCh2ZXJzaW9uKQorK2xpYnN1YmRpcl90YXJnZXQgPSBnY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKHZlcnNpb24pCisgIyBEaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGNvbXBpbGVyIGZpbmRzIGV4ZWN1dGFibGVzCisgbGliZXhlY3N1YmRpciA9ICQobGliZXhlY2RpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJCh2ZXJzaW9uKQorICMgRGlyZWN0b3J5IGluIHdoaWNoIGFsbCBwbHVnaW4gcmVzb3VyY2VzIGFyZSBpbnN0YWxsZWQKK0BAIC0yNTM0LDYgKzI1MzUsNyBAQAorIAorIFBSRVBST0NFU1NPUl9ERUZJTkVTID0gXAorICAgLURHQ0NfSU5DTFVERV9ESVI9XCIkKGxpYnN1YmRpcikvaW5jbHVkZVwiIFwKKysgIC1ER0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVD1cIiQobGlic3ViZGlyX3RhcmdldCkvaW5jbHVkZVwiIFwKKyAgIC1ERklYRURfSU5DTFVERV9ESVI9XCIkKGxpYnN1YmRpcikvaW5jbHVkZS1maXhlZFwiIFwKKyAgIC1ER1BMVVNQTFVTX0lOQ0xVREVfRElSPVwiJChnY2NfZ3h4X2luY2x1ZGVfZGlyKVwiIFwKKyAgIC1ER1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09UPSQoZ2NjX2d4eF9pbmNsdWRlX2Rpcl9hZGRfc3lzcm9vdCkgXAorLS0tIGEvZ2NjL2NwcGRlZmF1bHQuYwkyMDE1LTAxLTEzIDE3OjQwOjI2LjEzMTAxMjcyNSArMDAwMAorKysrIGIvZ2NjL2NwcGRlZmF1bHQuYwkyMDE1LTAxLTIxIDExOjMwOjA4LjkyODQyNjQ5MiArMDAwMAorQEAgLTU5LDYgKzU5LDEwIEBACisgICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzLiAgKi8KKyAgICAgeyBHQ0NfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCisgI2VuZGlmCisrI2lmZGVmIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQKKysgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMgdW5kZXIgdGhlIHNwZWNpZmllZCBzeXNyb290LiAgKi8KKysgICAgeyBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVCwgIkdDQyIsIDAsIDAsIDEsIDAgfSwKKysjZW5kaWYKKyAjaWZkZWYgTE9DQUxfSU5DTFVERV9ESVIKKyAgICAgLyogL3Vzci9sb2NhbC9pbmNsdWRlIGNvbWVzIGJlZm9yZSB0aGUgZml4aW5jbHVkZWQgaGVhZGVyIGZpbGVzLiAgKi8KKyAgICAgeyBMT0NBTF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMSwgMiB9LAorZGlmZiAtLWdpdCBhL2djYy9kZWZhdWx0cy5oIGIvZ2NjL2RlZmF1bHRzLmgKK2luZGV4IGY5NGFlMTcuLmQ5OGI0MGIgMTAwNjQ0CistLS0gYS9nY2MvZGVmYXVsdHMuaAorKysrIGIvZ2NjL2RlZmF1bHRzLmgKK0BAIC0xMzkwLDQgKzEzOTAsMTMgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisgCisgI2VuZGlmIC8qIEdDQ19JTlNOX0ZMQUdTX0ggICovCisgCisrLyogRGVmYXVsdCBwcmVmaXhlcyB0byBhdHRhY2ggdG8gY29tbWFuZCBuYW1lcy4gICovCisrCisrI2lmbmRlZiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEKKysjZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMSAiL2xpYi8iCisrI2VuZGlmCisrI2lmbmRlZiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIKKysjZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiAiL3Vzci9saWIvIgorKyNlbmRpZgorKworICNlbmRpZiAgLyogISBHQ0NfREVGQVVMVFNfSCAqLworZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggOWYwYjc4MS4uMTc0ZmNhOCAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtMTE4OSwxMyArMTE4OSw2IEBAIHN0YXRpYyBjb25zdCBjaGFyICpnY2NfbGliZXhlY19wcmVmaXg7CisgCisgLyogRGVmYXVsdCBwcmVmaXhlcyB0byBhdHRhY2ggdG8gY29tbWFuZCBuYW1lcy4gICovCisgCistI2lmbmRlZiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEKKy0jZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMSAiL2xpYi8iCistI2VuZGlmCistI2lmbmRlZiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIKKy0jZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiAiL3Vzci9saWIvIgorLSNlbmRpZgorLQorICNpZmRlZiBDUk9TU19ESVJFQ1RPUllfU1RSVUNUVVJFICAvKiBEb24ndCB1c2UgdGhlc2UgcHJlZml4ZXMgZm9yIGEgY3Jvc3MgY29tcGlsZXIuICAqLworICN1bmRlZiBNRF9FWEVDX1BSRUZJWAorICN1bmRlZiBNRF9TVEFSVEZJTEVfUFJFRklYCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYyLVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYyLVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ4YmQ0OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjItVXNlLVNZU1RFTUxJQlNfRElSLXJlcGxhY2VtZW50LWluc3RlYWQtb2YtaGFyZGNvZGluZy5wYXRjaApAQCAtMCwwICsxLDI0IEBACitGcm9tIDg2MWJjZmQ0YWU4MTRmMzUxZTBjNjY4ZWUyNmQwMWQxMzMxZTA0MjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVHVlLCAyOCBBcHIgMjAxNSAyMzoxNToyNyAtMDcwMAorU3ViamVjdDogW1BBVENIIDM2LzM3XSBVc2UgU1lTVEVNTElCU19ESVIgcmVwbGFjZW1lbnQgaW5zdGVhZCBvZiBoYXJkY29kaW5nCisgYmFzZV9saWJkaXIKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdjYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBnY2MtNC45LjIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMi5vcmlnL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmgKKysrKyBnY2MtNC45LjIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAorQEAgLTIxLDcgKzIxLDcgQEAKKyAjaWZuZGVmIEdDQ19BQVJDSDY0X0xJTlVYX0gKKyAjZGVmaW5lIEdDQ19BQVJDSDY0X0xJTlVYX0gKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LWFhcmNoNjQle21iaWctZW5kaWFuOl9iZX0uc28uMSIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1hYXJjaDY0JXttYmlnLWVuZGlhbjpfYmV9LnNvLjEiCisgCisgI2RlZmluZSBDUFBfU1BFQyAiJXtwdGhyZWFkOi1EX1JFRU5UUkFOVH0iCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYzLW5hdGl2ZXNkay1nY2Mtc3VwcG9ydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjMtbmF0aXZlc2RrLWdjYy1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZWZhNDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYzLW5hdGl2ZXNkay1nY2Mtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDE5OCBAQAorQmVpbmcgYWJsZSB0byBidWlsZCBhIG5hdGl2ZXNkayBnY2MgaXMgdXNlZnVsLCBwYXJ0aWN1bGFybHkgaW4gY2FzZXMKK3doZXJlIHRoZSBob3N0IGNvbXBpbGVyIG1heSBiZSBvZiBhbiBpbmNvbXBhdGlibGUgdmVyc2lvbiAob3IgYSAzMgorYml0IGNvbXBpbGVyIGlzIG5lZWRlZCkuCisKK1NhZGx5LCBidWlsZGluZyBuYXRpdmVzZGstZ2NjIGlzIG5vdCBzdHJhaWdodCBmb3J3YXJkLiBXZSBpbnN0YWxsCituYXRpdmVzZGstZ2NjIGludG8gYSByZWxvY2F0YWJsZSBsb2NhdGlvbiBhbmQgdGhpcyBtZWFucyB0aGF0IGl0cworbGlicmFyeSBsb2NhdGlvbnMgY2FuIGNoYW5nZS4gIk5vcm1hbCIgc3lzcm9vdCBzdXBwb3J0IGRvZXNuJ3QgaGVscAoraW4gdGhpcyBjYXNlIHNpbmNlIHRoZSB2YWx1ZXMgb2YgcGF0aHMgbGlrZSAibGliZGlyIiBjaGFuZ2UsIG5vdCBqdXN0CitiYXNlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBzeXN0ZW0uCisKK0luIG9yZGVyIHRvIGhhbmRsZSB0aGlzIHdlIGRvIHR3byB0aGluZ3M6CisKK2EpIEFkZCAlciBpbnRvIHNwZWMgZmlsZSBtYXJrdXAgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGluamVjdGVkIHBhdGhzCisgICBzdWNoIGFzIFNZU1RFTUxJQlNfRElSIChzZWUgZ2NjX211bHRpbGliX3NldHVwKCkpLgorYikgQWRkIG90aGVyIHBhdGhzIHdoaWNoIG5lZWQgcmVsb2NhdGlvbiBpbnRvIGEgLmdjY3JlbG9jcHJlZml4IHNlY3Rpb24KKyAgIHdoaWNoIHRoZSByZWxvY2F0aW9uIGNvZGUgd2lsbCBub3RpY2UgYW5kIGFkanVzdCBhdXRvbWF0aWNhbGx5LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1JQIDIwMTUvNy8yOAorZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggNWZkM2QwYS4uMmRlMjlhYSAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtMTIwLDYgKzEyMCw4IEBAIHN0YXRpYyBjb25zdCBjaGFyICp0YXJnZXRfc3lzdGVtX3Jvb3QgPSBUQVJHRVRfU1lTVEVNX1JPT1Q7CisgI2Vsc2UKKyBzdGF0aWMgY29uc3QgY2hhciAqdGFyZ2V0X3N5c3RlbV9yb290ID0gMDsKKyAjZW5kaWYKKysgCisrc3RhdGljIGNoYXIgdGFyZ2V0X3JlbG9jYXRhYmxlX3ByZWZpeFs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTWVNURU1MSUJTX0RJUjsKKyAKKyAvKiBOb256ZXJvIG1lYW5zIHBhc3MgdGhlIHVwZGF0ZWQgdGFyZ2V0X3N5c3RlbV9yb290IHRvIHRoZSBjb21waWxlci4gICovCisgCitAQCAtMzg0LDYgKzM4Niw3IEBAIG9yIHdpdGggY29uc3RhbnQgdGV4dCBpbiBhIHNpbmdsZSBhcmd1bWVudC4KKyAgJUcgICAgIHByb2Nlc3MgTElCR0NDX1NQRUMgYXMgYSBzcGVjLgorICAlUiAgICAgT3V0cHV0IHRoZSBjb25jYXRlbmF0aW9uIG9mIHRhcmdldF9zeXN0ZW1fcm9vdCBhbmQKKyAgICAgICAgIHRhcmdldF9zeXNyb290X3N1ZmZpeC4KKysgJXIgICAgIE91dHB1dCB0aGUgYmFzZSBwYXRoIHRhcmdldF9yZWxvY2F0YWJsZV9wcmVmaXgKKyAgJVMgICAgIHByb2Nlc3MgU1RBUlRGSUxFX1NQRUMgYXMgYSBzcGVjLiAgQSBjYXBpdGFsIFMgaXMgYWN0dWFsbHkgdXNlZCBoZXJlLgorICAlRSAgICAgcHJvY2VzcyBFTkRGSUxFX1NQRUMgYXMgYSBzcGVjLiAgQSBjYXBpdGFsIEUgaXMgYWN0dWFsbHkgdXNlZCBoZXJlLgorICAlQyAgICAgcHJvY2VzcyBDUFBfU1BFQyBhcyBhIHNwZWMuCitAQCAtMTIxOCwxMCArMTIyMSwxMCBAQCBzdGF0aWMgY29uc3QgY2hhciAqZ2NjX2xpYmV4ZWNfcHJlZml4OworICAgIGdjY19leGVjX3ByZWZpeCBpcyBzZXQgYmVjYXVzZSwgaW4gdGhhdCBjYXNlLCB3ZSBrbm93IHdoZXJlIHRoZQorICAgIGNvbXBpbGVyIGhhcyBiZWVuIGluc3RhbGxlZCwgYW5kIHVzZSBwYXRocyByZWxhdGl2ZSB0byB0aGF0CisgICAgbG9jYXRpb24gaW5zdGVhZC4gICovCistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX2V4ZWNfcHJlZml4ID0gU1RBTkRBUkRfRVhFQ19QUkVGSVg7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX2xpYmV4ZWNfcHJlZml4ID0gU1RBTkRBUkRfTElCRVhFQ19QUkVGSVg7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX2JpbmRpcl9wcmVmaXggPSBTVEFOREFSRF9CSU5ESVJfUFJFRklYOworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4ID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWDsKKytzdGF0aWMgY2hhciBzdGFuZGFyZF9leGVjX3ByZWZpeFs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTVEFOREFSRF9FWEVDX1BSRUZJWDsKKytzdGF0aWMgY2hhciBzdGFuZGFyZF9saWJleGVjX3ByZWZpeFs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTVEFOREFSRF9MSUJFWEVDX1BSRUZJWDsKKytzdGF0aWMgY2hhciBzdGFuZGFyZF9iaW5kaXJfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNUQU5EQVJEX0JJTkRJUl9QUkVGSVg7Cisrc3RhdGljIGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXggPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYOworIAorIC8qIEZvciBuYXRpdmUgY29tcGlsZXJzLCB0aGVzZSBhcmUgd2VsbC1rbm93biBwYXRocyBjb250YWluaW5nCisgICAgY29tcG9uZW50cyB0aGF0IG1heSBiZSBwcm92aWRlZCBieSB0aGUgc3lzdGVtLiAgRm9yIGNyb3NzCitAQCAtMTIyOSw5ICsxMjMyLDkgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXggPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYOworIHN0YXRpYyBjb25zdCBjaGFyICptZF9leGVjX3ByZWZpeCA9IE1EX0VYRUNfUFJFRklYOworIHN0YXRpYyBjb25zdCBjaGFyICptZF9zdGFydGZpbGVfcHJlZml4ID0gTURfU1RBUlRGSUxFX1BSRUZJWDsKKyBzdGF0aWMgY29uc3QgY2hhciAqbWRfc3RhcnRmaWxlX3ByZWZpeF8xID0gTURfU1RBUlRGSUxFX1BSRUZJWF8xOworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzEKKytzdGF0aWMgY2hhciBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzFbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpCisgICA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMTsKKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeF8yCisrc3RhdGljIGNoYXIgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeF8yWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKQorICAgPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzI7CisgCisgLyogQSByZWxhdGl2ZSBwYXRoIHRvIGJlIHVzZWQgaW4gZmluZGluZyB0aGUgbG9jYXRpb24gb2YgdG9vbHMKK0BAIC01MzA1LDYgKzUzMDgsMTEgQEAgZG9fc3BlY18xIChjb25zdCBjaGFyICpzcGVjLCBpbnQgaW5zd2l0Y2gsIGNvbnN0IGNoYXIgKnNvZnRfbWF0Y2hlZF9wYXJ0KQorIAkgICAgICB9CisgCSAgICBicmVhazsKKyAKKysgICAgICAgICAgY2FzZSAncic6CisrICAgICAgICAgICAgICBvYnN0YWNrX2dyb3cgKCZvYnN0YWNrLCB0YXJnZXRfcmVsb2NhdGFibGVfcHJlZml4LAorKwkJICAgICAgc3RybGVuICh0YXJnZXRfcmVsb2NhdGFibGVfcHJlZml4KSk7CisrICAgICAgICAgICAgYnJlYWs7CisrCisgCSAgY2FzZSAnUyc6CisgCSAgICB2YWx1ZSA9IGRvX3NwZWNfMSAoc3RhcnRmaWxlX3NwZWMsIDAsIE5VTEwpOworIAkgICAgaWYgKHZhbHVlICE9IDApCisKK2RpZmYgLS1naXQgYS9nY2MvY3BwZGVmYXVsdC5jIGIvZ2NjL2NwcGRlZmF1bHQuYworaW5kZXggZGFkNjllNi4uY2Y0M2YyOCAxMDA2NDQKKy0tLSBhL2djYy9jcHBkZWZhdWx0LmMKKysrKyBiL2djYy9jcHBkZWZhdWx0LmMKK0BAIC0zNSw2ICszNSwzMCBAQAorICMgdW5kZWYgQ1JPU1NfSU5DTFVERV9ESVIKKyAjZW5kaWYKKyAKKytzdGF0aWMgY2hhciBHUExVU1BMVVNfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gR1BMVVNQTFVTX0lOQ0xVREVfRElSOworK3N0YXRpYyBjaGFyIEdDQ19JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBHQ0NfSU5DTFVERV9ESVI7Cisrc3RhdGljIGNoYXIgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVI7Cisrc3RhdGljIGNoYXIgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUjsKKytzdGF0aWMgY2hhciBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQ7CisrI2lmZGVmIExPQ0FMX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgTE9DQUxfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gTE9DQUxfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIFBSRUZJWF9JTkNMVURFX0RJUgorK3N0YXRpYyBjaGFyIFBSRUZJWF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBQUkVGSVhfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIEZJWEVEX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgRklYRURfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gRklYRURfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIENST1NTX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgQ1JPU1NfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gQ1JPU1NfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIFRPT0xfSU5DTFVERV9ESVIKKytzdGF0aWMgY2hhciBUT09MX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFRPT0xfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUgorK3N0YXRpYyBjaGFyIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVI7CisrI2VuZGlmCisrCisgY29uc3Qgc3RydWN0IGRlZmF1bHRfaW5jbHVkZSBjcHBfaW5jbHVkZV9kZWZhdWx0c1tdCisgI2lmZGVmIElOQ0xVREVfREVGQVVMVFMKKyA9IElOQ0xVREVfREVGQVVMVFM7CitAQCAtNDIsMzggKzY2LDM4IEBAIGNvbnN0IHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUgY3BwX2luY2x1ZGVfZGVmYXVsdHNbXQorID0geworICNpZmRlZiBHUExVU1BMVVNfSU5DTFVERV9ESVIKKyAgICAgLyogUGljayB1cCBHTlUgQysrIGdlbmVyaWMgaW5jbHVkZSBmaWxlcy4gICovCistICAgIHsgR1BMVVNQTFVTX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwKKysgICAgeyBHUExVU1BMVVNfSU5DTFVERV9ESVJWQVIsICJHKysiLCAxLCAxLAorICAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUgorICAgICAvKiBQaWNrIHVwIEdOVSBDKysgdGFyZ2V0LWRlcGVuZGVudCBpbmNsdWRlIGZpbGVzLiAgKi8KKy0gICAgeyBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUiwgIkcrKyIsIDEsIDEsCisrICAgIHsgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVJWQVIsICJHKysiLCAxLCAxLAorICAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMSB9LAorICNlbmRpZgorICNpZmRlZiBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVIKKyAgICAgLyogUGljayB1cCBHTlUgQysrIGJhY2t3YXJkIGFuZCBkZXByZWNhdGVkIGluY2x1ZGUgZmlsZXMuICAqLworLSAgICB7IEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUiwgIkcrKyIsIDEsIDEsCisrICAgIHsgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSVkFSLCAiRysrIiwgMSwgMSwKKyAgICAgICBHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1QsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgR0NDX0lOQ0xVREVfRElSCisgICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzLiAgKi8KKy0gICAgeyBHQ0NfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCisrICAgIHsgR0NDX0lOQ0xVREVfRElSVkFSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUCisgICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzIHVuZGVyIHRoZSBzcGVjaWZpZWQgc3lzcm9vdC4gICovCistICAgIHsgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQsICJHQ0MiLCAwLCAwLCAxLCAwIH0sCisrICAgIHsgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yVkFSLCAiR0NDIiwgMCwgMCwgMSwgMCB9LAorICNlbmRpZgorICNpZmRlZiBMT0NBTF9JTkNMVURFX0RJUgorICAgICAvKiAvdXNyL2xvY2FsL2luY2x1ZGUgY29tZXMgYmVmb3JlIHRoZSBmaXhpbmNsdWRlZCBoZWFkZXIgZmlsZXMuICAqLworLSAgICB7IExPQ0FMX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAxLCAyIH0sCistICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDAgfSwKKysgICAgeyBMT0NBTF9JTkNMVURFX0RJUlZBUiwgMCwgMCwgMSwgMSwgMiB9LAorKyAgICB7IExPQ0FMX0lOQ0xVREVfRElSVkFSLCAwLCAwLCAxLCAxLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIFBSRUZJWF9JTkNMVURFX0RJUgorLSAgICB7IFBSRUZJWF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMCwgMCB9LAorKyAgICB7IFBSRUZJWF9JTkNMVURFX0RJUlZBUiwgMCwgMCwgMSwgMCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBGSVhFRF9JTkNMVURFX0RJUgorICAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGZpeGluY2x1ZGVzLiAgKi8KKy0gICAgeyBGSVhFRF9JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsCisrICAgIHsgRklYRURfSU5DTFVERV9ESVJWQVIsICJHQ0MiLCAwLCAwLCAwLAorICAgICAgIC8qIEEgbXVsdGlsaWIgc3VmZml4IG5lZWRzIGFkZGluZyBpZiBkaWZmZXJlbnQgbXVsdGlsaWJzIHVzZQorIAkgZGlmZmVyZW50IGhlYWRlcnMuICAqLworICNpZmRlZiBTWVNST09UX0hFQURFUlNfU1VGRklYX1NQRUMKK0BAIC04NSwxNiArMTA5LDE2IEBAIGNvbnN0IHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUgY3BwX2luY2x1ZGVfZGVmYXVsdHNbXQorICNlbmRpZgorICNpZmRlZiBDUk9TU19JTkNMVURFX0RJUgorICAgICAvKiBPbmUgcGxhY2UgdGhlIHRhcmdldCBzeXN0ZW0ncyBoZWFkZXJzIG1pZ2h0IGJlLiAgKi8KKy0gICAgeyBDUk9TU19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKysgICAgeyBDUk9TU19JTkNMVURFX0RJUlZBUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgVE9PTF9JTkNMVURFX0RJUgorICAgICAvKiBBbm90aGVyIHBsYWNlIHRoZSB0YXJnZXQgc3lzdGVtJ3MgaGVhZGVycyBtaWdodCBiZS4gICovCistICAgIHsgVE9PTF9JTkNMVURFX0RJUiwgIkJJTlVUSUxTIiwgMCwgMSwgMCwgMCB9LAorKyAgICB7IFRPT0xfSU5DTFVERV9ESVJWQVIsICJCSU5VVElMUyIsIDAsIDEsIDAsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSCisgICAgIC8qIC91c3IvaW5jbHVkZSBjb21lcyBkZWFkIGxhc3QuICAqLworLSAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUiwgTkFUSVZFX1NZU1RFTV9IRUFERVJfQ09NUE9ORU5ULCAwLCAwLCAxLCAyIH0sCistICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSLCBOQVRJVkVfU1lTVEVNX0hFQURFUl9DT01QT05FTlQsIDAsIDAsIDEsIDAgfSwKKysgICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVJWQVIsIE5BVElWRV9TWVNURU1fSEVBREVSX0NPTVBPTkVOVCwgMCwgMCwgMSwgMiB9LAorKyAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUlZBUiwgTkFUSVZFX1NZU1RFTV9IRUFERVJfQ09NUE9ORU5ULCAwLCAwLCAxLCAwIH0sCisgI2VuZGlmCisgICAgIHsgMCwgMCwgMCwgMCwgMCwgMCB9CisgICB9OworZGlmZiAtLWdpdCBhL2djYy9jcHBkZWZhdWx0LmggYi9nY2MvY3BwZGVmYXVsdC5oCitpbmRleCAzMGI2ZmVkLi4yZWY5NmI3IDEwMDY0NAorLS0tIGEvZ2NjL2NwcGRlZmF1bHQuaAorKysrIGIvZ2NjL2NwcGRlZmF1bHQuaAorQEAgLTMzLDcgKzMzLDggQEAKKyAKKyBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlCisgeworLSAgY29uc3QgY2hhciAqY29uc3QgZm5hbWU7CS8qIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkuICAqLworKyAgY29uc3QgY2hhciAqZm5hbWU7ICAgICAvKiBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5LiAgKi8KKysKKyAgIGNvbnN0IGNoYXIgKmNvbnN0IGNvbXBvbmVudDsJLyogVGhlIGNvbXBvbmVudCBjb250YWluaW5nIHRoZSBkaXJlY3RvcnkKKyAJCQkJICAgKHNlZSB1cGRhdGVfcGF0aCBpbiBwcmVmaXguYykgKi8KKyAgIGNvbnN0IGNoYXIgY3BsdXNwbHVzOwkJLyogT25seSBsb29rIGhlcmUgaWYgd2UncmUgY29tcGlsaW5nIEMrKy4gICovCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDY0LWhhbmRsZS10YXJnZXQtc3lzcm9vdC1tdWx0aWxpYi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjQtaGFuZGxlLXRhcmdldC1zeXNyb290LW11bHRpbGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNTY5ODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDY0LWhhbmRsZS10YXJnZXQtc3lzcm9vdC1tdWx0aWxpYi5wYXRjaApAQCAtMCwwICsxLDg4IEBACitTZWFyY2ggdGFyZ2V0IHN5c3Jvb3QgZ2NjIHZlcnNpb24gc3BlY2lmaWMgZGlycyB3aXRoIG11bHRpbGliLgorCitXZSBpbnN0YWxsIHRoZSBnY2MgbGlicmFyaWVzIChzdWNoIGFzIGNydGJlZ2luLnApIGludG8KKzxzeXNyb290PjxsaWJkaXI+Lzx0YXJnZXQtc3lzPi81LjIuMC8KK3doaWNoIGlzIGEgZGVmYXVsdCBzZWFyY2ggcGF0aCBmb3IgR0NDIChha2EgbXVsdGlfc3VmZml4IGluIHRoZSAKK2NvZGUgYmVsb3cpLiA8dGFyZ2V0LXN5cz4gaXMgJ21hY2hpbmUnIGluIGdjYydzIHRlcm1pbm9sb2d5LiBXZSB1c2UKK3RoZXNlIGRpcmVjdG9yaWVzIHNvIHRoYXQgbXVsdGlwbGUgZ2NjIHZlcnNpb25zIGNvdWxkIGluIHRoZW9yeSAKK2NvLWV4aXN0IG9uIHRhcmdldC4KKworV2Ugb25seSB3YW50IHRvIGJ1aWxkIG9uZSBnY2MtY3Jvc3MtY2FuYWRpYW4gcGVyIGFyY2ggYW5kIGhhdmUgdGhpcyB3b3JrIAorZm9yIGFsbCBtdWx0aWxpYnMuIDx0YXJnZXQtc3lzPiBjYW4gYmUgaGFuZGxlZCBieSBtYXBwaW5nIHRoZSBtdWx0aWxpYgorPHRhcmdldC1zeXM+IHRvIHRoZSBvbmUgdXNlZCBieSBnY2MtY3Jvc3MtY2FuYWRpYW4sIGUuZy4gbWlwczY0LXBvbGttbGxpYjMyLWxpbnV4IAoraXMgc3ltbGlua2VkIHRvIGJ5IG1pcHM2NC1wb2t5LWxpbnV4LgorCitUaGUgZGVmYXVsdCBnY2Mgc2VhcmNoIHBhdGggaW4gdGhlIHRhcmdldCBzeXNyb290IGZvciBhICJsaWI2NCIgbXV0bGlsaWIgaXM6CisKKzxzeXNyb290Pi9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi9saWIzMi8uLi9saWI2NC8KKzxzeXNyb290Pi91c3IvbGliMzIvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vdXNyL2xpYjMyLy4uL2xpYjY0LworPHN5c3Jvb3Q+L2xpYjMyLworPHN5c3Jvb3Q+L3Vzci9saWIzMi8KKword2hpY2ggbWVhbnMgdGhhdCB0aGUgbGliMzIgY3J0YmVnaW4ubyB3aWxsIGJlIGZvdW5kIGFuZCB0aGUgbGliNjQgb25lcword2lsbCBub3Qgd2hpY2ggbGVhZHMgdG8gY29tcGlsZXIgZmFpbHVyZXMuCisKK1RoaXMgcGF0Y2ggaW5qZWN0cyBhIG11bHRpbGliIHZlcnNpb24gb2YgdGhhdCBwYXRoIGZpcnN0IHNvIHRoZSBsaWI2NAorYmluYXJpZXMgY2FuIGJlIGZvdW5kIGZpcnN0LiBXaXRoIHRoaXMgY2hhbmdlIHRoZSBzZWFyY2ggcGF0aCBiZWNvbWVzOgorCis8c3lzcm9vdD4vbGliMzIvLi4vbGliNjQvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vbGliMzIvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vbGliMzIvLi4vbGliNjQvCis8c3lzcm9vdD4vdXNyL2xpYjMyLy4uL2xpYjY0L21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L3Vzci9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi91c3IvbGliMzIvLi4vbGliNjQvCis8c3lzcm9vdD4vbGliMzIvCis8c3lzcm9vdD4vdXNyL2xpYjMyLworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1JQIDIwMTUvNy8zMQorCitJbmRleDogZ2NjLTUuMi4wL2djYy9nY2MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy01LjIuMC5vcmlnL2djYy9nY2MuYworKysrIGdjYy01LjIuMC9nY2MvZ2NjLmMKK0BAIC0yMzA1LDcgKzIzMDUsNyBAQCBmb3JfZWFjaF9wYXRoIChjb25zdCBzdHJ1Y3QgcGF0aF9wcmVmaXgKKyAgICAgICBpZiAocGF0aCA9PSBOVUxMKQorIAl7CisgCSAgbGVuID0gcGF0aHMtPm1heF9sZW4gKyBleHRyYV9zcGFjZSArIDE7CistCSAgbGVuICs9IE1BWCAoTUFYIChzdWZmaXhfbGVuLCBtdWx0aV9vc19kaXJfbGVuKSwgbXVsdGlhcmNoX2xlbik7CisrCSAgbGVuICs9IE1BWCAoKHN1ZmZpeF9sZW4gKyBtdWx0aV9vc19kaXJfbGVuKSwgbXVsdGlhcmNoX2xlbik7CisgCSAgcGF0aCA9IFhORVdWRUMgKGNoYXIsIGxlbik7CisgCX0KKyAKK0BAIC0yMzE3LDYgKzIzMTcsMzMgQEAgZm9yX2VhY2hfcGF0aCAoY29uc3Qgc3RydWN0IHBhdGhfcHJlZml4CisgCSAgLyogTG9vayBmaXJzdCBpbiBNQUNISU5FL1ZFUlNJT04gc3ViZGlyZWN0b3J5LiAgKi8KKyAJICBpZiAoIXNraXBfbXVsdGlfZGlyKQorIAkgICAgeworKwkgICAgICBpZiAoIShwbC0+b3NfbXVsdGlsaWIgPyBza2lwX211bHRpX29zX2RpciA6IHNraXBfbXVsdGlfZGlyKSkKKysJICAgICAgICB7CisrCSAgICAgICAgICBjb25zdCBjaGFyICp0aGlzX211bHRpOworKwkgICAgICAgICAgc2l6ZV90IHRoaXNfbXVsdGlfbGVuOworKworKwkgICAgICAgICAgaWYgKHBsLT5vc19tdWx0aWxpYikKKysJCSAgICB7CisrCQkgICAgICB0aGlzX211bHRpID0gbXVsdGlfb3NfZGlyOworKwkJICAgICAgdGhpc19tdWx0aV9sZW4gPSBtdWx0aV9vc19kaXJfbGVuOworKwkJICAgIH0KKysJICAgICAgICAgIGVsc2UKKysJCSAgICB7CisrCQkgICAgICB0aGlzX211bHRpID0gbXVsdGlfZGlyOworKwkJICAgICAgdGhpc19tdWx0aV9sZW4gPSBtdWx0aV9kaXJfbGVuOworKwkJICAgIH0KKysKKysJICAgICAgICAgIC8qIExvb2sgaW4gbXVsdGlsaWIgTUFDSElORS9WRVJTSU9OIHN1YmRpcmVjdG9yeSBmaXJzdCAqLworKwkgICAgICAgICAgaWYgKHRoaXNfbXVsdGlfbGVuKQorKwkgICAgICAgICAgICB7CisrCQkgICAgICBtZW1jcHkgKHBhdGggKyBsZW4sIHRoaXNfbXVsdGksIHRoaXNfbXVsdGlfbGVuICsgMSk7CisrCSAgICAgICAgICAgICAgbWVtY3B5IChwYXRoICsgbGVuICsgdGhpc19tdWx0aV9sZW4sIG11bHRpX3N1ZmZpeCwgc3VmZml4X2xlbiArIDEpOworKwkgICAgICAgICAgICAgIHJldCA9IGNhbGxiYWNrIChwYXRoLCBjYWxsYmFja19pbmZvKTsKKysJICAgICAgICAgICAgICAgIGlmIChyZXQpCisrCQkgICAgICAgICAgYnJlYWs7CisrCSAgICAgICAgICAgIH0KKysJICAgICAgICB9CisrCisgCSAgICAgIG1lbWNweSAocGF0aCArIGxlbiwgbXVsdGlfc3VmZml4LCBzdWZmaXhfbGVuICsgMSk7CisgCSAgICAgIHJldCA9IGNhbGxiYWNrIChwYXRoLCBjYWxsYmFja19pbmZvKTsKKyAJICAgICAgaWYgKHJldCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjkxZjU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIuaW5jCkBAIC0wLDAgKzEsMTIwIEBACityZXF1aXJlIGdjYy1jb21tb24uaW5jCisKKyMgVGhpcmQgZGlnaXQgaW4gUFYgc2hvdWxkIGJlIGluY3JlbWVudGVkIGFmdGVyIGEgbWlub3IgcmVsZWFzZQorCitQViA9ICI1LjIuMCIKKworI1NOQVAgPSAiNS0yMDE1MDQwNSIKKworIyBCSU5WIHNob3VsZCBiZSBpbmNyZW1lbnRlZCB0byBhIHJldmlzaW9uIGFmdGVyIGEgbWlub3IgZ2NjIHJlbGVhc2UKKworQklOViA9ICI1LjIuMCIKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vZ2NjLTUuMjoke0ZJTEVfRElSTkFNRX0vZ2NjLTUuMi9iYWNrcG9ydDoiCisKK0RFUEVORFMgPSsgIm1wZnIgZ21wIGxpYm1wYyB6bGliIgorTkFUSVZFREVQUyA9ICJtcGZyLW5hdGl2ZSBnbXAtbmF0aXZlIGxpYm1wYy1uYXRpdmUgemxpYi1uYXRpdmUiCisKK0xJQ0VOU0UgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24gJiBHUEx2MyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJcCisgICAgZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKKyAgICBmaWxlOi8vQ09QWUlORzM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICBmaWxlOi8vQ09QWUlORzMuTElCO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiBcCisgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCisgICAgZmlsZTovL0NPUFlJTkcuUlVOVElNRTttZDU9ZmU2MGQ4NzA0ODU2N2Q0ZmU4YzhhMGVkMjQ0OGJjYzggXAorIgorI0JBU0VVUkkgPSAiaHR0cDovL3d3dy5uZXRndWxsLmNvbS9nY2Mvc25hcHNob3RzLyR7U05BUH0vZ2NjLSR7U05BUH0udGFyLmJ6MiIKK0JBU0VVUkkgPSAiJHtHTlVfTUlSUk9SfS9nY2MvZ2NjLSR7UFZ9L2djYy0ke1BWfS50YXIuYnoyIgorU1JDX1VSSVttZDVzdW1dID0gImE1MWJjZmViM2RhN2RkNGM2MjNlMjcyMDdlZDQzNDY3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVmODM1YjA0YjVmN2RkNGY0ZDJkYzk2MTkwZWMxNjIxYjhkODlmMmRjNmY2MzhmOWY4YmMxYjEwMTRiYThjYWQiCisKK1NSQ19VUkkgPSAiXAorICAgICAgICAgICAke0JBU0VVUkl9IFwKKyAgICAgICAgICAgJHtCQUNLUE9SVFN9IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLXVjbGliYy1jb25mLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDktYzk5LXNucHJpbnRmLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTAtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMS1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMi1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEzLTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTQtb3B0aW9uYWwtbGlic3RkYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE1LWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE2LUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE4LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTktbGliZ2NjLXNqbGotY2hlY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMC1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIxLU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMi1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjMtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjQtRGlzYWJsZS1zZHQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNS1saWJ0b29sLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjYtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI3LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyOC1Bdm9pZC11c2luZy1saWJkaXItZnJvbS0ubGEtd2hpY2gtdXN1YWxseS1wb2ludHMtdG8tLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjktZXhwb3J0LUNQUC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDMwLUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzMS1EaXNhYmxlLXRoZS1NVUxUSUxJQl9PU0RJUk5BTUVTLWFuZC1vdGhlci1tdWx0aWxpYi1vLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzItRW5zdXJlLXRhcmdldC1nY2MtaGVhZGVycy1jYW4tYmUtaW5jbHVkZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzMy1nY2MtNC44LXdvbi10LWJ1aWxkLXdpdGgtZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzQtRG9uLXQtc2VhcmNoLWhvc3QtZGlyZWN0b3J5LWR1cmluZy1yZWxpbmstaWYtaW5zdF9wci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDM1LURvbnQtbGluay10aGUtcGx1Z2lucy13aXRoLWxpYmdvbXAtZXhwbGljaXRseS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDM2LVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzNy1wcjY1Nzc5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzgtZml4LWcrKy1zeXNyb290LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzktbGliY2MxLWZpeC1saWJjYzEtcy1pbnN0YWxsLXBhdGgtYW5kLXJwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwNDAtbmF0aXZlc2RrLWdjYy1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwNDEtaGFuZGxlLXRhcmdldC1zeXNyb290LW11bHRpbGliLnBhdGNoIFwKKyAgICAgICAgICAiCisKK0JBQ0tQT1JUUyA9ICIiCisjUyA9ICIke1RNUERJUn0vd29yay1zaGFyZWQvZ2NjLSR7UFZ9LSR7UFJ9L2djYy0ke1NOQVB9IgorUyA9ICIke1RNUERJUn0vd29yay1zaGFyZWQvZ2NjLSR7UFZ9LSR7UFJ9L2djYy0ke1BWfSIKK0IgPSAiJHtXT1JLRElSfS9nY2MtJHtQVn0vYnVpbGQuJHtIT1NUX1NZU30uJHtUQVJHRVRfU1lTfSIKKworIyBMYW5ndWFnZSBPdmVycmlkZXMKK0ZPUlRSQU4gPSAiIgorSkFWQSA9ICIiCisKK0xUTyA9ICItLWVuYWJsZS1sdG8iCisKK0VYVFJBX09FQ09ORl9CQVNFID0gIlwKKyAgICAke0xUT30gXAorICAgIC0tZW5hYmxlLWxpYnNzcCBcCisgICAgLS1kaXNhYmxlLWJvb3RzdHJhcCBcCisgICAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAorICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCisgICAgLS13aXRoLWxpbmtlci1oYXNoLXN0eWxlPSR7TElOS0VSX0hBU0hfU1RZTEV9IFwKKyAgICAtLWVuYWJsZS1saW5rZXItYnVpbGQtaWQgXAorICAgIC0td2l0aC1wcGw9bm8gXAorICAgIC0td2l0aC1jbG9vZz1ubyBcCisgICAgLS1lbmFibGUtY2hlY2tpbmc9cmVsZWFzZSBcCisgICAgLS1lbmFibGUtY2hlYWRlcnM9Y19nbG9iYWwgXAorIgorCitFWFRSQV9PRUNPTkZfSU5JVElBTCA9ICJcCisgICAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAorICAgIC0tZGlzYWJsZS1saWJnb21wIFwKKyAgICAtLWRpc2FibGUtbGlic3NwIFwKKyAgICAtLWRpc2FibGUtbGlicXVhZG1hdGggXAorICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCisgICAgLS1kaXNhYmxlLWx0byBcCisgICAgLS1kaXNhYmxlLXBsdWdpbiBcCisgICAgLS1lbmFibGUtZGVjaW1hbC1mbG9hdD1ubyBcCisiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0tZGlzYWJsZS1kZWNpbWFsLWZsb2F0ICIKKworRVhUUkFfT0VDT05GX1BBVEhTID0gIlwKKyAgICAtLXdpdGgtZ3h4LWluY2x1ZGUtZGlyPS9ub3QvZXhpc3R7dGFyZ2V0X2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9IFwKKyAgICAtLXdpdGgtc3lzcm9vdD0vbm90L2V4aXN0IFwKKyAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNzY2ZjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSBhMGZlZTBjZWUzZDRiZDRhYWIxZTNhOGUwNDQ0NmY5OWQ5MThjNGZmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6Mzc6MTEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwMS8zNV0gZ2NjLTQuMy4xOiBBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGNvbmZpZ3VyZSAgICB8IDIgKy0KKyBjb25maWd1cmUuYWMgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDc2MTZmODguLjUwZTdjYmMgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTc0NjQsNyArNzQ2NCw3IEBAIGZpCisgIyBmb3IgdGFyZ2V0X2FsaWFzIGFuZCBnY2MgZG9lc24ndCBtYW5hZ2UgaXQgY29uc2lzdGVudGx5LgorIHRhcmdldF9jb25maWdhcmdzPSItLWNhY2hlLWZpbGU9Li9jb25maWcuY2FjaGUgJHt0YXJnZXRfY29uZmlnYXJnc30iCisgCistRkxBR1NfRk9SX1RBUkdFVD0KKytGTEFHU19GT1JfVEFSR0VUPSIkQVJDSF9GTEFHU19GT1JfVEFSR0VUIgorIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2RpcnMgIiBpbgorICAqIiBuZXdsaWIgIiopCisgICBjYXNlICIgJHRhcmdldF9jb25maWdhcmdzICIgaW4KK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDhjODVhMDguLmYzNGFmN2UgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTMxMDQsNyArMzEwNCw3IEBAIGZpCisgIyBmb3IgdGFyZ2V0X2FsaWFzIGFuZCBnY2MgZG9lc24ndCBtYW5hZ2UgaXQgY29uc2lzdGVudGx5LgorIHRhcmdldF9jb25maWdhcmdzPSItLWNhY2hlLWZpbGU9Li9jb25maWcuY2FjaGUgJHt0YXJnZXRfY29uZmlnYXJnc30iCisgCistRkxBR1NfRk9SX1RBUkdFVD0KKytGTEFHU19GT1JfVEFSR0VUPSIkQVJDSF9GTEFHU19GT1JfVEFSR0VUIgorIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2RpcnMgIiBpbgorICAqIiBuZXdsaWIgIiopCisgICBjYXNlICIgJHRhcmdldF9jb25maWdhcmdzICIgaW4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwMi11Y2xpYmMtY29uZi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDItdWNsaWJjLWNvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlkMzNhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDItdWNsaWJjLWNvbmYucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorRnJvbSA3NjM1MjQ4YTRjOWI1MWQ3MjNkNzIxYWNhZWViNWYyZjExOTU3OTg3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6Mzg6MjUgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwMi8zNV0gdWNsaWJjLWNvbmYKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2ggfCA0ICsrKysKKyBsaWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZyAgICAgfCA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaCBiL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAoraW5kZXggNjBiMDQ5Ny4uNmRjN2VhZCAxMDA3NTUKKy0tLSBhL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAorKysrIGIvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCitAQCAtMTA2LDYgKzEwNiwxMCBAQCBpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIC1hICRIX1JFQUxfVEFSR0VUID0gaTY4Ni1wYy1saW51eC1nbnUgXQorICB0aGVuCisgICBtYWtlIGFsbC1nZGIgYWxsLWRlamFnbnUgYWxsLWxkIHx8IGV4aXQgMQorICAgbWFrZSBpbnN0YWxsLWdkYiBpbnN0YWxsLWRlamFnbnUgaW5zdGFsbC1sZCB8fCBleGl0IDEKKytlbGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgLWEgJEhfUkVBTF9UQVJHRVQgPSBpNjg2LXBjLWxpbnV4LXVjbGliYyBdCisrIHRoZW4KKysgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCisrICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQorIGVsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCBdIDsgdGhlbgorICAgbWFrZSBib290c3RyYXAgfHwgZXhpdCAxCisgICBtYWtlIGluc3RhbGwgfHwgZXhpdCAxCitkaWZmIC0tZ2l0IGEvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcgYi9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZworaW5kZXggNzQzZDk1MS4uYWU0ZWE2MCAxMDA3NTUKKy0tLSBhL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCisrKysgYi9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZworQEAgLTYwMyw3ICs2MDMsNyBAQCBob3N0X29zPWBlY2hvICRob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKKyAKKyAjIFRyYW5zZm9ybSBsaW51eCogdG8gKi0qLWxpbnV4LWdudSosIHRvIHN1cHBvcnQgb2xkIGNvbmZpZ3VyZSBzY3JpcHRzLgorIGNhc2UgJGhvc3Rfb3MgaW4KKy1saW51eC1nbnUqKSA7OworK2xpbnV4LWdudSp8bGludXgtdWNsaWJjKikgOzsKKyBsaW51eCopIGhvc3Q9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoLiotLiotbGludXhcKVwoLipcKSQvXDEtZ251XDIvJ2AKKyBlc2FjCisgCitAQCAtMTI0Nyw3ICsxMjQ3LDcgQEAgbGludXgtZ251b2xkbGQqIHwgbGludXgtZ251YW91dCogfCBsaW51eC1nbnVjb2ZmKikKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgqKQorICAgdmVyc2lvbl90eXBlPWxpbnV4CisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIG5lZWRfdmVyc2lvbj1ubworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYTI1NGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaApAQCAtMCwwICsxLDg3IEBACitGcm9tIDNhZWU1OGFkMDQzYWYzM2FiMDBjOWNkN2JjODhmMGNhZGU4M2YyMzYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MDoxMiArMDQwMAorU3ViamVjdDogW1BBVENIIDAzLzM1XSBnY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjIHwgNSArKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaCAgfCA5ICsrKysrKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaCAgfCA5ICsrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgMjMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKK2luZGV4IDZkYTVmMjIuLjJmODVjMmYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjCitAQCAtMjYzLDUgKzI2MywxMCBAQCBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KKyAjaWZkZWYgX0dMSUJDWFhfTE9OR19ET1VCTEVfQ09NUEFUCisgI2RlZmluZSBfR0xJQkNYWF9MREJMX0NPTVBBVChkYmwsIGxkYmwpIFwKKyAgIGV4dGVybiAiQyIgdm9pZCBsZGJsICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoYWxpYXMgKCNkYmwpKSkKKysjaWZkZWYgX19VQ0xJQkNfXworKy8vIFRoaXMgaXMgYmVjYXVzZSBfX2NfbG9jYWxlIGlzIG9mIHR5cGUgX19jdHlwZV90b3VwbG93X3QqIHdoaWNoIGlzIHNob3J0IG9uIHVjbGliYy4gZm9yIGdsaWJjIGl0cyBpbnQqCisrX0dMSUJDWFhfTERCTF9DT01QQVQoX1pTdDE0X19jb252ZXJ0X3RvX3ZJZEV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BzLCBfWlN0MTRfX2NvbnZlcnRfdG9fdkllRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUHMpOworKyNlbHNlCisgX0dMSUJDWFhfTERCTF9DT01QQVQoX1pTdDE0X19jb252ZXJ0X3RvX3ZJZEV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BpLCBfWlN0MTRfX2NvbnZlcnRfdG9fdkllRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUGkpOworKyNlbmRpZgorICNlbmRpZiAvLyBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmgKK2luZGV4IGVlM2VmODYuLjdmZDU0ODUgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAorQEAgLTQwLDEzICs0MCwyMiBAQAorIAorICNpbmNsdWRlIDxjbG9jYWxlPgorIAorKyNpZmRlZiBfX1VDTElCQ19fCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2VuZGlmCisrCisgI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwCisgCisgbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCisgeworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysgIHR5cGVkZWYgX19jdHlwZV90b3VwbG93X3QqCV9fY19sb2NhbGU7CisrI2Vsc2UKKyAgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7CisrI2VuZGlmCisgCisgICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBkb3VibGUgYW5kIGxvbmcgZG91YmxlIHRvIHN0cmluZyBhbmQKKyAgIC8vIHJldHVybiBsZW5ndGggb2Ygc3RyaW5nLiAgSWYgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaAoraW5kZXggZmQ1MmI3My4uMjYyN2NmMyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCitAQCAtMzMsNiArMzMsMTEgQEAKKyAKKyAvLyBJbmZvcm1hdGlvbiBhcyBnbGVhbmVkIGZyb20gL3Vzci9pbmNsdWRlL2N0eXBlLmgKKyAKKysjaWZkZWYgX19VQ0xJQkNfXworKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNlbmRpZgorKworIG5hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQorIHsKKyBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorQEAgLTQxLDcgKzQ2LDExIEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgICBzdHJ1Y3QgY3R5cGVfYmFzZQorICAgeworICAgICAvLyBOb24tc3RhbmRhcmQgdHlwZWRlZnMuCisrI2lmZGVmIF9fVUNMSUJDX18KKysgICAgdHlwZWRlZiBjb25zdCBfX2N0eXBlX3RvdXBsb3dfdCoJX190b190eXBlOworKyNlbHNlCisgICAgIHR5cGVkZWYgY29uc3QgaW50KiAJCV9fdG9fdHlwZTsKKysjZW5kaWYKKyAKKyAgICAgLy8gTkI6IE9mZnNldHMgaW50byBjdHlwZTxjaGFyPjo6X01fdGFibGUgZm9yY2UgYSBwYXJ0aWN1bGFyIHNpemUKKyAgICAgLy8gb24gdGhlIG1hc2sgdHlwZS4gQmVjYXVzZSBvZiB0aGlzLCB3ZSBkb24ndCB1c2UgYW4gZW51bS4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOTQ3YTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2gKQEAgLTAsMCArMSwyODYyIEBACitGcm9tIDlmNzNlMDYzMTVjOTQ2MjlmYjkwMmJkOTQyMTk2NjdjZjgzMDdiOGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MTozOSArMDQwMAorU3ViamVjdDogW1BBVENIIDA0LzM1XSB1Y2xpYmMtbG9jYWxlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzcgKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggICAgICB8ICA2MyArKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyAgICAgIHwgMTYwICsrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCAxMTcgKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MgICAgICAgIHwgMzA4ICsrKysrKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgICAgICAgIHwgIDgwICsrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIHwgMzAwICsrKysrKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjICAgICAgIHwgMTAwICsrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggICAgICAgIHwgMTE4ICsrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8IDY5MiArKysrKysrKysrKysrKysrKysrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8IDE2MCArKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgNDA2ICsrKysrKysrKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCAgIHwgIDY4ICsrCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNzUgKysrCisgbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmggICAgICAgfCAgIDIgKworIGxpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhciAgICAgICAgICAgICAgICAgIHwgICAyICsKKyAxNiBmaWxlcyBjaGFuZ2VkLCAyNjg4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00IGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAoraW5kZXggYTFlMzAxZi4uMGZlOTMyNiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKKysrKyBiL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKK0BAIC0xOTgzLDYgKzE5ODMsOSBAQCBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKKyAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCisgICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgorICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgorKyAgICAgICotdWNsaWJjKikKKysgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCisrICAgICAgICA7OworICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQorIAllbmFibGVfY2xvY2FsZV9mbGFnPWdudQorIAk7OworQEAgLTIxNjcsNiArMjE3MCw0MCBAQCBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKKyAgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjCisgICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorICAgICAgIDs7CisrICAgIHVjbGliYykKKysgICAgICBBQ19NU0dfUkVTVUxUKHVjbGliYykKKysKKysgICAgICAjIERlY2xhcmUgaW50ZW50aW9uIHRvIHVzZSBnZXR0ZXh0LCBhbmQgYWRkIHN1cHBvcnQgZm9yIHNwZWNpZmljCisrICAgICAgIyBsYW5ndWFnZXMuCisrICAgICAgIyBGb3Igc29tZSByZWFzb24sIEFMTF9MSU5HVUFTIGhhcyB0byBiZSBiZWZvcmUgQU0tR05VLUdFVFRFWFQKKysgICAgICBBTExfTElOR1VBUz0iZGUgZnIiCisrCisrICAgICAgIyBEb24ndCBjYWxsIEFNLUdOVS1HRVRURVhUIGhlcmUuIEluc3RlYWQsIGFzc3VtZSBnbGliYy4KKysgICAgICBBQ19DSEVDS19QUk9HKGNoZWNrX21zZ2ZtdCwgbXNnZm10LCB5ZXMsIG5vKQorKyAgICAgIGlmIHRlc3QgeCIkY2hlY2tfbXNnZm10IiA9IHgieWVzIiAmJiB0ZXN0IHgiJGVuYWJsZV9ubHMiID0geCJ5ZXMiOyB0aGVuCisrICAgICAgICBVU0VfTkxTPXllcworKyAgICAgIGZpCisrICAgICAgIyBFeHBvcnQgdGhlIGJ1aWxkIG9iamVjdHMuCisrICAgICAgZm9yIGxpbmcgaW4gJEFMTF9MSU5HVUFTOyBkbyBcCisrICAgICAgICBnbGliY3h4X01PRklMRVM9IiRnbGliY3h4X01PRklMRVMgJGxpbmcubW8iOyBcCisrICAgICAgICBnbGliY3h4X1BPRklMRVM9IiRnbGliY3h4X1BPRklMRVMgJGxpbmcucG8iOyBcCisrICAgICAgZG9uZQorKyAgICAgIEFDX1NVQlNUKGdsaWJjeHhfTU9GSUxFUykKKysgICAgICBBQ19TVUJTVChnbGliY3h4X1BPRklMRVMpCisrCisrICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysgICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisrICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisrICAgICAgQ0NUWVBFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKyAgICAgIDs7CisgICBlc2FjCisgCisgICAjIFRoaXMgaXMgd2hlcmUgdGhlIHRlc3RzdWl0ZSBsb29rcyBmb3IgbG9jYWxlIGNhdGFsb2dzLCB1c2luZyB0aGUKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yYWUzZTRhCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK0BAIC0wLDAgKzEsNjMgQEAKKysvLyBQcm90b3R5cGVzIGZvciBHTElCQyB0aHJlYWQgbG9jYWxlIF9fLXByZWZpeGVkIGZ1bmN0aW9ucyAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLyBXcml0dGVuIGJ5IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisrI2luY2x1ZGUgPGNsb2NhbGU+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgY2xlYW4gdGhpcyB1cAorKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCisrZXh0ZXJuICJDIiBfX3R5cGVvZihubF9sYW5naW5mb19sKSBfX25sX2xhbmdpbmZvX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJjb2xsX2wpIF9fc3RyY29sbF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RyZnRpbWVfbCkgX19zdHJmdGltZV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9kX2wpIF9fc3RydG9kX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2ZfbCkgX19zdHJ0b2ZfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvbGRfbCkgX19zdHJ0b2xkX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ4ZnJtX2wpIF9fc3RyeGZybV9sOworK2V4dGVybiAiQyIgX190eXBlb2YobmV3bG9jYWxlKSBfX25ld2xvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKGZyZWVsb2NhbGUpIF9fZnJlZWxvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKGR1cGxvY2FsZSkgX19kdXBsb2NhbGU7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorK2V4dGVybiAiQyIgX190eXBlb2YoaXN3Y3R5cGVfbCkgX19pc3djdHlwZV9sOworK2V4dGVybiAiQyIgX190eXBlb2YodG93bG93ZXJfbCkgX190b3dsb3dlcl9sOworK2V4dGVybiAiQyIgX190eXBlb2YodG93dXBwZXJfbCkgX190b3d1cHBlcl9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzY29sbF9sKSBfX3djc2NvbGxfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc2Z0aW1lX2wpIF9fd2NzZnRpbWVfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc3hmcm1fbCkgX193Y3N4ZnJtX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3R5cGVfbCkgX193Y3R5cGVfbDsKKysjZW5kaWYKKysKKysjZW5kaWYgLy8gR0xJQkMgMi4zIGFuZCBsYXRlcgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjUwODFkYzEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworQEAgLTAsMCArMSwxNjAgQEAKKysvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxjZXJybm8+ICAvLyBGb3IgZXJybm8KKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxzdGRleGNlcHQ+CisrI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3N0cnRvbF9sKFMsIEUsIEIsIEwpICAgICAgc3RydG9sKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvdWxfbChTLCBFLCBCLCBMKSAgICAgc3RydG91bCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b2xsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvbGwoKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG91bGxfbChTLCBFLCBCLCBMKSAgICBzdHJ0b3VsbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKysjZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCisrI2RlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKysjd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworKyNkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKysjZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZmxvYXQmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2Y7CisrCSAgZWxzZQorKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fZDsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBsb25nIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19sZDsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB2b2lkCisrICBsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCSAgICBfX2NfbG9jYWxlIF9fb2xkKQorKyAgeworKyAgICBfX2Nsb2MgPSBfX25ld2xvY2FsZSgxIDw8IExDX0FMTCwgX19zLCBfX29sZCk7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgaWYgKCFfX2Nsb2MpCisrICAgICAgeworKwkvLyBUaGlzIG5hbWVkIGxvY2FsZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIE9TLgorKwlfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUgIgorKwkJCSAgICAgICJuYW1lIG5vdCB2YWxpZCIpKTsKKysgICAgICB9CisrI2VuZGlmCisrICB9CisrCisrICB2b2lkCisrICBsb2NhbGU6OmZhY2V0OjpfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKysgIHsKKysgICAgaWYgKF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKKysgICAgICBfX2ZyZWVsb2NhbGUoX19jbG9jKTsKKysgIH0KKysKKysgIF9fY19sb2NhbGUKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKysgIHsgcmV0dXJuIF9fZHVwbG9jYWxlKF9fY2xvYyk7IH0KKyt9IC8vIG5hbWVzcGFjZSBzdGQKKysKKytuYW1lc3BhY2UgX19nbnVfY3h4CisreworKyAgY29uc3QgY2hhciogY29uc3QgY2F0ZWdvcnlfbmFtZXNbNiArIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTXSA9CisrICAgIHsKKysgICAgICAiTENfQ1RZUEUiLAorKyAgICAgICJMQ19OVU1FUklDIiwKKysgICAgICAiTENfVElNRSIsCisrICAgICAgIkxDX0NPTExBVEUiLAorKyAgICAgICJMQ19NT05FVEFSWSIsCisrICAgICAgIkxDX01FU1NBR0VTIiwKKysjaWYgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgIT0gMAorKyAgICAgICJMQ19QQVBFUiIsCisrICAgICAgIkxDX05BTUUiLAorKyAgICAgICJMQ19BRERSRVNTIiwKKysgICAgICAiTENfVEVMRVBIT05FIiwKKysgICAgICAiTENfTUVBU1VSRU1FTlQiLAorKyAgICAgICJMQ19JREVOVElGSUNBVElPTiIKKysjZW5kaWYKKysgICAgfTsKKyt9CisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIGNvbnN0IGNoYXIqIGNvbnN0KiBjb25zdCBsb2NhbGU6Ol9TX2NhdGVnb3JpZXMgPSBfX2dudV9jeHg6OmNhdGVnb3J5X25hbWVzOworK30gIC8vIG5hbWVzcGFjZSBzdGQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZGEwN2MxZgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK0BAIC0wLDAgKzEsMTE3IEBACisrLy8gV3JhcHBlciBmb3IgdW5kZXJseWluZyBDLWxhbmd1YWdlIGxvY2FsaXphdGlvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjggIFN0YW5kYXJkIGxvY2FsZSBjYXRlZ29yaWVzLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaWZuZGVmIF9DX0xPQ0FMRV9ICisrI2RlZmluZSBfQ19MT0NBTEVfSCAxCisrCisrI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorKworKyNpbmNsdWRlIDxjc3RyaW5nPiAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c3RybGVuCisrI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzbnByaW50ZiBvciBzdGQ6OnNwcmludGYKKysjaW5jbHVkZSA8Y2xvY2FsZT4KKysjaW5jbHVkZSA8bGFuZ2luZm8uaD4JCS8vIEZvciBjb2RlY3Z0CisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrI2luY2x1ZGUgPGljb252Lmg+CQkvLyBGb3IgY29kZWN2dCB1c2luZyBpY29udiwgaWNvbnZfdAorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyNpbmNsdWRlIDxsaWJpbnRsLmg+IAkJLy8gRm9yIG1lc3NhZ2VzCisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgd2hhdCBpcyBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgZm9yCisrI2VuZGlmCisrI2RlZmluZSBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgMQorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBjYXRlZ29yaWVzCisrI2VuZGlmCisrLy8gI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyA2CisrI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwCisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKytuYW1lc3BhY2UgX19nbnVfY3h4CisreworKyAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworK30KKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICB0eXBlZGVmIF9fbG9jYWxlX3QJCV9fY19sb2NhbGU7CisrI2Vsc2UKKysgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7CisrI2VuZGlmCisrCisrICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBfVHYgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCisrICAvLyBzdHJpbmcuICBJZiBzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCisrICAvLyB0aGUgdW5zYWZlIHNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAorKyAgLy8gYmUgYXZvaWRlZC4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KKysgICAgaW50CisrICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsCisrCQkgICAgIGNvbnN0IGludCBfX3NpemUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKKysJCSAgICAgY29uc3QgY2hhciogX19mbXQsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fcHJlYykKKysgICAgeworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fY2xvYyk7CisrI2Vsc2UKKysJCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMpCisrICAgIHsKKysjIGlmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fb2xkKSArIDFdOworKyAgICAgIHN0ZDo6c3RyY3B5KF9fc2F2LCBfX29sZCk7CisrICAgICAgc3RkOjpzZXRsb2NhbGUoTENfQUxMLCAiQyIpOworKyMgZW5kaWYKKysjZW5kaWYKKysKKysgICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7CisrI2VsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisrI2VuZGlmCisrICAgICAgcmV0dXJuIF9fcmV0OworKyAgICB9CisrfQorKworKyNlbmRpZgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNjRhYTk2MgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworQEAgLTAsMCArMSwzMDggQEAKKysvLyBzdGQ6OmNvZGVjdnQgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuNSAtIFRlbXBsYXRlIGNsYXNzIGNvZGVjdnQKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Y3N0ZGxpYj4gIC8vIEZvciBNQl9DVVJfTUFYCisrI2luY2x1ZGUgPGNsaW1pdHM+ICAvLyBGb3IgTUJfTEVOX01BWAorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBTcGVjaWFsaXphdGlvbnMuCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAorKwkgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCisrCSBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAorKwkgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CisrICB7CisrICAgIHJlc3VsdCBfX3JldCA9IG9rOworKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysKKysgICAgLy8gd2NzbnJ0b21icyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKysgICAgLy8gaW4gY2FzZSB3ZSBmYWxsIGJhY2sgdG8gd2NydG9tYiBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogd2NzbnJ0b21icyBpcyBhIEdOVSBleHRlbnNpb24KKysgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9fZnJvbSwgX190b19uZXh0ID0gX190bzsKKysJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAorKwkgJiYgX19yZXQgPT0gb2s7KQorKyAgICAgIHsKKysJY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQgPSB3bWVtY2hyKF9fZnJvbV9uZXh0LCBMJ1wwJywKKysJCQkJCQkgICAgICBfX2Zyb21fZW5kIC0gX19mcm9tX25leHQpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7CisrCisrCV9fZnJvbSA9IF9fZnJvbV9uZXh0OworKwljb25zdCBzaXplX3QgX19jb252ID0gd2NzbnJ0b21icyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKKysJCQkJCSBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCisrCQkJCQkgX190b19lbmQgLSBfX3RvX25leHQsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gd2NydG9tYi4KKysJICAgIGZvciAoOyBfX2Zyb20gPCBfX2Zyb21fbmV4dDsgKytfX2Zyb20pCisrCSAgICAgIF9fdG9fbmV4dCArPSB3Y3J0b21iKF9fdG9fbmV4dCwgKl9fZnJvbSwgJl9fdG1wX3N0YXRlKTsKKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJICAgIF9fcmV0ID0gZXJyb3I7CisrCSAgfQorKwllbHNlIGlmIChfX2Zyb21fbmV4dCAmJiBfX2Zyb21fbmV4dCA8IF9fZnJvbV9jaHVua19lbmQpCisrCSAgeworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgIH0KKysKKysJaWYgKF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3JldCA9PSBvaykKKysJICB7CisrCSAgICBleHRlcm5fdHlwZSBfX2J1ZltNQl9MRU5fTUFYXTsKKysJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKKysJICAgIGNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3J0b21iKF9fYnVmLCAqX19mcm9tX25leHQsICZfX3RtcF9zdGF0ZSk7CisrCSAgICBpZiAoX19jb252ID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihfX3RvX2VuZCAtIF9fdG9fbmV4dCkpCisrCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICAgIGVsc2UKKysJICAgICAgeworKwkJbWVtY3B5KF9fdG9fbmV4dCwgX19idWYsIF9fY29udik7CisrCQlfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCQlfX3RvX25leHQgKz0gX19jb252OworKwkJKytfX2Zyb21fbmV4dDsKKysJICAgICAgfQorKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorKwlpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAorKwlpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKKysgIHsKKysgICAgcmVzdWx0IF9fcmV0ID0gb2s7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIHN0b3JlIGEgTCdcMCcgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KKysgICAgLy8gTkI6IG1ic25ydG93Y3MgaXMgYSBHTlUgZXh0ZW5zaW9uCisrICAgIGZvciAoX19mcm9tX25leHQgPSBfX2Zyb20sIF9fdG9fbmV4dCA9IF9fdG87CisrCSBfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX190b19uZXh0IDwgX190b19lbmQKKysJICYmIF9fcmV0ID09IG9rOykKKysgICAgICB7CisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOworKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tX25leHQsICdcMCcsCisrCQkJCQkJCQkgIF9fZnJvbV9lbmQKKysJCQkJCQkJCSAgLSBfX2Zyb21fbmV4dCkpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7CisrCisrCV9fZnJvbSA9IF9fZnJvbV9uZXh0OworKwlzaXplX3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKKysJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbV9uZXh0LAorKwkJCQkgICBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyBtYnJ0b3djLgorKwkgICAgZm9yICg7OyArK19fdG9fbmV4dCwgX19mcm9tICs9IF9fY29udikKKysJICAgICAgeworKwkJX19jb252ID0gbWJydG93YyhfX3RvX25leHQsIF9fZnJvbSwgX19mcm9tX2VuZCAtIF9fZnJvbSwKKysJCQkJICZfX3RtcF9zdGF0ZSk7CisrCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCisrCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQorKwkJICBicmVhazsKKysJICAgICAgfQorKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb207CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCSAgICBfX3JldCA9IGVycm9yOworKwkgIH0KKysJZWxzZSBpZiAoX19mcm9tX25leHQgJiYgX19mcm9tX25leHQgPCBfX2Zyb21fY2h1bmtfZW5kKQorKwkgIHsKKysJICAgIC8vIEl0IGlzIHVuY2xlYXIgd2hhdCB0byByZXR1cm4gaW4gdGhpcyBjYXNlIChzZWUgRFIgMzgyKS4KKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb21fY2h1bmtfZW5kOworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICB9CisrCisrCWlmIChfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX19yZXQgPT0gb2spCisrCSAgeworKwkgICAgaWYgKF9fdG9fbmV4dCA8IF9fdG9fZW5kKQorKwkgICAgICB7CisrCQkvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncworKwkJX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkJKytfX2Zyb21fbmV4dDsKKysJCSpfX3RvX25leHQrKyA9IEwnXDAnOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgaW50CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCisrICB7CisrICAgIC8vIFhYWCBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCB0aGUgZW5jb2RpbmcgaXMKKysgICAgLy8gc3RhdGVsZXNzIGFuZCBpcyBlaXRoZXIgc2luZ2xlLWJ5dGUgb3IgdmFyaWFibGUtd2lkdGguCisrICAgIGludCBfX3JldCA9IDA7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKyAgICBpZiAoTUJfQ1VSX01BWCA9PSAxKQorKyAgICAgIF9fcmV0ID0gMTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGludAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKyAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncy4KKysgICAgaW50IF9fcmV0ID0gTUJfQ1VSX01BWDsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGludAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2xlbmd0aChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAorKwkgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0CisrICB7CisrICAgIGludCBfX3JldCA9IDA7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIGFkdmFuY2UgcGFzdCBpdCBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KKysKKysgICAgLy8gQSBkdW1teSBpbnRlcm5hbCBidWZmZXIgaXMgbmVlZGVkIGluIG9yZGVyIGZvciBtYnNucnRvY3dzIHRvIGNvbnNpZGVyCisrICAgIC8vIGl0cyBmb3VydGggcGFyYW1ldGVyIChpdCB3b3VsZG4ndCB3aXRoIE5VTEwgYXMgZmlyc3QgcGFyYW1ldGVyKS4KKysgICAgd2NoYXJfdCogX190byA9IHN0YXRpY19jYXN0PHdjaGFyX3QqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZih3Y2hhcl90KQorKwkJCQkJCQkgICAqIF9fbWF4KSk7CisrICAgIHdoaWxlIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKKysgICAgICB7CisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOworKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tLCAnXDAnLAorKwkJCQkJCQkJICBfX2VuZAorKwkJCQkJCQkJICAtIF9fZnJvbSkpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZW5kOworKworKwljb25zdCBleHRlcm5fdHlwZSogX190bXBfZnJvbSA9IF9fZnJvbTsKKysJc2l6ZV90IF9fY29udiA9IG1ic25ydG93Y3MoX190bywgJl9fZnJvbSwKKysJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbSwKKysJCQkJICAgX19tYXgsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gbWJydG93Yy4KKysJICAgIGZvciAoX19mcm9tID0gX190bXBfZnJvbTs7IF9fZnJvbSArPSBfX2NvbnYpCisrCSAgICAgIHsKKysJCV9fY29udiA9IG1icnRvd2MoTlVMTCwgX19mcm9tLCBfX2VuZCAtIF9fZnJvbSwKKysJCQkJICZfX3RtcF9zdGF0ZSk7CisrCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCisrCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQorKwkJICBicmVhazsKKysJICAgICAgfQorKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKKysJICAgIGJyZWFrOworKwkgIH0KKysJaWYgKCFfX2Zyb20pCisrCSAgX19mcm9tID0gX19mcm9tX2NodW5rX2VuZDsKKysKKysJX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKKysJX19tYXggLT0gX19jb252OworKworKwlpZiAoX19mcm9tIDwgX19lbmQgJiYgX19tYXgpCisrCSAgeworKwkgICAgLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MKKysJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKKysJICAgICsrX19mcm9tOworKwkgICAgKytfX3JldDsKKysJICAgIC0tX19tYXg7CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jMjY2NGE3CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDgwIEBACisrLy8gc3RkOjpjb2xsYXRlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi40LjEuMiAgY29sbGF0ZSB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKKysjZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKysjZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCisrI2RlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIFRoZXNlIGFyZSBiYXNpY2FsbHkgZXh0ZW5zaW9ucyB0byBjaGFyX3RyYWl0cywgYW5kIHBlcmhhcHMgc2hvdWxkCisrICAvLyBiZSBwdXQgdGhlcmUgaW5zdGVhZCBvZiBoZXJlLgorKyAgdGVtcGxhdGU8PgorKyAgICBpbnQKKysgICAgY29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiBfX29uZSwgY29uc3QgY2hhciogX190d28pIGNvbnN0CisrICAgIHsKKysgICAgICBpbnQgX19jbXAgPSBfX3N0cmNvbGxfbChfX29uZSwgX190d28sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOworKyAgICAgIHJldHVybiAoX19jbXAgPj4gKDggKiBzaXplb2YgKGludCkgLSAyKSkgfCAoX19jbXAgIT0gMCk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgc2l6ZV90CisrICAgIGNvbGxhdGU8Y2hhcj46Ol9NX3RyYW5zZm9ybShjaGFyKiBfX3RvLCBjb25zdCBjaGFyKiBfX2Zyb20sCisrCQkJCXNpemVfdCBfX24pIGNvbnN0CisrICAgIHsgcmV0dXJuIF9fc3RyeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICBpbnQKKysgICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fY29tcGFyZShjb25zdCB3Y2hhcl90KiBfX29uZSwKKysJCQkJIGNvbnN0IHdjaGFyX3QqIF9fdHdvKSBjb25zdAorKyAgICB7CisrICAgICAgaW50IF9fY21wID0gX193Y3Njb2xsX2woX19vbmUsIF9fdHdvLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsKKysgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDApOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHNpemVfdAorKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV90cmFuc2Zvcm0od2NoYXJfdCogX190bywgY29uc3Qgd2NoYXJfdCogX19mcm9tLAorKwkJCQkgICBzaXplX3QgX19uKSBjb25zdAorKyAgICB7IHJldHVybiBfX3djc3hmcm1fbChfX3RvLCBfX2Zyb20sIF9fbiwgX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyOTRlM2EKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDMwMCBAQAorKy8vIHN0ZDo6Y3R5cGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuMS4yICBjdHlwZSB2aXJ0dWFsIGZ1bmN0aW9ucy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICB3Y3R5cGUoKFMpKQorKyNkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgdG93dXBwZXIoKEMpKQorKyNkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgdG93bG93ZXIoKEMpKQorKyNkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAorKyAgLy8gdmFyaW91cyAvY29uZmlnL29zLyogZmlsZXMuCisrICB0ZW1wbGF0ZTw+CisrICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKysgICAgOiBjdHlwZTxjaGFyPigwLCBmYWxzZSwgX19yZWZzKQorKyAgICB7CisrICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKKysJeworKwkgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY3R5cGUpOworKwkgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZSwgX19zKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIHRoaXMtPl9NX3RvdXBwZXIgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b3VwcGVyOworKwkgIHRoaXMtPl9NX3RvbG93ZXIgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b2xvd2VyOworKwkgIHRoaXMtPl9NX3RhYmxlID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfYjsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICBjdHlwZTx3Y2hhcl90Pjo6X193bWFza190eXBlCisrICBjdHlwZTx3Y2hhcl90Pjo6X01fY29udmVydF90b193bWFzayhjb25zdCBtYXNrIF9fbSkgY29uc3QKKysgIHsKKysgICAgX193bWFza190eXBlIF9fcmV0OworKyAgICBzd2l0Y2ggKF9fbSkKKysgICAgICB7CisrICAgICAgY2FzZSBzcGFjZToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJzcGFjZSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBwcmludDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJwcmludCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBjbnRybDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJjbnRybCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSB1cHBlcjoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJ1cHBlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBsb3dlcjoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJsb3dlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBhbHBoYToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJhbHBoYSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBkaWdpdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJkaWdpdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBwdW5jdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJwdW5jdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSB4ZGlnaXQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgieGRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGFsbnVtOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImFsbnVtIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGdyYXBoOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImdyYXBoIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBkZWZhdWx0OgorKwlfX3JldCA9IF9fd21hc2tfdHlwZSgpOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvdXBwZXIod2NoYXJfdCBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfX3Rvd3VwcGVyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKyAgICAgICAgKl9fbG8gPSBfX3Rvd3VwcGVyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgICAgICsrX19sbzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvbG93ZXIod2NoYXJfdCBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfX3Rvd2xvd2VyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKyAgICAgICAgKl9fbG8gPSBfX3Rvd2xvd2VyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgICAgICsrX19sbzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgYm9vbAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9faXMobWFzayBfX20sIHdjaGFyX3QgX19jKSBjb25zdAorKyAgeworKyAgICAvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKyAgICAvLyBsaWJyYXJ5IGZvciBibGFuay4KKysgICAgYm9vbCBfX3JldCA9IGZhbHNlOworKyAgICBjb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworKyAgICBmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrICAgICAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0KKysJICAmJiBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJeworKwkgIF9fcmV0ID0gdHJ1ZTsKKysJICBicmVhazsKKysJfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9faXMoY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgbWFzayogX192ZWMpIGNvbnN0CisrICB7CisrICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytfX3ZlYywgKytfX2xvKQorKyAgICAgIHsKKysJLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysJLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CisrCW1hc2sgX19tID0gMDsKKysJZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorKwkgIGlmIChfX2lzd2N0eXBlX2woKl9fbG8sIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwkgICAgX19tIHw9IF9NX2JpdFtfX2JpdGN1cl07CisrCSpfX3ZlYyA9IF9fbTsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSAmJiAhdGhpcy0+ZG9faXMoX19tLCAqX19sbykpCisrICAgICAgKytfX2xvOworKyAgICByZXR1cm4gX19sbzsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSAmJiB0aGlzLT5kb19pcyhfX20sICpfX2xvKSAhPSAwKQorKyAgICAgICsrX19sbzsKKysgICAgcmV0dXJuIF9fbG87CisrICB9CisrCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb193aWRlbihjaGFyIF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9NX3dpZGVuW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldOyB9CisrCisrICBjb25zdCBjaGFyKgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgd2NoYXJfdCogX19kZXN0KSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKwkqX19kZXN0ID0gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG8pXTsKKysJKytfX2xvOworKwkrK19fZGVzdDsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgY2hhcgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fbmFycm93KHdjaGFyX3QgX193YywgY2hhciBfX2RmYXVsdCkgY29uc3QKKysgIHsKKysgICAgaWYgKF9fd2MgPj0gMCAmJiBfX3djIDwgMTI4ICYmIF9NX25hcnJvd19vaykKKysgICAgICByZXR1cm4gX01fbmFycm93W19fd2NdOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIGNvbnN0IGludCBfX2MgPSB3Y3RvYihfX3djKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fbmFycm93KGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIGNoYXIgX19kZmF1bHQsCisrCSAgICBjaGFyKiBfX2Rlc3QpIGNvbnN0CisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgaWYgKF9NX25hcnJvd19vaykKKysgICAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrCXsKKysJICBpZiAoKl9fbG8gPj0gMCAmJiAqX19sbyA8IDEyOCkKKysJICAgICpfX2Rlc3QgPSBfTV9uYXJyb3dbKl9fbG9dOworKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgY29uc3QgaW50IF9fYyA9IHdjdG9iKCpfX2xvKTsKKysJICAgICAgKl9fZGVzdCA9IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysJICAgIH0KKysJICArK19fbG87CisrCSAgKytfX2Rlc3Q7CisrCX0KKysgICAgZWxzZQorKyAgICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysJeworKwkgIGNvbnN0IGludCBfX2MgPSB3Y3RvYigqX19sbyk7CisrCSAgKl9fZGVzdCA9IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysJICArK19fbG87CisrCSAgKytfX2Rlc3Q7CisrCX0KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgdm9pZAorKyAgY3R5cGU8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfY3R5cGUoKQorKyAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIHdpbnRfdCBfX2k7CisrICAgIGZvciAoX19pID0gMDsgX19pIDwgMTI4OyArK19faSkKKysgICAgICB7CisrCWNvbnN0IGludCBfX2MgPSB3Y3RvYihfX2kpOworKwlpZiAoX19jID09IEVPRikKKysJICBicmVhazsKKysJZWxzZQorKwkgIF9NX25hcnJvd1tfX2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKTsKKysgICAgICB9CisrICAgIGlmIChfX2kgPT0gMTI4KQorKyAgICAgIF9NX25hcnJvd19vayA9IHRydWU7CisrICAgIGVsc2UKKysgICAgICBfTV9uYXJyb3dfb2sgPSBmYWxzZTsKKysgICAgZm9yIChzaXplX3QgX19qID0gMDsKKysJIF9faiA8IHNpemVvZihfTV93aWRlbikgLyBzaXplb2Yod2ludF90KTsgKytfX2opCisrICAgICAgX01fd2lkZW5bX19qXSA9IGJ0b3djKF9faik7CisrCisrICAgIGZvciAoc2l6ZV90IF9fayA9IDA7IF9fayA8PSAxMTsgKytfX2spCisrICAgICAgeworKwlfTV9iaXRbX19rXSA9IHN0YXRpY19jYXN0PG1hc2s+KF9JU2JpdChfX2spKTsKKysJX01fd21hc2tbX19rXSA9IF9NX2NvbnZlcnRfdG9fd21hc2soX01fYml0W19fa10pOworKyAgICAgIH0KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICB9CisrI2VuZGlmIC8vICBfR0xJQkNYWF9VU0VfV0NIQVJfVAorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTM1OTRkOQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMTAwIEBACisrLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IGdldHRleHQgc3R1ZmYKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKytleHRlcm4gIkMiIGNoYXIgKl9fZGNnZXR0ZXh0KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCQkJICAgICBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KTsKKysjdW5kZWYgZ2V0dGV4dAorKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgX19kY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorKyNlbHNlCisrI3VuZGVmIGdldHRleHQKKysjZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gU3BlY2lhbGl6YXRpb25zLgorKyAgdGVtcGxhdGU8PgorKyAgICBzdHJpbmcKKysgICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KGdldHRleHQoX19kZmF1bHQuY19zdHIoKSkpOworKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysgICAgICByZXR1cm4gc3RyaW5nKF9fbXNnKTsKKysjZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbHNlCisrICAgICAgY29uc3QgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9fZGZhdWx0LmNfc3RyKCkpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbmRpZgorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHdzdHJpbmcKKysgICAgbWVzc2FnZXM8d2NoYXJfdD46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgd3N0cmluZyYgX19kZmF1bHQpIGNvbnN0CisrICAgIHsKKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV9tZXNzYWdlcyk7CisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZWxzZQorKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZW5kaWYKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjE0MjQwNzgKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK0BAIC0wLDAgKzEsMTE4IEBACisrLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKytleHRlcm4gIkMiIGNoYXIgKl9fdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKKytleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCQkJICBjb25zdCBjaGFyICpkaXJuYW1lKTsKKysjZWxzZQorKyN1bmRlZiBfX3RleHRkb21haW4KKysjdW5kZWYgX19iaW5kdGV4dGRvbWFpbgorKyNkZWZpbmUgX190ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIF9fYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisrI2VuZGlmCisrCisrICAvLyBOb24tdmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoc2l6ZV90IF9fcmVmcykKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfZ2V0X2NfbG9jYWxlKCkpLAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfU19nZXRfY19uYW1lKCkpCisrICAgICB7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCXNpemVfdCBfX3JlZnMpCisrICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYykpLAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfX3MpCisrICAgICB7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKyAgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCisrCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CisrICAgIHsKKysgICAgICBfX2JpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CisrICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7CisrICAgIH0KKysKKysgIC8vIFZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6fm1lc3NhZ2VzKCkKKysgICAgeworKyAgICAgIGlmIChfTV9uYW1lX21lc3NhZ2VzICE9IF9TX2dldF9jX25hbWUoKSkKKysJZGVsZXRlIFtdIF9NX25hbWVfbWVzc2FnZXM7CisrICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZworKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLAorKwkJCSAgICAgIGNvbnN0IGxvY2FsZSYpIGNvbnN0CisrICAgIHsKKysgICAgICAvLyBObyBlcnJvciBjaGVja2luZyBpcyBkb25lLCBhc3N1bWUgdGhlIGNhdGFsb2cgZXhpc3RzIGFuZCBjYW4KKysgICAgICAvLyBiZSB1c2VkLgorKyAgICAgIF9fdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdm9pZAorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRhbG9nKSBjb25zdAorKyAgICB7IH0KKysKKysgICAvLyBtZXNzYWdlc19ieW5hbWUKKysgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlc19ieW5hbWU8X0NoYXJUPjo6bWVzc2FnZXNfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKysgICAgIDogbWVzc2FnZXM8X0NoYXJUPihfX3JlZnMpCisrICAgICB7CisrICAgICAgIGlmICh0aGlzLT5fTV9uYW1lX21lc3NhZ2VzICE9IGxvY2FsZTo6ZmFjZXQ6Ol9TX2dldF9jX25hbWUoKSkKKysJIGRlbGV0ZSBbXSB0aGlzLT5fTV9uYW1lX21lc3NhZ2VzOworKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKysgICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgIHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysKKysgICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKKysJIHsKKysJICAgdGhpcy0+X1NfZGVzdHJveV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrCSAgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsKKysJIH0KKysgICAgIH0KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYWE1MjczMQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsNjkyIEBACisrLy8gc3RkOjptb25leXB1bmN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi42LjMuMiAgbW9uZXlwdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBvcHRpbWl6ZSB0aGlzIGZvciB1Y2xpYmMKKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6CisrICAvLyBzcGFjZSBub25lIHN5bWJvbCBzaWduIHZhbHVlCisrICBtb25leV9iYXNlOjpwYXR0ZXJuCisrICBtb25leV9iYXNlOjpfU19jb25zdHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VkZXMsIGNoYXIgX19zcGFjZSwgY2hhciBfX3Bvc24pCisrICB7CisrICAgIHBhdHRlcm4gX19yZXQ7CisrCisrICAgIC8vIFRoaXMgaW5zYW5lbHkgY29tcGxpY2F0ZWQgcm91dGluZSBhdHRlbXB0cyB0byBjb25zdHJ1Y3QgYSB2YWxpZAorKyAgICAvLyBwYXR0ZXJuIGZvciB1c2Ugd2l0aCBtb255ZXB1bmN0LiBBIGNvdXBsZSBvZiBpbnZhcmlhbnRzOgorKworKyAgICAvLyBpZiAoX19wcmVjZWRlcykgc3ltYm9sIC0+IHZhbHVlCisrICAgIC8vIGVsc2UgdmFsdWUgLT4gc3ltYm9sCisrCisrICAgIC8vIGlmIChfX3NwYWNlKSBzcGFjZQorKyAgICAvLyBlbHNlIG5vbmUKKysKKysgICAgLy8gbm9uZSA9PSBuZXZlciBmaXJzdAorKyAgICAvLyBzcGFjZSBuZXZlciBmaXJzdCBvciBsYXN0CisrCisrICAgIC8vIEFueSBlbGVnYW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGFyZSB3ZWxjb21lLgorKyAgICBzd2l0Y2ggKF9fcG9zbikKKysgICAgICB7CisrICAgICAgY2FzZSAwOgorKyAgICAgIGNhc2UgMToKKysJLy8gMSBUaGUgc2lnbiBwcmVjZWRlcyB0aGUgdmFsdWUgYW5kIHN5bWJvbC4KKysJX19yZXQuZmllbGRbMF0gPSBzaWduOworKwlpZiAoX19zcGFjZSkKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24uCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24gYW5kIGVuZHMgd2l0aCBub25lLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgMjoKKysJLy8gMiBUaGUgc2lnbiBmb2xsb3dzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgorKwlpZiAoX19zcGFjZSkKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIGVpdGhlciBlbmRzIHdpdGggc2lnbi4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkgICAgX19yZXQuZmllbGRbM10gPSBzaWduOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gZW5kcyB3aXRoIHNpZ24gdGhlbiBub25lLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgMzoKKysJLy8gMyBUaGUgc2lnbiBpbW1lZGlhdGVseSBwcmVjZWRlcyB0aGUgc3ltYm9sLgorKwlpZiAoX19wcmVjZWRlcykKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHNpZ247CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkJX19yZXQuZmllbGRbM10gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzaWduOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgNDoKKysJLy8gNCBUaGUgc2lnbiBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBzeW1ib2wuCisrCWlmIChfX3ByZWNlZGVzKQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkgICAgX19yZXQuZmllbGRbMV0gPSBzaWduOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gc2lnbjsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysJOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysJCQkJCQkgICAgIGNvbnN0IGNoYXIqKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCB0cnVlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fVEhPVVNBTkRTX1NFUCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBpZiAoIV9fbnBvc24pCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwKKysJCQkJCQkJX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgLy8gX0ludGwgPT0gdHJ1ZQorKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfRlJBQ19ESUdJVFMsCisrCQkJCQkJICAgICAgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisrCQkJCQkJCV9fbnBvc24pOworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKwkJCQkJCSAgICAgIGNvbnN0IGNoYXIqKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCBmYWxzZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fREVDSU1BTF9QT0lOVCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX1RIT1VTQU5EU19TRVAsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBpZiAoIV9fbnBvc24pCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwKKysJCQkJCQkJX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgLy8gX0ludGwgPT0gZmFsc2UKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJCQkJCQkJX19ucG9zbik7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkJCQkJCQljb25zdCBjaGFyKikKKysjZWxzZQorKwkJCQkJCQljb25zdCBjaGFyKiBfX25hbWUpCisrI2VuZGlmCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIHRydWU+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxzZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKysJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysKKysJICBjb25zdCBjaGFyKiBfX2Nwb3NzaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NuZWdzaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NjdXJyID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOworKworKwkgIHdjaGFyX3QqIF9fd2NzX3BzID0gMDsKKysJICB3Y2hhcl90KiBfX3djc19ucyA9IDA7CisrCSAgY29uc3QgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIHRyeQorKwkgICAgeworKwkgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKysJICAgICAgc2l6ZV90IF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOworKwkgICAgICBpZiAoIV9fbnBvc24pCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7CisrCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICAgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgICAgICAvLyBfSW50bCA9PSB0cnVlLgorKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsKKysJICAgICAgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgd2NoYXJfdCogX193Y3MgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djcywgJl9fY2N1cnIsIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX193Y3M7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICAgIH0KKysJICBjYXRjaCAoLi4uKQorKwkgICAgeworKwkgICAgICBkZWxldGUgX01fZGF0YTsKKysJICAgICAgX01fZGF0YSA9IDA7CisrCSAgICAgIGRlbGV0ZSBfX3djc19wczsKKysJICAgICAgZGVsZXRlIF9fd2NzX25zOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJICAgIH0KKysKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX0ZSQUNfRElHSVRTLAorKwkJCQkJCSAgICAgIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkJCQkJCQlfX25wb3NuKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICB2b2lkCisrICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCQkJCQkJICAgICAgIGNvbnN0IGNoYXIqKQorKyNlbHNlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fbmFtZSkKKysjZW5kaWYKKysgIHsKKysgICAgaWYgKCFfTV9kYXRhKQorKyAgICAgIF9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIGZhbHNlPjsKKysKKysgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxzZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKysgICAgICAgICAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrI2VuZGlmCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrICAgICAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKworKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19DVVJSRU5DWV9TWU1CT0wsIF9fY2xvYyk7CisrCisrCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOworKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKKysJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICB0cnkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKysgICAgICAgICAgICAgIHNpemVfdCBfX2xlbjsKKysgICAgICAgICAgICAgIF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOworKyAgICAgICAgICAgICAgaWYgKF9fbGVuKQorKyAgICAgICAgICAgICAgICB7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NuZWdzaWduKTsKKysJICAgICAgaWYgKCFfX25wb3NuKQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiKCkiOworKwkgICAgICBlbHNlIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX25zID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfbnMsICZfX2NuZWdzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX193Y3NfbnM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgICAgIC8vIF9JbnRsID09IHRydWUuCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICAgIH0KKysgICAgICAgICAgY2F0Y2ggKC4uLikKKysJICAgIHsKKysJICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgICAgICAgICAgICBfTV9kYXRhID0gMDsKKysJICAgICAgZGVsZXRlIF9fd2NzX3BzOworKwkgICAgICBkZWxldGUgX193Y3NfbnM7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJICAgIH0KKysKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ucG9zbik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCisrICAgICAgICAgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsKKysgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZQorKyAgICAgICAgICAmJiB3Y3NjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgTCIoKSIpICE9IDApCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fY3Vycl9zeW1ib2w7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi44ODNlYzFhCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtMCwwICsxLDE2MCBAQAorKy8vIHN0ZDo6bnVtcHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjMuMS4yICBudW1wdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8Y2hhcj47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKysKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19udW1fYmFzZTo6X1Nfb2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19vdXRbX19pXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX291dFtfX2ldOworKworKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKERFQ0lNQUxfUE9JTlQsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChUSE9VU0FORFNfU0VQLAorKwkJCQkJCQlfX2Nsb2MpKTsKKysKKysJICAvLyBDaGVjayBmb3IgTlVMTCwgd2hpY2ggaW1wbGllcyBubyBncm91cGluZy4KKysJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSAnXDAnKQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChHUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJfQorKworKyAgICAgIC8vIE5COiBUaGVyZSBpcyBubyB3YXkgdG8gZXh0YWN0IHRoaXMgaW5mbyBmcm9tIHBvc2l4IGxvY2FsZXMuCisrICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woWUVTU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lID0gInRydWUiOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lX3NpemUgPSA0OworKyAgICAgIC8vIF9NX2ZhbHNlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChOT1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWUgPSAiZmFsc2UiOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBudW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG51bXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8d2NoYXJfdD47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKysKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysKKysJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV0pOworKworKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal0pOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIC8vIE5COiBJbiB0aGUgR05VIG1vZGVsIHdjaGFyX3QgaXMgYWx3YXlzIDMyIGJpdCB3aWRlLgorKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysKKysJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCX0KKysKKysgICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFjdCB0aGlzIGluZm8gZnJvbSBwb3NpeCBsb2NhbGVzLgorKyAgICAgIC8vIF9NX3RydWVuYW1lID0gX19ubF9sYW5naW5mb19sKFlFU1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZSA9IEwidHJ1ZSI7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7CisrICAgICAgLy8gX01fZmFsc2VuYW1lID0gX19ubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZSA9IEwiZmFsc2UiOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBudW1wdW5jdDx3Y2hhcl90Pjo6fm51bXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKyAjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lMDcwN2Q3CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDQwNiBAQAorKy8vIHN0ZDo6dGltZV9nZXQsIHN0ZDo6dGltZV9wdXQgaW1wbGVtZW50YXRpb24sIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEuMiAtIHRpbWVfZ2V0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6CisrICAgIF9NX3B1dChjaGFyKiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3QgY2hhciogX19mb3JtYXQsCisrCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3N0cmZ0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisrCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyNlbHNlCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdHJmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKyAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorKyAgICAgIGlmIChfX2xlbiA9PSAwKQorKwlfX3NbMF0gPSAnXDAnOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPGNoYXI+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOworKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSAiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSAiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2FtID0gIkFNIjsKKysJICBfTV9kYXRhLT5fTV9wbSA9ICJQTSI7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gIiI7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gIlN1bmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9ICJNb25kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSAiVHVlc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9ICJXZWRuZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSAiVGh1cnNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSAiRnJpZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gIlNhdHVyZGF5IjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gIlN1biI7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSAiTW9uIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9ICJUdWUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gIldlZCI7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSAiVGh1IjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9ICJGcmkiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gIlNhdCI7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gIkphbnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSAiRmVicnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSAiTWFyY2giOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSAiQXByaWwiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSAiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gIkp1bmUiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSAiSnVseSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9ICJBdWd1c3QiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSAiU2VwdGVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gIk9jdG9iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSAiTm92ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSAiRGVjZW1iZXIiOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9ICJKYW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gIkZlYiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSAiTWFyIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9ICJBcHIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gIk1heSI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSAiSnVuIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9ICJKdWwiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gIkF1ZyI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSAiU2VwIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9ICJPY3QiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gIk5vdiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSAiRGVjIjsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChUX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfRF9UX0ZNVCwKKysJCQkJCQkJICAgICBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtID0gX19ubF9sYW5naW5mb19sKEFNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wbSA9IF9fbmxfbGFuZ2luZm9fbChQTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKFRfRk1UX0FNUE0sIF9fY2xvYyk7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gX19ubF9sYW5naW5mb19sKERBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBfX25sX2xhbmdpbmZvX2woREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gX19ubF9sYW5naW5mb19sKERBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBfX25sX2xhbmdpbmZvX2woREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gX19ubF9sYW5naW5mb19sKERBWV83LCBfX2Nsb2MpOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gX19ubF9sYW5naW5mb19sKEFCREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNywgX19jbG9jKTsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fbmxfbGFuZ2luZm9fbChNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gX19ubF9sYW5naW5mb19sKE1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBfX25sX2xhbmdpbmZvX2woTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fbmxfbGFuZ2luZm9fbChNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gX19ubF9sYW5naW5mb19sKE1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX25sX2xhbmdpbmZvX2woTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fbmxfbGFuZ2luZm9fbChNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gX19ubF9sYW5naW5mb19sKE1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEyLCBfX2Nsb2MpOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMiwgX19jbG9jKTsKKysJfQorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46OgorKyAgICBfTV9wdXQod2NoYXJfdCogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IHdjaGFyX3QqIF9fZm9ybWF0LAorKwkgICBjb25zdCB0bSogX190bSkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKysJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrI2Vsc2UKKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHdjc2Z0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisrICAgICAgaWYgKF9fbGVuID09IDApCisrCV9fc1swXSA9IEwnXDAnOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPHdjaGFyX3Q+OworKworKyN3YXJuaW5nIHdpZGUgdGltZSBzdHVmZgorKy8vICAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOworKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gTCIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gTCIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2FtID0gTCJBTSI7CisrCSAgX01fZGF0YS0+X01fcG0gPSBMIlBNIjsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBMIiI7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gTCJTdW5kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBMIk1vbmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IEwiVHVlc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9IEwiV2VkbmVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gTCJUaHVyc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IEwiRnJpZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gTCJTYXR1cmRheSI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IEwiU3VuIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IEwiTW9uIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IEwiVHVlIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IEwiV2VkIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IEwiVGh1IjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IEwiRnJpIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IEwiU2F0IjsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBMIkphbnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBMIkZlYnJ1YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gTCJNYXJjaCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IEwiQXByaWwiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBMIk1heSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IEwiSnVuZSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IEwiSnVseSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IEwiQXVndXN0IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gTCJTZXB0ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBMIk9jdG9iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBMIk5vdmVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gTCJEZWNlbWJlciI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gTCJKYW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gTCJGZWIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gTCJNYXIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gTCJBcHIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gTCJNYXkiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gTCJKdW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gTCJKdWwiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gTCJBdWciOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gTCJTZXAiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gTCJPY3QiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gTCJOb3YiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gTCJEZWMiOworKwl9CisrI2lmIDAKKysgICAgICBlbHNlCisrCXsKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOworKworKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90ICpfX3c7IH0gX191OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9EX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dUX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1BNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wbSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1RfRk1UX0FNUE0sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX191Ll9fdzsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gX191Ll9fdzsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX191Ll9fdzsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEyLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX3UuX193OworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEyLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX191Ll9fdzsKKysJfQorKyNlbmRpZiAvLyAwCisrICAgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYmE4ZTg1OAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitAQCAtMCwwICsxLDY4IEBACisrLy8gc3RkOjp0aW1lX2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQgZnVuY3Rpb25zCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcykKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY2FjaGVfdHlwZSogX19jYWNoZSwgc2l6ZV90IF9fcmVmcykKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKF9fY2FjaGUpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCSAgICAgc2l6ZV90IF9fcmVmcykKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9fcykKKysgICAgeworKyAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX190bXA7CisrICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+Ojp+X190aW1lcHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX25hbWVfdGltZXB1bmN0ICE9IF9TX2dldF9jX25hbWUoKSkKKysJZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysgICAgfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitpbmRleCBmNWIyOGY0Li5mYmFkNjY3IDEwMDc1NQorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorQEAgLTE1OTEzLDYgKzE1OTEzLDkgQEAgZmkKKyAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCisgICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgorICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgorKyAgICAgICotdWNsaWJjKikKKysgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCisrICAgICAgICA7OworICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQorIAllbmFibGVfY2xvY2FsZV9mbGFnPWdudQorIAk7OworQEAgLTE2MTkxLDYgKzE2MTk0LDc4IEBAICRhc19lY2hvICJuZXdsaWIiID4mNjsgfQorICAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy90aW1lX21lbWJlcnMuY2MKKyAgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgICAgICAgOzsKKysgICAgdWNsaWJjKQorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1Y2xpYmMiID4mNQorKyRhc19lY2hvICJ1Y2xpYmMiID4mNjsgfQorKworKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKKysgICAgICAjIGxhbmd1YWdlcy4KKysgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAorKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKKysKKysgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgorKyAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXNnZm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgbXNnZm10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jaGVja19tc2dmbXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9IiRjaGVja19tc2dmbXQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9InllcyIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKysgIHRlc3QgLXogIiRhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCIgJiYgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9Im5vIgorK2ZpCisrZmkKKytjaGVja19tc2dmbXQ9JGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10CisraWYgdGVzdCAtbiAiJGNoZWNrX21zZ2ZtdCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY2hlY2tfbXNnZm10IiA+JjUKKyskYXNfZWNobyAiJGNoZWNrX21zZ2ZtdCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrICAgICAgaWYgdGVzdCB4IiRjaGVja19tc2dmbXQiID0geCJ5ZXMiICYmIHRlc3QgeCIkZW5hYmxlX25scyIgPSB4InllcyI7IHRoZW4KKysgICAgICAgIFVTRV9OTFM9eWVzCisrICAgICAgZmkKKysgICAgICAjIEV4cG9ydCB0aGUgYnVpbGQgb2JqZWN0cy4KKysgICAgICBmb3IgbGluZyBpbiAkQUxMX0xJTkdVQVM7IGRvIFwKKysgICAgICAgIGdsaWJjeHhfTU9GSUxFUz0iJGdsaWJjeHhfTU9GSUxFUyAkbGluZy5tbyI7IFwKKysgICAgICAgIGdsaWJjeHhfUE9GSUxFUz0iJGdsaWJjeHhfUE9GSUxFUyAkbGluZy5wbyI7IFwKKysgICAgICBkb25lCisrCisrCisrCisrICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysgICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisrICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisrICAgICAgQ0NUWVBFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKyAgICAgIDs7CisgICBlc2FjCisgCisgICAjIFRoaXMgaXMgd2hlcmUgdGhlIHRlc3RzdWl0ZSBsb29rcyBmb3IgbG9jYWxlIGNhdGFsb2dzLCB1c2luZyB0aGUKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaCBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCitpbmRleCAwNmI1ZDQ3Li43ZDNmODM1IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCitAQCAtMTAxLDcgKzEwMSw5IEBAIHVzaW5nIHN0ZDo6d21lbWNtcDsKKyB1c2luZyBzdGQ6OndtZW1jcHk7CisgdXNpbmcgc3RkOjp3bWVtbW92ZTsKKyB1c2luZyBzdGQ6OndtZW1zZXQ7CisrI2lmIF9HTElCQ1hYX0hBVkVfV0NTRlRJTUUKKyB1c2luZyBzdGQ6Ondjc2Z0aW1lOworKyNlbmRpZgorIAorICNpZiBfR0xJQkNYWF9VU0VfQzk5CisgdXNpbmcgc3RkOjp3Y3N0b2xkOworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhciBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgoraW5kZXggYWExYjJmYS4uNDVjNDYxNyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgorKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCitAQCAtMTc1LDcgKzE3NSw5IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgICB1c2luZyA6Ondjc2NvbGw7CisgICB1c2luZyA6Ondjc2NweTsKKyAgIHVzaW5nIDo6d2NzY3NwbjsKKysjaWYgX0dMSUJDWFhfSEFWRV9XQ1NGVElNRQorICAgdXNpbmcgOjp3Y3NmdGltZTsKKysjZW5kaWYKKyAgIHVzaW5nIDo6d2NzbGVuOworICAgdXNpbmcgOjp3Y3NuY2F0OworICAgdXNpbmcgOjp3Y3NuY21wOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMwNTNlYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaApAQCAtMCwwICsxLDI1NyBAQAorRnJvbSBhOGU2ODM5MTdhM2U4YTY2NDI2MzllNjVjMDZkNGQ0ZmM0NmNjOGFiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDI6MzYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNS8zNV0gdWNsaWJjLWxvY2FsZS1ub19feAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCAgICAgIHwgNDUgKysrKysrKysrKysrKysrKysrKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyAgICAgIHwgMTQgLS0tLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oICAgICAgIHwgIDEgKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgICAgICAgIHwgIDcgLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIHwgIDcgLS0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjICAgICAgIHwgIDcgKy0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggICAgICAgIHwgMTggKysrKy0tLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgICAgICAgfCAgNCAtLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgICAgICAgIHwgIDMgLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjICB8ICAzIC0tCisgMTAgZmlsZXMgY2hhbmdlZCwgNTUgaW5zZXJ0aW9ucygrKSwgNTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK2luZGV4IDJhZTNlNGEuLmU3NGZkZGYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorQEAgLTYwLDQgKzYwLDQ5IEBAIGV4dGVybiAiQyIgX190eXBlb2Yod2NzeGZybV9sKSBfX3djc3hmcm1fbDsKKyBleHRlcm4gIkMiIF9fdHlwZW9mKHdjdHlwZV9sKSBfX3djdHlwZV9sOworICNlbmRpZgorIAorKyMgZGVmaW5lIF9fbmxfbGFuZ2luZm9fbCBubF9sYW5naW5mb19sCisrIyBkZWZpbmUgX19zdHJjb2xsX2wgc3RyY29sbF9sCisrIyBkZWZpbmUgX19zdHJmdGltZV9sIHN0cmZ0aW1lX2wKKysjIGRlZmluZSBfX3N0cnRvZF9sIHN0cnRvZF9sCisrIyBkZWZpbmUgX19zdHJ0b2ZfbCBzdHJ0b2ZfbAorKyMgZGVmaW5lIF9fc3RydG9sZF9sIHN0cnRvbGRfbAorKyMgZGVmaW5lIF9fc3RyeGZybV9sIHN0cnhmcm1fbAorKyMgZGVmaW5lIF9fbmV3bG9jYWxlIG5ld2xvY2FsZQorKyMgZGVmaW5lIF9fZnJlZWxvY2FsZSBmcmVlbG9jYWxlCisrIyBkZWZpbmUgX19kdXBsb2NhbGUgZHVwbG9jYWxlCisrIyBkZWZpbmUgX191c2Vsb2NhbGUgdXNlbG9jYWxlCisrCisrIyBpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyMgIGRlZmluZSBfX2lzd2N0eXBlX2wgaXN3Y3R5cGVfbAorKyMgIGRlZmluZSBfX3Rvd2xvd2VyX2wgdG93bG93ZXJfbAorKyMgIGRlZmluZSBfX3Rvd3VwcGVyX2wgdG93dXBwZXJfbAorKyMgIGRlZmluZSBfX3djc2NvbGxfbCB3Y3Njb2xsX2wKKysjICBkZWZpbmUgX193Y3NmdGltZV9sIHdjc2Z0aW1lX2wKKysjICBkZWZpbmUgX193Y3N4ZnJtX2wgd2NzeGZybV9sCisrIyAgZGVmaW5lIF9fd2N0eXBlX2wgd2N0eXBlX2wKKysjIGVuZGlmCisrCisrI2Vsc2UKKysjIGRlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyMgZGVmaW5lIF9fc3RyY29sbF9sKFMxLCBTMiwgTCkgICAgICBzdHJjb2xsKChTMSksIChTMikpCisrIyBkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorKyMgZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorKyMgZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKysjIHdhcm5pbmcgc2hvdWxkIGR1bW15IF9fbmV3bG9jYWxlIGNoZWNrIGZvciBDfFBPU0lYID8KKysjIGRlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorKyMgZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKysjIGRlZmluZSBfX2R1cGxvY2FsZShhKSAgICAgICAgICAgICAgX19jX2xvY2FsZSgpCisrLy8jIGRlZmluZSBfX3VzZWxvY2FsZSA/CisrLy8KKysjIGlmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrIyAgZGVmaW5lIF9faXN3Y3R5cGVfbChDLCBNLCBMKSAgICAgICBpc3djdHlwZSgoQyksIChNKSkKKysjICBkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgIHRvd2xvd2VyKChDKSkKKysjICBkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgIHRvd3VwcGVyKChDKSkKKysjICBkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKysvLyMgIGRlZmluZSBfX3djc2Z0aW1lX2woUywgTSwgRiwgVCwgTCkgIHdjc2Z0aW1lKChTKSwgKE0pLCAoRiksIChUKSkKKysjICBkZWZpbmUgX193Y3N4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHdjc3hmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyMgIGRlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICAgd2N0eXBlKChTKSkKKysjIGVuZGlmCisrCisgI2VuZGlmIC8vIEdMSUJDIDIuMyBhbmQgbGF0ZXIKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK2luZGV4IDUwODFkYzEuLjIxNDMwZDAgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworQEAgLTM5LDIwICszOSw2IEBACisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX3N0cnRvbF9sKFMsIEUsIEIsIEwpICAgICAgc3RydG9sKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvdWxfbChTLCBFLCBCLCBMKSAgICAgc3RydG91bCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b2xsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvbGwoKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG91bGxfbChTLCBFLCBCLCBMKSAgICBzdHJ0b3VsbCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKy0jZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCistI2RlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKy0jd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworLSNkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKy0jZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKy0jZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgdGVtcGxhdGU8PgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK2luZGV4IGRhMDdjMWYuLjRiY2E1ZjEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK0BAIC02OCw2ICs2OCw3IEBAIG5hbWVzcGFjZSBfX2dudV9jeHgKKyB7CisgICBleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisgfQorKyNkZWZpbmUgX191c2Vsb2NhbGUgdXNlbG9jYWxlCisgI2VuZGlmCisgCisgbmFtZXNwYWNlIHN0ZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCitpbmRleCBjMjY2NGE3Li5lYzVjMzI5IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworQEAgLTM2LDEzICszNiw2IEBACisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fc3RyY29sbF9sKFMxLCBTMiwgTCkgICAgICBzdHJjb2xsKChTMSksIChTMikpCistI2RlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCistI2RlZmluZSBfX3djc2NvbGxfbChTMSwgUzIsIEwpICAgICAgd2NzY29sbCgoUzEpLCAoUzIpKQorLSNkZWZpbmUgX193Y3N4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHdjc3hmcm0oKFMxKSwgKFMyKSwgKE4pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBUaGVzZSBhcmUgYmFzaWNhbGx5IGV4dGVuc2lvbnMgdG8gY2hhcl90cmFpdHMsIGFuZCBwZXJoYXBzIHNob3VsZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK2luZGV4IDcyOTRlM2EuLjdiMTI4NjEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK0BAIC0zOCwxMyArMzgsNiBAQAorICN1bmRlZiBfTElCQworICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgd2N0eXBlKChTKSkKKy0jZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgIHRvd3VwcGVyKChDKSkKKy0jZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgIHRvd2xvd2VyKChDKSkKKy0jZGVmaW5lIF9faXN3Y3R5cGVfbChDLCBNLCBMKSAgICAgIGlzd2N0eXBlKChDKSwgKE0pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBOQjogVGhlIG90aGVyIGN0eXBlPGNoYXI+IHNwZWNpYWxpemF0aW9ucyBhcmUgaW4gc3JjL2xvY2FsZS5jYyBhbmQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCitpbmRleCAxMzU5NGQ5Li5kNzY5M2I0IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCitAQCAtMzksMTMgKzM5LDEwIEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IGdldHRleHQgc3R1ZmYKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKy1leHRlcm4gIkMiIGNoYXIgKl9fZGNnZXR0ZXh0KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCistCQkJICAgICBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KTsKKyAjdW5kZWYgZ2V0dGV4dAorLSNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgX19kY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgZGNnZXR0ZXh0KE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKyAjZWxzZQorLSN1bmRlZiBnZXR0ZXh0CisgI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSAobXNnaWQpCisgI2VuZGlmCisgCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK2luZGV4IDE0MjQwNzguLmQ4OWRhMzMgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitAQCAtMzYsMTUgKzM2LDExIEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IHByb3RvdHlwZXMgZm9yICp0ZXh0ZG9tYWluIGZ1bmNzCisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCistZXh0ZXJuICJDIiBjaGFyICpfX3RleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSk7CistZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCistCQkJCSAgY29uc3QgY2hhciAqZGlybmFtZSk7CistI2Vsc2UKKy0jdW5kZWYgX190ZXh0ZG9tYWluCistI3VuZGVmIF9fYmluZHRleHRkb21haW4KKy0jZGVmaW5lIF9fdGV4dGRvbWFpbihEKSAgICAgICAgICAgKCh2b2lkKTApCistI2RlZmluZSBfX2JpbmR0ZXh0ZG9tYWluKEQsUCkgICAgICgodm9pZCkwKQorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKysjdW5kZWYgdGV4dGRvbWFpbgorKyN1bmRlZiBiaW5kdGV4dGRvbWFpbgorKyNkZWZpbmUgdGV4dGRvbWFpbihEKSAgICAgICAgICAgKCh2b2lkKTApCisrI2RlZmluZSBiaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKyAjZW5kaWYKKyAKKyAgIC8vIE5vbi12aXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCitAQCAtNzAsNyArNjYsNyBAQCBleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywKKyAJCQkgICBjb25zdCBjaGFyKiBfX2RpcikgY29uc3QKKyAgICAgeworLSAgICAgIF9fYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKysgICAgICBiaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworICAgICAgIHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOworICAgICB9CisgCitAQCAtOTAsNyArODYsNyBAQCBleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKyAgICAgeworICAgICAgIC8vIE5vIGVycm9yIGNoZWNraW5nIGlzIGRvbmUsIGFzc3VtZSB0aGUgY2F0YWxvZyBleGlzdHMgYW5kIGNhbgorICAgICAgIC8vIGJlIHVzZWQuCistICAgICAgX190ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKysgICAgICB0ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKyAgICAgICByZXR1cm4gMDsKKyAgICAgfQorIAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK2luZGV4IGFhNTI3MzEuLjJlNmY4MGEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC00MywxMCArNDMsNiBAQAorICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBDb25zdHJ1Y3QgYW5kIHJldHVybiB2YWxpZCBwYXR0ZXJuIGNvbnNpc3Rpbmcgb2Ygc29tZSBjb21iaW5hdGlvbiBvZjoKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworaW5kZXggODgzZWMxYS4uMmM3MDY0MiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC00MSw5ICs0MSw2IEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisgI2VuZGlmCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCistI2VuZGlmCisgCisgbmFtZXNwYWNlIHN0ZAorIHsKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworaW5kZXggZTA3MDdkNy4uZDg0OGVkNSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK0BAIC00MCw5ICs0MCw2IEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisgI2VuZGlmCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCistI2VuZGlmCisgCisgbmFtZXNwYWNlIHN0ZAorIHsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTExMmEyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorRnJvbSBjZGI5ZTljOTQ0MGJlYjU5YmMyMDQ3NmVlYTVhOWNmMjUzOGNkMTk0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDU6NTcgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNi8zNV0gdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyB8ICA0ICsrLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICB8IDEzICsrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitpbmRleCAyZTZmODBhLi4zMWViYjlmIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitAQCAtNDAxLDcgKzQwMSw3IEBAIG5hbWVzcGFjZSBzdGQKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CistIyBlbHNlCisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworICMgZW5kaWYKK0BAIC01NTYsNyArNTU2LDcgQEAgbmFtZXNwYWNlIHN0ZAorICMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKy0jIGVsc2UKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisgIyBlbmRpZgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitpbmRleCAyYzcwNjQyLi5kNWM4OTYxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworQEAgLTEyNywxMiArMTI3LDI1IEBAIG5hbWVzcGFjZSBzdGQKKyAJeworIAkgIC8vIE5hbWVkIGxvY2FsZS4KKyAJICAvLyBOQjogSW4gdGhlIEdOVSBtb2RlbCB3Y2hhcl90IGlzIGFsd2F5cyAzMiBiaXQgd2lkZS4KKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcy4uLiBzaG91bGQgYmUgbnVtZXJpYworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKyAJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworIAkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKyAKKyAJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrI2VuZGlmCisgCisgCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gTCdcMCcpCisgCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjhiNzkwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaApAQCAtMCwwICsxLDU0MiBAQAorRnJvbSAyNDRiOWQxYjVjYzZkNTM4MjkzNTE5Mjk5ODUzMWVlNzBhZmIyNjJkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDY6NTggKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNy8zNV0gdWNsaWJjLWxvY2FsZS11cGRhdGUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggICAgICB8ICAzICsKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgICAgICB8IDc0ICsrKysrKysrKystLS0tLS0tLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8IDQyICsrKysrKy0tLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIHwgNTEgKysrKysrKysrKystLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAxMiArKy0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgICAgICAgfCAzNCArKysrKystLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgICAgICAgfCAgNSArKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgMTggKysrKy0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oICAgfCAxNyArKystLQorIDkgZmlsZXMgY2hhbmdlZCwgMTU4IGluc2VydGlvbnMoKyksIDk4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitpbmRleCBlNzRmZGRmLi45NzFhNmI0IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK0BAIC0zMSw2ICszMSw5IEBACisgCisgI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisgI2luY2x1ZGUgPGNsb2NhbGU+CisrI2luY2x1ZGUgPGNzdGRsaWI+CisrI2luY2x1ZGUgPGNzdHJpbmc+CisrI2luY2x1ZGUgPGNzdGRkZWY+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgY2xlYW4gdGhpcyB1cAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworaW5kZXggMjE0MzBkMC4uMWI5ZDhlMSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitAQCAtMzksMjMgKzM5LDIwIEBACisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistbmFtZXNwYWNlIHN0ZAorLXsKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorKworICAgdGVtcGxhdGU8PgorICAgICB2b2lkCisgICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZmxvYXQmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorICAgICB7CistICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCistCXsKKy0JICBjaGFyKiBfX3Nhbml0eTsKKy0JICBlcnJubyA9IDA7CistCSAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKy0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCistCSAgICBfX3YgPSBfX2Y7CistCSAgZWxzZQorLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CistCX0KKysgICAgICBjaGFyKiBfX3Nhbml0eTsKKysgICAgICBlcnJubyA9IDA7CisrICAgICAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19mOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPD4KK0BAIC02MywxNiArNjAsMTMgQEAgbmFtZXNwYWNlIHN0ZAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisgCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICAgIHsKKy0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKy0JeworLQkgIGNoYXIqIF9fc2FuaXR5OworLQkgIGVycm5vID0gMDsKKy0JICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKy0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCistCSAgICBfX3YgPSBfX2Q7CistCSAgZWxzZQorLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CistCX0KKysgICAgICBjaGFyKiBfX3Nhbml0eTsKKysgICAgICBlcnJubyA9IDA7CisrICAgICAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCV9fdiA9IF9fZDsKKysgICAgICBlbHNlCisrCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICB9CisgCisgICB0ZW1wbGF0ZTw+CitAQCAtODAsMTYgKzc0LDEzIEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBsb25nIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisgCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICAgIHsKKy0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKy0JeworLQkgIGNoYXIqIF9fc2FuaXR5OworLQkgIGVycm5vID0gMDsKKy0JICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CistICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorLQkgICAgX192ID0gX19sZDsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCV9fdiA9IF9fbGQ7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdm9pZAorQEAgLTExMCwxNyArMTAxLDE4IEBAIG5hbWVzcGFjZSBzdGQKKyAgIHZvaWQKKyAgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorICAgeworLSAgICBpZiAoX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorKyAgICBpZiAoX19jbG9jICYmIF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKKyAgICAgICBfX2ZyZWVsb2NhbGUoX19jbG9jKTsKKyAgIH0KKyAKKyAgIF9fY19sb2NhbGUKKyAgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKyAgIHsgcmV0dXJuIF9fZHVwbG9jYWxlKF9fY2xvYyk7IH0KKy19IC8vIG5hbWVzcGFjZSBzdGQKKyAKKy1uYW1lc3BhY2UgX19nbnVfY3h4CisteworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKysKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorKworICAgY29uc3QgY2hhciogY29uc3QgY2F0ZWdvcnlfbmFtZXNbNiArIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTXSA9CisgICAgIHsKKyAgICAgICAiTENfQ1RZUEUiLAorQEAgLTEzOCw5ICsxMzAsMTEgQEAgbmFtZXNwYWNlIF9fZ251X2N4eAorICAgICAgICJMQ19JREVOVElGSUNBVElPTiIKKyAjZW5kaWYKKyAgICAgfTsKKy19CisgCistbmFtZXNwYWNlIHN0ZAorLXsKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisrCisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKysKKyAgIGNvbnN0IGNoYXIqIGNvbnN0KiBjb25zdCBsb2NhbGU6Ol9TX2NhdGVnb3JpZXMgPSBfX2dudV9jeHg6OmNhdGVnb3J5X25hbWVzOworLX0gIC8vIG5hbWVzcGFjZSBzdGQKKysKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAoraW5kZXggNGJjYTVmMS4uNjRhNmQ0NiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorQEAgLTM5LDIxICszOSwyMyBAQAorICNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKyAKKyAjaW5jbHVkZSA8Y3N0cmluZz4gICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnN0cmxlbgorLSNpbmNsdWRlIDxjc3RkaW8+ICAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c25wcmludGYgb3Igc3RkOjpzcHJpbnRmCisrI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjp2c25wcmludGYgb3Igc3RkOjp2c3ByaW50ZgorICNpbmNsdWRlIDxjbG9jYWxlPgorICNpbmNsdWRlIDxsYW5naW5mby5oPgkJLy8gRm9yIGNvZGVjdnQKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggdGhpcworICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysjaWZkZWYgX0dMSUJDWFhfVVNFX0lDT05WCisgI2luY2x1ZGUgPGljb252Lmg+CQkvLyBGb3IgY29kZWN2dCB1c2luZyBpY29udiwgaWNvbnZfdAorICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLSNpbmNsdWRlIDxsaWJpbnRsLmg+IAkJLy8gRm9yIG1lc3NhZ2VzCisrI2lmZGVmIEhBVkVfTElCSU5UTF9ICisrI2luY2x1ZGUgPGxpYmludGwuaD4JCS8vIEZvciBtZXNzYWdlcworICNlbmRpZgorKyNpbmNsdWRlIDxjc3RkYXJnPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHdoYXQgaXMgX0dMSUJDWFhfQ19MT0NBTEVfR05VIGZvcgorKy8vIHBzbTogdXNlZCBpbiBvcy9nbnUtbGludXgvY3R5cGVfbm9uaW5saW5lLmgKKyAjZW5kaWYKKyAjZGVmaW5lIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSAxCisgCitAQCAtNzgsMjMgKzgwLDI1IEBAIG5hbWVzcGFjZSBzdGQKKyAjZWxzZQorICAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKyAjZW5kaWYKKy0KKy0gIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIF9UdiB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKy0gIC8vIHN0cmluZy4gIElmIHNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKy0gIC8vIHRoZSB1bnNhZmUgc3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisrICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBkb3VibGUgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCisrICAvLyBzdHJpbmcuICBJZiB2c25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworKyAgLy8gdGhlIHVuc2FmZSB2c3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisgICAvLyBiZSBhdm9pZGVkLgorLSAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgorLSAgICBpbnQKKy0gICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwKKy0JCSAgICAgY29uc3QgaW50IF9fc2l6ZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpLAorLQkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKy0JCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19wcmVjKQorKyAgICBpbmxpbmUgaW50CisrICAgIF9fY29udmVydF9mcm9tX3YoY29uc3QgX19jX2xvY2FsZSYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrCV9fY2xvYyBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCisrI2VuZGlmCisrCQkgICAgICwKKysJCSAgICAgY2hhciogX19vdXQsCisrCQkgICAgIGNvbnN0IGludCBfX3NpemUsCisrCQkgICAgIGNvbnN0IGNoYXIqIF9fZm10LCAuLi4pCisgICAgIHsKKysgICAgICB2YV9saXN0IF9fYXJnczsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysKKyAgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX2Nsb2MpOworICNlbHNlCistCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjKQorLSAgICB7CisgIyBpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAgICAgICBjaGFyKiBfX29sZCA9IHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisgICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX29sZCkgKyAxXTsKK0BAIC0xMDMsNyArMTA3LDkgQEAgbmFtZXNwYWNlIHN0ZAorICMgZW5kaWYKKyAjZW5kaWYKKyAKKy0gICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7CisrICAgICAgdmFfc3RhcnQoX19hcmdzLCBfX2ZtdCk7CisrICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjp2c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fYXJncyk7CisrICAgICAgdmFfZW5kKF9fYXJncyk7CisgCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisgICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworaW5kZXggN2IxMjg2MS4uMTNlMDExZCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworQEAgLTMzLDE2ICszMywyMCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy1uYW1lc3BhY2Ugc3RkCisteworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisrCisgICAvLyBOQjogVGhlIG90aGVyIGN0eXBlPGNoYXI+IHNwZWNpYWxpemF0aW9ucyBhcmUgaW4gc3JjL2xvY2FsZS5jYyBhbmQKKyAgIC8vIHZhcmlvdXMgL2NvbmZpZy9vcy8qIGZpbGVzLgorLSAgdGVtcGxhdGU8PgorICAgICBjdHlwZV9ieW5hbWU8Y2hhcj46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCisgICAgIDogY3R5cGU8Y2hhcj4oMCwgZmFsc2UsIF9fcmVmcykKKyAgICAgeworQEAgLTU3LDYgKzYxLDggQEAgbmFtZXNwYWNlIHN0ZAorICNlbmRpZgorIAl9CisgICAgIH0KKysgICAgY3R5cGVfYnluYW1lPGNoYXI+Ojp+Y3R5cGVfYnluYW1lKCkKKysgICAgeyB9CisgCisgI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgICBjdHlwZTx3Y2hhcl90Pjo6X193bWFza190eXBlCitAQCAtMTM4LDE3ICsxNDQsMzMgQEAgbmFtZXNwYWNlIHN0ZAorICAgY3R5cGU8d2NoYXJfdD46OgorICAgZG9faXMobWFzayBfX20sIHdjaGFyX3QgX19jKSBjb25zdAorICAgeworLSAgICAvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorLSAgICAvLyBsaWJyYXJ5IGZvciBibGFuay4KKysgICAgLy8gVGhlIGNhc2Ugb2YgX19tID09IGN0eXBlX2Jhc2U6OnNwYWNlIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQsCisrICAgIC8vIGR1ZSB0byBpdHMgdXNlIGluIG1hbnkgaXN0cmVhbSBmdW5jdGlvbnMuICBUaGVyZWZvcmUgd2UgZGVhbCB3aXRoCisrICAgIC8vIGl0IGZpcnN0LCBleHBsb2l0aW5nIHRoZSBrbm93bGVkZ2UgdGhhdCBvbiBHTlUgc3lzdGVtcyBfTV9iaXRbNV0KKysgICAgLy8gaXMgdGhlIG1hc2sgY29ycmVzcG9uZGluZyB0byBjdHlwZV9iYXNlOjpzcGFjZS4gIE5COiBhbiBlbmNvZGluZworKyAgICAvLyBjaGFuZ2Ugd291bGQgbm90IGFmZmVjdCBjb3JyZWN0bmVzcyEKKysKKyAgICAgYm9vbCBfX3JldCA9IGZhbHNlOworLSAgICBjb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworLSAgICBmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCistICAgICAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0KKy0JICAmJiBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKy0JeworLQkgIF9fcmV0ID0gdHJ1ZTsKKy0JICBicmVhazsKKy0JfQorKyAgICBpZiAoX19tID09IF9NX2JpdFs1XSkKKysgICAgICBfX3JldCA9IF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrWzVdLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrICAgIGVsc2UKKysgICAgICB7CisrCS8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrCS8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKwljb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworKwlmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrCSAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0pCisrCSAgICB7CisrCSAgICAgIGlmIChfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJCXsKKysJCSAgX19yZXQgPSB0cnVlOworKwkJICBicmVhazsKKysJCX0KKysJICAgICAgZWxzZSBpZiAoX19tID09IF9NX2JpdFtfX2JpdGN1cl0pCisrCQlicmVhazsKKysJICAgIH0KKysgICAgICB9CisrCisgICAgIHJldHVybiBfX3JldDsKKyAgIH0KKyAKK0BAIC0yOTAsNCArMzEyLDUgQEAgbmFtZXNwYWNlIHN0ZAorICNlbmRpZgorICAgfQorICNlbmRpZiAvLyAgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKy19CisrCisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitpbmRleCBkODlkYTMzLi4wNjc2NTdhIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorQEAgLTUzLDEyICs1MywxNiBAQAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKyAJCQkJc2l6ZV90IF9fcmVmcykKKy0gICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKSksCistICAgICBfTV9uYW1lX21lc3NhZ2VzKF9fcykKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoTlVMTCksCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKE5VTEwpCisgICAgICB7CistICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworLSAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RkOjpzdHJsZW4oX19zKSArIDE7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbX19sZW5dOworKyAgICAgICBzdGQ6Om1lbWNweShfX3RtcCwgX19zLCBfX2xlbik7CisgICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysKKysgICAgICAgLy8gTGFzdCB0byBhdm9pZCBsZWFraW5nIG1lbW9yeSBpZiBuZXcgdGhyb3dzLgorKyAgICAgICBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CisgICAgICB9CisgCisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworaW5kZXggMzFlYmI5Zi4uNzY3OWI5YyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTMzLDkgKzMzLDE0IEBACisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyAKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgI2RlZmluZSBfTElCQworICNpbmNsdWRlIDxsb2NhbGU+CisgI3VuZGVmIF9MSUJDCisrI2Vsc2UKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNlbmRpZgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworQEAgLTIwNiw3ICsyMTEsNyBAQCBuYW1lc3BhY2Ugc3RkCisgCSAgfQorIAlicmVhazsKKyAgICAgICBkZWZhdWx0OgorLQk7CisrCV9fcmV0ID0gcGF0dGVybigpOworICAgICAgIH0KKyAgICAgcmV0dXJuIF9fcmV0OworICAgfQorQEAgLTM5MCw3ICszOTUsOSBAQCBuYW1lc3BhY2Ugc3RkCisgCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisgI2Vsc2UKKyAJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKy0JICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAJICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7CisrICAgICAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKyAJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworICNlbmRpZgorIAorQEAgLTQ3Nyw4ICs0ODQsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0JICAgICAgZnJlZShfX29sZCk7CisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorIAkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAJICAgIH0KK0BAIC00OTgsOCArNTA1LDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgIGZyZWUoX19vbGQpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgCX0KKyAgICAgfQorQEAgLTU0NSw4ICs1NTIsMTEgQEAgbmFtZXNwYWNlIHN0ZAorIAkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworICNlbHNlCisgCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCistCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworLQkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrICAgICAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworKyAgICAgICAgICBtZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xsZW4pOworKyAgICAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworICNlbmRpZgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworQEAgLTYzMyw4ICs2NDMsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0JICAgICAgZnJlZShfX29sZCk7CisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorICAgICAgICAgICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgCSAgICB9CitAQCAtNjUzLDggKzY2Myw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKyAjZWxzZQorLQkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0JICBmcmVlKF9fb2xkKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrCSAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorIAl9CisgICAgIH0KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworaW5kZXggZDVjODk2MS4uOGFlODk2OSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC0zMyw5ICszMywxNCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworaW5kZXggZDg0OGVkNS4uZjI0ZDUzZSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK0BAIC01MywxMSArNTMsMTQgQEAgbmFtZXNwYWNlIHN0ZAorICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fc3RyZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKyAJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisgI2Vsc2UKKy0gICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7CisrICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworKyAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9fbGxlbik7CisgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0cmZ0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKy0gICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistICAgICAgZnJlZShfX29sZCk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKyAgICAgICBpZiAoX19sZW4gPT0gMCkKK0BAIC0yMDcsMTEgKzIxMCwxNCBAQCBuYW1lc3BhY2Ugc3RkCisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorIAkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKyAjZWxzZQorLSAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisrICAgICAgbWVtY3B5KF9fc2F2LCBfX29sZCwgX19sbGVuKTsKKyAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gd2NzZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworLSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0gICAgICBmcmVlKF9fb2xkKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorICAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorICAgICAgIGlmIChfX2xlbiA9PSAwKQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAoraW5kZXggYmE4ZTg1OC4uMTY2NWRkZSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitAQCAtNTAsMTIgKzUwLDIxIEBACisgICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisgCQkJCSAgICAgc2l6ZV90IF9fcmVmcykKKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCistICAgIF9NX25hbWVfdGltZXB1bmN0KF9fcykKKysgICAgX01fbmFtZV90aW1lcHVuY3QoTlVMTCkKKyAgICAgeworLSAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworLSAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0ZDo6c3RybGVuKF9fcykgKyAxOworKyAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbX19sZW5dOworKyAgICAgIHN0ZDo6bWVtY3B5KF9fdG1wLCBfX3MsIF9fbGVuKTsKKyAgICAgICBfTV9uYW1lX3RpbWVwdW5jdCA9IF9fdG1wOworLSAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7CisrCisrICAgICAgdHJ5CisrCXsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsgfQorKyAgICAgIGNhdGNoKC4uLikKKysJeworKwkgIGRlbGV0ZSBbXSBfTV9uYW1lX3RpbWVwdW5jdDsKKysJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJfQorKworICAgICB9CisgCisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJmNmIxOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gMGE4MGY2MGRlMDhiZDU4MjljYTFiMzc1OGY3MGE5MmI2MWRkYTE0MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ4OjEwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDgvMzVdIG1pc3NpbmctZXhlY2luZm9faAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGJvZWhtLWdjL2luY2x1ZGUvZ2MuaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCBiL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAoraW5kZXggNmIzOGYyZC4uZmNhOThmZiAxMDA2NDQKKy0tLSBhL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAorKysrIGIvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCitAQCAtNTAzLDcgKzUwMyw3IEBAIEdDX0FQSSBHQ19QVFIgR0NfbWFsbG9jX2F0b21pY19pZ25vcmVfb2ZmX3BhZ2UgR0NfUFJPVE8oKHNpemVfdCBsYikpOworICNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX0dMSUJDX18pCisgIyBpbmNsdWRlIDxmZWF0dXJlcy5oPgorICMgaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxIHx8IF9fR0xJQkNfXyA+IDIpIFwKKy0gICAgICYmICFkZWZpbmVkKF9faWE2NF9fKQorKyAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pICYmICFkZWZpbmVkKF9fVUNMSUJDX18pCisgIyAgIGlmbmRlZiBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgICAgZGVmaW5lIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgZW5kaWYKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwOS1jOTktc25wcmludGYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjViMmExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwOS1jOTktc25wcmludGYucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSA3YjdjYWY0MzA1YTU0ZmE0ZGZkZDBlZmQ1YmQ0MWNiOTRjYmNmNDNkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDk6MDMgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwOS8zNV0gYzk5LXNucHJpbnRmCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvCitpbmRleCAzN2YwMWNhLi5mMDBjMDZkIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KK0BAIC0xNDQsNyArMTQ0LDcgQEAgbmFtZXNwYWNlIHN0ZAorICAgdXNpbmcgOjp2c3ByaW50ZjsKKyB9IC8vIG5hbWVzcGFjZSBzdGQKKyAKKy0jaWYgX0dMSUJDWFhfVVNFX0M5OQorKyNpZiBfR0xJQkNYWF9VU0VfQzk5IHx8IGRlZmluZWQoX19VQ0xJQkNfXykKKyAKKyAjdW5kZWYgc25wcmludGYKKyAjdW5kZWYgdmZzY2FuZgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDEwLWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxMC1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTAyZWY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxMC1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaApAQCAtMCwwICsxLDE5MiBAQAorRnJvbSBkMWU4NWEzNjNmZmNkMjU5ZTliMDg0MWI4NWNhMTBhZjJmMzFiZDcyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTk6MDAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMC8zNV0gZ2NjOiBwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uOiBjb2Rlc291cmNlcnldCistLS0KKyBnY2MvY29tbW9uLm9wdCAgICAgIHwgIDQgKysrKworIGdjYy9jb25maWcuaW4gICAgICAgfCAgNiArKysrKysKKyBnY2MvY29uZmlndXJlICAgICAgIHwgMTYgKysrKysrKysrKysrKysrKworIGdjYy9jb25maWd1cmUuYWMgICAgfCAxMCArKysrKysrKysrCisgZ2NjL2RvYy9pbnZva2UudGV4aSB8ICA5ICsrKysrKysrKworIGdjYy9nY2MuYyAgICAgICAgICAgfCAgMiArKworIGdjYy9pbmNwYXRoLmMgICAgICAgfCAxOSArKysrKysrKysrKysrKysrKysrCisgNyBmaWxlcyBjaGFuZ2VkLCA2NiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nY2MvY29tbW9uLm9wdCBiL2djYy9jb21tb24ub3B0CitpbmRleCBiNDlhYzQ2Li43ODNkMjMxIDEwMDY0NAorLS0tIGEvZ2NjL2NvbW1vbi5vcHQKKysrKyBiL2djYy9jb21tb24ub3B0CitAQCAtNjIzLDYgKzYyMywxMCBAQCBXcmV0dXJuLWxvY2FsLWFkZHIKKyBDb21tb24gVmFyKHdhcm5fcmV0dXJuX2xvY2FsX2FkZHIpIEluaXQoMSkgV2FybmluZworIFdhcm4gYWJvdXQgcmV0dXJuaW5nIGEgcG9pbnRlci9yZWZlcmVuY2UgdG8gYSBsb2NhbCBvciB0ZW1wb3JhcnkgdmFyaWFibGUuCisgCisrV3BvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKytDb21tb24gVmFyKGZsYWdfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcykgSW5pdCgxKSBXYXJuaW5nCisrV2FybiBmb3IgLUkgYW5kIC1MIG9wdGlvbnMgdXNpbmcgc3lzdGVtIGRpcmVjdG9yaWVzIGlmIGNyb3NzIGNvbXBpbGluZworKworIFdzaGFkb3cKKyBDb21tb24gVmFyKHdhcm5fc2hhZG93KSBXYXJuaW5nCisgV2FybiB3aGVuIG9uZSBsb2NhbCB2YXJpYWJsZSBzaGFkb3dzIGFub3RoZXIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnLmluIGIvZ2NjL2NvbmZpZy5pbgoraW5kZXggZjJlZDMwMS4uZjI5MGM2YiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcuaW4KKysrKyBiL2djYy9jb25maWcuaW4KK0BAIC0xNjgsNiArMTY4LDEyIEBACisgI2VuZGlmCisgCisgCisrLyogRGVmaW5lIHRvIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3RvcmllcyAqLworKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisrI3VuZGVmIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTCisrI2VuZGlmCisrCisrCisgLyogRGVmaW5lIGlmIHlvdSB3YW50IGFsbCBvcGVyYXRpb25zIG9uIFJUTCAodGhlIGJhc2ljIGRhdGEgc3RydWN0dXJlIG9mIHRoZQorICAgIG9wdGltaXplciBhbmQgYmFjayBlbmQpIHRvIGJlIGNoZWNrZWQgZm9yIGR5bmFtaWMgdHlwZSBzYWZldHkgYXQgcnVudGltZS4KKyAgICBUaGlzIGlzIHF1aXRlIGV4cGVuc2l2ZS4gKi8KK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggOTUyMzc3My4uMTgxNzQ4ZSAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC05MzIsNiArOTMyLDcgQEAgd2l0aF9zeXN0ZW1femxpYgorIGVuYWJsZV9tYWludGFpbmVyX21vZGUKKyBlbmFibGVfbGlua19tdXRleAorIGVuYWJsZV92ZXJzaW9uX3NwZWNpZmljX3J1bnRpbWVfbGlicworK2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzCisgZW5hYmxlX3BsdWdpbgorIGVuYWJsZV9ob3N0X3NoYXJlZAorIGVuYWJsZV9saWJxdWFkbWF0aF9zdXBwb3J0CitAQCAtMTY2MSw2ICsxNjYyLDggQEAgT3B0aW9uYWwgRmVhdHVyZXM6CisgICAtLWVuYWJsZS12ZXJzaW9uLXNwZWNpZmljLXJ1bnRpbWUtbGlicworICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGF0IHJ1bnRpbWUgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgY29tcGlsZXItc3BlY2lmaWMgZGlyZWN0b3J5CisrICAtLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXMKKyAgIC0tZW5hYmxlLXBsdWdpbiAgICAgICAgIGVuYWJsZSBwbHVnaW4gc3VwcG9ydAorICAgLS1lbmFibGUtaG9zdC1zaGFyZWQgICAgYnVpbGQgaG9zdCBjb2RlIGFzIHNoYXJlZCBsaWJyYXJpZXMKKyAgIC0tZGlzYWJsZS1saWJxdWFkbWF0aC1zdXBwb3J0CitAQCAtMjgwODcsNiArMjgwOTAsMTkgQEAgaWYgdGVzdCAiJHtlbmFibGVfdmVyc2lvbl9zcGVjaWZpY19ydW50aW1lX2xpYnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorIGZpCisgCisgCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgZW5hYmxldmFsPSRlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllczsKKytlbHNlCisrICBlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcz1ubworK2ZpCisrCisraWYgdGVzdCAieCR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXN9IiA9ICJ4eWVzIjsgdGhlbgorKworKyRhc19lY2hvICIjZGVmaW5lIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTIDEiID4+Y29uZmRlZnMuaAorKworK2ZpCisrCisgIyBTdWJzdGl0dXRlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisgCisgCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IDY4YjBlZTguLjhiMDcwNzggMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtNTU3MSw2ICs1NTcxLDE2IEBAIEFDX0FSR19FTkFCTEUodmVyc2lvbi1zcGVjaWZpYy1ydW50aW1lLWxpYnMsCisgICAgICAgICAgICAgICAgIFtzcGVjaWZ5IHRoYXQgcnVudGltZSBsaWJyYXJpZXMgc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgaW4gYSBjb21waWxlci1zcGVjaWZpYyBkaXJlY3RvcnldKV0pCisgCisrQUNfQVJHX0VOQUJMRShbcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc10sCisrICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3Rvcmllc10pLCwKKysgICAgICAgICAgICAgW2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzPW5vXSkKKytpZiB0ZXN0ICJ4JHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllc30iID0gInh5ZXMiOyB0aGVuCisrICBBQ19ERUZJTkUoW0VOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTXSwKKysgICAgICAgICAgIFsxXSwKKysgICAgICAgICAgIFtEZWZpbmUgdG8gd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzXSkKKytmaQorKworICMgU3Vic3RpdHV0ZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworIEFDX1NVQlNUKHN1YmRpcnMpCisgQUNfU1VCU1Qoc3JjZGlyKQorZGlmZiAtLWdpdCBhL2djYy9kb2MvaW52b2tlLnRleGkgYi9nY2MvZG9jL2ludm9rZS50ZXhpCitpbmRleCA1MjBjMmM1Li4wZGY4YTQ3IDEwMDY0NAorLS0tIGEvZ2NjL2RvYy9pbnZva2UudGV4aQorKysrIGIvZ2NjL2RvYy9pbnZva2UudGV4aQorQEAgLTI2OSw2ICsyNjksNyBAQCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0c30uCisgLVdvdmVybGVuZ3RoLXN0cmluZ3MgIC1XcGFja2VkICAtV3BhY2tlZC1iaXRmaWVsZC1jb21wYXQgIC1XcGFkZGVkIEBnb2wKKyAtV3BhcmVudGhlc2VzICAtV3BlZGFudGljLW1zLWZvcm1hdCAtV25vLXBlZGFudGljLW1zLWZvcm1hdCBAZ29sCisgLVdwb2ludGVyLWFyaXRoICAtV25vLXBvaW50ZXItdG8taW50LWNhc3QgQGdvbAorKy1Xbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyBAZ29sCisgLVdyZWR1bmRhbnQtZGVjbHMgIC1Xbm8tcmV0dXJuLWxvY2FsLWFkZHIgQGdvbAorIC1XcmV0dXJuLXR5cGUgIC1Xc2VxdWVuY2UtcG9pbnQgIC1Xc2hhZG93ICAtV25vLXNoYWRvdy1pdmFyIEBnb2wKKyAtV3NoaWZ0LWNvdW50LW5lZ2F0aXZlIC1Xc2hpZnQtY291bnQtb3ZlcmZsb3cgQGdvbAorQEAgLTQ0MzIsNiArNDQzMywxNCBAQCBtYWRlIHVwIG9mIGRhdGEgb25seSBhbmQgdGh1cyByZXF1aXJlcyBubyBzcGVjaWFsIHRyZWF0bWVudC4gIEJ1dCwgZm9yCisgbW9zdCB0YXJnZXRzLCBpdCBpcyBtYWRlIHVwIG9mIGNvZGUgYW5kIHRodXMgcmVxdWlyZXMgdGhlIHN0YWNrIHRvIGJlCisgbWFkZSBleGVjdXRhYmxlIGluIG9yZGVyIGZvciB0aGUgcHJvZ3JhbSB0byB3b3JrIHByb3Blcmx5LgorIAorK0BpdGVtIC1Xbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0BvcGluZGV4IFduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrRG8gbm90IHdhcm4gZm9yIEBvcHRpb257LUl9IG9yIEBvcHRpb257LUx9IG9wdGlvbnMgdXNpbmcgc3lzdGVtCisrZGlyZWN0b3JpZXMgc3VjaCBhcyBAZmlsZXsvdXNyL2luY2x1ZGV9IHdoZW4gY3Jvc3MgY29tcGlsaW5nLiAgVGhpcworK29wdGlvbiBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIGNocm9vdCBlbnZpcm9ubWVudHMgd2hlbiBzdWNoCisrZGlyZWN0b3JpZXMgY29udGFpbiB0aGUgY29ycmVjdCBoZWFkZXJzIGFuZCBsaWJyYXJpZXMgZm9yIHRoZSB0YXJnZXQKKytzeXN0ZW0gcmF0aGVyIHRoYW4gdGhlIGhvc3QuCisrCisgQGl0ZW0gLVdmbG9hdC1lcXVhbAorIEBvcGluZGV4IFdmbG9hdC1lcXVhbAorIEBvcGluZGV4IFduby1mbG9hdC1lcXVhbAorZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggZDk1NmMzNi4uNjc1YmNjMSAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtODM1LDYgKzgzNSw4IEBAIHByb3BlciBwb3NpdGlvbiBhbW9uZyB0aGUgb3RoZXIgb3V0cHV0IGZpbGVzLiAgKi8KKyAgICAiJXtmdXNlLWxkPSo6LWZ1c2UtbGQ9JSp9ICIgTElOS19DT01QUkVTU19ERUJVR19TUEVDIFwKKyAgICAiJVggJXtvKn0gJXtlKn0gJXtOfSAle259ICV7cn1cCisgICAgICV7c30gJXt0fSAle3UqfSAle3p9ICV7Wn0gJXshbm9zdGRsaWI6JXshbm9zdGFydGZpbGVzOiVTfX0gIiBWVEFCTEVfVkVSSUZJQ0FUSU9OX1NQRUMgIiBcCisrICAgICV7V25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXM6LS1uby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzfVwKKysgICAgJXtXZXJyb3I9cG9pc29uLXN5c3RlbS1kaXJlY3RvcmllczotLWVycm9yLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXN9XAorICAgICAle3N0YXRpYzp9ICV7TCp9ICUobWZ3cmFwKSAlKGxpbmtfbGliZ2NjKSAiIFNBTklUSVpFUl9FQVJMWV9TUEVDICIgJW9cCisgICAgICIgQ0hLUF9TUEVDICIgXAorICAgICAle2ZvcGVuYWNjfGZvcGVubXB8ZnRyZWUtcGFyYWxsZWxpemUtbG9vcHM9KjolOmluY2x1ZGUobGliZ29tcC5zcGVjKSUobGlua19nb21wKX1cCitkaWZmIC0tZ2l0IGEvZ2NjL2luY3BhdGguYyBiL2djYy9pbmNwYXRoLmMKK2luZGV4IDZjNTRjYTYuLmNjMGM5MjEgMTAwNjQ0CistLS0gYS9nY2MvaW5jcGF0aC5jCisrKysgYi9nY2MvaW5jcGF0aC5jCitAQCAtMjgsNiArMjgsNyBAQAorICNpbmNsdWRlICJpbnRsLmgiCisgI2luY2x1ZGUgImluY3BhdGguaCIKKyAjaW5jbHVkZSAiY3BwZGVmYXVsdC5oIgorKyNpbmNsdWRlICJkaWFnbm9zdGljLWNvcmUuaCIKKyAKKyAvKiBNaWNyb3NvZnQgV2luZG93cyBkb2VzIG5vdCBuYXRpdmVseSBzdXBwb3J0IGlub2Rlcy4KKyAgICBWTVMgaGFzIG5vbi1udW1lcmljIGlub2Rlcy4gICovCitAQCAtMzgzLDYgKzM4NCwyNCBAQCBtZXJnZV9pbmNsdWRlX2NoYWlucyAoY29uc3QgY2hhciAqc3lzcm9vdCwgY3BwX3JlYWRlciAqcGZpbGUsIGludCB2ZXJib3NlKQorIAl9CisgICAgICAgZnByaW50ZiAoc3RkZXJyLCBfKCJFbmQgb2Ygc2VhcmNoIGxpc3QuXG4iKSk7CisgICAgIH0KKysKKysjaWZkZWYgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMKKysgIGlmIChmbGFnX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMpCisrICAgIHsKKysgICAgICAgc3RydWN0IGNwcF9kaXIgKnA7CisrCisrICAgICAgIGZvciAocCA9IGhlYWRzW1FVT1RFXTsgcDsgcCA9IHAtPm5leHQpCisrICAgICAgICAgeworKyAgICAgICAgICBpZiAoKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9pbmNsdWRlIiwgMTIpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9sb2NhbC9pbmNsdWRlIiwgMTgpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKSkKKysgICAgICAgICAgICB3YXJuaW5nIChPUFRfV3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMsCisrICAgICAgICAgICAgICAgICAgICAgImluY2x1ZGUgbG9jYXRpb24gXCIlc1wiIGlzIHVuc2FmZSBmb3IgIgorKyAgICAgICAgICAgICAgICAgICAgICJjcm9zcy1jb21waWxhdGlvbiIsCisrICAgICAgICAgICAgICAgICAgICAgcC0+bmFtZSk7CisrICAgICAgICAgfQorKyAgICB9CisrI2VuZGlmCisgfQorIAorIC8qIFVzZSBnaXZlbiAtSSBwYXRocyBmb3IgI2luY2x1ZGUgIi4uLiIgYnV0IG5vdCAjaW5jbHVkZSA8Li4uPiwgYW5kCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTEtZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxMS1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY3ZDk4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTEtZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gZjE1OGZjYzA4NGU4OGIxZDhkMWVjZjViMDA1ZDM3Nzc2NWFlZjE2ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjAwOjM0ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTEvMzVdIGdjYy1wb2lzb24tZGlyLWV4dGVuZAorCitBZGQgL3N3L2luY2x1ZGUgYW5kIC9vcHQvaW5jbHVkZSBiYXNlZCBvbiB0aGUgb3JpZ2luYWwKK3plY2tlLW5vLWhvc3QtaW5jbHVkZXMucGF0Y2ggcGF0Y2guICBUaGUgb3JpZ2luYWwgcGF0Y2ggY2hlY2tlZCBmb3IKKy91c3IvaW5jbHVkZSwgL3N3L2luY2x1ZGUgYW5kIC9vcHQvaW5jbHVkZSBhbmQgdGhlbiB0cmlnZ2VyZWQgYSBmYWlsdXJlIGFuZAorYWJvcnRlZC4KKworSW5zdGVhZCwgd2UgYWRkIHRoZSB0d28gbWlzc2luZyBpdGVtcyB0byB0aGUgY3VycmVudCBzY2FuLiAgSWYgdGhlIHVzZXIKK3dhbnRzIHRoaXMgdG8gYmUgYSBmYWlsdXJlLCB0aGV5IGNhbiBhZGQgIi1XZXJyb3I9cG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyIuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2luY3BhdGguYyB8IDQgKysrLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9pbmNwYXRoLmMgYi9nY2MvaW5jcGF0aC5jCitpbmRleCBjYzBjOTIxLi4wYmMxZjY3IDEwMDY0NAorLS0tIGEvZ2NjL2luY3BhdGguYworKysrIGIvZ2NjL2luY3BhdGguYworQEAgLTM5NCw3ICszOTQsOSBAQCBtZXJnZV9pbmNsdWRlX2NoYWlucyAoY29uc3QgY2hhciAqc3lzcm9vdCwgY3BwX3JlYWRlciAqcGZpbGUsIGludCB2ZXJib3NlKQorICAgICAgICAgIHsKKyAgICAgICAgICAgaWYgKCghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvaW5jbHVkZSIsIDEyKSkKKyAgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvbG9jYWwvaW5jbHVkZSIsIDE4KSkKKy0gICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvWDExUjYvaW5jbHVkZSIsIDE4KSkpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL1gxMVI2L2luY2x1ZGUiLCAxOCkpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvc3cvaW5jbHVkZSIsIDExKSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi9vcHQvaW5jbHVkZSIsIDEyKSkpCisgICAgICAgICAgICAgd2FybmluZyAoT1BUX1dwb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLAorICAgICAgICAgICAgICAgICAgICAgICJpbmNsdWRlIGxvY2F0aW9uIFwiJXNcIiBpcyB1bnNhZmUgZm9yICIKKyAgICAgICAgICAgICAgICAgICAgICAiY3Jvc3MtY29tcGlsYXRpb24iLAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDEyLWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxMi1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWZjYTczCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxMi1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApAQCAtMCwwICsxLDczIEBACitGcm9tIGE1NDIzOWNiZGM2ZjkzYzZkNzRlYTZiMDc4ZjE0NzA3NzBjNGY1YWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTowODozMSArMDQwMAorU3ViamVjdDogW1BBVENIIDEyLzM1XSBnY2MtNC4zLjM6IFNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQKKworQmVmb3JlIGNvbW1pdHRpbmcsIEkgbm90aWNlZCB0aGF0IFBSLzMyMTYxIHdhcyBtYXJrZWQgYXMgYSBkdXAgb2YgUFIvMzIwMDksIGJ1dCBteSBwcmV2aW91cyBwYXRjaCBkaWQgbm90IGZpeCBpdC4KKworVGhpcyBhbHRlcm5hdGl2ZSBwYXRjaCBpcyBiZXR0ZXIgYmVjYXVzZSBpdCBsZXRzIHlvdSBqdXN0IHVzZSBDRkxBR1NfRk9SX1RBUkdFVCB0byBzZXQgdGhlIGNvbXBpbGF0aW9uIGZsYWdzIGZvciBsaWJnY2MuIFNpbmNlIGJvb3RzdHJhcHBlZCB0YXJnZXQgbGlicmFyaWVzIGFyZSBuZXZlciBjb21waWxlZCB3aXRoIHRoZSBuYXRpdmUgY29tcGlsZXIsIGl0IG1ha2VzIGxpdHRsZSBzZW5zZSB0byB1c2UgZGlmZmVyZW50IGZsYWdzIGZvciBzdGFnZTEgYW5kIGxhdGVyIHN0YWdlcy4gQW5kIGl0IGFsc28gbWFrZXMgbGl0dGxlIHNlbnNlIHRvIHVzZSBhIGRpZmZlcmVudCB2YXJpYWJsZSB0aGFuIENGTEFHU19GT1JfVEFSR0VULgorCitPdGhlciBjaGFuZ2VzIEkgaGFkIHRvIGRvIGluY2x1ZGU6CisKKy0gbW92aW5nIHRoZSBjcmVhdGlvbiBvZiBkZWZhdWx0IENGTEFHU19GT1JfVEFSR0VUIGZyb20gTWFrZWZpbGUuYW0gdG8gY29uZmlndXJlLmFjLCBiZWNhdXNlIG90aGVyd2lzZSB0aGUgQk9PVF9DRkxBR1MgYXJlIHN1YnN0aXR1dGVkIGludG8gQ0ZMQUdTX0ZPUl9UQVJHRVQgKHdoaWNoIGlzICItTzIgLWcgJChDRkxBR1MpIikgdmlhICQoQ0ZMQUdTKS4gSXQgaXMgYWxzbyBjbGVhbmVyIHRoaXMgd2F5IHRob3VnaC4KKworLSBwYXNzaW5nIHRoZSByaWdodCBDRkxBR1MgdG8gY29uZmlndXJlIHNjcmlwdHMgYXMgZXhwb3J0ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzCisKK0kgYWxzbyBzdG9wcGVkIHBhc3NpbmcgTElCQ0ZMQUdTIHRvIGNvbmZpZ3VyZSBzY3JpcHRzIHNpbmNlIHRoZXkgYXJlIHVudXNlZCBpbiB0aGUgd2hvbGUgc3JjIHRyZWUuIEFuZCBJIHVwZGF0ZWQgdGhlIGRvY3VtZW50YXRpb24gYXMgSC1QIHJlbWluZGVkIG1lIHRvIGRvLgorCitCb290c3RyYXBwZWQvcmVndGVzdGVkIGk2ODYtcGMtbGludXgtZ251LCB3aWxsIGNvbW1pdCB0byA0LjQgc2hvcnRseS4gT2sgZm9yIDQuMz8KKworU2lnbmVkLW9mZi1ieTogUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgY29uZmlndXJlIHwgMzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMzIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA1MGU3Y2JjLi42Yjk3NjkzIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC02NzMzLDYgKzY3MzMsMzggQEAgZmkKKyAKKyAKKyAKKysjIER1cmluZyBnY2MgYm9vdHN0cmFwLCBpZiB3ZSB1c2Ugc29tZSByYW5kb20gY2MgZm9yIHN0YWdlMSB0aGVuIENGTEFHUworKyMgbWlnaHQgYmUgZW1wdHkgb3IgIi1nIi4gIFdlIGRvbid0IHJlcXVpcmUgYSBDKysgY29tcGlsZXIsIHNvIENYWEZMQUdTCisrIyBtaWdodCBhbHNvIGJlIGVtcHR5IChvciAiLWciLCBpZiBhIG5vbi1HQ0MgQysrIGNvbXBpbGVyIGlzIGluIHRoZSBwYXRoKS4KKysjIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgVEFSR0VUIGxpYnJhcmllcyAod2hpY2ggd2Uga25vdyBhcmUgYnVpbHQgd2l0aAorKyMgZ2NjKSBhcmUgYnVpbHQgd2l0aCAiLU8yIC1nIiwgc28gaW5jbHVkZSB0aG9zZSBvcHRpb25zIHdoZW4gc2V0dGluZworKyMgQ0ZMQUdTX0ZPUl9UQVJHRVQgYW5kIENYWEZMQUdTX0ZPUl9UQVJHRVQuCisraWYgdGVzdCAieCRDRkxBR1NfRk9SX1RBUkdFVCIgPSB4OyB0aGVuCisrICBDRkxBR1NfRk9SX1RBUkdFVD0kQ0ZMQUdTCisrICBjYXNlICIgJENGTEFHUyAiIGluCisrICAgICoiIC1PMiAiKikgOzsKKysgICAgKikgQ0ZMQUdTX0ZPUl9UQVJHRVQ9Ii1PMiAkQ0ZMQUdTIiA7OworKyAgZXNhYworKyAgY2FzZSAiICRDRkxBR1MgIiBpbgorKyAgICAqIiAtZyAiKiB8ICoiIC1nMyAiKikgOzsKKysgICAgKikgQ0ZMQUdTX0ZPUl9UQVJHRVQ9Ii1nICRDRkxBR1MiIDs7CisrICBlc2FjCisrZmkKKysKKysKKytpZiB0ZXN0ICJ4JENYWEZMQUdTX0ZPUl9UQVJHRVQiID0geDsgdGhlbgorKyAgQ1hYRkxBR1NfRk9SX1RBUkdFVD0kQ1hYRkxBR1MKKysgIGNhc2UgIiAkQ1hYRkxBR1MgIiBpbgorKyAgICAqIiAtTzIgIiopIDs7CisrICAgICopIENYWEZMQUdTX0ZPUl9UQVJHRVQ9Ii1PMiAkQ1hYRkxBR1MiIDs7CisrICBlc2FjCisrICBjYXNlICIgJENYWEZMQUdTICIgaW4KKysgICAgKiIgLWcgIiogfCAqIiAtZzMgIiopIDs7CisrICAgICopIENYWEZMQUdTX0ZPUl9UQVJHRVQ9Ii1nICRDWFhGTEFHUyIgOzsKKysgIGVzYWMKKytmaQorKworKworICMgSGFuZGxlIC0td2l0aC1oZWFkZXJzPVhYWC4gIElmIHRoZSB2YWx1ZSBpcyBub3QgInllcyIsIHRoZSBjb250ZW50cyBvZgorICMgdGhlIG5hbWVkIGRpcmVjdG9yeSBhcmUgY29waWVkIHRvICQodG9vbGRpcikvc3lzLWluY2x1ZGUuCisgaWYgdGVzdCB4IiR7d2l0aF9oZWFkZXJzfSIgIT0geCAmJiB0ZXN0IHgiJHt3aXRoX2hlYWRlcnN9IiAhPSB4bm8gOyB0aGVuCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTMtNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDEzLTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YzA2NjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDEzLTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsODUgQEAKK0Zyb20gZDUxNTFiZWJkMDc5ZTk4MWRjNzEwZjJhMDMxODMwZDg5Y2IxZTcyZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjEwOjA2ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTMvMzVdIDY0LWJpdCBtdWx0aWxpYiBoYWNrLgorCitHQ0MgaGFzIGludGVybmFsIG11bHRpbGliIGhhbmRsaW5nIGNvZGUgYnV0IGl0IGFzc3VtZXMgYSB2ZXJ5IHNwZWNpZmljIHJpZ2lkIGRpcmVjdG9yeQorbGF5b3V0LiBUaGUgYnVpbGQgc3lzdGVtIGltcGxlbWVudGF0aW9uIG9mIG11bHRpbGliIGxheW91dCBpcyB2ZXJ5IGdlbmVyaWMgYW5kIGFsbG93cworY29tcGxldGUgY3VzdG9taXNhdGlvbiBvZiB0aGUgbGlicmFyeSBkaXJlY3Rvcmllcy4KKworVGhpcyBwYXRjaCBpcyBhIHBhcnRpYWwgc29sdXRpb24gdG8gYWxsb3cgYW55IGN1c3RvbSBkaXJlY3RvcmllcyB0byBiZSBwYXNzZWQgaW50byBnY2MKK2FuZCBoYW5kbGVkIGNvcnJlY3RseS4gSXQgZm9yY2VzIGdjYyB0byB1c2UgdGhlIGJhc2VfbGliZGlyICh3aGljaCBpcyB0aGUgY3VycmVudAorZGlyZWN0b3J5LCAiLiIpLiBXZSBuZWVkIHRvIGRvIHRoaXMgZm9yIGVhY2ggbXVsdGlsaWIgdGhhdCBpcyBjb25maWd1cmVkIGFzIHdlIGRvbid0Citrbm93IHdoaWNoIGNvbXBpbGVyIG9wdGlvbnMgbWF5IGJlIGJlaW5nIHBhc3NlZCBpbnRvIHRoZSBjb21waWxlci4gU2luY2Ugd2UgaGF2ZSBhIGNvbXBpbGVyCitwZXIgbXVsaXRsaWIgYXQgdGhpcyBwb2ludCB0aGF0IGlzbid0IGFuIGlzc3VlLgorCitUaGUgb25lIHByb2JsZW0gaXMgdGhlIHRhcmdldCBjb21waWxlciBpcyBvbmx5IGdvaW5nIHRvIHdvcmsgZm9yIHRoZSBkZWZhdWx0IG11bHRsaWxpYiBhdAordGhpcyBwb2ludC4gSWRlYWxseSB3ZSdkIGZpZ3VyZSBvdXQgd2hpY2ggbXVsdGlsaWJzIHdlcmUgYmVpbmcgZW5hYmxlZCB3aXRoIHdoaWNoIHBhdGhzCithbmQgYmUgYWJsZSB0byBwYXRjaCB0aGVzZSBlbnRyaWVzIHdpdGggYSBjb21wbGV0ZSBzZXQgb2YgY29ycmVjdCBwYXRocyBidXQgdGhpcyB3ZQorZG9uJ3QgaGF2ZSBzdWNoIGNvZGUgYXQgdGhpcyBwb2ludC4gVGhpcyBpcyBzb21ldGhpbmcgdGhlIHRhcmdldCBnY2MgcmVjaXBlIHNob3VsZCBkbworYW5kIG92ZXJyaWRlIHRoZXNlIHBsYXRmb3JtIGRlZmF1bHRzIGluIGl0cyBidWlsZCBjb25maWcuCisKK1JQIDE1LzgvMTEKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEVsdmlzIERvd3NvbiA8ZWx2aXMuZG93c29uQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvY29uZmlnL2kzODYvdC1saW51eDY0ICAgfCAgNiArKy0tLS0KKyBnY2MvY29uZmlnL21pcHMvdC1saW51eDY0ICAgfCAxMCArKystLS0tLS0tCisgZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0IHwgIDUgKystLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvdC1saW51eDY0IGIvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAoraW5kZXggZjZkYmI3OC4uZDc3MGRhNSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKKysrKyBiL2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKK0BAIC0zMiw3ICszMiw1IEBACisgIworIGNvbW1hPSwKKyBNVUxUSUxJQl9PUFRJT05TICAgID0gJChzdWJzdCAkKGNvbW1hKSwvLCQoVE1fTVVMVElMSUJfQ09ORklHKSkKKy1NVUxUSUxJQl9ESVJOQU1FUyAgID0gJChwYXRzdWJzdCBtJSwgJSwgJChzdWJzdCAvLCAsJChNVUxUSUxJQl9PUFRJT05TKSkpCistTVVMVElMSUJfT1NESVJOQU1FUyA9IG02ND0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOng4Nl82NC1saW51eC1nbnUpCistTVVMVElMSUJfT1NESVJOQU1FUys9IG0zMj0kKGlmICQod2lsZGNhcmQgJChzaGVsbCBlY2hvICQoU1lTVEVNX0hFQURFUl9ESVIpKS8uLi8uLi91c3IvbGliMzIpLC4uL2xpYjMyLC4uL2xpYikkKGNhbGwgaWZfbXVsdGlhcmNoLDppMzg2LWxpbnV4LWdudSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTKz0gbXgzMj0uLi9saWJ4MzIkKGNhbGwgaWZfbXVsdGlhcmNoLDp4ODZfNjQtbGludXgtZ251eDMyKQorK01VTFRJTElCX0RJUk5BTUVTID0gLiAuCisrTVVMVElMSUJfT1NESVJOQU1FUyA9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NCBiL2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKK2luZGV4IDdlOTY0MDYuLmI3MmRjYjAgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL21pcHMvdC1saW51eDY0CisrKysgYi9nY2MvY29uZmlnL21pcHMvdC1saW51eDY0CitAQCAtMTcsMTAgKzE3LDYgQEAKKyAjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAKKyBNVUxUSUxJQl9PUFRJT05TID0gbWFiaT1uMzIvbWFiaT0zMi9tYWJpPTY0CistTVVMVElMSUJfRElSTkFNRVMgPSBuMzIgMzIgNjQKKy1NSVBTX0VMID0gJChpZiAkKGZpbHRlciAlZWwsICQoZmlyc3R3b3JkICQoc3Vic3QgLSwgLCQodGFyZ2V0KSkpKSxlbCkKKy1NSVBTX1NPRlQgPSAkKGlmICQoc3RyaXAgJChmaWx0ZXIgTUFTS19TT0ZUX0ZMT0FUX0FCSSwgJCh0YXJnZXRfY3B1X2RlZmF1bHQpKSAkKGZpbHRlciBzb2Z0LCAkKHdpdGhfZmxvYXQpKSksc29mdCkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTID0gXAorLQkuLi9saWIzMiQoY2FsbCBpZl9tdWx0aWFyY2gsOm1pcHM2NCQoTUlQU19FTCktbGludXgtZ251YWJpbjMyJChNSVBTX1NPRlQpKSBcCistCS4uL2xpYiQoY2FsbCBpZl9tdWx0aWFyY2gsOm1pcHMkKE1JUFNfRUwpLWxpbnV4LWdudSQoTUlQU19TT0ZUKSkgXAorLQkuLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOm1pcHM2NCQoTUlQU19FTCktbGludXgtZ251YWJpNjQkKE1JUFNfU09GVCkpCisrTVVMVElMSUJfRElSTkFNRVMgPSAuIC4gLgorK01VTFRJTElCX09TRElSTkFNRVMgPSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKQorKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NCBiL2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAoraW5kZXggYjZiMzUxZC4uMWQ1YjM3YSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAorKysrIGIvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0CitAQCAtMjYsMTAgKzI2LDkgQEAKKyAjIE1VTFRJTElCX09TRElSTkFNRVMgYWNjb3JkaW5nIHRvIHdoYXQgaXMgZm91bmQgb24gdGhlIHRhcmdldC4KKyAKKyBNVUxUSUxJQl9PUFRJT05TICAgIDo9IG02NC9tMzIKKy1NVUxUSUxJQl9ESVJOQU1FUyAgIDo9IDY0IDMyCisrTVVMVElMSUJfRElSTkFNRVMgICA6PSAuIC4KKyBNVUxUSUxJQl9FWFRSQV9PUFRTIDo9IAorLU1VTFRJTElCX09TRElSTkFNRVMgOj0gbTY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6cG93ZXJwYzY0LWxpbnV4LWdudSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTICs9IG0zMj0kKGlmICQod2lsZGNhcmQgJChzaGVsbCBlY2hvICQoU1lTVEVNX0hFQURFUl9ESVIpKS8uLi8uLi91c3IvbGliMzIpLC4uL2xpYjMyLC4uL2xpYikkKGNhbGwgaWZfbXVsdGlhcmNoLDpwb3dlcnBjLWxpbnV4LWdudSkKKytNVUxUSUxJQl9PU0RJUk5BTUVTIDo9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCisgCisgcnM2MDAwLWxpbnV4Lm86ICQoc3JjZGlyKS9jb25maWcvcnM2MDAwL3JzNjAwMC1saW51eC5jCisgCSQoQ09NUElMRSkgJDwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxNC1vcHRpb25hbC1saWJzdGRjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxNC1vcHRpb25hbC1saWJzdGRjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NGZlNDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE0LW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2gKQEAgLTAsMCArMSwxMDEgQEAKK0Zyb20gZDdiNDJkOTNkMDc3YjI1MjNjMjZmMGRmZjBiNmM0NGZkZmZmOWQzYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjEyOjU2ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTQvMzVdIG9wdGlvbmFsIGxpYnN0ZGMKKworZ2NjLXJ1bnRpbWUgYnVpbGRzIGxpYnN0ZGMrKyBzZXBhcmF0ZWx5IGZyb20gZ2NjLWNyb3NzLSouIEl0cyBjb25maWd1cmUgdGVzdHMgdXNpbmcgZysrCit3aWxsIG5vdCBydW4gY29ycmVjdGx5IHNpbmNlIGJ5IGRlZmF1bHQgdGhlIGxpbmtlciB3aWxsIHRyeSB0byBsaW5rIGFnYWluc3QgbGlic3RkYysrCit3aGljaCBzaG91bGRuJ3QgZXhpc3QgeWV0LiBXZSBuZWVkIGFuIG9wdGlvbiB0byBkaXNhYmxlIC1sc3RkYysrCitvcHRpb24gd2hpbHN0IGxlYXZpbmcgLWxjLCAtbGdjYyBhbmQgb3RoZXIgYXV0b21hdGljIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGFkZGVkIGJ5IGdjYworZHJpdmVyLiBUaGlzIHBhdGNoIGFkZHMgc3VjaCBhbiBvcHRpb24gd2hpY2ggb25seSBkaXNhYmxlcyB0aGUgLWxzdGRjKysuCisKK0EgInN0YW5kYXJkIiBnY2MgYnVpbGQgdXNlcyB4Z2NjIGFuZCBoZW5jZSBhdm9pZHMgdGhpcy4gV2Ugc2hvdWxkIGFzayB1cHN0cmVhbSBob3cgdG8KK2RvIHRoaXMgb2ZmaWNpYWxseSwgdGhlIGxpa2VseSBhbnN3ZXIgaXMgZG9uJ3QgYnVpbGQgbGlic3RkYysrIHNlcGFyYXRlbHkuCisKK1JQIDI5LzYvMTAKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGdjYy9jLWZhbWlseS9jLm9wdCAgfCA0ICsrKysKKyBnY2MvY3AvZysrc3BlYy5jICAgIHwgMSArCisgZ2NjL2RvYy9pbnZva2UudGV4aSB8IDggKysrKysrKy0KKyBnY2MvZ2NjLmMgICAgICAgICAgIHwgMSArCisgNCBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvYy1mYW1pbHkvYy5vcHQgYi9nY2MvYy1mYW1pbHkvYy5vcHQKK2luZGV4IDk4M2Y0YTguLjk2OTI0ZjYgMTAwNjQ0CistLS0gYS9nY2MvYy1mYW1pbHkvYy5vcHQKKysrKyBiL2djYy9jLWZhbWlseS9jLm9wdAorQEAgLTE1NDMsNiArMTU0MywxMCBAQCBub3N0ZGluYysrCisgQysrIE9iakMrKworIERvIG5vdCBzZWFyY2ggc3RhbmRhcmQgc3lzdGVtIGluY2x1ZGUgZGlyZWN0b3JpZXMgZm9yIEMrKworIAorK25vc3RkbGliKysKKytEcml2ZXIKKytEbyBub3QgbGluayBzdGFuZGFyZCBDKysgcnVudGltZSBsaWJyYXJ5CisrCisgbworIEMgT2JqQyBDKysgT2JqQysrIEpvaW5lZCBTZXBhcmF0ZQorIDsgRG9jdW1lbnRlZCBpbiBjb21tb24ub3B0CitkaWZmIC0tZ2l0IGEvZ2NjL2NwL2crK3NwZWMuYyBiL2djYy9jcC9nKytzcGVjLmMKK2luZGV4IDY1MzZkN2UuLmY1N2E1ZDQgMTAwNjQ0CistLS0gYS9nY2MvY3AvZysrc3BlYy5jCisrKysgYi9nY2MvY3AvZysrc3BlYy5jCitAQCAtMTM4LDYgKzEzOCw3IEBAIGxhbmdfc3BlY2lmaWNfZHJpdmVyIChzdHJ1Y3QgY2xfZGVjb2RlZF9vcHRpb24gKippbl9kZWNvZGVkX29wdGlvbnMsCisgICAgICAgc3dpdGNoIChkZWNvZGVkX29wdGlvbnNbaV0ub3B0X2luZGV4KQorIAl7CisgCWNhc2UgT1BUX25vc3RkbGliOgorKwljYXNlIE9QVF9ub3N0ZGxpYl9fOgorIAljYXNlIE9QVF9ub2RlZmF1bHRsaWJzOgorIAkgIGxpYnJhcnkgPSAtMTsKKyAJICBicmVhazsKK2RpZmYgLS1naXQgYS9nY2MvZG9jL2ludm9rZS50ZXhpIGIvZ2NjL2RvYy9pbnZva2UudGV4aQoraW5kZXggMGRmOGE0Ny4uNzM4NTZkMCAxMDA2NDQKKy0tLSBhL2djYy9kb2MvaW52b2tlLnRleGkKKysrKyBiL2djYy9kb2MvaW52b2tlLnRleGkKK0BAIC0xOTUsNiArMTk1LDcgQEAgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KKyAtZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4gQGdvbAorIC1mdnRhYmxlLXZlcmlmeT1AcntbfXN0ZEBye3x9cHJlaW5pdEBye3x9bm9uZUBye119IEBnb2wKKyAtZnZ0di1jb3VudHMgLWZ2dHYtZGVidWcgQGdvbAorKy1ub3N0ZGxpYisrIEBnb2wKKyAtZnZpc2liaWxpdHktbXMtY29tcGF0IEBnb2wKKyAtZmV4dC1udW1lcmljLWxpdGVyYWxzIEBnb2wKKyAtV2FiaT1AdmFye259ICAtV2FiaS10YWcgIC1XY29udmVyc2lvbi1udWxsICAtV2N0b3ItZHRvci1wcml2YWN5IEBnb2wKK0BAIC00ODgsNyArNDg5LDcgQEAgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdHN9LgorIC1zICAtc3RhdGljIC1zdGF0aWMtbGliZ2NjIC1zdGF0aWMtbGlic3RkYysrIEBnb2wKKyAtc3RhdGljLWxpYmFzYW4gLXN0YXRpYy1saWJ0c2FuIC1zdGF0aWMtbGlibHNhbiAtc3RhdGljLWxpYnVic2FuIEBnb2wKKyAtc3RhdGljLWxpYm1weCAtc3RhdGljLWxpYm1weHdyYXBwZXJzIEBnb2wKKy0tc2hhcmVkIC1zaGFyZWQtbGliZ2NjICAtc3ltYm9saWMgQGdvbAorKy1zaGFyZWQgLXNoYXJlZC1saWJnY2MgIC1zeW1ib2xpYyAtbm9zdGRsaWIrKyBAZ29sCisgLVQgQHZhcntzY3JpcHR9ICAtV2wsQHZhcntvcHRpb259ICAtWGxpbmtlciBAdmFye29wdGlvbn0gQGdvbAorIC11IEB2YXJ7c3ltYm9sfSAteiBAdmFye2tleXdvcmR9fQorIAorQEAgLTExMTg1LDYgKzExMTg2LDExIEBAIFRoZXNlIGVudHJpZXMgYXJlIHVzdWFsbHkgcmVzb2x2ZWQgYnkgZW50cmllcyBpbgorIGxpYmMuICBUaGVzZSBlbnRyeSBwb2ludHMgc2hvdWxkIGJlIHN1cHBsaWVkIHRocm91Z2ggc29tZSBvdGhlcgorIG1lY2hhbmlzbSB3aGVuIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZC4KKyAKKytAaXRlbSAtbm9zdGRsaWIrKworK0BvcGluZGV4IG5vc3RkbGliKysKKytEbyBub3QgdXNlIHRoZSBzdGFuZGFyZCBzeXN0ZW0gQysrIHJ1bnRpbWUgbGlicmFyaWVzIHdoZW4gbGlua2luZy4KKytPbmx5IHRoZSBsaWJyYXJpZXMgeW91IHNwZWNpZnkgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGxpbmtlci4KKysKKyBAY2luZGV4IEBvcHRpb257LWxnY2N9LCB1c2Ugd2l0aCBAb3B0aW9uey1ub3N0ZGxpYn0KKyBAY2luZGV4IEBvcHRpb257LW5vc3RkbGlifSBhbmQgdW5yZXNvbHZlZCByZWZlcmVuY2VzCisgQGNpbmRleCB1bnJlc29sdmVkIHJlZmVyZW5jZXMgYW5kIEBvcHRpb257LW5vc3RkbGlifQorZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggNjc1YmNjMS4uYTM3ZWM4YiAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtODQ1LDYgKzg0NSw3IEBAIHByb3BlciBwb3NpdGlvbiBhbW9uZyB0aGUgb3RoZXIgb3V0cHV0IGZpbGVzLiAgKi8KKyAgICAgJShtZmxpYikgIiBTVEFDS19TUExJVF9TUEVDICJcCisgICAgICV7ZnByb2ZpbGUtYXJjc3xmcHJvZmlsZS1nZW5lcmF0ZSp8Y292ZXJhZ2U6LWxnY292fSAiIFNBTklUSVpFUl9TUEVDICIgXAorICAgICAleyFub3N0ZGxpYjoleyFub2RlZmF1bHRsaWJzOiUobGlua19zc3ApICUobGlua19nY2NfY19zZXF1ZW5jZSl9fVwKKysgICAgJXshbm9zdGRsaWIrKzp9XAorICAgICAleyFub3N0ZGxpYjoleyFub3N0YXJ0ZmlsZXM6JUV9fSAle1QqfSB9fX19fX0iCisgI2VuZGlmCisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTUtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxNS1nY2MtZGlzYWJsZS1NQVNLX1JFTEFYX1BJQ19DQUxMUy1iaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNmMWUzZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTUtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK0Zyb20gYWQxNTkyNzkxNjk4Mjg2YjgwNjI2ZGRkNTY3OWZmMmVmNDU3YWI3NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE0OjIwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTUvMzVdIGdjYzogZGlzYWJsZSBNQVNLX1JFTEFYX1BJQ19DQUxMUyBiaXQKKworVGhlIG5ldyBmZWF0dXJlIGFkZGVkIGFmdGVyIDQuMy4zCisiaHR0cDovL3d3dy5wdWJicy5uZXQvMjAwOTA5L2djYy85NDA0OC1wYXRjaC1hZGQtc3VwcG9ydC1mb3Itcm1pcHNqYWxyLmh0bWwiCit3aWxsIGNhdXNlIGNjMXBsdXMgZWF0IHVwIGFsbCB0aGUgc3lzdGVtIG1lbW9yeSB3aGVuIGJ1aWxkIHdlYmtpdC1ndGsuCitUaGUgZnVuY3Rpb24gbWlwc19nZXRfcGljX2NhbGxfc3ltYm9sIGtlZXBzIG9uIHJlY3Vyc2l2ZWx5IGNhbGxpbmcgaXRzZWxmLgorRGlzYWJsZSB0aGlzIGZlYXR1cmUgdG8gd2FsayBhc2lkZSB0aGUgYnVnLgorCitTaWduZWQtb2ZmLWJ5OiBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICB8IDcgLS0tLS0tLQorIGdjYy9jb25maWd1cmUuYWMgfCA3IC0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDE4MTc0OGUuLjkwMDkwNjQgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMjY0NTEsMTMgKzI2NDUxLDYgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgYXNzZW1ibGVyIGFuZCBsaW5rZXIgZm9yIGV4cGxpY2l0IEpBTFIgcmVsb2NhdGlvbi4uLiAiID4mNjsKKyAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgICBmaQorICAgICBmaQorLSAgICBpZiB0ZXN0ICRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyA9IHllczsgdGhlbgorLSAgICAgIGlmIHRlc3QgeCR0YXJnZXRfY3B1X2RlZmF1bHQgPSB4OyB0aGVuCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9TUFTS19SRUxBWF9QSUNfQ0FMTFMKKy0gICAgICBlbHNlCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9IigkdGFyZ2V0X2NwdV9kZWZhdWx0KXxNQVNLX1JFTEFYX1BJQ19DQUxMUyIKKy0gICAgICBmaQorLSAgICBmaQorICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jIiA+JjUKKyAkYXNfZWNobyAiJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jIiA+JjY7IH0KKyAKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggOGIwNzA3OC4uYzdhMjhiNCAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC00MzYxLDEzICs0MzYxLDYgQEAgeDoKKyAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgICBmaQorICAgICBmaQorLSAgICBpZiB0ZXN0ICRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyA9IHllczsgdGhlbgorLSAgICAgIGlmIHRlc3QgeCR0YXJnZXRfY3B1X2RlZmF1bHQgPSB4OyB0aGVuCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9TUFTS19SRUxBWF9QSUNfQ0FMTFMKKy0gICAgICBlbHNlCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9IigkdGFyZ2V0X2NwdV9kZWZhdWx0KXxNQVNLX1JFTEFYX1BJQ19DQUxMUyIKKy0gICAgICBmaQorLSAgICBmaQorICAgICBBQ19NU0dfUkVTVUxUKCRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYykKKyAKKyAgICAgQUNfQ0FDSEVfQ0hFQ0soW2xpbmtlciBmb3IgLmVoX2ZyYW1lIHBlcnNvbmFsaXR5IHJlbGF4YXRpb25dLAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE2LUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE2LUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU5ZGUzNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTYtQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIDJiMjJlZTJlNDQ2ODhmOGE3MmI5YWY3NmEwNDMxZDg2YmFjMDBkNDcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxNjoyOCArMDQwMAorU3ViamVjdDogW1BBVENIIDE2LzM1XSBDT0xMRUNUX0dDQ19PUFRJT05TCisKK1RoaXMgcGF0Y2ggYWRkcyAtLXN5c3Jvb3QgaW50byBDT0xMRUNUX0dDQ19PUFRJT05TIHdoaWNoIGlzIHVzZWQgdG8KK2ludm9rZSBjb2xsZWN0Mi4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvZ2NjLmMgfCA5ICsrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggYTM3ZWM4Yi4uODdiNDdjNSAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtNDM1Miw2ICs0MzUyLDE1IEBAIHNldF9jb2xsZWN0X2djY19vcHRpb25zICh2b2lkKQorIAkJc2l6ZW9mICgiQ09MTEVDVF9HQ0NfT1BUSU9OUz0iKSAtIDEpOworIAorICAgZmlyc3RfdGltZSA9IFRSVUU7CisrI2lmZGVmIEhBVkVfTERfU1lTUk9PVAorKyAgaWYgKHRhcmdldF9zeXN0ZW1fcm9vdF9jaGFuZ2VkICYmIHRhcmdldF9zeXN0ZW1fcm9vdCkKKysgICAgeworKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgIictLXN5c3Jvb3Q9Iiwgc2l6ZW9mKCInLS1zeXNyb290PSIpLTEpOworKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgdGFyZ2V0X3N5c3RlbV9yb290LHN0cmxlbih0YXJnZXRfc3lzdGVtX3Jvb3QpKTsKKysgICAgICBvYnN0YWNrX2dyb3cgKCZjb2xsZWN0X29ic3RhY2ssICInIiwgMSk7CisrICAgICAgZmlyc3RfdGltZSA9IEZBTFNFOworKyAgICB9CisrI2VuZGlmCisgICBmb3IgKGkgPSAwOyAoaW50KSBpIDwgbl9zd2l0Y2hlczsgaSsrKQorICAgICB7CisgICAgICAgY29uc3QgY2hhciAqY29uc3QgKmFyZ3M7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTctVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE3LVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MDYxMzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE3LVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoCkBAIC0wLDAgKzEsOTYgQEAKK0Zyb20gMTJmNDY3YmM2ZDg5NTNiYTM0MmZlNTE2NmI5YTJmMzk3YjMzNDc5NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE3OjI1ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTcvMzVdIFVzZSB0aGUgZGVmYXVsdHMuaCBpbiAke0J9IGluc3RlYWQgb2YgJHtTfSwgYW5kIHQtb2UgaW4KKyAke0J9CisKK1VzZSB0aGUgZGVmYXVsdHMuaCBpbiAke0J9IGluc3RlYWQgb2YgJHtTfSwgYW5kIHQtb2UgaW4gJHtCfSwgc28gdGhhdAordGhlIHNvdXJjZSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gZ2NjLWNyb3NzLWluaXRpYWwsCitnY2MtY3Jvc3MtaW50ZXJtZWRpYXRlLCBnY2MtY3Jvc3MsIGdjYy1ydW50aW1lLCBhbmQgYWxzbyB0aGUgc2RrIGJ1aWxkLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworV2hpbGUgY29tcGlsaW5nIGdjYy1jcm9zc3Nkay1pbml0aWFsLXg4Nl82NCBvbiBzb21lIGhvc3QsIHRoZXJlIGlzCitvY2Nhc2lvbmFsbHkgZmFpbHVyZSB0aGF0IHRlc3QgdGhlIGV4aXN0YW5jZSBvZiBkZWZhdWx0LmggZG9lc24ndAord29yaywgdGhlIHJlYXNvbiBpcyB0bV9pbmNsdWRlX2xpc3Q9JyoqIGRlZmF1bHRzLmgnIHJhdGhlciB0aGFuCit0bV9pbmNsdWRlX2xpc3Q9JyoqIC4vZGVmYXVsdHMuaCcKKworU28gd2UgYWRkIHRoZSB0ZXN0IGNvbmRpdGlvbiBmb3IgdGhpcyBzaXR1YXRpb24uCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBnY2MvTWFrZWZpbGUuaW4gIHwgMiArLQorIGdjYy9jb25maWd1cmUgICAgfCA0ICsrLS0KKyBnY2MvY29uZmlndXJlLmFjIHwgNCArKy0tCisgZ2NjL21rY29uZmlnLnNoICB8IDQgKystLQorIDQgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL01ha2VmaWxlLmluIGIvZ2NjL01ha2VmaWxlLmluCitpbmRleCA0YWI3NDA1Li42NjFhZTE3IDEwMDY0NAorLS0tIGEvZ2NjL01ha2VmaWxlLmluCisrKysgYi9nY2MvTWFrZWZpbGUuaW4KK0BAIC01MDIsNyArNTAyLDcgQEAgVEFSR0VUX1NZU1RFTV9ST09UID0gQFRBUkdFVF9TWVNURU1fUk9PVEAKKyBUQVJHRVRfU1lTVEVNX1JPT1RfREVGSU5FID0gQFRBUkdFVF9TWVNURU1fUk9PVF9ERUZJTkVACisgCisgeG1ha2VfZmlsZT1AeG1ha2VfZmlsZUAKKy10bWFrZV9maWxlPUB0bWFrZV9maWxlQAorK3RtYWtlX2ZpbGU9QHRtYWtlX2ZpbGVAIC4vdC1vZQorIFRNX0VORElBTl9DT05GSUc9QFRNX0VORElBTl9DT05GSUdACisgVE1fTVVMVElMSUJfQ09ORklHPUBUTV9NVUxUSUxJQl9DT05GSUdACisgVE1fTVVMVElMSUJfRVhDRVBUSU9OU19DT05GSUc9QFRNX01VTFRJTElCX0VYQ0VQVElPTlNfQ09ORklHQAorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCA5MDA5MDY0Li5mMDU5YzJmIDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTExODQxLDggKzExODQxLDggQEAgZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCisgICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgorICAgICAgICA7OworICAgICBkZWZhdWx0cy5oICkKKy0gICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS8kZiIKKy0gICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vJGYiCisrICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vJGYiCisgICAgICAgIDs7CisgICAgICogKQorICAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggYzdhMjhiNC4uMmU2NjhhNSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC0xODMyLDggKzE4MzIsOCBAQCBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisgICAgICAgIDs7CisgICAgIGRlZmF1bHRzLmggKQorLSAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpLyRmIgorLSAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi8kZiIKKyAgICAgICAgOzsKKyAgICAgKiApCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvY29uZmlnLyRmIgorZGlmZiAtLWdpdCBhL2djYy9ta2NvbmZpZy5zaCBiL2djYy9ta2NvbmZpZy5zaAoraW5kZXggYzMyZjA4Ny4uNjgwM2FiOSAxMDA2NDQKKy0tLSBhL2djYy9ta2NvbmZpZy5zaAorKysrIGIvZ2NjL21rY29uZmlnLnNoCitAQCAtNzcsNyArNzcsNyBAQCBpZiBbIC1uICIkSEVBREVSUyIgXTsgdGhlbgorICAgICBpZiBbICQjIC1nZSAxIF07IHRoZW4KKyAJZWNobyAnI2lmZGVmIElOX0dDQycgPj4gJHtvdXRwdXR9VAorIAlmb3IgZmlsZSBpbiAiJEAiOyBkbworLQkgICAgaWYgdGVzdCB4IiRmaWxlIiA9IHgiZGVmYXVsdHMuaCI7IHRoZW4KKysJICAgIGlmIHRlc3QgeCIkZmlsZSIgPSB4Ii4vZGVmYXVsdHMuaCIgLW8geCIkZmlsZSIgPSB4ImRlZmF1bHRzLmgiOyB0aGVuCisgCQlwb3N0cG9uZV9kZWZhdWx0c19oPSJ5ZXMiCisgCSAgICBlbHNlCisgCQllY2hvICIjIGluY2x1ZGUgXCIkZmlsZVwiIiA+PiAke291dHB1dH1UCitAQCAtMTA5LDcgKzEwOSw3IEBAIGVzYWMKKyAKKyAjIElmIHdlIHBvc3Rwb25lZCBpbmNsdWRpbmcgZGVmYXVsdHMuaCwgYWRkIHRoZSAjaW5jbHVkZSBub3cuCisgaWYgdGVzdCB4IiRwb3N0cG9uZV9kZWZhdWx0c19oIiA9IHgieWVzIjsgdGhlbgorLSAgICBlY2hvICIjIGluY2x1ZGUgXCJkZWZhdWx0cy5oXCIiID4+ICR7b3V0cHV0fVQKKysgICAgZWNobyAiIyBpbmNsdWRlIFwiLi9kZWZhdWx0cy5oXCIiID4+ICR7b3V0cHV0fVQKKyBmaQorIAorICMgQWRkIG11bHRpcGxlIGluY2x1c2lvbiBwcm90ZWN0aW9uIGd1YXJkLCBwYXJ0IHR3by4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxOC1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTgtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE3MzM5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTgtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSA5NTUwNmI0NGM5ZWY0NzI1ZmVmNTJmYTg2NGQzZDNmY2Y5MzFlNDQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjA6MDEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxOC8zNV0gZm9ydHJhbiBjcm9zcy1jb21waWxlIGhhY2suCisKKyogRm9ydHJhbiB3b3VsZCBoYXZlIHNlYXJjaGVkIGZvciBhcm0tYW5nc3Ryb20tZ251ZWFiaS1nZm9ydHJhbiBidXQgd291bGQgaGF2ZSB1c2VkCit1c2VkIGdmb3J0YW4uIEZvciBnY2NfNC4yLjIuYmIgd2Ugd2FudCB0byB1c2UgdGhlIGdmb3J0cmFuIGNvbXBpbGVyIGZyb20gb3VyIGNyb3NzCitkaXJlY3RvcnkuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBsaWJnZm9ydHJhbi9jb25maWd1cmUgICAgfCAyICstCisgbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlCitpbmRleCBlMTU5MmY3Li43NmQxOWIzIDEwMDc1NQorLS0tIGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlCisrKysgYi9saWJnZm9ydHJhbi9jb25maWd1cmUKK0BAIC0xMjc0Nyw3ICsxMjc0Nyw3IEBAIGVzYWMKKyAKKyAjIFdlIG5lZWQgZ2ZvcnRyYW4gdG8gY29tcGlsZSBwYXJ0cyBvZiB0aGUgbGlicmFyeQorICNBQ19QUk9HX0ZDKGdmb3J0cmFuKQorLUZDPSIkR0ZPUlRSQU4iCisrI0ZDPSIkR0ZPUlRSQU4iCisgYWNfZXh0PSR7YWNfZmNfc3JjZXh0LWZ9CisgYWNfY29tcGlsZT0nJEZDIC1jICRGQ0ZMQUdTICRhY19mY2ZsYWdzX3NyY2V4dCBjb25mdGVzdC4kYWNfZXh0ID4mNScKKyBhY19saW5rPSckRkMgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRGQ0ZMQUdTICRMREZMQUdTICRhY19mY2ZsYWdzX3NyY2V4dCBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2RpZmYgLS1naXQgYS9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMgYi9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKK2luZGV4IDM1YThiMzkuLjZhMGQ4YTkgMTAwNjQ0CistLS0gYS9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKKysrKyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYworQEAgLTI0MCw3ICsyNDAsNyBAQCBBQ19TVUJTVChlbmFibGVfc3RhdGljKQorIAorICMgV2UgbmVlZCBnZm9ydHJhbiB0byBjb21waWxlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5CisgI0FDX1BST0dfRkMoZ2ZvcnRyYW4pCistRkM9IiRHRk9SVFJBTiIKKysjRkM9IiRHRk9SVFJBTiIKKyBBQ19QUk9HX0ZDKGdmb3J0cmFuKQorIAorICMgZXh0cmEgTEQgRmxhZ3Mgd2hpY2ggYXJlIHJlcXVpcmVkIGZvciB0YXJnZXRzCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTktbGliZ2NjLXNqbGotY2hlY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE5LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNTM5NGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE5LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsNzQgQEAKK0Zyb20gOTRmNjE5Y2QzMjU3ZTM1ZTIwYTg3NzY0MGQwY2I5MGMyYjNlZmMxNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIwOjUwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTkvMzVdIGxpYmdjYy1zamxqLWNoZWNrCisKK2FjX2ZuX2NfdHJ5X2NvbXBpbGUgZG9lc250IHNlZW0gdG8ga2VlcCB0aGUgaW50ZXJtZWRpYXRlIGZpbGVzCit3aGljaCBhcmUgbmVlZGVkIGZvciBzamxqIHRlc3QgdG8gcGFzcyBzaW5jZSBpdCBncmVwcyBpbnRvIHRoZQorZ2VuZXJhdGVkIGZpbGUuIFNvIHdlIHJ1biB0aGUgY29tcGlsZXIgY29tbWFuZCB1c2luZyBBQ19UUllfQ09NTUFORAord2hpY2ggdGhlbiBnZW5lcmF0ZXMgdGhlIG5lZWRlZCAucyBmaWxlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGliZ2NjL2NvbmZpZ3VyZSAgICB8IDEwICsrKysrKy0tLS0KKyBsaWJnY2MvY29uZmlndXJlLmFjIHwgMTAgKysrKy0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJnY2MvY29uZmlndXJlIGIvbGliZ2NjL2NvbmZpZ3VyZQoraW5kZXggMDhjOTMxOS4uNWZmYWViMyAxMDA2NDQKKy0tLSBhL2xpYmdjYy9jb25maWd1cmUKKysrKyBiL2xpYmdjYy9jb25maWd1cmUKK0BAIC00NTcwLDE3ICs0NTcwLDE5IEBAIHZvaWQgZm9vICgpCisgfQorIAorIF9BQ0VPRgorLUNGTEFHU19ob2xkPSRDRkxBR1MKKy1DRkxBR1M9Ii0tc2F2ZS10ZW1wcyAtZmV4Y2VwdGlvbnMiCisgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9dW5rbm93bgorLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGU7IHRoZW4gOgorK2lmIHsgYWNfdHJ5PScke0NDLWNjfSAtZmV4Y2VwdGlvbnMgLVMgY29uZnRlc3QuYyAtbyBjb25mdGVzdC5zIDE+JjUnCisrICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IH07IHRoZW4KKyAgIGlmIGdyZXAgX1Vud2luZF9TakxqX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz15ZXMKKyAgIGVsaWYgZ3JlcCBfVW53aW5kX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz1ubworICAgZmkKKyBmaQorLUNGTEFHUz0kQ0ZMQUdTX2hvbGQKKyBybSAtZiBjb25mdGVzdCoKKyAKKyBmaQorZGlmZiAtLWdpdCBhL2xpYmdjYy9jb25maWd1cmUuYWMgYi9saWJnY2MvY29uZmlndXJlLmFjCitpbmRleCAxYzQwNWU4Li5mNTI5NzVkIDEwMDY0NAorLS0tIGEvbGliZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvbGliZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTI1NSwxNiArMjU1LDE0IEBAIHZvaWQgZm9vICgpCisgICBiYXIoKTsKKyB9CisgXSldKQorLUNGTEFHU19ob2xkPSRDRkxBR1MKKy1DRkxBR1M9Ii0tc2F2ZS10ZW1wcyAtZmV4Y2VwdGlvbnMiCisgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9dW5rbm93bgorLUFTX0lGKFthY19mbl9jX3RyeV9jb21waWxlXSwKKy0gIFtpZiBncmVwIF9VbndpbmRfU2pMal9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKytpZiBBQ19UUllfQ09NTUFORCgke0NDLWNjfSAtZmV4Y2VwdGlvbnMgLVMgY29uZnRlc3QuYyAtbyBjb25mdGVzdC5zIDE+JkFTX01FU1NBR0VfTE9HX0ZEKTsgdGhlbgorKyAgaWYgZ3JlcCBfVW53aW5kX1NqTGpfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXllcworICAgZWxpZiBncmVwIF9VbndpbmRfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPW5vCistICBmaV0pCistQ0ZMQUdTPSRDRkxBR1NfaG9sZAorKyAgZmkKKytmaQorIHJtIC1mIGNvbmZ0ZXN0KgorIF0pCisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjAtY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIwLWNwcC1ob25vci1zeXNyb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYmM2OGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIwLWNwcC1ob25vci1zeXNyb290LnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gNmU2MjgzZDY0NWM4M2NhNTM0MjE5YTAyYWU4ODJhM2Q3YmU5NWZmMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIyOjAwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjAvMzVdIGNwcDogaG9ub3Igc3lzcm9vdC4KKworQ3VycmVudGx5LCBpZiB0aGUgZ2NjIHRvb2xjaGFpbiBpcyByZWxvY2F0ZWQgYW5kIGluc3RhbGxlZCBmcm9tIHNzdGF0ZSwgdGhlbiB5b3UgdHJ5IGFuZCBjb21waWxlCitwcmVwcm9jZXNzZWQgc291cmNlICguaSBvciAuaWkgZmlsZXMpLCB0aGUgY29tcGlsZXIgd2lsbCB0cnkgYW5kIGFjY2VzcyB0aGUgYnVpbHRpbiBzeXNyb290IGxvY2F0aW9uCityYXRoZXIgdGhhbiB0aGUgLS1zeXNyb290IG9wdGlvbiBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmRsaW5lLiBJZiBhY2Nlc3MgdG8gdGhhdCBkaXJlY3RvcnkgaXMKK3Blcm1pc3Npb24gZGVuaWVkICh1bnJlYWRhYmxlKSwgZ2NjIHdpbGwgZXJyb3IuCisKK1RoaXMgaGFwcGVucyB3aGVuIGNjYWNoZSBpcyBpbiB1c2UgZHVlIHRvIHRoZSBmYWN0IGl0IHVzZXMgcHJlcHJvY2Vzc2VkIHNvdXJjZSBmaWxlcy4KKworVGhlIGZpeCBiZWxvdyBhZGRzICVJIHRvIHRoZSBjcHAtb3V0cHV0IHNwZWMgbWFjcm8gc28gdGhlIGRlZmF1bHQgc3Vic3RpdHV0aW9ucyBmb3IgLWlwcmVmaXgsCistaXN5c3RlbSwgLWlzeXNyb290IGhhcHBlbiBhbmQgdGhlIGNvcnJlY3Qgc3lzcm9vdCBpcyB1c2VkLgorCitbWU9DVE8gIzIwNzRdCisKK1JQIDIwMTIvMDQvMTMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvY3AvbGFuZy1zcGVjcy5oIHwgMiArLQorIGdjYy9nY2MuYyAgICAgICAgICAgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY3AvbGFuZy1zcGVjcy5oIGIvZ2NjL2NwL2xhbmctc3BlY3MuaAoraW5kZXggYjA3MjhmMC4uZTY5ZWU3ZCAxMDA2NDQKKy0tLSBhL2djYy9jcC9sYW5nLXNwZWNzLmgKKysrKyBiL2djYy9jcC9sYW5nLXNwZWNzLmgKK0BAIC02Myw1ICs2Myw1IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICB7Ii5paSIsICJAYysrLWNwcC1vdXRwdXQiLCAwLCAwLCAwfSwKKyAgIHsiQGMrKy1jcHAtb3V0cHV0IiwKKyAgICAiJXshTToleyFNTToleyFFOlwKKy0gICAgY2MxcGx1cyAtZnByZXByb2Nlc3NlZCAlaSAlKGNjMV9vcHRpb25zKSAlMlwKKysgICAgY2MxcGx1cyAtZnByZXByb2Nlc3NlZCAlaSAlSSAlKGNjMV9vcHRpb25zKSAlMlwKKyAgICAgJXshZnN5bnRheC1vbmx5OiUoaW52b2tlX2FzKX19fX0iLCAwLCAwLCAwfSwKK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IDg3YjQ3YzUuLmU2ZWZhZTcgMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTExNDIsNyArMTE0Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcGlsZXIgZGVmYXVsdF9jb21waWxlcnNbXSA9CisgICAgICAgICAgICAgICAgICAgICAlV3tvKjotLW91dHB1dC1wY2g9JSp9fSVWfX19fX19IiwgMCwgMCwgMH0sCisgICB7Ii5pIiwgIkBjcHAtb3V0cHV0IiwgMCwgMCwgMH0sCisgICB7IkBjcHAtb3V0cHV0IiwKKy0gICAiJXshTToleyFNTToleyFFOmNjMSAtZnByZXByb2Nlc3NlZCAlaSAlKGNjMV9vcHRpb25zKSAleyFmc3ludGF4LW9ubHk6JShpbnZva2VfYXMpfX19fSIsIDAsIDAsIDB9LAorKyAgICIleyFNOiV7IU1NOiV7IUU6Y2MxIC1mcHJlcHJvY2Vzc2VkICVpICVJICUoY2MxX29wdGlvbnMpICV7IWZzeW50YXgtb25seTolKGludm9rZV9hcyl9fX19IiwgMCwgMCwgMH0sCisgICB7Ii5zIiwgIkBhc3NlbWJsZXIiLCAwLCAwLCAwfSwKKyAgIHsiQGFzc2VtYmxlciIsCisgICAgIiV7IU06JXshTU06JXshRToleyFTOmFzICUoYXNtX2RlYnVnKSAlKGFzbV9vcHRpb25zKSAlaSAlQSB9fX19IiwgMCwgMCwgMH0sCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjEtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjEtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWFkNDg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyMS1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0Zyb20gN2Y3NjZmYzQ3ZjkzODhkZDAwOTQ4NTJhNDNmMWFmMjU2OGI0YjliMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIzOjA4ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjEvMzVdIE1JUFM2NDogRGVmYXVsdCB0byBONjQgQUJJCisKK01JUFM2NCBkZWZhdWx0cyB0byBuMzIgQUJJLCB0aGlzIHBhdGNoIG1ha2VzIGl0CitzbyB0aGF0IGl0IGRlZmF1bHRzIHRvIE42NCBBQkkKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBjb25maWcgc3BlY2lmaWNdCistLS0KKyBnY2MvY29uZmlnLmdjYyB8IDEwICsrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy5nY2MgYi9nY2MvY29uZmlnLmdjYworaW5kZXggY2IwOGE1Yy4uYjE1NTc0NCAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcuZ2NjCisrKysgYi9nY2MvY29uZmlnLmdjYworQEAgLTIwMTEsMjkgKzIwMTEsMjkgQEAgbWlwcyotKi1saW51eCopCQkJCSMgTGludXggTUlQUywgZWl0aGVyIGVuZGlhbi4KKyAJCQlkZWZhdWx0X21pcHNfYXJjaD1taXBzMzIKKyAJCQk7OworIAkJbWlwczY0ZWwtc3QtbGludXgtZ251KQorLQkJCWRlZmF1bHRfbWlwc19hYmk9bjMyCisrCQkJZGVmYXVsdF9taXBzX2FiaT02NAorIAkJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gbWlwcy9zdC5oIgorIAkJCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gbWlwcy90LXN0IgorIAkJCWVuYWJsZV9taXBzX211bHRpbGlicz0ieWVzIgorIAkJCTs7CisgCQltaXBzNjRvY3Rlb24qLSotbGludXgqKQorLQkJCWRlZmF1bHRfbWlwc19hYmk9bjMyCisrCQkJZGVmYXVsdF9taXBzX2FiaT02NAorIAkJCXRtX2RlZmluZXM9IiR7dG1fZGVmaW5lc30gTUlQU19DUFVfU1RSSU5HX0RFRkFVTFQ9XFxcIm9jdGVvblxcXCIiCisgCQkJdGFyZ2V0X2NwdV9kZWZhdWx0PU1BU0tfU09GVF9GTE9BVF9BQkkKKyAJCQllbmFibGVfbWlwc19tdWx0aWxpYnM9InllcyIKKyAJCQk7OworIAkJbWlwc2lzYTY0cjYqLSotbGludXgqKQorLQkJCWRlZmF1bHRfbWlwc19hYmk9bjMyCisrCQkJZGVmYXVsdF9taXBzX2FiaT02NAorIAkJCWRlZmF1bHRfbWlwc19hcmNoPW1pcHM2NHI2CisgCQkJZW5hYmxlX21pcHNfbXVsdGlsaWJzPSJ5ZXMiCisgCQkJOzsKKyAJCW1pcHNpc2E2NHIyKi0qLWxpbnV4KikKKy0JCQlkZWZhdWx0X21pcHNfYWJpPW4zMgorKwkJCWRlZmF1bHRfbWlwc19hYmk9NjQKKyAJCQlkZWZhdWx0X21pcHNfYXJjaD1taXBzNjRyMgorIAkJCWVuYWJsZV9taXBzX211bHRpbGlicz0ieWVzIgorIAkJCTs7CisgCQltaXBzNjQqLSotbGludXgqIHwgbWlwc2lzYTY0Ki0qLWxpbnV4KikKKy0JCQlkZWZhdWx0X21pcHNfYWJpPW4zMgorKwkJCWRlZmF1bHRfbWlwc19hYmk9NjQKKyAJCQllbmFibGVfbWlwc19tdWx0aWxpYnM9InllcyIKKyAJCQk7OworIAllc2FjCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjItRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjItRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDUyMGQwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyMi1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoCkBAIC0wLDAgKzEsMjE2IEBACitGcm9tIDRmOTRhZGRlZDhiNzA0MzY0MjM4NmIzMWVkNGMzYTFiZDAxNmYzMTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyNDo1MCArMDQwMAorU3ViamVjdDogW1BBVENIIDIyLzM1XSBEZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgYW5kIFVDTElCQ19EWU5BTUlDX0xJTktFUgorIHJlbGF0aXZlIHRvIFNZU1RFTUxJQlNfRElSCisKK1RoaXMgcGF0Y2ggZGVmaW5lcyBHTElCQ19EWU5BTUlDX0xJTktFUiBhbmQgVUNMSUJDX0RZTkFNSUNfTElOS0VSCityZWxhdGl2ZSB0byBTWVNURU1MSUJTX0RJUiB3aGljaCBjYW4gYmUgc2V0IGluIGdlbmVyYXRlZCBoZWFkZXJzCitUaGlzIGJyZWFrcyB0aGUgYXNzdW1wdGlvbiBvZiBoYXJkY29kZWQgbXVsdGlsaWIgaW4gZ2NjCitDaGFuZ2UgaXMgb25seSBmb3IgdGhlIHN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzIGluIE9FIGluY2x1ZGluZworU0gsIHNwYXJjLCBhbHBoYSBmb3IgcG9zc2libGUgZnV0dXJlIHN1cHBvcnQgKGlmIGFueSkKKworUmVtb3ZlcyB0aGUgZG9faGVhZGVyZml4IHRhc2sgaW4gbWV0YWRhdGEKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaCB8ICA0ICsrLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggIHwgIDQgKystLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oICAgfCAgMiArLQorIGdjYy9jb25maWcvaTM4Ni9saW51eC5oICAgICAgfCAgMiArLQorIGdjYy9jb25maWcvaTM4Ni9saW51eDY0LmggICAgfCAgNiArKystLS0KKyBnY2MvY29uZmlnL2xpbnV4LmggICAgICAgICAgIHwgIDggKysrKy0tLS0KKyBnY2MvY29uZmlnL21pcHMvbGludXguaCAgICAgIHwgMTIgKysrKysrLS0tLS0tCisgZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oICB8IDEwICsrKysrLS0tLS0KKyBnY2MvY29uZmlnL3NoL2xpbnV4LmggICAgICAgIHwgIDIgKy0KKyBnY2MvY29uZmlnL3NwYXJjL2xpbnV4LmggICAgIHwgIDIgKy0KKyBnY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaCAgIHwgIDQgKystLQorIDExIGZpbGVzIGNoYW5nZWQsIDI4IGluc2VydGlvbnMoKyksIDI4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaCBiL2djYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmgKK2luZGV4IDJjNzBhMmYuLmRkMDQ4ZGIgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCisrKysgYi9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCitAQCAtMjMsOCArMjMsOCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICNkZWZpbmUgRVhUUkFfU1BFQ1MgXAorIHsgImVsZl9keW5hbWljX2xpbmtlciIsIEVMRl9EWU5BTUlDX0xJTktFUiB9LAorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIJIi9saWIvbGQtbGludXguc28uMiIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSCVNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSICBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisgI2lmIERFRkFVTFRfTElCQyA9PSBMSUJDX1VDTElCQworICNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUpICIle21nbGliYzoiIEcgIjs6IiBVICJ9IgorICNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX0dMSUJDCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCitpbmRleCBlOWQ2NWRjLi5jZmRmM2YwIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCisrKysgYi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKK0BAIC02OCw4ICs2OCw4IEBACisgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVJfREVGQVVMVCBhbmQgVEFSR0VUX0RFRkFVTFRfRkxPQVRfQUJJLiAgKi8KKyAKKyAjdW5kZWYgIEdMSUJDX0RZTkFNSUNfTElOS0VSCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUICIvbGliL2xkLWxpbnV4LnNvLjMiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9IQVJEX0ZMT0FUICIvbGliL2xkLWxpbnV4LWFybWhmLnNvLjMiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4zIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfSEFSRF9GTE9BVCBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtYXJtaGYuc28uMyIKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVAorIAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgXAorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKK2luZGV4IDEyNzljYmEuLjFkZGU3NDcgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorKysrIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKK0BAIC02Miw3ICs2Miw3IEBACisgCisgI2RlZmluZSBMSUJHQ0NfU1BFQyAiJXttZmxvYXQtYWJpPXNvZnQqOi1sZmxvYXR9IC1sZ2NjIgorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICNkZWZpbmUgTElOVVhfVEFSR0VUX0xJTktfU1BFQyAgIiV7aCp9IFwKKyAgICAle3N0YXRpYzotQnN0YXRpY30gXAorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9saW51eC5oIGIvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgKK2luZGV4IGExMDA5NjMuLjIxYmEyYjIgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2kzODYvbGludXguaAorKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgKK0BAIC0yMCw0ICsyMCw0IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OICJlbGZfaTM4NiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oIGIvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAoraW5kZXggYTI3ZDNiZS4uNjE4NWNjZSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgKKysrKyBiL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgKK0BAIC0yNyw2ICsyNyw2IEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT042NCAiZWxmX3g4Nl82NCIKKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OWDMyICJlbGYzMl94ODZfNjQiCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLWxpbnV4LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliNjQvbGQtbGludXgteDg2LTY0LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUlgzMiAiL2xpYngzMi9sZC1saW51eC14MzIuc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1saW51eC14ODYtNjQuc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSWDMyIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC14MzIuc28uMiIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2xpbnV4LmggYi9nY2MvY29uZmlnL2xpbnV4LmgKK2luZGV4IDg1NzM4OWEuLjIyYjliZTUgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2xpbnV4LmgKKysrKyBiL2djYy9jb25maWcvbGludXguaAorQEAgLTczLDEwICs3MywxMCBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKyAgICBHTElCQ19EWU5BTUlDX0xJTktFUiBtdXN0IGJlIGRlZmluZWQgZm9yIGVhY2ggdGFyZ2V0IHVzaW5nIHRoZW0sIG9yCisgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBhbmQgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBmb3IgdGFyZ2V0cworICAgIHN1cHBvcnRpbmcgYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBjb21waWxhdGlvbi4gICovCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliL2xkNjQtdUNsaWJjLnNvLjAiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgIi9saWIvbGR4MzItdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgU1lTVEVNTElCU19ESVIgImxkeDMyLXVDbGliYy5zby4wIgorICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSICIvc3lzdGVtL2Jpbi9saW5rZXIiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIzMiAiL3N5c3RlbS9iaW4vbGlua2VyIgorICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSNjQgIi9zeXN0ZW0vYmluL2xpbmtlcjY0IgorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbWlwcy9saW51eC5oIGIvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgKK2luZGV4IDkxZGYyNjEuLmMzMDZhZmIgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL21pcHMvbGludXguaAorKysrIGIvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgKK0BAIC0yMiwyMCArMjIsMjAgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OTjMyICJlbGYzMiV7RUI6Yn0le0VMOmx9dHNtaXBuMzIiCisgCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFwKKy0gICIle21uYW49MjAwODovbGliL2xkLWxpbnV4LW1pcHNuOC5zby4xOzovbGliL2xkLnNvLjF9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LW1pcHNuOC5zby4xOzoiIFNZU1RFTUxJQlNfRElSICJsZC5zby4xfSIKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWI2NC9sZC1saW51eC1taXBzbjguc28uMTs6L2xpYjY0L2xkLnNvLjF9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LW1pcHNuOC5zby4xOzoiIFNZU1RFTUxJQlNfRElSICJsZC5zby4xfSIKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSTjMyIFwKKy0gICIle21uYW49MjAwODovbGliMzIvbGQtbGludXgtbWlwc244LnNvLjE7Oi9saWIzMi9sZC5zby4xfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1taXBzbjguc28uMTs6IiBTWVNURU1MSUJTX0RJUiAibGQuc28uMX0iCisgCisgI3VuZGVmIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyCisgI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBcCistICAiJXttbmFuPTIwMDg6L2xpYi9sZC11Q2xpYmMtbWlwc244LnNvLjA7Oi9saWIvbGQtdUNsaWJjLnNvLjB9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy1taXBzbjguc28uMDs6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjB9IgorICN1bmRlZiBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NAorICNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIvbGQ2NC11Q2xpYmMtbWlwc244LnNvLjA7Oi9saWIvbGQ2NC11Q2xpYmMuc28uMH0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMtbWlwc244LnNvLjA7OiIgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLnNvLjB9IgorICNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSTjMyIFwKKy0gICIle21uYW49MjAwODovbGliMzIvbGQtdUNsaWJjLW1pcHNuOC5zby4wOzovbGliMzIvbGQtdUNsaWJjLnNvLjB9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy1taXBzbjguc28uMDs6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjB9IgorIAorICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSTjMyICIvc3lzdGVtL2Jpbi9saW5rZXIzMiIKKyAjZGVmaW5lIEdOVV9VU0VSX0RZTkFNSUNfTElOS0VSTjMyIFwKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmggYi9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKK2luZGV4IDA4NzllN2UuLjMxYzQzMzggMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKKysrKyBiL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAorQEAgLTM1NywxNCArMzU3LDE0IEBAIGV4dGVybiBpbnQgZG90X3N5bWJvbHM7CisgI3VuZGVmCUxJTktfT1NfREVGQVVMVF9TUEVDCisgI2RlZmluZSBMSU5LX09TX0RFRkFVTFRfU1BFQyAiJShsaW5rX29zX2xpbnV4KSIKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQuc28uMSIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLnNvLjEiCisgI2lmZGVmIExJTlVYNjRfREVGQVVMVF9BQklfRUxGdjIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIiV7bWFiaT1lbGZ2MTovbGliNjQvbGQ2NC5zby4xOzovbGliNjQvbGQ2NC5zby4yfSIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIiV7bWFiaT1lbGZ2MToiIFNZU1RFTUxJQlNfRElSICJsZDY0LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkNjQuc28uMn0iCisgI2Vsc2UKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIiV7bWFiaT1lbGZ2MjovbGliNjQvbGQ2NC5zby4yOzovbGliNjQvbGQ2NC5zby4xfSIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIiV7bWFiaT1lbGZ2MjoiIFNZU1RFTUxJQlNfRElSICJsZDY0LnNvLjI7OiIgU1lTVEVNTElCU19ESVIgImxkNjQuc28uMX0iCisgI2VuZGlmCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliL2xkNjQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMCIKKyAjaWYgREVGQVVMVF9MSUJDID09IExJQkNfVUNMSUJDCisgI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSkgIiV7bWdsaWJjOiIgRyAiOzoiIFUgIn0iCisgI2VsaWYgREVGQVVMVF9MSUJDID09IExJQkNfR0xJQkMKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL3NoL2xpbnV4LmggYi9nY2MvY29uZmlnL3NoL2xpbnV4LmgKK2luZGV4IDBmNWQ2MTQuLjE2ODQxNmMgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL3NoL2xpbnV4LmgKKysrKyBiL2djYy9jb25maWcvc2gvbGludXguaAorQEAgLTQzLDcgKzQzLDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAKKyAjZGVmaW5lIFRBUkdFVF9BU01fRklMRV9FTkQgZmlsZV9lbmRfaW5kaWNhdGVfZXhlY19zdGFjaworIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICN1bmRlZiBTVUJUQVJHRVRfTElOS19FTVVMX1NVRkZJWAorICNkZWZpbmUgU1VCVEFSR0VUX0xJTktfRU1VTF9TVUZGSVggIl9saW51eCIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmggYi9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgKK2luZGV4IDU2ZGVmNGIuLjAwYjU2NGMgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgKKysrKyBiL2djYy9jb25maWcvc3BhcmMvbGludXguaAorQEAgLTgzLDcgKzgzLDcgQEAgZXh0ZXJuIGNvbnN0IGNoYXIgKmhvc3RfZGV0ZWN0X2xvY2FsX2NwdSAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKKyAgICBXaGVuIHRoZSAtc2hhcmVkIGxpbmsgb3B0aW9uIGlzIHVzZWQgYSBmaW5hbCBsaW5rIGlzIG5vdCBiZWluZworICAgIGRvbmUuICAqLworIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICN1bmRlZiAgTElOS19TUEVDCisgI2RlZmluZSBMSU5LX1NQRUMgIi1tIGVsZjMyX3NwYXJjICV7c2hhcmVkOi1zaGFyZWR9IFwKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaCBiL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCitpbmRleCBmYTgwNWZkLi4wZWI0YWNkIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmgKKysrKyBiL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCitAQCAtODQsOCArODQsOCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgIFdoZW4gdGhlIC1zaGFyZWQgbGluayBvcHRpb24gaXMgdXNlZCBhIGZpbmFsIGxpbmsgaXMgbm90IGJlaW5nCisgICAgZG9uZS4gICovCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLWxpbnV4LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliNjQvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICNpZmRlZiBTUEFSQ19CSV9BUkNICisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjMtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyMy1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMzN2RmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjMtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gOGRiNjA2MjA1NDg3ZWJiMDNlYWU3ODg4MjZmYWY2NGJkNjkxODQ1MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI2OjM3ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjMvMzVdIGdjYzogRml4IGFyZ3VtZW50IGxpc3QgdG9vIGxvbmcgZXJyb3IuCisKK1RoZXJlIHdvdWxkIGJlIGFuICJBcmd1bWVudCBsaXN0IHRvbyBsb25nIiBlcnJvciB3aGVuIHRoZQorYnVpbGQgZGlyZWN0b3J5IGlzIGxvbmdlciB0aGFuIDIwMCwgdGhpcyBpcyBjYXVzZWQgYnk6CisKK2hlYWRlcnM9YGVjaG8gJChQTFVHSU5fSEVBREVSUykgfCB0ciAnICcgJ1wwMTInIHwgc29ydCAtdWAKKworVGhlIFBMVUdJTl9IRUFERVJTIGlzIHRvbyBsb25nIGJlZm9yZSBzb3J0LCBzbyB0aGUgImVjaG8iIGNhbid0IGhhbmRsZQoraXQsIHVzZSB0aGUgJChzb3J0IGxpc3QpIG9mIEdOVSBtYWtlIHdoaWNoIGNhbiBoYW5kbGUgdGhlIHRvbyBsb25nIGxpc3QKK3dvdWxkIGZpeCB0aGUgcHJvYmxlbSwgdGhlIGhlYWRlciB3b3VsZCBiZSBzaG9ydCBlbm91Z2ggYWZ0ZXIgc29ydGVkLgorVGhlICJ0ciAnICcgJ1wwMTInIiB3YXMgdXNlZCBmb3IgdHJhbnNsYXRpbmcgdGhlIHNwYWNlIHRvICJcbiIsIHRoZQorJChzb3J0IGxpc3QpIGRvZXNuJ3QgbmVlZCB0aGlzLgorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL01ha2VmaWxlLmluIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL01ha2VmaWxlLmluIGIvZ2NjL01ha2VmaWxlLmluCitpbmRleCA2NjFhZTE3Li45NDcwYTkyIDEwMDY0NAorLS0tIGEvZ2NjL01ha2VmaWxlLmluCisrKysgYi9nY2MvTWFrZWZpbGUuaW4KK0BAIC0zMjU1LDcgKzMyNTUsNyBAQCBpbnN0YWxsLXBsdWdpbjogaW5zdGFsbGRpcnMgbGFuZy5pbnN0YWxsLXBsdWdpbiBzLWhlYWRlci12YXJzIGluc3RhbGwtZ2VuZ3R5cGUKKyAjIFdlIGtlZXAgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGZpbGVzIGluIGNvbmZpZyBvciBjLWZhbWlseSBhbmQgLmRlZgorICMgZmlsZXMuIEFsbCBvdGhlciBmaWxlcyBhcmUgZmxhdHRlbmVkIHRvIGEgc2luZ2xlIGRpcmVjdG9yeS4KKyAJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChwbHVnaW5faW5jbHVkZWRpcikKKy0JaGVhZGVycz1gZWNobyAkKFBMVUdJTl9IRUFERVJTKSAkJChjZCAkKHNyY2Rpcik7IGVjaG8gKi5oICouZGVmKSB8IHRyICcgJyAnXDAxMicgfCBzb3J0IC11YDsgXAorKwloZWFkZXJzPSIkKHNvcnQgJChQTFVHSU5fSEVBREVSUykgJCQoY2QgJChzcmNkaXIpOyBlY2hvICouaCAqLmRlZikpIjsgXAorIAlzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgOyBcCisgCWZvciBmaWxlIGluICQkaGVhZGVyczsgZG8gXAorIAkgIGlmIFsgLWYgJCRmaWxlIF0gOyB0aGVuIFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyNC1EaXNhYmxlLXNkdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjQtRGlzYWJsZS1zZHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYyMTljYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjQtRGlzYWJsZS1zZHQucGF0Y2gKQEAgLTAsMCArMSwxMTMgQEAKK0Zyb20gZTEzNjM0MmQyZjdjMGJkYjFjZjRiNTdhZDM0NDBkM2M5ZTcxMDMyMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI4OjEwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjQvMzVdIERpc2FibGUgc2R0LgorCitXZSBkb24ndCBsaXN0IGR0cmFjZSBpbiBERVBFTkRTIHNvIHdlIHNob3VsZG4ndCBiZSBkZXBlbmRpbmcgb24gdGhpcyBoZWFkZXIuCitJdCBtYXkgb3IgbWF5IG5vdCBleGlzdCBmcm9tIHByZWl2b3VzIGJ1aWxkcyB0aG91Z2guIFRvIGJlIGRldGVybWluc3RpYywgZGlzYWJsZQorc2R0LmggdXNhZ2UgYWx3YXlzLiBUaGlzIGF2b2lkcyBidWlsZCBmYWlsdXJlcyBpZiB0aGUgaGVhZGVyIGlzIHJlbW92ZWQgYWZ0ZXIgY29uZmlndXJlCitidXQgYmVmb3JlIGxpYmdjYyBpcyBjb21waWxlZCBmb3IgZXhhbXBsZS4KKworUlAgMjAxMi84LzcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworRGlzYWJsZSBzZHQgZm9yIGxpYnN0ZGMrKy12My4KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbaGFja10KKy0tLQorIGdjYy9jb25maWd1cmUgICAgICAgICAgICAgfCAxMiArKysrKystLS0tLS0KKyBnY2MvY29uZmlndXJlLmFjICAgICAgICAgIHwgMTggKysrKysrKysrLS0tLS0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZSAgICB8ICA2ICsrKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWd1cmUuYWMgfCAgMiArLQorIDQgZmlsZXMgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggZjA1OWMyZi4uOTg4NTNiMyAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0yNzczMywxMiArMjc3MzMsMTIgQEAgZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5Li4uICIgPiY2OyB9CisgaGF2ZV9zeXNfc2R0X2g9bm8KKy1pZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKy0gIGhhdmVfc3lzX3NkdF9oPXllcworLQorLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorLQorLWZpCisrI2lmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgorKyMgIGhhdmVfc3lzX3NkdF9oPXllcworKyMKKysjJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCisrIworKyNmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGF2ZV9zeXNfc2R0X2giID4mNQorICRhc19lY2hvICIkaGF2ZV9zeXNfc2R0X2giID4mNjsgfQorIAorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCAyZTY2OGE1Li41MmNkY2I4IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTUyMzIsMTUgKzUyMzIsMTUgQEAgaWYgdGVzdCB4JGdjY19jdl9saWJjX3Byb3ZpZGVzX3NzcCA9IHh5ZXM7IHRoZW4KKyBmaQorIAorICMgVGVzdCBmb3IgPHN5cy9zZHQuaD4gb24gdGhlIHRhcmdldC4KKy1HQ0NfVEFSR0VUX1RFTVBMQVRFKFtIQVZFX1NZU19TRFRfSF0pCistQUNfTVNHX0NIRUNLSU5HKHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSkKKy1oYXZlX3N5c19zZHRfaD1ubworLWlmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgorLSAgaGF2ZV9zeXNfc2R0X2g9eWVzCistICBBQ19ERUZJTkUoSEFWRV9TWVNfU0RUX0gsIDEsCistICAgICAgICAgICAgW0RlZmluZSBpZiB5b3VyIHRhcmdldCBDIGxpYnJhcnkgcHJvdmlkZXMgc3lzL3NkdC5oXSkKKy1maQorLUFDX01TR19SRVNVTFQoJGhhdmVfc3lzX3NkdF9oKQorKyNHQ0NfVEFSR0VUX1RFTVBMQVRFKFtIQVZFX1NZU19TRFRfSF0pCisrI0FDX01TR19DSEVDS0lORyhzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkpCisrI2hhdmVfc3lzX3NkdF9oPW5vCisrI2lmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgorKyMgIGhhdmVfc3lzX3NkdF9oPXllcworKyMgIEFDX0RFRklORShIQVZFX1NZU19TRFRfSCwgMSwKKysjICAgICAgICAgICAgW0RlZmluZSBpZiB5b3VyIHRhcmdldCBDIGxpYnJhcnkgcHJvdmlkZXMgc3lzL3NkdC5oXSkKKysjZmkKKysjQUNfTVNHX1JFU1VMVCgkaGF2ZV9zeXNfc2R0X2gpCisgCisgIyBDaGVjayBpZiBURm1vZGUgbG9uZyBkb3VibGUgc2hvdWxkIGJlIHVzZWQgYnkgZGVmYXVsdCBvciBub3QuCisgIyBTb21lIGdsaWJjIHRhcmdldHMgdXNlZCBERm1vZGUgbG9uZyBkb3VibGUsIGJ1dCB3aXRoIGdsaWJjIDIuNAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitpbmRleCBmYmFkNjY3Li43ZDVhNmM2IDEwMDc1NQorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorQEAgLTIwODk3LDExICsyMDg5NywxMSBAQCBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisgYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKyBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisgCistICBpZiB0ZXN0ICRnbGliY3h4X2N2X3N5c19zZHRfaCA9IHllczsgdGhlbgorKyMgIGlmIHRlc3QgJGdsaWJjeHhfY3Zfc3lzX3NkdF9oID0geWVzOyB0aGVuCisgCistJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCisrIyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorIAorLSAgZmkKKysjICBmaQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbGliY3h4X2N2X3N5c19zZHRfaCIgPiY1CisgJGFzX2VjaG8gIiRnbGliY3h4X2N2X3N5c19zZHRfaCIgPiY2OyB9CisgCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMKK2luZGV4IDdhN2MxZDguLmIxM2VhYmMgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlLmFjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlLmFjCitAQCAtMjI5LDcgKzIyOSw3IEBAIEdMSUJDWFhfQ0hFQ0tfU0NfTlBST0NFU1NPUlNfT05MTgorIEdMSUJDWFhfQ0hFQ0tfU0NfTlBST0NfT05MTgorIEdMSUJDWFhfQ0hFQ0tfUFRIUkVBRFNfTlVNX1BST0NFU1NPUlNfTlAKKyBHTElCQ1hYX0NIRUNLX1NZU0NUTF9IV19OQ1BVCistR0xJQkNYWF9DSEVDS19TRFRfSAorKyNHTElCQ1hYX0NIRUNLX1NEVF9ICisgCisgIyBDaGVjayBmb3IgYXZhaWxhYmxlIGhlYWRlcnMuCisgQUNfQ0hFQ0tfSEVBREVSUyhbZW5kaWFuLmggZXhlY2luZm8uaCBmbG9hdC5oIGZwLmggaWVlZWZwLmggaW50dHlwZXMuaCBcCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjUtbGlidG9vbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjUtbGlidG9vbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODk3N2Q2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyNS1saWJ0b29sLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gMWNhNTQ5NjdkOGY2N2FiMGVjYTc3MjMzNGU1YzkyNWE1ZThjODBjYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI5OjExICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjUvMzVdIGxpYnRvb2wKKworbGlic3RkYysrIGZyb20gZ2NjLXJ1bnRpbWUgZ2V0cyBjcmVhdGVkIHdpdGggLXJwYXRoPS91c3IvbGliLy4uL2xpYiBmb3IgcWVtdXg4Ni02NAord2hlbiBydW5uaW5nIG9uIGFtIHg4Nl82NCBidWlsZCBob3N0LgorCitUaGlzIHBhdGNoIHN0b3BzIHRoaXMgc3BlYWRpbmcgdG8gbGliZGlyIGluIHRoZSBsaWJzdGRjKysubGEgZmlsZSB3aXRoaW4gbGlidG9vbC4KK0FyZ3VhYmx5LCBpdCBzaG91bGRuJ3QgYmUgcGFzc2luZyB0aGlzIGludG8gbGlidG9vbCBpbiB0aGUgZmlyc3QgcGxhY2UgYnV0Citmb3Igbm93IHRoaXMgcmVzb2x2ZXMgdGhlIG5hc3RpZXN0IHByb2JsZW1zIHRoaXMgY2F1c2VzLgorCitmdW5jX25vcm1hbF9hYnNwYXRoIHdvdWxkIHJlc29sdmUgYW4gZW1wdHkgcGF0aCB0byBgcHdkYCBzbyB3ZSBuZWVkCit0byBmaWx0ZXIgdGhlIHplcm8gY2FzZS4KKworUlAgMjAxMi84LzI0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbHRtYWluLnNoIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCitpbmRleCA5NTAzZWM4Li4wMTIxZmJhIDEwMDY0NAorLS0tIGEvbHRtYWluLnNoCisrKysgYi9sdG1haW4uc2gKK0BAIC02MzU5LDYgKzYzNTksMTAgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJZnVuY193YXJuaW5nICJpZ25vcmluZyBtdWx0aXBsZSBcYC1ycGF0aCdzIGZvciBhIGxpYnRvb2wgbGlicmFyeSIKKyAKKyAgICAgICBpbnN0YWxsX2xpYmRpcj0iJDEiCisrICAgICAgaWYgdGVzdCAtbiAiJGluc3RhbGxfbGliZGlyIjsgdGhlbgorKwlmdW5jX25vcm1hbF9hYnNwYXRoICIkaW5zdGFsbF9saWJkaXIiCisrCWluc3RhbGxfbGliZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorKyAgICAgIGZpCisgCisgICAgICAgb2xkbGlicz0KKyAgICAgICBpZiB0ZXN0IC16ICIkcnBhdGgiOyB0aGVuCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjYtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjYtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGE2NTJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyNi1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0Zyb20gNWY1Y2E1N2ZjZWM0YmFmZTM3ODAzNzFkMTM0MmFjZDQwYzYwODY5NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjMwOjMyICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjYvMzVdIGdjYzogYXJtdjQ6IHBhc3MgZml4LXY0YnggdG8gbGlua2VyIHRvIHN1cHBvcnQgRUFCSS4KKworVGhlIExJTktfU1BFQyBmb3IgbGludXggZ2V0cyBvdmVyd3JpdHRlbiBieSBsaW51eC1lYWJpLmggd2hpY2gKK21lYW5zIHRoZSB2YWx1ZSBvZiBUQVJHRVRfRklYX1Y0QlhfU1BFQyBnZXRzIGxvc3QgYW5kIGFzIGEgcmVzdWx0Cit0aGUgb3B0aW9uIGlzIG5vdCBwYXNzZWQgdG8gbGlua2VyIHdoZW4gY2hvc2luZyBtYXJjaD1hcm12NAorVGhpcyBwYXRjaCByZWRlZmluZXMgdGhpcyBpbiBsaW51eC1lYWJpLmggYW5kIHJlaW5zZXJ0cyBpdAorZm9yIGVhYmkgZGVmYXVsdGluZyB0b29sY2hhaW5zLgorCitXZSBtaWdodCB3YW50IHRvIHNlbmQgaXQgdXBzdHJlYW0uCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oIHwgNiArKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggYi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKK2luZGV4IGNmZGYzZjAuLjA0OGEwNjIgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKKysrKyBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorQEAgLTc3LDEwICs3NywxNCBAQAorICAgICAle21mbG9hdC1hYmk9c29mdCo6IiBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUICJ9IFwKKyAgICAgJXshbWZsb2F0LWFiaT0qOiIgR0xJQkNfRFlOQU1JQ19MSU5LRVJfREVGQVVMVCAifSIKKyAKKysvKiBGb3IgYXJtdjQgd2UgcGFzcyAtLWZpeC12NGJ4IHRvIGxpbmtlciB0byBzdXBwb3J0IEVBQkkgKi8KKysjdW5kZWYgVEFSR0VUX0ZJWF9WNEJYX1NQRUMKKysjZGVmaW5lIFRBUkdFVF9GSVhfVjRCWF9TUEVDICIle21jcHU9YXJtOHxtY3B1PWFybTgxMHxtY3B1PXN0cm9uZ2FybSp8bWFyY2g9YXJtdjQ6IC0tZml4LXY0Ynh9IgorKworIC8qIEF0IHRoaXMgcG9pbnQsIGJwYWJpLmggd2lsbCBoYXZlIGNsb2JiZXJlZCBMSU5LX1NQRUMuICBXZSB3YW50IHRvCisgICAgdXNlIHRoZSBHTlUvTGludXggdmVyc2lvbiwgbm90IHRoZSBnZW5lcmljIEJQQUJJIHZlcnNpb24uICAqLworICN1bmRlZiAgTElOS19TUEVDCistI2RlZmluZSBMSU5LX1NQRUMgRUFCSV9MSU5LX1NQRUMJCQkJCVwKKysjZGVmaW5lIExJTktfU1BFQyBUQVJHRVRfRklYX1Y0QlhfU1BFQyBFQUJJX0xJTktfU1BFQwkJCVwKKyAgIExJTlVYX09SX0FORFJPSURfTEQgKExJTlVYX1RBUkdFVF9MSU5LX1NQRUMsCQkJCVwKKyAJCSAgICAgICBMSU5VWF9UQVJHRVRfTElOS19TUEVDICIgIiBBTkRST0lEX0xJTktfU1BFQykKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyNy1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyNy1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NWRhMzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI3LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2gKQEAgLTAsMCArMSwxMDIgQEAKK0Zyb20gNDg0ZThjMWU4ZDQzZTYyNmVlMmRkYmRlOWViOGUwYWY3YTE3NmFlZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjMzOjA0ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjcvMzVdIFVzZSB0aGUgbXVsdGlsaWIgY29uZmlnIGZpbGVzIGZyb20gJHtCfSBpbnN0ZWFkIG9mCisgdXNpbmcgdGhlIG9uZXMgZnJvbSAke1N9CisKK1VzZSB0aGUgbXVsdGlsaWIgY29uZmlnIGZpbGVzIGZyb20gJHtCfSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBvbmVzIGZyb20gJHtTfQorc28gdGhhdCB0aGUgc291cmNlIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBnY2MtY3Jvc3MtaW5pdGlhbCwKK2djYy1jcm9zcy1pbnRlcm1lZGlhdGUsIGdjYy1jcm9zcywgZ2NjLXJ1bnRpbWUsIGFuZCBhbHNvIHRoZSBzZGsgYnVpbGQuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKy0tLQorIGdjYy9jb25maWd1cmUgICAgfCAyMiArKysrKysrKysrKysrKysrKystLS0tCisgZ2NjL2NvbmZpZ3VyZS5hYyB8IDIyICsrKysrKysrKysrKysrKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDM2IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggOTg4NTNiMy4uZDBlYzUwZiAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0xMTgyMSwxMCArMTE4MjEsMjAgQEAgZG9uZQorIHRtYWtlX2ZpbGVfPQorIGZvciBmIGluICR7dG1ha2VfZmlsZX0KKyBkbworLQlpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKKy0JdGhlbgorLQkJdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorLQlmaQorKyAgY2FzZSAkZiBpbgorKyAgICAqL3QtbGludXg2NCApCisrICAgICAgIGlmIHRlc3QgLWYgLi9jb25maWcvJGYKKysgICAgICAgdGhlbgorKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSAuL2NvbmZpZy8kZiIKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgKiApCisrICAgICAgIGlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgZXNhYworIGRvbmUKKyB0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGVffSIKKyAKK0BAIC0xMTgzNSw2ICsxMTg0NSwxMCBAQCB0bV9maWxlX2xpc3Q9Im9wdGlvbnMuaCIKKyB0bV9pbmNsdWRlX2xpc3Q9Im9wdGlvbnMuaCBpbnNuLWNvbnN0YW50cy5oIgorIGZvciBmIGluICR0bV9maWxlOyBkbworICAgY2FzZSAkZiBpbgorKyAgICAqL2xpbnV4NjQuaCApCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgOzsKKyAgICAgLi8qICkKKyAgICAgICAgZj1gZWNobyAkZiB8IHNlZCAncy9eLi4vLydgCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9ICRmIgorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCA1MmNkY2I4Li4zY2Y2MDZhIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTE4MTIsMTAgKzE4MTIsMjAgQEAgZG9uZQorIHRtYWtlX2ZpbGVfPQorIGZvciBmIGluICR7dG1ha2VfZmlsZX0KKyBkbworLQlpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKKy0JdGhlbgorLQkJdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorLQlmaQorKyAgY2FzZSAkZiBpbgorKyAgICAqL3QtbGludXg2NCApCisrICAgICAgIGlmIHRlc3QgLWYgLi9jb25maWcvJGYKKysgICAgICAgdGhlbgorKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSAuL2NvbmZpZy8kZiIKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgKiApCisrICAgICAgIGlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgZXNhYworIGRvbmUKKyB0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGVffSIKKyAKK0BAIC0xODI2LDYgKzE4MzYsMTAgQEAgdG1fZmlsZV9saXN0PSJvcHRpb25zLmgiCisgdG1faW5jbHVkZV9saXN0PSJvcHRpb25zLmggaW5zbi1jb25zdGFudHMuaCIKKyBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgIGNhc2UgJGYgaW4KKysgICAgKi9saW51eDY0LmggKQorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi9jb25maWcvJGYiCisrICAgICAgIDs7CisgICAgIC4vKiApCisgICAgICAgIGY9YGVjaG8gJGYgfCBzZWQgJ3MvXi4uLy8nYAorICAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAkZiIKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyOC1Bdm9pZC11c2luZy1saWJkaXItZnJvbS0ubGEtd2hpY2gtdXN1YWxseS1wb2ludHMtdG8tLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyOC1Bdm9pZC11c2luZy1saWJkaXItZnJvbS0ubGEtd2hpY2gtdXN1YWxseS1wb2ludHMtdG8tLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MDJlOTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI4LUF2b2lkLXVzaW5nLWxpYmRpci1mcm9tLS5sYS13aGljaC11c3VhbGx5LXBvaW50cy10by0ucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSAxMTJjYTlmODYwMTE0YmM3OTI3M2E3OWVkNDI3MjJmZGM5ZGVkNmVhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMDk6Mzk6MzggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyOC8zNV0gQXZvaWQgdXNpbmcgbGliZGlyIGZyb20gLmxhIHdoaWNoIHVzdWFsbHkgcG9pbnRzIHRvIGEKKyBob3N0IHBhdGgKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGx0bWFpbi5zaCB8IDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCitpbmRleCAwMTIxZmJhLi41MmJkYmRiIDEwMDY0NAorLS0tIGEvbHRtYWluLnNoCisrKysgYi9sdG1haW4uc2gKK0BAIC01NjI4LDYgKzU2MjgsOSBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgorIAkgICAgbGliZGlyPSIkYWJzX2xhZGlyIgorIAkgIGVsc2UKKysJICAgICMgSW5zdGVhZCBvZiB1c2luZyBsaWJkaXIgZnJvbSAubGEgd2hpY2ggdXN1YWxseSBwb2ludHMgdG8gYSBob3N0IHBhdGgsCisrCSAgICAjIHVzZSB0aGUgcGF0aCB0aGUgLmxhIGlzIGNvbnRhaW5lZCBpbi4KKysJICAgIGxpYmRpcj0iJGFic19sYWRpciIKKyAJICAgIGRpcj0iJGxpYmRpciIKKyAJICAgIGFic2Rpcj0iJGxpYmRpciIKKyAJICBmaQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI5LWV4cG9ydC1DUFAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI5LWV4cG9ydC1DUFAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEwNWFlNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjktZXhwb3J0LUNQUC5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tIGE5ODMwMzNmMTMyN2E2OTJhZjU1YmU4ZDFhYTYxYWVkZTE4YzRhZmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwOTo0MDo1OSArMDAwMAorU3ViamVjdDogW1BBVENIIDI5LzM1XSBleHBvcnQgQ1BQCisKK1RoZSBPRSBlbnZpcm9ubWVudCBzZXRzIGFuZCBleHBvcnRzIENQUCBhcyBiZWluZyB0aGUgdGFyZ2V0IGdjYy4gV2hlbgorYnVpbGRpbmcgZ2NjLWNyb3NzLWNhbmFkaWFuIGZvciBhIG1pbmd3IHRhcmdldHRlZCBzZGssIHRoZSBmb2xsb3dpbmcgY2FuIGJlIGZvdW5kCitpbiBidWlsZC54ODZfNjQtcG9reXNkay1taW5ndzMyLmk1ODYtcG9reS1saW51eC9idWlsZC14ODZfNjQtbGludXgvbGliaWJlcnR5L2NvbmZpZy5sb2c6CisKK2NvbmZpZ3VyZTozNjQxOiBjaGVja2luZyBmb3IgX0ZJTEVfT0ZGU0VUX0JJVFMgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcworY29uZmlndXJlOjM2NjY6IGdjYyAgLWMgLWlzeXN0ZW0vbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtTzIgLXBpcGUgIGNvbmZ0ZXN0LmMgPiY1Citjb25maWd1cmU6MzY2NjogJD8gPSAwCitjb25maWd1cmU6MzY5ODogcmVzdWx0OiBubworY29uZmlndXJlOjM3ODY6IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yCitjb25maWd1cmU6Mzg1NjogcmVzdWx0OiB4ODZfNjQtcG9reXNkay1taW5ndzMyLWdjYyAtRSAtLXN5c3Jvb3Q9L21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbmF0aXZlc2RrLW1pbmd3MzItcG9reXNkay1taW5ndzMyCitjb25maWd1cmU6Mzg3NjogeDg2XzY0LXBva3lzZGstbWluZ3czMi1nY2MgLUUgLS1zeXNyb290PS9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LW5hdGl2ZXNkay1taW5ndzMyLXBva3lzZGstbWluZ3czMiBjb25mdGVzdC5jCitjb25maWd1cmU6Mzg3NjogJD8gPSAwCisKK05vdGUgdGhpcyBpcyBhICpidWlsZCogdGFyZ2V0IChpbiBidWlsZC14ODZfNjQtbGludXgpIHNvIGl0IHNob3VsZCBiZQordXNpbmcgdGhlIGhvc3QgImdjYyIsIG5vdCB4ODZfNjQtcG9reXNkay1taW5ndzMyLWdjYy4gU2luY2UgdGhlIG1pbmd3MzIKK2hlYWRlcnMgYXJlIHZlcnkgZGlmZmVyZW50LCB1c2luZyB0aGUgd3JvbmcgY3BwIGlzIGEgcmVhbCBwcm9ibGVtLiBJdCBpcyBsZWFraW5nCitpbnRvIGNvbmZpZ3VyZSB0aHJvdWdoIHRoZSBDUFAgdmFyaWFibGUuIFVsdGltYXRlbHkgdGhpcyBsZWFkcyB0byBidWlsZAorZmFpbHVyZXMgcmVsYXRlZCB0byBub3QgYmVpbmcgYWJsZSB0byBpbmNsdWRlIGEgcHJvY2Vzcy5oIGZpbGUgZm9yIHBlbS11bml4LmMuCisKK1RoZSBmaXggaXMgdG8gZW5zdXJlIHdlIGV4cG9ydCBhIHNhbmUgQ1BQIHZhbHVlIGludG8gdGhlIGJ1aWxkCitlbnZpcm9ubWVudCB3aGVuIHVzaW5nIGJ1aWxkIHRhcmdldHMuIFdlIGNvdWxkIGRlZmluZSBhIENQUF9GT1JfQlVJTEQgdmFsdWUgd2hpY2ggbWF5IGJlCit0aGUgdmVyc2lvbiB3aGljaCBuZWVkcyB0byBiZSB1cHN0cmVhbWVkIGJ1dCBmb3Igbm93LCB0aGlzIGZpeCBpcyBnb29kIGVub3VnaCB0bworYXZvaWQgdGhlIHByb2JsZW0uCisKK1JQIDIyLzA4LzIwMTMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggMzZiNDAwOC4uYTc4M2UxZSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTE0OSw2ICsxNDksNyBAQCBCVUlMRF9FWFBPUlRTID0gXAorIAlBUj0iJChBUl9GT1JfQlVJTEQpIjsgZXhwb3J0IEFSOyBcCisgCUFTPSIkKEFTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQVM7IFwKKyAJQ0M9IiQoQ0NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDQzsgXAorKwlDUFA9IiQoQ0NfRk9SX0JVSUxEKSAtRSI7IGV4cG9ydCBDUFA7IFwKKyAJQ0ZMQUdTPSIkKENGTEFHU19GT1JfQlVJTEQpIjsgZXhwb3J0IENGTEFHUzsgXAorIAlDT05GSUdfU0hFTEw9IiQoU0hFTEwpIjsgZXhwb3J0IENPTkZJR19TSEVMTDsgXAorIAlDWFg9IiQoQ1hYX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ1hYOyBcCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzAtRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzAtRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzNkY2E5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzMC1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0Zyb20gM2Q4NzBhMTg0YzA1ZGYxMzM4ZGIxODcwMzAxYzQxNDRiYTk5ZmMzZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRydS1DZXphciBTYXJkYW4gPGFsZXhhbmRydS5zYXJkYW5AZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFdlZCwgNSBGZWIgMjAxNCAxNjo1MjozMSArMDIwMAorU3ViamVjdDogW1BBVENIIDMwLzM1XSBFbmFibGUgU1BFICYgQWx0aVZlYyBnZW5lcmF0aW9uIG9uIHBvd2VwYypsaW51eCB0YXJnZXQKKworV2hlbiBpcyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eCwgdGhlIHJlc3VsdGluZyBHQ0Mgd2lsbAorbm90IGJlIGFibGUgdG8gZ2VuZXJhdGUgY29kZSBmb3IgU1BFIHRhcmdldHMgKGU1MDB2MS92MikuCitHQ0MgY29uZmlndXJlZCB3aXRoIC0tdGFyZ2V0PXBvd2VycGMtbGludXhzcGUgd2lsbCBub3QgYmUgYWJsZSB0bworZ2VuZXJhdGUgQWx0aVZlYyBpbnN0cnVjdGlvbnMgKGZvciBlNjUwMCkuCitUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25maWd1cmVkIGZpbGUgc3VjaCB0aGF0IFNQRSBvciBBbHRpVmVjIGNvZGUKK2NhbiBiZSBnZW5lcmF0ZWQgd2hlbiBnY2MgaXMgY29uZmlndXJlZCB3aXRoIC0tdGFyZ2V0PXBvd2VycGMtbGludXguCitUaGUgQUJJIGFuZCBzcGVjaWZmaWMgaW5zdHJ1Y3Rpb25zIGNhbiBiZSBzZWxlY3RlZCB0aHJvdWdoIHRoZQorIi1tYWJpPXNwZSBvciAtbWFiaT1hbHRpdmVjIiBhbmQgdGhlICItbXNwZSBvciAtbWFsdGl2ZWMiIHBhcmFtZXRlcnMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogQWxleGFuZHJ1LUNlemFyIFNhcmRhbiA8YWxleGFuZHJ1LnNhcmRhbkBmcmVlc2NhbGUuY29tPgorLS0tCisgZ2NjL2NvbmZpZy5nY2MgfCA5ICsrKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcuZ2NjIGIvZ2NjL2NvbmZpZy5nY2MKK2luZGV4IGIxNTU3NDQuLjA1NDFiOGEgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnLmdjYworKysrIGIvZ2NjL2NvbmZpZy5nY2MKK0BAIC0yMzM3LDcgKzIzMzcsMTQgQEAgcG93ZXJwYy0qLXJ0ZW1zKikKKyAJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSByczYwMDAvdC1mcHJ1bGVzIHJzNjAwMC90LXJ0ZW1zIHJzNjAwMC90LXBwY2NvbW0iCisgCTs7CisgcG93ZXJwYyotKi1saW51eCopCistCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBnbnUtdXNlci5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIgorKwljYXNlICR7dGFyZ2V0fSBpbgorKwkgICAgcG93ZXJwYyotKi1saW51eCpzcGUqIHwgcG93ZXJwYyotKi1saW51eCphbHRpdmVjKikKKysJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBnbnUtdXNlci5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIgorKwkJOzsKKysJICAgICopCisrCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieGVsZi5oIGVsZm9zLmggZ251LXVzZXIuaCBmcmVlYnNkLXNwZWMuaCByczYwMDAvc3lzdjQuaCByczYwMDAvbGludXhhbHRpdmVjLmggcnM2MDAwL2xpbnV4c3BlLmggcnM2MDAwL2U1MDAuaCIKKysJCTs7CisrCWVzYWMKKyAJZXh0cmFfb3B0aW9ucz0iJHtleHRyYV9vcHRpb25zfSByczYwMDAvc3lzdjQub3B0IgorIAl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IHJzNjAwMC90LWZwcnVsZXMgcnM2MDAwL3QtcHBjY29tbSIKKyAJZXh0cmFfb2Jqcz0iJGV4dHJhX29ianMgcnM2MDAwLWxpbnV4Lm8iCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzEtRGlzYWJsZS10aGUtTVVMVElMSUJfT1NESVJOQU1FUy1hbmQtb3RoZXItbXVsdGlsaWItby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzEtRGlzYWJsZS10aGUtTVVMVElMSUJfT1NESVJOQU1FUy1hbmQtb3RoZXItbXVsdGlsaWItby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDZjYmE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzMS1EaXNhYmxlLXRoZS1NVUxUSUxJQl9PU0RJUk5BTUVTLWFuZC1vdGhlci1tdWx0aWxpYi1vLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gYTgyNGNkM2Y0NTg3NWY2YzFjNDdjY2RiZjMzNTM0OTQ3YmQyYjU4NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDEwOjIxOjU1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMzEvMzVdIERpc2FibGUgdGhlIE1VTFRJTElCX09TRElSTkFNRVMgYW5kIG90aGVyIG11bHRpbGliCisgb3B0aW9ucy4KKworSGFyZCBjb2RpbmcgdGhlIE1VTFRJTElCX09TRElSTkFNRVMgd2l0aCAuLi9saWI2NCBpcyBjYXVzaW5nIHByb2JsZW1zIG9uCitzeXN0ZW1zIHdoZXJlIHRoZSBsaWJkaXIgaXMgTk9UIHNldCB0byAvbGliNjQuICBUaGlzIGlzIGFsbG93ZWQgYnkgdGhlCitBQkksIGFzCitsb25nIGFzIHRoZSBkeW5hbWljIGxvYWRlciBpcyBwcmVzZW50IGluIC9saWIuCisKK1dlIHNpbXBseSB3YW50IHRvIHVzZSB0aGUgZGVmYXVsdCBydWxlcyBpbiBnY2MgdG8gZmluZCBhbmQgY29uZmlndXJlIHRoZQorbm9ybWFsIGxpYmRpci4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlW09FLVNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eCB8IDggKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eCBiL2djYy9jb25maWcvYWFyY2g2NC90LWFhcmNoNjQtbGludXgKK2luZGV4IGMyOTYzNzYuLjNiYjU5YmYgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2FhcmNoNjQvdC1hYXJjaDY0LWxpbnV4CisrKysgYi9nY2MvY29uZmlnL2FhcmNoNjQvdC1hYXJjaDY0LWxpbnV4CitAQCAtMjEsOCArMjEsOCBAQAorIExJQjFBU01TUkMgICA9IGFhcmNoNjQvbGliMWZ1bmNzLmFzbQorIExJQjFBU01GVU5DUyA9IF9hYXJjaDY0X3N5bmNfY2FjaGVfcmFuZ2UKKyAKKy1BQVJDSF9CRSA9ICQoaWYgJChmaW5kc3RyaW5nIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQ9MSwgJCh0bV9kZWZpbmVzKSksX2JlKQorLU1VTFRJTElCX09TRElSTkFNRVMgPSBtYWJpLmxwNjQ9Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDphYXJjaDY0JChBQVJDSF9CRSktbGludXgtZ251KQorLU1VTFRJQVJDSF9ESVJOQU1FID0gJChjYWxsIGlmX211bHRpYXJjaCxhYXJjaDY0JChBQVJDSF9CRSktbGludXgtZ251KQorKyNBQVJDSF9CRSA9ICQoaWYgJChmaW5kc3RyaW5nIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQ9MSwgJCh0bV9kZWZpbmVzKSksX2JlKQorKyNNVUxUSUxJQl9PU0RJUk5BTUVTID0gbWFiaS5scDY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6YWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKKysjTVVMVElBUkNIX0RJUk5BTUUgPSAkKGNhbGwgaWZfbXVsdGlhcmNoLGFhcmNoNjQkKEFBUkNIX0JFKS1saW51eC1nbnUpCisgCistTVVMVElMSUJfT1NESVJOQU1FUyArPSBtYWJpLmlscDMyPS4uL2xpYmlscDMyCisrI01VTFRJTElCX09TRElSTkFNRVMgKz0gbWFiaS5pbHAzMj0uLi9saWJpbHAzMgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMyLUVuc3VyZS10YXJnZXQtZ2NjLWhlYWRlcnMtY2FuLWJlLWluY2x1ZGVkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzMi1FbnN1cmUtdGFyZ2V0LWdjYy1oZWFkZXJzLWNhbi1iZS1pbmNsdWRlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTEzMzA2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzMi1FbnN1cmUtdGFyZ2V0LWdjYy1oZWFkZXJzLWNhbi1iZS1pbmNsdWRlZC5wYXRjaApAQCAtMCwwICsxLDk4IEBACitGcm9tIGU2MDA5MGY3YzUzN2M4NGZkMWIyMjMwN2VkZDlmMzg2MjI4YzczMzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAxMDoyNToxMSArMDAwMAorU3ViamVjdDogW1BBVENIIDMyLzM1XSBFbnN1cmUgdGFyZ2V0IGdjYyBoZWFkZXJzIGNhbiBiZSBpbmNsdWRlZAorCitUaGVyZSBhcmUgYSBmZXcgaGVhZGVycyBpbnN0YWxsZWQgYXMgcGFydCBvZiB0aGUgT3BlbkVtYmVkZGVkCitnY2MtcnVudGltZSB0YXJnZXQgKG9tcC5oLCBzc3AvKi5oKS4gQmVpbmcgaW5zdGFsbGVkIGZyb20gYSByZWNpcGUKK2J1aWx0IGZvciB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgdGhlc2UgYXJlIHdpdGhpbiB0aGUgdGFyZ2V0CitzeXNyb290IGFuZCBub3QgY3Jvc3MvbmF0aXZlc2RrOyB0aHVzIHRoZXkgd2VyZW4ndCBhYmxlIHRvIGJlCitmb3VuZCBieSBnY2Mgd2l0aCB0aGUgZXhpc3Rpbmcgc2VhcmNoIHBhdGhzLiBBZGQgc3VwcG9ydCBmb3IKK3BpY2tpbmcgdXAgdGhlc2UgaGVhZGVycyB1bmRlciB0aGUgc3lzcm9vdCBzdXBwbGllZCBvbiB0aGUgZ2NjCitjb21tYW5kIGxpbmUgaW4gb3JkZXIgdG8gcmVzb2x2ZSB0aGlzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ2NjL01ha2VmaWxlLmluICB8IDIgKysKKyBnY2MvY3BwZGVmYXVsdC5jIHwgNCArKysrCisgZ2NjL2RlZmF1bHRzLmggICB8IDkgKysrKysrKysrCisgZ2NjL2djYy5jICAgICAgICB8IDcgLS0tLS0tLQorIDQgZmlsZXMgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5pbgoraW5kZXggOTQ3MGE5Mi4uMTQ5N2VkZSAxMDA2NDQKKy0tLSBhL2djYy9NYWtlZmlsZS5pbgorKysrIGIvZ2NjL01ha2VmaWxlLmluCitAQCAtNTgyLDYgKzU4Miw3IEBAIGxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKKyAKKyAjIERpcmVjdG9yeSBpbiB3aGljaCB0aGUgY29tcGlsZXIgZmluZHMgbGlicmFyaWVzIGV0Yy4KKyBsaWJzdWJkaXIgPSAkKGxpYmRpcikvZ2NjLyQocmVhbF90YXJnZXRfbm9uY2Fub25pY2FsKS8kKHZlcnNpb24pJChhY2NlbF9kaXJfc3VmZml4KQorK2xpYnN1YmRpcl90YXJnZXQgPSBnY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKHZlcnNpb24pCisgIyBEaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGNvbXBpbGVyIGZpbmRzIGV4ZWN1dGFibGVzCisgbGliZXhlY3N1YmRpciA9ICQobGliZXhlY2RpcikvZ2NjLyQocmVhbF90YXJnZXRfbm9uY2Fub25pY2FsKS8kKHZlcnNpb24pJChhY2NlbF9kaXJfc3VmZml4KQorICMgRGlyZWN0b3J5IGluIHdoaWNoIGFsbCBwbHVnaW4gcmVzb3VyY2VzIGFyZSBpbnN0YWxsZWQKK0BAIC0yNjAzLDYgKzI2MDQsNyBAQCBDRkxBR1MtaW50bC5vICs9IC1ETE9DQUxFRElSPVwiJChsb2NhbGVkaXIpXCIKKyAKKyBQUkVQUk9DRVNTT1JfREVGSU5FUyA9IFwKKyAgIC1ER0NDX0lOQ0xVREVfRElSPVwiJChsaWJzdWJkaXIpL2luY2x1ZGVcIiBcCisrICAtREdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQ9XCIkKGxpYnN1YmRpcl90YXJnZXQpL2luY2x1ZGVcIiBcCisgICAtREZJWEVEX0lOQ0xVREVfRElSPVwiJChsaWJzdWJkaXIpL2luY2x1ZGUtZml4ZWRcIiBcCisgICAtREdQTFVTUExVU19JTkNMVURFX0RJUj1cIiQoZ2NjX2d4eF9pbmNsdWRlX2RpcilcIiBcCisgICAtREdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVD0kKGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3QpIFwKK2RpZmYgLS1naXQgYS9nY2MvY3BwZGVmYXVsdC5jIGIvZ2NjL2NwcGRlZmF1bHQuYworaW5kZXggNTgwYzFiYS4uMDNhMDI4NyAxMDA2NDQKKy0tLSBhL2djYy9jcHBkZWZhdWx0LmMKKysrKyBiL2djYy9jcHBkZWZhdWx0LmMKK0BAIC01OSw2ICs1OSwxMCBAQCBjb25zdCBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlIGNwcF9pbmNsdWRlX2RlZmF1bHRzW10KKyAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMuICAqLworICAgICB7IEdDQ19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKyAjZW5kaWYKKysjaWZkZWYgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVAorKyAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycyB1bmRlciB0aGUgc3BlY2lmaWVkIHN5c3Jvb3QuICAqLworKyAgICB7IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VULCAiR0NDIiwgMCwgMCwgMSwgMCB9LAorKyNlbmRpZgorICNpZmRlZiBMT0NBTF9JTkNMVURFX0RJUgorICAgICAvKiAvdXNyL2xvY2FsL2luY2x1ZGUgY29tZXMgYmVmb3JlIHRoZSBmaXhpbmNsdWRlZCBoZWFkZXIgZmlsZXMuICAqLworICAgICB7IExPQ0FMX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAxLCAyIH0sCitkaWZmIC0tZ2l0IGEvZ2NjL2RlZmF1bHRzLmggYi9nY2MvZGVmYXVsdHMuaAoraW5kZXggMWQ1NDc5OC4uOTgzZDQ1ZSAxMDA2NDQKKy0tLSBhL2djYy9kZWZhdWx0cy5oCisrKysgYi9nY2MvZGVmYXVsdHMuaAorQEAgLTEzNjEsNCArMTM2MSwxMyBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKyAKKyAjZW5kaWYgLyogR0NDX0lOU05fRkxBR1NfSCAgKi8KKyAKKysvKiBEZWZhdWx0IHByZWZpeGVzIHRvIGF0dGFjaCB0byBjb21tYW5kIG5hbWVzLiAgKi8KKysKKysjaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMQorKyNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xICIvbGliLyIKKysjZW5kaWYKKysjaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMgorKyNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yICIvdXNyL2xpYi8iCisrI2VuZGlmCisrCisgI2VuZGlmICAvKiAhIEdDQ19ERUZBVUxUU19IICovCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCBlNmVmYWU3Li4zY2EyN2I5IDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC0xMjYzLDEzICsxMjYzLDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmdjY19saWJleGVjX3ByZWZpeDsKKyAKKyAvKiBEZWZhdWx0IHByZWZpeGVzIHRvIGF0dGFjaCB0byBjb21tYW5kIG5hbWVzLiAgKi8KKyAKKy0jaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMQorLSNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xICIvbGliLyIKKy0jZW5kaWYKKy0jaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMgorLSNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yICIvdXNyL2xpYi8iCistI2VuZGlmCistCisgI2lmZGVmIENST1NTX0RJUkVDVE9SWV9TVFJVQ1RVUkUgIC8qIERvbid0IHVzZSB0aGVzZSBwcmVmaXhlcyBmb3IgYSBjcm9zcyBjb21waWxlci4gICovCisgI3VuZGVmIE1EX0VYRUNfUFJFRklYCisgI3VuZGVmIE1EX1NUQVJURklMRV9QUkVGSVgKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzMy1nY2MtNC44LXdvbi10LWJ1aWxkLXdpdGgtZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzMy1nY2MtNC44LXdvbi10LWJ1aWxkLXdpdGgtZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxOWU0MTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMzLWdjYy00Ljgtd29uLXQtYnVpbGQtd2l0aC1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSA5OTdmOWU5MzlmODVmNjUxYjIyYTQ4MjUxY2ZiMTQ0NDgzMWQ1NGNhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMTE6MTc6MTkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzMy8zNV0gZ2NjIDQuOCsgd29uJ3QgYnVpbGQgd2l0aCAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZworCitzaW5jZSB0aGUgKi5QcG8gZmlsZXMgZG9uJ3QgZ2V0IGNyZWF0ZWQgdW5sZXNzIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgaXMgdHJ1ZS4KKworVGhpcyBwYXRjaCBlbnN1cmVzIHdlIG9ubHkgdXNlIHRob3NlIGNvbXBpbGVyIG9wdGlvbnMgd2hlbiBpdHMgZW5hYmxlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworKFByb2JsZW0gd2FzIGFscmVhZHkgcmVwb3J0ZWQgdXBzdHJlYW0sIGF0dGFjaGVkIHRoaXMgcGF0Y2ggdGhlcmUKK2h0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTU5MzApCisKK1JQCisyMDEyLzA5LzIyCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWJhdG9taWMvTWFrZWZpbGUuYW0gfCAzICsrLQorIGxpYmF0b21pYy9NYWtlZmlsZS5pbiB8IDMgKystCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJhdG9taWMvTWFrZWZpbGUuYW0gYi9saWJhdG9taWMvTWFrZWZpbGUuYW0KK2luZGV4IDNkOGFiNjIuLjIzZGZmN2UgMTAwNjQ0CistLS0gYS9saWJhdG9taWMvTWFrZWZpbGUuYW0KKysrKyBiL2xpYmF0b21pYy9NYWtlZmlsZS5hbQorQEAgLTEwMSw3ICsxMDEsOCBAQCBQQVRfUwkJPSAkKHdvcmQgMywkKFBBVF9TUExJVCkpCisgSUZVTkNfREVGCT0gLURJRlVOQ19BTFQ9JChQQVRfUykKKyBJRlVOQ19PUFQJPSAkKHdvcmQgJChQQVRfUyksJChJRlVOQ19PUFRJT05TKSkKKyAKKy1NX0RFUFMJCT0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfVFJVRUBNX0RFUFMJCT0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfRkFMU0VATV9ERVBTCQk9CisgTV9TSVpFCQk9IC1ETj0kKFBBVF9OKQorIE1fSUZVTkMJCT0gJChpZiAkKFBBVF9TKSwkKElGVU5DX0RFRikgJChJRlVOQ19PUFQpKQorIE1fRklMRQkJPSAkKFBBVF9CQVNFKV9uLmMKK2RpZmYgLS1naXQgYS9saWJhdG9taWMvTWFrZWZpbGUuaW4gYi9saWJhdG9taWMvTWFrZWZpbGUuaW4KK2luZGV4IDkyODg2NTIuLjM3MjAyNTYgMTAwNjQ0CistLS0gYS9saWJhdG9taWMvTWFrZWZpbGUuaW4KKysrKyBiL2xpYmF0b21pYy9NYWtlZmlsZS5pbgorQEAgLTMzMCw3ICszMzAsOCBAQCBQQVRfTiA9ICQod29yZCAyLCQoUEFUX1NQTElUKSkKKyBQQVRfUyA9ICQod29yZCAzLCQoUEFUX1NQTElUKSkKKyBJRlVOQ19ERUYgPSAtRElGVU5DX0FMVD0kKFBBVF9TKQorIElGVU5DX09QVCA9ICQod29yZCAkKFBBVF9TKSwkKElGVU5DX09QVElPTlMpKQorLU1fREVQUyA9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCisrQEFNREVQX1RSVUVATV9ERVBTID0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfRkFMU0VATV9ERVBTID0KKyBNX1NJWkUgPSAtRE49JChQQVRfTikKKyBNX0lGVU5DID0gJChpZiAkKFBBVF9TKSwkKElGVU5DX0RFRikgJChJRlVOQ19PUFQpKQorIE1fRklMRSA9ICQoUEFUX0JBU0UpX24uYworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM0LURvbi10LXNlYXJjaC1ob3N0LWRpcmVjdG9yeS1kdXJpbmctcmVsaW5rLWlmLWluc3RfcHIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM0LURvbi10LXNlYXJjaC1ob3N0LWRpcmVjdG9yeS1kdXJpbmctcmVsaW5rLWlmLWluc3RfcHIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA3Y2Q3YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzQtRG9uLXQtc2VhcmNoLWhvc3QtZGlyZWN0b3J5LWR1cmluZy1yZWxpbmstaWYtaW5zdF9wci5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIGM5NGRhMjU3YTIxOTg3M2I5NDZlMDgzMDYxNDFhZjc3NDk2NzlmNjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVHVlLCAzIE1hciAyMDE1IDA4OjIxOjE5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMzQvMzVdIERvbid0IHNlYXJjaCBob3N0IGRpcmVjdG9yeSBkdXJpbmcgInJlbGluayIgaWYKKyAkaW5zdF9wcmVmaXggaXMgcHJvdmlkZWQKKworaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2xpYnRvb2wtcGF0Y2hlcy8yMDExLTAxL21zZzAwMDI2Lmh0bWwKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGx0bWFpbi5zaCB8IDUgKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCitpbmRleCA1MmJkYmRiLi44MmJjZWMzIDEwMDY0NAorLS0tIGEvbHRtYWluLnNoCisrKysgYi9sdG1haW4uc2gKK0BAIC02MDA0LDEyICs2MDA0LDEzIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAgIGZpCisgCSAgICBlbHNlCisgCSAgICAgICMgV2UgY2Fubm90IHNlZW0gdG8gaGFyZGNvZGUgaXQsIGd1ZXNzIHdlJ2xsIGZha2UgaXQuCisrCSAgICAgICMgRGVmYXVsdCBpZiAkbGliZGlyIGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcHJlZml4OgorIAkgICAgICBhZGRfZGlyPSItTCRsaWJkaXIiCistCSAgICAgICMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KKysKKyAJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKyAJCWNhc2UgJGxpYmRpciBpbgorIAkJICBbXFwvXSopCistCQkgICAgYWRkX2Rpcj0iJGFkZF9kaXIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKysJCSAgICBhZGRfZGlyPSItTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorIAkJICAgIDs7CisgCQllc2FjCisgCSAgICAgIGZpCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzUtRG9udC1saW5rLXRoZS1wbHVnaW5zLXdpdGgtbGliZ29tcC1leHBsaWNpdGx5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNS1Eb250LWxpbmstdGhlLXBsdWdpbnMtd2l0aC1saWJnb21wLWV4cGxpY2l0bHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc1ZjM4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzUtRG9udC1saW5rLXRoZS1wbHVnaW5zLXdpdGgtbGliZ29tcC1leHBsaWNpdGx5LnBhdGNoCkBAIC0wLDAgKzEsODMgQEAKK0Zyb20gM2EwOTU0NWYzZDE4Y2U0OTJlZjU1NjM5MjE1YTA3MjI4MmRlMDNkMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDggTWFyIDIwMTUgMDM6NDE6MzkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzNS8zNV0gRG9udCBsaW5rIHRoZSBwbHVnaW5zIHdpdGggbGliZ29tcCBleHBsaWNpdGx5CisKK1RoZXkgYXJlIGRsb3BlbmVkIGJ5IGxpYmdvbXAgYW55d2F5LiBUaGlzIGZpeGVzCit0aGUgbGlidG9vbCByZWxpbmsgaXNzdWUgd2hpY2ggY2F1c2VzIGlzc3VlcyBkdXJpbmcKK2Nyb3NzIGNvbXBpbGF0aW9uCisKK2xpYnRvb2w6IGluc3RhbGw6IC91c3IvYmluL2luc3RhbGwgLWMgLmxpYnMvbGliZ29tcC5sYWkKKy9ob21lL3VidW50dS93b3JrL2JsZWVkaW5nL2J1aWxkLXFlbXV4ODYtNjRtYy90bXAvd29yay9jb3JlMi02NC1yZGstbGludXgvZ2NjLXJ1bnRpbWUvNS4wLXIwL2ltYWdlL3Vzci9saWIvLi4vbGliL2xpYmdvbXAubGEKK2xpYnRvb2w6IGluc3RhbGw6IGVycm9yOiBjYW5ub3QgaW5zdGFsbCBgbGliZ29tcC1wbHVnaW4taG9zdF9ub25zaG0ubGEnCit0byBhIGRpcmVjdG9yeSBub3QgZW5kaW5nIGluIC91c3IvbGliCitNYWtlZmlsZTo1MTc6IHJlY2lwZSBmb3IgdGFyZ2V0ICdpbnN0YWxsLXRvb2xleGVjbGliTFRMSUJSQVJJRVMnIGZhaWxlZAorbWFrZVsyXTogKioqIFtpbnN0YWxsLXRvb2xleGVjbGliTFRMSUJSQVJJRVNdIEVycm9yIDEKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYmdvbXAvTWFrZWZpbGUuaW4gICAgICAgIHwgNyArKystLS0tCisgbGliZ29tcC9wbHVnaW4vTWFrZWZyYWcuYW0gfCAzICstLQorIDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ29tcC9NYWtlZmlsZS5pbiBiL2xpYmdvbXAvTWFrZWZpbGUuaW4KK2luZGV4IGI2MWIxMDguLjcxYjI2MjcgMTAwNjQ0CistLS0gYS9saWJnb21wL01ha2VmaWxlLmluCisrKysgYi9saWJnb21wL01ha2VmaWxlLmluCitAQCAtMTIzLDcgKzEyMyw3IEBAIGFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJCh0b29sZXhlY2xpYmRpcikiICIkKERFU1RESVIpJChpbmZvZGlyKSIgXAorIAkiJChERVNURElSKSQoZmluY2x1ZGVkaXIpIiAiJChERVNURElSKSQobGlic3ViaW5jbHVkZWRpcikiIFwKKyAJIiQoREVTVERJUikkKHRvb2xleGVjbGliZGlyKSIKKyBMVExJQlJBUklFUyA9ICQodG9vbGV4ZWNsaWJfTFRMSUJSQVJJRVMpCistbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfREVQRU5ERU5DSUVTID0gbGliZ29tcC5sYQorK2xpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0xJQkFERCA9CisgYW1fbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfT0JKRUNUUyA9ICBcCisgCWxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhLXBsdWdpbi1ob3N0LmxvCisgbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfT0JKRUNUUyA9ICBcCitAQCAtMTMzLDcgKzEzMyw3IEBAIGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDIFwKKyAJLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKyAJJChsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisgYW1fX0RFUEVOREVOQ0lFU18xID0KKy1AUExVR0lOX05WUFRYX1RSVUVAbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfREVQRU5ERU5DSUVTID0gbGliZ29tcC5sYSBcCisrQFBMVUdJTl9OVlBUWF9UUlVFQGxpYmdvbXBfcGx1Z2luX252cHR4X2xhX0RFUEVOREVOQ0lFUyA9ICBcCisgQFBMVUdJTl9OVlBUWF9UUlVFQAkkKGFtX19ERVBFTkRFTkNJRVNfMSkKKyBAUExVR0lOX05WUFRYX1RSVUVAYW1fbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfT0JKRUNUUyA9ICBcCisgQFBMVUdJTl9OVlBUWF9UUlVFQAlsaWJnb21wX3BsdWdpbl9udnB0eF9sYS1wbHVnaW4tbnZwdHgubG8KK0BAIC00MDcsNyArNDA3LDcgQEAgbGliZ29tcF9sYV9TT1VSQ0VTID0gYWxsb2MuYyBiYXJyaWVyLmMgY3JpdGljYWwuYyBlbnYuYyBlcnJvci5jIGl0ZXIuYyBcCisgQFBMVUdJTl9OVlBUWF9UUlVFQGxpYmdvbXBfcGx1Z2luX252cHR4X2xhX0xERkxBR1MgPSAgXAorIEBQTFVHSU5fTlZQVFhfVFJVRUAJJChsaWJnb21wX3BsdWdpbl9udnB0eF92ZXJzaW9uX2luZm8pIFwKKyBAUExVR0lOX05WUFRYX1RSVUVACSQobHRfaG9zdF9mbGFncykgJChQTFVHSU5fTlZQVFhfTERGTEFHUykKKy1AUExVR0lOX05WUFRYX1RSVUVAbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfTElCQUREID0gbGliZ29tcC5sYSAkKFBMVUdJTl9OVlBUWF9MSUJTKQorK0BQTFVHSU5fTlZQVFhfVFJVRUBsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9MSUJBREQgPSAkKFBMVUdJTl9OVlBUWF9MSUJTKQorIEBQTFVHSU5fTlZQVFhfVFJVRUBsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9MSUJUT09MRkxBR1MgPSAtLXRhZz1kaXNhYmxlLXN0YXRpYworIGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX3ZlcnNpb25faW5mbyA9IC12ZXJzaW9uLWluZm8gJChsaWJ0b29sX1ZFUlNJT04pCisgbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfU09VUkNFUyA9IHBsdWdpbi9wbHVnaW4taG9zdC5jCitAQCAtNDE1LDcgKzQxNSw2IEBAIGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykgLURIT1NUX05PTlNITV9QTFVHSU4KKyBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9MREZMQUdTID0gXAorIAkkKGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX3ZlcnNpb25faW5mbykgJChsdF9ob3N0X2ZsYWdzKQorIAorLWxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0xJQkFERCA9IGxpYmdvbXAubGEKKyBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9MSUJUT09MRkxBR1MgPSAtLXRhZz1kaXNhYmxlLXN0YXRpYworIG5vZGlzdF9ub2luc3RfSEVBREVSUyA9IGxpYmdvbXBfZi5oCisgbm9kaXN0X2xpYnN1YmluY2x1ZGVfSEVBREVSUyA9IG9tcC5oIG9wZW5hY2MuaAorZGlmZiAtLWdpdCBhL2xpYmdvbXAvcGx1Z2luL01ha2VmcmFnLmFtIGIvbGliZ29tcC9wbHVnaW4vTWFrZWZyYWcuYW0KK2luZGV4IDE2NzQ4NWYuLmQyYzU0MjggMTAwNjQ0CistLS0gYS9saWJnb21wL3BsdWdpbi9NYWtlZnJhZy5hbQorKysrIGIvbGliZ29tcC9wbHVnaW4vTWFrZWZyYWcuYW0KK0BAIC0zNSw3ICszNSw3IEBAIGxpYmdvbXBfcGx1Z2luX252cHR4X2xhX0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykgJChQTFVHSU5fTlZQVFhfQ1BQRkxBR1MpCisgbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfTERGTEFHUyA9ICQobGliZ29tcF9wbHVnaW5fbnZwdHhfdmVyc2lvbl9pbmZvKSBcCisgCSQobHRfaG9zdF9mbGFncykKKyBsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9MREZMQUdTICs9ICQoUExVR0lOX05WUFRYX0xERkxBR1MpCistbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfTElCQUREID0gbGliZ29tcC5sYSAkKFBMVUdJTl9OVlBUWF9MSUJTKQorK2xpYmdvbXBfcGx1Z2luX252cHR4X2xhX0xJQkFERCA9ICQoUExVR0lOX05WUFRYX0xJQlMpCisgbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfTElCVE9PTEZMQUdTID0gLS10YWc9ZGlzYWJsZS1zdGF0aWMKKyBlbmRpZgorIAorQEAgLTQ1LDUgKzQ1LDQgQEAgbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfU09VUkNFUyA9IHBsdWdpbi9wbHVnaW4taG9zdC5jCisgbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKSAtREhPU1RfTk9OU0hNX1BMVUdJTgorIGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0xERkxBR1MgPSBcCisgCSQobGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fdmVyc2lvbl9pbmZvKSAkKGx0X2hvc3RfZmxhZ3MpCistbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfTElCQUREID0gbGliZ29tcC5sYQorIGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0xJQlRPT0xGTEFHUyA9IC0tdGFnPWRpc2FibGUtc3RhdGljCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzYtVXNlLVNZU1RFTUxJQlNfRElSLXJlcGxhY2VtZW50LWluc3RlYWQtb2YtaGFyZGNvZGluZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzYtVXNlLVNZU1RFTUxJQlNfRElSLXJlcGxhY2VtZW50LWluc3RlYWQtb2YtaGFyZGNvZGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjkxOTQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNi1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK0Zyb20gODYxYmNmZDRhZTgxNGYzNTFlMGM2NjhlZTI2ZDAxZDEzMzFlMDQyMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDI4IEFwciAyMDE1IDIzOjE1OjI3IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMzYvMzddIFVzZSBTWVNURU1MSUJTX0RJUiByZXBsYWNlbWVudCBpbnN0ZWFkIG9mIGhhcmRjb2RpbmcKKyBiYXNlX2xpYmRpcgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmggYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCitpbmRleCA5YWJiMjUyLi43OTUyNWVlIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAorKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAorQEAgLTIxLDcgKzIxLDcgQEAKKyAjaWZuZGVmIEdDQ19BQVJDSDY0X0xJTlVYX0gKKyAjZGVmaW5lIEdDQ19BQVJDSDY0X0xJTlVYX0gKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LWFhcmNoNjQle21iaWctZW5kaWFuOl9iZX0le21hYmk9aWxwMzI6X2lscDMyfS5zby4xIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1hYXJjaDY0JXttYmlnLWVuZGlhbjpfYmV9JXttYWJpPWlscDMyOl9pbHAzMn0uc28uMSIKKyAKKyAjdW5kZWYgIEFTQU5fQ0MxX1NQRUMKKyAjZGVmaW5lIEFTQU5fQ0MxX1NQRUMgIiV7JTpzYW5pdGl6ZShhZGRyZXNzKTotZnVud2luZC10YWJsZXN9IgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM3LXByNjU3NzkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM3LXByNjU3NzkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQyNDY3MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzctcHI2NTc3OS5wYXRjaApAQCAtMCwwICsxLDE3MyBAQAorTGlzdC1JZDogPGdjYy1wYXRjaGVzLmdjYy5nbnUub3JnPgorTGlzdC1BcmNoaXZlOiA8aHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLz4KK0xpc3QtUG9zdDogPG1haWx0bzpnY2MtcGF0Y2hlcyBhdCBnY2MgZG90IGdudSBkb3Qgb3JnPgorTGlzdC1IZWxwOiA8bWFpbHRvOmdjYy1wYXRjaGVzLWhlbHAgYXQgZ2NjIGRvdCBnbnUgZG90IG9yZz4KK0RhdGU6IE1vbiwgMjAgQXByIDIwMTUgMTI6NDA6NDkgKzA5MzAKK0Zyb206IEFsYW4gTW9kcmEgPGFtb2RyYSBhdCBnbWFpbCBkb3QgY29tPgorVG86IGdjYy1wYXRjaGVzIGF0IGdjYyBkb3QgZ251IGRvdCBvcmcKK1N1YmplY3Q6IFtQYXRjaF0gcHI2NTc3OSAtIFs1LzYgUmVncmVzc2lvbl0gdW5kZWZpbmVkIGxvY2FsIHN5bWJvbCBvbiBwb3dlcnBjCisKK1RoaXMgcGF0Y2ggcmVtb3ZlcyBib2d1cyBkZWJ1ZyBpbmZvIGxlZnQgYXJvdW5kIGJ5IHNocmluay13cmFwcGluZywKK3doaWNoIG9uIHNvbWUgcG93ZXJwYyB0YXJnZXRzIHdpdGgganVzdCB0aGUgcmlnaHQgcmVnaXN0ZXIgYWxsb2NhdGlvbgorbGVkIHRvIGFzc2VtYmx5IGVycm9ycy4KKworQm9vdHN0cmFwcGVkIGFuZCByZWdyZXNzaW9uIHRlc3RlZCBwb3dlcnBjNjQtbGludXggYW5kIHg4Nl82NC1saW51eC4KKworaHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NjU3NzkKKworZ2NjLworCVBSIGRlYnVnLzY1Nzc5CisJKiBzaHJpbmstd3JhcC5jIChpbnNuX3VzZXNfcmVnKTogTmV3IGZ1bmN0aW9uLgorCShtb3ZlX2luc25fZm9yX3Nocmlua193cmFwKTogUmVtb3ZlIGRlYnVnIGluc25zIHVzaW5nIHJlZ3Mgc2V0CisJYnkgdGhlIG1vdmVkIGluc24uCitnY2MvdGVzdHN1aXRlLworCSogZ2NjLmRnL3ByNjU3NzkuYzogTmV3LgorCQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nIChmcm9tIG1haWxpbmcgbGlzdCwgbm90IG1lcmdlZCB5ZXQpCisKK0luZGV4OiBhL2djYy9zaHJpbmstd3JhcC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9nY2Mvc2hyaW5rLXdyYXAuYy5vcmlnCisrKysgYi9nY2Mvc2hyaW5rLXdyYXAuYworQEAgLTE4Miw2ICsxODIsMjEgQEAgbGl2ZV9lZGdlX2Zvcl9yZWcgKGJhc2ljX2Jsb2NrIGJiLCBpbnQgcgorICAgcmV0dXJuIGxpdmVfZWRnZTsKKyB9CisgCisrc3RhdGljIGJvb2wKKytpbnNuX3VzZXNfcmVnIChydHhfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgZW5kX3JlZ25vKQorK3sKKysgIGRmX3JlZiB1c2U7CisrCisrICBGT1JfRUFDSF9JTlNOX1VTRSAodXNlLCBpbnNuKQorKyAgICB7CisrICAgICAgcnR4IHJlZyA9IERGX1JFRl9SRUcgKHVzZSk7CisrCisrICAgICAgaWYgKFJFR19QIChyZWcpICYmIFJFR05PIChyZWcpID49IHJlZ25vICYmIFJFR05PIChyZWcpIDwgZW5kX3JlZ25vKQorKwlyZXR1cm4gdHJ1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZhbHNlOworK30KKysKKyAvKiBUcnkgdG8gbW92ZSBJTlNOIGZyb20gQkIgdG8gYSBzdWNjZXNzb3IuICBSZXR1cm4gdHJ1ZSBvbiBzdWNjZXNzLgorICAgIFVTRVMgYW5kIERFRlMgYXJlIHRoZSBzZXQgb2YgcmVnaXN0ZXJzIHRoYXQgYXJlIHVzZWQgYW5kIGRlZmluZWQKKyAgICBhZnRlciBJTlNOIGluIEJCLiAgU1BMSVRfUCBpbmRpY2F0ZXMgd2hldGhlciBhIGxpdmUgZWRnZSBmcm9tIEJCCitAQCAtMzQwLDEwICszNTUsMTUgQEAgbW92ZV9pbnNuX2Zvcl9zaHJpbmtfd3JhcCAoYmFzaWNfYmxvY2sgYgorICAgICAgICpzcGxpdF9wID0gdHJ1ZTsKKyAgICAgfQorIAorKyAgdmVjPGJhc2ljX2Jsb2NrPiBsaXZlX2JiczsKKysgIGlmIChNQVlfSEFWRV9ERUJVR19JTlNOUykKKysgICAgbGl2ZV9iYnMuY3JlYXRlICg1KTsKKyAgIC8qIEF0IHRoaXMgcG9pbnQgd2UgYXJlIGNvbW1pdHRlZCB0byBtb3ZpbmcgSU5TTiwgYnV0IGxldCdzIHRyeSB0bworICAgICAgbW92ZSBpdCBhcyBmYXIgYXMgd2UgY2FuLiAgKi8KKyAgIGRvCisgICAgIHsKKysgICAgICBpZiAoTUFZX0hBVkVfREVCVUdfSU5TTlMpCisrCWxpdmVfYmJzLnNhZmVfcHVzaCAoYmIpOworICAgICAgIGxpdmVfb3V0ID0gZGZfZ2V0X2xpdmVfb3V0IChiYik7CisgICAgICAgbGl2ZV9pbiA9IGRmX2dldF9saXZlX2luIChuZXh0X2Jsb2NrKTsKKyAgICAgICBiYiA9IG5leHRfYmxvY2s7CitAQCAtNDI2LDYgKzQ0NiwzNCBAQCBtb3ZlX2luc25fZm9yX3Nocmlua193cmFwIChiYXNpY19ibG9jayBiCisgCVNFVF9SRUdOT19SRUdfU0VUIChiYl91c2VzLCBpKTsKKyAgICAgfQorIAorKyAgLyogUmVtb3ZlIGRlYnVnIGluc25zIHVzaW5nIHJlZ3Mgc2V0IGJ5IHRoZSBpbnNuIHdlIGFyZSBtb3ZpbmcuICAqLworKyAgaWYgKE1BWV9IQVZFX0RFQlVHX0lOU05TKQorKyAgICB7CisrICAgICAgd2hpbGUgKCFsaXZlX2Jicy5pc19lbXB0eSAoKSkKKysJeworKwkgIHJ0eF9pbnNuICpkaW5zbjsKKysJICBiYXNpY19ibG9jayB0bXBfYmIgPSBsaXZlX2Jicy5wb3AgKCk7CisrCisrCSAgRk9SX0JCX0lOU05TX1JFVkVSU0UgKHRtcF9iYiwgZGluc24pCisrCSAgICB7CisrCSAgICAgIGlmIChkaW5zbiA9PSBpbnNuKQorKwkJYnJlYWs7CisrCSAgICAgIGlmIChERUJVR19JTlNOX1AgKGRpbnNuKQorKwkJICAmJiBpbnNuX3VzZXNfcmVnIChkaW5zbiwgZHJlZ25vLCBlbmRfZHJlZ25vKSkKKysJCXsKKysJCSAgaWYgKCpzcGxpdF9wKQorKwkJICAgIC8qIElmIHNwbGl0LCB0aGVuIHdlIHdpbGwgYmUgbW92aW5nIGluc24gaW50byBhCisrCQkgICAgICAgbmV3bHkgY3JlYXRlZCBibG9jayBpbW1lZGlhdGVseSBhZnRlciB0aGUgZW50cnkKKysJCSAgICAgICBibG9jay4gIE1vdmUgdGhlIGRlYnVnIGluZm8gdGhlcmUgdG9vLiAgKi8KKysJCSAgICBlbWl0X2RlYnVnX2luc25fYWZ0ZXIgKFBBVFRFUk4gKGRpbnNuKSwgYmJfbm90ZSAoYmIpKTsKKysJCSAgZGVsZXRlX2luc24gKGRpbnNuKTsKKysJCSAgYnJlYWs7CisrCQl9CisrCSAgICB9CisrCX0KKysgICAgICBsaXZlX2Jicy5yZWxlYXNlICgpOworKyAgICB9CisrCisgICBlbWl0X2luc25fYWZ0ZXIgKFBBVFRFUk4gKGluc24pLCBiYl9ub3RlIChiYikpOworICAgZGVsZXRlX2luc24gKGluc24pOworICAgcmV0dXJuIHRydWU7CitJbmRleDogYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9wcjY1Nzc5LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByNjU3NzkuYworQEAgLTAsMCArMSw2NCBAQAorKy8qIHsgZGctZG8gcnVuIH0gKi8KKysvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZyIgfSAqLworKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItbXJlbG9jYXRhYmxlIiB7IHRhcmdldCBwb3dlcnBjLSotcnRlbXMqIH0gfSAqLworKworK3Vuc2lnbmVkIGxvbmcgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKKythZGxlcjMyICh1bnNpZ25lZCBsb25nIGFkbGVyLCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW4pCisreworKyAgdW5zaWduZWQgbG9uZyBzMSA9IGFkbGVyICYgMHhmZmZmOworKyAgdW5zaWduZWQgbG9uZyBzMiA9IChhZGxlciA+PiAxNikgJiAweGZmZmY7CisrICBpbnQgazsKKysKKysgIGlmIChidWYgPT0gMCkKKysgICAgcmV0dXJuIDFMOworKworKyAgd2hpbGUgKGxlbiA+IDApCisrICAgIHsKKysgICAgICBrID0gbGVuIDwgNTU1MiA/IGxlbiA6IDU1NTI7CisrICAgICAgbGVuIC09IGs7CisrICAgICAgd2hpbGUgKGsgPj0gMTYpCisrCXsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIGsgLT0gMTY7CisrCX0KKysgICAgICBpZiAoayAhPSAwKQorKwlkbworKwkgIHsKKysJICAgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgfSB3aGlsZSAoLS1rKTsKKysgICAgICBzMSAmPSAweGZmZmZmZmZmVUw7CisrICAgICAgczIgJj0gMHhmZmZmZmZmZlVMOworKyAgICAgIHMxICU9IDY1NTIxTDsKKysgICAgICBzMiAlPSA2NTUyMUw7CisrICAgIH0KKysgIHJldHVybiAoczIgPDwgMTYpIHwgczE7CisrfQorKworK3Vuc2lnbmVkIGNoYXIgYnVmW10gPSB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsCisrCQkJOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwKKysJCQkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorKwkJCTB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCisrCQkJMHg1NSwgMHhhYSB9OworK2ludAorK21haW4gKCkKKyt7CisrICB1bnNpZ25lZCBsb25nIHggPSBhZGxlcjMyICgwLCBidWYsIHNpemVvZiBidWYpOworKyAgaWYgKHggIT0gMHg2NDA0MDllZlVMKQorKyAgICBfX2J1aWx0aW5fYWJvcnQgKCk7CisrICByZXR1cm4gMDsKKyt9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM4LWZpeC1nKystc3lzcm9vdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzgtZml4LWcrKy1zeXNyb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMjRkZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM4LWZpeC1nKystc3lzcm9vdC5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitQb3J0aW9ucyBvZgorCitodHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmcvbXNnMjYwMTMuaHRtbAorCithcmUgbm90IHVwc3RyZWFtZWQgeWV0LiBTbyBsZXRzIGtlZXAgbWlzc2luZyBwaWVjZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXaXRob3V0IHRoaXMsIGNvbXBpbGluZyBzb21ldGhpbmcgc2ltcGxlIGxpa2UgI2luY2x1ZGUgPGxpbWl0cz4gb24gdGFyZ2V0Cit3aXRoIGMrKyB0ZXN0LmNwcCBmYWlscyB1bmFibGUgdG8gZmluZCB0aGUgaGVhZGVyLiBzdHJhY2Ugc2hvd3MgaXQgbG9va2luZyBpbgordXNyL2luY2x1ZGUveHh4eCByYXRoZXIgdGhhbiAvdXNyL2luY2x1ZGUveHh4eAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogZ2NjLTQuOC4xL2djYy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2MvY29uZmlndXJlLmFjCTIwMTMtMDctMTUgMTU6NTU6NDkuNDg4Mzk5MTMyIC0wNzAwCisrKysgZ2NjLTQuOC4xL2djYy9jb25maWd1cmUuYWMJMjAxMy0wNy0xNSAxNjowMjozMS43NzI0MDY2NzkgLTA3MDAKK0BAIC0xNDgsNyArMTQ4LDkgQEAKKyBpZiB0ZXN0ICIke3dpdGhfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbgorICAgZ2NjX2d4eF93aXRob3V0X3N5c3Jvb3Q9YGV4cHIgIiR7Z2NjX2d4eF9pbmNsdWRlX2Rpcn0iIDogIiR7d2l0aF9zeXNyb290fSInXCguKlwpJ2AKKyAgIGlmIHRlc3QgIiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IjsgdGhlbgorLSAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgaWYgdGVzdCB4JHt3aXRoX3N5c3Jvb3R9ICE9IHgvOyB0aGVuCisrICAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGZpCisgICAgIGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3Q9MQorICAgZmkKKyBmaQorSW5kZXg6IGdjYy00LjguMS9nY2MvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL2NvbmZpZ3VyZQkyMDEzLTA3LTE1IDE1OjU1OjQ5LjQ3MjM5OTEzMiAtMDcwMAorKysrIGdjYy00LjguMS9nY2MvY29uZmlndXJlCTIwMTMtMDctMTUgMTY6MDI6MzEuNzgwNDA2NjgwIC0wNzAwCitAQCAtMzMyNSw3ICszMzI1LDkgQEAKKyBpZiB0ZXN0ICIke3dpdGhfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbgorICAgZ2NjX2d4eF93aXRob3V0X3N5c3Jvb3Q9YGV4cHIgIiR7Z2NjX2d4eF9pbmNsdWRlX2Rpcn0iIDogIiR7d2l0aF9zeXNyb290fSInXCguKlwpJ2AKKyAgIGlmIHRlc3QgIiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IjsgdGhlbgorLSAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgaWYgdGVzdCB4JHt3aXRoX3N5c3Jvb3R9ICE9IHgvOyB0aGVuCisrICAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGZpCisgICAgIGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3Q9MQorICAgZmkKKyBmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzOS1saWJjYzEtZml4LWxpYmNjMS1zLWluc3RhbGwtcGF0aC1hbmQtcnBhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM5LWxpYmNjMS1maXgtbGliY2MxLXMtaW5zdGFsbC1wYXRoLWFuZC1ycGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjAyNWM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzOS1saWJjYzEtZml4LWxpYmNjMS1zLWluc3RhbGwtcGF0aC1hbmQtcnBhdGgucGF0Y2gKQEAgLTAsMCArMSw1MSBAQAorRnJvbSBhY2VhMGRmOTk5N2E0N2Y4YjgyMjRiNmNhMTYxOGM4YzlkZmJlNmQ1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBTdW4sIDUgSnVsIDIwMTUgMjA6MjU6MTggLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gbGliY2MxOiBmaXggbGliY2MxJ3MgaW5zdGFsbCBwYXRoIGFuZCBycGF0aAorCisqIEluc3RhbGwgbGliY2MxLnNvIGFuZCBsaWJjYzFwbHVnaW4uc28gaW50bworICAkKGxpYmV4ZWNkaXIpL2djYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQoZ2NjX3ZlcnNpb24pLCBhcyB3aGF0IHdlCisgIGhhZCBkb25lIHRvIGx0by1wbHVnaW4uCisqIEZpeCBiYWQgUlBBVEggaXVzc3VlOgorICBnY2MtNS4yLjA6IHBhY2thZ2UgZ2NjLXBsdWdpbnMgY29udGFpbnMgYmFkIFJQQVRIIC9wYXRodC90by90bXAvc3lzcm9vdHMvcWVtdXg4Ni02NC91c3IvbGliNjQvLi4vbGliNjQgaW4gZmlsZQorIC9wYXRoL3RvL2djYy81LjIuMC1yMC9wYWNrYWdlcy1zcGxpdC9nY2MtcGx1Z2lucy91c3IvbGliNjQvZ2NjL3g4Nl82NC1wb2t5LWxpbnV4LzUuMi4wL3BsdWdpbi9saWJjYzFwbHVnaW4uc28uMC4wLjAKKyBbcnBhdGhzXQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIGNvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbGliY2MxL01ha2VmaWxlLmFtICB8ICAgIDQgKystLQorIGxpYmNjMS9NYWtlZmlsZS5pbiAgfCAgICA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmNjMS9NYWtlZmlsZS5hbSBiL2xpYmNjMS9NYWtlZmlsZS5hbQoraW5kZXggN2EyNzRiMy4uZGI2OWJlYSAxMDA2NDQKKy0tLSBhL2xpYmNjMS9NYWtlZmlsZS5hbQorKysrIGIvbGliY2MxL01ha2VmaWxlLmFtCitAQCAtMzUsOCArMzUsOCBAQCBsaWJpYmVydHkgPSAkKGlmICQod2lsZGNhcmQgJChsaWJpYmVydHlfbm9hc2FuKSksJChXYykkKGxpYmliZXJ0eV9ub2FzYW4pLCBcCisgCSAgICAkKFdjKSQobGliaWJlcnR5X25vcm1hbCkpKQorIGxpYmliZXJ0eV9kZXAgPSAkKHBhdHN1YnN0ICQoV2MpJSwlLCQobGliaWJlcnR5KSkKKyAKKy1wbHVnaW5kaXIgPSAkKGxpYmRpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJChnY2NfdmVyc2lvbikvcGx1Z2luCistY2MxbGliZGlyID0gJChsaWJkaXIpLyQobGlic3VmZml4KQorK2NjMWxpYmRpciA9ICQobGliZXhlY2RpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJChnY2NfdmVyc2lvbikKKytwbHVnaW5kaXIgPSAkKGNjMWxpYmRpcikKKyAKKyBpZiBFTkFCTEVfUExVR0lOCisgcGx1Z2luX0xUTElCUkFSSUVTID0gbGliY2MxcGx1Z2luLmxhCitkaWZmIC0tZ2l0IGEvbGliY2MxL01ha2VmaWxlLmluIGIvbGliY2MxL01ha2VmaWxlLmluCitpbmRleCAxOTE2MTM0Li5jODk5NWQyIDEwMDY0NAorLS0tIGEvbGliY2MxL01ha2VmaWxlLmluCisrKysgYi9saWJjYzEvTWFrZWZpbGUuaW4KK0BAIC0yNjIsOCArMjYyLDggQEAgbGliaWJlcnR5ID0gJChpZiAkKHdpbGRjYXJkICQobGliaWJlcnR5X25vYXNhbikpLCQoV2MpJChsaWJpYmVydHlfbm9hc2FuKSwgXAorIAkgICAgJChXYykkKGxpYmliZXJ0eV9ub3JtYWwpKSkKKyAKKyBsaWJpYmVydHlfZGVwID0gJChwYXRzdWJzdCAkKFdjKSUsJSwkKGxpYmliZXJ0eSkpCistcGx1Z2luZGlyID0gJChsaWJkaXIpL2djYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQoZ2NjX3ZlcnNpb24pL3BsdWdpbgorLWNjMWxpYmRpciA9ICQobGliZGlyKS8kKGxpYnN1ZmZpeCkKKytjYzFsaWJkaXIgPSAkKGxpYmV4ZWNkaXIpL2djYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQoZ2NjX3ZlcnNpb24pCisrcGx1Z2luZGlyID0gJChjYzFsaWJkaXIpCisgQEVOQUJMRV9QTFVHSU5fVFJVRUBwbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJjYzFwbHVnaW4ubGEKKyBARU5BQkxFX1BMVUdJTl9UUlVFQGNjMWxpYl9MVExJQlJBUklFUyA9IGxpYmNjMS5sYQorIEJVSUxUX1NPVVJDRVMgPSBjb21waWxlci1uYW1lLmgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwNDAtbmF0aXZlc2RrLWdjYy1zdXBwb3J0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDA0MC1uYXRpdmVzZGstZ2NjLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ4MWFlMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwNDAtbmF0aXZlc2RrLWdjYy1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMTk2IEBACitCZWluZyBhYmxlIHRvIGJ1aWxkIGEgbmF0aXZlc2RrIGdjYyBpcyB1c2VmdWwsIHBhcnRpY3VsYXJseSBpbiBjYXNlcword2hlcmUgdGhlIGhvc3QgY29tcGlsZXIgbWF5IGJlIG9mIGFuIGluY29tcGF0aWJsZSB2ZXJzaW9uIChvciBhIDMyCitiaXQgY29tcGlsZXIgaXMgbmVlZGVkKS4KKworU2FkbHksIGJ1aWxkaW5nIG5hdGl2ZXNkay1nY2MgaXMgbm90IHN0cmFpZ2h0IGZvcndhcmQuIFdlIGluc3RhbGwKK25hdGl2ZXNkay1nY2MgaW50byBhIHJlbG9jYXRhYmxlIGxvY2F0aW9uIGFuZCB0aGlzIG1lYW5zIHRoYXQgaXRzCitsaWJyYXJ5IGxvY2F0aW9ucyBjYW4gY2hhbmdlLiAiTm9ybWFsIiBzeXNyb290IHN1cHBvcnQgZG9lc24ndCBoZWxwCitpbiB0aGlzIGNhc2Ugc2luY2UgdGhlIHZhbHVlcyBvZiBwYXRocyBsaWtlICJsaWJkaXIiIGNoYW5nZSwgbm90IGp1c3QKK2Jhc2Ugcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIHN5c3RlbS4KKworSW4gb3JkZXIgdG8gaGFuZGxlIHRoaXMgd2UgZG8gdHdvIHRoaW5nczoKKworYSkgQWRkICVyIGludG8gc3BlYyBmaWxlIG1hcmt1cCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgaW5qZWN0ZWQgcGF0aHMKKyAgIHN1Y2ggYXMgU1lTVEVNTElCU19ESVIgKHNlZSBnY2NfbXVsdGlsaWJfc2V0dXAoKSkuCitiKSBBZGQgb3RoZXIgcGF0aHMgd2hpY2ggbmVlZCByZWxvY2F0aW9uIGludG8gYSAuZ2NjcmVsb2NwcmVmaXggc2VjdGlvbgorICAgd2hpY2ggdGhlIHJlbG9jYXRpb24gY29kZSB3aWxsIG5vdGljZSBhbmQgYWRqdXN0IGF1dG9tYXRpY2FsbHkuCisKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitSUCAyMDE1LzcvMjgKKworZGlmZiAtLWdpdCBhL2djYy9jcHBkZWZhdWx0LmMgYi9nY2MvY3BwZGVmYXVsdC5jCistLS0gYS9nY2MvY3BwZGVmYXVsdC5jCisrKysgYi9nY2MvY3BwZGVmYXVsdC5jCitAQCAtMzUsNiArMzUsMzAgQEAKKyAjIHVuZGVmIENST1NTX0lOQ0xVREVfRElSCisgI2VuZGlmCisgCisrc3RhdGljIGNoYXIgR1BMVVNQTFVTX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEdQTFVTUExVU19JTkNMVURFX0RJUjsKKytzdGF0aWMgY2hhciBHQ0NfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gR0NDX0lOQ0xVREVfRElSOworK3N0YXRpYyBjaGFyIEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSOworK3N0YXRpYyBjaGFyIEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVI7Cisrc3RhdGljIGNoYXIgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUOworKyNpZmRlZiBMT0NBTF9JTkNMVURFX0RJUgorK3N0YXRpYyBjaGFyIExPQ0FMX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IExPQ0FMX0lOQ0xVREVfRElSOworKyNlbmRpZgorKyNpZmRlZiBQUkVGSVhfSU5DTFVERV9ESVIKKytzdGF0aWMgY2hhciBQUkVGSVhfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gUFJFRklYX0lOQ0xVREVfRElSOworKyNlbmRpZgorKyNpZmRlZiBGSVhFRF9JTkNMVURFX0RJUgorK3N0YXRpYyBjaGFyIEZJWEVEX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEZJWEVEX0lOQ0xVREVfRElSOworKyNlbmRpZgorKyNpZmRlZiBDUk9TU19JTkNMVURFX0RJUgorK3N0YXRpYyBjaGFyIENST1NTX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IENST1NTX0lOQ0xVREVfRElSOworKyNlbmRpZgorKyNpZmRlZiBUT09MX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgVE9PTF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBUT09MX0lOQ0xVREVfRElSOworKyNlbmRpZgorKyNpZmRlZiBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIKKytzdGF0aWMgY2hhciBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSOworKyNlbmRpZgorKworIGNvbnN0IHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUgY3BwX2luY2x1ZGVfZGVmYXVsdHNbXQorICNpZmRlZiBJTkNMVURFX0RFRkFVTFRTCisgPSBJTkNMVURFX0RFRkFVTFRTOworQEAgLTQyLDM4ICs2NiwzOCBAQCBjb25zdCBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlIGNwcF9pbmNsdWRlX2RlZmF1bHRzW10KKyA9IHsKKyAjaWZkZWYgR1BMVVNQTFVTX0lOQ0xVREVfRElSCisgICAgIC8qIFBpY2sgdXAgR05VIEMrKyBnZW5lcmljIGluY2x1ZGUgZmlsZXMuICAqLworLSAgICB7IEdQTFVTUExVU19JTkNMVURFX0RJUiwgIkcrKyIsIDEsIDEsCisrICAgIHsgR1BMVVNQTFVTX0lOQ0xVREVfRElSVkFSLCAiRysrIiwgMSwgMSwKKyAgICAgICBHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1QsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVIKKyAgICAgLyogUGljayB1cCBHTlUgQysrIHRhcmdldC1kZXBlbmRlbnQgaW5jbHVkZSBmaWxlcy4gICovCistICAgIHsgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVIsICJHKysiLCAxLCAxLAorKyAgICB7IEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSVkFSLCAiRysrIiwgMSwgMSwKKyAgICAgICBHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1QsIDEgfSwKKyAjZW5kaWYKKyAjaWZkZWYgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSCisgICAgIC8qIFBpY2sgdXAgR05VIEMrKyBiYWNrd2FyZCBhbmQgZGVwcmVjYXRlZCBpbmNsdWRlIGZpbGVzLiAgKi8KKy0gICAgeyBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVIsICJHKysiLCAxLCAxLAorKyAgICB7IEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUlZBUiwgIkcrKyIsIDEsIDEsCisgICAgICAgR1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09ULCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIEdDQ19JTkNMVURFX0RJUgorICAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycy4gICovCistICAgIHsgR0NDX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorKyAgICB7IEdDQ19JTkNMVURFX0RJUlZBUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVAorICAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycyB1bmRlciB0aGUgc3BlY2lmaWVkIHN5c3Jvb3QuICAqLworLSAgICB7IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VULCAiR0NDIiwgMCwgMCwgMSwgMCB9LAorKyAgICB7IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMlZBUiwgIkdDQyIsIDAsIDAsIDEsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgTE9DQUxfSU5DTFVERV9ESVIKKyAgICAgLyogL3Vzci9sb2NhbC9pbmNsdWRlIGNvbWVzIGJlZm9yZSB0aGUgZml4aW5jbHVkZWQgaGVhZGVyIGZpbGVzLiAgKi8KKy0gICAgeyBMT0NBTF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMSwgMiB9LAorLSAgICB7IExPQ0FMX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAxLCAwIH0sCisrICAgIHsgTE9DQUxfSU5DTFVERV9ESVJWQVIsIDAsIDAsIDEsIDEsIDIgfSwKKysgICAgeyBMT0NBTF9JTkNMVURFX0RJUlZBUiwgMCwgMCwgMSwgMSwgMCB9LAorICNlbmRpZgorICNpZmRlZiBQUkVGSVhfSU5DTFVERV9ESVIKKy0gICAgeyBQUkVGSVhfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDAsIDAgfSwKKysgICAgeyBQUkVGSVhfSU5DTFVERV9ESVJWQVIsIDAsIDAsIDEsIDAsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgRklYRURfSU5DTFVERV9ESVIKKyAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBmaXhpbmNsdWRlcy4gICovCistICAgIHsgRklYRURfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLAorKyAgICB7IEZJWEVEX0lOQ0xVREVfRElSVkFSLCAiR0NDIiwgMCwgMCwgMCwKKyAgICAgICAvKiBBIG11bHRpbGliIHN1ZmZpeCBuZWVkcyBhZGRpbmcgaWYgZGlmZmVyZW50IG11bHRpbGlicyB1c2UKKyAJIGRpZmZlcmVudCBoZWFkZXJzLiAgKi8KKyAjaWZkZWYgU1lTUk9PVF9IRUFERVJTX1NVRkZJWF9TUEVDCitAQCAtODUsMTYgKzEwOSwxNiBAQCBjb25zdCBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlIGNwcF9pbmNsdWRlX2RlZmF1bHRzW10KKyAjZW5kaWYKKyAjaWZkZWYgQ1JPU1NfSU5DTFVERV9ESVIKKyAgICAgLyogT25lIHBsYWNlIHRoZSB0YXJnZXQgc3lzdGVtJ3MgaGVhZGVycyBtaWdodCBiZS4gICovCistICAgIHsgQ1JPU1NfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCisrICAgIHsgQ1JPU1NfSU5DTFVERV9ESVJWQVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIFRPT0xfSU5DTFVERV9ESVIKKyAgICAgLyogQW5vdGhlciBwbGFjZSB0aGUgdGFyZ2V0IHN5c3RlbSdzIGhlYWRlcnMgbWlnaHQgYmUuICAqLworLSAgICB7IFRPT0xfSU5DTFVERV9ESVIsICJCSU5VVElMUyIsIDAsIDEsIDAsIDAgfSwKKysgICAgeyBUT09MX0lOQ0xVREVfRElSVkFSLCAiQklOVVRJTFMiLCAwLCAxLCAwLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUgorICAgICAvKiAvdXNyL2luY2x1ZGUgY29tZXMgZGVhZCBsYXN0LiAgKi8KKy0gICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIsIE5BVElWRV9TWVNURU1fSEVBREVSX0NPTVBPTkVOVCwgMCwgMCwgMSwgMiB9LAorLSAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUiwgTkFUSVZFX1NZU1RFTV9IRUFERVJfQ09NUE9ORU5ULCAwLCAwLCAxLCAwIH0sCisrICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSVkFSLCBOQVRJVkVfU1lTVEVNX0hFQURFUl9DT01QT05FTlQsIDAsIDAsIDEsIDIgfSwKKysgICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVJWQVIsIE5BVElWRV9TWVNURU1fSEVBREVSX0NPTVBPTkVOVCwgMCwgMCwgMSwgMCB9LAorICNlbmRpZgorICAgICB7IDAsIDAsIDAsIDAsIDAsIDAgfQorICAgfTsKK2RpZmYgLS1naXQgYS9nY2MvY3BwZGVmYXVsdC5oIGIvZ2NjL2NwcGRlZmF1bHQuaAorLS0tIGEvZ2NjL2NwcGRlZmF1bHQuaAorKysrIGIvZ2NjL2NwcGRlZmF1bHQuaAorQEAgLTMzLDcgKzMzLDggQEAKKyAKKyBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlCisgeworLSAgY29uc3QgY2hhciAqY29uc3QgZm5hbWU7CS8qIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkuICAqLworKyAgY29uc3QgY2hhciAqZm5hbWU7ICAgICAvKiBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5LiAgKi8KKysKKyAgIGNvbnN0IGNoYXIgKmNvbnN0IGNvbXBvbmVudDsJLyogVGhlIGNvbXBvbmVudCBjb250YWluaW5nIHRoZSBkaXJlY3RvcnkKKyAJCQkJICAgKHNlZSB1cGRhdGVfcGF0aCBpbiBwcmVmaXguYykgKi8KKyAgIGNvbnN0IGNoYXIgY3BsdXNwbHVzOwkJLyogT25seSBsb29rIGhlcmUgaWYgd2UncmUgY29tcGlsaW5nIEMrKy4gICovCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTEyMCw2ICsxMjAsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqdGFyZ2V0X3N5c3RlbV9yb290ID0gVEFSR0VUX1NZU1RFTV9ST09UOworICNlbHNlCisgc3RhdGljIGNvbnN0IGNoYXIgKnRhcmdldF9zeXN0ZW1fcm9vdCA9IDA7CisgI2VuZGlmCisrIAorK3N0YXRpYyBjaGFyIHRhcmdldF9yZWxvY2F0YWJsZV9wcmVmaXhbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1lTVEVNTElCU19ESVI7CisgCisgLyogTm9uemVybyBtZWFucyBwYXNzIHRoZSB1cGRhdGVkIHRhcmdldF9zeXN0ZW1fcm9vdCB0byB0aGUgY29tcGlsZXIuICAqLworIAorQEAgLTM5MCw2ICszOTIsNyBAQCBvciB3aXRoIGNvbnN0YW50IHRleHQgaW4gYSBzaW5nbGUgYXJndW1lbnQuCisgICVHICAgICBwcm9jZXNzIExJQkdDQ19TUEVDIGFzIGEgc3BlYy4KKyAgJVIgICAgIE91dHB1dCB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0YXJnZXRfc3lzdGVtX3Jvb3QgYW5kCisgICAgICAgICB0YXJnZXRfc3lzcm9vdF9zdWZmaXguCisrICVyICAgICBPdXRwdXQgdGhlIGJhc2UgcGF0aCB0YXJnZXRfcmVsb2NhdGFibGVfcHJlZml4CisgICVTICAgICBwcm9jZXNzIFNUQVJURklMRV9TUEVDIGFzIGEgc3BlYy4gIEEgY2FwaXRhbCBTIGlzIGFjdHVhbGx5IHVzZWQgaGVyZS4KKyAgJUUgICAgIHByb2Nlc3MgRU5ERklMRV9TUEVDIGFzIGEgc3BlYy4gIEEgY2FwaXRhbCBFIGlzIGFjdHVhbGx5IHVzZWQgaGVyZS4KKyAgJUMgICAgIHByb2Nlc3MgQ1BQX1NQRUMgYXMgYSBzcGVjLgorQEAgLTEyODYsMTAgKzEyODksMTAgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmdjY19saWJleGVjX3ByZWZpeDsKKyAgICBnY2NfZXhlY19wcmVmaXggaXMgc2V0IGJlY2F1c2UsIGluIHRoYXQgY2FzZSwgd2Uga25vdyB3aGVyZSB0aGUKKyAgICBjb21waWxlciBoYXMgYmVlbiBpbnN0YWxsZWQsIGFuZCB1c2UgcGF0aHMgcmVsYXRpdmUgdG8gdGhhdAorICAgIGxvY2F0aW9uIGluc3RlYWQuICAqLworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9leGVjX3ByZWZpeCA9IFNUQU5EQVJEX0VYRUNfUFJFRklYOworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9saWJleGVjX3ByZWZpeCA9IFNUQU5EQVJEX0xJQkVYRUNfUFJFRklYOworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9iaW5kaXJfcHJlZml4ID0gU1RBTkRBUkRfQklORElSX1BSRUZJWDsKKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeCA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVg7Cisrc3RhdGljIGNoYXIgc3RhbmRhcmRfZXhlY19wcmVmaXhbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfRVhFQ19QUkVGSVg7Cisrc3RhdGljIGNoYXIgc3RhbmRhcmRfbGliZXhlY19wcmVmaXhbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfTElCRVhFQ19QUkVGSVg7Cisrc3RhdGljIGNoYXIgc3RhbmRhcmRfYmluZGlyX3ByZWZpeFs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTVEFOREFSRF9CSU5ESVJfUFJFRklYOworK3N0YXRpYyBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4ID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWDsKKyAKKyAvKiBGb3IgbmF0aXZlIGNvbXBpbGVycywgdGhlc2UgYXJlIHdlbGwta25vd24gcGF0aHMgY29udGFpbmluZworICAgIGNvbXBvbmVudHMgdGhhdCBtYXkgYmUgcHJvdmlkZWQgYnkgdGhlIHN5c3RlbS4gIEZvciBjcm9zcworQEAgLTEyOTcsOSArMTMwMCw5IEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4ID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWDsKKyBzdGF0aWMgY29uc3QgY2hhciAqbWRfZXhlY19wcmVmaXggPSBNRF9FWEVDX1BSRUZJWDsKKyBzdGF0aWMgY29uc3QgY2hhciAqbWRfc3RhcnRmaWxlX3ByZWZpeCA9IE1EX1NUQVJURklMRV9QUkVGSVg7Cisgc3RhdGljIGNvbnN0IGNoYXIgKm1kX3N0YXJ0ZmlsZV9wcmVmaXhfMSA9IE1EX1NUQVJURklMRV9QUkVGSVhfMTsKKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeF8xCisrc3RhdGljIGNoYXIgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeF8xWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKQorICAgPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzE7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMgorK3N0YXRpYyBjaGFyIHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkKKyAgID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yOworIAorIC8qIEEgcmVsYXRpdmUgcGF0aCB0byBiZSB1c2VkIGluIGZpbmRpbmcgdGhlIGxvY2F0aW9uIG9mIHRvb2xzCitAQCAtNTU1MCw2ICs1NTUzLDExIEBAIGRvX3NwZWNfMSAoY29uc3QgY2hhciAqc3BlYywgaW50IGluc3dpdGNoLCBjb25zdCBjaGFyICpzb2Z0X21hdGNoZWRfcGFydCkKKyAJICAgICAgfQorIAkgICAgYnJlYWs7CisgCisrICAgICAgICAgIGNhc2UgJ3InOgorKyAgICAgICAgICAgICAgb2JzdGFja19ncm93ICgmb2JzdGFjaywgdGFyZ2V0X3JlbG9jYXRhYmxlX3ByZWZpeCwKKysJCSAgICAgIHN0cmxlbiAodGFyZ2V0X3JlbG9jYXRhYmxlX3ByZWZpeCkpOworKyAgICAgICAgICAgIGJyZWFrOworKworIAkgIGNhc2UgJ1MnOgorIAkgICAgdmFsdWUgPSBkb19zcGVjXzEgKHN0YXJ0ZmlsZV9zcGVjLCAwLCBOVUxMKTsKKyAJICAgIGlmICh2YWx1ZSAhPSAwKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDA0MS1oYW5kbGUtdGFyZ2V0LXN5c3Jvb3QtbXVsdGlsaWIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDQxLWhhbmRsZS10YXJnZXQtc3lzcm9vdC1tdWx0aWxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzU2OTg0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDA0MS1oYW5kbGUtdGFyZ2V0LXN5c3Jvb3QtbXVsdGlsaWIucGF0Y2gKQEAgLTAsMCArMSw4OCBAQAorU2VhcmNoIHRhcmdldCBzeXNyb290IGdjYyB2ZXJzaW9uIHNwZWNpZmljIGRpcnMgd2l0aCBtdWx0aWxpYi4KKworV2UgaW5zdGFsbCB0aGUgZ2NjIGxpYnJhcmllcyAoc3VjaCBhcyBjcnRiZWdpbi5wKSBpbnRvCis8c3lzcm9vdD48bGliZGlyPi88dGFyZ2V0LXN5cz4vNS4yLjAvCit3aGljaCBpcyBhIGRlZmF1bHQgc2VhcmNoIHBhdGggZm9yIEdDQyAoYWthIG11bHRpX3N1ZmZpeCBpbiB0aGUgCitjb2RlIGJlbG93KS4gPHRhcmdldC1zeXM+IGlzICdtYWNoaW5lJyBpbiBnY2MncyB0ZXJtaW5vbG9neS4gV2UgdXNlCit0aGVzZSBkaXJlY3RvcmllcyBzbyB0aGF0IG11bHRpcGxlIGdjYyB2ZXJzaW9ucyBjb3VsZCBpbiB0aGVvcnkgCitjby1leGlzdCBvbiB0YXJnZXQuCisKK1dlIG9ubHkgd2FudCB0byBidWlsZCBvbmUgZ2NjLWNyb3NzLWNhbmFkaWFuIHBlciBhcmNoIGFuZCBoYXZlIHRoaXMgd29yayAKK2ZvciBhbGwgbXVsdGlsaWJzLiA8dGFyZ2V0LXN5cz4gY2FuIGJlIGhhbmRsZWQgYnkgbWFwcGluZyB0aGUgbXVsdGlsaWIKKzx0YXJnZXQtc3lzPiB0byB0aGUgb25lIHVzZWQgYnkgZ2NjLWNyb3NzLWNhbmFkaWFuLCBlLmcuIG1pcHM2NC1wb2xrbWxsaWIzMi1saW51eCAKK2lzIHN5bWxpbmtlZCB0byBieSBtaXBzNjQtcG9reS1saW51eC4KKworVGhlIGRlZmF1bHQgZ2NjIHNlYXJjaCBwYXRoIGluIHRoZSB0YXJnZXQgc3lzcm9vdCBmb3IgYSAibGliNjQiIG11dGxpbGliIGlzOgorCis8c3lzcm9vdD4vbGliMzIvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vbGliMzIvLi4vbGliNjQvCis8c3lzcm9vdD4vdXNyL2xpYjMyL21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L3Vzci9saWIzMi8uLi9saWI2NC8KKzxzeXNyb290Pi9saWIzMi8KKzxzeXNyb290Pi91c3IvbGliMzIvCisKK3doaWNoIG1lYW5zIHRoYXQgdGhlIGxpYjMyIGNydGJlZ2luLm8gd2lsbCBiZSBmb3VuZCBhbmQgdGhlIGxpYjY0IG9uZXMKK3dpbGwgbm90IHdoaWNoIGxlYWRzIHRvIGNvbXBpbGVyIGZhaWx1cmVzLgorCitUaGlzIHBhdGNoIGluamVjdHMgYSBtdWx0aWxpYiB2ZXJzaW9uIG9mIHRoYXQgcGF0aCBmaXJzdCBzbyB0aGUgbGliNjQKK2JpbmFyaWVzIGNhbiBiZSBmb3VuZCBmaXJzdC4gV2l0aCB0aGlzIGNoYW5nZSB0aGUgc2VhcmNoIHBhdGggYmVjb21lczoKKworPHN5c3Jvb3Q+L2xpYjMyLy4uL2xpYjY0L21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L2xpYjMyL21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L2xpYjMyLy4uL2xpYjY0LworPHN5c3Jvb3Q+L3Vzci9saWIzMi8uLi9saWI2NC9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi91c3IvbGliMzIvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vdXNyL2xpYjMyLy4uL2xpYjY0LworPHN5c3Jvb3Q+L2xpYjMyLworPHN5c3Jvb3Q+L3Vzci9saWIzMi8KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitSUCAyMDE1LzcvMzEKKworSW5kZXg6IGdjYy01LjIuMC9nY2MvZ2NjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNS4yLjAub3JpZy9nY2MvZ2NjLmMKKysrKyBnY2MtNS4yLjAvZ2NjL2djYy5jCitAQCAtMjMwNSw3ICsyMzA1LDcgQEAgZm9yX2VhY2hfcGF0aCAoY29uc3Qgc3RydWN0IHBhdGhfcHJlZml4CisgICAgICAgaWYgKHBhdGggPT0gTlVMTCkKKyAJeworIAkgIGxlbiA9IHBhdGhzLT5tYXhfbGVuICsgZXh0cmFfc3BhY2UgKyAxOworLQkgIGxlbiArPSBNQVggKE1BWCAoc3VmZml4X2xlbiwgbXVsdGlfb3NfZGlyX2xlbiksIG11bHRpYXJjaF9sZW4pOworKwkgIGxlbiArPSBNQVggKChzdWZmaXhfbGVuICsgbXVsdGlfb3NfZGlyX2xlbiksIG11bHRpYXJjaF9sZW4pOworIAkgIHBhdGggPSBYTkVXVkVDIChjaGFyLCBsZW4pOworIAl9CisgCitAQCAtMjMxNyw2ICsyMzE3LDMzIEBAIGZvcl9lYWNoX3BhdGggKGNvbnN0IHN0cnVjdCBwYXRoX3ByZWZpeAorIAkgIC8qIExvb2sgZmlyc3QgaW4gTUFDSElORS9WRVJTSU9OIHN1YmRpcmVjdG9yeS4gICovCisgCSAgaWYgKCFza2lwX211bHRpX2RpcikKKyAJICAgIHsKKysJICAgICAgaWYgKCEocGwtPm9zX211bHRpbGliID8gc2tpcF9tdWx0aV9vc19kaXIgOiBza2lwX211bHRpX2RpcikpCisrCSAgICAgICAgeworKwkgICAgICAgICAgY29uc3QgY2hhciAqdGhpc19tdWx0aTsKKysJICAgICAgICAgIHNpemVfdCB0aGlzX211bHRpX2xlbjsKKysKKysJICAgICAgICAgIGlmIChwbC0+b3NfbXVsdGlsaWIpCisrCQkgICAgeworKwkJICAgICAgdGhpc19tdWx0aSA9IG11bHRpX29zX2RpcjsKKysJCSAgICAgIHRoaXNfbXVsdGlfbGVuID0gbXVsdGlfb3NfZGlyX2xlbjsKKysJCSAgICB9CisrCSAgICAgICAgICBlbHNlCisrCQkgICAgeworKwkJICAgICAgdGhpc19tdWx0aSA9IG11bHRpX2RpcjsKKysJCSAgICAgIHRoaXNfbXVsdGlfbGVuID0gbXVsdGlfZGlyX2xlbjsKKysJCSAgICB9CisrCisrCSAgICAgICAgICAvKiBMb29rIGluIG11bHRpbGliIE1BQ0hJTkUvVkVSU0lPTiBzdWJkaXJlY3RvcnkgZmlyc3QgKi8KKysJICAgICAgICAgIGlmICh0aGlzX211bHRpX2xlbikKKysJICAgICAgICAgICAgeworKwkJICAgICAgbWVtY3B5IChwYXRoICsgbGVuLCB0aGlzX211bHRpLCB0aGlzX211bHRpX2xlbiArIDEpOworKwkgICAgICAgICAgICAgIG1lbWNweSAocGF0aCArIGxlbiArIHRoaXNfbXVsdGlfbGVuLCBtdWx0aV9zdWZmaXgsIHN1ZmZpeF9sZW4gKyAxKTsKKysJICAgICAgICAgICAgICByZXQgPSBjYWxsYmFjayAocGF0aCwgY2FsbGJhY2tfaW5mbyk7CisrCSAgICAgICAgICAgICAgICBpZiAocmV0KQorKwkJICAgICAgICAgIGJyZWFrOworKwkgICAgICAgICAgICB9CisrCSAgICAgICAgfQorKworIAkgICAgICBtZW1jcHkgKHBhdGggKyBsZW4sIG11bHRpX3N1ZmZpeCwgc3VmZml4X2xlbiArIDEpOworIAkgICAgICByZXQgPSBjYWxsYmFjayAocGF0aCwgY2FsbGJhY2tfaW5mbyk7CisgCSAgICAgIGlmIChyZXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNvbW1vbi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNvbW1vbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYzYzA3ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY29tbW9uLmluYwpAQCAtMCwwICsxLDEwMCBAQAorU1VNTUFSWSA9ICJHTlUgY2MgYW5kIGdjYyBDIGNvbXBpbGVycyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nY2MvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMIgorCitOQVRJVkVERVBTID0gIiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKK0JQTiA9ICJnY2MiCisKK2RlZiBnZXRfZ2NjX2Zsb2F0X3NldHRpbmcoYmIsIGQpOgorICAgIGlmIGQuZ2V0VmFyKCdBUk1QS0dTRlhfRUFCSScsIFRydWUpID09ICJoZiIgYW5kIGQuZ2V0VmFyKCdUUkFOU0xBVEVEX1RBUkdFVF9BUkNIJywgVHJ1ZSkgPT0gImFybSI6CisgICAgICAgIHJldHVybiAiLS13aXRoLWZsb2F0PWhhcmQiCisgICAgaWYgZC5nZXRWYXIoJ1RBUkdFVF9GUFUnLCBUcnVlKSBpbiBbICdzb2Z0JyBdOgorICAgICAgICByZXR1cm4gIi0td2l0aC1mbG9hdD1zb2Z0IgorICAgIGlmIGQuZ2V0VmFyKCdUQVJHRVRfRlBVJywgVHJ1ZSkgaW4gWyAncHBjLWVmZCcgXToKKyAgICAgICAgcmV0dXJuICItLWVuYWJsZS1lNTAwX2RvdWJsZSIKKyAgICByZXR1cm4gIiIKKworZ2V0X2djY19mbG9hdF9zZXR0aW5nW3ZhcmRlcHZhbHVlXSA9ICIke0BnZXRfZ2NjX2Zsb2F0X3NldHRpbmcoYmIsIGQpfSIKKworZGVmIGdldF9nY2NfbWlwc19wbHRfc2V0dGluZyhiYiwgZCk6CisgICAgaWYgZC5nZXRWYXIoJ1RSQU5TTEFURURfVEFSR0VUX0FSQ0gnLCBUcnVlKSBpbiBbICdtaXBzJywgJ21pcHNlbCcgXSBhbmQgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdtcGx0JywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICByZXR1cm4gIi0td2l0aC1taXBzLXBsdCIKKyAgICByZXR1cm4gIiIKKworZGVmIGdldF9sb25nX2RvdWJsZV9zZXR0aW5nKGJiLCBkKToKKyAgICBpZiBkLmdldFZhcignVFJBTlNMQVRFRF9UQVJHRVRfQVJDSCcsIFRydWUpIGluIFsgJ3Bvd2VycGMnLCAncG93ZXJwYzY0JyBdIGFuZCBkLmdldFZhcignVENMSUJDJywgVHJ1ZSkgaW4gWyAndWNsaWJjJywgJ2dsaWJjJyBdOgorICAgICAgICByZXR1cm4gIi0td2l0aC1sb25nLWRvdWJsZS0xMjgiCisgICAgcmV0dXJuICIiCisKK2RlZiBnZXRfZ2NjX211bHRpYXJjaF9zZXR0aW5nKGJiLCBkKToKKyAgICB0YXJnZXRfYXJjaCA9IGQuZ2V0VmFyKCdUUkFOU0xBVEVEX1RBUkdFVF9BUkNIJywgVHJ1ZSkKKyAgICBtdWx0aWFyY2hfb3B0aW9ucyA9IHsKKyAgICAgICAgImk1ODYiOiAgICAiLS1lbmFibGUtdGFyZ2V0cz1hbGwiLAorICAgICAgICAiaTY4NiI6ICAgICItLWVuYWJsZS10YXJnZXRzPWFsbCIsCisgICAgICAgICJwb3dlcnBjIjogIi0tZW5hYmxlLXRhcmdldHM9cG93ZXJwYzY0IiwKKyAgICAgICAgIm1pcHMiOiAgICAiLS1lbmFibGUtdGFyZ2V0cz1hbGwiLAorICAgICAgICAic3BhcmMiOiAgICItLWVuYWJsZS10YXJnZXRzPWFsbCIsCisgICAgfQorCisgICAgaWYgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdtdWx0aWFyY2gnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIGlmIHRhcmdldF9hcmNoIGluIG11bHRpYXJjaF9vcHRpb25zIDoKKyAgICAgICAgICAgIHJldHVybiBtdWx0aWFyY2hfb3B0aW9uc1t0YXJnZXRfYXJjaF0KKyAgICByZXR1cm4gIiIKKworIyB0aGlzIGlzIHVzZWQgYnkgdGhlIG11bHRpbGliIHNldHVwIG9mIGdjYworZGVmIGdldF90dW5lX3BhcmFtZXRlcnModHVuZSwgZCk6CisgICAgYXZhaWx0dW5lcyA9IGQuZ2V0VmFyKCdBVkFJTFRVTkVTJywgVHJ1ZSkKKyAgICBpZiB0dW5lIG5vdCBpbiBhdmFpbHR1bmVzLnNwbGl0KCk6CisgICAgICAgIGJiLmVycm9yKCdUaGUgdHVuZTogJXMgaXMgbm90IG9uZSBvZiB0aGUgYXZhaWxhYmxlIHR1bmVzOiAlcycsIHR1bmUgb3IgTm9uZSwgYXZhaWx0dW5lcykKKworICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIG92ZXJyaWRlID0gJzp0dW5lLScgKyB0dW5lCisgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgbG9jYWxkYXRhLmdldFZhcignT1ZFUlJJREVTJywgRmFsc2UpICsgb3ZlcnJpZGUpCisgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICByZXRkaWN0ID0ge30KKyAgICByZXRkaWN0Wyd0dW5lJ10gPSB0dW5lCisgICAgcmV0ZGljdFsnY2NhcmdzJ10gPSBsb2NhbGRhdGEuZ2V0VmFyKCdUVU5FX0NDQVJHUycsIFRydWUpCisgICAgcmV0ZGljdFsnZmVhdHVyZXMnXSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1RVTkVfRkVBVFVSRVMnLCBUcnVlKQorICAgICMgQkFTRUxJQiBpcyB1c2VkIGJ5IHRoZSBtdWx0aWxpYiBjb2RlIHRvIGNoYW5nZSBsaWJyYXJ5IHBhdGhzCisgICAgcmV0ZGljdFsnYmFzZWxpYiddID0gbG9jYWxkYXRhLmdldFZhcignQkFTRV9MSUInLCBUcnVlKSBvciBsb2NhbGRhdGEuZ2V0VmFyKCdCQVNFTElCJywgVHJ1ZSkKKyAgICByZXRkaWN0WydhcmNoJ10gPSBsb2NhbGRhdGEuZ2V0VmFyKCdUVU5FX0FSQ0gnLCBUcnVlKQorICAgIHJldGRpY3RbJ2FiaWV4dGVuc2lvbiddID0gbG9jYWxkYXRhLmdldFZhcignQUJJRVhURU5TSU9OJywgVHJ1ZSkKKyAgICByZXRkaWN0Wyd0YXJnZXRfZnB1J10gPSBsb2NhbGRhdGEuZ2V0VmFyKCdUQVJHRVRfRlBVJywgVHJ1ZSkKKyAgICByZXRkaWN0Wydwa2dhcmNoJ10gPSBsb2NhbGRhdGEuZ2V0VmFyKCdUVU5FX1BLR0FSQ0gnLCBUcnVlKQorICAgIHJldGRpY3RbJ3BhY2thZ2VfZXh0cmFfYXJjaHMnXSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BBQ0tBR0VfRVhUUkFfQVJDSFMnLCBUcnVlKQorICAgIHJldHVybiByZXRkaWN0CisKK2dldF90dW5lX3BhcmFtZXRlcnNbdmFyZGVwc2V4Y2x1ZGVdID0gIkFWQUlMVFVORVMgVFVORV9DQ0FSR1MgT1ZFUlJJREVTIFRVTkVfRkVBVFVSRVMgQkFTRV9MSUIgQkFTRUxJQiBUVU5FX0FSQ0ggQUJJRVhURU5TSU9OIFRBUkdFVF9GUFUgVFVORV9QS0dBUkNIIFBBQ0tBR0VfRVhUUkFfQVJDSFMiCisKK0RFQklBTk5BTUVfJHtNTFBSRUZJWH1saWJnY2MgPSAibGliZ2NjMSIKKworTUlSUk9SUyA9KyAiXAorJHtHTlVfTUlSUk9SfS9nY2MgICAgZnRwOi8vZ2NjLmdudS5vcmcvcHViL2djYy9yZWxlYXNlcy8gXG4gXAorJHtHTlVfTUlSUk9SfS9nY2MJZnRwOi8vZ2QudHV3aWVuLmFjLmF0L2dudS9nY2MvIFxuIFwKKyR7R05VX01JUlJPUn0vZ2NjCWh0dHA6Ly9taXJyb3JzLnJjbi5uZXQvcHViL3NvdXJjZXdhcmUvZ2NjL3JlbGVhc2VzLyBcbiBcCiske0dOVV9NSVJST1J9L2djYyAgIGh0dHA6Ly9nY2MuZ2V0LXNvZnR3YXJlLmNvbS9yZWxlYXNlcy8gXG4gXAorJHtHTlVfTUlSUk9SfS9nY2MJaHR0cDovL2djYy5nZXQtc29mdHdhcmUuY29tL3JlbGVhc2VzLyBcbiBcCisiCisjCisjIFNldCBzb21lIGRlZmF1bHQgdmFsdWVzCisjCitnY2NsaWJkaXIgPSAiJHtsaWJkaXJ9L2djYyIKK0JJTlYgPSAiJHtQVn0iCisjUyA9ICIke1dPUktESVJ9L2djYy0ke1BWfSIKK1MgPSAiJHtUTVBESVJ9L3dvcmstc2hhcmVkL2djYy0ke1BWfS0ke1BSfS9nY2MtJHtQVn0iCitCID0gIiR7V09SS0RJUn0vZ2NjLSR7UFZ9L2J1aWxkLiR7SE9TVF9TWVN9LiR7VEFSR0VUX1NZU30iCisKK3RhcmdldF9pbmNsdWRlZGlyID89ICIke2luY2x1ZGVkaXJ9IgordGFyZ2V0X2xpYmRpciA/PSAiJHtsaWJkaXJ9IgordGFyZ2V0X2Jhc2VfbGliZGlyID89ICIke2Jhc2VfbGliZGlyfSIKK3RhcmdldF9wcmVmaXggPz0gIiR7cHJlZml4fSIKKworIyBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGZvciB0aGUgc2hhcmVkIHdvcmsgZGlyZWN0b3J5LCB0aGUgZG9fcGF0Y2ggc2lnbmF0dXJlcyBtYXRjaAorIyBUaGUgcmVhbCBXT1JLRElSIGxvY2F0aW9uIGlzbid0IGEgZGVwZW5kZW5jeSBmb3IgdGhlIHNoYXJlZCB3b3JrZGlyLgorc3JjX3BhdGNoZXNbdmFyZGVwc2V4Y2x1ZGVdID0gIldPUktESVIiCitzaG91bGRfYXBwbHlbdmFyZGVwc2V4Y2x1ZGVdICs9ICJQTiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY29uZmlndXJlLWNvbW1vbi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNvbmZpZ3VyZS1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNGJlNzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNvbmZpZ3VyZS1jb21tb24uaW5jCkBAIC0wLDAgKzEsMTI4IEBACityZXF1aXJlIGdjYy1tdWx0aWxpYi1jb25maWcuaW5jCityZXF1aXJlIGdjYy1zaGFyZWQtc291cmNlLmluYworIworIyBCdWlsZCB0aGUgbGlzdCBvZiBsYW5hZ3VhZ2VzIHRvIGJ1aWxkLgorIworIyBUaGVzZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgdmVyc2lvbiBzcGVjaWZpYyAuaW5jIGZpbGUuCisKKyMgSmF2YSAoZ2NqIGRvZXNuJ3Qgd29yayBvbiBhbGwgYXJjaGl0ZWN0dXJlcykKK0pBVkEgPz0gIixqYXZhIgorSkFWQV9hcm0gPz0gIiIKK0pBVkFfYXJtZWIgPz0gIiIKK0pBVkFfbWlwc2VsID89ICIiCitKQVZBX3NoMyA/PSAiIgorIyBnY2MgMy54IGV4cGVjdHMgJ2Y3NycsIDQuMCBleHBlY3RzICdmOTUnLCA0LjEgYW5kIDQuMiBleHBlY3QgJ2ZvcnRyYW4nCitGT1JUUkFOID89ICIsZjc3IgorTEFOR1VBR0VTID89ICJjLGMrKyR7Rk9SVFJBTn0ke0pBVkF9IgorIyBkaXNhYmxlIC0tZW5hYmxlLXRhcmdldC1vcHRzcGFjZSBmb3IgcG93ZXJwYyBTUEUKKyMgYXQgLU9zIGxpYmdjYy5zby4xIGNyZWF0ZXMgcmVmZXJlbmNlcyBpbnRvCisjIGhpZGRlbiBzeW1ib2xzIGluIGxpYmdjYy5hIHdoaWNoIGxpbmtlciBjb21wbGFpbnMKKyMgd2hlbiBsaW5raW5nIHNoYXJlZCBsaWJyYXJpZXMgZnVydGhlciBpbiB0aGUgYnVpbGQgbGlrZSAoZ251dGxzKQorCitTUEVDSUFMX0FSQ0hfTElTVCA9ICJwb3dlcnBjIgorT1BUU1BBQ0UgPSAnJHtAYmIudXRpbHMuY29udGFpbnMoIlNQRUNJQUxfQVJDSF9MSVNUIiwgIiR7VEFSR0VUX0FSQ0h9IiwgIiIsICItLWVuYWJsZS10YXJnZXQtb3B0c3BhY2UiLGQpfScKKworRVhUUkFfT0VDT05GX0JBU0UgPz0gIiIKK0VYVFJBX09FQ09ORl9QQVRIUyA/PSAiIgorRVhUUkFfT0VDT05GX0lOSVRJQUwgPz0gIiIKKworR0NDTVVMVElMSUIgPz0gIi0tZGlzYWJsZS1tdWx0aWxpYiIKK0dDQ1RIUkVBRFMgPz0gInBvc2l4IgorCitFWFRSQV9PRUNPTkYgPSAiXAorICAgICR7QFsnLS1lbmFibGUtY2xvY2FsZT1nZW5lcmljJywgJyddW2QuZ2V0VmFyKCdVU0VfTkxTJywgVHJ1ZSkgIT0gJ25vJ119IFwKKyAgICAtLXdpdGgtZ251LWxkIFwKKyAgICAtLWVuYWJsZS1zaGFyZWQgXAorICAgIC0tZW5hYmxlLWxhbmd1YWdlcz0ke0xBTkdVQUdFU30gXAorICAgIC0tZW5hYmxlLXRocmVhZHM9JHtHQ0NUSFJFQURTfSBcCisgICAgJHtHQ0NNVUxUSUxJQn0gXAorICAgIC0tZW5hYmxlLWM5OSBcCisgICAgLS1lbmFibGUtbG9uZy1sb25nIFwKKyAgICAtLWVuYWJsZS1zeW12ZXJzPWdudSBcCisgICAgLS1lbmFibGUtbGlic3RkY3h4LXBjaCBcCisgICAgLS1wcm9ncmFtLXByZWZpeD0ke1RBUkdFVF9QUkVGSVh9IFwKKyAgICAtLXdpdGhvdXQtbG9jYWwtcHJlZml4IFwKKyAgICAke09QVFNQQUNFfSBcCisgICAgJHtFWFRSQV9PRUNPTkZfQkFTRX0gXAorICAgICR7RVhUUkFfT0VDT05GX0dDQ19GTE9BVH0gXAorICAgICR7RVhUUkFfT0VDT05GX1BBVEhTfSBcCisgICAgJHtAZ2V0X2djY19taXBzX3BsdF9zZXR0aW5nKGJiLCBkKX0gXAorICAgICR7QGdldF9sb25nX2RvdWJsZV9zZXR0aW5nKGJiLCBkKX0gXAorICAgICR7QGdldF9nY2NfbXVsdGlhcmNoX3NldHRpbmcoYmIsIGQpfSBcCisiCisKK2V4cG9ydCBnY2NfY3ZfY29sbGVjdDJfbGlicyA9ICdub25lIHJlcXVpcmVkJworIyBXZSBuZWVkIHRvIHNldCBnY2NfY3ZfY29sbGVjdDJfbGlicyBlbHNlIHRoZXJlIGlzIGNyb3NzLWNvbXBpbGF0aW9uIGJhZG5lc3MKKyMgaW4gdGhlIGNvbmZpZy5sb2cgZmlsZXMgKHdoaWNoIG1pZ2h0IG5vdCBnZXQgZ2VuZXJhdGVkIHVudGlsIGRvX2NvbXBpbGUKKyMgaGVuY2UgYmVpbmcgbWlzc2VkIGJ5IHRoZSBpbnNhbmUgZG9fY29uZmlndXJlIGNoZWNrKS4KKworIyBCdWlsZCB1Y2xpYmMgY29tcGlsZXJzIHdpdGhvdXQgY3hhX2F0ZXhpdCBzdXBwb3J0CitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpbnV4ID0gIiAtLWVuYWJsZS1fX2N4YV9hdGV4aXQiCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLWVuYWJsZS1fX2N4YV9hdGV4aXQiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfbWlwczY0ID0gIiAtLXdpdGgtYWJpPTY0IC0td2l0aC1hcmNoLTY0PW1pcHM2NCAtLXdpdGgtdHVuZS02ND1taXBzNjQiCitFWFRSQV9PRUNPTkZfYXBwZW5kX21pcHM2NGVsID0gIiAtLXdpdGgtYWJpPTY0IC0td2l0aC1hcmNoLTY0PW1pcHM2NCAtLXdpdGgtdHVuZS02ND1taXBzNjQiCitFWFRSQV9PRUNPTkZfYXBwZW5kX21pcHM2NG4zMiA9ICIgLS13aXRoLWFiaT02NCAtLXdpdGgtYXJjaC02ND1taXBzNjQgLS13aXRoLXR1bmUtNjQ9bWlwczY0IgorRVhUUkFfT0VDT05GX2FwcGVuZF9taXBzNjRlbG4zMiA9ICIgLS13aXRoLWFiaT02NCAtLXdpdGgtYXJjaC02ND1taXBzNjQgLS13aXRoLXR1bmUtNjQ9bWlwczY0IgorCisjIEFSTXY2KyBhZGRzIGF0b21pYyBpbnN0cnVjdGlvbnMgdGhhdCBhZmZlY3QgdGhlIEFCSSBpbiBsaWJyYXJpZXMgYnVpbHQKKyMgd2l0aCBUVU5FX0NDQVJHUyBpbiBnY2MtcnVudGltZS4gIE1ha2UgdGhlIGNvbXBpbGVyIGRlZmF1bHQgdG8gYQorIyBjb21wYXRpYmxlIGFyY2hpdGVjdHVyZS4gIGFybXY2IGFuZCBhcm12N2EgY292ZXIgdGhlIG1pbmltdW0gdHVuZQorIyBmZWF0dXJlcyB1c2VkIGluIE9FLgorRVhUUkFfT0VDT05GX2FwcGVuZF9hcm12NiA9ICIgLS13aXRoLWFyY2g9YXJtdjYiCitFWFRSQV9PRUNPTkZfYXBwZW5kX2FybXY3YSA9ICIgLS13aXRoLWFyY2g9YXJtdjctYSIKKworRVhUUkFfT0VDT05GX0dDQ19GTE9BVCA/Pz0gIiIKK0NQUEZMQUdTID0gIiIKKworU1lTVEVNSEVBREVSUyA9ICIke3RhcmdldF9pbmNsdWRlZGlyfSIKK1NZU1RFTUxJQlMgPSAiJHt0YXJnZXRfYmFzZV9saWJkaXJ9LyIKK1NZU1RFTUxJQlMxID0gIiR7dGFyZ2V0X2xpYmRpcn0vIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyB0ZWFjaCBnY2MgdG8gZmluZCBjb3JyZWN0IHRhcmdldCBpbmNsdWRlZGlyIHdoZW4gY2hlY2tpbmcgbGliYyBzc3Agc3VwcG9ydAorCW1rZGlyIC1wICR7Qn0vZ2NjCisJZWNobyAiTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSID0gJHtTWVNURU1IRUFERVJTfSIgPiAke0J9L2djYy90LW9lCisJY2F0ICR7U30vZ2NjL2RlZmF1bHRzLmggfCBncmVwIC12ICJcI2VuZGlmLipHQ0NfREVGQVVMVFNfSCIgPiAke0J9L2djYy9kZWZhdWx0cy5oLm5ldworCWNhdCA+PiR7Qn0vZ2NjL2RlZmF1bHRzLmgubmV3IDw8X0VPRgorI2RlZmluZSBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIgIiR7U1lTVEVNSEVBREVSU30iCisjZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMSAiJHtTWVNURU1MSUJTfSIKKyNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yICIke1NZU1RFTUxJQlMxfSIKKyNkZWZpbmUgU1lTVEVNTElCU19ESVIgIiR7U1lTVEVNTElCU30iCisjZW5kaWYgLyogISBHQ0NfREVGQVVMVFNfSCAqLworX0VPRgorCW12ICR7Qn0vZ2NjL2RlZmF1bHRzLmgubmV3ICR7Qn0vZ2NjL2RlZmF1bHRzLmgKK30KKworZG9fY29uZmlndXJlICgpIHsKKwkjIFNldHVwIHRoZXNlIHZhcnMgZm9yIGNyb3NzIGJ1aWxkaW5nIG9ubHkKKwkjIC4uLiBiZWNhdXNlIGZvb19GT1JfVEFSR0VUIGFwcGFyZW50bHkgZ2V0cyBtaXNpbnRlcnByZXRlZCBpbnNpZGUgdGhlCisJIyBnY2MgYnVpbGQgc3R1ZmYgd2hlbiB0aGUgYnVpbGQgaXMgcHJvZHVjaW5nIGEgY3Jvc3MgY29tcGlsZXIgLSBpLmUuCisJIyB3aGVuIHRoZSAnY3VycmVudCcgdGFyZ2V0IGlzIHRoZSAnaG9zdCcgc3lzdGVtLCBhbmQgdGhlIGhvc3QgaXMgbm90CisJIyB0aGUgdGFyZ2V0IChiZWNhdXNlIHRoZSBidWlsZCBpcyBhY3R1YWxseSBtYWtpbmcgYSBjcm9zcyBjb21waWxlciEpCisJaWYgWyAiJHtCVUlMRF9TWVN9IiAhPSAiJHtIT1NUX1NZU30iIF07IHRoZW4KKwkJZXhwb3J0IENDX0ZPUl9UQVJHRVQ9IiR7Q0N9IgorCQlleHBvcnQgR0NDX0ZPUl9UQVJHRVQ9IiR7Q0N9IgorCQlleHBvcnQgQ1hYX0ZPUl9UQVJHRVQ9IiR7Q1hYfSIKKwkJZXhwb3J0IEFTX0ZPUl9UQVJHRVQ9IiR7SE9TVF9QUkVGSVh9YXMiCisJCWV4cG9ydCBMRF9GT1JfVEFSR0VUPSIke0hPU1RfUFJFRklYfWxkIgorCQlleHBvcnQgTk1fRk9SX1RBUkdFVD0iJHtIT1NUX1BSRUZJWH1ubSIKKwkJZXhwb3J0IEFSX0ZPUl9UQVJHRVQ9IiR7SE9TVF9QUkVGSVh9YXIiCisJCWV4cG9ydCBHRk9SVFJBTl9GT1JfVEFSR0VUPSJnZm9ydHJhbiIKKwkJZXhwb3J0IFJBTkxJQl9GT1JfVEFSR0VUPSIke0hPU1RfUFJFRklYfXJhbmxpYiIKKwlmaQorCWV4cG9ydCBDQ19GT1JfQlVJTEQ9IiR7QlVJTERfQ0N9IgorCWV4cG9ydCBDWFhfRk9SX0JVSUxEPSIke0JVSUxEX0NYWH0iCisJZXhwb3J0IENGTEFHU19GT1JfQlVJTEQ9IiR7QlVJTERfQ0ZMQUdTfSIKKwlleHBvcnQgQ1BQRkxBR1NfRk9SX0JVSUxEPSIke0JVSUxEX0NQUEZMQUdTfSIKKwlleHBvcnQgQ1hYRkxBR1NfRk9SX0JVSUxEPSIke0JVSUxEX0NYWEZMQUdTfSIKKwlleHBvcnQgTERGTEFHU19GT1JfQlVJTEQ9IiR7QlVJTERfTERGTEFHU30iCisJZXhwb3J0IENGTEFHU19GT1JfVEFSR0VUPSIke1RBUkdFVF9DRkxBR1N9IgorCWV4cG9ydCBDUFBGTEFHU19GT1JfVEFSR0VUPSIke1RBUkdFVF9DUFBGTEFHU30iCisJZXhwb3J0IENYWEZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0NYWEZMQUdTfSIKKwlleHBvcnQgTERGTEFHU19GT1JfVEFSR0VUPSIke1RBUkdFVF9MREZMQUdTfSIKKworCisJb2VfcnVuY29uZgorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW4uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZTQ4ODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuLmluYwpAQCAtMCwwICsxLDE3NyBAQAoraW5oZXJpdCBjcm9zcy1jYW5hZGlhbgorCitTVU1NQVJZID0gIkdOVSBjYyBhbmQgZ2NjIEMgY29tcGlsZXJzIChjcm9zcy1jYW5hZGlhbiBmb3IgJHtUQVJHRVRfQVJDSH0gdGFyZ2V0KSIKK1BOID0gImdjYy1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9IgorCitERVBFTkRTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYyB2aXJ0dWFsLyR7SE9TVF9QUkVGSVh9YmludXRpbHMtY3Jvc3NzZGsgdmlydHVhbC9uYXRpdmVzZGstJHtIT1NUX1BSRUZJWH1saWJjLWZvci1nY2MgbmF0aXZlc2RrLWdldHRleHQiCisKK0dDQ01VTFRJTElCID0gIi0tZW5hYmxlLW11bHRpbGliIgorCityZXF1aXJlIGdjYy1jb25maWd1cmUtY29tbW9uLmluYworCitFWFRSQV9PRUNPTkZfUEFUSFMgPSAiXAorICAgIC0td2l0aC1neHgtaW5jbHVkZS1kaXI9L25vdC9leGlzdCR7dGFyZ2V0X2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9IFwKKyAgICAtLXdpdGgtYnVpbGQtdGltZS10b29scz0ke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9LyR7VEFSR0VUX1NZU30vYmluIFwKKyAgICAtLXdpdGgtc3lzcm9vdD0vbm90L2V4aXN0IFwKKyAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAorIgorIyBXZSBoYXZlIHRvIHBvaW50IGdjYyBhdCBhIHN5c3Jvb3QgYnV0IHdlIGRvbid0IG5lZWQgdG8gcmVidWlsZCBpZiB0aGlzIGNoYW5nZXMKKyMgZS5nLiB3ZSBzd2l0Y2ggYmV0d2VlbiBkaWZmZXJlbnQgbWFjaGluZXMgd2l0aCBkaWZmZXJlbnQgdHVuZXMuCitFWFRSQV9PRUNPTkZfUEFUSFNbdmFyZGVwc2V4Y2x1ZGVdID0gIlRVTkVfUEtHQVJDSCIKK1RBUkdFVF9BUkNIW3ZhcmRlcHNleGNsdWRlXSA9ICJUVU5FX0FSQ0giCitnZXRfZ2NjX2Zsb2F0X3NldHRpbmdbdmFyZGVwdmFsdWVdID0gIiIKKworIworIyBnY2MtY3Jvc3MgbG9va3MgYW5kIGZpbmRzIHRoZXNlIGluICR7ZXhlY19wcmVmaXh9IGJ1dCB3ZSdyZSBub3Qgc28gbHVja3kKKyMgZm9yIHRoZSBzZGsuIEhhcmRjb2RpbmcgdGhlIHBhdGhzIGVuc3VyZXMgdGhlIGJ1aWxkIGRvZXNuJ3QgZ28gY2FuYWRpYW4gb3Igd29yc2UuCisjCitleHBvcnQgQVJfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9YXIiCitleHBvcnQgQVNfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9YXMiCitleHBvcnQgRExMVE9PTF9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1kbGx0b29sIgorZXhwb3J0IENDX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfWdjYyIKK2V4cG9ydCBDWFhfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9ZysrIgorZXhwb3J0IEdDQ19GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1nY2MiCitleHBvcnQgTERfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9bGQiCitleHBvcnQgTElQT19GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1saXBvIgorZXhwb3J0IE5NX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfW5tIgorZXhwb3J0IE9CSkRVTVBfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9b2JqZHVtcCIKK2V4cG9ydCBSQU5MSUJfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9cmFubGliIgorZXhwb3J0IFNUUklQX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfXN0cmlwIgorZXhwb3J0IFdJTkRSRVNfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9d2luZHJlcyIKKworIworIyBXZSBuZWVkIHRvIG92ZXJyaWRlIHRoaXMgYW5kIG1ha2Ugc3VyZSB0aGUgY29tcGlsZXIgY2FuIGZpbmQgc3RhZ2luZworIworZXhwb3J0IEFSQ0hfRkxBR1NfRk9SX1RBUkdFVCA9ICItLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IgorCitkb19jb25maWd1cmUgKCkgeworCWV4cG9ydCBDQ19GT1JfQlVJTEQ9IiR7QlVJTERfQ0N9IgorCWV4cG9ydCBDWFhfRk9SX0JVSUxEPSIke0JVSUxEX0NYWH0iCisJZXhwb3J0IENGTEFHU19GT1JfQlVJTEQ9IiR7QlVJTERfQ0ZMQUdTfSIKKwlleHBvcnQgQ1BQRkxBR1NfRk9SX0JVSUxEPSIke0JVSUxEX0NQUEZMQUdTfSIKKwlleHBvcnQgQ1hYRkxBR1NfRk9SX0JVSUxEPSIke0JVSUxEX0NYWEZMQUdTfSIKKwlleHBvcnQgTERGTEFHU19GT1JfQlVJTEQ9IiR7QlVJTERfTERGTEFHU30iCisJZXhwb3J0IENGTEFHU19GT1JfVEFSR0VUPSIke1RBUkdFVF9DRkxBR1N9IgorCWV4cG9ydCBDUFBGTEFHU19GT1JfVEFSR0VUPSIke1RBUkdFVF9DUFBGTEFHU30iCisJZXhwb3J0IENYWEZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0NYWEZMQUdTfSIKKwlleHBvcnQgTERGTEFHU19GT1JfVEFSR0VUPSIke1RBUkdFVF9MREZMQUdTfSIKKwlvZV9ydW5jb25mCit9CisKK2RvX2NvbXBpbGUgKCkgeworCW9lX3J1bm1ha2UgYWxsLWhvc3QgY29uZmlndXJlLXRhcmdldC1saWJnY2MKK30KKworIyBIYXZpbmcgYW55dGhpbmcgYXV0byBkZXBlbmRpbmcgb24gZ2NjLWNyb3NzLXNkayBpcyBhIHJlYWxseSBiYWQgaWRlYS4uLgorRVhDTFVERV9GUk9NX1NITElCUyA9ICIxIgorCitQQUNLQUdFUyA9ICIke1BOfS1kYmcgJHtQTn0gJHtQTn0tZG9jIgorCitGSUxFU18ke1BOfSA9ICJcCisgICAgJHtleGVjX3ByZWZpeH0vYmluLyogXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS8qIFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9LyoubyBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9zcGVjcyBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9saWIqIFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUgXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS1maXhlZCBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9wbHVnaW4vaW5jbHVkZS8gXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vcGx1Z2luL2d0eXBlLiogXAorICAgICR7aW5jbHVkZWRpcn0vYysrLyR7QklOVn0gXAorICAgICR7cHJlZml4fS8ke1RBUkdFVF9TWVN9L2Jpbi8qIFwKKyAgICAke3ByZWZpeH0vJHtUQVJHRVRfU1lTfS9saWIvKiBcCisgICAgJHtwcmVmaXh9LyR7VEFSR0VUX1NZU30vdXNyL2luY2x1ZGUvKiBcCisiCitJTlNBTkVfU0tJUF8ke1BOfSArPSAiZGV2LXNvIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9Ly5kZWJ1ZyBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3BsdWdpbi8uZGVidWcgXAorIgorCitGSUxFU18ke1BOfS1kb2MgPSAiXAorICAgICR7aW5mb2Rpcn0gXAorICAgICR7bWFuZGlyfSBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlL1JFQURNRSBcCisiCisKK0VYRUVYVCA9ICIiCisKKyMgQ29tcHV0ZSBob3cgdG8gZ2V0IGZyb20gbGliZXhlY2RpciB0byBiaW5kaXIgaW4gcHl0aG9uIChlYXNpZXIgdGhhbiBzaGVsbCkKK0JJTlJFTFBBVEggPSAiJHtAb3MucGF0aC5yZWxwYXRoKGQuZXhwYW5kKCIke2JpbmRpcn0iKSwgZC5leHBhbmQoIiR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfSIpKX0iCisKK2RvX2luc3RhbGwgKCkgeworCSggY2QgJHtCfS8ke1RBUkdFVF9TWVN9L2xpYmdjYzsgb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsLXVud2luZF9oICkKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwtaG9zdAorCisJIyBDbGVhbnVwIHNvbWUgb2YgdGhlICR7bGliZGlyfXssZXhlY30vZ2NjIHN0dWZmIC4uLgorCXJtIC1yICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbnN0YWxsLXRvb2xzCisJcm0gLXIgJHtEfSR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbnN0YWxsLXRvb2xzCisJcm0gLXJmICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9maW5jbHVkZQorCisJIyBXZSBjYXJlIGFib3V0IGcrKyBub3QgYysrCisJcm0gLWYgJHtEfSR7YmluZGlyfS8qYysrCisKKwkjIFdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGdjYy08dmVyc2lvbj4gY29waWVzCisJcm0gLWYgJHtEfSR7YmluZGlyfS8qZ2NjLT8uPyoKKworCSMgV2UgdXNlIGxpYmliZXJ0eSBmcm9tIGJpbnV0aWxzCisJcm0gLWYgJHtEfSR7cHJlZml4fS8ke1RBUkdFVF9TWVN9L2xpYi9saWJpYmVydHkuYQorCSMgTm90IHN1cmUgd2hlcmUgdGhlIHN0cmFuZ2UgcGF0aHMgY29tZSBmcm9tCisJcm0gLWYgJHtEfSR7bGliZGlyfS8uLi9saWIvbGliaWJlcnR5LmEKKwlybSAtZiAke0R9JHtsaWJkaXJ9L2xpYmliZXJ0eS5hCisKKwkjIENsZWFudXAgZW1wdHkgZGlyZWN0b3JpZXMgd2hpY2ggYXJlIG5vdCBzaGlwcGVkCisJIyB3ZSB1c2Ugcm1kaXIgaW5zdGVhZCBvZiAncm0gLWYnIHRvIGVuc3VyZSB0aGUgbm9uIGVtcHR5IGRpcmVjdG9yaWVzIGFyZSBub3QgZGVsZXRlZAorCSMgJHtEfSR7bGliZGlyfS8uLi9saWIgb25seSBzZWVtcyB0byBhcHBlYXIgd2l0aCBTREtNQUNISU5FPWk2ODYKKwlsb2NhbCBlbXB0eV9kaXJzPSIke0R9JHtsaWJkaXJ9Ly4uL2xpYiAke0R9JHtwcmVmaXh9LyR7VEFSR0VUX1NZU30vbGliICR7RH0ke3ByZWZpeH0vJHtUQVJHRVRfU1lTfSAke0R9JHtpbmNsdWRlZGlyfSIKKwlmb3IgaSBpbiAkZW1wdHlfZGlyczsgZG8KKwkJWyAtZCAkaSBdICYmIHJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5ICRpCisJZG9uZQorCisJIyBJbnNlcnQgc3ltbGlua3MgaW50byBsaWJleGVjIHNvIHdoZW4gdG9vbHMgd2l0aG91dCBhIHByZWZpeCBhcmUgc2VhcmNoZWQgZm9yLCB0aGUgY29ycmVjdCBvbmVzIGFyZQorCSMgZm91bmQuCisJZGVzdD0ke0R9JHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9LworCWluc3RhbGwgLWQgJGRlc3QKKwlzdWZmaXg9JHtFWEVFWFR9CisJZm9yIHQgaW4gYXIgYXMgbGQgbm0gb2JqY29weSBvYmpkdW1wIHJhbmxpYiBzdHJpcCBnNzcgZ2NjIGNwcCBnZm9ydHJhbjsgZG8KKwkJaWYgWyAiJHQiID0gImc3NyIgLW8gIiR0IiA9ICJnZm9ydHJhbiIgXSAmJiBbICEgLWUgJHtEfSR7YmluZGlyfS8ke1RBUkdFVF9QUkVGSVh9JHQkc3VmZml4IF07IHRoZW4KKwkJCWNvbnRpbnVlCisJCWZpCisKKwkJbG4gLXNmICR7QklOUkVMUEFUSH0vJHtUQVJHRVRfUFJFRklYfSR0JHN1ZmZpeCAkZGVzdCR0JHN1ZmZpeAorCWRvbmUKKwl0PXJlYWwtbGQKKwlsbiAtc2YgJHtCSU5SRUxQQVRIfS8ke1RBUkdFVF9QUkVGSVh9bGQkc3VmZml4ICRkZXN0JHQkc3VmZml4CisKKwkjIGxpYnF1YWRtYXRoIGhlYWRlcnMgbmVlZCB0byAgYmUgYXZhaWxhYmxlIGluIHRoZSBnY2MgbGliZXhlYyBkaXIKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLworCWNwICR7U30vbGlicXVhZG1hdGgvcXVhZG1hdGguaCAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS8KKwljcCAke1N9L2xpYnF1YWRtYXRoL3F1YWRtYXRoX3dlYWsuaCAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS8KKworCWNob3duIC1SIHJvb3Q6cm9vdCAke0R9CisJCisJY3Jvc3NfY2FuYWRpYW5fYmluZGlybGlua3MKK30KKworRUxGVVRJTFMgPSAibmF0aXZlc2RrLWVsZnV0aWxzIgorREVQRU5EUyArPSAibmF0aXZlc2RrLWdtcCBuYXRpdmVzZGstbXBmciBuYXRpdmVzZGstbGlibXBjICR7RUxGVVRJTFN9IG5hdGl2ZXNkay16bGliIgorUkRFUEVORFNfJHtQTn0gKz0gIm5hdGl2ZXNkay1tcGZyIG5hdGl2ZXNkay1saWJtcGMgJHtFTEZVVElMU30iCisKK1NZU1RFTUhFQURFUlMgPSAiL3Vzci9pbmNsdWRlIgorU1lTVEVNTElCUyA9ICIke3RhcmdldF9iYXNlX2xpYmRpcn0vIgorU1lTVEVNTElCUzEgPSAiJHt0YXJnZXRfbGliZGlyfS8iCisKK0VYVFJBX09FQ09ORiArPSAiLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyIKKworRVhUUkFfT0VDT05GICs9ICJcCisgICAgLS13aXRoLW1wZnI9JHtTVEFHSU5HX0RJUl9IT1NUfSR7bGF5b3V0X2V4ZWNfcHJlZml4fSBcCisgICAgLS13aXRoLW1wYz0ke1NUQUdJTkdfRElSX0hPU1R9JHtsYXlvdXRfZXhlY19wcmVmaXh9IFwKKyIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLWJhcmVtZXRhbCA9ICIgLS13aXRob3V0LWhlYWRlcnMiCitFWFRSQV9PRUNPTkZfcmVtb3ZlX2xpYmMtYmFyZW1ldGFsID0gIi0td2l0aC1zeXNyb290PS9ub3QvZXhpc3QiCitFWFRSQV9PRUNPTkZfcmVtb3ZlX2xpYmMtYmFyZW1ldGFsID0gIi0td2l0aC1idWlsZC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSIKKworIyBnY2MgNC43IG5lZWRzIC1pc3lzdGVtCitleHBvcnQgQVJDSF9GTEFHU19GT1JfVEFSR0VUID0gIi0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gLWlzeXN0ZW09JHt0YXJnZXRfaW5jbHVkZWRpcn0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzQuOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW5fNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNTNjNWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzQuOC5iYgpAQCAtMCwwICsxLDUgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtY3Jvc3MtY2FuYWRpYW4uaW5jCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzQuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW5fNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNTNjNWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzQuOS5iYgpAQCAtMCwwICsxLDUgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtY3Jvc3MtY2FuYWRpYW4uaW5jCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzUuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW5fNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNTNjNWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzUuMi5iYgpAQCAtMCwwICsxLDUgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtY3Jvc3MtY2FuYWRpYW4uaW5jCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWwuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTk3NDQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsLmluYwpAQCAtMCwwICsxLDk2IEBACitERVBFTkRTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzICR7TkFUSVZFREVQU30iCitQUk9WSURFUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MtaW5pdGlhbCIKK1BBQ0tBR0VTID0gIiIKKworSU5ISUJJVF9BVVRPVE9PTFNfREVQUyA9ICIxIgorSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworUE4gPSAiZ2NjLWNyb3NzLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCisKK0NST1NTX1RBUkdFVF9TWVNfRElSX2FwcGVuZCA9ICIuJHtQTn0iCisKKyMgVGhpcyBpcyBpbnRlbmRlZCB0byBiZSBhIC12ZXJ5LSBiYXNpYyBjb25maWcKKyMgc3lzcm9vdCBpcyBuZWVkZWQgaW4gY2FzZSB3ZSB1c2UgbGliYy1pbml0aWFsCitFWFRSQV9PRUNPTkYgPSAiXAorICAgIC0td2l0aC1uZXdsaWIgXAorICAgIC0td2l0aG91dC1oZWFkZXJzIFwKKyAgICAtLWRpc2FibGUtc2hhcmVkIFwKKyAgICAtLWRpc2FibGUtdGhyZWFkcyBcCisgICAgLS1kaXNhYmxlLW11bHRpbGliIFwKKyAgICAtLWRpc2FibGUtX19jeGFfYXRleGl0IFwKKyAgICAtLWVuYWJsZS1sYW5ndWFnZXM9YyBcCisgICAgJHtPUFRTUEFDRX0gXAorICAgIC0tcHJvZ3JhbS1wcmVmaXg9JHtUQVJHRVRfUFJFRklYfSBcCisgICAgLS13aXRoLXN5c3Jvb3Q9L25vdC9leGlzdCBcCisgICAgLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtHQ0NDUk9TU19CVUlMRFNZU1JPT1R9IFwKKyAgICAke0VYVFJBX09FQ09ORl9JTklUSUFMfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsZC1pcy1nb2xkJywgJy0td2l0aC1sZD0ke1NUQUdJTkdfQklORElSX1RPT0xDSEFJTn0vJHtUQVJHRVRfUFJFRklYfWxkLmJmZCcsICcnLCBkKX0gXAorICAgICR7RVhUUkFfT0VDT05GX0dDQ19GTE9BVH0gXAorIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC1uYXRpdmUtc3lzdGVtLWhlYWRlci1kaXI9JHtTWVNURU1IRUFERVJTfSIKKworR0NDQ1JPU1NfQlVJTERTWVNST09UID0gIiR7Qn0vdG1wc3lzcm9vdCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXN5c3I9JHtHQ0NDUk9TU19CVUlMRFNZU1JPT1R9JHt0YXJnZXRfaW5jbHVkZWRpcn0KKwlta2RpciAtcCAkc3lzcgorCWZvciB0IGluIGxpbnV4IGFzbSBhc20tZ2VuZXJpYzsgZG8KKwkJcm0gLWYgJHN5c3IvJHQKKwkJbG4gLXMgJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHt0YXJnZXRfaW5jbHVkZWRpcn0vJHQgJHN5c3IvCisJZG9uZQorfQorCitkb19jb21waWxlICgpIHsKKyAgICBvZV9ydW5tYWtlIGFsbC1nY2MgY29uZmlndXJlLXRhcmdldC1saWJnY2MKK30KK2RvX2luc3RhbGwgKCkgeworCSggY2QgJHtCfS8ke1RBUkdFVF9TWVN9L2xpYmdjYzsgb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsLXVud2luZF9oICkKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwtZ2NjCisKKwkjIFdlIGRvbid0IHJlYWxseSBuZWVkIHRoaXMgKGhlcmUgc2hhcmVzLyBjb250YWlucyBtYW4vLCBpbmZvLywgbG9jYWxlLykuCisJcm0gLXJmICR7RH0ke2RhdGFkaXJ9LworCisJIyBXZSB1c2UgbGliaWJlcnR5IGZyb20gYmludXRpbHMKKwlmaW5kICR7RH0ke2V4ZWNfcHJlZml4fS9saWIgLW5hbWUgbGliaWJlcnR5LmEgfCB4YXJncyBybSAtZgorCWZpbmQgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYiAtbmFtZSBsaWJpYmVydHkuaCB8IHhhcmdzIHJtIC1mCisKKwkjIEluc2VydCBzeW1saW5rcyBpbnRvIGxpYmV4ZWMgc28gd2hlbiB0b29scyB3aXRob3V0IGEgcHJlZml4IGFyZSBzZWFyY2hlZCBmb3IsIHRoZSBjb3JyZWN0IG9uZXMgYXJlCisJIyBmb3VuZC4gVGhlc2UgbmVlZCB0byBiZSByZWxhdGl2ZSBwYXRocyBzbyB0aGV5IHdvcmsgaW4gZGlmZmVyZW50IGxvY2F0aW9ucy4KKwlkZXN0PSR7RH0ke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vCisJaW5zdGFsbCAtZCAkZGVzdAorCXVzZWxkPSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGQtaXMtZ29sZCcsICcuYmZkJywgJycsIGQpfQorCWxuIC1zZiAke0JJTlJFTFBBVEh9LyR7VEFSR0VUX1BSRUZJWH1sZCR7dXNlbGR9ICR7ZGVzdH1sZAorCWZvciB0IGluIGFyIGFzIG5tIG9iamNvcHkgb2JqZHVtcCByYW5saWIgc3RyaXAgZzc3IGdjYyBjcHAgZ2ZvcnRyYW47IGRvCisJCWxuIC1zZiAke0JJTlJFTFBBVEh9LyR7VEFSR0VUX1BSRUZJWH0kdCAkZGVzdCR0CisJZG9uZQorCSMgZml4ZWQgbGltaXRzLmggaW5mYWN0IGluY2x1ZGVzIHRoZSBzbyBjYWxsZWQgcmVhbCBsaW1pdHMuaAorCSMgd2hpY2ggc2hvdWxkIGNvbWUgZnJvbSBsaWJjIGJ1dCB3aGVuIHdlIGJ1aWxkIGxpYmMtaW5pdGlhbAorCSMgdGhlbiBidW5jaCBvZiBjb25maWd1cmUgdGVzdHMgaW5jbHVkZSBmaXhlZCBsaW1pdHMuaCB3aGljaCBpbiB0dXJuCisJIyBpbmNsdWRlcyByZWFsIGxpbWl0cy5oIGJ1dCB0aGlzIHJlYWwgbGltaXRzLmggaXMgbm90IHN0YWdlZCB5ZXQKKwkjIHNvIHdlIG92ZXJ3aXJ0ZSB0aGUgZ2VuZXJhdGVkIGluY2x1ZGUtZml4ZWQvbGltaXRzLmggZm9yIGdjYy1jcm9zcy1pbml0aWFsCisJIyB0byBnZXQgcmlkIHJlZmVyZW5jZXMgdG8gcmVhbCBsaW1pdHMuaAorCWNwIGdjYy9pbmNsdWRlLWZpeGVkL2xpbWl0cy5oICR7RH0ke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvbGltaXRzLmgKKworCSMgZ2NjLXJ1bnRpbWUgaW5zdGFsbHMgbGliZ2NjIGludG8gYSBzcGVjaWFsIGxvY2F0aW9uIGluIHN0YWdpbmcgc2luY2UgaXQgYnJlYWtzIGRvaW5nIGEgc3RhbmRhbG9uZSBidWlsZAorCWNhc2UgJHtQTn0gaW4KKwkJKmdjYy1jcm9zcy1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9fCpnY2MtY3Jvc3NzZGstaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSkKKwkJCWRlc3Q9JHtEfS8ke2luY2x1ZGVkaXJ9L2djYy1idWlsZC1pbnRlcm5hbC1pbml0aWFsLSR7VEFSR0VUX1NZU30KKwkJCWhhcmRsaW5rZGlyIC4gJGRlc3QKKwkJOzsKKwllc2FjCit9CisjCisjIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHN5c3Jvb3Qgc3RhZ2luZyBjb3B5IHNpbmNlIHRoaXMgd29uJ3QgbG9vayBsaWtlIGEgdGFyZ2V0IHN5c3RlbQorIworc3lzcm9vdF9zdGFnZV9hbGwoKSB7CisJc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSAke1NZU1JPT1RfREVTVERJUn0KKwlpbnN0YWxsIC1kICR7U1lTUk9PVF9ERVNURElSfSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7dGFyZ2V0X2Jhc2VfbGliZGlyfS8KKwlpbnN0YWxsIC1kICR7U1lTUk9PVF9ERVNURElSfSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7dGFyZ2V0X2xpYmRpcn0vCisJbXYgJHtTWVNST09UX0RFU1RESVJ9JHt0YXJnZXRfYmFzZV9saWJkaXJ9LyogJHtTWVNST09UX0RFU1RESVJ9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHt0YXJnZXRfYmFzZV9saWJkaXJ9LyB8fCB0cnVlCisJbXYgJHtTWVNST09UX0RFU1RESVJ9JHt0YXJnZXRfbGliZGlyfS8qICR7U1lTUk9PVF9ERVNURElSfSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7dGFyZ2V0X2xpYmRpcn0vIHx8IHRydWUKK30KKworZG9fcG9wdWxhdGVfc3lzcm9vdFtzc3RhdGUtaW5wdXRkaXJzXSA9ICIke1NZU1JPT1RfREVTVERJUn0vJHtTVEFHSU5HX0RJUl9IT1NUfS8gJHtTWVNST09UX0RFU1RESVJ9LyR7U1RBR0lOR19ESVJfVEFSR0VUfS8ke3RhcmdldF9iYXNlX2xpYmRpcn0vIgorZG9fcG9wdWxhdGVfc3lzcm9vdFtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtTVEFHSU5HX0RJUl9IT1NUfS8gJHtTVEFHSU5HX0RJUl9UQ0JPT1RTVFJBUH0vJHt0YXJnZXRfYmFzZV9saWJkaXJ9LyIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzQuOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF80LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM3M2U1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF80LjguYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc18ke1BWfS5iYgorcmVxdWlyZSBnY2MtY3Jvc3MtaW5pdGlhbC5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF80LjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNzNlNWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfNC45LmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfJHtQVn0uYmIKK3JlcXVpcmUgZ2NjLWNyb3NzLWluaXRpYWwuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfNS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzczZTVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzUuMi5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXyR7UFZ9LmJiCityZXF1aXJlIGdjYy1jcm9zcy1pbml0aWFsLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTEwNjMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy5pbmMKQEAgLTAsMCArMSwxOTggQEAKK2luaGVyaXQgY3Jvc3MKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKK0VYVFJBREVQRU5EUyA9ICIiCitERVBFTkRTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWxpYmMtZm9yLWdjYyAke0VYVFJBREVQRU5EU30gJHtOQVRJVkVERVBTfSIKK1BST1ZJREVTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYyB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nKysiCitweXRob24gKCkgeworICAgIGlmIGQuZ2V0VmFyKCJUQVJHRVRfT1MiLCBUcnVlKS5zdGFydHN3aXRoKCJsaW51eCIpOgorICAgICAgICBkLnNldFZhcigiRVhUUkFERVBFTkRTIiwgImxpbnV4LWxpYmMtaGVhZGVycyIpCit9CisKK1BOID0gImdjYy1jcm9zcy0ke1RBUkdFVF9BUkNIfSIKKworcmVxdWlyZSBnY2MtY29uZmlndXJlLWNvbW1vbi5pbmMKKworRVhUUkFfT0VDT05GICs9ICItLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIgorRVhUUkFfT0VDT05GX2FwcGVuZF9zaDQgPSAiIFwKKyAgICAtLXdpdGgtbXVsdGlsaWItbGlzdD0gXAorICAgIC0tZW5hYmxlLWluY29tcGxldGUtdGFyZ2V0cyBcCisiCisKK0VYVFJBX09FQ09ORiArPSAiXAorICAgIC0td2l0aC1tcGZyPSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0gXAorICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCisiCisKK0RFUEVORFNfcmVtb3ZlX2xpYmMtYmFyZW1ldGFsIDo9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1saWJjLWZvci1nY2MiCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtYmFyZW1ldGFsID0gIiAtLXdpdGhvdXQtaGVhZGVycyIKK0VYVFJBX09FQ09ORl9yZW1vdmVfbGliYy1iYXJlbWV0YWwgPSAiLS1lbmFibGUtdGhyZWFkcz1wb3NpeCIKKworRVhUUkFfT0VDT05GX1BBVEhTID0gIlwKKyAgICAtLXdpdGgtZ3h4LWluY2x1ZGUtZGlyPS9ub3QvZXhpc3Qke3RhcmdldF9pbmNsdWRlZGlyfS9jKysvJHtCSU5WfSBcCisgICAgLS13aXRoLXN5c3Jvb3Q9L25vdC9leGlzdCBcCisgICAgLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKKyIKKworQVJDSF9GTEFHU19GT1JfVEFSR0VUICs9ICItaXN5c3RlbSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7dGFyZ2V0X2luY2x1ZGVkaXJ9IgorCitkb19jb21waWxlICgpIHsKKwlleHBvcnQgQ0M9IiR7QlVJTERfQ0N9IgorCWV4cG9ydCBBUl9GT1JfVEFSR0VUPSIke1RBUkdFVF9TWVN9LWFyIgorCWV4cG9ydCBSQU5MSUJfRk9SX1RBUkdFVD0iJHtUQVJHRVRfU1lTfS1yYW5saWIiCisJZXhwb3J0IExEX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX1NZU30tbGQiCisJZXhwb3J0IE5NX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX1NZU30tbm0iCisJZXhwb3J0IENDX0ZPUl9UQVJHRVQ9IiR7Q0NBQ0hFfSAke1RBUkdFVF9TWVN9LWdjYyIKKwlleHBvcnQgQ0ZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0NGTEFHU30iCisJZXhwb3J0IENQUEZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0NQUEZMQUdTfSIKKwlleHBvcnQgQ1hYRkxBR1NfRk9SX1RBUkdFVD0iJHtUQVJHRVRfQ1hYRkxBR1N9IgorCWV4cG9ydCBMREZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0xERkxBR1N9IgorCisJb2VfcnVubWFrZSBhbGwtaG9zdCBjb25maWd1cmUtdGFyZ2V0LWxpYmdjYworCSMgbm93IGdlbmVyYXRlIHNjcmlwdCB0byBkcml2ZSB0ZXN0aW5nCisJZWNobyAiIyEvdXNyL2Jpbi9lbnYgc2giID4ke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2V0ID4+ICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwkjIHBydW5lIG91dCB0aGUgdW5uZWVkZWQgdmFycworCXNlZCAtaSAtZSAiL15CQVNIL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eVVNFUi9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXk9QVC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXkRJUlNUQUNLL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eRVVJRC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXkZVTkNOQU1FL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eR1JPVVBTL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eSE9TVC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXkhPTUUvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15JRlMvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15MQ19BTEwvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15MT0dOQU1FL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eTUFDSFRZUEUvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15PU1RZUEUvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15QSVBFL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eU0hFTEwvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL14nL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eVUlEL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eVEVSTS9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlBBVENIX0dFVC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlBLR18vZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15QT1NJWExZXy9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlBQSUQvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15QUzQvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15RL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eU0hMVkwvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15TVEFHSU5HL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eTERfTElCUkFSWV9QQVRIL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eUFNFVURPL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKworCSMgYXBwZW5kIGV4ZWN1dGlvbiBwYXJ0IG9mIHRoZSBzY3JpcHQKK2NhdCA+PiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjIDw8IFNUT1AKK3RhcmdldD0iXCQxIgordXNhZ2UgKCkgeworCWVjaG8gIlVzYWdlOiIKKwllY2hvICJcJDAgdXNlckB0YXJnZXQgJ2V4dHJhIG9wdGlvbnMgdG8gZGVqYWdudSciCisJZWNobyAiXCQwIHRhcmdldCAnZXh0cmEgb3B0aW9ucyB0byBkZWphZ251JyIKKwllY2hvICJcJDAgdGFyZ2V0IgorCWVjaG8gImUuZy4gXCQwIDE5Mi4xNjguNy4yICcgZGcuZXhwPXZpc2liaWxpdHktZC5jJyIKKwllY2hvICJ3aWxsIG9ubHkgcnVuIHZpc2liaWxpdHktZC5jIHRlc3QgY2FzZSIKKwllY2hvICJlLmcuIFwkMCAxOTIuMTY4LjcuMiAnLy1tdGh1bWIgZGcuZXhwPXZpc2liaWxpdHktZC5jJyIKKwllY2hvICJ3aWxsIG9ubHkgcnVuIHZpc2liaWxpdHktZC5jIHRlc3QgY2FzZSBpbiB0aHVtYiBtb2RlIgorCWVjaG8gIllvdSBuZWVkIHRvIGhhdmUgZGVqYWdudSBhdXRvZ2VuIGV4cGVjdCBpbnN0YWxsZWQiCisJZWNobyAib24gdGhlIGJ1aWxkIGhvc3QiCisgICAgfQoraWYgWyAieFwkdGFyZ2V0IiA9ICJ4IiBdCit0aGVuCisJZWNobyAiUGxlYXNlIHNwZWNpZnkgdGhlIHRhcmdldCBtYWNoaW5lIGFuZCByZW1vdGUgdXNlciBpbiBmb3JtIG9mIHVzZXJAdGFyZ2V0XG4iCisJdXNhZ2UKKwlleGl0IDE7CitmaQorCitzaGlmdAorCitlY2hvICJcJHRhcmdldCIgfCBncmVwICJAIiAyPiYxID4gL2Rldi9udWxsCitpZiBbICJ4XCQ/IiA9ICJ4MCIgXQordGhlbgorICAgdXNlcj1cJChlY2hvIFwkdGFyZ2V0IHwgY3V0IC1kICdAJyAtZiAxKQorICAgdGFyZ2V0PVwkKGVjaG8gXCR0YXJnZXQgfCBjdXQgLWQgJ0AnIC1mIDIpCitlbHNlCisgICB1c2VyPVwkVVNFUgorZmkKK3NzaCBcJHVzZXJAXCR0YXJnZXQgZGF0ZSAyPiYxID4gL2Rldi9udWxsCitpZiBbICJ4XCQ/IiAhPSAieDAiIF0KK3RoZW4KKwllY2hvICJGYWlsZWQgY29ubmVjdGluZyB0byBcJHVzZXJAXCR0YXJnZXQgaXQgY291bGQgYmUgYmVjYXVzZSIKKwllY2hvICJ5b3UgZG9uJ3QgaGF2ZSBwYXNzd29yZGxlc3Mgc3NoIHNldHVwIHRvIGFjY2VzcyBcJHRhcmdldCIKKwllY2hvICJvciBzb21ldGltZXMgaG9zdCBrZXkgaGFzIGJlZW4gY2hhbmdlZCIKKwllY2hvICJpbiBzdWNoIGNhc2UgZG8gc29tZXRoaW5nIGxpa2UgYmVsb3cgb24gYnVpbGQgaG9zdCIKKwllY2hvICJzc2gta2V5Z2VuIC1mICJ+Ly5zc2gva25vd25faG9zdHMiIC1SIFwkdGFyZ2V0IgorCWVjaG8gImFuZCB0aGVuIHRyeSBzc2ggXCR1c2VyQFwkdGFyZ2V0IgorCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisJZWNobyAibGFwcGVuZCBib2FyZHNfZGlyIFtwd2RdLy4uLy4uLy4uIiA+ICR7Qn0vc2l0ZS5leHAKKwllY2hvICJsb2FkX2dlbmVyaWNfY29uZmlnIFwidW5peFwiIiA+ICR7Qn0vJHtQQUNLQUdFX0FSQ0h9LmV4cAorCWVjaG8gInNldF9ib2FyZF9pbmZvIHVzZXJuYW1lIFwkdXNlciIgPj4gJHtCfS8ke1BBQ0tBR0VfQVJDSH0uZXhwCisJZWNobyAic2V0X2JvYXJkX2luZm8gcnNoX3Byb2cgc3NoIiA+PiAke0J9LyR7UEFDS0FHRV9BUkNIfS5leHAKKwllY2hvICJzZXRfYm9hcmRfaW5mbyByY3BfcHJvZyBzY3AiID4+ICR7Qn0vJHtQQUNLQUdFX0FSQ0h9LmV4cAorCWVjaG8gInNldF9ib2FyZF9pbmZvIGhvc3RuYW1lIFwkdGFyZ2V0IiA+PiAke0J9LyR7UEFDS0FHRV9BUkNIfS5leHAKKwlERUpBR05VPSR7Qn0vc2l0ZS5leHAgbWFrZSAtayBjaGVjayBSVU5URVNURkxBR1M9Ii0tdGFyZ2V0X2JvYXJkPSR7UEFDS0FHRV9BUkNIfVwkQCIKKworU1RPUAorCisJY2htb2QgK3ggJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCit9CisKK0lOSElCSVRfUEFDS0FHRV9TVFJJUCA9ICIxIgorCisjIENvbXB1dGUgaG93IHRvIGdldCBmcm9tIGxpYmV4ZWNkaXIgdG8gYmluZGlyIGluIHB5dGhvbiAoZWFzaWVyIHRoYW4gc2hlbGwpCitCSU5SRUxQQVRIID0gIiR7QG9zLnBhdGgucmVscGF0aChkLmV4cGFuZCgiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS9iaW4vJHtUQVJHRVRfU1lTfSIpLCBkLmV4cGFuZCgiJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9IikpfSIKKworZG9faW5zdGFsbCAoKSB7CisJKCBjZCAke0J9LyR7VEFSR0VUX1NZU30vbGliZ2NjOyBvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwtdW53aW5kX2ggKQorCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbC1ob3N0CisKKwlpbnN0YWxsIC1kICR7RH0ke3RhcmdldF9iYXNlX2xpYmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke3RhcmdldF9saWJkaXJ9CisgICAgCisJIyBMaW5rIGdmb3J0cmFuIHRvIGc3NyB0byBzYXRpc2Z5IG5vdC1zby1zbWFydCBjb25maWd1cmUgb3IgaGFyZCBjb2RlZCBnNzcKKwkjIGdmb3J0cmFuIGlzIGZ1bGx5IGJhY2t3YXJkcyBjb21wYXRpYmxlLiBUaGlzIGlzIGEgc2FmZSBhbmQgcHJhY3RpY2FsIHNvbHV0aW9uLiAKKwlsbiAtc2YgJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS9iaW4vJHtUQVJHRVRfUFJFRklYfWdmb3J0cmFuICR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vYmluLyR7VEFSR0VUX1BSRUZJWH1nNzcgfHwgdHJ1ZQorCisJCisJIyBJbnNlcnQgc3ltbGlua3MgaW50byBsaWJleGVjIHNvIHdoZW4gdG9vbHMgd2l0aG91dCBhIHByZWZpeCBhcmUgc2VhcmNoZWQgZm9yLCB0aGUgY29ycmVjdCBvbmVzIGFyZQorCSMgZm91bmQuIFRoZXNlIG5lZWQgdG8gYmUgcmVsYXRpdmUgcGF0aHMgc28gdGhleSB3b3JrIGluIGRpZmZlcmVudCBsb2NhdGlvbnMuCisJZGVzdD0ke0R9JHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9LworCWluc3RhbGwgLWQgJGRlc3QKKwlmb3IgdCBpbiBhciBhcyBsZCBubSBvYmpjb3B5IG9iamR1bXAgcmFubGliIHN0cmlwIGc3NyBnY2MgY3BwIGdmb3J0cmFuOyBkbworCQlsbiAtc2YgJHtCSU5SRUxQQVRIfS8ke1RBUkdFVF9QUkVGSVh9JHQgJGRlc3QkdAorCQlsbiAtc2YgJHtCSU5SRUxQQVRIfS8ke1RBUkdFVF9QUkVGSVh9JHQgJHtkZXN0fSR7VEFSR0VUX1BSRUZJWH0kdAorCWRvbmUKKworCSMgUmVtb3ZlIHRoaW5ncyB3ZSBkb24ndCBuZWVkIGJ1dCBrZWVwIHNoYXJlL2phdmEKKwlmb3IgZCBpbiBpbmZvIG1hbiBzaGFyZS9kb2Mgc2hhcmUvbG9jYWxlIHNoYXJlL21hbiBzaGFyZS9pbmZvOyBkbworCQlybSAtcmYgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vJGQKKwlkb25lCisKKwkjIGxpYnF1YWRtYXRoIGhlYWRlcnMgbmVlZCB0byAgYmUgYXZhaWxhYmxlIGluIHRoZSBnY2MgbGliZXhlYyBkaXIKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLworCWNwICR7U30vbGlicXVhZG1hdGgvcXVhZG1hdGguaCAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS8KKwljcCAke1N9L2xpYnF1YWRtYXRoL3F1YWRtYXRoX3dlYWsuaCAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS8KKworCSMgV2UgdXNlIGxpYmliZXJ0eSBmcm9tIGJpbnV0aWxzCisJZmluZCAke0R9JHtleGVjX3ByZWZpeH0vbGliIC1uYW1lIGxpYmliZXJ0eS5hIHwgeGFyZ3Mgcm0gLWYKKwlmaW5kICR7RH0ke2V4ZWNfcHJlZml4fS9saWIgLW5hbWUgbGliaWJlcnR5LmggfCB4YXJncyBybSAtZgorCisJIyBnY2MtcnVudGltZSBpbnN0YWxscyBsaWJnY2MgaW50byBhIHNwZWNpYWwgbG9jYXRpb24gaW4gc3RhZ2luZyBzaW5jZSBpdCBicmVha3MgZG9pbmcgYSBzdGFuZGFsb25lIGJ1aWxkCisJY2FzZSAke1BOfSBpbgorCQkqZ2NjLWNyb3NzLSR7VEFSR0VUX0FSQ0h9fCpnY2MtY3Jvc3NzZGstJHtUQVJHRVRfQVJDSH0pCisJCQlkZXN0PSR7RH0vJHtpbmNsdWRlZGlyfS9nY2MtYnVpbGQtaW50ZXJuYWwtJHtUQVJHRVRfU1lTfQorCQkJaGFyZGxpbmtkaXIgLiAkZGVzdAorCQk7OworCWVzYWMKK30KKworZG9fcGFja2FnZVtub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlZGF0YVtub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlX3dyaXRlX2lwa1tub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlX3dyaXRlX3JwbVtub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlX3dyaXRlX2RlYltub2V4ZWNdID0gIjEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXzQuOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0M2NjYTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXzQuOC5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtY3Jvc3MuaW5jCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNC45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc180LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQzY2NhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNC45LmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1jcm9zcy5pbmMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc181LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDNjY2EwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc181LjIuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgZ2NjLWNyb3NzLmluYworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWwuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDI1OTljCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsLmluYwpAQCAtMCwwICsxLDEwIEBACitpbmhlcml0IGNyb3Nzc2RrCisKK1BOID0gImdjYy1jcm9zc3Nkay1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorCitTWVNURU1IRUFERVJTID0gIiR7U0RLUEFUSE5BVElWRX0ke3ByZWZpeF9uYXRpdmVzZGt9L2luY2x1ZGUiCitTWVNURU1MSUJTID0gIiR7U0RLUEFUSE5BVElWRX0ke2Jhc2VfbGliZGlyX25hdGl2ZXNka30vIgorU1lTVEVNTElCUzEgPSAiJHtTREtQQVRITkFUSVZFfSR7bGliZGlyX25hdGl2ZXNka30vIgorCitERVBFTkRTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzLWNyb3Nzc2RrIGdldHRleHQtbmF0aXZlICR7TkFUSVZFREVQU30iCitQUk9WSURFUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MtaW5pdGlhbC1jcm9zc3NkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF80LjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOTBlMTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNC44LmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF8ke1BWfS5iYgorcmVxdWlyZSBnY2MtY3Jvc3NzZGstaW5pdGlhbC5pbmMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsXzQuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF80LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ5MGUxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF80LjkuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXyR7UFZ9LmJiCityZXF1aXJlIGdjYy1jcm9zc3Nkay1pbml0aWFsLmluYworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDkwZTExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsXzUuMi5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfJHtQVn0uYmIKK3JlcXVpcmUgZ2NjLWNyb3Nzc2RrLWluaXRpYWwuaW5jCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGsuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNmODgwZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGsuaW5jCkBAIC0wLDAgKzEsMTIgQEAKK2luaGVyaXQgY3Jvc3NzZGsKKworUE4gPSAiZ2NjLWNyb3Nzc2RrLSR7VEFSR0VUX0FSQ0h9IgorCitTWVNURU1IRUFERVJTID0gIiR7U0RLUEFUSE5BVElWRX0ke3ByZWZpeF9uYXRpdmVzZGt9L2luY2x1ZGUiCitTWVNURU1MSUJTID0gIiR7U0RLUEFUSE5BVElWRX0ke2Jhc2VfbGliZGlyX25hdGl2ZXNka30vIgorU1lTVEVNTElCUzEgPSAiJHtTREtQQVRITkFUSVZFfSR7bGliZGlyX25hdGl2ZXNka30vIgorCitHQ0NNVUxUSUxJQiA9ICItLWRpc2FibGUtbXVsdGlsaWIiCisKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9YmludXRpbHMtY3Jvc3NzZGsgdmlydHVhbC9uYXRpdmVzZGstJHtUQVJHRVRfUFJFRklYfWxpYmMtZm9yLWdjYyBnZXR0ZXh0LW5hdGl2ZSAke05BVElWRURFUFN9IgorUFJPVklERVMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjLWNyb3Nzc2RrIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWcrKy1jcm9zc3NkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGtfNC44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nka180LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhNmM0ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGtfNC44LmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfJHtQVn0uYmIKK3JlcXVpcmUgZ2NjLWNyb3Nzc2RrLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nka180LjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGE2YzRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nka180LjkuYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc18ke1BWfS5iYgorcmVxdWlyZSBnY2MtY3Jvc3NzZGsuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzUuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGtfNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYTZjNGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzUuMi5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXyR7UFZ9LmJiCityZXF1aXJlIGdjYy1jcm9zc3Nkay5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtbXVsdGlsaWItY29uZmlnLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtbXVsdGlsaWItY29uZmlnLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2Y5ZjU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1tdWx0aWxpYi1jb25maWcuaW5jCkBAIC0wLDAgKzEsMjI3IEBACisjIGZvbGxvd2luZyBjb2RlIG1vZGlmaWVzIHRoZXNlIGRlZmluaXRpb25zIGluIHRoZSBnY2MgY29uZmlnCisjICAgIE1VTFRJTElCX09QVElPTlMKKyMgICAgTVVMVElMSUJfRElSTkFNRVMKKyMgICAgTVVMVElMSUJfT1NESVJOQU1FUworIyAgICBHTElCQ19EWU5BTUlDX0xJTktFUjMyCisjICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQKKyMgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIKKyMgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIKKyMgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzZSBvZiB0aGVzZSB2YXJpYWJsZXMgbG9vayBhdCB0aGVzZSBmaWxlcyBpbiB0aGUgZ2NjIHNvdXJjZSBjb2RlCisjICAgIGdjYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKKyMgICAgZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAorIyAgICBnY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQKKyMgICAgZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAorIyAgICBnY2MvY29uZmlnL21pcHMvbGludXg2NC5oCisjICAgIGdjYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAorCitNVUxUSUxJQl9PUFRJT05fV0hJVEVMSVNUID8/PSAiLW0zMiAtbTY0IC1teDMyIC1tYWJpPW4zMiAtbWFiaT0zMiAtbWFiaT02NCIgCisKK3B5dGhvbiBnY2NfbXVsdGlsaWJfc2V0dXAoKSB7CisgICAgaW1wb3J0IHJlCisgICAgaW1wb3J0IHNodXRpbAorICAgIGltcG9ydCBnbG9iCisKKyAgICBzcmNkaXIgPSBkLmdldFZhcignUycsIFRydWUpCisgICAgYnVpbGRkaXIgPSBkLmdldFZhcignQicsIFRydWUpCisgICAgc3JjX2NvbmZfZGlyID0gJyVzL2djYy9jb25maWcnICUgc3JjZGlyCisgICAgYnVpbGRfY29uZl9kaXIgPSAnJXMvZ2NjL2NvbmZpZycgJSBidWlsZGRpcgorCisgICAgYmIudXRpbHMucmVtb3ZlKGJ1aWxkX2NvbmZfZGlyLCBUcnVlKQorICAgIG1sX2dsb2JzID0gKCclcy8qL3QtbGludXg2NCcgJSBzcmNfY29uZl9kaXIsCisgICAgICAgICAgICAgICAgJyVzLyovbGludXg2NC5oJyAlIHNyY19jb25mX2RpciwKKyAgICAgICAgICAgICAgICAnJXMvKi9saW51eC5oJyAlIHNyY19jb25mX2RpciwKKyAgICAgICAgICAgICAgICAnJXMvbGludXguaCcgJSBzcmNfY29uZl9kaXIpCisKKyAgICAjIGNvcHkgdGhlIHRhcmdldCBtdWx0aWxpYiBjb25maWcgZmlsZXMgdG8gJHtCfQorICAgIGZvciBtbF9nbG9iIGluIG1sX2dsb2JzOgorICAgICAgICBmb3IgZm4gaW4gZ2xvYi5nbG9iKG1sX2dsb2IpOgorICAgICAgICAgICAgcmVsX3BhdGggPSBvcy5wYXRoLnJlbHBhdGgoZm4sIHNyY19jb25mX2RpcikKKyAgICAgICAgICAgIHBhcmVudF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUocmVsX3BhdGgpCisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoJyVzLyVzJyAlIChidWlsZF9jb25mX2RpciwgcGFyZW50X2RpcikpCisgICAgICAgICAgICBiYi51dGlscy5jb3B5ZmlsZShmbiwgJyVzLyVzJyAlIChidWlsZF9jb25mX2RpciwgcmVsX3BhdGgpKQorCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIG11bHRpbGlicyA9IChkLmdldFZhcignTVVMVElMSUJfVkFSSUFOVFMnLCBUcnVlKSBvciAnJykuc3BsaXQoKQorICAgIGlmIG5vdCBtdWx0aWxpYnMgYW5kIHBuICE9ICJuYXRpdmVzZGstZ2NjIjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBtbHByZWZpeCA9IGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpCisKKyAgICBpZiAoJyVzZ2NjJyAlIG1scHJlZml4KSAhPSBwbiBhbmQgKG5vdCBwbi5zdGFydHN3aXRoKCdnY2MtY3Jvc3MtY2FuYWRpYW4nKSkgYW5kIHBuICE9ICJuYXRpdmVzZGstZ2NjIjoKKyAgICAgICAgcmV0dXJuCisKKworICAgIGRlZiB3cml0ZV9jb25maWcocm9vdCwgZmlsZXMsIG9wdGlvbnMsIGRpcm5hbWVzLCBvc2Rpcm5hbWVzKToKKyAgICAgICAgZm9yIG1sX2NvbmZfZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIHdpdGggb3Blbihyb290ICsgJy8nICsgbWxfY29uZl9maWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgZmlsZWxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgICMgcmVjcmVhdGUgbXVsdGlsaWIgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICBzdWJzdHMgPSBbCisgICAgICAgICAgICAgICAgICAgIChyJ14oXHMqKE1VTFRJTElCX09QVElPTlNccyo9KS4qKSQnLCByJ1wyICVzJyAlICcvJy5qb2luKG9wdGlvbnMpKSwKKyAgICAgICAgICAgICAgICAgICAgKHInXihccypNVUxUSUxJQl9PUFRJT05TXHMqXCs9LiopJCcsICcnKSwKKyAgICAgICAgICAgICAgICAgICAgKHInXihccyooTVVMVElMSUJfRElSTkFNRVNccyo9KS4qKSQnLCByJ1wyICVzJyAlICcgJy5qb2luKGRpcm5hbWVzKSksCisgICAgICAgICAgICAgICAgICAgIChyJ14oXHMqTVVMVElMSUJfRElSTkFNRVNccypcKz0uKikkJywgJycpLAorICAgICAgICAgICAgICAgICAgICAocideKFxzKihNVUxUSUxJQl9PU0RJUk5BTUVTXHMqPSkuKikkJywgcidcMiAlcycgJSAnICcuam9pbihvc2Rpcm5hbWVzKSksCisgICAgICAgICAgICAgICAgICAgIChyJ14oXHMqTVVMVElMSUJfT1NESVJOQU1FU1xzKlwrPS4qKSQnLCAnJyksCisgICAgICAgICAgICAgICAgXQorCisgICAgICAgICAgICAgICAgZm9yIChpLCBsaW5lKSBpbiBlbnVtZXJhdGUoZmlsZWxpbmVzKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIHN1YnN0IGluIHN1YnN0czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSByZS5zdWIoc3Vic3RbMF0sIHN1YnN0WzFdLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICBmaWxlbGluZXNbaV0gPSBsaW5lCisKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4ocm9vdCArICcvJyArIG1sX2NvbmZfZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCcnLmpvaW4oZmlsZWxpbmVzKSkKKworICAgIGRlZiB3cml0ZV9oZWFkZXJzKHJvb3QsIGZpbGVzLCBsaWJkaXIzMiwgbGliZGlyNjQsIGxpYmRpcngzMiwgbGliZGlybjMyKToKKyAgICAgICAgZGVmIHdyYXBfbGliZGlyKGxpYmRpcik6CisgICAgICAgICAgICBpZiBsaWJkaXIuZmluZCgnU1lTVEVNTElCU19ESVInKSAhPSAtMToKKyAgICAgICAgICAgICAgICByZXR1cm4gJyIlciInCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnIi8lcy8iJyAlIGxpYmRpcgorCisgICAgICAgIGZvciBtbF9jb25mX2ZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICBmbiA9IHJvb3QgKyAnLycgKyBtbF9jb25mX2ZpbGUKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmbik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHdpdGggb3BlbihmbiwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIGZpbGVsaW5lcyA9IGYucmVhZGxpbmVzKCkKKworICAgICAgICAgICAgICAgICMgcmVwbGFjZSBsaW5lcyBsaWtlCisgICAgICAgICAgICAgICAgIyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgICAgICAgICAgICAgICAgIyBieQorICAgICAgICAgICAgICAgICMgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliLyIgImxkLWxpbnV4LnNvLjIiCisgICAgICAgICAgICAgICAgIyB0aGlzIGlzIG5lZWRlZCB0byBwdXQgdGhlIGNvcnJlY3QgZHluYW1pYyBsb2FkZXIgcGF0aCBpbiB0aGUgZ2VuZXJhdGVkIGJpbmFyaWVzCisgICAgICAgICAgICAgICAgc3Vic3RzID0gWworICAgICAgICAgICAgICAgICAgICAocideKCNkZWZpbmVccypHTElCQ19EWU5BTUlDX0xJTktFUjMyXHMqKShcUyspKFxzKlwiLipcIikkJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHInXDEnICsgd3JhcF9saWJkaXIobGliZGlyMzIpICsgcidcMycpLAorICAgICAgICAgICAgICAgICAgICAocideKCNkZWZpbmVccypHTElCQ19EWU5BTUlDX0xJTktFUjY0XHMqKShcUyspKFxzKlwiXFMrXCIpJCcsCisgICAgICAgICAgICAgICAgICAgICAgICByJ1wxJyArIHdyYXBfbGliZGlyKGxpYmRpcjY0KSArIHInXDMnKSwKKyAgICAgICAgICAgICAgICAgICAgKHInXigjZGVmaW5lXHMqR0xJQkNfRFlOQU1JQ19MSU5LRVI2NFxzKlwiXFMrXCJccyopKFxTKykoXHMqXCJcUytcIlxzKikoXFMrKShccypcIi4qXCIpJCcsCisgICAgICAgICAgICAgICAgICAgICAgICByJ1wxJyArIHdyYXBfbGliZGlyKGxpYmRpcjY0KSArIHInXDMnICsgd3JhcF9saWJkaXIobGliZGlyNjQpICsgcidcNScpLAorICAgICAgICAgICAgICAgICAgICAocideKCNkZWZpbmVccypHTElCQ19EWU5BTUlDX0xJTktFUlgzMlxzKikoXFMrKShccypcIi4qXCIpJCcsCisgICAgICAgICAgICAgICAgICAgICAgICByJ1wxJyArIHdyYXBfbGliZGlyKGxpYmRpcngzMikgKyByJ1wzJyksCisgICAgICAgICAgICAgICAgICAgIChyJ14oI2RlZmluZVxzKkdMSUJDX0RZTkFNSUNfTElOS0VSTjMyXHMqKShcUyspKFxzKlwiLipcIikkJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHInXDEnICsgd3JhcF9saWJkaXIobGliZGlybjMyKSArIHInXDMnKSwKKyAgICAgICAgICAgICAgICAgICAgKHInXigjZGVmaW5lXHMqVUNMSUJDX0RZTkFNSUNfTElOS0VSMzJccyopKFxTKykoXHMqXCIuKlwiKSQnLAorICAgICAgICAgICAgICAgICAgICAgICAgcidcMScgKyB3cmFwX2xpYmRpcihsaWJkaXIzMikgKyByJ1wzJyksCisgICAgICAgICAgICAgICAgICAgIChyJ14oI2RlZmluZVxzKlVDTElCQ19EWU5BTUlDX0xJTktFUjY0XHMqKShcUyspKFxzKlwiLipcIikkJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHInXDEnICsgd3JhcF9saWJkaXIobGliZGlyNjQpICsgcidcMycpLAorICAgICAgICAgICAgICAgICAgICAocideKCNkZWZpbmVccypVQ0xJQkNfRFlOQU1JQ19MSU5LRVJOMzJccyopKFxTKykoXHMqXCIuKlwiKSQnLAorICAgICAgICAgICAgICAgICAgICAgICAgcidcMScgKyB3cmFwX2xpYmRpcihsaWJkaXJuMzIpICsgcidcMycpLAorICAgICAgICAgICAgICAgICAgICAocideKCNkZWZpbmVccypVQ0xJQkNfRFlOQU1JQ19MSU5LRVJcYlxzKikoXFMrKShccypcIi4qXCIpJCcsCisgICAgICAgICAgICAgICAgICAgICAgICByJ1wxJyArIHdyYXBfbGliZGlyKGxpYmRpcjMyKSArIHInXDMnKSwKKyAgICAgICAgICAgICAgICBdCisKKyAgICAgICAgICAgICAgICBmb3IgKGksIGxpbmUpIGluIGVudW1lcmF0ZShmaWxlbGluZXMpOgorICAgICAgICAgICAgICAgICAgICBmb3Igc3Vic3QgaW4gc3Vic3RzOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IHJlLnN1YihzdWJzdFswXSwgc3Vic3RbMV0sIGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGZpbGVsaW5lc1tpXSA9IGxpbmUKKworICAgICAgICAgICAgICAgIHdpdGggb3Blbihyb290ICsgJy8nICsgbWxfY29uZl9maWxlLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJycuam9pbihmaWxlbGluZXMpKQorCisKKyAgICBnY2NfdGFyZ2V0X2NvbmZpZ19maWxlcyA9IHsKKyAgICAgICAgJ3g4Nl82NCcgICAgOiBbJ2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQnXSwKKyAgICAgICAgJ2k1ODYnICAgICAgOiBbJ2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQnXSwKKyAgICAgICAgJ2k2ODYnICAgICAgOiBbJ2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQnXSwKKyAgICAgICAgJ21pcHMnICAgICAgOiBbJ2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQnXSwKKyAgICAgICAgJ21pcHM2NCcgICAgOiBbJ2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQnXSwKKyAgICAgICAgJ3Bvd2VycGMnICAgOiBbJ2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NCddLAorICAgICAgICAncG93ZXJwYzY0JyA6IFsnZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0J10sCisgICAgfQorCisgICAgZ2NjX2hlYWRlcl9jb25maWdfZmlsZXMgPSB7CisgICAgICAgICd4ODZfNjQnICAgIDogWydnY2MvY29uZmlnL2kzODYvbGludXg2NC5oJ10sCisgICAgICAgICdpNTg2JyAgICAgIDogWydnY2MvY29uZmlnL2kzODYvbGludXg2NC5oJ10sCisgICAgICAgICdpNjg2JyAgICAgIDogWydnY2MvY29uZmlnL2kzODYvbGludXg2NC5oJ10sCisgICAgICAgICdtaXBzJyAgICAgIDogWydnY2MvY29uZmlnL21pcHMvbGludXguaCcsICdnY2MvY29uZmlnL21pcHMvbGludXg2NC5oJ10sCisgICAgICAgICdtaXBzNjQnICAgIDogWydnY2MvY29uZmlnL21pcHMvbGludXguaCcsICdnY2MvY29uZmlnL21pcHMvbGludXg2NC5oJ10sCisgICAgICAgICdwb3dlcnBjJyAgIDogWydnY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgnXSwKKyAgICAgICAgJ3Bvd2VycGM2NCcgOiBbJ2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaCddLAorICAgIH0KKworICAgIGxpYmRpcjMyID0gJ1NZU1RFTUxJQlNfRElSJworICAgIGxpYmRpcjY0ID0gJ1NZU1RFTUxJQlNfRElSJworICAgIGxpYmRpcngzMiA9ICdTWVNURU1MSUJTX0RJUicKKyAgICBsaWJkaXJuMzIgPSAnU1lTVEVNTElCU19ESVInCisKKworICAgIHRhcmdldF9hcmNoID0gKGQuZ2V0VmFyKCdUQVJHRVRfQVJDSF9NVUxUSUxJQl9PUklHSU5BTCcsIFRydWUpIGlmIG1scHJlZml4CisgICAgICAgICAgICAgICAgICAgIGVsc2UgZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSkpCisgICAgaWYgcG4gPT0gIm5hdGl2ZXNkay1nY2MiOgorICAgICAgICBoZWFkZXJfY29uZmlnX2ZpbGVzID0gZ2NjX2hlYWRlcl9jb25maWdfZmlsZXNbZC5nZXRWYXIoIlNES19BUkNIIiwgVHJ1ZSldCisgICAgICAgIHdyaXRlX2hlYWRlcnMoYnVpbGRkaXIsIGhlYWRlcl9jb25maWdfZmlsZXMsIGxpYmRpcjMyLCBsaWJkaXI2NCwgbGliZGlyeDMyLCBsaWJkaXJuMzIpCisgICAgICAgIHJldHVybgorCisgICAgaWYgdGFyZ2V0X2FyY2ggbm90IGluIGdjY190YXJnZXRfY29uZmlnX2ZpbGVzOgorICAgICAgICBiYi53YXJuKCdnY2MgbXVsdGlsaWIgc2V0dXAgaXMgbm90IHN1cHBvcnRlZCBmb3IgVEFSR0VUX0FSQ0g9JyArIHRhcmdldF9hcmNoKQorICAgICAgICByZXR1cm4KKworICAgIHRhcmdldF9jb25maWdfZmlsZXMgPSBnY2NfdGFyZ2V0X2NvbmZpZ19maWxlc1t0YXJnZXRfYXJjaF0KKyAgICBoZWFkZXJfY29uZmlnX2ZpbGVzID0gZ2NjX2hlYWRlcl9jb25maWdfZmlsZXNbdGFyZ2V0X2FyY2hdCisKKyAgICBtbF9saXN0ID0gWydERUZBVUxUVFVORV9NVUxUSUxJQl9PUklHSU5BTCcgaWYgbWxwcmVmaXggZWxzZSAnREVGQVVMVFRVTkUnXQorICAgIG1sdHVuZXMgPSBbKCdERUZBVUxUVFVORV92aXJ0Y2xhc3MtbXVsdGlsaWItJXMnICUgbWwpIGZvciBtbCBpbiBtdWx0aWxpYnNdCisgICAgaWYgbWxwcmVmaXg6CisgICAgICAgIG1saW5kZXggPSAwCisgICAgICAgIGZvciBtbCBpbiBtdWx0aWxpYnM6CisgICAgICAgICAgICBpZiBtbHByZWZpeCA9PSBtbCArICctJzoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgbWxpbmRleCArPSAxCisKKyAgICAgICAgbWxfbGlzdC5leHRlbmQobWx0dW5lc1s6bWxpbmRleF0gKyBbJ0RFRkFVTFRUVU5FJ10gKyBtbHR1bmVzWyhtbGluZGV4ICsgMSk6XSkKKyAgICBlbHNlOgorICAgICAgICBtbF9saXN0LmV4dGVuZChtbHR1bmVzKQorCisgICAgb3B0aW9ucyA9IFtdCisgICAgZGlybmFtZXMgPSBbXQorICAgIG9zZGlybmFtZXMgPSBbXQorICAgIG9wdHNldHMgPSBbXQorCisgICAgZm9yIG1sIGluIG1sX2xpc3Q6CisgICAgICAgIHR1bmUgPSBkLmdldFZhcihtbCwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHR1bmU6CisgICAgICAgICAgICBiYi53YXJuKCIlcyBkb2Vzbid0IGhhdmUgYSBjb3JyZXNwb25kaW5nIHR1bmUuIFNraXBwaW5nLi4uIiAlIG1sKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdHVuZV9wYXJhbWV0ZXJzID0gZ2V0X3R1bmVfcGFyYW1ldGVycyh0dW5lLCBkKQorCisgICAgICAgIHR1bmVfYmFzZWxpYiA9IHR1bmVfcGFyYW1ldGVyc1snYmFzZWxpYiddCisgICAgICAgIGlmIG5vdCB0dW5lX2Jhc2VsaWI6CisgICAgICAgICAgICBiYi53YXJuKCJUdW5lICVzIGRvZXNuJ3QgaGF2ZSBhIGJhc2VsaWIgc2V0LiBTa2lwcGluZy4uLiIgJSB0dW5lKQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBpZiB0dW5lX2Jhc2VsaWIgPT0gJ2xpYjY0JzoKKyAgICAgICAgICAgIGxpYmRpcjY0ID0gdHVuZV9iYXNlbGliCisgICAgICAgIGVsaWYgdHVuZV9iYXNlbGliID09ICdsaWJ4MzInOgorICAgICAgICAgICAgbGliZGlyeDMyID0gdHVuZV9iYXNlbGliCisgICAgICAgIGVsaWYgdHVuZV9iYXNlbGliID09ICdsaWIzMic6CisgICAgICAgICAgICBsaWJkaXJuMzIgPSB0dW5lX2Jhc2VsaWIKKyAgICAgICAgZWxpZiB0dW5lX2Jhc2VsaWIgPT0gJ2xpYic6CisgICAgICAgICAgICBsaWJkaXIzMiA9IHR1bmVfYmFzZWxpYgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIuZXJyb3IoJ1Vua25vd24gbGliZGlyICglcykgb2YgdGhlIHR1bmUgOiAlcycgJSAodHVuZV9iYXNlbGliLCB0dW5lKSkKKworICAgICAgICAjIHRha2Ugb3V0ICctJyBtY3B1PSdzIGFuZCBtYXJjaD0ncyBmcm9tIHBhcmFtZXRlcnMKKyAgICAgICAgb3B0cyA9IFtdCisgICAgICAgIHdoaXRlbGlzdCA9IChkLmdldFZhcigiTVVMVElMSUJfT1BUSU9OX1dISVRFTElTVCIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIGZvciBpIGluIHR1bmVfcGFyYW1ldGVyc1snY2NhcmdzJ10uc3BsaXQoKToKKyAgICAgICAgICAgIGlmIGkgaW4gd2hpdGVsaXN0OgorICAgICAgICAgICAgICAgICMgTmVlZCB0byBzdHJpcCAnLScgZnJvbSBvcHRpb24KKyAgICAgICAgICAgICAgICBvcHRzLmFwcGVuZChpWzE6XSkKKyAgICAgICAgb3B0aW9ucy5hcHBlbmQoIiAiLmpvaW4ob3B0cykpCisKKyAgICAgICAgaWYgdHVuZV9iYXNlbGliID09ICdsaWInOgorICAgICAgICAgICAgZGlybmFtZXMuYXBwZW5kKCczMicpICAjIC9saWIgPT4gMzJiaXQgbGliCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkaXJuYW1lcy5hcHBlbmQodHVuZV9iYXNlbGliLnJlcGxhY2UoJ2xpYicsICcnKSkKKyAgICAgICAgb3NkaXJuYW1lcy5hcHBlbmQoJy4uLycgKyB0dW5lX2Jhc2VsaWIpCisKKyAgICB3cml0ZV9jb25maWcoYnVpbGRkaXIsIHRhcmdldF9jb25maWdfZmlsZXMsIG9wdGlvbnMsIGRpcm5hbWVzLCBvc2Rpcm5hbWVzKQorICAgIHdyaXRlX2hlYWRlcnMoYnVpbGRkaXIsIGhlYWRlcl9jb25maWdfZmlsZXMsIGxpYmRpcjMyLCBsaWJkaXI2NCwgbGliZGlyeDMyLCBsaWJkaXJuMzIpCit9CisKK2djY19tdWx0aWxpYl9zZXR1cFtjbGVhbmRpcnNdID0gIiR7Qn0vZ2NjL2NvbmZpZyIKKworRVhUUkFDT05GRlVOQ1MgKz0gImdjY19tdWx0aWxpYl9zZXR1cCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NzU3ZTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWUuaW5jCkBAIC0wLDAgKzEsMTk1IEBACityZXF1aXJlIGdjYy1jb25maWd1cmUtY29tbW9uLmluYworCitDWFhGTEFHUyA6PSAiJHtAb2VfZmlsdGVyX291dCgnLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuJywgJyR7Q1hYRkxBR1N9JywgZCl9IgorCitFWFRSQV9PRUNPTkZfUEFUSFMgPSAiXAorICAgIC0td2l0aC1neHgtaW5jbHVkZS1kaXI9JHtpbmNsdWRlZGlyfS9jKysvJHtCSU5WfSBcCisgICAgLS13aXRoLXN5c3Jvb3Q9L25vdC9leGlzdCBcCisgICAgLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKKyIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9saW51eHN0ZGJhc2UgPSAiIC0tZW5hYmxlLWNsb2NhbGU9Z251IgorCitSVU5USU1FVEFSR0VUID0gImxpYnNzcCBsaWJzdGRjKystdjMgbGliZ29tcCBsaWJhdG9taWMiCisjICA/CisjIGxpYmliZXJ0eQorIyBsaWJtdWRmbGFwCisjIGxpYmdmb3J0cmFuIG5lZWRzIHNlcGFyYXRlIHJlY2lwZSBkdWUgdG8gbGlicXVhZG1hdGggZGVwZW5kZW5jeQorCitkb19jb25maWd1cmUgKCkgeworCWV4cG9ydCBDWFg9IiR7Q1hYfSAtbm9zdGRpbmMrKyAtbm9zdGRsaWIrKyIKKwltdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisJdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisJaGFyZGxpbmtkaXIgJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9L2djYy1idWlsZC1pbnRlcm5hbC0kbXRhcmdldCAke0J9CisJZm9yIGQgaW4gbGliZ2NjICR7UlVOVElNRVRBUkdFVH07IGRvCisJCWVjaG8gIkNvbmZpZ3VyaW5nICRkIgorCQlybSAtcmYgJHtCfS8kdGFyZ2V0LyRkLworCQlta2RpciAtcCAke0J9LyR0YXJnZXQvJGQvCisJCWNkICR7Qn0vJHRhcmdldC8kZC8KKwkJY2htb2QgYSt4ICR7U30vJGQvY29uZmlndXJlCisJCSR7U30vJGQvY29uZmlndXJlICR7Q09ORklHVVJFT1BUU30gJHtFWFRSQV9PRUNPTkZ9CisJZG9uZQorfQorCitkb19jb21waWxlICgpIHsKKwl0YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKwlmb3IgZCBpbiBsaWJnY2MgJHtSVU5USU1FVEFSR0VUfTsgZG8KKwkJY2QgJHtCfS8kdGFyZ2V0LyRkLworCQlvZV9ydW5tYWtlIE1VTFRJQlVJTERUT1A9JHtCfS8kdGFyZ2V0LyRkLworCWRvbmUKK30KKworZG9faW5zdGFsbCAoKSB7CisJdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisJZm9yIGQgaW4gJHtSVU5USU1FVEFSR0VUfTsgZG8KKwkJY2QgJHtCfS8kdGFyZ2V0LyRkLworCQlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIE1VTFRJQlVJTERUT1A9JHtCfS8kdGFyZ2V0LyRkLyBpbnN0YWxsCisJZG9uZQorCXJtIC1yZiAke0R9JHtpbmZvZGlyfS9saWJnb21wLmluZm8gJHtEfSR7aW5mb2Rpcn0vZGlyCisJcm0gLXJmICR7RH0ke2luZm9kaXJ9L2xpYnF1YWRtYXRoLmluZm8gJHtEfSR7aW5mb2Rpcn0vZGlyCisJaWYgWyAtZCAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vZmluY2x1ZGUgXTsgdGhlbgorCQlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAtcCAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vZmluY2x1ZGUKKwlmaQorCWlmIFsgLWQgJHtEfSR7aW5mb2Rpcn0gXTsgdGhlbgorCQlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAtcCAke0R9JHtpbmZvZGlyfQorCWZpCisJaWYgWyAiJHtUQVJHRVRfT1N9IiA9ICJsaW51eC1nbnVzcGUiIF07IHRoZW4KKwkJbG4gLXMgJHtUQVJHRVRfU1lTfSAke0R9JHtpbmNsdWRlZGlyfS9jKysvJHtCSU5WfS8ke1RBUkdFVF9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tbGludXgKKwlmaQorCWNob3duIC1SIHJvb3Q6cm9vdCAke0R9Cit9CisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitERVBFTkRTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYyB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nKysgbGliZ2NjIgorUFJPVklERVMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Y29tcGlsZXJsaWJzIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKKworUEFDS0FHRVMgPSAiXAorICAgICR7UE59LWRiZyBcCisgICAgbGlic3RkYysrIFwKKyAgICBsaWJzdGRjKystcHJlY29tcGlsZS1kZXYgXAorICAgIGxpYnN0ZGMrKy1kZXYgXAorICAgIGxpYnN0ZGMrKy1zdGF0aWNkZXYgXAorICAgIGxpYmcyYyBcCisgICAgbGliZzJjLWRldiBcCisgICAgbGlic3NwIFwKKyAgICBsaWJzc3AtZGV2IFwKKyAgICBsaWJzc3Atc3RhdGljZGV2IFwKKyAgICBsaWJtdWRmbGFwIFwKKyAgICBsaWJtdWRmbGFwLWRldiBcCisgICAgbGlibXVkZmxhcC1zdGF0aWNkZXYgXAorICAgIGxpYnF1YWRtYXRoIFwKKyAgICBsaWJxdWFkbWF0aC1kZXYgXAorICAgIGxpYnF1YWRtYXRoLXN0YXRpY2RldiBcCisgICAgbGliZ29tcCBcCisgICAgbGliZ29tcC1kZXYgXAorICAgIGxpYmdvbXAtc3RhdGljZGV2IFwKKyAgICBsaWJhdG9taWMgXAorICAgIGxpYmF0b21pYy1kZXYgXAorICAgIGxpYmF0b21pYy1zdGF0aWNkZXYgXAorIgorCisjIE1vc3QgbGlicmFyaWVzIGFyZSBsaWNlbnNlZCB3aXRoIHRoZSBleGNlcHRpb24sIGJ1dAorIyBvbmUgbGlicmFyeSBpcyByZWFsbHkgR1BMdjMuCisjCitMSUNFTlNFXyR7UE59LWRiZyA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiAmIEdQTHYzIgorTElDRU5TRV9saWJzdGRjKysgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYnN0ZGMrKy1wcmVjb21waWxlLWRldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGlic3RkYysrLWRldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGlic3RkYysrLXN0YXRpY2RldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGliZzJjID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJnMmMtZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJzc3AgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYnNzcC1kZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYnNzcC1zdGF0aWNkZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYmdmb3J0cmFuID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJnZm9ydHJhbi1kZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYmdmb3J0cmFuLXN0YXRpY2RldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGlibXVkZmxhcCA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGlibXVkZmxhcC1kZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYm11ZGZsYXAtc3RhdGljZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJxdWFkbWF0aCA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGlicXVhZG1hdGgtZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJxdWFkbWF0aC1zdGF0aWNkZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYmF0b21pYyA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGliYXRvbWljLWRldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGliYXRvbWljLXN0YXRpY2RldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKKworTElDRU5TRV9saWJnb21wID0gIkdQTHYzIgorTElDRU5TRV9saWJnb21wLWRldiA9ICJHUEx2MyIKK0xJQ0VOU0VfbGliZ29tcC1zdGF0aWNkZXYgPSAiR1BMdjMiCisKKyMgVGhlIGJhc2UgcGFja2FnZSBkb2Vzbid0IGV4aXN0LCBzbyB3ZSBjbGVhciB0aGUgcmVjb21tZW5kcy4KK1JSRUNPTU1FTkRTXyR7UE59LWRiZyA9ICIiCisKKyMgaW5jbHVkZSBweXRob24gZGVidWdnaW5nIHNjcmlwdHMKK0ZJTEVTXyR7UE59LWRiZyArPSAiXAorICAgICR7bGliZGlyfS9saWJzdGRjKysuc28uKi1nZGIucHkgXAorICAgICR7ZGF0YWRpcn0vZ2NjLSR7QklOVn0vcHl0aG9uL2xpYnN0ZGN4eCBcCisiCisKK0ZJTEVTX2xpYmcyYyA9ICIke3RhcmdldF9saWJkaXJ9L2xpYmcyYy5zby4qIgorRklMRVNfbGliZzJjLWRldiA9ICJcCisgICAgJHtsaWJkaXJ9L2xpYmcyYy5zbyBcCisgICAgJHtsaWJkaXJ9L2xpYmcyYy5hIFwKKyAgICAke2xpYmRpcn0vbGliZnJ0YmVnaW4uYSBcCisiCisKK0ZJTEVTX2xpYnN0ZGMrKyA9ICIke2xpYmRpcn0vbGlic3RkYysrLnNvLioiCitGSUxFU19saWJzdGRjKystZGV2ID0gIlwKKyAgICAke2luY2x1ZGVkaXJ9L2MrKy8gXAorICAgICR7bGliZGlyfS9saWJzdGRjKysuc28gXAorICAgICR7bGliZGlyfS9saWJzdGRjKysubGEgXAorICAgICR7bGliZGlyfS9saWJzdXBjKysubGEgXAorIgorRklMRVNfbGlic3RkYysrLXN0YXRpY2RldiA9ICJcCisgICAgJHtsaWJkaXJ9L2xpYnN0ZGMrKy5hIFwKKyAgICAke2xpYmRpcn0vbGlic3VwYysrLmEgXAorIgorCitGSUxFU19saWJzdGRjKystcHJlY29tcGlsZS1kZXYgPSAiJHtpbmNsdWRlZGlyfS9jKysvJHtUQVJHRVRfU1lTfS9iaXRzLyouZ2NoIgorCitGSUxFU19saWJzc3AgPSAiJHtsaWJkaXJ9L2xpYnNzcC5zby4qIgorRklMRVNfbGlic3NwLWRldiA9ICJcCisgICAgJHtsaWJkaXJ9L2xpYnNzcCouc28gXAorICAgICR7bGliZGlyfS9saWJzc3AqX25vbnNoYXJlZC5hIFwKKyAgICAke2xpYmRpcn0vbGlic3NwKi5sYSBcCisgICAgJHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS9zc3AgXAorIgorRklMRVNfbGlic3NwLXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGlic3NwKi5hIgorCitGSUxFU19saWJxdWFkbWF0aCA9ICIke2xpYmRpcn0vbGlicXVhZG1hdGgqLnNvLioiCitGSUxFU19saWJxdWFkbWF0aC1kZXYgPSAiXAorICAgICR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvcXVhZG1hdGgqIFwKKyAgICAke2xpYmRpcn0vbGlicXVhZG1hdGgqLnNvIFwKKyAgICAke2xpYmRpcn0vbGlicXVhZG1hdGgubGEgXAorIgorRklMRVNfbGlicXVhZG1hdGgtc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWJxdWFkbWF0aC5hIgorCitGSUxFU19saWJtdWRmbGFwID0gIiR7bGliZGlyfS9saWJtdWRmbGFwKi5zby4qIgorRklMRVNfbGlibXVkZmxhcC1kZXYgPSAiXAorICAgICR7bGliZGlyfS9saWJtdWRmbGFwKi5zbyBcCisgICAgJHtsaWJkaXJ9L2xpYm11ZGZsYXAubGEgXAorIgorRklMRVNfbGlibXVkZmxhcC1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYm11ZGZsYXAuYSIKKworRklMRVNfbGliZ29tcCA9ICIke2xpYmRpcn0vbGliZ29tcCoke1NPTElCU30iCitGSUxFU19saWJnb21wLWRldiA9ICJcCisgICAgJHtsaWJkaXJ9L2xpYmdvbXAqJHtTT0xJQlNERVZ9IFwKKyAgICAke2xpYmRpcn0vbGliZ29tcCoubGEgXAorICAgICR7bGliZGlyfS9saWJnb21wLnNwZWMgXAorICAgICR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvb21wLmggXAorIgorRklMRVNfbGliZ29tcC1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYmdvbXAqLmEiCisKK0ZJTEVTX2xpYmF0b21pYyA9ICIke2xpYmRpcn0vbGliYXRvbWljLnNvLioiCitGSUxFU19saWJhdG9taWMtZGV2ID0gIlwKKyAgICAke2xpYmRpcn0vbGliYXRvbWljLnNvIFwKKyAgICAke2xpYmRpcn0vbGliYXRvbWljLmxhIFwKKyIKK0ZJTEVTX2xpYmF0b21pYy1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYmF0b21pYy5hIgorCitkb19wYWNrYWdlX3dyaXRlX2lwa1tkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCitkb19wYWNrYWdlX3dyaXRlX2RlYltkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCitkb19wYWNrYWdlX3dyaXRlX3JwbVtkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWVfNC44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTdkNjkxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzQuOC5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtcnVudGltZS5pbmMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzQuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV80LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk3ZDY5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV80LjkuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgZ2NjLXJ1bnRpbWUuaW5jCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV81LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWVfNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMzFlNzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWVfNS4yLmJiCkBAIC0wLDAgKzEsNyBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1ydW50aW1lLmluYworCitGSUxFU19saWJnb21wLWRldiArPSAiXAorICAgICR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvb3BlbmFjYy5oIFwKKyIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVycy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk4N2NjYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVycy5pbmMKQEAgLTAsMCArMSwxMTkgQEAKK3JlcXVpcmUgZ2NjLWNvbmZpZ3VyZS1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTkNTQSB8IE1JVCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJcCisgICAgZmlsZTovL2xpYnNhbml0aXplci9MSUNFTlNFLlRYVDttZDU9MDI0OWMzNzc0ODkzNmZhZjViMWVmZDU3ODk1ODc5MDkgXAorIgorCitFWFRSQV9PRUNPTkZfUEFUSFMgPSAiXAorICAgIC0td2l0aC1zeXNyb290PS9ub3QvZXhpc3QgXAorICAgIC0td2l0aC1idWlsZC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcCisiCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisgICAgbXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorICAgIHRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorICAgIGlmIFsgLWQgJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9L2djYy1idWlsZC1pbnRlcm5hbC0kbXRhcmdldCBdOyB0aGVuCisgICAgICAgIGhhcmRsaW5rZGlyICR7U1RBR0lOR19JTkNESVJfTkFUSVZFfS9nY2MtYnVpbGQtaW50ZXJuYWwtJG10YXJnZXQgJHtCfQorICAgIGZpCisKKyAgICBlY2hvICJDb25maWd1cmluZyBsaWJzYW5pdGl6ZXIiCisgICAgcm0gLXJmICR7Qn0vJHRhcmdldC9saWJzYW5pdGl6ZXIvCisgICAgbWtkaXIgLXAgJHtCfS8kdGFyZ2V0L2xpYnNhbml0aXplci8KKyAgICAjIFRoaXMgaXMga2luZCBvZiBncm9zcywgYnV0IGl0J3MgYW4gZWFzeSB3YXkgdG8gbWFrZSBjb25maWd1cmUgaGFwcHkKKyAgICAjIHdpdGhvdXQgaGFja2luZyBpdCB1cCB0byB1c2UgdGhlIHN5c3RlbSBzdGRjKysgaW5zdGVhZCBvZiB0aGUgb25lIGl0CisgICAgIyBleHBlY3RzIHRvIGJlIG5ld2x5IGJ1aWx0LgorICAgIHJtIC1yZiAke0J9LyR0YXJnZXQvbGlic3RkYysrLXYzLworICAgIG1rZGlyIC1wICR7Qn0vJHRhcmdldC9saWJzdGRjKystdjMvc3JjLworICAgIGxuIC1zICR7U1RBR0lOR19MSUJESVJ9L2xpYnN0ZGMrKy5sYSAke0J9LyR0YXJnZXQvbGlic3RkYysrLXYzL3NyYy8KKyAgICBsbiAtcyAke1NUQUdJTkdfTElCRElSfS9saWJzdGRjKysuc28gJHtCfS8kdGFyZ2V0L2xpYnN0ZGMrKy12My9zcmMvCisgICAgY2QgJHtCfS8kdGFyZ2V0L2xpYnNhbml0aXplci8KKyAgICBjaG1vZCBhK3ggJHtTfS9saWJzYW5pdGl6ZXIvY29uZmlndXJlCisgICAgJHtTfS9saWJzYW5pdGl6ZXIvY29uZmlndXJlICR7Q09ORklHVVJFT1BUU30gJHtFWFRSQV9PRUNPTkZ9CisgICAgIyBFYXNpZXN0IHdheSB0byBzdG9wIGJhZCBSUEFUSHMgZ2V0dGluZyBpbnRvIHRoZSBsaWJyYXJ5IHNpbmNlIHdlIGhhdmUgYQorICAgICMgYnJva2VuIGxpYnRvb2wgaGVyZQorICAgIHNlZCAtaSAtZSAncy9oYXJkY29kZV9pbnRvX2xpYnM9eWVzL2hhcmRjb2RlX2ludG9fbGlicz1uby8nICR7Qn0vJHRhcmdldC9saWJzYW5pdGl6ZXIvbGlidG9vbAorfQorCitkb19jb21waWxlICgpIHsKKyAgICB0YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKyAgICBjZCAke0J9LyR0YXJnZXQvbGlic2FuaXRpemVyLworICAgIG9lX3J1bm1ha2UgTVVMVElCVUlMRFRPUD0ke0J9LyR0YXJnZXQvbGlic2FuaXRpemVyLworfQorCitkb19pbnN0YWxsICgpIHsKKyAgICB0YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKyAgICBjZCAke0J9LyR0YXJnZXQvbGlic2FuaXRpemVyLworICAgIG9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgTVVMVElCVUlMRFRPUD0ke0J9LyR0YXJnZXQvbGlic2FuaXRpemVyLyBpbnN0YWxsCisgICAgaWYgWyAtZCAke0R9JHtpbmZvZGlyfSBdOyB0aGVuCisgICAgICAgIHJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5IC1wICR7RH0ke2luZm9kaXJ9CisgICAgZmkKKyAgICBjaG93biAtUiByb290OnJvb3QgJHtEfQorfQorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKK0RFUEVORFMgPSAiZ2NjLXJ1bnRpbWUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgorCitQQUNLQUdFUyA9ICIke1BOfSIKK1BBQ0tBR0VTICs9ICJsaWJhc2FuIGxpYnVic2FuIGxpYmxzYW4gbGlidHNhbiIKK1BBQ0tBR0VTICs9ICJsaWJhc2FuLWRldiBsaWJ1YnNhbi1kZXYgbGlibHNhbi1kZXYgbGlidHNhbi1kZXYiCitQQUNLQUdFUyArPSAibGliYXNhbi1kYmcgbGlidWJzYW4tZGJnIGxpYmxzYW4tZGJnIGxpYnRzYW4tZGJnIgorUEFDS0FHRVMgKz0gImxpYmFzYW4tc3RhdGljZGV2IGxpYnVic2FuLXN0YXRpY2RldiBsaWJsc2FuLXN0YXRpY2RldiBsaWJ0c2FuLXN0YXRpY2RldiIKKworUkRFUEVORFNfbGliYXNhbiArPSAibGlic3RkYysrIgorUkRFUEVORFNfbGlidWJzYW4gKz0gImxpYnN0ZGMrKyIKK1JERVBFTkRTX2xpYmxzYW4gKz0gImxpYnN0ZGMrKyIKK1JERVBFTkRTX2xpYnRzYW4gKz0gImxpYnN0ZGMrKyIKK1JERVBFTkRTX2xpYmFzYW4tZGV2ICs9ICIke1BOfSIKK1JERVBFTkRTX2xpYnVic2FuLWRldiArPSAiJHtQTn0iCitSREVQRU5EU19saWJsc2FuLWRldiArPSAiJHtQTn0iCitSREVQRU5EU19saWJ0c2FuLWRldiArPSAiJHtQTn0iCitSUkVDT01NRU5EU18ke1BOfSArPSAibGliYXNhbiBsaWJ1YnNhbiIKK1JSRUNPTU1FTkRTXyR7UE59X2FwcGVuZF94ODYtNjQgPSAiIGxpYmxzYW4gbGlidHNhbiIKK1JSRUNPTU1FTkRTXyR7UE59X2FwcGVuZF94ODYgPSAiIGxpYmxzYW4iCisKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9JHtUQVJHRVRfUFJFRklYfWNvbXBpbGVybGliczpkb19wYWNrYWdlZGF0YSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9JHtUQVJHRVRfUFJFRklYfWNvbXBpbGVybGliczpkb19wYWNrYWdlZGF0YSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9JHtUQVJHRVRfUFJFRklYfWNvbXBpbGVybGliczpkb19wYWNrYWdlZGF0YSIKKworIyBNSVBTLCBhYXJjaDY0LCBhbmQgU1BBUkMgYXJlIGJyb2tlbi4KK0NPTVBBVElCTEVfSE9TVCA9ICcoeDg2XzY0fGkuODZ8cG93ZXJwY3xhcm0pLiotbGludXgnCisKK0ZJTEVTX2xpYmFzYW4gKz0gIiR7bGliZGlyfS9saWJhc2FuLnNvLioiCitGSUxFU19saWJhc2FuLWRiZyArPSAiJHtsaWJkaXJ9Ly5kZWJ1Zy9saWJhc2FuLnNvLioiCitGSUxFU19saWJhc2FuLWRldiArPSAiXAorICAgICR7bGliZGlyfS9saWJhc2FuX3ByZWluaXQubyBcCisgICAgJHtsaWJkaXJ9L2xpYmFzYW4uc28gXAorICAgICR7bGliZGlyfS9saWJhc2FuLmxhIFwKKyIKK0ZJTEVTX2xpYmFzYW4tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vbGliYXNhbi5hIgorCitGSUxFU19saWJ1YnNhbiArPSAiJHtsaWJkaXJ9L2xpYnVic2FuLnNvLioiCitGSUxFU19saWJ1YnNhbi1kYmcgKz0gIiR7bGliZGlyfS8uZGVidWcvbGlidWJzYW4uc28uKiIKK0ZJTEVTX2xpYnVic2FuLWRldiArPSAiXAorICAgICR7bGliZGlyfS9saWJ1YnNhbi5zbyBcCisgICAgJHtsaWJkaXJ9L2xpYnVic2FuLmxhIFwKKyIKK0ZJTEVTX2xpYnVic2FuLXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2xpYnVic2FuLmEiCisKK0ZJTEVTX2xpYmxzYW4gKz0gIiR7bGliZGlyfS9saWJsc2FuLnNvLioiCitGSUxFU19saWJsc2FuLWRiZyArPSAiJHtsaWJkaXJ9Ly5kZWJ1Zy9saWJsc2FuLnNvLioiCitGSUxFU19saWJsc2FuLWRldiArPSAiXAorICAgICR7bGliZGlyfS9saWJsc2FuLnNvIFwKKyAgICAke2xpYmRpcn0vbGlibHNhbi5sYSBcCisiCitGSUxFU19saWJsc2FuLXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2xpYmxzYW4uYSIKKworRklMRVNfbGlidHNhbiArPSAiJHtsaWJkaXJ9L2xpYnRzYW4uc28uKiIKK0ZJTEVTX2xpYnRzYW4tZGJnICs9ICIke2xpYmRpcn0vLmRlYnVnL2xpYnRzYW4uc28uKiIKK0ZJTEVTX2xpYnRzYW4tZGV2ICs9ICJcCisgICAgJHtsaWJkaXJ9L2xpYnRzYW4uc28gXAorICAgICR7bGliZGlyfS9saWJ0c2FuLmxhIFwKKyIKK0ZJTEVTX2xpYnRzYW4tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vbGlidHNhbi5hIgorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vKi5zcGVjICR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvc2FuaXRpemVyLyouaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc180LjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMWY2NjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNC44LmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1zYW5pdGl6ZXJzLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzXzQuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc180LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAxZjY2NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc180LjkuYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgZ2NjLXNhbml0aXplcnMuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDFmNjY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzXzUuMi5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2Mtc2FuaXRpemVycy5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2hhcmVkLXNvdXJjZS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNoYXJlZC1zb3VyY2UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhY2ZmYjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNoYXJlZC1zb3VyY2UuaW5jCkBAIC0wLDAgKzEsOSBAQAorZG9fZmV0Y2goKSB7CisJOgorfQorZG9fZmV0Y2hbbm9leGVjXSA9ICIxIgorZGVsdGFzayBkb191bnBhY2sKK2RlbHRhc2sgZG9fcGF0Y2gKKworZG9fY29uZmlndXJlW2RlcGVuZHNdICs9ICJnY2Mtc291cmNlLSR7UFZ9OmRvX3ByZWNvbmZpZ3VyZSIKK2RvX3BvcHVsYXRlX2xpY1tkZXBlbmRzXSArPSAiZ2NjLXNvdXJjZS0ke1BWfTpkb191bnBhY2siCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk0ZmQ0ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlLmluYwpAQCAtMCwwICsxLDM2IEBACitkZWx0YXNrIGRvX2NvbmZpZ3VyZSAKK2RlbHRhc2sgZG9fY29tcGlsZSAKK2RlbHRhc2sgZG9fcGFja2FnZSAKK2RlbHRhc2sgZG9fcGFja2FnZV93cml0ZV9ycG0gCitkZWx0YXNrIGRvX3BhY2thZ2Vfd3JpdGVfaXBrIAorZGVsdGFzayBkb19wYWNrYWdlX3dyaXRlX2RlYgorZGVsdGFzayBkb19pbnN0YWxsIAorZGVsdGFzayBkb19wb3B1bGF0ZV9zeXNyb290CitkZWx0YXNrIGRvX3BvcHVsYXRlX2xpYyAKK2RlbHRhc2sgZG9fcGFja2FnZV9xYQorZGVsdGFzayBkb19wYWNrYWdlZGF0YQorZGVsdGFzayBkb19ybV93b3JrCisKK1BOID0gImdjYy1zb3VyY2UtJHtQVn0iCitXT1JLRElSID0gIiR7VE1QRElSfS93b3JrLXNoYXJlZC9nY2MtJHtQVn0tJHtQUn0iCitTU1RBVEVfU1dTUEVDID0gInNzdGF0ZTpnY2M6OiR7UFZ9OiR7UFJ9Ojoke1NTVEFURV9WRVJTSU9OfToiCisKK1NUQU1QID0gIiR7U1RBTVBTX0RJUn0vd29yay1zaGFyZWQvZ2NjLSR7UFZ9LSR7UFJ9IgorU1RBTVBDTEVBTiA9ICIke1NUQU1QU19ESVJ9L3dvcmstc2hhcmVkL2djYy0ke1BWfS0qIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorREVQRU5EUyA9ICIiCitQQUNLQUdFUyA9ICIiCisKK3B5dGhvbiBkb19wcmVjb25maWd1cmUgKCkgeworICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgY21kID0gZC5leHBhbmQoJ2NkICR7U30gJiYgUEFUSD0ke1BBVEh9IGdudS1jb25maWdpemUnKQorICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgICMgU2VlIDAwNDQtZ2VuZ3R5cGVzLnBhdGNoLCB3ZSBuZWVkIHRvIHJlZ2VuZXJhdGUgdGhpcyBmaWxlCisgICAgYmIudXRpbHMucmVtb3ZlKGQuZXhwYW5kKCIke1N9L2djYy9nZW5ndHlwZS1sZXguYyIpKQorICAgIGNtZCA9IGQuZXhwYW5kKCJzZWQgLWkgJ3MvQlVJTERfSU5GTz1pbmZvL0JVSUxEX0lORk89LycgJHtTfS9nY2MvY29uZmlndXJlIikKKyAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKK30KK2FkZHRhc2sgZG9fcHJlY29uZmlndXJlIGFmdGVyIGRvX3BhdGNoCitkb19wcmVjb25maWd1cmVbZGVwZW5kc10gKz0gImdudS1jb25maWctbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgYXV0b2NvbmYtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlXzQuOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODkwZmEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNC44LmJiCkBAIC0wLDAgKzEsNCBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2UuaW5jCisKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNC45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OTBmYTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV80LjkuYmIKQEAgLTAsMCArMSw0IEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZS5pbmMKKworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV81LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV81LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg5MGZhMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlXzUuMi5iYgpAQCAtMCwwICsxLDQgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlLmluYworCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtdGFyZ2V0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtdGFyZ2V0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTE2MGMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy10YXJnZXQuaW5jCkBAIC0wLDAgKzEsMjE0IEBACitHQ0NNVUxUSUxJQiA9ICItLWVuYWJsZS1tdWx0aWxpYiIKK3JlcXVpcmUgZ2NjLWNvbmZpZ3VyZS1jb21tb24uaW5jCisKK0VYVFJBX09FQ09ORl9QQVRIUyA9ICJcCisgICAgLS13aXRoLXN5c3Jvb3Q9LyBcCisgICAgLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKKyAgICAtLXdpdGgtbmF0aXZlLXN5c3RlbS1oZWFkZXItZGlyPSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7dGFyZ2V0X2luY2x1ZGVkaXJ9IFwKKyAgICAtLXdpdGgtZ3h4LWluY2x1ZGUtZGlyPSR7aW5jbHVkZWRpcn0vYysrLyR7QklOVn0gXAorIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpbnV4c3RkYmFzZSA9ICIgLS1lbmFibGUtY2xvY2FsZT1nbnUiCisKKyMgbGliY2MxIHJlcXVyZXMgZ2NjX2N2X29iamR1bXAgd2hlbiBjcm9zcyBidWlsZCwgYnV0IGdjY19jdl9vYmpkdW1wIGlzCisjIHNldCBpbiBzdWJkaXIgZ2NjLCBzbyBzdWJkaXIgbGliY2MxIGNhbid0IHVzZSBpdCwgZXhwb3J0IGl0IGhlcmUgdG8KKyMgZml4IHRoZSBwcm9ibGVtLgorZXhwb3J0IGdjY19jdl9vYmpkdW1wID0gIiR7VEFSR0VUX1BSRUZJWH1vYmpkdW1wIgorCitFWFRSQV9PRUNPTkZfR0NDX0ZMT0FUID0gIiR7QGdldF9nY2NfZmxvYXRfc2V0dGluZyhiYiwgZCl9IgorCitQQUNLQUdFUyA9ICJcCisgICAgJHtQTn0gJHtQTn0tcGx1Z2lucyAke1BOfS1zeW1saW5rcyBcCisgICAgZysrIGcrKy1zeW1saW5rcyBcCisgICAgY3BwIGNwcC1zeW1saW5rcyBcCisgICAgZzc3IGc3Ny1zeW1saW5rcyBcCisgICAgZ2ZvcnRyYW4gZ2ZvcnRyYW4tc3ltbGlua3MgXAorICAgIGdjb3YgZ2Nvdi1zeW1saW5rcyBcCisgICAgJHtQTn0tZG9jIFwKKyAgICAke1BOfS1kZXYgXAorICAgICR7UE59LWRiZyBcCisiCisKK0ZJTEVTXyR7UE59ID0gIlwKKyAgICAke2JpbmRpcn0vJHtUQVJHRVRfUFJFRklYfWdjYyogXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9jb2xsZWN0MiBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2NjKiBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2x0byogXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9saWIqJHtTT0xJQlN9IFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vbGlibHRvKiR7U09MSUJTREVWfSBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS8qLm8gXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vc3BlY3MgXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vbGliKiR7U09MSUJTfSBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlIFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUtZml4ZWQgXAorIgorSU5TQU5FX1NLSVBfJHtQTn0gKz0gImRldi1zbyIKKworRklMRVNfJHtQTn0tZGJnICs9ICJcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9Ly5kZWJ1Zy8gXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9wbHVnaW4vLmRlYnVnLyBcCisiCitGSUxFU18ke1BOfS1kZXYgPSAiXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vbGliKiR7U09MSUJTREVWfSBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2xpYioke1NPTElCU0RFVn0gXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vcGx1Z2luL2luY2x1ZGUvIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vcGx1Z2luL2dlbmd0eXBlIFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3BsdWdpbi9ndHlwZS5zdGF0ZSBcCisiCitGSUxFU18ke1BOfS1zeW1saW5rcyA9ICJcCisgICAgJHtiaW5kaXJ9L2NjIFwKKyAgICAke2JpbmRpcn0vZ2NjIFwKKyAgICAke2JpbmRpcn0vZ2NjYnVnIFwKKyIKKworRklMRVNfJHtQTn0tcGx1Z2lucyA9ICJcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9wbHVnaW4gXAorIgorQUxMT1dfRU1QVFlfJHtQTn0tcGx1Z2lucyA9ICIxIgorCitGSUxFU19nNzcgPSAiXAorICAgICR7YmluZGlyfS8ke1RBUkdFVF9QUkVGSVh9Zzc3IFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vZjc3MSBcCisiCitGSUxFU19nNzctc3ltbGlua3MgPSAiXAorICAgICR7YmluZGlyfS9nNzcgXAorICAgICR7YmluZGlyfS9mNzcgXAorIgorRklMRVNfZ2ZvcnRyYW4gPSAiXAorICAgICR7YmluZGlyfS8ke1RBUkdFVF9QUkVGSVh9Z2ZvcnRyYW4gXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9mOTUxIFwKKyIKK0ZJTEVTX2dmb3J0cmFuLXN5bWxpbmtzID0gIlwKKyAgICAke2JpbmRpcn0vZ2ZvcnRyYW4gXAorICAgICR7YmluZGlyfS9mOTUiCisKK0ZJTEVTX2NwcCA9ICJcCisgICAgJHtiaW5kaXJ9LyR7VEFSR0VUX1BSRUZJWH1jcHAgXAorICAgICR7YmFzZV9saWJkaXJ9L2NwcCBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2NjMSIKK0ZJTEVTX2NwcC1zeW1saW5rcyA9ICIke2JpbmRpcn0vY3BwIgorCitGSUxFU19nY292ID0gIiR7YmluZGlyfS8ke1RBUkdFVF9QUkVGSVh9Z2NvdiBcCisgICAgJHtiaW5kaXJ9LyR7VEFSR0VUX1BSRUZJWH1nY292LXRvb2wgXAorIgorRklMRVNfZ2Nvdi1zeW1saW5rcyA9ICIke2JpbmRpcn0vZ2NvdiBcCisgICAgJHtiaW5kaXJ9L2djb3YtdG9vbCBcCisiCisKK0ZJTEVTX2crKyA9ICJcCisgICAgJHtiaW5kaXJ9LyR7VEFSR0VUX1BSRUZJWH1nKysgXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9jYzFwbHVzIFwKKyIKK0ZJTEVTX2crKy1zeW1saW5rcyA9ICJcCisgICAgJHtiaW5kaXJ9L2MrKyBcCisgICAgJHtiaW5kaXJ9L2crKyBcCisiCisKK0ZJTEVTXyR7UE59LWRvYyA9ICJcCisgICAgJHtpbmZvZGlyfSBcCisgICAgJHttYW5kaXJ9IFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvUkVBRE1FIFwKKyIKKworZG9fY29tcGlsZSAoKSB7CisJb2VfcnVubWFrZSBhbGwtaG9zdAorfQorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwtaG9zdAorCisJIyBBZGQgdW53aW5kLmgsIGl0IGNvbWVzIGZyb20gbGliZ2NjIHdoaWNoIHdlIGRvbid0IHdhbnQgdG8gYnVpbGQgYWdhaW4KKwlpbnN0YWxsICR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS8ke1RBUkdFVF9TWVN9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS91bndpbmQuaCAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS8KKworCSMgSW5mbyBkaXIgbGlzdGluZyBpc24ndCBpbnRlcmVzdGluZyBhdCB0aGlzIHBvaW50IHNvIHJlbW92ZSBpdCBpZiBpdCBleGlzdHMuCisJaWYgWyAtZSAiJHtEfSR7aW5mb2Rpcn0vZGlyIiBdOyB0aGVuCisJCXJtIC1mICR7RH0ke2luZm9kaXJ9L2RpcgorCWZpCisKKwkjIENsZWFudXAgc29tZSBvZiB0aGUgJHtsaWJkaXJ9eyxleGVjfS9nY2Mgc3R1ZmYgLi4uCisJcm0gLXIgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luc3RhbGwtdG9vbHMKKwlybSAtciAke0R9JHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luc3RhbGwtdG9vbHMKKwlybSAtcmYgJHtEfSR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS8qLmxhCisJcm1kaXIgJHtEfSR7aW5jbHVkZWRpcn0KKwlybSAtcmYgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2ZpbmNsdWRlCisKKwkjIEhhY2sgYXJvdW5kIHNwZWNzIGZpbGUgYXNzdW1wdGlvbnMKKwl0ZXN0IC1mICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9zcGVjcyAmJiBzZWQgLWkgLWUgJy9eKmNyb3NzX2NvbXBpbGU6JC8geyBuOyBzLzEvMC87IH0nICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9zcGVjcworCisJIyBDbGVhbnVwIG1hbnBhZ2VzLi4KKwlybSAtcmYgJHtEfSR7bWFuZGlyfS9tYW43CisKKwljZCAke0R9JHtiaW5kaXJ9CisKKwkjIFdlIGNhcmUgYWJvdXQgZysrIG5vdCBjKysKKwlybSAtZiAqYysrCisKKwkjIFdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGdjYy08dmVyc2lvbj4gb25lcyBmb3IgdGhpcworCXJtIC1mICpnY2MtPy4/KgorCisJIyBXZSB1c2UgbGliaWJlcnR5IGZyb20gYmludXRpbHMKKwlmaW5kICR7RH0ke2xpYmRpcn0gLW5hbWUgbGliaWJlcnR5LmEgfCB4YXJncyBybSAtZgorCWZpbmQgJHtEfSR7bGliZGlyfSAtbmFtZSBsaWJpYmVydHkuaCB8IHhhcmdzIHJtIC1mCisKKwkjIE5vdCBzdXJlIHdoeSB3ZSBlbmQgdXAgd2l0aCB0aGVzZSBidXQgd2UgZG9uJ3Qgd2FudCB0aGVtLi4uCisJcm0gLWYgJHtUQVJHRVRfUFJFRklYfSR7VEFSR0VUX1BSRUZJWH0qCisKKwkjIFN5bWxpbmtzIHNvIHdlIGNhbiB1c2UgdGhlc2UgdHJpdmlhbGx5IG9uIHRoZSB0YXJnZXQKKwlpZiBbIC1lICR7VEFSR0VUX1BSRUZJWH1nNzcgXTsgdGhlbgorCQlsbiAtc2YgJHtUQVJHRVRfUFJFRklYfWc3NyBnNzcgfHwgdHJ1ZQorCQlsbiAtc2YgZzc3IGY3NyB8fCB0cnVlCisJZmkKKwlpZiBbIC1lICR7VEFSR0VUX1BSRUZJWH1nZm9ydHJhbiBdOyB0aGVuCisJCWxuIC1zZiAke1RBUkdFVF9QUkVGSVh9Z2ZvcnRyYW4gZ2ZvcnRyYW4gfHwgdHJ1ZQorCQlsbiAtc2YgZ2ZvcnRyYW4gZjk1IHx8IHRydWUKKwlmaQorCWxuIC1zZiAke1RBUkdFVF9QUkVGSVh9ZysrIGcrKworCWxuIC1zZiAke1RBUkdFVF9QUkVGSVh9Z2NjIGdjYworCWxuIC1zZiAke1RBUkdFVF9QUkVGSVh9Y3BwIGNwcAorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9saWJkaXJ9CisJbG4gLXNmICR7YmluZGlyfS8ke1RBUkdFVF9QUkVGSVh9Y3BwICR7RH0ke2Jhc2VfbGliZGlyfS9jcHAKKwlsbiAtc2YgZysrIGMrKworCWxuIC1zZiBnY2MgY2MKKworCWNob3duIC1SIHJvb3Q6cm9vdCAke0R9Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICAgICAgIworICAgICAgICAjIFRoZWZpeGluYy5zaCBzY3JpcHQsIHJ1biBvbiB0aGUgZ2NjJ3MgY29tcGlsZSBwaGFzZSwgbG9va3MgaW50byBzeXNyb290IGhlYWRlcgorICAgICAgICAjIGZpbGVzIGFuZCBwbGFjZXMgdGhlIG1vZGlmaWVkIGZpbGVzIGludG8KKyAgICAgICAgIyB7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLWZpeGVkIGZvbGRlci4gVGhpcyBtYWtlcyB0aGUKKyAgICAgICAgIyBidWlsZCBub3QgZGV0ZXJtaW5pc3RpYy4gVGhlIGZvbGxvd2luZyBjb2RlIHBydW5lcyBhbGwgdGhvc2UgaGVhZGVycworICAgICAgICAjIGV4Y2VwdCB0aG9zZSB1bmRlciBpbmNsdWRlLWZpeGVkL2xpbnV4LCAqbGltaXRzLmggYW5kIFJFQURNRSwgeWllbGRpbmcKKyAgICAgICAgIyB0aGUgc2FtZSBpbmNsdWRlLWZpeGVkIGZvbGRlcnMgbm8gbWF0dGVyIHdoYXQgc3lzcm9vdAorCisgICAgICAgIGluY2x1ZGVfZml4ZWQ9IiR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLWZpeGVkIgorICAgICAgICBmb3IgZiBpbiAkKGZpbmQgJHtpbmNsdWRlX2ZpeGVkfSAtdHlwZSBmKTsgZG8KKyAgICAgICAgICAgICAgICBjYXNlICRmIGluCisgICAgICAgICAgICAgICAgKi9pbmNsdWRlLWZpeGVkL2xpbnV4LyopCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgKi9pbmNsdWRlLWZpeGVkLypsaW1pdHMuaCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAqL2luY2x1ZGUtZml4ZWQvUkVBRE1FKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgICMgcmVtb3ZlIGZpbGUgYW5kIGRpcmVjdG9yeSBpZiBlbXB0eQorICAgICAgICAgICAgICAgICAgICBiYmRlYnVnIDIgIlBydW5pbmcgJGYiCisgICAgICAgICAgICAgICAgICAgIHJtICRmCisgICAgICAgICAgICAgICAgICAgIGZpbmQgJChkaXJuYW1lICRmKSAtbWF4ZGVwdGggMCAtZW1wdHkgLWV4ZWMgcm1kaXIge30gXDsKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgIGRvbmUKK30KKworIyBJbnN0YWxsaW5nIC91c3IvbGliL2djYy8qIG1lYW5zIHdlJ2QgaGF2ZSB0d28gY29waWVzLCBvbmUgZnJvbSBnY2MtY3Jvc3MKKyMgYW5kIG9uZSBmcm9tIGhlcmUuIFRoZXNlIGNhbiBjb25mdXNlIGdjYyBjcm9zcyB3aGVyZSBpbmNsdWRlcyB1c2UgI2luY2x1ZGVfbmV4dAorIyBhbmQgYnVpbGRzIHRyYWNrIGZpbGUgZGVwZW5kZW5jaWVzIChlLmcuIHBlcmwgYW5kIGl0cyBtYWtlZGVwZW5kcyBjb2RlKS4KKyMgRm9yIGRldGVybWluaXNtIHdlIGRvbid0IGluc3RhbGwgdGhpcyBldmVyIGFuZCByZWx5IG9uIHRoZSBjb3B5IGZyb20gZ2NjLWNyb3NzLgorIyBbWU9DVE8gIzcyODddCitzeXNyb290X3N0YWdlX2RpcnNfYXBwZW5kICgpIHsKKwlybSAtcmYgJHRvJHtsaWJkaXJ9L2djYworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY180LjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzYxOGRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY180LjguYmIKQEAgLTAsMCArMSw5IEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgZ2NjLXRhcmdldC5pbmMKKworIyBCdWlsZGluZyB3aXRoIHRodW1iIGVuYWJsZWQgb24gYXJtdjR0IGZhaWxzIHdpdGgKKyMgfCBnY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9jcC9kZWNsLmM6NzQzODooLnRleHQudW5saWtlbHkrMHgyZmEpOiByZWxvY2F0aW9uIHRydW5jYXRlZCB0byBmaXQ6IFJfQVJNX1RITV9DQUxMIGFnYWluc3Qgc3ltYm9sIGBmYW5jeV9hYm9ydChjaGFyIGNvbnN0KiwgaW50LCBjaGFyIGNvbnN0KiknIGRlZmluZWQgaW4gLmdsdWVfNyBzZWN0aW9uIGluIGxpbmtlciBzdHVicworIyB8IGdjYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL2NwL2RlY2wuYzo3NDQyOigudGV4dC51bmxpa2VseSsweDMxOCk6IGFkZGl0aW9uYWwgcmVsb2NhdGlvbiBvdmVyZmxvd3Mgb21pdHRlZCBmcm9tIHRoZSBvdXRwdXQKK0FSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjQgPSAiYXJtIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNC45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY180LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg0YmFhZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNC45LmJiCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtdGFyZ2V0LmluYworCisjIEJ1aWxkaW5nIHdpdGggdGh1bWIgZW5hYmxlZCBvbiBhcm12NHQgZmFpbHMgd2l0aAorIyB8IGdjYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL2NwL2RlY2wuYzo3NDM4OigudGV4dC51bmxpa2VseSsweDJmYSk6IHJlbG9jYXRpb24gdHJ1bmNhdGVkIHRvIGZpdDogUl9BUk1fVEhNX0NBTEwgYWdhaW5zdCBzeW1ib2wgYGZhbmN5X2Fib3J0KGNoYXIgY29uc3QqLCBpbnQsIGNoYXIgY29uc3QqKScgZGVmaW5lZCBpbiAuZ2x1ZV83IHNlY3Rpb24gaW4gbGlua2VyIHN0dWJzCisjIHwgZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2MvY3AvZGVjbC5jOjc0NDI6KC50ZXh0LnVubGlrZWx5KzB4MzE4KTogYWRkaXRpb25hbCByZWxvY2F0aW9uIG92ZXJmbG93cyBvbWl0dGVkIGZyb20gdGhlIG91dHB1dAorQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NCA9ICJhcm0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgorCisjU1lTVEVNSEVBREVSU19jbGFzcy1uYXRpdmVzZGsgPSAiJHtAJyR7dGFyZ2V0X2luY2x1ZGVkaXJ9Jy5yZXBsYWNlKGQuZ2V0VmFyKCdTREtQQVRIJywgVHJ1ZSksJyVyJyl9IgorI1NZU1RFTUxJQlNfY2xhc3MtbmF0aXZlc2RrID0gIiR7QCcke3RhcmdldF9iYXNlX2xpYmRpcn0nLnJlcGxhY2UoZC5nZXRWYXIoJ1NES1BBVEgnLCBUcnVlKSwnJXInKX0vIgorI1NZU1RFTUxJQlMxX2NsYXNzLW5hdGl2ZXNkayA9ICIke0AnJHt0YXJnZXRfbGliZGlyfScucmVwbGFjZShkLmdldFZhcignU0RLUEFUSCcsIFRydWUpLCclcicpfS8iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY181LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBhNTIzYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNS4yLmJiCkBAIC0wLDAgKzEsMTUgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtdGFyZ2V0LmluYworCisjIEJ1aWxkaW5nIHdpdGggdGh1bWIgZW5hYmxlZCBvbiBhcm12NHQgZmFpbHMgd2l0aAorIyB8IGdjYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL2NwL2RlY2wuYzo3NDM4OigudGV4dC51bmxpa2VseSsweDJmYSk6IHJlbG9jYXRpb24gdHJ1bmNhdGVkIHRvIGZpdDogUl9BUk1fVEhNX0NBTEwgYWdhaW5zdCBzeW1ib2wgYGZhbmN5X2Fib3J0KGNoYXIgY29uc3QqLCBpbnQsIGNoYXIgY29uc3QqKScgZGVmaW5lZCBpbiAuZ2x1ZV83IHNlY3Rpb24gaW4gbGlua2VyIHN0dWJzCisjIHwgZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2MvY3AvZGVjbC5jOjc0NDI6KC50ZXh0LnVubGlrZWx5KzB4MzE4KTogYWRkaXRpb25hbCByZWxvY2F0aW9uIG92ZXJmbG93cyBvbWl0dGVkIGZyb20gdGhlIG91dHB1dAorQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NCA9ICJhcm0iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCSMgRWFzaWVzdCB3YXkgdG8gc3RvcCBiYWQgUlBBVEhzIGdldHRpbmcgaW50byB0aGUgbGlicmFyeSBzaW5jZSB3ZSBoYXZlIGEKKwkjIGJyb2tlbiBsaWJ0b29sIGhlcmUKKwlzZWQgLWkgLWUgJ3MvaGFyZGNvZGVfaW50b19saWJzPXllcy9oYXJkY29kZV9pbnRvX2xpYnM9bm8vJyAke1N9L2xpYmNjMS9jb25maWd1cmUKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWNvbW1vbi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWNvbW1vbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA5ZWE2NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtY29tbW9uLmluYwpAQCAtMCwwICsxLDE0NCBAQAorQlBOID0gImxpYmdjYyIKKworcmVxdWlyZSBnY2Mtc2hhcmVkLXNvdXJjZS5pbmMKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworZG9fY29uZmlndXJlICgpIHsKKwl0YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfbGliZGlyfSAke0R9JHtsaWJkaXJ9CisJaGFyZGxpbmtkaXIgJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9LyR7TElCR0NDQlVJTERUUkVFTkFNRX0kdGFyZ2V0LyAke0J9CisJbWtkaXIgLXAgJHtCfS8ke0JQTn0KKwlta2RpciAtcCAke0J9LyR0YXJnZXQvJHtCUE59LworCWNkICR7Qn0vJHtCUE59CisJY2htb2QgYSt4ICR7U30vJHtCUE59L2NvbmZpZ3VyZQorCSR7U30vJHtCUE59L2NvbmZpZ3VyZSAke0NPTkZJR1VSRU9QVFN9ICR7RVhUUkFfT0VDT05GfQorfQorCitkb19jb21waWxlICgpIHsKKwl0YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKwljZCAke0J9LyR7QlBOfQorCW9lX3J1bm1ha2UgTVVMVElCVUlMRFRPUD0ke0J9LyR0YXJnZXQvJHtCUE59LworfQorCitkb19pbnN0YWxsICgpIHsKKwl0YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKwljZCAke0J9LyR7QlBOfQorCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgTVVMVElCVUlMRFRPUD0ke0J9LyR0YXJnZXQvJHtCUE59LyBpbnN0YWxsCisKKwkjIE1vdmUgbGliZ2NjX3MgaW50byAvbGliCisJbWtkaXIgLXAgJHtEfSR7YmFzZV9saWJkaXJ9CisJaWYgWyAtZiAke0R9JHtsaWJkaXJ9L25vZi9saWJnY2Nfcy5zbyBdOyB0aGVuCisJCW12ICR7RH0ke2xpYmRpcn0vbm9mL2xpYmdjYyogJHtEfSR7YmFzZV9saWJkaXJ9CisJZWxzZQorCQltdiAke0R9JHtsaWJkaXJ9L2xpYmdjYyogJHtEfSR7YmFzZV9saWJkaXJ9IHx8IHRydWUKKwlmaQorCisJIyBpbnN0YWxsIHRoZSBydW50aW1lIGluIC91c3IvbGliLyBub3QgaW4gL3Vzci9saWIvZ2NjIG9uIHRhcmdldAorCSMgc28gdGhhdCBjcm9zcy1nY2MgY2FuIGZpbmQgaXQgaW4gdGhlIHN5c3Jvb3QKKworCW12ICR7RH0ke2xpYmRpcn0vZ2NjLyogJHtEfSR7bGliZGlyfQorCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2djYy8KKwkjIHVud2luZC5oIGlzIGluc3RhbGxlZCBoZXJlIHdoaWNoIGlzIHNoaXBwZWQgaW4gZ2NjLWNyb3NzCisJIyBhcyB3ZWxsIGFzIHRhcmdldCBnY2MgYW5kIHRoZXkgYXJlIGlkZW50aWNhbCBzbyB3ZSBkb250CisJIyBzaGlwIG9uZSB3aXRoIGxpYmdjYyBoZXJlCisJcm0gLXJmICR7RH0ke2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUKK30KKworZG9faW5zdGFsbF9hcHBlbmRfbGliYy1iYXJlbWV0YWwgKCkgeworCXJtZGlyICR7RH0ke2Jhc2VfbGliZGlyfQorfQorCitSREVQRU5EU18ke1BOfS1kZXZfbGliYy1iYXJlbWV0YWwgPSAiIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKKworYWRkdGFzayBtdWx0aWxpYl9pbnN0YWxsIGFmdGVyIGRvX2luc3RhbGwgYmVmb3JlIGRvX3BhY2thZ2UgZG9fcG9wdWxhdGVfc3lzcm9vdAorIyB0aGlzIG1ha2VzIG11bHRpbGliIGdjYyBmaWxlcyBmaW5kYWJsZSBmb3IgdGFyZ2V0IGdjYworIyBlLmcuCisjICAgIC91c3IvbGliL2k1ODYtcG9reW1sbGliMzItbGludXgvNC43LworIyBieSBjcmVhdGluZyB0aGlzIHN5bWxpbmsgdG8gaXQKKyMgICAgL3Vzci9saWI2NC94ODZfNjQtcG9reS1saW51eC80LjcvMzIKKworZmFrZXJvb3QgcHl0aG9uIGRvX211bHRpbGliX2luc3RhbGwoKSB7CisgICAgaW1wb3J0IHJlCisKKyAgICBtdWx0aWxpYnMgPSBkLmdldFZhcignTVVMVElMSUJfVkFSSUFOVFMnLCBUcnVlKQorICAgIGlmIG5vdCBtdWx0aWxpYnMgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCk6CisgICAgICAgIHJldHVybgorCisgICAgYmludiA9IGQuZ2V0VmFyKCdCSU5WJywgVHJ1ZSkKKworICAgIG1scHJlZml4ID0gZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkKKyAgICBpZiAoJyVzbGliZ2NjJyAlIG1scHJlZml4KSAhPSBkLmdldFZhcignUE4nLCBUcnVlKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBtbHByZWZpeDoKKyAgICAgICAgb3JpZ190dW5lID0gZC5nZXRWYXIoJ0RFRkFVTFRUVU5FX01VTFRJTElCX09SSUdJTkFMJywgVHJ1ZSkKKyAgICAgICAgb3JpZ190dW5lX3BhcmFtcyA9IGdldF90dW5lX3BhcmFtZXRlcnMob3JpZ190dW5lLCBkKQorICAgICAgICBvcmlnX3R1bmVfYmFzZWxpYiA9IG9yaWdfdHVuZV9wYXJhbXNbJ2Jhc2VsaWInXQorICAgICAgICBvcmlnX3R1bmVfYml0bmVzcyA9IG9yaWdfdHVuZV9iYXNlbGliLnJlcGxhY2UoJ2xpYicsICcnKQorICAgICAgICBpZiBub3Qgb3JpZ190dW5lX2JpdG5lc3M6CisgICAgICAgICAgICBvcmlnX3R1bmVfYml0bmVzcyA9ICczMicKKworICAgICAgICBzcmMgPSAnLi4vLi4vLi4vJyArIG9yaWdfdHVuZV9iYXNlbGliICsgJy8nICsgXAorICAgICAgICAgICAgZC5nZXRWYXIoJ1RBUkdFVF9TWVNfTVVMVElMSUJfT1JJR0lOQUwnLCBUcnVlKSArICcvJyArIGJpbnYgKyAnLycKKworICAgICAgICBkZXN0ID0gZC5nZXRWYXIoJ0QnLCBUcnVlKSArIGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSArICcvJyArIFwKKyAgICAgICAgICAgIGQuZ2V0VmFyKCdUQVJHRVRfU1lTJywgVHJ1ZSkgKyAnLycgKyBiaW52ICsgJy8nICsgb3JpZ190dW5lX2JpdG5lc3MKKworICAgICAgICBpZiBvcy5wYXRoLmxleGlzdHMoZGVzdCk6CisgICAgICAgICAgICBvcy51bmxpbmsoZGVzdCkKKyAgICAgICAgb3Muc3ltbGluayhzcmMsIGRlc3QpCisgICAgICAgIHJldHVybgorCisKKyAgICBmb3IgbWwgaW4gbXVsdGlsaWJzLnNwbGl0KCk6CisgICAgICAgIHR1bmUgPSBkLmdldFZhcignREVGQVVMVFRVTkVfdmlydGNsYXNzLW11bHRpbGliLScgKyBtbCwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHR1bmU6CisgICAgICAgICAgICBiYi53YXJuKCdERUZBVUxUVFVORV92aXJ0Y2xhc3MtbXVsdGlsaWItJXMgaXMgbm90IGRlZmluZWQuIFNraXBwaW5nLi4uJyAlIG1sKQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICB0dW5lX3BhcmFtZXRlcnMgPSBnZXRfdHVuZV9wYXJhbWV0ZXJzKHR1bmUsIGQpCisgICAgICAgIHR1bmVfYmFzZWxpYiA9IHR1bmVfcGFyYW1ldGVyc1snYmFzZWxpYiddCisgICAgICAgIGlmIG5vdCB0dW5lX2Jhc2VsaWI6CisgICAgICAgICAgICBiYi53YXJuKCJUdW5lICVzIGRvZXNuJ3QgaGF2ZSBhIGJhc2VsaWIgc2V0LiBTa2lwcGluZy4uLiIgJSB0dW5lKQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICB0dW5lX2FyY2ggPSB0dW5lX3BhcmFtZXRlcnNbJ2FyY2gnXQorICAgICAgICB0dW5lX2JpdG5lc3MgPSB0dW5lX2Jhc2VsaWIucmVwbGFjZSgnbGliJywgJycpCisgICAgICAgIGlmIG5vdCB0dW5lX2JpdG5lc3M6CisgICAgICAgICAgICB0dW5lX2JpdG5lc3MgPSAnMzInICMgL2xpYiA9PiAzMmJpdCBsaWIKKworICAgICAgICBzcmMgPSAnLi4vLi4vLi4vJyArIHR1bmVfYmFzZWxpYiArICcvJyArIFwKKyAgICAgICAgICAgIHR1bmVfYXJjaCArIGQuZ2V0VmFyKCdUQVJHRVRfVkVORE9SJywgVHJ1ZSkgKyAnbWwnICsgbWwgKyBcCisgICAgICAgICAgICAnLScgKyBkLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSkgKyAnLycgKyBiaW52ICsgJy8nCisKKyAgICAgICAgZGVzdCA9IGQuZ2V0VmFyKCdEJywgVHJ1ZSkgKyBkLmdldFZhcignbGliZGlyJywgVHJ1ZSkgKyAnLycgKyBcCisgICAgICAgICAgICBkLmdldFZhcignVEFSR0VUX1NZUycsIFRydWUpICsgJy8nICsgYmludiArICcvJyArIHR1bmVfYml0bmVzcworCisgICAgICAgIGlmIG9zLnBhdGgubGV4aXN0cyhkZXN0KToKKyAgICAgICAgICAgIG9zLnVubGluayhkZXN0KQorICAgICAgICBvcy5zeW1saW5rKHNyYywgZGVzdCkKK30KKworZGVmIGdldF9vcmlnaW5hbF92ZW5kb3JvcyhkKToKKyAgICB2ZW5kb3JvcyA9IGQuZXhwYW5kKCcke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfScpCisgICAgZm9yIHN1ZmZpeCBpbiBbZC5nZXRWYXIoJ0FCSUVYVEVOU0lPTicsIFRydWUpLCBkLmdldFZhcignTElCQ0VYVEVOU0lPTicsIFRydWUpXToKKyAgICAgICAgaWYgc3VmZml4IGFuZCB2ZW5kb3Jvcy5lbmRzd2l0aChzdWZmaXgpOgorICAgICAgICAgICAgdmVuZG9yb3MgPSB2ZW5kb3Jvc1s6LWxlbihzdWZmaXgpXQorICAgIHJldHVybiB2ZW5kb3JvcworCitPUklHX1RBUkdFVF9WRU5ET1JPUyA6PSAiJHtAZ2V0X29yaWdpbmFsX3ZlbmRvcm9zKGQpfSIKK0JBU0VUQVJHRVRfU1lTID0gIiR7VEFSR0VUX0FSQ0h9JHtPUklHX1RBUkdFVF9WRU5ET1JPU30iCisKK2FkZHRhc2sgZXh0cmFfc3ltbGlua3MgYWZ0ZXIgZG9fbXVsdGlsaWJfaW5zdGFsbCBiZWZvcmUgZG9fcGFja2FnZSBkb19wb3B1bGF0ZV9zeXNyb290CitmYWtlcm9vdCBweXRob24gZG9fZXh0cmFfc3ltbGlua3MoKSB7CisgICAgdGFyZ2V0c3lzID0gZC5nZXRWYXIoJ0JBU0VUQVJHRVRfU1lTJywgVHJ1ZSkKKworICAgIGlmIHRhcmdldHN5cyAhPSBkLmdldFZhcignVEFSR0VUX1NZUycsIFRydWUpOgorICAgICAgICBkZXN0ID0gZC5nZXRWYXIoJ0QnLCBUcnVlKSArIGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSArICcvJyArIHRhcmdldHN5cworICAgICAgICBzcmMgPSBkLmdldFZhcignVEFSR0VUX1NZUycsIFRydWUpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmxleGlzdHMoZGVzdCkgYW5kIG9zLnBhdGgubGV4aXN0cyhkLmdldFZhcignRCcsIFRydWUpICsgZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpKToKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoc3JjLCBkZXN0KQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU5MmYwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbC5pbmMKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSBsaWJnY2MtY29tbW9uLmluYworCitERVBFTkRTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYy1pbml0aWFsIgorCitMSUNFTlNFID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorCitTVEFHSU5HQ0MgPSAiZ2NjLWNyb3NzLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCitTVEFHSU5HQ0NfY2xhc3MtbmF0aXZlc2RrID0gImdjYy1jcm9zc3Nkay1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorUEFUSF9wcmVwZW5kID0gIiR7U1RBR0lOR19CSU5ESVJfVE9PTENIQUlOfS4ke1NUQUdJTkdDQ306IgorCitQQUNLQUdFUyA9ICIiCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLXNoYXJlZCIKKworTElCR0NDQlVJTERUUkVFTkFNRSA9ICJnY2MtYnVpbGQtaW50ZXJuYWwtaW5pdGlhbC0iCisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7U1RBR0lOR19ESVJfVENCT09UU1RSQVB9LyIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsXzQuOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF80LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlmMjUzZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF80LjguYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgbGliZ2NjLWluaXRpYWwuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNC45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWYyNTNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsXzQuOS5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBsaWJnY2MtaW5pdGlhbC5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF81LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZjI1M2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNS4yLmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGxpYmdjYy1pbml0aWFsLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzlhZGJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy5pbmMKQEAgLTAsMCArMSw0MSBAQAorcmVxdWlyZSBsaWJnY2MtY29tbW9uLmluYworCitERVBFTkRTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYyB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nKysiCisKK1BBQ0tBR0VTID0gIlwKKyAgICAke1BOfSBcCisgICAgJHtQTn0tZGV2IFwKKyAgICAke1BOfS1kYmcgXAorIgorCisjIEFsbCBsaWJnY2Mgc291cmNlIGlzIG1hcmtlZCB3aXRoIHRoZSBleGNlcHRpb24uCisjCitMSUNFTlNFXyR7UE59ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV8ke1BOfS1kZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFXyR7UE59LWRiZyA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKKworCitGSUxFU18ke1BOfSA9ICIke2Jhc2VfbGliZGlyfS9saWJnY2MqLnNvLioiCitGSUxFU18ke1BOfS1kZXYgPSAiXAorICAgICR7YmFzZV9saWJkaXJ9L2xpYmdjYyouc28gXAorICAgICR7bGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vKmNydCogXAorICAgICR7bGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vNjQgXAorICAgICR7bGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vMzIgXAorICAgICR7bGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0veDMyIFwKKyAgICAke2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L24zMiBcCisgICAgJHtsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9saWJnY2MqIFwKKyAgICAke0BiYXNlX2NvbmRpdGlvbmFsKCdCQVNFVEFSR0VUX1NZUycsICcke1RBUkdFVF9TWVN9JywgJycsICcke2xpYmRpcn0vJHtCQVNFVEFSR0VUX1NZU30nLCBkKX0gXAorICAgICR7bGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vbGliZ2Nvdi5hIFwKKyIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2Jhc2VfbGliZGlyfS8uZGVidWcvIgorCitMSUJHQ0NCVUlMRFRSRUVOQU1FID0gImdjYy1idWlsZC1pbnRlcm5hbC0iCisKK2RvX3BhY2thZ2VbZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH1saWJjOmRvX3BhY2thZ2VkYXRhIgorZG9fcGFja2FnZV93cml0ZV9pcGtbZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH1saWJjOmRvX3BhY2thZ2VkYXRhIgorZG9fcGFja2FnZV93cml0ZV9kZWJbZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH1saWJjOmRvX3BhY2thZ2VkYXRhIgorZG9fcGFja2FnZV93cml0ZV9ycG1bZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH1saWJjOmRvX3BhY2thZ2VkYXRhIgorCitJTlNBTkVfU0tJUF8ke1BOfS1kZXYgPSAic3RhdGljZGV2IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzQuOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2NfNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MTUyZjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzQuOC5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBsaWJnY2MuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzQuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2NfNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MTUyZjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzQuOS5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBsaWJnY2MuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzUuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2NfNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MTUyZjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzUuMi5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBsaWJnY2MuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW4uaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDI4NDNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuLmluYwpAQCAtMCwwICsxLDc0IEBACityZXF1aXJlIGdjYy1jb25maWd1cmUtY29tbW9uLmluYworCitFWFRSQV9PRUNPTkZfUEFUSFMgPSAiXAorICAgIC0td2l0aC1zeXNyb290PS9ub3QvZXhpc3QgXAorICAgIC0td2l0aC1idWlsZC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcCisiCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJbXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorCXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorCWhhcmRsaW5rZGlyICR7U1RBR0lOR19JTkNESVJfTkFUSVZFfS9nY2MtYnVpbGQtaW50ZXJuYWwtJG10YXJnZXQgJHtCfQorCisJZWNobyAiQ29uZmlndXJpbmcgbGliZ2ZvcnRyYW4iCisJcm0gLXJmICR7Qn0vJHRhcmdldC9saWJnZm9ydHJhbi8KKwlta2RpciAtcCAke0J9LyR0YXJnZXQvbGliZ2ZvcnRyYW4vCisJY2QgJHtCfS8kdGFyZ2V0L2xpYmdmb3J0cmFuLworCWNobW9kIGEreCAke1N9L2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQorCSR7U30vbGliZ2ZvcnRyYW4vY29uZmlndXJlICR7Q09ORklHVVJFT1BUU30gJHtFWFRSQV9PRUNPTkZ9CisJIyBFYXNpZXN0IHdheSB0byBzdG9wIGJhZCBSUEFUSHMgZ2V0dGluZyBpbnRvIHRoZSBsaWJyYXJ5IHNpbmNlIHdlIGhhdmUgYQorCSMgYnJva2VuIGxpYnRvb2wgaGVyZQorCXNlZCAtaSAtZSAncy9oYXJkY29kZV9pbnRvX2xpYnM9eWVzL2hhcmRjb2RlX2ludG9fbGlicz1uby8nICR7Qn0vJHRhcmdldC9saWJnZm9ydHJhbi9saWJ0b29sCit9CisKK2RvX2NvbXBpbGUgKCkgeworCXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorCWNkICR7Qn0vJHRhcmdldC9saWJnZm9ydHJhbi8KKwlvZV9ydW5tYWtlIE1VTFRJQlVJTERUT1A9JHtCfS8kdGFyZ2V0L2xpYmdmb3J0cmFuLworfQorCitkb19pbnN0YWxsICgpIHsKKwl0YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKwljZCAke0J9LyR0YXJnZXQvbGliZ2ZvcnRyYW4vCisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBNVUxUSUJVSUxEVE9QPSR7Qn0vJHRhcmdldC9saWJnZm9ydHJhbi8gaW5zdGFsbAorCWlmIFsgLWQgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2ZpbmNsdWRlIF07IHRoZW4KKwkJcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgLXAgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2ZpbmNsdWRlCisJZmkKKwlpZiBbIC1kICR7RH0ke2luZm9kaXJ9IF07IHRoZW4KKwkJcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgLXAgJHtEfSR7aW5mb2Rpcn0KKwlmaQorCWNob3duIC1SIHJvb3Q6cm9vdCAke0R9Cit9CisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitERVBFTkRTID0gImdjYy1ydW50aW1lIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKKworUEFDS0FHRVMgPSAiXAorICAgICR7UE59LWRiZyBcCisgICAgbGliZ2ZvcnRyYW4gXAorICAgIGxpYmdmb3J0cmFuLWRldiBcCisgICAgbGliZ2ZvcnRyYW4tc3RhdGljZGV2IFwKKyIKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9saWJnZm9ydHJhbi5zby4qIgorRklMRVNfJHtQTn0tZGV2ID0gIlwKKyAgICAke2xpYmRpcn0vbGliZ2ZvcnRyYW4qLnNvIFwKKyAgICAke2xpYmRpcn0vbGliZ2ZvcnRyYW4uc3BlYyBcCisgICAgJHtsaWJkaXJ9L2xpYmdmb3J0cmFuLmxhIFwKKyAgICAke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9saWJnZm9ydHJhbmJlZ2luLiogXAorICAgICR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2xpYmNhZl9zaW5nbGUqIFwKKyIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGliZ2ZvcnRyYW4uYSIKKworSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJnZm9ydHJhbi1kZXYgPSAic3RhdGljZGV2IgorCitkb19wYWNrYWdlX3dyaXRlX2lwa1tkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCitkb19wYWNrYWdlX3dyaXRlX2RlYltkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCitkb19wYWNrYWdlX3dyaXRlX3JwbVtkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgZiA9IGQuZ2V0VmFyKCJGT1JUUkFOIiwgVHJ1ZSkKKyAgICBpZiAiZm9ydHJhbiIgbm90IGluIGY6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJsaWJnZm9ydHJhbiBuZWVkcyBmb3J0cmFuIHN1cHBvcnQgdG8gYmUgZW5hYmxlZCBpbiB0aGUgY29tcGlsZXIiKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzQuOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl80LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFkZDhiNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl80LjguYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgbGliZ2ZvcnRyYW4uaW5jCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl80LjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW5fNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZGQ4YjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW5fNC45LmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGxpYmdmb3J0cmFuLmluYworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW5fNS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWRkOGI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzUuMi5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBsaWJnZm9ydHJhbi5pbmMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi03LjkuMS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLTcuOS4xLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2E5NWFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi03LjkuMS5pbmMKQEAgLTAsMCArMSw5IEBACitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjMgJiBMR1BMdjIgJiBMR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCisJCSAgICBmaWxlOi8vQ09QWUlORzM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKwkJICAgIGZpbGU6Ly9DT1BZSU5HMy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IFwKKwkJICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9OWY2MDRkOGE0ZjhlNzRmNGY1MTQwODQ1YTIxYjY2NzQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmM2I5N2RlOTE5YTlkYmE4NDQ5MGIyZTA3NmVjNGNiMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0OTk0YWQ5ODY3MjZhYzQxMjhhNmYxYmQ4MDIwY2Q2NzJlOWE5MmFhNzZiODA3MzY1NjNlZjk5Mjk5Mjc2NGVmIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNvbW1vbi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNvbW1vbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY2YmE4ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY29tbW9uLmluYwpAQCAtMCwwICsxLDcxIEBACitTVU1NQVJZID0gIkdOVSBkZWJ1Z2dlciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nZGIvIgorTElDRU5TRSA9ICJHUEx2MysiCitTRUNUSU9OID0gImRldmVsIgorREVQRU5EUyA9ICJleHBhdCB6bGliIG5jdXJzZXMgcmVhZGxpbmUgJHtMVFROR1VTVH0iCisKK0xUVE5HVVNUID0gImx0dG5nLXVzdCIKK0xUVE5HVVNUX2FhcmNoNjQgPSAiIgorTFRUTkdVU1RfbGliYy11Y2xpYmMgPSAiIgorTFRUTkdVU1RfbWlwcyA9ICIiCitMVFROR1VTVF9taXBzZWwgPSAiIgorTFRUTkdVU1RfbWlwczY0ID0gIiIKK0xUVE5HVVNUX21pcHM2NGVsID0gIiIKK0xUVE5HVVNUX21pcHM2NG4zMiA9ICIiCitMVFROR1VTVF9taXBzNjRlbG4zMiA9ICIiCitMVFROR1VTVF9zaDQgPSAiIgorTFRUTkdVU1RfbGliYy1tdXNsID0gIiIKKworSU5DX1BSID0gInIwIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCisJCWZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9OWY2MDRkOGE0ZjhlNzRmNGY1MTQwODQ1YTIxYjY2NzQgXAorCQlmaWxlOi8vQ09QWUlORzM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKwkJZmlsZTovL0NPUFlJTkczLkxJQjttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjYiCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9nZGIvZ2RiLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIgorZXhwb3J0IENDX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0NDfSIKK2V4cG9ydCBDWFhfRk9SX0JVSUxEID0gIiR7QlVJTERfQ1hYfSIKK2V4cG9ydCBDUFBfRk9SX0JVSUxEID0gIiR7QlVJTERfQ1BQfSIKK2V4cG9ydCBDRkxBR1NfRk9SX0JVSUxEID0gIiR7QlVJTERfQ0ZMQUdTfSIKK2V4cG9ydCBDWFhGTEFHU19GT1JfQlVJTEQgPSAiJHtCVUlMRF9DWFhGTEFHU30iCitleHBvcnQgQ1BQRkxBR1NfRk9SX0JVSUxEID0gIiR7QlVJTERfQ1BQRkxBR1N9IgorCitCID0gIiR7V09SS0RJUn0vYnVpbGQtJHtUQVJHRVRfU1lTfSIKKworRVhUUkFfT0VNQUtFID0gIidTVUJESVJTPWludGwgbW1hbGxvYyBsaWJpYmVydHkgb3Bjb2RlcyBiZmQgc2ltIGdkYiBldGMgdXRpbHMnIgorCitFWFBBVCA9ICItLXdpdGgtZXhwYXQgLS13aXRoLWxpYmV4cGF0LXByZWZpeD0ke1NUQUdJTkdfRElSX0hPU1R9IgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWdkYnRrIC0tZGlzYWJsZS10dWkgLS1kaXNhYmxlLXggLS1kaXNhYmxlLXdlcnJvciBcCisgICAgICAgICAgICAgICAgLS13aXRoLWN1cnNlcyAtLWRpc2FibGUtbXVsdGlsaWIgLS13aXRoLXN5c3RlbS1yZWFkbGluZSAtLWRpc2FibGUtc2ltIFwKKyAgICAgICAgICAgICAgICAtLXdpdGhvdXQtbHptYSAtLXdpdGhvdXQtZ3VpbGUgXAorICAgICAgICAgICAgICAgICR7R0RCUFJPUFJFRklYfSAke0VYUEFUfSBcCisgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdtdWx0aWFyY2gnLCAnLS1lbmFibGUtNjQtYml0LWJmZCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1ycGF0aCBcCisgICAgICAgICAgICAgICAiCisKK0dEQlBST1BSRUZJWCA9ICItLXByb2dyYW0tcHJlZml4PScnIgorCitkb19jb25maWd1cmUgKCkgeworCSMgb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiB0byBhdm9pZCB0aGUgYXV0b2NvbmYvYXV0b21ha2UvYWNsb2NhbC9hdXRvaGVhZGVyCisJIyBjYWxscyBmb3Igbm93CisJKGNkICR7U30gJiYgZ251LWNvbmZpZ2l6ZSkgfHwgZGllICJmYWlsdXJlIGluIHJ1bm5pbmcgZ251LWNvbmZpZ2l6ZSIKKwlvZV9ydW5jb25mCit9CisKKyMgd2UgZG9uJ3Qgd2FudCBnZGIgdG8gcHJvdmlkZSBiZmQvaWJlcnR5L29wY29kZXMsIHdoaWNoIGluc3RlYWQgd2lsbCBvdmVycmlkZSB0aGUKKyMgcmlnaHQgYml0cyBpbnN0YWxsZWQgYnkgYmludXRpbHMuCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlybSAtcmYgJHtEfSR7bGliZGlyfQorCXJtIC1yZiAke0R9JHtpbmNsdWRlZGlyfQorCXJtIC1yZiAke0R9JHtkYXRhZGlyfS9sb2NhbGUKK30KKworUlJFQ09NTUVORFNfZ2RiX2FwcGVuZF9saW51eCA9ICIgZ2xpYmMtdGhyZWFkLWRiICIKK1JSRUNPTU1FTkRTX2dkYl9hcHBlbmRfbGludXgtZ251ZWFiaSA9ICIgZ2xpYmMtdGhyZWFkLWRiICIKK1JSRUNPTU1FTkRTX2dkYnNlcnZlcl9hcHBlbmRfbGludXggPSAiIGdsaWJjLXRocmVhZC1kYiAiCitSUkVDT01NRU5EU19nZGJzZXJ2ZXJfYXBwZW5kX2xpbnV4LWdudWVhYmkgPSAiIGdsaWJjLXRocmVhZC1kYiAiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MtY2FuYWRpYW4uaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zcy1jYW5hZGlhbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZkNjBhNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MtY2FuYWRpYW4uaW5jCkBAIC0wLDAgKzEsMzggQEAKK2luaGVyaXQgY3Jvc3MtY2FuYWRpYW4KK2luaGVyaXQgcHl0aG9uLWRpcgorCitTVU1NQVJZID0gIkdOVSBkZWJ1Z2dlciAoY3Jvc3MtY2FuYWRpYW4gZ2RiIGZvciAke1RBUkdFVF9BUkNIfSB0YXJnZXQpIgorUE4gPSAiZ2RiLWNyb3NzLWNhbmFkaWFuLSR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH0iCitCUE4gPSAiZ2RiIgorCitERVBFTkRTID0gIm5hdGl2ZXNkay1uY3Vyc2VzIG5hdGl2ZXNkay1leHBhdCBuYXRpdmVzZGstZ2V0dGV4dCBuYXRpdmVzZGstcmVhZGxpbmUgbmF0aXZlc2RrLXB5dGhvbiIKK1JERVBFTkRTXyR7UE59ICs9ICJuYXRpdmVzZGstcHl0aG9uLWNvcmUgbmF0aXZlc2RrLXB5dGhvbi1sYW5nIG5hdGl2ZXNkay1weXRob24tcmUgXAorICAgICAgICAgICAgICAgICAgIG5hdGl2ZXNkay1weXRob24tY29kZWNzIG5hdGl2ZXNkay1weXRob24tbmV0Y2xpZW50IgorCitHREJQUk9QUkVGSVggPSAiLS1wcm9ncmFtLXByZWZpeD0nJHtUQVJHRVRfUFJFRklYfSciCisKK0VYVFJBX09FQ09ORl9hcHBlbmQgPSAiIC0td2l0aC1weXRob249JHtXT1JLRElSfS9weXRob24iCisKK1NTVEFURV9EVVBXSElURUxJU1QgKz0gIiR7U1RBR0lOR19EQVRBRElSfS9nZGIiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworY2F0ID4gJHtXT1JLRElSfS9weXRob24gPDwgRU9GCisjISAvYmluL3NoCitjYXNlICJcJDIiIGluCisgICAgICAgIC0taW5jbHVkZXMpIGVjaG8gIi1JJHtTVEFHSU5HX0lOQ0RJUn0vJHtQWVRIT05fRElSfS8iIDs7CisgICAgICAgIC0tbGRmbGFncykgZWNobyAiLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19MSUJESVJ9Ly4uIC1XbCwtcnBhdGgsJHtsaWJkaXJ9Ly4uIC1scHRocmVhZCAtbGRsIC1sdXRpbCAtbG0gLWxweXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0iIDs7CisgICAgICAgIC0tZXhlYy1wcmVmaXgpIGVjaG8gIiR7ZXhlY19wcmVmaXh9IiA7OworICAgICAgICAqKSBleGl0IDEgOzsKK2VzYWMKK2V4aXQgMAorRU9GCisgICAgICAgIGNobW9kICt4ICR7V09SS0RJUn0vcHl0aG9uCit9CisKKyMgd2UgZG9uJ3Qgd2FudCBnZGIgdG8gcHJvdmlkZSBiZmQvaWJlcnR5L29wY29kZXMsIHdoaWNoIGluc3RlYWQgd2lsbCBvdmVycmlkZSB0aGUKKyMgcmlnaHQgYml0cyBpbnN0YWxsZWQgYnkgYmludXRpbHMuCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlybSAtcmYgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYgorCWNyb3NzX2NhbmFkaWFuX2JpbmRpcmxpbmtzCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MtY2FuYWRpYW5fNy45LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzLWNhbmFkaWFuXzcuOS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMTAzNTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzLWNhbmFkaWFuXzcuOS4xLmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSBnZGItY29tbW9uLmluYworcmVxdWlyZSBnZGItY3Jvc3MtY2FuYWRpYW4uaW5jCityZXF1aXJlIGdkYi0ke1BWfS5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU0NDc3OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MuaW5jCkBAIC0wLDAgKzEsMjYgQEAKK3JlcXVpcmUgZ2RiLWNvbW1vbi5pbmMKKworREVQRU5EUyA9ICJleHBhdC1uYXRpdmUgbmN1cnNlcy1uYXRpdmUgcmVhZGxpbmUtbmF0aXZlIHB5dGhvbi1uYXRpdmUiCisKK2luaGVyaXQgcHl0aG9ubmF0aXZlCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLXB5dGhvbj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9weXRob24iCisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKyAgICBleHBvcnQgQlVJTERfU1lTPSIke0JVSUxEX1NZU30iCisgICAgZXhwb3J0IEhPU1RfU1lTPSIke0hPU1RfU1lTfSIKKyAgICBleHBvcnQgU1RBR0lOR19MSUJESVI9IiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSIKKyAgICBleHBvcnQgU1RBR0lOR19JTkNESVI9IiR7U1RBR0lOR19JTkNESVJfTkFUSVZFfSIKK30KKworI0VYVFJBX09FTUFLRSArPSAiTERGTEFHUz0nJHtCVUlMRF9MREZMQUdTfSciCisKK0dEQlBST1BSRUZJWCA9ICIiCisKK1BOID0gImdkYi1jcm9zcy0ke1RBUkdFVF9BUkNIfSIKK0JQTiA9ICJnZGIiCisKK2luaGVyaXQgY3Jvc3MKK2luaGVyaXQgZ2V0dGV4dAorCitkYXRhZGlyIC49ICIvZ2RiLSR7VFVORV9QS0dBUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zc183LjkuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3NfNy45LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E5NWNmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3NfNy45LjEuYmIKQEAgLTAsMCArMSw0IEBACityZXF1aXJlIGdkYi1jcm9zcy5pbmMKK3JlcXVpcmUgZ2RiLSR7UFZ9LmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1tYWtlLW1hbi1pbnN0YWxsLXJlbGF0aXZlLXRvLURFU1RESVIucGF0Y2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YzAyMTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLmluYwpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIGdkYi1jb21tb24uaW5jCisKK2luaGVyaXQgZ2V0dGV4dAorCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMi1DaGFuZ2Utb3JkZXItb2YtQ0ZMQUdTLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAzLUFkZC1zdXBwb3J0LWZvci1SZW5lc2FzLVNILXNoNC1hcmNoaXRlY3R1cmUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2ZpeC1kZXRlY3Rpb24tb2YtNjQtYml0LVBQQy1pbmZlcmlvci1pbi1nZGJzZXJ2ZXIucGF0Y2ggXAorICAgICAgICAgICAiCisjTERGTEFHU19hcHBlbmQgPSAiIC1zIgorI2V4cG9ydCBDRkxBR1NfYXBwZW5kPSIgLUwke1NUQUdJTkdfTElCRElSfSIKKworIyBjcm9zcy1jYW5hZGlhbiBtdXN0IG5vdCBzZWUgdGhpcworUEFDS0FHRVMgPSsgImdkYnNlcnZlciIKK0ZJTEVTX2dkYnNlcnZlciA9ICIke2JpbmRpcn0vZ2Ric2VydmVyIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAxLW1ha2UtbWFuLWluc3RhbGwtcmVsYXRpdmUtdG8tREVTVERJUi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMS1tYWtlLW1hbi1pbnN0YWxsLXJlbGF0aXZlLXRvLURFU1RESVIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk5NmMxOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMS1tYWtlLW1hbi1pbnN0YWxsLXJlbGF0aXZlLXRvLURFU1RESVIucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSAxMmIwNTA2OTUxNDYwYzNjYzM3ZDc3NTQ3OGQwMjRkYjNmOTVlOWQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMjoyNzo1NSArMDAwMAorU3ViamVjdDogW1BBVENIIDEvM10gbWFrZSBtYW4gaW5zdGFsbCByZWxhdGl2ZSB0byBERVNURElSCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc2ltL2NvbW1vbi9NYWtlZmlsZS5pbiB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NpbS9jb21tb24vTWFrZWZpbGUuaW4gYi9zaW0vY29tbW9uL01ha2VmaWxlLmluCitpbmRleCBkNDlhOTNiLi4yMTIxYzQ2IDEwMDY0NAorLS0tIGEvc2ltL2NvbW1vbi9NYWtlZmlsZS5pbgorKysrIGIvc2ltL2NvbW1vbi9NYWtlZmlsZS5pbgorQEAgLTM1LDcgKzM1LDcgQEAgdG9vbGRpciA9ICQobGliZGlyKS8kKHRhcmdldF9hbGlhcykKKyBkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKKyBkYXRhZGlyID0gQGRhdGFkaXJACisgbWFuZGlyID0gQG1hbmRpckAKKy1tYW4xZGlyID0gJChtYW5kaXIpL21hbjEKKyttYW4xZGlyID0gJChERVNURElSKSQobWFuZGlyKS9tYW4xCisgaW5mb2RpciA9IEBpbmZvZGlyQAorIGluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAyLUNoYW5nZS1vcmRlci1vZi1DRkxBR1MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDItQ2hhbmdlLW9yZGVyLW9mLUNGTEFHUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2NiNDVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAyLUNoYW5nZS1vcmRlci1vZi1DRkxBR1MucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSAyNjJjY2M0ZmRiMmEzZGYwZjE2YzYxYTgwNzA0Njk2NGFlNzcyOWM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMjoyOToyMyArMDAwMAorU3ViamVjdDogW1BBVENIIDIvM10gQ2hhbmdlIG9yZGVyIG9mIENGTEFHUworCitMZXRzIHVzIG92ZXJyaWRlIFdlcnJvciBpZiBuZWVkIGJlCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ2RiL2dkYnNlcnZlci9NYWtlZmlsZS5pbiB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nZGIvZ2Ric2VydmVyL01ha2VmaWxlLmluIGIvZ2RiL2dkYnNlcnZlci9NYWtlZmlsZS5pbgoraW5kZXggMWVkMmVjOC4uMGNlZjk1YiAxMDA2NDQKKy0tLSBhL2dkYi9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4KKysrKyBiL2dkYi9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4KK0BAIC0xMzEsMTAgKzEzMSwxMCBAQCBDRkxBR1MgPSBAQ0ZMQUdTQAorIENQUEZMQUdTID0gQENQUEZMQUdTQAorIAorICMgSU5URVJOQUxfQ0ZMQUdTIGlzIHRoZSBhZ2dyZWdhdGUgb2YgYWxsIG90aGVyICpDRkxBR1MgbWFjcm9zLgorLUlOVEVSTkFMX0NGTEFHU19CQVNFID0gICR7Q0ZMQUdTfSAke0dMT0JBTF9DRkxBR1N9IFwKKytJTlRFUk5BTF9DRkxBR1NfQkFTRSA9ICR7R0xPQkFMX0NGTEFHU30gXAorIAkke1BST0ZJTEVfQ0ZMQUdTfSAke0lOQ0xVREVfQ0ZMQUdTfSAke0NQUEZMQUdTfQorIElOVEVSTkFMX1dBUk5fQ0ZMQUdTID0gICR7SU5URVJOQUxfQ0ZMQUdTX0JBU0V9ICQoV0FSTl9DRkxBR1MpCistSU5URVJOQUxfQ0ZMQUdTID0gICR7SU5URVJOQUxfV0FSTl9DRkxBR1N9ICQoV0VSUk9SX0NGTEFHUykgLURHREJTRVJWRVIKKytJTlRFUk5BTF9DRkxBR1MgPSAgJHtJTlRFUk5BTF9XQVJOX0NGTEFHU30gJChXRVJST1JfQ0ZMQUdTKSAke0NGTEFHU30gLURHREJTRVJWRVIKKyAKKyAjIExERkxBR1MgaXMgc3BlY2lmaWNhbGx5IHJlc2VydmVkIGZvciBzZXR0aW5nIGZyb20gdGhlIGNvbW1hbmQgbGluZQorICMgd2hlbiBydW5uaW5nIG1ha2UuCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMy1BZGQtc3VwcG9ydC1mb3ItUmVuZXNhcy1TSC1zaDQtYXJjaGl0ZWN0dXJlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAzLUFkZC1zdXBwb3J0LWZvci1SZW5lc2FzLVNILXNoNC1hcmNoaXRlY3R1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEzZTIyYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMy1BZGQtc3VwcG9ydC1mb3ItUmVuZXNhcy1TSC1zaDQtYXJjaGl0ZWN0dXJlLnBhdGNoCkBAIC0wLDAgKzEsOTIxIEBACitGcm9tIDQwN2NiMTNjZmI3MDY5N2Y0NWRmYjc2MTMwNGUwMDVlMWVjYmQwZTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAyOjMxOjEyICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMy8zXSBBZGQgc3VwcG9ydCBmb3IgUmVuZXNhcyBTSCAoc2g0KSBhcmNoaXRlY3R1cmUuCisKK2dkYiAoNy40LTF+Y3ZzMjAxMTExMTcuMikgZXhwZXJpbWVudGFsOyB1cmdlbmN5PWxvdworIC4KKyAgICogQWRkIFJlbmVzYXMgU0ggKHNoNCkgc3VwcG9ydCAoQ2xvc2VzOiAjNTc2MjQyKQorICAgICAtIFRoYW5rcyBOb2J1aGlybyBJd2FtYXRzdSwgVGFrYXNoaSBZb3NoaWkuCitBdXRob3I6IEhlY3RvciBPcm9uIDx6dW1iaUBkZWJpYW4ub3JnPgorQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy81NzYyNDIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ2RiL01ha2VmaWxlLmluICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKKyBnZGIvY29uZmlndXJlLmhvc3QgICAgICAgICAgICAgICAgICAgfCAgIDEgKworIGdkYi9zaC1saW51eC10ZGVwLmMgICAgICAgICAgICAgICAgICB8IDUxOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGdkYi9zaC10ZGVwLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICA1NCArKy0tCisgZ2RiL3NoLXRkZXAuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQ5ICsrKysKKyBnZGIvdGVzdHN1aXRlL2dkYi5hc20vYXNtLXNvdXJjZS5leHAgfCAgIDUgKworIGdkYi90ZXN0c3VpdGUvZ2RiLmFzbS9zaC5pbmMgICAgICAgICB8ICAgMyArLQorIGdkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMS5jICAgICB8ICAgMyArCisgZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGEzLmMgICAgIHwgICA0ICsKKyBnZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ2FsbC5jICAgICAgfCAgIDMgKworIGdkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnbmFscy5jICAgICB8ICAgNCArCisgMTEgZmlsZXMgY2hhbmdlZCwgNjE3IGluc2VydGlvbnMoKyksIDI5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2RiL01ha2VmaWxlLmluIGIvZ2RiL01ha2VmaWxlLmluCitpbmRleCA3OTM3ODAxLi42M2JhZjgxIDEwMDY0NAorLS0tIGEvZ2RiL01ha2VmaWxlLmluCisrKysgYi9nZGIvTWFrZWZpbGUuaW4KK0BAIC0xNzA3LDYgKzE3MDcsNyBAQCBBTExERVBGSUxFUyA9IFwKKyAJc2NvcmUtdGRlcC5jIFwKKyAJc2VyLWdvMzIuYyBzZXItcGlwZS5jIHNlci10Y3AuYyBzZXItbWluZ3cuYyBcCisgCXNoLXRkZXAuYyBzaDY0LXRkZXAuYyBzaG5ic2QtdGRlcC5jIHNobmJzZC1uYXQuYyBcCisrCXNoLWxpbnV4LXRkZXAuYyBzaC1saW51eC1uYXQuYyBcCisgCXNvbDItdGRlcC5jIFwKKyAJc29saWItc3ZyNC5jIFwKKyAJc3BhcmMtbGludXgtbmF0LmMgc3BhcmMtbGludXgtdGRlcC5jIFwKK2RpZmYgLS1naXQgYS9nZGIvY29uZmlndXJlLmhvc3QgYi9nZGIvY29uZmlndXJlLmhvc3QKK2luZGV4IGQwN2JlNGIuLmI2MzkxYzUgMTAwNjQ0CistLS0gYS9nZGIvY29uZmlndXJlLmhvc3QKKysrKyBiL2dkYi9jb25maWd1cmUuaG9zdAorQEAgLTE1MCw2ICsxNTAsNyBAQCBwb3dlcnBjKi0qLWxpbnV4KikJZ2RiX2hvc3Q9bGludXggOzsKKyAKKyBzMzkwKi0qLWxpbnV4KikJCWdkYl9ob3N0PWxpbnV4IDs7CisgCisrc2gqLSotbGludXgqKQkJZ2RiX2hvc3Q9bGludXggOzsKKyBzaCotKi1uZXRic2RlbGYqIHwgc2gqLSota25ldGJzZCotZ251KQorIAkJCWdkYl9ob3N0PW5ic2QgOzsKKyBzaCotKi1vcGVuYnNkKikJCWdkYl9ob3N0PW5ic2QgOzsKK2RpZmYgLS1naXQgYS9nZGIvc2gtbGludXgtdGRlcC5jIGIvZ2RiL3NoLWxpbnV4LXRkZXAuYworaW5kZXggMmZmMmVlOC4uMWExMTI2MiAxMDA2NDQKKy0tLSBhL2dkYi9zaC1saW51eC10ZGVwLmMKKysrKyBiL2dkYi9zaC1saW51eC10ZGVwLmMKK0BAIC0xOCwxNCArMTgsMzcgQEAKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisgI2luY2x1ZGUgImRlZnMuaCIKKysjaW5jbHVkZSAiZ2RiY29yZS5oIgorKyNpbmNsdWRlICJmcmFtZS5oIgorKyNpbmNsdWRlICJmcmFtZS1iYXNlLmgiCisrI2luY2x1ZGUgImZyYW1lLXVud2luZC5oIgorKyNpbmNsdWRlICJkd2FyZjItZnJhbWUuaCIKKysjaW5jbHVkZSAidmFsdWUuaCIKKysjaW5jbHVkZSAicmVnY2FjaGUuaCIKKysjaW5jbHVkZSAiaW5mZXJpb3IuaCIKKyAjaW5jbHVkZSAib3NhYmkuaCIKKyAKKysjaW5jbHVkZSAicmVnZ3JvdXBzLmgiCisrI2luY2x1ZGUgImFyY2gtdXRpbHMuaCIKKysjaW5jbHVkZSAiZmxvYXRmb3JtYXQuaCIKKyAjaW5jbHVkZSAic29saWItc3ZyNC5oIgorICNpbmNsdWRlICJzeW10YWIuaCIKKysjaW5jbHVkZSAiZ2RiX3N0cmluZy5oIgorKyNpbmNsdWRlICJjb21tYW5kLmgiCisrI2luY2x1ZGUgImdkYl9hc3NlcnQuaCIKKyAKKyAjaW5jbHVkZSAidHJhZC1mcmFtZS5oIgorICNpbmNsdWRlICJ0cmFtcC1mcmFtZS5oIgorIAorKyNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKysjaW5jbHVkZSA8c3lzL3VzZXIuaD4KKysjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKysKKysjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorKworKyNpbmNsdWRlICJyZWdzZXQuaCIKKyAjaW5jbHVkZSAiZ2xpYmMtdGRlcC5oIgorICNpbmNsdWRlICJzaC10ZGVwLmgiCisgI2luY2x1ZGUgImxpbnV4LXRkZXAuaCIKK0BAIC0xODAsOSArMjAzLDUwNSBAQCBzdGF0aWMgc3RydWN0IHRyYW1wX2ZyYW1lIHNoX2xpbnV4X3J0X3NpZ3JldHVybl90cmFtcF9mcmFtZSA9IHsKKyAgIHNoX2xpbnV4X3J0X3NpZ3JldHVybl9pbml0CisgfTsKKyAKKysvKiBSZWNvZ25pemluZyBzaWduYWwgaGFuZGxlciBmcmFtZXMuICAqLworKworKy8qIEdOVS9MaW51eCBoYXMgdHdvIGZsYXZvcnMgb2Ygc2lnbmFscy4gIE5vcm1hbCBzaWduYWwgaGFuZGxlcnMsIGFuZAorKyAgICJyZWFsdGltZSIgKFJUKSBzaWduYWxzLiAgVGhlIFJUIHNpZ25hbHMgY2FuIHByb3ZpZGUgYWRkaXRpb25hbAorKyAgIGluZm9ybWF0aW9uIHRvIHRoZSBzaWduYWwgaGFuZGxlciBpZiB0aGUgU0FfU0lHSU5GTyBmbGFnIGlzIHNldAorKyAgIHdoZW4gZXN0YWJsaXNoaW5nIGEgc2lnbmFsIGhhbmRsZXIgdXNpbmcgYHNpZ2FjdGlvbicuICBJdCBpcyBub3QKKysgICB1bmxpa2VseSB0aGF0IGZ1dHVyZSB2ZXJzaW9ucyBvZiBHTlUvTGludXggd2lsbCBzdXBwb3J0IFNBX1NJR0lORk8KKysgICBmb3Igbm9ybWFsIHNpZ25hbHMgdG9vLiAgKi8KKysKKysvKiBXaGVuIHRoZSBTSCBMaW51eCBrZXJuZWwgY2FsbHMgYSBzaWduYWwgaGFuZGxlciBhbmQgdGhlCisrICAgU0FfUkVTVE9SRVIgZmxhZyBpc24ndCBzZXQsIHRoZSByZXR1cm4gYWRkcmVzcyBwb2ludHMgdG8gYSBiaXQgb2YKKysgICBjb2RlIG9uIHRoZSBzdGFjay4gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB3aGV0aGVyIHRoZSBQQyBhcHBlYXJzIHRvCisrICAgYmUgd2l0aGluIHRoaXMgYml0IG9mIGNvZGUuCisrCisrICAgVGhlIGluc3RydWN0aW9uIHNlcXVlbmNlIGZvciBub3JtYWwgc2lnbmFscyBpcworKyAgICAgICBtb3YudyAgMWYscjMKKysgICAgICAgdHJhcGEgICMxNgorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgMTogLndvcmQgIF9fTlJfc2lncmV0dXJuCisrICAgb3IgMHg5MzA1IDB4YzMxMCAweDIwMGIgMHgyMDBiIDB4MjAwYiAweDIwMGIgMHgyMDBiIDB4MDA3Ny4KKysKKysgICBDaGVja2luZyBmb3IgdGhlIGNvZGUgc2VxdWVuY2Ugc2hvdWxkIGJlIHNvbWV3aGF0IHJlbGlhYmxlLCBiZWNhdXNlCisrICAgdGhlIGVmZmVjdCBpcyB0byBjYWxsIHRoZSBzeXN0ZW0gY2FsbCBzaWdyZXR1cm4uICBUaGlzIGlzIHVubGlrZWx5CisrICAgdG8gb2NjdXIgYW55d2hlcmUgb3RoZXIgdGhhbiBhIHNpZ25hbCB0cmFtcG9saW5lLgorKworKyAgIEl0IGtpbmQgb2Ygc3Vja3MgdGhhdCB3ZSBoYXZlIHRvIHJlYWQgbWVtb3J5IGZyb20gdGhlIHByb2Nlc3MgaW4KKysgICBvcmRlciB0byBpZGVudGlmeSBhIHNpZ25hbCB0cmFtcG9saW5lLCBidXQgdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlCisrICAgYW55IG90aGVyIHdheS4gIFRoZSBQQ19JTl9TSUdUUkFNUCBtYWNybyBpbiB0bS1saW51eC5oIGFycmFuZ2VzIHRvCisrICAgb25seSBjYWxsIHVzIGlmIG5vIGZ1bmN0aW9uIG5hbWUgY291bGQgYmUgaWRlbnRpZmllZCwgd2hpY2ggc2hvdWxkCisrICAgYmUgdGhlIGNhc2Ugc2luY2UgdGhlIGNvZGUgaXMgb24gdGhlIHN0YWNrLgorKworKyAgIERldGVjdGlvbiBvZiBzaWduYWwgdHJhbXBvbGluZXMgZm9yIGhhbmRsZXJzIHRoYXQgc2V0IHRoZQorKyAgIFNBX1JFU1RPUkVSIGZsYWcgaXMgaW4gZ2VuZXJhbCBub3QgcG9zc2libGUuICBVbmZvcnR1bmF0ZWx5IHRoaXMgaXMKKysgICB3aGF0IHRoZSBHTlUgQyBMaWJyYXJ5IGhhcyBiZWVuIGRvaW5nIGZvciBxdWl0ZSBzb21lIHRpbWUgbm93LgorKyAgIEhvd2V2ZXIsIGFzIG9mIHZlcnNpb24gMi4xLjIsIHRoZSBHTlUgQyBMaWJyYXJ5IHVzZXMgc2lnbmFsCisrICAgdHJhbXBvbGluZXMgKG5hbWVkIF9fcmVzdG9yZSBhbmQgX19yZXN0b3JlX3J0KSB0aGF0IGFyZSBpZGVudGljYWwKKysgICB0byB0aGUgb25lcyB1c2VkIGJ5IHRoZSBrZXJuZWwuICBUaGVyZWZvcmUsIHRoZXNlIHRyYW1wb2xpbmVzIGFyZQorKyAgIHN1cHBvcnRlZCB0b28uICAqLworKworKyNkZWZpbmUgTU9WVyhuKQkgKDB4OTMwMHwoKG4pLTIpKQkvKiBNb3ZlIG1lbSB3b3JkIGF0IFBDK24gdG8gUjMgKi8KKysjZGVmaW5lIFRSQVAxNgkgMHhjMzEwCQkJLyogU3lzY2FsbCB3L25vIGFyZ3MgKE5SIGluIFIzKSAqLworKyNkZWZpbmUgT1JfUjBfUjAgMHgyMDBiCQkJLyogb3IgcjAscjAgKGluc2VydCB0byBhdm9pZCBoYXJkd2FyZSBidWcpICovCisrCisrI2RlZmluZSBMSU5VWF9TSUdUUkFNUF9JTlNOMAlNT1ZXKDcpCQkvKiBNb3ZlIG1lbSB3b3JkIGF0IFBDKzcgdG8gUjMgKi8KKysjZGVmaW5lIExJTlVYX1NJR1RSQU1QX0lOU04xCVRSQVAxNgkJLyogU3lzY2FsbCB3L25vIGFyZ3MgKE5SIGluIFIzKSAqLworKyNkZWZpbmUgTElOVVhfU0lHVFJBTVBfSU5TTjIJT1JfUjBfUjAJLyogb3IgcjAscjAgKGluc2VydCB0byBhdm9pZCBoYXJkd2FyZSBidWcpICovCisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGxpbnV4X3NpZ3RyYW1wX2NvZGVbXSA9CisreworKyAgTElOVVhfU0lHVFJBTVBfSU5TTjAsCisrICBMSU5VWF9TSUdUUkFNUF9JTlNOMSwKKysgIExJTlVYX1NJR1RSQU1QX0lOU04yLAorKyAgTElOVVhfU0lHVFJBTVBfSU5TTjIsCisrICBMSU5VWF9TSUdUUkFNUF9JTlNOMiwKKysgIExJTlVYX1NJR1RSQU1QX0lOU04yLAorKyAgTElOVVhfU0lHVFJBTVBfSU5TTjIsCisrICBfX05SX3NpZ3JldHVybgorK307CisrCisrI2RlZmluZSBMSU5VWF9TSUdUUkFNUF9MRU4gKHNpemVvZiBsaW51eF9zaWd0cmFtcF9jb2RlKQorKworKy8qIElmIFBDIGlzIGluIGEgc2lndHJhbXAgcm91dGluZSwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBzdGFydCBvZgorKyAgIHRoZSByb3V0aW5lLiAgT3RoZXJ3aXNlLCByZXR1cm4gMC4gICovCisrCisrc3RhdGljIENPUkVfQUREUgorK3NoX2xpbnV4X3NpZ3RyYW1wX3N0YXJ0IChzdHJ1Y3QgZnJhbWVfaW5mbyAqbmV4dF9mcmFtZSkKKyt7CisrICBDT1JFX0FERFIgcGMgPSBnZXRfZnJhbWVfcGMgKG5leHRfZnJhbWUpOworKyAgZ2RiX2J5dGUgYnVmW0xJTlVYX1NJR1RSQU1QX0xFTl07CisrCisrICAvKiBXZSBvbmx5IHJlY29nbml6ZSBhIHNpZ25hbCB0cmFtcG9saW5lIGlmIFBDIGlzIGF0IHRoZSBzdGFydCBvZgorKyAgICAgb25lIG9mIHRoZSB0aHJlZSBpbnN0cnVjdGlvbnMuICBXZSBvcHRpbWl6ZSBmb3IgZmluZGluZyB0aGUgUEMgYXQKKysgICAgIHRoZSBzdGFydCwgYXMgd2lsbCBiZSB0aGUgY2FzZSB3aGVuIHRoZSB0cmFtcG9saW5lIGlzIG5vdCB0aGUKKysgICAgIGZpcnN0IGZyYW1lIG9uIHRoZSBzdGFjay4gIFdlIGFzc3VtZSB0aGF0IGluIHRoZSBjYXNlIHdoZXJlIHRoZQorKyAgICAgUEMgaXMgbm90IGF0IHRoZSBzdGFydCBvZiB0aGUgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UsIHRoZXJlIHdpbGwgYmUKKysgICAgIGEgZmV3IHRyYWlsaW5nIHJlYWRhYmxlIGJ5dGVzIG9uIHRoZSBzdGFjay4gICovCisrCisrICBpZiAoIXNhZmVfZnJhbWVfdW53aW5kX21lbW9yeSAobmV4dF9mcmFtZSwgcGMsIGJ1ZiwgTElOVVhfU0lHVFJBTVBfTEVOKSkKKysgICAgcmV0dXJuIDA7CisrCisrICBpZiAoYnVmWzBdICE9IExJTlVYX1NJR1RSQU1QX0lOU04wKQorKyAgICB7CisrICAgICAgaWYgKGJ1ZlswXSAhPSBMSU5VWF9TSUdUUkFNUF9JTlNOMSkKKysgICAgICAgIHJldHVybiAwOworKworKyAgICAgIHBjIC09IDI7CisrCisrICAgICAgaWYgKCFzYWZlX2ZyYW1lX3Vud2luZF9tZW1vcnkgKG5leHRfZnJhbWUsIHBjLCBidWYsIExJTlVYX1NJR1RSQU1QX0xFTikpCisrCXJldHVybiAwOworKyAgICB9CisrCisrICBpZiAobWVtY21wIChidWYsIGxpbnV4X3NpZ3RyYW1wX2NvZGUsIExJTlVYX1NJR1RSQU1QX0xFTikgIT0gMCkKKysgICAgcmV0dXJuIDA7CisrCisrICByZXR1cm4gcGM7CisrfQorKworKy8qIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgc2FtZSBmb3IgUlQgc2lnbmFscy4gIEhlcmUgdGhlIGluc3RydWN0aW9uCisrICAgc2VxdWVuY2UgaXMKKysgICAgICAgbW92LncgIDFmLHIzCisrICAgICAgIHRyYXBhICAjMTYKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgIDE6IC53b3JkICBfX05SX3J0X3NpZ3JldHVybgorKyAgIG9yIDB4OTMwNSAweGMzMTAgMHgyMDBiIDB4MjAwYiAweDIwMGIgMHgyMDBiIDB4MjAwYiAweDAwYWQuCisrCisrICAgVGhlIGVmZmVjdCBpcyB0byBjYWxsIHRoZSBzeXN0ZW0gY2FsbCBydF9zaWdyZXR1cm4uICAqLworKworKyNkZWZpbmUgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjAJCU1PVlcoNykJCS8qIE1vdmUgbWVtIHdvcmQgYXQgUEMrNyB0byBSMyAqLworKyNkZWZpbmUgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjEJCVRSQVAxNgkJLyogU3lzY2FsbCB3L25vIGFyZ3MgKE5SIGluIFIzKSAqLworKyNkZWZpbmUgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjIJCU9SX1IwX1IwCS8qIG9yIHIwLHIwIChpbnNlcnQgdG8gYXZvaWQgaGFyZHdhcmUgYnVnKSAqLworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBsaW51eF9ydF9zaWd0cmFtcF9jb2RlW10gPQorK3sKKysgIExJTlVYX1JUX1NJR1RSQU1QX0lOU04wLAorKyAgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjEsCisrICBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMiwKKysgIExJTlVYX1JUX1NJR1RSQU1QX0lOU04yLAorKyAgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjIsCisrICBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMiwKKysgIExJTlVYX1JUX1NJR1RSQU1QX0lOU04yLAorKyAgX19OUl9ydF9zaWdyZXR1cm4KKyt9OworKworKyNkZWZpbmUgTElOVVhfUlRfU0lHVFJBTVBfTEVOIChzaXplb2YgbGludXhfcnRfc2lndHJhbXBfY29kZSkKKysKKysvKiBJZiBQQyBpcyBpbiBhIFJUIHNpZ3RyYW1wIHJvdXRpbmUsIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgc3RhcnQKKysgICBvZiB0aGUgcm91dGluZS4gIE90aGVyd2lzZSwgcmV0dXJuIDAuICAqLworKworK3N0YXRpYyBDT1JFX0FERFIKKytzaF9saW51eF9ydF9zaWd0cmFtcF9zdGFydCAoc3RydWN0IGZyYW1lX2luZm8gKm5leHRfZnJhbWUpCisreworKyAgQ09SRV9BRERSIHBjID0gZ2V0X2ZyYW1lX3BjIChuZXh0X2ZyYW1lKTsKKysgIGdkYl9ieXRlIGJ1ZltMSU5VWF9SVF9TSUdUUkFNUF9MRU5dOworKworKyAgLyogV2Ugb25seSByZWNvZ25pemUgYSBzaWduYWwgdHJhbXBvbGluZSBpZiBQQyBpcyBhdCB0aGUgc3RhcnQgb2YKKysgICAgIG9uZSBvZiB0aGUgdHdvIGluc3RydWN0aW9ucy4gIFdlIG9wdGltaXplIGZvciBmaW5kaW5nIHRoZSBQQyBhdAorKyAgICAgdGhlIHN0YXJ0LCBhcyB3aWxsIGJlIHRoZSBjYXNlIHdoZW4gdGhlIHRyYW1wb2xpbmUgaXMgbm90IHRoZQorKyAgICAgZmlyc3QgZnJhbWUgb24gdGhlIHN0YWNrLiAgV2UgYXNzdW1lIHRoYXQgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlCisrICAgICBQQyBpcyBub3QgYXQgdGhlIHN0YXJ0IG9mIHRoZSBpbnN0cnVjdGlvbiBzZXF1ZW5jZSwgdGhlcmUgd2lsbCBiZQorKyAgICAgYSBmZXcgdHJhaWxpbmcgcmVhZGFibGUgYnl0ZXMgb24gdGhlIHN0YWNrLiAgKi8KKysKKysgIGlmICghc2FmZV9mcmFtZV91bndpbmRfbWVtb3J5IChuZXh0X2ZyYW1lLCBwYywgYnVmLCBMSU5VWF9SVF9TSUdUUkFNUF9MRU4pKQorKyAgICByZXR1cm4gMDsKKysKKysgIGlmIChidWZbMF0gIT0gTElOVVhfUlRfU0lHVFJBTVBfSU5TTjApCisrICAgIHsKKysgICAgICBpZiAoYnVmWzBdICE9IExJTlVYX1JUX1NJR1RSQU1QX0lOU04xKQorKwlyZXR1cm4gMDsKKysKKysgICAgICBwYyAtPSAyOworKworKyAgICAgIGlmICghc2FmZV9mcmFtZV91bndpbmRfbWVtb3J5IChuZXh0X2ZyYW1lLCBwYywgYnVmLAorKwkJCQkgICAgIExJTlVYX1JUX1NJR1RSQU1QX0xFTikpCisrCXJldHVybiAwOworKyAgICB9CisrCisrICBpZiAobWVtY21wIChidWYsIGxpbnV4X3J0X3NpZ3RyYW1wX2NvZGUsIExJTlVYX1JUX1NJR1RSQU1QX0xFTikgIT0gMCkKKysgICAgcmV0dXJuIDA7CisrCisrICByZXR1cm4gcGM7CisrfQorKworKy8qIFJldHVybiB3aGV0aGVyIFBDIGlzIGluIGEgR05VL0xpbnV4IHNpZ3RyYW1wIHJvdXRpbmUuICAqLworKworK3N0YXRpYyBpbnQKKytzaF9saW51eF9zaWd0cmFtcF9wIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSkKKyt7CisrICBDT1JFX0FERFIgcGMgPSBnZXRfZnJhbWVfcGMgKHRoaXNfZnJhbWUpOworKyAgY2hhciAqbmFtZTsKKysKKysgIGZpbmRfcGNfcGFydGlhbF9mdW5jdGlvbiAocGMsICZuYW1lLCBOVUxMLCBOVUxMKTsKKysKKysgIC8qIElmIHdlIGhhdmUgTkFNRSwgd2UgY2FuIG9wdGltaXplIHRoZSBzZWFyY2guICBUaGUgdHJhbXBvbGluZXMgYXJlCisrICAgICBuYW1lZCBfX3Jlc3RvcmUgYW5kIF9fcmVzdG9yZV9ydC4gIEhvd2V2ZXIsIHRoZXkgYXJlbid0IGR5bmFtaWNhbGx5CisrICAgICBleHBvcnRlZCBmcm9tIHRoZSBzaGFyZWQgQyBsaWJyYXJ5LCBzbyB0aGUgdHJhbXBvbGluZSBtYXkgYXBwZWFyIHRvCisrICAgICBiZSBwYXJ0IG9mIHRoZSBwcmVjZWRpbmcgZnVuY3Rpb24uICBUaGlzIHNob3VsZCBhbHdheXMgYmUgc2lnYWN0aW9uLAorKyAgICAgX19zaWdhY3Rpb24sIG9yIF9fbGliY19zaWdhY3Rpb24gKGFsbCBhbGlhc2VzIHRvIHRoZSBzYW1lIGZ1bmN0aW9uKS4gICovCisrICBpZiAobmFtZSA9PSBOVUxMIHx8IHN0cnN0ciAobmFtZSwgInNpZ2FjdGlvbiIpICE9IE5VTEwpCisrICAgIHJldHVybiAoc2hfbGludXhfc2lndHJhbXBfc3RhcnQgKHRoaXNfZnJhbWUpICE9IDAKKysJICAgIHx8IHNoX2xpbnV4X3J0X3NpZ3RyYW1wX3N0YXJ0ICh0aGlzX2ZyYW1lKSAhPSAwKTsKKysKKysgIHJldHVybiAoc3RyY21wICgiX19yZXN0b3JlIiwgbmFtZSkgPT0gMAorKwkgIHx8IHN0cmNtcCAoIl9fcmVzdG9yZV9ydCIsIG5hbWUpID09IDApOworK30KKysKKysvKiBPZmZzZXQgdG8gc3RydWN0IHNpZ2NvbnRleHQgaW4gdWNvbnRleHQsIGZyb20gPGFzbS91Y29udGV4dC5oPi4gICovCisrI2RlZmluZSBTSF9MSU5VWF9VQ09OVEVYVF9TSUdDT05URVhUX09GRlNFVCAxMgorKworKworKy8qIEFzc3VtaW5nIE5FWFRfRlJBTUUgaXMgYSBmcmFtZSBmb2xsb3dpbmcgYSBHTlUvTGludXggc2lndHJhbXAKKysgICByb3V0aW5lLCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIGFzc29jaWF0ZWQgc2lnY29udGV4dCBzdHJ1Y3R1cmUuICAqLworKworK3N0YXRpYyBDT1JFX0FERFIKKytzaF9saW51eF9zaWdjb250ZXh0X2FkZHIgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lKQorK3sKKysgIENPUkVfQUREUiBwYzsKKysgIENPUkVfQUREUiBzcDsKKysKKysgIHNwID0gZ2V0X2ZyYW1lX3JlZ2lzdGVyX3Vuc2lnbmVkICh0aGlzX2ZyYW1lLCBTUF9SRUdOVU0pOworKworKyAgcGMgPSBzaF9saW51eF9zaWd0cmFtcF9zdGFydCAodGhpc19mcmFtZSk7CisrICBpZiAocGMpCisrICAgIHsKKysgICAgICByZXR1cm4gc3A7CisrICAgIH0KKysKKysgIHBjID0gc2hfbGludXhfcnRfc2lndHJhbXBfc3RhcnQgKHRoaXNfZnJhbWUpOworKyAgaWYgKHBjKQorKyAgICB7CisrICAgICAgQ09SRV9BRERSIHVjb250ZXh0X2FkZHI7CisrCisrICAgICAgLyogVGhlIHNpZ2NvbnRleHQgc3RydWN0dXJlIGlzIHBhcnQgb2YgdGhlIHVzZXIgY29udGV4dC4gIEEKKysJIHBvaW50ZXIgdG8gdGhlIHVzZXIgY29udGV4dCBpcyBwYXNzZWQgYXMgdGhlIHRoaXJkIGFyZ3VtZW50CisrCSB0byB0aGUgc2lnbmFsIGhhbmRsZXIuICAqLworKyAgICAgIHVjb250ZXh0X2FkZHIgPSBnZXRfZnJhbWVfcmVnaXN0ZXJfdW5zaWduZWQgKHRoaXNfZnJhbWUsIEFSRzBfUkVHTlVNKzIpOworKyAgICAgIHJldHVybiB1Y29udGV4dF9hZGRyICsgU0hfTElOVVhfVUNPTlRFWFRfU0lHQ09OVEVYVF9PRkZTRVQ7CisrICAgIH0KKysKKysgIGVycm9yICgiQ291bGRuJ3QgcmVjb2duaXplIHNpZ25hbCB0cmFtcG9saW5lLiIpOworKyAgcmV0dXJuIDA7CisrfQorKworKy8qIFNpZ25hbCB0cmFtcG9saW5lcy4gICovCisrZXh0ZXJuIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqc2hfYWxsb2NfZnJhbWVfY2FjaGUgKHZvaWQpOworKworK3N0YXRpYyBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKgorK3NoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX2NhY2hlIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwgdm9pZCAqKnRoaXNfY2FjaGUpCisreworKyAgc3RydWN0IHNoX2ZyYW1lX2NhY2hlICpjYWNoZTsKKysgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKGdldF9jdXJyZW50X2FyY2ggKCkpOworKyAgQ09SRV9BRERSIHNpZ2NvbnRleHRfYWRkcjsKKysKKysgIGlmICgqdGhpc19jYWNoZSkKKysgICAgcmV0dXJuICp0aGlzX2NhY2hlOworKworKyAgY2FjaGUgPSBzaF9hbGxvY19mcmFtZV9jYWNoZSAoKTsKKysKKysgIGNhY2hlLT5iYXNlID0gZ2V0X2ZyYW1lX3JlZ2lzdGVyX3Vuc2lnbmVkICh0aGlzX2ZyYW1lLCBTUF9SRUdOVU0pOworKyAgc2lnY29udGV4dF9hZGRyID0gdGRlcC0+c2lnY29udGV4dF9hZGRyICh0aGlzX2ZyYW1lKTsKKysgIGlmICh0ZGVwLT5zY19yZWdfb2Zmc2V0KQorKyAgICB7CisrICAgICAgaW50IGk7CisrCisrICAgICAgZ2RiX2Fzc2VydCAodGRlcC0+c2NfbnVtX3JlZ3MgPD0gU0hfTlVNX1JFR1MpOworKworKyAgICAgIGZvciAoaSA9IDA7IGkgPCB0ZGVwLT5zY19udW1fcmVnczsgaSsrKQorKwlpZiAodGRlcC0+c2NfcmVnX29mZnNldFtpXSAhPSAtMSkKKysJICBjYWNoZS0+c2F2ZWRfcmVnc1tpXSA9IHNpZ2NvbnRleHRfYWRkciArIHRkZXAtPnNjX3JlZ19vZmZzZXRbaV07CisrICAgIH0KKysKKysgICp0aGlzX2NhY2hlID0gY2FjaGU7CisrICByZXR1cm4gY2FjaGU7CisrfQorKworK3N0YXRpYyB2b2lkCisrc2hfbGludXhfc2lndHJhbXBfZnJhbWVfdGhpc19pZCAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKip0aGlzX2NhY2hlLAorKwkJCSAgICAgc3RydWN0IGZyYW1lX2lkICp0aGlzX2lkKQorK3sKKysgIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqY2FjaGUgPQorKyAgICBzaF9saW51eF9zaWd0cmFtcF9mcmFtZV9jYWNoZSAodGhpc19mcmFtZSwgdGhpc19jYWNoZSk7CisrCisrICAoKnRoaXNfaWQpID0gZnJhbWVfaWRfYnVpbGQgKGNhY2hlLT5iYXNlICsgNjQsIGNhY2hlLT5wYyk7CisrfQorKworK2V4dGVybiBzdHJ1Y3QgdmFsdWUgKiBzaF9mcmFtZV9wcmV2X3JlZ2lzdGVyICgpOworK3N0YXRpYyBzdHJ1Y3QgdmFsdWUgKgorK3NoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLAorKyAgICAgICAgICAgICAgICAgICB2b2lkICoqdGhpc19jYWNoZSwgaW50IHJlZ251bSkKKyt7CisrICBzaF9saW51eF9zaWd0cmFtcF9mcmFtZV9jYWNoZSAodGhpc19mcmFtZSwgdGhpc19jYWNoZSk7CisrCisrICByZXR1cm4gc2hfZnJhbWVfcHJldl9yZWdpc3RlciAodGhpc19mcmFtZSwgdGhpc19jYWNoZSwgcmVnbnVtKTsKKyt9CisrCisrc3RhdGljIGludAorK3NoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX3NuaWZmZXIgKGNvbnN0IHN0cnVjdCBmcmFtZV91bndpbmQgKnNlbGYsCisrICAgICAgICAgICAgICAgICBzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwKKysgICAgICAgICAgICAgICAgIHZvaWQgKip0aGlzX3Byb2xvZ3VlX2NhY2hlKQorK3sKKysgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKGdldF9mcmFtZV9hcmNoICh0aGlzX2ZyYW1lKSk7CisrCisrICAvKiBXZSBzaG91bGRuJ3QgZXZlbiBib3RoZXIgaWYgd2UgZG9uJ3QgaGF2ZSBhIHNpZ2NvbnRleHRfYWRkcgorKyAgICAgaGFuZGxlci4gICovCisrICBpZiAodGRlcC0+c2lnY29udGV4dF9hZGRyID09IE5VTEwpCisrICAgIHJldHVybiAwOworKworKyAgaWYgKHRkZXAtPnNpZ3RyYW1wX3AgIT0gTlVMTCkKKysgICAgeworKyAgICAgIGlmICh0ZGVwLT5zaWd0cmFtcF9wICh0aGlzX2ZyYW1lKSkKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGZyYW1lX3Vud2luZCBzaF9saW51eF9zaWd0cmFtcF9mcmFtZV91bndpbmQgPQorK3sKKysgIFNJR1RSQU1QX0ZSQU1FLAorKyAgc2hfbGludXhfc2lndHJhbXBfZnJhbWVfdGhpc19pZCwKKysgIHNoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX3ByZXZfcmVnaXN0ZXIsCisrICBOVUxMLAorKyAgc2hfbGludXhfc2lndHJhbXBfZnJhbWVfc25pZmZlcgorK307CisrCisrLyogU3VwcGx5IHJlZ2lzdGVyIFJFR05VTSBmcm9tIHRoZSBidWZmZXIgc3BlY2lmaWVkIGJ5IEdSRUdTIGFuZCBMRU4KKysgICBpbiB0aGUgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIHNldCBSRUdTRVQgdG8gcmVnaXN0ZXIgY2FjaGUKKysgICBSRUdDQUNIRS4gIElmIFJFR05VTSBpcyAtMSwgZG8gdGhpcyBmb3IgYWxsIHJlZ2lzdGVycyBpbiBSRUdTRVQuICAqLworKworK3ZvaWQKKytzaF9zdXBwbHlfZ3JlZ3NldCAoY29uc3Qgc3RydWN0IHJlZ3NldCAqcmVnc2V0LCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAorKyAgICAgICAgICAgICBpbnQgcmVnbnVtLCBjb25zdCB2b2lkICpncmVncywgc2l6ZV90IGxlbikKKyt7CisrICBjb25zdCBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChyZWdzZXQtPmFyY2gpOworKyAgY29uc3QgY2hhciAqcmVncyA9IGdyZWdzOworKyAgaW50IGk7CisrCisrICBnZGJfYXNzZXJ0IChsZW4gPT0gdGRlcC0+c2l6ZW9mX2dyZWdzZXQpOworKworKyAgZm9yIChpID0gMDsgaSA8IHRkZXAtPmdyZWdzZXRfbnVtX3JlZ3M7IGkrKykKKysgICAgeworKyAgICAgIGlmICgocmVnbnVtID09IGkgfHwgcmVnbnVtID09IC0xKQorKyAgICAgICYmIHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldFtpXSAhPSAtMSkKKysgICAgcmVnY2FjaGVfcmF3X3N1cHBseSAocmVnY2FjaGUsIGksIHJlZ3MgKyB0ZGVwLT5ncmVnc2V0X3JlZ19vZmZzZXRbaV0pOworKyAgICB9CisrfQorKworKy8qIENvbGxlY3QgcmVnaXN0ZXIgUkVHTlVNIGZyb20gdGhlIHJlZ2lzdGVyIGNhY2hlIFJFR0NBQ0hFIGFuZCBzdG9yZQorKyAgIGl0IGluIHRoZSBidWZmZXIgc3BlY2lmaWVkIGJ5IEdSRUdTIGFuZCBMRU4gYXMgZGVzY3JpYmVkIGJ5IHRoZQorKyAgIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBzZXQgUkVHU0VULiAgSWYgUkVHTlVNIGlzIC0xLCBkbyB0aGlzIGZvcgorKyAgIGFsbCByZWdpc3RlcnMgaW4gUkVHU0VULiAgKi8KKysKKyt2b2lkCisrc2hfY29sbGVjdF9ncmVnc2V0IChjb25zdCBzdHJ1Y3QgcmVnc2V0ICpyZWdzZXQsCisrICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAorKyAgICAgICAgICAgICAgaW50IHJlZ251bSwgdm9pZCAqZ3JlZ3MsIHNpemVfdCBsZW4pCisreworKyAgY29uc3Qgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAocmVnc2V0LT5hcmNoKTsKKysgIGNoYXIgKnJlZ3MgPSBncmVnczsKKysgIGludCBpOworKworKyAgZ2RiX2Fzc2VydCAobGVuID09IHRkZXAtPnNpemVvZl9ncmVnc2V0KTsKKysKKysgIGZvciAoaSA9IDA7IGkgPCB0ZGVwLT5ncmVnc2V0X251bV9yZWdzOyBpKyspCisrICAgIHsKKysgICAgICBpZiAoKHJlZ251bSA9PSBpIHx8IHJlZ251bSA9PSAtMSkKKysgICAgICAmJiB0ZGVwLT5ncmVnc2V0X3JlZ19vZmZzZXRbaV0gIT0gLTEpCisrICAgIHJlZ2NhY2hlX3Jhd19jb2xsZWN0IChyZWdjYWNoZSwgaSwgcmVncyArIHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldFtpXSk7CisrICAgIH0KKyt9CisrCisrLyogU3VwcGx5IHJlZ2lzdGVyIFJFR05VTSBmcm9tIHRoZSBidWZmZXIgc3BlY2lmaWVkIGJ5IEZQUkVHUyBhbmQgTEVOCisrICAgaW4gdGhlIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIHNldCBSRUdTRVQgdG8gcmVnaXN0ZXIgY2FjaGUKKysgICBSRUdDQUNIRS4gIElmIFJFR05VTSBpcyAtMSwgZG8gdGhpcyBmb3IgYWxsIHJlZ2lzdGVycyBpbiBSRUdTRVQuICAqLworKworK3N0YXRpYyB2b2lkCisrc2hfc3VwcGx5X2ZwcmVnc2V0IChjb25zdCBzdHJ1Y3QgcmVnc2V0ICpyZWdzZXQsIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCisrICAgICAgICAgICAgICBpbnQgcmVnbnVtLCBjb25zdCB2b2lkICpmcHJlZ3MsIHNpemVfdCBsZW4pCisreworKyAgY29uc3Qgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAocmVnc2V0LT5hcmNoKTsKKysgIGNvbnN0IGNoYXIgKnJlZ3MgPSBmcHJlZ3M7CisrICBpbnQgaTsKKysKKysgIGdkYl9hc3NlcnQgKGxlbiA9PSB0ZGVwLT5zaXplb2ZfZnByZWdzZXQpOworKyAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisrICAgIHsKKysgICAgICBpZiAocmVnbnVtID09IGkrMjUgfHwgcmVnbnVtID09IC0xKQorKyAgICByZWdjYWNoZV9yYXdfc3VwcGx5IChyZWdjYWNoZSwgaSsyNSwgcmVncyArIGkqNCk7CisrICAgIH0KKysgIGlmIChyZWdudW0gPT0gRlBTQ1JfUkVHTlVNIHx8IHJlZ251bSA9PSAtMSkKKysgICAgcmVnY2FjaGVfcmF3X3N1cHBseSAocmVnY2FjaGUsIEZQU0NSX1JFR05VTSwgcmVncyArIDMyKjQpOworKyAgaWYgKHJlZ251bSA9PSBGUFVMX1JFR05VTSB8fCByZWdudW0gPT0gLTEpCisrICAgIHJlZ2NhY2hlX3Jhd19zdXBwbHkgKHJlZ2NhY2hlLCBGUFVMX1JFR05VTSwgcmVncyArIDMzKjQpOworK30KKysKKysvKiBDb2xsZWN0IHJlZ2lzdGVyIFJFR05VTSBmcm9tIHRoZSByZWdpc3RlciBjYWNoZSBSRUdDQUNIRSBhbmQgc3RvcmUKKysgICBpdCBpbiB0aGUgYnVmZmVyIHNwZWNpZmllZCBieSBGUFJFR1MgYW5kIExFTiBhcyBkZXNjcmliZWQgYnkgdGhlCisrICAgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgc2V0IFJFR1NFVC4gIElmIFJFR05VTSBpcyAtMSwgZG8gdGhpcyBmb3IKKysgICBhbGwgcmVnaXN0ZXJzIGluIFJFR1NFVC4gICovCisrCisrc3RhdGljIHZvaWQKKytzaF9jb2xsZWN0X2ZwcmVnc2V0IChjb25zdCBzdHJ1Y3QgcmVnc2V0ICpyZWdzZXQsCisrICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKKysgICAgICAgICAgICAgICBpbnQgcmVnbnVtLCB2b2lkICpmcHJlZ3MsIHNpemVfdCBsZW4pCisreworKyAgY29uc3Qgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAocmVnc2V0LT5hcmNoKTsKKysgIGNoYXIgKnJlZ3MgPSBmcHJlZ3M7CisrICBpbnQgaTsKKysKKysgIGdkYl9hc3NlcnQgKGxlbiA9PSB0ZGVwLT5zaXplb2ZfZnByZWdzZXQpOworKyAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisrICAgIHsKKysgICAgICBpZiAocmVnbnVtID09IGkrMjUgfHwgcmVnbnVtID09IC0xKQorKyAgICByZWdjYWNoZV9yYXdfY29sbGVjdCAocmVnY2FjaGUsIGkrMjUsIHJlZ3MgKyBpKjQpOworKyAgICB9CisrICBpZiAocmVnbnVtID09IEZQU0NSX1JFR05VTSB8fCByZWdudW0gPT0gLTEpCisrICAgIHJlZ2NhY2hlX3Jhd19jb2xsZWN0IChyZWdjYWNoZSwgRlBTQ1JfUkVHTlVNLCByZWdzICsgMzIqNCk7CisrICBpZiAocmVnbnVtID09IEZQVUxfUkVHTlVNIHx8IHJlZ251bSA9PSAtMSkKKysgICAgcmVnY2FjaGVfcmF3X2NvbGxlY3QgKHJlZ2NhY2hlLCBGUFVMX1JFR05VTSwgcmVncyArIDMzKjQpOworK30KKysKKysvKiBSZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHJlZ2lzdGVyIHNldCBmb3IgdGhlIGNvcmUgc2VjdGlvbiBpZGVudGlmaWVkCisrICAgYnkgU0VDVF9OQU1FIGFuZCBTRUNUX1NJWkUuICAqLworKworK2NvbnN0IHN0cnVjdCByZWdzZXQgKgorK3NoX2xpbnV4X3JlZ3NldF9mcm9tX2NvcmVfc2VjdGlvbiAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsCisrICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNlY3RfbmFtZSwgc2l6ZV90IHNlY3Rfc2l6ZSkKKyt7CisrICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChnZGJhcmNoKTsKKysKKysgIGlmIChzdHJjbXAgKHNlY3RfbmFtZSwgIi5yZWciKSA9PSAwICYmIHNlY3Rfc2l6ZSA9PSB0ZGVwLT5zaXplb2ZfZ3JlZ3NldCkKKysgICAgeworKyAgICAgIGlmICh0ZGVwLT5ncmVnc2V0ID09IE5VTEwpCisrICAgIHRkZXAtPmdyZWdzZXQgPSByZWdzZXRfYWxsb2MgKGdkYmFyY2gsIHNoX3N1cHBseV9ncmVnc2V0LAorKyAgICAgICAgICAgICAgICAgICAgICBzaF9jb2xsZWN0X2dyZWdzZXQpOworKyAgICAgIHJldHVybiB0ZGVwLT5ncmVnc2V0OworKyAgICB9CisrCisrICBpZiAoKHN0cmNtcCAoc2VjdF9uYW1lLCAiLnJlZzIiKSA9PSAwICYmIHNlY3Rfc2l6ZSA9PSB0ZGVwLT5zaXplb2ZfZnByZWdzZXQpKQorKyAgICB7CisrICAgICAgaWYgKHRkZXAtPmZwcmVnc2V0ID09IE5VTEwpCisrICAgIHRkZXAtPmZwcmVnc2V0ID0gcmVnc2V0X2FsbG9jIChnZGJhcmNoLCBzaF9zdXBwbHlfZnByZWdzZXQsCisrICAgICAgICAgICAgICAgICAgICAgICBzaF9jb2xsZWN0X2ZwcmVnc2V0KTsKKysgICAgICByZXR1cm4gdGRlcC0+ZnByZWdzZXQ7CisrICAgIH0KKysKKysgIHJldHVybiBOVUxMOworK30KKysKKysvKiBUaGUgcmVnaXN0ZXIgc2V0cyB1c2VkIGluIEdOVS9MaW51eCBFTEYgY29yZS1kdW1wcyBhcmUgaWRlbnRpY2FsIHRvCisrICAgdGhlIHJlZ2lzdGVyIHNldHMgaW4gYHN0cnVjdCB1c2VyJyB0aGF0IGFyZSB1c2VkIGZvciBhLm91dAorKyAgIGNvcmUtZHVtcHMuICBUaGVzZSBhcmUgYWxzbyB1c2VkIGJ5IHB0cmFjZSgyKS4gIFRoZSBjb3JyZXNwb25kaW5nCisrICAgdHlwZXMgYXJlIGBlbGZfZ3JlZ3NldF90JyBmb3IgdGhlIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMgKHdpdGgKKysgICBgZWxmX2dyZWdfdCcgdGhlIHR5cGUgb2YgYSBzaW5nbGUgR1AgcmVnaXN0ZXIpIGFuZCBgZWxmX2ZwcmVnc2V0X3QnCisrICAgZm9yIHRoZSBmbG9hdGluZy1wb2ludCByZWdpc3RlcnMuCisrCisrICAgVGhvc2UgdHlwZXMgdXNlZCB0byBiZSBhdmFpbGFibGUgdW5kZXIgdGhlIG5hbWVzIGBncmVnc2V0X3QnIGFuZAorKyAgIGBmcHJlZ3NldF90JyB0b28sIGFuZCBHREIgdXNlZCB0aG9zZSBuYW1lcyBpbiB0aGUgcGFzdC4gIEJ1dCB0aG9zZQorKyAgIG5hbWVzIGFyZSBub3cgdXNlZCBmb3IgdGhlIHJlZ2lzdGVyIHNldHMgdXNlZCBpbiB0aGUgYG1jb250ZXh0X3QnCisrICAgdHlwZSwgd2hpY2ggaGF2ZSBhIGRpZmZlcmVudCBzaXplIGFuZCBsYXlvdXQuICAqLworKworKy8qIE1hcHBpbmcgYmV0d2VlbiB0aGUgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycyBpbiBgc3RydWN0IHVzZXInCisrICAgZm9ybWF0IGFuZCBHREIncyByZWdpc3RlciBjYWNoZSBsYXlvdXQuICAqLworKworKy8qIEZyb20gPHN5cy9yZWcuaD4uICAqLworK3N0YXRpYyBpbnQgc2hfbGludXhfZ3JlZ3NldF9yZWdfb2Zmc2V0W10gPQorK3sKKysgMCwJNCwJOCwJMTIsCTE2LAkyMCwJMjQsCTI4LAorKyAzMiwJMzYsCTQwLAk0NCwJNDgsCTUyLAk1NiwJNjAsCisrCisrIFJFR19QQyo0LCAgIFJFR19QUio0LCAgIFJFR19HQlIqNCwgIC0xLAorKyBSRUdfTUFDSCo0LCBSRUdfTUFDTCo0LCBSRUdfU1IqNCwKKyt9OworKworKy8qIE1hcHBpbmcgYmV0d2VlbiB0aGUgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycyBpbiBgc3RydWN0CisrICAgc2lnY29udGV4dCcgZm9ybWF0IGFuZCBHREIncyByZWdpc3RlciBjYWNoZSBsYXlvdXQuICAqLworKworKy8qIEZyb20gPGFzbS9zaWdjb250ZXh0Lmg+LiAgKi8KKytzdGF0aWMgaW50IHNoX2xpbnV4X3NjX3JlZ19vZmZzZXRbXSA9CisreworKyA0LAk4LAkxMiwJMTYsCTIwLAkyNCwJMjgsCTMyLAorKyAzNiwJNDAsCTQ0LAk0OCwJNTIsCTU2LAk2MCwJNjQsCisrIDY4LAk3MiwJODAsCS0xLAorKyA4NCwJODgsCTc2CisrfTsKKysKKyBzdGF0aWMgdm9pZAorIHNoX2xpbnV4X2luaXRfYWJpIChzdHJ1Y3QgZ2RiYXJjaF9pbmZvIGluZm8sIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoKQorIHsKKysgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKGdkYmFyY2gpOworKyAgYmZkIGFiZmQ7CisrCisrICB0ZGVwLT5ncmVnc2V0X3JlZ19vZmZzZXQgPSBzaF9saW51eF9ncmVnc2V0X3JlZ19vZmZzZXQ7CisrICB0ZGVwLT5ncmVnc2V0X251bV9yZWdzID0gQVJSQVlfU0laRSAoc2hfbGludXhfZ3JlZ3NldF9yZWdfb2Zmc2V0KTsKKysgIHRkZXAtPnNpemVvZl9ncmVnc2V0ID0gMjMgKiA0OworKworKyAgdGRlcC0+amJfcGNfb2Zmc2V0ID0gMzI7ICAgICAvKiBGcm9tIDxiaXRzL3NldGptcC5oPi4gICovCisrCisrICB0ZGVwLT5zaWd0cmFtcF9wID0gc2hfbGludXhfc2lndHJhbXBfcDsKKysgIHRkZXAtPnNpZ2NvbnRleHRfYWRkciA9IHNoX2xpbnV4X3NpZ2NvbnRleHRfYWRkcjsKKysgIHRkZXAtPnNjX3JlZ19vZmZzZXQgPSBzaF9saW51eF9zY19yZWdfb2Zmc2V0OworKyAgdGRlcC0+c2NfbnVtX3JlZ3MgPSBBUlJBWV9TSVpFIChzaF9saW51eF9zY19yZWdfb2Zmc2V0KTsKKysKKysgIGZyYW1lX3Vud2luZF9hcHBlbmRfdW53aW5kZXIoZ2RiYXJjaCwgJnNoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX3Vud2luZCk7CisrCisrICAvKiBJZiB3ZSBoYXZlIGEgcmVnaXN0ZXIgbWFwcGluZywgZW5hYmxlIHRoZSBnZW5lcmljIGNvcmUgZmlsZQorKyAgICAgc3VwcG9ydCwgdW5sZXNzIGl0IGhhcyBhbHJlYWR5IGJlZW4gZW5hYmxlZC4gICovCisrICBpZiAodGRlcC0+Z3JlZ3NldF9yZWdfb2Zmc2V0CisrICAgICAgJiYgIWdkYmFyY2hfcmVnc2V0X2Zyb21fY29yZV9zZWN0aW9uX3AgKGdkYmFyY2gpKQorKyAgICBzZXRfZ2RiYXJjaF9yZWdzZXRfZnJvbV9jb3JlX3NlY3Rpb24gKGdkYmFyY2gsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaF9saW51eF9yZWdzZXRfZnJvbV9jb3JlX3NlY3Rpb24pOworKworICAgbGludXhfaW5pdF9hYmkgKGluZm8sIGdkYmFyY2gpOworIAorICAgLyogR05VL0xpbnV4IHVzZXMgU1ZSNC1zdHlsZSBzaGFyZWQgbGlicmFyaWVzLiAgKi8KK2RpZmYgLS1naXQgYS9nZGIvc2gtdGRlcC5jIGIvZ2RiL3NoLXRkZXAuYworaW5kZXggODJjZjJmNC4uYjQ0M2U0NiAxMDA2NDQKKy0tLSBhL2dkYi9zaC10ZGVwLmMKKysrKyBiL2dkYi9zaC10ZGVwLmMKK0BAIC0yMSw2ICsyMSw5IEBACisgICAgc2FjQGN5Z251cy5jb20uICAqLworIAorICNpbmNsdWRlICJkZWZzLmgiCisrI2luY2x1ZGUgImFyY2gtdXRpbHMuaCIKKysjaW5jbHVkZSAiY29tbWFuZC5oIgorKyNpbmNsdWRlICJkdW1teS1mcmFtZS5oIgorICNpbmNsdWRlICJmcmFtZS5oIgorICNpbmNsdWRlICJmcmFtZS1iYXNlLmgiCisgI2luY2x1ZGUgImZyYW1lLXVud2luZC5oIgorQEAgLTM1LDYgKzM4LDcgQEAKKyAjaW5jbHVkZSAiYXJjaC11dGlscy5oIgorICNpbmNsdWRlICJmbG9hdGZvcm1hdC5oIgorICNpbmNsdWRlICJyZWdjYWNoZS5oIgorKyNpbmNsdWRlICJyZWdzZXQuaCIKKyAjaW5jbHVkZSAiZG91Ymxlc3QuaCIKKyAjaW5jbHVkZSAib3NhYmkuaCIKKyAjaW5jbHVkZSAicmVnZ3JvdXBzLmgiCitAQCAtNjcsMjMgKzcxLDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHNoX2NjX2VudW1bXSA9IHsKKyAKKyBzdGF0aWMgY29uc3QgY2hhciAqc2hfYWN0aXZlX2NhbGxpbmdfY29udmVudGlvbiA9IHNoX2NjX2djYzsKKyAKKy0jZGVmaW5lIFNIX05VTV9SRUdTIDY3CistCistc3RydWN0IHNoX2ZyYW1lX2NhY2hlCisteworLSAgLyogQmFzZSBhZGRyZXNzLiAgKi8KKy0gIENPUkVfQUREUiBiYXNlOworLSAgTE9OR0VTVCBzcF9vZmZzZXQ7CistICBDT1JFX0FERFIgcGM7CistCistICAvKiBGbGFnIHNob3dpbmcgdGhhdCBhIGZyYW1lIGhhcyBiZWVuIGNyZWF0ZWQgaW4gdGhlIHByb2xvZ3VlIGNvZGUuICAqLworLSAgaW50IHVzZXNfZnA7CistCistICAvKiBTYXZlZCByZWdpc3RlcnMuICAqLworLSAgQ09SRV9BRERSIHNhdmVkX3JlZ3NbU0hfTlVNX1JFR1NdOworLSAgQ09SRV9BRERSIHNhdmVkX3NwOworLX07CistCisgc3RhdGljIGludAorIHNoX2lzX3JlbmVzYXNfY2FsbGluZ19jb252ZW50aW9uIChzdHJ1Y3QgdHlwZSAqZnVuY190eXBlKQorIHsKK0BAIC0xMDQzLDcgKzEwMzAsNyBAQCBzaF90cmVhdF9hc19mbHRfcCAoc3RydWN0IHR5cGUgKnR5cGUpCisgICAgIHJldHVybiAwOworICAgLyogT3RoZXJ3aXNlIGlmIHRoZSB0eXBlIG9mIHRoYXQgbWVtYmVyIGlzIGZsb2F0LCB0aGUgd2hvbGUgdHlwZSBpcworICAgICAgdHJlYXRlZCBhcyBmbG9hdC4gICovCistICBpZiAoVFlQRV9DT0RFIChUWVBFX0ZJRUxEX1RZUEUgKHR5cGUsIDApKSA9PSBUWVBFX0NPREVfRkxUKQorKyAgaWYgKFRZUEVfQ09ERSAoY2hlY2tfdHlwZWRlZiAoVFlQRV9GSUVMRF9UWVBFICh0eXBlLCAwKSkpID09IFRZUEVfQ09ERV9GTFQpCisgICAgIHJldHVybiAxOworICAgLyogT3RoZXJ3aXNlIGl0J3Mgbm90IHRyZWF0ZWQgYXMgZmxvYXQuICAqLworICAgcmV0dXJuIDA7CitAQCAtMTA5Myw3ICsxMDgwLDcgQEAgc2hfcHVzaF9kdW1teV9jYWxsX2ZwdSAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsCisgICAgICBpbiBmb3VyIHJlZ2lzdGVycyBhdmFpbGFibGUuICBMb29wIHRocnUgYXJncyBmcm9tIGZpcnN0IHRvIGxhc3QuICAqLworICAgZm9yIChhcmdudW0gPSAwOyBhcmdudW0gPCBuYXJnczsgYXJnbnVtKyspCisgICAgIHsKKy0gICAgICB0eXBlID0gdmFsdWVfdHlwZSAoYXJnc1thcmdudW1dKTsKKysgICAgICB0eXBlID0gY2hlY2tfdHlwZWRlZiAodmFsdWVfdHlwZSAoYXJnc1thcmdudW1dKSk7CisgICAgICAgbGVuID0gVFlQRV9MRU5HVEggKHR5cGUpOworICAgICAgIHZhbCA9IHNoX2p1c3RpZnlfdmFsdWVfaW5fcmVnIChnZGJhcmNoLCBhcmdzW2FyZ251bV0sIGxlbik7CisgCitAQCAtMTgyMSw3ICsxODA4LDcgQEAgc2hfZHdhcmYyX2ZyYW1lX2luaXRfcmVnIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgaW50IHJlZ251bSwKKyAgICAgcmVnLT5ob3cgPSBEV0FSRjJfRlJBTUVfUkVHX1VOREVGSU5FRDsKKyB9CisgCistc3RhdGljIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqCisrc3RydWN0IHNoX2ZyYW1lX2NhY2hlICoKKyBzaF9hbGxvY19mcmFtZV9jYWNoZSAodm9pZCkKKyB7CisgICBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKmNhY2hlOworQEAgLTE4NDgsNyArMTgzNSw3IEBAIHNoX2FsbG9jX2ZyYW1lX2NhY2hlICh2b2lkKQorICAgcmV0dXJuIGNhY2hlOworIH0KKyAKKy1zdGF0aWMgc3RydWN0IHNoX2ZyYW1lX2NhY2hlICoKKytzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKgorIHNoX2ZyYW1lX2NhY2hlIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwgdm9pZCAqKnRoaXNfY2FjaGUpCisgeworICAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBnZXRfZnJhbWVfYXJjaCAodGhpc19mcmFtZSk7CitAQCAtMTkxNSw5ICsxOTAyLDkgQEAgc2hfZnJhbWVfY2FjaGUgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoqdGhpc19jYWNoZSkKKyAgIHJldHVybiBjYWNoZTsKKyB9CisgCistc3RhdGljIHN0cnVjdCB2YWx1ZSAqCistc2hfZnJhbWVfcHJldl9yZWdpc3RlciAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsCistCQkJdm9pZCAqKnRoaXNfY2FjaGUsIGludCByZWdudW0pCisrc3RydWN0IHZhbHVlICoKKytzaF9mcmFtZV9wcmV2X3JlZ2lzdGVyIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwgdm9pZCAqKnRoaXNfY2FjaGUsCisrCQkJaW50IHJlZ251bSkKKyB7CisgICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IGdldF9mcmFtZV9hcmNoICh0aGlzX2ZyYW1lKTsKKyAgIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqY2FjaGUgPSBzaF9mcmFtZV9jYWNoZSAodGhpc19mcmFtZSwgdGhpc19jYWNoZSk7CitAQCAtMTkzMSw3ICsxOTE4LDcgQEAgc2hfZnJhbWVfcHJldl9yZWdpc3RlciAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsCisgICAgICB0aGUgY3VycmVudCBmcmFtZS4gIEZyb2IgcmVnbnVtIHNvIHRoYXQgd2UgcHVsbCB0aGUgdmFsdWUgZnJvbQorICAgICAgdGhlIGNvcnJlY3QgcGxhY2UuICAqLworICAgaWYgKHJlZ251bSA9PSBnZGJhcmNoX3BjX3JlZ251bSAoZ2RiYXJjaCkpCistICAgIHJlZ251bSA9IFBSX1JFR05VTTsKKysgICAgcmVnbnVtID0gUFJfUkVHTlVNOyAvKiBYWFg6IHJlYWxseT8gKi8KKyAKKyAgIGlmIChyZWdudW0gPCBTSF9OVU1fUkVHUyAmJiBjYWNoZS0+c2F2ZWRfcmVnc1tyZWdudW1dICE9IC0xKQorICAgICByZXR1cm4gZnJhbWVfdW53aW5kX2dvdF9tZW1vcnkgKHRoaXNfZnJhbWUsIHJlZ251bSwKK0BAIC0yMjM3LDggKzIyMjQsOCBAQCBzaF9yZXR1cm5faW5fZmlyc3RfaGlkZGVuX3BhcmFtX3AgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAorIHN0YXRpYyBzdHJ1Y3QgZ2RiYXJjaCAqCisgc2hfZ2RiYXJjaF9pbml0IChzdHJ1Y3QgZ2RiYXJjaF9pbmZvIGluZm8sIHN0cnVjdCBnZGJhcmNoX2xpc3QgKmFyY2hlcykKKyB7CistICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaDsKKyAgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXA7CisrICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaDsKKyAKKyAgIC8qIFNINSBpcyBoYW5kbGVkIGVudGlyZWx5IGluIHNoNjQtdGRlcC5jLiAgKi8KKyAgIGlmIChpbmZvLmJmZF9hcmNoX2luZm8tPm1hY2ggPT0gYmZkX21hY2hfc2g1KQorQEAgLTIyNTQsNiArMjI0MSwxOCBAQCBzaF9nZGJhcmNoX2luaXQgKHN0cnVjdCBnZGJhcmNoX2luZm8gaW5mbywgc3RydWN0IGdkYmFyY2hfbGlzdCAqYXJjaGVzKQorICAgdGRlcCA9IFhDTkVXIChzdHJ1Y3QgZ2RiYXJjaF90ZGVwKTsKKyAgIGdkYmFyY2ggPSBnZGJhcmNoX2FsbG9jICgmaW5mbywgdGRlcCk7CisgCisrICAvKiBHZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzLiAgKi8KKysgIHRkZXAtPmdyZWdzZXQgPSBOVUxMOworKyAgdGRlcC0+Z3JlZ3NldF9yZWdfb2Zmc2V0ID0gTlVMTDsKKysgIHRkZXAtPmdyZWdzZXRfbnVtX3JlZ3MgPSAyMzsKKysgIHRkZXAtPnNpemVvZl9ncmVnc2V0ID0gMDsKKysKKysgIC8qIEZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycy4gICovCisrICB0ZGVwLT5mcHJlZ3NldCA9IE5VTEw7CisrICB0ZGVwLT5zaXplb2ZfZnByZWdzZXQgPSAzNCo0OworKworKyAgdGRlcC0+amJfcGNfb2Zmc2V0ID0gLTE7CisrCisgICBzZXRfZ2RiYXJjaF9zaG9ydF9iaXQgKGdkYmFyY2gsIDIgKiBUQVJHRVRfQ0hBUl9CSVQpOworICAgc2V0X2dkYmFyY2hfaW50X2JpdCAoZ2RiYXJjaCwgNCAqIFRBUkdFVF9DSEFSX0JJVCk7CisgICBzZXRfZ2RiYXJjaF9sb25nX2JpdCAoZ2RiYXJjaCwgNCAqIFRBUkdFVF9DSEFSX0JJVCk7CitAQCAtMjQwNCwxMCArMjQwMywxMSBAQCBzaF9nZGJhcmNoX2luaXQgKHN0cnVjdCBnZGJhcmNoX2luZm8gaW5mbywgc3RydWN0IGdkYmFyY2hfbGlzdCAqYXJjaGVzKQorICAgICAgIGJyZWFrOworICAgICB9CisgCisrICBkd2FyZjJfYXBwZW5kX3Vud2luZGVycyAoZ2RiYXJjaCk7CisrCisgICAvKiBIb29rIGluIEFCSS1zcGVjaWZpYyBvdmVycmlkZXMsIGlmIHRoZXkgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQuICAqLworICAgZ2RiYXJjaF9pbml0X29zYWJpIChpbmZvLCBnZGJhcmNoKTsKKyAKKy0gIGR3YXJmMl9hcHBlbmRfdW53aW5kZXJzIChnZGJhcmNoKTsKKyAgIGZyYW1lX3Vud2luZF9hcHBlbmRfdW53aW5kZXIgKGdkYmFyY2gsICZzaF9zdHViX3Vud2luZCk7CisgICBmcmFtZV91bndpbmRfYXBwZW5kX3Vud2luZGVyIChnZGJhcmNoLCAmc2hfZnJhbWVfdW53aW5kKTsKKyAKK2RpZmYgLS1naXQgYS9nZGIvc2gtdGRlcC5oIGIvZ2RiL3NoLXRkZXAuaAoraW5kZXggZmM2NzFhNS4uNjk5ZjU5ZiAxMDA2NDQKKy0tLSBhL2dkYi9zaC10ZGVwLmgKKysrKyBiL2dkYi9zaC10ZGVwLmgKK0BAIC0yMSw2ICsyMSwxMiBAQAorIAorIC8qIENvbnRyaWJ1dGVkIGJ5IFN0ZXZlIENoYW1iZXJsYWluIHNhY0BjeWdudXMuY29tLiAgKi8KKyAKKytzdHJ1Y3QgZnJhbWVfaW5mbzsKKytzdHJ1Y3QgZ2RiYXJjaDsKKytzdHJ1Y3QgcmVnZ3JvdXA7Cisrc3RydWN0IHJlZ3NldDsKKytzdHJ1Y3QgcmVnY2FjaGU7CisrCisgLyogUmVnaXN0ZXJzIGZvciBhbGwgU0ggdmFyaWFudHMuICBVc2VkIGFsc28gYnkgc2gzLXJvbS5jLiAgKi8KKyBlbnVtCisgICB7CitAQCAtMjksNiArMzUsNyBAQCBlbnVtCisgICAgIEFSRzBfUkVHTlVNID0gNCwKKyAgICAgQVJHTEFTVF9SRUdOVU0gPSA3LAorICAgICBGUF9SRUdOVU0gPSAxNCwKKysgICAgU1BfUkVHTlVNID0gMTUsCisgICAgIFBDX1JFR05VTSA9IDE2LAorICAgICBQUl9SRUdOVU0gPSAxNywKKyAgICAgR0JSX1JFR05VTSA9IDE4LAorQEAgLTgxLDYgKzg4LDI0IEBAIGVudW0KKyAgICAgRlYwX1JFR05VTSA9IDc2LAorICAgICBGVl9MQVNUX1JFR05VTSA9IDc5CisgICB9OworKyNkZWZpbmUgU0hfTlVNX1JFR1MgNjcKKysKKytzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUKKyt7CisrICAvKiBCYXNlIGFkZHJlc3MuICAqLworKyAgQ09SRV9BRERSIGJhc2U7CisrICBMT05HRVNUIHNwX29mZnNldDsKKysgIENPUkVfQUREUiBwYzsKKysKKysgIC8qIEZsYWcgc2hvd2luZyB0aGF0IGEgZnJhbWUgaGFzIGJlZW4gY3JlYXRlZCBpbiB0aGUgcHJvbG9ndWUgY29kZS4gKi8KKysgIGludCB1c2VzX2ZwOworKworKyAgLyogU2F2ZWQgcmVnaXN0ZXJzLiAgKi8KKysgIENPUkVfQUREUiBzYXZlZF9yZWdzW1NIX05VTV9SRUdTXTsKKysgIENPUkVfQUREUiBzYXZlZF9zcDsKKyt9OworKworK2V4dGVybiBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKnNoX2ZyYW1lX2NhY2hlIChzdHJ1Y3QgZnJhbWVfaW5mbyAqbmV4dF9mcmFtZSwgdm9pZCAqKnRoaXNfY2FjaGUpOworIAorIC8qIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBhIHJlZ2lzdGVyIGluIGEgY29yZS1maWxlLiAgKi8KKyBzdHJ1Y3Qgc2hfY29yZWZpbGVfcmVnbWFwCitAQCAtODksOCArMTE0LDMyIEBAIHN0cnVjdCBzaF9jb3JlZmlsZV9yZWdtYXAKKyAgIHVuc2lnbmVkIGludCBvZmZzZXQ7CisgfTsKKyAKKysvKiBzaCBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgaW5mb3JtYXRpb24uICAqLworIHN0cnVjdCBnZGJhcmNoX3RkZXAKKyB7CisrICAvKiBHZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzLiAgKi8KKysgIHN0cnVjdCByZWdzZXQgKmdyZWdzZXQ7CisrICBpbnQgKmdyZWdzZXRfcmVnX29mZnNldDsKKysgIGludCBncmVnc2V0X251bV9yZWdzOworKyAgc2l6ZV90IHNpemVvZl9ncmVnc2V0OworKworKyAgLyogRmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzLiAgKi8KKysgIHN0cnVjdCByZWdzZXQgKmZwcmVnc2V0OworKyAgc2l6ZV90IHNpemVvZl9mcHJlZ3NldDsKKysKKysgIC8qIE9mZnNldCBvZiBzYXZlZCBQQyBpbiBqbXBfYnVmLiAgKi8KKysgIGludCBqYl9wY19vZmZzZXQ7CisrCisrICAvKiBEZXRlY3Qgc2lndHJhbXAuICAqLworKyAgaW50ICgqc2lndHJhbXBfcCkgKHN0cnVjdCBmcmFtZV9pbmZvICopOworKworKyAgLyogR2V0IGFkZHJlc3Mgb2Ygc2lnY29udGV4dCBmb3Igc2lndHJhbXAuICAqLworKyAgQ09SRV9BRERSICgqc2lnY29udGV4dF9hZGRyKSAoc3RydWN0IGZyYW1lX2luZm8gKik7CisrCisrICAvKiBPZmZzZXQgb2YgcmVnaXN0ZXJzIGluIGBzdHJ1Y3Qgc2lnY29udGV4dCcuICAqLworKyAgaW50ICpzY19yZWdfb2Zmc2V0OworKyAgaW50IHNjX251bV9yZWdzOworKworICAgLyogTm9uLU5VTEwgd2hlbiBkZWJ1Z2dpbmcgZnJvbSBhIGNvcmUgZmlsZS4gIFByb3ZpZGVzIHRoZSBvZmZzZXQKKyAgICAgIHdoZXJlIGVhY2ggZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIGlzIHN0b3JlZCBpbnNpZGUgdGhlIGFzc29jaWF0ZWQKKyAgICAgIGNvcmUgZmlsZSBzZWN0aW9uLiAgKi8KK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5hc20vYXNtLXNvdXJjZS5leHAgYi9nZGIvdGVzdHN1aXRlL2dkYi5hc20vYXNtLXNvdXJjZS5leHAKK2luZGV4IDg4NTRhZjAuLmVmNDQ2ODIgMTAwNjQ0CistLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5hc20vYXNtLXNvdXJjZS5leHAKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9hc20tc291cmNlLmV4cAorQEAgLTExMyw2ICsxMTMsMTEgQEAgc3dpdGNoIC1nbG9iIC0tIFtpc3RhcmdldF0geworICAgICAgICAgICAgIGFwcGVuZCBsaW5rLWZsYWdzICIgLW0gZWxmMzJwcGMiCisgICAgICAgICB9CisgICAgIH0KKysgICAgInNoKi1saW51eCoiIHsKKysgICAgICAgIHNldCBhc20tYXJjaCBzaC1saW51eAorKyAgICAgICAgc2V0IGFzbS1mbGFncyAiLUkke3NyY2Rpcn0vJHtzdWJkaXJ9IC1JJHtvYmpkaXJ9LyR7c3ViZGlyfSIKKysJc2V0IGRlYnVnLWZsYWdzICItZ2R3YXJmLTIiCisrICAgIH0KKyAgICAgInNoKi0qLSoiIHsKKyAgICAgICAgIHNldCBhc20tYXJjaCBzaAorIAlzZXQgZGVidWctZmxhZ3MgIi1nZHdhcmYtMiIKK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5hc20vc2guaW5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL3NoLmluYworaW5kZXggYTRhNWZjNS4uODllZmVkNyAxMDA2NDQKKy0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9zaC5pbmMKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9zaC5pbmMKK0BAIC00MCw5ICs0MCw4IEBACisgCW1vdi5sICAgLkxjb25zdFxALHIxCisgCWJyYQkuTGFmdGVyY29uc3RcQAorIAlub3AKKy0Jbm9wCistLkxjb25zdFxAOgorIAkuYWxpZ24JMgorKy5MY29uc3RcQDoKKyAJLmxvbmcJXHN1YnIKKyAJLmFsaWduCTEKKyAuTGFmdGVyY29uc3RcQDoKK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTEuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMS5jCitpbmRleCA0MjRlMWI4Li4wZGUyZTdiIDEwMDY0NAorLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGExLmMKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMS5jCitAQCAtMSw2ICsxLDkgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c2lnbmFsLmg+CisgCisrI2lmZGVmIF9fc2hfXworKyNkZWZpbmUgc2lnbmFsKGEsYikgICAgLyogU2lnbmFscyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdGFyZ2V0IC0gbWFrZSB0aGVtIGdvIGF3YXkgKi8KKysjZW5kaWYKKyAKKyB2b2lkCisgaGFuZGxlX1VTUjEgKGludCBzaWcpCitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGEzLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTMuYworaW5kZXggNDI0ZTFiOC4uOTUyYWFmMiAxMDA2NDQKKy0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMy5jCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTMuYworQEAgLTEsNiArMSwxMCBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzaWduYWwuaD4KKyAKKysjaWZkZWYgX19zaF9fCisrI2RlZmluZSBzaWduYWwoYSxiKSAgICAvKiBTaWduYWxzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB0YXJnZXQgLSBtYWtlIHRoZW0gZ28gYXdheSAqLworKyNlbmRpZgorKworIAorIHZvaWQKKyBoYW5kbGVfVVNSMSAoaW50IHNpZykKK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ2FsbC5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWdhbGwuYworaW5kZXggODFmM2IwOC4uMTU3NGIyZCAxMDA2NDQKKy0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnYWxsLmMKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnYWxsLmMKK0BAIC0xLDYgKzEsOSBAQAorICNpbmNsdWRlIDxzaWduYWwuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgCisrI2lmZGVmIF9fc2hfXworKyNkZWZpbmUgc2lnbmFsKGEsYikgICAgLyogU2lnbmFscyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdGFyZ2V0IC0gbWFrZSB0aGVtIGdvIGF3YXkgKi8KKysjZW5kaWYKKyAKKyAvKiBTaWduYWwgaGFuZGxlcnMsIHdlIHNldCBicmVha3BvaW50cyBpbiB0aGVtIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZQorICAgIHNpZ25hbHMgcmVhbGx5IGdldCBkZWxpdmVyZWQuICAqLworZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnbmFscy5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWduYWxzLmMKK2luZGV4IDc1NjYwNjguLjEyMDVhOWIgMTAwNjQ0CistLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ25hbHMuYworKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWduYWxzLmMKK0BAIC0zLDYgKzMsMTAgQEAKKyAjaW5jbHVkZSA8c2lnbmFsLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorIAorKyNpZmRlZiBfX3NoX18KKysjZGVmaW5lIHNpZ25hbChhLGIpICAgIC8qIFNpZ25hbHMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHRhcmdldCAtIG1ha2UgdGhlbSBnbyBhd2F5ICovCisrI2RlZmluZSBhbGFybShhKSAgICAgICAvKiBEaXR0byBmb3IgYWxhcm0oKSAqLworKyNlbmRpZgorIAorIHN0YXRpYyBpbnQgY291bnQgPSAwOworIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiL2ZpeC1kZXRlY3Rpb24tb2YtNjQtYml0LVBQQy1pbmZlcmlvci1pbi1nZGJzZXJ2ZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiL2ZpeC1kZXRlY3Rpb24tb2YtNjQtYml0LVBQQy1pbmZlcmlvci1pbi1nZGJzZXJ2ZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg1NDM1MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvZml4LWRldGVjdGlvbi1vZi02NC1iaXQtUFBDLWluZmVyaW9yLWluLWdkYnNlcnZlci5wYXRjaApAQCAtMCwwICsxLDU2IEBACitGcm9tIDRmZTY3ZGJhZmExYmVlNjc5ZGFlY2MxMmVkMzA2MjFkNWMyNjA1ZGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBZYW8gUWkgPHlhb0Bjb2Rlc291cmNlcnkuY29tPgorRGF0ZTogTW9uLCAxMSBNYXkgMjAxNSAxMDo1NzozMyArMDgwMAorU3ViamVjdDogW1BBVENIXSBGaXggZGV0ZWN0aW9uIG9mIDY0LWJpdCBQUEMgaW5mZXJpb3IgaW4gZ2Ric2VydmVyCisKK0lzc3VlICMxNjc3NQorCisqIGdkYnNlcnZlci9saW51eC1wcGMtbG93LmMgKHBwY19hcmNoX3NldHVwKTogQ2hhbmdlIHZhcmlhYmxlIG1zciB0byB0eXBlCisndW5zaWduZWQgbG9uZycuICBDaGVjayBiaXQgNjMgb3IgYml0IDMxIGlzIG9uZS4KKworaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9tbC9nZGItcGF0Y2hlcy8yMDE0LTEyL21zZzAwMjM5Lmh0bWwKK1dyaXR0ZW4gYnk6IFlhbyBRaSA8eWFvQGNvZGVzb3VyY2VyeS5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBZdWFuamllIEh1YW5nIDx5dWFuamllLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBnZGIvZ2Ric2VydmVyL2xpbnV4LXBwYy1sb3cuYyB8IDExICsrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dkYi9nZGJzZXJ2ZXIvbGludXgtcHBjLWxvdy5jIGIvZ2RiL2dkYnNlcnZlci9saW51eC1wcGMtbG93LmMKK2luZGV4IDYzZDQyMTguLmE2MmNmMjIgMTAwNjQ0CistLS0gYS9nZGIvZ2Ric2VydmVyL2xpbnV4LXBwYy1sb3cuYworKysrIGIvZ2RiL2dkYnNlcnZlci9saW51eC1wcGMtbG93LmMKK0BAIC0zNzQsNyArMzc0LDcgQEAgcHBjX2FyY2hfc2V0dXAgKHZvaWQpCisgeworICAgY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzYzsKKyAjaWZkZWYgX19wb3dlcnBjNjRfXworLSAgbG9uZyBtc3I7CisrICB1bnNpZ25lZCBsb25nIG1zcjsKKyAgIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGU7CisgCisgICAvKiBPbiBhIDY0LWJpdCBob3N0LCBhc3N1bWUgNjQtYml0IGluZmVyaW9yIHByb2Nlc3Mgd2l0aCBubworQEAgLTM4NCwxMyArMzg0LDE2IEBAIHBwY19hcmNoX3NldHVwICh2b2lkKQorICAgY3VycmVudF9wcm9jZXNzICgpLT50ZGVzYyA9IHRkZXNjOworICAgcHBjX2h3Y2FwID0gMDsKKyAKKy0gIC8qIE9ubHkgaWYgdGhlIGhpZ2ggYml0IG9mIHRoZSBNU1IgaXMgc2V0LCB3ZSBhY3R1YWxseSBoYXZlCistICAgICBhIDY0LWJpdCBpbmZlcmlvci4gICovCisrICAvKiBXZSBhY3R1YWxseSBoYXZlIGEgNjQtYml0IGluZmVyaW9yIG9ubHkgaWYgdGhlIGNlcnRhaW4gYml0IG9mIHRoZQorKyAgICAgTVNSIGlzIHNldC4gIFRoZSBQb3dlcklTQSBCb29rIElJSS1TIE1TUiBpcyBkaWZmZXJlbnQgZnJvbSB0aGUKKysgICAgIFBvd2VySVNBIEJvb2sgSUlJLUUgTVNSLiAgVGhlIEJvb2sgSUlJLVMgTVNSIGlzIDY0IGJpdHMgd2lkZSwgYW5kCisrICAgICBpdHMgTVNSW1NGXSBpcyB0aGUgYml0IDAgb2YgYSA2NC1iaXQgdmFsdWUuICBCb29rIElJSS1FIE1TUiBpcyAzMgorKyAgICAgYml0cyB3aWRlLCBhbmQgaXRzIE1TUltDTV0gaXMgdGhlIGJpdCAwIG9mIGEgMzItYml0IHZhbHVlLiAgKi8KKyAgIHJlZ2NhY2hlID0gbmV3X3JlZ2lzdGVyX2NhY2hlICh0ZGVzYyk7CisgICBmZXRjaF9pbmZlcmlvcl9yZWdpc3RlcnMgKHJlZ2NhY2hlLCBmaW5kX3JlZ25vICh0ZGVzYywgIm1zciIpKTsKKyAgIGNvbGxlY3RfcmVnaXN0ZXJfYnlfbmFtZSAocmVnY2FjaGUsICJtc3IiLCAmbXNyKTsKKyAgIGZyZWVfcmVnaXN0ZXJfY2FjaGUgKHJlZ2NhY2hlKTsKKy0gIGlmIChtc3IgPCAwKQorKyAgaWYgKG1zciAmIDB4ODAwMDAwMDA4MDAwMDAwMCkKKyAgICAgeworICAgICAgIHBwY19nZXRfaHdjYXAgKCZwcGNfaHdjYXApOworICAgICAgIGlmIChwcGNfaHdjYXAgJiBQUENfRkVBVFVSRV9DRUxMKQorLS0gCisxLjguNS4yLjIzMy5nOTMyZjdlNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiXzcuOS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYl83LjkuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDUyZTI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYl83LjkuMS5iYgpAQCAtMCwwICsxLDI0IEBACityZXF1aXJlIGdkYi5pbmMKK3JlcXVpcmUgZ2RiLSR7UFZ9LmluYworCitpbmhlcml0IHB5dGhvbi1kaXIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbcHl0aG9uXSA9ICItLXdpdGgtcHl0aG9uPSR7V09SS0RJUn0vcHl0aG9uLC0td2l0aG91dC1weXRob24scHl0aG9uLHB5dGhvbiBweXRob24tY29kZWNzIgorUEFDS0FHRUNPTkZJR1tiYWJlbHRyYWNlXSA9ICItLXdpdGgtYmFiZWx0cmFjZSwtLXdpdGhvdXQtYmFiZWx0cmFjZSxiYWJlbHRyYWNlIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlpZiBbIC1uICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdweXRob24nLCAncHl0aG9uJywgJycsIGQpfSIgXTsgdGhlbgorCQljYXQgPiAke1dPUktESVJ9L3B5dGhvbiA8PCBFT0YKKyMhL2Jpbi9zaAorY2FzZSAiXCQyIiBpbgorCS0taW5jbHVkZXMpIGVjaG8gIi1JJHtTVEFHSU5HX0lOQ0RJUn0vJHtQWVRIT05fRElSfS8iIDs7CisJLS1sZGZsYWdzKSBlY2hvICItV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0xJQkRJUn0vLi4gLVdsLC1ycGF0aCwke2xpYmRpcn0vLi4gLWxwdGhyZWFkIC1sZGwgLWx1dGlsIC1sbSAtbHB5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfSIgOzsKKwktLWV4ZWMtcHJlZml4KSBlY2hvICIke2V4ZWNfcHJlZml4fSIgOzsKKwkqKSBleGl0IDEgOzsKK2VzYWMKK2V4aXQgMAorRU9GCisJCWNobW9kICt4ICR7V09SS0RJUn0vcHl0aG9uCisJZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dpdC9naXQuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2l0L2dpdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRhNGEyNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dpdC9naXQuaW5jCkBAIC0wLDAgKzEsMTMwIEBACitTVU1NQVJZID0gIkRpc3RyaWJ1dGVkIHZlcnNpb24gY29udHJvbCBzeXN0ZW0iCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0LXNjbS5jb20iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyIgorREVQRU5EUyA9ICJvcGVuc3NsIGN1cmwgemxpYiBleHBhdCIKKworUFJPVklERVNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZ2l0LXJlcGxhY2VtZW50LW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L3NvZnR3YXJlL3NjbS9naXQvZ2l0LSR7UFZ9LnRhci5nejtuYW1lPXRhcmJhbGwgXAorICAgICAgICAgICAke0tFUk5FTE9SR19NSVJST1J9L3NvZnR3YXJlL3NjbS9naXQvZ2l0LW1hbnBhZ2VzLSR7UFZ9LnRhci5nejtuYW1lPW1hbnBhZ2VzIgorCitTID0gIiR7V09SS0RJUn0vZ2l0LSR7UFZ9IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03YzBkN2VmMDNhN2ViMDRjZTc5NWIwZjYwZTY4ZTdlMSIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1wZXJsPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZS9wZXJsIFwKKwkJLS13aXRob3V0LXRjbHRrIFwKKyIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHBlcmxuYXRpdmUKKworRVhUUkFfT0VNQUtFID0gIk5PX1BZVEhPTj0xIENGTEFHUz0nJHtDRkxBR1N9JyBMREZMQUdTPScke0xERkxBR1N9JyIKK0VYVFJBX09FTUFLRSArPSAiJ1BFUkxfUEFUSD0vdXNyL2Jpbi9lbnYgcGVybCciCitFWFRSQV9PRU1BS0VfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgTk9fQ1JPU1NfRElSRUNUT1JZX0hBUkRMSU5LUz0xIgorCitkb19jb21waWxlX3ByZXBlbmQgKCkgeworCSMgUmVtb3ZlIHBlcmwvcGVybC5tYWsgdG8gZml4IHRoZSBvdXQtb2YtZGF0ZSBwZXJsLm1hayBlcnJvcgorCSMgZHVyaW5nIHJlYnVpbGQKKwlybSAtZiBwZXJsL3BlcmwubWFrCit9CisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSIke0R9IiBiaW5kaXI9JHtiaW5kaXJ9IFwKKwkJdGVtcGxhdGVfZGlyPSR7ZGF0YWRpcn0vZ2l0LWNvcmUvdGVtcGxhdGVzIFwKKwkJR0lUX1BZVEhPTl9ESVI9JHtEfSR7ZGF0YWRpcn0vZ2l0LWNvcmUvcHl0aG9uCisJaW5zdGFsbCAtZCAke0R9LyR7bWFuZGlyfS9tYW4xCisJaW5zdGFsbCAtZCAke0R9LyR7bWFuZGlyfS9tYW41CisJaW5zdGFsbCAtZCAke0R9LyR7bWFuZGlyfS9tYW43CisJaW5zdGFsbCAtdCAke0R9LyR7bWFuZGlyfS9tYW4xICR7V09SS0RJUn0vbWFuMS8qCisJaW5zdGFsbCAtdCAke0R9LyR7bWFuZGlyfS9tYW41ICR7V09SS0RJUn0vbWFuNS8qCisJaW5zdGFsbCAtdCAke0R9LyR7bWFuZGlyfS9tYW43ICR7V09SS0RJUn0vbWFuNy8qCisJaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0vYmFzaC1jb21wbGV0aW9uL2NvbXBsZXRpb25zLworCWluc3RhbGwgLW0gNjQ0ICR7U30vY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2ggJHtEfS8ke2RhdGFkaXJ9L2Jhc2gtY29tcGxldGlvbi9jb21wbGV0aW9ucy9naXQKK30KKworcGVybF9uYXRpdmVfZml4dXAgKCkgeworCXNlZCAtaSAtZSAncyMke1NUQUdJTkdfQklORElSX05BVElWRX0vcGVybC1uYXRpdmUvIyR7YmluZGlyfS8jJyBcCisJICAgICAgIC1lICdzIyR7bGliZGlyfS9wZXJsLW5hdGl2ZS8jJHtsaWJkaXJ9LyMnIFwKKwkgICAgJHtAZC5nZXRWYXIoIlBFUkxUT09MUyIsIFRydWUpLnJlcGxhY2UoJyAvJyxkLmdldFZhcignRCcsIFRydWUpICsgJy8nKX0KKworCSMgJHtsaWJkaXJ9IGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUsIHBlcmwtbmF0aXZlIGZpbGVzIGFyZSBhbHdheXMKKwkjIGluc3RhbGxlZCB0byAvdXNyL2xpYiBvbiBib3RoIDMyLzY0IGJpdHMgdGFyZ2V0cy4KKwltdiAke0R9JHtleGVjX3ByZWZpeH0vbGliL3BlcmwtbmF0aXZlL3BlcmwgJHtEfSR7bGliZGlyfQorCXJtZGlyIC1wICR7RH0ke2V4ZWNfcHJlZml4fS9saWIvcGVybC1uYXRpdmUgfHwgdHJ1ZQorfQorCitSRUxfR0lUX0VYRUNfUEFUSCA9ICIke0Bvcy5wYXRoLnJlbHBhdGgobGliZXhlY2RpciwgYmluZGlyKX0vZ2l0LWNvcmUiCitSRUxfR0lUX1RFTVBMQVRFX0RJUiA9ICIke0Bvcy5wYXRoLnJlbHBhdGgoZGF0YWRpciwgYmluZGlyKX0vZ2l0LWNvcmUvdGVtcGxhdGVzIgorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQgKCkgeworCXBlcmxfbmF0aXZlX2ZpeHVwCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwljcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L2dpdCBcCisJCUdJVF9FWEVDX1BBVEg9J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtSRUxfR0lUX0VYRUNfUEFUSH0gXAorCQlHSVRfVEVNUExBVEVfRElSPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7UkVMX0dJVF9URU1QTEFURV9ESVJ9Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKwljcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L2dpdCBcCisJCUdJVF9FWEVDX1BBVEg9J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtSRUxfR0lUX0VYRUNfUEFUSH0gXAorCQlHSVRfVEVNUExBVEVfRElSPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7UkVMX0dJVF9URU1QTEFURV9ESVJ9CisJcGVybF9uYXRpdmVfZml4dXAKK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vZ2l0LWNvcmUgJHtsaWJleGVjZGlyfS9naXQtY29yZS8iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvLmRlYnVnIgorCitQRVJMVE9PTFMgPSAiIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1hZGQtLWludGVyYWN0aXZlIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1hcmNoaW1wb3J0IFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1jdnNleHBvcnRjb21taXQgXAorICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LWN2c2ltcG9ydCBcCisgICAgJHtsaWJleGVjZGlyfS9naXQtY29yZS9naXQtY3Zzc2VydmVyIFwKKyAgICAke2JpbmRpcn0vZ2l0LWN2c3NlcnZlciBcCisgICAgJHtsaWJleGVjZGlyfS9naXQtY29yZS9naXQtZGlmZnRvb2wgXAorICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LXJlbGluayBcCisgICAgJHtsaWJleGVjZGlyfS9naXQtY29yZS9naXQtc2VuZC1lbWFpbCBcCisgICAgJHtsaWJleGVjZGlyfS9naXQtY29yZS9naXQtc3ZuIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1pbnN0YXdlYiBcCisgICAgJHtsaWJleGVjZGlyfS9naXQtY29yZS9naXQtc3VibW9kdWxlIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1hbSBcCisgICAgJHtsaWJleGVjZGlyfS9naXQtY29yZS9naXQtcmVxdWVzdC1wdWxsIFwKKyAgICAke2RhdGFkaXJ9L2dpdHdlYi9naXR3ZWIuY2dpIFwKKyAgICAke2RhdGFkaXJ9L2dpdC1jb3JlL3RlbXBsYXRlcy9ob29rcy9wcmVwYXJlLWNvbW1pdC1tc2cuc2FtcGxlIFwKKyAgICAke2RhdGFkaXJ9L2dpdC1jb3JlL3RlbXBsYXRlcy9ob29rcy9wcmUtcmViYXNlLnNhbXBsZSBcCisiCisKKyMgQmFzaWMgdGFiIGNvbXBsZXRpb24gc3VwcG9ydAorUEFDS0FHRVMgPSsgIiR7UE59LWJhc2gtY29tcGxldGlvbiIKK0ZJTEVTXyR7UE59LWJhc2gtY29tcGxldGlvbiA9ICIke2RhdGFkaXJ9L2Jhc2gtY29tcGxldGlvbi9jb21wbGV0aW9ucy8qIgorCisjIEdpdCB0b29scyByZXF1aXJpbmcgcGVybAorUEFDS0FHRVMgPSsgIiR7UE59LXBlcmx0b29scyIKK0ZJTEVTXyR7UE59LXBlcmx0b29scyArPSAiIFwKKyAgICAke1BFUkxUT09MU30gXAorICAgICR7bGliZGlyfS9wZXJsIFwKKyAgICAke2RhdGFkaXJ9L3BlcmwgXAorIgorUkRFUEVORFNfJHtQTn0tcGVybHRvb2xzID0gIiR7UE59IHBlcmwgcGVybC1tb2R1bGUtZmlsZS1wYXRoIGZpbmR1dGlscyIKKworUEFDS0FHRVMgPSsgIiR7UE59LXB5dGhvbiIKK0ZJTEVTXyR7UE59LXB5dGhvbiA9ICIke2xpYmRpcn0vcHl0aG9uKiIKKworCisjIGdpdC10ayBwYWNrYWdlIHdpdGggZ2l0ayBhbmQgZ2l0LWd1aQorUEFDS0FHRVMgPSsgIiR7UE59LXRrIgorI1JERVBFTkRTXyR7UE59LXRrID0gIiR7UE59IHRrIHRjbCIKKyNFWFRSQV9PRU1BS0UgPSAiVENMX1BBVEg9JHtTVEFHSU5HX0JJTkRJUl9DUk9TU30vdGNsc2giCitGSUxFU18ke1BOfS10ayA9ICIgXAorICAgICR7YmluZGlyfS9naXRrIFwKKyAgICAke2RhdGFkaXJ9L2dpdGsgXAorIgorCitQQUNLQUdFUyA9KyAiZ2l0d2ViIgorRklMRVNfZ2l0d2ViID0gIiR7ZGF0YWRpcn0vZ2l0d2ViLyIKKworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9naXQvZ2l0XzIuNS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2l0L2dpdF8yLjUuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTY4NmMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2l0L2dpdF8yLjUuMC5iYgpAQCAtMCwwICsxLDExIEBACityZXF1aXJlIGdpdC5pbmMKKworRVhUUkFfT0VDT05GICs9ICJhY19jdl9zbnByaW50Zl9yZXR1cm5zX2JvZ3VzPW5vIFwKKyAgICAgICAgICAgICAgICAgYWNfY3ZfZnJlYWRfcmVhZHNfZGlyZWN0b3JpZXM9JHthY19jdl9mcmVhZF9yZWFkc19kaXJlY3Rvcmllcz15ZXN9IFwKKyAgICAgICAgICAgICAgICAgIgorRVhUUkFfT0VNQUtFICs9ICJOT19HRVRURVhUPTEiCisKK1NSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gIjNiYzliMGE4MDNhZThlYzZjNTMxNmNjNjRmMGI3Zjc4IgorU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiOGZhMTNiYTg0MzRmZjgzZDI0ZjU3ZjgzMWQ1NWRiYjkwNDY0MzRjMjY2NjQxMTgwYTM3NzQ0ZmFjZmNlNzJhYyIKK1NSQ19VUklbbWFucGFnZXMubWQ1c3VtXSA9ICIxMzRiMDQ5ZTUxNDIwYTMzNjA0OWFhYzIxYzg4YTc1YSIKK1NSQ19VUklbbWFucGFnZXMuc2hhMjU2c3VtXSA9ICI3NDVlNGU3OTdmZTUwNjFlNzgxYzg4MGQzNzBiMWJlYjQ4MDE5OTEyN2RhNWFjYWY0ZTM3NmUwYjA5ZDRkNjg1IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL2NvbmZpZy1ndWVzcy11Y2xpYmMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWcvY29uZmlnLWd1ZXNzLXVjbGliYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDk0MTE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL2NvbmZpZy1ndWVzcy11Y2xpYmMucGF0Y2gKQEAgLTAsMCArMSwxNzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitQYXRjaCBjb3VydGVzeSBnZW50b28tcG9ydGFnZS9zeXMtZGV2ZWwvZ251Y29uZmlnL2ZpbGVzL2F1dG9tYWtlLTEuOC41LWNvbmZpZy1ndWVzcy11Y2xpYmMucGF0Y2guCisKK3VwZGF0ZWQgdG8gMjAwNTA1MTYgYnkgTWFyY2luICdIcncnIEp1c3praWV3aWN6IChieSBoYW5kKQordXBkYXRlZCB0byAyMDA4MDEyMyBieSBOaXRpbiBBIEthbWJsZSAoYnkgaGFuZCkKK3VwZGF0ZWQgdG8gMjAxMTEwMDEgYnkgU2F1bCBXb2xkIChieSBoYW5kKQordXBkYXRlZCB0byAyMDEyMDgxOCBieSBNYXJjaW4gJ0hydycgSnVzemtpZXdpY3ogKGJ5IGhhbmQpCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcmNpbiBKdXN6a2lld2ljeiA8bWFyY2luLmp1c3praWV3aWN6QGxpbmFyby5vcmc+CisKKy0tLQorIGNvbmZpZy5ndWVzcyB8ICAgNjcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNDAgaW5zZXJ0aW9ucygrKSwgMjcgZGVsZXRpb25zKC0pCisKKy0tLSBnaXQub3JpZy9jb25maWcuZ3Vlc3MKKysrKyBnaXQvY29uZmlnLmd1ZXNzCitAQCAtMTM4LDYgKzEzOCwxOSBAQCBVTkFNRV9SRUxFQVNFPWAodW5hbWUgLXIpIDI+L2Rldi9udWxsYCB8CisgVU5BTUVfU1lTVEVNPWAodW5hbWUgLXMpIDI+L2Rldi9udWxsYCAgfHwgVU5BTUVfU1lTVEVNPXVua25vd24KKyBVTkFNRV9WRVJTSU9OPWAodW5hbWUgLXYpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9WRVJTSU9OPXVua25vd24KKyAKKysjIERldGVjdCB1Y2xpYmMgc3lzdGVtcy4KKysKKytMSUJDPSJnbnUiCisraWYgWyAtZiAvdXNyL2luY2x1ZGUvYml0cy91Q2xpYmNfY29uZmlnLmggXQorK3RoZW4KKysJTElCQz11Y2xpYmMKKysJaWYgWyAtbiBgZ3JlcCAiI2RlZmluZSBfX1VDTElCQ19DT05GSUdfVkVSU0lPTl9fIiAvdXNyL2luY2x1ZGUvYml0cy91Q2xpYmNfY29uZmlnLmhgIF0KKysJdGhlbgorKwkJVUNMSUJDX1NVQlZFUj1gc2VkIC1uICIvI2RlZmluZSBfX1VDTElCQ19DT05GSUdfVkVSU0lPTl9fIC9zLy8vcCIgL3Vzci9pbmNsdWRlL2JpdHMvdUNsaWJjX2NvbmZpZy5oYAorKwkJTElCQz0kTElCQyRVQ0xJQkNfU1VCVkVSCisrCWZpCisrZmkKKysKKyAjIE5vdGU6IG9yZGVyIGlzIHNpZ25pZmljYW50IC0gdGhlIGNhc2UgYnJhbmNoZXMgYXJlIG5vdCBleGNsdXNpdmUuCisgCisgY2FzZSAiJHtVTkFNRV9NQUNISU5FfToke1VOQU1FX1NZU1RFTX06JHtVTkFNRV9SRUxFQVNFfToke1VOQU1FX1ZFUlNJT059IiBpbgorQEAgLTg4NiwxNSArODk5LDE1IEBAIEVPRgorIAkgIEVWNjgqKSBVTkFNRV9NQUNISU5FPWFscGhhZXY2OCA7OworIAllc2FjCisgCW9iamR1bXAgLS1wcml2YXRlLWhlYWRlcnMgL2Jpbi9zaCB8IGdyZXAgLXEgbGQuc28uMQorLQlpZiB0ZXN0ICIkPyIgPSAwIDsgdGhlbiBMSUJDPSJsaWJjMSIgOyBlbHNlIExJQkM9IiIgOyBmaQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUke0xJQkN9CisrCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuIExJQkM9ImdudWxpYmMxIiA7IGVsc2UgTElCQz0iIiA7IGZpCisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBhcm0qOkxpbnV4Oio6KikKKyAJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorIAlpZiBlY2hvIF9fQVJNX0VBQklfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisgCSAgICB8IGdyZXAgLXEgX19BUk1fRUFCSV9fCisgCXRoZW4KKy0JICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAllbHNlCisgCSAgICBpZiBlY2hvIF9fQVJNX1BDU19WRlAgfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAorIAkJfCBncmVwIC1xIF9fQVJNX1BDU19WRlAKK0BAIC05MDYsMTkgKzkxOSwxOSBAQCBFT0YKKyAJZmkKKyAJZXhpdCA7OworICAgICBhdnIzMio6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIGNyaXM6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tYXhpcy1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LWF4aXMtbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIGNyaXN2MzI6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tYXhpcy1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LWF4aXMtbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIGZydjpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgaGV4YWdvbjpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgaSo4NjpMaW51eDoqOiopCisgCUxJQkM9Z251CitAQCAtOTMyLDEzICs5NDUsMTMgQEAgRU9GCisgCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtJHtMSUJDfSIKKyAJZXhpdCA7OworICAgICBpYTY0OkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBtMzJyKjpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgbTY4KjpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgbWlwczpMaW51eDoqOiogfCBtaXBzNjQ6TGludXg6KjoqKQorIAlldmFsICRzZXRfY2NfZm9yX2J1aWxkCitAQCAtOTU3LDU0ICs5NzAsNTQgQEAgRU9GCisgCSNlbmRpZgorIEVPRgorIAlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkNQVSdgCistCXRlc3QgeCIke0NQVX0iICE9IHggJiYgeyBlY2hvICIke0NQVX0tdW5rbm93bi1saW51eC1nbnUiOyBleGl0OyB9CisrCXRlc3QgeCIke0NQVX0iICE9IHggJiYgeyBlY2hvICIke0NQVX0tdW5rbm93bi1saW51eC0ke0xJQkN9IjsgZXhpdDsgfQorIAk7OworICAgICBvcjMyOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBwYWRyZTpMaW51eDoqOiopCistCWVjaG8gc3BhcmMtdW5rbm93bi1saW51eC1nbnUKKysJZWNobyBzcGFyYy11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBwYXJpc2M2NDpMaW51eDoqOiogfCBocHBhNjQ6TGludXg6KjoqKQorLQllY2hvIGhwcGE2NC11bmtub3duLWxpbnV4LWdudQorKwllY2hvIGhwcGE2NC11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBwYXJpc2M6TGludXg6KjoqIHwgaHBwYTpMaW51eDoqOiopCisgCSMgTG9vayBmb3IgQ1BVIGxldmVsCisgCWNhc2UgYGdyZXAgJ15jcHVbXmEtel0qOicgL3Byb2MvY3B1aW5mbyAyPi9kZXYvbnVsbCB8IGN1dCAtZCcgJyAtZjJgIGluCistCSAgUEE3KikgZWNobyBocHBhMS4xLXVua25vd24tbGludXgtZ251IDs7CistCSAgUEE4KikgZWNobyBocHBhMi4wLXVua25vd24tbGludXgtZ251IDs7CistCSAgKikgICAgZWNobyBocHBhLXVua25vd24tbGludXgtZ251IDs7CisrCSAgUEE3KikgZWNobyBocHBhMS4xLXVua25vd24tbGludXgtJHtMSUJDfSA7OworKwkgIFBBOCopIGVjaG8gaHBwYTIuMC11bmtub3duLWxpbnV4LSR7TElCQ30gOzsKKysJICAqKSAgICBlY2hvIGhwcGEtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7CisgCWVzYWMKKyAJZXhpdCA7OworICAgICBwcGM2NDpMaW51eDoqOiopCistCWVjaG8gcG93ZXJwYzY0LXVua25vd24tbGludXgtZ251CisrCWVjaG8gcG93ZXJwYzY0LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHBwYzpMaW51eDoqOiopCistCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LWdudQorKwllY2hvIHBvd2VycGMtdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgczM5MDpMaW51eDoqOiogfCBzMzkweDpMaW51eDoqOiopCisgCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tbGludXgKKyAJZXhpdCA7OworICAgICBzaDY0KjpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgc2gqOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBzcGFyYzpMaW51eDoqOiogfCBzcGFyYzY0OkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICB0aWxlKjpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgdmF4OkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LWRlYy1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LWRlYy1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgeDg2XzY0OkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICB4dGVuc2EqOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBpKjg2OkRZTklYL3B0eDo0KjoqKQorIAkjIHB0eCA0LjAgZG9lcyB1bmFtZSAtcyBjb3JyZWN0bHksIHdpdGggRFlOSVgvcHR4IGluIHRoZXJlLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL2dudS1jb25maWdpemUuaW4gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWcvZ251LWNvbmZpZ2l6ZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNDkwOGZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL2dudS1jb25maWdpemUuaW4KQEAgLTAsMCArMSwyNjcgQEAKKyMhIC91c3IvYmluL2VudiBwZXJsCisjIC0qLSBwZXJsIC0qLQorCitldmFsICdjYXNlICQjIGluIDApIGV4ZWMgL3Vzci9iaW4vcGVybCAtUyAiJDAiOzsgKikgZXhlYyAvdXNyL2Jpbi9wZXJsIC1TICIkMCIgIiRAIjs7IGVzYWMnCisgICAgaWYgMDsKKworIyBnbnUtY29uZmlnaXplIC0gaW5zdGFsbCB0aGUgR05VIGNvbmZpZy5ndWVzcyAvIGNvbmZpZy5zdWIgaW4gYSBkaXJlY3RvcnkgdHJlZQorIyBCYXNlZCBvbiBhdXRvcmVjb25mOgorIyAgIENvcHlyaWdodCAoQykgMTk5NCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMworIyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyMgMDIxMTEtMTMwNywgVVNBLgorCitCRUdJTgoreworICBteSAkZGF0YWRpciA9ICRFTlZ7J2F1dG9tNHRlX3BlcmxsaWJkaXInfSB8fCAnQGF1dG9tNHRlX3BlcmxsaWJkaXJAJzsKKyMgICcvaG9tZS9rZXJnb3RoL2NvZGUvYnVpbGQtYXJtL3RtcC9zdGFnaW5nL3NoYXJlL2F1dG9jb25mJzsKKyAgdW5zaGlmdCBASU5DLCAkZGF0YWRpcjsKKworICAjIE92ZXJyaWRlIFNIRUxMLiAgT24gREpHUFAgU0hFTEwgbWF5IG5vdCBiZSBzZXQgdG8gYSBzaGVsbAorICAjIHRoYXQgY2FuIGhhbmRsZSByZWRpcmVjdGlvbiBhbmQgcXVvdGUgYXJndW1lbnRzIGNvcnJlY3RseSwKKyAgIyBlLmcuOiBDT01NQU5ELkNPTS4gIEZvciBESkdQUCBhbHdheXMgdXNlIHRoZSBzaGVsbCB0aGF0IGNvbmZpZ3VyZQorICAjIGhhcyBkZXRlY3RlZC4KKyAgJEVOVnsnU0hFTEwnfSA9ICcvYmluL3NoJyBpZiAoJF5PIGVxICdkb3MnKTsKK30KKwordXNlIEF1dG9tNHRlOjpDaGFubmVsRGVmczsKK3VzZSBBdXRvbTR0ZTo6Q2hhbm5lbHM7Cit1c2UgQXV0b200dGU6OkNvbmZpZ3VyZV9hYzsKK3VzZSBBdXRvbTR0ZTo6RmlsZVV0aWxzOwordXNlIEF1dG9tNHRlOjpHZW5lcmFsOwordXNlIEF1dG9tNHRlOjpYRmlsZTsKKyMgRG8gbm90IHVzZSBDd2Q6OmNoZGlyLCBzaW5jZSBpdCBtaWdodCBoYW5nLgordXNlIEN3ZCAnY3dkJzsKK3VzZSBzdHJpY3Q7CisKKyMjIC0tLS0tLS0tLS0tICMjCisjIyBWYXJpYWJsZXMuICAjIworIyMgLS0tLS0tLS0tLS0gIyMKKworIyAkSEVMUAorIyAtLS0tLQorJGhlbHAgPSAiVXNhZ2U6ICQwIFtPUFRJT05dIC4uLiBbQ09ORklHVVJFLUFDIG9yIERJUkVDVE9SWV0gLi4uCisKK0luc3RhbGwgdGhlIEdOVSBjb25maWcuc3ViIGFuZCBjb25maWcuZ3Vlc3Mgc2NyaXB0cyBpbiB0aGUKK0RJUkVDVE9SSUVTIG9yIHRoZSBkaXJlY3RvcnkgdHJlZXMgZHJpdmVuIGJ5IENPTkZJR1VSRS1BQworKGRlZmF1bHRpbmcgdG8gYC4nKS4KKworT3BlcmF0aW9uIG1vZGVzOgorICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKyAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgIHZlcmJvc2VseSByZXBvcnQgcHJvY2Vzc2luZworICAtZiwgLS1mb3JjZSAgICAgICAgICAgICAgY29uc2lkZXIgYWxsIGZpbGVzIG9ic29sZXRlCisgIC1zLCAtLXN5bWxpbmsgICAgICAgICAgICBpbnN0YWxsIHN5bWJvbGljIGxpbmtzIGluc3RlYWQgb2YgY29waWVzCisgIC1XLCAtLXdhcm5pbmdzPUNBVEVHT1JZICByZXBvcnQgdGhlIHdhcm5pbmdzIGZhbGxpbmcgaW4gQ0FURUdPUlkgW3N5bnRheF0KKworIiAuIEF1dG9tNHRlOjpDaGFubmVsRGVmczo6dXNhZ2UgLiAiCisKK1RoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBcYFdBUk5JTkdTXCcgaXMgaG9ub3JlZC4gIFNvbWUgc3VidG9vbHMgbWlnaHQKK3N1cHBvcnQgb3RoZXIgd2FybmluZyB0eXBlcywgdXNpbmcgXGBhbGwnIGlzIGVuY291cmFnZWQuCisiOworCisjICRWRVJTSU9OCisjIC0tLS0tLS0tCiskdmVyc2lvbiA9ICJnbnUtY29uZmlnaXplIDEuMAorCitDb3B5cmlnaHQgKEMpIDIwMDQgQ2hyaXMgTGFyc29uCitUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTword2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisiOworCitteSAkY29uZmlnZGlyICA9ICdAZ251LWNvbmZpZ2RpckAnOworIycvaG9tZS9rZXJnb3RoL2NvZGUvYnVpbGQtYXJtL3RtcC9zdGFnaW5nL2k2ODYtbGludXgvc2hhcmUvZ251LWNvbmZpZyc7CitteSAkYXV0b2NvbmYgICA9ICRFTlZ7J0FVVE9DT05GJ30gICAgIHx8ICdhdXRvY29uZic7CisKKyMgdXNlIHN5bWxpbmtzIGluc3RlYWQuCitteSAkc3ltbGluayA9IDA7CisKK215ICRjb25maWd1cmVfYWM7CisKK215ICRybSA9ICJybSAtZiI7CitteSAkbG5fcyA9ICJsbiAtc2YiOworbXkgJGNwID0gImNwIC1mIjsKK215ICRta2RpciA9ICJta2RpciI7CitteSAkY2htb2QgPSAiY2htb2QiOworCisjIyAtLS0tLS0tLS0tICMjCisjIyBSb3V0aW5lcy4gICMjCisjIyAtLS0tLS0tLS0tICMjCisKKworIyBwYXJzZV9hcmdzICgpCisjIC0tLS0tLS0tLS0tLS0KKyMgUHJvY2VzcyBhbnkgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KK3N1YiBwYXJzZV9hcmdzICgpCit7CisgIG15ICRzcmNkaXI7CisKKyAgZ2V0b3B0ICgnc3xzeW1saW5rJyAgICAgICAgICAgID0+IFwkc3ltbGluayk7CisKKyAgIyBFdmVuIGlmIHRoZSB1c2VyIHNwZWNpZmllZCBhIGNvbmZpZ3VyZS5hYywgdHJpbSB0byBnZXQgdGhlCisgICMgZGlyZWN0b3J5LCBhbmQgbG9vayBmb3IgY29uZmlndXJlLmFjIGFnYWluLiAgQmVjYXVzZSAoaSkgdGhlIGNvZGUKKyAgIyBpcyBzaW1wbGVyLCBhbmQgKGlpKSB3ZSBhcmUgc3RpbGwgYWJsZSB0byBkaWFnbm9zZSBzaW11bHRhbmVvdXMKKyAgIyBwcmVzZW5jZSBvZiBjb25maWd1cmUuYWMgYW5kIGNvbmZpZ3VyZS5pbi4KKyAgQEFSR1YgPSBtYXAgeyAvY29uZmlndXJlXC4oYWN8aW4pJC8gPyBkaXJuYW1lICgkXykgOiAkXyB9IEBBUkdWOworICBwdXNoIEBBUkdWLCAnLicgdW5sZXNzIEBBUkdWOworfQorCisKKyMgJmdudV9jb25maWdpemVfY3VycmVudF9kaXJlY3RvcnkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N1YiBnbnVfY29uZmlnaXplX2N1cnJlbnRfZGlyZWN0b3J5ICgpCit7CisgIG15ICRjb25maWd1cmVfYWMgPSByZXF1aXJlX2NvbmZpZ3VyZV9hYzsKKworICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworICAjIElzIGl0IHVzaW5nIEF1dG9jb25mPyAgIworICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworCisgIG15ICR1c2VzX2F1dG9jb25mOworICBteSAkdXNlc19nZXR0ZXh0OworICBteSAkY29uZmlndXJlX2FjX2ZpbGUgPSBuZXcgQXV0b200dGU6OlhGaWxlICRjb25maWd1cmVfYWM7CisgIHdoaWxlICgkXyA9ICRjb25maWd1cmVfYWNfZmlsZS0+Z2V0bGluZSkKKyAgICAgeworICAgICAgIHMvIy4qLy87CisgICAgICAgcy9kbmwuKi8vOworICAgICAgICR1c2VzX2F1dG9jb25mID0gMSBpZiAvQUNfSU5JVC87CisgICAgIH0KKworICBpZiAoISR1c2VzX2F1dG9jb25mKQorICAgIHsKKyAgICAgIHZlcmIgIiRjb25maWd1cmVfYWM6IG5vdCB1c2luZyBBdXRvY29uZiI7CisgICAgICByZXR1cm47CisgICAgfQorCisgIG15ICRhdXhfZGlyOworICBteSBAc3ViZGlyOworICBteSAkY21kOworICBteSAkZGVzdDsKKworICB2ZXJiICIkY29uZmlndXJlX2FjOiB0cmFjaW5nIjsKKyAgbXkgJHRyYWNlcyA9IG5ldyBBdXRvbTR0ZTo6WEZpbGUKKyAgICAoIiRhdXRvY29uZiIKKyAgICAgLiBqb2luICgnIC0tdHJhY2U9JywgJycsCisJICAgICAjIElmIHlvdSBjaGFuZ2UgdGhpcyBsaXN0LCB1cGRhdGUgdGhlCisJICAgICAjIGBBdXRvcmVjb25mLXByZXNlbGVjdGlvbnMnIHNlY3Rpb24gb2YgYXV0b200dGUuaW4uCisJICAgICAnQUNfQ09ORklHX0FVWF9ESVI6QUNfQ09ORklHX0FVWF9ESVI6XCQxJywKKwkgICAgICdBQ19DT05GSUdfU1VCRElSUzpBQ19DT05GSUdfU1VCRElSUzpcJDEnLAorCSAgICAgJ0FDX0lOSVQnLAorCSAgICApCisgICAgIC4gJyB8Jyk7CisgIHdoaWxlICgkXyA9ICR0cmFjZXMtPmdldGxpbmUpCisgICAgeworICAgICAgJGF1eF9kaXIgPSAkMSAgICAgICAgICAgICAgICAgaWYgL0FDX0NPTkZJR19BVVhfRElSOiguKikvOworICAgICAgJHVzZXNfYXV0b2NvbmYgPSAxICAgICAgICAgICAgaWYgL0FDX0lOSVQvOworICAgICAgcHVzaCBAc3ViZGlyLCBzcGxpdCAoJyAnLCAkMSkgaWYgL0FDX0NPTkZJR19TVUJESVJTOiguKikvOworICAgIH0KKworICAjIFRoZSBzdWJkaXJzIGFyZSAqb3B0aW9uYWwqLCB0aGV5IG1heSBub3QgZXhpc3QuCisgIGZvcmVhY2ggKEBzdWJkaXIpCisgICAgeworICAgICAgaWYgKC1kKQorCXsKKwkgIHZlcmIgIiRjb25maWd1cmVfYWM6IHN1YmRpcmVjdG9yeSAkXyB0byBnbnUtY29uZmlnaXplIjsKKwkgIGdudV9jb25maWdpemUgKCRfKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgdmVyYiAiJGNvbmZpZ3VyZV9hYzogc3ViZGlyZWN0b3J5ICRfIG5vdCBwcmVzZW50IjsKKwl9CisgICAgfQorCisgICRkZXN0ID0gIi4iOworCisgIGlmIChkZWZpbmVkICRhdXhfZGlyKQorICAgIHsKKyAgICAgICRkZXN0ID0gJGF1eF9kaXI7CisgICAgICBpZiAoISAtZCAkYXV4X2RpcikKKyAgICAgICAgeworICAgICAgICAgIHZlcmIgIiRjb25maWd1cmVfYWM6IGNyZWF0aW5nIGRpcmVjdG9yeSAkYXV4X2RpciI7CisgICAgICAgICAgbWtkaXIgJGF1eF9kaXIKKyAgICAgICAgICAgIG9yIGVycm9yICJjYW5ub3QgY3JlYXRlICRhdXhfZGlyOiAkISI7CisgICAgICAgIH0KKyAgICB9CisKKyAgaWYgKCEkc3ltbGluaykKKyAgICB7CisgICAgICAkY21kID0gJGNwOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgICRjbWQgPSAkbG5fczsKKyAgICB9CisKKyAgeHN5c3RlbSAoIiRjbWQgJGNvbmZpZ2Rpci9jb25maWcuZ3Vlc3MgJGRlc3QvIik7CisgIHhzeXN0ZW0gKCIkY2htb2QgdSt4ICRkZXN0L2NvbmZpZy5ndWVzcyIpOworICB4c3lzdGVtICgiJGNtZCAkY29uZmlnZGlyL2NvbmZpZy5zdWIgJGRlc3QvIik7CisgIHhzeXN0ZW0gKCIkY2htb2QgdSt4ICRkZXN0L2NvbmZpZy5zdWIiKTsKK30KKworCisjICZnbnVfY29uZmlnaXplICgkRElSRUNUT1JZKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVjb25mIHRoZSAkRElSRUNUT1JZLgorc3ViIGdudV9jb25maWdpemUgKCQpCit7CisgIG15ICgkZGlyZWN0b3J5KSA9IEBfOworICBteSAkY3dkID0gY3dkOworCisgICMgVGhlIGZvcm1hdCBmb3IgdGhpcyBtZXNzYWdlIGlzIG5vdCBmcmVlOiB0YWtlbiBmcm9tIEVtYWNzLCBpdHNlbGYKKyAgIyB1c2luZyBHTlUgTWFrZSdzIGZvcm1hdC4KKyAgdmVyYiAiRW50ZXJpbmcgZGlyZWN0b3J5IGAkZGlyZWN0b3J5JyI7CisgIGNoZGlyICRkaXJlY3RvcnkKKyAgICBvciBlcnJvciAiY2Fubm90IGNoZGlyIHRvICRkaXJlY3Rvcnk6ICQhIjsKKworICBnbnVfY29uZmlnaXplX2N1cnJlbnRfZGlyZWN0b3J5OworCisgICMgVGhlIGZvcm1hdCBpcyBub3QgZnJlZTogdGFrZW4gZnJvbSBFbWFjcywgaXRzZWxmIHVzaW5nIEdOVSBNYWtlJ3MKKyAgIyBmb3JtYXQuCisgIHZlcmIgIkxlYXZpbmcgZGlyZWN0b3J5IGAkZGlyZWN0b3J5JyI7CisgIGNoZGlyICRjd2QKKyAgICBvciBlcnJvciAiY2Fubm90IGNoZGlyIHRvICRjd2Q6ICQhIjsKK30KKworCisjIyAtLS0tLS0gIyMKKyMjIE1haW4uICAjIworIyMgLS0tLS0tICMjCisKK3BhcnNlX2FyZ3M7CisKKyMgQXV0b3JlY29uZiBhbGwgdGhlIGdpdmVuIGNvbmZpZ3VyZS5hYy4gIEEgd2hpbGUgbG9vcCwgbm90IGEgZm9yLAorIyBzaW5jZSB0aGUgbGlzdCBjYW4gY2hhbmdlIGF0IHJ1bnRpbWUgYmVjYXVzZSBvZiBBQ19DT05GSUdfU1VCRElSUy4KK2ZvciBteSAkZGlyZWN0b3J5IChAQVJHVikKKyAgeworICAgIGdudV9jb25maWdpemUgKCRkaXJlY3RvcnkpOworICB9CisKKyMjIyBTZXR1cCAiR05VIiBzdHlsZSBmb3IgcGVybC1tb2RlIGFuZCBjcGVybC1tb2RlLgorIyMgTG9jYWwgVmFyaWFibGVzOgorIyMgcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIHBlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIHBlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2UtaW1hZ2luYXJ5LW9mZnNldDogMAorIyMgcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIGNwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtZXh0cmEtbmV3bGluZS1iZWZvcmUtYnJhY2U6IHQKKyMjIGNwZXJsLW1lcmdlLXRyYWlsaW5nLWVsc2U6IG5pbAorIyMgY3BlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIEVuZDoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy9tdXNsLXN1cHBvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWcvbXVzbC1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNDc0MzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWcvbXVzbC1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK3N1cHBvcnQgbXVzbAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBnbnUtY29uZmlnLTIwMTIwODE0L2NvbmZpZy5zdWIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnUtY29uZmlnLTIwMTIwODE0Lm9yaWcvY29uZmlnLnN1YgkyMDEyLTA5LTE4IDAyOjI3OjQ1LjAwMDAwMDAwMCAtMDcwMAorKysrIGdudS1jb25maWctMjAxMjA4MTQvY29uZmlnLnN1YgkyMDE0LTAzLTI2IDAwOjM0OjE5Ljk1NTk5NjcwOSAtMDcwMAorQEAgLTEyMyw2ICsxMjMsNyBAQAorIG1heWJlX29zPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMi8nYAorIGNhc2UgJG1heWJlX29zIGluCisgICBudG8tcW54KiB8IGxpbnV4LWdudSogfCBsaW51eC1hbmRyb2lkKiB8IGxpbnV4LWRpZXRsaWJjIHwgbGludXgtbmV3bGliKiB8IFwKKysgIGxpbnV4LW11c2wqIHwgXAorICAgbGludXgtdWNsaWJjKiB8IHVjbGludXgtdWNsaWJjKiB8IHVjbGludXgtZ251KiB8IGtmcmVlYnNkKi1nbnUqIHwgXAorICAga25ldGJzZCotZ251KiB8IG5ldGJzZCotZ251KiB8IFwKKyAgIGtvcGVuc29sYXJpcyotZ251KiB8IFwKK0BAIC0xMzY1LDYgKzEzNjYsNyBAQAorIAkgICAgICB8IC1jeWd3aW4qIHwgLW1zeXMqIHwgLXBlKiB8IC1wc29zKiB8IC1tb3NzKiB8IC1wcm9lbGYqIHwgLXJ0ZW1zKiBcCisgCSAgICAgIHwgLW1pbmd3MzIqIHwgLW1pbmd3NjQqIHwgLWxpbnV4LWdudSogfCAtbGludXgtYW5kcm9pZCogXAorIAkgICAgICB8IC1saW51eC1uZXdsaWIqIHwgLWxpbnV4LXVjbGliYyogXAorKwkgICAgICB8IC1saW51eC1tdXNsKiBcCisgCSAgICAgIHwgLXV4cHYqIHwgLWJlb3MqIHwgLW1wZWl4KiB8IC11ZGsqIFwKKyAJICAgICAgfCAtaW50ZXJpeCogfCAtdXdpbiogfCAtbWtzKiB8IC1yaGFwc29keSogfCAtZGFyd2luKiB8IC1vcGVuZWQqIFwKKyAJICAgICAgfCAtb3BlbnN0ZXAqIHwgLW9za2l0KiB8IC1jb25peCogfCAtcHczMiogfCAtbm9uc3RvcHV4KiBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWcvdWNsaWJjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL3VjbGliYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWZlMTAwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL3VjbGliYy5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGNvbmZpZy5zdWIub3JpZwkyMDA0LTA1LTE0IDE5OjM4OjM2LjAwMDAwMDAwMCAtMDUwMAorKysrIGNvbmZpZy5zdWIJMjAwNC0wNS0xNCAxOTozOToxNy4wMDAwMDAwMDAgLTA1MDAKK0BAIC0xMTgsNyArMTE4LDcgQEAKKyAjIEhlcmUgd2UgbXVzdCByZWNvZ25pemUgYWxsIHRoZSB2YWxpZCBLRVJORUwtT1MgY29tYmluYXRpb25zLgorIG1heWJlX29zPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMi8nYAorIGNhc2UgJG1heWJlX29zIGluCistICBudG8tcW54KiB8IGxpbnV4LWdudSogfCBrZnJlZWJzZCotZ251KiB8IG5ldGJzZCotZ251KiB8IHN0b3JtLWNoYW9zKiB8IG9zMi1lbXgqIHwgcnRtay1ub3ZhKikKKysgIG50by1xbngqIHwgbGludXgtZ251KiB8IGxpbnV4LXVjbGliYyogfCBmcmVlYnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIHwgc3Rvcm0tY2hhb3MqIHwgb3MyLWVteCogfCBydG1rLW5vdmEqKQorICAgICBvcz0tJG1heWJlX29zCisgICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wxLydgCisgICAgIDs7CitAQCAtMTEzNSw3ICsxMTM1LDggQEAKKyAJICAgICAgfCAtdWRpKiB8IC1lYWJpKiB8IC1saXRlcyogfCAtaWVlZSogfCAtZ28zMiogfCAtYXV4KiBcCisgCSAgICAgIHwgLWNob3J1c29zKiB8IC1jaG9ydXNyZGIqIFwKKyAJICAgICAgfCAtY3lnd2luKiB8IC1wZSogfCAtcHNvcyogfCAtbW9zcyogfCAtcHJvZWxmKiB8IC1ydGVtcyogXAorLQkgICAgICB8IC1taW5ndzMyKiB8IC1saW51eC1nbnUqIHwgLXV4cHYqIHwgLWJlb3MqIHwgLW1wZWl4KiB8IC11ZGsqIFwKKysJICAgICAgfCAtbWluZ3czMiogfCAtbGludXgtZ251KiB8IC1saW51eC11Y2xpYmMqIFwKKysJICAgICAgfCAtdXhwdiogfCAtYmVvcyogfCAtbXBlaXgqIHwgLXVkayogXAorIAkgICAgICB8IC1pbnRlcml4KiB8IC11d2luKiB8IC1ta3MqIHwgLXJoYXBzb2R5KiB8IC1kYXJ3aW4qIHwgLW9wZW5lZCogXAorIAkgICAgICB8IC1vcGVuc3RlcCogfCAtb3NraXQqIHwgLWNvbml4KiB8IC1wdzMyKiB8IC1ub25zdG9wdXgqIFwKKyAJICAgICAgfCAtc3Rvcm0tY2hhb3MqIHwgLXRvcHMxMCogfCAtdGVuZXgqIHwgLXRvcHMyMCogfCAtaXRzKiBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWdfMjAxMjA4MTQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWdfMjAxMjA4MTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI3ZTQyMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZ18yMDEyMDgxNC5iYgpAQCAtMCwwICsxLDQxIEBACitTVU1NQVJZID0gImdudS1jb25maWdpemUiCitERVNDUklQVElPTiA9ICJUb29sIHRoYXQgaW5zdGFsbHMgdGhlIEdOVSBjb25maWcuZ3Vlc3MgLyBjb25maWcuc3ViIGludG8gYSBkaXJlY3RvcnkgdHJlZSIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vY29uZmlnLmd1ZXNzO2VuZGxpbmU9Mzk7bWQ1PWI3OWE0NjYzNDc1ZjRkNzI0ODQ2NDYzMjc3ODE3ZTBkIgorCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJwZXJsLW5hdGl2ZS1ydW50aW1lIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2dudS1jb25maWcvZ251LWNvbmZpZy0ke1BWfS50YXIuYnoyIFwKKwkgICBmaWxlOi8vY29uZmlnLWd1ZXNzLXVjbGliYy5wYXRjaCBcCisJICAgZmlsZTovL211c2wtc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nbnUtY29uZmlnaXplLmluIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYmNmY2E1YTJiYjM5ZWRhZDRhYWU1YTY1ZWZjODQwOTQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDRmOTlhOGU3NmYzZThlNGZlYzBiYjVhZDQ3NjJmOGU0NDM2NjE2ODU1NGNlNjZjYjg1YWZiZTJlZDNlZmQ4YiIKKworQ0xFQU5CUk9LRU4gPSAiMSIKKworZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vZ251LWNvbmZpZyBcCisJCSAgICR7RH0ke2JpbmRpcn0KKwljYXQgJHtXT1JLRElSfS9nbnUtY29uZmlnaXplLmluIHwgXAorCQlzZWQgLWUgJ3MsQGdudS1jb25maWdkaXJALCR7ZGF0YWRpcn0vZ251LWNvbmZpZyxnJyBcCisJCSAgICAtZSAncyxAYXV0b200dGVfcGVybGxpYmRpckAsJHtkYXRhZGlyfS9hdXRvY29uZixnJyA+ICR7RH0ke2JpbmRpcn0vZ251LWNvbmZpZ2l6ZQorCSMgSW4gdGhlIG5hdGl2ZSBjYXNlIHdlIHdhbnQgdGhlIHN5c3RlbSBwZXJsIGFzIHBlcmwtbmF0aXZlIGNhbid0IGhhdmUgYnVpbHQgeWV0CisJaWYgWyAiJHtQTn0iICE9ICJnbnUtY29uZmlnLW5hdGl2ZSIgLWEgIiR7UE59IiAhPSAibmF0aXZlc2RrLWdudS1jb25maWciIF07IHRoZW4KKwkJc2VkIC1pIC1lICdzLC91c3IvYmluL2Vudiwke2JpbmRpcn0vZW52LGcnICR7RH0ke2JpbmRpcn0vZ251LWNvbmZpZ2l6ZQorCWZpCisJY2htb2QgNzU1ICR7RH0ke2JpbmRpcn0vZ251LWNvbmZpZ2l6ZQorCWluc3RhbGwgLW0gMDY0NCBjb25maWcuZ3Vlc3MgY29uZmlnLnN1YiAke0R9JHtkYXRhZGlyfS9nbnUtY29uZmlnLworfQorCitQQUNLQUdFUyA9ICIke1BOfSIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfSAke2RhdGFkaXJ9L2dudS1jb25maWciCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZ19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWdfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNWYyYjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWdfZ2l0LmJiCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiZ251LWNvbmZpZ2l6ZSIKK0RFU0NSSVBUSU9OID0gIlRvb2wgdGhhdCBpbnN0YWxscyB0aGUgR05VIGNvbmZpZy5ndWVzcyAvIGNvbmZpZy5zdWIgaW50byBhIGRpcmVjdG9yeSB0cmVlIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMLTMuMC13aXRoLWF1dG9jb25mLWV4Y2VwdGlvbiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2NvbmZpZy5ndWVzcztiZWdpbmxpbmU9NztlbmRsaW5lPTI3O21kNT05YmFjOGIxNzQzYzIyNDBhZTA3Y2NlNmU1NDZhYzJmMiIKKworREVQRU5EU19jbGFzcy1uYXRpdmUgPSAicGVybC1uYXRpdmUtcnVudGltZSIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworU1JDUkVWID0gImI1NzZmYTg3YzE0MGI4MjQ0NjZlZjE2MzhlOTQ1ZTg3ZGM1YzAzNDMiCitQViA9ICIyMDE1MDcyOCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQuc3YuZ251Lm9yZy9jb25maWcuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2dudS1jb25maWdpemUuaW4iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0NMRUFOQlJPS0VOID0gIjEiCisKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2dudS1jb25maWcgXAorCQkgICAke0R9JHtiaW5kaXJ9CisJY2F0ICR7V09SS0RJUn0vZ251LWNvbmZpZ2l6ZS5pbiB8IFwKKwkJc2VkIC1lICdzLEBnbnUtY29uZmlnZGlyQCwke2RhdGFkaXJ9L2dudS1jb25maWcsZycgXAorCQkgICAgLWUgJ3MsQGF1dG9tNHRlX3BlcmxsaWJkaXJALCR7ZGF0YWRpcn0vYXV0b2NvbmYsZycgPiAke0R9JHtiaW5kaXJ9L2dudS1jb25maWdpemUKKwkjIEluIHRoZSBuYXRpdmUgY2FzZSB3ZSB3YW50IHRoZSBzeXN0ZW0gcGVybCBhcyBwZXJsLW5hdGl2ZSBjYW4ndCBoYXZlIGJ1aWx0IHlldAorCWlmIFsgIiR7UE59IiAhPSAiZ251LWNvbmZpZy1uYXRpdmUiIC1hICIke1BOfSIgIT0gIm5hdGl2ZXNkay1nbnUtY29uZmlnIiBdOyB0aGVuCisJCXNlZCAtaSAtZSAncywvdXNyL2Jpbi9lbnYsJHtiaW5kaXJ9L2VudixnJyAke0R9JHtiaW5kaXJ9L2dudS1jb25maWdpemUKKwlmaQorCWNobW9kIDc1NSAke0R9JHtiaW5kaXJ9L2dudS1jb25maWdpemUKKwlpbnN0YWxsIC1tIDA2NDQgY29uZmlnLmd1ZXNzIGNvbmZpZy5zdWIgJHtEfSR7ZGF0YWRpcn0vZ251LWNvbmZpZy8KK30KKworUEFDS0FHRVMgPSAiJHtQTn0iCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0gJHtkYXRhZGlyfS9nbnUtY29uZmlnIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9hcm1fYWFyY2g2NC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2FybV9hYXJjaDY0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNzg4YjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9hcm1fYWFyY2g2NC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitndWlsZTogYWRkIGFhcmNoNjQgcmVjb2duaXRpb24KKworQXNzdW1lIGxpdHRsZS1lbmRpYW4uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBqb2Uuc2xhdGVyQHdpbmRyaXZlci5jb20KKworLS0tIGEvbW9kdWxlL3N5c3RlbS9iYXNlL3RhcmdldC5zY20KKysrKyBiL21vZHVsZS9zeXN0ZW0vYmFzZS90YXJnZXQuc2NtCitAQCAtNzAsNiArNzAsOCBAQAorICAgICAgICAgICAgICgobWVtYmVyIGNwdSAnKCJzcGFyYyIgInNwYXJjNjQiICJwb3dlcnBjIiAicG93ZXJwYzY0IiAic3B1IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzIiAibWlwczY0IikpCisgICAgICAgICAgICAgIChlbmRpYW5uZXNzIGJpZykpCisrICAgICAgICAgICAgKChzdHJpbmctbWF0Y2ggIl5hYXJjaDY0IiBjcHUpCisrICAgICAgICAgICAgIChlbmRpYW5uZXNzIGxpdHRsZSkpCisgICAgICAgICAgICAgKChzdHJpbmctbWF0Y2ggIl5hcm0uKmViIiBjcHUpCisgICAgICAgICAgICAgIChlbmRpYW5uZXNzIGJpZykpCisgICAgICAgICAgICAgKChzdHJpbmctbWF0Y2ggIl5hcm0uKiIgY3B1KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvYXJtX2VuZGlhbm5lc3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9hcm1fZW5kaWFubmVzcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTQzMjhiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvYXJtX2VuZGlhbm5lc3MucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorU3VwcG9ydCBmb3JtIEFSTSBlbmRpYW5uZXNzCisKK0ZpeGVzIFlvY3RvIGJ1ZyMgMjcyOQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGd1aWxlLTIuMC41L21vZHVsZS9zeXN0ZW0vYmFzZS90YXJnZXQuc2NtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3VpbGUtMi4wLjUub3JpZy9tb2R1bGUvc3lzdGVtL2Jhc2UvdGFyZ2V0LnNjbQkyMDEyLTAxLTI0IDAzOjA2OjA2LjAwMDAwMDAwMCAtMDgwMAorKysrIGd1aWxlLTIuMC41L21vZHVsZS9zeXN0ZW0vYmFzZS90YXJnZXQuc2NtCTIwMTItMDctMTIgMTM6MDU6NDQuMzcyMzY0MTAzIC0wNzAwCitAQCAtNzAsNyArNzAsOSBAQAorICAgICAgICAgICAgICgobWVtYmVyIGNwdSAnKCJzcGFyYyIgInNwYXJjNjQiICJwb3dlcnBjIiAicG93ZXJwYzY0IiAic3B1IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzIiAibWlwczY0IikpCisgICAgICAgICAgICAgIChlbmRpYW5uZXNzIGJpZykpCistICAgICAgICAgICAgKChzdHJpbmctbWF0Y2ggIl5hcm0uKmVsIiBjcHUpCisrICAgICAgICAgICAgKChzdHJpbmctbWF0Y2ggIl5hcm0uKmViIiBjcHUpCisrICAgICAgICAgICAgIChlbmRpYW5uZXNzIGJpZykpCisrICAgICAgICAgICAgKChzdHJpbmctbWF0Y2ggIl5hcm0uKiIgY3B1KQorICAgICAgICAgICAgICAoZW5kaWFubmVzcyBsaXR0bGUpKQorICAgICAgICAgICAgIChlbHNlCisgICAgICAgICAgICAgIChlcnJvciAidW5rbm93biBDUFUgZW5kaWFubmVzcyIgY3B1KSkpKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2RlYmlhbi8wMDAyLU1hcmstVW51c2VkLW1vZHVsZXMtYXJlLXJlbW92ZWQtZ2MtdGVzdC1hcy11bnJlc29sdmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9kZWJpYW4vMDAwMi1NYXJrLVVudXNlZC1tb2R1bGVzLWFyZS1yZW1vdmVkLWdjLXRlc3QtYXMtdW5yZXNvbHZlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMjM4YTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9kZWJpYW4vMDAwMi1NYXJrLVVudXNlZC1tb2R1bGVzLWFyZS1yZW1vdmVkLWdjLXRlc3QtYXMtdW5yZXNvbHZlLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGViaWFuIHBhdGNoXQorCitTaWduZWQtT2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitGcm9tIGU1MmJmY2RiYWNhNWRjZTQ5ODY3OGQ4ZjUxMjM4MWUzZTM5YTQwNjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2IgQnJvd25pbmcgPHJsYkBkZWZhdWx0dmFsdWUub3JnPgorRGF0ZTogU3VuLCAxOCBNYXIgMjAxMiAxMTo0MDo1NSAtMDUwMAorU3ViamVjdDogTWFyayAiVW51c2VkIG1vZHVsZXMgYXJlIHJlbW92ZWQiIGdjIHRlc3QgYXMgdW5yZXNvbHZlZC4KKworQXMgcGVyIGRpc2N1c3Npb24gd2l0aCB1cHN0cmVhbSwgbWFyayB0aGlzIHRlc3QgYXMgdW5yZXNvbHZlZCBzaW5jZSBpdAorbWF5IHByb2R1Y2UgZmFsc2UgbmVnYXRpdmVzLCBkZXBlbmRpbmcgb24gdGhlIGJlaGF2aW9yL3RpbWluZyBvZiB0aGUKK2dhcmJhZ2UgY29sbGVjdG9yLgorLS0tCisgdGVzdC1zdWl0ZS90ZXN0cy9nYy50ZXN0IHwgICAxMSArKysrKystLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdGVzdC1zdWl0ZS90ZXN0cy9nYy50ZXN0IGIvdGVzdC1zdWl0ZS90ZXN0cy9nYy50ZXN0CitpbmRleCBhOTY5NzUyLi44YzhlMTNlIDEwMDY0NAorLS0tIGEvdGVzdC1zdWl0ZS90ZXN0cy9nYy50ZXN0CisrKysgYi90ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QKK0BAIC04NCwxMSArODQsMTMgQEAKKyAgICAgICA7OyBvbmUgZ2Mgcm91bmQuIG5vdCBzdXJlIHdoeS4KKyAKKyAgICAgICAobWF5YmUtZ2MtZmxha2luZXNzCistICAgICAgICg9IChsZXQgbHAgKChpIDApKQorLSAgICAgICAgICAgIChpZiAoZ3VhcmQpCistICAgICAgICAgICAgICAgIChscCAoMSsgaSkpCistICAgICAgICAgICAgICAgIGkpKQorLSAgICAgICAgICB0b3RhbCkpKSkKKysgICAgICAgKG9yICg9IChsZXQgbHAgKChpIDApKQorKyAgICAgICAgICAgICAgICAoaWYgKGd1YXJkKQorKyAgICAgICAgICAgICAgICAgICAgKGxwICgxKyBpKSkKKysgICAgICAgICAgICAgICAgICAgIGkpKQorKyAgICAgICAgICAgICAgdG90YWwpCisrICAgICAgICAgICAodGhyb3cgJ3VucmVzb2x2ZWQpKSkpKQorKworIAorICAgKHBhc3MtaWYgIkxleGljYWwgdmFycyBhcmUgY29sbGVjdGFibGUiCisgICAgIChsZXQgKChsIChjb21waWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9kZWJpYW4vMDAwMy1NYXJrLW11dGV4LXdpdGgtb3duZXItbm90LXJldGFpbmVkLXRocmVhZHMtdGVzdC1hcy11LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZGViaWFuLzAwMDMtTWFyay1tdXRleC13aXRoLW93bmVyLW5vdC1yZXRhaW5lZC10aHJlYWRzLXRlc3QtYXMtdS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGJlM2I5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZGViaWFuLzAwMDMtTWFyay1tdXRleC13aXRoLW93bmVyLW5vdC1yZXRhaW5lZC10aHJlYWRzLXRlc3QtYXMtdS5wYXRjaApAQCAtMCwwICsxLDMzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2RlYmlhbiBwYXRjaF0KKworU2lnbmVkLU9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworRnJvbSA4NDg1NDMwOTFkNTVkZGRiNTRhODU2MTIxNTU5NjQ1MDZkNzEyODUyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iIEJyb3duaW5nIDxybGJAZGVmYXVsdHZhbHVlLm9yZz4KK0RhdGU6IFN1biwgMTggTWFyIDIwMTIgMTM6Mjg6MjQgLTA1MDAKK1N1YmplY3Q6IE1hcmsgIm11dGV4IHdpdGggb3duZXIgbm90IHJldGFpbmVkIiB0aHJlYWRzIHRlc3QgYXMgdW5yZXNvbHZlZC4KKworQXMgcGVyIGRpc2N1c3Npb24gd2l0aCB1cHN0cmVhbSwgbWFyayB0aGlzIHRlc3QgYXMgdW5yZXNvbHZlZCBzaW5jZSBpdAorbWF5IHByb2R1Y2UgZmFsc2UgbmVnYXRpdmVzLCBkZXBlbmRpbmcgb24gdGhlIGJlaGF2aW9yL3RpbWluZyBvZiB0aGUKK2dhcmJhZ2UgY29sbGVjdG9yLgorLS0tCisgdGVzdC1zdWl0ZS90ZXN0cy90aHJlYWRzLnRlc3QgfCAgICA2ICsrKystLQorIDEgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdGVzdC1zdWl0ZS90ZXN0cy90aHJlYWRzLnRlc3QgYi90ZXN0LXN1aXRlL3Rlc3RzL3RocmVhZHMudGVzdAoraW5kZXggODVhN2MzOC4uNTA4OTljYiAxMDA2NDQKKy0tLSBhL3Rlc3Qtc3VpdGUvdGVzdHMvdGhyZWFkcy50ZXN0CisrKysgYi90ZXN0LXN1aXRlL3Rlc3RzL3RocmVhZHMudGVzdAorQEAgLTQxNCw4ICs0MTQsMTAgQEAKKyAKKyAgICAgICAgICAgICAoZ2MpIChnYykKKyAgICAgICAgICAgICAobGV0ICgobSAoZykpKQorLSAgICAgICAgICAgICAgKGFuZCAobXV0ZXg/IG0pCistICAgICAgICAgICAgICAgICAgIChlcT8gKG11dGV4LW93bmVyIG0pIChjdXJyZW50LXRocmVhZCkpKSkpKSkKKysgICAgICAgICAgICAgIChvcgorKyAgICAgICAgICAgICAgIChhbmQgKG11dGV4PyBtKQorKyAgICAgICAgICAgICAgICAgICAgKGVxPyAobXV0ZXgtb3duZXIgbSkgKGN1cnJlbnQtdGhyZWFkKSkpCisrICAgICAgICAgICAgICAgKHRocm93ICd1bnJlc29sdmVkKSkpKSkpCisgCisgICAgICAgOzsKKyAgICAgICA7OyBtdXRleCBsb2NrIGxldmVscwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZ3VpbGVfMi4wLjZfZml4X3NlZF9lcnJvci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2d1aWxlXzIuMC42X2ZpeF9zZWRfZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVkYzIyNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2d1aWxlXzIuMC42X2ZpeF9zZWRfZXJyb3IucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoaXMgZml4ZXMgc2VkIGlzc3VlIHdoZW4gcHJlZml4IGhhcyAvIGluIGl0LCBsaWtlIC91c3IvbG9jYWwKKworYXV0b3JlY29uZiBlcnJvciBhdm9pZGVkOgorfCBzZWQ6IC1lIGV4cHJlc3Npb24gIzEsIGNoYXIgOTogdW5rbm93biBvcHRpb24gdG8gYHMnCit8IGNvbmZpZ3VyZS5hYzozOTogZXJyb3I6IEFDX0lOSVQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHBhY2thZ2UgYW5kIHZlcnNpb24gYXJndW1lbnRzCisKK1NpZ25lZC1PZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzAxCisKK0luZGV4OiBndWlsZS0yLjAuNS9idWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3VpbGUtMi4wLjUub3JpZy9idWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuCisrKysgZ3VpbGUtMi4wLjUvYnVpbGQtYXV4L2dpdC12ZXJzaW9uLWdlbgorQEAgLTE4Nyw3ICsxODcsNyBAQCBlbHNlCisgICAgIHY9VU5LTk9XTgorIGZpCisgCistdj1gZWNobyAiJHYiIHxzZWQgInMvXiRwcmVmaXgvLyJgCisrdj1gZWNobyAiJHYiIHxzZWQgInMjXiRwcmVmaXgjIyJgCisgCisgIyBUZXN0IHdoZXRoZXIgdG8gYXBwZW5kIHRoZSAiLWRpcnR5IiBzdWZmaXggb25seSBpZiB0aGUgdmVyc2lvbgorICMgc3RyaW5nIHdlJ3JlIHVzaW5nIGNhbWUgZnJvbSBnaXQuICBJLmUuLCBza2lwIHRoZSB0ZXN0IGlmIGl0J3MgIlVOS05PV04iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9saWJndWlsZS1NYWtlZmlsZS5hbS1ob29rLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvbGliZ3VpbGUtTWFrZWZpbGUuYW0taG9vay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTBiOWQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvbGliZ3VpbGUtTWFrZWZpbGUuYW0taG9vay5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDljNGUxMjBhN2E4N2RiMzRkMjJhNTA4ODNhNWE1MjUxNzBiNDgwZDcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgNiBKYW4gMjAxNSAyMzoxMDo1MSAtMDgwMAorU3ViamVjdDogW1BBVENIXSBsaWJndWlsZS9NYWtlZmlsZS5hbTogaW5zdGFsbC1kYXRhLWhvb2sgLT4gaW5zdGFsbC1leGVjLWhvb2sKKworSXQgbWF5IGluc3RhbGwgc3VjaCBhIGZpbGU6CisvdXNyL2xpYjY0L2xpYmd1aWxlLTIuMCotZ2RiLnNjbQorCitUaGlzIGlzIGJlY2F1c2Ugd2hlbiB0aGVyZSBpcyBubyBmaWxlIGluIHRoZSBkaXJlY3Rvcnk6Citmb3IgZiBpbiBsaWJndWlsZS0yLjAqOyBkbworICAgIFtzbmlwXQorZG9uZQorCitUaGUgZiB3b3VsZCBiZSBsaWJndWlsZS0yLjAqIGl0c2VsZiwgdXNlIGluc3RhbGwtZXhlYy1ob29rIHdpbGwgZml4IHRoZQorcHJvYmxlbSBzaW5jZSBpdCBkZXBlbmRzIG9uIGluc3RhbGwtbGliTFRMSUJSQVJJRVMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYmd1aWxlL01ha2VmaWxlLmFtIHwgICAgNCArLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ3VpbGUvTWFrZWZpbGUuYW0gYi9saWJndWlsZS9NYWtlZmlsZS5hbQoraW5kZXggNWRlY2Q5OS4uNTI2NDViNyAxMDA2NDQKKy0tLSBhL2xpYmd1aWxlL01ha2VmaWxlLmFtCisrKysgYi9saWJndWlsZS9NYWtlZmlsZS5hbQorQEAgLTQ0NiwxMCArNDQ2LDggQEAgRVhUUkFfbGliZ3VpbGVfQEdVSUxFX0VGRkVDVElWRV9WRVJTSU9OQF9sYV9TT1VSQ0VTID0gX3NjbS5oCQlcCisgIyMgZGVsZXRlIGd1aWxlLXNuYXJmLmF3ayBmcm9tIHRoZSBpbnN0YWxsYXRpb24gYmluZGlyLCBpbiBjYXNlIGl0J3MKKyAjIyBsaW5nZXJpbmcgdGhlcmUgZHVlIHRvIGFuIGVhcmxpZXIgZ3VpbGUgdmVyc2lvbiBub3QgaGF2aW5nIGJlZW4KKyAjIyB3aXBlZCBvdXQuCistaW5zdGFsbC1leGVjLWhvb2s6CisraW5zdGFsbC1leGVjLWhvb2s6IGxpYmd1aWxlLTIuMC1nZGIuc2NtCisgCXJtIC1mICQoREVTVERJUikkKGJpbmRpcikvZ3VpbGUtc25hcmYuYXdrCistCistaW5zdGFsbC1kYXRhLWhvb2s6IGxpYmd1aWxlLTIuMC1nZGIuc2NtCisgCUAkKE1LRElSX1ApICQoREVTVERJUikkKGxpYmRpcikKKyAjIyBXZSB3YW50IHRvIGluc3RhbGwgbGliZ3VpbGUtMi4wLWdkYi5zY20gYXMgU09NRVRISU5HLWdkYi5zY20uCisgIyMgU09NRVRISU5HIGlzIHRoZSBmdWxsIG5hbWUgb2YgdGhlIGZpbmFsIGxpYnJhcnkuICBXZSB3YW50IHRvIGlnbm9yZQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2xpYmd1aWxlLVZNLUFTTV9NVUwtZm9yLUFSTS1BZGQtZWFybHljbG9iYmVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvbGliZ3VpbGUtVk0tQVNNX01VTC1mb3ItQVJNLUFkZC1lYXJseWNsb2JiZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUwMDU5YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2xpYmd1aWxlLVZNLUFTTV9NVUwtZm9yLUFSTS1BZGQtZWFybHljbG9iYmVyLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0Zyb20gYTg1Yzc4ZWExMzkzOTg1ZmRiNmU2Njc4ZGVhMTkxMzVjNTUzZDM0MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcmsgSCBXZWF2ZXIgPG1od0BuZXRyaXMub3JnPgorRGF0ZTogRnJpLCAxOSBTZXAgMjAxNCAyMToxODowOSAtMDQwMAorU3ViamVjdDogW1BBVENIXSBWTTogQVNNX01VTCBmb3IgQVJNOiBBZGQgZWFybHljbG9iYmVyIGNvbnN0cmFpbnQgdG8gdGhlIFNNVUxMCisgb3V0cHV0cy4KKworUmVwb3J0ZWQgYnkgUm9iIEJyb3duaW5nIDxybGJAZGVmYXVsdHZhbHVlLm9yZz4uCisKKyogbGliZ3VpbGUvdm0taS1zY2hlbWUuYyAoQVNNX01VTClbQVJNXTogQWRkIGVhcmx5Y2xvYmJlciAoJikgY29uc3RyYWludAorICB0byB0aGUgU01VTEwgb3V0cHV0IHJlZ2lzdGVycy4KKworQXV0aG9yOiBNYXJrIEggV2VhdmVyIDxtaHdAbmV0cmlzLm9yZz4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbGliZ3VpbGUvdm0taS1zY2hlbWUuYyB8IDUgKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ3VpbGUvdm0taS1zY2hlbWUuYyBiL2xpYmd1aWxlL3ZtLWktc2NoZW1lLmMKK2luZGV4IDU4N2FhOTUuLjE2MmVmYWIgMTAwNjQ0CistLS0gYS9saWJndWlsZS92bS1pLXNjaGVtZS5jCisrKysgYi9saWJndWlsZS92bS1pLXNjaGVtZS5jCitAQCAtMSw1ICsxLDQgQEAKKy0vKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMsCistICogICAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8qIENvcHlyaWdodCAoQykgMjAwMSwgMjAwOS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAqIAorICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK0BAIC0zNjMsNyArMzYyLDcgQEAgVk1fREVGSU5FX0ZVTkNUSU9OICgxNDksIGdlLCAiZ2U/IiwgMikKKyAgICAgICB7CQkJCQkJCQkJXAorIAlzY21fdF9zaWduZWRfYml0cyBybG8sIHJoaTsJCQkJCVwKKyAJYXNtICgic211bGwgJTAsICUxLCAlMiwgJTNcbiIJCQkJCVwKKy0JICAgICA6ICI9ciIgKHJsbyksICI9ciIgKHJoaSkJCQkJCVwKKysJICAgICA6ICI9JnIiIChybG8pLCAiPSZyIiAocmhpKQkJCQkJXAorIAkgICAgIDogInIiIChTQ01fVU5QQUNLICh4KSAtIHNjbV90YzJfaW50KSwJCQlcCisgCSAgICAgICAiciIgKFNDTV9JX0lOVU0gKHkpKSk7CQkJCQlcCisgCWlmIChTQ01fTElLRUxZIChTQ01fU1JTIChybG8sIDMxKSA9PSByaGkpKQkJCVwKKy0tIAorMi4zLjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvb3BlbnN1c2UvZ3VpbGUtNjRiaXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9vcGVuc3VzZS9ndWlsZS02NGJpdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2UzMTJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvb3BlbnN1c2UvZ3VpbGUtNjRiaXQucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvcGVuc3VzZSBwYXRjaF0KKworU2lnbmVkLU9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworSW5kZXg6IGd1aWxlLTIuMC4zL2xpYmd1aWxlL2hhc2guYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd1aWxlLTIuMC4zLm9yaWcvbGliZ3VpbGUvaGFzaC5jCTIwMTEtMDctMDYgMTU6NDk6NTkuMDAwMDAwMDAwIC0wNzAwCisrKysgZ3VpbGUtMi4wLjMvbGliZ3VpbGUvaGFzaC5jCTIwMTItMDEtMTMgMjE6NDk6NDMuMzMyODQ0ODg0IC0wODAwCitAQCAtMjcwLDcgKzI3MCw3IEBAIHNjbV9oYXNoZXIoU0NNIG9iaiwgdW5zaWduZWQgbG9uZyBuLCBzaXoKKyB1bnNpZ25lZCBsb25nCisgc2NtX2loYXNocSAoU0NNIG9iaiwgdW5zaWduZWQgbG9uZyBuKQorIHsKKy0gIHJldHVybiAoU0NNX1VOUEFDSyAob2JqKSA+PiAxKSAlIG47CisrICByZXR1cm4gKCh1bnNpZ25lZCBsb25nKSBTQ01fVU5QQUNLIChvYmopID4+IDEpICUgbjsKKyB9CisgCisgCitAQCAtMzA2LDcgKzMwNiw3IEBAIHNjbV9paGFzaHYgKFNDTSBvYmosIHVuc2lnbmVkIGxvbmcgbikKKyAgIGlmIChTQ01fTlVNUChvYmopKQorICAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpIHNjbV9oYXNoZXIob2JqLCBuLCAxMCk7CisgICBlbHNlCistICAgIHJldHVybiBTQ01fVU5QQUNLIChvYmopICUgbjsKKysgICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKSBTQ01fVU5QQUNLIChvYmopICUgbjsKKyB9CisgCisgCitJbmRleDogZ3VpbGUtMi4wLjMvbGliZ3VpbGUvc3RydWN0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBndWlsZS0yLjAuMy5vcmlnL2xpYmd1aWxlL3N0cnVjdC5jCTIwMTEtMDctMDYgMTU6NTA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKysgZ3VpbGUtMi4wLjMvbGliZ3VpbGUvc3RydWN0LmMJMjAxMi0wMS0xMyAyMTo0OTo0My4zMzI4NDQ4ODQgLTA4MDAKK0BAIC05NDIsNyArOTQyLDcgQEAgc2NtX3N0cnVjdF9paGFzaHEgKFNDTSBvYmosIHVuc2lnbmVkIGxvbgorIHsKKyAgIC8qIFRoZSBsZW5ndGggb2YgdGhlIGhhc2ggdGFibGUgc2hvdWxkIGJlIGEgcmVsYXRpdmUgcHJpbWUgaXQncyBub3QKKyAgICAgIG5lY2Vzc2FyeSB0byBzaGlmdCBkb3duIHRoZSBhZGRyZXNzLiAgKi8KKy0gIHJldHVybiBTQ01fVU5QQUNLIChvYmopICUgbjsKKysgIHJldHVybiAodW5zaWduZWQgbG9uZykgU0NNX1VOUEFDSyAob2JqKSAlIG47CisgfQorIAorIFNDTV9ERUZJTkUgKHNjbV9zdHJ1Y3RfdnRhYmxlX25hbWUsICJzdHJ1Y3QtdnRhYmxlLW5hbWUiLCAxLCAwLCAwLCAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL29wZW5zdXNlL2d1aWxlLXR1cm4tb2ZmLWdjLXRlc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9vcGVuc3VzZS9ndWlsZS10dXJuLW9mZi1nYy10ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMDE0ODYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9vcGVuc3VzZS9ndWlsZS10dXJuLW9mZi1nYy10ZXN0LnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3BlbnN1c2UgcGF0Y2hdCisKK1NpZ25lZC1PZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKK1NlZSBodHRwOi8vZGViYnVncy5nbnUub3JnL2NnaS9idWdyZXBvcnQuY2dpP2J1Zz0xMDA5Ngord2h5IHRoaXMgdGVzdCBpcyB0dXJuZWQgb2ZmLgorSW5kZXg6IGd1aWxlLTIuMC4zL3Rlc3Qtc3VpdGUvdGVzdHMvZ2MudGVzdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd1aWxlLTIuMC4zLm9yaWcvdGVzdC1zdWl0ZS90ZXN0cy9nYy50ZXN0CTIwMTEtMTAtMTUgMDk6MzQ6NDAuMDAwMDAwMDAwIC0wNzAwCisrKysgZ3VpbGUtMi4wLjMvdGVzdC1zdWl0ZS90ZXN0cy9nYy50ZXN0CTIwMTItMDEtMTMgMjE6NTI6MTAuMjgyNTQwMzU1IC0wODAwCitAQCAtNjUsMjMgKzY1LDIzIEBACisgICAgICAgZm9vKSkpCisgCisgCistKHdpdGgtdGVzdC1wcmVmaXggImdjIgorLSAgKHBhc3MtaWYgIlVudXNlZCBtb2R1bGVzIGFyZSByZW1vdmVkIgorLSAgICAobGV0KiAoKGd1YXJkIChtYWtlLWd1YXJkaWFuKSkKKy0gICAgICAgICAgICh0b3RhbCAxMDAwKSkKKy0KKy0gICAgICAoZm9yLWVhY2ggKGxhbWJkYSAoeCkgKGd1YXJkIChtYWtlLW1vZHVsZSkpKSAoaW90YSB0b3RhbCkpCisrOzsod2l0aC10ZXN0LXByZWZpeCAiZ2MiCisrOzsgIChwYXNzLWlmICJVbnVzZWQgbW9kdWxlcyBhcmUgcmVtb3ZlZCIKKys7OyAgICAobGV0KiAoKGd1YXJkIChtYWtlLWd1YXJkaWFuKSkKKys7OyAgICAgICAgICAgKHRvdGFsIDEwMDApKQorKzs7CisrOzsgICAgICAoZm9yLWVhY2ggKGxhbWJkYSAoeCkgKGd1YXJkIChtYWtlLW1vZHVsZSkpKSAoaW90YSB0b3RhbCkpCisgCisgICAgICAgOzsgQXZvaWQgZmFsc2UgcmVmZXJlbmNlcyB0byB0aGUgbW9kdWxlcyBvbiB0aGUgc3RhY2suCistICAgICAgKHN0YWNrLWNsZWFudXAgMjApCisrOzsgICAgICAoc3RhY2stY2xlYW51cCAyMCkKKyAKKy0gICAgICAoZ2MpCistICAgICAgKGdjKSA7OyB0d2ljZTogaGF2ZSB0byBraWxsIHRoZSB3ZWFrIHZlY3RvcnMuCistICAgICAgKGdjKSA7OyB0aHJpY2U6IGJlY2F1c2UgdGhlIHRlc3QgZG9lc24ndCBzdWNjZWVkIHdpdGggb25seQorKzs7ICAgICAgKGdjKQorKzs7ICAgICAgKGdjKSA7OyB0d2ljZTogaGF2ZSB0byBraWxsIHRoZSB3ZWFrIHZlY3RvcnMuCisrOzsgICAgICAoZ2MpIDs7IHRocmljZTogYmVjYXVzZSB0aGUgdGVzdCBkb2Vzbid0IHN1Y2NlZWQgd2l0aCBvbmx5CisgICAgICAgICAgICA7OyBvbmUgZ2Mgcm91bmQuIG5vdCBzdXJlIHdoeS4KKyAKKy0gICAgICAoPSAobGV0IGxwICgoaSAwKSkKKy0gICAgICAgICAgIChpZiAoZ3VhcmQpCistICAgICAgICAgICAgICAgKGxwICgxKyBpKSkKKy0gICAgICAgICAgICAgICBpKSkKKy0gICAgICAgICB0b3RhbCkpKSkKKys7OyAgICAgICg9IChsZXQgbHAgKChpIDApKQorKzs7ICAgICAgICAgICAoaWYgKGd1YXJkKQorKzs7ICAgICAgICAgICAgICAgKGxwICgxKyBpKSkKKys7OyAgICAgICAgICAgICAgIGkpKQorKzs7ICAgICAgICAgdG90YWwpKSkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy93b3JrYXJvdW5kLWljZS1zc2EtY29ycnVwdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL3dvcmthcm91bmQtaWNlLXNzYS1jb3JydXB0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMzQ4MzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy93b3JrYXJvdW5kLWljZS1zc2EtY29ycnVwdGlvbi5wYXRjaApAQCAtMCwwICsxLDYwIEBACitsaWJndWlsZS92bS1pLXN5c3RlbS5jOiB3b3JrYXJvdW5kIGljZSBzc2EgY29ycnVwdGlvbiB3aGlsZSBjb21waWxpbmcgd2l0aCBvcHRpb24gLWcgLU8KKworV2hpbGUgY29tcGlsaW5nIHdpdGggb3B0aW9uIC1nIC1PLCB0aGVyZSB3YXMgYSBzc2EgY29ycnVwdGlvbjoKKy4uCitVbmFibGUgdG8gY29hbGVzY2Ugc3NhX25hbWVzIDQ4IGFuZCAzNDc2IHdoaWNoIGFyZSBtYXJrZWQgYXMgTVVTVCBDT0FMRVNDRS4KK3NwXzQ4KGFiKSBhbmQgIHNwXzM0NzYoYWIpCitndWlsZS0yLjAuMTEvbGliZ3VpbGUvdm0tZW5naW5lLmM6IEluIGZ1bmN0aW9uICd2bV9kZWJ1Z19lbmdpbmUnOgorZ3VpbGUtMi4wLjExL2xpYmd1aWxlL3ZtLmM6NjczOjE5OiBpbnRlcm5hbCBjb21waWxlciBlcnJvcjogU1NBIGNvcnJ1cHRpb24KKyAjZGVmaW5lIFZNX05BTUUgICB2bV9kZWJ1Z19lbmdpbmUKKyAgICAgICAgICAgICAgICAgICBeCitndWlsZS0yLjAuMTEvbGliZ3VpbGUvdm0tZW5naW5lLmM6Mzk6MTogbm90ZTogaW4gZXhwYW5zaW9uIG9mIG1hY3JvICdWTV9OQU1FJworIFZNX05BTUUgKFNDTSB2bSwgU0NNIHByb2dyYW0sIFNDTSAqYXJndiwgaW50IG5hcmdzKQorIF4KK1BsZWFzZSBzdWJtaXQgYSBmdWxsIGJ1ZyByZXBvcnQsCit3aXRoIHByZXByb2Nlc3NlZCBzb3VyY2UgaWYgYXBwcm9wcmlhdGUuCitTZWUgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWdzLmh0bWw+IGZvciBpbnN0cnVjdGlvbnMuCisuLi4KKworVHdlYWsgbGliZ3VpbGUvdm0taS1zeXN0ZW0uYyB0byBhZGQgYm91bmRhcnkgdmFsdWUgY2hlY2sgdG8gd29ya2Fyb3VuZCBpdC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYmd1aWxlL3ZtLWktc3lzdGVtLmMgfCAyMCArKysrKysrKysrKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ3VpbGUvdm0taS1zeXN0ZW0uYyBiL2xpYmd1aWxlL3ZtLWktc3lzdGVtLmMKKy0tLSBhL2xpYmd1aWxlL3ZtLWktc3lzdGVtLmMKKysrKyBiL2xpYmd1aWxlL3ZtLWktc3lzdGVtLmMKK0BAIC02MjUsMTAgKzYyNSwyMiBAQCBWTV9ERUZJTkVfSU5TVFJVQ1RJT04gKDQ3LCBiaW5kX29wdGlvbmFsc19zaHVmZmxlLCAiYmluZC1vcHRpb25hbHMvc2h1ZmZsZSIsIDYsCisgICAvKiBub3cgc2h1ZmZsZSB1cCwgZnJvbSB3YWxrIHRvIG50b3RhbCAqLworICAgeworICAgICBzY21fdF9wdHJkaWZmIG5zaHVmID0gc3AgLSB3YWxrICsgMSwgaTsKKy0gICAgc3AgPSAoZnAgLSAxKSArIG50b3RhbCArIG5zaHVmOworLSAgICBDSEVDS19PVkVSRkxPVyAoKTsKKy0gICAgZm9yIChpID0gMDsgaSA8IG5zaHVmOyBpKyspCistICAgICAgc3BbLWldID0gd2Fsa1tuc2h1Zi1pLTFdOworKyAgICAvKiBjaGVjayB0aGUgdmFsdWUgb2YgbnNodWYgdG8gd29ya2Fyb3VuZCBpY2Ugc3NhIGNvcnJ1cHRpb24gKi8KKysgICAgLyogd2hpbGUgY29tcGlsaW5nIHdpdGggLU8gLWcgKi8KKysgICAgaWYgKG5zaHVmID4gMCkKKysgICAgeworKyAgICAgIHNwID0gKGZwIC0gMSkgKyBudG90YWwgKyBuc2h1ZjsKKysgICAgICBDSEVDS19PVkVSRkxPVyAoKTsKKysgICAgICBmb3IgKGkgPSAwOyBpIDwgbnNodWY7IGkrKykKKysgICAgICAgIHNwWy1pXSA9IHdhbGtbbnNodWYtaS0xXTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICBzcCA9IChmcCAtIDEpICsgbnRvdGFsICsgbnNodWY7CisrICAgICAgQ0hFQ0tfT1ZFUkZMT1cgKCk7CisrICAgICAgZm9yIChpID0gMDsgaSA8IG5zaHVmOyBpKyspCisrICAgICAgICBzcFstaV0gPSB3YWxrW25zaHVmLWktMV07CisrICAgIH0KKyAgIH0KKyAgIC8qIGFuZCBmaWxsIG9wdGlvbmFscyAmIGtleXdvcmQgYXJncyB3aXRoIFNDTV9VTkRFRklORUQgKi8KKyAgIHdoaWxlICh3YWxrIDw9IChmcCAtIDEpICsgbnRvdGFsKQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9ndWlsZV8yLjAuMTEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9ndWlsZV8yLjAuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg2OTY5NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2d1aWxlXzIuMC4xMS5iYgpAQCAtMCwwICsxLDExMSBAQAorU1VNTUFSWSA9ICJHdWlsZSBpcyB0aGUgR05VIFViaXF1aXRvdXMgSW50ZWxsaWdlbnQgTGFuZ3VhZ2UgZm9yIEV4dGVuc2lvbnMiCitERVNDUklQVElPTiA9ICJHdWlsZSBpcyB0aGUgR05VIFViaXF1aXRvdXMgSW50ZWxsaWdlbnQgTGFuZ3VhZ2UgZm9yIEV4dGVuc2lvbnMsXAorIHRoZSBvZmZpY2lhbCBleHRlbnNpb24gbGFuZ3VhZ2UgZm9yIHRoZSBHTlUgb3BlcmF0aW5nIHN5c3RlbS5cCisgR3VpbGUgaXMgYSBsaWJyYXJ5IGRlc2lnbmVkIHRvIGhlbHAgcHJvZ3JhbW1lcnMgY3JlYXRlIGZsZXhpYmxlIGFwcGxpY2F0aW9ucy5cCisgVXNpbmcgR3VpbGUgaW4gYW4gYXBwbGljYXRpb24gYWxsb3dzIHRoZSBhcHBsaWNhdGlvbidzIGZ1bmN0aW9uYWxpdHkgdG8gYmVcCisgZXh0ZW5kZWQgYnkgdXNlcnMgb3Igb3RoZXIgcHJvZ3JhbW1lcnMgd2l0aCBwbHVnLWlucywgbW9kdWxlcywgb3Igc2NyaXB0cy5cCisgR3VpbGUgcHJvdmlkZXMgd2hhdCBtaWdodCBiZSBkZXNjcmliZWQgYXMgJ3ByYWN0aWNhbCBzb2Z0d2FyZSBmcmVlZG9tLCdcCisgbWFraW5nIGl0IHBvc3NpYmxlIGZvciB1c2VycyB0byBjdXN0b21pemUgYW4gYXBwbGljYXRpb24gdG8gbWVldCB0aGVpclwKKyBuZWVkcyB3aXRob3V0IGRpZ2dpbmcgaW50byB0aGUgYXBwbGljYXRpb24ncyBpbnRlcm5hbHMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ3VpbGUvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2d1aWxlL2d1aWxlLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vMDAwMi1NYXJrLVVudXNlZC1tb2R1bGVzLWFyZS1yZW1vdmVkLWdjLXRlc3QtYXMtdW5yZXNvbHZlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RlYmlhbi8wMDAzLU1hcmstbXV0ZXgtd2l0aC1vd25lci1ub3QtcmV0YWluZWQtdGhyZWFkcy10ZXN0LWFzLXUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb3BlbnN1c2UvZ3VpbGUtNjRiaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3VpbGVfMi4wLjZfZml4X3NlZF9lcnJvci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hcm1fZW5kaWFubmVzcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hcm1fYWFyY2g2NC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly93b3JrYXJvdW5kLWljZS1zc2EtY29ycnVwdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWJndWlsZS1NYWtlZmlsZS5hbS1ob29rLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYmd1aWxlLVZNLUFTTV9NVUwtZm9yLUFSTS1BZGQtZWFybHljbG9iYmVyLnBhdGNoIFwKKyAgICAgICAgICAgIgorCisjICAgICAgICAgICBmaWxlOi8vZGViaWFuLzAwMDEtQ2hhbmdlLWd1aWxlLXRvLWd1aWxlLVguWS1mb3ItaW5mby1wYWdlcy5wYXRjaAorIyAgICAgICAgICAgZmlsZTovL29wZW5zdXNlL2d1aWxlLXR1cm4tb2ZmLWdjLXRlc3QucGF0Y2gKKworU1JDX1VSSVttZDVzdW1dID0gIjAzZjFiY2UxYTQ5ODMwNzZkOTU1MDAzNDcyMzA2YTEzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFlZDBhNGE2ZGI0ZTMxMGNiZGZlYjM2MTNmYTZmODZmZGRjOTFlZjYyNGMxZTNmODkzN2E2MzA0YzY5MTAzZTIiCisKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcgdGV4aW5mbworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK0RFUEVORFMgPSAibGlidW5pc3RyaW5nIGJkd2djIGdtcCBsaWJ0b29sIGxpYmZmaSBuY3Vyc2VzIHJlYWRsaW5lIgorIyBhZGQgZ3VpbGUtbmF0aXZlIG9ubHkgdG8gdGhlIHRhcmdldCByZWNpcGUncyBERVBFTkRTCitERVBFTkRTX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIGd1aWxlLW5hdGl2ZSBsaWJhdG9taWMtb3BzIgorCitSREVQRU5EU18ke1BOfV9hcHBlbmRfbGliYy1nbGliY19jbGFzcy10YXJnZXQgPSAiZ2xpYmMtZ2NvbnYtaXNvODg1OS0xIgorCitFWFRSQV9PRUNPTkYgKz0gIiR7QFsnLS13aXRob3V0LWxpYmx0ZGwtcHJlZml4IC0td2l0aG91dC1saWJnbXAtcHJlZml4IC0td2l0aG91dC1saWJyZWFkbGluZS1wcmVmaXgnLCAnJ11bYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJyxkKV19IgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgLS13aXRoLWxpYnVuaXN0cmluZy1wcmVmaXg9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aC1saWJnbXAtcHJlZml4PSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGgtbGlibHRkbC1wcmVmaXg9JHtTVEFHSU5HX0xJQkRJUn0iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCW1rZGlyIC1wIHBvCit9CisKK2V4cG9ydCBHVUlMRV9GT1JfQlVJTEQ9IiR7QlVJTERfU1lTfS1ndWlsZSIKKworZG9fY29tcGlsZV9hcHBlbmQoKSB7CisJIyBqdXN0IGZvciB0YXJnZXQgcmVjaXBlCisJaWYgWyAiJHtQTn0iID0gImd1aWxlIiBdCisJdGhlbgorCQlzZWQgLWkgLWUgczoke1NUQUdJTkdfRElSX1RBUkdFVH06OmcgXAorCSAgICAgICAgICAgICAgIC1lIHM6LyR7VEFSR0VUX1NZU306OmcgXAorCSAgICAgICAgICAgICAgIC1lIHM6LUwvdXNyL2xpYjo6ZyBcCisgICAgICAgIAkgICAgICAgLWUgczotaXN5c3RlbS91c3IvaW5jbHVkZTo6ZyBcCisJICAgICAgICAgICAgICAgLWUgczosL3Vzci9saWI6LFwkXHtsaWJkaXJcfTpnIFwKKwkgICAgICAgICAgICAgICAgICBtZXRhL2d1aWxlLTIuMC5wYworCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwlpbnN0YWxsIC1tIDA3NTUgICR7RH0ke2JpbmRpcn0vZ3VpbGUgJHtEfSR7YmluZGlyfS8ke0hPU1RfU1lTfS1ndWlsZQorCisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ3VpbGUgXAorCQlHVUlMRV9MT0FEX1BBVEg9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9ndWlsZS8yLjAgXAorCQlHVUlMRV9MT0FEX0NPTVBJTEVEX1BBVEg9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2d1aWxlLzIuMC9jY2FjaGUKKwljcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9LyR7SE9TVF9TWVN9LWd1aWxlIFwKKwkJR1VJTEVfTE9BRF9QQVRIPSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ3VpbGUvMi4wIFwKKwkJR1VJTEVfTE9BRF9DT01QSUxFRF9QQVRIPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9ndWlsZS8yLjAvY2NhY2hlCit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyA9ICJndWlsZV9jcm9zc19jb25maWciCisKK2d1aWxlX2Nyb3NzX2NvbmZpZygpIHsKKwkjIHRoaXMgaXMgb25seSBmb3IgdGFyZ2V0IHJlY2lwZQorCWlmIFsgIiR7UE59IiA9ICJndWlsZSIgXQorCXRoZW4KKwkgICAgICAgICMgQ3JlYXRlIGd1aWxlLWNvbmZpZyByZXR1cm5pbmcgdGFyZ2V0IHZhbHVlcyBpbnN0ZWFkIG9mIG5hdGl2ZSB2YWx1ZXMKKwkgICAgICAgIGluc3RhbGwgLWQgJHtTWVNST09UX0RFU1RESVJ9JHtTVEFHSU5HX0JJTkRJUl9DUk9TU30KKyAgICAgICAgCWVjaG8gJyMhJ2B3aGljaCAke0JVSUxEX1NZU30tZ3VpbGVgJCcgXFxcbi0tbm8tYXV0by1jb21waWxlIC1lIG1haW4gLXNcbiEjXG4oZGVmaW5lICVndWlsZS1idWlsZC1pbmZvICdcJ1woIFwKKwkJCT4gJHtCfS9ndWlsZS1jb25maWcuY3Jvc3MKKwkgICAgICAgIHNlZCAtbiAtZSAnczpeWyBcdF0qe1sgXHRdKiI6ICAoOicgXAorCQkJLWUgJ3M6IixbIFx0XSoiOiAuICI6JyBcCisJCQktZSAnczoiICp9LCAqXFw6Iik6JyBcCisJCQktZSAnczpeLipjYWNoZWRpci4qJDo6JyBcCisJCQktZSAnL14gICgvcCcgXAorCQkJPCAke0J9L2xpYmd1aWxlL2xpYnBhdGguaCA+PiAke0J9L2d1aWxlLWNvbmZpZy5jcm9zcworCSAgICAgICAgZWNobyAnKSknID4+ICR7Qn0vZ3VpbGUtY29uZmlnLmNyb3NzCisJICAgICAgICBjYXQgJHtCfS9tZXRhL2d1aWxlLWNvbmZpZyA+PiAke0J9L2d1aWxlLWNvbmZpZy5jcm9zcworCSAgICAgICAgaW5zdGFsbCAke0J9L2d1aWxlLWNvbmZpZy5jcm9zcyAke1NUQUdJTkdfQklORElSX0NST1NTfS9ndWlsZS1jb25maWcKKwlmaQorfQorCisjIEd1aWxlIG5lZWRzIHRoZSBjb21waWxlZCBmaWxlcyB0byBiZSBuZXdlciB0aGFuIHRoZSBzb3VyY2UsIGFuZCBpdCB3b24ndAorIyBhdXRvLWNvbXBpbGUgaW50byB0aGUgcHJlZml4IGV2ZW4gaWYgaXQgY2FuIHdyaXRlIHRoZXJlLCBzbyB0b3VjaCB0aGVtIGhlcmUgYXMKKyMgc3lzcm9vdCBpcyBtYW5hZ2VkLgorU1NUQVRFUE9TVElOU1RGVU5DUyArPSAiZ3VpbGVfc3N0YXRlX3Bvc3RpbnN0IgorZ3VpbGVfc3N0YXRlX3Bvc3RpbnN0KCkgeworCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290IiAtbyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF0KKwl0aGVuCisgICAgICAgICAgICAgICAgZmluZCAke1NUQUdJTkdfRElSX1RBUkdFVH0vJHtsaWJkaXJ9L2d1aWxlLzIuMC9jY2FjaGUgLXR5cGUgZiB8IHhhcmdzIHRvdWNoCisJZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWx0L2ZpbGVzL2d1aWx0LWJhc2gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsdC9maWxlcy9ndWlsdC1iYXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYTQzOWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsdC9maWxlcy9ndWlsdC1iYXNoLnBhdGNoCkBAIC0wLDAgKzEsMjg4IEBACitndWlsdDogZXhwbGljaXRseSBjYWxsIGZvciBiYXNoCisKK1J1bm5pbmcgY29tcGxleCBndWlsdCBzdGFja3Mgb2YgcGF0Y2hlcy9jb21taXRzIGNhbiBjYXVzZSBpbnRlcmVzdGluZworZmFpbHVyZXMgYWZ0ZXIgfjIwbSBvZiBwcm9jZXNzaW5nLCB3aXRoIGVycm9ycyBsaWtlICJCYWQgc3Vic3RpdHV0aW9uIi4KKworVGhlc2UgaGF2ZSBiZWVuIHRyYWNlZCBiYWNrIHRvIGhhdmluZyAvYmluL3NoIC0tPiAgL2Jpbi9kYXNoIG9uIFVidW50dQorc3lzdGVtcy4gIFB1dHRpbmcgYSBzaGVsbCB0aGF0IGFjdHVhbGx5ICp3b3JrcyogKHN1Y2ggYXMgL2Jpbi9iYXNoKQoraW4gYXMgL2Jpbi9zaCBtYWtlcyB0aGUgcHJvYmxlbSBnbyBhd2F5LiAgU28gaGVyZSB3ZSBjaGFuZ2UgdGhlIGd1aWx0CitzY3JpcHRzIHRvIGV4cGxpY2l0bHkgY2FsbCBmb3IgYmFzaCB0byBlbnN1cmUgd2UgZG9uJ3QgaGF2ZSBhIHNpbWlsYXIKK2lzc3VlIGFmdGVyIGRlcGxveW1lbnQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2Utc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorCistLS0KKyBndWlsdCAgICAgICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LWFkZCAgICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtYXBwbGllZCAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1icmFuY2ggICAgICAgIHwgICAgMiArLQorIGd1aWx0LWRlbGV0ZSAgICAgICAgfCAgICAyICstCisgZ3VpbHQtZGlmZiAgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1leHBvcnQgICAgICAgIHwgICAgMiArLQorIGd1aWx0LWZpbGVzICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtZm9sZCAgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1mb3JrICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LWdyYXBoICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtaGVhZGVyICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1oZWxwICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LWltcG9ydCAgICAgICAgfCAgICAyICstCisgZ3VpbHQtaW1wb3J0LWNvbW1pdCB8ICAgIDIgKy0KKyBndWlsdC1pbml0ICAgICAgICAgIHwgICAgNCArKy0tCisgZ3VpbHQtbmV3ICAgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1uZXh0ICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LXBhdGNoYm9tYiAgICAgfCAgICAyICstCisgZ3VpbHQtcG9wICAgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1wcmV2ICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LXB1c2ggICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtcmViYXNlICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1yZWZyZXNoICAgICAgIHwgICAgMiArLQorIGd1aWx0LXJtICAgICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtc2VyaWVzICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1zdGF0dXMgICAgICAgIHwgICAgMiArLQorIGd1aWx0LXRvcCAgICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtdW5hcHBsaWVkICAgICB8ICAgIDIgKy0KKyAyOSBmaWxlcyBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspLCAzMCBkZWxldGlvbnMoLSkKKworLS0tIGEvZ3VpbHQKKysrKyBiL2d1aWx0CitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LTIwMTAKKyAjCistLS0gYS9ndWlsdC1hZGQKKysrKyBiL2d1aWx0LWFkZAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LWFwcGxpZWQKKysrKyBiL2d1aWx0LWFwcGxpZWQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1icmFuY2gKKysrKyBiL2d1aWx0LWJyYW5jaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNy0yMDA4CisgIworLS0tIGEvZ3VpbHQtZGVsZXRlCisrKysgYi9ndWlsdC1kZWxldGUKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1kaWZmCisrKysgYi9ndWlsdC1kaWZmCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoQykgMjAwNyBKb3NlZiAnSmVmZicgU2lwZWsgPGplZmZwY0Bqb3NlZnNpcGVrLm5ldD4KKyAjCistLS0gYS9ndWlsdC1leHBvcnQKKysrKyBiL2d1aWx0LWV4cG9ydAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIFBpZXJyZSBIYWJvdXppdCwgMjAwNworICMKKy0tLSBhL2d1aWx0LWZpbGVzCisrKysgYi9ndWlsdC1maWxlcworQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKEMpIDIwMDcgWWFzdXNoaSBTSE9KSSA8eWFzaGlAYXRtYXJrLXRlY2huby5jb20+CisgIworLS0tIGEvZ3VpbHQtZm9sZAorKysrIGIvZ3VpbHQtZm9sZAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LWZvcmsKKysrKyBiL2d1aWx0LWZvcmsKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDcKKyAjCistLS0gYS9ndWlsdC1ncmFwaAorKysrIGIvZ3VpbHQtZ3JhcGgKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDcKKyAjCistLS0gYS9ndWlsdC1oZWFkZXIKKysrKyBiL2d1aWx0LWhlYWRlcgorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNi0yMDEwCisgIworLS0tIGEvZ3VpbHQtaGVscAorKysrIGIvZ3VpbHQtaGVscAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNworICMKKy0tLSBhL2d1aWx0LWltcG9ydAorKysrIGIvZ3VpbHQtaW1wb3J0CitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA3CisgIworLS0tIGEvZ3VpbHQtaW1wb3J0LWNvbW1pdAorKysrIGIvZ3VpbHQtaW1wb3J0LWNvbW1pdAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNworICMKKy0tLSBhL2d1aWx0LWluaXQKKysrKyBiL2d1aWx0LWluaXQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCitAQCAtMzEsNyArMzEsNyBAQCB0b3VjaCAiJEdVSUxUX0RJUi8kYnJhbmNoL3N0YXR1cyIKKyAKKyBta2RpciAtcCAiJEdJVF9ESVIvaG9va3MvZ3VpbHQiCisgY2F0ID4gIiRHSVRfRElSL2hvb2tzL2d1aWx0L2RlbGV0ZSIgPDxFT0YKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMgVXNhZ2U6IDxzY3JpcHQ+IDxwYXRjaCBiZWluZyByZW1vdmVkPgorIAorIGVjaG8gIlJlbW92aW5nIHBhdGNoICdcJDEnLi4uIgorLS0tIGEvZ3VpbHQtbmV3CisrKysgYi9ndWlsdC1uZXcKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1uZXh0CisrKysgYi9ndWlsdC1uZXh0CitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtcGF0Y2hib21iCisrKysgYi9ndWlsdC1wYXRjaGJvbWIKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDcKKyAjCistLS0gYS9ndWlsdC1wb3AKKysrKyBiL2d1aWx0LXBvcAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LXByZXYKKysrKyBiL2d1aWx0LXByZXYKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1wdXNoCisrKysgYi9ndWlsdC1wdXNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtcmViYXNlCisrKysgYi9ndWlsdC1yZWJhc2UKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDcKKyAjCistLS0gYS9ndWlsdC1yZWZyZXNoCisrKysgYi9ndWlsdC1yZWZyZXNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtcm0KKysrKyBiL2d1aWx0LXJtCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtc2VyaWVzCisrKysgYi9ndWlsdC1zZXJpZXMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1zdGF0dXMKKysrKyBiL2d1aWx0LXN0YXR1cworQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LXRvcAorKysrIGIvZ3VpbHQtdG9wCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtdW5hcHBsaWVkCisrKysgYi9ndWlsdC11bmFwcGxpZWQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsdC9ndWlsdC1uYXRpdmVfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbHQvZ3VpbHQtbmF0aXZlX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjNjNjhjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbHQvZ3VpbHQtbmF0aXZlX2dpdC5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gInF1aWx0LWxpa2UgdG9vbCBmb3IgR2l0IgorTElDRU5TRSA9ICJHUEx2MiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjZmMzQwMGRjMWEwMWNlYmFmZThhNTJiM2YzNDQxMzUiCisKK2luaGVyaXQgbmF0aXZlCisKK1NSQ19VUkkgPSAiZ2l0Oi8vcmVwby5vci5jei9ndWlsdC5naXQgXAorICAgICAgICAgICBmaWxlOi8vZ3VpbHQtYmFzaC5wYXRjaCBcCisgICAgICAgICAgICIKK1BWID0gIjAuMzUrZ2l0JHtTUkNQVn0iCitTUkNSRVYgPSAiYzJhNWJhZTUxMWM2ZDUzNTRhYTRlMWNiNTkwNjljMzFkZjJiOGVlYiIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworIyB3ZSBkb24ndCBjb21waWxlLCB3ZSBqdXN0IGluc3RhbGwKK2RvX2NvbXBpbGUoKSB7CisJOgorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgUFJFRklYPSR7RH0vJHtwcmVmaXh9IGluc3RhbGwKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2hlbHAybWFuL2hlbHAybWFuLW5hdGl2ZV8xLjQ3LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9oZWxwMm1hbi9oZWxwMm1hbi1uYXRpdmVfMS40Ny4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNmQ1MGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9oZWxwMm1hbi9oZWxwMm1hbi1uYXRpdmVfMS40Ny4xLmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiUHJvZ3JhbSBmb3IgY3JlYXRpbmcgc2ltcGxlIG1hbiBwYWdlcyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCitERVBFTkRTID0gImF1dG9jb25mLW5hdGl2ZSBhdXRvbWFrZS1uYXRpdmUiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gImNmN2FhYWVlYTQwYmZmMTE3NmRmODI1NDMwNjk0MTczIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM1OWIyNmY2MGNiMDZlNDViMDBlNzI5ZGVhNzIxZTdhMTcyMjBlMmMxN2Q4MDBlYjQyODI3MWE3NTAzODJiMDYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIG5hdGl2ZQorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLW5scyIKKworIyBXZSBkb24ndCB3YW50IHRvIHJlY29uZmlndXJlIHRoaW5ncyBhcyBpdCB3b3VsZCByZXF1aXJlICdwZXJsbmF0aXZlJyB0byBiZQorIyB1c2VkLgorZG9fY29uZmlndXJlKCkgeworCW9lX3J1bmNvbmYKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCSMgTWFrZSBzdXJlIHdlIHVzZSAvdXNyL2Jpbi9lbnYgcGVybAorCXNlZCAtaSAtZSAiMXM6IyEuKjojISAvdXNyL2Jpbi9lbnYgcGVybDoiICR7RH0ke2JpbmRpcn0vaGVscDJtYW4KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2kyYy10b29scy9maWxlcy9Nb2R1bGUubWsgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pMmMtdG9vbHMvZmlsZXMvTW9kdWxlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYWY3MmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pMmMtdG9vbHMvZmlsZXMvTW9kdWxlLm1rCkBAIC0wLDAgKzEsNzIgQEAKKyMgRUVQUk9NRVIKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCitFRVBST01FUl9ESVIJOj0gZWVwcm9tZXIKKworRUVQUk9NRVJfQ0ZMQUdTCTo9IC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdzaGFkb3cgLVdwb2ludGVyLWFyaXRoIC1XY2FzdC1xdWFsIFwKKwkJICAgLVdjYXN0LWFsaWduIC1Xd3JpdGUtc3RyaW5ncyAtV25lc3RlZC1leHRlcm5zIC1XaW5saW5lIFwKKwkJICAgLVcgLVd1bmRlZiAtV21pc3NpbmctcHJvdG90eXBlcyAtSWluY2x1ZGUKKworRUVQUk9NRVJfVEFSR0VUUwk6PSBlZXByb21lciBlZXByb20gZWVwcm9nCisKKyMKKyMgUHJvZ3JhbXMKKyMKKworJChFRVBST01FUl9ESVIpL2VlcHJvbWVyOiAkKEVFUFJPTUVSX0RJUikvZWVwcm9tZXIubworCSQoQ0MpICQoTERGTEFHUykgLW8gJEAgJF4KKworJChFRVBST01FUl9ESVIpL2VlcHJvbTogJChFRVBST01FUl9ESVIpL2VlcHJvbS5vCisJJChDQykgJChMREZMQUdTKSAtbyAkQCAkXgorCiskKEVFUFJPTUVSX0RJUikvZWVwcm9nOiAkKEVFUFJPTUVSX0RJUikvZWVwcm9nLm8gJChFRVBST01FUl9ESVIpLzI0Y1hYLm8gCisJJChDQykgJChMREZMQUdTKSAtbyAkQCAkXgorCisjCisjIE9iamVjdHMKKyMKKworJChFRVBST01FUl9ESVIpL2VlcHJvbWVyLm86ICQoRUVQUk9NRVJfRElSKS9lZXByb21lci5jCisJJChDQykgJChDRkxBR1MpICQoRUVQUk9NRVJfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCiskKEVFUFJPTUVSX0RJUikvZWVwcm9tLm86ICQoRUVQUk9NRVJfRElSKS9lZXByb20uYworCSQoQ0MpICQoQ0ZMQUdTKSAkKEVFUFJPTUVSX0NGTEFHUykgLWMgJDwgLW8gJEAKKworJChFRVBST01FUl9ESVIpL2VlcHJvZy5vOiAkKEVFUFJPTUVSX0RJUikvZWVwcm9nLmMKKwkkKENDKSAkKENGTEFHUykgJChFRVBST01FUl9DRkxBR1MpIC1jICQ8IC1vICRACisKKyQoRUVQUk9NRVJfRElSKS8yNGNYWC5vOiAkKEVFUFJPTUVSX0RJUikvMjRjWFguYworCSQoQ0MpICQoQ0ZMQUdTKSAkKEVFUFJPTUVSX0NGTEFHUykgLWMgJDwgLW8gJEAKKworIworIyBDb21tYW5kcworIworCithbGwtZWVwcm9tZXI6ICQoYWRkcHJlZml4ICQoRUVQUk9NRVJfRElSKS8sJChFRVBST01FUl9UQVJHRVRTKSkKKworc3RyaXAtZWVwcm9tZXI6ICQoYWRkcHJlZml4ICQoRUVQUk9NRVJfRElSKS8sJChFRVBST01FUl9UQVJHRVRTKSkKKwlzdHJpcCAkKGFkZHByZWZpeCAkKEVFUFJPTUVSX0RJUikvLCQoRUVQUk9NRVJfVEFSR0VUUykpCisKK2NsZWFuLWVlcHJvbWVyOgorCSQoUk0pICQoYWRkcHJlZml4ICQoRUVQUk9NRVJfRElSKS8sKi5vICQoRUVQUk9NRVJfVEFSR0VUUykpCisKK2luc3RhbGwtZWVwcm9tZXI6ICQoYWRkcHJlZml4ICQoRUVQUk9NRVJfRElSKS8sJChFRVBST01FUl9UQVJHRVRTKSkKKwkkKElOU1RBTExfRElSKSAkKERFU1RESVIpJChzYmluZGlyKSAkKERFU1RESVIpJChtYW44ZGlyKQorCWZvciBwcm9ncmFtIGluICQoRUVQUk9NRVJfVEFSR0VUUykgOyBkbyBcCisJJChJTlNUQUxMX1BST0dSQU0pICQoRUVQUk9NRVJfRElSKS8kJHByb2dyYW0gJChERVNURElSKSQoc2JpbmRpcikgOyBkb25lCisKK3VuaW5zdGFsbC1lZXByb21lcjoKKwlmb3IgcHJvZ3JhbSBpbiAkKEVFUFJPTUVSX1RBUkdFVFMpIDsgZG8gXAorCSQoUk0pICQoREVTVERJUikkKHNiaW5kaXIpLyQkcHJvZ3JhbSA7IFwKKwkkKFJNKSAkKERFU1RESVIpJChtYW44ZGlyKS8kJHByb2dyYW0uOCA7IGRvbmUKKworYWxsOiBhbGwtZWVwcm9tZXIKKworc3RyaXA6IHN0cmlwLWVlcHJvbWVyCisKK2NsZWFuOiBjbGVhbi1lZXByb21lcgorCitpbnN0YWxsOiBpbnN0YWxsLWVlcHJvbWVyCisKK3VuaW5zdGFsbDogdW5pbnN0YWxsLWVlcHJvbWVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pMmMtdG9vbHMvaTJjLXRvb2xzXzMuMS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaTJjLXRvb2xzL2kyYy10b29sc18zLjEuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmY0ZDY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaTJjLXRvb2xzL2kyYy10b29sc18zLjEuMi5iYgpAQCAtMCwwICsxLDM0IEBACitTVU1NQVJZID0gIlNldCBvZiBpMmMgdG9vbHMgZm9yIGxpbnV4IgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKKworU1JDX1VSSSA9ICJodHRwOi8vZGwubG0tc2Vuc29ycy5vcmcvaTJjLXRvb2xzL3JlbGVhc2VzLyR7QlB9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vTW9kdWxlLm1rIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MTA0YTEwNDNkMTFhNWUyYzdiMTMxNjE0ZWIxYjk2MiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkYjVlNjlmMmUyYTZlM2FhMmVjZGZlNmE1ZjQ5MGIxNDljNTA0NDY4NzcwZjU4OTIxYzhjNWI4YTc4NjBhNDQxIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgIGNwICR7V09SS0RJUn0vTW9kdWxlLm1rICR7U30vZWVwcm9tZXIvCisgICAgc2VkIC1pICdzIy91c3IvbG9jYWwjL3VzciMnICR7U30vTWFrZWZpbGUKKyAgICBlY2hvICJpbmNsdWRlIGVlcHJvbWVyL01vZHVsZS5tayIgPj4gJHtTfS9NYWtlZmlsZQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9L2xpbnV4CisgICAgaW5zdGFsbCAtbSAwNjQ0IGluY2x1ZGUvbGludXgvaTJjLWRldi5oICR7RH0ke2luY2x1ZGVkaXJ9L2xpbnV4L2kyYy1kZXYtdXNlci5oCisgICAgcm0gLWYgJHtEfSR7aW5jbHVkZWRpcn0vbGludXgvaTJjLWRldi5oCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1taXNjIgorRklMRVNfJHtQTn0tbWlzYyA9ICIke3NiaW5kaXJ9L2kyYy1zdHViLWZyb20tZHVtcCBcCisgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZGRjbW9uIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9kZWNvZGUtZWRpZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZGVjb2RlLWRpbW1zIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9kZWNvZGUtdmFpbyBcCisgICAgICAgICAgICAgICAgICAgICAgICIKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1taXNjIgorUkRFUEVORFNfJHtQTn0tbWlzYyArPSAicGVybCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudi1uYXRpdmVfMC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52LW5hdGl2ZV8wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhmNGFlZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudi1uYXRpdmVfMC4xLmJiCkBAIC0wLDAgKzEsMzYgQEAKK1NVTU1BUlkgPSAiaWNlY2MgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IgorREVTQ1JJUFRJT04gPSAiVGhpcyBpcyBhIHZlcnNpb24gb2YgdGhlIGljZWNjLWNyZWF0ZS1lbnYgc2NyaXB0IHRoYXQgaGFzIFwKK2JlZW4gbW9kaWZpZWQgaW4gb3JkZXIgdG8gbWFrZSBpdCB3b3JrIHdpdGggT0UuIgorU0VDVElPTiA9ICJiYXNlIgorIyBzb3VyY2UgZmlsZSBoYXMganVzdCBhICJHUEwiIHdvcmQsIGJ1dCB1cHN0cmVhbSBpcyBHUEx2MisuCisjIG1vc3QgcHJvYmFibHkganVzdCBHUEwgd291bGQgYmUgYSBtaXN0YWtlCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2ljZWNjLWNyZWF0ZS1lbnY7YmVnaW5saW5lPTI7ZW5kbGluZT01O21kNT1hZTFkZjNkNmEwNThiZmRhNDBiNjYwOTRjNWY2MDY1ZiIKKworUFIgPSAicjIiCisKK0RFUEVORFMgPSAiIgorSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworaW5oZXJpdCBuYXRpdmUKKworIyBUaGlzIGlzIG5lZWRlZCwgYmVjYXVzZSBvdGhlcndpc2UgdGhlcmUgaXMgZGVwZW5kZW5jeSBsb29wIGZyb20gcXVpbHQtbmF0aXZlCisjIERlcGVuZGVuY3kgbG9vcCAjMSBmb3VuZDoKKyMgIFRhc2sgMTA5MDcgKG1ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC1uYXRpdmVfMC42MC5iYiwgZG9faW5zdGFsbCkgKGRlcGVuZGVudCBUYXNrcyBbJ3F1aWx0LW5hdGl2ZSwgZG9fY29tcGlsZSddKQorIyAgVGFzayAxMDkwOCAobWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZV8wLjYwLmJiLCBkb19wb3B1bGF0ZV9zeXNyb290KSAoZGVwZW5kZW50IFRhc2tzIFsncXVpbHQtbmF0aXZlLCBkb19pbnN0YWxsJ10pCisjICBUYXNrIDEwOTk3IChtZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52LW5hdGl2ZV8wLjEuYmIsIGRvX3BhdGNoKSAoZGVwZW5kZW50IFRhc2tzIFsnaWNlY2MtY3JlYXRlLWVudi1uYXRpdmUsIGRvX3VucGFjaycsICdxdWlsdC1uYXRpdmUsIGRvX3BvcHVsYXRlX3N5c3Jvb3QnXSkKKyMgIFRhc2sgMTEwMDEgKG1ldGEvcmVjaXBlcy1kZXZ0b29scy9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlXzAuMS5iYiwgZG9fY29uZmlndXJlKSAoZGVwZW5kZW50IFRhc2tzIFsnaWNlY2MtY3JlYXRlLWVudi1uYXRpdmUsIGRvX3BhdGNoJ10pCisjICBUYXNrIDExMDAyIChtZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52LW5hdGl2ZV8wLjEuYmIsIGRvX2NvbXBpbGUpIChkZXBlbmRlbnQgVGFza3MgWydpY2VjYy1jcmVhdGUtZW52LW5hdGl2ZSwgZG9fY29uZmlndXJlJ10pCisjICBUYXNrIDEwOTk4IChtZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52LW5hdGl2ZV8wLjEuYmIsIGRvX2luc3RhbGwpIChkZXBlbmRlbnQgVGFza3MgWydpY2VjYy1jcmVhdGUtZW52LW5hdGl2ZSwgZG9fY29tcGlsZSddKQorIyAgVGFzayAxMDk5OSAobWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudi1uYXRpdmVfMC4xLmJiLCBkb19wb3B1bGF0ZV9zeXNyb290KSAoZGVwZW5kZW50IFRhc2tzIFsnaWNlY2MtY3JlYXRlLWVudi1uYXRpdmUsIGRvX2luc3RhbGwnXSkKKyMgIFRhc2sgMTA5MTAgKG1ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC1uYXRpdmVfMC42MC5iYiwgZG9fY29uZmlndXJlKSAoZGVwZW5kZW50IFRhc2tzIFsncXVpbHQtbmF0aXZlLCBkb19wYXRjaCcsICdpY2VjYy1jcmVhdGUtZW52LW5hdGl2ZSwgZG9fcG9wdWxhdGVfc3lzcm9vdCddKQorIyAgVGFzayAxMDkxMSAobWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZV8wLjYwLmJiLCBkb19jb21waWxlKSAoZGVwZW5kZW50IFRhc2tzIFsncXVpbHQtbmF0aXZlLCBkb19jb25maWd1cmUnXSkKK1BBVENIVE9PTCA9ICJwYXRjaCIKK1NSQ19VUkkgPSAiZmlsZTovL2ljZWNjLWNyZWF0ZS1lbnYiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0vJHtiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaWNlY2MtY3JlYXRlLWVudiAke0R9LyR7YmluZGlyfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZTRkYmM0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYKQEAgLTAsMCArMSwxOTIgQEAKKyMhIC91c3IvYmluL2VudiBiYXNoCisjIGljZWNjIC0tIEEgc2ltcGxlIGRpc3RyaWJ1dGVkIGNvbXBpbGVyIHN5c3RlbQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDQgYnkgdGhlIEljZWNyZWFtIEF1dGhvcnMKKyMgR1BMCisKK3RhcmdldF9maWxlcz0KKworaXNfY29udGFpbmVkICgpCit7CisgIGNhc2UgIiAkdGFyZ2V0X2ZpbGVzICIgaW4KKyAgICAqIiAkMSAiKiApIHJldHVybiAwIDs7CisgICAgKiI9JDEgIiogKSByZXR1cm4gMDs7CisgICAgKiApIHJldHVybiAxIDs7CisgIGVzYWMKK30KKworYWRkX2ZpbGUgKCkKK3sKKyAgbG9jYWwgbmFtZT0iJDEiCisgIGxvY2FsIHBhdGg9IiQxIjsKKyAgaWYgdGVzdCAtbiAiJDIiOyB0aGVuCisgICAgbmFtZT0iJDIiCisgIGZpCisgIHRlc3QgLXogIiRuYW1lIiAmJiByZXR1cm4KKyAgIyBscyAtSCBpc24ndCByZWFsbHkgdGhlIHNhbWUgYXMgcmVhZGxpbmssIGJ1dAorICAjIHJlYWRsaW5rIGlzIG5vdCBwb3J0YWJsZSBlbm91Z2guCisgIHBhdGg9YGxzIC1IICRwYXRoYAorICB0b2FkZD0iJG5hbWU9JHBhdGgiCisgIGlzX2NvbnRhaW5lZCAiJHRvYWRkIiAmJiByZXR1cm4KKyAgaWYgdGVzdCAteiAiJHNpbGVudCI7IHRoZW4KKyAgZWNobyAiYWRkaW5nIGZpbGUgJHRvYWRkIgorICBmaQorICB0YXJnZXRfZmlsZXM9IiR0YXJnZXRfZmlsZXMgJHRvYWRkIgorICBpZiB0ZXN0IC14ICIkcGF0aCI7IHRoZW4KKyAgICAjIE9ubHkgY2FsbCBsZGQgd2hlbiBpdCBtYWtlcyBzZW5zZQorICAgIGlmIGZpbGUgLUwgIiRwYXRoIiB8IGdyZXAgJ0VMRicgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorCWlmICEgZmlsZSAtTCAiJHBhdGgiIHwgZ3JlcCAnc3RhdGljJyA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICAgIyBsZGQgbm93IG91dHB1dHMgbGQgYXMgL2xpYi9sZC1saW51eC5zby54eCBvbiBjdXJyZW50IG5wdGwgYmFzZWQgZ2xpYmMKKwkJIyB0aGlzIHJlZ2V4cCBwYXJzZSB0aGUgb3V0cHV0cyBsaWtlOgorCQkjIGxkZCAvdXNyL2Jpbi9nY2MKKwkJIyAgICAgICAgIGxpbnV4LWdhdGUuc28uMSA9PiAgKDB4ZmZmZmUwMDApCisJCSMgICAgICAgICBsaWJjLnNvLjYgPT4gL2xpYi90bHMvbGliYy5zby42ICgweGI3ZTgxMDAwKQorCQkjICAgICAgICAgL2xpYi9sZC1saW51eC5zby4yICgweGI3ZmU4MDAwKQorCQkjIGNvdmVyaW5nIGJvdGggc2l0dWF0aW9ucyAoIHdpdGggPT4gYW5kIHdpdGhvdXQgKQorICAgICAgICAgIGZvciBsaWIgaW4gYGxkZCAiJHBhdGgiIHwgc2VkIC1uICdzLF5bXi9dKlwoL1teIF0qXCkuKixcMSxwJ2A7IGRvCisJICAgIHRlc3QgLWYgIiRsaWIiIHx8IGNvbnRpbnVlCisJICAgICMgQ2hlY2sgd2V0aGVyIHRoZSBzYW1lIGxpYnJhcnkgYWxzbyBleGlzdHMgaW4gdGhlIHBhcmVudCBkaXJlY3RvcnksCisJICAgICMgYW5kIHByZWZlciB0aGF0IG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgaXQgaXMgYSBtb3JlIGdlbmVyaWMgb25lLgorCSAgICBsb2NhbCBiYXNlbGliPWBlY2hvICIkbGliIiB8IHNlZCAncyxcKC9bXi9dKlwpLy4qXCgvW14vXSpcKSQsXDFcMiwnYAorCSAgICB0ZXN0IC1mICIkYmFzZWxpYiIgJiYgbGliPSRiYXNlbGliCisJICBhZGRfZmlsZSAiJGxpYiIKKyAgICAgICAgZG9uZQorICAgICAgZmkKKyAgICBmaQorICBmaQorfQorCisjIGJhY2t3YXJkIGNvbXBhdAoraWYgdGVzdCAiJDEiID0gIi0tcmVzcGVjdC1wYXRoIjsgdGhlbgorICBzaGlmdAorZmkKKworI2FkZCBhIC0tc2lsZW50IHN3aXRjaCB0byBhdm9pZCAiYnJva2VuIHBpcGUiIGVycm9ycyB3aGVuIGNhbGxpbmcgdGhpcyBzY2lwdCBmcm9tIHdpdGhpbiBPRQoraWYgdGVzdCAiJDEiID0gIi0tc2lsZW50IjsgdGhlbgorIHNpbGVudD0xCisgc2hpZnQKK2ZpCisKKworYWRkZWRfZ2NjPSQxCitzaGlmdAorYWRkZWRfZ3h4PSQxCitzaGlmdAorYWRkZWRfYXM9JDEKK3NoaWZ0CithcmNoaXZlX25hbWU9JDEKKworaWYgdGVzdCAteiAiJGFkZGVkX2djYyIgfHwgdGVzdCAteiAiJGFkZGVkX2d4eCIgOyB0aGVuCisJZWNobyAidXNhZ2U6ICQwIDxnY2NfcGF0aD4gPGcrK19wYXRoPiIKKwlleGl0IDEKK2ZpCisKK2lmICEgdGVzdCAteCAiJGFkZGVkX2djYyIgOyB0aGVuCisgIGVjaG8gIickYWRkZWRfZ2NjJyBpcyBubyBleGVjdXRhYmxlLiIKKyAgZXhpdCAxCitmaQorCitpZiAhIHRlc3QgLXggIiRhZGRlZF9neHgiIDsgdGhlbgorICBlY2hvICInJGFkZGVkX2djYycgaXMgbm8gZXhlY3V0YWJsZS4iCisgIGV4aXQgMQorZmkKKworCisKK2FkZF9maWxlICRhZGRlZF9nY2MgL3Vzci9iaW4vZ2NjCithZGRfZmlsZSAkYWRkZWRfZ3h4IC91c3IvYmluL2crKworCitpZiB0ZXN0IC16ICIkYWRkZWRfYXMiIDsgdGhlbgorIGFkZF9maWxlIC91c3IvYmluL2FzIC91c3IvYmluL2FzCitlbHNlCisgaWYgISB0ZXN0IC14ICIkYWRkZWRfYXMiIDsgdGhlbgorICBlY2hvICInJGFkZGVkX2FzJyBpcyBubyBleGVjdXRhYmxlLiIKKyAgZXhpdCAxCisgZmkKKworIGFkZF9maWxlICRhZGRlZF9hcyAgL3Vzci9iaW4vYXMKK2ZpCisKK2FkZF9maWxlIGAkYWRkZWRfZ2NjIC1wcmludC1wcm9nLW5hbWU9Y2MxYCAvdXNyL2Jpbi9jYzEKK2FkZF9maWxlIGAkYWRkZWRfZ3h4IC1wcmludC1wcm9nLW5hbWU9Y2MxcGx1c2AgL3Vzci9iaW4vY2MxcGx1cworc3BlY2ZpbGU9YCRhZGRlZF9nY2MgLXByaW50LWZpbGUtbmFtZT1zcGVjc2AKK2lmIHRlc3QgLW4gIiRzcGVjZmlsZSIgJiYgdGVzdCAtZSAiJHNwZWNmaWxlIjsgdGhlbgorICBhZGRfZmlsZSAiJHNwZWNmaWxlIgorZmkKKworbHRvZmlsZT1gJGFkZGVkX2djYyAtcHJpbnQtcHJvZy1uYW1lPWx0bzFgCitwbHVnaW5maWxlPSIke2x0b2ZpbGUlbHRvMX1saWJsdG9fcGx1Z2luLnNvIgoraWYgdGVzdCAtciAiJHBsdWdpbmZpbGUiCit0aGVuCisgIGFkZF9maWxlICRwbHVnaW5maWxlICAke3BsdWdpbmZpbGUjKnVzcn0KKyAgYWRkX2ZpbGUgJHBsdWdpbmZpbGUgIC91c3Ike3BsdWdpbmZpbGUjKnVzcn0KK2ZpCisKK3RlbXBkaXI9YG1rdGVtcCAtZCAvdG1wL2ljZWNjZW52WFhYWFhYYAorbmV3X3RhcmdldF9maWxlcz0KK2ZvciBpIGluICR0YXJnZXRfZmlsZXM7IGRvCisgY2FzZSAkaSBpbgorICAgKj0vKikKKyAgICB0YXJnZXQ9YGVjaG8gJGkgfCBjdXQgLWQ9IC1mMWAKKyAgICBwYXRoPWBlY2hvICRpIHwgY3V0IC1kPSAtZjJgCisgICAgOzsKKyAgICopCisgICAgcGF0aD0kaQorICAgIHRhcmdldD0kaQorICAgIDs7CisgIGVzYWMKKyAgbWtkaXIgLXAgJHRlbXBkaXIvYGRpcm5hbWUgJHRhcmdldGAKKyAgY3AgLXAgJHBhdGggJHRlbXBkaXIvJHRhcmdldAorICBpZiB0ZXN0IC1mICR0ZW1wZGlyLyR0YXJnZXQgLWEgLXggJHRlbXBkaXIvJHRhcmdldDsgdGhlbgorICAgIHN0cmlwIC1zICR0ZW1wZGlyLyR0YXJnZXQgMj4vZGV2L251bGwKKyAgZmkKKyAgdGFyZ2V0PWBlY2hvICR0YXJnZXQgfCBjdXQgLWIyLWAKKyAgbmV3X3RhcmdldF9maWxlcz0iJG5ld190YXJnZXRfZmlsZXMgJHRhcmdldCIKK2RvbmUKKworI3NvcnQgdGhlIGZpbGVzCit0YXJnZXRfZmlsZXM9YGZvciBpIGluICRuZXdfdGFyZ2V0X2ZpbGVzOyBkbyBlY2hvICRpOyBkb25lIHwgc29ydGAKKworI3Rlc3QgaWYgYW4gYXJjaGl2ZSBuYW1lIHdhcyBzdXBwbGllZAorI2lmIG5vdCB1c2UgdGhlIG1kNSBvZiBhbGwgZmlsZXMgYXMgdGhlIGFyY2hpdmUgbmFtZQoraWYgdGVzdCAteiAiJGFyY2hpdmVfbmFtZSI7IHRoZW4KKyAgbWQ1c3VtPU5PTkUKKyAgZm9yIGZpbGUgaW4gL3Vzci9iaW4vbWQ1c3VtIC9iaW4vbWQ1IC91c3IvYmluL21kNTsgZG8KKyAgICBpZiB0ZXN0IC14ICRmaWxlOyB0aGVuCisgICAgICBtZDVzdW09JGZpbGUKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorCisgICNjYWxjdWxhdGUgbWQ1IGFuZCB1c2UgaXQgYXMgdGhlIGFyY2hpdmUgbmFtZQorICBhcmNoaXZlX25hbWU9YGZvciBpIGluICR0YXJnZXRfZmlsZXM7IGRvIHRlc3QgLWYgJHRlbXBkaXIvJGkgJiYgJG1kNXN1bSAkdGVtcGRpci8kaTsgZG9uZSB8IHNlZCAtZSAncy8gLiokLy8nIHwgJG1kNXN1bSB8IHNlZCAtZSAncy8gLiokLy8nYC50YXIuZ3ogfHwgeworICAgIGlmIHRlc3QgLXogIiRzaWxlbnQiOyB0aGVuCisgICAgIGVjaG8gIkNvdWxkbid0IGNvbXB1dGUgTUQ1IHN1bS4iCisgICAgZmkKKyAgICBleGl0IDIKKyAgfQorICBteWRpcj1gcHdkYAorZWxzZQorICBteWRpcj0iYGRpcm5hbWUgIiRhcmNoaXZlX25hbWUiYCIKKworICAjY2hlY2sgaWYgd2UgaGF2ZSBhIGZ1bGwgcGF0aCBvciBvbmx5IGEgZmlsZW5hbWUKKyAgaWYgdGVzdCAiJG15ZGlyIiA9ICIuIiA7IHRoZW4KKyAgICBteWRpcj1gcHdkYAorICBlbHNlCisgICAgbXlkaXI9IiIKKyAgZmkKK2ZpCisKK2lmIHRlc3QgLXogIiRzaWxlbnQiOyB0aGVuCitlY2hvICJjcmVhdGluZyAkYXJjaGl2ZV9uYW1lIgorZmkKKworY2QgJHRlbXBkaXIKK3RhciAtY3poZiAiJG15ZGlyLyRhcmNoaXZlX25hbWUiICR0YXJnZXRfZmlsZXMgfHwgeworIGlmIHRlc3QgLXogIiRzaWxlbnQiOyB0aGVuCisgIGVjaG8gIkNvdWxkbid0IGNyZWF0ZSBhcmNoaXZlIgorIGZpCisgIGV4aXQgMworfQorY2QgLi4KK3JtIC1yZiAkdGVtcGRpcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNvbi1uYW1pbmctdXRpbHMvaWNvbi1uYW1pbmctdXRpbHNfMC44LjkwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNvbi1uYW1pbmctdXRpbHMvaWNvbi1uYW1pbmctdXRpbHNfMC44LjkwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMzU2YjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pY29uLW5hbWluZy11dGlscy9pY29uLW5hbWluZy11dGlsc18wLjguOTAuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJFbmFibGVzIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggY3VycmVudCBkZXNrdG9wIGljb24gdGhlbWVzIgorREVTQ1JJUFRJT04gPSAiQSBQZXJsIHNjcmlwdCB1c2VkIGZvciBtYWludGFpbmluZyBiYWNrd2FyZHMgXAorY29tcGF0aWJpbGl0eSB3aXRoIGN1cnJlbnQgZGVza3RvcCBpY29uIHRoZW1lcywgd2hpbGUgbWlncmF0aW5nIHRvIHRoZSBcCituYW1lcyBzcGVjaWZpZWQgaW4gdGhlIEljb24gTmFtaW5nIFNwZWNpZmljYXRpb24uIFRoZSBJY29uIE5hbWluZyBcCitVdGlsaXRpZXMgbWFwIHRoZSBpY29uIG5hbWVzIHVzZWQgYnkgdGhlIEdOT01FIGFuZCBLREUgZGVza3RvcHMgdG8gdGhlIFwKK2ljb24gbmFtZXMgcHJvcG9zZWQgaW4gdGhlIEljb24gTmFtaW5nIFNwZWNpZmljYXRpb24sIGFuZCBnZW5lcmF0ZSB0aGUgXAoraWNvbiBmaWxlcyBhcHByb3ByaWF0ZSB0byB0aGUgZGVza3RvcCBlbnZpcm9ubWVudCB5b3UgdXNlLiBUaGUgSWNvbiBcCitOYW1pbmcgU3BlY2lmaWNhdGlvbiBwcm92aWRlcyBhIHN0YW5kYXJkIGxpc3Qgb2YgY29tbW9uIGljb24gY29udGV4dHMgXAorYW5kIG5hbWVzIHRoYXQgY2FuIGJlIHVzZWQgdG8gbWFrZSBpY29uIHRoZW1lcyB3b3JrIGluIGEgZGVza3RvcCBcCitlbnZpcm9ubWVudCBvciBhcHBsaWNhdGlvbiB0aGF0IGltcGxlbWVudHMgdGhlIG5hbWluZyBzcGVjaWZpY2F0aW9uLiAiCitMSUNFTlNFID0gIkdQTHYyIgorREVQRU5EUyA9ICJsaWJ4bWwtc2ltcGxlLXBlcmwtbmF0aXZlIgorUFIgPSAicjUiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitTUkNfVVJJID0gImh0dHA6Ly90YW5nby5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvaWNvbi1uYW1pbmctdXRpbHMtJHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjJjNWM3YTQxOGU1ZWIzMjY4ZjY1ZTIxOTkzMjc3ZmJhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA0NGFiMjE5OWVkOGM2YTU1Y2UzNmZkNGZjZDhiODAyMWE1ZTIxZjViYWIwMjhjMGE3Y2RjZjUyYTU5MDJlMWMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGFsbGFyY2ggcGVybG5hdGl2ZQorCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCSMgTWFrZSBzdXJlIHdlIHVzZSBvdXIgbmF0aXZlcGVybCB3cmFwcGVyLgorCXNlZCAtaSAtZSAiMXM6IyEuKjojIS91c3IvYmluL2VudiBuYXRpdmVwZXJsOiIgJHtTfS9pY29uLW5hbWUtbWFwcGluZy5wbC5pbgorfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9kdGRzIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL2FkdF9pbnN0YWxsZXIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9hZHRfaW5zdGFsbGVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI4Y2ZiMmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9hZHRfaW5zdGFsbGVyCkBAIC0wLDAgKzEsNDIwIEBACisjIS9iaW4vYmFzaAorIyBZb2N0byBBRFQgSW5zdGFsbGVyCisjCisjIENvcHlyaWdodCAyMDEwLTIwMTEgYnkgSW50ZWwgQ29ycC4KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgCisjIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIAorIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIAorIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCAKKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiAKKyMgVEhFIFNPRlRXQVJFLgorCisKK3VzYWdlICgpCit7CisKKyAgSU5TVF9BUkNIPWB1bmFtZSAtbWAKKyAgSU5TVF9PUz1gdW5hbWUgLW98IHRyICdbQS1aXScgJ1thLXpdJ2AKKyAgSU5TVF9LUj1gdW5hbWUgLXJ8IHRyICdbQS1aXScgJ1thLXpdJ2AKKworICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgIGVjaG9faW5mbyAiIyBXZWxjb21lIHRvIFlvY3RvIEFwcGxpY2F0aW9uIERldmVsb3BlbWVudCBUb29scyAoQURUKSBJbnN0YWxsZXIiCisgIGVjaG9faW5mbyAiIyAiCisgIGVjaG9faW5mbyAiIyBIb3N0IE1hY2hpbmU6XHRcdFx0XHQiJElOU1RfQVJDSAorICBlY2hvX2luZm8gIiMgT1MgaW5mbzpcdFx0XHRcdCRJTlNUX0tSIiAgCisgIGVjaG9faW5mbyAiIyBZb2N0byBBRFQgdmVyc2lvbiB0byBiZSBpbnN0YWxsZWQ6XHQkWU9DVE9BRFRfVkVSU0lPTiIKKyAgZWNob19pbmZvICIjIHN1cHBvcnRlZCB0YXJnZXQgYXJjaGl0ZWN0dXJlczpcdCRZT0NUT0FEVF9TVVBQT1JURURfVEFSR0VUUyIKKyAgZWNob19pbmZvICIjIHN1cHBvcnRlZCB0YXJnZXQgcm9vdF9mcyBpbWFnZXM6XHQkWU9DVE9BRFRfU1VQUE9SVEVEX1JPT1RGUyIKKyAgZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisKKyAgZWNob19pbmZvICJTeXN0ZW13aWRlIGluc3RhbGxhdGlvbi4gSW5zdGFsbGF0aW9uIHdpbGwgb2NjdXIgdW5kZXIgJElOU1RBTExfRk9MREVSXG4iCisgIGVjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgZWNob19pbmZvICIjIFlvdXIgc3lzdGVtIGluc3RhbGxhdGlvbiBjb25maWd1cmF0aW9ucyBmcm9tIGFkdF9pbnN0YWxsZXIuY29uZiIKKyAgZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorCisgIGVjaG9faW5mbyAiIyBDcm9zcyB0b29sY2hhaW5zOlx0XHQkWU9DVE9BRFRfVEFSR0VUUyIKKyAgZWNob19pbmZvICIjIEluc3RhbGwgUWVtdTpcdFx0XHQkWU9DVE9BRFRfUUVNVSIKKyAgZWNob19pbmZvICIjIEluc3RhbGwgTkZTIHV0aWxpdGllczpcdCRZT0NUT0FEVF9ORlNfVVRJTCIKKyAgI2VjaG9faW5mbyAiIyBJbnN0YWxsIGJpdGJha2UgKyBVSTpcdFx0JFlPQ1RPQURUX0JJVEJBS0UiCisgICNlY2hvX2luZm8gIiMgSW5zdGFsbCBtZXRhZGF0YTpcdCRZT0NUT0FEVF9NRVRBREFUQSIKKyAgI2VjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorCisgICAgZWNob19pbmZvICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgICBlY2hvX2luZm8gIiMgWW91ciByb290ZnMgaW1hZ2UocykgYW5kIHRhcmdldCBzeXNyb290IHNlbGVjdGlvbnMgZnJvbSBhZHRfaW5zdGFsbGVyLmNvbmYiCisgICAgZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCitwcm9tcHQ9MQorZm9yIGFyY2hfdHlwZSBpbiAkWU9DVE9BRFRfVEFSR0VUUzsgZG8KKyAgZG93bmxvYWRfaW1hZ2VzICRhcmNoX3R5cGUgJHByb21wdAorZG9uZQorICAgIGVjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICBzZWxlY3RfaW5zdGFsbF90eXBlCit9CisKK3ZhbGlkYXRlX2NvbmZpZygpCit7CisKKyAgZm9yIHNlbGVjdGVkX2FyY2hfdHlwZSBpbiAkWU9DVE9BRFRfVEFSR0VUUzsgZG8KKyAgICBmb3VuZD0wCisgICAgc2VsZWN0X21hY2hpbmVfdmFyPSJcJFlPQ1RPQURUX1RBUkdFVF9NQUNISU5FXyRzZWxlY3RlZF9hcmNoX3R5cGUiCisgICAgc2VsZWN0X21hY2hpbmU9YGV2YWwgZWNobyAkc2VsZWN0X21hY2hpbmVfdmFyYAorICAgIHNob3dfZXJyb3JfYmFubmVyPTAKKworICAgIGZvciBzdXBwb3J0ZWRfYXJjaF90eXBlIGluICRZT0NUT0FEVF9TVVBQT1JURURfVEFSR0VUUzsgZG8KKyAgICAgIGlmIFsgIiRzZWxlY3RlZF9hcmNoX3R5cGUiID09ICIkc3VwcG9ydGVkX2FyY2hfdHlwZSIgXTsgdGhlbgorICAgICAgICBmb3VuZD0xCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGRvbmUKKyAgICBpZiBbICRmb3VuZCA9PSAwIF07IHRoZW4KKyAgICAgICBlY2hvX2luZm8gIltBRFRfSU5TVF0gRXJyb3I6IFlPQ1RBRFRfVEFSR0VUUyBpbiBhZHRfaW5zdGFsbGVyLmNvbmYgY29udGFpbnMgaW52YWxpZCBlbnRyaWVzOiAkWU9DVE9BRFRfVEFSR0VUUy4gVmFsaWQgdmFsdWVzIGFyZTogJFlPQ1RPQURUX1NVUFBPUlRFRF9UQVJHRVRTIgorICAgICAgIHNob3dfZXJyb3JfYmFubmVyPTEKKyAgICBlbGlmIFsgLXogIiRzZWxlY3RfbWFjaGluZSIgXTsgdGhlbgorICAgICAgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBFcnJvcjogTm8gTUFDSElORSB3YXMgZGVmaW5lZCBmb3IgJHNlbGVjdGVkX2FyY2hfdHlwZSBhcmNoaXRlY3R1cmUhIFRoaXMgaXMgbmVlZGVkIHRvIGluc3RhbGwgdGhlIHRvb2xjaGFpbiBhbmQgdGhlIGNvcnJlY3QgZW52aXJvbm1lbnQgc2V0dGluZ3MuIgorICAgICAgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBUbyBkbyB0aGF0LCBpbiBhZHQtaW5zdGFsbGVyLmNvbmYsIHNldCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlOiBZT0NUT0FEVF9UQVJHRVRfTUFDSElORV8kc2VsZWN0ZWRfYXJjaF90eXBlIgorICAgICAgIHNob3dfZXJyb3JfYmFubmVyPTEKKyAgICBmaQorCisgICAgaWYgWyAkc2hvd19lcnJvcl9iYW5uZXIgPT0gMSBdOyB0aGVuCisgICAgICAgZWNobyAtZSAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgICAgICBlY2hvIC1lICIjIE1lZXQgZXJyb3Iocykgd2hlbiBpbnN0YWxsaW5nIFlvY3RvIEFEVCEgUGxlYXNlIGNoZWNrIGxvZyBmaWxlIGZvciBkZXRhaWxzLiAiCisgICAgICAgZWNobyAtZSAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgICAgICBleGl0IC0xCisgICAgZmkKKyAgZG9uZQorCisgIGZvciBhcmNoX3R5cGUgaW4gJFlPQ1RPQURUX1NVUFBPUlRFRF9UQVJHRVRTOyBkbworICAgICNzZWxlY3RfdGFyZ2V0X3Zhcj0iXCRZT0NUT0FEVF9UQVJHRVRfJGFyY2hfdHlwZSIKKyAgICAjc2VsZWN0X3RhcmdldD1gZXZhbCBlY2hvICRzZWxlY3RfdGFyZ2V0X3ZhcmAKKworICAgICNpZiBbICIkc2VsZWN0X3RhcmdldCIgIT0gIlkiIF0gfHwgWyAiJHNlbGVjdGVkX3RhcmdldCIgIT0gInkiIF07IHRoZW4KKyAgICAjICBjb250aW51ZTsKKyAgICAjZmkKKworICAgIHRhcmdldF9zeXNyb290X2ltYWdlX3Zhcj0iXCRZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9JTUFHRV8kYXJjaF90eXBlIgorICAgIHRhcmdldF9zeXNyb290X2ltYWdlPWBldmFsIGVjaG8gJHRhcmdldF9zeXNyb290X2ltYWdlX3ZhcmAKKworCisgICAgc2VsZWN0X3Jvb3Rmc192YXI9IlwkWU9DVE9BRFRfUk9PVEZTXyRhcmNoX3R5cGUiCisgICAgc2VsZWN0X3Jvb3Rmcz1gZXZhbCBlY2hvICRzZWxlY3Rfcm9vdGZzX3ZhcmAKKworICAgIGlmIFsgIiRzZWxlY3Rfcm9vdGZzIiA9PSAiIiBdICYmIFsgIiR0YXJnZXRfc3lzcm9vdF9pbWFnZSIgPT0gIiIgXTsgdGhlbgorICAgICAgIGNvbnRpbnVlOworICAgIGZpCisKKyAgICBmb3IgaW1hZ2VfdHlwZSBpbiAkc2VsZWN0X3Jvb3RmczsgZG8KKyN2YWxpZGF0ZSByb290ZnMgdHlwZSBkZWZpbmVkIGluIFlPQ1RPQURUX1JPT1RGU197QVJDSH0gaXMgdmFsaWQgYW5kIGluIFlPQ1RPQURUX1NVUFBPUlRFRF9ST09URlMKKyAgICAgIGZvdW5kPTAKKyAgICAgIGZvciBzdXBwb3J0ZWRfcm9vdGZzX3R5cGUgaW4gJFlPQ1RPQURUX1NVUFBPUlRFRF9ST09URlM7IGRvCisgICAgICAgIGlmIFsgIiRpbWFnZV90eXBlIiA9PSAiJHN1cHBvcnRlZF9yb290ZnNfdHlwZSIgXTsgdGhlbgorICAgICAgICAgIGZvdW5kPTEKKyAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgICAgZG9uZQorICAgICAgaWYgWyAkZm91bmQgPT0gMCBdOyB0aGVuCisjdGhlIHJvb3RmcyB0eXBlIGxpc3RlZCBmb3IgZG93bmxvYWRpbmcgaXMgbm90IHZhbGlkCisgICAgICAgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBFcnJvcjogU2VsZWN0ZWQgWU9DVE9BRFRfUk9PVEZTXyRhcmNoX3R5cGUgdmFsdWU6ICRpbWFnZV90eXBlLCBpcyBub3QgdmFsaWQhIFZhbGlkIHZhbHVlcyBhcmU6ICRZT0NUT0FEVF9TVVBQT1JURURfUk9PVEZTICIKKyAgICAgICBlY2hvIC1lICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICAgICAgIGVjaG8gLWUgIiMgTWVldCBlcnJvcihzKSB3aGVuIGluc3RhbGxpbmcgWW9jdG8gQURUISBQbGVhc2UgY2hlY2sgbG9nIGZpbGUgZm9yIGRldGFpbHMuICIKKyAgICAgICBlY2hvIC1lICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICAgICAgICBleGl0IC0xCisgICAgICBmaQorICAgIGRvbmUKKworICAgIGZvdW5kPTAKKyAgICBmb3IgaW1hZ2VfdHlwZSBpbiAkc2VsZWN0X3Jvb3RmczsgZG8KKyN2YWxpZGF0ZSB0aGF0IHJvb3RmcyB0byBiZSBleHRyYWN0ZWQgbXVzdCBiZSBpbiB0aGUgaXRlbTogWU9DVE9BRFRfUk9PVEZTXyR7QVJDSH0KKyAgICAgIGlmIFsgIiR0YXJnZXRfc3lzcm9vdF9pbWFnZSIgPT0gIiRpbWFnZV90eXBlIiBdOyB0aGVuCisgICAgICAgIGZvdW5kPTEKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZG9uZQorIyB0aGUgcm9vdGZzIGltYWdlIHRvIGJlIGV4dHJhY3RlZCBpcyBub3Qgc2VsZWN0ZWQKKyAgICBpZiBbICRmb3VuZCA9PSAwIF07IHRoZW4KKyAgICAgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBFcnJvcjogWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfSU1BR0VfJGFyY2hfdHlwZSBzZWxlY3Rpb246ICR0YXJnZXRfc3lzcm9vdF9pbWFnZSBpcyBub3QgaW5jbHVkZWQgaW4gWU9DVE9BRFRfUk9PVEZTXyRhcmNoX3R5cGUgc2VsZWN0aW9uczogJHNlbGVjdF9yb290ZnMiCisgICAgICBlY2hvIC1lICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICAgICAgZWNobyAtZSAiIyBNZWV0IGVycm9yKHMpIHdoZW4gaW5zdGFsbGluZyBZb2N0byBBRFQhIFBsZWFzZSBjaGVjayBsb2cgZmlsZSBmb3IgZGV0YWlscy4gIgorICAgICAgZWNobyAtZSAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgICAgIGV4aXQgLTEKKyAgICBmaQorICBkb25lCit9CisKKworI2RldGVjdCBvcGtnIGluc3RhbGxlZCBvciBub3QsIGZvciBpbnN0YWxsaW5nIHNkaywgd2Ugd2lsbCB1c2UKKyN0aGlzIGluc3RhbGxlZCBsb2NhbCBvcGtnCitpbnN0YWxsX29wa2coKQoreworaWYgWyAhIC14ICIkTE9DQUxfT1BLR19MT0MvYmluL29wa2ciIF07IHRoZW4KKyAgZWNob19pbmZvICJPUEtHIGlzIG5vdCBzZXR1cCwgc2V0dGluZyB1cCBvcGtnIGluIGxvY2FsLCB3aGljaCBpcyByZXF1aXJlZCBmb3IgaW5zdGFsbGluZyB5b2N0byBBRFQuLi5cbiIKKworICBpZiBbIC1kICRMT0NBTF9PUEtHX0xPQyBdOyB0aGVuCisgICAgZWNob19pbmZvICJEZWxldGluZyBvbGQgT1BLRyBmb2xkZXIsIHdoaWNoIGRvZXNuJ3QgY29udGFpbiBleGVjdXRhYmxlcy4uLiAiCisgICAgcm0gLXJmICRMT0NBTF9PUEtHX0xPQworICBmaQorCisgIHBhcmVudF9mb2xkZXI9YHB3ZGAKKyAgY2QgJExPQ0FMX09QS0dfRk9MREVSCisgIGNoZWNrX3Jlc3VsdAorCisgIG9wa2dfc291cmNlX2Rpcj1gbHMgLWQgb3BrZy0qYAorCisgIGlmIFsgJG9wa2dfc291cmNlX2RpciA9PSAiIiBdOyB0aGVuCisgICAgZWNob19pbmZvICJbQURUX0lOU1RdIEVycm9yOiBPUEtHIHNvdXJjZSBkaXJlY3RvcnkgaXMgbm90IGZvdW5kISIKKyAgICBlY2hvIC1lICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICAgIGVjaG8gLWUgIiMgTWVldCBlcnJvcihzKSB3aGVuIGluc3RhbGxpbmcgWW9jdG8gQURUISBQbGVhc2UgY2hlY2sgbG9nIGZpbGUgZm9yIGRldGFpbHMuICIKKyAgICBlY2hvIC1lICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICAgIGV4aXQgLTEKKyAgZmkKKworICBjZCAkb3BrZ19zb3VyY2VfZGlyCisgIGNoZWNrX3Jlc3VsdAorCisgIGVjaG9faW5mbyAiQ29uZmlndXJlIG9wa2cgLi4uXG4iCisgIGF1dG9yZWNvbmYgLWkKKyAgLi9jb25maWd1cmUgLS1wcmVmaXg9JHBhcmVudF9mb2xkZXIvJExPQ0FMX09QS0dfTE9DIC0tZW5hYmxlLXNoYXJlZD1ubyAtLWRpc2FibGUtY3VybCAtLWRpc2FibGUtc3NsLWN1cmwgLS1kaXNhYmxlLWdwZyA+PiAkcGFyZW50X2ZvbGRlci8kWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRQorICBjaGVja19yZXN1bHQKKworICBlY2hvX2luZm8gIk1ha2Ugb3BrZyAuLi5cbiIKKyAgbWFrZSAmPj4gJHBhcmVudF9mb2xkZXIvJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUKKyAgY2hlY2tfcmVzdWx0CisKKyAgZWNob19pbmZvICJNYWtlIEluc3RhbGwgb3BrZyAuLi5cbiIKKyAgbWFrZSBpbnN0YWxsICY+PiAkcGFyZW50X2ZvbGRlci8kWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRQorICAjaWYgbWVldCBlcnJvciB3aGVuIGluc3RhbGxpbmcgb3BrZywgY2FuY2VsIHRoZSBpbnN0YWxsYXRpb24KKyAgY2hlY2tfcmVzdWx0CisKKyAgY2QgJHBhcmVudF9mb2xkZXIKKyAgZWNob19pbmZvICJTdWNjZXNzZnVsbHkgaW5zdGFsbGVkIE9QS0cuXG4iCitmaQorfQorCitjb25maXJtX2Rvd25sb2FkKCkKK3sKKyNhdm9pZCByZXBlYXRlZCByZW1pbmRpbmcKK2lmIFsgIiRvdmVycmlkZV9vbGRmaWxlIiA9PSAxIF07IHRoZW4KKyAgcmV0dXJuICRwcmVfcmVzdWx0CitlbHNlCisgIG92ZXJyaWRlX29sZGZpbGU9MQorZmkKKword2hpbGUgdHJ1ZTsgZG8KKyAgI2VjaG9faW5mbyAiW0FEVF9JTlNUXSBGaWxlcyBbJDFdIGFscmVhZHkgZXhpc3RzLiBJZiB5b3UgY29udGludWUgZG93bmxvYWRpbmcsIG9sZCBmaWxlcyB3aWxsIGJlIG92ZXJyaWRlZC4iCisgICNlY2hvX2luZm8gIltBRFRfSU5TVF0gRnVydGhlciBwcm9tcHRzIHdpbGwgbm90IGJlIGdpdmVuIGlmIHRoZXJlJ3JlIG1vcmUgZXhpc3RpbmcgZmlsZXMgdG8gYmUgZG93bmxvYWRlZC4iCisgICNlY2hvX2luZm8gIltBRFRfSU5TVF0gRG8geW91IHdhbnQgdG8gY29udGludWUgZG93bmxvYWRpbmc/IFBsZWFzZSBlbnRlciBZL046IgorICBlY2hvX2luZm8gIlxuRmlsZSBbJDFdIGFscmVhZHkgZXhpc3RzLCB3aGljaCBtZWFucyB5b3UndmUgZG93bmxvYWRlZCB0aGUgcWVtdSBrZXJuZWwgYW5kIHJvb3RmcyBmaWxlKHMpIGJlZm9yZS4gIElmIHlvdSBjaG9vc2UgY29udGludWUgZG93bmxvYWRpbmcsIG9sZCBmaWxlcyB3aWxsIGJlIG92ZXJyaWRkZW4uIgorICBlY2hvX2luZm8gIltBRFRfSU5TVF0gRG8geW91IHdhbnQgdG8gY29udGludWUgZG93bmxvYWRpbmc/IFBsZWFzZSBlbnRlciBZL046IgorICByZWFkIFlPQ1RPQURUX0lOU1RBTEwKKyAgWU9DVE9BRFRfSU5TVEFMTD1gdHIgJ1thLXpdJyAnW0EtWl0nPDw8IiRZT0NUT0FEVF9JTlNUQUxMImAKKyAgaWYgWyAiJFlPQ1RPQURUX0lOU1RBTEwiID09ICJZIiBdOyB0aGVuCisgICAgcHJlX3Jlc3VsdD0wCisgICAgcmV0dXJuIDAKKyAgZWxpZiBbICIkWU9DVE9BRFRfSU5TVEFMTCIgPT0gIk4iIF07IHRoZW4KKyAgICBwcmVfcmVzdWx0PTEKKyAgICByZXR1cm4gMQorICBmaQorZG9uZQorfQorCitkb3dubG9hZF9maWxlKCkKK3sKK2xvY2FsIGZpbGVuYW1lPWBlY2hvICR7MSMjKi99YAoraWYgWyAtZiAiJExPQ0FMX0RPV05MT0FELyRmaWxlbmFtZSIgXTsgdGhlbgorICBjb25maXJtX2Rvd25sb2FkICRmaWxlbmFtZQorICByZXN1bHQ9IiQ/IgorICBpZiBbICEgIiRyZXN1bHQiID09ICIwIiBdOyB0aGVuCisgICAgcmV0dXJuCisgIGVsc2UKKyAgICBlY2hvICJSZW1vdmluZyBvbGQgZmlsZSBbJDFdIgorICAgIHJtIC1yZiAiJExPQ0FMX0RPV05MT0FELyRmaWxlbmFtZSIgCisgIGZpCitmaQorZWNob19pbmZvICJEb3dubG9hZGluZyBmaWxlOiAkZmlsZW5hbWUuLi4iCit3Z2V0ICIkWU9DVE9BRFRfUkVQTy9yb290ZnMvJDEiIC1QICRMT0NBTF9ET1dOTE9BRCAtLXByb2dyZXNzPWJhcjpmb3JjZSAyPiYxIHwgdGVlIC1hICIkWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRSIgCit9CisKKworCisjTmVlZCB0aHJlZSBpbnB1dCBwYXJhbXM6CisjICQxIGFyY2hfdHlwZShhcm0gcG93ZXJwYyB4ODYgbWlwcykKKyMgJDIgbWFjaGluZShxZW11YXJtIGJlYWdsZWJvYXJkKQorIyAkMyByb290ZnNfaW1hZ2VfdHlwZSAoYSBsaXN0IG9mIHNkayBzYXRvIG1pbmltYWwgbHNiKQorZ2V0X2ltYWdlKCkKK3sKKyAgbG9jYWwgbWFjaGluZT0kMgorIAorICBpZiBbICIkMSIgPT0gIng4NiIgXSB8fCBbICIkMSIgPT0gIng4Nl82NCIgXTsgdGhlbgorICAgIGtlcm5lbD0iYnpJbWFnZS0kbWFjaGluZS5iaW4iCisgIGVsaWYgWyAiJDEiID09ICJwcGMiIF0gfHwgWyAiJDEiID09ICJtaXBzIiBdOyB0aGVuCisgICAga2VybmVsPSJ2bWxpbnV4LSRtYWNoaW5lLmJpbiIKKyAgZWxzZQorICAgIGtlcm5lbD0iekltYWdlLSRtYWNoaW5lLmJpbiIKKyAgZmkKKworICAjZWNob19pbmZvICJbQURUX0lOU1RdIERvd25sb2FkaW5nIHFlbXUga2VybmVsIGJpbmFyeTogJHFlbXVfa2VybmVsIgorICBkb3dubG9hZF9maWxlICRtYWNoaW5lLyRrZXJuZWwKKyAgY2hlY2tfcmVzdWx0CisgIAorICBmb3IgaW1hZ2VfdHlwZSBpbiAkc2VsZWN0X3Jvb3RmczsgZG8KKyAgICAjZWNob19pbmZvICJbQURUX0lOU1RdIERvd25sb2FkaW5nIHJvb3RmcyBmaWxlOiBjb3JlLWltYWdlLSRpbWFnZV90eXBlLSRtYWNoaW5lLnRhci5iejIiCisgICAgZmlsZW5hbWU9ImNvcmUtaW1hZ2UtJGltYWdlX3R5cGUtJG1hY2hpbmUudGFyLmJ6MiIKKyAgICBkb3dubG9hZF9maWxlICRtYWNoaW5lLyRmaWxlbmFtZQorICAgIGNoZWNrX3Jlc3VsdAorICBkb25lCit9CisKK2Rvd25sb2FkX2ltYWdlcygpCit7CisgIHNlbGVjdF9yb290ZnNfdmFyPSJcJFlPQ1RPQURUX1JPT1RGU18kMSIKKyAgc2VsZWN0X3N5c3Jvb3RfaW1hZ2VfdmFyPSJcJFlPQ1RPQURUX1RBUkdFVF9TWVNST09UX0lNQUdFXyQxIgorICBzZWxlY3Rfc3lzcm9vdF92YXI9IlwkWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfTE9DXyQxIgorICBzZWxlY3RfbWFjaGluZV92YXI9IlwkWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfJDEiCisgIHNlbGVjdF9yb290ZnM9YGV2YWwgZWNobyAkc2VsZWN0X3Jvb3Rmc192YXJgCisgIHNlbGVjdF9zeXNyb290X2ltYWdlPWBldmFsIGVjaG8gJHNlbGVjdF9zeXNyb290X2ltYWdlX3ZhcmAKKyAgc2VsZWN0X3N5c3Jvb3Q9YGV2YWwgZWNobyAkc2VsZWN0X3N5c3Jvb3RfdmFyYAorICBzZWxlY3RfbWFjaGluZT1gZXZhbCBlY2hvICRzZWxlY3RfbWFjaGluZV92YXJgCisKKyAgaWYgWyAtbiAiJHNlbGVjdF9zeXNyb290IiBdOyB0aGVuCisgICAgc2VsZWN0X3N5c3Jvb3Q9YHJlYWRsaW5rIC1tICRzZWxlY3Rfc3lzcm9vdGAKKyAgZmkKKworICBpZiBbICIkc2VsZWN0X3Jvb3RmcyIgIT0gIiIgXTsgdGhlbgorICAgIGlmIFsgJDIgXTsgdGhlbgorICAgICNlY2hvX2luZm8gIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgICAjZWNob19pbmZvICIjIFRvIGJlIGRvd25sb2FkZWQgcm9vdGZzIGltYWdlIGRldGFpbHMgZGVmaW5lZCBpbiBhZHRfaW5zdGFsbGVyLmNvbmYiCisgICAgI2VjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgICBlY2hvX2luZm8gIiMgVGFyZ2V0IGFyY2hpdGVjdHVyZTpcdFx0JDEiCisgICAgZWNob19pbmZvICIjIFRhcmdldCBtYWNoaW5lOlx0XHQkc2VsZWN0X21hY2hpbmUiCisgICAgZWNob19pbmZvICIjIFJvb3RfZnMgaW1hZ2VzOlx0XHQkc2VsZWN0X3Jvb3RmcyIKKyAgICBlY2hvX2luZm8gIiMgVGFyZ2V0IHN5c3Jvb3QgaW1hZ2U6XHRcdCRzZWxlY3Rfc3lzcm9vdF9pbWFnZSIKKyAgICBlY2hvX2luZm8gIiMgVGFyZ2V0IHN5c3Jvb3QgbG9jOlx0XHQkc2VsZWN0X3N5c3Jvb3QiCisgICAgZWNob19pbmZvICJcbiIKKyAgICAjZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgICAgZWxzZQorICAgIGdldF9pbWFnZSAkMSAkc2VsZWN0X21hY2hpbmUgJHNlbGVjdF9yb290ZnMKKyAgICBmaQorICBmaQorfQorCisKKworCisjTWFpbiBib2R5IG9mIGluc3RhbGxlcgorCitjbGVhcgorCitydW5fcGF0aD1gZGlybmFtZSAkMGAKK2NkICRydW5fcGF0aAorCitpZiBbICEgLWYgInNjcmlwdHMvdXRpbCIgXTsgdGhlbgorICBlY2hvIC1lICJbQURUX0lOU1RdIEVycm9yOiBTY3JpcHQgZmlsZTogdXRpbCwgY2FuJ3QgYmUgZm91bmQgdW5kZXI6ICRydW5fcGF0aCEiCisgIGVjaG8gLWUgIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgIGVjaG8gLWUgIiMgTWVldCBlcnJvcihzKSB3aGVuIGluc3RhbGxpbmcgWW9jdG8gQURUISBQbGVhc2UgY2hlY2sgbG9nIGZpbGUgZm9yIGRldGFpbHMuICIKKyAgZWNobyAtZSAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgZXhpdCAtMQorZmkKKworaWYgWyAhIC1mICJzY3JpcHRzL2FkdF9pbnN0YWxsZXJfaW50ZXJuYWwiIF07IHRoZW4KKyAgZWNobyAtZSAiW0FEVF9JTlNUXSBFcnJvcjogU2NyaXB0IGZpbGU6IGFkdF9pbnN0YWxsZXJfaW50ZXJuYWwsIGNhbid0IGJlIGZvdW5kIHVuZGVyOiAkcnVuX3BhdGghIgorICBlY2hvIC1lICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICBlY2hvIC1lICIjIE1lZXQgZXJyb3Iocykgd2hlbiBpbnN0YWxsaW5nIFlvY3RvIEFEVCEgUGxlYXNlIGNoZWNrIGxvZyBmaWxlIGZvciBkZXRhaWxzLiAiCisgIGVjaG8gLWUgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgIGV4aXQgLTEKK2ZpCisKK2NvbmZpZ19maWxlPSJhZHRfaW5zdGFsbGVyLmNvbmYiCitpZiBbICEgLWYgIiRjb25maWdfZmlsZSIgXTsgdGhlbgorICBlY2hvX2luZm8gIltBRFRfSU5TVF0gRXJyb3I6IEluc3RhbGxhdGlvbiBjb25maWd1cmF0aW9uIGZpbGU6IGFkdF9pbnN0YWxsZXIuY29uZiBpcyBub3QgZm91bmQhXG4iCisgIGVjaG9faW5mbyAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICBlY2hvX2luZm8gIiMgTWVldCBlcnJvcihzKSB3aGVuIGluc3RhbGxpbmcgWW9jdG8gQURULiBQbGVhc2UgY2hlY2sgbG9nIGZpbGUgZm9yIGRldGFpbHMuICIKKyAgZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgIGV4aXQgLTEKK2ZpCisKKy4gc2NyaXB0cy9kYXRhX2RlZmluZQorLiBzY3JpcHRzL3V0aWwKKworCitpZiBbIC1mICIkWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRSIgXTsgdGhlbgorICBybSAkWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRQorZmkKKworZWNobyAtbiAiUGxlYXNlIGVudGVyIHRoZSBpbnN0YWxsIGxvY2F0aW9uIChkZWZhdWx0OiAkREVGQVVMVF9JTlNUQUxMX0ZPTERFUik6ICIKK3JlYWQgSU5TVEFMTF9GT0xERVIKKworaWYgWyAiJElOU1RBTExfRk9MREVSIiA9ICIiIF07IHRoZW4KKyAgICBJTlNUQUxMX0ZPTERFUj0kREVGQVVMVF9JTlNUQUxMX0ZPTERFUgorZmkKKworZXZhbCBJTlNUQUxMX0ZPTERFUj0kKHByaW50ZiAiJXEiICIkSU5TVEFMTF9GT0xERVIiKQoraWYgWyAtZCAiJElOU1RBTExfRk9MREVSIiBdOyB0aGVuCisJZXhwb3J0IElOU1RBTExfRk9MREVSPSQoY2QgIiRJTlNUQUxMX0ZPTERFUiI7IHB3ZCkKK2Vsc2UKKwlleHBvcnQgSU5TVEFMTF9GT0xERVI9JChyZWFkbGluayAtbSAiJElOU1RBTExfRk9MREVSIikKK2ZpCisKK2lmIFsgLW4gIiQoZWNobyAkSU5TVEFMTF9GT0xERVJ8Z3JlcCAnICcpIiBdOyB0aGVuCisgICAgICAgZWNobyAiVGhlIHRhcmdldCBkaXJlY3RvcnkgcGF0aCAoJElOU1RBTExfRk9MREVSKSBjb250YWlucyBzcGFjZXMuIEFib3J0ISIKKyAgICAgICBleGl0IDEKK2ZpCisKK2NsZWFyCisKK3VzYWdlCisKK3VzZXJfaW5zdF90eXBlPSIkPyIKKwordmFsaWRhdGVfY29uZmlnCitjaGVja19yZXN1bHQKKworI2NoZWNrIGFkdF9yZXBvIGV4aXN0Cit3Z2V0IC0tc3BpZGVyICRZT0NUT0FEVF9SRVBPIDI+JjEgfCB0ZWUgLWEgIiRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFIgoraWYgZ3JlcCAtcSAiNDA0IE5vdCBGb3VuZCIgJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEU7IHRoZW4KKyAgZWNobyAtZSAiW0FEVF9JTlNUXSBFcnJvcjogWU9DVE9BRFRfUkVQTyBkb2VzIG5vdCBleGlzdDogJFlPQ1RPQURUX1JFUE8iCisgIGVjaG8gLWUgIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgIGVjaG8gLWUgIiMgTWVldCBlcnJvcihzKSB3aGVuIGluc3RhbGxpbmcgWW9jdG8gQURUISBQbGVhc2UgY2hlY2sgbG9nIGZpbGUgZm9yIGRldGFpbHMuICIKKyAgZWNobyAtZSAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgZXhpdCAtMQorZmkKKworI2ZpcnN0bHkgd2UgbmVlZCB0byBpbnN0YWxsIG9wa2cgaG9zdAoraW5zdGFsbF9vcGtnCisKKyNDcmVhdGUgZm9sZGVycyBmb3IgaG9sZGluZyByb290ZnMvcWVtdSBpbWFnZXMKK2lmIFsgISAtZCAiJExPQ0FMX0RPV05MT0FEIiBdOyB0aGVuCisgIGVjaG9faW5mbyAiQ3JlYXRpbmcgbmV3IGltYWdlcyBkb3dubG9hZGluZyBmb2xkZXI6ICRMT0NBTF9ET1dOTE9BRCAuLi4iCisgIG1rZGlyIC1wICRMT0NBTF9ET1dOTE9BRAorZmkKKworI2Rvd25sb2FkaW5nIHJlcXVpcmVkIHFlbXUgaW1hZ2VzL3Jvb3RmcworaWYgWyAiJHVzZXJfaW5zdF90eXBlIiA9PSAiMCIgXTsgdGhlbgorICBvdmVycmlkZV9vbGRmaWxlPTEKK2Vsc2UKKyAgb3ZlcnJpZGVfb2xkZmlsZT0wCitmaQorCitmb3IgYXJjaF90eXBlIGluICRZT0NUT0FEVF9UQVJHRVRTOyBkbworICBkb3dubG9hZF9pbWFnZXMgJGFyY2hfdHlwZQorZG9uZQorCitzY3JpcHRzL2FkdF9pbnN0YWxsZXJfaW50ZXJuYWwgJHVzZXJfaW5zdF90eXBlCisKK3Jlc3VsdD0iJD8iCisjZWNob19pbmZvICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKK2lmIFsgIiRyZXN1bHQiID09ICIwIiBdOyB0aGVuCisgIGVjaG9faW5mbyAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgIGVjaG9faW5mbyAiIyBZb2N0byBBRFQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGluc3RhbGxlZC4iCisgIGVjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCitmaQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9hZHRfaW5zdGFsbGVyLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9hZHRfaW5zdGFsbGVyLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY3ZmJkMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL2FkdF9pbnN0YWxsZXIuY29uZgpAQCAtMCwwICsxLDc1IEBACisjIFlvY3RvIEFEVCBJbnN0YWxsZXIgQ29uZmlndXJhdGlvbiBGaWxlCisjCisjIENvcHlyaWdodCAyMDEwLTIwMTEgYnkgSW50ZWwgQ29ycC4KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgCisjIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIAorIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIAorIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCAKKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiAKKyMgVEhFIFNPRlRXQVJFLgorCisKKyMgWW91ciB5b2N0byBkaXN0cm8gcmVwb3NpdG9yeSwgdGhpcyBzaG91bGQgaW5jbHVkZSBJUEtHIGJhc2VkIHBhY2thZ2VzIGFuZCByb290IGZpbGVzeXN0ZW0gZmlsZXMgd2hlcmUgdGhlIGluc3RhbGxhdGlvbiBpcyBiYXNlZCBvbgorCitZT0NUT0FEVF9SRVBPPSJBRFRSRVBPIgorCisjIFRoZSBmb2xsb3dpbmcgYXJlIGZvciBzeXN0ZW0gd2lkZSBzZXR1cAorIyBUYXJnZXQgYXJjaGl0ZWN0dXJlcyB0aGF0IHlvdSB3YW50IHRvIHNldHVwIGhvc3QgY3Jvc3MgZGV2IGVudmlyb25tZW50IGZvcgorIyB2YWxpZCB2YWx1ZXMgYXJlOiBhcm0sIHg4NiwgeDg2XzY0LCBwcGMsIG1pcHMgd2l0aCBzcGFjZSBzZXBhcmF0aW9uIGJldHdlZW4gZW50cmllcworWU9DVE9BRFRfVEFSR0VUUz0iYXJtIHg4NiIKKyMgV2hldGhlciBpbnN0YWxsIHFlbXUgb3Igbm90LCB2YWxpZCBlbnRyaWVzIGFyZTogWS9OCitZT0NUT0FEVF9RRU1VPSJZIgorIyBXaGV0aGVyIGluc3RhbGwgdXNlci1tb2RlIG5mcyBvciBub3QsIHZhbGlkIGVudHJpZXMgYXJlOiBZL04uICBJZiB5b3Ugd2FudCB0byB1c2UgWW9jdG8gRWNsaXBzZSBwbHVnLWluIGFzIHlvdXIgZGV2IElERSwgeW91IG5lZWQgdG8gc2VsZWN0IGJvdGggcWVtdSBhbmQgTkZTCitZT0NUT0FEVF9ORlNfVVRJTD0iWSIKKworIyBUaGVzZSAyIHZhbHVlcyB3aWxsIGJlIHN1cHBvcnRlZCBpbiB0aGUgZnVydHVyZSBpbnN0YWxsZXIKKyNZT0NUT0FEVF9CSVRCQUtFPSJZIgorI1lPQ1RPQURUX01FVEFEQVRBPSJZIgorCisjVGhlIGZvbGxvd2luZ3MgYXJlIGZvciBzZXR0aW5nIHVwIHNwZWNpZmljIHRhcmdldCBhcmNoaXRlY3R1cmUKKyNZT0NUT0FEVF9ST09URlNfJGFyY2ggaXMgZm9yIHNwZWNpZnlpbmcgd2hhdCByb290IGZpbGVzeXN0ZW0gaW1hZ2UgZmlsZXMgeW91IHdhbnQgdG8gZG93bmxvYWQgZnJvbSB0aGUgcmVwb3NpdG9yeS4gVGhlIHZhbGlkIHZhbHVlcyB0byByZXBsYWNlICRhcmNoIGFyZTogYXJtLCB4ODYsIHg4Nl82NCwgcG93ZXJwYywgbWlwcy4gIFRoZSB2YWxpZCBpbWFnZSBmaWxlcyBhcmU6IG1pbmltYWwsIG1pbmltYWwtZGV2LCBzYXRvLCBzYXRvLWRldiwgc2F0by1zZGssbHNiLCBsc2ItZGV2LCBsc2Itc2RrLiAgSWYgeW91IHdhbnQgdG8gZG93bmxvYWQgbXVsdGlwbGUgaW1hZ2VzLCB0aGUgZW50cmllcyBhcmUgc3BhY2Ugc2VwYXJhdGVkCitZT0NUT0FEVF9ST09URlNfYXJtPSJtaW5pbWFsIHNhdG8tc2RrIgorI1NwZWNpZnkgd2hpY2ggcm9vdCBmaWxlc3lzdGVtIGZpbGUgdG8gdXNlIHRvIGV4dHJhY3QgYXMgdGFyZ2V0IHN5c3Jvb3QuICBQbGVhc2UgZW5zdXJlIHRoZSBlbnRyeSBpcyBpbiB0aGUgbGlzdCBvZiBkb3dubG9hZGVkIHJvb3QgZmlsZXN5c3RlbSBmaWxlcyB0aGF0IHNwZWNpZmllZCBhYm92ZSBpbiBZT0NUT0FEVF9ST09URlNfJGFyY2gKK1lPQ1RPQURUX1RBUkdFVF9TWVNST09UX0lNQUdFX2FybT0ic2F0by1zZGsiCisjVGhlIG1hY2hpbmUgZm9yIHdoaWNoIHlvdSB3YW50IHRvIGRvd25sb2FkIHRoZSBpbWFnZS4gRWFjaCBtYWNoaW5lIG1pZ2h0IGhhdmUKKyNkaWZmZXJlbnQgY29tcGlsYXRpb24gb3B0aW9ucyBpbiBvcmRlciB0byBzZWxlY3QgY2VydGFpbiBoYXJkd2FyZSBtb2RlbHMgb3IKKyNjb25maWd1cmF0aW9ucworWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfYXJtPSJxZW11YXJtIgorI1RoZSBsb2NhdGlvbiB3aGVyZSB0aGUgdGFyZ2V0IHN5c3Jvb3Qgd2lsbCBiZSBzZXR1cAorWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfTE9DX2FybT0iJEhPTUUvdGVzdC15b2N0by8kWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfYXJtIgorCisKKyNIZXJlJ3MgYSB0ZW1wbGF0ZSBmb3Igc2V0dGluZyB1cCB0YXJnZXQgYXJjaCBvZiB4ODYgCitZT0NUT0FEVF9ST09URlNfeDg2PSJzYXRvLXNkayIKK1lPQ1RPQURUX1RBUkdFVF9TWVNST09UX0lNQUdFX3g4Nj0ic2F0by1zZGsiCitZT0NUT0FEVF9UQVJHRVRfTUFDSElORV94ODY9InFlbXV4ODYiCitZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9MT0NfeDg2PSIkSE9NRS90ZXN0LXlvY3RvLyRZT0NUT0FEVF9UQVJHRVRfTUFDSElORV94ODYiCisKKyNIZXJlJ3Mgc29tZSB0ZW1wbGF0ZSBvZiBvdGhlciBhcmNoZXMsIHdoaWNoIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgdmFsdWUgaW4gIiIKK1lPQ1RPQURUX1JPT1RGU194ODZfNjQ9InNhdG8tc2RrIgorWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfSU1BR0VfeDg2XzY0PSJzYXRvLXNkayIKK1lPQ1RPQURUX1RBUkdFVF9NQUNISU5FX3g4Nl82ND0icWVtdXg4Ni02NCIKK1lPQ1RPQURUX1RBUkdFVF9TWVNST09UX0xPQ194ODZfNjQ9IiRIT01FL3Rlc3QteW9jdG8vJFlPQ1RPQURUX1RBUkdFVF9NQUNISU5FX3g4Nl82NCIKKworWU9DVE9BRFRfUk9PVEZTX3BwYz0ic2F0by1zZGsiCitZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9JTUFHRV9wcGM9InNhdG8tc2RrIgorWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfcHBjPSJxZW11cHBjIgorWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfTE9DX3BwYz0iJEhPTUUvdGVzdC15b2N0by8kWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfcHBjIgorCitZT0NUT0FEVF9ST09URlNfbWlwcz0ic2F0by1zZGsiCitZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9JTUFHRV9taXBzPSJzYXRvLXNkayIKK1lPQ1RPQURUX1RBUkdFVF9NQUNISU5FX21pcHM9InFlbXVtaXBzIgorWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfTE9DX21pcHM9IiRIT01FL3Rlc3QteW9jdG8vJFlPQ1RPQURUX1RBUkdFVF9NQUNISU5FX21pcHMiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL29wa2cvY29uZi9vcGtnLXNkay1pNjg2LmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9vcGtnL2NvbmYvb3BrZy1zZGstaTY4Ni5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNjI3YjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9vcGtnL2NvbmYvb3BrZy1zZGstaTY4Ni5jb25mCkBAIC0wLDAgKzEsNiBAQAorYXJjaCBhbGwgMQorYXJjaCBhbnkgNgorYXJjaCBub2FyY2ggMTEKK2FyY2ggaTY4Ni1uYXRpdmVzZGsgMTYKK3NyYyB5cC1pNjg2LW5hdGl2ZXNkayBBRFRSRVBPX1VSTC9hZHQtaXBrL2k2ODYtbmF0aXZlc2RrCitzcmMgeXAtaTY4Ni1hbGwgQURUUkVQT19VUkwvYWR0LWlway9hbGwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL29wa2cvY29uZi9vcGtnLXNkay14ODZfNjQuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL29wa2cvY29uZi9vcGtnLXNkay14ODZfNjQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDUwNGE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvb3BrZy9jb25mL29wa2ctc2RrLXg4Nl82NC5jb25mCkBAIC0wLDAgKzEsNiBAQAorYXJjaCBhbGwgMQorYXJjaCBhbnkgNgorYXJjaCBub2FyY2ggMTEKK2FyY2ggeDg2XzY0LW5hdGl2ZXNkayAxNgorc3JjIHlwLXg4Nl82NC1uYXRpdmVzZGsgQURUUkVQT19VUkwvYWR0LWlway94ODZfNjQtbmF0aXZlc2RrCitzcmMgeXAteDg2XzY0LWFsbCBBRFRSRVBPX1VSTC9hZHQtaXBrL2FsbApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvc2NyaXB0cy9hZHRfaW5zdGFsbGVyX2ludGVybmFsIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvc2NyaXB0cy9hZHRfaW5zdGFsbGVyX2ludGVybmFsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZmNWZiNDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9zY3JpcHRzL2FkdF9pbnN0YWxsZXJfaW50ZXJuYWwKQEAgLTAsMCArMSwzMTIgQEAKKyMhL2Jpbi9iYXNoCisKKyMgWW9jdG8gQURUIEluc3RhbGxlcgorIworIyBDb3B5cmlnaHQgMjAxMC0yMDExIGJ5IEludGVsIENvcnAuCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgCisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIAorIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIAorIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIAorIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSAKKyMgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgCisjIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gCisjIFRIRSBTT0ZUV0FSRS4KKworcGFyc2VfY29uZmlnKCkKK3sKKyAgSU5TVF9BUkNIPWB1bmFtZSAtbWAKKworICBjYXNlICRJTlNUX0FSQ0ggaW4gCisgIGlbMy02XTg2KQorICAgIE9QS0dfQ09ORklHX0ZJTEU9JFlPQ1RPQURUX09QS0dfQ09ORl9GSUxFXzMyCisgICAgT0VDT1JFX05BVElWRV9TWVNST09UPSIkSU5TVEFMTF9GT0xERVIvc3lzcm9vdHMvJElOU1RfQVJDSCRTREtfVkVORE9SLWxpbnV4LyIKKyAgICA7OworICB4ODZfNjQpCisgICAgT1BLR19DT05GSUdfRklMRT0kWU9DVE9BRFRfT1BLR19DT05GX0ZJTEVfNjQKKyAgICBPRUNPUkVfTkFUSVZFX1NZU1JPT1Q9IiRJTlNUQUxMX0ZPTERFUi9zeXNyb290cy94ODZfNjQkU0RLX1ZFTkRPUi1saW51eC8iCisgICAgOzsKKyAgKikKKyAgICBlY2hvX2luZm8gIltBRFRfSU5TVF0gRXJyb3I6IEluc3RhbGxhdGlvbiBNYWNoaW5lIGlzIG5vdCBzdXBwb3J0ZWQhIgorICAgIGV4aXQgLTEKKyAgICA7OworICBlc2FjCit9CisKK2dldF9zdWRvX2FwcCgpCit7CisgIHVzZXJuYW1lPSQoaWQgLW51KQorCisgICMgZmluZCB0aGUgb3duZXIgb2YgdGhlIHBhcmVudAorICBkaXI9JDEKKyAgd2hpbGUgWyAxIF07IGRvCisgICAgICBpZiBbIC1kICRkaXIgXTsgdGhlbgorICAgICAgICAgIG93bmVyPSQoc3RhdCAtYyAlVSAkZGlyKQorICAgICAgICAgIGJyZWFrCisgICAgIGVsc2UKKyAgICAgICAgICBkaXI9JChkaXJuYW1lICRkaXIpCisgICAgIGZpCisgIGRvbmUKKworICBpZiBbICIkb3duZXIiID0gIiR1c2VybmFtZSIgXTsgdGhlbgorICAgICAgdHJ1ZQorICBlbHNlCisgICAgICBlY2hvIHN1ZG8KKyAgZmkKK30KKworIyB0aGlzIGZ1bmN0aW9uIGFjY2VwdHMgYXJjaF90eXBlICh4ODYsIHg4Nl82NCwgYXJtLCBwcGMsIG1pcHMpIGFzIHRoZSBmaXJzdAorIyBhcmd1bWVudCwgcmV0dXJuaW5nIHRoZSBsb2NhdGlvbiBvZiB0aGUgdGFyZ2V0IHJvb3RmcworZ2V0X3RhcmdldF9yb290ZnNfbG9jYXRpb24oKSB7CisJWyAteiAiJDEiIF0gJiYgcmV0dXJuCisKKwlhcmNoX3R5cGU9JDEKKwkjIHJvb3RmcyBleHRyYWN0aW9uIGRpcmVjdG9yeQorCXRhcmdldF9zeXNyb290X3Zhcj0iXCRZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9MT0NfJGFyY2hfdHlwZSIKKwl0YXJnZXRfc3lzcm9vdD1gZXZhbCBlY2hvICR0YXJnZXRfc3lzcm9vdF92YXJgCisKKwlpZiBbICIkdGFyZ2V0X3N5c3Jvb3QiID09ICIiIF07IHRoZW4KKwkJcmV0dXJuCisJZWxzZQorCQllY2hvICJgcmVhZGxpbmsgLW0gJHRhcmdldF9zeXNyb290YCIKKwlmaQorfQorCisKKyNsZXQgdXMgaW5zdGFsbCBhIHFlbXUtbmF0aXZlIGZpcnN0bHkKKyNpbnN0YWxsYXRpb24gc3RlcCAyCitpbnN0YWxsX25hdGl2ZV9zZGsoKQoreworCitlY2hvX2luZm8gIlxuU3RhcnQgaW5zdGFsbGluZyBzZWxlY3RlZCBuYXRpdmUgQURUIGZvciBhcmNoczogJFlPQ1RPQURUX1RBUkdFVFMuLi4iCisKKyMgd2hlcmUgdGhlIHBhY2thZ2VzIGFyZSBpbnN0YWxsZWQuCitOQVRJVkVfSU5TVEFMTF9ESVI9JElOU1RBTExfRk9MREVSCisKK2lmIFsgLWQgIiRJTlNUQUxMX0ZPTERFUiIgXTsgdGhlbgorICBlY2hvX2luZm8gIlxuTmF0aXZlIEFEVCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IFwiJElOU1RBTExfRk9MREVSXCIgYWxyZWFkeSBleGlzdHMhIENvbnRpbnVlIGluc3RhbGxhdGlvbiB3aWxsIG92ZXJyaWRlIGl0cyBjb250ZW50cyEiCisgIGNvbmZpcm1faW5zdGFsbCAkMQorZmkKKworI05vdyBiZWdpbiB0byBpbnN0YWxsIG5hdGl2ZSBzZGsgYW5kIGV4dHJhY3QgcWVtdSByb290ZnMgd2hpY2ggbmVlZHMgcHJpdmlsZWdlIHJpZ2h0cworI2RlcGVuZGluZyBvbiB0aGUgaW5zdGFsbCBsb2NhdGlvbgorU1VETz0kKGdldF9zdWRvX2FwcCAkTkFUSVZFX0lOU1RBTExfRElSKQoraWYgWyAtbiAiJFNVRE8iIF07IHRoZW4KKyAgZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgZWNob19pbmZvICJQbGVhc2Ugbm90ZSBmcm9tIHRoaXMgcG9pbnQgb24gaW5zdGFsbGF0aW9uIHJlcXVpcmVzIHN1ZG8gcGFzc3dvcmQgLi4uIgorICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorZmkKKworI3dlIG5lZWQgdG8gbWFrZSB0aGlzIGRpcmVjdG9yeSBmaXJzdGx5IHNpbmNlIG9wa2cgbmVlZCB0byB1c2UgaXQuCitPUEtHX0xPQ0tfRElSPSIkTkFUSVZFX0lOU1RBTExfRElSLyRPUEtHX0xJQkRJUi9vcGtnIgoraWYgWyAhIC1kICIkT1BLR19MT0NLX0RJUiIgXTsgdGhlbgorICAkU1VETyBta2RpciAtcCAkT1BLR19MT0NLX0RJUgorICBlY2hvX2luZm8gIlN1Y2Nlc3NmdWxseSBjcmVhdGUgZGlyZWN0b3J5ICRPUEtHX0xPQ0tfRElSLiAiCisjaWYgdXNlciBkZWxldGUgL29wdC94eHgsIHdoaWxlIGRhbmdsaW5nIGZvbGRlcnMgdGhlcmUsIHJlcG9ydCBlcnJvcgorZWxpZiBbICEgLWQgIiRJTlNUQUxMX0ZPTERFUiIgXTsgdGhlbgorICBlY2hvX2luZm8gIlxuRGFuZ2xpbmcgb3BrZyBjYWNoZSBmb2xkZXIgJE9QS0dfTE9DS19ESVIgZGV0ZWN0ZWQuIENvbnRpbnVlIGluc3RhbGxhdGlvbiB3aWxsIHJlbW92ZSB0aGUgZm9sZGVyISIKKyAgY29uZmlybV9pbnN0YWxsICQxCisgICRTVURPIHJtIC1yZiAkT1BLR19MT0NLX0RJUgorICAkU1VETyBta2RpciAtcCAkT1BLR19MT0NLX0RJUgorI2lmIHVzZXIgYXJlIHVwZGF0aW5nIGluc3RhbGxpbmcsIGp1c3QgbGV0IGhpbS9oZXIgZ28sIGdpdmUgaGVyL2hpbSBwcm9tcHQKK2Vsc2UKKyAgZWNob19pbmZvICJBRFQgaGFzIGFscmVhZHkgYmVlbiBpbnN0YWxsZWQuIFdpbGwgdXBkYXRlIGl0cyBjb250ZW50cy4uLiIKK2ZpCisKKyNmaXJzdCB1cGRhdGUgcmVwb3NpdG9yeQoraWYgWyAieCRTVURPIiA9ICJ4IiBdOyB0aGVuCisgICAgT1BLR19DTUQ9IiRMT0NBTF9PUEtHX0xPQy9iaW4vb3BrZyIKK2Vsc2UKKyAgICBPUEtHX0NNRD0ic3VkbyAtRSAkTE9DQUxfT1BLR19MT0MvYmluL29wa2ciCitmaQorCitlY2hvX2luZm8gIlVwZGF0aW5nIG9wa2cuLi4iCiskT1BLR19DTUQgLWYgJE9QS0dfQ09ORklHX0ZJTEUgLW8gJE5BVElWRV9JTlNUQUxMX0RJUiB1cGRhdGUgJj4+ICRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCitjaGVja19yZXN1bHQKK2VjaG9faW5mbyAib3BrZyB1cGRhdGUgcHJvY2VzcyBlbmRlZC4uLiIKKworI2luc3RhbGwgYmVsb3cgbXVzdCBzZGstaG9zdCBwYWNrYWdlcworT1BLR19JTlNUQUxMX0NNRD0iJE9QS0dfQ01EICIKK09QS0dfSU5TVEFMTF9OQVRJVkVfQ01EPSIkT1BLR19JTlNUQUxMX0NNRCAgLS1mb3JjZS1vdmVyd3JpdGUgLWYgJE9QS0dfQ09ORklHX0ZJTEUgLW8gJE5BVElWRV9JTlNUQUxMX0RJUiBpbnN0YWxsIgorCitCQVNFX0hPU1RTREtfUEtHTkFNRVM9InBzZXVkbyBvcGtnIHBrZ2NvbmZpZyBsaWJ0b29sIGF1dG9jb25mIGF1dG9tYWtlIgorZm9yIHBrZyBpbiAkQkFTRV9IT1NUU0RLX1BLR05BTUVTOyBkbworICBlY2hvX2luZm8gIkluc3RhbGxpbmcgJHtwa2d9IG5hdGl2ZXNkayAuLi5cbiIKKyAgJE9QS0dfSU5TVEFMTF9OQVRJVkVfQ01EIG5hdGl2ZXNkay0ke3BrZ30gJj4+ICRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCisgIGNoZWNrX3Jlc3VsdAorZG9uZQorCitmb3IgdGFyZ2V0X3R5cGUgaW4gJFlPQ1RPQURUX1RBUkdFVFM7IGRvCisgIG1hY2hpbmVfdmFyPSJcJFlPQ1RPQURUX1RBUkdFVF9NQUNISU5FXyR0YXJnZXRfdHlwZSIKKyAgbWFjaGluZT1gZXZhbCBlY2hvICRtYWNoaW5lX3ZhcmAKKyAgZWNob19pbmZvICJJbnN0YWxsaW5nIGNyb3NzIGNhbmFkaWFuIHBhY2thZ2VzIGZvciAkbWFjaGluZSAuLi4iCisgICRPUEtHX0lOU1RBTExfTkFUSVZFX0NNRCBwYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4tJG1hY2hpbmUgJj4+ICRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCisgIGNoZWNrX3Jlc3VsdAorCisgIHRhcmdldF9zeXNyb290PWBnZXRfdGFyZ2V0X3Jvb3Rmc19sb2NhdGlvbiAkdGFyZ2V0X3R5cGVgCisgIFsgLXogIiR0YXJnZXRfc3lzcm9vdCIgXSAmJiBjb250aW51ZQorCisgICMgZ2V0IHRoZSBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgcGF0aHM6IG9yaWdpbmFsICh0aGUgb25lIGJlZm9yZSByZWxvY2F0aW9uKQorICAjIGFuZCByZWxvY2F0ZWQKKyAgZW52X3NjcmlwdF9vcmlnaW5hbD1gJE9QS0dfQ01EIC1mICRPUEtHX0NPTkZJR19GSUxFIC1vICROQVRJVkVfSU5TVEFMTF9ESVIgZmlsZXMgbWV0YS1lbnZpcm9ubWVudC0kbWFjaGluZXxcCisJCQkJCQkJZ3JlcCBlbnZpcm9ubWVudC1zZXR1cGAKKyAgZW52X3NjcmlwdF9yZWxvY2F0ZWQ9JElOU1RBTExfRk9MREVSLyR7ZW52X3NjcmlwdF9vcmlnaW5hbCMjKi99CisKKyAgIyBvcGtnIHdpbGwgbm90IGluc3RhbGwgcGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuIHBhY2thZ2UgaWYgaXQgd2FzIGFscmVhZHkKKyAgIyBpbnN0YWxsZWQuIFNvLCB0aGUgZW52aXJvbm1lbnQgc2NyaXB0IGlzIGluIG9uZSBwbGFjZSBvciB0aGUgb3RoZXIuCisgIFsgLWUgIiRJTlNUQUxMX0ZPTERFUi8kZW52X3NjcmlwdF9vcmlnaW5hbCIgXSAmJiBlbnZfc2NyaXB0PSRJTlNUQUxMX0ZPTERFUi8kZW52X3NjcmlwdF9vcmlnaW5hbAorICBbIC1lICIkZW52X3NjcmlwdF9vcmlnaW5hbCIgXSAmJiBlbnZfc2NyaXB0PSRlbnZfc2NyaXB0X29yaWdpbmFsCisgIFsgLWUgIiRlbnZfc2NyaXB0X3JlbG9jYXRlZCIgXSAmJiBlbnZfc2NyaXB0PSRlbnZfc2NyaXB0X3JlbG9jYXRlZAorCisgICRTVURPIHNlZCAtaSAtZSAicyVTREtUQVJHRVRTWVNST09UPS4qJVNES1RBUkdFVFNZU1JPT1Q9JHRhcmdldF9zeXNyb290JWciICRlbnZfc2NyaXB0Citkb25lCisKK2lmIFsgIiRZT0NUT0FEVF9RRU1VIiA9PSAiWSIgXSB8fCBbICIkWU9DVE9BRFRfUUVNVSIgPT0gInkiIF07IHRoZW4KKyAgZWNob19pbmZvICJcbkluc3RhbGxpbmcgcWVtdSBuYXRpdmUgLi4uIgorICAkT1BLR19JTlNUQUxMX05BVElWRV9DTUQgbmF0aXZlc2RrLXFlbXUgJj4+ICRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCisgIGNoZWNrX3Jlc3VsdAorICAkT1BLR19JTlNUQUxMX05BVElWRV9DTUQgbmF0aXZlc2RrLXFlbXUtaGVscGVyICY+PiAkWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRQorICBjaGVja19yZXN1bHQKK2ZpCisKK2lmIFsgIiRZT0NUT0FEVF9ORlNfVVRJTCIgPT0gIlkiIF0gfHwgWyAiJFlPQ1RPQURUX05GU19VVElMIiA9PSAieSIgXTsgdGhlbgorICBlY2hvX2luZm8gIlxuSW5zdGFsbGluZyB1bmZzIC4uLiIKKyAgJE9QS0dfSU5TVEFMTF9OQVRJVkVfQ01EIG5hdGl2ZXNkay11bmZzMyAmPj4gJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUKKyAgY2hlY2tfcmVzdWx0CitmaQorCisjIExvc2UgdGhlIC4vb3B0LyR7RElTVFJPfS8ke1NES19WRVJTSU9OfSBwYXJ0LCB3ZSBkb24ndCByZWFsbHkgbmVlZCB0byBrZWVwCisjIHRoZSBlbnRpcmUgZGlyZWN0b3J5IHN0cnVjdHVyZS4gV2UgY291bGQgcGF0Y2ggb3BrZyB0byBkbyB0aGF0IGJ1dCBpdCdzIGZhcgorIyBzaW1wbGVyIHRvIGRvIHRoYXQgaGVyZSBhbmQgYWNoaWV2ZSB0aGUgc2FtZSByZXN1bHQuCisjIFRoaXMgaXMgZG9uZSBpbiB0d28gc3RlcHM6CitpZiBbIC1kICROQVRJVkVfSU5TVEFMTF9ESVIvJERFRkFVTFRfSU5TVEFMTF9GT0xERVIgXTsgdGhlbgorICAgICMgU3RlcCAxOiBjb3B5IC4vb3B0LyR7RElTVFJPfS8ke1NES19WRVJTSU9OfSBjb250ZW50cyB0byAkTkFUSVZFX0lOU1RBTExfRElSLgorICAgICMgV2UgY2Fubm90IHVzZSBtb3ZlIGlmICROQVRJVkVfSU5TVEFMTF9ESVIgaXMgbm90IGVtcHR5IChmb3IgZXhhbXBsZTogY29udGFpbnMKKyAgICAjIGFub3RoZXIgU0RLKQorICAgICRTVURPIGNwIC1yICROQVRJVkVfSU5TVEFMTF9ESVIvJERFRkFVTFRfSU5TVEFMTF9GT0xERVIvKiAkTkFUSVZFX0lOU1RBTExfRElSCisKKyAgICAjIGRlbGV0ZSB0aGUgc291cmNlIGRpcmVjdG9yeSBub3cKKyAgICAkU1VETyBybSAtcmYgJE5BVElWRV9JTlNUQUxMX0RJUi8kREVGQVVMVF9JTlNUQUxMX0ZPTERFUi8qCisKKyAgICAjIFN0ZXAgMjogRGVsZXRlIHRoZSAuL29wdC8ke0RJU1RST30vJHtTREtfVkVSU0lPTn0gZGlyZWN0b3JpZXMgdG9vLCB0aGV5IHNob3VsZCBiZSBlbXB0eQorICAgIGRpcj0kTkFUSVZFX0lOU1RBTExfRElSLyRERUZBVUxUX0lOU1RBTExfRk9MREVSCisgICAgd2hpbGUgWyAiJGRpciIgIT0gIiROQVRJVkVfSU5TVEFMTF9ESVIiIF07IGRvCisgICAgICAgICMgaWYgdGhlIHVzZXIgY2hvc2UgLyBhcyB0aGUgaW5zdGFsbCBmb2xkZXIsIHRoZW4gd2Ugc2hvdWxkIGxlYXZlIC9vcHQgaW4gcGxhY2UKKyAgICAgICAgaWYgWyAiJGRpciIgPSAiL29wdCIgXTsgdGhlbgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKworICAgICAgICAjIHRyeSB0byBkZWxldGUgdGhlIGRpcmVjdG9yeSwgb25seSBpZiBpdCdzIGVtcHR5CisgICAgICAgICRTVURPIHJtZGlyICRkaXIKKyAgICAgICAgaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisgICAgICAgICAgICBicmVhaworICAgICAgICBmaQorCisgICAgICAgICMgZ28gdG8gdGhlIG5leHQgZGlyZWN0b3J5CisgICAgICAgIGRpcj0kKGRpcm5hbWUgJGRpcikKKyAgICBkb25lCisgICAgIyBTdGVwIDM6IFJld3JpdGUgdGhlICoubGlzdCBmaWxlcyB0byBjb250YWluIHRoZSBjb3JyZWN0IHBhdGhzCisgICAgJFNVRE8gZmluZCAkTkFUSVZFX0lOU1RBTExfRElSL3Zhci9saWIvb3BrZyAtdHlwZSBmIC1leGVjIHNlZCAtaSAtZSAnI14kREVGQVVMVF9JTlNUQUxMX0ZPTERFUiMkTkFUSVZFX0lOU1RBTExfRElSIycge30gXDsKK2ZpCisKKyMgTGluayB0aGUgbGQuc28uY2FjaGUgZmlsZSBpbnRvIHRoZSBob3N0cyBmaWxlc3lzdGVtCitpZiBbICEgLWYgIiRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvZXRjL2xkLnNvLmNhY2hlIiBdOyB0aGVuCitlY2hvX2luZm8gIkxpbmsgdGhlIGxkLnNvLmNhY2hlIGZpbGUgaW50byB0aGUgaG9zdCBmaWxlc3lzdGVtIgorJFNVRE8gbG4gLXMgL2V0Yy9sZC5zby5jYWNoZSAkT0VDT1JFX05BVElWRV9TWVNST09UL2V0Yy9sZC5zby5jYWNoZQorY2hlY2tfcmVzdWx0CitmaQorCisjIHJlbG9jYXRlIGJpbmFyaWVzCitlY2hvX2luZm8gIlxuUmVsb2NhdGluZyBiaW5hcmllcyAuLi4iCitlc2NhcGVkX3Nka3BhdGg9JChlY2hvICRERUZBVUxUX0lOU1RBTExfRk9MREVSIHxzZWQgLWUgInM6W1wrXC5dOlxcXFxcXFxcXDA6ZyIpCisKKyMgV2UgZG9uJ3QgY2hhbmdlIHRoZSBzY3JpcHQgaW4tcGxhY2Ugc2luY2Ugd2UgbWF5IHdhbnQgdGhlIHVzZXIgdG8gcmUtcnVuCisjIGFkdC1pbnN0YWxsZXIgc2NyaXB0CitzZWQgLWUgInM6IyNERUZBVUxUX0lOU1RBTExfRElSIyM6JGVzY2FwZWRfc2RrcGF0aDoiIHNjcmlwdHMvcmVsb2NhdGVfc2RrLnB5ID4gc2NyaXB0cy9yZWxvY2F0ZV9zZGtfdG1wLnB5CitjaG1vZCAreCBzY3JpcHRzL3JlbG9jYXRlX3Nka190bXAucHkKKworZGxfcGF0aD0kKGZpbmQgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC9saWIgLW5hbWUgImxkLWxpbnV4KiIpCitleGVjdXRhYmxlX2ZpbGVzPSQoZmluZCAkT0VDT1JFX05BVElWRV9TWVNST09UIC10eXBlIGYgLXBlcm0gLzExMSkKKworJFNVRE8gc2NyaXB0cy9yZWxvY2F0ZV9zZGtfdG1wLnB5ICRJTlNUQUxMX0ZPTERFUiAkZGxfcGF0aCAkZXhlY3V0YWJsZV9maWxlcworY2hlY2tfcmVzdWx0CisKKyMgcmVwbGFjZSAvb3B0LyR7RElTVFJPfS8ke1NES19WRVJTSU9OfSB3aXRoIHRoZSBpbnN0YWxsIGZvbGRlciBpbiBhbGwgY29uZmlncworZW52X3NldHVwX3NjcmlwdD0kKGZpbmQgJE5BVElWRV9JTlNUQUxMX0RJUi8gLW5hbWUgImVudmlyb25tZW50LXNldHVwLSoiKQorJFNVRE8gc2VkIC1pIC1lICJzOiRERUZBVUxUX0lOU1RBTExfRk9MREVSOiROQVRJVkVfSU5TVEFMTF9ESVI6ZyIgJGVudl9zZXR1cF9zY3JpcHQKKworZmluZCAkT0VDT1JFX05BVElWRV9TWVNST09UIC10eXBlIGYgLWV4ZWMgZmlsZSAne30nIFw7IHwgZ3JlcCAiOi4qXChBU0NJSVx8c2NyaXB0XHxzb3VyY2VcKS4qdGV4dCIgfCBcCisgICAgY3V0IC1kJzonIC1mMSB8IHhhcmdzICRTVURPIHNlZCAtaSAtZSAiczokREVGQVVMVF9JTlNUQUxMX0ZPTERFUjokTkFUSVZFX0lOU1RBTExfRElSOmciCisKKyMgY2hhbmdlIGFsbCBzeW1saW5rcyBwb2ludGluZyB0byAvb3B0LyR7RElTVFJPfS8ke1NES19WRVJTSU9OfQorZm9yIGwgaW4gJChmaW5kICROQVRJVkVfSU5TVEFMTF9ESVIgLXR5cGUgbCk7IGRvCisgICAgJFNVRE8gbG4gLXNmbiAkKHJlYWRsaW5rICRsfHNlZCAtZSAiczokREVGQVVMVF9JTlNUQUxMX0ZPTERFUjokTkFUSVZFX0lOU1RBTExfRElSOiIpICRsCitkb25lCisKKyMgZmluZCBvdXQgYWxsIHBlcmwgc2NyaXB0cyBpbiAkT0VDT1JFX05BVElWRV9TWVNST09UIGFuZCBtb2RpZnkgdGhlbQorIyByZXBsYWNpbmcgdGhlIGhvc3QgcGVybCB3aXRoIFNESyBwZXJsLgorZm9yIHBlcmxfc2NyaXB0IGluICQoJFNVRE8gZ3JlcCAtbSAxICJeIyEuKnBlcmwiIC1ybCAkT0VDT1JFX05BVElWRV9TWVNST09UKTsgZG8KKyAgICAkU1VETyBzZWQgLWkgLWUgInM6XiMhICovdXNyL2Jpbi9wZXJsLio6IyEgL3Vzci9iaW4vZW52IHBlcmw6ZyIgLWUgXAorICAgICAgICAiczogL3Vzci9iaW4vcGVybDogL3Vzci9iaW4vZW52IHBlcmw6ZyIgJHBlcmxfc2NyaXB0Citkb25lCisKK2VjaG9faW5mbyAiXG5TdWNjZXNzZnVsbHkgaW5zdGFsbGVkIHNlbGVjdGVkIG5hdGl2ZSBBRFQhIgorfQorCisjTmVlZCB0aHJlZSBpbnB1dCBwYXJhbXMsICQxIC0tIGFyY2hfdHlwZShhcm0gcG93ZXJwYyB4ODYgbWlwcykgIzIgLS0gdXNlciBpbnN0YWxsYXRpb24gdHlwZQorI2N1c3RvbWVyIG9yIHNjaWxlbnQKKworaW5zdGFsbF90YXJnZXQoKQoreworCit0YXJnZXRfc3lzcm9vdD1gZ2V0X3RhcmdldF9yb290ZnNfbG9jYXRpb24gJDFgCitbIC16ICIkdGFyZ2V0X3N5c3Jvb3QiIF0gJiYgcmV0dXJuIDAKKwordGFyZ2V0X3N5c3Jvb3RfaW1hZ2VfdmFyPSJcJFlPQ1RPQURUX1RBUkdFVF9TWVNST09UX0lNQUdFXyQxIgordGFyZ2V0X3N5c3Jvb3RfaW1hZ2U9YGV2YWwgZWNobyAkdGFyZ2V0X3N5c3Jvb3RfaW1hZ2VfdmFyYAoraWYgWyAiJHRhcmdldF9zeXNyb290X2ltYWdlIiA9PSAiIiBdOyB0aGVuCisgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBFcnJvcjogWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfSU1BR0VfJDEgc2VsZWN0aW9uIGlzIGVtcHR5LCBmYWlsZWQgdG8gY3JlYXRlIHRhcmdldCBzeXNyb290ISIKKyAgcmV0dXJuIDEKK2ZpCisKK2VjaG9faW5mbyAiSW5zdGFsbGluZyB0YXJnZXQgc3lzcm9vdCBmb3IgYXJjaDogJDEsIHJvb3RmcyB0eXBlOiAkdGFyZ2V0X3N5c3Jvb3RfaW1hZ2UsIGxvY2F0aW9uOiAkdGFyZ2V0X3N5c3Jvb3QiCisKK3RhcmdldF9tYWNoaW5lX3Zhcj0iXCRZT0NUT0FEVF9UQVJHRVRfTUFDSElORV8kMSIKK3RhcmdldF9tYWNoaW5lPWBldmFsIGVjaG8gJHRhcmdldF9tYWNoaW5lX3ZhcmAKK3N5c3Jvb3RfaW1hZ2VfbmFtZT0iY29yZS1pbWFnZS0kdGFyZ2V0X3N5c3Jvb3RfaW1hZ2UtJHRhcmdldF9tYWNoaW5lLnRhci5iejIiCisgICAgI2VjaG9faW5mbyAiRXh0cmFjdGluZyByb290ZnM6ICRzeXNyb290X2ltYWdlX25hbWUsIHVzaW5nIHBzZXVkby4uLiIKKworIyBzdWRvIHBhc3N3b3JkIG1pZ2h0IGJlIG5lZWRlZCB0byBpbnN0YWxsIHRoZSB0YXJnZXQgc3lzcm9vdAorU1VETz0kKGdldF9zdWRvX2FwcCAkdGFyZ2V0X3N5c3Jvb3QpCisKKyRTVURPIHNjcmlwdHMvZXh0cmFjdF9yb290ZnMgJHN5c3Jvb3RfaW1hZ2VfbmFtZSAkdGFyZ2V0X3N5c3Jvb3QgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVCAkdXNlcl9pbnN0X3R5cGUKK2NoZWNrX3Jlc3VsdAorfQorCisKKyNNYWluIHBhcnQKKy4gc2NyaXB0cy9kYXRhX2RlZmluZQorLiBzY3JpcHRzL3V0aWwKKworcGFyc2VfY29uZmlnCisKKyNzZWNvbmRseSB3ZSB3aWxsIHN0YXJ0IHRvIGluc3RhbGwgbmF0aXZlIHRvb2xzCit1c2VyX2luc3RfdHlwZT0kMQoraW5zdGFsbF9uYXRpdmVfc2RrICR1c2VyX2luc3RfdHlwZQorY2hlY2tfcmVzdWx0CisKK2ZvciBhcmNoX3R5cGUgaW4gJFlPQ1RPQURUX1RBUkdFVFM7IGRvCisgIGluc3RhbGxfdGFyZ2V0ICRhcmNoX3R5cGUKKyAgY2hlY2tfcmVzdWx0Citkb25lCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvc2NyaXB0cy9kYXRhX2RlZmluZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvZGF0YV9kZWZpbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZkNjcxNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvZGF0YV9kZWZpbmUKQEAgLTAsMCArMSwzOCBAQAorIyEvYmluL2Jhc2gKKworIyBZb2N0byBBRFQgSW5zdGFsbGVyCisjCisjIENvcHlyaWdodCAyMDEwLTIwMTEgYnkgSW50ZWwgQ29ycC4KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgCisjIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIAorIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIAorIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCAKKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiAKKyMgVEhFIFNPRlRXQVJFLgorCitjb25maWdfZmlsZT0iYWR0X2luc3RhbGxlci5jb25mIgorc291cmNlIGBwd2RgLyRjb25maWdfZmlsZQorCitMT0NBTF9PUEtHX0xPQz0iLi9vcGtnL2J1aWxkL29wa2ciCitMT0NBTF9PUEtHX0ZPTERFUj0iLi9vcGtnL2J1aWxkIgorCisjIExpc3QgYWxsIHN1cHBvcnRlZCByb290IGZzIHR5cGVzIGFuZCB0YXJnZXQgdHlwZXMsCisjIGl0IHdpbGwgYmUgdXNlZCBpbiB1c2VyIGNvbmZpZ3VyYXRpb24gdmFsaWRpdHkgY2hlY2tpbmcKK1lPQ1RPQURUX1NVUFBPUlRFRF9ST09URlM9Im1pbmltYWwgbWluaW1hbC1kZXYgc2F0byBzYXRvLWRldiBzYXRvLXNkayBsc2IgbHNiLWRldiBsc2Itc2RrIgorWU9DVE9BRFRfU1VQUE9SVEVEX1RBUkdFVFM9Ing4NiB4ODZfNjQgYXJtIHBwYyBtaXBzIgorIyBEaWZmZXJlbnQgaG9zdCAoMzIgYml0IG9yIDY0IGJpdCkgd2lsbCBoYXZlIGRpZmZlcmVudCBvcGtnCisjIGNvbmZpZ3VyYXRpb24gZmlsZXMKK1lPQ1RPQURUX09QS0dfQ09ORl9GSUxFXzMyPSIuL29wa2cvY29uZi9vcGtnLXNkay1pNjg2LmNvbmYiCitZT0NUT0FEVF9PUEtHX0NPTkZfRklMRV82ND0iLi9vcGtnL2NvbmYvb3BrZy1zZGsteDg2XzY0LmNvbmYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9zY3JpcHRzL2V4dHJhY3Rfcm9vdGZzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvc2NyaXB0cy9leHRyYWN0X3Jvb3RmcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMWE1OTViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvc2NyaXB0cy9leHRyYWN0X3Jvb3RmcwpAQCAtMCwwICsxLDY3IEBACisjIS9iaW4vYmFzaAorCisjIFlvY3RvIEFEVCBJbnN0YWxsZXIKKyMKKyMgQ29weXJpZ2h0IDIwMTAtMjAxMSBieSBJbnRlbCBDb3JwLgorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IAorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCAKKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyAKKyMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIAorIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIAorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgCisjIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIAorIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIAorIyBUSEUgU09GVFdBUkUuCisKK2V4dHJhY3Rfcm9vdGZzKCkKK3sKKworICBuYXRpdmVfc3lzcm9vdD0kMworICB0YXJnZXRfc3lzcm9vdD0kMgorICBQU0VVRE9fQ09NTUFORD0iJG5hdGl2ZV9zeXNyb290L3Vzci9iaW4vcHNldWRvIgorICBUQVJfT1BUUz0iLXhqZiIKKyAgUFNFVURPX09QVFM9Ii1QICRuYXRpdmVfc3lzcm9vdC91c3IiCisKKworICBybSAtcmYgJFBTRVVET19MT0NBTFNUQVRFRElSCisKKyAgaWYgWyAtZCAiJHRhcmdldF9zeXNyb290IiBdOyB0aGVuCisgICAgZWNob19pbmZvICJcblRhcmdldCBzeXNyb290IGxvY2F0aW9uOiAkdGFyZ2V0X3N5c3Jvb3QsIGFscmVhZHkgZXhpc3RzISBJZiB5b3UgY29udGludWUgaW5zdGFsbGF0aW9uLCB0aGlzIGZvbGRlciB3aWxsIGJlIHJlLWNyZWF0ZWQuIgorICAgIGNvbmZpcm1faW5zdGFsbCAkNAorICAgIHJtIC1yZiAiJHRhcmdldF9zeXNyb290IgorICBmaQorCisgIGlmIFsgISAtZCAiJHRhcmdldF9zeXNyb290IiBdOyB0aGVuCisgICAgZWNob19pbmZvICJDcmVhdGluZyBkaXJlY3RvcnkgJHRhcmdldF9zeXNyb290Li4uIgorICAgIG1rZGlyIC1wICIkdGFyZ2V0X3N5c3Jvb3QiCisgIGZpCisKKyAgcHNldWRvX3N0YXRlX2Rpcj0iJHRhcmdldF9zeXNyb290Ly4uLyQoYmFzZW5hbWUgIiR0YXJnZXRfc3lzcm9vdCIpLnBzZXVkb19zdGF0ZSIKKyAgbWtkaXIgLXAgIiRwc2V1ZG9fc3RhdGVfZGlyIgorICB0b3VjaCAiJHBzZXVkb19zdGF0ZV9kaXIvcHNldWRvLnBpZCIKKyAgUFNFVURPX0xPQ0FMU1RBVEVESVI9IiRwc2V1ZG9fc3RhdGVfZGlyIgorICBleHBvcnQgUFNFVURPX0xPQ0FMU1RBVEVESVIKKworICBlY2hvX2luZm8gIkV4dHJhY3Rpbmcgcm9vdGZzOiAkMSwgdXNpbmcgcHNldWRvLi4uIgorICAkUFNFVURPX0NPTU1BTkQgJFBTRVVET19PUFRTIHRhciAtQyAkMiAiJFRBUl9PUFRTIiAkTE9DQUxfRE9XTkxPQUQvJDEgJj4+ICRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCisgIGNoZWNrX3Jlc3VsdAorfQorCisjTWFpbiBwYXJ0CisuIHNjcmlwdHMvdXRpbAorCisjUGFyYW1ldGVyIGRldGFpbCBpcyBsaXN0ZWQgYmVsb3c6CisjUGFyYW0gNDogU2lsZW50IGluc3RhbGwgb3IgY3VzdG9taXplIGluc3RhbGwKKyNQYXJhbSAzOiBPRUNPUkVfTkFUSVZFX1NZU1JPT1QKKyNQYXJhbSAyOiB1c2VyIGRlZmluZWQgcm9vdGZzIGV4dHJhY3Rpb24gZGlyZWN0b3J5CisjcGFyYW0gMTogc3lzcm9vdCBpbWFnZSBuYW1lCitleHRyYWN0X3Jvb3RmcyAkMSAkMiAkMyAkNApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvc2NyaXB0cy91dGlsIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvc2NyaXB0cy91dGlsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZTc1MTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9zY3JpcHRzL3V0aWwKQEAgLTAsMCArMSwxMDQgQEAKKyMhL2Jpbi9iYXNoCisKKyMgWW9jdG8gQURUIEluc3RhbGxlcgorIworIyBDb3B5cmlnaHQgMjAxMC0yMDExIGJ5IEludGVsIENvcnAuCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgCisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIAorIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIAorIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIAorIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSAKKyMgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgCisjIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gCisjIFRIRSBTT0ZUV0FSRS4KKworZWNob19pbmZvKCkKK3sKKyAgZWNobyAtZSAkMSB8IHRlZSAtYSAkWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRQorfQorCitzZWxlY3RfaW5zdGFsbF90eXBlKCkKK3sKKyMgSWYgY2hvb3Npbmcgc2lsZW50IGluc3RhbGwsIGFsbCBvbGRlciBpbnN0YWxsYXRpb24gZGF0YSB3aWxsIGJlCisjIG92ZXJyaWRlbiB3aXRob3V0IHVzZXIncyBpbnRlcmFjdGlvbgord2hpbGUgdHJ1ZTsgZG8KKyAgI2VjaG9faW5mbyAiW0FEVF9JTlNUXSBTaWxlbnQgaW5zdGFsbCBtZWFucyBvdmVycmlkZXMgYWxsIGV4aXN0aW5nIG9sZGVyIgorICAjZWNob19pbmZvICJbQURUX0lOU1RdIGRhdGEgYW5kIHRoZSBpbnN0YWxsYXRpb24gbmVlZHMgbGVhc3QgdXNlciBpbnRlcmFjdGlvbiIKKyAgI2VjaG9faW5mbyAiW0FEVF9JTlNUXSBJZiB5b3Ugd2FudCB0byB1c2Ugc2lsZW50IGluc3RhbGxhdGlvbiwgcGxlYXNlIGVudGVyIFM6IgorICAjZWNob19pbmZvICJbQURUX0lOU1RdIElmIHlvdSB3YW50IHRvIGN1c3RvbWl6ZSBpbnN0YWxsYXRpb24sIHBsZWFzZSBlbnRlciBDOiIKKyAgI2VjaG9faW5mbyAiW0FEVF9JTlNUfSBJZiB5b3Ugd2FudCB0byBleGl0IGN1cnJlbnQgaW5zdGFsbGF0aW9uLCBwbGVhc2UgZW50ZXIgWDoiCisgIGVjaG9faW5mbyAiVGhlcmUncmUgdHdvIHdheXMgeW91IGNhbiBkbyBpbnN0YWxsYXRpb246IHNpbGVudCBtb2RlIG9yIGludGVyYWN0aXZlIG1vZGUuIFRvIGNob29zZSBzaWxlbnQgbW9kZSwgd2hpY2ggbWVhbnMgeW91IG9wdCBmb3IgdGhlIHN5c3RlbSB0byBvdmVycmlkZSB0aGUgZXhpc3RpbmcgZGF0YSB1bmRlciB0aGUgc3BlY2lmaWVkIGluc3RhbGxhdGlvbiBkaXJlY3RvcmllcyB3aXRob3V0IHByb21wdGluZyBmb3IgeW91ciBjb25maXJtYXRpb24uICBQbGVhc2UgYmUgY2F1dGlvdXMgd2l0aCB0aGlzIHNlbGVjdGlvbiB3aGljaCBtYXkgdHJpZ2dlciB5b3VyIGxvc2luZyBkYXRhLiAgV2l0aCB0aGUgaW50ZXJhY3RpdmUgbW9kZSwgeW91IGhhdmUgdG8gY2xvc2VseSBtb25pdG9yIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcywgc2luY2UgaXQgd2lsbCBwcm9tcHQgeW91IGVhY2ggc3RlcCBpdCBuZWVkcyB0byBvdmVycmlkZSBzb21lIGV4aXN0aW5nIGRhdGEuICBUbyBjaG9vc2Ugc2lsZW50IG1vZGUsIHBsZWFzZSBlbnRlciBbU10sIGZvciBpbnRlcmFjdGl2ZSBtb2RlLCBwbGVhc2UgZW50ZXIgW0ldIG9yIFtYXSB0byBleGl0IHRoZSBpbnN0YWxsYXRpb24uIgorICBlY2hvX2luZm8gIltBRFRfSU5TVF0gUGxlYXNlIGVudGVyIHlvdXIgc2VsZWN0aW9ucyBoZXJlOiIKKyAgcmVhZCBZT0NUT0FEVF9TRUwKKyAgWU9DVE9BRFRfU0VMPWB0ciAnW2Etel0nICdbQS1aXSc8PDwiJFlPQ1RPQURUX1NFTCJgCisgIGlmIFsgIiRZT0NUT0FEVF9TRUwiID09ICJTIiBdOyB0aGVuCisgICAgcmV0dXJuICIwIgorICBlbGlmIFsgIiRZT0NUT0FEVF9TRUwiID09ICJJIiBdOyB0aGVuCisgICAgcmV0dXJuICIxIgorICBlbGlmIFsgIiRZT0NUT0FEVF9TRUwiID09ICJYIiBdOyB0aGVuCisgICAgZWNob19pbmZvICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgICBlY2hvX2luZm8gIiMgVXNlciBjYW5jZWxsZWQgaW5zdGFsbGF0aW9uISIKKyAgICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICAgIGV4aXQgMQorICBmaQorZG9uZQorCisKK30KKworY29uZmlybV9pbnN0YWxsKCkKK3sKKyMgYmVsb3cgYXJlIHByb21wdCwgbWFrZSBzdXJlIHVzZXIgc3RpbGwgd2FudCB0byBpbnN0YWxsIGV2ZW4gbWVldAorIyBzb21lIHByb21wdHMKKworI1VzZXIgbGlrZXMgdG8gZW5qb3kgc2lsZW50IGluc3RhbGxhdGlvbiwgd2Ugd2lsbCBub3QgYnJlYWsgaGlzCisjaW5zdGFsbGF0aW9uIHByb2Nlc3MgaGVyZQoraWYgWyAiJDEiID09ICIwIiBdOyB0aGVuCisgIHJldHVybgorZmkKKword2hpbGUgdHJ1ZTsgZG8KKyAgZWNob19pbmZvICJbQURUX0lOU1RdIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlIGluc3RhbGxhdGlvbj8gUGxlYXNlIGVudGVyIFkvTjoiCisgIHJlYWQgWU9DVE9BRFRfSU5TVEFMTAorICBZT0NUT0FEVF9JTlNUQUxMPWB0ciAnW2Etel0nICdbQS1aXSc8PDwiJFlPQ1RPQURUX0lOU1RBTEwiYAorICBpZiBbICIkWU9DVE9BRFRfSU5TVEFMTCIgPT0gIlkiIF07IHRoZW4KKyAgICBicmVhaworICBlbGlmIFsgIiRZT0NUT0FEVF9JTlNUQUxMIiA9PSAiTiIgXTsgdGhlbgorICAgIGVjaG9faW5mbyAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgICAgZWNob19pbmZvICIjIFVzZXIgY2FuY2VsbGVkIGluc3RhbGxhdGlvbiEiCisgICAgZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgICBleGl0IDEKKyAgZmkKK2RvbmUKK30KKworY2hlY2tfcmVzdWx0KCkKK3sKKyAgcmVzdWx0PSQ/CisgIGlmIFsgJHJlc3VsdCAtZXEgMSBdOyB0aGVuCisgICAgZXhpdCAtMQorICBlbGlmIFsgICRyZXN1bHQgLW5lIDAgXTsgdGhlbgorICAgICBlY2hvX2luZm8gIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgICAgIGVjaG9faW5mbyAiIyBNZWV0IGVycm9yKHMpIHdoZW4gaW5zdGFsbGluZyBZb2N0byBBRFQhIFBsZWFzZSBjaGVjayBsb2cgZmlsZSBmb3IgZGV0YWlscy4gIgorICAgICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgICAgZXhpdCAtMQorICBmaQorfQorCisjIHlvY3RvIGFkdCBpbnN0YWxsYXRpb24gbG9nIGZpbGUKK1lPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEU9ImFkdF9pbnN0YWxsZXIubG9nIgorIyBUZW1wIGZvbGRlcnMgaG9sZGluZyBxZW11L3Jvb3RmcyBkb3dubG9hZGVkIGltYWdlcworIyBJdCB3aWxsIGJlIHB1dCBpbnRvIHRoZSBpbnN0YWxsYXRpb24gZm9sZGVyCitMT0NBTF9ET1dOTE9BRD0iLi9kb3dubG9hZF9pbWFnZSIKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlcl8xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlcl8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJlMzg1MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyXzEuMC5iYgpAQCAtMCwwICsxLDk1IEBACisjIFlvY3RvIEFEVCBJbnN0YWxsZXIgYmIgZmlsZQorIworIyBDb3B5cmlnaHQgMjAxMC0yMDEyIGJ5IEludGVsIENvcnAuCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgCisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIAorIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIAorIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIAorIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSAKKyMgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgCisjIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gCisjIFRIRSBTT0ZUV0FSRS4KKworCitTVU1NQVJZID0gIkFwcGxpY2F0aW9uIERldmVsb3BtZW50IFRvb2xraXQiCitERVNDUklQVElPTiA9ICJDcmVhdGVzIHRoZSBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBUb29sa2l0IChBRFQpIGluc3RhbGxlciB0YXJiYWxsIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL3Rvb2xzLXJlc291cmNlcy9wcm9qZWN0cy9hcHBsaWNhdGlvbi1kZXZlbG9wbWVudC10b29sa2l0LWFkdCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorTElDRU5TRSA9ICJNSVQiCisKK1BBQ0tBR0VTID0gIiIKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK1BSID0gInIxMSIKKworQURUX0RFUExPWSA9ICIke0RFUExPWV9ESVJ9L3Nkay8iCitBRFRfRElSID0gIiR7V09SS0RJUn0vYWR0LWluc3RhbGxlci8iCitTID0gIiR7V09SS0RJUn0vb3BrZy0ke1BWfSIKKworUFYgPSAiMC4zLjAiCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9vcGtnL29wa2ctJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3dnZXRfY2FjaGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWR0X2luc3RhbGxlciBcCisgICAgICAgICAgIGZpbGU6Ly9zY3JpcHRzL2FkdF9pbnN0YWxsZXJfaW50ZXJuYWwgXAorICAgICAgICAgICBmaWxlOi8vc2NyaXB0cy91dGlsIFwKKyAgICAgICAgICAgZmlsZTovL3NjcmlwdHMvZGF0YV9kZWZpbmUgXAorICAgICAgICAgICBmaWxlOi8vc2NyaXB0cy9leHRyYWN0X3Jvb3RmcyBcCisgICAgICAgICAgIGZpbGU6Ly9hZHRfaW5zdGFsbGVyLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vb3BrZy9jb25mL29wa2ctc2RrLXg4Nl82NC5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL29wa2cvY29uZi9vcGtnLXNkay1pNjg2LmNvbmYgXAorCSAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzQxMmNkYzcxZDc4Yjk4ZmFjYzg0YjE5MzMxZWM2NGUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2Y3MzVkMWNkYjhlZjM3MThmYjBmOWZiYTQ0Y2EwZDlhNWM5MGQzYTdmMDE0ZjM3YTZkMmY5NDc0ZjU0OTg4ZiIKKworQURUUkVQTyA/PSAiaHR0cDovL2FkdHJlcG8ueW9jdG9wcm9qZWN0Lm9yZy8ke1NES19WRVJTSU9OfSIKKworIyBUaGlzIHJlY2lwZSBtYWtlcyBubyBzZW5zZSBhcyBhIG11bHRpbGliCitNVUxUSUxJQlMgPSAiIgorCitkb19wb3B1bGF0ZV9hZHRbdW1hc2tdID0gIjAyMiIKKworZmFrZXJvb3QgZG9fcG9wdWxhdGVfYWR0ICgpIHsKKwljZCAke1dPUktESVJ9CisJbWtkaXIgLXAgJHtBRFRfREVQTE9ZfQorCXJtIC1mICR7QURUX0RFUExPWX0vYWR0X2luc3RhbGxlci50YXIuYnoyCisJcm0gLXJmICR7QURUX0RJUn0KKwlta2RpciAtcCAke0FEVF9ESVJ9L29wa2cvYnVpbGQKKwljcCAtciBvcGtnICR7QURUX0RJUn0vCisJc2VkIC1pIC1lICdzI0FEVFJFUE9fVVJMIyR7QURUUkVQT30jJyAke0FEVF9ESVJ9L29wa2cvY29uZi8qLmNvbmYKKwljcCAtciBvcGtnLSR7UFZ9ICR7QURUX0RJUn0vb3BrZy9idWlsZC8KKwltdiAke0FEVF9ESVJ9L29wa2cvYnVpbGQvb3BrZy0ke1BWfSAke0FEVF9ESVJ9L29wa2cvYnVpbGQvb3BrZy1zdm4KKwlybSAtcmYgJHtBRFRfRElSfS9vcGtnL2J1aWxkL29wa2ctc3ZuL3BhdGNoZXMgJHtBRFRfRElSfS9vcGtnL2J1aWxkL29wa2ctc3ZuLy5wYworCWNwIC1yIHNjcmlwdHMgJHtBRFRfRElSfS8KKwljcCBhZHRfaW5zdGFsbGVyICR7QURUX0RJUn0KKwljcCBhZHRfaW5zdGFsbGVyLmNvbmYgJHtBRFRfRElSfQorCXNlZCAtaSAtZSAncyNBRFRSRVBPIyR7QURUUkVQT30jJyAke0FEVF9ESVJ9L2FkdF9pbnN0YWxsZXIuY29uZgorCWVjaG8gJ1NES19WRU5ET1I9JHtTREtfVkVORE9SfScgPj4gJHtBRFRfRElSfS9zY3JpcHRzL2RhdGFfZGVmaW5lCisJZWNobyAnREVGQVVMVF9JTlNUQUxMX0ZPTERFUj0ke1NES1BBVEh9JyA+PiAke0FEVF9ESVJ9L3NjcmlwdHMvZGF0YV9kZWZpbmUKKwljcCAke0NPUkVCQVNFfS9zY3JpcHRzL3JlbG9jYXRlX3Nkay5weSAke0FEVF9ESVJ9L3NjcmlwdHMvCisJdGFyIGNmaiBhZHRfaW5zdGFsbGVyLnRhci5iejIgYWR0LWluc3RhbGxlcgorCWNwICR7V09SS0RJUn0vYWR0X2luc3RhbGxlci50YXIuYnoyICR7QURUX0RFUExPWX0KK30KKworZG9fcG9wdWxhdGVfYWR0W25vc3RhbXBdID0gIjEiCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgorZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2VkYXRhW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW25vZXhlY10gPSAiMSIKK2RvX3BvcGx1bGF0ZV9zeXNyb290W25vZXhlY10gPSAiMSIKKworYWRkdGFzayBwb3B1bGF0ZV9hZHQgYmVmb3JlIGRvX2J1aWxkIGFmdGVyIGRvX2luc3RhbGwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9maWxlcy93Z2V0X2NhY2hlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2ZpbGVzL3dnZXRfY2FjaGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTExNzUxMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9maWxlcy93Z2V0X2NhY2hlLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworLS0tCisgbGlib3BrZy9vcGtnX2Rvd25sb2FkX3dnZXQuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvbGlib3BrZy9vcGtnX2Rvd25sb2FkX3dnZXQuYyBiL2xpYm9wa2cvb3BrZ19kb3dubG9hZF93Z2V0LmMKK2luZGV4IDkwMDE0OTMuLjE4ZWY5MWUgMTAwNjQ0CistLS0gYS9saWJvcGtnL29wa2dfZG93bmxvYWRfd2dldC5jCisrKysgYi9saWJvcGtnL29wa2dfZG93bmxvYWRfd2dldC5jCitAQCAtNTAsNiArNTAsNyBAQCBpbnQgb3BrZ19kb3dubG9hZF9iYWNrZW5kKGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZGVzdCwKKyAKKyAgICAgYXJndltpKytdID0gIndnZXQiOworICAgICBhcmd2W2krK10gPSAiLXEiOworKyAgICBhcmd2W2krK10gPSAiLS1uby1jYWNoZSI7CisgICAgIGlmIChvcGtnX2NvbmZpZy0+aHR0cF9wcm94eSB8fCBvcGtnX2NvbmZpZy0+ZnRwX3Byb3h5KSB7CisgICAgICAgICBhcmd2W2krK10gPSAiLVkiOworICAgICAgICAgYXJndltpKytdID0gIm9uIjsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNzc3MDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC5pbmMKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJVdGlsaXR5IHNjcmlwdHMgZm9yIGludGVybmF0aW9uYWxpemluZyBYTUwiCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MiIKKworVVJMVj0iJHtAJy4nLmpvaW4oZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLicpWzA6Ml0pfSIKK1NSQ19VUkkgPSAiaHR0cDovL2xhdW5jaHBhZC5uZXQvJHtCUE59L3RydW5rLyR7UFZ9Lytkb3dubG9hZC8ke0JQfS50YXIuZ3oiCitTID0gIiR7V09SS0RJUn0vaW50bHRvb2wtJHtQVn0iCisKK0RFUEVORFMgPSAibGlieG1sLXBhcnNlci1wZXJsLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gImdldHRleHQtZGV2IGxpYnhtbC1wYXJzZXItcGVybCIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImxpYnhtbC1wYXJzZXItcGVybC1uYXRpdmUiCisjIGdldHRleHQgaXMgYXNzdW1lZCB0byBleGlzdCBvbiB0aGUgaG9zdAorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gImxpYnhtbC1wYXJzZXItcGVybC1uYXRpdmUiCitSUkVDT01NRU5EU18ke1BOfSA9ICJwZXJsLW1vZHVsZXMiCitSUkVDT01NRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorCitGSUxFU18ke1BOfS1kZXYgPSAiIgorRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vYWNsb2NhbCIKKworSU5TQU5FX1NLSVBfJHtQTn0gKz0gImRldi1kZXBzIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgcGVybG5hdGl2ZQorCitleHBvcnQgUEVSTCA9ICIke2JpbmRpcn0vZW52IHBlcmwiCitQRVJMX2NsYXNzLW5hdGl2ZSA9ICIvdXNyL2Jpbi9lbnYgbmF0aXZlcGVybCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9pbnRsdG9vbC1ub3dhcm4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9pbnRsdG9vbC1ub3dhcm4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZjOTM4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL2ludGx0b29sLW5vd2Fybi5wYXRjaApAQCAtMCwwICsxLDQyIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitJbmRleDogaW50bHRvb2wtMC40MC4wL2ludGx0b29sLWV4dHJhY3QuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBpbnRsdG9vbC0wLjUwLjAub3JpZy9pbnRsdG9vbC1leHRyYWN0LmluCTIwMTEtMTAtMDggMjI6MjQ6NTcuMDAwMDAwMDAwICswMzAwCisrKysgaW50bHRvb2wtMC41MC4wL2ludGx0b29sLWV4dHJhY3QuaW4JMjAxMS0xMi0wNyAxNjowNDowNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xLDQgKzEsNCBAQAorLSMhQElOVExUT09MX1BFUkxAIC13IAorKyMhQElOVExUT09MX1BFUkxACisgIyAtKi0gTW9kZTogcGVybDsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogNCAgLSotCisgCisgIworSW5kZXg6IGludGx0b29sLTAuNTAuMC9pbnRsdG9vbC1tZXJnZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGludGx0b29sLTAuNTAuMC5vcmlnL2ludGx0b29sLW1lcmdlLmluCTIwMTEtMTAtMDggMTc6NTI6MDEuMDAwMDAwMDAwICswMzAwCisrKysgaW50bHRvb2wtMC41MC4wL2ludGx0b29sLW1lcmdlLmluCTIwMTEtMTItMDcgMTY6MDU6NTUuMDAwMDAwMDAwICswMjAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIUBJTlRMVE9PTF9QRVJMQCAtdworKyMhQElOVExUT09MX1BFUkxACisgIyAtKi0gTW9kZTogcGVybDsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogNCAgLSotCisgCisgIworSW5kZXg6IGludGx0b29sLTAuNTAuMC9pbnRsdG9vbC1wcmVwYXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaW50bHRvb2wtMC41MC4wLm9yaWcvaW50bHRvb2wtcHJlcGFyZS5pbgkyMDExLTEwLTA4IDA5OjE2OjU4LjAwMDAwMDAwMCArMDMwMAorKysrIGludGx0b29sLTAuNTAuMC9pbnRsdG9vbC1wcmVwYXJlLmluCTIwMTEtMTItMDcgMTY6MDY6MTMuMDAwMDAwMDAwICswMjAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIUBJTlRMVE9PTF9QRVJMQCAtdworKyMhQElOVExUT09MX1BFUkxACisgIyAtKi0gTW9kZTogcGVybDsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogNCAgLSotCisgCisgIyAgSW50bHRvb2wgLmRlc2t0b3AsIC5kaXJlY3RvcnkgUHJlcGFyZSBUb29sCitJbmRleDogaW50bHRvb2wtMC41MC4wL2ludGx0b29sLXVwZGF0ZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGludGx0b29sLTAuNTAuMC5vcmlnL2ludGx0b29sLXVwZGF0ZS5pbgkyMDExLTEwLTA4IDIyOjI0OjU3LjAwMDAwMDAwMCArMDMwMAorKysrIGludGx0b29sLTAuNTAuMC9pbnRsdG9vbC11cGRhdGUuaW4JMjAxMS0xMi0wNyAxNjowNjozOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xLDQgKzEsNCBAQAorLSMhQElOVExUT09MX1BFUkxAIC13CisrIyFASU5UTFRPT0xfUEVSTEAKKyAjIC0qLSBNb2RlOiBwZXJsOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiA0ICAtKi0KKyAKKyAjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9ub3BlcmxjaGVjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL25vcGVybGNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1M2VlMWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9ub3BlcmxjaGVjay5wYXRjaApAQCAtMCwwICsxLDQwIEBACitJbiB0aGUgdGFyZ2V0IGNhc2UsIHdlIGNhbid0IGNoZWNrIGlmIHBlcmwgZXhpc3RzIG9yIHRyeSBydW5uaW5nIGl0LiBJZiB3ZQorZG9uJ3QgcGF0Y2ggdGhlIGNvZGUsIHRoZSBuYXRpdmUgcGVybCBsb2NhdGlvbiB3b3VsZCBiZSB1c2VkLCBub3QgdGhlIHRhcmdldAord2hpY2ggaXMgYWxzbyBpbmNvcnJlY3QuIFdlIHRoZXJlZm9yZSBkaXNhYmxlIHRoaXMgY29kZSBhbmQgcmVseSBvbiB0aGUgCitjb3JyZWN0IHZhbHVlIG9mIFBFUkwgYmVpbmcgcGFzc2VkIGluLgorCitSUCAzMS84LzIwMTEKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNTMzOGE3Ni4uZTcwOWEyYiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTEsMjQgKzExLDEwIEBAIEFDX1NVQlNUKHBrZ2RhdGFkaXIpIGRubCBhdXRvbWFrZSBkb2VzIG5vdCBuZWVkIHRoaXMsIGJ1dCBsaWJ0b29saXplIGRvZXMKKyBhY2xvY2FsZGlyPScke2RhdGFkaXJ9Jy9hY2xvY2FsCisgQUNfU1VCU1QoYWNsb2NhbGRpcikKKyAKKy1BQ19QQVRIX1BST0coUEVSTCwgcGVybCkKKyBpZiB0ZXN0IC16ICIkUEVSTCI7IHRoZW4KKy0gICBBQ19NU0dfRVJST1IoW3Blcmwgbm90IGZvdW5kXSkKKy1maQorLUFDX01TR19DSEVDS0lORyhbZm9yIHBlcmwgPj0gNS44LjFdKQorLSRQRVJMIC1lICJ1c2UgNS44LjE7IiA+IC9kZXYvbnVsbCAyPiYxCistaWYgdGVzdCAkPyAtbmUgMDsgdGhlbgorLSAgIEFDX01TR19FUlJPUihbcGVybCA1LjguMSBpcyByZXF1aXJlZCBmb3IgaW50bHRvb2xdKQorLWVsc2UKKy0gICBQRVJMX1ZFUlNJT049ImAkUEVSTCAtZSBcInByaW50ZiAnJXZkJywgJF5WXCJgIgorLSAgIEFDX01TR19SRVNVTFQoWyRQRVJMX1ZFUlNJT05dKQorLWZpCistQUNfTVNHX0NIRUNLSU5HKFtmb3IgWE1MOjpQYXJzZXJdKQorLWlmIGAkUEVSTCAtZSAicmVxdWlyZSBYTUw6OlBhcnNlciIgMj4vZGV2L251bGxgOyB0aGVuCistICAgQUNfTVNHX1JFU1VMVChbb2tdKQorLWVsc2UKKy0gICBBQ19NU0dfRVJST1IoW1hNTDo6UGFyc2VyIHBlcmwgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciBpbnRsdG9vbF0pCisrICAgQUNfTVNHX0VSUk9SKFtQRVJMIHZhcmlhYmxlIG5vdCBzZXRdKQorIGZpCisrQUNfU1VCU1QoUEVSTCkKKyBBQ19QQVRIX1BST0coQlpSLCBienIpCisgCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9wZXJsLTUyMi1kZXByZWNhdGlvbnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9wZXJsLTUyMi1kZXByZWNhdGlvbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI1MjE3MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3BlcmwtNTIyLWRlcHJlY2F0aW9ucy5wYXRjaApAQCAtMCwwICsxLDU1IEBACitQZXJsIDUuMjIgaGFzIGRlcHJlY2F0ZWQgc29tZSByZWdleCBmZWF0dXJlcywgd2hpY2ggY2F1c2VzIHdhcm5pbmdzIHdoZW4KK2ludGx0b29sLXVwZGF0ZSBydW5zOgorCitVbmVzY2FwZWQgbGVmdCBicmFjZSBpbiByZWdleCBpcyBkZXByZWNhdGVkLCBwYXNzZWQgdGhyb3VnaCBpbiByZWdleDsgbWFya2VkIGJ5Cis8LS0gSEVSRSBpbiBtL14oLiopXCR7IDwtLSBIRVJFID8oW0EtWl9dKyl9PyguKikkLyBhdAorL2RhdGEvcG9reS1tYXN0ZXIvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvYmluL2ludGx0b29sLXVwZGF0ZSBsaW5lIDEwNjUuCisKK1Rha2UgYSBwYXRjaCBmcm9tIERlYmlhbiB0byBzb2x2ZSB0aGlzLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCAoaHR0cHM6Ly9idWdzLmxhdW5jaHBhZC5uZXQvaW50bHRvb2wvK2J1Zy8xNDY1MDEwKQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworLS0tIGludGx0b29sLTAuNTEuMC1PUklHL2ludGx0b29sLXVwZGF0ZS5pbgkyMDE1LTA1LTI3IDAwOjIwOjQzLjAzODM3OTk2MyArMDIwMAorKysrIGludGx0b29sLTAuNTEuMC9pbnRsdG9vbC11cGRhdGUuaW4JMjAxNS0wNS0yNyAwMDoyMzo1My4zMDkwNzgwNTIgKzAyMDAKK0BAIC0xMDYyLDcgKzEwNjIsNyBAQAorIAl9CisgICAgIH0KKyAKKy0gICAgaWYgKCRzdHIgPX4gL14oLiopXCR7PyhbQS1aX10rKX0/KC4qKSQvKQorKyAgICBpZiAoJHN0ciA9fiAvXiguKilcJFx7PyhbQS1aX10rKVx9PyguKikkLykKKyAgICAgeworIAlteSAkcmVzdCA9ICQzOworIAlteSAkdW50b3VjaGVkID0gJDE7CitAQCAtMTE5MCwxMCArMTE5MCwxMCBAQAorIAkkbmFtZSAgICA9fiBzL1woKyQvL2c7CisgCSR2ZXJzaW9uID1+IHMvXCgrJC8vZzsKKyAKKy0JJHZhcmhhc2h7IlBBQ0tBR0VfTkFNRSJ9ID0gJG5hbWUgaWYgKG5vdCAkbmFtZSA9fiAvXCR7P0FDX1BBQ0tBR0VfTkFNRX0/Lyk7CistCSR2YXJoYXNoeyJQQUNLQUdFIn0gPSAkbmFtZSBpZiAobm90ICRuYW1lID1+IC9cJHs/UEFDS0FHRX0/Lyk7CistCSR2YXJoYXNoeyJQQUNLQUdFX1ZFUlNJT04ifSA9ICR2ZXJzaW9uIGlmIChub3QgJG5hbWUgPX4gL1wkez9BQ19QQUNLQUdFX1ZFUlNJT059Py8pOworLQkkdmFyaGFzaHsiVkVSU0lPTiJ9ID0gJHZlcnNpb24gaWYgKG5vdCAkbmFtZSA9fiAvXCR7P1ZFUlNJT059Py8pOworKwkkdmFyaGFzaHsiUEFDS0FHRV9OQU1FIn0gPSAkbmFtZSBpZiAobm90ICRuYW1lID1+IC9cJFx7P0FDX1BBQ0tBR0VfTkFNRVx9Py8pOworKwkkdmFyaGFzaHsiUEFDS0FHRSJ9ID0gJG5hbWUgaWYgKG5vdCAkbmFtZSA9fiAvXCRcez9QQUNLQUdFXH0/Lyk7CisrCSR2YXJoYXNoeyJQQUNLQUdFX1ZFUlNJT04ifSA9ICR2ZXJzaW9uIGlmIChub3QgJG5hbWUgPX4gL1wkXHs/QUNfUEFDS0FHRV9WRVJTSU9OXH0/Lyk7CisrCSR2YXJoYXNoeyJWRVJTSU9OIn0gPSAkdmVyc2lvbiBpZiAobm90ICRuYW1lID1+IC9cJFx7P1ZFUlNJT05cfT8vKTsKKyAgICAgfQorIAorICAgICBpZiAoJGNvbmZfc291cmNlID1+IC9eQUNfSU5JVFwoKFteLFwpXSspLChbXixcKV0rKVssXT8oW14sXCldKyk/L20pCitAQCAtMTIxOSwxMSArMTIxOSwxMSBAQAorIAkkdmVyc2lvbiA9fiBzL1woKyQvL2c7CisgICAgICAgICAkYnVndXJsICA9fiBzL1woKyQvL2cgaWYgKGRlZmluZWQgJGJ1Z3VybCk7CisgCistCSR2YXJoYXNoeyJQQUNLQUdFX05BTUUifSA9ICRuYW1lIGlmIChub3QgJG5hbWUgPX4gL1wkez9BQ19QQUNLQUdFX05BTUV9Py8pOworLQkkdmFyaGFzaHsiUEFDS0FHRSJ9ID0gJG5hbWUgaWYgKG5vdCAkbmFtZSA9fiAvXCR7P1BBQ0tBR0V9Py8pOworLQkkdmFyaGFzaHsiUEFDS0FHRV9WRVJTSU9OIn0gPSAkdmVyc2lvbiBpZiAobm90ICRuYW1lID1+IC9cJHs/QUNfUEFDS0FHRV9WRVJTSU9OfT8vKTsKKy0JJHZhcmhhc2h7IlZFUlNJT04ifSA9ICR2ZXJzaW9uIGlmIChub3QgJG5hbWUgPX4gL1wkez9WRVJTSU9OfT8vKTsKKy0gICAgICAgICR2YXJoYXNoeyJQQUNLQUdFX0JVR1JFUE9SVCJ9ID0gJGJ1Z3VybCBpZiAoZGVmaW5lZCAkYnVndXJsIGFuZCBub3QgJGJ1Z3VybCA9fiAvXCR7P1x3K30/Lyk7CisrCSR2YXJoYXNoeyJQQUNLQUdFX05BTUUifSA9ICRuYW1lIGlmIChub3QgJG5hbWUgPX4gL1wkXHs/QUNfUEFDS0FHRV9OQU1FXH0/Lyk7CisrCSR2YXJoYXNoeyJQQUNLQUdFIn0gPSAkbmFtZSBpZiAobm90ICRuYW1lID1+IC9cJFx7P1BBQ0tBR0VcfT8vKTsKKysJJHZhcmhhc2h7IlBBQ0tBR0VfVkVSU0lPTiJ9ID0gJHZlcnNpb24gaWYgKG5vdCAkbmFtZSA9fiAvXCRcez9BQ19QQUNLQUdFX1ZFUlNJT05cfT8vKTsKKysJJHZhcmhhc2h7IlZFUlNJT04ifSA9ICR2ZXJzaW9uIGlmIChub3QgJG5hbWUgPX4gL1wkXHs/VkVSU0lPTlx9Py8pOworKyAgICAgICAgJHZhcmhhc2h7IlBBQ0tBR0VfQlVHUkVQT1JUIn0gPSAkYnVndXJsIGlmIChkZWZpbmVkICRidWd1cmwgYW5kIG5vdCAkYnVndXJsID1+IC9cJFx7P1x3K1x9Py8pOworICAgICB9CisgCisgICAgICMgXHMgbWFrZXMgdGhpcyBub3Qgd29yaywgd2h5PwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3JlbW92ZS14bWwtY2hlY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9yZW1vdmUteG1sLWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNjllMzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9yZW1vdmUteG1sLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1NpZ25lZC1vZmYtYnk6IEZsb3JpbiBTYXJidSA8ZmxvcmluLnNhcmJ1QHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK0luZGV4OiBpbnRsdG9vbC0wLjQwLjYvaW50bHRvb2wubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBpbnRsdG9vbC0wLjQwLjYub3JpZy9pbnRsdG9vbC5tNAkyMDA5LTAyLTE0IDE0OjEyOjI4LjAwMDAwMDAwMCAtMDgwMAorKysrIGludGx0b29sLTAuNDAuNi9pbnRsdG9vbC5tNAkyMDExLTExLTIzIDE1OjM5OjM0LjY4OTU2MTg3MiAtMDgwMAorQEAgLTEyMiwxNCArMTIyLDE2IEBACisgICAgSVRfUEVSTF9WRVJTSU9OPSJgJElOVExUT09MX1BFUkwgLWUgXCJwcmludGYgJyV2ZCcsICReVlwiYCIKKyAgICBBQ19NU0dfUkVTVUxUKFskSVRfUEVSTF9WRVJTSU9OXSkKKyBmaQorLWlmIHRlc3QgIngkMiIgIT0gInhuby14bWwiOyB0aGVuCistICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgWE1MOjpQYXJzZXJdKQorLSAgIGlmIGAkSU5UTFRPT0xfUEVSTCAtZSAicmVxdWlyZSBYTUw6OlBhcnNlciIgMj4vZGV2L251bGxgOyB0aGVuCistICAgICAgIEFDX01TR19SRVNVTFQoW29rXSkKKy0gICBlbHNlCistICAgICAgIEFDX01TR19FUlJPUihbWE1MOjpQYXJzZXIgcGVybCBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIGludGx0b29sXSkKKy0gICBmaQorLWZpCisrCisrIyBEaXNhYmxlIHRoaXMgY2hlY2sgc2luY2Ugd2Uga25vdyBYTUw6OlBhcnNlciBpcyBpbnN0YWxsZWQKKysjaWYgdGVzdCAieCQyIiAhPSAieG5vLXhtbCI7IHRoZW4KKysjICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgWE1MOjpQYXJzZXJdKQorKyMgICBpZiBgJElOVExUT09MX1BFUkwgLWUgInJlcXVpcmUgWE1MOjpQYXJzZXIiIDI+L2Rldi9udWxsYDsgdGhlbgorKyMgICAgICAgQUNfTVNHX1JFU1VMVChbb2tdKQorKyMgICBlbHNlCisrIyAgICAgICBBQ19NU0dfRVJST1IoW1hNTDo6UGFyc2VyIHBlcmwgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciBpbnRsdG9vbF0pCisrIyAgIGZpCisrI2ZpCisgCisgIyBTdWJzdGl0dXRlIEFMTF9MSU5HVUFTIHNvIHdlIGNhbiB1c2UgaXQgaW4gcG8vTWFrZWZpbGUKKyBBQ19TVUJTVChBTExfTElOR1VBUykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3VzZS1uYXRpdmVwZXJsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvdXNlLW5hdGl2ZXBlcmwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY1ZmVkMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3VzZS1uYXRpdmVwZXJsLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK09FIGhhcyBwZXJsIGJpbmFyeSBhcyAnbmF0aXZlcGVybCcgaW4gbmF0aXZlIHN5c3Jvb3Qgc28gd2UgbG9vayBmb3IgaXQKK2luIG9yZGVyIHRvIGF2b2lkIGludGx0b29sIHNlYXJjaGluZyBhbmQgZmluZGluZyBwZXJsIGZyb20gL3Vzci9iaW4KK29uIGJ1aWxkIHN5c3RlbSB3aGljaCBtYXkgbm90IGhhdmUgYWxsIHRoZSBtb2R1bGVzIHRoYXQgaXQgbmVlZHMuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCitJbmRleDogaW50bHRvb2wtMC40MC42L2ludGx0b29sLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaW50bHRvb2wtMC40MC42Lm9yaWcvaW50bHRvb2wubTQJMjAwOS0wMi0xNCAxNDoxMjoyOC4wMDAwMDAwMDAgLTA4MDAKKysrKyBpbnRsdG9vbC0wLjQwLjYvaW50bHRvb2wubTQJMjAxMS0wOC0wOSAwODowNzoxNi40MjczNDc4NDYgLTA3MDAKK0BAIC0xMTAsNyArMTEwLDcgQEAKKyAgICAgQUNfTVNHX0VSUk9SKFtHTlUgZ2V0dGV4dCB0b29scyBub3QgZm91bmQ7IHJlcXVpcmVkIGZvciBpbnRsdG9vbF0pCisgZmkKKyAKKy1BQ19QQVRIX1BST0coSU5UTFRPT0xfUEVSTCwgcGVybCkKKytBQ19QQVRIX1BST0coSU5UTFRPT0xfUEVSTCwgbmF0aXZlcGVybCkKKyBpZiB0ZXN0IC16ICIkSU5UTFRPT0xfUEVSTCI7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoW3Blcmwgbm90IGZvdW5kXSkKKyBmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2xfMC41MS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2xfMC41MS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MjBkNDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbF8wLjUxLjAuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSBpbnRsdG9vbC5pbmMKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworU1JDX1VSSSArPSAiZmlsZTovL2ludGx0b29sLW5vd2Fybi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcGVybC01MjItZGVwcmVjYXRpb25zLnBhdGNoIFwKKyAgICAgICAgICAgJHtOQVRJVkVQQVRDSEVTfSBcCisgICAgICAgICAgICIKKworIworIyBBbGwgb2YgdGhlIGludGx0b29sIHNjcmlwdHMgaGF2ZSB0aGUgY29ycmVjdCBwYXRocyB0byBwZXJsIGFscmVhZHkKKyMgZW1iZWRkZWQgaW50byB0aGVtIGFuZCBjYW4gZmluZCBwZXJsIGZpbmUsIHNvIHdlIGFkZCB0aGUgcmVtb3ZlIHhtbC1jaGVjaworIyBpbiB0aGUgaW50bHRvb2wubTQgdmlhIHRoZSByZW1vdmUteG1sLWNoZWNrLnBhdGNoCitOQVRJVkVQQVRDSEVTID0gImZpbGU6Ly9ub3BlcmxjaGVjay5wYXRjaCBcCisgICAgICAgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUteG1sLWNoZWNrLnBhdGNoIgorTkFUSVZFUEFUQ0hFU19jbGFzcy1uYXRpdmUgPSAiZmlsZTovL3VzZS1uYXRpdmVwZXJsLnBhdGNoIiAKKworU1JDX1VSSVttZDVzdW1dID0gIjEyZTUxN2NhYzJiNTdhMDEyMWNkYTM1MTU3MGYxZTYzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY3Yzc0ZDk0MTk2YjE1M2I3NzRhYjlmODliMmZhNmM2YmE3OTM1MjQwNzAzN2M4YzE0ZDVhZWIzMzRlOTU5Y2QiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9qc29uLWMvanNvbi1jLzAwMDEtanNvbl90b2tlbmVyLXJlcXVpcmVzLUlORi1hbmQtTkFOLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvanNvbi1jL2pzb24tYy8wMDAxLWpzb25fdG9rZW5lci1yZXF1aXJlcy1JTkYtYW5kLU5BTi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjlkOTExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvanNvbi1jL2pzb24tYy8wMDAxLWpzb25fdG9rZW5lci1yZXF1aXJlcy1JTkYtYW5kLU5BTi5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIDliZTcxNzAwZWI1ODBjODE1Njg4NTg0YTY0NjIxYTM4ODY3YzNmZGQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKYW1lcyBNeWF0dCA8amFtZXMubXlhdHRAdGVzc2VsbGEuY29tPgorRGF0ZTogVGh1LCA1IEZlYiAyMDE1IDE1OjU3OjE0ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGpzb25fdG9rZW5lciByZXF1aXJlcyBJTkYgYW5kIE5BTgorCistLS0KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworIGpzb25fdG9rZW5lci5jIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBqc29uLWMtMC4xMi9qc29uX3Rva2VuZXIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGpzb24tYy0wLjEyLm9yaWcvanNvbl90b2tlbmVyLmMKKysrKyBqc29uLWMtMC4xMi9qc29uX3Rva2VuZXIuYworQEAgLTE2LDYgKzE2LDcgQEAKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisgCisgI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSAibWF0aF9jb21wYXQuaCIKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0ZGRlZi5oPgorQEAgLTM1MiwxMiArMzUzLDEwIEBAIHN0cnVjdCBqc29uX29iamVjdCoganNvbl90b2tlbmVyX3BhcnNlX2UKKyAKKyAgICAgY2FzZSBqc29uX3Rva2VuZXJfc3RhdGVfaW5mOiAvKiBha2Egc3RhcnRzIHdpdGggJ2knICovCisgICAgICAgeworLQlpbnQgc2l6ZTsKKy0JaW50IHNpemVfaW5mOworKwlzaXplX3Qgc2l6ZV9pbmY7CisgCWludCBpc19uZWdhdGl2ZSA9IDA7CisgCisgCXByaW50YnVmX21lbWFwcGVuZF9mYXN0KHRvay0+cGIsICZjLCAxKTsKKy0Jc2l6ZSA9IGpzb25fbWluKHRvay0+c3RfcG9zKzEsIGpzb25fbnVsbF9zdHJfbGVuKTsKKyAJc2l6ZV9pbmYgPSBqc29uX21pbih0b2stPnN0X3BvcysxLCBqc29uX2luZl9zdHJfbGVuKTsKKyAJY2hhciAqaW5mYnVmID0gdG9rLT5wYi0+YnVmOworIAlpZiAoKmluZmJ1ZiA9PSAnLScpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9qc29uLWMvanNvbi1jXzAuMTIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9qc29uLWMvanNvbi1jXzAuMTIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlZjAzZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2pzb24tYy9qc29uLWNfMC4xMi5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkMgYmluZGluZ3MgZm9yIGFwcHMgd2hpY2ggd2lsbCBtYW5pcHVsYXRlIEpTT04gZGF0YSIKK0RFU0NSSVBUSU9OID0gIkpTT04tQyBpbXBsZW1lbnRzIGEgcmVmZXJlbmNlIGNvdW50aW5nIG9iamVjdCBtb2RlbCB0aGF0IGFsbG93cyB5b3UgdG8gZWFzaWx5IGNvbnN0cnVjdCBKU09OIG9iamVjdHMgaW4gQy4iCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vanNvbi1jL2pzb24tYy93aWtpIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kZTU0YjYwZmJiYzM1MTIzYmExOTNmZWE4ZWUyMTZmMiIKKworU1JDX1VSSSA9ICJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vanNvbi1jX3JlbGVhc2VzL3JlbGVhc2VzLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWpzb25fdG9rZW5lci1yZXF1aXJlcy1JTkYtYW5kLU5BTi5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiM2NhNGJiYjg4MWRmYzQwMTdlODAyMWI1ZTBhOGM0OTEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDAwYzAxYjJiM2Y4MmRjYjQyNjE3NTFlYjcxZjFiMDg0NDA0ZmI3ZDZhMjgyZjA2MDc0ZDNjMTcwNzhiOWYzZiIKKworUlBST1ZJREVTXyR7UE59ID0gImxpYmpzb24iCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICMgQ2xlYW4gdXAgYXV0b2NvbmYgY3J1ZnQgdGhhdCBzaG91bGQgbm90IGJlIGluIHRoZSB0YXJiYWxsCisgICAgcm0gLWYgJHtTfS9jb25maWcuc3RhdHVzCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9rY29uZmlnLWZyb250ZW5kcy9rY29uZmlnLWZyb250ZW5kc18zLjEyLjAuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2tjb25maWctZnJvbnRlbmRzL2tjb25maWctZnJvbnRlbmRzXzMuMTIuMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4YTJmOTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9rY29uZmlnLWZyb250ZW5kcy9rY29uZmlnLWZyb250ZW5kc18zLjEyLjAuMC5iYgpAQCAtMCwwICsxLDM4IEBACisjIENvcHlyaWdodCAoQykgMjAxMiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCBmb3IgdGhlIHRlcm1zKQorCitTVU1NQVJZID0gIkxpbnV4IGtlcm5lbCBzdHlsZSBjb25maWd1cmF0aW9uIGZyYW1ld29yayBmb3Igb3RoZXIgcHJvamVjdHMiCitERVNDUklQVElPTiA9ICJUaGUga2NvbmZpZy1mcm9udGVuZHMgcHJvamVjdCBhaW1zIGF0IGNlbnRyYWxpc2luZyBcCit0aGUgZWZmb3J0IG9mIGtlZXBpbmcgYW4gdXAtdG8tZGF0ZSwgb3V0LW9mLXRyZWUsIHBhY2thZ2luZyBvZiB0aGUgXAora2NvbmZpZyBpbmZyYXN0cnVjdHVyZSwgcmVhZHkgZm9yIHVzZSBieSB0aGlyZC1wYXJ0eSBwcm9qZWN0cy4gXAorVGhlIGtjb25maWctZnJvbnRlbmRzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIGtjb25maWcgcGFyc2VyLCBhcyB3ZWxsIGFzIGFsbCBcCit0aGUgZnJvbnRlbmRzIgorSE9NRVBBR0UgPSAiaHR0cDovL3ltb3Jpbi5pcy1hLWdlZWsub3JnL3Byb2plY3RzL2tjb25maWctZnJvbnRlbmRzIgorTElDRU5TRSA9ICJHUEwtMi4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OWI4Y2Y2MGZmMzk3NjdmZjA0YjY3MWZjYTgzMDI0MDgiCitTRUNUSU9OID0gImRldmVsIgorREVQRU5EUyArPSAibmN1cnNlcyBmbGV4IGJpc29uIGdwZXJmLW5hdGl2ZSBwa2djb25maWctbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbiBiYXNoIgorU1JDX1VSSSA9ICJodHRwOi8veW1vcmluLmlzLWEtZ2Vlay5vcmcvZG93bmxvYWQvJHtCUE59LyR7QlB9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gImI5MzkyODBkY2M4M2Y4ZmVhYmQ4N2ExZDVmOWIwMGMyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVhMjYxNWE2MmM3NGJlYTZjZTNiMzg0MDJmMDBjNzUxMzg1OGYzMDdmNmJhN2FhOWZkYmYwYmJjMTJiY2Y0MDciCisKK2luaGVyaXQgYXV0b3Rvb2xzCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJbWtkaXIgLXAgc2NyaXB0cy8uYXV0b3N0dWZmL200Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWxuIC1zIGtjb25maWctY29uZiAke0R9JHtiaW5kaXJ9L2NvbmYKKwlsbiAtcyBrY29uZmlnLW1jb25mICR7RH0ke2JpbmRpcn0vbWNvbmYKK30KKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtZ2NvbmYgLS1kaXNhYmxlLXFjb25mIgorCisjIFNvbWUgcGFja2FnZXMgaGF2ZSB0aGUgdmVyc2lvbiBwcmVjZWVkaW5nIHRoZSAuc28gaW5zdGVhZCBwcm9wZXJseQorIyB2ZXJzaW9uZWQgLnNvLjx2ZXJzaW9uPiwgc28gd2UgbmVlZCB0byByZW9yZGVyIGFuZCByZXBhY2thZ2UuCitTT0xJQlMgPSAiLSR7QGQuZ2V0VmFyKCdQVicsMSlbOi0yXX0uc28iCitGSUxFU19TT0xJQlNERVYgPSAiJHtsaWJkaXJ9L2xpYmtjb25maWctcGFyc2VyLnNvIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC0yLjQuNi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wtMi40LjYuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NzdjNzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wtMi40LjYuaW5jCkBAIC0wLDAgKzEsNDUgQEAKK1NVTU1BUlkgPSAiR2VuZXJpYyBsaWJyYXJ5IHN1cHBvcnQgc2NyaXB0IgorREVTQ1JJUFRJT04gPSAiVGhpcyBpcyBHTlUgbGlidG9vbCwgYSBnZW5lcmljIGxpYnJhcnkgc3VwcG9ydCBzY3JpcHQuIFwKK0xpYnRvb2wgaGlkZXMgdGhlIGNvbXBsZXhpdHkgb2YgZ2VuZXJhdGluZyBzcGVjaWFsIGxpYnJhcnkgdHlwZXMgXAorKHN1Y2ggYXMgc2hhcmVkIGxpYnJhcmllcykgYmVoaW5kIGEgY29uc2lzdGVudCBpbnRlcmZhY2UuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYnRvb2wvbGlidG9vbC5odG1sIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICBmaWxlOi8vbGlibHRkbC9DT1BZSU5HLkxJQjttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vbGlidG9vbC9saWJ0b29sLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly90cmFpbGluZ3NsYXNoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlbmFtZS13aXRoLXN5c3Jvb3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdXNlLXN5c3Jvb3QtaW4tbGlicGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtZmluYWwtcnBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LXJwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25vcm0tcnBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LXJlc29sdmUtbHQtc3lzcm9vdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ub2hhcmRjb2RlcGF0aHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdW53aW5kLW9wdC1wYXJzaW5nLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhZGRmNDRiNjQ2ZGRiNGUzOTE5ODA1YWE4OGZhN2M1ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlM2JkNGQ1ZDNkMDI1YTM2YzIxZGQ2YWY3ZWE4MThhMmFmY2Q0ZGZjMWVhNWExN2IzOWQ3ODU0YmNkMGMwNmUzIgorCitkb19jb21waWxlX3ByZXBlbmQgKCkgeworCSMgU29tZXRpbWVzIHRoaXMgZmlsZSBkb2Vzbid0IGdldCByZWJ1aWx0LCBmb3JjZSB0aGUgaXNzdWUKKwlybSAtZiAke1N9L2J1aWxkLWF1eC9sdG1haW4uc2gKKwltYWtlIGJ1aWxkLWF1eC9sdG1haW4uc2gKKwkuL2NvbmZpZy5zdGF0dXMKK30KKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworRVhUUkFfQVVUT1JFQ09ORiA9ICItLWV4Y2x1ZGU9bGlidG9vbGl6ZSIKKworREVQRU5EUyA9ICJsaWJ0b29sLW5hdGl2ZSIKKworUEFDS0FHRVMgPSsgImxpYmx0ZGwiCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9hY2xvY2FsIgorCitGSUxFU18ke1BOfS1kZXZfcmVtb3ZlID0gIiR7ZGF0YWRpcn0vYWNsb2NhbCIKK0ZJTEVTX2xpYmx0ZGwgPSAiJHtsaWJkaXJ9L2xpYmx0ZGwke1NPTElCU30iCisKK2V4cG9ydCBDT05GSUdfU0hFTEw9Ii9iaW4vYmFzaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC1jcm9zc18yLjQuNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC1jcm9zc18yLjQuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDc4ODAyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sLWNyb3NzXzIuNC42LmJiCkBAIC0wLDAgKzEsNDEgQEAKK3JlcXVpcmUgbGlidG9vbC0ke1BWfS5pbmMKKworUEFDS0FHRVMgPSAiIgorU1JDX1VSSSArPSAiZmlsZTovL3ByZWZpeC5wYXRjaCIKK1NSQ19VUkkgKz0gImZpbGU6Ly9maXhpbnN0YWxsLnBhdGNoIgorCitkYXRhZGlyID0gIiR7U1RBR0lOR19ESVJfVEFSR0VUfSR7dGFyZ2V0X2RhdGFkaXJ9IgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyBSZW1vdmUgYW55IGV4aXN0aW5nIGxpYnRvb2wgbTQgc2luY2Ugb2xkIHN0YWxlIHZlcnNpb25zIHdvdWxkIGJyZWFrCisJIyBhbnkgdXBncmFkZQorCXJtIC1mICR7U1RBR0lOR19EQVRBRElSfS9hY2xvY2FsL2xpYnRvb2wubTQKKwlybSAtZiAke1NUQUdJTkdfREFUQURJUn0vYWNsb2NhbC9sdCoubTQKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS8KKwlpbnN0YWxsIC1tIDA3NTUgJHtIT1NUX1NZU30tbGlidG9vbCAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS8ke0hPU1RfU1lTfS1saWJ0b29sCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS8KKwlHUkVQPScvYmluL2dyZXAnIFNFRD0nc2VkJyAke1N9L2J1aWxkLWF1eC9pbmxpbmUtc291cmNlIGxpYnRvb2xpemUgPiAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9saWJ0b29saXplCisJY2htb2QgMDc1NSAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9saWJ0b29saXplCisJaW5zdGFsbCAtZCAke0R9JHt0YXJnZXRfZGF0YWRpcn0vbGlidG9vbC9idWlsZC1hdXgvCisJaW5zdGFsbCAtZCAke0R9JHt0YXJnZXRfZGF0YWRpcn0vYWNsb2NhbC8KKwlpbnN0YWxsIC1jICR7U30vYnVpbGQtYXV4L2NvbXBpbGUgJHtEfSR7dGFyZ2V0X2RhdGFkaXJ9L2xpYnRvb2wvYnVpbGQtYXV4LworCWluc3RhbGwgLWMgJHtTfS9idWlsZC1hdXgvY29uZmlnLmd1ZXNzICR7RH0ke3RhcmdldF9kYXRhZGlyfS9saWJ0b29sL2J1aWxkLWF1eC8KKwlpbnN0YWxsIC1jICR7U30vYnVpbGQtYXV4L2NvbmZpZy5zdWIgJHtEfSR7dGFyZ2V0X2RhdGFkaXJ9L2xpYnRvb2wvYnVpbGQtYXV4LworCWluc3RhbGwgLWMgJHtTfS9idWlsZC1hdXgvZGVwY29tcCAke0R9JHt0YXJnZXRfZGF0YWRpcn0vbGlidG9vbC9idWlsZC1hdXgvCisJaW5zdGFsbCAtYyAke1N9L2J1aWxkLWF1eC9pbnN0YWxsLXNoICR7RH0ke3RhcmdldF9kYXRhZGlyfS9saWJ0b29sL2J1aWxkLWF1eC8KKwlpbnN0YWxsIC1jICR7U30vYnVpbGQtYXV4L21pc3NpbmcgJHtEfSR7dGFyZ2V0X2RhdGFkaXJ9L2xpYnRvb2wvYnVpbGQtYXV4LworCWluc3RhbGwgLWMgLW0gMDY0NCAke1N9L2J1aWxkLWF1eC9sdG1haW4uc2ggJHtEfSR7dGFyZ2V0X2RhdGFkaXJ9L2xpYnRvb2wvYnVpbGQtYXV4LworCWluc3RhbGwgLWMgLW0gMDY0NCAke1N9L200LyoubTQgJHtEfSR7dGFyZ2V0X2RhdGFkaXJ9L2FjbG9jYWwvCit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAibGlidG9vbGNyb3NzX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworbGlidG9vbGNyb3NzX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30gJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQorCXN5c3Jvb3Rfc3RhZ2VfZGlyICR7RH0ke3RhcmdldF9kYXRhZGlyfSAke1NZU1JPT1RfREVTVERJUn0ke3RhcmdldF9kYXRhZGlyfQorfQorCitTU1RBVEVfU0NBTl9GSUxFUyArPSAibGlidG9vbGl6ZSAqLWxpYnRvb2wiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wtbmF0aXZlXzIuNC42LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sLW5hdGl2ZV8yLjQuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzUyMThhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sLW5hdGl2ZV8yLjQuNi5iYgpAQCAtMCwwICsxLDIyIEBACityZXF1aXJlIGxpYnRvb2wtJHtQVn0uaW5jCisKK0RFUEVORFMgPSAiIgorCitTUkNfVVJJICs9ICJmaWxlOi8vcHJlZml4LnBhdGNoIgorCitpbmhlcml0IG5hdGl2ZQorCitFWFRSQV9PRUNPTkYgPSAiIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9OQVRJVkV9IgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyBSZW1vdmUgYW55IGV4aXN0aW5nIGxpYnRvb2wgbTQgc2luY2Ugb2xkIHN0YWxlIHZlcnNpb25zIHdvdWxkIGJyZWFrCisJIyBhbnkgdXBncmFkZQorCXJtIC1mICR7U1RBR0lOR19EQVRBRElSfS9hY2xvY2FsL2xpYnRvb2wubTQKKwlybSAtZiAke1NUQUdJTkdfREFUQURJUn0vYWNsb2NhbC9sdCoubTQKK30KKworZG9faW5zdGFsbCAoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1ICR7SE9TVF9TWVN9LWxpYnRvb2wgJHtEfSR7YmluZGlyfS8ke0hPU1RfU1lTfS1saWJ0b29sCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ0MDg0YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaApAQCAtMCwwICsxLDMwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK1VwZGF0ZWQgYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtNDA0LDIxICs0MDQsNiBAQCAkKG5vdGVzX3R4dCk6ICQobm90ZXNfdGV4aSkKKyAJJChBTV9WX0dFTikkKE1BS0VJTkZPKSAtUCAnJChzcmNkaXIpL2RvYycgLS1uby1oZWFkZXJzIFwKKyAJICAgICQoTUFLRUlORk9GTEFHUykgLW8gJyRAJyAnJChub3Rlc190ZXhpKScKKyAKKy1kaXN0X21hbjFfTUFOUwkJPSAkKGxpYnRvb2xfMSkgJChsaWJ0b29saXplXzEpCistTUFJTlRBSU5FUkNMRUFORklMRVMJKz0gJChkaXN0X21hbjFfTUFOUykKKy11cGRhdGVfbWFucyA9IFwKKy0gIFBBVEg9Ii4kKFBBVEhfU0VQQVJBVE9SKSQkUEFUSCI7IGV4cG9ydCBQQVRIOyBcCistICAkKEhFTFAyTUFOKSAtLW91dHB1dD0nJEAnCistCistIyBJdCdzIHdyb25nIHRvIG1ha2UgZGlzdHJpYnV0ZWQgZmlsZXMgKGUuZy4gJChsaWJ0b29sXzEpKSByZWx5IG9uCistIyBmaWxlcyBjcmVhdGVkIGluIHRoZSBidWlsZCB0cmVlLCBzbyBpbnN0ZWFkIHdlIHJlZ2VuZXJhdGUgdGhlCistIyBtYW51YWwgcGFnZXMgaWYgdGhlIHNvdXJjZXMgZm9yIHRoZSBidWlsZC10cmVlIGZpbGVzIHdlIHdhbnQgdG8KKy0jIHJ1biBoYXZlIGNoYW5nZWQuCistJChsaWJ0b29sXzEpOiAkKGx0bWFpbl9zaCkKKy0JJChBTV9WX0dFTikkKHVwZGF0ZV9tYW5zKSAtLWhlbHAtb3B0aW9uPS0taGVscC1hbGwgbGlidG9vbAorLSQobGlidG9vbGl6ZV8xKTogJChsaWJ0b29saXplX2luKQorLQkkKEFNX1ZfR0VOKSQodXBkYXRlX21hbnMpIGxpYnRvb2xpemUKKy0KKyAKKyAjIyAtLS0tLS0tLS0tLS0tICMjCisgIyMgSW5zdGFsbGF0aW9uLiAjIwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeC1maW5hbC1ycGF0aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9maXgtZmluYWwtcnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM5ZjhjYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9maXgtZmluYWwtcnBhdGgucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworRW5hbGJpbmcgc3lzcm9vdCBzdXBwb3J0IGV4cG9zZWQgYSBidWcgd2hlcmUgdGhlIGZpbmFsIGxpYnJhcnkKK2hhZCBhbiBSUEFUSCBlbmNvZGVkIGludG8gaXQgd2hpY2ggc3RpbGwgcG9pbnRlZCB0byB0aGUgc3lzcm9vdC4KK1RoaXMgd29ya3MgYXJvdW5kIHRoZSBpc3N1ZSB1bnRpbCBpdCBnZXRzIHNvcnRlZCBvdXQgdXBzdHJlYW0uCisKK0ZpeCBzdWdnZXN0ZWQgYnkgUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4KK1VwZGF0ZWQgYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2x0bWFpbi5pbiBiL2J1aWxkLWF1eC9sdG1haW4uaW4KKy0tLSBhL2J1aWxkLWF1eC9sdG1haW4uaW4KKysrKyBiL2J1aWxkLWF1eC9sdG1haW4uaW4KK0BAIC03NTY5LDkgKzc1NjksMTEgQEAgRU9GCisgCSAgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIiB8fCBycGF0aD0kY29tcGlsZV9ycGF0aCRycGF0aAorIAkgIGZvciBsaWJkaXIgaW4gJHJwYXRoOyBkbworIAkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisrCQkgIGZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorKwkJICBsaWJkaXI9JGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdAorKwkJICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRsaWJkaXIiCisrCQkgIGxpYmRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgCSAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorLQkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCistCQlsaWJkaXI9JGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdAorIAkJaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisgCQkgIGhhcmRjb2RlX2xpYmRpcnM9JGxpYmRpcgorIAkJZWxzZQorQEAgLTgzMDEsNiArODMwMywxMCBAQCBFT0YKKyAgICAgICBoYXJkY29kZV9saWJkaXJzPQorICAgICAgIGZvciBsaWJkaXIgaW4gJGNvbXBpbGVfcnBhdGggJGZpbmFsaXplX3JwYXRoOyBkbworIAlpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKysJICBmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKKysJICBsaWJkaXI9JGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdAorKwkgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGxpYmRpciIKKysJICBsaWJkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorIAkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorIAkgICAgaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisgCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9JGxpYmRpcgorQEAgLTgzNTIsNiArODM1OCwxMCBAQCBFT0YKKyAgICAgICBoYXJkY29kZV9saWJkaXJzPQorICAgICAgIGZvciBsaWJkaXIgaW4gJGZpbmFsaXplX3JwYXRoOyBkbworIAlpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKysJICBmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKKysJICBsaWJkaXI9JGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdAorKwkgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGxpYmRpciIKKysJICBsaWJkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorIAkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorIAkgICAgaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisgCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9JGxpYmRpcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeC1yZXNvbHZlLWx0LXN5c3Jvb3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZml4LXJlc29sdmUtbHQtc3lzcm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmQ5NTk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeC1yZXNvbHZlLWx0LXN5c3Jvb3QucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoaXMgcGF0Y2ggdXBkYXRlcyBsaWJ0b29sLm00IChhbmQgaXRzIG91dHB1dCkgdG8gcmVzb2x2ZSBhIHByb2JsZW0KK3dpdGggdmFyaWFibGUgJ2x0X3N5c3Jvb3QnIG5vdCBiZWluZyBwcm9wZXJseSB1cGRhdGVkIGlmIHRoZSBvcHRpb24KKyctLXdpdGhbLWxpYnRvb2xdLXN5c3Jvb3QnIGlzIG5vdCBwcm92aWRlZCB3aGVuIHJ1bm5pbmcgdGhlICdjb25maWd1cmUnCitzY3JpcHQgZm9yIGEgcGFja2FnZS4KKworSSBoYXZlIGFsc28gcmVwb3J0ZWQgdGhlIHByb2JsZW0gdG8gbGlidG9vbCBoZXJlCisKK2h0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctbGlidG9vbC8yMDEzLTA5L21zZzAwMDA1Lmh0bWwKKworU2lnbmVkLW9mZi1ieTogSGFucyBCZWNrZXJ1cyA8aGFucy5iZWNrZXJ1cyBhdCBnbWFpbC5jb20+CitVcGRhdGVkIGJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorZGlmZiAtLWdpdCBhL200L2xpYnRvb2wubTQgYi9tNC9saWJ0b29sLm00CistLS0gYS9tNC9saWJ0b29sLm00CisrKysgYi9tNC9saWJ0b29sLm00CitAQCAtMTIyNSwxNiArMTIyNSwyMSBAQCBkbmwgbHRfc3lzcm9vdCB3aWxsIGFsd2F5cyBiZSBwYXNzZWQgdW5xdW90ZWQuICBXZSBxdW90ZSBpdCBoZXJlCisgZG5sIGluIGNhc2UgdGhlIHVzZXIgcGFzc2VkIGEgZGlyZWN0b3J5IG5hbWUuCisgbHRfc3lzcm9vdD0KKyBjYXNlICR3aXRoX2xpYnRvb2xfc3lzcm9vdCBpbiAjKAorLSB5ZXMpCisrIG5vKQorICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisgICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorKyAgICAgIyBUcmVhdCAiLyIgdGhlIHNhbWUgYSBhbiB1bnNldCBzeXNyb290LiBJdCBzZWVtcyB0byBiZSBtb3JlCisrICAgICAjIGNvbXBhdGlibGUgYWNyb3NzIGhvc3QgcGxhdGZvcm1zIHRoYXQgd2F5IT8KKysgICAgIGlmIHRlc3QgIiRsdF9zeXNyb290IiA9IC87IHRoZW4KKysgICAgICAgbHRfc3lzcm9vdD0KKysgICAgIGZpCisgICAgZmkKKyAgICA7OyAjKAorKyB5ZXN8Jyd8LykKKysgICA7OyAjKAorICAvKikKKyAgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9saWJ0b29sX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICA7OyAjKAorLSBub3wnJykKKy0gICA7OyAjKAorICAqKQorICAgIEFDX01TR19SRVNVTFQoWyR3aXRoX2xpYnRvb2xfc3lzcm9vdF0pCisgICAgQUNfTVNHX0VSUk9SKFtUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9maXgtcnBhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZml4LXJwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZWM5NDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZml4LXJwYXRoLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK1dlIGRvbid0IHdhbnQgdG8gYWRkIFJQQVRIUyB3aGljaCBtYXRjaCBkZWZhdWx0IGxpbmtlcgorc2VhcmNoIHBhdGhzLCB0aGV5J3JlIGEgd2FzdGUgb2Ygc3BhY2UuIFRoaXMgcGF0Y2gKK2ZpbHRlcnMgbGlidG9vbHMgbGlzdCBhbmQgcmVtb3ZlcyB0aGUgb25lcyB3ZSBkb24ndCBuZWVkLgorCitSUCAyMy85LzIwMTEKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1VwZGF0ZWQgYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitJbmRleDogbGlidG9vbC0yLjQuMi9idWlsZC1hdXgvbHRtYWluLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlidG9vbC0yLjQuMi5vcmlnL2J1aWxkLWF1eC9sdG1haW4uaW4KKysrKyBsaWJ0b29sLTIuNC4yL2J1aWxkLWF1eC9sdG1haW4uaW4KK0BAIC03Mjg2LDggKzcyODYsMTQgQEAgRU9GCisgCQkgIGVzYWMKKyAJCWZpCisgCSAgICAgIGVsc2UKKy0JCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKy0JCWZ1bmNfYXBwZW5kIGRlcF9ycGF0aCAiICRmbGFnIgorKyAgICAgICAgICAgICAgICAjIFdlIG9ubHkgd2FudCB0byBoYXJkY29kZSBpbiBhbiBycGF0aCBpZiBpdCBpc24ndCBpbiB0aGUKKysgICAgICAgICAgICAgICAgIyBkZWZhdWx0IGRsc2VhcmNoIHBhdGguCisrCSAgICAgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorKwkgICAgICAgICoiICRsaWJkaXIgIiopIDs7CisrCSAgICAgICAgKikgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKyAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBkZXBfcnBhdGggIiAkZmxhZyIKKysgICAgICAgICAgICAgICAgICAgOzsKKysJICAgICAgICBlc2FjCisgCSAgICAgIGZpCisgCSAgICBlbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKyAJICAgICAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorQEAgLTgwMTksOCArODAyNSwxNCBAQCBFT0YKKyAJICAgICAgZXNhYworIAkgICAgZmkKKyAJICBlbHNlCistCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCistCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgorKyAgICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGhhcmRjb2RlIGluIGFuIHJwYXRoIGlmIGl0IGlzbid0IGluIHRoZQorKyAgICAgICAgICAgICMgZGVmYXVsdCBkbHNlYXJjaCBwYXRoLgorKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorKwkgICAgKiIgJGxpYmRpciAiKikgOzsKKysJICAgICopIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysgICAgICAgICAgICAgICBycGF0aCs9IiAkZmxhZyIKKysgICAgICAgICAgICAgICA7OworKwkgICAgZXNhYworIAkgIGZpCisgCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorIAkgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KK0BAIC04MDcwLDggKzgwODIsMTQgQEAgRU9GCisgCSAgICAgIGVzYWMKKyAJICAgIGZpCisgCSAgZWxzZQorLQkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorLQkgICAgZnVuY19hcHBlbmQgcnBhdGggIiAkZmxhZyIKKysgICAgICAgICAgICAjIFdlIG9ubHkgd2FudCB0byBoYXJkY29kZSBpbiBhbiBycGF0aCBpZiBpdCBpc24ndCBpbiB0aGUKKysgICAgICAgICAgICAjIGRlZmF1bHQgZGxzZWFyY2ggcGF0aC4KKysJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKysJICAgICoiICRsaWJkaXIgIiopIDs7CisrCSAgICAqKSBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgcnBhdGggIiAkZmxhZyIKKysgICAgICAgICAgICAgICA7OworKwkgICAgZXNhYyAgICAKKyAJICBmaQorIAllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKyAJICBjYXNlICIkZmluYWxpemVfcGVybV9ycGF0aCAiIGluCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZml4aW5zdGFsbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9maXhpbnN0YWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMzQzYmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZml4aW5zdGFsbC5wYXRjaApAQCAtMCwwICsxLDEwMiBAQAorVGhlcmUgaXMgbm8gcG9pbnQgaW4gaGF2aW5nICJleGVjdXRhYmxlIiBiaW5hcmllcyBpbiB0aGUgLmxpYnMKK2RpcmVjdG9yeSBsaW5rZWQgd2l0aCBkaWZmZXJlbnQgcnBhdGhzIHRvIHRoZSB0YXJnZXQgd2hpY2ggCitjb3VsZCBjb25jaXZhYmx5IGJlIHJ1biBvbiB0aGUgYnVpbGQgc3lzdGVtIHdoZW4gY3Jvc3MgY29tcGlsaW5nLgorCitUaGlzIHBhdGNoIHJlbW92ZXMgdGhlIGV4dHJhIHJwYXRocyAoJGNvbXBpbGVfcnBhdGgpIHNvIHRoYXQgdGhlCitvdXRwdXQgZnJvbSB0aGUgImxpbmsiIHN0YWdlIGNhbiBiZSB1c2VkIG9uIHRoZSB0YXJnZXQuIFdlIGNhbiB0aGVuCithdm9pZCBoYXZpbmcgdG8gInJlbGluayIgZHVyaW5nIHRoZSBpbnN0YWxsIHN0YWdlLgorCitUaGlzIHNhdmVzIHNvbWUgYnVpbGQgdGltZSAoZG9faW5zdGFsbCBpcyBvdmVyIDIgbWludXRlcyBmYXN0ZXIgZm9yCitwdWxzZWF1ZGlvKS4KKworVGhpcyBwYXRjaCBhbHNvIHJlbW92ZXMgYW4gYW5ub3lpbmcgInNlZW1zIHRvIGJlIG1vdmVkIiB3YXJuaW5nCit3aGljaCBpcyB0b3RhbGx5IGJvZ3VzIGluIHRoZSBzeXNyb290IGNhc2UuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gYXJlIHVubGlrZWx5IHRvIHRha2UgYSBwYXRjaCBsaWtlIHRoaXNdCisKK1JQIDIwMTEvMTEvMTYKKworVXBkYXRlZCBieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9idWlsZC1hdXgvbHRtYWluLmluIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgorLS0tIGEvYnVpbGQtYXV4L2x0bWFpbi5pbgorKysrIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgorQEAgLTIzNTUsNyArMjM1NSw3IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgCWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorIAlmdW5jX2FwcGVuZCBkaXIgIiRvYmpkaXIiCisgCistCWlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKysJaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSBubyAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisgICAgICAgIyBTdHJpcCBhbnkgdHJhaWxpbmcgc2xhc2ggZnJvbSB0aGUgZGVzdGluYXRpb24uCisgICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkbGliZGlyIgorICAgICAgIGRlc3RsaWJkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorQEAgLTIzOTQsNyArMjM5NCw3IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgCSAgc2hpZnQKKyAKKyAJICBzcmNuYW1lPSRyZWFsbmFtZQorLQkgIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCIgJiYgc3JjbmFtZT0ke3JlYWxuYW1lfVQKKysJICB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IG5vICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCIgJiYgc3JjbmFtZT0iJHJlYWxuYW1lIlQKKyAKKyAJICAjIEluc3RhbGwgdGhlIHNoYXJlZCBsaWJyYXJ5IGFuZCBidWlsZCB0aGUgc3ltbGlua3MuCisgCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3NoYXJlZF9wcm9nICRkaXIvJHNyY25hbWUgJGRlc3RkaXIvJHJlYWxuYW1lIiBcCitAQCAtNjE2MiwxNSArNjE2MiwxNSBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoLgorIAkgICAgIyBTa2lwIGRpcmVjdG9yaWVzIHRoYXQgYXJlIGluIHRoZSBzeXN0ZW0gZGVmYXVsdCBydW4tdGltZQorIAkgICAgIyBzZWFyY2ggcGF0aC4KKy0JICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKy0JICAgICoiICRhYnNkaXIgIiopIDs7CistCSAgICAqKQorLQkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCistCSAgICAgICoiICRhYnNkaXIgIiopIDs7CistCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OworLQkgICAgICBlc2FjCistCSAgICAgIDs7CistCSAgICBlc2FjCisrCSAgICAjY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorKwkgICAgIyoiICRhYnNkaXIgIiopIDs7CisrCSAgICAjKikKKysJICAgICMgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKysJICAgICMgICoiICRhYnNkaXIgIiopIDs7CisrCSAgICAjICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3JwYXRoICIgJGFic2RpciIgOzsKKysJICAgICMgIGVzYWMKKysJICAgICMgIDs7CisrCSAgICAjZXNhYworIAkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorIAkgICAgKiIgJGxpYmRpciAiKikgOzsKKyAJICAgICopCitAQCAtNjIzNiwxNSArNjIzNiwxNSBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoLgorIAkgICAgIyBTa2lwIGRpcmVjdG9yaWVzIHRoYXQgYXJlIGluIHRoZSBzeXN0ZW0gZGVmYXVsdCBydW4tdGltZQorIAkgICAgIyBzZWFyY2ggcGF0aC4KKy0JICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKy0JICAgICoiICRhYnNkaXIgIiopIDs7CistCSAgICAqKQorLQkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCistCSAgICAgICoiICRhYnNkaXIgIiopIDs7CistCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OworLQkgICAgICBlc2FjCistCSAgICAgIDs7CistCSAgICBlc2FjCisrCSAgICAjY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorKwkgICAgIyoiICRhYnNkaXIgIiopIDs7CisrCSAgICAjKikKKysJICAgICMgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKysJICAgICMgICoiICRhYnNkaXIgIiopIDs7CisrCSAgICAjICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3JwYXRoICIgJGFic2RpciIgOzsKKysJICAgICMgIGVzYWMKKysJICAgICMgIDs7CisrCSAgICAjZXNhYworIAkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorIAkgICAgKiIgJGxpYmRpciAiKikgOzsKKyAJICAgICopCitAQCAtNjU5MCw4ICs2NTkwLDggQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJCSAgZXZhbCBsaWJkaXI9YCRTRUQgLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisgCQkgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKyAJCSAgICBmdW5jX2ZhdGFsX2Vycm9yICInJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorLQkJICB0ZXN0ICIkYWJzZGlyIiAhPSAiJGxpYmRpciIgJiYgXAorLQkJICAgIGZ1bmNfd2FybmluZyAiJyRkZXBsaWInIHNlZW1zIHRvIGJlIG1vdmVkIgorKwkJICAjdGVzdCAiJGFic2RpciIgIT0gIiRsaWJkaXIiICYmIFwKKysJCSAgIyAgZnVuY193YXJuaW5nICInJGRlcGxpYicgc2VlbXMgdG8gYmUgbW92ZWQiCisgCisgCQkgIHBhdGg9LUwkYWJzZGlyCisgCQlmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL25vaGFyZGNvZGVwYXRocy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9ub2hhcmRjb2RlcGF0aHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIyMzlmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9ub2hhcmRjb2RlcGF0aHMucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorSWYgZm9yIGV4YW1wbGUgeW91IGJ1aWxkIG9uIGEgbWFjaGluZSB3aXRoIC9iaW4vZ3JlcCwgdGhlbiByZXN0b3JlIHRoYXQgc3N0YXRlCitvbnRvIGEgbWFjaGluZSB3aXRoIC91c3IvYmluL2dyZXAsIHRoaW5ncyB3aWxsIGZhaWwuIFNpbXBseSBkb24ndCBib3RoZXIKK2hhcmRjb2RpbmcgcGF0aHMuCisKK1JQIDIwMTUvMi8zCisKK0luZGV4OiBsaWJ0b29sLTIuNC41L2xpYnRvb2xpemUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ0b29sLTIuNC41Lm9yaWcvbGlidG9vbGl6ZS5pbgorKysrIGxpYnRvb2wtMi40LjUvbGlidG9vbGl6ZS5pbgorQEAgLTQwLDExICs0MCwxMSBAQAorIAorIDogJHtBVVRPQ09ORj0iYXV0b2NvbmYifQorIDogJHtBVVRPTUFLRT0iYXV0b21ha2UifQorLTogJHtFR1JFUD0iQEVHUkVQQCJ9CistOiAke0ZHUkVQPSJARkdSRVBAIn0KKy06ICR7R1JFUD0iQEdSRVBAIn0KKy06ICR7TE5fUz0iQExOX1NAIn0KKy06ICR7U0VEPSJAU0VEQCJ9CisrOiAke0VHUkVQPSJlZ3JlcCJ9CisrOiAke0ZHUkVQPSJmZ3JlcCJ9CisrOiAke0dSRVA9ImdyZXAifQorKzogJHtMTl9TPSJsbiAtcyJ9CisrOiAke1NFRD0ic2VkIn0KKyAKKyAKKyAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL25vcm0tcnBhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvbm9ybS1ycGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTRjNjVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL25vcm0tcnBhdGgucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorbGlidG9vbDogbm9ybWFsaXplIGxpbmsgcGF0aHMgYmVmb3JlIGNvbnNpZGVyaW5nIGZvciBSUEFUSAorCitMaWJ0b29sIG1heSBiZSBwYXNzZWQgbGluayBwYXRocyBvZiB0aGUgZm9ybSAiL3Vzci9saWIvLi4vbGliIiwgd2hpY2gKK2Zvb2wgaXRzIGRldGVjdGlvbiBjb2RlIGludG8gdGhpbmtpbmcgaXQgc2hvdWxkIGJlIGluY2x1ZGVkIGFzIGFuCitSUEFUSCBpbiB0aGUgZ2VuZXJhdGVkIGJpbmFyeS4gIE5vcm1hbGl6ZSBiZWZvcmUgY29tcGFyaXNpb24uCisKK1NpZ25lZC1vZmYtYnk6IEFuZHkgUm9zcyA8YW5keS5yb3NzQHdpbmRyaXZlci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVXBkYXRlZCBieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLXVyIGEvYnVpbGQtYXV4L2x0bWFpbi5pbiBiL2J1aWxkLWF1eC9sdG1haW4uaW4KKy0tLSBhL2J1aWxkLWF1eC9sdG1haW4uaW4JMjAxMi0wOC0xNiAxMzo1ODo1NS4wNTg5MDAzNjMgLTA3MDAKKysrKyBiL2J1aWxkLWF1eC9sdG1haW4uaW4JMjAxMi0wOC0yMiAxMTowMTozNC4xOTEzNDU5ODkgLTA3MDAKK0BAIC03Mjg4LDggKzcyODgsMTAgQEAKKyAJICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAjIFdlIG9ubHkgd2FudCB0byBoYXJkY29kZSBpbiBhbiBycGF0aCBpZiBpdCBpc24ndCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgIyBkZWZhdWx0IGRsc2VhcmNoIHBhdGguCisrICAgICAgICAgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGggIiRsaWJkaXIiCisrICAgICAgICAgICAgICAgIGxpYmRpcl9ub3JtPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorIAkgICAgICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKy0JICAgICAgICAqIiAkbGliZGlyICIqKSA7OworKwkgICAgICAgICoiICRsaWJkaXJfbm9ybSAiKikgOzsKKyAJICAgICAgICAqKSBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIGRlcF9ycGF0aCAiICRmbGFnIgorICAgICAgICAgICAgICAgICAgICA7OworQEAgLTgwMjcsOCArODAyOSwxMCBAQAorIAkgIGVsc2UKKyAgICAgICAgICAgICAjIFdlIG9ubHkgd2FudCB0byBoYXJkY29kZSBpbiBhbiBycGF0aCBpZiBpdCBpc24ndCBpbiB0aGUKKyAgICAgICAgICAgICAjIGRlZmF1bHQgZGxzZWFyY2ggcGF0aC4KKysgICAgICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoICIkbGliZGlyIgorKyAgICAgICAgICAgIGxpYmRpcl9ub3JtPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorIAkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorLQkgICAgKiIgJGxpYmRpciAiKikgOzsKKysJICAgICoiICRsaWJkaXJfbm9ybSAiKikgOzsKKyAJICAgICopIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgICAgICAgICAgICBycGF0aCs9IiAkZmxhZyIKKyAgICAgICAgICAgICAgICA7OwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3ByZWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9wcmVmaXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTczZGYyZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9wcmVmaXgucGF0Y2gKQEAgLTAsMCArMSw5OCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworUmVuYW1lcyAibGlidG9vbCIgLT4gIiR7VEFSR0VUX1BSRUZJWH1saWJ0b29sIiB3aGljaCBtYWtlcyBzdXJlCitpdCBjYW4ndCBiZSBjb25mdXNlZCB3aXRoIHRoZSBob3N0IGxpYnRvb2wuCisKK09yaWdpbmFsbHkgYnk6IFJQCisKK1VwZGF0ZWQ6IERhdGU6IDIwMTAvMDYvMjgKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKK0l0IGFsc28gYWRqdXN0cyBsaWJ0b29sIHNvIHRoYXQgdGhlIGhlYWRlciBhdCB0aGUgc2NyaXB0IGlzIHVzZWQgZm9yIAorc2NyaXB0IGV4ZWN1dGlvbiBhbmQgbm90IHRoZXZhbHVlIG9mICRTSEVMTC4gVGhpcyBpcyBiZWNhdXNlIG1hbnkgCitNYWtlZmlsZXMgY2hhbmdlICRTSEVMTCBzbyBkYXNoIGNhbiBnZXQgdXNlZCB0byBleGVjdXRlIHdoYXQgaXMgCitvdGhlcndpc2UgY29uZmlndXJlZCBhcyBhIGJhc2ggc2hlbGwgc2NyaXB0LiBTaW5jZSB3ZSBkb24ndCBuZWVkIHRvIAorZXhlY3V0ZSBzY2lwdHMgdGhpcyB3YXkgb24gYW55IHN5c3RlbSBJJ20gYXdhcmUgb2YgdXMgYnVpbGRpbmcgdXBvbiwgCit0aGUgc2ltcGxlc3QgZml4IGlzIGp1c3QgdG8gcmVtb3ZlICRTSEVMTC4KKworVXBkYXRlZDogRGF0ZTogMjAxMS8xMS8wOQorUlAKKworVXBkYXRlZCBieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0zMSw3ICszMSw3IEBAIFNVQkRJUlMJCQk9IC4KKyBESVNUX1NVQkRJUlMJCT0gJChTVUJESVJTKQorIEVYVFJBX0RJU1QJCT0KKyAKKy1CVUlMVF9TT1VSQ0VTCQk9IGxpYnRvb2wgbGlidG9vbGl6ZQorK0JVSUxUX1NPVVJDRVMJCT0gJChob3N0X2FsaWFzKS1saWJ0b29sIGxpYnRvb2xpemUKKyAKKyBDTEVBTkZJTEVTCQk9CisgTU9TVExZQ0xFQU5GSUxFUwk9CitAQCAtNjcsNyArNjcsNyBAQCBidWlsZF9zY3JpcHRzCT0gJChzcmNkaXIpLyQoYXV4X2RpcikvYW5ub3VuY2UtZ2VuIFwKKyAKKyBFWFRSQV9ESVNUICAgICArPSBib290c3RyYXAgYm9vdHN0cmFwLmNvbmYgJChidWlsZF9zY3JpcHRzKSBjZmcubWsgbWFpbnQubWsgXAorIAkJICBHTlVtYWtlZmlsZQorLUNMRUFORklMRVMgICAgICs9IGxpYnRvb2wgbGlidG9vbGl6ZQorK0NMRUFORklMRVMgICAgICs9ICQoaG9zdF9hbGlhcyktbGlidG9vbCBsaWJ0b29saXplCisgCisgIyMgSWYgYSBmaWxlIGlzIG5hbWVkIHNldmVyYWwgdGltZXMgYmVsb3csIGFuZCBlc3BlY2lhbGx5IGlmIGl0CisgIyMgaXMgYSBkaXN0cmlidXRlZCBmaWxlIGNyZWF0ZWQgZHVyaW5nIExpYnRvb2wgYm9vdHN0cmFwLCB3ZQorQEAgLTI3Niw3ICsyNzYsNyBAQCBjb25maWd1cmVfZWRpdCA9ICQoYm9vdHN0cmFwX2VkaXQpIFwKKyAJLWUgJ3N8QHNyY2RpclxAfCQoc3JjZGlyKXxnJworIAorICMgVGhlIGxpYnRvb2wgZGlzdHJpYnV0b3IgYW5kIHRoZSBzdGFuZGFsb25lIGxpYnRvb2wgc2NyaXB0LgorLWJpbl9TQ1JJUFRTID0gbGlidG9vbAorK2Jpbl9TQ1JJUFRTID0gJChob3N0X2FsaWFzKS1saWJ0b29sCisgCisgbGlidG9vbGl6ZTogJChsaWJ0b29saXplX2luKSAkKGNvbmZpZ19zdGF0dXMpCisgCSQoQU1fVl9hdClybSAtZiAnJEAnCitAQCAtMjg3LDcgKzI4Nyw3IEBAIGxpYnRvb2xpemU6ICQobGlidG9vbGl6ZV9pbikgJChjb25maWdfc3RhdHVzKQorICMgV2UgdXNlZCB0byBkbyB0aGlzIHdpdGggYSAnc3RhbXAtdmNsJyBmaWxlLCBidXQgbm9uLWdtYWtlIGJ1aWxkcworICMgd291bGQgcmVydW4gY29uZmlndXJlIG9uIGV2ZXJ5IGludm9jYXRpb24sIHNvIG5vdyB3ZSBtYW51YWxseQorICMgY2hlY2sgdGhlIHZlcnNpb24gbnVtYmVycyBmcm9tIHRoZSBidWlsZCBydWxlIHdoZW4gbmVjZXNzYXJ5LgorLWxpYnRvb2w6ICQobHRtYWluX3NoKSAkKGNvbmZpZ19zdGF0dXMpICQoZG90dmVyc2lvbikKKyskKGhvc3RfYWxpYXMpLWxpYnRvb2w6ICQobHRtYWluX3NoKSAkKGNvbmZpZ19zdGF0dXMpICQoZG90dmVyc2lvbikKKyAJQCQocmVidWlsZCk7IFwKKyAJaWYgdGVzdCAtZiAnJEAnOyB0aGVuIFwKKyAJICBldmFsIGAnJChTRUQpJyAtbiAnL15wYWNrYWdlX3JldmlzaW9uPS9wJyAnJEAnYDsgXAorQEAgLTczMSwxMiArNzMxLDEyIEBAIFRFU1RTX0VOVklST05NRU5UID0gTUFLRT0iJChNQUtFKSIgQ0M9IiQoQ0MpIiBDRkxBR1M9IiQoQ0ZMQUdTKSIgXAorIAorIEJVSUxEQ0hFQ0tfRU5WSVJPTk1FTlQgPSBfbHRfcGtnZGF0YWRpcj0iJChhYnNfdG9wX3NyY2RpcikiIFwKKyAJTElCVE9PTElaRT0iJChhYnNfdG9wX2J1aWxkZGlyKS9saWJ0b29saXplIiBcCistCUxJQlRPT0w9IiQoYWJzX3RvcF9idWlsZGRpcikvbGlidG9vbCIgXAorKwlMSUJUT09MPSIkKGFic190b3BfYnVpbGRkaXIpLyQoaG9zdF9hbGlhcyktbGlidG9vbCIgXAorIAl0c3RfYWNsb2NhbGRpcj0iJChhYnNfdG9wX3NyY2RpcikvbTQiCisgCisgSU5TVEFMTENIRUNLX0VOVklST05NRU5UID0gXAorIAlMSUJUT09MSVpFPSIkKGJpbmRpcikvYGVjaG8gbGlidG9vbGl6ZSB8JChTRUQpICckKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpJ2AiIFwKKy0JTElCVE9PTD0iJChiaW5kaXIpL2BlY2hvIGxpYnRvb2wgfCQoU0VEKSAnJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKSdgIiBcCisrCUxJQlRPT0w9IiQoYmluZGlyKS9gZWNobyAkKGhvc3RfYWxpYXMpLWxpYnRvb2wgfCQoU0VEKSAnJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKSdgIiBcCisgCUxURExJTkNMPSItSSQoaW5jbHVkZWRpcikiIFwKKyAJTElCTFRETD0iJChsaWJkaXIpL2xpYmx0ZGwubGEiIFwKKyAJdHN0X2FjbG9jYWxkaXI9IiQoYWNsb2NhbGRpcikiCitkaWZmIC0tZ2l0IGEvbTQvbGlidG9vbC5tNCBiL200L2xpYnRvb2wubTQKKy0tLSBhL200L2xpYnRvb2wubTQKKysrKyBiL200L2xpYnRvb2wubTQKK0BAIC04Niw3ICs4Niw4IEBAIF9MVF9TRVRfT1BUSU9OUyhbJDBdLCBbJDFdKQorIExJQlRPT0xfREVQUz0kbHRtYWluCisgCisgIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KKy1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKytMSUJUT09MPSckKHRvcF9idWlsZGRpciknCisrTElCVE9PTD0iJExJQlRPT0wvJHtob3N0X2FsaWFzfS1saWJ0b29sIgorIEFDX1NVQlNUKExJQlRPT0wpZG5sCisgCisgX0xUX1NFVFVQCitAQCAtMTk5LDcgKzIwMCw3IEBAIGFpeDMqKQorIGVzYWMKKyAKKyAjIEdsb2JhbCB2YXJpYWJsZXM6Cistb2ZpbGU9bGlidG9vbAorK29maWxlPSR7aG9zdF9hbGlhc30tbGlidG9vbAorIGNhbl9idWlsZF9zaGFyZWQ9eWVzCisgCisgIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgJy5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvcmVuYW1lLXdpdGgtc3lzcm9vdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9yZW5hbWUtd2l0aC1zeXNyb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMmIxMTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvcmVuYW1lLXdpdGgtc3lzcm9vdC5wYXRjaApAQCAtMCwwICsxLDE2NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoaXMgcGF0Y2ggcmVuYW1lcyB0aGUgLS13aXRoLXN5c3Jvb3Qgb3B0aW9uIHRvIC0td2l0aC1saWJ0b29sLXN5c3Jvb3QKK3RvIGF2b2lkIG5hbWVzcGFjZSBjb25mbGljdCB3aXRoIGJpbnV0aWxzLCBnY2MgYW5kIG90aGVyIHRvb2xjaGFpbgorY29tcG9uZW50cy4KKworSSBhbHNvIHJlcG9ydGVkIHRoZSBwcm9ibGVtIHRvIGxpYnRvb2wgaGVyZQorCitodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvbGlidG9vbC8yMDEwLTEwL21zZzAwMDQ4Lmh0bWwKKworLUtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1VwZGF0ZWQgYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvbTQvbGlidG9vbC5tNCBiL200L2xpYnRvb2wubTQKKy0tLSBhL200L2xpYnRvb2wubTQKKysrKyBiL200L2xpYnRvb2wubTQKK0BAIC0xMjE1LDI4ICsxMjE1LDI4IEBAIF9MVF9ERUNMKFtdLCBbRUNIT10sIFsxXSwgW0FuIGVjaG8gcHJvZ3JhbSB0aGF0IHByb3RlY3RzIGJhY2tzbGFzaGVzXSkKKyAjIC0tLS0tLS0tLS0tLS0tLS0KKyBBQ19ERUZVTihbX0xUX1dJVEhfU1lTUk9PVF0sCisgW0FDX01TR19DSEVDS0lORyhbZm9yIHN5c3Jvb3RdKQorLUFDX0FSR19XSVRIKFtzeXNyb290XSwKKy1bQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1zeXNyb290QDw6QD1ESVJAOj5AXSwKKytBQ19BUkdfV0lUSChbbGlidG9vbC1zeXNyb290XSwKKytbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1saWJ0b29sLXN5c3Jvb3RAPDpAPURJUkA6PkBdLAorICAgW1NlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290CisgICAgaWYgbm90IHNwZWNpZmllZCkuXSldLAorLVtdLCBbd2l0aF9zeXNyb290PW5vXSkKKytbXSwgW3dpdGhfbGlidG9vbF9zeXNyb290PW5vXSkKKyAKKyBkbmwgbHRfc3lzcm9vdCB3aWxsIGFsd2F5cyBiZSBwYXNzZWQgdW5xdW90ZWQuICBXZSBxdW90ZSBpdCBoZXJlCisgZG5sIGluIGNhc2UgdGhlIHVzZXIgcGFzc2VkIGEgZGlyZWN0b3J5IG5hbWUuCisgbHRfc3lzcm9vdD0KKy1jYXNlICR3aXRoX3N5c3Jvb3QgaW4gIygKKytjYXNlICR3aXRoX2xpYnRvb2xfc3lzcm9vdCBpbiAjKAorICB5ZXMpCisgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisgICAgZmkKKyAgICA7OyAjKAorICAvKikKKy0gICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgOzsgIygKKyAgbm98JycpCisgICAgOzsgIygKKyAgKikKKy0gICBBQ19NU0dfUkVTVUxUKFskd2l0aF9zeXNyb290XSkKKysgICBBQ19NU0dfUkVTVUxUKFskd2l0aF9saWJ0b29sX3N5c3Jvb3RdKQorICAgIEFDX01TR19FUlJPUihbVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLl0pCisgICAgOzsKKyBlc2FjCitkaWZmIC0tZ2l0IGEvdGVzdHMvc3lzcm9vdC5hdCBiL3Rlc3RzL3N5c3Jvb3QuYXQKKy0tLSBhL3Rlc3RzL3N5c3Jvb3QuYXQKKysrKyBiL3Rlc3RzL3N5c3Jvb3QuYXQKK0BAIC02NCw3ICs2NCw3IEBAIHdoaWxlIHJlYWQgZmlsZTsgZG8KKyBkb25lXSkKKyAKKyBMREZMQUdTPSIkTERGTEFHUyAtLXN5c3Jvb3Q9JHN5c3Jvb3QgLW5vLXVuZGVmaW5lZCIKKy1jb25maWd1cmVfb3B0aW9ucz0iJGNvbmZpZ3VyZV9vcHRpb25zIC0td2l0aC1zeXNyb290PSRzeXNyb290IC0tcHJlZml4PSRwcmVmaXgiCisrY29uZmlndXJlX29wdGlvbnM9IiRjb25maWd1cmVfb3B0aW9ucyAtLXdpdGgtbGlidG9vbC1zeXNyb290PSRzeXNyb290IC0tcHJlZml4PSRwcmVmaXgiCisgCisgIz8/PworIGlmIHRlc3QgUEFUSCA9ICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KK0BAIC0xMTQsNyArMTE0LDcgQEAgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisgQUNfUFJPR19DQworIEFDX0NPTkZJR19TUkNESVIoW2xpYjIuY10pCisgTFRfSU5JVAorLXN5c3Jvb3Q9JHdpdGhfc3lzcm9vdAorK3N5c3Jvb3Q9JHdpdGhfbGlidG9vbF9zeXNyb290CisgQUNfU1VCU1QoW3N5c3Jvb3RdKQorIEFDX09VVFBVVChNYWtlZmlsZSkKKyBdXSkKK0BAIC0xNTUsNyArMTU1LDcgQEAgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisgQUNfUFJPR19DQworIEFDX0NPTkZJR19TUkNESVIoW3Byb2cuY10pCisgTFRfSU5JVAorLXN5c3Jvb3Q9JHdpdGhfc3lzcm9vdAorK3N5c3Jvb3Q9JHdpdGhfbGlidG9vbF9zeXNyb290CisgQUNfU1VCU1QoW3N5c3Jvb3RdKQorIEFDX09VVFBVVChNYWtlZmlsZSkKKyBdXSkKK2RpZmYgLS1naXQgYS90ZXN0cy90ZXN0c3VpdGUgYi90ZXN0cy90ZXN0c3VpdGUKKy0tLSBhL3Rlc3RzL3Rlc3RzdWl0ZQorKysrIGIvdGVzdHMvdGVzdHN1aXRlCitAQCAtNDg5NDUsNyArNDg5NDUsNyBAQCAkYXRfdHJhY2VvbjsgfQorIAorIAorIExERkxBR1M9IiRMREZMQUdTIC0tc3lzcm9vdD0kc3lzcm9vdCAtbm8tdW5kZWZpbmVkIgorLWNvbmZpZ3VyZV9vcHRpb25zPSIkY29uZmlndXJlX29wdGlvbnMgLS13aXRoLXN5c3Jvb3Q9JHN5c3Jvb3QgLS1wcmVmaXg9JHByZWZpeCIKKytjb25maWd1cmVfb3B0aW9ucz0iJGNvbmZpZ3VyZV9vcHRpb25zIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9JHN5c3Jvb3QgLS1wcmVmaXg9JHByZWZpeCIKKyAKKyAjPz8/CisgaWYgdGVzdCBQQVRIID0gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorQEAgLTQ5MTU0LDcgKzQ5MTU0LDcgQEAgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisgQUNfUFJPR19DQworIEFDX0NPTkZJR19TUkNESVIoW2xpYjIuY10pCisgTFRfSU5JVAorLXN5c3Jvb3Q9JHdpdGhfc3lzcm9vdAorK3N5c3Jvb3Q9JHdpdGhfbGlidG9vbF9zeXNyb290CisgQUNfU1VCU1QoW3N5c3Jvb3RdKQorIEFDX09VVFBVVChNYWtlZmlsZSkKKyBfQVRFT0YKK0BAIC00OTM0Miw3ICs0OTM0Miw3IEBAIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ25dKQorIEFDX1BST0dfQ0MKKyBBQ19DT05GSUdfU1JDRElSKFtwcm9nLmNdKQorIExUX0lOSVQKKy1zeXNyb290PSR3aXRoX3N5c3Jvb3QKKytzeXNyb290PSR3aXRoX2xpYnRvb2xfc3lzcm9vdAorIEFDX1NVQlNUKFtzeXNyb290XSkKKyBBQ19PVVRQVVQoTWFrZWZpbGUpCisgX0FURU9GCitAQCAtNDk2OTQsNyArNDk2OTQsNyBAQCAkYXRfdHJhY2VvbjsgfQorIAorIAorIExERkxBR1M9IiRMREZMQUdTIC0tc3lzcm9vdD0kc3lzcm9vdCAtbm8tdW5kZWZpbmVkIgorLWNvbmZpZ3VyZV9vcHRpb25zPSIkY29uZmlndXJlX29wdGlvbnMgLS13aXRoLXN5c3Jvb3Q9JHN5c3Jvb3QgLS1wcmVmaXg9JHByZWZpeCIKKytjb25maWd1cmVfb3B0aW9ucz0iJGNvbmZpZ3VyZV9vcHRpb25zIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9JHN5c3Jvb3QgLS1wcmVmaXg9JHByZWZpeCIKKyAKKyAjPz8/CisgaWYgdGVzdCBQQVRIID0gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorQEAgLTQ5OTAzLDcgKzQ5OTAzLDcgQEAgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisgQUNfUFJPR19DQworIEFDX0NPTkZJR19TUkNESVIoW2xpYjIuY10pCisgTFRfSU5JVAorLXN5c3Jvb3Q9JHdpdGhfc3lzcm9vdAorK3N5c3Jvb3Q9JHdpdGhfbGlidG9vbF9zeXNyb290CisgQUNfU1VCU1QoW3N5c3Jvb3RdKQorIEFDX09VVFBVVChNYWtlZmlsZSkKKyBfQVRFT0YKK0BAIC01MDA5MSw3ICs1MDA5MSw3IEBAIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ25dKQorIEFDX1BST0dfQ0MKKyBBQ19DT05GSUdfU1JDRElSKFtwcm9nLmNdKQorIExUX0lOSVQKKy1zeXNyb290PSR3aXRoX3N5c3Jvb3QKKytzeXNyb290PSR3aXRoX2xpYnRvb2xfc3lzcm9vdAorIEFDX1NVQlNUKFtzeXNyb290XSkKKyBBQ19PVVRQVVQoTWFrZWZpbGUpCisgX0FURU9GCitAQCAtNTA0NDMsNyArNTA0NDMsNyBAQCAkYXRfdHJhY2VvbjsgfQorIAorIAorIExERkxBR1M9IiRMREZMQUdTIC0tc3lzcm9vdD0kc3lzcm9vdCAtbm8tdW5kZWZpbmVkIgorLWNvbmZpZ3VyZV9vcHRpb25zPSIkY29uZmlndXJlX29wdGlvbnMgLS13aXRoLXN5c3Jvb3Q9JHN5c3Jvb3QgLS1wcmVmaXg9JHByZWZpeCIKKytjb25maWd1cmVfb3B0aW9ucz0iJGNvbmZpZ3VyZV9vcHRpb25zIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9JHN5c3Jvb3QgLS1wcmVmaXg9JHByZWZpeCIKKyAKKyAjPz8/CisgaWYgdGVzdCBQQVRIID0gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorQEAgLTUwNjUyLDcgKzUwNjUyLDcgQEAgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisgQUNfUFJPR19DQworIEFDX0NPTkZJR19TUkNESVIoW2xpYjIuY10pCisgTFRfSU5JVAorLXN5c3Jvb3Q9JHdpdGhfc3lzcm9vdAorK3N5c3Jvb3Q9JHdpdGhfbGlidG9vbF9zeXNyb290CisgQUNfU1VCU1QoW3N5c3Jvb3RdKQorIEFDX09VVFBVVChNYWtlZmlsZSkKKyBfQVRFT0YKK0BAIC01MDg0MCw3ICs1MDg0MCw3IEBAIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ25dKQorIEFDX1BST0dfQ0MKKyBBQ19DT05GSUdfU1JDRElSKFtwcm9nLmNdKQorIExUX0lOSVQKKy1zeXNyb290PSR3aXRoX3N5c3Jvb3QKKytzeXNyb290PSR3aXRoX2xpYnRvb2xfc3lzcm9vdAorIEFDX1NVQlNUKFtzeXNyb290XSkKKyBBQ19PVVRQVVQoTWFrZWZpbGUpCisgX0FURU9GCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvdHJhaWxpbmdzbGFzaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC90cmFpbGluZ3NsYXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ODI0ZDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvdHJhaWxpbmdzbGFzaC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQSBjb21tYW5kIGxpa2UgL2Jpbi9zaCAuLi8uLi9pNTg2LXBva3ktbGludXgtbGlidG9vbCAgIC0tbW9kZT1pbnN0YWxsIC91c3IvYmluL2luc3RhbGwgLWMgICBnY2stcm9vdHMtc3RvcmUtc3RhbmRhbG9uZS5sYSAnL21lZGlhL2RhdGExL2J1aWxkcy9wb2t5MS90bXAvd29yay9jb3JlMi1wb2t5LWxpbnV4L2dub21lLWtleXJpbmctMi4yNi4xLXIxL2ltYWdlL3Vzci9saWIvZ25vbWUta2V5cmluZy9zdGFuZGFsb25lLycgZmFpbHMgKGUuZy4gZ25vbWUta2V5cmluZyBvciBwdWxzZWF1ZGlvKQorCitUaGlzIGlzIGJlY2F1c2UgbGliZGlyIGhhcyBhIHRyYWlsaW5nIHNsYXNoIHdoaWNoIGJyZWFrcyB0aGUgY29tcGFyaXNpb24uCisKK1JQIDIvMS8xMAorCitNZXJnZWQgYSBwYXRjaCByZWNlaXZlZCBmcm9tIEdhcnkgVGhvbWFzIDxnYXJ5QG1sYmFzc29jLmNvbT4KKworRGF0ZTogMjAxMC8wNy8xMgorTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworVXBkYXRlZCBieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9idWlsZC1hdXgvbHRtYWluLmluIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgorLS0tIGEvYnVpbGQtYXV4L2x0bWFpbi5pbgorKysrIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgorQEAgLTIzNTYsOCArMjM1NiwxNSBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQorIAlmdW5jX2FwcGVuZCBkaXIgIiRvYmpkaXIiCisgCisgCWlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKysgICAgICAjIFN0cmlwIGFueSB0cmFpbGluZyBzbGFzaCBmcm9tIHRoZSBkZXN0aW5hdGlvbi4KKysgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRsaWJkaXIiCisrICAgICAgZGVzdGxpYmRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrCisrICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkZGVzdGRpciIKKysgICAgICBzX2Rlc3RkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKworIAkgICMgRGV0ZXJtaW5lIHRoZSBwcmVmaXggdGhlIHVzZXIgaGFzIGFwcGxpZWQgdG8gb3VyIGZ1dHVyZSBkaXIuCistCSAgaW5zdF9wcmVmaXhfZGlyPWAkRUNITyAiJGRlc3RkaXIiIHwgJFNFRCAtZSAicyUkbGliZGlyXCQlJSJgCisrCSAgaW5zdF9wcmVmaXhfZGlyPWAkRUNITyAiWCRzX2Rlc3RkaXIiIHwgJFhzZWQgLWUgInMlJGRlc3RsaWJkaXJcJCUlImAKKyAKKyAJICAjIERvbid0IGFsbG93IHRoZSB1c2VyIHRvIHBsYWNlIHVzIG91dHNpZGUgb2Ygb3VyIGV4cGVjdGVkCisgCSAgIyBsb2NhdGlvbiBiL2MgdGhpcyBwcmV2ZW50cyBmaW5kaW5nIGRlcGVuZGVudCBsaWJyYXJpZXMgdGhhdApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3Vud2luZC1vcHQtcGFyc2luZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC91bndpbmQtb3B0LXBhcnNpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYzM2JjNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC91bndpbmQtb3B0LXBhcnNpbmcucGF0Y2gKQEAgLTAsMCArMSwxNzkgQEAKK0N1dCBhbmQgcGFzdGUgdGhlIHBpZWNlcyBvZiBidWlsZC1hdXgvb3B0aW9ucy1wYXJzZXIgaW5saW5lIGludG8gdGhlIG1haW4KK2x0bWFpbi5zaCBjb2RlLiBUaGlzIHJlbW92ZXMgYSBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBjYXVzZWQgYnkgdGhlIAorcmVwZWF0ZWQgY2FsbHMgdG8gZnVuY19xdW90ZV9mb3JfZXZhbCwgdGhlIG1lY2hhbmlzbSBmdW5jbGliIHVzZXMKK3RvIGNvbnN0cnVjdCB0aGUgZnVuY3Rpb25zIHVzZWQgZm9yIG9wdGlvbiBwYXJzaW5nLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbQmVpbmcgZGlzY3Vzc2VkIG9uIG1haWxpbmcgbGlzdCBGZWIgMjAxNV0KKworZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9sdG1haW4uaW4gYi9idWlsZC1hdXgvbHRtYWluLmluCitpbmRleCBkNWNmMDdhLi4wZjU0MzAzIDEwMDY0NAorLS0tIGEvYnVpbGQtYXV4L2x0bWFpbi5pbgorKysrIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgorQEAgLTM0MiwxMSArMzQyLDE1IEBAIF9MVF9FT0YKKyAjIGxpYnRvb2xfb3B0aW9uc19wcmVwIFtBUkddLi4uCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgUHJlcGFyYXRpb24gZm9yIG9wdGlvbnMgcGFyc2VkIGJ5IGxpYnRvb2wuCistbGlidG9vbF9vcHRpb25zX3ByZXAgKCkKKy17CisrI2xpYnRvb2xfb3B0aW9uc19wcmVwICgpCisrI3sKKyAgICAgJGRlYnVnX21vZGUKKyAKKyAgICAgIyBPcHRpb24gZGVmYXVsdHM6CisrICAgIG9wdF92ZXJib3NlPWZhbHNlCisrICAgIG9wdF93YXJuaW5nX3R5cGVzPQorKworKyAgICAjIE9wdGlvbiBkZWZhdWx0czoKKyAgICAgb3B0X2NvbmZpZz1mYWxzZQorICAgICBvcHRfZGxvcGVuPQorICAgICBvcHRfZHJ5X3J1bj1mYWxzZQorQEAgLTM4MiwxOSArMzg2LDE0IEBAIGxpYnRvb2xfb3B0aW9uc19wcmVwICgpCisgICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgdW5pbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKyAgICAgICA7OworICAgICBlc2FjCistCistICAgICMgUGFzcyBiYWNrIHRoZSBsaXN0IG9mIG9wdGlvbnMuCistICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9CistICAgIGxpYnRvb2xfb3B0aW9uc19wcmVwX3Jlc3VsdD0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKy19CistZnVuY19hZGRfaG9vayBmdW5jX29wdGlvbnNfcHJlcCBsaWJ0b29sX29wdGlvbnNfcHJlcAorKyN9CisgCisgCisgIyBsaWJ0b29sX3BhcnNlX29wdGlvbnMgW0FSR10uLi4KKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgUHJvdmlkZSBoYW5kbGluZyBmb3IgbGlidG9vbCBzcGVjaWZpYyBvcHRpb25zLgorLWxpYnRvb2xfcGFyc2Vfb3B0aW9ucyAoKQorLXsKKysjbGlidG9vbF9wYXJzZV9vcHRpb25zICgpCisrI3sKKyAgICAgJGRlYnVnX2NtZAorIAorICAgICAjIFBlcmZvcm0gb3VyIG93biBsb29wIHRvIGNvbnN1bWUgYXMgbWFueSBvcHRpb25zIGFzIHBvc3NpYmxlIGluCitAQCAtNDc0LDI5ICs0NzMsOTAgQEAgbGlidG9vbF9wYXJzZV9vcHRpb25zICgpCisgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRfR19vcHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAKKy0JIyBBbiBvcHRpb24gbm90IGhhbmRsZWQgYnkgdGhpcyBob29rIGZ1bmN0aW9uOgorLSAgICAgICAgKikJCXNldCBkdW1teSAiJF9HX29wdCIgJHsxKyIkQCJ9OwlzaGlmdDsgYnJlYWsgIDs7CistICAgICAgZXNhYworLSAgICBkb25lCisrICAgICAgICAtLWRlYnVnfC14KSAgIGRlYnVnX2NtZD0nc2V0IC14JworKyAgICAgICAgICAgICAgICAgICAgICBmdW5jX2VjaG8gImVuYWJsaW5nIHNoZWxsIHRyYWNlIG1vZGUiCisrICAgICAgICAgICAgICAgICAgICAgICRkZWJ1Z19jbWQKKysgICAgICAgICAgICAgICAgICAgICAgOzsKKyAKKysgICAgICAgIC0tbm8td2FybmluZ3N8LS1uby13YXJuaW5nfC0tbm8td2FybikKKysgICAgICAgICAgICAgICAgICAgICAgc2V0IGR1bW15IC0td2FybmluZ3Mgbm9uZSAkezErIiRAIn0KKysgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKysJCSAgICAgIDs7CisgCistICAgICMgc2F2ZSBtb2RpZmllZCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGNhbGxlcgorLSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICR7MSsiJEAifQorLSAgICBsaWJ0b29sX3BhcnNlX29wdGlvbnNfcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorLX0KKy1mdW5jX2FkZF9ob29rIGZ1bmNfcGFyc2Vfb3B0aW9ucyBsaWJ0b29sX3BhcnNlX29wdGlvbnMKKysgICAgICAgIC0td2FybmluZ3N8LS13YXJuaW5nfC1XKQorKyAgICAgICAgICAgICAgICAgICAgICB0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRfR19vcHQgJiYgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiICR3YXJuaW5nX2NhdGVnb3JpZXMgJDEiIGluCisrICAgICAgICAgICAgICAgICAgICAgICAgKiIgJDEgIiopCisrICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRyYWlsaW5nIHNwYWNlIHByZXZlbnRzIG1hdGNoaW5nIGxhc3QgJDEgYWJvdmUKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kX3VuaXEgb3B0X3dhcm5pbmdfdHlwZXMgIiAkMSIKKysgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgICAgICAgICAgKmFsbCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF93YXJuaW5nX3R5cGVzPSR3YXJuaW5nX2NhdGVnb3JpZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgICAgICAgICAgKm5vbmUpCisrICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfd2FybmluZ190eXBlcz1ub25lCisrICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nX2Z1bmM9OgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAgICAgICAqZXJyb3IpCisrICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfd2FybmluZ190eXBlcz0kd2FybmluZ19jYXRlZ29yaWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nX2Z1bmM9ZnVuY19mYXRhbF9lcnJvcgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAgICAgICAqKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19mYXRhbF9lcnJvciBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgd2FybmluZyBjYXRlZ29yeTogJyQxJyIKKysgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKysgICAgICAgICAgICAgICAgICAgICAgOzsKKysKKysgICAgICAgIC0tdmVyYm9zZXwtdikgb3B0X3ZlcmJvc2U9OiA7OworKyAgICAgICAgLS12ZXJzaW9uKSAgICBmdW5jX3ZlcnNpb24gOzsKKysgICAgICAgIC1cP3wtaCkgICAgICAgZnVuY191c2FnZSA7OworKyAgICAgICAgLS1oZWxwKSAgICAgICBmdW5jX2hlbHAgOzsKKysKKysJIyBTZXBhcmF0ZSBvcHRhcmdzIHRvIGxvbmcgb3B0aW9ucyAocGx1Z2lucyBtYXkgbmVlZCB0aGlzKToKKysJLS0qPSopICAgICAgICBmdW5jX3NwbGl0X2VxdWFscyAiJF9HX29wdCIKKysJICAgICAgICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X2VxdWFsc19saHMiIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICIkZnVuY19zcGxpdF9lcXVhbHNfcmhzIiAkezErIiRAIn0KKysgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKysgICAgICAgICAgICAgICAgICAgICAgOzsKKysKKysgICAgICAgIyBTZXBhcmF0ZSBvcHRhcmdzIHRvIHNob3J0IG9wdGlvbnM6CisrICAgICAgICAtVyopCisrICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0ICIkX0dfb3B0IgorKyAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyIgJHsxKyIkQCJ9CisrICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CisrICAgICAgICAgICAgICAgICAgICAgIDs7CisrCisrICAgICAgICAjIFNlcGFyYXRlIG5vbi1hcmd1bWVudCBzaG9ydCBvcHRpb25zOgorKyAgICAgICAgLVw/KnwtaCp8LXYqfC14KikKKysgICAgICAgICAgICAgICAgICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHQgIiRfR19vcHQiCisrICAgICAgICAgICAgICAgICAgICAgIHNldCBkdW1teSAiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUiIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICItJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyIgJHsxKyIkQCJ9CisrICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CisrICAgICAgICAgICAgICAgICAgICAgIDs7CisrCisrICAgICAgICAtLSkgICAgICAgICAgIGJyZWFrIDs7CisrICAgICAgICAtKikgICAgICAgICAgIGZ1bmNfZmF0YWxfaGVscCAidW5yZWNvZ25pc2VkIG9wdGlvbjogJyRfR19vcHQnIiA7OworKyAgICAgICAgKikgICAgICAgICAgICBzZXQgZHVtbXkgIiRfR19vcHQiICR7MSsiJEAifTsgc2hpZnQ7IGJyZWFrIDs7CisrICAgICAgZXNhYworKyAgICBkb25lCisrI30KKyAKKysjIERpc3BsYXkgYWxsIHdhcm5pbmdzIGlmIC1XIHdhcyBub3QgZ2l2ZW4uCisrdGVzdCAtbiAiJG9wdF93YXJuaW5nX3R5cGVzIiB8fCBvcHRfd2FybmluZ190eXBlcz0iICR3YXJuaW5nX2NhdGVnb3JpZXMiCisgCisgCisgIyBsaWJ0b29sX3ZhbGlkYXRlX29wdGlvbnMgW0FSR10uLi4KKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgUGVyZm9ybSBhbnkgc2FuaXR5IGNoZWNrcyBvbiBvcHRpb24gc2V0dGluZ3MgYW5kL29yIHVuY29uc3VtZWQKKyAjIGFyZ3VtZW50cy4KKy1saWJ0b29sX3ZhbGlkYXRlX29wdGlvbnMgKCkKKy17CisrI2xpYnRvb2xfdmFsaWRhdGVfb3B0aW9ucyAoKQorKyN7CisgICAgICMgc2F2ZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50CisgICAgIGlmIHRlc3QgMCAtbHQgJCM7IHRoZW4KKy0gICAgICBub25vcHQ9JDEKKysgICAgICBub25vcHQ9JF9HX29wdAorICAgICAgIHNoaWZ0CisgICAgIGZpCisgCitAQCAtNTM3LDIwICs1OTcsMTAgQEAgbGlidG9vbF92YWxpZGF0ZV9vcHRpb25zICgpCisgICAgICAgZ2VuZXJpY19oZWxwPSRoZWxwCisgICAgICAgaGVscD0iVHJ5ICckcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT0kb3B0X21vZGUnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyAgICAgfQorKyN9CisgCistICAgICMgUGFzcyBiYWNrIHRoZSB1bnBhcnNlZCBhcmd1bWVudCBsaXN0CistICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9CistICAgIGxpYnRvb2xfdmFsaWRhdGVfb3B0aW9uc19yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CistfQorLWZ1bmNfYWRkX2hvb2sgZnVuY192YWxpZGF0ZV9vcHRpb25zIGxpYnRvb2xfdmFsaWRhdGVfb3B0aW9ucworLQorLQorLSMgUHJvY2VzcyBvcHRpb25zIGFzIGVhcmx5IGFzIHBvc3NpYmxlIHNvIHRoYXQgLS1oZWxwIGFuZCAtLXZlcnNpb24KKy0jIGNhbiByZXR1cm4gcXVpY2tseS4KKy1mdW5jX29wdGlvbnMgJHsxKyIkQCJ9CistZXZhbCBzZXQgZHVtbXkgIiRmdW5jX29wdGlvbnNfcmVzdWx0Ijsgc2hpZnQKKy0KKy0KKysjIEJhaWwgaWYgdGhlIG9wdGlvbnMgd2VyZSBzY3Jld2VkIQorKyRleGl0X2NtZCAkRVhJVF9GQUlMVVJFCisgCisgIyMgLS0tLS0tLS0tLS0gIyMKKyAjIyAgICBNYWluLiAgICAjIwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3VzZS1zeXNyb290LWluLWxpYnBhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvdXNlLXN5c3Jvb3QtaW4tbGlicGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWY5OWYzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3VzZS1zeXNyb290LWluLWxpYnBhdGgucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1doZW4gdXNpbmcgc3lzcm9vdCB3ZSBzaG91bGQgYXBwZW5kIGl0IHRvIGxpYmRpciwgd2hpY2ggaXMgaGVscGZ1bCBpbgorY3Jvc3MgYnVpbGRzIGFzIHRoZSBzeXN0ZW0gaXMgc3RhZ2VkIGluIHRoZSBzeXNyb290LiBGb3Igbm9ybWFsIGJ1aWxkcywKK2kuZS4gd2hlbiBsdF9zeXNyb290IGlzIG5vdCBzZXQsIGl0IHdpbGwgc3RpbGwgYmVoYXZlIHRoZSBzYW1lIGFuZCBhZGQKKy1ML3Vzci9saWIgdG8gdGhlIHJlbGluayBjb21tYW5kLgorCistS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1VwZGF0ZWQgYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2x0bWFpbi5pbiBiL2J1aWxkLWF1eC9sdG1haW4uaW4KKy0tLSBhL2J1aWxkLWF1eC9sdG1haW4uaW4KKysrKyBiL2J1aWxkLWF1eC9sdG1haW4uaW4KK0BAIC02NDIxLDcgKzY0MjEsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgICBmaQorIAkgICAgZWxzZQorIAkgICAgICAjIFdlIGNhbm5vdCBzZWVtIHRvIGhhcmRjb2RlIGl0LCBndWVzcyB3ZSdsbCBmYWtlIGl0LgorLQkgICAgICBhZGRfZGlyPS1MJGxpYmRpcgorKwkgICAgICBhZGRfZGlyPSItTCRsdF9zeXNyb290JGxpYmRpciIKKyAJICAgICAgIyBUcnkgbG9va2luZyBmaXJzdCBpbiB0aGUgbG9jYXRpb24gd2UncmUgYmVpbmcgaW5zdGFsbGVkIHRvLgorIAkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorIAkJY2FzZSAkbGliZGlyIGluCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2xfMi40LjYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2xfMi40LjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVmMWIyZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbF8yLjQuNi5iYgpAQCAtMCwwICsxLDI2IEBACityZXF1aXJlIGxpYnRvb2wtJHtQVn0uaW5jCisKK1JERVBFTkRTXyR7UE59ICs9ICJiYXNoIgorCisjCisjIFdlIHdhbnQgdGhlIHJlc3VsdHMgb2YgbGlidG9vbC1jcm9zcyBwcmVzZXJ2ZWQgLSBkb24ndCBzdGFnZSBhbnl0aGluZyBvdXJzZWx2ZXMuCisjCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImxpYnRvb2xfc3lzcm9vdF9wcmVwcm9jZXNzIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgICAgIHNlZCAtZSAnc0AtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9IT1NUfUBAZycgXAorICAgICAgICAgICAgLWUgJ3NAJHtTVEFHSU5HX0RJUl9IT1NUfUBAZycgXAorICAgICAgICAgICAgLWUgJ3NAXlwoc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSJcKS4qQFwxJHtsaWJkaXJ9ICR7YmFzZV9saWJkaXJ9IkAnIFwKKyAgICAgICAgICAgIC1lICdzQF5cKGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycz0iXCkuKkBcMSR7bGliZGlyfSAke2Jhc2VfbGliZGlyfSJAJyBcCisgICAgICAgICAgICAtZSAnc0BeXChjb21waWxlcl9saWJfc2VhcmNoX3BhdGg9IlwpLipAXDEke2xpYmRpcn0gJHtiYXNlX2xpYmRpcn0iQCcgXAorICAgICAgICAgICAgLWUgJ3NAXlwocHJlZGVwX29iamVjdHM9IlwpLipAXDEiQCcgXAorICAgICAgICAgICAgLWUgJ3NAXlwocG9zdGRlcF9vYmplY3RzPSJcKS4qQFwxIkAnIFwKKyAgICAgICAgICAgIC1pICR7RH0ke2JpbmRpcn0vbGlidG9vbAorfQorCitsaWJ0b29sX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJcm0gLXJmICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyfS8qCisJcm0gLXJmICR7U1lTUk9PVF9ERVNURElSfSR7ZGF0YWRpcn0vYWNsb2NhbC8qCisJcm0gLXJmICR7U1lTUk9PVF9ERVNURElSfSR7ZGF0YWRpcn0vbGlidG9vbC9idWlsZC1hdXgvKgorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL25hdGl2ZXNkay1saWJ0b29sXzIuNC42LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9uYXRpdmVzZGstbGlidG9vbF8yLjQuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDhlYWRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9uYXRpdmVzZGstbGlidG9vbF8yLjQuNi5iYgpAQCAtMCwwICsxLDMxIEBACityZXF1aXJlIGxpYnRvb2wtJHtQVn0uaW5jCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L2xpYnRvb2w6IgorCitTUkNfVVJJICs9ICJmaWxlOi8vcHJlZml4LnBhdGNoIgorU1JDX1VSSSArPSAiZmlsZTovL2ZpeGluc3RhbGwucGF0Y2giCisKK2luaGVyaXQgbmF0aXZlc2RrCisKK1MgPSAiJHtXT1JLRElSfS9saWJ0b29sLSR7UFZ9IgorRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vbGlidG9vbC8qIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyBSZW1vdmUgYW55IGV4aXN0aW5nIGxpYnRvb2wgbTQgc2luY2Ugb2xkIHN0YWxlIHZlcnNpb25zIHdvdWxkIGJyZWFrCisJIyBhbnkgdXBncmFkZQorCXJtIC1mICR7U1RBR0lOR19EQVRBRElSfS9hY2xvY2FsL2xpYnRvb2wubTQKKwlybSAtZiAke1NUQUdJTkdfREFUQURJUn0vYWNsb2NhbC9sdCoubTQKK30KKworZG9faW5zdGFsbCAoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1ICR7SE9TVF9TWVN9LWxpYnRvb2wgJHtEfSR7YmluZGlyfS8KK30KKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJsaWJ0b29sbmF0aXZlc2RrX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworbGlidG9vbG5hdGl2ZXNka19zeXNyb290X3ByZXByb2Nlc3MgKCkgeworCWluc3RhbGwgLWQgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS8KKwlpbnN0YWxsIC1tIDc1NSAke0R9JHtiaW5kaXJ9LyR7SE9TVF9TWVN9LWxpYnRvb2wgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS8ke0hPU1RfU1lTfS1saWJ0b29sCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy1uYXRpdmVfMC45LjY5LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMtbmF0aXZlXzAuOS42OS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGE5MGZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMtbmF0aXZlXzAuOS42OS5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIkNvbnZlcnQgTGludXhEb2MgU0dNTCBzb3VyY2UgaW50byBvdGhlciBmb3JtYXRzIgorSE9NRVBBR0UgPSAiaHR0cDovL3BhY2thZ2VzLmRlYmlhbi5vcmcvbGludXhkb2MtdG9vbHMiCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA3N2VmNjRlYzNhYzI1N2ZiMGQ3ODY1MzFjZjI2OTMxIgorCitERVBFTkRTID0gImdyb2ZmLW5hdGl2ZSBvcGVuamFkZS1uYXRpdmUiCisKK1NSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2wvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHNfJHtQVn0ub3JpZy50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZV9zZ21sMnJ0Zi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlX3R4dF9kb2MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZV90ZXhfZG9jLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGVfZHZpcHNfZG9jLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWQxM2Q1MDA5MThhN2ExNDViMGVkYzJmMTZmNjFkZDEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzEwM2ZhY2VlMThhMmVhOTcxODZjYTQ1OWQ3NDNkMjJmN2Y4OWFkNGI1Y2QxZGZkMWMzNGY4M2Q2YmZkNDEwMSIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIG5hdGl2ZQorCitkb19jb25maWd1cmUgKCkgeworCW9lX3J1bmNvbmYKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nICdUTVBESVI9JHtUfScgaW5zdGFsbAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV9kdmlwc19kb2MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX2R2aXBzX2RvYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTBiMzY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV9kdmlwc19kb2MucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRGlzYWJsZSBidWlsZGluZyBkb2N1bWVudGF0aW9uIHdoaWNoIHJlcXVpcmVzIHRoZSBkdmlwcyB1dGlsaXR5LgorVGhpcyBwYXRjaCBzaG91bGQgYmUgZHJvcHBlZCBvbmNlIHdlIGluY2x1ZGUgYSBuYXRpdmUgdmVyc2lvbiBvZgorZHZpcHMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT3RoZXJdCitUZW1wb3Jhcnkgd29ya2Fyb3VuZCB3aGljaCBkaXNhYmxlcyBkb2N1bWVudGF0aW9uLgorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworZGlmZiAtdXJOIGxpbnV4ZG9jLXRvb2xzLTAuOS42Ni5vcmlnL2RvYy9NYWtlZG9jLnNoIGxpbnV4ZG9jLXRvb2xzLTAuOS42Ni9kb2MvTWFrZWRvYy5zaAorLS0tIGxpbnV4ZG9jLXRvb2xzLTAuOS42Ni5vcmlnL2RvYy9NYWtlZG9jLnNoCTIwMTEtMDItMjUgMTU6MjY6NDEuMTQyOTE3NzgyIC0wODAwCisrKysgbGludXhkb2MtdG9vbHMtMC45LjY2L2RvYy9NYWtlZG9jLnNoCTIwMTEtMDItMjUgMTU6Mjc6MjUuMTQxOTE3NDcyIC0wODAwCitAQCAtNTIsMTMgKzUyLDEzIEBACisgIwkkVE1QRElSL3NnbWwybGF0ZXggLS1wYXNzPSJcdXNlcGFja2FnZXt0aW1lc30iIC1vIGR2aSAuL2d1aWRlCisgI2ZpCisgCistaWYgWyAtbiAiYHdoaWNoIGR2aXBzYCIgXTsgdGhlbgorLQllY2hvICIgICArIGR2aXBzIiA+JjIKKy0JZHZpcHMgLXQgbGV0dGVyIC1vIC4vZ3VpZGUucHMgLi9ndWlkZS5kdmkKKy0JaWYgWyAtbiAiYHdoaWNoIGd6aXBgIiAtYSAtZiAuL2d1aWRlLnBzIF07IHRoZW4KKy0JCWd6aXAgLWZOIC4vZ3VpZGUucHMKKy0JZmkKKy1maQorKyNpZiBbIC1uICJgd2hpY2ggZHZpcHNgIiBdOyB0aGVuCisrIwllY2hvICIgICArIGR2aXBzIiA+JjIKKysjCWR2aXBzIC10IGxldHRlciAtbyAuL2d1aWRlLnBzIC4vZ3VpZGUuZHZpCisrIwlpZiBbIC1uICJgd2hpY2ggZ3ppcGAiIC1hIC1mIC4vZ3VpZGUucHMgXTsgdGhlbgorKyMJCWd6aXAgLWZOIC4vZ3VpZGUucHMKKysjCWZpCisrI2ZpCisgCisgCisgZWNobyAiLSBCdWlsZGluZyBpbmZvIGRvY3MiID4mMgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV9zZ21sMnJ0Zi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzL2Rpc2FibGVfc2dtbDJydGYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBjOGE4ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzL2Rpc2FibGVfc2dtbDJydGYucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSA3NTZmMjBlNzBhOTdlZTJkZWE5YjMyYzA5NTVlYWJmYzI3ZjI5YmUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5kcmVpIERpbnUgPGFuZHJlaS5hZHJpYW54LmRpbnVAaW50ZWwuY29tPgorRGF0ZTogV2VkLCAyOSBNYXkgMjAxMyAxNjo1MDoxNyArMDMwMAorU3ViamVjdDogW1BBVENIXSBUaGUgYnVpbGQgb2Ygc2dtbDJydGYgaXMgcHJvYmxlbWF0aWMgZHVlIHRvIHRoZSB3YXkgaXQgd2FudHMKKyB0byBsaW5rIHRvIGEgc2hhcmVkIGxpYnJhcnkgdmVyc2lvbiBvZiBmbGV4LiBGbGV4IG9ubHkKKyBzaGlwcyB3aXRoIGEgc3RhdGljIGxpYi4gUmF0aGVyIHRoYW4gZGl2ZXJnaW5nIGZyb20KKyB1cHN0cmVhbSBmbGV4LCBzaW1wbHkgc2tpcCBidWlsZGluZyB0aGlzIHVuLW5lZWRlZCB1dGlsaXR5LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW090aGVyXQorV29ya2Fyb3VuZCB3aGljaCBkaXNhYmxlcyBhIGZlYXR1cmUuCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogQW5kcmVpIERpbnUgPGFuZHJlaS5hZHJpYW54LmRpbnVAaW50ZWwuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCAgIDEyICsrKysrKy0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCAzNTlmMTRlLi5mYzA0MDIwIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNDAsNyArNDAsNyBAQCBwZXJsNWxpYl9kZGlyICAgICAgPSAkKERFU1RESVIpJChwZXJsNWxpYmRpcikKKyBwa2dkYXRhX2RkaXIgICAgICAgPSAkKERFU1RESVIpJChwa2dkYXRhZGlyKQorIHRleF9kZGlyICAgICAgICAgICA9ICQoREVTVERJUikkKHRleGRpcikKKyAKKy1wcm9ncyAgICA6PSBzZ21sMmh0bWwgc2dtbDJpbmZvIHNnbWwybGF0ZXggc2dtbDJseXggc2dtbDJydGYgc2dtbDJ0eHQgc2dtbGNoZWNrCisrcHJvZ3MgICAgOj0gc2dtbDJodG1sIHNnbWwyaW5mbyBzZ21sMmxhdGV4IHNnbWwybHl4IHNnbWwydHh0IHNnbWxjaGVjaworIAorIFBST0ZJTEUgID0KKyBJTkNMVURFICA9CitAQCAtNzEsOSArNzEsOSBAQCBlbmRpZgorIAkoIGNkIHNnbWxwcmUgOyBcCisgCSAgJChNQUtFKSAgQ0ZMQUdTPSIkKENGTEFHUykiIExERkxBR1M9IiQoTERGTEFHUykiIExFWD1mbGV4IHNnbWxwcmUgfHwgZXhpdCAtMSApCisgCistCUBlY2hvICJDb21waWxpbmcgUlRGIGNvbnZlcnNpb24gdG9vbHMgKGluIHJ0Zi1maXgvKS4uLiIKKy0JKCBjZCBydGYtZml4IDsgXAorLQkgICQoTUFLRSkgQ0ZMQUdTPSIkKENGTEFHUykiIExERkxBR1M9IiQoTERGTEFHUykiIHx8IGV4aXQgLTEgKQorKyMJQGVjaG8gIkNvbXBpbGluZyBSVEYgY29udmVyc2lvbiB0b29scyAoaW4gcnRmLWZpeC8pLi4uIgorKyMJKCBjZCBydGYtZml4IDsgXAorKyMJICAkKE1BS0UpIENGTEFHUz0iJChDRkxBR1MpIiBMREZMQUdTPSIkKExERkxBR1MpIiB8fCBleGl0IC0xICkKKyAKKyAJQGVjaG8gIm1ha2luZyBtYW4gcGFnZXMgaW4gZ2VubWFuIC4uLiIKKyAJaWYgWyAhIC1kIGdlbm1hbiBdOyB0aGVuIG1rZGlyIGdlbm1hbiA7IGZpCitAQCAtMTE3LDcgKzExNyw3IEBAIGVuZGlmCisgCisgIyAgICAtLSBJbnN0YWxsIGF1eGlsaWFyeSBwcm9ncmFtcworIAlta2RpciAtcCAkKGF1eGJpbl9kZGlyKQorLQlmb3IgaWkgaW4gc2dtbHByZS9zZ21scHJlIHJ0Zi1maXgvcnRmMnJ0ZjsgZG8gXAorKwlmb3IgaWkgaW4gc2dtbHByZS9zZ21scHJlOyBkbyBcCisgCSAgYm49YGJhc2VuYW1lICQkaWlgOyBcCisgCSAgJChJTlNUQUxMX1BST0dSQU0pICQkaWkgJChhdXhiaW5fZGRpcikvJCRibjsgXAorIAlkb25lCitAQCAtMjA2LDcgKzIwNiw3IEBAIGJpbi9saW51eGRvYzo6IE1ha2VmaWxlIGJpbi9saW51eGRvYy5pbgorIAorIGNsZWFuOjoKKyAJLXJtIC1mICp+IGJpbi8qfiBiaW4vbGludXhkb2MKKy0JZm9yIGQgaW4gJChERElSUykgJChNRElSUykgcnRmLWZpeDsgZG8gJChNQUtFKSAtQyAkJGQgY2xlYW47IGRvbmUKKysJZm9yIGQgaW4gJChERElSUykgJChNRElSUyk7IGRvICQoTUFLRSkgLUMgJCRkIGNsZWFuOyBkb25lCisgCShjZCBzZ21scHJlIDsgcm0gLWYgc2dtbHByZS5vIHNnbWxwcmUpCisgCS1ybSAtcmYgZ2VubWFuLworIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzL2Rpc2FibGVfdGV4X2RvYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzL2Rpc2FibGVfdGV4X2RvYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjI4OTVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV90ZXhfZG9jLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Rpc2FibGUgYnVpbGRpbmcgZG9jdW1lbnRhdGlvbiB3aGljaCByZXF1aXJlcyB0aGUgbGF0ZXggdXRpbGl0eS4KK1RoaXMgcGF0Y2ggc2hvdWxkIGJlIGRyb3BwZWQgb25jZSB3ZSBpbmNsdWRlIGEgbmF0aXZlIHZlcnNpb24gb2YKK2xhdGV4LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW090aGVyXQorVGVtcG9yYXJ5IHdvcmthcm91bmQgd2hpY2ggZGlzYWJsZXMgZG9jdW1lbnRhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK2RpZmYgLXVyTiBsaW51eGRvYy10b29scy0wLjkuNjYub3JpZy9kb2MvTWFrZWRvYy5zaCBsaW51eGRvYy10b29scy0wLjkuNjYvZG9jL01ha2Vkb2Muc2gKKy0tLSBsaW51eGRvYy10b29scy0wLjkuNjYub3JpZy9kb2MvTWFrZWRvYy5zaAkyMDA5LTExLTA5IDExOjU4OjI1LjAwMDAwMDAwMCAtMDgwMAorKysrIGxpbnV4ZG9jLXRvb2xzLTAuOS42Ni9kb2MvTWFrZWRvYy5zaAkyMDExLTAyLTI1IDE1OjIzOjU4LjYxMDAxNjExNCAtMDgwMAorQEAgLTQ2LDExICs0NiwxMSBAQAorIAkkVE1QRElSL3NnbWwydHh0IC1iIDEgLi9ndWlkZQorIGZpCisgCistaWYgWyAtbiAiYHdoaWNoIGxhdGV4YCIgXTsgdGhlbgorLQlsbiAtcyAkVE1QRElSL2xpbnV4ZG9jICRUTVBESVIvc2dtbDJsYXRleAorLQllY2hvICItIEJ1aWxkaW5nIGxhdGV4IGRvY3MiID4mMgorLQkkVE1QRElSL3NnbWwybGF0ZXggLS1wYXNzPSJcdXNlcGFja2FnZXt0aW1lc30iIC1vIGR2aSAuL2d1aWRlCistZmkKKysjaWYgWyAtbiAiYHdoaWNoIGxhdGV4YCIgXTsgdGhlbgorKyMJbG4gLXMgJFRNUERJUi9saW51eGRvYyAkVE1QRElSL3NnbWwybGF0ZXgKKysjCWVjaG8gIi0gQnVpbGRpbmcgbGF0ZXggZG9jcyIgPiYyCisrIwkkVE1QRElSL3NnbWwybGF0ZXggLS1wYXNzPSJcdXNlcGFja2FnZXt0aW1lc30iIC1vIGR2aSAuL2d1aWRlCisrI2ZpCisgCisgaWYgWyAtbiAiYHdoaWNoIGR2aXBzYCIgXTsgdGhlbgorIAllY2hvICIgICArIGR2aXBzIiA+JjIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzL2Rpc2FibGVfdHh0X2RvYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzL2Rpc2FibGVfdHh0X2RvYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDc4NDExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV90eHRfZG9jLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0Rpc2FibGUgYnVpbGRpbmcgdHh0IGRvY3VtZW50YXRpb24uIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCwKK2FzIEkgaGF2ZSBmb3VuZCBhbiBVYnVudHUgMTAuMTAgc3lzdGVtIHdoaWNoIHRocm93cyBlcnJvcnMgZHVyaW5nCitidWlsZGluZyB0aGlzIHRoYXQgSSdkIGxpa2UgdG8gdWx0aW1hdGVseSBmaXguIFRoZSBlcnJvciBtYW5pZmVzdHMKK2l0c2VsZiBmcm9tIHRoZSBlbmQgb2YgTGludXhEb2NUb29scy5wbSB3aXRoIHRoZSBmb2xsb3dpbmcgbWVzc2FnZXMKK2R1cmluZyBkb19pbnN0YWxsOgorCit8IC0gQnVpbGRpbmcgdHh0IGRvY3MKK3wgUHJvY2Vzc2luZyBmaWxlIC4vZ3VpZGUKK3wgdHJvZmY6IGZhdGFsIGVycm9yOiBjYW4ndCBmaW5kIG1hY3JvIGZpbGUgcworfCAgZm10X3R4dDo6cG9zdEFTUDogRW1wdHkgb3V0cHV0IGZpbGUsIGVycm9yIHdoZW4gY2FsbGluZyBncm9mZi4gQWJvcnRpbmcuLi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPdGhlcl0KK1RlbXBvcmFyeSB3b3JrYXJvdW5kIHdoaWNoIGRpc2FibGVzIGRvY3VtZW50YXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitkaWZmIC11ck4gbGludXhkb2MtdG9vbHMtMC45LjY2Lm9yaWcvL2RvYy9NYWtlZG9jLnNoIGxpbnV4ZG9jLXRvb2xzLTAuOS42Ni9kb2MvTWFrZWRvYy5zaAorLS0tIGxpbnV4ZG9jLXRvb2xzLTAuOS42Ni5vcmlnLy9kb2MvTWFrZWRvYy5zaAkyMDA5LTExLTA5IDExOjU4OjI1LjAwMDAwMDAwMCAtMDgwMAorKysrIGxpbnV4ZG9jLXRvb2xzLTAuOS42Ni9kb2MvTWFrZWRvYy5zaAkyMDExLTAzLTA0IDE3OjM3OjI0Ljc4ODkyMzk5OCAtMDgwMAorQEAgLTQwLDExICs0MCwxMSBAQAorIAorIGNobW9kIHUreCAkVE1QRElSL2xpbnV4ZG9jCisgCistaWYgWyAtbiAiYHdoaWNoIGdyb2ZmYCIgXTsgdGhlbgorLQlsbiAtcyAkVE1QRElSL2xpbnV4ZG9jICRUTVBESVIvc2dtbDJ0eHQKKy0JZWNobyAiLSBCdWlsZGluZyB0eHQgZG9jcyIgPiYyCistCSRUTVBESVIvc2dtbDJ0eHQgLWIgMSAuL2d1aWRlCistZmkKKysjaWYgWyAtbiAiYHdoaWNoIGdyb2ZmYCIgXTsgdGhlbgorKyMJbG4gLXMgJFRNUERJUi9saW51eGRvYyAkVE1QRElSL3NnbWwydHh0CisrIwllY2hvICItIEJ1aWxkaW5nIHR4dCBkb2NzIiA+JjIKKysjCSRUTVBESVIvc2dtbDJ0eHQgLWIgMSAuL2d1aWRlCisrI2ZpCisgCisgaWYgWyAtbiAiYHdoaWNoIGxhdGV4YCIgXTsgdGhlbgorIAlsbiAtcyAkVE1QRElSL2xpbnV4ZG9jICRUTVBESVIvc2dtbDJsYXRleApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQtMS40LjE3LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LTEuNC4xNy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVhNGUwNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LTEuNC4xNy5pbmMKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSBtNC5pbmMKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtbGlic2lnc2Vndi1wcmVmaXgiCisKK0xJQ0VOU0UgPSAiR1BMdjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0XAorCSAgICAgICAgICAgIGZpbGU6Ly9leGFtcGxlcy9DT1BZSU5HO21kNT00MDMxNTkzYjIxNjZkNmM0N2NhZTI4MmQ5NDRhN2VkZSIKKworU1JDX1VSSSArPSAiZmlsZTovL2FjX2NvbmZpZ19saW5rcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLWdldHMucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICJcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKwkgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiYTVlOTk1NGIxZGFlMDM2NzYyZjdiMTM2NzNhMmNmNzYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2NlNzI1MTMzZWU1NTJiOGI0YmFjYTc4MzdmYjc3Mjk0MGIyNWU4MWIyYTlkYzkyNTM3YWVhZjczMzUzOGM5ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LTEuNC45LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LTEuNC45LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWIyYzFlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQtMS40LjkuaW5jCkBAIC0wLDAgKzEsMTMgQEAKK3JlcXVpcmUgbTQuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlXAorCWZpbGU6Ly9leGFtcGxlcy9DT1BZSU5HO21kNT0xZDQ5YmQ2MWRjNTkwZjAxNGNhZTcxNzNiNDNlM2U1YyIKKworUFIgPSAicjIiCitTUkNfVVJJICs9ICJmaWxlOi8vZml4X2Zvcl9jaXJjdWxhcl9kZXBlbmRlbmN5LnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWJhOGUxNDdhZmY1ZTc5YmQyYmZiOTgzZDg2YjUzZDUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODE1Y2U1Mzg1M2ZiZjY0OTM2MTdmNDY3Mzg5Yjc5OTIwOGIxZWM5ODI5NmI5NWJlNDRhNjgzZjhiY2ZkN2M0NyIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQtbmF0aXZlXzEuNC4xNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LW5hdGl2ZV8xLjQuMTcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZkOGFhMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LW5hdGl2ZV8xLjQuMTcuYmIKQEAgLTAsMCArMSwxMyBAQAorcmVxdWlyZSBtNC0ke1BWfS5pbmMKKworaW5oZXJpdCBuYXRpdmUKKworSU5ISUJJVF9BVVRPVE9PTFNfREVQUyA9ICIxIgorREVQRU5EUyArPSAiZ251LWNvbmZpZy1uYXRpdmUiCisKK2RvX2NvbmZpZ3VyZSgpICB7CisJaW5zdGFsbCAtbSAwNjQ0ICR7U1RBR0lOR19EQVRBRElSfS9nbnUtY29uZmlnL2NvbmZpZy5zdWIgLgorCWluc3RhbGwgLW0gMDY0NCAke1NUQUdJTkdfREFUQURJUn0vZ251LWNvbmZpZy9jb25maWcuZ3Vlc3MgLgorCW9lX3J1bmNvbmYKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhODM5MjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC5pbmMKQEAgLTAsMCArMSwxMCBAQAorU1VNTUFSWSA9ICJUcmFkaXRpb25hbCBVbml4IG1hY3JvIHByb2Nlc3NvciIKK0RFU0NSSVBUSU9OID0gIkdOVSBtNCBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgdHJhZGl0aW9uYWwgVW5peCBtYWNybyBwcm9jZXNzb3IuICBJdCBpcyBtb3N0bHkgU1ZSNCBcCitjb21wYXRpYmxlIGFsdGhvdWdoIGl0IGhhcyBzb21lIGV4dGVuc2lvbnMgKGZvciBleGFtcGxlLCBoYW5kbGluZyBtb3JlIHRoYW4gOSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgdG8gbWFjcm9zKS4gXAorR05VIE00IGFsc28gaGFzIGJ1aWx0LWluIGZ1bmN0aW9ucyBmb3IgaW5jbHVkaW5nIGZpbGVzLCBydW5uaW5nIHNoZWxsIGNvbW1hbmRzLCBkb2luZyBhcml0aG1ldGljLCBldGMuIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0VYVFJBX09FTUFLRSArPSAiJ2luZm9kaXI9JHtpbmZvZGlyfSciCitMREZMQUdTX3ByZXBlbmRfbGliYy11Y2xpYmMgPSAiIC1scnQgIgorU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L200L200LSR7UFZ9LnRhci5neiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMWE0YmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9nbnVsaWIubWsgYi9saWIvZ251bGliLm1rCitpbmRleCBlMWQ3NGRiLi5jMGU5MmRkIDEwMDY0NAorLS0tIGEvbGliL2dudWxpYi5taworKysrIGIvbGliL2dudWxpYi5taworQEAgLTE4ODIsNyArMTg4Miw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200L2FjX2NvbmZpZ19saW5rcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200L2FjX2NvbmZpZ19saW5rcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzVjMGIyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQvYWNfY29uZmlnX2xpbmtzLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworVGhpcyBwYXRjaCBmaXhlcyBhIGJ1aWxkIHByb2JsZW0gZm9yIG00LW5hdGl2ZSBleHBlcmllbmNlZCBvbiBVYnVudHUgOS4xMCwKK3doZXJlIGF1dG9jb25mL2F1dG9tYWtlIChBQ19DT05GSUdfTElOS1MpIGVuZHMgdXAgbWFraW5nIEdOVW1ha2VmaWxlIGEKK3N5bWxpbmsgdG8gaXRzZWxmLgorCitUaGUgcGF0Y2ggY29tbWVudHMgb3V0IGFjX2NvbmZpZ19saW5rcyBkaXJlY3RseSBpbiBjb25maWd1cmUsCithcyBhdXRvcmVjb25mIGlzIG5vdCBhY3R1YWxseSBydW4gZm9yIG00LW5hdGl2ZS4KKworSSBiZWxpZXZlIGl0IHNob3VsZCBiZSBzYWZlLCBhcyBHTlVtYWtlZmlsZSBpcyBhY3R1YWxseSB1bnBhY2tlZCBmcm9tCitzb3VyY2UsIGFuZCB3aGF0IHdlIHdhbnQgaXMgdG8gaXMgdG8gbm90IHRvdWNoIGl0LgorCitUZXN0ZWQgb24geDg2XzY0X2xpbnV4IChVYnVudHUgOC4wNCBhbmQgOS4xMCkuCisKKzIwMDktMTEtMTAJRXNiZW4gSGFhYmVuZGFsCSAgICA8ZWhhQGRvcmVkZXZlbG9wbWVudC5kaz4KKworZGlmZiAtdXJOIG00LTEuNC4xMy5vcmlnL2NvbmZpZ3VyZSBtNC0xLjQuMTMvY29uZmlndXJlCistLS0gbTQtMS40LjEzLm9yaWcvY29uZmlndXJlCTIwMDktMTEtMTAgMTA6NTQ6MDAuMzAxNzA3MDk3ICswMTAwCisrKysgbTQtMS40LjEzL2NvbmZpZ3VyZQkyMDA5LTExLTEwIDEwOjU0OjE3LjMxNDIwNjM3OSArMDEwMAorQEAgLTE0ODYwLDggKzE0ODYwLDggQEAKKyAgICMgb25seSwgaXQgZG9lcyBub3QgbWF0dGVyIGlmIHdlIHNraXAgdGhlIGxpbmsgd2l0aCBvbGRlciBhdXRvY29uZi4KKyAgICMgQXV0b21ha2UgMS4xMC4xIGFuZCBlYXJsaWVyIHRyeSB0byByZW1vdmUgR05VbWFrZWZpbGUgaW4gbm9uLVZQQVRICisgICAjIGJ1aWxkcywgc28gdXNlIGEgc2hlbGwgdmFyaWFibGUgdG8gYnlwYXNzIHRoaXMuCistICBHTlVtYWtlZmlsZT1HTlVtYWtlZmlsZQorLSAgYWNfY29uZmlnX2xpbmtzPSIkYWNfY29uZmlnX2xpbmtzICRHTlVtYWtlZmlsZTokR05VbWFrZWZpbGUiCisrICMgR05VbWFrZWZpbGU9R05VbWFrZWZpbGUKKysgIyBhY19jb25maWdfbGlua3M9IiRhY19jb25maWdfbGlua3MgJEdOVW1ha2VmaWxlOiRHTlVtYWtlZmlsZSIKKyAKKyAKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200L2ZpeF9mb3JfY2lyY3VsYXJfZGVwZW5kZW5jeS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200L2ZpeF9mb3JfY2lyY3VsYXJfZGVwZW5kZW5jeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODc3NDUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQvZml4X2Zvcl9jaXJjdWxhcl9kZXBlbmRlbmN5LnBhdGNoCkBAIC0wLDAgKzEsNzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitUaGUgb2xkZXIgR1BMdjIgbTQgZG9lcyBub3Qgd29yayB3ZWxsIHdpdGggbmV3ZXIgYXV0b2NvbmYuIEl0IGNhdXNlcyB0aGUgCitjaXJjdWxhciBkZXBlbmRlbmN5IGFzIHNlZW4gYmVsbG93LgorICBSZW1vdmluZyB0aGlzIG00IGZpbGUgd2hpY2ggd2FzIG5lZWRlZCBvbmx5IGZvcmwgb2xkZXIgYXV0b2NvbmYKKworfCBjb25maWd1cmUuYWM6MzQ6IGVycm9yOiBBQ19SRVFVSVJFOiBjaXJjdWxhciBkZXBlbmRlbmN5IG9mIEFDX0dOVV9TT1VSQ0UKK3wgL2J1aWxkX2Rpc2svcG9reV9idWlsZC9idWlsZDEvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L200LTEuNC45LXIwL200LTEuNC45L200L2V4dGVuc2lvbnMubTQ6MTk6IEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBpcyBleHBhbmRlZCBmcm9tLi4uCit8IC4uLy4uL2xpYi9hdXRvY29uZi9zcGVjaWZpYy5tNDozMTA6IEFDX0dOVV9TT1VSQ0UgaXMgZXhwYW5kZWQgZnJvbS4uLgorfCAvYnVpbGRfZGlzay9wb2t5X2J1aWxkL2J1aWxkMS90bXAvd29yay9pNTg2LXBva3ktbGludXgvbTQtMS40LjktcjAvbTQtMS40LjkvbTQvZ251bGliLWNvbXAubTQ6MjE6IE00X0VBUkxZIGlzIGV4cGFuZGVkIGZyb20uLi4KK3wgY29uZmlndXJlLmFjOjM0OiB0aGUgdG9wIGxldmVsCit8IGF1dG9tNHRlOiAvYnVpbGRfZGlzay9wb2t5X2J1aWxkL2J1aWxkMS90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9iaW4vbTQgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXM6IDEKK3wgYWNsb2NhbDogL2J1aWxkX2Rpc2svcG9reV9idWlsZC9idWlsZDEvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvYmluL2F1dG9tNHRlIGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzOiAxCit8IGF1dG9yZWNvbmY6IGFjbG9jYWwgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXM6IDEKKworTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTEvMDMvMTYKKworSW5kZXg6IG00LTEuNC45L200L2V4dGVuc2lvbnMubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBtNC0xLjQuOS5vcmlnL200L2V4dGVuc2lvbnMubTQKKysrKyBtNC0xLjQuOS9tNC9leHRlbnNpb25zLm00CitAQCAtNiw1MyArNiwxMCBAQAorICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyAKKy0jIFRoaXMgZGVmaW5pdGlvbiBvZiBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMgaXMgc3RvbGVuIGZyb20gQ1ZTCistIyBBdXRvY29uZi4gIFBlcmhhcHMgd2UgY2FuIHJlbW92ZSB0aGlzIG9uY2Ugd2UgY2FuIGFzc3VtZSBBdXRvY29uZgorLSMgMi42MSBvciBsYXRlciBldmVyeXdoZXJlLCBidXQgc2luY2UgQ1ZTIEF1dG9jb25mIG11dGF0ZXMgcmFwaWRseQorLSMgZW5vdWdoIGluIHRoaXMgYXJlYSBpdCdzIGxpa2VseSB3ZSdsbCBuZWVkIHRvIHJlZGVmaW5lCistIyBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMgZm9yIHF1aXRlIHNvbWUgdGltZS4KKy0KKy0jIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUworLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorLSMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorLUFDX0RFRlVOKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorLVsKKy0gIEFDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKQorLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19SVU5fSUZFTFNFXSkKKy0KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorLSAgQUNfUkVRVUlSRShbQUNfQUlYXSkKKy0gIEFDX1JFUVVJUkUoW0FDX01JTklYXSkKKy0KKy0gIEFIX1ZFUkJBVElNKFtfX0VYVEVOU0lPTlNfX10sCistWy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIFNvbGFyaXMuICAqLworLSNpZm5kZWYgX19FWFRFTlNJT05TX18KKy0jIHVuZGVmIF9fRVhURU5TSU9OU19fCistI2VuZGlmCistI2lmbmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKy0jIHVuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworLSNlbmRpZgorLSNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKy0jIHVuZGVmIF9UQU5ERU1fU09VUkNFCistI2VuZGlmXSkKKy0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fXSwKKy0gICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fXSwKKy0gICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorLSAgICAgICBbQUNfTEFOR19QUk9HUkFNKFsKKy0jCSAgZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKKy0JICBBQ19JTkNMVURFU19ERUZBVUxUXSldLAorLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189eWVzXSwKKy0gICAgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPW5vXSldKQorLSAgdGVzdCAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18gPSB5ZXMgJiYKKy0gICAgQUNfREVGSU5FKFtfX0VYVEVOU0lPTlNfX10pCistICBBQ19ERUZJTkUoW19QT1NJWF9QVEhSRUFEX1NFTUFOVElDU10pCistICBBQ19ERUZJTkUoW19UQU5ERU1fU09VUkNFXSkKKy1dKQorIAorICMgZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCisgIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCisgQUNfREVGVU4oW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCistICBbQUNfUkVRVUlSRShbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSldKQorKyAgW10pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9tYWtlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQvbWFrZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWZiNDE1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQvbWFrZS5wYXRjaApAQCAtMCwwICsxLDQyIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCisjCisjIFBhdGNoIG1hbmFnZWQgYnkgaHR0cDovL3d3dy5ob2xnZXJzY2h1cmlnLmRlL3BhdGNoZXIuaHRtbAorIworCistLS0gbTQtMS40LjIvZG9jL01ha2VmaWxlLmlufm1ha2UKKysrKyBtNC0xLjQuMi9kb2MvTWFrZWZpbGUuaW4KK0BAIC01Nyw5ICs1Nyw5IEBACisgCWRhdGUgPiAkKHNyY2Rpcikvc3RhbXAtdnRpCisgCisgaW5zdGFsbDogYWxsCistCSQoc3JjZGlyKS8uLi9ta2luc3RhbGxkaXJzICQoaW5mb2RpcikKKysJJChzcmNkaXIpLy4uL21raW5zdGFsbGRpcnMgJChERVNURElSKSQoaW5mb2RpcikKKyAJY2QgJChzcmNkaXIpICYmIGZvciBmaWxlIGluIG00LmluZm8qOyBkbyBcCistCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZSAkKGluZm9kaXIpLyQkZmlsZTsgXAorKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGUgJChERVNURElSKSQoaW5mb2RpcikvJCRmaWxlOyBcCisgCWRvbmUKKyAKKyB1bmluc3RhbGw6CistLS0gbTQtMS40LjIvc3JjL01ha2VmaWxlLmlufm1ha2UKKysrKyBtNC0xLjQuMi9zcmMvTWFrZWZpbGUuaW4KK0BAIC0zNSw3ICszNSw3IEBACisgcHJlZml4ID0gQHByZWZpeEAKKyBleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKKyB0cmFuc2Zvcm0gPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKKy1iaW5kaXIgPSAkKGV4ZWNfcHJlZml4KS9iaW4KKytiaW5kaXIgPSBAYmluZGlyQAorIAorIENPTVBJTEUgPSAkKENDKSAtYyAkKERFRlMpICQoSU5DTFVERVMpICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKQorIExJTksgPSAkKENDKSAkKExERkxBR1MpIC1vICRACitAQCAtODQsOCArODQsOCBAQAorIAkkKExJTkspIGFuc2kya25yLm8gJChMSUJTKQorIAorIGluc3RhbGw6IGFsbAorLQkkKHNyY2RpcikvLi4vbWtpbnN0YWxsZGlycyAkKGJpbmRpcikKKy0JJChJTlNUQUxMX1BST0dSQU0pIG00ICQoYmluZGlyKS9gZWNobyBtNCB8IHNlZCAnJCh0cmFuc2Zvcm0pJ2AKKysJJChzcmNkaXIpLy4uL21raW5zdGFsbGRpcnMgJChERVNURElSKSQoYmluZGlyKQorKwkkKElOU1RBTExfUFJPR1JBTSkgbTQgJChERVNURElSKSQoYmluZGlyKS9gZWNobyBtNCB8IHNlZCAnJCh0cmFuc2Zvcm0pJ2AKKyAKKyB1bmluc3RhbGw6CisgCXJtIC1mICQoYmluZGlyKS9gZWNobyBtNCB8IHNlZCAnJCh0cmFuc2Zvcm0pJ2AKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200L3JlbW92ZS1nZXRzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQvcmVtb3ZlLWdldHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZmYjM1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200L3JlbW92ZS1nZXRzLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK2VnbGliYyBoYXMgcmVtb3ZlIGdldHMgc3RhcnRpbmcgMi4xNgordGhlcmVmb3JlIGNoZWNrIGZvciBpdHMgYmVpbmcgdGhlcmUgYmVmb3JlIAordW5kZWZpbmluZyBpdC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorSW5kZXg6IG00LTEuNC4xNy9saWIvc3RkaW8uaW4uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG00LTEuNC4xNy5vcmlnL2xpYi9zdGRpby5pbi5oCTIwMTMtMTAtMTYgMTQ6NDE6MDEuNjc4NDk2MjI3ICswMzAwCisrKysgbTQtMS40LjE3L2xpYi9zdGRpby5pbi5oCTIwMTMtMTAtMTYgMTQ6NDE6NDguODQ5NDI3ODM5ICswMzAwCitAQCAtNzE3LDEwICs3MTcsMTIgQEAKKyAvKiBJdCBpcyB2ZXJ5IHJhcmUgdGhhdCB0aGUgZGV2ZWxvcGVyIGV2ZXIgaGFzIGZ1bGwgY29udHJvbCBvZiBzdGRpbiwKKyAgICBzbyBhbnkgdXNlIG9mIGdldHMgd2FycmFudHMgYW4gdW5jb25kaXRpb25hbCB3YXJuaW5nOyBiZXNpZGVzLCBDMTEKKyAgICByZW1vdmVkIGl0LiAgKi8KKysjaWYgZGVmaW5lZCBnZXRzCisgI3VuZGVmIGdldHMKKyAjaWYgSEFWRV9SQVdfREVDTF9HRVRTCisgX0dMX1dBUk5fT05fVVNFIChnZXRzLCAiZ2V0cyBpcyBhIHNlY3VyaXR5IGhvbGUgLSB1c2UgZmdldHMgaW5zdGVhZCIpOworICNlbmRpZgorKyNlbmRpZgorIAorIAorICNpZiBAR05VTElCX09CU1RBQ0tfUFJJTlRGQCB8fCBAR05VTElCX09CU1RBQ0tfUFJJTlRGX1BPU0lYQApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTRfMS40LjE3LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTRfMS40LjE3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMmMwYWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNF8xLjQuMTcuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIG00LSR7UFZ9LmluYworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200XzEuNC45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTRfMS40LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEyYzBhZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200XzEuNC45LmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSBtNC0ke1BWfS5pbmMKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2UtMy44MS9tYWtlX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZS0zLjgxL21ha2VfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMmU5NjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2UtMy44MS9tYWtlX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDQzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworYXV0b21ha2UgMS4xMiBoYXMgZGVwcmljYXRlZCBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0CisKK3RoaXMgcGF0Y2ggYXZvaWRzIHRoZXNlIGtpbmRzIG9mIGVycm9yczoKKworfCBjb25maWd1cmUuaW46NDg6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKKy4uLgorfCBNYWtlZmlsZS5hbToxOTogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorfCBhdXRvcmVjb25mOiBhdXRvbWFrZSBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorfCBFUlJPUjogYXV0b3JlY29uZiBleGVjdXRpb24gZmFpbGVkLgorCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzA0CisKK0luZGV4OiBtYWtlLTMuODEvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWFrZS0zLjgxLm9yaWcvY29uZmlndXJlLmluCisrKysgbWFrZS0zLjgxL2NvbmZpZ3VyZS5pbgorQEAgLTQ0LDkgKzQ0LDYgQEAgQUNfQUlYCisgQUNfSVNDX1BPU0lYCisgQUNfTUlOSVgKKyAKKy0jIE5lZWRlZCBmb3IgYW5zaTJrbnIKKy1BTV9DX1BST1RPVFlQRVMKKy0KKyAjIEVuYWJsZSBnZXR0ZXh0LCBpbiAiZXh0ZXJuYWwiIG1vZGUuCisgCisgQU1fR05VX0dFVFRFWFRfVkVSU0lPTigwLjE0LjEpCitJbmRleDogbWFrZS0zLjgxL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWFrZS0zLjgxLm9yaWcvTWFrZWZpbGUuYW0KKysrKyBtYWtlLTMuODEvTWFrZWZpbGUuYW0KK0BAIC0xNiw3ICsxNiw3IEBACisgIyBHTlUgTWFrZTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgCistQVVUT01BS0VfT1BUSU9OUyA9IDEuOCBkaXN0LWJ6aXAyIGNoZWNrLW5ld3MgYW5zaTJrbnIKKytBVVRPTUFLRV9PUFRJT05TID0gMS44IGRpc3QtYnppcDIgY2hlY2stbmV3cworIEFDTE9DQUxfQU1GTEFHUwk9ICAtSSBjb25maWcKKyAKKyBNQUtFX0hPU1QgPQlATUFLRV9IT1NUQApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlLTMuODEvbWFrZWluZm8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2UtMy44MS9tYWtlaW5mby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGQ3NjA0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlLTMuODEvbWFrZWluZm8ucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorQWxsb3cgZG9jcyB0byBidWlsZCB3aXRoIG1ha2VpbmZvIDUuWCwgZml4aW5nIHRoZSBlcnJvcjoKKworZG9jL21ha2UudGV4aTo4MTY1OiBAaXRlbXggbXVzdCBmb2xsb3cgQGl0ZW0KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitSUAorMjAxNC8wMy8yOQorCitJbmRleDogbWFrZS0zLjgxL2RvYy9tYWtlLnRleGkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBtYWtlLTMuODEub3JpZy9kb2MvbWFrZS50ZXhpCTIwMDYtMDQtMDEgMDY6MzY6NDAuMDAwMDAwMDAwICswMDAwCisrKysgbWFrZS0zLjgxL2RvYy9tYWtlLnRleGkJMjAxNC0wMy0yOSAwOTozOTo1MS4wMDc3MjcwMTIgKzAwMDAKK0BAIC04MTYyLDcgKzgxNjIsNyBAQAorIHJhcmVseSBuZWVkIHRvIHNwZWNpZnkgdGhpcyBvcHRpb24gc2luY2UgQHNhbXB7bWFrZX0gZG9lcyBpdCBmb3IgeW91OworIHNlZSBAcmVmey13IE9wdGlvbiwgLFRoZSBAc2FtcHstLXByaW50LWRpcmVjdG9yeX0gT3B0aW9ufS4pCisgCistQGl0ZW14IC0tbm8tcHJpbnQtZGlyZWN0b3J5CisrQGl0ZW0gLS1uby1wcmludC1kaXJlY3RvcnkKKyBAY2luZGV4IEBjb2Rley0tbm8tcHJpbnQtZGlyZWN0b3J5fQorIERpc2FibGUgcHJpbnRpbmcgb2YgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHVuZGVyIEBjb2Rley13fS4KKyBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiBAY29kZXstd30gaXMgdHVybmVkIG9uIGF1dG9tYXRpY2FsbHksCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2UuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2VhNjA1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlLmluYwpAQCAtMCwwICsxLDEwIEBACitTVU1NQVJZID0gIkdOVSB0b29sIHRoYXQgY29udHJvbHMgdGhlIGJ1aWxkIHByb2Nlc3MiCitERVNDUklQVElPTiA9ICJNYWtlIGlzIGEgdG9vbCB3aGljaCBjb250cm9scyB0aGUgZ2VuZXJhdGlvbiBvZiBleGVjdXRhYmxlcyBhbmQgb3RoZXIgbm9uLXNvdXJjZSBmaWxlcyBvZiBhIFwKK3Byb2dyYW0gZnJvbSB0aGUgcHJvZ3JhbSdzIHNvdXJjZSBmaWxlcy4gIE1ha2UgZ2V0cyBpdHMga25vd2xlZGdlIG9mIGhvdyB0byBidWlsZCB5b3VyIHByb2dyYW0gZnJvbSBhIGZpbGUgXAorY2FsbGVkIHRoZSBtYWtlZmlsZSwgd2hpY2ggbGlzdHMgZWFjaCBvZiB0aGUgbm9uLXNvdXJjZSBmaWxlcyBhbmQgaG93IHRvIGNvbXB1dGUgaXQgZnJvbSBvdGhlciBmaWxlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbWFrZS8iCitTRUNUSU9OID0gImRldmVsIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vbWFrZS9tYWtlLSR7UFZ9LnRhci5iejIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnIHRleGluZm8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZV8zLjgxLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlXzMuODEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhhNzliMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZV8zLjgxLmJiCkBAIC0wLDAgKzEsMTUgQEAKK1BSID0gInIxIgorCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MzYxYjZiODM3Y2FkMjZjNjkwMGE5MjZiNjJhYWRhNWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvQ09QWUlORzttZDU9OGNhNDNjYmM4NDJjMjMzNmU4MzU5MjZjMjE2NmMyOGIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2xvYi9DT1BZSU5HLkxJQjttZDU9NGE3NzBiNjdlNmJlMGY2MGRhMjQ0YmViMmRlMGZjZTQiCisKK3JlcXVpcmUgbWFrZS5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL21ha2VfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIgorU1JDX1VSSSArPSAiZmlsZTovL21ha2VpbmZvLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzU0ODUzZTBiMmRhOTBjNTI3ZTM1YWFiYjhkNmYxZTYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjNlNjkwMjM3NzFlMjM5MDhmNWQ1NTkyOTU0ZDgyNzFkM2Q2YWYwOTY5M2NlY2ZkMjljZWU2ZmRlODU1MGRjOCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlXzQuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZV80LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiMGQ3YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZV80LjEuYmIKQEAgLTAsMCArMSwxMiBAQAorTElDRU5TRSA9ICJHUEx2MyAmIExHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dsb2IvQ09QWUlORy5MSUI7bWQ1PTRhNzcwYjY3ZTZiZTBmNjBkYTI0NGJlYjJkZTBmY2U0IgorcmVxdWlyZSBtYWtlLmluYworCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1ndWlsZSIKKworU1JDX1VSSVttZDVzdW1dID0gIjU3YTdhMjI0YTgyMmY5NDc4OWE1ODdjY2JjZWRmZjY5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBiYzc2MTMzODk2NTBlZTZhMjQ1NTRiNTI1NzJhMjcyZjczNTYxNjRmZDJjNDEzMmIwYmNmMTMxMjNlNGZjYTUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2VkZXZzL21ha2VkZXZzL0NPUFlJTkcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlZGV2cy9tYWtlZGV2cy9DT1BZSU5HLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhODkwMmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlZGV2cy9tYWtlZGV2cy9DT1BZSU5HLnBhdGNoCkBAIC0wLDAgKzEsMzQ2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworZGlmZiAtcnVOIG1ha2VkZXZzLTEuMC4wLW9yaWcvQ09QWUlORyBtYWtlZGV2cy0xLjAuMC9DT1BZSU5HCistLS0gbWFrZWRldnMtMS4wLjAtb3JpZy9DT1BZSU5HCTE5NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbWFrZWRldnMtMS4wLjAvQ09QWUlORwkyMDEwLTEyLTA5IDE2OjQyOjIwLjI3NDk4NDY2NSArMDgwMAorQEAgLTAsMCArMSwzNDAgQEAKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisrCisrIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICAgICAgICAgICAgICAgICAgICAgIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKysgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisrIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorKworKwkJCSAgICBQcmVhbWJsZQorKworKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCisrTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCisrR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKKytGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCisrdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQorK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworK3lvdXIgcHJvZ3JhbXMsIHRvby4KKysKKysgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKKytwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CisraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgorK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAorK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CisraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorKworKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KKytUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKysKKysgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKKytncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKKyt5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKKytyaWdodHMuCisrCisrICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisrKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKKytkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorKworKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KKyt0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQorK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCisrdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKKythdXRob3JzJyByZXB1dGF0aW9ucy4KKysKKysgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCisrcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKKytwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKKytwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorKworKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKKyttb2RpZmljYXRpb24gZm9sbG93LgorKwwKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorKworKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCisrdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6CisrdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKKytlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KKyt0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKysKKytBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKKytydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCisraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorKworKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCisrc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91CisrY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKKytub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CisrYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisrCisrWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCisreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKysKKysgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KKytvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCisrZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCisrYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKysKKysgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisrICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisrCisrICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKysgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKysgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisrICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKysgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKysgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisrICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKysgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKysgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKysgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKysMCisrVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgorK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCisrYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCisrdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgorK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCisrZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorKworK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAorK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisrCisrSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQorK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCisrdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAorK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKysKKysgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKysgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisrICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisrICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKysgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisrICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisrICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisrICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKysgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisrCisrVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCisrY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKKythc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KKytjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCisrc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCisrYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKKytmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CisraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorKworK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKKythY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CisrYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCisrZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90CisrY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKysMCisrICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKytleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0Cisrb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCisrdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCisrdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKKytwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisrCisrICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKKytzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKKyttb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKKyt0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKysKKysgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KKyt0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KKytZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bworK3RoaXMgTGljZW5zZS4KKysKKysgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKKytpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKKytvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CisrZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKKytkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCisrTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKKytsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CisrYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCisrdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisrCisrSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCisrYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCisrY2lyY3Vtc3RhbmNlcy4KKysKKytJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CisrcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKKytzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCisraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCisraW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCisrZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAorK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0Cisrc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZworK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAorK2ltcG9zZSB0aGF0IGNob2ljZS4KKysKKytUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KKytiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKysMCisrICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKKyttYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKKyt0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCisrY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCisrdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorKworK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KKytzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKKytlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKKyt0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrRm91bmRhdGlvbi4KKysKKysgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKKytwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCisrdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCisrbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKKytvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCisrb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisrCisrCQkJICAgIE5PIFdBUlJBTlRZCisrCisrICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKKytGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KKytPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCisrUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKKytPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKKytUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCisrUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCisrUkVQQUlSIE9SIENPUlJFQ1RJT04uCisrCisrICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCisrV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCisrSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCisrT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCisrUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCisrUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorKworKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKysMCisrCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKysKKysgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKKytwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CisrZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisrCisrICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAorK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKKytjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAorK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorKworKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisrCisrCisrQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisrCisrSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcworK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisrCisrICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisrICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKysgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorKworK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKKytiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKKyttb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorKworK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCisrc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKKytuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisrCisrICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisrICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKysKKysgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKysKKytUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KKytwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZWRldnMvbWFrZWRldnMvbWFrZWRldnMuYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2VkZXZzL21ha2VkZXZzL21ha2VkZXZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcxZjMzZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2VkZXZzL21ha2VkZXZzL21ha2VkZXZzLmMKQEAgLTAsMCArMSw1ODkgQEAKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNpbmNsdWRlIDxsaWJnZW4uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjZGVmaW5lIE1JTk9SQklUUwk4CisjZGVmaW5lIE1LREVWKG1hLG1pKQkoKChtYSkgPDwgTUlOT1JCSVRTKSB8IChtaSkpCisjZGVmaW5lIE1BWF9JRF9MRU4gICAgICA0MAorI2RlZmluZSBNQVhfTkFNRV9MRU4gICAgNDAKKyNpZm5kZWYgUEFUSF9NQVgKKyNkZWZpbmUgUEFUSF9NQVggICAgICAgIDQwOTYKKyNlbmRpZgorI2RlZmluZSBWRVJTSU9OICAgICAgICAgIjEuMC4xIgorCisvKiBUaGVzZSBhcmUgYWxsIHN0b2xlbiBmcm9tIGJ1c3lib3gncyBsaWJiYiB0byBtYWtlCisgKiBlcnJvciBoYW5kbGluZyBzaW1wbGVyIChhbmQgc2luY2UgSSBtYWludGFpbiBidXN5Ym94LAorICogSSdtIHJhdGhlciBwYXJ0aWFsIHRvIHRoZXNlIGZvciBlcnJvciBoYW5kbGluZykuCisgKiAgLUVyaWsKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGFwcF9uYW1lID0gIm1ha2VkZXZzIjsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBtZW1vcnlfZXhoYXVzdGVkID0gIm1lbW9yeSBleGhhdXN0ZWQiOworc3RhdGljIGNoYXIgZGVmYXVsdF9yb290ZGlyW109Ii4iOworc3RhdGljIGNoYXIgKnJvb3RkaXIgPSBkZWZhdWx0X3Jvb3RkaXI7CitzdGF0aWMgaW50IHRyYWNlID0gMDsKKworc3RydWN0IG5hbWVfaWQgeworCWNoYXIgbmFtZVtNQVhfTkFNRV9MRU4rMV07CisJdW5zaWduZWQgbG9uZyBpZDsKKwlzdHJ1Y3QgbmFtZV9pZCAqbmV4dDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbmFtZV9pZCAqdXNyX2xpc3QgPSBOVUxMOworc3RhdGljIHN0cnVjdCBuYW1lX2lkICpncnBfbGlzdCA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIHZlcnJvcl9tc2coY29uc3QgY2hhciAqcywgdmFfbGlzdCBwKQoreworCWZmbHVzaChzdGRvdXQpOworCWZwcmludGYoc3RkZXJyLCAiJXM6ICIsIGFwcF9uYW1lKTsKKwl2ZnByaW50ZihzdGRlcnIsIHMsIHApOworfQorCitzdGF0aWMgdm9pZCBlcnJvcl9tc2dfYW5kX2RpZShjb25zdCBjaGFyICpzLCAuLi4pCit7CisJdmFfbGlzdCBwOworCisJdmFfc3RhcnQocCwgcyk7CisJdmVycm9yX21zZyhzLCBwKTsKKwl2YV9lbmQocCk7CisJcHV0YygnXG4nLCBzdGRlcnIpOworCWV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKworc3RhdGljIHZvaWQgdnBlcnJvcl9tc2coY29uc3QgY2hhciAqcywgdmFfbGlzdCBwKQoreworCWludCBlcnIgPSBlcnJubzsKKworCWlmIChzID09IDApCisJCXMgPSAiIjsKKwl2ZXJyb3JfbXNnKHMsIHApOworCWlmICgqcykKKwkJcyA9ICI6ICI7CisJZnByaW50ZihzdGRlcnIsICIlcyVzXG4iLCBzLCBzdHJlcnJvcihlcnIpKTsKK30KKworc3RhdGljIHZvaWQgcGVycm9yX21zZ19hbmRfZGllKGNvbnN0IGNoYXIgKnMsIC4uLikKK3sKKwl2YV9saXN0IHA7CisKKwl2YV9zdGFydChwLCBzKTsKKwl2cGVycm9yX21zZyhzLCBwKTsKKwl2YV9lbmQocCk7CisJZXhpdChFWElUX0ZBSUxVUkUpOworfQorCitzdGF0aWMgRklMRSAqeGZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCit7CisJRklMRSAqZnA7CisKKwlpZiAoKGZwID0gZm9wZW4ocGF0aCwgbW9kZSkpID09IE5VTEwpCisJCXBlcnJvcl9tc2dfYW5kX2RpZSgiJXMiLCBwYXRoKTsKKwlyZXR1cm4gZnA7Cit9CisKK3N0YXRpYyBjaGFyICp4c3RyZHVwKGNvbnN0IGNoYXIgKnMpCit7CisJY2hhciAqdDsKKworCWlmIChzID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJdCA9IHN0cmR1cChzKTsKKworCWlmICh0ID09IE5VTEwpCisJCWVycm9yX21zZ19hbmRfZGllKG1lbW9yeV9leGhhdXN0ZWQpOworCisJcmV0dXJuIHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmFtZV9pZCogYWxsb2Nfbm9kZSh2b2lkKQoreworCXN0cnVjdCBuYW1lX2lkICpub2RlOworCW5vZGUgPSAoc3RydWN0IG5hbWVfaWQqKW1hbGxvYyhzaXplb2Yoc3RydWN0IG5hbWVfaWQpKTsKKwlpZiAobm9kZSA9PSBOVUxMKSB7CisJCWVycm9yX21zZ19hbmRfZGllKG1lbW9yeV9leGhhdXN0ZWQpOworCX0KKwltZW1zZXQoKHZvaWQgKilub2RlLT5uYW1lLCAwLCBNQVhfTkFNRV9MRU4rMSk7CisJbm9kZS0+aWQgPSAweGZmZmZmZmZmOworCW5vZGUtPm5leHQgPSBOVUxMOworCXJldHVybiBub2RlOworfQorCitzdGF0aWMgc3RydWN0IG5hbWVfaWQqIHBhcnNlX2xpbmUoY2hhciAqbGluZSkKK3sKKwljaGFyICpwOworCWludCBpOworCWNoYXIgaWRfYnVmW01BWF9JRF9MRU4rMV07CisJc3RydWN0IG5hbWVfaWQgKm5vZGU7CisJbm9kZSA9IGFsbG9jX25vZGUoKTsKKwlwID0gbGluZTsKKwlpID0gMDsKKwkvLyBHZXQgbmFtZSBmaWVsZAorCXdoaWxlICgqcCAhPSAnOicpIHsKKwkJaWYgKGkgPiBNQVhfTkFNRV9MRU4pCisJCQllcnJvcl9tc2dfYW5kX2RpZSgiTmFtZSBmaWVsZCB0b28gbG9uZyIpOworCQlub2RlLT5uYW1lW2krK10gPSAqcCsrOworCX0KKwlub2RlLT5uYW1lW2ldID0gJ1wwJzsKKwlwKys7CisJLy8gU2tpcCB0aGUgc2Vjb25kIGZpZWxkCisJd2hpbGUgKCpwICE9ICc6JykKKwkJcCsrOworCXArKzsKKwkvLyBHZXQgaWQgZmllbGQKKwlpID0gMDsKKwl3aGlsZSAoKnAgIT0gJzonKSB7CisJCWlmIChpID4gTUFYX0lEX0xFTikKKwkJCWVycm9yX21zZ19hbmRfZGllKCJJRCBmaWxlZCB0b28gbG9uZyIpOworCQlpZF9idWZbaSsrXSA9ICpwKys7CisJfQorCWlkX2J1ZltpXSA9ICdcMCc7CisJbm9kZS0+aWQgPSBhdG9sKGlkX2J1Zik7CisJcmV0dXJuIG5vZGU7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9saXN0X2Zyb21fZmlsZShGSUxFICpmaWxlLCBzdHJ1Y3QgbmFtZV9pZCAqKnBsaXN0KQoreworCWNoYXIgKmxpbmU7CisJaW50IGxlbiA9IDA7CisJc2l6ZV90IGxlbmd0aCA9IDI1NjsKKwlzdHJ1Y3QgbmFtZV9pZCAqbm9kZSwgKmN1cjsKKworCWlmKChsaW5lID0gKGNoYXIgKiltYWxsb2MobGVuZ3RoKSkgPT0gTlVMTCkgeworCQllcnJvcl9tc2dfYW5kX2RpZShtZW1vcnlfZXhoYXVzdGVkKTsKKwl9CisKKwl3aGlsZSAoKGxlbiA9IGdldGxpbmUoJmxpbmUsICZsZW5ndGgsIGZpbGUpKSAhPSAtMSkgeworCQlub2RlID0gcGFyc2VfbGluZShsaW5lKTsKKwkJaWYgKCpwbGlzdCA9PSBOVUxMKSB7CisJCQkqcGxpc3QgPSBub2RlOworCQkJY3VyID0gKnBsaXN0OworCQl9IGVsc2UgeworCQkJY3VyLT5uZXh0ID0gbm9kZTsKKwkJCWN1ciA9IGN1ci0+bmV4dDsKKwkJfQorCX0KKworCWlmIChsaW5lKQorCQlmcmVlKGxpbmUpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjb252ZXJ0Mmd1aWQoY2hhciAqaWRfYnVmLCBzdHJ1Y3QgbmFtZV9pZCAqc2VhcmNoX2xpc3QpCit7CisJY2hhciAqcDsKKwlpbnQgaXNudW07CisJc3RydWN0IG5hbWVfaWQgKm5vZGU7CisJcCA9IGlkX2J1ZjsKKwlpc251bSA9IDE7CisJd2hpbGUgKCpwICE9ICdcMCcpIHsKKwkJaWYgKCFpc2RpZ2l0KCpwKSkgeworCQkJaXNudW0gPSAwOworCQkJYnJlYWs7CisJCX0KKwkJcCsrOworCX0KKwlpZiAoaXNudW0pIHsKKwkJLy8gQ2hlY2sgZm9yIGJhZCB1c2VyL2dyb3VwIG5hbWUKKwkJbm9kZSA9IHNlYXJjaF9saXN0OworCQl3aGlsZSAobm9kZSAhPSBOVUxMKSB7CisJCQlpZiAoIXN0cm5jbXAobm9kZS0+bmFtZSwgaWRfYnVmLCBzdHJsZW4oaWRfYnVmKSkpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IEJhZCB1c2VyL2dyb3VwIG5hbWUgJXMgZGV0ZWN0ZWRcbiIsIGlkX2J1Zik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlub2RlID0gbm9kZS0+bmV4dDsKKwkJfQorCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYXRvbChpZF9idWYpOworCX0gZWxzZSB7CisJCW5vZGUgPSBzZWFyY2hfbGlzdDsKKwkJd2hpbGUgKG5vZGUgIT0gTlVMTCkgeworCQkJaWYgKCFzdHJuY21wKG5vZGUtPm5hbWUsIGlkX2J1Ziwgc3RybGVuKGlkX2J1ZikpKQorCQkJCXJldHVybiBub2RlLT5pZDsKKwkJCW5vZGUgPSBub2RlLT5uZXh0OworCQl9CisJCWVycm9yX21zZ19hbmRfZGllKCJObyBlbnRyeSBmb3IgJXMgaW4gc2VhcmNoIGxpc3QiLCBpZF9idWYpOworCX0KK30KKworc3RhdGljIHZvaWQgZnJlZV9saXN0KHN0cnVjdCBuYW1lX2lkICpsaXN0KQoreworCXN0cnVjdCBuYW1lX2lkICpjdXI7CisJY3VyID0gbGlzdDsKKwl3aGlsZSAoY3VyICE9IE5VTEwpIHsKKwkJbGlzdCA9IGN1cjsKKwkJY3VyID0gY3VyLT5uZXh0OworCQlmcmVlKGxpc3QpOworCX0KK30KKworc3RhdGljIHZvaWQgYWRkX25ld19kaXJlY3RvcnkoY2hhciAqbmFtZSwgY2hhciAqcGF0aCwKKwkJdW5zaWduZWQgbG9uZyB1aWQsIHVuc2lnbmVkIGxvbmcgZ2lkLCB1bnNpZ25lZCBsb25nIG1vZGUpCit7CisJaWYgKHRyYWNlKQorCQlmcHJpbnRmKHN0ZGVyciwgIkRpcmVjdG9yeTogJXMgJXMgIFVJRDogJWxkICBHSUQgJWxkICBNT0RFOiAlMDRsbyIsIHBhdGgsIG5hbWUsIHVpZCwgZ2lkLCBtb2RlKTsKKworCWlmIChta2RpcihwYXRoLCBtb2RlKSA8IDApIHsKKwkJaWYgKEVFWElTVCA9PSBlcnJubykgeworCQkJLyogVW5jb25kaXRpb25hbGx5IGFwcGx5IHRoZSBtb2RlIHNldHRpbmcgdG8gdGhlIGV4aXN0aW5nIGRpcmVjdG9yeS4KKwkJCSAqIFhYWCBzaG91bGQgb3V0cHV0IHNvbWV0aGluZyB3aGVuIHRyYWNlICovCisJCQljaG1vZChwYXRoLCBtb2RlICYgflNfSUZNVCk7CisJCX0KKwl9CisJaWYgKHRyYWNlKQorCQlwdXRjKCdcbicsIHN0ZGVycik7CisJY2hvd24ocGF0aCwgdWlkLCBnaWQpOworfQorCitzdGF0aWMgdm9pZCBhZGRfbmV3X2RldmljZShjaGFyICpuYW1lLCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIHVpZCwKKwl1bnNpZ25lZCBsb25nIGdpZCwgdW5zaWduZWQgbG9uZyBtb2RlLCBkZXZfdCByZGV2KQoreworCWludCBzdGF0dXM7CisJc3RydWN0IHN0YXQgc2I7CisKKwlpZiAodHJhY2UpIHsKKwkJZnByaW50ZihzdGRlcnIsICJEZXZpY2U6ICVzICVzICBVSUQ6ICVsZCAgR0lEOiAlbGQgIE1PREU6ICUwNGxvICBNQUpPUjogJWQgIE1JTk9SOiAlZCIsCisJCQkJcGF0aCwgbmFtZSwgdWlkLCBnaWQsIG1vZGUsIChzaG9ydCkocmRldiA+PiA4KSwgKHNob3J0KShyZGV2ICYgMHhmZikpOworCX0KKworCW1lbXNldCgmc2IsIDAsIHNpemVvZihzdHJ1Y3Qgc3RhdCkpOworCXN0YXR1cyA9IGxzdGF0KHBhdGgsICZzYik7CisJaWYgKHN0YXR1cyA+PSAwKSB7CisJCS8qIEl0IGlzIG9rIGZvciBzb21lIHR5cGVzIG9mIGZpbGVzIHRvIG5vdCBleGl0IG9uIGRpc2sgKHN1Y2ggYXMKKwkJICogZGV2aWNlIG5vZGVzKSwgYnV0IGlmIHRoZXkgX2RvXyBleGlzdCwgdGhlIGZpbGUgdHlwZSBiaXRzIGhhZAorCQkgKiBiZXR0ZXIgbWF0Y2ggdGhvc2Ugb2YgdGhlIGFjdHVhbCBmaWxlIG9yIHN0cmFuZ2UgdGhpbmdzIHdpbGwgaGFwcGVuLi4uICovCisJCWlmICgobW9kZSAmIFNfSUZNVCkgIT0gKHNiLnN0X21vZGUgJiBTX0lGTVQpKSB7CisJCQlpZiAodHJhY2UpCisJCQkJcHV0YygnXG4nLCBzdGRlcnIpOworCQkJZXJyb3JfbXNnX2FuZF9kaWUoIiVzOiBleGlzdGluZyBmaWxlICgwNCVvKSB0eXBlIGRvZXMgbm90IG1hdGNoIHNwZWNpZmllZCBmaWxlIHR5cGUgKDA0JWxvKSEiLAorCQkJCQkJcGF0aCwgKHNiLnN0X21vZGUgJiBTX0lGTVQpLCAobW9kZSAmIFNfSUZNVCkpOworCQl9CisJCWlmIChtb2RlICE9IHNiLnN0X21vZGUpIHsKKwkJCWlmICh0cmFjZSkKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiAtLSBhcHBseWluZyBuZXcgbW9kZSAwNCVsbyAob2xkIHdhcyAwNCVvKVxuIiwgbW9kZSAmIH5TX0lGTVQsIHNiLnN0X21vZGUgJiB+U19JRk1UKTsKKwkJCS8qIEFwcGx5IHRoZSBtb2RlIHNldHRpbmcgdG8gdGhlIGV4aXN0aW5nIGRldmljZSBub2RlICovCisJCQljaG1vZChwYXRoLCBtb2RlICYgflNfSUZNVCk7CisJCX0KKwkJZWxzZSB7CisJCQlpZiAodHJhY2UpCisJCQkJZnByaW50ZihzdGRlcnIsICIgLS0gZXh0cmFuZW91cyBlbnRyeSBpbiB0YWJsZVxuIiwgcGF0aCk7CisJCX0KKwl9CisJZWxzZSB7CisJCW1rbm9kKHBhdGgsIG1vZGUsIHJkZXYpOworCQlpZiAodHJhY2UpCisJCQlwdXRjKCdcbicsIHN0ZGVycik7CisKKwl9CisKKwljaG93bihwYXRoLCB1aWQsIGdpZCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9uZXdfZmlsZShjaGFyICpuYW1lLCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIHVpZCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgZ2lkLCB1bnNpZ25lZCBsb25nIG1vZGUpCit7CisJaWYgKHRyYWNlKSB7CisJCWZwcmludGYoc3RkZXJyLCAiRmlsZTogJXMgJXMgIFVJRDogJWxkICBHSUQ6ICVsZCAgTU9ERTogJTA0bG9cbiIsCisJCQlwYXRoLCBuYW1lLCBnaWQsIHVpZCwgbW9kZSk7CisJfQorCisJaW50IGZkID0gb3BlbihwYXRoLE9fQ1JFQVQgfCBPX1dST05MWSwgbW9kZSk7CisJaWYgKGZkIDwgMCkgeworCQllcnJvcl9tc2dfYW5kX2RpZSgiJXM6IGZpbGUgY2FuIG5vdCBiZSBjcmVhdGVkISIsIHBhdGgpOworCX0gZWxzZSB7CisJCWNsb3NlKGZkKTsKKwl9CisJY2htb2QocGF0aCwgbW9kZSk7CisJY2hvd24ocGF0aCwgdWlkLCBnaWQpOworfQorCisKK3N0YXRpYyB2b2lkIGFkZF9uZXdfZmlmbyhjaGFyICpuYW1lLCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIHVpZCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgZ2lkLCB1bnNpZ25lZCBsb25nIG1vZGUpCit7CisJaWYgKHRyYWNlKSB7CisJCXByaW50ZigiRmlmbzogJXMgJXMgIFVJRDogJWxkICBHSUQ6ICVsZCAgTU9ERTogJTA0bG9cbiIsCisJCQlwYXRoLCBuYW1lLCBnaWQsIHVpZCwgbW9kZSk7CisJfQorCisJaW50IHN0YXR1czsKKwlzdHJ1Y3Qgc3RhdCBzYjsKKworCW1lbXNldCgmc2IsIDAsIHNpemVvZihzdHJ1Y3Qgc3RhdCkpOworCXN0YXR1cyA9IHN0YXQocGF0aCwgJnNiKTsKKworCisJLyogVXBkYXRlIHRoZSBtb2RlIGlmIHdlIGV4aXN0IGFuZCBhcmUgYSBmaWZvIGFscmVhZHkgKi8KKwlpZiAoc3RhdHVzID49IDAgJiYgU19JU0ZJRk8oc2Iuc3RfbW9kZSkpIHsKKwkJY2htb2QocGF0aCwgbW9kZSk7CisJfSBlbHNlIHsKKwkJaWYgKG1rbm9kKHBhdGgsIG1vZGUsIDApKQorCQkJZXJyb3JfbXNnX2FuZF9kaWUoIiVzOiBmaWxlIGNhbiBub3QgYmUgY3JlYXRlZCB3aXRoIG1rbm9kISIsIHBhdGgpOworCX0KKwljaG93bihwYXRoLCB1aWQsIGdpZCk7Cit9CisKKworLyogIGRldmljZSB0YWJsZSBlbnRyaWVzIHRha2UgdGhlIGZvcm0gb2Y6CisgICAgPHBhdGg+CTx0eXBlPiA8bW9kZT4JPHVzcj4JPGdycD4JPG1ham9yPgk8bWlub3I+CTxzdGFydD4JPGluYz4JPGNvdW50PgorICAgIC9kZXYvbWVtICAgIGMgICAgICA2NDAgICAgICAwICAgICAgIDAgICAgICAgMSAgICAgICAxICAgICAgIDAgICAgICAgIDAgICAgICAgIC0KKyAgICAvZGV2L3plcm8gICBjICAgICAgNjQ0ICAgICAgcm9vdCAgICByb290ICAgIDEgICAgICAgNSAgICAgICAtICAgICAgICAtICAgICAgICAtCisKKyAgICB0eXBlIGNhbiBiZSBvbmUgb2Y6CisJZglBIHJlZ3VsYXIgZmlsZQorCWQJRGlyZWN0b3J5CisJYwlDaGFyYWN0ZXIgc3BlY2lhbCBkZXZpY2UgZmlsZQorCWIJQmxvY2sgc3BlY2lhbCBkZXZpY2UgZmlsZQorCXAJRmlmbyAobmFtZWQgcGlwZSkKKworICAgIEkgZG9uJ3QgYm90aGVyIHdpdGggc3ltbGlua3MgKHBlcm1pc3Npb25zIGFyZSBpcnJlbGV2YW50KSwgaGFyZAorICAgIGxpbmtzIChzcGVjaWFsIGNhc2VzIG9mIHJlZ3VsYXIgZmlsZXMpLCBvciBzb2NrZXRzICh3aHkgYm90aGVyKS4KKworICAgIFJlZ3VsYXIgZmlsZXMgbXVzdCBleGlzdCBpbiB0aGUgdGFyZ2V0IHJvb3QgZGlyZWN0b3J5LiAgSWYgYSBjaGFyLAorICAgIGJsb2NrLCBmaWZvLCBvciBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZC4KKyovCitzdGF0aWMgaW50IGludGVycHJldF90YWJsZV9lbnRyeShjaGFyICpsaW5lKQoreworCWNoYXIgKm5hbWU7CisJY2hhciB1c3JfYnVmW01BWF9JRF9MRU5dOworCWNoYXIgZ3JwX2J1ZltNQVhfSURfTEVOXTsKKwljaGFyIHBhdGhbNDA5Nl0sIHR5cGU7CisJdW5zaWduZWQgbG9uZyBtb2RlID0gMDc1NSwgdWlkID0gMCwgZ2lkID0gMCwgbWFqb3IgPSAwLCBtaW5vciA9IDA7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IDAsIGluY3JlbWVudCA9IDEsIGNvdW50ID0gMDsKKworCWlmICgwID4gc3NjYW5mKGxpbmUsICIlNDBzICVjICVsbyAlNDBzICU0MHMgJWx1ICVsdSAlbHUgJWx1ICVsdSIsIHBhdGgsCisJCSAgICAmdHlwZSwgJm1vZGUsIHVzcl9idWYsIGdycF9idWYsICZtYWpvciwgJm1pbm9yLCAmc3RhcnQsCisJCSAgICAmaW5jcmVtZW50LCAmY291bnQpKQorCXsKKwkJZnByaW50ZihzdGRlcnIsICIlczogc3NjYW5mIHJldHVybmVkIDwgMCBmb3IgbGluZSAnJXMnXG4iLCBhcHBfbmFtZSwgbGluZSk7CisJCXJldHVybiAxOworCX0KKworCXVpZCA9IGNvbnZlcnQyZ3VpZCh1c3JfYnVmLCB1c3JfbGlzdCk7CisJZ2lkID0gY29udmVydDJndWlkKGdycF9idWYsIGdycF9saXN0KTsKKworCWlmIChzdHJuY21wKHBhdGgsICIvIiwgMSkpIHsKKwkJZXJyb3JfbXNnX2FuZF9kaWUoIkRldmljZSB0YWJsZSBlbnRyaWVzIHJlcXVpcmUgYWJzb2x1dGUgcGF0aHMiKTsKKwl9CisJbmFtZSA9IHhzdHJkdXAocGF0aCArIDEpOworCS8qIHByZWZpeCBwYXRoIHdpdGggcm9vdGRpciAqLworCXNwcmludGYocGF0aCwgIiVzLyVzIiwgcm9vdGRpciwgbmFtZSk7CisKKwkvKiBYWFggV2h5IGlzIG5hbWUgcGFzc2VkIGludG8gYWxsIG9mIHRoZSBhZGRfbmV3XyooKSByb3V0aW5lcz8gKi8KKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlICdkJzoKKwkJbW9kZSB8PSBTX0lGRElSOworCQlhZGRfbmV3X2RpcmVjdG9yeShuYW1lLCBwYXRoLCB1aWQsIGdpZCwgbW9kZSk7CisJCWJyZWFrOworCWNhc2UgJ2YnOgorCQltb2RlIHw9IFNfSUZSRUc7CisJCWFkZF9uZXdfZmlsZShuYW1lLCBwYXRoLCB1aWQsIGdpZCwgbW9kZSk7CisJCWJyZWFrOworCWNhc2UgJ3AnOgorCQltb2RlIHw9IFNfSUZJRk87CisJCWFkZF9uZXdfZmlmbyhuYW1lLCBwYXRoLCB1aWQsIGdpZCwgbW9kZSk7CisJCWJyZWFrOworCWNhc2UgJ2MnOgorCWNhc2UgJ2InOgorCQltb2RlIHw9ICh0eXBlID09ICdjJykgPyBTX0lGQ0hSIDogU19JRkJMSzsKKwkJaWYgKGNvdW50ID4gMCkgeworCQkJaW50IGk7CisJCQlkZXZfdCByZGV2OworCQkJY2hhciBidWZbODBdOworCisJCQlmb3IgKGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgY291bnQ7IGkrKykgeworCQkJCXNwcmludGYoYnVmLCAiJXMlZCIsIG5hbWUsIGkpOworCQkJCXNwcmludGYocGF0aCwgIiVzLyVzJWQiLCByb290ZGlyLCBuYW1lLCBpKTsKKwkJCQkvKiBGSVhNRTogIE1LREVWIHVzZXMgaWxsaWNpdCBpbnNpZGVyIGtub3dsZWRnZSBvZiBrZXJuZWwKKwkJCQkgKiBtYWpvci9taW5vciByZXByZXNlbnRhdGlvbi4uLiAgKi8KKwkJCQlyZGV2ID0gTUtERVYobWFqb3IsIG1pbm9yICsgKGkgLSBzdGFydCkgKiBpbmNyZW1lbnQpOworCQkJCXNwcmludGYocGF0aCwgIiVzLyVzXDAiLCByb290ZGlyLCBidWYpOworCQkJCWFkZF9uZXdfZGV2aWNlKGJ1ZiwgcGF0aCwgdWlkLCBnaWQsIG1vZGUsIHJkZXYpOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogRklYTUU6ICBNS0RFViB1c2VzIGlsbGljaXQgaW5zaWRlciBrbm93bGVkZ2Ugb2Yga2VybmVsCisJCQkgKiBtYWpvci9taW5vciByZXByZXNlbnRhdGlvbi4uLiAgKi8KKwkJCWRldl90IHJkZXYgPSBNS0RFVihtYWpvciwgbWlub3IpOworCQkJYWRkX25ld19kZXZpY2UobmFtZSwgcGF0aCwgdWlkLCBnaWQsIG1vZGUsIHJkZXYpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycm9yX21zZ19hbmRfZGllKCJVbnN1cHBvcnRlZCBmaWxlIHR5cGUiKTsKKwl9CisJaWYgKG5hbWUpIGZyZWUobmFtZSk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgcGFyc2VfZGV2aWNlX3RhYmxlKEZJTEUgKiBmaWxlKQoreworCWNoYXIgKmxpbmU7CisJc2l6ZV90IGxlbmd0aCA9IDI1NjsKKwlpbnQgbGVuID0gMDsKKworCWlmKChsaW5lID0gKGNoYXIgKiltYWxsb2MobGVuZ3RoKSkgPT0gTlVMTCkgeworCQllcnJvcl9tc2dfYW5kX2RpZShtZW1vcnlfZXhoYXVzdGVkKTsKKwl9CisJLyogTG9va3Mgb2sgc28gZmFyLiAgVGhlIGdlbmVyYWwgcGxhbiBub3cgaXMgdG8gcmVhZCBpbiBvbmUKKwkgKiBsaW5lIGF0IGEgdGltZSwgdHJpbSBvZmYgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSwKKwkgKiBjaGVjayBmb3IgbGVhZGluZyBjb21tZW50IGRlbGltaXRlcnMgKCcjJykgb3IgYSBibGFuayBsaW5lLAorCSAqIHRoZW4gdHJ5IGFuZCBwYXJzZSB0aGUgbGluZSBhcyBhIGRldmljZSB0YWJsZSBlbnRyeS4gSWYgd2UgZmFpbAorCSAqIHRvIHBhcnNlIHRoaW5ncywgdHJ5IGFuZCBoZWxwIHRoZSBwb29yIGZvb2wgdG8gZml4IHRoZWlyCisJICogZGV2aWNlIHRhYmxlIHdpdGggYSB1c2VmdWwgZXJyb3IgbXNnLi4uICovCisKKwl3aGlsZSAoKGxlbiA9IGdldGxpbmUoJmxpbmUsICZsZW5ndGgsIGZpbGUpKSAhPSAtMSkgeworCQkvKiBGaXJzdCB0cmltIG9mZiBhbnkgd2hpdGVzcGFjZSAqLworCisJCS8qIHRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZSAqLworCQl3aGlsZSAobGVuID4gMCAmJiBpc3NwYWNlKGxpbmVbbGVuIC0gMV0pKQorCQkJbGluZVstLWxlbl0gPSAnXDAnOworCisJCS8qIHRyaW0gbGVhZGluZyB3aGl0ZXNwYWNlICovCisJCW1lbW1vdmUobGluZSwgJmxpbmVbc3Ryc3BuKGxpbmUsICIgXG5cclx0XHYiKV0sIGxlbiArIDEpOworCisJCS8qIElmIHRoaXMgaXMgTk9UIGEgY29tbWVudCBvciBhbiBlbXB0eSBsaW5lLCB0cnkgdG8gaW50ZXJwcmV0IGl0ICovCisJCWlmICgqbGluZSAhPSAnIycgJiYgKmxpbmUgIT0gJ1wwJykgaW50ZXJwcmV0X3RhYmxlX2VudHJ5KGxpbmUpOworCX0KKworCWlmIChsaW5lKQorCQlmcmVlKGxpbmUpOworfQorCitzdGF0aWMgaW50IHBhcnNlX2RldnRhYmxlKEZJTEUgKiBkZXZ0YWJsZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzYjsKKworCWlmIChsc3RhdChyb290ZGlyLCAmc2IpKSB7CisJCXBlcnJvcl9tc2dfYW5kX2RpZSgiJXMiLCByb290ZGlyKTsKKwl9CisJaWYgKGNoZGlyKHJvb3RkaXIpKQorCQlwZXJyb3JfbXNnX2FuZF9kaWUoIiVzIiwgcm9vdGRpcik7CisKKwlpZiAoZGV2dGFibGUpCisJCXBhcnNlX2RldmljZV90YWJsZShkZXZ0YWJsZSk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHsKKwl7InJvb3QiLCAxLCBOVUxMLCAncid9LAorCXsiaGVscCIsIDAsIE5VTEwsICdoJ30sCisJeyJ0cmFjZSIsIDAsIE5VTEwsICd0J30sCisJeyJ2ZXJzaW9uIiwgMCwgTlVMTCwgJ3YnfSwKKwl7ImRldnRhYmxlIiwgMSwgTlVMTCwgJ0QnfSwKKwl7TlVMTCwgMCwgTlVMTCwgMH0KK307CisKK3N0YXRpYyBjaGFyICpoZWxwdGV4dCA9CisJIlVzYWdlOiBtYWtlZGV2cyBbT1BUSU9OU11cbiIKKwkiQnVpbGQgZW50cmllcyBiYXNlZCB1cG9uIGRldmljZV90YWJsZS50eHRcblxuIgorCSJPcHRpb25zOlxuIgorCSIgIC1yLCAtZCwgLS1yb290PURJUiAgICAgQnVpbGQgZmlsZXN5c3RlbSBmcm9tIGRpcmVjdG9yeSBESVIgKGRlZmF1bHQ6IGN3ZClcbiIKKwkiICAtRCwgLS1kZXZ0YWJsZT1GSUxFICAgIFVzZSB0aGUgbmFtZWQgRklMRSBhcyBhIGRldmljZSB0YWJsZSBmaWxlXG4iCisJIiAgLWgsIC0taGVscCAgICAgICAgICAgICBEaXNwbGF5IHRoaXMgaGVscCB0ZXh0XG4iCisJIiAgLXQsIC0tdHJhY2UgICAgICAgICAgICBCZSB2ZXJib3NlXG4iCisJIiAgLXYsIC0tdmVyc2lvbiAgICAgICAgICBEaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb25cblxuIjsKKworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50IGMsIG9wdDsKKwlleHRlcm4gY2hhciAqb3B0YXJnOworCXN0cnVjdCBzdGF0IHN0YXRidWY7CisJY2hhciBwYXNzd2RfcGF0aFtQQVRIX01BWF07CisJY2hhciBncm91cF9wYXRoW1BBVEhfTUFYXTsKKwlGSUxFICpwYXNzd2RfZmlsZSA9IE5VTEw7CisJRklMRSAqZ3JvdXBfZmlsZSA9IE5VTEw7CisJRklMRSAqZGV2dGFibGUgPSBOVUxMOworCURJUiAqZGlyID0gTlVMTDsKKworCXVtYXNrICgwKTsKKworCWlmIChhcmdjPT0xKSB7CisJCWZwcmludGYoc3RkZXJyLCBoZWxwdGV4dCk7CisJCWV4aXQoMSk7CisJfQorCisJd2hpbGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiRDpkOnI6aHR2IiwKKwkJCWxvbmdfb3B0aW9ucywgJmMpKSA+PSAwKSB7CisJCXN3aXRjaCAob3B0KSB7CisJCWNhc2UgJ0QnOgorCQkJZGV2dGFibGUgPSB4Zm9wZW4ob3B0YXJnLCAiciIpOworCQkJaWYgKGZzdGF0KGZpbGVubyhkZXZ0YWJsZSksICZzdGF0YnVmKSA8IDApCisJCQkJcGVycm9yX21zZ19hbmRfZGllKG9wdGFyZyk7CisJCQlpZiAoc3RhdGJ1Zi5zdF9zaXplIDwgMTApCisJCQkJZXJyb3JfbXNnX2FuZF9kaWUoIiVzOiBub3QgYSBwcm9wZXIgZGV2aWNlIHRhYmxlIGZpbGUiLCBvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ2gnOgorCQkJcHJpbnRmKGhlbHB0ZXh0KTsKKwkJCWV4aXQoMCk7CisJCWNhc2UgJ3InOgorCQljYXNlICdkJzoJCQkJLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBta2ZzLmpmZnMsIGdlbmV4dDJmcywgZXRjLi4uICovCisJCQlpZiAocm9vdGRpciAhPSBkZWZhdWx0X3Jvb3RkaXIpIHsKKwkJCQllcnJvcl9tc2dfYW5kX2RpZSgicm9vdCBkaXJlY3Rvcnkgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlIik7CisJCQl9CisJCQlpZiAoKGRpciA9IG9wZW5kaXIob3B0YXJnKSkgPT0gTlVMTCkgeworCQkJCXBlcnJvcl9tc2dfYW5kX2RpZShvcHRhcmcpOworCQkJfSBlbHNlIHsKKwkJCQljbG9zZWRpcihkaXIpOworCQkJfQorCQkJLyogSWYgIi8iIGlzIHNwZWNpZmllZCwgdXNlICIiIGJlY2F1c2Ugcm9vdGRpciBpcyBhbHdheXMgcHJlcGVuZGVkIHRvIGEKKwkJCSAqIHN0cmluZyB0aGF0IHN0YXJ0cyB3aXRoICIvIiAqLworCQkJaWYgKDAgPT0gc3RyY21wKG9wdGFyZywgIi8iKSkKKwkJCQlyb290ZGlyID0geHN0cmR1cCgiIik7CisJCQllbHNlCisJCQkJcm9vdGRpciA9IHhzdHJkdXAob3B0YXJnKTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ3QnOgorCQkJdHJhY2UgPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSAndic6CisJCQlwcmludGYoIiVzOiAlc1xuIiwgYXBwX25hbWUsIFZFUlNJT04pOworCQkJZXhpdCgwKTsKKwkJZGVmYXVsdDoKKwkJCWZwcmludGYoc3RkZXJyLCBoZWxwdGV4dCk7CisJCQlleGl0KDEpOworCQl9CisJfQorCisJaWYgKGFyZ3Zbb3B0aW5kXSAhPSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCBoZWxwdGV4dCk7CisJCWV4aXQoMSk7CisJfQorCisJLy8gR2V0IG5hbWUtaWQgbWFwcGluZworCXNwcmludGYocGFzc3dkX3BhdGgsICIlcy9ldGMvcGFzc3dkIiwgcm9vdGRpcik7CisJc3ByaW50Zihncm91cF9wYXRoLCAiJXMvZXRjL2dyb3VwIiwgcm9vdGRpcik7CisJaWYgKChwYXNzd2RfZmlsZSA9IGZvcGVuKHBhc3N3ZF9wYXRoLCAiciIpKSAhPSBOVUxMKSB7CisJCWdldF9saXN0X2Zyb21fZmlsZShwYXNzd2RfZmlsZSwgJnVzcl9saXN0KTsKKwkJZmNsb3NlKHBhc3N3ZF9maWxlKTsKKwl9CisJaWYgKChncm91cF9maWxlID0gZm9wZW4oZ3JvdXBfcGF0aCwgInIiKSkgIT0gTlVMTCkgeworCQlnZXRfbGlzdF9mcm9tX2ZpbGUoZ3JvdXBfZmlsZSwgJmdycF9saXN0KTsKKwkJZmNsb3NlKGdyb3VwX2ZpbGUpOworCX0KKworCS8vIFBhcnNlIGRldnRhYmxlCisJaWYoZGV2dGFibGUpIHsKKwkJcGFyc2VfZGV2dGFibGUoZGV2dGFibGUpOworCQlmY2xvc2UoZGV2dGFibGUpOworCX0KKworCS8vIEZyZWUgbGlzdAorCWZyZWVfbGlzdCh1c3JfbGlzdCk7CisJZnJlZV9saXN0KGdycF9saXN0KTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZWRldnMvbWFrZWRldnNfMS4wLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlZGV2cy9tYWtlZGV2c18xLjAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmQ1ODcwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZWRldnMvbWFrZWRldnNfMS4wLjEuYmIKQEAgLTAsMCArMSwyNiBAQAorU1VNTUFSWSA9ICJUb29sIGZvciBjcmVhdGluZyBkZXZpY2Ugbm9kZXMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MzkzYTVjYTQ0NWY2OTY1ODczZWNhMDI1OWExN2Y4MzMiCitTRUNUSU9OID0gImJhc2UiCitTUkNfVVJJID0gImZpbGU6Ly9tYWtlZGV2cy5jIFwKKyAgICAgICAgICAgZmlsZTovL0NPUFlJTkcucGF0Y2giCisKK1MgPSAiJHtXT1JLRElSfSIKKworRklMRVNfJHtQTn1fYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgJHtkYXRhZGlyfSIKKworZG9fY29tcGlsZSgpIHsKKwkke0NDfSAke0NGTEFHU30gJHtMREZMQUdTfSAtbyAke1N9L21ha2VkZXZzICR7U30vbWFrZWRldnMuYworfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9zYmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke1N9L21ha2VkZXZzICR7RH0ke2Jhc2Vfc2JpbmRpcn0vbWFrZWRldnMKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0KKwlpbnN0YWxsIC1tIDY0NCAke0NPUkVCQVNFfS9tZXRhL2ZpbGVzL2RldmljZV90YWJsZS1taW5pbWFsLnR4dCAke0R9JHtkYXRhZGlyfS8KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlL2Nyb3NzLWNvbXBpbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2UvY3Jvc3MtY29tcGlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjkyNzA5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlL2Nyb3NzLWNvbXBpbGUucGF0Y2gKQEAgLTAsMCArMSw3MSBAQAorbWFrZSB0aGUgdG9vbCB0byBiZSBjcm9zcyBjb21waWxhYmxlLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBta2VsZkltYWdlL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1rZWxmSW1hZ2Uub3JpZy9jb25maWd1cmUuYWMJMjAxMi0wNy0xNCAxNDowNDo0OC45NjQ4OTg2NjcgLTA3MDAKKysrKyBta2VsZkltYWdlL2NvbmZpZ3VyZS5hYwkyMDEyLTA3LTE0IDE0OjEwOjQ3LjgwMDkxNjA4MyAtMDcwMAorQEAgLTcwLDYgKzcwLDkgQEAKKyAJCUFDX01TR19FUlJPUihbY2Mgbm90IGZvdW5kXSkKKyAJZmkKKyAJZXZhbCAiJHt3aXRoX2RlZmF1bHR9X0NDPSckQ0MnIgorKwlpZiB0ZXN0ICJ4JEhPU1RfQ0MiID0gJ3gnOyB0aGVuCisrCQlBQ19DSEVDS19QUk9HKFtIT1NUX0NDXSwgWyRDQ10sIFskQ0NdLCBbZ2NjXSwgWyRQQVRIXSkKKysJZmkKKyAJQUNfUFJPR19DUFAKKyAJaWYgdGVzdCAiJENQUCIgPSBubzsgdGhlbgorIAkJQUNfTVNHX0VSUk9SKFtjcHAgbm90IGZvdW5kXSkKK0BAIC0xNzIsNyArMTc1LDYgQEAKKyAKKyBkbmwgLS0tT3V0cHV0IHZhcmlhYmxlcy4uLgorIAorLUhPU1RfQ0M9JENDCisgSE9TVF9DRkxBR1M9IiRIT1NUX0NGTEFHUyAtTzIgLVdhbGwgXCQoSE9TVF9DUFBGTEFHUykiCisgCisgZG5sIFRPRE86IGZpZ3VyZSBvdXQgaG93IHRvIHNldCB0aGVzZSBhcHByb3ByaWF0ZWx5IGZvciBjb21waWxlcnMgb3RoZXIgdGhhbiBnY2MKK0luZGV4OiBta2VsZkltYWdlL2xpbnV4LWkzODYvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBta2VsZkltYWdlLm9yaWcvbGludXgtaTM4Ni9NYWtlZmlsZQkyMDEyLTA3LTE0IDE0OjA0OjQ4Ljk2NDg5ODY2NyAtMDcwMAorKysrIG1rZWxmSW1hZ2UvbGludXgtaTM4Ni9NYWtlZmlsZQkyMDEyLTA3LTE0IDE0OjA0OjQ5LjAzMjg5ODY3MSAtMDcwMAorQEAgLTQsNyArNCw3IEBACisgCisgJChMSTM4Nl9PQkopL21rZWxmLWxpbnV4LWkzODYubzogJChMSTM4Nl9ESVIpL21rZWxmLWxpbnV4LWkzODYuYyAkKExJMzg2X0RJUikvY29udmVydC5iaW4uYyAkKExJMzg2X0RFUCkKKyAJJChNS0RJUikgLXAgJChARCkKKy0JJChIT1NUX0NDKSAkKEhPU1RfQ0ZMQUdTKSAtYyAtZyAkPCAtbyAkQAorKwkkKENDKSAkKEhPU1RfQ0ZMQUdTKSAtYyAtZyAkPCAtbyAkQAorIAorIAorIGlmZGVmIEkzODZfQ0MKK0luZGV4OiBta2VsZkltYWdlL2xpbnV4LWlhNjQvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBta2VsZkltYWdlLm9yaWcvbGludXgtaWE2NC9NYWtlZmlsZQkyMDEyLTA3LTE0IDE0OjA0OjQ4Ljk2NDg5ODY2NyAtMDcwMAorKysrIG1rZWxmSW1hZ2UvbGludXgtaWE2NC9NYWtlZmlsZQkyMDEyLTA3LTE0IDE0OjA0OjQ5LjAzMjg5ODY3MSAtMDcwMAorQEAgLTQsNyArNCw3IEBACisgCisgJChMSUE2NF9PQkopL21rZWxmLWxpbnV4LWlhNjQubzogJChMSUE2NF9ESVIpL21rZWxmLWxpbnV4LWlhNjQuYyAkKExJQTY0X0RJUikvY29udmVydC5iaW4uYyAkKExJQTY0X0RFUCkKKyAJJChNS0RJUikgLXAgJChARCkKKy0JJChIT1NUX0NDKSAkKEhPU1RfQ0ZMQUdTKSAtYyAtZyAkPCAtbyAkQAorKwkkKENDKSAkKEhPU1RfQ0ZMQUdTKSAtYyAtZyAkPCAtbyAkQAorIAorIGlmZGVmIElBNjRfQ0MKKyAKK0luZGV4OiBta2VsZkltYWdlL21haW4vTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBta2VsZkltYWdlLm9yaWcvbWFpbi9NYWtlZmlsZQkyMDEyLTA3LTE0IDE0OjA0OjQ4Ljk2NDg5ODY2NyAtMDcwMAorKysrIG1rZWxmSW1hZ2UvbWFpbi9NYWtlZmlsZQkyMDEyLTA3LTE0IDE0OjA0OjQ5LjAzMjg5ODY3MSAtMDcwMAorQEAgLTQsMTEgKzQsMTEgQEAKKyAKKyAkKE9CSkRJUikvc2Jpbi9ta2VsZkltYWdlOiAkKE1LRUxGX09CSlMpICQoREVQUykKKyAJJChNS0RJUikgLXAgJChARCkKKy0JJChIT1NUX0NDKSAkKEhPU1RfQ0ZMQUdTKSAkKE1LRUxGX09CSlMpIC1vICRAICQoTElCUykKKysJJChDQykgJChIT1NUX0NGTEFHUykgJChNS0VMRl9PQkpTKSAtbyAkQCAkKExJQlMpCisgCisgJChPQkpESVIpL21haW4vbWtlbGZJbWFnZS5vOiBtYWluL21rZWxmSW1hZ2UuYyBpbmNsdWRlL21rZWxmSW1hZ2UuaCAkKERFUFMpCisgCSQoTUtESVIpIC1wICQoQEQpCistCSQoSE9TVF9DQykgJChIT1NUX0NGTEFHUykgLWMgJDwgLW8gJEAKKysJJChDQykgJChIT1NUX0NGTEFHUykgLWMgJDwgLW8gJEAKKyAKKyAkKE9CSkRJUikvbWFuL21hbjgvbWtlbGZJbWFnZS44OiBtYWluL21rZWxmSW1hZ2UubWFuCisgCSQoTUtESVIpIC1wICQoQEQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2UvZml4LW1ha2VmaWxlLXRvLWZpbmQtbGliei5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rZWxmaW1hZ2UvbWtlbGZpbWFnZS9maXgtbWFrZWZpbGUtdG8tZmluZC1saWJ6LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NmE2NWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2UvZml4LW1ha2VmaWxlLXRvLWZpbmQtbGliei5wYXRjaApAQCAtMCwwICsxLDMwIEBACitMZXQgbWFrZWZpbGUgZmluZCBsaWJ6IGFuZCB6bGliLmggYnkgQ0ZMQUdTIGFuZCBMREZMQUdTLgorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZDFhY2MzNi4uNmY4NjViMCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjIsNyArNjIsNyBAQCBBQ19DSEVDS19QUk9HKFtSUE1dLCAgIHJwbSwgICBycG0sICAgW10sIFskUEFUSF0pCisgQUNfQ0hFQ0tfUFJPRyhbU0VEXSwgICBzZWQsICAgc2VkLCAgIFtdLCBbJFBBVEhdKQorIEFDX0NIRUNLX1BST0coW0ZJTkRdLCAgZmluZCwgIGZpbmQsICBbXSwgWyRQQVRIXSkKKyAKKy1BQ19DSEVDS19IRUFERVIoemxpYi5oLCBBQ19DSEVDS19MSUIoeiwgaW5mbGF0ZUluaXRfLCBbQUNfREVGSU5FKEhBVkVfWkxJQl9ILCAxKSBMSUJTPSIkTElCUyAtbHoiXSkpCisrQUNfQ0hFQ0tfSEVBREVSKHpsaWIuaCwgQUNfQ0hFQ0tfTElCKHosIGluZmxhdGVJbml0XywgW0FDX0RFRklORShIQVZFX1pMSUJfSCwgMSkgTElCUz0iJExJQlMgJExERkxBR1MgLWx6Il0pKQorIAorIGRubCBGaW5kIHRoZSBkZWZhdWx0IHByb2dyYW1zCisgaWYgdGVzdCAid2l0aF9kZWZhdWx0IiAhPSBubyA7IHRoZW4KK0BAIC0xNzUsNyArMTc1LDcgQEAgZmkKKyAKKyBkbmwgLS0tT3V0cHV0IHZhcmlhYmxlcy4uLgorIAorLUhPU1RfQ0ZMQUdTPSIkSE9TVF9DRkxBR1MgLU8yIC1XYWxsIFwkKEhPU1RfQ1BQRkxBR1MpIgorK0hPU1RfQ0ZMQUdTPSIkSE9TVF9DRkxBR1MgLU8yIC1XYWxsIFwkKEhPU1RfQ1BQRkxBR1MpICRDRkxBR1MiCisgCisgZG5sIFRPRE86IGZpZ3VyZSBvdXQgaG93IHRvIHNldCB0aGVzZSBhcHByb3ByaWF0ZWx5IGZvciBjb21waWxlcnMgb3RoZXIgdGhhbiBnY2MKKyBJMzg2X0NGTEFHUz0iJEkzODZfQ0ZMQUdTIC1PcyAtZmZyZWVzdGFuZGluZyAtV2FsbCAtVyAtV25vLWZvcm1hdCBcJChJMzg2X0NQUEZMQUdTKSIKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rZWxmaW1hZ2UvbWtlbGZpbWFnZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg0NWI4YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rZWxmaW1hZ2UvbWtlbGZpbWFnZV9naXQuYmIKQEAgLTAsMCArMSwzNSBAQAorU1VNTUFSWSA9ICJVdGlsaXR5IGZvciBjcmVhdGluZyBFTEYgYm9vdCBpbWFnZXMgZm9yIEVMRi1iYXNlZCBMaW51eCBrZXJuZWwgaW1hZ2VzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5jb3JlYm9vdC5vcmcvTWtlbGZpbWFnZSIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWE1YmVkMmY2MGQzNTc2MThjYTE2MWFkNTM5ZjdjMGEiCisKK1NSQ1JFViA9ICI2ODZhNDhhMzM5YjMyMDAxODRjMjdlN2Y5OGQ0YzAzMTgwYjJiZTZjIgorUFYgPSAiNC4wK2dpdCR7U1JDUFZ9IgorUkVDSVBFX05PX1VQREFURV9SRUFTT04gPSAibWtlbGZpbWFnZSBoYXMgYmVlbiByZW1vdmVkIGluIGNvcmVib290IDQuMSByZWxlYXNlOiBcCitodHRwOi8vcmV2aWV3LmNvcmVib290Lm9yZy9naXR3ZWI/cD1jb3JlYm9vdC5naXQ7YT1jb21taXQ7aD0zNGZjNGFiODBiNTA3NzM5ZTI1ODBkNDkwZGZmNjdmY2ZkZGUxMWVhIgorCisKK0RFUEVORFMgKz0gInpsaWIiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vcmV2aWV3LmNvcmVib290Lm9yZy9wL2NvcmVib290O3Byb3RvY29sPWh0dHAgXAorICAgICAgICAgICBmaWxlOi8vY3Jvc3MtY29tcGlsZS5wYXRjaCAgIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1tYWtlZmlsZS10by1maW5kLWxpYnoucGF0Y2ggICBcCisgICAgICAgICAgIgorCitDTEVBTkJST0tFTiA9ICIxIgorCitTID0gIiR7V09SS0RJUn0vZ2l0L3V0aWwvbWtlbGZJbWFnZSIKKworQ0ZMQUdTICs9ICItZm5vLXN0YWNrLXByb3RlY3RvciIKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJIT1NUX0NDPScke0JVSUxEX0NDfSciCitFWFRSQV9PRU1BS0UgKz0gIkhPU1RfQ1BQRkxBR1M9JyR7QlVJTERfQ1BQRkxBR1N9JyIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtZGlyICR7RH0ke2RhdGFkaXJ9L21rZWxmSW1hZ2UvZWxmMzItaTM4NgorCXJtZGlyICR7RH0ke2RhdGFkaXJ9L21rZWxmSW1hZ2UKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvYWNfaW5pdF9maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvYWNfaW5pdF9maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIyYWYxMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9hY19pbml0X2ZpeC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitHZXQgdGhlIHZlcnNpb24gb2YgbWtsaWJzIGJ5IHNpbXBsZXIgbWVhbnMuIFRoZSBNS0xJQlNfVkVSU0lPTiBzdHJpbmcgaW4gdGhlIAorY29uZmlndXJlLmFjIGZpbGUgaXMgcmVwbGFjZWQgd2l0aCByZWFsIHZlcnNpb24gc3RyaW5nIGJ5IHRoZSAKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgZnVuY3Rpb24gZnJvbSB0aGUgcmVjaXBlIC5iYiBmaWxlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitEYXRlOiAyMDExLzAxLzI0CisKK0luZGV4OiBta2xpYnMvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWtsaWJzLm9yaWcvY29uZmlndXJlLmFjCTIwMTAtMDItMjEgMTc6MzQ6NTYuMDAwMDAwMDAwIC0wODAwCisrKysgbWtsaWJzL2NvbmZpZ3VyZS5hYwkyMDExLTAxLTI0IDE4OjUyOjE5Ljk0MzI0MjA3OSAtMDgwMAorQEAgLTEsNCArMSw0IEBACistQUNfSU5JVChbbWtsaWJzXSxtNF9lc3lzY21kKGRwa2ctcGFyc2VjaGFuZ2Vsb2cgfCBwZXJsIC1uZSAncHJpbnQgJDEgaWYgbS9eVmVyc2lvbjogKC4qKSQvOycpKQorK0FDX0lOSVQoW21rbGlic10sIE1LTElCU19WRVJTSU9OKQorIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ24gbm8tZGVmaW5lXSkKKyBBQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmhdKQorIEFNX01BSU5UQUlORVJfTU9ERQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2F2b2lkLWZhaWx1cmUtb24tc3ltYm9sLXByb3ZpZGVkLWJ5LWFwcGxpY2F0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2F2b2lkLWZhaWx1cmUtb24tc3ltYm9sLXByb3ZpZGVkLWJ5LWFwcGxpY2F0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNmQ2MmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvYXZvaWQtZmFpbHVyZS1vbi1zeW1ib2wtcHJvdmlkZWQtYnktYXBwbGljYXRpb24ucGF0Y2gKQEAgLTAsMCArMSwxMDIgQEAKK0Zyb20gZjE3MjEwMTEzMDYwNGU0YTllZmE1NzQ2ZjRkOGQzMGRlOTlhMGZkYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFl1YW5qaWUgSHVhbmcgPHl1YW5qaWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMTcgQXByIDIwMTUgMTQ6NDg6MjAgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gYXZvaWQgZmFpbHVyZSBvbiBzeW1ib2wgcHJvdmlkZWQgYnkgYXBwbGljYXRpb24KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1VuZGVmaW5lZCBzeW1ib2xzIGluIGEgbGlicmFyeSBjYW4gYmUgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uCit0aGF0IGxpbmtzIHRvIHRoZSBsaWJyYXJ5LCBzdWNoIGFzIGBsb2dzaW5rJyBpbiBsaWJtdWx0aXBhdGguc28uMC4KK1RoaXMgZml4IGNoZWNrcyB0aGUgdHlwZSBvZiBvYmplY3QgaW4gd2hpY2ggdGhlIHN5bWJvbCBpcyBuZWVkZWQKK2FuZCB0aGUgZXhpc3RlbmNlIG9mIHRoZSBzeW1ib2wgaW4gYXBwbGljYXRpb24sIHdoZW4gYSBzeW1ib2wKK2Nhbm5vdCBiZSBwcm92aWRlZCBieSBsaWJyYXJpZXMuIEl0IHByZXZlbnRzIGZhbHNlIGFsYXJtIG9uIGFic2VuY2UKK29mIHN5bWJvbHMuCisKK1NpZ25lZC1vZmYtYnk6IFl1YW5qaWUgSHVhbmcgPHl1YW5qaWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9ta2xpYnMgfCAyOCArKysrKysrKysrKysrKysrKysrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDI0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbWtsaWJzIGIvc3JjL21rbGlicworaW5kZXggYzU2MTRlYS4uYjBkOTAzNCAxMDA3NTUKKy0tLSBhL3NyYy9ta2xpYnMKKysrKyBiL3NyYy9ta2xpYnMKK0BAIC0xMzMsOSArMTMzLDkgQEAgY2xhc3MgU3ltYm9sKG9iamVjdCk6CisgICAgICAgICByZXR1cm4gJ0AnLmpvaW4ocmV0KQorIAorIGNsYXNzIFVuZGVmaW5lZFN5bWJvbChTeW1ib2wpOgorLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgd2VhaywgdmVyc2lvbiwgbGlicmFyeSk6CisrICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB3ZWFrLCB2ZXJzaW9uLCBsaWJyYXJ5LCBvYmplY3QpOgorICAgICAgICAgc3VwZXIoVW5kZWZpbmVkU3ltYm9sLCBzZWxmKS5fX2luaXRfXyhuYW1lLCB2ZXJzaW9uLCBsaWJyYXJ5KQorLSAgICAgICAgc2VsZi53ZWFrLCBzZWxmLmxpYnJhcnkgPSB3ZWFrLCBsaWJyYXJ5CisrICAgICAgICBzZWxmLndlYWssIHNlbGYubGlicmFyeSwgc2VsZi5vYmplY3QgPSB3ZWFrLCBsaWJyYXJ5LCBvYmplY3QKKyAKKyAjIFJldHVybiB1bmRlZmluZWQgc3ltYm9scyBpbiBhbiBvYmplY3QgYXMgYSBzZXQgb2YgdHVwbGVzIChuYW1lLCB3ZWFrbmVzcykKKyBkZWYgdW5kZWZpbmVkX3N5bWJvbHMob2JqKToKK0BAIC0xNDQsNiArMTQ0LDExIEBAIGRlZiB1bmRlZmluZWRfc3ltYm9scyhvYmopOgorIAorICAgICBvdXRwdXQgPSBjb21tYW5kKCJta2xpYnMtcmVhZGVsZiIsICItLXByaW50LXN5bWJvbHMtdW5kZWZpbmVkIiwgb2JqKQorIAorKyAgICBpZiBsZW4ob2JqKSA+IGxlbihkZXN0X3BhdGgpIGFuZCBvYmpbOmxlbihkZXN0X3BhdGgpXSA9PSBkZXN0X3BhdGg6CisrICAgICAgICBvYmplY3QgPSBvYmpbbGVuKGRlc3RfcGF0aCkgKyAxOi1sZW4oJy1zby1zdHJpcHBlZCcpXQorKyAgICBlbHNlOgorKyAgICAgICAgb2JqZWN0ID0gb2JqCisrCisgICAgIHJlc3VsdCA9IFtdCisgICAgIGZvciBsaW5lIGluIG91dHB1dDoKKyAgICAgICAgIG5hbWUsIHdlYWtfc3RyaW5nLCB2ZXJzaW9uX3N0cmluZywgbGlicmFyeV9zdHJpbmcgPSBsaW5lLnNwbGl0KClbOjRdCitAQCAtMTYwLDcgKzE2NSw3IEBAIGRlZiB1bmRlZmluZWRfc3ltYm9scyhvYmopOgorICAgICAgICAgaWYgbGlicmFyeV9zdHJpbmcubG93ZXIoKSAhPSAnbm9uZSc6CisgICAgICAgICAgICAgbGlicmFyeSA9IGxpYnJhcnlfc3RyaW5nCisgCistICAgICAgICByZXN1bHQuYXBwZW5kKFVuZGVmaW5lZFN5bWJvbChuYW1lLCB3ZWFrLCB2ZXJzaW9uLCBsaWJyYXJ5KSkKKysgICAgICAgIHJlc3VsdC5hcHBlbmQoVW5kZWZpbmVkU3ltYm9sKG5hbWUsIHdlYWssIHZlcnNpb24sIGxpYnJhcnksIG9iamVjdCkpCisgCisgICAgIHJldHVybiByZXN1bHQKKyAKK0BAIC00OTUsMTIgKzUwMCwxMyBAQCB3aGlsZSAxOgorICAgICAgICAgICAgICAgICAgICAgIGFuZCByZS5zZWFyY2goIl5wc18iLCBzdHIoc3ltYm9sKSkpCisgICAgICAgICAgICAgICAgIGFuZCBub3QgKHJlLnNlYXJjaCgibGQtbGludXguc28uMyQiLCBzdHIoc3ltYm9sKSkpCisgICAgICAgICAgICAgICAgIGFuZCBub3QgKHJlLnNlYXJjaCgiXl9fZ251X2xvY2FsX2dwIiwgc3RyKHN5bWJvbCkpKSk6CistICAgICAgICAgICAgICAgIGRlYnVnKERFQlVHX1NQQU0sICJuZWVkZWRfc3ltYm9scyBhZGRpbmcgJXMsIHdlYWs6ICVzIiAlIChzeW1ib2wsIHN5bWJvbC53ZWFrKSkKKysgICAgICAgICAgICAgICAgZGVidWcoREVCVUdfU1BBTSwgIm5lZWRlZF9zeW1ib2xzIGFkZGluZyAlcywgd2VhazogJXMsIGZvciAlcyIgJSAoc3ltYm9sLCBzeW1ib2wud2Vhaywgb2JqKSkKKyAgICAgICAgICAgICAgICAgbmVlZGVkX3N5bWJvbHNbc3RyKHN5bWJvbCldID0gc3ltYm9sCisgICAgICAgICBsaWJyYXJpZXMudXBkYXRlKGxpYnJhcnlfZGVwZW5kcyhvYmopKQorIAorICAgICAjIGNhbGN1bGF0ZSB3aGF0IHN5bWJvbHMgYXJlIHByZXNlbnQgaW4gc21hbGxfbGlicyBhbmQgYXZhaWxhYmxlX2xpYnMKKyAgICAgcHJlc2VudF9zeW1ib2xzID0ge30KKysgICAgcHJlc2VudF9zeW1ib2xfcHJvZ3MgPSB7fQorICAgICBjaGVja2VkX2xpYnMgPSBzbWFsbF9saWJzCisgICAgIGNoZWNrZWRfbGlicy5leHRlbmQoYXZhaWxhYmxlX2xpYnMpCisgICAgIGNoZWNrZWRfbGlicy5hcHBlbmQobGRsaWIpCitAQCAtNTEwLDYgKzUxNiwxMiBAQCB3aGlsZSAxOgorICAgICAgICAgICAgIG5hbWVzID0gc3ltYm9sLmJhc2VfbmFtZXMoKQorICAgICAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgICAgICBwcmVzZW50X3N5bWJvbHNbbmFtZV0gPSBzeW1ib2wKKysgICAgICAgICAgICBpZiBub3Qgc29fcGF0dGVybi5tYXRjaChsaWIpOgorKyAgICAgICAgICAgICAgICBkZWJ1ZyhERUJVR19TUEFNLCAicHJlc2VudF9zeW1ib2xfcHJvZ3MgYWRkaW5nICVzLCBmcm9tIGV4ZWN1dGFibGUgJXMiICUgKCcgJy5qb2luKG5hbWVzKSwgbGliKSkKKysgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisrICAgICAgICAgICAgICAgICAgICBwcm9ncyA9IHByZXNlbnRfc3ltYm9sX3Byb2dzLmdldChuYW1lLCBzZXQoKSkKKysgICAgICAgICAgICAgICAgICAgIHByb2dzLmFkZChsaWIpCisrICAgICAgICAgICAgICAgICAgICBwcmVzZW50X3N5bWJvbF9wcm9nc1tuYW1lXSA9IHByb2dzCisgCisgICAgICMgYXJlIHdlIGZpbmlzaGVkPworICAgICBudW1fdW5yZXNvbHZlZCA9IDAKK0BAIC01NjUsNiArNTc3LDE0IEBAIHdoaWxlIDE6CisgICAgIGZvciBuYW1lIGluIG5lZWRlZF9zeW1ib2xzOgorICAgICAgICAgaWYgbm90IG5hbWUgaW4gc3ltYm9sX3Byb3ZpZGVyOgorICAgICAgICAgICAgIGlmIG5vdCBuZWVkZWRfc3ltYm9sc1tuYW1lXS53ZWFrOgorKyAgICAgICAgICAgICAgICAjIFdPUktBUk9VTkQ6IFVuZGVmaW5lZCBzeW1ib2xzIGluIGEgbGlicmFyeSBjYW4gYmUgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uCisrICAgICAgICAgICAgICAgICMgdGhhdCBsaW5rcyB0byB0aGUgbGlicmFyeS4gU28gaWYgdGhlIG9iamVjdCB3aGljaCByZXF1aXJlcyB0aGUgc3ltYm9sIGlzIGEgbGlicmFyeQorKyAgICAgICAgICAgICAgICAjIGFuZCBzb21lIGFwcGxpY2F0aW9uIGNhbiBwcm92aWRlIHRoZSBzeW1ib2wsIHRoZSB1bmRlZmluZWQgc3ltYm9sIGlzIHNraXBwZWQuCisrICAgICAgICAgICAgICAgIHN5bWJvbCA9IG5lZWRlZF9zeW1ib2xzW25hbWVdCisrICAgICAgICAgICAgICAgIGlmIHNvX3BhdHRlcm4ubWF0Y2goc3ltYm9sLm9iamVjdCkgYW5kIHByZXNlbnRfc3ltYm9sX3Byb2dzLmdldChuYW1lLCBOb25lKToKKysgICAgICAgICAgICAgICAgICAgIGRlYnVnKERFQlVHX1NQQU0sICJzeW1ib2wgJXMgaW4gbGlicmFyeSAlcyBpcyBwcm92aWRlZCBieSBleGVjdXRhYmxlICVzIiBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAlIChuYW1lLCBzeW1ib2wub2JqZWN0LCAnICcuam9pbihwcmVzZW50X3N5bWJvbF9wcm9nc1tuYW1lXSkpKQorKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJObyBsaWJyYXJ5IHByb3ZpZGVzIG5vbi13ZWFrICVzIiAlIG5hbWUpCisgICAgICAgICBlbHNlOgorICAgICAgICAgICAgIGxpYiA9IHN5bWJvbF9wcm92aWRlcltuYW1lXQorLS0gCisxLjguNS4yLjIzMy5nOTMyZjdlNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvZml4X1NUVF9HTlVfSUZVTkMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvZml4X1NUVF9HTlVfSUZVTkMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI3YTQ4OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9maXhfU1RUX0dOVV9JRlVOQy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitUaGUgbGliYzYtZGV2IGluIFVidW50dSA5LjA0IGlzIHNvIG9sZCB0aGF0IHRoZSBlbGYuaCBkb2Vzbid0CitkZWZpbmUgU1RUX0dOVV9JRlVOQywgc28gd2UgaGF2ZSB0byBkZWZpbmUgaXQgb3Vyc2VsdmVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXSAtIG9sZCByZWxlYXNlIHNwZWNpZmljLCBtYXliZSByZW1vdmFibGUKKworLS0gRGV4dWFuIEN1aSAoZGV4dWFuLmN1aUBpbnRlbC5jb20pIEZlYiAxNiwgMjAxMS4KKworZGlmZiAtLWdpdCBhL3NyYy9ta2xpYnMtcmVhZGVsZi9tYWluLmNwcCBiL3NyYy9ta2xpYnMtcmVhZGVsZi9tYWluLmNwcAoraW5kZXggMjQ0NGMzOS4uNTZkOTNmOCAxMDA2NDQKKy0tLSBhL3NyYy9ta2xpYnMtcmVhZGVsZi9tYWluLmNwcAorKysrIGIvc3JjL21rbGlicy1yZWFkZWxmL21haW4uY3BwCitAQCAtNiw2ICs2LDE0IEBACisgI2luY2x1ZGUgPHZlY3Rvcj4KKyAKKyAjaW5jbHVkZSA8ZWxmLmg+CisrLyoKKysgKiBUaGUgL3Vzci9pbmNsdWRlL2VsZi5oIGluIHNvbWUgZGlzdHJpYnV0aW9ucyhsaWtlIFVidW50dSA5LjA0KSBkb2Vzbid0CisrICogZGVmaW5lIHRoZSBtYWNyby4gV2UgbmVlZCB0byBkZWZpbmUgaXQgaGVyZS4KKysgKi8KKysjaWZuZGVmIFNUVF9HTlVfSUZVTkMKKysjZGVmaW5lIFNUVF9HTlVfSUZVTkMgICAxMCAgICAgICAgICAgICAgLyogU3ltYm9sIGlzIGluZGlyZWN0IGNvZGUgb2JqZWN0ICovCisrI2VuZGlmCisrCisgI2luY2x1ZGUgPGdldG9wdC5oPgorIAorICNpbmNsdWRlICJlbGYuaHBwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2ZpeF9jcm9zc19jb21waWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2ZpeF9jcm9zc19jb21waWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZTQ2MDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvZml4X2Nyb3NzX2NvbXBpbGUucGF0Y2gKQEAgLTAsMCArMSw4MSBAQAorUmVtb3ZlIGRlcGVuZGVuY3kgb24gZHBrZworCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitBc2tpbmcgdGhlIGhvc3QgT1Mgd2hldGhlciBpdCBzdXBwb3J0cyBtdWx0aWFyY2ggaXMgbm90IHVzZWZ1bAoraW4gYSBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudCwgb3IgaWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZAorYSBsaWJkaXIgZXhwbGljaXRseS4gU28gdGhpcyBwYXRjaCwgYmFzZWQgb24gdGhlIHdvcmsgb2YgTWVudG9yCitHcmFwaGljcywgcmVtb3ZlcyBta2xpYnMncyBkZXBlbmRlbmN5IG9uIGRwa2cgcGFja2FnZS4KKworU2lnbmVkLW9mZi1ieTogWXVhbmppZSBIdWFuZyA8WXVhbmppZS5IdWFuZ0B3aW5kcml2ZXIuY29tPgorIHNyYy9ta2xpYnMgfCAzMCArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbWtsaWJzIGIvc3JjL21rbGlicworaW5kZXggZDliNzg0Yi4uYzU2MTRlYSAxMDA3NTUKKy0tLSBhL3NyYy9ta2xpYnMKKysrKyBiL3NyYy9ta2xpYnMKK0BAIC0yNjEsNiArMjYxLDExIEBAIGRlZiBleHRyYWN0X3NvbmFtZShzb19maWxlKToKKyAgICAgcmV0dXJuICIiCisgCisgZGVmIG11bHRpYXJjaChwYXRocyk6CisrICAgICMgQXNraW5nIHRoZSBob3N0IE9TIHdoZXRoZXIgaXQgc3VwcG9ydHMgbXVsdGlhcmNoIGlzIG5vdCB1c2VmdWwKKysgICAgIyBpbiBhIGNyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50LCBvciBpZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkCisrICAgICMgYSBsaWJkaXIgZXhwbGljaXRseS4KKysgICAgaWYgc3lzcm9vdCAhPSAiIiBvciBsaWJkaXIgIT0gIiI6CisrICAgICAgICByZXR1cm4gcGF0aHMKKyAgICAgZGV2bnVsbCA9IG9wZW4oJy9kZXYvbnVsbCcsICd3JykKKyAgICAgZHBrZ19hcmNoaXRlY3R1cmUgPSBzdWJwcm9jZXNzLlBvcGVuKAorICAgICAgICAgWydkcGtnLWFyY2hpdGVjdHVyZScsICctcURFQl9IT1NUX01VTFRJQVJDSCddLAorQEAgLTM0MCw3ICszNDUsNyBAQCBsaWJfcGF0aCA9IFtdCisgZGVzdF9wYXRoID0gIkRFU1QiCisgbGRsaWIgPSAiTERMSUIiCisgaW5jbHVkZV9kZWZhdWx0X2xpYl9wYXRoID0gInllcyIKKy1kZWZhdWx0X2xpYl9wYXRoID0gbXVsdGlhcmNoKFsiL2xpYi8iLCAiL3Vzci9saWIvIiwgIi91c3IvWDExUjYvbGliLyJdKQorK2RlZmF1bHRfbGliX3BhdGggPSBbIi9saWIvIiwgIi91c3IvbGliLyIsICIvdXNyL1gxMVI2L2xpYi8iXQorIGxpYmNfZXh0cmFzX2RpciA9ICIvdXNyL2xpYi9saWJjX3BpYyIKKyBsaWJjX2V4dHJhc19kaXJfZGVmYXVsdCA9IFRydWUKKyBsaWJkaXIgPSAibGliIgorQEAgLTM4Niw3ICszOTEsNyBAQCBmb3Igb3B0LCBhcmcgaW4gb3B0bGlzdDoKKyAgICAgZWxpZiBvcHQgPT0gIi0tbGliZGlyIjoKKyAgICAgICAgIGxpYmRpciA9IGFyZworICAgICBlbGlmIG9wdCBpbiAoIi0taGVscCIsICItaCIpOgorLQl1c2FnZSgwKQorKyAgICAgICAgdXNhZ2UoMCkKKyAgICAgICAgIHN5cy5leGl0KDApCisgICAgIGVsaWYgb3B0IGluICgiLS12ZXJzaW9uIiwgIi1WIik6CisgICAgICAgICB2ZXJzaW9uKHZlcnMpCitAQCAtMzk1LDYgKzQwMCw3IEBAIGZvciBvcHQsIGFyZyBpbiBvcHRsaXN0OgorICAgICAgICAgcHJpbnQgIldBUk5JTkc6IHVua25vd24gb3B0aW9uOiAiICsgb3B0ICsgIlx0YXJnOiAiICsgYXJnCisgCisgaWYgaW5jbHVkZV9kZWZhdWx0X2xpYl9wYXRoID09ICJ5ZXMiOgorKyAgICBkZWZhdWx0X2xpYl9wYXRoID0gbXVsdGlhcmNoKGRlZmF1bHRfbGliX3BhdGgpCisgICAgIGxpYl9wYXRoLmV4dGVuZChbYS5yZXBsYWNlKCIvbGliLyIsICIvIiArIGxpYmRpciArICIvIikgZm9yIGEgaW4gZGVmYXVsdF9saWJfcGF0aF0pCisgCisgaWYgbGliY19leHRyYXNfZGlyX2RlZmF1bHQ6CitAQCAtNjYxLDE2ICs2NjksMTYgQEAgbGRfcGF0aF9uYW1lID0gb3MucGF0aC5kaXJuYW1lKGxkbGliKQorIGxkX2Z1bGxfcGF0aCA9ICIuLi8iICsgbGRsaWIKKyBsZF9maWxlID0gZmluZF9saWIobGRfZmlsZV9uYW1lKQorIAorLWlmIGxkX3BhdGhfbmFtZSAhPSAiL2xpYiI6CistICAgIGlmIG9zLmFjY2VzcyhkZXN0X3BhdGggKyAiLyIgKyBsZF9maWxlX25hbWUsIG9zLkZfT0spOgorLSAgICAgICAgb3MucmVtb3ZlKGRlc3RfcGF0aCArICIvIiArIGxkX2ZpbGVfbmFtZSkKKysjaWYgbGRfcGF0aF9uYW1lICE9ICIvbGliIjoKKysjICAgIGlmIG9zLmFjY2VzcyhkZXN0X3BhdGggKyAiLyIgKyBsZF9maWxlX25hbWUsIG9zLkZfT0spOgorKyMgICAgICAgIG9zLnJlbW92ZShkZXN0X3BhdGggKyAiLyIgKyBsZF9maWxlX25hbWUpCisgCistaWYgbm90IG9zLnBhdGguZXhpc3RzKGRlc3RfcGF0aCArICIvLi4vIiArIGxkX3BhdGhfbmFtZSk6CistICAgIG9zLm1rZGlyKGRlc3RfcGF0aCArICIvLi4vIiArIGxkX3BhdGhfbmFtZSkKKysjaWYgbm90IG9zLnBhdGguZXhpc3RzKGRlc3RfcGF0aCArICIvLi4vIiArIGxkX3BhdGhfbmFtZSk6CisrIyAgICBvcy5ta2RpcihkZXN0X3BhdGggKyAiLy4uLyIgKyBsZF9wYXRoX25hbWUpCisgCistaWYgbm90IG9zLmFjY2VzcyhkZXN0X3BhdGggKyAiLyIgKyBsZF9mdWxsX3BhdGgsIG9zLkZfT0spOgorLSAgICBkZWJ1ZyhERUJVR19OT1JNQUwsICJJOiBzdHJpcHBpbmcgYW5kIGNvcHlpbmcgZHluYW1pYyBsaW5rZXIgdG8gIiArIGxkX2Z1bGxfcGF0aCkKKytpZiBub3Qgb3MuYWNjZXNzKGRlc3RfcGF0aCArICIvIiArIGxkX2ZpbGVfbmFtZSwgb3MuRl9PSyk6CisrICAgIGRlYnVnKERFQlVHX05PUk1BTCwgIkk6IHN0cmlwcGluZyBhbmQgY29weWluZyBkeW5hbWljIGxpbmtlciB0byAiICsgbGRfZmlsZV9uYW1lKQorICAgICBjb21tYW5kKHRhcmdldCArICJvYmpjb3B5IiwgIi0tc3RyaXAtdW5uZWVkZWQgLVIgLm5vdGUgLVIgLmNvbW1lbnQiLAorLSAgICAgICAgICAgIGxkX2ZpbGUsIGRlc3RfcGF0aCArICIvIiArIGxkX2Z1bGxfcGF0aCkKKysgICAgICAgICAgICBsZF9maWxlLCBkZXN0X3BhdGggKyAiLyIgKyBsZF9maWxlX25hbWUpCisgCistb3MuY2htb2QoZGVzdF9wYXRoICsgIi8iICsgbGRfZnVsbF9wYXRoLCAwNzU1KQorK29zLmNobW9kKGRlc3RfcGF0aCArICIvIiArIGxkX2ZpbGVfbmFtZSwgMDc1NSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9zaG93LUdOVS11bmlxdWUtc3ltYm9scy1hcy1wcm92aWRlZC1zeW1ib2xzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL3Nob3ctR05VLXVuaXF1ZS1zeW1ib2xzLWFzLXByb3ZpZGVkLXN5bWJvbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM1NjU5MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9zaG93LUdOVS11bmlxdWUtc3ltYm9scy1hcy1wcm92aWRlZC1zeW1ib2xzLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gZWRkZjA0YzdmODMxMmU5YzI5Y2RiMjRlNDMxYjdlNGZiMmNjNzBlZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFl1YW5qaWUgSHVhbmcgPHl1YW5qaWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMTUgQXByIDIwMTUgMTQ6MDA6MDYgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gU2hvdyBHTlUgdW5pcXVlIHN5bWJvbHMgYXMgcHJvdmlkZWQgc3ltYm9scworCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitHTlUgVW5pcXVlIHN5bWJvbCBpcyBhIEdOVSBleHRlbnNpb24gZW1wbG95ZWQgYnkgbmV3IHZlcnNpb24gb2YgR0NDCitieSBkZWZhdWx0LiBFdmVuIFN0YW5kYXJkIEMrKyBsaWJyYXJ5IGluIEdDQyA0LjkgcHJvdmlkZXMgc29tZSBzeW1ib2xzLAorc3VjaCBhcyBfWk5TczRfUmVwMjBfU19lbXB0eV9yZXBfc3RvcmFnZUUgaW4gdGhpcyBiaW5kaW5nIHR5cGUgaW5zdGVhZAorb2YgRUxGIHN0YW5kYXJkIHdlYWsgYmluZGluZy4KK1RoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IG9mIHRoaXMgbmV3IGJpbmRpbmcgdHlwZSB0byBta2xpYnMtcmVhZGVsZi4KKworU2lnbmVkLW9mZi1ieTogWXVhbmppZSBIdWFuZyA8eXVhbmppZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL21rbGlicy1yZWFkZWxmL21haW4uY3BwIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL21rbGlicy1yZWFkZWxmL21haW4uY3BwIGIvc3JjL21rbGlicy1yZWFkZWxmL21haW4uY3BwCitpbmRleCA1NmQ5M2Y4Li4wMTM0NTMwIDEwMDY0NAorLS0tIGEvc3JjL21rbGlicy1yZWFkZWxmL21haW4uY3BwCisrKysgYi9zcmMvbWtsaWJzLXJlYWRlbGYvbWFpbi5jcHAKK0BAIC04OCw3ICs4OCw3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3Nfc3ltYm9sc19wcm92aWRlZCAoY29uc3QgRWxmOjpzZWN0aW9uX3R5cGU8RWxmOjpzZWN0aW9uX3R5cGVfCisgICAgIHVpbnQ4X3QgdHlwZSA9IHN5bWJvbC0+Z2V0X3R5cGUgKCk7CisgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lID0gc3ltYm9sLT5nZXRfbmFtZV9zdHJpbmcgKCk7CisgCistICAgIGlmIChiaW5kICE9IFNUQl9HTE9CQUwgJiYgYmluZCAhPSBTVEJfV0VBSykKKysgICAgaWYgKGJpbmQgIT0gU1RCX0dMT0JBTCAmJiBiaW5kICE9IFNUQl9XRUFLICYmIGJpbmQgIT0gU1RCX0dOVV9VTklRVUUpCisgICAgICAgY29udGludWU7CisgICAgIGlmIChzaG5keCA9PSBTSE5fVU5ERUYgfHwgc2huZHggPT0gU0hOX0FCUykKKyAgICAgICBjb250aW51ZTsKKy0tIAorMS44LjUuMi4yMzMuZzkzMmY3ZTQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL3N5c3Jvb3RlZC1sZHNvLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL3N5c3Jvb3RlZC1sZHNvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NTAwYTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvc3lzcm9vdGVkLWxkc28ucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorSW4gY3Jvc3MgYnVpbGRzIHdlIHdpbGwgaGF2ZSB0byByZXNwZWN0IHN5c3Jvb3QKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogbWtsaWJzLTAuMS4zOS9zcmMvbWtsaWJzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWtsaWJzLTAuMS4zOS5vcmlnL3NyYy9ta2xpYnMJMjAxNC0wMy0wMSAxODoyNTozNi4wMDAwMDAwMDAgKzAwMDAKKysrKyBta2xpYnMtMC4xLjM5L3NyYy9ta2xpYnMJMjAxNC0xMC0xOSAwMDo1MTo0Ni44MTM1MzQ1OTYgKzAwMDAKK0BAIC00OTUsNyArNDk1LDcgQEAKKyAgICAgcHJlc2VudF9zeW1ib2xzID0ge30KKyAgICAgY2hlY2tlZF9saWJzID0gc21hbGxfbGlicworICAgICBjaGVja2VkX2xpYnMuZXh0ZW5kKGF2YWlsYWJsZV9saWJzKQorLSAgICBjaGVja2VkX2xpYnMuYXBwZW5kKGxkbGliKQorKyAgICBjaGVja2VkX2xpYnMuYXBwZW5kKHN5c3Jvb3QgKyBsZGxpYikKKyAgICAgZm9yIGxpYiBpbiBjaGVja2VkX2xpYnM6CisgICAgICAgICBmb3Igc3ltYm9sIGluIHByb3ZpZGVkX3N5bWJvbHMobGliKToKKyAgICAgICAgICAgICBkZWJ1ZyhERUJVR19TUEFNLCAicHJlc2VudF9zeW1ib2xzIGFkZGluZyAlcyIgJSBzeW1ib2wpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvbWtsaWJzLW5hdGl2ZV8wLjEuNDAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvbWtsaWJzLW5hdGl2ZV8wLjEuNDAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlmZWMyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9ta2xpYnMtbmF0aXZlXzAuMS40MC5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIlNoYXJlZCBsaWJyYXJ5IG9wdGltaXNhdGlvbiB0b29sIgorREVTQ1JJUFRJT04gPSAibWtsaWJzIHByb2R1Y2VzIGN1dC1kb3duIHNoYXJlZCBsaWJyYXJpZXMgdGhhdCBjb250YWluIG9ubHkgdGhlIHJvdXRpbmVzIHJlcXVpcmVkIGJ5IGEgcGFydGljdWxhciBzZXQgb2YgZXhlY3V0YWJsZXMuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9sYXVuY2hwYWQubmV0L21rbGlicyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RlYmlhbi9jb3B5cmlnaHQ7bWQ1PTk4ZDMxMDM3YjEzZDg5NmUzMzg5MDczOGVmMDFhZjY0IgorREVQRU5EUyA9ICJweXRob24tbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly9mdHAuZGUuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL20vbWtsaWJzLyR7QlBOfV8ke1BWfS50YXIueHogXAorCWZpbGU6Ly9hY19pbml0X2ZpeC5wYXRjaFwKKwlmaWxlOi8vZml4X1NUVF9HTlVfSUZVTkMucGF0Y2hcCisJZmlsZTovL3N5c3Jvb3RlZC1sZHNvLnBhdGNoIFwKKwlmaWxlOi8vYXZvaWQtZmFpbHVyZS1vbi1zeW1ib2wtcHJvdmlkZWQtYnktYXBwbGljYXRpb24ucGF0Y2ggXAorCWZpbGU6Ly9zaG93LUdOVS11bmlxdWUtc3ltYm9scy1hcy1wcm92aWRlZC1zeW1ib2xzLnBhdGNoIFwKKwlmaWxlOi8vZml4X2Nyb3NzX2NvbXBpbGUucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTFkYWZlNWY5NjJjYWE5ZGM1ZjI2NTFjMDcyMzgxMmEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWRiMjRhZTc3OWQyMWNjZmVkNDlmMjJlNDlhMmI3ZWU0M2VjMGU5MTk3YmMyMDZkODFjZDAyZjk2ZTkxZTEyNSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBuYXRpdmUgcHl0aG9ubmF0aXZlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tbWMvbW1jLXV0aWxzLzAwMDEtbW1jLmgtZG9uLXQtaW5jbHVkZS1hc20tZ2VuZXJpYy1pbnQtbGw2NC5oLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbW1jL21tYy11dGlscy8wMDAxLW1tYy5oLWRvbi10LWluY2x1ZGUtYXNtLWdlbmVyaWMtaW50LWxsNjQuaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzI0ZGU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbW1jL21tYy11dGlscy8wMDAxLW1tYy5oLWRvbi10LWluY2x1ZGUtYXNtLWdlbmVyaWMtaW50LWxsNjQuaC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworbW1jLmg6IGRvbid0IGluY2x1ZGUgPGFzbS1nZW5lcmljL2ludC1sbDY0Lmg+CisKK0luY2x1ZGluZyB0aGlzIGZpbGUgY2F1c2VzIGEgY29tcGlsZSBmYWlsdXJlIGZvciBxZW11bWlwczY0LgorVGhpcyBmaWxlIGlzIG5vdCBuZWVkZWQgdG8gYmUgZXhwbGljaXRseSBpbmNsdWRlZCwgYmVjYXVzZSBpdCB3aWxsIGJlCitpbmNsdWRlZCBieSB0aGUgPGxpbnV4L21tYy9pb2N0bC5oPiBmaWxlIGlmIF9NSVBTX1NaTE9ORyBpcyBub3QgNjQuCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIG1tYy5oIHwgICAgMSAtCisgMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL21tYy5oIGIvbW1jLmgKK2luZGV4IDk4NzFkNjIuLjNkZjJjZGYgMTAwNjQ0CistLS0gYS9tbWMuaAorKysrIGIvbW1jLmgKK0BAIC0xNCw3ICsxNCw2IEBACisgICogQm9zdG9uLCBNQSAwMjExMTAtMTMwNywgVVNBLgorICAqLworIAorLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pbnQtbGw2NC5oPgorICNpbmNsdWRlIDxsaW51eC9tbWMvaW9jdGwuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tbWMvbW1jLXV0aWxzX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21tYy9tbWMtdXRpbHNfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NTAzNjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tbWMvbW1jLXV0aWxzX2dpdC5iYgpAQCAtMCwwICsxLDIzIEBACitERVNDUklQVElPTiA9ICJVc2Vyc3BhY2UgdG9vbHMgZm9yIE1NQy9TRCBkZXZpY2VzIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdC5rZXJuZWwub3JnL2NnaXQvbGludXgva2VybmVsL2dpdC9jamIvbW1jLXV0aWxzLmdpdC8iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbW1jLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xNzttZDU9ZDc3NDdmYzg3ZjFlYjIyYjk0NmVmODE5OTY5NTAzZjAiCisKK0JSQU5DSCA/PSAibWFzdGVyIgorU1JDUkVWID0gImY0ZWIyNDE1MTlmOGQ1MDBjZTYwNjhhNzBkMjM4OWJlMzlhYzUxODkiCisKK1BWID0gIjAuMSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvY2piL21tYy11dGlscy5naXQ7YnJhbmNoPSR7QlJBTkNIfSBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLW1tYy5oLWRvbi10LWluY2x1ZGUtYXNtLWdlbmVyaWMtaW50LWxsNjQuaC5wYXRjaCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgc2VkIC1pICJzOi1XZXJyb3I6OmciICR7U30vTWFrZWZpbGUKK30KKworZG9faW5zdGFsbCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA3NTUgbW1jICR7RH0ke2JpbmRpcn0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHMvMDAwMS1oYXNodGFibGUtUmVtb3ZlLWR1cGxpY2F0ZS1oYXNodGFibGVfaXRlcmF0b3JfdmFsdWUtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlscy8wMDAxLWhhc2h0YWJsZS1SZW1vdmUtZHVwbGljYXRlLWhhc2h0YWJsZV9pdGVyYXRvcl92YWx1ZS0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQzNjE1OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHMvMDAwMS1oYXNodGFibGUtUmVtb3ZlLWR1cGxpY2F0ZS1oYXNodGFibGVfaXRlcmF0b3JfdmFsdWUtLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK0Zyb20gYjg1NmZmMzVjMjAxMjRjZWFlNDBiYmM0ZDMyNTg0ZGY0NzYxOGM5NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDI1IEZlYiAyMDE1IDA5OjI4OjI2ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGhhc2h0YWJsZTogUmVtb3ZlIGR1cGxpY2F0ZSBoYXNodGFibGVfaXRlcmF0b3JfdmFsdWUvaGFzaHRhYmxlX2l0ZXJhdG9yX2tleQorCitnY2M1IGlzIGRlZmF1bHRpbmcgdG8gZ251MTEgaW5zdGVhZCBvZiBnbnU4OSBsaWtlIHByZXZpb3VzIHZlcnNpb25zCithcyBhIHJlc3VsdCB0aGUgc2VtYW50aWNzIG9mICdleHRlcm4gaW5saW5lJyBjaGFuZ2VzIHdoZXJlIGluIGdudTg5IGZvciAnZXh0ZXJuIGlubGluZScgbm8gZXh0ZXJuYWwKK3Zpc2libGUgZnVuY3Rpb24gaXMgZ2VuZXJhdGVkLGluIGM5OSAnZXh0ZXJuYWwgaW5saW5lJyBnZW5lcmF0ZXMgZXh0ZXJuYWxseSB2aXNpYmxlIGZ1bmN0aW9uCit0aGVyZSBpcyBubyBlcXVpdmFsZW50IGluIGM5OSsgYmVjYXVzZSByZWRlZmluaXRpb25zIGFyZW50IGFsbG93ZWQKK2J1dCAnc3RhdGljIGlubGluZScgcmVtYWlucyBzYW1lIGZvciBmb3IgYzg5IGFuZCBjOTkrLCB0aGF0cyB3aHkgd2UgY2hhbmdlIHRoZSBzZW1hbnRpY3MKK3NvIHdlIG1ha2UgdGhlIGZ1bmN0aW9ucyBzdGF0aWMgaW5saW5lLCBhbmQgYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogcGVuZGluZworCistLS0KKyBta2ZzLnViaWZzL2hhc2h0YWJsZS9oYXNodGFibGVfaXRyLmMgfCAxMiAtLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnaXQvbWtmcy51Ymlmcy9oYXNodGFibGUvaGFzaHRhYmxlX2l0ci5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvbWtmcy51Ymlmcy9oYXNodGFibGUvaGFzaHRhYmxlX2l0ci5oCisrKysgZ2l0L21rZnMudWJpZnMvaGFzaHRhYmxlL2hhc2h0YWJsZV9pdHIuaAorQEAgLTI4LDcgKzI4LDcgQEAgaGFzaHRhYmxlX2l0ZXJhdG9yKHN0cnVjdCBoYXNodGFibGUgKmgpOworIC8qIGhhc2h0YWJsZV9pdGVyYXRvcl9rZXkKKyAgKiAtIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIChrZXksdmFsdWUpIHBhaXIgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gKi8KKyAKKy1leHRlcm4gaW5saW5lIHZvaWQgKgorK3N0YXRpYyBpbmxpbmUgdm9pZCAqCisgaGFzaHRhYmxlX2l0ZXJhdG9yX2tleShzdHJ1Y3QgaGFzaHRhYmxlX2l0ciAqaSkKKyB7CisgICAgIHJldHVybiBpLT5lLT5rOworQEAgLTM3LDcgKzM3LDcgQEAgaGFzaHRhYmxlX2l0ZXJhdG9yX2tleShzdHJ1Y3QgaGFzaHRhYmxlXworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAvKiB2YWx1ZSAtIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIChrZXksdmFsdWUpIHBhaXIgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gKi8KKyAKKy1leHRlcm4gaW5saW5lIHZvaWQgKgorK3N0YXRpYyBpbmxpbmUgdm9pZCAqCisgaGFzaHRhYmxlX2l0ZXJhdG9yX3ZhbHVlKHN0cnVjdCBoYXNodGFibGVfaXRyICppKQorIHsKKyAgICAgcmV0dXJuIGktPmUtPnY7CitJbmRleDogZ2l0L21rZnMudWJpZnMvaGFzaHRhYmxlL2hhc2h0YWJsZV9pdHIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL21rZnMudWJpZnMvaGFzaHRhYmxlL2hhc2h0YWJsZV9pdHIuYworKysrIGdpdC9ta2ZzLnViaWZzL2hhc2h0YWJsZS9oYXNodGFibGVfaXRyLmMKK0BAIC0zNSwxOCArMzUsNiBAQCBoYXNodGFibGVfaXRlcmF0b3Ioc3RydWN0IGhhc2h0YWJsZSAqaCkKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLS8qIGtleSAgICAgIC0gcmV0dXJuIHRoZSBrZXkgb2YgdGhlIChrZXksdmFsdWUpIHBhaXIgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gKi8KKy0vKiB2YWx1ZSAgICAtIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIChrZXksdmFsdWUpIHBhaXIgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gKi8KKy0KKy12b2lkICoKKy1oYXNodGFibGVfaXRlcmF0b3Jfa2V5KHN0cnVjdCBoYXNodGFibGVfaXRyICppKQorLXsgcmV0dXJuIGktPmUtPms7IH0KKy0KKy12b2lkICoKKy1oYXNodGFibGVfaXRlcmF0b3JfdmFsdWUoc3RydWN0IGhhc2h0YWJsZV9pdHIgKmkpCisteyByZXR1cm4gaS0+ZS0+djsgfQorLQorLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAvKiBhZHZhbmNlIC0gYWR2YW5jZSB0aGUgaXRlcmF0b3IgdG8gdGhlIG5leHQgZWxlbWVudAorICAqICAgICAgICAgICByZXR1cm5zIHplcm8gaWYgYWR2YW5jZWQgdG8gZW5kIG9mIHRhYmxlICovCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzL2FkZC1leGNsdXNpb24tdG8tbWtmcy1qZmZzMi1naXQtMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHMvYWRkLWV4Y2x1c2lvbi10by1ta2ZzLWpmZnMyLWdpdC0yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZDZhMzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzL2FkZC1leGNsdXNpb24tdG8tbWtmcy1qZmZzMi1naXQtMi5wYXRjaApAQCAtMCwwICsxLDEwMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSAvdG1wL21rZnMuamZmczIuYwkyMDA5LTAxLTExIDE1OjI4OjQxLjAwMDAwMDAwMCArMDEwMAorKysrIGdpdC9ta2ZzLmpmZnMyLmMJMjAwOS0wMS0xMSAxNTo1OToyOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMDAsNiArMTAwLDExIEBACisgCXN0cnVjdCByYl9ub2RlIGhhcmRsaW5rX3JiOworIH07CisgCisrc3RydWN0IGlnbm9yZXBhdGhfZW50cnkgeworKwlzdHJ1Y3QgaWdub3JlcGF0aF9lbnRyeSogbmV4dDsgIC8qIFBvaW50cyB0byB0aGUgbmV4dCBpZ25vcmVwYXRoIGVsZW1lbnQgKi8KKysJY2hhciBuYW1lW1BBVEhfTUFYXTsgICAgICAgIC8qIE5hbWUgb2YgdGhlIGVudHJ5ICovCisrfTsKKytzdGF0aWMgc3RydWN0IGlnbm9yZXBhdGhfZW50cnkqIGlnbm9yZXBhdGggPSAwOworIHN0cnVjdCByYl9yb290IGhhcmRsaW5rczsKKyBzdGF0aWMgaW50IG91dF9mZCA9IC0xOworIHN0YXRpYyBpbnQgaW5fZmQgPSAtMTsKK0BAIC00MDgsNyArNDEzLDcgQEAKKyAJY2hhciAqaHBhdGgsICp0cGF0aDsKKyAJc3RydWN0IGRpcmVudCAqZHAsICoqbmFtZWxpc3Q7CisgCXN0cnVjdCBmaWxlc3lzdGVtX2VudHJ5ICplbnRyeTsKKy0KKysJc3RydWN0IGlnbm9yZXBhdGhfZW50cnkqIGVsZW1lbnQgPSBpZ25vcmVwYXRoOworIAorIAlpZiAobHN0YXQoaG9zdHBhdGgsICZzYikpIHsKKyAJCXBlcnJvcl9tc2dfYW5kX2RpZSgiJXMiLCBob3N0cGF0aCk7CitAQCAtNDE3LDYgKzQyMiwxNSBAQAorIAllbnRyeSA9IGFkZF9ob3N0X2ZpbGVzeXN0ZW1fZW50cnkodGFyZ2V0cGF0aCwgaG9zdHBhdGgsCisgCQkJc2Iuc3RfdWlkLCBzYi5zdF9naWQsIHNiLnN0X21vZGUsIDAsIHBhcmVudCk7CisgCisrCXdoaWxlICggZWxlbWVudCApIHsKKysJCWlmICggc3RyY21wKCBlbGVtZW50LT5uYW1lLCB0YXJnZXRwYXRoICkgPT0gMCApIHsKKysJCQlwcmludGYoICJOb3RlOiBpZ25vcmluZyBkaXJlY3RvcmllcyBiZWxvdyAnJXMnXG4iLCB0YXJnZXRwYXRoICk7CisrCQkJcmV0dXJuIGVudHJ5OworKwkJCWJyZWFrOworKwkJfQorKwkJZWxlbWVudCA9IGVsZW1lbnQtPm5leHQ7CisrCX0KKysKKyAJbiA9IHNjYW5kaXIoaG9zdHBhdGgsICZuYW1lbGlzdCwgMCwgYWxwaGFzb3J0KTsKKyAJaWYgKG4gPCAwKSB7CisgCQlwZXJyb3JfbXNnX2FuZF9kaWUoIm9wZW5pbmcgZGlyZWN0b3J5ICVzIiwgaG9zdHBhdGgpOworQEAgLTE0NTMsNiArMTQ2Nyw3IEBACisgCXsicm9vdCIsIDEsIE5VTEwsICdyJ30sCisgCXsicGFnZXNpemUiLCAxLCBOVUxMLCAncyd9LAorIAl7ImVyYXNlYmxvY2siLCAxLCBOVUxMLCAnZSd9LAorKwl7Imlnbm9yZSIsIDEsIE5VTEwsICdJJ30sCisgCXsib3V0cHV0IiwgMSwgTlVMTCwgJ28nfSwKKyAJeyJoZWxwIiwgMCwgTlVMTCwgJ2gnfSwKKyAJeyJ2ZXJib3NlIiwgMCwgTlVMTCwgJ3YnfSwKK0BAIC0xNTAwLDYgKzE1MTUsNyBAQAorICIgIC1MLCAtLWxpc3QtY29tcHJlc3NvcnMgIFNob3cgdGhlIGxpc3Qgb2YgdGhlIGF2YWlhYmxlIGNvbXByZXNzb3JzXG4iCisgIiAgLXQsIC0tdGVzdC1jb21wcmVzc2lvbiAgQ2FsbCBkZWNvbXByZXNzIGFuZCBjb21wYXJlIHdpdGggdGhlIG9yaWdpbmFsIChmb3IgdGVzdClcbiIKKyAiICAtbiwgLS1uby1jbGVhbm1hcmtlcnMgICBEb24ndCBhZGQgYSBjbGVhbm1hcmtlciB0byBldmVyeSBlcmFzZWJsb2NrXG4iCisrIiAgLUksIC0taWdub3JlPVBBVEggICAgICAgSWdub3JlIHN1YiBkaXJlY3RvcnkgYW5kIGZpbGUgdHJlZSBiZWxvdyBQQVRIIHdoZW4gcmVjdXJzaW5nIG92ZXIgdGhlIGZpbGUgc3lzdGVtXG4iCisgIiAgLW8sIC0tb3V0cHV0PUZJTEUgICAgICAgT3V0cHV0IHRvIEZJTEUgKGRlZmF1bHQ6IHN0ZG91dClcbiIKKyAiICAtbCwgLS1saXR0bGUtZW5kaWFuICAgICBDcmVhdGUgYSBsaXR0bGUtZW5kaWFuIGZpbGVzeXN0ZW1cbiIKKyAiICAtYiwgLS1iaWctZW5kaWFuICAgICAgICBDcmVhdGUgYSBiaWctZW5kaWFuIGZpbGVzeXN0ZW1cbiIKK0BAIC0xNjY2LDYgKzE2ODIsNyBAQAorIAljaGFyICpjb21wcl9uYW1lID0gTlVMTDsKKyAJaW50IGNvbXByX3ByaW9yICA9IC0xOworIAlpbnQgd2Fybl9wYWdlX3NpemUgPSAwOworKwlzdHJ1Y3QgaWdub3JlcGF0aF9lbnRyeSogZWxlbWVudCA9IGlnbm9yZXBhdGg7CisgCisgCXBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKKyAJaWYgKHBhZ2Vfc2l6ZSA8IDApIC8qIFN5c3RlbSBkb2Vzbid0IGtub3cgc28gLi4uICovCitAQCAtMTY3Niw3ICsxNjkzLDcgQEAKKyAJamZmczJfY29tcHJlc3NvcnNfaW5pdCgpOworIAorIAl3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsCistCQkJCQkiRDpkOnI6czpvOnFVUGZoP3ZWZTpsYnA6Om5jOm06eDpYOkx0eTppOiIsIGxvbmdfb3B0aW9ucywgJmMpKSA+PSAwKQorKwkJCQkJIkQ6ZDpyOnM6STpvOnFVUGZoP3ZWZTpsYnA6Om5jOm06eDpYOkx0eTppOiIsIGxvbmdfb3B0aW9ucywgJmMpKSA+PSAwKQorIAl7CisgCQlzd2l0Y2ggKG9wdCkgeworIAkJCWNhc2UgJ0QnOgorQEAgLTE3MDAsNiArMTcxNywyOCBAQAorIAkJCQl3YXJuX3BhZ2Vfc2l6ZSA9IDA7IC8qIHNldCBieSB1c2VyLCBzbyBkb24ndCBuZWVkIHRvIHdhcm4gKi8KKyAJCQkJYnJlYWs7CisgCisrCQkJY2FzZSAnSSc6CisrCQkJCXByaW50ZiggIk5vdGU6IEFkZGluZyAnJXMnIHRvIGlnbm9yZSBQYXRoXG4iLCBvcHRhcmcgKTsKKysJCQkJZWxlbWVudCA9IGlnbm9yZXBhdGg7CisrCQkJCWlmICggIWlnbm9yZXBhdGggKSB7CisrCQkJCQlpZ25vcmVwYXRoID0geG1hbGxvYyggc2l6ZW9mKCBzdHJ1Y3QgaWdub3JlcGF0aF9lbnRyeSApICk7CisrCQkJCQlpZ25vcmVwYXRoLT5uZXh0ID0gMDsKKysJCQkJCXN0cmNweSggJmlnbm9yZXBhdGgtPm5hbWVbMF0sIG9wdGFyZyApOworKwkJCQl9IGVsc2UgeworKwkJCQkJd2hpbGUgKCBlbGVtZW50LT5uZXh0ICkgZWxlbWVudCA9IGVsZW1lbnQtPm5leHQ7CisrCQkJCQllbGVtZW50LT5uZXh0ID0geG1hbGxvYyggc2l6ZW9mKCBzdHJ1Y3QgaWdub3JlcGF0aF9lbnRyeSApICk7CisrIAkJCQkJZWxlbWVudC0+bmV4dC0+bmV4dCA9IDA7CisrCQkJCQlzdHJjcHkoICZlbGVtZW50LT5uZXh0LT5uYW1lWzBdLCBvcHRhcmcgKTsKKysJCQkJfQorKwkJCQlwcmludGYoICItLS0tLS0tLS0gRHVtcGluZyBpZ25vcmUgcGF0aCBsaXN0IC0tLS0tLS0tLS0tLS0tLS1cbiIgKTsKKysJCQkJZWxlbWVudCA9IGlnbm9yZXBhdGg7CisrCQkJCXdoaWxlICggZWxlbWVudCApIHsKKysJCQkJCXByaW50ZiggIiAgKiAnJXMnXG4iLCAmZWxlbWVudC0+bmFtZVswXSApOworKwkJCQkJZWxlbWVudCA9IGVsZW1lbnQtPm5leHQ7CisrCQkJCX0KKysJCQkJcHJpbnRmKCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iICk7CisrCQkJCWJyZWFrOworKworIAkJCWNhc2UgJ28nOgorIAkJCQlpZiAob3V0X2ZkICE9IC0xKSB7CisgCQkJCQllcnJvcl9tc2dfYW5kX2RpZSgib3V0cHV0IGZpbGVuYW1lIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSIpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlscy9maXgtYXJtdjctbmVvbi1hbGlnbm1lbnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzL2ZpeC1hcm12Ny1uZW9uLWFsaWdubWVudC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWYxNjI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlscy9maXgtYXJtdjctbmVvbi1hbGlnbm1lbnQucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK05FT04gaW5zdHJ1Y3Rpb24gVkxEMS42NCB3YXMgdXNlZCB0byBjb3B5IDY0IGJpdHMgZGF0YSBhZnRlciB0eXBlCitjYXN0aW5nLCBhbmQgdGhleSB3aWxsIHRyaWdnZXIgYWxpZ25tZW50IHRyYXAuCitUaGlzIHBhdGNoIHVzZXMgbWVtY3B5IHRvIGF2b2lkIGFsaWdubWVudCBwcm9ibGVtLgorCitTaWduZWQtb2ZmLWJ5OiBZdWFuamllIEh1YW5nIDxZdWFuamllLkh1YW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9ta2ZzLnViaWZzL2tleS5oIGIvbWtmcy51Ymlmcy9rZXkuaAoraW5kZXggZDNhMDJkNC4uZTdlOTIxOCAxMDA2NDQKKy0tLSBhL21rZnMudWJpZnMva2V5LmgKKysrKyBiL21rZnMudWJpZnMva2V5LmgKK0BAIC0xNDEsMTAgKzE0MSwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZGF0YV9rZXlfaW5pdCh1bmlvbiB1Ymlmc19rZXkgKmtleSwgaW5vX3QgaW51bSwKKyAgKi8KKyBzdGF0aWMgaW5saW5lIHZvaWQga2V5X3dyaXRlKGNvbnN0IHVuaW9uIHViaWZzX2tleSAqZnJvbSwgdm9pZCAqdG8pCisgeworLQl1bmlvbiB1Ymlmc19rZXkgKnQgPSB0bzsKKysJX19sZTMyIHhbMl07CisgCistCXQtPmozMlswXSA9IGNwdV90b19sZTMyKGZyb20tPnUzMlswXSk7CistCXQtPmozMlsxXSA9IGNwdV90b19sZTMyKGZyb20tPnUzMlsxXSk7CisrCXhbMF0gPSBjcHVfdG9fbGUzMihmcm9tLT51MzJbMF0pOworKwl4WzFdID0gY3B1X3RvX2xlMzIoZnJvbS0+dTMyWzFdKTsKKysKKysJbWVtY3B5KHRvLCAmeCwgOCk7CisgCW1lbXNldCh0byArIDgsIDAsIFVCSUZTX01BWF9LRVlfTEVOIC0gOCk7CisgfQorIAorQEAgLTE1NiwxMCArMTU4LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBrZXlfd3JpdGUoY29uc3QgdW5pb24gdWJpZnNfa2V5ICpmcm9tLCB2b2lkICp0bykKKyAgKi8KKyBzdGF0aWMgaW5saW5lIHZvaWQga2V5X3dyaXRlX2lkeChjb25zdCB1bmlvbiB1Ymlmc19rZXkgKmZyb20sIHZvaWQgKnRvKQorIHsKKy0JdW5pb24gdWJpZnNfa2V5ICp0ID0gdG87CisrCV9fbGUzMiB4WzJdOworKworKwl4WzBdID0gY3B1X3RvX2xlMzIoZnJvbS0+dTMyWzBdKTsKKysJeFsxXSA9IGNwdV90b19sZTMyKGZyb20tPnUzMlsxXSk7CisgCistCXQtPmozMlswXSA9IGNwdV90b19sZTMyKGZyb20tPnUzMlswXSk7CistCXQtPmozMlsxXSA9IGNwdV90b19sZTMyKGZyb20tPnUzMlsxXSk7CisrCW1lbWNweSh0bywgJngsIDgpOworIH0KKyAKKyAvKioKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHMvbXRkLXV0aWxzLWZpeC1jb3JydXB0LWNsZWFubWFya2VyLXdpdGgtZmxhc2hfZXJhc2UtLWotY29tbWFuZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHMvbXRkLXV0aWxzLWZpeC1jb3JydXB0LWNsZWFubWFya2VyLXdpdGgtZmxhc2hfZXJhc2UtLWotY29tbWFuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjA3Y2ZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlscy9tdGQtdXRpbHMtZml4LWNvcnJ1cHQtY2xlYW5tYXJrZXItd2l0aC1mbGFzaF9lcmFzZS0tai1jb21tYW5kLnBhdGNoCkBAIC0wLDAgKzEsMTM3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK0Zyb20gcGF0Y2h3b3JrIE1vbiBBdWcgIDggMDg6MTY6NDMgMjAxMQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CitTdWJqZWN0OiBtdGQtdXRpbHM6IGZpeCBjb3JydXB0IGNsZWFubWFya2VyIHdpdGggZmxhc2hfZXJhc2UgLWogY29tbWFuZAorRGF0ZTogU3VuLCAwNyBBdWcgMjAxMSAyMjoxNjo0MyAtMDAwMAorRnJvbTogYjM1MzYyQGZyZWVzY2FsZS5jb20KK1gtUGF0Y2h3b3JrLUlkOiAxMDg4NzMKK01lc3NhZ2UtSWQ6IDwxMzEyNzkxNDAzLTEzNDczLTEtZ2l0LXNlbmQtZW1haWwtYjM1MzYyQGZyZWVzY2FsZS5jb20+CitUbzogPGR3bXcyQGluZnJhZGVhZC5vcmc+CitDYzogTGl1IFNodW8gPGIzNTM2MkBmcmVlc2NhbGUuY29tPiwgQXJ0ZW0uQml0eXV0c2tpeUBub2tpYS5jb20sCisgTGkgWWFuZyA8bGVvbGlAZnJlZXNjYWxlLmNvbT4sIGxpbnV4LW10ZEBsaXN0cy5pbmZyYWRlYWQub3JnCisKK0Zyb206IExpdSBTaHVvIDxiMzUzNjJAZnJlZXNjYWxlLmNvbT4KKworRmxhc2hfZXJhc2UgLWogc2hvdWxkIGZpbGwgZGlzY3JldGUgZnJlZW9vYiBhcmVhcyB3aXRoIHJlcXVpcmVkIGJ5dGVzCitvZiBKRkZTMiBjbGVhbm1hcmtlciBpbiBqZmZzMl9jaGVja19uYW5kX2NsZWFubWFya2VyKCkuIE5vdCBqdXN0IGZpbGwKK3RoZSBmaXJzdCBmcmVlb29iIGFyZWEuCisKK1RoZSBiZWxvdyBpcyB0aGUgcmVzdWx0IHdpdGhvdXQgdGhpcyB3b3JrYXJvdW5kOgorCitKRkZTMjogRXJhc2UgYmxvY2sgYXQgMHgwMDAwMDAwMCBpcyBub3QgZm9ybWF0dGVkLiBJdCB3aWxsIGJlIGVyYXNlZAorSkZGUzI6IEVyYXNlIGJsb2NrIGF0IDB4MDAwMDQwMDAgaXMgbm90IGZvcm1hdHRlZC4gSXQgd2lsbCBiZSBlcmFzZWQKK0pGRlMyOiBFcmFzZSBibG9jayBhdCAweDAwMDA4MDAwIGlzIG5vdCBmb3JtYXR0ZWQuIEl0IHdpbGwgYmUgZXJhc2VkCitKRkZTMjogRXJhc2UgYmxvY2sgYXQgMHgwMDAwYzAwMCBpcyBub3QgZm9ybWF0dGVkLiBJdCB3aWxsIGJlIGVyYXNlZAorSkZGUzI6IEVyYXNlIGJsb2NrIGF0IDB4MDAwMTAwMDAgaXMgbm90IGZvcm1hdHRlZC4gSXQgd2lsbCBiZSBlcmFzZWQKK0pGRlMyOiBFcmFzZSBibG9jayBhdCAweDAwMDE0MDAwIGlzIG5vdCBmb3JtYXR0ZWQuIEl0IHdpbGwgYmUgZXJhc2VkCitKRkZTMjogRXJhc2UgYmxvY2sgYXQgMHgwMDAxODAwMCBpcyBub3QgZm9ybWF0dGVkLiBJdCB3aWxsIGJlIGVyYXNlZAorSkZGUzI6IEVyYXNlIGJsb2NrIGF0IDB4MDAwMWMwMDAgaXMgbm90IGZvcm1hdHRlZC4gSXQgd2lsbCBiZSBlcmFzZWQKK0pGRlMyOiBFcmFzZSBibG9jayBhdCAweDAwMDIwMDAwIGlzIG5vdCBmb3JtYXR0ZWQuIEl0IHdpbGwgYmUgZXJhc2VkCitKRkZTMjogRXJhc2UgYmxvY2sgYXQgMHgwMDAyNDAwMCBpcyBub3QgZm9ybWF0dGVkLiBJdCB3aWxsIGJlIGVyYXNlZAorSkZGUzI6IEVyYXNlIGJsb2NrIGF0IDB4MDAwMjgwMDAgaXMgbm90IGZvcm1hdHRlZC4gSXQgd2lsbCBiZSBlcmFzZWQKKy4uLgorCitTaWduZWQtb2ZmLWJ5OiBMaXUgU2h1byA8YjM1MzYyQGZyZWVzY2FsZS5jb20+CitTaWduZWQtb2ZmLWJ5OiBMaSBZYW5nIDxsZW9saUBmcmVlc2NhbGUuY29tPgorCitVcGRhdGVkIGZvciB0aGUgbmV3IHZlcnNpb24KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKKy0tLQordjIgOiBnZXQgbGVuZ3RoIG9mIGF2YWlsYmxlIGZyZWVvb2IgYnl0ZXMgZnJvbSBvb2JpbmZvIGluZm9ybWF0aW9uLAorICAgICAgbm90IHVzZSB0aGUgaW9jdGwgRUNDR0VUTEFZT1VUIHdoaWNoIGlzIGJlaW5nIGRlcHJlY2F0ZWQuCisKKyBmbGFzaF9lcmFzZS5jIHwgICA0NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAzOSBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZmxhc2hfZXJhc2UuYyBiL2ZsYXNoX2VyYXNlLmMKK2luZGV4IDkzMzM3M2EuLjRiOWQ4NGIgMTAwNjQ0CistLS0gYS9mbGFzaF9lcmFzZS5jCisrKysgYi9mbGFzaF9lcmFzZS5jCitAQCAtOTksNiArOTksNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAlib29sIGlzTkFORDsKKyAJaW50IGVycm9yID0gMDsKKyAJb2ZmX3Qgb2Zmc2V0ID0gMDsKKysJdm9pZCAqb29iX2RhdGEgPSBOVUxMOworIAorIAkvKgorIAkgKiBQcm9jZXNzIHVzZXIgYXJndW1lbnRzCitAQCAtMjAxLDE1ICsyMDIsNDMgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJCQlpZiAoaW9jdGwoZmQsIE1FTUdFVE9PQlNFTCwgJm9vYmluZm8pICE9IDApCisgCQkJCXJldHVybiBzeXNfZXJybXNnKCIlczogdW5hYmxlIHRvIGdldCBOQU5EIG9vYmluZm8iLCBtdGRfZGV2aWNlKTsKKyAKKysJCQljbGVhbm1hcmtlci50b3RsZW4gPSBjcHVfdG9famUzMig4KTsKKyAJCQkvKiBDaGVjayBmb3IgYXV0b3BsYWNlbWVudCAqLworIAkJCWlmIChvb2JpbmZvLnVzZWVjYyA9PSBNVERfTkFOREVDQ19BVVRPUExBQ0UpIHsKKy0JCQkJLyogR2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgZnJlZSBieXRlcyAqLworLQkJCQlpZiAoIW9vYmluZm8ub29iZnJlZVswXVsxXSkKKysJCQkJc3RydWN0IG5hbmRfZWNjbGF5b3V0X3VzZXIgZWNjbGF5b3V0OworKwkJCQlpbnQgaSwgb29iYXZhaWw7CisrCisrCQkJCWZvciAoaSA9IDAsIG9vYmF2YWlsID0gMDsgb29iaW5mby5vb2JmcmVlW2ldWzFdOyBpKyspCisrCQkJCQlvb2JhdmFpbCArPSBvb2JpbmZvLm9vYmZyZWVbaV1bMV07CisrCisrCQkJCWlmICghb29iYXZhaWwpCisgCQkJCQlyZXR1cm4gZXJybXNnKCIgRWVlcC4gQXV0b3BsYWNlbWVudCBzZWxlY3RlZCBhbmQgbm8gZW1wdHkgc3BhY2UgaW4gb29iIik7CisrCisrCQkJCS8qIEdldCB0aGUgcG9zaXRpb24gb2YgdGhlIGZyZWUgYnl0ZXMgKi8KKyAJCQkJY2xtcG9zID0gb29iaW5mby5vb2JmcmVlWzBdWzBdOworLQkJCQljbG1sZW4gPSBvb2JpbmZvLm9vYmZyZWVbMF1bMV07CistCQkJCWlmIChjbG1sZW4gPiA4KQorLQkJCQkJY2xtbGVuID0gODsKKysJCQkJY2xtbGVuID0gTUlOKG9vYmF2YWlsLCA4KTsKKysKKysJCQkJaWYgKG9vYmluZm8ub29iZnJlZVswXVsxXSA8IDggJiYgb29iYXZhaWwgPj0gOCkgeworKwkJCQkJaW50IGxlZnQsIG4sIGxhc3QgPSAwOworKwkJCQkJdm9pZCAqY207CisrCisrCQkJCQlvb2JfZGF0YSA9IG1hbGxvYyhtdGQub29iX3NpemUpOworKwkJCQkJaWYgKCFvb2JfZGF0YSkKKysJCQkJCQlyZXR1cm4gLUVOT01FTTsKKysKKysJCQkJCW1lbXNldChvb2JfZGF0YSwgMHhmZiwgbXRkLm9vYl9zaXplKTsKKysJCQkJCWNtID0gJmNsZWFubWFya2VyOworKwkJCQkJZm9yIChpID0gMCwgbGVmdCA9IGNsbWxlbjsgbGVmdCA7IGkrKykgeworKwkJCQkJCW4gPSBNSU4obGVmdCwgb29iaW5mby5vb2JmcmVlW2ldWzFdKTsKKysJCQkJCQltZW1jcHkob29iX2RhdGEgKyBvb2JpbmZvLm9vYmZyZWVbaV1bMF0sCisrCQkJCQkJCQljbSwgbik7CisrCQkJCQkJbGVmdCAtPSBuOworKwkJCQkJCWNtICAgKz0gbjsKKysJCQkJCQlsYXN0ID0gb29iaW5mby5vb2JmcmVlW2ldWzBdICsgbjsKKysJCQkJCX0KKysKKysJCQkJCWNsbWxlbiA9IGxhc3QgLSBjbG1wb3M7CisrCQkJCX0KKyAJCQl9IGVsc2UgeworIAkJCQkvKiBMZWdhY3kgbW9kZSAqLworIAkJCQlzd2l0Y2ggKG10ZC5vb2Jfc2l6ZSkgeworQEAgLTIyNyw3ICsyNTYsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkJCQkJCWJyZWFrOworIAkJCQl9CisgCQkJfQorLQkJCWNsZWFubWFya2VyLnRvdGxlbiA9IGNwdV90b19qZTMyKDgpOworIAkJfQorIAkJY2xlYW5tYXJrZXIuaGRyX2NyYyA9IGNwdV90b19qZTMyKG10ZF9jcmMzMigwLCAmY2xlYW5tYXJrZXIsIHNpemVvZihjbGVhbm1hcmtlcikgLSA0KSk7CisgCX0KK0BAIC0yNzYsNyArMzA0LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAKKyAJCS8qIHdyaXRlIGNsZWFubWFya2VyICovCisgCQlpZiAoaXNOQU5EKSB7CistCQkJaWYgKG10ZF93cml0ZV9vb2IobXRkX2Rlc2MsICZtdGQsIGZkLCAodWludDY0X3Qpb2Zmc2V0ICsgY2xtcG9zLCBjbG1sZW4sICZjbGVhbm1hcmtlcikgIT0gMCkgeworKwkJCXZvaWQgKmRhdGEgPSBvb2JfZGF0YSA/IG9vYl9kYXRhICsgY2xtcG9zIDogJmNsZWFubWFya2VyOworKwkJCWlmIChtdGRfd3JpdGVfb29iKG10ZF9kZXNjLCAmbXRkLCBmZCwgKHVpbnQ2NF90KW9mZnNldCArIGNsbXBvcywgY2xtbGVuLCBkYXRhKSAhPSAwKSB7CisgCQkJCXN5c19lcnJtc2coIiVzOiBNVEQgd3JpdGVvb2IgZmFpbHVyZSIsIG10ZF9kZXZpY2UpOworIAkJCQljb250aW51ZTsKKyAJCQl9CitAQCAtMjkxLDUgKzMyMCw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCXNob3dfcHJvZ3Jlc3MoJm10ZCwgb2Zmc2V0LCBlYiwgZWJfc3RhcnQsIGViX2NudCk7CisgCWJhcmV2ZXJib3NlKCFxdWlldCwgIlxuIik7CisgCisrCWlmIChvb2JfZGF0YSkKKysJCWZyZWUob29iX2RhdGEpOworKworIAlyZXR1cm4gMDsKKyB9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHNfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZGNhNzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzX2dpdC5iYgpAQCAtMCwwICsxLDQ0IEBACitTVU1NQVJZID0gIlRvb2xzIGZvciBtYW5hZ2luZyBtZW1vcnkgdGVjaG5vbG9neSBkZXZpY2VzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5saW51eC1tdGQuaW5mcmFkZWFkLm9yZy8iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvY29tbW9uLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xNzttZDU9YmEwNWIwNzkxMmE0NGVhMmJmODFjZTQwOTM4MDA0OWMiCisKK0RFUEVORFMgPSAiemxpYiBsem8gZTJmc3Byb2dzIHV0aWwtbGludXgiCisKK1BWID0gIjEuNS4xK2dpdCR7U1JDUFZ9IgorCitTUkNSRVYgPSAiOWYxMDcxMzJhNmEwNzNjY2UzNzQzNGNhOWNkYTY5MTdkZDhkODY2YiIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LmluZnJhZGVhZC5vcmcvbXRkLXV0aWxzLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtZXhjbHVzaW9uLXRvLW1rZnMtamZmczItZ2l0LTIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWFybXY3LW5lb24tYWxpZ25tZW50LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaGFzaHRhYmxlLVJlbW92ZS1kdXBsaWNhdGUtaGFzaHRhYmxlX2l0ZXJhdG9yX3ZhbHVlLS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tdGQtdXRpbHMtZml4LWNvcnJ1cHQtY2xlYW5tYXJrZXItd2l0aC1mbGFzaF9lcmFzZS0tai1jb21tYW5kLnBhdGNoIFwKKyIKKworUyA9ICIke1dPUktESVJ9L2dpdC8iCisKKyMgeGF0dHIgc3VwcG9ydCBjcmVhdGVzIGFuIGFkZGl0aW9uYWwgY29tcGlsZS10aW1lIGRlcGVuZGVuY3kgb24gYWNsIGJlY2F1c2UKKyMgdGhlIHN5cy9hY2wuaCBoZWFkZXIgaXMgbmVlZGVkLiBsaWJhY2wgaXMgbm90IG5lZWRlZCBhbmQgdGh1cyBlbmFibGluZyB4YXR0cgorIyByZWdhcmRsZXNzIHdoZXRoZXIgYWNsIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgaW4gdGhlIGRpc3RybyBzaG91bGQgYmUgb2theS4KK1BBQ0tBR0VDT05GSUcgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneGF0dHInLCAneGF0dHInLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1t4YXR0cl0gPSAiLCxhY2wsIgorCitFWFRSQV9PRU1BS0UgPSAiJ0NDPSR7Q0N9JyAnUkFOTElCPSR7UkFOTElCfScgJ0FSPSR7QVJ9JyAnQ0ZMQUdTPSR7Q0ZMQUdTfSAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd4YXR0cicsICcnLCAnLURXSVRIT1VUX1hBVFRSJywgZCl9IC1JJHtTfS9pbmNsdWRlJyAnQlVJTERESVI9JHtTfSciCisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0gU0JJTkRJUj0ke3NiaW5kaXJ9IE1BTkRJUj0ke21hbmRpcn0gSU5DTFVERURJUj0ke2luY2x1ZGVkaXJ9Cit9CisKK1BBQ0tBR0VTID0rICJtdGQtdXRpbHMtamZmczIgbXRkLXV0aWxzLXViaWZzIG10ZC11dGlscy1taXNjIgorCitGSUxFU19tdGQtdXRpbHMtamZmczIgPSAiJHtzYmluZGlyfS9ta2ZzLmpmZnMyICR7c2JpbmRpcn0vamZmczJkdW1wICR7c2JpbmRpcn0vamZmczJyZWFkZXIgJHtzYmluZGlyfS9zdW10b29sIgorRklMRVNfbXRkLXV0aWxzLXViaWZzID0gIiR7c2JpbmRpcn0vbWtmcy51YmlmcyAke3NiaW5kaXJ9L3ViaSoiCitGSUxFU19tdGQtdXRpbHMtbWlzYyA9ICIke3NiaW5kaXJ9L25mdGwqICR7c2JpbmRpcn0vZnRsKiAke3NiaW5kaXJ9L3JmZCogJHtzYmluZGlyfS9kb2MqICR7c2JpbmRpcn0vc2VydmVfaW1hZ2UgJHtzYmluZGlyfS9yZWN2X2ltYWdlIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworIyBnaXQvLmNvbXByLmMuZGVwOjQ2OiB3YXJuaW5nOiBOVUwgY2hhcmFjdGVyIHNlZW47IHJlc3Qgb2YgbGluZSBpZ25vcmVkCisjIGdpdC8uY29tcHIuYy5kZXA6NDc6ICoqKiBtaXNzaW5nIHNlcGFyYXRvci4gIFN0b3AuCitQQVJBTExFTF9NQUtFID0gIiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvZml4LWJyb2tlbi1sei5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvZml4LWJyb2tlbi1sei5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjQ1NDkxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9maXgtYnJva2VuLWx6LnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogV2VubGluIEthbmcgPHdlbmxpbi5rYW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IDhmOTMwNWEuLjY5NGU4MzcgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0yNTEsNiArMjUxLDcgQEAgaW5zdGFsbC1zY3JpcHRzOiAke0RFU1RESVJ9JChiaW5kaXIpL210b29scworIAlAJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICR7REVTVERJUn0kKGJpbmRpcikKKyAJQGZvciBqIGluICQoU0NSSVBUUykgOyBkbyBcCisgCQkkKElOU1RBTExfU0NSSVBUKSAkKHNyY2Rpcikvc2NyaXB0cy8kJGogJHtERVNURElSfSQoYmluZGlyKS8kJGogOyBcCisrCQkkKElOU1RBTExfUFJPR1JBTSkgJChzcmNkaXIpL3NjcmlwdHMvJCRqICR7REVTVERJUn0kKGJpbmRpcikvJCRqIDsgXAorIAkJZWNobyAke0RFU1RESVJ9JChiaW5kaXIpLyQkaiA7IFwKKyAJZG9uZQorIAlybSAtZiAke0RFU1RESVJ9JChiaW5kaXIpL2x6CistLSAKKzIuMC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvbXRvb2xzLW1ha2VpbmZvLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9tdG9vbHMtbWFrZWluZm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUyODczYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvbXRvb2xzLW1ha2VpbmZvLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCistLS0gbXRvb2xzLTMuOS45L2NvbmZpZ3VyZS5pbi5vcmlnCTIwMDYtMDQtMTQgMTY6MDU6NTQuMzM3NjU1MTkyIC0wNjAwCisrKysgbXRvb2xzLTMuOS45L2NvbmZpZ3VyZS5pbgkyMDA2LTA0LTE0IDE2OjEyOjI5LjczNjU0NTQyNCAtMDYwMAorQEAgLTIxLDYgKzIxLDMzIEBACisgQUNfQ19DT05TVAorIEFDX0NfSU5MSU5FCisgCisrQUNfQ0hFQ0tfUFJPRyhNQUtFSU5GTywgbWFrZWluZm8sIG1ha2VpbmZvLCApCisraWYgdGVzdCAieCRNQUtFSU5GTyIgPSAieCI7IHRoZW4KKysJTUFLRUlORk89IkBlY2hvIG1ha2VpbmZvIG1pc3Npbmc7IHRydWUiCisrZmkKKytBQ19DSEVDS19QUk9HKFRFWEkyRFZJLCB0ZXhpMmR2aSwgdGV4aTJkdmksICkKKytpZiB0ZXN0ICJ4JFRFWEkyRFZJIiA9ICJ4IjsgdGhlbgorKwlURVhJMkRWST0iQGVjaG8gdGV4aTJkdmkgbWlzc2luZzsgdHJ1ZSIKKytmaQorK0FDX0NIRUNLX1BST0coVEVYSTJQREYsIHRleGkycGRmLCB0ZXhpMnBkZiwgKQorK2lmIHRlc3QgIngkVEVYSTJQREYiID0gIngiOyB0aGVuCisrCVRFWEkyUERGPSJAZWNobyB0ZXhpMnBkZiBtaXNzaW5nOyB0cnVlIgorK2ZpCisrQUNfQ0hFQ0tfUFJPRyhURVhJMkhUTUwsIHRleGkyaHRtbCwgdGV4aTJodG1sLCApCisraWYgdGVzdCAieCRURVhJMkhUTUwiID0gIngiOyB0aGVuCisrCVRFWEkySFRNTD0iQGVjaG8gdGV4aTJodG1sIG1pc3Npbmc7IHRydWUiCisrZmkgICAgCisrQUNfQ0hFQ0tfUFJPRyhEVkkyUFMsIGR2aTJwcywgZHZpMnBzLCApCisraWYgdGVzdCAieCREVkkyUFMiID0gIngiOyB0aGVuCisrCURWSTJQUz0iQGVjaG8gZHZpMnBzIG1pc3Npbmc7IHRydWUiCisrZmkKKysKKytBQ19TVUJTVChNQUtFSU5GTykKKytBQ19TVUJTVChURVhJMkRWSSkKKytBQ19TVUJTVChURVhJMlBERikKKytBQ19TVUJTVChURVhJMkhUTUwpCisrQUNfU1VCU1QoRFZJMlBTKQorKworIAorIGRubCBDaGVjayBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zCisgZG5sIEVuYWJsZSBPUy8yIGV4dGVuZGVkIGRlbnNpdHkgZm9ybWF0IGRpc2tzCistLS0gbXRvb2xzLTMuOS45L01ha2VmaWxlLmluLnNhdgkyMDA2LTA0LTE0IDE1OjU2OjE5LjAwMDAwMDAwMCAtMDYwMAorKysrIG10b29scy0zLjkuOS9NYWtlZmlsZS5pbgkyMDA2LTA0LTE0IDE2OjE1OjI5LjMxNTI0NTMxMiAtMDYwMAorQEAgLTExLDEwICsxMSwxMSBAQAorIFVTRVJMREZMQUdTID0KKyBVU0VSTERMSUJTID0KKyAKKy1NQUtFSU5GTyA9IG1ha2VpbmZvCistVEVYSTJEVkkgPSB0ZXhpMmR2aQorLVRFWEkyUERGID0gdGV4aTJwZGYKKy1URVhJMkhUTUwgPSB0ZXhpMmh0bWwKKytNQUtFSU5GTyA9IEBNQUtFSU5GT0AKKytURVhJMkRWSSA9IEBURVhJMkRWSUAKKytURVhJMlBERiA9IEBURVhJMlBERkAKKytURVhJMkhUTUwgPSBAVEVYSTJIVE1MQAorK0RWSTJQUyA9IEBEVkkyUFNACisgCisgCisgIyBkbyBub3QgZWRpdCBiZWxvdyB0aGlzIGxpbmUKK0BAIC0xODEsNyArMTgyLDcgQEAKKyAKKyBwczogbXRvb2xzLnBzCisgJS5wczogJS5kdmkKKy0JZHZpcHMgLWYgPCAkPCA+ICRACisrCSQoRFZJMlBTKSAtZiA8ICQ8ID4gJEAKKyAKKyBwZGY6IG10b29scy5wZGYKKyAlLnBkZjogJS50ZXhpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL210b29scy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvbXRvb2xzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YTMyMDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL210b29scy5wYXRjaApAQCAtMCwwICsxLDEyOSBAQAorJE5ldEJTRDogcGF0Y2gtYWEsdiAxLjEwIDIwMDcvMDgvMTcgMjA6NTU6MzQgam9lcmcgRXhwICQKKworLS0tCisgTWFrZWZpbGUuaW4gfCAgIDc0ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzMyBpbnNlcnRpb25zKCspLCA0MSBkZWxldGlvbnMoLSkKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK0luZGV4OiBtdG9vbHMtMy45LjkvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBtdG9vbHMtMy45Ljkub3JpZy9NYWtlZmlsZS5pbgkyMDA3LTEwLTEyIDExOjE4OjQ2LjAwMDAwMDAwMCArMDEwMAorKysrIG10b29scy0zLjkuOS9NYWtlZmlsZS5pbgkyMDA3LTEwLTEyIDExOjI4OjE0LjAwMDAwMDAwMCArMDEwMAorQEAgLTE5NSwzMCArMTk1LDIyIEBAIGh0bWw6IG10b29scy5odG1sIG10b29sc190b2MuaHRtbAorIAorICMgRG9uJ3QgY2QsIHRvIGF2b2lkIGJyZWFraW5nIGluc3RhbGwtc2ggcmVmZXJlbmNlcy4KKyBpbnN0YWxsLWluZm86IGluZm8KKy0JJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoaW5mb2RpcikKKysJJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICR7REVTVERJUn0kKGluZm9kaXIpCisgCWlmIHRlc3QgLWYgbXRvb2xzLmluZm87IHRoZW4gXAorIAkgIGZvciBpIGluIG10b29scy5pbmZvKjsgZG8gXAorLQkgICAgJChJTlNUQUxMX0RBVEEpICQkaSAkKGluZm9kaXIpLyQkaTsgXAorKwkgICAgJChJTlNUQUxMX0RBVEEpICQkaSAke0RFU1RESVJ9JChpbmZvZGlyKS8kJGk7IFwKKyAJICBkb25lOyBcCisgCWVsc2UgXAorIAkgIGZvciBpIGluICQoc3JjZGlyKS9tdG9vbHMuaW5mbyo7IGRvIFwKKy0JICAgICQoSU5TVEFMTF9EQVRBKSAkJGkgJChpbmZvZGlyKS9gZWNobyAkJGkgfCBzZWQgJ3N8XiQoc3JjZGlyKS98fCdgOyBcCisrCSAgICAkKElOU1RBTExfREFUQSkgJCRpICR7REVTVERJUn0kKGluZm9kaXIpL2BlY2hvICQkaSB8IHNlZCAnc3xeJChzcmNkaXIpL3x8J2A7IFwKKyAJICBkb25lOyBcCisgCWZpOyBcCistCWlmIFsgLW4gIiQoSU5TVEFMTF9JTkZPKSIgXSA7IHRoZW4gXAorLQkJaWYgWyAtZiAkKGluZm9kaXIpL2Rpci5pbmZvIF0gOyB0aGVuIFwKKy0JCQkkKElOU1RBTExfSU5GTykgJChpbmZvZGlyKS9tdG9vbHMuaW5mbyAkKGluZm9kaXIpL2Rpci5pbmZvOyBcCistCQlmaTsgXAorLQkJaWYgWyAtZiAkKGluZm9kaXIpL2RpciBdIDsgdGhlbiBcCistCQkJJChJTlNUQUxMX0lORk8pICQoaW5mb2RpcikvbXRvb2xzLmluZm8gJChpbmZvZGlyKS9kaXI7IFwKKy0JCWZpOyBcCistCWZpCisgCisgdW5pbnN0YWxsLWluZm86CisgCWNkICQoaW5mb2RpcikgJiYgcm0gLWYgbXRvb2xzLmluZm8qCisgCistaW5zdGFsbDoJJChiaW5kaXIpL210b29scyBAQklORkxPUFBZREAgaW5zdGFsbC1tYW4gaW5zdGFsbC1saW5rcyBcCistCQkkKGJpbmRpcikvbWttYW5pZmVzdCBpbnN0YWxsLXNjcmlwdHMgaW5zdGFsbC1pbmZvCisraW5zdGFsbDoJJHtERVNURElSfSQoYmluZGlyKS9tdG9vbHMgJHtERVNURElSfSQoYmluZGlyKS9mbG9wcHlkIGluc3RhbGwtbWFuIGluc3RhbGwtbGlua3MgXAorKwkJJHtERVNURElSfSQoYmluZGlyKS9ta21hbmlmZXN0IGluc3RhbGwtc2NyaXB0cyBpbnN0YWxsLWluZm8KKyAKKyB1bmluc3RhbGw6CXVuaW5zdGFsbC1iaW4gdW5pbnN0YWxsLW1hbiB1bmluc3RhbGwtbGlua3MgXAorIAkJdW5pbnN0YWxsLXNjcmlwdHMKK0BAIC0yMjgsNTIgKzIyMCw1MiBAQCBkaXN0Y2xlYW46IGNsZWFuIHRleGNsZWFuCisgbWFpbnRhaW5lci1jbGVhbjogZGlzdGNsZWFuCisgCisgCistJChiaW5kaXIpL2Zsb3BweWQ6IGZsb3BweWQKKy0JJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoYmluZGlyKQorLQkkKElOU1RBTExfUFJPR1JBTSkgZmxvcHB5ZCAkKGJpbmRpcikvZmxvcHB5ZAorKyR7REVTVERJUn0kKGJpbmRpcikvZmxvcHB5ZDogZmxvcHB5ZAorKwkkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJHtERVNURElSfSQoYmluZGlyKQorKwkkKElOU1RBTExfUFJPR1JBTSkgZmxvcHB5ZCAke0RFU1RESVJ9JChiaW5kaXIpL2Zsb3BweWQKKyAKKy0kKGJpbmRpcikvZmxvcHB5ZF9pbnN0YWxsdGVzdDogZmxvcHB5ZF9pbnN0YWxsdGVzdAorLQkkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChiaW5kaXIpCistCSQoSU5TVEFMTF9QUk9HUkFNKSBmbG9wcHlkX2luc3RhbGx0ZXN0ICQoYmluZGlyKS9mbG9wcHlkX2luc3RhbGx0ZXN0CisrJHtERVNURElSfSQoYmluZGlyKS9mbG9wcHlkX2luc3RhbGx0ZXN0OiBmbG9wcHlkX2luc3RhbGx0ZXN0CisrCSQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAke0RFU1RESVJ9JChiaW5kaXIpCisrCSQoSU5TVEFMTF9QUk9HUkFNKSBmbG9wcHlkX2luc3RhbGx0ZXN0ICR7REVTVERJUn0kKGJpbmRpcikvZmxvcHB5ZF9pbnN0YWxsdGVzdAorIAorLSQoYmluZGlyKS9tdG9vbHM6IG10b29scworLQkkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChiaW5kaXIpCistCSQoSU5TVEFMTF9QUk9HUkFNKSBtdG9vbHMgJChiaW5kaXIpL210b29scworKyR7REVTVERJUn0kKGJpbmRpcikvbXRvb2xzOiBtdG9vbHMKKysJJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICR7REVTVERJUn0kKGJpbmRpcikKKysJJChJTlNUQUxMX1BST0dSQU0pIG10b29scyAke0RFU1RESVJ9JChiaW5kaXIpL210b29scworIAorLSQoYmluZGlyKS9ta21hbmlmZXN0OiBta21hbmlmZXN0CistCSQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKGJpbmRpcikKKy0JJChJTlNUQUxMX1BST0dSQU0pIG1rbWFuaWZlc3QgJChiaW5kaXIpL21rbWFuaWZlc3QKKyske0RFU1RESVJ9JChiaW5kaXIpL21rbWFuaWZlc3Q6IG1rbWFuaWZlc3QKKysJJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICR7REVTVERJUn0kKGJpbmRpcikKKysJJChJTlNUQUxMX1BST0dSQU0pIG1rbWFuaWZlc3QgJHtERVNURElSfSQoYmluZGlyKS9ta21hbmlmZXN0CisgCisgIyQoRVRDRElSKS9tdG9vbHM6IG10b29scy5ldGMKKyAjCWNwIG10b29scy5ldGMgJChFVENESVIpL210b29scworIAorLWluc3RhbGwtbGlua3M6ICQoYmluZGlyKS9tdG9vbHMKKytpbnN0YWxsLWxpbmtzOiAke0RFU1RESVJ9JChiaW5kaXIpL210b29scworIAlAZm9yIGogaW4gJChMSU5LUyk7IGRvIFwKKy0JCXJtIC1mICQoYmluZGlyKS8kJGogOyBcCistCQkkKExOX1MpIG10b29scyAkKGJpbmRpcikvJCRqIDsgXAorLQkJZWNobyAkKGJpbmRpcikvJCRqIDsgXAorKwkJcm0gLWYgJHtERVNURElSfSQoYmluZGlyKS8kJGogOyBcCisrCQkkKExOX1MpIG10b29scyAke0RFU1RESVJ9JChiaW5kaXIpLyQkaiA7IFwKKysJCWVjaG8gJHtERVNURElSfSQoYmluZGlyKS8kJGogOyBcCisgCWRvbmUKKyAKKyAjIyAieiIgaXMgdGhlIG9sZGVyIHZlcnNpb24gb2YgImd6IjsgdGhlIG5hbWUgaXMganVzdCAqdG9vKiBzaG9ydAorLWluc3RhbGwtc2NyaXB0czogJChiaW5kaXIpL210b29scworLQlAJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoYmluZGlyKQorK2luc3RhbGwtc2NyaXB0czogJHtERVNURElSfSQoYmluZGlyKS9tdG9vbHMKKysJQCQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAke0RFU1RESVJ9JChiaW5kaXIpCisgCUBmb3IgaiBpbiAkKFNDUklQVFMpIDsgZG8gXAorLQkJJChJTlNUQUxMX1BST0dSQU0pICQoc3JjZGlyKS9zY3JpcHRzLyQkaiAkKGJpbmRpcikvJCRqIDsgXAorLQkJZWNobyAkKGJpbmRpcikvJCRqIDsgXAorKwkJJChJTlNUQUxMX1NDUklQVCkgJChzcmNkaXIpL3NjcmlwdHMvJCRqICR7REVTVERJUn0kKGJpbmRpcikvJCRqIDsgXAorKwkJZWNobyAke0RFU1RESVJ9JChiaW5kaXIpLyQkaiA7IFwKKyAJZG9uZQorLQlybSAtZiAkKGJpbmRpcikvbHoKKy0JJChMTl9TKSB1eiAkKGJpbmRpcikvbHoKKysJcm0gLWYgJHtERVNURElSfSQoYmluZGlyKS9segorKwkkKExOX1MpIHV6ICR7REVTVERJUn0kKGJpbmRpcikvbHoKKyAKKyBpbnN0YWxsLW1hbjoKKy0JQCQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKE1BTjFESVIpCisrCUAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJHtERVNURElSfSQoTUFOMURJUikKKyAJQGZvciBqIGluICQoTUFOMSk7IGRvIFwKKy0JCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRqICQoTUFOMURJUikvJCRqIDsgXAorLQkJZWNobyAkKE1BTjFESVIpLyQkaiA7IFwKKysJCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRqICR7REVTVERJUn0kKE1BTjFESVIpLyQkaiA7IFwKKysJCWVjaG8gJHtERVNURElSfSQoTUFOMURJUikvJCRqIDsgXAorIAlkb25lCistCUAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChNQU41RElSKQorKwlAJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICR7REVTVERJUn0kKE1BTjVESVIpCisgCUBmb3IgaiBpbiAkKE1BTjUpOyBkbyBcCistCQkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpLyQkaiAkKE1BTjVESVIpLyQkaiA7IFwKKy0JCWVjaG8gJChNQU41RElSKS8kJGogOyBcCisrCQkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpLyQkaiAke0RFU1RESVJ9JChNQU41RElSKS8kJGogOyBcCisrCQllY2hvICR7REVTVERJUn0kKE1BTjVESVIpLyQkaiA7IFwKKyAJZG9uZQorIAorIHVuaW5zdGFsbC1iaW46CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL25vLXgxMS5ncGx2My5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvbm8teDExLmdwbHYzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYjNlMzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL25vLXgxMS5ncGx2My5wYXRjaApAQCAtMCwwICsxLDE4IEBACitEaXNhYmxlIGJ1aWxkaW5nIHdpdGggWDExIHN1cHBvcnQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworZGlmZiAtdXJOIG10b29scy00LjAuMTUub3JpZy8vTWFrZWZpbGUuaW4gbXRvb2xzLTQuMC4xNS8vTWFrZWZpbGUuaW4KKy0tLSBtdG9vbHMtNC4wLjE1Lm9yaWcvL01ha2VmaWxlLmluCTIwMTAtMTAtMTcgMDg6NDE6MDkuMDAwMDAwMDAwIC0wNzAwCisrKysgbXRvb2xzLTQuMC4xNS8vTWFrZWZpbGUuaW4JMjAxMC0xMS0yMyAxMzo1OTo0OS4yNTgyNTgzNzQgLTA4MDAKK0BAIC0xNDYsNyArMTQ2LDcgQEAKKyBDWFhGTEFHUyAgPSAkKENQUEZMQUdTKSAkKERFRlMpICQoTVlDWFhGTEFHUykgLUkuIEBleHRyYWluY2x1ZGVkaXJAIC1JQHNyY2RpckAgJChVU0VSQ0ZMQUdTKQorIExJTksgICAgICA9ICQoQ0MpICQoTERGTEFHUykgJChVU0VSTERGTEFHUykgQGV4dHJhbGliZGlyQAorIEFMTExJQlMgICA9ICQoVVNFUkxETElCUykgJChNQUNIREVQTElCUykgJChTSExJQikgJChMSUJTKQorLVhfTERGTEFHUyA9ICQoWF9FWFRSQV9MSUJTKSAkKFhfTElCUykgLWxYYXUgLWxYMTEgJChMSUJTKQorK1hfTERGTEFHUyA9ICQoWF9FWFRSQV9MSUJTKSAkKFhfTElCUykgJChMSUJTKQorIFhfQ0NGTEFHUyA9ICQoWF9DRkxBR1MpICQoQ0ZMQUdTKQorIAorIGFsbDogICAgbXRvb2xzICQoTElOS1MpIG1rbWFuaWZlc3QgQEZMT1BQWURAIG10b29scy4xIG10b29scy41CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL25vLXgxMS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvbm8teDExLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNWI2MjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL25vLXgxMS5wYXRjaApAQCAtMCwwICsxLDIxIEBACistLS0KKyBNYWtlZmlsZS5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKKy0tLSBtdG9vbHMtMy45Ljkub3JpZy9NYWtlZmlsZS5pbgorKysrIG10b29scy0zLjkuOS9NYWtlZmlsZS5pbgorQEAgLTEyOCwxMSArMTI4LDExIEBAIFhfRVhUUkFfTElCUyA9IEBYX0VYVFJBX0xJQlNACisgWF9QUkVfTElCUyA9IEBYX1BSRV9MSUJTQAorIENGTEFHUyA9ICQoQ1BQRkxBR1MpICQoREVGUykgJChNWUNGTEFHUykgLUkuIEBleHRyYWluY2x1ZGVkaXJAIC1JQHNyY2RpckAgJChVU0VSQ0ZMQUdTKSAKKyBDWFhGTEFHUyAgPSAkKENQUEZMQUdTKSAkKERFRlMpICQoTVlDWFhGTEFHUykgLUkuIEBleHRyYWluY2x1ZGVkaXJAIC1JQHNyY2RpckAgJChVU0VSQ0ZMQUdTKSAKKyBMSU5LICAgICAgPSAkKENDKSAkKExERkxBR1MpICQoVVNFUkxERkxBR1MpIEBleHRyYWxpYmRpckAKKyBBTExMSUJTICAgPSAkKFVTRVJMRExJQlMpICQoTUFDSERFUExJQlMpICQoU0hMSUIpICQoTElCUykKKy1YX0xERkxBR1MgPSAkKFhfRVhUUkFfTElCUykgJChYX0xJQlMpICQoWF9QUkVfTElCUykgLWxYYXUgLWxYMTEgJChMSUJTKSAKKytYX0xERkxBR1MgPSAkKFhfRVhUUkFfTElCUykgJChYX0xJQlMpICQoWF9QUkVfTElCUykgJChMSUJTKQorIFhfQ0NGTEFHUyA9ICQoWF9DRkxBR1MpICQoQ0ZMQUdTKQorIAorIGFsbDogICAgbXRvb2xzICQoTElOS1MpIG1rbWFuaWZlc3QgQEZMT1BQWURACisgCisgJS5vOiAlLmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHNfMy45LjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzXzMuOS45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyODRhNzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzXzMuOS45LmJiCkBAIC0wLDAgKzEsNTYgQEAKKyMgbXRvb2xzIE9FIGJ1aWxkIGZpbGUKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgcGFja2FnZXMvQ09QWUlORykKKworU1VNTUFSWSA9ICJVdGlsaXRpZXMgdG8gYWNjZXNzIE1TLURPUyBkaXNrcyB3aXRob3V0IG1vdW50aW5nIHRoZW0iCitERVNDUklQVElPTiA9ICJNdG9vbHMgaXMgYSBjb2xsZWN0aW9uIG9mIHV0aWxpdGllcyBmb3IgYWNjZXNzaW5nIE1TLURPUyBkaXNrcyBmcm9tIFVuaXggd2l0aG91dCBtb3VudGluZyB0aGVtLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9tdG9vbHMvIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05MmI1OGVjNzc2OTY3ODhjZTI3OGIwNDRkMmE4ZTlkMyIKK1BSID0gInI2IgorCitSREVQRU5EU18ke1BOfSA9ICJnbGliYy1nY29udi1pYm04NTAiCitSUkVDT01NRU5EU18ke1BOfSA9ICJcCisJZ2xpYmMtZ2NvbnYtaWJtNDM3IFwKKwlnbGliYy1nY29udi1pYm03MzcgXAorCWdsaWJjLWdjb252LWlibTc3NSBcCisJZ2xpYmMtZ2NvbnYtaWJtODUxIFwKKwlnbGliYy1nY29udi1pYm04NTIgXAorCWdsaWJjLWdjb252LWlibTg1NSBcCisJZ2xpYmMtZ2NvbnYtaWJtODU3IFwKKwlnbGliYy1nY29udi1pYm04NjAgXAorCWdsaWJjLWdjb252LWlibTg2MSBcCisJZ2xpYmMtZ2NvbnYtaWJtODYyIFwKKwlnbGliYy1nY29udi1pYm04NjMgXAorCWdsaWJjLWdjb252LWlibTg2NSBcCisJZ2xpYmMtZ2NvbnYtaWJtODY2IFwKKwlnbGliYy1nY29udi1pYm04NjkgXAorCSIKKworI2h0dHA6Ly9tdG9vbHMubGludXgubHUvbXRvb2xzLSR7UFZ9LnRhci5neiAKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL210b29scy0ke1BWfS50YXIuZ3ogXAorCWZpbGU6Ly9tdG9vbHMtbWFrZWluZm8ucGF0Y2ggXAorCWZpbGU6Ly9tdG9vbHMucGF0Y2ggXAorCWZpbGU6Ly9uby14MTEucGF0Y2ggXAorCWZpbGU6Ly9maXgtYnJva2VuLWx6LnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjNlNjhiODU3YjRlMWYzYTY1MjFkMWRmZWZiZDMwYTM2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFmMDgzYTczNDI1ZDY2NGQ0NjA3ZWY2YzY1NjRmZDkzMTlhMGU0N2VlN2MxMDUyNTlhNDUzNTZjYjgzNDY5MGUiCisKK1MgPSAiJHtXT1JLRElSfS9tdG9vbHMtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC14IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2xpYmJzZF0gPSAiYWNfY3ZfbGliX2JzZF9tYWluPXllcyxhY19jdl9saWJfYnNkX21haW49bm8sbGliYnNkIgorCitkb19pbnN0YWxsX3ByZXBlbmQgKCkgeworICAgICMgQ3JlYXRlIGJpbmRpciB0byBmaXggcGFyYWxsZWwgaW5zdGFsbGF0aW9uIGlzc3VlcworICAgIG1rZGlyIC1wICR7RH0vJHtiaW5kaXJ9CisgICAgbWtkaXIgLXAgJHtEfS8ke2RhdGFkaXJ9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzXzQuMC4xOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHNfNC4wLjE4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZGVjZmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzXzQuMC4xOC5iYgpAQCAtMCwwICsxLDQ3IEBACitTVU1NQVJZID0gIlV0aWxpdGllcyB0byBhY2Nlc3MgTVMtRE9TIGRpc2tzIHdpdGhvdXQgbW91bnRpbmcgdGhlbSIKK0RFU0NSSVBUSU9OID0gIk10b29scyBpcyBhIGNvbGxlY3Rpb24gb2YgdXRpbGl0aWVzIHRvIGFjY2VzcyBNUy1ET1MgZGlza3MgZnJvbSBHTlUgYW5kIFVuaXggd2l0aG91dCBtb3VudGluZyB0aGVtLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9tdG9vbHMvIgorU0VDVElPTiA9ICJvcHRpb25hbCIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworCitSREVQRU5EU18ke1BOfSA9ICJnbGliYy1nY29udi1pYm04NTAiCitSUkVDT01NRU5EU18ke1BOfSA9ICJcCisJZ2xpYmMtZ2NvbnYtaWJtNDM3IFwKKwlnbGliYy1nY29udi1pYm03MzcgXAorCWdsaWJjLWdjb252LWlibTc3NSBcCisJZ2xpYmMtZ2NvbnYtaWJtODUxIFwKKwlnbGliYy1nY29udi1pYm04NTIgXAorCWdsaWJjLWdjb252LWlibTg1NSBcCisJZ2xpYmMtZ2NvbnYtaWJtODU3IFwKKwlnbGliYy1nY29udi1pYm04NjAgXAorCWdsaWJjLWdjb252LWlibTg2MSBcCisJZ2xpYmMtZ2NvbnYtaWJtODYyIFwKKwlnbGliYy1nY29udi1pYm04NjMgXAorCWdsaWJjLWdjb252LWlibTg2NSBcCisJZ2xpYmMtZ2NvbnYtaWJtODY2IFwKKwlnbGliYy1nY29udi1pYm04NjkgXAorCSIKK1NSQ19VUklbbWQ1c3VtXSA9ICJhMjM2NDY2MTc1NDZiZjZhZDU2ZjA2MWQ4YjI4M2M4NSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1OWU5Y2Y4MDg4NTM5OWM0ZjIyOWU1ZDg3ZTQ5YzBjMmJmZWVjMDQ0ZTEzODZkNTlmY2QwYjBhZWFkNmIyZjg1IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vbXRvb2xzL210b29scy0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL210b29scy1tYWtlaW5mby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9uby14MTEuZ3BsdjMucGF0Y2giCisKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LXgiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbbGliYnNkXSA9ICJhY19jdl9saWJfYnNkX21haW49eWVzLGFjX2N2X2xpYl9ic2RfbWFpbj1ubyxsaWJic2QiCisKK2RvX2luc3RhbGxfcHJlcGVuZCAoKSB7CisgICAgIyBDcmVhdGUgYmluZGlyIHRvIGZpeCBwYXJhbGxlbCBpbnN0YWxsYXRpb24gaXNzdWVzCisgICAgbWtkaXIgLXAgJHtEfS8ke2JpbmRpcn0KKyAgICBta2RpciAtcCAke0R9LyR7ZGF0YWRpcn0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL25hc20vbmFzbV8yLjExLjA4LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbmFzbS9uYXNtXzIuMTEuMDguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA3MjRlNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL25hc20vbmFzbV8yLjExLjA4LmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiR2VuZXJhbC1wdXJwb3NlIHg4NiBhc3NlbWJsZXIiCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJCU0QtMi1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT05MDkwNDQ4NmY4ZmJmMTg2MWNmNDI3NTJlMWEzOWVmZSIKK0NPTVBBVElCTEVfSE9TVCA9ICcoeDg2XzY0fGkuODYpLiotKGxpbnV4fGZyZWVic2QuKiknCisKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm5hc20udXMvcHViL25hc20vcmVsZWFzZWJ1aWxkcy8ke1BWfS9uYXNtLSR7UFZ9LnRhci5iejIgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiN2FhZTVjYjhlMDNmYWM0ODAyOWM4MmE3NDcwYWIwNjYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWRhM2EwMjkxYTBiZGMwNjMwNWI3YmExOTRmMWUyYzJiNTVhZTZmMTEyMTBiNGFmNDM3Mjk4NjgxNDlkNTQ0NSIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlpZiBbIC1mICR7U30vYWNsb2NhbC5tNCBdICYmIFsgISAtZiAke1N9L2FjaW5jbHVkZS5tNCBdOyB0aGVuCisJCW12ICR7U30vYWNsb2NhbC5tNCAke1N9L2FjaW5jbHVkZS5tNAorCWZpCit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjEKKworCW9lX3J1bm1ha2UgJ0lOU1RBTExST09UPSR7RH0nIGluc3RhbGwKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK0RFUEVORFMgPSAiZ3JvZmYtbmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvZml4LXJlZ2V4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvZml4LXJlZ2V4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNDBhZmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9maXgtcmVnZXgucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSA1NWY2ZmQ4ZjE5NThhYTM2NTg0ZWVmZWVjY2U3ODJhNTA1OTYzYzg4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogYmVudm0gPGJlbnZtQHlvdy1nbW9mZmF0dC1seDIud3JzLmNvbT4KK0RhdGU6IFdlZCwgOSBKYW4gMjAxMyAxMjoxNDowNiAtMDUwMAorU3ViamVjdDogW1BBVENIXSBGaXggTWFrZWZpbGUgcmVndWxhciBleHByZXNzaW9uCisKK1RoaXMgcGF0Y2ggbW9kaWZpZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gd2l0aGluIGEgTWFrZWZpbGUgdG8gc3RvcCBidWlsZHMKK2Zyb20gZmFpbGluZyBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgcGF0aCBjb250YWlucyB0aGUgY2hhcmFjdGVycyAiLmEiLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKworLS0tCisgTWFrZWZpbGUucHJvZy5pbiB8ICAgIDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLnByb2cuaW4gYi9NYWtlZmlsZS5wcm9nLmluCitpbmRleCA3NjMxMGM5Li40NGMzNTM0IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUucHJvZy5pbgorKysrIGIvTWFrZWZpbGUucHJvZy5pbgorQEAgLTEyLDcgKzEyLDcgQEAgTElOS0ZMQUdTID0gQExJTktGTEFHU0AKKyAKKyBBTExfTElCUyA9ICQoWExJQlMpICQoTElCUykKKyBNYWtlZmlsZS5sdDoKKy0JZWNobyAnTFRfTElCUz0nYGVjaG8gJChBTExfTElCUyl8c2VkICdzL1wuYS8ubGEvZydgID5NYWtlZmlsZS5sdAorKwllY2hvICdMVF9MSUJTPSdgZWNobyAkKEFMTF9MSUJTKSB8IHNlZCAncy9cLmFccy9cLmxhIC9nJyB8IHNlZCBzL1wuYSQkL1wubGEvYCA+IE1ha2VmaWxlLmx0CisgCisgUFJPRzo9JChzaGVsbCBlY2hvICIkKFBST0cpIiB8IHNlZCAnQHByb2dyYW1fdHJhbnNmb3JtX25hbWVAJykKKyAKKy0tIAorMS43LjAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9tYWtlZmlsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL21ha2VmaWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2OGI5YjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9tYWtlZmlsZS5wYXRjaApAQCAtMCwwICsxLDM5IEBACitUaGlzIHBhdGNoIGZpeGVzIGxpYnRvb2wgUUEgaXNzdWVzIHdpdGggV09SS0RJUiBjcmVlcGluZyBpbiB0bworbGlib3NwZ3JvdmUubGEgYW5kIGxpYm9zdHlsZS5sYS4gUGF0Y2ggb2J0YWluZWQgZnJvbSBPcGVuRW1iZWRkZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT3RoZXJdCitXb3JrYXJvdW5kIGlzIHNwZWNpZmljIHRvIG91ciBidWlsZCBzeXN0ZW0uCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitJbmRleDogb3BlbmphZGUtMS4zLjIvc3Bncm92ZS9NYWtlZmlsZS5zdWIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuamFkZS0xLjMuMi5vcmlnL3NwZ3JvdmUvTWFrZWZpbGUuc3ViCisrKysgb3BlbmphZGUtMS4zLjIvc3Bncm92ZS9NYWtlZmlsZS5zdWIKK0BAIC0xLDggKzEsOCBAQAorIExUVkVSU0lPTj0wOjE6MAorIExJQj1vc3Bncm92ZQorIElOQ0xVREU9LUkkKHNyY2RpcikvLi4vZ3JvdmUKKy1ERVBMSUJTPS1sbSAtTCQoVE9QKS9ncm92ZSAtTCQoVE9QKS9ncm92ZS8ubGlicyBcCistCS1MJChUT1ApL2xpYiAtTCQoVE9QKS9saWIvLmxpYnMgXAorK0RFUExJQlM9LWxtICQoVE9QKS9ncm92ZSBcCisrCSQoVE9QKS9saWIgXAorIAkkKExJQl9USFJFQURTKQorIE9CSlM9R3JvdmVBcHAubyBHcm92ZUJ1aWxkZXIubyBTZE5vZGUubworIEdFTlNSQ1M9Z3JvdmVfaW5zdC5jeHgKK0luZGV4OiBvcGVuamFkZS0xLjMuMi9zdHlsZS9NYWtlZmlsZS5zdWIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuamFkZS0xLjMuMi5vcmlnL3N0eWxlL01ha2VmaWxlLnN1YgorKysrIG9wZW5qYWRlLTEuMy4yL3N0eWxlL01ha2VmaWxlLnN1YgorQEAgLTEsOCArMSw4IEBACisgTFRWRVJTSU9OPTA6MTowCisgTElCPW9zdHlsZQorLURFUExJQlM9LWxtIC1MJChUT1ApL2dyb3ZlIC1MJChUT1ApL2dyb3ZlLy5saWJzIFwKKy0gIC1MJChUT1ApL2xpYiAtTCQoVE9QKS9saWIvLmxpYnMgXAorLSAgLUwkKFRPUCkvc3Bncm92ZSAtTCQoVE9QKS9zcGdyb3ZlLy5saWJzIAorK0RFUExJQlM9LWxtICQoVE9QKS9ncm92ZSBcCisrICAkKFRPUCkvbGliICBcCisrICAkKFRPUCkvc3Bncm92ZQorIE9CSlM9TGFuZ09iai5vIFwKKyAgIENvbGxlY3Rvci5vIFwKKyAgIERzc3NsQXBwLm8gXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvbXNnZ2VuLnBsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvbXNnZ2VuLnBsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0N2ZkNDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9tc2dnZW4ucGwucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorY29tbWl0IGZjYzViOTRmMTE4NDk1YjFhNDY3ZWRjZGE2YzZmNjMxNjkxYzNmNjkKK0F1dGhvcjogRGVubmlzIExhbiA8ZGVubmlzLnl4dW5AZ21haWwuY29tPgorRGF0ZTogICBUdWUgSnVsIDMgMDk6MjU6NDIgMjAxMiArMDgwMAorCisgICAgb3BlbmphZGU6IGZpeCB1bmRlZmluZWQgR2V0b3B0cyBlcnJvciwgdXNlIHN0ZCBuYW1lc3BhY2UKKyAgICAKKyAgICBVc2luZyBHZW50b28gTGludXggYXMgdGhlIGJ1aWxkIGhvc3QsIGl0IGZhaWxzIHdpdGhvdXQgdGhpcyBwYXRjaAorICAgIFVzZSBHZXRvcHQ6OlN0ZCBpbiBwbGFjZSBvZiBnZXRvcHRzLnBsLgorICAgIAorICAgIFVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbm8gdXBzdHJlYW1dCisgICAgT3JpZ2luYWwtQXV0aG9yLUJ5OiBNaWtlIEdpbGJlcnQgPGZsb3BweW1AZ2VudG9vLm9yZz4KKyAgICBTaWduZWQtb2ZmLWJ5OiBEZW5uaXMgTGFuIDxkZW5uaXMueXh1bkBnbWFpbC5jb20+CisKK2RpZmYgLS1naXQgYS9tc2dnZW4ucGwgYi9tc2dnZW4ucGwKK2luZGV4IDBjMzM5NjguLjJlZTNmNjYgMTAwNjQ0CistLS0gYS9tc2dnZW4ucGwKKysrKyBiL21zZ2dlbi5wbAorQEAgLTQsNiArNCw3IEBACisgIyBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgY29weWluZyBwZXJtaXNzaW9uLgorIAorIHVzZSBQT1NJWDsKKyt1c2UgR2V0b3B0OjpTdGQ7CisgCisgIyBQYWNrYWdlIGFuZCB2ZXJzaW9uLgorICRwYWNrYWdlID0gJ29wZW5qYWRlJzsKK0BAIC0xOCw4ICsxOSw3IEBAICRnZW5fYyA9IDA7CisgdW5kZWYgJG9wdF9sOworIHVuZGVmICRvcHRfcDsKKyB1bmRlZiAkb3B0X3Q7CistZG8gJ2dldG9wdHMucGwnOworLSZHZXRvcHRzKCdsOnA6dDonKTsKKytnZXRvcHRzKCdsOnA6dDonKTsKKyAkbW9kdWxlID0gJG9wdF9sOworICRwb3RfZmlsZSA9ICRvcHRfcDsKKyAKK0BAIC03Miw3ICs3Miw3IEBAIHdoaWxlICg8REVGPikgeworICAgICBlbHNlIHsKKyAJJGZpZWxkWzBdID1+IC9eW0lXUVhFXVswLTldJC8gfHwgJmVycm9yKCJpbnZhbGlkIGZpcnN0IGZpZWxkIik7OworIAkkdHlwZVskbnVtXSA9IHN1YnN0cigkZmllbGRbMF0sIDAsIDEpOworLQkkYXJnYyA9IGludChzdWJzdHIoJGZpZWxkWzBdLCAxLCAxKSk7CisrCSRhcmdjID0gc3Vic3RyKCRmaWVsZFswXSwgMSwgMSk7CisgICAgIH0KKyAgICAgJG5hcmdzWyRudW1dID0gJGFyZ2M7CisgICAgICRmaWVsZFsxXSA9fiAvXlthLXpBLVpfXVthLXpBLVowLTlfXSskLyB8fCAmZXJyb3IoImludmFsaWQgdGFnIik7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9yZWF1dG9jb25mLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvcmVhdXRvY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTIzYTRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvcmVhdXRvY29uZi5wYXRjaApAQCAtMCwwICsxLDgzIEBACitFbnN1cmUgd2UgcmVhdXRvY29uZiB0aGUgcGFja2FnCisKK0N1cnJlbnRseSBzaW5jZSBjb25maWd1cmUuaW4gaW4gaXMgaW4gYSBzdWJkaXJlY3RvcnksIHdlIGRvbid0IHJlYXV0b2NvbmYgdGhlIAorcmVjaXBlLiBXZSByZWFsbHkgbmVlZCB0byBkbyB0aGlzLCB0byB1cGRhdGUgdGhpbmdzIGxpa2UgdGhlIGxpYnRvb2wgc2NyaXB0IHVzZWQKK2FuZCBmaXggdmFyaW91cyBpc3N1ZXMgc3VjaCBhcyB0aG9zZSB0aGF0IGNvdWxkIGNyZWVwIGluIGlmIGEgcmVhdXRvY29uZiBpcyAKK3RyaWdnZXJlZCBmb3Igc29tZSByZWFzb24uIFNpbmNlIHRoaXMgc291cmNlIG9ubHkgY2FsbHMgQU1fSU5JVF9BVVRPTUFLRSB0byAKK2dhaW4gdGhlIFBBQ0tBR0UgYW5kIFZFUlNJT04gZGVmaW5pdGlvbnMgYW5kIHRoYXQgbWFjcm8gbm93IGVycm9ycyBpZiBNYWtlZmlsZS5hbSAKK2RvZXNuJ3QgZXhpc3QsIHdlIG5lZWQgdG8gYWRkIHRoZXNlIGRlZmluaXRpb25zIG1hbnVhbGx5LiAKKworVGhlc2UgY2hhbmdlcyBhdm9pZCBmYWlsdXJlcyBsaWtlOiAKKy0tLS0gCit8IC4uLiAKK3wgRHNzc2xBcHAuY3h4OjExNzozNjogZXJyb3I6ICdQQUNLQUdFJyB3YXMgbm90IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUgCit8IERzc3NsQXBwLmN4eDoxMTg6MzY6IGVycm9yOiAnVkVSU0lPTicgd2FzIG5vdCBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlIAorfCBtYWtlWzJdOiAqKiogW0Rzc3NsQXBwLmxvXSBFcnJvciAxIC0tLS0KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JQIDIwMTIvNi8xMgorCitJbmRleDogb3BlbmphZGUtMS4zLjIvYWNpbmNsdWRlLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgb3BlbmphZGUtMS4zLjIvYWNpbmNsdWRlLm00CTIwMTItMDYtMTIgMTI6NDg6NTQuODcxMzY1MzQ0ICswMDAwCitAQCAtMCwwICsxLDM5IEBACisrZG5sIENvbmZpZ3VyZS10aW1lIHN3aXRjaCB3aXRoIGRlZmF1bHQKKytkbmwKKytkbmwgRWFjaCBzd2l0Y2ggZGVmaW5lcyBhbiAtLWVuYWJsZS1GT08gYW5kIC0tZGlzYWJsZS1GT08gb3B0aW9uIGluCisrZG5sIHRoZSByZXN1bHRpbmcgY29uZmlndXJlIHNjcmlwdC4KKytkbmwKKytkbmwgVXNhZ2U6CisrZG5sIHNtcl9TV0lUQ0gobmFtZSwgZGVzY3JpcHRpb24sIGRlZmF1bHQsIHBvcy1kZWYsIG5lZy1kZWYpCisrZG5sCisrZG5sIHdoZXJlOgorK2RubAorK2RubCBuYW1lICAgICAgICBuYW1lIG9mIHN3aXRjaDsgZ2VuZXJhdGVzIC0tZW5hYmxlLW5hbWUgJiAtLWRpc2FibGUtbmFtZQorK2RubCAgICAgICAgICAgICBvcHRpb25zCisrZG5sIGRlc2NyaXB0aW9uIGhlbHAgc3RyaW5nIGlzIHNldCB0byB0aGlzIHByZWZpeGVkIGJ5ICJlbmFibGUiIG9yCisrZG5sICAgICAgICAgICAgICJkaXNhYmxlIiwgd2hpY2hldmVyIGlzIHRoZSBub24tZGVmYXVsdCB2YWx1ZQorK2RubCBkZWZhdWx0ICAgICBlaXRoZXIgIm9uIiBvciAib2ZmIjsgc3BlY2lmaWVzIGRlZmF1bHQgaWYgbmVpdGhlcgorK2RubCAgICAgICAgICAgICAtLWVuYWJsZS1uYW1lIG5vciAtLWRpc2FibGUtbmFtZSBpcyBzcGVjaWZpZWQKKytkbmwgcG9zLWRlZiAgICAgYSBzeW1ib2wgdG8gQUNfREVGSU5FIGlmIHN3aXRjaCBpcyBvbiAob3B0aW9uYWwpCisrZG5sIG5lZy1kZWYgICAgIGEgc3ltYm9sIHRvIEFDX0RFRklORSBpZiBzd2l0Y2ggaXMgb2ZmIChvcHRpb25hbCkKKytkbmwKKytBQ19ERUZVTihzbXJfU1dJVENILCBbCisrICAgIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIHRvIGVuYWJsZSAkMikKKysgICAgQUNfQVJHX0VOQUJMRSgKKysgICAgICAgICQxLAorKyAgICAgICAgaWZlbHNlKCQzLCBvbiwKKysgICAgICAgICAgICBbICAtLWRpc2FibGUtWyQxXSAgICBkaXNhYmxlIFskMl1dLAorKyAgICAgICAgICAgIFsgIC0tZW5hYmxlLVskMV0gICAgIGVuYWJsZSBbJDJdXSksCisrICAgICAgICBbIGlmIHRlc3QgIiRlbmFibGV2YWwiID0geWVzOyB0aGVuCisrICAgICAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisrICAgICAgICAgICAgaWZlbHNlKCQ0LCAsICwgQUNfREVGSU5FKCQ0KSkKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorKyAgICAgICAgICAgIGlmZWxzZSgkNSwgLCAsIEFDX0RFRklORSgkNSkpCisrICAgICAgICBmaSBdLAorKyAgICAgICAgaWZlbHNlKCQzLCBvbiwKKysgICAgICAgICAgIFsgQUNfTVNHX1JFU1VMVCh5ZXMpCisrICAgICAgICAgICAgIGlmZWxzZSgkNCwgLCAsIEFDX0RFRklORSgkNCkpIF0sCisrICAgICAgICAgICBbIEFDX01TR19SRVNVTFQobm8pCisrICAgICAgICAgICAgaWZlbHNlKCQ1LCAsICwgQUNfREVGSU5FKCQ1KSldKSldKQorKworSW5kZXg6IG9wZW5qYWRlLTEuMy4yL2NvbmZpZy9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuamFkZS0xLjMuMi5vcmlnL2NvbmZpZy9jb25maWd1cmUuaW4JMjAxMi0wNi0xMiAxMjo0NzoyMC43MzUzNjU0NDUgKzAwMDAKKysrKyBvcGVuamFkZS0xLjMuMi9jb25maWcvY29uZmlndXJlLmluCTIwMTItMDYtMTIgMTI6NDg6MTcuNTA3MzY0MDgwICswMDAwCitAQCAtMTIsOSArMTIsMTIgQEAKKyBkbmwgIENyZWRpdHM6IHRoaXMgYXV0b2NvbmYgc2NyaXB0IHdhcyBsYXJnZWx5ICJpbnNwaXJlZCIgPGc+IGJ5IHRoZQorIGRubCAgYXV0b2NvbmYgc2NyaXB0IGFyb3VuZCBTUCBtYWRlIGJ5IEhlbnJ5IFRob21wc29uLgorIGRubAorLUFDX0lOSVQoZHNzc2wpCisrQUNfSU5JVChbb3BlbmphZGVdLCBbMS4zLjJdKQorIEFDX0NPTkZJR19BVVhfRElSKGNvbmZpZykKKy1BTV9JTklUX0FVVE9NQUtFKCBvcGVuamFkZSwgMS4zLjIpCisrQUNfU1VCU1QoW1BBQ0tBR0VdLCBbb3BlbmphZGVdKQorK0FDX1NVQlNUKFtWRVJTSU9OXSwgWzEuMy4yXSkKKytBQ19ERUZJTkVfVU5RVU9URUQoUEFDS0FHRSwgIiRQQUNLQUdFIikKKytBQ19ERUZJTkVfVU5RVU9URUQoVkVSU0lPTiwgIiRWRVJTSU9OIikKKyBUT1A9YHB3ZGAKKyBBQ19TVUJTVChUT1ApCisgZG5sCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi91c2VyLWRlY2xhcmVkLWRlZmF1bHQtY29uc3RydWN0b3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi91c2VyLWRlY2xhcmVkLWRlZmF1bHQtY29uc3RydWN0b3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDczYWY0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL3VzZXItZGVjbGFyZWQtZGVmYXVsdC1jb25zdHJ1Y3Rvci5wYXRjaApAQCAtMCwwICsxLDkyIEBACitJbiBHQ0MgNC42IHRoZSBjb21waWxlciBubyBsb25nZXIgYWxsb3dzIG9iamVjdHMgb2YgY29uc3QtcXVhbGlmaWVkIHR5cGUgdG8KK2JlIGRlZmF1bHQgaW5pdGlhbGl6ZWQgdW5sZXNzIHRoZSB0eXBlIGhhcyBhIHVzZXItZGVjbGFyZWQgZGVmYXVsdAorY29uc3RydWN0b3IuCisKK1BhdGNoIGZyb20gR2VudG9vIGJ1Z3ppbGxhOiBodHRwOi8vYnVncy5nZW50b28ub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTgwMjEKKworR2VudG9vIEJ1Z3ppbGxhIGRlc2NyaXB0aW9uIGZvbGxvd3M6CisiSWYgYSBjbGFzcyBvciBzdHJ1Y3QgaGFzIG5vIHVzZXItZGVmaW5lZCBkZWZhdWx0IGNvbnN0cnVjdG9yLCBDKysgZG9lc24ndAorYWxsb3cgeW91IHRvIGRlZmF1bHQgY29uc3RydWN0IGEgY29uc3QgaW5zdGFuY2Ugb2YgaXQuCisKK2h0dHBzOi8vYnVncy5nZW50b28ub3JnLzM1ODAyMQoraHR0cDovL2NsYW5nLmxsdm0ub3JnL2NvbXBhdGliaWxpdHkuaHRtbCNkZWZhdWx0X2luaXRfY29uc3QKK2h0dHA6Ly9nY2MuZ251Lm9yZy9QUjQ0NDk5IgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBhL2phZGUvVGVYRk9UQnVpbGRlci5jeHgKKysrKyBiL2phZGUvVGVYRk9UQnVpbGRlci5jeHgKK0BAIC04OCw2ICs4OCw4IEBAIHB1YmxpYzoKKyAgICAgICB2YWx1ZS5jb252ZXJ0U3RyaW5nKG5pY18ucGxhY2VtZW50KTsKKyAgICAgICB9CisgICAgIEV4dGVuc2lvbkZsb3dPYmogKmNvcHkoKSBjb25zdCB7IHJldHVybiBuZXcgUGFnZUZsb2F0Rmxvd09iaigqdGhpcyk7IH0KKysgIHB1YmxpYzoKKysgICAgUGFnZUZsb2F0Rmxvd09iaigpIHt9CisgICBwcml2YXRlOgorICAgICBQYWdlRmxvYXROSUMgbmljXzsKKyAgICAgU3RyaW5nQyBuYW1lXzsKK0BAIC0xMDEsNiArMTAzLDggQEAgcHVibGljOgorICAgICAgIGZvdGIuZW5kUGFnZUZvb3Rub3RlKCk7CisgICAgIH0KKyAgICAgRXh0ZW5zaW9uRmxvd09iaiAqY29weSgpIGNvbnN0IHsgcmV0dXJuIG5ldyBQYWdlRm9vdG5vdGVGbG93T2JqKCp0aGlzKTsgfQorKyAgcHVibGljOgorKyAgICBQYWdlRm9vdG5vdGVGbG93T2JqKCkge30KKyAgIHByaXZhdGU6CisgICB9OworICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLS0tIGEvamFkZS9UcmFuc2Zvcm1GT1RCdWlsZGVyLmN4eAorKysrIGIvamFkZS9UcmFuc2Zvcm1GT1RCdWlsZGVyLmN4eAorQEAgLTQxLDYgKzQxLDcgQEAgcHVibGljOgorICAgfTsKKyAgIGNsYXNzIEVudGl0eVJlZkZsb3dPYmogOiBwdWJsaWMgVHJhbnNmb3JtRXh0ZW5zaW9uRmxvd09iaiB7CisgICBwdWJsaWM6CisrICAgIEVudGl0eVJlZkZsb3dPYmooKSB7fQorICAgICB2b2lkIGF0b21pYyhUcmFuc2Zvcm1GT1RCdWlsZGVyICZmb3RiLCBjb25zdCBOb2RlUHRyICYpIGNvbnN0IHsKKyAgICAgICBmb3RiLmVudGl0eVJlZihuYW1lXyk7CisgICAgIH0KK0BAIC01Niw2ICs1Nyw3IEBAIHB1YmxpYzoKKyAgIH07CisgICBjbGFzcyBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25GbG93T2JqIDogcHVibGljIFRyYW5zZm9ybUV4dGVuc2lvbkZsb3dPYmogeworICAgcHVibGljOgorKyAgICBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25GbG93T2JqKCkge30KKyAgICAgdm9pZCBhdG9taWMoVHJhbnNmb3JtRk9UQnVpbGRlciAmZm90YiwgY29uc3QgTm9kZVB0ciAmKSBjb25zdCB7CisgICAgICAgZm90Yi5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oZGF0YV8pOworICAgICB9CitAQCAtOTgsNiArMTAwLDggQEAgcHVibGljOgorICAgICAgIH0KKyAgICAgfQorICAgICBFeHRlbnNpb25GbG93T2JqICpjb3B5KCkgY29uc3QgeyByZXR1cm4gbmV3IEVtcHR5RWxlbWVudEZsb3dPYmooKnRoaXMpOyB9CisrICBwdWJsaWM6CisrICAgIEVtcHR5RWxlbWVudEZsb3dPYmooKSB7fQorICAgcHJpdmF0ZToKKyAgICAgRWxlbWVudE5JQyBuaWNfOworICAgfTsKK0BAIC0xMzMsNiArMTM3LDggQEAgcHVibGljOgorICAgICAgIH0KKyAgICAgfQorICAgICBFeHRlbnNpb25GbG93T2JqICpjb3B5KCkgY29uc3QgeyByZXR1cm4gbmV3IEVsZW1lbnRGbG93T2JqKCp0aGlzKTsgfQorKyAgcHVibGljOgorKyAgICBFbGVtZW50Rmxvd09iaigpIHt9CisgICBwcml2YXRlOgorICAgICBFbGVtZW50TklDIG5pY187CisgICB9OworQEAgLTE1MCw2ICsxNTYsOCBAQCBwdWJsaWM6CisgICAgICAgdmFsdWUuY29udmVydFN0cmluZyhzeXN0ZW1JZF8pOworICAgICB9CisgICAgIEV4dGVuc2lvbkZsb3dPYmogKmNvcHkoKSBjb25zdCB7IHJldHVybiBuZXcgRW50aXR5Rmxvd09iaigqdGhpcyk7IH0KKysgIHB1YmxpYzoKKysgICAgRW50aXR5Rmxvd09iaigpIHt9CisgICBwcml2YXRlOgorICAgICBTdHJpbmdDIHN5c3RlbUlkXzsKKyAgIH07CitAQCAtMTc0LDYgKzE4Miw4IEBAIHB1YmxpYzoKKyAgICAgICB9CisgICAgIH0KKyAgICAgRXh0ZW5zaW9uRmxvd09iaiAqY29weSgpIGNvbnN0IHsgcmV0dXJuIG5ldyBEb2N1bWVudFR5cGVGbG93T2JqKCp0aGlzKTsgfQorKyAgcHVibGljOgorKyAgICBEb2N1bWVudFR5cGVGbG93T2JqKCkge30KKyAgIHByaXZhdGU6CisgICAgIERvY3VtZW50VHlwZU5JQyBuaWNfOworICAgfTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLW5hdGl2ZV8xLjMuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLW5hdGl2ZV8xLjMuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTdhYTYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtbmF0aXZlXzEuMy4yLmJiCkBAIC0wLDAgKzEsMTA4IEBACitTVU1NQVJZID0gIlRvb2xzIGZvciB3b3JraW5nIHdpdGggRFNTU0wgc3R5bGVzaGVldHMgZm9yIFNHTUwgYW5kIFhNTCBkb2N1bWVudHMiCitERVNDUklQVElPTiA9ICJPcGVuSmFkZSBpcyBhIHN1aXRlIG9mIHRvb2xzIGZvciB2YWxpZGF0aW5nLCBcCitwcm9jZXNzaW5nLCBhbmQgYXBwbHlpbmcgRFNTU0wgKERvY3VtZW50IFN0eWxlIFNlbWFudGljcyBhbmQgXAorU3BlY2lmaWNhdGlvbiBMYW5ndWFnZSkgc3R5bGVzaGVldHMgdG8gU0dNTCBhbmQgWE1MIGRvY3VtZW50cy4iCitIT01FUEFHRSA9ICJodHRwOi8vb3BlbmphZGUuc291cmNlZm9yZ2UubmV0IgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02NDFmZjFlNDUxMWYwYTg3MDQ0YWQ0MmY4N2NiMTA0NSIKKworUFIgPSAicjUiCisKK0RFUEVORFMgPSAib3BlbnNwLW5hdGl2ZSBzZ21sLWNvbW1vbi1uYXRpdmUiCitSREVQRU5EU18ke1BOfSA9ICJzZ21sLWNvbW1vbi1uYXRpdmUiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L29wZW5qYWRlL29wZW5qYWRlLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9tYWtlZmlsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tc2dnZW4ucGwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVhdXRvY29uZi5wYXRjaCBcCisJICAgZmlsZTovL3VzZXItZGVjbGFyZWQtZGVmYXVsdC1jb25zdHJ1Y3Rvci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcmVnZXgucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3ZGY2OTJlMzE4NjEwOWNjMDBkYjY4MjViNzc3MjAxZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxZDJkNzk5NmNjOTRmOWI4N2QwYzUxY2YwZTAyODA3MGFjMTc3YzQxMjNlY2JmZDdhYzFjYjhkMGI3ZDMyMmQxIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgbmF0aXZlCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zcGluY2x1ZGVkaXI9JHtTVEFHSU5HX0lOQ0RJUn0vT3BlblNQIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1zcGxpYmRpcj0ke1NUQUdJTkdfTElCRElSfSIKKworIyBXZSBuZWVkIHRvIHNldCBkYXRhZGlyIGV4cGxpY2l0bHksIGJ1dCBhZGRpbmcgaXQgdG8gRVhUUkFfT0VDT05GCisjIHJlc3VsdHMgaW4gaXQgYmVpbmcgc3BlY2lmaWVkIHR3aWNlIHdoZW4gY29uZmlndXJlIGlzIHJ1bi4KK0NPTkZJR1VSRU9QVFMgOj0gIiR7QGQuZ2V0VmFyKCdDT05GSUdVUkVPUFRTJywgVHJ1ZSkucmVwbGFjZSgnLS1kYXRhZGlyPSR7ZGF0YWRpcn0nLCAnLS1kYXRhZGlyPSR7U1RBR0lOR19EQVRBRElSfS9zZ21sL29wZW5qYWRlLSR7UFZ9Jyl9IgorCisjIENPTkZJR1VSRU9QVFMgaGFzIGhhcmQgY29kZWQgcGF0aHMgc28gd2UgbmVlZCB0byBpZ25vcmUgaXQncyB2YXJkZXBzCisjIHRoZXJlIGFyZSBvdGhlciBiaXRzIGluIHRoZXJlIHRvbyBidXQgdGhleSBhcmUgcGlja2VkIHVwIGJ5IG90aGVyIHZhcmlhYmxlCisjIGRlcGVuZGVuY2llcyBzbyBpdCBhbGwgd29ya3Mgb3V0CitvZV9ydW5jb25mW3ZhcmRlcHNleGNsdWRlXSArPSAiQ09ORklHVVJFT1BUUyIKKworQ0ZMQUdTID0rICItSSR7U30vaW5jbHVkZSIKKworU1NUQVRFUE9TVElOU1RGVU5DUyArPSAib3BlbmphZGVfc3N0YXRlX3Bvc3RpbnN0IgorU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJvcGVuamFkZV9zeXNyb290X3ByZXByb2Nlc3MiCitDTEVBTkZVTkNTICs9ICJvcGVuamFkZV9zc3RhdGVfY2xlYW4iCisKKyMgY29uZmlndXJlLmluIG5lZWRzIHRvIGJlIHJlbG9hY3RlZCB0byB0cmlnZ2VyIHJlYXV0b2NvbmYKK2RvX2V4dHJhdW5wYWNrICgpIHsKKwljcCAke1N9L2NvbmZpZy9jb25maWd1cmUuaW4gJHtTfS8KK30KK2FkZHRhc2sgZXh0cmF1bnBhY2sgYWZ0ZXIgZG9fcGF0Y2ggYmVmb3JlIGRvX2NvbmZpZ3VyZQorCisjIFdlIG5lZWQgdG8gZG8gdGhpcyBlbHNlIHRoZSBzb3VyY2UgaW50ZXJkZXBlbmRlbmNpZXMgYXJlbid0IGdlbmVyYXRlZCBhbmQKKyMgYnVpbGQgZmFpbHVyZXMgY2FuIHJlc3VsdCAoZS5nLiB6ZXJvIHNpemUgc3R5bGUvTWFrZWZpbGUuZGVwIGZpbGUpCitkb19jb21waWxlX3ByZXBlbmQgKCkgeworCW9lX3J1bm1ha2UgZGVwZW5kCit9CisKK2RvX2luc3RhbGwoKSB7CisJIyBSZWZlciB0byBodHRwOi8vd3d3LmxpbnV4ZnJvbXNjcmF0Y2gub3JnL2JsZnMvdmlldy9zdGFibGUvcHN0L29wZW5qYWRlLmh0bWwKKwkjIGZvciBkZXRhaWxzLgorCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQkKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9qYWRlLy5saWJzL29wZW5qYWRlICR7RH0ke2JpbmRpcn0vb3BlbmphZGUKKwlsbiAtc2Ygb3BlbmphZGUgJHtEfSR7YmluZGlyfS9qYWRlCisKKwlvZV9saWJpbnN0YWxsIC1hIC1zbyAtQyBzdHlsZSBsaWJvc3R5bGUgJHtEfSR7bGliZGlyfQorCW9lX2xpYmluc3RhbGwgLWEgLXNvIC1DIHNwZ3JvdmUgbGlib3NwZ3JvdmUgJHtEfSR7bGliZGlyfQorCW9lX2xpYmluc3RhbGwgLWEgLXNvIC1DIGdyb3ZlIGxpYm9ncm92ZSAke0R9JHtsaWJkaXJ9CisKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L3NnbWwvb3BlbmphZGUtJHtQVn0KKwlpbnN0YWxsIC1tIDY0NCBkc3NzbC9jYXRhbG9nICR7RH0ke2RhdGFkaXJ9L3NnbWwvb3BlbmphZGUtJHtQVn0KKwlpbnN0YWxsIC1tIDY0NCBkc3NzbC8qLmR0ZCAke0R9JHtkYXRhZGlyfS9zZ21sL29wZW5qYWRlLSR7UFZ9CisJaW5zdGFsbCAtbSA2NDQgZHNzc2wvKi5kc2wgJHtEfSR7ZGF0YWRpcn0vc2dtbC9vcGVuamFkZS0ke1BWfQorCWluc3RhbGwgLW0gNjQ0IGRzc3NsLyouc2dtICR7RH0ke2RhdGFkaXJ9L3NnbWwvb3BlbmphZGUtJHtQVn0KKworCWluc3RhbGwgLWQgJHtkYXRhZGlyfS9zZ21sL29wZW5qYWRlLSR7UFZ9CisJaW5zdGFsbCAtbSA2NDQgZHNzc2wvY2F0YWxvZyAke2RhdGFkaXJ9L3NnbWwvb3BlbmphZGUtJHtQVn0vY2F0YWxvZworCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9zZ21sCisJZWNobyAiQ0FUQUxPRyAke2RhdGFkaXJ9L3NnbWwvb3BlbmphZGUtJHtQVn0vY2F0YWxvZyIgPiBcCisJCSR7RH0ke3N5c2NvbmZkaXJ9L3NnbWwvb3BlbmphZGUtJHtQVn0uY2F0Cit9CisKK29wZW5qYWRlX3NzdGF0ZV9wb3N0aW5zdCgpIHsKKwlpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgLW8gIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCisJdGhlbgorCQkjIEVuc3VyZSB0aGF0IHRoZSBjYXRhbG9nIGZpbGUgc2dtbC1kb2Nib29rLmNhdCBpcyBwcm9wZXJseQorCQkjIHVwZGF0ZWQgd2hlbiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQgZnJvbSBzc3RhdGUgY2FjaGUuCisJCSR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vaW5zdGFsbC1jYXRhbG9nLW9wZW5qYWRlIFwKKwkJCS0tYWRkICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suYmFrIFwKKwkJCSR7c3lzY29uZmRpcn0vc2dtbC9vcGVuamFkZS0ke1BWfS5jYXQKKwkJJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9pbnN0YWxsLWNhdGFsb2ctb3BlbmphZGUgXAorCQkJLS1hZGQgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQgXAorCQkJJHtzeXNjb25mZGlyfS9zZ21sL29wZW5qYWRlLSR7UFZ9LmNhdAorCWZpCit9CisKK29wZW5qYWRlX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisgICAgaW5zdGFsbCAtZCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworICAgIGluc3RhbGwgLW0gNzU1ICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9pbnN0YWxsLWNhdGFsb2cgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9pbnN0YWxsLWNhdGFsb2ctb3BlbmphZGUKK30KKworb3BlbmphZGVfc3N0YXRlX2NsZWFuICgpIHsKKwkjIEVuc3VyZSB0aGF0IHRoZSBjYXRhbG9nIGZpbGUgc2dtbC1kb2Nib29rLmNhdCBpcyBwcm9wZXJseQorCSMgdXBkYXRlZCB3aGVuIHRoZSBwYWNrYWdlIGlzIHJlbW92ZWQgZnJvbSBzc3RhdGUgY2FjaGUuCisJZmlsZXM9IiR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suYmFrICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IgorCWZvciBmIGluICRmaWxlczsgZG8KKwkJWyAhIC1mICRmIF0gfHwgc2VkIC1pICcvXC9zZ21sXC9vcGVuamFkZS0ke1BWfS5jYXQvZCcgJGYKKwlkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuc3Avb3BlbnNwLTEuNS4yL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5zcC9vcGVuc3AtMS41LjIvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMjE4YTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuc3Avb3BlbnNwLTEuNS4yL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/ZnVuYz1kZXRhaWwmYWlkPTM1OTkyOTEmZ3JvdXBfaWQ9MjExNSZhdGlkPTEwMjExNV0KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmQgT3BlblNQLTEuNS4yL2NvbmZpZ3VyZS5pbiBPcGVuU1AtMS41LjIvY29uZmlndXJlLmluCistLS0gT3BlblNQLTEuNS4yL2NvbmZpZ3VyZS5pbgkyMDA1LTEyLTIzIDE2OjE1OjIxLjAwMDAwMDAwMCArMDIwMAorKysrIE9wZW5TUC0xLjUuMi9jb25maWd1cmUuaW4JMjAxMy0wMS0wMyAwOTowNDo1MS45MjI2NDU2ODkgKzAyMDAKK0BAIC0xNiw3ICsxNiw3IEBACisgQU1fSU5JVF9BVVRPTUFLRShPcGVuU1AsIDEuNS4yLCBuby1kZWZpbmUpCisgQU1fTUFJTlRBSU5FUl9NT0RFCisgQUNfUFJFUkVRKDIuNTMpCistQU1fQ09ORklHX0hFQURFUihjb25maWcuaCkKKytBQ19DT05GSUdfSEVBREVSUyhjb25maWcuaCkKKyBBTV9TQU5JVFlfQ0hFQ0sKKworIGRubCBBdXRvaGVhZGVyIGRlZmluaXRpb25zCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuc3Avb3BlbnNwXzEuNS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbnNwL29wZW5zcF8xLjUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWYxMTVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbnNwL29wZW5zcF8xLjUuMi5iYgpAQCAtMCwwICsxLDU1IEBACitTVU1NQVJZID0gIkFuIFNHTUwgcGFyc2VyIgorREVTQ1JJUFRJT04gPSAiQW4gU0dNTCBwYXJzZXIgdXNlZCBieSB0aGUgT3BlbkphZGUgc3VpdGUgb2YgdXRpbGl0aWVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9vcGVuamFkZS5zb3VyY2Vmb3JnZS5uZXQiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTY0MWZmMWU0NTExZjBhODcwNDRhZDQyZjg3Y2IxMDQ1IgorCitQUiA9ICJyMSIKKworIyBBdCAtT3MgaXQgZW5jb3VudGVycyBjYWxscyB0byBzb21lIGlubGluZSBmdW5jdGlvbnMgd2hpY2ggYXJlIHRoZW4KKyMgbm90IGZvdW5kIGluIGFueSBvdGhlciBvYmplY3RzIHdpdGggZ2NjIDQuNQorRlVMTF9PUFRJTUlaQVRJT04gKz0gIi1PMiIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vb3BlbmphZGUvT3BlblNQLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjcwYjIyM2M1ZDEyY2VlNDBjOTEzN2JlODZiNmMzOWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTdmNDg5ODQ5OGEzNjg5MThiMGQ0OWM4MjZhYTQzNGJiNWI3MDNkMmMzYjE2OWJlYjM0ODAxNmFiMjU2MTdjZSIKKworUyA9ICIke1dPUktESVJ9L09wZW5TUC0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWRvYy1idWlsZCIKKworRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICJcCisJLS1kaXNhYmxlLWRvYy1idWlsZCBcCisJLS1lbmFibGUtZGVmYXVsdC1jYXRhbG9nPSR7c3lzY29uZmRpcn0vc2dtbC9jYXRhbG9nIFwKKwktLWVuYWJsZS1kZWZhdWx0LXNlYXJjaC1wYXRoPSR7ZGF0YWRpcn0vc2dtbCBcCisJIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIFNldCB1cCBzeW1saW5rcyB0byBvZnRlbi11c2VkIGFsdGVybmF0ZSBuYW1lcy4gU2VlCisJIyBodHRwOi8vd3d3LmxpbnV4ZnJvbXNjcmF0Y2gub3JnL2JsZnMvdmlldy9zdGFibGUvcHN0L29wZW5zcC5odG1sCisJY2QgJHtEfSR7bGliZGlyfQorCWxuIC1zZiBsaWJvc3Auc28gbGlic3Auc28KKworCWNkICR7RH0ke2JpbmRpcn0KKwlmb3IgdXRpbCBpbiBuc2dtbHMgc2dtbG5vcm0gc3BhbSBzcGNhdCBzcGVudCBzeDsgZG8KKwkJbG4gLXNmIG8kdXRpbCAkdXRpbAkKKwlkb25lCisJbG4gLXNmIG9zeCBzZ21sMnhtbAorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJZm9yIHV0aWwgaW4gbnNnbWxzIHNnbWxub3JtIHNwYW0gc3BjYXQgc3BlbnQgc3g7IGRvCisJCWNyZWF0ZV9jbWRsaW5lX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vJHV0aWwgXAorCQkgICAgLUQgJHtzeXNjb25mZGlyfS9zZ21sCisJZG9uZQorfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9PcGVuU1AvIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2ctdXRpbHMvb3BrZy11dGlscy90YXJfaWdub3JlX2Vycm9yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy11dGlscy9vcGtnLXV0aWxzL3Rhcl9pZ25vcmVfZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRkZGIwOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2ctdXRpbHMvb3BrZy11dGlscy90YXJfaWdub3JlX2Vycm9yLnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0lmIGEgdGhlIG51bWJlciBvZiBoYXJkIGxpbmtzIGRlY3JlYXNlcyBvciBpbmNyZWFzZXMgd2hpbGUgY3JlYXRpbmcKK3RoZSB0YXIgZmlsZXMgdXNlZCBmb3IgYW4gaXBrIHBhY2thZ2UsIHRhciBmYWlscyB3aXRoIGVycm9yIGNvZGUgMToKKworfCBERUJVRzogRXhlY3V0aW5nIHB5dGhvbiBmdW5jdGlvbiBkb19wYWNrYWdlX2lwaworfCB0YXI6IC4vdXNyL3NyYy9kZWJ1Zy9ncGVyZi8zLjAuNC1yMC9ncGVyZi0zLjAuNC9zcmMvbWFpbi5jYzogZmlsZSBjaGFuZ2VkIGFzIHdlIHJlYWQgaXQKK05PVEU6IHJlY2lwZSBncGVyZi0zLjAuNC1yMDogdGFzayBkb19wYWNrYWdlX3dyaXRlX2lwazogRmFpbGVkCitFUlJPUjogVGFzayA2NTM5IChyZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmXzMuMC40LmJiLCBkb19wYWNrYWdlX3dyaXRlX2lwaykgZmFpbGVkIHdpdGggZXhpdCBjb2RlICcxJworCisKK1dlIGRldGVjdCBpZiB0aGUgZXJyb3IgY29kZSBwcm9kdWNlZCBieSB0YXIgaXMgMSBhbmQgaW4gdGhpcyBjYXNlIGlnbm9yZSBpdC4KKworVGhpcyBhIHNpbWlsYXIgYmVoYXZpb3IgdG8gdGhlIG9uZSBvbiBkcGtnOgoraHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvcG9reS9jb21taXQvP2lkPTQwNzMxOTQyNTE1ZWM4ZDgwYzcyN2FkNTYxMTc0OTg2ZDRmMDU4MTgKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCisKK0luZGV4OiBnaXQvb3BrZy1idWlsZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL29wa2ctYnVpbGQKKysrKyBnaXQvb3BrZy1idWlsZAorQEAgLTI1MCw4ICsyNTAsMjEgQEAgdG1wX2Rpcj0kZGVzdF9kaXIvSVBLR19CVUlMRC4kJAorIG1rZGlyICR0bXBfZGlyCisgCisgZWNobyAkQ09OVFJPTCA+ICR0bXBfZGlyL3RhclgKKy0oIGNkICRwa2dfZGlyICYmIHRhciAkb2dhcmdzIC1YICR0bXBfZGlyL3RhclggLWN6ICR0YXJmb3JtYXQgLWYgJHRtcF9kaXIvZGF0YS50YXIuZ3ogLiApCistKCBjZCAkcGtnX2Rpci8kQ09OVFJPTCAmJiB0YXIgJG9nYXJncyAtY3ogJHRhcmZvcm1hdCAtZiAkdG1wX2Rpci9jb250cm9sLnRhci5neiAuICkKKysKKysKKysjIElnbm9yZSBlcnJvciBjb2RlIDEsIGNhdXNlZCBieSBtb2RpZnlpbmcgdGhlIG51bWJlciBvZiBoYXJkIGxpbmtzIHdoaWxlIGNyZWF0aW5nIHRoZSB0YXIgZmlsZQorK3JjPTAKKysoIGNkICRwa2dfZGlyICYmIHRhciAkb2dhcmdzIC1YICR0bXBfZGlyL3RhclggLWN6ICR0YXJmb3JtYXQgLWYgJHRtcF9kaXIvZGF0YS50YXIuZ3ogLiApIHx8IHJjPSQ/CisraWYgWyAkcmMgLW5lIDEgXSAmJiBbICRyYyAtbmUgMCBdOyB0aGVuCisrICAgICAgICBleGl0ICRyYyAKKytmaQorKworK3JjPTAKKysoIGNkICRwa2dfZGlyLyRDT05UUk9MICYmIHRhciAkb2dhcmdzIC1jeiAkdGFyZm9ybWF0IC1mICR0bXBfZGlyL2NvbnRyb2wudGFyLmd6IC4gKSB8fCByYz0kPworK2lmIFsgJHJjIC1uZSAxIF0gJiYgWyAkcmMgLW5lIDAgXTsgdGhlbgorKyAgICAgICAgZXhpdCAkcmMKKytmaQorKworIHJtICR0bXBfZGlyL3RhclgKKyAKKyBlY2hvICIyLjAiID4gJHRtcF9kaXIvZGViaWFuLWJpbmFyeQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy11dGlscy9vcGtnLXV0aWxzX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2ctdXRpbHMvb3BrZy11dGlsc19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY1MThkMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2ctdXRpbHMvb3BrZy11dGlsc19naXQuYmIKQEAgLTAsMCArMSw0MSBAQAorU1VNTUFSWSA9ICJBZGRpdGlvbmFsIHV0aWxpdGllcyBmb3IgdGhlIG9wa2cgcGFja2FnZSBtYW5hZ2VyIgorU1VNTUFSWV91cGRhdGUtYWx0ZXJuYXRpdmVzLW9wa2cgPSAiVXRpbGl0eSBmb3IgbWFuYWdpbmcgdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0iCitTRUNUSU9OID0gImJhc2UiCitIT01FUEFHRSA9ICJodHRwOi8vY29kZS5nb29nbGUuY29tL3Avb3BrZy8iCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL29wa2cucHk7YmVnaW5saW5lPTE7ZW5kbGluZT0xODttZDU9MTU5MTc0OTFhZDZiZjdhY2M2NjZjYTVmN2NjMWUwODMiCitQUk9WSURFUyArPSAidmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzIgorCitTUkNSRVYgPSAiNTMyNzRmMDg3NTY1ZmQ0NWQ4NDUyYzUzNjc5OTdiYTZhNjgyYTM3YSIKK1BWID0gIjAuMS44K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL29wa2ctdXRpbHMiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZmlsZTovL3Rhcl9pZ25vcmVfZXJyb3IucGF0Y2giCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1RBUkdFVF9DQ19BUkNIICs9ICIke0xERkxBR1N9IgorCitQWVRIT05SREVQUyA9ICJweXRob24gcHl0aG9uLXNoZWxsIHB5dGhvbi1pbyBweXRob24tbWF0aCBweXRob24tY3J5cHQgcHl0aG9uLWxvZ2dpbmcgcHl0aG9uLWZjbnRsIHB5dGhvbi1zdWJwcm9jZXNzIHB5dGhvbi1waWNrbGUgcHl0aG9uLWNvbXByZXNzaW9uIHB5dGhvbi10ZXh0dXRpbHMgcHl0aG9uLXN0cmluZ29sZCIKK1BZVEhPTlJERVBTX2NsYXNzLW5hdGl2ZSA9ICIiCisKK1BBQ0tBR0VDT05GSUcgPSAicHl0aG9uIgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIiwsLCR7UFlUSE9OUkRFUFN9IgorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgUFJFRklYPSR7cHJlZml4fSBERVNURElSPSR7RH0gaW5zdGFsbAorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7CisJc2VkIC1pICR7RH0ke2JpbmRpcn0vdXBkYXRlLWFsdGVybmF0aXZlcyAtZSAncywvdXNyL2Jpbiwke2JpbmRpcn0sZzsgcywvdXNyL2xpYiwke2xpYmRpcn0sZycKK30KKworUEFDS0FHRVMgPSsgInVwZGF0ZS1hbHRlcm5hdGl2ZXMtb3BrZyIKK0ZJTEVTX3VwZGF0ZS1hbHRlcm5hdGl2ZXMtb3BrZyA9ICIke2JpbmRpcn0vdXBkYXRlLWFsdGVybmF0aXZlcyIKK1JQUk9WSURFU191cGRhdGUtYWx0ZXJuYXRpdmVzLW9wa2cgPSAidXBkYXRlLWFsdGVybmF0aXZlcyB1cGRhdGUtYWx0ZXJuYXRpdmVzLWN3b3J0aCIKK1JSRVBMQUNFU191cGRhdGUtYWx0ZXJuYXRpdmVzLW9wa2cgPSAidXBkYXRlLWFsdGVybmF0aXZlcy1jd29ydGgiCitSQ09ORkxJQ1RTX3VwZGF0ZS1hbHRlcm5hdGl2ZXMtb3BrZyA9ICJ1cGRhdGUtYWx0ZXJuYXRpdmVzLWN3b3J0aCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnLWFyY2gtY29uZmlnXzEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy1hcmNoLWNvbmZpZ18xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNlM2RlNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy1hcmNoLWNvbmZpZ18xLjAuYmIKQEAgLTAsMCArMSwzNSBAQAorU1VNTUFSWSA9ICJBcmNoaXRlY3R1cmUtZGVwZW5kZW50IGNvbmZpZ3VyYXRpb24gZm9yIG9wa2ciCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKK1BSID0gInIxIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2NvbXBpbGUoKSB7CisJbWtkaXIgLXAgJHtTfS8ke3N5c2NvbmZkaXJ9L29wa2cvCisKKwlhcmNoY29uZj0ke1N9LyR7c3lzY29uZmRpcn0vb3BrZy9hcmNoLmNvbmYKKworCXJtIC1mICRhcmNoY29uZgorCWlwa2dhcmNocz0iJHtBTExfTVVMVElMSUJfUEFDS0FHRV9BUkNIU30iCisJcHJpb3JpdHk9MQorCWZvciBhcmNoIGluICRpcGtnYXJjaHM7IGRvIAorCQllY2hvICJhcmNoICRhcmNoICRwcmlvcml0eSIgPj4gJGFyY2hjb25mCisJCXByaW9yaXR5PSQoZXhwciAkcHJpb3JpdHkgKyA1KQorCWRvbmUKK30KKworCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L29wa2cKKwlpbnN0YWxsIC1tIDA2NDQgICR7U30vJHtzeXNjb25mZGlyfS9vcGtnLyogJHtEfSR7c3lzY29uZmRpcn0vb3BrZy8KK30KKworRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9vcGtnLyAiCisKK0NPTkZGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS9vcGtnL2FyY2guY29uZiIKKworUlJFUExBQ0VTXyR7UE59ID0gIm9wa2ctY29uZmlnLWJhc2UiCitSQ09ORkxJQ1RTXyR7UE59ID0gIm9wa2ctY29uZmlnLWJhc2UiCitSUFJPVklERVNfJHtQTn0gPSAib3BrZy1jb25maWctYmFzZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy1rZXlyaW5nc18xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cta2V5cmluZ3NfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZDZhYmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cta2V5cmluZ3NfMS4wLmJiCkBAIC0wLDAgKzEsNDggQEAKK1NVTU1BUlkgPSAiS2V5cmluZ3MgZm9yIHZlcmlmeWluZyBvcGtnIHBhY2thZ2VzIGFuZCBmZWVkcyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKKyMgRGlzdHJvLXNwZWNpZmljIGtleXMgY2FuIGJlIGFkZGVkIHRvIHRoaXMgcGFja2FnZSBpbiB0d28gd2F5czoKKyMKKyMgICAxKSBJbiBhIC5iYmFwcGVuZCwgYWRkIC5ncGcgYW5kL29yIC5hc2MgZmlsZXMgdG8gU1JDX1VSSSBhbmQgaW5zdGFsbCB0aGVtIHRvCisjICAgICAgJHtEfSR7ZGF0YWRpcn0vb3BrZy9rZXlyaW5ncy8gaW4gYSBkb19pbnN0YWxsX2FwcGVuZCBmdW5jdGlvbi4gVGhlc2UKKyMgICAgICBmaWxlcyBzaG91bGQgbm90IGJlIG5hbWVkICdrZXktJG5hbWUuZ3BnJyB0byBlbnN1cmUgdGhleSBkb24ndCBjb25mbGljdAorIyAgICAgIHdpdGgga2V5cyBleHBvcnRlZCBhcyBwZXIgKDIpLgorIworIyAgIDIpIEluIGEgLmJiYXBwZW5kLCBkaXN0cm8gY29uZmlnIG9yIGxvY2FsLmNvbmYsIG92ZXJyaWRlIHRoZSB2YXJpYWJsZQorIyAgICAgIE9QS0dfS0VZUklOR19LRVlTIHRvIGNvbnRhaW4gYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBrZXkgbmFtZXMuIEZvcgorIyAgICAgIGVhY2ggbmFtZSwgJ2dwZyAtLWV4cG9ydCAkbmFtZScgd2lsbCBiZSByYW4gdG8gZXhwb3J0IHRoZSBwdWJsaWMga2V5IHRvIGEKKyMgICAgICBmaWxlIG5hbWVkICdrZXktJG5hbWUuZ3BnJy4gVGhlIHB1YmxpYyBrZXkgbXVzdCB0aGVyZWZvcmUgYmUgaW4gdGhlIGdwZworIyAgICAgIGtleXJpbmdzIG9uIHRoZSBidWlsZCBtYWNoaW5lLgorCitPUEtHX0tFWVJJTkdfS0VZUyA/PSAiIgorCitkb19jb21waWxlKCkgeworICAgIGZvciBuYW1lIGluICR7T1BLR19LRVlSSU5HX0tFWVN9OyBkbworICAgICAgICBncGcgLS1leHBvcnQgJHtuYW1lfSA+ICR7Qn0va2V5LSR7bmFtZX0uZ3BnCisgICAgZG9uZQorfQorCitkb19pbnN0YWxsICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L29wa2cva2V5cmluZ3MvCisgICAgZm9yIG5hbWUgaW4gJHtPUEtHX0tFWVJJTkdfS0VZU307IGRvCisgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke0J9L2tleS0ke25hbWV9LmdwZyAke0R9JHtkYXRhZGlyfS9vcGtnL2tleXJpbmdzLworICAgIGRvbmUKK30KKworRklMRVNfJHtQTn0gPSAiJHtkYXRhZGlyfS9vcGtnL2tleXJpbmdzIgorCisjIFdlIG5lZWQgJ29wa2cta2V5JyB0byBydW4gdGhlIHBvc3RpbnN0IHNjcmlwdAorUkRFUEVORFNfJHtQTn0gPSAib3BrZyIKKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKyMhIC9iaW4vc2gKK3NldCAtZQorCitpZiBbIHgiJEQiID0gIngiIF07IHRoZW4KKyAgICAjIE9uIHRhcmdldAorICAgIG9wa2cta2V5IHBvcHVsYXRlCitlbHNlCisgICAgZXhpdCAxCitmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnLzAwMDEtb3BrZ19hcmNoaXZlLWFkZC1zdXBwb3J0LWZvci1lbXB0eS1jb21wcmVzc2VkLWZpbGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnLzAwMDEtb3BrZ19hcmNoaXZlLWFkZC1zdXBwb3J0LWZvci1lbXB0eS1jb21wcmVzc2VkLWZpbGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYmQxOTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cvMDAwMS1vcGtnX2FyY2hpdmUtYWRkLXN1cHBvcnQtZm9yLWVtcHR5LWNvbXByZXNzZWQtZmlsZXMucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSBiZDMyYmI4NjQ2NDU5NTA4YmIwYjBjZTU0YTE0YmQ2ZmUwZTE5Yjc1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxlamFuZHJvIGRlbCBDYXN0aWxsbyA8YWxlamFuZHJvLmRlbGNhc3RpbGxvQG5pLmNvbT4KK0RhdGU6IFRodSwgMjcgQXVnIDIwMTUgMTU6NTI6MTYgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gb3BrZ19hcmNoaXZlOiBhZGQgc3VwcG9ydCBmb3IgZW1wdHkgY29tcHJlc3NlZCBmaWxlcworCitSZWdyZXNzaW9uIGZyb20gMC4yLng6IG9wa2cgdXNlZCB0byBzdXBwb3J0IGVtcHR5IFBhY2thZ2UuZ3ogZmlsZXMuCisKK1NpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBkZWwgQ2FzdGlsbG8gPGFsZWphbmRyby5kZWxjYXN0aWxsb0BuaS5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQKKy0tLQorIGxpYm9wa2cvb3BrZ19hcmNoaXZlLmMgfCAxNSArKysrKysrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYm9wa2cvb3BrZ19hcmNoaXZlLmMgYi9saWJvcGtnL29wa2dfYXJjaGl2ZS5jCitpbmRleCBiZTkwM2U0Li43ZTkxZTQ4IDEwMDY0NAorLS0tIGEvbGlib3BrZy9vcGtnX2FyY2hpdmUuYworKysrIGIvbGlib3BrZy9vcGtnX2FyY2hpdmUuYworQEAgLTEyMSw2ICsxMjEsOSBAQCBzdGF0aWMgaW50IGNvcHlfdG9fc3RyZWFtKHN0cnVjdCBhcmNoaXZlICphLCBGSUxFICogc3RyZWFtKQorICAgICBpbnQgZW9mOworICAgICBzaXplX3QgbGVuID0gRVhUUkFDVF9CVUZGRVJfTEVOOworIAorKyAgICBpZiAoYXJjaGl2ZV9mb3JtYXQoYSkgPT0gQVJDSElWRV9GT1JNQVRfRU1QVFkpCisrICAgICAgICByZXR1cm4gMDsKKysKKyAgICAgYnVmZmVyID0geG1hbGxvYyhsZW4pOworIAorICAgICB3aGlsZSAoMSkgeworQEAgLTY1NCw2ICs2NTcsMTMgQEAgc3RhdGljIHN0cnVjdCBhcmNoaXZlICpvcGVuX2NvbXByZXNzZWRfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSkKKyAgICAgICAgIGdvdG8gZXJyX2NsZWFudXA7CisgICAgIH0KKyAKKysgICAgciA9IGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9lbXB0eShhcik7CisrICAgIGlmIChyICE9IEFSQ0hJVkVfT0spIHsKKysgICAgICAgIG9wa2dfbXNnKEVSUk9SLCAiRW1wdHkgZm9ybWF0IG5vdCBzdXBwb3J0ZWQ6ICVzXG4iLAorKyAgICAgICAgICAgICAgICAgYXJjaGl2ZV9lcnJvcl9zdHJpbmcoYXIpKTsKKysgICAgICAgIGdvdG8gZXJyX2NsZWFudXA7CisrICAgIH0KKysKKyAgICAgLyogT3BlbiBpbnB1dCBmaWxlIGFuZCBwcmVwYXJlIGZvciByZWFkaW5nLiAqLworICAgICByID0gYXJjaGl2ZV9yZWFkX29wZW5fZmlsZW5hbWUoYXIsIGZpbGVuYW1lLCBFWFRSQUNUX0JVRkZFUl9MRU4pOworICAgICBpZiAociAhPSBBUkNISVZFX09LKSB7CitAQCAtNzIzLDYgKzczMyw3IEBAIHN0cnVjdCBvcGtnX2FyICphcl9vcGVuX2NvbXByZXNzZWRfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSkKKyB7CisgICAgIHN0cnVjdCBvcGtnX2FyICphcjsKKyAgICAgc3RydWN0IGFyY2hpdmVfZW50cnkgKmVudHJ5OworKyAgICBpbnQgZW9mOworIAorICAgICBhciA9IChzdHJ1Y3Qgb3BrZ19hciAqKXhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBvcGtnX2FyKSk7CisgCitAQCAtNzM3LDggKzc0OCw4IEBAIHN0cnVjdCBvcGtnX2FyICphcl9vcGVuX2NvbXByZXNzZWRfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSkKKyAgICAgICogaGVhZGVyLiBXZSBza2lwIG92ZXIgdGhpcyBoZWFkZXIgaGVyZSBzbyB0aGF0IHRoZSBjYWxsZXIgZG9lc24ndCBuZWVkCisgICAgICAqIHRvIGtub3cgYWJvdXQgaXQuCisgICAgICAqLworLSAgICBlbnRyeSA9IHJlYWRfaGVhZGVyKGFyLT5hciwgTlVMTCk7CistICAgIGlmICghZW50cnkpCisrICAgIGVudHJ5ID0gcmVhZF9oZWFkZXIoYXItPmFyLCAmZW9mKTsKKysgICAgaWYgKCFlbnRyeSAmJiAhZW9mKQorICAgICAgICAgZ290byBlcnJfY2xlYW51cDsKKyAKKyAgICAgcmV0dXJuIGFyOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cvb3BrZy1jb25maWd1cmUuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy9vcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNzQwMjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cvb3BrZy1jb25maWd1cmUuc2VydmljZQpAQCAtMCwwICsxLDE3IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPU9wa2cgZmlyc3QgYm9vdCBjb25maWd1cmUKK0RlZmF1bHREZXBlbmRlbmNpZXM9bm8KK0FmdGVyPXN5c3RlbWQtcmVtb3VudC1mcy5zZXJ2aWNlIHN5c3RlbWQtdG1wZmlsZXMtc2V0dXAuc2VydmljZSB0bXAubW91bnQKK0JlZm9yZT1zeXNpbml0LnRhcmdldAorCitbU2VydmljZV0KK1R5cGU9b25lc2hvdAorRW52aXJvbm1lbnRGaWxlPS1AU1lTQ09ORkRJUkAvZGVmYXVsdC9wb3N0aW5zdAorRXhlY1N0YXJ0PS1AQkFTRV9CSU5ESVJAL3NoIC1jICIgaWYgWyAkUE9TVElOU1RfTE9HR0lORyA9ICcxJyBdOyB0aGVuIEBCSU5ESVJAL29wa2cgY29uZmlndXJlID4gJExPR0ZJTEUgMj4mMTsgZWxzZSBAQklORElSQC9vcGtnIGNvbmZpZ3VyZTsgZmkiCitFeGVjU3RhcnRQb3N0PUBCQVNFX0JJTkRJUkAvc3lzdGVtY3RsIGRpc2FibGUgb3BrZy1jb25maWd1cmUuc2VydmljZQorU3RhbmRhcmRPdXRwdXQ9c3lzbG9nCitSZW1haW5BZnRlckV4aXQ9Tm8KKworW0luc3RhbGxdCitXYW50ZWRCeT1iYXNpYy50YXJnZXQKK1dhbnRlZEJ5PXN5c2luaXQudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cvb3BrZy5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnL29wa2cuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmU5ZTkyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnL29wa2cuY29uZgpAQCAtMCwwICsxLDI4IEBACisjIE11c3QgaGF2ZSBvbmUgb3IgbW9yZSBzb3VyY2UgZW50cmllcyBvZiB0aGUgZm9ybToKKyMKKyMgICBzcmMgPHNyYy1uYW1lPiA8c291cmNlLXVybD4KKyMKKyMgYW5kIG9uZSBvciBtb3JlIGRlc3RpbmF0aW9uIGVudHJpZXMgb2YgdGhlIGZvcm06CisjCisjICAgZGVzdCA8ZGVzdC1uYW1lPiA8dGFyZ2V0LXBhdGg+CisjCisjIHdoZXJlIDxzcmMtbmFtZT4gYW5kIDxkZXN0LW5hbWVzPiBhcmUgaWRlbnRpZmllcnMgdGhhdAorIyBzaG91bGQgbWF0Y2ggW2EtekEtWjAtOS5fLV0rLCA8c291cmNlLXVybD4gc2hvdWxkIGJlIGEKKyMgVVJMIHRoYXQgcG9pbnRzIHRvIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYSBGYW1pbGlhcgorIyBQYWNrYWdlcyBmaWxlLCBhbmQgPHRhcmdldC1wYXRoPiBzaG91bGQgYmUgYSBkaXJlY3RvcnkKKyMgdGhhdCBleGlzdHMgb24gdGhlIHRhcmdldCBzeXN0ZW0uCisKKyMgUHJveHkgU3VwcG9ydAorI29wdGlvbiBodHRwX3Byb3h5IGh0dHA6Ly9wcm94eS50bGQ6MzEyOAorI29wdGlvbiBmdHBfcHJveHkgaHR0cDovL3Byb3h5LnRsZDozMTI4Cisjb3B0aW9uIHByb3h5X3VzZXJuYW1lIDx1c2VybmFtZT4KKyNvcHRpb24gcHJveHlfcGFzc3dvcmQgPHBhc3N3b3JkPgorCisjIEVuYWJsZSBHUEdNRSBzaWduYXR1cmUKKyMgb3B0aW9uIGNoZWNrX3NpZ25hdHVyZSAxCisKKyMgT2ZmbGluZSBtb2RlIChmb3IgdXNlIGluIGNvbnN0cnVjdGluZyBmbGFzaCBpbWFnZXMgb2ZmbGluZSkKKyNvcHRpb24gb2ZmbGluZV9yb290IHRhcmdldAorCisjIERlZmF1bHQgZGVzdGluYXRpb24gZm9yIGluc3RhbGxlZCBwYWNrYWdlcworZGVzdCByb290IC8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZ18wLjMuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZ18wLjMuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGRiYjJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnXzAuMy4wLmJiCkBAIC0wLDAgKzEsNzIgQEAKK1NVTU1BUlkgPSAiT3BlbiBQYWNrYWdlIE1hbmFnZXIiCitTVU1NQVJZX2xpYm9wa2cgPSAiT3BlbiBQYWNrYWdlIE1hbmFnZXIgbGlicmFyeSIKK1NFQ1RJT04gPSAiYmFzZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9vcGtnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL29wa2cvaXNzdWVzL2xpc3QiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9vcGtnLmM7YmVnaW5saW5lPTI7ZW5kbGluZT0yMTttZDU9OTA0MzVhNTE5YzZlYTY5ZWYyMmU0YTg4YmNjNTJmYTAiCisKK0RFUEVORFMgPSAibGliYXJjaGl2ZSIKKworUEUgPSAiMSIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vb3BrZy1jb25maWd1cmUuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly9vcGtnLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1vcGtnX2FyY2hpdmUtYWRkLXN1cHBvcnQtZm9yLWVtcHR5LWNvbXByZXNzZWQtZmlsZXMucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzQxMmNkYzcxZDc4Yjk4ZmFjYzg0YjE5MzMxZWM2NGUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2Y3MzVkMWNkYjhlZjM3MThmYjBmOWZiYTQ0Y2EwZDlhNWM5MGQzYTdmMDE0ZjM3YTZkMmY5NDc0ZjU0OTg4ZiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHN5c3RlbWQKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIm9wa2ctY29uZmlndXJlLnNlcnZpY2UiCisKK3RhcmdldF9sb2NhbHN0YXRlZGlyIDo9ICIke2xvY2Fsc3RhdGVkaXJ9IgorT1BLR0xJQkRJUiA9ICIke3RhcmdldF9sb2NhbHN0YXRlZGlyfS9saWIiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCisKK1BBQ0tBR0VDT05GSUdbZ3BnXSA9ICItLWVuYWJsZS1ncGcsLS1kaXNhYmxlLWdwZyxncGdtZSBsaWJncGctZXJyb3IsZ251cGciCitQQUNLQUdFQ09ORklHW2N1cmxdID0gIi0tZW5hYmxlLWN1cmwsLS1kaXNhYmxlLWN1cmwsY3VybCIKK1BBQ0tBR0VDT05GSUdbc3NsLWN1cmxdID0gIi0tZW5hYmxlLXNzbC1jdXJsLC0tZGlzYWJsZS1zc2wtY3VybCxjdXJsIG9wZW5zc2wiCitQQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi0tZW5hYmxlLW9wZW5zc2wsLS1kaXNhYmxlLW9wZW5zc2wsb3BlbnNzbCIKK1BBQ0tBR0VDT05GSUdbc2hhMjU2XSA9ICItLWVuYWJsZS1zaGEyNTYsLS1kaXNhYmxlLXNoYTI1NiIKK1BBQ0tBR0VDT05GSUdbcGF0aGZpbmRlcl0gPSAiLS1lbmFibGUtcGF0aGZpbmRlciwtLWRpc2FibGUtcGF0aGZpbmRlcixwYXRoZmluZGVyIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9vcGtnCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vb3BrZy5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L29wa2cvb3BrZy5jb25mCisJZWNobyAib3B0aW9uIGxpc3RzX2RpciAke09QS0dMSUJESVJ9L29wa2cvbGlzdHMiID4+JHtEfSR7c3lzY29uZmRpcn0vb3BrZy9vcGtnLmNvbmYKKworCSMgV2UgbmVlZCB0byBjcmVhdGUgdGhlIGxvY2sgZGlyZWN0b3J5CisJaW5zdGFsbCAtZCAke0R9JHtPUEtHTElCRElSfS9vcGtnCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9O3RoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9vcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCQlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCisJCQktZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyBcCisJCQktZSAncyxAQklORElSQCwke2JpbmRpcn0sZycgXAorCQkJLWUgJ3MsQFNZU1RFTURfVU5JVERJUkAsJHtzeXN0ZW1kX3VuaXRkaXJ9LGcnIFwKKwkJCSR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL29wa2ctY29uZmlndXJlLnNlcnZpY2UKKwlmaQorfQorCitSREVQRU5EU18ke1BOfSA9ICIke1ZJUlRVQUwtUlVOVElNRV91cGRhdGUtYWx0ZXJuYXRpdmVzfSBvcGtnLWFyY2gtY29uZmlnIHJ1bi1wb3N0aW5zdHMgbGliYXJjaGl2ZSIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorUlJFUExBQ0VTXyR7UE59ID0gIm9wa2ctbm9ncGcgb3BrZy1jb2xsYXRlcmFsIgorUkNPTkZMSUNUU18ke1BOfSA9ICJvcGtnLWNvbGxhdGVyYWwiCitSUFJPVklERVNfJHtQTn0gPSAib3BrZy1jb2xsYXRlcmFsIgorCitQQUNLQUdFUyA9KyAibGlib3BrZyIKKworRklMRVNfbGlib3BrZyA9ICIke2xpYmRpcn0vKi5zby4qICR7T1BLR0xJQkRJUn0vb3BrZy8iCitGSUxFU18ke1BOfSArPSAiJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vb3BrZy9vcGtnLmNvbmYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcmMvb3JjXzAuNC4yMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29yYy9vcmNfMC40LjIzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MjU3YzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcmMvb3JjXzAuNC4yMy5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIk9wdGltaXNlZCBJbm5lciBMb29wIFJ1bnRpbWUgQ29tcGlsZXIiCitIT01FUEFHRSA9ICJodHRwOi8vY29kZS5lbnRyb3B5d2F2ZS5jb20vcHJvamVjdHMvb3JjLyIKK0xJQ0VOU0UgPSAiQlNELTItQ2xhdXNlICYgQlNELTMtQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTQwMGJkOWQwOWU4YWY1NmI5ZWM5ODJiM2Q4NTc5N2UiCisKK1NSQ19VUkkgPSAiaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL29yYy9vcmMtJHtQVn0udGFyLnh6O25hbWU9b3JjIgorU1JDX1VSSVtvcmMubWQ1c3VtXSA9ICI3MmUwNjEyYWNlNTRkNzdhYTJmN2EwMDYzNDhlZTgxYSIKK1NSQ19VUklbb3JjLnNoYTI1NnN1bV0gPSAiNzY3ZWFlYmNlMjk0MTczN2I0MzM2ODIyNWVjNTQ1OThiMzA1NWNhNzhiNGRjNTBjNDA5MmY1ZmNkYzBiZGZlNyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworUEFDS0FHRVMgPSsgIm9yYy1leGFtcGxlcyIKK0ZJTEVTX29yYy1leGFtcGxlcyA9ICIke2xpYmRpcn0vb3JjLyoiCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vKiIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGxpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0nKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxpYmRpciwgJ15saWIoLiopXC5zb1wuKicsICdsaWIlcycsICdPUkMgJXMgbGlicmFyeScsIGV4dHJhX2RlcGVuZHM9JycsIGFsbG93X2xpbmtzPVRydWUpCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworICAgIHNlZCAtaSAtZSAncyMvdG1wIy4jZycgJHtTfS9vcmMvb3JjY29kZW1lbS5jCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDEtQ2hhbmdlLWxpYnJhcnktbmFtZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvMDAwMS1DaGFuZ2UtbGlicmFyeS1uYW1lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNjdjNTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDEtQ2hhbmdlLWxpYnJhcnktbmFtZS5wYXRjaApAQCAtMCwwICsxLDExOSBAQAorRnJvbTogUGlvdHIgUm9zemF0eWNraSA8ZGV4dGVyQGRlYmlhbi5vcmc+CitEYXRlOiBXZWQsIDI3IEphbiAyMDEwIDE2OjUzOjExICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIENoYW5nZSBsaWJyYXJ5IG5hbWUKKworVGhlIHNvbmFtZSB3YXMgY2hhbmdlZCB0byBvc3NwLXV1aWQgdG8gcHJldmVuZCB0aGUgbmFtZSBjbGFzaCB3aXRoIGUyZnNwcm9ncydzCit1dWlkIGxpYnJhcnkuCistLS0KKyBNYWtlZmlsZS5pbiAgICAgIHwgICAgNiArKystLS0KKyBwZXJsL01ha2VmaWxlLlBMIHwgICAxMiArKysrKystLS0tLS0KKyBwaHAvY29uZmlnLm00ICAgIHwgICAgMiArLQorIHV1aWQtY29uZmlnLmluICAgfCAgICAyICstCisgdXVpZC5wYy5pbiAgICAgICB8ICAgIDQgKystLQorIDUgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCisKKy0tLS0KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbm90IGF1dGhvcl0KKworVGhpcyBwYXRjaCBpcyBmcm9tIGRlYmlhbiBvc3NwLXV1aWQgMS42LjIgaW50ZWdyYXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IGQyOGY0YmUuLmMyYmE5OWQgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC02MiwxMyArNjIsMTMgQEAgUEVSTCAgICAgICAgPSBAUEVSTEAKKyBQSFAgICAgICAgICA9IEBQSFBACisgUEdfQ09ORklHICAgPSBAUEdfQ09ORklHQAorIAorLUxJQl9OQU1FICAgID0gbGlidXVpZC5sYQorK0xJQl9OQU1FICAgID0gbGlib3NzcC11dWlkLmxhCisgTElCX09CSlMgICAgPSB1dWlkLmxvIHV1aWRfbWQ1LmxvIHV1aWRfc2hhMS5sbyB1dWlkX3BybmcubG8gdXVpZF9tYWMubG8gdXVpZF90aW1lLmxvIHV1aWRfdWk2NC5sbyB1dWlkX3VpMTI4LmxvIHV1aWRfc3RyLmxvCisgCistRENFX05BTUUgICAgPSBsaWJ1dWlkX2RjZS5sYQorK0RDRV9OQU1FICAgID0gbGlib3NzcC11dWlkX2RjZS5sYQorIERDRV9PQkpTICAgID0gdXVpZF9kY2UubG8gJChMSUJfT0JKUykKKyAKKy1DWFhfTkFNRSAgICA9IGxpYnV1aWQrKy5sYQorK0NYWF9OQU1FICAgID0gbGlib3NzcC11dWlkKysubGEKKyBDWFhfT0JKUyAgICA9IHV1aWQrKy5sbyAkKExJQl9PQkpTKQorIAorIFBSR19OQU1FICAgID0gdXVpZAorZGlmZiAtLWdpdCBhL3BlcmwvTWFrZWZpbGUuUEwgYi9wZXJsL01ha2VmaWxlLlBMCitpbmRleCA5MmY0NDk0Li45YzZmZWU2IDEwMDY0NAorLS0tIGEvcGVybC9NYWtlZmlsZS5QTAorKysrIGIvcGVybC9NYWtlZmlsZS5QTAorQEAgLTMzLDkgKzMzLDkgQEAgdXNlIENvbmZpZzsKKyB1c2UgRXh0VXRpbHM6Ok1ha2VNYWtlcjsKKyAKKyAjICAgZGV0ZXJtaW5lIHNvdXJjZSBkaXJlY3RvcnkKKy1teSAoJHNyY2RpcikgPSBtYXAgeyBteSAkZCA9ICRfOyAkZCA9fiBzL1wvbGlidXVpZFwubGEkLy87ICRkIH0KKy0gICAgICAgICAgICAgICBncmVwIHsgLWYgJF8gfSAoIi4uL2xpYnV1aWQubGEiLCBnbG9iKCIuLi8qL2xpYnV1aWQubGEiKSkKKy0gICAgb3IgZGllICJubyBzb3VyY2UgZGlyZWN0b3J5IGZvdW5kICh3aGVyZSBsaWJ1dWlkLmxhIGlzIGxvY2F0ZWQpIjsKKytteSAoJHNyY2RpcikgPSBtYXAgeyBteSAkZCA9ICRfOyAkZCA9fiBzL1wvbGlib3NzcC11dWlkXC5sYSQvLzsgJGQgfQorKyAgICAgICAgICAgICAgIGdyZXAgeyAtZiAkXyB9ICgiLi4vbGlib3NzcC11dWlkLmxhIiwgZ2xvYigiLi4vKi9saWJvc3NwLXV1aWQubGEiKSkKKysgICAgb3IgZGllICJubyBzb3VyY2UgZGlyZWN0b3J5IGZvdW5kICh3aGVyZSBsaWJvc3NwLXV1aWQubGEgaXMgbG9jYXRlZCkiOworIAorICMgICBkZXRlcm1pbmUgZXh0cmEgYnVpbGQgb3B0aW9ucworIG15ICRjb21wYXQgPSAwOworQEAgLTQ3LDE1ICs0NywxNSBAQCBXcml0ZU1ha2VmaWxlKAorICAgICBWRVJTSU9OX0ZST00gICAgICA9PiAndXVpZC5wbScsCisgICAgIEFCU1RSQUNUX0ZST00gICAgID0+ICd1dWlkLnBvZCcsCisgICAgIFBSRVJFUV9QTSAgICAgICAgID0+IHt9LAorLSAgICBMSUJTICAgICAgICAgICAgICA9PiBbICItTCRzcmNkaXIvLmxpYnMgLUwkc3JjZGlyIC1sdXVpZCIgXSwKKysgICAgTElCUyAgICAgICAgICAgICAgPT4gWyAiLUwkc3JjZGlyLy5saWJzIC1MJHNyY2RpciAtbG9zc3AtdXVpZCIgXSwKKyAgICAgREVGSU5FICAgICAgICAgICAgPT4gJycsCisgICAgIElOQyAgICAgICAgICAgICAgID0+ICItSS4gLUkkc3JjZGlyIiwKKyAgICAgUE0gICAgICAgICAgICAgICAgPT4geyAndXVpZC5wbScgICA9PiAnJChJTlNUX0xJQkRJUikvdXVpZC5wbScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3V1aWQucG9kJyAgPT4gJyQoSU5TVF9MSUJESVIpL3V1aWQucG9kJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJGNvbXBhdCA/ICgndXVpZF9jb21wYXQucG0nICA9PiAnJChJTlNUX0xJQkRJUikvLi4vRGF0YS9VVUlELnBtJykgIDogKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgkY29tcGF0ID8gKCd1dWlkX2NvbXBhdC5wb2QnID0+ICckKElOU1RfTElCRElSKS8uLi9EYXRhL1VVSUQucG9kJykgOiAoKSksIH0sCistICAgIE1BTjNQT0RTICAgICAgICAgID0+IHsgJ3V1aWQucG9kJyA9PiAnJChJTlNUX01BTjNESVIpL09TU1A6OnV1aWQuMycsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgKCRjb21wYXQgPyAoJ3V1aWRfY29tcGF0LnBvZCcgPT4gJyQoSU5TVF9NQU4zRElSKS9EYXRhOjpVVUlELjMnKSA6ICgpKSwgfSwKKysgICAgTUFOM1BPRFMgICAgICAgICAgPT4geyAndXVpZC5wb2QnID0+ICckKElOU1RfTUFOM0RJUikvT1NTUDo6dXVpZC4zcG0nLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgkY29tcGF0ID8gKCd1dWlkX2NvbXBhdC5wb2QnID0+ICckKElOU1RfTUFOM0RJUikvRGF0YTo6VVVJRC4zcG0nKSA6ICgpKSwgfSwKKyAgICAgVFlQRU1BUFMgICAgICAgICAgPT4gWyAndXVpZC50bScgXSwKKyAgICAgdGVzdCAgICAgICAgICAgICAgPT4geyBURVNUUyA9PiAndXVpZC50cycgLiAoJGNvbXBhdCA/ICcgdXVpZF9jb21wYXQudHMnIDogJycpIH0sCisgICAgIE5PX01FVEEgICAgICAgICAgID0+IDEsCitkaWZmIC0tZ2l0IGEvcGhwL2NvbmZpZy5tNCBiL3BocC9jb25maWcubTQKK2luZGV4IDUwOTFiOTYuLjk2OWI0NTcgMTAwNjQ0CistLS0gYS9waHAvY29uZmlnLm00CisrKysgYi9waHAvY29uZmlnLm00CitAQCAtMzQsNyArMzQsNyBAQCBpZiB0ZXN0ICIkUEhQX1VVSUQiICE9ICJubyI7IHRoZW4KKyAgICAgUEhQX05FV19FWFRFTlNJT04odXVpZCwgdXVpZC5jLCAkZXh0X3NoYXJlZCkKKyAgICAgQUNfREVGSU5FKEhBVkVfVVVJRCwgMSwgW0hhdmUgT1NTUCB1dWlkIGxpYnJhcnldKQorICAgICBQSFBfQUREX0xJQlBBVEgoWy4uXSwgKQorLSAgICBQSFBfQUREX0xJQlJBUlkoW3V1aWRdLCwgVVVJRF9TSEFSRURfTElCQUREKQorKyAgICBQSFBfQUREX0xJQlJBUlkoW29zc3AtdXVpZF0sLCBVVUlEX1NIQVJFRF9MSUJBREQpCisgICAgIFBIUF9BRERfSU5DTFVERShbLi5dKQorICAgICBQSFBfU1VCU1QoVVVJRF9TSEFSRURfTElCQUREKQorIAorZGlmZiAtLWdpdCBhL3V1aWQtY29uZmlnLmluIGIvdXVpZC1jb25maWcuaW4KK2luZGV4IDhkMmEwNjMuLjViNTg4MTIgMTAwNjQ0CistLS0gYS91dWlkLWNvbmZpZy5pbgorKysrIGIvdXVpZC1jb25maWcuaW4KK0BAIC0xMjEsNyArMTIxLDcgQEAgZG8KKyAgICAgICAgICAgICBvdXRwdXRfZXh0cmE9IiRvdXRwdXRfZXh0cmEgJHV1aWRfbGRmbGFncyIKKyAgICAgICAgICAgICA7OworICAgICAgICAgLS1saWJzKQorLSAgICAgICAgICAgIG91dHB1dD0iJG91dHB1dCAtbHV1aWQiCisrICAgICAgICAgICAgb3V0cHV0PSIkb3V0cHV0IC1sb3NzcC11dWlkIgorICAgICAgICAgICAgIG91dHB1dF9leHRyYT0iJG91dHB1dF9leHRyYSAkdXVpZF9saWJzIgorICAgICAgICAgICAgIDs7CisgICAgICAgICAqICkKK2RpZmYgLS1naXQgYS91dWlkLnBjLmluIGIvdXVpZC5wYy5pbgoraW5kZXggYzc2YWQxZS4uZGUwMGMyZiAxMDA2NDQKKy0tLSBhL3V1aWQucGMuaW4KKysrKyBiL3V1aWQucGMuaW4KK0BAIC0zNiw3ICszNiw3IEBAIE5hbWU6IE9TU1AgdXVpZAorIERlc2NyaXB0aW9uOiBVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllciAoVVVJRCkgTGlicmFyeQorIFZlcnNpb246IEBVVUlEX1ZFUlNJT05fUkFXQAorIFVSTDogaHR0cDovL3d3dy5vc3NwLm9yZy9wa2cvbGliL3V1aWQvCistQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KKy1MaWJzOiAtTCR7bGliZGlyfSAtbHV1aWQKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfS9vc3NwCisrTGliczogLUwke2xpYmRpcn0gLWxvc3NwLXV1aWQKKyBMaWJzLnByaXZhdGU6IEBMSUJTQAorIAorLS0gCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDItdXVpZC1wcmVzZXJ2ZS1tLW9wdGlvbi1zdGF0dXMtaW4tdi1vcHRpb24taGFuZGxpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDItdXVpZC1wcmVzZXJ2ZS1tLW9wdGlvbi1zdGF0dXMtaW4tdi1vcHRpb24taGFuZGxpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA0YTYyNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvMDAwMi11dWlkLXByZXNlcnZlLW0tb3B0aW9uLXN0YXR1cy1pbi12LW9wdGlvbi1oYW5kbGluZy5wYXRjaApAQCAtMCwwICsxLDYyIEBACitGcm9tOiBNYXJjbyBOZW5jaWFyaW5pIDxtYXJjby5uZW5jaWFyaW5pQGRldmlzZS5pdD4KK0RhdGU6IFdlZCwgMjcgSmFuIDIwMTAgMTk6NDY6MjEgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gdXVpZDogcHJlc2VydmUgLW0gb3B0aW9uIHN0YXR1cyBpbiAtdiBvcHRpb24gaGFuZGxpbmcKKworQnVnOiA1MzEzOTYKKy0tLQorIHV1aWRfY2xpLmMgfCAgIDE5ICsrKysrKysrKystLS0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKKy0tLS0KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbm90IGF1dGhvcl0KKworVGhpcyBwYXRjaCBpcyBmcm9tIGRlYmlhbiBvc3NwLXV1aWQgMS42LjIgaW50ZWdyYXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL3V1aWRfY2xpLmMgYi91dWlkX2NsaS5jCitpbmRleCBkMWIwYjExLi4xNGE2N2ZlIDEwMDY0NAorLS0tIGEvdXVpZF9jbGkuYworKysrIGIvdXVpZF9jbGkuYworQEAgLTE0MCwxMSArMTQwLDEyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgICAgICAgICAgICAgIGkgPSBzdHJ0b2wob3B0YXJnLCAmcCwgMTApOworICAgICAgICAgICAgICAgICBpZiAoKnAgIT0gJ1wwJykKKyAgICAgICAgICAgICAgICAgICAgIHVzYWdlKCJpbnZhbGlkIGFyZ3VtZW50IHRvIG9wdGlvbiAndiciKTsKKysgICAgICAgICAgICAgICAgdmVyc2lvbiAmPSB+KFVVSURfTUFLRV9WMXxVVUlEX01BS0VfVjN8VVVJRF9NQUtFX1Y0fFVVSURfTUFLRV9WNSk7CisgICAgICAgICAgICAgICAgIHN3aXRjaCAoaSkgeworLSAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB2ZXJzaW9uID0gVVVJRF9NQUtFX1YxOyBicmVhazsKKy0gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogdmVyc2lvbiA9IFVVSURfTUFLRV9WMzsgYnJlYWs7CistICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHZlcnNpb24gPSBVVUlEX01BS0VfVjQ7IGJyZWFrOworLSAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiB2ZXJzaW9uID0gVVVJRF9NQUtFX1Y1OyBicmVhazsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogdmVyc2lvbiB8PSBVVUlEX01BS0VfVjE7IGJyZWFrOworKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB2ZXJzaW9uIHw9IFVVSURfTUFLRV9WMzsgYnJlYWs7CisrICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHZlcnNpb24gfD0gVVVJRF9NQUtFX1Y0OyBicmVhazsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgNTogdmVyc2lvbiB8PSBVVUlEX01BS0VfVjU7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICB1c2FnZSgiaW52YWxpZCB2ZXJzaW9uIG9uIG9wdGlvbiAndiciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKK0BAIC0yMTMsMTAgKzIxNCwxMCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgICB9CisgICAgIGVsc2UgeworICAgICAgICAgLyogZW5jb2RpbmcgKi8KKy0gICAgICAgIGlmICggICAodmVyc2lvbiA9PSBVVUlEX01BS0VfVjEgJiYgYXJnYyAhPSAwKQorLSAgICAgICAgICAgIHx8ICh2ZXJzaW9uID09IFVVSURfTUFLRV9WMyAmJiBhcmdjICE9IDIpCistICAgICAgICAgICAgfHwgKHZlcnNpb24gPT0gVVVJRF9NQUtFX1Y0ICYmIGFyZ2MgIT0gMCkKKy0gICAgICAgICAgICB8fCAodmVyc2lvbiA9PSBVVUlEX01BS0VfVjUgJiYgYXJnYyAhPSAyKSkKKysgICAgICAgIGlmICggICAodmVyc2lvbiAmIFVVSURfTUFLRV9WMSAmJiBhcmdjICE9IDApCisrICAgICAgICAgICAgfHwgKHZlcnNpb24gJiBVVUlEX01BS0VfVjMgJiYgYXJnYyAhPSAyKQorKyAgICAgICAgICAgIHx8ICh2ZXJzaW9uICYgVVVJRF9NQUtFX1Y0ICYmIGFyZ2MgIT0gMCkKKysgICAgICAgICAgICB8fCAodmVyc2lvbiAmIFVVSURfTUFLRV9WNSAmJiBhcmdjICE9IDIpKQorICAgICAgICAgICAgIHVzYWdlKCJpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMiKTsKKyAgICAgICAgIGlmICgocmMgPSB1dWlkX2NyZWF0ZSgmdXVpZCkpICE9IFVVSURfUkNfT0spCisgICAgICAgICAgICAgZXJyb3IoMSwgInV1aWRfY3JlYXRlOiAlcyIsIHV1aWRfZXJyb3IocmMpKTsKK0BAIC0yMzIsNyArMjMzLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICAgICAgICAgICAgICAgaWYgKChyYyA9IHV1aWRfbG9hZCh1dWlkLCAibmlsIikpICE9IFVVSURfUkNfT0spCisgICAgICAgICAgICAgICAgICAgICBlcnJvcigxLCAidXVpZF9sb2FkOiAlcyIsIHV1aWRfZXJyb3IocmMpKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgaWYgKHZlcnNpb24gPT0gVVVJRF9NQUtFX1YzIHx8IHZlcnNpb24gPT0gVVVJRF9NQUtFX1Y1KSB7CisrICAgICAgICAgICAgaWYgKHZlcnNpb24gJiBVVUlEX01BS0VfVjMgfHwgdmVyc2lvbiAmIFVVSURfTUFLRV9WNSkgeworICAgICAgICAgICAgICAgICBpZiAoKHJjID0gdXVpZF9jcmVhdGUoJnV1aWRfbnMpKSAhPSBVVUlEX1JDX09LKQorICAgICAgICAgICAgICAgICAgICAgZXJyb3IoMSwgInV1aWRfY3JlYXRlOiAlcyIsIHV1aWRfZXJyb3IocmMpKTsKKyAgICAgICAgICAgICAgICAgaWYgKChyYyA9IHV1aWRfbG9hZCh1dWlkX25zLCBhcmd2WzBdKSkgIT0gVVVJRF9SQ19PSykgeworLS0gCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDMtRml4LXdoYXRpcy1lbnRyaWVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDAzLUZpeC13aGF0aXMtZW50cmllcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2NiYjU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDAzLUZpeC13aGF0aXMtZW50cmllcy5wYXRjaApAQCAtMCwwICsxLDU4IEBACitGcm9tOiBNYXJjbyBOZW5jaWFyaW5pIDxtYXJjby5uZW5jaWFyaW5pQGRldmlzZS5pdD4KK0RhdGU6IFR1ZSwgMiBGZWIgMjAxMCAxMjoxNjo0OSArMDEwMAorU3ViamVjdDogW1BBVENIXSBGaXggd2hhdGlzIGVudHJpZXMKKworRml4IHdoYXRpcyBlbnRyeSBvZiB1dWlkLjEsIHV1aWQuM29zc3AgYW5kIHV1aWQrKy4zb3NzcCBtYW5wYWdlcworLS0tCisgdXVpZCsrLnBvZCAgIHwgICAgMiArLQorIHV1aWQucG9kICAgICB8ICAgIDIgKy0KKyB1dWlkX2NsaS5wb2QgfCAgICAyICstCisgMyBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKKy0tLS0KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbm90IGF1dGhvcl0KKworVGhpcyBwYXRjaCBpcyBmcm9tIGRlYmlhbiBvc3NwLXV1aWQgMS42LjIgaW50ZWdyYXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL3V1aWQrKy5wb2QgYi91dWlkKysucG9kCitpbmRleCA4YjVhNGIxLi44OWM1ZWZiIDEwMDY0NAorLS0tIGEvdXVpZCsrLnBvZAorKysrIGIvdXVpZCsrLnBvZAorQEAgLTMxLDcgKzMxLDcgQEAKKyAKKyA9aGVhZDEgTkFNRQorIAorLUI8T1NTUCB1dWlkPiAtIEI8VW5pdmVyc2FsbHkgVW5pcXVlIElkZW50aWZpZXI+IChDKysgQVBJKQorK0I8dXVpZCsrPiAtIEI8VW5pdmVyc2FsbHkgVW5pcXVlIElkZW50aWZpZXI+IChDKysgQVBJKQorIAorID1oZWFkMSBWRVJTSU9OCisgCitkaWZmIC0tZ2l0IGEvdXVpZC5wb2QgYi91dWlkLnBvZAoraW5kZXggNGFkMzc0Mi4uMDE3OWE0NiAxMDA2NDQKKy0tLSBhL3V1aWQucG9kCisrKysgYi91dWlkLnBvZAorQEAgLTMxLDcgKzMxLDcgQEAKKyAKKyA9aGVhZDEgTkFNRQorIAorLUI8T1NTUCB1dWlkPiAtIEI8VW5pdmVyc2FsbHkgVW5pcXVlIElkZW50aWZpZXI+CisrQjx1dWlkPiAtIEI8VW5pdmVyc2FsbHkgVW5pcXVlIElkZW50aWZpZXI+CisgCisgPWhlYWQxIFZFUlNJT04KKyAKK2RpZmYgLS1naXQgYS91dWlkX2NsaS5wb2QgYi91dWlkX2NsaS5wb2QKK2luZGV4IGRkZWM2YmIuLmRmOWRjODMgMTAwNjQ0CistLS0gYS91dWlkX2NsaS5wb2QKKysrKyBiL3V1aWRfY2xpLnBvZAorQEAgLTMxLDcgKzMxLDcgQEAKKyAKKyA9aGVhZDEgTkFNRQorIAorLUI8T1NTUCB1dWlkPiAtIEI8VW5pdmVyc2FsbHkgVW5pcXVlIElkZW50aWZpZXIgQ29tbWFuZC1MaW5lIFRvb2w+CisrQjx1dWlkPiAtIEI8VW5pdmVyc2FsbHkgVW5pcXVlIElkZW50aWZpZXIgQ29tbWFuZC1MaW5lIFRvb2w+CisgCisgPWhlYWQxIFZFUlNJT04KKyAKKy0tIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDA0LWZpeC1kYXRhLXV1aWQtZnJvbS1zdHJpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDQtZml4LWRhdGEtdXVpZC1mcm9tLXN0cmluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzVlMTExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDA0LWZpeC1kYXRhLXV1aWQtZnJvbS1zdHJpbmcucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRGVzY3JpcHRpb246IFN1cHBvcnQgZGFzaC1sZXNzIGFyZ3MgdG8gZnJvbV9zdHJpbmcuCitBdXRob3I6IFRpbSBSZXRvdXQgPGRpb2NsZXNAZGViaWFuLm9yZz4KK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNjM1NjA3CisKK1RoZSBtb2R1bGUgRGF0YTo6R1VJRCBkZXBlbmRzIG9uIERhdGE6OlVVSUQgc3VwcG9ydGluZyB0aGlzIGJlaGF2aW91ci4KKworLS0tLQorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtub3QgYXV0aG9yXQorCitUaGlzIHBhdGNoIGlzIGZyb20gZGViaWFuIG9zc3AtdXVpZCAxLjYuMiBpbnRlZ3JhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCistLS0gYS9wZXJsL3V1aWRfY29tcGF0LnBtCisrKysgYi9wZXJsL3V1aWRfY29tcGF0LnBtCitAQCAtOTMsNyArOTMsOSBAQAorICAgICAkdXVpZC0+aW1wb3J0KCdzdHInLAorICAgICAgICAgICAkc3RyID1+IC9eMHgvCisgICAgICAgICA/IGpvaW4gJy0nLCB1bnBhY2soJ3gyIGE4IGE0IGE0IGE0IGExMicsICRzdHIpCistICAgICAgICA6ICRzdHIKKysgICAgICAgIDogJHN0ciA9fiAvLS8KKysgICAgICAgID8gJHN0cgorKyAgICAgICAgOiBqb2luICctJywgdW5wYWNrKCdBOCBBNCBBNCBBNCBBMTInLCAkc3RyKQorICAgICApOworICAgICByZXR1cm4gJHV1aWQtPmV4cG9ydCgnYmluJyk7CisgfQorLS0tIGEvcGVybC91dWlkX2NvbXBhdC50cworKysrIGIvcGVybC91dWlkX2NvbXBhdC50cworQEAgLTI4LDcgKzI4LDcgQEAKKyAjIyAgdXVpZF9jb21wYXQudHM6IERhdGE6OlVVSUQgQmFja3dhcmQgQ29tcGF0aWJpbGl0eSBQZXJsIEFQSSAoUGVybCB0ZXN0IHN1aXRlIHBhcnQpCisgIyMKKyAKKy11c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiAxNDsKKyt1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiAxNjsKKyAKKyBCRUdJTiB7CisgICAgIHVzZV9vaygnRGF0YTo6VVVJRCcpOworQEAgLTUzLDMgKzUzLDUgQEAKKyBvaygkdXVpZDggPSAkdWctPmZyb21fc3RyaW5nKCI2YmE3YjgxMS05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgiKSk7Cisgb2soJHVnLT5jb21wYXJlKCR1dWlkNywgJHV1aWQ4KSA9PSAwKTsKKyAKKytvaygkdXVpZDkgPSAkdWctPmZyb21fc3RyaW5nKCI2YmE3YjgxMTlkYWQxMWQxODBiNDAwYzA0ZmQ0MzBjOCIpKTsKKytvaygkdWctPmNvbXBhcmUoJHV1aWQ3LCAkdXVpZDkpID09IDApOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC9pbnN0YWxsLXBjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC9pbnN0YWxsLXBjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MjIyY2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkL2luc3RhbGwtcGMucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAordXVpZC5wYyBpcyBnZW5lcmF0ZWQgYXQgYnVpbGQgdGltZSBzbyBzaG91bGQgYmUgaW5zdGFsbGVkIGZyb20gdGhlIGN1cnJlbnQKK2RpcmVjdG9yeSwgYW5kIG5vdCAkUy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nIFtzaG91bGQgYmUgc3VibWl0dGVkXQorU2lnbmVkLU9mZi1CeTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworSW5kZXg6IHV1aWQtMS42LjIvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1dWlkLTEuNi4yLm9yaWcvTWFrZWZpbGUuaW4JMjAxMi0xMS0xMyAxNjo1ODoyOC42MjQxNTYwMDAgKzAwMDAKKysrKyB1dWlkLTEuNi4yL01ha2VmaWxlLmluCTIwMTItMTEtMTMgMTc6MDU6MjQuMjI0MTU4NjcwICswMDAwCitAQCAtMjMyLDcgKzIzMiw3IEBACisgCSQoU0hUT09MKSBta2RpciAtZiAtcCAtbSA3NTUgJChERVNURElSKSQobWFuZGlyKS9tYW4xCisgCSQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDc1NSB1dWlkLWNvbmZpZyAkKERFU1RESVIpJChiaW5kaXIpLworIAkkKFNIVE9PTCkgaW5zdGFsbCAtYyAtbSA2NDQgJChTKS91dWlkLWNvbmZpZy4xICQoREVTVERJUikkKG1hbmRpcikvbWFuMS8KKy0JJChTSFRPT0wpIGluc3RhbGwgLWMgLW0gNjQ0ICQoUykvdXVpZC5wYyAkKERFU1RESVIpJChsaWJkaXIpL3BrZ2NvbmZpZy8KKysJJChTSFRPT0wpIGluc3RhbGwgLWMgLW0gNjQ0IHV1aWQucGMgJChERVNURElSKSQobGliZGlyKS9wa2djb25maWcvCisgCSQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDY0NCB1dWlkLmggJChERVNURElSKSQoaW5jbHVkZWRpcikvCisgCS1AaWYgWyAiLiQoV0lUSF9EQ0UpIiA9IC55ZXMgXTsgdGhlbiBcCisgCSAgICBlY2hvICIkKFNIVE9PTCkgaW5zdGFsbCAtYyAtbSA2NDQgJChTKS91dWlkX2RjZS5oICQoREVTVERJUikkKGluY2x1ZGVkaXIpLyI7IFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvbGRmbGFncy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvbGRmbGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGZjMTM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC9sZGZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK09iZXkgTERGTEFHUworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSB1dWlkLTEuNi4yLm9yaWcvTWFrZWZpbGUuaW4KKysrKyB1dWlkLTEuNi4yL01ha2VmaWxlLmluCitAQCAtMTEzLDE1ICsxMTMsMTUgQEAgYWxsOiAkKFRBUkdFVFMpCisJQCQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDWFgpICQoQ1BQRkxBR1MpICQoQ1hYRkxBR1MpIC1jICQ8CisKKyAkKExJQl9OQU1FKTogJChMSUJfT0JKUykKKy0JQCQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDQykgLW8gJChMSUJfTkFNRSkgJChMSUJfT0JKUykgLXJwYXRoICQobGliZGlyKSBcCisrCUAkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpICQoTERGTEFHUykgLW8gJChMSUJfTkFNRSkgJChMSUJfT0JKUykgLXJwYXRoICQobGliZGlyKSBcCisJICAgIC12ZXJzaW9uLWluZm8gYCQoU0hUT09MKSB2ZXJzaW9uIC1sIGMgLWQgbGlidG9vbCAkKFMpL3V1aWRfdmVycy5oYAorCisgJChEQ0VfTkFNRSk6ICQoRENFX09CSlMpCistCUAkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpIC1vICQoRENFX05BTUUpICQoRENFX09CSlMpIC1ycGF0aCAkKGxpYmRpcikgXAorKwlAJChMSUJUT09MKSAtLW1vZGU9bGluayAkKENDKSAkKExERkxBR1MpIC1vICQoRENFX05BTUUpICQoRENFX09CSlMpIC1ycGF0aCAkKGxpYmRpcikgXAorCSAgICAtdmVyc2lvbi1pbmZvIGAkKFNIVE9PTCkgdmVyc2lvbiAtbCBjIC1kIGxpYnRvb2wgJChTKS91dWlkX3ZlcnMuaGAKKworICQoQ1hYX05BTUUpOiAkKENYWF9PQkpTKQorLQlAJChMSUJUT09MKSAtLW1vZGU9bGluayAkKENYWCkgLW8gJChDWFhfTkFNRSkgJChDWFhfT0JKUykgLXJwYXRoICQobGliZGlyKSBcCisrCUAkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ1hYKSAkKExERkxBR1MpIC1vICQoQ1hYX05BTUUpICQoQ1hYX09CSlMpIC1ycGF0aCAkKGxpYmRpcikgXAorCSAgICAtdmVyc2lvbi1pbmZvIGAkKFNIVE9PTCkgdmVyc2lvbiAtbCBjIC1kIGxpYnRvb2wgJChTKS91dWlkX3ZlcnMuaGAKKworICQoUFJHX05BTUUpOiAkKFBSR19PQkpTKSAkKExJQl9OQU1FKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC91dWlkLWxpYnRvb2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkL3V1aWQtbGlidG9vbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmM5MWI4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC91dWlkLWxpYnRvb2wucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorUmVtb3ZlIGhhcmRjb2RlZCBsaWJ0b29sIG5hbWUsIGZhbGwgYmFjayB0byBnZW5lcmF0ZWQgbmFtZQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW25vIHVwc3RyZWFtXQorVGhlIHByb2plY3QgYXBwZWFycyB0byBubyBsb25nZXIgYmUgYWNjZXB0aW5nIGNoYW5nZXMuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtdXIgdXVpZC0xLjYuMi5vcmlnL01ha2VmaWxlLmluIHV1aWQtMS42LjIvTWFrZWZpbGUuaW4KKy0tLSB1dWlkLTEuNi4yLm9yaWcvTWFrZWZpbGUuaW4JMjAxMi0wNS0xNCAxNDozNzoxOS41Nzk2NzI5MzAgLTA1MDAKKysrKyB1dWlkLTEuNi4yL01ha2VmaWxlLmluCTIwMTItMDUtMTQgMTQ6Mzc6NDkuMTEyNzMzNzg3IC0wNTAwCitAQCAtMzIsNiArMzIsNyBAQAorIFZQQVRIICAgICAgID0gQHNyY2RpckAKKyBzcmNkaXIgICAgICA9IEBzcmNkaXJACisgdG9wX3NyY2RpciAgPSBAdG9wX3NyY2RpckAKKyt0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAorIFMgICAgICAgICAgID0gJChzcmNkaXIpCisgQyAgICAgICAgICAgPSAuCisgCitAQCAtNTUsNyArNTYsNyBAQAorIENQICAgICAgICAgID0gY3AKKyBSTURJUiAgICAgICA9IHJtZGlyCisgU0hUT09MICAgICAgPSAkKFMpL3NodG9vbAorLUxJQlRPT0wgICAgID0gJChDKS9saWJ0b29sCisrTElCVE9PTCAgICAgPSBATElCVE9PTEAKKyBUUlVFICAgICAgICA9IHRydWUKKyBQT0QyTUFOICAgICA9IHBvZDJtYW4KKyBQRVJMICAgICAgICA9IEBQRVJMQApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC91dWlkLW5vc3RyaXAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkL3V1aWQtbm9zdHJpcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODA2YjVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC91dWlkLW5vc3RyaXAucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorV2UgZG9uJ3Qgd2FudCBhbnl0aGluZyBzdHJpcHBlZAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW25vIHVwc3RyZWFtXQorVGhlIHByb2plY3QgYXBwZWFycyB0byBubyBsb25nZXIgYmUgYWNjZXB0aW5nIGNoYW5nZXMuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtdXIgdXVpZC0xLjYuMi5vcmlnL01ha2VmaWxlLmluIHV1aWQtMS42LjIvTWFrZWZpbGUuaW4KKy0tLSB1dWlkLTEuNi4yLm9yaWcvTWFrZWZpbGUuaW4JMjAxMi0wNS0xNCAxNDo0Mjo0Mi4yMjU3ODk0NTYgLTA1MDAKKysrKyB1dWlkLTEuNi4yL01ha2VmaWxlLmluCTIwMTItMDUtMTQgMTU6MDM6MDMuMTE5NzMzNDAwIC0wNTAwCitAQCAtMjU0LDcgKzI1NCw3IEBACisgCS1AaWYgWyAiLiQoV0lUSF9DWFgpIiA9IC55ZXMgXTsgdGhlbiBcCisgCSAgICAkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsICQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDY0NCAkKENYWF9OQU1FKSAkKERFU1RESVIpJChsaWJkaXIpLzsgXAorIAlmaQorLQlAJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCAkKFNIVE9PTCkgaW5zdGFsbCAtYyAtcyAtbSA3NTUgdXVpZCAkKERFU1RESVIpJChiaW5kaXIpLworKwlAJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCAkKFNIVE9PTCkgaW5zdGFsbCAtYyAtbSA3NTUgdXVpZCAkKERFU1RESVIpJChiaW5kaXIpLworIAkkKFNIVE9PTCkgaW5zdGFsbCAtYyAtbSA2NDQgJChTKS91dWlkLjEgJChERVNURElSKSQobWFuZGlyKS9tYW4xLworIAktQGlmIFsgIi4kKFdJVEhfUEVSTCkiID0gLnllcyBdOyB0aGVuIFwKKyAJICAgIChjZCAkKFMpL3BlcmwgJiYgJChNQUtFKSAkKE1GTEFHUykgaW5zdGFsbCBERVNURElSPSQoREVTVERJUikpOyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkXzEuNi4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZF8xLjYuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODkyNmJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZF8xLjYuMi5iYgpAQCAtMCwwICsxLDYzIEBACitTVU1NQVJZID0gIlVuaXZlcnNhbGx5IFVuaXF1ZSBJZGVudGlmaWVyIChVVUlEKSBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiT1NTUCB1dWlkIGlzIGEgSVNPLUM6MTk5OSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgXAorKEFQSSkgYW5kIGNvcnJlc3BvbmRpbmcgY29tbWFuZCBsaW5lIGludGVyZmFjZSAoQ0xJKSBmb3IgdGhlIGdlbmVyYXRpb24gb2YgXAorRENFIDEuMSwgSVNPL0lFQyAxMTU3ODoxOTk2IGFuZCBSRkMgNDEyMiBjb21wbGlhbnQgVW5pdmVyc2FsbHkgVW5pcXVlIFwKK0lkZW50aWZpZXIgKFVVSUQpLiBJdCBzdXBwb3J0cyBEQ0UgMS4xIHZhcmlhbnQgVVVJRHMgb2YgdmVyc2lvbiAxICh0aW1lIFwKK2FuZCBub2RlIGJhc2VkKSwgdmVyc2lvbiAzIChuYW1lIGJhc2VkLCBNRDUpLCB2ZXJzaW9uIDQgKHJhbmRvbSBudW1iZXIgXAorYmFzZWQpIGFuZCB2ZXJzaW9uIDUgKG5hbWUgYmFzZWQsIFNIQS0xKS4iCitERVNDUklQVElPTl91dWlkID0gIlRoaXMgcGFja2FnZSBjb250YWlucyBhIHRvb2wgdG8gY3JlYXRlIFVuaXZlcnNhbGx5IFwKK1VuaXF1ZSBJZGVudGlmaWVycyAoVVVJRCkgZnJvbSB0aGUgY29tbWFuZC1saW5lLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vc3NwLm9yZy9wa2cvbGliL3V1aWQvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9MzA7ZW5kbGluZT01NTttZDU9YjM5NGZhZGIwMzliYmZjYTZhZDlkOWQ3NjllZTk2MGUgXAorCSAgIGZpbGU6Ly91dWlkX21kNS5jO2JlZ2lubGluZT0xO2VuZGxpbmU9Mjg7bWQ1PTljMWY0YjIyMTg1NDZkZWFlMjRjOTFiZTFkY2YwMGRkIgorCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vby8ke0JQTn0vJHtCUE59XyR7UFZ9Lm9yaWcudGFyLmd6IFwKKwkgICBmaWxlOi8vMDAwMS1DaGFuZ2UtbGlicmFyeS1uYW1lLnBhdGNoIFwKKwkgICBmaWxlOi8vMDAwMi11dWlkLXByZXNlcnZlLW0tb3B0aW9uLXN0YXR1cy1pbi12LW9wdGlvbi1oYW5kbGluZy5wYXRjaCBcCisJICAgZmlsZTovLzAwMDMtRml4LXdoYXRpcy1lbnRyaWVzLnBhdGNoIFwKKwkgICBmaWxlOi8vMDAwNC1maXgtZGF0YS11dWlkLWZyb20tc3RyaW5nLnBhdGNoIFwKKwkgICBmaWxlOi8vdXVpZC1saWJ0b29sLnBhdGNoIFwKKwkgICBmaWxlOi8vdXVpZC1ub3N0cmlwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2luc3RhbGwtcGMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGRmbGFncy5wYXRjaCBcCisJICAiCitTUkNfVVJJW21kNXN1bV0gPSAiNWRiMGQ0M2E5MDIyYTZlYmJiYzI1MzM3YWUyODk0MmYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTFhNjE1MjI1YmFhNWY4YmI2ODY4MjQ0MjNmNTBlNDQyN2FjZDNmNzBkMzk0NzY1YmRmZjMyODAxZjBmZDViMCIKKworUyA9ICIke1dPUktESVJ9L3V1aWQtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1kY2UgLS13aXRob3V0LWN4eCAtLXdpdGhvdXQtcGVybCAtLXdpdGhvdXQtcGVybC1jb21wYXQgLS13aXRob3V0LXBocCAtLXdpdGhvdXQtcGdzcWwiCitFWFRSQV9PRUNPTkYgPSAiLS1pbmNsdWRlZGlyPSR7aW5jbHVkZWRpcn0vb3NzcCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICMgVGhpcyBwYWNrYWdlIGhhcyBhIGNvbXBsZXRlbHkgY3VzdG9tIGFjbG9jYWwubTQsIHdoaWNoIHNob3VsZCBiZSBhY2luY2x1ZGUubTQuCisgIGlmIFsgISAtZSAke1N9L2FjaW5jbHVkZS5tNCBdOyB0aGVuCisgICAgbXYgJHtTfS9hY2xvY2FsLm00ICR7U30vYWNpbmNsdWRlLm00CisgIGZpCisKKyAgcm0gLWYgJHtTfS9saWJ0b29sLm00Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICBta2RpciAtcCAgJHtEfSR7aW5jbHVkZWRpcn0vb3NzcAorICBtdiAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy91dWlkLnBjICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL29zc3AtdXVpZC5wYworfQorCitQQUNLQUdFUyA9KyAidXVpZCIKK0ZJTEVTX3V1aWQgPSAiJHtiaW5kaXJ9L3V1aWQiCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGlib3NzcC11dWlkLnNvLjE2KiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L3V1aWQtY29uZmlnIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK0FMVEVSTkFUSVZFXyR7UE59LWRvYyA9ICJ1dWlkLjMiCitBTFRFUk5BVElWRV9QUklPUklUWV8ke1BOfS1kb2MgPSAiMjAwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3V1aWQuM10gPSAiJHttYW5kaXJ9L21hbjMvdXVpZC4zIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1kZXZpY2UtZGV2ZWwuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWRldmljZS1kZXZlbC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODMxODYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1kZXZpY2UtZGV2ZWwuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJQcm92aWRlcyBhIHNtYWxsIHNldCBvZiB0b29scyBmb3IgZGV2ZWxvcG1lbnQgb24gdGhlIGRldmljZSIKK0xJQ0VOU0UgPSAiTUlUIgorCitQUiA9ICJyMSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworUlBST1ZJREVTXyR7UE59ID0gInFlbXUtY29uZmlnIgorUlJFUExBQ0VTXyR7UE59ID0gInFlbXUtY29uZmlnIgorUkNPTkZMSUNUU18ke1BOfSA9ICJxZW11LWNvbmZpZyIKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgIGRpc3RjYy1jb25maWcgXAorICAgIG9wcm9maWxldWktc2VydmVyIFwKKyAgICBuZnMtZXhwb3J0LXJvb3QgXAorICAgIGJhc2ggXAorICAgICIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2guaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2guaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZmI4Y2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC5pbmMKQEAgLTAsMCArMSwxNCBAQAorU1VNTUFSWSA9ICJUb29sIGZvciBhcHBseWluZyBhIHBhdGNoIGZpbGUiCitERVNDUklQVElPTiA9ICJwYXRjaCB0YWtlcyBhIHBhdGNoIGZpbGUgY29udGFpbmluZyBhIGRpZmZlcmVuY2UgbGlzdGluZyBcCitwcm9kdWNlZCBieSB0aGUgZGlmZiBwcm9ncmFtIGFuZCBhcHBsaWVzIHRob3NlIGRpZmZlcmVuY2VzIHRvIG9uZSBvciBtb3JlIFwKK29yaWdpbmFsIGZpbGVzLCBwcm9kdWNpbmcgcGF0Y2hlZCB2ZXJzaW9ucy4iCitTRUNUSU9OID0gInV0aWxzIgorSE9NRVBBR0UgPSAiaHR0cDovL3NhdmFubmFoLmdudS5vcmcvcHJvamVjdHMvcGF0Y2gvIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vcGF0Y2gvcGF0Y2gtJHtQVn0udGFyLmd6IgorUyA9ICIke1dPUktESVJ9L3BhdGNoLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gInBhdGNoIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExYTRiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL2dudWxpYi5tayBiL2xpYi9nbnVsaWIubWsKK2luZGV4IGUxZDc0ZGIuLmMwZTkyZGQgMTAwNjQ0CistLS0gYS9saWIvZ251bGliLm1rCisrKysgYi9saWIvZ251bGliLm1rCitAQCAtMTg4Miw3ICsxODgyLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvZGViaWFuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvZGViaWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMDc2NDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC9kZWJpYW4ucGF0Y2gKQEAgLTAsMCArMSwxMDQyNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkZWJpYW4gcGF0Y2hdCisKKy0tLSBwYXRjaC0yLjUuOS5vcmlnL200L2hhc2gubTQKKysrKyBwYXRjaC0yLjUuOS9tNC9oYXNoLm00CitAQCAtMCwwICsxLDE1IEBACisrIyBoYXNoLm00IHNlcmlhbCAxCisrZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK0FDX0RFRlVOKFtnbF9IQVNIXSwKKytbCisrICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvaGFzaC5jLgorKyAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHN0ZGxpYi5oKQorKyAgQUNfSEVBREVSX1NUREJPT0wKKysgIEFDX0NIRUNLX0RFQ0xTX09OQ0UoZnJlZSBtYWxsb2MpCisrXSkKKy0tLSBwYXRjaC0yLjUuOS5vcmlnL200L25hbm9zZWNvbmRfc3RhdC5tNAorKysrIHBhdGNoLTIuNS45L200L25hbm9zZWNvbmRfc3RhdC5tNAorQEAgLTAsMCArMSwzNSBAQAorK0FDX0RFRlVOKFthZ19DSEVDS19OQU5PU0VDT05EX1NUQVRdLAorKyAgW0FDX0NBQ0hFX0NIRUNLKFtmb3IgbmFub3NlY29uZCB0aW1lc3RhbXBzIGluIHN0cnVjdCBzdGF0XSwKKysgICAgIFthY19jdl9zdGF0X25zZWNdLAorKyAgICAgW0FDX1RSWV9DT01QSUxFKAorKwlbCisrCSAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKwkgICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKwkgICNpbmNsdWRlIDx1bmlzdGQuaD4KKysJICBzdHJ1Y3Qgc3RhdCBzdDsKKysJXSwKKysJWyByZXR1cm4gc3Quc3RfYXRpbWVuc2VjICsgc3Quc3RfbXRpbWVuc2VjICsgc3Quc3RfY3RpbWVuc2VjOyBdLAorKwlbYWNfY3Zfc3RhdF9uc2VjPXllc10sCisrCVthY19jdl9zdGF0X25zZWM9bm9dKQorKyAgICAgXSkKKysgICBpZiB0ZXN0ICRhY19jdl9zdGF0X25zZWMgPSB5ZXM7IHRoZW4KKysgICAgIEFDX0RFRklORShIQVZFX1NUQVRfTlNFQywgMSwgW0RlZmluZSB0byAxIGlmIHN0cnVjdCBzdGF0IGhhcyBuYW5vc2Vjb25kIHRpbWVzdGFtcHMuXSkKKysgICBmaQorKworKyAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbmFub3NlY29uZCB0aW1lc3RhbXBzIGluIHN0cnVjdCBzdGF0XSwKKysgICAgIFthY19jdl9zdGF0X3RpbWV2YWxdLAorKyAgICAgW0FDX1RSWV9DT01QSUxFKAorKwlbCisrCSAgI2luY2x1ZGUgPHRpbWUuaD4KKysJICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCSAgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrCSAgI2luY2x1ZGUgPHVuaXN0ZC5oPgorKwkgIHN0cnVjdCBzdGF0IHN0OworKwldLAorKwlbIHJldHVybiBzdC5zdF9hdGltLnR2X25zZWMgKyBzdC5zdF9tdGltLnR2X25zZWMgKyBzdC5zdF9jdGltLnR2X25zZWM7IF0sCisrCVthY19jdl9zdGF0X3RpbWV2YWw9eWVzXSwKKysJW2FjX2N2X3N0YXRfdGltZXZhbD1ub10pCisrICAgICBdKQorKyAgIGlmIHRlc3QgJGFjX2N2X3N0YXRfdGltZXZhbCA9IHllczsgdGhlbgorKyAgICAgQUNfREVGSU5FKEhBVkVfU1RBVF9USU1FVkFMLCAxLCBbRGVmaW5lIHRvIDEgaWYgc3RydWN0IHN0YXQgY29tdGFpbnMgc3RydWN0IHRpbWV2YWwncy5dKQorKyAgIGZpXSkKKy0tLSBwYXRjaC0yLjUuOS5vcmlnL01ha2VmaWxlLmluCisrKysgcGF0Y2gtMi41LjkvTWFrZWZpbGUuaW4KK0BAIC02Miw3ICs2Miw3IEBACisgU0hFTEwgPSAvYmluL3NoCisgCisgTElCU1JDUyA9IGVycm9yLmMgbWFsbG9jLmMgbWVtY2hyLmMgbWtkaXIuYyBcCistCXJlYWxsb2MuYyBybWRpci5jIHN0cmNhc2VjbXAuYyBzdHJuY2FzZWNtcC5jCisrCXJlYWxsb2MuYyBybWRpci5jIHN0cmNhc2VjbXAuYyBzdHJuY2FzZWNtcC5jIGhhc2guYworIFNSQ1MgPSAkKExJQlNSQ1MpIFwKKyAJYWRkZXh0LmMgYXJnbWF0Y2guYyBiYWNrdXBmaWxlLmMgXAorIAliYXNlbmFtZS5jIGRpcm5hbWUuYyBcCitAQCAtNzgsMTIgKzc4LDEyIEBACisgCW1ha2V0aW1lLiQoT0JKRVhUKSBwYXJ0aW1lLiQoT0JKRVhUKSBcCisgCXBhdGNoLiQoT0JKRVhUKSBwY2guJChPQkpFWFQpIFwKKyAJcXVvdGUuJChPQkpFWFQpIHF1b3RlYXJnLiQoT0JKRVhUKSBxdW90ZXN5cy4kKE9CSkVYVCkgXAorLQl1dGlsLiQoT0JKRVhUKSB2ZXJzaW9uLiQoT0JKRVhUKSB4bWFsbG9jLiQoT0JKRVhUKQorKwl1dGlsLiQoT0JKRVhUKSB2ZXJzaW9uLiQoT0JKRVhUKSB4bWFsbG9jLiQoT0JKRVhUKSBoYXNoLiQoT0JKRVhUKQorIEhEUlMgPSBhcmdtYXRjaC5oIGJhY2t1cGZpbGUuaCBjb21tb24uaCBkaXJuYW1lLmggXAorIAllcnJvci5oIGdldG9wdC5oIGdldHRleHQuaCBcCisgCWlucC5oIG1ha2V0aW1lLmggcGFydGltZS5oIHBjaC5oIFwKKyAJcXVvdGUuaCBxdW90ZWFyZy5oIHF1b3Rlc3lzLmggXAorLQl1bmxvY2tlZC1pby5oIHV0aWwuaCB2ZXJzaW9uLmggeGFsbG9jLmgKKysJdW5sb2NrZWQtaW8uaCB1dGlsLmggdmVyc2lvbi5oIHhhbGxvYy5oIGhhc2guaAorIE1JU0MgPSBBVVRIT1JTIENPUFlJTkcgQ2hhbmdlTG9nIElOU1RBTEwgTWFrZWZpbGUuaW4gTkVXUyBSRUFETUUgXAorIAlhY2xvY2FsLm00IFwKKyAJY29uZmlnLmhpbiBjb25maWd1cmUgY29uZmlndXJlLmFjIFwKKy0tLSBwYXRjaC0yLjUuOS5vcmlnL2FjbG9jYWwubTQKKysrKyBwYXRjaC0yLjUuOS9hY2xvY2FsLm00CitAQCAtMSwzICsxLDEwNTggQEAKKytkbmwgYWNsb2NhbC5tNCBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBhY2xvY2FsIDEuNC1wNgorKworK2RubCBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUtOCwgMTk5OSwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKytkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKytkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorKworK2RubCBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKytkbmwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKytkbmwgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorK2RubCBQQVJUSUNVTEFSIFBVUlBPU0UuCisrCisrIyBsaWItcHJlZml4Lm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTMpCisrZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK2RubCBBQ19MSUJfQVJHX1dJVEggaXMgc3lub255bW91cyB0byBBQ19BUkdfV0lUSCBpbiBhdXRvY29uZi0yLjEzLCBhbmQKKytkbmwgc2ltaWxhciB0byBBQ19BUkdfV0lUSCBpbiBhdXRvY29uZiAyLjUyLi4uMi41NyBleGNlcHQgdGhhdCBpcyBkb2Vzbid0CisrZG5sIHJlcXVpcmUgZXhjZXNzaXZlIGJyYWNrZXRpbmcuCisraWZkZWYoW0FDX0hFTFBfU1RSSU5HXSwKKytbQUNfREVGVU4oW0FDX0xJQl9BUkdfV0lUSF0sIFtBQ19BUkdfV0lUSChbJDFdLFtbJDJdXSxbJDNdLFskNF0pXSldLAorK1tBQ19ERUZVTihbQUNfXVtMSUJfQVJHX1dJVEhdLCBbQUNfQVJHX1dJVEgoWyQxXSxbJDJdLFskM10sWyQ0XSldKV0pCisrCisrZG5sIEFDX0xJQl9QUkVGSVggYWRkcyB0byB0aGUgQ1BQRkxBR1MgYW5kIExERkxBR1MgdGhlIGZsYWdzIHRoYXQgYXJlIG5lZWRlZAorK2RubCB0byBhY2Nlc3MgcHJldmlvdXNseSBpbnN0YWxsZWQgbGlicmFyaWVzLiBUaGUgYmFzaWMgYXNzdW1wdGlvbiBpcyB0aGF0CisrZG5sIGEgdXNlciB3aWxsIHdhbnQgcGFja2FnZXMgdG8gdXNlIG90aGVyIHBhY2thZ2VzIGhlIHByZXZpb3VzbHkgaW5zdGFsbGVkCisrZG5sIHdpdGggdGhlIHNhbWUgLS1wcmVmaXggb3B0aW9uLgorK2RubCBUaGlzIG1hY3JvIGlzIG5vdCBuZWVkZWQgaWYgb25seSBBQ19MSUJfTElOS0ZMQUdTIGlzIHVzZWQgdG8gbG9jYXRlCisrZG5sIGxpYnJhcmllcywgYnV0IGlzIG90aGVyd2lzZSB2ZXJ5IGNvbnZlbmllbnQuCisrQUNfREVGVU4oW0FDX0xJQl9QUkVGSVhdLAorK1sKKysgIEFDX0JFRk9SRShbJDBdLCBbQUNfTElCX0xJTktGTEFHU10pCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKysgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCisrICBkbmwgQnkgZGVmYXVsdCwgbG9vayBpbiAkaW5jbHVkZWRpciBhbmQgJGxpYmRpci4KKysgIHVzZV9hZGRpdGlvbmFsPXllcworKyAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKysgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisrICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKysgIF0pCisrICBBQ19MSUJfQVJHX1dJVEgoW2xpYi1wcmVmaXhdLAorK1sgIC0td2l0aC1saWItcHJlZml4Wz1ESVJdIHNlYXJjaCBmb3IgbGlicmFyaWVzIGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCisrICAtLXdpdGhvdXQtbGliLXByZWZpeCAgICBkb24ndCBzZWFyY2ggZm9yIGxpYnJhcmllcyBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXJdLAorK1sKKysgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYbm8iOyB0aGVuCisrICAgICAgdXNlX2FkZGl0aW9uYWw9bm8KKysgICAgZWxzZQorKyAgICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWCI7IHRoZW4KKysgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisrICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorKyAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisrICAgICAgICBdKQorKyAgICAgIGVsc2UKKysgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJHdpdGh2YWwvaW5jbHVkZSIKKysgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPSIkd2l0aHZhbC9saWIiCisrICAgICAgZmkKKysgICAgZmkKKytdKQorKyAgaWYgdGVzdCAkdXNlX2FkZGl0aW9uYWwgPSB5ZXM7IHRoZW4KKysgICAgZG5sIFBvdGVudGlhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRDUFBGTEFHUy4KKysgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKysgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9pbmNsdWRlLAorKyAgICBkbmwgICAyLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkQ1BQRkxBR1MsCisrICAgIGRubCAgIDMuIGlmIGl0J3MgL3Vzci9sb2NhbC9pbmNsdWRlIGFuZCB3ZSBhcmUgdXNpbmcgR0NDIG9uIExpbnV4LAorKyAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorKyAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgvdXNyL2luY2x1ZGUiOyB0aGVuCisrICAgICAgaGF2ZWl0PQorKyAgICAgIGZvciB4IGluICRDUFBGTEFHUzsgZG8KKysgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisrICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgYnJlYWsKKysgICAgICAgIGZpCisrICAgICAgZG9uZQorKyAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgPSAiWC91c3IvbG9jYWwvaW5jbHVkZSI7IHRoZW4KKysgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKysgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisrICAgICAgICAgICAgICBsaW51eCopIGhhdmVpdD15ZXM7OworKyAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorKyAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2luY2x1ZGVkaXIgdG8gJENQUEZMQUdTLgorKyAgICAgICAgICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSR7Q1BQRkxBR1M6KyB9LUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIgorKyAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICBmaQorKyAgICBkbmwgUG90ZW50aWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTERGTEFHUy4KKysgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKysgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9saWIsCisrICAgIGRubCAgIDIuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRMREZMQUdTLAorKyAgICBkbmwgICAzLiBpZiBpdCdzIC91c3IvbG9jYWwvbGliIGFuZCB3ZSBhcmUgdXNpbmcgR0NDIG9uIExpbnV4LAorKyAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorKyAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvbGliIjsgdGhlbgorKyAgICAgIGhhdmVpdD0KKysgICAgICBmb3IgeCBpbiAkTERGTEFHUzsgZG8KKysgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKysgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICBicmVhaworKyAgICAgICAgZmkKKysgICAgICBkb25lCisrICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiID0gIlgvdXNyL2xvY2FsL2xpYiI7IHRoZW4KKysgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKysgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisrICAgICAgICAgICAgICBsaW51eCopIGhhdmVpdD15ZXM7OworKyAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisrICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMREZMQUdTLgorKyAgICAgICAgICAgIExERkxBR1M9IiR7TERGTEFHU30ke0xERkxBR1M6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisrICAgICAgICAgIGZpCisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgIGZpCisrICBmaQorK10pCisrCisrZG5sIEFDX0xJQl9QUkVQQVJFX1BSRUZJWCBjcmVhdGVzIHZhcmlhYmxlcyBhY2xfZmluYWxfcHJlZml4LAorK2RubCBhY2xfZmluYWxfZXhlY19wcmVmaXgsIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyB0byB3aGljaCAkcHJlZml4IGFuZAorK2RubCAkZXhlY19wcmVmaXggd2lsbCBleHBhbmQgYXQgdGhlIGVuZCBvZiB0aGUgY29uZmlndXJlIHNjcmlwdC4KKytBQ19ERUZVTihbQUNfTElCX1BSRVBBUkVfUFJFRklYXSwKKytbCisrICBkbmwgVW5mb3J0dW5hdGVseSwgcHJlZml4IGFuZCBleGVjX3ByZWZpeCBnZXQgb25seSBmaW5hbGx5IGRldGVybWluZWQKKysgIGRubCBhdCB0aGUgZW5kIG9mIGNvbmZpZ3VyZS4KKysgIGlmIHRlc3QgIlgkcHJlZml4IiA9ICJYTk9ORSI7IHRoZW4KKysgICAgYWNsX2ZpbmFsX3ByZWZpeD0iJGFjX2RlZmF1bHRfcHJlZml4IgorKyAgZWxzZQorKyAgICBhY2xfZmluYWxfcHJlZml4PSIkcHJlZml4IgorKyAgZmkKKysgIGlmIHRlc3QgIlgkZXhlY19wcmVmaXgiID0gIlhOT05FIjsgdGhlbgorKyAgICBhY2xfZmluYWxfZXhlY19wcmVmaXg9JyR7cHJlZml4fScKKysgIGVsc2UKKysgICAgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisrICBmaQorKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKysgIGV2YWwgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PVwiJGFjbF9maW5hbF9leGVjX3ByZWZpeFwiCisrICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisrXSkKKysKKytkbmwgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtzdGF0ZW1lbnRdKSBldmFsdWF0ZXMgc3RhdGVtZW50LCB3aXRoIHRoZQorK2RubCB2YXJpYWJsZXMgcHJlZml4IGFuZCBleGVjX3ByZWZpeCBib3VuZCB0byB0aGUgdmFsdWVzIHRoZXkgd2lsbCBoYXZlCisrZG5sIGF0IHRoZSBlbmQgb2YgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisrQUNfREVGVU4oW0FDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWF0sCisrWworKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKysgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisrICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKysgICQxCisrICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorK10pCisrCisrIyBsaWItbGluay5tNCBzZXJpYWwgNCAoZ2V0dGV4dC0wLjEyKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytkbmwgQUNfTElCX0xJTktGTEFHUyhuYW1lIFssIGRlcGVuZGVuY2llc10pIHNlYXJjaGVzIGZvciBsaWJuYW1lIGFuZAorK2RubCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kIGltcGxpY2l0IGRlcGVuZGVuY2llcy4KKytkbmwgU2V0cyBhbmQgQUNfU1VCU1RzIHRoZSBMSUIke05BTUV9IGFuZCBMVExJQiR7TkFNRX0gdmFyaWFibGVzIGFuZAorK2RubCBhdWdtZW50cyB0aGUgQ1BQRkxBR1MgdmFyaWFibGUuCisrQUNfREVGVU4oW0FDX0xJQl9MSU5LRkxBR1NdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQorKyAgZGVmaW5lKFtOYW1lXSxbdHJhbnNsaXQoWyQxXSxbLi8tXSwgW19fX10pXSkKKysgIGRlZmluZShbTkFNRV0sW3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSldKQorKyAgQUNfQ0FDSEVfQ0hFQ0soW2hvdyB0byBsaW5rIHdpdGggbGliW10kMV0sIFthY19jdl9saWJbXU5hbWVbXV9saWJzXSwgWworKyAgICBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoWyQxXSwgWyQyXSkKKysgICAgYWNfY3ZfbGliW11OYW1lW11fbGlicz0iJExJQltdTkFNRSIKKysgICAgYWNfY3ZfbGliW11OYW1lW11fbHRsaWJzPSIkTFRMSUJbXU5BTUUiCisrICAgIGFjX2N2X2xpYltdTmFtZVtdX2NwcGZsYWdzPSIkSU5DW11OQU1FIgorKyAgXSkKKysgIExJQltdTkFNRT0iJGFjX2N2X2xpYltdTmFtZVtdX2xpYnMiCisrICBMVExJQltdTkFNRT0iJGFjX2N2X2xpYltdTmFtZVtdX2x0bGlicyIKKysgIElOQ1tdTkFNRT0iJGFjX2N2X2xpYltdTmFtZVtdX2NwcGZsYWdzIgorKyAgQUNfTElCX0FQUEVORFRPVkFSKFtDUFBGTEFHU10sIFskSU5DXU5BTUUpCisrICBBQ19TVUJTVChbTElCXU5BTUUpCisrICBBQ19TVUJTVChbTFRMSUJdTkFNRSkKKysgIGRubCBBbHNvIHNldCBIQVZFX0xJQltdTkFNRSBzbyB0aGF0IEFDX0xJQl9IQVZFX0xJTktGTEFHUyBjYW4gcmV1c2UgdGhlCisrICBkbmwgcmVzdWx0cyBvZiB0aGlzIHNlYXJjaCB3aGVuIHRoaXMgbGlicmFyeSBhcHBlYXJzIGFzIGEgZGVwZW5kZW5jeS4KKysgIEhBVkVfTElCW11OQU1FPXllcworKyAgdW5kZWZpbmUoW05hbWVdKQorKyAgdW5kZWZpbmUoW05BTUVdKQorK10pCisrCisrZG5sIEFDX0xJQl9IQVZFX0xJTktGTEFHUyhuYW1lLCBkZXBlbmRlbmNpZXMsIGluY2x1ZGVzLCB0ZXN0Y29kZSkKKytkbmwgc2VhcmNoZXMgZm9yIGxpYm5hbWUgYW5kIHRoZSBsaWJyYXJpZXMgY29ycmVzcG9uZGluZyB0byBleHBsaWNpdCBhbmQKKytkbmwgaW1wbGljaXQgZGVwZW5kZW5jaWVzLCB0b2dldGhlciB3aXRoIHRoZSBzcGVjaWZpZWQgaW5jbHVkZSBmaWxlcyBhbmQKKytkbmwgdGhlIGFiaWxpdHkgdG8gY29tcGlsZSBhbmQgbGluayB0aGUgc3BlY2lmaWVkIHRlc3Rjb2RlLiBJZiBmb3VuZCwgaXQKKytkbmwgc2V0cyBhbmQgQUNfU1VCU1RzIEhBVkVfTElCJHtOQU1FfT15ZXMgYW5kIHRoZSBMSUIke05BTUV9IGFuZAorK2RubCBMVExJQiR7TkFNRX0gdmFyaWFibGVzIGFuZCBhdWdtZW50cyB0aGUgQ1BQRkxBR1MgdmFyaWFibGUsIGFuZAorK2RubCAjZGVmaW5lcyBIQVZFX0xJQiR7TkFNRX0gdG8gMS4gT3RoZXJ3aXNlLCBpdCBzZXRzIGFuZCBBQ19TVUJTVHMKKytkbmwgSEFWRV9MSUIke05BTUV9PW5vIGFuZCBMSUIke05BTUV9IGFuZCBMVExJQiR7TkFNRX0gdG8gZW1wdHkuCisrQUNfREVGVU4oW0FDX0xJQl9IQVZFX0xJTktGTEFHU10sCisrWworKyAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCisrICBkZWZpbmUoW05hbWVdLFt0cmFuc2xpdChbJDFdLFsuLy1dLCBbX19fXSldKQorKyAgZGVmaW5lKFtOQU1FXSxbdHJhbnNsaXQoWyQxXSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCisrCisrICBkbmwgU2VhcmNoIGZvciBsaWJbXU5hbWUgYW5kIGRlZmluZSBMSUJbXU5BTUUsIExUTElCW11OQU1FIGFuZCBJTkNbXU5BTUUKKysgIGRubCBhY2NvcmRpbmdseS4KKysgIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShbJDFdLCBbJDJdKQorKworKyAgZG5sIEFkZCAkSU5DW11OQU1FIHRvIENQUEZMQUdTIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBmb2xsb3dpbmcgY2hlY2tzLAorKyAgZG5sIGJlY2F1c2UgaWYgdGhlIHVzZXIgaGFzIGluc3RhbGxlZCBsaWJbXU5hbWUgYW5kIG5vdCBkaXNhYmxlZCBpdHMgdXNlCisrICBkbmwgdmlhIC0td2l0aG91dC1saWJbXU5hbWUtcHJlZml4LCBoZSB3YW50cyB0byB1c2UgaXQuCisrICBhY19zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisrICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNdTkFNRSkKKysKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbGliW10kMV0sIFthY19jdl9saWJbXU5hbWVdLCBbCisrICAgIGFjX3NhdmVfTElCUz0iJExJQlMiCisrICAgIExJQlM9IiRMSUJTICRMSUJbXU5BTUUiCisrICAgIEFDX1RSWV9MSU5LKFskM10sIFskNF0sIFthY19jdl9saWJbXU5hbWU9eWVzXSwgW2FjX2N2X2xpYltdTmFtZT1ub10pCisrICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCisrICBdKQorKyAgaWYgdGVzdCAiJGFjX2N2X2xpYltdTmFtZSIgPSB5ZXM7IHRoZW4KKysgICAgSEFWRV9MSUJbXU5BTUU9eWVzCisrICAgIEFDX0RFRklORShbSEFWRV9MSUJdTkFNRSwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJDEgbGlicmFyeS5dKQorKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBsaW5rIHdpdGggbGliW10kMV0pCisrICAgIEFDX01TR19SRVNVTFQoWyRMSUJbXU5BTUVdKQorKyAgZWxzZQorKyAgICBIQVZFX0xJQltdTkFNRT1ubworKyAgICBkbmwgSWYgJExJQltdTkFNRSBkaWRuJ3QgbGVhZCB0byBhIHVzYWJsZSBsaWJyYXJ5LCB3ZSBkb24ndCBuZWVkCisrICAgIGRubCAkSU5DW11OQU1FIGVpdGhlci4KKysgICAgQ1BQRkxBR1M9IiRhY19zYXZlX0NQUEZMQUdTIgorKyAgICBMSUJbXU5BTUU9CisrICAgIExUTElCW11OQU1FPQorKyAgZmkKKysgIEFDX1NVQlNUKFtIQVZFX0xJQl1OQU1FKQorKyAgQUNfU1VCU1QoW0xJQl1OQU1FKQorKyAgQUNfU1VCU1QoW0xUTElCXU5BTUUpCisrICB1bmRlZmluZShbTmFtZV0pCisrICB1bmRlZmluZShbTkFNRV0pCisrXSkKKysKKytkbmwgRGV0ZXJtaW5lIHRoZSBwbGF0Zm9ybSBkZXBlbmRlbnQgcGFyYW1ldGVycyBuZWVkZWQgdG8gdXNlIHJwYXRoOgorK2RubCBsaWJleHQsIHNobGliZXh0LCBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLAorK2RubCBoYXJkY29kZV9kaXJlY3QsIGhhcmRjb2RlX21pbnVzX0wuCisrQUNfREVGVU4oW0FDX0xJQl9SUEFUSF0sCisrWworKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pICAgICAgICAgICAgICAgIGRubCB3ZSB1c2UgJENDLCAkR0NDLCAkTERGTEFHUworKyAgQUNfUkVRVUlSRShbQUNfTElCX1BST0dfTERdKSAgICAgICAgICAgIGRubCB3ZSB1c2UgJExELCAkd2l0aF9nbnVfbGQKKysgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkgICAgICAgICBkbmwgd2UgdXNlICRob3N0CisrICBBQ19SRVFVSVJFKFtBQ19DT05GSUdfQVVYX0RJUl9ERUZBVUxUXSkgZG5sIHdlIHVzZSAkYWNfYXV4X2RpcgorKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzaGFyZWQgbGlicmFyeSBydW4gcGF0aCBvcmlnaW5dLCBhY2xfY3ZfcnBhdGgsIFsKKysgICAgQ0M9IiRDQyIgR0NDPSIkR0NDIiBMREZMQUdTPSIkTERGTEFHUyIgTEQ9IiRMRCIgd2l0aF9nbnVfbGQ9IiR3aXRoX2dudV9sZCIgXAorKyAgICAke0NPTkZJR19TSEVMTC0vYmluL3NofSAiJGFjX2F1eF9kaXIvY29uZmlnLnJwYXRoIiAiJGhvc3QiID4gY29uZnRlc3Quc2gKKysgICAgLiAuL2NvbmZ0ZXN0LnNoCisrICAgIHJtIC1mIC4vY29uZnRlc3Quc2gKKysgICAgYWNsX2N2X3JwYXRoPWRvbmUKKysgIF0pCisrICB3bD0iJGFjbF9jdl93bCIKKysgIGxpYmV4dD0iJGFjbF9jdl9saWJleHQiCisrICBzaGxpYmV4dD0iJGFjbF9jdl9zaGxpYmV4dCIKKysgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIKKysgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKKysgIGhhcmRjb2RlX2RpcmVjdD0iJGFjbF9jdl9oYXJkY29kZV9kaXJlY3QiCisrICBoYXJkY29kZV9taW51c19MPSIkYWNsX2N2X2hhcmRjb2RlX21pbnVzX0wiCisrICBkbmwgRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHVzZXIgd2FudHMgcnBhdGggaGFuZGxpbmcgYXQgYWxsLgorKyAgQUNfQVJHX0VOQUJMRShycGF0aCwKKysgICAgWyAgLS1kaXNhYmxlLXJwYXRoICAgICAgICAgZG8gbm90IGhhcmRjb2RlIHJ1bnRpbWUgbGlicmFyeSBwYXRoc10sCisrICAgIDosIGVuYWJsZV9ycGF0aD15ZXMpCisrXSkKKysKKytkbmwgQUNfTElCX0xJTktGTEFHU19CT0RZKG5hbWUgWywgZGVwZW5kZW5jaWVzXSkgc2VhcmNoZXMgZm9yIGxpYm5hbWUgYW5kCisrZG5sIHRoZSBsaWJyYXJpZXMgY29ycmVzcG9uZGluZyB0byBleHBsaWNpdCBhbmQgaW1wbGljaXQgZGVwZW5kZW5jaWVzLgorK2RubCBTZXRzIHRoZSBMSUIke05BTUV9LCBMVExJQiR7TkFNRX0gYW5kIElOQyR7TkFNRX0gdmFyaWFibGVzLgorK0FDX0RFRlVOKFtBQ19MSUJfTElOS0ZMQUdTX0JPRFldLAorK1sKKysgIGRlZmluZShbTkFNRV0sW3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSldKQorKyAgZG5sIEJ5IGRlZmF1bHQsIGxvb2sgaW4gJGluY2x1ZGVkaXIgYW5kICRsaWJkaXIuCisrICB1c2VfYWRkaXRpb25hbD15ZXMKKysgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisrICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorKyAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisrICBdKQorKyAgQUNfTElCX0FSR19XSVRIKFtsaWIkMS1wcmVmaXhdLAorK1sgIC0td2l0aC1saWIkMS1wcmVmaXhbPURJUl0gIHNlYXJjaCBmb3IgbGliJDEgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKKysgIC0td2l0aG91dC1saWIkMS1wcmVmaXggICAgIGRvbid0IHNlYXJjaCBmb3IgbGliJDEgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyXSwKKytbCisrICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgorKyAgICAgIHVzZV9hZGRpdGlvbmFsPW5vCisrICAgIGVsc2UKKysgICAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlgiOyB0aGVuCisrICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworKyAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKysgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorKyAgICAgICAgXSkKKysgICAgICBlbHNlCisrICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiR3aXRodmFsL2luY2x1ZGUiCisrICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvbGliIgorKyAgICAgIGZpCisrICAgIGZpCisrXSkKKysgIGRubCBTZWFyY2ggdGhlIGxpYnJhcnkgYW5kIGl0cyBkZXBlbmRlbmNpZXMgaW4gJGFkZGl0aW9uYWxfbGliZGlyIGFuZAorKyAgZG5sICRMREZMQUdTLiBVc2luZyBicmVhZHRoLWZpcnN0LXNlYWNoLgorKyAgTElCW11OQU1FPQorKyAgTFRMSUJbXU5BTUU9CisrICBJTkNbXU5BTUU9CisrICBycGF0aGRpcnM9CisrICBsdHJwYXRoZGlycz0KKysgIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0KKysgIG5hbWVzX25leHRfcm91bmQ9JyQxICQyJworKyAgd2hpbGUgdGVzdCAtbiAiJG5hbWVzX25leHRfcm91bmQiOyBkbworKyAgICBuYW1lc190aGlzX3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCIKKysgICAgbmFtZXNfbmV4dF9yb3VuZD0KKysgICAgZm9yIG5hbWUgaW4gJG5hbWVzX3RoaXNfcm91bmQ7IGRvCisrICAgICAgYWxyZWFkeV9oYW5kbGVkPQorKyAgICAgIGZvciBuIGluICRuYW1lc19hbHJlYWR5X2hhbmRsZWQ7IGRvCisrICAgICAgICBpZiB0ZXN0ICIkbiIgPSAiJG5hbWUiOyB0aGVuCisrICAgICAgICAgIGFscmVhZHlfaGFuZGxlZD15ZXMKKysgICAgICAgICAgYnJlYWsKKysgICAgICAgIGZpCisrICAgICAgZG9uZQorKyAgICAgIGlmIHRlc3QgLXogIiRhbHJlYWR5X2hhbmRsZWQiOyB0aGVuCisrICAgICAgICBuYW1lc19hbHJlYWR5X2hhbmRsZWQ9IiRuYW1lc19hbHJlYWR5X2hhbmRsZWQgJG5hbWUiCisrICAgICAgICBkbmwgU2VlIGlmIGl0IHdhcyBhbHJlYWR5IGxvY2F0ZWQgYnkgYW4gZWFybGllciBBQ19MSUJfTElOS0ZMQUdTCisrICAgICAgICBkbmwgb3IgQUNfTElCX0hBVkVfTElOS0ZMQUdTIGNhbGwuCisrICAgICAgICB1cHBlcm5hbWU9YGVjaG8gIiRuYW1lIiB8IHNlZCAtZSAneXxhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLXxBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX3wnYAorKyAgICAgICAgZXZhbCB2YWx1ZT1cIlwkSEFWRV9MSUIkdXBwZXJuYW1lXCIKKysgICAgICAgIGlmIHRlc3QgLW4gIiR2YWx1ZSI7IHRoZW4KKysgICAgICAgICAgaWYgdGVzdCAiJHZhbHVlIiA9IHllczsgdGhlbgorKyAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExJQiR1cHBlcm5hbWVcIgorKyAgICAgICAgICAgIHRlc3QgLXogIiR2YWx1ZSIgfHwgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kdmFsdWUiCisrICAgICAgICAgICAgZXZhbCB2YWx1ZT1cIlwkTFRMSUIkdXBwZXJuYW1lXCIKKysgICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9JHZhbHVlIgorKyAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgZG5sIEFuIGVhcmxpZXIgY2FsbCB0byBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgaGFzIGRldGVybWluZWQKKysgICAgICAgICAgICBkbmwgdGhhdCB0aGlzIGxpYnJhcnkgZG9lc24ndCBleGlzdC4gU28ganVzdCBkcm9wIGl0LgorKyAgICAgICAgICAgIDoKKysgICAgICAgICAgZmkKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgZG5sIFNlYXJjaCB0aGUgbGlicmFyeSBsaWIkbmFtZSBpbiAkYWRkaXRpb25hbF9saWJkaXIgYW5kICRMREZMQUdTCisrICAgICAgICAgIGRubCBhbmQgdGhlIGFscmVhZHkgY29uc3RydWN0ZWQgJExJQk5BTUUvJExUTElCTkFNRS4KKysgICAgICAgICAgZm91bmRfZGlyPQorKyAgICAgICAgICBmb3VuZF9sYT0KKysgICAgICAgICAgZm91bmRfc289CisrICAgICAgICAgIGZvdW5kX2E9CisrICAgICAgICAgIGlmIHRlc3QgJHVzZV9hZGRpdGlvbmFsID0geWVzOyB0aGVuCisrICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHNobGliZXh0IiAmJiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJHNobGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgZm91bmRfZGlyPSIkYWRkaXRpb25hbF9saWJkaXIiCisrICAgICAgICAgICAgICBmb3VuZF9zbz0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCIKKysgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5sYSI7IHRoZW4KKysgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5sYSIKKysgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRsaWJleHQiOyB0aGVuCisrICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgorKyAgICAgICAgICAgICAgICBmb3VuZF9hPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJGxpYmV4dCIKKysgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiCisrICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgIGZpCisrICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgorKyAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQltdTkFNRTsgZG8KKysgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgICAgICAgICBjYXNlICIkeCIgaW4KKysgICAgICAgICAgICAgICAgLUwqKQorKyAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCR4IiB8IHNlZCAtZSAncy9eWC1MLy8nYAorKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYmV4dCIgJiYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS4kc2hsaWJleHQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisrICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci9saWIkbmFtZS4kc2hsaWJleHQiCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci9saWIkbmFtZS5sYSIKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS4kbGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRkaXIvbGliJG5hbWUuJGxpYmV4dCIKKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS5sYSI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci9saWIkbmFtZS5sYSIKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorKyAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBkb25lCisrICAgICAgICAgIGZpCisrICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKysgICAgICAgICAgICBkbmwgRm91bmQgdGhlIGxpYnJhcnkuCisrICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tTCRmb3VuZF9kaXIgLWwkbmFtZSIKKysgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX3NvIiAhPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgIGRubCBMaW5raW5nIHdpdGggYSBzaGFyZWQgbGlicmFyeS4gV2UgYXR0ZW1wdCB0byBoYXJkY29kZSBpdHMKKysgICAgICAgICAgICAgIGRubCBkaXJlY3RvcnkgaW50byB0aGUgZXhlY3V0YWJsZSdzIHJ1bnBhdGgsIHVubGVzcyBpdCdzIHRoZQorKyAgICAgICAgICAgICAgZG5sIHN0YW5kYXJkIC91c3IvbGliLgorKyAgICAgICAgICAgICAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgPSBubyB8fCB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWC91c3IvbGliIjsgdGhlbgorKyAgICAgICAgICAgICAgICBkbmwgTm8gaGFyZGNvZGluZyBpcyBuZWVkZWQuCisrICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorKyAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICBkbmwgVXNlIGFuIGV4cGxpY2l0IG9wdGlvbiB0byBoYXJkY29kZSBESVIgaW50byB0aGUgcmVzdWx0aW5nCisrICAgICAgICAgICAgICAgIGRubCBiaW5hcnkuCisrICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgRElSIHRvIGx0cnBhdGhkaXJzLgorKyAgICAgICAgICAgICAgICBkbmwgVGhlIGx0cnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExUTElCTkFNRSBhdCB0aGUgZW5kLgorKyAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgIGZvciB4IGluICRsdHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZm91bmRfZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgbHRycGF0aGRpcnM9IiRsdHJwYXRoZGlycyAkZm91bmRfZGlyIgorKyAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICBkbmwgVGhlIGhhcmRjb2RpbmcgaW50byAkTElCTkFNRSBpcyBzeXN0ZW0gZGVwZW5kZW50LgorKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IHllczsgdGhlbgorKyAgICAgICAgICAgICAgICAgIGRubCBVc2luZyBESVIvbGliTkFNRS5zbyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisrICAgICAgICAgICAgICAgICAgZG5sIHJlc3VsdGluZyBiaW5hcnkuCisrICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisrICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgJiYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGRubCBVc2UgYW4gZXhwbGljaXQgb3B0aW9uIHRvIGhhcmRjb2RlIERJUiBpbnRvIHRoZSByZXN1bHRpbmcKKysgICAgICAgICAgICAgICAgICAgIGRubCBiaW5hcnkuCisrICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKysgICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgRElSIHRvIHJwYXRoZGlycy4KKysgICAgICAgICAgICAgICAgICAgIGRubCBUaGUgcnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExJQk5BTUUgYXQgdGhlIGVuZC4KKysgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRycGF0aGRpcnM7IGRvCisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGZvdW5kX2RpciIKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgZG5sIFJlbHkgb24gIi1MJGZvdW5kX2RpciIuCisrICAgICAgICAgICAgICAgICAgICBkbmwgQnV0IGRvbid0IGFkZCBpdCBpZiBpdCdzIGFscmVhZHkgY29udGFpbmVkIGluIHRoZSBMREZMQUdTCisrICAgICAgICAgICAgICAgICAgICBkbmwgb3IgdGhlIGFscmVhZHkgY29uc3RydWN0ZWQgJExJQk5BTUUKKysgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJbXU5BTUU7IGRvCisrICAgICAgICAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGZvdW5kX2RpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LUwkZm91bmRfZGlyIgorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiAhPSBubzsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgRklYTUU6IE5vdCBzdXJlIHdoZXRoZXIgd2Ugc2hvdWxkIHVzZQorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgIi1MJGZvdW5kX2RpciAtbCRuYW1lIiBvciAiLUwkZm91bmRfZGlyICRmb3VuZF9zbyIKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIGhlcmUuCisrICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorKyAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgV2UgY2Fubm90IHVzZSAkaGFyZGNvZGVfcnVucGF0aF92YXIgYW5kIExEX1JVTl9QQVRICisrICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLCBiZWNhdXNlIHRoaXMgZG9lc24ndCBmaXQgaW4gZmxhZ3MgcGFzc2VkIHRvIHRoZQorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgY29tcGlsZXIuIFNvIGdpdmUgdXAuIE5vIGhhcmRjb2RpbmcuIFRoaXMgYWZmZWN0cyBvbmx5CisrICAgICAgICAgICAgICAgICAgICAgIGRubCB2ZXJ5IG9sZCBzeXN0ZW1zLgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgRklYTUU6IE5vdCBzdXJlIHdoZXRoZXIgd2Ugc2hvdWxkIHVzZQorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgIi1MJGZvdW5kX2RpciAtbCRuYW1lIiBvciAiLUwkZm91bmRfZGlyICRmb3VuZF9zbyIKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIGhlcmUuCisrICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LWwkbmFtZSIKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9hIiAhPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgICAgZG5sIExpbmtpbmcgd2l0aCBhIHN0YXRpYyBsaWJyYXJ5LgorKyAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9hIgorKyAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICBkbmwgV2Ugc2hvdWxkbid0IGNvbWUgaGVyZSwgYnV0IGFueXdheSBpdCdzIGdvb2QgdG8gaGF2ZSBhCisrICAgICAgICAgICAgICAgIGRubCBmYWxsYmFjay4KKysgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tTCRmb3VuZF9kaXIgLWwkbmFtZSIKKysgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBkbmwgQXNzdW1lIHRoZSBpbmNsdWRlIGZpbGVzIGFyZSBuZWFyYnkuCisrICAgICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPQorKyAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9kaXIiIGluCisrICAgICAgICAgICAgICAqL2xpYiB8ICovbGliLykKKysgICAgICAgICAgICAgICAgYmFzZWRpcj1gZWNobyAiWCRmb3VuZF9kaXIiIHwgc2VkIC1lICdzLF5YLCwnIC1lICdzLC9saWIvKiQsLCdgCisrICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJGJhc2VkaXIvaW5jbHVkZSIKKysgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYIjsgdGhlbgorKyAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRJTkNOQU1FLgorKyAgICAgICAgICAgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKysgICAgICAgICAgICAgIGRubCAgIDEuIGlmIGl0J3MgdGhlIHN0YW5kYXJkIC91c3IvaW5jbHVkZSwKKysgICAgICAgICAgICAgIGRubCAgIDIuIGlmIGl0J3MgL3Vzci9sb2NhbC9pbmNsdWRlIGFuZCB3ZSBhcmUgdXNpbmcgR0NDIG9uIExpbnV4LAorKyAgICAgICAgICAgICAgZG5sICAgMy4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJENQUEZMQUdTIG9yIHRoZSBhbHJlYWR5CisrICAgICAgICAgICAgICBkbmwgICAgICBjb25zdHJ1Y3RlZCAkSU5DTkFNRSwKKysgICAgICAgICAgICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisrICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgvdXNyL2luY2x1ZGUiOyB0aGVuCisrICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiID0gIlgvdXNyL2xvY2FsL2luY2x1ZGUiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKysgICAgICAgICAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKysgICAgICAgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgIGZvciB4IGluICRDUFBGTEFHUyAkSU5DW11OQU1FOyBkbworKyAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2luY2x1ZGVkaXIgdG8gJElOQ05BTUUuCisrICAgICAgICAgICAgICAgICAgICAgIElOQ1tdTkFNRT0iJHtJTkNbXU5BTUV9JHtJTkNbXU5BTUU6KyB9LUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIgorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGRubCBMb29rIGZvciBkZXBlbmRlbmNpZXMuCisrICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGZvdW5kX2xhIjsgdGhlbgorKyAgICAgICAgICAgICAgZG5sIFJlYWQgdGhlIC5sYSBmaWxlLiBJdCBkZWZpbmVzIHRoZSB2YXJpYWJsZXMKKysgICAgICAgICAgICAgIGRubCBkbG5hbWUsIGxpYnJhcnlfbmFtZXMsIG9sZF9saWJyYXJ5LCBkZXBlbmRlbmN5X2xpYnMsIGN1cnJlbnQsCisrICAgICAgICAgICAgICBkbmwgYWdlLCByZXZpc2lvbiwgaW5zdGFsbGVkLCBkbG9wZW4sIGRscHJlb3BlbiwgbGliZGlyLgorKyAgICAgICAgICAgICAgc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisrICAgICAgICAgICAgICBjYXNlICIkZm91bmRfbGEiIGluCisrICAgICAgICAgICAgICAgICovKiB8ICpcXCopIC4gIiRmb3VuZF9sYSIgOzsKKysgICAgICAgICAgICAgICAgKikgLiAiLi8kZm91bmRfbGEiIDs7CisrICAgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgICBsaWJkaXI9IiRzYXZlX2xpYmRpciIKKysgICAgICAgICAgICAgIGRubCBXZSB1c2Ugb25seSBkZXBlbmRlbmN5X2xpYnMuCisrICAgICAgICAgICAgICBmb3IgZGVwIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisrICAgICAgICAgICAgICAgIGNhc2UgIiRkZXAiIGluCisrICAgICAgICAgICAgICAgICAgLUwqKQorKyAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9YGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1MLy8nYAorKyAgICAgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExJQk5BTUUgYW5kICRMVExJQk5BTUUuCisrICAgICAgICAgICAgICAgICAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAorKyAgICAgICAgICAgICAgICAgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9saWIsCisrICAgICAgICAgICAgICAgICAgICBkbmwgICAyLiBpZiBpdCdzIC91c3IvbG9jYWwvbGliIGFuZCB3ZSBhcmUgdXNpbmcgR0NDIG9uIExpbnV4LAorKyAgICAgICAgICAgICAgICAgICAgZG5sICAgMy4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJExERkxBR1Mgb3IgdGhlIGFscmVhZHkKKysgICAgICAgICAgICAgICAgICAgIGRubCAgICAgIGNvbnN0cnVjdGVkICRMSUJOQU1FLAorKyAgICAgICAgICAgICAgICAgICAgZG5sICAgNC4gaWYgaXQgZG9lc24ndCBleGlzdCBhcyBhIGRpcmVjdG9yeS4KKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiICE9ICJYL3Vzci9saWIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgPSAiWC91c3IvbG9jYWwvbGliIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbnV4KikgaGF2ZWl0PXllczs7CisrICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExJQltdTkFNRTsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMSUJOQU1FLgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1MJGFkZGl0aW9uYWxfbGliZGlyIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJbXU5BTUU7IGRvCisrICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTFRMSUJOQU1FLgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfS1MJGFkZGl0aW9uYWxfbGliZGlyIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgICAgLVIqKQorKyAgICAgICAgICAgICAgICAgICAgZGlyPWBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtUi8vJ2AKKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiICE9IG5vOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgRElSIHRvIHJwYXRoZGlycy4KKysgICAgICAgICAgICAgICAgICAgICAgZG5sIFRoZSBycGF0aGRpcnMgd2lsbCBiZSBhcHBlbmRlZCB0byAkTElCTkFNRSBhdCB0aGUgZW5kLgorKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRycGF0aGRpcnM7IGRvCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZGlyIgorKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBsdHJwYXRoZGlycy4KKysgICAgICAgICAgICAgICAgICAgICAgZG5sIFRoZSBsdHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMVExJQk5BTUUgYXQgdGhlIGVuZC4KKysgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkbHRycGF0aGRpcnM7IGRvCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIGx0cnBhdGhkaXJzPSIkbHRycGF0aGRpcnMgJGRpciIKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICAgIC1sKikKKysgICAgICAgICAgICAgICAgICAgIGRubCBIYW5kbGUgdGhpcyBpbiB0aGUgbmV4dCByb3VuZC4KKysgICAgICAgICAgICAgICAgICAgIG5hbWVzX25leHRfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kICJgZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLWwvLydgCisrICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICAgICoubGEpCisrICAgICAgICAgICAgICAgICAgICBkbmwgSGFuZGxlIHRoaXMgaW4gdGhlIG5leHQgcm91bmQuIFRocm93IGF3YXkgdGhlIC5sYSdzCisrICAgICAgICAgICAgICAgICAgICBkbmwgZGlyZWN0b3J5OyBpdCBpcyBhbHJlYWR5IGNvbnRhaW5lZCBpbiBhIHByZWNlZGluZyAtTAorKyAgICAgICAgICAgICAgICAgICAgZG5sIG9wdGlvbi4KKysgICAgICAgICAgICAgICAgICAgIG5hbWVzX25leHRfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kICJgZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzLF5YLiovLCwnIC1lICdzLF5saWIsLCcgLWUgJ3MsXC5sYSQsLCdgCisrICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICAgICopCisrICAgICAgICAgICAgICAgICAgICBkbmwgTW9zdCBsaWtlbHkgYW4gaW1tZWRpYXRlIGxpYnJhcnkgbmFtZS4KKysgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGRlcCIKKysgICAgICAgICAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9JGRlcCIKKysgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICBmaQorKyAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgZG5sIERpZG4ndCBmaW5kIHRoZSBsaWJyYXJ5OyBhc3N1bWUgaXQgaXMgaW4gdGhlIHN5c3RlbSBkaXJlY3RvcmllcworKyAgICAgICAgICAgIGRubCBrbm93biB0byB0aGUgbGlua2VyIGFuZCBydW50aW1lIGxvYWRlci4gKEFsbCB0aGUgc3lzdGVtCisrICAgICAgICAgICAgZG5sIGRpcmVjdG9yaWVzIGtub3duIHRvIHRoZSBsaW5rZXIgc2hvdWxkIGFsc28gYmUga25vd24gdG8gdGhlCisrICAgICAgICAgICAgZG5sIHJ1bnRpbWUgbG9hZGVyLCBvdGhlcndpc2UgdGhlIHN5c3RlbSBpcyBzZXZlcmVseSBtaXNjb25maWd1cmVkLikKKysgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1sJG5hbWUiCisrICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tbCRuYW1lIgorKyAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICBkb25lCisrICBkb25lCisrICBpZiB0ZXN0ICJYJHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCisrICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorKyAgICAgIGRubCBXZWlyZCBwbGF0Zm9ybTogb25seSB0aGUgbGFzdCAtcnBhdGggb3B0aW9uIGNvdW50cywgdGhlIHVzZXIgbXVzdAorKyAgICAgIGRubCBwYXNzIGFsbCBwYXRoIGVsZW1lbnRzIGluIG9uZSBvcHRpb24uIFdlIGNhbiBhcnJhbmdlIHRoYXQgZm9yIGEKKysgICAgICBkbmwgc2luZ2xlIGxpYnJhcnksIGJ1dCBub3Qgd2hlbiBtb3JlIHRoYW4gb25lICRMSUJOQU1FcyBhcmUgdXNlZC4KKysgICAgICBhbGxkaXJzPQorKyAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgIGFsbGRpcnM9IiR7YWxsZGlyc30ke2FsbGRpcnM6KyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yfSRmb3VuZF9kaXIiCisrICAgICAgZG9uZQorKyAgICAgIGRubCBOb3RlOiBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIHVzZXMgJGxpYmRpciBhbmQgJHdsLgorKyAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKysgICAgICBsaWJkaXI9IiRhbGxkaXJzIgorKyAgICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisrICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZmxhZyIKKysgICAgZWxzZQorKyAgICAgIGRubCBUaGUgLXJwYXRoIG9wdGlvbnMgYXJlIGN1bXVsYXRpdmUuCisrICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbworKyAgICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgorKyAgICAgICAgbGliZGlyPSIkZm91bmRfZGlyIgorKyAgICAgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKyAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorKyAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZmxhZyIKKysgICAgICBkb25lCisrICAgIGZpCisrICBmaQorKyAgaWYgdGVzdCAiWCRsdHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCisrICAgIGRubCBXaGVuIHVzaW5nIGxpYnRvb2wsIHRoZSBvcHRpb24gdGhhdCB3b3JrcyBmb3IgYm90aCBsaWJyYXJpZXMgYW5kCisrICAgIGRubCBleGVjdXRhYmxlcyBpcyAtUi4gVGhlIC1SIG9wdGlvbnMgYXJlIGN1bXVsYXRpdmUuCisrICAgIGZvciBmb3VuZF9kaXIgaW4gJGx0cnBhdGhkaXJzOyBkbworKyAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LVIkZm91bmRfZGlyIgorKyAgICBkb25lCisrICBmaQorK10pCisrCisrZG5sIEFDX0xJQl9BUFBFTkRUT1ZBUihWQVIsIENPTlRFTlRTKSBhcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBDT05URU5UUyB0byBWQVIsCisrZG5sIHVubGVzcyBhbHJlYWR5IHByZXNlbnQgaW4gVkFSLgorK2RubCBXb3JrcyBvbmx5IGZvciBDUFBGTEFHUywgbm90IGZvciBMSUIqIHZhcmlhYmxlcyBiZWNhdXNlIHRoYXQgc29tZXRpbWVzCisrZG5sIGNvbnRhaW5zIHR3byBvciB0aHJlZSBjb25zZWN1dGl2ZSBlbGVtZW50cyB0aGF0IGJlbG9uZyB0b2dldGhlci4KKytBQ19ERUZVTihbQUNfTElCX0FQUEVORFRPVkFSXSwKKytbCisrICBmb3IgZWxlbWVudCBpbiBbJDJdOyBkbworKyAgICBoYXZlaXQ9CisrICAgIGZvciB4IGluICRbJDFdOyBkbworKyAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGVsZW1lbnQiOyB0aGVuCisrICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICBicmVhaworKyAgICAgIGZpCisrICAgIGRvbmUKKysgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICBbJDFdPSIke1skMV19JHtbJDFdOisgfSRlbGVtZW50IgorKyAgICBmaQorKyAgZG9uZQorK10pCisrCisrIyBsaWItbGQubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xMykKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgU3Vicm91dGluZXMgb2YgbGlidG9vbC5tNCwKKytkbmwgd2l0aCByZXBsYWNlbWVudHMgcy9BQ18vQUNfTElCLyBhbmQgcy9sdF9jdi9hY2xfY3YvIHRvIGF2b2lkIGNvbGxpc2lvbgorK2RubCB3aXRoIGxpYnRvb2wubTQuCisrCisrZG5sIEZyb20gbGlidG9vbC0xLjQuIFNldHMgdGhlIHZhcmlhYmxlIHdpdGhfZ251X2xkIHRvIHllcyBvciBuby4KKytBQ19ERUZVTihbQUNfTElCX1BST0dfTERfR05VXSwKKytbQUNfQ0FDSEVfQ0hFQ0soW2lmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkXSwgYWNsX2N2X3Byb2dfZ251X2xkLAorK1sjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZCdzIG9ubHkgYWNjZXB0IC12LgorK2Nhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCisrKkdOVSogfCAqJ3dpdGggQkZEJyopCisrICBhY2xfY3ZfcHJvZ19nbnVfbGQ9eWVzIDs7CisrKikKKysgIGFjbF9jdl9wcm9nX2dudV9sZD1ubyA7OworK2VzYWNdKQorK3dpdGhfZ251X2xkPSRhY2xfY3ZfcHJvZ19nbnVfbGQKKytdKQorKworK2RubCBGcm9tIGxpYnRvb2wtMS40LiBTZXRzIHRoZSB2YXJpYWJsZSBMRC4KKytBQ19ERUZVTihbQUNfTElCX1BST0dfTERdLAorK1tBQ19BUkdfV0lUSChnbnUtbGQsCisrWyAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXV0sCisrdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzLCB3aXRoX2dudV9sZD1ubykKKytBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKytBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCisrIyBQcmVwYXJlIFBBVEhfU0VQQVJBVE9SLgorKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgorK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisrICBlY2hvICIjISAvYmluL3NoIiA+Y29uZiQkLnNoCisrICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCisrICBjaG1vZCAreCBjb25mJCQuc2gKKysgIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5zaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgIFBBVEhfU0VQQVJBVE9SPSc7JworKyAgZWxzZQorKyAgICBQQVRIX1NFUEFSQVRPUj06CisrICBmaQorKyAgcm0gLWYgY29uZiQkLnNoCisrZmkKKythY19wcm9nPWxkCisraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgorKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgbGQgdXNlZCBieSBHQ0NdKQorKyAgY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KikKKysgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuIHdoaWNoIHVwc2V0cyBtaW5ndworKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisrICAqKQorKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7CisrICBlc2FjCisrICBjYXNlICRhY19wcm9nIGluCisrICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgorKyAgICBbW1xcL10qIHwgW0EtWmEtel06W1xcL10qKV0KKysgICAgICBbcmVfZGlyZWx0PScvW14vXVteL10qL1wuXC4vJ10KKysgICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aCBvZiBsZAorKyAgICAgIGFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8IHNlZCAncyVcXFxcJS8lZydgCisrICAgICAgd2hpbGUgZWNobyAkYWNfcHJvZyB8IGdyZXAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCisrCWFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8IHNlZCAicyUkcmVfZGlyZWx0JS8lImAKKysgICAgICBkb25lCisrICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCisrICAgICAgOzsKKysgICIiKQorKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKysgICAgYWNfcHJvZz1sZAorKyAgICA7OworKyAgKikKKysgICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgorKyAgICB3aXRoX2dudV9sZD11bmtub3duCisrICAgIDs7CisrICBlc2FjCisrZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisrICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBHTlUgbGRdKQorK2Vsc2UKKysgIEFDX01TR19DSEVDS0lORyhbZm9yIG5vbi1HTlUgbGRdKQorK2ZpCisrQUNfQ0FDSEVfVkFMKGFjbF9jdl9wYXRoX0xELAorK1tpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCisrICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30ke1BBVEhfU0VQQVJBVE9SLTp9IgorKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKysgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKysgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCisrICAgICAgYWNsX2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCisrICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAorKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGQncyBvbmx5IGFjY2VwdCAtdi4KKysgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKysgICAgICBjYXNlIGAiJGFjbF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwgL2Rldi9udWxsYCBpbgorKyAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQorKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrIDs7CisrICAgICAgKikKKysJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsgOzsKKysgICAgICBlc2FjCisrICAgIGZpCisrICBkb25lCisrICBJRlM9IiRhY19zYXZlX2lmcyIKKytlbHNlCisrICBhY2xfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKytmaV0pCisrTEQ9IiRhY2xfY3ZfcGF0aF9MRCIKKytpZiB0ZXN0IC1uICIkTEQiOyB0aGVuCisrICBBQ19NU0dfUkVTVUxUKCRMRCkKKytlbHNlCisrICBBQ19NU0dfUkVTVUxUKG5vKQorK2ZpCisrdGVzdCAteiAiJExEIiAmJiBBQ19NU0dfRVJST1IoW25vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIXSkKKytBQ19MSUJfUFJPR19MRF9HTlUKKytdKQorKworKyMgaXNjLXBvc2l4Lm00IHNlcmlhbCAyIChnZXR0ZXh0LTAuMTEuMikKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKysjIFRoaXMgZmlsZSBpcyBub3QgbmVlZGVkIHdpdGggYXV0b2NvbmYtMi41MyBhbmQgbmV3ZXIuICBSZW1vdmUgaXQgaW4gMjAwNS4KKysKKysjIFRoaXMgdGVzdCByZXBsYWNlcyB0aGUgb25lIGluIGF1dG9jb25mLgorKyMgQ3VycmVudGx5IHRoaXMgbWFjcm8gc2hvdWxkIGhhdmUgdGhlIHNhbWUgbmFtZSBhcyB0aGUgYXV0b2NvbmYgbWFjcm8KKysjIGJlY2F1c2UgZ2V0dGV4dCdzIGdldHRleHQubTQgKGRpc3RyaWJ1dGVkIGluIHRoZSBhdXRvbWFrZSBwYWNrYWdlKQorKyMgc3RpbGwgdXNlcyBpdC4gIE90aGVyd2lzZSwgdGhlIHVzZSBpbiBnZXR0ZXh0Lm00IG1ha2VzIGF1dG9oZWFkZXIKKysjIGdpdmUgdGhlc2UgZGlhZ25vc3RpY3M6CisrIyAgIGNvbmZpZ3VyZS5pbjo1NTY6IEFDX1RSWV9DT01QSUxFIHdhcyBjYWxsZWQgYmVmb3JlIEFDX0lTQ19QT1NJWAorKyMgICBjb25maWd1cmUuaW46NTU2OiBBQ19UUllfUlVOIHdhcyBjYWxsZWQgYmVmb3JlIEFDX0lTQ19QT1NJWAorKworK3VuZGVmaW5lKFtBQ19JU0NfUE9TSVhdKQorKworK0FDX0RFRlVOKFtBQ19JU0NfUE9TSVhdLAorKyAgWworKyAgICBkbmwgVGhpcyB0ZXN0IHJlcGxhY2VzIHRoZSBvYnNvbGVzY2VudCBBQ19JU0NfUE9TSVgga2x1ZGdlLgorKyAgICBBQ19DSEVDS19MSUIoY3Bvc2l4LCBzdHJlcnJvciwgW0xJQlM9IiRMSUJTIC1sY3Bvc2l4Il0pCisrICBdCisrKQorKworKyMgQ2hlY2sgZm9yIHN0ZGJvb2wuaCB0aGF0IGNvbmZvcm1zIHRvIEM5OS4KKysKKysjIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyMgMDIxMTEtMTMwNywgVVNBLgorKworKyMgUHJlcGFyZSBmb3Igc3Vic3RpdHV0aW5nIDxzdGRib29sLmg+IGlmIGl0IGlzIG5vdCBzdXBwb3J0ZWQuCisrCisrQUNfREVGVU4oW0FNX1NUREJPT0xfSF0sCisrWworKyAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NUREJPT0xdKQorKworKyAgIyBEZWZpbmUgdHdvIGFkZGl0aW9uYWwgdmFyaWFibGVzIHVzZWQgaW4gdGhlIE1ha2VmaWxlIHN1YnN0aXR1dGlvbi4KKysKKysgIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfc3RkYm9vbF9oIiA9IHllczsgdGhlbgorKyAgICBTVERCT09MX0g9JycKKysgIGVsc2UKKysgICAgU1REQk9PTF9IPSdzdGRib29sLmgnCisrICBmaQorKyAgQUNfU1VCU1QoW1NUREJPT0xfSF0pCisrCisrICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9fQm9vbCIgPSB5ZXM7IHRoZW4KKysgICAgSEFWRV9fQk9PTD0xCisrICBlbHNlCisrICAgIEhBVkVfX0JPT0w9MAorKyAgZmkKKysgIEFDX1NVQlNUKFtIQVZFX19CT09MXSkKKytdKQorKworKyMgVGhpcyBtYWNybyBpcyBvbmx5IG5lZWRlZCBpbiBhdXRvY29uZiA8PSAyLjU0LiAgTmV3ZXIgdmVyc2lvbnMgb2YgYXV0b2NvbmYKKysjIGhhdmUgdGhpcyBtYWNybyBidWlsdC1pbi4KKysKKytBQ19ERUZVTihbQUNfSEVBREVSX1NUREJPT0xdLAorKyAgW0FDX0NBQ0hFX0NIRUNLKFtmb3Igc3RkYm9vbC5oIHRoYXQgY29uZm9ybXMgdG8gQzk5XSwKKysgICAgIFthY19jdl9oZWFkZXJfc3RkYm9vbF9oXSwKKysgICAgIFtBQ19UUllfQ09NUElMRSgKKysJWworKwkgICNpbmNsdWRlIDxzdGRib29sLmg+CisrCSAgI2lmbmRlZiBib29sCisrCSAgICJlcnJvcjogYm9vbCBpcyBub3QgZGVmaW5lZCIKKysJICAjZW5kaWYKKysJICAjaWZuZGVmIGZhbHNlCisrCSAgICJlcnJvcjogZmFsc2UgaXMgbm90IGRlZmluZWQiCisrCSAgI2VuZGlmCisrCSAgI2lmIGZhbHNlCisrCSAgICJlcnJvcjogZmFsc2UgaXMgbm90IDAiCisrCSAgI2VuZGlmCisrCSAgI2lmbmRlZiB0cnVlCisrCSAgICJlcnJvcjogZmFsc2UgaXMgbm90IGRlZmluZWQiCisrCSAgI2VuZGlmCisrCSAgI2lmIHRydWUgIT0gMQorKwkgICAiZXJyb3I6IHRydWUgaXMgbm90IDEiCisrCSAgI2VuZGlmCisrCSAgI2lmbmRlZiBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZAorKwkgICAiZXJyb3I6IF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkIGlzIG5vdCBkZWZpbmVkIgorKwkgICNlbmRpZgorKworKwkgIHN0cnVjdCBzIHsgX0Jvb2wgczogMTsgX0Jvb2wgdDsgfSBzOworKworKwkgIGNoYXIgYVt0cnVlID09IDEgPyAxIDogLTFdOworKwkgIGNoYXIgYltmYWxzZSA9PSAwID8gMSA6IC0xXTsKKysJICBjaGFyIGNbX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgPT0gMSA/IDEgOiAtMV07CisrCSAgY2hhciBkWyhib29sKSAtMC41ID09IHRydWUgPyAxIDogLTFdOworKwkgIGJvb2wgZSA9ICZzOworKwkgIGNoYXIgZlsoX0Jvb2wpIC0wLjAgPT0gZmFsc2UgPyAxIDogLTFdOworKwkgIGNoYXIgZ1t0cnVlXTsKKysJICBjaGFyIGhbc2l6ZW9mIChfQm9vbCldOworKwkgIGNoYXIgaVtzaXplb2Ygcy50XTsKKysJXSwKKysJWyByZXR1cm4gIWEgKyAhYiArICFjICsgIWQgKyAhZSArICFmICsgIWcgKyAhaCArICFpOyBdLAorKwlbYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaD15ZXNdLAorKwlbYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaD1ub10pXSkKKysgICBBQ19DSEVDS19UWVBFUyhbX0Jvb2xdKQorKyAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRib29sX2ggPSB5ZXM7IHRoZW4KKysgICAgIEFDX0RFRklORShIQVZFX1NUREJPT0xfSCwgMSwgW0RlZmluZSB0byAxIGlmIHN0ZGJvb2wuaCBjb25mb3JtcyB0byBDOTkuXSkKKysgICBmaV0pCisrCisrI3NlcmlhbCA1CisrCisrZG5sIEZyb20gSmltIE1leWVyaW5nCisrCisrZG5sIERlZmluZSBIQVZFX1NUUlVDVF9VVElNQlVGIGlmIGBzdHJ1Y3QgdXRpbWJ1ZicgaXMgZGVjbGFyZWQgLS0KKytkbmwgdXN1YWxseSBpbiA8dXRpbWUuaD4uCisrZG5sIFNvbWUgc3lzdGVtcyBoYXZlIHV0aW1lLmggYnV0IGRvbid0IGRlY2xhcmUgdGhlIHN0cnVjdCBhbnl3aGVyZS4KKysKKytBQ19ERUZVTihbam1fQ0hFQ0tfVFlQRV9TVFJVQ1RfVVRJTUJVRl0sCisrWworKyAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHN5cy90aW1lLmggdXRpbWUuaCkKKysgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9USU1FXSkKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igc3RydWN0IHV0aW1idWZdLCBmdV9jdl9zeXNfc3RydWN0X3V0aW1idWYsCisrICAgIFtBQ19UUllfQ09NUElMRSgKKysgICAgICBbCisrI2lmZGVmIFRJTUVfV0lUSF9TWVNfVElNRQorKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKysjIGluY2x1ZGUgPHRpbWUuaD4KKysjZWxzZQorKyMgaWZkZWYgSEFWRV9TWVNfVElNRV9ICisrIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKysjIGVsc2UKKysjICBpbmNsdWRlIDx0aW1lLmg+CisrIyBlbmRpZgorKyNlbmRpZgorKyNpZmRlZiBIQVZFX1VUSU1FX0gKKysjIGluY2x1ZGUgPHV0aW1lLmg+CisrI2VuZGlmCisrICAgICAgXSwKKysgICAgICBbc3RhdGljIHN0cnVjdCB1dGltYnVmIHg7IHguYWN0aW1lID0geC5tb2R0aW1lO10sCisrICAgICAgZnVfY3Zfc3lzX3N0cnVjdF91dGltYnVmPXllcywKKysgICAgICBmdV9jdl9zeXNfc3RydWN0X3V0aW1idWY9bm8pCisrICAgIF0pCisrCisrICBpZiB0ZXN0ICRmdV9jdl9zeXNfc3RydWN0X3V0aW1idWYgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfU1RSVUNUX1VUSU1CVUYsIDEsCisrICAgICAgW0RlZmluZSBpZiBzdHJ1Y3QgdXRpbWJ1ZiBpcyBkZWNsYXJlZCAtLSB1c3VhbGx5IGluIDx1dGltZS5oPi4KKysgICAgICAgU29tZSBzeXN0ZW1zIGhhdmUgdXRpbWUuaCBidXQgZG9uJ3QgZGVjbGFyZSB0aGUgc3RydWN0IGFueXdoZXJlLiBdKQorKyAgZmkKKytdKQorKworKyMgb25jZW9ubHkubTQgc2VyaWFsIDMKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIFRoaXMgZmlsZSBkZWZpbmVzIHNvbWUgIm9uY2Ugb25seSIgdmFyaWFudHMgb2Ygc3RhbmRhcmQgYXV0b2NvbmYgbWFjcm9zLgorK2RubCAgIEFDX0NIRUNLX0hFQURFUlNfT05DRSAgICAgICAgIGxpa2UgIEFDX0NIRUNLX0hFQURFUlMKKytkbmwgICBBQ19DSEVDS19GVU5DU19PTkNFICAgICAgICAgICBsaWtlICBBQ19DSEVDS19GVU5DUworK2RubCAgIEFDX0NIRUNLX0RFQ0xTX09OQ0UgICAgICAgICAgIGxpa2UgIEFDX0NIRUNLX0RFQ0xTCisrZG5sICAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKSAgbGlrZSAgQUNfSEVBREVSX1NUREMKKytkbmwgVGhlIGFkdmFudGFnZSBpcyB0aGF0IHRoZSBjaGVjayBmb3IgZWFjaCBvZiB0aGUgaGVhZGVycy9mdW5jdGlvbnMvZGVjbHMKKytkbmwgd2lsbCBiZSBwdXQgb25seSBvbmNlIGludG8gdGhlICdjb25maWd1cmUnIGZpbGUuIEl0IGtlZXBzIHRoZSBzaXplIG9mCisrZG5sIHRoZSAnY29uZmlndXJlJyBmaWxlIGRvd24sIGFuZCBhdm9pZHMgcmVkdW5kYW50IG91dHB1dCB3aGVuICdjb25maWd1cmUnCisrZG5sIGlzIHJ1bi4KKytkbmwgVGhlIGRyYXdiYWNrIGlzIHRoYXQgdGhlIGNoZWNrcyBjYW5ub3QgYmUgY29uZGl0aW9uYWxpemVkLiBJZiB5b3Ugd3JpdGUKKytkbmwgICBpZiBzb21lX2NvbmRpdGlvbjsgdGhlbiBnbF9DSEVDS19IRUFERVJTKHN0ZGxpYi5oKTsgZmkKKytkbmwgaW5zaWRlIGFuIEFDX0RFRlVOZWQgZnVuY3Rpb24sIHRoZSBnbF9DSEVDS19IRUFERVJTIG1hY3JvIGNhbGwgZXhwYW5kcyB0bworK2RubCBlbXB0eSwgYW5kIHRoZSBjaGVjayB3aWxsIGJlIGluc2VydGVkIGJlZm9yZSB0aGUgYm9keSBvZiB0aGUgQUNfREVGVU5lZAorK2RubCBmdW5jdGlvbi4KKysKKytkbmwgQXV0b2NvbmYgdmVyc2lvbiAyLjU3IG9yIG5ld2VyIGlzIHJlY29tbWVuZGVkLgorK0FDX1BSRVJFUSgyLjU0KQorKworKyMgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKEhFQURFUjEgSEVBREVSMiAuLi4pIGlzIGEgb25jZS1vbmx5IHZhcmlhbnQgb2YKKysjIEFDX0NIRUNLX0hFQURFUlMoSEVBREVSMSBIRUFERVIyIC4uLikuCisrQUNfREVGVU4oW0FDX0NIRUNLX0hFQURFUlNfT05DRV0sIFsKKysgIDoKKysgIEFDX0ZPUkVBQ0goW2dsX0hFQURFUl9OQU1FXSwgWyQxXSwgWworKyAgICBBQ19ERUZVTihbZ2xfQ0hFQ0tfSEVBREVSX11tNF9xdW90ZSh0cmFuc2xpdChtNF9kZWZuKFtnbF9IRUFERVJfTkFNRV0pLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLS4vXSwgW19fX10pKSwgWworKyAgICAgIEFDX0NIRUNLX0hFQURFUlMoZ2xfSEVBREVSX05BTUUpCisrICAgIF0pCisrICAgIEFDX1JFUVVJUkUoW2dsX0NIRUNLX0hFQURFUl9dbTRfcXVvdGUodHJhbnNsaXQoZ2xfSEVBREVSX05BTUUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWy0uL10sIFtfX19dKSkpCisrICBdKQorK10pCisrCisrIyBBQ19DSEVDS19GVU5DU19PTkNFKEZVTkMxIEZVTkMyIC4uLikgaXMgYSBvbmNlLW9ubHkgdmFyaWFudCBvZgorKyMgQUNfQ0hFQ0tfRlVOQ1MoRlVOQzEgRlVOQzIgLi4uKS4KKytBQ19ERUZVTihbQUNfQ0hFQ0tfRlVOQ1NfT05DRV0sIFsKKysgIDoKKysgIEFDX0ZPUkVBQ0goW2dsX0ZVTkNfTkFNRV0sIFskMV0sIFsKKysgICAgQUNfREVGVU4oW2dsX0NIRUNLX0ZVTkNfXW00X2RlZm4oW2dsX0ZVTkNfTkFNRV0pLCBbCisrICAgICAgQUNfQ0hFQ0tfRlVOQ1MobTRfZGVmbihbZ2xfRlVOQ19OQU1FXSkpCisrICAgIF0pCisrICAgIEFDX1JFUVVJUkUoW2dsX0NIRUNLX0ZVTkNfXW00X2RlZm4oW2dsX0ZVTkNfTkFNRV0pKQorKyAgXSkKKytdKQorKworKyMgQUNfQ0hFQ0tfREVDTFNfT05DRShERUNMMSBERUNMMiAuLi4pIGlzIGEgb25jZS1vbmx5IHZhcmlhbnQgb2YKKysjIEFDX0NIRUNLX0RFQ0xTKERFQ0wxLCBERUNMMiwgLi4uKS4KKytBQ19ERUZVTihbQUNfQ0hFQ0tfREVDTFNfT05DRV0sIFsKKysgIDoKKysgIEFDX0ZPUkVBQ0goW2dsX0RFQ0xfTkFNRV0sIFskMV0sIFsKKysgICAgQUNfREVGVU4oW2dsX0NIRUNLX0RFQ0xfXW00X2RlZm4oW2dsX0RFQ0xfTkFNRV0pLCBbCisrICAgICAgQUNfQ0hFQ0tfREVDTFMobTRfZGVmbihbZ2xfREVDTF9OQU1FXSkpCisrICAgIF0pCisrICAgIEFDX1JFUVVJUkUoW2dsX0NIRUNLX0RFQ0xfXW00X2RlZm4oW2dsX0RFQ0xfTkFNRV0pKQorKyAgXSkKKytdKQorKworICMgYmFja3VwZmlsZS5tNCBzZXJpYWwgMQorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorQEAgLTIxLDYgKzEwNzYsNyBAQAorICAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKGxpbWl0cy5oIHN0cmluZy5oIHVuaXN0ZC5oKQorICAgQUNfQ0hFQ0tfRlVOQ1MocGF0aGNvbmYpCisgXSkKKysKKyAjc2VyaWFsIDUKKyAKKyBkbmwgRnJvbSBKaW0gTWV5ZXJpbmcuCitAQCAtNjMsMzEgKzExMTksNyBAQAorICAgIGZpCisgICBdCisgKQorLSMgZGlybmFtZS5tNCBzZXJpYWwgMQorLWRubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorLWRubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKy1kbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKy1kbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKy1kbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyAKKy1BQ19ERUZVTihbZ2xfRElSTkFNRV0sCistWworLSAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL2Rpcm5hbWUuaC4KKy0gIEFDX1JFUVVJUkUoW2ptX0FDX0RPU10pCistCistICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvZGlybmFtZS5jLgorLSAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKQorLSAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHN0cmluZy5oKQorLQorLSAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL2Jhc2VuYW1lLmMuCistICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCistICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RyaW5nLmgpCistCistICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc3RyaXBzbGFzaC5jLgorLSAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKQorLSAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHN0cmluZy5oKQorLV0pCisgI3NlcmlhbCA1CisgCisgIyBEZWZpbmUgc29tZSBtYWNyb3MgcmVxdWlyZWQgZm9yIHByb3BlciBvcGVyYXRpb24gb2YgY29kZSBpbiBsaWIvKi5jCitAQCAtMTQxLDYgKzExNzMsMzMgQEAKKyAgICAgICBbRGVmaW5lIGlmIHRoZSBiYWNrc2xhc2ggY2hhcmFjdGVyIG1heSBhbHNvIHNlcnZlIGFzIGEgZmlsZSBuYW1lCisgICAgICAgIGNvbXBvbmVudCBzZXBhcmF0b3IuXSkKKyAgIF0pCisrCisrIyBkaXJuYW1lLm00IHNlcmlhbCAxCisrZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK0FDX0RFRlVOKFtnbF9ESVJOQU1FXSwKKytbCisrICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvZGlybmFtZS5oLgorKyAgQUNfUkVRVUlSRShbam1fQUNfRE9TXSkKKysKKysgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9kaXJuYW1lLmMuCisrICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCisrICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RyaW5nLmgpCisrCisrICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvYmFzZW5hbWUuYy4KKysgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSkKKysgIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdHJpbmcuaCkKKysKKysgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9zdHJpcHNsYXNoLmMuCisrICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCisrICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RyaW5nLmgpCisrXSkKKysKKyAjc2VyaWFsIDcKKyAKKyBBQ19ERUZVTihbZ2xfRVJST1JdLAorQEAgLTE1OSw3ICsxMjE4LDY3IEBACisgICBBQ19DSEVDS19ERUNMUyhbc3RyZXJyb3JdKQorICAgQUNfRlVOQ19TVFJFUlJPUl9SCisgXSkKKy0jIGdldG9wdC5tNCBzZXJpYWwgMQorKworKyMgbWVtY2hyLm00IHNlcmlhbCAxCisrZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK0FDX0RFRlVOKFtnbF9GVU5DX01FTUNIUl0sCisrWworKyAgQUNfUkVQTEFDRV9GVU5DUyhtZW1jaHIpCisrICBpZiB0ZXN0ICRhY19jdl9mdW5jX21lbWNociA9IG5vOyB0aGVuCisrICAgIGptX1BSRVJFUV9NRU1DSFIKKysgIGZpCisrXSkKKysKKysjIFByZXJlcXVpc2l0ZXMgb2YgbGliL21lbWNoci5jLgorK0FDX0RFRlVOKFtqbV9QUkVSRVFfTUVNQ0hSXSwgWworKyAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKGxpbWl0cy5oIHN0ZGxpYi5oKQorKyAgQUNfQ0hFQ0tfSEVBREVSUyhicC1zeW0uaCkKKytdKQorKworKyMgcm1kaXIubTQgc2VyaWFsIDEKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrQUNfREVGVU4oW2dsX0ZVTkNfUk1ESVJdLAorK1sKKysgIEFDX1JFUExBQ0VfRlVOQ1Mocm1kaXIpCisrICBpZiB0ZXN0ICRhY19jdl9mdW5jX3JtZGlyID0gbm87IHRoZW4KKysgICAgZ2xfUFJFUkVRX1JNRElSCisrICBmaQorK10pCisrCisrIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9ybWRpci5jLgorK0FDX0RFRlVOKFtnbF9QUkVSRVFfUk1ESVJdLCBbCisrICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1RBVF0pCisrICA6CisrXSkKKysKKysKKysjIGdldG9wdC5tNCBzZXJpYWwgMQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytBQ19ERUZVTihbZ2xfR0VUT1BUXSwKKytbCisrICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvZ2V0b3B0LmMuCisrICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RyaW5nLmgpCisrXSkKKysKKysjIHhhbGxvYy5tNCBzZXJpYWwgMQorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorIGRubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKK0BAIC0xNjcsMTEgKzEyODYsMjUgQEAKKyBkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKyBkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyAKKy1BQ19ERUZVTihbZ2xfR0VUT1BUXSwKKytBQ19ERUZVTihbZ2xfWEFMTE9DXSwKKyBbCistICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvZ2V0b3B0LmMuCisrICBnbF9QUkVSRVFfWE1BTExPQworKyAgZ2xfUFJFUkVRX1hTVFJEVVAKKytdKQorKworKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIveG1hbGxvYy5jLgorK0FDX0RFRlVOKFtnbF9QUkVSRVFfWE1BTExPQ10sIFsKKysgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSkKKysgIEFDX1JFUVVJUkUoW2ptX0ZVTkNfTUFMTE9DXSkKKysgIEFDX1JFUVVJUkUoW2ptX0ZVTkNfUkVBTExPQ10pCisrXSkKKysKKysjIFByZXJlcXVpc2l0ZXMgb2YgbGliL3hzdHJkdXAuYy4KKytBQ19ERUZVTihbZ2xfUFJFUkVRX1hTVFJEVVBdLCBbCisrICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCisgICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RyaW5nLmgpCisgXSkKKysKKyAjIG1hbGxvYy5tNCBzZXJpYWwgNworIGRubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorQEAgLTE5Nyw2NiArMTMzMCw4IEBACisgQUNfREVGVU4oW2dsX1BSRVJFUV9NQUxMT0NdLCBbCisgICA6CisgXSkKKy0jIG1icnRvd2MubTQgc2VyaWFsIDUKKy1kbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorLWRubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKy1kbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKy1kbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKy1kbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKy0KKy1kbmwgRnJvbSBQYXVsIEVnZ2VydAorLQorLWRubCBUaGlzIGZpbGUgY2FuIGJlIHJlbW92ZWQsIGFuZCBqbV9GVU5DX01CUlRPV0MgcmVwbGFjZWQgd2l0aAorLWRubCBBQ19GVU5DX01CUlRPV0MsIHdoZW4gYXV0b2NvbmYgMi41NyBjYW4gYmUgYXNzdW1lZCBldmVyeXdoZXJlLgorLQorLUFDX0RFRlVOKFtqbV9GVU5DX01CUlRPV0NdLAorLVsKKy0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIG1icnRvd2MgYW5kIG1ic3RhdGVfdCBhcmUgcHJvcGVybHkgZGVjbGFyZWRdLAorLSAgICBqbV9jdl9mdW5jX21icnRvd2MsCistICAgIFtBQ19UUllfTElOSygKKy0gICAgICAgWyNpbmNsdWRlIDx3Y2hhci5oPl0sCistICAgICAgIFttYnN0YXRlX3Qgc3RhdGU7IHJldHVybiAhIChzaXplb2Ygc3RhdGUgJiYgbWJydG93Yyk7XSwKKy0gICAgICAgam1fY3ZfZnVuY19tYnJ0b3djPXllcywKKy0gICAgICAgam1fY3ZfZnVuY19tYnJ0b3djPW5vKV0pCistICBpZiB0ZXN0ICRqbV9jdl9mdW5jX21icnRvd2MgPSB5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKEhBVkVfTUJSVE9XQywgMSwKKy0gICAgICBbRGVmaW5lIHRvIDEgaWYgbWJydG93YyBhbmQgbWJzdGF0ZV90IGFyZSBwcm9wZXJseSBkZWNsYXJlZC5dKQorLSAgZmkKKy1dKQorLSMgbWJzdGF0ZV90Lm00IHNlcmlhbCA5CistZG5sIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCistZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorLWRubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorLWRubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorLWRubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorLQorLSMgRnJvbSBQYXVsIEVnZ2VydC4KKy0KKy0jIEJlT1MgNSBoYXMgPHdjaGFyLmg+IGJ1dCBkb2VzIG5vdCBkZWZpbmUgbWJzdGF0ZV90LAorLSMgc28geW91IGNhbid0IGRlY2xhcmUgYW4gb2JqZWN0IG9mIHRoYXQgdHlwZS4KKy0jIENoZWNrIGZvciB0aGlzIGluY29tcGF0aWJpbGl0eSB3aXRoIFN0YW5kYXJkIEMuCisgCistIyBBQ19UWVBFX01CU1RBVEVfVAorLSMgLS0tLS0tLS0tLS0tLS0tLS0KKy1BQ19ERUZVTihbQUNfVFlQRV9NQlNUQVRFX1RdLAorLSAgW0FDX0NBQ0hFX0NIRUNLKFtmb3IgbWJzdGF0ZV90XSwgYWNfY3ZfdHlwZV9tYnN0YXRlX3QsCistICAgICBbQUNfQ09NUElMRV9JRkVMU0UoCistCVtBQ19MQU5HX1BST0dSQU0oCistCSAgIFtBQ19JTkNMVURFU19ERUZBVUxUCistIwkgICAgaW5jbHVkZSA8d2NoYXIuaD5dLAorLQkgICBbbWJzdGF0ZV90IHg7IHJldHVybiBzaXplb2YgeDtdKV0sCistCVthY19jdl90eXBlX21ic3RhdGVfdD15ZXNdLAorLQlbYWNfY3ZfdHlwZV9tYnN0YXRlX3Q9bm9dKV0pCistICAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9tYnN0YXRlX3QgPSB5ZXM7IHRoZW4KKy0gICAgIEFDX0RFRklORShbSEFWRV9NQlNUQVRFX1RdLCAxLAorLQkgICAgICAgW0RlZmluZSB0byAxIGlmIDx3Y2hhci5oPiBkZWNsYXJlcyBtYnN0YXRlX3QuXSkKKy0gICBlbHNlCistICAgICBBQ19ERUZJTkUoW21ic3RhdGVfdF0sIGludCwKKy0JICAgICAgIFtEZWZpbmUgdG8gYSB0eXBlIGlmIDx3Y2hhci5oPiBkb2VzIG5vdCBkZWZpbmUuXSkKKy0gICBmaV0pCistIyBtZW1jaHIubTQgc2VyaWFsIDEKKysjIHJlYWxsb2MubTQgc2VyaWFsIDcKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyBkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCitAQCAtMjY0LDExNiArMTMzOSwyNCBAQAorIGRubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorIGRubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIAorLUFDX0RFRlVOKFtnbF9GVU5DX01FTUNIUl0sCisrZG5sIEZyb20gSmltIE1leWVyaW5nLgorK2RubCBEZXRlcm1pbmUgd2hldGhlciByZWFsbG9jIHdvcmtzIHdoZW4gYm90aCBhcmd1bWVudHMgYXJlIDAuCisrZG5sIElmIGl0IGRvZXNuJ3QsIGFycmFuZ2UgdG8gdXNlIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbi4KKysKKytBQ19ERUZVTihbam1fRlVOQ19SRUFMTE9DXSwKKyBbCistICBBQ19SRVBMQUNFX0ZVTkNTKG1lbWNocikKKy0gIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWVtY2hyID0gbm87IHRoZW4KKy0gICAgam1fUFJFUkVRX01FTUNIUgorKyAgQUNfUkVRVUlSRShbQUNfRlVOQ19SRUFMTE9DXSkKKysgIGRubCBhdXRvY29uZiA8IDIuNTcgdXNlZCB0aGUgc3ltYm9sIGFjX2N2X2Z1bmNfcmVhbGxvY193b3Jrcy4KKysgIGlmIHRlc3QgWCIkYWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbCIgPSBYbm8gfHwgdGVzdCBYIiRhY19jdl9mdW5jX3JlYWxsb2Nfd29ya3MiID0gWG5vOyB0aGVuCisrICAgIGdsX1BSRVJFUV9SRUFMTE9DCisgICBmaQorIF0pCisgCistIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9tZW1jaHIuYy4KKy1BQ19ERUZVTihbam1fUFJFUkVRX01FTUNIUl0sIFsKKy0gIEFDX0NIRUNLX0hFQURFUlNfT05DRShsaW1pdHMuaCBzdGRsaWIuaCkKKy0gIEFDX0NIRUNLX0hFQURFUlMoYnAtc3ltLmgpCistXSkKKy0jc2VyaWFsIDEKKy0KKy1kbmwgRnJvbSBNdW1pdCBLaGFuIGFuZCBQYXVsIEVnZ2VydAorLWRubCBEZXRlcm1pbmUgd2hldGhlciBta2RpciBhY2NlcHRzIG9ubHkgb25lIGFyZ3VtZW50IGluc3RlYWQgb2YgdGhlIHVzdWFsIHR3by4KKy0KKy1BQ19ERUZVTihbUEFUQ0hfRlVOQ19NS0RJUl9UQUtFU19PTkVfQVJHXSwKKy0gIFtBQ19DSEVDS19GVU5DUyhta2RpcikKKy0gICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBta2RpciB0YWtlcyBvbmx5IG9uZSBhcmd1bWVudF0sCistICAgICBwYXRjaF9jdl9ta2Rpcl90YWtlc19vbmVfYXJnLAorLSAgICAgW3BhdGNoX2N2X21rZGlyX3Rha2VzX29uZV9hcmc9bm8KKy0gICAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX21rZGlyID0geWVzOyB0aGVuCistICAgICAgICBBQ19UUllfQ09NUElMRShbCistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgorLQkgIF0sCistCSAgW21rZGlyICgiLiIsIDApO10sCistCSAgLAorLQkgIFtBQ19UUllfQ09NUElMRShbCistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgorLQkgICAgIF0sCistCSAgICAgW21rZGlyICgiLiIpO10sCistCSAgICAgcGF0Y2hfY3ZfbWtkaXJfdGFrZXNfb25lX2FyZz15ZXMKKy0JICApXQorLQkpCistICAgICAgZmkKKy0gICAgIF0KKy0gICApCistICAgaWYgdGVzdCAkcGF0Y2hfY3ZfbWtkaXJfdGFrZXNfb25lX2FyZyA9IHllczsgdGhlbgorLSAgICAgQUNfREVGSU5FKFtNS0RJUl9UQUtFU19PTkVfQVJHXSwgMSwKKy0gICAgICAgW0RlZmluZSBpZiBta2RpciB0YWtlcyBvbmx5IG9uZSBhcmd1bWVudC5dKQorLSAgIGZpCistICBdCistKQorLSMgb25jZW9ubHkubTQgc2VyaWFsIDMKKy1kbmwgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKy1kbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCistZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCistZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCistZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCistCistZG5sIFRoaXMgZmlsZSBkZWZpbmVzIHNvbWUgIm9uY2Ugb25seSIgdmFyaWFudHMgb2Ygc3RhbmRhcmQgYXV0b2NvbmYgbWFjcm9zLgorLWRubCAgIEFDX0NIRUNLX0hFQURFUlNfT05DRSAgICAgICAgIGxpa2UgIEFDX0NIRUNLX0hFQURFUlMKKy1kbmwgICBBQ19DSEVDS19GVU5DU19PTkNFICAgICAgICAgICBsaWtlICBBQ19DSEVDS19GVU5DUworLWRubCAgIEFDX0NIRUNLX0RFQ0xTX09OQ0UgICAgICAgICAgIGxpa2UgIEFDX0NIRUNLX0RFQ0xTCistZG5sICAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKSAgbGlrZSAgQUNfSEVBREVSX1NUREMKKy1kbmwgVGhlIGFkdmFudGFnZSBpcyB0aGF0IHRoZSBjaGVjayBmb3IgZWFjaCBvZiB0aGUgaGVhZGVycy9mdW5jdGlvbnMvZGVjbHMKKy1kbmwgd2lsbCBiZSBwdXQgb25seSBvbmNlIGludG8gdGhlICdjb25maWd1cmUnIGZpbGUuIEl0IGtlZXBzIHRoZSBzaXplIG9mCistZG5sIHRoZSAnY29uZmlndXJlJyBmaWxlIGRvd24sIGFuZCBhdm9pZHMgcmVkdW5kYW50IG91dHB1dCB3aGVuICdjb25maWd1cmUnCistZG5sIGlzIHJ1bi4KKy1kbmwgVGhlIGRyYXdiYWNrIGlzIHRoYXQgdGhlIGNoZWNrcyBjYW5ub3QgYmUgY29uZGl0aW9uYWxpemVkLiBJZiB5b3Ugd3JpdGUKKy1kbmwgICBpZiBzb21lX2NvbmRpdGlvbjsgdGhlbiBnbF9DSEVDS19IRUFERVJTKHN0ZGxpYi5oKTsgZmkKKy1kbmwgaW5zaWRlIGFuIEFDX0RFRlVOZWQgZnVuY3Rpb24sIHRoZSBnbF9DSEVDS19IRUFERVJTIG1hY3JvIGNhbGwgZXhwYW5kcyB0bworLWRubCBlbXB0eSwgYW5kIHRoZSBjaGVjayB3aWxsIGJlIGluc2VydGVkIGJlZm9yZSB0aGUgYm9keSBvZiB0aGUgQUNfREVGVU5lZAorLWRubCBmdW5jdGlvbi4KKy0KKy1kbmwgQXV0b2NvbmYgdmVyc2lvbiAyLjU3IG9yIG5ld2VyIGlzIHJlY29tbWVuZGVkLgorLUFDX1BSRVJFUSgyLjU0KQorLQorLSMgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKEhFQURFUjEgSEVBREVSMiAuLi4pIGlzIGEgb25jZS1vbmx5IHZhcmlhbnQgb2YKKy0jIEFDX0NIRUNLX0hFQURFUlMoSEVBREVSMSBIRUFERVIyIC4uLikuCistQUNfREVGVU4oW0FDX0NIRUNLX0hFQURFUlNfT05DRV0sIFsKKy0gIDoKKy0gIEFDX0ZPUkVBQ0goW2dsX0hFQURFUl9OQU1FXSwgWyQxXSwgWworLSAgICBBQ19ERUZVTihbZ2xfQ0hFQ0tfSEVBREVSX11tNF9xdW90ZSh0cmFuc2xpdChtNF9kZWZuKFtnbF9IRUFERVJfTkFNRV0pLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLS4vXSwgW19fX10pKSwgWworLSAgICAgIEFDX0NIRUNLX0hFQURFUlMoZ2xfSEVBREVSX05BTUUpCistICAgIF0pCistICAgIEFDX1JFUVVJUkUoW2dsX0NIRUNLX0hFQURFUl9dbTRfcXVvdGUodHJhbnNsaXQoZ2xfSEVBREVSX05BTUUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWy0uL10sIFtfX19dKSkpCistICBdKQorLV0pCistCistIyBBQ19DSEVDS19GVU5DU19PTkNFKEZVTkMxIEZVTkMyIC4uLikgaXMgYSBvbmNlLW9ubHkgdmFyaWFudCBvZgorLSMgQUNfQ0hFQ0tfRlVOQ1MoRlVOQzEgRlVOQzIgLi4uKS4KKy1BQ19ERUZVTihbQUNfQ0hFQ0tfRlVOQ1NfT05DRV0sIFsKKysjIFByZXJlcXVpc2l0ZXMgb2YgbGliL3JlYWxsb2MuYy4KKytBQ19ERUZVTihbZ2xfUFJFUkVRX1JFQUxMT0NdLCBbCisgICA6CistICBBQ19GT1JFQUNIKFtnbF9GVU5DX05BTUVdLCBbJDFdLCBbCistICAgIEFDX0RFRlVOKFtnbF9DSEVDS19GVU5DX11tNF9kZWZuKFtnbF9GVU5DX05BTUVdKSwgWworLSAgICAgIEFDX0NIRUNLX0ZVTkNTKG00X2RlZm4oW2dsX0ZVTkNfTkFNRV0pKQorLSAgICBdKQorLSAgICBBQ19SRVFVSVJFKFtnbF9DSEVDS19GVU5DX11tNF9kZWZuKFtnbF9GVU5DX05BTUVdKSkKKy0gIF0pCisgXSkKKyAKKy0jIEFDX0NIRUNLX0RFQ0xTX09OQ0UoREVDTDEgREVDTDIgLi4uKSBpcyBhIG9uY2Utb25seSB2YXJpYW50IG9mCistIyBBQ19DSEVDS19ERUNMUyhERUNMMSwgREVDTDIsIC4uLikuCistQUNfREVGVU4oW0FDX0NIRUNLX0RFQ0xTX09OQ0VdLCBbCistICA6CistICBBQ19GT1JFQUNIKFtnbF9ERUNMX05BTUVdLCBbJDFdLCBbCistICAgIEFDX0RFRlVOKFtnbF9DSEVDS19ERUNMX11tNF9kZWZuKFtnbF9ERUNMX05BTUVdKSwgWworLSAgICAgIEFDX0NIRUNLX0RFQ0xTKG00X2RlZm4oW2dsX0RFQ0xfTkFNRV0pKQorLSAgICBdKQorLSAgICBBQ19SRVFVSVJFKFtnbF9DSEVDS19ERUNMX11tNF9kZWZuKFtnbF9ERUNMX05BTUVdKSkKKy0gIF0pCistXSkKKyAjIHF1b3RlLm00IHNlcmlhbCAxCisgZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitAQCAtMzg3LDYgKzEzNzAsNyBAQAorICAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL3F1b3RlLmMuCisgICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RkZGVmLmgpCisgXSkKKysKKyAjIHF1b3RlYXJnLm00IHNlcmlhbCAxCisgZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitAQCAtNDAzLDMyICsxMzg3LDY5IEBACisgICBBQ19UWVBFX01CU1RBVEVfVAorICAgam1fRlVOQ19NQlJUT1dDCisgXSkKKy0jIHJlYWxsb2MubTQgc2VyaWFsIDcKKy1kbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyMgbWJzdGF0ZV90Lm00IHNlcmlhbCA5CisrZG5sIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorIGRubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorIGRubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorIGRubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIAorLWRubCBGcm9tIEppbSBNZXllcmluZy4KKy1kbmwgRGV0ZXJtaW5lIHdoZXRoZXIgcmVhbGxvYyB3b3JrcyB3aGVuIGJvdGggYXJndW1lbnRzIGFyZSAwLgorLWRubCBJZiBpdCBkb2Vzbid0LCBhcnJhbmdlIHRvIHVzZSB0aGUgcmVwbGFjZW1lbnQgZnVuY3Rpb24uCisrIyBGcm9tIFBhdWwgRWdnZXJ0LgorIAorLUFDX0RFRlVOKFtqbV9GVU5DX1JFQUxMT0NdLAorKyMgQmVPUyA1IGhhcyA8d2NoYXIuaD4gYnV0IGRvZXMgbm90IGRlZmluZSBtYnN0YXRlX3QsCisrIyBzbyB5b3UgY2FuJ3QgZGVjbGFyZSBhbiBvYmplY3Qgb2YgdGhhdCB0eXBlLgorKyMgQ2hlY2sgZm9yIHRoaXMgaW5jb21wYXRpYmlsaXR5IHdpdGggU3RhbmRhcmQgQy4KKysKKysjIEFDX1RZUEVfTUJTVEFURV9UCisrIyAtLS0tLS0tLS0tLS0tLS0tLQorK0FDX0RFRlVOKFtBQ19UWVBFX01CU1RBVEVfVF0sCisrICBbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBtYnN0YXRlX3RdLCBhY19jdl90eXBlX21ic3RhdGVfdCwKKysgICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKKysJW0FDX0xBTkdfUFJPR1JBTSgKKysJICAgW0FDX0lOQ0xVREVTX0RFRkFVTFQKKysjCSAgICBpbmNsdWRlIDx3Y2hhci5oPl0sCisrCSAgIFttYnN0YXRlX3QgeDsgcmV0dXJuIHNpemVvZiB4O10pXSwKKysJW2FjX2N2X3R5cGVfbWJzdGF0ZV90PXllc10sCisrCVthY19jdl90eXBlX21ic3RhdGVfdD1ub10pXSkKKysgICBpZiB0ZXN0ICRhY19jdl90eXBlX21ic3RhdGVfdCA9IHllczsgdGhlbgorKyAgICAgQUNfREVGSU5FKFtIQVZFX01CU1RBVEVfVF0sIDEsCisrCSAgICAgICBbRGVmaW5lIHRvIDEgaWYgPHdjaGFyLmg+IGRlY2xhcmVzIG1ic3RhdGVfdC5dKQorKyAgIGVsc2UKKysgICAgIEFDX0RFRklORShbbWJzdGF0ZV90XSwgaW50LAorKwkgICAgICAgW0RlZmluZSB0byBhIHR5cGUgaWYgPHdjaGFyLmg+IGRvZXMgbm90IGRlZmluZS5dKQorKyAgIGZpXSkKKysKKysjIG1icnRvd2MubTQgc2VyaWFsIDUKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydAorKworK2RubCBUaGlzIGZpbGUgY2FuIGJlIHJlbW92ZWQsIGFuZCBqbV9GVU5DX01CUlRPV0MgcmVwbGFjZWQgd2l0aAorK2RubCBBQ19GVU5DX01CUlRPV0MsIHdoZW4gYXV0b2NvbmYgMi41NyBjYW4gYmUgYXNzdW1lZCBldmVyeXdoZXJlLgorKworK0FDX0RFRlVOKFtqbV9GVU5DX01CUlRPV0NdLAorIFsKKy0gIEFDX1JFUVVJUkUoW0FDX0ZVTkNfUkVBTExPQ10pCistICBkbmwgYXV0b2NvbmYgPCAyLjU3IHVzZWQgdGhlIHN5bWJvbCBhY19jdl9mdW5jX3JlYWxsb2Nfd29ya3MuCistICBpZiB0ZXN0IFgiJGFjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGwiID0gWG5vIHx8IHRlc3QgWCIkYWNfY3ZfZnVuY19yZWFsbG9jX3dvcmtzIiA9IFhubzsgdGhlbgorLSAgICBnbF9QUkVSRVFfUkVBTExPQworKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgbWJydG93YyBhbmQgbWJzdGF0ZV90IGFyZSBwcm9wZXJseSBkZWNsYXJlZF0sCisrICAgIGptX2N2X2Z1bmNfbWJydG93YywKKysgICAgW0FDX1RSWV9MSU5LKAorKyAgICAgICBbI2luY2x1ZGUgPHdjaGFyLmg+XSwKKysgICAgICAgW21ic3RhdGVfdCBzdGF0ZTsgcmV0dXJuICEgKHNpemVvZiBzdGF0ZSAmJiBtYnJ0b3djKTtdLAorKyAgICAgICBqbV9jdl9mdW5jX21icnRvd2M9eWVzLAorKyAgICAgICBqbV9jdl9mdW5jX21icnRvd2M9bm8pXSkKKysgIGlmIHRlc3QgJGptX2N2X2Z1bmNfbWJydG93YyA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoSEFWRV9NQlJUT1dDLCAxLAorKyAgICAgIFtEZWZpbmUgdG8gMSBpZiBtYnJ0b3djIGFuZCBtYnN0YXRlX3QgYXJlIHByb3Blcmx5IGRlY2xhcmVkLl0pCisgICBmaQorIF0pCisgCistIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9yZWFsbG9jLmMuCistQUNfREVGVU4oW2dsX1BSRVJFUV9SRUFMTE9DXSwgWworLSAgOgorLV0pCistIyBybWRpci5tNCBzZXJpYWwgMQorKyMgaGFzaC5tNCBzZXJpYWwgMQorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorIGRubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKK0BAIC00MzYsMTggKzE0NTcsNzEgQEAKKyBkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKyBkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyAKKy1BQ19ERUZVTihbZ2xfRlVOQ19STURJUl0sCisrQUNfREVGVU4oW2dsX0hBU0hdLAorIFsKKy0gIEFDX1JFUExBQ0VfRlVOQ1Mocm1kaXIpCistICBpZiB0ZXN0ICRhY19jdl9mdW5jX3JtZGlyID0gbm87IHRoZW4KKy0gICAgZ2xfUFJFUkVRX1JNRElSCistICBmaQorKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL2hhc2guYy4KKysgIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdGRsaWIuaCkKKysgIEFDX0hFQURFUl9TVERCT09MCisrICBBQ19DSEVDS19ERUNMU19PTkNFKGZyZWUgbWFsbG9jKQorIF0pCisgCistIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9ybWRpci5jLgorLUFDX0RFRlVOKFtnbF9QUkVSRVFfUk1ESVJdLCBbCistICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1RBVF0pCistICA6CisrQUNfREVGVU4oW2FnX0NIRUNLX05BTk9TRUNPTkRfU1RBVF0sCisrICBbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBuYW5vc2Vjb25kIHRpbWVzdGFtcHMgaW4gc3RydWN0IHN0YXRdLAorKyAgICAgW2FjX2N2X3N0YXRfbnNlY10sCisrICAgICBbQUNfVFJZX0NPTVBJTEUoCisrCVsKKysJICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCSAgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrCSAgI2luY2x1ZGUgPHVuaXN0ZC5oPgorKwkgIHN0cnVjdCBzdGF0IHN0OworKwldLAorKwlbIHJldHVybiBzdC5zdF9hdGltZW5zZWMgKyBzdC5zdF9tdGltZW5zZWMgKyBzdC5zdF9jdGltZW5zZWM7IF0sCisrCVthY19jdl9zdGF0X25zZWM9eWVzXSwKKysJW2FjX2N2X3N0YXRfbnNlYz1ub10pCisrICAgICBdKQorKyAgIGlmIHRlc3QgJGFjX2N2X3N0YXRfbnNlYyA9IHllczsgdGhlbgorKyAgICAgQUNfREVGSU5FKEhBVkVfU1RBVF9OU0VDLCAxLCBbRGVmaW5lIHRvIDEgaWYgc3RydWN0IHN0YXQgaGFzIG5hbm9zZWNvbmQgdGltZXN0YW1wcy5dKQorKyAgIGZpCisrCisrICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBuYW5vc2Vjb25kIHRpbWVzdGFtcHMgaW4gc3RydWN0IHN0YXRdLAorKyAgICAgW2FjX2N2X3N0YXRfdGltZXZhbF0sCisrICAgICBbQUNfVFJZX0NPTVBJTEUoCisrCVsKKysJICAjaW5jbHVkZSA8dGltZS5oPgorKwkgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysJICAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysJICAjaW5jbHVkZSA8dW5pc3RkLmg+CisrCSAgc3RydWN0IHN0YXQgc3Q7CisrCV0sCisrCVsgcmV0dXJuIHN0LnN0X2F0aW0udHZfbnNlYyArIHN0LnN0X210aW0udHZfbnNlYyArIHN0LnN0X2N0aW0udHZfbnNlYzsgXSwKKysJW2FjX2N2X3N0YXRfdGltZXZhbD15ZXNdLAorKwlbYWNfY3Zfc3RhdF90aW1ldmFsPW5vXSkKKysgICAgIF0pCisrICAgaWYgdGVzdCAkYWNfY3Zfc3RhdF90aW1ldmFsID0geWVzOyB0aGVuCisrICAgICBBQ19ERUZJTkUoSEFWRV9TVEFUX1RJTUVWQUwsIDEsIFtEZWZpbmUgdG8gMSBpZiBzdHJ1Y3Qgc3RhdCBjb210YWlucyBzdHJ1Y3QgdGltZXZhbCdzLl0pCisrICAgZmldKQorKworKyNzZXJpYWwgNyAtKi0gYXV0b2NvbmYgLSotCisrCisrZG5sIEZyb20gSmltIE1leWVyaW5nLgorK2RubAorK2RubCBTZWUgaWYgdGhlIGdsaWJjICpfdW5sb2NrZWQgSS9PIG1hY3JvcyBvciBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZS4KKytkbmwgVXNlIG9ubHkgdGhvc2UgKl91bmxvY2tlZCBtYWNyb3Mgb3IgZnVuY3Rpb25zIHRoYXQgYXJlIGRlY2xhcmVkCisrZG5sIChiZWNhdXNlIHNvbWUgb2YgdGhlbSB3ZXJlIGRlY2xhcmVkIGluIFNvbGFyaXMgMi41LjEgYnV0IHdlcmUgcmVtb3ZlZAorK2RubCBpbiBTb2xhcmlzIDIuNiwgd2hlcmVhcyB3ZSB3YW50IGJpbmFyaWVzIGJ1aWx0IG9uIFNvbGFyaXMgMi41LjEgdG8gcnVuCisrZG5sIG9uIFNvbGFyaXMgMi42KS4KKysKKytBQ19ERUZVTihbam1fRlVOQ19HTElCQ19VTkxPQ0tFRF9JT10sCisrWworKyAgZG5sIFBlcnN1YWRlIGdsaWJjIDxzdGRpby5oPiB0byBkZWNsYXJlIGZnZXRzX3VubG9ja2VkKCksIGZwdXRzX3VubG9ja2VkKCkKKysgIGRubCBldGMuCisrICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysKKysgIEFDX0NIRUNLX0RFQ0xTX09OQ0UoCisrICAgICBbY2xlYXJlcnJfdW5sb2NrZWQgZmVvZl91bmxvY2tlZCBmZXJyb3JfdW5sb2NrZWQKKysgICAgICBmZmx1c2hfdW5sb2NrZWQgZmdldHNfdW5sb2NrZWQgZnB1dGNfdW5sb2NrZWQgZnB1dHNfdW5sb2NrZWQKKysgICAgICBmcmVhZF91bmxvY2tlZCBmd3JpdGVfdW5sb2NrZWQgZ2V0Y191bmxvY2tlZAorKyAgICAgIGdldGNoYXJfdW5sb2NrZWQgcHV0Y191bmxvY2tlZCBwdXRjaGFyX3VubG9ja2VkXSkKKyBdKQorIAorICMgQ2hlY2sgZm9yIHNldG1vZGUsIERPUyBzdHlsZS4KK0BAIC00ODgsMTgwICsxNTYyLDM5IEBACisgICAgICBBQ19ERUZJTkUoSEFWRV9TRVRNT0RFX0RPUywgMSwKKyAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBET1Mtc3R5bGUgYHNldG1vZGUnIGZ1bmN0aW9uLl0pCisgICAgZmldKQorLSMgQ2hlY2sgZm9yIHN0ZGJvb2wuaCB0aGF0IGNvbmZvcm1zIHRvIEM5OS4KKy0KKy0jIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0jIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorLSMgMDIxMTEtMTMwNywgVVNBLgorLQorLSMgUHJlcGFyZSBmb3Igc3Vic3RpdHV0aW5nIDxzdGRib29sLmg+IGlmIGl0IGlzIG5vdCBzdXBwb3J0ZWQuCistCistQUNfREVGVU4oW0FNX1NUREJPT0xfSF0sCistWworLSAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NUREJPT0xdKQorLQorLSAgIyBEZWZpbmUgdHdvIGFkZGl0aW9uYWwgdmFyaWFibGVzIHVzZWQgaW4gdGhlIE1ha2VmaWxlIHN1YnN0aXR1dGlvbi4KKy0KKy0gIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfc3RkYm9vbF9oIiA9IHllczsgdGhlbgorLSAgICBTVERCT09MX0g9JycKKy0gIGVsc2UKKy0gICAgU1REQk9PTF9IPSdzdGRib29sLmgnCistICBmaQorLSAgQUNfU1VCU1QoW1NUREJPT0xfSF0pCistCistICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9fQm9vbCIgPSB5ZXM7IHRoZW4KKy0gICAgSEFWRV9fQk9PTD0xCistICBlbHNlCistICAgIEhBVkVfX0JPT0w9MAorLSAgZmkKKy0gIEFDX1NVQlNUKFtIQVZFX19CT09MXSkKKy1dKQorLQorLSMgVGhpcyBtYWNybyBpcyBvbmx5IG5lZWRlZCBpbiBhdXRvY29uZiA8PSAyLjU0LiAgTmV3ZXIgdmVyc2lvbnMgb2YgYXV0b2NvbmYKKy0jIGhhdmUgdGhpcyBtYWNybyBidWlsdC1pbi4KKy0KKy1BQ19ERUZVTihbQUNfSEVBREVSX1NUREJPT0xdLAorLSAgW0FDX0NBQ0hFX0NIRUNLKFtmb3Igc3RkYm9vbC5oIHRoYXQgY29uZm9ybXMgdG8gQzk5XSwKKy0gICAgIFthY19jdl9oZWFkZXJfc3RkYm9vbF9oXSwKKy0gICAgIFtBQ19UUllfQ09NUElMRSgKKy0JWworLQkgICNpbmNsdWRlIDxzdGRib29sLmg+CistCSAgI2lmbmRlZiBib29sCistCSAgICJlcnJvcjogYm9vbCBpcyBub3QgZGVmaW5lZCIKKy0JICAjZW5kaWYKKy0JICAjaWZuZGVmIGZhbHNlCistCSAgICJlcnJvcjogZmFsc2UgaXMgbm90IGRlZmluZWQiCistCSAgI2VuZGlmCistCSAgI2lmIGZhbHNlCistCSAgICJlcnJvcjogZmFsc2UgaXMgbm90IDAiCistCSAgI2VuZGlmCistCSAgI2lmbmRlZiB0cnVlCistCSAgICJlcnJvcjogZmFsc2UgaXMgbm90IGRlZmluZWQiCistCSAgI2VuZGlmCistCSAgI2lmIHRydWUgIT0gMQorLQkgICAiZXJyb3I6IHRydWUgaXMgbm90IDEiCistCSAgI2VuZGlmCistCSAgI2lmbmRlZiBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZAorLQkgICAiZXJyb3I6IF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkIGlzIG5vdCBkZWZpbmVkIgorLQkgICNlbmRpZgorLQorLQkgIHN0cnVjdCBzIHsgX0Jvb2wgczogMTsgX0Jvb2wgdDsgfSBzOworLQorLQkgIGNoYXIgYVt0cnVlID09IDEgPyAxIDogLTFdOworLQkgIGNoYXIgYltmYWxzZSA9PSAwID8gMSA6IC0xXTsKKy0JICBjaGFyIGNbX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgPT0gMSA/IDEgOiAtMV07CistCSAgY2hhciBkWyhib29sKSAtMC41ID09IHRydWUgPyAxIDogLTFdOworLQkgIGJvb2wgZSA9ICZzOworLQkgIGNoYXIgZlsoX0Jvb2wpIC0wLjAgPT0gZmFsc2UgPyAxIDogLTFdOworLQkgIGNoYXIgZ1t0cnVlXTsKKy0JICBjaGFyIGhbc2l6ZW9mIChfQm9vbCldOworLQkgIGNoYXIgaVtzaXplb2Ygcy50XTsKKy0JXSwKKy0JWyByZXR1cm4gIWEgKyAhYiArICFjICsgIWQgKyAhZSArICFmICsgIWcgKyAhaCArICFpOyBdLAorLQlbYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaD15ZXNdLAorLQlbYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaD1ub10pXSkKKy0gICBBQ19DSEVDS19UWVBFUyhbX0Jvb2xdKQorLSAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRib29sX2ggPSB5ZXM7IHRoZW4KKy0gICAgIEFDX0RFRklORShIQVZFX1NUREJPT0xfSCwgMSwgW0RlZmluZSB0byAxIGlmIHN0ZGJvb2wuaCBjb25mb3JtcyB0byBDOTkuXSkKKy0gICBmaV0pCistI3NlcmlhbCA3IC0qLSBhdXRvY29uZiAtKi0KKy0KKy1kbmwgRnJvbSBKaW0gTWV5ZXJpbmcuCistZG5sCistZG5sIFNlZSBpZiB0aGUgZ2xpYmMgKl91bmxvY2tlZCBJL08gbWFjcm9zIG9yIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlLgorLWRubCBVc2Ugb25seSB0aG9zZSAqX3VubG9ja2VkIG1hY3JvcyBvciBmdW5jdGlvbnMgdGhhdCBhcmUgZGVjbGFyZWQKKy1kbmwgKGJlY2F1c2Ugc29tZSBvZiB0aGVtIHdlcmUgZGVjbGFyZWQgaW4gU29sYXJpcyAyLjUuMSBidXQgd2VyZSByZW1vdmVkCistZG5sIGluIFNvbGFyaXMgMi42LCB3aGVyZWFzIHdlIHdhbnQgYmluYXJpZXMgYnVpbHQgb24gU29sYXJpcyAyLjUuMSB0byBydW4KKy1kbmwgb24gU29sYXJpcyAyLjYpLgorLQorLUFDX0RFRlVOKFtqbV9GVU5DX0dMSUJDX1VOTE9DS0VEX0lPXSwKKy1bCistICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHN0ZGlvLmg+IHRvIGRlY2xhcmUgZmdldHNfdW5sb2NrZWQoKSwgZnB1dHNfdW5sb2NrZWQoKQorLSAgZG5sIGV0Yy4KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorLQorLSAgQUNfQ0hFQ0tfREVDTFNfT05DRSgKKy0gICAgIFtjbGVhcmVycl91bmxvY2tlZCBmZW9mX3VubG9ja2VkIGZlcnJvcl91bmxvY2tlZAorLSAgICAgIGZmbHVzaF91bmxvY2tlZCBmZ2V0c191bmxvY2tlZCBmcHV0Y191bmxvY2tlZCBmcHV0c191bmxvY2tlZAorLSAgICAgIGZyZWFkX3VubG9ja2VkIGZ3cml0ZV91bmxvY2tlZCBnZXRjX3VubG9ja2VkCistICAgICAgZ2V0Y2hhcl91bmxvY2tlZCBwdXRjX3VubG9ja2VkIHB1dGNoYXJfdW5sb2NrZWRdKQorLV0pCistI3NlcmlhbCA1CistCistZG5sIEZyb20gSmltIE1leWVyaW5nCistCistZG5sIERlZmluZSBIQVZFX1NUUlVDVF9VVElNQlVGIGlmIGBzdHJ1Y3QgdXRpbWJ1ZicgaXMgZGVjbGFyZWQgLS0KKy1kbmwgdXN1YWxseSBpbiA8dXRpbWUuaD4uCistZG5sIFNvbWUgc3lzdGVtcyBoYXZlIHV0aW1lLmggYnV0IGRvbid0IGRlY2xhcmUgdGhlIHN0cnVjdCBhbnl3aGVyZS4KKy0KKy1BQ19ERUZVTihbam1fQ0hFQ0tfVFlQRV9TVFJVQ1RfVVRJTUJVRl0sCistWworLSAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHN5cy90aW1lLmggdXRpbWUuaCkKKy0gIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9USU1FXSkKKy0gIEFDX0NBQ0hFX0NIRUNLKFtmb3Igc3RydWN0IHV0aW1idWZdLCBmdV9jdl9zeXNfc3RydWN0X3V0aW1idWYsCistICAgIFtBQ19UUllfQ09NUElMRSgKKy0gICAgICBbCistI2lmZGVmIFRJTUVfV0lUSF9TWVNfVElNRQorLSMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKy0jIGluY2x1ZGUgPHRpbWUuaD4KKy0jZWxzZQorLSMgaWZkZWYgSEFWRV9TWVNfVElNRV9ICistIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKy0jIGVsc2UKKy0jICBpbmNsdWRlIDx0aW1lLmg+CistIyBlbmRpZgorLSNlbmRpZgorLSNpZmRlZiBIQVZFX1VUSU1FX0gKKy0jIGluY2x1ZGUgPHV0aW1lLmg+CistI2VuZGlmCistICAgICAgXSwKKy0gICAgICBbc3RhdGljIHN0cnVjdCB1dGltYnVmIHg7IHguYWN0aW1lID0geC5tb2R0aW1lO10sCistICAgICAgZnVfY3Zfc3lzX3N0cnVjdF91dGltYnVmPXllcywKKy0gICAgICBmdV9jdl9zeXNfc3RydWN0X3V0aW1idWY9bm8pCistICAgIF0pCisgCistICBpZiB0ZXN0ICRmdV9jdl9zeXNfc3RydWN0X3V0aW1idWYgPSB5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKEhBVkVfU1RSVUNUX1VUSU1CVUYsIDEsCistICAgICAgW0RlZmluZSBpZiBzdHJ1Y3QgdXRpbWJ1ZiBpcyBkZWNsYXJlZCAtLSB1c3VhbGx5IGluIDx1dGltZS5oPi4KKy0gICAgICAgU29tZSBzeXN0ZW1zIGhhdmUgdXRpbWUuaCBidXQgZG9uJ3QgZGVjbGFyZSB0aGUgc3RydWN0IGFueXdoZXJlLiBdKQorLSAgZmkKKy1dKQorLSMgeGFsbG9jLm00IHNlcmlhbCAxCistZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCistZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorLWRubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorLWRubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorLWRubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKyNzZXJpYWwgMQorIAorLUFDX0RFRlVOKFtnbF9YQUxMT0NdLAorLVsKKy0gIGdsX1BSRVJFUV9YTUFMTE9DCistICBnbF9QUkVSRVFfWFNUUkRVUAorLV0pCisrZG5sIEZyb20gTXVtaXQgS2hhbiBhbmQgUGF1bCBFZ2dlcnQKKytkbmwgRGV0ZXJtaW5lIHdoZXRoZXIgbWtkaXIgYWNjZXB0cyBvbmx5IG9uZSBhcmd1bWVudCBpbnN0ZWFkIG9mIHRoZSB1c3VhbCB0d28uCisgCistIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi94bWFsbG9jLmMuCistQUNfREVGVU4oW2dsX1BSRVJFUV9YTUFMTE9DXSwgWworLSAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKQorLSAgQUNfUkVRVUlSRShbam1fRlVOQ19NQUxMT0NdKQorLSAgQUNfUkVRVUlSRShbam1fRlVOQ19SRUFMTE9DXSkKKy1dKQorK0FDX0RFRlVOKFtQQVRDSF9GVU5DX01LRElSX1RBS0VTX09ORV9BUkddLAorKyAgW0FDX0NIRUNLX0ZVTkNTKG1rZGlyKQorKyAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIG1rZGlyIHRha2VzIG9ubHkgb25lIGFyZ3VtZW50XSwKKysgICAgIHBhdGNoX2N2X21rZGlyX3Rha2VzX29uZV9hcmcsCisrICAgICBbcGF0Y2hfY3ZfbWtkaXJfdGFrZXNfb25lX2FyZz1ubworKyAgICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWtkaXIgPSB5ZXM7IHRoZW4KKysgICAgICAgIEFDX1RSWV9DT01QSUxFKFsKKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrCSAgXSwKKysJICBbbWtkaXIgKCIuIiwgMCk7XSwKKysJICAsCisrCSAgW0FDX1RSWV9DT01QSUxFKFsKKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrCSAgICAgXSwKKysJICAgICBbbWtkaXIgKCIuIik7XSwKKysJICAgICBwYXRjaF9jdl9ta2Rpcl90YWtlc19vbmVfYXJnPXllcworKwkgICldCisrCSkKKysgICAgICBmaQorKyAgICAgXQorKyAgICkKKysgICBpZiB0ZXN0ICRwYXRjaF9jdl9ta2Rpcl90YWtlc19vbmVfYXJnID0geWVzOyB0aGVuCisrICAgICBBQ19ERUZJTkUoW01LRElSX1RBS0VTX09ORV9BUkddLCAxLAorKyAgICAgICBbRGVmaW5lIGlmIG1rZGlyIHRha2VzIG9ubHkgb25lIGFyZ3VtZW50Ll0pCisrICAgZmkKKysgIF0KKyspCisgCistIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi94c3RyZHVwLmMuCistQUNfREVGVU4oW2dsX1BSRVJFUV9YU1RSRFVQXSwgWworLSAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKQorLSAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHN0cmluZy5oKQorLV0pCistLS0gcGF0Y2gtMi41Ljkub3JpZy9jb25maWd1cmUKKysrKyBwYXRjaC0yLjUuOS9jb25maWd1cmUKK0BAIC0xLDExICsxLDEwIEBACisgIyEgL2Jpbi9zaAorICMgR3Vlc3MgdmFsdWVzIGZvciBzeXN0ZW0tZGVwZW5kZW50IHZhcmlhYmxlcyBhbmQgY3JlYXRlIE1ha2VmaWxlcy4KKy0jIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41NyBmb3IgcGF0Y2ggMi41LjkuCisrIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkgZm9yIHBhdGNoIDIuNS45LgorICMKKyAjIFJlcG9ydCBidWdzIHRvIDxidWctcGF0Y2hAZ251Lm9yZz4uCisgIworLSMgQ29weXJpZ2h0IDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIKKy0jIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICMgVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKyAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK0BAIC0yMiw5ICsyMSwxMCBAQAorIGVsaWYgdGVzdCAtbiAiJHtCQVNIX1ZFUlNJT04rc2V0fSIgJiYgKHNldCAtbyBwb3NpeCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICBzZXQgLW8gcG9zaXgKKyBmaQorK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKKyAKKyAjIFN1cHBvcnQgdW5zZXQgd2hlbiBwb3NzaWJsZS4KKy1pZiAoRk9PPUZPTzsgdW5zZXQgRk9PKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKytpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgIGFzX3Vuc2V0PXVuc2V0CisgZWxzZQorICAgYXNfdW5zZXQ9ZmFsc2UKK0BAIC00Myw3ICs0Myw3IEBACisgICBMQ19NRUFTVVJFTUVOVCBMQ19NRVNTQUdFUyBMQ19NT05FVEFSWSBMQ19OQU1FIExDX05VTUVSSUMgTENfUEFQRVIgXAorICAgTENfVEVMRVBIT05FIExDX1RJTUUKKyBkbworLSAgaWYgKHNldCAreDsgdGVzdCAtbiAiYChldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIpIDI+JjFgIik7IHRoZW4KKysgIGlmIChzZXQgK3g7IHRlc3QgLXogImAoZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyKSAyPiYxYCIpOyB0aGVuCisgICAgIGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcgorICAgZWxzZQorICAgICAkYXNfdW5zZXQgJGFzX3ZhcgorQEAgLTIyMCwxNiArMjIwLDE3IEBACisgaWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgorICAgYXNfbWtkaXJfcD06CisgZWxzZQorKyAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKyAgIGFzX21rZGlyX3A9ZmFsc2UKKyBmaQorIAorIGFzX2V4ZWN1dGFibGVfcD0idGVzdCAtZiIKKyAKKyAjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCistYXNfdHJfY3BwPSJzZWQgeSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnIgorK2FzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisgCisgIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuCistYXNfdHJfc2g9InNlZCB5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnIgorK2FzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisgCisgCisgIyBJRlMKK0BAIC02NjksNyArNjcwLDcgQEAKKyAKKyAjIEJlIHN1cmUgdG8gaGF2ZSBhYnNvbHV0ZSBwYXRocy4KKyBmb3IgYWNfdmFyIGluIGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIFwKKy0gICAgICAgICAgICAgIGxvY2Fsc3RhdGVkaXIgbGliZGlyIGluY2x1ZGVkaXIgb2xkaW5jbHVkZWRpciBpbmZvZGlyIG1hbmRpcgorKwkgICAgICBsb2NhbHN0YXRlZGlyIGxpYmRpciBpbmNsdWRlZGlyIG9sZGluY2x1ZGVkaXIgaW5mb2RpciBtYW5kaXIKKyBkbworICAgZXZhbCBhY192YWw9JGBlY2hvICRhY192YXJgCisgICBjYXNlICRhY192YWwgaW4KK0BAIC03MDksMTAgKzcxMCwxMCBAQAorICAgIyBUcnkgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgc2NyaXB0LCB0aGVuIGl0cyBwYXJlbnQuCisgICBhY19jb25mZGlyPWAoZGlybmFtZSAiJDAiKSAyPi9kZXYvbnVsbCB8fAorICRhc19leHByIFgiJDAiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCistICAgICAgICAgWCIkMCIgOiAnWFwoLy9cKVteL10nIFx8IFwKKy0gICAgICAgICBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAorLSAgICAgICAgIFgiJDAiIDogJ1hcKC9cKScgXHwgXAorLSAgICAgICAgIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorKwkgWCIkMCIgOiAnWFwoLy9cKVteL10nIFx8IFwKKysJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCisrCSBYIiQwIiA6ICdYXCgvXCknIFx8IFwKKysJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorIGVjaG8gWCIkMCIgfAorICAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CitAQCAtODA0LDkgKzgwNSw5IEBACisgICBjYXQgPDxfQUNFT0YKKyBJbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6CisgICAtLXByZWZpeD1QUkVGSVggICAgICAgICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBmaWxlcyBpbiBQUkVGSVgKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIFskYWNfZGVmYXVsdF9wcmVmaXhdCisrCQkJICBbJGFjX2RlZmF1bHRfcHJlZml4XQorICAgLS1leGVjLXByZWZpeD1FUFJFRklYICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGZpbGVzIGluIEVQUkVGSVgKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIFtQUkVGSVhdCisrCQkJICBbUFJFRklYXQorIAorIEJ5IGRlZmF1bHQsIFxgbWFrZSBpbnN0YWxsJyB3aWxsIGluc3RhbGwgYWxsIHRoZSBmaWxlcyBpbgorIFxgJGFjX2RlZmF1bHRfcHJlZml4L2JpbicsIFxgJGFjX2RlZmF1bHRfcHJlZml4L2xpYicgZXRjLiAgWW91IGNhbiBzcGVjaWZ5CitAQCAtODk2LDEyICs4OTcsNDUgQEAKKyAgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRkaXIkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciA7OworIGVzYWMKKy0jIERvbid0IGJsaW5kbHkgcGVyZm9ybSBhIGBjZCAiJGFjX2RpciIvJGFjX2ZvbyAmJiBwd2RgIHNpbmNlICRhY19mb28gY2FuIGJlCistIyBhYnNvbHV0ZS4KKy1hY19hYnNfYnVpbGRkaXI9YGNkICIkYWNfZGlyIiAmJiBjZCAkYWNfYnVpbGRkaXIgJiYgcHdkYAorLWFjX2Fic190b3BfYnVpbGRkaXI9YGNkICIkYWNfZGlyIiAmJiBjZCAke2FjX3RvcF9idWlsZGRpcn0uICYmIHB3ZGAKKy1hY19hYnNfc3JjZGlyPWBjZCAiJGFjX2RpciIgJiYgY2QgJGFjX3NyY2RpciAmJiBwd2RgCistYWNfYWJzX3RvcF9zcmNkaXI9YGNkICIkYWNfZGlyIiAmJiBjZCAkYWNfdG9wX3NyY2RpciAmJiBwd2RgCisrCisrIyBEbyBub3QgdXNlIGBjZCBmb28gJiYgcHdkYCB0byBjb21wdXRlIGFic29sdXRlIHBhdGhzLCBiZWNhdXNlCisrIyB0aGUgZGlyZWN0b3JpZXMgbWF5IG5vdCBleGlzdC4KKytjYXNlIGBwd2RgIGluCisrLikgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7CisrKikKKysgIGNhc2UgIiRhY19kaXIiIGluCisrICAuKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGA7OworKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKKysgICopIGFjX2Fic19idWlsZGRpcj1gcHdkYC8iJGFjX2RpciI7OworKyAgZXNhYzs7CisrZXNhYworK2Nhc2UgJGFjX2Fic19idWlsZGRpciBpbgorKy4pIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7CisrKikKKysgIGNhc2UgJHthY190b3BfYnVpbGRkaXJ9LiBpbgorKyAgLikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKKysgICopIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpci8ke2FjX3RvcF9idWlsZGRpcn0uOzsKKysgIGVzYWM7OworK2VzYWMKKytjYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKysuKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OworKyopCisrICBjYXNlICRhY19zcmNkaXIgaW4KKysgIC4pIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7CisrICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7CisrICAqKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3NyY2Rpcjs7CisrICBlc2FjOzsKKytlc2FjCisrY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCisrLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OworKyopCisrICBjYXNlICRhY190b3Bfc3JjZGlyIGluCisrICAuKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OworKyAgKikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfdG9wX3NyY2Rpcjs7CisrICBlc2FjOzsKKytlc2FjCisgCisgICAgIGNkICRhY19kaXIKKyAgICAgIyBDaGVjayBmb3IgZ3Vlc3RlZCBjb25maWd1cmU7IG90aGVyd2lzZSBnZXQgQ3lnbnVzIHN0eWxlIGNvbmZpZ3VyZS4KK0BAIC05MTIsMTMgKzk0NiwxMyBAQAorICAgICAgIGVjaG8KKyAgICAgICAkU0hFTEwgJGFjX3NyY2Rpci9jb25maWd1cmUgIC0taGVscD1yZWN1cnNpdmUKKyAgICAgZWxpZiB0ZXN0IC1mICRhY19zcmNkaXIvY29uZmlndXJlLmFjIHx8CistICAgICAgICAgICB0ZXN0IC1mICRhY19zcmNkaXIvY29uZmlndXJlLmluOyB0aGVuCisrCSAgIHRlc3QgLWYgJGFjX3NyY2Rpci9jb25maWd1cmUuaW47IHRoZW4KKyAgICAgICBlY2hvCisgICAgICAgJGFjX2NvbmZpZ3VyZSAtLWhlbHAKKyAgICAgZWxzZQorICAgICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfZGlyIiA+JjIKKyAgICAgZmkKKy0gICAgY2QgJGFjX3BvcGRpcgorKyAgICBjZCAiJGFjX3BvcGRpciIKKyAgIGRvbmUKKyBmaQorIAorQEAgLTkyNiwxMCArOTYwLDkgQEAKKyBpZiAkYWNfaW5pdF92ZXJzaW9uOyB0aGVuCisgICBjYXQgPDxcX0FDRU9GCisgcGF0Y2ggY29uZmlndXJlIDIuNS45CistZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU3CisrZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU5CisgCistQ29weXJpZ2h0IDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIKKy1GcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCisgX0FDRU9GCitAQCAtOTQxLDcgKzk3NCw3IEBACisgcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2VzIGEgbWlzdGFrZS4KKyAKKyBJdCB3YXMgY3JlYXRlZCBieSBwYXRjaCAkYXNfbWUgMi41LjksIHdoaWNoIHdhcworLWdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41Ny4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworIAorICAgJCAkMCAkQAorIAorQEAgLTEwMTgsMTkgKzEwNTEsMTkgQEAKKyAgICAgMikKKyAgICAgICBhY19jb25maWd1cmVfYXJnczE9IiRhY19jb25maWd1cmVfYXJnczEgJyRhY19hcmcnIgorICAgICAgIGlmIHRlc3QgJGFjX211c3Rfa2VlcF9uZXh0ID0gdHJ1ZTsgdGhlbgorLSAgICAgICAgYWNfbXVzdF9rZWVwX25leHQ9ZmFsc2UgIyBHb3QgdmFsdWUsIGJhY2sgdG8gbm9ybWFsLgorKwlhY19tdXN0X2tlZXBfbmV4dD1mYWxzZSAjIEdvdCB2YWx1ZSwgYmFjayB0byBub3JtYWwuCisgICAgICAgZWxzZQorLSAgICAgICAgY2FzZSAkYWNfYXJnIGluCistICAgICAgICAgICo9KiB8IC0tY29uZmlnLWNhY2hlIHwgLUMgfCAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSogXAorLSAgICAgICAgICB8IC1lbmFibGUtKiB8IC0tZW5hYmxlLSogfCAtZ2FzIHwgLS1nKiB8IC1uZnAgfCAtLW5mKiBcCistICAgICAgICAgIHwgLXEgfCAtcXVpZXQgfCAtLXEqIHwgLXNpbGVudCB8IC0tc2lsKiB8IC12IHwgLXZlcmIqIFwKKy0gICAgICAgICAgfCAtd2l0aC0qIHwgLS13aXRoLSogfCAtd2l0aG91dC0qIHwgLS13aXRob3V0LSogfCAtLXgpCistICAgICAgICAgICAgY2FzZSAiJGFjX2NvbmZpZ3VyZV9hcmdzMCAiIGluCistICAgICAgICAgICAgICAiJGFjX2NvbmZpZ3VyZV9hcmdzMSIqIiAnJGFjX2FyZycgIiogKSBjb250aW51ZSA7OworLSAgICAgICAgICAgIGVzYWMKKy0gICAgICAgICAgICA7OworLSAgICAgICAgICAtKiApIGFjX211c3Rfa2VlcF9uZXh0PXRydWUgOzsKKy0gICAgICAgIGVzYWMKKysJY2FzZSAkYWNfYXJnIGluCisrCSAgKj0qIHwgLS1jb25maWctY2FjaGUgfCAtQyB8IC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKiBcCisrCSAgfCAtZW5hYmxlLSogfCAtLWVuYWJsZS0qIHwgLWdhcyB8IC0tZyogfCAtbmZwIHwgLS1uZiogXAorKwkgIHwgLXEgfCAtcXVpZXQgfCAtLXEqIHwgLXNpbGVudCB8IC0tc2lsKiB8IC12IHwgLXZlcmIqIFwKKysJICB8IC13aXRoLSogfCAtLXdpdGgtKiB8IC13aXRob3V0LSogfCAtLXdpdGhvdXQtKiB8IC0teCkKKysJICAgIGNhc2UgIiRhY19jb25maWd1cmVfYXJnczAgIiBpbgorKwkgICAgICAiJGFjX2NvbmZpZ3VyZV9hcmdzMSIqIiAnJGFjX2FyZycgIiogKSBjb250aW51ZSA7OworKwkgICAgZXNhYworKwkgICAgOzsKKysJICAtKiApIGFjX211c3Rfa2VlcF9uZXh0PXRydWUgOzsKKysJZXNhYworICAgICAgIGZpCisgICAgICAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyRhY19zZXAnJGFjX2FyZyciCisgICAgICAgIyBHZXQgcmlkIG9mIHRoZSBsZWFkaW5nIHNwYWNlLgorQEAgLTEwNjQsMTIgKzEwOTcsMTIgQEAKKyAgICAgY2FzZSBgKGFjX3NwYWNlPSciJyInICciJyInOyBzZXQgfCBncmVwIGFjX3NwYWNlKSAyPiYxYCBpbgorICAgICAqYWNfc3BhY2U9XCAqKQorICAgICAgIHNlZCAtbiBcCistICAgICAgICAicy8nIiciJy8nIiciJ1xcXFwnIiciJyciJyInL2c7CistICAgIAkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9JyInIidcXDInIiciJy9wIgorKwkicy8nIiciJy8nIiciJ1xcXFwnIiciJyciJyInL2c7CisrCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nIiciJ1xcMiciJyInL3AiCisgICAgICAgOzsKKyAgICAgKikKKyAgICAgICBzZWQgLW4gXAorLSAgICAgICAgInMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9XFwyL3AiCisrCSJzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPVxcMi9wIgorICAgICAgIDs7CisgICAgIGVzYWM7CisgfQorQEAgLTEwOTgsNyArMTEzMSw3IEBACisgICAgICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfZmlsZXMKKyAgICAgICBkbworIAlldmFsIGFjX3ZhbD0kYGVjaG8gJGFjX3ZhcmAKKy0gICAgICAgIGVjaG8gIiRhY192YXI9JyInIickYWNfdmFsJyInIiciCisrCWVjaG8gIiRhY192YXI9JyInIickYWNfdmFsJyInIiciCisgICAgICAgZG9uZSB8IHNvcnQKKyAgICAgICBlY2hvCisgICAgIGZpCitAQCAtMTExNyw3ICsxMTUwLDcgQEAKKyAgICAgICBlY2hvICIkYXNfbWU6IGNhdWdodCBzaWduYWwgJGFjX3NpZ25hbCIKKyAgICAgZWNobyAiJGFzX21lOiBleGl0ICRleGl0X3N0YXR1cyIKKyAgIH0gPiY1CistICBybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgJiYKKysgIHJtIC1mIGNvcmUgKi5jb3JlICYmCisgICBybSAtcmYgY29uZnRlc3QqIGNvbmZkZWZzKiBjb25mJCQqICRhY19jbGVhbl9maWxlcyAmJgorICAgICBleGl0ICRleGl0X3N0YXR1cworICAgICAgJyAwCitAQCAtMTE5Nyw3ICsxMjMwLDcgQEAKKyAjIHZhbHVlLgorIGFjX2NhY2hlX2NvcnJ1cHRlZD1mYWxzZQorIGZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfAorLSAgICAgICAgICAgICAgIHNlZCAtbiAncy9eYWNfZW52X1woW2EtekEtWl8wLTldKlwpX3NldD0uKi9cMS9wJ2A7IGRvCisrCSAgICAgICBzZWQgLW4gJ3MvXmFjX2Vudl9cKFthLXpBLVpfMC05XSpcKV9zZXQ9LiovXDEvcCdgOyBkbworICAgZXZhbCBhY19vbGRfc2V0PVwkYWNfY3ZfZW52XyR7YWNfdmFyfV9zZXQKKyAgIGV2YWwgYWNfbmV3X3NldD1cJGFjX2Vudl8ke2FjX3Zhcn1fc2V0CisgICBldmFsIGFjX29sZF92YWw9IlwkYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZSIKK0BAIC0xMjE0LDEzICsxMjQ3LDEzIEBACisgICAgICwpOzsKKyAgICAgKikKKyAgICAgICBpZiB0ZXN0ICJ4JGFjX29sZF92YWwiICE9ICJ4JGFjX25ld192YWwiOyB0aGVuCistICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1CisrCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKKyBlY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQorLSAgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogICBmb3JtZXIgdmFsdWU6ICAkYWNfb2xkX3ZhbCIgPiY1CisrCXsgZWNobyAiJGFzX21lOiRMSU5FTk86ICAgZm9ybWVyIHZhbHVlOiAgJGFjX29sZF92YWwiID4mNQorIGVjaG8gIiRhc19tZTogICBmb3JtZXIgdmFsdWU6ICAkYWNfb2xkX3ZhbCIgPiYyO30KKy0gICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86ICAgY3VycmVudCB2YWx1ZTogJGFjX25ld192YWwiID4mNQorKwl7IGVjaG8gIiRhc19tZTokTElORU5POiAgIGN1cnJlbnQgdmFsdWU6ICRhY19uZXdfdmFsIiA+JjUKKyBlY2hvICIkYXNfbWU6ICAgY3VycmVudCB2YWx1ZTogJGFjX25ld192YWwiID4mMjt9CistICAgICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OgorKwlhY19jYWNoZV9jb3JydXB0ZWQ9OgorICAgICAgIGZpOzsKKyAgIGVzYWMKKyAgICMgUGFzcyBwcmVjaW91cyB2YXJpYWJsZXMgdG8gY29uZmlnLnN0YXR1cy4KK0BAIC0xNjI5LDcgKzE2NjIsNiBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKyAKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMTY0OSw4ICsxNjgxLDggQEAKKyAjIFRyeSB0byBjcmVhdGUgYW4gZXhlY3V0YWJsZSB3aXRob3V0IC1vIGZpcnN0LCBkaXNyZWdhcmQgYS5vdXQuCisgIyBJdCB3aWxsIGhlbHAgdXMgZGlhZ25vc2UgYnJva2VuIGNvbXBpbGVycywgYW5kIGZpbmRpbmcgb3V0IGFuIGludHVpdGlvbgorICMgb2YgZXhlZXh0LgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dC4uLiAkRUNIT19DIiA+JjYKKytlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZS4uLiAkRUNIT19DIiA+JjYKKyBhY19saW5rX2RlZmF1bHQ9YGVjaG8gIiRhY19saW5rIiB8IHNlZCAncy8gLW8gKmNvbmZ0ZXN0W14gXSovLydgCisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua19kZWZhdWx0XCIiKSA+JjUKKyAgIChldmFsICRhY19saW5rX2RlZmF1bHQpIDI+JjUKK0BAIC0xNjcwLDIzICsxNzAyLDIzIEBACisgICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWUKKyAgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm8gfCAqLm9iaiApCistICAgICAgICA7OworKwk7OworICAgICBjb25mdGVzdC4kYWNfZXh0ICkKKy0gICAgICAgICMgVGhpcyBpcyB0aGUgc291cmNlIGZpbGUuCistICAgICAgICA7OworKwkjIFRoaXMgaXMgdGhlIHNvdXJjZSBmaWxlLgorKwk7OworICAgICBbYWJdLm91dCApCistICAgICAgICAjIFdlIGZvdW5kIHRoZSBkZWZhdWx0IGV4ZWN1dGFibGUsIGJ1dCBleGVleHQ9JycgaXMgbW9zdAorLSAgICAgICAgIyBjZXJ0YWlubHkgcmlnaHQuCistICAgICAgICBicmVhazs7CisrCSMgV2UgZm91bmQgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSwgYnV0IGV4ZWV4dD0nJyBpcyBtb3N0CisrCSMgY2VydGFpbmx5IHJpZ2h0LgorKwlicmVhazs7CisgICAgICouKiApCistICAgICAgICBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKy0gICAgICAgICMgRklYTUU6IEkgYmVsaWV2ZSB3ZSBleHBvcnQgYWNfY3ZfZXhlZXh0IGZvciBMaWJ0b29sLAorLSAgICAgICAgIyBidXQgaXQgd291bGQgYmUgY29vbCB0byBmaW5kIG91dCBpZiBpdCdzIHRydWUuICBEb2VzIGFueWJvZHkKKy0gICAgICAgICMgbWFpbnRhaW4gTGlidG9vbD8gLS1ha2ltLgorLSAgICAgICAgZXhwb3J0IGFjX2N2X2V4ZWV4dAorLSAgICAgICAgYnJlYWs7OworKwlhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKysJIyBGSVhNRTogSSBiZWxpZXZlIHdlIGV4cG9ydCBhY19jdl9leGVleHQgZm9yIExpYnRvb2wsCisrCSMgYnV0IGl0IHdvdWxkIGJlIGNvb2wgdG8gZmluZCBvdXQgaWYgaXQncyB0cnVlLiAgRG9lcyBhbnlib2R5CisrCSMgbWFpbnRhaW4gTGlidG9vbD8gLS1ha2ltLgorKwlleHBvcnQgYWNfY3ZfZXhlZXh0CisrCWJyZWFrOzsKKyAgICAgKiApCistICAgICAgICBicmVhazs7CisrCWJyZWFrOzsKKyAgIGVzYWMKKyBkb25lCisgZWxzZQorQEAgLTE3NjAsOCArMTc5Miw4IEBACisgICBjYXNlICRhY19maWxlIGluCisgICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5vIHwgKi5vYmogKSA7OworICAgICAqLiogKSBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKy0gICAgICAgICAgZXhwb3J0IGFjX2N2X2V4ZWV4dAorLSAgICAgICAgICBicmVhazs7CisrCSAgZXhwb3J0IGFjX2N2X2V4ZWV4dAorKwkgIGJyZWFrOzsKKyAgICAgKiApIGJyZWFrOzsKKyAgIGVzYWMKKyBkb25lCitAQCAtMTc4Niw3ICsxODE4LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTE4MzcsNyArMTg2OCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0xODU3LDExICsxODg3LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMTg3NCw3ICsxOTEzLDcgQEAKKyAKKyBhY19jb21waWxlcl9nbnU9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBhY19jdl9jX2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251CisgCisgZmkKK0BAIC0xODkwLDcgKzE5MjksNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMTkwNywxMSArMTk0NSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTE5MjQsNyArMTk3MSw3IEBACisgCisgYWNfY3ZfcHJvZ19jY19nPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19nIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19jY19nIiA+JjYKK0BAIC0xOTUxLDcgKzE5OTgsNiBAQAorICAgYWNfY3ZfcHJvZ19jY19zdGRjPW5vCisgYWNfc2F2ZV9DQz0kQ0MKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMTk3OSw2ICsyMDI1LDE2IEBACisgICB2YV9lbmQgKHYpOworICAgcmV0dXJuIHM7CisgfQorKworKy8qIE9TRiA0LjAgQ29tcGFxIGNjIGlzIHNvbWUgc29ydCBvZiBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LiAgSXQgaGFzCisrICAgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgc3R1ZmYsIGJ1dCBub3QgJ1x4SEgnIGhleCBjaGFyYWN0ZXIgY29uc3RhbnRzLgorKyAgIFRoZXNlIGRvbid0IHByb3Zva2UgYW4gZXJyb3IgdW5mb3J0dW5hdGVseSwgaW5zdGVhZCBhcmUgc2lsZW50bHkgdHJlYXRlZAorKyAgIGFzICd4Jy4gIFRoZSBmb2xsb3dpbmcgaW5kdWNlcyBhbiBlcnJvciwgdW50aWwgLXN0ZDEgaXMgYWRkZWQgdG8gZ2V0CisrICAgcHJvcGVyIEFOU0kgbW9kZS4gIEN1cmlvdXNseSAnXHgwMCchPSd4JyBhbHdheXMgY29tZXMgb3V0IHRydWUsIGZvciBhbgorKyAgIGFycmF5IHNpemUgYXQgbGVhc3QuICBJdCdzIG5lY2Vzc2FyeSB0byB3cml0ZSAnXHgwMCc9PTAgdG8gZ2V0IHNvbWV0aGluZworKyAgIHRoYXQncyB0cnVlIG9ubHkgd2l0aCAtc3RkMS4gICovCisraW50IG9zZjRfY2NfYXJyYXkgWydceDAwJyA9PSAwID8gMSA6IC0xXTsKKysKKyBpbnQgdGVzdCAoaW50IGksIGRvdWJsZSB4KTsKKyBzdHJ1Y3QgczEge2ludCAoKmYpIChpbnQgYSk7fTsKKyBzdHJ1Y3QgczIge2ludCAoKmYpIChkb3VibGUgYSk7fTsKK0BAIC0yMDA1LDExICsyMDYxLDIwIEBACisgICBDQz0iJGFjX3NhdmVfQ0MgJGFjX2FyZyIKKyAgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTIwMjIsNyArMjA4Nyw3IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisgZG9uZQorIHJtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QuJGFjX29iamV4dAorIENDPSRhY19zYXZlX0NDCitAQCAtMjA1MCwxOSArMjExNSwyNyBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgIGZvciBhY19kZWNsYXJhdGlvbiBpbiBcCistICAgJydcCistICAgJyNpbmNsdWRlIDxzdGRsaWIuaD4nIFwKKysgICAnJyBcCisgICAgJ2V4dGVybiAiQyIgdm9pZCBzdGQ6OmV4aXQgKGludCkgdGhyb3cgKCk7IHVzaW5nIHN0ZDo6ZXhpdDsnIFwKKyAgICAnZXh0ZXJuICJDIiB2b2lkIHN0ZDo6ZXhpdCAoaW50KTsgdXNpbmcgc3RkOjpleGl0OycgXAorICAgICdleHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KSB0aHJvdyAoKTsnIFwKK0BAIC0yMDcwLDE0ICsyMTQzLDEzIEBACisgICAgJ3ZvaWQgZXhpdCAoaW50KTsnCisgZG8KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDxzdGRsaWIuaD4KKyAkYWNfZGVjbGFyYXRpb24KKysjaW5jbHVkZSA8c3RkbGliLmg+CisgaW50CisgbWFpbiAoKQorIHsKK0BAIC0yMDg4LDExICsyMTYwLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMjEwNSw5ICsyMTg2LDggQEAKKyAKKyBjb250aW51ZQorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTIxMjQsMTEgKzIyMDQsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0yMTQwLDcgKzIyMjksNyBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBkb25lCisgcm0gLWYgY29uZnRlc3QqCisgaWYgdGVzdCAtbiAiJGFjX2RlY2xhcmF0aW9uIjsgdGhlbgorQEAgLTIxNTQsNyArMjI0Myw3IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGFjX2V4dD1jCisgYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKyBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCitAQCAtMjE4OSw3ICsyMjc4LDYgQEAKKyAgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0yMjAwLDcgKzIyODgsNyBAQAorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKy0gICAgICAgICAgICAgICAgICAgICBTeW50YXggZXJyb3IKKysJCSAgICAgU3ludGF4IGVycm9yCisgX0FDRU9GCisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQorICAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorQEAgLTIyMTIsNiArMjMwMCw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC0yMjMyLDcgKzIzMjEsNiBAQAorICAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbi1leGlzdGVudCBoZWFkZXJzCisgICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTIyNTAsNiArMjMzOCw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC0yMjk2LDcgKzIzODUsNiBAQAorICAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTIzMDcsNyArMjM5NSw3IEBACisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorLSAgICAgICAgICAgICAgICAgICAgIFN5bnRheCBlcnJvcgorKwkJICAgICBTeW50YXggZXJyb3IKKyBfQUNFT0YKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CisgICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCitAQCAtMjMxOSw2ICsyNDA3LDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTIzMzksNyArMjQyOCw2IEBACisgICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uLWV4aXN0ZW50IGhlYWRlcnMKKyAgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjM1Nyw2ICsyNDQ1LDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTI0MzEsNiArMjUyMCw3IEBACisgIyBBSVggNCAvdXNyL2Jpbi9pbnN0YWxsYnNkLCB3aGljaCBkb2Vzbid0IHdvcmsgd2l0aG91dCBhIC1nIGZsYWcKKyAjIEFGUyAvdXNyL2Fmc3dzL2Jpbi9pbnN0YWxsLCB3aGljaCBtaXNoYW5kbGVzIG5vbmV4aXN0ZW50IGFyZ3MKKyAjIFNWUjQgL3Vzci91Y2IvaW5zdGFsbCwgd2hpY2ggdHJpZXMgdG8gdXNlIHRoZSBub25leGlzdGVudCBncm91cCAic3RhZmYiCisrIyBPUy8yJ3Mgc3lzdGVtIGluc3RhbGwsIHdoaWNoIGhhcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHNlbWFudGljCisgIyAuL2luc3RhbGwsIHdoaWNoIGNhbiBiZSBlcnJvbmVvdXNseSBjcmVhdGVkIGJ5IG1ha2UgZnJvbSAuL2luc3RhbGwuc2guCisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbC4uLiAkRUNIT19DIiA+JjYKK0BAIC0yNDQ3LDYgKzI1MzcsNyBAQAorIGNhc2UgJGFzX2Rpci8gaW4KKyAgIC4vIHwgLi8vIHwgL2NDLyogfCBcCisgICAvZXRjLyogfCAvdXNyL3NiaW4vKiB8IC91c3IvZXRjLyogfCAvc2Jpbi8qIHwgL3Vzci9hZnN3cy9iaW4vKiB8IFwKKysgID86XFwvb3MyXFwvaW5zdGFsbFxcLyogfCA/OlxcL09TMlxcL0lOU1RBTExcXC8qIHwgXAorICAgL3Vzci91Y2IvKiApIDs7CisgICAqKQorICAgICAjIE9TRjEgYW5kIFNDTyBPRFQgMy4wIGhhdmUgdGhlaXIgb3duIG5hbWVzIGZvciBpbnN0YWxsLgorQEAgLTI0NTQsMjAgKzI1NDUsMjAgQEAKKyAgICAgIyBieSBkZWZhdWx0LgorICAgICBmb3IgYWNfcHJvZyBpbiBnaW5zdGFsbCBzY29pbnN0IGluc3RhbGw7IGRvCisgICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICAgICAgICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgdGhlbgorLSAgICAgICAgICBpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorLSAgICAgICAgICAgIGdyZXAgZHNwbXNnICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKy0gICAgICAgICAgICAjIEFJWCBpbnN0YWxsLiAgSXQgaGFzIGFuIGluY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZlbnRpb24uCistICAgICAgICAgICAgOgorLSAgICAgICAgICBlbGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCistICAgICAgICAgICAgZ3JlcCBwd3BsdXMgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorLSAgICAgICAgICAgICMgcHJvZ3JhbS1zcGVjaWZpYyBpbnN0YWxsIHNjcmlwdCB1c2VkIGJ5IEhQIHB3cGx1cy0tZG9uJ3QgdXNlLgorLSAgICAgICAgICAgIDoKKy0gICAgICAgICAgZWxzZQorLSAgICAgICAgICAgIGFjX2N2X3BhdGhfaW5zdGFsbD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCAtYyIKKy0gICAgICAgICAgICBicmVhayAzCistICAgICAgICAgIGZpCistICAgICAgICBmaQorKwlpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgdGhlbgorKwkgIGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisrCSAgICBncmVwIGRzcG1zZyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrCSAgICAjIEFJWCBpbnN0YWxsLiAgSXQgaGFzIGFuIGluY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZlbnRpb24uCisrCSAgICA6CisrCSAgZWxpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorKwkgICAgZ3JlcCBwd3BsdXMgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorKwkgICAgIyBwcm9ncmFtLXNwZWNpZmljIGluc3RhbGwgc2NyaXB0IHVzZWQgYnkgSFAgcHdwbHVzLS1kb24ndCB1c2UuCisrCSAgICA6CisrCSAgZWxzZQorKwkgICAgYWNfY3ZfcGF0aF9pbnN0YWxsPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IC1jIgorKwkgICAgYnJlYWsgMworKwkgIGZpCisrCWZpCisgICAgICAgZG9uZQorICAgICBkb25lCisgICAgIDs7CitAQCAtMjQ5OSw3ICsyNTkwLDcgQEAKKyAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpLi4uICRFQ0hPX0MiID4mNgorLXNldCBkdW1teSAke01BS0UtbWFrZX07IGFjX21ha2U9YGVjaG8gIiQyIiB8IHNlZCAneSwuLystLF9fcF8sJ2AKKytzZXQgZHVtbXkgJHtNQUtFLW1ha2V9OyBhY19tYWtlPWBlY2hvICIkMiIgfCBzZWQgJ3ksOi4vKy0sX19fcF8sJ2AKKyBpZiBldmFsICJ0ZXN0IFwiXCR7YWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0K3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTI1OTYsNyArMjY4Nyw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBBSVgiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEFJWC4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjYyOCw3ICsyNzE4LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTI2NDksMTEgKzI3MzgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0yNjY2LDEyICsyNzY0LDExIEBACisgCisgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTI2OTMsNyArMjc5MCw2IEBACisgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0yNzE4LDcgKzI4MTQsNiBAQAorICAgOgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0yNzMwLDkgKzI4MjUsOSBAQAorICMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKKyAjZWxzZQorICMgZGVmaW5lIElTTE9XRVIoYykgXAorLSAgICAgICAgICAgICAgICAgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAorLSAgICAgICAgICAgICAgICAgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKKy0gICAgICAgICAgICAgICAgICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykgPD0gJ3onKSkKKysJCSAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCisrCQkgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKKysJCSAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCisgIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykgfCAweDQwKSA6IChjKSkKKyAjZW5kaWYKKyAKK0BAIC0yNzQzLDcgKzI4MzgsNyBAQAorICAgaW50IGk7CisgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgICAgIGlmIChYT1IgKGlzbG93ZXIgKGkpLCBJU0xPV0VSIChpKSkKKy0gICAgICAgIHx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQorKwl8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKyAgICAgICBleGl0KDIpOworICAgZXhpdCAoMCk7CisgfQorQEAgLTI3NjgsNyArMjg2Myw3IEBACisgKCBleGl0ICRhY19zdGF0dXMgKQorIGFjX2N2X2hlYWRlcl9zdGRjPW5vCisgZmkKKy1ybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZmkKKyBmaQorQEAgLTI3OTMsNyArMjg4OCw3IEBACisgCisgCisgZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzeXMvc3RhdC5oIHN0ZGxpYi5oIHN0cmluZy5oIG1lbW9yeS5oIHN0cmluZ3MuaCBcCistICAgICAgICAgICAgICAgICAgaW50dHlwZXMuaCBzdGRpbnQuaCB1bmlzdGQuaAorKwkJICBpbnR0eXBlcy5oIHN0ZGludC5oIHVuaXN0ZC5oCisgZG8KKyBhc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorQEAgLTI4MDIsNyArMjg5Nyw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0yODE0LDExICsyOTA4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMjgzMSw3ICsyOTM0LDcgQEAKKyAKKyBldmFsICIkYXNfYWNfSGVhZGVyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC0yODU4LDcgKzI5NjEsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBtaW5peC9jb25maWcuaCB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgbWluaXgvY29uZmlnLmggdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0yODY5LDExICsyOTcxLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMjg4Niw3ICsyOTk3LDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC0yODk0LDcgKzMwMDUsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBtaW5peC9jb25maWcuaCBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyBtaW5peC9jb25maWcuaCBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjkxMiw2ICszMDIyLDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTI5MzEsMzMgKzMwNDIsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWluaXgvY29uZmlnLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWluaXgvY29uZmlnLmg6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTMwMDAsMTUgKzMxMTAsMTUgQEAKKyBmaQorIAorIAorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHN0cmVycm9yIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgc3RyZXJyb3IuLi4gJEVDSE9fQyIgPiY2CistaWYgdGVzdCAiJHthY19jdl9zZWFyY2hfc3RyZXJyb3Irc2V0fSIgPSBzZXQ7IHRoZW4KKysKKysgICAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RyZXJyb3IgaW4gLWxjcG9zaXgiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0cmVycm9yIGluIC1sY3Bvc2l4Li4uICRFQ0hPX0MiID4mNgorK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2Nwb3NpeF9zdHJlcnJvcitzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKKy1hY19jdl9zZWFyY2hfc3RyZXJyb3I9bm8KKysgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKKytMSUJTPSItbGNwb3NpeCAgJExJQlMiCisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTMwMzIsNzkgKzMxNDIsNDMgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorLSAgYWNfY3Zfc2VhcmNoX3N0cmVycm9yPSJub25lIHJlcXVpcmVkIgorLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLWZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgIiRhY19jdl9zZWFyY2hfc3RyZXJyb3IiID0gbm87IHRoZW4KKy0gIGZvciBhY19saWIgaW4gY3Bvc2l4OyBkbworLSAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCistICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLQorLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCistI2lmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIgorLSNlbmRpZgorLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKy0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworLWNoYXIgc3RyZXJyb3IgKCk7CistaW50CistbWFpbiAoKQorLXsKKy1zdHJlcnJvciAoKTsKKy0gIDsKKy0gIHJldHVybiAwOworLX0KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKy0gIGFjX2N2X3NlYXJjaF9zdHJlcnJvcj0iLWwkYWNfbGliIgorLWJyZWFrCisrICBhY19jdl9saWJfY3Bvc2l4X3N0cmVycm9yPXllcworIGVsc2UKKyAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorK2FjX2N2X2xpYl9jcG9zaXhfc3RyZXJyb3I9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0gIGRvbmUKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCisgZmkKKy1MSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKKytlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2Nwb3NpeF9zdHJlcnJvciIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9jcG9zaXhfc3RyZXJyb3IiID4mNgorK2lmIHRlc3QgJGFjX2N2X2xpYl9jcG9zaXhfc3RyZXJyb3IgPSB5ZXM7IHRoZW4KKysgIExJQlM9IiRMSUJTIC1sY3Bvc2l4IgorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NlYXJjaF9zdHJlcnJvciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NlYXJjaF9zdHJlcnJvciIgPiY2CistaWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9zdHJlcnJvciIgIT0gbm87IHRoZW4KKy0gIHRlc3QgIiRhY19jdl9zZWFyY2hfc3RyZXJyb3IiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19jdl9zZWFyY2hfc3RyZXJyb3IgJExJQlMiCisgCistZmkKKysKKyAKKyAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGFyZ2VmaWxlIG9yIC0tZGlzYWJsZS1sYXJnZWZpbGUgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX2xhcmdlZmlsZStzZXR9IiA9IHNldDsgdGhlbgorQEAgLTMxMjQsOCArMzE5OCw3IEBACisgICAgICAgIHdoaWxlIDo7IGRvCisgICAgICAJICMgSVJJWCA2LjIgYW5kIGxhdGVyIGRvIG5vdCBzdXBwb3J0IGxhcmdlIGZpbGVzIGJ5IGRlZmF1bHQsCisgICAgICAJICMgc28gdXNlIHRoZSBDIGNvbXBpbGVyJ3MgLW4zMiBvcHRpb24gaWYgdGhhdCBoZWxwcy4KKy0gICAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisrCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zMTUwLDExICszMjIzLDIwIEBACisgX0FDRU9GCisgICAgICAJIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTMxNjYsMTUgKzMyNDgsMjQgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgICAgIAkgQ0M9IiRDQyAtbjMyIgorICAgICAgCSBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0zMTg2LDggKzMyNzcsOCBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy0gICAgICAgICBicmVhaworK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisrCSBicmVhaworICAgICAgICBkb25lCisgICAgICAgIENDPSRhY19zYXZlX0NDCisgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zMjA3LDcgKzMyOTgsNiBAQAorICAgd2hpbGUgOjsgZG8KKyAgIGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzPW5vCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzIzMiwxMSArMzMyMiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTMyNDgsOSArMzM0Nyw4IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTMyNzYsMTEgKzMzNzQsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0zMjkyLDcgKzMzOTksNyBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGJyZWFrCisgZG9uZQorIGZpCitAQCAtMzMxNCw3ICszNDIxLDYgQEAKKyAgIHdoaWxlIDo7IGRvCisgICBhY19jdl9zeXNfbGFyZ2VfZmlsZXM9bm8KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zMzM5LDExICszNDQ1LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzM1NSw5ICszNDcwLDggQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzM4MywxMSArMzQ5NywyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTMzOTksNyArMzUyMiw3IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYnJlYWsKKyBkb25lCisgZmkKK0BAIC0zNDQzLDcgKzM1NjYsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzUwNiwxMSArMzYyOCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTM1MjMsNyArMzY1NCw3IEBACisgCisgYWNfY3ZfY19jb25zdD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfY29uc3QiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9jX2NvbnN0IiA+JjYKK0BAIC0zNTUwLDcgKzM2ODEsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzU3MCwxMSArMzcwMCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTM1ODcsNyArMzcyNiw3IEBACisgCisgZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtMzYxMCw3ICszNzQ5LDYgQEAKKyAgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworIGFjX2N2X3NlYXJjaF9vcGVuZGlyPW5vCisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTM2MzQsMTEgKzM3NzIsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTM2NTAsMTIgKzM3OTcsMTIgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgaWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9vcGVuZGlyIiA9IG5vOyB0aGVuCisgICBmb3IgYWNfbGliIGluIGRpcjsgZG8KKyAgICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzY3OSwxMSArMzgyNiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzY5Niw3ICszODUyLDggQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBkb25lCisgZmkKKyBMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKK0BAIC0zNzE3LDcgKzM4NzQsNiBAQAorICAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCisgYWNfY3Zfc2VhcmNoX29wZW5kaXI9bm8KKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzc0MSwxMSArMzg5NywyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzc1NywxMiArMzkyMiwxMiBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBpZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX29wZW5kaXIiID0gbm87IHRoZW4KKyAgIGZvciBhY19saWIgaW4geDsgZG8KKyAgICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzc4NiwxMSArMzk1MSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzgwMyw3ICszOTc3LDggQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBkb25lCisgZmkKKyBMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKK0BAIC0zODIzLDcgKzM5OTgsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzg0NCwxMSArNDAxOCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTM4NjEsMTIgKzQwNDQsMTEgQEAKKyAKKyBhY19jdl9oZWFkZXJfc3RkYz1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIAorIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzg4OCw3ICs0MDcwLDYgQEAKKyBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTM5MTMsNyArNDA5NCw2IEBACisgICA6CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTM5MjUsOSArNDEwNSw5IEBACisgIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQorICNlbHNlCisgIyBkZWZpbmUgSVNMT1dFUihjKSBcCistICAgICAgICAgICAgICAgICAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCistICAgICAgICAgICAgICAgICAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAorLSAgICAgICAgICAgICAgICAgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorKwkJICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKysJCSAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAorKwkJICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykgPD0gJ3onKSkKKyAjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gKChjKSB8IDB4NDApIDogKGMpKQorICNlbmRpZgorIAorQEAgLTM5MzgsNyArNDExOCw3IEBACisgICBpbnQgaTsKKyAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQorLSAgICAgICAgfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisrCXx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQorICAgICAgIGV4aXQoMik7CisgICBleGl0ICgwKTsKKyB9CitAQCAtMzk2Myw3ICs0MTQzLDcgQEAKKyAoIGV4aXQgJGFjX3N0YXR1cyApCisgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKyBmaQorLXJtIC1mIGNvcmUgY29yZS4qICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBmaQorIGZpCitAQCAtMzk5OSw3ICs0MTc5LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQwMTAsMTEgKzQxODksMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00MDI3LDcgKzQyMTUsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTQwMzUsNyArNDIyMyw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDA1Myw2ICs0MjQwLDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTQwNzIsMzMgKzQyNjAsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKysgICAgOzsKKysgIG5vOnllczoqICkKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKy0gICAgOzsKKy0gIG5vOnllcyApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC00MTA5LDcgKzQyOTYsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTQxMzEsNyArNDMxOCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00MTUxLDExICs0MzM3LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDE2OCw3ICs0MzYzLDcgQEAKKyAKKyBhY19jdl90eXBlX21vZGVfdD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfbW9kZV90IiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9tb2RlX3QiID4mNgorQEAgLTQxODgsNyArNDM4Myw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00MjA4LDExICs0NDAyLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDIyNSw3ICs0NDI4LDcgQEAKKyAKKyBhY19jdl90eXBlX29mZl90PW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9vZmZfdCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfb2ZmX3QiID4mNgorQEAgLTQyNDUsNyArNDQ0OCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00MjY1LDExICs0NDY3LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDI4Miw3ICs0NDkzLDcgQEAKKyAKKyBhY19jdl90eXBlX3BpZF90PW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9waWRfdCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfcGlkX3QiID4mNgorQEAgLTQzMDIsNyArNDUxMyw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00MzI5LDExICs0NTM5LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDM0Niw3ICs0NTY1LDcgQEAKKyAKKyBhY19jdl90eXBlX3NpZ25hbD1pbnQKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3NpZ25hbCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfc2lnbmFsIiA+JjYKK0BAIC00MzYyLDcgKzQ1ODEsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDM4MiwxMSArNDYwMCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQzOTksNyArNDYyNiw3IEBACisgCisgYWNfY3ZfdHlwZV9zaXplX3Q9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3NpemVfdCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfc2l6ZV90IiA+JjYKK0BAIC00NDE5LDcgKzQ2NDYsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDQ2OCwxMSArNDY5NCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQ0ODUsNyArNDcyMCw3IEBACisgCisgYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRib29sX2giID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfc3RkYm9vbF9oIiA+JjYKK0BAIC00NDk1LDcgKzQ3MzAsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDUxNSwxMSArNDc0OSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQ1MzIsNyArNDc3NSw3IEBACisgCisgYWNfY3ZfdHlwZV9fQm9vbD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfX0Jvb2wiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX19Cb29sIiA+JjYKK0BAIC00NTg5LDcgKzQ4MzIsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDYwMCwxMSArNDg0MiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQ2MTcsNyArNDg2OCw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtNDYyNSw3ICs0ODc2LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00NjQzLDYgKzQ4OTMsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtNDY2MiwzMyArNDkxMywzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTQ2OTksNyArNDk0OSw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtNDczMyw3ICs0OTgzLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQ3NDQsMTEgKzQ5OTMsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00NzYxLDcgKzUwMTksNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTQ3NjksNyArNTAyNyw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDc4Nyw2ICs1MDQ0LDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTQ4MDYsMzMgKzUwNjQsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC00ODQzLDcgKzUxMDAsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTQ4NjUsNyArNTEyMiw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00ODg2LDExICs1MTQyLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDkwMyw3ICs1MTY4LDcgQEAKKyAKKyBhY19jdl9oZWFkZXJfdGltZT1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl90aW1lIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3RpbWUiID4mNgorQEAgLTQ5MzMsNyArNTE5OCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00OTY0LDExICs1MjI4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDk4MSw3ICs1MjU0LDcgQEAKKyAKKyBmdV9jdl9zeXNfc3RydWN0X3V0aW1idWY9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRmdV9jdl9zeXNfc3RydWN0X3V0aW1idWYiID4mNQorQEAgLTUwMDUsNyArNTI3OCw2IEBACisgICBhY19jdl9mdW5jX2Nsb3NlZGlyX3ZvaWQ9eWVzCisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTUwNDUsNyArNTMxNyw3IEBACisgKCBleGl0ICRhY19zdGF0dXMgKQorIGFjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZD15ZXMKKyBmaQorLXJtIC1mIGNvcmUgY29yZS4qICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2Nsb3NlZGlyX3ZvaWQiID4mNQorQEAgLTUwNzYsNyArNTM0OCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC01MDg3LDExICs1MzU4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNTEwNCw3ICs1Mzg0LDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC01MTEyLDcgKzUzOTIsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTUxMzAsNiArNTQwOSw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC01MTQ5LDMzICs1NDI5LDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtNTE4Niw3ICs1NDY1LDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC01MjIwLDcgKzU0OTksNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTIzMSwxMSArNTUwOSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTUyNDgsNyArNTUzNSw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtNTI1Niw3ICs1NTQzLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC01Mjc0LDYgKzU1NjAsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtNTI5MywzMyArNTU4MCwzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTUzMzAsNyArNTYxNiw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtNTM2NCw3ICs1NjUwLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTUzNzUsMTEgKzU2NjAsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC01MzkyLDcgKzU2ODYsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTU0MDAsNyArNTY5NCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTQxOCw2ICs1NzExLDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTU0MzcsMzMgKzU3MzEsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC01NDc0LDcgKzU3NjcsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTU0OTcsNyArNTc5MCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC01NTE3LDExICs1ODA5LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNTUzNCw3ICs1ODM1LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfZ2V0ZW52PW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2dldGVudiIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9nZXRlbnYiID4mNgorQEAgLTU1NjIsNyArNTg2Myw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC01NTgyLDExICs1ODgyLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNTU5OSw3ICs1OTA4LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfbWFsbG9jPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX21hbGxvYyIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9tYWxsb2MiID4mNgorQEAgLTU2MjgsNyArNTkzNyw2IEBACisgZWxzZQorIAorICAgICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTU2NDcsMTEgKzU5NTUsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC01NjY0LDcgKzU5ODEsNyBAQAorIAorIGFjX2N2X3dpbl9vcl9kb3M9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl93aW5fb3JfZG9zIiA+JjUKK0BAIC01NzE0LDcgKzYwMzEsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTcyNSwxMSArNjA0MSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTU3NDIsNyArNjA2Nyw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtNTc1MCw3ICs2MDc1LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC01NzY4LDYgKzYwOTIsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtNTc4NywzMyArNjExMiwzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTU4MjQsNyArNjE0OCw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtNTg3Miw3ICs2MTk2LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTU5MDUsMTEgKzYyMjgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTU5MjIsNyArNjI1NCw4IEBACisgCisgam1fY3Zfc3RydWN0X2RpcmVudF9kX2lubz1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIAorIAorIGZpCitAQCAtNjAxMSwyMSArNjM0NCwyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC02MDU2LDExICs2Mzk2LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC02MDczLDcgKzY0MjIsOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTYxMjYsMjEgKzY0NzYsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCisrCisrI3VuZGVmICRhY19mdW5jCisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtNjE3MSwxMSArNjUyOCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjE4OCw3ICs2NTU0LDggQEAKKyAKKyBldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK0BAIC02MjAzLDIxICs2NTcwLDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSBfZG9wcm50IHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgX2RvcHJudC4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lIF9kb3BybnQgaW5ub2N1b3VzX19kb3BybnQKKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgX2RvcHJudCAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgX2RvcHJudAorKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTYyNDgsMTEgKzY2MjIsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTYyNjUsNyArNjY0OCw4IEBACisgCisgYWNfY3ZfZnVuY19fZG9wcm50PW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19fZG9wcm50IiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19fZG9wcm50IiA+JjYKK0BAIC02Mjg4LDEzICs2NjcyLDEyIEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLQorKyRhY19pbmNsdWRlc19kZWZhdWx0CisgaW50CisgbWFpbiAoKQorIHsKK0BAIC02MzA1LDExICs2Njg4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC02MzIyLDEyICs2NzE0LDIwIEBACisgCisgYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmU9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZXJyb3JfYXRfbGluZSIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9lcnJvcl9hdF9saW5lIiA+JjYKKyBpZiB0ZXN0ICRhY19jdl9saWJfZXJyb3JfYXRfbGluZSA9IG5vOyB0aGVuCistICBMSUJPQkpTPSIkTElCT0JKUyBlcnJvci4kYWNfb2JqZXh0IgorKyAgY2FzZSAkTElCT0JKUyBpbgorKyAgICAiZXJyb3IuJGFjX29iamV4dCIgICB8IFwKKysgICoiIGVycm9yLiRhY19vYmpleHQiICAgfCBcCisrICAgICJlcnJvci4kYWNfb2JqZXh0ICIqIHwgXAorKyAgKiIgZXJyb3IuJGFjX29iamV4dCAiKiApIDs7CisrICAqKSBMSUJPQkpTPSIkTElCT0JKUyBlcnJvci4kYWNfb2JqZXh0IiA7OworK2VzYWMKKysKKyBmaQorIAorIAorQEAgLTYzNDMsMjEgKzY3NDMsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCisrCisrI3VuZGVmICRhY19mdW5jCisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtNjM4OCwxMSArNjc5NSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjQwNSw3ICs2ODIxLDggQEAKKyAKKyBldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK0BAIC02NDIzLDcgKzY4NDAsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNjQ0MywxMSArNjg1OSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTY0NjAsNyArNjg4NSw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX3N0cmVycm9yPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX3N0cmVycm9yIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX3N0cmVycm9yIiA+JjYKK0BAIC02NDg2LDcgKzY5MTEsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNjUwNiwxMSArNjkzMCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTY1MjMsNyArNjk1Niw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX3N0cmVycm9yX3I9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfc3RyZXJyb3JfciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9zdHJlcnJvcl9yIiA+JjYKK0BAIC02NTUzLDIxICs2OTg2LDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiAkYWNfZnVuYworKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTY1OTgsMTEgKzcwMzgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTY2MTUsNyArNzA2NCw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtNjYzNiw3ICs3MDg2LDYgQEAKKyAgICAgYWNfY3ZfZnVuY19zdHJlcnJvcl9yX2NoYXJfcD1ubworICAgICBpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfc3RyZXJyb3JfciA9IHllczsgdGhlbgorICAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC02NjU3LDExICs3MTA2LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjY3Myw3ICs3MTMxLDcgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIGVsc2UKKyAgICAgICAjIHN0cmVycm9yX3IgaXMgbm90IGRlY2xhcmVkLiAgQ2hvb3NlIGJldHdlZW4KKyAgICAgICAjIHN5c3RlbXMgdGhhdCBoYXZlIHJlbGF0aXZlbHkgaW5hY2Nlc3NpYmxlIGRlY2xhcmF0aW9ucyBmb3IgdGhlCitAQCAtNjY4NSw3ICs3MTQzLDYgQEAKKyAgIDoKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNjcyMSw3ICs3MTc4LDcgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgICAgIGZpCisgCitAQCAtNjc0OSwyMSArNzIwNiwyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC02Nzk0LDExICs3MjU4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC02ODExLDcgKzcyODQsOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTY4MjEsNyArNzI5NSwxNCBAQAorIF9BQ0VPRgorIAorIGVsc2UKKy0gIExJQk9CSlM9IiRMSUJPQkpTICRhY19mdW5jLiRhY19vYmpleHQiCisrICBjYXNlICRMSUJPQkpTIGluCisrICAgICIkYWNfZnVuYy4kYWNfb2JqZXh0IiAgIHwgXAorKyAgKiIgJGFjX2Z1bmMuJGFjX29iamV4dCIgICB8IFwKKysgICAgIiRhY19mdW5jLiRhY19vYmpleHQgIiogfCBcCisrICAqIiAkYWNfZnVuYy4kYWNfb2JqZXh0ICIqICkgOzsKKysgICopIExJQk9CSlM9IiRMSUJPQkpTICRhY19mdW5jLiRhY19vYmpleHQiIDs7CisrZXNhYworKworIGZpCisgZG9uZQorIAorQEAgLTY4NTUsNyArNzMzNiw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC02ODY2LDExICs3MzQ2LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjg4Myw3ICs3MzcyLDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC02ODkxLDcgKzczODAsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTY5MDksNiArNzM5Nyw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC02OTI4LDMzICs3NDE3LDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtNjk2NSw3ICs3NDUzLDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC02OTg5LDcgKzc0NzcsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzA1MywyMSArNzU0MCwyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC03MDk4LDExICs3NTkyLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC03MTE1LDcgKzc2MTgsOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTcxMjUsNyArNzYyOSwxNCBAQAorIF9BQ0VPRgorIAorIGVsc2UKKy0gIExJQk9CSlM9IiRMSUJPQkpTICRhY19mdW5jLiRhY19vYmpleHQiCisrICBjYXNlICRMSUJPQkpTIGluCisrICAgICIkYWNfZnVuYy4kYWNfb2JqZXh0IiAgIHwgXAorKyAgKiIgJGFjX2Z1bmMuJGFjX29iamV4dCIgICB8IFwKKysgICAgIiRhY19mdW5jLiRhY19vYmpleHQgIiogfCBcCisrICAqIiAkYWNfZnVuYy4kYWNfb2JqZXh0ICIqICkgOzsKKysgICopIExJQk9CSlM9IiRMSUJPQkpTICRhY19mdW5jLiRhY19vYmpleHQiIDs7CisrZXNhYworKworIGZpCisgZG9uZQorIAorQEAgLTcxNjMsNyArNzY3NCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC03MTc0LDExICs3Njg0LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNzE5MSw3ICs3NzEwLDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC03MTk5LDcgKzc3MTgsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTcyMTcsNiArNzczNSw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC03MjM2LDMzICs3NzU1LDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtNzI3Myw3ICs3NzkxLDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC03Mjk3LDcgKzc4MTUsNiBAQAorICAgYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPW5vCisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTczMzcsNyArNzg1NCw3IEBACisgKCBleGl0ICRhY19zdGF0dXMgKQorIGFjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbD1ubworIGZpCistcm0gLWYgY29yZSBjb3JlLiogKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbCIgPiY1CitAQCAtNzM1Myw3ICs3ODcwLDE0IEBACisgI2RlZmluZSBIQVZFX01BTExPQyAwCisgX0FDRU9GCisgCistICAgTElCT0JKUz0iJExJQk9CSlMgbWFsbG9jLiRhY19vYmpleHQiCisrICAgY2FzZSAkTElCT0JKUyBpbgorKyAgICAibWFsbG9jLiRhY19vYmpleHQiICAgfCBcCisrICAqIiBtYWxsb2MuJGFjX29iamV4dCIgICB8IFwKKysgICAgIm1hbGxvYy4kYWNfb2JqZXh0ICIqIHwgXAorKyAgKiIgbWFsbG9jLiRhY19vYmpleHQgIiogKSA7OworKyAgKikgTElCT0JKUz0iJExJQk9CSlMgbWFsbG9jLiRhY19vYmpleHQiIDs7CisrZXNhYworKworIAorIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisgI2RlZmluZSBtYWxsb2MgcnBsX21hbGxvYworQEAgLTczODgsNyArNzkxMiw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC03Mzk5LDExICs3OTIyLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNzQxNiw3ICs3OTQ4LDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC03NDI0LDcgKzc5NTYsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTc0NDIsNiArNzk3Myw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC03NDYxLDMzICs3OTkzLDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtNzQ5OCw3ICs4MDI5LDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC03NTIyLDcgKzgwNTMsNiBAQAorICAgYWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbD1ubworIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC03NTYyLDcgKzgwOTIsNyBAQAorICggZXhpdCAkYWNfc3RhdHVzICkKKyBhY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsPW5vCisgZmkKKy1ybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbCIgPiY1CitAQCAtNzU3OCw3ICs4MTA4LDE0IEBACisgI2RlZmluZSBIQVZFX1JFQUxMT0MgMAorIF9BQ0VPRgorIAorLSAgIExJQk9CSlM9IiRMSUJPQkpTIHJlYWxsb2MuJGFjX29iamV4dCIKKysgICBjYXNlICRMSUJPQkpTIGluCisrICAgICJyZWFsbG9jLiRhY19vYmpleHQiICAgfCBcCisrICAqIiByZWFsbG9jLiRhY19vYmpleHQiICAgfCBcCisrICAgICJyZWFsbG9jLiRhY19vYmpleHQgIiogfCBcCisrICAqIiByZWFsbG9jLiRhY19vYmpleHQgIiogKSA7OworKyAgKikgTElCT0JKUz0iJExJQk9CSlMgcmVhbGxvYy4kYWNfb2JqZXh0IiA7OworK2VzYWMKKysKKyAKKyBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorICNkZWZpbmUgcmVhbGxvYyBycGxfcmVhbGxvYworQEAgLTc2MTksNyArODE1Niw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC03NjMwLDExICs4MTY2LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNzY0Nyw3ICs4MTkyLDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC03NjU1LDcgKzgyMDAsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTc2NzMsNiArODIxNyw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC03NjkyLDMzICs4MjM3LDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtNzcyOSw3ICs4MjczLDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC03NzcyLDcgKzgzMTYsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzc4MywxMSArODMyNiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTc4MDAsNyArODM1Miw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtNzgwOCw3ICs4MzYwLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC03ODI2LDYgKzgzNzcsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtNzg0NSwzMyArODM5NywzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTc4ODIsNyArODQzMyw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtNzkxNiw3ICs4NDY3LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTc5MjcsMTEgKzg0NzcsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC03OTQ0LDcgKzg1MDMsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTc5NTIsNyArODUxMSw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzk3MCw2ICs4NTI4LDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTc5ODksMzMgKzg1NDgsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC04MDI2LDcgKzg1ODQsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTgwNTMsMjEgKzg2MTEsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCisrCisrI3VuZGVmICRhY19mdW5jCisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtODA5OCwxMSArODY2MywyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtODExNSw3ICs4Njg5LDggQEAKKyAKKyBldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK0BAIC04MTM5LDIxICs4NzE0LDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiAkYWNfZnVuYworKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTgxODQsMTEgKzg3NjYsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTgyMDEsNyArODc5Miw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtODI0MSw3ICs4ODMzLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTgyNTksMTEgKzg4NTAsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC04Mjc2LDcgKzg4NzYsNyBAQAorIAorIGFjX2N2X3R5cGVfbWJzdGF0ZV90PW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9tYnN0YXRlX3QiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX21ic3RhdGVfdCIgPiY2CitAQCAtODMwMCw3ICs4OTAwLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTgzMTcsMTEgKzg5MTYsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTgzMzQsNyArODk0Miw4IEBACisgCisgam1fY3ZfZnVuY19tYnJ0b3djPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkam1fY3ZfZnVuY19tYnJ0b3djIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kam1fY3ZfZnVuY19tYnJ0b3djIiA+JjYKK0BAIC04MzQ4LDY5ICs4OTU3LDQ2NSBAQAorIAorIAorIAorLQorLQorLQorLQorLWZvciBhY19mdW5jIGluIHBhdGhjb25mCistZG8KKy1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgorLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KKysgICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBmcmVlIGlzIGRlY2xhcmVkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgZnJlZSBpcyBkZWNsYXJlZC4uLiAkRUNIT19DIiA+JjYKKytpZiB0ZXN0ICIke2FjX2N2X2hhdmVfZGVjbF9mcmVlK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKy0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCistICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKy0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKy0jaWZkZWYgX19TVERDX18KKy0jIGluY2x1ZGUgPGxpbWl0cy5oPgorLSNlbHNlCistIyBpbmNsdWRlIDxhc3NlcnQuaD4KKy0jZW5kaWYKKy0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLSNpZmRlZiBfX2NwbHVzcGx1cworLWV4dGVybiAiQyIKKy17CistI2VuZGlmCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCistY2hhciAkYWNfZnVuYyAoKTsKKy0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCistICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCistICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQorLWNob2tlIG1lCistI2Vsc2UKKy1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKKy0jZW5kaWYKKy0jaWZkZWYgX19jcGx1c3BsdXMKKy19CistI2VuZGlmCistCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyBpbnQKKyBtYWluICgpCisgeworLXJldHVybiBmICE9ICRhY19mdW5jOworKyNpZm5kZWYgZnJlZQorKyAgY2hhciAqcCA9IChjaGFyICopIGZyZWU7CisrI2VuZGlmCisrCisgICA7CisgICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1Cisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorKyAgYWNfY3ZfaGF2ZV9kZWNsX2ZyZWU9eWVzCisrZWxzZQorKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrYWNfY3ZfaGF2ZV9kZWNsX2ZyZWU9bm8KKytmaQorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytmaQorK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZnJlZSIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9mcmVlIiA+JjYKKytpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfZnJlZSA9IHllczsgdGhlbgorKworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfREVDTF9GUkVFIDEKKytfQUNFT0YKKysKKysKKytlbHNlCisrICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBIQVZFX0RFQ0xfRlJFRSAwCisrX0FDRU9GCisrCisrCisrZmkKKysKKysKKysKKysKKysKKysgIDoKKysKKysKKysKKysKKysKKysgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RkYm9vbC5oIHRoYXQgY29uZm9ybXMgdG8gQzk5IiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdGRib29sLmggdGhhdCBjb25mb3JtcyB0byBDOTkuLi4gJEVDSE9fQyIgPiY2CisraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3RkYm9vbF9oK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisrCSAgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKysJICAjaWZuZGVmIGJvb2wKKysJICAgImVycm9yOiBib29sIGlzIG5vdCBkZWZpbmVkIgorKwkgICNlbmRpZgorKwkgICNpZm5kZWYgZmFsc2UKKysJICAgImVycm9yOiBmYWxzZSBpcyBub3QgZGVmaW5lZCIKKysJICAjZW5kaWYKKysJICAjaWYgZmFsc2UKKysJICAgImVycm9yOiBmYWxzZSBpcyBub3QgMCIKKysJICAjZW5kaWYKKysJICAjaWZuZGVmIHRydWUKKysJICAgImVycm9yOiBmYWxzZSBpcyBub3QgZGVmaW5lZCIKKysJICAjZW5kaWYKKysJICAjaWYgdHJ1ZSAhPSAxCisrCSAgICJlcnJvcjogdHJ1ZSBpcyBub3QgMSIKKysJICAjZW5kaWYKKysJICAjaWZuZGVmIF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkCisrCSAgICJlcnJvcjogX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgaXMgbm90IGRlZmluZWQiCisrCSAgI2VuZGlmCisrCisrCSAgc3RydWN0IHMgeyBfQm9vbCBzOiAxOyBfQm9vbCB0OyB9IHM7CisrCisrCSAgY2hhciBhW3RydWUgPT0gMSA/IDEgOiAtMV07CisrCSAgY2hhciBiW2ZhbHNlID09IDAgPyAxIDogLTFdOworKwkgIGNoYXIgY1tfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCA9PSAxID8gMSA6IC0xXTsKKysJICBjaGFyIGRbKGJvb2wpIC0wLjUgPT0gdHJ1ZSA/IDEgOiAtMV07CisrCSAgYm9vbCBlID0gJnM7CisrCSAgY2hhciBmWyhfQm9vbCkgLTAuMCA9PSBmYWxzZSA/IDEgOiAtMV07CisrCSAgY2hhciBnW3RydWVdOworKwkgIGNoYXIgaFtzaXplb2YgKF9Cb29sKV07CisrCSAgY2hhciBpW3NpemVvZiBzLnRdOworKworK2ludAorK21haW4gKCkKKyt7CisrIHJldHVybiAhYSArICFiICsgIWMgKyAhZCArICFlICsgIWYgKyAhZyArICFoICsgIWk7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorKyAgYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaD15ZXMKKytlbHNlCisrICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKythY19jdl9oZWFkZXJfc3RkYm9vbF9oPW5vCisrZmkKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKytlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9zdGRib29sX2giID4mNgorKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgX0Jvb2wiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIF9Cb29sLi4uICRFQ0hPX0MiID4mNgorK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV9fQm9vbCtzZXR9IiA9IHNldDsgdGhlbgorKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKytlbHNlCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyRhY19pbmNsdWRlc19kZWZhdWx0CisraW50CisrbWFpbiAoKQorK3sKKytpZiAoKF9Cb29sICopIDApCisrICByZXR1cm4gMDsKKytpZiAoc2l6ZW9mIChfQm9vbCkpCisrICByZXR1cm4gMDsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICBhY19jdl90eXBlX19Cb29sPXllcworK2Vsc2UKKysgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworK2FjX2N2X3R5cGVfX0Jvb2w9bm8KKytmaQorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytmaQorK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX19Cb29sIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9fQm9vbCIgPiY2CisraWYgdGVzdCAkYWNfY3ZfdHlwZV9fQm9vbCA9IHllczsgdGhlbgorKworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfX0JPT0wgMQorK19BQ0VPRgorKworKworK2ZpCisrCisrICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCA9IHllczsgdGhlbgorKworK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisrI2RlZmluZSBIQVZFX1NUREJPT0xfSCAxCisrX0FDRU9GCisrCisrICAgZmkKKysKKysgIDoKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKytlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5hbm9zZWNvbmQgdGltZXN0YW1wcyBpbiBzdHJ1Y3Qgc3RhdCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbmFub3NlY29uZCB0aW1lc3RhbXBzIGluIHN0cnVjdCBzdGF0Li4uICRFQ0hPX0MiID4mNgorK2lmIHRlc3QgIiR7YWNfY3Zfc3RhdF9uc2VjK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisrCSAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKwkgICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKwkgICNpbmNsdWRlIDx1bmlzdGQuaD4KKysJICBzdHJ1Y3Qgc3RhdCBzdDsKKysKKytpbnQKKyttYWluICgpCisreworKyByZXR1cm4gc3Quc3RfYXRpbWVuc2VjICsgc3Quc3RfbXRpbWVuc2VjICsgc3Quc3RfY3RpbWVuc2VjOworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICBhY19jdl9zdGF0X25zZWM9eWVzCisrZWxzZQorKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrYWNfY3Zfc3RhdF9uc2VjPW5vCisrZmkKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrCisrZmkKKytlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc3RhdF9uc2VjIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3Zfc3RhdF9uc2VjIiA+JjYKKysgICBpZiB0ZXN0ICRhY19jdl9zdGF0X25zZWMgPSB5ZXM7IHRoZW4KKysKKytjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9TVEFUX05TRUMgMQorK19BQ0VPRgorKworKyAgIGZpCisrCisrICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBuYW5vc2Vjb25kIHRpbWVzdGFtcHMgaW4gc3RydWN0IHN0YXQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5hbm9zZWNvbmQgdGltZXN0YW1wcyBpbiBzdHJ1Y3Qgc3RhdC4uLiAkRUNIT19DIiA+JjYKKytpZiB0ZXN0ICIke2FjX2N2X3N0YXRfdGltZXZhbCtzZXR9IiA9IHNldDsgdGhlbgorKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKytlbHNlCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworKwkgICNpbmNsdWRlIDx0aW1lLmg+CisrCSAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKwkgICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKwkgICNpbmNsdWRlIDx1bmlzdGQuaD4KKysJICBzdHJ1Y3Qgc3RhdCBzdDsKKysKKytpbnQKKyttYWluICgpCisreworKyByZXR1cm4gc3Quc3RfYXRpbS50dl9uc2VjICsgc3Quc3RfbXRpbS50dl9uc2VjICsgc3Quc3RfY3RpbS50dl9uc2VjOworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIGFjX2N2X3N0YXRfdGltZXZhbD15ZXMKKytlbHNlCisrICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKythY19jdl9zdGF0X3RpbWV2YWw9bm8KKytmaQorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysKKytmaQorK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zdGF0X3RpbWV2YWwiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zdGF0X3RpbWV2YWwiID4mNgorKyAgIGlmIHRlc3QgJGFjX2N2X3N0YXRfdGltZXZhbCA9IHllczsgdGhlbgorKworK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisrI2RlZmluZSBIQVZFX1NUQVRfVElNRVZBTCAxCisrX0FDRU9GCisrCisrICAgZmkKKysKKysKKysKKysKKysKKytmb3IgYWNfZnVuYyBpbiBwYXRoY29uZgorK2RvCisrYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKKytlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKKytpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKysKKysvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisrICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorKyAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisrICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrIyBpbmNsdWRlIDxsaW1pdHMuaD4KKysjZWxzZQorKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2VuZGlmCisrCisrI3VuZGVmICRhY19mdW5jCisrCisrLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKysjaWZkZWYgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiCisreworKyNlbmRpZgorKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKysgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworK2NoYXIgJGFjX2Z1bmMgKCk7CisrLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKysjaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKKytjaG9rZSBtZQorKyNlbHNlCisrY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7CisrI2VuZGlmCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgorKworK2ludAorK21haW4gKCkKKyt7CisrcmV0dXJuIGYgIT0gJGFjX2Z1bmM7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKytpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtODQyMyw3ICs5NDI4LDggQEAKKyAKKyBldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK0BAIC04NDU0LDcgKzk0NjAsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtODQ2NSwxMSArOTQ3MCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTg0ODIsNyArOTQ5Niw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtODQ5MCw3ICs5NTA0LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC04NTA4LDYgKzk1MjEsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtODUyNywzMyArOTU0MSwzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTg1NjQsNyArOTU3Nyw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtODU4Nyw3ICs5NjAwLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTg2MDcsMTEgKzk2MTksMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC04NjI0LDcgKzk2NDUsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9mcmVlPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2ZyZWUiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZnJlZSIgPiY2CitAQCAtODY0OCw3ICs5NjY5LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTg2NjgsMTEgKzk2ODgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC04Njg1LDcgKzk3MTQsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9nZXRlbnY9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZ2V0ZW52IiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2dldGVudiIgPiY2CitAQCAtODcwOSw3ICs5NzM4LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTg3MjksMTEgKzk3NTcsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC04NzQ2LDcgKzk3ODMsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9tYWxsb2M9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfbWFsbG9jIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX21hbGxvYyIgPiY2CitAQCAtODc3MCw3ICs5ODA3LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTg3OTAsMTEgKzk4MjYsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC04ODA3LDcgKzk4NTIsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9ta3RlbXA9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfbWt0ZW1wIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX21rdGVtcCIgPiY2CitAQCAtODg0OSwyMSArOTg5NCwyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC04ODk0LDExICs5OTQ2LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC04OTExLDcgKzk5NzIsOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTg5MzQsMjEgKzk5OTYsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCisrCisrI3VuZGVmICRhY19mdW5jCisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtODk3OSwxMSArMTAwNDgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTg5OTYsNyArMTAwNzQsOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTkwMDYsNyArMTAwODUsMTQgQEAKKyBfQUNFT0YKKyAKKyBlbHNlCistICBMSUJPQkpTPSIkTElCT0JKUyAkYWNfZnVuYy4kYWNfb2JqZXh0IgorKyAgY2FzZSAkTElCT0JKUyBpbgorKyAgICAiJGFjX2Z1bmMuJGFjX29iamV4dCIgICB8IFwKKysgICoiICRhY19mdW5jLiRhY19vYmpleHQiICAgfCBcCisrICAgICIkYWNfZnVuYy4kYWNfb2JqZXh0ICIqIHwgXAorKyAgKiIgJGFjX2Z1bmMuJGFjX29iamV4dCAiKiApIDs7CisrICAqKSBMSUJPQkpTPSIkTElCT0JKUyAkYWNfZnVuYy4kYWNfb2JqZXh0IiA7OworK2VzYWMKKysKKyBmaQorIGRvbmUKKyAKK0BAIC05MDE5LDcgKzEwMTA1LDYgQEAKKyAgIHdoaWxlIDo7IGRvCisgICBhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZT1ubworICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTkwMzYsMTEgKzEwMTIxLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtOTA1Miw5ICsxMDE0Niw4IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTkwNzIsMTEgKzEwMTY1LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtOTA4OCw3ICsxMDE5MCw3IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYnJlYWsKKyBkb25lCisgZmkKK0BAIC05MTEyLDcgKzEwMjE0LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTkxMjksMTEgKzEwMjMwLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05MTQ2LDcgKzEwMjU2LDggQEAKKyAKKyBhY19jdl9mdW5jX2ZzZWVrbz1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfZnNlZWtvIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19mc2Vla28iID4mNgorQEAgLTkxNjUsNyArMTAyNzYsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTE4NSwxMSArMTAyOTUsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05MjAyLDcgKzEwMzIxLDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfY2xlYXJlcnJfdW5sb2NrZWQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfY2xlYXJlcnJfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfY2xlYXJlcnJfdW5sb2NrZWQiID4mNgorQEAgLTkyMzAsNyArMTAzNDksNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTI1MCwxMSArMTAzNjgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05MjY3LDcgKzEwMzk0LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfZmVvZl91bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9mZW9mX3VubG9ja2VkIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2Zlb2ZfdW5sb2NrZWQiID4mNgorQEAgLTkyOTUsNyArMTA0MjIsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTMxNSwxMSArMTA0NDEsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05MzMyLDcgKzEwNDY3LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfZmVycm9yX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2ZlcnJvcl91bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9mZXJyb3JfdW5sb2NrZWQiID4mNgorQEAgLTkzNjAsNyArMTA0OTUsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTM4MCwxMSArMTA1MTQsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05Mzk3LDcgKzEwNTQwLDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfZmZsdXNoX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2ZmbHVzaF91bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9mZmx1c2hfdW5sb2NrZWQiID4mNgorQEAgLTk0MjUsNyArMTA1NjgsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTQ0NSwxMSArMTA1ODcsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05NDYyLDcgKzEwNjEzLDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfZmdldHNfdW5sb2NrZWQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZmdldHNfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZmdldHNfdW5sb2NrZWQiID4mNgorQEAgLTk0OTAsNyArMTA2NDEsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTUxMCwxMSArMTA2NjAsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05NTI3LDcgKzEwNjg2LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfZnB1dGNfdW5sb2NrZWQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZnB1dGNfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZnB1dGNfdW5sb2NrZWQiID4mNgorQEAgLTk1NTUsNyArMTA3MTQsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTU3NSwxMSArMTA3MzMsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05NTkyLDcgKzEwNzU5LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfZnB1dHNfdW5sb2NrZWQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZnB1dHNfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZnB1dHNfdW5sb2NrZWQiID4mNgorQEAgLTk2MjAsNyArMTA3ODcsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTY0MCwxMSArMTA4MDYsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05NjU3LDcgKzEwODMyLDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfZnJlYWRfdW5sb2NrZWQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZnJlYWRfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZnJlYWRfdW5sb2NrZWQiID4mNgorQEAgLTk2ODUsNyArMTA4NjAsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTcwNSwxMSArMTA4NzksMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05NzIyLDcgKzEwOTA1LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfZndyaXRlX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2Z3cml0ZV91bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9md3JpdGVfdW5sb2NrZWQiID4mNgorQEAgLTk3NTAsNyArMTA5MzMsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTc3MCwxMSArMTA5NTIsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05Nzg3LDcgKzEwOTc4LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfZ2V0Y191bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9nZXRjX3VubG9ja2VkIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2dldGNfdW5sb2NrZWQiID4mNgorQEAgLTk4MTUsNyArMTEwMDYsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTgzNSwxMSArMTEwMjUsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05ODUyLDcgKzExMDUxLDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfZ2V0Y2hhcl91bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9nZXRjaGFyX3VubG9ja2VkIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2dldGNoYXJfdW5sb2NrZWQiID4mNgorQEAgLTk4ODAsNyArMTEwNzksNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTkwMCwxMSArMTEwOTgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05OTE3LDcgKzExMTI0LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfcHV0Y191bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9wdXRjX3VubG9ja2VkIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX3B1dGNfdW5sb2NrZWQiID4mNgorQEAgLTk5NDUsNyArMTExNTIsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTk2NSwxMSArMTExNzEsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05OTgyLDcgKzExMTk3LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfcHV0Y2hhcl91bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9wdXRjaGFyX3VubG9ja2VkIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX3B1dGNoYXJfdW5sb2NrZWQiID4mNgorQEAgLTEwMDc1LDcgKzExMjkwLDYgQEAKKyAgIGFjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZD15ZXMKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMTAxMTUsNyArMTEzMjksNyBAQAorICggZXhpdCAkYWNfc3RhdHVzICkKKyBhY19jdl9mdW5jX2Nsb3NlZGlyX3ZvaWQ9eWVzCisgZmkKKy1ybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19jbG9zZWRpcl92b2lkIiA+JjUKK0BAIC0xMDE0Niw3ICsxMTM2MCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0xMDE1NywxMSArMTEzNzAsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0xMDE3NCw3ICsxMTM5Niw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtMTAxODIsNyArMTE0MDQsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTEwMjAwLDYgKzExNDIxLDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTEwMjE5LDMzICsxMTQ0MSwzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTEwMjU2LDcgKzExNDc3LDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC0xMDI3Nyw3ICsxMTQ5OCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0xMDMwMCwxMSArMTE1MjAsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTEwMzE3LDcgKzExNTQ2LDggQEAKKyAKKyBhY19jdl9mdW5jX3NldG1vZGVfZG9zPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19zZXRtb2RlX2RvcyIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfc2V0bW9kZV9kb3MiID4mNgorQEAgLTEwMzM4LDIxICsxMTU2OCwyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC0xMDM4MywxMSArMTE2MjAsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTEwNDAwLDcgKzExNjQ2LDggQEAKKyAKKyBldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK0BAIC0xMDQxNSwyMSArMTE2NjIsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lIF9kb3BybnQgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyBfZG9wcm50LgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgX2RvcHJudCBpbm5vY3VvdXNfX2RvcHJudAorKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBfZG9wcm50ICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiBfZG9wcm50CisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtMTA0NjAsMTEgKzExNzE0LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0xMDQ3Nyw3ICsxMTc0MCw4IEBACisgCisgYWNfY3ZfZnVuY19fZG9wcm50PW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19fZG9wcm50IiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19fZG9wcm50IiA+JjYKK0BAIC0xMDUwMywyMSArMTE3NjcsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCisrCisrI3VuZGVmICRhY19mdW5jCisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtMTA1NDgsMTEgKzExODE5LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0xMDU2NSw3ICsxMTg0NSw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtMTA1ODUsNyArMTE4NjYsNiBAQAorICAgcGF0Y2hfY3ZfbWtkaXJfdGFrZXNfb25lX2FyZz1ubworICAgICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWtkaXIgPSB5ZXM7IHRoZW4KKyAgICAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0xMDYwNSwxMSArMTE4ODUsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0xMDYyMSw3ICsxMTkxMCw2IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0xMDY0MSwxMSArMTE5MjksMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0xMDY1OCwxMCArMTE5NTUsMTAgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgZmkKKyAKKyAKK0BAIC0xMDY4Niw3ICsxMTk4Myw2IEBACisgZWxzZQorIAorICAgICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTEwNzA1LDExICsxMjAwMSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTEwNzIyLDcgKzEyMDI3LDcgQEAKKyAKKyBhY19jdl93aW5fb3JfZG9zPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfd2luX29yX2RvcyIgPiY1CitAQCAtMTA4MzQsMTMgKzEyMTM5LDEzIEBACisgICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXMgKGRvdWJsZS1xdW90ZQorICAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwpLgorICAgICAgIHNlZCAtbiBcCistICAgICAgICAicy8nLydcXFxcJycvZzsKKy0gICAgCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgorKwkicy8nLydcXFxcJycvZzsKKysJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcXDInL3AiCisgICAgICAgOzsKKyAgICAgKikKKyAgICAgICAjIGBzZXQnIHF1b3RlcyBjb3JyZWN0bHkgYXMgcmVxdWlyZWQgYnkgUE9TSVgsIHNvIGRvIG5vdCBhZGQgcXVvdGVzLgorICAgICAgIHNlZCAtbiBcCistICAgICAgICAicy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT1cXDIvcCIKKysJInMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9XFwyL3AiCisgICAgICAgOzsKKyAgICAgZXNhYzsKKyB9IHwKK0BAIC0xMDg3MCwxMyArMTIxNzUsMTMgQEAKKyAjIHRyYWlsaW5nIGNvbG9ucyBhbmQgdGhlbiByZW1vdmUgdGhlIHdob2xlIGxpbmUgaWYgVlBBVEggYmVjb21lcyBlbXB0eQorICMgKGFjdHVhbGx5IHdlIGxlYXZlIGFuIGVtcHR5IGxpbmUgdG8gcHJlc2VydmUgbGluZSBudW1iZXJzKS4KKyBpZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgorLSAgYWNfdnBzdWI9Jy9eWyAJXSpWUEFUSFsgCV0qPS97CisrICBhY192cHN1Yj0nL15bCSBdKlZQQVRIWwkgXSo9L3sKKyBzLzoqXCQoc3JjZGlyKToqLzovOworIHMvOipcJHtzcmNkaXJ9OiovOi87Cisgcy86KkBzcmNkaXJAOiovOi87Cistcy9eXChbXj1dKj1bIAldKlwpOiovXDEvOworK3MvXlwoW149XSo9WwkgXSpcKToqL1wxLzsKKyBzLzoqJC8vOworLXMvXltePV0qPVsgCV0qJC8vOworK3MvXltePV0qPVsJIF0qJC8vOworIH0nCisgZmkKKyAKK0BAIC0xMDg4Nyw3ICsxMjE5Miw3IEBACisgZm9yIGFjX2kgaW4gOiAkTElCT0JKUzsgZG8gdGVzdCAieCRhY19pIiA9IHg6ICYmIGNvbnRpbnVlCisgICAjIDEuIFJlbW92ZSB0aGUgZXh0ZW5zaW9uLCBhbmQgJFUgaWYgYWxyZWFkeSBpbnN0YWxsZWQuCisgICBhY19pPWBlY2hvICIkYWNfaSIgfAorLSAgICAgICAgIHNlZCAncy9cJFVcLi8uLztzL1wubyQvLztzL1wub2JqJC8vJ2AKKysJIHNlZCAncy9cJFVcLi8uLztzL1wubyQvLztzL1wub2JqJC8vJ2AKKyAgICMgMi4gQWRkIHRoZW0uCisgICBhY19saWJvYmpzPSIkYWNfbGlib2JqcyAkYWNfaVwkVS4kYWNfb2JqZXh0IgorICAgYWNfbHRsaWJvYmpzPSIkYWNfbHRsaWJvYmpzICRhY19pIickVS5sbycKK0BAIC0xMDkzMSw5ICsxMjIzNiwxMCBAQAorIGVsaWYgdGVzdCAtbiAiJHtCQVNIX1ZFUlNJT04rc2V0fSIgJiYgKHNldCAtbyBwb3NpeCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICBzZXQgLW8gcG9zaXgKKyBmaQorK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKKyAKKyAjIFN1cHBvcnQgdW5zZXQgd2hlbiBwb3NzaWJsZS4KKy1pZiAoRk9PPUZPTzsgdW5zZXQgRk9PKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKytpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgIGFzX3Vuc2V0PXVuc2V0CisgZWxzZQorICAgYXNfdW5zZXQ9ZmFsc2UKK0BAIC0xMDk1Miw3ICsxMjI1OCw3IEBACisgICBMQ19NRUFTVVJFTUVOVCBMQ19NRVNTQUdFUyBMQ19NT05FVEFSWSBMQ19OQU1FIExDX05VTUVSSUMgTENfUEFQRVIgXAorICAgTENfVEVMRVBIT05FIExDX1RJTUUKKyBkbworLSAgaWYgKHNldCAreDsgdGVzdCAtbiAiYChldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIpIDI+JjFgIik7IHRoZW4KKysgIGlmIChzZXQgK3g7IHRlc3QgLXogImAoZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyKSAyPiYxYCIpOyB0aGVuCisgICAgIGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcgorICAgZWxzZQorICAgICAkYXNfdW5zZXQgJGFzX3ZhcgorQEAgLTExMTMxLDE2ICsxMjQzNywxNyBAQAorIGlmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KKyAgIGFzX21rZGlyX3A9OgorIGVsc2UKKysgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCisgICBhc19ta2Rpcl9wPWZhbHNlCisgZmkKKyAKKyBhc19leGVjdXRhYmxlX3A9InRlc3QgLWYiCisgCisgIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgorLWFzX3RyX2NwcD0ic2VkIHklKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyIKKythc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorIAorICMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgorLWFzX3RyX3NoPSJzZWQgeSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyIKKythc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorIAorIAorICMgSUZTCitAQCAtMTExNjcsNyArMTI0NzQsNyBAQAorIGNhdCA+JjUgPDxfQ1NFT0YKKyAKKyBUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IHBhdGNoICRhc19tZSAyLjUuOSwgd2hpY2ggd2FzCistZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU3LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisrZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisgCisgICBDT05GSUdfRklMRVMgICAgPSAkQ09ORklHX0ZJTEVTCisgICBDT05GSUdfSEVBREVSUyAgPSAkQ09ORklHX0hFQURFUlMKK0BAIC0xMTIxMSw5ICsxMjUxOCw5IEBACisgICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKyAgICAgICAtLXJlY2hlY2sgICAgdXBkYXRlICRhc19tZSBieSByZWNvbmZpZ3VyaW5nIGluIHRoZSBzYW1lIGNvbmRpdGlvbnMKKyAgIC0tZmlsZT1GSUxFWzpURU1QTEFURV0KKy0gICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBGSUxFCisrCQkgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIEZJTEUKKyAgIC0taGVhZGVyPUZJTEVbOlRFTVBMQVRFXQorLSAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBoZWFkZXIgRklMRQorKwkJICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKKyAKKyBDb25maWd1cmF0aW9uIGZpbGVzOgorICRjb25maWdfZmlsZXMKK0BAIC0xMTIyNywxMSArMTI1MzQsMTAgQEAKKyBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorIGFjX2NzX3ZlcnNpb249IlxcCisgcGF0Y2ggY29uZmlnLnN0YXR1cyAyLjUuOQorLWNvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41NywKKytjb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTksCisgICB3aXRoIG9wdGlvbnMgXFwiYGVjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvW1xcIiJcYFwkXS9cXFxcJi9nJ2BcXCIKKyAKKy1Db3B5cmlnaHQgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMQorLUZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK0NvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBUaGlzIGNvbmZpZy5zdGF0dXMgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuIgorIHNyY2Rpcj0kc3JjZGlyCitAQCAtMTE0NjMsOSArMTI3NjksOSBAQAorICAgICAgIChlY2hvICc6dAorICAgL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYicgJiYgY2F0ICR0bXAvc3Vicy5mcmFnKSA+JHRtcC9zdWJzLSRhY19zZWRfZnJhZy5zZWQKKyAgICAgICBpZiB0ZXN0IC16ICIkYWNfc2VkX2NtZHMiOyB0aGVuCistICAJYWNfc2VkX2NtZHM9InNlZCAtZiAkdG1wL3N1YnMtJGFjX3NlZF9mcmFnLnNlZCIKKysJYWNfc2VkX2NtZHM9InNlZCAtZiAkdG1wL3N1YnMtJGFjX3NlZF9mcmFnLnNlZCIKKyAgICAgICBlbHNlCistICAJYWNfc2VkX2NtZHM9IiRhY19zZWRfY21kcyB8IHNlZCAtZiAkdG1wL3N1YnMtJGFjX3NlZF9mcmFnLnNlZCIKKysJYWNfc2VkX2NtZHM9IiRhY19zZWRfY21kcyB8IHNlZCAtZiAkdG1wL3N1YnMtJGFjX3NlZF9mcmFnLnNlZCIKKyAgICAgICBmaQorICAgICAgIGFjX3NlZF9mcmFnPWBleHByICRhY19zZWRfZnJhZyArIDFgCisgICAgICAgYWNfYmVnPSRhY19lbmQKK0BAIC0xMTQ4MywyMSArMTI3ODksMjEgQEAKKyAgICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIsIGRlZmF1bHRpbmcgaW5maWxlPSJvdXRmaWxlLmluIi4KKyAgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgIC0gfCAqOi0gfCAqOi06KiApICMgaW5wdXQgZnJvbSBzdGRpbgorLSAgICAgICAgY2F0ID4kdG1wL3N0ZGluCistICAgICAgICBhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAorLSAgICAgICAgYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKKysJY2F0ID4kdG1wL3N0ZGluCisrCWFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCisrCWFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7CisgICAqOiogKSBhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAorLSAgICAgICAgYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKKysJYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKKyAgICogKSAgIGFjX2ZpbGVfaW49JGFjX2ZpbGUuaW4gOzsKKyAgIGVzYWMKKyAKKyAgICMgQ29tcHV0ZSBAc3JjZGlyQCwgQHRvcF9zcmNkaXJALCBhbmQgQElOU1RBTExAIGZvciBzdWJkaXJlY3Rvcmllcy4KKyAgIGFjX2Rpcj1gKGRpcm5hbWUgIiRhY19maWxlIikgMj4vZGV2L251bGwgfHwKKyAkYXNfZXhwciBYIiRhY19maWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorLSAgICAgICAgIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCistICAgICAgICAgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKy0gICAgICAgICBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IFwKKy0gICAgICAgICAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKysJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisrCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpJCcgXHwgXAorKwkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCBcCisrCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKyBlY2hvIFgiJGFjX2ZpbGUiIHwKKyAgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorQEAgLTExNTEzLDEwICsxMjgxOSwxMCBAQAorICAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCisgICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8CisgJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorLSAgICAgICAgIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKy0gICAgICAgICBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCistICAgICAgICAgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKKy0gICAgICAgICAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKysJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKysJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKysJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCisrCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKyBlY2hvIFgiJGFzX2RpciIgfAorICAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CitAQCAtMTE1NTQsMTIgKzEyODYwLDQ1IEBACisgICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciRhY19kaXJfc3VmZml4CisgICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIgOzsKKyBlc2FjCistIyBEb24ndCBibGluZGx5IHBlcmZvcm0gYSBgY2QgIiRhY19kaXIiLyRhY19mb28gJiYgcHdkYCBzaW5jZSAkYWNfZm9vIGNhbiBiZQorLSMgYWJzb2x1dGUuCistYWNfYWJzX2J1aWxkZGlyPWBjZCAiJGFjX2RpciIgJiYgY2QgJGFjX2J1aWxkZGlyICYmIHB3ZGAKKy1hY19hYnNfdG9wX2J1aWxkZGlyPWBjZCAiJGFjX2RpciIgJiYgY2QgJHthY190b3BfYnVpbGRkaXJ9LiAmJiBwd2RgCistYWNfYWJzX3NyY2Rpcj1gY2QgIiRhY19kaXIiICYmIGNkICRhY19zcmNkaXIgJiYgcHdkYAorLWFjX2Fic190b3Bfc3JjZGlyPWBjZCAiJGFjX2RpciIgJiYgY2QgJGFjX3RvcF9zcmNkaXIgJiYgcHdkYAorKworKyMgRG8gbm90IHVzZSBgY2QgZm9vICYmIHB3ZGAgdG8gY29tcHV0ZSBhYnNvbHV0ZSBwYXRocywgYmVjYXVzZQorKyMgdGhlIGRpcmVjdG9yaWVzIG1heSBub3QgZXhpc3QuCisrY2FzZSBgcHdkYCBpbgorKy4pIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OworKyopCisrICBjYXNlICIkYWNfZGlyIiBpbgorKyAgLikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7CisrICAqKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGAvIiRhY19kaXIiOzsKKysgIGVzYWM7OworK2VzYWMKKytjYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKysuKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OworKyopCisrICBjYXNlICR7YWNfdG9wX2J1aWxkZGlyfS4gaW4KKysgIC4pIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpcjs7CisrICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7CisrICAqKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXIvJHthY190b3BfYnVpbGRkaXJ9Ljs7CisrICBlc2FjOzsKKytlc2FjCisrY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCisrLikgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKKysqKQorKyAgY2FzZSAkYWNfc3JjZGlyIGluCisrICAuKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OworKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OworKyAgKikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY19zcmNkaXI7OworKyAgZXNhYzs7CisrZXNhYworK2Nhc2UgJGFjX2Fic19idWlsZGRpciBpbgorKy4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKKysqKQorKyAgY2FzZSAkYWNfdG9wX3NyY2RpciBpbgorKyAgLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7CisrICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKKysgICopIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3RvcF9zcmNkaXI7OworKyAgZXNhYzs7CisrZXNhYworIAorIAorICAgY2FzZSAkSU5TVEFMTCBpbgorQEAgLTExNTY3LDExICsxMjkwNiw2IEBACisgICAqKSBhY19JTlNUQUxMPSRhY190b3BfYnVpbGRkaXIkSU5TVEFMTCA7OworICAgZXNhYworIAorLSAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkYWNfZmlsZSIgPiY1CistZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZmlsZSIgPiY2O30KKy0gICAgcm0gLWYgIiRhY19maWxlIgorLSAgZmkKKyAgICMgTGV0J3Mgc3RpbGwgcHJldGVuZCBpdCBpcyBgY29uZmlndXJlJyB3aGljaCBpbnN0YW50aWF0ZXMgKGkuZS4sIGRvbid0CisgICAjIHVzZSAkYXNfbWUpLCBwZW9wbGUgd291bGQgYmUgc3VycHJpc2VkIHRvIHJlYWQ6CisgICAjICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZy5zdGF0dXMuICAqLworQEAgLTExNTgxLDcgKzEyOTE1LDcgQEAKKyAgICAgY29uZmlndXJlX2lucHV0PSIkYWNfZmlsZS4gICIKKyAgIGZpCisgICBjb25maWd1cmVfaW5wdXQ9JGNvbmZpZ3VyZV9pbnB1dCJHZW5lcmF0ZWQgZnJvbSBgZWNobyAkYWNfZmlsZV9pbiB8CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZCAncywuKi8sLCdgIGJ5IGNvbmZpZ3VyZS4iCisrCQkJCSAgICAgc2VkICdzLC4qLywsJ2AgYnkgY29uZmlndXJlLiIKKyAKKyAgICMgRmlyc3QgbG9vayBmb3IgdGhlIGlucHV0IGZpbGVzIGluIHRoZSBidWlsZCB0cmVlLCBvdGhlcndpc2UgaW4gdGhlCisgICAjIHNyYyB0cmVlLgorQEAgLTExNTkwLDI2ICsxMjkyNCwzMiBAQAorICAgICAgIGNhc2UgJGYgaW4KKyAgICAgICAtKSBlY2hvICR0bXAvc3RkaW4gOzsKKyAgICAgICBbXFwvJF0qKQorLSAgICAgICAgICMgQWJzb2x1dGUgKGNhbid0IGJlIERPUy1zdHlsZSwgYXMgSUZTPTopCistICAgICAgICAgdGVzdCAtZiAiJGYiIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKKysJICMgQWJzb2x1dGUgKGNhbid0IGJlIERPUy1zdHlsZSwgYXMgSUZTPTopCisrCSB0ZXN0IC1mICIkZiIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorIGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQorICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorLSAgICAgICAgIGVjaG8gJGY7OworKwkgZWNobyAiJGYiOzsKKyAgICAgICAqKSAjIFJlbGF0aXZlCistICAgICAgICAgaWYgdGVzdCAtZiAiJGYiOyB0aGVuCistICAgICAgICAgICAjIEJ1aWxkIHRyZWUKKy0gICAgICAgICAgIGVjaG8gJGYKKy0gICAgICAgICBlbGlmIHRlc3QgLWYgIiRzcmNkaXIvJGYiOyB0aGVuCistICAgICAgICAgICAjIFNvdXJjZSB0cmVlCistICAgICAgICAgICBlY2hvICRzcmNkaXIvJGYKKy0gICAgICAgICBlbHNlCistICAgICAgICAgICAjIC9kZXYvbnVsbCB0cmVlCistICAgICAgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CisrCSBpZiB0ZXN0IC1mICIkZiI7IHRoZW4KKysJICAgIyBCdWlsZCB0cmVlCisrCSAgIGVjaG8gIiRmIgorKwkgZWxpZiB0ZXN0IC1mICIkc3JjZGlyLyRmIjsgdGhlbgorKwkgICAjIFNvdXJjZSB0cmVlCisrCSAgIGVjaG8gIiRzcmNkaXIvJGYiCisrCSBlbHNlCisrCSAgICMgL2Rldi9udWxsIHRyZWUKKysJICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorIGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQorICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorLSAgICAgICAgIGZpOzsKKysJIGZpOzsKKyAgICAgICBlc2FjCisgICAgIGRvbmVgIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorKworKyAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkYWNfZmlsZSIgPiY1CisrZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZmlsZSIgPiY2O30KKysgICAgcm0gLWYgIiRhY19maWxlIgorKyAgZmkKKyBfQUNFT0YKKyBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorICAgc2VkICIkYWNfdnBzdWIKK0BAIC0xMTY0OSwxMiArMTI5ODksMTIgQEAKKyAjIE5BTUUgaXMgdGhlIGNwcCBtYWNybyBiZWluZyBkZWZpbmVkIGFuZCBWQUxVRSBpcyB0aGUgdmFsdWUgaXQgaXMgYmVpbmcgZ2l2ZW4uCisgIworICMgYWNfZCBzZXRzIHRoZSB2YWx1ZSBpbiAiI2RlZmluZSBOQU1FIFZBTFVFIiBsaW5lcy4KKy1hY19kQT0ncyxeXChbIAldKlwpI1woWyAJXSpkZWZpbmVbIAldWyAJXSpcKScKKy1hY19kQj0nWyAJXS4qJCxcMSNcMicKKythY19kQT0ncyxeXChbCSBdKlwpI1woWwkgXSpkZWZpbmVbCSBdWwkgXSpcKScKKythY19kQj0nWwkgXS4qJCxcMSNcMicKKyBhY19kQz0nICcKKyBhY19kRD0nLDt0JworICMgYWNfdSB0dXJucyAiI3VuZGVmIE5BTUUiIHdpdGhvdXQgdHJhaWxpbmcgYmxhbmtzIGludG8gIiNkZWZpbmUgTkFNRSBWQUxVRSIuCistYWNfdUE9J3MsXlwoWyAJXSpcKSNcKFsgCV0qXCl1bmRlZlwoWyAJXVsgCV0qXCknCisrYWNfdUE9J3MsXlwoWwkgXSpcKSNcKFsJIF0qXCl1bmRlZlwoWwkgXVsJIF0qXCknCisgYWNfdUI9JyQsXDEjXDJkZWZpbmVcMycKKyBhY191Qz0nICcKKyBhY191RD0nLDt0JworQEAgLTExNjYzLDExICsxMzAwMywxMSBAQAorICAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIiwgZGVmYXVsdGluZyBpbmZpbGU9Im91dGZpbGUuaW4iLgorICAgY2FzZSAkYWNfZmlsZSBpbgorICAgLSB8ICo6LSB8ICo6LToqICkgIyBpbnB1dCBmcm9tIHN0ZGluCistICAgICAgICBjYXQgPiR0bXAvc3RkaW4KKy0gICAgICAgIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCistICAgICAgICBhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworKwljYXQgPiR0bXAvc3RkaW4KKysJYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKysJYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKKyAgICo6KiApIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCistICAgICAgICBhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworKwlhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworICAgKiApICAgYWNfZmlsZV9pbj0kYWNfZmlsZS5pbiA7OworICAgZXNhYworIAorQEAgLTExNjgxLDI4ICsxMzAyMSwyOSBAQAorICAgICAgIGNhc2UgJGYgaW4KKyAgICAgICAtKSBlY2hvICR0bXAvc3RkaW4gOzsKKyAgICAgICBbXFwvJF0qKQorLSAgICAgICAgICMgQWJzb2x1dGUgKGNhbid0IGJlIERPUy1zdHlsZSwgYXMgSUZTPTopCistICAgICAgICAgdGVzdCAtZiAiJGYiIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKKysJICMgQWJzb2x1dGUgKGNhbid0IGJlIERPUy1zdHlsZSwgYXMgSUZTPTopCisrCSB0ZXN0IC1mICIkZiIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorIGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQorICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorLSAgICAgICAgIGVjaG8gJGY7OworKwkgIyBEbyBxdW90ZSAkZiwgdG8gcHJldmVudCBET1MgcGF0aHMgZnJvbSBiZWluZyBJRlMnZC4KKysJIGVjaG8gIiRmIjs7CisgICAgICAgKikgIyBSZWxhdGl2ZQorLSAgICAgICAgIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgorLSAgICAgICAgICAgIyBCdWlsZCB0cmVlCistICAgICAgICAgICBlY2hvICRmCistICAgICAgICAgZWxpZiB0ZXN0IC1mICIkc3JjZGlyLyRmIjsgdGhlbgorLSAgICAgICAgICAgIyBTb3VyY2UgdHJlZQorLSAgICAgICAgICAgZWNobyAkc3JjZGlyLyRmCistICAgICAgICAgZWxzZQorLSAgICAgICAgICAgIyAvZGV2L251bGwgdHJlZQorLSAgICAgICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorKwkgaWYgdGVzdCAtZiAiJGYiOyB0aGVuCisrCSAgICMgQnVpbGQgdHJlZQorKwkgICBlY2hvICIkZiIKKysJIGVsaWYgdGVzdCAtZiAiJHNyY2Rpci8kZiI7IHRoZW4KKysJICAgIyBTb3VyY2UgdHJlZQorKwkgICBlY2hvICIkc3JjZGlyLyRmIgorKwkgZWxzZQorKwkgICAjIC9kZXYvbnVsbCB0cmVlCisrCSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKKyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiYyO30KKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKy0gICAgICAgICBmaTs7CisrCSBmaTs7CisgICAgICAgZXNhYworICAgICBkb25lYCB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKyAgICMgUmVtb3ZlIHRoZSB0cmFpbGluZyBzcGFjZXMuCistICBzZWQgJ3MvWyAJXSokLy8nICRhY19maWxlX2lucHV0cyA+JHRtcC9pbgorKyAgc2VkICdzL1sJIF0qJC8vJyAkYWNfZmlsZV9pbnB1dHMgPiR0bXAvaW4KKyAKKyBfQUNFT0YKKyAKK0BAIC0xMTcyNSw5ICsxMzA2Niw5IEBACisgcyxbXFwkYF0sXFwmLGcKKyB0IGNsZWFyCisgOiBjbGVhcgorLXMsXlsgCV0qI1sgCV0qZGVmaW5lWyAJXVsgCV0qXChbXiAJKF1bXiAJKF0qXClcKChbXildKilcKVsgCV0qXCguKlwpJCwke2FjX2RBfVwxJHthY19kQn1cMVwyJHthY19kQ31cMyR7YWNfZER9LGdwCisrcyxeWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSpcKFteCSAoXVteCSAoXSpcKVwoKFteKV0qKVwpWwkgXSpcKC4qXCkkLCR7YWNfZEF9XDEke2FjX2RCfVwxXDIke2FjX2RDfVwzJHthY19kRH0sZ3AKKyB0IGVuZAorLXMsXlsgCV0qI1sgCV0qZGVmaW5lWyAJXVsgCV0qXChbXiAJXVteIAldKlwpWyAJXSpcKC4qXCkkLCR7YWNfZEF9XDEke2FjX2RCfVwxJHthY19kQ31cMiR7YWNfZER9LGdwCisrcyxeWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSpcKFteCSBdW14JIF0qXClbCSBdKlwoLipcKSQsJHthY19kQX1cMSR7YWNfZEJ9XDEke2FjX2RDfVwyJHthY19kRH0sZ3AKKyA6IGVuZAorIF9BQ0VPRgorICMgSWYgc29tZSBtYWNyb3Mgd2VyZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyB0aGVyZSBtaWdodCBiZSBzZXZlcmFsIHRpbWVzCitAQCAtMTE3NDEsMTMgKzEzMDgyLDEzIEBACisgIyBleGFtcGxlLCBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAorICMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgorIGNhdCA+PmNvbmZ0ZXN0LnVuZGVmcyA8PFxfQUNFT0YKKy1zLF5bIAldKiNbIAldKnVuZGVmWyAJXVsgCV0qW2EtekEtWl9dW2EtekEtWl8wLTldKiwvKiAmICovLAorK3MsXlsJIF0qI1sJIF0qdW5kZWZbCSBdWwkgXSpbYS16QS1aX11bYS16QS1aXzAtOV0qLC8qICYgKi8sCisgX0FDRU9GCisgCisgIyBCcmVhayB1cCBjb25mdGVzdC5kZWZpbmVzIGJlY2F1c2Ugc29tZSBzaGVsbHMgaGF2ZSBhIGxpbWl0IG9uIHRoZSBzaXplCisgIyBvZiBoZXJlIGRvY3VtZW50cywgYW5kIG9sZCBzZWRzIGhhdmUgc21hbGwgbGltaXRzIHRvbyAoMTAwIGNtZHMpLgorIGVjaG8gJyAgIyBIYW5kbGUgYWxsIHRoZSAjZGVmaW5lIHRlbXBsYXRlcyBvbmx5IGlmIG5lY2Vzc2FyeS4nID4+JENPTkZJR19TVEFUVVMKKy1lY2hvICcgIGlmIGdyZXAgIl5bIAldKiNbIAldKmRlZmluZSIgJHRtcC9pbiA+L2Rldi9udWxsOyB0aGVuJyA+PiRDT05GSUdfU1RBVFVTCisrZWNobyAnICBpZiBncmVwICJeWwkgXSojWwkgXSpkZWZpbmUiICR0bXAvaW4gPi9kZXYvbnVsbDsgdGhlbicgPj4kQ09ORklHX1NUQVRVUworIGVjaG8gJyAgIyBJZiB0aGVyZSBhcmUgbm8gZGVmaW5lcywgd2UgbWF5IGhhdmUgYW4gZW1wdHkgaWYvZmknID4+JENPTkZJR19TVEFUVVMKKyBlY2hvICcgIDonID4+JENPTkZJR19TVEFUVVMKKyBybSAtZiBjb25mdGVzdC50YWlsCitAQCAtMTE3NTYsNyArMTMwOTcsNyBAQAorICAgIyBXcml0ZSBhIGxpbWl0ZWQtc2l6ZSBoZXJlIGRvY3VtZW50IHRvICR0bXAvZGVmaW5lcy5zZWQuCisgICBlY2hvICcgIGNhdCA+JHRtcC9kZWZpbmVzLnNlZCA8PENFT0YnID4+JENPTkZJR19TVEFUVVMKKyAgICMgU3BlZWQgdXA6IGRvbid0IGNvbnNpZGVyIHRoZSBub24gYCNkZWZpbmUnIGxpbmVzLgorLSAgZWNobyAnL15bIAldKiNbIAldKmRlZmluZS8hYicgPj4kQ09ORklHX1NUQVRVUworKyAgZWNobyAnL15bCSBdKiNbCSBdKmRlZmluZS8hYicgPj4kQ09ORklHX1NUQVRVUworICAgIyBXb3JrIGFyb3VuZCB0aGUgZm9yZ2V0LXRvLXJlc2V0LXRoZS1mbGFnIGJ1Zy4KKyAgIGVjaG8gJ3QgY2xyJyA+PiRDT05GSUdfU1RBVFVTCisgICBlY2hvICc6IGNscicgPj4kQ09ORklHX1NUQVRVUworQEAgLTExNzgzLDcgKzEzMTI0LDcgQEAKKyAgICMgV3JpdGUgYSBsaW1pdGVkLXNpemUgaGVyZSBkb2N1bWVudCB0byAkdG1wL3VuZGVmcy5zZWQuCisgICBlY2hvICcgIGNhdCA+JHRtcC91bmRlZnMuc2VkIDw8Q0VPRicgPj4kQ09ORklHX1NUQVRVUworICAgIyBTcGVlZCB1cDogZG9uJ3QgY29uc2lkZXIgdGhlIG5vbiBgI3VuZGVmJworLSAgZWNobyAnL15bIAldKiNbIAldKnVuZGVmLyFiJyA+PiRDT05GSUdfU1RBVFVTCisrICBlY2hvICcvXlsJIF0qI1sJIF0qdW5kZWYvIWInID4+JENPTkZJR19TVEFUVVMKKyAgICMgV29yayBhcm91bmQgdGhlIGZvcmdldC10by1yZXNldC10aGUtZmxhZyBidWcuCisgICBlY2hvICd0IGNscicgPj4kQ09ORklHX1NUQVRVUworICAgZWNobyAnOiBjbHInID4+JENPTkZJR19TVEFUVVMKK0BAIC0xMTgxNywxMCArMTMxNTgsMTAgQEAKKyAgICAgZWxzZQorICAgICAgIGFjX2Rpcj1gKGRpcm5hbWUgIiRhY19maWxlIikgMj4vZGV2L251bGwgfHwKKyAkYXNfZXhwciBYIiRhY19maWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorLSAgICAgICAgIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCistICAgICAgICAgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKy0gICAgICAgICBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IFwKKy0gICAgICAgICAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKysJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisrCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpJCcgXHwgXAorKwkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCBcCisrCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKyBlY2hvIFgiJGFjX2ZpbGUiIHwKKyAgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorQEAgLTExODM2LDEwICsxMzE3NywxMCBAQAorICAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCisgICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8CisgJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorLSAgICAgICAgIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKy0gICAgICAgICBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCistICAgICAgICAgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKKy0gICAgICAgICAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKysJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKysJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKysJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCisrCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKyBlY2hvIFgiJGFzX2RpciIgfAorICAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CistLS0gcGF0Y2gtMi41Ljkub3JpZy9jb25maWd1cmUuYWMKKysrKyBwYXRjaC0yLjUuOS9jb25maWd1cmUuYWMKK0BAIC02NCw2ICs2NCw5IEBACisgZ2xfUFJFUkVRX1hNQUxMT0MKKyBnbF9RVU9URQorIGdsX1FVT1RFQVJHCisrZ2xfSEFTSAorKworK2FnX0NIRUNLX05BTk9TRUNPTkRfU1RBVAorIAorIGRubCBUaGlzIHNob3VsZCBiZSBpbiBnbnVsaWIsIGJ1dCBpc24ndCBmb3Igc29tZSByZWFzb24uCisgQUNfREVGVU4oW2ptX1BSRVJFUV9BRERFWFRdLAorLS0tIHBhdGNoLTIuNS45Lm9yaWcvcGNoLmMKKysrKyBwYXRjaC0yLjUuOS9wY2guYworQEAgLTEsNiArMSw2IEBACisgLyogcmVhZGluZyBwYXRjaGVzICovCisgCistLyogJElkOiBwY2guYyx2IDEuNDQgMjAwMy8wNS8yMCAxNDowMzoxNyBlZ2dlcnQgRXhwICQgKi8KKysvKiAkSWQ6IHBjaC5jLHYgMS40NSAyMDAzLzA3LzAyIDIyOjE5OjIxIGVnZ2VydCBFeHAgJCAqLworIAorIC8qIENvcHlyaWdodCAoQykgMTk4NiwgMTk4NywgMTk4OCBMYXJyeSBXYWxsCisgCitAQCAtMzY2LDEwICszNjYsMTYgQEAKKyAJaWYgKCFzdGFyc19sYXN0X2xpbmUgJiYgc3RybkVRKHMsICIqKiogIiwgNCkpCisgCSAgICBuYW1lW09MRF0gPSBmZXRjaG5hbWUgKHMrNCwgc3RyaXBwYXRoLCAmcF90aW1lc3RhbXBbT0xEXSk7CisgCWVsc2UgaWYgKHN0cm5FUShzLCAiKysrICIsIDQpKQorKwkgIHsKKyAJICAgIC8qIFN3YXAgd2l0aCBORVcgYmVsb3cuICAqLworIAkgICAgbmFtZVtPTERdID0gZmV0Y2huYW1lIChzKzQsIHN0cmlwcGF0aCwgJnBfdGltZXN0YW1wW09MRF0pOworKwkgICAgcF9zdHJpcF90cmFpbGluZ19jciA9IHN0cmlwX3RyYWlsaW5nX2NyOworKwkgIH0KKyAJZWxzZSBpZiAoc3RybkVRKHMsICJJbmRleDoiLCA2KSkKKysJICB7CisgCSAgICBuYW1lW0lOREVYXSA9IGZldGNobmFtZSAocys2LCBzdHJpcHBhdGgsICh0aW1lX3QgKikgMCk7CisrCSAgICBwX3N0cmlwX3RyYWlsaW5nX2NyID0gc3RyaXBfdHJhaWxpbmdfY3I7CisrCSAgfQorIAllbHNlIGlmIChzdHJuRVEocywgIlByZXJlcToiLCA3KSkgeworIAkgICAgZm9yICh0ID0gcyArIDc7ICBJU1NQQUNFICgodW5zaWduZWQgY2hhcikgKnQpOyAgdCsrKQorIAkgICAgICBjb250aW51ZTsKK0BAIC00MDksNiArNDE1LDcgQEAKKyAJCSAgICBwX3RpbWVzdGFtcFtORVddID0gdGltZXN0YW1wOworIAkJICAgIHBfcmZjOTM0X25lc3RpbmcgPSAodCAtIHMpID4+IDE7CisgCQkgIH0KKysJCXBfc3RyaXBfdHJhaWxpbmdfY3IgPSBzdHJpcF90cmFpbGluZ19jcjsKKyAJICAgICAgfQorIAkgIH0KKyAJaWYgKChkaWZmX3R5cGUgPT0gTk9fRElGRiB8fCBkaWZmX3R5cGUgPT0gRURfRElGRikgJiYKKy0tLSBwYXRjaC0yLjUuOS5vcmlnL3V0aWwuYworKysrIHBhdGNoLTIuNS45L3V0aWwuYworQEAgLTQ1LDkgKzQ1LDE3IEBACisgIyBkZWZpbmUgcmFpc2Uoc2lnKSBraWxsIChnZXRwaWQgKCksIHNpZykKKyAjZW5kaWYKKyAKKysjaWYgZGVmaW5lZChIQVZFX1NUQVRfVElNRVZBTCkKKysjaW5jbHVkZSA8dGltZS5oPgorKyNlbmRpZgorKworICNpbmNsdWRlIDxzdGRhcmcuaD4KKysjaW5jbHVkZSA8aGFzaC5oPgorIAorIHN0YXRpYyB2b2lkIG1ha2VkaXJzIChjaGFyICopOworK3N0YXRpYyBib29sIGZpZF9zZWFyY2ggKGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHN0YXQgKiwgYm9vbCk7CisrIyBkZWZpbmUgZmlkX2V4aXN0cyhuYW1lLCBwc3QpIGZpZF9zZWFyY2ggKG5hbWUsIHBzdCwgZmFsc2UpCisrIyBkZWZpbmUgaW5zZXJ0X2ZpZChuYW1lKSBmaWRfc2VhcmNoIChuYW1lLCBOVUxMLCB0cnVlKQorIAorIC8qIE1vdmUgYSBmaWxlIEZST00gKHdoZXJlICpGUk9NX05FRURTX1JFTU9WQUwgaXMgbm9uemVybyBpZiBGUk9NCisgICAgbmVlZHMgcmVtb3ZhbCB3aGVuIGNsZWFuaW5nIHVwIGF0IHRoZSBlbmQgb2YgZXhlY3V0aW9uKQorQEAgLTY0LDcgKzcyLDcgQEAKKyAgIHN0cnVjdCBzdGF0IHRvX3N0OworICAgaW50IHRvX2Vycm5vID0gISBiYWNrdXAgPyAtMSA6IHN0YXQgKHRvLCAmdG9fc3QpID09IDAgPyAwIDogZXJybm87CisgCistICBpZiAoYmFja3VwKQorKyAgaWYgKGJhY2t1cCAmJiAodG9fZXJybm8gfHwgISBmaWRfZXhpc3RzICh0bywgJnRvX3N0KSkpCisgICAgIHsKKyAgICAgICBpbnQgdHJ5X21ha2VkaXJzX2Vycm5vID0gMDsKKyAgICAgICBjaGFyICpiYWtuYW1lOworQEAgLTE2NSw2ICsxNzMsNyBAQAorIAkgICAgICBpZiAoISB0b19kaXJfa25vd25fdG9fZXhpc3QpCisgCQltYWtlZGlycyAodG8pOworIAkgICAgICBjb3B5X2ZpbGUgKGZyb20sIHRvLCAwLCBtb2RlKTsKKysJICAgICAgaW5zZXJ0X2ZpZCAodG8pOworIAkgICAgICByZXR1cm47CisgCSAgICB9CisgCitAQCAtMTczLDYgKzE4Miw3IEBACisgCX0KKyAKKyAgICAgcmVuYW1lX3N1Y2NlZWRlZDoKKysgICAgICBpbnNlcnRfZmlkICh0byk7CisgICAgICAgLyogRG8gbm90IGNsZWFyICpGUk9NX05FRURTX1JFTU9WQUwgaWYgaXQncyBwb3NzaWJsZSB0aGF0IHRoZQorIAkgcmVuYW1lIHJldHVybmVkIHplcm8gYmVjYXVzZSBGUk9NIGFuZCBUTyBhcmUgaGFyZCBsaW5rcyB0bworIAkgdGhlIHNhbWUgZmlsZS4gICovCitAQCAtMTAxMSwzICsxMDIxLDEwNSBAQAorICAgaWYgKGZpbGVfc2VlayAoc3RyZWFtLCBvZmZzZXQsIHB0cm5hbWUpICE9IDApCisgICAgIHBmYXRhbCAoImZzZWVrIik7CisgfQorKworK3R5cGVkZWYgc3RydWN0CisreworKyAgZGV2X3QJCWZpZF9kZXY7CisrICBpbm9fdAkJZmlkX2lubzsKKysgIHRpbWVfdAlmaWRfbXRpbWU7CisrICB1bnNpZ25lZCBsb25nCWZpZF9tdGltZW5zZWM7CisrfSBmaWxlX2lkOworKworK3Vuc2lnbmVkCisrZmlsZV9pZF9oYXNoZXIgKGZpbGVfaWQgKmVudHJ5LCB1bnNpZ25lZCB0YWJsZV9zaXplKQorK3sKKysgIHJldHVybiAoKHVuc2lnbmVkIGxvbmcpIGVudHJ5LT5maWRfaW5vICsKKysgIAkgICh1bnNpZ25lZCBsb25nKSBlbnRyeS0+ZmlkX2RldiArCisrICAJICAodW5zaWduZWQgbG9uZykgZW50cnktPmZpZF9tdGltZSArCisrCSAgKHVuc2lnbmVkIGxvbmcpIGVudHJ5LT5maWRfbXRpbWVuc2VjKSAlIHRhYmxlX3NpemU7CisrfQorKworK2Jvb2wKKytmaWxlX2lkX2NvbXBhcmF0b3IgKGZpbGVfaWQgKmVudHJ5MSwgZmlsZV9pZCAqZW50cnkyKQorK3sKKysgIHJldHVybiAoZW50cnkxLT5maWRfZGV2CT09IGVudHJ5Mi0+ZmlkX2RldiAmJgorKwkgIGVudHJ5MS0+ZmlkX2lubwk9PSBlbnRyeTItPmZpZF9pbm8gJiYKKysJICBlbnRyeTEtPmZpZF9tdGltZQk9PSBlbnRyeTItPmZpZF9tdGltZSAmJgorKwkgIGVudHJ5MS0+ZmlkX210aW1lbnNlYyA9PSBlbnRyeTItPmZpZF9tdGltZW5zZWMpOworK30KKysKKyt2b2lkCisrZmlsZV9pZF9mcmVlciAoZmlsZV9pZCAqZW50cnkpCisreworKyAgZnJlZSAoZW50cnkpOworK30KKysKKytIYXNoX3RhYmxlICpmaWxlX2lkX2hhc2g7CisrCisrLyogQ2hlY2sgaWYgdGhlIGZpbGUgaWRlbnRpZmllZCBieSBGSUxFTkFNRSBhbmQgUFNUIHdhcyBhbHJlYWR5IHNlZW4uIElmIHRoZQorKyAgIGZpbGUgd2FzIGFscmVhZHkgc2VlbiwgcmV0dXJucyBUUlVFLiAgSWYgdGhlIGZpbGUgaGFzIG5vdCB5ZXQgYmVlbiBzZWVuCisrICAgYW5kIElOU0VSVCBpcyBUUlVFLCBpdCBpcyBpbnNlcnRlZC4gIFBTVCBvciBGSUxFTkFNRSBtYXkgYmUgTlVMTCAoYnV0IG5vdAorKyAgIGJvdGggb2YgdGhlbSkuICAqLworKworK3N0YXRpYyBib29sCisrZmlkX3NlYXJjaCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IHN0cnVjdCBzdGF0ICpwc3QsIGJvb2wgaW5zZXJ0KQorK3sKKysgIHN0cnVjdCBzdGF0IHN0OworKworKyAgaWYgKCFmaWxlX2lkX2hhc2gpCisrICAgIHsKKysgICAgICBmaWxlX2lkX2hhc2ggPSBoYXNoX2luaXRpYWxpemUgKDAsIE5VTEwsIChIYXNoX2hhc2hlcikgZmlsZV9pZF9oYXNoZXIsCisrCQkJCSAgICAgIChIYXNoX2NvbXBhcmF0b3IpIGZpbGVfaWRfY29tcGFyYXRvciwKKysJCQkJICAgICAgKEhhc2hfZGF0YV9mcmVlcikgZmlsZV9pZF9mcmVlcik7CisrICAgICAgaWYgKCFmaWxlX2lkX2hhc2gpCisrCXBmYXRhbCAoImhhc2hfaW5pdGlhbGl6ZSIpOworKyAgICB9CisrCisrICBpZiAoIXBzdCkKKysgICAgeworKyAgICAgIGlmIChzdGF0IChmaWxlbmFtZSwgJnN0KSAhPSAwKQorKwlwZmF0YWwgKCIlcyIsIHF1b3RlYXJnIChmaWxlbmFtZSkpOworKyAgICAgIHBzdCA9ICZzdDsKKysgICAgfQorKworKyAgaWYgKGluc2VydCkKKysgICAgeworKyAgICAgIGZpbGVfaWQgKnBmaWQgPSB4bWFsbG9jIChzaXplb2YgKGZpbGVfaWQpKSwgKm9sZF9wZmlkOworKyAgICAgIHBmaWQtPmZpZF9kZXYJICA9IHBzdC0+c3RfZGV2OworKyAgICAgIHBmaWQtPmZpZF9pbm8JICA9IHBzdC0+c3RfaW5vOworKyAgICAgIHBmaWQtPmZpZF9tdGltZQkgID0gcHN0LT5zdF9tdGltZTsKKysjaWYgZGVmaW5lZChIQVZFX1NUQVRfTlNFQykKKysgICAgICBwZmlkLT5maWRfbXRpbWVuc2VjID0gcHN0LT5zdF9tdGltZW5zZWM7CisrI2VsaWYgZGVmaW5lZChIQVZFX1NUQVRfVElNRVZBTCkKKysgICAgICBwZmlkLT5maWRfbXRpbWVuc2VjID0gcHN0LT5zdF9tdGltLnR2X25zZWM7CisrI2Vsc2UKKysgICAgICBwZmlkLT5maWRfbXRpbWVuc2VjID0gMDsKKysjZW5kaWYKKysgICAgICBvbGRfcGZpZCA9IGhhc2hfaW5zZXJ0IChmaWxlX2lkX2hhc2gsIHBmaWQpOworKyAgICAgIGlmICghb2xkX3BmaWQpCisrCXBmYXRhbCAoImhhc2hfaW5zZXJ0Iik7CisrICAgICAgZWxzZSBpZiAob2xkX3BmaWQgIT0gcGZpZCkKKysgICAgICAgIHsKKysJICBmcmVlIChwZmlkKTsKKysJICByZXR1cm4gdHJ1ZTsKKysJfQorKyAgICAgIGVsc2UKKysJcmV0dXJuIGZhbHNlOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBmaWxlX2lkIGZpZDsKKysgICAgICBmaWQuZmlkX2Rldgk9IHBzdC0+c3RfZGV2OworKyAgICAgIGZpZC5maWRfaW5vCT0gcHN0LT5zdF9pbm87CisrICAgICAgZmlkLmZpZF9tdGltZQk9IHBzdC0+c3RfbXRpbWU7CisrI2lmIGRlZmluZWQoSEFWRV9TVEFUX05TRUMpCisrICAgICAgZmlkLmZpZF9tdGltZW5zZWMgPSBwc3QtPnN0X210aW1lbnNlYzsKKysjZWxpZiBkZWZpbmVkKEhBVkVfU1RBVF9USU1FVkFMKQorKyAgICAgIGZpZC5maWRfbXRpbWVuc2VjID0gcHN0LT5zdF9tdGltLnR2X25zZWM7CisrI2Vsc2UKKysgICAgICBmaWQuZmlkX210aW1lbnNlYyA9IDA7CisrI2VuZGlmCisrICAgICAgcmV0dXJuIGhhc2hfbG9va3VwIChmaWxlX2lkX2hhc2gsICZmaWQpICE9IDA7CisrICAgIH0KKyt9CisrCistLS0gcGF0Y2gtMi41Ljkub3JpZy9oYXNoLmMKKysrKyBwYXRjaC0yLjUuOS9oYXNoLmMKK0BAIC0wLDAgKzEsMTA1MSBAQAorKy8qIGhhc2ggLSBoYXNoaW5nIHRhYmxlIHByb2Nlc3NpbmcuCisrCisrICAgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgV3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcsIDE5OTIuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysKKysvKiBBIGdlbmVyaWMgaGFzaCB0YWJsZSBwYWNrYWdlLiAgKi8KKysKKysvKiBEZWZpbmUgVVNFX09CU1RBQ0sgdG8gMSBpZiB5b3Ugd2FudCB0aGUgYWxsb2NhdG9yIHRvIHVzZSBvYnN0YWNrcyBpbnN0ZWFkCisrICAgb2YgbWFsbG9jLiAgSWYgeW91IGNoYW5nZSBVU0VfT0JTVEFDSywgeW91IGhhdmUgdG8gcmVjb21waWxlISAgKi8KKysKKysjaWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrI2lmIEhBVkVfU1RETElCX0gKKysjIGluY2x1ZGUgPHN0ZGxpYi5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysjaW5jbHVkZSA8c3RkYm9vbC5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKworKyNpZm5kZWYgSEFWRV9ERUNMX0ZSRUUKKysidGhpcyBjb25maWd1cmUtdGltZSBkZWNsYXJhdGlvbiB0ZXN0IHdhcyBub3QgcnVuIgorKyNlbmRpZgorKyNpZiAhSEFWRV9ERUNMX0ZSRUUKKyt2b2lkIGZyZWUgKCk7CisrI2VuZGlmCisrCisrI2lmbmRlZiBIQVZFX0RFQ0xfTUFMTE9DCisrInRoaXMgY29uZmlndXJlLXRpbWUgZGVjbGFyYXRpb24gdGVzdCB3YXMgbm90IHJ1biIKKysjZW5kaWYKKysjaWYgIUhBVkVfREVDTF9NQUxMT0MKKytjaGFyICptYWxsb2MgKCk7CisrI2VuZGlmCisrCisrI2lmIFVTRV9PQlNUQUNLCisrIyBpbmNsdWRlICJvYnN0YWNrLmgiCisrIyBpZm5kZWYgb2JzdGFja19jaHVua19hbGxvYworKyMgIGRlZmluZSBvYnN0YWNrX2NodW5rX2FsbG9jIG1hbGxvYworKyMgZW5kaWYKKysjIGlmbmRlZiBvYnN0YWNrX2NodW5rX2ZyZWUKKysjICBkZWZpbmUgb2JzdGFja19jaHVua19mcmVlIGZyZWUKKysjIGVuZGlmCisrI2VuZGlmCisrCisrI2luY2x1ZGUgImhhc2guaCIKKysKKytzdHJ1Y3QgaGFzaF90YWJsZQorKyAgeworKyAgICAvKiBUaGUgYXJyYXkgb2YgYnVja2V0cyBzdGFydHMgYXQgQlVDS0VUIGFuZCBleHRlbmRzIHRvIEJVQ0tFVF9MSU1JVC0xLAorKyAgICAgICBmb3IgYSBwb3NzaWJpbGl0eSBvZiBOX0JVQ0tFVFMuICBBbW9uZyB0aG9zZSwgTl9CVUNLRVRTX1VTRUQgYnVja2V0cworKyAgICAgICBhcmUgbm90IGVtcHR5LCB0aGVyZSBhcmUgTl9FTlRSSUVTIGFjdGl2ZSBlbnRyaWVzIGluIHRoZSB0YWJsZS4gICovCisrICAgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CisrICAgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXRfbGltaXQ7CisrICAgIHVuc2lnbmVkIG5fYnVja2V0czsKKysgICAgdW5zaWduZWQgbl9idWNrZXRzX3VzZWQ7CisrICAgIHVuc2lnbmVkIG5fZW50cmllczsKKysKKysgICAgLyogVHVuaW5nIGFyZ3VtZW50cywga2VwdCBpbiBhIHBoeXNpY2FseSBzZXBhcmF0ZSBzdHJ1Y3R1cmUuICAqLworKyAgICBjb25zdCBIYXNoX3R1bmluZyAqdHVuaW5nOworKworKyAgICAvKiBUaHJlZSBmdW5jdGlvbnMgYXJlIGdpdmVuIHRvIGBoYXNoX2luaXRpYWxpemUnLCBzZWUgdGhlIGRvY3VtZW50YXRpb24KKysgICAgICAgYmxvY2sgZm9yIHRoaXMgZnVuY3Rpb24uICBJbiBhIHdvcmQsIEhBU0hFUiByYW5kb21pemVzIGEgdXNlciBlbnRyeQorKyAgICAgICBpbnRvIGEgbnVtYmVyIHVwIGZyb20gMCB1cCB0byBzb21lIG1heGltdW0gbWludXMgMTsgQ09NUEFSQVRPUiByZXR1cm5zCisrICAgICAgIHRydWUgaWYgdHdvIHVzZXIgZW50cmllcyBjb21wYXJlIGVxdWFsbHk7IGFuZCBEQVRBX0ZSRUVSIGlzIHRoZSBjbGVhbnVwCisrICAgICAgIGZ1bmN0aW9uIGZvciBhIHVzZXIgZW50cnkuICAqLworKyAgICBIYXNoX2hhc2hlciBoYXNoZXI7CisrICAgIEhhc2hfY29tcGFyYXRvciBjb21wYXJhdG9yOworKyAgICBIYXNoX2RhdGFfZnJlZXIgZGF0YV9mcmVlcjsKKysKKysgICAgLyogQSBsaW5rZWQgbGlzdCBvZiBmcmVlZCBzdHJ1Y3QgaGFzaF9lbnRyeSBzdHJ1Y3RzLiAgKi8KKysgICAgc3RydWN0IGhhc2hfZW50cnkgKmZyZWVfZW50cnlfbGlzdDsKKysKKysjaWYgVVNFX09CU1RBQ0sKKysgICAgLyogV2hlbmV2ZXIgb2JzdGFja3MgYXJlIHVzZWQsIGl0IGlzIHBvc3NpYmxlIHRvIGFsbG9jYXRlIGFsbCBvdmVyZmxvd2VkCisrICAgICAgIGVudHJpZXMgaW50byBhIHNpbmdsZSBzdGFjaywgc28gdGhleSBhbGwgY2FuIGJlIGZyZWVkIGluIGEgc2luZ2xlCisrICAgICAgIG9wZXJhdGlvbi4gIEl0IGlzIG5vdCBjbGVhciBpZiB0aGUgc3BlZWR1cCBpcyB3b3J0aCB0aGUgdHJvdWJsZS4gICovCisrICAgIHN0cnVjdCBvYnN0YWNrIGVudHJ5X3N0YWNrOworKyNlbmRpZgorKyAgfTsKKysKKysvKiBBIGhhc2ggdGFibGUgY29udGFpbnMgbWFueSBpbnRlcm5hbCBlbnRyaWVzLCBlYWNoIGhvbGRpbmcgYSBwb2ludGVyIHRvCisrICAgc29tZSB1c2VyIHByb3ZpZGVkIGRhdGEgKGFsc28gY2FsbGVkIGEgdXNlciBlbnRyeSkuICBBbiBlbnRyeSBpbmRpc3RpbmN0bHkKKysgICByZWZlcnMgdG8gYm90aCB0aGUgaW50ZXJuYWwgZW50cnkgYW5kIGl0cyBhc3NvY2lhdGVkIHVzZXIgZW50cnkuICBBIHVzZXIKKysgICBlbnRyeSBjb250ZW50cyBtYXkgYmUgaGFzaGVkIGJ5IGEgcmFuZG9taXphdGlvbiBmdW5jdGlvbiAodGhlIGhhc2hpbmcKKysgICBmdW5jdGlvbiwgb3IganVzdCBgaGFzaGVyJyBmb3Igc2hvcnQpIGludG8gYSBudW1iZXIgKG9yIGBzbG90JykgYmV0d2VlbiAwCisrICAgYW5kIHRoZSBjdXJyZW50IHRhYmxlIHNpemUuICBBdCBlYWNoIHNsb3QgcG9zaXRpb24gaW4gdGhlIGhhc2ggdGFibGUsCisrICAgc3RhcnRzIGEgbGlua2VkIGNoYWluIG9mIGVudHJpZXMgZm9yIHdoaWNoIHRoZSB1c2VyIGRhdGEgYWxsIGhhc2ggdG8gdGhpcworKyAgIHNsb3QuICBBIGJ1Y2tldCBpcyB0aGUgY29sbGVjdGlvbiBvZiBhbGwgZW50cmllcyBoYXNoaW5nIHRvIHRoZSBzYW1lIHNsb3QuCisrCisrICAgQSBnb29kIGBoYXNoZXInIGZ1bmN0aW9uIHdpbGwgZGlzdHJpYnV0ZSBlbnRyaWVzIHJhdGhlciBldmVubHkgaW4gYnVja2V0cy4KKysgICBJbiB0aGUgaWRlYWwgY2FzZSwgdGhlIGxlbmd0aCBvZiBlYWNoIGJ1Y2tldCBpcyByb3VnaGx5IHRoZSBudW1iZXIgb2YKKysgICBlbnRyaWVzIGRpdmlkZWQgYnkgdGhlIHRhYmxlIHNpemUuICBGaW5kaW5nIHRoZSBzbG90IGZvciBhIGRhdGEgaXMgdXN1YWxseQorKyAgIGRvbmUgaW4gY29uc3RhbnQgdGltZSBieSB0aGUgYGhhc2hlcicsIGFuZCB0aGUgbGF0ZXIgZmluZGluZyBvZiBhIHByZWNpc2UKKysgICBlbnRyeSBpcyBsaW5lYXIgaW4gdGltZSB3aXRoIHRoZSBzaXplIG9mIHRoZSBidWNrZXQuICBDb25zZXF1ZW50bHksIGEKKysgICBsYXJnZXIgaGFzaCB0YWJsZSBzaXplICh0aGF0IGlzLCBhIGxhcmdlciBudW1iZXIgb2YgYnVja2V0cykgaXMgcHJvbmUgdG8KKysgICB5aWVsZGluZyBzaG9ydGVyIGNoYWlucywgKmdpdmVuKiB0aGUgYGhhc2hlcicgZnVuY3Rpb24gYmVoYXZlcyBwcm9wZXJseS4KKysKKysgICBMb25nIGJ1Y2tldHMgc2xvdyBkb3duIHRoZSBsb29rdXAgYWxnb3JpdGhtLiAgT25lIG1pZ2h0IHVzZSBiaWcgaGFzaCB0YWJsZQorKyAgIHNpemVzIGluIGhvcGUgdG8gcmVkdWNlIHRoZSBhdmVyYWdlIGxlbmd0aCBvZiBidWNrZXRzLCBidXQgdGhpcyBtaWdodAorKyAgIGJlY29tZSBpbm9yZGluYXRlLCBhcyB1bnVzZWQgc2xvdHMgaW4gdGhlIGhhc2ggdGFibGUgdGFrZSBzb21lIHNwYWNlLiAgVGhlCisrICAgYmVzdCBiZXQgaXMgdG8gbWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgYSBnb29kIGBoYXNoZXInIGZ1bmN0aW9uIChiZXdhcmUKKysgICB0aGF0IHRob3NlIGFyZSBub3QgdGhhdCBlYXN5IHRvIHdyaXRlISA6LSksIGFuZCB0byB1c2UgYSB0YWJsZSBzaXplCisrICAgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBudW1iZXIgb2YgZW50cmllcy4gICovCisrCisrLyogSWYgYW4gaW5zZXJ0aW9uIG1ha2VzIHRoZSByYXRpbyBvZiBub25lbXB0eSBidWNrZXRzIHRvIHRhYmxlIHNpemUgbGFyZ2VyCisrICAgdGhhbiB0aGUgZ3Jvd3RoIHRocmVzaG9sZCAoYSBudW1iZXIgYmV0d2VlbiAwLjAgYW5kIDEuMCksIHRoZW4gaW5jcmVhc2UKKysgICB0aGUgdGFibGUgc2l6ZSBieSBtdWx0aXBseWluZyBieSB0aGUgZ3Jvd3RoIGZhY3RvciAoYSBudW1iZXIgZ3JlYXRlciB0aGFuCisrICAgMS4wKS4gIFRoZSBncm93dGggdGhyZXNob2xkIGRlZmF1bHRzIHRvIDAuOCwgYW5kIHRoZSBncm93dGggZmFjdG9yCisrICAgZGVmYXVsdHMgdG8gMS40MTQsIG1lYW5pbmcgdGhhdCB0aGUgdGFibGUgd2lsbCBoYXZlIGRvdWJsZWQgaXRzIHNpemUKKysgICBldmVyeSBzZWNvbmQgdGltZSA4MCUgb2YgdGhlIGJ1Y2tldHMgZ2V0IHVzZWQuICAqLworKyNkZWZpbmUgREVGQVVMVF9HUk9XVEhfVEhSRVNIT0xEIDAuOAorKyNkZWZpbmUgREVGQVVMVF9HUk9XVEhfRkFDVE9SIDEuNDE0CisrCisrLyogSWYgYSBkZWxldGlvbiBlbXB0aWVzIGEgYnVja2V0IGFuZCBjYXVzZXMgdGhlIHJhdGlvIG9mIHVzZWQgYnVja2V0cyB0bworKyAgIHRhYmxlIHNpemUgdG8gYmVjb21lIHNtYWxsZXIgdGhhbiB0aGUgc2hyaW5rIHRocmVzaG9sZCAoYSBudW1iZXIgYmV0d2VlbgorKyAgIDAuMCBhbmQgMS4wKSwgdGhlbiBzaHJpbmsgdGhlIHRhYmxlIGJ5IG11bHRpcGx5aW5nIGJ5IHRoZSBzaHJpbmsgZmFjdG9yIChhCisrICAgbnVtYmVyIGdyZWF0ZXIgdGhhbiB0aGUgc2hyaW5rIHRocmVzaG9sZCBidXQgc21hbGxlciB0aGFuIDEuMCkuICBUaGUgc2hyaW5rCisrICAgdGhyZXNob2xkIGFuZCBmYWN0b3IgZGVmYXVsdCB0byAwLjAgYW5kIDEuMCwgbWVhbmluZyB0aGF0IHRoZSB0YWJsZSBuZXZlcgorKyAgIHNocmlua3MuICAqLworKyNkZWZpbmUgREVGQVVMVF9TSFJJTktfVEhSRVNIT0xEIDAuMAorKyNkZWZpbmUgREVGQVVMVF9TSFJJTktfRkFDVE9SIDEuMAorKworKy8qIFVzZSB0aGlzIHRvIGluaXRpYWxpemUgb3IgcmVzZXQgYSBUVU5JTkcgc3RydWN0dXJlIHRvCisrICAgc29tZSBzZW5zaWJsZSB2YWx1ZXMuICovCisrc3RhdGljIGNvbnN0IEhhc2hfdHVuaW5nIGRlZmF1bHRfdHVuaW5nID0KKysgIHsKKysgICAgREVGQVVMVF9TSFJJTktfVEhSRVNIT0xELAorKyAgICBERUZBVUxUX1NIUklOS19GQUNUT1IsCisrICAgIERFRkFVTFRfR1JPV1RIX1RIUkVTSE9MRCwKKysgICAgREVGQVVMVF9HUk9XVEhfRkFDVE9SLAorKyAgICBmYWxzZQorKyAgfTsKKysKKysvKiBJbmZvcm1hdGlvbiBhbmQgbG9va3VwLiAgKi8KKysKKysvKiBUaGUgZm9sbG93aW5nIGZldyBmdW5jdGlvbnMgcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3ZlcmFsbCBoYXNoCisrICAgdGFibGUgb3JnYW5pemF0aW9uOiB0aGUgbnVtYmVyIG9mIGVudHJpZXMsIG51bWJlciBvZiBidWNrZXRzIGFuZCBtYXhpbXVtCisrICAgbGVuZ3RoIG9mIGJ1Y2tldHMuICAqLworKworKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgaW4gdGhlIGhhc2ggdGFibGUuICBUaGUgdGFibGUgc2l6ZSwgdGhlIHRvdGFsCisrICAgbnVtYmVyIG9mIGJ1Y2tldHMgKHVzZWQgcGx1cyB1bnVzZWQpLCBvciB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2xvdHMsIGFyZQorKyAgIHRoZSBzYW1lIHF1YW50aXR5LiAgKi8KKysKKyt1bnNpZ25lZAorK2hhc2hfZ2V0X25fYnVja2V0cyAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUpCisreworKyAgcmV0dXJuIHRhYmxlLT5uX2J1Y2tldHM7CisrfQorKworKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIHNsb3RzIGluIHVzZSAobm9uLWVtcHR5IGJ1Y2tldHMpLiAgKi8KKysKKyt1bnNpZ25lZAorK2hhc2hfZ2V0X25fYnVja2V0c191c2VkIChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSkKKyt7CisrICByZXR1cm4gdGFibGUtPm5fYnVja2V0c191c2VkOworK30KKysKKysvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBhY3RpdmUgZW50cmllcy4gICovCisrCisrdW5zaWduZWQKKytoYXNoX2dldF9uX2VudHJpZXMgKGNvbnN0IEhhc2hfdGFibGUgKnRhYmxlKQorK3sKKysgIHJldHVybiB0YWJsZS0+bl9lbnRyaWVzOworK30KKysKKysvKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgbG9uZ2VzdCBjaGFpbiAoYnVja2V0KS4gICovCisrCisrdW5zaWduZWQKKytoYXNoX2dldF9tYXhfYnVja2V0X2xlbmd0aCAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUpCisreworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysgIHVuc2lnbmVkIG1heF9idWNrZXRfbGVuZ3RoID0gMDsKKysKKysgIGZvciAoYnVja2V0ID0gdGFibGUtPmJ1Y2tldDsgYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdDsgYnVja2V0KyspCisrICAgIHsKKysgICAgICBpZiAoYnVja2V0LT5kYXRhKQorKwl7CisrCSAgc3RydWN0IGhhc2hfZW50cnkgKmN1cnNvciA9IGJ1Y2tldDsKKysJICB1bnNpZ25lZCBidWNrZXRfbGVuZ3RoID0gMTsKKysKKysJICB3aGlsZSAoY3Vyc29yID0gY3Vyc29yLT5uZXh0LCBjdXJzb3IpCisrCSAgICBidWNrZXRfbGVuZ3RoKys7CisrCisrCSAgaWYgKGJ1Y2tldF9sZW5ndGggPiBtYXhfYnVja2V0X2xlbmd0aCkKKysJICAgIG1heF9idWNrZXRfbGVuZ3RoID0gYnVja2V0X2xlbmd0aDsKKysJfQorKyAgICB9CisrCisrICByZXR1cm4gbWF4X2J1Y2tldF9sZW5ndGg7CisrfQorKworKy8qIERvIGEgbWlsZCB2YWxpZGF0aW9uIG9mIGEgaGFzaCB0YWJsZSwgYnkgdHJhdmVyc2luZyBpdCBhbmQgY2hlY2tpbmcgdHdvCisrICAgc3RhdGlzdGljcy4gICovCisrCisrYm9vbAorK2hhc2hfdGFibGVfb2sgKGNvbnN0IEhhc2hfdGFibGUgKnRhYmxlKQorK3sKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CisrICB1bnNpZ25lZCBuX2J1Y2tldHNfdXNlZCA9IDA7CisrICB1bnNpZ25lZCBuX2VudHJpZXMgPSAwOworKworKyAgZm9yIChidWNrZXQgPSB0YWJsZS0+YnVja2V0OyBidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0OyBidWNrZXQrKykKKysgICAgeworKyAgICAgIGlmIChidWNrZXQtPmRhdGEpCisrCXsKKysJICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yID0gYnVja2V0OworKworKwkgIC8qIENvdW50IGJ1Y2tldCBoZWFkLiAgKi8KKysJICBuX2J1Y2tldHNfdXNlZCsrOworKwkgIG5fZW50cmllcysrOworKworKwkgIC8qIENvdW50IGJ1Y2tldCBvdmVyZmxvdy4gICovCisrCSAgd2hpbGUgKGN1cnNvciA9IGN1cnNvci0+bmV4dCwgY3Vyc29yKQorKwkgICAgbl9lbnRyaWVzKys7CisrCX0KKysgICAgfQorKworKyAgaWYgKG5fYnVja2V0c191c2VkID09IHRhYmxlLT5uX2J1Y2tldHNfdXNlZCAmJiBuX2VudHJpZXMgPT0gdGFibGUtPm5fZW50cmllcykKKysgICAgcmV0dXJuIHRydWU7CisrCisrICByZXR1cm4gZmFsc2U7CisrfQorKworK3ZvaWQKKytoYXNoX3ByaW50X3N0YXRpc3RpY3MgKGNvbnN0IEhhc2hfdGFibGUgKnRhYmxlLCBGSUxFICpzdHJlYW0pCisreworKyAgdW5zaWduZWQgbl9lbnRyaWVzID0gaGFzaF9nZXRfbl9lbnRyaWVzICh0YWJsZSk7CisrICB1bnNpZ25lZCBuX2J1Y2tldHMgPSBoYXNoX2dldF9uX2J1Y2tldHMgKHRhYmxlKTsKKysgIHVuc2lnbmVkIG5fYnVja2V0c191c2VkID0gaGFzaF9nZXRfbl9idWNrZXRzX3VzZWQgKHRhYmxlKTsKKysgIHVuc2lnbmVkIG1heF9idWNrZXRfbGVuZ3RoID0gaGFzaF9nZXRfbWF4X2J1Y2tldF9sZW5ndGggKHRhYmxlKTsKKysKKysgIGZwcmludGYgKHN0cmVhbSwgIiMgZW50cmllczogICAgICAgICAldVxuIiwgbl9lbnRyaWVzKTsKKysgIGZwcmludGYgKHN0cmVhbSwgIiMgYnVja2V0czogICAgICAgICAldVxuIiwgbl9idWNrZXRzKTsKKysgIGZwcmludGYgKHN0cmVhbSwgIiMgYnVja2V0cyB1c2VkOiAgICAldSAoJS4yZiUlKVxuIiwgbl9idWNrZXRzX3VzZWQsCisrCSAgICgxMDAuMCAqIG5fYnVja2V0c191c2VkKSAvIG5fYnVja2V0cyk7CisrICBmcHJpbnRmIChzdHJlYW0sICJtYXggYnVja2V0IGxlbmd0aDogJXVcbiIsIG1heF9idWNrZXRfbGVuZ3RoKTsKKyt9CisrCisrLyogSWYgRU5UUlkgbWF0Y2hlcyBhbiBlbnRyeSBhbHJlYWR5IGluIHRoZSBoYXNoIHRhYmxlLCByZXR1cm4gdGhlCisrICAgZW50cnkgZnJvbSB0aGUgdGFibGUuICBPdGhlcndpc2UsIHJldHVybiBOVUxMLiAgKi8KKysKKyt2b2lkICoKKytoYXNoX2xvb2t1cCAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUsIGNvbnN0IHZvaWQgKmVudHJ5KQorK3sKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQKKysgICAgPSB0YWJsZS0+YnVja2V0ICsgdGFibGUtPmhhc2hlciAoZW50cnksIHRhYmxlLT5uX2J1Y2tldHMpOworKyAgc3RydWN0IGhhc2hfZW50cnkgKmN1cnNvcjsKKysKKysgIGlmICghIChidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0KSkKKysgICAgYWJvcnQgKCk7CisrCisrICBpZiAoYnVja2V0LT5kYXRhID09IE5VTEwpCisrICAgIHJldHVybiBOVUxMOworKworKyAgZm9yIChjdXJzb3IgPSBidWNrZXQ7IGN1cnNvcjsgY3Vyc29yID0gY3Vyc29yLT5uZXh0KQorKyAgICBpZiAodGFibGUtPmNvbXBhcmF0b3IgKGVudHJ5LCBjdXJzb3ItPmRhdGEpKQorKyAgICAgIHJldHVybiBjdXJzb3ItPmRhdGE7CisrCisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrLyogV2Fsa2luZy4gICovCisrCisrLyogVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIHBhZ2UgdHJhdmVyc2UgdGhlIGhhc2ggdGFibGUgYW5kIHByb2Nlc3MgdGhlCisrICAgY29udGFpbmVkIGVudHJpZXMuICBGb3IgdGhlIHRyYXZlcnNhbCB0byB3b3JrIHByb3Blcmx5LCB0aGUgaGFzaCB0YWJsZQorKyAgIHNob3VsZCBub3QgYmUgcmVzaXplZCBub3IgbW9kaWZpZWQgd2hpbGUgYW55IHBhcnRpY3VsYXIgZW50cnkgaXMgYmVpbmcKKysgICBwcm9jZXNzZWQuICBJbiBwYXJ0aWN1bGFyLCBlbnRyaWVzIHNob3VsZCBub3QgYmUgYWRkZWQgb3IgcmVtb3ZlZC4gICovCisrCisrLyogUmV0dXJuIHRoZSBmaXJzdCBkYXRhIGluIHRoZSB0YWJsZSwgb3IgTlVMTCBpZiB0aGUgdGFibGUgaXMgZW1wdHkuICAqLworKworK3ZvaWQgKgorK2hhc2hfZ2V0X2ZpcnN0IChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSkKKyt7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKworKyAgaWYgKHRhYmxlLT5uX2VudHJpZXMgPT0gMCkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IDsgYnVja2V0KyspCisrICAgIGlmICghIChidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0KSkKKysgICAgICBhYm9ydCAoKTsKKysgICAgZWxzZSBpZiAoYnVja2V0LT5kYXRhKQorKyAgICAgIHJldHVybiBidWNrZXQtPmRhdGE7CisrfQorKworKy8qIFJldHVybiB0aGUgdXNlciBkYXRhIGZvciB0aGUgZW50cnkgZm9sbG93aW5nIEVOVFJZLCB3aGVyZSBFTlRSWSBoYXMgYmVlbgorKyAgIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBlaXRoZXIgYGhhc2hfZ2V0X2ZpcnN0JyBvciBgaGFzaF9nZXRfbmV4dCcuCisrICAgUmV0dXJuIE5VTEwgaWYgdGhlcmUgYXJlIG5vIG1vcmUgZW50cmllcy4gICovCisrCisrdm9pZCAqCisraGFzaF9nZXRfbmV4dCAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUsIGNvbnN0IHZvaWQgKmVudHJ5KQorK3sKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQKKysgICAgPSB0YWJsZS0+YnVja2V0ICsgdGFibGUtPmhhc2hlciAoZW50cnksIHRhYmxlLT5uX2J1Y2tldHMpOworKyAgc3RydWN0IGhhc2hfZW50cnkgKmN1cnNvcjsKKysKKysgIGlmICghIChidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0KSkKKysgICAgYWJvcnQgKCk7CisrCisrICAvKiBGaW5kIG5leHQgZW50cnkgaW4gdGhlIHNhbWUgYnVja2V0LiAgKi8KKysgIGZvciAoY3Vyc29yID0gYnVja2V0OyBjdXJzb3I7IGN1cnNvciA9IGN1cnNvci0+bmV4dCkKKysgICAgaWYgKGN1cnNvci0+ZGF0YSA9PSBlbnRyeSAmJiBjdXJzb3ItPm5leHQpCisrICAgICAgcmV0dXJuIGN1cnNvci0+bmV4dC0+ZGF0YTsKKysKKysgIC8qIEZpbmQgZmlyc3QgZW50cnkgaW4gYW55IHN1YnNlcXVlbnQgYnVja2V0LiAgKi8KKysgIHdoaWxlICgrK2J1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQpCisrICAgIGlmIChidWNrZXQtPmRhdGEpCisrICAgICAgcmV0dXJuIGJ1Y2tldC0+ZGF0YTsKKysKKysgIC8qIE5vbmUgZm91bmQuICAqLworKyAgcmV0dXJuIE5VTEw7CisrfQorKworKy8qIEZpbGwgQlVGRkVSIHdpdGggcG9pbnRlcnMgdG8gYWN0aXZlIHVzZXIgZW50cmllcyBpbiB0aGUgaGFzaCB0YWJsZSwgdGhlbgorKyAgIHJldHVybiB0aGUgbnVtYmVyIG9mIHBvaW50ZXJzIGNvcGllZC4gIERvIG5vdCBjb3B5IG1vcmUgdGhhbiBCVUZGRVJfU0laRQorKyAgIHBvaW50ZXJzLiAgKi8KKysKKyt1bnNpZ25lZAorK2hhc2hfZ2V0X2VudHJpZXMgKGNvbnN0IEhhc2hfdGFibGUgKnRhYmxlLCB2b2lkICoqYnVmZmVyLAorKwkJICB1bnNpZ25lZCBidWZmZXJfc2l6ZSkKKyt7CisrICB1bnNpZ25lZCBjb3VudGVyID0gMDsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yOworKworKyAgZm9yIChidWNrZXQgPSB0YWJsZS0+YnVja2V0OyBidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0OyBidWNrZXQrKykKKysgICAgeworKyAgICAgIGlmIChidWNrZXQtPmRhdGEpCisrCXsKKysJICBmb3IgKGN1cnNvciA9IGJ1Y2tldDsgY3Vyc29yOyBjdXJzb3IgPSBjdXJzb3ItPm5leHQpCisrCSAgICB7CisrCSAgICAgIGlmIChjb3VudGVyID49IGJ1ZmZlcl9zaXplKQorKwkJcmV0dXJuIGNvdW50ZXI7CisrCSAgICAgIGJ1ZmZlcltjb3VudGVyKytdID0gY3Vyc29yLT5kYXRhOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKysgIHJldHVybiBjb3VudGVyOworK30KKysKKysvKiBDYWxsIGEgUFJPQ0VTU09SIGZ1bmN0aW9uIGZvciBlYWNoIGVudHJ5IG9mIGEgaGFzaCB0YWJsZSwgYW5kIHJldHVybiB0aGUKKysgICBudW1iZXIgb2YgZW50cmllcyBmb3Igd2hpY2ggdGhlIHByb2Nlc3NvciBmdW5jdGlvbiByZXR1cm5lZCBzdWNjZXNzLiAgQQorKyAgIHBvaW50ZXIgdG8gc29tZSBQUk9DRVNTT1JfREFUQSB3aGljaCB3aWxsIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGVhY2ggY2FsbCB0bworKyAgIHRoZSBwcm9jZXNzb3IgZnVuY3Rpb24uICBUaGUgUFJPQ0VTU09SIGFjY2VwdHMgdHdvIGFyZ3VtZW50czogdGhlIGZpcnN0IGlzCisrICAgdGhlIHVzZXIgZW50cnkgYmVpbmcgd2Fsa2VkIGludG8sIHRoZSBzZWNvbmQgaXMgdGhlIHZhbHVlIG9mIFBST0NFU1NPUl9EQVRBCisrICAgYXMgcmVjZWl2ZWQuICBUaGUgd2Fsa2luZyBjb250aW51ZSBmb3IgYXMgbG9uZyBhcyB0aGUgUFJPQ0VTU09SIGZ1bmN0aW9uCisrICAgcmV0dXJucyBub256ZXJvLiAgV2hlbiBpdCByZXR1cm5zIHplcm8sIHRoZSB3YWxraW5nIGlzIGludGVycnVwdGVkLiAgKi8KKysKKyt1bnNpZ25lZAorK2hhc2hfZG9fZm9yX2VhY2ggKGNvbnN0IEhhc2hfdGFibGUgKnRhYmxlLCBIYXNoX3Byb2Nlc3NvciBwcm9jZXNzb3IsCisrCQkgIHZvaWQgKnByb2Nlc3Nvcl9kYXRhKQorK3sKKysgIHVuc2lnbmVkIGNvdW50ZXIgPSAwOworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3I7CisrCisrICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQorKyAgICB7CisrICAgICAgaWYgKGJ1Y2tldC0+ZGF0YSkKKysJeworKwkgIGZvciAoY3Vyc29yID0gYnVja2V0OyBjdXJzb3I7IGN1cnNvciA9IGN1cnNvci0+bmV4dCkKKysJICAgIHsKKysJICAgICAgaWYgKCEoKnByb2Nlc3NvcikgKGN1cnNvci0+ZGF0YSwgcHJvY2Vzc29yX2RhdGEpKQorKwkJcmV0dXJuIGNvdW50ZXI7CisrCSAgICAgIGNvdW50ZXIrKzsKKysJICAgIH0KKysJfQorKyAgICB9CisrCisrICByZXR1cm4gY291bnRlcjsKKyt9CisrCisrLyogQWxsb2NhdGlvbiBhbmQgY2xlYW4tdXAuICAqLworKworKy8qIFJldHVybiBhIGhhc2ggaW5kZXggZm9yIGEgTlVMLXRlcm1pbmF0ZWQgU1RSSU5HIGJldHdlZW4gMCBhbmQgTl9CVUNLRVRTLTEuCisrICAgVGhpcyBpcyBhIGNvbnZlbmllbmNlIHJvdXRpbmUgZm9yIGNvbnN0cnVjdGluZyBvdGhlciBoYXNoaW5nIGZ1bmN0aW9ucy4gICovCisrCisrI2lmIFVTRV9ESUZGX0hBU0gKKysKKysvKiBBYm91dCBoYXNoaW5ncywgUGF1bCBFZ2dlcnQgd3JpdGVzIHRvIG1lIChGUCksIG9uIDE5OTQtMDEtMDE6ICJQbGVhc2Ugc2VlCisrICAgQi4gSi4gTWNLZW56aWUsIFIuIEhhcnJpZXMgJiBULiBCZWxsLCBTZWxlY3RpbmcgYSBoYXNoaW5nIGFsZ29yaXRobSwKKysgICBTb2Z0d2FyZS0tcHJhY3RpY2UgJiBleHBlcmllbmNlIDIwLCAyIChGZWIgMTk5MCksIDIwOS0yMjQuICBHb29kIGhhc2gKKysgICBhbGdvcml0aG1zIHRlbmQgdG8gYmUgZG9tYWluLXNwZWNpZmljLCBzbyB3aGF0J3MgZ29vZCBmb3IgW2RpZmZ1dGlscyddIGlvLmMKKysgICBtYXkgbm90IGJlIGdvb2QgZm9yIHlvdXIgYXBwbGljYXRpb24uIiAgKi8KKysKKyt1bnNpZ25lZAorK2hhc2hfc3RyaW5nIChjb25zdCBjaGFyICpzdHJpbmcsIHVuc2lnbmVkIG5fYnVja2V0cykKKyt7CisrIyBkZWZpbmUgUk9UQVRFX0xFRlQoVmFsdWUsIFNoaWZ0KSBcCisrICAoKFZhbHVlKSA8PCAoU2hpZnQpIHwgKFZhbHVlKSA+PiAoKHNpemVvZiAodW5zaWduZWQpICogQ0hBUl9CSVQpIC0gKFNoaWZ0KSkpCisrIyBkZWZpbmUgSEFTSF9PTkVfQ0hBUihWYWx1ZSwgQnl0ZSkgXAorKyAgKChCeXRlKSArIFJPVEFURV9MRUZUIChWYWx1ZSwgNykpCisrCisrICB1bnNpZ25lZCB2YWx1ZSA9IDA7CisrCisrICBmb3IgKDsgKnN0cmluZzsgc3RyaW5nKyspCisrICAgIHZhbHVlID0gSEFTSF9PTkVfQ0hBUiAodmFsdWUsICooY29uc3QgdW5zaWduZWQgY2hhciAqKSBzdHJpbmcpOworKyAgcmV0dXJuIHZhbHVlICUgbl9idWNrZXRzOworKworKyMgdW5kZWYgUk9UQVRFX0xFRlQKKysjIHVuZGVmIEhBU0hfT05FX0NIQVIKKyt9CisrCisrI2Vsc2UgLyogbm90IFVTRV9ESUZGX0hBU0ggKi8KKysKKysvKiBUaGlzIG9uZSBjb21lcyBmcm9tIGByZWNvZGUnLCBhbmQgcGVyZm9ybXMgYSBiaXQgYmV0dGVyIHRoYW4gdGhlIGFib3ZlIGFzCisrICAgcGVyIGEgZmV3IGV4cGVyaW1lbnRzLiAgSXQgaXMgaW5zcGlyZWQgZnJvbSBhIGhhc2hpbmcgcm91dGluZSBmb3VuZCBpbiB0aGUKKysgICB2ZXJ5IG9sZCBDeWJlciBgc25vb3AnLCBpdHNlbGYgd3JpdHRlbiBpbiB0eXBpY2FsIEdyZWcgTWFuc2ZpZWxkIHN0eWxlLgorKyAgIChCeSB0aGUgd2F5LCB3aGF0IGhhcHBlbmVkIHRvIHRoaXMgZXhjZWxsZW50IG1hbj8gIElzIGhlIHN0aWxsIGFsaXZlPykgICovCisrCisrdW5zaWduZWQKKytoYXNoX3N0cmluZyAoY29uc3QgY2hhciAqc3RyaW5nLCB1bnNpZ25lZCBuX2J1Y2tldHMpCisreworKyAgdW5zaWduZWQgdmFsdWUgPSAwOworKworKyAgd2hpbGUgKCpzdHJpbmcpCisrICAgIHZhbHVlID0gKCh2YWx1ZSAqIDMxICsgKGludCkgKihjb25zdCB1bnNpZ25lZCBjaGFyICopIHN0cmluZysrKQorKwkgICAgICUgbl9idWNrZXRzKTsKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisrI2VuZGlmIC8qIG5vdCBVU0VfRElGRl9IQVNIICovCisrCisrLyogUmV0dXJuIHRydWUgaWYgQ0FORElEQVRFIGlzIGEgcHJpbWUgbnVtYmVyLiAgQ0FORElEQVRFIHNob3VsZCBiZSBhbiBvZGQKKysgICBudW1iZXIgYXQgbGVhc3QgZXF1YWwgdG8gMTEuICAqLworKworK3N0YXRpYyBib29sCisraXNfcHJpbWUgKHVuc2lnbmVkIGxvbmcgY2FuZGlkYXRlKQorK3sKKysgIHVuc2lnbmVkIGxvbmcgZGl2aXNvciA9IDM7CisrICB1bnNpZ25lZCBsb25nIHNxdWFyZSA9IGRpdmlzb3IgKiBkaXZpc29yOworKworKyAgd2hpbGUgKHNxdWFyZSA8IGNhbmRpZGF0ZSAmJiAoY2FuZGlkYXRlICUgZGl2aXNvcikpCisrICAgIHsKKysgICAgICBkaXZpc29yKys7CisrICAgICAgc3F1YXJlICs9IDQgKiBkaXZpc29yOworKyAgICAgIGRpdmlzb3IrKzsKKysgICAgfQorKworKyAgcmV0dXJuIChjYW5kaWRhdGUgJSBkaXZpc29yID8gdHJ1ZSA6IGZhbHNlKTsKKyt9CisrCisrLyogUm91bmQgYSBnaXZlbiBDQU5ESURBVEUgbnVtYmVyIHVwIHRvIHRoZSBuZWFyZXN0IHByaW1lLCBhbmQgcmV0dXJuIHRoYXQKKysgICBwcmltZS4gIFByaW1lcyBsb3dlciB0aGFuIDEwIGFyZSBtZXJlbHkgc2tpcHBlZC4gICovCisrCisrc3RhdGljIHVuc2lnbmVkIGxvbmcKKytuZXh0X3ByaW1lICh1bnNpZ25lZCBsb25nIGNhbmRpZGF0ZSkKKyt7CisrICAvKiBTa2lwIHNtYWxsIHByaW1lcy4gICovCisrICBpZiAoY2FuZGlkYXRlIDwgMTApCisrICAgIGNhbmRpZGF0ZSA9IDEwOworKworKyAgLyogTWFrZSBpdCBkZWZpbml0ZWx5IG9kZC4gICovCisrICBjYW5kaWRhdGUgfD0gMTsKKysKKysgIHdoaWxlICghaXNfcHJpbWUgKGNhbmRpZGF0ZSkpCisrICAgIGNhbmRpZGF0ZSArPSAyOworKworKyAgcmV0dXJuIGNhbmRpZGF0ZTsKKyt9CisrCisrdm9pZAorK2hhc2hfcmVzZXRfdHVuaW5nIChIYXNoX3R1bmluZyAqdHVuaW5nKQorK3sKKysgICp0dW5pbmcgPSBkZWZhdWx0X3R1bmluZzsKKyt9CisrCisrLyogRm9yIHRoZSBnaXZlbiBoYXNoIFRBQkxFLCBjaGVjayB0aGUgdXNlciBzdXBwbGllZCB0dW5pbmcgc3RydWN0dXJlIGZvcgorKyAgIHJlYXNvbmFibGUgdmFsdWVzLCBhbmQgcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgbm8gZ3Jvc3MgZXJyb3Igd2l0aCBpdC4KKysgICBPdGhlcndpc2UsIGRlZmluaXRpdmVseSByZXNldCB0aGUgVFVOSU5HIGZpZWxkIHRvIHNvbWUgYWNjZXB0YWJsZSBkZWZhdWx0CisrICAgaW4gdGhlIGhhc2ggdGFibGUgKHRoYXQgaXMsIHRoZSB1c2VyIGxvc2VzIHRoZSByaWdodCBvZiBmdXJ0aGVyIG1vZGlmeWluZworKyAgIHR1bmluZyBhcmd1bWVudHMpLCBhbmQgcmV0dXJuIGZhbHNlLiAgKi8KKysKKytzdGF0aWMgYm9vbAorK2NoZWNrX3R1bmluZyAoSGFzaF90YWJsZSAqdGFibGUpCisreworKyAgY29uc3QgSGFzaF90dW5pbmcgKnR1bmluZyA9IHRhYmxlLT50dW5pbmc7CisrCisrICBpZiAodHVuaW5nLT5ncm93dGhfdGhyZXNob2xkID4gMC4wCisrICAgICAgJiYgdHVuaW5nLT5ncm93dGhfdGhyZXNob2xkIDwgMS4wCisrICAgICAgJiYgdHVuaW5nLT5ncm93dGhfZmFjdG9yID4gMS4wCisrICAgICAgJiYgdHVuaW5nLT5zaHJpbmtfdGhyZXNob2xkID49IDAuMAorKyAgICAgICYmIHR1bmluZy0+c2hyaW5rX3RocmVzaG9sZCA8IDEuMAorKyAgICAgICYmIHR1bmluZy0+c2hyaW5rX2ZhY3RvciA+IHR1bmluZy0+c2hyaW5rX3RocmVzaG9sZAorKyAgICAgICYmIHR1bmluZy0+c2hyaW5rX2ZhY3RvciA8PSAxLjAKKysgICAgICAmJiB0dW5pbmctPnNocmlua190aHJlc2hvbGQgPCB0dW5pbmctPmdyb3d0aF90aHJlc2hvbGQpCisrICAgIHJldHVybiB0cnVlOworKworKyAgdGFibGUtPnR1bmluZyA9ICZkZWZhdWx0X3R1bmluZzsKKysgIHJldHVybiBmYWxzZTsKKyt9CisrCisrLyogQWxsb2NhdGUgYW5kIHJldHVybiBhIG5ldyBoYXNoIHRhYmxlLCBvciBOVUxMIHVwb24gZmFpbHVyZS4gIFRoZSBpbml0aWFsCisrICAgbnVtYmVyIG9mIGJ1Y2tldHMgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBzbyBhcyB0byBfZ3VhcmFudGVlXyB0aGF0IHlvdQorKyAgIG1heSBpbnNlcnQgYXQgbGVhc3QgQ0FORElEQVRFIGRpZmZlcmVudCB1c2VyIGVudHJpZXMgYmVmb3JlIGFueSBncm93dGggb2YKKysgICB0aGUgaGFzaCB0YWJsZSBzaXplIG9jY3Vycy4gIFNvLCBpZiBoYXZlIGEgcmVhc29uYWJseSB0aWdodCBhLXByaW9yaSB1cHBlcgorKyAgIGJvdW5kIG9uIHRoZSBudW1iZXIgb2YgZW50cmllcyB5b3UgaW50ZW5kIHRvIGluc2VydCBpbiB0aGUgaGFzaCB0YWJsZSwgeW91CisrICAgbWF5IHNhdmUgc29tZSB0YWJsZSBtZW1vcnkgYW5kIGluc2VydGlvbiB0aW1lLCBieSBzcGVjaWZ5aW5nIGl0IGhlcmUuICBJZgorKyAgIHRoZSBJU19OX0JVQ0tFVFMgZmllbGQgb2YgdGhlIFRVTklORyBzdHJ1Y3R1cmUgaXMgdHJ1ZSwgdGhlIENBTkRJREFURQorKyAgIGFyZ3VtZW50IGhhcyBpdHMgbWVhbmluZyBjaGFuZ2VkIHRvIHRoZSB3YW50ZWQgbnVtYmVyIG9mIGJ1Y2tldHMuCisrCisrICAgVFVOSU5HIHBvaW50cyB0byBhIHN0cnVjdHVyZSBvZiB1c2VyLXN1cHBsaWVkIHZhbHVlcywgaW4gY2FzZSBzb21lIGZpbmUKKysgICB0dW5pbmcgaXMgd2FudGVkIG92ZXIgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIGhhc2hlci4gIElmIFRVTklORyBpcworKyAgIE5VTEwsIHRoZSBkZWZhdWx0IHR1bmluZyBwYXJhbWV0ZXJzIGFyZSB1c2VkIGluc3RlYWQuCisrCisrICAgVGhlIHVzZXItc3VwcGxpZWQgSEFTSEVSIGZ1bmN0aW9uIHNob3VsZCBiZSBwcm92aWRlZC4gIEl0IGFjY2VwdHMgdHdvCisrICAgYXJndW1lbnRzIEVOVFJZIGFuZCBUQUJMRV9TSVpFLiAgSXQgY29tcHV0ZXMsIGJ5IGhhc2hpbmcgRU5UUlkgY29udGVudHMsIGEKKysgICBzbG90IG51bWJlciBmb3IgdGhhdCBlbnRyeSB3aGljaCBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIDAuLlRBQkxFX1NJWkUtMS4KKysgICBUaGlzIHNsb3QgbnVtYmVyIGlzIHRoZW4gcmV0dXJuZWQuCisrCisrICAgVGhlIHVzZXItc3VwcGxpZWQgQ09NUEFSQVRPUiBmdW5jdGlvbiBzaG91bGQgYmUgcHJvdmlkZWQuICBJdCBhY2NlcHRzIHR3bworKyAgIGFyZ3VtZW50cyBwb2ludGluZyB0byB1c2VyIGRhdGEsIGl0IHRoZW4gcmV0dXJucyB0cnVlIGZvciBhIHBhaXIgb2YgZW50cmllcworKyAgIHRoYXQgY29tcGFyZSBlcXVhbCwgb3IgZmFsc2Ugb3RoZXJ3aXNlLiAgVGhpcyBmdW5jdGlvbiBpcyBpbnRlcm5hbGx5IGNhbGxlZAorKyAgIG9uIGVudHJpZXMgd2hpY2ggYXJlIGFscmVhZHkga25vd24gdG8gaGFzaCB0byB0aGUgc2FtZSBidWNrZXQgaW5kZXguCisrCisrICAgVGhlIHVzZXItc3VwcGxpZWQgREFUQV9GUkVFUiBmdW5jdGlvbiwgd2hlbiBub3QgTlVMTCwgbWF5IGJlIGxhdGVyIGNhbGxlZAorKyAgIHdpdGggdGhlIHVzZXIgZGF0YSBhcyBhbiBhcmd1bWVudCwganVzdCBiZWZvcmUgdGhlIGVudHJ5IGNvbnRhaW5pbmcgdGhlCisrICAgZGF0YSBnZXRzIGZyZWVkLiAgVGhpcyBoYXBwZW5zIGZyb20gd2l0aGluIGBoYXNoX2ZyZWUnIG9yIGBoYXNoX2NsZWFyJy4KKysgICBZb3Ugc2hvdWxkIHNwZWNpZnkgdGhpcyBmdW5jdGlvbiBvbmx5IGlmIHlvdSB3YW50IHRoZXNlIGZ1bmN0aW9ucyB0byBmcmVlCisrICAgYWxsIG9mIHlvdXIgYGRhdGEnIGRhdGEuICBUaGlzIGlzIHR5cGljYWxseSB0aGUgY2FzZSB3aGVuIHlvdXIgZGF0YSBpcworKyAgIHNpbXBseSBhbiBhdXhpbGlhcnkgc3RydWN0IHRoYXQgeW91IGhhdmUgbWFsbG9jJ2QgdG8gYWdncmVnYXRlIHNldmVyYWwKKysgICB2YWx1ZXMuICAqLworKworK0hhc2hfdGFibGUgKgorK2hhc2hfaW5pdGlhbGl6ZSAodW5zaWduZWQgY2FuZGlkYXRlLCBjb25zdCBIYXNoX3R1bmluZyAqdHVuaW5nLAorKwkJIEhhc2hfaGFzaGVyIGhhc2hlciwgSGFzaF9jb21wYXJhdG9yIGNvbXBhcmF0b3IsCisrCQkgSGFzaF9kYXRhX2ZyZWVyIGRhdGFfZnJlZXIpCisreworKyAgSGFzaF90YWJsZSAqdGFibGU7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKworKyAgaWYgKGhhc2hlciA9PSBOVUxMIHx8IGNvbXBhcmF0b3IgPT0gTlVMTCkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICB0YWJsZSA9IChIYXNoX3RhYmxlICopIG1hbGxvYyAoc2l6ZW9mIChIYXNoX3RhYmxlKSk7CisrICBpZiAodGFibGUgPT0gTlVMTCkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICBpZiAoIXR1bmluZykKKysgICAgdHVuaW5nID0gJmRlZmF1bHRfdHVuaW5nOworKyAgdGFibGUtPnR1bmluZyA9IHR1bmluZzsKKysgIGlmICghY2hlY2tfdHVuaW5nICh0YWJsZSkpCisrICAgIHsKKysgICAgICAvKiBGYWlsIGlmIHRoZSB0dW5pbmcgb3B0aW9ucyBhcmUgaW52YWxpZC4gIFRoaXMgaXMgdGhlIG9ubHkgb2NjYXNpb24KKysJIHdoZW4gdGhlIHVzZXIgZ2V0cyBzb21lIGZlZWRiYWNrIGFib3V0IGl0LiAgT25jZSB0aGUgdGFibGUgaXMgY3JlYXRlZCwKKysJIGlmIHRoZSB1c2VyIHByb3ZpZGVzIGludmFsaWQgdHVuaW5nIG9wdGlvbnMsIHdlIHNpbGVudGx5IHJldmVydCB0bworKwkgdXNpbmcgdGhlIGRlZmF1bHRzLCBhbmQgaWdub3JlIGZ1cnRoZXIgcmVxdWVzdCB0byBjaGFuZ2UgdGhlIHR1bmluZworKwkgb3B0aW9ucy4gICovCisrICAgICAgZnJlZSAodGFibGUpOworKyAgICAgIHJldHVybiBOVUxMOworKyAgICB9CisrCisrICB0YWJsZS0+bl9idWNrZXRzCisrICAgID0gbmV4dF9wcmltZSAodHVuaW5nLT5pc19uX2J1Y2tldHMgPyBjYW5kaWRhdGUKKysJCSAgOiAodW5zaWduZWQpIChjYW5kaWRhdGUgLyB0dW5pbmctPmdyb3d0aF90aHJlc2hvbGQpKTsKKysKKysgIHRhYmxlLT5idWNrZXQgPSAoc3RydWN0IGhhc2hfZW50cnkgKikKKysgICAgbWFsbG9jICh0YWJsZS0+bl9idWNrZXRzICogc2l6ZW9mIChzdHJ1Y3QgaGFzaF9lbnRyeSkpOworKyAgaWYgKHRhYmxlLT5idWNrZXQgPT0gTlVMTCkKKysgICAgeworKyAgICAgIGZyZWUgKHRhYmxlKTsKKysgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorKyAgdGFibGUtPmJ1Y2tldF9saW1pdCA9IHRhYmxlLT5idWNrZXQgKyB0YWJsZS0+bl9idWNrZXRzOworKworKyAgZm9yIChidWNrZXQgPSB0YWJsZS0+YnVja2V0OyBidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0OyBidWNrZXQrKykKKysgICAgeworKyAgICAgIGJ1Y2tldC0+ZGF0YSA9IE5VTEw7CisrICAgICAgYnVja2V0LT5uZXh0ID0gTlVMTDsKKysgICAgfQorKyAgdGFibGUtPm5fYnVja2V0c191c2VkID0gMDsKKysgIHRhYmxlLT5uX2VudHJpZXMgPSAwOworKworKyAgdGFibGUtPmhhc2hlciA9IGhhc2hlcjsKKysgIHRhYmxlLT5jb21wYXJhdG9yID0gY29tcGFyYXRvcjsKKysgIHRhYmxlLT5kYXRhX2ZyZWVyID0gZGF0YV9mcmVlcjsKKysKKysgIHRhYmxlLT5mcmVlX2VudHJ5X2xpc3QgPSBOVUxMOworKyNpZiBVU0VfT0JTVEFDSworKyAgb2JzdGFja19pbml0ICgmdGFibGUtPmVudHJ5X3N0YWNrKTsKKysjZW5kaWYKKysgIHJldHVybiB0YWJsZTsKKyt9CisrCisrLyogTWFrZSBhbGwgYnVja2V0cyBlbXB0eSwgcGxhY2luZyBhbnkgY2hhaW5lZCBlbnRyaWVzIG9uIHRoZSBmcmVlIGxpc3QuCisrICAgQXBwbHkgdGhlIHVzZXItc3BlY2lmaWVkIGZ1bmN0aW9uIGRhdGFfZnJlZXIgKGlmIGFueSkgdG8gdGhlIGRhdGFzIG9mIGFueQorKyAgIGFmZmVjdGVkIGVudHJpZXMuICAqLworKworK3ZvaWQKKytoYXNoX2NsZWFyIChIYXNoX3RhYmxlICp0YWJsZSkKKyt7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKworKyAgZm9yIChidWNrZXQgPSB0YWJsZS0+YnVja2V0OyBidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0OyBidWNrZXQrKykKKysgICAgeworKyAgICAgIGlmIChidWNrZXQtPmRhdGEpCisrCXsKKysJICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yOworKwkgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXh0OworKworKwkgIC8qIEZyZWUgdGhlIGJ1Y2tldCBvdmVyZmxvdy4gICovCisrCSAgZm9yIChjdXJzb3IgPSBidWNrZXQtPm5leHQ7IGN1cnNvcjsgY3Vyc29yID0gbmV4dCkKKysJICAgIHsKKysJICAgICAgaWYgKHRhYmxlLT5kYXRhX2ZyZWVyKQorKwkJKCp0YWJsZS0+ZGF0YV9mcmVlcikgKGN1cnNvci0+ZGF0YSk7CisrCSAgICAgIGN1cnNvci0+ZGF0YSA9IE5VTEw7CisrCisrCSAgICAgIG5leHQgPSBjdXJzb3ItPm5leHQ7CisrCSAgICAgIC8qIFJlbGlua2luZyBpcyBkb25lIG9uZSBlbnRyeSBhdCBhIHRpbWUsIGFzIGl0IGlzIHRvIGJlIGV4cGVjdGVkCisrCQkgdGhhdCBvdmVyZmxvd3MgYXJlIGVpdGhlciByYXJlIG9yIHNob3J0LiAgKi8KKysJICAgICAgY3Vyc29yLT5uZXh0ID0gdGFibGUtPmZyZWVfZW50cnlfbGlzdDsKKysJICAgICAgdGFibGUtPmZyZWVfZW50cnlfbGlzdCA9IGN1cnNvcjsKKysJICAgIH0KKysKKysJICAvKiBGcmVlIHRoZSBidWNrZXQgaGVhZC4gICovCisrCSAgaWYgKHRhYmxlLT5kYXRhX2ZyZWVyKQorKwkgICAgKCp0YWJsZS0+ZGF0YV9mcmVlcikgKGJ1Y2tldC0+ZGF0YSk7CisrCSAgYnVja2V0LT5kYXRhID0gTlVMTDsKKysJICBidWNrZXQtPm5leHQgPSBOVUxMOworKwl9CisrICAgIH0KKysKKysgIHRhYmxlLT5uX2J1Y2tldHNfdXNlZCA9IDA7CisrICB0YWJsZS0+bl9lbnRyaWVzID0gMDsKKyt9CisrCisrLyogUmVjbGFpbSBhbGwgc3RvcmFnZSBhc3NvY2lhdGVkIHdpdGggYSBoYXNoIHRhYmxlLiAgSWYgYSBkYXRhX2ZyZWVyCisrICAgZnVuY3Rpb24gaGFzIGJlZW4gc3VwcGxpZWQgYnkgdGhlIHVzZXIgd2hlbiB0aGUgaGFzaCB0YWJsZSB3YXMgY3JlYXRlZCwKKysgICB0aGlzIGZ1bmN0aW9uIGFwcGxpZXMgaXQgdG8gdGhlIGRhdGEgb2YgZWFjaCBlbnRyeSBiZWZvcmUgZnJlZWluZyB0aGF0CisrICAgZW50cnkuICAqLworKworK3ZvaWQKKytoYXNoX2ZyZWUgKEhhc2hfdGFibGUgKnRhYmxlKQorK3sKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yOworKyAgc3RydWN0IGhhc2hfZW50cnkgKm5leHQ7CisrCisrICAvKiBDYWxsIHRoZSB1c2VyIGRhdGFfZnJlZXIgZnVuY3Rpb24uICAqLworKyAgaWYgKHRhYmxlLT5kYXRhX2ZyZWVyICYmIHRhYmxlLT5uX2VudHJpZXMpCisrICAgIHsKKysgICAgICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQorKwl7CisrCSAgaWYgKGJ1Y2tldC0+ZGF0YSkKKysJICAgIHsKKysJICAgICAgZm9yIChjdXJzb3IgPSBidWNrZXQ7IGN1cnNvcjsgY3Vyc29yID0gY3Vyc29yLT5uZXh0KQorKwkJeworKwkJICAoKnRhYmxlLT5kYXRhX2ZyZWVyKSAoY3Vyc29yLT5kYXRhKTsKKysJCX0KKysJICAgIH0KKysJfQorKyAgICB9CisrCisrI2lmIFVTRV9PQlNUQUNLCisrCisrICBvYnN0YWNrX2ZyZWUgKCZ0YWJsZS0+ZW50cnlfc3RhY2ssIE5VTEwpOworKworKyNlbHNlCisrCisrICAvKiBGcmVlIGFsbCBidWNrZXQgb3ZlcmZsb3dlZCBlbnRyaWVzLiAgKi8KKysgIGZvciAoYnVja2V0ID0gdGFibGUtPmJ1Y2tldDsgYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdDsgYnVja2V0KyspCisrICAgIHsKKysgICAgICBmb3IgKGN1cnNvciA9IGJ1Y2tldC0+bmV4dDsgY3Vyc29yOyBjdXJzb3IgPSBuZXh0KQorKwl7CisrCSAgbmV4dCA9IGN1cnNvci0+bmV4dDsKKysJICBmcmVlIChjdXJzb3IpOworKwl9CisrICAgIH0KKysKKysgIC8qIEFsc28gcmVjbGFpbSB0aGUgaW50ZXJuYWwgbGlzdCBvZiBwcmV2aW91c2x5IGZyZWVkIGVudHJpZXMuICAqLworKyAgZm9yIChjdXJzb3IgPSB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0OyBjdXJzb3I7IGN1cnNvciA9IG5leHQpCisrICAgIHsKKysgICAgICBuZXh0ID0gY3Vyc29yLT5uZXh0OworKyAgICAgIGZyZWUgKGN1cnNvcik7CisrICAgIH0KKysKKysjZW5kaWYKKysKKysgIC8qIEZyZWUgdGhlIHJlbWFpbmRlciBvZiB0aGUgaGFzaCB0YWJsZSBzdHJ1Y3R1cmUuICAqLworKyAgZnJlZSAodGFibGUtPmJ1Y2tldCk7CisrICBmcmVlICh0YWJsZSk7CisrfQorKworKy8qIEluc2VydGlvbiBhbmQgZGVsZXRpb24uICAqLworKworKy8qIEdldCBhIG5ldyBoYXNoIGVudHJ5IGZvciBhIGJ1Y2tldCBvdmVyZmxvdywgcG9zc2libHkgYnkgcmVjbHlpbmcgYQorKyAgIHByZXZpb3VzbHkgZnJlZWQgb25lLiAgSWYgdGhpcyBpcyBub3QgcG9zc2libGUsIGFsbG9jYXRlIGEgbmV3IG9uZS4gICovCisrCisrc3RhdGljIHN0cnVjdCBoYXNoX2VudHJ5ICoKKythbGxvY2F0ZV9lbnRyeSAoSGFzaF90YWJsZSAqdGFibGUpCisreworKyAgc3RydWN0IGhhc2hfZW50cnkgKm5ldzsKKysKKysgIGlmICh0YWJsZS0+ZnJlZV9lbnRyeV9saXN0KQorKyAgICB7CisrICAgICAgbmV3ID0gdGFibGUtPmZyZWVfZW50cnlfbGlzdDsKKysgICAgICB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0ID0gbmV3LT5uZXh0OworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysjaWYgVVNFX09CU1RBQ0sKKysgICAgICBuZXcgPSAoc3RydWN0IGhhc2hfZW50cnkgKikKKysJb2JzdGFja19hbGxvYyAoJnRhYmxlLT5lbnRyeV9zdGFjaywgc2l6ZW9mIChzdHJ1Y3QgaGFzaF9lbnRyeSkpOworKyNlbHNlCisrICAgICAgbmV3ID0gKHN0cnVjdCBoYXNoX2VudHJ5ICopIG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgaGFzaF9lbnRyeSkpOworKyNlbmRpZgorKyAgICB9CisrCisrICByZXR1cm4gbmV3OworK30KKysKKysvKiBGcmVlIGEgaGFzaCBlbnRyeSB3aGljaCB3YXMgcGFydCBvZiBzb21lIGJ1Y2tldCBvdmVyZmxvdywKKysgICBzYXZpbmcgaXQgZm9yIGxhdGVyIHJlY3ljbGluZy4gICovCisrCisrc3RhdGljIHZvaWQKKytmcmVlX2VudHJ5IChIYXNoX3RhYmxlICp0YWJsZSwgc3RydWN0IGhhc2hfZW50cnkgKmVudHJ5KQorK3sKKysgIGVudHJ5LT5kYXRhID0gTlVMTDsKKysgIGVudHJ5LT5uZXh0ID0gdGFibGUtPmZyZWVfZW50cnlfbGlzdDsKKysgIHRhYmxlLT5mcmVlX2VudHJ5X2xpc3QgPSBlbnRyeTsKKyt9CisrCisrLyogVGhpcyBwcml2YXRlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaGVscCB3aXRoIGluc2VydGlvbiBhbmQgZGVsZXRpb24uICBXaGVuCisrICAgRU5UUlkgbWF0Y2hlcyBhbiBlbnRyeSBpbiB0aGUgdGFibGUsIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcKKysgICB1c2VyIGRhdGEgYW5kIHNldCAqQlVDS0VUX0hFQUQgdG8gdGhlIGhlYWQgb2YgdGhlIHNlbGVjdGVkIGJ1Y2tldC4KKysgICBPdGhlcndpc2UsIHJldHVybiBOVUxMLiAgV2hlbiBERUxFVEUgaXMgdHJ1ZSBhbmQgRU5UUlkgbWF0Y2hlcyBhbiBlbnRyeSBpbgorKyAgIHRoZSB0YWJsZSwgdW5saW5rIHRoZSBtYXRjaGluZyBlbnRyeS4gICovCisrCisrc3RhdGljIHZvaWQgKgorK2hhc2hfZmluZF9lbnRyeSAoSGFzaF90YWJsZSAqdGFibGUsIGNvbnN0IHZvaWQgKmVudHJ5LAorKwkJIHN0cnVjdCBoYXNoX2VudHJ5ICoqYnVja2V0X2hlYWQsIGJvb2wgZGVsZXRlKQorK3sKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQKKysgICAgPSB0YWJsZS0+YnVja2V0ICsgdGFibGUtPmhhc2hlciAoZW50cnksIHRhYmxlLT5uX2J1Y2tldHMpOworKyAgc3RydWN0IGhhc2hfZW50cnkgKmN1cnNvcjsKKysKKysgIGlmICghIChidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0KSkKKysgICAgYWJvcnQgKCk7CisrCisrICAqYnVja2V0X2hlYWQgPSBidWNrZXQ7CisrCisrICAvKiBUZXN0IGZvciBlbXB0eSBidWNrZXQuICAqLworKyAgaWYgKGJ1Y2tldC0+ZGF0YSA9PSBOVUxMKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIC8qIFNlZSBpZiB0aGUgZW50cnkgaXMgdGhlIGZpcnN0IGluIHRoZSBidWNrZXQuICAqLworKyAgaWYgKCgqdGFibGUtPmNvbXBhcmF0b3IpIChlbnRyeSwgYnVja2V0LT5kYXRhKSkKKysgICAgeworKyAgICAgIHZvaWQgKmRhdGEgPSBidWNrZXQtPmRhdGE7CisrCisrICAgICAgaWYgKGRlbGV0ZSkKKysJeworKwkgIGlmIChidWNrZXQtPm5leHQpCisrCSAgICB7CisrCSAgICAgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXh0ID0gYnVja2V0LT5uZXh0OworKworKwkgICAgICAvKiBCdW1wIHRoZSBmaXJzdCBvdmVyZmxvdyBlbnRyeSBpbnRvIHRoZSBidWNrZXQgaGVhZCwgdGhlbiBzYXZlCisrCQkgdGhlIHByZXZpb3VzIGZpcnN0IG92ZXJmbG93IGVudHJ5IGZvciBsYXRlciByZWN5Y2xpbmcuICAqLworKwkgICAgICAqYnVja2V0ID0gKm5leHQ7CisrCSAgICAgIGZyZWVfZW50cnkgKHRhYmxlLCBuZXh0KTsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIGJ1Y2tldC0+ZGF0YSA9IE5VTEw7CisrCSAgICB9CisrCX0KKysKKysgICAgICByZXR1cm4gZGF0YTsKKysgICAgfQorKworKyAgLyogU2NhbiB0aGUgYnVja2V0IG92ZXJmbG93LiAgKi8KKysgIGZvciAoY3Vyc29yID0gYnVja2V0OyBjdXJzb3ItPm5leHQ7IGN1cnNvciA9IGN1cnNvci0+bmV4dCkKKysgICAgeworKyAgICAgIGlmICgoKnRhYmxlLT5jb21wYXJhdG9yKSAoZW50cnksIGN1cnNvci0+bmV4dC0+ZGF0YSkpCisrCXsKKysJICB2b2lkICpkYXRhID0gY3Vyc29yLT5uZXh0LT5kYXRhOworKworKwkgIGlmIChkZWxldGUpCisrCSAgICB7CisrCSAgICAgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXh0ID0gY3Vyc29yLT5uZXh0OworKworKwkgICAgICAvKiBVbmxpbmsgdGhlIGVudHJ5IHRvIGRlbGV0ZSwgdGhlbiBzYXZlIHRoZSBmcmVlZCBlbnRyeSBmb3IgbGF0ZXIKKysJCSByZWN5Y2xpbmcuICAqLworKwkgICAgICBjdXJzb3ItPm5leHQgPSBuZXh0LT5uZXh0OworKwkgICAgICBmcmVlX2VudHJ5ICh0YWJsZSwgbmV4dCk7CisrCSAgICB9CisrCisrCSAgcmV0dXJuIGRhdGE7CisrCX0KKysgICAgfQorKworKyAgLyogTm8gZW50cnkgZm91bmQuICAqLworKyAgcmV0dXJuIE5VTEw7CisrfQorKworKy8qIEZvciBhbiBhbHJlYWR5IGV4aXN0aW5nIGhhc2ggdGFibGUsIGNoYW5nZSB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgdGhyb3VnaAorKyAgIHNwZWNpZnlpbmcgQ0FORElEQVRFLiAgVGhlIGNvbnRlbnRzIG9mIHRoZSBoYXNoIHRhYmxlIGFyZSBwcmVzZXJ2ZWQuICBUaGUKKysgICBuZXcgbnVtYmVyIG9mIGJ1Y2tldHMgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBzbyBhcyB0byBfZ3VhcmFudGVlXyB0aGF0CisrICAgdGhlIHRhYmxlIG1heSByZWNlaXZlIGF0IGxlYXN0IENBTkRJREFURSBkaWZmZXJlbnQgdXNlciBlbnRyaWVzLCBpbmNsdWRpbmcKKysgICB0aG9zZSBhbHJlYWR5IGluIHRoZSB0YWJsZSwgYmVmb3JlIGFueSBvdGhlciBncm93dGggb2YgdGhlIGhhc2ggdGFibGUgc2l6ZQorKyAgIG9jY3Vycy4gIElmIFRVTklORy0+SVNfTl9CVUNLRVRTIGlzIHRydWUsIHRoZW4gQ0FORElEQVRFIHNwZWNpZmllcyB0aGUKKysgICBleGFjdCBudW1iZXIgb2YgYnVja2V0cyBkZXNpcmVkLiAgKi8KKysKKytib29sCisraGFzaF9yZWhhc2ggKEhhc2hfdGFibGUgKnRhYmxlLCB1bnNpZ25lZCBjYW5kaWRhdGUpCisreworKyAgSGFzaF90YWJsZSAqbmV3X3RhYmxlOworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3I7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV4dDsKKysKKysgIG5ld190YWJsZSA9IGhhc2hfaW5pdGlhbGl6ZSAoY2FuZGlkYXRlLCB0YWJsZS0+dHVuaW5nLCB0YWJsZS0+aGFzaGVyLAorKwkJCSAgICAgICB0YWJsZS0+Y29tcGFyYXRvciwgdGFibGUtPmRhdGFfZnJlZXIpOworKyAgaWYgKG5ld190YWJsZSA9PSBOVUxMKQorKyAgICByZXR1cm4gZmFsc2U7CisrCisrICAvKiBNZXJlbHkgcmV1c2UgdGhlIGV4dHJhIG9sZCBzcGFjZSBpbnRvIHRoZSBuZXcgdGFibGUuICAqLworKyNpZiBVU0VfT0JTVEFDSworKyAgb2JzdGFja19mcmVlICgmbmV3X3RhYmxlLT5lbnRyeV9zdGFjaywgTlVMTCk7CisrICBuZXdfdGFibGUtPmVudHJ5X3N0YWNrID0gdGFibGUtPmVudHJ5X3N0YWNrOworKyNlbmRpZgorKyAgbmV3X3RhYmxlLT5mcmVlX2VudHJ5X2xpc3QgPSB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0OworKworKyAgZm9yIChidWNrZXQgPSB0YWJsZS0+YnVja2V0OyBidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0OyBidWNrZXQrKykKKysgICAgaWYgKGJ1Y2tldC0+ZGF0YSkKKysgICAgICBmb3IgKGN1cnNvciA9IGJ1Y2tldDsgY3Vyc29yOyBjdXJzb3IgPSBuZXh0KQorKwl7CisrCSAgdm9pZCAqZGF0YSA9IGN1cnNvci0+ZGF0YTsKKysJICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV3X2J1Y2tldAorKwkgICAgPSAobmV3X3RhYmxlLT5idWNrZXQKKysJICAgICAgICsgbmV3X3RhYmxlLT5oYXNoZXIgKGRhdGEsIG5ld190YWJsZS0+bl9idWNrZXRzKSk7CisrCisrCSAgaWYgKCEgKG5ld19idWNrZXQgPCBuZXdfdGFibGUtPmJ1Y2tldF9saW1pdCkpCisrCSAgICBhYm9ydCAoKTsKKysKKysJICBuZXh0ID0gY3Vyc29yLT5uZXh0OworKworKwkgIGlmIChuZXdfYnVja2V0LT5kYXRhKQorKwkgICAgeworKwkgICAgICBpZiAoY3Vyc29yID09IGJ1Y2tldCkKKysJCXsKKysJCSAgLyogQWxsb2NhdGUgb3IgcmVjeWNsZSBhbiBlbnRyeSwgd2hlbiBtb3ZpbmcgZnJvbSBhIGJ1Y2tldAorKwkJICAgICBoZWFkZXIgaW50byBhIGJ1Y2tldCBvdmVyZmxvdy4gICovCisrCQkgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXdfZW50cnkgPSBhbGxvY2F0ZV9lbnRyeSAobmV3X3RhYmxlKTsKKysKKysJCSAgaWYgKG5ld19lbnRyeSA9PSBOVUxMKQorKwkJICAgIHJldHVybiBmYWxzZTsKKysKKysJCSAgbmV3X2VudHJ5LT5kYXRhID0gZGF0YTsKKysJCSAgbmV3X2VudHJ5LT5uZXh0ID0gbmV3X2J1Y2tldC0+bmV4dDsKKysJCSAgbmV3X2J1Y2tldC0+bmV4dCA9IG5ld19lbnRyeTsKKysJCX0KKysJICAgICAgZWxzZQorKwkJeworKwkJICAvKiBNZXJlbHkgcmVsaW5rIGFuIGV4aXN0aW5nIGVudHJ5LCB3aGVuIG1vdmluZyBmcm9tIGEKKysJCSAgICAgYnVja2V0IG92ZXJmbG93IGludG8gYSBidWNrZXQgb3ZlcmZsb3cuICAqLworKwkJICBjdXJzb3ItPm5leHQgPSBuZXdfYnVja2V0LT5uZXh0OworKwkJICBuZXdfYnVja2V0LT5uZXh0ID0gY3Vyc29yOworKwkJfQorKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgLyogRnJlZSBhbiBleGlzdGluZyBlbnRyeSwgd2hlbiBtb3ZpbmcgZnJvbSBhIGJ1Y2tldAorKwkJIG92ZXJmbG93IGludG8gYSBidWNrZXQgaGVhZGVyLiAgQWxzbyB0YWtlIGNhcmUgb2YgdGhlCisrCQkgc2ltcGxlIGNhc2Ugb2YgbW92aW5nIGZyb20gYSBidWNrZXQgaGVhZGVyIGludG8gYSBidWNrZXQKKysJCSBoZWFkZXIuICAqLworKwkgICAgICBuZXdfYnVja2V0LT5kYXRhID0gZGF0YTsKKysJICAgICAgbmV3X3RhYmxlLT5uX2J1Y2tldHNfdXNlZCsrOworKwkgICAgICBpZiAoY3Vyc29yICE9IGJ1Y2tldCkKKysJCWZyZWVfZW50cnkgKG5ld190YWJsZSwgY3Vyc29yKTsKKysJICAgIH0KKysJfQorKworKyAgZnJlZSAodGFibGUtPmJ1Y2tldCk7CisrICB0YWJsZS0+YnVja2V0ID0gbmV3X3RhYmxlLT5idWNrZXQ7CisrICB0YWJsZS0+YnVja2V0X2xpbWl0ID0gbmV3X3RhYmxlLT5idWNrZXRfbGltaXQ7CisrICB0YWJsZS0+bl9idWNrZXRzID0gbmV3X3RhYmxlLT5uX2J1Y2tldHM7CisrICB0YWJsZS0+bl9idWNrZXRzX3VzZWQgPSBuZXdfdGFibGUtPm5fYnVja2V0c191c2VkOworKyAgdGFibGUtPmZyZWVfZW50cnlfbGlzdCA9IG5ld190YWJsZS0+ZnJlZV9lbnRyeV9saXN0OworKyAgLyogdGFibGUtPm5fZW50cmllcyBhbHJlYWR5IGhvbGRzIGl0cyB2YWx1ZS4gICovCisrI2lmIFVTRV9PQlNUQUNLCisrICB0YWJsZS0+ZW50cnlfc3RhY2sgPSBuZXdfdGFibGUtPmVudHJ5X3N0YWNrOworKyNlbmRpZgorKyAgZnJlZSAobmV3X3RhYmxlKTsKKysKKysgIHJldHVybiB0cnVlOworK30KKysKKysvKiBJZiBFTlRSWSBtYXRjaGVzIGFuIGVudHJ5IGFscmVhZHkgaW4gdGhlIGhhc2ggdGFibGUsIHJldHVybiB0aGUgcG9pbnRlcgorKyAgIHRvIHRoZSBlbnRyeSBmcm9tIHRoZSB0YWJsZS4gIE90aGVyd2lzZSwgaW5zZXJ0IEVOVFJZIGFuZCByZXR1cm4gRU5UUlkuCisrICAgUmV0dXJuIE5VTEwgaWYgdGhlIHN0b3JhZ2UgcmVxdWlyZWQgZm9yIGluc2VydGlvbiBjYW5ub3QgYmUgYWxsb2NhdGVkLiAgKi8KKysKKyt2b2lkICoKKytoYXNoX2luc2VydCAoSGFzaF90YWJsZSAqdGFibGUsIGNvbnN0IHZvaWQgKmVudHJ5KQorK3sKKysgIHZvaWQgKmRhdGE7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKworKyAgLyogVGhlIGNhbGxlciBjYW5ub3QgaW5zZXJ0IGEgTlVMTCBlbnRyeS4gICovCisrICBpZiAoISBlbnRyeSkKKysgICAgYWJvcnQgKCk7CisrCisrICAvKiBJZiB0aGVyZSdzIGEgbWF0Y2hpbmcgZW50cnkgYWxyZWFkeSBpbiB0aGUgdGFibGUsIHJldHVybiB0aGF0LiAgKi8KKysgIGlmICgoZGF0YSA9IGhhc2hfZmluZF9lbnRyeSAodGFibGUsIGVudHJ5LCAmYnVja2V0LCBmYWxzZSkpICE9IE5VTEwpCisrICAgIHJldHVybiBkYXRhOworKworKyAgLyogRU5UUlkgaXMgbm90IG1hdGNoZWQsIGl0IHNob3VsZCBiZSBpbnNlcnRlZC4gICovCisrCisrICBpZiAoYnVja2V0LT5kYXRhKQorKyAgICB7CisrICAgICAgc3RydWN0IGhhc2hfZW50cnkgKm5ld19lbnRyeSA9IGFsbG9jYXRlX2VudHJ5ICh0YWJsZSk7CisrCisrICAgICAgaWYgKG5ld19lbnRyeSA9PSBOVUxMKQorKwlyZXR1cm4gTlVMTDsKKysKKysgICAgICAvKiBBZGQgRU5UUlkgaW4gdGhlIG92ZXJmbG93IG9mIHRoZSBidWNrZXQuICAqLworKworKyAgICAgIG5ld19lbnRyeS0+ZGF0YSA9ICh2b2lkICopIGVudHJ5OworKyAgICAgIG5ld19lbnRyeS0+bmV4dCA9IGJ1Y2tldC0+bmV4dDsKKysgICAgICBidWNrZXQtPm5leHQgPSBuZXdfZW50cnk7CisrICAgICAgdGFibGUtPm5fZW50cmllcysrOworKyAgICAgIHJldHVybiAodm9pZCAqKSBlbnRyeTsKKysgICAgfQorKworKyAgLyogQWRkIEVOVFJZIHJpZ2h0IGluIHRoZSBidWNrZXQgaGVhZC4gICovCisrCisrICBidWNrZXQtPmRhdGEgPSAodm9pZCAqKSBlbnRyeTsKKysgIHRhYmxlLT5uX2VudHJpZXMrKzsKKysgIHRhYmxlLT5uX2J1Y2tldHNfdXNlZCsrOworKworKyAgLyogSWYgdGhlIGdyb3d0aCB0aHJlc2hvbGQgb2YgdGhlIGJ1Y2tldHMgaW4gdXNlIGhhcyBiZWVuIHJlYWNoZWQsIGluY3JlYXNlCisrICAgICB0aGUgdGFibGUgc2l6ZSBhbmQgcmVoYXNoLiAgVGhlcmUncyBubyBwb2ludCBpbiBjaGVja2luZyB0aGUgbnVtYmVyIG9mCisrICAgICBlbnRyaWVzOiAgaWYgdGhlIGhhc2hpbmcgZnVuY3Rpb24gaXMgaWxsLWNvbmRpdGlvbmVkLCByZWhhc2hpbmcgaXMgbm90CisrICAgICBsaWtlbHkgdG8gaW1wcm92ZSBpdC4gICovCisrCisrICBpZiAodGFibGUtPm5fYnVja2V0c191c2VkCisrICAgICAgPiB0YWJsZS0+dHVuaW5nLT5ncm93dGhfdGhyZXNob2xkICogdGFibGUtPm5fYnVja2V0cykKKysgICAgeworKyAgICAgIC8qIENoZWNrIG1vcmUgZnVsbHksIGJlZm9yZSBzdGFydGluZyByZWFsIHdvcmsuICBJZiB0dW5pbmcgYXJndW1lbnRzCisrCSBiZWNhbWUgaW52YWxpZCwgdGhlIHNlY29uZCBjaGVjayB3aWxsIHJlbHkgb24gcHJvcGVyIGRlZmF1bHRzLiAgKi8KKysgICAgICBjaGVja190dW5pbmcgKHRhYmxlKTsKKysgICAgICBpZiAodGFibGUtPm5fYnVja2V0c191c2VkCisrCSAgPiB0YWJsZS0+dHVuaW5nLT5ncm93dGhfdGhyZXNob2xkICogdGFibGUtPm5fYnVja2V0cykKKysJeworKwkgIGNvbnN0IEhhc2hfdHVuaW5nICp0dW5pbmcgPSB0YWJsZS0+dHVuaW5nOworKwkgIHVuc2lnbmVkIGNhbmRpZGF0ZQorKwkgICAgPSAodW5zaWduZWQpICh0dW5pbmctPmlzX25fYnVja2V0cworKwkJCSAgPyAodGFibGUtPm5fYnVja2V0cyAqIHR1bmluZy0+Z3Jvd3RoX2ZhY3RvcikKKysJCQkgIDogKHRhYmxlLT5uX2J1Y2tldHMgKiB0dW5pbmctPmdyb3d0aF9mYWN0b3IKKysJCQkgICAgICogdHVuaW5nLT5ncm93dGhfdGhyZXNob2xkKSk7CisrCisrCSAgLyogSWYgdGhlIHJlaGFzaCBmYWlscywgYXJyYW5nZSB0byByZXR1cm4gTlVMTC4gICovCisrCSAgaWYgKCFoYXNoX3JlaGFzaCAodGFibGUsIGNhbmRpZGF0ZSkpCisrCSAgICBlbnRyeSA9IE5VTEw7CisrCX0KKysgICAgfQorKworKyAgcmV0dXJuICh2b2lkICopIGVudHJ5OworK30KKysKKysvKiBJZiBFTlRSWSBpcyBhbHJlYWR5IGluIHRoZSB0YWJsZSwgcmVtb3ZlIGl0IGFuZCByZXR1cm4gdGhlIGp1c3QtZGVsZXRlZAorKyAgIGRhdGEgKHRoZSB1c2VyIG1heSB3YW50IHRvIGRlYWxsb2NhdGUgaXRzIHN0b3JhZ2UpLiAgSWYgRU5UUlkgaXMgbm90IGluIHRoZQorKyAgIHRhYmxlLCBkb24ndCBtb2RpZnkgdGhlIHRhYmxlIGFuZCByZXR1cm4gTlVMTC4gICovCisrCisrdm9pZCAqCisraGFzaF9kZWxldGUgKEhhc2hfdGFibGUgKnRhYmxlLCBjb25zdCB2b2lkICplbnRyeSkKKyt7CisrICB2b2lkICpkYXRhOworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysKKysgIGRhdGEgPSBoYXNoX2ZpbmRfZW50cnkgKHRhYmxlLCBlbnRyeSwgJmJ1Y2tldCwgdHJ1ZSk7CisrICBpZiAoIWRhdGEpCisrICAgIHJldHVybiBOVUxMOworKworKyAgdGFibGUtPm5fZW50cmllcy0tOworKyAgaWYgKCFidWNrZXQtPmRhdGEpCisrICAgIHsKKysgICAgICB0YWJsZS0+bl9idWNrZXRzX3VzZWQtLTsKKysKKysgICAgICAvKiBJZiB0aGUgc2hyaW5rIHRocmVzaG9sZCBvZiB0aGUgYnVja2V0cyBpbiB1c2UgaGFzIGJlZW4gcmVhY2hlZCwKKysJIHJlaGFzaCBpbnRvIGEgc21hbGxlciB0YWJsZS4gICovCisrCisrICAgICAgaWYgKHRhYmxlLT5uX2J1Y2tldHNfdXNlZAorKwkgIDwgdGFibGUtPnR1bmluZy0+c2hyaW5rX3RocmVzaG9sZCAqIHRhYmxlLT5uX2J1Y2tldHMpCisrCXsKKysJICAvKiBDaGVjayBtb3JlIGZ1bGx5LCBiZWZvcmUgc3RhcnRpbmcgcmVhbCB3b3JrLiAgSWYgdHVuaW5nIGFyZ3VtZW50cworKwkgICAgIGJlY2FtZSBpbnZhbGlkLCB0aGUgc2Vjb25kIGNoZWNrIHdpbGwgcmVseSBvbiBwcm9wZXIgZGVmYXVsdHMuICAqLworKwkgIGNoZWNrX3R1bmluZyAodGFibGUpOworKwkgIGlmICh0YWJsZS0+bl9idWNrZXRzX3VzZWQKKysJICAgICAgPCB0YWJsZS0+dHVuaW5nLT5zaHJpbmtfdGhyZXNob2xkICogdGFibGUtPm5fYnVja2V0cykKKysJICAgIHsKKysJICAgICAgY29uc3QgSGFzaF90dW5pbmcgKnR1bmluZyA9IHRhYmxlLT50dW5pbmc7CisrCSAgICAgIHVuc2lnbmVkIGNhbmRpZGF0ZQorKwkJPSAodW5zaWduZWQpICh0dW5pbmctPmlzX25fYnVja2V0cworKwkJCSAgICAgID8gdGFibGUtPm5fYnVja2V0cyAqIHR1bmluZy0+c2hyaW5rX2ZhY3RvcgorKwkJCSAgICAgIDogKHRhYmxlLT5uX2J1Y2tldHMgKiB0dW5pbmctPnNocmlua19mYWN0b3IKKysJCQkJICogdHVuaW5nLT5ncm93dGhfdGhyZXNob2xkKSk7CisrCisrCSAgICAgIGhhc2hfcmVoYXNoICh0YWJsZSwgY2FuZGlkYXRlKTsKKysJICAgIH0KKysJfQorKyAgICB9CisrCisrICByZXR1cm4gZGF0YTsKKyt9CisrCisrLyogVGVzdGluZy4gICovCisrCisrI2lmIFRFU1RJTkcKKysKKyt2b2lkCisraGFzaF9wcmludCAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUpCisreworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysKKysgIGZvciAoYnVja2V0ID0gdGFibGUtPmJ1Y2tldDsgYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdDsgYnVja2V0KyspCisrICAgIHsKKysgICAgICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yOworKworKyAgICAgIGlmIChidWNrZXQpCisrCXByaW50ZiAoIiVkOlxuIiwgYnVja2V0IC0gdGFibGUtPmJ1Y2tldCk7CisrCisrICAgICAgZm9yIChjdXJzb3IgPSBidWNrZXQ7IGN1cnNvcjsgY3Vyc29yID0gY3Vyc29yLT5uZXh0KQorKwl7CisrCSAgY2hhciAqcyA9IChjaGFyICopIGN1cnNvci0+ZGF0YTsKKysJICAvKiBGSVhNRSAqLworKwkgIGlmIChzKQorKwkgICAgcHJpbnRmICgiICAlc1xuIiwgcyk7CisrCX0KKysgICAgfQorK30KKysKKysjZW5kaWYgLyogVEVTVElORyAqLworLS0tIHBhdGNoLTIuNS45Lm9yaWcvaGFzaC5oCisrKysgcGF0Y2gtMi41LjkvaGFzaC5oCitAQCAtMCwwICsxLDkzIEBACisrLyogaGFzaCAtIGhhc2hpbmcgdGFibGUgcHJvY2Vzc2luZy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgV3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcgPG1leWVyaW5nQGFzY2VuZC5jb20+LCAxOTk4LgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrCisrLyogQSBnZW5lcmljIGhhc2ggdGFibGUgcGFja2FnZS4gICovCisrCisrLyogTWFrZSBzdXJlIFVTRV9PQlNUQUNLIGlzIGRlZmluZWQgdG8gMSBpZiB5b3Ugd2FudCB0aGUgYWxsb2NhdG9yIHRvIHVzZQorKyAgIG9ic3RhY2tzIGluc3RlYWQgb2YgbWFsbG9jLCBhbmQgcmVjb21waWxlIGBoYXNoLmMnIHdpdGggc2FtZSBzZXR0aW5nLiAgKi8KKysKKysjaWZuZGVmIEhBU0hfSF8KKysjIGRlZmluZSBIQVNIX0hfCisrCisrIyBpZm5kZWYgUEFSQU1TCisrIyAgaWYgUFJPVE9UWVBFUyB8fCBfX1NURENfXworKyMgICBkZWZpbmUgUEFSQU1TKEFyZ3MpIEFyZ3MKKysjICBlbHNlCisrIyAgIGRlZmluZSBQQVJBTVMoQXJncykgKCkKKysjICBlbmRpZgorKyMgZW5kaWYKKysKKyt0eXBlZGVmIHVuc2lnbmVkICgqSGFzaF9oYXNoZXIpIFBBUkFNUyAoKGNvbnN0IHZvaWQgKiwgdW5zaWduZWQpKTsKKyt0eXBlZGVmIGJvb2wgKCpIYXNoX2NvbXBhcmF0b3IpIFBBUkFNUyAoKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CisrdHlwZWRlZiB2b2lkICgqSGFzaF9kYXRhX2ZyZWVyKSBQQVJBTVMgKCh2b2lkICopKTsKKyt0eXBlZGVmIGJvb2wgKCpIYXNoX3Byb2Nlc3NvcikgUEFSQU1TICgodm9pZCAqLCB2b2lkICopKTsKKysKKytzdHJ1Y3QgaGFzaF9lbnRyeQorKyAgeworKyAgICB2b2lkICpkYXRhOworKyAgICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV4dDsKKysgIH07CisrCisrc3RydWN0IGhhc2hfdHVuaW5nCisrICB7CisrICAgIC8qIFRoaXMgc3RydWN0dXJlIGlzIG1haW5seSB1c2VkIGZvciBgaGFzaF9pbml0aWFsaXplJywgc2VlIHRoZSBibG9jaworKyAgICAgICBkb2N1bWVudGF0aW9uIG9mIGBoYXNoX3Jlc2V0X3R1bmluZycgZm9yIG1vcmUgY29tcGxldGUgY29tbWVudHMuICAqLworKworKyAgICBmbG9hdCBzaHJpbmtfdGhyZXNob2xkOwkvKiByYXRpbyBvZiB1c2VkIGJ1Y2tldHMgdG8gdHJpZ2dlciBhIHNocmluayAqLworKyAgICBmbG9hdCBzaHJpbmtfZmFjdG9yOwkvKiByYXRpbyBvZiBuZXcgc21hbGxlciBzaXplIHRvIG9yaWdpbmFsIHNpemUgKi8KKysgICAgZmxvYXQgZ3Jvd3RoX3RocmVzaG9sZDsJLyogcmF0aW8gb2YgdXNlZCBidWNrZXRzIHRvIHRyaWdnZXIgYSBncm93dGggKi8KKysgICAgZmxvYXQgZ3Jvd3RoX2ZhY3RvcjsJLyogcmF0aW8gb2YgbmV3IGJpZ2dlciBzaXplIHRvIG9yaWdpbmFsIHNpemUgKi8KKysgICAgYm9vbCBpc19uX2J1Y2tldHM7CQkvKiBpZiBDQU5ESURBVEUgcmVhbGx5IG1lYW5zIHRhYmxlIHNpemUgKi8KKysgIH07CisrCisrdHlwZWRlZiBzdHJ1Y3QgaGFzaF90dW5pbmcgSGFzaF90dW5pbmc7CisrCisrc3RydWN0IGhhc2hfdGFibGU7CisrCisrdHlwZWRlZiBzdHJ1Y3QgaGFzaF90YWJsZSBIYXNoX3RhYmxlOworKworKy8qIEluZm9ybWF0aW9uIGFuZCBsb29rdXAuICAqLworK3Vuc2lnbmVkIGhhc2hfZ2V0X25fYnVja2V0cyBQQVJBTVMgKChjb25zdCBIYXNoX3RhYmxlICopKTsKKyt1bnNpZ25lZCBoYXNoX2dldF9uX2J1Y2tldHNfdXNlZCBQQVJBTVMgKChjb25zdCBIYXNoX3RhYmxlICopKTsKKyt1bnNpZ25lZCBoYXNoX2dldF9uX2VudHJpZXMgUEFSQU1TICgoY29uc3QgSGFzaF90YWJsZSAqKSk7CisrdW5zaWduZWQgaGFzaF9nZXRfbWF4X2J1Y2tldF9sZW5ndGggUEFSQU1TICgoY29uc3QgSGFzaF90YWJsZSAqKSk7CisrYm9vbCBoYXNoX3RhYmxlX29rIFBBUkFNUyAoKGNvbnN0IEhhc2hfdGFibGUgKikpOworK3ZvaWQgaGFzaF9wcmludF9zdGF0aXN0aWNzIFBBUkFNUyAoKGNvbnN0IEhhc2hfdGFibGUgKiwgRklMRSAqKSk7Cisrdm9pZCAqaGFzaF9sb29rdXAgUEFSQU1TICgoY29uc3QgSGFzaF90YWJsZSAqLCBjb25zdCB2b2lkICopKTsKKysKKysvKiBXYWxraW5nLiAgKi8KKyt2b2lkICpoYXNoX2dldF9maXJzdCBQQVJBTVMgKChjb25zdCBIYXNoX3RhYmxlICopKTsKKyt2b2lkICpoYXNoX2dldF9uZXh0IFBBUkFNUyAoKGNvbnN0IEhhc2hfdGFibGUgKiwgY29uc3Qgdm9pZCAqKSk7CisrdW5zaWduZWQgaGFzaF9nZXRfZW50cmllcyBQQVJBTVMgKChjb25zdCBIYXNoX3RhYmxlICosIHZvaWQgKiosIHVuc2lnbmVkKSk7CisrdW5zaWduZWQgaGFzaF9kb19mb3JfZWFjaCBQQVJBTVMgKChjb25zdCBIYXNoX3RhYmxlICosIEhhc2hfcHJvY2Vzc29yLCB2b2lkICopKTsKKysKKysvKiBBbGxvY2F0aW9uIGFuZCBjbGVhbi11cC4gICovCisrdW5zaWduZWQgaGFzaF9zdHJpbmcgUEFSQU1TICgoY29uc3QgY2hhciAqLCB1bnNpZ25lZCkpOworK3ZvaWQgaGFzaF9yZXNldF90dW5pbmcgUEFSQU1TICgoSGFzaF90dW5pbmcgKikpOworK0hhc2hfdGFibGUgKmhhc2hfaW5pdGlhbGl6ZSBQQVJBTVMgKCh1bnNpZ25lZCwgY29uc3QgSGFzaF90dW5pbmcgKiwKKysJCQkJICAgICBIYXNoX2hhc2hlciwgSGFzaF9jb21wYXJhdG9yLAorKwkJCQkgICAgIEhhc2hfZGF0YV9mcmVlcikpOworK3ZvaWQgaGFzaF9jbGVhciBQQVJBTVMgKChIYXNoX3RhYmxlICopKTsKKyt2b2lkIGhhc2hfZnJlZSBQQVJBTVMgKChIYXNoX3RhYmxlICopKTsKKysKKysvKiBJbnNlcnRpb24gYW5kIGRlbGV0aW9uLiAgKi8KKytib29sIGhhc2hfcmVoYXNoIFBBUkFNUyAoKEhhc2hfdGFibGUgKiwgdW5zaWduZWQpKTsKKyt2b2lkICpoYXNoX2luc2VydCBQQVJBTVMgKChIYXNoX3RhYmxlICosIGNvbnN0IHZvaWQgKikpOworK3ZvaWQgKmhhc2hfZGVsZXRlIFBBUkFNUyAoKEhhc2hfdGFibGUgKiwgY29uc3Qgdm9pZCAqKSk7CisrCisrI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC9nbG9iYWwtcmVqZWN0LWZpbGUuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoL2dsb2JhbC1yZWplY3QtZmlsZS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiN2NhNzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC9nbG9iYWwtcmVqZWN0LWZpbGUuZGlmZgpAQCAtMCwwICsxLDIwMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkZWJpYW4gcGF0Y2hdCisKK0luZGV4OiBwYXRjaC0yLjUuOS9wYXRjaC5tYW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXRjaC0yLjUuOS5vcmlnL3BhdGNoLm1hbgorKysrIHBhdGNoLTIuNS45L3BhdGNoLm1hbgorQEAgLTUyMCw2ICs1MjAsMTUgQEAgZmlsZS4KKyBcZkJcKj1yZWplY3RcLXVuaWZpZWRcZlAKKyBQcm9kdWNlIHVuaWZpZWQgcmVqZWN0IGZpbGVzLiBUaGUgZGVmYXVsdCBpcyB0byBwcm9kdWNlIGNvbnRleHQgdHlwZSByZWplY3QgZmlsZXMuCisgLlRQCisrLkJJIFwqPWdsb2JhbFwtcmVqZWN0XC1maWxlPSByZWplY3RmaWxlCisrUHV0IGFsbCByZWplY3RzIGludG8KKysuSSByZWplY3RmaWxlCisraW5zdGVhZCBvZiBjcmVhdGluZyBzZXBhcmF0ZSByZWplY3QgZmlsZXMgZm9yIGFsbCBmaWxlcyB0aGF0IGhhdmUgcmVqZWN0cy4gVGhlCisrLkkgcmVqZWN0ZmlsZQorK3dpbGwgY29udGFpbiBoZWFkZXJzIHRoYXQgaWRlbnRpZnkgd2hpY2ggZmlsZSBlYWNoIHJlamVjdCByZWZlcnMgdG8uIE5vdGUgdGhhdAorK3RoZSBnbG9iYWwgcmVqZWN0IGZpbGUgaXMgY3JlYXRlZCBldmVuIGlmIFwtXC1kcnlcLXJ1biBpcyBzcGVjaWZpZWQgKHdoaWxlCisrbm9uLWdsb2JhbCByZWplY3QgZmlsZXMgd2lsbCBvbmx5IGJlIGNyZWF0ZWQgd2l0aG91dCBcLVwtZHJ5XC1ydW4pLgorKy5UUAorIFxmQlwtUlxmUCAgb3IgIFxmQlwqPXJldmVyc2VcZlAKKyBBc3N1bWUgdGhhdCB0aGlzIHBhdGNoIHdhcyBjcmVhdGVkIHdpdGggdGhlIG9sZCBhbmQgbmV3IGZpbGVzIHN3YXBwZWQuCisgKFllcywgSSdtIGFmcmFpZCB0aGF0IGRvZXMgaGFwcGVuIG9jY2FzaW9uYWxseSwgaHVtYW4gbmF0dXJlIGJlaW5nIHdoYXQgaXQKK0luZGV4OiBwYXRjaC0yLjUuOS9wYXRjaC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF0Y2gtMi41Ljkub3JpZy9wYXRjaC5jCisrKysgcGF0Y2gtMi41LjkvcGF0Y2guYworQEAgLTY3LDYgKzY3LDcgQEAgc3RhdGljIGJvb2wgc2ltaWxhciAoY2hhciBjb25zdCAqLCBzaXplXworIHN0YXRpYyBib29sIHNwZXdfb3V0cHV0IChzdHJ1Y3Qgb3V0c3RhdGUgKik7Cisgc3RhdGljIGNoYXIgY29uc3QgKm1ha2VfdGVtcCAoY2hhcik7Cisgc3RhdGljIGludCBudW1lcmljX3N0cmluZyAoY2hhciBjb25zdCAqLCBib29sLCBjaGFyIGNvbnN0ICopOworK3N0YXRpYyB2b2lkIHJlamVjdF9oZWFkZXIgKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKKyBzdGF0aWMgdm9pZCBhYm9ydF9odW5rICh2b2lkKTsKKyBzdGF0aWMgdm9pZCBjbGVhbnVwICh2b2lkKTsKKyBzdGF0aWMgdm9pZCBnZXRfc29tZV9zd2l0Y2hlcyAodm9pZCk7CitAQCAtOTgsNiArOTksNyBAQCBzdGF0aWMgaW50IEFyZ2M7Cisgc3RhdGljIGNoYXIgKiBjb25zdCAqQXJndjsKKyAKKyBzdGF0aWMgRklMRSAqcmVqZnA7ICAvKiByZWplY3QgZmlsZSBwb2ludGVyICovCisrc3RhdGljIGNoYXIgKmdsb2JhbF9yZWplY3Q7CisgCisgc3RhdGljIGNoYXIgY29uc3QgKnBhdGNobmFtZTsKKyBzdGF0aWMgY2hhciAqcmVqbmFtZTsKK0BAIC0xNzIsNiArMTc0LDEwIEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgICAgLyogTWFrZSBzdXJlIHdlIGNsZWFuIHVwIGluIGNhc2Ugb2YgZGlzYXN0ZXIuICAqLworICAgICBzZXRfc2lnbmFscyAoZmFsc2UpOworIAorKyAgICAvKiBpbml0aWFsaXplIGdsb2JhbCByZWplY3QgZmlsZSAqLworKyAgICBpZiAoZ2xvYmFsX3JlamVjdCkKKysgICAgICBpbml0X3JlamVjdCAoKTsKKysKKyAgICAgZm9yICgKKyAJb3Blbl9wYXRjaF9maWxlIChwYXRjaG5hbWUpOworIAl0aGVyZV9pc19hbm90aGVyX3BhdGNoKCk7CitAQCAtMjA4LDggKzIxNCw5IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJICAgIGluaXRfb3V0cHV0IChUTVBPVVROQU1FLCBleGNsdXNpdmUsICZvdXRzdGF0ZSk7CisgCSAgfQorIAorLQkvKiBpbml0aWFsaXplIHJlamVjdCBmaWxlICovCistCWluaXRfcmVqZWN0ICgpOworKwkvKiBpbml0aWFsaXplIHBlci1wYXRjaCByZWplY3QgZmlsZSAqLworKwlpZiAoIWdsb2JhbF9yZWplY3QpCisrCSAgaW5pdF9yZWplY3QgKCk7CisgCisgCS8qIGZpbmQgb3V0IHdoZXJlIGFsbCB0aGUgbGluZXMgYXJlICovCisgCWlmICghc2tpcF9yZXN0X29mX3BhdGNoKQorQEAgLTI3OCw2ICsyODUsOCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCisgCSAgICBuZXd3aGVyZSA9IHBjaF9uZXdmaXJzdCgpICsgbGFzdF9vZmZzZXQ7CisgCSAgICBpZiAoc2tpcF9yZXN0X29mX3BhdGNoKSB7CisrCQlpZiAoIWZhaWxlZCkKKysJCSAgcmVqZWN0X2hlYWRlcihvdXRuYW1lKTsKKyAJCWFib3J0X2h1bmsoKTsKKyAJCWZhaWxlZCsrOworIAkJaWYgKHZlcmJvc2l0eSA9PSBWRVJCT1NFKQorQEAgLTI5Miw2ICszMDEsOCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkgIHNheSAoIlBhdGNoIGF0dGVtcHRlZCB0byBjcmVhdGUgZmlsZSAlcywgd2hpY2ggYWxyZWFkeSBleGlzdHMuXG4iLAorIAkJICAgICAgIHF1b3RlYXJnIChpbm5hbWUpKTsKKyAKKysJCWlmICghZmFpbGVkKQorKwkJICByZWplY3RfaGVhZGVyKG91dG5hbWUpOworIAkJYWJvcnRfaHVuaygpOworIAkJZmFpbGVkKys7CisgCQlpZiAodmVyYm9zaXR5ICE9IFNJTEVOVCkKK0BAIC0yOTksNiArMzEwLDggQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJICAgICAgIGZvcm1hdF9saW5lbnVtIChudW1idWYsIG5ld3doZXJlKSk7CisgCSAgICB9CisgCSAgICBlbHNlIGlmICghIGFwcGx5X2h1bmsgKCZvdXRzdGF0ZSwgd2hlcmUpKSB7CisrCQlpZiAoIWZhaWxlZCkKKysJCSAgcmVqZWN0X2hlYWRlcihvdXRuYW1lKTsKKyAJCWFib3J0X2h1bmsgKCk7CisgCQlmYWlsZWQrKzsKKyAJCWlmICh2ZXJib3NpdHkgIT0gU0lMRU5UKQorQEAgLTMzMiw3ICszNDUsOCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkgICAgZmNsb3NlIChvdXRzdGF0ZS5vZnApOworIAkJICAgIG91dHN0YXRlLm9mcCA9IDA7CisgCQkgIH0KKy0JCWZjbG9zZSAocmVqZnApOworKwkJaWYgKCFnbG9iYWxfcmVqZWN0KQorKwkJICBmY2xvc2UgKHJlamZwKTsKKyAJCWNvbnRpbnVlOworIAkgICAgICB9CisgCitAQCAtNDEyLDEzICs0MjYsMTMgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkgICAgfQorICAgICAgIH0KKyAgICAgICBpZiAoZGlmZl90eXBlICE9IEVEX0RJRkYpIHsKKy0JaWYgKGZjbG9zZSAocmVqZnApICE9IDApCisrCWlmICghZ2xvYmFsX3JlamVjdCAmJiBmY2xvc2UgKHJlamZwKSAhPSAwKQorIAkgICAgd3JpdGVfZmF0YWwgKCk7CisgCWlmIChmYWlsZWQpIHsKKyAJICAgIHNvbWVmYWlsZWQgPSB0cnVlOworIAkgICAgc2F5ICgiJWQgb3V0IG9mICVkIGh1bmslcyAlcyIsIGZhaWxlZCwgaHVuaywgInMiICsgKGh1bmsgPT0gMSksCisgCQkgc2tpcF9yZXN0X29mX3BhdGNoID8gImlnbm9yZWQiIDogIkZBSUxFRCIpOworLQkgICAgaWYgKG91dG5hbWUpIHsKKysJICAgIGlmICghZ2xvYmFsX3JlamVjdCAmJiBvdXRuYW1lKSB7CisgCQljaGFyICpyZWogPSByZWpuYW1lOworIAkJaWYgKCFyZWpuYW1lKSB7CisgCQkgICAgcmVqID0geG1hbGxvYyAoc3RybGVuIChvdXRuYW1lKSArIDUpOworQEAgLTQ0NSw2ICs0NTksMjAgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgIH0KKyAgICAgICBzZXRfc2lnbmFscyAodHJ1ZSk7CisgICAgIH0KKysgICAgaWYgKGdsb2JhbF9yZWplY3QpCisrICAgICAgeworKwlpZiAoZmNsb3NlIChyZWpmcCkgIT0gMCkKKysJICB3cml0ZV9mYXRhbCAoKTsKKysJaWYgKHNvbWVmYWlsZWQpCisrCSAgeworKwkgIHNheSAoIiAtLSBzYXZpbmcgcmVqZWN0cyB0byBmaWxlICVzXG4iLCBxdW90ZWFyZyAoZ2xvYmFsX3JlamVjdCkpOworKwkgIC8qaWYgKCEgZHJ5X3J1bikKKysJICAgIHsqLworKwkgICAgICBtb3ZlX2ZpbGUgKFRNUFJFSk5BTUUsICZUTVBSRUpOQU1FX25lZWRzX3JlbW92YWwsCisrCQkJIGdsb2JhbF9yZWplY3QsIDA2NDQsIGZhbHNlKTsKKysJICAgIC8qfSovCisrCSAgfQorKyAgICAgIH0KKyAgICAgaWYgKG91dHN0YXRlLm9mcCAmJiAoZmVycm9yIChvdXRzdGF0ZS5vZnApIHx8IGZjbG9zZSAob3V0c3RhdGUub2ZwKSAhPSAwKSkKKyAgICAgICB3cml0ZV9mYXRhbCAoKTsKKyAgICAgY2xlYW51cCAoKTsKK0BAIC01MjMsNiArNTUxLDcgQEAgc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3QgbG9uZ29wdHNbXSA9CisgICB7InBvc2l4Iiwgbm9fYXJndW1lbnQsIE5VTEwsIENIQVJfTUFYICsgN30sCisgICB7InF1b3Rpbmctc3R5bGUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgQ0hBUl9NQVggKyA4fSwKKyAgIHsidW5pZmllZC1yZWplY3QtZmlsZXMiLCBub19hcmd1bWVudCwgTlVMTCwgQ0hBUl9NQVggKyA5fSwKKysgIHsiZ2xvYmFsLXJlamVjdC1maWxlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIENIQVJfTUFYICsgMTB9LAorICAge05VTEwsIG5vX2FyZ3VtZW50LCBOVUxMLCAwfQorIH07CisgCitAQCAtNTgyLDYgKzYxMSw3IEBAIHN0YXRpYyBjaGFyIGNvbnN0ICpjb25zdCBvcHRpb25faGVscFtdID0KKyAiICAtLWRyeS1ydW4gIERvIG5vdCBhY3R1YWxseSBjaGFuZ2UgYW55IGZpbGVzOyBqdXN0IHByaW50IHdoYXQgd291bGQgaGFwcGVuLiIsCisgIiAgLS1wb3NpeCAgQ29uZm9ybSB0byB0aGUgUE9TSVggc3RhbmRhcmQuIiwKKyAiICAtLXVuaWZpZWQtcmVqZWN0LWZpbGVzICBDcmVhdGUgdW5pZmllZCByZWplY3QgZmlsZXMuIiwKKysiICAtLWdsb2JhbC1yZWplY3QtZmlsZT1maWxlICBQdXQgYWxsIHJlamVjdHMgaW50byBvbmUgZmlsZS4iLAorICIiLAorICIgIC1kIERJUiAgLS1kaXJlY3Rvcnk9RElSICBDaGFuZ2UgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRvIERJUiBmaXJzdC4iLAorICNpZiBIQVZFX1NFVE1PREVfRE9TCitAQCAtNzg0LDYgKzgxNCw5IEBAIGdldF9zb21lX3N3aXRjaGVzICh2b2lkKQorIAkgICAgY2FzZSBDSEFSX01BWCArIDk6CisgCQl1bmlmaWVkX3JlamVjdF9maWxlcyA9IHRydWU7CisgCQlicmVhazsKKysJICAgIGNhc2UgQ0hBUl9NQVggKyAxMDoKKysJCWdsb2JhbF9yZWplY3QgPSBzYXZlc3RyIChvcHRhcmcpOworKwkJYnJlYWs7CisgCSAgICBkZWZhdWx0OgorIAkJdXNhZ2UgKHN0ZGVyciwgMik7CisgCX0KK0BAIC05MzMsNiArOTY2LDM3IEBAIGxvY2F0ZV9odW5rIChMSU5FTlVNIGZ1enopCisgfQorIAorIHN0YXRpYyBjaGFyICoKKytmb3JtYXRfdGltZXN0YW1wIChjaGFyIHRpbWVidWZbMzddLCBib29sIHdoaWNoKQorK3sKKysgIHRpbWVfdCB0cyA9IHBjaF90aW1lc3RhbXAod2hpY2gpOworKyAgaWYgKHRzICE9IC0xKQorKyAgICB7CisrICAgICAgc3RydWN0IHRtICp0bSA9IGxvY2FsdGltZSgmdHMpOworKyAgICAgIHN0cmZ0aW1lKHRpbWVidWYsIDM3LCAiXHQlWS0lbS0lZCAlSDolTTolUy4wMDAwMDAwMDAgJXoiLCB0bSk7CisrICAgIH0KKysgIGVsc2UKKysgICAgdGltZWJ1ZlswXSA9IDA7CisrICByZXR1cm4gdGltZWJ1ZjsKKyt9CisrCisrLyogV3JpdGUgYSBoZWFkZXIgaW4gYSByZWplY3QgZmlsZSB0aGF0IGNvbWJpbmVzIG11bHRpcGxlIGh1bmtzLiAqLworK3N0YXRpYyB2b2lkCisrcmVqZWN0X2hlYWRlciAoY29uc3QgY2hhciAqb3V0bmFtZSkKKyt7CisrICAgIGNoYXIgdGltZWJ1ZjBbMzddLCB0aW1lYnVmMVszN107CisrICAgIGlmICghZ2xvYmFsX3JlamVjdCkKKysgICAgICByZXR1cm47CisrICAgIGlmIChkaWZmX3R5cGUgPT0gVU5JX0RJRkYpCisrCWZwcmludGYocmVqZnAsICItLS0gJXMub3JpZyVzXG4rKysgJXMlc1xuIiwKKysJCW91dG5hbWUsIGZvcm1hdF90aW1lc3RhbXAodGltZWJ1ZjAsIHJldmVyc2UpLAorKwkJb3V0bmFtZSwgZm9ybWF0X3RpbWVzdGFtcCh0aW1lYnVmMSwgIXJldmVyc2UpKTsKKysgICAgZWxzZQorKwlmcHJpbnRmKHJlamZwLCAiKioqICVzLm9yaWclc1xuLS0tICVzJXNcbiIsCisrCQlvdXRuYW1lLCBmb3JtYXRfdGltZXN0YW1wKHRpbWVidWYwLCByZXZlcnNlKSwKKysJCW91dG5hbWUsIGZvcm1hdF90aW1lc3RhbXAodGltZWJ1ZjEsICFyZXZlcnNlKSk7CisrfQorKworK3N0YXRpYyBjaGFyICoKKyBmb3JtYXRfbGluZXJhbmdlIChjaGFyIHJhbmdlYnVmW0xJTkVOVU1fTEVOR1RIX0JPVU5EKjIgKyAyXSwKKyAJCSAgTElORU5VTSBmaXJzdCwgTElORU5VTSBsaW5lcykKKyB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC9pbnN0YWxsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvaW5zdGFsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzU0ZWM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvaW5zdGFsbC5wYXRjaApAQCAtMCwwICsxLDQzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitJbmRleDogcGF0Y2gtMi41LjQvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXRjaC0yLjUuNC5vcmlnL01ha2VmaWxlLmluCTIwMDUtMDMtMDkgMDc6MjM6NTQuNzc5MzExODI0IC0wNTAwCisrKysgcGF0Y2gtMi41LjQvTWFrZWZpbGUuaW4JMjAwNS0wMy0wOSAwNzoyNjowOS42MTY4MTM0MDggLTA1MDAKK0BAIC00MywxMCArNDMsMTEgQEAKKyBQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorIFBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACisgCisrREVTVERJUiA9CisgcHJlZml4ID0gQHByZWZpeEAKKyBleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKKyAKKy1iaW5kaXIgPSAkKGV4ZWNfcHJlZml4KS9iaW4KKytiaW5kaXIgPSBAYmluZGlyQAorIAorICMgV2hlcmUgdG8gcHV0IHRoZSBtYW51YWwgcGFnZXMuCisgbWFuZGlyID0gQG1hbmRpckAKK0BAIC0xMTIsMTggKzExMywxOCBAQAorIAkkKENDKSAtbyAkQCAkKENGTEFHUykgJChMREZMQUdTKSAkKE9CSlMpICQoTElCUykKKyAKKyBpbnN0YWxsOjogYWxsIGluc3RhbGxkaXJzCistCSQoSU5TVEFMTF9QUk9HUkFNKSBwYXRjaCQoRVhFRVhUKSAkKGJpbmRpcikvJChwYXRjaF9uYW1lKSQoRVhFRVhUKQorLQktJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9wYXRjaC5tYW4gJChtYW4xZGlyKS8kKHBhdGNoX25hbWUpJChtYW4xZXh0KQorKwkkKElOU1RBTExfUFJPR1JBTSkgcGF0Y2gkKEVYRUVYVCkgJChERVNURElSKSQoYmluZGlyKS8kKHBhdGNoX25hbWUpJChFWEVFWFQpCisrCS0kKElOU1RBTExfREFUQSkgJChzcmNkaXIpL3BhdGNoLm1hbiAkKERFU1RESVIpJChtYW4xZGlyKS8kKHBhdGNoX25hbWUpJChtYW4xZXh0KQorIAorIGluc3RhbGxkaXJzOjoKKy0JJChTSEVMTCkgJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChiaW5kaXIpICQobWFuMWRpcikKKysJJChTSEVMTCkgJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNURElSKSQoYmluZGlyKSAkKERFU1RESVIpJChtYW4xZGlyKQorIAorIGluc3RhbGwtc3RyaXA6OgorIAkkKE1BS0UpIElOU1RBTExfUFJPR1JBTT0nJChJTlNUQUxMX1BST0dSQU0pIC1zJyBpbnN0YWxsCisgCisgdW5pbnN0YWxsOjoKKy0Jcm0gLWYgJChiaW5kaXIpLyQocGF0Y2hfbmFtZSkkKEVYRUVYVCkKKy0Jcm0gLWYgJChtYW4xZGlyKS8kKHBhdGNoX25hbWUpJChtYW4xZXh0KQorKwlybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQocGF0Y2hfbmFtZSkkKEVYRUVYVCkKKysJcm0gLWYgJChERVNURElSKSQobWFuMWRpcikvJChwYXRjaF9uYW1lKSQobWFuMWV4dCkKKyAKKyBNYWtlZmlsZTogTWFrZWZpbGUuaW4gJChDT05GSUdfU1RBVFVTKQorIAkkKFNIRUxMKSAkKENPTkZJR19TVEFUVVMpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC91bmlmaWVkLXJlamVjdC1maWxlcy5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvdW5pZmllZC1yZWplY3QtZmlsZXMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjU5MjEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvdW5pZmllZC1yZWplY3QtZmlsZXMuZGlmZgpAQCAtMCwwICsxLDMwNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkZWJpYW4gcGF0Y2hdCisKK0dlbmVyYXRlIHVuaWZpZWQgZGlmZiBzdHlsZSByZWplY3QgZmlsZXMuIEFsc28gaW5jbHVkZSB0aGUgQyBmdW5jdGlvbiBuYW1lcworaW4gcmVqZWN0IGZpbGVzIHdoZW5ldmVyIHBvc3NpYmxlLgorCisJJCBjYXQgPiBmLm9yaWcKKwk8IGEoKSB7CisJPCAyCisJPCAzCisJPAorCTwgNQorCTwgNgorCTwgfQorCisJJCBzZWQgLWUgJ3MvNS81YS8nIGYub3JpZyA+IGYKKwkkIGRpZmYgLVUyIC1wIGYub3JpZyBmID4gZi5kaWZmCisJJCBzZWQgLWUgJ3MvNS81YS8nIC1lICdzLzYvNngvJyBmLm9yaWcgPiBmCisJJCAuL3BhdGNoIC1GMCAtcyAtLW5vLWJhY2t1cC1pZi1taXNtYXRjaCBmIC0tcmVqZWN0LXVuaWZpZWQgPCBmLmRpZmYKKwk+IDEgb3V0IG9mIDEgaHVuayBGQUlMRUQgLS0gc2F2aW5nIHJlamVjdHMgdG8gZmlsZSBmLnJlagorCisJJCBjYXQgZi5yZWoKKwk+IEBAIC0zLDUgKzMsNSBAQCBhKCkgeworCT4gIDMKKwk+ICAKKwk+IC01CisJPiArNWEKKwk+ICA2CisJPiAgfQorCisJJCAuL3BhdGNoIC1GMCAtcyAtLW5vLWJhY2t1cC1pZi1taXNtYXRjaCBmIDwgZi5kaWZmCisJPiAxIG91dCBvZiAxIGh1bmsgRkFJTEVEIC0tIHNhdmluZyByZWplY3RzIHRvIGZpbGUgZi5yZWoKKworCSQgY2F0IGYucmVqCisJPiAqKioqKioqKioqKioqKiogYSgpIHsKKwk+ICoqKiAzLDcgKioqKgorCT4gICAzCisJPiAgIAorCT4gLSA1CisJPiAgIDYKKwk+ICAgfQorCT4gLS0tIDMsNyAtLS0tCisJPiAgIDMKKwk+ICAgCisJPiArIDVhCisJPiAgIDYKKwk+ICAgfQorCisJJCBkaWZmIC1OdSAtcCAvZGV2L251bGwgZi5vcmlnID4gZjIuZGlmZgorCSQgLi9wYXRjaCAtRjAgLXMgLS1uby1iYWNrdXAtaWYtbWlzbWF0Y2ggZiAtLXJlamVjdC11bmlmaWVkIDwgZjIuZGlmZgorCT4gUGF0Y2ggYXR0ZW1wdGVkIHRvIGNyZWF0ZSBmaWxlIGYsIHdoaWNoIGFscmVhZHkgZXhpc3RzLgorCT4gMSBvdXQgb2YgMSBodW5rIEZBSUxFRCAtLSBzYXZpbmcgcmVqZWN0cyB0byBmaWxlIGYucmVqCisKKwkkIGNhdCBmLnJlagorCT4gQEAgLTAsMCArMSw3IEBACisJPiArYSgpIHsKKwk+ICsyCisJPiArMworCT4gKworCT4gKzUKKwk+ICs2CisJPiArfQorCisJJCBybSAtZiBmIGYub3JpZyBmLnJlaiBmLmRpZmYgZjIuZGlmZgorCitJbmRleDogcGF0Y2gtMi41LjkvcGNoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXRjaC0yLjUuOS5vcmlnL3BjaC5jCisrKysgcGF0Y2gtMi41LjkvcGNoLmMKK0BAIC02OCw2ICs2OCw3IEBAIHN0YXRpYyBMSU5FTlVNIHBfc2xpbmU7CQkJLyogYW5kIHRoZSBsaW4KKyBzdGF0aWMgTElORU5VTSBwX2h1bmtfYmVnOwkJLyogbGluZSBudW1iZXIgb2YgY3VycmVudCBodW5rICovCisgc3RhdGljIExJTkVOVU0gcF9lZmFrZSA9IC0xOwkJLyogZW5kIG9mIGZha2VkIHVwIGxpbmVzLS1kb24ndCBmcmVlICovCisgc3RhdGljIExJTkVOVU0gcF9iZmFrZSA9IC0xOwkJLyogYmVnIG9mIGZha2VkIHVwIGxpbmVzICovCisrc3RhdGljIGNoYXIgKnBfY19mdW5jdGlvbjsJCS8qIHRoZSBDIGZ1bmN0aW9uIGEgaHVuayBpcyBpbiAqLworIAorIGVudW0gbmFtZXR5cGUgeyBPTEQsIE5FVywgSU5ERVgsIE5PTkUgfTsKKyAKK0BAIC04ODgsNiArODg5LDE5IEBAIGFub3RoZXJfaHVuayAoZW51bSBkaWZmIGRpZmZ0eXBlLCBib29sIHIKKyAJICAgIG5leHRfaW50dWl0X2F0KGxpbmVfYmVnaW5uaW5nLHBfaW5wdXRfbGluZSk7CisgCSAgICByZXR1cm4gY2hhcnNfcmVhZCA9PSAoc2l6ZV90KSAtMSA/IC0xIDogMDsKKyAJfQorKwlzID0gYnVmOworKwl3aGlsZSAoKnMgPT0gJyonKQorKwkgICAgcysrOworKwlpZiAoKnMgPT0gJyAnKQorKwkgIHsKKysJICAgIHBfY19mdW5jdGlvbiA9IHM7CisrCSAgICB3aGlsZSAoKnMgIT0gJ1xuJykKKysJCXMrKzsKKysJICAgICpzID0gJ1wwJzsKKysJICAgIHBfY19mdW5jdGlvbiA9IHNhdmVzdHIgKHBfY19mdW5jdGlvbik7CisrCSAgfQorKwllbHNlCisrCSAgICBwX2NfZnVuY3Rpb24gPSBOVUxMOworIAlwX2h1bmtfYmVnID0gcF9pbnB1dF9saW5lICsgMTsKKyAJd2hpbGUgKHBfZW5kIDwgcF9tYXgpIHsKKyAJICAgIGNoYXJzX3JlYWQgPSBnZXRfbGluZSAoKTsKK0BAIC0xMjc3LDggKzEyOTEsMTggQEAgYW5vdGhlcl9odW5rIChlbnVtIGRpZmYgZGlmZnR5cGUsIGJvb2wgcgorIAllbHNlCisgCSAgICBwX3JlcGxfbGluZXMgPSAxOworIAlpZiAoKnMgPT0gJyAnKSBzKys7CistCWlmICgqcyAhPSAnQCcpCisrCWlmICgqcysrICE9ICdAJykKKyAJICAgIG1hbGZvcm1lZCAoKTsKKysJaWYgKCpzKysgPT0gJ0AnICYmICpzID09ICcgJyAmJiAqcyAhPSAnXDAnKQorKwkgIHsKKysJICAgIHBfY19mdW5jdGlvbiA9IHM7CisrCSAgICB3aGlsZSAoKnMgIT0gJ1xuJykKKysJCXMrKzsKKysJICAgICpzID0gJ1wwJzsKKysJICAgIHBfY19mdW5jdGlvbiA9IHNhdmVzdHIgKHBfY19mdW5jdGlvbik7CisrCSAgfQorKwllbHNlCisrCSAgICBwX2NfZnVuY3Rpb24gPSBOVUxMOworIAlpZiAoIXBfcHRybl9saW5lcykKKyAJICAgIHBfZmlyc3QrKzsJCQkvKiBkbyBhcHBlbmQgcmF0aGVyIHRoYW4gaW5zZXJ0ICovCisgCWlmICghcF9yZXBsX2xpbmVzKQorQEAgLTE4ODQsNiArMTkwOCwxMiBAQCBwY2hfaHVua19iZWcgKHZvaWQpCisgICAgIHJldHVybiBwX2h1bmtfYmVnOworIH0KKyAKKytjaGFyIGNvbnN0ICoKKytwY2hfY19mdW5jdGlvbiAodm9pZCkKKyt7CisrICAgIHJldHVybiBwX2NfZnVuY3Rpb247CisrfQorKworIC8qIElzIHRoZSBuZXdsaW5lLXRlcm1pbmF0ZWQgbGluZSBhIHZhbGlkIGBlZCcgY29tbWFuZCBmb3IgcGF0Y2gKKyAgICBpbnB1dD8gIElmIHNvLCByZXR1cm4gdGhlIGNvbW1hbmQgY2hhcmFjdGVyOyBpZiBub3QsIHJldHVybiAwLgorICAgIFRoaXMgYWNjZXB0cyBhY2NlcHRzIGp1c3QgYSBzdWJzZXQgb2YgdGhlIHZhbGlkIGNvbW1hbmRzLCBidXQgaXQncworSW5kZXg6IHBhdGNoLTIuNS45L3BjaC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF0Y2gtMi41Ljkub3JpZy9wY2guaAorKysrIHBhdGNoLTIuNS45L3BjaC5oCitAQCAtMjUsNiArMjUsNyBAQAorIExJTkVOVU0gcGNoX2VuZCAodm9pZCk7CisgTElORU5VTSBwY2hfZmlyc3QgKHZvaWQpOworIExJTkVOVU0gcGNoX2h1bmtfYmVnICh2b2lkKTsKKytjaGFyIGNvbnN0ICpwY2hfY19mdW5jdGlvbiAodm9pZCk7CisgTElORU5VTSBwY2hfbmV3Zmlyc3QgKHZvaWQpOworIExJTkVOVU0gcGNoX3ByZWZpeF9jb250ZXh0ICh2b2lkKTsKKyBMSU5FTlVNIHBjaF9wdHJuX2xpbmVzICh2b2lkKTsKK0luZGV4OiBwYXRjaC0yLjUuOS9wYXRjaC5tYW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXRjaC0yLjUuOS5vcmlnL3BhdGNoLm1hbgorKysrIHBhdGNoLTIuNS45L3BhdGNoLm1hbgorQEAgLTUxNyw2ICs1MTcsOSBAQCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0CisgLkIgXCYucmVqCisgZmlsZS4KKyAuVFAKKytcZkJcKj1yZWplY3RcLXVuaWZpZWRcZlAKKytQcm9kdWNlIHVuaWZpZWQgcmVqZWN0IGZpbGVzLiBUaGUgZGVmYXVsdCBpcyB0byBwcm9kdWNlIGNvbnRleHQgdHlwZSByZWplY3QgZmlsZXMuCisrLlRQCisgXGZCXC1SXGZQICBvciAgXGZCXCo9cmV2ZXJzZVxmUAorIEFzc3VtZSB0aGF0IHRoaXMgcGF0Y2ggd2FzIGNyZWF0ZWQgd2l0aCB0aGUgb2xkIGFuZCBuZXcgZmlsZXMgc3dhcHBlZC4KKyAoWWVzLCBJJ20gYWZyYWlkIHRoYXQgZG9lcyBoYXBwZW4gb2NjYXNpb25hbGx5LCBodW1hbiBuYXR1cmUgYmVpbmcgd2hhdCBpdAorSW5kZXg6IHBhdGNoLTIuNS45L2NvbW1vbi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF0Y2gtMi41Ljkub3JpZy9jb21tb24uaAorKysrIHBhdGNoLTIuNS45L2NvbW1vbi5oCitAQCAtMTQ2LDYgKzE0Niw3IEBAIFhURVJOIGludCBpbnZjOworIFhURVJOIHN0cnVjdCBzdGF0IGluc3RhdDsKKyBYVEVSTiBib29sIGRyeV9ydW47CisgWFRFUk4gYm9vbCBwb3NpeGx5X2NvcnJlY3Q7CisrWFRFUk4gYm9vbCB1bmlmaWVkX3JlamVjdF9maWxlczsKKyAKKyBYVEVSTiBjaGFyIGNvbnN0ICpvcmlncHJhZTsKKyBYVEVSTiBjaGFyIGNvbnN0ICpvcmlnYmFzZTsKK0luZGV4OiBwYXRjaC0yLjUuOS9wYXRjaC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF0Y2gtMi41Ljkub3JpZy9wYXRjaC5jCisrKysgcGF0Y2gtMi41LjkvcGF0Y2guYworQEAgLTUyMiw2ICs1MjIsNyBAQCBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBsb25nb3B0c1tdID0KKyAgIHsibm8tYmFja3VwLWlmLW1pc21hdGNoIiwgbm9fYXJndW1lbnQsIE5VTEwsIENIQVJfTUFYICsgNn0sCisgICB7InBvc2l4Iiwgbm9fYXJndW1lbnQsIE5VTEwsIENIQVJfTUFYICsgN30sCisgICB7InF1b3Rpbmctc3R5bGUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgQ0hBUl9NQVggKyA4fSwKKysgIHsidW5pZmllZC1yZWplY3QtZmlsZXMiLCBub19hcmd1bWVudCwgTlVMTCwgQ0hBUl9NQVggKyA5fSwKKyAgIHtOVUxMLCBub19hcmd1bWVudCwgTlVMTCwgMH0KKyB9OworIAorQEAgLTU4MCw2ICs1ODEsNyBAQCBzdGF0aWMgY2hhciBjb25zdCAqY29uc3Qgb3B0aW9uX2hlbHBbXSA9CisgIiAgLS12ZXJib3NlICBPdXRwdXQgZXh0cmEgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHdvcmsgYmVpbmcgZG9uZS4iLAorICIgIC0tZHJ5LXJ1biAgRG8gbm90IGFjdHVhbGx5IGNoYW5nZSBhbnkgZmlsZXM7IGp1c3QgcHJpbnQgd2hhdCB3b3VsZCBoYXBwZW4uIiwKKyAiICAtLXBvc2l4ICBDb25mb3JtIHRvIHRoZSBQT1NJWCBzdGFuZGFyZC4iLAorKyIgIC0tdW5pZmllZC1yZWplY3QtZmlsZXMgIENyZWF0ZSB1bmlmaWVkIHJlamVjdCBmaWxlcy4iLAorICIiLAorICIgIC1kIERJUiAgLS1kaXJlY3Rvcnk9RElSICBDaGFuZ2UgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRvIERJUiBmaXJzdC4iLAorICNpZiBIQVZFX1NFVE1PREVfRE9TCitAQCAtNzc5LDYgKzc4MSw5IEBAIGdldF9zb21lX3N3aXRjaGVzICh2b2lkKQorIAkJCQkgICAgIChlbnVtIHF1b3Rpbmdfc3R5bGUpIGkpOworIAkJfQorIAkJYnJlYWs7CisrCSAgICBjYXNlIENIQVJfTUFYICsgOToKKysJCXVuaWZpZWRfcmVqZWN0X2ZpbGVzID0gdHJ1ZTsKKysJCWJyZWFrOworIAkgICAgZGVmYXVsdDoKKyAJCXVzYWdlIChzdGRlcnIsIDIpOworIAl9CitAQCAtOTI3LDYgKzkzMiwyNCBAQCBsb2NhdGVfaHVuayAoTElORU5VTSBmdXp6KQorICAgICByZXR1cm4gMDsKKyB9CisgCisrc3RhdGljIGNoYXIgKgorK2Zvcm1hdF9saW5lcmFuZ2UgKGNoYXIgcmFuZ2VidWZbTElORU5VTV9MRU5HVEhfQk9VTkQqMiArIDJdLAorKwkJICBMSU5FTlVNIGZpcnN0LCBMSU5FTlVNIGxpbmVzKQorK3sKKysgICAgaWYgKGxpbmVzID09IDEpCisrICAgICAgcmFuZ2VidWYgPSBmb3JtYXRfbGluZW51bSAocmFuZ2VidWYsIGZpcnN0KTsKKysgICAgZWxzZQorKyAgICAgIHsKKysJY2hhciAqcmI7CisrCXJhbmdlYnVmID0gZm9ybWF0X2xpbmVudW0gKHJhbmdlYnVmICsgTElORU5VTV9MRU5HVEhfQk9VTkQgKyAxLCBsaW5lcyk7CisrCXJiID0gcmFuZ2VidWYtMTsKKysJcmFuZ2VidWYgPSBmb3JtYXRfbGluZW51bSAocmFuZ2VidWYgLSBMSU5FTlVNX0xFTkdUSF9CT1VORCAtIDEsCisrCQkJCSAgIChsaW5lcyA+IDApID8gZmlyc3QgOiAwKTsKKysJKnJiID0gJywnOworKyAgICAgIH0KKysgICAgcmV0dXJuIHJhbmdlYnVmOworK30KKysKKyAvKiBXZSBkaWQgbm90IGZpbmQgdGhlIHBhdHRlcm4sIGR1bXAgb3V0IHRoZSBodW5rIHNvIHRoZXkgY2FuIGhhbmRsZSBpdC4gKi8KKyAKKyBzdGF0aWMgdm9pZAorQEAgLTk0Myw4ICs5NjYsODMgQEAgYWJvcnRfaHVuayAodm9pZCkKKyAgICAgICAoaW50KSBORVdfQ09OVEVYVF9ESUZGIDw9IChpbnQpIGRpZmZfdHlwZSA/ICIgKioqKiIgOiAiIjsKKyAgICAgY2hhciBjb25zdCAqbWludXNlcyA9CisgICAgICAgKGludCkgTkVXX0NPTlRFWFRfRElGRiA8PSAoaW50KSBkaWZmX3R5cGUgPyAiIC0tLS0iIDogIiAtLS0tLSI7CisrICAgIGNoYXIgY29uc3QgKmZ1bmN0aW9uID0gcGNoX2NfZnVuY3Rpb24oKTsKKysgICAgaWYgKGZ1bmN0aW9uID09IE5VTEwpCisrCWZ1bmN0aW9uID0gIiI7CisrCisrICAgIGlmICh1bmlmaWVkX3JlamVjdF9maWxlcykKKysgICAgICB7CisrCS8qIHByb2R1Y2UgdW5pZmllZCByZWplY3QgZmlsZXMgKi8KKysJY2hhciByYW5nZWJ1ZjBbTElORU5VTV9MRU5HVEhfQk9VTkQqMiArIDJdOworKwljaGFyIHJhbmdlYnVmMVtMSU5FTlVNX0xFTkdUSF9CT1VORCoyICsgMl07CisrCUxJTkVOVU0gajsKKysKKysJLyogRmluZCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZW1vdmUgYW5kIGluc2VydCBzZWN0aW9uLiAqLworKwlmb3IgKGogPSAwOyBqIDw9IHBhdF9lbmQ7IGorKykKKysJICBpZiAocGNoX2NoYXIgKGopID09ICc9JykKKysJICAgIGJyZWFrOworKwlmb3IgKGkgPSBqKzE7IGkgPD0gcGF0X2VuZDsgaSsrKQorKwkgIGlmIChwY2hfY2hhciAoaSkgPT0gJ14nKQorKwkgICAgYnJlYWs7CisrCWlmIChwY2hfY2hhciAoMCkgIT0gJyonIHx8IGogPiBwYXRfZW5kIHx8IGkgPiBwYXRfZW5kKzEpCisrCSAgZmF0YWwgKCJpbnRlcm5hbCBlcnJvciBpbiBhYm9ydF9odW5rIik7CisrCWkgPSAxOyBqKys7CisrCisrCS8qIEBAIC1mcm9tLGxpbmVzICt0byxsaW5lcyBAQCAqLworKwlmcHJpbnRmIChyZWpmcCwgIkBAIC0lcyArJXMgQEAlc1xuIiwKKysJCSBmb3JtYXRfbGluZXJhbmdlIChyYW5nZWJ1ZjAsIG9sZGZpcnN0LCBwY2hfcHRybl9saW5lcygpKSwKKysJCSBmb3JtYXRfbGluZXJhbmdlIChyYW5nZWJ1ZjEsIG5ld2ZpcnN0LCBwY2hfcmVwbF9saW5lcygpKSwKKysJCSBmdW5jdGlvbik7CisrCisrCXdoaWxlICggICAoaSA8PSBwYXRfZW5kICYmIHBjaF9jaGFyIChpKSAhPSAnPScpCisrCSAgICAgICB8fCAoaiA8PSBwYXRfZW5kICYmIHBjaF9jaGFyIChqKSAhPSAnXicpKQorKwkgIHsKKysJICAgIGlmIChpIDw9IHBhdF9lbmQKKysJCSYmIChwY2hfY2hhciAoaSkgPT0gJy0nIHx8IHBjaF9jaGFyIChpKSA9PSAnIScpKQorKwkgICAgICB7CisrCQlmcHV0YygnLScsIHJlamZwKTsKKysJCXBjaF93cml0ZV9saW5lIChpKyssIHJlamZwKTsKKysJICAgICAgfQorKwkgICAgZWxzZSBpZiAoaiA8PSBwYXRfZW5kCisrCQkgICAgICYmIChwY2hfY2hhciAoaikgPT0gJysnIHx8IHBjaF9jaGFyIChqKSA9PSAnIScpKQorKwkgICAgICB7CisrCQlmcHV0YygnKycsIHJlamZwKTsKKysJCXBjaF93cml0ZV9saW5lIChqKyssIHJlamZwKTsKKysJICAgICAgfQorKwkgICAgZWxzZSBpZiAoKGkgPD0gcGF0X2VuZAorKwkJICAgICAgJiYgKHBjaF9jaGFyIChpKSA9PSAnICcgfHwgcGNoX2NoYXIgKGkpID09ICdcbicpKSAmJgorKwkJICAgICAoaiA+IHBhdF9lbmQKKysJCSAgICAgIHx8IChwY2hfY2hhciAoaikgPT0gJyAnIHx8IHBjaF9jaGFyIChqKSA9PSAnXG4nKSkpCisrCSAgICAgIHsKKysJCS8qIFVubGVzcyBqIGlzIGFscmVhZHkgcGFzdCB0aGUgZW5kLCBsaW5lcyBpIGFuZCBqCisrCQkgICBtdXN0IGJlIGVxdWFsIGhlcmUuICAqLworKworKwkJaWYgKHBjaF9jaGFyIChpKSA9PSAnICcpCisrCQkgIGZwdXRjKCcgJywgcmVqZnApOworKwkJcGNoX3dyaXRlX2xpbmUgKGkrKywgcmVqZnApOworKwkJaWYgKGogPD0gcGF0X2VuZCkKKysJCSAgaisrOworKwkgICAgICB9CisrCSAgICBlbHNlIGlmICgoaiA8PSBwYXRfZW5kICYmCisrCQkgICAgIChwY2hfY2hhciAoaikgPT0gJyAnIHx8IHBjaF9jaGFyIChqKSA9PSAnXG4nKSkgJiYKKysJCSAgICAgKHBjaF9jaGFyIChpKSA9PSAnPScpKQorKwkgICAgICB7CisrCQlpZiAocGNoX2NoYXIgKGopID09ICcgJykKKysJCSAgZnB1dGMoJyAnLCByZWpmcCk7CisrCQlwY2hfd3JpdGVfbGluZSAoaisrLCByZWpmcCk7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgZmF0YWwgKCJpbnRlcm5hbCBlcnJvciBpbiBhYm9ydF9odW5rIik7CisrCSAgfQorKworKwlpZiAoZmVycm9yIChyZWpmcCkpCisrCSAgd3JpdGVfZmF0YWwgKCk7CisrCXJldHVybjsKKysgICAgICB9CisgCistICAgIGZwcmludGYocmVqZnAsICIqKioqKioqKioqKioqKipcbiIpOworKyAgICAvKiBwcm9kdWNlIGNvbnRleHQgdHlwZSByZWplY3QgZmlsZXMgKi8KKysgICAKKysgICAgZnByaW50ZihyZWpmcCwgIioqKioqKioqKioqKioqKiVzXG4iLCBmdW5jdGlvbik7CisgICAgIGZvciAoaT0wOyBpPD1wYXRfZW5kOyBpKyspIHsKKyAJY2hhciBudW1idWYwW0xJTkVOVU1fTEVOR1RIX0JPVU5EICsgMV07CisgCWNoYXIgbnVtYnVmMVtMSU5FTlVNX0xFTkdUSF9CT1VORCArIDFdOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2hfMi41LjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaF8yLjUuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjliMjQwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2hfMi41LjkuYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSBwYXRjaC5pbmMKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK1NSQ19VUkkgKz0gIiBmaWxlOi8vZGViaWFuLnBhdGNoIFwKKwkgICBmaWxlOi8vaW5zdGFsbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91bmlmaWVkLXJlamVjdC1maWxlcy5kaWZmIFwKKyAgICAgICAgICAgZmlsZTovL2dsb2JhbC1yZWplY3QtZmlsZS5kaWZmICIKK1BSID0gInIzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKK1NSQ19VUklbbWQ1c3VtXSA9ICJkYWNmYjYxODA4MmY4ZDNhMjE5NDYwMTE5M2NmODcxNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlY2I1YzY0NjlkNzMyYmNmMDFkNmVjMWFmZTllNjRmMTY2OGNhYmE1YmZkYjEwM2MyOGQ3ZjUzN2JhM2NkYjhhIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2hfMi43LjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaF8yLjcuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2ZjZjVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2hfMi43LjUuYmIKQEAgLTAsMCArMSwxNSBAQAorcmVxdWlyZSBwYXRjaC5pbmMKK0xJQ0VOU0UgPSAiR1BMdjMiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZWQ0ZDU2NzRlZjQ1NDNiNGViNDYzZGIxNjg4ODZkYzciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzQzNmY1YTE5ZjkzYzNjYTgzMTUzY2U5YzVjYmU0ODQ3ZTk3YzVkOTU2ZTU3YTIyMDEyMWU3NDFmNmU3OTY4ZiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK2FjcGF0aHMgPSAiLUkgJHtTfS9tNCAiCisKK1BBQ0tBR0VDT05GSUcgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneGF0dHInLCAneGF0dHInLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1t4YXR0cl0gPSAiLS1lbmFibGUteGF0dHIsLS1kaXNhYmxlLXhhdHRyLGF0dHIsIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaGVsZi9wYXRjaGVsZl8wLjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaGVsZi9wYXRjaGVsZl8wLjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFiODdmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoZWxmL3BhdGNoZWxmXzAuOC5iYgpAQCAtMCwwICsxLDEyIEBACitTUkNfVVJJID0gImh0dHA6Ly9uaXhvcy5vcmcvcmVsZWFzZXMvJHtCUE59LyR7QlBOfS0ke1BWfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiIKK0xJQ0VOU0UgPSAiR1BMdjMiCitTVU1NQVJZID0gIlRvb2wgdG8gYWxsb3cgZWRpdGluZyBvZiBSUEFUSCBhbmQgaW50ZXJwcmV0ZXIgZmllbGRzIGluIEVMRiBiaW5hcmllcyIKKworU1JDX1VSSVttZDVzdW1dID0gIjViMTUxZTNjODNiMzFmNTkzMWI0YTlmYzAxNjM1YmZkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM5OWY4NGQxMjQzNDczNDBjMzY3MDcwODllYzhmNzA1MzBhYmQ1NmU3ODI3YzU0ZDUwNmViNGNjMDk3YTE3ZTciCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitpbmhlcml0IGF1dG90b29scworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXgtdXRpbHMvcGF4LXV0aWxzXzEuMC41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF4LXV0aWxzL3BheC11dGlsc18xLjAuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzE2YTA4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF4LXV0aWxzL3BheC11dGlsc18xLjAuNS5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIlNlY3VyaXR5LWZvY3VzZWQgRUxGIGZpbGVzIGNoZWNraW5nIHRvb2wiCitERVNDUklQVElPTiA9ICJUaGlzIGlzIGEgc21hbGwgc2V0IG9mIHZhcmlvdXMgUGFYIGF3YXJlIGFuZCByZWxhdGVkIFwKK3V0aWxpdGllcyBmb3IgRUxGIGJpbmFyaWVzLiBJdCBjYW4gY2hlY2sgRUxGIGJpbmFyeSBmaWxlcyBhbmQgcnVubmluZyBcCitwcm9jZXNzZXMgZm9yIGlzc3VlcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHdoZW4gdXNpbmcgRUxGIGJpbmFyaWVzIFwKK2Fsb25nIHdpdGggUGFYLCBzdWNoIGFzIG5vbi1QSUMgY29kZSBvciBleGVjdXRhYmxlIHN0YWNrIGFuZCBoZWFwLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ2VudG9vLm9yZy9wcm9qL2VuL2hhcmRlbmVkL3BheC11dGlscy54bWwiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIgorCitTUkNfVVJJID0gImh0dHA6Ly9nZW50b28ub3N1b3NsLm9yZy9kaXN0ZmlsZXMvcGF4LXV0aWxzLSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gImQ3MzFmNTM4NTY4MmE3YTYyZWUyZTdiN2RhY2MxM2E3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY2OWE5OTM4ZTRhZjc5MTJkMjZkNTg1MDk0YmMwMjAzZTQzNTcxYTk5MGZkZDA0ODMxOTA4OGE4YjhhZDkwNmYiCisKK1JERVBFTkRTXyR7UE59ICs9ICJiYXNoIHB5dGhvbiIKKworZG9faW5zdGFsbCgpIHsKKyAgICBvZV9ydW5tYWtlIFBSRUZJWD0ke0R9JHtwcmVmaXh9IERFU1RESVI9JHtEfSBpbnN0YWxsCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJlcnJvci1wZXJsXzAuMTcwMjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYmVycm9yLXBlcmxfMC4xNzAyNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWUwZTdlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJlcnJvci1wZXJsXzAuMTcwMjQuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJFcnJvciAtIEVycm9yL2V4Y2VwdGlvbiBoYW5kbGluZyBpbiBhbiBPTy1pc2ggd2F5IgorREVTQ1JJUFRJT04gPSAiVGhlIEVycm9yIHBhY2thZ2UgcHJvdmlkZXMgdHdvIGludGVyZmFjZXMuIEZpcnN0bHkgXAorRXJyb3IgcHJvdmlkZXMgYSBwcm9jZWR1cmFsIGludGVyZmFjZSB0byBleGNlcHRpb24gaGFuZGxpbmcuIFwKK1NlY29uZGx5IEVycm9yIGlzIGEgYmFzZSBjbGFzcyBmb3IgZXJyb3JzL2V4Y2VwdGlvbnMgdGhhdCBjYW4gXAorZWl0aGVyIGJlIHRocm93biwgZm9yIHN1YnNlcXVlbnQgY2F0Y2gsIG9yIGNhbiBzaW1wbHkgYmUgcmVjb3JkZWQuIgorCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT04ZjM0OTlkMDllZTc0YTA1MGMwMzE5MzkxZmY5ZDEwMCIKKworREVQRU5EUyArPSAicGVybCIKKworU1JDX1VSSSA9ICJodHRwOi8vY3Bhbi5tZXRhY3Bhbi5vcmcvYXV0aG9ycy9pZC9TL1NIL1NITE9NSUYvRXJyb3ItJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiN2UzNjc2YTdmYjE0ZjY1ZjU2OGYxMmQ0YjQwYTJhNzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDc0ZGI3Yzc4M2E2N2IwNjY3ZWNhNjRhNGY2YTBjM2RlOTQ5OThhZmM5MmMwMWQ2NDUzMTYzZWIwNGI5MTUwZCIKKworUyA9ICIke1dPUktESVJ9L0Vycm9yLSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworZG9fY29tcGlsZSgpIHsKKwlleHBvcnQgTElCQz0iJChmaW5kICR7U1RBR0lOR19ESVJfVEFSR0VUfS8ke2Jhc2VfbGliZGlyfS8gLW5hbWUgJ2xpYmMtKi5zbycpIgorCWNwYW5fZG9fY29tcGlsZQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlidXJpLXBlcmxfMS42MC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlidXJpLXBlcmxfMS42MC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODA5YTQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ1cmktcGVybF8xLjYwLmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiUGVybCBtb2R1bGUgdG8gbWFuaXB1bGF0ZSBhbmQgYWNjZXNzIFVSSSBzdHJpbmdzIgorREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHRoZSBVUkkucG0gbW9kdWxlIHdpdGggZnJpZW5kcy4gXAorVGhlIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBVUkkgY2xhc3MuIFVSSSBvYmplY3RzIGNhbiBiZSB1c2VkIHRvIGFjY2VzcyBcCithbmQgbWFuaXB1bGF0ZSB0aGUgdmFyaW91cyBjb21wb25lbnRzIHRoYXQgbWFrZSB1cCB0aGVzZSBzdHJpbmdzLiIKKworU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0yNjtlbmRsaW5lPTMwO21kNT02YzMzYWU1Yzg3ZmQxYzQ4OTc3MTRlMTIyZGQ5YzIzZCIKKworREVQRU5EUyArPSAicGVybCIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmNwYW4ub3JnL2F1dGhvcnMvaWQvRy9HQS9HQUFTL1VSSS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MGY3MzliZThjZTI4YjhiYWJhN2M1OTIwZmZlZTRkYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxZjkyZDNkYzY0YWNiODg0NWU5OTE3Yzk0NWUyMmI5YTUyNzVhZWI5ZmY5MjRlYjc4NzNjM2I3YTVjMGQyMzc3IgorCitTID0gIiR7V09SS0RJUn0vVVJJLSR7UFZ9IgorCitFWFRSQV9DUEFORkxBR1MgPSAiRVhQQVRMSUJQQVRIPSR7U1RBR0lOR19MSUJESVJ9IEVYUEFUSU5DUEFUSD0ke1NUQUdJTkdfSU5DRElSfSIKKworaW5oZXJpdCBjcGFuCisKK2RvX2NvbXBpbGUoKSB7CisJZXhwb3J0IExJQkM9IiQoZmluZCAke1NUQUdJTkdfRElSX1RBUkdFVH0vJHtiYXNlX2xpYmRpcn0vIC1uYW1lICdsaWJjLSouc28nKSIKKwljcGFuX2RvX2NvbXBpbGUKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1wYXJzZXItcGVybF8yLjQ0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ4bWwtcGFyc2VyLXBlcmxfMi40NC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2NkNDE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ4bWwtcGFyc2VyLXBlcmxfMi40NC5iYgpAQCAtMCwwICsxLDM3IEBACitTVU1NQVJZID0gIlhNTDo6UGFyc2VyIC0gQSBwZXJsIG1vZHVsZSBmb3IgcGFyc2luZyBYTUwgZG9jdW1lbnRzIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9MjtlbmRsaW5lPTY7bWQ1PWM4NzY3ZDc1MTYyMjlmMDdiMjZlNDJkMWNmOGI1MWYxIgorCitERVBFTkRTICs9ICJleHBhdCBleHBhdC1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5jcGFuLm9yZy9tb2R1bGVzL2J5LW1vZHVsZS9YTUwvWE1MLVBhcnNlci0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiYWY0ODEzZmUzOTUyMzYyNDUxMjAxY2VkNmZiY2UzNzkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWFlOWQwN2VlOWMzNTMyNmIzZDlhYWQ1NmVhZTcxYTY3MzBhNzNhMTE2YjlmZTllOGE0NzU4YjdjYzAzMzIxNiIKKworUyA9ICIke1dPUktESVJ9L1hNTC1QYXJzZXItJHtQVn0iCisKK0VYVFJBX0NQQU5GTEFHUyA9ICJFWFBBVExJQlBBVEg9JHtTVEFHSU5HX0xJQkRJUn0gRVhQQVRJTkNQQVRIPSR7U1RBR0lOR19JTkNESVJ9IENDPScke0NDfScgTEQ9JyR7Q0NMRH0nIEZVTExfQVI9JyR7QVJ9JyIKKworaW5oZXJpdCBjcGFuCisKKyMgZml4IHVwIHN1YiBNYWtlTWFrZXIgcHJvamVjdCBhcyBhcmd1bWVudHMgZG9uJ3QgZ2V0IHByb3BhZ2F0ZWQgdGhvdWdoCisjIHNlZSBodHRwczovL3J0LmNwYW4ub3JnL1B1YmxpYy9CdWcvRGlzcGxheS5odG1sP2lkPTI4NjMyCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCXNlZCAnczotLXN5c3Jvb3Q9LipcKFxzXHwkXCk6LS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSA6ZycgLWkgTWFrZWZpbGUgRXhwYXQvTWFrZWZpbGUKKwlzZWQgJ3M6XkZVTExfQVIgPSAuKjpGVUxMX0FSID0gJHtBUn06ZycgLWkgRXhwYXQvTWFrZWZpbGUKK30KKworZG9fY29tcGlsZSgpIHsKKwlleHBvcnQgTElCQz0iJChmaW5kICR7U1RBR0lOR19ESVJfVEFSR0VUfS8ke2Jhc2VfbGliZGlyfS8gLW5hbWUgJ2xpYmMtKi5zbycpIgorCWNwYW5fZG9fY29tcGlsZQorfQorCitkb19jb21waWxlX2NsYXNzLW5hdGl2ZSgpIHsKKwljcGFuX2RvX2NvbXBpbGUKK30KKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcGVybC92ZW5kb3JfcGVybC8qL2F1dG8vWE1ML1BhcnNlci9FeHBhdC8uZGVidWcvIgorCitCQkNMQVNTRVhURU5EPSJuYXRpdmUiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlieG1sLXBlcmxfMC4wOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlieG1sLXBlcmxfMC4wOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzAxOTc2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ4bWwtcGVybF8wLjA4LmJiCkBAIC0wLDAgKzEsMjcgQEAKK0RFU0NSSVBUSU9OID0gImxpYnhtbC1wZXJsIGlzIGEgY29sbGVjdGlvbiBvZiBzbWFsbGVyIFBlcmwgbW9kdWxlcywgc2NyaXB0cywgYW5kIFwKK2RvY3VtZW50cyBmb3Igd29ya2luZyB3aXRoIFhNTCBpbiBQZXJsLiAgbGlieG1sLXBlcmwgc29mdHdhcmUgXAord29ya3MgaW4gY29tYmluYXRpb24gd2l0aCBYTUw6OlBhcnNlciwgUGVybFNBWCwgWE1MOjpET00sIFwKK1hNTDo6R3JvdmUgYW5kIG90aGVycy4iCitTVU1NQVJZID0gIkNvbGxlY3Rpb24gb2YgUGVybCBtb2R1bGVzIGZvciB3b3JraW5nIHdpdGggWE1MIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKK1BSID0gInIzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7YmVnaW5saW5lPTMzO2VuZGxpbmU9MzU7bWQ1PTE3MDU1NDllZWY3NTc3YTNkNmJhNzExMjNhMWYwY2U4IgorCitERVBFTkRTICs9ICJsaWJ4bWwtcGFyc2VyLXBlcmwiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5jcGFuLm9yZy9tb2R1bGVzL2J5LW1vZHVsZS9YTUwvJHtCUE59LSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjBlZDVmYmRkYTUzZDEzMDFkZGFlZDg4ZGIxMDUwM2JiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ1NzEwNTliN2I1ZDQ4YjdjZTUyYjAxMzg5ZTk1ZDc5OGJmNWNmMjAyMDUyM2MxNTNmZjI3YjQ5ODE1M2M5Y2IiCisKK0VYVFJBX0NQQU5GTEFHUyA9ICJFWFBBVExJQlBBVEg9JHtTVEFHSU5HX0xJQkRJUn0gRVhQQVRJTkNQQVRIPSR7U1RBR0lOR19JTkNESVJ9IgorCitpbmhlcml0IGNwYW4KKworZG9fY29tcGlsZSgpIHsKKwlleHBvcnQgTElCQz0iJChmaW5kICR7U1RBR0lOR19ESVJfVEFSR0VUfS8ke2Jhc2VfbGliZGlyfS8gLW5hbWUgJ2xpYmMtKi5zbycpIgorCWNwYW5fZG9fY29tcGlsZQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1zaW1wbGUtcGVybF8yLjIwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ4bWwtc2ltcGxlLXBlcmxfMi4yMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzIxYjRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ4bWwtc2ltcGxlLXBlcmxfMi4yMC5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIlBlcmwgbW9kdWxlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIFhNTCIKK0RFU0NSSVBUSU9OID0gIlRoZSBYTUw6OlNpbXBsZSBQZXJsIG1vZHVsZSBwcm92aWRlcyBhIHNpbXBsZSBBUEkgbGF5ZXIgXAorb24gdG9wIG9mIGFuIHVuZGVybHlpbmcgWE1MIHBhcnNpbmcgbW9kdWxlIHRvIG1haW50YWluIFhNTCBmaWxlcyBcCisoZXNwZWNpYWxseSBjb25maWd1cmF0aW9uIGZpbGVzKS4gSXQgaXMgYSBibHVudCByZXdyaXRlIG9mIFhNTDo6U2ltcGxlIFwKKyhieSBHcmFudCBNY0xlYW4pIHRvIHVzZSB0aGUgWE1MOjpMaWJYTUwgcGFyc2VyIGZvciBYTUwgc3RydWN0dXJlcywgXAord2hlcmUgdGhlIG9yaWdpbmFsIHVzZXMgcGxhaW4gUGVybCBvciBTQVggcGFyc2Vycy4iCitIT01FUEFHRSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL35tYXJrb3YvWE1MLUxpYlhNTC1TaW1wbGUtMC45My9saWIvWE1ML0xpYlhNTC9TaW1wbGUucG9kIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWU3ZGJiM2UyMjQxZmFjODQ1Nzk2NzA1M2ZjMWExZGRiIgorREVQRU5EUyArPSAibGlieG1sLXBhcnNlci1wZXJsIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuY3Bhbi5vcmcvbW9kdWxlcy9ieS1tb2R1bGUvWE1ML1hNTC1TaW1wbGUtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGQxMDk2NGUxMjNiNzZlY2EzNjY3ODQ2NGRhYTYzY2QiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWNmZjEzZDA4MDI3OTJkYTFlYjQ1ODk1Y2UxYmU0NjE5MDNkOThlYzk3YzljOTUzYmM4NDA2YWY3Mjk0NDM0YSIKKworUyA9ICIke1dPUktESVJ9L1hNTC1TaW1wbGUtJHtQVn0iCisKK0VYVFJBX1BFUkxGTEFHUyA9ICItSSAke1BFUkxIT1NUTElCfSIKKworaW5oZXJpdCBjcGFuCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLW5hdGl2ZV81LjIyLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtbmF0aXZlXzUuMjIuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWExY2FiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLW5hdGl2ZV81LjIyLjAuYmIKQEAgLTAsMCArMSwxMjMgQEAKK3JlcXVpcmUgcGVybC5pbmMKKworU1JDX1VSSSArPSAiXAorICAgICAgICAgICBmaWxlOi8vQ29uZmlndXJlLW11bHRpbGliLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BlcmwtY29uZmlncG0tc3dpdGNoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25hdGl2ZS1ub3BhY2tsaXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25hdGl2ZS1wZXJsaW5jLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL01NX1VuaXgucG0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGViaWFuL2Vycm5vX3Zlci5kaWZmIFwKKyAgICAgICAgICAgZmlsZTovL2R5bmFsb2FkZXJoYWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BlcmwtUGF0aFRvb2xzLWRvbi10LWZpbHRlci1vdXQtYmxpYi1mcm9tLUlOQy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmYwZjA5YjE3ZGU0MjZlZmYzMjM0MjZjYjE0MGVlNzkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmU4M2VhZDBjNWMyNmNiYmU2MjZmYTRiYWMxYTRiZWFiZTIzYTllZWJjMTVkMzViYTQ5Y2NkZTExODc4ZTE5NiIKKworaW5oZXJpdCBuYXRpdmUKKworTkFUSVZFX1BBQ0tBR0VfUEFUSF9TVUZGSVggPSAiLyR7UE59IgorCitleHBvcnQgTEQ9IiR7Q0NMRH0iCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJLi9Db25maWd1cmUgXAorCQktRGNjPSIke0NDfSIgXAorCQktRGNmbGFncz0iJHtDRkxBR1N9IiBcCisJCS1EbGRmbGFncz0iJHtMREZMQUdTfSIgXAorCQktRGNmX2J5PSJPcGVuIEVtYmVkZGVkIiBcCisJCS1EcHJlZml4PSR7cHJlZml4fSBcCisJCS1EdmVuZG9ycHJlZml4PSR7cHJlZml4fSBcCisJCS1EdmVuZG9ycHJlZml4PSR7cHJlZml4fSBcCisJCS1Ec2l0ZXByZWZpeD0ke3ByZWZpeH0gXAorCQlcCisJCS1EYmluPSR7U1RBR0lOR19CSU5ESVJ9LyR7UE59IFwKKwkJLURwcml2bGliPSR7U1RBR0lOR19MSUJESVJ9L3BlcmwvJHtQVn0gXAorCQktRGFyY2hsaWI9JHtTVEFHSU5HX0xJQkRJUn0vcGVybC8ke1BWfSBcCisJCS1EdmVuZG9ybGliPSR7U1RBR0lOR19MSUJESVJ9L3BlcmwvJHtQVn0gXAorCQktRHZlbmRvcmFyY2g9JHtTVEFHSU5HX0xJQkRJUn0vcGVybC8ke1BWfSBcCisJCS1Ec2l0ZWxpYj0ke1NUQUdJTkdfTElCRElSfS9wZXJsLyR7UFZ9IFwKKwkJLURzaXRlYXJjaD0ke1NUQUdJTkdfTElCRElSfS9wZXJsLyR7UFZ9IFwKKwkJXAorCQktRHVzZXNocnBsaWIgXAorCQktRHVzZXRocmVhZHMgXAorCQktRHVzZWl0aHJlYWRzIFwKKwkJLUR1c2VsYXJnZWZpbGVzIFwKKwkJLURub2V4dGVuc2lvbnM9T0RCTV9GaWxlIFwKKwkJLVVkX2Rvc3VpZCBcCisJCS1VaV9kYiBcCisJCS1VaV9uZGJtIFwKKwkJLVVpX2dkYm0gXAorCQktVWlfZ2RibV9uZGJtIFwKKwkJLVVpX2dkYm1uZGJtIFwKKwkJLURpX3NoYWRvdyBcCisJCS1EaV9zeXNsb2cgXAorCQktRHVzZXBlcmxpbyBcCisJCS1EbWFuM2V4dD0zcG0gXAorCQktRHNlZD0vYmluL3NlZCBcCisJCS1VYWZzIFwKKwkJLVVkX2NzaCBcCisJCS1VdXNlc2ZpbyBcCisJCS1VdXNlbm0gLWRlcworfQorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKKworCSMgV2UgbmVlZCBhIGhvc3RwZXJsIGxpbmsgZm9yIGJ1aWxkaW5nIHBlcmwKKwlsbiAtc2YgcGVybCR7UFZ9ICR7RH0ke2JpbmRpcn0vaG9zdHBlcmwKKworICAgICAgICBsbiAtc2YgcGVybCAke0R9JHtsaWJkaXJ9L3Blcmw1CisKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vcGVybC8ke1BWfS9DT1JFIFwKKwkgICAgICAgICAgICR7RH0ke2RhdGFkaXJ9L3BlcmwvJHtQVn0vRXh0VXRpbHMKKworCSMgU2F2ZSBuYXRpdmUgY29uZmlnIAorCWluc3RhbGwgY29uZmlnLnNoICR7RH0ke2xpYmRpcn0vcGVybAorCWluc3RhbGwgbGliL0NvbmZpZy5wbSAke0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vCisJaW5zdGFsbCBsaWIvRXh0VXRpbHMvdHlwZW1hcCAke0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vRXh0VXRpbHMvCisKKwkjIHBlcmwgc2hhcmVkIGxpYnJhcnkgaGVhZGVycworCSMgcmVmZXJlbmNlIHBlcmwgNS4yMC4wLTEgaW4gZGViaWFuOgorCSMgaHR0cHM6Ly9wYWNrYWdlcy5kZWJpYW4ub3JnL2V4cGVyaW1lbnRhbC9pMzg2L3BlcmwvZmlsZWxpc3QKKwlmb3IgaSBpbiBhdi5oIGJpdGNvdW50LmggY2hhcmNsYXNzX2ludmxpc3RzLmggY29uZmlnLmggY29wLmggY3YuaCBkb3Npc2guaCBcCisJCWVtYmVkLmggZW1iZWR2YXIuaCBFWFRFUk4uaCBmYWtlc2Rpby5oIGZlYXR1cmUuaCBmb3JtLmggZ2l0X3ZlcnNpb24uaCBcCisJCWd2LmggaGFuZHkuaCBodl9mdW5jLmggaHYuaCBpbmxpbmUuaCBJTlRFUk4uaCBpbnRycHZhci5oIGlwZXJsc3lzLmggXAorCQlrZXl3b3Jkcy5oIGwxX2NoYXJfY2xhc3NfdGFiLmggbWFsbG9jX2N0bC5oIG1ldGFjb25maWcuaCBtZ19kYXRhLmggXAorCQltZy5oIG1nX3Jhdy5oIG1nX3Z0YWJsZS5oIG15ZHRyYWNlLmggbm9zdGRpby5oIG9wY29kZS5oIG9wLmggXAorCQlvcG5hbWVzLmggb3BfcmVnX2NvbW1vbi5oIG92ZXJsb2FkLmggcGFkLmggcGFyc2VyLmggcGF0Y2hsZXZlbC5oIFwKKwkJcGVybGFwaS5oIHBlcmwuaCBwZXJsaW8uaCBwZXJsaW9sLmggcGVybHNkaW8uaCBwZXJsdmFycy5oIHBlcmx5LmggXAorCQlwcC5oIHBwX3Byb3RvLmggcHJvdG8uaCByZWVudHIuaCByZWdjaGFyY2xhc3MuaCByZWdjb21wLmggcmVnZXhwLmggXAorCQlyZWdub2Rlcy5oIHNjb3BlLmggc3YuaCB0aHJlYWQuaCB0aW1lNjRfY29uZmlnLmggdGltZTY0LmggdWNvbmZpZy5oIFwKKwkJdW5pY29kZV9jb25zdGFudHMuaCB1bml4aXNoLmggdXRmOC5oIHV0ZmViY2RpYy5oIHV0aWwuaCB1dWRtYXAuaCBcCisJCXZ1dGlsLmggd2FybmluZ3MuaCBYU1VCLmgKKwlkbworCQlpbnN0YWxsICRpICR7RH0ke2xpYmRpcn0vcGVybC8ke1BWfS9DT1JFCisJZG9uZQorCisJY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmluZGlyfS9wZXJsIFBFUkw1TElCPSckUEVSTDVMSUI6JHtTVEFHSU5HX0xJQkRJUn0vcGVybC8ke1BWfToke1NUQUdJTkdfTElCRElSfS9wZXJsOiR7U1RBR0lOR19MSUJESVJ9L3Blcmwvc2l0ZV9wZXJsLyR7UFZ9OiR7U1RBR0lOR19MSUJESVJ9L3BlcmwvdmVuZG9yX3BlcmwvJHtQVn0nCisJY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmluZGlyfS9wZXJsJHtQVn0gUEVSTDVMSUI9JyRQRVJMNUxJQjoke1NUQUdJTkdfTElCRElSfS9wZXJsLyR7UFZ9OiR7U1RBR0lOR19MSUJESVJ9L3Blcmwke1NUQUdJTkdfTElCRElSfS9wZXJsOiR7U1RBR0lOR19MSUJESVJ9L3Blcmwvc2l0ZV9wZXJsLyR7UFZ9OiR7U1RBR0lOR19MSUJESVJ9L3BlcmwvdmVuZG9yX3BlcmwvJHtQVn0nCisKKwkjIFVzZSAvdXNyL2Jpbi9lbnYgbmF0aXZlcGVybCBmb3IgdGhlIHBlcmwgc2NyaXB0LgorCWZvciBmIGluIGBncmVwIC1JbCAnIyEgKiR7YmluZGlyfS9wZXJsJyAke0R9LyR7YmluZGlyfS8qYDsgZG8KKwkJc2VkIC1pIC1lICdzfCR7YmluZGlyfS9wZXJsfC91c3IvYmluL2VudiBuYXRpdmVwZXJsfCcgJGYKKwlkb25lCit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAicGVybF9zeXNyb290X2NyZWF0ZV93cmFwcGVyIgorCitwZXJsX3N5c3Jvb3RfY3JlYXRlX3dyYXBwZXIgKCkgeworCW1rZGlyIC1wICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyfQorCSMgQ3JlYXRlIGEgd3JhcHBlciB0aGF0IC91c3IvYmluL2VudiBwZXJsIHdpbGwgdXNlIHRvIGdldCBwZXJsLW5hdGl2ZS4KKwkjIFRoaXMgTVVTVCBsaXZlIGluIHRoZSBub3JtYWwgYmluZGlyLgorCWNhdCA+ICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyfS8uLi9uYXRpdmVwZXJsIDw8IEVPRgorIyEvYmluL3NoCityZWFscGF0aD1cYHJlYWRsaW5rIC1mbiBcJDBcYAorZXhlYyBcYGRpcm5hbWUgXCRyZWFscGF0aFxgL3BlcmwtbmF0aXZlL3BlcmwgIlwkQCIKK0VPRgorCWNobW9kIDA3NTUgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJ9Ly4uL25hdGl2ZXBlcmwKKwljYXQgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJ9Ly4uL25hdGl2ZXBlcmwKK30KKworIyBGaXggdGhlIHBhdGggaW4gc3N0YXRlCitTU1RBVEVfU0NBTl9GSUxFUyArPSAiKi5wbSAqLnBvZCAqLmggKi5wbCAqLnNoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLXB0ZXN0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC1wdGVzdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ4ZWE3YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC1wdGVzdC5pbmMKQEAgLTAsMCArMSwzNyBAQAoraW5oZXJpdCBwdGVzdAorCitTUkNfVVJJICs9ICJmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgIgorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKwlta2RpciAtcCAke0R9JHtQVEVTVF9QQVRIfQorCXNlZCAtZSAiczpcL29wdDpcL3VzcjoiIC1pIFBvcnRpbmcvYWRkLXBhY2thZ2UucGwKKwlzZWQgLWUgInM6XC9sb2NhbFwvZ251XC86XC86IiAtaSBoaW50cy9jeHV4LnNoCisJdGFyIC1jZiAtICogLS1leGNsdWRlIFwqLm8gLS1leGNsdWRlIGxpYnBlcmwuc28gLS1leGNsdWRlIE1ha2VmaWxlIC0tZXhjbHVkZSBtYWtlZmlsZSAtLWV4Y2x1ZGUgaG9zdHBlcmwgXAorCQktLWV4Y2x1ZGUgbWluaXBlcmwgLS1leGNsdWRlIGdlbmVyYXRlX3V1ZG1hcCAtLWV4Y2x1ZGUgcGF0Y2hlcyB8ICggY2QgJHtEfSR7UFRFU1RfUEFUSH0gJiYgdGFyIC14ZiAtICkKKworCXNlZCAtaSAtZSAicywke0R9LCxnIiBcCisJICAgICAgIC1lICJzLC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX0hPU1R9LCxnIiBcCisJICAgICAgIC1lICJzLC1pc3lzdGVtJHtTVEFHSU5HX0lOQ0RJUn0gLCxnIiBcCisJICAgICAgIC1lICJzLCR7U1RBR0lOR19MSUJESVJ9LCR7bGliZGlyfSxnIiBcCisJICAgICAgIC1lICJzLCR7U1RBR0lOR19CSU5ESVJ9LCR7YmluZGlyfSxnIiBcCisJICAgICAgIC1lICJzLCR7U1RBR0lOR19JTkNESVJ9LCR7aW5jbHVkZWRpcn0sZyIgXAorCSAgICAgICAtZSAicywke1NUQUdJTkdfQklORElSX05BVElWRX0vcGVybC1uYXRpdmUvLCR7YmluZGlyfS8sZyIgXAorCSAgICAgICAtZSAicywke1NUQUdJTkdfQklORElSX05BVElWRX0vLCxnIiBcCisJICAgICAgIC1lICJzLCR7U1RBR0lOR19CSU5ESVJfVE9PTENIQUlOfS8ke1RBUkdFVF9QUkVGSVh9LCR7YmluZGlyfSxnIiBcCisJICAgICR7RH0ke1BURVNUX1BBVEh9L2xpYi9Db25maWcucG0KKworCWxuIC1zZiAke2JpbmRpcn0vcGVybCAke0R9JHtQVEVTVF9QQVRIfS90L3BlcmwKKworfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCgpIHsKKyAgICAjIFB1dCBhbGwgKi50IGZpbGVzIGZyb20gdGhlIGxpYiBkaXIgaW4gdGhlIHB0ZXN0IHBhY2thZ2UKKyAgICAjIGRvX3NwbGl0X3BhY2thZ2VzIHJlcXVpcmVzIGEgcGFpciBvZiAoKSBpbiB0aGUgcmVnZXgsIGJ1dCB3ZSBoYXZlIG5vdGhpbmcKKyAgICAjIHRvIG1hdGNoLCBzbyB1c2UgYW4gZW1wdHkgcGFpci4KKyAgICBpZiBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B0ZXN0JywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBkLmV4cGFuZCgnJHtsaWJkaXJ9L3BlcmwvJHtQVn0nKSwgJy4qXC50KCknLAorICAgICAgICAgICAgJyR7UE59LXB0ZXN0JXMnLCAnJXMnLCByZWN1cnNpdmU9VHJ1ZSwgbWF0Y2hfcGF0aD1UcnVlKQorfQorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiJHtQTn0tbW9kdWxlcyAke1BOfS1kb2MgJHtQTn0tbWlzYyBzZWQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtcmRlcGVuZHNfNS4yMi4wLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC1yZGVwZW5kc181LjIyLjAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmODg2ZjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtcmRlcGVuZHNfNS4yMi4wLmluYwpAQCAtMCwwICsxLDI1NjcgQEAKKyMgVG8gY3JlYXRlL3VwZGF0ZSB0aGUgcGVybC1yZGVwZW5kc18ke1BWfS5pbmMgdXNlIHRoaXMgcGllY2Ugb2YgdWdseSBzY3JpcHQgKG1vZGlmaWVkIGZvciB5b3VyIGFyY2gvcGF0aHMgZXRjKToKKworI2ppYWhvbmd4dTo1LjIwLjAtcjEkIHB3ZAorIy9ob21lL2ppYWhvbmd4dS95b2N0by9idWlsZC0yMDE0MDYxOC1wZXJsL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9wZXJsLzUuMjAuMC1yMQorCisjMSBjcCAtciBwYWNrYWdlcy1zcGxpdCBwYWNrYWdlcy1zcGxpdC5uZXcgJiYgY2QgcGFja2FnZXMtc3BsaXQubmV3CisjMiBmaW5kIC4gLW5hbWUgXCoucG0gfCB4YXJncyBzZWQgLWkgJy9ePWhlYWQvLC9ePWN1dC9kJworIzMgZWdyZXAgLXIgIl5ccyooXDx1c2UgLip8XDxyZXF1aXJlIC4qKTs/IiBwZXJsLW1vZHVsZS0qIC0taW5jbHVkZT0iKi5wbSIgCisjfCBzZWQgInMvXC8uKlwucG06ICovICs9IC9nO3MvW1wiXCddLy9nO3MvOy4qL1wiL2c7cy8rPSAuKlwocmVxdWlyZVx8dXNlXClcPiAqLys9IFwicGVybC1tb2R1bGUtL2c7cy9DUEFOUExVUzo6LiovY3BhbnBsdXMvZztzL0NQQU46Oi4qL2NwYW4vZztzLzo6Ly0vZztzLyBbXitcIl0uKi8vZztzL18vLS9nO3MvXC5wbFwiJC9cIi87cy9cIlw/XCQvXCIvO3MvKC8vOyIgfCB0ciBbOnVwcGVyOl0gWzpsb3dlcjpdIAorI3wgZ3JlcCAtdiAtZSAiXC12bXNcLSIgLWUgbW9kdWxlLTUgLWUgIl4kIiAtZSAiXFwkIiAtZSB5b3VyIC1lIHRrIC1lIGF1dG9wZXJsIC1lIGh0bWwgLWUgaHR0cCAtZSBwYXJzZS1jcGFuIC1lIHBlcmwtb3N0eXBlIC1lIG5kYm0tZmlsZSAtZSBtb2R1bGUtbWFjIC1lIGZjZ2kgLWUgbHdwIC1lIGRiZCAtZSBkYml4IAorI3wgc29ydCAtdSAKKyN8IHNlZCAncy9eL1JERVBFTkRTXy87cy9wZXJsLW1vZHVsZS0vJHtQTn0tbW9kdWxlLS9nO3MvbW9kdWxlLVwobW9kdWxlLVwpL1wxL2c7cy9cKG1vZHVsZS1sb2FkXCktY29uZGl0aW9uYWwvXDEvZztzL2VuY29kZS1jb25maWdsb2NhbC8mLXBtLzsnIAorI3wgZWdyZXAgLXd2ICc9Pnxtb2R1bGUtYXxtb2R1bGUtYXBhY2hlLj98bW9kdWxlLWFwcnxtb2R1bGUtYXV0aGVuLXNhc2x8bW9kdWxlLWItYXNtZGF0YXxtb2R1bGUtY29udmVydC1lYmNkaWN8bW9kdWxlLWRldmVsLXNpemV8bW9kdWxlLWRpZ2VzdC1wZXJsLW1kNXxtb2R1bGUtZHVtcHZhbHVlfG1vZHVsZS1leHR1dGlscy1jb25zdGFudC1hYWFyZ2g1Nmhhc2h8bW9kdWxlLWV4dHV0aWxzLXhzc3ltc2V0fG1vZHVsZS1maWxlLWJzZGdsb2J8bW9kdWxlLWZvcnxtb2R1bGUtaXR8bW9kdWxlLWlvLXN0cmluZ3xtb2R1bGUtaXBjLXN5c3RlbS1zaW1wbGV8bW9kdWxlLWxleGljYWx8bW9kdWxlLWxvY2FsLWxpYnxtZXRhZGF0YXxtb2R1bGUtbW9kcGVybC11dGlsfG1vZHVsZS1wbHVnZ2FibGUtb2JqZWN0fG1vZHVsZS10ZXN0LWJ1aWxkZXItaW8tc2NhbGFyfG1vZHVsZS10ZXh0LXVuaWRlY29kZXxtb2R1bGUtd2luMzJ8b2JqZWN0c1xzbG9hZHxzeXNjYWxsLnBofHN5c3RlbWluZm8ucGh8JXMnID4gL3RtcC9wZXJsLXJkZXBlbmRzCisKK1JERVBFTkRTX3BlcmwtbWlzYyArPSAicGVybCIKK1JERVBFTkRTXyR7UE59LXBvZCArPSAicGVybCIKKworIyBTb21lIGFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHRoYXQgdGhlIGFib3ZlIGRvZXNuJ3QgbWFuYWdlIHRvIGZpZ3VyZSBvdXQKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCIKK0RFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtY2FsYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtcXVldWUgKz0gIiR7UE59LW1vZHVsZS1hdHRyaWJ1dGVzIgorCisKKyMgRGVwZW5kcyBsaXN0CisjIGNvcHkgY29udGVudHMgb2YgL3RtcC9wZXJsLXJkZXBlbmRzIGluIHRoaXMgZmlsZQorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFueWRibS1maWxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFueWRibS1maWxlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1jcGFuIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtZmlsZS1maW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWZ1bmN0aW9ucyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWdldG9wdC1zdGQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1pZiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLW5ldC1waW5nIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtdXNlci1wd2VudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUgKz0gIiR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUgKz0gIiR7UE59LW1vZHVsZS1nZXRvcHQtbG9uZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlICs9ICIke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlICs9ICIke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MtZW52IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZSArPSAiJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUgKz0gIiR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUtcmVzdWx0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUgKz0gIiR7UE59LW1vZHVsZS1maWxlLWZpbmQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXlhbWxpc2gtcmVhZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIteWFtbGlzaC13cml0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlLXJlc3VsdCArPSAiJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZS1yZXN1bHQtdGVzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUtcmVzdWx0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUtcmVzdWx0ICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlLXJlc3VsdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUtcmVzdWx0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlLXJlc3VsdC10ZXN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZS1yZXN1bHQtdGVzdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJ6aXAyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtdGltZS1sb2NhbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1maWxlICs9ICIke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1pby1maWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXBhdGgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLWlvLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1pby16bGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcnliYXNlICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXR0cmlidXRlLWhhbmRsZXJzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdHRyaWJ1dGUtaGFuZGxlcnMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXR0cmlidXRlLWhhbmRsZXJzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdHRyaWJ1dGUtaGFuZGxlcnMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdHRyaWJ1dGVzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdHRyaWJ1dGVzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXR0cmlidXRlcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdHRyaWJ1dGVzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXR0cmlidXRlcyArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtZXhjZXB0aW9uICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWV4Y2VwdGlvbiArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtZXhjZXB0aW9uICs9ICIke1BOfS1tb2R1bGUtZmF0YWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24gKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWV4Y2VwdGlvbiArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtZXhjZXB0aW9uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtZXhjZXB0aW9uICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24tc3lzdGVtICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWV4Y2VwdGlvbi1zeXN0ZW0gKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24tc3lzdGVtICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtZXhjZXB0aW9uLXN5c3RlbSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtaGludHMgKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtaGludHMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtaGludHMgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWhpbnRzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtaGludHMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZSArPSAiJHtQTn0tbW9kdWxlLWxpYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtc2NvcGUtZ3VhcmQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZS1ndWFyZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtc2NvcGUtZ3VhcmRzdGFjayArPSAiJHtQTn0tbW9kdWxlLWF1dG9kaWUtc2NvcGUtZ3VhcmQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZS1ndWFyZHN0YWNrICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtc2NvcGUtZ3VhcmRzdGFjayArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtc2NvcGV1dGlsICs9ICIke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZS1ndWFyZHN0YWNrIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtc2NvcGV1dGlsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZXV0aWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZXV0aWwgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLXNraXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1za2lwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2xvYWRlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2xvYWRlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvc3BsaXQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9zcGxpdCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvc3BsaXQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvc3BsaXQgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9zcGxpdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvc3BsaXQgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9zcGxpdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvdXNlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iYXNlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iYXNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJhc2UgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItY29uY2lzZSArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1jb25jaXNlICs9ICIke1BOfS1tb2R1bGUtYi1vcC1wcml2YXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItY29uY2lzZSArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWNvbmNpc2UgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWNvbmNpc2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1jb25jaXNlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1kZWJ1ZyArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1kZWJ1ZyArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWRlYnVnICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItZGVwYXJzZSArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1kZXBhcnNlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWRlcGFyc2UgKz0gIiR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWRlcGFyc2UgKz0gIiR7UE59LW1vZHVsZS1mZWF0dXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItZGVwYXJzZSArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkaW5nIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItZGVwYXJzZSArPSAiJHtQTn0tbW9kdWxlLXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItZGVwYXJzZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWRlcGFyc2UgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItZGVwYXJzZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJlbmNobWFyayArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmVuY2htYXJrICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmVuY2htYXJrICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtdHJhY2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnbnVtICs9ICIke1BOfS1tb2R1bGUtYmlnaW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ251bSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnbnVtICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnbnVtICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdudW0gKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0LXRyYWNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ251bSArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ251bSArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LXRyYWNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ251bSArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ251bSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdudW0gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLWJpZ2ludCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtdHJhY2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdyYXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmxpYiArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1ibGliICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJsaWIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWIgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLXNob3dsZXggKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItc2hvd2xleCArPSAiJHtQTn0tbW9kdWxlLWItY29uY2lzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLXNob3dsZXggKz0gIiR7UE59LW1vZHVsZS1iLXRlcnNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItc2hvd2xleCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLXRlcnNlICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLXRlcnNlICs9ICIke1BOfS1tb2R1bGUtYi1jb25jaXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItdGVyc2UgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItdGVyc2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi14cmVmICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLXhyZWYgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi14cmVmICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJ5dGVzICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMtaGVhdnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYnl0ZXMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNhcnAtaGVhdnkgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNhcnAgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jYXJwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNhcnAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jaGFybmFtZXMgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jaGFybmFtZXMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNoYXJuYW1lcyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jaGFybmFtZXMgKz0gIiR7UE59LW1vZHVsZS1yZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jaGFybmFtZXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY2hhcm5hbWVzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLWNhcnAgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctYnppcDIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LWJ6aXAyICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIgKz0gIiR7UE59LW1vZHVsZS1jYXJwICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtemxpYiArPSAiJHtQTn0tbW9kdWxlLWNhcnAgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtemxpYiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcC1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtemxpYiArPSAiJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtemxpYiArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtZ3VuemlwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbmZpZy1leHRlbnNpb25zICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbmZpZy1leHRlbnNpb25zICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uZmlnLWV4dGVuc2lvbnMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uZmlnLWV4dGVuc2lvbnMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbmZpZy1wZXJsLXYgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uZmlnLXBlcmwtdiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbmZpZy1wZXJsLXYgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uZmlnLXBlcmwtdiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uZmlnLXBlcmwtdiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvcmVsaXN0ICs9ICIke1BOfS1tb2R1bGUtbGlzdC11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvcmVsaXN0ICs9ICIke1BOfS1tb2R1bGUtY29yZWxpc3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29yZWxpc3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29yZWxpc3QgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvcmVsaXN0ICs9ICIke1BOfS1tb2R1bGUtdmVyc2lvbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb3JlbGlzdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWNwYW4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWRpcmhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFuaWZlc3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLWNvcHkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtZmlsZWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWxpYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtbmV0LXBpbmciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtc2FmZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtc3lzLWhvc3RuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS10ZXJtLXJlYWRsaW5lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXRleHQtd3JhcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtdGltZS1sb2NhbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3dkICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jd2QgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jd2QgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3dkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWN3ZCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3dkICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIgKz0gIiR7UE59LW1vZHVsZS1iLWRlcGFyc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRhdGEtZHVtcGVyICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRhdGEtZHVtcGVyICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRhdGEtZHVtcGVyICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLWNvbXByZXNzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLWNvbXByZXNzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItY29tcHJlc3MgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlci1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlci1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLWludDMyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItaW50MzIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLW51bGwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlci1udWxsICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlci11dGY4ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLXV0ZjggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlci11dGY4ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGVwcmVjYXRlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXByZWNhdGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGVwcmVjYXRlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGV2ZWwtcGVlayArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRldmVsLXBlZWsgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXZlbC1wcHBvcnQgKz0gIiR7UE59LW1vZHVsZS1maWxlLWZpbmQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGV2ZWwtcHBwb3J0ICs9ICIke1BOfS1tb2R1bGUtZ2V0b3B0LWxvbmciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGV2ZWwtcHBwb3J0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRldmVsLXBwcG9ydCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGV2ZWwtc2VsZnN0dWJiZXIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGV2ZWwtc2VsZnN0dWJiZXIgKz0gIiR7UE59LW1vZHVsZS1zZWxmbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpYWdub3N0aWNzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWFnbm9zdGljcyArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWFnbm9zdGljcyArPSAiJHtQTn0tbW9kdWxlLWdldG9wdC1zdGQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlhZ25vc3RpY3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlhZ25vc3RpY3MgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXRhYnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LWJhc2UgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1iYXNlICs9ICIke1BOfS1tb2R1bGUtbWltZS1iYXNlNjQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LWJhc2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LWJhc2UgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1maWxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtZmlsZSArPSAiJHtQTn0tbW9kdWxlLWRpZ2VzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtZmlsZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1maWxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1maWxlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtbWQ1ICs9ICIke1BOfS1tb2R1bGUtZGlnZXN0LWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LW1kNSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1tZDUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LW1kNSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LW1kNSArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1zaGEgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1zaGEgKz0gIiR7UE59LW1vZHVsZS1kaWdlc3QtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3Qtc2hhICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3Qtc2hhICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LXNoYSArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1zaGEgKz0gIiR7UE59LW1vZHVsZS1pbnRlZ2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1zaGEgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LXNoYSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LXNoYSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpcmhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlyaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWFsaWFzICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWFsaWFzICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1hbGlhcyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1hbGlhcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtYWxpYXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtYnl0ZSArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtYnl0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtYnl0ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1ieXRlICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNqa2NvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNqa2NvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jamtjb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNqa2NvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jbi1oeiArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY24taHogKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNuLWh6ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jbi1oeiArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNuLWh6ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY24taHogKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY24gKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNuICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWNuLWh6IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY24gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY24gKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY29uZmlnICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jb25maWcgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZWJjZGljICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lYmNkaWMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWViY2RpYyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lYmNkaWMgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWVuY29kZXIgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RlciArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RlciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGVyICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWVuY29kZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWVuY29kZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1uYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3NtMDMzOCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWdzbTAzMzggKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWdzbTAzMzggKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWdzbTAzMzggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWdzbTAzMzggKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1nc20wMzM4ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3NtMDMzOCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1ndWVzcyArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1ndWVzcyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWd1ZXNzICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWd1ZXNzICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1ndWVzcyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1ndWVzcyArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3Vlc3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWd1ZXNzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwLWgyeiArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1jamtjb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwLWgyeiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAtaDJ6ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAtaDJ6ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwLWppczcgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAtamlzNyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAtamlzNyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1jamtjb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwLWppczcgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtanAtaDJ6IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1qaXM3ICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1qaXM3ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1qaXM3ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcCArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1qaXM3IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUta3ItMjAyMi1rciArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUta3ItMjAyMi1rciArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1jamtjb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWtyLTIwMjIta3IgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWtyLTIwMjIta3IgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWtyLTIwMjIta3IgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUta3IgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWtyICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWtyLTIwMjIta3IiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWtyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1rciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1rciArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlci1pc28tMjAyMi1qcCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlci1pc28tMjAyMi1qcCArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1jamtjb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyLWlzby0yMDIyLWpwICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlci1pc28tMjAyMi1qcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1oZWFkZXItaXNvLTIwMjItanAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1oZWFkZXIgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1oZWFkZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlciArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlciArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1oZWFkZXIgKz0gIiR7UE59LW1vZHVsZS1taW1lLWJhc2U2NCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1oZWFkZXIgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlciArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtbmFtZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1uYW1lICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtYWxpYXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtY29uZmlnbG9jYWwtcG0iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWVuY29kaW5nIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtc3ltYm9sICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1zeW1ib2wgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXN5bWJvbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1zeW1ib2wgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtdHcgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXR3ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS10dyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS10dyArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtdW5pY29kZS11dGY3ICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlLXV0ZjcgKz0gIiR7UE59LW1vZHVsZS1taW1lLWJhc2U2NCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtdW5pY29kZS11dGY3ICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlLXV0ZjcgKz0gIiR7UE59LW1vZHVsZS1yZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtdW5pY29kZS11dGY3ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlLXV0ZjcgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLWZpbHRlci11dGlsLWNhbGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS1pMThuLWxhbmdpbmZvIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kaW5nLXdhcm5pbmdzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGluZy13YXJuaW5ncyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmdsaXNoICs9ICIke1BOfS1tb2R1bGUtY2FycCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5nbGlzaCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVudiArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbnYgKz0gIiR7UE59LW1vZHVsZS10aWUtYXJyYXkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXJybm8gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVycm5vICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXJybm8gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXhwZXJpbWVudGFsICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHBlcmltZW50YWwgKz0gIiR7UE59LW1vZHVsZS1mZWF0dXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4cGVyaW1lbnRhbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHBlcmltZW50YWwgKz0gIiR7UE59LW1vZHVsZS12ZXJzaW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4cGVyaW1lbnRhbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4cG9ydGVyLWhlYXZ5ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHBvcnRlci1oZWF2eSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4cG9ydGVyLWhlYXZ5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4cG9ydGVyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXItaGVhdnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1ta3N5bWxpc3RzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtaXBjLWNtZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXIgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1haXggKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWFpeCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1haXggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tYWl4ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1hbmRyb2lkICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWFuZHJvaWQgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWFuZHJvaWQgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tYW5kcm9pZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1hbmRyb2lkICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWN5Z3dpbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tY3lnd2luICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1kYXJ3aW4gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWRhcndpbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1kYXJ3aW4gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWRlYy1vc2YgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWRlYy1vc2YgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tZGVjLW9zZiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1kZWMtb3NmICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1vczIgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLW9zMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1vczIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXVuaXggKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXVuaXggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tdW5peCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tdm1zICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXZtcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tdm1zICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWZ1bmN0aW9ucyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS12bXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tdm1zICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS13aW5kb3dzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS13aW5kb3dzICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS13aW5kb3dzICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXdpbmRvd3MgKz0gIiR7UE59LW1vZHVsZS1pby1maWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXdpbmRvd3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0td2luZG93cyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0td2luZG93cyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQtbW0gKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kLW1tICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kLW1tICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kLW1tICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQtbW0gKz0gIiR7UE59LW1vZHVsZS1nZXRvcHQtbG9uZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kLW1tICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQtbW0gKz0gIiR7UE59LW1vZHVsZS10ZXN0LWhhcm5lc3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZC1tbSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kICs9ICIke1BOfS1tb2R1bGUtZmlsZS1jb3B5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQgKz0gIiR7UE59LW1vZHVsZS1maWxlLWZpbmQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LWJhc2UgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC11dGlscyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1iYXNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LWJhc2UgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXdyYXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1wcm94eXN1YnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC11dGlscyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXhzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtZmlsZWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtcHJveHlzdWJzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1wcm94eXN1YnMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC11dGlscyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1wcm94eXN1YnMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC14cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1wcm94eXN1YnMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtcHJveHlzdWJzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC11dGlscyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtdXRpbHMgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC11dGlscyArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXV0aWxzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXV0aWxzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC14cyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQteHMgKz0gIiR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC14cyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXhzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC14cyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXV0aWxzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXhzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXhzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1lbWJlZCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1lbWJlZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWVtYmVkICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1lbWJlZCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1lbWJlZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1lbWJlZCArPSAiJHtQTn0tbW9kdWxlLWdldG9wdC1zdGQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtZW1iZWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtZW1iZWQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGxlZCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbGVkICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGxlZCArPSAiJHtQTn0tbW9kdWxlLWRhdGEtZHVtcGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGxlZCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsZWQgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1wYWNrbGlzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsZWQgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGxlZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsZWQgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbGVkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGxlZCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLWF1dG9zcGxpdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1wYWNrbGlzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtZmlsZS1jb21wYXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1maWxlLWNvcHkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0LWtpZCArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0LWtpZCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdC1raWQgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3Qta2lkICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3Qta2lkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3Qta2lkICs9ICIke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3Qta2lkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3Qta2lkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3QgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItY29uZmlnICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWxvY2FsZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWxvY2FsZSArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItbG9jYWxlICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWFsaWFzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1sb2NhbGUgKz0gIiR7UE59LW1vZHVsZS1pMThuLWxhbmdpbmZvIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1sb2NhbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1hbmlmZXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW15IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLXZlcnNpb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi1yZWdleCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tcmVnZXggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tcmVnZXggKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tcmVnZXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS11bml2ZXJzYWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFuaWZlc3QgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFuaWZlc3QgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFuaWZlc3QgKz0gIiR7UE59LW1vZHVsZS1maWxlLWNvcHkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFuaWZlc3QgKz0gIiR7UE59LW1vZHVsZS1maWxlLWZpbmQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFuaWZlc3QgKz0gIiR7UE59LW1vZHVsZS1maWxlLXBhdGgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFuaWZlc3QgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFuaWZlc3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFuaWZlc3QgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1taW5pcGVybCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1pbmlwZXJsICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtZW1iZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWluaXBlcmwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWluaXBlcmwgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1rYm9vdHN0cmFwICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1rYm9vdHN0cmFwICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1ta2Jvb3RzdHJhcCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1rYm9vdHN0cmFwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1rc3ltbGlzdHMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1rc3ltbGlzdHMgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWtzeW1saXN0cyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1rc3ltbGlzdHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYWl4ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFpeCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYWl4ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSArPSAiJHtQTn0tbW9kdWxlLWF1dG9zcGxpdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSArPSAiJHtQTn0tbW9kdWxlLWNwYW4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55ICs9ICIke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkgKz0gIiR7UE59LW1vZHVsZS1maWxlLWZpbmQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkgKz0gIiR7UE59LW1vZHVsZS12ZXJzaW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWJlb3MgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWJlb3MgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYmVvcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYmVvcyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1iZW9zICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWN5Z3dpbiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tY3lnd2luICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW4zMiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tY3lnd2luICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWRhcndpbiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tZGFyd2luICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWRvcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1kb3MgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWRvcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1tYWNvcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1udzUgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tbnc1ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1udzUgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW4zMiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1udzUgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLW53NSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1vczIgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tb3MyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLW9zMiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tb3MyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLW9zMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXFueCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tcW54ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXggKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLWRpcmhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXggKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXggKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1maW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLXZlcnNpb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdXdpbiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdXdpbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS12bXMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS12bXMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0LWtpZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS12bXMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdm1zICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS12bXMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdm1zICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS12bXMgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZtcyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS12bXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdm9zICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS12b3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luMzIgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luMzIgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXdpbjMyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXdpbjMyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW4zMiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luMzIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luMzIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luOTUgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXdpbjk1ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luMzIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luOTUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbXkgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1teSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYWNrbGlzdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFja2xpc3QgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFja2xpc3QgKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFja2xpc3QgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFja2xpc3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFja2xpc3QgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy1jb3VudGxpbmVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtZXZhbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLWV2YWwgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMgKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy1jb3VudGxpbmVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLWV2YWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtdXRpbGl0aWVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLXV0aWxpdGllcyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtdXRpbGl0aWVzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy11dGlsaXRpZXMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLXV0aWxpdGllcyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLXV0aWxpdGllcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLXV0aWxpdGllcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXRlc3RsaWIgKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdGVzdGxpYiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10ZXN0bGliICs9ICIke1BOfS1tb2R1bGUtbGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXRlc3RsaWIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdGVzdGxpYiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLWNtZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLWNtZCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLWNtZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcy1jbWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcy1pbnB1dG1hcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcy1pbnB1dG1hcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLW91dHB1dG1hcCArPSAiJHtQTn0tbW9kdWxlLXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLW91dHB1dG1hcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcy1vdXRwdXRtYXAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLWlucHV0bWFwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtb3V0cHV0bWFwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtdHlwZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLXR5cGUgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcy10eXBlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLXR5cGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLWF1dG9kaWUtZXhjZXB0aW9uLXN5c3RlbSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLWF1dG9kaWUtaGludHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmF0YWwgKz0gIiR7UE59LW1vZHVsZS1hdXRvZGllLXNjb3BldXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmF0YWwgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmF0YWwgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLWZhdGFsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmF0YWwgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtdGllLXJlZmhhc2giCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmF0YWwgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mY250bCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZjbnRsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZjbnRsICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmVhdHVyZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmllbGRzICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWVsZHMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpZWxkcyArPSAiJHtQTn0tbW9kdWxlLWhhc2gtdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWVsZHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmllbGRzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSArPSAiJHtQTn0tbW9kdWxlLXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGVjYWNoZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZWNhY2hlICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGVjYWNoZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlY2FjaGUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtY29tcGFyZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb21wYXJlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb21wYXJlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtY29tcGFyZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtY29weSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb3B5ICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtY29weSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtY29weSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb3B5ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtY29weSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWNvcHkgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWRvc2dsb2IgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1kb3NnbG9iICs9ICIke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZG9zZ2xvYiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZG9zZ2xvYiArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1maWxlLWNvcHkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWZpbGVoYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtZmlsZS10ZW1wIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1pcGMtY21kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1sb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1wYXJhbXMtY2hlY2siCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZpbmQgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1maW5kICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmluZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmluZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1maW5kICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmluZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZpbmQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZpbmQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncy1yZWdpc3RlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWdsb2JtYXBwZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZ2xvYm1hcHBlciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZ2xvYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWdsb2JtYXBwZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1nbG9ibWFwcGVyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1nbG9iICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1nbG9iICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZ2xvYiArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGVoYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLWlvLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXBhdGggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXBhdGggKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXBhdGggKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXBhdGggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1wYXRoICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtY3lnd2luICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWN5Z3dpbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtY3lnd2luICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtZXBvYyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1lcG9jICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1lcG9jICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWZ1bmN0aW9ucyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWZ1bmN0aW9ucyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtbWFjICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLW1hYyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtbWFjICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtb3MyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLW9zMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtb3MyICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4ICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4ICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXggKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4ICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXZtcyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXZtcyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy12bXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXZtcyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXdpbjMyICs9ICIke1BOfS1tb2R1bGUtY3dkICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtd2luMzIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtd2luMzIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXdpbjMyICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXN0YXQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXN0YXQgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXN0YXQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXN0YXQgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXN0YXQgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zdGF0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXN0YXQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLWVycm5vIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtaW8tc2Vla2FibGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWx0ZXItc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWx0ZXItc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtZmlsdGVyLXV0aWwtY2FsbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWx0ZXItc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtdGV4dC1iYWxhbmNlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWx0ZXItc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWx0ZXItdXRpbC1jYWxsICs9ICIke1BOfS1tb2R1bGUtY2FycCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsdGVyLXV0aWwtY2FsbCArPSAiJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsdGVyLXV0aWwtY2FsbCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbHRlci11dGlsLWNhbGwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsdGVyLXV0aWwtY2FsbCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsdGVyLXV0aWwtY2FsbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbmRiaW4gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbmRiaW4gKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmluZGJpbiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbmRiaW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbmRiaW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZ2V0b3B0LWxvbmcgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1nZXRvcHQtbG9uZyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWdldG9wdC1sb25nICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZ2V0b3B0LWxvbmcgKz0gIiR7UE59LW1vZHVsZS1wb2QtdXNhZ2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZ2V0b3B0LWxvbmcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZ2V0b3B0LWxvbmcgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZ2V0b3B0LWxvbmcgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWdldG9wdC1zdGQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1oYXNoLXV0aWwtZmllbGRoYXNoICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsLWZpZWxkaGFzaCArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWhhc2gtdXRpbC1maWVsZGhhc2ggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsLWZpZWxkaGFzaCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWhhc2gtdXRpbC1maWVsZGhhc2ggKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1oYXNoLXV0aWwgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWhhc2gtdXRpbCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWhhc2gtdXRpbCArPSAiJHtQTn0tbW9kdWxlLWhhc2gtdXRpbC1maWVsZGhhc2giCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWhhc2gtdXRpbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWhhc2gtdXRpbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWhhc2gtdXRpbCArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tY29sbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tY29sbGF0ZSArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tY29sbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tY29sbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWNvbGxhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncy1yZWdpc3RlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmdpbmZvICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmdpbmZvICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5naW5mbyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmdpbmZvICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5naW5mbyArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ3RhZ3MtZGV0ZWN0ICs9ICIke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzLWRldGVjdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzLWRldGVjdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncy1saXN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ3RhZ3MtbGlzdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ3RhZ3MgKz0gIiR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ3RhZ3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1iemlwMiArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItYnppcDIgKz0gIiR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctYnppcDIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1iemlwMiArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItYnppcDIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1iemlwMiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWRlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5ICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItaWRlbnRpdHkgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24gKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24gKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZ2xvYm1hcHBlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWlvLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYnppcDIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYnppcDIgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWJ6aXAyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWRlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWRlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWRlZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWRlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1yYXdkZWZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWRlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcC1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcC1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcCArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItZGVmbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1yYXdkZWZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWV4dHJhIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1yYXdkZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtcmF3ZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXJhd2RlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtcmF3ZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXJhd2RlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWRlZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtcmF3ZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtcmF3ZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXJhd2RlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXJhd2RlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcC1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcC1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWRlZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iemlwMiAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtcmF3ZGVmbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItZXh0cmEiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWV4dHJhICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1leHRyYSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItZXh0cmEgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItZXh0cmEgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1kaXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWRpciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWRpciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1kaXIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXN0YXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZGlyICs9ICIke1BOfS1tb2R1bGUtaW8tZmlsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1kaXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZGlyICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWRpciArPSAiJHtQTn0tbW9kdWxlLXRpZS1oYXNoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1maWxlICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZmlsZSArPSAiJHtQTn0tbW9kdWxlLWlvLXNlZWthYmxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zZWxlY3RzYXZlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1maWxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8taGFuZGxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1pbyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1pby1maWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXNlbGVjdHNhdmVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8gKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1waXBlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1waXBlICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tcGlwZSArPSAiJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1waXBlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXBpcGUgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tcG9sbCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXBvbGwgKz0gIiR7UE59LW1vZHVsZS1pby1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tcG9sbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zZWVrYWJsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc2Vla2FibGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zZWVrYWJsZSArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNlZWthYmxlICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNlZWthYmxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNlbGVjdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNlbGVjdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zZWxlY3QgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNlbGVjdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pbmV0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaW5ldCArPSAiJHtQTn0tbW9kdWxlLWVycm5vIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pbmV0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWluZXQgKz0gIiR7UE59LW1vZHVsZS1pby1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWluZXQgKz0gIiR7UE59LW1vZHVsZS1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWluZXQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaXAgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pcCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pcCArPSAiJHtQTn0tbW9kdWxlLWVycm5vIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pcCArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pcCArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS1lcnJubyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS1pby1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtaW8tc2VsZWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pbmV0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLWlvLXNvY2tldC11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LXVuaXggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC11bml4ICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC11bml4ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1idW56aXAyICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWJ1bnppcDIgKz0gIiR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctYnppcDIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWJ1bnppcDIgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSArPSAiJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcC1jb25zdGFudHMgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItaWRlbnRpdHkgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItaW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnlpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnlpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWluZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnlpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtZ3VuemlwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtaW5mbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXJhd2luZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnlpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnlpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnl1bmNvbXByZXNzICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnl1bmNvbXByZXNzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55dW5jb21wcmVzcyArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55dW5jb21wcmVzcyArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueXVuY29tcHJlc3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnl1bmNvbXByZXNzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtY2FycCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtaW8tZmlsZSAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtbGlzdC11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJ1bnppcDIgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJ1bnppcDIgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItYnVuemlwMiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJ1bnppcDIgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1idW56aXAyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJ1bnppcDIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWd1bnppcCArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtZ3VuemlwICs9ICIke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1ndW56aXAgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1ndW56aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWd1bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtZ3VuemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1leHRyYSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWd1bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtcmF3aW5mbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWd1bnppcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1ndW56aXAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1pbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1pbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1pbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1yYXdpbmZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtaW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1pbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1yYXdpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1yYXdpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtcmF3aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtcmF3aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pbmZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtcmF3aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXJhd2luZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtcmF3aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWV4dHJhIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS1pby1maWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItaWRlbnRpdHkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pbmZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXJhd2luZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby16bGliICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby16bGliICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8temxpYiArPSAiJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby16bGliICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8temxpYiArPSAiJHtQTn0tbW9kdWxlLXRpZS1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8temxpYiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1maWxlaGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtaW8tc2VsZWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1pcGMtb3BlbjMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLWxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLXBhcmFtcy1jaGVjayIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtdGltZS1oaXJlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtbXNnICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtbXNnICs9ICIke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1tc2cgKz0gIiR7UE59LW1vZHVsZS1pcGMtc3lzdiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtbXNnICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1tc2cgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMiArPSAiJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtb3BlbjIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW9wZW4zICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtb3BlbjMgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtb3BlbjMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtb3BlbjMgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtb3BlbjMgKz0gIiR7UE59LW1vZHVsZS1pby1waXBlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtb3BlbjMgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXNlbWFwaG9yZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXNlbWFwaG9yZSArPSAiJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc2VtYXBob3JlICs9ICIke1BOfS1tb2R1bGUtaXBjLXN5c3YiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXNlbWFwaG9yZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc2VtYXBob3JlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc2hhcmVkbWVtICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc2hhcmVkbWVtICs9ICIke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zaGFyZWRtZW0gKz0gIiR7UE59LW1vZHVsZS1pcGMtc3lzdiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc2hhcmVkbWVtICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zaGFyZWRtZW0gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zeXN2ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc3lzdiArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc3lzdiArPSAiJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXN5c3YgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc3lzdiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc3lzdiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcC1ib29sZWFuICs9ICIke1BOfS1tb2R1bGUtanNvbi1wcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwLWJvb2xlYW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcCArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcCArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcCArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWpzb24tcHAgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWpzb24tcHAgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWpzb24tcHAgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWpzb24tcHAgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwICs9ICIke1BOfS1tb2R1bGUtc3VicyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sZXNzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxlc3MgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1saWIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxpYiArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1saWIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbGlzdC11dGlsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbGlzdC11dGlsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxpc3QtdXRpbCArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxpc3QtdXRpbC14cyArPSAiJHtQTn0tbW9kdWxlLWxpc3QtdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1saXN0LXV0aWwteHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZGVkICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkZWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZGVkICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLWZpbGVoYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0LXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtY29yZWxpc3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLWxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLXBhcmFtcy1jaGVjayIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS12ZXJzaW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5LWNvZGVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5LWNvZGVzICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5LWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnktcmV0aXJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5LXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnktcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnktcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3ktY29kZXMgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5LWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeS1yZXRpcmVkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3kgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3ktcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3ktcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5LXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dC1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dC1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQtY29kZXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dCArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dCArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dC1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dCArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0LXJldGlyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dC1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0LXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0LXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdmYW0tY29kZXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdmYW0gKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdmYW0gKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbS1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtLXJldGlyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdmYW0gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdmYW0gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbS1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtLXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UtY29kZXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlLWNvZGVzICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UtY29kZXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZS1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UtcmV0aXJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlLXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlLXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZS1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXItY29kZXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXItY29kZXMgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyLWNvZGVzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXIgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXIgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXItY29kZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXIgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3Zhci1yZXRpcmVkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXItcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3Zhci1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3Zhci1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0LWNvZGVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQtY29kZXMgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQtY29kZXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdCArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdC1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdC1yZXRpcmVkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQtcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0LXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQtcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb3VudHJ5ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvdW50cnkgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvdW50cnkgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY3VycmVuY3kgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY3VycmVuY3kgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWN1cnJlbmN5ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWxhbmd1YWdlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWxhbmd1YWdlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1sYW5ndWFnZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dC1ndXRzbG9hZGVyICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dC1ndXRzICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0ICs9ICIke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQgKz0gIiR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzLWRldGVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQgKz0gIiR7UE59LW1vZHVsZS1pbnRlZ2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dC1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dC1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLXNjcmlwdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1zY3JpcHQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLXNjcmlwdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0ICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdC10cmFjZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQtdHJhY2UgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQtdHJhY2UgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0LXRyYWNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQtdHJhY2UgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LWNhbGNlbXUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtY2FsY2VtdSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtY2FsYyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtY2FsYyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LWNhbGMgKz0gIiR7UE59LW1vZHVsZS1pbnRlZ2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LWNhbGMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtZmFzdGNhbGMgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1jYWxjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LWZhc3RjYWxjICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LWZhc3RjYWxjICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1mYXN0Y2FsYyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LWZhc3RjYWxjICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LXRyYWNlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtdHJhY2UgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC10cmFjZSArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LXRyYWNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LXRyYWNlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1jb21wbGV4ICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtY29tcGxleCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtY29tcGxleCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtY29tcGxleCArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtY29tcGxleCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWNvbXBsZXggKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLXRyaWcgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLXRyaWcgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWNvbXBsZXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC10cmlnICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1lbW9pemUtYW55ZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1lbW9pemUtZXhwaXJlZmlsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZS1leHBpcmUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1lbW9pemUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1lbW9pemUgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1lbW9pemUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZS1zZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zZGJtLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZS1zdG9yYWJsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZS1zdG9yYWJsZSArPSAiJHtQTn0tbW9kdWxlLXN0b3JhYmxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1ldGEtbm90YXRpb24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWV0YS1ub3RhdGlvbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1pbWUtYmFzZTY0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWltZS1iYXNlNjQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWltZS1iYXNlNjQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1pbWUtYmFzZTY0ICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWltZS1xdW90ZWRwcmludCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1pbWUtcXVvdGVkcHJpbnQgKz0gIiR7UE59LW1vZHVsZS1taW1lLWJhc2U2NCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1taW1lLXF1b3RlZHByaW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1pbWUtcXVvdGVkcHJpbnQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1ybyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tcm8gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tcm8gKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtY21kICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtY21kICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWNtZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1jbWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWNtZCArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtY21kICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWNvbmZpZyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1jb25maWcgKz0gIiR7UE59LW1vZHVsZS1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWNvbmZpZyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtY29uZmlnICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWRvbWFpbiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWRvbWFpbiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1kb21haW4gKz0gIiR7UE59LW1vZHVsZS1uZXQtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1kb21haW4gKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZG9tYWluICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1kb21haW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWRvbWFpbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtYSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1hICs9ICIke1BOfS1tb2R1bGUtbmV0LWZ0cC1kYXRhY29ubiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWEgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1hICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1kYXRhY29ubiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1kYXRhY29ubiArPSAiJHtQTn0tbW9kdWxlLWVycm5vIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtZGF0YWNvbm4gKz0gIiR7UE59LW1vZHVsZS1uZXQtY21kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtZGF0YWNvbm4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1kYXRhY29ubiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtZSArPSAiJHtQTn0tbW9kdWxlLW5ldC1mdHAtaSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1lICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1pICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWkgKz0gIiR7UE59LW1vZHVsZS1uZXQtZnRwLWRhdGFjb25uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtaSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWkgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWwgKz0gIiR7UE59LW1vZHVsZS1uZXQtZnRwLWkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1sICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLWlvLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS1uZXQtY21kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS1uZXQtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS1uZXQtZnRwLWEiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLW5ldC1uZXRyYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLXRpbWUtbG9jYWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ob3N0ZW50ICs9ICIke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ob3N0ZW50ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWhvc3RlbnQgKz0gIiR7UE59LW1vZHVsZS1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWhvc3RlbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWhvc3RlbnQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1uZXRlbnQgKz0gIiR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5ldGVudCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1uZXRlbnQgKz0gIiR7UE59LW1vZHVsZS1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5ldGVudCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbmV0ZW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbmV0cmMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1uZXRyYyArPSAiJHtQTn0tbW9kdWxlLWZpbGVoYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5ldHJjICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1uZXRyYyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ubnRwICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbm50cCArPSAiJHtQTn0tbW9kdWxlLWlvLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbm50cCArPSAiJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbm50cCArPSAiJHtQTn0tbW9kdWxlLW5ldC1jbWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5udHAgKz0gIiR7UE59LW1vZHVsZS1uZXQtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ubnRwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ubnRwICs9ICIke1BOfS1tb2R1bGUtdGltZS1sb2NhbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbm50cCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1waW5nICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcGluZyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1waW5nICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBpbmcgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcGluZyArPSAiJHtQTn0tbW9kdWxlLWZpbGVoYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBpbmcgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcGluZyArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcGluZyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcGluZyArPSAiJHtQTn0tbW9kdWxlLXRpbWUtaGlyZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBpbmcgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wb3AzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcG9wMyArPSAiJHtQTn0tbW9kdWxlLWlvLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcG9wMyArPSAiJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcG9wMyArPSAiJHtQTn0tbW9kdWxlLW1pbWUtYmFzZTY0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wb3AzICs9ICIke1BOfS1tb2R1bGUtbmV0LWNtZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcG9wMyArPSAiJHtQTn0tbW9kdWxlLW5ldC1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBvcDMgKz0gIiR7UE59LW1vZHVsZS1uZXQtbmV0cmMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBvcDMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBvcDMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcHJvdG9lbnQgKz0gIiR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXByb3RvZW50ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXByb3RvZW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wcm90b2VudCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXNlcnZlbnQgKz0gIiR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXNlcnZlbnQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc2VydmVudCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc2VydmVudCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXNtdHAgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zbXRwICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zbXRwICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zbXRwICs9ICIke1BOfS1tb2R1bGUtbWltZS1iYXNlNjQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXNtdHAgKz0gIiR7UE59LW1vZHVsZS1uZXQtY21kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zbXRwICs9ICIke1BOfS1tb2R1bGUtbmV0LWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc210cCArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc210cCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc210cCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC10aW1lICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtdGltZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC10aW1lICs9ICIke1BOfS1tb2R1bGUtaW8tc2VsZWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC10aW1lICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC10aW1lICs9ICIke1BOfS1tb2R1bGUtbmV0LWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtdGltZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtdGltZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5leHQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5leHQgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXh0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9kYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS10aWUtaGFzaCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vayArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vayArPSAiJHtQTn0tbW9kdWxlLXRlc3QtbW9yZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vcGNvZGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9wY29kZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9wY29kZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vcGNvZGUgKz0gIiR7UE59LW1vZHVsZS1zdWJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9wY29kZSArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9wZW4gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9wZW4gKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3BlbiArPSAiJHtQTn0tbW9kdWxlLWVuY29kaW5nIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9wZW4gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vcHMgKz0gIiR7UE59LW1vZHVsZS1vcGNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3ZlcmxvYWRpbmcgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZC1udW1iZXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW92ZXJsb2FkaW5nICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3ZlcmxvYWQgKz0gIiR7UE59LW1vZHVsZS1tcm8iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3ZlcmxvYWQgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vdmVybG9hZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBhcmFtcy1jaGVjayArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGFyYW1zLWNoZWNrICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGFyYW1zLWNoZWNrICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0LXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wYXJhbXMtY2hlY2sgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGFyYW1zLWNoZWNrICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wYXJlbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGFyZW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wZXJsZmFxICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBlcmxmYXEgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wZXJsaW8tZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGVybGlvLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGVybGlvLW1tYXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGVybGlvLW1tYXAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wZXJsaW8tbW1hcCArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBlcmxpby1zY2FsYXIgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wZXJsaW8tdmlhICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGVybGlvLXZpYS1xdW90ZWRwcmludCArPSAiJHtQTn0tbW9kdWxlLW1pbWUtcXVvdGVkcHJpbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGVybGlvLXZpYS1xdW90ZWRwcmludCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWNoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWNoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS1wb2QtcGFyc2V1dGlscyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWVzY2FwZXMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZXNjYXBlcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZXNjYXBlcyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWVzY2FwZXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZmluZCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWZpbmQgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWZpbmQgKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWZpbmQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZmluZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZmluZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZmluZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZmluZCArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZmluZCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWZ1bmN0aW9ucyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1mdW5jdGlvbnMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWlucHV0b2JqZWN0cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtaW5wdXRvYmplY3RzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtbWFuICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtbWFuICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1tYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1tYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLW1hbiArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLW1hbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtbWFuICs9ICIke1BOfS1tb2R1bGUtc3VicyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtbWFuICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGFyc2VsaW5rICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBhcnNlbGluayArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGFyc2VsaW5rICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXBvZC1pbnB1dG9iamVjdHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXV0aWxzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGFyc2V1dGlscyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGFyc2V1dGlscyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtYmFzZXRvICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy1iYXNldG8gKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtYmFzZXRvICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWZ1bmN0aW9ucyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy1iYXNldG8gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtYmFzZXRvICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy1iYXNldG8gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy1nZXRvcHRzb28gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtZ2V0b3B0c29vICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jICs9ICIke1BOfS1tb2R1bGUtZmlsZS10ZW1wIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jICs9ICIke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtZ2V0b3B0c29vIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jICs9ICIke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvYW5zaSArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b2Fuc2kgKz0gIiR7UE59LW1vZHVsZS1wb2QtdGV4dC1jb2xvciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b2Fuc2kgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9hbnNpICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b2Fuc2kgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b2NoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS1wb2QtY2hlY2tlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b2NoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b2NoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1mdW5jdGlvbnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9tYW4gKz0gIiR7UE59LW1vZHVsZS1pby1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9tYW4gKz0gIiR7UE59LW1vZHVsZS1pby1zZWxlY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9tYW4gKz0gIiR7UE59LW1vZHVsZS1pcGMtb3BlbjMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9tYW4gKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9tYW4gKz0gIiR7UE59LW1vZHVsZS1wb2QtbWFuIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbWFuICs9ICIke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9wb2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9tYW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9tYW4gKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9tYW4gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbWFuICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9ucm9mZiArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b25yb2ZmICs9ICIke1BOfS1tb2R1bGUtcG9kLW1hbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b25yb2ZmICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbnJvZmYgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbnJvZmYgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3BvZCArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3BvZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3BvZCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9wb2QgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3J0ZiArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3J0ZiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3J0ZiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9ydGYgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3Rlcm0gKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG90ZXJtICs9ICIke1BOfS1tb2R1bGUtcG9kLXRleHQtdGVybWNhcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3Rlcm0gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG90ZXJtICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3Rlcm0gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3RleHQgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG90ZXh0ICs9ICIke1BOfS1tb2R1bGUtcG9kLXRleHQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG90ZXh0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvdGV4dCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG90ZXh0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG94bWwgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG94bWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG94bWwgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRveG1sICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBsYWludGV4dCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBsYWludGV4dCArPSAiJHtQTn0tbW9kdWxlLXBvZC1zZWxlY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBsYWludGV4dCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGxhaW50ZXh0ICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wbGFpbnRleHQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zZWxlY3QgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zZWxlY3QgKz0gIiR7UE59LW1vZHVsZS1wb2QtcGFyc2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zZWxlY3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNlbGVjdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1ibGFja2JveCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1ibGFja2JveCArPSAiJHtQTn0tbW9kdWxlLWludGVnZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1ibGFja2JveCArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1ibGFja2JveCArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdHJhbnNjb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtYmxhY2tib3ggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1ibGFja2JveCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWNoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtbWV0aG9keSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWNoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtdGV4dC13cmFwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1kZWJ1ZyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1kZWJ1ZyArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1kZWJ1ZyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWRlYnVnICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWR1bXBhc3RleHQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtZHVtcGFzdGV4dCArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1kdW1wYXN0ZXh0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtZHVtcGFzeG1sICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWR1bXBhc3htbCArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1kdW1wYXN4bWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1kdW1wYXN4bWwgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXdyYXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1saW5rc2VjdGlvbiArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtbGlua3NlY3Rpb24gKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWJsYWNrYm94IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtbGlua3NlY3Rpb24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1saW5rc2VjdGlvbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1tZXRob2R5ICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLW1ldGhvZHkgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1tZXRob2R5ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtaW50ZWdlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtcG9kLWVzY2FwZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtYmxhY2tib3giCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtbGlua3NlY3Rpb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGllZG91dGZoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXByb2dyZXNzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcmVuZHRva2VuICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VydG9rZW4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VyZW5kdG9rZW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VyZW5kdG9rZW4gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VyICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJlbmR0b2tlbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJzdGFydHRva2VuIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcnRleHR0b2tlbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2Vyc3RhcnR0b2tlbiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2Vyc3RhcnR0b2tlbiArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcnRva2VuIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcnN0YXJ0dG9rZW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2Vyc3RhcnR0b2tlbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VydGV4dHRva2VuICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VydG9rZW4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VydGV4dHRva2VuICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcnRleHR0b2tlbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VydG9rZW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1ydGYgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcnRmICs9ICIke1BOfS1tb2R1bGUtaW50ZWdlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXJ0ZiArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXJ0ZiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXJ0ZiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1zZWFyY2ggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtc2VhcmNoICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtc2VhcmNoICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtc2VhcmNoICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXNlYXJjaCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXNlYXJjaCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXNlYXJjaCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1zaW1wbGV0cmVlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXNpbXBsZXRyZWUgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtc2ltcGxldHJlZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXNpbXBsZXRyZWUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGV4dGNvbnRlbnQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGV4dGNvbnRlbnQgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGV4dGNvbnRlbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10ZXh0Y29udGVudCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10ZXh0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRleHQgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGV4dCArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtbWV0aG9keSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRleHQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10ZXh0ICs9ICIke1BOfS1tb2R1bGUtdGV4dC13cmFwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGV4dCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10aWVkb3V0ZmggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGllZG91dGZoICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGllZG91dGZoICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGllZG91dGZoICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRyYW5zY29kZWR1bWIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10cmFuc2NvZGVkdW1iICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRyYW5zY29kZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10cmFuc2NvZGVzbWFydCArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRyYW5zY29kZXNtYXJ0ICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRyYW5zY29kZXNtYXJ0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdHJhbnNjb2Rlc21hcnQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUteG1sb3V0c3RyZWFtICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXhtbG91dHN0cmVhbSArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS14bWxvdXRzdHJlYW0gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS14bWxvdXRzdHJlYW0gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0LWNvbG9yICs9ICIke1BOfS1tb2R1bGUtcG9kLXRleHQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtY29sb3IgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtY29sb3IgKz0gIiR7UE59LW1vZHVsZS10ZXJtLWFuc2ljb2xvciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC1jb2xvciArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtb3ZlcnN0cmlrZSArPSAiJHtQTn0tbW9kdWxlLXBvZC10ZXh0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0LW92ZXJzdHJpa2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtb3ZlcnN0cmlrZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0ICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC10ZXJtY2FwICs9ICIke1BOfS1tb2R1bGUtcG9kLXRleHQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtdGVybWNhcCArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0LXRlcm1jYXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtdGVybWNhcCArPSAiJHtQTn0tbW9kdWxlLXRlcm0tY2FwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0LXRlcm1jYXAgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC11c2FnZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXVzYWdlICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC11c2FnZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC11c2FnZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdXNhZ2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXVzYWdlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb3NpeCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvc2l4ICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9zaXggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9zaXggKz0gIiR7UE59LW1vZHVsZS10aWUtaGFzaCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb3NpeCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvc2l4ICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcmUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXJlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcmUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcmUgKz0gIiR7UE59LW1vZHVsZS10ZXJtLWNhcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1yZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXJlICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2FmZSArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2FmZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2FmZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAtaGVhdnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2FmZSArPSAiJHtQTn0tbW9kdWxlLW9wY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zYWZlICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2FmZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zYWZlICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCArPSAiJHtQTn0tbW9kdWxlLWxpc3QtdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2RibS1maWxlICs9ICIke1BOfS1tb2R1bGUtdGllLWhhc2giCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2RibS1maWxlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2RibS1maWxlICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2VhcmNoLWRpY3QgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZWFyY2gtZGljdCArPSAiJHtQTn0tbW9kdWxlLWZlYXR1cmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2VhcmNoLWRpY3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2VsZWN0c2F2ZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNlbGVjdHNhdmVyICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNlbGZsb2FkZXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZWxmbG9hZGVyICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNlbGZsb2FkZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2VsZmxvYWRlciArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2lndHJhcCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2lndHJhcCArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncy1yZWdpc3RlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zb3J0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zb3J0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN0b3JhYmxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zdG9yYWJsZSArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zdG9yYWJsZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN0b3JhYmxlICs9ICIke1BOfS1tb2R1bGUtaW8tZmlsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zdG9yYWJsZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3RvcmFibGUgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zdWItdXRpbCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN1Yi11dGlsICs9ICIke1BOfS1tb2R1bGUtbGlzdC11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN1Yi11dGlsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN1Yi11dGlsICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3ltYm9sICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLWhvc3RuYW1lICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtaG9zdG5hbWUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtaG9zdG5hbWUgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtaG9zdG5hbWUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLWhvc3RuYW1lICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLXN5c2xvZyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLXN5c2xvZyArPSAiJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLXN5c2xvZyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1zeXNsb2cgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLXN5c2xvZyArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1zeXNsb2cgKz0gIiR7UE59LW1vZHVsZS1zeXMtaG9zdG5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLXN5c2xvZyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLXN5c2xvZyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1zeXNsb2cgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncy1yZWdpc3RlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1iYXNlICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWJhc2UgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbG9yIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29sb3IgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29sb3IgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbG9yICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29sb3IgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUtcGFyYWxsZWxzZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUtcGFyYWxsZWxzZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUtcGFyYWxsZWxzZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlLXBhcmFsbGVsc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUtcGFyYWxsZWxzZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZS1wYXJhbGxlbHNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlLXBhcmFsbGVsc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZS1zZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUtc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUtc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1maWxlICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1maWxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItZmlsZS1zZXNzaW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItZmlsZS1zZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWZpbGUtc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWZpbGUtc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1zZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzLWVudiArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzLWVudiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtaGFybmVzcy1lbnYgKz0gIiR7UE59LW1vZHVsZS10YXAtb2JqZWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzLWVudiArPSAiJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtaGFybmVzcy1lbnYgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLW9iamVjdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLW9iamVjdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtb2JqZWN0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1hZ2dyZWdhdG9yICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWFnZ3JlZ2F0b3IgKz0gIiR7UE59LW1vZHVsZS1iZW5jaG1hcmsiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1hZ2dyZWdhdG9yICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWFnZ3JlZ2F0b3IgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1hZ2dyZWdhdG9yICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1ncmFtbWFyICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWdyYW1tYXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItZ3JhbW1hciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWdyYW1tYXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1ncmFtbWFyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci15YW1saXNoLXJlYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWdyYW1tYXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLWFycmF5ICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLWFycmF5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3ItYXJyYXkgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvcmZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3JmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvcmZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3JmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3JmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvciArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1wcm9jZXNzICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXByb2Nlc3MgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1wcm9jZXNzICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3ItcHJvY2VzcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXByb2Nlc3MgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXN0cmVhbSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1zdHJlYW0gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1zdHJlYW0gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLW11bHRpcGxleGVyICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLW11bHRpcGxleGVyICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1tdWx0aXBsZXhlciArPSAiJHtQTn0tbW9kdWxlLWlvLXNlbGVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLW11bHRpcGxleGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItbXVsdGlwbGV4ZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWdyYW1tYXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3IiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3JmYWN0b3J5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHRmYWN0b3J5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWV4ZWN1dGFibGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1maWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItaGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcGVybCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXJhd3RhcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtYmFpbG91dCArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtYmFpbG91dCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1iYWlsb3V0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtY29tbWVudCArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtY29tbWVudCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1jb21tZW50ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHRmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1iYWlsb3V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LWNvbW1lbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHRmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtcGxhbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1wcmFnbWEiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHRmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtdGVzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC11bmtub3duIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXZlcnNpb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHRmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQteWFtbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdCArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1wbGFuICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1wbGFuICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXBsYW4gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1wcmFnbWEgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXByYWdtYSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1wcmFnbWEgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC10ZXN0ICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC10ZXN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXRlc3QgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC11bmtub3duICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC11bmtub3duICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXVua25vd24gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC12ZXJzaW9uICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC12ZXJzaW9uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXZlcnNpb24gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC15YW1sICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC15YW1sICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXlhbWwgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlci1qb2IgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyLWpvYiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlci1qb2IgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zY2hlZHVsZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zY2hlZHVsZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlci1qb2IiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zY2hlZHVsZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlci1zcGlubmVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zY2hlZHVsZXItc3Bpbm5lciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zY2hlZHVsZXItc3Bpbm5lciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlci1zcGlubmVyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWV4ZWN1dGFibGUgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1leGVjdXRhYmxlICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWV4ZWN1dGFibGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWV4ZWN1dGFibGUgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yZmFjdG9yeSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZXhlY3V0YWJsZSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3ItcHJvY2VzcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZXhlY3V0YWJsZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1maWxlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1maWxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1maWxlICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvcmZhY3RvcnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXN0cmVhbSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yZmFjdG9yeSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1zdHJlYW0iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlciArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3IiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXBlcmwgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1wZXJsICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1wZXJsICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXBlcmwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXBlcmwgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yZmFjdG9yeSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcGVybCArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3ItcHJvY2VzcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcGVybCArPSAiJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcGVybCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1yYXd0YXAgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1yYXd0YXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXJhd3RhcCArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3ItYXJyYXkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXJhd3RhcCArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3JmYWN0b3J5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1yYXd0YXAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2UgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2UgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXlhbWxpc2gtcmVhZGVyICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXlhbWxpc2gtcmVhZGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIteWFtbGlzaC1yZWFkZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXlhbWxpc2gtd3JpdGVyICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXlhbWxpc2gtd3JpdGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIteWFtbGlzaC13cml0ZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXJtLWFuc2ljb2xvciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVybS1hbnNpY29sb3IgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXJtLWFuc2ljb2xvciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXJtLWFuc2ljb2xvciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlcm0tY2FwICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXJtLWNhcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXJtLWNhcCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVybS1jb21wbGV0ZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlcm0tY29tcGxldGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVybS1yZWFkbGluZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXJtLXJlYWRsaW5lICs9ICIke1BOfS1tb2R1bGUtdGVybS1jYXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLW1vZHVsZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlci1tb2R1bGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLW1vZHVsZSArPSAiJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXIgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyICs9ICIke1BOfS1tb2R1bGUtcGVybGlvIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXIgKz0gIiR7UE59LW1vZHVsZS10aHJlYWRzLXNoYXJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXItdGVzdGVyLWNvbG9yICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlci10ZXN0ZXItY29sb3IgKz0gIiR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXItdGVzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlci10ZXN0ZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlci10ZXN0ZXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXItdGVzdGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlci10ZXN0ZXIgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1hZ2dyZWdhdG9yIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1wZXJsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LW1vcmUgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LW1vcmUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1tb3JlICs9ICIke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLW1vZHVsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LW1vcmUgKz0gIiR7UE59LW1vZHVsZS10ZXN0LW1vcmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1tb3JlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QgKz0gIiR7UE59LW1vZHVsZS1maWxlLXRlbXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlci1tb2R1bGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItY2FwdHVyZSArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3Rlci1jYXB0dXJlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWNhcHR1cmUgKz0gIiR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItY2FwdHVyZSArPSAiJHtQTn0tbW9kdWxlLXRocmVhZHMtc2hhcmVkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWNhcHR1cmUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWNhcHR1cmVydW5uZXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3Rlci1jYXB0dXJlcnVubmVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWNhcHR1cmVydW5uZXIgKz0gIiR7UE59LW1vZHVsZS10ZXN0LXRlc3Rlci1jYXB0dXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWRlbGVnYXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWRlbGVnYXRlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3Rlci1kZWxlZ2F0ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXIgKz0gIiR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXIgKz0gIiR7UE59LW1vZHVsZS10ZXN0LXRlc3Rlci1jYXB0dXJlcnVubmVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyICs9ICIke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItZGVsZWdhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtYWJicmV2ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC1iYWxhbmNlZCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC1iYWxhbmNlZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtYmFsYW5jZWQgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LWJhbGFuY2VkICs9ICIke1BOfS1tb2R1bGUtc2VsZmxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LWJhbGFuY2VkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtYmFsYW5jZWQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtdGFicyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtdGFicyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LXRhYnMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtd3JhcCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtd3JhcCArPSAiJHtQTn0tbW9kdWxlLXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtd3JhcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LXdyYXAgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXRhYnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC13cmFwICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LXdyYXAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncy1yZWdpc3RlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZCArPSAiJHtQTn0tbW9kdWxlLXRocmVhZHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkICs9ICIke1BOfS1tb2R1bGUtdGhyZWFkcy1zaGFyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkLXF1ZXVlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtcXVldWUgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtcXVldWUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkLXF1ZXVlICs9ICIke1BOfS1tb2R1bGUtdGhyZWFkcy1zaGFyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkLXF1ZXVlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkLXNlbWFwaG9yZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkLXNlbWFwaG9yZSArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZC1zZW1hcGhvcmUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkLXNlbWFwaG9yZSArPSAiJHtQTn0tbW9kdWxlLXRocmVhZHMtc2hhcmVkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZC1zZW1hcGhvcmUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWRzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWRzICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZHMgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWRzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZHMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWRzICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkcy1zaGFyZWQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZHMtc2hhcmVkICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkcy1zaGFyZWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkcy1zaGFyZWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWRzLXNoYXJlZCArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1hcnJheSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWFycmF5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1hcnJheSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1maWxlICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtZmlsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtZmlsZSArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtdGllLXN0ZGhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWhhc2gtbmFtZWRjYXB0dXJlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1oYXNoLW5hbWVkY2FwdHVyZSArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1oYXNoICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtaGFzaCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1tZW1vaXplICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1tZW1vaXplICs9ICIke1BOfS1tb2R1bGUtdGllLWhhc2giCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXJlZmhhc2ggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1yZWZoYXNoICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1yZWZoYXNoICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXJlZmhhc2ggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXJlZmhhc2ggKz0gIiR7UE59LW1vZHVsZS10aWUtaGFzaCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtcmVmaGFzaCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXNjYWxhciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXNjYWxhciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1zdGRoYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXN0ZGhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXRpZS1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXN0ZGhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXN1YnN0cmhhc2ggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1zdWJzdHJoYXNoICs9ICIke1BOfS1tb2R1bGUtaW50ZWdlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWdtdGltZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtZ210aW1lICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtZ210aW1lICs9ICIke1BOfS1tb2R1bGUtdGltZS10bSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWdtdGltZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1oaXJlcyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1oaXJlcyArPSAiJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1oaXJlcyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtaGlyZXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1sb2NhbCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1sb2NhbCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWxvY2FsICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1sb2NhbCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtbG9jYWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1sb2NhbCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1sb2NhbHRpbWUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWxvY2FsdGltZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWxvY2FsdGltZSArPSAiJHtQTn0tbW9kdWxlLXRpbWUtdG0iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1sb2NhbHRpbWUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtcGllY2UgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtcGllY2UgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXBpZWNlICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXBpZWNlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1waWVjZSArPSAiJHtQTn0tbW9kdWxlLWludGVnZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1waWVjZSArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtcGllY2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1waWVjZSArPSAiJHtQTn0tbW9kdWxlLXRpbWUtbG9jYWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1waWVjZSArPSAiJHtQTn0tbW9kdWxlLXRpbWUtc2Vjb25kcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXNlY29uZHMgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXNlY29uZHMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXNlY29uZHMgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1zZWNvbmRzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtc2Vjb25kcyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS10bSArPSAiJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXRtICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstYmlnNSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLWJpZzUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLWdiMjMxMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLWdiMjMxMiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstamlzeDAyMDggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1qaXN4MDIwOCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamsta29yZWFuICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamsta29yZWFuICs9ICIke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamsta29yZWFuICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1waW55aW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1waW55aW4gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLXN0cm9rZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLXN0cm9rZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstemh1eWluICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstemh1eWluICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWxvY2FsZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWxvY2FsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWxvY2FsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtbG9jYWxlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1ub3JtYWxpemUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtbm9ybWFsaXplICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1ub3JtYWxpemUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLW5vcm1hbGl6ZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLW5vcm1hbGl6ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLW5vcm1hbGl6ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLXVjZCArPSAiJHtQTn0tbW9kdWxlLWNoYXJuYW1lcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLXVjZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtZmVhdHVyZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLXVjZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLXVjZCArPSAiJHtQTn0tbW9kdWxlLWlmIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtaW50ZWdlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLXVjZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLXVjZCArPSAiJHtQTn0tbW9kdWxlLXVuaWNvZGUtbm9ybWFsaXplIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtdW5pY29yZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLXVjZCArPSAiJHtQTn0tbW9kdWxlLXV0ZjgtaGVhdnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS11Y2QgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb3JlICs9ICIke1BOfS1tb2R1bGUtaW50ZWdlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bml2ZXJzYWwgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVzZXItZ3JlbnQgKz0gIiR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXNlci1ncmVudCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVzZXItZ3JlbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXNlci1ncmVudCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXNlci1wd2VudCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXNlci1wd2VudCArPSAiJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11c2VyLXB3ZW50ICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVzZXItcHdlbnQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11c2VyLXB3ZW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVzZXItcHdlbnQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVzZXItcHdlbnQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11dGY4ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11dGY4ICs9ICIke1BOfS1tb2R1bGUtdXRmOC1oZWF2eSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24gKz0gIiR7UE59LW1vZHVsZS12ZXJzaW9uLXJlZ2V4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tcmVnZXggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi1yZWdleCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtaWYiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtdW5pdmVyc2FsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLXZlcnNpb24tcmVnZXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUteHNsb2FkZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXhzbG9hZGVyICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkOTcxNmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwuaW5jCkBAIC0wLDAgKzEsOCBAQAorU1VNTUFSWSA9ICJQZXJsIHNjcmlwdGluZyBsYW5ndWFnZSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cucGVybC5vcmcvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9Db3B5aW5nO21kNT01YjEyMmEzNmQwZjZkYzU1Mjc5YTBlYmM2OWYzYzYwYiBcCisJCSAgICBmaWxlOi8vQXJ0aXN0aWM7bWQ1PTJlNmZkMjQ3NTMzNWFmODkyNDk0ZmUxZjczMjdiYWYzIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuY3Bhbi5vcmcvc3JjLzUuMC8ke0JQfS50YXIueHoiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvQ29uZmlndXJlLW11bHRpbGliLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL0NvbmZpZ3VyZS1tdWx0aWxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjI1YjBiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL0NvbmZpZ3VyZS1tdWx0aWxpYi5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6UGVuZGluZworCitJbmRleDogcGVybC01LjEyLjMvQ29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjEyLjMub3JpZy9Db25maWd1cmUKKysrKyBwZXJsLTUuMTIuMy9Db25maWd1cmUKK0BAIC0xMzE2LDggKzEzMTYsOSBAQCBsb2NsaWJwdGg9Ii91c3IvbG9jYWwvbGliIC9vcHQvbG9jYWwvbGliCisgbG9jbGlicHRoPSIkbG9jbGlicHRoIC9vcHQvZ251L2xpYiAvdXNyL0dOVS9saWIgL29wdC9HTlUvbGliIgorIAorIDogZ2VuZXJhbCBsb29raW5nIHBhdGggZm9yIGxvY2F0aW5nIGxpYnJhcmllcworLWdsaWJwdGg9Ii9saWIgL3Vzci9saWIgJHhsaWJwdGgiCisrZ2xpYnB0aD0iL2xpYiAvdXNyL2xpYiAvbGliNjQgL3Vzci9saWI2NCAkeGxpYnB0aCIKKyBnbGlicHRoPSIkZ2xpYnB0aCAvdXNyL2Njcy9saWIgL3Vzci91Y2JsaWIgL3Vzci9sb2NhbC9saWIiCisrdGVzdCAtZiAvdXNyL2xpYi8qLWxpbnV4LWdudS9saWJjLnNvICYmIGdsaWJwdGg9Ii91c3IvbGliLyotbGludXgtZ251ICRnbGlicHRoIgorIHRlc3QgLWYgL3Vzci9zaGxpYi9saWJjLnNvICYmIGdsaWJwdGg9Ii91c3Ivc2hsaWIgJGdsaWJwdGgiCisgdGVzdCAtZiAvc2hsaWIvbGliYy5zbyAgICAgJiYgZ2xpYnB0aD0iL3NobGliICRnbGlicHRoIgorIHRlc3QgLWQgL3Vzci9saWI2NCAgICAgICAgICYmIGdsaWJwdGg9IiRnbGlicHRoIC9saWI2NCAvdXNyL2xpYjY0IC91c3IvbG9jYWwvbGliNjQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvTU1fVW5peC5wbS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9NTV9Vbml4LnBtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViOTJjY2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvTU1fVW5peC5wbS5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6UGVuZGluZworCitUaGUgcGVybC1uYXRpdmUgc2hvdWxkIGJlIHJlbG9jYXRhYmxlIHdoaWxlIHJlLXVzZSBzc3RhdGUtY2FjaGUgZnJvbQorYW5vdGhlciBidWlsZCwgZXNwZWNpYWxseSB0aGUgb3JpZ2luYWwgYnVpbGQgd2FzIHJlbmFtZWQvcmVtb3ZlZC4KKworVG8gZ2V0IHRoZSBNYWtlTWFrZXIucG0gd29ya3MgaW4gdGhpcyBjYXNlLCB3ZSBuZWVkIHBlcmwgd3JhcHBlciBoZXJlCitpbnN0ZWFkIG9mIHJlYWwgcGVybCBiaW5hcnkuCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBlcmwtNS4xMi4zL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtLm9yaWcJMjAxMS0wOC0xMiAxNjowNzozMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBwZXJsLTUuMTIuMy9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQkyMDExLTA4LTEyIDE2OjA4OjU2LjAwMDAwMDAwMCArMDgwMAorQEAgLTEwMTksNiArMTAxOSw5IEBACisgICAgIH0KKyAKKyAgICAgZm9yZWFjaCBteSAkbmFtZSAoQCRuYW1lcyl7CisrICAgICAgICAjIEdldHRpbmcgTWFrZU1ha2VyLnBtIHVzZSBwZXJsIHdyYXBwZXIgaW5zdGVhZCBvZiAncGVybC5yZWFsJyBkaXJlY3RseQorKyAgICAgICAgJG5hbWUgPX4gcy9wZXJsXC5yZWFsL3BlcmwvIGlmICgkbmFtZSA9fiAvcGVybFwucmVhbC8pOworKworICAgICAgICAgZm9yZWFjaCBteSAkZGlyIChAJGRpcnMpeworICAgICAgICAgICAgIG5leHQgdW5sZXNzIGRlZmluZWQgJGRpcjsgIyAkc2VsZi0+e1BFUkxfU1JDfSBtYXkgYmUgdW5kZWZpbmVkCisgICAgICAgICAgICAgbXkgKCRhYnMsICR2YWwpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL01ha2VmaWxlLlNILnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL01ha2VmaWxlLlNILnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZTIzMzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvTWFrZWZpbGUuU0gucGF0Y2gKQEAgLTAsMCArMSwzNzQgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuU0ggfCAgMTQ1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDY3IGluc2VydGlvbnMoKyksIDc4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuU0ggYi9NYWtlZmlsZS5TSAoraW5kZXggMDM0ZDgxMi4uNjdlMDhmZCAxMDA3NTUKKy0tLSBhL01ha2VmaWxlLlNICisrKysgYi9NYWtlZmlsZS5TSAorQEAgLTM5LDEwICszOSwxMCBAQCBjYXNlICIkdXNlc2hycGxpYiIgaW4KKyB0cnVlKQorIAkjIFByZWZpeCBhbGwgcnVucyBvZiAnbWluaXBlcmwnIGFuZCAncGVybCcgd2l0aAorIAkjICRsZGxpYnB0aCBzbyB0aGF0IC4vcGVybCBmaW5kcyAqdGhpcyogc2hhcmVkIGxpYnBlcmwuCistCWNhc2UgIiRMRF9MSUJSQVJZX1BBVEgiIGluCistCScnKSAgbGRsaWJwdGg9IkxEX0xJQlJBUllfUEFUSD1gIHF1b3RlICIkcHdkIiBgIiA7OworLQkqKSAgIGxkbGlicHRoPSJMRF9MSUJSQVJZX1BBVEg9YCBxdW90ZSAiJHB3ZCIgYDpgIHF1b3RlICIkTERfTElCUkFSWV9QQVRIIiBgIiA7OworLQllc2FjCisrCSNjYXNlICIkTERfTElCUkFSWV9QQVRIIiBpbgorKwkjJycpICBsZGxpYnB0aD0iTERfTElCUkFSWV9QQVRIPWAgcXVvdGUgIiRwd2QiIGAiIDs7CisrCSMqKSAgIGxkbGlicHRoPSJMRF9MSUJSQVJZX1BBVEg9YCBxdW90ZSAiJHB3ZCIgYDpgIHF1b3RlICIkTERfTElCUkFSWV9QQVRIIiBgIiA7OworKwkjZXNhYworIAorIAlwbGRsZmxhZ3M9IiRjY2NkbGZsYWdzIgorIAlzdGF0aWNfbGRmbGFncz0nJworQEAgLTEyMiwxMCArMTIyLDExIEBAIHRydWUpCisgCSAgICAqKQorIAkJZXZhbCAibGRsaWJwdGh2YWw9XCJcJCRsZGxpYnB0aG5hbWVcIiIKKyAKKy0JCWNhc2UgIiRsZGxpYnB0aHZhbCIgaW4KKy0JCScnKSAgbGRsaWJwdGg9IiRsZGxpYnB0aG5hbWU9YCBxdW90ZSAiJHB3ZCIgYCIgOzsKKy0JCSopICAgbGRsaWJwdGg9IiRsZGxpYnB0aG5hbWU9YCBxdW90ZSAiJHB3ZCIgYDpgIHF1b3RlICIkbGRsaWJwdGh2YWwiIGAiIDs7CistCQllc2FjCisrIyBXZSBjb21waWxlIGluIHRoZSBsaWJyYXJ5IHBhdGggaW4gT0UgZnJvbSBjcm9zcy1jb21waWxlLCBzbyBsZXRzIG5vdCBkbyB0aGlzCisrIwkJY2FzZSAiJGxkbGlicHRodmFsIiBpbgorKyMJCScnKSAgbGRsaWJwdGg9IiRsZGxpYnB0aG5hbWU9YCBxdW90ZSAiJHB3ZCIgYCIgOzsKKysjCQkqKSAgIGxkbGlicHRoPSIkbGRsaWJwdGhuYW1lPWAgcXVvdGUgIiRwd2QiIGA6YCBxdW90ZSAiJGxkbGlicHRodmFsIiBgIiA7OworKyMJCWVzYWMKKyAKKyAJCTs7CisgCSAgICBlc2FjCitAQCAtMTQxLDE4ICsxNDIsNyBAQCB0cnVlKQorIAkgICAgIyBJTlNUQUxMIGZpbGUsIHVuZGVyICJCdWlsZGluZyBhIHNoYXJlZCBwZXJsIGxpYnJhcnkiLgorIAkgICAgIyBJZiB0aGVyZSBpcyBubyBwcmUtZXhpc3RpbmcgJGxpYnBlcmwsIHdlIGRvbid0IG5lZWQKKyAJICAgICMgdG8gZG8gYW55dGhpbmcgZnVydGhlci4KKy0JICAgIGlmIHRlc3QgLWYgJGFyY2hsaWIvQ09SRS8kbGlicGVybDsgdGhlbgorLQkJcm0gLWYgcHJlbG9hZAorLQkJY2F0IDw8J0VPVCcgPiBwcmVsb2FkCistIyEgL2Jpbi9zaAorLWxpYj0kMQorLXNoaWZ0CistdGVzdCAtciAkbGliICYmIGV4cG9ydCBMRF9QUkVMT0FEPSIkbGliICRMRF9QUkVMT0FEIgorLWV4ZWMgIiRAIgorLUVPVAorLQkJY2htb2QgNzU1IHByZWxvYWQKKy0JCWxkbGlicHRoPSIkbGRsaWJwdGggYHB3ZGAvcHJlbG9hZCBgcHdkYC8kbGlicGVybCIKKy0JICAgIGZpCisrCSAgICBlY2hvIGxpbnV4IGxpYnJhcmllcyBvdmVyd3JpdHRlbiBieSBjcm9zcy1jb21waWxlIHBhdGNoZXMKKyAJICAgIDs7CisgCW9zMzkwKQl0ZXN0IC1mIC9iaW4vZW52ICYmIGxkbGlicHRoPSIvYmluL2VudiAkbGRsaWJwdGgiCisgCQk7OworQEAgLTU2NiwxMyArNTU2LDIzIEBAIHNwbGludGZpbGVzID0gJChjMSkKKyAJQGVjaG8gYCQoQ0NDTURTUkMpYCAtUyAkKi5jCisgCUBgJChDQ0NNRFNSQylgIC1TICQqLmMKKyAKKy1hbGw6ICQoRklSU1RNQUtFRklMRSkgJChNSU5JUEVSTF9FWEUpICQoZ2VuZXJhdGVkX3BvZHMpICQocHJpdmF0ZSkgJCh1bmlkYXRhZmlsZXMpICQocHVibGljKSAkKGR5bmFtaWNfZXh0KSAkKG5vbnhzX2V4dCkgZXh0cmFzLm1ha2UgJChNQU5JRkVTVF9TUlQpCistCUBlY2hvICIgIjsKKy0JQGVjaG8gIglFdmVyeXRoaW5nIGlzIHVwIHRvIGRhdGUuIFR5cGUgJyQoTUFLRSkgdGVzdCcgdG8gcnVuIHRlc3Qgc3VpdGUuIgorKyNhbGw6ICQoRklSU1RNQUtFRklMRSkgJChNSU5JUEVSTF9FWEUpICQoZ2VuZXJhdGVkX3BvZHMpICQocHJpdmF0ZSkgJCh1bmlkYXRhZmlsZXMpICQocHVibGljKSAkKGR5bmFtaWNfZXh0KSAkKG5vbnhzX2V4dCkgZXh0cmFzLm1ha2UgJChNQU5JRkVTVF9TUlQpCisrIwlAZWNobyAiICI7CisrIwlAZWNobyAiCUV2ZXJ5dGhpbmcgaXMgdXAgdG8gZGF0ZS4gVHlwZSAnJChNQUtFKSB0ZXN0JyB0byBydW4gdGVzdCBzdWl0ZS4iCisrCisrYWxsOiAkKEZJUlNUTUFLRUZJTEUpICQoTUlOSVBFUkxfRVhFKSBtaW5pcGVybCAkKHVuaWRhdGFmaWxlcykKKysKKyttb3JlOiAkKGdlbmVyYXRlZF9wb2RzKSAkKHByaXZhdGUpICQocHVibGljKQorKworK21vcmUyOiAkKGR5bmFtaWNfZXh0KQorIAorLSQoTUFOSUZFU1RfU1JUKToJTUFOSUZFU1QgJChQRVJMX0VYRSkKKy0JQCQoUlVOX1BFUkwpIFBvcnRpbmcvbWFuaXNvcnQgLXEgfHwgKGVjaG8gIldBUk5JTkc6IHJlLXNvcnRpbmcgTUFOSUZFU1QiOyBcCistCSAgICAkKFJVTl9QRVJMKSBQb3J0aW5nL21hbmlzb3J0IC1xIC1vIE1BTklGRVNUOyBzaCAtYyB0cnVlKQorK21vcmUzOiAkKG5vbnhzX2V4dCkKKysKKyttb3JlNDogZXh0cmFzLm1ha2UgJChNQU5JRkVTVF9TUlQpCisrCisrJChNQU5JRkVTVF9TUlQpOglNQU5JRkVTVAorKwlAJChNSU5JUEVSTCkgUG9ydGluZy9tYW5pc29ydCAtcSB8fCAoZWNobyAiV0FSTklORzogcmUtc29ydGluZyBNQU5JRkVTVCI7IFwKKysJICAgICQoTUlOSVBFUkwpIFBvcnRpbmcvbWFuaXNvcnQgLXEgLW8gTUFOSUZFU1Q7IHNoIC1jIHRydWUpCisgCUB0b3VjaCAkKE1BTklGRVNUX1NSVCkKKyAKKyAuUEhPTlk6IGFsbCB1dGlsaXRpZXMKK0BAIC01ODEsNyArNTgxLDcgQEAgJChNQU5JRkVTVF9TUlQpOglNQU5JRkVTVCAkKFBFUkxfRVhFKQorICMgYnkgbWFrZV9wYXRjaG51bS5wbC4KKyBnaXRfdmVyc2lvbi5oOiBsaWIvQ29uZmlnX2dpdC5wbAorIAorLWxpYi9Db25maWdfZ2l0LnBsOiAkKE1JTklQRVJMX0VYRSkgbWFrZV9wYXRjaG51bS5wbAorK2xpYi9Db25maWdfZ2l0LnBsOiBtYWtlX3BhdGNobnVtLnBsCisgCSQoTUlOSVBFUkwpIG1ha2VfcGF0Y2hudW0ucGwKKyAKKyAjIG1ha2Ugc3VyZSB0aGF0IHdlIHJlY29tcGlsZSBwZXJsLmMgaWYgdGhlIGdpdCB2ZXJzaW9uIGNoYW5nZXMKK0BAIC01OTQsNyArNTk0LDcgQEAgcGVybCQoT0JKX0VYVCk6IGdpdF92ZXJzaW9uLmgKKyAjIGxvYWRpbmcsIHdlIG5lZWQgdG8gYnVpbGQgcGVybCBmaXJzdC4KKyBjYXNlICIkdXNlZGwkc3RhdGljX2N3ZCIgaW4KKyBkZWZpbmV1bmRlZikKKy0gICAgdXRpbF9kZXBzPSckKE1JTklQRVJMX0VYRSkgJChDT05GSUdQTSkgbGliL2F1dG8vQ3dkL0N3ZCQoRExTVUZGSVgpIEZPUkNFJworKyAgICB1dGlsX2RlcHM9JyQoQ09ORklHUE0pIGxpYi9hdXRvL0N3ZC9Dd2QkKERMU1VGRklYKSBGT1JDRScKKyAgICAgOzsKKyBkZWZpbmVkZWZpbmUpCisgICAgIHV0aWxfZGVwcz0nJChQRVJMX0VYRSkgJChDT05GSUdQTSkgRk9SQ0UnCitAQCAtNjA0LDcgKzYwNCw3IEBAIGRlZmluZWRlZmluZSkKKyBlc2FjCisgCisgJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCFHUk9LIVRISVMhCistdXRpbHMvTWFrZWZpbGU6IFwkKE1JTklQRVJMX0VYRSkgXCQoQ09ORklHUE0pIHV0aWxzL01ha2VmaWxlLlBMCisrdXRpbHMvTWFrZWZpbGU6IFwkKENPTkZJR1BNKSB1dGlscy9NYWtlZmlsZS5QTAorIAlcJChNSU5JUEVSTCkgLUlsaWIgdXRpbHMvTWFrZWZpbGUuUEwKKyAKKyB1dGlsaXRpZXM6CXV0aWxzL01ha2VmaWxlICR1dGlsX2RlcHMKK0BAIC02OTksNyArNjk5LDcgQEAgZXNhYworIAorIAorICRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworLXBlcmxtYWluLmM6ICQoTUlOSVBFUkxfRVhFKSBleHQvRXh0VXRpbHMtTWluaXBlcmwvcG1fdG9fYmxpYgorK3BlcmxtYWluLmM6IGV4dC9FeHRVdGlscy1NaW5pcGVybC9saWIvRXh0VXRpbHMvTWluaXBlcmwucG0KKyAJJChNSU5JUEVSTCkgLUlsaWIgLU1FeHRVdGlsczo6TWluaXBlcmwgLWUgJ3dyaXRlbWFpbihcInBlcmxtYWluLmMiLCBAQVJHViknIER5bmFMb2FkZXIgJChzdGF0aWNfZXh0KQorIAorICMgVGhlIGZpbGUgZXh0LmxpYnMgaXMgYSBsaXN0IG9mIGxpYnJhcmllcyB0aGF0IG11c3QgYmUgbGlua2VkIGluCitAQCAtNzYwLDcgKzc2MCw3IEBAIFBFUkxFWFBPUlQJCT0gcGVybC5leHAKKyAJOzsKKyAJZXNhYworIAkkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKy1wZXJsLmV4cDogJChNSU5JUEVSTEVYUCkgbWFrZWRlZi5wbCAkKENPTkZJR1BNKSAkKFNZTSkgJChTWU1IKQorK3BlcmwuZXhwOiBtYWtlZGVmLnBsICQoQ09ORklHUE0pICQoU1lNKSAkKFNZTUgpCisgCS4vJChNSU5JUEVSTEVYUCkgbWFrZWRlZi5wbCAtLXNvcnQtZm9sZCBQTEFURk9STT1haXggQ0NfRkxBR1M9IiQoT1BUSU1JWkUpIiA+IHBlcmwuZXhwCisgCisgIU5PIVNVQlMhCitAQCAtNzY5LDcgKzc2OSw3IEBAIG9zMikKKyAJJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCchTk8hU1VCUyEnCisgTUlOSVBFUkxFWFAJCT0gbWluaXBlcmwKKyAKKy1wZXJsNS5kZWY6ICQoTUlOSVBFUkxFWFApIG1ha2VkZWYucGwgJChDT05GSUdQTSkgJChTWU0pICQoU1lNSCkgbWluaXBlcmwubWFwCisrcGVybDUuZGVmOiBtYWtlZGVmLnBsICQoQ09ORklHUE0pICQoU1lNKSAkKFNZTUgpIG1pbmlwZXJsLm1hcAorIAkuLyQoTUlOSVBFUkxFWFApIG1ha2VkZWYucGwgUExBVEZPUk09b3MyIC1EUEVSTF9ETEw9JChQRVJMX0RMTCkgQ0NfRkxBR1M9IiQoT1BUSU1JWkUpIiA+IHBlcmw1LmRlZgorIAorICFOTyFTVUJTIQorQEAgLTgyOSw3ICs4MjksNyBAQCAkKExJQlBFUkwpOiAkJiAkKG9iaikgJChEWU5BTE9BREVSKSAkKExJQlBFUkxFWFBPUlQpCisgCXRydWUpCisgCQkkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKyAJcm0gLWYgJEAKKy0JJChMRCkgLW8gJEAgJChTSFJQTERGTEFHUykgJChvYmopICQoRFlOQUxPQURFUikgJChsaWJzKQorKwkkKExEKSAtbyAkQCAkKFNIUlBMREZMQUdTKSAkKG9iaikgJChEWU5BTE9BREVSKSAkKGxpYnMpIC1XbCwtc29uYW1lLGxpYnBlcmwuc28uNQorICFOTyFTVUJTIQorIAkJY2FzZSAiJG9zbmFtZSIgaW4KKyAJCWFpeCkKK0BAIC04NzcsNyArODc3LDkgQEAgJChNSU5JUEVSTF9FWEUpOiBsaWIvYnVpbGRjdXN0b21pemUucGwKKyAJCSRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworIGxpYi9idWlsZGN1c3RvbWl6ZS5wbDogJCYgJChtaW5pX29iaikKKyAJJChDQykgLW8gJChNSU5JUEVSTF9FWEUpICQoQ0xERkxBR1MpICQobWluaV9vYmopICQobGlicykKKy0JJChMRExJQlBUSCkgLi9taW5pcGVybCQoSE9TVF9FWEVfRVhUKSAtdyAtSWxpYiAtSWRpc3QvRXhwb3J0ZXIvbGliIC1NRXhwb3J0ZXIgLWUgJzw/PicgfHwgc2ggLWMgJ2VjaG8gPiYyIEZhaWxlZCB0byBidWlsZCBtaW5pcGVybC4gIFBsZWFzZSBydW4gbWFrZSBtaW5pdGVzdDsgZXhpdCAxJworKwltdiAtZiBtaW5pcGVybCBtaW5pcGVybC10YXJnZXQKKysJbG4gLXMgaG9zdHBlcmwgbWluaXBlcmwKKysJIyQoTERMSUJQVEgpIC4vbWluaXBlcmwkKEhPU1RfRVhFX0VYVCkgLXcgLUlsaWIgLUlkaXN0L0V4cG9ydGVyL2xpYiAtTUV4cG9ydGVyIC1lICc8Pz4nIHx8IHNoIC1jICdlY2hvID4mMiBGYWlsZWQgdG8gYnVpbGQgbWluaXBlcmwuICBQbGVhc2UgcnVuIG1ha2UgbWluaXRlc3Q7IGV4aXQgMScKKyAJJChNSU5JUEVSTCkgLWYgd3JpdGVfYnVpbGRjdXN0b21pemUucGwKKyAhTk8hU1VCUyEKKyAJCTs7CitAQCAtODg1LDcgKzg4Nyw5IEBAIGxpYi9idWlsZGN1c3RvbWl6ZS5wbDogJCYgJChtaW5pX29iaikKKyAJCSRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworIGxpYi9idWlsZGN1c3RvbWl6ZS5wbDogJCYgJChtaW5pX29iaikgd3JpdGUgICAgbGRjdXN0b21pemUucGwKKyAJJChDQykgLW8gJChNSU5JUEVSTF9FWEUpICQobWluaV9vYmogICAgbGlicykKKy0JJChMRExJQlBUSCkgLi9taW5pcGVybCQoSE9TVCAgICBfRVhUKSAtdyAtSWxpYiAtSWRpc3QvRXhwb3J0ZXIvbGliIC1NRXhwb3J0ZXIgLWUgJzw/PicgfHwgc2ggLWMgJ2VjaG8gPiYyIEZhaWxlZCB0byBidWlsZCBtaW5pcGVybC4gIFBsZWFzZSBydW4gbWFrZSBtaW5pdGVzdDsgZXhpdCAxJworKwltdiAtZiBtaW5pcGVybCBtaW5pcGVybC10YXJnZXQKKysJbG4gLXMgaG9zdHBlcmwgbWluaXBlcmwKKysJIyQoTERMSUJQVEgpIC4vbWluaXBlcmwkKEhPU1QgICAgX0VYVCkgLXcgLUlsaWIgLUlkaXN0L0V4cG9ydGVyL2xpYiAtTUV4cG9ydGVyIC1lICc8Pz4nIHx8IHNoIC1jICdlY2hvID4mMiBGYWlsZWQgdG8gYnVpbGQgbWluaXBlcmwuICBQbGVhc2UgcnVuIG1ha2UgbWluaXRlc3Q7IGV4aXQgMScKKyAJJChNSU5JUEVSTCkgLWYgd3JpdGVfYnVpbGRjdXN0b21pemUucGwgICAgCisgIU5PIVNVQlMhCisgCQk7OworQEAgLTkwNyw3ICs5MTEsOSBAQCBsaWIvYnVpbGRjdXN0b21pemUucGw6ICQmICQobWluaV9vYmopIHdyaXRlX2J1aWxkY3VzdG9taXplLnBsCisgCS1Acm0gLWYgbWluaXBlcmwueG9rCisgCSQoQ0MpICQoQ0xERkxBR1MpICQoTkFNRVNQQUNFRkxBR1MpIC1vICQoTUlOSVBFUkxfRVhFKSBcCisgCSAgICAkKG1pbmlfb2JqKSAkKGxpYnMpCistCSQoTERMSUJQVEgpIC4vbWluaXBlcmwkKEhPU1RfRVhFX0VYVCkgLXcgLUlsaWIgLUlkaXN0L0V4cG9ydGVyL2xpYiAtTUV4cG9ydGVyIC1lICc8Pz4nIHx8IHNoIC1jICdlY2hvID4mMiBGYWlsZWQgdG8gYnVpbGQgbWluaXBlcmwuICBQbGVhc2UgcnVuIG1ha2UgbWluaXRlc3Q7IGV4aXQgMScKKysJbXYgLWYgbWluaXBlcmwgbWluaXBlcmwtdGFyZ2V0CisrCWxuIC1zIGhvc3RwZXJsIG1pbmlwZXJsCisrCSMkKExETElCUFRIKSAuL21pbmlwZXJsJChIT1NUX0VYRV9FWFQpIC13IC1JbGliIC1JZGlzdC9FeHBvcnRlci9saWIgLU1FeHBvcnRlciAtZSAnPD8+JyB8fCBzaCAtYyAnZWNobyA+JjIgRmFpbGVkIHRvIGJ1aWxkIG1pbmlwZXJsLiAgUGxlYXNlIHJ1biBtYWtlIG1pbml0ZXN0OyBleGl0IDEnCisgCSQoTUlOSVBFUkwpIC1mIHdyaXRlX2J1aWxkY3VzdG9taXplLnBsCisgIU5PIVNVQlMhCisgCQk7OworQEAgLTkxOCw3ICs5MjQsOSBAQCBsaWIvYnVpbGRjdXN0b21pemUucGw6IFwkJiBcJChtaW5pX29iaikgd3JpdGVfYnVpbGRjdXN0b21pemUucGwKKyAJLUBybSAtZiBtaW5pcGVybC54b2sKKyAJLUBybSBcJChNSU5JUEVSTF9FWEUpCisgCVwkKExOUykgXCQoSE9TVF9QRVJMKSBcJChNSU5JUEVSTF9FWEUpCistCVwkKExETElCUFRIKSAuL21pbmlwZXJsXCQoSE9TVF9FWEVfRVhUKSAtdyAtSWxpYiAtSWRpc3QvRXhwb3J0ZXIvbGliIC1NRXhwb3J0ZXIgLWUgJzw/PicgfHwgc2ggLWMgJ2VjaG8gPiYyIEZhaWxlZCB0byBidWlsZCBtaW5pcGVybC4gIFBsZWFzZSBydW4gbWFrZSBtaW5pdGVzdDsgZXhpdCAxJworKwltdiAtZiBtaW5pcGVybCBtaW5pcGVybC10YXJnZXQKKysJbG4gLXMgaG9zdHBlcmwgbWluaXBlcmwKKysJI1wkKExETElCUFRIKSAuL21pbmlwZXJsXCQoSE9TVF9FWEVfRVhUKSAtdyAtSWxpYiAtSWRpc3QvRXhwb3J0ZXIvbGliIC1NRXhwb3J0ZXIgLWUgJzw/PicgfHwgc2ggLWMgJ2VjaG8gPiYyIEZhaWxlZCB0byBidWlsZCBtaW5pcGVybC4gIFBsZWFzZSBydW4gbWFrZSBtaW5pdGVzdDsgZXhpdCAxJworIAlcJChNSU5JUEVSTCkgLWYgd3JpdGVfYnVpbGRjdXN0b21pemUucGwgJ29zbmFtZScgIiRvc25hbWUiCisgIUdST0shVEhJUyEKKyAJCWVsc2UKK0BAIC05MjcsNyArOTM1LDkgQEAgbGliL2J1aWxkY3VzdG9taXplLnBsOiAkJiAkKG1pbmlfb2JqKSB3cml0ZV9idWlsZGN1c3RvbWl6ZS5wbAorIAktQHJtIC1mIG1pbmlwZXJsLnhvaworIAkkKENDKSAkKENMREZMQUdTKSAtbyAkKE1JTklQRVJMX0VYRSkgXAorIAkgICAgJChtaW5pX29iaikgJChsaWJzKQorLQkkKExETElCUFRIKSAuL21pbmlwZXJsJChIT1NUX0VYRV9FWFQpIC13IC1JbGliIC1JZGlzdC9FeHBvcnRlci9saWIgLU1FeHBvcnRlciAtZSAnPD8+JyB8fCBzaCAtYyAnZWNobyA+JjIgRmFpbGVkIHRvIGJ1aWxkIG1pbmlwZXJsLiAgUGxlYXNlIHJ1biBtYWtlIG1pbml0ZXN0OyBleGl0IDEnCisrCW12IC1mIG1pbmlwZXJsIG1pbmlwZXJsLXRhcmdldAorKwlsbiAtcyBob3N0cGVybCBtaW5pcGVybAorKwkjJChMRExJQlBUSCkgLi9taW5pcGVybCQoSE9TVF9FWEVfRVhUKSAtdyAtSWxpYiAtSWRpc3QvRXhwb3J0ZXIvbGliIC1NRXhwb3J0ZXIgLWUgJzw/PicgfHwgc2ggLWMgJ2VjaG8gPiYyIEZhaWxlZCB0byBidWlsZCBtaW5pcGVybC4gIFBsZWFzZSBydW4gbWFrZSBtaW5pdGVzdDsgZXhpdCAxJworIAkkKE1JTklQRVJMKSAtZiB3cml0ZV9idWlsZGN1c3RvbWl6ZS5wbAorICFOTyFTVUJTIQorIAkJZmkKK0BAIC05NzEsNyArOTgxLDcgQEAgY2FzZSAiJHtvc25hbWV9IiBpbgorIGNhdGFtb3VudCkKKyAkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8IUdST0shVEhJUyEKKyAuUEhPTlk6IG1ha2VwcHBvcnQKKy1tYWtlcHBwb3J0OiBcJChNSU5JUEVSTF9FWEUpIFwkKENPTkZJR1BNKQorK21ha2VwcHBvcnQ6IFwkKENPTkZJR1BNKQorIAktQGZvciBmIGluIE1ha2VmaWxlLlBMIFBQUG9ydF9wbS5QTCBQUFBvcnRfeHMuUEwgcHBwb3J0X2guUEw7IGRvIFwKKyAJKGNkIGV4dC9EZXZlbC1QUFBvcnQgJiYgYHB3ZGAvcnVuLnNoIC4uLy4uLyQoTUlOSVBFUkxfRVhFKSAtSS4uLy4uL2xpYiBcJFwkZik7IFwKKyAJZG9uZQorQEAgLTk4MSw3ICs5OTEsNyBAQCBtYWtlcHBwb3J0OiBcJChNSU5JUEVSTF9FWEUpIFwkKENPTkZJR1BNKQorICopCisgJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCchTk8hU1VCUyEnCisgLlBIT05ZOiBtYWtlcHBwb3J0CistbWFrZXBwcG9ydDogJChNSU5JUEVSTF9FWEUpICQoQ09ORklHUE0pICQobm9ueHNfZXh0KQorK21ha2VwcHBvcnQ6ICQoQ09ORklHUE0pICQobm9ueHNfZXh0KQorIAkkKE1JTklQRVJMKSBta3BwcG9ydAorIAorICFOTyFTVUJTIQorQEAgLTk5MSwxNiArMTAwMSwxNiBAQCBlc2FjCisgJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCchTk8hU1VCUyEnCisgCisgLlBIT05ZOiBwcmVwbGlicmFyeQorLXByZXBsaWJyYXJ5OiAkKE1JTklQRVJMX0VYRSkgJChDT05GSUdQTSkgJChQUkVQTElCUkFSWV9MSUJQRVJMKQorK3ByZXBsaWJyYXJ5OiAkKENPTkZJR1BNKSAkKFBSRVBMSUJSQVJZX0xJQlBFUkwpCisgCisgJChDT05GSUdQTV9GUk9NX0NPTkZJR19TSCk6ICQoQ09ORklHUE9EKQorIAorLSQoQ09ORklHUE9EKTogY29uZmlnLnNoICQoTUlOSVBFUkxfRVhFKSBjb25maWdwbSBQb3J0aW5nL0dsb3NzYXJ5IGxpYi9Db25maWdfZ2l0LnBsCisrJChDT05GSUdQT0QpOiBjb25maWcuc2ggY29uZmlncG0gUG9ydGluZy9HbG9zc2FyeSBsaWIvQ29uZmlnX2dpdC5wbAorIAkkKE1JTklQRVJMKSBjb25maWdwbQorIAorIHVuaWRhdGFmaWxlcyAkKHVuaWRhdGFmaWxlcykgcG9kL3Blcmx1bmlwcm9wcy5wb2Q6IHVuaS5kYXRhCisgCistdW5pLmRhdGE6ICQoTUlOSVBFUkxfRVhFKSAkKENPTkZJR1BNKSBsaWIvdW5pY29yZS9ta3RhYmxlcyAkKG5vbnhzX2V4dCkKKyt1bmkuZGF0YTogJChDT05GSUdQTSkgbGliL3VuaWNvcmUvbWt0YWJsZXMgJChub254c19leHQpCisgCSQoTUlOSVBFUkwpIGxpYi91bmljb3JlL21rdGFibGVzIC1DIGxpYi91bmljb3JlIC1QIHBvZCAtbWFrZXRlc3QgLW1ha2VsaXN0IC1wCisgIwlDb21tZW50ZWQgb3V0IHNvIGFsd2F5cyBydW5zLCBta3RhYmxlcyBsb29rcyBhdCBmYXIgbW9yZSBmaWxlcyB0aGFuIHdlCisgIwljYW4gaW4gdGhpcyBtYWtlZmlsZSB0byBkZWNpZGUgaWYgbmVlZHMgdG8gcnVuIG9yIG5vdAorQEAgLTEwMDksMTIgKzEwMTksMTIgQEAgdW5pLmRhdGE6ICQoTUlOSVBFUkxfRVhFKSAkKENPTkZJR1BNKSBsaWIvdW5pY29yZS9ta3RhYmxlcyAkKG5vbnhzX2V4dCkKKyAjICQoUEVSTF9FWEUpIGFuZCBleHQgYmVjYXVzZSBwb2RfbGliLnBsIG5lZWRzIERpZ2VzdDo6TUQ1CisgIyBCdXQgYWxzbyB0aGlzIGVuc3VyZXMgdGhhdCBhbGwgZXh0ZW5zaW9ucyBhcmUgYnVpbHQgYmVmb3JlIHdlIHRyeSB0byBzY2FuCisgIyB0aGVtLCB3aGljaCBwaWNrcyB1cCBEZXZlbDo6UFBQb3J0J3MgZG9jdW1lbnRhdGlvbi4KKy1wb2QvcGVybHRvYy5wb2Q6ICQocGVybHRvY19wb2RfcHJlcmVxcykgICQoUEVSTF9FWEUpICQoZXh0KSBwb2QvYnVpbGR0b2MKKy0JJChSVU5fUEVSTCkgLWYgcG9kL2J1aWxkdG9jIC1xCisrcG9kL3Blcmx0b2MucG9kOiAkKHBlcmx0b2NfcG9kX3ByZXJlcXMpICQoZXh0KSBwb2QvYnVpbGR0b2MKKysJJChNSU5JUEVSTCkgLWYgcG9kL2J1aWxkdG9jIC1xCisgCisgcG9kL3BlcmxhcGkucG9kOiBwb2QvcGVybGludGVybi5wb2QKKyAKKy1wb2QvcGVybGludGVybi5wb2Q6ICQoTUlOSVBFUkxfRVhFKSBhdXRvZG9jLnBsIGVtYmVkLmZuYworK3BvZC9wZXJsaW50ZXJuLnBvZDogYXV0b2RvYy5wbCBlbWJlZC5mbmMKKyAJJChNSU5JUEVSTCkgYXV0b2RvYy5wbAorIAorIHBvZC9wZXJsbW9kbGliLnBvZDogJChNSU5JUEVSTF9FWEUpIHBvZC9wZXJsbW9kbGliLlBMIE1BTklGRVNUCitAQCAtMTAyNCw3ICsxMDM0LDcgQEAgcG9kL3Blcmw1MjIwZGVsdGEucG9kOiBwb2QvcGVybGRlbHRhLnBvZAorIAkkKFJNUykgcG9kL3Blcmw1MjIwZGVsdGEucG9kCisgCSQoTE5TKSBwZXJsZGVsdGEucG9kIHBvZC9wZXJsNTIyMGRlbHRhLnBvZAorIAorLWV4dHJhLnBvZHM6ICQoTUlOSVBFUkxfRVhFKQorK2V4dHJhLnBvZHM6CisgCS1AdGVzdCAhIC1mIGV4dHJhLnBvZHMgfHwgcm0gLWYgYGNhdCBleHRyYS5wb2RzYAorIAktQHJtIC1mIGV4dHJhLnBvZHMKKyAJLUBmb3IgeCBpbiBgZ3JlcCAtbCAnXj1bYS16XScgUkVBRE1FLiogfCBncmVwIC12IFJFQURNRS52bXNgIDsgZG8gXAorQEAgLTEwNjgsOCArMTA3OCw3IEBAIEVPVAorICAgICAgICAgJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PEVPVAorIAorIGluc3RhbGxfJG5hbWUgaW5zdGFsbC0kbmFtZTogXCQoSU5TVEFMTF9ERVBFTkRFTkNFKSBpbnN0YWxscGVybCBhbGwgaW5zdGFsbG1hbgorLQlcJChSVU5fUEVSTCkgaW5zdGFsbHBlcmwgLS1kZXN0ZGlyPVwkKERFU1RESVIpICRmbGFncyBcJChJTlNUQUxMRkxBR1MpIFwkKFNUUklQRkxBR1MpCistCVwkKFJVTl9QRVJMKSBpbnN0YWxsbWFuIC0tZGVzdGRpcj1cJChERVNURElSKSAkZmxhZ3MKKysJLi9ob3N0cGVybCAtSWZha2VfY29uZmlnX2xpYnJhcnkgLUlsaWIgLU1Db25maWcgaW5zdGFsbHBlcmwgLS1kZXN0ZGlyPVwkKERFU1RESVIpICRmbGFncyAgXCQoSU5TVEFMTEZMQUdTKSBcJChTVFJJUEZMQUdTKQorIEVPVAorICAgICBmaQorIAorQEAgLTEwNzksMTEgKzEwODgsNyBAQCBkb25lCisgaWYgdGVzdCAiWCRob3N0cGVybCIgIT0gWDsgdGhlbgorIAkkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKyBpbnN0YWxsLnBlcmw6CSQoSU5TVEFMTF9ERVBFTkRFTkNFKSBpbnN0YWxscGVybAorLQkkKEhPU1RfUEVSTCkgaW5zdGFsbHBlcmwgLS1kZXN0ZGlyPSQoREVTVERJUikgJChJTlNUQUxMRkxBR1MpICQoU1RSSVBGTEFHUykKKy0JLUB0ZXN0ICEgLXMgZXh0cmFzLmxzdCB8fCAkKE1BS0UpIGV4dHJhcy5pbnN0YWxsCistCistaW5zdGFsbC5tYW46CWFsbCBpbnN0YWxsbWFuCistCSQoSE9TVF9QRVJMKSBpbnN0YWxsbWFuIC0tZGVzdGRpcj0kKERFU1RESVIpICQoSU5TVEFMTEZMQUdTKQorKwkuL2hvc3RwZXJsIC1JZmFrZV9jb25maWdfbGlicmFyeSAtSWxpYiAtTUNvbmZpZyBpbnN0YWxscGVybCAtLWRlc3RkaXI9JChERVNURElSKSAkKElOU1RBTExGTEFHUykgJChTVFJJUEZMQUdTKQorIAorICMgWFhYIEV4cGVyaW1lbnRhbC4gSGFyZHdpcmVkIHZhbHVlcywgYnV0IHVzZWZ1bCBmb3IgdGVzdGluZy4KKyAjIEV2ZW50dWFsbHkgQ29uZmlndXJlIGNvdWxkIGFzayBmb3Igc29tZSBvZiB0aGVzZSB2YWx1ZXMuCitAQCAtMTEwMSwyNCArMTEwNiw4IEBAIGluc3RhbGwuaHRtbDogYWxsIGluc3RhbGxodG1sCisgZWxzZQorIAkkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKyBpbnN0YWxsLnBlcmw6CSQoSU5TVEFMTF9ERVBFTkRFTkNFKSBpbnN0YWxscGVybAorLQkkKFJVTl9QRVJMKSBpbnN0YWxscGVybCAtLWRlc3RkaXI9JChERVNURElSKSAkKElOU1RBTExGTEFHUykgJChTVFJJUEZMQUdTKQorLQktQHRlc3QgISAtcyBleHRyYXMubHN0IHx8IFBBVEg9ImBwd2RgOlwke1BBVEh9IiBQRVJMNUxJQj0iYHB3ZGAvbGliIiBcJChSVU5fUEVSTCkgLUlsaWIgLU1DUEFOIC1lICdAQVJHViYmaW5zdGFsbChAQVJHViknIGBjYXQgZXh0cmFzLmxzdGAKKysJLi9ob3N0cGVybCAtSWZha2VfY29uZmlnX2xpYnJhcnkgLUlsaWIgLU1Db25maWcgaW5zdGFsbHBlcmwgLS1kZXN0ZGlyPSQoREVTVERJUikgJChJTlNUQUxMRkxBR1MpICQoU1RSSVBGTEFHUykKKyAKKy1pbnN0YWxsLm1hbjoJYWxsIGluc3RhbGxtYW4KKy0JJChSVU5fUEVSTCkgaW5zdGFsbG1hbiAtLWRlc3RkaXI9JChERVNURElSKSAkKElOU1RBTExGTEFHUykKKy0KKy0jIFhYWCBFeHBlcmltZW50YWwuIEhhcmR3aXJlZCB2YWx1ZXMsIGJ1dCB1c2VmdWwgZm9yIHRlc3RpbmcuCistIyBFdmVudHVhbGx5IENvbmZpZ3VyZSBjb3VsZCBhc2sgZm9yIHNvbWUgb2YgdGhlc2UgdmFsdWVzLgorLWluc3RhbGwuaHRtbDogYWxsIGluc3RhbGxodG1sCistCS1AdGVzdCAtZiBSRUFETUUudm1zICYmIGNkIHZtcyAmJiAkKExOUykgLi4vUkVBRE1FLnZtcyBSRUFETUVfdm1zLnBvZCAmJiBjZCAuLgorLQkkKFJVTl9QRVJMKSBpbnN0YWxsaHRtbCAgIFwKKy0gICAgICAtLXBvZHJvb3Q9LiAtLXBvZHBhdGg9LiAtLXJlY3Vyc2UgIFwKKy0gICAgICAtLWh0bWxkaXI9JChwcml2bGliKS9odG1sICAgXAorLSAgICAgIC0taHRtbHJvb3Q9JChwcml2bGliKS9odG1sICBcCistICAgICAgLS1zcGxpdGhlYWQ9cG9kL3BlcmxpcGMgICAgIFwKKy0gICAgICAtLXNwbGl0aXRlbT1wb2QvcGVybGZ1bmMgICAgXAorLSAgICAgIC0taWdub3JlPVBvcnRpbmcvTWFpbnRhaW5lcnMucG0sUG9ydGluZy9wdW1wa2luLnBvZCxQb3J0aW5nL3JlcG9zaXRvcnkucG9kIFwKKy0gICAgICAtLXZlcmJvc2UKKyAhTk8hU1VCUyEKKyBmaQorIAorQEAgLTEyMTAsMTMgKzExOTksMTMgQEAgbWFuaWNoZWNrOglGT1JDRQorICMKKyAjIER5bmFMb2FkZXIgbWF5IGJlIG5lZWRlZCBmb3IgZXh0ZW5zaW9ucyB0aGF0IHVzZSBNYWtlZmlsZS5QTC4KKyAKKy0kKERZTkFMT0FERVIpOgkkKE1JTklQRVJMX0VYRSkgbGliL2J1aWxkY3VzdG9taXplLnBsIHByZXBsaWJyYXJ5IEZPUkNFICQobm9ueHNfZXh0KQorKyQoRFlOQUxPQURFUik6IGxpYi9idWlsZGN1c3RvbWl6ZS5wbCBwcmVwbGlicmFyeSBGT1JDRSAkKG5vbnhzX2V4dCkKKyAJJChNSU5JUEVSTCkgbWFrZV9leHQucGwgJEAgJChNQUtFX0VYVF9BUkdTKSBNQUtFPSIkKE1BS0UpIiBMSUJQRVJMX0E9JChMSUJQRVJMKSBMSU5LVFlQRT1zdGF0aWMgJChTVEFUSUNfTERGTEFHUykKKyAKKy1kX2R1bW15ICQoZHluYW1pY19leHQpOgkkKE1JTklQRVJMX0VYRSkgbGliL2J1aWxkY3VzdG9taXplLnBsIHByZXBsaWJyYXJ5IG1ha2VwcHBvcnQgJChEWU5BTE9BREVSKSBGT1JDRSAkKFBFUkxFWFBPUlQpICQoTElCUEVSTCkKKytkX2R1bW15ICQoZHluYW1pY19leHQpOglsaWIvYnVpbGRjdXN0b21pemUucGwgcHJlcGxpYnJhcnkgbWFrZXBwcG9ydCAkKERZTkFMT0FERVIpIEZPUkNFICQoUEVSTEVYUE9SVCkgJChMSUJQRVJMKQorIAkkKE1JTklQRVJMKSBtYWtlX2V4dC5wbCAkQCAkKE1BS0VfRVhUX0FSR1MpIE1BS0U9IiQoTUFLRSkiIExJQlBFUkxfQT0kKExJQlBFUkwpIExJTktUWVBFPWR5bmFtaWMKKyAKKy1zX2R1bW15ICQoc3RhdGljX2V4dCk6CSQoTUlOSVBFUkxfRVhFKSBsaWIvYnVpbGRjdXN0b21pemUucGwgcHJlcGxpYnJhcnkgbWFrZXBwcG9ydCAkKERZTkFMT0FERVIpIEZPUkNFCisrc19kdW1teSAkKHN0YXRpY19leHQpOglsaWIvYnVpbGRjdXN0b21pemUucGwgcHJlcGxpYnJhcnkgbWFrZXBwcG9ydCAkKERZTkFMT0FERVIpIEZPUkNFCisgCSQoTUlOSVBFUkwpIG1ha2VfZXh0LnBsICRAICQoTUFLRV9FWFRfQVJHUykgTUFLRT0iJChNQUtFKSIgTElCUEVSTF9BPSQoTElCUEVSTCkgTElOS1RZUEU9c3RhdGljICQoU1RBVElDX0xERkxBR1MpCisgCisgbl9kdW1teSAkKG5vbnhzX2V4dCk6CSQoTUlOSVBFUkxfRVhFKSBsaWIvYnVpbGRjdXN0b21pemUucGwgcHJlcGxpYnJhcnkgRk9SQ0UKK0BAIC0xNDA1LDE0ICsxMzk0LDE0IEBAIHRlc3RfcHJlcF9wcmU6IHByZXBsaWJyYXJ5IHV0aWxpdGllcyAkKG5vbnhzX2V4dCkKKyAKKyBjYXNlICIkdGFyZ2V0aG9zdCIgaW4KKyAnJykgJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCchTk8hU1VCUyEnCistdGVzdF9wcmVwIHRlc3QtcHJlcDogdGVzdF9wcmVwX3ByZSAkKE1JTklQRVJMX0VYRSkgJCh1bmlkYXRhZmlsZXMpICQoUEVSTF9FWEUpIFwKKyt0ZXN0X3ByZXAgdGVzdC1wcmVwOiB0ZXN0X3ByZXBfcHJlICQodW5pZGF0YWZpbGVzKSAkKFBFUkxfRVhFKSBcCisgCSQoZHluYW1pY19leHQpICQoVEVTVF9QRVJMX0RMTCkgcnVudGVzdHMgJChnZW5lcmF0ZWRfcG9kcykKKyAJY2QgdCAmJiAocm0gLWYgJChQRVJMX0VYRSk7ICQoTE5TKSAuLi8kKFBFUkxfRVhFKSAkKFBFUkxfRVhFKSkKKyAKKyAhTk8hU1VCUyEKKyA7OworICopICRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwhR1JPSyFUSElTIQorLXRlc3RfcHJlcCB0ZXN0LXByZXA6IHRlc3RfcHJlcF9wcmUgXCQoTUlOSVBFUkxfRVhFKSBcJCh1bmlkYXRhZmlsZXMpIFwkKFBFUkxfRVhFKSBcCisrdGVzdF9wcmVwIHRlc3QtcHJlcDogdGVzdF9wcmVwX3ByZSBcJCh1bmlkYXRhZmlsZXMpIFwkKFBFUkxfRVhFKSBcCisgCVwkKGR5bmFtaWNfZXh0KSBcJChURVNUX1BFUkxfRExMKSBydW50ZXN0cyBcCisgCVwkKGdlbmVyYXRlZF9wb2RzKQorIAkkdG8gbGlicGVybC4qCitAQCAtMTQ2NSw3ICsxNDU0LDcgQEAgdGVzdF9wcmVwIHRlc3QtcHJlcDogdGVzdF9wcmVwX3ByZSBcJChNSU5JUEVSTF9FWEUpIFwkKHVuaWRhdGFmaWxlcykgXCQoUEVSTF9FWEUKKyBlc2FjCisgCisgJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCchTk8hU1VCUyEnCistdGVzdF9wcmVwX3Jlb25seTogJChNSU5JUEVSTF9FWEUpICQoUEVSTF9FWEUpICQoZHluYW1pY19leHRfcmUpICQoVEVTVF9QRVJMX0RMTCkKKyt0ZXN0X3ByZXBfcmVvbmx5OiAkKFBFUkxfRVhFKSAkKGR5bmFtaWNfZXh0X3JlKSAkKFRFU1RfUEVSTF9ETEwpCisgCSQoTUlOSVBFUkwpIG1ha2VfZXh0LnBsICQoZHluYW1pY19leHRfcmUpIE1BS0U9IiQoTUFLRSkiIExJQlBFUkxfQT0kKExJQlBFUkwpIExJTktUWVBFPWR5bmFtaWMKKyAJY2QgdCAmJiAocm0gLWYgJChQRVJMX0VYRSk7ICQoTE5TKSAuLi8kKFBFUkxfRVhFKSAkKFBFUkxfRVhFKSkKKyAhTk8hU1VCUyEKK0BAIC0xNTE2LDcgKzE1MDUsNyBAQCAkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKyAKKyAjIENhbid0IGRlcGVuZCBvbiBsaWIvQ29uZmlnLnBtIGJlY2F1c2UgdGhhdCBtaWdodCBiZSB3aGVyZSBtaW5pcGVybAorICMgaXMgY3Jhc2hpbmcuCistbWluaXRlc3Q6ICQoTUlOSVBFUkxfRVhFKQorK21pbml0ZXN0OgorIAktQHRlc3QgLWYgbGliL0NvbmZpZy5wbSB8fCAkKE1BS0UpIGxpYi9Db25maWcucG0gJCh1bmlkYXRhZmlsZXMpCisgCUBlY2hvICIgIgorIAlAZWNobyAiWW91IG1heSBzZWUgc29tZSBpcnJlbGV2YW50IHRlc3QgZmFpbHVyZXMgaWYgeW91IGhhdmUgYmVlbiB1bmFibGUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvTWFrZWZpbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvTWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU4ZTJlMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9NYWtlZmlsZS5wYXRjaApAQCAtMCwwICsxLDU4IEBACitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0luZGV4OiBwZXJsLTUuMTQuMi9Dcm9zcy9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBlcmwtNS4xNC4yLm9yaWcvQ3Jvc3MvTWFrZWZpbGUKKysrKyBwZXJsLTUuMTQuMi9Dcm9zcy9NYWtlZmlsZQorQEAgLTEsNiArMSw3IEBACisgIyMgVG9wbGV2ZWwgTWFrZWZpbGUgZm9yIGNyb3NzLWNvbXBpbGF0aW9uIG9mIHBlcmwKKyAKKy1leHBvcnQgVE9QRElSPSR7c2hlbGwgcHdkfQorK292ZXJyaWRlIFRPUERJUj0ke3NoZWxsIHB3ZH0KKytleHBvcnQgVE9QRElSCisgaW5jbHVkZSAkKFRPUERJUikvY29uZmlnCisgZXhwb3J0IENGTEFHUworIGV4cG9ydCBTWVM9JChBUkNIKS0kKE9TKQorQEAgLTEwLDcgKzExLDcgQEAgZXhwb3J0IE9QVElNSVpBVElPTiA9IC1PMgorIAorIGV4cG9ydCBDQyA9ICQoQ1JPU1MpZ2NjCisgZXhwb3J0IENYWCA9ICQoQ1JPU1MpZysrCistZXhwb3J0IExEID0gJChDUk9TUylsZAorK2V4cG9ydCBMRCA9ICQoQ0MpCisgZXhwb3J0IFNUUklQID0gJChDUk9TUylzdHJpcAorIGV4cG9ydCBBUiA9ICQoQ1JPU1MpYXIKKyBleHBvcnQgUkFOTElCID0gJChDUk9TUylyYW5saWIKK0BAIC0zMiwxNyArMzMsNiBAQCBDRkxBR1MrPSQoRlVMTF9PUFRJTUlaQVRJT04pCisgYWxsOgorIAlAZWNobyBQbGVhc2UgcmVhZCB0aGUgUkVBRE1FIGZpbGUgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuCisgCistZ2VuX3BhdGNoOgorLQlkaWZmIC1CYnVyIC4uL01ha2VmaWxlLlNIIE1ha2VmaWxlLlNIID4gTWFrZWZpbGUuU0gucGF0Y2gKKy0JZGlmZiAtQmJ1ciAuLi9pbnN0YWxscGVybCBpbnN0YWxscGVybCA+IGluc3RhbGxwZXJsLnBhdGNoCistCistcGF0Y2g6CistCWNkIC4uIDsgaWYgWyAhIC1lIC4vQ1JPU1NfUEFUQ0hFRCBdIDsgdGhlbiBcCistCQlwYXRjaCAtcDEgPCBDcm9zcy9NYWtlZmlsZS5TSC5wYXRjaDsgXAorLQkJcGF0Y2ggLXAxIDwgQ3Jvc3MvaW5zdGFsbHBlcmwucGF0Y2ggOyBtdiBpbnN0YWxscGVybCBpbnN0YWxscGVybC1wYXRjaGVkOyBcCistCQlzZWQgLWUgJ3MvWFhTVFJJUFhYLyQoU1lTKS8nIGluc3RhbGxwZXJsLXBhdGNoZWQgPiBpbnN0YWxscGVybDsgXAorLQkJdG91Y2ggQ1JPU1NfUEFUQ0hFRCA7IGZpCistCisgcGVybDoKKyAJQGVjaG8gUGVybCBjcm9zcy1idWlsZCBkaXJlY3RvcnkgaXMgJChUT1BESVIpCisgCUBlY2hvIFRhcmdldCBhcmNoIGlzICQoU1lTKQorQEAgLTUyLDExICs0MiwxMSBAQCBwZXJsOgorIAkkKFRPUERJUikvZ2VuZXJhdGVfY29uZmlnX3NoIGNvbmZpZy5zaC0kKFNZUykgPiAkKFRPUERJUikvLi4vY29uZmlnLnNoCisgCWNkICQoVE9QRElSKS8uLiA7IC4vQ29uZmlndXJlIC1TIDsgbWFrZSBkZXBlbmQgOyBtYWtlIDsgbWFrZSBtb3JlCisgCWNkICQoVE9QRElSKS8uLiA7IG1rZGlyIC1wIGZha2VfY29uZmlnX2xpYnJhcnkgOyBjcCBsaWIvQ29uZmlnLnBtIGxpYi9Db25maWdfaGVhdnkucGwgZmFrZV9jb25maWdfbGlicmFyeQorLQljZCAkKFRPUERJUikvLi4gOyAkKE1BS0UpIG1vcmUyICJQRVJMUlVOPS91c3IvYmluL3BlcmwgLUkkKFRPUERJUikvLi4vZmFrZV9jb25maWdfbGlicmFyeSAtTUNvbmZpZyIKKy0JY2QgJChUT1BESVIpLy4uIDsgJChNQUtFKSBtb3JlMyAiUEVSTFJVTj0vdXNyL2Jpbi9wZXJsIC1JJChUT1BESVIpLy4uL2Zha2VfY29uZmlnX2xpYnJhcnkgLU1Db25maWciCistCWNkICQoVE9QRElSKS8uLiA7ICQoTUFLRSkgbW9yZTQgIlBFUkxSVU49L3Vzci9iaW4vcGVybCAtSSQoVE9QRElSKS8uLi9mYWtlX2NvbmZpZ19saWJyYXJ5IC1NQ29uZmlnIgorKwljZCAkKFRPUERJUikvLi4gOyAkKE1BS0UpIG1vcmUyICJQRVJMUlVOPWhvc3RwZXJsIC1JJChUT1BESVIpLy4uL2Zha2VfY29uZmlnX2xpYnJhcnkgLU1Db25maWciCisrCWNkICQoVE9QRElSKS8uLiA7ICQoTUFLRSkgbW9yZTMgIlBFUkxSVU49aG9zdHBlcmwgLUkkKFRPUERJUikvLi4vZmFrZV9jb25maWdfbGlicmFyeSAtTUNvbmZpZyIKKysJY2QgJChUT1BESVIpLy4uIDsgJChNQUtFKSBtb3JlNCAiUEVSTFJVTj1ob3N0cGVybCAtSSQoVE9QRElSKS8uLi9mYWtlX2NvbmZpZ19saWJyYXJ5IC1NQ29uZmlnIgorIAljZCAkKFRPUERJUikvLi4gOyBybSAtcmYgaW5zdGFsbF9tZV9oZXJlCistCWNkICQoVE9QRElSKS8uLiA7IG1ha2UgaW5zdGFsbC1zdHJpcAorKyMJY2QgJChUT1BESVIpLy4uIDsgbWFrZSBpbnN0YWxsLXN0cmlwCisgCWNkICQoVE9QRElSKS8uLiA7IHNoIC14IENyb3NzL3dhcnAKKyAKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYjUwNDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoCkBAIC0wLDAgKzEsMTIyMSBAQAorIyEvYmluL3NoCisjCisjIFRoaXMgZmlsZSB3YXMgcHJvZHVjZWQgYnkgcnVubmluZyB0aGUgQ29uZmlndXJlIHNjcmlwdC4gSXQgaG9sZHMgYWxsIHRoZQorIyBkZWZpbml0aW9ucyBmaWd1cmVkIG91dCBieSBDb25maWd1cmUuIFNob3VsZCB5b3UgbW9kaWZ5IG9uZSBvZiB0aGVzZSB2YWx1ZXMsCisjIGRvIG5vdCBmb3JnZXQgdG8gcHJvcGFnYXRlIHlvdXIgY2hhbmdlcyBieSBydW5uaW5nICJDb25maWd1cmUgLWRlciIuIFlvdSBtYXkKKyMgaW5zdGVhZCBjaG9vc2UgdG8gcnVuIGVhY2ggb2YgdGhlIC5TSCBmaWxlcyBieSB5b3Vyc2VsZiwgb3IgIkNvbmZpZ3VyZSAtUyIuCisjCisKKyMgUGFja2FnZSBuYW1lICAgICAgOiBwZXJsNQorIyBTb3VyY2UgZGlyZWN0b3J5ICA6IC4KKyMgQ29uZmlndXJhdGlvbiB0aW1lOiBUaHUgSnVuIDE4IDA1OjM3OjI3IFVUQyAyMDE1CisjIENvbmZpZ3VyZWQgYnkgICAgIDogT3BlbiBFbWJlZGRlZAorIyBUYXJnZXQgc3lzdGVtICAgICA6IGxpbnV4IHFlbXV4ODYtNjQgMy4xOS41LXlvY3RvLXN0YW5kYXJkICMxIHNtcCBwcmVlbXB0IHR1ZSBqdW4gMTYgMDA6Mjg6MTcgcGR0IDIwMTUgeDg2XzY0IGdudWxpbnV4CisKKzogQ29uZmlndXJlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCitjb25maWdfYXJnMD0nQ29uZmlndXJlJworY29uZmlnX2FyZ3M9Jy1kZXMgLURvcHRpbWl6ZT0tTzIgLURteWhvc3RuYW1lPWxvY2FsaG9zdCAtRHBlcmxhZG1pbj1yb290QGxvY2FsaG9zdCAtRGNjPWdjYyAtRGNmX2J5PU9wZW4gRW1iZWRkZWQgLURpbnN0YWxscHJlZml4PUBFWEVDUFJFRklYQCAtRHByZWZpeD1ARVhFQ1BSRUZJWEAgLUR2ZW5kb3JwcmVmaXg9QEVYRUNQUkVGSVhAIC1Ec2l0ZXByZWZpeD1ARVhFQ1BSRUZJWEAgLURvdGhlcmxpYmRpcnM9QExJQkRJUkAvcGVybC81LjIyLjAgLUR1c2VzaHJwbGliIC1EdXNldGhyZWFkcyAtRHVzZWl0aHJlYWRzIC1EdXNlbGFyZ2VmaWxlcyAtVWRfZG9zdWlkIC1EZF9zZW1jdGxfc2VtdW4gLVVpX2RiIC1VaV9uZGJtIC1VaV9nZGJtIC1EaV9zaGFkb3cgLURpX3N5c2xvZyAtRG1hbjNleHQ9M3BtIC1EdXNlcGVybGlvIC1EaW5zdGFsbHVzcmJpbnBlcmwgLVViaW5jb21wYXQ1MDA1IC1VdmVyc2lvbm9ubHkgLURwYWdlcj1AVVNSQklOQC9sZXNzIC1pc3InCitjb25maWdfYXJnYz0yOAorY29uZmlnX2FyZzE9Jy1kZXMnCitjb25maWdfYXJnMj0nLURvcHRpbWl6ZT0tTzInCitjb25maWdfYXJnMz0nLURteWhvc3RuYW1lPWxvY2FsaG9zdCcKK2NvbmZpZ19hcmc0PSctRHBlcmxhZG1pbj1yb290QGxvY2FsaG9zdCcKK2NvbmZpZ19hcmc1PSctRGNjPWdjYycKK2NvbmZpZ19hcmc2PSctRGNmX2J5PU9wZW4gRW1iZWRkZWQnCitjb25maWdfYXJnNz0nLURpbnN0YWxscHJlZml4PUBFWEVDUFJFRklYQCcKK2NvbmZpZ19hcmc4PSctRHByZWZpeD1ARVhFQ1BSRUZJWEAnCitjb25maWdfYXJnOT0nLUR2ZW5kb3JwcmVmaXg9QEVYRUNQUkVGSVhAJworY29uZmlnX2FyZzEwPSctRHNpdGVwcmVmaXg9QEVYRUNQUkVGSVhAJworY29uZmlnX2FyZzExPSctRG90aGVybGliZGlycz1ATElCRElSQC9wZXJsLzUuMjIuMCcKK2NvbmZpZ19hcmcxMj0nLUR1c2VzaHJwbGliJworY29uZmlnX2FyZzEzPSctRHVzZXRocmVhZHMnCitjb25maWdfYXJnMTQ9Jy1EdXNlaXRocmVhZHMnCitjb25maWdfYXJnMTU9Jy1EdXNlbGFyZ2VmaWxlcycKK2NvbmZpZ19hcmcxNj0nLVVkX2Rvc3VpZCcKK2NvbmZpZ19hcmcxNz0nLURkX3NlbWN0bF9zZW11bicKK2NvbmZpZ19hcmcxOD0nLVVpX2RiJworY29uZmlnX2FyZzE5PSctVWlfbmRibScKK2NvbmZpZ19hcmcyMD0nLVVpX2dkYm0nCitjb25maWdfYXJnMjE9Jy1EaV9zaGFkb3cnCitjb25maWdfYXJnMjI9Jy1EaV9zeXNsb2cnCitjb25maWdfYXJnMjM9Jy1EbWFuM2V4dD0zcG0nCitjb25maWdfYXJnMjQ9Jy1EdXNlcGVybGlvJworY29uZmlnX2FyZzI1PSctRGluc3RhbGx1c3JiaW5wZXJsJworY29uZmlnX2FyZzI2PSctVWJpbmNvbXBhdDUwMDUnCitjb25maWdfYXJnMjc9Jy1VdmVyc2lvbm9ubHknCitjb25maWdfYXJnMjg9Jy1EcGFnZXI9QFVTUkJJTkAvbGVzcyAtaXNyJworCitBdXRob3I9JycKK0RhdGU9JycKK0hlYWRlcj0nJworSWQ9JycKK0xvY2tlcj0nJworTG9nPScnCitSQ1NmaWxlPScnCitSZXZpc2lvbj0nJworU291cmNlPScnCitTdGF0ZT0nJworX2E9Jy5hJworX2V4ZT0nJworX289Jy5vJworYWZzPSdmYWxzZScKK2Fmc3Jvb3Q9Jy9hZnMnCithbGlnbmJ5dGVzPSc4JworYW5zaTJrbnI9JycKK2FwaG9zdG5hbWU9JycKK2FwaV9yZXZpc2lvbj0nNScKK2FwaV9zdWJ2ZXJzaW9uPScwJworYXBpX3ZlcnNpb249JzIyJworYXBpX3ZlcnNpb25zdHJpbmc9JzUuMjIuMCcKK2FyPSdhcicKK2FyY2hsaWI9J0BMSUJESVJAL3BlcmwvNS4yMi4wL0BBUkNIQC10aHJlYWQtbXVsdGknCithcmNobGliZXhwPSdAU1RBR0lOR0RJUkBATElCRElSQC9wZXJsLzUuMjIuMC9AQVJDSEAtdGhyZWFkLW11bHRpJworYXJjaGxpYl9leHA9J0BMSUJESVJAL3BlcmwvNS4yMi4wL0BBUkNIQC10aHJlYWQtbXVsdGknCithcmNobmFtZTY0PScnCithcmNobmFtZT0nQEFSQ0hALXRocmVhZC1tdWx0aScKK2FyY2hvYmpzPScnCithc2N0aW1lX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19CX1NCJworYXdrPSdhd2snCitiYXNlcmV2PSc1LjAnCitiYXNoPScnCitiaW49J0BVU1JCSU5AJworYmluX0VMRj0nZGVmaW5lJworYmluZXhwPSdAVVNSQklOQCcKK2Jpc29uPSdiaXNvbicKK2J5YWNjPSdieWFjYycKK2M9JycKK2Nhc3RmbGFncz0nMCcKK2NhdD0nY2F0JworY2M9J2djYycKK2NjY2RsZmxhZ3M9Jy1mUElDJworY2NkbGZsYWdzPSctV2wsLUUgLVdsLC1ycGF0aCxATElCRElSQC9wZXJsLzUuMjIuMC9AQVJDSEAtdGhyZWFkLW11bHRpL0NPUkUnCitjY2ZsYWdzPSctRF9SRUVOVFJBTlQgLURfR05VX1NPVVJDRSAtZndyYXB2IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1waXBlIC1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCAtRF9GT1JUSUZZX1NPVVJDRT0yJworY2NmbGFnc191c2VsYXJnZWZpbGVzPSctRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQnCitjY25hbWU9J2djYycKK2Njc3ltYm9scz0nJworY2N2ZXJzaW9uPScnCitjZl9ieT0nT3BlbiBFbWJlZGRlZCcKK2NmX2VtYWlsPSdPcGVuIEVtYmVkZGVkQGxvY2FsaG9zdC5sb2NhbGRvbWFpbicKK2NmX3RpbWU9J1RodSBKdW4gMTggMDU6Mzc6MjcgVVRDIDIwMTUnCitjaGFyYml0cz0nOCcKK2NoYXJzaXplPScxJworY2hncnA9JycKK2NobW9kPSdjaG1vZCcKK2Nob3duPScnCitjbG9ja3R5cGU9J2Nsb2NrX3QnCitjb21tPSdjb21tJworY29tcHJlc3M9JycKK2NvbnRhaW5zPSdncmVwJworY3A9J2NwJworY3Bpbz0nJworY3BwPSdjcHAnCitjcHBfc3R1ZmY9JzQyJworY3BwY2NzeW1ib2xzPScnCitjcHBmbGFncz0nLURfUkVFTlRSQU5UIC1EX0dOVV9TT1VSQ0UgLWZ3cmFwdiAtZm5vLXN0cmljdC1hbGlhc2luZyAtcGlwZScKK2NwcGxhc3Q9Jy0nCitjcHBtaW51cz0nLScKK2NwcHJ1bj0nZ2NjICAtRScKK2NwcHN0ZGluPSdnY2MgIC1FJworY3J5cHRfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0JfQ0NTJworY3J5cHRsaWI9JycKK2NzaD0nY3NoJworY3Rlcm1pZF9yX3Byb3RvPScwJworY3RpbWVfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0JfU0InCitkX0djb252ZXJ0PSdnY3Z0KCh4KSwobiksKGIpKScKK2RfUFJJRVVsZGJsPSdkZWZpbmUnCitkX1BSSUZVbGRibD0nZGVmaW5lJworZF9QUklHVWxkYmw9J2RlZmluZScKK2RfUFJJWFU2ND0nZGVmaW5lJworZF9QUklkNjQ9J2RlZmluZScKK2RfUFJJZWxkYmw9J2RlZmluZScKK2RfUFJJZmxkYmw9J2RlZmluZScKK2RfUFJJZ2xkYmw9J2RlZmluZScKK2RfUFJJaTY0PSdkZWZpbmUnCitkX1BSSW82ND0nZGVmaW5lJworZF9QUkl1NjQ9J2RlZmluZScKK2RfUFJJeDY0PSdkZWZpbmUnCitkX1NDTmZsZGJsPSdkZWZpbmUnCitkX19md2Fsaz0ndW5kZWYnCitkX2FjY2Vzcz0nZGVmaW5lJworZF9hY2Nlc3N4PSd1bmRlZicKK2RfYWNvc2g9J2RlZmluZScKK2RfYWludGw9J3VuZGVmJworZF9hbGFybT0nZGVmaW5lJworZF9hcmNobGliPSdkZWZpbmUnCitkX2FzY3RpbWU2ND0ndW5kZWYnCitkX2FzY3RpbWVfcj0nZGVmaW5lJworZF9hc2luaD0nZGVmaW5lJworZF9hdGFuaD0nZGVmaW5lJworZF9hdG9sZj0ndW5kZWYnCitkX2F0b2xsPSdkZWZpbmUnCitkX2F0dHJpYnV0ZV9kZXByZWNhdGVkPSdkZWZpbmUnCitkX2F0dHJpYnV0ZV9mb3JtYXQ9J2RlZmluZScKK2RfYXR0cmlidXRlX21hbGxvYz0nZGVmaW5lJworZF9hdHRyaWJ1dGVfbm9ubnVsbD0nZGVmaW5lJworZF9hdHRyaWJ1dGVfbm9yZXR1cm49J2RlZmluZScKK2RfYXR0cmlidXRlX3B1cmU9J2RlZmluZScKK2RfYXR0cmlidXRlX3VudXNlZD0nZGVmaW5lJworZF9hdHRyaWJ1dGVfd2Fybl91bnVzZWRfcmVzdWx0PSdkZWZpbmUnCitkX2JhY2t0cmFjZT0nZGVmaW5lJworZF9iY21wPSdkZWZpbmUnCitkX2Jjb3B5PSdkZWZpbmUnCitkX2JzZD0ndW5kZWYnCitkX2JzZGdldHBncnA9J3VuZGVmJworZF9ic2RzZXRwZ3JwPSd1bmRlZicKK2RfYnVpbHRpbl9jaG9vc2VfZXhwcj0nZGVmaW5lJworZF9idWlsdGluX2V4cGVjdD0nZGVmaW5lJworZF9iemVybz0nZGVmaW5lJworZF9jOTlfdmFyaWFkaWNfbWFjcm9zPSdkZWZpbmUnCitkX2Nhc3RpMzI9J2RlZmluZScKK2RfY2FzdG5lZz0nZGVmaW5lJworZF9jYnJ0PSdkZWZpbmUnCitkX2NoYXJ2c3ByPSd1bmRlZicKK2RfY2hvd249J2RlZmluZScKK2RfY2hyb290PSdkZWZpbmUnCitkX2Noc2l6ZT0ndW5kZWYnCitkX2NsYXNzPSd1bmRlZicKK2RfY2xlYXJlbnY9J2RlZmluZScKK2RfY2xvc2VkaXI9J2RlZmluZScKK2RfY21zZ2hkcl9zPSdkZWZpbmUnCitkX2NvbnN0PSdkZWZpbmUnCitkX2NvcHlzaWduPSdkZWZpbmUnCitkX2NvcHlzaWdubD0nZGVmaW5lJworZF9jcGx1c3BsdXM9J3VuZGVmJworZF9jcnlwdD0nZGVmaW5lJworZF9jcnlwdF9yPSdkZWZpbmUnCitkX2NzaD0ndW5kZWYnCitkX2N0ZXJtaWQ9J2RlZmluZScKK2RfY3Rlcm1pZF9yPSd1bmRlZicKK2RfY3RpbWU2ND0ndW5kZWYnCitkX2N0aW1lX3I9J2RlZmluZScKK2RfY3VzZXJpZD0nZGVmaW5lJworZF9kYmxfZGlnPSdkZWZpbmUnCitkX2RibWluaXRwcm90bz0nZGVmaW5lJworZF9kaWZmdGltZTY0PSd1bmRlZicKK2RfZGlmZnRpbWU9J2RlZmluZScKK2RfZGlyX2RkX2ZkPSd1bmRlZicKK2RfZGlyZmQ9J2RlZmluZScKK2RfZGlybmFtbGVuPSd1bmRlZicKK2RfZGxhZGRyPSdkZWZpbmUnCitkX2RsZXJyb3I9J2RlZmluZScKK2RfZGxvcGVuPSdkZWZpbmUnCitkX2Rsc3ltdW49J3VuZGVmJworZF9kb3N1aWQ9J3VuZGVmJworZF9kcmFuZDQ4X3I9J2RlZmluZScKK2RfZHJhbmQ0OHByb3RvPSdkZWZpbmUnCitkX2R1cDI9J2RlZmluZScKK2RfZWFjY2Vzcz0nZGVmaW5lJworZF9lbmRncmVudD0nZGVmaW5lJworZF9lbmRncmVudF9yPSd1bmRlZicKK2RfZW5kaGVudD0nZGVmaW5lJworZF9lbmRob3N0ZW50X3I9J3VuZGVmJworZF9lbmRuZW50PSdkZWZpbmUnCitkX2VuZG5ldGVudF9yPSd1bmRlZicKK2RfZW5kcGVudD0nZGVmaW5lJworZF9lbmRwcm90b2VudF9yPSd1bmRlZicKK2RfZW5kcHdlbnQ9J2RlZmluZScKK2RfZW5kcHdlbnRfcj0ndW5kZWYnCitkX2VuZHNlbnQ9J2RlZmluZScKK2RfZW5kc2VydmVudF9yPSd1bmRlZicKK2RfZW9mbmJsaz0nZGVmaW5lJworZF9lcmY9J2RlZmluZScKK2RfZXJmYz0nZGVmaW5lJworZF9ldW5pY2U9J3VuZGVmJworZF9leHAyPSdkZWZpbmUnCitkX2V4cG0xPSdkZWZpbmUnCitkX2Zhc3RzdGRpbz0ndW5kZWYnCitkX2ZjaGRpcj0nZGVmaW5lJworZF9mY2htb2Q9J2RlZmluZScKK2RfZmNob3duPSdkZWZpbmUnCitkX2ZjbnRsPSdkZWZpbmUnCitkX2ZjbnRsX2Nhbl9sb2NrPSdkZWZpbmUnCitkX2ZkX21hY3Jvcz0nZGVmaW5lJworZF9mZF9zZXQ9J2RlZmluZScKK2RfZmRpbT0nZGVmaW5lJworZF9mZHNfYml0cz0nZGVmaW5lJworZF9mZWdldHJvdW5kPSdkZWZpbmUnCitkX2ZnZXRwb3M9J2RlZmluZScKK2RfZmluaXRlPSdkZWZpbmUnCitkX2Zpbml0ZWw9J2RlZmluZScKK2RfZmxleGZuYW09J2RlZmluZScKK2RfZmxvY2s9J2RlZmluZScKK2RfZmxvY2twcm90bz0nZGVmaW5lJworZF9mbWE9J2RlZmluZScKK2RfZm1heD0nZGVmaW5lJworZF9mbWluPSdkZWZpbmUnCitkX2Zvcms9J2RlZmluZScKK2RfZnBfY2xhc3M9J3VuZGVmJworZF9mcF9jbGFzc2lmeT0ndW5kZWYnCitkX2ZwX2NsYXNzbD0ndW5kZWYnCitkX2ZwYXRoY29uZj0nZGVmaW5lJworZF9mcGNsYXNzPSd1bmRlZicKK2RfZnBjbGFzc2lmeT0nZGVmaW5lJworZF9mcGNsYXNzbD0ndW5kZWYnCitkX2ZwZ2V0cm91bmQ9J3VuZGVmJworZF9mcG9zNjRfdD0ndW5kZWYnCitkX2ZyZXhwbD0nZGVmaW5lJworZF9mc19kYXRhX3M9J3VuZGVmJworZF9mc2Vla289J2RlZmluZScKK2RfZnNldHBvcz0nZGVmaW5lJworZF9mc3RhdGZzPSdkZWZpbmUnCitkX2ZzdGF0dmZzPSdkZWZpbmUnCitkX2ZzeW5jPSdkZWZpbmUnCitkX2Z0ZWxsbz0nZGVmaW5lJworZF9mdGltZT0ndW5kZWYnCitkX2Z1dGltZXM9J2RlZmluZScKK2RfZ2RibV9uZGJtX2hfdXNlc19wcm90b3R5cGVzPSd1bmRlZicKK2RfZ2RibW5kYm1faF91c2VzX3Byb3RvdHlwZXM9J2RlZmluZScKK2RfZ2V0YWRkcmluZm89J2RlZmluZScKK2RfZ2V0Y3dkPSdkZWZpbmUnCitkX2dldGVzcHduYW09J3VuZGVmJworZF9nZXRmc3N0YXQ9J3VuZGVmJworZF9nZXRncmVudD0nZGVmaW5lJworZF9nZXRncmVudF9yPSdkZWZpbmUnCitkX2dldGdyZ2lkX3I9J2RlZmluZScKK2RfZ2V0Z3JuYW1fcj0nZGVmaW5lJworZF9nZXRncnBzPSdkZWZpbmUnCitkX2dldGhieWFkZHI9J2RlZmluZScKK2RfZ2V0aGJ5bmFtZT0nZGVmaW5lJworZF9nZXRoZW50PSdkZWZpbmUnCitkX2dldGhuYW1lPSdkZWZpbmUnCitkX2dldGhvc3RieWFkZHJfcj0nZGVmaW5lJworZF9nZXRob3N0YnluYW1lX3I9J2RlZmluZScKK2RfZ2V0aG9zdGVudF9yPSdkZWZpbmUnCitkX2dldGhvc3Rwcm90b3M9J2RlZmluZScKK2RfZ2V0aXRpbWVyPSdkZWZpbmUnCitkX2dldGxvZ2luPSdkZWZpbmUnCitkX2dldGxvZ2luX3I9J2RlZmluZScKK2RfZ2V0bW50PSd1bmRlZicKK2RfZ2V0bW50ZW50PSdkZWZpbmUnCitkX2dldG5hbWVpbmZvPSdkZWZpbmUnCitkX2dldG5ieWFkZHI9J2RlZmluZScKK2RfZ2V0bmJ5bmFtZT0nZGVmaW5lJworZF9nZXRuZW50PSdkZWZpbmUnCitkX2dldG5ldGJ5YWRkcl9yPSdkZWZpbmUnCitkX2dldG5ldGJ5bmFtZV9yPSdkZWZpbmUnCitkX2dldG5ldGVudF9yPSdkZWZpbmUnCitkX2dldG5ldHByb3Rvcz0nZGVmaW5lJworZF9nZXRwYWdzej0nZGVmaW5lJworZF9nZXRwYnluYW1lPSdkZWZpbmUnCitkX2dldHBieW51bWJlcj0nZGVmaW5lJworZF9nZXRwZW50PSdkZWZpbmUnCitkX2dldHBnaWQ9J2RlZmluZScKK2RfZ2V0cGdycDI9J3VuZGVmJworZF9nZXRwZ3JwPSdkZWZpbmUnCitkX2dldHBwaWQ9J2RlZmluZScKK2RfZ2V0cHJpb3I9J2RlZmluZScKK2RfZ2V0cHJvdG9ieW5hbWVfcj0nZGVmaW5lJworZF9nZXRwcm90b2J5bnVtYmVyX3I9J2RlZmluZScKK2RfZ2V0cHJvdG9lbnRfcj0nZGVmaW5lJworZF9nZXRwcm90b3Byb3Rvcz0nZGVmaW5lJworZF9nZXRwcnB3bmFtPSd1bmRlZicKK2RfZ2V0cHdlbnQ9J2RlZmluZScKK2RfZ2V0cHdlbnRfcj0nZGVmaW5lJworZF9nZXRwd25hbV9yPSdkZWZpbmUnCitkX2dldHB3dWlkX3I9J2RlZmluZScKK2RfZ2V0c2J5bmFtZT0nZGVmaW5lJworZF9nZXRzYnlwb3J0PSdkZWZpbmUnCitkX2dldHNlbnQ9J2RlZmluZScKK2RfZ2V0c2VydmJ5bmFtZV9yPSdkZWZpbmUnCitkX2dldHNlcnZieXBvcnRfcj0nZGVmaW5lJworZF9nZXRzZXJ2ZW50X3I9J2RlZmluZScKK2RfZ2V0c2VydnByb3Rvcz0nZGVmaW5lJworZF9nZXRzcG5hbT0nZGVmaW5lJworZF9nZXRzcG5hbV9yPSdkZWZpbmUnCitkX2dldHRpbWVvZD0nZGVmaW5lJworZF9nbXRpbWU2ND0ndW5kZWYnCitkX2dtdGltZV9yPSdkZWZpbmUnCitkX2dudWxpYmM9J2RlZmluZScKK2RfZ3JwYXNzd2Q9J2RlZmluZScKK2RfaGFzbW50b3B0PSdkZWZpbmUnCitkX2h0b25sPSdkZWZpbmUnCitkX2h5cG90PSdkZWZpbmUnCitkX2lsb2diPSdkZWZpbmUnCitkX2lsb2dibD0nZGVmaW5lJworZF9pbmNfdmVyc2lvbl9saXN0PSd1bmRlZicKK2RfaW5kZXg9J3VuZGVmJworZF9pbmV0YXRvbj0nZGVmaW5lJworZF9pbmV0bnRvcD0nZGVmaW5lJworZF9pbmV0cHRvbj0nZGVmaW5lJworZF9pbnQ2NF90PSdkZWZpbmUnCitkX2lwX21yZXE9J2RlZmluZScKK2RfaXBfbXJlcV9zb3VyY2U9J2RlZmluZScKK2RfaXB2Nl9tcmVxPSdkZWZpbmUnCitkX2lwdjZfbXJlcV9zb3VyY2U9J3VuZGVmJworZF9pc2FzY2lpPSdkZWZpbmUnCitkX2lzYmxhbms9J2RlZmluZScKK2RfaXNmaW5pdGU9J2RlZmluZScKK2RfaXNmaW5pdGVsPSd1bmRlZicKK2RfaXNpbmY9J2RlZmluZScKK2RfaXNpbmZsPSdkZWZpbmUnCitkX2lzbGVzcz0ndW5kZWYnCitkX2lzbmFuPSdkZWZpbmUnCitkX2lzbmFubD0nZGVmaW5lJworZF9pc25vcm1hbD0nZGVmaW5lJworZF9qMD0nZGVmaW5lJworZF9qMGw9J2RlZmluZScKK2Rfa2lsbHBnPSdkZWZpbmUnCitkX2xjX21vbmV0YXJ5XzIwMDg9J2RlZmluZScKK2RfbGNob3duPSdkZWZpbmUnCitkX2xkYmxfZGlnPSdkZWZpbmUnCitkX2xkZXhwbD0nZGVmaW5lJworZF9sZ2FtbWE9J2RlZmluZScKK2RfbGdhbW1hX3I9J2RlZmluZScKK2RfbGlibV9saWJfdmVyc2lvbj0nZGVmaW5lJworZF9saWJuYW1lX3VuaXF1ZT0ndW5kZWYnCitkX2xpbms9J2RlZmluZScKK2RfbGxyaW50PSdkZWZpbmUnCitkX2xscmludGw9J2RlZmluZScKK2RfbGxyb3VuZD0nZGVmaW5lJworZF9sbHJvdW5kbD0nZGVmaW5lJworZF9sb2NhbHRpbWU2ND0ndW5kZWYnCitkX2xvY2FsdGltZV9yPSdkZWZpbmUnCitkX2xvY2FsdGltZV9yX25lZWRzX3R6c2V0PSdkZWZpbmUnCitkX2xvY2NvbnY9J2RlZmluZScKK2RfbG9ja2Y9J2RlZmluZScKK2RfbG9nMXA9J2RlZmluZScKK2RfbG9nMj0nZGVmaW5lJworZF9sb2diPSdkZWZpbmUnCitkX2xvbmdkYmw9J2RlZmluZScKK2RfbG9uZ2xvbmc9J2RlZmluZScKK2RfbHJpbnQ9J2RlZmluZScKK2RfbHJpbnRsPSdkZWZpbmUnCitkX2xyb3VuZD0nZGVmaW5lJworZF9scm91bmRsPSdkZWZpbmUnCitkX2xzZWVrcHJvdG89J2RlZmluZScKK2RfbHN0YXQ9J2RlZmluZScKK2RfbWFkdmlzZT0nZGVmaW5lJworZF9tYWxsb2NfZ29vZF9zaXplPSd1bmRlZicKK2RfbWFsbG9jX3NpemU9J3VuZGVmJworZF9tYmxlbj0nZGVmaW5lJworZF9tYnN0b3djcz0nZGVmaW5lJworZF9tYnRvd2M9J2RlZmluZScKK2RfbWVtY2hyPSdkZWZpbmUnCitkX21lbWNtcD0nZGVmaW5lJworZF9tZW1jcHk9J2RlZmluZScKK2RfbWVtbW92ZT0nZGVmaW5lJworZF9tZW1zZXQ9J2RlZmluZScKK2RfbWtkaXI9J2RlZmluZScKK2RfbWtkdGVtcD0nZGVmaW5lJworZF9ta2ZpZm89J2RlZmluZScKK2RfbWtzdGVtcD0nZGVmaW5lJworZF9ta3N0ZW1wcz0nZGVmaW5lJworZF9ta3RpbWU2ND0ndW5kZWYnCitkX21rdGltZT0nZGVmaW5lJworZF9tbWFwPSdkZWZpbmUnCitkX21vZGZsPSdkZWZpbmUnCitkX21vZGZsX3BvdzMyX2J1Zz0ndW5kZWYnCitkX21vZGZscHJvdG89J2RlZmluZScKK2RfbXByb3RlY3Q9J2RlZmluZScKK2RfbXNnPSdkZWZpbmUnCitkX21zZ19jdHJ1bmM9J2RlZmluZScKK2RfbXNnX2RvbnRyb3V0ZT0nZGVmaW5lJworZF9tc2dfb29iPSdkZWZpbmUnCitkX21zZ19wZWVrPSdkZWZpbmUnCitkX21zZ19wcm94eT0nZGVmaW5lJworZF9tc2djdGw9J2RlZmluZScKK2RfbXNnZ2V0PSdkZWZpbmUnCitkX21zZ2hkcl9zPSdkZWZpbmUnCitkX21zZ3Jjdj0nZGVmaW5lJworZF9tc2dzbmQ9J2RlZmluZScKK2RfbXN5bmM9J2RlZmluZScKK2RfbXVubWFwPSdkZWZpbmUnCitkX215bWFsbG9jPSd1bmRlZicKK2RfbmFuPSdkZWZpbmUnCitkX25kYm09J2RlZmluZScKK2RfbmRibV9oX3VzZXNfcHJvdG90eXBlcz0ndW5kZWYnCitkX25lYXJieWludD0nZGVmaW5lJworZF9uZXh0YWZ0ZXI9J2RlZmluZScKK2RfbmV4dHRvd2FyZD0nZGVmaW5lJworZF9uaWNlPSdkZWZpbmUnCitkX25sX2xhbmdpbmZvPSdkZWZpbmUnCitkX252X3ByZXNlcnZlc191dj0ndW5kZWYnCitkX252X3plcm9faXNfYWxsYml0c196ZXJvPSdkZWZpbmUnCitkX29mZjY0X3Q9J2RlZmluZScKK2Rfb2xkX3B0aHJlYWRfY3JlYXRlX2pvaW5hYmxlPSd1bmRlZicKK2Rfb2xkcHRocmVhZHM9J3VuZGVmJworZF9vbGRzb2NrPSd1bmRlZicKK2Rfb3BlbjM9J2RlZmluZScKK2RfcGF0aGNvbmY9J2RlZmluZScKK2RfcGF1c2U9J2RlZmluZScKK2RfcGVybF9vdGhlcmxpYmRpcnM9J2RlZmluZScKK2RfcGhvc3RuYW1lPSd1bmRlZicKK2RfcGlwZT0nZGVmaW5lJworZF9wb2xsPSdkZWZpbmUnCitkX3BvcnRhYmxlPSdkZWZpbmUnCitkX3ByY3RsPSdkZWZpbmUnCitkX3ByY3RsX3NldF9uYW1lPSdkZWZpbmUnCitkX3ByaW50Zl9mb3JtYXRfbnVsbD0ndW5kZWYnCitkX3Byb2NzZWxmZXhlPSdkZWZpbmUnCitkX3BzZXVkb2Zvcms9J3VuZGVmJworZF9wdGhyZWFkX2F0Zm9yaz0nZGVmaW5lJworZF9wdGhyZWFkX2F0dHJfc2V0c2NvcGU9J2RlZmluZScKK2RfcHRocmVhZF95aWVsZD0nZGVmaW5lJworZF9wdHJkaWZmX3Q9J2RlZmluZScKK2RfcHdhZ2U9J3VuZGVmJworZF9wd2NoYW5nZT0ndW5kZWYnCitkX3B3Y2xhc3M9J3VuZGVmJworZF9wd2NvbW1lbnQ9J3VuZGVmJworZF9wd2V4cGlyZT0ndW5kZWYnCitkX3B3Z2Vjb3M9J2RlZmluZScKK2RfcHdwYXNzd2Q9J2RlZmluZScKK2RfcHdxdW90YT0ndW5kZWYnCitkX3FnY3Z0PSdkZWZpbmUnCitkX3F1YWQ9J2RlZmluZScKK2RfcmFuZG9tX3I9J2RlZmluZScKK2RfcmVfY29tcD0ndW5kZWYnCitkX3JlYWRkaXI2NF9yPSdkZWZpbmUnCitkX3JlYWRkaXI9J2RlZmluZScKK2RfcmVhZGRpcl9yPSdkZWZpbmUnCitkX3JlYWRsaW5rPSdkZWZpbmUnCitkX3JlYWR2PSdkZWZpbmUnCitkX3JlY3Ztc2c9J2RlZmluZScKK2RfcmVnY21wPSd1bmRlZicKK2RfcmVnY29tcD0nZGVmaW5lJworZF9yZW1haW5kZXI9J2RlZmluZScKK2RfcmVtcXVvPSdkZWZpbmUnCitkX3JlbmFtZT0nZGVmaW5lJworZF9yZXdpbmRkaXI9J2RlZmluZScKK2RfcmludD0nZGVmaW5lJworZF9ybWRpcj0nZGVmaW5lJworZF9yb3VuZD0nZGVmaW5lJworZF9zYWZlYmNweT0ndW5kZWYnCitkX3NhZmVtY3B5PSd1bmRlZicKK2Rfc2FuZW1jbXA9J2RlZmluZScKK2Rfc2Jya3Byb3RvPSdkZWZpbmUnCitkX3NjYWxibj0nZGVmaW5lJworZF9zY2FsYm5sPSdkZWZpbmUnCitkX3NjaGVkX3lpZWxkPSdkZWZpbmUnCitkX3NjbV9yaWdodHM9J2RlZmluZScKK2Rfc2Vla2Rpcj0nZGVmaW5lJworZF9zZWxlY3Q9J2RlZmluZScKK2Rfc2VtPSdkZWZpbmUnCitkX3NlbWN0bD0nZGVmaW5lJworZF9zZW1jdGxfc2VtaWRfZHM9J2RlZmluZScKK2Rfc2VtY3RsX3NlbXVuPSdkZWZpbmUnCitkX3NlbWdldD0nZGVmaW5lJworZF9zZW1vcD0nZGVmaW5lJworZF9zZW5kbXNnPSdkZWZpbmUnCitkX3NldGVnaWQ9J2RlZmluZScKK2Rfc2V0ZXVpZD0nZGVmaW5lJworZF9zZXRncmVudD0nZGVmaW5lJworZF9zZXRncmVudF9yPSd1bmRlZicKK2Rfc2V0Z3Jwcz0nZGVmaW5lJworZF9zZXRoZW50PSdkZWZpbmUnCitkX3NldGhvc3RlbnRfcj0ndW5kZWYnCitkX3NldGl0aW1lcj0nZGVmaW5lJworZF9zZXRsaW5lYnVmPSdkZWZpbmUnCitkX3NldGxvY2FsZT0nZGVmaW5lJworZF9zZXRsb2NhbGVfcj0ndW5kZWYnCitkX3NldG5lbnQ9J2RlZmluZScKK2Rfc2V0bmV0ZW50X3I9J3VuZGVmJworZF9zZXRwZW50PSdkZWZpbmUnCitkX3NldHBnaWQ9J2RlZmluZScKK2Rfc2V0cGdycDI9J3VuZGVmJworZF9zZXRwZ3JwPSdkZWZpbmUnCitkX3NldHByaW9yPSdkZWZpbmUnCitkX3NldHByb2N0aXRsZT0ndW5kZWYnCitkX3NldHByb3RvZW50X3I9J3VuZGVmJworZF9zZXRwd2VudD0nZGVmaW5lJworZF9zZXRwd2VudF9yPSd1bmRlZicKK2Rfc2V0cmVnaWQ9J2RlZmluZScKK2Rfc2V0cmVzZ2lkPSdkZWZpbmUnCitkX3NldHJlc3VpZD0nZGVmaW5lJworZF9zZXRyZXVpZD0nZGVmaW5lJworZF9zZXRyZ2lkPSd1bmRlZicKK2Rfc2V0cnVpZD0ndW5kZWYnCitkX3NldHNlbnQ9J2RlZmluZScKK2Rfc2V0c2VydmVudF9yPSd1bmRlZicKK2Rfc2V0c2lkPSdkZWZpbmUnCitkX3NldHZidWY9J2RlZmluZScKK2Rfc2htPSdkZWZpbmUnCitkX3NobWF0PSdkZWZpbmUnCitkX3NobWF0cHJvdG90eXBlPSdkZWZpbmUnCitkX3NobWN0bD0nZGVmaW5lJworZF9zaG1kdD0nZGVmaW5lJworZF9zaG1nZXQ9J2RlZmluZScKK2Rfc2lnYWN0aW9uPSdkZWZpbmUnCitkX3NpZ25iaXQ9J2RlZmluZScKK2Rfc2lncHJvY21hc2s9J2RlZmluZScKK2Rfc2lnc2V0am1wPSdkZWZpbmUnCitkX3NpbjZfc2NvcGVfaWQ9J2RlZmluZScKK2Rfc2l0ZWFyY2g9J2RlZmluZScKK2Rfc25wcmludGY9J2RlZmluZScKK2Rfc29ja2FkZHJfaW42PSdkZWZpbmUnCitkX3NvY2thZGRyX3NhX2xlbj0ndW5kZWYnCitkX3NvY2thdG1hcms9J2RlZmluZScKK2Rfc29ja2F0bWFya3Byb3RvPSdkZWZpbmUnCitkX3NvY2tldD0nZGVmaW5lJworZF9zb2NrbGVuX3Q9J2RlZmluZScKK2Rfc29ja3BhaXI9J2RlZmluZScKK2Rfc29ja3M1X2luaXQ9J3VuZGVmJworZF9zcHJpbnRmX3JldHVybnNfc3RybGVuPSdkZWZpbmUnCitkX3NxcnRsPSdkZWZpbmUnCitkX3NyYW5kNDhfcj0nZGVmaW5lJworZF9zcmFuZG9tX3I9J2RlZmluZScKK2Rfc3Jlc2dwcm90bz0nZGVmaW5lJworZF9zcmVzdXByb3RvPSdkZWZpbmUnCitkX3N0YXQ9J2RlZmluZScKK2Rfc3RhdGJsa3M9J2RlZmluZScKK2Rfc3RhdGZzX2ZfZmxhZ3M9J2RlZmluZScKK2Rfc3RhdGZzX3M9J2RlZmluZScKK2Rfc3RhdGljX2lubGluZT0nZGVmaW5lJworZF9zdGF0dmZzPSdkZWZpbmUnCitkX3N0ZGlvX2NudF9sdmFsPSd1bmRlZicKK2Rfc3RkaW9fcHRyX2x2YWw9J3VuZGVmJworZF9zdGRpb19wdHJfbHZhbF9ub2NoYW5nZV9jbnQ9J3VuZGVmJworZF9zdGRpb19wdHJfbHZhbF9zZXRzX2NudD0ndW5kZWYnCitkX3N0ZGlvX3N0cmVhbV9hcnJheT0ndW5kZWYnCitkX3N0ZGlvYmFzZT0ndW5kZWYnCitkX3N0ZHN0ZGlvPSd1bmRlZicKK2Rfc3RyY2hyPSdkZWZpbmUnCitkX3N0cmNvbGw9J2RlZmluZScKK2Rfc3RyY3RjcHk9J2RlZmluZScKK2Rfc3RyZXJybT0nc3RyZXJyb3IoZSknCitkX3N0cmVycm9yPSdkZWZpbmUnCitkX3N0cmVycm9yX3I9J2RlZmluZScKK2Rfc3RyZnRpbWU9J2RlZmluZScKK2Rfc3RybGNhdD0ndW5kZWYnCitkX3N0cmxjcHk9J3VuZGVmJworZF9zdHJ0b2Q9J2RlZmluZScKK2Rfc3RydG9sPSdkZWZpbmUnCitkX3N0cnRvbGQ9J2RlZmluZScKK2Rfc3RydG9sbD0nZGVmaW5lJworZF9zdHJ0b3E9J2RlZmluZScKK2Rfc3RydG91bD0nZGVmaW5lJworZF9zdHJ0b3VsbD0nZGVmaW5lJworZF9zdHJ0b3VxPSdkZWZpbmUnCitkX3N0cnhmcm09J2RlZmluZScKK2Rfc3VpZHNhZmU9J3VuZGVmJworZF9zeW1saW5rPSdkZWZpbmUnCitkX3N5c2NhbGw9J2RlZmluZScKK2Rfc3lzY2FsbHByb3RvPSdkZWZpbmUnCitkX3N5c2NvbmY9J2RlZmluZScKK2Rfc3lzZXJubHN0PScnCitkX3N5c2VycmxzdD0nZGVmaW5lJworZF9zeXN0ZW09J2RlZmluZScKK2RfdGNnZXRwZ3JwPSdkZWZpbmUnCitkX3Rjc2V0cGdycD0nZGVmaW5lJworZF90ZWxsZGlyPSdkZWZpbmUnCitkX3RlbGxkaXJwcm90bz0nZGVmaW5lJworZF90Z2FtbWE9J2RlZmluZScKK2RfdGltZT0nZGVmaW5lJworZF90aW1lZ209J2RlZmluZScKK2RfdGltZXM9J2RlZmluZScKK2RfdG1fdG1fZ210b2ZmPSdkZWZpbmUnCitkX3RtX3RtX3pvbmU9J2RlZmluZScKK2RfdG1wbmFtX3I9J2RlZmluZScKK2RfdHJ1bmM9J2RlZmluZScKK2RfdHJ1bmNhdGU9J2RlZmluZScKK2RfdHJ1bmNsPSdkZWZpbmUnCitkX3R0eW5hbWVfcj0nZGVmaW5lJworZF90em5hbWU9J2RlZmluZScKK2RfdTMyYWxpZ249J2RlZmluZScKK2RfdWFsYXJtPSdkZWZpbmUnCitkX3VtYXNrPSdkZWZpbmUnCitkX3VuYW1lPSdkZWZpbmUnCitkX3VuaW9uX3NlbXVuPSd1bmRlZicKK2RfdW5vcmRlcmVkPSd1bmRlZicKK2RfdW5zZXRlbnY9J2RlZmluZScKK2RfdXNsZWVwPSdkZWZpbmUnCitkX3VzbGVlcHByb3RvPSdkZWZpbmUnCitkX3VzdGF0PSdkZWZpbmUnCitkX3ZlbmRvcmFyY2g9J2RlZmluZScKK2RfdmVuZG9yYmluPSdkZWZpbmUnCitkX3ZlbmRvcmxpYj0nZGVmaW5lJworZF92ZW5kb3JzY3JpcHQ9J2RlZmluZScKK2RfdmZvcms9J3VuZGVmJworZF92b2lkX2Nsb3NlZGlyPSd1bmRlZicKK2Rfdm9pZHNpZz0nZGVmaW5lJworZF92b2lkdHR5PScnCitkX3ZvbGF0aWxlPSdkZWZpbmUnCitkX3ZwcmludGY9J2RlZmluZScKK2RfdnNucHJpbnRmPSdkZWZpbmUnCitkX3dhaXQ0PSdkZWZpbmUnCitkX3dhaXRwaWQ9J2RlZmluZScKK2Rfd2NzY21wPSdkZWZpbmUnCitkX3djc3RvbWJzPSdkZWZpbmUnCitkX3djc3hmcm09J2RlZmluZScKK2Rfd2N0b21iPSdkZWZpbmUnCitkX3dyaXRldj0nZGVmaW5lJworZF94ZW5peD0ndW5kZWYnCitkYXRlPSdkYXRlJworZGJfaGFzaHR5cGU9J3VfaW50MzJfdCcKK2RiX3ByZWZpeHR5cGU9J3NpemVfdCcKK2RiX3ZlcnNpb25fbWFqb3I9JycKK2RiX3ZlcnNpb25fbWlub3I9JycKK2RiX3ZlcnNpb25fcGF0Y2g9JycKK2RpcmVudHJ5dHlwZT0nc3RydWN0IGRpcmVudCcKK2RsZXh0PSdzbycKK2Rsc3JjPSdkbF9kbG9wZW4ueHMnCitkb3VibGVraW5kPSczJworZG91Ymxlc2l6ZT0nOCcKK2RyYW5kMDE9J1BlcmxfZHJhbmQ0OCgpJworZHJhbmQ0OF9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9TVCcKK2R0cmFjZT0nJworZHluYW1pY19leHQ9J0IgQ29tcHJlc3MvUmF3L0J6aXAyIENvbXByZXNzL1Jhdy9abGliIEN3ZCBEYXRhL0R1bXBlciBEZXZlbC9QUFBvcnQgRGV2ZWwvUGVlayBEaWdlc3QvTUQ1IERpZ2VzdC9TSEEgRW5jb2RlIEZjbnRsIEZpbGUvRG9zR2xvYiBGaWxlL0dsb2IgRmlsdGVyL1V0aWwvQ2FsbCBIYXNoL1V0aWwgSGFzaC9VdGlsL0ZpZWxkSGFzaCBJMThOL0xhbmdpbmZvIElPIElQQy9TeXNWIExpc3QvVXRpbCBNSU1FL0Jhc2U2NCBNYXRoL0JpZ0ludC9GYXN0Q2FsYyBOREJNX0ZpbGUgT0RCTV9GaWxlIE9wY29kZSBQT1NJWCBQZXJsSU8vZW5jb2RpbmcgUGVybElPL21tYXAgUGVybElPL3NjYWxhciBQZXJsSU8vdmlhIFNEQk1fRmlsZSBTb2NrZXQgU3RvcmFibGUgU3lzL0hvc3RuYW1lIFN5cy9TeXNsb2cgVGllL0hhc2gvTmFtZWRDYXB0dXJlIFRpbWUvSGlSZXMgVGltZS9QaWVjZSBVbmljb2RlL0NvbGxhdGUgWFMvQVBJdGVzdCBYUy9UeXBlbWFwIGFyeWJhc2UgYXR0cmlidXRlcyBtcm8gcmUgdGhyZWFkcyB0aHJlYWRzL3NoYXJlZCcKK2VhZ2Fpbj0nRUFHQUlOJworZWJjZGljPSd1bmRlZicKK2VjaG89J2VjaG8nCitlZ3JlcD0nZWdyZXAnCitlbWFjcz0nJworZW5kZ3JlbnRfcl9wcm90bz0nMCcKK2VuZGhvc3RlbnRfcl9wcm90bz0nMCcKK2VuZG5ldGVudF9yX3Byb3RvPScwJworZW5kcHJvdG9lbnRfcl9wcm90bz0nMCcKK2VuZHB3ZW50X3JfcHJvdG89JzAnCitlbmRzZXJ2ZW50X3JfcHJvdG89JzAnCitldW5pY2VmaXg9JzonCitleGVfZXh0PScnCitleHByPSdleHByJworZXh0ZW5zaW9ucz0nQiBDb21wcmVzcy9SYXcvQnppcDIgQ29tcHJlc3MvUmF3L1psaWIgQ3dkIERhdGEvRHVtcGVyIERldmVsL1BQUG9ydCBEZXZlbC9QZWVrIERpZ2VzdC9NRDUgRGlnZXN0L1NIQSBFbmNvZGUgRmNudGwgRmlsZS9Eb3NHbG9iIEZpbGUvR2xvYiBGaWx0ZXIvVXRpbC9DYWxsIEhhc2gvVXRpbCBIYXNoL1V0aWwvRmllbGRIYXNoIEkxOE4vTGFuZ2luZm8gSU8gSVBDL1N5c1YgTGlzdC9VdGlsIE1JTUUvQmFzZTY0IE1hdGgvQmlnSW50L0Zhc3RDYWxjIE5EQk1fRmlsZSBPREJNX0ZpbGUgT3Bjb2RlIFBPU0lYIFBlcmxJTy9lbmNvZGluZyBQZXJsSU8vbW1hcCBQZXJsSU8vc2NhbGFyIFBlcmxJTy92aWEgU0RCTV9GaWxlIFNvY2tldCBTdG9yYWJsZSBTeXMvSG9zdG5hbWUgU3lzL1N5c2xvZyBUaWUvSGFzaC9OYW1lZENhcHR1cmUgVGltZS9IaVJlcyBUaW1lL1BpZWNlIFVuaWNvZGUvQ29sbGF0ZSBYUy9BUEl0ZXN0IFhTL1R5cGVtYXAgYXJ5YmFzZSBhdHRyaWJ1dGVzIG1ybyByZSB0aHJlYWRzIHRocmVhZHMvc2hhcmVkIEFyY2hpdmUvVGFyIEF0dHJpYnV0ZS9IYW5kbGVycyBBdXRvTG9hZGVyIEIvRGVidWcgQ1BBTiBDUEFOL01ldGEgQ1BBTi9NZXRhL1JlcXVpcmVtZW50cyBDUEFOL01ldGEvWUFNTCBDYXJwIENvbmZpZy9QZXJsL1YgRGV2ZWwvU2VsZlN0dWJiZXIgRGlnZXN0IER1bXB2YWx1ZSBFbnYgRXJybm8gRXhwb3J0ZXIgRXh0VXRpbHMvQ0J1aWxkZXIgRXh0VXRpbHMvQ29tbWFuZCBFeHRVdGlscy9Db25zdGFudCBFeHRVdGlscy9JbnN0YWxsIEV4dFV0aWxzL01ha2VNYWtlciBFeHRVdGlscy9NYW5pZmVzdCBFeHRVdGlscy9NaW5pcGVybCBFeHRVdGlscy9QYXJzZVhTIEZpbGUvRmV0Y2ggRmlsZS9GaW5kIEZpbGUvUGF0aCBGaWxlL1RlbXAgRmlsZUNhY2hlIEZpbHRlci9TaW1wbGUgR2V0b3B0L0xvbmcgSFRUUC9UaW55IEkxOE4vQ29sbGF0ZSBJMThOL0xhbmdUYWdzIElPL0NvbXByZXNzIElPL1NvY2tldC9JUCBJTy9abGliIElQQy9DbWQgSVBDL09wZW4zIEpTT04vUFAgTG9jYWxlL0NvZGVzIExvY2FsZS9NYWtldGV4dCBMb2NhbGUvTWFrZXRleHQvU2ltcGxlIE1hdGgvQmlnSW50IE1hdGgvQmlnUmF0IE1hdGgvQ29tcGxleCBNZW1vaXplIE1vZHVsZS9Db3JlTGlzdCBNb2R1bGUvTG9hZCBNb2R1bGUvTG9hZC9Db25kaXRpb25hbCBNb2R1bGUvTG9hZGVkIE1vZHVsZS9NZXRhZGF0YSBORVhUIE5ldC9QaW5nIFBhcmFtcy9DaGVjayBQYXJzZS9DUEFOL01ldGEgUGVybC9PU1R5cGUgUGVybElPL3ZpYS9RdW90ZWRQcmludCBQb2QvQ2hlY2tlciBQb2QvRXNjYXBlcyBQb2QvRnVuY3Rpb25zIFBvZC9IdG1sIFBvZC9QYXJzZXIgUG9kL1Blcmxkb2MgUG9kL1NpbXBsZSBQb2QvVXNhZ2UgU2FmZSBTZWFyY2gvRGljdCBTZWxmTG9hZGVyIFRlcm0vQU5TSUNvbG9yIFRlcm0vQ2FwIFRlcm0vQ29tcGxldGUgVGVybS9SZWFkTGluZSBUZXN0IFRlc3QvSGFybmVzcyBUZXN0L1NpbXBsZSBUZXh0L0FiYnJldiBUZXh0L0JhbGFuY2VkIFRleHQvUGFyc2VXb3JkcyBUZXh0L1RhYnMgVGhyZWFkL1F1ZXVlIFRocmVhZC9TZW1hcGhvcmUgVGllL0ZpbGUgVGllL01lbW9pemUgVGllL1JlZkhhc2ggVGltZS9Mb2NhbCBVbmljb2RlL05vcm1hbGl6ZSBYU0xvYWRlciBhdXRvZGllIGF1dG91c2UgYmFzZSBiaWdudW0gY29uc3RhbnQgZW5jb2Rpbmcvd2FybmluZ3MgZXhwZXJpbWVudGFsIGlmIGxpYiBsaWJuZXQgcGFyZW50IHBlcmxmYXEgcG9kbGF0b3JzIHZlcnNpb24nCitleHRlcm5fQz0nZXh0ZXJuJworZXh0cmFzPScnCitmZmx1c2hOVUxMPSdkZWZpbmUnCitmZmx1c2hhbGw9J3VuZGVmJworZmluZD0nJworZmlyc3RtYWtlZmlsZT0nbWFrZWZpbGUnCitmbGV4PScnCitmcG9zc2l6ZT0nMTYnCitmcG9zdHlwZT0nZnBvc190JworZnJlZXR5cGU9J3ZvaWQnCitmcm9tPSc6JworZnVsbF9hcj0nYXInCitmdWxsX2NzaD0nY3NoJworZnVsbF9zZWQ9J3NlZCcKK2djY2Fuc2lwZWRhbnRpYz0nJworZ2Njb3NhbmR2ZXJzPScnCitnY2N2ZXJzaW9uPSc0LjkuMicKK2dldGdyZW50X3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1NCV1InCitnZXRncmdpZF9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9UU0JXUicKK2dldGdybmFtX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX0NTQldSJworZ2V0aG9zdGJ5YWRkcl9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9Uc0lTQldSRScKK2dldGhvc3RieW5hbWVfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfQ1NCV1JFJworZ2V0aG9zdGVudF9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9TQldSRScKK2dldGxvZ2luX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX0JXJworZ2V0bmV0YnlhZGRyX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX3VJU0JXUkUnCitnZXRuZXRieW5hbWVfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfQ1NCV1JFJworZ2V0bmV0ZW50X3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1NCV1JFJworZ2V0cHJvdG9ieW5hbWVfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfQ1NCV1InCitnZXRwcm90b2J5bnVtYmVyX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX0lTQldSJworZ2V0cHJvdG9lbnRfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfU0JXUicKK2dldHB3ZW50X3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1NCV1InCitnZXRwd25hbV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9DU0JXUicKK2dldHB3dWlkX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1RTQldSJworZ2V0c2VydmJ5bmFtZV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9DQ1NCV1InCitnZXRzZXJ2Ynlwb3J0X3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX0lDU0JXUicKK2dldHNlcnZlbnRfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfU0JXUicKK2dldHNwbmFtX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX0NTQldSJworZ2lkZm9ybWF0PScidSInCitnaWRzaWduPScxJworZ2lkc2l6ZT0nNCcKK2dpZHR5cGU9J2dpZF90JworZ2xpYnB0aD0nQEVYRUNQUkVGSVhAL3NobGliICBAQkFTRUxJQkRJUkAgQExJQkRJUkAgQExJQkRJUkAvMzg2IEBCQVNFTElCRElSQDM4NiBARVhFQ1BSRUZJWEAvY2NzQEJBU0VMSUJESVJAIEBFWEVDUFJFRklYQC91Y2JsaWIgQEVYRUNQUkVGSVhAL2xvY2FsQEJBU0VMSUJESVJAIEBCQVNFTElCRElSQCBATElCRElSQCBARVhFQ1BSRUZJWEAvbG9jYWxAQkFTRUxJQkRJUkAgJworZ21ha2U9J2dtYWtlJworZ210aW1lX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19TX1RTJworZ251bGliY192ZXJzaW9uPScyLjIxJworZ3JlcD0nZ3JlcCcKK2dyb3VwY2F0PSdjYXQgL2V0Yy9ncm91cCcKK2dyb3Vwc3R5cGU9J2dpZF90JworZ3ppcD0nZ3ppcCcKK2hfZmNudGw9J2ZhbHNlJworaF9zeXNmaWxlPSd0cnVlJworaGludD0ncmVjb21tZW5kZWQnCitob3N0Y2F0PSdjYXQgL2V0Yy9ob3N0cycKK2hvc3RnZW5lcmF0ZT0nJworaG9zdG9zbmFtZT0nJworaG9zdHBlcmw9JycKK2h0bWwxZGlyPScgJworaHRtbDFkaXJleHA9JycKK2h0bWwzZGlyPScgJworaHRtbDNkaXJleHA9JycKK2kxNnNpemU9JzInCitpMTZ0eXBlPSdzaG9ydCcKK2kzMnNpemU9JzQnCitpMzJ0eXBlPSdpbnQnCitpNjRzaXplPSc4JworaTY0dHlwZT0nbG9uZycKK2k4c2l6ZT0nMScKK2k4dHlwZT0nc2lnbmVkIGNoYXInCitpX2FycGFpbmV0PSdkZWZpbmUnCitpX2Fzc2VydD0nZGVmaW5lJworaV9iZmQ9J2RlZmluZScKK2lfYnNkaW9jdGw9JycKK2lfY3J5cHQ9J2RlZmluZScKK2lfZGI9J3VuZGVmJworaV9kYm09J2RlZmluZScKK2lfZGlyZW50PSdkZWZpbmUnCitpX2RsZmNuPSdkZWZpbmUnCitpX2V4ZWNpbmZvPSdkZWZpbmUnCitpX2ZjbnRsPSd1bmRlZicKK2lfZmVudj0nZGVmaW5lJworaV9mbG9hdD0nZGVmaW5lJworaV9mcD0ndW5kZWYnCitpX2ZwX2NsYXNzPSd1bmRlZicKK2lfZ2RibT0ndW5kZWYnCitpX2dkYm1fbmRibT0ndW5kZWYnCitpX2dkYm1uZGJtPSdkZWZpbmUnCitpX2dycD0nZGVmaW5lJworaV9pZWVlZnA9J3VuZGVmJworaV9pbnR0eXBlcz0nZGVmaW5lJworaV9sYW5naW5mbz0nZGVmaW5lJworaV9saWJ1dGlsPSd1bmRlZicKK2lfbGltaXRzPSdkZWZpbmUnCitpX2xvY2FsZT0nZGVmaW5lJworaV9tYWNoY3Rocj0ndW5kZWYnCitpX21hbGxvYz0nZGVmaW5lJworaV9tYWxsb2NtYWxsb2M9J3VuZGVmJworaV9tYXRoPSdkZWZpbmUnCitpX21lbW9yeT0ndW5kZWYnCitpX21udGVudD0nZGVmaW5lJworaV9uZGJtPSd1bmRlZicKK2lfbmV0ZGI9J2RlZmluZScKK2lfbmV0ZXJybm89J3VuZGVmJworaV9uZXRpbmV0dGNwPSdkZWZpbmUnCitpX25paW49J2RlZmluZScKK2lfcG9sbD0nZGVmaW5lJworaV9wcm90PSd1bmRlZicKK2lfcHRocmVhZD0nZGVmaW5lJworaV9wd2Q9J2RlZmluZScKK2lfcXVhZG1hdGg9J3VuZGVmJworaV9ycGNzdmNkYm09J3VuZGVmJworaV9zZ3R0eT0ndW5kZWYnCitpX3NoYWRvdz0nZGVmaW5lJworaV9zb2Nrcz0ndW5kZWYnCitpX3N0ZGFyZz0nZGVmaW5lJworaV9zdGRib29sPSdkZWZpbmUnCitpX3N0ZGRlZj0nZGVmaW5lJworaV9zdGRpbnQ9J2RlZmluZScKK2lfc3RkbGliPSdkZWZpbmUnCitpX3N0cmluZz0nZGVmaW5lJworaV9zdW5tYXRoPSd1bmRlZicKK2lfc3lzYWNjZXNzPSd1bmRlZicKK2lfc3lzZGlyPSdkZWZpbmUnCitpX3N5c2ZpbGU9J2RlZmluZScKK2lfc3lzZmlsaW89J3VuZGVmJworaV9zeXNpbj0ndW5kZWYnCitpX3N5c2lvY3RsPSdkZWZpbmUnCitpX3N5c2xvZz0nZGVmaW5lJworaV9zeXNtbWFuPSdkZWZpbmUnCitpX3N5c21vZGU9J3VuZGVmJworaV9zeXNtb3VudD0nZGVmaW5lJworaV9zeXNuZGlyPSd1bmRlZicKK2lfc3lzcGFyYW09J2RlZmluZScKK2lfc3lzcG9sbD0nZGVmaW5lJworaV9zeXNyZXNyYz0nZGVmaW5lJworaV9zeXNzZWNydD0ndW5kZWYnCitpX3N5c3NlbGN0PSdkZWZpbmUnCitpX3N5c3NvY2tpbz0ndW5kZWYnCitpX3N5c3N0YXQ9J2RlZmluZScKK2lfc3lzc3RhdGZzPSdkZWZpbmUnCitpX3N5c3N0YXR2ZnM9J2RlZmluZScKK2lfc3lzdGltZT0nZGVmaW5lJworaV9zeXN0aW1laz0ndW5kZWYnCitpX3N5c3RpbWVzPSdkZWZpbmUnCitpX3N5c3R5cGVzPSdkZWZpbmUnCitpX3N5c3Vpbz0nZGVmaW5lJworaV9zeXN1bj0nZGVmaW5lJworaV9zeXN1dHNuYW1lPSdkZWZpbmUnCitpX3N5c3Zmcz0nZGVmaW5lJworaV9zeXN3YWl0PSdkZWZpbmUnCitpX3Rlcm1pbz0ndW5kZWYnCitpX3Rlcm1pb3M9J2RlZmluZScKK2lfdGltZT0nZGVmaW5lJworaV91bmlzdGQ9J2RlZmluZScKK2lfdXN0YXQ9J2RlZmluZScKK2lfdXRpbWU9J2RlZmluZScKK2lfdmFsdWVzPSdkZWZpbmUnCitpX3ZhcmFyZ3M9J3VuZGVmJworaV92YXJoZHI9J3N0ZGFyZy5oJworaV92Zm9yaz0ndW5kZWYnCitpZ25vcmVfdmVyc2lvbmVkX3NvbGlicz0neScKK2luY192ZXJzaW9uX2xpc3Q9JyAnCitpbmNfdmVyc2lvbl9saXN0X2luaXQ9JzAnCitpbmNwYXRoPScnCitpbmV3cz0nJworaW5pdGlhbGluc3RhbGxsb2NhdGlvbj0nQFVTUkJJTkAnCitpbnN0YWxsYXJjaGxpYj0nQExJQkRJUkAvcGVybC81LjIyLjAvQEFSQ0hALXRocmVhZC1tdWx0aScKK2luc3RhbGxiaW49J0BVU1JCSU5AJworaW5zdGFsbGh0bWwxZGlyPScnCitpbnN0YWxsaHRtbDNkaXI9JycKK2luc3RhbGxtYW4xZGlyPScnCitpbnN0YWxsbWFuM2Rpcj0nJworaW5zdGFsbHByZWZpeD0nQEVYRUNQUkVGSVhAJworaW5zdGFsbHByZWZpeGV4cD0nQEVYRUNQUkVGSVhAJworaW5zdGFsbHByaXZsaWI9J0BMSUJESVJAL3BlcmwvNS4yMi4wJworaW5zdGFsbHNjcmlwdD0nQFVTUkJJTkAnCitpbnN0YWxsc2l0ZWFyY2g9J0BMSUJESVJAL3Blcmwvc2l0ZV9wZXJsLzUuMjIuMC9AQVJDSEAtdGhyZWFkLW11bHRpJworaW5zdGFsbHNpdGViaW49J0BVU1JCSU5AJworaW5zdGFsbHNpdGVodG1sMWRpcj0nJworaW5zdGFsbHNpdGVodG1sM2Rpcj0nJworaW5zdGFsbHNpdGVsaWI9J0BMSUJESVJAL3Blcmwvc2l0ZV9wZXJsLzUuMjIuMCcKK2luc3RhbGxzaXRlbWFuMWRpcj0nJworaW5zdGFsbHNpdGVtYW4zZGlyPScnCitpbnN0YWxsc2l0ZXNjcmlwdD0nQFVTUkJJTkAnCitpbnN0YWxsc3R5bGU9J2xpYi9wZXJsJworaW5zdGFsbHVzcmJpbnBlcmw9J2RlZmluZScKK2luc3RhbGx2ZW5kb3JhcmNoPSdATElCRElSQC9wZXJsL3ZlbmRvcl9wZXJsLzUuMjIuMC9AQVJDSEAtdGhyZWFkLW11bHRpJworaW5zdGFsbHZlbmRvcmJpbj0nQFVTUkJJTkAnCitpbnN0YWxsdmVuZG9yaHRtbDFkaXI9JycKK2luc3RhbGx2ZW5kb3JodG1sM2Rpcj0nJworaW5zdGFsbHZlbmRvcmxpYj0nQExJQkRJUkAvcGVybC92ZW5kb3JfcGVybC81LjIyLjAnCitpbnN0YWxsdmVuZG9ybWFuMWRpcj0nJworaW5zdGFsbHZlbmRvcm1hbjNkaXI9JycKK2luc3RhbGx2ZW5kb3JzY3JpcHQ9J0BVU1JCSU5AJworaW50c2l6ZT0nNCcKK2lzc3ltbGluaz0ndGVzdCAtaCcKK2l2ZGZvcm1hdD0nImxkIicKK2l2c2l6ZT0nOCcKK2l2dHlwZT0nbG9uZycKK2tub3duX2V4dGVuc2lvbnM9J0FyY2hpdmUvVGFyIEF0dHJpYnV0ZS9IYW5kbGVycyBBdXRvTG9hZGVyIEIgQi9EZWJ1ZyBDUEFOIENQQU4vTWV0YSBDUEFOL01ldGEvUmVxdWlyZW1lbnRzIENQQU4vTWV0YS9ZQU1MIENhcnAgQ29tcHJlc3MvUmF3L0J6aXAyIENvbXByZXNzL1Jhdy9abGliIENvbmZpZy9QZXJsL1YgQ3dkIERCX0ZpbGUgRGF0YS9EdW1wZXIgRGV2ZWwvUFBQb3J0IERldmVsL1BlZWsgRGV2ZWwvU2VsZlN0dWJiZXIgRGlnZXN0IERpZ2VzdC9NRDUgRGlnZXN0L1NIQSBEdW1wdmFsdWUgRW5jb2RlIEVudiBFcnJubyBFeHBvcnRlciBFeHRVdGlscy9DQnVpbGRlciBFeHRVdGlscy9Db21tYW5kIEV4dFV0aWxzL0NvbnN0YW50IEV4dFV0aWxzL0luc3RhbGwgRXh0VXRpbHMvTWFrZU1ha2VyIEV4dFV0aWxzL01hbmlmZXN0IEV4dFV0aWxzL01pbmlwZXJsIEV4dFV0aWxzL1BhcnNlWFMgRmNudGwgRmlsZS9Eb3NHbG9iIEZpbGUvRmV0Y2ggRmlsZS9GaW5kIEZpbGUvR2xvYiBGaWxlL1BhdGggRmlsZS9UZW1wIEZpbGVDYWNoZSBGaWx0ZXIvU2ltcGxlIEZpbHRlci9VdGlsL0NhbGwgR0RCTV9GaWxlIEdldG9wdC9Mb25nIEhUVFAvVGlueSBIYXNoL1V0aWwgSGFzaC9VdGlsL0ZpZWxkSGFzaCBJMThOL0NvbGxhdGUgSTE4Ti9MYW5nVGFncyBJMThOL0xhbmdpbmZvIElPIElPL0NvbXByZXNzIElPL1NvY2tldC9JUCBJTy9abGliIElQQy9DbWQgSVBDL09wZW4zIElQQy9TeXNWIEpTT04vUFAgTGlzdC9VdGlsIExvY2FsZS9Db2RlcyBMb2NhbGUvTWFrZXRleHQgTG9jYWxlL01ha2V0ZXh0L1NpbXBsZSBNSU1FL0Jhc2U2NCBNYXRoL0JpZ0ludCBNYXRoL0JpZ0ludC9GYXN0Q2FsYyBNYXRoL0JpZ1JhdCBNYXRoL0NvbXBsZXggTWVtb2l6ZSBNb2R1bGUvQ29yZUxpc3QgTW9kdWxlL0xvYWQgTW9kdWxlL0xvYWQvQ29uZGl0aW9uYWwgTW9kdWxlL0xvYWRlZCBNb2R1bGUvTWV0YWRhdGEgTkRCTV9GaWxlIE5FWFQgTmV0L1BpbmcgT0RCTV9GaWxlIE9wY29kZSBQT1NJWCBQYXJhbXMvQ2hlY2sgUGFyc2UvQ1BBTi9NZXRhIFBlcmwvT1NUeXBlIFBlcmxJTy9lbmNvZGluZyBQZXJsSU8vbW1hcCBQZXJsSU8vc2NhbGFyIFBlcmxJTy92aWEgUGVybElPL3ZpYS9RdW90ZWRQcmludCBQb2QvQ2hlY2tlciBQb2QvRXNjYXBlcyBQb2QvRnVuY3Rpb25zIFBvZC9IdG1sIFBvZC9QYXJzZXIgUG9kL1Blcmxkb2MgUG9kL1NpbXBsZSBQb2QvVXNhZ2UgU0RCTV9GaWxlIFNhZmUgU2VhcmNoL0RpY3QgU2VsZkxvYWRlciBTb2NrZXQgU3RvcmFibGUgU3lzL0hvc3RuYW1lIFN5cy9TeXNsb2cgVGVybS9BTlNJQ29sb3IgVGVybS9DYXAgVGVybS9Db21wbGV0ZSBUZXJtL1JlYWRMaW5lIFRlc3QgVGVzdC9IYXJuZXNzIFRlc3QvU2ltcGxlIFRleHQvQWJicmV2IFRleHQvQmFsYW5jZWQgVGV4dC9QYXJzZVdvcmRzIFRleHQvVGFicyBUaHJlYWQvUXVldWUgVGhyZWFkL1NlbWFwaG9yZSBUaWUvRmlsZSBUaWUvSGFzaC9OYW1lZENhcHR1cmUgVGllL01lbW9pemUgVGllL1JlZkhhc2ggVGltZS9IaVJlcyBUaW1lL0xvY2FsIFRpbWUvUGllY2UgVW5pY29kZS9Db2xsYXRlIFVuaWNvZGUvTm9ybWFsaXplIFZNUy9EQ0xzeW0gVk1TL0ZpbGVzcGVjIFZNUy9TdGRpbyBXaW4zMiBXaW4zMkFQSS9GaWxlIFdpbjMyQ09SRSBYUy9BUEl0ZXN0IFhTL1R5cGVtYXAgWFNMb2FkZXIgYXJ5YmFzZSBhdHRyaWJ1dGVzIGF1dG9kaWUgYXV0b3VzZSBiYXNlIGJpZ251bSBjb25zdGFudCBlbmNvZGluZy93YXJuaW5ncyBleHBlcmltZW50YWwgaWYgbGliIGxpYm5ldCBtcm8gcGFyZW50IHBlcmxmYXEgcG9kbGF0b3JzIHJlIHRocmVhZHMgdGhyZWFkcy9zaGFyZWQgdmVyc2lvbiAnCitrc2g9JycKK2xkPSdnY2MnCitsZF9jYW5fc2NyaXB0PSdkZWZpbmUnCitsZGRsZmxhZ3M9Jy1zaGFyZWQgLU8yJworbGRmbGFncz0nJworbGRmbGFnc191c2VsYXJnZWZpbGVzPScnCitsZGxpYnB0aG5hbWU9J0xEX0xJQlJBUllfUEFUSCcKK2xlc3M9J2xlc3MnCitsaWJfZXh0PScuYScKK2xpYmM9J2xpYmMtMi4yMS5zbycKK2xpYnBlcmw9J2xpYnBlcmwuc28nCitsaWJwdGg9J0BMSUJESVJAIEBCQVNFTElCRElSQCcKK2xpYnM9Jy1scHRocmVhZCAtbG5zbCAtbGdkYm0gLWxkYiAtbGRsIC1sbSAtbGNyeXB0IC1sdXRpbCAtbGMgLWxnZGJtX2NvbXBhdCcKK2xpYnNkaXJzPScgQExJQkRJUkAnCitsaWJzZmlsZXM9JyBsaWJwdGhyZWFkLnNvIGxpYm5zbC5zbyBsaWJnZGJtLnNvIGxpYmRiLnNvIGxpYmRsLnNvIGxpYm0uc28gbGliY3J5cHQuc28gbGlidXRpbC5zbyBsaWJjLnNvIGxpYmdkYm1fY29tcGF0LnNvJworbGlic2ZvdW5kPScgQExJQkRJUkAvbGlicHRocmVhZC5zbyBATElCRElSQC9saWJuc2wuc28gQExJQkRJUkAvbGliZ2RibS5zbyBATElCRElSQC9saWJkYi5zbyBATElCRElSQC9saWJkbC5zbyBATElCRElSQC9saWJtLnNvIEBMSUJESVJAL2xpYmNyeXB0LnNvIEBMSUJESVJAL2xpYnV0aWwuc28gQExJQkRJUkAvbGliYy5zbyBATElCRElSQC9saWJnZGJtX2NvbXBhdC5zbycKK2xpYnNwYXRoPScgQExJQkRJUkAgQEJBU0VMSUJESVJAJworbGlic3dhbnRlZD0nY2wgcHRocmVhZCBzb2NrZXQgaW5ldCBuc2wgbm0gZ2RibSBkYm0gZGIgbWFsbG9jIGRsIGxkIHN1biBtIGNyeXB0IHNlYyB1dGlsIGMgY3Bvc2l4IHBvc2l4IHVjYiBCU0QgZ2RibV9jb21wYXQnCitsaWJzd2FudGVkX3VzZWxhcmdlZmlsZXM9JycKK2xpbmU9JycKK2xpbnQ9JycKK2xrZmxhZ3M9JycKK2xuPSdsbicKK2xucz0nL2Jpbi9sbiAtcycKK2xvY2FsdGltZV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fU19UUycKK2xvY2luY3B0aD0nQEVYRUNQUkVGSVhAL2xvY2FsL2luY2x1ZGUgL29wdC9sb2NhbC9pbmNsdWRlIEBFWEVDUFJFRklYQC9nbnUvaW5jbHVkZSAvb3B0L2dudS9pbmNsdWRlIEBFWEVDUFJFRklYQC9HTlUvaW5jbHVkZSAvb3B0L0dOVS9pbmNsdWRlJworbG9jbGlicHRoPSdARVhFQ1BSRUZJWEAvbG9jYWxAQkFTRUxJQkRJUkAgL29wdC9sb2NhbEBCQVNFTElCRElSQCBARVhFQ1BSRUZJWEAvZ251QEJBU0VMSUJESVJAIC9vcHQvZ251QEJBU0VMSUJESVJAIEBFWEVDUFJFRklYQC9HTlVAQkFTRUxJQkRJUkAgL29wdC9HTlVAQkFTRUxJQkRJUkAnCitsb25nZGJsa2luZD0nMycKK2xvbmdkYmxzaXplPScxNicKK2xvbmdsb25nc2l6ZT0nOCcKK2xvbmdzaXplPSc4JworbHA9JycKK2xwcj0nJworbHM9J2xzJworbHNlZWtzaXplPSc4JworbHNlZWt0eXBlPSdvZmZfdCcKK21haWw9JycKK21haWx4PScnCittYWtlPSdtYWtlJworbWFrZV9zZXRfbWFrZT0nIycKK21hbGxvY29iaj0nJworbWFsbG9jc3JjPScnCittYWxsb2N0eXBlPSd2b2lkIConCittYW4xZGlyPScgJworbWFuMWRpcmV4cD0nJworbWFuMWV4dD0nMCcKK21hbjNkaXI9JyAnCittYW4zZGlyZXhwPScnCittYW4zZXh0PScwJworbWlwc190eXBlPScnCittaXN0cnVzdG5tPScnCitta2Rpcj0nbWtkaXInCittbWFwdHlwZT0ndm9pZCAqJworbW9kZXR5cGU9J21vZGVfdCcKK21vcmU9J21vcmUnCittdWx0aWFyY2g9J3VuZGVmJworbXY9JycKK215YXJjaG5hbWU9J0BBUkNIQCcKK215ZG9tYWluPScubG9jYWxkb21haW4nCitteWhvc3RuYW1lPSdsb2NhbGhvc3QnCitteXVuYW1lPSdsaW51eCBxZW11eDg2LTY0IDMuMTkuNS15b2N0by1zdGFuZGFyZCAjMSBzbXAgcHJlZW1wdCB0dWUganVuIDE2IDAwOjI4OjE3IHBkdCAyMDE1IHg4Nl82NCBnbnVsaW51eCAnCituPSctbicKK25lZWRfdmFfY29weT0nZGVmaW5lJworbmV0ZGJfaGxlbl90eXBlPSdzaXplX3QnCituZXRkYl9ob3N0X3R5cGU9J2NoYXIgKicKK25ldGRiX25hbWVfdHlwZT0nY29uc3QgY2hhciAqJworbmV0ZGJfbmV0X3R5cGU9J2luX2FkZHJfdCcKK25tPSdubScKK25tX29wdD0nJworbm1fc29fb3B0PSctLWR5bmFtaWMnCitub254c19leHQ9J0FyY2hpdmUvVGFyIEF0dHJpYnV0ZS9IYW5kbGVycyBBdXRvTG9hZGVyIEIvRGVidWcgQ1BBTiBDUEFOL01ldGEgQ1BBTi9NZXRhL1JlcXVpcmVtZW50cyBDUEFOL01ldGEvWUFNTCBDYXJwIENvbmZpZy9QZXJsL1YgRGV2ZWwvU2VsZlN0dWJiZXIgRGlnZXN0IER1bXB2YWx1ZSBFbnYgRXJybm8gRXhwb3J0ZXIgRXh0VXRpbHMvQ0J1aWxkZXIgRXh0VXRpbHMvQ29tbWFuZCBFeHRVdGlscy9Db25zdGFudCBFeHRVdGlscy9JbnN0YWxsIEV4dFV0aWxzL01ha2VNYWtlciBFeHRVdGlscy9NYW5pZmVzdCBFeHRVdGlscy9NaW5pcGVybCBFeHRVdGlscy9QYXJzZVhTIEZpbGUvRmV0Y2ggRmlsZS9GaW5kIEZpbGUvUGF0aCBGaWxlL1RlbXAgRmlsZUNhY2hlIEZpbHRlci9TaW1wbGUgR2V0b3B0L0xvbmcgSFRUUC9UaW55IEkxOE4vQ29sbGF0ZSBJMThOL0xhbmdUYWdzIElPL0NvbXByZXNzIElPL1NvY2tldC9JUCBJTy9abGliIElQQy9DbWQgSVBDL09wZW4zIEpTT04vUFAgTG9jYWxlL0NvZGVzIExvY2FsZS9NYWtldGV4dCBMb2NhbGUvTWFrZXRleHQvU2ltcGxlIE1hdGgvQmlnSW50IE1hdGgvQmlnUmF0IE1hdGgvQ29tcGxleCBNZW1vaXplIE1vZHVsZS9Db3JlTGlzdCBNb2R1bGUvTG9hZCBNb2R1bGUvTG9hZC9Db25kaXRpb25hbCBNb2R1bGUvTG9hZGVkIE1vZHVsZS9NZXRhZGF0YSBORVhUIE5ldC9QaW5nIFBhcmFtcy9DaGVjayBQYXJzZS9DUEFOL01ldGEgUGVybC9PU1R5cGUgUGVybElPL3ZpYS9RdW90ZWRQcmludCBQb2QvQ2hlY2tlciBQb2QvRXNjYXBlcyBQb2QvRnVuY3Rpb25zIFBvZC9IdG1sIFBvZC9QYXJzZXIgUG9kL1Blcmxkb2MgUG9kL1NpbXBsZSBQb2QvVXNhZ2UgU2FmZSBTZWFyY2gvRGljdCBTZWxmTG9hZGVyIFRlcm0vQU5TSUNvbG9yIFRlcm0vQ2FwIFRlcm0vQ29tcGxldGUgVGVybS9SZWFkTGluZSBUZXN0IFRlc3QvSGFybmVzcyBUZXN0L1NpbXBsZSBUZXh0L0FiYnJldiBUZXh0L0JhbGFuY2VkIFRleHQvUGFyc2VXb3JkcyBUZXh0L1RhYnMgVGhyZWFkL1F1ZXVlIFRocmVhZC9TZW1hcGhvcmUgVGllL0ZpbGUgVGllL01lbW9pemUgVGllL1JlZkhhc2ggVGltZS9Mb2NhbCBVbmljb2RlL05vcm1hbGl6ZSBYU0xvYWRlciBhdXRvZGllIGF1dG91c2UgYmFzZSBiaWdudW0gY29uc3RhbnQgZW5jb2Rpbmcvd2FybmluZ3MgZXhwZXJpbWVudGFsIGlmIGxpYiBsaWJuZXQgcGFyZW50IHBlcmxmYXEgcG9kbGF0b3JzIHZlcnNpb24nCitucm9mZj0nbnJvZmYnCitudkVVZm9ybWF0PSciRSInCitudkZVZm9ybWF0PSciRiInCitudkdVZm9ybWF0PSciRyInCitudl9vdmVyZmxvd3NfaW50ZWdlcnNfYXQ9JzI1Ni4wKjI1Ni4wKjI1Ni4wKjI1Ni4wKjI1Ni4wKjI1Ni4wKjIuMCoyLjAqMi4wKjIuMCoyLjAnCitudl9wcmVzZXJ2ZXNfdXZfYml0cz0nNTMnCitudmVmb3JtYXQ9JyJlIicKK252ZmZvcm1hdD0nImYiJworbnZnZm9ybWF0PSciZyInCitudnNpemU9JzgnCitudnR5cGU9J2RvdWJsZScKK29fbm9uYmxvY2s9J09fTk9OQkxPQ0snCitvYmpfZXh0PScubycKK29sZF9wdGhyZWFkX2NyZWF0ZV9qb2luYWJsZT0nJworb3B0aW1pemU9Jy1PMicKK29yZGVybGliPSdmYWxzZScKK29zbmFtZT0nbGludXgnCitvc3ZlcnM9JzMuMTkuNS15b2N0by1zdGFuZGFyZCcKK290aGVybGliZGlycz0nQExJQkRJUkAvcGVybC81LjIyLjAnCitwYWNrYWdlPSdwZXJsJworcGFnZXI9Jy91c3IvYmluL2xlc3MgLWlzcicKK3Bhc3NjYXQ9J2NhdCAvZXRjL3Bhc3N3ZCcKK3BhdGNobGV2ZWw9JzIyJworcGF0aF9zZXA9JzonCitwZXJsNT0nQFVTUkJJTkAvcGVybCcKK3Blcmw9J3BlcmwnCitwZXJsX3BhdGNobGV2ZWw9JycKK3Blcmxfc3RhdGljX2lubGluZT0nc3RhdGljIF9faW5saW5lX18nCitwZXJsYWRtaW49J3Jvb3RAbG9jYWxob3N0JworcGVybGxpYnM9Jy1scHRocmVhZCAtbG5zbCAtbGRsIC1sbSAtbGNyeXB0IC1sdXRpbCAtbGMnCitwZXJscGF0aD0nQFVTUkJJTkAvcGVybCcKK3BnPSdwZycKK3Bob3N0bmFtZT0nJworcGlkdHlwZT0ncGlkX3QnCitwbGlicHRoPSdATElCRElSQCBAQkFTRUxJQkRJUkAnCitwbWFrZT0nJworcHI9JycKK3ByZWZpeD0nQEVYRUNQUkVGSVhAJworcHJlZml4ZXhwPSdARVhFQ1BSRUZJWEAnCitwcml2bGliPSdATElCRElSQC9wZXJsLzUuMjIuMCcKK3ByaXZsaWJleHA9J0BMSUJESVJAL3BlcmwvNS4yMi4wJworcHJvY3NlbGZleGU9JyIvcHJvYy9zZWxmL2V4ZSInCitwcm90b3R5cGU9J2RlZmluZScKK3B0cnNpemU9JzgnCitxdWFka2luZD0nMicKK3F1YWR0eXBlPSdsb25nJworcmFuZGJpdHM9JzQ4JworcmFuZGZ1bmM9J1BlcmxfZHJhbmQ0OCcKK3JhbmRvbV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9TdCcKK3JhbmRzZWVkdHlwZT0nVTMyJworcmFubGliPSc6JworcmRfbm9kYXRhPSctMScKK3JlYWRkaXI2NF9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9UU1InCityZWFkZGlyX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1RTUicKK3JldmlzaW9uPSc1Jworcm09J3JtJworcm1fdHJ5PScvYmluL3JtIC1mIHRyeSB0cnkgYS5vdXQgLm91dCB0cnkuW2Nob10gdHJ5Li5vIGNvcmUgY29yZS50cnkqIHRyeS5jb3JlKicKK3JtYWlsPScnCitydW49JycKK3J1bm5tPSdmYWxzZScKK3NHTVRJTUVfbWF4PSc2Nzc2ODAzNjE5MTY3Njc5OScKK3NHTVRJTUVfbWluPSctNjIxNjcyMTkyMDAnCitzTE9DQUxUSU1FX21heD0nNjc3NjgwMzYxOTE2NzY3OTknCitzTE9DQUxUSU1FX21pbj0nLTYyMTY3MjE5MjAwJworc1BSSUVVbGRibD0nIkxFIicKK3NQUklGVWxkYmw9JyJMRiInCitzUFJJR1VsZGJsPSciTEciJworc1BSSVhVNjQ9JyJsWCInCitzUFJJZDY0PScibGQiJworc1BSSWVsZGJsPSciTGUiJworc1BSSWZsZGJsPSciTGYiJworc1BSSWdsZGJsPSciTGciJworc1BSSWk2ND0nImxpIicKK3NQUklvNjQ9JyJsbyInCitzUFJJdTY0PScibHUiJworc1BSSXg2ND0nImx4IicKK3NTQ05mbGRibD0nIkxmIicKK3NjaGVkX3lpZWxkPSdzY2hlZF95aWVsZCgpJworc2NyaXB0ZGlyPSdAVVNSQklOQCcKK3NjcmlwdGRpcmV4cD0nQFVTUkJJTkAnCitzZWQ9J3NlZCcKK3NlZWRmdW5jPSdQZXJsX2RyYW5kNDhfaW5pdCcKK3NlbGVjdG1pbmJpdHM9JzY0Jworc2VsZWN0dHlwZT0nZmRfc2V0IConCitzZW5kbWFpbD0nJworc2V0Z3JlbnRfcl9wcm90bz0nMCcKK3NldGhvc3RlbnRfcl9wcm90bz0nMCcKK3NldGxvY2FsZV9yX3Byb3RvPScwJworc2V0bmV0ZW50X3JfcHJvdG89JzAnCitzZXRwcm90b2VudF9yX3Byb3RvPScwJworc2V0cHdlbnRfcl9wcm90bz0nMCcKK3NldHNlcnZlbnRfcl9wcm90bz0nMCcKK3NoPScvYmluL3NoJworc2hhcj0nJworc2hhcnBiYW5nPScjIScKK3NobWF0dHlwZT0ndm9pZCAqJworc2hvcnRzaXplPScyJworc2hycGVudj0nJworc2hzaGFycD0ndHJ1ZScKK3NpZ19jb3VudD0nNjUnCitzaWdfbmFtZT0nWkVSTyBIVVAgSU5UIFFVSVQgSUxMIFRSQVAgQUJSVCBCVVMgRlBFIEtJTEwgVVNSMSBTRUdWIFVTUjIgUElQRSBBTFJNIFRFUk0gU1RLRkxUIENITEQgQ09OVCBTVE9QIFRTVFAgVFRJTiBUVE9VIFVSRyBYQ1BVIFhGU1ogVlRBTFJNIFBST0YgV0lOQ0ggSU8gUFdSIFNZUyBOVU0zMiBOVU0zMyBSVE1JTiBOVU0zNSBOVU0zNiBOVU0zNyBOVU0zOCBOVU0zOSBOVU00MCBOVU00MSBOVU00MiBOVU00MyBOVU00NCBOVU00NSBOVU00NiBOVU00NyBOVU00OCBOVU00OSBOVU01MCBOVU01MSBOVU01MiBOVU01MyBOVU01NCBOVU01NSBOVU01NiBOVU01NyBOVU01OCBOVU01OSBOVU02MCBOVU02MSBOVU02MiBOVU02MyBSVE1BWCBJT1QgQ0xEIFBPTEwgVU5VU0VEICcKK3NpZ19uYW1lX2luaXQ9JyJaRVJPIiwgIkhVUCIsICJJTlQiLCAiUVVJVCIsICJJTEwiLCAiVFJBUCIsICJBQlJUIiwgIkJVUyIsICJGUEUiLCAiS0lMTCIsICJVU1IxIiwgIlNFR1YiLCAiVVNSMiIsICJQSVBFIiwgIkFMUk0iLCAiVEVSTSIsICJTVEtGTFQiLCAiQ0hMRCIsICJDT05UIiwgIlNUT1AiLCAiVFNUUCIsICJUVElOIiwgIlRUT1UiLCAiVVJHIiwgIlhDUFUiLCAiWEZTWiIsICJWVEFMUk0iLCAiUFJPRiIsICJXSU5DSCIsICJJTyIsICJQV1IiLCAiU1lTIiwgIk5VTTMyIiwgIk5VTTMzIiwgIlJUTUlOIiwgIk5VTTM1IiwgIk5VTTM2IiwgIk5VTTM3IiwgIk5VTTM4IiwgIk5VTTM5IiwgIk5VTTQwIiwgIk5VTTQxIiwgIk5VTTQyIiwgIk5VTTQzIiwgIk5VTTQ0IiwgIk5VTTQ1IiwgIk5VTTQ2IiwgIk5VTTQ3IiwgIk5VTTQ4IiwgIk5VTTQ5IiwgIk5VTTUwIiwgIk5VTTUxIiwgIk5VTTUyIiwgIk5VTTUzIiwgIk5VTTU0IiwgIk5VTTU1IiwgIk5VTTU2IiwgIk5VTTU3IiwgIk5VTTU4IiwgIk5VTTU5IiwgIk5VTTYwIiwgIk5VTTYxIiwgIk5VTTYyIiwgIk5VTTYzIiwgIlJUTUFYIiwgIklPVCIsICJDTEQiLCAiUE9MTCIsICJVTlVTRUQiLCAwJworc2lnX251bT0nMCAxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAxOCAxOSAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCAyOSAzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNyAzOCAzOSA0MCA0MSA0MiA0MyA0NCA0NSA0NiA0NyA0OCA0OSA1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NyA1OCA1OSA2MCA2MSA2MiA2MyA2NCA2IDE3IDI5IDMxICcKK3NpZ19udW1faW5pdD0nMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywgNjQsIDYsIDE3LCAyOSwgMzEsIDAnCitzaWdfc2l6ZT0nNjknCitzaWduYWxfdD0ndm9pZCcKK3NpdGVhcmNoPSdATElCRElSQC9wZXJsL3NpdGVfcGVybC81LjIyLjAvQEFSQ0hALXRocmVhZC1tdWx0aScKK3NpdGVhcmNoZXhwPSdATElCRElSQC9wZXJsL3NpdGVfcGVybC81LjIyLjAvQEFSQ0hALXRocmVhZC1tdWx0aScKK3NpdGViaW49J0BVU1JCSU5AJworc2l0ZWJpbmV4cD0nQFVTUkJJTkAnCitzaXRlaHRtbDFkaXI9JycKK3NpdGVodG1sMWRpcmV4cD0nJworc2l0ZWh0bWwzZGlyPScnCitzaXRlaHRtbDNkaXJleHA9JycKK3NpdGVsaWI9J0BMSUJESVJAL3Blcmwvc2l0ZV9wZXJsLzUuMjIuMCcKK3NpdGVsaWJfc3RlbT0nQExJQkRJUkAvcGVybC9zaXRlX3BlcmwnCitzaXRlbGliZXhwPSdATElCRElSQC9wZXJsL3NpdGVfcGVybC81LjIyLjAnCitzaXRlbWFuMWRpcj0nJworc2l0ZW1hbjFkaXJleHA9JycKK3NpdGVtYW4zZGlyPScnCitzaXRlbWFuM2RpcmV4cD0nJworc2l0ZXByZWZpeD0nQEVYRUNQUkVGSVhAJworc2l0ZXByZWZpeGV4cD0nQEVYRUNQUkVGSVhAJworc2l0ZXNjcmlwdD0nQFVTUkJJTkAnCitzaXRlc2NyaXB0ZXhwPSdAVVNSQklOQCcKK3NpemVzaXplPSc4Jworc2l6ZXR5cGU9J3NpemVfdCcKK3NsZWVwPScnCitzbWFpbD0nJworc289J3NvJworc29ja2V0aGRyPScnCitzb2NrZXRsaWI9JycKK3NvY2tzaXpldHlwZT0nc29ja2xlbl90Jworc29ydD0nc29ydCcKK3NwYWNrYWdlPSdQZXJsNScKK3NwaXRzaGVsbD0nY2F0Jworc3JhbmQ0OF9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9MUycKK3NyYW5kb21fcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfVFMnCitzcmM9Jy4nCitzc2l6ZXR5cGU9J3NzaXplX3QnCitzdF9pbm9fc2lnbj0nMScKK3N0X2lub19zaXplPSc4Jworc3RhcnRwZXJsPScjIUBVU1JCSU5AL3BlcmwnCitzdGFydHNoPScjIS9iaW4vc2gnCitzdGF0aWNfZXh0PScgJworc3RkY2hhcj0nY2hhcicKK3N0ZGlvX2Jhc2U9JygoZnApLT5fSU9fcmVhZF9iYXNlKScKK3N0ZGlvX2J1ZnNpej0nKChmcCktPl9JT19yZWFkX2VuZCAtIChmcCktPl9JT19yZWFkX2Jhc2UpJworc3RkaW9fY250PScoKGZwKS0+X0lPX3JlYWRfZW5kIC0gKGZwKS0+X0lPX3JlYWRfcHRyKScKK3N0ZGlvX2ZpbGJ1Zj0nJworc3RkaW9fcHRyPScoKGZwKS0+X0lPX3JlYWRfcHRyKScKK3N0ZGlvX3N0cmVhbV9hcnJheT0nJworc3RyZXJyb3Jfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0JfSUJXJworc3RyaW5ncz0nQElOQ0xVREVESVJAL3N0cmluZy5oJworc3VibWl0PScnCitzdWJ2ZXJzaW9uPScwJworc3lzbWFuPSdARVhFQ1BSRUZJWEAvc2hhcmUvbWFuL21hbjEnCitzeXNyb290PScnCit0YWlsPScnCit0YXI9JycKK3RhcmdldGFyY2g9JycKK3RhcmdldGRpcj0nJwordGFyZ2V0ZW52PScnCit0YXJnZXRob3N0PScnCit0YXJnZXRta2Rpcj0nJwordGFyZ2V0cG9ydD0nJwordGFyZ2V0c2g9Jy9iaW4vc2gnCit0Ymw9JycKK3RlZT0nJwordGVzdD0ndGVzdCcKK3RpbWVpbmNsPSdASU5DTFVERURJUkAvc3lzL3RpbWUuaCBASU5DTFVERURJUkAvdGltZS5oICcKK3RpbWV0eXBlPSd0aW1lX3QnCit0bXBuYW1fcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0JfQicKK3RvPSc6JwordG91Y2g9J3RvdWNoJwordHI9J3RyJwordHJubD0nXG4nCit0cm9mZj0nJwordHR5bmFtZV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9JQlcnCit1MTZzaXplPScyJwordTE2dHlwZT0ndW5zaWduZWQgc2hvcnQnCit1MzJzaXplPSc0JwordTMydHlwZT0ndW5zaWduZWQgaW50JwordTY0c2l6ZT0nOCcKK3U2NHR5cGU9J3Vuc2lnbmVkIGxvbmcnCit1OHNpemU9JzEnCit1OHR5cGU9J3Vuc2lnbmVkIGNoYXInCit1aWRmb3JtYXQ9JyJ1IicKK3VpZHNpZ249JzEnCit1aWRzaXplPSc0JwordWlkdHlwZT0ndWlkX3QnCit1bmFtZT0ndW5hbWUnCit1bmlxPSd1bmlxJwordXF1YWR0eXBlPSd1bnNpZ25lZCBsb25nJwordXNlNTAwNXRocmVhZHM9J3VuZGVmJwordXNlNjRiaXRhbGw9J2RlZmluZScKK3VzZTY0Yml0aW50PSdkZWZpbmUnCit1c2VjYmFja3RyYWNlPSd1bmRlZicKK3VzZWNyb3NzY29tcGlsZT0nZGVmaW5lJwordXNlZGV2ZWw9J3VuZGVmJwordXNlZGw9J2RlZmluZScKK3VzZWR0cmFjZT0ndW5kZWYnCit1c2VmYXN0c3RkaW89J3VuZGVmJwordXNlaXRocmVhZHM9J2RlZmluZScKK3VzZWtlcm5wcm9jcGF0aG5hbWU9J3VuZGVmJwordXNlbGFyZ2VmaWxlcz0nZGVmaW5lJwordXNlbG9uZ2RvdWJsZT0ndW5kZWYnCit1c2VtYWxsb2N3cmFwPSdkZWZpbmUnCit1c2Vtb3JlYml0cz0ndW5kZWYnCit1c2VtdWx0aXBsaWNpdHk9J2RlZmluZScKK3VzZW15bWFsbG9jPSduJwordXNlbm09J2ZhbHNlJwordXNlbnNnZXRleGVjdXRhYmxlcGF0aD0ndW5kZWYnCit1c2VvcGNvZGU9J3RydWUnCit1c2VwZXJsaW89J2RlZmluZScKK3VzZXBvc2l4PSd0cnVlJwordXNlcXVhZG1hdGg9J3VuZGVmJwordXNlcmVlbnRyYW50PSd1bmRlZicKK3VzZXJlbG9jYXRhYmxlaW5jPSd1bmRlZicKK3VzZXNocnBsaWI9J3RydWUnCit1c2VzaXRlY3VzdG9taXplPSd1bmRlZicKK3VzZXNvY2tzPSd1bmRlZicKK3VzZXRocmVhZHM9J2RlZmluZScKK3VzZXZlbmRvcnByZWZpeD0nZGVmaW5lJwordXNldmVyc2lvbmVkYXJjaG5hbWU9J3VuZGVmJwordXNldmZvcms9J2ZhbHNlJwordXNyaW5jPSdASU5DTFVERURJUkAnCit1dW5hbWU9JycKK3V2WFVmb3JtYXQ9JyJsWCInCit1dm9mb3JtYXQ9JyJsbyInCit1dnNpemU9JzgnCit1dnR5cGU9J3Vuc2lnbmVkIGxvbmcnCit1dnVmb3JtYXQ9JyJsdSInCit1dnhmb3JtYXQ9JyJseCInCit2YXByb3RvPSdkZWZpbmUnCit2ZW5kb3JhcmNoPSdATElCRElSQC9wZXJsL3ZlbmRvcl9wZXJsLzUuMjIuMC9AQVJDSEAtdGhyZWFkLW11bHRpJwordmVuZG9yYXJjaGV4cD0nQExJQkRJUkAvcGVybC92ZW5kb3JfcGVybC81LjIyLjAvQEFSQ0hALXRocmVhZC1tdWx0aScKK3ZlbmRvcmJpbj0nQFVTUkJJTkAnCit2ZW5kb3JiaW5leHA9J0BVU1JCSU5AJwordmVuZG9yaHRtbDFkaXI9JyAnCit2ZW5kb3JodG1sMWRpcmV4cD0nJwordmVuZG9yaHRtbDNkaXI9JyAnCit2ZW5kb3JodG1sM2RpcmV4cD0nJwordmVuZG9ybGliPSdATElCRElSQC9wZXJsL3ZlbmRvcl9wZXJsLzUuMjIuMCcKK3ZlbmRvcmxpYl9zdGVtPSdATElCRElSQC9wZXJsL3ZlbmRvcl9wZXJsJwordmVuZG9ybGliZXhwPSdATElCRElSQC9wZXJsL3ZlbmRvcl9wZXJsLzUuMjIuMCcKK3ZlbmRvcm1hbjFkaXI9JyAnCit2ZW5kb3JtYW4xZGlyZXhwPScnCit2ZW5kb3JtYW4zZGlyPScgJwordmVuZG9ybWFuM2RpcmV4cD0nJwordmVuZG9ycHJlZml4PSdARVhFQ1BSRUZJWEAnCit2ZW5kb3JwcmVmaXhleHA9J0BFWEVDUFJFRklYQCcKK3ZlbmRvcnNjcmlwdD0nQFVTUkJJTkAnCit2ZW5kb3JzY3JpcHRleHA9J0BVU1JCSU5AJwordmVyc2lvbj0nNS4yMi4wJwordmVyc2lvbl9wYXRjaGxldmVsX3N0cmluZz0ndmVyc2lvbiAyMiBzdWJ2ZXJzaW9uIDAnCit2ZXJzaW9ub25seT0ndW5kZWYnCit2aT0nJworeGxpYnB0aD0nQExJQkRJUkAvMzg2IEBCQVNFTElCRElSQDM4NicKK3lhY2M9J3lhY2MnCit5YWNjZmxhZ3M9JycKK3pjYXQ9JycKK3ppcD0nemlwJworUEVSTF9SRVZJU0lPTj01CitQRVJMX1ZFUlNJT049MjIKK1BFUkxfU1VCVkVSU0lPTj0wCitQRVJMX0FQSV9SRVZJU0lPTj01CitQRVJMX0FQSV9WRVJTSU9OPTIyCitQRVJMX0FQSV9TVUJWRVJTSU9OPTAKK1BFUkxfUEFUQ0hMRVZFTD0nJworUEVSTF9DT05GSUdfU0g9dHJ1ZQorOiBWYXJpYWJsZXMgcHJvcGFnYXRlZCBmcm9tIHByZXZpb3VzIGNvbmZpZy5zaCBmaWxlLgorbGliZGJfbmVlZHNfcHRocmVhZD0nTicKKworIyBmb3IgVGltZS1IaVJlcworZF9jbG9ja19uYW5vc2xlZXA9J2RlZmluZScKK2RfY2xvY2tfZ2V0dGltZT0nZGVmaW5lJworZF9jbG9ja19nZXRyZXM9J2RlZmluZScKK2RfY2xvY2s9J2RlZmluZScKK2RfbmFub3NsZWVwPSdkZWZpbmUnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTMyIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC0zMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjU5YTBjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC0zMgpAQCAtMCwwICsxLDM4IEBACithbGlnbmJ5dGVzPSc0JworY2ZfdGltZT0nVGh1IERlYyAyMyAwMzo1Nzo1MSBVVEMgMjAxMCcKK2NwcHN5bWJvbHM9J19GSUxFX09GRlNFVF9CSVRTPTY0IF9HTlVfU09VUkNFPTEgX0xBUkdFRklMRTY0X1NPVVJDRT0xIF9MQVJHRUZJTEVfU09VUkNFPTEgX1BPU0lYX0NfU09VUkNFPTIwMDgwOUwgX1BPU0lYX1NPVVJDRT0xIF9SRUVOVFJBTlQ9MSBfWE9QRU5fU09VUkNFPTcwMCBfWE9QRU5fU09VUkNFX0VYVEVOREVEPTEgX19CSUdHRVNUX0FMSUdOTUVOVF9fPTE2IF9fQ0hBUjE2X1RZUEVfXz1zaG9ydFwgdW5zaWduZWRcIGludCBfX0NIQVIzMl9UWVBFX189dW5zaWduZWRcIGludCBfX0NIQVJfQklUX189OCBfX0RCTF9ERU5PUk1fTUlOX189KChkb3VibGUpNC45NDA2NTY0NTg0MTI0NjU0NDE3N2UtMzI0TCkgX19EQkxfRElHX189MTUgX19EQkxfRVBTSUxPTl9fPSgoZG91YmxlKTIuMjIwNDQ2MDQ5MjUwMzEzMDgwODVlLTE2TCkgX19EQkxfSEFTX0RFTk9STV9fPTEgX19EQkxfSEFTX0lORklOSVRZX189MSBfX0RCTF9IQVNfUVVJRVRfTkFOX189MSBfX0RCTF9NQU5UX0RJR19fPTUzIF9fREJMX01BWF8xMF9FWFBfXz0zMDggX19EQkxfTUFYX0VYUF9fPTEwMjQgX19EQkxfTUFYX189KChkb3VibGUpMS43OTc2OTMxMzQ4NjIzMTU3MDgxNWUrMzA4TCkgX19EQkxfTUlOXzEwX0VYUF9fPSgtMzA3KSBfX0RCTF9NSU5fRVhQX189KC0xMDIxKSBfX0RCTF9NSU5fXz0oKGRvdWJsZSkyLjIyNTA3Mzg1ODUwNzIwMTM4MzA5ZS0zMDhMKSBfX0RFQzEyOF9FUFNJTE9OX189MUUtMzNETCBfX0RFQzEyOF9NQU5UX0RJR19fPTM0IF9fREVDMTI4X01BWF9FWFBfXz02MTQ1IF9fREVDMTI4X01BWF9fPTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RTYxNDRETCBfX0RFQzEyOF9NSU5fRVhQX189KC02MTQyKSBfX0RFQzEyOF9NSU5fXz0xRS02MTQzREwgX19ERUMxMjhfU1VCTk9STUFMX01JTl9fPTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzREwgX19ERUMzMl9FUFNJTE9OX189MUUtNkRGIF9fREVDMzJfTUFOVF9ESUdfXz03IF9fREVDMzJfTUFYX0VYUF9fPTk3IF9fREVDMzJfTUFYX189OS45OTk5OTlFOTZERiBfX0RFQzMyX01JTl9FWFBfXz0oLTk0KSBfX0RFQzMyX01JTl9fPTFFLTk1REYgX19ERUMzMl9TVUJOT1JNQUxfTUlOX189MC4wMDAwMDFFLTk1REYgX19ERUM2NF9FUFNJTE9OX189MUUtMTVERCBfX0RFQzY0X01BTlRfRElHX189MTYgX19ERUM2NF9NQVhfRVhQX189Mzg1IF9fREVDNjRfTUFYX189OS45OTk5OTk5OTk5OTk5OTlFMzg0REQgX19ERUM2NF9NSU5fRVhQX189KC0zODIpIF9fREVDNjRfTUlOX189MUUtMzgzREQgX19ERUM2NF9TVUJOT1JNQUxfTUlOX189MC4wMDAwMDAwMDAwMDAwMDFFLTM4M0REIF9fREVDSU1BTF9CSURfRk9STUFUX189MSBfX0RFQ0lNQUxfRElHX189MjEgX19ERUNfRVZBTF9NRVRIT0RfXz0yIF9fRUxGX189MSBfX0ZJTklURV9NQVRIX09OTFlfXz0wIF9fRkxUX0RFTk9STV9NSU5fXz0xLjQwMTI5ODQ2NDMyNDgxNzA3MDkyZS00NUYgX19GTFRfRElHX189NiBfX0ZMVF9FUFNJTE9OX189MS4xOTIwOTI4OTU1MDc4MTI1MDAwMGUtN0YgX19GTFRfRVZBTF9NRVRIT0RfXz0yIF9fRkxUX0hBU19ERU5PUk1fXz0xIF9fRkxUX0hBU19JTkZJTklUWV9fPTEgX19GTFRfSEFTX1FVSUVUX05BTl9fPTEgX19GTFRfTUFOVF9ESUdfXz0yNCBfX0ZMVF9NQVhfMTBfRVhQX189MzggX19GTFRfTUFYX0VYUF9fPTEyOCBfX0ZMVF9NQVhfXz0zLjQwMjgyMzQ2NjM4NTI4ODU5ODEyZSszOEYgX19GTFRfTUlOXzEwX0VYUF9fPSgtMzcpIF9fRkxUX01JTl9FWFBfXz0oLTEyNSkgX19GTFRfTUlOX189MS4xNzU0OTQzNTA4MjIyODc1MDc5N2UtMzhGIF9fRkxUX1JBRElYX189MiBfX0dDQ19IQVZFX1NZTkNfQ09NUEFSRV9BTkRfU1dBUF8xPTEgX19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfMj0xIF9fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzQ9MSBfX0dDQ19IQVZFX1NZTkNfQ09NUEFSRV9BTkRfU1dBUF84PTEgX19HTElCQ19NSU5PUl9fPTEyIF9fR0xJQkNfXz0yIF9fR05VQ19HTlVfSU5MSU5FX189MSBfX0dOVUNfTUlOT1JfXz01IF9fR05VQ19QQVRDSExFVkVMX189MSBfX0dOVUNfXz00IF9fR05VX0xJQlJBUllfXz02IF9fR1hYX0FCSV9WRVJTSU9OPTEwMDIgX19JTlQxNl9DKGMpPWMgX19JTlQxNl9NQVhfXz0zMjc2NyBfX0lOVDE2X1RZUEVfXz1zaG9ydFwgaW50IF9fSU5UMzJfQyhjKT1jIF9fSU5UMzJfTUFYX189MjE0NzQ4MzY0NyBfX0lOVDMyX1RZUEVfXz1pbnQgX19JTlQ2NF9DKGMpPWNMTCBfX0lOVDY0X01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCBfX0lOVDY0X1RZUEVfXz1sb25nXCBsb25nXCBpbnQgX19JTlQ4X0MoYyk9YyBfX0lOVDhfTUFYX189MTI3IF9fSU5UOF9UWVBFX189c2lnbmVkXCBjaGFyIF9fSU5UTUFYX0MoYyk9Y0xMIF9fSU5UTUFYX01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCBfX0lOVE1BWF9UWVBFX189bG9uZ1wgbG9uZ1wgaW50IF9fSU5UUFRSX01BWF9fPTIxNDc0ODM2NDcgX19JTlRQVFJfVFlQRV9fPWludCBfX0lOVF9GQVNUMTZfTUFYX189MjE0NzQ4MzY0NyBfX0lOVF9GQVNUMTZfVFlQRV9fPWludCBfX0lOVF9GQVNUMzJfTUFYX189MjE0NzQ4MzY0NyBfX0lOVF9GQVNUMzJfVFlQRV9fPWludCBfX0lOVF9GQVNUNjRfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0xMIF9fSU5UX0ZBU1Q2NF9UWVBFX189bG9uZ1wgbG9uZ1wgaW50IF9fSU5UX0ZBU1Q4X01BWF9fPTEyNyBfX0lOVF9GQVNUOF9UWVBFX189c2lnbmVkXCBjaGFyIF9fSU5UX0xFQVNUMTZfTUFYX189MzI3NjcgX19JTlRfTEVBU1QxNl9UWVBFX189c2hvcnRcIGludCBfX0lOVF9MRUFTVDMyX01BWF9fPTIxNDc0ODM2NDcgX19JTlRfTEVBU1QzMl9UWVBFX189aW50IF9fSU5UX0xFQVNUNjRfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0xMIF9fSU5UX0xFQVNUNjRfVFlQRV9fPWxvbmdcIGxvbmdcIGludCBfX0lOVF9MRUFTVDhfTUFYX189MTI3IF9fSU5UX0xFQVNUOF9UWVBFX189c2lnbmVkXCBjaGFyIF9fSU5UX01BWF9fPTIxNDc0ODM2NDcgX19MREJMX0RFTk9STV9NSU5fXz0zLjY0NTE5OTUzMTg4MjQ3NDYwMjUzZS00OTUxTCBfX0xEQkxfRElHX189MTggX19MREJMX0VQU0lMT05fXz0xLjA4NDIwMjE3MjQ4NTUwNDQzNDAxZS0xOUwgX19MREJMX0hBU19ERU5PUk1fXz0xIF9fTERCTF9IQVNfSU5GSU5JVFlfXz0xIF9fTERCTF9IQVNfUVVJRVRfTkFOX189MSBfX0xEQkxfTUFOVF9ESUdfXz02NCBfX0xEQkxfTUFYXzEwX0VYUF9fPTQ5MzIgX19MREJMX01BWF9FWFBfXz0xNjM4NCBfX0xEQkxfTUFYX189MS4xODk3MzE0OTUzNTcyMzE3NjUwMmUrNDkzMkwgX19MREJMX01JTl8xMF9FWFBfXz0oLTQ5MzEpIF9fTERCTF9NSU5fRVhQX189KC0xNjM4MSkgX19MREJMX01JTl9fPTMuMzYyMTAzMTQzMTEyMDkzNTA2MjZlLTQ5MzJMIF9fTE9OR19MT05HX01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCBfX0xPTkdfTUFYX189MjE0NzQ4MzY0N0wgX19QUkFHTUFfUkVERUZJTkVfRVhUTkFNRT0xIF9fUFRSRElGRl9NQVhfXz0yMTQ3NDgzNjQ3IF9fUFRSRElGRl9UWVBFX189aW50IF9fUkVHSVNURVJfUFJFRklYX189IF9fU0NIQVJfTUFYX189MTI3IF9fU0hSVF9NQVhfXz0zMjc2NyBfX1NJR19BVE9NSUNfTUFYX189MjE0NzQ4MzY0NyBfX1NJR19BVE9NSUNfTUlOX189KC0yMTQ3NDgzNjQ3XCAtXCAxKSBfX1NJR19BVE9NSUNfVFlQRV9fPWludCBfX1NJWkVPRl9ET1VCTEVfXz04IF9fU0laRU9GX0ZMT0FUX189NCBfX1NJWkVPRl9JTlRfXz00IF9fU0laRU9GX0xPTkdfRE9VQkxFX189MTIgX19TSVpFT0ZfTE9OR19MT05HX189OCBfX1NJWkVPRl9MT05HX189NCBfX1NJWkVPRl9QT0lOVEVSX189NCBfX1NJWkVPRl9QVFJESUZGX1RfXz00IF9fU0laRU9GX1NIT1JUX189MiBfX1NJWkVPRl9TSVpFX1RfXz00IF9fU0laRU9GX1dDSEFSX1RfXz00IF9fU0laRU9GX1dJTlRfVF9fPTQgX19TSVpFX01BWF9fPTQyOTQ5NjcyOTVVIF9fU0laRV9UWVBFX189dW5zaWduZWRcIGludCBfX1NURENfSE9TVEVEX189MSBfX1NURENfXz0xIF9fVUlOVDE2X0MoYyk9YyBfX1VJTlQxNl9NQVhfXz02NTUzNSBfX1VJTlQxNl9UWVBFX189c2hvcnRcIHVuc2lnbmVkXCBpbnQgX19VSU5UMzJfQyhjKT1jVSBfX1VJTlQzMl9NQVhfXz00Mjk0OTY3Mjk1VSBfX1VJTlQzMl9UWVBFX189dW5zaWduZWRcIGludCBfX1VJTlQ2NF9DKGMpPWNVTEwgX19VSU5UNjRfTUFYX189MTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwgX19VSU5UNjRfVFlQRV9fPWxvbmdcIGxvbmdcIHVuc2lnbmVkXCBpbnQgX19VSU5UOF9DKGMpPWMgX19VSU5UOF9NQVhfXz0yNTUgX19VSU5UOF9UWVBFX189dW5zaWduZWRcIGNoYXIgX19VSU5UTUFYX0MoYyk9Y1VMTCBfX1VJTlRNQVhfTUFYX189MTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwgX19VSU5UTUFYX1RZUEVfXz1sb25nXCBsb25nXCB1bnNpZ25lZFwgaW50IF9fVUlOVFBUUl9NQVhfXz00Mjk0OTY3Mjk1VSBfX1VJTlRQVFJfVFlQRV9fPXVuc2lnbmVkXCBpbnQgX19VSU5UX0ZBU1QxNl9NQVhfXz00Mjk0OTY3Mjk1VSBfX1VJTlRfRkFTVDE2X1RZUEVfXz11bnNpZ25lZFwgaW50IF9fVUlOVF9GQVNUMzJfTUFYX189NDI5NDk2NzI5NVUgX19VSU5UX0ZBU1QzMl9UWVBFX189dW5zaWduZWRcIGludCBfX1VJTlRfRkFTVDY0X01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMIF9fVUlOVF9GQVNUNjRfVFlQRV9fPWxvbmdcIGxvbmdcIHVuc2lnbmVkXCBpbnQgX19VSU5UX0ZBU1Q4X01BWF9fPTI1NSBfX1VJTlRfRkFTVDhfVFlQRV9fPXVuc2lnbmVkXCBjaGFyIF9fVUlOVF9MRUFTVDE2X01BWF9fPTY1NTM1IF9fVUlOVF9MRUFTVDE2X1RZUEVfXz1zaG9ydFwgdW5zaWduZWRcIGludCBfX1VJTlRfTEVBU1QzMl9NQVhfXz00Mjk0OTY3Mjk1VSBfX1VJTlRfTEVBU1QzMl9UWVBFX189dW5zaWduZWRcIGludCBfX1VJTlRfTEVBU1Q2NF9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMTCBfX1VJTlRfTEVBU1Q2NF9UWVBFX189bG9uZ1wgbG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlRfTEVBU1Q4X01BWF9fPTI1NSBfX1VJTlRfTEVBU1Q4X1RZUEVfXz11bnNpZ25lZFwgY2hhciBfX1VTRVJfTEFCRUxfUFJFRklYX189IF9fVVNFX0JTRD0xIF9fVVNFX0ZJTEVfT0ZGU0VUNjQ9MSBfX1VTRV9HTlU9MSBfX1VTRV9MQVJHRUZJTEU2ND0xIF9fVVNFX0xBUkdFRklMRT0xIF9fVVNFX01JU0M9MSBfX1VTRV9QT1NJWDE5OTMwOT0xIF9fVVNFX1BPU0lYMTk5NTA2PTEgX19VU0VfUE9TSVgyPTEgX19VU0VfUE9TSVg9MSBfX1VTRV9SRUVOVFJBTlQ9MSBfX1VTRV9TVklEPTEgX19VU0VfVU5JWDk4PTEgX19VU0VfWE9QRU49MSBfX1VTRV9YT1BFTl9FWFRFTkRFRD0xIF9fVkVSU0lPTl9fPSI0LjUuMSIgX19XQ0hBUl9NQVhfXz0yMTQ3NDgzNjQ3TCBfX1dDSEFSX01JTl9fPSgtMjE0NzQ4MzY0N0xcIC1cIDEpIF9fV0NIQVJfVFlQRV9fPWxvbmdcIGludCBfX1dJTlRfTUFYX189NDI5NDk2NzI5NVUgX19XSU5UX01JTl9fPTBVIF9fV0lOVF9UWVBFX189dW5zaWduZWRcIGludCBfX2dudV9saW51eF9fPTEgX19pMzg2PTEgX19pMzg2X189MSBfX2k1ODY9MSBfX2k1ODZfXz0xIF9fbGludXg9MSBfX2xpbnV4X189MSBfX3BlbnRpdW09MSBfX3BlbnRpdW1fXz0xIF9fdHVuZV9pNTg2X189MSBfX3R1bmVfcGVudGl1bV9fPTEgX191bml4PTEgX191bml4X189MSBpMzg2PTEgbGludXg9MSB1bml4PTEnCitkX252X3ByZXNlcnZlc191dj0nZGVmaW5lJworZF9wcmludGZfZm9ybWF0X251bGw9J2RlZmluZScKK2RfdTMyYWxpZ249J3VuZGVmJworZ2lkZm9ybWF0PScibHUiJworaTMydHlwZT0nbG9uZycKK2k2NHR5cGU9J2xvbmcgbG9uZycKK2l2c2l6ZT0nNCcKK2xvbmdkYmxzaXplPScxMicKK2xvbmdzaXplPSc0JworbXl1bmFtZT0nbGludXggcWVtdXg4NiAyLjYuMzctcmM1LXlvY3RvLXN0YW5kYXJkKyAjMSBwcmVlbXB0IG1vbiBkZWMgMjAgMTQ6MjE6MjcgcHN0IDIwMTAgaTY4NiBnbnVsaW51eCAnCituZWVkX3ZhX2NvcHk9J3VuZGVmJworbmV0ZGJfaG9zdF90eXBlPSdjb25zdCB2b2lkIConCitudl9wcmVzZXJ2ZXNfdXZfYml0cz0nMzInCitwdHJzaXplPSc0JworcXVhZGtpbmQ9JzMnCitxdWFkdHlwZT0nbG9uZyBsb25nJworc0dNVElNRV9tYXg9JzIxNDc0ODM2NDcnCitzR01USU1FX21pbj0nLTIxNDc0ODM2NDgnCitzTE9DQUxUSU1FX21heD0nMjE0NzQ4MzY0NycKK3NMT0NBTFRJTUVfbWluPSctMjE0NzQ4MzY0OCcKK3NQUklYVTY0PSciTFgiJworc1BSSWQ2ND0nIkxkIicKK3NQUklpNjQ9JyJMaSInCitzUFJJbzY0PSciTG8iJworc1BSSXU2ND0nIkx1IicKK3NQUkl4NjQ9JyJMeCInCitzZWxlY3RtaW5iaXRzPSczMicKK3NpemVzaXplPSc0JwordTMydHlwZT0ndW5zaWduZWQgbG9uZycKK3U2NHR5cGU9J3Vuc2lnbmVkIGxvbmcgbG9uZycKK3VpZGZvcm1hdD0nImx1IicKK3VxdWFkdHlwZT0ndW5zaWduZWQgbG9uZyBsb25nJwordXNlNjRiaXRhbGw9J3VuZGVmJwordXNlNjRiaXRpbnQ9J3VuZGVmJwordXZzaXplPSc0JwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC0zMi1iZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtMzItYmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU5YTlhYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtMzItYmUKQEAgLTAsMCArMSBAQAorYnl0ZW9yZGVyPSc0MzIxJwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC0zMi1sZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtMzItbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBlNDIyNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtMzItbGUKQEAgLTAsMCArMSBAQAorYnl0ZW9yZGVyPScxMjM0JwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC02NCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtNjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkyOWQzYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtNjQKQEAgLTAsMCArMSwzOCBAQAorYWxpZ25ieXRlcz0nOCcKK2NmX3RpbWU9J1RodSBEZWMgMjMgMDI6MDY6NDIgVVRDIDIwMTAnCitjcHBzeW1ib2xzPSdfRklMRV9PRkZTRVRfQklUUz02NCBfR05VX1NPVVJDRT0xIF9MQVJHRUZJTEU2NF9TT1VSQ0U9MSBfTEFSR0VGSUxFX1NPVVJDRT0xIF9MUDY0PTEgX1BPU0lYX0NfU09VUkNFPTIwMDgwOUwgX1BPU0lYX1NPVVJDRT0xIF9SRUVOVFJBTlQ9MSBfWE9QRU5fU09VUkNFPTcwMCBfWE9QRU5fU09VUkNFX0VYVEVOREVEPTEgX19CSUdHRVNUX0FMSUdOTUVOVF9fPTE2IF9fQ0hBUjE2X1RZUEVfXz1zaG9ydFwgdW5zaWduZWRcIGludCBfX0NIQVIzMl9UWVBFX189dW5zaWduZWRcIGludCBfX0NIQVJfQklUX189OCBfX0RCTF9ERU5PUk1fTUlOX189KChkb3VibGUpNC45NDA2NTY0NTg0MTI0NjU0NDE3N2UtMzI0TCkgX19EQkxfRElHX189MTUgX19EQkxfRVBTSUxPTl9fPSgoZG91YmxlKTIuMjIwNDQ2MDQ5MjUwMzEzMDgwODVlLTE2TCkgX19EQkxfSEFTX0RFTk9STV9fPTEgX19EQkxfSEFTX0lORklOSVRZX189MSBfX0RCTF9IQVNfUVVJRVRfTkFOX189MSBfX0RCTF9NQU5UX0RJR19fPTUzIF9fREJMX01BWF8xMF9FWFBfXz0zMDggX19EQkxfTUFYX0VYUF9fPTEwMjQgX19EQkxfTUFYX189KChkb3VibGUpMS43OTc2OTMxMzQ4NjIzMTU3MDgxNWUrMzA4TCkgX19EQkxfTUlOXzEwX0VYUF9fPSgtMzA3KSBfX0RCTF9NSU5fRVhQX189KC0xMDIxKSBfX0RCTF9NSU5fXz0oKGRvdWJsZSkyLjIyNTA3Mzg1ODUwNzIwMTM4MzA5ZS0zMDhMKSBfX0RFQzEyOF9FUFNJTE9OX189MUUtMzNETCBfX0RFQzEyOF9NQU5UX0RJR19fPTM0IF9fREVDMTI4X01BWF9FWFBfXz02MTQ1IF9fREVDMTI4X01BWF9fPTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RTYxNDRETCBfX0RFQzEyOF9NSU5fRVhQX189KC02MTQyKSBfX0RFQzEyOF9NSU5fXz0xRS02MTQzREwgX19ERUMxMjhfU1VCTk9STUFMX01JTl9fPTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzREwgX19ERUMzMl9FUFNJTE9OX189MUUtNkRGIF9fREVDMzJfTUFOVF9ESUdfXz03IF9fREVDMzJfTUFYX0VYUF9fPTk3IF9fREVDMzJfTUFYX189OS45OTk5OTlFOTZERiBfX0RFQzMyX01JTl9FWFBfXz0oLTk0KSBfX0RFQzMyX01JTl9fPTFFLTk1REYgX19ERUMzMl9TVUJOT1JNQUxfTUlOX189MC4wMDAwMDFFLTk1REYgX19ERUM2NF9FUFNJTE9OX189MUUtMTVERCBfX0RFQzY0X01BTlRfRElHX189MTYgX19ERUM2NF9NQVhfRVhQX189Mzg1IF9fREVDNjRfTUFYX189OS45OTk5OTk5OTk5OTk5OTlFMzg0REQgX19ERUM2NF9NSU5fRVhQX189KC0zODIpIF9fREVDNjRfTUlOX189MUUtMzgzREQgX19ERUM2NF9TVUJOT1JNQUxfTUlOX189MC4wMDAwMDAwMDAwMDAwMDFFLTM4M0REIF9fREVDSU1BTF9CSURfRk9STUFUX189MSBfX0RFQ0lNQUxfRElHX189MjEgX19ERUNfRVZBTF9NRVRIT0RfXz0yIF9fRUxGX189MSBfX0ZJTklURV9NQVRIX09OTFlfXz0wIF9fRkxUX0RFTk9STV9NSU5fXz0xLjQwMTI5ODQ2NDMyNDgxNzA3MDkyZS00NUYgX19GTFRfRElHX189NiBfX0ZMVF9FUFNJTE9OX189MS4xOTIwOTI4OTU1MDc4MTI1MDAwMGUtN0YgX19GTFRfRVZBTF9NRVRIT0RfXz0wIF9fRkxUX0hBU19ERU5PUk1fXz0xIF9fRkxUX0hBU19JTkZJTklUWV9fPTEgX19GTFRfSEFTX1FVSUVUX05BTl9fPTEgX19GTFRfTUFOVF9ESUdfXz0yNCBfX0ZMVF9NQVhfMTBfRVhQX189MzggX19GTFRfTUFYX0VYUF9fPTEyOCBfX0ZMVF9NQVhfXz0zLjQwMjgyMzQ2NjM4NTI4ODU5ODEyZSszOEYgX19GTFRfTUlOXzEwX0VYUF9fPSgtMzcpIF9fRkxUX01JTl9FWFBfXz0oLTEyNSkgX19GTFRfTUlOX189MS4xNzU0OTQzNTA4MjIyODc1MDc5N2UtMzhGIF9fRkxUX1JBRElYX189MiBfX0dDQ19IQVZFX0RXQVJGMl9DRklfQVNNPTEgX19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfMT0xIF9fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzI9MSBfX0dDQ19IQVZFX1NZTkNfQ09NUEFSRV9BTkRfU1dBUF80PTEgX19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfOD0xIF9fR0xJQkNfTUlOT1JfXz0xMiBfX0dMSUJDX189MiBfX0dOVUNfR05VX0lOTElORV9fPTEgX19HTlVDX01JTk9SX189NSBfX0dOVUNfUEFUQ0hMRVZFTF9fPTEgX19HTlVDX189NCBfX0dOVV9MSUJSQVJZX189NiBfX0dYWF9BQklfVkVSU0lPTj0xMDAyIF9fSU5UMTZfQyhjKT1jIF9fSU5UMTZfTUFYX189MzI3NjcgX19JTlQxNl9UWVBFX189c2hvcnRcIGludCBfX0lOVDMyX0MoYyk9YyBfX0lOVDMyX01BWF9fPTIxNDc0ODM2NDcgX19JTlQzMl9UWVBFX189aW50IF9fSU5UNjRfQyhjKT1jTCBfX0lOVDY0X01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMIF9fSU5UNjRfVFlQRV9fPWxvbmdcIGludCBfX0lOVDhfQyhjKT1jIF9fSU5UOF9NQVhfXz0xMjcgX19JTlQ4X1RZUEVfXz1zaWduZWRcIGNoYXIgX19JTlRNQVhfQyhjKT1jTCBfX0lOVE1BWF9NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TCBfX0lOVE1BWF9UWVBFX189bG9uZ1wgaW50IF9fSU5UUFRSX01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMIF9fSU5UUFRSX1RZUEVfXz1sb25nXCBpbnQgX19JTlRfRkFTVDE2X01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMIF9fSU5UX0ZBU1QxNl9UWVBFX189bG9uZ1wgaW50IF9fSU5UX0ZBU1QzMl9NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TCBfX0lOVF9GQVNUMzJfVFlQRV9fPWxvbmdcIGludCBfX0lOVF9GQVNUNjRfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0wgX19JTlRfRkFTVDY0X1RZUEVfXz1sb25nXCBpbnQgX19JTlRfRkFTVDhfTUFYX189MTI3IF9fSU5UX0ZBU1Q4X1RZUEVfXz1zaWduZWRcIGNoYXIgX19JTlRfTEVBU1QxNl9NQVhfXz0zMjc2NyBfX0lOVF9MRUFTVDE2X1RZUEVfXz1zaG9ydFwgaW50IF9fSU5UX0xFQVNUMzJfTUFYX189MjE0NzQ4MzY0NyBfX0lOVF9MRUFTVDMyX1RZUEVfXz1pbnQgX19JTlRfTEVBU1Q2NF9NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TCBfX0lOVF9MRUFTVDY0X1RZUEVfXz1sb25nXCBpbnQgX19JTlRfTEVBU1Q4X01BWF9fPTEyNyBfX0lOVF9MRUFTVDhfVFlQRV9fPXNpZ25lZFwgY2hhciBfX0lOVF9NQVhfXz0yMTQ3NDgzNjQ3IF9fTERCTF9ERU5PUk1fTUlOX189My42NDUxOTk1MzE4ODI0NzQ2MDI1M2UtNDk1MUwgX19MREJMX0RJR19fPTE4IF9fTERCTF9FUFNJTE9OX189MS4wODQyMDIxNzI0ODU1MDQ0MzQwMWUtMTlMIF9fTERCTF9IQVNfREVOT1JNX189MSBfX0xEQkxfSEFTX0lORklOSVRZX189MSBfX0xEQkxfSEFTX1FVSUVUX05BTl9fPTEgX19MREJMX01BTlRfRElHX189NjQgX19MREJMX01BWF8xMF9FWFBfXz00OTMyIF9fTERCTF9NQVhfRVhQX189MTYzODQgX19MREJMX01BWF9fPTEuMTg5NzMxNDk1MzU3MjMxNzY1MDJlKzQ5MzJMIF9fTERCTF9NSU5fMTBfRVhQX189KC00OTMxKSBfX0xEQkxfTUlOX0VYUF9fPSgtMTYzODEpIF9fTERCTF9NSU5fXz0zLjM2MjEwMzE0MzExMjA5MzUwNjI2ZS00OTMyTCBfX0xPTkdfTE9OR19NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TEwgX19MT05HX01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMIF9fTFA2NF9fPTEgX19NTVhfXz0xIF9fUFJBR01BX1JFREVGSU5FX0VYVE5BTUU9MSBfX1BUUkRJRkZfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0wgX19QVFJESUZGX1RZUEVfXz1sb25nXCBpbnQgX19SRUdJU1RFUl9QUkVGSVhfXz0gX19TQ0hBUl9NQVhfXz0xMjcgX19TSFJUX01BWF9fPTMyNzY3IF9fU0lHX0FUT01JQ19NQVhfXz0yMTQ3NDgzNjQ3IF9fU0lHX0FUT01JQ19NSU5fXz0oLTIxNDc0ODM2NDdcIC1cIDEpIF9fU0lHX0FUT01JQ19UWVBFX189aW50IF9fU0laRU9GX0RPVUJMRV9fPTggX19TSVpFT0ZfRkxPQVRfXz00IF9fU0laRU9GX0lOVF9fPTQgX19TSVpFT0ZfTE9OR19ET1VCTEVfXz0xNiBfX1NJWkVPRl9MT05HX0xPTkdfXz04IF9fU0laRU9GX0xPTkdfXz04IF9fU0laRU9GX1BPSU5URVJfXz04IF9fU0laRU9GX1BUUkRJRkZfVF9fPTggX19TSVpFT0ZfU0hPUlRfXz0yIF9fU0laRU9GX1NJWkVfVF9fPTggX19TSVpFT0ZfV0NIQVJfVF9fPTQgX19TSVpFT0ZfV0lOVF9UX189NCBfX1NJWkVfTUFYX189MTg0NDY3NDQwNzM3MDk1NTE2MTVVTCBfX1NJWkVfVFlQRV9fPWxvbmdcIHVuc2lnbmVkXCBpbnQgX19TU0UyX01BVEhfXz0xIF9fU1NFMl9fPTEgX19TU0VfTUFUSF9fPTEgX19TU0VfXz0xIF9fU1REQ19IT1NURURfXz0xIF9fU1REQ19fPTEgX19VSU5UMTZfQyhjKT1jIF9fVUlOVDE2X01BWF9fPTY1NTM1IF9fVUlOVDE2X1RZUEVfXz1zaG9ydFwgdW5zaWduZWRcIGludCBfX1VJTlQzMl9DKGMpPWNVIF9fVUlOVDMyX01BWF9fPTQyOTQ5NjcyOTVVIF9fVUlOVDMyX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fVUlOVDY0X0MoYyk9Y1VMIF9fVUlOVDY0X01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUwgX19VSU5UNjRfVFlQRV9fPWxvbmdcIHVuc2lnbmVkXCBpbnQgX19VSU5UOF9DKGMpPWMgX19VSU5UOF9NQVhfXz0yNTUgX19VSU5UOF9UWVBFX189dW5zaWduZWRcIGNoYXIgX19VSU5UTUFYX0MoYyk9Y1VMIF9fVUlOVE1BWF9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMIF9fVUlOVE1BWF9UWVBFX189bG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlRQVFJfTUFYX189MTg0NDY3NDQwNzM3MDk1NTE2MTVVTCBfX1VJTlRQVFJfVFlQRV9fPWxvbmdcIHVuc2lnbmVkXCBpbnQgX19VSU5UX0ZBU1QxNl9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMIF9fVUlOVF9GQVNUMTZfVFlQRV9fPWxvbmdcIHVuc2lnbmVkXCBpbnQgX19VSU5UX0ZBU1QzMl9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMIF9fVUlOVF9GQVNUMzJfVFlQRV9fPWxvbmdcIHVuc2lnbmVkXCBpbnQgX19VSU5UX0ZBU1Q2NF9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMIF9fVUlOVF9GQVNUNjRfVFlQRV9fPWxvbmdcIHVuc2lnbmVkXCBpbnQgX19VSU5UX0ZBU1Q4X01BWF9fPTI1NSBfX1VJTlRfRkFTVDhfVFlQRV9fPXVuc2lnbmVkXCBjaGFyIF9fVUlOVF9MRUFTVDE2X01BWF9fPTY1NTM1IF9fVUlOVF9MRUFTVDE2X1RZUEVfXz1zaG9ydFwgdW5zaWduZWRcIGludCBfX1VJTlRfTEVBU1QzMl9NQVhfXz00Mjk0OTY3Mjk1VSBfX1VJTlRfTEVBU1QzMl9UWVBFX189dW5zaWduZWRcIGludCBfX1VJTlRfTEVBU1Q2NF9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMIF9fVUlOVF9MRUFTVDY0X1RZUEVfXz1sb25nXCB1bnNpZ25lZFwgaW50IF9fVUlOVF9MRUFTVDhfTUFYX189MjU1IF9fVUlOVF9MRUFTVDhfVFlQRV9fPXVuc2lnbmVkXCBjaGFyIF9fVVNFUl9MQUJFTF9QUkVGSVhfXz0gX19VU0VfQlNEPTEgX19VU0VfRklMRV9PRkZTRVQ2ND0xIF9fVVNFX0dOVT0xIF9fVVNFX0xBUkdFRklMRTY0PTEgX19VU0VfTEFSR0VGSUxFPTEgX19VU0VfTUlTQz0xIF9fVVNFX1BPU0lYMTk5MzA5PTEgX19VU0VfUE9TSVgxOTk1MDY9MSBfX1VTRV9QT1NJWDI9MSBfX1VTRV9QT1NJWD0xIF9fVVNFX1JFRU5UUkFOVD0xIF9fVVNFX1NWSUQ9MSBfX1VTRV9VTklYOTg9MSBfX1VTRV9YT1BFTj0xIF9fVVNFX1hPUEVOX0VYVEVOREVEPTEgX19WRVJTSU9OX189IjQuNS4xIiBfX1dDSEFSX01BWF9fPTIxNDc0ODM2NDcgX19XQ0hBUl9NSU5fXz0oLTIxNDc0ODM2NDdcIC1cIDEpIF9fV0NIQVJfVFlQRV9fPWludCBfX1dJTlRfTUFYX189NDI5NDk2NzI5NVUgX19XSU5UX01JTl9fPTBVIF9fV0lOVF9UWVBFX189dW5zaWduZWRcIGludCBfX2FtZDY0PTEgX19hbWQ2NF9fPTEgX19nbnVfbGludXhfXz0xIF9fazg9MSBfX2s4X189MSBfX2xpbnV4PTEgX19saW51eF9fPTEgX191bml4PTEgX191bml4X189MSBfX3g4Nl82ND0xIF9feDg2XzY0X189MSBsaW51eD0xIHVuaXg9MScKK2RfbnZfcHJlc2VydmVzX3V2PSd1bmRlZicKK2RfcHJpbnRmX2Zvcm1hdF9udWxsPSd1bmRlZicKK2RfdTMyYWxpZ249J2RlZmluZScKK2dpZGZvcm1hdD0nInUiJworaTMydHlwZT0naW50JworaTY0dHlwZT0nbG9uZycKK2l2c2l6ZT0nOCcKK2xvbmdkYmxzaXplPScxNicKK2xvbmdzaXplPSc4JworbXl1bmFtZT0nbGludXggcWVtdXg4Ni02NCAyLjYuMzctcmM1LXlvY3RvLXN0YW5kYXJkKyAjMSBzbXAgcHJlZW1wdCBtb24gZGVjIDIwIDE3OjE5OjUwIHBzdCAyMDEwIHg4Nl82NCBnbnVsaW51eCAnCituZWVkX3ZhX2NvcHk9J2RlZmluZScKK25ldGRiX2hvc3RfdHlwZT0nY2hhciAqJworbnZfcHJlc2VydmVzX3V2X2JpdHM9JzUzJworcHRyc2l6ZT0nOCcKK3F1YWRraW5kPScyJworcXVhZHR5cGU9J2xvbmcnCitzR01USU1FX21heD0nNjc3NjgwMzYxOTE2NzY3OTknCitzR01USU1FX21pbj0nLTYyMTY3MjE5MjAwJworc0xPQ0FMVElNRV9tYXg9JzY3NzY4MDM2MTkxNjc2Nzk5Jworc0xPQ0FMVElNRV9taW49Jy02MjE2NzIxOTIwMCcKK3NQUklYVTY0PScibFgiJworc1BSSWQ2ND0nImxkIicKK3NQUklpNjQ9JyJsaSInCitzUFJJbzY0PScibG8iJworc1BSSXU2ND0nImx1IicKK3NQUkl4NjQ9JyJseCInCitzZWxlY3RtaW5iaXRzPSc2NCcKK3NpemVzaXplPSc4JwordTMydHlwZT0ndW5zaWduZWQgaW50JwordTY0dHlwZT0ndW5zaWduZWQgbG9uZycKK3VpZGZvcm1hdD0nInUiJwordXF1YWR0eXBlPSd1bnNpZ25lZCBsb25nJwordXNlNjRiaXRhbGw9J2RlZmluZScKK3VzZTY0Yml0aW50PSdkZWZpbmUnCit1dnNpemU9JzgnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTY0LWJlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC02NC1iZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDhjZTNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC02NC1iZQpAQCAtMCwwICsxIEBACitieXRlb3JkZXI9Jzg3NjU0MzIxJwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC02NC1sZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtNjQtbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc3ZDJhOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtNjQtbGUKQEAgLTAsMCArMSBAQAorYnl0ZW9yZGVyPScxMjM0NTY3OCcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jcm9zcy1nZW5lcmF0ZV91dWRtYXAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY3Jvc3MtZ2VuZXJhdGVfdXVkbWFwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMGFkNjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY3Jvc3MtZ2VuZXJhdGVfdXVkbWFwLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworSW5kZXg6IHBlcmwtNS4xNC4yL01ha2VmaWxlLlNICis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjE0LjIub3JpZy9NYWtlZmlsZS5TSAorKysrIHBlcmwtNS4xNC4yL01ha2VmaWxlLlNICitAQCAtNjIyLDcgKzYyMiw3IEBAIGJpdGNvdW50Lmg6IGdlbmVyYXRlX3V1ZG1hcCQoSE9TVF9FWEVfRVgKKyAJJChSVU4pIC4vZ2VuZXJhdGVfdXVkbWFwJChIT1NUX0VYRV9FWFQpIHV1ZG1hcC5oIGJpdGNvdW50LmgKKyAKKyBnZW5lcmF0ZV91dWRtYXAkKEhPU1RfRVhFX0VYVCk6IGdlbmVyYXRlX3V1ZG1hcCQoT0JKX0VYVCkKKy0JJChDQykgLW8gZ2VuZXJhdGVfdXVkbWFwJChFWEVfRVhUKSAkKExERkxBR1MpIGdlbmVyYXRlX3V1ZG1hcCQoT0JKX0VYVCkgJChsaWJzKQorKwkkKEJVSUxEX0NDKSAtbyBnZW5lcmF0ZV91dWRtYXAkKEVYRV9FWFQpIGdlbmVyYXRlX3V1ZG1hcC5jCisgCisgbWluaXBlcmxtYWluJChPQkpfRVhUKTogbWluaXBlcmxtYWluLmMgcGF0Y2hsZXZlbC5oCisgCSQoQ0NDTUQpICQoUExETEZMQUdTKSAkKi5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2NwYW4tbWlzc2luZy1zaXRlLWRpcnMuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vY3Bhbi1taXNzaW5nLXNpdGUtZGlycy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2M2I5NjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2NwYW4tbWlzc2luZy1zaXRlLWRpcnMuZGlmZgpAQCAtMCwwICsxLDYyIEBACitGcm9tIGQzM2Q0Njk2MzAzNWVmNzI2MTQ0ZGM2NmJlMmFlOWMwMGFlYzAzMzMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CitEYXRlOiBUdWUsIDE2IE9jdCAyMDEyIDIzOjA3OjU2ICswMzAwCitTdWJqZWN0OiBGaXggQ1BBTjo6Rmlyc3RUaW1lIGRlZmF1bHRzIHdpdGggbm9uZXhpc3Rpbmcgc2l0ZSBkaXJzIGlmIGEgcGFyZW50CisgaXMgd3JpdGFibGUKKworVGhlIHNpdGUgZGlyZWN0b3JpZXMgZG8gbm90IGV4aXN0IG9uIGEgdHlwaWNhbCBEZWJpYW4gc3lzdGVtLiAgVGhlIGJ1aWxkCitzeXN0ZW1zIHdpbGwgY3JlYXRlIHRoZW0gd2hlbiBuZWNlc3NhcnksIHNvIHRoZXJlJ3Mgbm8gbmVlZCBmb3IgYSBwcm9tcHQKK3N1Z2dlc3RpbmcgbG9jYWw6OmxpYiBpZiB0aGUgZmlyc3QgZXhpc3RpbmcgcGFyZW50IGRpcmVjdG9yeSBpcyB3cml0YWJsZS4KKworQWxzbywgd3JpdGFiaWxpdHkgb2YgdGhlIGNvcmUgZGlyZWN0b3JpZXMgaXMgbm90IGludGVyZXN0aW5nIGFzIHdlCitleHBsaWNpdGx5IHRlbGwgQ1BBTiBub3QgdG8gdG91Y2ggdGhvc2Ugd2l0aCBJTlNUQUxMRElSUz1zaXRlLgorCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzY4ODg0MgorUGF0Y2gtTmFtZTogZGViaWFuL2NwYW4tbWlzc2luZy1zaXRlLWRpcnMuZGlmZgorLS0tCisgY3Bhbi9DUEFOL2xpYi9DUEFOL0ZpcnN0VGltZS5wbSB8IDMxICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjcgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vQ1BBTi9saWIvQ1BBTi9GaXJzdFRpbWUucG0gYi9jcGFuL0NQQU4vbGliL0NQQU4vRmlyc3RUaW1lLnBtCitpbmRleCAzMzA1NGNkLi43YjBiZWNmIDEwMDY0NAorLS0tIGEvY3Bhbi9DUEFOL2xpYi9DUEFOL0ZpcnN0VGltZS5wbQorKysrIGIvY3Bhbi9DUEFOL2xpYi9DUEFOL0ZpcnN0VGltZS5wbQorQEAgLTIwNTcsMTEgKzIwNTcsMzQgQEAgc3ViIF9wcmludF91cmxsaXN0IHsKKyAgICAgfTsKKyB9CisgCisrIyBEZWJpYW4gbW9kaWZpY2F0aW9uOiByZXR1cm4gdHJ1ZSBpZiB0aGlzIGRpcmVjdG9yeQorKyMgb3IgdGhlIGZpcnN0IGV4aXN0aW5nIG9uZSB1cHdhcmRzIGlzIHdyaXRhYmxlCisrc3ViIF9jYW5fd3JpdGVfdG9fdGhpc19vcl9wYXJlbnQgeworKyAgICBteSAoJGRpcikgPSBAXzsKKysgICAgbXkgQHBhcnRzID0gRmlsZTo6U3BlYy0+c3BsaXRkaXIoJGRpcik7CisrICAgIHdoaWxlIChAcGFydHMpIHsKKysgICAgICAgIG15ICRjdXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIoQHBhcnRzKTsKKysgICAgICAgIHJldHVybiAxIGlmIC13ICRjdXI7CisrICAgICAgICByZXR1cm4gMCBpZiAtZSBfOworKyAgICAgICAgcG9wIEBwYXJ0czsKKysgICAgfQorKyAgICByZXR1cm4gMDsKKyt9CisrCisrIyBEZWJpYW4gc3BlY2lmaWMgbW9kaWZpY2F0aW9uOiB0aGUgc2l0ZSBkaXJlY3RvcmllcyBkb24ndCBuZWNlc3NhcmlseQorKyMgZXhpc3Qgb24gdGhlIHN5c3RlbSwgYnV0IHRoZSBidWlsZCBzeXN0ZW1zIGNyZWF0ZSB0aGVtIHdoZW4gbmVjZXNzYXJ5LAorKyMgc28gcmV0dXJuIHRydWUgaWYgdGhlIGZpcnN0IGV4aXN0aW5nIGRpcmVjdG9yeSB1cHdhcmRzIGlzIHdyaXRhYmxlCisrIworKyMgRnVydGhlcm1vcmUsIG9uIERlYmlhbiwgb25seSB0ZXN0IHRoZSBzaXRlIGRpcmVjdG9yaWVzCisrIyAoaW5zdGFsbHNpdGUqLCBleHBhbmRlZCB0byAvdXNyL2xvY2FsL3tzaGFyZSxsaWJ9L3BlcmwpLAorKyMgbm90IHRoZSBjb3JlIG9uZXMgCisrIyAoaW5zdGFsbCpsaWIsIGV4cGFuZGVkIHRvIC91c3Ive3NoYXJlLGxpYn0vcGVybCkuCisrIyBXZSBwYXNzIElOU1RBTExESVJTPXNpdGUgYnkgZGVmYXVsdCB0byBrZWVwIENQQU4gZnJvbSB0b3VjaGluZworKyMgdGhlIGNvcmUgZGlyZWN0b3JpZXMuCisrCisgc3ViIF9jYW5fd3JpdGVfdG9fbGliZGlycyB7CistICAgIHJldHVybiAtdyAkQ29uZmlne2luc3RhbGxwcml2bGlifQorLSAgICAgICAgJiYgLXcgJENvbmZpZ3tpbnN0YWxsYXJjaGxpYn0KKy0gICAgICAgICYmIC13ICRDb25maWd7aW5zdGFsbHNpdGVsaWJ9CistICAgICAgICAmJiAtdyAkQ29uZmlne2luc3RhbGxzaXRlYXJjaH0KKysgICAgcmV0dXJuIF9jYW5fd3JpdGVfdG9fdGhpc19vcl9wYXJlbnQoJENvbmZpZ3tpbnN0YWxsc2l0ZWxpYn0pCisrICAgICAgICAmJiBfY2FuX3dyaXRlX3RvX3RoaXNfb3JfcGFyZW50KCRDb25maWd7aW5zdGFsbHNpdGVhcmNofSkKKyB9CisgCisgc3ViIF91c2luZ19pbnN0YWxsYmFzZSB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2NwYW5fZGVmaW5zdGFsbGRpcnMuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vY3Bhbl9kZWZpbnN0YWxsZGlycy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNTI5NTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2NwYW5fZGVmaW5zdGFsbGRpcnMuZGlmZgpAQCAtMCwwICsxLDM3IEBACitGcm9tIDVmZjFmMjE0ODRhYWI2OGVmZTMyMWZmNGJhNWQzNTkyOGY3MmFmOTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IFR1ZSwgOCBNYXIgMjAwNSAxOTozMDozOCArMTEwMAorU3ViamVjdDogUHJvdmlkZSBhIHNlbnNpYmxlIElOU1RBTExESVJTIGRlZmF1bHQgZm9yIG1vZHVsZXMgaW5zdGFsbGVkIGZyb20KKyBDUEFOLgorCitTb21lIG1vZHVsZXMgd2hpY2ggYXJlIGluY2x1ZGVkIGluIGNvcmUgc2V0IElOU1RBTExESVJTID0+ICdwZXJsJworZXhwbGljaXRseSBpbiBNYWtlZmlsZS5QTCBvciBCdWlsZC5QTC4gIFRoaXMgbWFrZXMgc2Vuc2UgZm9yIHRoZSBub3JtYWwgQElOQworb3JkZXJpbmcsIGJ1dCBub3Qgb3Vycy4KKworUGF0Y2gtTmFtZTogZGViaWFuL2NwYW5fZGVmaW5zdGFsbGRpcnMuZGlmZgorLS0tCisgY3Bhbi9DUEFOL2xpYi9DUEFOL0ZpcnN0VGltZS5wbSB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL0NQQU4vbGliL0NQQU4vRmlyc3RUaW1lLnBtIGIvY3Bhbi9DUEFOL2xpYi9DUEFOL0ZpcnN0VGltZS5wbQoraW5kZXggOTE4ZTAwOS4uMzMwNTRjZCAxMDA2NDQKKy0tLSBhL2NwYW4vQ1BBTi9saWIvQ1BBTi9GaXJzdFRpbWUucG0KKysrKyBiL2NwYW4vQ1BBTi9saWIvQ1BBTi9GaXJzdFRpbWUucG0KK0BAIC0xMDI0LDcgKzEwMjQsNyBAQCBzdWIgaW5pdCB7CisgICAgIG15X3Byb21wdF9sb29wKHByZWZlcl9pbnN0YWxsZXIgPT4gJ01CJywgJG1hdGNoZXIsICdNQnxFVU1NfFJBTkQnKTsKKyAKKyAgICAgaWYgKCEkbWF0Y2hlciBvciAnbWFrZXBsX2FyZyBtYWtlX2FyZycgPX4gLyRtYXRjaGVyLykgeworLSAgICAgICAgbXlfZGZsdF9wcm9tcHQobWFrZXBsX2FyZyA9PiAiIiwgJG1hdGNoZXIpOworKyAgICAgICAgbXlfZGZsdF9wcm9tcHQobWFrZXBsX2FyZyA9PiAiSU5TVEFMTERJUlM9c2l0ZSIsICRtYXRjaGVyKTsKKyAgICAgICAgIG15X2RmbHRfcHJvbXB0KG1ha2VfYXJnID0+ICIiLCAkbWF0Y2hlcik7CisgICAgICAgICBpZiAoICRDUEFOOjpDb25maWctPnttYWtlcGxfYXJnfSA9fiAvTElCUz18SU5DPS8gKSB7CisgICAgICAgICAgICAgJENQQU46OkZyb250ZW5kLT5teXdhcm4oCitAQCAtMTA1Niw3ICsxMDU2LDcgQEAgc3ViIGluaXQgeworICAgICBteV9kZmx0X3Byb21wdChtYWtlX2luc3RhbGxfYXJnID0+ICRDUEFOOjpDb25maWctPnttYWtlX2FyZ30gfHwgIiIsCisgICAgICAgICAgICAgICAgICAgICRtYXRjaGVyKTsKKyAKKy0gICAgbXlfZGZsdF9wcm9tcHQobWJ1aWxkcGxfYXJnID0+ICIiLCAkbWF0Y2hlcik7CisrICAgIG15X2RmbHRfcHJvbXB0KG1idWlsZHBsX2FyZyA9PiAiLS1pbnN0YWxsZGlycyBzaXRlIiwgJG1hdGNoZXIpOworICAgICBteV9kZmx0X3Byb21wdChtYnVpbGRfYXJnID0+ICIiLCAkbWF0Y2hlcik7CisgCisgICAgIGlmIChleGlzdHMgJENQQU46OkhhbmRsZUNvbmZpZzo6a2V5c3ttYnVpbGRfaW5zdGFsbF9idWlsZF9jb21tYW5kfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9kYl9maWxlX3Zlci5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9kYl9maWxlX3Zlci5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MGJmMTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2RiX2ZpbGVfdmVyLmRpZmYKQEAgLTAsMCArMSwzNCBAQAorRnJvbSAwMTQyMWY4YTgwZDVjNjIzOTU5Njk1YmEyYjgxNjdmMzAxMTJkMzMzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBGcmksIDE2IERlYyAyMDA1IDAxOjMyOjE0ICsxMTAwCitTdWJqZWN0OiBSZW1vdmUgb3Zlcmx5IHJlc3RyaWN0aXZlIERCX0ZpbGUgdmVyc2lvbiBjaGVjay4KKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy8zNDAwNDcKKworUGFja2FnZSBkZXBlbmRlbmNpZXMgZW5zdXJlIHRoZSBjb3JyZWN0IGxpYnJhcnkgaXMgbGlua2VkIGF0IHJ1bi10aW1lLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vZGJfZmlsZV92ZXIuZGlmZgorLS0tCisgY3Bhbi9EQl9GaWxlL3ZlcnNpb24uYyB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jcGFuL0RCX0ZpbGUvdmVyc2lvbi5jIGIvY3Bhbi9EQl9GaWxlL3ZlcnNpb24uYworaW5kZXggZTAxZjZmNi4uNTQ0ZTZlZSAxMDA2NDQKKy0tLSBhL2NwYW4vREJfRmlsZS92ZXJzaW9uLmMKKysrKyBiL2NwYW4vREJfRmlsZS92ZXJzaW9uLmMKK0BAIC00OCw2ICs0OCw3IEBAIF9fZ2V0QmVya2VsZXlEQkluZm8oKQorIAorICAgICAodm9pZClkYl92ZXJzaW9uKCZNYWpvciwgJk1pbm9yLCAmUGF0Y2gpIDsKKyAKKysjaWZuZGVmIERFQklBTgorICAgICAvKiBDaGVjayB0aGF0IHRoZSB2ZXJzaW9ucyBvZiBkYi5oIGFuZCBsaWJkYi5hIGFyZSB0aGUgc2FtZSAqLworICAgICBpZiAoTWFqb3IgIT0gREJfVkVSU0lPTl9NQUpPUiB8fCBNaW5vciAhPSBEQl9WRVJTSU9OX01JTk9SICkKKyAJCS8qIHx8IFBhdGNoICE9IERCX1ZFUlNJT05fUEFUQ0gpICovCitAQCAtNTUsNiArNTYsNyBAQCBfX2dldEJlcmtlbGV5REJJbmZvKCkKKyAJY3JvYWsoIlxuREJfRmlsZSB3YXMgYnVpbGQgd2l0aCBsaWJkYiB2ZXJzaW9uICVkLiVkLiVkLFxuYnV0IHlvdSBhcmUgYXR0ZW1wdGluZyB0byBydW4gaXQgd2l0aCBsaWJkYiB2ZXJzaW9uICVkLiVkLiVkXG4iLAorIAkJREJfVkVSU0lPTl9NQUpPUiwgREJfVkVSU0lPTl9NSU5PUiwgREJfVkVSU0lPTl9QQVRDSCwgCisgCQlNYWpvciwgTWlub3IsIFBhdGNoKSA7CisrI2VuZGlmIC8qIERFQklBTiAqLworICAgICAKKyAgICAgLyogY2hlY2sgdGhhdCBsaWJkYiBpcyByZWNlbnQgZW5vdWdoICAtLSB3ZSBuZWVkIDIuMy40IG9yIGdyZWF0ZXIgKi8KKyAgICAgaWYgKE1ham9yID09IDIgJiYgKE1pbm9yIDwgMyB8fCAoTWlub3IgPT0gIDMgJiYgUGF0Y2ggPCA0KSkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2RlcHJlY2F0ZS13aXRoLWFwdC5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9kZXByZWNhdGUtd2l0aC1hcHQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDFlZTRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9kZXByZWNhdGUtd2l0aC1hcHQuZGlmZgpAQCAtMCwwICsxLDU2IEBACitGcm9tIGRlZjRhYTM4MTdmOThhYWU2MjVlNjAxYjc5MWVmMDY4Mjc2ZjA1ZDUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEb21pbmljIEhhcmdyZWF2ZXMgPGRvbUBlYXJ0aC5saT4KK0RhdGU6IE1vbiwgMTcgTWF5IDIwMTAgMTM6MjM6MDcgKzAzMDAKK1N1YmplY3Q6IFBvaW50IHVzZXJzIHRvIERlYmlhbiBwYWNrYWdlcyBvZiBkZXByZWNhdGVkIGNvcmUgbW9kdWxlcworCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzc0NzYyOAorCitTZXZlcmFsIG1vZHVsZXMgYXJlIGJlaW5nIGRlcHJlY2F0ZWQgd2l0aCBwZXJsIDUuMjAuCitUbyBnZXQgYSBjbGVhbiB0cmFuc2l0aW9uLCBwZXJsL3BlcmwtbW9kdWxlcyBpcyBnb2luZyB0byByZWNvbW1lbmQgdGhlCitzZXBhcmF0ZSBEZWJpYW4gcGFja2FnZXMgb2YgdGhlc2UgZm9yIG9uZSByZWxlYXNlIGN5Y2xlIHNvIHRoYXQgdGhleSB3aWxsIGJlCitwdWxsZWQgaW4gYnkgZGVmYXVsdCBvbiB1cGdyYWRlcy4gVGhpcyBpcyB0YWtpbmcgcGxhY2UgZm9yIHBlcmwgNS4yMC9qZXNzaWUuCisKK0hvd2V2ZXIsIG9uIHN5c3RlbXMgY29uZmlndXJlZCB0byBpZ25vcmUgcmVjb21tZW5kYXRpb25zIHRoZSBkZXByZWNhdGlvbgord2FybmluZ3Mgd2lsbCBzdGlsbCBiZSB1c2VmdWwsIHNvIG1vZGlmeSB0aGVtIHNsaWdodGx5IHRvIHBvaW50IHRvIHRoZQorc2VwYXJhdGUgcGFja2FnZXMgaW5zdGVhZC4KKworUGF0Y2gtTmFtZTogZGViaWFuL2RlcHJlY2F0ZS13aXRoLWFwdC5kaWZmCistLS0KKyBsaWIvZGVwcmVjYXRlLnBtIHwgMTUgKysrKysrKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9kZXByZWNhdGUucG0gYi9saWIvZGVwcmVjYXRlLnBtCitpbmRleCA0N2JjMTEyLi5iMGM2MWRmIDEwMDY0NAorLS0tIGEvbGliL2RlcHJlY2F0ZS5wbQorKysrIGIvbGliL2RlcHJlY2F0ZS5wbQorQEAgLTcsNiArNywxMyBAQCBvdXIgJFZFUlNJT04gPSAwLjAzOworIG91ciAlQ29uZmlnOworIHVubGVzcyAoJUNvbmZpZykgeyByZXF1aXJlIENvbmZpZzsgKkNvbmZpZyA9IFwlQ29uZmlnOjpDb25maWc7IH0KKyAKKysjIERlYmlhbi1zcGVjaWZpYyBjaGFuZ2U6IHJlY29tbWVuZCB0aGUgc2VwYXJhdGUgRGViaWFuIHBhY2thZ2VzIG9mCisrIyBkZXByZWNhdGVkIG1vZHVsZXMgd2hlcmUgYXZhaWxhYmxlCisrCisrb3VyICVERUJJQU5fUEFDS0FHRVMgPSAoCisrICAgICMgTm9uZSBmb3IgdGhlIHBlcmwgNS4yMiBjeWNsZQorKyk7CisrCisgIyBUaGlzIGlzbid0IGEgcHVibGljIEFQSS4gSXQncyBpbnRlcm5hbCB0byBjb2RlIG1haW50YWluZWQgYnkgdGhlIHBlcmwtcG9ydGVycworICMgSWYgeW91IHdvdWxkIGxpa2UgaXQgdG8gYmUgYSBwdWJsaWMgQVBJLCBwbGVhc2Ugc2VuZCBhIHBhdGNoIHdpdGgKKyAjIGRvY3VtZW50YXRpb24gYW5kIHRlc3RzLiBVbnRpbCB0aGVuLCBpdCBtYXkgY2hhbmdlIHdpdGhvdXQgd2FybmluZy4KK0BAIC01OCw5ICs2NSwxNSBAQCBFT00KKyAJaWYgKGRlZmluZWQgJGNhbGxlcnNfYml0bWFzaworIAkgICAgJiYgKHZlYygkY2FsbGVyc19iaXRtYXNrLCAkd2FybmluZ3M6Ok9mZnNldHN7ZGVwcmVjYXRlZH0sIDEpCisgCQl8fCB2ZWMoJGNhbGxlcnNfYml0bWFzaywgJHdhcm5pbmdzOjpPZmZzZXRze2FsbH0sIDEpKSkgeworLQkgICAgd2FybiA8PCJFT00iOworKwkJaWYgKG15ICRkZWIgPSAkREVCSUFOX1BBQ0tBR0VTeyRwYWNrYWdlfSkgeworKwkJICAgIHdhcm4gPDwiRU9NIjsKKyskcGFja2FnZSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgUGVybCBjb3JlIGRpc3RyaWJ1dGlvbiBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLiBQbGVhc2UgaW5zdGFsbCB0aGUgc2VwYXJhdGUgJGRlYiBwYWNrYWdlLiBJdCBpcyBiZWluZyB1c2VkIGF0ICRjYWxsX2ZpbGUsIGxpbmUgJGNhbGxfbGluZS4KKytFT00KKysJCX0gZWxzZSB7CisrCQkgICAgd2FybiA8PCJFT00iOworICRwYWNrYWdlIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBQZXJsIGNvcmUgZGlzdHJpYnV0aW9uIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuIFBsZWFzZSBpbnN0YWxsIGl0IGZyb20gQ1BBTi4gSXQgaXMgYmVpbmcgdXNlZCBhdCAkY2FsbF9maWxlLCBsaW5lICRjYWxsX2xpbmUuCisgRU9NCisrCQl9CisgCX0KKyAgICAgfQorIH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZG9jX2luZm8uZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZG9jX2luZm8uZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmVhMmVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9kb2NfaW5mby5kaWZmCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gZTE4ZjgxZTY5YzU1ZDY5OGFiZDI5M2U3MTA2M2Q2YjZiMjc1Y2MwNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogRnJpLCAxOCBNYXIgMjAwNSAyMjoyMjoyNSArMTEwMAorU3ViamVjdDogUmVwbGFjZSBnZW5lcmljIG1hbigxKSBpbnN0cnVjdGlvbnMgd2l0aCBEZWJpYW4tc3BlY2lmaWMgaW5mb3JtYXRpb24uCisKK0luZGljYXRlIHRoYXQgdGhlIHVzZXIgbmVlZHMgdG8gaW5zdGFsbCB0aGUgcGVybC1kb2MgcGFja2FnZS4KKworUGF0Y2gtTmFtZTogZGViaWFuL2RvY19pbmZvLmRpZmYKKy0tLQorIHBvZC9wZXJsLnBvZCB8IDEyICsrKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvcG9kL3BlcmwucG9kIGIvcG9kL3BlcmwucG9kCitpbmRleCAzNjRlOTU3Li5mOTdlMTAzIDEwMDY0NAorLS0tIGEvcG9kL3BlcmwucG9kCisrKysgYi9wb2QvcGVybC5wb2QKK0BAIC0yOTEsOCArMjkxLDE2IEBAIGF1eCBjMnBoIGgycGggaDJ4cyBwZXJsYnVnIHBsMnBtIHBvZDJodG1sIHBvZDJtYW4gc3BsYWluIHhzdWJwcAorIAorID1mb3IgYnVpbGR0b2MgX19FTkRfXworIAorLU9uIGEgVW5peC1saWtlIHN5c3RlbSwgdGhlc2UgZG9jdW1lbnRhdGlvbiBmaWxlcyB3aWxsIHVzdWFsbHkgYWxzbyBiZQorLWF2YWlsYWJsZSBhcyBtYW5wYWdlcyBmb3IgdXNlIHdpdGggdGhlIEY8bWFuPiBwcm9ncmFtLgorK09uIERlYmlhbiBzeXN0ZW1zLCB5b3UgbmVlZCB0byBpbnN0YWxsIHRoZSBCPHBlcmwtZG9jPiBwYWNrYWdlIHdoaWNoCisrY29udGFpbnMgdGhlIG1ham9yaXR5IG9mIHRoZSBzdGFuZGFyZCBQZXJsIGRvY3VtZW50YXRpb24gYW5kIHRoZQorK0Y8cGVybGRvYz4gcHJvZ3JhbS4KKysKKytFeHRlbnNpdmUgYWRkaXRpb25hbCBkb2N1bWVudGF0aW9uIGZvciBQZXJsIG1vZHVsZXMgaXMgYXZhaWxhYmxlLCBib3RoCisrdGhvc2UgZGlzdHJpYnV0ZWQgd2l0aCBQZXJsIGFuZCB0aGlyZC1wYXJ0eSBtb2R1bGVzIHdoaWNoIGFyZSBwYWNrYWdlZAorK29yIGxvY2FsbHkgaW5zdGFsbGVkLgorKworK1lvdSBzaG91bGQgYmUgYWJsZSB0byB2aWV3IFBlcmwncyBkb2N1bWVudGF0aW9uIHdpdGggeW91ciBtYW4oMSkKKytwcm9ncmFtIG9yIHBlcmxkb2MoMSkuCisgCisgU29tZSBkb2N1bWVudGF0aW9uIGlzIG5vdCBhdmFpbGFibGUgYXMgbWFuIHBhZ2VzLCBzbyBpZiBhCisgY3Jvc3MtcmVmZXJlbmNlIGlzIG5vdCBmb3VuZCBieSBtYW4sIHRyeSBpdCB3aXRoIEw8cGVybGRvYz4uICBQZXJsZG9jIGNhbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9lbmMyeHNfaW5jLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2VuYzJ4c19pbmMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDc0YjIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9lbmMyeHNfaW5jLmRpZmYKQEAgLTAsMCArMSw3MCBAQAorRnJvbSA3ZmU1OWEzZDA2MDFjNmQ4NjM0ZWFlNGY5OWRhZTMwMjRjZDAyYTkyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBUdWUsIDggTWFyIDIwMDUgMTk6MzA6MzggKzExMDAKK1N1YmplY3Q6IFR3ZWFrIGVuYzJ4cyB0byBmb2xsb3cgc3ltbGlua3MgYW5kIGlnbm9yZSBtaXNzaW5nIEBJTkMgZGlyZWN0b3JpZXMuCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvMjkwMzM2CisKKy0gaWdub3JlIG1pc3NpbmcgZGlyZWN0b3JpZXMsCistIGZvbGxvdyBzeW1saW5rcyAoL3Vzci9zaGFyZS9wZXJsLzUuOCAtPiA1LjguNCkuCistIGZpbHRlciAiLiIgb3V0IHdoZW4gcnVubmluZyAiZW5jMnhzIC1DIiwgaXQncyB1bm5lY2Vzc2FyeSBhbmQgY2F1c2VzCisgIGlzc3VlcyB3aXRoIGZvbGxvdyA9PiAxIChzZWUgIzYwMzY4NiBhbmQgW3J0LmNwYW4ub3JnICM2NDU4NV0pCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9lbmMyeHNfaW5jLmRpZmYKKy0tLQorIGNwYW4vRW5jb2RlL2Jpbi9lbmMyeHMgfCA4ICsrKystLS0tCisgdC9wb3J0aW5nL2N1c3RvbWl6ZWQudCB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL0VuY29kZS9iaW4vZW5jMnhzIGIvY3Bhbi9FbmNvZGUvYmluL2VuYzJ4cworaW5kZXggMTlmMmIyYi4uNGQ2NGUzOCAxMDA2NDQKKy0tLSBhL2NwYW4vRW5jb2RlL2Jpbi9lbmMyeHMKKysrKyBiL2NwYW4vRW5jb2RlL2Jpbi9lbmMyeHMKK0BAIC05NDQsMTEgKzk0NCwxMSBAQCB1c2UgdmFycyBxdygKKyBzdWIgZmluZF9lMnh7CisgICAgIGV2YWwgeyByZXF1aXJlIEZpbGU6OkZpbmQ7IH07CisgICAgIG15IChAaW5jLCAlZTJ4X2Rpcik7CistICAgIGZvciBteSAkaW5jIChASU5DKXsKKysgICAgZm9yIG15ICRpbmMgKGdyZXAgLWQsIEBJTkMpeworICAgICBwdXNoIEBpbmMsICRpbmMgdW5sZXNzICRpbmMgZXEgJy4nOyAjc2tpcCBjdXJyZW50IGRpcgorICAgICB9CisgICAgIEZpbGU6OkZpbmQ6OmZpbmQoCistICAgICAgICAgc3ViIHsKKysgICAgICAgICB7IHdhbnRlZCA9PiBzdWIgeworICAgICAgICAgIG15ICgkZGV2LCRpbm8sJG1vZGUsJG5saW5rLCR1aWQsJGdpZCwkcmRldiwkc2l6ZSwKKyAgICAgICAgICAgICAgJGF0aW1lLCRtdGltZSwkY3RpbWUsJGJsa3NpemUsJGJsb2NrcykKKyAgICAgICAgICAgICAgPSBsc3RhdCgkXykgb3IgcmV0dXJuOworQEAgLTk1OCw3ICs5NTgsNyBAQCBzdWIgZmluZF9lMnh7CisgICAgICAgICAgICAgICRlMnhfZGlyeyRGaWxlOjpGaW5kOjpkaXJ9IHx8PSAkbXRpbWU7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybjsKKy0gICAgICAgICB9LCBAaW5jKTsKKysgICAgICAgICB9LCBmb2xsb3cgPT4gMX0sIEBpbmMpOworICAgICB3YXJuIGpvaW4oIlxuIiwga2V5cyAlZTJ4X2RpciksICJcbiI7CisgICAgIGZvciBteSAkZCAoc29ydCB7JGUyeF9kaXJ7JGF9IDw9PiAkZTJ4X2RpcnskYn19IGtleXMgJWUyeF9kaXIpeworICAgICAkX0UyWCA9ICRkOworQEAgLTEwMjUsNyArMTAyNSw3IEBAIHN1YiBtYWtlX2NvbmZpZ2xvY2FsX3BtIHsKKyAJICAgICRMb2NhbE1vZHskZW5jfSB8fD0gJG1vZDsKKyAJfQorICAgICB9OworLSAgICBGaWxlOjpGaW5kOjpmaW5kKHt3YW50ZWQgPT4gJHdhbnRlZH0sIEBJTkMpOworKyAgICBGaWxlOjpGaW5kOjpmaW5kKHt3YW50ZWQgPT4gJHdhbnRlZCwgZm9sbG93ID0+IDF9LCBncmVwIC1kICYmICEvXlwuLywgQElOQyk7CisgICAgICRfTW9kTGluZXMgPSAiIjsKKyAgICAgZm9yIG15ICRlbmMgKCBzb3J0IGtleXMgJUxvY2FsTW9kICkgeworICAgICAgICAgJF9Nb2RMaW5lcyAuPQorZGlmZiAtLWdpdCBhL3QvcG9ydGluZy9jdXN0b21pemVkLnQgYi90L3BvcnRpbmcvY3VzdG9taXplZC50CitpbmRleCA0NWZjYWZiLi4zYmQ2YWRiIDEwMDY0NAorLS0tIGEvdC9wb3J0aW5nL2N1c3RvbWl6ZWQudAorKysrIGIvdC9wb3J0aW5nL2N1c3RvbWl6ZWQudAorQEAgLTEwMSw4ICsxMDEsMTEgQEAgZm9yZWFjaCBteSAkbW9kdWxlICggc29ydCBrZXlzICVNb2R1bGVzICkgeworICAgICAgIHByaW50ICRkYXRhX2ZoIGpvaW4oJyAnLCAkbW9kdWxlLCAkZmlsZSwgJGlkKSwgIlxuIjsKKyAgICAgICBuZXh0OworICAgICB9CisrU0tJUDogeworKyAgICBza2lwKCIkZmlsZSBtb2RpZmllZCBmb3IgRGViaWFuIiwgMSkgaWYgJGZpbGUgZXEgJ2NwYW4vRW5jb2RlL2Jpbi9lbmMyeHMnOworICAgICBteSAkc2hvdWxkX2JlID0gJGN1c3RvbWlzZWR7ICRtb2R1bGUgfS0+eyAkZmlsZSB9OworICAgICBpcyggJGlkLCAkc2hvdWxkX2JlLCAiU0hBIGZvciAkZmlsZSBtYXRjaGVzIHN0YXNoZWQgU0hBIiApOworK30KKyAgIH0KKyB9CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2Vycm5vX3Zlci5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9lcnJub192ZXIuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2I1OWM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9lcnJub192ZXIuZGlmZgpAQCAtMCwwICsxLDM1IEBACitGcm9tIDgyN2VlZTIyNTg5N2MzNWVjOTcxOTRhNTk3MWJmNGJmY2YyNTA3NDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IEZyaSwgMTYgRGVjIDIwMDUgMDE6MzI6MTQgKzExMDAKK1N1YmplY3Q6IFJlbW92ZSBFcnJubyB2ZXJzaW9uIGNoZWNrIGR1ZSB0byB1cGdyYWRlIHByb2JsZW1zIHdpdGggbG9uZy1ydW5uaW5nCisgcHJvY2Vzc2VzLgorCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzM0MzM1MQorCitSZW1vdmUgdmVyc2lvbiBjaGVjayB3aGljaCBjYW4gY2F1c2UgcHJvYmxlbXMgZm9yIGxvbmcgcnVubmluZworcHJvY2Vzc2VzIGVtYmVkZGluZyBwZXJsIHdoZW4gdXBncmFkaW5nIHRvIGEgbmV3ZXIgdmVyc2lvbiwKK2NvbXBhdGlibGUsIGJ1dCBidWlsdCBvbiBhIGRpZmZlcmVudCBtYWNoaW5lLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vZXJybm9fdmVyLmRpZmYKKy0tLQorIGV4dC9FcnJuby9FcnJub19wbS5QTCB8IDUgLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2V4dC9FcnJuby9FcnJub19wbS5QTCBiL2V4dC9FcnJuby9FcnJub19wbS5QTAoraW5kZXggYzZiZmEwNi4uNTE5ZTVjNyAxMDA2NDQKKy0tLSBhL2V4dC9FcnJuby9FcnJub19wbS5QTAorKysrIGIvZXh0L0Vycm5vL0Vycm5vX3BtLlBMCitAQCAtMjc4LDEzICsyNzgsOCBAQCBzdWIgd3JpdGVfZXJybm9fcG0geworIAorIHBhY2thZ2UgRXJybm87CisgcmVxdWlyZSBFeHBvcnRlcjsKKy11c2UgQ29uZmlnOworIHVzZSBzdHJpY3Q7CisgCistIlwkQ29uZmlneydhcmNobmFtZSd9LVwkQ29uZmlneydvc3ZlcnMnfSIgZXEKKy0iJGFyY2huYW1lLSRDb25maWd7J29zdmVycyd9IiBvcgorLQlkaWUgIkVycm5vIGFyY2hpdGVjdHVyZSAoJGFyY2huYW1lLSRDb25maWd7J29zdmVycyd9KSBkb2VzIG5vdCBtYXRjaCBleGVjdXRhYmxlIGFyY2hpdGVjdHVyZSAoXCRDb25maWd7J2FyY2huYW1lJ30tXCRDb25maWd7J29zdmVycyd9KSI7CistCisgb3VyIFwkVkVSU0lPTiA9ICIkVkVSU0lPTiI7CisgXCRWRVJTSU9OID0gZXZhbCBcJFZFUlNJT047Cisgb3VyIFxASVNBID0gJ0V4cG9ydGVyJzsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZXh0dXRpbHNfc2V0X2xpYnBlcmxfcGF0aC5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9leHR1dGlsc19zZXRfbGlicGVybF9wYXRoLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiNGJkOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZXh0dXRpbHNfc2V0X2xpYnBlcmxfcGF0aC5kaWZmCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gNDMxMjc1MDc4YjA0OTBkMmUwOTI0NDJkOTU4MmJlMDZiYjk1YjM1NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IFNhdCwgMTAgTWF5IDIwMTQgMjM6MzQ6MTQgKzAzMDAKK1N1YmplY3Q6IEVVOk1NOiBzZXQgbG9jYXRpb24gb2YgbGlicGVybC5hIHVuZGVyIC91c3IvbGliCisKK1RoZSBEZWJpYW4gcGFja2FnaW5nIG1vdmVzIGxpYnBlcmwuYSBhIGNvdXBsZSBvZiBsZXZlbHMgdXAgZnJvbSB0aGUKK0NPUkUgZGlyZWN0b3J5IHRvIG1hdGNoIG90aGVyIHN0YXRpYyBsaWJyYXJpZXMuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9leHR1dGlsc19zZXRfbGlicGVybF9wYXRoLmRpZmYKKy0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIHwgMiArLQorIHBwLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQoraW5kZXggNWYxYjg3Zi4uNTcwYTYzMSAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorQEAgLTI1MDUsNyArMjUwNSw3IEBAIE1BUF9QUkVMSUJTICAgPSAkQ29uZmlne3BlcmxsaWJzfSAkQ29uZmlne2NyeXB0bGlifQorIAkoJGxwZXJsID0gJGxpYnBlcmwpID1+IHMvXCRcKEFcKS8kc2VsZi0+e0xJQl9FWFR9LzsKKyAgICAgfQorICAgICB1bmxlc3MgKCRsaWJwZXJsICYmIC1mICRscGVybCkgeyAjIElseWEncyBjb2RlLi4uCistCW15ICRkaXIgPSAkc2VsZi0+e1BFUkxfU1JDfSB8fCAiJHNlbGYtPntQRVJMX0FSQ0hMSUJ9L0NPUkUiOworKwlteSAkZGlyID0gJHNlbGYtPntQRVJMX1NSQ30gfHwgIiRzZWxmLT57UEVSTF9BUkNITElCfS8uLi8uLiI7CisgCSRkaXIgPSAiJHNlbGYtPntQRVJMX0FSQ0hMSUJ9Ly4uIiBpZiAkc2VsZi0+e1VOSU5TVEFMTEVEX1BFUkx9OworIAkkbGlicGVybCB8fD0gImxpYnBlcmwkc2VsZi0+e0xJQl9FWFR9IjsKKyAJJGxpYnBlcmwgICA9ICIkZGlyLyRsaWJwZXJsIjsKK2RpZmYgLS1naXQgYS9wcC5jIGIvcHAuYworaW5kZXggNDJmMTU2YS4uNzdjMTI3OSAxMDA2NDQKKy0tLSBhL3BwLmMKKysrKyBiL3BwLmMKK0BAIC0xLDQgKzEsNCBAQAorLS8qICAgIHBwLmMKKysgLyogICAgcHAuYworICAqCisgICogICAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorICAqICAgIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggYnkgTGFycnkgV2FsbCBhbmQgb3RoZXJzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2Zha2Vyb290LmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2Zha2Vyb290LmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM0NjFjZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZmFrZXJvb3QuZGlmZgpAQCAtMCwwICsxLDQyIEBACitGcm9tIDI3YWU3YjE4MDc4ZDgwMWEyYzk0M2FhNmRlMmY3ZTk4MDgxNzcyNTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IEZyaSwgMTggTWFyIDIwMDUgMjI6MjI6MjUgKzExMDAKK1N1YmplY3Q6IFBvc3Rwb25lIExEX0xJQlJBUllfUEFUSCBldmFsdWF0aW9uIHRvIHRoZSBiaW5hcnkgdGFyZ2V0cy4KKworTW9kaWZ5IHRoZSBzZXR0aW5nIG9mIExEX0xJQlJBUllfUEFUSCB0byBhcHBlbmQgcHJlLWV4aXN0aW5nIHZhbHVlcyBhdCB0aGUKK3RpbWUgdGhlIHJ1bGUgaXMgZXZhbHVhdGVkIHJhdGhlciB0aGFuIHdoZW4gdGhlIE1ha2VmaWxlIGlzIGNyZWF0ZWQuCisKK1RoaXMgaXMgcmVxdWlyZWQgd2hlbiBidWlsZGluZyBwYWNrYWdlcyB3aXRoIGRwa2ctYnVpbGRwYWNrYWdlIGFuZCBmYWtlcm9vdCwKK3NpbmNlIGZha2Vyb290ICh3aGljaCBub3cgc2V0cyBMRF9MSUJSQVJZX1BBVEgpIGlzIG5vdCB1c2VkIGZvciB0aGUgImJ1aWxkIgorcnVsZSB3aGVyZSB0aGUgTWFrZWZpbGUgaXMgY3JlYXRlZCwgYnV0IGlzIGZvciB0aGUgY2xlYW4vYmluYXJ5KiB0YXJnZXRzLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vZmFrZXJvb3QuZGlmZgorLS0tCisgTWFrZWZpbGUuU0ggfCA3ICsrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuU0ggYi9NYWtlZmlsZS5TSAoraW5kZXggMDM0ZDgxMi4uMDRkZDdkNSAxMDA3NTUKKy0tLSBhL01ha2VmaWxlLlNICisrKysgYi9NYWtlZmlsZS5TSAorQEAgLTM5LDEwICszOSw3IEBAIGNhc2UgIiR1c2VzaHJwbGliIiBpbgorIHRydWUpCisgCSMgUHJlZml4IGFsbCBydW5zIG9mICdtaW5pcGVybCcgYW5kICdwZXJsJyB3aXRoCisgCSMgJGxkbGlicHRoIHNvIHRoYXQgLi9wZXJsIGZpbmRzICp0aGlzKiBzaGFyZWQgbGlicGVybC4KKy0JY2FzZSAiJExEX0xJQlJBUllfUEFUSCIgaW4KKy0JJycpICBsZGxpYnB0aD0iTERfTElCUkFSWV9QQVRIPWAgcXVvdGUgIiRwd2QiIGAiIDs7CistCSopICAgbGRsaWJwdGg9IkxEX0xJQlJBUllfUEFUSD1gIHF1b3RlICIkcHdkIiBgOmAgcXVvdGUgIiRMRF9MSUJSQVJZX1BBVEgiIGAiIDs7CistCWVzYWMKKysJbGRsaWJwdGg9IkxEX0xJQlJBUllfUEFUSD1gIHF1b3RlICIkcHdkIiBgIickJHtMRF9MSUJSQVJZX1BBVEg6Kzp9JCRMRF9MSUJSQVJZX1BBVEgnCisgCisgCXBsZGxmbGFncz0iJGNjY2RsZmxhZ3MiCisgCXN0YXRpY19sZGZsYWdzPScnCitAQCAtMTEzLDcgKzExMCw3IEBAIHRydWUpCisgCSAgICA7OworIAllc2FjCisgCWNhc2UgIiRsZGxpYnB0aG5hbWUiIGluCistCScnKSA7OworKwknJ3xMRF9MSUJSQVJZX1BBVEgpIDs7CisgCSopCisgCSAgICBjYXNlICIkb3NuYW1lIiBpbgorIAkgICAgb3MyKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maW5kX2h0bWwydGV4dC5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maW5kX2h0bWwydGV4dC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMTllNzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpbmRfaHRtbDJ0ZXh0LmRpZmYKQEAgLTAsMCArMSwzNSBAQAorRnJvbSBjODFkYmRlZGZmOWU5YjRmYjc1YWMwMjhhYTcxODgzOGMwMjkyZDJmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5kcmVhcyBNYXJzY2hrZSA8YW5kcmVhcy5tYXJzY2hrZUBnb29nbGVtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMTcgU2VwIDIwMTEgMTE6Mzg6NDIgKzAxMDAKK1N1YmplY3Q6IENvbmZpZ3VyZSBDUEFOOjpEaXN0cmlidXRpb24gd2l0aCBjb3JyZWN0IG5hbWUgb2YgaHRtbDJ0ZXh0CisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNjQwNDc5CitQYXRjaC1OYW1lOiBkZWJpYW4vZmluZF9odG1sMnRleHQuZGlmZgorCitJZiB5b3UgdXNlIGNwYW4gZnJvbSBEZWJpYW4geW91IHVzdWFsbHkgd2luZCB1cCB0cnlpbmcgdG8gcmVhZCBvbmxpbmUKK2RvY3VtZW50YXRpb24gdGhyb3VnaCBpdC4gVW5mb3J0dW5hdGVseSBjcGFuIGNhbid0IGZpbmQgdGhlCitodG1sMnRleHQucGwgc2NyaXB0IGV2ZW4gdGhvdWdoIGl0IGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRGViaWFuCitwYWNrYWdlICdodG1sMnRleHQnLgorCitQbGVhc2Ugc2VlIHRoZSBhdHRhY2hlZCBwYXRjaCBmb3IgYSBxdWljayBmaXggb2YgdGhpcyBpc3N1ZS4KKworW01haW50YWluZXIncyBub3RlOiBodG1sMnRleHQgaW4gRGViaWFuIGlzIG5vdCB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbgorYXMgdGhlIGh0bWwydGV4dC5wbCB3aGljaCBpcyBleHBlY3RlZCwgYnV0IHNob3VsZCBwcm92aWRlIHNpbWlsYXIKK2Z1bmN0aW9uYWxpdHldLgorLS0tCisgY3Bhbi9DUEFOL2xpYi9DUEFOL0Rpc3RyaWJ1dGlvbi5wbSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vQ1BBTi9saWIvQ1BBTi9EaXN0cmlidXRpb24ucG0gYi9jcGFuL0NQQU4vbGliL0NQQU4vRGlzdHJpYnV0aW9uLnBtCitpbmRleCAwOTJiNzgxLi41YzJiYWUxIDEwMDY0NAorLS0tIGEvY3Bhbi9DUEFOL2xpYi9DUEFOL0Rpc3RyaWJ1dGlvbi5wbQorKysrIGIvY3Bhbi9DUEFOL2xpYi9DUEFOL0Rpc3RyaWJ1dGlvbi5wbQorQEAgLTQwOTksNyArNDA5OSw3IEBAIHN1YiBfZGlzcGxheV91cmwgeworICAgICAgIGlmICRDUEFOOjpERUJVRzsKKyAKKyAgICAgIyBzaG91bGQgd2UgZGVmaW5lIGl0IGluIHRoZSBjb25maWcgaW5zdGVhZD8KKy0gICAgbXkgJGh0bWxfY29udmVydGVyID0gImh0bWwydGV4dC5wbCI7CisrICAgIG15ICRodG1sX2NvbnZlcnRlciA9ICJodG1sMnRleHQiOworIAorICAgICBteSAkd2ViX2Jyb3dzZXIgPSAkQ1BBTjo6Q29uZmlnLT57J2x5bngnfSB8fCB1bmRlZjsKKyAgICAgbXkgJHdlYl9icm93c2VyX291dCA9ICR3ZWJfYnJvd3NlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9kb2N1bWVudF9tYWtlbWFrZXJfY2NmbGFncy5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9kb2N1bWVudF9tYWtlbWFrZXJfY2NmbGFncy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYTkyNzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL2RvY3VtZW50X21ha2VtYWtlcl9jY2ZsYWdzLmRpZmYKQEAgLTAsMCArMSwzMSBAQAorRnJvbSA5ZmFmNmRjYzNhNWM0MTU0NDg0ZDgxMmViM2NjM2RkNzhiMzU1NjNiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPgorRGF0ZTogTW9uLCAzMCBNYXkgMjAxMSAyMjo1NDoyNCArMDMwMAorU3ViamVjdDogRG9jdW1lbnQgdGhhdCBDQ0ZMQUdTIHNob3VsZCBpbmNsdWRlICRDb25maWd7Y2NmbGFnc30KKworQnVnOiBodHRwczovL3J0LmNwYW4ub3JnL1B1YmxpYy9CdWcvRGlzcGxheS5odG1sP2lkPTY4NjEzCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzYyODUyMgorCitDb21waWxpbmcgWFMgZXh0ZW5zaW9ucyB3aXRob3V0ICRDb25maWd7Y2NmbGFnc30gY2FuIGJyZWFrIHRoZQorYmluYXJ5IGludGVyZmFjZSBvbiBzb21lIHBsYXRmb3Jtcy4KKworUGF0Y2gtTmFtZTogZml4ZXMvZG9jdW1lbnRfbWFrZW1ha2VyX2NjZmxhZ3MuZGlmZgorLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01ha2VNYWtlci5wbSB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NYWtlTWFrZXIucG0gYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyLnBtCitpbmRleCBmZTk1YjI3Li45MDQwM2U4IDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01ha2VNYWtlci5wbQorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01ha2VNYWtlci5wbQorQEAgLTE3NzQsNiArMTc3NCwxMCBAQCBjdXJyZW50bHkgdXNlZCBieSBNYWtlTWFrZXIgYnV0IG1heSBiZSBoYW5keSBpbiBNYWtlZmlsZS5QTHMuCisgU3RyaW5nIHRoYXQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgY29tcGlsZXIgY2FsbCBjb21tYW5kIGxpbmUgYmV0d2VlbgorIHRoZSBhcmd1bWVudHMgSU5DIGFuZCBPUFRJTUlaRS4KKyAKKytUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0YWtlbiBmcm9tICRDb25maWd7Y2NmbGFnc30uIFdoZW4gb3ZlcnJpZGluZworK0NDRkxBR1MsIG1ha2Ugc3VyZSB0byBpbmNsdWRlIHRoZSAkQ29uZmlne2NjZmxhZ3N9IHNldHRpbmdzIHRvIGF2b2lkCisrYmluYXJ5IGluY29tcGF0aWJpbGl0aWVzLgorKworID1pdGVtIENPTkZJRworIAorIEFycmF5cmVmLiBFLmcuIFtxdyhhcmNobmFtZSBtYW5leHQpXSBkZWZpbmVzIEFSQ0hOQU1FICYgTUFORVhUIGZyb20KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvbWVtb2l6ZV9zdG9yYWJsZV9uc3RvcmUuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvbWVtb2l6ZV9zdG9yYWJsZV9uc3RvcmUuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjVmOTYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9tZW1vaXplX3N0b3JhYmxlX25zdG9yZS5kaWZmCkBAIC0wLDAgKzEsMTEwIEBACitGcm9tIDU1ZDQzMGViMDJmYzExNjU4MTg0NzMwNGNhMjAzMjE2ODc5NzgyNjkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb25hdGhhbiBOaWVkZXIgPGpybmllZGVyQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjcgSnVsIDIwMTIgMTA6MzU6MDcgLTA1MDAKK1N1YmplY3Q6IE1lbW9pemU6OlN0b3JhYmxlOiByZXNwZWN0ICduc3RvcmUnIG9wdGlvbiBub3QgcmVzcGVjdGVkCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK01lbW9pemUoM3BlcmwpIHNheXM6CisKKyAgICAgICAgICAgICAgICB0aWUgbXkgJWNhY2hlID0+ICdNZW1vaXplOjpTdG9yYWJsZScsICRmaWxlbmFtZSwgJ25zdG9yZSc7CisgICAgICAgICAgICAgICAgbWVtb2l6ZSAnZnVuY3Rpb24nLCBTQ0FMQVJfQ0FDSEUgPT4gW0hBU0ggPT4gXCVjYWNoZV07CisKKyAgICAgICAgSW5jbHVkZSB0aGUg4oCYbnN0b3Jl4oCZIG9wdGlvbiB0byBoYXZlIHRoZSAiU3RvcmFibGUiIGRhdGFiYXNlCisgICAgICAgIHdyaXR0ZW4gaW4g4oCYbmV0d29yayBvcmRlcuKAmS4gIChTZWUgU3RvcmFibGUgZm9yIG1vcmUgZGV0YWlscworICAgICAgICBhYm91dCB0aGlzLikKKworSW4gZmFjdCB0aGUgIm5zdG9yZSIgb3B0aW9uIGRvZXMgbm8gc3VjaCB0aGluZy4gIE9wdGlvbiBwYXJzaW5nIGxvb2tzCitsaWtlIHRoaXM6CisKKyAgICAgICAgQG9wdGlvbnN7QF99ID0gKCk7CisKKyRzZWxmLT57T1BUSU9OU317J25zdG9yZSd9IGlzIGFjY29yZGluZ2x5IHNldCB0byB1bmRlZi4gIExhdGVyCitNZW1vaXplOjpTdG9yYWJsZSBjaGVja3MgaWYgdGhlIG9wdGlvbiBpcyB0cnVlLCBhbmQgc2luY2UgdW5kZWYgaXMKK25vdCB0cnVlLCB0aGUgImVsc2UiIGJyYW5jaCBpcyBhbHdheXMgdGFrZW4uCisKKyAgICAgICAgaWYgKCRzZWxmLT57T1BUSU9OU317J25zdG9yZSd9KSB7CisgICAgICAgICAgICAgICAgU3RvcmFibGU6Om5zdG9yZSgkc2VsZi0+e0h9LCAkc2VsZi0+e0ZJTEVOQU1FfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgU3RvcmFibGU6OnN0b3JlKCRzZWxmLT57SH0sICRzZWxmLT57RklMRU5BTUV9KTsKKyAgICAgICAgfQorCitDb3JyZWN0aW5nIHRoZSBjb25kaXRpb24gdG8gKGV4aXN0cyAkc2VsZi0+e09QVElPTlN9eyduc3RvcmUnfSkgZml4ZXMKK2l0LgorCitOb3RpY2VkIGJlY2F1c2UgZ2l0LXN2biwgd2hpY2ggdXNlcyB0aGUgJ25zdG9yZScgb3B0aW9uIGZvciBpdHMKK29uLWRpc2sgY2FjaGVzLCB3YXMgcHJvZHVjaW5nCisKKyAgICAgICAgQnl0ZSBvcmRlciBpcyBub3QgY29tcGF0aWJsZSBhdCAuLi8uLi9saWIvU3RvcmFibGUucG0KKword2hlbiBydW4gdXNpbmcgYSBwZXJsIHdpdGggYSBkaWZmZXJlbnQgaW50ZWdlciBzaXplIChhbmQgaGVuY2UKK2J5dGVvcmRlcikuCisKK1JlcG9ydGVkIGJ5IFRpbSBSZXRvdXQgKFJUIzc3NzkwKQorCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzU4NzY1MAorQnVnOiBodHRwczovL3J0LmNwYW4ub3JnL1B1YmxpYy9CdWcvRGlzcGxheS5odG1sP2lkPTc3NzkwCitGb3J3YXJkZWQ6IGh0dHBzOi8vcnQuY3Bhbi5vcmcvUHVibGljL0J1Zy9EaXNwbGF5Lmh0bWw/aWQ9Nzc3OTAKK1BhdGNoLU5hbWU6IGZpeGVzL21lbW9pemVfc3RvcmFibGVfbnN0b3JlLmRpZmYKKy0tLQorIGNwYW4vTWVtb2l6ZS9NZW1vaXplL1N0b3JhYmxlLnBtIHwgIDIgKy0KKyBjcGFuL01lbW9pemUvdC90aWVfc3RvcmFibGUudCAgICB8IDI0ICsrKysrKysrKysrKysrKysrKysrLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMjEgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vTWVtb2l6ZS9NZW1vaXplL1N0b3JhYmxlLnBtIGIvY3Bhbi9NZW1vaXplL01lbW9pemUvU3RvcmFibGUucG0KK2luZGV4IDEzMTQ3OTcuLjg3ODc2ZjIgMTAwNjQ0CistLS0gYS9jcGFuL01lbW9pemUvTWVtb2l6ZS9TdG9yYWJsZS5wbQorKysrIGIvY3Bhbi9NZW1vaXplL01lbW9pemUvU3RvcmFibGUucG0KK0BAIC01NSw3ICs1NSw3IEBAIHN1YiBERVNUUk9ZIHsKKyAgIHJlcXVpcmUgQ2FycCBpZiAkVmVyYm9zZTsKKyAgIG15ICRzZWxmPSBzaGlmdDsKKyAgIHByaW50IFNUREVSUiAiTWVtb2l6ZTo6U3RvcmFibGU6OkRFU1RST1koQF8pXG4iIGlmICRWZXJib3NlOworLSAgaWYgKCRzZWxmLT57T1BUSU9OU317J25zdG9yZSd9KSB7CisrICBpZiAoZXhpc3RzICRzZWxmLT57T1BUSU9OU317J25zdG9yZSd9KSB7CisgICAgIFN0b3JhYmxlOjpuc3RvcmUoJHNlbGYtPntIfSwgJHNlbGYtPntGSUxFTkFNRX0pOworICAgfSBlbHNlIHsKKyAgICAgU3RvcmFibGU6OnN0b3JlKCRzZWxmLT57SH0sICRzZWxmLT57RklMRU5BTUV9KTsKK2RpZmYgLS1naXQgYS9jcGFuL01lbW9pemUvdC90aWVfc3RvcmFibGUudCBiL2NwYW4vTWVtb2l6ZS90L3RpZV9zdG9yYWJsZS50CitpbmRleCBkZTNiOGRjLi5hNjI0MjM4IDEwMDY0NAorLS0tIGEvY3Bhbi9NZW1vaXplL3QvdGllX3N0b3JhYmxlLnQKKysrKyBiL2NwYW4vTWVtb2l6ZS90L3RpZV9zdG9yYWJsZS50CitAQCAtMzEsMTggKzMxLDM0IEBAIGlmICgkQCkgeworICAgZXhpdCAwOworIH0KKyAKKy1wcmludCAiMS4uNFxuIjsKKytwcmludCAiMS4uOVxuIjsKKyAKKyAkZmlsZSA9ICJzdG9yYWJsZSQkIjsKKyAxIHdoaWxlIHVubGluayAkZmlsZTsKKyB0cnlvdXQoJ01lbW9pemU6OlN0b3JhYmxlJywgJGZpbGUsIDEpOyAgIyBUZXN0IDEuLjQKKyAxIHdoaWxlIHVubGluayAkZmlsZTsKKyt0cnlvdXQoJ01lbW9pemU6OlN0b3JhYmxlJywgJGZpbGUsIDUsICduc3RvcmUnKTsgICMgVGVzdCA1Li44CisrYXNzZXJ0X25ldG9yZGVyKCRmaWxlLCA5KTsgICMgVGVzdCA5CisrMSB3aGlsZSB1bmxpbmsgJGZpbGU7CisrCisrCisrc3ViIGFzc2VydF9uZXRvcmRlciB7CisrICBteSAoJGZpbGUsICR0ZXN0bm8pID0gQF87CisrCisrICBteSAkbmV0b3JkZXIgPSBTdG9yYWJsZTo6ZmlsZV9tYWdpYygkZmlsZSktPnsnbmV0b3JkZXInfTsKKysgIHByaW50ICgkbmV0b3JkZXIgPyAib2sgJHRlc3Rub1xuIiA6ICJub3Qgb2sgJHRlc3Rub1xuIik7CisrfQorIAorIHN1YiB0cnlvdXQgeworLSAgbXkgKCR0aWVwYWNrLCAkZmlsZSwgJHRlc3RubykgPSBAXzsKKysgIG15ICgkdGllcGFjaywgJGZpbGUsICR0ZXN0bm8sICRvcHRpb24pID0gQF87CisgCistICB0aWUgbXkgJWNhY2hlID0+ICR0aWVwYWNrLCAkZmlsZQorLSAgICBvciBkaWUgJCE7CisrICBpZiAoZGVmaW5lZCAkb3B0aW9uKSB7CisrICAgIHRpZSBteSAlY2FjaGUgPT4gJHRpZXBhY2ssICRmaWxlLCAkb3B0aW9uCisrICAgICAgb3IgZGllICQhOworKyAgfSBlbHNlIHsKKysgICAgdGllIG15ICVjYWNoZSA9PiAkdGllcGFjaywgJGZpbGUKKysgICAgICBvciBkaWUgJCE7CisrICB9CisgCisgICBtZW1vaXplICdjNScsIAorICAgU0NBTEFSX0NBQ0hFID0+IFtIQVNIID0+IFwlY2FjaGVdLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9uZXRfc210cF9kb2NzLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL25ldF9zbXRwX2RvY3MuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzMxOTcyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9uZXRfc210cF9kb2NzLmRpZmYKQEAgLTAsMCArMSwyNSBAQAorRnJvbSBmYTA4NWZlZGQ5YzQwNmVkY2Q0YTFhMjU2YzAyNWQ1ZmY3ZjZjNmRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBUaHUsIDIwIFNlcCAyMDA3IDE5OjQ3OjE0ICsxMDAwCitTdWJqZWN0OiBEb2N1bWVudCB0aGUgTmV0OjpTTVRQICdQb3J0JyBvcHRpb24KKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy8xMDAxOTUKK0J1ZzogaHR0cDovL3J0LmNwYW4ub3JnL1B1YmxpYy9CdWcvRGlzcGxheS5odG1sP2lkPTM2MDM4CisKK1BhdGNoLU5hbWU6IGZpeGVzL25ldF9zbXRwX2RvY3MuZGlmZgorLS0tCisgY3Bhbi9saWJuZXQvbGliL05ldC9TTVRQLnBtIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9jcGFuL2xpYm5ldC9saWIvTmV0L1NNVFAucG0gYi9jcGFuL2xpYm5ldC9saWIvTmV0L1NNVFAucG0KK2luZGV4IGFmZDAxN2EuLjZhZTdkOWUgMTAwNjQ0CistLS0gYS9jcGFuL2xpYm5ldC9saWIvTmV0L1NNVFAucG0KKysrKyBiL2NwYW4vbGlibmV0L2xpYi9OZXQvU01UUC5wbQorQEAgLTczOCw2ICs3MzgsNyBAQCBOZXQ6OlNNVFAgd2lsbCBhdHRlbXB0IHRvIGV4dHJhY3QgdGhlIGFkZHJlc3MgZnJvbSB0aGUgdmFsdWUgcGFzc2VkLgorIAorIEI8RGVidWc+IC0gRW5hYmxlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbgorIAorK0I8UG9ydD4gLSBTZWxlY3QgYSBwb3J0IG9uIHRoZSByZW1vdGUgaG9zdCB0byBjb25uZWN0IHRvIChkZWZhdWx0IGlzIDI1KQorIAorIEV4YW1wbGU6CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BlcmwtQ25uLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BlcmwtQ25uLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU1NjRmZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcGVybC1Dbm4uZGlmZgpAQCAtMCwwICsxLDczIEBACitGcm9tIDBlY2Y4M2YyNTlkYjA5Y2IzOGNiMzdjOWIyMmU3MmJlMTg1YWZhOGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIdWdvIHZhbiBkZXIgU2FuZGVuIDxodkBjcnlwdC5vcmc+CitEYXRlOiBUaHUsIDExIEp1biAyMDE1IDEyOjI1OjQwICswMTAwCitTdWJqZWN0OiBmaXggLUNubiBwYXJzaW5nCisKK0NvbW1pdCAyMmZmMzEzMDY4IGZvciBbcGVybCAjMTIzODE0XSBpbmFkdmVydGVudGx5IGNoYW5nZWQgdGhlIGxvZ2ljIHdoZW4KK3BhcnNpbmcgYSBudW1lcmljIHBhcmFtZXRlciB0byB0aGUgLUMgb3B0aW9uLCBzdWNoIHRoYXQgdGhlIHN1Y2Nlc3NmdWxseQorcGFyc2VkIG51bWJlciB3YXMgbm90IHNhdmVkIGFzIHRoZSBvcHRpb24gdmFsdWUgaWYgaXQgcGFyc2VkIHRvIHRoZSBlbmQKK29mIHRoZSBhcmd1bWVudC4KKworQnVnOiBodHRwczovL3J0LnBlcmwub3JnL1RpY2tldC9EaXNwbGF5Lmh0bWw/aWQ9MTI1MzgxCitCdWctRGViaWFuOiBodHRwczovL2J1Z3MuZGViaWFuLm9yZy83ODg2MzYKK09yaWdpbjogdXBzdHJlYW0sIGh0dHA6Ly9wZXJsNS5naXQucGVybC5vcmcvcGVybC5naXQvY29tbWl0Lzg5ZDg0ZmY5NjUKK1BhdGNoLU5hbWU6IGZpeGVzL3BlcmwtQ25uLmRpZmYKKy0tLQorIHQvcnVuL3N3aXRjaEMudCB8ICA3ICsrKysrKy0KKyB1dGlsLmMgICAgICAgICAgfCAxNyArKysrKysrKy0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90L3J1bi9zd2l0Y2hDLnQgYi90L3J1bi9zd2l0Y2hDLnQKK2luZGV4IGY2YWE4NjguLjRmNjNjM2IgMTAwNjQ0CistLS0gYS90L3J1bi9zd2l0Y2hDLnQKKysrKyBiL3QvcnVuL3N3aXRjaEMudAorQEAgLTExLDcgKzExLDcgQEAgQkVHSU4geworICAgICBza2lwX2FsbF9pZl9taW5pcGVybCgnLUMgYW5kICRFTlZ7UEVSTF9VTklDT0RFfSBhcmUgZGlzYWJsZWQgb24gbWluaXBlcmwnKTsKKyB9CisgCistcGxhbih0ZXN0cyA9PiAxMyk7CisrcGxhbih0ZXN0cyA9PiAxNCk7CisgCisgbXkgJHI7CisgCitAQCAtMjUsNiArMjUsMTEgQEAgJHIgPSBydW5wZXJsKCBzd2l0Y2hlcyA9PiBbICctQ08nLCAnLXcnIF0sCisgICAgICAgICAgICAgICBzdGRlcnIgICA9PiAxICk7CisgbGlrZSggJHIsIHFyL14kYig/OlxyP1xuKT8kL3MsICctQ086IG5vIHdhcm5pbmcgb24gVVRGLTggb3V0cHV0JyApOworIAorKyRyID0gcnVucGVybCggc3dpdGNoZXMgPT4gWyAnLUMyJywgJy13JyBdLAorKwkgICAgICBwcm9nICAgICA9PiAncHJpbnQgY2hyKDI1NiknLAorKyAgICAgICAgICAgICAgc3RkZXJyICAgPT4gMSApOworK2xpa2UoICRyLCBxci9eJGIoPzpccj9cbik/JC9zLCAnLUMyOiBubyB3YXJuaW5nIG9uIFVURi04IG91dHB1dCcgKTsKKysKKyBTS0lQOiB7CisgICAgIGlmIChleGlzdHMgJEVOVntQRVJMX1VOSUNPREV9ICYmCisgCSgkRU5We1BFUkxfVU5JQ09ERX0gZXEgIiIgfHwgJEVOVntQRVJMX1VOSUNPREV9ID1+IC9bU09dLykpIHsKK2RpZmYgLS1naXQgYS91dGlsLmMgYi91dGlsLmMKK2luZGV4IDhjZjYyZjUuLmVlMjMzMTQgMTAwNjQ0CistLS0gYS91dGlsLmMKKysrKyBiL3V0aWwuYworQEAgLTQ0MjAsMTYgKzQ0MjAsMTUgQEAgUGVybF9wYXJzZV91bmljb2RlX29wdHMocFRIWF8gY29uc3QgY2hhciAqKnBvcHQpCisgICAgICAgIGlmIChpc0RJR0lUKCpwKSkgeworICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVuZHB0cjsKKyAgICAgICAgICAgICBVViB1djsKKy0gICAgICAgICAgICBpZiAoZ3Jva19hdG9VVihwLCAmdXYsICZlbmRwdHIpCistICAgICAgICAgICAgICAgICYmIHV2IDw9IFUzMl9NQVgKKy0gICAgICAgICAgICAgICAgJiYgKHAgPSBlbmRwdHIpCistICAgICAgICAgICAgICAgICYmICpwICYmICpwICE9ICdcbicgJiYgKnAgIT0gJ1xyJworLSAgICAgICAgICAgICkgeworKyAgICAgICAgICAgIGlmIChncm9rX2F0b1VWKHAsICZ1diwgJmVuZHB0cikgJiYgdXYgPD0gVTMyX01BWCkgeworICAgICAgICAgICAgICAgICBvcHQgPSAoVTMyKXV2OworLSAgICAgICAgICAgICAgICBpZiAoaXNTUEFDRSgqcCkpCistICAgICAgICAgICAgICAgICAgICBnb3RvIHRoZV9lbmRfb2ZfdGhlX29wdHNfcGFyc2VyOworLSAgICAgICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgICAgICBQZXJsX2Nyb2FrKGFUSFhfICJVbmtub3duIFVuaWNvZGUgb3B0aW9uIGxldHRlciAnJWMnIiwgKnApOworKyAgICAgICAgICAgICAgICBwID0gZW5kcHRyOworKyAgICAgICAgICAgICAgICBpZiAocCAmJiAqcCAmJiAqcCAhPSAnXG4nICYmICpwICE9ICdccicpIHsKKysgICAgICAgICAgICAgICAgICAgIGlmIChpc1NQQUNFKCpwKSkKKysgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHRoZV9lbmRfb2ZfdGhlX29wdHNfcGFyc2VyOworKyAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICAgIFBlcmxfY3JvYWsoYVRIWF8gIlVua25vd24gVW5pY29kZSBvcHRpb24gbGV0dGVyICclYyciLCAqcCk7CisrICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICAgICBlbHNlIHsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kX21hbl9yZXByb2R1Y2libGVfZGF0ZS5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RfbWFuX3JlcHJvZHVjaWJsZV9kYXRlLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M5Y2E4NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kX21hbl9yZXByb2R1Y2libGVfZGF0ZS5kaWZmCkBAIC0wLDAgKzEsMTcwIEBACitGcm9tIDkwNTdhZGMxMDZkNmJiZWY1M2M5ZTcwNjUyM2NkOTRmMWE3YTA4ZDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSdXNzIEFsbGJlcnkgPHJyYUBkZWJpYW4ub3JnPgorRGF0ZTogU2F0LCAzMCBBdWcgMjAxNCAxNToxMDo0MSAtMDcwMAorU3ViamVjdDogU3VwcG9ydCBQT0RfTUFOX0RBVEUgaW4gUG9kOjpNYW4gZm9yIHRoZSBsZWZ0LWhhbmQgZm9vdGVyCisKK0hvbm9yIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQT0RfTUFOX0RBVEUgYW5kIHVzZSBpdHMgY29udGVudHMsIGlmCitzZXQsIGFzIHRoZSB2YWx1ZSBvZiB0aGUgbGVmdC1oYW5kIGZvb3RlciBpZiB0aGUgZGF0ZSBvcHRpb24gaXMgbm90CitzZXQsIG92ZXJyaWRpbmcgdGhlIHRpbWVzdGFtcCBvZiB0aGUgaW5wdXQgZmlsZS4gIFRoaXMgaXMgcHJpbWFyaWx5Cit1c2VmdWwgdG8gZW5zdXJlIHJlcHJvZHVjaWJsZSBidWlsZHMgb2YgdGhlIHNhbWUgb3V0cHV0IGZpbGUgZ2l2ZW4gdGhlCitzYW1lIHNvdWNlIGFuZCBQb2Q6Ok1hbiB2ZXJzaW9uLCBldmVuIHdoZW4gZmlsZSB0aW1lc3RhbXBzIG1heSBub3QgYmUKK2NvbnNpc3RlbnQuICBUaGFua3MsIE5pa28gVHluaS4KKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy83NTk0MDUKK09yaWdpbjogdXBzdHJlYW0KK1BhdGNoLU5hbWU6IGZpeGVzL3BvZF9tYW5fcmVwcm9kdWNpYmxlX2RhdGUuZGlmZgorLS0tCisgY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0gIHwgNjkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCisgY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50IHwgMjkgKysrKysrKysrKysrKy0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA3MiBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtIGIvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KK2luZGV4IDcyY2E5ZmYuLjA1MzY2NjIgMTAwNjQ0CistLS0gYS9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQorKysrIGIvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KK0BAIC04NzYsMjUgKzg3Niw0MiBAQCBzdWIgZGV2aXNlX3RpdGxlIHsKKyB9CisgCisgIyBEZXRlcm1pbmUgdGhlIG1vZGlmaWNhdGlvbiBkYXRlIGFuZCByZXR1cm4gdGhhdCwgcHJvcGVybHkgZm9ybWF0dGVkIGluIElTTworLSMgZm9ybWF0LiAgSWYgd2UgY2FuJ3QgZ2V0IHRoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGUgaW5wdXQsIGluc3RlYWQgdXNlIHRoZQorLSMgY3VycmVudCB0aW1lLiAgUG9kOjpTaW1wbGUgcmV0dXJucyBhIGNvbXBsZXRlbHkgdW51c2VmdWwgc3RyaW5naWZpZWQgZmlsZQorLSMgaGFuZGxlIGFzIHRoZSBzb3VyY2VfZmlsZW5hbWUgZm9yIGlucHV0IGZyb20gYSBmaWxlIGhhbmRsZSwgc28gd2UgaGF2ZSB0bworLSMgZGVhbCB3aXRoIHRoYXQgYXMgd2VsbC4KKysjIGZvcm1hdC4KKysjCisrIyBJZiBQT0RfTUFOX0RBVEUgaXMgc2V0LCB0aGF0IG92ZXJyaWRlcyBhbnl0aGluZyBlbHNlLiAgVGhpcyBjYW4gYmUgdXNlZCBmb3IKKysjIHJlcHJvZHVjaWJsZSBnZW5lcmF0aW9uIG9mIHRoZSBzYW1lIGZpbGUgZXZlbiBpZiB0aGUgaW5wdXQgZmlsZSB0aW1lc3RhbXBzCisrIyBhcmUgdW5wcmVkaWN0YWJsZSBvciB0aGUgUE9EIGNvbXMgZnJvbSBzdGFuZGFyZCBpbnB1dC4KKysjCisrIyBPdGhlcndpc2UsIHVzZSB0aGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhlIGlucHV0IGlmIHdlIGNhbiBzdGF0IGl0LiAgQmUKKysjIGF3YXJlIHRoYXQgUG9kOjpTaW1wbGUgcmV0dXJucyB0aGUgc3RyaW5naWZpY2F0aW9uIG9mIHRoZSBmaWxlIGhhbmRsZSBhcworKyMgc291cmNlX2ZpbGVuYW1lIGZvciBpbnB1dCBmcm9tIGEgZmlsZSBoYW5kbGUsIHNvIHdlJ2xsIHN0YXQgc29tZSByYW5kb20gcmVmCisrIyBzdHJpbmcgaW4gdGhhdCBjYXNlLiAgSWYgdGhhdCBmYWlscywgaW5zdGVhZCB1c2UgdGhlIGN1cnJlbnQgdGltZS4KKysjCisrIyAkc2VsZiAtIFBvZDo6TWFuIG9iamVjdCwgdXNlZCB0byBnZXQgdGhlIHNvdXJjZSBmaWxlCisrIworKyMgUmV0dXJuczogWVlZWS1NTS1ERCBkYXRlIHN1aXRhYmxlIGZvciB0aGUgbGVmdC1oYW5kIGZvb3RlcgorIHN1YiBkZXZpc2VfZGF0ZSB7CisgICAgIG15ICgkc2VsZikgPSBAXzsKKysKKysgICAgIyBJZiBQT0RfTUFOX0RBVEUgaXMgc2V0LCBhbHdheXMgdXNlIGl0LgorKyAgICBpZiAoJEVOVntQT0RfTUFOX0RBVEV9KSB7CisrICAgICAgICByZXR1cm4gJEVOVntQT0RfTUFOX0RBVEV9OworKyAgICB9CisrCisrICAgICMgT3RoZXJ3aXNlLCBnZXQgdGhlIGlucHV0IGZpbGVuYW1lIGFuZCB0cnkgdG8gc3RhdCBpdC4gIElmIHRoYXQgZmFpbHMsCisrICAgICMgdXNlIHRoZSBjdXJyZW50IHRpbWUuCisgICAgIG15ICRpbnB1dCA9ICRzZWxmLT5zb3VyY2VfZmlsZW5hbWU7CisgICAgIG15ICR0aW1lOworICAgICBpZiAoJGlucHV0KSB7CistICAgICAgICAkdGltZSA9IChzdGF0ICRpbnB1dClbOV0gfHwgdGltZTsKKysgICAgICAgICR0aW1lID0gKHN0YXQoJGlucHV0KSlbOV0gfHwgdGltZSgpOworICAgICB9IGVsc2UgeworLSAgICAgICAgJHRpbWUgPSB0aW1lOworKyAgICAgICAgJHRpbWUgPSB0aW1lKCk7CisgICAgIH0KKyAKKy0gICAgIyBDYW4ndCB1c2UgUE9TSVg6OnN0cmZ0aW1lKCksIHdoaWNoIHVzZXMgRmNudGwsIGJlY2F1c2UgTWFrZU1ha2VyCistICAgICMgdXNlcyB0aGlzIGFuZCBpdCBoYXMgdG8gd29yayBpbiB0aGUgY29yZSB3aGljaCBjYW4ndCBsb2FkIGR5bmFtaWMKKy0gICAgIyBsaWJyYXJpZXMuCistICAgIG15ICgkeWVhciwgJG1vbnRoLCAkZGF5KSA9IChsb2NhbHRpbWUgJHRpbWUpWzUsNCwzXTsKKy0gICAgcmV0dXJuIHNwcmludGYgKCIlMDRkLSUwMmQtJTAyZCIsICR5ZWFyICsgMTkwMCwgJG1vbnRoICsgMSwgJGRheSk7CisrICAgICMgQ2FuJ3QgdXNlIFBPU0lYOjpzdHJmdGltZSgpLCB3aGljaCB1c2VzIEZjbnRsLCBiZWNhdXNlIE1ha2VNYWtlciB1c2VzCisrICAgICMgdGhpcyBhbmQgaXQgaGFzIHRvIHdvcmsgaW4gdGhlIGNvcmUgd2hpY2ggY2FuJ3QgbG9hZCBkeW5hbWljIGxpYnJhcmllcy4KKysgICAgbXkgKCR5ZWFyLCAkbW9udGgsICRkYXkpID0gKGxvY2FsdGltZSgkdGltZSkpWzUsNCwzXTsKKysgICAgcmV0dXJuIHNwcmludGYoIiUwNGQtJTAyZC0lMDJkIiwgJHllYXIgKyAxOTAwLCAkbW9udGggKyAxLCAkZGF5KTsKKyB9CisgCisgIyBQcmludCBvdXQgdGhlIHByZWFtYmxlIGFuZCB0aGUgdGl0bGUuICBUaGUgbWVhbmluZyBvZiB0aGUgYXJndW1lbnRzIHRvIC5USAorQEAgLTE2MzIsNiArMTY0OSwxNSBAQCBhcmd1bWVudC4KKyBTZXRzIHRoZSBjZW50ZXJlZCBwYWdlIGhlYWRlciB0byB1c2UgaW5zdGVhZCBvZiAiVXNlciBDb250cmlidXRlZCBQZXJsCisgRG9jdW1lbnRhdGlvbiIuCisgCisrPWl0ZW0gZGF0ZQorKworK1NldHMgdGhlIGxlZnQtaGFuZCBmb290ZXIuICBJZiB0aGlzIG9wdGlvbiBpcyBub3Qgc2V0LCB0aGUgY29udGVudHMgb2YgdGhlCisrZW52aXJvbm1lbnQgdmFyaWFibGUgUE9EX01BTl9EQVRFLCBpZiBzZXQsIHdpbGwgYmUgdXNlZC4gIEZhaWxpbmcgdGhhdCwKKyt0aGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhlIGlucHV0IGZpbGUgd2lsbCBiZSB1c2VkLCBvciB0aGUgY3VycmVudCB0aW1lCisraWYgc3RhdCgpIGNhbid0IGZpbmQgdGhhdCBmaWxlICh3aGljaCB3aWxsIGJlIHRoZSBjYXNlIGlmIHRoZSBpbnB1dCBpcworK2Zyb20gQzxTVERJTj4pLiAgSWYgb2J0YWluZWQgZnJvbSB0aGUgZmlsZSBtb2RpZmljYXRpb24gZGF0ZSBvciB0aGUKKytjdXJyZW50IHRpbWUsIGhlIGRhdGUgd2lsbCBiZSBmb3JtYXR0ZWQgYXMgQzxZWVlZLU1NLUREPi4KKysKKyA9aXRlbSBlcnJvcnMKKyAKKyBIb3cgdG8gcmVwb3J0IGVycm9ycy4gIEM8ZGllPiBzYXlzIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBvbiBhbnkgUE9ECitAQCAtMTY0MiwxMyArMTY2OCw2IEBAIFBPRCBlcnJvcnMgZW50aXJlbHksIGFzIG11Y2ggYXMgcG9zc2libGUuCisgCisgVGhlIGRlZmF1bHQgaXMgQzxwb2Q+LgorIAorLT1pdGVtIGRhdGUKKy0KKy1TZXRzIHRoZSBsZWZ0LWhhbmQgZm9vdGVyLiAgQnkgZGVmYXVsdCwgdGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoZSBpbnB1dAorLWZpbGUgd2lsbCBiZSB1c2VkLCBvciB0aGUgY3VycmVudCBkYXRlIGlmIHN0YXQoKSBjYW4ndCBmaW5kIHRoYXQgZmlsZSAodGhlCistY2FzZSBpZiB0aGUgaW5wdXQgaXMgZnJvbSBDPFNURElOPiksIGFuZCB0aGUgZGF0ZSB3aWxsIGJlIGZvcm1hdHRlZCBhcworLUM8WVlZWS1NTS1ERD4uCistCisgPWl0ZW0gZml4ZWQKKyAKKyBUaGUgZml4ZWQtd2lkdGggZm9udCB0byB1c2UgZm9yIHZlcmJhdGltIHRleHQgYW5kIGNvZGUuICBEZWZhdWx0cyB0bworQEAgLTE4MTAsNiArMTgyOSwyMCBAQCBvcHRpb24gd2FzIHNldCB0byBDPGRpZT4uCisgCisgPWJhY2sKKyAKKys9aGVhZDEgRU5WSVJPTk1FTlQKKysKKys9b3ZlciA0CisrCisrPWl0ZW0gUE9EX01BTl9EQVRFCisrCisrSWYgc2V0LCB0aGlzIHdpbGwgYmUgdXNlZCBhcyB0aGUgdmFsdWUgb2YgdGhlIGxlZnQtaGFuZCBmb290ZXIgdW5sZXNzIHRoZQorK0M8ZGF0ZT4gb3B0aW9uIGlzIGV4cGxpY2l0bHkgc2V0LCBvdmVycmlkaW5nIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGlucHV0CisrZmlsZSBvciB0aGUgY3VycmVudCB0aW1lLiAgVGhpcyBpcyBwcmltYXJpbHkgdXNlZnVsIHRvIGVuc3VyZSByZXByb2R1Y2libGUKKytidWlsZHMgb2YgdGhlIHNhbWUgb3V0cHV0IGZpbGUgZ2l2ZW4gdGhlIHNhbWUgc291Y2UgYW5kIFBvZDo6TWFuIHZlcnNpb24sCisrZXZlbiB3aGVuIGZpbGUgdGltZXN0YW1wcyBtYXkgbm90IGJlIGNvbnNpc3RlbnQuCisrCisrPWJhY2sKKysKKyA9aGVhZDEgQlVHUworIAorIEVuY29kaW5nIGhhbmRsaW5nIGFzc3VtZXMgdGhhdCBQZXJsSU8gaXMgYXZhaWxhYmxlIGFuZCBkb2VzIG5vdCB3b3JrCitkaWZmIC0tZ2l0IGEvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50IGIvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50CitpbmRleCAzY2NlOWY1Li5jNjEwZGQ5IDEwMDY0NAorLS0tIGEvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50CisrKysgYi9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQKK0BAIC0xLDE1ICsxLDI4IEBACistIyEvdXNyL2Jpbi9wZXJsIC13CistCistIyBJbiBvcmRlciBmb3IgTWFrZU1ha2VyIHRvIGJ1aWxkIGluIHRoZSBjb3JlLCBub3RoaW5nIGNhbiB1c2UKKy0jIEZjbnRsIHdoaWNoIGluY2x1ZGVzIFBPU0lYLiAgZGV2aXNlX2RhdGUoKSdzIHVzZSBvZiBzdHJmdGltZSgpCistIyB3YXMgcmVwbGFjZWQuICBUaGlzIHRlc3RzIHRoYXQgaXQncyBpZGVudGljYWwuCisrIyEvdXNyL2Jpbi9wZXJsCisrIworKyMgSW4gb3JkZXIgZm9yIE1ha2VNYWtlciB0byBidWlsZCBpbiB0aGUgY29yZSwgbm90aGluZyBjYW4gdXNlIEZjbnRsIHdoaWNoCisrIyBpbmNsdWRlcyBQT1NJWC4gIGRldmlzZV9kYXRlKCkncyB1c2Ugb2Ygc3RyZnRpbWUoKSB3YXMgcmVwbGFjZWQuICBUaGlzIHRlc3RzCisrIyB0aGF0IGl0J3MgaWRlbnRpY2FsLiAgSXQgYWxzbyB0ZXN0cyBzcGVjaWFsIGhhbmRsaW5nIG9mIHRoZSBQT0RfTUFOX0RBVEUKKysjIGVudmlyb25tZW50IHZhcmlhYmxlLgorIAorK3VzZSA1LjAwNjsKKyB1c2Ugc3RyaWN0OworLQorLXVzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDE7CisrdXNlIHdhcm5pbmdzOworIAorIHVzZSBQb2Q6Ok1hbjsKKyB1c2UgUE9TSVggcXcoc3RyZnRpbWUpOworIAorK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDI7CisrCisrIyBDaGVjayB0aGF0IHRoZSByZXN1bHRzIG9mIGRldmljZV9kYXRlIG1hdGNoZXMgc3RyZnRpbWUuICBUaGVyZSBpcyBubyBpbnB1dAorKyMgZmlsZSBuYW1lLCBzbyB0aGlzIHdpbGwgdXNlIHRoZSBjdXJyZW50IHRpbWUuCisgbXkgJHBhcnNlciA9IFBvZDo6TWFuLT5uZXc7CistaXMgJHBhcnNlci0+ZGV2aXNlX2RhdGUsIHN0cmZ0aW1lKCIlWS0lbS0lZCIsIGxvY2FsdGltZSk7CisraXMoCisrICAgICRwYXJzZXItPmRldmlzZV9kYXRlLAorKyAgICBzdHJmdGltZSgnJVktJW0tJWQnLCBsb2NhbHRpbWUoKSksCisrICAgICdkZXZpc2VfZGF0ZSBtYXRjaGVzIHN0cmZ0aW1lJworKyk7CisrCisrIyBTZXQgdGhlIG92ZXJyaWRlIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCBlbnN1cmUgdGhhdCBpdCdzIGhvbm9yZWQuCisrbG9jYWwgJEVOVntQT0RfTUFOX0RBVEV9ID0gJzIwMTQtMDEtMDEnOworK2lzKCRwYXJzZXItPmRldmlzZV9kYXRlLCAnMjAxNC0wMS0wMScsICdkZXZpc2VfZGF0ZSBob25vcnMgUE9EX01BTl9EQVRFJyk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi1lbXB0eS1kYXRlLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi1lbXB0eS1kYXRlLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ViYmY5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kbWFuLWVtcHR5LWRhdGUuZGlmZgpAQCAtMCwwICsxLDUxIEBACitGcm9tIDE4M2JiNGFmN2FkODYyYTJjZjMxZDBkY2IzZGQ0NWMxMDBmNzY3NzYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSdXNzIEFsbGJlcnkgPHJyYUBjcGFuLm9yZz4KK0RhdGU6IFdlZCwgMTUgQXByIDIwMTUgMjI6MjE6MjUgLTA3MDAKK1N1YmplY3Q6IFN1cHBvcnQgYW4gZW1wdHkgUE9EX01BTl9EQVRFIGVudmlyb25tZW50IHZhcmlhYmxlCisKK09uZSBtYXkgd2FudCB0byBzZXQgdGhpcyB0byBhbiBlbXB0eSBzdHJpbmcuICBIYW5kbGUgdGhhdCBjb3JyZWN0bHkuCisKKyhiYWNrcG9ydGVkIHRvIFBlcmwgNS4yMC4yIGJ5IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4pCisKK09yaWdpbjogdXBzdHJlYW0sIGh0dHA6Ly9naXQuZXlyaWUub3JnLz9wPXBlcmwvcG9kbGF0b3JzLmdpdDthPWNvbW1pdGRpZmY7aD1lMGU5ZmNiNTNlOGZjOTU0YjJiMTk1NTM4NWVlYTE4YzI3Zjg2OWFmCitCdWctRGViaWFuOiBodHRwczovL2J1Z3MuZGViaWFuLm9yZy83ODAyNTkKK1BhdGNoLU5hbWU6IGZpeGVzL3BvZG1hbi1lbXB0eS1kYXRlLmRpZmYKKy0tLQorIGNwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtICB8IDIgKy0KKyBjcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQgfCA2ICsrKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0gYi9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQoraW5kZXggMzY1ODkyZS4uODk5N2ExNSAxMDA2NDQKKy0tLSBhL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCisrKysgYi9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQorQEAgLTg5NCw3ICs4OTQsNyBAQCBzdWIgZGV2aXNlX2RhdGUgeworICAgICBteSAoJHNlbGYpID0gQF87CisgCisgICAgICMgSWYgUE9EX01BTl9EQVRFIGlzIHNldCwgYWx3YXlzIHVzZSBpdC4KKy0gICAgaWYgKCRFTlZ7UE9EX01BTl9EQVRFfSkgeworKyAgICBpZiAoZGVmaW5lZCgkRU5We1BPRF9NQU5fREFURX0pKSB7CisgICAgICAgICByZXR1cm4gJEVOVntQT0RfTUFOX0RBVEV9OworICAgICB9CisgCitkaWZmIC0tZ2l0IGEvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50IGIvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50CitpbmRleCA5ZGE5ZDFiLi4yNzI3MWQ5IDEwMDY0NAorLS0tIGEvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50CisrKysgYi9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQKK0BAIC0xMiw3ICsxMiw3IEBAIHVzZSB3YXJuaW5nczsKKyB1c2UgUG9kOjpNYW47CisgdXNlIFBPU0lYIHF3KHN0cmZ0aW1lKTsKKyAKKy11c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiAyOworK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDM7CisgCisgIyBDaGVjayB0aGF0IHRoZSByZXN1bHRzIG9mIGRldmljZV9kYXRlIG1hdGNoZXMgc3RyZnRpbWUuICBUaGVyZSBpcyBubyBpbnB1dAorICMgZmlsZSBuYW1lLCBzbyB0aGlzIHdpbGwgdXNlIHRoZSBjdXJyZW50IHRpbWUuCitAQCAtMjYsMyArMjYsNyBAQCBpcygKKyAjIFNldCB0aGUgb3ZlcnJpZGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIGVuc3VyZSB0aGF0IGl0J3MgaG9ub3JlZC4KKyBsb2NhbCAkRU5We1BPRF9NQU5fREFURX0gPSAnMjAxNC0wMS0wMSc7CisgaXMoJHBhcnNlci0+ZGV2aXNlX2RhdGUsICcyMDE0LTAxLTAxJywgJ2RldmlzZV9kYXRlIGhvbm9ycyBQT0RfTUFOX0RBVEUnKTsKKysKKysjIENoZWNrIHRoYXQgYW4gZW1wdHkgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgaG9ub3JlZC4KKytsb2NhbCAkRU5We1BPRF9NQU5fREFURX0gPSBxe307CisraXMoJHBhcnNlci0+ZGV2aXNlX2RhdGUsIHF7fSwgJ2RldmlzZV9kYXRlIGhvbm9ycyBlbXB0eSBQT0RfTUFOX0RBVEUnKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kbWFuLXBpcGUuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kbWFuLXBpcGUuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTYwMzYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tcGlwZS5kaWZmCkBAIC0wLDAgKzEsMTA5IEBACitGcm9tIDc2NzFkMTAxYmFhNzVkN2E3OWJmYmQ4Yzc1YzE1OTVmYmIzZjUzYmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSdXNzIEFsbGJlcnkgPHJyYUBjcGFuLm9yZz4KK0RhdGU6IFNhdCwgNyBGZWIgMjAxNSAxOTowMzozNCAtMDgwMAorU3ViamVjdDogQmV0dGVyIGVycm9ycyBmb3IgbWFuIHBhZ2VzIGZyb20gc3RhbmRhcmQgaW5wdXQKKworW1BvZDo6TWFuXSBBdHRlbXB0IHRvIGRldGVjdCBpZiB0aGUgaW5wdXQgY2FtZSBmcm9tIGEgcGlwZSBhbmQKK3RoZXJlZm9yZSBoYXMgYSBjb21wbGV0ZWx5IHVuaGVscGZ1bCAoYW5kIG5vbnJlcHJvZHVjaWJsZSkgc291cmNlIGZpbGUKK25hbWUsIGFuZCBkaWFnbm9zZSB0aGlzIGFzIGFuIGVycm9yLiAgRG9jdW1lbnQgdGhhdCB0aGUgbmFtZSBvcHRpb24KKygtLW5hbWUgdG8gcG9kMm1hbikgaXMgcmVxdWlyZWQgd2hlbiBwcm9jZXNzaW5nIFBPRCBzb3VyY2UgZnJvbQorc3RhbmRhcmQgaW5wdXQuICAoRGViaWFuIEJ1ZyM3Nzc0MDUpCisKKyhiYWNrcG9ydGVkIHRvIFBlcmwgNS4yMC4yIGJ5IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4pCisKK09yaWdpbjogdXBzdHJlYW0sIGh0dHA6Ly9naXQuZXlyaWUub3JnLz9wPXBlcmwvcG9kbGF0b3JzLmdpdDthPWNvbW1pdGRpZmY7aD1kOTg4NzJlNDZjOTM4NjFiN2FiYTE0OTQ5ZTEyNTg3MTIwODdkYzU1CitCdWctRGViaWFuOiBodHRwczovL2J1Z3MuZGViaWFuLm9yZy83Nzc0MDUKK1BhdGNoLU5hbWU6IGZpeGVzL3BvZG1hbi1waXBlLmRpZmYKKy0tLQorIGNwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtICAgICB8IDE1ICsrKysrKysrKysrKysrKworIGNwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMm1hbi5QTCB8ICA0ICsrKysKKyBjcGFuL3BvZGxhdG9ycy90L2RldmlzZS10aXRsZS50ICAgfCAzMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgNTEgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDc1NSBjcGFuL3BvZGxhdG9ycy90L2RldmlzZS10aXRsZS50CisKK2RpZmYgLS1naXQgYS9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbSBiL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCitpbmRleCA4OTk3YTE1Li45NjllYWZmIDEwMDY0NAorLS0tIGEvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KKysrKyBiL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCitAQCAtODI4LDYgKzgyOCwxNyBAQCBzdWIgZGV2aXNlX3RpdGxlIHsKKyAgICAgJHNlY3Rpb24gPSAzIGlmICghJCRzZWxme3NlY3Rpb259ICYmICRuYW1lID1+IC9cLnBtXHovaSk7CisgICAgICRuYW1lID1+IHMvXC5wKG9kfFtsbV0pXHovL2k7CisgCisrICAgICMgSWYgUG9kOjpQYXJzZXIgZ2F2ZSB1cyBhbiBJTzo6RmlsZSByZWZlcmVuY2UgYXMgdGhlIHNvdXJjZSBmaWxlIG5hbWUsCisrICAgICMgY29udmVydCB0aGF0IHRvIHRoZSBlbXB0eSBzdHJpbmcgYXMgd2VsbC4gIFRoZW4sIGlmIHdlIGRvbid0IGhhdmUgYQorKyAgICAjIHZhbGlkIG5hbWUsIGVtaXQgYSB3YXJuaW5nIGFuZCBjb252ZXJ0IGl0IHRvIFNURElOLgorKyAgICBpZiAoJG5hbWUgPX4gL15JTzo6RmlsZSg/Oj1cdyspXCgweFtcZGEtZl0rXCkkL2kpIHsKKysgICAgICAgICRuYW1lID0gJyc7CisrICAgIH0KKysgICAgaWYgKCRuYW1lIGVxICcnKSB7CisrICAgICAgICAkc2VsZi0+d2hpbmUgKDEsICdObyBuYW1lIGdpdmVuIGZvciBkb2N1bWVudCcpOworKyAgICAgICAgJG5hbWUgPSAnU1RESU4nOworKyAgICB9CisrCisgICAgICMgSWYgdGhlIHNlY3Rpb24gaXNuJ3QgMywgdGhlbiB0aGUgbmFtZSBkZWZhdWx0cyB0byBqdXN0IHRoZSBiYXNlbmFtZSBvZgorICAgICAjIHRoZSBmaWxlLiAgT3RoZXJ3aXNlLCBhc3N1bWUgd2UncmUgZGVhbGluZyB3aXRoIGEgbW9kdWxlLiAgV2Ugd2FudCB0bworICAgICAjIGZpZ3VyZSBvdXQgdGhlIGZ1bGwgbW9kdWxlIG5hbWUgZnJvbSB0aGUgcGF0aCB0byB0aGUgZmlsZSwgYnV0IHdlIGRvbid0CitAQCAtMTcwNSw2ICsxNzE2LDEwIEBAIG1vZHVsZSBwYXRoLiAgSWYgaXQgaXMsIGEgcGF0aCBsaWtlIEM8Li4uL2xpYi9Qb2QvTWFuLnBtPiBpcyBjb252ZXJ0ZWQgaW50bworIGEgbmFtZSBsaWtlIEM8UG9kOjpNYW4+LiAgVGhpcyBvcHRpb24sIGlmIGdpdmVuLCBvdmVycmlkZXMgYW55IGF1dG9tYXRpYworIGRldGVybWluYXRpb24gb2YgdGhlIG5hbWUuCisgCisrSWYgZ2VuZXJhdGluZyBhIG1hbnVhbCBwYWdlIGZyb20gc3RhbmRhcmQgaW5wdXQsIHRoaXMgb3B0aW9uIGlzIHJlcXVpcmVkLAorK3NpbmNlIHRoZXJlJ3Mgb3RoZXJ3aXNlIG5vIHdheSBmb3IgUG9kOjpNYW4gdG8ga25vdyB3aGF0IHRvIHVzZSBmb3IgdGhlCisrbWFudWFsIHBhZ2UgbmFtZS4KKysKKyA9aXRlbSBub3VybHMKKyAKKyBOb3JtYWxseSwgTFo8Pjw+IGZvcm1hdHRpbmcgY29kZXMgd2l0aCBhIFVSTCBidXQgYW5jaG9yIHRleHQgYXJlIGZvcm1hdHRlZAorZGlmZiAtLWdpdCBhL2NwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMm1hbi5QTCBiL2NwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMm1hbi5QTAoraW5kZXggMzg2OTVmOC4uNDNlMzVkZiAxMDA2NDQKKy0tLSBhL2NwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMm1hbi5QTAorKysrIGIvY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMCitAQCAtMjM2LDYgKzIzNiwxMCBAQCBOb3RlIHRoYXQgdGhpcyBvcHRpb24gaXMgcHJvYmFibHkgbm90IHVzZWZ1bCB3aGVuIGNvbnZlcnRpbmcgbXVsdGlwbGUgUE9ECisgZmlsZXMgYXQgb25jZS4gIFRoZSBjb252ZW50aW9uIGZvciBVbml4IG1hbiBwYWdlcyBmb3IgY29tbWFuZHMgaXMgZm9yIHRoZQorIG1hbiBwYWdlIHRpdGxlIHRvIGJlIGluIGFsbC11cHBlcmNhc2UgZXZlbiBpZiB0aGUgY29tbWFuZCBpc24ndC4KKyAKKytXaGVuIGNvbnZlcnRpbmcgUE9EIHNvdXJjZSBmcm9tIHN0YW5kYXJkIGlucHV0LCB0aGlzIG9wdGlvbiBpcyByZXF1aXJlZCwKKytzaW5jZSB0aGVyZSdzIG90aGVyd2lzZSBubyB3YXkgdG8ga25vdyB3aGF0IHRvIHVzZSBhcyB0aGUgbmFtZSBvZiB0aGUKKyttYW51YWwgcGFnZS4KKysKKyA9aXRlbSBCPC0tbm91cmxzPgorIAorIE5vcm1hbGx5LCBMWjw+PD4gZm9ybWF0dGluZyBjb2RlcyB3aXRoIGEgVVJMIGJ1dCBhbmNob3IgdGV4dCBhcmUgZm9ybWF0dGVkCitkaWZmIC0tZ2l0IGEvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtdGl0bGUudCBiL2NwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLXRpdGxlLnQKK25ldyBmaWxlIG1vZGUgMTAwNzU1CitpbmRleCAwMDAwMDAwLi44NjM5NDQxCistLS0gL2Rldi9udWxsCisrKysgYi9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS10aXRsZS50CitAQCAtMCwwICsxLDMyIEBACisrIyEvdXNyL2Jpbi9wZXJsCisrIworKyMgVGVzdHMgZm9yIHRoZSBhdXRvbWF0aWMgZGV0ZXJtaW5hdGlvbiBvZiB0aGUgbWFudWFsIHBhZ2UgdGl0bGUgaWYgbm90CisrIyBzcGVjaWZpZWQgdmlhIG9wdGlvbnMgdG8gcG9kMm1hbiBvciB0aGUgUG9kOjpNYW4gY29uc3RydWN0b3IuCisrCisrdXNlIDUuMDA2OworK3VzZSBzdHJpY3Q7CisrdXNlIHdhcm5pbmdzOworKworK3VzZSBGaWxlOjpTcGVjOworK3VzZSBJTzo6RmlsZTsKKyt1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiAzOworKworK0JFR0lOIHsKKysgICAgdXNlX29rKCdQb2Q6Ok1hbicpOworK30KKysKKysjIENyZWF0ZSBhIHBhcnNlciBhbmQgc2V0IGl0IHVwIHdpdGggYW4gaW5wdXQgc291cmNlLiAgVGhlcmUgaXNuJ3QgYSB3YXkgdG8gZG8KKysjIHRoaXMgaW4gUG9kOjpTaW1wbGUgd2l0aG91dCBhY3R1YWxseSBwYXJzaW5nIHRoZSBkb2N1bWVudCwgc28gc2VuZCB0aGUKKysjIG91dHB1dCB0byBhIHN0cmluZyB0aGF0IHdlJ2xsIGlnbm9yZS4KKytteSAkcGF0aCA9IEZpbGU6OlNwZWMtPmNhdGRpcigndCcsICdkYXRhJywgJ2Jhc2ljLnBvZCcpOworK215ICRoYW5kbGUgPSBJTzo6RmlsZS0+bmV3KCRwYXRoLCAncicpOworK215ICRwYXJzZXIgPSBQb2Q6Ok1hbi0+bmV3KGVycm9ycyA9PiAncG9kJyk7CisrbXkgJG91dHB1dDsKKyskcGFyc2VyLT5vdXRwdXRfc3RyaW5nKFwkb3V0cHV0KTsKKyskcGFyc2VyLT5wYXJzZV9maWxlKCRoYW5kbGUpOworKworKyMgQ2hlY2sgdGhlIHJlc3VsdHMgb2YgZGV2aXNlX3RpdGxlIGZvciB0aGlzLiAgV2Ugc2hvdWxkIGdldCBiYWNrIFNURElOLCBhbmQKKysjIHdlIHNob3VsZCBoYXZlIHJlcG9ydGVkIGFuIGVycm9yLgorK215ICgkbmFtZSwgJHNlY3Rpb24pID0gJHBhcnNlci0+ZGV2aXNlX3RpdGxlOworK2lzKCRuYW1lLCAnU1RESU4nLCAnZGV2aXNlX3RpdGxlIHVzZXMgU1RESU4gZm9yIGZpbGUgaGFuZGxlIGlucHV0Jyk7Cisrb2soJHBhcnNlci0+ZXJyb3JzX3NlZW4sICcuLi5hbmQgZXJyb3JzIHdlcmUgc2VlbicpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tdXRjLWRvY3MuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kbWFuLXV0Yy1kb2NzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNkZmVmZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kbWFuLXV0Yy1kb2NzLmRpZmYKQEAgLTAsMCArMSw4NiBAQAorRnJvbSA2MTk4ODU2YjUzMjNkNjIwNDA5NDI5M2YwMWI4OTA0NzI2MThmMTgyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUnVzcyBBbGxiZXJ5IDxycmFAY3Bhbi5vcmc+CitEYXRlOiBXZWQsIDE1IEFwciAyMDE1IDIwOjQ5OjA3IC0wNzAwCitTdWJqZWN0OiBEb2N1bWVudGF0aW9uIGFuZCB0ZXN0IHN1aXRlIHVwZGF0ZXMgZm9yIFVUQyBmaXgKKworVXBkYXRlIHRoZSBQb2Q6Ok1hbiBhbmQgcG9kMm1hbiBkb2N1bWVudGF0aW9uIGFuZCB0aGUgdGVzdCBzdWl0ZQorZm9yIHRoZSBuZXcgVVRDLWJhc2VkIGRlZmF1bHQgcGFnZSBmb290ZXIsIGFuZCBhZGQgYSBDaGFuZ2VzCitlbnRyeS4KKworKGJhY2twb3J0ZWQgdG8gUGVybCA1LjIwLjIgYnkgTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPikKKworT3JpZ2luOiB1cHN0cmVhbSwgaHR0cDovL2dpdC5leXJpZS5vcmcvP3A9cGVybC9wb2RsYXRvcnMuZ2l0O2E9Y29tbWl0ZGlmZjtoPTUyZGI5M2JmODBlNGEwNmY4NDk3ZTRlYmFkZTA1MDZiNmVlMGU3MGQKK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc4MDI1OQorUGF0Y2gtTmFtZTogZml4ZXMvcG9kbWFuLXV0Yy1kb2NzLmRpZmYKKy0tLQorIGNwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtICAgICB8ICA2ICsrKysrLQorIGNwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMm1hbi5QTCB8IDExICsrKysrKy0tLS0tCisgY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50ICAgIHwgIDIgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbSBiL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCitpbmRleCBjM2JhMjAxLi4zNjU4OTJlIDEwMDY0NAorLS0tIGEvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KKysrKyBiL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCitAQCAtOTEwLDYgKzkxMCw4IEBAIHN1YiBkZXZpc2VfZGF0ZSB7CisgCisgICAgICMgQ2FuJ3QgdXNlIFBPU0lYOjpzdHJmdGltZSgpLCB3aGljaCB1c2VzIEZjbnRsLCBiZWNhdXNlIE1ha2VNYWtlciB1c2VzCisgICAgICMgdGhpcyBhbmQgaXQgaGFzIHRvIHdvcmsgaW4gdGhlIGNvcmUgd2hpY2ggY2FuJ3QgbG9hZCBkeW5hbWljIGxpYnJhcmllcy4KKysgICAgIyBVc2UgZ210aW1lIGluc3RlYWQgb2YgbG9jYWx0aW1lIHNvIHRoYXQgdGhlIGdlbmVyYXRlZCBtYW4gcGFnZSBkb2VzIG5vdAorKyAgICAjIGRlcGVuZCBvbiB0aGUgbG9jYWwgdGltZSB6b25lIHNldHRpbmcgYW5kIGlzIG1vcmUgcmVwcm9kdWNpYmxlCisgICAgIG15ICgkeWVhciwgJG1vbnRoLCAkZGF5KSA9IChnbXRpbWUoJHRpbWUpKVs1LDQsM107CisgICAgIHJldHVybiBzcHJpbnRmKCIlMDRkLSUwMmQtJTAyZCIsICR5ZWFyICsgMTkwMCwgJG1vbnRoICsgMSwgJGRheSk7CisgfQorQEAgLTE2NTYsNyArMTY1OCw5IEBAIGVudmlyb25tZW50IHZhcmlhYmxlIFBPRF9NQU5fREFURSwgaWYgc2V0LCB3aWxsIGJlIHVzZWQuICBGYWlsaW5nIHRoYXQsCisgdGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoZSBpbnB1dCBmaWxlIHdpbGwgYmUgdXNlZCwgb3IgdGhlIGN1cnJlbnQgdGltZQorIGlmIHN0YXQoKSBjYW4ndCBmaW5kIHRoYXQgZmlsZSAod2hpY2ggd2lsbCBiZSB0aGUgY2FzZSBpZiB0aGUgaW5wdXQgaXMKKyBmcm9tIEM8U1RESU4+KS4gIElmIG9idGFpbmVkIGZyb20gdGhlIGZpbGUgbW9kaWZpY2F0aW9uIGRhdGUgb3IgdGhlCistY3VycmVudCB0aW1lLCBoZSBkYXRlIHdpbGwgYmUgZm9ybWF0dGVkIGFzIEM8WVlZWS1NTS1ERD4uCisrY3VycmVudCB0aW1lLCB0aGUgZGF0ZSB3aWxsIGJlIGZvcm1hdHRlZCBhcyBDPFlZWVktTU0tREQ+IGFuZCB3aWxsIGJlIGJhc2VkCisrb24gVVRDIChzbyB0aGF0IHRoZSBvdXRwdXQgd2lsbCBiZSByZXByb2R1Y2libGUgcmVnYXJkbGVzcyBvZiBsb2NhbCB0aW1lCisrem9uZSkuCisgCisgPWl0ZW0gZXJyb3JzCisgCitkaWZmIC0tZ2l0IGEvY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMIGIvY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMCitpbmRleCA2YWYzNDc0Li4zODY5NWY4IDEwMDY0NAorLS0tIGEvY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMCisrKysgYi9jcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJtYW4uUEwKK0BAIC0xNzQsOSArMTc0LDEwIEBAIENvbnRyaWJ1dGVkIFBlcmwgRG9jdW1lbnRhdGlvbiIsIGJ1dCBhbHNvIHNlZSBCPC0tb2ZmaWNpYWw+IGJlbG93LgorIAorID1pdGVtIEI8LWQ+IEk8c3RyaW5nPiwgQjwtLWRhdGU+PUk8c3RyaW5nPgorIAorLVNldCB0aGUgbGVmdC1oYW5kIGZvb3RlciBzdHJpbmcgdG8gdGhpcyB2YWx1ZS4gIEJ5IGRlZmF1bHQsIHRoZSBtb2RpZmljYXRpb24KKy1kYXRlIG9mIHRoZSBpbnB1dCBmaWxlIHdpbGwgYmUgdXNlZCwgb3IgdGhlIGN1cnJlbnQgZGF0ZSBpZiBpbnB1dCBjb21lcyBmcm9tCistQzxTVERJTj4uCisrU2V0IHRoZSBsZWZ0LWhhbmQgZm9vdGVyIHN0cmluZyB0byB0aGlzIHZhbHVlLiAgQnkgZGVmYXVsdCwgdGhlCisrbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhlIGlucHV0IGZpbGUgd2lsbCBiZSB1c2VkLCBvciB0aGUgY3VycmVudCBkYXRlIGlmCisraW5wdXQgY29tZXMgZnJvbSBDPFNURElOPiwgYW5kIHdpbGwgYmUgYmFzZWQgb24gVVRDIChzbyB0aGF0IHRoZSBvdXRwdXQKKyt3aWxsIGJlIHJlcHJvZHVjaWJsZSByZWdhcmRsZXNzIG9mIGxvY2FsIHRpbWUgem9uZSkuCisgCisgPWl0ZW0gQjwtZXJyb3JzPj1JPHN0eWxlPgorIAorQEAgLTM4Myw4ICszODQsOCBAQCBCPHBvZDJtYW4+IGJ5IExhcnJ5IFdhbGwgYW5kIFRvbSBDaHJpc3RpYW5zZW4uCisgCisgPWhlYWQxIENPUFlSSUdIVCBBTkQgTElDRU5TRQorIAorLUNvcHlyaWdodCAxOTk5LCAyMDAwLCAyMDAxLCAyMDA0LCAyMDA2LCAyMDA4LCAyMDEwLCAyMDEyLCAyMDEzIFJ1c3MKKy1BbGxiZXJ5IDxycmFAc3RhbmZvcmQuZWR1Pi4KKytDb3B5cmlnaHQgMTk5OSwgMjAwMCwgMjAwMSwgMjAwNCwgMjAwNiwgMjAwOCwgMjAxMCwgMjAxMiwgMjAxMywgMjAxNCwKKysyMDE1IFJ1c3MgQWxsYmVyeSA8cnJhQGNwYW4ub3JnPi4KKyAKKyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IG1heSByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIFBlcmwgaXRzZWxmLgorZGlmZiAtLWdpdCBhL2NwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLWRhdGUudCBiL2NwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLWRhdGUudAoraW5kZXggYzYxMGRkOS4uOWRhOWQxYiAxMDA2NDQKKy0tLSBhL2NwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLWRhdGUudAorKysrIGIvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50CitAQCAtMTksNyArMTksNyBAQCB1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiAyOworIG15ICRwYXJzZXIgPSBQb2Q6Ok1hbi0+bmV3OworIGlzKAorICAgICAkcGFyc2VyLT5kZXZpc2VfZGF0ZSwKKy0gICAgc3RyZnRpbWUoJyVZLSVtLSVkJywgbG9jYWx0aW1lKCkpLAorKyAgICBzdHJmdGltZSgnJVktJW0tJWQnLCBnbXRpbWUoKSksCisgICAgICdkZXZpc2VfZGF0ZSBtYXRjaGVzIHN0cmZ0aW1lJworICk7CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi11dGMuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kbWFuLXV0Yy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZDdiOWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi11dGMuZGlmZgpAQCAtMCwwICsxLDMzIEBACitGcm9tIGM3OTY3NzVjZGJkMmNjZTA2YWNiYjdhYzM1NTE4N2Q0MDYzMDE3YTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDaHJpcyBMYW1iIDxsYW1ieUBkZWJpYW4ub3JnPgorRGF0ZTogV2VkLCAxNSBBcHIgMjAxNSAyMDo0Mjo1MyAtMDcwMAorU3ViamVjdDogTWFrZSB0aGUgZW1iZWRkZWQgZGF0ZSBmcm9tIFBvZDo6TWFuIHJlcHJvZHVjaWJsZQorCitXaGlsZSB3b3JraW5nIG9uIHRoZSAicmVwcm9kdWNpYmxlIGJ1aWxkcyIgZWZmb3J0LCB3ZSBoYXZlIG5vdGljZWQKK3RoYXQgUG9kOjpNYW4gZ2VuZXJhdGVzIG91dHB1dCB0aGF0IHZhcmllcyBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQKK3RpbWV6b25lLgorCitUaGUgYXR0YWNoZWQgcGF0Y2ggZml4ZXMgdGhpcyBieSB1c2luZyBHTVQgKH5VVEMpIGRhdGVzIGluc3RlYWQuCisKKyhiYWNrcG9ydGVkIHRvIFBlcmwgNS4yMC4yIGJ5IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4pCisKK09yaWdpbjogdXBzdHJlYW0sIGh0dHA6Ly9naXQuZXlyaWUub3JnLz9wPXBlcmwvcG9kbGF0b3JzLmdpdDthPWNvbW1pdGRpZmY7aD05MTNmYmIyYmQyY2UwNzFlMjAxMjg2MjkzMDJhZTI4NTI1NTRjYWQ0CitCdWctRGViaWFuOiBodHRwczovL2J1Z3MuZGViaWFuLm9yZy83ODAyNTkKK1BhdGNoLU5hbWU6IGZpeGVzL3BvZG1hbi11dGMuZGlmZgorLS0tCisgY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbSBiL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCitpbmRleCAwNTM2NjYyLi5jM2JhMjAxIDEwMDY0NAorLS0tIGEvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KKysrKyBiL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCitAQCAtOTEwLDcgKzkxMCw3IEBAIHN1YiBkZXZpc2VfZGF0ZSB7CisgCisgICAgICMgQ2FuJ3QgdXNlIFBPU0lYOjpzdHJmdGltZSgpLCB3aGljaCB1c2VzIEZjbnRsLCBiZWNhdXNlIE1ha2VNYWtlciB1c2VzCisgICAgICMgdGhpcyBhbmQgaXQgaGFzIHRvIHdvcmsgaW4gdGhlIGNvcmUgd2hpY2ggY2FuJ3QgbG9hZCBkeW5hbWljIGxpYnJhcmllcy4KKy0gICAgbXkgKCR5ZWFyLCAkbW9udGgsICRkYXkpID0gKGxvY2FsdGltZSgkdGltZSkpWzUsNCwzXTsKKysgICAgbXkgKCR5ZWFyLCAkbW9udGgsICRkYXkpID0gKGdtdGltZSgkdGltZSkpWzUsNCwzXTsKKyAgICAgcmV0dXJuIHNwcmludGYoIiUwNGQtJTAyZC0lMDJkIiwgJHllYXIgKyAxOTAwLCAkbW9udGggKyAxLCAkZGF5KTsKKyB9CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3Jlc3BlY3RfdW1hc2suZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcmVzcGVjdF91bWFzay5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYjQ5OGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3Jlc3BlY3RfdW1hc2suZGlmZgpAQCAtMCwwICsxLDE1MyBAQAorRnJvbSBkOWQ1MzVlZjk3ZjU3YWY2ZTk3MjgwNzU5NDRjMzNmM2IwYjUzNzJmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBUdWUsIDggTWFyIDIwMDUgMTk6MzA6MzggKzExMDAKK1N1YmplY3Q6IFJlc3BlY3QgdW1hc2sgZHVyaW5nIGluc3RhbGxhdGlvbgorCitUaGlzIGlzIG5lZWRlZCB0byBzYXRpc2Z5IERlYmlhbiBwb2xpY3kgcmVnYXJkaW5nIGdyb3VwLXdyaXRhYmxlCitzaXRlIGRpcmVjdG9yaWVzLgorCitQYXRjaC1OYW1lOiBmaXhlcy9yZXNwZWN0X3VtYXNrLmRpZmYKKy0tLQorIGNwYW4vRXh0VXRpbHMtSW5zdGFsbC9saWIvRXh0VXRpbHMvSW5zdGFsbC5wbSAgIHwgMTggKysrKysrKysrLS0tLS0tLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gfCAxOCArKysrKysrKystLS0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1JbnN0YWxsL2xpYi9FeHRVdGlscy9JbnN0YWxsLnBtIGIvY3Bhbi9FeHRVdGlscy1JbnN0YWxsL2xpYi9FeHRVdGlscy9JbnN0YWxsLnBtCitpbmRleCAxZThhYzRjLi4zZTc5MTIxIDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1JbnN0YWxsL2xpYi9FeHRVdGlscy9JbnN0YWxsLnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLUluc3RhbGwvbGliL0V4dFV0aWxzL0luc3RhbGwucG0KK0BAIC00NTEsNyArNDUxLDcgQEAgc3ViIF9jYW5fd3JpdGVfZGlyIHsKKyAKKyA9cG9kCisgCistPWl0ZW0gX21rcGF0aCgkZGlyLCRzaG93LCRtb2RlLCR2ZXJib3NlLCRkcnlfcnVuKQorKz1pdGVtIF9ta3BhdGgoJGRpciwkc2hvdywkdmVyYm9zZSwkZHJ5X3J1bikKKyAKKyBXcmFwcGVyIGFyb3VuZCBGaWxlOjpQYXRoOjpta3BhdGgoKSB0byBoYW5kbGUgZXJyb3JzLgorIAorQEAgLTQ2OCwxMyArNDY4LDEzIEBAIHdyaXRhYmxlLgorID1jdXQKKyAKKyBzdWIgX21rcGF0aCB7CistICAgIG15ICgkZGlyLCRzaG93LCRtb2RlLCR2ZXJib3NlLCRkcnlfcnVuKT1AXzsKKysgICAgbXkgKCRkaXIsJHNob3csJHZlcmJvc2UsJGRyeV9ydW4pPUBfOworICAgICBpZiAoICR2ZXJib3NlICYmICR2ZXJib3NlID4gMSAmJiAhIC1kICRkaXIpIHsKKyAgICAgICAgICRzaG93PSAxOworLSAgICAgICAgcHJpbnRmICJta3BhdGgoJXMsJWQsJSNvKVxuIiwgJGRpciwgJHNob3csICRtb2RlOworKyAgICAgICAgcHJpbnRmICJta3BhdGgoJXMsJWQpXG4iLCAkZGlyLCAkc2hvdzsKKyAgICAgfQorICAgICBpZiAoISRkcnlfcnVuKSB7CistICAgICAgICBpZiAoICEgZXZhbCB7IEZpbGU6OlBhdGg6Om1rcGF0aCgkZGlyLCRzaG93LCRtb2RlKTsgMSB9ICkgeworKyAgICAgICAgaWYgKCAhIGV2YWwgeyBGaWxlOjpQYXRoOjpta3BhdGgoJGRpciwkc2hvdyk7IDEgfSApIHsKKyAgICAgICAgICAgICBfY2hva2UoIkNhbid0IGNyZWF0ZSAnJGRpciciLCIkQCIpOworICAgICAgICAgfQorIAorQEAgLTc4Myw3ICs3ODMsNyBAQCBzdWIgaW5zdGFsbCB7ICNYWFggT1MtU1BFQ0lGSUMKKyAgICAgICAgIF9jaGRpcigkY3dkKTsKKyAgICAgfQorICAgICBmb3JlYWNoIG15ICR0YXJnZXRkaXIgKHNvcnQga2V5cyAlY2hlY2tfZGlycykgeworLSAgICAgICAgX21rcGF0aCggJHRhcmdldGRpciwgMCwgMDc1NSwgJHZlcmJvc2UsICRkcnlfcnVuICk7CisrICAgICAgICBfbWtwYXRoKCAkdGFyZ2V0ZGlyLCAwLCAkdmVyYm9zZSwgJGRyeV9ydW4gKTsKKyAgICAgfQorICAgICBmb3JlYWNoIG15ICRmb3VuZCAoQGZvdW5kX2ZpbGVzKSB7CisgICAgICAgICBteSAoJGRpZmYsICRmZmQsICRvcmlnZmlsZSwgJG1vZGUsICRzaXplLCAkYXRpbWUsICRtdGltZSwKK0BAIC03OTcsNyArNzk3LDcgQEAgc3ViIGluc3RhbGwgeyAjWFhYIE9TLVNQRUNJRklDCisgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0ZmlsZT0gX3VubGlua19vcl9yZW5hbWUoICR0YXJnZXRmaWxlLCAndHJ5aGFyZCcsICdpbnN0YWxsJyApCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5sZXNzICRkcnlfcnVuOworICAgICAgICAgICAgICAgICB9IGVsc2lmICggISAtZCAkdGFyZ2V0ZGlyICkgeworLSAgICAgICAgICAgICAgICAgICAgX21rcGF0aCggJHRhcmdldGRpciwgMCwgMDc1NSwgJHZlcmJvc2UsICRkcnlfcnVuICk7CisrICAgICAgICAgICAgICAgICAgICBfbWtwYXRoKCAkdGFyZ2V0ZGlyLCAwLCAkdmVyYm9zZSwgJGRyeV9ydW4gKTsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICBwcmludCAiSW5zdGFsbGluZyAkdGFyZ2V0ZmlsZVxuIjsKKyAKK0BAIC04MzcsNyArODM3LDcgQEAgc3ViIGluc3RhbGwgeyAjWFhYIE9TLVNQRUNJRklDCisgCisgICAgIGlmICgkcGFja3snd3JpdGUnfSkgeworICAgICAgICAgJGRpciA9IGluc3RhbGxfcm9vdGVkX2RpcihkaXJuYW1lKCRwYWNreyd3cml0ZSd9KSk7CistICAgICAgICBfbWtwYXRoKCAkZGlyLCAwLCAwNzU1LCAkdmVyYm9zZSwgJGRyeV9ydW4gKTsKKysgICAgICAgIF9ta3BhdGgoICRkaXIsIDAsICR2ZXJib3NlLCAkZHJ5X3J1biApOworICAgICAgICAgcHJpbnQgIldyaXRpbmcgJHBhY2t7J3dyaXRlJ31cbiIgaWYgJHZlcmJvc2U7CisgICAgICAgICAkcGFja2xpc3QtPndyaXRlKGluc3RhbGxfcm9vdGVkX2ZpbGUoJHBhY2t7J3dyaXRlJ30pKSB1bmxlc3MgJGRyeV9ydW47CisgICAgIH0KK0BAIC0xMTgwLDcgKzExODAsNyBAQCBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIHNpbGVuY2UgdGhpcyBvdXRwdXQuCisgc3ViIHBtX3RvX2JsaWIgeworICAgICBteSgkZnJvbXRvLCRhdXRvZGlyLCRwbV9maWx0ZXIpID0gQF87CisgCistICAgIF9ta3BhdGgoJGF1dG9kaXIsMCwwNzU1KTsKKysgICAgX21rcGF0aCgkYXV0b2RpciwwKTsKKyAgICAgd2hpbGUobXkoJGZyb20sICR0bykgPSBlYWNoICUkZnJvbXRvKSB7CisgICAgICAgICBpZiggLWYgJHRvICYmIC1zICRmcm9tID09IC1zICR0byAmJiAtTSAkdG8gPCAtTSAkZnJvbSApIHsKKyAgICAgICAgICAgICBwcmludCAiU2tpcCAkdG8gKHVuY2hhbmdlZClcbiIgdW5sZXNzICRJTlNUQUxMX1FVSUVUOworQEAgLTEyMDMsNyArMTIwMyw3IEBAIHN1YiBwbV90b19ibGliIHsKKyAgICAgICAgICAgICAjIHdlIHdvbnQgdHJ5IGhhcmQgaGVyZS4gaXRzIHRvbyBsaWtlbHkgdG8gbWVzcyB0aGluZ3MgdXAuCisgICAgICAgICAgICAgZm9yY2V1bmxpbmsoJHRvKTsKKyAgICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgX21rcGF0aChkaXJuYW1lKCR0byksMCwwNzU1KTsKKysgICAgICAgICAgICBfbWtwYXRoKGRpcm5hbWUoJHRvKSwwKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGlmICgkbmVlZF9maWx0ZXJpbmcpIHsKKyAgICAgICAgICAgICBydW5fZmlsdGVyKCRwbV9maWx0ZXIsICRmcm9tLCAkdG8pOworZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KK2luZGV4IGY2MzE0NWMuLjE5N2YxMDIgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KK0BAIC0yMTE4LDcgKzIxMTgsNyBAQCBkb2NfX2luc3RhbGwgOiBkb2Nfc2l0ZV9pbnN0YWxsCisgCSQoTk9FQ0hPKSAkKEVDSE8pIElOU1RBTExESVJTIG5vdCBkZWZpbmVkLCBkZWZhdWx0aW5nIHRvIElOU1RBTExESVJTPXNpdGUKKyAKKyBwdXJlX3BlcmxfaW5zdGFsbCA6OiBhbGwKKy0JJChOT0VDSE8pICQoTU9EX0lOU1RBTEwpIFwKKysJJChOT0VDSE8pIHVtYXNrIDAyMjsgJChNT0RfSU5TVEFMTCkgXAorIH07CisgCisgICAgIHB1c2ggQG0sCitAQCAtMjEzOCw3ICsyMTM4LDcgQEAgcXsJCSIkKElOU1RfTElCKSIgIiQoREVTVElOU1RBTExQUklWTElCKSIgXAorIAorIAorIHB1cmVfc2l0ZV9pbnN0YWxsIDo6IGFsbAorLQkkKE5PRUNITykgJChNT0RfSU5TVEFMTCkgXAorKwkkKE5PRUNITykgdW1hc2sgMDIyOyAkKE1PRF9JTlNUQUxMKSBcCisgfTsKKyAgICAgcHVzaCBAbSwKKyBxewkJcmVhZCAifS4kc2VsZi0+Y2F0ZmlsZSgnJChTSVRFQVJDSEVYUCknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IiBcCitAQCAtMjE1Niw3ICsyMTU2LDcgQEAgcXsJCSIkKElOU1RfTElCKSIgIiQoREVTVElOU1RBTExTSVRFTElCKSIgXAorIAkJIn0uJHNlbGYtPmNhdGRpcignJChQRVJMX0FSQ0hMSUIpJywnYXV0bycsJyQoRlVMTEVYVCknKS5xeyIKKyAKKyBwdXJlX3ZlbmRvcl9pbnN0YWxsIDo6IGFsbAorLQkkKE5PRUNITykgJChNT0RfSU5TVEFMTCkgXAorKwkkKE5PRUNITykgdW1hc2sgMDIyOyAkKE1PRF9JTlNUQUxMKSBcCisgfTsKKyAgICAgcHVzaCBAbSwKKyBxewkJcmVhZCAifS4kc2VsZi0+Y2F0ZmlsZSgnJChWRU5ET1JBUkNIRVhQKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiIFwKK0BAIC0yMTg4LDggKzIxODgsOCBAQCBkb2NfdmVuZG9yX2luc3RhbGwgOjogYWxsCisgICAgIHB1c2ggQG0sIHF7CisgZG9jX3BlcmxfaW5zdGFsbCA6OiBhbGwKKyAJJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMQVJDSExJQikvcGVybGxvY2FsLnBvZCIKKy0JLSQoTk9FQ0hPKSAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKy0JLSQoTk9FQ0hPKSAkKERPQ19JTlNUQUxMKSBcCisrCS0kKE5PRUNITykgdW1hc2sgMDIyOyAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKysJLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoRE9DX0lOU1RBTEwpIFwKKyAJCSJNb2R1bGUiICIkKE5BTUUpIiBcCisgCQkiaW5zdGFsbGVkIGludG8iICQoSU5TVEFMTFBSSVZMSUIpIFwKKyAJCUxJTktUWVBFICIkKExJTktUWVBFKSIgXAorQEAgLTIxOTksOCArMjE5OSw4IEBAIGRvY19wZXJsX2luc3RhbGwgOjogYWxsCisgCisgZG9jX3NpdGVfaW5zdGFsbCA6OiBhbGwKKyAJJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMQVJDSExJQikvcGVybGxvY2FsLnBvZCIKKy0JLSQoTk9FQ0hPKSAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKy0JLSQoTk9FQ0hPKSAkKERPQ19JTlNUQUxMKSBcCisrCS0kKE5PRUNITykgdW1hc2sgMDIyOyAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKysJLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoRE9DX0lOU1RBTEwpIFwKKyAJCSJNb2R1bGUiICIkKE5BTUUpIiBcCisgCQkiaW5zdGFsbGVkIGludG8iICQoSU5TVEFMTFNJVEVMSUIpIFwKKyAJCUxJTktUWVBFICIkKExJTktUWVBFKSIgXAorQEAgLTIyMTAsOCArMjIxMCw4IEBAIGRvY19zaXRlX2luc3RhbGwgOjogYWxsCisgCisgZG9jX3ZlbmRvcl9pbnN0YWxsIDo6IGFsbAorIAkkKE5PRUNITykgJChFQ0hPKSBBcHBlbmRpbmcgaW5zdGFsbGF0aW9uIGluZm8gdG8gIiQoREVTVElOU1RBTExBUkNITElCKS9wZXJsbG9jYWwucG9kIgorLQktJChOT0VDSE8pICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorLQktJChOT0VDSE8pICQoRE9DX0lOU1RBTEwpIFwKKysJLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorKwktJChOT0VDSE8pIHVtYXNrIDAyMjsgJChET0NfSU5TVEFMTCkgXAorIAkJIk1vZHVsZSIgIiQoTkFNRSkiIFwKKyAJCSJpbnN0YWxsZWQgaW50byIgJChJTlNUQUxMVkVORE9STElCKSBcCisgCQlMSU5LVFlQRSAiJChMSU5LVFlQRSkiIFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vaW5zdG1vZHNoX2RvYy5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9pbnN0bW9kc2hfZG9jLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYyYzc0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vaW5zdG1vZHNoX2RvYy5kaWZmCkBAIC0wLDAgKzEsMjcgQEAKK0Zyb20gMjYyMDliNTUyMDFhMWIyZDI1MjUyYWMzYjQyNWJjNDkwODEyOTlkZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogVHVlLCA4IE1hciAyMDA1IDE5OjMwOjM4ICsxMTAwCitTdWJqZWN0OiBEZWJpYW4gcG9saWN5IGRvZXNuJ3QgaW5zdGFsbCAucGFja2xpc3QgZmlsZXMgZm9yIGNvcmUgb3IgdmVuZG9yLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vaW5zdG1vZHNoX2RvYy5kaWZmCistLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9iaW4vaW5zdG1vZHNoIHwgNCArKystCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvYmluL2luc3Rtb2RzaCBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2Jpbi9pbnN0bW9kc2gKK2luZGV4IDhiOWFhOTUuLmU1NTE0MzQgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9iaW4vaW5zdG1vZHNoCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9iaW4vaW5zdG1vZHNoCitAQCAtMTgsOSArMTgsMTEgQEAgaW5zdG1vZHNoIC0gQSBzaGVsbCB0byBleGFtaW5lIGluc3RhbGxlZCBtb2R1bGVzCisgCisgPWhlYWQxIERFU0NSSVBUSU9OCisgCistQSBsaXR0bGUgaW50ZXJmYWNlIHRvIEV4dFV0aWxzOjpJbnN0YWxsZWQgdG8gZXhhbWluZSBpbnN0YWxsZWQgbW9kdWxlcywKKytBIGxpdHRsZSBpbnRlcmZhY2UgdG8gRXh0VXRpbHM6Okluc3RhbGxlZCB0byBleGFtaW5lIGxvY2FsbHkqIGluc3RhbGxlZCBtb2R1bGVzLAorIHZhbGlkYXRlIHlvdXIgcGFja2xpc3RzIGFuZCBldmVuIGNyZWF0ZSBhIHRhcmJhbGwgZnJvbSBhbiBpbnN0YWxsZWQgbW9kdWxlLgorIAorKypPbiBEZWJpYW4gc3lzdGVtLCBCPGNvcmU+IGFuZCBCPHZlbmRvcj4gbW9kdWxlcyBhcmUgbWFuYWdlZCBieSBDPGRwa2c+LgorKworID1oZWFkMSBTRUUgQUxTTworIAorIEV4dFV0aWxzOjpJbnN0YWxsZWQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbGRfcnVuX3BhdGguZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbGRfcnVuX3BhdGguZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODBmODZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9sZF9ydW5fcGF0aC5kaWZmCkBAIC0wLDAgKzEsMjQgQEAKK0Zyb20gNTNjZTY5MDg1OTE4MjMyYTFiN2UyNmU3NzYyYzFiMmY3MGIxZWI0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogRnJpLCAxOCBNYXIgMjAwNSAyMjoyMjoyNSArMTEwMAorU3ViamVjdDogUmVtb3ZlIHN0YW5kYXJkIGxpYnMgZnJvbSBMRF9SVU5fUEFUSCBhcyBwZXIgRGViaWFuIHBvbGljeS4KKworUGF0Y2gtTmFtZTogZGViaWFuL2xkX3J1bl9wYXRoLmRpZmYKKy0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbSB8IDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL0xpYmxpc3QvS2lkLnBtIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL0xpYmxpc3QvS2lkLnBtCitpbmRleCAzN2JjZmQ0Li5iZDY2ZTY1IDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL0xpYmxpc3QvS2lkLnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC9LaWQucG0KK0BAIC01Niw2ICs1Niw5IEBAIHN1YiBfdW5peF9vczJfZXh0IHsKKyAgICAgbXkgKCAkcHdkICkgICA9IGN3ZCgpOyAgICAjIGZyb20gQ3dkLnBtCisgICAgIG15ICggJGZvdW5kICkgPSAwOworIAorKyAgICAjIERlYmlhbi1zcGVjaWZpYzogZG9uJ3QgdXNlIExEX1JVTl9QQVRIIGZvciBzdGFuZGFyZCBkaXJzCisrICAgICRsZF9ydW5fcGF0aF9zZWVueyRffSsrIGZvciBAbGlicGF0aDsKKysKKyAgICAgZm9yZWFjaCBteSAkdGhpc2xpYiAoIHNwbGl0ICcgJywgJHBvdGVudGlhbF9saWJzICkgeworICAgICAgICAgbXkgKCAkY3VzdG9tX25hbWUgKSA9ICcnOworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9saWJuZXRfY29uZmlnX3BhdGguZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbGlibmV0X2NvbmZpZ19wYXRoLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRlZjk2NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbGlibmV0X2NvbmZpZ19wYXRoLmRpZmYKQEAgLTAsMCArMSwzNyBAQAorRnJvbSBhN2Y2ZDQ1M2U2MDI1NmQzMjk0NjlhNzViNjQyY2NhODU0Y2ViZWExIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBUdWUsIDggTWFyIDIwMDUgMTk6MzA6MzggKzExMDAKK1N1YmplY3Q6IFNldCBsb2NhdGlvbiBvZiBsaWJuZXQuY2ZnIHRvIC9ldGMvcGVybC9OZXQgYXMgL3VzciBtYXkgbm90IGJlCisgd3JpdGFibGUuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9saWJuZXRfY29uZmlnX3BhdGguZGlmZgorLS0tCisgY3Bhbi9saWJuZXQvbGliL05ldC9Db25maWcucG0gfCA3ICsrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9saWJuZXQvbGliL05ldC9Db25maWcucG0gYi9jcGFuL2xpYm5ldC9saWIvTmV0L0NvbmZpZy5wbQoraW5kZXggOTUzYTgyNi4uNjFiYTEyYSAxMDA2NDQKKy0tLSBhL2NwYW4vbGlibmV0L2xpYi9OZXQvQ29uZmlnLnBtCisrKysgYi9jcGFuL2xpYm5ldC9saWIvTmV0L0NvbmZpZy5wbQorQEAgLTY4LDkgKzY4LDggQEAgbXkgJW5jID0gKAorIFRSWV9JTlRFUk5FVF9DT05GSUcKKyB9CisgCistbXkgJGZpbGUgPSBfX0ZJTEVfXzsKKytteSAkZmlsZSA9ICcvZXRjL3BlcmwvTmV0L2xpYm5ldC5jZmcnOworIG15ICRyZWY7CistJGZpbGUgPX4gcy9Db25maWcucG0vbGlibmV0LmNmZy87CisgaWYgKC1mICRmaWxlKSB7CisgICAkcmVmID0gZXZhbCB7IGxvY2FsICRTSUd7X19ESUVfX307IGRvICRmaWxlIH07CisgICBpZiAocmVmKCRyZWYpIGVxICdIQVNIJykgeworQEAgLTE0Miw4ICsxNDEsOCBAQCBOZXQ6OkNvbmZpZyAtIExvY2FsIGNvbmZpZ3VyYXRpb24gZGF0YSBmb3IgbGlibmV0CisgQzxOZXQ6OkNvbmZpZz4gaG9sZHMgY29uZmlndXJhdGlvbiBkYXRhIGZvciB0aGUgbW9kdWxlcyBpbiB0aGUgbGlibmV0CisgZGlzdHJpYnV0aW9uLiBEdXJpbmcgaW5zdGFsbGF0aW9uIHlvdSB3aWxsIGJlIGFza2VkIGZvciB0aGVzZSB2YWx1ZXMuCisgCistVGhlIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBoZWxkIGdsb2JhbGx5IGluIGEgZmlsZSBpbiB0aGUgcGVybCBpbnN0YWxsYXRpb24KKy10cmVlLCBidXQgYSB1c2VyIG1heSBvdmVycmlkZSBhbnkgb2YgdGhlc2UgdmFsdWVzIGJ5IHByb3ZpZGluZyB0aGVpciBvd24uIFRoaXMKKytUaGUgY29uZmlndXJhdGlvbiBkYXRhIGlzIGhlbGQgZ2xvYmFsbHkgaW4gQzwvZXRjL3BlcmwvTmV0L2xpYm5ldC5jZmc+LAorK2J1dCBhIHVzZXIgbWF5IG92ZXJyaWRlIGFueSBvZiB0aGVzZSB2YWx1ZXMgYnkgcHJvdmlkaW5nIHRoZWlyIG93bi4gVGhpcworIGNhbiBiZSBkb25lIGJ5IGhhdmluZyBhIEM8LmxpYm5ldHJjPiBmaWxlIGluIHRoZWlyIGhvbWUgZGlyZWN0b3J5LiBUaGlzIGZpbGUKKyBzaG91bGQgcmV0dXJuIGEgcmVmZXJlbmNlIHRvIGEgSEFTSCBjb250YWluaW5nIHRoZSBrZXlzIGRlc2NyaWJlZCBiZWxvdy4KKyBGb3IgZXhhbXBsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9saWJwZXJsX2VtYmVkX2RvYy5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9saWJwZXJsX2VtYmVkX2RvYy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YjgwNTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xpYnBlcmxfZW1iZWRfZG9jLmRpZmYKQEAgLTAsMCArMSwyNiBAQAorRnJvbSBmYjhiZGJiNGJmNTYzODJkZTA5OWU2MmMyNTY0Mjg2YjlkZmRhNDZkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBUdWUsIDggTWFyIDIwMDUgMTk6MzA6MzggKzExMDAKK1N1YmplY3Q6IE5vdGUgdGhhdCBsaWJwZXJsLWRldiBwYWNrYWdlIGlzIHJlcXVpcmVkIGZvciBlbWJlZGRlZCBsaW5raW5nCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvMTg2Nzc4CisKK1BhdGNoLU5hbWU6IGRlYmlhbi9saWJwZXJsX2VtYmVkX2RvYy5kaWZmCistLS0KKyBsaWIvRXh0VXRpbHMvRW1iZWQucG0gfCAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYi9FeHRVdGlscy9FbWJlZC5wbSBiL2xpYi9FeHRVdGlscy9FbWJlZC5wbQoraW5kZXggM2Y5ODNjMS4uMGVjOGE2NyAxMDA2NDQKKy0tLSBhL2xpYi9FeHRVdGlscy9FbWJlZC5wbQorKysrIGIvbGliL0V4dFV0aWxzL0VtYmVkLnBtCitAQCAtMjk2LDYgKzI5Niw5IEBAIGFuZCBleHRlbnNpb25zIGluIHlvdXIgQy9DKysgYXBwbGljYXRpb25zLgorIFR5cGljYWxseSwgYW4gYXBwbGljYXRpb24gRjxNYWtlZmlsZT4gd2lsbCBpbnZva2UgQzxFeHRVdGlsczo6RW1iZWQ+CisgZnVuY3Rpb25zIHdoaWxlIGJ1aWxkaW5nIHlvdXIgYXBwbGljYXRpb24uICAKKyAKKytOb3RlIHRoYXQgb24gRGViaWFuIHN5c3RlbXMgdGhlIEI8bGlicGVybC1kZXY+IHBhY2thZ2UgaXMgcmVxdWlyZWQgZm9yCisrY29tcGlsaW5nIGFwcGxpY2F0aW9ucyB3aGljaCBlbWJlZCBhbiBpbnRlcnByZXRlci4KKysKKyA9aGVhZDEgQEVYUE9SVAorIAorIEM8RXh0VXRpbHM6OkVtYmVkPiBleHBvcnRzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9sb2NhbGUtcm9idXN0bmVzcy5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9sb2NhbGUtcm9idXN0bmVzcy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNDcxZWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xvY2FsZS1yb2J1c3RuZXNzLmRpZmYKQEAgLTAsMCArMSw1MiBAQAorRnJvbSAyODllYWY4N2Y4ZGU0ZDllYmZkNjYxZDRlNDI5OWMyOTUyNDM1MjQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPgorRGF0ZTogRnJpLCAxMCBBcHIgMjAxNSAxMDoxOTo1MSArMDMwMAorU3ViamVjdDogTWFrZSB0L3J1bi9sb2NhbGUudCBzdXJ2aXZlIG1pc3NpbmcgbG9jYWxlcyBtYXNrZWQgYnkgTENfQUxMCisKK0lmIExDX0FMTCBpcyBzZXQgdG8gYSB2YWxpZCBsb2NhbGUgYnV0IGFub3RoZXIgTENfKiBzZXR0aW5nIGxpa2UgTENfQ1RZUEUKK2lzbid0LCB0L3J1bi9sb2NhbGUudCB3b3VsZCBmYWlsIGJlY2F1c2UgaXQgZXhwbGljaXRseSB1bnNldHMgTENfQUxMLAordW5tYXNraW5nIHRoZSBwcm9ibGVtIHVuZGVybmVhdGguIEFsbCB0aGUgb3RoZXIgdGVzdHMgc3Vydml2ZSBzdWNoCithIHNjZW5hcmlvLgorCitXaGlsZSB0aGlzIGlzIGNsZWFybHkgYW4gZXJyb3IgaW4gdGhlIGJ1aWxkIGVudmlyb25tZW50LCBpdCdzIGVhc3kgdG8gbWFrZQordGhlIHRlc3QgbW9yZSByb2J1c3QgYnkgZmlyc3QgY2xlYXJpbmcgYWxsIHRoZSBsb2NhbGUgcmVsZXZhbnQgdmFyaWFibGVzLgorCitCdWc6IGh0dHBzOi8vcnQucGVybC5vcmcvVGlja2V0L0Rpc3BsYXkuaHRtbD9pZD0xMjQzMTAKK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc4MjA2OAorUGF0Y2gtTmFtZTogZGViaWFuL2xvY2FsZS1yb2J1c3RuZXNzLmRpZmYKKy0tLQorIHQvcnVuL2xvY2FsZS50IHwgNyArKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3QvcnVuL2xvY2FsZS50IGIvdC9ydW4vbG9jYWxlLnQKK2luZGV4IGJkMWEwMzQuLjIxMDUzMzkgMTAwNjQ0CistLS0gYS90L3J1bi9sb2NhbGUudAorKysrIGIvdC9ydW4vbG9jYWxlLnQKK0BAIC0yNyw2ICsyNyw5IEBAIG15IEBsb2NhbGVzID0gZXZhbCB7IGZpbmRfbG9jYWxlcyggWyAmTENfQUxMLCAmTENfQ1RZUEUsICZMQ19OVU1FUklDIF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB9OworIHNraXBfYWxsKCJubyBsb2NhbGVzIGF2YWlsYWJsZSIpIHVubGVzcyBAbG9jYWxlczsKKyAKKysjIHJlc2V0IHRoZSBsb2NhbGUgZW52aXJvbm1lbnQKKytsb2NhbCBARU5WeydMQU5HJywgKGdyZXAgL15MQ18vLCBrZXlzICVFTlYpfTsKKysKKyBwbGFuIHRlc3RzID0+ICZsYXN0OworIAorIG15ICRub25fQ19sb2NhbGU7CitAQCAtNTgsOSArNjEsNiBAQCBFT0YKKyBTS0lQOiB7CisgICAgIHNraXAoIldpbmRvd3Mgc3RvcmVzIGxvY2FsZSBkZWZhdWx0cyBpbiB0aGUgcmVnaXN0cnkiLCAxICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAkXk8gZXEgJ01TV2luMzInOworLSAgICBsb2NhbCAkRU5We0xDX05VTUVSSUN9OyAjIFNvIG5vdCB0YWtlbiBhcyBhIGRlZmF1bHQKKy0gICAgbG9jYWwgJEVOVntMQ19BTEx9OyAjIHNvIGl0IG5ldmVyIG92ZXJyaWRlcyBMQ19OVU1FUklDCistICAgIGxvY2FsICRFTlZ7TEFOR307ICAgIyBTbyBub3QgdGFrZW4gYXMgYSBkZWZhdWx0CisgICAgIGZyZXNoX3BlcmxfaXMoImZvciAocXcoQGxvY2FsZXMpKSB7XG4iIC4gPDwnRU9GJywKKyAgICAgICAgIHVzZSBQT1NJWCBxdyhsb2NhbGVfaCk7CisgICAgICAgICB1c2UgbG9jYWxlOworQEAgLTM0OCw3ICszNDgsNiBAQCBFT0YKKyAKKyAgICAgeworIAlsb2NhbCAkRU5We0xDX05VTUVSSUN9ID0gJGRpZmZlcmVudDsKKy0JbG9jYWwgJEVOVntMQ19BTEx9OyAjIHNvIGl0IG5ldmVyIG92ZXJyaWRlcyBMQ19OVU1FUklDCisgCWZyZXNoX3BlcmxfaXMoPDwiRU9GIiwKKyAJICAgIHVzZSBQT1NJWCBxdyhsb2NhbGVfaCk7CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL21ha2VtYWtlci1wYXN0aHJ1LmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL21ha2VtYWtlci1wYXN0aHJ1LmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEwZjlkYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbWFrZW1ha2VyLXBhc3RocnUuZGlmZgpAQCAtMCwwICsxLDMwIEBACitGcm9tIDU5M2RkNTJmNTM1YjFmNDM5ZGZkMGFmZTUyMjExYWU4OTYwZTk4MGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CitEYXRlOiBTdW4sIDI0IEF1ZyAyMDE0IDEyOjU2OjExIC0wNzAwCitTdWJqZWN0OiBQYXNzIExEIHNldHRpbmdzIHRocm91Z2ggdG8gc3ViZGlyZWN0b3JpZXMKKworW3J0LmNwYW4ub3JnICMyODYzMl0gZml4ZWQgbW9zdCBpc3N1ZXMgd2l0aCBwYXNzaW5nIExEIGRvd24gdG8KK3N1YmRpcmVjdG9yeSBNYWtlZmlsZS5QTCBmaWxlcy4gSG93ZXZlciwgdGhlcmUgYXJlIHNvbWUgZGlzdHJpYnV0aW9ucworKGluY2x1ZGluZyBXeCwgUGFyOjpQYWNrZXIsIGFuZCBWZXJpbG9nLVBlcmwpIHRoYXQgZXhwbGljaXRseSBzZXQKK0xELiBUaG9zZSBzdGlsbCBjYW4ndCBiZSBvdmVycmlkZGVuIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gQWRkaW5nIExEIHRvCit0aGUgUEFTVEhSVSBsaXN0IGZpeGVzIHRoaXMuCisKK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc1ODQ3MQorUGF0Y2gtTmFtZTogZGViaWFuL21ha2VtYWtlci1wYXN0aHJ1LmRpZmYKKy0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQoraW5kZXggNGE4ZTE0Yy4uNTQ4ZDk4ZSAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorQEAgLTI3OTMsNyArMjc5Myw3IEBAIHN1YiBwYXN0aHJ1IHsKKyAgICAgbXkoJHNlcCkgPSAkSXN7Vk1TfSA/ICcsJyA6ICcnOworICAgICAkc2VwIC49ICJcXFxuXHQiOworIAorLSAgICBmb3JlYWNoIG15ICRrZXkgKHF3KExJQiBMSUJQRVJMX0EgTElOS1RZUEUgT1BUSU1JWkUKKysgICAgZm9yZWFjaCBteSAka2V5IChxdyhMSUIgTElCUEVSTF9BIExJTktUWVBFIE9QVElNSVpFIExECisgICAgICAgICAgICAgICAgICAgICAgUFJFRklYIElOU1RBTExfQkFTRSkKKyAgICAgICAgICAgICAgICAgICkKKyAgICAgewpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9tYWtlbWFrZXJfY3VzdG9taXplZC5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9tYWtlbWFrZXJfY3VzdG9taXplZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYjRjYjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL21ha2VtYWtlcl9jdXN0b21pemVkLmRpZmYKQEAgLTAsMCArMSw0MiBAQAorRnJvbSA2MzQ0NDkwNjZhOWM4MTBlODE1MDY0MjVkMmNhOTI1YjJmZDcyYWIyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRG9taW5pYyBIYXJncmVhdmVzIDxkb21AZWFydGgubGk+CitEYXRlOiBTYXQsIDIzIE1heSAyMDE1IDIxOjE1OjA2ICswMjAwCitTdWJqZWN0OiBVcGRhdGUgdC9wb3J0aW5nL2N1c3RvbWl6ZWQuZGF0IGZvciBmaWxlcyBwYXRjaGVkIGluIERlYmlhbgorCitQYXRjaC1OYW1lOiBkZWJpYW4vbWFrZW1ha2VyX2N1c3RvbWl6ZWQuZGlmZgorLS0tCisgdC9wb3J0aW5nL2N1c3RvbWl6ZWQuZGF0IHwgOCArKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90L3BvcnRpbmcvY3VzdG9taXplZC5kYXQgYi90L3BvcnRpbmcvY3VzdG9taXplZC5kYXQKK2luZGV4IDdkZjM5OGQuLmY4NTdiZDIgMTAwNjQ0CistLS0gYS90L3BvcnRpbmcvY3VzdG9taXplZC5kYXQKKysrKyBiL3QvcG9ydGluZy9jdXN0b21pemVkLmRhdAorQEAgLTEsNyArMSw3IEBACisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvQ29tbWFuZC9NTS5wbSA3ZjRkZmQwZmU4ODRiZDQyNDEyYmNmMDRjYTgwZWY5N2IzOWMxZDU0CisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC5wbSBiZWYwOTk5ODhiMTVmYjBiMmExZjVhYzQ4YzAxYWYxZjdmMzZkMzI5CistRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC9LaWQucG0gODE2OGUxOGYwZTNjZTNlY2U0YmI3ZTdjNzJkNTdlYzA3YzY3YzQwMgorLUV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01ha2VNYWtlci5wbSA3MTE1ZTk3YTUzNTU5Y2IzZWMwNjFkZDZmN2YzNDRlNTIyNzI0YzRhCisrRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC9LaWQucG0gMzQ5M2FlNmY5MzI2NGU5NjdmNThkZWRhYTNkYmYzZGJjYjI0OTg1MworK0V4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01ha2VNYWtlci5wbSAzZDdhYmQ2NzRiMTVlZDMyM2Y3NDM1OTRlZjBiZDA5ZGI3NmIxYWVlCisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyL0NvbmZpZy5wbSBmOGRiOGQ0MjQ1YmYwNjg0YjgyMTBjODExZjUwZDdjZmIxYTI3ZDc4CisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyL0ZBUS5wb2QgNzU3YmZmYjQ3ODU3NTIxMzExZjhmM2JkZTQzZWJlMTY1ZjhkNTE5MQorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01ha2VNYWtlci9Mb2NhbGUucG0gODJiZTA2ODUxZGViODRjNjQxOWFkMDAzY2U5YjZkMTk1N2YzOTVmMworQEAgLTEzLDcgKzEzLDcgQEAgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWtib290c3RyYXAucG0gNTg4NzJkNjYKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9Na3N5bWxpc3RzLnBtIGFiODAwMjlhYjE2ZDM4ZDRmMmU0MWRjODhkMmNlYjlmMzc5MGU0NzcKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTS5wbSA0NTNlMGFiYmM0YmIzOGRiNGMwODIwYWQ1YzQ4NDZmMzEzYjY2MjkxCisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQUlYLnBtIGMxYjFiYWJkYThmNDNhZTdhMmNhYmExY2I0ZjcwZjkyYWY1YTBlMzQKKy1FeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9BbnkucG0gNmY5MGQ5NGFkM2U3YWEwMDQ1YTNiMWExMGExYmIxODM5MWY4OWY1NworK0V4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX0FueS5wbSAyMWJkZTUzMjkwYmYxYTRkYTQ0NTcyOTBiNjViZDFiMGNhNmYxZDE2CisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQmVPUy5wbSBjYWIyYjNjZTA4YjcxYTRjZTg5YWE2MzBmMjM2ZWIwOGI4NTI0MzlkCisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQ3lnd2luLnBtIDYxZmNlZDBmYWY1MThiZjg3YzI2NWZjYjUxZWQzMzBiYTM1NDYyM2YKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9EYXJ3aW4ucG0gYWUwZWY1MWE3YjZkZDBiMDVhYTYxYzc3OWRmNzE2N2RkYTVmNTExOQorQEAgLTIyLDcgKzIyLDcgQEAgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fTWFjT1MucG0gMDU0NDMwMWY3MTIKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9OVzUucG0gNDMzMTM1ZWVjYjg1YjRiMWQ5MGQzMDI3NDMyZjMyOTQzNmM3ODQ0NworIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX09TMi5wbSAxZmJiNTYwNWJmYjQ3ZmVlZTQwODNmZWJhOGFhODVlNjU5NjI4ZjcwCisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fUU5YLnBtIDViNjZkMWY0ODVhNjAzNGQ5NmZjMjRiYTE2NjViMWJhZDllNDQ3ZjEKKy1FeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIDhjZWY5OWE5YmQzNzBlY2ZkMDdkZGIwZWZiZGNiYjQxMDEyNTVlNDUKKytFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIGM0NTVjOTE1ZmI3ZGMzZWViMTIwMGVkMWNkMTkwNDhlNmYyMWU2YjEKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9VV0lOLnBtIDkzOTU3MmZkZTNkNTliYTc3YzJlNjc3ZmUyZGYyYmVkNGJlZDU4OTgKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9WTVMucG0gMDljMjA0OWJmZDI1YjczNWUyYTViY2Y1NmE2Y2ZmN2I0ODI3ZjljOAorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1ZPUy5wbSBkNjVkNjNmODIxN2E1NWMzNmY2MmUyNDk4MTQ5ODg5NzRmNTkzYzc5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL21vZF9wYXRocy5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9tb2RfcGF0aHMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTE1OTA3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9tb2RfcGF0aHMuZGlmZgpAQCAtMCwwICsxLDk5IEBACitGcm9tIDZjNmNmMTRlMjA0ZjNjMDMxMzcyYmZkOTYwNGFkNTI0ZDU2OTExODYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IEZyaSwgMTggTWFyIDIwMDUgMjI6MjI6MjUgKzExMDAKK1N1YmplY3Q6IFR3ZWFrIEBJTkMgb3JkZXJpbmcgZm9yIERlYmlhbgorCitPdXIgb3JkZXIgaXM6CisKKyAgICBldGMgKGZvciBjb25maWcgZmlsZXMpCisgICAgc2l0ZSAoNS44LjEpCisgICAgdmVuZG9yIChhbGwpCisgICAgY29yZSAoNS44LjEpCisgICAgc2l0ZSAodmVyc2lvbi1pbmRlcCkKKyAgICBzaXRlIChwcmUtNS44LjEpCisKK1RoZSByYXRpb25hbGUgYmVpbmcgdGhhdCBhbiBhZG1pbiAodmlhIHNpdGUpLCBvciBtb2R1bGUgcGFja2FnZXIKKyh2ZW5kb3IpIGNhbiBjaG9zZSB0byBzaGFkb3cgY29yZSBtb2R1bGVzIHdoZW4gdGhlcmUgaXMgYSBuZXdlcgordmVyc2lvbiB0aGFuIGlzIGluY2x1ZGVkIGluIGNvcmUuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9tb2RfcGF0aHMuZGlmZgorLS0tCisgcGVybC5jIHwgNTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA1OCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9wZXJsLmMgYi9wZXJsLmMKK2luZGV4IDA4NjY0NWIuLmU2NGYxZjQgMTAwNjQ0CistLS0gYS9wZXJsLmMKKysrKyBiL3BlcmwuYworQEAgLTQzNzMsNiArNDM3MywxMSBAQCBTX2luaXRfcGVybGxpYihwVEhYKQorIAkJICAgICAgSU5DUFVTSF9BRERfU1VCX0RJUlN8SU5DUFVTSF9DQU5fUkVMT0NBVEUpOworICNlbmRpZgorIAorKyNpZmRlZiBERUJJQU4KKysgICAgLyogZm9yIGNvbmZpZ3VyYXRpb24gd2hlcmUgL3VzciBpcyBtb3VudGVkIHJvIChDUEFOOjpDb25maWcsIE5ldDo6Q29uZmlnKSAqLworKyAgICBTX2luY3B1c2hfdXNlX3NlcChhVEhYXyBTVFJfV0lUSF9MRU4oIi9ldGMvcGVybCIpLCAweDApOworKyNlbmRpZgorKworICNpZmRlZiBTSVRFQVJDSF9FWFAKKyAgICAgLyogc2l0ZWFyY2ggaXMgYWx3YXlzIHJlbGF0aXZlIHRvIHNpdGVsaWIgb24gV2luZG93cyBmb3IKKyAgICAgICogRExMLWJhc2VkIHBhdGggaW50dWl0aW9uIHRvIHdvcmsgY29ycmVjdGx5ICovCitAQCAtNDQ5MCw2ICs0NDk1LDU5IEBAIFNfaW5pdF9wZXJsbGliKHBUSFgpCisgCQkgICAgICBJTkNQVVNIX0FERF9PTERfVkVSU3xJTkNQVVNIX0NBTl9SRUxPQ0FURSk7CisgI2VuZGlmCisgCisrI2lmZGVmIERFQklBTgorKyAgICAvKiBOb24tdmVyc2lvbmVkIHNpdGUgZGlyZWN0b3J5IGZvciBsb2NhbCBtb2R1bGVzIGFuZCBmb3IKKysgICAgICAgY29tcGF0YWJpbGl0eSB3aXRoIHRoZSBwcmV2aW91cyBwYWNrYWdlcycgc2l0ZSBkaXJzICovCisrICAgIFNfaW5jcHVzaF91c2Vfc2VwKGFUSFhfIFNUUl9XSVRIX0xFTigiL3Vzci9sb2NhbC9saWIvc2l0ZV9wZXJsIiksCisrCQkgICAgICBJTkNQVVNIX0FERF9TVUJfRElSUyk7CisrCisrI2lmZGVmIFBFUkxfSU5DX1ZFUlNJT05fTElTVAorKyAgICB7CisrCXN0cnVjdCBzdGF0IHM7CisrCisrCS8qIGFkZCBzbWFsbCBidWZmZXIgaW4gY2FzZSBvbGQgdmVyc2lvbnMgYXJlIGxvbmdlciB0aGFuIHRoZQorKwkgICBjdXJyZW50IHZlcnNpb24gKi8KKysJY2hhciBzaXRlYXJjaFtzaXplb2YoU0lURUFSQ0hfRVhQKSsxNl0gPSBTSVRFQVJDSF9FWFA7CisrCWNoYXIgc2l0ZWxpYltzaXplb2YoU0lURUxJQl9FWFApKzE2XSA9IFNJVEVMSUJfRVhQOworKwljaGFyIGNvbnN0ICp2ZXJzW10gPSB7IFBFUkxfSU5DX1ZFUlNJT05fTElTVCB9OworKwljaGFyIGNvbnN0ICoqcDsKKysKKysJY2hhciAqYXJjaF92ZXJzID0gc3RycmNocihzaXRlYXJjaCwgJy8nKTsKKysJY2hhciAqbGliX3ZlcnMgPSBzdHJyY2hyKHNpdGVsaWIsICcvJyk7CisrCisrCWlmIChhcmNoX3ZlcnMgJiYgaXNkaWdpdCgqKythcmNoX3ZlcnMpKQorKwkgICAgKmFyY2hfdmVycyA9IDA7CisrCWVsc2UKKysJICAgIGFyY2hfdmVycyA9IDA7CisrCisrCWlmIChsaWJfdmVycyAmJiBpc2RpZ2l0KCorK2xpYl92ZXJzKSkKKysJICAgICpsaWJfdmVycyA9IDA7CisrCWVsc2UKKysJICAgIGxpYl92ZXJzID0gMDsKKysKKysJLyogdGhlcmUgaXMgc29tZSBkdXBsaWNhdGlvbiBoZXJlIGFzIGluY3B1c2ggZG9lcyBzb21ldGhpbmcKKysJICAgc2ltaWxhciBpbnRlcm5hbGx5LCBidXQgcmVxdWlyZWQgYXMgc2l0ZWFyY2ggaXMgbm90IGEKKysJICAgc3ViZGlyZWN0b3J5IG9mIHNpdGVsaWIgKi8KKysJZm9yIChwID0gdmVyczsgKnA7IHArKykKKysJeworKwkgICAgaWYgKGFyY2hfdmVycykKKysJICAgIHsKKysJCXN0cmNweShhcmNoX3ZlcnMsICpwKTsKKysJCWlmIChQZXJsTElPX3N0YXQoc2l0ZWFyY2gsICZzKSA+PSAwICYmIFNfSVNESVIocy5zdF9tb2RlKSkKKysJCSAgICBTX2luY3B1c2hfdXNlX3NlcChhVEhYXyBzaXRlYXJjaCwgc3RybGVuKHNpdGVhcmNoKSwgMHgwKTsKKysJICAgIH0KKysKKysJICAgIGlmIChsaWJfdmVycykKKysJICAgIHsKKysJCXN0cmNweShsaWJfdmVycywgKnApOworKwkJaWYgKFBlcmxMSU9fc3RhdChzaXRlbGliLCAmcykgPj0gMCAmJiBTX0lTRElSKHMuc3RfbW9kZSkpCisrCQkgICAgU19pbmNwdXNoX3VzZV9zZXAoYVRIWF8gc2l0ZWxpYiwgc3RybGVuKHNpdGVsaWIpLCAweDApOworKwkgICAgfQorKwl9CisrICAgIH0KKysjZW5kaWYKKysjZW5kaWYKKysKKyAjaWZkZWYgUEVSTF9PVEhFUkxJQkRJUlMKKyAgICAgU19pbmNwdXNoX3VzZV9zZXAoYVRIWF8gU1RSX1dJVEhfTEVOKFBFUkxfT1RIRVJMSUJESVJTKSwKKyAJCSAgICAgIElOQ1BVU0hfQUREX09MRF9WRVJTfElOQ1BVU0hfQUREX0FSQ0hPTkxZX1NVQl9ESVJTCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL25vX3BhY2tsaXN0X3Blcmxsb2NhbC5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9ub19wYWNrbGlzdF9wZXJsbG9jYWwuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTExZmQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9ub19wYWNrbGlzdF9wZXJsbG9jYWwuZGlmZgpAQCAtMCwwICsxLDkyIEBACitGcm9tIDI0MGYyZjRhZWIzODUwYmMwYzUzNzBiOWZiYzM5MDk1NzNiZWQ5YjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IFR1ZSwgOCBNYXIgMjAwNSAxOTozMDozOCArMTEwMAorU3ViamVjdDogRG9uJ3QgaW5zdGFsbCAucGFja2xpc3Qgb3IgcGVybGxvY2FsLnBvZCBmb3IgcGVybCBvciB2ZW5kb3IKKworUGF0Y2gtTmFtZTogZGViaWFuL25vX3BhY2tsaXN0X3Blcmxsb2NhbC5kaWZmCistLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSB8IDM1ICsrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KK2luZGV4IDU3MGE2MzEuLjM5MWRjMjIgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KK0BAIC0yMTIyLDExICsyMTIyLDYgQEAgcHVyZV9wZXJsX2luc3RhbGwgOjogYWxsCisgfTsKKyAKKyAgICAgcHVzaCBAbSwKKy1xewkJcmVhZCAifS4kc2VsZi0+Y2F0ZmlsZSgnJChQRVJMX0FSQ0hMSUIpJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIgXAorLQkJd3JpdGUgIn0uJHNlbGYtPmNhdGZpbGUoJyQoREVTVElOU1RBTExBUkNITElCKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiIFwKKy19IHVubGVzcyAkc2VsZi0+e05PX1BBQ0tMSVNUfTsKKy0KKy0gICAgcHVzaCBAbSwKKyBxewkJIiQoSU5TVF9MSUIpIiAiJChERVNUSU5TVEFMTFBSSVZMSUIpIiBcCisgCQkiJChJTlNUX0FSQ0hMSUIpIiAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIiBcCisgCQkiJChJTlNUX0JJTikiICIkKERFU1RJTlNUQUxMQklOKSIgXAorQEAgLTIxNTgsMTAgKzIxNTMsNiBAQCBxewkJIiQoSU5TVF9MSUIpIiAiJChERVNUSU5TVEFMTFNJVEVMSUIpIiBcCisgcHVyZV92ZW5kb3JfaW5zdGFsbCA6OiBhbGwKKyAJJChOT0VDSE8pIHVtYXNrIDAyMjsgJChNT0RfSU5TVEFMTCkgXAorIH07CistICAgIHB1c2ggQG0sCistcXsJCXJlYWQgIn0uJHNlbGYtPmNhdGZpbGUoJyQoVkVORE9SQVJDSEVYUCknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IiBcCistCQl3cml0ZSAifS4kc2VsZi0+Y2F0ZmlsZSgnJChERVNUSU5TVEFMTFZFTkRPUkFSQ0gpJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIgXAorLX0gdW5sZXNzICRzZWxmLT57Tk9fUEFDS0xJU1R9OworIAorICAgICBwdXNoIEBtLAorIHF7CQkiJChJTlNUX0xJQikiICIkKERFU1RJTlNUQUxMVkVORE9STElCKSIgXAorQEAgLTIxODcsMzcgKzIxNzgsMTkgQEAgZG9jX3ZlbmRvcl9pbnN0YWxsIDo6IGFsbAorIAorICAgICBwdXNoIEBtLCBxeworIGRvY19wZXJsX2luc3RhbGwgOjogYWxsCistCSQoTk9FQ0hPKSAkKEVDSE8pIEFwcGVuZGluZyBpbnN0YWxsYXRpb24gaW5mbyB0byAiJChERVNUSU5TVEFMTEFSQ0hMSUIpL3Blcmxsb2NhbC5wb2QiCistCS0kKE5PRUNITykgdW1hc2sgMDIyOyAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKy0JLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoRE9DX0lOU1RBTEwpIFwKKy0JCSJNb2R1bGUiICIkKE5BTUUpIiBcCistCQkiaW5zdGFsbGVkIGludG8iICQoSU5TVEFMTFBSSVZMSUIpIFwKKy0JCUxJTktUWVBFICIkKExJTktUWVBFKSIgXAorLQkJVkVSU0lPTiAiJChWRVJTSU9OKSIgXAorLQkJRVhFX0ZJTEVTICIkKEVYRV9GSUxFUykiIFwKKy0JCT4+ICJ9LiRzZWxmLT5jYXRmaWxlKCckKERFU1RJTlNUQUxMQVJDSExJQiknLCdwZXJsbG9jYWwucG9kJykucXsiCisgCisgZG9jX3NpdGVfaW5zdGFsbCA6OiBhbGwKKy0JJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMQVJDSExJQikvcGVybGxvY2FsLnBvZCIKKy0JLSQoTk9FQ0hPKSB1bWFzayAwMjsgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMQVJDSExJQikiCisrCSQoTk9FQ0hPKSAkKEVDSE8pIEFwcGVuZGluZyBpbnN0YWxsYXRpb24gaW5mbyB0byAiJChERVNUSU5TVEFMTFNJVEVBUkNIKS9wZXJsbG9jYWwucG9kIgorKwktJChOT0VDSE8pIHVtYXNrIDAyOyAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExTSVRFQVJDSCkiCisgCS0kKE5PRUNITykgdW1hc2sgMDI7ICQoRE9DX0lOU1RBTEwpIFwKKyAJCSJNb2R1bGUiICIkKE5BTUUpIiBcCisgCQkiaW5zdGFsbGVkIGludG8iICQoSU5TVEFMTFNJVEVMSUIpIFwKKyAJCUxJTktUWVBFICIkKExJTktUWVBFKSIgXAorIAkJVkVSU0lPTiAiJChWRVJTSU9OKSIgXAorIAkJRVhFX0ZJTEVTICIkKEVYRV9GSUxFUykiIFwKKy0JCT4+ICJ9LiRzZWxmLT5jYXRmaWxlKCckKERFU1RJTlNUQUxMQVJDSExJQiknLCdwZXJsbG9jYWwucG9kJykucXsiCisrCQk+PiAifS4kc2VsZi0+Y2F0ZmlsZSgnJChERVNUSU5TVEFMTFNJVEVBUkNIKScsJ3Blcmxsb2NhbC5wb2QnKS5xeyIKKyAKKyBkb2NfdmVuZG9yX2luc3RhbGwgOjogYWxsCistCSQoTk9FQ0hPKSAkKEVDSE8pIEFwcGVuZGluZyBpbnN0YWxsYXRpb24gaW5mbyB0byAiJChERVNUSU5TVEFMTEFSQ0hMSUIpL3Blcmxsb2NhbC5wb2QiCistCS0kKE5PRUNITykgdW1hc2sgMDIyOyAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKy0JLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoRE9DX0lOU1RBTEwpIFwKKy0JCSJNb2R1bGUiICIkKE5BTUUpIiBcCistCQkiaW5zdGFsbGVkIGludG8iICQoSU5TVEFMTFZFTkRPUkxJQikgXAorLQkJTElOS1RZUEUgIiQoTElOS1RZUEUpIiBcCistCQlWRVJTSU9OICIkKFZFUlNJT04pIiBcCistCQlFWEVfRklMRVMgIiQoRVhFX0ZJTEVTKSIgXAorLQkJPj4gIn0uJHNlbGYtPmNhdGZpbGUoJyQoREVTVElOU1RBTExBUkNITElCKScsJ3Blcmxsb2NhbC5wb2QnKS5xeyIKKyAKKyB9IHVubGVzcyAkc2VsZi0+e05PX1BFUkxMT0NBTH07CisgCitAQCAtMjIyNiwxMyArMjE5OSwxMSBAQCB1bmluc3RhbGwgOjogdW5pbnN0YWxsX2Zyb21fJChJTlNUQUxMRElSUylkaXJzCisgCSQoTk9FQ0hPKSAkKE5PT1ApCisgCisgdW5pbnN0YWxsX2Zyb21fcGVybGRpcnMgOjoKKy0JJChOT0VDSE8pICQoVU5JTlNUQUxMKSAifS4kc2VsZi0+Y2F0ZmlsZSgnJChQRVJMX0FSQ0hMSUIpJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIKKyAKKyB1bmluc3RhbGxfZnJvbV9zaXRlZGlycyA6OgorIAkkKE5PRUNITykgJChVTklOU1RBTEwpICJ9LiRzZWxmLT5jYXRmaWxlKCckKFNJVEVBUkNIRVhQKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiCisgCisgdW5pbnN0YWxsX2Zyb21fdmVuZG9yZGlycyA6OgorLQkkKE5PRUNITykgJChVTklOU1RBTEwpICJ9LiRzZWxmLT5jYXRmaWxlKCckKFZFTkRPUkFSQ0hFWFApJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIKKyB9OworIAorICAgICBqb2luKCIiLEBtKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGF0Y2hsZXZlbC5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wYXRjaGxldmVsLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY1NmIwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGF0Y2hsZXZlbC5kaWZmCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gYjUxN2M1ZTE1ZDA4NzFlMzZkMGYxMTg3NjYxZmUxZGQyOGRkZjgyMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IFN1biwgMTUgTWF5IDIwMTEgMTk6MzU6NTggKzAzMDAKK1N1YmplY3Q6IExpc3QgcGFja2FnZWQgcGF0Y2hlcyBpbiBwYXRjaGxldmVsLmgKKworT3JpZ2luOiB2ZW5kb3IKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNTY3NDg5CisKK1RoZSBsaXN0IG9mIHBhY2thZ2VkIHBhdGNoZXMgaXMgaW4gcGF0Y2hsZXZlbC1kZWJpYW4uaCwgd2hpY2ggaXMgZ2VuZXJhdGVkCitmcm9tIHRoZSBkZWJpYW4vcGF0Y2hlcy8gZGlyZWN0b3J5IHdoZW4gYnVpbGRpbmcgdGhlIHBhY2thZ2UuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9wYXRjaGxldmVsLmRpZmYKKy0tLQorIHBhdGNobGV2ZWwuaCB8IDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvcGF0Y2hsZXZlbC5oIGIvcGF0Y2hsZXZlbC5oCitpbmRleCBhMGFkNzhiLi4wMTM2N2I3IDEwMDY0NAorLS0tIGEvcGF0Y2hsZXZlbC5oCisrKysgYi9wYXRjaGxldmVsLmgKK0BAIC0xMzcsNiArMTM3LDkgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBsb2NhbF9wYXRjaGVzW10gPSB7CisgCSwidW5jb21taXR0ZWQtY2hhbmdlcyIKKyAjZW5kaWYKKyAJUEVSTF9HSVRfVU5QVVNIRURfQ09NTUlUUyAgICAJLyogZG8gbm90IHJlbW92ZSB0aGlzIGxpbmUgKi8KKysjaWZkZWYgREVCSUFOCisrI2luY2x1ZGUgInBhdGNobGV2ZWwtZGViaWFuLmgiCisrI2VuZGlmCisgCSxOVUxMCisgfTsKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGVybDVkYi14LXRlcm1pbmFsLWVtdWxhdG9yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wZXJsNWRiLXgtdGVybWluYWwtZW11bGF0b3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMzOTUyYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGVybDVkYi14LXRlcm1pbmFsLWVtdWxhdG9yLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gYzk5YzYxZThmODYzYTUwOGEwNzkzMTY4MDExYzk4ZGM3NGFiYmQwNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERvbWluaWMgSGFyZ3JlYXZlcyA8ZG9tQGVhcnRoLmxpPgorRGF0ZTogU2F0LCAxNCBBcHIgMjAxMiAxMTozNDowNSArMDEwMAorU3ViamVjdDogSW52b2tlIHgtdGVybWluYWwtZW11bGF0b3IgcmF0aGVyIHRoYW4geHRlcm0gaW4gcGVybDVkYi5wbAorCitJbiBEZWJpYW4gc3lzdGVtcywgeHRlcm0gbWlnaHQgbm90IGV4aXN0IG9yIG1pZ2h0IG5vdCBiZSB0aGUgcHJlZmVycmVkCit0ZXJtaW5hbCBlbXVsYXRvci4gVXNlIHgtdGVybWluYWwtZW11bGF0b3IgaW5zdGVhZAorCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzY2ODQ5MAorRm9yd2FyZGVkOiBub3QtbmVlZGVkCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9wZXJsNWRiLXgtdGVybWluYWwtZW11bGF0b3IucGF0Y2gKKy0tLQorIGxpYi9wZXJsNWRiLnBsIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL3Blcmw1ZGIucGwgYi9saWIvcGVybDVkYi5wbAoraW5kZXggN2U3MTk0ZS4uYzQ2NmJmMyAxMDA2NDQKKy0tLSBhL2xpYi9wZXJsNWRiLnBsCisrKysgYi9saWIvcGVybDVkYi5wbAorQEAgLTY5NjAsNyArNjk2MCw3IEBAIHByb3Blcmx5IHNldCB1cC4KKyBzdWIgeHRlcm1fZ2V0X2ZvcmtfVFRZIHsKKyAgICAgKCBteSAkbmFtZSA9ICQwICkgPX4gcyxeLipbL1xcXSwsczsKKyAgICAgb3BlbiBYVCwKKy1xcVszPiYxIHh0ZXJtIC10aXRsZSAiRGF1Z2h0ZXIgUGVybCBkZWJ1Z2dlciAkcGlkcyAkbmFtZSIgLWUgc2ggLWMgJ3R0eSAxPiYzO1wKKytxcVszPiYxIHgtdGVybWluYWwtZW11bGF0b3IgLVQgIkRhdWdodGVyIFBlcmwgZGVidWdnZXIgJHBpZHMgJG5hbWUiIC1lIHNoIC1jICd0dHkgMT4mMztcCisgIHNsZWVwIDEwMDAwMDAwJyB8XTsKKyAKKyAgICAgIyBHZXQgdGhlIG91dHB1dCBmcm9tICd0dHknIGFuZCBjbGVhbiBpdCB1cCBhIGxpdHRsZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGVybGl2cC5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wZXJsaXZwLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMxZWFiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGVybGl2cC5kaWZmCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gZmJmYmViN2E2OTBkNzAzYTNjZGM1NmY5MjNlODllYjdiNzk5N2QzMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IEZyaSwgOSBKYW4gMjAwOSAxODo1NDo0NyArMDIwMAorU3ViamVjdDogTWFrZSBwZXJsaXZwIHNraXAgaW5jbHVkZSBkaXJlY3RvcmllcyBpbiAvdXNyL2xvY2FsCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNTEwODk1CisKK09uIFNhdCwgSmFuIDEwLCAyMDA5IGF0IDEyOjM3OjE4QU0gKzExMDAsIEJyZW5kYW4gTydEZWEgd3JvdGU6Cis+IE9uIFdlZCwgSmFuIDcsIDIwMDkgYXQgMTI6MjEgQU0sIE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4gd3JvdGU6CisKKz4gPiBXZSBjb3VsZCBjcmVhdGUgdGhlIGRpcmVjdG9yaWVzIGluIGEgcG9zdGluc3Qgc2NyaXB0LCBidXQgSSdtIG5vdCBzdXJlCis+ID4gSSBzZWUgdGhlIHBvaW50LiBUaGV5IHdpbGwgYmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gaW5zdGFsbGluZworPiA+IENQQU4gbW9kdWxlcy4KKz4KKz4gVGhlIGRpcmVjdG9yaWVzIGFyZSBpbnRlbnRpb25hbGx5IG5vdCBjcmVhdGVkLCBhcyB0aGlzIHdheSB0aGV5IGFyZQorPiBleGNsdWRlZCBmcm9tIHRoZSBzZWFyY2ggcGF0aCBhdCBzdGFydC11cCwgc2F2aW5nIGEgYnVuY2ggb2Ygd2FzdGVkCis+IHN0YXRzIGF0IHVzZS9yZXF1aXJlIHRpbWUgaW4gdGhlIGNvbW1vbiBjYXNlIHRoYXQgdGhlIHVzZXIgaGFzIG5vdAorPiBpbnN0YWxsZWQgYW55IGxvY2FsIHBhY2thZ2VzLiAgQXMgTmlrbyBwb2ludHMgb3V0LCB0aGV5IHdpbGwgYmUKKz4gY3JlYXRlZCBhcyByZXF1aXJlZC4KKworU2lnbmVkLW9mZi1ieTogTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPgorCitQYXRjaC1OYW1lOiBkZWJpYW4vcGVybGl2cC5kaWZmCistLS0KKyB1dGlscy9wZXJsaXZwLlBMIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS91dGlscy9wZXJsaXZwLlBMIGIvdXRpbHMvcGVybGl2cC5QTAoraW5kZXggYzJmMGExMS4uY2M0OWY5NiAxMDA2NDQKKy0tLSBhL3V0aWxzL3BlcmxpdnAuUEwKKysrKyBiL3V0aWxzL3BlcmxpdnAuUEwKK0BAIC0xNTMsNiArMTUzLDcgQEAgbXkgJElOQ190b3RhbCA9IDA7CisgbXkgJElOQ190aGVyZSA9IDA7CisgZm9yZWFjaCAoQElOQykgeworICAgICBuZXh0IGlmICRfIGVxICcuJzsgIyBza2lwIC1kIHRlc3QgaGVyZQorKyAgICBuZXh0IGlmIG18L3Vzci9sb2NhbHw7ICMgbm90IHNoaXBwZWQgb24gRGViaWFuCisgICAgIGlmICgtZCAkXykgeworICAgICAgICAgcHJpbnQgIiMjIFBlcmwgXEBJTkMgZGlyZWN0b3J5ICckXycgZXhpc3RzLlxuIiBpZiAkb3B0eyd2J307CisgICAgICAgICAkSU5DX3RoZXJlKys7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BvZDJtYW4tY3VzdG9taXplZC5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wb2QybWFuLWN1c3RvbWl6ZWQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjcwYjg3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wb2QybWFuLWN1c3RvbWl6ZWQuZGlmZgpAQCAtMCwwICsxLDIzIEBACitGcm9tIDI3YTQ5NTJjMmU1MzE5NDdkYzlmMmYwMmUyMDYzZDExN2UyZTY5OWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CitEYXRlOiBTYXQsIDE4IEFwciAyMDE1IDE3OjM5OjMyICswMzAwCitTdWJqZWN0OiBVcGRhdGUgcG9ydGluZy9jdXN0b21pemVkLmRhdCBmb3IgcG9kMm1hbiBtb2RpZmljYXRpb25zCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9wb2QybWFuLWN1c3RvbWl6ZWQuZGlmZgorLS0tCisgdC9wb3J0aW5nL2N1c3RvbWl6ZWQuZGF0IHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdC9wb3J0aW5nL2N1c3RvbWl6ZWQuZGF0IGIvdC9wb3J0aW5nL2N1c3RvbWl6ZWQuZGF0CitpbmRleCAwZWVkOWY3Li43ZGYzOThkIDEwMDY0NAorLS0tIGEvdC9wb3J0aW5nL2N1c3RvbWl6ZWQuZGF0CisrKysgYi90L3BvcnRpbmcvY3VzdG9taXplZC5kYXQKK0BAIC00Miw3ICs0Miw3IEBAIFdpbjMyQVBJOjpGaWxlIGNwYW4vV2luMzJBUEktRmlsZS9NYWtlZmlsZS5QTCA2MDVkMGFlZTMxYWViZTg0YTk5NDA4ZjlhYjVmNjQ0ZGI1CisgV2luMzJBUEk6OkZpbGUgY3Bhbi9XaW4zMkFQSS1GaWxlL3QvZmlsZS50IDEyNGU2NGFhNzdlNzU1MjM1ZWIyOTc2NDRhODdmYWM1Mzg4ZDNkNzgKKyBXaW4zMkFQSTo6RmlsZSBjcGFuL1dpbjMyQVBJLUZpbGUvdC90aWUudCA3MTJlYTdlZGQwY2M4MDVjZTFjMGI4MTcyYzAxYjAzZGQxOWI1ODNkCisgV2luMzJBUEk6OkZpbGUgY3Bhbi9XaW4zMkFQSS1GaWxlL3R5cGVtYXAgMjRiZmYwODhiYWJlYWRhYzA4NzNlOGRmMzkwZDE2NjZkOWQ5ZGI0YQorLXBvZGxhdG9ycyBjcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJtYW4uUEwgZjgxYWNmNTNmM2ZmNDZjZGNjNWViZGQ2NjFjNWQxM2ViMzVkMjBkNgorK3BvZGxhdG9ycyBjcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJtYW4uUEwgNzYxZjM1ZDNmY2Y5MWMxYmMyZjllMDI0YTlmYTVjNjJmZDNmYzMzOAorIHBvZGxhdG9ycyBjcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJ0ZXh0LlBMIGI0NjkzZmNmZTRhMGExYjM4YTIxNWNmYjg5ODVhNjVkNWQwMjVkNjkKKyB2ZXJzaW9uIGNwYW4vdmVyc2lvbi9saWIvdmVyc2lvbi5wbSBkMDkyM2I4OTVkNTdmMWQ2NjlhZTM2ZmNmODVjODdiMTZkYjM0MWQxCisgdmVyc2lvbiB2dXRpbC5jIDY2OGYxN2NhNDNlMjUyNzY0NTY3NGQyOWJhNzcyYjg2MzMwZDU2NjMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcHJlZml4X2NoYW5nZXMuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcHJlZml4X2NoYW5nZXMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDFlZmJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wcmVmaXhfY2hhbmdlcy5kaWZmCkBAIC0wLDAgKzEsMTE4IEBACitGcm9tIDkxNDk0OGYwMjZlZmNlMDJjZjBhYmZmOGIwMzEyYWFhZDk2NTkyZWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IFR1ZSwgOCBNYXIgMjAwNSAxOTozMDozOCArMTEwMAorU3ViamVjdDogRmlkZGxlIHdpdGggKlBSRUZJWCBhbmQgdmFyaWFibGVzIHdyaXR0ZW4gdG8gdGhlIG1ha2VmaWxlCisKK0ZpZGRsZSB3aXRoICpQUkVGSVggYW5kIHZhcmlhYmxlcyB3cml0dGVuIHRvIHRoZSBtYWtlZmlsZSBzbyB0aGF0CitpbnN0YWxsIGRpcmVjdG9yaWVzIG1heSBiZSBjaGFuZ2VkIHdoZW4gbWFrZSBpcyBydW4gYnkgcGFzc2luZworUFJFRklYPSB0byB0aGUgIm1ha2UgaW5zdGFsbCIgY29tbWFuZCAodXNlZCB3aGVuIHBhY2thZ2luZworbW9kdWxlcykuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9wcmVmaXhfY2hhbmdlcy5kaWZmCistLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQW55LnBtICB8IDEyICsrKysrKy0tLS0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIHwgIDMgKy0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNULnQgICAgICAgICAgICAgICAgfCAgNCArLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNUX1BSRUZJWC50ICAgICAgICAgfCAxMCArKysrKy0tLS0tCisgNCBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAxNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9BbnkucG0gYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQW55LnBtCitpbmRleCA0YzAwMTI5Li4xZWEyMDM1IDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX0FueS5wbQorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX0FueS5wbQorQEAgLTkwMiw4ICs5MDIsNiBAQCBhbGwgUE9EIGZpbGVzIGluIE1BTjFQT0RTIGFuZCBNQU4zUE9EUy4KKyBzdWIgbWFuaWZ5cG9kc190YXJnZXQgeworICAgICBteSgkc2VsZikgPSBzaGlmdDsKKyAKKy0gICAgbXkgJG1hbjFwb2RzICAgICAgPSAnJzsKKy0gICAgbXkgJG1hbjNwb2RzICAgICAgPSAnJzsKKyAgICAgbXkgJGRlcGVuZGVuY2llcyAgPSAnJzsKKyAKKyAgICAgIyBwb3B1bGF0ZSBtYW5YcG9kcyAmIGRlcGVuZGVuY2llczoKK0BAIC05MTksNyArOTE3LDcgQEAgRU5ECisgICAgIGZvcmVhY2ggbXkgJHNlY3Rpb24gKHF3KDEgMykpIHsKKyAgICAgICAgIG15ICRwb2RzID0gJHNlbGYtPnsiTUFOJHtzZWN0aW9ufVBPRFMifTsKKyAgICAgICAgIG15ICRwMm0gPSBzcHJpbnRmIDw8Q01ELCAkXSA+IDUuMDA4ID8gIiAtdSIgOiAiIjsKKy0JXCQoTk9FQ0hPKSBcJChQT0QyTUFOKSAtLXNlY3Rpb249JHNlY3Rpb24gLS1wZXJtX3J3PVwkKFBFUk1fUlcpJXMKKysJXCQoTk9FQ0hPKSBcJChQT0QyTUFOKSAtLXNlY3Rpb249XCQoTUFOJHtzZWN0aW9ufUVYVCkgLS1wZXJtX3J3PVwkKFBFUk1fUlcpJXMKKyBDTUQKKyAgICAgICAgIHB1c2ggQG1hbl9jbWRzLCAkc2VsZi0+c3BsaXRfY29tbWFuZCgkcDJtLCBtYXAgeygkXywkcG9kcy0+eyRffSl9IHNvcnQga2V5cyAlJHBvZHMpOworICAgICB9CitAQCAtMTg3NSw5ICsxODczLDExIEBAIHN1YiBpbml0X0lOU1RBTExfZnJvbV9QUkVGSVggeworICAgICAgICAgJHNlbGYtPntTSVRFUFJFRklYfSAgIHx8PSAkc3ByZWZpeDsKKyAgICAgICAgICRzZWxmLT57VkVORE9SUFJFRklYfSB8fD0gJHZwcmVmaXg7CisgCistICAgICAgICAjIExvdHMgb2YgTU0gZXh0ZW5zaW9uIGF1dGhvcnMgbGlrZSB0byB1c2UgJChQUkVGSVgpIHNvIHdlCistICAgICAgICAjIHB1dCBzb21ldGhpbmcgc2Vuc2libGUgaW4gdGhlcmUgbm8gbWF0dGVyIHdoYXQuCistICAgICAgICAkc2VsZi0+e1BSRUZJWH0gPSAnJCgnLnVjICRzZWxmLT57SU5TVEFMTERJUlN9LidQUkVGSVgpJzsKKysJbXkgJHAgPSAkc2VsZi0+e1BSRUZJWH0gPSAkc2VsZi0+e1BFUkxQUkVGSVh9OworKwlmb3IgbXkgJHQgKHF3L1BFUkwgU0lURSBWRU5ET1IvKQorKwl7CisrCSAgICAkc2VsZi0+eyIke3R9UFJFRklYIn0gPX4gcyFeXFEkcFxFKD89L3wkKSFcJChQUkVGSVgpITsKKysJfQorICAgICB9CisgCisgICAgIG15ICRhcmNoICAgID0gJENvbmZpZ3thcmNobmFtZX07CitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQoraW5kZXggMzkxZGMyMi4uNGE4ZTE0YyAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorQEAgLTMwNzcsOCArMzA3Nyw3IEBAIHN1YiBwcmVmaXhpZnkgeworICAgICB3YXJuICIgIHByZWZpeGlmeSAkdmFyID0+ICRwYXRoXG4iIGlmICRWZXJib3NlID49IDI7CisgICAgIHdhcm4gIiAgICBmcm9tICRzcHJlZml4IHRvICRycHJlZml4XG4iIGlmICRWZXJib3NlID49IDI7CisgCistICAgIGlmKCAkc2VsZi0+e0FSR1N9e1BSRUZJWH0gJiYKKy0gICAgICAgICRwYXRoICF+IHN7XlxRJHNwcmVmaXhcRVxifXskcnByZWZpeH1zICkKKysgICAgaWYoICRwYXRoICF+IHN7XlxRJHNwcmVmaXhcRVxifXskcnByZWZpeH1zICYmICRzZWxmLT57QVJHU317UFJFRklYfSApCisgICAgIHsKKyAKKyAgICAgICAgIHdhcm4gIiAgICBjYW5ub3QgcHJlZml4LCB1c2luZyBkZWZhdWx0LlxuIiBpZiAkVmVyYm9zZSA+PSAyOworZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvSU5TVC50IGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNULnQKK2luZGV4IDkxMDU4YmIuLmUzOTljZWQgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1QudAorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNULnQKK0BAIC02NSw5ICs2NSw3IEBAIGlzYV9vayggJG1tLCAnRXh0VXRpbHM6Ok1ha2VNYWtlcicgKTsKKyBpcyggJG1tLT57TkFNRX0sICdCaWc6OkR1bW15JywgICdOQU1FJyApOworIGlzKCAkbW0tPntWRVJTSU9OfSwgMC4wMSwgICAgICAgICAgICAnVkVSU0lPTicgKTsKKyAKKy1teSAkY29uZmlnX3ByZWZpeCA9ICRDb25maWd7aW5zdGFsbHByZWZpeGV4cH0gfHwgJENvbmZpZ3tpbnN0YWxscHJlZml4fSB8fAorLSAgICAgICAgICAgICAgICAgICAgJENvbmZpZ3twcmVmaXhleHB9ICAgICAgICB8fCAkQ29uZmlne3ByZWZpeH07CistaXMoICRtbS0+e1BFUkxQUkVGSVh9LCAkY29uZmlnX3ByZWZpeCwgICAnUEVSTFBSRUZJWCcgKTsKKytpcyggJG1tLT57UEVSTFBSRUZJWH0sICckKFBSRUZJWCknLCAgICdQRVJMUFJFRklYJyApOworIAorIGlzKCAhISRtbS0+e1BFUkxfQ09SRX0sICEhJEVOVntQRVJMX0NPUkV9LCAnUEVSTF9DT1JFJyApOworIAorZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvSU5TVF9QUkVGSVgudCBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvSU5TVF9QUkVGSVgudAoraW5kZXggZThkZTdjNi4uM2ZiM2YxMiAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvSU5TVF9QUkVGSVgudAorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNUX1BSRUZJWC50CitAQCAtMTAsNyArMTAsNyBAQCBCRUdJTiB7CisgfQorIAorIHVzZSBzdHJpY3Q7CistdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gNTI7CisrdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gNDc7CisgdXNlIE1ha2VNYWtlcjo6VGVzdDo6VXRpbHM7CisgdXNlIE1ha2VNYWtlcjo6VGVzdDo6U2V0dXA6OkJGRDsKKyB1c2UgRXh0VXRpbHM6Ok1ha2VNYWtlcjsKK0BAIC02MiwxNiArNjIsMTYgQEAgbGlrZSggJHN0ZG91dC0+cmVhZCwgcXJ7CisgICAgICAgICAgICAgICAgICAgICAgICAgKD86V3JpdGluZ1wgTVlNRVRBLnltbFwgYW5kXCBNWU1FVEEuanNvblxuKT8KKyB9eCApOworIAorLWlzKCAkbW0tPntQUkVGSVh9LCAnJChTSVRFUFJFRklYKScsICdQUkVGSVggc2V0IGJhc2VkIG9uIElOU1RBTExESVJTJyApOworKyNpcyggJG1tLT57UFJFRklYfSwgJyQoU0lURVBSRUZJWCknLCAnUFJFRklYIHNldCBiYXNlZCBvbiBJTlNUQUxMRElSUycgKTsKKyAKKyBpc2Ffb2soICRtbSwgJ0V4dFV0aWxzOjpNYWtlTWFrZXInICk7CisgCisgaXMoICRtbS0+e05BTUV9LCAnQmlnOjpEdW1teScsICAnTkFNRScgKTsKKyBpcyggJG1tLT57VkVSU0lPTn0sIDAuMDEsICAgICAgICAgICAgJ1ZFUlNJT04nICk7CisgCistZm9yZWFjaCBteSAkcHJlZml4IChxdyhQUkVGSVggUEVSTFBSRUZJWCBTSVRFUFJFRklYIFZFTkRPUlBSRUZJWCkpIHsKKy0gICAgdW5saWtlKCAkbW0tPnskcHJlZml4fSwgcXIvXCRcKFBSRUZJWFwpLyApOworLX0KKysjZm9yZWFjaCBteSAkcHJlZml4IChxdyhQUkVGSVggUEVSTFBSRUZJWCBTSVRFUFJFRklYIFZFTkRPUlBSRUZJWCkpIHsKKysjICAgIHVubGlrZSggJG1tLT57JHByZWZpeH0sIHFyL1wkXChQUkVGSVhcKS8gKTsKKysjfQorIAorIAorIG15ICRQUkVGSVggPSBGaWxlOjpTcGVjLT5jYXRkaXIoJ2ZvbycsICdiYXInKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcHJ1bmVfbGlicy5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wcnVuZV9saWJzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ0NDNmNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcHJ1bmVfbGlicy5kaWZmCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gMjFiYzAzMzc1NWYwYjYwOWY5YmIyYWE5ZTk4YjEwZDU4NDI0NDA2ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogRnJpLCAxOCBNYXIgMjAwNSAyMjoyMjoyNSArMTEwMAorU3ViamVjdDogUHJ1bmUgdGhlIGxpc3Qgb2YgbGlicmFyaWVzIHdhbnRlZCB0byB3aGF0IHdlIGFjdHVhbGx5IG5lZWQuCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvMTI4MzU1CisKK1dlIHdhbnQgdG8ga2VlcCB0aGUgZGVwZW5kZW5jaWVzIG9uIHBlcmwtYmFzZSBhcyBzbWFsbCBhcyBwb3NzaWJsZSwKK2FuZCBzb21lIG9mIHRoZSBvcmlnaW5hbCBsaXN0IG1heSBiZSBwcmVzZW50IG9uIGJ1aWxkZHMgKHNlZSBCdWcjMTI4MzU1KS4KKworUGF0Y2gtTmFtZTogZGViaWFuL3BydW5lX2xpYnMuZGlmZgorLS0tCisgQ29uZmlndXJlIHwgNSArKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9Db25maWd1cmUgYi9Db25maWd1cmUKK2luZGV4IDBhNDA1ZDMuLjZmY2MzYmMgMTAwNzU1CistLS0gYS9Db25maWd1cmUKKysrKyBiL0NvbmZpZ3VyZQorQEAgLTE0NTQsOCArMTQ1NCw3IEBAIGxpYnN3YW50ZWRfdXNlbGFyZ2VmaWxlcz0nJworIDogc2V0IHVzZXNvY2tzIG9uIHRoZSBDb25maWd1cmUgY29tbWFuZCBsaW5lIHRvIGVuYWJsZSBzb2Nrcy4KKyA6IExpc3Qgb2YgbGlicmFyaWVzIHdlIHdhbnQuCisgOiBJZiBhbnlvbmUgbmVlZHMgZXh0cmEgLWx4eHgsIHB1dCB0aG9zZSBpbiBhIGhpbnQgZmlsZS4KKy1saWJzd2FudGVkPSJjbCBwdGhyZWFkIHNvY2tldCBiaW5kIGluZXQgbnNsIG5tIG5kYm0gZ2RibSBkYm0gZGIgbWFsbG9jIGRsIGxkIgorLWxpYnN3YW50ZWQ9IiRsaWJzd2FudGVkIHN1biBtIGNyeXB0IHNlYyB1dGlsIGMgY3Bvc2l4IHBvc2l4IHVjYiBic2QgQlNEIgorK2xpYnN3YW50ZWQ9J2dkYm0gZ2RibV9jb21wYXQgZGIgZGwgbSBjIGNyeXB0JworIDogV2UgcHJvYmFibHkgd2FudCB0byBzZWFyY2ggL3Vzci9zaGxpYiBiZWZvcmUgbW9zdCBvdGhlciBsaWJyYXJpZXMuCisgOiBUaGlzIGlzIG9ubHkgdXNlZCBieSB0aGUgbGliL0V4dFV0aWxzL01ha2VNYWtlci5wbSByb3V0aW5lIGV4dGxpYmxpc3QuCisgZ2xpYnB0aD1gZWNobyAiICRnbGlicHRoICIgfCBzZWQgLWUgJ3MhIC91c3Ivc2hsaWIgISAhJ2AKK0BAIC0yMzU5Myw3ICsyMzU5Miw3IEBAIHN1bm9zKlg0KikKKyAgICAgOzsKKyAqKSBjYXNlICIkdXNlZGwiIGluCisgICAgICRkZWZpbmV8dHJ1ZXxbeVldKikKKy0JICAgIHNldCBYIGBlY2hvICIgJGxpYnMgIiB8IHNlZCAtZSAnc0AgLWxuZGJtIEAgQCcgLWUgJ3NAIC1sZ2RibSBAIEAnIC1lICdzQCAtbGdkYm1fY29tcGF0IEAgQCcgLWUgJ3NAIC1sZGJtIEAgQCcgLWUgJ3NAIC1sZGIgQCBAJ2AKKysJICAgIHNldCBYIGBlY2hvICIgJGxpYnMgIiB8IHNlZCAtZSAnc0AgLWxnZGJtIEAgQCcgLWUgJ3NAIC1sZ2RibV9jb21wYXQgQCBAJyAtZSAnc0AgLWxkYiBAIEAnYAorIAkgICAgc2hpZnQKKyAJICAgIHBlcmxsaWJzPSIkKiIKKyAJICAgIDs7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3JlZ2VuLXNraXAuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcmVnZW4tc2tpcC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhM2ZjOTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3JlZ2VuLXNraXAuZGlmZgpAQCAtMCwwICsxLDI3IEBACitGcm9tIGNiM2U5OGUxN2E2NjY4OTYxNTBiMTA5Njk0ZTllYjkyNzg2MjA4NDUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CitEYXRlOiBTYXQsIDE3IE1heSAyMDE0IDE0OjU3OjAxICswMzAwCitTdWJqZWN0OiBTa2lwIGEgcmVnZW5lcmF0aW9uIGNoZWNrIGluIHVucmVsYXRlZCBnaXQgcmVwb3NpdG9yaWVzCisKK0lmIHRoZSB0ZXN0IGlzIHJ1biBpbiBhIGdpdCByZXBvc2l0b3J5IHdpdGhvdXQgbGliLy5naXRpZ25vcmUsCitmb3IgaW5zdGFuY2UgYmVjYXVzZSB0aGUgcmVwb3NpdG9yeSBvbmx5IGltcG9ydGVkIHRoZSBQZXJsIHRhcmJhbGwsCit0aGUgcmVnZW5lcmF0aW9uIGNoZWNrIGlzIGJyb2tlbiBiZWNhdXNlIGxpYi8uZ2l0aWdub3JlIGlzIG1pc3NpbmcuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9yZWdlbi1za2lwLmRpZmYKKy0tLQorIHJlZ2VuL2xpYl9jbGVhbnVwLnBsIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvcmVnZW4vbGliX2NsZWFudXAucGwgYi9yZWdlbi9saWJfY2xlYW51cC5wbAoraW5kZXggYzlkNmU0My4uZmVjZTFlZCAxMDA2NDQKKy0tLSBhL3JlZ2VuL2xpYl9jbGVhbnVwLnBsCisrKysgYi9yZWdlbi9saWJfY2xlYW51cC5wbAorQEAgLTE1OSw3ICsxNTksNyBAQCBmb3JlYWNoICgnd2luMzIvTWFrZWZpbGUnLCAnd2luMzIvbWFrZWZpbGUubWsnKSB7CisgfQorIAorICMgVGhpcyBtdXN0IGNvbWUgbGFzdCBhcyBpdCBjYW4gZXhpdCBlYXJseToKKy1pZiAoJFRBUCAmJiAhLWQgJy5naXQnICYmICEtZiAnbGliLy5naXRpZ25vcmUnKSB7CisraWYgKCRUQVAgJiYgIS1kICcuZ2l0JyB8fCAhLWYgJ2xpYi8uZ2l0aWdub3JlJykgeworICAgICBwcmludCAib2sgIyBza2lwIG5vdCBiZWluZyBydW4gZnJvbSBhIGdpdCBjaGVja291dCwgaGVuY2Ugbm8gbGliLy5naXRpZ25vcmVcbiI7CisgICAgIGV4aXQgMDsKKyB9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3NraXAta2ZyZWVic2QtY3Jhc2guZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vc2tpcC1rZnJlZWJzZC1jcmFzaC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZmMwYmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3NraXAta2ZyZWVic2QtY3Jhc2guZGlmZgpAQCAtMCwwICsxLDQwIEBACitGcm9tIDQyODUzYWY2NWEyODA2NmIxMTlkMjNkOTZlOTY0ZTk0YjU1YTg1NDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CitEYXRlOiBGcmksIDUgQXVnIDIwMTEgMTA6NTA6MTggKzAzMDAKK1N1YmplY3Q6IFNraXAgYSBjcmFzaGluZyB0ZXN0IGNhc2UgaW4gdC9vcC90aHJlYWRzLnQgb24gR05VL2tGcmVlQlNECisKK0J1ZzogaHR0cDovL3J0LnBlcmwub3JnL3J0My9UaWNrZXQvRGlzcGxheS5odG1sP2lkPTk2MjcyCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzYyODQ5MworCitUaGUgY3Jhc2ggaXMgbm90IGEgcmVncmVzc2lvbiBpbiA1LjE0LCBpdCBqdXN0IGdldHMgdHJpZ2dlcmVkIHRoZXJlIGJ5CithIG5ldyB1bnJlbGF0ZWQgdGVzdCBjYXNlLgorCitTa2lwIHRoZSB0ZXN0IHVudGlsIHRoZSBjdWxwcml0IGlzIGZvdW5kLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vc2tpcC1rZnJlZWJzZC1jcmFzaC5kaWZmCistLS0KKyB0L29wL3RocmVhZHMudCB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3Qvb3AvdGhyZWFkcy50IGIvdC9vcC90aHJlYWRzLnQKK2luZGV4IGU3NmM5NTYuLmJlYzIxMGIgMTAwNjQ0CistLS0gYS90L29wL3RocmVhZHMudAorKysrIGIvdC9vcC90aHJlYWRzLnQKK0BAIC0zNzYsNiArMzc2LDkgQEAgRU9GCisgfQorIAorIAorK1NLSVA6IHsKKysgICAgc2tpcCAiW3BlcmwgIzk2MjcyXSBhdm9pZCBjcmFzaCBvbiBHTlUva0ZyZWVCU0QiLCAxCisrICAgICAgICBpZiAkXk8gZXEgJ2dudWtmcmVlYnNkJzsKKyAjIFtwZXJsICM3ODQ5NF0gUGlwZXMgc2hhcmVkIGJldHdlZW4gdGhyZWFkcyBibG9jayB3aGVuIGNsb3NlZAorIHsKKyAgIG15ICRwZXJsID0gd2hpY2hfcGVybDsKK0BAIC0zODQsNiArMzg3LDcgQEAgRU9GCisgICB0aHJlYWRzLT5jcmVhdGUoc3ViIHsgfSktPmpvaW47CisgICBvaygxLCAiUGlwZXMgc2hhcmVkIGJldHdlZW4gdGhyZWFkcyBkbyBub3QgYmxvY2sgd2hlbiBjbG9zZWQiKTsKKyB9CisrfQorIAorICMgW3BlcmwgIzEwNTIwOF0gVHlwZWdsb2IgY2xvbmVzIHNob3VsZCBub3QgYmUgY2xvbmVkIGFnYWluIGR1cmluZyBhIGpvaW4KKyB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3NraXAtdXBzdHJlYW0tZ2l0LXRlc3RzLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3NraXAtdXBzdHJlYW0tZ2l0LXRlc3RzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM4NzEwNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vc2tpcC11cHN0cmVhbS1naXQtdGVzdHMuZGlmZgpAQCAtMCwwICsxLDI4IEBACitGcm9tIGFlOWI2NDVkNmRhMjk5MGZkMDU1MzY4ZWNhMmM2N2M0NDk0NzRlMzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CitEYXRlOiBGcmksIDIyIEFwciAyMDExIDExOjE1OjMyICswMzAwCitTdWJqZWN0OiBTa2lwIHRlc3RzIHNwZWNpZmljIHRvIHRoZSB1cHN0cmVhbSBHaXQgcmVwb3NpdG9yeQorCitUaGVzZSB0ZXN0cyBmYWlsIGlmIHJ1biBmcm9tIGEgZGlmZmVyZW50IGdpdCByZXBvc2l0b3J5IHRoYW4KK3Vwc3RyZWFtLiBUaGlzIGNvbXBsaWNhdGVzIHRoaW5ncyBuZWVkbGVzc2x5IGZvciBkb3duc3RyZWFtIHBhY2thZ2Vycy4KKworU2tpcCB0aGUgdGVzdHMgYWx0b2dldGhlciBldmVuIGlmIHRoZSAuZ2l0IGRpcmVjdG9yeSBleGlzdHMuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9za2lwLXVwc3RyZWFtLWdpdC10ZXN0cy5kaWZmCistLS0KKyB0L3Rlc3QucGwgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS90L3Rlc3QucGwgYi90L3Rlc3QucGwKK2luZGV4IGNkYTM4NDAuLmFmNTc5YTIgMTAwNjQ0CistLS0gYS90L3Rlc3QucGwKKysrKyBiL3QvdGVzdC5wbAorQEAgLTE3NCw3ICsxNzQsNyBAQCBzdWIgc2tpcF9hbGxfd2l0aG91dF91bmljb2RlX3RhYmxlcyB7ICMgKGJ1dCBvbmx5IHVuZGVyIG1pbmlwZXJsKQorIAorIHN1YiBmaW5kX2dpdF9vcl9za2lwIHsKKyAgICAgbXkgKCRzb3VyY2VfZGlyLCAkcmVhc29uKTsKKy0gICAgaWYgKC1kICcuZ2l0JykgeworKyAgICBpZiAoLWQgJy5naXQnICYmICEgLWQgJ2RlYmlhbicpIHsKKyAJJHNvdXJjZV9kaXIgPSAnLic7CisgICAgIH0gZWxzaWYgKC1sICdNQU5JRkVTVCcgJiYgLWwgJ0FVVEhPUlMnKSB7CisgCW15ICR3aGVyZSA9IHJlYWRsaW5rICdNQU5JRkVTVCc7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3NxdWVsY2gtbG9jYWxlLXdhcm5pbmdzLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3NxdWVsY2gtbG9jYWxlLXdhcm5pbmdzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IzMTQ1NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vc3F1ZWxjaC1sb2NhbGUtd2FybmluZ3MuZGlmZgpAQCAtMCwwICsxLDU2IEBACitGcm9tIDQ4N2E2ZDZhZGEwYjA4ZTZhNzI3NjUyMGViYzYxY2Q4NTEwMDVlN2MgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CitEYXRlOiBTdW4sIDMgT2N0IDIwMTAgMjE6MzY6MTcgKzAzMDAKK1N1YmplY3Q6IFNxdWVsY2ggbG9jYWxlIHdhcm5pbmdzIGluIERlYmlhbiBwYWNrYWdlIG1haW50YWluZXIgc2NyaXB0cworCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzUwODc2NAorCitUaGUgc3lzdGVtIGxvY2FsZXMgYXJlIHJhdGhlciBmcmVxdWVudGx5IG91dCBvZiBzeW5jIHdpdGggdGhlIEMgbGlicmFyeQorZHVyaW5nIHBhY2thZ2UgdXBncmFkZXMsIGNhdXNpbmcgYSBodWdlIGFtb3VudCBvZiB1c2VsZXNzIFBlcmwgbG9jYWxlCit3YXJuaW5ncy4gU3F1ZWxjaCB0aGVtIHdoZW4gcnVubmluZyBwYWNrYWdlIG1haW50YWluZXIgc2NyaXB0cywgZGV0ZWN0ZWQKK2J5IHRoZSBEUEtHX1JVTk5JTkdfVkVSU0lPTiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworQW55IHJlYWwgbG9jYWxlIHByb2JsZW0gd2lsbCBzaG93IHVwIGFmdGVyIHRoZSBzeXN0ZW0gdXBncmFkZSB0b28sIGFuZAordGhlIHdhcm5pbmcgd2lsbCBiZSB0cmlnZ2VyZWQgbm9ybWFsbHkgYWdhaW4gYXQgdGhhdCBwb2ludC4KKworUGF0Y2gtTmFtZTogZGViaWFuL3NxdWVsY2gtbG9jYWxlLXdhcm5pbmdzLmRpZmYKKy0tLQorIGxvY2FsZS5jICAgICAgICAgICB8IDUgKysrKy0KKyBwb2QvcGVybGxvY2FsZS5wb2QgfCA4ICsrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9sb2NhbGUuYyBiL2xvY2FsZS5jCitpbmRleCA3YTRhNDE4Li5mZGY5MTFkIDEwMDY0NAorLS0tIGEvbG9jYWxlLmMKKysrKyBiL2xvY2FsZS5jCitAQCAtNjc0LDcgKzY3NCwxMCBAQCBQZXJsX2luaXRfaTE4bmwxMG4ocFRIWF8gaW50IHByaW50d2FybikKKyAKKyAgICAgY29uc3QgYm9vbCBsb2N3YXJuID0gKHByaW50d2FybiA+IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChwcmludHdhcm4KKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoISBiYWRfbGFuZ191c2Vfb25jZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGViaWFuIHNwZWNpZmljIGNoYW5nZSAtIHNlZSBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzUwODc2NCAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghUGVybEVudl9nZXRlbnYoIkRQS0dfUlVOTklOR19WRVJTSU9OIikpICYmCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCEgYmFkX2xhbmdfdXNlX29uY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2FsbG93IHdpdGggIiIgb3IgIjAiICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmJhZF9sYW5nX3VzZV9vbmNlCitkaWZmIC0tZ2l0IGEvcG9kL3Blcmxsb2NhbGUucG9kIGIvcG9kL3Blcmxsb2NhbGUucG9kCitpbmRleCA3MDFiNDIyLi41OGNhYmFmIDEwMDY0NAorLS0tIGEvcG9kL3Blcmxsb2NhbGUucG9kCisrKysgYi9wb2QvcGVybGxvY2FsZS5wb2QKK0BAIC0xMjE3LDYgKzEyMTcsMTQgQEAgQjxOT1RFPjogQzxQRVJMX0JBRExBTkc+IG9ubHkgZ2l2ZXMgeW91IGEgd2F5IHRvIGhpZGUgdGhlIHdhcm5pbmcgbWVzc2FnZS4KKyBUaGUgbWVzc2FnZSB0ZWxscyBhYm91dCBzb21lIHByb2JsZW0gaW4geW91ciBzeXN0ZW0ncyBsb2NhbGUgc3VwcG9ydCwKKyBhbmQgeW91IHNob3VsZCBpbnZlc3RpZ2F0ZSB3aGF0IHRoZSBwcm9ibGVtIGlzLgorIAorKz1pdGVtIERQS0dfUlVOTklOR19WRVJTSU9OCisrCisrT24gRGViaWFuIHN5c3RlbXMsIGlmIHRoZSBEUEtHX1JVTk5JTkdfVkVSU0lPTiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcworK3NldCAodG8gYW55IHZhbHVlKSwgdGhlIGxvY2FsZSBmYWlsdXJlIHdhcm5pbmdzIHdpbGwgYmUgc3VwcHJlc3NlZCBqdXN0CisrbGlrZSB3aXRoIGEgemVybyBQRVJMX0JBRExBTkcgc2V0dGluZy4gVGhpcyBpcyBkb25lIHRvIGF2b2lkIGZsb29kcworK29mIHNwdXJpb3VzIHdhcm5pbmdzIGR1cmluZyBzeXN0ZW0gdXBncmFkZXMuCisrU2VlIEw8aHR0cDovL2J1Z3MuZGViaWFuLm9yZy81MDg3NjQ+LgorKworID1iYWNrCisgCisgVGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG5vdCBzcGVjaWZpYyB0byBQZXJsOiBUaGV5IGFyZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi93cml0YWJsZV9zaXRlX2RpcnMuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vd3JpdGFibGVfc2l0ZV9kaXJzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNhZGMyZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vd3JpdGFibGVfc2l0ZV9kaXJzLmRpZmYKQEAgLTAsMCArMSwzNiBAQAorRnJvbSA1OTFjMWY5YjdkNDc1NWJmYzU5ZDk2NjViYWIxZjJjYTQxMGRlNzY1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBUdWUsIDggTWFyIDIwMDUgMTk6MzA6MzggKzExMDAKK1N1YmplY3Q6IFNldCB1bWFzayBhcHByb3Byb2F0ZWx5IGZvciBzaXRlIGluc3RhbGwgZGlyZWN0b3JpZXMKKworUG9saWN5IHJlcXVpcmVzIGdyb3VwIHdyaXRhYmxlIHNpdGUgZGlyZWN0b3JpZXMKKworUGF0Y2gtTmFtZTogZGViaWFuL3dyaXRhYmxlX3NpdGVfZGlycy5kaWZmCistLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSB8IDYgKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KK2luZGV4IDE5N2YxMDIuLjVmMWI4N2YgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KK0BAIC0yMTM4LDcgKzIxMzgsNyBAQCBxewkJIiQoSU5TVF9MSUIpIiAiJChERVNUSU5TVEFMTFBSSVZMSUIpIiBcCisgCisgCisgcHVyZV9zaXRlX2luc3RhbGwgOjogYWxsCistCSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoTU9EX0lOU1RBTEwpIFwKKysJJChOT0VDSE8pIHVtYXNrIDAyOyAkKE1PRF9JTlNUQUxMKSBcCisgfTsKKyAgICAgcHVzaCBAbSwKKyBxewkJcmVhZCAifS4kc2VsZi0+Y2F0ZmlsZSgnJChTSVRFQVJDSEVYUCknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IiBcCitAQCAtMjE5OSw4ICsyMTk5LDggQEAgZG9jX3BlcmxfaW5zdGFsbCA6OiBhbGwKKyAKKyBkb2Nfc2l0ZV9pbnN0YWxsIDo6IGFsbAorIAkkKE5PRUNITykgJChFQ0hPKSBBcHBlbmRpbmcgaW5zdGFsbGF0aW9uIGluZm8gdG8gIiQoREVTVElOU1RBTExBUkNITElCKS9wZXJsbG9jYWwucG9kIgorLQktJChOT0VDSE8pIHVtYXNrIDAyMjsgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMQVJDSExJQikiCistCS0kKE5PRUNITykgdW1hc2sgMDIyOyAkKERPQ19JTlNUQUxMKSBcCisrCS0kKE5PRUNITykgdW1hc2sgMDI7ICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorKwktJChOT0VDSE8pIHVtYXNrIDAyOyAkKERPQ19JTlNUQUxMKSBcCisgCQkiTW9kdWxlIiAiJChOQU1FKSIgXAorIAkJImluc3RhbGxlZCBpbnRvIiAkKElOU1RBTExTSVRFTElCKSBcCisgCQlMSU5LVFlQRSAiJChMSU5LVFlQRSkiIFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9keW5hbG9hZGVyaGFjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9keW5hbG9hZGVyaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGY1OTMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2R5bmFsb2FkZXJoYWNrLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK0hhY2sgdGhlIGR5bmFtaWMgbW9kdWxlIGxvYWRlciBzbyB0aGF0IHdlIHVzZSBuYXRpdmUgbW9kdWxlcyBzaW5jZSB3ZSBjYW4ndCBsb2FkCit0aGUgdGFyZ2V0IG9uZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitSUAorMjAxMy8wMS8xMworCitJbmRleDogcGVybC01LjE0LjIvZXh0L0R5bmFMb2FkZXIvRHluYUxvYWRlcl9wbS5QTAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBlcmwtNS4xNC4yLm9yaWcvZXh0L0R5bmFMb2FkZXIvRHluYUxvYWRlcl9wbS5QTAkyMDExLTA5LTE5IDEzOjE4OjIyLjAwMDAwMDAwMCArMDAwMAorKysrIHBlcmwtNS4xNC4yL2V4dC9EeW5hTG9hZGVyL0R5bmFMb2FkZXJfcG0uUEwJMjAxMy0wMS0xOSAxNjowOTo1MS4wMjA1ODQ5NDUgKzAwMDAKK0BAIC0zMTAsNiArMzEwLDEwIEBACisgICAgIGZvcmVhY2ggKEBJTkMpIHsKKyAJPDwkXk8tZXEtVk1TPj5jaG9wKCRfID0gVk1TOjpGaWxlc3BlYzo6dW5peHBhdGgoJF8pKTs8PC8kXk8tZXEtVk1TPj4KKyAJICAgIG15ICRkaXIgPSAiJF8vYXV0by8kbW9kcG5hbWUiOworKworKwlpZiAoZGVmaW5lZCAkRU5We1BFUkxfTElCfSBhbmQgZGVmaW5lZCAkRU5We1BFUkxIT1NUTElCfSkgeworKwkgICAgJGRpciA9fiBzLyRFTlZ7UEVSTF9MSUJ9LyRFTlZ7UEVSTEhPU1RMSUJ9L2c7CisrCX0KKyAJCisgCW5leHQgdW5sZXNzIC1kICRkaXI7ICMgc2tpcCBvdmVyIHVuaW50ZXJlc3RpbmcgZGlyZWN0b3JpZXMKKyAJCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZXh0LU9EQk1fRmlsZS1oaW50cy1saW51eC5wbC1saW5rLWxpYmdkYm1fY29tcGF0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2V4dC1PREJNX0ZpbGUtaGludHMtbGludXgucGwtbGluay1saWJnZGJtX2NvbXBhdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTRlZjcwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2V4dC1PREJNX0ZpbGUtaGludHMtbGludXgucGwtbGluay1saWJnZGJtX2NvbXBhdC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIGJhNGVkMGI1YjdiYWFkNTM1M2MxZTY1YjY1NWY0MWQ0NWUwMWM5OTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjIgSnVuIDIwMTUgMjA6MDA6MTEgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gZXh0L09EQk1fRmlsZS9oaW50cy9saW51eC5wbDogbGluayBsaWJnZGJtX2NvbXBhdAorCitGaXhlZCBmb3IgdGVzdCBjYXNlIC4uL2V4dC9PREJNX0ZpbGUvdC9vZGJtLnQ6CitvayAxIC0gdXNlIE9EQk1fRmlsZTsKK29rIDIgLSB1c2UgRmNudGw7CisuL3Blcmw6IHN5bWJvbCBsb29rdXAgZXJyb3I6IC91c3IvbGliL3BlcmwvNS4yMi4wL2F1dG8vT0RCTV9GaWxlL09EQk1fRmlsZS5zbzogdW5kZWZpbmVkIHN5bWJvbDogZGJtaW5pdAorCitUaGUgY2hlY2tpbmcgImlmIC1lICRfLicvbGliZ2RibV9jb21wYXQuc28nIiBkb2Vzbid0IHdvcmsgd2hlbiBjcm9zcworYnVpbGQsIHNvIGFsd2F5cyBsaW5rIGxpYmdkYm1fY29tcGF0LCBzaW5jZSBwZXJsIGRlcGVuZHMgb24gZ2RibSBhbmQgd2UKK2Fsd2F5cyBoYXZlIGxpYmdkYm1fY29tcGF0LgorCitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgZXh0L09EQk1fRmlsZS9oaW50cy9saW51eC5wbCB8ICAgIDYgLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9leHQvT0RCTV9GaWxlL2hpbnRzL2xpbnV4LnBsIGIvZXh0L09EQk1fRmlsZS9oaW50cy9saW51eC5wbAoraW5kZXggMjA0YmJhMC4uOTI3MWI0NSAxMDA2NDQKKy0tLSBhL2V4dC9PREJNX0ZpbGUvaGludHMvbGludXgucGwKKysrKyBiL2V4dC9PREJNX0ZpbGUvaGludHMvbGludXgucGwKK0BAIC0xLDggKzEsMiBAQAorICMgdXNlcyBHREJNIGRibSBjb21wYXRpYmlsaXR5IGZlYXR1cmUgLSBhdCBsZWFzdCBvbiBTdVNFIDguMAorLSRzZWxmLT57TElCU30gPSBbJy1sZ2RibSddOworLQorLSMgRGViaWFuL1VidW50dSBoYXZlIGxpYmdkYm1fY29tcGF0LnNvIGJ1dCBub3QgdGhpcyBmaWxlLAorLSMgc28gbGlua2luZyBtYXkgZmFpbAorLWZvcmVhY2ggKHNwbGl0IC8gLywgJENvbmZpZ3tsaWJwdGh9KSB7CistICAgICRzZWxmLT57TElCU30tPlswXSAuPSAnIC1sZ2RibV9jb21wYXQnIGlmIC1lICRfLicvbGliZ2RibV9jb21wYXQuc28nOworLX0KKyskc2VsZi0+e0xJQlN9ID0gWyctbGdkYm0gLWxnZGJtX2NvbXBhdCddOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2V4dC1PREJNX0ZpbGUtdC1vZGJtLnQtZml4LXRoZS1wYXRoLW9mLWRibXRfY29tbW9uLnAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZXh0LU9EQk1fRmlsZS10LW9kYm0udC1maXgtdGhlLXBhdGgtb2YtZGJtdF9jb21tb24ucC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjA1Yjg3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2V4dC1PREJNX0ZpbGUtdC1vZGJtLnQtZml4LXRoZS1wYXRoLW9mLWRibXRfY29tbW9uLnAucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSBiODQyZTFkZTc3OThhMWY3ZGY3NzBiYjNmMTg1YWQzMzU2ZTQ5MGU2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDIyIEp1biAyMDE1IDIwOjA2OjU2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGV4dC9PREJNX0ZpbGUvdC9vZGJtLnQ6IGZpeCB0aGUgIHBhdGggb2YgZGJtdF9jb21tb24ucGwKKworSXQgc2hvdWxkIGJlIGxpYi9kYm10X2NvbW1vbi5wbCB3aGVuIHJ1biBieSBydW4tcHRlc3QuCisKK0ZpeGVkOgorQ2FuJ3QgbG9jYXRlIC4uLy4uL3QvbGliL2RibXRfY29tbW9uLnBsIGluIEBJTkMKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBleHQvT0RCTV9GaWxlL3Qvb2RibS50IHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZXh0L09EQk1fRmlsZS90L29kYm0udCBiL2V4dC9PREJNX0ZpbGUvdC9vZGJtLnQKK2luZGV4IDA3OWI5ZjEuLjI1MGI5OTEgMTAwNjQ0CistLS0gYS9leHQvT0RCTV9GaWxlL3Qvb2RibS50CisrKysgYi9leHQvT0RCTV9GaWxlL3Qvb2RibS50CitAQCAtMiw3ICsyLDcgQEAKKyAKKyBvdXIgJERCTV9DbGFzcyA9ICdPREJNX0ZpbGUnOworIAorLXJlcXVpcmUgJy4uLy4uL3QvbGliL2RibXRfY29tbW9uLnBsJzsKKytyZXF1aXJlICdsaWIvZGJtdF9jb21tb24ucGwnOworIAorIGlmICgkXk8gZXEgJ2hwdXgnKSB7CisgICAgIHByaW50IDw8RU9NOworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9maXhfYmFkX3JwYXRoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2ZpeF9iYWRfcnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlhYzQzNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9maXhfYmFkX3JwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDExLzA3LzAxCisKK0ZpeCB0aGVzZSBQYWNrYWdlIFFBIHdhcm5pbmdzIGJlZm9yZSB0aGV5IGFyZSBjb252ZXJ0ZWQgaW50byBmZXRhbCBlcnJvcnM6CisKK1dBUk5JTkc6IFFBIElzc3VlOiBwYWNrYWdlIHBlcmwtbW9kdWxlLWNvbXByZXNzIGNvbnRhaW5zIGJhZCBSUEFUSCAvYnVpbGRfZGlzay9wb2t5X2J1aWxkL2J1aWxkMC90bXAvc3lzcm9vdHMvcWVtdXg4Ni91c3IvbGliIGluIGZpbGUgL2J1aWxkX2Rpc2svcG9reV9idWlsZC9idWlsZDAvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3BlcmwtNS4xMi4zLXIxL3BhY2thZ2VzLXNwbGl0L3BlcmwtbW9kdWxlLWNvbXByZXNzL3Vzci9saWIvcGVybC81LjEyLjMvYXV0by9Db21wcmVzcy9SYXcvWmxpYi9abGliLnNvCisKK1RoaXMgZml4ZXMgdGhpcyB3YXJuaW5nIGZvciBwZXJsIHJlY2lwZSBhcyB3ZWxsIGFzIGxpYnhtbC1wYXJzZXItcGVybCByZWNpcGUuIAorSXQgaXMgYSBmaXggdG8gTWFrZU1ha2VyIHdpdGhpbiBwZXJsLCBzbyBhbGwgc3VjaCBwZXJsIHJlY2lwZXMgd2lsbCBnZXQgCitmaXhlZCB3aXRoIHRoaXMgcGVybCBmaXguCisKK0luZGV4OiBwZXJsLTUuMTQuMi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC9LaWQucG0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTQuMi5vcmlnL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbQorKysrIHBlcmwtNS4xNC4yL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbQorQEAgLTU1LDYgKzU1LDcgQEAgc3ViIF91bml4X29zMl9leHQgeworICAgICBteSgkZm91bmQpID0gMDsKKyAKKyAgICAgIyBEZWJpYW4tc3BlY2lmaWM6IGRvbid0IHVzZSBMRF9SVU5fUEFUSCBmb3Igc3RhbmRhcmQgZGlycworKyAgICBwdXNoKEBsaWJwYXRoLCAiU1lTUk9PVExJQiIpOworICAgICAkbGRfcnVuX3BhdGhfc2VlbnskX30rKyBmb3IgQGxpYnBhdGg7CisgCisgICAgIGZvcmVhY2ggbXkgJHRoaXNsaWIgKHNwbGl0ICcgJywgJHBvdGVudGlhbF9saWJzKSB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZ2VuZXJhdGUtc2gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZ2VuZXJhdGUtc2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdmNmU2OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9nZW5lcmF0ZS1zaC5wYXRjaApAQCAtMCwwICsxLDU2IEBACitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1VzZSB0aGUgbGQgZmxhZ3MgZnJvbSB0aGUgc3VwcGxpZWQgY29uZmlndXJhdGlvbiBmaWxlLiBGb3Igc2ggd2UgbmVlZCB0aGUKK2ZsYWdzIHRoYXQgc3BlY2lmeSB0byBidWlsZCBQSUMgY29kZSBzbyB0aGF0IHRoZSBzaGFyZWQgbGlicmFyaWVzIHdvcmsuCisKK0luZGV4OiBwZXJsLTUuMTQuMi9Dcm9zcy9nZW5lcmF0ZV9jb25maWdfc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTQuMi5vcmlnL0Nyb3NzL2dlbmVyYXRlX2NvbmZpZ19zaAkyMDEwLTEyLTMwIDA0OjA3OjE0LjAwMDAwMDAwMCArMDIwMAorKysrIHBlcmwtNS4xNC4yL0Nyb3NzL2dlbmVyYXRlX2NvbmZpZ19zaAkyMDEyLTExLTIyIDE1OjU4OjQ5Ljg1Mjg1MjgwNSArMDIwMAorQEAgLTE5LDEwICsxOSwxMCBAQAorICRjYWxsYmFja3MtPnsnYXInfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkFSIiwgImFybS1saW51eC1hciJdXTsKKyAkY2FsbGJhY2tzLT57J2FyY2huYW1lJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJTWVMiLCAiYXJtdjRsLWxpbnV4Il1dOworICRjYWxsYmFja3MtPnsnY2MnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkNDIiwgImFybS1saW51eC1nY2MiXV07CistJGNhbGxiYWNrcy0+eydjY2NkbGZsYWdzJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJDRkxBR1MiLCAiIl1dOworLSRjYWxsYmFja3MtPnsnY2NkbGZsYWdzJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJDRkxBR1MiLCAiIl1dOworLSRjYWxsYmFja3MtPnsnY2NmbGFncyd9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiQ0ZMQUdTIiwgIi1mbm8tc3RyaWN0LWFsaWFzaW5nIC1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCJdXTsKKy0kY2FsbGJhY2tzLT57J2NjZmxhZ3NfdXNlbGFyZ2VmaWxlcyd9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiQ0ZMQUdTIiwgIi1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCJdXTsKKysjJGNhbGxiYWNrcy0+eydjY2NkbGZsYWdzJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJDRkxBR1MiLCAiIl1dOworKyMkY2FsbGJhY2tzLT57J2NjZGxmbGFncyd9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiQ0ZMQUdTIiwgIiJdXTsKKyskY2FsbGJhY2tzLT57J2NjZmxhZ3MnfSA9IFtcJnNpbXBsZV9wcm9jZXNzX2luc2VydCwgWyJDRkxBR1MiLCAiLWZuby1zdHJpY3QtYWxpYXNpbmcgLURfR05VX1NPVVJDRSAtRFRIUkVBRFNfSEFWRV9QSURTIC1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCJdXTsKKyskY2FsbGJhY2tzLT57J2NjZmxhZ3NfdXNlbGFyZ2VmaWxlcyd9ID0gW1wmc2ltcGxlX3Byb2Nlc3NfaW5zZXJ0LCBbIkNGTEFHUyIsICItRF9HTlVfU09VUkNFIC1EVEhSRUFEU19IQVZFX1BJRFMgLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0Il1dOworICRjYWxsYmFja3MtPnsnY2NuYW1lJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJDQyIsICJhcm0tbGludXgtZ2NjIl1dOworICRjYWxsYmFja3MtPnsnY3BwJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJDQ1AiLCAiYXJtLWxpbnV4LWNwcCJdXTsKKyAkY2FsbGJhY2tzLT57J2NwcGZsYWdzJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJDQ1BGTEFHUyIsICItZm5vLXN0cmljdC1hbGlhc2luZyJdXTsKK0BAIC0zMCw2ICszMCw3IEBACisgJGNhbGxiYWNrcy0+eydjcHBzdGRpbid9ID0gW1wmc2ltcGxlX3Byb2Nlc3NfYXBwZW5kLCBbIkNDIiwgImFybS1saW51eC1nY2MgLUUiLCAiLUUiXV07CisgJGNhbGxiYWNrcy0+eydmdWxsX2FyJ30gPSBbXCZiYWNrdGljaywgWyJBUiIsICJ3aGljaCAkRU5We0FSfSIsICIvdXNyL2xvY2FsL2FybS8yLjk1LjMvYmluL2FybS1saW51eC1hciJdXTsKKyAkY2FsbGJhY2tzLT57J2xkJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJMRCIsICJhcm0tbGludXgtbGQiXV07CisrJGNhbGxiYWNrcy0+eydsZGRsZmxhZ3MnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkxERExGTEFHUyIsICIiXV07CisgJGNhbGxiYWNrcy0+eydsZGZsYWdzJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJMREZMQUdTIiwgIiJdXTsKKyAkY2FsbGJhY2tzLT57J2xkZmxhZ3NfdXNlbGFyZ2VmaWxlcyd9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiTERGTEFHUyIsICIiXV07CisgJGNhbGxiYWNrcy0+eydteWFyY2huYW1lJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJTWVMiLCAiYXJtdjRsLWxpbnV4Il1dOworQEAgLTEwNSw2ICsxMDYsMjMgQEAKKyAKKyB9CisgCisrIyBJbnNlcnQgZW52IHZhciBpbnRvIHRoZSB2YXJpYWJsZXMgdmFsdWUKKytzdWIgc2ltcGxlX3Byb2Nlc3NfaW5zZXJ0IHsKKysJbXkgJGtleSA9IHNoaWZ0OworKwlteSAkdmFsdWUgPSBzaGlmdDsKKysJbXkgJGVudnZhciA9ICRjYWxsYmFja3MtPnska2V5fS0+WzFdWzBdOworKworKwlpZiAoJEVOVnskZW52dmFyfSkgeworKwkJIyBTdHJpcCBxdW90ZXMgZnJvbSB2YWx1ZQorKwkJJHZhbHVlID1+IHMvXlwnLy87CisrCQkkdmFsdWUgPX4gcy9cJyQvLzsKKysJCSMgUmVtb3ZlIC1JL3Vzci9sb2NhbC8uLi4gZnJvbSB0aGUgdmFsdWUKKysJCSR2YWx1ZSA9fiBzI1xXLUkvdXNyL2xvY2FsL1x3K1xXIyAjZzsKKysJCSMgUHJlcGVuZCBlbnYgdmFyIChPRSBzZXR0aW5nKSB0byB2YWx1ZQorKwkJcHJpbnQoIiRrZXk9XCckRU5WeyRlbnZ2YXJ9ICR2YWx1ZVwnXG4iKTsKKysJfQorK30KKysKKyBzdWIgbGlicmFyeV9tdW5nZSB7CisgCW15ICRrZXkgPSBzaGlmdDsKKyAJbXkgJHZhbHVlID0gc2hpZnQ7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvaW5zdGFsbHBlcmwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvaW5zdGFsbHBlcmwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU2MDEyMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9pbnN0YWxscGVybC5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0luZGV4OiBwZXJsLTUuMTIuMy9pbnN0YWxscGVybAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBlcmwtNS4xMi4zLm9yaWcvaW5zdGFsbHBlcmwKKysrKyBwZXJsLTUuMTIuMy9pbnN0YWxscGVybAorQEAgLTMsOCArMyw4IEBACisgQkVHSU4geworICAgICByZXF1aXJlIDUuMDA0OworICAgICBjaGRpciAnLi4nIGlmICEtZCAnbGliJyBhbmQgLWQgJy4uL2xpYic7CistICAgIEBJTkMgPSAnbGliJzsKKy0gICAgJEVOVntQRVJMNUxJQn0gPSAnbGliJzsKKysjICAgIEBJTkMgPSAnbGliJzsKKysjICAgICRFTlZ7UEVSTDVMSUJ9ID0gJ2xpYic7CisgCisgICAgICMgVGhpcyBuZWVkcyB0byBiZSBhdCBCRUdJTiB0aW1lLCBiZWZvcmUgYW55IHVzZSBvZiBDb25maWcKKyAgICAgcmVxdWlyZSAnLi9pbnN0YWxsX2xpYi5wbCc7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvbGV0Z2NjLWZpbmQtZXJybm8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvbGV0Z2NjLWZpbmQtZXJybm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE2MWU0YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9sZXRnY2MtZmluZC1lcnJuby5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1RoaXMgcmVtb3ZlcyBhbGwgdGhlIGxvZ2ljIHRoYXQgcGVybCB1c2VzIHRvIGxvY2F0ZSBhbiBhcHByb3ByaWF0ZQorZXJybm8uaCBmb3IgdGhlIHRhcmdldC4gSW5zdGVhZCB3ZSBzaW1wbGUgY3JlYXRlIGEgZmlsZSB0aGF0IGRvZXMKKworICAjaW5jbHVkZSAiZXJybm8uaCIKKworYW5kIHVzZSB0aGF0IGFzIHRoZSBmaWxlIHRvIHBhcnNlLiBUaGlzIGlzIG5lZWRlZCB3aGVuIHVzaW5nIGFuCitleHRlcm5hbCB0b29sY2hhaW4gc2luY2UgcGVybCB3aWxsIHNlYXJjaCBpbiAke1NUQUdJTkdfSU5DRElSfSBmb3IKK2Vycm5vLmggKHdoZW4gdXNpbmcgZ2NjKSBhbmQgdGhhdCBpc24ndCB3aGVyZSBpdCdzIGxvY2F0ZWQgLSBpdHMKK3doZXJldmVyIHRoZSBleHRlcm5hbCB0b29sY2hhaW4ga2VlcHMgaXQncyBoZWFkZXJzLgorCitJbmRleDogcGVybC01LjEyLjMvZXh0L0Vycm5vL0Vycm5vX3BtLlBMCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjEyLjMub3JpZy9leHQvRXJybm8vRXJybm9fcG0uUEwKKysrKyBwZXJsLTUuMTIuMy9leHQvRXJybm8vRXJybm9fcG0uUEwKK0BAIC0xNyw4ICsxNywxOCBAQCB1bmxpbmsgIkVycm5vLnRtcCIgaWYgLWYgIkVycm5vLnRtcCI7Cisgb3BlbiBPVVQsICI+RXJybm8udG1wIiBvciBkaWUgIkNhbm5vdCBvcGVuIEVycm5vLnRtcDogJCEiOworIHNlbGVjdCBPVVQ7CisgbXkgJGZpbGU7CistbXkgQGZpbGVzID0gZ2V0X2ZpbGVzKCk7CistaWYgKCRDb25maWd7Z2NjdmVyc2lvbn0gbmUgJycgJiYgJF5PIGVxICdNU1dpbjMyJykgeworKyNteSBAZmlsZXMgPSBnZXRfZmlsZXMoKTsKKytteSBAZmlsZXMgPSAoImVycm5vLmgiKTsKKysKKytpZiAoMSkgeworKyAgICBvcGVuIElOQ1MsICc+aW5jbHVkZXMuYycgb3IKKysJZGllICJDYW5ub3Qgb3BlbiBpbmNsdWRlcy5jIjsKKysgICAgcHJpbnQgSU5DUyBxcVsjaW5jbHVkZSAiZXJybm8uaCJcbl07CisrICAgIGNsb3NlIElOQ1M7CisrICAgIHByb2Nlc3NfZmlsZSgnaW5jbHVkZXMuYycpOworKyAgICB1bmxpbmsgJ2luY2x1ZGVzLmMnOworK30KKytlbHNpZiAoJENvbmZpZ3tnY2N2ZXJzaW9ufSBuZSAnJyAmJiAkXk8gZXEgJ01TV2luMzInKSB7CisgICAgICMgTWluR1cgY29tcGxhaW5zICJ3YXJuaW5nOiAjcHJhZ21hIHN5c3RlbV9oZWFkZXIgaWdub3JlZCBvdXRzaWRlIGluY2x1ZGUKKyAgICAgIyBmaWxlIiBpZiB0aGUgaGVhZGVyIGZpbGVzIGFyZSBwcm9jZXNzZWQgaW5kaXZpZHVhbGx5LCBzbyBpbmNsdWRlIHRoZW0KKyAgICAgIyBhbGwgaW4gLmMgZmlsZSBhbmQgcHJvY2VzcyB0aGF0IGluc3RlYWQuCitAQCAtNTMsNyArNjMsNyBAQCBzdWIgcHJvY2Vzc19maWxlIHsKKyAgICAgICAgIGNob21wKCRmaWxlID0gYGN5Z3BhdGggLXcgIiRmaWxlImApOworICAgICB9CisgCistICAgIHJldHVybiB1bmxlc3MgZGVmaW5lZCAkZmlsZSBhbmQgLWYgJGZpbGU7CisrIyAgICByZXR1cm4gdW5sZXNzIGRlZmluZWQgJGZpbGUgYW5kIC1mICRmaWxlOworICMgICAgd2FybiAiUHJvY2Vzc2luZyAkZmlsZVxuIjsKKyAKKyAgICAgbG9jYWwgKkZIOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL21ha2VfZXh0LnBsLWZpeC1yZWdlbmVyYXRlLW1ha2VmaWxlLWZhaWxlZC13aGlsZS1jYy0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvbWFrZV9leHQucGwtZml4LXJlZ2VuZXJhdGUtbWFrZWZpbGUtZmFpbGVkLXdoaWxlLWNjLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTZmNjUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL21ha2VfZXh0LnBsLWZpeC1yZWdlbmVyYXRlLW1ha2VmaWxlLWZhaWxlZC13aGlsZS1jYy0ucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorbWFrZV9leHQucGw6IGZpeCByZWdlbmVyYXRlIG1ha2VmaWxlIGZhaWxlZCB3aGlsZSAkY2MgY2hhbmdlZAorCitXaGlsZSAkY2MgY2hhbmdlZCwgdGhlIGV4aXN0YW5jZSBvZiAneGRlZmluZScgY2F1c2VkIG1ha2VmaWxlCityZWdlbmVyYXRpb24gZmFpbGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgbWFrZV9leHQucGwgfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9tYWtlX2V4dC5wbCBiL21ha2VfZXh0LnBsCitpbmRleCBiNDMzNzYyLi45ZmMxYTM2IDEwMDY0NAorLS0tIGEvbWFrZV9leHQucGwKKysrKyBiL21ha2VfZXh0LnBsCitAQCAtMzM1LDYgKzMzNSwxMCBAQCBzdWIgYnVpbGRfZXh0ZW5zaW9uIHsKKyAgICAgICAgICAgICAgICAgcHJpbnQgIkRlbGV0aW5nIG5vbi1Dcm9zcyBtYWtlZmlsZVxuIjsKKyAgICAgICAgICAgICAgICAgY2xvc2UgJG1maCBvciBkaWUgImNsb3NlICRtYWtlZmlsZTogJCEiOworICAgICAgICAgICAgICAgICBfdW5saW5rKCRtYWtlZmlsZSk7CisrICAgICAgICAgICAgICAgIGlmKC1lICd4ZGVmaW5lJykgeworKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkRlbGV0aW5nIHhkZWZpbmUgZm9yIHJlZ2VuZXJhdGUgbWFrZWZpbGVcbiI7CisrICAgICAgICAgICAgICAgICAgICBfdW5saW5rKCd4ZGVmaW5lJyk7CisrICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgIH0KKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvbmF0aXZlLW5vcGFja2xpc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvbmF0aXZlLW5vcGFja2xpc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ4MmRjYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9uYXRpdmUtbm9wYWNrbGlzdC5wYXRjaApAQCAtMCwwICsxLDkxIEBACitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbZGViaWFuIHBhdGNoXQorCitQYXJ0IG9mIDUyX2RlYmlhbl9leHR1dGlsc19oYWNrcy5wYXRjaCBqdXN0IHRvIGV4Y2x1ZGUgdGhlIGluc3RhbGxhdGlvbiBvZiAucGFja2xpc3QgZmlsZXMKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gfCAgIDM1ICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitpbmRleCBmNjMxNDVjLi5hNTg5NzEwIDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitAQCAtMjEyMiwxMSArMjEyMiw2IEBAIHB1cmVfcGVybF9pbnN0YWxsIDo6IGFsbAorIH07CisgCisgICAgIHB1c2ggQG0sCistcXsJCXJlYWQgIn0uJHNlbGYtPmNhdGZpbGUoJyQoUEVSTF9BUkNITElCKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiIFwKKy0JCXdyaXRlICJ9LiRzZWxmLT5jYXRmaWxlKCckKERFU1RJTlNUQUxMQVJDSExJQiknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IiBcCistfSB1bmxlc3MgJHNlbGYtPntOT19QQUNLTElTVH07CistCistICAgIHB1c2ggQG0sCisgcXsJCSIkKElOU1RfTElCKSIgIiQoREVTVElOU1RBTExQUklWTElCKSIgXAorIAkJIiQoSU5TVF9BUkNITElCKSIgIiQoREVTVElOU1RBTExBUkNITElCKSIgXAorIAkJIiQoSU5TVF9CSU4pIiAiJChERVNUSU5TVEFMTEJJTikiIFwKK0BAIC0yMTU4LDEwICsyMTUzLDYgQEAgcXsJCSIkKElOU1RfTElCKSIgIiQoREVTVElOU1RBTExTSVRFTElCKSIgXAorIHB1cmVfdmVuZG9yX2luc3RhbGwgOjogYWxsCisgCSQoTk9FQ0hPKSAkKE1PRF9JTlNUQUxMKSBcCisgfTsKKy0gICAgcHVzaCBAbSwKKy1xewkJcmVhZCAifS4kc2VsZi0+Y2F0ZmlsZSgnJChWRU5ET1JBUkNIRVhQKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiIFwKKy0JCXdyaXRlICJ9LiRzZWxmLT5jYXRmaWxlKCckKERFU1RJTlNUQUxMVkVORE9SQVJDSCknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IiBcCistfSB1bmxlc3MgJHNlbGYtPntOT19QQUNLTElTVH07CisgCisgICAgIHB1c2ggQG0sCisgcXsJCSIkKElOU1RfTElCKSIgIiQoREVTVElOU1RBTExWRU5ET1JMSUIpIiBcCitAQCAtMjE4NywzNyArMjE3OCwxOSBAQCBkb2NfdmVuZG9yX2luc3RhbGwgOjogYWxsCisgCisgICAgIHB1c2ggQG0sIHF7CisgZG9jX3BlcmxfaW5zdGFsbCA6OiBhbGwKKy0JJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMQVJDSExJQikvcGVybGxvY2FsLnBvZCIKKy0JLSQoTk9FQ0hPKSAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKy0JLSQoTk9FQ0hPKSAkKERPQ19JTlNUQUxMKSBcCistCQkiTW9kdWxlIiAiJChOQU1FKSIgXAorLQkJImluc3RhbGxlZCBpbnRvIiAkKElOU1RBTExQUklWTElCKSBcCistCQlMSU5LVFlQRSAiJChMSU5LVFlQRSkiIFwKKy0JCVZFUlNJT04gIiQoVkVSU0lPTikiIFwKKy0JCUVYRV9GSUxFUyAiJChFWEVfRklMRVMpIiBcCistCQk+PiAifS4kc2VsZi0+Y2F0ZmlsZSgnJChERVNUSU5TVEFMTEFSQ0hMSUIpJywncGVybGxvY2FsLnBvZCcpLnF7IgorIAorIGRvY19zaXRlX2luc3RhbGwgOjogYWxsCistCSQoTk9FQ0hPKSAkKEVDSE8pIEFwcGVuZGluZyBpbnN0YWxsYXRpb24gaW5mbyB0byAiJChERVNUSU5TVEFMTEFSQ0hMSUIpL3Blcmxsb2NhbC5wb2QiCistCS0kKE5PRUNITykgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMQVJDSExJQikiCisrCSQoTk9FQ0hPKSAkKEVDSE8pIEFwcGVuZGluZyBpbnN0YWxsYXRpb24gaW5mbyB0byAiJChERVNUSU5TVEFMTFNJVEVBUkNIKS9wZXJsbG9jYWwucG9kIgorKwktJChOT0VDSE8pICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTFNJVEVBUkNIKSIKKyAJLSQoTk9FQ0hPKSAkKERPQ19JTlNUQUxMKSBcCisgCQkiTW9kdWxlIiAiJChOQU1FKSIgXAorIAkJImluc3RhbGxlZCBpbnRvIiAkKElOU1RBTExTSVRFTElCKSBcCisgCQlMSU5LVFlQRSAiJChMSU5LVFlQRSkiIFwKKyAJCVZFUlNJT04gIiQoVkVSU0lPTikiIFwKKyAJCUVYRV9GSUxFUyAiJChFWEVfRklMRVMpIiBcCistCQk+PiAifS4kc2VsZi0+Y2F0ZmlsZSgnJChERVNUSU5TVEFMTEFSQ0hMSUIpJywncGVybGxvY2FsLnBvZCcpLnF7IgorKwkJPj4gIn0uJHNlbGYtPmNhdGZpbGUoJyQoREVTVElOU1RBTExTSVRFQVJDSCknLCdwZXJsbG9jYWwucG9kJykucXsiCisgCisgZG9jX3ZlbmRvcl9pbnN0YWxsIDo6IGFsbAorLQkkKE5PRUNITykgJChFQ0hPKSBBcHBlbmRpbmcgaW5zdGFsbGF0aW9uIGluZm8gdG8gIiQoREVTVElOU1RBTExBUkNITElCKS9wZXJsbG9jYWwucG9kIgorLQktJChOT0VDSE8pICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorLQktJChOT0VDSE8pICQoRE9DX0lOU1RBTEwpIFwKKy0JCSJNb2R1bGUiICIkKE5BTUUpIiBcCistCQkiaW5zdGFsbGVkIGludG8iICQoSU5TVEFMTFZFTkRPUkxJQikgXAorLQkJTElOS1RZUEUgIiQoTElOS1RZUEUpIiBcCistCQlWRVJTSU9OICIkKFZFUlNJT04pIiBcCistCQlFWEVfRklMRVMgIiQoRVhFX0ZJTEVTKSIgXAorLQkJPj4gIn0uJHNlbGYtPmNhdGZpbGUoJyQoREVTVElOU1RBTExBUkNITElCKScsJ3Blcmxsb2NhbC5wb2QnKS5xeyIKKyAKKyB9IHVubGVzcyAkc2VsZi0+e05PX1BFUkxMT0NBTH07CisgCitAQCAtMjIyNiwxMyArMjE5OSwxMSBAQCB1bmluc3RhbGwgOjogdW5pbnN0YWxsX2Zyb21fJChJTlNUQUxMRElSUylkaXJzCisgCSQoTk9FQ0hPKSAkKE5PT1ApCisgCisgdW5pbnN0YWxsX2Zyb21fcGVybGRpcnMgOjoKKy0JJChOT0VDSE8pICQoVU5JTlNUQUxMKSAifS4kc2VsZi0+Y2F0ZmlsZSgnJChQRVJMX0FSQ0hMSUIpJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIKKyAKKyB1bmluc3RhbGxfZnJvbV9zaXRlZGlycyA6OgorIAkkKE5PRUNITykgJChVTklOU1RBTEwpICJ9LiRzZWxmLT5jYXRmaWxlKCckKFNJVEVBUkNIRVhQKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiCisgCisgdW5pbnN0YWxsX2Zyb21fdmVuZG9yZGlycyA6OgorLQkkKE5PRUNITykgJChVTklOU1RBTEwpICJ9LiRzZWxmLT5jYXRmaWxlKCckKFZFTkRPUkFSQ0hFWFApJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIKKyB9OworIAorICAgICBqb2luKCIiLEBtKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9uYXRpdmUtcGVybGluYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9uYXRpdmUtcGVybGluYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGJiMWY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL25hdGl2ZS1wZXJsaW5jLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworSW5kZXg6IHBlcmwtNS44LjgvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTIuMy5vcmlnL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCTIwMDgtMTAtMzEgMjI6MDE6MzUuMDAwMDAwMDAwICswMDAwCisrKysgcGVybC01LjEyLjMvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0JMjAwOC0xMC0zMSAyMjowMTozNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNTk3LDYgKzE1OTcsMTkgQEAKKyAJJHNlbGYtPntQRVJMX0xJQn0gICAgIHx8PSAkQ29uZmlne3ByaXZsaWJleHB9OworIAkkc2VsZi0+e1BFUkxfQVJDSExJQn0gfHw9ICRDb25maWd7YXJjaGxpYmV4cH07CisgCSRzZWxmLT57UEVSTF9JTkN9ICAgICA9ICRzZWxmLT5jYXRkaXIoIiRzZWxmLT57UEVSTF9BUkNITElCfSIsIkNPUkUiKTsgIyB3aWxkIGd1ZXNzIGZvciBub3cKKysJIyBDaGVjayBmb3IgZW52aXJvbm1lbnQgb3ZlcnJpZGUgc28gd2UnbGwgZmluZCB0aGUgaGVhZGVycyBpbiB0aGUgY29ycmVjdCBwbGFjZQorKyAgICAgICAgaWYgKGRlZmluZWQgJEVOVntQRVJMX0xJQn0pCisrICAgICAgICB7CisrICAgICAgICAgICAgJHNlbGYtPntQRVJMX0xJQn0gPSAkRU5We1BFUkxfTElCfTsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChkZWZpbmVkICRFTlZ7UEVSTF9BUkNITElCfSkKKysgICAgICAgIHsKKysgICAgICAgICAgICAkc2VsZi0+e1BFUkxfQVJDSExJQn0gPSAkRU5We1BFUkxfQVJDSExJQn07CisrICAgICAgICB9CisrICAgICAgICBpZiAoZGVmaW5lZCAkRU5We1BFUkxfSU5DfSkKKysgICAgICAgIHsKKysgICAgICAgICAgICAkc2VsZi0+e1BFUkxfSU5DfSA9ICRFTlZ7UEVSTF9JTkN9OworKyAgICAgICAgfQorIAlteSAkcGVybF9oOworIAorIAlpZiAobm90IC1mICgkcGVybF9oID0gJHNlbGYtPmNhdGZpbGUoJHNlbGYtPntQRVJMX0lOQ30sInBlcmwuaCIpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtUGF0aFRvb2xzLWRvbi10LWZpbHRlci1vdXQtYmxpYi1mcm9tLUlOQy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLVBhdGhUb29scy1kb24tdC1maWx0ZXItb3V0LWJsaWItZnJvbS1JTkMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RkOTA0MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLVBhdGhUb29scy1kb24tdC1maWx0ZXItb3V0LWJsaWItZnJvbS1JTkMucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSA5MGMyNTJjZWNjMzhhZWQ1ZDVmYWVkYjMwNDg1ZGQ2ZWVlMmU1NGViIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDExIEZlYiAyMDE1IDE1OjE0OjQwICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHBlcmwgLyBQYXRoVG9vbHM6IGRvbid0IGZpbHRlciBvdXQgYmxpYiBmcm9tIEBJTkMKKworSWYgJFRPUERJUiBpbmNsdWRlcyB0aGUgc3RyaW5nICJibGliIiwgZmlsdGVyIGl0IG91dCBmcm9tIEBJTkMgbWF5IGVtcHR5Cit0aGUgQElOQyBhbmQgY2F1c2UgYnVpbGQgZXJyb3JzIGxpa2U6CisKKyAgQ2FuJ3QgbG9jYXRlIEV4dFV0aWxzL01ha2VNYWtlci5wbSBpbiBASU5DIFwKKyAgKHlvdSBtYXkgbmVlZCB0byBpbnN0YWxsIHRoZSBFeHRVdGlsczo6TWFrZU1ha2VyIG1vZHVsZSkgXAorICAoQElOQyBjb250YWluczogLikgYXQgTWFrZWZpbGUuUEwKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorLS0tCisgZGlzdC9QYXRoVG9vbHMvTWFrZWZpbGUuUEwgfCAzIC0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZGlzdC9QYXRoVG9vbHMvTWFrZWZpbGUuUEwgYi9kaXN0L1BhdGhUb29scy9NYWtlZmlsZS5QTAoraW5kZXggMWIyMWRlNC4uZjU2MmNiMiAxMDA2NDQKKy0tLSBhL2Rpc3QvUGF0aFRvb2xzL01ha2VmaWxlLlBMCisrKysgYi9kaXN0L1BhdGhUb29scy9NYWtlZmlsZS5QTAorQEAgLTEsNiArMSwzIEBACistCistQkVHSU4geyBASU5DID0gZ3JlcCB7IS9ibGliL30gQElOQyB9CistCisgcmVxdWlyZSA1LjAwNTsKKyB1c2UgRXh0VXRpbHM6Ok1ha2VNYWtlcjsKKyBXcml0ZU1ha2VmaWxlCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWFyY2hsaWItZXhwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtYXJjaGxpYi1leHAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkxMmQwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWFyY2hsaWItZXhwLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK3Blcmw6IGFkZCBhcmNobGliX2V4cCB2YXJpYWJsZSB1c2VkIHRvIGdlbmVyYXRlIEFSQ0hMSUJfRVhQIGluIGNvbmZpZy5oCisgICAgCitwZXJsLmMgdXNlcyBhbiBBUkNITElCX0VYUCBkZWZpbmUgdG8gZ2VuZXJhdGUgY29tcGlsZS10aW1lIGNvZGUgdGhhdAorYWRkcyB0aGUgYXJjaGxpYmV4cCBwYXRoIHRvIEBJTkMgZHVyaW5nIHJ1bi10aW1lIGluaXRpYWxpemF0aW9uIG9mIGEKK25ldyBwZXJsIGludGVycHJldGVyLgorICAgIAorQmVjYXVzZSB3ZSd2ZSBjaGFuZ2VkIHRoaXMgdmFsdWUgaW4gYSB0ZW1wb3Jhcnkgd2F5IHRvIG1ha2UgaXQKK3Bvc3NpYmxlIHRvIHVzZSBFeHRVdGlsczo6RW1iZWQgaW4gdGhlIHRhcmdldCBidWlsZCAodGhlIHRlbXBvcmFyeQordmFsdWUgaW4gY29uZmlnLnNoIGdldHMgcmUtc3RyaXBwZWQgb3V0IGR1cmluZyBwYWNrYWdpbmcpLCB0aGUKK0FSQ0hMSUJfRVhQIHZhbHVlIHRoYXQgZ2V0cyBnZW5lcmF0ZWQgc3RpbGwgdXNlcyB0aGUgdGVtcG9yYXJ5IHZlcnNpb24KK2luc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGV4cGVjdGVkIHZlcnNpb24gKGkuZS4gYmVjYXVzZXMgaXQncyBpbiB0aGUKK2dlbmVyYXRlZCBjb25maWcuaCwgaXQgZG9lc24ndCBnZXQgc3RyaXBwZWQgb3V0IGR1cmluZyBwYWNrYWdpbmcgbGlrZQordGhlIG90aGVycyBpbiBjb25maWcuc2gpLgorCitUaGlzIGNyZWF0ZXMgYW4gdW5tb2RpZmllZCB2ZXJzaW9uIGNhbGxlZCBhcmNobGliX2V4cCB0aGF0IGdldHMgdXNlZAorYnkgYSBtb2RpZmllZCBjb25maWdfaC5TSCB0byBnZXQgdGhlIGNvcnJlY3QgdmFsdWUgaW50byBjb25maWcuaAorICAgIAorVGhpcyBwYXRjaCB1c2VzIGFuIHVubW9kaWZpZWQgdmVyc2lvbiBvZiBhcmNobGliZXhwIGNhbGxlZAorYXJjaGxpYl9leHAsIGludHJvZHVjZWQgdG8gY29uZmlnLnNoLCB3aGljaCBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZQorY29ycmVjdCB2YWx1ZSBvZiBBUkNITElCX0VYUCBpbnRvIGNvbmZpZy5oCisgIAorU2VlIFlPQ1RPICMzMDk5IGZvciBtb3JlIGluZm8uCisKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogVG9tIFphbnVzc2kgPHRvbS56YW51c3NpQGludGVsLmNvbT4KKworSW5kZXg6IHBlcmwtNS4xNC4yL2NvbmZpZ19oLlNICis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjE0LjIub3JpZy9jb25maWdfaC5TSAorKysrIHBlcmwtNS4xNC4yL2NvbmZpZ19oLlNICitAQCAtOTk2LDcgKzk5Niw3IEBAIHNlZCA8PCFHUk9LIVRISVMhID4kQ09ORklHX0ggLWUgJ3MhXiN1bmQKKyAgKglpbiBwcm9ncmFtcyB0aGF0IGFyZSBub3QgcHJlcGFyZWQgdG8gZGVhbCB3aXRoIH4gZXhwYW5zaW9uIGF0IHJ1bi10aW1lLgorICAqLworICMkZF9hcmNobGliIEFSQ0hMSUIgIiRhcmNobGliIgkJLyoqLworLSMkZF9hcmNobGliIEFSQ0hMSUJfRVhQICIkYXJjaGxpYmV4cCIJCS8qKi8KKysjJGRfYXJjaGxpYiBBUkNITElCX0VYUCAiJGFyY2hsaWJfZXhwIgkJLyoqLworIAorIC8qIEFSQ0hOQU1FOgorICAqCVRoaXMgc3ltYm9sIGhvbGRzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYXJjaGl0ZWN0dXJlIG5hbWUuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1jb25maWdwbS1zd2l0Y2gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1jb25maWdwbS1zd2l0Y2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZjYzE1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWNvbmZpZ3BtLXN3aXRjaC5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbbmF0aXZlXQorCitUaGlzIHBhdGNoIGlzIHVzZWQgZm9yIHBlcmwtbmF0aXZlIG9ubHkuIEl0IGVuYWJsZXMgdGhlIHN3aXRjaGluZyBvZgorY29uZmlndXJhdGlvbiBmaWxlcyBiZXR3ZWVuIENvbmZpZ19oZWF2eS5wbCBhbmQKK0NvbmZpZ19oZWF2eS10YXJnZXQucGwgYnkgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzCitQRVJMQ09ORklHVEFSR0VUIC0gdGhlIGxhdGVyIGNvbnRhaW5pbmcgc2V0dGluZ3MgZm9yIHRoZSB0YXJnZXQgd2hpbGUKK3RoZSBmb3JtZXIgY29udGFpbnMgdGhvc2UgZm9yIHRoZSBob3N0LiBUaGlzIHdpbGwgYWxsb3cgY3Bhbi5iYmNsYXNzCit0byB1c2UgdGhlIHNldHRpbmdzIGFwcHJvcHJpYXRlIGZvciB0aGUgbmF0aXZlIGFuZC9vciB0YXJnZXQgYnVpbGRzCithcyByZXF1aXJlZC4gVGhpcyBhbHNvIGRpc2FibGVzIHRoZSB1c2Ugb2YgdGhlIGNhY2hlIHNpbmNlIHRoZSBjYWNoZWQKK3ZhbHVlcyB3b3VsZCBiZSB2YWxpZCBmb3IgdGhlIGhvc3Qgb25seS4KKworSW5kZXg6IHBlcmwtNS4xNC4yL2NvbmZpZ3BtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjE0LjIub3JpZy9jb25maWdwbQorKysrIHBlcmwtNS4xNC4yL2NvbmZpZ3BtCitAQCAtNjU4LDcgKzY1OCw3IEBAIHN1YiBGRVRDSCB7CisgICAgIG15KCRzZWxmLCAka2V5KSA9IEBfOworIAorICAgICAjIGNoZWNrIGZvciBjYWNoZWQgdmFsdWUgKHdoaWNoIG1heSBiZSB1bmRlZiBzbyB3ZSB1c2UgZXhpc3RzIG5vdCBkZWZpbmVkKQorLSAgICByZXR1cm4gZXhpc3RzICRzZWxmLT57JGtleX0gPyAkc2VsZi0+eyRrZXl9IDogJHNlbGYtPmZldGNoX3N0cmluZygka2V5KTsKKysgICAgcmV0dXJuICRzZWxmLT5mZXRjaF9zdHJpbmcoJGtleSk7CisgfQorIAorIEVORE9GRU5ECitAQCAtODE2LDcgKzgxNiwyMSBAQCAkY29uZmlnX3R4dCAuPSBzcHJpbnRmIDw8J0VORE9GVElFJywgJGZhCisgc3ViIERFU1RST1kgeyB9CisgCisgc3ViIEFVVE9MT0FEIHsKKy0gICAgcmVxdWlyZSAnQ29uZmlnX2hlYXZ5LnBsJzsKKysgICAgbXkgJGNmZ2ZpbGUgPSAnQ29uZmlnX2hlYXZ5LnBsJzsKKysgICAgaWYgKGRlZmluZWQgJEVOVntQRVJMQ09ORklHVEFSR0VUfSBhbmQgJEVOVntQRVJMQ09ORklHVEFSR0VUfSBlcSAieWVzIikKKysgICAgeworKyAgICAgICAgJGNmZ2ZpbGUgPSAnQ29uZmlnX2hlYXZ5LXRhcmdldC5wbCc7CisrICAgIH0KKysgICAgaWYgKGRlZmluZWQgJEVOVntQRVJMX0FSQ0hMSUJ9KQorKyAgICB7CisrICAgICAgICBwdXNoIEBJTkMsICRFTlZ7UEVSTF9BUkNITElCfTsKKysgICAgICAgIHJlcXVpcmUgJGNmZ2ZpbGU7CisrICAgICAgICBwb3AgQElOQzsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIHJlcXVpcmUgJGNmZ2ZpbGU7CisrICAgIH0KKyAgICAgZ290byBcJmxhdW5jaGVyIHVubGVzcyAkQ29uZmlnOjpBVVRPTE9BRCA9fiAvbGF1bmNoZXIkLzsKKyAgICAgZGllICImQ29uZmlnOjpBVVRPTE9BRCBmYWlsZWQgb24gJENvbmZpZzo6QVVUT0xPQUQiOworIH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWNvbmZpZ3VyZS5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWNvbmZpZ3VyZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNzJjZTQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtY29uZmlndXJlLnNoCkBAIC0wLDAgKzEsNDMgQEAKKyMhIC9iaW4vc2gKKworIworIyBHZW5lcmF0ZSB0aGUgY29tbW9uIHBlcmwgY29uZmlndXJhdGlvbgorIyBOZWVkcyB0byBiZSBydW4gb24gYSBob3N0IHRoYXQgbWF0Y2hlcyB0aGUgYml0c2l6ZSBvZiB0aGUgdGFyZ2V0IHBsYXRmb3JtCisjCisKK2VjaG8gc2ggQ29uZmlndXJlIC1kZXMgXAorICAgICAgICAtRG9wdGltaXplPS1PMiBcCisgICAgICAgIC1EbXlob3N0bmFtZT1sb2NhbGhvc3QgXAorICAgICAgICAtRHBlcmxhZG1pbj1yb290QGxvY2FsaG9zdCBcCisgICAgICAgIC1EY2M9Z2NjIFwKKyAgICAgICAgLURjZl9ieT0nT3BlbiBFbWJlZGRlZCcgXAorICAgICAgICAtRGluc3RhbGxwcmVmaXg9QERFU1RESVJAIFwKKyAgICAgICAgLURwcmVmaXg9L3VzciBcCisgICAgICAgIC1EdmVuZG9ycHJlZml4PS91c3IgXAorICAgICAgICAtRHNpdGVwcmVmaXg9L3VzciBcCisgICAgICAgIC1Eb3RoZXJsaWJkaXJzPS91c3IvbGliL3Blcmw1LzUuMTIuMyBcCisgICAgICAgIC1EdXNlc2hycGxpYiBcCisgICAgICAgIC1EdXNldGhyZWFkcyBcCisgICAgICAgIC1EdXNlaXRocmVhZHMgXAorICAgICAgICAtRHVzZWxhcmdlZmlsZXMgXAorICAgICAgICAtVWRfZG9zdWlkIFwKKyAgICAgICAgLURkX3NlbWN0bF9zZW11biBcCisgICAgICAgIC1VaV9kYiBcCisgICAgICAgIC1VaV9uZGJtIFwKKyAgICAgICAgLVVpX2dkYm0gXAorICAgICAgICAtRGlfc2hhZG93IFwKKyAgICAgICAgLURpX3N5c2xvZyBcCisgICAgICAgIC1EbWFuM2V4dD0zcG0gXAorICAgICAgICAtRHVzZXBlcmxpbyBcCisgICAgICAgIC1EaW5zdGFsbHVzcmJpbnBlcmwgXAorICAgICAgICAtVWJpbmNvbXBhdDUwMDUgXAorICAgICAgICAtVXZlcnNpb25vbmx5IFwKKyAgICAgICAgLURwYWdlcj0nL3Vzci9iaW4vbGVzcyAtaXNyJworCitjcCAtZiBjb25maWcuc2ggY29uZmlnLnNoLkNPTU1PTgorCitUQVJHRVRPUz0kKGdyZXAgbXlhcmNobmFtZSBjb25maWcuc2guQ09NTU9OIHwgc2VkICJzIy4qJ1woLipcKScuKiNcMSMiKQorCitzZWQgLXIgLWkgY29uZmlnLnNoLkNPTU1PTiBcCisJLWUgInMjKGluc3RhbGwuKj0nKSgvdXNyKS9sb2NhbCguKicpI1wxQERFU1RESVJAXDJcMyNnIiBcCisJLWUgJ3MjJyRUQVJHRVRPUycjQEFSQ0hAI2cnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1keW5sb2FkZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1keW5sb2FkZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM1YmViYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWR5bmxvYWRlci5wYXRjaApAQCAtMCwwICsxLDM0IEBACitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0FsbG93IHRoZSBsb2NhdGlvbiB0aGF0IC5zbyBmaWxlcyBhcmUgc2VhcmNoZWQgZm9yIGZvciBkeW5hbWljCitsb2FkaW5nIHRvIGJlIGNoYW5nZWQgdmlhIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLiBUaGlzIGlzIHRvIGFsbG93Cit1cyB0byBsb2FkIC5zbydzIGZyb20gdGhlIGhvc3Qgc3lzdGVtIHdoaWxlIGJ1aWxkaW5nIGZvciB0aGUgdGFyZ2V0CitzeXN0ZW0uCisKK1VwZGF0ZSBieSBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzA0LzIxCisKK0luZGV4OiBwZXJsLTUuMTQuMi9kaXN0L1hTTG9hZGVyL1hTTG9hZGVyX3BtLlBMCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjE0LjIub3JpZy9kaXN0L1hTTG9hZGVyL1hTTG9hZGVyX3BtLlBMCisrKysgcGVybC01LjE0LjIvZGlzdC9YU0xvYWRlci9YU0xvYWRlcl9wbS5QTAorQEAgLTI4LDYgKzI4LDIwIEBAIHN1YiBsb2FkIHsKKyAKKyAgICAgbXkgKCRtb2R1bGUsICRtb2RsaWJuYW1lKSA9IGNhbGxlcigpOworIAorKyAgICAjIE9FOiBBbGxvdyBlbnYgdG8gZm9ybSBkeW5hbWljIGxvYWRlciB0byBsb29rIGluIGEgZGlmZmVyZW50IHBsYWNlCisrICAgICMgVGhpcyBpcyBzbyBpdCBmaW5kcyB0aGUgaG9zdCAuc28gZmlsZXMsIG5vdCB0aGUgdGFyZ2V0cworKyAgICBpZiAoZGVmaW5lZCAkRU5We1BFUkxIT1NUTElCfSkKKysgICAgeworKyAgICAgICAgbXkgJGhvc3RsaWIgPSAkRU5We1BFUkxIT1NUTElCfTsKKysgICAgICAgIHByaW50IFNUREVSUiAiKioqIE1vZHVsZSBuYW1lIElOOiAkbW9kbGlibmFtZVxuIjsKKysgICAgICAgICgkcDEsICRwMiwgJHAzLCAkcDQsICRwNSkgPSAkbW9kbGlibmFtZSA9fiBtLyheKC4qbGliXHcqXC8pPykoKHBlcmxcL1swLTlcLl0qXC8pPykoLiopJC87CisrICAgICAgICBwcmludCBTVERFUlIgIioqKiBwMTogJHAxICBwMzogJHAzICBwNTogJHA1XG4iOworKyAgICAgICAgaWYgKCAkcDEgbmUgIiIgKSB7CisrICAgICAgICAgICAgJG1vZGxpYm5hbWUgPSAkaG9zdGxpYi4kcDU7CisrICAgICAgICB9CisrICAgICAgICBwcmludCBTVERFUlIgIioqKiBNb2R1bGUgbmFtZSBPVVQ6ICRtb2RsaWJuYW1lXG4iOworKyAgICB9CisrCisgICAgIGlmIChAXykgeworIAkkbW9kdWxlID0gJF9bMF07CisgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1lbmFibGUtZ2RibS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWVuYWJsZS1nZGJtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhODNmY2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1lbmFibGUtZ2RibS5wYXRjaApAQCAtMCwwICsxLDE5IEBACitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0luZGV4OiBwZXJsLTUuOC44L2NvbmZpZ19oLlNICis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjguOC5vcmlnL2NvbmZpZ19oLlNICTIwMDUtMTEtMDEgMDI6MTM6MDUuMDAwMDAwMDAwICswODAwCisrKysgcGVybC01LjguOC9jb25maWdfaC5TSAkyMDEwLTExLTAxIDE3OjA2OjA3LjIxNTIxOTczOCArMDgwMAorQEAgLTcwOSw2ICs3MDksMTIgQEAKKyAgKi8KKyAjJGlfZmxvYXQgSV9GTE9BVAkJLyoqLworIAorKy8qIElfR0RCTToKKysgKiAgICAgIFRoaXMgc3ltYm9sLCBpZiBkZWZpbmVkLCBpbmRpY2F0ZXMgdGhhdCA8Z2RibS5oPiBleGlzdHMgYW5kIHNob3VsZAorKyAqICAgICAgYmUgaW5jbHVkZWQuCisrICovCisrIyRpX2dkYm0gSV9HREJNIC8qKi8KKysKKyAvKiBJX0xJTUlUUzoKKyAgKglUaGlzIHN5bWJvbCwgaWYgZGVmaW5lZCwgaW5kaWNhdGVzIHRvIHRoZSBDIHByb2dyYW0gdGhhdCBpdCBzaG91bGQKKyAgKglpbmNsdWRlIDxsaW1pdHMuaD4gdG8gZ2V0IGRlZmluaXRpb24gb2Ygc3ltYm9scyBsaWtlIFdPUkRfQklUIG9yCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1tb3JlY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtbW9yZWNvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWNlODVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtbW9yZWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDE4IEBACitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1dlIG5lZWQgbGQgaW4gdGhlIGZha2UgY29uZmlnIGxpYnJhcnksIGJ1dCBpdCdzIG5vdCBpbmNsdWRlZCBieSBkZWZhdWx0LiBTbworZXhwYW5kIHRoZSBudW1iZXIgb2YgaXRlbXMgaW5jbHVkZWQuIFdoaWxlIHRoaXMgd29ya3MgaXQgaW5kaWNhdGVzIHRoYXQgdGhlCityZXN0IG9mIHRoZSBjb25maWcgaXRlbXMgYXJlIG5vdCBiZWluZyBwaWNrZWQgdXAgYW5kL29yIGFyZSBiZWluZyBwaWNrZWQgdXAKK2Zyb20gdGhlIGhvc3QuIE1vcmUgaW52ZXN0aWdhdGlvbiBuZWVkZWQuCisKKy0tLSBwZXJsLTUuOC44L2NvbmZpZ3BtCTIwMDcvMDQvMjAgMDk6NDg6MDUJMS4xCisrKysgcGVybC01LjguOC9jb25maWdwbQkyMDA3LzA0LzIwIDA5OjU3OjEyCitAQCAtMiw3ICsyLDcgQEAKKyB1c2Ugc3RyaWN0OworIHVzZSB2YXJzIHF3KCVDb25maWcgJENvbmZpZ19TSF9leHBhbmRlZCk7CisgCistbXkgJGhvd19tYW55X2NvbW1vbiA9IDIyOworK215ICRob3dfbWFueV9jb21tb24gPSA1MDsKKyAKKyAjIGNvbW1vbmx5IHVzZWQgbmFtZXMgdG8gcHJlY2FjaGUgKGFuZCBoZW5jZSBsb29rdXAgZmFzdGVzdCkKKyBteSAlQ29tbW9uOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUyZGQxYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9ydW4tcHRlc3QKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vc2gKK2NkIHQgJiYgLi9URVNUIHwgc2VkIC11IC1lICdzfFwoLipcKSAuKiBvayR8UEFTUzogXDF8JyAtZSAnc3xcKC4qXCkgLiogc2tpcHBlZHxTS0lQOiBcMXwnIC1lICdzfFwoLipcKSBcLlwoLipcKXxGQUlMOiBcMXwnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvdC1ydW4tc3dpdGNoZXMudC1wZXJsNS1wZXJsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3QtcnVuLXN3aXRjaGVzLnQtcGVybDUtcGVybC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2ZkZjRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3QtcnVuLXN3aXRjaGVzLnQtcGVybDUtcGVybC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDE1NjE1NDllYTM2ZTM3Y2MyNTcwNmYwOTRhMTk1ZGU0OTI4ZjQyMTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMTkgSnVuIDIwMTUgMDE6MjM6NDYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gdC9ydW4vc3dpdGNoZXMudDogcGVybDUgLT4gcGVybAorCitXZSBjYWxsIGl0IHBlcmwgcmF0aGVyIHRoYW4gcGVybDUgaW4gb2UuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgdC9ydW4vc3dpdGNoZXMudCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3QvcnVuL3N3aXRjaGVzLnQgYi90L3J1bi9zd2l0Y2hlcy50CitpbmRleCA3ODkxNWUwLi5lOWU0YjQ1IDEwMDY0NAorLS0tIGEvdC9ydW4vc3dpdGNoZXMudAorKysrIGIvdC9ydW4vc3dpdGNoZXMudAorQEAgLTI2OSw3ICsyNjksNyBAQCBpcyBydW5wZXJsKHN0ZGVyciA9PiAxLCBwcm9nID0+ICcjIXBlcmwgLU0nKSwKKyAgICAgICAgICAgJy1WIGdlbmVyYXRlcyAyMCsgbGluZXMnICk7CisgCisgICAgIGxpa2UoIHJ1bnBlcmwoIHN3aXRjaGVzID0+IFsnLVYnXSApLAorLQkgIHFyL1xBU3VtbWFyeSBvZiBteSBwZXJsNSAuKmNvbmZpZ3VyYXRpb246LywKKysJICBxci9cQVN1bW1hcnkgb2YgbXkgcGVybCAuKmNvbmZpZ3VyYXRpb246LywKKyAgICAgICAgICAgJy1WIGxvb2tzIG9rYXknICk7CisgCisgICAgICMgbG9va3VwIGEga25vd24gY29uZmlnIHZhcgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC90ZXN0L2Rpc3QtdGhyZWFkcy10LWpvaW4udC1hZGp1c3QtcHMtb3B0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3Rlc3QvZGlzdC10aHJlYWRzLXQtam9pbi50LWFkanVzdC1wcy1vcHRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgyOTNjMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC90ZXN0L2Rpc3QtdGhyZWFkcy10LWpvaW4udC1hZGp1c3QtcHMtb3B0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK2Rpc3QvdGhyZWFkcy90L2pvaW4udDogYWRqdXN0IHBzIG9wdGlvbgorCitUaGUgcHMncyBvcHRpb24gJy1mJyBpcyBub3Qgc3VwcG9ydGVkIGJ5IGJ1c3lib3ggaW4gb2UuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgZGlzdC90aHJlYWRzL3Qvam9pbi50IHwgNiArKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZGlzdC90aHJlYWRzL3Qvam9pbi50IGIvZGlzdC90aHJlYWRzL3Qvam9pbi50CistLS0gYS9kaXN0L3RocmVhZHMvdC9qb2luLnQKKysrKyBiL2Rpc3QvdGhyZWFkcy90L2pvaW4udAorQEAgLTExOCw3ICsxMTgsNyBAQCBpZiAoJF5PIGVxICdsaW51eCcpIHsKKyAgICAgICAgICAgICAgICAgIH0pLT5qb2luOworICAgICAjcHJpbnQgIiMgbWFpbnRocmVhZDogXCQwID0gJDBcbiI7CisgICAgICNwcmludCAiIyBwaWQgPSAkJFxuIjsKKy0gICAgaWYgKG9wZW4gUFMsICJwcyAtZiB8IikgeyAjIE5vdGU6IG11c3Qgd29yayBpbiAoYWxsKSBzeXN0ZW1zLgorKyAgICBpZiAob3BlbiBQUywgInBzIHwiKSB7ICMgTm90ZTogbXVzdCB3b3JrIGluIChhbGwpIHN5c3RlbXMuCisgICAgICAgICBteSAoJHNhd3BpZCwgJHNhd2V4ZSk7CisgICAgICAgICB3aGlsZSAoPFBTPikgeworICAgICAgICAgICAgIGNob21wOworQEAgLTEzNSwxMCArMTM1LDEwIEBAIGlmICgkXk8gZXEgJ2xpbnV4JykgeworICAgICAgICAgaWYgKCRzYXdwaWQpIHsKKyAgICAgICAgICAgICBvaygkc2F3cGlkICYmICRzYXdleGUsICdhbHRlcmluZyAkMCBpcyBlZmZlY3RpdmUnKTsKKyAgICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgc2tpcCgiXCQwIGNoZWNrOiBkaWQgbm90IHNlZSBwaWQgJCQgaW4gJ3BzIC1mIHwnIik7CisrICAgICAgICAgICAgc2tpcCgiXCQwIGNoZWNrOiBkaWQgbm90IHNlZSBwaWQgJCQgaW4gJ3BzIHwnIik7CisgICAgICAgICB9CisgICAgIH0gZWxzZSB7CistICAgICAgICBza2lwKCJcJDAgY2hlY2s6IG9wZW5pbmcgJ3BzIC1mIHwnIGZhaWxlZDogJCEiKTsKKysgICAgICAgIHNraXAoIlwkMCBjaGVjazogb3BlbmluZyAncHMgfCcgZmFpbGVkOiAkISIpOworICAgICB9CisgfSBlbHNlIHsKKyAgICAgc2tpcCgiXCQwIGNoZWNrOiBvbmx5IG9uIExpbnV4Iik7CistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3Rlc3QvZXh0LUR5bmFMb2FkZXItdC1EeW5hTG9hZGVyLnQtZml4LWNhbGxpbmctZGxfZmluZGZpbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC90ZXN0L2V4dC1EeW5hTG9hZGVyLXQtRHluYUxvYWRlci50LWZpeC1jYWxsaW5nLWRsX2ZpbmRmaWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1NzdmZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC90ZXN0L2V4dC1EeW5hTG9hZGVyLXQtRHluYUxvYWRlci50LWZpeC1jYWxsaW5nLWRsX2ZpbmRmaWwucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorZXh0L0R5bmFMb2FkZXIvdC9EeW5hTG9hZGVyLnQ6IGZpeCBjYWxsaW5nIGRsX2ZpbmRmaWxlKCkgZmFpbGVkCisKK1VzZSAnJENvbmZpZ3tsaWJjfScgYXMgdGhlIGxpYmMgZmlsZSBuYW1lCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgZXh0L0R5bmFMb2FkZXIvdC9EeW5hTG9hZGVyLnQgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9leHQvRHluYUxvYWRlci90L0R5bmFMb2FkZXIudCBiL2V4dC9EeW5hTG9hZGVyL3QvRHluYUxvYWRlci50CitpbmRleCBhZGUxZjhlLi4zNTY3YWZlIDEwMDY0NAorLS0tIGEvZXh0L0R5bmFMb2FkZXIvdC9EeW5hTG9hZGVyLnQKKysrKyBiL2V4dC9EeW5hTG9hZGVyL3QvRHluYUxvYWRlci50CitAQCAtMTA2LDcgKzEwNiw3IEBAIG9rKCBkZWZpbmVkICRkbGVyciwgImRsX2Vycm9yKCkgcmV0dXJuaW5nIGFuIGVycm9yIG1lc3NhZ2U6ICckZGxlcnInIiApOworICMgLi4uIGRsX2ZpbmRmaWxlKCkKKyBTS0lQOiB7CisgICAgIG15IEBmaWxlcyA9ICgpOworLSAgICBldmFsIHsgQGZpbGVzID0gRHluYUxvYWRlcjo6ZGxfZmluZGZpbGUoImMiKSB9OworKyAgICBldmFsIHsgQGZpbGVzID0gRHluYUxvYWRlcjo6ZGxfZmluZGZpbGUoJENvbmZpZ3tsaWJjfSkgfTsKKyAgICAgaXMoICRALCAnJywgImNhbGxpbmcgZGxfZmluZGZpbGUoKSIgKTsKKyAgICAgIyBTb21lIHBsYXRmb3JtcyBhcmUga25vd24gdG8gbm90IGhhdmUgYSAibGliYyIKKyAgICAgIyAobm90IGF0IGxlYXN0IGJ5IHRoYXQgbmFtZSkgdGhhdCB0aGUgZGxfZmluZGZpbGUoKQorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybF81LjIyLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmxfNS4yMi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZTc4NDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmxfNS4yMi4wLmJiCkBAIC0wLDAgKzEsMzcxIEBACityZXF1aXJlIHBlcmwuaW5jCisKKyMgV2UgbmVlZCBnbnVncmVwIChmb3IgLUkpCitERVBFTkRTID0gInZpcnR1YWwvZGIgZ3JlcC1uYXRpdmUiCitERVBFTkRTICs9ICJnZGJtIHpsaWIiCisKKyMgUGljayB1cCBwYXRjaGVzIGZyb20gZGViaWFuCisjIGh0dHA6Ly9mdHAuZGUuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL3AvcGVybC9wZXJsXzUuMjIuMC0xLmRlYmlhbi50YXIueHoKK1NSQ19VUkkgKz0gIiBcCisJZmlsZTovL2RlYmlhbi9jcGFuX2RlZmluc3RhbGxkaXJzLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vZGJfZmlsZV92ZXIuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9kb2NfaW5mby5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2VuYzJ4c19pbmMuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9lcnJub192ZXIuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9saWJwZXJsX2VtYmVkX2RvYy5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2ZpeGVzL3Jlc3BlY3RfdW1hc2suZGlmZiBcCisJZmlsZTovL2RlYmlhbi93cml0YWJsZV9zaXRlX2RpcnMuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9leHR1dGlsc19zZXRfbGlicGVybF9wYXRoLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vbm9fcGFja2xpc3RfcGVybGxvY2FsLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vcHJlZml4X2NoYW5nZXMuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9pbnN0bW9kc2hfZG9jLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vbGRfcnVuX3BhdGguZGlmZiBcCisJZmlsZTovL2RlYmlhbi9saWJuZXRfY29uZmlnX3BhdGguZGlmZiBcCisJZmlsZTovL2RlYmlhbi9tb2RfcGF0aHMuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9wcnVuZV9saWJzLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vZml4ZXMvbmV0X3NtdHBfZG9jcy5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL3BlcmxpdnAuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9zcXVlbGNoLWxvY2FsZS13YXJuaW5ncy5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL3NraXAtdXBzdHJlYW0tZ2l0LXRlc3RzLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vc2tpcC1rZnJlZWJzZC1jcmFzaC5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2ZpeGVzL2RvY3VtZW50X21ha2VtYWtlcl9jY2ZsYWdzLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vZmluZF9odG1sMnRleHQuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9wZXJsNWRiLXgtdGVybWluYWwtZW11bGF0b3IucGF0Y2ggXAorCWZpbGU6Ly9kZWJpYW4vY3Bhbi1taXNzaW5nLXNpdGUtZGlycy5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2ZpeGVzL21lbW9pemVfc3RvcmFibGVfbnN0b3JlLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vcmVnZW4tc2tpcC5kaWZmIFwKKyIKKworU1JDX1VSSSArPSAiIFwKKyAgICAgICAgZmlsZTovL01ha2VmaWxlLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL01ha2VmaWxlLlNILnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2luc3RhbGxwZXJsLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL3BlcmwtZHlubG9hZGVyLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL3BlcmwtbW9yZWNvbmZpZy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9sZXRnY2MtZmluZC1lcnJuby5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9nZW5lcmF0ZS1zaC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9uYXRpdmUtcGVybGluYy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9wZXJsLWVuYWJsZS1nZGJtLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2Nyb3NzLWdlbmVyYXRlX3V1ZG1hcC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9maXhfYmFkX3JwYXRoLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL3BlcmwtYXJjaGxpYi1leHAucGF0Y2ggXAorICAgICAgICBmaWxlOi8vZHluYWxvYWRlcmhhY2sucGF0Y2ggXAorICAgICAgICBmaWxlOi8vY29uZmlnLnNoIFwKKyAgICAgICAgZmlsZTovL2NvbmZpZy5zaC0zMiBcCisgICAgICAgIGZpbGU6Ly9jb25maWcuc2gtMzItbGUgXAorICAgICAgICBmaWxlOi8vY29uZmlnLnNoLTMyLWJlIFwKKyAgICAgICAgZmlsZTovL2NvbmZpZy5zaC02NCBcCisgICAgICAgIGZpbGU6Ly9jb25maWcuc2gtNjQtbGUgXAorICAgICAgICBmaWxlOi8vY29uZmlnLnNoLTY0LWJlIFwKKyAgICAgICAgZmlsZTovL21ha2VfZXh0LnBsLWZpeC1yZWdlbmVyYXRlLW1ha2VmaWxlLWZhaWxlZC13aGlsZS1jYy0ucGF0Y2ggXAorICAgICAgICBmaWxlOi8vdC1ydW4tc3dpdGNoZXMudC1wZXJsNS1wZXJsLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2V4dC1PREJNX0ZpbGUtaGludHMtbGludXgucGwtbGluay1saWJnZGJtX2NvbXBhdC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9leHQtT0RCTV9GaWxlLXQtb2RibS50LWZpeC10aGUtcGF0aC1vZi1kYm10X2NvbW1vbi5wLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL3BlcmwtUGF0aFRvb2xzLWRvbi10LWZpbHRlci1vdXQtYmxpYi1mcm9tLUlOQy5wYXRjaCBcCisiCisKKyMgRml4IHRlc3QgY2FzZSBpc3N1ZXMKK1NSQ19VUklfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgXAorICAgICAgICAgICAgZmlsZTovL3Rlc3QvZGlzdC10aHJlYWRzLXQtam9pbi50LWFkanVzdC1wcy1vcHRpb24ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3Rlc3QvZXh0LUR5bmFMb2FkZXItdC1EeW5hTG9hZGVyLnQtZml4LWNhbGxpbmctZGxfZmluZGZpbC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImZmMGYwOWIxN2RlNDI2ZWZmMzIzNDI2Y2IxNDBlZTc5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJlODNlYWQwYzVjMjZjYmJlNjI2ZmE0YmFjMWE0YmVhYmUyM2E5ZWViYzE1ZDM1YmE0OWNjZGUxMTg3OGUxOTYiCisKK2luaGVyaXQgcGVybG5hdGl2ZSBzaXRlaW5mbworCisjIFdoZXJlIHRvIGZpbmQgdGhlIG5hdGl2ZSBwZXJsCitIT1NUUEVSTCA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vcGVybC1uYXRpdmUvcGVybCR7UFZ9IgorCisjIFdoZXJlIHRvIGZpbmQgLnNvIGZpbGVzIC0gdXNlIHRoZSAtbmF0aXZlIHZlcnNpb25zIG5vdCB0aG9zZSBmcm9tIHRoZSB0YXJnZXQgYnVpbGQKK2V4cG9ydCBQRVJMSE9TVExJQiA9ICIke1NUQUdJTkdfTElCRElSX05BVElWRX0vcGVybC1uYXRpdmUvcGVybC8ke1BWfS8iCisKKyMgV2hlcmUgdG8gZmluZCBwZXJsIEBJTkMvI2luY2x1ZGUgZmlsZXMKKyMgLSB1c2UgdGhlIC1uYXRpdmUgdmVyc2lvbnMgbm90IHRob3NlIGZyb20gdGhlIHRhcmdldCBidWlsZAorZXhwb3J0IFBFUkxfTElCID0gIiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZS9wZXJsLyR7UFZ9LyIKK2V4cG9ydCBQRVJMX0FSQ0hMSUIgPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3BlcmwtbmF0aXZlL3BlcmwvJHtQVn0vIgorCisjIExERkxBR1MgZm9yIHNoYXJlZCBsaWJyYXJpZXMKK2V4cG9ydCBMRERMRkxBR1MgPSAiJHtMREZMQUdTfSAtc2hhcmVkIgorCitMREZMQUdTX2FwcGVuZCA9ICIgLWZzdGFjay1wcm90ZWN0b3IiCisKKyMgV2UncmUgYWxtb3N0IERlYmlhbiwgYXJlbid0IHdlPworQ0ZMQUdTICs9ICItRERFQklBTiIKKworZG9fbm9sYXJnZWZpbGUoKSB7CisJc2VkIC1pIC1lICJzLFwodXNlbGFyZ2VmaWxlcz1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisJCS1lICJzLFwoZF9yZWFkZGlyNjRfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisJCS1lICJzLFwocmVhZGRpcjY0X3JfcHJvdG89XCknXHcrJyxcMScwJyxnIiBcCisJCS1lICIvY2NmbGFnc191c2VsYXJnZWZpbGVzL2QiIFwKKwkJLWUgInMvLUR1c2VsYXJnZWZpbGVzLy8iIFwKKwkJLWUgInMvLURfRklMRV9PRkZTRVRfQklUUz02NC8vIiBcCisJCS1lICJzLy1EX0xBUkdFRklMRV9TT1VSQ0UvLyIgXAorCQkke1N9L0Nyb3NzL2NvbmZpZy5zaC0ke1RBUkdFVF9BUkNIfS0ke1RBUkdFVF9PU30KK30KKworZG9fY29uZmlndXJlKCkgeworICAgICAgICAjIE1ha2UgaG9zdHBlcmwgaW4gYnVpbGQgZGlyZWN0b3J5IGJlIHRoZSBuYXRpdmUgcGVybAorICAgICAgICBsbiAtc2YgJHtIT1NUUEVSTH0gaG9zdHBlcmwKKworCWlmIFsgLW4gIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgLWEgLWUgIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgXTsgdGhlbgorCQlpZiBbICJgY2F0ICR7Q09ORklHVVJFU1RBTVBGSUxFfWAiICE9ICIke0JCX1RBU0tIQVNIfSIgLWEgLWUgTWFrZWZpbGUgXTsgdGhlbgorCQkJJHtNQUtFfSBjbGVhbgorCQlmaQorCQlmaW5kICR7U30gLW5hbWUgKi5zbyAtZGVsZXRlCisJZmkKKwlpZiBbIC1uICIke0NPTkZJR1VSRVNUQU1QRklMRX0iIF07IHRoZW4KKwkJZWNobyAke0JCX1RBU0tIQVNIfSA+ICR7Q09ORklHVVJFU1RBTVBGSUxFfQorCWZpCisKKyAgICAgICAgIyBEbyBvdXIgd29yayBpbiB0aGUgY3Jvc3Mgc3ViZGlyCisgICAgICAgIGNkIENyb3NzCisKKyAgICAgICAgIyBHZW5lcmF0ZSBjb25maWd1cmF0aW9uCisgICAgICAgIHJtIC1mIGNvbmZpZy5zaC0ke1RBUkdFVF9BUkNIfS0ke1RBUkdFVF9PU30KKyAgICAgICAgZm9yIGkgaW4gJHtXT1JLRElSfS9jb25maWcuc2ggXAorICAgICAgICAgICAgICAgICAke1dPUktESVJ9L2NvbmZpZy5zaC0ke1NJVEVJTkZPX0JJVFN9IFwKKyAgICAgICAgICAgICAgICAgJHtXT1JLRElSfS9jb25maWcuc2gtJHtTSVRFSU5GT19CSVRTfS0ke1NJVEVJTkZPX0VORElBTk5FU1N9OyBkbworICAgICAgICAgICAgY2F0ICRpID4+IGNvbmZpZy5zaC0ke1RBUkdFVF9BUkNIfS0ke1RBUkdFVF9PU30KKyAgICAgICAgZG9uZQorCisgICAgICAgICMgRml4dXBzIGZvciB1Y2xpYmMKKyAgICAgICAgaWYgWyAiJHtUQVJHRVRfT1N9IiA9ICJsaW51eC11Y2xpYmMiIC1vICIke1RBUkdFVF9PU30iID0gImxpbnV4LXVjbGliY2VhYmkiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBzZWQgLWkgLWUgInMsXChkX2NyeXB0X3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfZnV0aW1lcz1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9maW5pdGVsPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChjcnlwdF9yX3Byb3RvPVwpJ1x3KycsXDEnMCcsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfZ2V0bmV0YnluYW1lX3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldG5ldGJ5bmFtZV9yX3Byb3RvPVwpJ1x3KycsXDEnMCcsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfZ2V0bmV0YnlhZGRyX3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldG5ldGJ5YWRkcl9yX3Byb3RvPVwpJ1x3KycsXDEnMCcsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfZ2V0bmV0ZW50X3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldG5ldGVudF9yX3Byb3RvPVwpJ1x3KycsXDEnMCcsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfc29ja2F0bWFyaz1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9zb2NrYXRtYXJrcHJvdG89XCknXHcrJyxcMScwJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9lYWNjZXNzPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX3N0ZGlvX3B0cl9sdmFsPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX3N0ZGlvX3B0cl9sdmFsX3NldHNfY250PVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX3N0ZGlvYmFzZT1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9zdGRzdGRpbz1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLC1mc3RhY2stcHJvdGVjdG9yLC1mbm8tc3RhY2stcHJvdGVjdG9yLGciIFwKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnLnNoLSR7VEFSR0VUX0FSQ0h9LSR7VEFSR0VUX09TfQorICAgICAgICBmaQorICAgICAgICAjIEZpeHVwcyBmb3IgbXVzbAorICAgICAgICBpZiBbICIke1RBUkdFVF9PU30iID0gImxpbnV4LW11c2wiIC1vICIke1RBUkdFVF9PU30iID0gImxpbnV4LW11c2xlYWJpIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lICJzLFwoZF9saWJtX2xpYl92ZXJzaW9uPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX3N0ZGlvX3B0cl9sdmFsPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX3N0ZGlvX3B0cl9sdmFsX3NldHNfY250PVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX3N0ZGlvYmFzZT1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9zdGRzdGRpbz1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9nZXRuZXRieW5hbWVfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9maW5pdGVsPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChnZXRwcm90b2J5bmFtZV9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChnZXRwd2VudF9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChnZXRzZXJ2ZW50X3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldGhvc3RlbnRfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZ2V0bmV0ZW50X3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldG5ldGJ5YWRkcl9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChnZXRwcm90b2VudF9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChnZXRwcm90b2J5bnVtYmVyX3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldGdyZW50X3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGlfZmNudGw9XCkndW5kZWYnLFwxJ2RlZmluZScsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGhfZmNudGw9XCknZmFsc2UnLFwxJ3RydWUnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsLWZzdGFjay1wcm90ZWN0b3IsLWZuby1zdGFjay1wcm90ZWN0b3IsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicywtbG5zbCwsZyIgXAorICAgICAgICAgICAgICAgICAgICBjb25maWcuc2gtJHtUQVJHRVRfQVJDSH0tJHtUQVJHRVRfT1N9CisgICAgICAgIGZpCisKKwkke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xhcmdlZmlsZScsICcnLCAnZG9fbm9sYXJnZWZpbGUnLCBkKX0KKworICAgICAgICAjIFVwZGF0ZSBzb21lIHBhdGhzIGluIHRoZSBjb25maWd1cmF0aW9uCisgICAgICAgIHNlZCAtaSAtZSAncyxAQVJDSEAtdGhyZWFkLW11bHRpLCxnJyBcCisgICAgICAgICAgICAgICAtZSAncyxAQVJDSEAsJHtUQVJHRVRfQVJDSH0tJHtUQVJHRVRfT1N9LGcnIFwKKyAgICAgICAgICAgICAgIC1lICdzLEBTVEFHSU5HRElSQCwke1NUQUdJTkdfRElSX0hPU1R9LGcnIFwKKyAgICAgICAgICAgICAgIC1lICJzLEBJTkNMVURFRElSQCwke1NUQUdJTkdfSU5DRElSfSxnIiBcCisgICAgICAgICAgICAgICAtZSAicyxATElCRElSQCwke2xpYmRpcn0sZyIgXAorICAgICAgICAgICAgICAgLWUgInMsQEJBU0VMSUJESVJALCR7YmFzZV9saWJkaXJ9LGciIFwKKyAgICAgICAgICAgICAgIC1lICJzLEBFWEVDUFJFRklYQCwke2V4ZWNfcHJlZml4fSxnIiBcCisgICAgICAgICAgICAgICAtZSAncyxAVVNSQklOQCwke2JpbmRpcn0sZycgXAorICAgICAgICAgICAgY29uZmlnLnNoLSR7VEFSR0VUX0FSQ0h9LSR7VEFSR0VUX09TfQorCisJY2FzZSAiJHtUQVJHRVRfQVJDSH0iIGluCisJCXg4Nl82NCB8IHBvd2VycGMgfCBzMzkwKQorCQkJc2VkIC1pIC1lICJzLFwobmVlZF92YV9jb3B5PVwpJ3VuZGVmJyxcMSdkZWZpbmUnLGciIFwKKwkJCQljb25maWcuc2gtJHtUQVJHRVRfQVJDSH0tJHtUQVJHRVRfT1N9CisJCQk7OworCQlhcm0pCisJCQlzZWQgLWkgLWUgInMsXChkX3UzMmFsaWduPVwpJ3VuZGVmJyxcMSdkZWZpbmUnLGciIFwKKwkJCQljb25maWcuc2gtJHtUQVJHRVRfQVJDSH0tJHtUQVJHRVRfT1N9CisJCQk7OworCWVzYWMKKyAgICAgICAgIyBUaGVzZSBhcmUgc3RyZXduIGFsbCBvdmVyIHRoZSBzb3VyY2UgdHJlZQorICAgICAgICBmb3IgZm9vIGluIGBncmVwIC1JIC0tZXhjbHVkZT0iKi5wYXRjaCIgLS1leGNsdWRlPSIqLmRpZmYiIC0tZXhjbHVkZT0iKi5wb2QiIC0tZXhjbHVkZT0iUkVBRE1FKiIgLW0xICIvdXNyL2luY2x1ZGUvLipcLmgiICR7U30vKiAtciAtbGAgJHtTfS91dGlscy9oMnhzLlBMIDsgZG8KKyAgICAgICAgICAgIGVjaG8gRml4aW5nOiAkZm9vCisgICAgICAgICAgICBzZWQgLWUgJ3N8XChbICJeJ1wnJ0ldXCtcKS91c3IvaW5jbHVkZS98XDEke1NUQUdJTkdfSU5DRElSfS98ZycgLWkgJGZvbworICAgICAgICBkb25lCisKKyAgICAgICAgcm0gLWYgY29uZmlnCisgICAgICAgIGVjaG8gIkFSQ0ggPSAke1RBUkdFVF9BUkNIfSIgPiBjb25maWcKKyAgICAgICAgZWNobyAiT1MgPSAke1RBUkdFVF9PU30iID4+IGNvbmZpZworfQorCitkb19jb21waWxlKCkgeworICAgICAgICAjIEZpeCB0byBhdm9pZCByZWN1cnNpdmUgc3Vic3RpdHV0aW9uIG9mIHBhdGgKKyAgICAgICAgc2VkIC1pIC1lICdzfChAbGlicGF0aCwgIi4qInwoQGxpYnBhdGgsICIke1NUQUdJTkdfTElCRElSfSJ8ZycgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL0xpYmxpc3QvS2lkLnBtCisKKyAgICAgICAgY2QgQ3Jvc3MKKyAgICAgICAgb2VfcnVubWFrZSBwZXJsIExEPSIke0NDTER9IgorfQorCitkb19pbnN0YWxsKCkgeworCSNleHBvcnQgaG9zdHBlcmw9IiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZS9wZXJsJHtQVn0iCisJb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfQorICAgICAgICAjIEFkZCBwZXJsIHBvaW50aW5nIGF0IGN1cnJlbnQgdmVyc2lvbgorICAgICAgICBsbiAtc2YgcGVybCR7UFZ9ICR7RH0ke2JpbmRpcn0vcGVybAorCisgICAgICAgIGxuIC1zZiBwZXJsICR7RH0vJHtsaWJkaXJ9L3Blcmw1CisKKyAgICAgICAgIyBSZW1vdmUgdW53YW50ZWQgZmlsZSBhbmQgZW1wdHkgZGlyZWN0b3JpZXMKKyAgICAgICAgcm0gLWYgJHtEfS8ke2xpYmRpcn0vcGVybC8ke1BWfS8ucGFja2xpc3QKKwlybWRpciAke0R9LyR7bGliZGlyfS9wZXJsL3NpdGVfcGVybC8ke1BWfQorCXJtZGlyICR7RH0vJHtsaWJkaXJ9L3Blcmwvc2l0ZV9wZXJsCisKKyAgICAgICAgIyBGaXggdXAgc2hhcmVkIGxpYnJhcnkKKyAgICAgICAgbXYgJHtEfS8ke2xpYmRpcn0vcGVybC8ke1BWfS9DT1JFL2xpYnBlcmwuc28gJHtEfS8ke2xpYmRpcn0vbGlicGVybC5zby4ke1BWfQorICAgICAgICBsbiAtc2YgbGlicGVybC5zby4ke1BWfSAke0R9LyR7bGliZGlyfS9saWJwZXJsLnNvLjUKKyAgICAgICAgbG4gLXNmIC4uLy4uLy4uL2xpYnBlcmwuc28uJHtQVn0gJHtEfS8ke2xpYmRpcn0vcGVybC8ke1BWfS9DT1JFL2xpYnBlcmwuc28KKworICAgICAgICAjIHRhcmdldCBjb25maWcsIHVzZWQgYnkgY3Bhbi5iYmNsYXNzIHRvIGV4dHJhY3QgdmVyc2lvbiBpbmZvcm1hdGlvbgorICAgICAgICBpbnN0YWxsIGNvbmZpZy5zaCAke0R9JHtsaWJkaXJ9L3BlcmwKKworICAgICAgICBsbiAtcyBDb25maWdfaGVhdnkucGwgJHtEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0NvbmZpZ19oZWF2eS10YXJnZXQucGwKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrICgpIHsKKyAgICAgICAgY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmluZGlyfS9wZXJsIFwKKyAgICAgICAgICAgIFBFUkw1TElCPSckUEVSTDVMSUI6JE9FQ09SRV9OQVRJVkVfU1lTUk9PVC8ke2xpYmRpcl9uYXRpdmVzZGt9L3Blcmw6JE9FQ09SRV9OQVRJVkVfU1lTUk9PVC8ke2xpYmRpcl9uYXRpdmVzZGt9L3BlcmwvJHtQVn06JE9FQ09SRV9OQVRJVkVfU1lTUk9PVC8ke2xpYmRpcl9uYXRpdmVzZGt9L3Blcmwvc2l0ZV9wZXJsLyR7UFZ9OiRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvJHtsaWJkaXJfbmF0aXZlc2RrfS9wZXJsL3ZlbmRvcl9wZXJsLyR7UFZ9JworfQorCitQQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1MgKz0gInBlcmxfcGFja2FnZV9wcmVwcm9jZXNzIgorCitwZXJsX3BhY2thZ2VfcHJlcHJvY2VzcyAoKSB7CisgICAgICAgICMgRml4IHVwIGluc3RhbGxlZCBjb25maWd1cmF0aW9uCisgICAgICAgIHNlZCAtaSAtZSAicywke0R9LCxnIiBcCisgICAgICAgICAgICAgICAtZSAicywtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9IT1NUfSwsZyIgXAorICAgICAgICAgICAgICAgLWUgInMsLWlzeXN0ZW0ke1NUQUdJTkdfSU5DRElSfSAsLGciIFwKKyAgICAgICAgICAgICAgIC1lICJzLCR7U1RBR0lOR19MSUJESVJ9LCR7bGliZGlyfSxnIiBcCisgICAgICAgICAgICAgICAtZSAicywke1NUQUdJTkdfQklORElSfSwke2JpbmRpcn0sZyIgXAorICAgICAgICAgICAgICAgLWUgInMsJHtTVEFHSU5HX0lOQ0RJUn0sJHtpbmNsdWRlZGlyfSxnIiBcCisgICAgICAgICAgICAgICAtZSAicywke1NUQUdJTkdfQklORElSX05BVElWRX0vcGVybC1uYXRpdmUvLCR7YmluZGlyfS8sZyIgXAorICAgICAgICAgICAgICAgLWUgInMsJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LywsZyIgXAorICAgICAgICAgICAgICAgLWUgInMsJHtTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU59LyR7VEFSR0VUX1BSRUZJWH0sJHtiaW5kaXJ9LGciIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2JpbmRpcn0vaDJ4cyBcCisgICAgICAgICAgICAke1BLR0R9JHtiaW5kaXJ9L2gycGggXAorICAgICAgICAgICAgJHtQS0dEfSR7YmluZGlyfS9wb2QybWFuIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2JpbmRpcn0vcG9kMnRleHQgXAorICAgICAgICAgICAgJHtQS0dEfSR7YmluZGlyfS9wb2QydXNhZ2UgXAorICAgICAgICAgICAgJHtQS0dEfSR7YmluZGlyfS9wb2RjaGVja2VyIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2JpbmRpcn0vcG9kc2VsZWN0IFwKKyAgICAgICAgICAgICR7UEtHRH0ke2xpYmRpcn0vcGVybC8ke1BWfS9DT1JFL2NvbmZpZy5oIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2xpYmRpcn0vcGVybC8ke1BWfS9DT1JFL3BlcmwuaCBcCisgICAgICAgICAgICAke1BLR0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ09SRS9wcC5oIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2xpYmRpcn0vcGVybC8ke1BWfS9Db25maWcucG0gXAorICAgICAgICAgICAgJHtQS0dEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0NvbmZpZy5wb2QgXAorICAgICAgICAgICAgJHtQS0dEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0NvbmZpZ19oZWF2eS5wbCBcCisgICAgICAgICAgICAke1BLR0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vRXh0VXRpbHMvTGlibGlzdC9LaWQucG0gXAorICAgICAgICAgICAgJHtQS0dEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0ZpbGVDYWNoZS5wbSBcCisgICAgICAgICAgICAke1BLR0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vcG9kLyoucG9kIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2xpYmRpcn0vcGVybC9jb25maWcuc2gKK30KKworUEFDS0FHRVMgPSAicGVybC1kYmcgcGVybCBwZXJsLW1pc2MgcGVybC1kZXYgcGVybC1wb2QgcGVybC1kb2MgcGVybC1saWIgXAorICAgICAgICAgICAgcGVybC1tb2R1bGUtY3BhbiBwZXJsLW1vZHVsZS1jcGFucGx1cyBwZXJsLW1vZHVsZS11bmljb3JlIgorRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L3BlcmwgJHtiaW5kaXJ9L3Blcmwke1BWfSBcCisgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9Db25maWcucG0gXAorICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vc3RyaWN0LnBtIFwKKyAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L3dhcm5pbmdzLnBtIFwKKyAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L3dhcm5pbmdzIFwKKyAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L3ZhcnMucG0gXAorICAgICAgICAgICAgICAiCitGSUxFU18ke1BOfV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiAke2JpbmRpcn0vcGVybC5yZWFsIgorUlBST1ZJREVTXyR7UE59ICs9ICJwZXJsLW1vZHVsZS1zdHJpY3QgcGVybC1tb2R1bGUtdmFycyBwZXJsLW1vZHVsZS1jb25maWcgcGVybC1tb2R1bGUtd2FybmluZ3MgXAorICAgICAgICAgICAgICAgICAgICBwZXJsLW1vZHVsZS13YXJuaW5ncy1yZWdpc3RlciIKK0ZJTEVTXyR7UE59LWRldiA9ICIke2xpYmRpcn0vcGVybC8ke1BWfS9DT1JFIgorRklMRVNfJHtQTn0tbGliID0gIiR7bGliZGlyfS9saWJwZXJsLnNvKiBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3Blcmw1IFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC9jb25maWcuc2ggXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0NvbmZpZ19oZWF2eS5wbCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ29uZmlnX2hlYXZ5LXRhcmdldC5wbCIKK0ZJTEVTXyR7UE59LXBvZCA9ICIke2xpYmRpcn0vcGVybC8ke1BWfS9wb2QgXAorCQkgICAke2xpYmRpcn0vcGVybC8ke1BWfS8qLnBvZCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vKi8qLnBvZCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vKi8qLyoucG9kICIKK0ZJTEVTX3BlcmwtbWlzYyA9ICIke2JpbmRpcn0vKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3BlcmwvJHtQVn0vYXV0by8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L2F1dG8vKi8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L2F1dG8vKi8qLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ09SRS8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9LyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS8qLyovKi8uZGVidWcgIgorRklMRVNfJHtQTn0tZG9jID0gIiR7bGliZGlyfS9wZXJsLyR7UFZ9LyovKi50eHQgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9LyovKi8qLnR4dCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vYXV0by9YUy9UeXBlbWFwIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9CL2Fzc2VtYmxlIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9CL2NjX2hhcm5lc3MgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0IvZGlzYXNzZW1ibGUgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0IvbWFrZWxpYmxpbmtzIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9DR0kvZWcgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0NQQU4vUEFVU0UyMDAzLnB1YiBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ1BBTi9TSUdOQVRVUkUgXAorCQkgICAke2xpYmRpcn0vcGVybC8ke1BWfS9DUEFOUExVUy9TaGVsbC9EZWZhdWx0L1BsdWdpbnMvSE9XVE8ucG9kIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9FbmNvZGUvZW5jb2RlLmggXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0V4dFV0aWxzL01BTklGRVNULlNLSVAgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0V4dFV0aWxzL05PVEVTIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9FeHRVdGlscy9QQVRDSElORyBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vRXh0VXRpbHMvdHlwZW1hcCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vRXh0VXRpbHMveHN1YnBwIFwKKwkJICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vRXh0VXRpbHMvQ2hhbmdlc19FVS1JbnN0YWxsIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9OZXQvKi5lZyBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vdW5pY29yZS9ta3RhYmxlcyBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vdW5pY29yZS9ta3RhYmxlcy5sc3QgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L3VuaWNvcmUvdmVyc2lvbiAiCisKK0ZJTEVTX3BlcmwtbW9kdWxlLWNwYW4gKz0gIiR7bGliZGlyfS9wZXJsLyR7UFZ9L0NQQU4gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ1BBTi5wbSIKK0ZJTEVTX3BlcmwtbW9kdWxlLWNwYW5wbHVzICs9ICIke2xpYmRpcn0vcGVybC8ke1BWfS9DUEFOUExVUyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ1BBTlBMVVMucG0iCitGSUxFU19wZXJsLW1vZHVsZS11bmljb3JlICs9ICIke2xpYmRpcn0vcGVybC8ke1BWfS91bmljb3JlIgorCisjIENyZWF0ZSBhIHBlcmwtbW9kdWxlcyBwYWNrYWdlIHJlY29tbWVuZGluZyBhbGwgdGhlIG90aGVyIHBlcmwKKyMgcGFja2FnZXMgKGFjdHVhbGx5IHRoZSBub24gbW9kdWxlcyBwYWNrYWdlcyBhbmQgbm90IGNyZWF0ZWQgdG9vKQorQUxMT1dfRU1QVFlfcGVybC1tb2R1bGVzID0gIjEiCitQQUNLQUdFU19hcHBlbmQgPSAiIHBlcmwtbW9kdWxlcyAiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBsaWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L3BlcmwvJHtQVn0nKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxpYmRpciwgJ2F1dG8vKFteLl0qKS9bXi9dKlwuKHNvfGxkfGl4fGFsKScsICdwZXJsLW1vZHVsZS0lcycsICdwZXJsIG1vZHVsZSAlcycsIHJlY3Vyc2l2ZT1UcnVlLCBtYXRjaF9wYXRoPVRydWUsIHByZXBlbmQ9RmFsc2UpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgbGliZGlyLCAnTW9kdWxlLyhbXlwvXSopXC5wbScsICdwZXJsLW1vZHVsZS0lcycsICdwZXJsIG1vZHVsZSAlcycsIHJlY3Vyc2l2ZT1UcnVlLCBhbGxvd19kaXJzPUZhbHNlLCBtYXRjaF9wYXRoPVRydWUsIHByZXBlbmQ9RmFsc2UpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgbGliZGlyLCAnTW9kdWxlLyhbXlwvXSopLy4qJywgJ3BlcmwtbW9kdWxlLSVzJywgJ3BlcmwgbW9kdWxlICVzJywgcmVjdXJzaXZlPVRydWUsIGFsbG93X2RpcnM9RmFsc2UsIG1hdGNoX3BhdGg9VHJ1ZSwgcHJlcGVuZD1GYWxzZSkKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWJkaXIsICcoXig/IShDUEFOXC98Q1BBTlBMVVNcL3xNb2R1bGVcL3x1bmljb3JlXC98YXV0b1wvKVteXC9dKS4qKVwuKHBtfHBsfGUyeCknLCAncGVybC1tb2R1bGUtJXMnLCAncGVybCBtb2R1bGUgJXMnLCByZWN1cnNpdmU9VHJ1ZSwgYWxsb3dfZGlycz1GYWxzZSwgbWF0Y2hfcGF0aD1UcnVlLCBwcmVwZW5kPUZhbHNlKQorCisgICAgIyBwZXJsLW1vZHVsZXMgc2hvdWxkIHJlY29tbWVuZCBldmVyeSBwZXJsIG1vZHVsZSwgYW5kIG9ubHkgdGhlCisgICAgIyBtb2R1bGVzLiBEb24ndCBhdHRlbXB0IHRvIHVzZSB0aGUgcmVzdWx0IG9mIGRvX3NwbGl0X3BhY2thZ2VzKCkgYXMgc29tZQorICAgICMgbW9kdWxlcyBhcmUgbWFudWFsbHkgc3BsaXQgKGVnLiBwZXJsLW1vZHVsZS11bmljb3JlKS4KKyAgICBwYWNrYWdlcyA9IGZpbHRlcihsYW1iZGEgcDogJ3BlcmwtbW9kdWxlLScgaW4gcCwgZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKSkKKyAgICBkLnNldFZhcigiUlJFQ09NTUVORFNfJHtQTn0tbW9kdWxlcyIsICcgJy5qb2luKHBhY2thZ2VzKSkKK30KKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXnBlcmwtbW9kdWxlLS4qIgorUEFDS0FHRVNfRFlOQU1JQ19jbGFzcy1uYXRpdmVzZGsgKz0gIl5uYXRpdmVzZGstcGVybC1tb2R1bGUtLioiCisKK1JQUk9WSURFU19wZXJsLWxpYiA9ICJwZXJsLWxpYiIKKworcmVxdWlyZSBwZXJsLXJkZXBlbmRzXyR7UFZ9LmluYworcmVxdWlyZSBwZXJsLXB0ZXN0LmluYworCitTU1RBVEVfU0NBTl9GSUxFUyArPSAiKi5wbSAqLnBvZCAqLmggKi5wbCAqLnNoIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWcuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVhYjVjNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWcuaW5jCkBAIC0wLDAgKzEsNDkgQEAKK1NVTU1BUlkgPSAiSGVscGVyIHRvb2wgdXNlZCB3aGVuIGNvbXBpbGluZyIKK0RFU0NSSVBUSU9OID0gInBrZy1jb25maWcgaXMgYSBoZWxwZXIgdG9vbCB1c2VkIHdoZW4gY29tcGlsaW5nIGFwcGxpY2F0aW9ucyBhbmQgbGlicmFyaWVzLiBJdCBoZWxwcyBkZXRlcm1pbmVkIFwKK3RoZSBjb3JyZWN0IGNvbXBpbGVyL2xpbmsgb3B0aW9ucy4gIEl0IGlzIGFsc28gbGFuZ3VhZ2UtYWdub3N0aWMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3BrZy1jb25maWcuZnJlZWRlc2t0b3Aub3JnL3dpa2kvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvYnVnbGlzdC5jZ2k/cHJvZHVjdD1wa2ctY29uZmlnIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgorCitERVBFTkRTID0gImdsaWItMi4wIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiIgorREVQRU5EU19jbGFzcy1uYXRpdmVzZGsgPSAiIgorCitTUkNSRVYgPSAiNDAzNDJkZDBlYWQwNWQ0NTdhMmE0ZTY5MmNmODY1ZjUwMDMzYTcwOSIKK1BWID0gIjAuMjgrZ2l0JHtTUkNQVn0iCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL3BrZy1jb25maWciCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtaW50ZXJuYWwtZ2xpYiIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS13aXRoLWludGVybmFsLWdsaWIiCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlc2RrID0gIi0td2l0aC1pbnRlcm5hbC1nbGliIgorCithY3BhdGhzID0gIi1JIC4iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworIyBTZXQgYW4gZW1wdHkgZGV2IHBhY2thZ2UgdG8gZW5zdXJlIHRoZSBiYXNlIFBOIHBhY2thZ2UgZ2V0cworIyB0aGUgcGtnLm00IG1hY3JvcywgcGtnY29uZmlnIGRvZXMgbm90IGRlbGl2ZXIgYW55IG90aGVyIC1kZXYKKyMgZmlsZXMuCitGSUxFU18ke1BOfS1kZXYgPSAiIgorRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vYWNsb2NhbC9wa2cubTQiCisKKyMgV2hlbiB1c2luZyB0aGUgUlBNIGdlbmVyYXRlZCBhdXRvbWF0aWMgcGFja2FnZSBkZXBlbmRlbmNpZXMsIHNvbWUgcGFja2FnZXMKKyMgd2lsbCBlbmQgdXAgcmVxdWlyaW5nICdwa2djb25maWcocGtnLWNvbmZpZyknLiAgQWxsb3cgdGhpcyBiZWhhdmlvciBieQorIyBzcGVjaWZ5aW5nIGFuIGFwcHJvcHJpYXRlIHByb3ZpZGUuCitSUFJPVklERVNfJHtQTn0gKz0gInBrZ2NvbmZpZyhwa2ctY29uZmlnKSIKKworIyBJbnN0YWxsIGEgcGtnLWNvbmZpZy1uYXRpdmUgd3JhcHBlciB0aGF0IHdpbGwgdXNlIHRoZSBuYXRpdmUgc3lzcm9vdCBpbnN0ZWFkCisjIG9mIHRoZSBNQUNISU5FIHN5c3Jvb3QsIGZvciB1c2luZyBwa2ctY29uZmlnIHdoZW4gYnVpbGRpbmcgbmF0aXZlIHRvb2xzLgorZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKyAgICBzZWQgLWUgInN8QFBBVEhfTkFUSVZFQHwke1BLR19DT05GSUdfUEFUSH18IiBcCisgICAgICAgIC1lICJzfEBMSUJESVJfTkFUSVZFQHwke1BLR19DT05GSUdfTElCRElSfXwiIFwKKyAgICAgICAgPCAke1dPUktESVJ9L3BrZy1jb25maWctbmF0aXZlLmluID4gJHtCfS9wa2ctY29uZmlnLW5hdGl2ZQorICAgIGluc3RhbGwgLW03NTUgJHtCfS9wa2ctY29uZmlnLW5hdGl2ZSAke0R9JHtiaW5kaXJ9L3BrZy1jb25maWctbmF0aXZlCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnL2ZpeC1nbGliLWNvbmZpZ3VyZS1saWJ0b29sLXVzYWdlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZy9maXgtZ2xpYi1jb25maWd1cmUtbGlidG9vbC11c2FnZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWM2MjQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZy9maXgtZ2xpYi1jb25maWd1cmUtbGlidG9vbC11c2FnZS5wYXRjaApAQCAtMCwwICsxLDQ1IEBACisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworCitJbmRleDogcGtnLWNvbmZpZy0wLjI4L2dsaWIvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGtnLWNvbmZpZy0wLjI4Lm9yaWcvZ2xpYi9jb25maWd1cmUuYWMKKysrKyBwa2ctY29uZmlnLTAuMjgvZ2xpYi9jb25maWd1cmUuYWMKK0BAIC0xNDM4LDcgKzE0MzgsNyBAQCBpZiB0ZXN0IHgiJGdsaWJfbmF0aXZlX3dpbjMyIiA9IHh5ZXM7IHRoCisgICBHX01PRFVMRV9MREZMQUdTPQorIGVsc2UKKyAgIGV4cG9ydCBTRUQKKy0gIEdfTU9EVUxFX0xERkxBR1M9YCguL2xpYnRvb2wgLS1jb25maWc7IGVjaG8gZXZhbCBlY2hvIFxcJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYykgfCBzaGAKKysgIEdfTU9EVUxFX0xERkxBR1M9YCguLyR7aG9zdF9hbGlhc30tbGlidG9vbCAtLWNvbmZpZzsgZWNobyBldmFsIGVjaG8gXFwkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjKSB8IHNoYAorIGZpCisgZG5sIEdfTU9EVUxFX0lNUEw9IGRvbid0IHJlc2V0LCBzbyBjbWQtbGluZSBjYW4gb3ZlcnJpZGUKKyBHX01PRFVMRV9ORUVEX1VTQ09SRT0wCitAQCAtMTUwMywxMyArMTUwMywxMyBAQCBpZiB0ZXN0ICIkR19NT0RVTEVfSU1QTCIgPSAiR19NT0RVTEVfSU1QCisgCUxERkxBR1M9IiRMREZMQUdTICRHX01PRFVMRV9MREZMQUdTIgorIGRubCAqKiogY2hlY2sgZm9yIE9TRjEvNS4wIFJUTERfR0xPQkFMIGJyb2tlbm5lc3MKKyAJZWNobyAidm9pZCBnbGliX3BsdWdpbl90ZXN0KHZvaWQpIHsgfSIgPiBwbHVnaW4uYworLQkke1NIRUxMfSAuL2xpYnRvb2wgLS1tb2RlPWNvbXBpbGUgLS10YWc9Q0MgJHtDQ30gJHtDRkxBR1N9IFwKKysJJHtTSEVMTH0gLi8ke2hvc3RfYWxpYXN9LWxpYnRvb2wgLS1tb2RlPWNvbXBpbGUgLS10YWc9Q0MgJHtDQ30gJHtDRkxBR1N9IFwKKyAJCSR7Q1BQRkxBR1N9IC1jIC1vIHBsdWdpbi5sbyBwbHVnaW4uYyA+L2Rldi9udWxsIDI+JjEKKy0JJHtTSEVMTH0gLi9saWJ0b29sIC0tbW9kZT1saW5rIC0tdGFnPUNDICR7Q0N9ICR7Q0ZMQUdTfSBcCisrCSR7U0hFTEx9IC4vJHtob3N0X2FsaWFzfS1saWJ0b29sIC0tbW9kZT1saW5rIC0tdGFnPUNDICR7Q0N9ICR7Q0ZMQUdTfSBcCisgCQkke0xERkxBR1N9IC1tb2R1bGUgLW8gcGx1Z2luLmxhIC1leHBvcnQtZHluYW1pYyBcCisgCQktc2hyZXh0ICIubyIgLWF2b2lkLXZlcnNpb24gcGx1Z2luLmxvIFwKKyAJCS1ycGF0aCAvZG9udC9jYXJlID4vZGV2L251bGwgMj4mMQorLQlldmFsIGAuL2xpYnRvb2wgLS1jb25maWcgfCBncmVwIF5vYmpkaXJgCisrCWV2YWwgYC4vJHtob3N0X2FsaWFzfS1saWJ0b29sIC0tY29uZmlnIHwgZ3JlcCBeb2JqZGlyYAorIAlBQ19DQUNIRV9DSEVDSyhbZm9yIFJUTERfR0xPQkFMIGJyb2tlbm5lc3NdLAorIAkJZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbixbCisgCQlBQ19UUllfUlVOKFsKK0BAIC0xNTgyLDcgKzE1ODIsNyBAQCBmaQorIAorIEFDX01TR19DSEVDS0lORyhmb3IgdGhlIHN1ZmZpeCBvZiBtb2R1bGUgc2hhcmVkIGxpYnJhcmllcykKKyBleHBvcnQgU0VECistc2hyZXh0X2NtZHM9YC4vbGlidG9vbCAtLWNvbmZpZyB8IGdyZXAgJ15zaHJleHRfY21kcz0nYAorK3NocmV4dF9jbWRzPWAuLyR7aG9zdF9hbGlhc30tbGlidG9vbCAtLWNvbmZpZyB8IGdyZXAgJ15zaHJleHRfY21kcz0nYAorIGV2YWwgJHNocmV4dF9jbWRzCisgbW9kdWxlPXllcyBldmFsIHN0ZF9zaHJleHQ9JHNocmV4dF9jbWRzCisgIyBjaG9wIHRoZSBpbml0aWFsIGRvdApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZy9wa2ctY29uZmlnLW5hdGl2ZS5pbiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWcvcGtnLWNvbmZpZy1uYXRpdmUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU0NGJiNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWcvcGtnLWNvbmZpZy1uYXRpdmUuaW4KQEAgLTAsMCArMSw3IEBACisjISAvYmluL3NoCisKK1BLR19DT05GSUdfUEFUSD0iQFBBVEhfTkFUSVZFQCIKK1BLR19DT05GSUdfTElCRElSPSJATElCRElSX05BVElWRUAiCit1bnNldCBQS0dfQ09ORklHX1NZU1JPT1RfRElSCisKK3BrZy1jb25maWcgIiRAIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZ19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWE1MTFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZ19naXQuYmIKQEAgLTAsMCArMSw2IEBACityZXF1aXJlIHBrZ2NvbmZpZy5pbmMKKworU1JDX1VSSSArPSAiIFwKKyAgICAgICAgICAgIGZpbGU6Ly9wa2ctY29uZmlnLW5hdGl2ZS5pbiBcCisgICAgICAgICAgICBmaWxlOi8vZml4LWdsaWItY29uZmlndXJlLWxpYnRvb2wtdXNhZ2UucGF0Y2ggXAorICAgICAgICAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wb3N0aW5zdC1pbnRlcmNlcHQvbmF0aXZlc2RrLXBvc3RpbnN0LWludGVyY2VwdF8xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wb3N0aW5zdC1pbnRlcmNlcHQvbmF0aXZlc2RrLXBvc3RpbnN0LWludGVyY2VwdF8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RjNDVjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3Bvc3RpbnN0LWludGVyY2VwdC9uYXRpdmVzZGstcG9zdGluc3QtaW50ZXJjZXB0XzEuMC5iYgpAQCAtMCwwICsxLDE5IEBACitTVU1NQVJZID0gIlBvc3RpbnN0YWxsIHNjcmlwdGxldHMiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitGSUxFU18ke1BOfV9hcHBlbmQgPSAiICR7ZGF0YWRpcn0vcG9zdGluc3QtaW50ZXJjZXB0cy8qIgorCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgorZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9wb3N0aW5zdC1pbnRlcmNlcHRzCisJaW5zdGFsbCAtbSA3NTUgJHtDT1JFQkFTRX0vc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3Bvc3RpbnN0X2ludGVyY2VwdCAke0R9JHtkYXRhZGlyfS9wb3N0aW5zdC1pbnRlcmNlcHRzLworCWluc3RhbGwgLW0gNzU1ICR7Q09SRUJBU0V9L3NjcmlwdHMvcG9zdGluc3QtaW50ZXJjZXB0cy91cGRhdGVfZm9udF9jYWNoZSAke0R9JHtkYXRhZGlyfS9wb3N0aW5zdC1pbnRlcmNlcHRzLworCWluc3RhbGwgLW0gNzU1ICR7Q09SRUJBU0V9L3NjcmlwdHMvcG9zdGluc3QtaW50ZXJjZXB0cy91cGRhdGVfaWNvbl9jYWNoZSAke0R9JHtkYXRhZGlyfS9wb3N0aW5zdC1pbnRlcmNlcHRzLworCWluc3RhbGwgLW0gNzU1ICR7Q09SRUJBU0V9L3NjcmlwdHMvcG9zdGluc3QtaW50ZXJjZXB0cy91cGRhdGVfcGl4YnVmX2NhY2hlICR7RH0ke2RhdGFkaXJ9L3Bvc3RpbnN0LWludGVyY2VwdHMvCit9CisKK2luaGVyaXQgbmF0aXZlc2RrCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rL21hY3Jvcy5wcmVsaW5rIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rL21hY3Jvcy5wcmVsaW5rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMTY2OTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmsvbWFjcm9zLnByZWxpbmsKQEAgLTAsMCArMSw1IEBACisjIHJwbS00LjEgdmVyaWZpZXMgcHJlbGlua2VkIGxpYnJhcmllcyB1c2luZyBhIHByZWxpbmsgdW5kbyBoZWxwZXIuCisjICAgICAgIE5vdGU6IFRoZSAybmQgdG9rZW4gaXMgdXNlZCBhcyBhcmd2WzBdIGFuZCAibGlicmFyeSIgaXMgYQorIyAgICAgICBwbGFjZWhvbGRlciB0aGF0IHdpbGwgYmUgZGVsZXRlZCBhbmQgcmVwbGFjZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUKKyMgICAgICAgbGlicmFyeSBmaWxlIHBhdGguCislX19wcmVsaW5rX3VuZG9fY21kICAgICAvdXNyL3NiaW4vcHJlbGluayBwcmVsaW5rIC15IGxpYnJhcnkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9wcmVsaW5rLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmsvcHJlbGluay5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MmYyM2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmsvcHJlbGluay5jb25mCkBAIC0wLDAgKzEsMTggQEAKKyMgVGhpcyBjb25maWcgZmlsZSBjb250YWlucyBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgYm90aCB3aXRoIGJpbmFyaWVzCisjIGFuZCBsaWJyYXJpZXMgcHJlbGluayBzaG91bGQgY29uc2lkZXIgYnkgZGVmYXVsdC4KKyMgSWYgYSBkaXJlY3RvcnkgbmFtZSBpcyBwcmVmaXhlZCB3aXRoIGAtbCAnLCB0aGUgZGlyZWN0b3J5IGhpZXJhcmNoeQorIyB3aWxsIGJlIHdhbGtlZCBhcyBsb25nIGFzIGZpbGVzeXN0ZW0gYm91bmRhcmllcyBhcmUgbm90IGNyb3NzZWQuCisjIElmIGEgZGlyZWN0b3J5IG5hbWUgaXMgcHJlZml4ZWQgd2l0aCBgLWggJywgc3ltYm9saWMgbGlua3MgaW4gYQorIyBkaXJlY3RvcnkgaGllcmFyY2h5IGFyZSBmb2xsb3dlZC4KKy1sIC91c3IvbG9jYWwvc2JpbgorLWwgL3NiaW4KKy1sIC91c3Ivc2JpbgorLWwgL3Vzci9sb2NhbC9iaW4KKy1sIC9iaW4KKy1sIC91c3IvYmluCistbCAvdXNyL1gxMVI2L2JpbgorLWwgL3Vzci9nYW1lcworLWwgL3Vzci9sb2NhbC9saWJ7LDMyLDY0LHgzMn0KKy1sIC9saWJ7LDMyLDY0LHgzMn0KKy1sIC91c3IvbGlieywzMiw2NCx4MzJ9CistbCAvdXNyL1gxMVI2L2xpYnssMzIsNjQseDMyfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rL3ByZWxpbmsuY3Jvbi5kYWlseSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9wcmVsaW5rLmNyb24uZGFpbHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIzYzA3MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9wcmVsaW5rLmNyb24uZGFpbHkKQEAgLTAsMCArMSw0MCBAQAorIyEvYmluL3NoCisKKy4gL2V0Yy9kZWZhdWx0L3ByZWxpbmsKKworcmVuaWNlICsxOSAtcCAkJCA+L2Rldi9udWxsIDI+JjEKKworaWYgWyAiJFBSRUxJTktJTkciICE9IHllcyBdOyB0aGVuCisgIGlmIFsgLWYgL2V0Yy9wcmVsaW5rLmNhY2hlIF07IHRoZW4KKyAgICBlY2hvIC91c3Ivc2Jpbi9wcmVsaW5rIC11YXYgPiAvdmFyL2xvZy9wcmVsaW5rLmxvZworICAgIC91c3Ivc2Jpbi9wcmVsaW5rIC11YXYgPj4gL3Zhci9sb2cvcHJlbGluay5sb2cgMj4mMQorICAgIHJtIC1mIC9ldGMvcHJlbGluay5jYWNoZQorICAgICMgUmVzdGFydCBpbml0IGlmIG5lZWRlZAorICAgIFsgLW4gIiQoZmluZCBgbGRkIC9zYmluL2luaXQgfCBhd2sgJ3sgcHJpbnQgJDMgfSdgIC9zYmluL2luaXQgLWN0aW1lIC0xIDI+L2Rldi9udWxsICkiIF0gJiYgL3NiaW4vdGVsaW5pdCB1CisgIGZpCisgIGV4aXQgMAorZmkKKworaWYgWyAhIC1mIC9ldGMvcHJlbGluay5jYWNoZSAtbyAtZiAvdmFyL2xpYi9taXNjL3ByZWxpbmsuZm9yY2UgXSBcCisgICB8fCBncmVwIC1xICdecHJlbGluay1FTEYwLlswLTJdJyAvZXRjL3ByZWxpbmsuY2FjaGU7IHRoZW4KKyAgIyBJZiBjYWNoZSBkb2VzIG5vdCBleGlzdCBvciBpcyBmcm9tIG9sZGVyIHByZWxpbmsgdmVyc2lvbnMgb3IKKyAgIyBpZiB3ZSB3ZXJlIGFza2VkIHRvIGV4cGxpY2l0ZWx5LCBmb3JjZSBmdWxsIHByZWxpbmtpbmcKKyAgcm0gLWYgL2V0Yy9wcmVsaW5rLmNhY2hlIC92YXIvbGliL21pc2MvcHJlbGluay5mb3JjZQorICBQUkVMSU5LX09QVFM9IiRQUkVMSU5LX09QVFMgLWYiCisgIGRhdGUgPiAvdmFyL2xpYi9taXNjL3ByZWxpbmsuZnVsbAorZWxpZiBbIC1uICIkUFJFTElOS19GVUxMX1RJTUVfSU5URVJWQUwiIFwKKyAgICAgICAtYSAiYGZpbmQgL3Zhci9saWIvbWlzYy9wcmVsaW5rLmZ1bGwgLW10aW1lIC0ke1BSRUxJTktfRlVMTF9USU1FX0lOVEVSVkFMfSAyPi9kZXYvbnVsbGAiIFwKKwkgID0gL3Zhci9saWIvbWlzYy9wcmVsaW5rLmZ1bGwgXTsgdGhlbgorICAjIElmIHByZWxpbmsgd2l0aG91dCAtcSBoYXMgYmVlbiBydW4gaW4gdGhlIGxhc3QKKyAgIyBQUkVMSU5LX0ZVTExfVElNRV9JTlRFUlZBTCBkYXlzLCBqdXN0IHVzZSBxdWljayBtb2RlCisgIFBSRUxJTktfT1BUUz0iJFBSRUxJTktfT1BUUyAtcSIKK2Vsc2UKKyAgZGF0ZSA+IC92YXIvbGliL21pc2MvcHJlbGluay5mdWxsCitmaQorCitlY2hvIC91c3Ivc2Jpbi9wcmVsaW5rIC1hdiAkUFJFTElOS19PUFRTID4gL3Zhci9sb2cvcHJlbGluay5sb2cKKy91c3Ivc2Jpbi9wcmVsaW5rIC1hdiAkUFJFTElOS19PUFRTID4+IC92YXIvbG9nL3ByZWxpbmsubG9nIDI+JjEKKyMgUmVzdGFydCBpbml0IGlmIG5lZWRlZAorWyAtbiAiJChmaW5kIGBsZGQgL3NiaW4vaW5pdCB8IGF3ayAneyBwcmludCAkMyB9J2AgL3NiaW4vaW5pdCAtY3RpbWUgLTEgMj4vZGV2L251bGwgKSIgXSAmJiAvc2Jpbi90ZWxpbml0IHUKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmsvcHJlbGluay5kZWZhdWx0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rL3ByZWxpbmsuZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODgwMmY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rL3ByZWxpbmsuZGVmYXVsdApAQCAtMCwwICsxLDIyIEBACisjIFNldCB0aGlzIHRvIG5vIHRvIGRpc2FibGUgcHJlbGlua2luZyBhbHRvZ2V0aGVyCisjIG9yIHRvIHllcyB0byBlbmFibGUgaXQuCisjIChpZiB5b3UgY2hhbmdlIHRoaXMgZnJvbSB5ZXMgdG8gbm8gcHJlbGluayAtdWEKKyMgd2lsbCBiZSBydW4gbmV4dCBuaWdodCB0byB1bmRvIHByZWxpbmtpbmcpCitQUkVMSU5LSU5HPXllcworCisjIE9wdGlvbnMgdG8gcGFzcyB0byBwcmVsaW5rCisjIC1tCVRyeSB0byBjb25zZXJ2ZSB2aXJ0dWFsIG1lbW9yeSBieSBhbGxvd2luZyBvdmVybGFwcGluZworIwlhc3NpZ25lZCB2aXJ0dWFsIG1lbW9yeSBzbG90cyBmb3IgbGlicmFyaWVzIHdoaWNoCisjCW5ldmVyIGFwcGVhciB0b2dldGhlciBpbiBvbmUgYmluYXJ5CisjIC1SCVJhbmRvbWl6ZSB2aXJ0dWFsIG1lbW9yeSBzbG90IGFzc2lnbm1lbnRzIGZvciBsaWJyYXJpZXMuCisjCVRoaXMgbWFrZXMgaXQgc2xpZ2h0bHkgaGFyZGVyIGZvciB2YXJpb3VzIGJ1ZmZlciBvdmVyZmxvdworIwlhdHRhY2tzLCBzaW5jZSBsaWJyYXJ5IGFkZHJlc3NlcyB3aWxsIGJlIGRpZmZlcmVudCBvbiBlYWNoCisjCWhvc3QgdXNpbmcgLVIuCitQUkVMSU5LX09QVFM9LW1SCisKKyMgSG93IG9mdGVuIHNob3VsZCBmdWxsIHByZWxpbmsgYmUgcnVuIChpbiBkYXlzKQorIyBOb3JtYWxseSwgcHJlbGluayB3aWxsIGJlIHJ1biBpbiBxdWljayBtb2RlLCBldmVyeQorIyAkUFJFTElOS19GVUxMX1RJTUVfSU5URVJWQUwgZGF5cyBpdCB3aWxsIGJlIHJ1bgorIyBpbiBub3JtYWwgbW9kZS4gIENvbW1lbnQgdGhpcyBsaW5lIG91dCBpZiBwcmVsaW5rIAorIyBzaG91bGQgYmUgcnVuIGluIG5vcm1hbCBtb2RlIGFsd2F5cy4KK1BSRUxJTktfRlVMTF9USU1FX0lOVEVSVkFMPTE0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmtfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmY2OTE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rX2dpdC5iYgpAQCAtMCwwICsxLDgxIEBACitTRUNUSU9OID0gImRldmVsIgorIyBOZWVkIGJpbnV0aWxzIGZvciBsaWJpYmVydHkuYQorIyBXb3VsZCBuZWVkIHRyYW5zZmlnLW5hdGl2ZSBmb3IgZG9jdW1lbnRhdGlvbiBpZiBpdCB3YXNuJ3QgZGlzYWJsZWQKK0RFUEVORFMgPSAiZWxmdXRpbHMgYmludXRpbHMiCitTVU1NQVJZID0gIkFuIEVMRiBwcmVsaW5raW5nIHV0aWxpdHkiCitERVNDUklQVElPTiA9ICJUaGUgcHJlbGluayBwYWNrYWdlIGNvbnRhaW5zIGEgdXRpbGl0eSB3aGljaCBtb2RpZmllcyBFTEYgc2hhcmVkIGxpYnJhcmllcyBcCithbmQgZXhlY3V0YWJsZXMsIHNvIHRoYXQgZmFyIGZld2VyIHJlbG9jYXRpb25zIG5lZWQgdG8gYmUgcmVzb2x2ZWQgYXQgXAorcnVudGltZSBhbmQgdGh1cyBwcm9ncmFtcyBjb21lIHVwIGZhc3Rlci4iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzkzYzA1NTBiZDMxNzNmNDUwNGIyY2JkODk5MWU1MGIiCitTUkNSRVYgPSAiNDAzMjdmYjk5NjU0ZTk2ZGI2ZWYxNWUyZjJkNWVmMTQwYWMzZTk5OCIKK1BWID0gIjEuMCtnaXQke1NSQ1BWfSIKKworIworIyBUaGUgY3JvbiBzY3JpcHQgYXR0ZW1wdHMgdG8gcmUtcHJlbGluayB0aGUgc3lzdGVtIGRhaWx5IC0tIG9uCisjIHN5c3RlbXMgd2hlcmUgdXNlcnMgYXJlIGFkZGluZyBhcHBsaWNhdGlvbnMsIHRoaXMgbWlnaHQgYmUgcmVhc29uYWJsZQorIyBidXQgZm9yIGVtYmVkZGVkLCB3ZSBzaG91bGQgYmUgcmUtcnVubmluZyBwcmVsaW5rIC1hIGFmdGVyIGFuIHVwZGF0ZS4KKyMKKyMgRGVmYXVsdCBpcyBwcmVsaW5raW5nIGlzIGVuYWJsZWQuCisjCitTVU1NQVJZXyR7UE59LWNyb24gPSAiQ3JvbiBzY3JpcHRzIHRvIGNvbnRyb2wgYXV0b21hdGljIHByZWxpbmtpbmciCitERVNDUklQVElPTl8ke1BOfS1jcm9uID0gIkNyb24gc2NyaXB0cyB0byBjb250cm9sIGF1dG9tYXRpYyBwcmVsaW5raW5nLiAgXAorU2VlOiAke3N5c2NvbmZkaXJ9L2Nyb24uZGFpbHkvcHJlbGluayBmb3IgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4iCisKK0ZJTEVTXyR7UE59LWNyb24gPSAiJHtzeXNjb25mZGlyfS9jcm9uLmRhaWx5ICR7c3lzY29uZmRpcn0vZGVmYXVsdCIKKworUEFDS0FHRVMgPSsgIiR7UE59LWNyb24iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcHJlbGluay1jcm9zcy5naXQ7YnJhbmNoPWNyb3NzX3ByZWxpbmsgXAorICAgICAgICAgICBmaWxlOi8vcHJlbGluay5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL3ByZWxpbmsuY3Jvbi5kYWlseSBcCisgICAgICAgICAgIGZpbGU6Ly9wcmVsaW5rLmRlZmF1bHQgXAorCSAgIGZpbGU6Ly9tYWNyb3MucHJlbGluayIKKworVEFSR0VUX09TX09SSUcgOj0gIiR7VEFSR0VUX09TfSIKK09WRVJSSURFU19hcHBlbmQgPSAiOiR7VEFSR0VUX09TX09SSUd9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0L3RydW5rIgorCitpbmhlcml0IGF1dG90b29scyAKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtc2VsaW51eCAtLXdpdGgtcGtndmVyc2lvbj0ke1BWfS0ke1BSfSBcCisJLS13aXRoLWJ1Z3VybD1odHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgICAgICAgIyBEaXNhYmxlIGRvY3VtZW50YXRpb24hCisgICAgICAgIGVjaG8gImFsbDoiID4gJHtTfS9kb2MvTWFrZWZpbGUuYW0KK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vY3Jvbi5kYWlseSAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0ICR7RH0ke3N5c2NvbmZkaXJ9L3JwbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3ByZWxpbmsuY29uZiAke0R9JHtzeXNjb25mZGlyfS9wcmVsaW5rLmNvbmYKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9wcmVsaW5rLmNyb24uZGFpbHkgJHtEfSR7c3lzY29uZmRpcn0vY3Jvbi5kYWlseS9wcmVsaW5rCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcHJlbGluay5kZWZhdWx0ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvcHJlbGluaworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L21hY3Jvcy5wcmVsaW5rICR7RH0ke3N5c2NvbmZkaXJ9L3JwbS9tYWNyb3MucHJlbGluaworfQorCisjIElmIHdlJ3JlIHVzaW5nIGltYWdlLXByZWxpbmssIHdlIHdhbnQgdG8gc2tpcCB0aGlzIG9uIHRoZSBob3N0IHNpZGUKKyMgYnV0IHN0aWxsIGRvIGl0IGlmIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZCBvbiB0aGUgdGFyZ2V0Li4uCitwa2dfcG9zdGluc3RfcHJlbGluaygpIHsKKyMhL2Jpbi9zaAorCitpZiBbICJ4JEQiICE9ICJ4IiBdOyB0aGVuCisgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdVU0VSX0NMQVNTRVMnLCAnaW1hZ2UtcHJlbGluaycsICdleGl0IDAnLCAnZXhpdCAxJywgZCl9CitmaQorCitwcmVsaW5rIC1hCit9CisKK3BrZ19wcmVybV9wcmVsaW5rKCkgeworIyEvYmluL3NoCisKK2lmIFsgIngkRCIgIT0gIngiIF07IHRoZW4KKyAgZXhpdCAxCitmaQorCitwcmVsaW5rIC1hdQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvZmFsbGJhY2stZ3JvdXAgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvZmFsbGJhY2stZ3JvdXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFiZjczMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy9mYWxsYmFjay1ncm91cApAQCAtMCwwICsxLDIgQEAKK3Jvb3Q6KjowOgorbWFpbDoqOjg6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvZmFsbGJhY2stcGFzc3dkIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzL2ZhbGxiYWNrLXBhc3N3ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTQ1OGRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzL2ZhbGxiYWNrLXBhc3N3ZApAQCAtMCwwICsxIEBACityb290OjowOjA6cm9vdDovaG9tZS9yb290Oi9iaW4vc2gKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG8uaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkby5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUxMjI1OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG8uaW5jCkBAIC0wLDAgKzEsMTM1IEBACisjIE5vdGU6IER1ZSB0byB0aGUgYml0YmFrZSB3cmFwcGVyIHNjcmlwdCwgbWFraW5nIGNoYW5nZXMgdG8gcHNldWRvIGNhbiBiZQorIyBkaWZmaWN1bHQuICBUbyB3b3JrIGFyb3VuZCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSB3cmFwcGVyIHVzZToKKyMgQkJGRVRDSDI9VHJ1ZSBQU0VVRE9fQlVJTEQ9MSAuLi9iaXRiYWtlL2Jpbi9iaXRiYWtlIHBzZXVkby1uYXRpdmUgWy1jIENNRF0KKworU1VNTUFSWSA9ICJQc2V1ZG8gZ2l2ZXMgZmFrZSByb290IGNhcGFiaWxpdGllcyB0byBhIG5vcm1hbCB1c2VyIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvcHNldWRvIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MjQzYjcyNWQ3MWJiNWRmNGExZTU5MjBiMzQ0Yjg2YWQiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkxHUEwyLjEiCitERVBFTkRTID0gInNxbGl0ZTMgYXR0ciIKKworRklMRVNfJHtQTn0gPSAiJHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliKi9saWJwc2V1ZG8uc28gJHtiaW5kaXJ9LyogJHtsb2NhbHN0YXRlZGlyfS9wc2V1ZG8gJHtwcmVmaXh9L3Zhci9wc2V1ZG8iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7cHJlZml4fS9saWIvcHNldWRvL2xpYiovLmRlYnVnIgorSU5TQU5FX1NLSVBfJHtQTn0gKz0gImxpYmRpciIKK0lOU0FORV9TS0lQXyR7UE59LWRiZyArPSAibGliZGlyIgorCitQUk9WSURFUyArPSAidmlydHVhbC9mYWtlcm9vdCIKKworTUFLRU9QVFMgPSAiIgorCitpbmhlcml0IHNpdGVpbmZvCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJOgorfQorCitOTzMyTElCUyA/Pz0gIjEiCitOTzMyTElCU19jbGFzcy1uYXRpdmVzZGsgPSAiMSIKKworIyBDb21waWxlIGZvciB0aGUgbG9jYWwgbWFjaGluZSBhcmNoLi4uCitkb19jb21waWxlICgpIHsKKwlpZiBbICIke1NJVEVJTkZPX0JJVFN9IiA9ICI2NCIgXTsgdGhlbgorCSAgJHtTfS9jb25maWd1cmUgJHtQU0VVRE9fRVhUUkFfT1BUU30gLS1wcmVmaXg9JHtwcmVmaXh9IC0tbGliZGlyPSR7cHJlZml4fS9saWIvcHNldWRvL2xpYiR7U0lURUlORk9fQklUU30gLS13aXRoLXNxbGl0ZS1saWI9JHtiYXNlbGlifSAtLXdpdGgtc3FsaXRlPSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7ZXhlY19wcmVmaXh9IC0tY2ZsYWdzPSIke0NGTEFHU30iIC0tYml0cz0ke1NJVEVJTkZPX0JJVFN9IC0tZW5hYmxlLXN0YXRpYy1zcWxpdGUgLS13aXRob3V0LXJwYXRoCisJZWxzZQorCSAgJHtTfS9jb25maWd1cmUgJHtQU0VVRE9fRVhUUkFfT1BUU30gLS1wcmVmaXg9JHtwcmVmaXh9IC0tbGliZGlyPSR7cHJlZml4fS9saWIvcHNldWRvL2xpYiAtLXdpdGgtc3FsaXRlLWxpYj0ke2Jhc2VsaWJ9IC0td2l0aC1zcWxpdGU9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtleGVjX3ByZWZpeH0gLS1jZmxhZ3M9IiR7Q0ZMQUdTfSIgLS1iaXRzPSR7U0lURUlORk9fQklUU30gLS1lbmFibGUtc3RhdGljLXNxbGl0ZSAtLXdpdGhvdXQtcnBhdGgKKwlmaQorCW9lX3J1bm1ha2UgJHtNQUtFT1BUU30KK30KK2RvX2NvbXBpbGVbdmFyZGVwc2V4Y2x1ZGVdID0gIlNJVEVJTkZPX0JJVFMiCisKK21heWJlX21ha2UzMigpIHsKKwkjIFdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gYnVpbGQgMzItYml0IGJpbmFyaWVzLgorCW1ha2UzMj1mYWxzZQorCWlmIFsgIiR7U0lURUlORk9fQklUU30iID0gIjY0IiBdOyB0aGVuCisJCWNhc2UgIiR7Tk8zMkxJQlN9IiBpbgorCQkwKQltYWtlMzI9dHJ1ZQorCQkJOzsKKwkJMSkJbWFrZTMyPWZhbHNlCisJCQk7OworCQkqKQkjIElmIHVuc2V0LCBidWlsZCAzMi1iaXQgaWYgd2UgdGhpbmsgd2UgY2FuLgorCQkJaWYgWyAtZSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy0zMi5oIiBdOyB0aGVuCisJCQkJbWFrZTMyPXRydWUKKwkJCWZpCisJCQk7OworCQllc2FjCisJZmkKKwlpZiAkbWFrZTMyOyB0aGVuCisJCWlmICEgWyAtZSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy0zMi5oIiBdOyB0aGVuCisJCQl3YXJuXzMyYml0X21pc3NpbmcKKwkJZWxzZQorCQkJYmJub3RlICJBdHRlbXB0aW5nIHRvIGJ1aWxkIDMyLWJpdCBsaWJwc2V1ZG8uc28gZm9yICR7UE59LiIKKwkJZmkKKwllbHNlCisJCWJibm90ZSAiQnVpbGRpbmcvaW5zdGFsbGluZyBvbmx5IDY0LWJpdCBsaWJwc2V1ZG8uc28gZm9yICR7UE59LiIKKwkJYmJub3RlICJJZiB5b3UgbmVlZCB0byBydW4gMzItYml0IGV4ZWN1dGFibGVzLCBlbnN1cmUgdGhhdCBOTzMyTElCUyBpcyBzZXQgdG8gMC4iCisJZmkKK30KK21heWJlX21ha2UzMlt2YXJkZXBzZXhjbHVkZV0gPSAiU0lURUlORk9fQklUUyIKKword2Fybl8zMmJpdF9taXNzaW5nKCkgeworCWJid2FybiAiQ2FuJ3QgZmluZCBzdHVicy0zMi5oLCBidXQgdXN1YWxseSBuZWVkIGl0IHRvIGJ1aWxkIDMyLWJpdCBsaWJwc2V1ZG8uIgorCWJid2FybiAiSWYgdGhlIGJ1aWxkIGZhaWxzLCBpbnN0YWxsIDMyLWJpdCBkZXZlbG9wZXIgcGFja2FnZXMuIgorCWJid2FybiAiSWYgeW91IGFyZSB1c2luZyAzMi1iaXQgYmluYXJpZXMsIHRoZSAzMi1iaXQgbGlicHNldWRvIGlzIE5PVCBvcHRpb25hbC4iCit9CisKKyMgVHdvIGJlbG93IGFyZSB0aGUgc2FtZQorIyBJZiBuZWNlc3NhcnkgY29tcGlsZSBmb3IgdGhlIGFsdGVybmF0aXZlIG1hY2hpbmUgYXJjaC4gIFRoaXMgaXMgb25seSAKKyMgbmVjZXNzYXJ5IGluIGEgbmF0aXZlIGJ1aWxkLgorZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisJbWF5YmVfbWFrZTMyCisJaWYgJG1ha2UzMjsgdGhlbgorCQkjIFdlIG5lZWQgdGhlIDMyLWJpdCBsaWJwc2V1ZG8gb24gYSA2NC1iaXQgbWFjaGluZS4uLgorCQkjIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCB3ZWxsLXRlc3RlZCBvdXRzaWRlIG9mIHg4Ni94ODZfNjQuCisKKwkJIyBpZiB3ZSdyZSBiZWluZyByZWJ1aWx0IGR1ZSB0byBhIGRlcGVuZGVuY3kgY2hhbmdlLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZQorCQkjIGV2ZXJ5dGhpbmcgaXMgY2xlYW4gYmVmb3JlIHdlIGNvbmZpZ3VyZSBhbmQgYnVpbGQgLS0gaWYgd2UgaGF2ZW4ndCBwcmV2aW91c2x5CisJCSMgYnVpbHQgdGhpcyB3aWxsIGZhaWwgYW5kIGJlIGlnbm9yZWQuCisJCW1ha2UgJHtNQUtFT1BUU30gZGlzdGNsZWFuIHx8IDoKKworCQkuL2NvbmZpZ3VyZSAke1BTRVVET19FWFRSQV9PUFRTfSAtLXByZWZpeD0ke3ByZWZpeH0gLS1saWJkaXI9JHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliIC0td2l0aC1zcWxpdGUtbGliPSR7YmFzZWxpYn0gLS13aXRoLXNxbGl0ZT0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke2V4ZWNfcHJlZml4fSAtLWJpdHM9MzIgLS13aXRob3V0LXJwYXRoCisJCXNhdmVfdHJhcHM9JCh0cmFwKQorCQl0cmFwICd3YXJuXzMyYml0X21pc3NpbmcnIDAKKwkJb2VfcnVubWFrZSAke01BS0VPUFRTfSBsaWJwc2V1ZG8KKwkJZXZhbCAiJHNhdmVfdHJhcHMiCisJCSMgcHJldmVudCBpdCBmcm9tIHJlbW92aW5nIHRoZSBsaWIsIGJ1dCByZW1vdmUgZXZlcnl0aGluZyBlbHNlCisJCW1ha2UgJ0xJQj1mb28nICR7TUFLRU9QVFN9IGRpc3RjbGVhbiAKKwlmaQorfQorCitkb19jb21waWxlX3ByZXBlbmRfY2xhc3MtbmF0aXZlc2RrICgpIHsKKwltYXliZV9tYWtlMzIKKwlpZiAkbWFrZTMyOyB0aGVuCisJCSMgV2UgbmVlZCB0aGUgMzItYml0IGxpYnBzZXVkbyBvbiBhIDY0LWJpdCBtYWNoaW5lLgorCQkjIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCB3ZWxsLXRlc3RlZCBvdXRzaWRlIG9mIHg4Ni94ODZfNjQuCisJCS4vY29uZmlndXJlICR7UFNFVURPX0VYVFJBX09QVFN9IC0tcHJlZml4PSR7cHJlZml4fSAtLWxpYmRpcj0ke3ByZWZpeH0vbGliL3BzZXVkby9saWIgLS13aXRoLXNxbGl0ZS1saWI9JHtiYXNlbGlifSAtLXdpdGgtc3FsaXRlPSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7ZXhlY19wcmVmaXh9IC0tYml0cz0zMiAtLXdpdGhvdXQtcnBhdGgKKwkJb2VfcnVubWFrZSAke01BS0VPUFRTfSBsaWJwc2V1ZG8KKwkJIyBwcmV2ZW50IGl0IGZyb20gcmVtb3ZpbmcgdGhlIGxpYiwgYnV0IHJlbW92ZSBldmVyeXRoaW5nIGVsc2UKKwkJbWFrZSAnTElCPWZvbycgJHtNQUtFT1BUU30gZGlzdGNsZWFuIAorCWZpCit9CisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgJHtNQUtFT1BUU30gJ0xJQj1saWIvcHNldWRvL2xpYiQoTUFSSzY0KScgaW5zdGFsbAorfQorCisjIFR3byBiZWxvdyBhcmUgdGhlIHNhbWUKKyMgSWYgbmVjZXNzYXJ5IGluc3RhbGwgZm9yIHRoZSBhbHRlcm5hdGl2ZSBtYWNoaW5lIGFyY2guICBUaGlzIGlzIG9ubHkgCisjIG5lY2Vzc2FyeSBpbiBhIG5hdGl2ZSBidWlsZC4KK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisJbWF5YmVfbWFrZTMyCisJaWYgJG1ha2UzMjsgdGhlbgorCQlta2RpciAtcCAke0R9JHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliCisJCWNwIGxpYi9wc2V1ZG8vbGliL2xpYnBzZXVkby5zbyAke0R9JHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliLy4KKwlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgKCkgeworCW1heWJlX21ha2UzMgorCWlmICRtYWtlMzI7IHRoZW4KKwkJbWtkaXIgLXAgJHtEfSR7cHJlZml4fS9saWIvcHNldWRvL2xpYgorCQljcCBsaWIvcHNldWRvL2xpYi9saWJwc2V1ZG8uc28gJHtEfSR7cHJlZml4fS9saWIvcHNldWRvL2xpYi8uCisJZmkKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb18xLjYuNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fMS42LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhjMjBhZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fMS42LjcuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSBwc2V1ZG8uaW5jCisKK1NSQ19VUkkgPSAiIFwKKyAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvcHNldWRvLyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICBmaWxlOi8vZmFsbGJhY2stcGFzc3dkIFwKKyAgICBmaWxlOi8vZmFsbGJhY2stZ3JvdXAgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGNkMzk1MDJmOWJkMGU3MzRkZWU4MGUwOGIyOGE1ZjEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWYyY2FjYTVmMTU3OWEzNzZhNTA5Y2Q4MWE4MTE1NmZjMjA4NjUwYWRkOWYwYWYyNzVkYTllOTExZjE4ZjI5MSIKKworUFNFVURPX0VYVFJBX09QVFMgPz0gIi0tZW5hYmxlLWZvcmNlLWFzeW5jIC0td2l0aG91dC1wYXNzd2QtZmFsbGJhY2siCisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCSMgVGhlIGZhbGxiYWNrIGZpbGVzIHNob3VsZCBuZXZlciBiZSBtb2RpZmllZAorCWluc3RhbGwgLW0gNDQ0ICR7V09SS0RJUn0vZmFsbGJhY2stcGFzc3dkICR7RH0ke3N5c2NvbmZkaXJ9L3Bhc3N3ZAorCWluc3RhbGwgLW0gNDQ0ICR7V09SS0RJUn0vZmFsbGJhY2stZ3JvdXAgJHtEfSR7c3lzY29uZmRpcn0vZ3JvdXAKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fMS43LjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvXzEuNy4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlOWVmM2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvXzEuNy4zLmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgcHNldWRvLmluYworCitTUkNfVVJJID0gIiBcCisgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL3BzZXVkby8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCisgICAgZmlsZTovL2ZhbGxiYWNrLXBhc3N3ZCBcCisgICAgZmlsZTovL2ZhbGxiYWNrLWdyb3VwIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjJiZDBhNDRlYWRkNDcxM2U5MGFkOGMxNTJlZWE3N2FhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU5ZmMzOTIyZjhmZWI5NzgzOWI1MGQxNGViMTk4N2FmZGM4ZjIyY2RjYWM5MzExOTMyM2NjY2Q1Zjg0NDQ2NTIiCisKK1BTRVVET19FWFRSQV9PUFRTID89ICItLWVuYWJsZS1mb3JjZS1hc3luYyAtLXdpdGhvdXQtcGFzc3dkLWZhbGxiYWNrIgorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwkjIFRoZSBmYWxsYmFjayBmaWxlcyBzaG91bGQgbmV2ZXIgYmUgbW9kaWZpZWQKKwlpbnN0YWxsIC1tIDQ0NCAke1dPUktESVJ9L2ZhbGxiYWNrLXBhc3N3ZCAke0R9JHtzeXNjb25mZGlyfS9wYXNzd2QKKwlpbnN0YWxsIC1tIDQ0NCAke1dPUktESVJ9L2ZhbGxiYWNrLWdyb3VwICR7RH0ke3N5c2NvbmZkaXJ9L2dyb3VwCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZTEyMjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvX2dpdC5iYgpAQCAtMCwwICsxLDExIEBACityZXF1aXJlIHBzZXVkby5pbmMKKworU1JDUkVWID0gImU3OTVkZjQ0YTkwYTQyNmE3NmI3OTBmMWIyNzc0ZjMwNDZhOGZjMzEiCitQViA9ICIxLjcuMitnaXQke1NSQ1BWfSIKKworREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3BzZXVkbyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi0yLjctbWFuaWZlc3QuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi0yLjctbWFuaWZlc3QuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkOGQ4MjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLTIuNy1tYW5pZmVzdC5pbmMKQEAgLTAsMCArMSwyODggQEAKKworIyBXQVJOSU5HOiBUaGlzIGZpbGUgaXMgQVVUTyBHRU5FUkFURUQ6IE1hbnVhbCBlZGl0cyB3aWxsIGJlIGxvc3QgbmV4dCB0aW1lIEkgcmVnZW5lcmF0ZSB0aGUgZmlsZS4KKyMgR2VuZXJhdG9yOiAnLi4vLi4vLi4vc2NyaXB0cy9jb250cmliL3B5dGhvbi9nZW5lcmF0ZS1tYW5pZmVzdC0yLjcucHknIFZlcnNpb24gMjAxMTAyMjIuMiAoQykgMjAwMi0yMDEwIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1sYXVlckB2YW5pbGxlLW1lZGlhLmRlPgorIyBWaXNpdCB0aGUgUHl0aG9uIGZvciBFbWJlZGRlZCBTeXN0ZW1zIFNpdGUgPT4gaHR0cDovL3d3dy5WYW5pbGxlLmRlL3Byb2plY3RzL3B5dGhvbi5zcHkKKworIAorCitQUk9WSURFUys9IiR7UE59LTJ0bzMgJHtQTn0tYXJncGFyc2UgJHtQTn0tYXVkaW8gJHtQTn0tYnNkZGIgJHtQTn0tY29kZWNzICR7UE59LWNvbXBpbGUgJHtQTn0tY29tcGlsZXIgJHtQTn0tY29tcHJlc3Npb24gJHtQTn0tY29udGV4dGxpYiAke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWN0eXBlcyAke1BOfS1jdXJzZXMgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tZGIgJHtQTn0tZGVidWdnZXIgJHtQTn0tZGV2ICR7UE59LWRpZmZsaWIgJHtQTn0tZGlzdHV0aWxzICR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXYgJHtQTn0tZG9jdGVzdCAke1BOfS1lbGVtZW50dHJlZSAke1BOfS1lbWFpbCAke1BOfS1mY250bCAke1BOfS1nZGJtICR7UE59LWhvdHNob3QgJHtQTn0taHRtbCAke1BOfS1pZGxlICR7UE59LWltYWdlICR7UE59LWltcG9ydGxpYiAke1BOfS1pbyAke1BOfS1qc29uICR7UE59LWxhbmcgJHtQTn0tbG9nZ2luZyAke1BOfS1tYWlsYm94ICR7UE59LW1hdGggJHtQTn0tbWltZSAke1BOfS1tbWFwICR7UE59LW11bHRpcHJvY2Vzc2luZyAke1BOfS1uZXRjbGllbnQgJHtQTn0tbmV0c2VydmVyICR7UE59LW51bWJlcnMgJHtQTn0tcGlja2xlICR7UE59LXBrZ3V0aWwgJHtQTn0tcHByaW50ICR7UE59LXByb2ZpbGUgJHtQTn0tcHlkb2MgJHtQTn0tcmUgJHtQTn0tcmVhZGxpbmUgJHtQTn0tcmVzb3VyY2UgJHtQTn0tcm9ib3RwYXJzZXIgJHtQTn0tc2hlbGwgJHtQTn0tc210cGQgJHtQTn0tc3FsaXRlMyAke1BOfS1zcWxpdGUzLXRlc3RzICR7UE59LXN0cmluZ29sZCAke1BOfS1zdWJwcm9jZXNzICR7UE59LXN5c2xvZyAke1BOfS10ZXJtaW5hbCAke1BOfS10ZXN0cyAke1BOfS10ZXh0dXRpbHMgJHtQTn0tdGhyZWFkaW5nICR7UE59LXRraW50ZXIgJHtQTn0tdW5pdHRlc3QgJHtQTn0tdW5peGFkbWluICR7UE59LXhtbCAke1BOfS14bWxycGMgJHtQTn0temxpYiAiCisKK1BBQ0tBR0VTPSIke1BOfS1kYmcgJHtQTn0tMnRvMyAke1BOfS1hcmdwYXJzZSAke1BOfS1hdWRpbyAke1BOfS1ic2RkYiAke1BOfS1jb2RlY3MgJHtQTn0tY29tcGlsZSAke1BOfS1jb21waWxlciAke1BOfS1jb21wcmVzc2lvbiAke1BOfS1jb250ZXh0bGliICR7UE59LWNvcmUgJHtQTn0tY3J5cHQgJHtQTn0tY3R5cGVzICR7UE59LWN1cnNlcyAke1BOfS1kYXRldGltZSAke1BOfS1kYiAke1BOfS1kZWJ1Z2dlciAke1BOfS1kZXYgJHtQTn0tZGlmZmxpYiAke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2ICR7UE59LWRpc3R1dGlscyAke1BOfS1kb2N0ZXN0ICR7UE59LWVsZW1lbnR0cmVlICR7UE59LWVtYWlsICR7UE59LWZjbnRsICR7UE59LWdkYm0gJHtQTn0taG90c2hvdCAke1BOfS1odG1sICR7UE59LWlkbGUgJHtQTn0taW1hZ2UgJHtQTn0taW1wb3J0bGliICR7UE59LWlvICR7UE59LWpzb24gJHtQTn0tbGFuZyAke1BOfS1sb2dnaW5nICR7UE59LW1haWxib3ggJHtQTn0tbWF0aCAke1BOfS1taW1lICR7UE59LW1tYXAgJHtQTn0tbXVsdGlwcm9jZXNzaW5nICR7UE59LW5ldGNsaWVudCAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tbnVtYmVycyAke1BOfS1waWNrbGUgJHtQTn0tcGtndXRpbCAke1BOfS1wcHJpbnQgJHtQTn0tcHJvZmlsZSAke1BOfS1weWRvYyAke1BOfS1yZSAke1BOfS1yZWFkbGluZSAke1BOfS1yZXNvdXJjZSAke1BOfS1yb2JvdHBhcnNlciAke1BOfS1zaGVsbCAke1BOfS1zbXRwZCAke1BOfS1zcWxpdGUzICR7UE59LXNxbGl0ZTMtdGVzdHMgJHtQTn0tc3RyaW5nb2xkICR7UE59LXN1YnByb2Nlc3MgJHtQTn0tc3lzbG9nICR7UE59LXRlcm1pbmFsICR7UE59LXRlc3RzICR7UE59LXRleHR1dGlscyAke1BOfS10aHJlYWRpbmcgJHtQTn0tdGtpbnRlciAke1BOfS11bml0dGVzdCAke1BOfS11bml4YWRtaW4gJHtQTn0teG1sICR7UE59LXhtbHJwYyAke1BOfS16bGliICR7UE59LW1vZHVsZXMiCisKK1NVTU1BUllfJHtQTn0tMnRvMz0iUHl0aG9uIGF1dG9tYXRlZCBQeXRob24gMiB0byAzIGNvZGUgdHJhbnNsYXRvciIKK1JERVBFTkRTXyR7UE59LTJ0bzM9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS0ydG8zPSIke2JpbmRpcn0vMnRvMyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYjJ0bzMgIgorCitTVU1NQVJZXyR7UE59LWFyZ3BhcnNlPSJQeXRob24gY29tbWFuZCBsaW5lIGFyZ3VtZW50IHBhcnNlciIKK1JERVBFTkRTXyR7UE59LWFyZ3BhcnNlPSIke1BOfS1jb3JlICR7UE59LWNvZGVjcyAke1BOfS10ZXh0dXRpbHMiCitGSUxFU18ke1BOfS1hcmdwYXJzZT0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9hcmdwYXJzZS4qICIKKworU1VNTUFSWV8ke1BOfS1hdWRpbz0iUHl0aG9uIEF1ZGlvIEhhbmRsaW5nIgorUkRFUEVORFNfJHtQTn0tYXVkaW89IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1hdWRpbz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy93YXZlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jaHVuay4qICR7bGliZGlyfS9weXRob24yLjcvc25kaGRyLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9vc3NhdWRpb2Rldi5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2F1ZGlvb3Auc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9hdWRpb2Rldi4qICR7bGliZGlyfS9weXRob24yLjcvc3VuYXVkaW8uKiAke2xpYmRpcn0vcHl0aG9uMi43L3N1bmF1LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy90b2FpZmYuKiAiCisKK1NVTU1BUllfJHtQTn0tYnNkZGI9IlB5dGhvbiBiaW5kaW5ncyBmb3IgdGhlIEJlcmtlbGV5IERhdGFiYXNlIgorUkRFUEVORFNfJHtQTn0tYnNkZGI9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1ic2RkYj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9ic2RkYiAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19ic2RkYi5zbyAiCisKK1NVTU1BUllfJHtQTn0tY29kZWNzPSJQeXRob24gY29kZWNzLCBlbmNvZGluZ3MgJiBpMThuIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jb2RlY3M9IiR7UE59LWNvcmUgJHtQTn0tbGFuZyIKK0ZJTEVTXyR7UE59LWNvZGVjcz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb2RlY3MuKiAke2xpYmRpcn0vcHl0aG9uMi43L2VuY29kaW5ncyAke2xpYmRpcn0vcHl0aG9uMi43L2dldHRleHQuKiAke2xpYmRpcn0vcHl0aG9uMi43L2xvY2FsZS4qICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2xvY2FsZS5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19jb2RlY3MqICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX211bHRpYnl0ZWNvZGVjLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvdW5pY29kZWRhdGEuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9zdHJpbmdwcmVwLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy94ZHJsaWIuKiAiCisKK1NVTU1BUllfJHtQTn0tY29tcGlsZT0iUHl0aG9uIGJ5dGVjb2RlIGNvbXBpbGF0aW9uIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jb21waWxlPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tY29tcGlsZT0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9weV9jb21waWxlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb21waWxlYWxsLiogIgorCitTVU1NQVJZXyR7UE59LWNvbXBpbGVyPSJQeXRob24gY29tcGlsZXIgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWNvbXBpbGVyPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tY29tcGlsZXI9IiR7bGliZGlyfS9weXRob24yLjcvY29tcGlsZXIgIgorCitTVU1NQVJZXyR7UE59LWNvbXByZXNzaW9uPSJQeXRob24gaGlnaC1sZXZlbCBjb21wcmVzc2lvbiBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tY29tcHJlc3Npb249IiR7UE59LWNvcmUgJHtQTn0temxpYiIKK0ZJTEVTXyR7UE59LWNvbXByZXNzaW9uPSIke2xpYmRpcn0vcHl0aG9uMi43L2d6aXAuKiAke2xpYmRpcn0vcHl0aG9uMi43L3ppcGZpbGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3RhcmZpbGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2J6Mi5zbyAiCisKK1NVTU1BUllfJHtQTn0tY29udGV4dGxpYj0iUHl0aG9uIHV0aWxpdGllcyBmb3Igd2l0aC1zdGF0ZW1lbnRjb250ZXh0cy4iCitSREVQRU5EU18ke1BOfS1jb250ZXh0bGliPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tY29udGV4dGxpYj0iJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29udGV4dGxpYi4qICIKKworU1VNTUFSWV8ke1BOfS1jb3JlPSJQeXRob24gaW50ZXJwcmV0ZXIgYW5kIGNvcmUgbW9kdWxlcyIKK1JERVBFTkRTXyR7UE59LWNvcmU9IiR7UE59LWxhbmcgJHtQTn0tcmUiCitGSUxFU18ke1BOfS1jb3JlPSIke2xpYmRpcn0vcHl0aG9uMi43L19fZnV0dXJlX18uKiAke2xpYmRpcn0vcHl0aG9uMi43L19hYmNvbGwuKiAke2xpYmRpcn0vcHl0aG9uMi43L2FiYy4qICR7bGliZGlyfS9weXRob24yLjcvY29weS4qICR7bGliZGlyfS9weXRob24yLjcvY29weV9yZWcuKiAke2xpYmRpcn0vcHl0aG9uMi43L0NvbmZpZ1BhcnNlci4qICR7bGliZGlyfS9weXRob24yLjcvZ2VuZXJpY3BhdGguKiAke2xpYmRpcn0vcHl0aG9uMi43L2dldG9wdC4qICR7bGliZGlyfS9weXRob24yLjcvbGluZWNhY2hlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9uZXcuKiAke2xpYmRpcn0vcHl0aG9uMi43L29zLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9wb3NpeHBhdGguKiAke2xpYmRpcn0vcHl0aG9uMi43L3N0cnVjdC4qICR7bGliZGlyfS9weXRob24yLjcvd2FybmluZ3MuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NpdGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3N0YXQuKiAke2xpYmRpcn0vcHl0aG9uMi43L1VzZXJEaWN0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9Vc2VyTGlzdC4qICR7bGliZGlyfS9weXRob24yLjcvVXNlclN0cmluZy4qICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvYmluYXNjaWkuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fc3RydWN0LnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvdGltZS5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3hyZWFkbGluZXMuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy90eXBlcy4qICR7bGliZGlyfS9weXRob24yLjcvcGxhdGZvcm0uKiAke2JpbmRpcn0vcHl0aG9uKiAke2xpYmRpcn0vcHl0aG9uMi43L193ZWFrcmVmc2V0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zeXNjb25maWcuKiAke2xpYmRpcn0vcHl0aG9uMi43L19zeXNjb25maWdkYXRhLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb25maWcvTWFrZWZpbGUgJHtpbmNsdWRlZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L3B5Y29uZmlnKi5oICR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L3NpdGVjdXN0b21pemUucHkgIgorCitTVU1NQVJZXyR7UE59LWNyeXB0PSJQeXRob24gYmFzaWMgY3J5cHRvZ3JhcGhpYyBhbmQgaGFzaGluZyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tY3J5cHQ9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jcnlwdD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9oYXNobGliLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9tZDUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NoYS4qICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvY3J5cHQuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9faGFzaGxpYi5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19zaGEyNTYuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fc2hhNTEyLnNvICIKKworU1VNTUFSWV8ke1BOfS1jdHlwZXM9IlB5dGhvbiBDIHR5cGVzIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jdHlwZXM9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jdHlwZXM9IiR7bGliZGlyfS9weXRob24yLjcvY3R5cGVzICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2N0eXBlcy5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19jdHlwZXNfdGVzdC5zbyAiCisKK1NVTU1BUllfJHtQTn0tY3Vyc2VzPSJQeXRob24gY3Vyc2VzIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jdXJzZXM9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jdXJzZXM9IiR7bGliZGlyfS9weXRob24yLjcvY3Vyc2VzICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2N1cnNlcy5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19jdXJzZXNfcGFuZWwuc28gIgorCitTVU1NQVJZXyR7UE59LWRhdGV0aW1lPSJQeXRob24gY2FsZW5kYXIgYW5kIHRpbWUgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWRhdGV0aW1lPSIke1BOfS1jb3JlICR7UE59LWNvZGVjcyIKK0ZJTEVTXyR7UE59LWRhdGV0aW1lPSIke2xpYmRpcn0vcHl0aG9uMi43L19zdHJwdGltZS4qICR7bGliZGlyfS9weXRob24yLjcvY2FsZW5kYXIuKiAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2RhdGV0aW1lLnNvICIKKworU1VNTUFSWV8ke1BOfS1kYj0iUHl0aG9uIGZpbGUtYmFzZWQgZGF0YWJhc2Ugc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWRiPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZGI9IiR7bGliZGlyfS9weXRob24yLjcvYW55ZGJtLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9kdW1iZGJtLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy93aGljaGRiLiogIgorCitTVU1NQVJZXyR7UE59LWRlYnVnZ2VyPSJQeXRob24gZGVidWdnZXIiCitSREVQRU5EU18ke1BOfS1kZWJ1Z2dlcj0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LXJlICR7UE59LXN0cmluZ29sZCAke1BOfS1zaGVsbCAke1BOfS1wcHJpbnQiCitGSUxFU18ke1BOfS1kZWJ1Z2dlcj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9iZGIuKiAke2xpYmRpcn0vcHl0aG9uMi43L3BkYi4qICIKKworU1VNTUFSWV8ke1BOfS1kZXY9IlB5dGhvbiBkZXZlbG9wbWVudCBwYWNrYWdlIgorUkRFUEVORFNfJHtQTn0tZGV2PSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZGV2PSIke2luY2x1ZGVkaXJ9ICR7bGliZGlyfS9saWIqJHtTT0xJQlNERVZ9ICR7bGliZGlyfS8qLmxhICR7bGliZGlyfS8qLmEgJHtsaWJkaXJ9LyoubyAke2xpYmRpcn0vcGtnY29uZmlnICR7YmFzZV9saWJkaXJ9LyouYSAke2Jhc2VfbGliZGlyfS8qLm8gJHtkYXRhZGlyfS9hY2xvY2FsICR7ZGF0YWRpcn0vcGtnY29uZmlnICIKKworU1VNTUFSWV8ke1BOfS1kaWZmbGliPSJQeXRob24gaGVscGVycyBmb3IgY29tcHV0aW5nIGRlbHRhcyBiZXR3ZWVuIG9iamVjdHMiCitSREVQRU5EU18ke1BOfS1kaWZmbGliPSIke1BOfS1sYW5nICR7UE59LXJlIgorRklMRVNfJHtQTn0tZGlmZmxpYj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9kaWZmbGliLiogIgorCitTVU1NQVJZXyR7UE59LWRpc3R1dGlscz0iUHl0aG9uIERpc3RyaWJ1dGlvbiBVdGlsaXRpZXMiCitSREVQRU5EU18ke1BOfS1kaXN0dXRpbHM9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1kaXN0dXRpbHM9IiR7bGliZGlyfS9weXRob24yLjcvY29uZmlnICR7bGliZGlyfS9weXRob24yLjcvZGlzdHV0aWxzICIKKworU1VNTUFSWV8ke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2PSJQeXRob24gZGlzdHJpYnV0aW9uIHV0aWxpdGllcyAoc3RhdGljIGxpYnJhcmllcykiCitSREVQRU5EU18ke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2PSIke1BOfS1kaXN0dXRpbHMiCitGSUxFU18ke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2PSIke2xpYmRpcn0vcHl0aG9uMi43L2NvbmZpZy9saWIqLmEgIgorCitTVU1NQVJZXyR7UE59LWRvY3Rlc3Q9IlB5dGhvbiBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgZXhhbXBsZXMgaW4gZG9jc3RyaW5ncyIKK1JERVBFTkRTXyR7UE59LWRvY3Rlc3Q9IiR7UE59LWNvcmUgJHtQTn0tbGFuZyAke1BOfS1pbyAke1BOfS1yZSAke1BOfS11bml0dGVzdCAke1BOfS1kZWJ1Z2dlciAke1BOfS1kaWZmbGliIgorRklMRVNfJHtQTn0tZG9jdGVzdD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9kb2N0ZXN0LiogIgorCitTVU1NQVJZXyR7UE59LWVsZW1lbnR0cmVlPSJQeXRob24gZWxlbWVudHJlZSIKK1JERVBFTkRTXyR7UE59LWVsZW1lbnR0cmVlPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZWxlbWVudHRyZWU9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2VsZW1lbnR0cmVlLnNvICIKKworU1VNTUFSWV8ke1BOfS1lbWFpbD0iUHl0aG9uIGVtYWlsIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1lbWFpbD0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1yZSAke1BOfS1taW1lICR7UE59LWF1ZGlvICR7UE59LWltYWdlICR7UE59LW5ldGNsaWVudCIKK0ZJTEVTXyR7UE59LWVtYWlsPSIke2xpYmRpcn0vcHl0aG9uMi43L2ltYXBsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L2VtYWlsICIKKworU1VNTUFSWV8ke1BOfS1mY250bD0iUHl0aG9uJ3MgZmNudGwgaW50ZXJmYWNlIgorUkRFUEVORFNfJHtQTn0tZmNudGw9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1mY250bD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9mY250bC5zbyAiCisKK1NVTU1BUllfJHtQTn0tZ2RibT0iUHl0aG9uIEdOVSBkYXRhYmFzZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tZ2RibT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWdkYm09IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvZ2RibS5zbyAiCisKK1NVTU1BUllfJHtQTn0taG90c2hvdD0iUHl0aG9uIGhvdHNob3QgcGVyZm9ybWFuY2UgcHJvZmlsZXIiCitSREVQRU5EU18ke1BOfS1ob3RzaG90PSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0taG90c2hvdD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9ob3RzaG90ICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2hvdHNob3Quc28gIgorCitTVU1NQVJZXyR7UE59LWh0bWw9IlB5dGhvbiBIVE1MIHByb2Nlc3Npbmcgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWh0bWw9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1odG1sPSIke2xpYmRpcn0vcHl0aG9uMi43L2Zvcm1hdHRlci4qICR7bGliZGlyfS9weXRob24yLjcvaHRtbGVudGl0eWRlZnMuKiAke2xpYmRpcn0vcHl0aG9uMi43L2h0bWxsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L21hcmt1cGJhc2UuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NnbWxsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L0hUTUxQYXJzZXIuKiAiCisKK1NVTU1BUllfJHtQTn0taWRsZT0iUHl0aG9uIEludGVncmF0ZWQgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQiCitSREVQRU5EU18ke1BOfS1pZGxlPSIke1BOfS1jb3JlICR7UE59LXRraW50ZXIiCitGSUxFU18ke1BOfS1pZGxlPSIke2JpbmRpcn0vaWRsZSAke2xpYmRpcn0vcHl0aG9uMi43L2lkbGVsaWIgIgorCitTVU1NQVJZXyR7UE59LWltYWdlPSJQeXRob24gZ3JhcGhpY2FsIGltYWdlIGhhbmRsaW5nIgorUkRFUEVORFNfJHtQTn0taW1hZ2U9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1pbWFnZT0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb2xvcnN5cy4qICR7bGliZGlyfS9weXRob24yLjcvaW1naGRyLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9pbWFnZW9wLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvcmdiaW1nLnNvICIKKworU1VNTUFSWV8ke1BOfS1pbXBvcnRsaWI9IlB5dGhvbiBpbXBvcnQgaW1wbGVtZW50YXRpb24gbGlicmFyeSIKK1JERVBFTkRTXyR7UE59LWltcG9ydGxpYj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWltcG9ydGxpYj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9pbXBvcnRsaWIgIgorCitTVU1NQVJZXyR7UE59LWlvPSJQeXRob24gbG93LWxldmVsIEkvTyIKK1JERVBFTkRTXyR7UE59LWlvPSIke1BOfS1jb3JlICR7UE59LW1hdGggJHtQTn0tdGV4dHV0aWxzICR7UE59LW5ldGNsaWVudCAke1BOfS1jb250ZXh0bGliIgorRklMRVNfJHtQTn0taW89IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX3NvY2tldC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19pby5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19zc2wuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9zZWxlY3Quc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC90ZXJtaW9zLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvY1N0cmluZ0lPLnNvICR7bGliZGlyfS9weXRob24yLjcvcGlwZXMuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NvY2tldC4qICR7bGliZGlyfS9weXRob24yLjcvc3NsLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy90ZW1wZmlsZS4qICR7bGliZGlyfS9weXRob24yLjcvU3RyaW5nSU8uKiAke2xpYmRpcn0vcHl0aG9uMi43L2lvLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9fcHlpby4qICIKKworU1VNTUFSWV8ke1BOfS1qc29uPSJQeXRob24gSlNPTiBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tanNvbj0iJHtQTn0tY29yZSAke1BOfS1tYXRoICR7UE59LXJlICR7UE59LWNvZGVjcyIKK0ZJTEVTXyR7UE59LWpzb249IiR7bGliZGlyfS9weXRob24yLjcvanNvbiAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19qc29uLnNvICIKKworU1VNTUFSWV8ke1BOfS1sYW5nPSJQeXRob24gbG93LWxldmVsIGxhbmd1YWdlIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1sYW5nPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tbGFuZz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fYmlzZWN0LnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2NvbGxlY3Rpb25zLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2hlYXBxLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX3dlYWtyZWYuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fZnVuY3Rvb2xzLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvYXJyYXkuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9pdGVydG9vbHMuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9vcGVyYXRvci5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3BhcnNlci5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2F0ZXhpdC4qICR7bGliZGlyfS9weXRob24yLjcvYmlzZWN0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb2RlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb2Rlb3AuKiAke2xpYmRpcn0vcHl0aG9uMi43L2NvbGxlY3Rpb25zLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9kaXMuKiAke2xpYmRpcn0vcHl0aG9uMi43L2Z1bmN0b29scy4qICR7bGliZGlyfS9weXRob24yLjcvaGVhcHEuKiAke2xpYmRpcn0vcHl0aG9uMi43L2luc3BlY3QuKiAke2xpYmRpcn0vcHl0aG9uMi43L2tleXdvcmQuKiAke2xpYmRpcn0vcHl0aG9uMi43L29wY29kZS4qICR7bGliZGlyfS9weXRob24yLjcvc3ltYm9sLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9yZXByLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy90b2tlbi4qICR7bGliZGlyfS9weXRob24yLjcvdG9rZW5pemUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3RyYWNlYmFjay4qICR7bGliZGlyfS9weXRob24yLjcvd2Vha3JlZi4qICIKKworU1VNTUFSWV8ke1BOfS1sb2dnaW5nPSJQeXRob24gbG9nZ2luZyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tbG9nZ2luZz0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LXBpY2tsZSAke1BOfS1zdHJpbmdvbGQiCitGSUxFU18ke1BOfS1sb2dnaW5nPSIke2xpYmRpcn0vcHl0aG9uMi43L2xvZ2dpbmcgIgorCitTVU1NQVJZXyR7UE59LW1haWxib3g9IlB5dGhvbiBtYWlsYm94IGZvcm1hdCBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tbWFpbGJveD0iJHtQTn0tY29yZSAke1BOfS1taW1lIgorRklMRVNfJHtQTn0tbWFpbGJveD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9tYWlsYm94LiogIgorCitTVU1NQVJZXyR7UE59LW1hdGg9IlB5dGhvbiBtYXRoIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1tYXRoPSIke1BOfS1jb3JlICR7UE59LWNyeXB0IgorRklMRVNfJHtQTn0tbWF0aD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9jbWF0aC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL21hdGguc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fcmFuZG9tLnNvICR7bGliZGlyfS9weXRob24yLjcvcmFuZG9tLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zZXRzLiogIgorCitTVU1NQVJZXyR7UE59LW1pbWU9IlB5dGhvbiBNSU1FIGhhbmRsaW5nIEFQSXMiCitSREVQRU5EU18ke1BOfS1taW1lPSIke1BOfS1jb3JlICR7UE59LWlvIgorRklMRVNfJHtQTn0tbWltZT0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9taW1ldG9vbHMuKiAke2xpYmRpcn0vcHl0aG9uMi43L3V1LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9xdW9wcmkuKiAke2xpYmRpcn0vcHl0aG9uMi43L3JmYzgyMi4qICR7bGliZGlyfS9weXRob24yLjcvTWltZVdyaXRlci4qICIKKworU1VNTUFSWV8ke1BOfS1tbWFwPSJQeXRob24gbWVtb3J5LW1hcHBlZCBmaWxlIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1tbWFwPSIke1BOfS1jb3JlICR7UE59LWlvIgorRklMRVNfJHtQTn0tbW1hcD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9tbWFwLnNvICIKKworU1VNTUFSWV8ke1BOfS1tdWx0aXByb2Nlc3Npbmc9IlB5dGhvbiBtdWx0aXByb2Nlc3Npbmcgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LW11bHRpcHJvY2Vzc2luZz0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LXBpY2tsZSAke1BOfS10aHJlYWRpbmcgJHtQTn0tY3R5cGVzICR7UE59LW1tYXAiCitGSUxFU18ke1BOfS1tdWx0aXByb2Nlc3Npbmc9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX211bHRpcHJvY2Vzc2luZy5zbyAke2xpYmRpcn0vcHl0aG9uMi43L211bHRpcHJvY2Vzc2luZyAiCisKK1NVTU1BUllfJHtQTn0tbmV0Y2xpZW50PSJQeXRob24gSW50ZXJuZXQgUHJvdG9jb2wgY2xpZW50cyIKK1JERVBFTkRTXyR7UE59LW5ldGNsaWVudD0iJHtQTn0tY29yZSAke1BOfS1jcnlwdCAke1BOfS1kYXRldGltZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWltZSIKK0ZJTEVTXyR7UE59LW5ldGNsaWVudD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy8qQ29va2llKi4qICR7bGliZGlyfS9weXRob24yLjcvYmFzZTY0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb29raWVsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L2Z0cGxpYi4qICR7bGliZGlyfS9weXRob24yLjcvZ29waGVybGliLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9obWFjLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9odHRwbGliLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9taW1ldHlwZXMuKiAke2xpYmRpcn0vcHl0aG9uMi43L25udHBsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L3BvcGxpYi4qICR7bGliZGlyfS9weXRob24yLjcvc210cGxpYi4qICR7bGliZGlyfS9weXRob24yLjcvdGVsbmV0bGliLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy91cmxsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L3VybGxpYjIuKiAke2xpYmRpcn0vcHl0aG9uMi43L3VybHBhcnNlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy91dWlkLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9yZmM4MjIuKiAke2xpYmRpcn0vcHl0aG9uMi43L21pbWV0b29scy4qICIKKworU1VNTUFSWV8ke1BOfS1uZXRzZXJ2ZXI9IlB5dGhvbiBJbnRlcm5ldCBQcm90b2NvbCBzZXJ2ZXJzIgorUkRFUEVORFNfJHtQTn0tbmV0c2VydmVyPSIke1BOfS1jb3JlICR7UE59LW5ldGNsaWVudCAke1BOfS1zaGVsbCAke1BOfS10aHJlYWRpbmciCitGSUxFU18ke1BOfS1uZXRzZXJ2ZXI9IiR7bGliZGlyfS9weXRob24yLjcvY2dpLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy8qSFRUUFNlcnZlci4qICR7bGliZGlyfS9weXRob24yLjcvU29ja2V0U2VydmVyLiogIgorCitTVU1NQVJZXyR7UE59LW51bWJlcnM9IlB5dGhvbiBudW1iZXIgQVBJcyIKK1JERVBFTkRTXyR7UE59LW51bWJlcnM9IiR7UE59LWNvcmUgJHtQTn0tbGFuZyAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LW51bWJlcnM9IiR7bGliZGlyfS9weXRob24yLjcvZGVjaW1hbC4qICR7bGliZGlyfS9weXRob24yLjcvZnJhY3Rpb25zLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9udW1iZXJzLiogIgorCitTVU1NQVJZXyR7UE59LXBpY2tsZT0iUHl0aG9uIHNlcmlhbGlzYXRpb24vcGVyc2lzdGVuY2Ugc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXBpY2tsZT0iJHtQTn0tY29yZSAke1BOfS1jb2RlY3MgJHtQTn0taW8gJHtQTn0tcmUiCitGSUxFU18ke1BOfS1waWNrbGU9IiR7bGliZGlyfS9weXRob24yLjcvcGlja2xlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zaGVsdmUuKiAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2NQaWNrbGUuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9waWNrbGV0b29scy4qICIKKworU1VNTUFSWV8ke1BOfS1wa2d1dGlsPSJQeXRob24gcGFja2FnZSBleHRlbnNpb24gdXRpbGl0eSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tcGtndXRpbD0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXBrZ3V0aWw9IiR7bGliZGlyfS9weXRob24yLjcvcGtndXRpbC4qICIKKworU1VNTUFSWV8ke1BOfS1wcHJpbnQ9IlB5dGhvbiBwcmV0dHktcHJpbnQgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXBwcmludD0iJHtQTn0tY29yZSAke1BOfS1pbyIKK0ZJTEVTXyR7UE59LXBwcmludD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9wcHJpbnQuKiAiCisKK1NVTU1BUllfJHtQTn0tcHJvZmlsZT0iUHl0aG9uIGJhc2ljIHBlcmZvcm1hbmNlIHByb2ZpbGluZyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tcHJvZmlsZT0iJHtQTn0tY29yZSAke1BOfS10ZXh0dXRpbHMiCitGSUxFU18ke1BOfS1wcm9maWxlPSIke2xpYmRpcn0vcHl0aG9uMi43L3Byb2ZpbGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3BzdGF0cy4qICR7bGliZGlyfS9weXRob24yLjcvY1Byb2ZpbGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19sc3Byb2Yuc28gIgorCitTVU1NQVJZXyR7UE59LXB5ZG9jPSJQeXRob24gaW50ZXJhY3RpdmUgaGVscCBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tcHlkb2M9IiR7UE59LWNvcmUgJHtQTn0tbGFuZyAke1BOfS1zdHJpbmdvbGQgJHtQTn0tcmUiCitGSUxFU18ke1BOfS1weWRvYz0iJHtiaW5kaXJ9L3B5ZG9jICR7bGliZGlyfS9weXRob24yLjcvcHlkb2MuKiAke2xpYmRpcn0vcHl0aG9uMi43L3B5ZG9jX2RhdGEgIgorCitTVU1NQVJZXyR7UE59LXJlPSJQeXRob24gUmVndWxhciBFeHByZXNzaW9uIEFQSXMiCitSREVQRU5EU18ke1BOfS1yZT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXJlPSIke2xpYmRpcn0vcHl0aG9uMi43L3JlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zcmUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NyZV9jb21waWxlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zcmVfY29uc3RhbnRzKiAke2xpYmRpcn0vcHl0aG9uMi43L3NyZV9wYXJzZS4qICIKKworU1VNTUFSWV8ke1BOfS1yZWFkbGluZT0iUHl0aG9uIHJlYWRsaW5lIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1yZWFkbGluZT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXJlYWRsaW5lPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3JlYWRsaW5lLnNvICR7bGliZGlyfS9weXRob24yLjcvcmxjb21wbGV0ZXIuKiAiCisKK1NVTU1BUllfJHtQTn0tcmVzb3VyY2U9IlB5dGhvbiByZXNvdXJjZSBjb250cm9sIGludGVyZmFjZSIKK1JERVBFTkRTXyR7UE59LXJlc291cmNlPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tcmVzb3VyY2U9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvcmVzb3VyY2Uuc28gIgorCitTVU1NQVJZXyR7UE59LXJvYm90cGFyc2VyPSJQeXRob24gcm9ib3RzLnR4dCBwYXJzZXIiCitSREVQRU5EU18ke1BOfS1yb2JvdHBhcnNlcj0iJHtQTn0tY29yZSAke1BOfS1uZXRjbGllbnQiCitGSUxFU18ke1BOfS1yb2JvdHBhcnNlcj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9yb2JvdHBhcnNlci4qICIKKworU1VNTUFSWV8ke1BOfS1zaGVsbD0iUHl0aG9uIHNoZWxsLWxpa2UgZnVuY3Rpb25hbGl0eSIKK1JERVBFTkRTXyR7UE59LXNoZWxsPSIke1BOfS1jb3JlICR7UE59LXJlIgorRklMRVNfJHtQTn0tc2hlbGw9IiR7bGliZGlyfS9weXRob24yLjcvY21kLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb21tYW5kcy4qICR7bGliZGlyfS9weXRob24yLjcvZGlyY2FjaGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L2ZubWF0Y2guKiAke2xpYmRpcn0vcHl0aG9uMi43L2dsb2IuKiAke2xpYmRpcn0vcHl0aG9uMi43L3BvcGVuMi4qICR7bGliZGlyfS9weXRob24yLjcvc2hsZXguKiAke2xpYmRpcn0vcHl0aG9uMi43L3NodXRpbC4qICIKKworU1VNTUFSWV8ke1BOfS1zbXRwZD0iUHl0aG9uIFNpbXBsZSBNYWlsIFRyYW5zcG9ydCBEYWVtb24iCitSREVQRU5EU18ke1BOfS1zbXRwZD0iJHtQTn0tY29yZSAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tZW1haWwgJHtQTn0tbWltZSIKK0ZJTEVTXyR7UE59LXNtdHBkPSIke2JpbmRpcn0vc210cGQuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NtdHBkLiogIgorCitTVU1NQVJZXyR7UE59LXNxbGl0ZTM9IlB5dGhvbiBTcWxpdGUzIGRhdGFiYXNlIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1zcWxpdGUzPSIke1BOfS1jb3JlICR7UE59LWRhdGV0aW1lICR7UE59LWxhbmcgJHtQTn0tY3J5cHQgJHtQTn0taW8gJHtQTn0tdGhyZWFkaW5nICR7UE59LXpsaWIiCitGSUxFU18ke1BOfS1zcWxpdGUzPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19zcWxpdGUzLnNvICR7bGliZGlyfS9weXRob24yLjcvc3FsaXRlMy9kYmFwaTIuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NxbGl0ZTMvX19pbml0X18uKiAke2xpYmRpcn0vcHl0aG9uMi43L3NxbGl0ZTMvZHVtcC4qICIKKworU1VNTUFSWV8ke1BOfS1zcWxpdGUzLXRlc3RzPSJQeXRob24gU3FsaXRlMyBkYXRhYmFzZSBzdXBwb3J0IHRlc3RzIgorUkRFUEVORFNfJHtQTn0tc3FsaXRlMy10ZXN0cz0iJHtQTn0tY29yZSAke1BOfS1zcWxpdGUzIgorRklMRVNfJHtQTn0tc3FsaXRlMy10ZXN0cz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9zcWxpdGUzL3Rlc3QgIgorCitTVU1NQVJZXyR7UE59LXN0cmluZ29sZD0iUHl0aG9uIHN0cmluZyBBUElzIFtkZXByZWNhdGVkXSIKK1JERVBFTkRTXyR7UE59LXN0cmluZ29sZD0iJHtQTn0tY29yZSAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LXN0cmluZ29sZD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9zdHJvcC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L3N0cmluZy4qICR7bGliZGlyfS9weXRob24yLjcvc3RyaW5nb2xkLiogIgorCitTVU1NQVJZXyR7UE59LXN1YnByb2Nlc3M9IlB5dGhvbiBzdWJwcm9jZXNzIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1zdWJwcm9jZXNzPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LWZjbnRsICR7UE59LXBpY2tsZSIKK0ZJTEVTXyR7UE59LXN1YnByb2Nlc3M9IiR7bGliZGlyfS9weXRob24yLjcvc3VicHJvY2Vzcy4qICIKKworU1VNTUFSWV8ke1BOfS1zeXNsb2c9IlB5dGhvbiBzeXNsb2cgaW50ZXJmYWNlIgorUkRFUEVORFNfJHtQTn0tc3lzbG9nPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tc3lzbG9nPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3N5c2xvZy5zbyAiCisKK1NVTU1BUllfJHtQTn0tdGVybWluYWw9IlB5dGhvbiB0ZXJtaW5hbCBjb250cm9sbGluZyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tdGVybWluYWw9IiR7UE59LWNvcmUgJHtQTn0taW8iCitGSUxFU18ke1BOfS10ZXJtaW5hbD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9wdHkuKiAke2xpYmRpcn0vcHl0aG9uMi43L3R0eS4qICIKKworU1VNTUFSWV8ke1BOfS10ZXN0cz0iUHl0aG9uIHRlc3RzIgorUkRFUEVORFNfJHtQTn0tdGVzdHM9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS10ZXN0cz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy90ZXN0ICIKKworU1VNTUFSWV8ke1BOfS10ZXh0dXRpbHM9IlB5dGhvbiBvcHRpb24gcGFyc2luZywgdGV4dCB3cmFwcGluZyBhbmQgQ1NWIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS10ZXh0dXRpbHM9IiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tc3RyaW5nb2xkIgorRklMRVNfJHtQTn0tdGV4dHV0aWxzPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19jc3Yuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9jc3YuKiAke2xpYmRpcn0vcHl0aG9uMi43L29wdHBhcnNlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy90ZXh0d3JhcC4qICIKKworU1VNTUFSWV8ke1BOfS10aHJlYWRpbmc9IlB5dGhvbiB0aHJlYWRpbmcgJiBzeW5jaHJvbml6YXRpb24gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXRocmVhZGluZz0iJHtQTn0tY29yZSAke1BOfS1sYW5nIgorRklMRVNfJHtQTn0tdGhyZWFkaW5nPSIke2xpYmRpcn0vcHl0aG9uMi43L190aHJlYWRpbmdfbG9jYWwuKiAke2xpYmRpcn0vcHl0aG9uMi43L2R1bW15X3RocmVhZC4qICR7bGliZGlyfS9weXRob24yLjcvZHVtbXlfdGhyZWFkaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9tdXRleC4qICR7bGliZGlyfS9weXRob24yLjcvdGhyZWFkaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9RdWV1ZS4qICIKKworU1VNTUFSWV8ke1BOfS10a2ludGVyPSJQeXRob24gVGNsL1RrIGJpbmRpbmdzIgorUkRFUEVORFNfJHtQTn0tdGtpbnRlcj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXRraW50ZXI9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX3RraW50ZXIuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItdGsgIgorCitTVU1NQVJZXyR7UE59LXVuaXR0ZXN0PSJQeXRob24gdW5pdCB0ZXN0aW5nIGZyYW1ld29yayIKK1JERVBFTkRTXyR7UE59LXVuaXR0ZXN0PSIke1BOfS1jb3JlICR7UE59LXN0cmluZ29sZCAke1BOfS1sYW5nICR7UE59LWlvICR7UE59LWRpZmZsaWIgJHtQTn0tcHByaW50ICR7UE59LXNoZWxsIgorRklMRVNfJHtQTn0tdW5pdHRlc3Q9IiR7bGliZGlyfS9weXRob24yLjcvdW5pdHRlc3QvICIKKworU1VNTUFSWV8ke1BOfS11bml4YWRtaW49IlB5dGhvbiBVbml4IGFkbWluaXN0cmF0aW9uIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS11bml4YWRtaW49IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS11bml4YWRtaW49IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvbmlzLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvZ3JwLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvcHdkLnNvICR7bGliZGlyfS9weXRob24yLjcvZ2V0cGFzcy4qICIKKworU1VNTUFSWV8ke1BOfS14bWw9IlB5dGhvbiBiYXNpYyBYTUwgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXhtbD0iJHtQTn0tY29yZSAke1BOfS1lbGVtZW50dHJlZSAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LXhtbD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9weWV4cGF0LnNvICR7bGliZGlyfS9weXRob24yLjcveG1sICR7bGliZGlyfS9weXRob24yLjcveG1sbGliLiogIgorCitTVU1NQVJZXyR7UE59LXhtbHJwYz0iUHl0aG9uIFhNTC1SUEMgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXhtbHJwYz0iJHtQTn0tY29yZSAke1BOfS14bWwgJHtQTn0tbmV0c2VydmVyICR7UE59LWxhbmciCitGSUxFU18ke1BOfS14bWxycGM9IiR7bGliZGlyfS9weXRob24yLjcveG1scnBjbGliLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9TaW1wbGVYTUxSUENTZXJ2ZXIuKiAke2xpYmRpcn0vcHl0aG9uMi43L0RvY1hNTFJQQ1NlcnZlci4qICIKKworU1VNTUFSWV8ke1BOfS16bGliPSJQeXRob24gemxpYiBjb21wcmVzc2lvbiBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0temxpYj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXpsaWI9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvemxpYi5zbyAiCisKK1NVTU1BUllfJHtQTn0tbW9kdWxlcz0iQWxsIFB5dGhvbiBtb2R1bGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlcz0iJHtQTn0tMnRvMyAke1BOfS1hcmdwYXJzZSAke1BOfS1hdWRpbyAke1BOfS1ic2RkYiAke1BOfS1jb2RlY3MgJHtQTn0tY29tcGlsZSAke1BOfS1jb21waWxlciAke1BOfS1jb21wcmVzc2lvbiAke1BOfS1jb250ZXh0bGliICR7UE59LWNvcmUgJHtQTn0tY3J5cHQgJHtQTn0tY3R5cGVzICR7UE59LWN1cnNlcyAke1BOfS1kYXRldGltZSAke1BOfS1kYiAke1BOfS1kZWJ1Z2dlciAke1BOfS1kaWZmbGliICR7UE59LWRpc3R1dGlscyAke1BOfS1kb2N0ZXN0ICR7UE59LWVsZW1lbnR0cmVlICR7UE59LWVtYWlsICR7UE59LWZjbnRsICR7UE59LWdkYm0gJHtQTn0taG90c2hvdCAke1BOfS1odG1sICR7UE59LWlkbGUgJHtQTn0taW1hZ2UgJHtQTn0taW1wb3J0bGliICR7UE59LWlvICR7UE59LWpzb24gJHtQTn0tbGFuZyAke1BOfS1sb2dnaW5nICR7UE59LW1haWxib3ggJHtQTn0tbWF0aCAke1BOfS1taW1lICR7UE59LW1tYXAgJHtQTn0tbXVsdGlwcm9jZXNzaW5nICR7UE59LW5ldGNsaWVudCAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tbnVtYmVycyAke1BOfS1waWNrbGUgJHtQTn0tcGtndXRpbCAke1BOfS1wcHJpbnQgJHtQTn0tcHJvZmlsZSAke1BOfS1weWRvYyAke1BOfS1yZSAke1BOfS1yZWFkbGluZSAke1BOfS1yZXNvdXJjZSAke1BOfS1yb2JvdHBhcnNlciAke1BOfS1zaGVsbCAke1BOfS1zbXRwZCAke1BOfS1zcWxpdGUzICR7UE59LXNxbGl0ZTMtdGVzdHMgJHtQTn0tc3RyaW5nb2xkICR7UE59LXN1YnByb2Nlc3MgJHtQTn0tc3lzbG9nICR7UE59LXRlcm1pbmFsICR7UE59LXRlc3RzICR7UE59LXRleHR1dGlscyAke1BOfS10aHJlYWRpbmcgJHtQTn0tdGtpbnRlciAke1BOfS11bml0dGVzdCAke1BOfS11bml4YWRtaW4gJHtQTn0teG1sICR7UE59LXhtbHJwYyAke1BOfS16bGliICAiCitBTExPV19FTVBUWV8ke1BOfS1tb2R1bGVzID0gIjEiCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi0zLjQtbWFuaWZlc3QuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi0zLjQtbWFuaWZlc3QuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZTE0OTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLTMuNC1tYW5pZmVzdC5pbmMKQEAgLTAsMCArMSwyNjggQEAKKworIyBXQVJOSU5HOiBUaGlzIGZpbGUgaXMgQVVUTyBHRU5FUkFURUQ6IE1hbnVhbCBlZGl0cyB3aWxsIGJlIGxvc3QgbmV4dCB0aW1lIEkgcmVnZW5lcmF0ZSB0aGUgZmlsZS4KKyMgR2VuZXJhdG9yOiAnLi4vLi4vLi4vc2NyaXB0cy9jb250cmliL3B5dGhvbi9nZW5lcmF0ZS1tYW5pZmVzdC0zLjQucHknIFZlcnNpb24gMjAxNDAxMzEgKEMpIDIwMDItMjAxMCBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtbGF1ZXJAdmFuaWxsZS1tZWRpYS5kZT4KKyMgVmlzaXQgdGhlIFB5dGhvbiBmb3IgRW1iZWRkZWQgU3lzdGVtcyBTaXRlID0+IGh0dHA6Ly93d3cuVmFuaWxsZS5kZS9wcm9qZWN0cy9weXRob24uc3B5CisKKyAKKworUFJPVklERVMrPSIke1BOfS0ydG8zICR7UE59LWFzeW5jaW8gJHtQTn0tYXVkaW8gJHtQTn0tY29kZWNzICR7UE59LWNvbXBpbGUgJHtQTn0tY29tcHJlc3Npb24gJHtQTn0tY29yZSAke1BOfS1jcnlwdCAke1BOfS1jdHlwZXMgJHtQTn0tY3Vyc2VzICR7UE59LWRhdGV0aW1lICR7UE59LWRiICR7UE59LWRlYnVnZ2VyICR7UE59LWRldiAke1BOfS1kaWZmbGliICR7UE59LWRpc3R1dGlscyAke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2ICR7UE59LWRvY3Rlc3QgJHtQTn0tZWxlbWVudHRyZWUgJHtQTn0tZW1haWwgJHtQTn0tZmNudGwgJHtQTn0tZ2RibSAke1BOfS1odG1sICR7UE59LWlkbGUgJHtQTn0taW1hZ2UgJHtQTn0taW1wb3J0bGliICR7UE59LWlvICR7UE59LWpzb24gJHtQTn0tbGFuZyAke1BOfS1sb2dnaW5nICR7UE59LW1haWxib3ggJHtQTn0tbWF0aCAke1BOfS1taW1lICR7UE59LW1tYXAgJHtQTn0tbXVsdGlwcm9jZXNzaW5nICR7UE59LW5ldGNsaWVudCAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tbnVtYmVycyAke1BOfS1waWNrbGUgJHtQTn0tcGtndXRpbCAke1BOfS1wcHJpbnQgJHtQTn0tcHJvZmlsZSAke1BOfS1weWRvYyAke1BOfS1yZSAke1BOfS1yZWFkbGluZSAke1BOfS1yZXBybGliICR7UE59LXJlc291cmNlICR7UE59LXNoZWxsICR7UE59LXNtdHBkICR7UE59LXNxbGl0ZTMgJHtQTn0tc3FsaXRlMy10ZXN0cyAke1BOfS1zdHJpbmdvbGQgJHtQTn0tc3VicHJvY2VzcyAke1BOfS1zeXNsb2cgJHtQTn0tdGVybWluYWwgJHtQTn0tdGVzdHMgJHtQTn0tdGV4dHV0aWxzICR7UE59LXRocmVhZGluZyAke1BOfS10a2ludGVyICR7UE59LXVuaXR0ZXN0ICR7UE59LXVuaXhhZG1pbiAke1BOfS14bWwgJHtQTn0teG1scnBjICIKKworUEFDS0FHRVM9IiR7UE59LWRiZyAke1BOfS0ydG8zICR7UE59LWFzeW5jaW8gJHtQTn0tYXVkaW8gJHtQTn0tY29kZWNzICR7UE59LWNvbXBpbGUgJHtQTn0tY29tcHJlc3Npb24gJHtQTn0tY29yZSAke1BOfS1jcnlwdCAke1BOfS1jdHlwZXMgJHtQTn0tY3Vyc2VzICR7UE59LWRhdGV0aW1lICR7UE59LWRiICR7UE59LWRlYnVnZ2VyICR7UE59LWRldiAke1BOfS1kaWZmbGliICR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXYgJHtQTn0tZGlzdHV0aWxzICR7UE59LWRvY3Rlc3QgJHtQTn0tZWxlbWVudHRyZWUgJHtQTn0tZW1haWwgJHtQTn0tZmNudGwgJHtQTn0tZ2RibSAke1BOfS1odG1sICR7UE59LWlkbGUgJHtQTn0taW1hZ2UgJHtQTn0taW1wb3J0bGliICR7UE59LWlvICR7UE59LWpzb24gJHtQTn0tbGFuZyAke1BOfS1sb2dnaW5nICR7UE59LW1haWxib3ggJHtQTn0tbWF0aCAke1BOfS1taW1lICR7UE59LW1tYXAgJHtQTn0tbXVsdGlwcm9jZXNzaW5nICR7UE59LW5ldGNsaWVudCAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tbnVtYmVycyAke1BOfS1waWNrbGUgJHtQTn0tcGtndXRpbCAke1BOfS1wcHJpbnQgJHtQTn0tcHJvZmlsZSAke1BOfS1weWRvYyAke1BOfS1yZSAke1BOfS1yZWFkbGluZSAke1BOfS1yZXBybGliICR7UE59LXJlc291cmNlICR7UE59LXNoZWxsICR7UE59LXNtdHBkICR7UE59LXNxbGl0ZTMgJHtQTn0tc3FsaXRlMy10ZXN0cyAke1BOfS1zdHJpbmdvbGQgJHtQTn0tc3VicHJvY2VzcyAke1BOfS1zeXNsb2cgJHtQTn0tdGVybWluYWwgJHtQTn0tdGVzdHMgJHtQTn0tdGV4dHV0aWxzICR7UE59LXRocmVhZGluZyAke1BOfS10a2ludGVyICR7UE59LXVuaXR0ZXN0ICR7UE59LXVuaXhhZG1pbiAke1BOfS14bWwgJHtQTn0teG1scnBjICR7UE59LW1vZHVsZXMiCisKK1NVTU1BUllfJHtQTn0tMnRvMz0iUHl0aG9uIGF1dG9tYXRlZCBQeXRob24gMiB0byAzIGNvZGUgdHJhbnNsYXRvciIKK1JERVBFTkRTXyR7UE59LTJ0bzM9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS0ydG8zPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYjJ0bzMgIgorCitTVU1NQVJZXyR7UE59LWFzeW5jaW89IlB5dGhvbiBBc3luY2hyb25vdXMgSS9PLCBldmVudCBsb29wLCBjb3JvdXRpbmVzIGFuZCB0YXNrcyIKK1JERVBFTkRTXyR7UE59LWFzeW5jaW89IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1hc3luY2lvPSIke2xpYmRpcn0vcHl0aG9uMy40L2FzeW5jaW8gIgorCitTVU1NQVJZXyR7UE59LWF1ZGlvPSJQeXRob24gQXVkaW8gSGFuZGxpbmciCitSREVQRU5EU18ke1BOfS1hdWRpbz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWF1ZGlvPSIke2xpYmRpcn0vcHl0aG9uMy40L3dhdmUuKiAke2xpYmRpcn0vcHl0aG9uMy40L2NodW5rLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zbmRoZHIuKiAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL29zc2F1ZGlvZGV2Liouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9hdWRpb29wLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9hdWRpb2Rldi4qICR7bGliZGlyfS9weXRob24zLjQvc3VuYXVkaW8uKiAke2xpYmRpcn0vcHl0aG9uMy40L3N1bmF1LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC90b2FpZmYuKiAiCisKK1NVTU1BUllfJHtQTn0tY29kZWNzPSJQeXRob24gY29kZWNzLCBlbmNvZGluZ3MgJiBpMThuIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jb2RlY3M9IiR7UE59LWNvcmUgJHtQTn0tbGFuZyIKK0ZJTEVTXyR7UE59LWNvZGVjcz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9jb2RlY3MuKiAke2xpYmRpcn0vcHl0aG9uMy40L2VuY29kaW5ncyAke2xpYmRpcn0vcHl0aG9uMy40L2dldHRleHQuKiAke2xpYmRpcn0vcHl0aG9uMy40L2xvY2FsZS4qICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2xvY2FsZS4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2NvZGVjcyogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fbXVsdGlieXRlY29kZWMuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3VuaWNvZGVkYXRhLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9zdHJpbmdwcmVwLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC94ZHJsaWIuKiAiCisKK1NVTU1BUllfJHtQTn0tY29tcGlsZT0iUHl0aG9uIGJ5dGVjb2RlIGNvbXBpbGF0aW9uIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jb21waWxlPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tY29tcGlsZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9weV9jb21waWxlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9jb21waWxlYWxsLiogIgorCitTVU1NQVJZXyR7UE59LWNvbXByZXNzaW9uPSJQeXRob24gaGlnaC1sZXZlbCBjb21wcmVzc2lvbiBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tY29tcHJlc3Npb249IiR7UE59LWNvcmUgJHtQTn0tY29kZWNzIgorRklMRVNfJHtQTn0tY29tcHJlc3Npb249IiR7bGliZGlyfS9weXRob24zLjQvZ3ppcC4qICR7bGliZGlyfS9weXRob24zLjQvemlwZmlsZS4qICR7bGliZGlyfS9weXRob24zLjQvdGFyZmlsZS4qICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvYnoyLiouc28gIgorCitTVU1NQVJZXyR7UE59LWNvcmU9IlB5dGhvbiBpbnRlcnByZXRlciBhbmQgY29yZSBtb2R1bGVzIgorUkRFUEVORFNfJHtQTn0tY29yZT0iJHtQTn0tbGFuZyAke1BOfS1yZSAke1BOfS1yZXBybGliICR7UE59LWNvZGVjcyAke1BOfS1pbyAke1BOfS1tYXRoIgorRklMRVNfJHtQTn0tY29yZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9fX2Z1dHVyZV9fLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9fYWJjb2xsLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9hYmMuKiAke2xpYmRpcn0vcHl0aG9uMy40L2NvcHkuKiAke2xpYmRpcn0vcHl0aG9uMy40L2NvcHlyZWcuKiAke2xpYmRpcn0vcHl0aG9uMy40L0NvbmZpZ1BhcnNlci4qICR7bGliZGlyfS9weXRob24zLjQvZ2VuZXJpY3BhdGguKiAke2xpYmRpcn0vcHl0aG9uMy40L2dldG9wdC4qICR7bGliZGlyfS9weXRob24zLjQvbGluZWNhY2hlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9uZXcuKiAke2xpYmRpcn0vcHl0aG9uMy40L29zLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9wb3NpeHBhdGguKiAke2xpYmRpcn0vcHl0aG9uMy40L3N0cnVjdC4qICR7bGliZGlyfS9weXRob24zLjQvd2FybmluZ3MuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NpdGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L3N0YXQuKiAke2xpYmRpcn0vcHl0aG9uMy40L1VzZXJEaWN0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9Vc2VyTGlzdC4qICR7bGliZGlyfS9weXRob24zLjQvVXNlclN0cmluZy4qICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvYmluYXNjaWkuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19zdHJ1Y3QuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3RpbWUuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3hyZWFkbGluZXMuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L3R5cGVzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9wbGF0Zm9ybS4qICR7YmluZGlyfS9weXRob24qICR7bGliZGlyfS9weXRob24zLjQvX3dlYWtyZWZzZXQuKiAke2xpYmRpcn0vcHl0aG9uMy40L3N5c2NvbmZpZy4qICR7bGliZGlyfS9weXRob24zLjQvX3N5c2NvbmZpZ2RhdGEuKiAke2xpYmRpcn0vcHl0aG9uMy40L2NvbmZpZy9NYWtlZmlsZSAke2luY2x1ZGVkaXJ9L3B5dGhvbiR7UFlUSE9OX0JJTkFCSX0vcHljb25maWcqLmggJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29sbGVjdGlvbnMgJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vX2NvbGxlY3Rpb25zX2FiYy4qICR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L19zaXRlYnVpbHRpbnMuKiAke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9zaXRlY3VzdG9taXplLnB5ICIKKworU1VNTUFSWV8ke1BOfS1jcnlwdD0iUHl0aG9uIGJhc2ljIGNyeXB0b2dyYXBoaWMgYW5kIGhhc2hpbmcgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWNyeXB0PSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tY3J5cHQ9IiR7bGliZGlyfS9weXRob24zLjQvaGFzaGxpYi4qICR7bGliZGlyfS9weXRob24zLjQvbWQ1LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zaGEuKiAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL2NyeXB0Liouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9faGFzaGxpYi4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX3NoYTI1Ni4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX3NoYTUxMi4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1jdHlwZXM9IlB5dGhvbiBDIHR5cGVzIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jdHlwZXM9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jdHlwZXM9IiR7bGliZGlyfS9weXRob24zLjQvY3R5cGVzICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2N0eXBlcy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2N0eXBlc190ZXN0Liouc28gIgorCitTVU1NQVJZXyR7UE59LWN1cnNlcz0iUHl0aG9uIGN1cnNlcyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tY3Vyc2VzPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tY3Vyc2VzPSIke2xpYmRpcn0vcHl0aG9uMy40L2N1cnNlcyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19jdXJzZXMuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19jdXJzZXNfcGFuZWwuKi5zbyAiCisKK1NVTU1BUllfJHtQTn0tZGF0ZXRpbWU9IlB5dGhvbiBjYWxlbmRhciBhbmQgdGltZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tZGF0ZXRpbWU9IiR7UE59LWNvcmUgJHtQTn0tY29kZWNzIgorRklMRVNfJHtQTn0tZGF0ZXRpbWU9IiR7bGliZGlyfS9weXRob24zLjQvX3N0cnB0aW1lLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9jYWxlbmRhci4qICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvZGF0ZXRpbWUuKi5zbyAiCisKK1NVTU1BUllfJHtQTn0tZGI9IlB5dGhvbiBmaWxlLWJhc2VkIGRhdGFiYXNlIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1kYj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWRiPSIke2xpYmRpcn0vcHl0aG9uMy40L2FueWRibS4qICR7bGliZGlyfS9weXRob24zLjQvZHVtYmRibS4qICR7bGliZGlyfS9weXRob24zLjQvd2hpY2hkYi4qICR7bGliZGlyfS9weXRob24zLjQvZGJtICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2RibS4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1kZWJ1Z2dlcj0iUHl0aG9uIGRlYnVnZ2VyIgorUkRFUEVORFNfJHtQTn0tZGVidWdnZXI9IiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tbGFuZyAke1BOfS1yZSAke1BOfS1zdHJpbmdvbGQgJHtQTn0tc2hlbGwgJHtQTn0tcHByaW50IgorRklMRVNfJHtQTn0tZGVidWdnZXI9IiR7bGliZGlyfS9weXRob24zLjQvYmRiLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9wZGIuKiAiCisKK1NVTU1BUllfJHtQTn0tZGV2PSJQeXRob24gZGV2ZWxvcG1lbnQgcGFja2FnZSIKK1JERVBFTkRTXyR7UE59LWRldj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWRldj0iJHtpbmNsdWRlZGlyfSAke2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSAke2xpYmRpcn0vKi5sYSAke2xpYmRpcn0vKi5hICR7bGliZGlyfS8qLm8gJHtsaWJkaXJ9L3BrZ2NvbmZpZyAke2Jhc2VfbGliZGlyfS8qLmEgJHtiYXNlX2xpYmRpcn0vKi5vICR7ZGF0YWRpcn0vYWNsb2NhbCAke2RhdGFkaXJ9L3BrZ2NvbmZpZyAiCisKK1NVTU1BUllfJHtQTn0tZGlmZmxpYj0iUHl0aG9uIGhlbHBlcnMgZm9yIGNvbXB1dGluZyBkZWx0YXMgYmV0d2VlbiBvYmplY3RzIgorUkRFUEVORFNfJHtQTn0tZGlmZmxpYj0iJHtQTn0tbGFuZyAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LWRpZmZsaWI9IiR7bGliZGlyfS9weXRob24zLjQvZGlmZmxpYi4qICIKKworU1VNTUFSWV8ke1BOfS1kaXN0dXRpbHM9IlB5dGhvbiBEaXN0cmlidXRpb24gVXRpbGl0aWVzIgorUkRFUEVORFNfJHtQTn0tZGlzdHV0aWxzPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZGlzdHV0aWxzPSIke2xpYmRpcn0vcHl0aG9uMy40L2NvbmZpZyAke2xpYmRpcn0vcHl0aG9uMy40L2Rpc3R1dGlscyAiCisKK1NVTU1BUllfJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2Rldj0iUHl0aG9uIGRpc3RyaWJ1dGlvbiB1dGlsaXRpZXMgKHN0YXRpYyBsaWJyYXJpZXMpIgorUkRFUEVORFNfJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2Rldj0iJHtQTn0tZGlzdHV0aWxzIgorRklMRVNfJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2Rldj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9jb25maWcvbGliKi5hICIKKworU1VNTUFSWV8ke1BOfS1kb2N0ZXN0PSJQeXRob24gZnJhbWV3b3JrIGZvciBydW5uaW5nIGV4YW1wbGVzIGluIGRvY3N0cmluZ3MiCitSREVQRU5EU18ke1BOfS1kb2N0ZXN0PSIke1BOfS1jb3JlICR7UE59LWxhbmcgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tdW5pdHRlc3QgJHtQTn0tZGVidWdnZXIgJHtQTn0tZGlmZmxpYiIKK0ZJTEVTXyR7UE59LWRvY3Rlc3Q9IiR7bGliZGlyfS9weXRob24zLjQvZG9jdGVzdC4qICIKKworU1VNTUFSWV8ke1BOfS1lbGVtZW50dHJlZT0iUHl0aG9uIGVsZW1lbnRyZWUiCitSREVQRU5EU18ke1BOfS1lbGVtZW50dHJlZT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWVsZW1lbnR0cmVlPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19lbGVtZW50dHJlZS4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1lbWFpbD0iUHl0aG9uIGVtYWlsIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1lbWFpbD0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1yZSAke1BOfS1taW1lICR7UE59LWF1ZGlvICR7UE59LWltYWdlICR7UE59LW5ldGNsaWVudCIKK0ZJTEVTXyR7UE59LWVtYWlsPSIke2xpYmRpcn0vcHl0aG9uMy40L2ltYXBsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L2VtYWlsICIKKworU1VNTUFSWV8ke1BOfS1mY250bD0iUHl0aG9uJ3MgZmNudGwgaW50ZXJmYWNlIgorUkRFUEVORFNfJHtQTn0tZmNudGw9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1mY250bD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9mY250bC4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1nZGJtPSJQeXRob24gR05VIGRhdGFiYXNlIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1nZGJtPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZ2RibT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fZ2RibS4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1odG1sPSJQeXRob24gSFRNTCBwcm9jZXNzaW5nIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1odG1sPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0taHRtbD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9mb3JtYXR0ZXIuKiAke2xpYmRpcn0vcHl0aG9uMy40L2h0bWxlbnRpdHlkZWZzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9odG1sbGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9tYXJrdXBiYXNlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zZ21sbGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9IVE1MUGFyc2VyLiogIgorCitTVU1NQVJZXyR7UE59LWlkbGU9IlB5dGhvbiBJbnRlZ3JhdGVkIERldmVsb3BtZW50IEVudmlyb25tZW50IgorUkRFUEVORFNfJHtQTn0taWRsZT0iJHtQTn0tY29yZSAke1BOfS10a2ludGVyIgorRklMRVNfJHtQTn0taWRsZT0iJHtiaW5kaXJ9L2lkbGUgJHtsaWJkaXJ9L3B5dGhvbjMuNC9pZGxlbGliICIKKworU1VNTUFSWV8ke1BOfS1pbWFnZT0iUHl0aG9uIGdyYXBoaWNhbCBpbWFnZSBoYW5kbGluZyIKK1JERVBFTkRTXyR7UE59LWltYWdlPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0taW1hZ2U9IiR7bGliZGlyfS9weXRob24zLjQvY29sb3JzeXMuKiAke2xpYmRpcn0vcHl0aG9uMy40L2ltZ2hkci4qICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvaW1hZ2VvcC4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvcmdiaW1nLiouc28gIgorCitTVU1NQVJZXyR7UE59LWltcG9ydGxpYj0iUHl0aG9uIGltcG9ydCBpbXBsZW1lbnRhdGlvbiBsaWJyYXJ5IgorUkRFUEVORFNfJHtQTn0taW1wb3J0bGliPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0taW1wb3J0bGliPSIke2xpYmRpcn0vcHl0aG9uMy40L2ltcG9ydGxpYiAiCisKK1NVTU1BUllfJHtQTn0taW89IlB5dGhvbiBsb3ctbGV2ZWwgSS9PIgorUkRFUEVORFNfJHtQTn0taW89IiR7UE59LWNvcmUgJHtQTn0tbWF0aCIKK0ZJTEVTXyR7UE59LWlvPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19zb2NrZXQuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19pby4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX3NzbC4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvc2VsZWN0Liouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC90ZXJtaW9zLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9jU3RyaW5nSU8uKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L3BpcGVzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zb2NrZXQuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NzbC4qICR7bGliZGlyfS9weXRob24zLjQvdGVtcGZpbGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L1N0cmluZ0lPLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9pby4qICR7bGliZGlyfS9weXRob24zLjQvX3B5aW8uKiAiCisKK1NVTU1BUllfJHtQTn0tanNvbj0iUHl0aG9uIEpTT04gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWpzb249IiR7UE59LWNvcmUgJHtQTn0tbWF0aCAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LWpzb249IiR7bGliZGlyfS9weXRob24zLjQvanNvbiAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19qc29uLiouc28gIgorCitTVU1NQVJZXyR7UE59LWxhbmc9IlB5dGhvbiBsb3ctbGV2ZWwgbGFuZ3VhZ2Ugc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWxhbmc9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1sYW5nPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19iaXNlY3QuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19jb2xsZWN0aW9ucy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2hlYXBxLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fd2Vha3JlZi4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2Z1bmN0b29scy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvYXJyYXkuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL2l0ZXJ0b29scy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvb3BlcmF0b3IuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3BhcnNlci4qLnNvICR7bGliZGlyfS9weXRob24zLjQvYXRleGl0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9iaXNlY3QuKiAke2xpYmRpcn0vcHl0aG9uMy40L2NvZGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L2NvZGVvcC4qICR7bGliZGlyfS9weXRob24zLjQvY29sbGVjdGlvbnMuKiAke2xpYmRpcn0vcHl0aG9uMy40L19jb2xsZWN0aW9uc19hYmMuKiAke2xpYmRpcn0vcHl0aG9uMy40L2Rpcy4qICR7bGliZGlyfS9weXRob24zLjQvZnVuY3Rvb2xzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9oZWFwcS4qICR7bGliZGlyfS9weXRob24zLjQvaW5zcGVjdC4qICR7bGliZGlyfS9weXRob24zLjQva2V5d29yZC4qICR7bGliZGlyfS9weXRob24zLjQvb3Bjb2RlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zeW1ib2wuKiAke2xpYmRpcn0vcHl0aG9uMy40L3JlcHIuKiAke2xpYmRpcn0vcHl0aG9uMy40L3Rva2VuLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC90b2tlbml6ZS4qICR7bGliZGlyfS9weXRob24zLjQvdHJhY2ViYWNrLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC93ZWFrcmVmLiogIgorCitTVU1NQVJZXyR7UE59LWxvZ2dpbmc9IlB5dGhvbiBsb2dnaW5nIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1sb2dnaW5nPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tcGlja2xlICR7UE59LXN0cmluZ29sZCIKK0ZJTEVTXyR7UE59LWxvZ2dpbmc9IiR7bGliZGlyfS9weXRob24zLjQvbG9nZ2luZyAiCisKK1NVTU1BUllfJHtQTn0tbWFpbGJveD0iUHl0aG9uIG1haWxib3ggZm9ybWF0IHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1tYWlsYm94PSIke1BOfS1jb3JlICR7UE59LW1pbWUiCitGSUxFU18ke1BOfS1tYWlsYm94PSIke2xpYmRpcn0vcHl0aG9uMy40L21haWxib3guKiAiCisKK1NVTU1BUllfJHtQTn0tbWF0aD0iUHl0aG9uIG1hdGggc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LW1hdGg9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1tYXRoPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL2NtYXRoLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9tYXRoLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fcmFuZG9tLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9yYW5kb20uKiAke2xpYmRpcn0vcHl0aG9uMy40L3NldHMuKiAiCisKK1NVTU1BUllfJHtQTn0tbWltZT0iUHl0aG9uIE1JTUUgaGFuZGxpbmcgQVBJcyIKK1JERVBFTkRTXyR7UE59LW1pbWU9IiR7UE59LWNvcmUgJHtQTn0taW8iCitGSUxFU18ke1BOfS1taW1lPSIke2xpYmRpcn0vcHl0aG9uMy40L21pbWV0b29scy4qICR7bGliZGlyfS9weXRob24zLjQvdXUuKiAke2xpYmRpcn0vcHl0aG9uMy40L3F1b3ByaS4qICR7bGliZGlyfS9weXRob24zLjQvcmZjODIyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9NaW1lV3JpdGVyLiogIgorCitTVU1NQVJZXyR7UE59LW1tYXA9IlB5dGhvbiBtZW1vcnktbWFwcGVkIGZpbGUgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LW1tYXA9IiR7UE59LWNvcmUgJHtQTn0taW8iCitGSUxFU18ke1BOfS1tbWFwPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL21tYXAuKi5zbyAiCisKK1NVTU1BUllfJHtQTn0tbXVsdGlwcm9jZXNzaW5nPSJQeXRob24gbXVsdGlwcm9jZXNzaW5nIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1tdWx0aXByb2Nlc3Npbmc9IiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tbGFuZyAke1BOfS1waWNrbGUgJHtQTn0tdGhyZWFkaW5nICR7UE59LWN0eXBlcyAke1BOfS1tbWFwIgorRklMRVNfJHtQTn0tbXVsdGlwcm9jZXNzaW5nPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19tdWx0aXByb2Nlc3NpbmcuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L211bHRpcHJvY2Vzc2luZyAiCisKK1NVTU1BUllfJHtQTn0tbmV0Y2xpZW50PSJQeXRob24gSW50ZXJuZXQgUHJvdG9jb2wgY2xpZW50cyIKK1JERVBFTkRTXyR7UE59LW5ldGNsaWVudD0iJHtQTn0tY29yZSAke1BOfS1jcnlwdCAke1BOfS1kYXRldGltZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWltZSIKK0ZJTEVTXyR7UE59LW5ldGNsaWVudD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC8qQ29va2llKi4qICR7bGliZGlyfS9weXRob24zLjQvYmFzZTY0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9jb29raWVsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L2Z0cGxpYi4qICR7bGliZGlyfS9weXRob24zLjQvZ29waGVybGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9obWFjLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9odHRwbGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9taW1ldHlwZXMuKiAke2xpYmRpcn0vcHl0aG9uMy40L25udHBsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L3BvcGxpYi4qICR7bGliZGlyfS9weXRob24zLjQvc210cGxpYi4qICR7bGliZGlyfS9weXRob24zLjQvdGVsbmV0bGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC91cmxsaWIgJHtsaWJkaXJ9L3B5dGhvbjMuNC91dWlkLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9yZmM4MjIuKiAke2xpYmRpcn0vcHl0aG9uMy40L21pbWV0b29scy4qICIKKworU1VNTUFSWV8ke1BOfS1uZXRzZXJ2ZXI9IlB5dGhvbiBJbnRlcm5ldCBQcm90b2NvbCBzZXJ2ZXJzIgorUkRFUEVORFNfJHtQTn0tbmV0c2VydmVyPSIke1BOfS1jb3JlICR7UE59LW5ldGNsaWVudCAke1BOfS1zaGVsbCAke1BOfS10aHJlYWRpbmciCitGSUxFU18ke1BOfS1uZXRzZXJ2ZXI9IiR7bGliZGlyfS9weXRob24zLjQvY2dpLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC8qSFRUUFNlcnZlci4qICR7bGliZGlyfS9weXRob24zLjQvU29ja2V0U2VydmVyLiogIgorCitTVU1NQVJZXyR7UE59LW51bWJlcnM9IlB5dGhvbiBudW1iZXIgQVBJcyIKK1JERVBFTkRTXyR7UE59LW51bWJlcnM9IiR7UE59LWNvcmUgJHtQTn0tbGFuZyAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LW51bWJlcnM9IiR7bGliZGlyfS9weXRob24zLjQvZGVjaW1hbC4qICR7bGliZGlyfS9weXRob24zLjQvZnJhY3Rpb25zLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9udW1iZXJzLiogIgorCitTVU1NQVJZXyR7UE59LXBpY2tsZT0iUHl0aG9uIHNlcmlhbGlzYXRpb24vcGVyc2lzdGVuY2Ugc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXBpY2tsZT0iJHtQTn0tY29yZSAke1BOfS1jb2RlY3MgJHtQTn0taW8gJHtQTn0tcmUiCitGSUxFU18ke1BOfS1waWNrbGU9IiR7bGliZGlyfS9weXRob24zLjQvcGlja2xlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zaGVsdmUuKiAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL2NQaWNrbGUuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L3BpY2tsZXRvb2xzLiogIgorCitTVU1NQVJZXyR7UE59LXBrZ3V0aWw9IlB5dGhvbiBwYWNrYWdlIGV4dGVuc2lvbiB1dGlsaXR5IHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1wa2d1dGlsPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tcGtndXRpbD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9wa2d1dGlsLiogIgorCitTVU1NQVJZXyR7UE59LXBwcmludD0iUHl0aG9uIHByZXR0eS1wcmludCBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tcHByaW50PSIke1BOfS1jb3JlICR7UE59LWlvIgorRklMRVNfJHtQTn0tcHByaW50PSIke2xpYmRpcn0vcHl0aG9uMy40L3BwcmludC4qICIKKworU1VNTUFSWV8ke1BOfS1wcm9maWxlPSJQeXRob24gYmFzaWMgcGVyZm9ybWFuY2UgcHJvZmlsaW5nIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1wcm9maWxlPSIke1BOfS1jb3JlICR7UE59LXRleHR1dGlscyIKK0ZJTEVTXyR7UE59LXByb2ZpbGU9IiR7bGliZGlyfS9weXRob24zLjQvcHJvZmlsZS4qICR7bGliZGlyfS9weXRob24zLjQvcHN0YXRzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9jUHJvZmlsZS4qICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2xzcHJvZi4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1weWRvYz0iUHl0aG9uIGludGVyYWN0aXZlIGhlbHAgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXB5ZG9jPSIke1BOfS1jb3JlICR7UE59LWxhbmcgJHtQTn0tc3RyaW5nb2xkICR7UE59LXJlIgorRklMRVNfJHtQTn0tcHlkb2M9IiR7YmluZGlyfS9weWRvYyAke2xpYmRpcn0vcHl0aG9uMy40L3B5ZG9jLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9weWRvY19kYXRhICIKKworU1VNTUFSWV8ke1BOfS1yZT0iUHl0aG9uIFJlZ3VsYXIgRXhwcmVzc2lvbiBBUElzIgorUkRFUEVORFNfJHtQTn0tcmU9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1yZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9yZS4qICR7bGliZGlyfS9weXRob24zLjQvc3JlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zcmVfY29tcGlsZS4qICR7bGliZGlyfS9weXRob24zLjQvc3JlX2NvbnN0YW50cyogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zcmVfcGFyc2UuKiAiCisKK1NVTU1BUllfJHtQTn0tcmVhZGxpbmU9IlB5dGhvbiByZWFkbGluZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tcmVhZGxpbmU9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1yZWFkbGluZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9yZWFkbGluZS4qLnNvICR7bGliZGlyfS9weXRob24zLjQvcmxjb21wbGV0ZXIuKiAiCisKK1NVTU1BUllfJHtQTn0tcmVwcmxpYj0iUHl0aG9uIGFsdGVybmF0ZSByZXByKCkgaW1wbGVtZW50YXRpb24iCitSREVQRU5EU18ke1BOfS1yZXBybGliPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tcmVwcmxpYj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9yZXBybGliLnB5ICIKKworU1VNTUFSWV8ke1BOfS1yZXNvdXJjZT0iUHl0aG9uIHJlc291cmNlIGNvbnRyb2wgaW50ZXJmYWNlIgorUkRFUEVORFNfJHtQTn0tcmVzb3VyY2U9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1yZXNvdXJjZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9yZXNvdXJjZS4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1zaGVsbD0iUHl0aG9uIHNoZWxsLWxpa2UgZnVuY3Rpb25hbGl0eSIKK1JERVBFTkRTXyR7UE59LXNoZWxsPSIke1BOfS1jb3JlICR7UE59LXJlIgorRklMRVNfJHtQTn0tc2hlbGw9IiR7bGliZGlyfS9weXRob24zLjQvY21kLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9jb21tYW5kcy4qICR7bGliZGlyfS9weXRob24zLjQvZGlyY2FjaGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L2ZubWF0Y2guKiAke2xpYmRpcn0vcHl0aG9uMy40L2dsb2IuKiAke2xpYmRpcn0vcHl0aG9uMy40L3BvcGVuMi4qICR7bGliZGlyfS9weXRob24zLjQvc2hsZXguKiAke2xpYmRpcn0vcHl0aG9uMy40L3NodXRpbC4qICIKKworU1VNTUFSWV8ke1BOfS1zbXRwZD0iUHl0aG9uIFNpbXBsZSBNYWlsIFRyYW5zcG9ydCBEYWVtb24iCitSREVQRU5EU18ke1BOfS1zbXRwZD0iJHtQTn0tY29yZSAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tZW1haWwgJHtQTn0tbWltZSIKK0ZJTEVTXyR7UE59LXNtdHBkPSIke2JpbmRpcn0vc210cGQuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NtdHBkLiogIgorCitTVU1NQVJZXyR7UE59LXNxbGl0ZTM9IlB5dGhvbiBTcWxpdGUzIGRhdGFiYXNlIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1zcWxpdGUzPSIke1BOfS1jb3JlICR7UE59LWRhdGV0aW1lICR7UE59LWxhbmcgJHtQTn0tY3J5cHQgJHtQTn0taW8gJHtQTn0tdGhyZWFkaW5nIgorRklMRVNfJHtQTn0tc3FsaXRlMz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fc3FsaXRlMy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvc3FsaXRlMy9kYmFwaTIuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NxbGl0ZTMvX19pbml0X18uKiAke2xpYmRpcn0vcHl0aG9uMy40L3NxbGl0ZTMvZHVtcC4qICIKKworU1VNTUFSWV8ke1BOfS1zcWxpdGUzLXRlc3RzPSJQeXRob24gU3FsaXRlMyBkYXRhYmFzZSBzdXBwb3J0IHRlc3RzIgorUkRFUEVORFNfJHtQTn0tc3FsaXRlMy10ZXN0cz0iJHtQTn0tY29yZSAke1BOfS1zcWxpdGUzIgorRklMRVNfJHtQTn0tc3FsaXRlMy10ZXN0cz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9zcWxpdGUzL3Rlc3QgIgorCitTVU1NQVJZXyR7UE59LXN0cmluZ29sZD0iUHl0aG9uIHN0cmluZyBBUElzIFtkZXByZWNhdGVkXSIKK1JERVBFTkRTXyR7UE59LXN0cmluZ29sZD0iJHtQTn0tY29yZSAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LXN0cmluZ29sZD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9zdHJvcC4qLnNvICR7bGliZGlyfS9weXRob24zLjQvc3RyaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zdHJpbmdvbGQuKiAiCisKK1NVTU1BUllfJHtQTn0tc3VicHJvY2Vzcz0iUHl0aG9uIHN1YnByb2Nlc3Mgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXN1YnByb2Nlc3M9IiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tZmNudGwgJHtQTn0tcGlja2xlIgorRklMRVNfJHtQTn0tc3VicHJvY2Vzcz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9zdWJwcm9jZXNzLiogIgorCitTVU1NQVJZXyR7UE59LXN5c2xvZz0iUHl0aG9uIHN5c2xvZyBpbnRlcmZhY2UiCitSREVQRU5EU18ke1BOfS1zeXNsb2c9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1zeXNsb2c9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvc3lzbG9nLiouc28gIgorCitTVU1NQVJZXyR7UE59LXRlcm1pbmFsPSJQeXRob24gdGVybWluYWwgY29udHJvbGxpbmcgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXRlcm1pbmFsPSIke1BOfS1jb3JlICR7UE59LWlvIgorRklMRVNfJHtQTn0tdGVybWluYWw9IiR7bGliZGlyfS9weXRob24zLjQvcHR5LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC90dHkuKiAiCisKK1NVTU1BUllfJHtQTn0tdGVzdHM9IlB5dGhvbiB0ZXN0cyIKK1JERVBFTkRTXyR7UE59LXRlc3RzPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tdGVzdHM9IiR7bGliZGlyfS9weXRob24zLjQvdGVzdCAiCisKK1NVTU1BUllfJHtQTn0tdGV4dHV0aWxzPSJQeXRob24gb3B0aW9uIHBhcnNpbmcsIHRleHQgd3JhcHBpbmcgYW5kIENTViBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tdGV4dHV0aWxzPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LXN0cmluZ29sZCIKK0ZJTEVTXyR7UE59LXRleHR1dGlscz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fY3N2Liouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9jc3YuKiAke2xpYmRpcn0vcHl0aG9uMy40L29wdHBhcnNlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC90ZXh0d3JhcC4qICIKKworU1VNTUFSWV8ke1BOfS10aHJlYWRpbmc9IlB5dGhvbiB0aHJlYWRpbmcgJiBzeW5jaHJvbml6YXRpb24gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXRocmVhZGluZz0iJHtQTn0tY29yZSAke1BOfS1sYW5nIgorRklMRVNfJHtQTn0tdGhyZWFkaW5nPSIke2xpYmRpcn0vcHl0aG9uMy40L190aHJlYWRpbmdfbG9jYWwuKiAke2xpYmRpcn0vcHl0aG9uMy40L2R1bW15X3RocmVhZC4qICR7bGliZGlyfS9weXRob24zLjQvZHVtbXlfdGhyZWFkaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9tdXRleC4qICR7bGliZGlyfS9weXRob24zLjQvdGhyZWFkaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9RdWV1ZS4qICIKKworU1VNTUFSWV8ke1BOfS10a2ludGVyPSJQeXRob24gVGNsL1RrIGJpbmRpbmdzIgorUkRFUEVORFNfJHtQTn0tdGtpbnRlcj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXRraW50ZXI9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX3RraW50ZXIuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi10ayAke2xpYmRpcn0vcHl0aG9uMy40L3RraW50ZXIgIgorCitTVU1NQVJZXyR7UE59LXVuaXR0ZXN0PSJQeXRob24gdW5pdCB0ZXN0aW5nIGZyYW1ld29yayIKK1JERVBFTkRTXyR7UE59LXVuaXR0ZXN0PSIke1BOfS1jb3JlICR7UE59LXN0cmluZ29sZCAke1BOfS1sYW5nICR7UE59LWlvICR7UE59LWRpZmZsaWIgJHtQTn0tcHByaW50ICR7UE59LXNoZWxsIgorRklMRVNfJHtQTn0tdW5pdHRlc3Q9IiR7bGliZGlyfS9weXRob24zLjQvdW5pdHRlc3QvICIKKworU1VNTUFSWV8ke1BOfS11bml4YWRtaW49IlB5dGhvbiBVbml4IGFkbWluaXN0cmF0aW9uIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS11bml4YWRtaW49IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS11bml4YWRtaW49IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvbmlzLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9ncnAuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3B3ZC4qLnNvICR7bGliZGlyfS9weXRob24zLjQvZ2V0cGFzcy4qICIKKworU1VNTUFSWV8ke1BOfS14bWw9IlB5dGhvbiBiYXNpYyBYTUwgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXhtbD0iJHtQTn0tY29yZSAke1BOfS1lbGVtZW50dHJlZSAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LXhtbD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9weWV4cGF0Liouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC94bWwgJHtsaWJkaXJ9L3B5dGhvbjMuNC94bWxsaWIuKiAiCisKK1NVTU1BUllfJHtQTn0teG1scnBjPSJQeXRob24gWE1MLVJQQyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0teG1scnBjPSIke1BOfS1jb3JlICR7UE59LXhtbCAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tbGFuZyIKK0ZJTEVTXyR7UE59LXhtbHJwYz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC94bWxycGNsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L1NpbXBsZVhNTFJQQ1NlcnZlci4qICR7bGliZGlyfS9weXRob24zLjQvRG9jWE1MUlBDU2VydmVyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC94bWxycGMgIgorCitTVU1NQVJZXyR7UE59LW1vZHVsZXM9IkFsbCBQeXRob24gbW9kdWxlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZXM9IiR7UE59LTJ0bzMgJHtQTn0tYXN5bmNpbyAke1BOfS1hdWRpbyAke1BOfS1jb2RlY3MgJHtQTn0tY29tcGlsZSAke1BOfS1jb21wcmVzc2lvbiAke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWN0eXBlcyAke1BOfS1jdXJzZXMgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tZGIgJHtQTn0tZGVidWdnZXIgJHtQTn0tZGlmZmxpYiAke1BOfS1kaXN0dXRpbHMgJHtQTn0tZG9jdGVzdCAke1BOfS1lbGVtZW50dHJlZSAke1BOfS1lbWFpbCAke1BOfS1mY250bCAke1BOfS1nZGJtICR7UE59LWh0bWwgJHtQTn0taWRsZSAke1BOfS1pbWFnZSAke1BOfS1pbXBvcnRsaWIgJHtQTn0taW8gJHtQTn0tanNvbiAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWFpbGJveCAke1BOfS1tYXRoICR7UE59LW1pbWUgJHtQTn0tbW1hcCAke1BOfS1tdWx0aXByb2Nlc3NpbmcgJHtQTn0tbmV0Y2xpZW50ICR7UE59LW5ldHNlcnZlciAke1BOfS1udW1iZXJzICR7UE59LXBpY2tsZSAke1BOfS1wa2d1dGlsICR7UE59LXBwcmludCAke1BOfS1wcm9maWxlICR7UE59LXB5ZG9jICR7UE59LXJlICR7UE59LXJlYWRsaW5lICR7UE59LXJlcHJsaWIgJHtQTn0tcmVzb3VyY2UgJHtQTn0tc2hlbGwgJHtQTn0tc210cGQgJHtQTn0tc3FsaXRlMyAke1BOfS1zcWxpdGUzLXRlc3RzICR7UE59LXN0cmluZ29sZCAke1BOfS1zdWJwcm9jZXNzICR7UE59LXN5c2xvZyAke1BOfS10ZXJtaW5hbCAke1BOfS10ZXN0cyAke1BOfS10ZXh0dXRpbHMgJHtQTn0tdGhyZWFkaW5nICR7UE59LXRraW50ZXIgJHtQTn0tdW5pdHRlc3QgJHtQTn0tdW5peGFkbWluICR7UE59LXhtbCAke1BOfS14bWxycGMgICIKK0FMTE9XX0VNUFRZXyR7UE59LW1vZHVsZXMgPSAiMSIKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWFzeW5jXzAuNi4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1hc3luY18wLjYuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWQwYjAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1hc3luY18wLjYuMi5iYgpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIlB5dGhvbiBmcmFtZXdvcmsgdG8gcHJvY2VzcyBpbnRlcmRlcGVuZGVudCB0YXNrcyBpbiBhIHBvb2wgb2Ygd29ya2VycyIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXRodWIuY29tL2dpdHB5dGhvbi1kZXZlbG9wZXJzL2FzeW5jIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1BLRy1JTkZPO2JlZ2lubGluZT04O2VuZGxpbmU9ODttZDU9ODhkZjhlNzhiOWVkZmQ3NDQ5NTM4NjIxNzlmMmQxNGUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvYS9hc3luYy9hc3luYy0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiOWIwNmI1OTk3ZGUyMTU0ZjNiYzAyNzNmODBiY2VmNmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWM2ODk0ZDg3NmU0NTg3OGZhYWU0OTNiMGNmNjFkMGUyOGVjNDE3MzM0NDQ4YWMwYTZlYTIyMjlkODM0MzA1MSIKKworUyA9ICIke1dPUktESVJ9L2FzeW5jLSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlscworCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uLXRocmVhZGluZyBweXRob24tbGFuZyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWRidXNfMS4yLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWRidXNfMS4yLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMxNGRjZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZGJ1c18xLjIuMC5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIlB5dGhvbiBiaW5kaW5ncyBmb3IgdGhlIERCdXMgaW50ZXItcHJvY2VzcyBjb21tdW5pY2F0aW9uIHN5c3RlbSIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvU29mdHdhcmUvZGJ1cyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MGI4MzA0N2NlOWU5NDhiNjdjMGZhY2M1ZjIzMzQ3NmEiCitERVBFTkRTID0gImV4cGF0IGRidXMgZGJ1cy1nbGliIHZpcnR1YWwvbGliaW50bCBweXRob24tcHlyZXgtbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly9kYnVzLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy9kYnVzLXB5dGhvbi9kYnVzLXB5dGhvbi0ke1BWfS50YXIuZ3ogXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjA5Y2QyZDFhMDU3Y2M0MzJjZTk0NGRlM2ZjMDZiZjciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTEyYzZjOGIyYmYzYTkzMDJmNzUxNjY5NTJjYmU0MWQ2YjM4YzM0NDFiYmM2NzY3ZGJkNDk4OTQyMzE2YzZkZiIKK1MgPSAiJHtXT1JLRElSfS9kYnVzLXB5dGhvbi0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMtYmFzZSBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BBQ0tBR0VDT05GSUcgPz0gIiIKK1BBQ0tBR0VDT05GSUdbZG9jc10gPSAiLS1lbmFibGUtaHRtbC1kb2NzLC0tZGlzYWJsZS1odG1sLWRvY3MscHl0aG9uLWRvY3V0aWxzLW5hdGl2ZSIKK1BBQ0tBR0VDT05GSUdbYXBpLWRvY3NdID0gIi0tZW5hYmxlLWFwaS1kb2NzLC0tZGlzYWJsZS1hcGktZG9jcyxweXRob24tZG9jdXRpbHMtbmF0aXZlIHB5dGhvbi1lcHlkb2MtbmF0aXZlIgorCitleHBvcnQgQlVJTERfU1lTCitleHBvcnQgSE9TVF9TWVMKKworZXhwb3J0IFNUQUdJTkdfTElCRElSCitleHBvcnQgU1RBR0lOR19JTkNESVIKKworUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uLWlvIHB5dGhvbi1sb2dnaW5nIHB5dGhvbi1zdHJpbmdvbGQgcHl0aG9uLXRocmVhZGluZyBweXRob24teG1sIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9wa2djb25maWciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWRvY3V0aWxzXzAuMTIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWRvY3V0aWxzXzAuMTIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNkYTg4ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZG9jdXRpbHNfMC4xMi5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIlRleHQgcHJvY2Vzc2luZyBzeXN0ZW0gZm9yIGRvY3VtZW50YXRpb24iCitIT01FUEFHRSA9ICJodHRwOi8vZG9jdXRpbHMuc291cmNlZm9yZ2UubmV0IgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIlBTRiAmIEJTRC0yLUNsYXVzZSAmIEdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy50eHQ7bWQ1PWE3MjJmYmRjMjAzNDdkYjdiNjkyMjM1OTRkZDU0NTc0IgorCitERVBFTkRTID0gInB5dGhvbiIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vZG9jdXRpbHMvZG9jdXRpbHMtJHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjQ2MjIyNjNiNjJjNWM3NzFjMDM1MDJhZmEzMTU3NzY4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM3ZGI3MTc4MTBhYjY5NjVmNjZjOGNmMDM5OGE5OGM5ZDhkZjk4MmRhMzliNGNkN2YxNjI5MTFlYjg5NTk2ZmEiCisKK1MgPSAiJHtXT1JLRElSfS9kb2N1dGlscy0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0XzEuMC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1naXRfMS4wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc4ZDdjOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0XzEuMC4xLmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiUHl0aG9uIGxpYnJhcnkgdXNlZCB0byBpbnRlcmFjdCB3aXRoIEdpdCByZXBvc2l0b3JpZXMiCitERVNDUklQVElPTiA9ICJHaXRQeXRob24gcHJvdmlkZXMgb2JqZWN0IG1vZGVsIHJlYWQgYW5kIHdyaXRlIGFjY2VzcyB0byBcCithIGdpdCByZXBvc2l0b3J5LiBBY2Nlc3MgcmVwb3NpdG9yeSBpbmZvcm1hdGlvbiBjb252ZW5pZW50bHksIGFsdGVyIHRoZSBcCitpbmRleCBkaXJlY3RseSwgaGFuZGxlIHJlbW90ZXMsIG9yIGdvIGRvd24gdG8gbG93LWxldmVsIG9iamVjdCBkYXRhYmFzZSBcCithY2Nlc3Mgd2l0aCBiaWctZmlsZXMgc3VwcG9ydC4iCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0aHViLmNvbS9naXRweXRob24tZGV2ZWxvcGVycy9HaXRQeXRob24iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiQlNELTMtQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9OGI4ZDI2YzM3YzFkNWEwNGY5YjAxODZlZGJlYmMxODMiCitERVBFTkRTID0gInB5dGhvbi1naXRkYiIKKworU1JDX1VSSSA9ICJodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9HL0dpdFB5dGhvbi9HaXRQeXRob24tJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDY1OTY0NGI0MmM0MWU1ZTUxNzBjMGNkODNlZDY0MjIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWM4OGMxN2JiY2FlMmE0NDVmZjY0MDI0ZWYxMzUyNjIyNGY3MGUzNWUzOGMzMzQxNmJlNWNlYjU2Y2E3Zjc2MCIKKworUyA9ICIke1dPUktESVJ9L0dpdFB5dGhvbi0ke1BWfSIKKworaW5oZXJpdCBzZXR1cHRvb2xzCisKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24tZ2l0ZGIgcHl0aG9uLWxhbmcgcHl0aG9uLWlvIHB5dGhvbi1zaGVsbCBweXRob24tbWF0aCBweXRob24tcmUgcHl0aG9uLXN1YnByb2Nlc3MgcHl0aG9uLXN0cmluZ29sZCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdGRiXzAuNi40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1naXRkYl8wLjYuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDA4M2JkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1naXRkYl8wLjYuNC5iYgpAQCAtMCwwICsxLDE5IEBACitTVU1NQVJZID0gIkEgcHVyZS1QeXRob24gZ2l0IG9iamVjdCBkYXRhYmFzZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXRodWIuY29tL2dpdHB5dGhvbi1kZXZlbG9wZXJzL2dpdGRiIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIkJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTU5ZTVlY2IxMzMzOWE5MzZlZWRmODMyODJlYWY0NTI4IgorREVQRU5EUyA9ICJweXRob24tYXN5bmMgcHl0aG9uLXNtbWFwIgorCitTUkNfVVJJID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9nL2dpdGRiL2dpdGRiLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ0ZTQzNjZiOGJkZmQzMDZiMDc1YzNhNTJjOTZhZTFhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImEzZWJiYzI3YmUwMzVhMmU4NzRlZDkwNGRmNTE2ZTM1ZjRhMjlhNzc4YTc2NDM4NWRlMDlkZTllMGYxMzk2NTgiCisKK1MgPSAiJHtXT1JLRElSfS9naXRkYi0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMKKworUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbi1zbW1hcCBweXRob24tYXN5bmMgcHl0aG9uLW1tYXAgcHl0aG9uLWxhbmcgcHl0aG9uLXpsaWIgcHl0aG9uLWlvIHB5dGhvbi1zaGVsbCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmcvMDAwMS1weXRob24taW1hZ2luZy1zZXR1cC5weS1mb3JjZS1wYXRocy1mb3ItemxpYi1mcmVldHlwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nLzAwMDEtcHl0aG9uLWltYWdpbmctc2V0dXAucHktZm9yY2UtcGF0aHMtZm9yLXpsaWItZnJlZXR5cC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTc1MzA2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nLzAwMDEtcHl0aG9uLWltYWdpbmctc2V0dXAucHktZm9yY2UtcGF0aHMtZm9yLXpsaWItZnJlZXR5cC5wYXRjaApAQCAtMCwwICsxLDU1IEBACitGcm9tIDA3ZDRmMDk1YTllMjJhZTY3NmE4ZDY4MDczMTAxMTMxZTY1MDEyZGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorRGF0ZTogVHVlLCAxNSBOb3YgMjAxMSAxMzoxNjo1NCArMDEwMAorU3ViamVjdDogW1BBVENIXSBweXRob24gaW1hZ2luZyBzZXR1cC5weTogZm9yY2UgcGF0aHMgZm9yIHpsaWIsIGZyZWV0eXBlIGFuZCBqcGVnIGFuZCBkb24ndCBhZGQgaG9zdCBwYXRocworCitTaWduZWQtb2ZmLWJ5OiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgc2V0dXAucHkgfCAgIDE0ICsrKy0tLS0tLS0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc2V0dXAucHkgYi9zZXR1cC5weQoraW5kZXggNWQ0ZDUzYS4uYjFhMjJlYyAxMDA2NDQKKy0tLSBhL3NldHVwLnB5CisrKysgYi9zZXR1cC5weQorQEAgLTM0LDEwICszNCwxMCBAQCBkZWYgbGliaW5jbHVkZShyb290KToKKyAjIFRJRkZfUk9PVCA9IGxpYmluY2x1ZGUoIi9vcHQvdGlmZiIpCisgCisgVENMX1JPT1QgPSBOb25lCistSlBFR19ST09UID0gTm9uZQorLVpMSUJfUk9PVCA9IE5vbmUKKytKUEVHX1JPT1QgPSBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddCisrWkxJQl9ST09UID0gb3MuZW52aXJvblsnU1RBR0lOR19MSUJESVInXQorIFRJRkZfUk9PVCA9IE5vbmUKKy1GUkVFVFlQRV9ST09UID0gTm9uZQorK0ZSRUVUWVBFX1JPT1QgPSAgb3MuZW52aXJvblsnU1RBR0lOR19MSUJESVInXSwgb3MuZW52aXJvblsnU1RBR0lOR19JTkNESVInXQorIExDTVNfUk9PVCA9IE5vbmUKKyAKKyAjIEZJWE1FOiBhZGQgbWVjaGFuaXNtIHRvIGV4cGxpY2l0bHkgKmRpc2FibGUqIHRoZSB1c2Ugb2YgYSBsaWJyYXJ5CitAQCAtMTQ3LDcgKzE0Nyw2IEBAIGNsYXNzIHBpbF9idWlsZF9leHQoYnVpbGRfZXh0KToKKyAgICAgICAgICAgICBhZGRfZGlyZWN0b3J5KGxpYnJhcnlfZGlycywgIi9vcHQvbG9jYWwvbGliIikKKyAgICAgICAgICAgICBhZGRfZGlyZWN0b3J5KGluY2x1ZGVfZGlycywgIi9vcHQvbG9jYWwvaW5jbHVkZSIpCisgCistICAgICAgICBhZGRfZGlyZWN0b3J5KGxpYnJhcnlfZGlycywgIi91c3IvbG9jYWwvbGliIikKKyAgICAgICAgICMgRklYTUU6IGNoZWNrIC9vcHQvc3R1ZmYgZGlyZWN0b3JpZXMgaGVyZT8KKyAKKyAgICAgICAgIHByZWZpeCA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigicHJlZml4IikKK0BAIC0yMDcsMTMgKzIwNiw2IEBAIGNsYXNzIHBpbF9idWlsZF9leHQoYnVpbGRfZXh0KToKKyAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4odGNsX2RpciwgInRrLmgiKSk6CisgICAgICAgICAgICAgICAgIGFkZF9kaXJlY3RvcnkoaW5jbHVkZV9kaXJzLCB0Y2xfZGlyKQorIAorLSAgICAgICAgIyBzdGFuZGFyZCBsb2NhdGlvbnMKKy0gICAgICAgIGFkZF9kaXJlY3RvcnkobGlicmFyeV9kaXJzLCAiL3Vzci9sb2NhbC9saWIiKQorLSAgICAgICAgYWRkX2RpcmVjdG9yeShpbmNsdWRlX2RpcnMsICIvdXNyL2xvY2FsL2luY2x1ZGUiKQorLQorLSAgICAgICAgYWRkX2RpcmVjdG9yeShsaWJyYXJ5X2RpcnMsICIvdXNyL2xpYiIpCistICAgICAgICBhZGRfZGlyZWN0b3J5KGluY2x1ZGVfZGlycywgIi91c3IvaW5jbHVkZSIpCistCisgICAgICAgICAjCisgICAgICAgICAjIGluc2VydCBuZXcgZGlycyAqYmVmb3JlKiBkZWZhdWx0IGxpYnMsIHRvIGF2b2lkIGNvbmZsaWN0cworICAgICAgICAgIyBiZXR3ZWVuIFB5dGhvbiBQWUQgc3R1YiBsaWJzIGFuZCByZWFsIGxpYnJhcmllcworLS0gCisxLjcuMi41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZy9hbGxvdy50by5kaXNhYmxlLnNvbWUuZmVhdHVyZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmcvYWxsb3cudG8uZGlzYWJsZS5zb21lLmZlYXR1cmVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NjBlZDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmcvYWxsb3cudG8uZGlzYWJsZS5zb21lLmZlYXR1cmVzLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK0F0IGxlYXN0IGxjbXMgd2Fzbid0IGRldGVybWluaXN0aWNseSBkZXRlY3RlZCBmcm9tIHN5c3Jvb3QuCisKK1RoaXMgd2lsbCBhbGxvdyB0byBleHBvcnQgTENNU19FTkFCTEVEPUZhbHNlIHdoZW4gbGNtcyBpc24ndCBpbiBQQUNLQUdFQ09ORklHLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworZGlmZiAtdU5yIEltYWdpbmctMS4xLjcub3JpZy9zZXR1cC5weSBJbWFnaW5nLTEuMS43L3NldHVwLnB5CistLS0gSW1hZ2luZy0xLjEuNy5vcmlnL3NldHVwLnB5CTIwMTMtMDctMjIgMTA6MTc6MDIuMDgxNDU3MDc1ICswMjAwCisrKysgSW1hZ2luZy0xLjEuNy9zZXR1cC5weQkyMDEzLTA3LTIyIDEzOjEwOjA5LjAyOTcwNzQ5MiArMDIwMAorQEAgLTM5LDYgKzM5LDEyIEBACisgVElGRl9ST09UID0gTm9uZQorIEZSRUVUWVBFX1JPT1QgPSAgb3MuZW52aXJvblsnU1RBR0lOR19MSUJESVInXSwgb3MuZW52aXJvblsnU1RBR0lOR19JTkNESVInXQorIExDTVNfUk9PVCA9IE5vbmUKKytUQ0xfRU5BQkxFRCA9IG9zLmdldGVudignVENMX0VOQUJMRUQnLCAiVHJ1ZSIpCisrSlBFR19FTkFCTEVEID0gb3MuZ2V0ZW52KCdKUEVHX0VOQUJMRUQnLCAiVHJ1ZSIpCisrWkxJQl9FTkFCTEVEID0gb3MuZ2V0ZW52KCdaTElCX0VOQUJMRUQnLCAiVHJ1ZSIpCisrVElGRl9FTkFCTEVEID0gb3MuZ2V0ZW52KCdUSUZGX0VOQUJMRUQnLCAiVHJ1ZSIpCisrRlJFRVRZUEVfRU5BQkxFRCA9IG9zLmdldGVudignRlJFRVRZUEVfRU5BQkxFRCcsICJUcnVlIikKKytMQ01TX0VOQUJMRUQgPSBvcy5nZXRlbnYoJ0xDTVNfRU5BQkxFRCcsICJUcnVlIikKKyAKKyAjIEZJWE1FOiBhZGQgbWVjaGFuaXNtIHRvIGV4cGxpY2l0bHkgKmRpc2FibGUqIHRoZSB1c2Ugb2YgYSBsaWJyYXJ5CisgCitAQCAtMjIwLDIyICsyMjYsMjIgQEAKKyAgICAgICAgICAgICB6bGliID0ganBlZyA9IHRpZmYgPSBmcmVldHlwZSA9IHRjbCA9IHRrID0gbGNtcyA9IE5vbmUKKyAgICAgICAgIGZlYXR1cmUgPSBmZWF0dXJlKCkKKyAKKy0gICAgICAgIGlmIGZpbmRfaW5jbHVkZV9maWxlKHNlbGYsICJ6bGliLmgiKToKKysgICAgICAgIGlmIFpMSUJfRU5BQkxFRCA9PSAnVHJ1ZScgYW5kIGZpbmRfaW5jbHVkZV9maWxlKHNlbGYsICJ6bGliLmgiKToKKyAgICAgICAgICAgICBpZiBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAieiIpOgorICAgICAgICAgICAgICAgICBmZWF0dXJlLnpsaWIgPSAieiIKKyAgICAgICAgICAgICBlbGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiIGFuZCBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAiemxpYiIpOgorICAgICAgICAgICAgICAgICBmZWF0dXJlLnpsaWIgPSAiemxpYiIgIyBhbHRlcm5hdGl2ZSBuYW1lCisgCistICAgICAgICBpZiBmaW5kX2luY2x1ZGVfZmlsZShzZWxmLCAianBlZ2xpYi5oIik6CisrICAgICAgICBpZiBKUEVHX0VOQUJMRUQgPT0gJ1RydWUnIGFuZCBmaW5kX2luY2x1ZGVfZmlsZShzZWxmLCAianBlZ2xpYi5oIik6CisgICAgICAgICAgICAgaWYgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgImpwZWciKToKKyAgICAgICAgICAgICAgICAgZmVhdHVyZS5qcGVnID0gImpwZWciCisgICAgICAgICAgICAgZWxpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIiBhbmQgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgImxpYmpwZWciKToKKyAgICAgICAgICAgICAgICAgZmVhdHVyZS5qcGVnID0gImxpYmpwZWciICMgYWx0ZXJuYXRpdmUgbmFtZQorIAorLSAgICAgICAgaWYgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgInRpZmYiKToKKysgICAgICAgIGlmIFRJRkZfRU5BQkxFRCA9PSAnVHJ1ZScgYW5kIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJ0aWZmIik6CisgICAgICAgICAgICAgZmVhdHVyZS50aWZmID0gInRpZmYiCisgCistICAgICAgICBpZiBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAiZnJlZXR5cGUiKToKKysgICAgICAgIGlmIEZSRUVUWVBFX0VOQUJMRUQgPT0gJ1RydWUnIGFuZCBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAiZnJlZXR5cGUiKToKKyAgICAgICAgICAgICAjIGxvb2sgZm9yIGZyZWV0eXBlMiBpbmNsdWRlIGZpbGVzCisgICAgICAgICAgICAgZnJlZXR5cGVfdmVyc2lvbiA9IDAKKyAgICAgICAgICAgICBmb3IgZGlyIGluIHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzOgorQEAgLTI1NiwxMSArMjYyLDExIEBACisgICAgICAgICAgICAgICAgIGlmIGRpcjoKKyAgICAgICAgICAgICAgICAgICAgIGFkZF9kaXJlY3Rvcnkoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsIGRpciwgMCkKKyAKKy0gICAgICAgIGlmIGZpbmRfaW5jbHVkZV9maWxlKHNlbGYsICJsY21zLmgiKToKKysgICAgICAgIGlmIExDTVNfRU5BQkxFRCA9PSAnVHJ1ZScgYW5kIGZpbmRfaW5jbHVkZV9maWxlKHNlbGYsICJsY21zLmgiKToKKyAgICAgICAgICAgICBpZiBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAibGNtcyIpOgorICAgICAgICAgICAgICAgICBmZWF0dXJlLmxjbXMgPSAibGNtcyIKKyAKKy0gICAgICAgIGlmIF90a2ludGVyIGFuZCBmaW5kX2luY2x1ZGVfZmlsZShzZWxmLCAidGsuaCIpOgorKyAgICAgICAgaWYgVENMX0VOQUJMRUQgPT0gJ1RydWUnIGFuZCBfdGtpbnRlciBhbmQgZmluZF9pbmNsdWRlX2ZpbGUoc2VsZiwgInRrLmgiKToKKyAgICAgICAgICAgICAjIHRoZSBsaWJyYXJ5IG5hbWVzIG1heSB2YXJ5IHNvbWV3aGF0IChlLmcuIHRjbDg0IG9yIHRjbDguNCkKKyAgICAgICAgICAgICB2ZXJzaW9uID0gVENMX1ZFUlNJT05bMF0gKyBUQ0xfVkVSU0lPTlsyXQorICAgICAgICAgICAgIGlmIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJ0Y2wiICsgdmVyc2lvbik6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmcvZml4LWZyZWV0eXBlLWluY2x1ZGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nL2ZpeC1mcmVldHlwZS1pbmNsdWRlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWNjNjNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nL2ZpeC1mcmVldHlwZS1pbmNsdWRlcy5wYXRjaApAQCAtMCwwICsxLDMwIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitGcm9tIGM2MDQwZjYxOGQ4ZjI3MDZhN2I0NmQxY2RmMzdkMWE1ODdmOTcwMWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZXcgU3Ryb21ub3YgPHN0cm9tbm92QGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMjggTm92IDIwMTMgMTY6NTg6NDMgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gZml4IGNvbXBpbGluZyB3aXRoIEZyZWVUeXBlIDIuNS4xCisKKy0tLQorIF9pbWFnaW5nZnQuYyB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL19pbWFnaW5nZnQuYyBiL19pbWFnaW5nZnQuYworaW5kZXggNDdkNTBiZC4uZjE5NTU1YiAxMDA2NDQKKy0tLSBhL19pbWFnaW5nZnQuYworKysrIGIvX2ltYWdpbmdmdC5jCitAQCAtNTksNyArNTksMTEgQEAgc3RydWN0IHsKKyAgICAgY29uc3QgY2hhciogbWVzc2FnZTsKKyB9IGZ0X2Vycm9yc1tdID0KKyAKKysjaWYgZGVmaW5lZChVU0VfRlJFRVRZUEVfMl8xKQorKyNpbmNsdWRlIEZUX0VSUk9SU19ICisrI2Vsc2UKKyAjaW5jbHVkZSA8ZnJlZXR5cGUvZnRlcnJvcnMuaD4KKysjZW5kaWYKKyAKKyAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworIC8qIGZvbnQgb2JqZWN0cyAqLworLS0gCisxLjguNS4xCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmdfMS4xLjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmdfMS4xLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY3ODMyOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZ18xLjEuNy5iYgpAQCAtMCwwICsxLDQ1IEBACitTVU1NQVJZID0gIlB5dGhvbiBJbWFnaW5nIExpYnJhcnkgKFBJTCkiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT05MjtlbmRsaW5lPTEyMDttZDU9YzQzNzFhZjQ1NzlmMWU0ODljZjg4MWMxNDQzZGQ0ZWMiCitERVBFTkRTID0gImZyZWV0eXBlIGpwZWcgdGlmZiIKK1NSQ05BTUUgPSAiSW1hZ2luZyIKK1BSID0gInI1IgorCitTUkNfVVJJID0gImh0dHA6Ly9lZmZib3Qub3JnL2Rvd25sb2Fkcy9JbWFnaW5nLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXB5dGhvbi1pbWFnaW5nLXNldHVwLnB5LWZvcmNlLXBhdGhzLWZvci16bGliLWZyZWV0eXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWxsb3cudG8uZGlzYWJsZS5zb21lLmZlYXR1cmVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1mcmVldHlwZS1pbmNsdWRlcy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImZjMTRhNTRlMWNlMDJhMDIyNWJlODg1NGJmYmE0NzhlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg5NWJjN2MyNDk4YzhlMWY5Yjk5OTM4ZjFhNDBkYzg2YjNmMTQ5NzQxZjEwNWNmN2M3YmQyZTA3MjU0MDUyMTEiCitTID0gIiR7V09SS0RJUn0vJHtTUkNOQU1FfS0ke1BWfSIKKworIyBUaGVyZSBpc24ndCBlbmFibGUvZGlzYWJsZSBvcHRpb24sIGFuZCBsY21zIGlzIGluIG1ldGEtb2UsIGF0IGxlYXN0IG1ha2UgaXQgZXhwbGljaXQgd2hlbiBlbmFibGVkCisjIHNldHVwLnB5IGFscmVhZHkgaGFzIEZJWE1FOiBhZGQgbWVjaGFuaXNtIHRvIGV4cGxpY2l0bHkgKmRpc2FibGUqIHRoZSB1c2Ugb2YgYSBsaWJyYXJ5CitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tsY21zXSA9ICIsLGxjbXMiCisKK2luaGVyaXQgZGlzdHV0aWxzCisKK2RvX2NvbXBpbGUoKSB7CisgICAgZXhwb3J0IFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9CisgICAgZXhwb3J0IFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9CisgICAgZXhwb3J0IExDTVNfRU5BQkxFRD0ke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdsY21zJywgJ1RydWUnLCAnRmFsc2UnLCBkKX0KKyAgICBkaXN0dXRpbHNfZG9fY29tcGlsZQorfQorCitkb19pbnN0YWxsKCkgeworICAgIGV4cG9ydCBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfQorICAgIGV4cG9ydCBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfQorICAgIGV4cG9ydCBMQ01TX0VOQUJMRUQ9JHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnbGNtcycsICdUcnVlJywgJ0ZhbHNlJywgZCl9CisgICAgZGlzdHV0aWxzX2RvX2luc3RhbGwKKyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2RvYy8ke0JQTn0vaHRtbC8KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9SRUFETUUgJHtEfSR7ZGF0YWRpcn0vZG9jLyR7QlBOfS8KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9Eb2NzLyogJHtEfSR7ZGF0YWRpcn0vZG9jLyR7QlBOfS9odG1sLworCisgICAgIyBnZXQgcmlkIG9mICMhL3Vzci9sb2NhbC9iaW4vcHl0aG9uCisgICAgc2VkIC1pIC1lICdzOi91c3IvbG9jYWwvYmluLzoke2JpbmRpcn0vZW52IDpnJyAke0R9JHtiaW5kaXJ9LyoKK30KKworUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbi1sYW5nIHB5dGhvbi1zdHJpbmdvbGQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW1ha29fMS4wLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW1ha29fMS4wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ0MmIwYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbWFrb18xLjAuMS5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIlRlbXBsYXRpbmcgbGlicmFyeSBmb3IgUHl0aG9uIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWRlYjNmZjhlNGMxN2FhZjdiODA4ODliNmIyYmY0YzgzIgorCitTUkNfVVJJID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9NL01ha28vTWFrby0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5ZjBhYWZkMTc3YjAzOWVmNjdiOTBlYTM1MDQ5N2E1NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0NWYwODY5ZmViZWE1OWRhYjdlZmQyNTZmYjQ1MWMzNzdjYmI3OTQ3YmVmMzg2ZmYwYmI0NDYyN2MzMWE4ZDFjIgorCitTID0gIiR7V09SS0RJUn0vTWFrby0ke1BWfSIKKworaW5oZXJpdCBzZXR1cHRvb2xzCisKK1JERVBFTkRTXyR7UE59ID0gInB5dGhvbi10aHJlYWRpbmcgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLW5ldGNsaWVudCBcCisgICAgICAgICAgICAgICAgICBweXRob24taHRtbCBcCisiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMC1kaXN0dXRpbHMtZml4LXN3aWctcGFyYW1ldGVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvMTAtZGlzdHV0aWxzLWZpeC1zd2lnLXBhcmFtZXRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzkyNDdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvMTAtZGlzdHV0aWxzLWZpeC1zd2lnLXBhcmFtZXRlci5wYXRjaApAQCAtMCwwICsxLDE4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIyBTb21lIHZlcnNpb25zIG9mIFNXSUcgZG8gbm90IHVzZSB0aGUgZXh0ZW5zaW9uIHBhcmFtZXRlci4KKyMgTWFrZSBpdCBvcHRpb25hbC4KKyMgU2lnbmVkLU9mZjogTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QHZhbmlsbGUtbWVkaWEuZGU+CitJbmRleDogUHl0aG9uLTIuNi4xL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9leHQucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi42LjEub3JpZy9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfZXh0LnB5CisrKysgUHl0aG9uLTIuNi4xL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9leHQucHkKK0BAIC01NjYsNyArNTY2LDcgQEAgY2xhc3MgYnVpbGRfZXh0IChDb21tYW5kKToKKyAgICAgICAgICAgICB0YXJnZXRfbGFuZz1sYW5ndWFnZSkKKyAKKyAKKy0gICAgZGVmIHN3aWdfc291cmNlcyAoc2VsZiwgc291cmNlcywgZXh0ZW5zaW9uKToKKysgICAgZGVmIHN3aWdfc291cmNlcyAoc2VsZiwgc291cmNlcywgZXh0ZW5zaW9uPU5vbmUpOgorIAorICAgICAgICAgIiIiV2FsayB0aGUgbGlzdCBvZiBzb3VyY2UgZmlsZXMgaW4gJ3NvdXJjZXMnLCBsb29raW5nIGZvciBTV0lHCisgICAgICAgICBpbnRlcmZhY2UgKC5pKSBmaWxlcy4gIFJ1biBTV0lHIG9uIGFsbCB0aGF0IGFyZSBmb3VuZCwgYW5kCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMS1kaXN0dXRpbHMtbmV2ZXItbW9kaWZ5LXNoZWJhbmctbGluZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlLzExLWRpc3R1dGlscy1uZXZlci1tb2RpZnktc2hlYmFuZy1saW5lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MjQ2OWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMS1kaXN0dXRpbHMtbmV2ZXItbW9kaWZ5LXNoZWJhbmctbGluZS5wYXRjaApAQCAtMCwwICsxLDIwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIyBEb24ndCBtb2RpZnkgdGhlIHNoZS1iYW5nIGxpbmUgZm9yIGEgY3Jvc3MtYnVpbGQuCisjIE90aGVyd2lzZSBpdCBwb2ludHMgdG8gb3VyIGhvc3RweXRob24gKHdoaWNoIHdlIGRvIG5vdCB3YW50KQorIworIyBTaWduZWQtT2ZmOiBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtaWNrZXlAdmFuaWxsZS1tZWRpYS5kZT4KKworSW5kZXg6IFB5dGhvbi0yLjYuMS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfc2NyaXB0cy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjYuMS5vcmlnL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5CisrKysgUHl0aG9uLTIuNi4xL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5CitAQCAtODcsNyArODcsNyBAQCBjbGFzcyBidWlsZF9zY3JpcHRzIChDb21tYW5kKToKKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgCisgICAgICAgICAgICAgICAgIG1hdGNoID0gZmlyc3RfbGluZV9yZS5tYXRjaChmaXJzdF9saW5lKQorLSAgICAgICAgICAgICAgICBpZiBtYXRjaDoKKysgICAgICAgICAgICAgICAgaWYgRmFsc2U6ICNtYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgIGFkanVzdCA9IDEKKyAgICAgICAgICAgICAgICAgICAgIHBvc3RfaW50ZXJwID0gbWF0Y2guZ3JvdXAoMSkgb3IgJycKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlLzEyLWRpc3R1dGlscy1wcmVmaXgtaXMtaW5zaWRlLXN0YWdpbmctYXJlYS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlLzEyLWRpc3R1dGlscy1wcmVmaXgtaXMtaW5zaWRlLXN0YWdpbmctYXJlYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODlhYWZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvMTItZGlzdHV0aWxzLXByZWZpeC1pcy1pbnNpZGUtc3RhZ2luZy1hcmVhLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKyMgVGhlIHByb3BlciBwcmVmaXggaXMgaW5zaWRlIG91ciBzdGFnaW5nIGFyZWEuCisjIFNpZ25lZC1PZmY6IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1pY2tleUB2YW5pbGxlLW1lZGlhLmRlPgorIyBTaWduZWQtb2ZmLWJ5OiBQaGlsIEJsdW5kZWxsIDxwaGlsYkBnbnUub3JnPgorCistLS0gUHl0aG9uLTIuNi42L0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5Lm9yaWcJMjAxMi0wMS0wMyAxNDowMjowMy4wMjcwMDUyOTYgKzAwMDAKKysrKyBQeXRob24tMi42LjYvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkJMjAxMi0wMS0wMyAxNDowMjozMS41MTc2MDEwODEgKzAwMDAKK0BAIC0xOSw4ICsxOSw4IEBACisgZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yCisgCisgIyBUaGVzZSBhcmUgbmVlZGVkIGluIGEgY291cGxlIG9mIHNwb3RzLCBzbyBqdXN0IGNvbXB1dGUgdGhlbSBvbmNlLgorLVBSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkKKy1FWEVDX1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLmV4ZWNfcHJlZml4KQorK1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkucmVwbGFjZSggb3MuZ2V0ZW52KCJCVUlMRF9TWVMiKSwgb3MuZ2V0ZW52KCJIT1NUX1NZUyIpICkKKytFWEVDX1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLmV4ZWNfcHJlZml4KS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQorIAorICMgUGF0aCB0byB0aGUgYmFzZSBkaXJlY3Rvcnkgb2YgdGhlIHByb2plY3QuIE9uIFdpbmRvd3MgdGhlIGJpbmFyeSBtYXkKKyAjIGxpdmUgaW4gcHJvamVjdC9QQ0J1aWxkOS4gIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiB4NjQgV2luZG93cyBidWlsZCwKK0BAIC03MCw3ICs3MCw3IEBACisgICAgIHN5cy5leGVjX3ByZWZpeCAtLSBpLmUuLCBpZ25vcmUgJ3BsYXRfc3BlY2lmaWMnLgorICAgICAiIiIKKyAgICAgaWYgcHJlZml4IGlzIE5vbmU6CistICAgICAgICBwcmVmaXggPSBwbGF0X3NwZWNpZmljIGFuZCBFWEVDX1BSRUZJWCBvciBQUkVGSVgKKysgICAgICAgIHByZWZpeCA9IG9zLmVudmlyb25bJ1NUQUdJTkdfSU5DRElSJ10ucnN0cmlwKCdpbmNsdWRlJykKKyAKKyAgICAgaWYgb3MubmFtZSA9PSAicG9zaXgiOgorICAgICAgICAgaWYgcHl0aG9uX2J1aWxkOgorQEAgLTExNSwxMiArMTE1LDE2IEBACisgICAgIElmICdwcmVmaXgnIGlzIHN1cHBsaWVkLCB1c2UgaXQgaW5zdGVhZCBvZiBzeXMucHJlZml4IG9yCisgICAgIHN5cy5leGVjX3ByZWZpeCAtLSBpLmUuLCBpZ25vcmUgJ3BsYXRfc3BlY2lmaWMnLgorICAgICAiIiIKKysgICAgbGliX2Jhc2VuYW1lID0gb3MuZW52aXJvblsnU1RBR0lOR19MSUJESVInXS5zcGxpdCgnLycpWy0xXQorICAgICBpZiBwcmVmaXggaXMgTm9uZToKKy0gICAgICAgIHByZWZpeCA9IHBsYXRfc3BlY2lmaWMgYW5kIEVYRUNfUFJFRklYIG9yIFBSRUZJWAorKyAgICAgICAgaWYgcGxhdF9zcGVjaWZpYzoKKysgICAgICAgICAgICBwcmVmaXggPSBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddLnJzdHJpcChsaWJfYmFzZW5hbWUpCisrICAgICAgICBlbHNlOgorKyAgICAgICAgICAgIHByZWZpeCA9IFBSRUZJWAorIAorICAgICBpZiBvcy5uYW1lID09ICJwb3NpeCI6CisgICAgICAgICBsaWJweXRob24gPSBvcy5wYXRoLmpvaW4ocHJlZml4LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWIiLCAicHl0aG9uIiArIGdldF9weXRob25fdmVyc2lvbigpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYl9iYXNlbmFtZSwgInB5dGhvbiIgKyBnZXRfcHl0aG9uX3ZlcnNpb24oKSkKKyAgICAgICAgIGlmIHN0YW5kYXJkX2xpYjoKKyAgICAgICAgICAgICByZXR1cm4gbGlicHl0aG9uCisgICAgICAgICBlbHNlOgorQEAgLTIxNiw3ICsyMjAsNyBAQAorICAgICBlbHNlOgorICAgICAgICAgIyBUaGUgbmFtZSBvZiB0aGUgY29uZmlnLmggZmlsZSBjaGFuZ2VkIGluIDIuMgorICAgICAgICAgY29uZmlnX2ggPSAncHljb25maWcuaCcKKy0gICAgcmV0dXJuIG9zLnBhdGguam9pbihpbmNfZGlyLCBjb25maWdfaCkKKysgICAgcmV0dXJuIG9zLnBhdGguam9pbihpbmNfZGlyLCBjb25maWdfaCkucmVwbGFjZSggb3MuZ2V0ZW52KCJCVUlMRF9TWVMiKSwgb3MuZ2V0ZW52KCJIT1NUX1NZUyIpICkKKyAKKyAKKyBkZWYgZ2V0X21ha2VmaWxlX2ZpbGVuYW1lKCk6CitAQCAtMjI1LDcgKzIyOSw3IEBACisgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKHN5cy5leGVjdXRhYmxlKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNYWtlZmlsZSIpCisgICAgIGxpYl9kaXIgPSBnZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPTEsIHN0YW5kYXJkX2xpYj0xKQorLSAgICByZXR1cm4gb3MucGF0aC5qb2luKGxpYl9kaXIsICJjb25maWciLCAiTWFrZWZpbGUiKQorKyAgICByZXR1cm4gb3MucGF0aC5qb2luKGxpYl9kaXIsICJjb25maWciLCAiTWFrZWZpbGUiKS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQorIAorIAorIGRlZiBwYXJzZV9jb25maWdfaChmcCwgZz1Ob25lKToKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL2F2b2lkX3BhcmFsbGVsX21ha2VfcmFjZXNfb25fcGdlbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL2F2b2lkX3BhcmFsbGVsX21ha2VfcmFjZXNfb25fcGdlbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mjc5ZTdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvYXZvaWRfcGFyYWxsZWxfbWFrZV9yYWNlc19vbl9wZ2VuLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitBdm9pZHMgcGFyYWxsZWwgbWFrZSByYWNlcyBsaW5raW5nIGVycm9ycyB3aGVuIG1ha2luZyBQYXJzZXIvUEdFTgorCistIEltcGxlbWVudHMgUmljaGFyZCBQdXJkaWUncyBpZGVhCisKK1NpZ25lZC1PZmYtQnk6IFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPgorU2lnbmVkLU9mZi1CeTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTWFrZWZpbGUucHJlLmluCisrKysgUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgorQEAgLTYxMCwxMiArNjEwLDEwIEBAIE1vZHVsZXMvZ3JwbW9kdWxlLm86ICQoc3JjZGlyKS9Nb2R1bGVzL2cKKyAKKyBNb2R1bGVzL3B3ZG1vZHVsZS5vOiAkKHNyY2RpcikvTW9kdWxlcy9wd2Rtb2R1bGUuYyAkKHNyY2RpcikvTW9kdWxlcy9wb3NpeG1vZHVsZS5oCisgCistJChHUkFNTUFSX0gpOiAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpCisrJChHUkFNTUFSX0gpOiAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpICQoUEdFTikKKyAJCUAkKE1LRElSX1ApIEluY2x1ZGUKKy0JCSQoTUFLRSkgJChQR0VOKQorIAkJJChQR0VOKSAkKEdSQU1NQVJfSU5QVVQpICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQykKKyAkKEdSQU1NQVJfQyk6ICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpCistCQkkKE1BS0UpICQoR1JBTU1BUl9IKQorIAkJdG91Y2ggJChHUkFNTUFSX0MpCisgCisgJChQR0VOKToJJChQR0VOT0JKUykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL2RlYnVnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvZGVidWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVjMTBkNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL2RlYnVnLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogUHl0aG9uLTIuNi4xL0xpYi9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjYuMS5vcmlnL0xpYi9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weQkyMDA5LTExLTEzIDE2OjA0OjU0LjAwMDAwMDAwMCArMDAwMAorKysrIFB5dGhvbi0yLjYuMS9MaWIvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkJMjAwOS0xMS0xMyAxNjowNjoyNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0zMDAsNiArMzAwLDggQEAKKyAgICAgICAgIGR5bGliX2YgPSBzZWxmLmxpYnJhcnlfZmlsZW5hbWUobGliLCBsaWJfdHlwZT0nZHlsaWInKQorICAgICAgICAgc3RhdGljX2YgPSBzZWxmLmxpYnJhcnlfZmlsZW5hbWUobGliLCBsaWJfdHlwZT0nc3RhdGljJykKKyAKKysgICAgICAgIHByaW50ICJMb29raW5nIGluICVzIGZvciAlcyIgJSAobGliLCBkaXJzKQorKworICAgICAgICAgZm9yIGRpciBpbiBkaXJzOgorICAgICAgICAgICAgIHNoYXJlZCA9IG9zLnBhdGguam9pbihkaXIsIHNoYXJlZF9mKQorICAgICAgICAgICAgIGR5bGliID0gb3MucGF0aC5qb2luKGRpciwgZHlsaWJfZikKK0BAIC0zMDksMTAgKzMxMSwxMyBAQAorICAgICAgICAgICAgICMgYXNzdW1pbmcgdGhhdCAqYWxsKiBVbml4IEMgY29tcGlsZXJzIGRvLiAgQW5kIG9mIGNvdXJzZSBJJ20KKyAgICAgICAgICAgICAjIGlnbm9yaW5nIGV2ZW4gR0NDJ3MgIi1zdGF0aWMiIG9wdGlvbi4gIFNvIHN1ZSBtZS4KKyAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkeWxpYik6CisrICAgICAgICAgICAgICAgIHByaW50ICJGb3VuZCAlcyIgJSAoZHlsaWIpCisgICAgICAgICAgICAgICAgIHJldHVybiBkeWxpYgorICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoc2hhcmVkKToKKysgICAgICAgICAgICAgICAgcHJpbnQgIkZvdW5kICVzIiAlIChzaGFyZWQpCisgICAgICAgICAgICAgICAgIHJldHVybiBzaGFyZWQKKyAgICAgICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKHN0YXRpYyk6CisrICAgICAgICAgICAgICAgIHByaW50ICJGb3VuZCAlcyIgJSAoc3RhdGljKQorICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljCisgCisgICAgICAgICAjIE9vcHMsIGRpZG4ndCBmaW5kIGl0IGluICphbnkqIG9mICdkaXJzJwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvbXVsdGlsaWIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9tdWx0aWxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2E4OWU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvbXVsdGlsaWIucGF0Y2gKQEAgLTAsMCArMSwyMzUgQEAKK1JlYmFzZWQgZm9yIFB5dGhvbiAyLjcuOQorCitTaWduZWQtT2ZmLUJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworMjAxMS8wOS8yOQorVGhlIHB5dGhvbiByZWNpcGUgYnVpbGRpbmcgd2FzIGZhaWxpbmcgYmVjYXVzZSBweXRob24tbmF0aXZlIAorY291bGQgbm90IGhhbmRsZSBzeXMubGliIHZhci4gc3lzLmxpYiB2YXIgaXMgZGVmaW5lZCBpbiB0aGUgCittdWx0aWxpYiBwYXRjaCBoZW5jZSBhZGRlZCB0aGlzIG11bHRpbGliLnBhdGNoIGZvciBweXRob24tbmF0aXZlIAorcmVjaXBlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lLXNwZWNpZmljXQorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTIuNy45L0luY2x1ZGUvcHl0aG9ucnVuLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9JbmNsdWRlL3B5dGhvbnJ1bi5oCisrKysgUHl0aG9uLTIuNy45L0luY2x1ZGUvcHl0aG9ucnVuLmgKK0BAIC0xMDgsNiArMTA4LDcgQEAgUHlBUElfRlVOQyhjaGFyICopIFB5X0dldFBhdGgodm9pZCk7CisgLyogSW4gdGhlaXIgb3duIGZpbGVzICovCisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldFZlcnNpb24odm9pZCk7CisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldFBsYXRmb3JtKHZvaWQpOworK1B5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRMaWIodm9pZCk7CisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldENvcHlyaWdodCh2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0Q29tcGlsZXIodm9pZCk7CisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldEJ1aWxkSW5mbyh2b2lkKTsKK0luZGV4OiBQeXRob24tMi43LjkvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorQEAgLTIyLDYgKzIyLDggQEAgZnJvbSBzaXRlIGltcG9ydCBVU0VSX0JBU0UKKyBmcm9tIHNpdGUgaW1wb3J0IFVTRVJfU0lURQorIAorIAorK2xpYm5hbWUgPSBzeXMubGliCisrCisgaWYgc3lzLnZlcnNpb24gPCAiMi4yIjoKKyAgICAgV0lORE9XU19TQ0hFTUUgPSB7CisgICAgICAgICAncHVyZWxpYic6ICckYmFzZScsCitAQCAtNDIsNyArNDQsNyBAQCBlbHNlOgorIElOU1RBTExfU0NIRU1FUyA9IHsKKyAgICAgJ3VuaXhfcHJlZml4JzogeworICAgICAgICAgJ3B1cmVsaWInOiAnJGJhc2UvbGliL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0L3NpdGUtcGFja2FnZXMnLAorLSAgICAgICAgJ3BsYXRsaWInOiAnJHBsYXRiYXNlL2xpYi9weXRob24kcHlfdmVyc2lvbl9zaG9ydC9zaXRlLXBhY2thZ2VzJywKKysgICAgICAgICdwbGF0bGliJzogJyRwbGF0YmFzZS8nK2xpYm5hbWUrJy9weXRob24kcHlfdmVyc2lvbl9zaG9ydC9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdoZWFkZXJzJzogJyRiYXNlL2luY2x1ZGUvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvJGRpc3RfbmFtZScsCisgICAgICAgICAnc2NyaXB0cyc6ICckYmFzZS9iaW4nLAorICAgICAgICAgJ2RhdGEnICAgOiAnJGJhc2UnLAorSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvcHlkb2MucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvcHlkb2MucHkKKysrKyBQeXRob24tMi43LjkvTGliL3B5ZG9jLnB5CitAQCAtMzgzLDcgKzM4Myw3IEBAIGNsYXNzIERvYzoKKyAKKyAgICAgICAgIGRvY2xvYyA9IG9zLmVudmlyb24uZ2V0KCJQWVRIT05ET0NTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkiKQorLSAgICAgICAgYmFzZWRpciA9IG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsICJsaWIiLAorKyAgICAgICAgYmFzZWRpciA9IG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsIHN5cy5saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iK3N5cy52ZXJzaW9uWzA6M10pCisgICAgICAgICBpZiAoaXNpbnN0YW5jZShvYmplY3QsIHR5cGUob3MpKSBhbmQKKyAgICAgICAgICAgICAob2JqZWN0Ll9fbmFtZV9fIGluICgnZXJybm8nLCAnZXhjZXB0aW9ucycsICdnYycsICdpbXAnLAorSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvc2l0ZS5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9zaXRlLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi9zaXRlLnB5CitAQCAtMjg4LDEzICsyODgsMTkgQEAgZGVmIGdldHNpdGVwYWNrYWdlcygpOgorICAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnb3MyZW14JywgJ3Jpc2NvcycpOgorICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIsICJzaXRlLXBhY2thZ2VzIikpCisgICAgICAgICBlbGlmIG9zLnNlcCA9PSAnLyc6CistICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwKKysgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsIHN5cy5saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l0ZS1wYWNrYWdlcyIpKQorLSAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsICJzaXRlLXB5dGhvbiIpKQorKyAgICAgICAgICAgIGlmIHN5cy5saWIgIT0gImxpYiI6CisrICAgICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l0ZS1wYWNrYWdlcyIpKQorKyAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgc3lzLmxpYiwgInNpdGUtcHl0aG9uIikpCisrICAgICAgICAgICAgaWYgc3lzLmxpYiAhPSAibGliIjoKKysgICAgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwgInNpdGUtcHl0aG9uIikpCisgICAgICAgICBlbHNlOgorICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQocHJlZml4KQorLSAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsICJzaXRlLXBhY2thZ2VzIikpCisrICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCBzeXMubGliLCAic2l0ZS1wYWNrYWdlcyIpKQorICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iOgorICAgICAgICAgICAgICMgZm9yIGZyYW1ld29yayBidWlsZHMgKm9ubHkqIHdlIGFkZCB0aGUgc3RhbmRhcmQgQXBwbGUKKyAgICAgICAgICAgICAjIGxvY2F0aW9ucy4KK0luZGV4OiBQeXRob24tMi43LjkvTGliL3Rlc3QvdGVzdF9kbC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi90ZXN0L3Rlc3RfZGwucHkKKysrKyBQeXRob24tMi43LjkvTGliL3Rlc3QvdGVzdF9kbC5weQorQEAgLTQsMTAgKzQsMTEgQEAKKyBpbXBvcnQgdW5pdHRlc3QKKyBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBpbXBvcnRfbW9kdWxlCisgZGwgPSBpbXBvcnRfbW9kdWxlKCdkbCcsIGRlcHJlY2F0ZWQ9VHJ1ZSkKKytpbXBvcnQgc3lzCisgCisgc2hhcmVkbGlicyA9IFsKKy0gICAgKCcvdXNyL2xpYi9saWJjLnNvJywgJ2dldHBpZCcpLAorLSAgICAoJy9saWIvbGliYy5zby42JywgJ2dldHBpZCcpLAorKyAgICAoJy91c3IvJytzeXMubGliKycvbGliYy5zbycsICdnZXRwaWQnKSwKKysgICAgKCcvJytzeXMubGliKycvbGliYy5zby42JywgJ2dldHBpZCcpLAorICAgICAoJy91c3IvYmluL2N5Z3dpbjEuZGxsJywgJ2dldHBpZCcpLAorICAgICAoJy91c3IvbGliL2xpYmMuZHlsaWInLCAnZ2V0cGlkJyksCisgICAgIF0KK0luZGV4OiBQeXRob24tMi43LjkvTGliL3RyYWNlLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3RyYWNlLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi90cmFjZS5weQorQEAgLTc1NCwxMCArNzU0LDEwIEBAIGRlZiBtYWluKGFyZ3Y9Tm9uZSk6CisgICAgICAgICAgICAgICAgICMgc2hvdWxkIEkgYWxzbyBjYWxsIGV4cGFuZHVzZXI/IChhZnRlciBhbGwsIGNvdWxkIHVzZSAkSE9NRSkKKyAKKyAgICAgICAgICAgICAgICAgcyA9IHMucmVwbGFjZSgiJHByZWZpeCIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN5cy5wcmVmaXgsICJsaWIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzeXMucHJlZml4LCBzeXMubGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSkpCisgICAgICAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoIiRleGVjX3ByZWZpeCIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgImxpYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10pKQorICAgICAgICAgICAgICAgICBzID0gb3MucGF0aC5ub3JtcGF0aChzKQorICAgICAgICAgICAgICAgICBpZ25vcmVfZGlycy5hcHBlbmQocykKK0luZGV4OiBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTWFrZWZpbGUucHJlLmluCisrKysgUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgorQEAgLTg3LDYgKzg3LDcgQEAgUFlfQ0ZMQUdTPQkkKENGTEFHUykgJChDUFBGTEFHUykgJChDRkxBRworIAorICMgTWFjaGluZS1kZXBlbmRlbnQgc3ViZGlyZWN0b3JpZXMKKyBNQUNIREVQPQlATUFDSERFUEAKKytMSUI9CQlATElCQAorIAorICMgTXVsdGlhcmNoIGRpcmVjdG9yeSAobWF5IGJlIGVtcHR5KQorIE1VTFRJQVJDSD0JQE1VTFRJQVJDSEAKK0BAIC0xMDYsNyArMTA3LDcgQEAgTElCRElSPQkJQGxpYmRpckAKKyBNQU5ESVI9CQlAbWFuZGlyQAorIElOQ0xVREVESVI9CUBpbmNsdWRlZGlyQAorIENPTkZJTkNMVURFRElSPQkkKGV4ZWNfcHJlZml4KS9pbmNsdWRlCistU0NSSVBURElSPQkkKHByZWZpeCkvbGliCisrU0NSSVBURElSPQkkKHByZWZpeCkvQExJQkAKKyAKKyAjIERldGFpbGVkIGRlc3RpbmF0aW9uIGRpcmVjdG9yaWVzCisgQklOTElCREVTVD0JJChMSUJESVIpL3B5dGhvbiQoVkVSU0lPTikKK0BAIC01OTcsNiArNTk4LDcgQEAgTW9kdWxlcy9nZXRwYXRoLm86ICQoc3JjZGlyKS9Nb2R1bGVzL2dldAorIAkJLURFWEVDX1BSRUZJWD0nIiQoZXhlY19wcmVmaXgpIicgXAorIAkJLURWRVJTSU9OPSciJChWRVJTSU9OKSInIFwKKyAJCS1EVlBBVEg9JyIkKFZQQVRIKSInIFwKKysJCS1ETElCPSciJChMSUIpIicgXAorIAkJLW8gJEAgJChzcmNkaXIpL01vZHVsZXMvZ2V0cGF0aC5jCisgCisgTW9kdWxlcy9weXRob24ubzogJChzcmNkaXIpL01vZHVsZXMvcHl0aG9uLmMKK0BAIC02MzksNyArNjQxLDcgQEAgJChBU1RfQyk6ICQoQVNUX0FTREwpICQoQVNETEdFTl9GSUxFUykKKyBQeXRob24vY29tcGlsZS5vIFB5dGhvbi9zeW10YWJsZS5vIFB5dGhvbi9hc3QubzogJChHUkFNTUFSX0gpICQoQVNUX0gpCisgCisgUHl0aG9uL2dldHBsYXRmb3JtLm86ICQoc3JjZGlyKS9QeXRob24vZ2V0cGxhdGZvcm0uYworLQkJJChDQykgLWMgJChQWV9DRkxBR1MpIC1EUExBVEZPUk09JyIkKE1BQ0hERVApIicgLW8gJEAgJChzcmNkaXIpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCisrCQkkKENDKSAtYyAkKFBZX0NGTEFHUykgLURQTEFURk9STT0nIiQoTUFDSERFUCkiJyAtRExJQj0nIiQoTElCKSInIC1vICRAICQoc3JjZGlyKS9QeXRob24vZ2V0cGxhdGZvcm0uYworIAorIFB5dGhvbi9pbXBvcnRkbC5vOiAkKHNyY2RpcikvUHl0aG9uL2ltcG9ydGRsLmMKKyAJCSQoQ0MpIC1jICQoUFlfQ0ZMQUdTKSAtSSQoRExJTkNMRElSKSAtbyAkQCAkKHNyY2RpcikvUHl0aG9uL2ltcG9ydGRsLmMKK0luZGV4OiBQeXRob24tMi43LjkvTW9kdWxlcy9nZXRwYXRoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9Nb2R1bGVzL2dldHBhdGguYworKysrIFB5dGhvbi0yLjcuOS9Nb2R1bGVzL2dldHBhdGguYworQEAgLTExNiw5ICsxMTYsMTEgQEAKKyAjZGVmaW5lIEVYRUNfUFJFRklYIFBSRUZJWAorICNlbmRpZgorIAorKyNkZWZpbmUgTElCX1BZVEhPTiBMSUIgIi9weXRob24iIFZFUlNJT04KKysKKyAjaWZuZGVmIFBZVEhPTlBBVEgKKy0jZGVmaW5lIFBZVEhPTlBBVEggUFJFRklYICIvbGliL3B5dGhvbiIgVkVSU0lPTiAiOiIgXAorLSAgICAgICAgICAgICAgRVhFQ19QUkVGSVggIi9saWIvcHl0aG9uIiBWRVJTSU9OICIvbGliLWR5bmxvYWQiCisrI2RlZmluZSBQWVRIT05QQVRIIFBSRUZJWCAiLyIgTElCX1BZVEhPTiAiOiIgXAorKyAgICAgICAgICAgICAgRVhFQ19QUkVGSVggIi8iIExJQl9QWVRIT04gIi9saWItZHlubG9hZCIKKyAjZW5kaWYKKyAKKyAjaWZuZGVmIExBTkRNQVJLCitAQCAtMTI5LDcgKzEzMSw3IEBAIHN0YXRpYyBjaGFyIHByZWZpeFtNQVhQQVRITEVOKzFdOworIHN0YXRpYyBjaGFyIGV4ZWNfcHJlZml4W01BWFBBVEhMRU4rMV07Cisgc3RhdGljIGNoYXIgcHJvZ3BhdGhbTUFYUEFUSExFTisxXTsKKyBzdGF0aWMgY2hhciAqbW9kdWxlX3NlYXJjaF9wYXRoID0gTlVMTDsKKy1zdGF0aWMgY2hhciBsaWJfcHl0aG9uW10gPSAibGliL3B5dGhvbiIgVkVSU0lPTjsKKytzdGF0aWMgY2hhciBsaWJfcHl0aG9uW10gPSBMSUJfUFlUSE9OOworIAorIHN0YXRpYyB2b2lkCisgcmVkdWNlKGNoYXIgKmRpcikKK0luZGV4OiBQeXRob24tMi43LjkvUHl0aG9uL2dldHBsYXRmb3JtLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9QeXRob24vZ2V0cGxhdGZvcm0uYworKysrIFB5dGhvbi0yLjcuOS9QeXRob24vZ2V0cGxhdGZvcm0uYworQEAgLTEwLDMgKzEwLDEzIEBAIFB5X0dldFBsYXRmb3JtKHZvaWQpCisgeworIAlyZXR1cm4gUExBVEZPUk07CisgfQorKworKyNpZm5kZWYgTElCCisrI2RlZmluZSBMSUIgImxpYiIKKysjZW5kaWYKKysKKytjb25zdCBjaGFyICoKKytQeV9HZXRMaWIodm9pZCkKKyt7CisrCXJldHVybiBMSUI7CisrfQorSW5kZXg6IFB5dGhvbi0yLjcuOS9QeXRob24vc3lzbW9kdWxlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9QeXRob24vc3lzbW9kdWxlLmMKKysrKyBQeXRob24tMi43LjkvUHl0aG9uL3N5c21vZHVsZS5jCitAQCAtMTQzNyw2ICsxNDM3LDggQEAgX1B5U3lzX0luaXQodm9pZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nKFB5X0dldENvcHlyaWdodCgpKSk7CisgICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoInBsYXRmb3JtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nKFB5X0dldFBsYXRmb3JtKCkpKTsKKysgICAgU0VUX1NZU19GUk9NX1NUUklORygibGliIiwKKysgICAgICAgICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZyhQeV9HZXRMaWIoKSkpOworICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJleGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nKFB5X0dldFByb2dyYW1GdWxsUGF0aCgpKSk7CisgICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoInByZWZpeCIsCitJbmRleDogUHl0aG9uLTIuNy45L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIFB5dGhvbi0yLjcuOS9jb25maWd1cmUuYWMKK0BAIC03MzYsNiArNzM2LDExIEBAIFN1bk9TKikKKyAgICAgOzsKKyBlc2FjCisgCisrQUNfU1VCU1QoTElCKQorK0FDX01TR19DSEVDS0lORyhMSUIpCisrTElCPWBiYXNlbmFtZSAke2xpYmRpcn1gCisrQUNfTVNHX1JFU1VMVCgkTElCKQorKworIAorIEFDX1NVQlNUKExJQlJBUlkpCisgQUNfTVNHX0NIRUNLSU5HKExJQlJBUlkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9ub2hvc3RsaWJzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvbm9ob3N0bGlicy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTQ1MmU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvbm9ob3N0bGlicy5wYXRjaApAQCAtMCwwICsxLDU0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCisyMDE0LzEyLzE1CitSZWJhc2VkIGZvciBweXRob24tMi43LjkKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitTaWduZWQtT2ZmLUJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0yLjcuOS9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL3NldHVwLnB5CisrKysgUHl0aG9uLTIuNy45L3NldHVwLnB5CitAQCAtNDM5LDkgKzQzOSw5IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAKKyAgICAgZGVmIGRldGVjdF9tb2R1bGVzKHNlbGYpOgorICAgICAgICAgIyBFbnN1cmUgdGhhdCAvdXNyL2xvY2FsIGlzIGFsd2F5cyB1c2VkCistICAgICAgICBpZiBub3QgY3Jvc3NfY29tcGlsaW5nOgorLSAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycywgJy91c3IvbG9jYWwvbGliJykKKy0gICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsICcvdXNyL2xvY2FsL2luY2x1ZGUnKQorKyAgICAgICAgIyBpZiBub3QgY3Jvc3NfY29tcGlsaW5nOgorKyAgICAgICAgICAgICMgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzLCAnL3Vzci9sb2NhbC9saWInKQorKyAgICAgICAgICAgICMgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzLCAnL3Vzci9sb2NhbC9pbmNsdWRlJykKKyAgICAgICAgIGlmIGNyb3NzX2NvbXBpbGluZzoKKyAgICAgICAgICAgICBzZWxmLmFkZF9nY2NfcGF0aHMoKQorICAgICAgICAgc2VsZi5hZGRfbXVsdGlhcmNoX3BhdGhzKCkKK0BAIC00ODAsMTUgKzQ4MCwxNSBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAgICAgICAgICAgICBmb3IgZGlyZWN0b3J5IGluIHJldmVyc2VkKG9wdGlvbnMuZGlycyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KGRpcl9saXN0LCBkaXJlY3RvcnkpCisgCistICAgICAgICBpZiBvcy5wYXRoLm5vcm1wYXRoKHN5cy5wcmVmaXgpICE9ICcvdXNyJyBcCistICAgICAgICAgICAgICAgIGFuZCBub3Qgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdQWVRIT05GUkFNRVdPUksnKToKKysgICAgICAgICNpZiBvcy5wYXRoLm5vcm1wYXRoKHN5cy5wcmVmaXgpICE9ICcvdXNyJyBcCisrICAgICAgICAgICAgICAgICNhbmQgbm90IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUFlUSE9ORlJBTUVXT1JLJyk6CisgICAgICAgICAgICAgIyBPU1ggbm90ZTogRG9uJ3QgYWRkIExJQkRJUiBhbmQgSU5DTFVERURJUiB0byBidWlsZGluZyBhIGZyYW1ld29yaworICAgICAgICAgICAgICMgKFBZVEhPTkZSQU1FV09SSyBpcyBzZXQpIHRvIGF2b2lkICMgbGlua2luZyBwcm9ibGVtcyB3aGVuCisgICAgICAgICAgICAgIyBidWlsZGluZyBhIGZyYW1ld29yayB3aXRoIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIHRoYW4KKyAgICAgICAgICAgICAjIHRoZSBvbmUgdGhhdCBpcyBjdXJyZW50bHkgaW5zdGFsbGVkIChpc3N1ZSAjNzQ3MykKKy0gICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMsCisrICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiTElCRElSIikpCistICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzLAorKyAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIklOQ0xVREVESVIiKSkKKyAKKyAgICAgICAgIHRyeToKK0BAIC03NjEsOCArNzYxLDcgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgICAgICAgICBwYXNzICMgSXNzdWUgNzM4NDogQWxyZWFkeSBsaW5rZWQgYWdhaW5zdCBjdXJzZXMgb3IgdGluZm8uCisgICAgICAgICAgICAgZWxpZiBjdXJzZXNfbGlicmFyeToKKyAgICAgICAgICAgICAgICAgcmVhZGxpbmVfbGlicy5hcHBlbmQoY3Vyc2VzX2xpYnJhcnkpCistICAgICAgICAgICAgZWxpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzICsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnL3Vzci9saWIvdGVybWNhcCddLAorKyAgICAgICAgICAgIGVsaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXJtY2FwJyk6CisgICAgICAgICAgICAgICAgIHJlYWRsaW5lX2xpYnMuYXBwZW5kKCd0ZXJtY2FwJykKKyAgICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdyZWFkbGluZScsIFsncmVhZGxpbmUuYyddLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvcmV2ZXJ0X3VzZV9vZl9zeXNjb25maWdkYXRhLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvcmV2ZXJ0X3VzZV9vZl9zeXNjb25maWdkYXRhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMmFhZjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9yZXZlcnRfdXNlX29mX3N5c2NvbmZpZ2RhdGEucGF0Y2gKQEAgLTAsMCArMSw4NiBAQAorT24gb2xkZXIgdmVyc2lvbnMgb2YgUHl0aG9uLCBzeXNjb25maWcgcmVhZCB0aGUgZGF0YSBmcm9tIGJvdGggdGhlIE1ha2VmaWxlIGFuZAordGhlIFB5dGhvbi5oIGZpbGUgZ2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUsIGNyZWF0ZWQgZGljdGlvbmFyaWVzIHdpdGggdGhlaXIgdmFyaWFibGVzCithbmQgdXNlZCB0aG9zZSB3aGVuIHVzaW5nIGdldF9jb25maWdfdmFyKCksIG5vdyBpdCB1c2VzIF9zeXNjb25maWdkYXRhLmJ1aWxkX3RpbWVfdmFyc1tdCit3aGljaCBjb250YWlucyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBIT1NULCBlcnJvbmVvdXMgaW4gb3VyIGNhc2UsIHRoaXMgcGF0Y2ggcmV2ZXJ0cyB0aGlzCitiZWhhdmlvciBhbmQgdXNlcyBQeXRob24uaCBhbmQgTWFrZWZpbGUgdG8gZ2V0IGluZm9ybWF0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lLXNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CitAQCAtNDAxLDEyICs0MDEsNjYgQEAgX2NvbmZpZ192YXJzID0gTm9uZQorIAorIGRlZiBfaW5pdF9wb3NpeCgpOgorICAgICAiIiJJbml0aWFsaXplIHRoZSBtb2R1bGUgYXMgYXBwcm9wcmlhdGUgZm9yIFBPU0lYIHN5c3RlbXMuIiIiCistICAgICMgX3N5c2NvbmZpZ2RhdGEgaXMgZ2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUsIHNlZSB0aGUgc3lzY29uZmlnIG1vZHVsZQorLSAgICBmcm9tIF9zeXNjb25maWdkYXRhIGltcG9ydCBidWlsZF90aW1lX3ZhcnMKKy0gICAgZ2xvYmFsIF9jb25maWdfdmFycworLSAgICBfY29uZmlnX3ZhcnMgPSB7fQorLSAgICBfY29uZmlnX3ZhcnMudXBkYXRlKGJ1aWxkX3RpbWVfdmFycykKKysgICAgZyA9IHt9CisrICAgICMgbG9hZCB0aGUgaW5zdGFsbGVkIE1ha2VmaWxlOgorKyAgICB0cnk6CisrICAgICAgICBmaWxlbmFtZSA9IGdldF9tYWtlZmlsZV9maWxlbmFtZSgpCisrICAgICAgICBwYXJzZV9tYWtlZmlsZShmaWxlbmFtZSwgZykKKysgICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKysgICAgICAgIG15X21zZyA9ICJpbnZhbGlkIFB5dGhvbiBpbnN0YWxsYXRpb246IHVuYWJsZSB0byBvcGVuICVzIiAlIGZpbGVuYW1lCisrICAgICAgICBpZiBoYXNhdHRyKG1zZywgInN0cmVycm9yIik6CisrICAgICAgICAgICAgbXlfbXNnID0gbXlfbXNnICsgIiAoJXMpIiAlIG1zZy5zdHJlcnJvcgorKworKyAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcihteV9tc2cpCisrCisrICAgICMgbG9hZCB0aGUgaW5zdGFsbGVkIHB5Y29uZmlnLmg6CisrICAgIHRyeToKKysgICAgICAgIGZpbGVuYW1lID0gZ2V0X2NvbmZpZ19oX2ZpbGVuYW1lKCkKKysgICAgICAgIHBhcnNlX2NvbmZpZ19oKGZpbGUoZmlsZW5hbWUpLCBnKQorKyAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorKyAgICAgICAgbXlfbXNnID0gImludmFsaWQgUHl0aG9uIGluc3RhbGxhdGlvbjogdW5hYmxlIHRvIG9wZW4gJXMiICUgZmlsZW5hbWUKKysgICAgICAgIGlmIGhhc2F0dHIobXNnLCAic3RyZXJyb3IiKToKKysgICAgICAgICAgICBteV9tc2cgPSBteV9tc2cgKyAiICglcykiICUgbXNnLnN0cmVycm9yCisrCisrICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKG15X21zZykKKysKKysgICAgIyBPbiBBSVgsIHRoZXJlIGFyZSB3cm9uZyBwYXRocyB0byB0aGUgbGlua2VyIHNjcmlwdHMgaW4gdGhlIE1ha2VmaWxlCisrICAgICMgLS0gdGhlc2UgcGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBQeXRob24gc291cmNlLCBidXQgd2hlbiBpbnN0YWxsZWQKKysgICAgIyB0aGUgc2NyaXB0cyBhcmUgaW4gYW5vdGhlciBkaXJlY3RvcnkuCisrICAgIGlmIHB5dGhvbl9idWlsZDoKKysgICAgICAgIGdbJ0xEU0hBUkVEJ10gPSBnWydCTERTSEFSRUQnXQorIAorKyAgICBlbGlmIGdldF9weXRob25fdmVyc2lvbigpIDwgJzIuMSc6CisrICAgICAgICAjIFRoZSBmb2xsb3dpbmcgdHdvIGJyYW5jaGVzIGFyZSBmb3IgMS41LjIgY29tcGF0aWJpbGl0eS4KKysgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnYWl4NCc6ICAgICAgICAgICMgd2hhdCBhYm91dCBBSVggMy54ID8KKysgICAgICAgICAgICAjIExpbmtlciBzY3JpcHQgaXMgaW4gdGhlIGNvbmZpZyBkaXJlY3RvcnksIG5vdCBpbiBNb2R1bGVzIGFzIHRoZQorKyAgICAgICAgICAgICMgTWFrZWZpbGUgc2F5cy4KKysgICAgICAgICAgICBweXRob25fbGliID0gZ2V0X3B5dGhvbl9saWIoc3RhbmRhcmRfbGliPTEpCisrICAgICAgICAgICAgbGRfc29fYWl4ID0gb3MucGF0aC5qb2luKHB5dGhvbl9saWIsICdjb25maWcnLCAnbGRfc29fYWl4JykKKysgICAgICAgICAgICBweXRob25fZXhwID0gb3MucGF0aC5qb2luKHB5dGhvbl9saWIsICdjb25maWcnLCAncHl0aG9uLmV4cCcpCisrCisrICAgICAgICAgICAgZ1snTERTSEFSRUQnXSA9ICIlcyAlcyAtYkk6JXMiICUgKGxkX3NvX2FpeCwgZ1snQ0MnXSwgcHl0aG9uX2V4cCkKKysKKysgICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtID09ICdiZW9zJzoKKysgICAgICAgICAgICAjIExpbmtlciBzY3JpcHQgaXMgaW4gdGhlIGNvbmZpZyBkaXJlY3RvcnkuICBJbiB0aGUgTWFrZWZpbGUgaXQgaXMKKysgICAgICAgICAgICAjIHJlbGF0aXZlIHRvIHRoZSBzcmNkaXIsIHdoaWNoIGFmdGVyIGluc3RhbGxhdGlvbiBubyBsb25nZXIgbWFrZXMKKysgICAgICAgICAgICAjIHNlbnNlLgorKyAgICAgICAgICAgIHB5dGhvbl9saWIgPSBnZXRfcHl0aG9uX2xpYihzdGFuZGFyZF9saWI9MSkKKysgICAgICAgICAgICBsaW5rZXJzY3JpcHRfcGF0aCA9IHN0cmluZy5zcGxpdChnWydMRFNIQVJFRCddKVswXQorKyAgICAgICAgICAgIGxpbmtlcnNjcmlwdF9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShsaW5rZXJzY3JpcHRfcGF0aCkKKysgICAgICAgICAgICBsaW5rZXJzY3JpcHQgPSBvcy5wYXRoLmpvaW4ocHl0aG9uX2xpYiwgJ2NvbmZpZycsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlcnNjcmlwdF9uYW1lKQorKworKyAgICAgICAgICAgICMgWFhYIHRoaXMgaXNuJ3QgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIHRoaXM6IGFkZGluZyB0aGUgUHl0aG9uCisrICAgICAgICAgICAgIyBsaWJyYXJ5IHRvIHRoZSBsaW5rLCBpZiBuZWVkZWQsIHNob3VsZCBiZSBpbiB0aGUgImJ1aWxkX2V4dCIKKysgICAgICAgICAgICAjIGNvbW1hbmQuICAoSXQncyBhbHNvIG5lZWRlZCBmb3Igbm9uLU1TIGNvbXBpbGVycyBvbiBXaW5kb3dzLCBhbmQKKysgICAgICAgICAgICAjIGl0J3MgdGFrZW4gY2FyZSBvZiBmb3IgdGhlbSBieSB0aGUgJ2J1aWxkX2V4dC5nZXRfbGlicmFyaWVzKCknCisrICAgICAgICAgICAgIyBtZXRob2QuKQorKyAgICAgICAgICAgIGdbJ0xEU0hBUkVEJ10gPSAoIiVzIC1MJXMvbGliIC1scHl0aG9uJXMiICUKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5rZXJzY3JpcHQsIFBSRUZJWCwgZ2V0X3B5dGhvbl92ZXJzaW9uKCkpKQorKworKyAgICBnbG9iYWwgX2NvbmZpZ192YXJzCisrICAgIF9jb25maWdfdmFycyA9IGcKKyAKKyBkZWYgX2luaXRfbnQoKToKKyAgICAgIiIiSW5pdGlhbGl6ZSB0aGUgbW9kdWxlIGFzIGFwcHJvcHJpYXRlIGZvciBOVCIiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvdW5peGNjb21waWxlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL3VuaXhjY29tcGlsZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUwMjgyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL3VuaXhjY29tcGlsZXIucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoZSBDQyB2YXJpYWJsZSxzb21ldGltZXMgbGlrZToieDg2XzY0LXBva3ktbGludXgtZ2NjICAgLW02NCAtLXN5c3Jvb3Q9LyR7VE1QRElSfS9zeXNyb290cy9xZW11eDg2LTY0IiwgY29udGFpbnMgb3B0aW9uIGluZm9ybWF0aW9uLiAKK1RoaXMgd2lsbCBsZWFkIHRvIHdyb25nIGNvbXBpbGVyIG5hbWUgInFlbXV4ODYtNjQiIHJhdGhlciB0aGFuICJ4ODZfNjQtcG9reS1saW51eC1nY2MiIHdoZW4gcHl0aG9uIGZpbmRpbmcgdGhlIGNvbXBpbGVyIG5hbWUuCisKK1NpZ25lZC1vZmYtYnk6IE1laSBMZWkgPGxlaS5tZWlAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0luZGV4OiBQeXRob24tMi43LjIvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy4yLm9yaWcvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5CTIwMTEtMTEtMjQgMTM6NTE6MTAuNTM5OTk4NzIyIC0wODAwCisrKysgUHl0aG9uLTIuNy4yL0xpYi9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weQkyMDExLTExLTI0IDE1OjU0OjM2Ljg3MjEzNzc2NiAtMDgwMAorQEAgLTI4Miw3ICsyODIsNyBAQAorICAgICAgICAgIyB0aGlzIHRpbWUsIHRoZXJlJ3Mgbm8gd2F5IHRvIGRldGVybWluZSB0aGlzIGluZm9ybWF0aW9uIGZyb20KKyAgICAgICAgICMgdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSBzdG9yZWQgaW4gdGhlIFB5dGhvbiBpbnN0YWxsYXRpb24sIHNvCisgICAgICAgICAjIHdlIHVzZSB0aGlzIGhhY2suCistICAgICAgICBjb21waWxlciA9IG9zLnBhdGguYmFzZW5hbWUoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJDQyIpKQorKyAgICAgICAgY29tcGlsZXIgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkNDIikKKyAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6Nl0gPT0gImRhcndpbiI6CisgICAgICAgICAgICAgIyBNYWNPU1gncyBsaW5rZXIgZG9lc24ndCB1bmRlcnN0YW5kIHRoZSAtUiBmbGFnIGF0IGFsbAorICAgICAgICAgICAgIHJldHVybiAiLUwiICsgZGlyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZV8yLjcuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlXzIuNy45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZjVjMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZV8yLjcuOS5iYgpAQCAtMCwwICsxLDYzIEBACityZXF1aXJlIHB5dGhvbi5pbmMKKworRVhUUkFOQVRJVkVQQVRIICs9ICJiemlwMi1uYXRpdmUiCitERVBFTkRTID0gIm9wZW5zc2wtbmF0aXZlIGJ6aXAyLXJlcGxhY2VtZW50LW5hdGl2ZSB6bGliLW5hdGl2ZSByZWFkbGluZS1uYXRpdmUgc3FsaXRlMy1uYXRpdmUiCitQUiA9ICIke0lOQ19QUn0uMSIKKworU1JDX1VSSSArPSAiXAorICAgICAgICAgICAgZmlsZTovLzA1LWVuYWJsZS1jdHlwZXMtY3Jvc3MtYnVpbGQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzEwLWRpc3R1dGlscy1maXgtc3dpZy1wYXJhbWV0ZXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzExLWRpc3R1dGlscy1uZXZlci1tb2RpZnktc2hlYmFuZy1saW5lLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYnVnLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly91bml4Y2NvbXBpbGVyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ub2hvc3RsaWJzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9tdWx0aWxpYi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYWRkLW1kNW1vZHVsZS1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9idWlsZGRpci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcGFyYWxsZWwtbWFrZWluc3QtY3JlYXRlLWJpbmRpci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcmV2ZXJ0X3VzZV9vZl9zeXNjb25maWdkYXRhLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hdm9pZF9wYXJhbGxlbF9tYWtlX3JhY2VzX29uX3BnZW4ucGF0Y2ggXAorICAgICAgICAgICAiCitTID0gIiR7V09SS0RJUn0vUHl0aG9uLSR7UFZ9IgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS8ke1BOfToiCisKK2luaGVyaXQgbmF0aXZlCisKK1JQUk9WSURFUyArPSAicHl0aG9uLWRpc3R1dGlscy1uYXRpdmUgcHl0aG9uLWNvbXByZXNzaW9uLW5hdGl2ZSBweXRob24tdGV4dHV0aWxzLW5hdGl2ZSBweXRob24tY29kZWNzLW5hdGl2ZSBweXRob24tY29yZS1uYXRpdmUiCisKK0VYVFJBX09FQ09ORl9hcHBlbmQgPSAiIC0tYmluZGlyPSR7YmluZGlyfS8ke1BOfSIKKworRVhUUkFfT0VNQUtFID0gJ1wKKyAgQlVJTERfU1lTPSIiIFwKKyAgSE9TVF9TWVM9IiIgXAorICBMSUJDPSIiIFwKKyAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IFwKKyAgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9IFwKKycKKworZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKKwlhdXRvcmVjb25mIC0tdmVyYm9zZSAtLWluc3RhbGwgLS1mb3JjZSAtLWV4Y2x1ZGU9YXV0b3BvaW50IC4uL1B5dGhvbi0ke1BWfS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpCit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9LyR7UE59CisJaW5zdGFsbCAtbSAwNzU1IFBhcnNlci9wZ2VuICR7RH0ke2JpbmRpcn0vJHtQTn0KKworCSMgTWFrZSBzdXJlIHdlIHVzZSAvdXNyL2Jpbi9lbnYgcHl0aG9uCisJZm9yIFBZVEhTQ1JJUFQgaW4gYGdyZXAgLXJJbCAke2JpbmRpcn0vJHtQTn0vcHl0aG9uICR7RH0ke2JpbmRpcn0vJHtQTn1gOyBkbworCQlzZWQgLWkgLWUgJzFzfF4jIS4qfCMhL3Vzci9iaW4vZW52IHB5dGhvbnwnICRQWVRIU0NSSVBUCisJZG9uZQorCisJIyBBZGQgYSBzeW1saW5rIHRvIHRoZSBuYXRpdmUgUHl0aG9uIHNvIHRoYXQgc2NyaXB0cyBjYW4ganVzdCBpbnZva2UKKwkjICJuYXRpdmVweXRob24iIGFuZCBnZXQgdGhlIHJpZ2h0IG9uZSB3aXRob3V0IG5lZWRpbmcgYWJzb2x1dGUgcGF0aHMKKwkjICh0aGVzZSBvZnRlbiBlbmQgdXAgdG9vIGxvbmcgZm9yIHRoZSAjISBwYXJzZXIgaW4gdGhlIGtlcm5lbCBhcyB0aGUKKwkjIGJ1ZmZlciBpcyAxMjggYnl0ZXMgbG9uZykuCisJbG4gLXMgcHl0aG9uLW5hdGl2ZS9weXRob24gJHtEfSR7YmluZGlyfS9uYXRpdmVweXRob24KKworCSMgV2UgZG9uJ3Qgd2FudCBtb2R1bGVzIGluIH4vLmxvY2FsIGJlaW5nIHVzZWQgaW4gcHJlZmVyZW5jZSB0byB0aG9zZQorCSMgaW5zdGFsbGVkIGluIHRoZSBuYXRpdmUgc3lzcm9vdCwgc28gZGlzYWJsZSB1c2VyIHNpdGUgc3VwcG9ydC4KKwlzZWQgLWkgLWUgJ3MsXlwoRU5BQkxFX1VTRVJfU0lURSA9IFwpLiosXDFGYWxzZSwnICR7RH0ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9zaXRlLnB5Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5vc2VfMS4zLjYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5vc2VfMS4zLjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZlOGZjMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbm9zZV8xLjMuNi5iYgpAQCAtMCwwICsxLDE2IEBACitERVNDUklQVElPTiA9ICJub3NlIGV4dGVuZHMgdGhlIHRlc3QgbG9hZGluZyBhbmQgcnVubmluZyBmZWF0dXJlcyBvZiB1bml0dGVzdCwgXAorbWFraW5nIGl0IGVhc2llciB0byB3cml0ZSwgZmluZCBhbmQgcnVuIHRlc3RzLiIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2xncGwudHh0O21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyIKKworU1JDX1VSSSA9ICJodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9uL25vc2Uvbm9zZS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwY2E1NDZkODFjYTgzMDkwODBmYzgwY2IzODllN2ExNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmNjFlMDkwOWE3NDNlZWQzN2IxMjA3ZTM4YThlN2I0YTJmZTBhODIxODVlMzZmMmJlMjUyZWYxYjNmOTAxNzU4IgorCitTID0gIiR7V09SS0RJUn0vbm9zZS0ke1BWfSIKKworaW5oZXJpdCBzZXR1cHRvb2xzCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYWFyY2g2NC9fbnVtcHljb25maWcuaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYWFyY2g2NC9fbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTU3YWMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hYXJjaDY0L19udW1weWNvbmZpZy5oCkBAIC0wLDAgKzEsMzAgQEAKKyNkZWZpbmUgTlBZX0hBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBOUFlfU0laRU9GX1NIT1JUIFNJWkVPRl9TSE9SVAorI2RlZmluZSBOUFlfU0laRU9GX0lOVCBTSVpFT0ZfSU5UCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyBTSVpFT0ZfTE9ORworI2RlZmluZSBOUFlfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0ZMT0FUIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfTE9OR0RPVUJMRSAzMgorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDgKKyNkZWZpbmUgTlBZX05PX1NNUCAwCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNOQU4KKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0lORgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTRklOSVRFCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBOUFlfVVNFX0M5OV9DT01QTEVYIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9ET1VCTEUgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0ZMT0FUIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9MT05HX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9VU0VfQzk5X0ZPUk1BVFMgMQorI2RlZmluZSBOUFlfVklTSUJJTElUWV9ISURERU4gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKQorI2RlZmluZSBOUFlfQUJJX1ZFUlNJT04gMHgwMTAwMDAwOQorI2RlZmluZSBOUFlfQVBJX1ZFUlNJT04gMHgwMDAwMDAwNworCisjaWZuZGVmIF9fU1REQ19GT1JNQVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hYXJjaDY0L2NvbmZpZy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hYXJjaDY0L2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMGI4NjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FhcmNoNjQvY29uZmlnLmgKQEAgLTAsMCArMSwxMzkgQEAKKyNkZWZpbmUgSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIFNJWkVPRl9QWV9JTlRQVFJfVCA4CisjZGVmaW5lIFNJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBNQVRITElCIG0KKyNkZWZpbmUgSEFWRV9TSU4gMQorI2RlZmluZSBIQVZFX0NPUyAxCisjZGVmaW5lIEhBVkVfVEFOIDEKKyNkZWZpbmUgSEFWRV9TSU5IIDEKKyNkZWZpbmUgSEFWRV9DT1NIIDEKKyNkZWZpbmUgSEFWRV9UQU5IIDEKKyNkZWZpbmUgSEFWRV9GQUJTIDEKKyNkZWZpbmUgSEFWRV9GTE9PUiAxCisjZGVmaW5lIEhBVkVfQ0VJTCAxCisjZGVmaW5lIEhBVkVfU1FSVCAxCisjZGVmaW5lIEhBVkVfTE9HMTAgMQorI2RlZmluZSBIQVZFX0xPRyAxCisjZGVmaW5lIEhBVkVfRVhQIDEKKyNkZWZpbmUgSEFWRV9BU0lOIDEKKyNkZWZpbmUgSEFWRV9BQ09TIDEKKyNkZWZpbmUgSEFWRV9BVEFOIDEKKyNkZWZpbmUgSEFWRV9GTU9EIDEKKyNkZWZpbmUgSEFWRV9NT0RGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUCAxCisjZGVmaW5lIEhBVkVfTERFWFAgMQorI2RlZmluZSBIQVZFX1JJTlQgMQorI2RlZmluZSBIQVZFX1RSVU5DIDEKKyNkZWZpbmUgSEFWRV9FWFAyIDEKKyNkZWZpbmUgSEFWRV9MT0cyIDEKKyNkZWZpbmUgSEFWRV9BVEFOMiAxCisjZGVmaW5lIEhBVkVfUE9XIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVIgMQorI2RlZmluZSBIQVZFX1NJTkYgMQorI2RlZmluZSBIQVZFX0NPU0YgMQorI2RlZmluZSBIQVZFX1RBTkYgMQorI2RlZmluZSBIQVZFX1NJTkhGIDEKKyNkZWZpbmUgSEFWRV9DT1NIRiAxCisjZGVmaW5lIEhBVkVfVEFOSEYgMQorI2RlZmluZSBIQVZFX0ZBQlNGIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkYgMQorI2RlZmluZSBIQVZFX0NFSUxGIDEKKyNkZWZpbmUgSEFWRV9SSU5URiAxCisjZGVmaW5lIEhBVkVfVFJVTkNGIDEKKyNkZWZpbmUgSEFWRV9TUVJURiAxCisjZGVmaW5lIEhBVkVfTE9HMTBGIDEKKyNkZWZpbmUgSEFWRV9MT0dGIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEYgMQorI2RlZmluZSBIQVZFX0VYUEYgMQorI2RlZmluZSBIQVZFX0VYUE0xRiAxCisjZGVmaW5lIEhBVkVfQVNJTkYgMQorI2RlZmluZSBIQVZFX0FDT1NGIDEKKyNkZWZpbmUgSEFWRV9BVEFORiAxCisjZGVmaW5lIEhBVkVfQVNJTkhGIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEYgMQorI2RlZmluZSBIQVZFX0FUQU5IRiAxCisjZGVmaW5lIEhBVkVfSFlQT1RGIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkYgMQorI2RlZmluZSBIQVZFX1BPV0YgMQorI2RlZmluZSBIQVZFX0ZNT0RGIDEKKyNkZWZpbmUgSEFWRV9NT0RGRiAxCisjZGVmaW5lIEhBVkVfRlJFWFBGIDEKKyNkZWZpbmUgSEFWRV9MREVYUEYgMQorI2RlZmluZSBIQVZFX0VYUDJGIDEKKyNkZWZpbmUgSEFWRV9MT0cyRiAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05GIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJGIDEKKyNkZWZpbmUgSEFWRV9TSU5MIDEKKyNkZWZpbmUgSEFWRV9DT1NMIDEKKyNkZWZpbmUgSEFWRV9UQU5MIDEKKyNkZWZpbmUgSEFWRV9TSU5ITCAxCisjZGVmaW5lIEhBVkVfQ09TSEwgMQorI2RlZmluZSBIQVZFX1RBTkhMIDEKKyNkZWZpbmUgSEFWRV9GQUJTTCAxCisjZGVmaW5lIEhBVkVfRkxPT1JMIDEKKyNkZWZpbmUgSEFWRV9DRUlMTCAxCisjZGVmaW5lIEhBVkVfUklOVEwgMQorI2RlZmluZSBIQVZFX1RSVU5DTCAxCisjZGVmaW5lIEhBVkVfU1FSVEwgMQorI2RlZmluZSBIQVZFX0xPRzEwTCAxCisjZGVmaW5lIEhBVkVfTE9HTCAxCisjZGVmaW5lIEhBVkVfTE9HMVBMIDEKKyNkZWZpbmUgSEFWRV9FWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUwgMQorI2RlZmluZSBIQVZFX0FTSU5MIDEKKyNkZWZpbmUgSEFWRV9BQ09TTCAxCisjZGVmaW5lIEhBVkVfQVRBTkwgMQorI2RlZmluZSBIQVZFX0FTSU5ITCAxCisjZGVmaW5lIEhBVkVfQUNPU0hMIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEwgMQorI2RlZmluZSBIQVZFX0hZUE9UTCAxCisjZGVmaW5lIEhBVkVfQVRBTjJMIDEKKyNkZWZpbmUgSEFWRV9QT1dMIDEKKyNkZWZpbmUgSEFWRV9GTU9ETCAxCisjZGVmaW5lIEhBVkVfTU9ERkwgMQorI2RlZmluZSBIQVZFX0ZSRVhQTCAxCisjZGVmaW5lIEhBVkVfTERFWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFAyTCAxCisjZGVmaW5lIEhBVkVfTE9HMkwgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdOTCAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSTCAxCisjZGVmaW5lIEhBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIEhBVkVfQ09NUExFWF9IIDEKKyNkZWZpbmUgSEFWRV9DUkVBTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUcgMQorI2RlZmluZSBIQVZFX0NBQlMgMQorI2RlZmluZSBIQVZFX0NBUkcgMQorI2RlZmluZSBIQVZFX0NFWFAgMQorI2RlZmluZSBIQVZFX0NTUVJUIDEKKyNkZWZpbmUgSEFWRV9DTE9HIDEKKyNkZWZpbmUgSEFWRV9DQ09TIDEKKyNkZWZpbmUgSEFWRV9DU0lOIDEKKyNkZWZpbmUgSEFWRV9DUE9XIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEYgMQorI2RlZmluZSBIQVZFX0NJTUFHRiAxCisjZGVmaW5lIEhBVkVfQ0FCU0YgMQorI2RlZmluZSBIQVZFX0NBUkdGIDEKKyNkZWZpbmUgSEFWRV9DRVhQRiAxCisjZGVmaW5lIEhBVkVfQ1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9DTE9HRiAxCisjZGVmaW5lIEhBVkVfQ0NPU0YgMQorI2RlZmluZSBIQVZFX0NTSU5GIDEKKyNkZWZpbmUgSEFWRV9DUE9XRiAxCisjZGVmaW5lIEhBVkVfQ1JFQUxMIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0wgMQorI2RlZmluZSBIQVZFX0NBQlNMIDEKKyNkZWZpbmUgSEFWRV9DQVJHTCAxCisjZGVmaW5lIEhBVkVfQ0VYUEwgMQorI2RlZmluZSBIQVZFX0NTUVJUTCAxCisjZGVmaW5lIEhBVkVfQ0xPR0wgMQorI2RlZmluZSBIQVZFX0NDT1NMIDEKKyNkZWZpbmUgSEFWRV9DU0lOTCAxCisjZGVmaW5lIEhBVkVfQ1BPV0wgMQorI2RlZmluZSBIQVZFX0xET1VCTEVfSUVFRV9RVUFEX0xFIDEKKyNpZm5kZWYgX19jcGx1c3BsdXMKKy8qICN1bmRlZiBpbmxpbmUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9OUFlfTlBZX0NPTkZJR19IXworI2Vycm9yIGNvbmZpZy5oIHNob3VsZCBuZXZlciBiZSBpbmNsdWRlZCBkaXJlY3RseSwgaW5jbHVkZSBucHlfY29uZmlnLmggaW5zdGVhZAorI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybS9jb25maWcuaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtL2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZWYxODYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybS9jb25maWcuaApAQCAtMCwwICsxLDIxIEBACisvKiAuL3NyYy5saW51eC1pNjg2LTIuNS9udW1weS9jb3JlL2luY2x1ZGUvbnVtcHkvY29uZmlnLmggKi8KKy8qICNkZWZpbmUgU0laRU9GX1NIT1JUIDIgKi8KKy8qICNkZWZpbmUgU0laRU9GX0lOVCA0ICovCisvKiAjZGVmaW5lIFNJWkVPRl9MT05HIDQgKi8KKy8qICNkZWZpbmUgU0laRU9GX0ZMT0FUIDQgKi8KKy8qICNkZWZpbmUgU0laRU9GX0RPVUJMRSA4ICovCisjZGVmaW5lIFNJWkVPRl9MT05HX0RPVUJMRSAxMgorI2RlZmluZSBTSVpFT0ZfUFlfSU5UUFRSX1QgNAorLyogI2RlZmluZSBTSVpFT0ZfTE9OR19MT05HIDggKi8KKyNkZWZpbmUgU0laRU9GX1BZX0xPTkdfTE9ORyA4CisvKiAjZGVmaW5lIENIQVJfQklUIDggKi8KKyNkZWZpbmUgTUFUSExJQiBtCisjZGVmaW5lIEhBVkVfRkxPQVRfRlVOQ1MKKyNkZWZpbmUgSEFWRV9MT0cxUAorI2RlZmluZSBIQVZFX0VYUE0xCisjZGVmaW5lIEhBVkVfSU5WRVJTRV9IWVBFUkJPTElDCisjZGVmaW5lIEhBVkVfSU5WRVJTRV9IWVBFUkJPTElDX0ZMT0FUCisjZGVmaW5lIEhBVkVfSVNOQU4KKyNkZWZpbmUgSEFWRV9JU0lORgorI2RlZmluZSBIQVZFX1JJTlQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm0vbnVtcHljb25maWcuaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtL251bXB5Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRiZjY1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtL251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwxNyBAQAorLyogY2F0IC4vc3JjLmxpbnV4LWk2ODYtMi41L251bXB5L2NvcmUvaW5jbHVkZS9udW1weS9udW1weWNvbmZpZy5oICovCisvKgorICogICogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSBudW1weS9jb3JlL3NldHVwLnB5Yy4gRE8gTk9UIEVESVQgCisgKiAgICovCisjZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgMiAKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgNCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIDQgCisjZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDEyIAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDQgCisjZGVmaW5lIE5QWV9OT19TTVAgMAorCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOCAKKy8qICNkZWZpbmUgQ0hBUl9CSVQgOCAqLworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybWViL2NvbmZpZy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm1lYi9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2VmMTg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm1lYi9jb25maWcuaApAQCAtMCwwICsxLDIxIEBACisvKiAuL3NyYy5saW51eC1pNjg2LTIuNS9udW1weS9jb3JlL2luY2x1ZGUvbnVtcHkvY29uZmlnLmggKi8KKy8qICNkZWZpbmUgU0laRU9GX1NIT1JUIDIgKi8KKy8qICNkZWZpbmUgU0laRU9GX0lOVCA0ICovCisvKiAjZGVmaW5lIFNJWkVPRl9MT05HIDQgKi8KKy8qICNkZWZpbmUgU0laRU9GX0ZMT0FUIDQgKi8KKy8qICNkZWZpbmUgU0laRU9GX0RPVUJMRSA4ICovCisjZGVmaW5lIFNJWkVPRl9MT05HX0RPVUJMRSAxMgorI2RlZmluZSBTSVpFT0ZfUFlfSU5UUFRSX1QgNAorLyogI2RlZmluZSBTSVpFT0ZfTE9OR19MT05HIDggKi8KKyNkZWZpbmUgU0laRU9GX1BZX0xPTkdfTE9ORyA4CisvKiAjZGVmaW5lIENIQVJfQklUIDggKi8KKyNkZWZpbmUgTUFUSExJQiBtCisjZGVmaW5lIEhBVkVfRkxPQVRfRlVOQ1MKKyNkZWZpbmUgSEFWRV9MT0cxUAorI2RlZmluZSBIQVZFX0VYUE0xCisjZGVmaW5lIEhBVkVfSU5WRVJTRV9IWVBFUkJPTElDCisjZGVmaW5lIEhBVkVfSU5WRVJTRV9IWVBFUkJPTElDX0ZMT0FUCisjZGVmaW5lIEhBVkVfSVNOQU4KKyNkZWZpbmUgSEFWRV9JU0lORgorI2RlZmluZSBIQVZFX1JJTlQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm1lYi9udW1weWNvbmZpZy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm1lYi9udW1weWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YmY2NTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybWViL251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwxNyBAQAorLyogY2F0IC4vc3JjLmxpbnV4LWk2ODYtMi41L251bXB5L2NvcmUvaW5jbHVkZS9udW1weS9udW1weWNvbmZpZy5oICovCisvKgorICogICogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSBudW1weS9jb3JlL3NldHVwLnB5Yy4gRE8gTk9UIEVESVQgCisgKiAgICovCisjZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgMiAKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgNCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIDQgCisjZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDEyIAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDQgCisjZGVmaW5lIE5QWV9OT19TTVAgMAorCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOCAKKy8qICNkZWZpbmUgQ0hBUl9CSVQgOCAqLworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHMvX251bXB5Y29uZmlnLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHMvX251bXB5Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBjNDI4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwcy9fbnVtcHljb25maWcuaApAQCAtMCwwICsxLDMwIEBACisjZGVmaW5lIE5QWV9IQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCBTSVpFT0ZfU0hPUlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgU0laRU9GX0lOVAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgU0laRU9GX0xPTkcKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9GTE9BVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgOAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfTE9OR0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDQKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDgKKyNkZWZpbmUgTlBZX05PX1NNUCAwCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNOQU4KKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0lORgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTRklOSVRFCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBOUFlfVVNFX0M5OV9DT01QTEVYIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9ET1VCTEUgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0ZMT0FUIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9MT05HX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9VU0VfQzk5X0ZPUk1BVFMgMQorI2RlZmluZSBOUFlfVklTSUJJTElUWV9ISURERU4gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKQorI2RlZmluZSBOUFlfQUJJX1ZFUlNJT04gMHgwMTAwMDAwOQorI2RlZmluZSBOUFlfQVBJX1ZFUlNJT04gMHgwMDAwMDAwNworCisjaWZuZGVmIF9fU1REQ19GT1JNQVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzL2NvbmZpZy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzL2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNjEzNWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHMvY29uZmlnLmgKQEAgLTAsMCArMSwxMzkgQEAKKyNkZWZpbmUgSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIFNJWkVPRl9QWV9JTlRQVFJfVCA0CisjZGVmaW5lIFNJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBNQVRITElCIG0KKyNkZWZpbmUgSEFWRV9TSU4gMQorI2RlZmluZSBIQVZFX0NPUyAxCisjZGVmaW5lIEhBVkVfVEFOIDEKKyNkZWZpbmUgSEFWRV9TSU5IIDEKKyNkZWZpbmUgSEFWRV9DT1NIIDEKKyNkZWZpbmUgSEFWRV9UQU5IIDEKKyNkZWZpbmUgSEFWRV9GQUJTIDEKKyNkZWZpbmUgSEFWRV9GTE9PUiAxCisjZGVmaW5lIEhBVkVfQ0VJTCAxCisjZGVmaW5lIEhBVkVfU1FSVCAxCisjZGVmaW5lIEhBVkVfTE9HMTAgMQorI2RlZmluZSBIQVZFX0xPRyAxCisjZGVmaW5lIEhBVkVfRVhQIDEKKyNkZWZpbmUgSEFWRV9BU0lOIDEKKyNkZWZpbmUgSEFWRV9BQ09TIDEKKyNkZWZpbmUgSEFWRV9BVEFOIDEKKyNkZWZpbmUgSEFWRV9GTU9EIDEKKyNkZWZpbmUgSEFWRV9NT0RGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUCAxCisjZGVmaW5lIEhBVkVfTERFWFAgMQorI2RlZmluZSBIQVZFX1JJTlQgMQorI2RlZmluZSBIQVZFX1RSVU5DIDEKKyNkZWZpbmUgSEFWRV9FWFAyIDEKKyNkZWZpbmUgSEFWRV9MT0cyIDEKKyNkZWZpbmUgSEFWRV9BVEFOMiAxCisjZGVmaW5lIEhBVkVfUE9XIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVIgMQorI2RlZmluZSBIQVZFX1NJTkYgMQorI2RlZmluZSBIQVZFX0NPU0YgMQorI2RlZmluZSBIQVZFX1RBTkYgMQorI2RlZmluZSBIQVZFX1NJTkhGIDEKKyNkZWZpbmUgSEFWRV9DT1NIRiAxCisjZGVmaW5lIEhBVkVfVEFOSEYgMQorI2RlZmluZSBIQVZFX0ZBQlNGIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkYgMQorI2RlZmluZSBIQVZFX0NFSUxGIDEKKyNkZWZpbmUgSEFWRV9SSU5URiAxCisjZGVmaW5lIEhBVkVfVFJVTkNGIDEKKyNkZWZpbmUgSEFWRV9TUVJURiAxCisjZGVmaW5lIEhBVkVfTE9HMTBGIDEKKyNkZWZpbmUgSEFWRV9MT0dGIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEYgMQorI2RlZmluZSBIQVZFX0VYUEYgMQorI2RlZmluZSBIQVZFX0VYUE0xRiAxCisjZGVmaW5lIEhBVkVfQVNJTkYgMQorI2RlZmluZSBIQVZFX0FDT1NGIDEKKyNkZWZpbmUgSEFWRV9BVEFORiAxCisjZGVmaW5lIEhBVkVfQVNJTkhGIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEYgMQorI2RlZmluZSBIQVZFX0FUQU5IRiAxCisjZGVmaW5lIEhBVkVfSFlQT1RGIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkYgMQorI2RlZmluZSBIQVZFX1BPV0YgMQorI2RlZmluZSBIQVZFX0ZNT0RGIDEKKyNkZWZpbmUgSEFWRV9NT0RGRiAxCisjZGVmaW5lIEhBVkVfRlJFWFBGIDEKKyNkZWZpbmUgSEFWRV9MREVYUEYgMQorI2RlZmluZSBIQVZFX0VYUDJGIDEKKyNkZWZpbmUgSEFWRV9MT0cyRiAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05GIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJGIDEKKyNkZWZpbmUgSEFWRV9TSU5MIDEKKyNkZWZpbmUgSEFWRV9DT1NMIDEKKyNkZWZpbmUgSEFWRV9UQU5MIDEKKyNkZWZpbmUgSEFWRV9TSU5ITCAxCisjZGVmaW5lIEhBVkVfQ09TSEwgMQorI2RlZmluZSBIQVZFX1RBTkhMIDEKKyNkZWZpbmUgSEFWRV9GQUJTTCAxCisjZGVmaW5lIEhBVkVfRkxPT1JMIDEKKyNkZWZpbmUgSEFWRV9DRUlMTCAxCisjZGVmaW5lIEhBVkVfUklOVEwgMQorI2RlZmluZSBIQVZFX1RSVU5DTCAxCisjZGVmaW5lIEhBVkVfU1FSVEwgMQorI2RlZmluZSBIQVZFX0xPRzEwTCAxCisjZGVmaW5lIEhBVkVfTE9HTCAxCisjZGVmaW5lIEhBVkVfTE9HMVBMIDEKKyNkZWZpbmUgSEFWRV9FWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUwgMQorI2RlZmluZSBIQVZFX0FTSU5MIDEKKyNkZWZpbmUgSEFWRV9BQ09TTCAxCisjZGVmaW5lIEhBVkVfQVRBTkwgMQorI2RlZmluZSBIQVZFX0FTSU5ITCAxCisjZGVmaW5lIEhBVkVfQUNPU0hMIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEwgMQorI2RlZmluZSBIQVZFX0hZUE9UTCAxCisjZGVmaW5lIEhBVkVfQVRBTjJMIDEKKyNkZWZpbmUgSEFWRV9QT1dMIDEKKyNkZWZpbmUgSEFWRV9GTU9ETCAxCisjZGVmaW5lIEhBVkVfTU9ERkwgMQorI2RlZmluZSBIQVZFX0ZSRVhQTCAxCisjZGVmaW5lIEhBVkVfTERFWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFAyTCAxCisjZGVmaW5lIEhBVkVfTE9HMkwgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdOTCAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSTCAxCisjZGVmaW5lIEhBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIEhBVkVfQ09NUExFWF9IIDEKKyNkZWZpbmUgSEFWRV9DUkVBTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUcgMQorI2RlZmluZSBIQVZFX0NBQlMgMQorI2RlZmluZSBIQVZFX0NBUkcgMQorI2RlZmluZSBIQVZFX0NFWFAgMQorI2RlZmluZSBIQVZFX0NTUVJUIDEKKyNkZWZpbmUgSEFWRV9DTE9HIDEKKyNkZWZpbmUgSEFWRV9DQ09TIDEKKyNkZWZpbmUgSEFWRV9DU0lOIDEKKyNkZWZpbmUgSEFWRV9DUE9XIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEYgMQorI2RlZmluZSBIQVZFX0NJTUFHRiAxCisjZGVmaW5lIEhBVkVfQ0FCU0YgMQorI2RlZmluZSBIQVZFX0NBUkdGIDEKKyNkZWZpbmUgSEFWRV9DRVhQRiAxCisjZGVmaW5lIEhBVkVfQ1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9DTE9HRiAxCisjZGVmaW5lIEhBVkVfQ0NPU0YgMQorI2RlZmluZSBIQVZFX0NTSU5GIDEKKyNkZWZpbmUgSEFWRV9DUE9XRiAxCisjZGVmaW5lIEhBVkVfQ1JFQUxMIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0wgMQorI2RlZmluZSBIQVZFX0NBQlNMIDEKKyNkZWZpbmUgSEFWRV9DQVJHTCAxCisjZGVmaW5lIEhBVkVfQ0VYUEwgMQorI2RlZmluZSBIQVZFX0NTUVJUTCAxCisjZGVmaW5lIEhBVkVfQ0xPR0wgMQorI2RlZmluZSBIQVZFX0NDT1NMIDEKKyNkZWZpbmUgSEFWRV9DU0lOTCAxCisjZGVmaW5lIEhBVkVfQ1BPV0wgMQorI2RlZmluZSBIQVZFX0xET1VCTEVfSUVFRV9ET1VCTEVfQkUgMQorI2lmbmRlZiBfX2NwbHVzcGx1cworLyogI3VuZGVmIGlubGluZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX05QWV9OUFlfQ09ORklHX0hfCisjZXJyb3IgY29uZmlnLmggc2hvdWxkIG5ldmVyIGJlIGluY2x1ZGVkIGRpcmVjdGx5LCBpbmNsdWRlIG5weV9jb25maWcuaCBpbnN0ZWFkCisjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0L19udW1weWNvbmZpZy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjQvX251bXB5Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1N2FjMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0L19udW1weWNvbmZpZy5oCkBAIC0wLDAgKzEsMzAgQEAKKyNkZWZpbmUgTlBZX0hBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBOUFlfU0laRU9GX1NIT1JUIFNJWkVPRl9TSE9SVAorI2RlZmluZSBOUFlfU0laRU9GX0lOVCBTSVpFT0ZfSU5UCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyBTSVpFT0ZfTE9ORworI2RlZmluZSBOUFlfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0ZMT0FUIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfTE9OR0RPVUJMRSAzMgorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDgKKyNkZWZpbmUgTlBZX05PX1NNUCAwCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNOQU4KKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0lORgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTRklOSVRFCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBOUFlfVVNFX0M5OV9DT01QTEVYIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9ET1VCTEUgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0ZMT0FUIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9MT05HX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9VU0VfQzk5X0ZPUk1BVFMgMQorI2RlZmluZSBOUFlfVklTSUJJTElUWV9ISURERU4gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKQorI2RlZmluZSBOUFlfQUJJX1ZFUlNJT04gMHgwMTAwMDAwOQorI2RlZmluZSBOUFlfQVBJX1ZFUlNJT04gMHgwMDAwMDAwNworCisjaWZuZGVmIF9fU1REQ19GT1JNQVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjQvY29uZmlnLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NC9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzBiODY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjQvY29uZmlnLmgKQEAgLTAsMCArMSwxMzkgQEAKKyNkZWZpbmUgSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIFNJWkVPRl9QWV9JTlRQVFJfVCA4CisjZGVmaW5lIFNJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBNQVRITElCIG0KKyNkZWZpbmUgSEFWRV9TSU4gMQorI2RlZmluZSBIQVZFX0NPUyAxCisjZGVmaW5lIEhBVkVfVEFOIDEKKyNkZWZpbmUgSEFWRV9TSU5IIDEKKyNkZWZpbmUgSEFWRV9DT1NIIDEKKyNkZWZpbmUgSEFWRV9UQU5IIDEKKyNkZWZpbmUgSEFWRV9GQUJTIDEKKyNkZWZpbmUgSEFWRV9GTE9PUiAxCisjZGVmaW5lIEhBVkVfQ0VJTCAxCisjZGVmaW5lIEhBVkVfU1FSVCAxCisjZGVmaW5lIEhBVkVfTE9HMTAgMQorI2RlZmluZSBIQVZFX0xPRyAxCisjZGVmaW5lIEhBVkVfRVhQIDEKKyNkZWZpbmUgSEFWRV9BU0lOIDEKKyNkZWZpbmUgSEFWRV9BQ09TIDEKKyNkZWZpbmUgSEFWRV9BVEFOIDEKKyNkZWZpbmUgSEFWRV9GTU9EIDEKKyNkZWZpbmUgSEFWRV9NT0RGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUCAxCisjZGVmaW5lIEhBVkVfTERFWFAgMQorI2RlZmluZSBIQVZFX1JJTlQgMQorI2RlZmluZSBIQVZFX1RSVU5DIDEKKyNkZWZpbmUgSEFWRV9FWFAyIDEKKyNkZWZpbmUgSEFWRV9MT0cyIDEKKyNkZWZpbmUgSEFWRV9BVEFOMiAxCisjZGVmaW5lIEhBVkVfUE9XIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVIgMQorI2RlZmluZSBIQVZFX1NJTkYgMQorI2RlZmluZSBIQVZFX0NPU0YgMQorI2RlZmluZSBIQVZFX1RBTkYgMQorI2RlZmluZSBIQVZFX1NJTkhGIDEKKyNkZWZpbmUgSEFWRV9DT1NIRiAxCisjZGVmaW5lIEhBVkVfVEFOSEYgMQorI2RlZmluZSBIQVZFX0ZBQlNGIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkYgMQorI2RlZmluZSBIQVZFX0NFSUxGIDEKKyNkZWZpbmUgSEFWRV9SSU5URiAxCisjZGVmaW5lIEhBVkVfVFJVTkNGIDEKKyNkZWZpbmUgSEFWRV9TUVJURiAxCisjZGVmaW5lIEhBVkVfTE9HMTBGIDEKKyNkZWZpbmUgSEFWRV9MT0dGIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEYgMQorI2RlZmluZSBIQVZFX0VYUEYgMQorI2RlZmluZSBIQVZFX0VYUE0xRiAxCisjZGVmaW5lIEhBVkVfQVNJTkYgMQorI2RlZmluZSBIQVZFX0FDT1NGIDEKKyNkZWZpbmUgSEFWRV9BVEFORiAxCisjZGVmaW5lIEhBVkVfQVNJTkhGIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEYgMQorI2RlZmluZSBIQVZFX0FUQU5IRiAxCisjZGVmaW5lIEhBVkVfSFlQT1RGIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkYgMQorI2RlZmluZSBIQVZFX1BPV0YgMQorI2RlZmluZSBIQVZFX0ZNT0RGIDEKKyNkZWZpbmUgSEFWRV9NT0RGRiAxCisjZGVmaW5lIEhBVkVfRlJFWFBGIDEKKyNkZWZpbmUgSEFWRV9MREVYUEYgMQorI2RlZmluZSBIQVZFX0VYUDJGIDEKKyNkZWZpbmUgSEFWRV9MT0cyRiAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05GIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJGIDEKKyNkZWZpbmUgSEFWRV9TSU5MIDEKKyNkZWZpbmUgSEFWRV9DT1NMIDEKKyNkZWZpbmUgSEFWRV9UQU5MIDEKKyNkZWZpbmUgSEFWRV9TSU5ITCAxCisjZGVmaW5lIEhBVkVfQ09TSEwgMQorI2RlZmluZSBIQVZFX1RBTkhMIDEKKyNkZWZpbmUgSEFWRV9GQUJTTCAxCisjZGVmaW5lIEhBVkVfRkxPT1JMIDEKKyNkZWZpbmUgSEFWRV9DRUlMTCAxCisjZGVmaW5lIEhBVkVfUklOVEwgMQorI2RlZmluZSBIQVZFX1RSVU5DTCAxCisjZGVmaW5lIEhBVkVfU1FSVEwgMQorI2RlZmluZSBIQVZFX0xPRzEwTCAxCisjZGVmaW5lIEhBVkVfTE9HTCAxCisjZGVmaW5lIEhBVkVfTE9HMVBMIDEKKyNkZWZpbmUgSEFWRV9FWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUwgMQorI2RlZmluZSBIQVZFX0FTSU5MIDEKKyNkZWZpbmUgSEFWRV9BQ09TTCAxCisjZGVmaW5lIEhBVkVfQVRBTkwgMQorI2RlZmluZSBIQVZFX0FTSU5ITCAxCisjZGVmaW5lIEhBVkVfQUNPU0hMIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEwgMQorI2RlZmluZSBIQVZFX0hZUE9UTCAxCisjZGVmaW5lIEhBVkVfQVRBTjJMIDEKKyNkZWZpbmUgSEFWRV9QT1dMIDEKKyNkZWZpbmUgSEFWRV9GTU9ETCAxCisjZGVmaW5lIEhBVkVfTU9ERkwgMQorI2RlZmluZSBIQVZFX0ZSRVhQTCAxCisjZGVmaW5lIEhBVkVfTERFWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFAyTCAxCisjZGVmaW5lIEhBVkVfTE9HMkwgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdOTCAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSTCAxCisjZGVmaW5lIEhBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIEhBVkVfQ09NUExFWF9IIDEKKyNkZWZpbmUgSEFWRV9DUkVBTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUcgMQorI2RlZmluZSBIQVZFX0NBQlMgMQorI2RlZmluZSBIQVZFX0NBUkcgMQorI2RlZmluZSBIQVZFX0NFWFAgMQorI2RlZmluZSBIQVZFX0NTUVJUIDEKKyNkZWZpbmUgSEFWRV9DTE9HIDEKKyNkZWZpbmUgSEFWRV9DQ09TIDEKKyNkZWZpbmUgSEFWRV9DU0lOIDEKKyNkZWZpbmUgSEFWRV9DUE9XIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEYgMQorI2RlZmluZSBIQVZFX0NJTUFHRiAxCisjZGVmaW5lIEhBVkVfQ0FCU0YgMQorI2RlZmluZSBIQVZFX0NBUkdGIDEKKyNkZWZpbmUgSEFWRV9DRVhQRiAxCisjZGVmaW5lIEhBVkVfQ1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9DTE9HRiAxCisjZGVmaW5lIEhBVkVfQ0NPU0YgMQorI2RlZmluZSBIQVZFX0NTSU5GIDEKKyNkZWZpbmUgSEFWRV9DUE9XRiAxCisjZGVmaW5lIEhBVkVfQ1JFQUxMIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0wgMQorI2RlZmluZSBIQVZFX0NBQlNMIDEKKyNkZWZpbmUgSEFWRV9DQVJHTCAxCisjZGVmaW5lIEhBVkVfQ0VYUEwgMQorI2RlZmluZSBIQVZFX0NTUVJUTCAxCisjZGVmaW5lIEhBVkVfQ0xPR0wgMQorI2RlZmluZSBIQVZFX0NDT1NMIDEKKyNkZWZpbmUgSEFWRV9DU0lOTCAxCisjZGVmaW5lIEhBVkVfQ1BPV0wgMQorI2RlZmluZSBIQVZFX0xET1VCTEVfSUVFRV9RVUFEX0xFIDEKKyNpZm5kZWYgX19jcGx1c3BsdXMKKy8qICN1bmRlZiBpbmxpbmUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9OUFlfTlBZX0NPTkZJR19IXworI2Vycm9yIGNvbmZpZy5oIHNob3VsZCBuZXZlciBiZSBpbmNsdWRlZCBkaXJlY3RseSwgaW5jbHVkZSBucHlfY29uZmlnLmggaW5zdGVhZAorI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NG4zMi9fbnVtcHljb25maWcuaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0bjMyL19udW1weWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNTdhYzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NG4zMi9fbnVtcHljb25maWcuaApAQCAtMCwwICsxLDMwIEBACisjZGVmaW5lIE5QWV9IQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCBTSVpFT0ZfU0hPUlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgU0laRU9GX0lOVAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgU0laRU9GX0xPTkcKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9GTE9BVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0xPTkdET1VCTEUgMzIKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4CisjZGVmaW5lIE5QWV9OT19TTVAgMAorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTTkFOCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNJTkYKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0ZJTklURQorI2RlZmluZSBOUFlfSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgTlBZX1VTRV9DOTlfQ09NUExFWCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9GTE9BVCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfTE9OR19ET1VCTEUgMQorI2RlZmluZSBOUFlfVVNFX0M5OV9GT1JNQVRTIDEKKyNkZWZpbmUgTlBZX1ZJU0lCSUxJVFlfSElEREVOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKKyNkZWZpbmUgTlBZX0FCSV9WRVJTSU9OIDB4MDEwMDAwMDkKKyNkZWZpbmUgTlBZX0FQSV9WRVJTSU9OIDB4MDAwMDAwMDcKKworI2lmbmRlZiBfX1NURENfRk9STUFUX01BQ1JPUworI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUyAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0bjMyL2NvbmZpZy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjRuMzIvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMwYjg2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0bjMyL2NvbmZpZy5oCkBAIC0wLDAgKzEsMTM5IEBACisjZGVmaW5lIEhBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBTSVpFT0ZfUFlfSU5UUFRSX1QgOAorI2RlZmluZSBTSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTUFUSExJQiBtCisjZGVmaW5lIEhBVkVfU0lOIDEKKyNkZWZpbmUgSEFWRV9DT1MgMQorI2RlZmluZSBIQVZFX1RBTiAxCisjZGVmaW5lIEhBVkVfU0lOSCAxCisjZGVmaW5lIEhBVkVfQ09TSCAxCisjZGVmaW5lIEhBVkVfVEFOSCAxCisjZGVmaW5lIEhBVkVfRkFCUyAxCisjZGVmaW5lIEhBVkVfRkxPT1IgMQorI2RlZmluZSBIQVZFX0NFSUwgMQorI2RlZmluZSBIQVZFX1NRUlQgMQorI2RlZmluZSBIQVZFX0xPRzEwIDEKKyNkZWZpbmUgSEFWRV9MT0cgMQorI2RlZmluZSBIQVZFX0VYUCAxCisjZGVmaW5lIEhBVkVfQVNJTiAxCisjZGVmaW5lIEhBVkVfQUNPUyAxCisjZGVmaW5lIEhBVkVfQVRBTiAxCisjZGVmaW5lIEhBVkVfRk1PRCAxCisjZGVmaW5lIEhBVkVfTU9ERiAxCisjZGVmaW5lIEhBVkVfRlJFWFAgMQorI2RlZmluZSBIQVZFX0xERVhQIDEKKyNkZWZpbmUgSEFWRV9SSU5UIDEKKyNkZWZpbmUgSEFWRV9UUlVOQyAxCisjZGVmaW5lIEhBVkVfRVhQMiAxCisjZGVmaW5lIEhBVkVfTE9HMiAxCisjZGVmaW5lIEhBVkVfQVRBTjIgMQorI2RlZmluZSBIQVZFX1BPVyAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSIDEKKyNkZWZpbmUgSEFWRV9TSU5GIDEKKyNkZWZpbmUgSEFWRV9DT1NGIDEKKyNkZWZpbmUgSEFWRV9UQU5GIDEKKyNkZWZpbmUgSEFWRV9TSU5IRiAxCisjZGVmaW5lIEhBVkVfQ09TSEYgMQorI2RlZmluZSBIQVZFX1RBTkhGIDEKKyNkZWZpbmUgSEFWRV9GQUJTRiAxCisjZGVmaW5lIEhBVkVfRkxPT1JGIDEKKyNkZWZpbmUgSEFWRV9DRUlMRiAxCisjZGVmaW5lIEhBVkVfUklOVEYgMQorI2RlZmluZSBIQVZFX1RSVU5DRiAxCisjZGVmaW5lIEhBVkVfU1FSVEYgMQorI2RlZmluZSBIQVZFX0xPRzEwRiAxCisjZGVmaW5lIEhBVkVfTE9HRiAxCisjZGVmaW5lIEhBVkVfTE9HMVBGIDEKKyNkZWZpbmUgSEFWRV9FWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUYgMQorI2RlZmluZSBIQVZFX0FTSU5GIDEKKyNkZWZpbmUgSEFWRV9BQ09TRiAxCisjZGVmaW5lIEhBVkVfQVRBTkYgMQorI2RlZmluZSBIQVZFX0FTSU5IRiAxCisjZGVmaW5lIEhBVkVfQUNPU0hGIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEYgMQorI2RlZmluZSBIQVZFX0hZUE9URiAxCisjZGVmaW5lIEhBVkVfQVRBTjJGIDEKKyNkZWZpbmUgSEFWRV9QT1dGIDEKKyNkZWZpbmUgSEFWRV9GTU9ERiAxCisjZGVmaW5lIEhBVkVfTU9ERkYgMQorI2RlZmluZSBIQVZFX0ZSRVhQRiAxCisjZGVmaW5lIEhBVkVfTERFWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFAyRiAxCisjZGVmaW5lIEhBVkVfTE9HMkYgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdORiAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSRiAxCisjZGVmaW5lIEhBVkVfU0lOTCAxCisjZGVmaW5lIEhBVkVfQ09TTCAxCisjZGVmaW5lIEhBVkVfVEFOTCAxCisjZGVmaW5lIEhBVkVfU0lOSEwgMQorI2RlZmluZSBIQVZFX0NPU0hMIDEKKyNkZWZpbmUgSEFWRV9UQU5ITCAxCisjZGVmaW5lIEhBVkVfRkFCU0wgMQorI2RlZmluZSBIQVZFX0ZMT09STCAxCisjZGVmaW5lIEhBVkVfQ0VJTEwgMQorI2RlZmluZSBIQVZFX1JJTlRMIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0wgMQorI2RlZmluZSBIQVZFX1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEwgMQorI2RlZmluZSBIQVZFX0xPR0wgMQorI2RlZmluZSBIQVZFX0xPRzFQTCAxCisjZGVmaW5lIEhBVkVfRVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQTTFMIDEKKyNkZWZpbmUgSEFWRV9BU0lOTCAxCisjZGVmaW5lIEhBVkVfQUNPU0wgMQorI2RlZmluZSBIQVZFX0FUQU5MIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEwgMQorI2RlZmluZSBIQVZFX0FDT1NITCAxCisjZGVmaW5lIEhBVkVfQVRBTkhMIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEwgMQorI2RlZmluZSBIQVZFX0FUQU4yTCAxCisjZGVmaW5lIEhBVkVfUE9XTCAxCisjZGVmaW5lIEhBVkVfRk1PREwgMQorI2RlZmluZSBIQVZFX01PREZMIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEwgMQorI2RlZmluZSBIQVZFX0xERVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQMkwgMQorI2RlZmluZSBIQVZFX0xPRzJMIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkwgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkwgMQorI2RlZmluZSBIQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBIQVZFX0NPTVBMRVhfSCAxCisjZGVmaW5lIEhBVkVfQ1JFQUwgMQorI2RlZmluZSBIQVZFX0NJTUFHIDEKKyNkZWZpbmUgSEFWRV9DQUJTIDEKKyNkZWZpbmUgSEFWRV9DQVJHIDEKKyNkZWZpbmUgSEFWRV9DRVhQIDEKKyNkZWZpbmUgSEFWRV9DU1FSVCAxCisjZGVmaW5lIEhBVkVfQ0xPRyAxCisjZGVmaW5lIEhBVkVfQ0NPUyAxCisjZGVmaW5lIEhBVkVfQ1NJTiAxCisjZGVmaW5lIEhBVkVfQ1BPVyAxCisjZGVmaW5lIEhBVkVfQ1JFQUxGIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0YgMQorI2RlZmluZSBIQVZFX0NBQlNGIDEKKyNkZWZpbmUgSEFWRV9DQVJHRiAxCisjZGVmaW5lIEhBVkVfQ0VYUEYgMQorI2RlZmluZSBIQVZFX0NTUVJURiAxCisjZGVmaW5lIEhBVkVfQ0xPR0YgMQorI2RlZmluZSBIQVZFX0NDT1NGIDEKKyNkZWZpbmUgSEFWRV9DU0lORiAxCisjZGVmaW5lIEhBVkVfQ1BPV0YgMQorI2RlZmluZSBIQVZFX0NSRUFMTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUdMIDEKKyNkZWZpbmUgSEFWRV9DQUJTTCAxCisjZGVmaW5lIEhBVkVfQ0FSR0wgMQorI2RlZmluZSBIQVZFX0NFWFBMIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEwgMQorI2RlZmluZSBIQVZFX0NMT0dMIDEKKyNkZWZpbmUgSEFWRV9DQ09TTCAxCisjZGVmaW5lIEhBVkVfQ1NJTkwgMQorI2RlZmluZSBIQVZFX0NQT1dMIDEKKyNkZWZpbmUgSEFWRV9MRE9VQkxFX0lFRUVfUVVBRF9MRSAxCisjaWZuZGVmIF9fY3BsdXNwbHVzCisvKiAjdW5kZWYgaW5saW5lICovCisjZW5kaWYKKworI2lmbmRlZiBfTlBZX05QWV9DT05GSUdfSF8KKyNlcnJvciBjb25maWcuaCBzaG91bGQgbmV2ZXIgYmUgaW5jbHVkZWQgZGlyZWN0bHksIGluY2x1ZGUgbnB5X2NvbmZpZy5oIGluc3RlYWQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzZWwvY29uZmlnLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHNlbC9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2VmMTg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzZWwvY29uZmlnLmgKQEAgLTAsMCArMSwyMSBAQAorLyogLi9zcmMubGludXgtaTY4Ni0yLjUvbnVtcHkvY29yZS9pbmNsdWRlL251bXB5L2NvbmZpZy5oICovCisvKiAjZGVmaW5lIFNJWkVPRl9TSE9SVCAyICovCisvKiAjZGVmaW5lIFNJWkVPRl9JTlQgNCAqLworLyogI2RlZmluZSBTSVpFT0ZfTE9ORyA0ICovCisvKiAjZGVmaW5lIFNJWkVPRl9GTE9BVCA0ICovCisvKiAjZGVmaW5lIFNJWkVPRl9ET1VCTEUgOCAqLworI2RlZmluZSBTSVpFT0ZfTE9OR19ET1VCTEUgMTIKKyNkZWZpbmUgU0laRU9GX1BZX0lOVFBUUl9UIDQKKy8qICNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyA4ICovCisjZGVmaW5lIFNJWkVPRl9QWV9MT05HX0xPTkcgOAorLyogI2RlZmluZSBDSEFSX0JJVCA4ICovCisjZGVmaW5lIE1BVEhMSUIgbQorI2RlZmluZSBIQVZFX0ZMT0FUX0ZVTkNTCisjZGVmaW5lIEhBVkVfTE9HMVAKKyNkZWZpbmUgSEFWRV9FWFBNMQorI2RlZmluZSBIQVZFX0lOVkVSU0VfSFlQRVJCT0xJQworI2RlZmluZSBIQVZFX0lOVkVSU0VfSFlQRVJCT0xJQ19GTE9BVAorI2RlZmluZSBIQVZFX0lTTkFOCisjZGVmaW5lIEhBVkVfSVNJTkYKKyNkZWZpbmUgSEFWRV9SSU5UCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwc2VsL251bXB5Y29uZmlnLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHNlbC9udW1weWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YmY2NTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHNlbC9udW1weWNvbmZpZy5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qIGNhdCAuL3NyYy5saW51eC1pNjg2LTIuNS9udW1weS9jb3JlL2luY2x1ZGUvbnVtcHkvbnVtcHljb25maWcuaCAqLworLyoKKyAqICAqIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgYnkgbnVtcHkvY29yZS9zZXR1cC5weWMuIERPIE5PVCBFRElUIAorICogICAqLworI2RlZmluZSBOUFlfU0laRU9GX1NIT1JUIDIgCisjZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIDQgCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyA0IAorI2RlZmluZSBOUFlfU0laRU9GX0ZMT0FUIDQgCisjZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDggCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0RPVUJMRSAxMiAKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCA0IAorI2RlZmluZSBOUFlfTk9fU01QIDAKKworI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDggCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfTE9OR19MT05HIDggCisvKiAjZGVmaW5lIENIQVJfQklUIDggKi8KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9uby1ob3N0LXBhdGhzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9uby1ob3N0LXBhdGhzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NDUwMzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L25vLWhvc3QtcGF0aHMucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorRG9uJ3Qgc2VhcmNoIC91c3IgYW5kIHNvIG9uIGZvciBsaWJyYXJpZXMgYnkgZGVmYXVsdCB0byBhdm9pZCBob3N0IGNvbnRhbWluYXRpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSAoQXMgdGhlIGNvZGUgc3RhbmRzLCB0aGlzIGlzIGEgaGFjaykKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9udW1weS9kaXN0dXRpbHMvc3lzdGVtX2luZm8ucHkgYi9udW1weS9kaXN0dXRpbHMvc3lzdGVtX2luZm8ucHkKK2luZGV4IGJhYzkwZmIuLmE2M2Q3OTYgMTAwNjQ0CistLS0gYS9udW1weS9kaXN0dXRpbHMvc3lzdGVtX2luZm8ucHkKKysrKyBiL251bXB5L2Rpc3R1dGlscy9zeXN0ZW1faW5mby5weQorQEAgLTE5MSw0MSArMTkxLDEyIEBAIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICBkZWZhdWx0X3gxMV9saWJfZGlycyA9IFtdCisgICAgIGRlZmF1bHRfeDExX2luY2x1ZGVfZGlycyA9IFtdCisgZWxzZToKKy0gICAgZGVmYXVsdF9saWJfZGlycyA9IGxpYnBhdGhzKFsnL3Vzci9sb2NhbC9saWInLCAnL29wdC9saWInLCAnL3Vzci9saWInLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvb3B0L2xvY2FsL2xpYicsICcvc3cvbGliJ10sIHBsYXRmb3JtX2JpdHMpCistICAgIGRlZmF1bHRfaW5jbHVkZV9kaXJzID0gWycvdXNyL2xvY2FsL2luY2x1ZGUnLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL29wdC9pbmNsdWRlJywgJy91c3IvaW5jbHVkZScsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcGF0aCBvZiB1bWZwYWNrIHVuZGVyIG1hY3BvcnRzCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvb3B0L2xvY2FsL2luY2x1ZGUvdWZzcGFyc2UnLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL29wdC9sb2NhbC9pbmNsdWRlJywgJy9zdy9pbmNsdWRlJywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy91c3IvaW5jbHVkZS9zdWl0ZXNwYXJzZSddCistICAgIGRlZmF1bHRfc3JjX2RpcnMgPSBbJy4nLCAnL3Vzci9sb2NhbC9zcmMnLCAnL29wdC9zcmMnLCAnL3N3L3NyYyddCistCistICAgIGRlZmF1bHRfeDExX2xpYl9kaXJzID0gbGlicGF0aHMoWycvdXNyL1gxMVI2L2xpYicsICcvdXNyL1gxMS9saWInLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3Vzci9saWInXSwgcGxhdGZvcm1fYml0cykKKy0gICAgZGVmYXVsdF94MTFfaW5jbHVkZV9kaXJzID0gWycvdXNyL1gxMVI2L2luY2x1ZGUnLCAnL3Vzci9YMTEvaW5jbHVkZScsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3Vzci9pbmNsdWRlJ10KKy0KKy0gICAgaWYgb3MucGF0aC5leGlzdHMoJy91c3IvbGliL1gxMScpOgorLSAgICAgICAgZ2xvYmJlZF94MTFfZGlyID0gZ2xvYignL3Vzci9saWIvKi9saWJYMTEuc28nKQorLSAgICAgICAgaWYgZ2xvYmJlZF94MTFfZGlyOgorLSAgICAgICAgICAgIHgxMV9zb19kaXIgPSBvcy5wYXRoLnNwbGl0KGdsb2JiZWRfeDExX2RpclswXSlbMF0KKy0gICAgICAgICAgICBkZWZhdWx0X3gxMV9saWJfZGlycy5leHRlbmQoW3gxMV9zb19kaXIsICcvdXNyL2xpYi9YMTEnXSkKKy0gICAgICAgICAgICBkZWZhdWx0X3gxMV9pbmNsdWRlX2RpcnMuZXh0ZW5kKFsnL3Vzci9saWIvWDExL2luY2x1ZGUnLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvdXNyL2luY2x1ZGUvWDExJ10pCistCistICAgIGltcG9ydCBzdWJwcm9jZXNzIGFzIHNwCistICAgIHRyeToKKy0gICAgICAgIHAgPSBzcC5Qb3BlbihbImdjYyIsICItcHJpbnQtbXVsdGlhcmNoIl0sIHN0ZG91dD1zcC5QSVBFLAorLSAgICAgICAgICAgICAgICBzdGRlcnI9b3Blbihvcy5kZXZudWxsLCAndycpKQorLSAgICBleGNlcHQgT1NFcnJvcjoKKy0gICAgICAgIHBhc3MgIyBnY2MgaXMgbm90IGluc3RhbGxlZAorLSAgICBlbHNlOgorLSAgICAgICAgdHJpcGxldCA9IHN0cihwLmNvbW11bmljYXRlKClbMF0uZGVjb2RlKCkuc3RyaXAoKSkKKy0gICAgICAgIGlmIHAucmV0dXJuY29kZSA9PSAwOgorLSAgICAgICAgICAgICMgZ2NjIHN1cHBvcnRzIHRoZSAiLXByaW50LW11bHRpYXJjaCIgb3B0aW9uCistICAgICAgICAgICAgZGVmYXVsdF94MTFfbGliX2RpcnMgKz0gW29zLnBhdGguam9pbigiL3Vzci9saWIvIiwgdHJpcGxldCldCistICAgICAgICAgICAgZGVmYXVsdF9saWJfZGlycyArPSBbb3MucGF0aC5qb2luKCIvdXNyL2xpYi8iLCB0cmlwbGV0KV0KKysgICAgZGVmYXVsdF9saWJfZGlycyA9IGxpYnBhdGhzKFsnL2RlYWRpci9saWInXSwgcGxhdGZvcm1fYml0cykKKysgICAgZGVmYXVsdF9pbmNsdWRlX2RpcnMgPSBbJy9kZWFkZGlyL2luY2x1ZGUnXQorKyAgICBkZWZhdWx0X3NyY19kaXJzID0gWycuJywgJy9kZWFkZGlyL3NyYyddCisrCisrICAgIGRlZmF1bHRfeDExX2xpYl9kaXJzID0gbGlicGF0aHMoWycvZGVhZGRpci9saWInXSwgcGxhdGZvcm1fYml0cykKKysgICAgZGVmYXVsdF94MTFfaW5jbHVkZV9kaXJzID0gWycvZGVhZGRpci9pbmNsdWRlJ10KKyAKKyBpZiBvcy5wYXRoLmpvaW4oc3lzLnByZWZpeCwgJ2xpYicpIG5vdCBpbiBkZWZhdWx0X2xpYl9kaXJzOgorICAgICBkZWZhdWx0X2xpYl9kaXJzLmluc2VydCgwLCBvcy5wYXRoLmpvaW4oc3lzLnByZWZpeCwgJ2xpYicpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjL19udW1weWNvbmZpZy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjL19udW1weWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczY2JmYjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGMvX251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwzMCBAQAorI2RlZmluZSBOUFlfSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgU0laRU9GX1NIT1JUCisjZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIFNJWkVPRl9JTlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIFNJWkVPRl9MT05HCisjZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRkxPQVQgOAorI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9ET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9MT05HRE9VQkxFIDMyCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgNAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOAorI2RlZmluZSBOUFlfTk9fU01QIDAKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU05BTgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTSU5GCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNGSU5JVEUKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIE5QWV9VU0VfQzk5X0NPTVBMRVggMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRkxPQVQgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0xPTkdfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX1VTRV9DOTlfRk9STUFUUyAxCisjZGVmaW5lIE5QWV9WSVNJQklMSVRZX0hJRERFTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCisjZGVmaW5lIE5QWV9BQklfVkVSU0lPTiAweDAxMDAwMDA5CisjZGVmaW5lIE5QWV9BUElfVkVSU0lPTiAweDAwMDAwMDA3CisKKyNpZm5kZWYgX19TVERDX0ZPUk1BVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0ZPUk1BVF9NQUNST1MgMQorI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGMvY29uZmlnLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGMvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY1ZDM5ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYy9jb25maWcuaApAQCAtMCwwICsxLDEzOSBAQAorI2RlZmluZSBIQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgU0laRU9GX1BZX0lOVFBUUl9UIDQKKyNkZWZpbmUgU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE1BVEhMSUIgbQorI2RlZmluZSBIQVZFX1NJTiAxCisjZGVmaW5lIEhBVkVfQ09TIDEKKyNkZWZpbmUgSEFWRV9UQU4gMQorI2RlZmluZSBIQVZFX1NJTkggMQorI2RlZmluZSBIQVZFX0NPU0ggMQorI2RlZmluZSBIQVZFX1RBTkggMQorI2RlZmluZSBIQVZFX0ZBQlMgMQorI2RlZmluZSBIQVZFX0ZMT09SIDEKKyNkZWZpbmUgSEFWRV9DRUlMIDEKKyNkZWZpbmUgSEFWRV9TUVJUIDEKKyNkZWZpbmUgSEFWRV9MT0cxMCAxCisjZGVmaW5lIEhBVkVfTE9HIDEKKyNkZWZpbmUgSEFWRV9FWFAgMQorI2RlZmluZSBIQVZFX0FTSU4gMQorI2RlZmluZSBIQVZFX0FDT1MgMQorI2RlZmluZSBIQVZFX0FUQU4gMQorI2RlZmluZSBIQVZFX0ZNT0QgMQorI2RlZmluZSBIQVZFX01PREYgMQorI2RlZmluZSBIQVZFX0ZSRVhQIDEKKyNkZWZpbmUgSEFWRV9MREVYUCAxCisjZGVmaW5lIEhBVkVfUklOVCAxCisjZGVmaW5lIEhBVkVfVFJVTkMgMQorI2RlZmluZSBIQVZFX0VYUDIgMQorI2RlZmluZSBIQVZFX0xPRzIgMQorI2RlZmluZSBIQVZFX0FUQU4yIDEKKyNkZWZpbmUgSEFWRV9QT1cgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUiAxCisjZGVmaW5lIEhBVkVfU0lORiAxCisjZGVmaW5lIEhBVkVfQ09TRiAxCisjZGVmaW5lIEhBVkVfVEFORiAxCisjZGVmaW5lIEhBVkVfU0lOSEYgMQorI2RlZmluZSBIQVZFX0NPU0hGIDEKKyNkZWZpbmUgSEFWRV9UQU5IRiAxCisjZGVmaW5lIEhBVkVfRkFCU0YgMQorI2RlZmluZSBIQVZFX0ZMT09SRiAxCisjZGVmaW5lIEhBVkVfQ0VJTEYgMQorI2RlZmluZSBIQVZFX1JJTlRGIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0YgMQorI2RlZmluZSBIQVZFX1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEYgMQorI2RlZmluZSBIQVZFX0xPR0YgMQorI2RlZmluZSBIQVZFX0xPRzFQRiAxCisjZGVmaW5lIEhBVkVfRVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQTTFGIDEKKyNkZWZpbmUgSEFWRV9BU0lORiAxCisjZGVmaW5lIEhBVkVfQUNPU0YgMQorI2RlZmluZSBIQVZFX0FUQU5GIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEYgMQorI2RlZmluZSBIQVZFX0FDT1NIRiAxCisjZGVmaW5lIEhBVkVfQVRBTkhGIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEYgMQorI2RlZmluZSBIQVZFX0FUQU4yRiAxCisjZGVmaW5lIEhBVkVfUE9XRiAxCisjZGVmaW5lIEhBVkVfRk1PREYgMQorI2RlZmluZSBIQVZFX01PREZGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEYgMQorI2RlZmluZSBIQVZFX0xERVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQMkYgMQorI2RlZmluZSBIQVZFX0xPRzJGIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkYgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkYgMQorI2RlZmluZSBIQVZFX1NJTkwgMQorI2RlZmluZSBIQVZFX0NPU0wgMQorI2RlZmluZSBIQVZFX1RBTkwgMQorI2RlZmluZSBIQVZFX1NJTkhMIDEKKyNkZWZpbmUgSEFWRV9DT1NITCAxCisjZGVmaW5lIEhBVkVfVEFOSEwgMQorI2RlZmluZSBIQVZFX0ZBQlNMIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkwgMQorI2RlZmluZSBIQVZFX0NFSUxMIDEKKyNkZWZpbmUgSEFWRV9SSU5UTCAxCisjZGVmaW5lIEhBVkVfVFJVTkNMIDEKKyNkZWZpbmUgSEFWRV9TUVJUTCAxCisjZGVmaW5lIEhBVkVfTE9HMTBMIDEKKyNkZWZpbmUgSEFWRV9MT0dMIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEwgMQorI2RlZmluZSBIQVZFX0VYUEwgMQorI2RlZmluZSBIQVZFX0VYUE0xTCAxCisjZGVmaW5lIEhBVkVfQVNJTkwgMQorI2RlZmluZSBIQVZFX0FDT1NMIDEKKyNkZWZpbmUgSEFWRV9BVEFOTCAxCisjZGVmaW5lIEhBVkVfQVNJTkhMIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEwgMQorI2RlZmluZSBIQVZFX0FUQU5ITCAxCisjZGVmaW5lIEhBVkVfSFlQT1RMIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkwgMQorI2RlZmluZSBIQVZFX1BPV0wgMQorI2RlZmluZSBIQVZFX0ZNT0RMIDEKKyNkZWZpbmUgSEFWRV9NT0RGTCAxCisjZGVmaW5lIEhBVkVfRlJFWFBMIDEKKyNkZWZpbmUgSEFWRV9MREVYUEwgMQorI2RlZmluZSBIQVZFX0VYUDJMIDEKKyNkZWZpbmUgSEFWRV9MT0cyTCAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05MIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJMIDEKKyNkZWZpbmUgSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgSEFWRV9DT01QTEVYX0ggMQorI2RlZmluZSBIQVZFX0NSRUFMIDEKKyNkZWZpbmUgSEFWRV9DSU1BRyAxCisjZGVmaW5lIEhBVkVfQ0FCUyAxCisjZGVmaW5lIEhBVkVfQ0FSRyAxCisjZGVmaW5lIEhBVkVfQ0VYUCAxCisjZGVmaW5lIEhBVkVfQ1NRUlQgMQorI2RlZmluZSBIQVZFX0NMT0cgMQorI2RlZmluZSBIQVZFX0NDT1MgMQorI2RlZmluZSBIQVZFX0NTSU4gMQorI2RlZmluZSBIQVZFX0NQT1cgMQorI2RlZmluZSBIQVZFX0NSRUFMRiAxCisjZGVmaW5lIEhBVkVfQ0lNQUdGIDEKKyNkZWZpbmUgSEFWRV9DQUJTRiAxCisjZGVmaW5lIEhBVkVfQ0FSR0YgMQorI2RlZmluZSBIQVZFX0NFWFBGIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEYgMQorI2RlZmluZSBIQVZFX0NMT0dGIDEKKyNkZWZpbmUgSEFWRV9DQ09TRiAxCisjZGVmaW5lIEhBVkVfQ1NJTkYgMQorI2RlZmluZSBIQVZFX0NQT1dGIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEwgMQorI2RlZmluZSBIQVZFX0NJTUFHTCAxCisjZGVmaW5lIEhBVkVfQ0FCU0wgMQorI2RlZmluZSBIQVZFX0NBUkdMIDEKKyNkZWZpbmUgSEFWRV9DRVhQTCAxCisjZGVmaW5lIEhBVkVfQ1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9DTE9HTCAxCisjZGVmaW5lIEhBVkVfQ0NPU0wgMQorI2RlZmluZSBIQVZFX0NTSU5MIDEKKyNkZWZpbmUgSEFWRV9DUE9XTCAxCisjZGVmaW5lIEhBVkVfTERPVUJMRV9ET1VCTEVfRE9VQkxFX0JFIDEKKyNpZm5kZWYgX19jcGx1c3BsdXMKKy8qICN1bmRlZiBpbmxpbmUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9OUFlfTlBZX0NPTkZJR19IXworI2Vycm9yIGNvbmZpZy5oIHNob3VsZCBuZXZlciBiZSBpbmNsdWRlZCBkaXJlY3RseSwgaW5jbHVkZSBucHlfY29uZmlnLmggaW5zdGVhZAorI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGM2NC9fbnVtcHljb25maWcuaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYzY0L19udW1weWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNTdhYzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGM2NC9fbnVtcHljb25maWcuaApAQCAtMCwwICsxLDMwIEBACisjZGVmaW5lIE5QWV9IQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCBTSVpFT0ZfU0hPUlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgU0laRU9GX0lOVAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgU0laRU9GX0xPTkcKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9GTE9BVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0xPTkdET1VCTEUgMzIKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4CisjZGVmaW5lIE5QWV9OT19TTVAgMAorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTTkFOCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNJTkYKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0ZJTklURQorI2RlZmluZSBOUFlfSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgTlBZX1VTRV9DOTlfQ09NUExFWCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9GTE9BVCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfTE9OR19ET1VCTEUgMQorI2RlZmluZSBOUFlfVVNFX0M5OV9GT1JNQVRTIDEKKyNkZWZpbmUgTlBZX1ZJU0lCSUxJVFlfSElEREVOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKKyNkZWZpbmUgTlBZX0FCSV9WRVJTSU9OIDB4MDEwMDAwMDkKKyNkZWZpbmUgTlBZX0FQSV9WRVJTSU9OIDB4MDAwMDAwMDcKKworI2lmbmRlZiBfX1NURENfRk9STUFUX01BQ1JPUworI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUyAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYzY0L2NvbmZpZy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjNjQvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMwYjg2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYzY0L2NvbmZpZy5oCkBAIC0wLDAgKzEsMTM5IEBACisjZGVmaW5lIEhBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBTSVpFT0ZfUFlfSU5UUFRSX1QgOAorI2RlZmluZSBTSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTUFUSExJQiBtCisjZGVmaW5lIEhBVkVfU0lOIDEKKyNkZWZpbmUgSEFWRV9DT1MgMQorI2RlZmluZSBIQVZFX1RBTiAxCisjZGVmaW5lIEhBVkVfU0lOSCAxCisjZGVmaW5lIEhBVkVfQ09TSCAxCisjZGVmaW5lIEhBVkVfVEFOSCAxCisjZGVmaW5lIEhBVkVfRkFCUyAxCisjZGVmaW5lIEhBVkVfRkxPT1IgMQorI2RlZmluZSBIQVZFX0NFSUwgMQorI2RlZmluZSBIQVZFX1NRUlQgMQorI2RlZmluZSBIQVZFX0xPRzEwIDEKKyNkZWZpbmUgSEFWRV9MT0cgMQorI2RlZmluZSBIQVZFX0VYUCAxCisjZGVmaW5lIEhBVkVfQVNJTiAxCisjZGVmaW5lIEhBVkVfQUNPUyAxCisjZGVmaW5lIEhBVkVfQVRBTiAxCisjZGVmaW5lIEhBVkVfRk1PRCAxCisjZGVmaW5lIEhBVkVfTU9ERiAxCisjZGVmaW5lIEhBVkVfRlJFWFAgMQorI2RlZmluZSBIQVZFX0xERVhQIDEKKyNkZWZpbmUgSEFWRV9SSU5UIDEKKyNkZWZpbmUgSEFWRV9UUlVOQyAxCisjZGVmaW5lIEhBVkVfRVhQMiAxCisjZGVmaW5lIEhBVkVfTE9HMiAxCisjZGVmaW5lIEhBVkVfQVRBTjIgMQorI2RlZmluZSBIQVZFX1BPVyAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSIDEKKyNkZWZpbmUgSEFWRV9TSU5GIDEKKyNkZWZpbmUgSEFWRV9DT1NGIDEKKyNkZWZpbmUgSEFWRV9UQU5GIDEKKyNkZWZpbmUgSEFWRV9TSU5IRiAxCisjZGVmaW5lIEhBVkVfQ09TSEYgMQorI2RlZmluZSBIQVZFX1RBTkhGIDEKKyNkZWZpbmUgSEFWRV9GQUJTRiAxCisjZGVmaW5lIEhBVkVfRkxPT1JGIDEKKyNkZWZpbmUgSEFWRV9DRUlMRiAxCisjZGVmaW5lIEhBVkVfUklOVEYgMQorI2RlZmluZSBIQVZFX1RSVU5DRiAxCisjZGVmaW5lIEhBVkVfU1FSVEYgMQorI2RlZmluZSBIQVZFX0xPRzEwRiAxCisjZGVmaW5lIEhBVkVfTE9HRiAxCisjZGVmaW5lIEhBVkVfTE9HMVBGIDEKKyNkZWZpbmUgSEFWRV9FWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUYgMQorI2RlZmluZSBIQVZFX0FTSU5GIDEKKyNkZWZpbmUgSEFWRV9BQ09TRiAxCisjZGVmaW5lIEhBVkVfQVRBTkYgMQorI2RlZmluZSBIQVZFX0FTSU5IRiAxCisjZGVmaW5lIEhBVkVfQUNPU0hGIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEYgMQorI2RlZmluZSBIQVZFX0hZUE9URiAxCisjZGVmaW5lIEhBVkVfQVRBTjJGIDEKKyNkZWZpbmUgSEFWRV9QT1dGIDEKKyNkZWZpbmUgSEFWRV9GTU9ERiAxCisjZGVmaW5lIEhBVkVfTU9ERkYgMQorI2RlZmluZSBIQVZFX0ZSRVhQRiAxCisjZGVmaW5lIEhBVkVfTERFWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFAyRiAxCisjZGVmaW5lIEhBVkVfTE9HMkYgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdORiAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSRiAxCisjZGVmaW5lIEhBVkVfU0lOTCAxCisjZGVmaW5lIEhBVkVfQ09TTCAxCisjZGVmaW5lIEhBVkVfVEFOTCAxCisjZGVmaW5lIEhBVkVfU0lOSEwgMQorI2RlZmluZSBIQVZFX0NPU0hMIDEKKyNkZWZpbmUgSEFWRV9UQU5ITCAxCisjZGVmaW5lIEhBVkVfRkFCU0wgMQorI2RlZmluZSBIQVZFX0ZMT09STCAxCisjZGVmaW5lIEhBVkVfQ0VJTEwgMQorI2RlZmluZSBIQVZFX1JJTlRMIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0wgMQorI2RlZmluZSBIQVZFX1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEwgMQorI2RlZmluZSBIQVZFX0xPR0wgMQorI2RlZmluZSBIQVZFX0xPRzFQTCAxCisjZGVmaW5lIEhBVkVfRVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQTTFMIDEKKyNkZWZpbmUgSEFWRV9BU0lOTCAxCisjZGVmaW5lIEhBVkVfQUNPU0wgMQorI2RlZmluZSBIQVZFX0FUQU5MIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEwgMQorI2RlZmluZSBIQVZFX0FDT1NITCAxCisjZGVmaW5lIEhBVkVfQVRBTkhMIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEwgMQorI2RlZmluZSBIQVZFX0FUQU4yTCAxCisjZGVmaW5lIEhBVkVfUE9XTCAxCisjZGVmaW5lIEhBVkVfRk1PREwgMQorI2RlZmluZSBIQVZFX01PREZMIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEwgMQorI2RlZmluZSBIQVZFX0xERVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQMkwgMQorI2RlZmluZSBIQVZFX0xPRzJMIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkwgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkwgMQorI2RlZmluZSBIQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBIQVZFX0NPTVBMRVhfSCAxCisjZGVmaW5lIEhBVkVfQ1JFQUwgMQorI2RlZmluZSBIQVZFX0NJTUFHIDEKKyNkZWZpbmUgSEFWRV9DQUJTIDEKKyNkZWZpbmUgSEFWRV9DQVJHIDEKKyNkZWZpbmUgSEFWRV9DRVhQIDEKKyNkZWZpbmUgSEFWRV9DU1FSVCAxCisjZGVmaW5lIEhBVkVfQ0xPRyAxCisjZGVmaW5lIEhBVkVfQ0NPUyAxCisjZGVmaW5lIEhBVkVfQ1NJTiAxCisjZGVmaW5lIEhBVkVfQ1BPVyAxCisjZGVmaW5lIEhBVkVfQ1JFQUxGIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0YgMQorI2RlZmluZSBIQVZFX0NBQlNGIDEKKyNkZWZpbmUgSEFWRV9DQVJHRiAxCisjZGVmaW5lIEhBVkVfQ0VYUEYgMQorI2RlZmluZSBIQVZFX0NTUVJURiAxCisjZGVmaW5lIEhBVkVfQ0xPR0YgMQorI2RlZmluZSBIQVZFX0NDT1NGIDEKKyNkZWZpbmUgSEFWRV9DU0lORiAxCisjZGVmaW5lIEhBVkVfQ1BPV0YgMQorI2RlZmluZSBIQVZFX0NSRUFMTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUdMIDEKKyNkZWZpbmUgSEFWRV9DQUJTTCAxCisjZGVmaW5lIEhBVkVfQ0FSR0wgMQorI2RlZmluZSBIQVZFX0NFWFBMIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEwgMQorI2RlZmluZSBIQVZFX0NMT0dMIDEKKyNkZWZpbmUgSEFWRV9DQ09TTCAxCisjZGVmaW5lIEhBVkVfQ1NJTkwgMQorI2RlZmluZSBIQVZFX0NQT1dMIDEKKyNkZWZpbmUgSEFWRV9MRE9VQkxFX0lFRUVfUVVBRF9MRSAxCisjaWZuZGVmIF9fY3BsdXNwbHVzCisvKiAjdW5kZWYgaW5saW5lICovCisjZW5kaWYKKworI2lmbmRlZiBfTlBZX05QWV9DT05GSUdfSF8KKyNlcnJvciBjb25maWcuaCBzaG91bGQgbmV2ZXIgYmUgaW5jbHVkZWQgZGlyZWN0bHksIGluY2x1ZGUgbnB5X2NvbmZpZy5oIGluc3RlYWQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYtNjQvX251bXB5Y29uZmlnLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni02NC9fbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTU3YWMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYtNjQvX251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwzMCBAQAorI2RlZmluZSBOUFlfSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgU0laRU9GX1NIT1JUCisjZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIFNJWkVPRl9JTlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIFNJWkVPRl9MT05HCisjZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRkxPQVQgOAorI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9ET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9MT05HRE9VQkxFIDMyCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgOAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOAorI2RlZmluZSBOUFlfTk9fU01QIDAKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU05BTgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTSU5GCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNGSU5JVEUKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIE5QWV9VU0VfQzk5X0NPTVBMRVggMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRkxPQVQgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0xPTkdfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX1VTRV9DOTlfRk9STUFUUyAxCisjZGVmaW5lIE5QWV9WSVNJQklMSVRZX0hJRERFTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCisjZGVmaW5lIE5QWV9BQklfVkVSU0lPTiAweDAxMDAwMDA5CisjZGVmaW5lIE5QWV9BUElfVkVSU0lPTiAweDAwMDAwMDA3CisKKyNpZm5kZWYgX19TVERDX0ZPUk1BVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0ZPUk1BVF9NQUNST1MgMQorI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni02NC9jb25maWcuaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2LTY0L2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZTYzYjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni02NC9jb25maWcuaApAQCAtMCwwICsxLDEzOSBAQAorI2RlZmluZSBIQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgU0laRU9GX1BZX0lOVFBUUl9UIDgKKyNkZWZpbmUgU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE1BVEhMSUIgbQorI2RlZmluZSBIQVZFX1NJTiAxCisjZGVmaW5lIEhBVkVfQ09TIDEKKyNkZWZpbmUgSEFWRV9UQU4gMQorI2RlZmluZSBIQVZFX1NJTkggMQorI2RlZmluZSBIQVZFX0NPU0ggMQorI2RlZmluZSBIQVZFX1RBTkggMQorI2RlZmluZSBIQVZFX0ZBQlMgMQorI2RlZmluZSBIQVZFX0ZMT09SIDEKKyNkZWZpbmUgSEFWRV9DRUlMIDEKKyNkZWZpbmUgSEFWRV9TUVJUIDEKKyNkZWZpbmUgSEFWRV9MT0cxMCAxCisjZGVmaW5lIEhBVkVfTE9HIDEKKyNkZWZpbmUgSEFWRV9FWFAgMQorI2RlZmluZSBIQVZFX0FTSU4gMQorI2RlZmluZSBIQVZFX0FDT1MgMQorI2RlZmluZSBIQVZFX0FUQU4gMQorI2RlZmluZSBIQVZFX0ZNT0QgMQorI2RlZmluZSBIQVZFX01PREYgMQorI2RlZmluZSBIQVZFX0ZSRVhQIDEKKyNkZWZpbmUgSEFWRV9MREVYUCAxCisjZGVmaW5lIEhBVkVfUklOVCAxCisjZGVmaW5lIEhBVkVfVFJVTkMgMQorI2RlZmluZSBIQVZFX0VYUDIgMQorI2RlZmluZSBIQVZFX0xPRzIgMQorI2RlZmluZSBIQVZFX0FUQU4yIDEKKyNkZWZpbmUgSEFWRV9QT1cgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUiAxCisjZGVmaW5lIEhBVkVfU0lORiAxCisjZGVmaW5lIEhBVkVfQ09TRiAxCisjZGVmaW5lIEhBVkVfVEFORiAxCisjZGVmaW5lIEhBVkVfU0lOSEYgMQorI2RlZmluZSBIQVZFX0NPU0hGIDEKKyNkZWZpbmUgSEFWRV9UQU5IRiAxCisjZGVmaW5lIEhBVkVfRkFCU0YgMQorI2RlZmluZSBIQVZFX0ZMT09SRiAxCisjZGVmaW5lIEhBVkVfQ0VJTEYgMQorI2RlZmluZSBIQVZFX1JJTlRGIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0YgMQorI2RlZmluZSBIQVZFX1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEYgMQorI2RlZmluZSBIQVZFX0xPR0YgMQorI2RlZmluZSBIQVZFX0xPRzFQRiAxCisjZGVmaW5lIEhBVkVfRVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQTTFGIDEKKyNkZWZpbmUgSEFWRV9BU0lORiAxCisjZGVmaW5lIEhBVkVfQUNPU0YgMQorI2RlZmluZSBIQVZFX0FUQU5GIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEYgMQorI2RlZmluZSBIQVZFX0FDT1NIRiAxCisjZGVmaW5lIEhBVkVfQVRBTkhGIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEYgMQorI2RlZmluZSBIQVZFX0FUQU4yRiAxCisjZGVmaW5lIEhBVkVfUE9XRiAxCisjZGVmaW5lIEhBVkVfRk1PREYgMQorI2RlZmluZSBIQVZFX01PREZGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEYgMQorI2RlZmluZSBIQVZFX0xERVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQMkYgMQorI2RlZmluZSBIQVZFX0xPRzJGIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkYgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkYgMQorI2RlZmluZSBIQVZFX1NJTkwgMQorI2RlZmluZSBIQVZFX0NPU0wgMQorI2RlZmluZSBIQVZFX1RBTkwgMQorI2RlZmluZSBIQVZFX1NJTkhMIDEKKyNkZWZpbmUgSEFWRV9DT1NITCAxCisjZGVmaW5lIEhBVkVfVEFOSEwgMQorI2RlZmluZSBIQVZFX0ZBQlNMIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkwgMQorI2RlZmluZSBIQVZFX0NFSUxMIDEKKyNkZWZpbmUgSEFWRV9SSU5UTCAxCisjZGVmaW5lIEhBVkVfVFJVTkNMIDEKKyNkZWZpbmUgSEFWRV9TUVJUTCAxCisjZGVmaW5lIEhBVkVfTE9HMTBMIDEKKyNkZWZpbmUgSEFWRV9MT0dMIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEwgMQorI2RlZmluZSBIQVZFX0VYUEwgMQorI2RlZmluZSBIQVZFX0VYUE0xTCAxCisjZGVmaW5lIEhBVkVfQVNJTkwgMQorI2RlZmluZSBIQVZFX0FDT1NMIDEKKyNkZWZpbmUgSEFWRV9BVEFOTCAxCisjZGVmaW5lIEhBVkVfQVNJTkhMIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEwgMQorI2RlZmluZSBIQVZFX0FUQU5ITCAxCisjZGVmaW5lIEhBVkVfSFlQT1RMIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkwgMQorI2RlZmluZSBIQVZFX1BPV0wgMQorI2RlZmluZSBIQVZFX0ZNT0RMIDEKKyNkZWZpbmUgSEFWRV9NT0RGTCAxCisjZGVmaW5lIEhBVkVfRlJFWFBMIDEKKyNkZWZpbmUgSEFWRV9MREVYUEwgMQorI2RlZmluZSBIQVZFX0VYUDJMIDEKKyNkZWZpbmUgSEFWRV9MT0cyTCAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05MIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJMIDEKKyNkZWZpbmUgSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgSEFWRV9DT01QTEVYX0ggMQorI2RlZmluZSBIQVZFX0NSRUFMIDEKKyNkZWZpbmUgSEFWRV9DSU1BRyAxCisjZGVmaW5lIEhBVkVfQ0FCUyAxCisjZGVmaW5lIEhBVkVfQ0FSRyAxCisjZGVmaW5lIEhBVkVfQ0VYUCAxCisjZGVmaW5lIEhBVkVfQ1NRUlQgMQorI2RlZmluZSBIQVZFX0NMT0cgMQorI2RlZmluZSBIQVZFX0NDT1MgMQorI2RlZmluZSBIQVZFX0NTSU4gMQorI2RlZmluZSBIQVZFX0NQT1cgMQorI2RlZmluZSBIQVZFX0NSRUFMRiAxCisjZGVmaW5lIEhBVkVfQ0lNQUdGIDEKKyNkZWZpbmUgSEFWRV9DQUJTRiAxCisjZGVmaW5lIEhBVkVfQ0FSR0YgMQorI2RlZmluZSBIQVZFX0NFWFBGIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEYgMQorI2RlZmluZSBIQVZFX0NMT0dGIDEKKyNkZWZpbmUgSEFWRV9DQ09TRiAxCisjZGVmaW5lIEhBVkVfQ1NJTkYgMQorI2RlZmluZSBIQVZFX0NQT1dGIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEwgMQorI2RlZmluZSBIQVZFX0NJTUFHTCAxCisjZGVmaW5lIEhBVkVfQ0FCU0wgMQorI2RlZmluZSBIQVZFX0NBUkdMIDEKKyNkZWZpbmUgSEFWRV9DRVhQTCAxCisjZGVmaW5lIEhBVkVfQ1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9DTE9HTCAxCisjZGVmaW5lIEhBVkVfQ0NPU0wgMQorI2RlZmluZSBIQVZFX0NTSU5MIDEKKyNkZWZpbmUgSEFWRV9DUE9XTCAxCisjZGVmaW5lIEhBVkVfTERPVUJMRV9JTlRFTF9FWFRFTkRFRF8xNl9CWVRFU19MRSAxCisjaWZuZGVmIF9fY3BsdXNwbHVzCisvKiAjdW5kZWYgaW5saW5lICovCisjZW5kaWYKKworI2lmbmRlZiBfTlBZX05QWV9DT05GSUdfSF8KKyNlcnJvciBjb25maWcuaCBzaG91bGQgbmV2ZXIgYmUgaW5jbHVkZWQgZGlyZWN0bHksIGluY2x1ZGUgbnB5X2NvbmZpZy5oIGluc3RlYWQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYvY29uZmlnLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGU0MWUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYvY29uZmlnLmgKQEAgLTAsMCArMSwxMDggQEAKKyNkZWZpbmUgU0laRU9GX1BZX0lOVFBUUl9UIDQKKyNkZWZpbmUgU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE1BVEhMSUIgbQorI2RlZmluZSBIQVZFX1NJTgorI2RlZmluZSBIQVZFX0NPUworI2RlZmluZSBIQVZFX1RBTgorI2RlZmluZSBIQVZFX1NJTkgKKyNkZWZpbmUgSEFWRV9DT1NICisjZGVmaW5lIEhBVkVfVEFOSAorI2RlZmluZSBIQVZFX0ZBQlMKKyNkZWZpbmUgSEFWRV9GTE9PUgorI2RlZmluZSBIQVZFX0NFSUwKKyNkZWZpbmUgSEFWRV9TUVJUCisjZGVmaW5lIEhBVkVfTE9HMTAKKyNkZWZpbmUgSEFWRV9MT0cKKyNkZWZpbmUgSEFWRV9FWFAKKyNkZWZpbmUgSEFWRV9BU0lOCisjZGVmaW5lIEhBVkVfQUNPUworI2RlZmluZSBIQVZFX0FUQU4KKyNkZWZpbmUgSEFWRV9GTU9ECisjZGVmaW5lIEhBVkVfTU9ERgorI2RlZmluZSBIQVZFX0ZSRVhQCisjZGVmaW5lIEhBVkVfTERFWFAKKyNkZWZpbmUgSEFWRV9SSU5UCisjZGVmaW5lIEhBVkVfVFJVTkMKKyNkZWZpbmUgSEFWRV9FWFAyCisjZGVmaW5lIEhBVkVfTE9HMgorI2RlZmluZSBIQVZFX0FUQU4yCisjZGVmaW5lIEhBVkVfUE9XCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSCisjZGVmaW5lIEhBVkVfU0lORgorI2RlZmluZSBIQVZFX0NPU0YKKyNkZWZpbmUgSEFWRV9UQU5GCisjZGVmaW5lIEhBVkVfU0lOSEYKKyNkZWZpbmUgSEFWRV9DT1NIRgorI2RlZmluZSBIQVZFX1RBTkhGCisjZGVmaW5lIEhBVkVfRkFCU0YKKyNkZWZpbmUgSEFWRV9GTE9PUkYKKyNkZWZpbmUgSEFWRV9DRUlMRgorI2RlZmluZSBIQVZFX1JJTlRGCisjZGVmaW5lIEhBVkVfVFJVTkNGCisjZGVmaW5lIEhBVkVfU1FSVEYKKyNkZWZpbmUgSEFWRV9MT0cxMEYKKyNkZWZpbmUgSEFWRV9MT0dGCisjZGVmaW5lIEhBVkVfTE9HMVBGCisjZGVmaW5lIEhBVkVfRVhQRgorI2RlZmluZSBIQVZFX0VYUE0xRgorI2RlZmluZSBIQVZFX0FTSU5GCisjZGVmaW5lIEhBVkVfQUNPU0YKKyNkZWZpbmUgSEFWRV9BVEFORgorI2RlZmluZSBIQVZFX0FTSU5IRgorI2RlZmluZSBIQVZFX0FDT1NIRgorI2RlZmluZSBIQVZFX0FUQU5IRgorI2RlZmluZSBIQVZFX0hZUE9URgorI2RlZmluZSBIQVZFX0FUQU4yRgorI2RlZmluZSBIQVZFX1BPV0YKKyNkZWZpbmUgSEFWRV9GTU9ERgorI2RlZmluZSBIQVZFX01PREZGCisjZGVmaW5lIEhBVkVfRlJFWFBGCisjZGVmaW5lIEhBVkVfTERFWFBGCisjZGVmaW5lIEhBVkVfRVhQMkYKKyNkZWZpbmUgSEFWRV9MT0cyRgorI2RlZmluZSBIQVZFX0NPUFlTSUdORgorI2RlZmluZSBIQVZFX05FWFRBRlRFUkYKKyNkZWZpbmUgSEFWRV9TSU5MCisjZGVmaW5lIEhBVkVfQ09TTAorI2RlZmluZSBIQVZFX1RBTkwKKyNkZWZpbmUgSEFWRV9TSU5ITAorI2RlZmluZSBIQVZFX0NPU0hMCisjZGVmaW5lIEhBVkVfVEFOSEwKKyNkZWZpbmUgSEFWRV9GQUJTTAorI2RlZmluZSBIQVZFX0ZMT09STAorI2RlZmluZSBIQVZFX0NFSUxMCisjZGVmaW5lIEhBVkVfUklOVEwKKyNkZWZpbmUgSEFWRV9UUlVOQ0wKKyNkZWZpbmUgSEFWRV9TUVJUTAorI2RlZmluZSBIQVZFX0xPRzEwTAorI2RlZmluZSBIQVZFX0xPR0wKKyNkZWZpbmUgSEFWRV9MT0cxUEwKKyNkZWZpbmUgSEFWRV9FWFBMCisjZGVmaW5lIEhBVkVfRVhQTTFMCisjZGVmaW5lIEhBVkVfQVNJTkwKKyNkZWZpbmUgSEFWRV9BQ09TTAorI2RlZmluZSBIQVZFX0FUQU5MCisjZGVmaW5lIEhBVkVfQVNJTkhMCisjZGVmaW5lIEhBVkVfQUNPU0hMCisjZGVmaW5lIEhBVkVfQVRBTkhMCisjZGVmaW5lIEhBVkVfSFlQT1RMCisjZGVmaW5lIEhBVkVfQVRBTjJMCisjZGVmaW5lIEhBVkVfUE9XTAorI2RlZmluZSBIQVZFX0ZNT0RMCisjZGVmaW5lIEhBVkVfTU9ERkwKKyNkZWZpbmUgSEFWRV9GUkVYUEwKKyNkZWZpbmUgSEFWRV9MREVYUEwKKyNkZWZpbmUgSEFWRV9FWFAyTAorI2RlZmluZSBIQVZFX0xPRzJMCisjZGVmaW5lIEhBVkVfQ09QWVNJR05MCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSTAorI2RlZmluZSBIQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBIQVZFX0NPTVBMRVhfSAorI2RlZmluZSBIQVZFX0xET1VCTEVfSU5URUxfRVhURU5ERURfMTJfQllURVNfTEUgMQorI2lmbmRlZiBfX2NwbHVzcGx1cworLyogI3VuZGVmIGlubGluZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX05QWV9OUFlfQ09ORklHX0hfCisjZXJyb3IgY29uZmlnLmggc2hvdWxkIG5ldmVyIGJlIGluY2x1ZGVkIGRpcmVjdGx5LCBpbmNsdWRlIG5weV9jb25maWcuaCBpbnN0ZWFkCisjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2L251bXB5Y29uZmlnLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni9udW1weWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNzkzOGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni9udW1weWNvbmZpZy5oCkBAIC0wLDAgKzEsMjQgQEAKKyNpZm5kZWYgX05QWV9OVU1QWUNPTkZJR19IXworI2RlZmluZSBfTlBZX05VTVBZQ09ORklHX0hfCisKKyNpbmNsdWRlICJfbnVtcHljb25maWcuaCIKKworLyogCisgKiBPbiBNYWMgT1MgWCwgYmVjYXVzZSB0aGVyZSBpcyBvbmx5IG9uZSBjb25maWd1cmF0aW9uIHN0YWdlIGZvciBhbGwgdGhlIGFyY2hzCisgKiBpbiB1bml2ZXJzYWwgYnVpbGRzLCBhbnkgbWFjcm8gd2hpY2ggZGVwZW5kcyBvbiB0aGUgYXJjaCBuZWVkcyB0byBiZQorICogaGFyY29kZWQKKyAqLworI2lmZGVmIF9fQVBQTEVfXworCSN1bmRlZiBOUFlfU0laRU9GX0xPTkcKKwkjdW5kZWYgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVAorCisJI2lmZGVmIF9fTFA2NF9fCisJCSNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIAkJOAorCQkjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgCTgKKwkjZWxzZQorCQkjZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyAJCTQKKwkJI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIAk0CisJI2VuZGlmCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5XzEuNy4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weV8xLjcuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWNkZmRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weV8xLjcuMC5iYgpAQCAtMCwwICsxLDk5IEBACitTVU1NQVJZID0gIkEgc29waGlzdGljYXRlZCBOdW1lcmljIFByb2Nlc3NpbmcgUGFja2FnZSBmb3IgUHl0aG9uIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIlBTRiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT1mODc4MzJkODU0YWNiYWRlNmU5ZjVjNjAxYzhiMzBiMSIKK1BSID0gInIxIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9udW1weS9udW1weS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbm8taG9zdC1wYXRocy5wYXRjaCBcCisgICAgICAgICAgICR7Q09ORklHRklMRVNVUkl9ICIKKworQ09ORklHRklMRVNVUkkgPz0gIiIKKworQ09ORklHRklMRVNVUklfYWFyY2g2NCA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX2FybSA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfYXJtZWIgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX21pcHNlbCA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfeDg2ID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV94ODYtNjQgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9taXBzID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfcG93ZXJwYyA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX3Bvd2VycGM2NCA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX21pcHM2NCA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX21pcHM2NG4zMiA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKKworUyA9ICIke1dPUktESVJ9L251bXB5LSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlscworCisjIE1ha2UgdGhlIGJ1aWxkIGZhaWwgYW5kIHJlcGxhY2UgKmNvbmZpZy5oIHdpdGggcHJvcGVyIG9uZQorIyBUaGlzIGlzIGEgdWdseSwgdWdseSBoYWNrIC0gS29lbgorZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLXRhcmdldCgpIHsKKyAgICBCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKyAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9weXRob24gc2V0dXAucHkgYnVpbGQgJHtESVNUVVRJTFNfQlVJTERfQVJHU30gfHwgXAorICAgIHRydWUKKyAgICBjcCAke1dPUktESVJ9Lypjb25maWcuaCAke1N9L2J1aWxkLyQobHMgJHtTfS9idWlsZCB8IGdyZXAgc3JjKS9udW1weS9jb3JlL2luY2x1ZGUvbnVtcHkvCit9CisKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vbnVtcHkvY29yZS9saWIvKi5hIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGZhNTRlNDBiNmEyNDM0MTZmMDI0ODEyM2I2ZWMzMzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjRmYTcwYjdlZGJhYjY1ZWU2NDMyZWI2Mzc0M2Y1NDg5ZjE5MTljNjE0NjMyYjIwYjJmYjQ1YWE3ZTY4MmFjNiIKKworIyBpbnN0YWxsIHdoYXQgaXMgbmVlZGVkIGZvciBudW1weS50ZXN0KCkKK1JERVBFTkRTXyR7UE59ID0gInB5dGhvbi11bml0dGVzdCBcCisgICAgICAgICAgICAgICAgICBweXRob24tZGlmZmxpYiBcCisgICAgICAgICAgICAgICAgICBweXRob24tcHByaW50IFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1waWNrbGUgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLXNoZWxsIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1ub3NlIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1kb2N0ZXN0IFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1kYXRldGltZSBcCisgICAgICAgICAgICAgICAgICBweXRob24tZGlzdHV0aWxzIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1taXNjIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1tbWFwIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1uZXRjbGllbnQgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLW51bWJlcnMgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLXB5ZG9jIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1wa2d1dGlsIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1lbWFpbCBcCisgICAgICAgICAgICAgICAgICBweXRob24tc3VicHJvY2VzcyBcCisgICAgICAgICAgICAgICAgICBweXRob24tY29tcHJlc3Npb24gXAorIgorCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBleHBlY3RfMy4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wZXhwZWN0XzMuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDgwYWViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wZXhwZWN0XzMuMy5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIkEgUHVyZSBQeXRob24gRXhwZWN0IGxpa2UgTW9kdWxlIGZvciBQeXRob24iCitIT01FUEFHRSA9ICJodHRwOi8vcGV4cGVjdC5yZWFkdGhlZG9jcy5vcmcvIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIklTQyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWMyNWQ5YTA3NzBiYTY5YTk5NjVhY2M4OTRlOWYzNjQ0IgorCitTUkNfVVJJID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9wL3BleHBlY3QvcGV4cGVjdC0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiMGRlNzI1NDFkM2YxMzc0Yjc5NTQ3MmZlZDg0MWRjZTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGZlYTYxOGQ0M2U4M2NmZmYyMTUwNGYxOGY5ODAxOWJhNTIwZjMzMGU0MTQyZTUxODVlZjdjNzM1MjdkZTViYSIKKworUyA9ICIke1dPUktESVJ9L3BleHBlY3QtJHtQVn0iCisKK2luaGVyaXQgZGlzdHV0aWxzCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgICBweXRob24tY29yZSBcCisgICAgcHl0aG9uLWlvIFwKKyAgICBweXRob24tdGVybWluYWwgXAorICAgIHB5dGhvbi1yZXNvdXJjZSBcCisgICAgcHl0aG9uLWZjbnRsIFwKKyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Y2Fpcm9fMS4xMC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWNhaXJvXzEuMTAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGZlMjVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWNhaXJvXzEuMTAuMC5iYgpAQCAtMCwwICsxLDQxIEBACitTVU1NQVJZID0gIlB5dGhvbiBiaW5kaW5ncyBmb3IgdGhlIENhaXJvIGNhbnZhcyBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL2NhaXJvZ3JhcGhpY3Mub3JnL3B5Y2Fpcm8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZyIKK1NFQ1RJT04gPSAicHl0aG9uLWRldmVsIgorTElDRU5TRSA9ICJMR1BMdjIuMSAmIE1QTC0xLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMmUwNzFhYjcyOTc4NDMxYjI5NGEwZDY5NjMyNzQyMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLUxHUEwtMi4xO21kNT1mYWQ5YjMzMzJiZTg5NGJhYjliYzUwMTU3Mjg2NGIyOSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLU1QTC0xLjE7bWQ1PWJmZTFmNzVkNjA2OTEyYTQxMTFjOTA3NDNkNmM3MzI1IgorCisjIGNhaXJvID49IDEuOC44CitERVBFTkRTID0gImNhaXJvIgorUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2NhaXJvZ3JhcGhpY3Mub3JnL3JlbGVhc2VzL3B5MmNhaXJvLSR7UFZ9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyMDMzNzEzMmM0YWIwNmMxMTQ2YWQzODRkNTUzNzJjNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkMzA0MzlmMDZjMmVjMWEzOWUyNzQ2NGM2YzgyOGI2ZWZhY2UzYjIyZWUxN2IyZGUwNWRjNDA5ZTQyOWE3NDMxIgorCitTID0gIiR7V09SS0RJUn0vcHkyY2Fpcm8tJHtQVn0iCisKK2luaGVyaXQgZGlzdHV0aWxzIHBrZ2NvbmZpZworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworZG9fY29uZmlndXJlKCkgeworCUJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gLi93YWYgY29uZmlndXJlIC0tcHJlZml4PSR7RH0ke3ByZWZpeH0gLS1saWJkaXI9JHtEfSR7bGliZGlyfQorfQorCitkb19jb21waWxlKCkgeworCS4vd2FmIGJ1aWxkICR7UEFSQUxMRUxfTUFLRX0KK30KKworZG9faW5zdGFsbCgpIHsKKwkuL3dhZiBpbnN0YWxsCisJc2VkIFwKKwkJLWUgJ3M6QHByZWZpeEA6JHtwcmVmaXh9OicgXAorCQktZSAnczpAVkVSU0lPTkA6JHtQVn06JyBcCisJCS1lICdzOkBpbmNsdWRlZGlyQDoke2luY2x1ZGVkaXJ9OicgXAorCQlweWNhaXJvLnBjLmluID4gcHljYWlyby5wYworCWluc3RhbGwgLW0gMDY0NCBweWNhaXJvLnBjICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnLworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWN1cmwvbm8tc3RhdGljLWxpbmsucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Y3VybC9uby1zdGF0aWMtbGluay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTM0OWVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWN1cmwvbm8tc3RhdGljLWxpbmsucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IExhdXJlbnRpdSBQYWxjdSA8bGF1cmVudGl1LnBhbGN1QGludGVsLmNvbT4KKworSW5kZXg6IHB5Y3VybC03LjE5LjMuMS9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHB5Y3VybC03LjE5LjMuMS5vcmlnL3NldHVwLnB5CTIwMTQtMDctMTYgMTI6NTc6MjQuMDY1MzQ2ODg3ICswMDAwCisrKysgcHljdXJsLTcuMTkuMy4xL3NldHVwLnB5CTIwMTQtMDctMTYgMTI6NTc6NTMuMDU3MzQ3Njc4ICswMDAwCitAQCAtMTQ3LDcgKzE0Nyw3IEBACisgICAgICAgICBvcHRidWYgPSAnJworICAgICAgICAgc3NsaGludGJ1ZiA9ICcnCisgICAgICAgICBlcnJ0ZXh0ID0gJycKKy0gICAgICAgIGZvciBvcHRpb24gaW4gWyItLWxpYnMiLCAiLS1zdGF0aWMtbGlicyJdOgorKyAgICAgICAgZm9yIG9wdGlvbiBpbiBbIi0tbGlicyJdOgorICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKChDVVJMX0NPTkZJRywgb3B0aW9uKSwKKyAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHAuY29tbXVuaWNhdGUoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWN1cmxfNy4xOS41LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Y3VybF83LjE5LjUuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDBlZmZlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWN1cmxfNy4xOS41LjEuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJQeXRob24gYmluZGluZ3MgZm9yIGxpYmN1cmwiCitIT01FUEFHRSA9ICJodHRwOi8vcHljdXJsLnNvdXJjZWZvcmdlLm5ldC8iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIHwgTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FLnJzdDtiZWdpbmxpbmU9MTY2O2VuZGxpbmU9MTgxO21kNT01N2U1YWIwYzBmOTY0NTMzZmM1OWQ5M2RlYzU2OTViYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLUxHUEw7bWQ1PTM1NzlhOWZkMDIyMWQ0OWEyMzdhYWEzMzQ5MmY5ODhjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkctTUlUO21kNT1lODIwMDk1NWM3NzNiMmEwZmQ2Y2VhMzZlYTVlODdiZSIKKworREVQRU5EUyA9ICJjdXJsIHB5dGhvbiIKK1JERVBFTkRTXyR7UE59ID0gInB5dGhvbi1jb3JlIGN1cmwiCitTUkNOQU1FID0gInB5Y3VybCIKKworU1JDX1VSSSA9ICJcCisgIGh0dHA6Ly8ke1NSQ05BTUV9LnNvdXJjZWZvcmdlLm5ldC9kb3dubG9hZC8ke1NSQ05BTUV9LSR7UFZ9LnRhci5nejtuYW1lPWFyY2hpdmUgXAorICBmaWxlOi8vbm8tc3RhdGljLWxpbmsucGF0Y2ggXAorIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJmNDRjZDU0MjU2ZDdhNjQzYWI3YjE2ZTNmNDA5YjI2YiIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjZlOTc3MGY4MDQ1OTc1N2Y3M2JkNzFhZjgyZmJiMjljZDM5OGIzODM4OGNkZjFiZWFiMzFlYTkxYTMzMWJjNmMiCitTID0gIiR7V09SS0RJUn0vJHtTUkNOQU1FfS0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMKKworIyBuZWVkIHRvIGV4cG9ydCB0aGVzZSB2YXJpYWJsZXMgZm9yIHB5dGhvbi1jb25maWcgdG8gd29yaworZXhwb3J0IEJVSUxEX1NZUworZXhwb3J0IEhPU1RfU1lTCitleHBvcnQgU1RBR0lOR19JTkNESVIKK2V4cG9ydCBTVEFHSU5HX0xJQkRJUgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworIyBFbnN1cmUgdGhlIGRvY3N0cmluZ3MgYXJlIGdlbmVyYXRlZCBhcyBtYWtlIGNsZWFuIHdpbGwgcmVtb3ZlIHRoZW0KK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKwkke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgZG9jc3RyaW5ncworfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlybSAtcmYgJHtEfSR7ZGF0YWRpcn0vc2hhcmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlnb2JqZWN0L29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlnb2JqZWN0L29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjU5MTEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWdvYmplY3Qvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTExMDFdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIHB5Z29iamVjdC0yLjI3LjkxL2NvbmZpZ3VyZS5hYyBweWdvYmplY3QtMi4yNy45MS9jb25maWd1cmUuYWMKKy0tLSBweWdvYmplY3QtMi4yNy45MS9jb25maWd1cmUuYWMJMjAxMS0wMi0yMyAyMjoxNDozNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBweWdvYmplY3QtMi4yNy45MS9jb25maWd1cmUuYWMJMjAxMy0wMS0wMyAwNToxMzo0NC4wMzQ5NDk5NTQgKzAyMDAKK0BAIC0zNSw3ICszNSw3IEBACisgQUNfREVGSU5FKFBZR09CSkVDVF9NSUNST19WRVJTSU9OLCBweWdvYmplY3RfbWljcm9fdmVyc2lvbiwgW3B5Z29iamVjdCBtaWNybyB2ZXJzaW9uXSkKKyBBQ19TVUJTVChQWUdPQkpFQ1RfTUlDUk9fVkVSU0lPTiwgcHlnb2JqZWN0X21pY3JvX3ZlcnNpb24pCisKKy1BTV9DT05GSUdfSEVBREVSKGNvbmZpZy5oKQorK0FDX0NPTkZJR19IRUFERVJTKGNvbmZpZy5oKQorIG00X2lmZGVmKFtBTV9TSUxFTlRfUlVMRVNdLCBbQU1fU0lMRU5UX1JVTEVTKHllcyldKQorIEFNX0lOSVRfQVVUT01BS0UoZm9yZWlnbikKKyBBTV9NQUlOVEFJTkVSX01PREUKK0BAIC04Miw3ICs4Miw2IEBACisgbTRfaWZkZWYoW0xUX09VVFBVVF0sIFtMVF9PVVRQVVRdKQorIEFDX0lTQ19QT1NJWAorIEFDX1BST0dfQ0MKKy1BTV9QUk9HX0NDX1NUREMKKyBBTV9QUk9HX0NDX0NfTworCisgIyBjaGVjayB0aGF0IHdlIGhhdmUgdGhlIG1pbmltdW0gdmVyc2lvbiBvZiBweXRob24gbmVjaXNhcnkgdG8gYnVpbGQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlnb2JqZWN0XzIuMjguMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlnb2JqZWN0XzIuMjguMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWQzN2I0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWdvYmplY3RfMi4yOC4zLmJiCkBAIC0wLDAgKzEsNTMgQEAKK1NVTU1BUlkgPSAiUHl0aG9uIEdPYmplY3QgYmluZGluZ3MiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCisKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIk5ld2VyIHZlcnNpb25zIG9mIHB5dGhvbi1weWdvYmplY3QgZGVwZW5kIG9uIGdvYmplY3QtaW50cm9zcGVjdGlvbiB3aGljaCBkb2Vzbid0IGNyb3NzLWNvbXBpbGUiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE5MTY0NjdiOTEwNzZlNjMxZGQ4ZWRiNzQyNDc2OWM3IgorREVQRU5EUyA9ICJweXRob24gcHl0aG9uLXB5Z29iamVjdC1uYXRpdmUgbGliZmZpIGdsaWItMi4wIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAicHl0aG9uLW5hdGl2ZSBsaWJmZmktbmF0aXZlIGdsaWItMi4wLW5hdGl2ZSIKK1JERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCisKK01BSl9WRVIgPSAiJHtAZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLicpWzBdfS4ke0BkLmdldFZhcignUFYnLDEpLnNwbGl0KCcuJylbMV19IgorCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS9weWdvYmplY3QvJHtNQUpfVkVSfS9weWdvYmplY3QtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggXAorIgorCisjIGxpYnRvb2wtbmF0aXZlIGRvZXNuJ3QgaGF2ZSBmaXhpbnN0YWxsLnBhdGNoIGFwcGxpZWQgd2hpY2ggbWVhbnMKKyMgdGhhdCBsaWJzIGdldCByZWxpbmtlZCBhdCBpbnN0YWxsYXRpb24gdGltZS4gVGhpcyB0cmlnZ2VycyBhIAorIyByZWxpbmtpbmcgYWxvbmcgdGhlIGxpbmVzIG9mOgorIyBnY2MgLUwvdG1wL2Zvby9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWIgLWxweWdsaWItMi4wLXB5dGhvbiAtbyAubGlicy9fZ2xpYi5zbworIyB3aGVyZSAvdG1wL2ZvbyBpcyBERVNURElSIGFuZCBweWdsaWItMi4wLXB5dGhvbiBtYXkgYmUgaW5zdGFsbGVkL3JlaW5zdGFsbGVkCisjIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIGdjYyBjb21tYW5kIHJ1bnMuCisjIElmIHRoaXMgaGFwcGVucyBiZXR3ZWVuIHRoZSBoYW5kb2ZmIGJldHdlZW4gZ2NjIGFuZCBsZCwgeW91IGNhbiBzZWU6CisjIC9iaW4vbGQ6IGNhbm5vdCBmaW5kIC1scHlnbGliLTIuMC1weXRob24KKyMgQWRkaW5nIGEgZGVwZW5kZW5jeSBydWxlIGxpa2UgIGluc3RhbGwtcHlnbGliTFRMSUJSQVJJRVM6IGluc3RhbGwtbGliTFRMSUJSQVJJRVMKKyMgd291bGQgYmUgaWRlYWwgYnV0IGF1dG9tYWtlIGNhbid0IGNvcGUgd2l0aCB0aGF0IHdpdGhvdXQgbWFudWFsbHkgCisjIGRlZmluaW5nIHRoZSB3aG9sZSBmdW5jdGlvbi4gR2l2ZSB1cCBhbmQgZGlzYWJsZSBwYXJhbGxlbCBtYWtlIGluIG5hdGl2ZSBidWlsZHMuCitQQVJBTExFTF9NQUtFSU5TVF9jbGFzcy1uYXRpdmUgPSAiIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYWE2NDkwMGIyNzRjNDY2MWE1YzMyZTUyOTIyOTc3ZjkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2RhODhjMTY5YTU2ZWZjY2M1MTZjZWJkOTIzN2RhM2ZlNTE4YTM0MzA5NWE2NjQ2MDdiMzY4ZmUyMWRmOTViNiIKK1MgPSAiJHtXT1JLRElSfS9weWdvYmplY3QtJHtQVn0iCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iCisKK2luaGVyaXQgYXV0b3Rvb2xzIGRpc3R1dGlscy1iYXNlIHBrZ2NvbmZpZworCisjIG5lY2Vzc2FyeSB0byBsZXQgdGhlIGNhbGwgZm9yIHB5dGhvbi1jb25maWcgc3VjY2VlZAorZXhwb3J0IEJVSUxEX1NZUworZXhwb3J0IEhPU1RfU1lTCitleHBvcnQgU1RBR0lOR19JTkNESVIKK2V4cG9ydCBTVEFHSU5HX0xJQkRJUgorCitQQUNLQUdFUyArPSAiJHtQTn0tbGliIgorCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uLXRleHR1dGlscyIKKworRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L3B5dGhvbioiCitGSUxFU18ke1BOfS1saWIgPSAiJHtsaWJkaXJ9L2xpYiouc28uKiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9ICR7ZGF0YWRpcn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9hY2luY2x1ZGUubTQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL2FjaW5jbHVkZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzUxOGZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9hY2luY2x1ZGUubTQKQEAgLTAsMCArMSw5MCBAQAorIyMgdGhpcyBvbmUgaXMgY29tbW9ubHkgdXNlZCB3aXRoIEFNX1BBVEhfUFlUSE9ORElSIC4uLgorZG5sIEFNX0NIRUNLX1BZTU9EKE1PRE5BTUUgWyxTWU1CT0wgWyxBQ1RJT04tSUYtRk9VTkQgWyxBQ1RJT04tSUYtTk9ULUZPVU5EXV1dKQorZG5sIENoZWNrIGlmIGEgbW9kdWxlIGNvbnRhaW5pbmcgYSBnaXZlbiBzeW1ib2wgaXMgdmlzaWJsZSB0byBweXRob24uCitBQ19ERUZVTihBTV9DSEVDS19QWU1PRCwKK1tBQ19SRVFVSVJFKFtBTV9QQVRIX1BZVEhPTl0pCitweV9tb2RfdmFyPWBlY2hvICQxWydfJ10kMiB8IHNlZCAneSUuLystJV9fcF8lJ2AKK0FDX01TR19DSEVDS0lORyhmb3IgaWZlbHNlKFskMl0sW10sLFskMiBpbiBdKXB5dGhvbiBtb2R1bGUgJDEpCitBQ19DQUNIRV9WQUwocHlfY3ZfbW9kXyRweV9tb2RfdmFyLCBbCitpZmVsc2UoWyQyXSxbXSwgW3Byb2c9IgoraW1wb3J0IHN5cwordHJ5OgorICAgICAgICBpbXBvcnQgJDEKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgc3lzLmV4aXQoMSkKK2V4Y2VwdDoKKyAgICAgICAgc3lzLmV4aXQoMCkKK3N5cy5leGl0KDApIl0sIFtwcm9nPSIKK2ltcG9ydCAkMQorJDEuJDIiXSkKK2lmICRQWVRIT04gLWMgIiRwcm9nIiAxPiZBQ19GRF9DQyAyPiZBQ19GRF9DQworICB0aGVuCisgICAgZXZhbCAicHlfY3ZfbW9kXyRweV9tb2RfdmFyPXllcyIKKyAgZWxzZQorICAgIGV2YWwgInB5X2N2X21vZF8kcHlfbW9kX3Zhcj1ubyIKKyAgZmkKK10pCitweV92YWw9YGV2YWwgImVjaG8gXGBlY2hvICckcHlfY3ZfbW9kXyckcHlfbW9kX3ZhclxgImAKK2lmIHRlc3QgIngkcHlfdmFsIiAhPSB4bm87IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgIGlmZWxzZShbJDNdLCBbXSwsIFskMworXSlkbmwKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKKyAgaWZlbHNlKFskNF0sIFtdLCwgWyQ0CitdKWRubAorZmkKK10pCisKK2RubCBhIG1hY3JvIHRvIGNoZWNrIGZvciBhYmlsaXR5IHRvIGNyZWF0ZSBweXRob24gZXh0ZW5zaW9ucworZG5sICBBTV9DSEVDS19QWVRIT05fSEVBREVSUyhbQUNUSU9OLUlGLVBPU1NJQkxFXSwgW0FDVElPTi1JRi1OT1QtUE9TU0lCTEVdKQorZG5sIGZ1bmN0aW9uIGFsc28gZGVmaW5lcyBQWVRIT05fSU5DTFVERVMKK0FDX0RFRlVOKFtBTV9DSEVDS19QWVRIT05fSEVBREVSU10sCitbQUNfUkVRVUlSRShbQU1fUEFUSF9QWVRIT05dKQorQUNfTVNHX0NIRUNLSU5HKGZvciBoZWFkZXJzIHJlcXVpcmVkIHRvIGNvbXBpbGUgcHl0aG9uIGV4dGVuc2lvbnMpCitkbmwgZGVkdWNlIFBZVEhPTl9JTkNMVURFUworQUNfQVJHX1dJVEgocHl0aG9uLWluY2x1ZGVzLAorCVsgIC0td2l0aC1weXRob24taW5jbHVkZXM9RElSICBwYXRoIHRvIFB5dGhvbiBpbmNsdWRlc10sIHB5X2V4ZWNfcHJlZml4PSR3aXRodmFsKQoraWYgdGVzdCB4JHB5X2V4ZWNfcHJlZml4ICE9IHg7IHRoZW4KK1BZVEhPTl9JTkNMVURFUz0iLUkke3B5X2V4ZWNfcHJlZml4fS9pbmNsdWRlL3B5dGhvbiR7UFlUSE9OX1ZFUlNJT059IgorZWxzZQorcHlfcHJlZml4PWAkUFlUSE9OIC1jICJpbXBvcnQgc3lzOyBwcmludCBzeXMucHJlZml4ImAKK3B5X2V4ZWNfcHJlZml4PWAkUFlUSE9OIC1jICJpbXBvcnQgc3lzOyBwcmludCBzeXMuZXhlY19wcmVmaXgiYAorUFlUSE9OX0lOQ0xVREVTPSItSSR7cHlfcHJlZml4fS9pbmNsdWRlL3B5dGhvbiR7UFlUSE9OX1ZFUlNJT059IgoraWYgdGVzdCAiJHB5X3ByZWZpeCIgIT0gIiRweV9leGVjX3ByZWZpeCI7IHRoZW4KKyAgUFlUSE9OX0lOQ0xVREVTPSIkUFlUSE9OX0lOQ0xVREVTIC1JJHtweV9leGVjX3ByZWZpeH0vaW5jbHVkZS9weXRob24ke1BZVEhPTl9WRVJTSU9OfSIKK2ZpCitmaQorQUNfU1VCU1QoUFlUSE9OX0lOQ0xVREVTKQorZG5sIGNoZWNrIGlmIHRoZSBoZWFkZXJzIGV4aXN0Ogorc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorQ1BQRkxBR1M9IiRDUFBGTEFHUyAkUFlUSE9OX0lOQ0xVREVTIgorQUNfVFJZX0NQUChbI2luY2x1ZGUgPFB5dGhvbi5oPl0sZG5sCitbQUNfTVNHX1JFU1VMVChmb3VuZCkKKyQxXSxkbmwKK1tBQ19NU0dfUkVTVUxUKG5vdCBmb3VuZCkKKyQyXSkKK0NQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKK10pCisKK2RubAorZG5sIEpIX0FERF9DRkxBRyhGTEFHKQorZG5sIGNoZWNrcyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSBnaXZlbiBmbGFnLCBhbmQgaWYgc28sIGFkZHMKK2RubCBpdCB0byAkQ0ZMQUdTLiAgSWYgdGhlIGZsYWcgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBsaXN0LCB0aGVuIHRoZQorZG5sIGNoZWNrIGlzIG5vdCBwZXJmb3JtZWQuCitBQ19ERUZVTihbSkhfQUREX0NGTEFHXSwKK1sKK2Nhc2UgIiAkQ0ZMQUdTICIgaW4KKypAPDpAXAlcIEA6PkAkMUA8OkBcCVwgQDo+QCopCisgIDs7CisqKQorICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgQ0ZMQUdTPSIkQ0ZMQUdTICQxIgorICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgWyRdQ0MgdW5kZXJzdGFuZHMgJDFdKQorICBBQ19UUllfQ09NUElMRShbXSwgW10sIFtqaF9oYXNfb3B0aW9uPXllc10sIFtqaF9oYXNfb3B0aW9uPW5vXSkKKyAgQUNfTVNHX1JFU1VMVCgkamhfaGFzX29wdGlvbikKKyAgaWYgdGVzdCAkamhfaGFzX29wdGlvbiA9IG5vOyB0aGVuCisgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisgIGZpCisgIDs7Citlc2FjXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvYWRkLWd0ay10eXBlcy5kZWZzLWludG8tZ2RrLmMtZGVwZW5kZW5jZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvYWRkLWd0ay10eXBlcy5kZWZzLWludG8tZ2RrLmMtZGVwZW5kZW5jZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjBmOWNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9hZGQtZ3RrLXR5cGVzLmRlZnMtaW50by1nZGsuYy1kZXBlbmRlbmNlLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK2FkZCBndGstdHlwZXMuZGVmcyBpbnRvIGdkay5jIGRlcGVuZGVuY2UKKworZ2RrLmMgZGVwZW5kcyBvbiBndGstdHlwZXMuZGVmcyBidXQKK2dkay9NYWtlZmlsZS5hbSBtaXNzIHRoaXMuIFRoaXMgd2lsbCBjYXVzZQorYnVpbGQgZXJyb3Igc29tZXRpbWVzIHdoZW4gYnVpbHQKK3dpdGggbXVsdGktam9iYmluZywgc28gYWRkIGd0ay10eXBlcy5kZWZzIGludG8KK2dkay5jIGRlcGVuZGVuY2UuCisKK1NpZ25lZC1vZmYtYnk6IFNvbmcuTGkgPFNvbmcuTGlAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBndGsvTWFrZWZpbGUuYW0gfCAgICAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ndGsvTWFrZWZpbGUuYW0gYi9ndGsvTWFrZWZpbGUuYW0KK2luZGV4IDdiYjVkMGMuLjRhODgzNTEgMTAwNjQ0CistLS0gYS9ndGsvTWFrZWZpbGUuYW0KKysrKyBiL2d0ay9NYWtlZmlsZS5hbQorQEAgLTIxNCw3ICsyMTQsNyBAQCBndGt1bml4cHJpbnQuZGVmczogJChHVEtVTklYUFJJTlRfREVGUykgTWFrZWZpbGUKKyBndGt1bml4cHJpbnQtdHlwZXMuZGVmczogJChHVEtVTklYUFJJTlRfVFlQRVNfREVGUykgTWFrZWZpbGUKKyAJJChDUkVBVEVERUZTKSAkQCAkKEdUS1VOSVhQUklOVF9UWVBFU19ERUZTKQorIAorLWdkay5jOiBnZGstdHlwZXMuZGVmcyBnZGsuZGVmcyAkKEdES19PVkVSUklERVMpCisrZ2RrLmM6IGdkay10eXBlcy5kZWZzIGd0ay10eXBlcy5kZWZzIGdkay5kZWZzICQoR0RLX09WRVJSSURFUykKKyBndGsuYzogZ2RrLXR5cGVzLmRlZnMgZ3RrLXR5cGVzLmRlZnMgZ3RrLmRlZnMgZ2RrLXR5cGVzLmRlZnMgJChHVEtfT1ZFUlJJREVTKQorIF9ndGtfbGFfQ0ZMQUdTID0gJChQWUNBSVJPX0NGTEFHUykgJChHVEtfQ0ZMQUdTKQorIF9ndGtfbGFfTERGTEFHUyA9ICQoY29tbW9uX2xkZmxhZ3MpIC1leHBvcnQtc3ltYm9scy1yZWdleCBpbml0X2d0aworLS0gCisxLjcuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL2ZpeC1ndGt1bml4cHJpbnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL2ZpeC1ndGt1bml4cHJpbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZjMGU4ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvZml4LWd0a3VuaXhwcmludC5wYXRjaApAQCAtMCwwICsxLDIwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IHB5Z3RrLTIuMjQuMC9ndGsvZ3RrdW5peHByaW50Lm92ZXJyaWRlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcHlndGstMi4yNC4wLm9yaWcvZ3RrL2d0a3VuaXhwcmludC5vdmVycmlkZQorKysrIHB5Z3RrLTIuMjQuMC9ndGsvZ3RrdW5peHByaW50Lm92ZXJyaWRlCitAQCAtMTAyLDExICsxMDIsNiBAQCBfd3JhcF9ndGtfcHJpbnRfam9iX2dldF9zdXJmYWNlKFB5R09iamVjCisgICAgIGlmIChweWdfZXJyb3JfY2hlY2soJmVycm9yKSkKKyAgICAgICAgIHJldHVybiBOVUxMOworIAorLSNpZiBQWUNBSVJPX1ZFUlNJT05fSEVYID49IDB4MTAxMDYwMAorLSAgICByZXR1cm4gUHljYWlyb1N1cmZhY2VfRnJvbVN1cmZhY2UoY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2Uoc3VyZmFjZSksIE5VTEwpOworLSNlbHNlCistICAgIHJldHVybiBQeWNhaXJvU3VyZmFjZV9Gcm9tU3VyZmFjZShjYWlyb19zdXJmYWNlX3JlZmVyZW5jZShzdXJmYWNlKSwgTlVMTCwgTlVMTCk7CistI2VuZGlmCisgfQorICUlCisgb3ZlcnJpZGUgZ3RrX3ByaW50X2pvYl9zZW5kIGt3YXJncwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9maXgtcHlndGstMi4wLnBjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9maXgtcHlndGstMi4wLnBjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MTU2NTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL2ZpeC1weWd0ay0yLjAucGMucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogcHlndGstMi4yNC4wL3B5Z3RrLTIuMC5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHB5Z3RrLTIuMjQuMC5vcmlnL3B5Z3RrLTIuMC5wYy5pbgorKysrIHB5Z3RrLTIuMjQuMC9weWd0ay0yLjAucGMuaW4KK0BAIC0xLDUgKzEsNiBAQAorIHByZWZpeD1AcHJlZml4QAorIGV4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKyBpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorIGRhdGFyb290ZGlyPUBkYXRhcm9vdGRpckAKKyBkYXRhZGlyPUBkYXRhZGlyQApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9ub2RvY3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL25vZG9jcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDczMDlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9ub2RvY3MucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogcHlndGstMi4xNy4wL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcHlndGstMi4xNy4wLm9yaWcvTWFrZWZpbGUuYW0KKysrKyBweWd0ay0yLjE3LjAvTWFrZWZpbGUuYW0KK0BAIC00LDcgKzQsNyBAQCBpZiBCVUlMRF9HVEsKKyAgIEdUS19TVUJESVIgPSBndGsKKyBlbmRpZgorIAorLVNVQkRJUlMgPSAuICQoR1RLX1NVQkRJUikgZXhhbXBsZXMgdGVzdHMgZG9jcworK1NVQkRJUlMgPSAuICQoR1RLX1NVQkRJUikgZXhhbXBsZXMgdGVzdHMKKyAKKyBQTEFURk9STV9WRVJTSU9OID0gMi4wCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL3ByZXZlbnRfdG9fZ2V0X2Rpc3BsYXlfZHVyaW5nX2ltcG9ydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvcHJldmVudF90b19nZXRfZGlzcGxheV9kdXJpbmdfaW1wb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMzAzOGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL3ByZXZlbnRfdG9fZ2V0X2Rpc3BsYXlfZHVyaW5nX2ltcG9ydC5wYXRjaApAQCAtMCwwICsxLDE2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHB5Z3RrLTIuMTAuNC9ndGsvX19pbml0X18ucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBweWd0ay0yLjEwLjQub3JpZy9ndGsvX19pbml0X18ucHkJMjAwNy0xMS0yNyAxOToyNzowNS4wMDAwMDAwMDAgLTAzMDAKKysrKyBweWd0ay0yLjEwLjQvZ3RrL19faW5pdF9fLnB5CTIwMDctMTEtMjcgMTk6Mjg6MjIuMDAwMDAwMDAwIC0wMzAwCitAQCAtNzgsNyArNzgsOCBAQAorIAorIGtleXN5bXMgPSBMYXp5TW9kdWxlKCdrZXlzeW1zJywgbG9jYWxzKCkpCisgCistX2luaXQoKQorK2lmIG5vdCBoYXNhdHRyKHN5cy5tb2R1bGVzWydfX21haW5fXyddLCAncHl0aG9uX2xhdW5jaGVyX2VuYWJsZWQnKToKKysgICAgX2luaXQoKQorIAorICMgQ0FQSQorIF9QeUd0a19BUEkgPSBfZ3RrLl9QeUd0a19BUEkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvcHl0aG9uLXB5Z3RrMi9hY2luY2x1ZGUubTQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL3B5dGhvbi1weWd0azIvYWNpbmNsdWRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNTE4ZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL3B5dGhvbi1weWd0azIvYWNpbmNsdWRlLm00CkBAIC0wLDAgKzEsOTAgQEAKKyMjIHRoaXMgb25lIGlzIGNvbW1vbmx5IHVzZWQgd2l0aCBBTV9QQVRIX1BZVEhPTkRJUiAuLi4KK2RubCBBTV9DSEVDS19QWU1PRChNT0ROQU1FIFssU1lNQk9MIFssQUNUSU9OLUlGLUZPVU5EIFssQUNUSU9OLUlGLU5PVC1GT1VORF1dXSkKK2RubCBDaGVjayBpZiBhIG1vZHVsZSBjb250YWluaW5nIGEgZ2l2ZW4gc3ltYm9sIGlzIHZpc2libGUgdG8gcHl0aG9uLgorQUNfREVGVU4oQU1fQ0hFQ0tfUFlNT0QsCitbQUNfUkVRVUlSRShbQU1fUEFUSF9QWVRIT05dKQorcHlfbW9kX3Zhcj1gZWNobyAkMVsnXyddJDIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIGlmZWxzZShbJDJdLFtdLCxbJDIgaW4gXSlweXRob24gbW9kdWxlICQxKQorQUNfQ0FDSEVfVkFMKHB5X2N2X21vZF8kcHlfbW9kX3ZhciwgWworaWZlbHNlKFskMl0sW10sIFtwcm9nPSIKK2ltcG9ydCBzeXMKK3RyeToKKyAgICAgICAgaW1wb3J0ICQxCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHN5cy5leGl0KDEpCitleGNlcHQ6CisgICAgICAgIHN5cy5leGl0KDApCitzeXMuZXhpdCgwKSJdLCBbcHJvZz0iCitpbXBvcnQgJDEKKyQxLiQyIl0pCitpZiAkUFlUSE9OIC1jICIkcHJvZyIgMT4mQUNfRkRfQ0MgMj4mQUNfRkRfQ0MKKyAgdGhlbgorICAgIGV2YWwgInB5X2N2X21vZF8kcHlfbW9kX3Zhcj15ZXMiCisgIGVsc2UKKyAgICBldmFsICJweV9jdl9tb2RfJHB5X21vZF92YXI9bm8iCisgIGZpCitdKQorcHlfdmFsPWBldmFsICJlY2hvIFxgZWNobyAnJHB5X2N2X21vZF8nJHB5X21vZF92YXJcYCJgCitpZiB0ZXN0ICJ4JHB5X3ZhbCIgIT0geG5vOyB0aGVuCisgIEFDX01TR19SRVNVTFQoeWVzKQorICBpZmVsc2UoWyQzXSwgW10sLCBbJDMKK10pZG5sCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCisgIGlmZWxzZShbJDRdLCBbXSwsIFskNAorXSlkbmwKK2ZpCitdKQorCitkbmwgYSBtYWNybyB0byBjaGVjayBmb3IgYWJpbGl0eSB0byBjcmVhdGUgcHl0aG9uIGV4dGVuc2lvbnMKK2RubCAgQU1fQ0hFQ0tfUFlUSE9OX0hFQURFUlMoW0FDVElPTi1JRi1QT1NTSUJMRV0sIFtBQ1RJT04tSUYtTk9ULVBPU1NJQkxFXSkKK2RubCBmdW5jdGlvbiBhbHNvIGRlZmluZXMgUFlUSE9OX0lOQ0xVREVTCitBQ19ERUZVTihbQU1fQ0hFQ0tfUFlUSE9OX0hFQURFUlNdLAorW0FDX1JFUVVJUkUoW0FNX1BBVEhfUFlUSE9OXSkKK0FDX01TR19DSEVDS0lORyhmb3IgaGVhZGVycyByZXF1aXJlZCB0byBjb21waWxlIHB5dGhvbiBleHRlbnNpb25zKQorZG5sIGRlZHVjZSBQWVRIT05fSU5DTFVERVMKK0FDX0FSR19XSVRIKHB5dGhvbi1pbmNsdWRlcywKKwlbICAtLXdpdGgtcHl0aG9uLWluY2x1ZGVzPURJUiAgcGF0aCB0byBQeXRob24gaW5jbHVkZXNdLCBweV9leGVjX3ByZWZpeD0kd2l0aHZhbCkKK2lmIHRlc3QgeCRweV9leGVjX3ByZWZpeCAhPSB4OyB0aGVuCitQWVRIT05fSU5DTFVERVM9Ii1JJHtweV9leGVjX3ByZWZpeH0vaW5jbHVkZS9weXRob24ke1BZVEhPTl9WRVJTSU9OfSIKK2Vsc2UKK3B5X3ByZWZpeD1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgcHJpbnQgc3lzLnByZWZpeCJgCitweV9leGVjX3ByZWZpeD1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgcHJpbnQgc3lzLmV4ZWNfcHJlZml4ImAKK1BZVEhPTl9JTkNMVURFUz0iLUkke3B5X3ByZWZpeH0vaW5jbHVkZS9weXRob24ke1BZVEhPTl9WRVJTSU9OfSIKK2lmIHRlc3QgIiRweV9wcmVmaXgiICE9ICIkcHlfZXhlY19wcmVmaXgiOyB0aGVuCisgIFBZVEhPTl9JTkNMVURFUz0iJFBZVEhPTl9JTkNMVURFUyAtSSR7cHlfZXhlY19wcmVmaXh9L2luY2x1ZGUvcHl0aG9uJHtQWVRIT05fVkVSU0lPTn0iCitmaQorZmkKK0FDX1NVQlNUKFBZVEhPTl9JTkNMVURFUykKK2RubCBjaGVjayBpZiB0aGUgaGVhZGVycyBleGlzdDoKK3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKK0NQUEZMQUdTPSIkQ1BQRkxBR1MgJFBZVEhPTl9JTkNMVURFUyIKK0FDX1RSWV9DUFAoWyNpbmNsdWRlIDxQeXRob24uaD5dLGRubAorW0FDX01TR19SRVNVTFQoZm91bmQpCiskMV0sZG5sCitbQUNfTVNHX1JFU1VMVChub3QgZm91bmQpCiskMl0pCitDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCitdKQorCitkbmwKK2RubCBKSF9BRERfQ0ZMQUcoRkxBRykKK2RubCBjaGVja3Mgd2hldGhlciB0aGUgQyBjb21waWxlciBzdXBwb3J0cyB0aGUgZ2l2ZW4gZmxhZywgYW5kIGlmIHNvLCBhZGRzCitkbmwgaXQgdG8gJENGTEFHUy4gIElmIHRoZSBmbGFnIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgbGlzdCwgdGhlbiB0aGUKK2RubCBjaGVjayBpcyBub3QgcGVyZm9ybWVkLgorQUNfREVGVU4oW0pIX0FERF9DRkxBR10sCitbCitjYXNlICIgJENGTEFHUyAiIGluCisqQDw6QFwJXCBAOj5AJDFAPDpAXAlcIEA6PkAqKQorICA7OworKikKKyAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgIENGTEFHUz0iJENGTEFHUyAkMSIKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIFskXUNDIHVuZGVyc3RhbmRzICQxXSkKKyAgQUNfVFJZX0NPTVBJTEUoW10sIFtdLCBbamhfaGFzX29wdGlvbj15ZXNdLCBbamhfaGFzX29wdGlvbj1ub10pCisgIEFDX01TR19SRVNVTFQoJGpoX2hhc19vcHRpb24pCisgIGlmIHRlc3QgJGpoX2hhc19vcHRpb24gPSBubzsgdGhlbgorICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorICBmaQorICA7OworZXNhY10pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL3VwZGF0ZS1kZXBlbmRlbmNlcy1vZi1kZWZzLmMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL3VwZGF0ZS1kZXBlbmRlbmNlcy1vZi1kZWZzLmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VkOTU0ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvdXBkYXRlLWRlcGVuZGVuY2VzLW9mLWRlZnMuYy5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIGRjMDI0ZTkwNzliYmZmYmI0NDQzNmJhM2U3MGE3NThlYmFkNTUyMGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiU29uZy5MaSIgPFNvbmcuTGlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFNhdCwgNSBKYW4gMjAxMyAxNDo1NTo1OSArMDgwMAorU3ViamVjdDogW1BBVENIXSB1cGRhdGUgZGVwZW5kZW5jZXMgb2YgZGVmcy5jIGluIE1ha2VmaWxlLmFtCisKK0luIGd0ay9NYWtlZmlsZS5hbSwgZGVmcy5jIHNob3VsZCBkZXBlbmRlcyBvbiBnZGstdHlwZXMuZGVmcyBhbmQKK2d0ay10eXBlcy5kZWZzLCBvdGhlcndpc2UgaXQgZmFpbHMgb2NjYXNpb25hbGx5IHdoZW4gcGFyYWxsZWwgY29tcGlsZS4KK1RoZSBlcnJvciBtZXNzYWdlOgorIklPRXJyb3I6IFtFcnJubyAyXSBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5OiAnZ3RrLXR5cGVzLmRlZnMnIgorCitBZGQgdGhlbSB0byBkZXBlbmRlbmNlcyBvZiBkZWZzLmMgdG8gZml4IHRoaXMgaXNzdWUuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAyNzA2CisKK1NpZ25lZC1vZmYtYnk6IFNvbmcuTGkgPFNvbmcuTGlAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorCistLS0KKyBndGsvTWFrZWZpbGUuYW0gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9ndGsvTWFrZWZpbGUuYW0gYi9ndGsvTWFrZWZpbGUuYW0KK2luZGV4IDdiYjVkMGMuLjkxODI2Y2IgMTAwNjQ0CistLS0gYS9ndGsvTWFrZWZpbGUuYW0KKysrKyBiL2d0ay9NYWtlZmlsZS5hbQorQEAgLTI4OSw3ICsyODksNyBAQCBpZiBIQVZFX0dJT19UWVBFU19ERUZTCisgZXh0cmFfY29kZWdlbl9hcmdzICs9IC0tcmVnaXN0ZXIgJChQWUdPQkpFQ1RfREVGU0RJUikvZ2lvLXR5cGVzLmRlZnMKKyBlbmRpZgorIAorLS5kZWZzLmM6IAorKy5kZWZzLmM6IGdkay10eXBlcy5kZWZzIGd0ay10eXBlcy5kZWZzCisgCSgkKFBZVEhPTikgJChDT0RFR0VORElSKS9jb2RlZ2VuLnB5IFwKKyAJICAgJChQWUdUS19DT0RFR0VOX0RFRklORVMpIFwKKyAJICAgIC1JICQoc3JjZGlyKSBcCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0a18yLjI0LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrXzIuMjQuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGMzM2E4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0a18yLjI0LjAuYmIKQEAgLTAsMCArMSw1MyBAQAorU1VNTUFSWSA9ICJQeXRob24gYmluZGluZ3MgZm9yIHRoZSBHVEsrIFVJIHRvb2xraXQiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKKyMgbmVlZHMgZ3RrKyAyLjE3LngKK0RFUEVORFMgPSAiZ3RrKyBsaWJnbGFkZSBweXRob24tcHljYWlybyBweXRob24tcHlnb2JqZWN0IgorUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uLXNoZWxsIHB5dGhvbi1weWNhaXJvIHB5dGhvbi1weWdvYmplY3QiCitQUk9WSURFUyA9ICJweXRob24tcHlndGsyIgorU1JDTkFNRSA9ICJweWd0ayIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hOTE2NDY3YjkxMDc2ZTYzMWRkOGVkYjc0MjQ3NjljNyIKKworUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmdub21lLm9yZy9wdWIvZ25vbWUvc291cmNlcy9weWd0ay8yLjI0LyR7U1JDTkFNRX0tJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtZ3RrLXR5cGVzLmRlZnMtaW50by1nZGsuYy1kZXBlbmRlbmNlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1ndGt1bml4cHJpbnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcHJldmVudF90b19nZXRfZGlzcGxheV9kdXJpbmdfaW1wb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25vZG9jcy5wYXRjaCBcCisJICAgZmlsZTovL2ZpeC1weWd0ay0yLjAucGMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWNpbmNsdWRlLm00IFwKKyAgICAgICAgICAgZmlsZTovL3VwZGF0ZS1kZXBlbmRlbmNlcy1vZi1kZWZzLmMucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhMTA1MWQ1Nzk0ZmQ3Njk2ZDNjMWFmNjQyMmQxN2E0OSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjZDFjMWVhMjY1YmQ2M2ZmNjY5ZTkyYTJkM2MyYTg4ZWIyNmJjZDllNTM2M2UwZjgyYzg5NmU2NDlmMjA2OTEyIgorCitTID0gIiR7V09SS0RJUn0vJHtTUkNOQU1FfS0ke1BWfSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1kb2NzIC0td2l0aC1weXRob24taW5jbHVkZXM9JHtTVEFHSU5HX0lOQ0RJUn0vLi4vIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHV0aWxzLWJhc2UKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vYWNpbmNsdWRlLm00ICR7U30vCisJc2VkIC1pIFwKKwkJLWUgczonYCRQS0dfQ09ORklHIC0tdmFyaWFibGUgZGVmc2RpciBweWdvYmplY3QtMi4wYCc6XCIke1NUQUdJTkdfREFUQURJUn0vcHlnb2JqZWN0LzIuMC9kZWZzXCI6ZyBcCisJCS1lIHM6J2AkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXB5Z3RraW5jbHVkZWRpciBweWdvYmplY3QtMi4wYCc6XCIke1NUQUdJTkdfSU5DRElSfS9weWd0ay0yLjBcIjpnIFwKKwkJLWUgczonYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9ZGF0YWRpciBweWdvYmplY3QtMi4wYCc6XCIke1NUQUdJTkdfREFUQURJUn1cIjpnIFwKKwkJLWUgczonYCRQS0dfQ09ORklHIC0tdmFyaWFibGUgY29kZWdlbmRpciBweWdvYmplY3QtMi4wYCc6XCIke1NUQUdJTkdfREFUQURJUn0vcHlnb2JqZWN0LzIuMC9jb2RlZ2VuXCI6ZyBcCisJCS1lIHM6J2AkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWZpeHhyZWYgcHlnb2JqZWN0LTIuMGAnOlwiJHtTVEFHSU5HX0RBVEFESVJ9L3B5Z29iamVjdC94c2wvZml4eHJlZi5weVwiOmcgXAorCQkke1N9L2NvbmZpZ3VyZS5hYworfQorCisjIGRpcnR5IGZpeCAjMjogZml4IGJ1aWxkIHN5c3RlbSBwYXRocyBsZWFraW5nIGluCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlzZWQgLWkgLWUgJzFzfF4jIS4qcHl0aG9ufCMhL3Vzci9iaW4vZW52IHB5dGhvbnwnICR7RH0ke2JpbmRpcn0vcHlndGstZGVtbworfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tZGVtbyIKK0ZJTEVTXyR7UE59LWRlbW8gPSAiICR7YmluZGlyfS9weWd0ay1kZW1vICR7bGliZGlyfS9weWd0ayAiCitSREVQRU5EU18ke1BOfS1kZW1vID0gInB5dGhvbi1weWd0ayBweXRob24tc3RyaW5nb2xkIHB5dGhvbi1sYW5nIgorCisjIHRvZG86IHJldmFtcCBwYWNrYWdpbmcsIHBhY2thZ2UgZGVtbyBzZXBlcmF0bHkKK0ZJTEVTXyR7UE59LWRldiArPSAiICR7bGliZGlyfS9weWd0ay8yLjAgJHtiaW5kaXJ9L3B5Z3RrLSogJHtkYXRhZGlyfS9weWd0ay8yLjAiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlyZXgtbmF0aXZlXzAuOS45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXJleC1uYXRpdmVfMC45LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThlZjFhYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlyZXgtbmF0aXZlXzAuOS45LmJiCkBAIC0wLDAgKzEsNSBAQAorcmVxdWlyZSBweXRob24tcHlyZXhfJHtQVn0uYmIKK2luaGVyaXQgbmF0aXZlIHB5dGhvbm5hdGl2ZQorREVQRU5EUyA9ICJweXRob24tbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAiIgorUFIgPSAicjMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4L3B5cmV4LWZpeC1vcHRpbWl6ZWQtbW9kZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlyZXgvcHlyZXgtZml4LW9wdGltaXplZC1tb2RlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1OGMzMjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4L3B5cmV4LWZpeC1vcHRpbWl6ZWQtbW9kZS5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IFB5cmV4LTAuOS44LjQvUHlyZXgvRGlzdHV0aWxzL2V4dGVuc2lvbi5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5cmV4LTAuOS44LjQub3JpZy9QeXJleC9EaXN0dXRpbHMvZXh0ZW5zaW9uLnB5CisrKysgUHlyZXgtMC45LjguNC9QeXJleC9EaXN0dXRpbHMvZXh0ZW5zaW9uLnB5CitAQCAtMTUsNyArMTUsNyBAQCBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgIHdhcm5pbmdzID0gTm9uZQorIAorIGNsYXNzIEV4dGVuc2lvbihfRXh0ZW5zaW9uLkV4dGVuc2lvbik6CistICAgIF9FeHRlbnNpb24uRXh0ZW5zaW9uLl9fZG9jX18gKyBcCisrICAgIF9FeHRlbnNpb24uRXh0ZW5zaW9uLl9fZG9jX18gb3IgIiIgKyBcCisgICAgICIiInB5cmV4X2luY2x1ZGVfZGlycyA6IFtzdHJpbmddCisgICAgICAgICBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgUHlyZXggaGVhZGVyIGZpbGVzICgucHhkKSAoaW4KKyAgICAgICAgIFVuaXggZm9ybSBmb3IgcG9ydGFiaWxpdHkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4XzAuOS45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXJleF8wLjkuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGRkMmU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXJleF8wLjkuOS5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIkxhbmd1YWdlIGZvciB3cml0aW5nIFB5dGhvbiBleHRlbnNpb24gbW9kdWxlcyIKK0RFU0NSSVBUSU9OID0gIlB5cmV4IGlzIGEgbGFuZ3VhZ2Ugc3BlY2lhbGx5IGRlc2lnbmVkIGZvciB3cml0aW5nIFB5dGhvbiBleHRlbnNpb24gbW9kdWxlcy4gXAorSXQncyBkZXNpZ25lZCB0byBicmlkZ2UgdGhlIGdhcCBiZXR3ZWVuIHRoZSBuaWNlLCBoaWdoLWxldmVsLCBlYXN5LXRvLXVzZSB3b3JsZCBvZiBQeXRob24gXAorYW5kIHRoZSBtZXNzeSwgbG93LWxldmVsIHdvcmxkIG9mIEMuIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIkFwYWNoZS0yLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9NzcxZDQ3MmY1M2Y5MzMwMzNmNTdlZWVlNzgwOGU1YmQiCitTUkNOQU1FID0gIlB5cmV4IgorUFIgPSAicjQiCisKK1NSQ19VUkkgPSAiXAorICBodHRwOi8vd3d3LmNvc2MuY2FudGVyYnVyeS5hYy5uei9ncmVnLmV3aW5nL3B5dGhvbi8ke1NSQ05BTUV9LyR7U1JDTkFNRX0tJHtQVn0udGFyLmd6IFwKKyAgZmlsZTovL3B5cmV4LWZpeC1vcHRpbWl6ZWQtbW9kZS5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MTVkZWU2N2QxNWQ0MzkzODQxZTJkNjBlODM0MTk0NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1Zjg3ZGYwNjgzMWQwYjM0MTJlYjRiYzlkM2ZjMmVlN2JmYWUxYjkxM2Q3ZGE4YzIzYWIyYmY1Njk5ZmI2YjUwIgorUyA9ICIke1dPUktESVJ9LyR7U1JDTkFNRX0tJHtQVn0iCisKK2luaGVyaXQgZGlzdHV0aWxzCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9JHtiYXNlX2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzL1B5cmV4L0NvbXBpbGVyL0xleGljb24ucGlja2xlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zY29ucy1uYXRpdmVfMi4zLjYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNjb25zLW5hdGl2ZV8yLjMuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWU4OWFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zY29ucy1uYXRpdmVfMi4zLjYuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlIHB5dGhvbi1zY29uc18ke1BWfS5iYgoraW5oZXJpdCBuYXRpdmUgcHl0aG9ubmF0aXZlCitERVBFTkRTID0gInB5dGhvbi1uYXRpdmUiCitSREVQRU5EU18ke1BOfSA9ICIiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vc2NvbnMgU0NPTlNfTElCX0RJUj0nJHtTVEFHSU5HX0RJUl9IT1NUfS8ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfScKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2NvbnNfMi4zLjYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNjb25zXzIuMy42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YWQ3ZDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNjb25zXzIuMy42LmJiCkBAIC0wLDAgKzEsMTQgQEAKK1NVTU1BUlkgPSAiU29mdHdhcmUgQ29uc3RydWN0aW9uIHRvb2wgKG1ha2UvYXV0b3Rvb2xzIHJlcGxhY2VtZW50KSIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9MjNiYzE1MzBjNTVlOWYwZDFiNzA5MDU2YmNlYTIzN2QiCitTUkNOQU1FID0gInNjb25zIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9zY29ucy9zY29ucy0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5YzZhMWMzYzcxNmNiZTVmMTY1MTVmMTYzYzkxZDkyOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5OGFkYWEzNTFkOGY0ZTQwNjhhNWJmMTg5NGJkZDdmODViMzkwYzhjM2Y4MGQ0MzdjZjhiYjI2NjAxMjQwNGRmIgorCitTID0gIiR7V09SS0RJUn0vJHtTUkNOQU1FfS0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2V0dXB0b29sc18xOC4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zZXR1cHRvb2xzXzE4LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRlMmIyZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2V0dXB0b29sc18xOC4yLmJiCkBAIC0wLDAgKzEsNDYgQEAKK1NVTU1BUlkgPSAiRG93bmxvYWRzLCBidWlsZHMsIGluc3RhbGxzLCB1cGdyYWRlcywgYW5kIHVuaW5zdGFsbHMgUHl0aG9uIHBhY2thZ2VzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9zZXR1cHRvb2xzIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIlB5dGhvbi0yLjAgfCBaUEwtMi4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc2V0dXAucHk7YmVnaW5saW5lPTc4O2VuZGxpbmU9Nzg7bWQ1PThhMzE0MjcwZGQ3YThkYmNhNzQxNzc1NDE1ZjE3MTZlIgorCitTUkNOQU1FID0gInNldHVwdG9vbHMiCisKK1BST1ZJREVTID0gInB5dGhvbi1kaXN0cmlidXRlIgorCitERVBFTkRTICs9ICJweXRob24iCitERVBFTkRTX2NsYXNzLW5hdGl2ZSArPSAicHl0aG9uLW5hdGl2ZSIKKworaW5oZXJpdCBkaXN0dXRpbHMKKworU1JDX1VSSSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2Uvcy9zZXR1cHRvb2xzL3NldHVwdG9vbHMtJHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjUyYjRlNDg5MzllZjMxMWQ3MjA0ZjhmZTk0MDc2NGY0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA5OTRhNThkZjI3ZWE1ZGM1MjM3ODJhNjAxMzU3YTIxOThiNzQ5M2RjYzk5YTMwZDUxODI3YTIzNTg1YjViMWQiCisKK1MgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgorCisKK0RJU1RVVElMU19JTlNUQUxMX0FSR1MgKz0gIi0taW5zdGFsbC1saWI9JHtEfSR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMiCisKK2RvX2luc3RhbGxfcHJlcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0vJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcworfQorCitSREVQRU5EU18ke1BOfSA9ICJcCisgIHB5dGhvbi1zdHJpbmdvbGQgXAorICBweXRob24tZW1haWwgXAorICBweXRob24tc2hlbGwgXAorICBweXRob24tZGlzdHV0aWxzIFwKKyAgcHl0aG9uLWNvbXByZXNzaW9uIFwKKyIKKworUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIlwKKyAgcHl0aG9uLWRpc3R1dGlscyBcCisgIHB5dGhvbi1jb21wcmVzc2lvbiBcCisiCisKK1JSRVBMQUNFU18ke1BOfSA9ICJweXRob24tZGlzdHJpYnV0ZSIKK1JQUk9WSURFU18ke1BOfSA9ICJweXRob24tZGlzdHJpYnV0ZSIKK1JDT05GTElDVFNfJHtQTn0gPSAicHl0aG9uLWRpc3RyaWJ1dGUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hZGQtZm9yLXJwbS1pZ25vcmVzaXplLWNoZWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWFkZC1mb3ItcnBtLWlnbm9yZXNpemUtY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEyN2YyNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hZGQtZm9yLXJwbS1pZ25vcmVzaXplLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK3B5dGhvbi1zbWFydHBtOiBBZGQgY2hlY2tpbmcgZm9yICJycG0taWdub3Jlc2l6ZSIgb3B0aW9uCisKK1RoZSBkb19yb290ZnMgdGFrZXMgYSB2ZXJ5IGxvbmcgdGltZSB3aGVuIGJ1aWxkIGhvc3QgaGFzIG1vdW50ZWQgbWFueSBORlMKK2RldmljZXMuIHN5c2NhbGwgbHN0YXQoKSB3YXMgYmVpbmcgY2FsbGVkIG9uIGV2ZXJ5IGZpbGVzeXN0ZW0gbW91bnRlZCBvbiB0aGUKK2J1aWxkIGhvc3QgZHVyaW5nIGJ1aWxkaW5nLgorVGhlIHJlYXNvbiBmb3IgdGhlIGxzdGF0KCkgaXMgdGhhdCBycG0gaXMgdmVyaWZ5aW5nIHRoYXQgZW5vdWdoIGZyZWUgZGlzayBzcGFjZQoraXMgYXZhaWxhYmxlIHRvIGRvIHRoZSBpbnN0YWxsLiBIb3dldmVyLCBzaW5jZSB0aGUgaW5zdGFsbCBpcyBpbnRvIHRoZSB0YXJnZXQKK3Jvb3RmcyBpdCBzaG91bGQgbm90IG1hdHRlciBob3cgbXVjaCBmcmVlIHNwYWNlIHRoZXJlIGlzIGluIHRoZSBob3N0IG1vdW50cy4KK0FkZCBjaGVja2luZyBmb3IgInJwbS1pZ25vcmVzaXplIiwgYnkgaXQsIHNtYXJ0IGNhbiBtYWtlIHdoZXRoZXIgUlBNIHNraXAKK2NoZWNraW5nIGZvciBkaXNrc3BhY2Ugd2hlbiBpbnN0YWxsIGEgcnBtIHBhY2thZ2UuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiB3ZW5saW4ua2FuZyA8d2VubGluLmthbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5IHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5IGIvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5CitpbmRleCA1ZGE5ZWU2Li5mMDQ4OGVjIDEwMDY0NAorLS0tIGEvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5CisrKysgYi9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKK0BAIC0yNDEsNiArMjQxLDEwIEBAIGNsYXNzIFJQTVBhY2thZ2VNYW5hZ2VyKFBhY2thZ2VNYW5hZ2VyKToKKyAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICBwcm9iZmlsdGVyIHw9IHJwbS5SUE1QUk9CX0ZJTFRFUl9JR05PUkVBUkNICisgCisrICAgICAgICBpZiBzeXNjb25mLmdldCgicnBtLWlnbm9yZXNpemUiLCBGYWxzZSk6CisrICAgICAgICAgICAgcHJvYmZpbHRlciB8PSBycG0uUlBNUFJPQl9GSUxURVJfRElTS05PREVTCisrICAgICAgICAgICAgcHJvYmZpbHRlciB8PSBycG0uUlBNUFJPQl9GSUxURVJfRElTS1NQQUNFCisrCisgICAgICAgICBpZiBmb3JjZSBvciByZWluc3RhbGw6CisgICAgICAgICAgICAgcHJvYmZpbHRlciB8PSBycG0uUlBNUFJPQl9GSUxURVJfUkVQTEFDRVBLRworICAgICAgICAgICAgIHByb2JmaWx0ZXIgfD0gcnBtLlJQTVBST0JfRklMVEVSX1JFUExBQ0VPTERGSUxFUworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYWxyZWFkeS1pbnN0YWxsZWQtbWVzc2FnZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hbHJlYWR5LWluc3RhbGxlZC1tZXNzYWdlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNTU1NTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYWxyZWFkeS1pbnN0YWxsZWQtbWVzc2FnZS5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIGE3NGE5YTllYjlkNzU5NjRhMGU5Nzg5NTBlOGIxOTFkN2ExOGQ3NjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IEZyaSwgNSBKdW4gMjAxNSAxNzowNzoxNiArMDEwMAorU3ViamVjdDogW1BBVENIXSBzbWFydDogY2hhbmdlICJpcyBhbHJlYWR5IGluc3RhbGxlZCIgbWVzc2FnZSBmcm9tIHdhcm5pbmcgdG8KKyBpbmZvCisKK1RoaXMgZG9lc24ndCBuZWVkIHRvIGJlIGEgd2FybmluZy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorLS0tCisgc21hcnQvY29tbWFuZHMvaW5zdGFsbC5weSAgICAgICAgICAgIHwgNCArKy0tCisgc21hcnQvaW50ZXJmYWNlcy90ZXh0L2ludGVyYWN0aXZlLnB5IHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc21hcnQvY29tbWFuZHMvaW5zdGFsbC5weSBiL3NtYXJ0L2NvbW1hbmRzL2luc3RhbGwucHkKK2luZGV4IDZlZjk2ODIuLjgwZDQ1NmIgMTAwNjQ0CistLS0gYS9zbWFydC9jb21tYW5kcy9pbnN0YWxsLnB5CisrKysgYi9zbWFydC9jb21tYW5kcy9pbnN0YWxsLnB5CitAQCAtMTUyLDcgKzE1Miw3IEBAIGRlZiBtYWluKGN0cmwsIG9wdHMpOgorICAgICAgICAgICAgIGZvciBvYmogaW4gcmVzdWx0czoKKyAgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiBvYmoucGFja2FnZXM6CisgICAgICAgICAgICAgICAgICAgICBpZiBwa2cuaW5zdGFsbGVkOgorLSAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlLndhcm5pbmcoXygiJXMgKGZvciAlcykgaXMgYWxyZWFkeSBpbnN0YWxsZWQiKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlLmluZm8oXygiJXMgKGZvciAlcykgaXMgYWxyZWFkeSBpbnN0YWxsZWQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGtnLCBhcmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworQEAgLTE4NCw3ICsxODQsNyBAQCBkZWYgbWFpbihjdHJsLCBvcHRzKToKKyAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgIHBrZyA9IG5hbWVzW25hbWVdWzBdCisgICAgICAgICAgICAgaWYgcGtnLmluc3RhbGxlZDoKKy0gICAgICAgICAgICAgICAgaWZhY2Uud2FybmluZyhfKCIlcyBpcyBhbHJlYWR5IGluc3RhbGxlZCIpICUgcGtnKQorKyAgICAgICAgICAgICAgICBpZmFjZS5pbmZvKF8oIiVzIGlzIGFscmVhZHkgaW5zdGFsbGVkIikgJSBwa2cpCisgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgdHJhbnMuZW5xdWV1ZShwa2csIElOU1RBTEwpCisgCitkaWZmIC0tZ2l0IGEvc21hcnQvaW50ZXJmYWNlcy90ZXh0L2ludGVyYWN0aXZlLnB5IGIvc21hcnQvaW50ZXJmYWNlcy90ZXh0L2ludGVyYWN0aXZlLnB5CitpbmRleCA5ODY1NTg0Li4xOTA4NjdiIDEwMDY0NAorLS0tIGEvc21hcnQvaW50ZXJmYWNlcy90ZXh0L2ludGVyYWN0aXZlLnB5CisrKysgYi9zbWFydC9pbnRlcmZhY2VzL3RleHQvaW50ZXJhY3RpdmUucHkKK0BAIC0yNzgsNyArMjc4LDcgQEAgY2xhc3MgSW50ZXJwcmV0ZXIoQ21kKToKKyAgICAgICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgICAgICAgcGtnID0gbmFtZXNbbmFtZV1bMF0KKyAgICAgICAgICAgICAgICAgaWYgcGtnLmluc3RhbGxlZDoKKy0gICAgICAgICAgICAgICAgICAgIGlmYWNlLndhcm5pbmcoXygiJXMgaXMgYWxyZWFkeSBpbnN0YWxsZWQiKSAlIHBrZykKKysgICAgICAgICAgICAgICAgICAgIGlmYWNlLmluZm8oXygiJXMgaXMgYWxyZWFkeSBpbnN0YWxsZWQiKSAlIHBrZykKKyAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24uZW5xdWV1ZShwa2csIElOU1RBTEwpCistLSAKKzIuMS4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hdHRlbXB0LWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hdHRlbXB0LWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTY3MmIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWF0dGVtcHQtZml4LnBhdGNoCkBAIC0wLDAgKzEsMTU4IEBACitTYWRseSwgc21hcnQgaXMgbm90IGRldGVybWluaXN0aWMgc28gdGhlIHNhbWUgYnVpbGQgY2FuIGdvIGRvd24gbXVsdGlwbGUgZGlmZmVyZW50CitwYXRod2F5cy4gV2UnZCBleHBlY3QgdG8gc2VlIHRoZSBzYW1lIHdhcm5pbmdzIGhvd2V2ZXIgZGVwZW5kaW5nIG9uIHRoZSBwYXRod2F5Cit0YWtlbiwgaXQgbWF5IG9yIG1heSBub3Qgd2FybiwgcGFydGljdWxhcmx5IHdpdGggUmVjb21tZW5kcyBzaW5jZSB0aGV5J3JlIG9wdGlvbmFsLgorCitGb3IgZXhhbXBsZSwgd2hlcmUgYSBSZWNvbW1lbmRlZCBwYWNrYWdlIGlzIGF2YWlsYWJsZSBidXQgaGFzIENvbmZsaWN0cywgd2UnZCBleHBlY3QKK3RvIHNlZSBhbiB3YXJuaW5nIHRoYXQgd2UgY291bGRuJ3QgaW5zdGFsbCBpdC4gU29tZSBjb2RlIHBhdGhzIHNpbGVudGx5IGhpZGUgdGhpcworKGl0cyBhIExPQ0tFRF9DT05GTElDVCkuIFdlIGFkZCBwcmludGluZyBvZiB3YXJuaW5ncyBmb3IgdGhpcyBjYXNlLgorCitBbHNvLCBpZiB0aGVyZSBhcmUgdHdvIGNvbXBhdGlibGUgZmVlZHMgYXZhaWxhYmxlIChlLmcuIGk1ODYgYW5kIGNvcmUyXzMyKSwgdGhpcyAKK2NoYW5nZXMgdGhlIGNvZGUgcGF0aCBmcm9tIGRpcmVjdCBfaW5zdGFsbCgpIHRvIF9wZW5kaW5nKCkgc2luY2UgdGhlcmUgYXJlIG11bHRpcGxlCitwcm92aWRlcnMuIFRoaXMgcGF0Y2ggYWRkcyB3YXJuaW5nIGhhbmRsaW5nIHRvIF9wZW5kaW5nKCkgc28gd2UgZG9uJ3QgaGl0IGhhcmQgCitmYWlsdXJlcyB0aGVyZS4gVGhpcyBpcyBhcyBzZWVuIHdpdGggdGhlIG15c3RlcmlvdXMgbGlic3BlZXhkc3AgZmFpbHVyZXMgZm9yIHg4Ni1sc2IKK29uIHRoZSBhdXRvYnVpbGRlci4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitSUAorMjAxNS83LzE2CisKK0luZGV4OiBnaXQvc21hcnQvdHJhbnNhY3Rpb24ucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zbWFydC90cmFuc2FjdGlvbi5weQorKysrIGdpdC9zbWFydC90cmFuc2FjdGlvbi5weQorQEAgLTY1MSwxMyArNjUxLDE0IEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgCisgICAgICAgICAgICAgaWYgbm90IHBydnBrZ3M6CisgICAgICAgICAgICAgICAgICMgTm8gcGFja2FnZXMgcHJvdmlkZSBpdCBhdCBhbGwuIEdpdmUgdXAuCisrCisrICAgICAgICAgICAgICAgIHJlYXNvbnMgPSBbXQorKyAgICAgICAgICAgICAgICBmb3IgcHJ2IGluIHJlcS5wcm92aWRlZGJ5OgorKyAgICAgICAgICAgICAgICAgICAgZm9yIHBydnBrZyBpbiBwcnYucGFja2FnZXM6CisrICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VkcmVzID0gbG9ja2VkcGtncy5nZXQocHJ2cGtnLCBOb25lKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxvY2tlZHJlczoKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29ucy5hcHBlbmQobG9ja19yZWFzb24ocHJ2cGtnLCBsb2NrZWRyZXMpKQorICAgICAgICAgICAgICAgICBpZiByZXFyZXF1aXJlZDoKKy0gICAgICAgICAgICAgICAgICAgIHJlYXNvbnMgPSBbXQorLSAgICAgICAgICAgICAgICAgICAgZm9yIHBydiBpbiByZXEucHJvdmlkZWRieToKKy0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJ2cGtnIGluIHBydi5wYWNrYWdlczoKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VkcmVzID0gbG9ja2VkcGtncy5nZXQocHJ2cGtnLCBOb25lKQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsb2NrZWRyZXM6CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb25zLmFwcGVuZChsb2NrX3JlYXNvbihwcnZwa2csIGxvY2tlZHJlcykpCisgICAgICAgICAgICAgICAgICAgICBpZiByZWFzb25zOgorICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogdW5hYmxlIHRvIGluc3RhbGwgcHJvdmlkZXIgZm9yICVzOlxuICAgICVzIikgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnLCByZXEsICdcbiAgICAnLmpvaW4ocmVhc29ucykpCitAQCAtNjY1LDcgKzY2NiwxMSBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogbm8gcGFja2FnZSBwcm92aWRlcyAlcyIpICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBrZywgcmVxKQorICAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgaWYgcmVhc29uczoKKysgICAgICAgICAgICAgICAgICAgICAgICBpZmFjZS53YXJuaW5nKF8oIkNhbid0IGluc3RhbGwgJXM6IHVuYWJsZSB0byBpbnN0YWxsIHByb3ZpZGVyIGZvciAlczpcbiAgICAlcyIpICUgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBrZywgcmVxLCAnXG4gICAgJy5qb2luKHJlYXNvbnMpKSkKKysKKyAgICAgICAgICAgICAgICAgICAgICMgSXQncyBvbmx5IGEgcmVjb21tZW5kLCBza2lwCisgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorIAorICAgICAgICAgICAgIGlmIGxlbihwcnZwa2dzKSA9PSAxOgorQEAgLTg0Niw2ICs4NTIsMTQgQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAgICAgICAgIGlzaW5zdCA9IGNoYW5nZXNldC5pbnN0YWxsZWQKKyAgICAgICAgIGdldHdlaWdodCA9IHNlbGYuX3BvbGljeS5nZXRXZWlnaHQKKyAKKysgICAgICAgIGF0dGVtcHQgPSBzeXNjb25mLmhhcygiYXR0ZW1wdC1pbnN0YWxsIiwgc29mdD1UcnVlKQorKworKyAgICAgICAgZGVmIGhhbmRsZV9mYWlsdXJlKG1zZyk6CisrICAgICAgICAgICAgaWYgYXR0ZW1wdDoKKysgICAgICAgICAgICAgICAgaWZhY2Uud2FybmluZyhtc2cpCisrICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBtc2cKKysKKyAgICAgICAgIHVwZG93biA9IFtdCisgICAgICAgICB3aGlsZSBwZW5kaW5nOgorICAgICAgICAgICAgIGl0ZW0gPSBwZW5kaW5nLnBvcCgwKQorQEAgLTg3MCw4ICs4ODQsOSBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorIAorICAgICAgICAgICAgICAgICBpZiBub3QgcHJ2cGtnczoKKyAgICAgICAgICAgICAgICAgICAgICMgTm8gcGFja2FnZXMgcHJvdmlkZSBpdCBhdCBhbGwuIEdpdmUgdXAuCistICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IG5vIHBhY2thZ2UgIgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm92aWRlcyAlcyIpICUgKHBrZywgcmVxKQorKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlX2ZhaWx1cmUoXygiQ2FuJ3QgaW5zdGFsbCAlczogbm8gcGFja2FnZSAiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3ZpZGVzICVzIikgJSAocGtnLCByZXEpKQorKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAKKyAgICAgICAgICAgICAgICAgaWYgbGVuKHBydnBrZ3MpID4gMToKKyAgICAgICAgICAgICAgICAgICAgICMgTW9yZSB0aGFuIG9uZSBwYWNrYWdlIHByb3ZpZGUgaXQuIFdlIHVzZSBfcGVuZGluZyBoZXJlLAorQEAgLTg5NCw5ICs5MDksMTAgQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VlcG9yZGVyLCBjcywgbGspKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZWVwb3JkZXIgKz0gMC4wMDAwMDEKKyAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBhbHRlcm5hdGl2ZXM6CistICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBhbGwgcGFja2FnZXMgIgorKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9mYWlsdXJlKF8oIkNhbid0IGluc3RhbGwgJXM6IGFsbCBwYWNrYWdlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm92aWRpbmcgJXMgZmFpbGVkIHRvIGluc3RhbGw6XG4lcyIpXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGtnLCByZXEsICAiXG4iLmpvaW4oZmFpbHVyZXMpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGtnLCByZXEsICAiXG4iLmpvaW4oZmFpbHVyZXMpKSkKKysgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmVzLnNvcnQoKQorICAgICAgICAgICAgICAgICAgICAgY2hhbmdlc2V0LnNldFN0YXRlKGFsdGVybmF0aXZlc1swXVsxXSkKKyAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihhbHRlcm5hdGl2ZXMpID09IDE6CitAQCAtOTU0LDE4ICs5NzAsMjAgQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAKKyAgICAgICAgICAgICAgICAgICAgIGZvciByZXFwa2cgaW4gcmVxcGtnczoKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZXFwa2cgaW4gbG9ja2VkIGFuZCBpc2luc3QocmVxcGtnKToKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCByZW1vdmUgJXM6IHJlcXVpcmluZyAiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9mYWlsdXJlKF8oIkNhbid0IHJlbW92ZSAlczogcmVxdWlyaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlICVzIGlzIGxvY2tlZCIpICUgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwa2csIHJlcXBrZykKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnLCByZXFwa2cpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgZm9yIHJlcXBrZyBpbiByZXFwa2dzOgorICAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgY2hlY2sgYWdhaW4sIHNpbmNlIG90aGVyIGFjdGlvbnMgbWF5IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAjIGNoYW5nZWQgdGhlaXIgc3RhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdChyZXFwa2cpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlcXBrZyBpbiBsb2NrZWQ6CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgcmVtb3ZlICVzOiByZXF1aXJpbmcgIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfZmFpbHVyZShfKCJDYW4ndCByZW1vdmUgJXM6IHJlcXVpcmluZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFja2FnZSAlcyBpcyBsb2NrZWQiKSAlIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnLCByZXFwa2cpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBrZywgcmVxcGtnKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmUocmVxcGtnLCBjaGFuZ2VzZXQsIGxvY2tlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZywgZGVwdGgpCisgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorQEAgLTk3OCwxMiArOTk2LDE0IEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgIGZvciByZXFwa2cgaW4gcmVxcGtnczoKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZXFwa2cgaW4gbG9ja2VkIGFuZCBpc2luc3QocmVxcGtnKToKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCIlcyBpcyBsb2NrZWQiKSAlIHJlcXBrZworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfZmFpbHVyZShfKCIlcyBpcyBsb2NrZWQiKSAlIHJlcXBrZykKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgIGZvciByZXFwa2cgaW4gcmVxcGtnczoKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgY3MuaW5zdGFsbGVkKHJlcXBrZyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVxcGtnIGluIGxrOgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIiVzIGlzIGxvY2tlZCIpICUgcmVxcGtnCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9mYWlsdXJlKF8oIiVzIGlzIGxvY2tlZCIpICUgcmVxcGtnKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlbW92ZShyZXFwa2csIGNzLCBsaywgTm9uZSwgZGVwdGgpCisgICAgICAgICAgICAgICAgIGV4Y2VwdCBGYWlsZWQsIGU6CisgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodW5pY29kZShlKSkKK0BAIC05OTEsOSArMTAxMSwxMCBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmVzLmFwcGVuZCgoZ2V0d2VpZ2h0KGNzKSwgY3MsIGxrKSkKKyAKKyAgICAgICAgICAgICAgICAgaWYgbm90IGFsdGVybmF0aXZlczoKKy0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogYWxsIHBhY2thZ2VzIHByb3ZpZGluZyAiCisrICAgICAgICAgICAgICAgICAgICBoYW5kbGVfZmFpbHVyZShfKCJDYW4ndCBpbnN0YWxsICVzOiBhbGwgcGFja2FnZXMgcHJvdmlkaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgZmFpbGVkIHRvIGluc3RhbGw6XG4lcyIpIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGtnLCBwcnYsICAiXG4iLmpvaW4oZmFpbHVyZXMpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwa2csIHBydiwgICJcbiIuam9pbihmYWlsdXJlcykpKQorKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAKKyAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmVzLnNvcnQoKQorICAgICAgICAgICAgICAgICBjaGFuZ2VzZXQuc2V0U3RhdGUoYWx0ZXJuYXRpdmVzWzBdWzFdKQorQEAgLTEyNDYsNiArMTI2Nyw3IEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXNldC5zZXRSZXF1ZXN0ZWQocGtnLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEZhaWxlZCwgZToKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzeXNjb25mLmhhcygiYXR0ZW1wdC1pbnN0YWxsIiwgc29mdD1UcnVlKToKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhY2Uud2FybmluZyhfKCJDYW4ndCBpbnN0YWxsICVzOiAlcyIpICUgKHBrZywgc3RyKGUpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGtnIGluIGNoYW5nZXNldDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBjaGFuZ2VzZXRbcGtnXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWF0dGVtcHQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYXR0ZW1wdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzk4ZTAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWF0dGVtcHQucGF0Y2gKQEAgLTAsMCArMSwxNzcgQEAKK0Zyb20gYjEwNWU3ZmU4MTJkYTNjY2FmNzE1NWMwZmUxNGM4NzI4YjBkMzlhNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjAgSmFuIDIwMTQgMTQ6MzA6NTIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIG1lY2hhbmlzbSB0byBhdHRlbXB0IGluc3RhbGwgd2l0aG91dCBmYWlsaW5nCisKK0luIE9wZW5FbWJlZGRlZCwgZm9yIGNvbXBsZW1lbnRhcnkgYW5kICdhdHRlbXB0b25seScgcGFja2FnZSBwcm9jZXNzaW5nLAord2UgbmVlZCBhIHdheSB0byBpbnN0cnVjdCBzbWFydCB0byB0cnkgdG8gaW5zdGFsbCwgYnV0IGlnbm9yZSBhbnkKK2ZhaWx1cmVzICh1c3VhbGx5IGNvbmZsaWN0cykuCisKK1RoaXMgb3B0aW9uIG9ubHkgd29ya3MgZm9yIHRoZSBpbnN0YWxsIG9wZXJhdGlvbi4KKworSWYgYSBjb21wbGVtZW50YXJ5IGluc3RhbGwgZmFpbHMsIGFuIGFjdHVhbCBlcnJvciBvY2N1cnJlZCwgb25lIHRoYXQKK3dlIGNhbid0IGlnbm9yZSB3aXRob3V0IGxvc2luZyB0aGUgZW50aXJlIGF0dGVtcHRlZCB0cmFuc2FjdGlvbi4gIEtlZXAKK3RoaXMgYXMgYW4gZXJyb3Igc28gdGhhdCB3ZSBjYW4gY2F0Y2ggdGhlc2UgY2FzZXMgaW4gdGhlIGZ1dHJlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBiYWNrZW5kcy9ycG0vcG0ucHkgfCAgIDM1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCisgdHJhbnNhY3Rpb24ucHkgICAgIHwgICA1MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgNzEgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkgYi9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKK2luZGV4IDliYmQ5NTIuLmJhNjQwNWEgMTAwNjQ0CistLS0gYS9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKKysrKyBiL3NtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weQorQEAgLTI0MSwxNSArMjQxLDQ4IEBAIGNsYXNzIFJQTVBhY2thZ2VNYW5hZ2VyKFBhY2thZ2VNYW5hZ2VyKToKKyAgICAgICAgIGNiID0gUlBNQ2FsbGJhY2socHJvZywgdXBncmFkZWRuYW1lcykKKyAgICAgICAgIGNiLmdyYWJPdXRwdXQoVHJ1ZSkKKyAgICAgICAgIHByb2JzID0gTm9uZQorKyAgICAgICAgcmV0cnkgPSAwCisgICAgICAgICB0cnk6CisgICAgICAgICAgICAgcHJvYnMgPSB0cy5ydW4oY2IsIE5vbmUpCisgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgIGRlbCBnZXRUUy50cworICAgICAgICAgICAgIGNiLmdyYWJPdXRwdXQoRmFsc2UpCisrICAgICAgICAgICAgaWYgcHJvYnMgYW5kIHN5c2NvbmYuaGFzKCJhdHRlbXB0LWluc3RhbGwiLCBzb2Z0PVRydWUpOgorKyAgICAgICAgICAgICAgICBkZWYgcmVtb3ZlX2NvbmZsaWN0KHBrZ05FVlIpOgorKyAgICAgICAgICAgICAgICAgICAgZm9yIGtleSBpbiBjaGFuZ2VzZXQua2V5cygpOgorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBrZ05FVlIgPT0gc3RyKGtleSk6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBjaGFuZ2VzZXRba2V5XQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgcGtncGF0aHNba2V5XQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmFjZS53YXJuaW5nKCJSZW1vdmluZyAlcyBkdWUgdG8gZmlsZSAlcyBjb25mbGljdGluZyB3aXRoICVzIiAlIChwa2dORVZSLCBmbmFtZSwgYWx0TkVWUikpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrCisrICAgICAgICAgICAgICAgIHJldHJ5ID0gMQorKyAgICAgICAgICAgICAgICBmb3IgcHJvYiBpbiBwcm9iczoKKysgICAgICAgICAgICAgICAgICAgIGlmIHByb2JbMV1bMF0gPT0gcnBtLlJQTVBST0JfTkVXX0ZJTEVfQ09ORkxJQ1Q6CisrICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gcHJvYlswXS5zcGxpdCgpCisrICAgICAgICAgICAgICAgICAgICAgICAgZm5hbWUgPSBtc2dbMV0KKysgICAgICAgICAgICAgICAgICAgICAgICBwa2dORVZSID0gbXNnWzddCisrICAgICAgICAgICAgICAgICAgICAgICAgYWx0TkVWUiA9IG1zZ1s5XQorKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ05FVlIgPSBwa2dORVZSLnJzcGxpdCgnLicsIDEpWzBdICsgJ0AnICsgcGtnTkVWUi5yc3BsaXQoJy4nLCAxKVsxXQorKyAgICAgICAgICAgICAgICAgICAgICAgIGFsdE5FVlIgPSBhbHRORVZSLnJzcGxpdCgnLicsIDEpWzBdICsgJ0AnICsgYWx0TkVWUi5yc3BsaXQoJy4nLCAxKVsxXQorKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZV9jb25mbGljdChwa2dORVZSKQorKyAgICAgICAgICAgICAgICAgICAgZWxpZiBwcm9iWzFdWzBdID09IHJwbS5SUE1QUk9CX0ZJTEVfQ09ORkxJQ1Q6CisrICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gcHJvYlswXS5zcGxpdCgpCisrICAgICAgICAgICAgICAgICAgICAgICAgZm5hbWUgPSBtc2dbMV0KKysgICAgICAgICAgICAgICAgICAgICAgICBwa2dORVZSID0gbXNnWzVdCisrICAgICAgICAgICAgICAgICAgICAgICAgYWx0TkVWUiA9IG1zZ1sxMV0KKysgICAgICAgICAgICAgICAgICAgICAgICBwa2dORVZSID0gcGtnTkVWUi5yc3BsaXQoJy4nLCAxKVswXSArICdAJyArIHBrZ05FVlIucnNwbGl0KCcuJywgMSlbMV0KKysgICAgICAgICAgICAgICAgICAgICAgICBhbHRORVZSID0gYWx0TkVWUi5yc3BsaXQoJy4nLCAxKVswXSArICdAJyArIGFsdE5FVlIucnNwbGl0KCcuJywgMSlbMV0KKysgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVfY29uZmxpY3QocGtnTkVWUikKKysgICAgICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnkgPSAwCisrCisgICAgICAgICAgICAgcHJvZy5zZXREb25lKCkKKy0gICAgICAgICAgICBpZiBwcm9iczoKKysgICAgICAgICAgICBpZiBwcm9icyBhbmQgKG5vdCByZXRyeSk6CisgICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yLCAiXG4iLmpvaW4oW3hbMF0gZm9yIHggaW4gcHJvYnNdKQorICAgICAgICAgICAgIHByb2cuc3RvcCgpCisrICAgICAgICAgICAgaWYgcmV0cnkgYW5kIGxlbihjaGFuZ2VzZXQpOgorKyAgICAgICAgICAgICAgICBzZWxmLmNvbW1pdChjaGFuZ2VzZXQsIHBrZ3BhdGhzKQorIAorIGNsYXNzIFJQTUNhbGxiYWNrOgorICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvZywgdXBncmFkZWRuYW1lcyk6CitkaWZmIC0tZ2l0IGEvc21hcnQvdHJhbnNhY3Rpb24ucHkgYi9zbWFydC90cmFuc2FjdGlvbi5weQoraW5kZXggNGI5MGNiNy4uM2UwNDNlOSAxMDA2NDQKKy0tLSBhL3NtYXJ0L3RyYW5zYWN0aW9uLnB5CisrKysgYi9zbWFydC90cmFuc2FjdGlvbi5weQorQEAgLTU1NSw2ICs1NTUsOCBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorICAgICAgICAgY2hhbmdlc2V0LnNldChwa2csIElOU1RBTEwpCisgICAgICAgICBpc2luc3QgPSBjaGFuZ2VzZXQuaW5zdGFsbGVkCisgCisrICAgICAgICBhdHRlbXB0ID0gc3lzY29uZi5oYXMoImF0dGVtcHQtaW5zdGFsbCIsIHNvZnQ9VHJ1ZSkKKysKKyAgICAgICAgICMgUmVtb3ZlIHBhY2thZ2VzIGNvbmZsaWN0ZWQgYnkgdGhpcyBvbmUuCisgICAgICAgICBmb3IgY25mIGluIHBrZy5jb25mbGljdHM6CisgICAgICAgICAgICAgZm9yIHBydiBpbiBjbmYucHJvdmlkZWRieToKK0BAIC01NjQsMTEgKzU2NiwxNiBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdChwcnZwa2cpOgorICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlZFtwcnZwa2ddID0gKExPQ0tFRF9DT05GTElDVF9CWSwgcGtnKQorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCistICAgICAgICAgICAgICAgICAgICBpZiBwcnZwa2cgaW4gbG9ja2VkOgorLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogY29uZmxpY3RlZCBwYWNrYWdlICIKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIGlzIGxvY2tlZCIpICUgKHBrZywgcHJ2cGtnKQorLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlKHBydnBrZywgY2hhbmdlc2V0LCBsb2NrZWQsIHBlbmRpbmcsIGRlcHRoKQorLSAgICAgICAgICAgICAgICAgICAgcGVuZGluZy5hcHBlbmQoKFBFTkRJTkdfVVBET1dOLCBwcnZwa2cpKQorKyAgICAgICAgICAgICAgICAgICAgaWYgYXR0ZW1wdDoKKysgICAgICAgICAgICAgICAgICAgICAgICBkZWwgY2hhbmdlc2V0W3BrZ10KKysgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IGl0IGNvbmZsaWN0cyB3aXRoIHBhY2thZ2UgIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiKSAlIChwa2csIHBydnBrZykKKysgICAgICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJ2cGtnIGluIGxvY2tlZDoKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBjb25mbGljdGVkIHBhY2thZ2UgIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIGlzIGxvY2tlZCIpICUgKHBrZywgcHJ2cGtnKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlbW92ZShwcnZwa2csIGNoYW5nZXNldCwgbG9ja2VkLCBwZW5kaW5nLCBkZXB0aCkKKysgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nLmFwcGVuZCgoUEVORElOR19VUERPV04sIHBydnBrZykpCisgCisgICAgICAgICAjIFJlbW92ZSBwYWNrYWdlcyBjb25mbGljdGluZyB3aXRoIHRoaXMgb25lLgorICAgICAgICAgZm9yIHBydiBpbiBwa2cucHJvdmlkZXM6CitAQCAtNTc5LDEyICs1ODYsMTggQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3QoY25mcGtnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZWRbY25mcGtnXSA9IChMT0NLRURfQ09ORkxJQ1QsIHBrZykKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorLSAgICAgICAgICAgICAgICAgICAgaWYgY25mcGtnIGluIGxvY2tlZDoKKysgICAgICAgICAgICAgICAgICAgIGlmIGF0dGVtcHQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGNoYW5nZXNldFtwa2ddCisgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBpdCdzIGNvbmZsaWN0ZWQgYnkgIgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIGxvY2tlZCBwYWNrYWdlICVzIikgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGtnLCBjbmZwa2cpCistICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmUoY25mcGtnLCBjaGFuZ2VzZXQsIGxvY2tlZCwgcGVuZGluZywgZGVwdGgpCistICAgICAgICAgICAgICAgICAgICBwZW5kaW5nLmFwcGVuZCgoUEVORElOR19VUERPV04sIGNuZnBrZykpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgcGFja2FnZSAlcyIpIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwa2csIGNuZnBrZykKKysgICAgICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgY25mcGtnIGluIGxvY2tlZDoKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBpdCdzIGNvbmZsaWN0ZWQgYnkgIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBsb2NrZWQgcGFja2FnZSAlcyIpIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGtnLCBjbmZwa2cpCisrICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlKGNuZnBrZywgY2hhbmdlc2V0LCBsb2NrZWQsIHBlbmRpbmcsIGRlcHRoKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmcuYXBwZW5kKChQRU5ESU5HX1VQRE9XTiwgY25mcGtnKSkKKyAKKyAgICAgICAgICMgUmVtb3ZlIHBhY2thZ2VzIHdpdGggdGhlIHNhbWUgbmFtZSB0aGF0IGNhbid0CisgICAgICAgICAjIGNvZXhpc3Qgd2l0aCB0aGlzIG9uZS4KK0BAIC01OTQsMTAgKzYwNywxNSBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0KG5hbWVwa2cpOgorICAgICAgICAgICAgICAgICAgICAgbG9ja2VkW25hbWVwa2ddID0gKExPQ0tFRF9OT19DT0VYSVNULCBwa2cpCisgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorLSAgICAgICAgICAgICAgICBpZiBuYW1lcGtnIGluIGxvY2tlZDoKKysgICAgICAgICAgICAgICAgaWYgYXR0ZW1wdDoKKysgICAgICAgICAgICAgICAgICAgIGRlbCBjaGFuZ2VzZXRbcGtnXQorICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBpdCBjYW4ndCBjb2V4aXN0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2l0aCAlcyIpICUgKHBrZywgbmFtZXBrZykKKy0gICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlKG5hbWVwa2csIGNoYW5nZXNldCwgbG9ja2VkLCBwZW5kaW5nLCBkZXB0aCkKKysgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgIGlmIG5hbWVwa2cgaW4gbG9ja2VkOgorKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogaXQgY2FuJ3QgY29leGlzdCAiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoICVzIikgJSAocGtnLCBuYW1lcGtnKQorKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlKG5hbWVwa2csIGNoYW5nZXNldCwgbG9ja2VkLCBwZW5kaW5nLCBkZXB0aCkKKyAKKyAgICAgICAgICMgSW5zdGFsbCBwYWNrYWdlcyByZXF1aXJlZCBieSB0aGlzIG9uZS4KKyAgICAgICAgIGZvciByZXEgaW4gcGtnLnJlcXVpcmVzICsgcGtnLnJlY29tbWVuZHM6CitAQCAtMTE3Niw2ICsxMTk0LDggQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAKKyAgICAgICAgIHNlbGYuX3BvbGljeS5ydW5TdGFydGluZygpCisgCisrICAgICAgICBhdHRlbXB0ID0gc3lzY29uZi5oYXMoImF0dGVtcHQtaW5zdGFsbCIsIHNvZnQ9VHJ1ZSkKKysKKyAgICAgICAgIHRyeToKKyAgICAgICAgICAgICBjaGFuZ2VzZXQgPSBzZWxmLl9jaGFuZ2VzZXQuY29weSgpCisgICAgICAgICAgICAgaXNpbnN0ID0gY2hhbmdlc2V0Lmluc3RhbGxlZAorQEAgLTExOTAsNyArMTIxMCwxMSBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICAgbG9ja2VkW3BrZ10gPSAoTE9DS0VEX0tFRVAsIE5vbmUpCisgICAgICAgICAgICAgICAgIGVsaWYgb3AgaXMgSU5TVEFMTDoKKyAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3QocGtnKSBhbmQgcGtnIGluIGxvY2tlZDoKKy0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IGl0J3MgbG9ja2VkIikgJSBwa2cKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiBhdHRlbXB0OgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmFjZS53YXJuaW5nKF8oIkNhbid0IGluc3RhbGwgJXM6IGl0J3MgbG9ja2VkIikgJSBwa2cpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBjaGFuZ2VzZXRbcGtnXQorKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogaXQncyBsb2NrZWQiKSAlIHBrZworICAgICAgICAgICAgICAgICAgICAgY2hhbmdlc2V0LnNldChwa2csIElOU1RBTEwpCisgICAgICAgICAgICAgICAgICAgICBsb2NrZWRbcGtnXSA9IChMT0NLRURfSU5TVEFMTCwgTm9uZSkKKyAgICAgICAgICAgICAgICAgZWxpZiBvcCBpcyBSRU1PVkU6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtY2hhbm5lbHNkaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtY2hhbm5lbHNkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYyMWIzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1jaGFubmVsc2Rpci5wYXRjaApAQCAtMCwwICsxLDI0IEBACitNYWtlIENIQU5ORUxTRElSIGluIHNtYXJ0IGVtcHR5LCBzaW5jZSB0aGlzIGNhdXNlcyBob3N0IGNvbnRhbWluYXRpb24gaXNzdWVzCitvbiBzb21lIFJQTS1iYXNlZCBob3N0cyBvbiB3aGljaCBzbWFydCBpcyBhbHJlYWR5IGluc3RhbGxlZC4KKworW1lPQ1RPICMzODgxXQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitkaWZmIC0tZ2l0IGEvc21hcnQvcGx1Z2lucy9jaGFubmVsc3luYy5weSBiL3NtYXJ0L3BsdWdpbnMvY2hhbm5lbHN5bmMucHkKK2luZGV4IDNiYTk1ZmYuLjY0NmQ2OTYgMTAwNjQ0CistLS0gYS9zbWFydC9wbHVnaW5zL2NoYW5uZWxzeW5jLnB5CisrKysgYi9zbWFydC9wbHVnaW5zL2NoYW5uZWxzeW5jLnB5CitAQCAtMjMsNyArMjMsMTEgQEAgZnJvbSBzbWFydC5jaGFubmVsIGltcG9ydCAqCisgZnJvbSBzbWFydCBpbXBvcnQgKgorIGltcG9ydCBvcworIAorLUNIQU5ORUxTRElSID0gIi9ldGMvc21hcnQvY2hhbm5lbHMvIgorKyMgRm9yIG5vdywgd2UgbGVhdmUgdGhlIGRlZmluaXRpb24gb2YgQ0hBTk5FTFNESVIgZW1wdHkuIFRoaXMgcHJldmVudHMgc21hcnQKKysjIGZyb20gZXJyb25lb3VzbHkgY29uc2lkZXIgdGhlICBidWlsZCBob3N0J3MgY2hhbm5lbHMgd2hpbGUgc2V0dGluZyB1cCBpdHMKKysjIGNoYW5uZWxzIFtZT0NUTyAjMzg4MV0uIElmIHRoaXMgZmVhdHVyZSB3aWxsIGJlIHVzZWQgaW4gdGhlIGZ1dHVyZSwgQ0hBTk5FTFNESVIKKysjIHNob3VsZCBiZSBzZXQgdG8gYSBwcm9wZXIgdmFsdWUuCisrQ0hBTk5FTFNESVIgPSAiIgorIAorIGRlZiBzeW5jQ2hhbm5lbHMoY2hhbm5lbHNkaXIsIGZvcmNlPU5vbmUpOgorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWltcHJvdmUtZXJyb3ItcmVwb3J0aW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWltcHJvdmUtZXJyb3ItcmVwb3J0aW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MjI2NWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtaW1wcm92ZS1lcnJvci1yZXBvcnRpbmcucGF0Y2gKQEAgLTAsMCArMSw5MSBAQAorSW1wcm92ZSBlcnJvciByZXBvcnRpbmcgaW4gc21hcnQKKworQWRkIGNvZGUgdG8gY2hlY2sgcHJvcGVyIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgZm9yIHZhcmlvdXMKK3NtYXJ0IGNvbW1hbmRzLiBFeGl0IHdpdGggZXJyb3IgaWYgZXJyb25lb3VzL2FkZGl0aW9uYWwgYXJndW1lbnRzCithcmUgZ2l2ZW4gaW4gdGhlIGNvbW1hbmQgbGluZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEJvZ2RhbiBNYXJpbmVzY3UgPGJvZ2Rhbi5hLm1hcmluZXNjdUBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9zbWFydC91dGlsL29wdHBhcnNlLnB5IGIvc21hcnQvdXRpbC9vcHRwYXJzZS5weQoraW5kZXggNmZmZjFiYy4uZjQ0NWEzYiAxMDA2NDQKKy0tLSBhL3NtYXJ0L3V0aWwvb3B0cGFyc2UucHkKKysrKyBiL3NtYXJ0L3V0aWwvb3B0cGFyc2UucHkKK0BAIC03MCw2ICs3MCw4IEBAIGltcG9ydCBzeXMsIG9zCisgaW1wb3J0IHR5cGVzCisgaW1wb3J0IHRleHR3cmFwCisgZnJvbSBnZXR0ZXh0IGltcG9ydCBnZXR0ZXh0IGFzIF8KKytmcm9tIHNtYXJ0IGltcG9ydCBFcnJvcgorK2ltcG9ydCByZQorIAorIGRlZiBfcmVwcihzZWxmKToKKyAgICAgcmV0dXJuICI8JXMgYXQgMHgleDogJXM+IiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgaWQoc2VsZiksIHNlbGYpCitAQCAtNzEwLDYgKzcxMiwxMiBAQCBjbGFzcyBPcHRpb246CisgICAgICAgICAgICAgc2VsZi5hY3Rpb24sIHNlbGYuZGVzdCwgb3B0LCB2YWx1ZSwgdmFsdWVzLCBwYXJzZXIpCisgCisgICAgIGRlZiB0YWtlX2FjdGlvbihzZWxmLCBhY3Rpb24sIGRlc3QsIG9wdCwgdmFsdWUsIHZhbHVlcywgcGFyc2VyKToKKysgICAgICAgICMgS2VlcCBhbGwgdGhlIG9wdGlvbnMgaW4gdGhlIGNvbW1hbmQgbGluZSBpbiB0aGUgJ19naXZlbl9vcHRzJyBhcnJheQorKyAgICAgICAgIyBUaGlzIHdpbGwgYmUgdXNlZCBsYXRlciB0byB2YWxpZGF0ZSB0aGUgY29tbWFuZCBsaW5lCisrICAgICAgICBnaXZlbl9vcHRzID0gZ2V0YXR0cihwYXJzZXIudmFsdWVzLCAiX2dpdmVuX29wdHMiLCBbXSkKKysgICAgICAgIHVzZXJfb3B0ID0gcmUuc3ViKHIiXlwtKiIsICIiLCBvcHQpLnJlcGxhY2UoIi0iLCAiXyIpCisrICAgICAgICBnaXZlbl9vcHRzLmFwcGVuZCh1c2VyX29wdCkKKysgICAgICAgIHNldGF0dHIocGFyc2VyLnZhbHVlcywgIl9naXZlbl9vcHRzIiwgZ2l2ZW5fb3B0cykKKyAgICAgICAgIGlmIGFjdGlvbiA9PSAic3RvcmUiOgorICAgICAgICAgICAgIHNldGF0dHIodmFsdWVzLCBkZXN0LCB2YWx1ZSkKKyAgICAgICAgIGVsaWYgYWN0aW9uID09ICJzdG9yZV9jb25zdCI6CitAQCAtODIxLDYgKzgyOSw1NCBAQCBjbGFzcyBWYWx1ZXM6CisgICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBhdHRyLCB2YWx1ZSkKKyAgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYsIGF0dHIpCisgCisrICAgICMgQ2hlY2sgaWYgdGhlIGdpdmVuIG9wdGlvbiBoYXMgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgYXJndW1lbnRzCisrICAgICMgUmFpc2UgYW4gZXJyb3IgaWYgdGhlIG9wdGlvbiBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzCisrICAgICMgQSBuZWdhdGl2ZSBudW1iZXIgZm9yICduYXJncycgbWVhbnMgImF0IGxlYXN0IHxuYXJnc3wgYXJndW1lbnRzIGFyZSBuZWVkZWQiCisrICAgIGRlZiBjaGVja19hcmdzX29mX29wdGlvbihzZWxmLCBvcHQsIG5hcmdzLCBlcnI9Tm9uZSk6CisrICAgICAgICBnaXZlbl9vcHRzID0gZ2V0YXR0cihzZWxmLCAiX2dpdmVuX29wdHMiLCBbXSkKKysgICAgICAgIGlmIG5vdCBvcHQgaW4gZ2l2ZW5fb3B0czoKKysgICAgICAgICAgICByZXR1cm4KKysgICAgICAgIHZhbHVlcyA9IGdldGF0dHIoc2VsZiwgb3B0LCBbXSkKKysgICAgICAgIGlmIHR5cGUodmFsdWVzKSAhPSB0eXBlKFtdKToKKysgICAgICAgICAgICByZXR1cm4KKysgICAgICAgIGlmIG5hcmdzIDwgMDoKKysgICAgICAgICAgICBuYXJncyA9IC1uYXJncworKyAgICAgICAgICAgIGlmIGxlbih2YWx1ZXMpID49IG5hcmdzOgorKyAgICAgICAgICAgICAgICByZXR1cm4KKysgICAgICAgICAgICBpZiBub3QgZXJyOgorKyAgICAgICAgICAgICAgICBpZiBuYXJncyA9PSAxOgorKyAgICAgICAgICAgICAgICAgICAgZXJyID0gXygiT3B0aW9uICclcycgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IikgJSBvcHQKKysgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgIGVyciA9IF8oIk9wdGlvbiAnJXMnIHJlcXVpcmVzIGF0IGxlYXN0ICVkIGFyZ3VtZW50cyIpICUgKG9wdCwgbmFyZ3MpCisrICAgICAgICAgICAgcmFpc2UgRXJyb3IsIGVycgorKyAgICAgICAgZWxpZiBuYXJncyA9PSAwOgorKyAgICAgICAgICAgIGlmIGxlbiggdmFsdWVzICkgPT0gMDoKKysgICAgICAgICAgICAgICAgcmV0dXJuCisrICAgICAgICAgICAgcmFpc2UgRXJyb3IsIGVycgorKyAgICAgICAgZWxzZToKKysgICAgICAgICAgICBpZiBsZW4odmFsdWVzKSA9PSBuYXJnczoKKysgICAgICAgICAgICAgICAgcmV0dXJuCisrICAgICAgICAgICAgaWYgbm90IGVycjoKKysgICAgICAgICAgICAgICAgaWYgbmFyZ3MgPT0gMToKKysgICAgICAgICAgICAgICAgICAgIGVyciA9IF8oIk9wdGlvbiAnJXMnIHJlcXVpcmVzIG9uZSBhcmd1bWVudCIpICUgb3B0CisrICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICBlcnIgPSBfKCJPcHRpb24gJyVzJyByZXF1aXJlcyAlZCBhcmd1bWVudHMiKSAlIChvcHQsIG5hcmdzKQorKyAgICAgICAgICAgIHJhaXNlIEVycm9yLCBlcnIKKysKKysgICAgIyBDaGVjayB0aGF0IGF0IGxlYXN0IG9uZSBvZiB0aGUgb3B0aW9ucyBpbiAnYWN0bGlzdCcgd2FzIGdpdmVuIGFzIGFuIGFyZ3VtZW50CisrICAgICMgdG8gdGhlIGNvbW1hbmQgJ2NtZG5hbWUnCisrICAgIGRlZiBlbnN1cmVfYWN0aW9uKHNlbGYsIGNtZG5hbWUsIGFjdGxpc3QpOgorKyAgICAgICAgZ2l2ZW5fb3B0cyA9IGdldGF0dHIoc2VsZiwgIl9naXZlbl9vcHRzIiwgW10pCisrICAgICAgICBmb3IgYWN0aW9uIGluIGFjdGxpc3Q6CisrICAgICAgICAgICAgaWYgYWN0aW9uIGluIGdpdmVuX29wdHM6CisrICAgICAgICAgICAgICAgIHJldHVybgorKyAgICAgICAgcmFpc2UgRXJyb3IsIF8oIk5vIGFjdGlvbiBzcGVjaWZpZWQgZm9yIGNvbW1hbmQgJyVzJyIpICUgY21kbmFtZQorKworKyAgICAjIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgYXJndW1lbnRzIGxlZnQgYWZ0ZXIgcGFyc2luZyB0aGUgY29tbWFuZCBsaW5lIGFuZAorKyAgICAjIHJhaXNlIGFuIGVycm9yIGlmIHN1Y2ggYXJndW1lbnRzIGFyZSBmb3VuZAorKyAgICBkZWYgY2hlY2tfcmVtYWluaW5nX2FyZ3Moc2VsZik6CisrICAgICAgICBpZiBzZWxmLmFyZ3M6CisrICAgICAgICAgICAgcmFpc2UgRXJyb3IsIF8oIkludmFsaWQgYXJndW1lbnQocykgJyVzJyIgJSBzdHIoc2VsZi5hcmdzKSkKKyAKKyBjbGFzcyBPcHRpb25Db250YWluZXI6CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtcmVjb21tZW5kcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1yZWNvbW1lbmRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MDdmYzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtcmVjb21tZW5kcy5wYXRjaApAQCAtMCwwICsxLDM4MSBAQAorSGFuZGxlIHJlY29tbWVuZGVkIHBhY2thZ2VzIGluIGNvcmUgYW5kIHJwbSBiYWNrZW5kcworCitJZGVudGlmeSBhbmQgc3RvcmUgcmVjb21tZW5kZWQgcGFja2FnZXMgaW4gdGhlIGNhY2hlLCBhZGQgYSBxdWVyeSBvcHRpb24KK3RvIHJlYWQgdGhlbSBhbmQgaWdub3JlIHRoZW0gaWYgdGhleSBhcmUgbm90IHByZXNlbnQgd2hlbiBpbnN0YWxsaW5nLgorCitJbml0aWFsIGlkZW50aWZpY2F0aW9uIGNvZGUgZnJvbSBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9zbWFydC9iYWNrZW5kcy9ycG0vYmFzZS5weSBiL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5CitpbmRleCA5MzMyZWEwLi40ZmNmYmVlIDEwMDY0NAorLS0tIGEvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkKKysrKyBiL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5CitAQCAtMjI1LDYgKzIyNSw1MiBAQCBjbGFzcyBSUE1QYWNrYWdlKFBhY2thZ2UpOgorICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKysgICAgICAgIHNyZWNzID0gZmsoc2VsZi5yZWNvbW1lbmRzKQorKyAgICAgICAgb3JlY3MgPSBmayhvdGhlci5yZWNvbW1lbmRzKQorKyAgICAgICAgaWYgc3JlY3MgIT0gb3JlY3M6CisrICAgICAgICAgICAgZm9yIHNyZWMgaW4gc3JlY3M6CisrICAgICAgICAgICAgICAgIGlmIHNyZWMubmFtZVswXSA9PSAiLyIgb3Igc3JlYyBpbiBvcmVjczoKKysgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisrICAgICAgICAgICAgICAgIGZvciBvcmVjIGluIG9yZWNzOgorKyAgICAgICAgICAgICAgICAgICAgaWYgKHNyZWMubmFtZSA9PSBvcmVjLm5hbWUgYW5kCisrICAgICAgICAgICAgICAgICAgICAgICAgc3JlYy5yZWxhdGlvbiA9PSBvcmVjLnJlbGF0aW9uIGFuZAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrdmVyKHNyZWMudmVyc2lvbiwgb3JlYy52ZXJzaW9uKSk6CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorKyAgICAgICAgICAgIGZvciBvcmVjIGluIG9yZWNzOgorKyAgICAgICAgICAgICAgICBpZiBvcmVjLm5hbWVbMF0gPT0gIi8iIG9yIG9yZWMgaW4gc3JlY3M6CisrICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorKyAgICAgICAgICAgICAgICBmb3Igc3JlYyBpbiBzcmVjczoKKysgICAgICAgICAgICAgICAgICAgIGlmIChzcmVjLm5hbWUgPT0gb3JlYy5uYW1lIGFuZAorKyAgICAgICAgICAgICAgICAgICAgICAgIHNyZWMucmVsYXRpb24gPT0gb3JlYy5yZWxhdGlvbiBhbmQKKysgICAgICAgICAgICAgICAgICAgICAgICBjaGVja3ZlcihzcmVjLnZlcnNpb24sIG9yZWMudmVyc2lvbikpOgorKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKysgICAgICAgIHNyZWNzID0gZmsoc2VsZi5yZWNvbW1lbmRzKQorKyAgICAgICAgb3JlY3MgPSBmayhvdGhlci5yZWNvbW1lbmRzKQorKyAgICAgICAgaWYgc3JlY3MgIT0gb3JlY3M6CisrICAgICAgICAgICAgZm9yIHNyZWMgaW4gc3JlY3M6CisrICAgICAgICAgICAgICAgIGlmIHNyZWMubmFtZVswXSA9PSAiLyIgb3Igc3JlYyBpbiBvcmVjczoKKysgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisrICAgICAgICAgICAgICAgIGZvciBvcmVjIGluIG9yZWNzOgorKyAgICAgICAgICAgICAgICAgICAgaWYgKHNyZWMubmFtZSA9PSBvcmVjLm5hbWUgYW5kCisrICAgICAgICAgICAgICAgICAgICAgICAgc3JlYy5yZWxhdGlvbiA9PSBvcmVjLnJlbGF0aW9uIGFuZAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrdmVyKHNyZWMudmVyc2lvbiwgb3JlYy52ZXJzaW9uKSk6CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorKyAgICAgICAgICAgIGZvciBvcmVjIGluIG9yZWNzOgorKyAgICAgICAgICAgICAgICBpZiBvcmVjLm5hbWVbMF0gPT0gIi8iIG9yIG9yZWMgaW4gc3JlY3M6CisrICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorKyAgICAgICAgICAgICAgICBmb3Igc3JlYyBpbiBzcmVjczoKKysgICAgICAgICAgICAgICAgICAgIGlmIChzcmVjLm5hbWUgPT0gb3JlYy5uYW1lIGFuZAorKyAgICAgICAgICAgICAgICAgICAgICAgIHNyZWMucmVsYXRpb24gPT0gb3JlYy5yZWxhdGlvbiBhbmQKKysgICAgICAgICAgICAgICAgICAgICAgICBjaGVja3ZlcihzcmVjLnZlcnNpb24sIG9yZWMudmVyc2lvbikpOgorKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgIHJldHVybiBUcnVlCisgCisgICAgIGRlZiBjb2V4aXN0cyhzZWxmLCBvdGhlcik6CitkaWZmIC0tZ2l0IGEvc21hcnQvY2NhY2hlLmMgYi9zbWFydC9jY2FjaGUuYworaW5kZXggNzE5MzE4NS4uOGI2NjUxNSAxMDA2NDQKKy0tLSBhL3NtYXJ0L2NjYWNoZS5jCisrKysgYi9zbWFydC9jY2FjaGUuYworQEAgLTUwMCw2ICs1MDAsNDYgQEAgUGFja2FnZV9lcXVhbHMoUGFja2FnZU9iamVjdCAqc2VsZiwgUGFja2FnZU9iamVjdCAqb3RoZXIpCisgICAgICAgICB9CisgICAgIH0KKyAKKysgICAgaWxlbiA9IDA7CisrICAgIGpsZW4gPSAwOworKyAgICBmb3IgKGkgPSAwOyBpICE9IFB5TGlzdF9HRVRfU0laRShzZWxmLT5yZWNvbW1lbmRzKTsgaSsrKSB7CisrICAgICAgICBQeU9iamVjdCAqaXRlbSA9IFB5TGlzdF9HRVRfSVRFTShzZWxmLT5yZWNvbW1lbmRzLCBpKTsKKysgICAgICAgIGlmICghUHlPYmplY3RfSXNJbnN0YW5jZShpdGVtLCAoUHlPYmplY3QgKikmRGVwZW5kc19UeXBlKSkgeworKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJEZXBlbmRzIGluc3RhbmNlIGV4cGVjdGVkIik7CisrICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgICAgICB9CisrICAgICAgICBpZiAoU1RSKCgoRGVwZW5kc09iamVjdCAqKWl0ZW0pLT5uYW1lKVswXSAhPSAnLycpCisrICAgICAgICAgICAgaWxlbiArPSAxOworKyAgICB9CisrICAgIGZvciAoaiA9IDA7IGogIT0gUHlMaXN0X0dFVF9TSVpFKG90aGVyLT5yZWNvbW1lbmRzKTsgaisrKSB7CisrICAgICAgICBQeU9iamVjdCAqaXRlbSA9IFB5TGlzdF9HRVRfSVRFTShvdGhlci0+cmVjb21tZW5kcywgaik7CisrICAgICAgICBpZiAoIVB5T2JqZWN0X0lzSW5zdGFuY2UoaXRlbSwgKFB5T2JqZWN0ICopJkRlcGVuZHNfVHlwZSkpIHsKKysgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiRGVwZW5kcyBpbnN0YW5jZSBleHBlY3RlZCIpOworKyAgICAgICAgICAgIHJldHVybiBOVUxMOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKFNUUigoKERlcGVuZHNPYmplY3QgKilpdGVtKS0+bmFtZSlbMF0gIT0gJy8nKQorKyAgICAgICAgICAgIGpsZW4gKz0gMTsKKysgICAgfQorKyAgICBpZiAoaWxlbiAhPSBqbGVuKSB7CisrICAgICAgICByZXQgPSBQeV9GYWxzZTsKKysgICAgICAgIGdvdG8gZXhpdDsKKysgICAgfQorKworKyAgICBpbGVuID0gUHlMaXN0X0dFVF9TSVpFKHNlbGYtPnJlY29tbWVuZHMpOworKyAgICBqbGVuID0gUHlMaXN0X0dFVF9TSVpFKG90aGVyLT5yZWNvbW1lbmRzKTsKKysgICAgZm9yIChpID0gMDsgaSAhPSBpbGVuOyBpKyspIHsKKysgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUHlMaXN0X0dFVF9JVEVNKHNlbGYtPnJlY29tbWVuZHMsIGkpOworKyAgICAgICAgaWYgKFNUUigoKERlcGVuZHNPYmplY3QgKilpdGVtKS0+bmFtZSlbMF0gIT0gJy8nKSB7CisrICAgICAgICAgICAgZm9yIChqID0gMDsgaiAhPSBqbGVuOyBqKyspCisrICAgICAgICAgICAgICAgIGlmIChpdGVtID09IFB5TGlzdF9HRVRfSVRFTShvdGhlci0+cmVjb21tZW5kcywgaikpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBpZiAoaiA9PSBqbGVuKSB7CisrICAgICAgICAgICAgICAgIHJldCA9IFB5X0ZhbHNlOworKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICB9CisrCisgZXhpdDoKKyAgICAgUHlfSU5DUkVGKHJldCk7CisgICAgIHJldHVybiByZXQ7CitAQCAtMTgxMyw2ICsxODUzLDU5IEBAIExvYWRlcl9idWlsZFBhY2thZ2UoTG9hZGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKyAgICAgICAgIH0KKyAgICAgfQorIAorKyAgICAvKiBpZiByZWNhcmdzOiAqLworKyAgICBpZiAocmVjYXJncykgeworKyAgICAgICAgaW50IGkgPSAwOworKyAgICAgICAgaW50IGxlbiA9IFB5TGlzdF9HRVRfU0laRShyZWNhcmdzKTsKKysgICAgICAgIC8qIHBrZy5yZWNvbW1lbmRzID0gW10gKi8KKysgICAgICAgIFB5X0RFQ1JFRihwa2dvYmotPnJlY29tbWVuZHMpOworKyAgICAgICAgcGtnb2JqLT5yZWNvbW1lbmRzID0gUHlMaXN0X05ldyhsZW4pOworKyAgICAgICAgLyogZm9yIGFyZ3MgaW4gcmVjYXJnczogKi8KKysgICAgICAgIGZvciAoOyBpICE9IGxlbjsgaSsrKSB7CisrICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MgPSBQeUxpc3RfR0VUX0lURU0ocmVjYXJncywgaSk7CisrICAgICAgICAgICAgRGVwZW5kc09iamVjdCAqcmVjb2JqOworKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZWM7CisrICAgICAgICAgICAgCisrICAgICAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGFyZ3MpKSB7CisrICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSXRlbSBpbiByZWNhcmdzIGlzIG5vdCBhIHR1cGxlIik7CisrICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAvKiByZWMgPSBjYWNoZS5fb2JqbWFwLmdldChhcmdzKSAqLworKyAgICAgICAgICAgIHJlYyA9IFB5RGljdF9HZXRJdGVtKGNhY2hlLT5fb2JqbWFwLCBhcmdzKTsKKysgICAgICAgICAgICByZWNvYmogPSAoRGVwZW5kc09iamVjdCAqKXJlYzsKKysKKysgICAgICAgICAgICAvKiBpZiBub3QgcmVjOiAqLworKyAgICAgICAgICAgIGlmICghcmVjKSB7CisrICAgICAgICAgICAgICAgIGlmICghUHlUdXBsZV9DaGVjayhhcmdzKSB8fCBQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpIDwgMikgeworKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJJbnZhbGlkIHJlY2FyZ3MgdHVwbGUiKTsKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIC8qIHJlYyA9IGFyZ3NbMF0oKmFyZ3NbMTpdKSAqLworKyAgICAgICAgICAgICAgICBjYWxsYXJncyA9IFB5VHVwbGVfR2V0U2xpY2UoYXJncywgMSwgUHlUdXBsZV9HRVRfU0laRShhcmdzKSk7CisrICAgICAgICAgICAgICAgIHJlYyA9IFB5T2JqZWN0X0NhbGxPYmplY3QoUHlUdXBsZV9HRVRfSVRFTShhcmdzLCAwKSwgY2FsbGFyZ3MpOworKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY2FsbGFyZ3MpOworKyAgICAgICAgICAgICAgICBpZiAoIXJlYykgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgICAgIHJlY29iaiA9IChEZXBlbmRzT2JqZWN0ICopcmVjOworKworKyAgICAgICAgICAgICAgICAvKiBjYWNoZS5fb2JqbWFwW2FyZ3NdID0gcmVjICovCisrICAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtKGNhY2hlLT5fb2JqbWFwLCBhcmdzLCByZWMpOworKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVjKTsKKysKKysgICAgICAgICAgICAgICAgLyogY2FjaGUuX3JlY29tbWVuZHMuYXBwZW5kKHJlYykgKi8KKysgICAgICAgICAgICAgICAgUHlMaXN0X0FwcGVuZChjYWNoZS0+X3JlY29tbWVuZHMsIHJlYyk7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIC8qIHJlbHBrZ3MuYXBwZW5kKHJlYy5wYWNrYWdlcykgKi8KKysgICAgICAgICAgICBQeUxpc3RfQXBwZW5kKHJlbHBrZ3MsIHJlY29iai0+cGFja2FnZXMpOworKworKyAgICAgICAgICAgIC8qIHBrZy5yZWNvbW1lbmRzLmFwcGVuZChyZWMpICovCisrICAgICAgICAgICAgUHlfSU5DUkVGKHJlYyk7CisrICAgICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKHBrZ29iai0+cmVjb21tZW5kcywgaSwgcmVjKTsKKysgICAgICAgIH0KKysgICAgfQorKworICAgICAvKiBpZiB1cGdhcmdzOiAqLworICAgICBpZiAodXBnYXJncykgeworICAgICAgICAgaW50IGkgPSAwOworQEAgLTI1OTIsNiArMjY4NSwxNiBAQCBDYWNoZV9yZXNldChDYWNoZU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisgICAgICAgICBpZiAoUHlMaXN0X0NoZWNrKHJlcW9iai0+cHJvdmlkZWRieSkpCisgICAgICAgICAgICAgTElTVF9DTEVBUihyZXFvYmotPnByb3ZpZGVkYnkpOworICAgICB9CisrICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRShzZWxmLT5fcmVjb21tZW5kcyk7CisrICAgIGZvciAoaSA9IDA7IGkgIT0gbGVuOyBpKyspIHsKKysgICAgICAgIERlcGVuZHNPYmplY3QgKnJlcW9iajsKKysgICAgICAgIFB5T2JqZWN0ICpyZXE7CisrICAgICAgICByZXEgPSBQeUxpc3RfR0VUX0lURU0oc2VsZi0+X3JlY29tbWVuZHMsIGkpOworKyAgICAgICAgcmVxb2JqID0gKERlcGVuZHNPYmplY3QgKilyZXE7CisrICAgICAgICBMSVNUX0NMRUFSKHJlcW9iai0+cGFja2FnZXMpOworKyAgICAgICAgaWYgKFB5TGlzdF9DaGVjayhyZXFvYmotPnByb3ZpZGVkYnkpKQorKyAgICAgICAgICAgIExJU1RfQ0xFQVIocmVxb2JqLT5wcm92aWRlZGJ5KTsKKysgICAgfQorICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUoc2VsZi0+X3VwZ3JhZGVzKTsKKyAgICAgZm9yIChpID0gMDsgaSAhPSBsZW47IGkrKykgeworICAgICAgICAgRGVwZW5kc09iamVjdCAqdXBnb2JqOworQEAgLTI4MzQsNiArMjkzNywzMCBAQCBDYWNoZV9fcmVsb2FkKENhY2hlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKyAgICAgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICAgICAvKgorKyAgICAgICAgICAgICAgICAgICBmb3IgcmVjIGluIHBrZy5yZWNvbW1lbmRzOgorKyAgICAgICAgICAgICAgICAgICAgICAgcmVjLnBhY2thZ2VzLmFwcGVuZChwa2cpCisrICAgICAgICAgICAgICAgICAgICAgICBpZiByZWMgbm90IGluIHJlY29tbWVuZHM6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb21tZW5kc1tyZWNdID0gVHJ1ZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iam1hcFtyZWMuZ2V0SW5pdEFyZ3MoKV0gPSByZWMKKysgICAgICAgICAgICAgICAgKi8KKysgICAgICAgICAgICAgICAgaWYgKFB5TGlzdF9DaGVjayhwa2ctPnJlY29tbWVuZHMpKSB7CisrICAgICAgICAgICAgICAgICAgICBrbGVuID0gUHlMaXN0X0dFVF9TSVpFKHBrZy0+cmVjb21tZW5kcyk7CisrICAgICAgICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrICE9IGtsZW47IGsrKykgeworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpyZWMgPSBQeUxpc3RfR0VUX0lURU0ocGtnLT5yZWNvbW1lbmRzLCBrKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBQeUxpc3RfQXBwZW5kKCgoRGVwZW5kc09iamVjdCAqKXJlYyktPnBhY2thZ2VzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopcGtnKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVB5RGljdF9HZXRJdGVtKHJlY29tbWVuZHMsIHJlYykpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0ocmVjb21tZW5kcywgcmVjLCBQeV9UcnVlKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IFB5T2JqZWN0X0NhbGxNZXRob2QocmVjLCAiZ2V0SW5pdEFyZ3MiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdzKSByZXR1cm4gTlVMTDsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0ob2JqbWFwLCBhcmdzLCByZWMpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYXJncyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgIGZvciB1cGcgaW4gcGtnLnVwZ3JhZGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgdXBnLnBhY2thZ2VzLmFwcGVuZChwa2cpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB1cGcgbm90IGluIHVwZ3JhZGVzOgorQEAgLTMwOTcsNiArMzIyNCw0NyBAQCBDYWNoZV9saW5rRGVwcyhDYWNoZU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgfQorIAorKyAgICAvKiByZWNuYW1lcyA9IHt9ICovCisrICAgIHJlY25hbWVzID0gUHlEaWN0X05ldygpOworKyAgICAvKiBmb3IgcmVjIGluIHNlbGYuX3JlY29tbWVuZHM6ICovCisrICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRShzZWxmLT5fcmVjb21tZW5kcyk7CisrICAgIGZvciAoaSA9IDA7IGkgIT0gbGVuOyBpKyspIHsKKysgICAgICAgIFB5T2JqZWN0ICpyZWMgPSBQeUxpc3RfR0VUX0lURU0oc2VsZi0+X3JlY29tbWVuZHMsIGkpOworKworKyAgICAgICAgLyogZm9yIG5hbWUgaW4gcmVjLmdldE1hdGNoTmFtZXMoKTogKi8KKysgICAgICAgIFB5T2JqZWN0ICpuYW1lcyA9IFB5T2JqZWN0X0NhbGxNZXRob2QocmVjLCAiZ2V0TWF0Y2hOYW1lcyIsIE5VTEwpOworKyAgICAgICAgUHlPYmplY3QgKnNlcSA9IFB5U2VxdWVuY2VfRmFzdChuYW1lcywgImdldE1hdGNoTmFtZXMoKSByZXR1cm5lZCAiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm9uLXNlcXVlbmNlIG9iamVjdCIpOworKyAgICAgICAgaW50IG5hbWVzbGVuOworKyAgICAgICAgaWYgKCFzZXEpIHJldHVybiBOVUxMOworKyAgICAgICAgbmFtZXNsZW4gPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX1NJWkUoc2VxKTsKKysgICAgICAgIGZvciAoaiA9IDA7IGogIT0gbmFtZXNsZW47IGorKykgeworKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHNlcSwgaik7CisrICAgICAgICAgICAgCisrICAgICAgICAgICAgLyogbHN0ID0gcmVjbmFtZXMuZ2V0KG5hbWUpICovCisrICAgICAgICAgICAgbHN0ID0gUHlEaWN0X0dldEl0ZW0ocmVjbmFtZXMsIG5hbWUpOworKworKyAgICAgICAgICAgIC8qIAorKyAgICAgICAgICAgICAgIGlmIGxzdDoKKysgICAgICAgICAgICAgICAgICAgbHN0LmFwcGVuZChyZWMpCisrICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgcmVjbmFtZXNbbmFtZV0gPSBbcmVjXQorKyAgICAgICAgICAgICovCisrICAgICAgICAgICAgaWYgKGxzdCkgeworKyAgICAgICAgICAgICAgICBQeUxpc3RfQXBwZW5kKGxzdCwgcmVjKTsKKysgICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICAgICBsc3QgPSBQeUxpc3RfTmV3KDEpOworKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYocmVjKTsKKysgICAgICAgICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGxzdCwgMCwgcmVjKTsKKysgICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0ocmVjbmFtZXMsIG5hbWUsIGxzdCk7CisrICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsc3QpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysKKysgICAgICAgIFB5X0RFQ1JFRihuYW1lcyk7CisrICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKysgICAgfQorKworICAgICAvKiB1cGduYW1lcyA9IHt9ICovCisgICAgIHVwZ25hbWVzID0gUHlEaWN0X05ldygpOworICAgICAvKiBmb3IgdXBnIGluIHNlbGYuX3VwZ3JhZGVzOiAqLworQEAgLTMyODYsNiArMzQ1NCw1NiBAQCBDYWNoZV9saW5rRGVwcyhDYWNoZU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisgICAgICAgICAgICAgfQorICAgICAgICAgfQorIAorKyAgICAgICAgLyogbHN0ID0gcmVjbmFtZXMuZ2V0KHBydi5uYW1lKSAqLworKyAgICAgICAgbHN0ID0gUHlEaWN0X0dldEl0ZW0ocmVjbmFtZXMsIHBydi0+bmFtZSk7CisrCisrICAgICAgICAvKiBpZiBsc3Q6ICovCisrICAgICAgICBpZiAobHN0KSB7CisrICAgICAgICAgICAgLyogZm9yIHJlYyBpbiBsc3Q6ICovCisrICAgICAgICAgICAgaW50IHJlY2xlbiA9IFB5TGlzdF9HRVRfU0laRShsc3QpOworKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogIT0gcmVjbGVuOyBqKyspIHsKKysgICAgICAgICAgICAgICAgRGVwZW5kc09iamVjdCAqcmVjID0gKERlcGVuZHNPYmplY3QgKilQeUxpc3RfR0VUX0lURU0obHN0LCBqKTsKKysgICAgICAgICAgICAgICAgLyogaWYgcmVjLm1hdGNoZXMocHJ2KTogKi8KKysgICAgICAgICAgICAgICAgUHlPYmplY3QgKnJldCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoKFB5T2JqZWN0ICopcmVjLCAibWF0Y2hlcyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPIiwgKFB5T2JqZWN0ICopcHJ2KTsKKysgICAgICAgICAgICAgICAgaWYgKCFyZXQpIHJldHVybiBOVUxMOworKyAgICAgICAgICAgICAgICBpZiAoUHlPYmplY3RfSXNUcnVlKHJldCkpIHsKKysgICAgICAgICAgICAgICAgICAgIC8qCisrICAgICAgICAgICAgICAgICAgICAgICBpZiByZWMucHJvdmlkZWRieToKKysgICAgICAgICAgICAgICAgICAgICAgICAgICByZWMucHJvdmlkZWRieS5hcHBlbmQocHJ2KQorKyAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgICAgICAgICByZWMucHJvdmlkZWRieSA9IFtwcnZdCisrICAgICAgICAgICAgICAgICAgICAqLworKyAgICAgICAgICAgICAgICAgICAgaWYgKFB5TGlzdF9DaGVjayhyZWMtPnByb3ZpZGVkYnkpKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgUHlMaXN0X0FwcGVuZChyZWMtPnByb3ZpZGVkYnksIChQeU9iamVjdCAqKXBydik7CisrICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpfbHN0ID0gUHlMaXN0X05ldygxKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYocHJ2KTsKKysgICAgICAgICAgICAgICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0oX2xzdCwgMCwgKFB5T2JqZWN0ICopcHJ2KTsKKysgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVjLT5wcm92aWRlZGJ5KTsKKysgICAgICAgICAgICAgICAgICAgICAgICByZWMtPnByb3ZpZGVkYnkgPSBfbHN0OworKyAgICAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICAgICAgLyoKKysgICAgICAgICAgICAgICAgICAgICAgIGlmIHBydi5yZWNvbW1lbmRlZGJ5OgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydi5yZWNvbW1lbmRlZGJ5LmFwcGVuZChwcnYpCisrICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydi5yZWNvbW1lbmRlZGJ5ID0gW3Bydl0KKysgICAgICAgICAgICAgICAgICAgICovCisrICAgICAgICAgICAgICAgICAgICBpZiAoUHlMaXN0X0NoZWNrKHBydi0+cmVjb21tZW5kZWRieSkpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBQeUxpc3RfQXBwZW5kKHBydi0+cmVjb21tZW5kZWRieSwgKFB5T2JqZWN0ICopcmVjKTsKKysgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKl9sc3QgPSBQeUxpc3RfTmV3KDEpOworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihyZWMpOworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShfbHN0LCAwLCAoUHlPYmplY3QgKilyZWMpOworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihwcnYtPnJlY29tbWVuZGVkYnkpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHBydi0+cmVjb21tZW5kZWRieSA9IF9sc3Q7CisrICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJldCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworICAgICAgICAgLyogbHN0ID0gdXBnbmFtZXMuZ2V0KHBydi5uYW1lKSAqLworICAgICAgICAgbHN0ID0gUHlEaWN0X0dldEl0ZW0odXBnbmFtZXMsIHBydi0+bmFtZSk7CisgCitAQCAtMzgyMSw2ICs0MDk0LDIxIEBAIENhY2hlX19zZXRzdGF0ZV9fKENhY2hlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc3RhdGUpCisgICAgICAgICB9CisgCisgICAgICAgICAvKgorKyAgICAgICAgICAgZm9yIHJlYyBpbiBwa2cucmVjb21tZW5kczoKKysgICAgICAgICAgICAgICByZWMucGFja2FnZXMuYXBwZW5kKHBrZykKKysgICAgICAgICAgICAgICByZWNvbW1lbmRzW3JlY10gPSBUcnVlCisrICAgICAgICAqLworKyAgICAgICAgaWYgKFB5TGlzdF9DaGVjayhwa2dvYmotPnJlY29tbWVuZHMpKSB7CisrICAgICAgICAgICAgamxlbiA9IFB5TGlzdF9HRVRfU0laRShwa2dvYmotPnJlY29tbWVuZHMpOworKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogIT0gamxlbjsgaisrKSB7CisrICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpyZWMgPSBQeUxpc3RfR0VUX0lURU0ocGtnb2JqLT5yZWNvbW1lbmRzLCBqKTsKKysgICAgICAgICAgICAgICAgRGVwZW5kc09iamVjdCAqcmVjb2JqID0gKERlcGVuZHNPYmplY3QgKilyZWM7CisrICAgICAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQocmVjb2JqLT5wYWNrYWdlcywgcGtnKTsKKysgICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0ocmVjb21tZW5kcywgcmVjLCBQeV9UcnVlKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICAvKgorICAgICAgICAgICAgZm9yIHVwZyBpbiBwa2cudXBncmFkZXM6CisgICAgICAgICAgICAgICAgdXBnLnBhY2thZ2VzLmFwcGVuZChwa2cpCisgICAgICAgICAgICAgICAgdXBncmFkZXNbdXBnXSA9IFRydWUKK2RpZmYgLS1naXQgYS9zbWFydC9jb21tYW5kcy9xdWVyeS5weSBiL3NtYXJ0L2NvbW1hbmRzL3F1ZXJ5LnB5CitpbmRleCA5MjY1Y2Q5Li5iNmY1Njk3IDEwMDY0NAorLS0tIGEvc21hcnQvY29tbWFuZHMvcXVlcnkucHkKKysrKyBiL3NtYXJ0L2NvbW1hbmRzL3F1ZXJ5LnB5CitAQCAtNzUwLDYgKzc1MCwyMiBAQCBjbGFzcyBUZXh0T3V0cHV0KE51bGxPdXRwdXQpOgorICAgICAgICAgICAgIG5hbWUgPSBzdHIocHJ2cGtnKQorICAgICAgICAgcHJpbnQgIiAgICAgICAiLCAiJXMgKCVzKSIgJSAobmFtZSwgcHJ2KQorIAorKyAgICBkZWYgc2hvd1JlY29tbWVuZHMoc2VsZiwgcGtnLCByZWMpOgorKyAgICAgICAgaWYgc2VsZi5fZmlyc3RyZWNvbW1lbmRzOgorKyAgICAgICAgICAgIHNlbGYuX2ZpcnN0cmVjb21tZW5kcyA9IEZhbHNlCisrICAgICAgICAgICAgcHJpbnQgIiAiLCBfKCJSZWNvbW1lbmRzOiIpCisrICAgICAgICBwcmludCAiICAgIiwgcmVjCisrCisrICAgIGRlZiBzaG93UmVjb21tZW5kc1Byb3ZpZGVkQnkoc2VsZiwgcGtnLCByZXEsIHBydiwgcHJ2cGtnKToKKysgICAgICAgIGlmIHNlbGYuX2ZpcnN0cmVjb21tZW5kc3Byb3ZpZGVkYnk6CisrICAgICAgICAgICAgc2VsZi5fZmlyc3RyZWNvbW1lbmRzcHJvdmlkZWRieSA9IEZhbHNlCisrICAgICAgICAgICAgcHJpbnQgIiAgICAgIiwgXygiUHJvdmlkZWQgQnk6IikKKysgICAgICAgIGlmIHNlbGYub3B0cy5oaWRlX3ZlcnNpb246CisrICAgICAgICAgICAgbmFtZSA9IHBydnBrZy5uYW1lCisrICAgICAgICBlbHNlOgorKyAgICAgICAgICAgIG5hbWUgPSBzdHIocHJ2cGtnKQorKyAgICAgICAgcHJpbnQgIiAgICAgICAiLCAiJXMgKCVzKSIgJSAobmFtZSwgcHJ2KQorKworICAgICBkZWYgc2hvd1VwZ3JhZGVzKHNlbGYsIHBrZywgdXBnKToKKyAgICAgICAgIGlmIHNlbGYuX2ZpcnN0dXBncmFkZXM6CisgICAgICAgICAgICAgc2VsZi5fZmlyc3R1cGdyYWRlcyA9IEZhbHNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtcnBtNC1maXhlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1ycG00LWZpeGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwOGZmZTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtcnBtNC1maXhlcy5wYXRjaApAQCAtMCwwICsxLDQ5IEBACisKK1RoaXMgcGF0Y2ggY2hlY2tzIGZvciBycG01IHJlbGF0ZWQgZnVuY3Rpb25zIGluIG9yZGVyIHRvIGFsbG93IHJwbTQgCit0byB3b3JrIGNvcnJlY3RseS4gQ3VycmVudGx5IHRoZSBycG00IGFyY2hzY29yZSBhbmQgZmlsdGVyIHdvcmsKK2RpZmZlcmVudGx5IGVub3VnaCB0aGF0IHRoZXkgbmVlZCB0byBiZSBjaGFuZ2VkLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLUNvcmUgU3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IHNtYXJ0LTEuNC4xL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc21hcnQtMS40LjEub3JpZy9zbWFydC9iYWNrZW5kcy9ycG0vYmFzZS5weQorKysrIHNtYXJ0LTEuNC4xL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5CitAQCAtMzM4LDEwICszMzgsMTQgQEAgY2xhc3MgUlBNT2Jzb2xldGVzKERlcGVuZHMpOgorIAorIF9TQ09SRU1BUCA9IHt9CisgZGVmIGdldEFyY2hTY29yZShhcmNoLCBfc209X1NDT1JFTUFQKToKKy0gICAgaWYgYXJjaCBub3QgaW4gX3NtOgorLSAgICAgICAgc2NvcmUgPSBycG0uYXJjaHNjb3JlKGFyY2gpCistICAgICAgICBfc21bYXJjaF0gPSBzY29yZQorLSAgICByZXR1cm4gX3NtLmdldChhcmNoLCAwKQorKyAgICB0cnk6CisrICAgICAgICBycG0ucGxhdGZvcm1zY29yZShhcmNoKQorKyAgICAgICAgaWYgYXJjaCBub3QgaW4gX3NtOgorKyAgICAgICAgICAgIHNjb3JlID0gcnBtLmFyY2hzY29yZShhcmNoKQorKyAgICAgICAgICAgIF9zbVthcmNoXSA9IHNjb3JlCisrICAgICAgICByZXR1cm4gX3NtLmdldChhcmNoLCAwKQorKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisrICAgICAgICByZXR1cm4gMQorIAorICMgVE9ETzogRW1iZWQgY29sb3IgaW50byBuYW1lcHJvdmlkZXMgYW5kIG9ic29sZXRlcyByZWxhdGlvbnMuCisgX0NPTE9STUFQID0geyJub2FyY2giOiAwLCAieDg2XzY0IjogMiwgInBwYzY0IjogMiwgInMzOTB4IjogMiwgInNwYXJjNjQiOiAyfQorSW5kZXg6IHNtYXJ0LTEuNC4xL3NtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNtYXJ0LTEuNC4xLm9yaWcvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5CisrKysgc21hcnQtMS40LjEvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5CitAQCAtMjM1LDYgKzIzNSwxMiBAQCBjbGFzcyBSUE1QYWNrYWdlTWFuYWdlcihQYWNrYWdlTWFuYWdlcik6CisgICAgICAgICBpZiBzeXNjb25mLmdldCgicnBtLW9yZGVyIik6CisgICAgICAgICAgICAgdHMub3JkZXIoKQorICAgICAgICAgcHJvYmZpbHRlciA9IHJwbS5SUE1QUk9CX0ZJTFRFUl9PTERQQUNLQUdFCisrICAgICAgICB0cnk6CisrICAgICAgICAgICAgIyBUZXN0IGZvciBSUE01IGZ1bmN0aW9uCisrICAgICAgICAgICAgcnBtLnBsYXRmb3Jtc2NvcmUoIiIpCisrICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisrICAgICAgICAgICAgcHJvYmZpbHRlciB8PSBycG0uUlBNUFJPQl9GSUxURVJfSUdOT1JFQVJDSAorKworICAgICAgICAgaWYgZm9yY2Ugb3IgcmVpbnN0YWxsOgorICAgICAgICAgICAgIHByb2JmaWx0ZXIgfD0gcnBtLlJQTVBST0JfRklMVEVSX1JFUExBQ0VQS0cKKyAgICAgICAgICAgICBwcm9iZmlsdGVyIHw9IHJwbS5SUE1QUk9CX0ZJTFRFUl9SRVBMQUNFT0xERklMRVMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1zZXQtbm9wcm9ncmVzcy1mb3ItcHljdXJsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LXNldC1ub3Byb2dyZXNzLWZvci1weWN1cmwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg4NTk5OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1zZXQtbm9wcm9ncmVzcy1mb3ItcHljdXJsLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1NldCBOT1BST0dSRVNTIGZvciBweWN1cmwganVzdCBhcyBzYW1lIGFzIGRlZmF1bHQgb3BlcmF0aW9uIGluIHB5Y3VybCBtb2R1bGUgaXRzZWxmLgorSWYgc2V0IE5PUFJPR1JFU1Mgd2l0aCAwIGZvciBweWN1cmwsIGl0IGNhdXNlcyBkZWFkIGxvY2sgaXNzdWUgb2YgUHl0aG9uIEdJTCB3aGVuCitjYWxsIHNtYXJ0IGxpYnJhcnkgYnkgcHl0aG9uIGd1aSBqdXN0IGxpa2UgcHlndGsuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorZGlmZiAtdSBzbWFydC0xLjQuMS9zbWFydC5vcmlnL2ZldGNoZXIucHkgc21hcnQtMS40LjEvc21hcnQvZmV0Y2hlci5weQorLS0tIHNtYXJ0LTEuNC4xL3NtYXJ0Lm9yaWcvZmV0Y2hlci5weQkyMDE0LTA3LTE1IDE2OjQyOjE5LjI0MDQzNzA4MCArMDgwMAorKysrIHNtYXJ0LTEuNC4xL3NtYXJ0L2ZldGNoZXIucHkJMjAxNC0wNy0xNSAxNzowMjozNy44MTI0NzAyODkgKzA4MDAKK0BAIC0xNzIwLDcgKzE3MjAsNyBAQAorICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS5zZXRvcHQocHljdXJsLk9QVF9GSUxFVElNRSwgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUuc2V0b3B0KHB5Y3VybC5MT1dfU1BFRURfTElNSVQsIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLnNldG9wdChweWN1cmwuTE9XX1NQRUVEX1RJTUUsIFNPQ0tFVFRJTUVPVVQpCistICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLnNldG9wdChweWN1cmwuTk9QUk9HUkVTUywgMCkKKysgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUuc2V0b3B0KHB5Y3VybC5OT1BST0dSRVNTLCAxKQorICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS5zZXRvcHQocHljdXJsLlBST0dSRVNTRlVOQ1RJT04sIHByb2dyZXNzKQorICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS5zZXRvcHQocHljdXJsLldSSVRFREFUQSwgbG9jYWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLnNldG9wdChweWN1cmwuRk9MTE9XTE9DQVRJT04sIDEpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnRwbS1ycG01LW5vZGlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0cG0tcnBtNS1ub2RpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWZiMjlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0cG0tcnBtNS1ub2RpZy5wYXRjaApAQCAtMCwwICsxLDU5IEBACitSUE01IGhhcyByZW1vdmVkIHN1cHBvcnQgZm9yIFJQTVZTRl9OT1NJR05BVFVSRVMKKworUGF0Y2ggc21hcnQgdG8gbm8gbG9uZ2VyIHVzZSB0aGlzIGZsYWcKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5IGIvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkKKy0tLSBhL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5CisrKysgYi9zbWFydC9iYWNrZW5kcy9ycG0vYmFzZS5weQorQEAgLTYzLDExICs2MywxMSBAQCBkZWYgZ2V0VFMobmV3PUZhbHNlKToKKyAgICAgICAgIGlmIHN5c2NvbmYuZ2V0KCJycG0tZGJwYXRoIik6CisgICAgICAgICAgICAgcnBtLmFkZE1hY3JvKCdfZGJwYXRoJywgIi8iICsgc3lzY29uZi5nZXQoInJwbS1kYnBhdGgiKSkKKyAgICAgICAgIGdldFRTLnRzID0gcnBtLnRzKGdldFRTLnJvb3QpCistICAgICAgICBpZiBub3Qgc3lzY29uZi5nZXQoInJwbS1jaGVjay1zaWduYXR1cmVzIiwgRmFsc2UpOgorLSAgICAgICAgICAgIGlmIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT1NJR05BVFVSRVMnKToKKy0gICAgICAgICAgICAgICAgZ2V0VFMudHMuc2V0VlNGbGFncyhycG0uX1JQTVZTRl9OT1NJR05BVFVSRVMpCistICAgICAgICAgICAgZWxzZToKKy0gICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IsIF8oInJwbSByZXF1aXJlcyBjaGVja2luZyBzaWduYXR1cmVzIikKKysgICAgICAgICNpZiBub3Qgc3lzY29uZi5nZXQoInJwbS1jaGVjay1zaWduYXR1cmVzIiwgRmFsc2UpOgorKyAgICAgICAgIyAgICBpZiBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9TSUdOQVRVUkVTJyk6CisrICAgICAgICAjICAgICAgICBnZXRUUy50cy5zZXRWU0ZsYWdzKHJwbS5fUlBNVlNGX05PU0lHTkFUVVJFUykKKysgICAgICAgICMgICAgZWxzZToKKysgICAgICAgICMgICAgICAgIHJhaXNlIEVycm9yLCBfKCJycG0gcmVxdWlyZXMgY2hlY2tpbmcgc2lnbmF0dXJlcyIpCisgICAgICAgICBycG1fZGJwYXRoID0gc3lzY29uZi5nZXQoInJwbS1kYnBhdGgiLCAidmFyL2xpYi9ycG0iKQorICAgICAgICAgZGJkaXIgPSBycG1fam9pbl9kYnBhdGgoZ2V0VFMucm9vdCwgcnBtX2RicGF0aCkKKyAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGRiZGlyKToKK0BAIC04OSwxMSArODksMTEgQEAgZGVmIGdldFRTKG5ldz1GYWxzZSk6CisgICAgICAgICBpZiBzeXNjb25mLmdldCgicnBtLWRicGF0aCIpOgorICAgICAgICAgICAgIHJwbS5hZGRNYWNybygnX2RicGF0aCcsICIvIiArIHN5c2NvbmYuZ2V0KCJycG0tZGJwYXRoIikpCisgICAgICAgICB0cyA9IHJwbS50cyhnZXRUUy5yb290KQorLSAgICAgICAgaWYgbm90IHN5c2NvbmYuZ2V0KCJycG0tY2hlY2stc2lnbmF0dXJlcyIsIEZhbHNlKToKKy0gICAgICAgICAgICBpZiBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9TSUdOQVRVUkVTJyk6CistICAgICAgICAgICAgICAgIHRzLnNldFZTRmxhZ3MocnBtLl9SUE1WU0ZfTk9TSUdOQVRVUkVTKQorLSAgICAgICAgICAgIGVsc2U6CistICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yLCBfKCJycG0gcmVxdWlyZXMgY2hlY2tpbmcgc2lnbmF0dXJlcyIpCisrICAgICAgICAjaWYgbm90IHN5c2NvbmYuZ2V0KCJycG0tY2hlY2stc2lnbmF0dXJlcyIsIEZhbHNlKToKKysgICAgICAgICMgICAgaWYgaGFzYXR0cihycG0sICdfUlBNVlNGX05PU0lHTkFUVVJFUycpOgorKyAgICAgICAgIyAgICAgICAgdHMuc2V0VlNGbGFncyhycG0uX1JQTVZTRl9OT1NJR05BVFVSRVMpCisrICAgICAgICAjICAgIGVsc2U6CisrICAgICAgICAjICAgICAgICByYWlzZSBFcnJvciwgXygicnBtIHJlcXVpcmVzIGNoZWNraW5nIHNpZ25hdHVyZXMiKQorICAgICAgICAgcmV0dXJuIHRzCisgICAgIGVsc2U6CisgICAgICAgICByZXR1cm4gZ2V0VFMudHMKK2RpZmYgLS1naXQgYS9zbWFydC9wbHVnaW5zL3l1bWNoYW5uZWxzeW5jLnB5IGIvc21hcnQvcGx1Z2lucy95dW1jaGFubmVsc3luYy5weQorLS0tIGEvc21hcnQvcGx1Z2lucy95dW1jaGFubmVsc3luYy5weQorKysrIGIvc21hcnQvcGx1Z2lucy95dW1jaGFubmVsc3luYy5weQorQEAgLTU2LDggKzU2LDggQEAgZGVmIF9nZXRyZWxlYXNldmVyKCk6CisgCisgICAgIHJwbXJvb3QgPSBzeXNjb25mLmdldCgicnBtLXJvb3QiLCAiLyIpCisgICAgIHRzID0gcnBtVXRpbHMudHJhbnNhY3Rpb24uaW5pdFJlYWRPbmx5VHJhbnNhY3Rpb24ocm9vdD1ycG1yb290KQorLSAgICBpZiBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9TSUdOQVRVUkVTJykgYW5kIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT0RJR0VTVFMnKToKKy0gICAgICAgIHRzLnB1c2hWU0ZsYWdzKH4ocnBtLl9SUE1WU0ZfTk9TSUdOQVRVUkVTfHJwbS5fUlBNVlNGX05PRElHRVNUUykpCisrICAgICNpZiBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9TSUdOQVRVUkVTJykgYW5kIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT0RJR0VTVFMnKToKKysgICAgIyAgICB0cy5wdXNoVlNGbGFncyh+KHJwbS5fUlBNVlNGX05PU0lHTkFUVVJFU3xycG0uX1JQTVZTRl9OT0RJR0VTVFMpKQorICAgICByZWxlYXNldmVyID0gTm9uZQorICAgICAjIEhBQ0s6IHdlJ3JlIGhhcmQtY29kaW5nIHRoZSBtb3N0IHVzZWQgZGlzdHJvcywgd2lsbCBhZGQgbW9yZSBpZiBuZWVkZWQKKyAgICAgaWR4ID0gdHMuZGJNYXRjaCgncHJvdmlkZXMnLCAnZmVkb3JhLXJlbGVhc2UnKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI5NzRiMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbV9naXQuYmIKQEAgLTAsMCArMSwxMzkgQEAKK1NVTU1BUlkgPSAiVGhlIFNtYXJ0IFBhY2thZ2UgTWFuYWdlciIKK0RFU0NSSVBUSU9OID0gIlRoZSBTbWFydCBQYWNrYWdlIE1hbmFnZXIgcHJvamVjdCBoYXMgdGhlIGFtYml0aW91cyBvYmplY3RpdmUgb2YgY3JlYXRpbmcgXAorc21hcnQgYW5kIHBvcnRhYmxlIGFsZ29yaXRobXMgZm9yIHNvbHZpbmcgYWRlcXVhdGVseSB0aGUgcHJvYmxlbSBvZiBtYW5hZ2luZyBzb2Z0d2FyZSBcCit1cGdyYWRlcyBhbmQgaW5zdGFsbGF0aW9uLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL2xhYml4Lm9yZy9zbWFydC8iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0zOTNhNWNhNDQ1ZjY5NjU4NzNlY2EwMjU5YTE3ZjgzMyIKKworREVQRU5EUyA9ICJweXRob24gcnBtIGdldHRleHQtbmF0aXZlIHB5dGhvbi1ycG0iCitTUkNOQU1FID0gInNtYXJ0IgorCitTUkNfVVJJID0gIlwKKyAgICAgICAgICBnaXQ6Ly9naXRodWIuY29tL3NtYXJ0cG0vc21hcnQuZ2l0IFwKKyAgICAgICAgICBmaWxlOi8vc21hcnRwbS1ycG01LW5vZGlnLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vc21hcnQtcmVjb21tZW5kcy5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL3NtYXJ0LWltcHJvdmUtZXJyb3ItcmVwb3J0aW5nLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vc21hcnQtY2hhbm5lbHNkaXIucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9zbWFydC1hdHRlbXB0LnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vc21hcnQtYXR0ZW1wdC1maXgucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9zbWFydC1ycG00LWZpeGVzLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vc21hcnQtYWRkLWZvci1ycG0taWdub3Jlc2l6ZS1jaGVjay5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL3NtYXJ0LWFscmVhZHktaW5zdGFsbGVkLW1lc3NhZ2UucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9zbWFydC1zZXQtbm9wcm9ncmVzcy1mb3ItcHljdXJsLnBhdGNoIFwKKyAgICAgICAgICIKKworU1JDUkVWID0gIjQwN2E3ZWNhNzY2NDMxMjU3ZGNkMWRhMTUxNzVjYzM2YTFiYjIyZDAiCitQViA9ICIxLjUrZ2l0JHtTUkNQVn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKKyMgT3B0aW9ucyAtIHJwbSwgcXQ0LCBndGsKK1BBQ0tBR0VDT05GSUcgPz89ICJycG0iCisKK1JQTV9SREVQID0gIiR7UE59LWJhY2tlbmQtcnBtIgorUVRfUkRFUCA9ICIke1BOfS1pbnRlcmZhY2UtcXQ0IgorR1RLX1JERVAgPSAiJHtQTn0taW50ZXJmYWNlLWd0ayIKKworUlBNX1JERVBfY2xhc3MtbmF0aXZlID0gIiIKK1FUX1JERVBfY2xhc3MtbmF0aXZlID0gIiIKK0dUS19SREVQX2NsYXNzLW5hdGl2ZSA9ICIiCisKK1JQTV9SREVQX2NsYXNzLW5hdGl2ZXNkayA9ICIiCitRVF9SREVQX2NsYXNzLW5hdGl2ZXNkayA9ICIiCitHVEtfUkRFUF9jbGFzcy1uYXRpdmVzZGsgPSAiIgorCitQQUNLQUdFQ09ORklHW3JwbV0gPSAiLCxycG0sJHtSUE1fUkRFUH0iCitQQUNLQUdFQ09ORklHW3F0NF0gPSAiLCxxdDQteDExLCR7UVRfUkRFUH0iCitQQUNLQUdFQ09ORklHW2d0a10gPSAiLCxndGsrLCR7R1RLX1JERVB9IgorCitpbmhlcml0IGRpc3R1dGlscworCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICMgV2UgZG9uJ3Qgc3VwcG9ydCB0aGUgZm9sbG93aW5nIGl0ZW1zCisgICBybSAtcmYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvYmFja2VuZHMvc2xhY2sKKyAgIHJtIC1yZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9iYWNrZW5kcy9hcmNoCisgICBybSAtcmYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvaW50ZXJmYWNlcy9xdAorCisgICAjIFRlbXBvcmFyeSwgZGViaWFuIHN1cHBvcnQgaW4gT0UgaXMgbWlzc2luZyB0aGUgcHl0aG9uIG1vZHVsZQorICAgcm0gLWYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvcGx1Z2lucy9hcHRjaGFubmVsc3luYy5weSoKKyAgIHJtIC1mICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L3BsdWdpbnMvZGViZGlyLnB5KgorICAgcm0gLXJmICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2JhY2tlbmRzL2RlYgorCisgICAjIERpc2FibGUgYXV0b21hdGljIGNoYW5uZWwgZGV0ZWN0aW9uCisgICBybSAtZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9wbHVnaW5zL2RldGVjdHN5cy5weSoKKworICAgIyBEaXNhYmxlIGxhbmRzY2FwZSBzdXBwb3J0CisgICBybSAtZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9wbHVnaW5zL2xhbmRzY2FwZS5weSoKKworICAgIyBEaXNhYmxlIHVycG1pIGNoYW5uZWwgc3VwcG9ydAorICAgcm0gLWYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvcGx1Z2lucy91cnBtaWNoYW5uZWxzeW5jLnB5KgorCisgICAjIERpc2FibGUgeXVtIGNoYW5uZWwgc3VwcG9ydAorICAgcm0gLWYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvcGx1Z2lucy95dW1jaGFubmVsc3luYy5weSoKKworICAgIyBEaXNhYmxlIHp5cHBlciBjaGFubmVsIHN1cHBvcnQKKyAgIHJtIC1mICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L3BsdWdpbnMvenlwcGNoYW5uZWxzeW5jLnB5KgorCisgICBpZiBbIC16ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdycG0nLCAncnBtJywgJycsIGQpfSIgXTsgdGhlbgorICAgICAgcm0gLWYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvcGx1Z2lucy9ycG1kaXIucHkqCisgICAgICBybSAtcmYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvYmFja2VuZHMvcnBtCisgICBmaQorCisgICBpZiBbIC16ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdxdDQnLCAncXQ0JywgJycsIGQpfSIgXTsgdGhlbgorICAgICAgcm0gLXJmICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2ludGVyZmFjZXMvcXQ0CisgICBmaQorCisgICBpZiBbIC16ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdndGsrJywgJ2d0aycsICcnLCBkKX0iIF07IHRoZW4KKyAgICAgIHJtIC1yZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9pbnRlcmZhY2VzL2d0aworICAgZmkKK30KKworYWRkX25hdGl2ZV93cmFwcGVyKCkgeworICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9zbWFydCBcCisJCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKKwkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCisJCVJQTV9MT0NBTEVESVJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L2xvY2FsZQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisgICAgICAgIHNlZCAtaSAtZSAnc3xeIyEuKi91c3IvYmluL2VudiBweXRob258IyEgL3Vzci9iaW4vZW52IG5hdGl2ZXB5dGhvbnwnICR7RH0ke2JpbmRpcn0vc21hcnQKKyAgICAgICAgYWRkX25hdGl2ZV93cmFwcGVyCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKyAgICAgICAgYWRkX25hdGl2ZV93cmFwcGVyCit9CisKK1BBQ0tBR0VTID0gIiR7UE59LWRldiAke1BOfS1kYmcgJHtQTn0tZG9jIHNtYXJ0cG0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncnBtJywgJyR7UE59LWJhY2tlbmQtcnBtJywgJycsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdxdDQnLCAnJHtQTn0taW50ZXJmYWNlLXF0NCcsICcnLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZ3RrJywgJyR7UE59LWludGVyZmFjZS1ndGsnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICR7UE59LWludGVyZmFjZS1pbWFnZXMgJHtQTn0iCisKK1JERVBFTkRTX3NtYXJ0cG0gPSAiJHtQTn0iCisKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1iYWNrZW5kLXJwbSBweXRob24tY29kZWNzIHB5dGhvbi10ZXh0dXRpbHMgcHl0aG9uLXhtbCBweXRob24tZmNudGwgXAorICAgICAgICAgICAgICAgICAgIHB5dGhvbi1waWNrbGUgcHl0aG9uLWNyeXB0IHB5dGhvbi1jb21wcmVzc2lvbiBweXRob24tc2hlbGwgXAorICAgICAgICAgICAgICAgICAgIHB5dGhvbi1yZXNvdXJjZSBweXRob24tbmV0Y2xpZW50IHB5dGhvbi10aHJlYWRpbmcgcHl0aG9uLXVuaXhhZG1pbiBweXRob24tcHByaW50IgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKKworUkRFUEVORFNfJHtQTn0tYmFja2VuZC1ycG0gPSAicHl0aG9uLXJwbSIKKworUkRFUEVORFNfJHtQTn0taW50ZXJmYWNlLXF0NCA9ICJxdDQteDExICR7UE59LWludGVyZmFjZS1pbWFnZXMiCitSREVQRU5EU18ke1BOfS1pbnRlcmZhY2UtZ3RrID0gImd0aysgJHtQTn0taW50ZXJmYWNlLWltYWdlcyIKKworRklMRVNfc21hcnRwbSA9ICIke2JpbmRpcn0vc21hcnQiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9iYWNrZW5kcy9ycG0vLmRlYnVnIgorCitGSUxFU18ke1BOfS1iYWNrZW5kLXJwbSA9ICIke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2JhY2tlbmRzL3JwbSIKKworRklMRVNfJHtQTn0taW50ZXJmYWNlLXF0NCA9ICIke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2ludGVyZmFjZXMvcXQ0IgorRklMRVNfJHtQTn0taW50ZXJmYWNlLWd0ayA9ICIke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2ludGVyZmFjZXMvZ3RrIgorRklMRVNfJHtQTn0taW50ZXJmYWNlLWltYWdlcyA9ICIke2RhdGFkaXJ9LyR7YmFzZWxpYn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2ludGVyZmFjZXMvaW1hZ2VzIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21tYXBfMC45LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtbWFwXzAuOS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NThiZTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtbWFwXzAuOS4wLmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIGEgc2xpZGluZyB3aW5kb3cgbWVtb3J5IG1hcCBtYW5hZ2VyIgorREVTQ1JJUFRJT04gPSAiQSBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBhIHNsaWRpbmcgbWVtb3J5IG1hcCB0byBcCitoZWxwIHVuaWZ5aW5nIG1lbW9yeSBtYXBwZWQgYWNjZXNzIG9uIDMyIGFuZCA2NCBiaXQgc3lzdGVtcyBhbmQgdG8gaGVscCBcCittYW5hZ2luZyByZXNvdXJjZXMgbW9yZSBlZmZpY2llbnRseS4iCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0aHViLmNvbS9naXRweXRob24tZGV2ZWxvcGVycy9HaXRQeXRob24iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUEtHLUlORk87YmVnaW5saW5lPTg7ZW5kbGluZT04O21kNT1lOTEwYjM1YjBlZjRlMWY2NjViOWE3NWQ2YWZiNzcwOSIKKworU1JDX1VSSSA9ICJodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9zL3NtbWFwL3NtbWFwLSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICJkNzkzMmQ1YWNlMjA2YmY0YWUxNTE5OGNmMzZmYjZhYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwZTJiNjJiNDk3YmQ1ZjBhZmViYzAwMmVkYTRkOTBkZjlkMjA5YzMwZWYyNTdlODY3M2M5MGE2YjVjMTE5ZDYyIgorCitTID0gIiR7V09SS0RJUn0vc21tYXAtJHtQVn0iCisKK2luaGVyaXQgc2V0dXB0b29scworCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uLWNvZGVjcyBweXRob24tbW1hcCBweXRob24tbGFuZyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxOGFiOGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLmluYwpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIlRoZSBQeXRob24gUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmciCitMSUNFTlNFID0gIlBTRnYyIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCisjIGJ1bXAgdGhpcyBvbiBldmVyeSBjaGFuZ2UgaW4gY29udHJpYi9weXRob24vZ2VuZXJhdGUtbWFuaWZlc3QtMi43LnB5CitJTkNfUFIgPSAicjEiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWRmZjNkMDBmMDQ5NTQ1ODYyOTkyZDJkMDk3ODMxYTEzIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZy9mdHAvcHl0aG9uLyR7UFZ9L1B5dGhvbi0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzOGQ1MzBmN2VmYzM3M2Q2NGE4ZmIxNjM3ZTNiYWFhNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5MGQyN2UxNGVhN2UwMzU3MDAyNjg1MGUyZTUwYmE3MWFkMjBiN2ViMzEwMzVhYWRhMWNmM2RlZjhmOGQ0OTE2IgorCitQWVRIT05fTUFKTUlOID0gIjIuNyIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworUFlUSE9OTFNCT1BUUyA9ICItLXdpdGgtd2N0eXBlLWZ1bmN0aW9ucyIKK1BZVEhPTkxTQk9QVFNfbGludXhzdGRiYXNlID0gImFjX2N2X3NpemVvZl9vZmZfdD04IgorCitFWFRSQV9PRUNPTkYgPSAiXAorICAtLXdpdGgtdGhyZWFkcyBcCisgIC0td2l0aC1weW1hbGxvYyBcCisgIC0td2l0aG91dC1jeHgtbWFpbiBcCisgIC0td2l0aC1zaWduYWwtbW9kdWxlIFwKKyAgLS1lbmFibGUtc2hhcmVkIFwKKyAgLS1lbmFibGUtaXB2Nj0ke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCAneWVzJywgJ25vJywgZCl9IFwKKyAgYWNfY3ZfaGVhZGVyX2JsdWV0b290aF9ibHVldG9vdGhfaD1ubyBhY19jdl9oZWFkZXJfYmx1ZXRvb3RoX2g9bm8gXAorICAke1BZVEhPTkxTQk9QVFN9IFwKKyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDEtdXNlLXByb3Blci10b29scy1mb3ItY3Jvc3MtYnVpbGQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzAxLXVzZS1wcm9wZXItdG9vbHMtZm9yLWNyb3NzLWJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNTdjYTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzAxLXVzZS1wcm9wZXItdG9vbHMtZm9yLWNyb3NzLWJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsOTcgQEAKK1dlIG5lZWQgdG8gZW5zdXJlIG91ciBob3N0IHRvb2xzIGdldCBydW4gZHVyaW5nIGJ1aWxkLCBub3QgdGhlIGZyZXNobHkKK2J1aWx0IGNyb3NzLXRvb2xzICh0aGlzIHdpbGwgbm90IHdvcmspLCBzbyB3ZSBpbnRyb2R1Y2UgSE9TVFBZVEhPTiBhbmQgSE9TVFBHRU4uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1pY2tleUB2YW5pbGxlLW1lZGlhLmRlPgorU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKK1JlYmFzZWQgZm9yIHB5dGhvbi0yLjcuOQorU2lnbmVkLU9mZi1CeTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTWFrZWZpbGUucHJlLmluCisrKysgUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgorQEAgLTIzNCw2ICsyMzQsNyBAQCBMSUJGRklfSU5DTFVERURJUj0JQExJQkZGSV9JTkNMVURFRElSQAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgIyBQYXJzZXIKKyBQR0VOPQkJUGFyc2VyL3BnZW4kKEVYRSkKKytIT1NUUEdFTj0JJChQR0VOKSQoRVhFKQorIAorIFBTUkNTPQkJXAorIAkJUGFyc2VyL2FjY2VsZXIuYyBcCitAQCAtNDQ1LDcgKzQ0Niw3IEBAICQoQlVJTERQWVRIT04pOglNb2R1bGVzL3B5dGhvbi5vICQoTElCUkEKKyAJCQkkKEJMRExJQlJBUlkpICQoTElCUykgJChNT0RMSUJTKSAkKFNZU0xJQlMpICQoTERMQVNUKQorIAorIHBsYXRmb3JtOiAkKEJVSUxEUFlUSE9OKSBweWJ1aWxkZGlyLnR4dAorLQkkKFJVTlNIQVJFRCkgJChQWVRIT05fRk9SX0JVSUxEKSAtYyAnaW1wb3J0IHN5cyA7IGZyb20gc3lzY29uZmlnIGltcG9ydCBnZXRfcGxhdGZvcm0gOyBwcmludCBnZXRfcGxhdGZvcm0oKSsiLSIrc3lzLnZlcnNpb25bMDozXScgPnBsYXRmb3JtCisrCSQoUlVOU0hBUkVEKSAkKFBZVEhPTl9GT1JfQlVJTEQpIC1jICdpbXBvcnQgc3lzIDsgZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgZ2V0X3BsYXRmb3JtIDsgcHJpbnQgZ2V0X3BsYXRmb3JtKCkrIi0iK3N5cy52ZXJzaW9uWzA6M10nID5wbGF0Zm9ybQorIAorICMgQ3JlYXRlIGJ1aWxkIGRpcmVjdG9yeSBhbmQgZ2VuZXJhdGUgdGhlIHN5c2NvbmZpZyBidWlsZC10aW1lIGRhdGEgdGhlcmUuCisgIyBweWJ1aWxkZGlyLnR4dCBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgYnVpbGQgZGlyIGFuZCBpcyB1c2VkIGZvcgorQEAgLTYxMSw3ICs2MTIsNyBAQCBNb2R1bGVzL3B3ZG1vZHVsZS5vOiAkKHNyY2RpcikvTW9kdWxlcy9wCisgJChHUkFNTUFSX0gpOiAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpCisgCQlAJChNS0RJUl9QKSBJbmNsdWRlCisgCQkkKE1BS0UpICQoUEdFTikKKy0JCSQoUEdFTikgJChHUkFNTUFSX0lOUFVUKSAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0MpCisrCQkkKEhPU1RQR0VOKSAkKEdSQU1NQVJfSU5QVVQpICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQykKKyAkKEdSQU1NQVJfQyk6ICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpCisgCQkkKE1BS0UpICQoR1JBTU1BUl9IKQorIAkJdG91Y2ggJChHUkFNTUFSX0MpCitAQCAtMTA0MywyNyArMTA0NCwyNyBAQCBsaWJpbnN0YWxsOglidWlsZF9hbGwgJChzcmNkaXIpL0xpYi8kKFBMCisgCQkJJChERVNURElSKSQoTElCREVTVCkvZGlzdHV0aWxzL3Rlc3RzIDsgXAorIAlmaQorIAlQWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICAkKFJVTlNIQVJFRCkgXAorLQkJJChQWVRIT05fRk9SX0JVSUxEKSAtV2kgLXR0ICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorKwkJJChIT1NUUFlUSE9OKSAtV2kgLXR0ICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorIAkJLWQgJChMSUJERVNUKSAtZiBcCisgCQkteCAnYmFkX2NvZGluZ3xiYWRzeW50YXh8c2l0ZS1wYWNrYWdlc3xsaWIydG8zL3Rlc3RzL2RhdGEnIFwKKyAJCSQoREVTVERJUikkKExJQkRFU1QpCisgCVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKy0JCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLVdpIC10dCAtTyAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKysJCSQoSE9TVFBZVEhPTikgLVdpIC10dCAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKyAJCS1kICQoTElCREVTVCkgLWYgXAorIAkJLXggJ2JhZF9jb2Rpbmd8YmFkc3ludGF4fHNpdGUtcGFja2FnZXN8bGliMnRvMy90ZXN0cy9kYXRhJyBcCisgCQkkKERFU1RESVIpJChMSUJERVNUKQorIAktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAgJChSVU5TSEFSRUQpIFwKKy0JCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLVdpIC10ICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorKwkJJChIT1NUUFlUSE9OKSAtV2kgLXR0ICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorIAkJLWQgJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzIC1mIFwKKyAJCS14IGJhZHN5bnRheCAkKERFU1RESVIpJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzCisgCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCistCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1XaSAtdCAtTyAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKysJCSQoSE9TVFBZVEhPTikgLVdpIC10dCAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKyAJCS1kICQoTElCREVTVCkvc2l0ZS1wYWNrYWdlcyAtZiBcCisgCQkteCBiYWRzeW50YXggJChERVNURElSKSQoTElCREVTVCkvc2l0ZS1wYWNrYWdlcworIAktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorLQkJJChQWVRIT05fRk9SX0JVSUxEKSAtbSBsaWIydG8zLnBnZW4yLmRyaXZlciAkKERFU1RESVIpJChMSUJERVNUKS9saWIydG8zL0dyYW1tYXIudHh0CisrCQkkKEhPU1RQWVRIT04pIC1tIGxpYjJ0bzMucGdlbjIuZHJpdmVyICQoREVTVERJUikkKExJQkRFU1QpL2xpYjJ0bzMvR3JhbW1hci50eHQKKyAJLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKy0JCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLW0gbGliMnRvMy5wZ2VuMi5kcml2ZXIgJChERVNURElSKSQoTElCREVTVCkvbGliMnRvMy9QYXR0ZXJuR3JhbW1hci50eHQKKysJCSQoSE9TVFBZVEhPTikgLW0gbGliMnRvMy5wZ2VuMi5kcml2ZXIgJChERVNURElSKSQoTElCREVTVCkvbGliMnRvMy9QYXR0ZXJuR3JhbW1hci50eHQKKyAKKyAjIENyZWF0ZSB0aGUgUExBVERJUiBzb3VyY2UgZGlyZWN0b3J5LCBpZiBvbmUgd2Fzbid0IGRpc3RyaWJ1dGVkLi4KKyAkKHNyY2RpcikvTGliLyQoUExBVERJUik6CitJbmRleDogUHl0aG9uLTIuNy45L3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvc2V0dXAucHkKKysrKyBQeXRob24tMi43Ljkvc2V0dXAucHkKK0BAIC0zMzQsNiArMzM0LDcgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgICAgIHNlbGYuZmFpbGVkLmFwcGVuZChleHQubmFtZSkKKyAgICAgICAgICAgICBzZWxmLmFubm91bmNlKCcqKiogV0FSTklORzogcmVuYW1pbmcgIiVzIiBzaW5jZSBpbXBvcnRpbmcgaXQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGZhaWxlZDogJXMnICUgKGV4dC5uYW1lLCB3aHkpLCBsZXZlbD0zKQorKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgIGFzc2VydCBub3Qgc2VsZi5pbnBsYWNlCisgICAgICAgICAgICAgYmFzZW5hbWUsIHRhaWwgPSBvcy5wYXRoLnNwbGl0ZXh0KGV4dF9maWxlbmFtZSkKKyAgICAgICAgICAgICBuZXduYW1lID0gYmFzZW5hbWUgKyAiX2ZhaWxlZCIgKyB0YWlsCitAQCAtNTU4LDYgKzU1OSw5IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAKKyAgICAgICAgICMgWFhYIE9taXR0ZWQgbW9kdWxlczogZ2wsIHB1cmUsIGRsLCBTR0ktc3BlY2lmaWMgbW9kdWxlcworIAorKyAgICAgICAgbGliX2RpcnMgPSBbIG9zLmdldGVudigiU1RBR0lOR19MSUJESVIiKSwgIG9zLmdldGVudigiU1RBR0lOR19CQVNFTElCRElSIikgXQorKyAgICAgICAgaW5jX2RpcnMgPSBbIG9zLmdldGVudigiU1RBR0lOR19JTkNESVIiKSBdCisrCisgICAgICAgICAjCisgICAgICAgICAjIFRoZSBmb2xsb3dpbmcgbW9kdWxlcyBhcmUgYWxsIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGFuZCBjb21waWxlCisgICAgICAgICAjIG9uIHByZXR0eSBtdWNoIGFueSBQT1NJWGlzaCBwbGF0Zm9ybS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDMtZml4LXRraW50ZXItZGV0ZWN0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wMy1maXgtdGtpbnRlci1kZXRlY3Rpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUwY2ViNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDMtZml4LXRraW50ZXItZGV0ZWN0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1dlIG5lZWQgdG8gc3VwcGx5IFNUQUdJTkdfSU5DRElSIGhlcmUsIG90aGVyd2lzZSB0aGUgVGsgaGVhZGVycword2lsbCBub3QgYmUgZm91bmQuCisKK1NpZ25lZC1vZmYtYnk6IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1pY2tleUB2YW5pbGxlLmRlPgorU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKK1JlYmFzZWQgZm9yIHB5dGhvbi0yLjcuOQorCitkaWZmIC0tZ2l0IGEvc2V0dXAucHkgYi9zZXR1cC5weQoraW5kZXggOGZlMWZiOC4uNjdlZGE3NCAxMDA2NDQKKy0tLSBhL3NldHVwLnB5CisrKysgYi9zZXR1cC5weQorQEAgLTE4OTIsNyArMTg5Miw3IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICAgICAgICAgZG90dmVyc2lvbiA9IGRvdHZlcnNpb25bOi0xXSArICcuJyArIGRvdHZlcnNpb25bLTFdCisgICAgICAgICAgICAgdGNsX2luY2x1ZGVfc3ViID0gW10KKyAgICAgICAgICAgICB0a19pbmNsdWRlX3N1YiA9IFtdCistICAgICAgICAgICAgZm9yIGRpciBpbiBpbmNfZGlyczoKKysgICAgICAgICAgICBmb3IgZGlyIGluIFtvcy5nZXRlbnYoIlNUQUdJTkdfSU5DRElSIildOgorICAgICAgICAgICAgICAgICB0Y2xfaW5jbHVkZV9zdWIgKz0gW2RpciArIG9zLnNlcCArICJ0Y2wiICsgZG90dmVyc2lvbl0KKyAgICAgICAgICAgICAgICAgdGtfaW5jbHVkZV9zdWIgKz0gW2RpciArIG9zLnNlcCArICJ0ayIgKyBkb3R2ZXJzaW9uXQorICAgICAgICAgICAgIHRrX2luY2x1ZGVfc3ViICs9IHRjbF9pbmNsdWRlX3N1YgorQEAgLTE5MTEsMjIgKzE5MTEsNiBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAgICAgaWYgZGlyIG5vdCBpbiBpbmNsdWRlX2RpcnM6CisgICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycy5hcHBlbmQoZGlyKQorIAorLSAgICAgICAgIyBDaGVjayBmb3IgdmFyaW91cyBwbGF0Zm9ybS1zcGVjaWZpYyBkaXJlY3RvcmllcworLSAgICAgICAgaWYgaG9zdF9wbGF0Zm9ybSA9PSAnc3Vub3M1JzoKKy0gICAgICAgICAgICBpbmNsdWRlX2RpcnMuYXBwZW5kKCcvdXNyL29wZW53aW4vaW5jbHVkZScpCistICAgICAgICAgICAgYWRkZWRfbGliX2RpcnMuYXBwZW5kKCcvdXNyL29wZW53aW4vbGliJykKKy0gICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoJy91c3IvWDExUjYvaW5jbHVkZScpOgorLSAgICAgICAgICAgIGluY2x1ZGVfZGlycy5hcHBlbmQoJy91c3IvWDExUjYvaW5jbHVkZScpCistICAgICAgICAgICAgYWRkZWRfbGliX2RpcnMuYXBwZW5kKCcvdXNyL1gxMVI2L2xpYjY0JykKKy0gICAgICAgICAgICBhZGRlZF9saWJfZGlycy5hcHBlbmQoJy91c3IvWDExUjYvbGliJykKKy0gICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoJy91c3IvWDExUjUvaW5jbHVkZScpOgorLSAgICAgICAgICAgIGluY2x1ZGVfZGlycy5hcHBlbmQoJy91c3IvWDExUjUvaW5jbHVkZScpCistICAgICAgICAgICAgYWRkZWRfbGliX2RpcnMuYXBwZW5kKCcvdXNyL1gxMVI1L2xpYicpCistICAgICAgICBlbHNlOgorLSAgICAgICAgICAgICMgQXNzdW1lIGRlZmF1bHQgbG9jYXRpb24gZm9yIFgxMQorLSAgICAgICAgICAgIGluY2x1ZGVfZGlycy5hcHBlbmQoJy91c3IvWDExL2luY2x1ZGUnKQorLSAgICAgICAgICAgIGFkZGVkX2xpYl9kaXJzLmFwcGVuZCgnL3Vzci9YMTEvbGliJykKKy0KKyAgICAgICAgICMgSWYgQ3lnd2luLCB0aGVuIHZlcmlmeSB0aGF0IFggaXMgaW5zdGFsbGVkIGJlZm9yZSBwcm9jZWVkaW5nCisgICAgICAgICBpZiBob3N0X3BsYXRmb3JtID09ICdjeWd3aW4nOgorICAgICAgICAgICAgIHgxMV9pbmMgPSBmaW5kX2ZpbGUoJ1gxMS9YbGliLmgnLCBbXSwgaW5jbHVkZV9kaXJzKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wNS1lbmFibGUtY3R5cGVzLWNyb3NzLWJ1aWxkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wNS1lbmFibGUtY3R5cGVzLWNyb3NzLWJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYzg3NDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzA1LWVuYWJsZS1jdHlwZXMtY3Jvc3MtYnVpbGQucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorUmViYXNlZCBmb3IgcHl0aG9uIDIuNy45CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKyMgQ1R5cGVzIG5lZWQgdG8ga25vdyB0aGUgYWN0dWFsIGhvc3Qgd2UgYXJlIGJ1aWxkaW5nIG9uLgorIyBTaWduZWQtT2ZmOiBNaWNoYWVsIERpZXRyaWNoIDxtZHRAZW1kZXRlLmRlPgorCitJbmRleDogUHl0aG9uLTIuNy45L3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvc2V0dXAucHkKKysrKyBQeXRob24tMi43Ljkvc2V0dXAucHkKK0BAIC0yMDI4LDEyICsyMDI4LDEyIEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAKKyAgICAgICAgICAgICAgICAgIyBQYXNzIGVtcHR5IENGTEFHUyBiZWNhdXNlIHdlJ2xsIGp1c3QgYXBwZW5kIHRoZSByZXN1bHRpbmcKKyAgICAgICAgICAgICAgICAgIyBDRkxBR1MgdG8gUHl0aG9uJ3M7IC1nIG9yIC1PMiBpcyB0byBiZSBhdm9pZGVkLgorLSAgICAgICAgICAgICAgICBjbWQgPSAiY2QgJXMgJiYgZW52IENGTEFHUz0nJyAnJXMvY29uZmlndXJlJyAlcyIgXAorLSAgICAgICAgICAgICAgICAgICAgICAlIChmZmlfYnVpbGRkaXIsIGZmaV9zcmNkaXIsICIgIi5qb2luKGNvbmZpZ19hcmdzKSkKKysgICAgICAgICAgICAgICAgY21kID0gIihjZCAlcyAmJiBhdXRvY29uZiAtVyBjcm9zcykgJiYgKGNkICVzICYmIGVudiBDRkxBR1M9JycgJyVzL2NvbmZpZ3VyZScgJXMpIiBcCisrICAgICAgICAgICAgICAgICAgICAlIChmZmlfc3JjZGlyLCBmZmlfYnVpbGRkaXIsIGZmaV9zcmNkaXIsICIgIi5qb2luKGNvbmZpZ19hcmdzKSkKKyAKKyAgICAgICAgICAgICAgICAgcmVzID0gb3Muc3lzdGVtKGNtZCkKKyAgICAgICAgICAgICAgICAgaWYgcmVzIG9yIG5vdCBvcy5wYXRoLmV4aXN0cyhmZmlfY29uZmlnZmlsZSk6CistICAgICAgICAgICAgICAgICAgICBwcmludCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBfY3R5cGVzIG1vZHVsZSIKKysgICAgICAgICAgICAgICAgICAgIHByaW50ICJGYWlsZWQgdG8gY29uZmlndXJlIF9jdHlwZXMgbW9kdWxlIChyZXM9JWQpIG9yIG1pc3NpbmcgY29uZmZpbGU9JXMiICUgKCByZXMsIGZmaV9jb25maWdmaWxlICkKKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorIAorICAgICAgICAgICAgIGZmaWNvbmZpZyA9IHt9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzA2LWF2b2lkX3Vzcl9saWJfdGVybWNhcF9wYXRoX2luX2xpbmtpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzA2LWF2b2lkX3Vzcl9saWJfdGVybWNhcF9wYXRoX2luX2xpbmtpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ1MmNiNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDYtYXZvaWRfdXNyX2xpYl90ZXJtY2FwX3BhdGhfaW5fbGlua2luZy5wYXRjaApAQCAtMCwwICsxLDM1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhlIHBvaXNvbiBkaXJlY3RvcmllcyBwYXRjaCBoYXMgZGV0ZWN0ZWQgbGlicmFyeSBwYXRoIGlzc3VlIHdoaWxlIAorY29tcGlsaW5nIHRoZSBweXRob24gaW4gY3Jvc3MgZW52aXJvbm1lbnQsIGFzIHNlZW4gYmVsbG93LgorCit3YXJuaW5nOiBsaWJyYXJ5IHNlYXJjaCBwYXRoICIvdXNyL2xpYi90ZXJtY2FwIiBpcyB1bnNhZmUgZm9yIGNyb3NzLWNvbXBpbGF0aW9uCisKK1RoaXMgUGF0Y2ggZml4ZXMgdGhpcyBpc3N1ZSBpbiB0aGUgcHl0aG9uIGJ1aWxkIGVudmlyb25tZW50LgorMTEgT2N0IDIwMTAKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKKzIwMTEvMDkvMjkKK1JlYmFzZWQgZm9yIHB5dGhvbiAyLjcuMgorU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9zZXR1cC5weSBiL3NldHVwLnB5CitpbmRleCA2N2VkYTc0Li41OWM1MzdlIDEwMDY0NAorLS0tIGEvc2V0dXAucHkKKysrKyBiL3NldHVwLnB5CitAQCAtNzYxLDEyICs3NjEsMTAgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgICAgICAgICBwYXNzICMgSXNzdWUgNzM4NDogQWxyZWFkeSBsaW5rZWQgYWdhaW5zdCBjdXJzZXMgb3IgdGluZm8uCisgICAgICAgICAgICAgZWxpZiBjdXJzZXNfbGlicmFyeToKKyAgICAgICAgICAgICAgICAgcmVhZGxpbmVfbGlicy5hcHBlbmQoY3Vyc2VzX2xpYnJhcnkpCistICAgICAgICAgICAgZWxpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzICsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnL3Vzci9saWIvdGVybWNhcCddLAorKyAgICAgICAgICAgIGVsaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXJtY2FwJyk6CisgICAgICAgICAgICAgICAgIHJlYWRsaW5lX2xpYnMuYXBwZW5kKCd0ZXJtY2FwJykKKyAgICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdyZWFkbGluZScsIFsncmVhZGxpbmUuYyddLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeV9kaXJzPVsnL3Vzci9saWIvdGVybWNhcCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfbGlua19hcmdzPXJlYWRsaW5lX2V4dHJhX2xpbmtfYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcz1yZWFkbGluZV9saWJzKSApCisgICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9hZGQtbWQ1bW9kdWxlLXN1cHBvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2FkZC1tZDVtb2R1bGUtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2ZlYTc3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9hZGQtbWQ1bW9kdWxlLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0yLjcuMi9Nb2R1bGVzL1NldHVwLmRpc3QKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43LjIub3JpZy9Nb2R1bGVzL1NldHVwLmRpc3QJMjAxMS0wNi0xMSAwODo0NjoyNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBQeXRob24tMi43LjIvTW9kdWxlcy9TZXR1cC5kaXN0CTIwMTEtMTItMjcgMTU6NTE6NDEuMjQ0NjIzMjE5IC0wODAwCitAQCAtMjQ4LDcgKzI0OCw3IEBACisgIyBNZXNzYWdlLURpZ2VzdCBBbGdvcml0aG0sIGRlc2NyaWJlZCBpbiBSRkMgMTMyMS4gIFRoZSBuZWNlc3NhcnkgZmlsZXMKKyAjIG1kNS5jIGFuZCBtZDUuaCBhcmUgaW5jbHVkZWQgaGVyZS4KKyAKKy0jX21kNSBtZDVtb2R1bGUuYyBtZDUuYworK19tZDUgbWQ1bW9kdWxlLmMgbWQ1LmMKKyAKKyAKKyAjIFRoZSBfc2hhIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBTSEEgY2hlY2tzdW0gYWxnb3JpdGhtcy4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYXZvaWRfcGFyYWxsZWxfbWFrZV9yYWNlc19vbl9wZ2VuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9hdm9pZF9wYXJhbGxlbF9tYWtlX3JhY2VzX29uX3BnZW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTliYWUzMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYXZvaWRfcGFyYWxsZWxfbWFrZV9yYWNlc19vbl9wZ2VuLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitBdm9pZHMgcGFyYWxsZWwgbWFrZSByYWNlcyBsaW5raW5nIGVycm9ycyB3aGVuIG1ha2luZyBQYXJzZXIvUEdFTgorCistIEltcGxlbWVudHMgUmljaGFyZCBQdXJkaWUncyBpZGVhCisKK1NpZ25lZC1PZmYtQnk6IFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPgorU2lnbmVkLU9mZi1CeTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTWFrZWZpbGUucHJlLmluCisrKysgUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgorQEAgLTYxMSwxMiArNjExLDEwIEBAIE1vZHVsZXMvZ3JwbW9kdWxlLm86ICQoc3JjZGlyKS9Nb2R1bGVzL2cKKyAKKyBNb2R1bGVzL3B3ZG1vZHVsZS5vOiAkKHNyY2RpcikvTW9kdWxlcy9wd2Rtb2R1bGUuYyAkKHNyY2RpcikvTW9kdWxlcy9wb3NpeG1vZHVsZS5oCisgCistJChHUkFNTUFSX0gpOiAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpCisrJChHUkFNTUFSX0gpOiAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpICQoUEdFTikKKyAJCUAkKE1LRElSX1ApIEluY2x1ZGUKKy0JCSQoTUFLRSkgJChQR0VOKQorIAkJJChIT1NUUEdFTikgJChHUkFNTUFSX0lOUFVUKSAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0MpCisgJChHUkFNTUFSX0MpOiAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0lOUFVUKSAkKFBHRU5TUkNTKQorLQkJJChNQUtFKSAkKEdSQU1NQVJfSCkKKyAJCXRvdWNoICQoR1JBTU1BUl9DKQorIAorICQoUEdFTik6CSQoUEdFTk9CSlMpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYXZvaWRfd2FybmluZ19hYm91dF90a2ludGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOGM1N2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaApAQCAtMCwwICsxLDI1IEBACitfdGtpbnRlciBtb2R1bGUgbmVlZHMgdGsgbW9kdWxlIGFsb25nIHdpdGggdGNsLiB0ayBpcyBub3QgeWV0IGludGVncmF0ZWQKK2luIHlvY3RvIHNvIHdlIHNraXAgdGhlIGNoZWNrIGZvciB0aGlzIG1vZHVsZS4KK0F2b2lkIGEgd2FybmluZyBieSBub3QgYWRkaW5nIHRoaXMgbW9kdWxlIHRvIG1pc3NpbmcgdmFyaWFibGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CisKK0luZGV4OiBQeXRob24tMi43LjIvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43LjIub3JpZy9zZXR1cC5weQkyMDEyLTA0LTA1IDIzOjE4OjM4LjUwMDEzNjY0NyArMDMwMAorKysrIFB5dGhvbi0yLjcuMi9zZXR1cC5weQkyMDEyLTA0LTA1IDIzOjE5OjM1Ljg4ODEzNDk2OSArMDMwMAorQEAgLTE2MzQsOCArMTYzNCwxMCBAQAorICAgICAgICAgIyBDYWxsIHRoZSBtZXRob2QgZm9yIGRldGVjdGluZyB3aGV0aGVyIF90a2ludGVyIGNhbiBiZSBjb21waWxlZAorICAgICAgICAgc2VsZi5kZXRlY3RfdGtpbnRlcihpbmNfZGlycywgbGliX2RpcnMpCisgCistICAgICAgICBpZiAnX3RraW50ZXInIG5vdCBpbiBbZS5uYW1lIGZvciBlIGluIHNlbGYuZXh0ZW5zaW9uc106CistICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoJ190a2ludGVyJykKKysgICAgICAgICMgdGtpbnRlciBtb2R1bGUgd2lsbCBub3QgYmUgYXZhbGFpYmxlIGFzIHlvY3RvCisrICAgICAgICAjIGRvZXNuJ3QgaGF2ZSB0ayBpbnRlZ3JhdGVkICh5ZXQpCisrICAgICAgICAjaWYgJ190a2ludGVyJyBub3QgaW4gW2UubmFtZSBmb3IgZSBpbiBzZWxmLmV4dGVuc2lvbnNdOgorKyAgICAgICAgIyAgICBtaXNzaW5nLmFwcGVuZCgnX3RraW50ZXInKQorIAorICAgICAgICAgcmV0dXJuIG1pc3NpbmcKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYXZvaWRfd2FybmluZ19mb3Jfc3Vub3Nfc3BlY2lmaWNfbW9kdWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9hdm9pZF93YXJuaW5nX2Zvcl9zdW5vc19zcGVjaWZpY19tb2R1bGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM3ZTBlMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYXZvaWRfd2FybmluZ19mb3Jfc3Vub3Nfc3BlY2lmaWNfbW9kdWxlLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK3N1bmF1ZGlvZGV2IG1vZHVsZSBpcyBzdW5vcyBzcGVjaWZpYyBzbyB3ZSBhdm9pZCBhIHdhcm5pbmcgYnkgbm90IAorYWRkaW5nIHRoaXMgbW9kdWxlIHRvIG1pc3NpbmcgdmFyaWFibGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CisKK0luZGV4OiBQeXRob24tMi43LjIvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43LjIub3JpZy9zZXR1cC5weQkyMDEyLTA0LTA1IDIyOjI5OjE4LjA0OTE5NjYwOCArMDMwMAorKysrIFB5dGhvbi0yLjcuMi9zZXR1cC5weQkyMDEyLTA0LTA1IDIyOjI5OjU3LjUwNTE5NTQ1MyArMDMwMAorQEAgLTE1MjIsOCArMTUyMiw5IEBACisgICAgICAgICBpZiBwbGF0Zm9ybSA9PSAnc3Vub3M1JzoKKyAgICAgICAgICAgICAjIFN1bk9TIHNwZWNpZmljIG1vZHVsZXMKKyAgICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdzdW5hdWRpb2RldicsIFsnc3VuYXVkaW9kZXYuYyddKSApCistICAgICAgICBlbHNlOgorLSAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdzdW5hdWRpb2RldicpCisrICAgICAgICAjIElmIHBsYXRmb3JtIGlzIG5vdCBzdW5vcyB3YXJuaW5nIGlzIHVzZWxlc3MKKysgICAgICAgICNlbHNlOgorKyAgICAgICAgIyAgICBtaXNzaW5nLmFwcGVuZCgnc3VuYXVkaW9kZXYnKQorIAorICAgICAgICAgaWYgcGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICAgIyBfc2Nwcm94eQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9idWlsZGRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYnVpbGRkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ2MjlhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYnVpbGRkaXIucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorV2hlbiBjcm9zcyBjb21waWxpbmcgcHl0aG9uLCB3ZSB1c2VkIHRvIG5lZWQgdG8gaW5zdGFsbCB0aGUgTWFrZWZpbGUsIHB5Y29uZmlnLmggCithbmQgdGhlIHB5dGhvbiBsaWJyYXJ5IHRvIHRoZWlyIGZpbmFsIGxvY2F0aW9uIGJlZm9yZSBiZWluZyBhYmxlIHRvIGNvbXBpbGUgdGhlIAorcmVzdCBvZiBweXRob24uIFRoaXMgY2hhbmdlIGFsbG93cyB1cyB0byBwb2ludCBweXRob24gYXQgaXRzIG93biBzb3VyY2Ugd2hlbgorYnVpbGRpbmcsIGF2b2lkaW5nIGEgdmFyaWV0eSBvZiBzeXNyb290IHN0YWdpbmcgaXNzdWVzIGFuZCBzaW1wbGlmeWluZyB0aGUgbWFpbgorcHl0aG9uIHJlY2lwZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitSUCAyMDEyLzExLzEzCisKK0luZGV4OiBQeXRob24tMi43LjkvTGliL3N5c2NvbmZpZy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9zeXNjb25maWcucHkKKysrKyBQeXRob24tMi43LjkvTGliL3N5c2NvbmZpZy5weQorQEAgLTkzLDYgKzkzLDcgQEAgX1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkKKyBfRVhFQ19QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5leGVjX3ByZWZpeCkKKyBfQ09ORklHX1ZBUlMgPSBOb25lCisgX1VTRVJfQkFTRSA9IE5vbmUKKytfUFlUSE9OQlVJTERESVIgPSBvcy5lbnZpcm9uLmdldCgiUFlUSE9OQlVJTERESVIiLCBOb25lKQorIAorIGRlZiBfc2FmZV9yZWFscGF0aChwYXRoKToKKyAgICAgdHJ5OgorQEAgLTEwMCw3ICsxMDEsOSBAQCBkZWYgX3NhZmVfcmVhbHBhdGgocGF0aCk6CisgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgcmV0dXJuIHBhdGgKKyAKKy1pZiBzeXMuZXhlY3V0YWJsZToKKytpZiBfUFlUSE9OQlVJTERESVI6CisrICAgIF9QUk9KRUNUX0JBU0UgPSBfUFlUSE9OQlVJTERESVIKKytlbGlmIHN5cy5leGVjdXRhYmxlOgorICAgICBfUFJPSkVDVF9CQVNFID0gb3MucGF0aC5kaXJuYW1lKF9zYWZlX3JlYWxwYXRoKHN5cy5leGVjdXRhYmxlKSkKKyBlbHNlOgorICAgICAjIHN5cy5leGVjdXRhYmxlIGNhbiBiZSBlbXB0eSBpZiBhcmd2WzBdIGhhcyBiZWVuIGNoYW5nZWQgYW5kIFB5dGhvbiBpcworSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CitAQCAtMjYsNiArMjYsOSBAQCBFWEVDX1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLmV4ZWNfCisgIyBsaXZlIGluIHByb2plY3QvUENCdWlsZDkuICBJZiB3ZSdyZSBkZWFsaW5nIHdpdGggYW4geDY0IFdpbmRvd3MgYnVpbGQsCisgIyBpdCdsbCBsaXZlIGluIHByb2plY3QvUENidWlsZC9hbWQ2NC4KKyBwcm9qZWN0X2Jhc2UgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHN5cy5leGVjdXRhYmxlKSkKKytfUFlUSE9OQlVJTERESVIgPSBvcy5lbnZpcm9uLmdldCgiUFlUSE9OQlVJTERESVIiLCBOb25lKQorK2lmIF9QWVRIT05CVUlMRERJUjoKKysgICAgcHJvamVjdF9iYXNlID0gX1BZVEhPTkJVSUxERElSCisgaWYgb3MubmFtZSA9PSAibnQiIGFuZCAicGNidWlsZCIgaW4gcHJvamVjdF9iYXNlWy04Ol0ubG93ZXIoKToKKyAgICAgcHJvamVjdF9iYXNlID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwcm9qZWN0X2Jhc2UsIG9zLnBhdGgucGFyZGlyKSkKKyAjIFBDL1ZTNy4xCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2NnaV9weS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vY2dpX3B5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNTA0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2NnaV9weS5wYXRjaApAQCAtMCwwICsxLDIzIEBACitMaWIvY2dpLnB5OiBVcGRhdGUgdGhlIHNjcmlwdCBhcyBtZW50aW9uZWQgaW4gdGhlIGNvbW1lbnQKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXN0cmlidXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworLS0tIFB5dGhvbi0yLjYuNi9MaWIvY2dpLnB5Lm9yaWcJMjAxMC0wOC0wMSAyMjoxNDoyNy4wMDAwMDAwMDAgLTA1MDAKKysrKyBQeXRob24tMi42LjYvTGliL2NnaS5weQkyMDExLTA5LTIxIDE1OjI4OjQwLjQ3ODIwODYzMSAtMDUwMAorQEAgLTEsMTMgKzEsNCBAQAorLSMhIC91c3IvbG9jYWwvYmluL3B5dGhvbgorLQorLSMgTk9URTogdGhlIGFib3ZlICIvdXNyL2xvY2FsL2Jpbi9weXRob24iIGlzIE5PVCBhIG1pc3Rha2UuICBJdCBpcworLSMgaW50ZW50aW9uYWxseSBOT1QgIi91c3IvYmluL2VudiBweXRob24iLiAgT24gbWFueSBzeXN0ZW1zCistIyAoZS5nLiBTb2xhcmlzKSwgL3Vzci9sb2NhbC9iaW4gaXMgbm90IGluICRQQVRIIGFzIHBhc3NlZCB0byBDR0kKKy0jIHNjcmlwdHMsIGFuZCAvdXNyL2xvY2FsL2JpbiBpcyB0aGUgZGVmYXVsdCBkaXJlY3Rvcnkgd2hlcmUgUHl0aG9uIGlzCistIyBpbnN0YWxsZWQsIHNvIC91c3IvYmluL2VudiB3b3VsZCBiZSB1bmFibGUgdG8gZmluZCBweXRob24uICBHcmFudGVkLAorLSMgYmluYXJ5IGluc3RhbGxhdGlvbnMgYnkgTGludXggdmVuZG9ycyBvZnRlbiBpbnN0YWxsIFB5dGhvbiBpbgorLSMgL3Vzci9iaW4uICBTbyBsZXQgdGhvc2UgdmVuZG9ycyBwYXRjaCBjZ2kucHkgdG8gbWF0Y2ggdGhlaXIgY2hvaWNlCistIyBvZiBpbnN0YWxsYXRpb24uCisrIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIAorICIiIlN1cHBvcnQgbW9kdWxlIGZvciBDR0kgKENvbW1vbiBHYXRld2F5IEludGVyZmFjZSkgc2NyaXB0cy4KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vY2hlY2staWYtdGFyZ2V0LWlzLTY0Yi1ub3QtaG9zdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vY2hlY2staWYtdGFyZ2V0LWlzLTY0Yi1ub3QtaG9zdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjYyZGIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9jaGVjay1pZi10YXJnZXQtaXMtNjRiLW5vdC1ob3N0LnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0F1dGhvcjogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorRGF0ZTogICBTdW4gTWFyIDI1IDAyOjAyOjI3IDIwMTIgKzAyMDAKKworVGhpcyBwYXRjaCB3YXMgYWRkZWQgZm9yIDY0Yml0IGhvc3QgbWFjaGluZXMuIEluIHRoZSBjb21waWxlIHByb2Nlc3MgcHl0aG9uCitpcyBjaGVja2luZyBpZiBwbGF0Zm9ybSBpcyBhIDY0Yml0IHBsYXRmb3JtIHVzaW5nIHN5cy5tYXhpbnQgd2hpY2ggaXMgdGhlIGhvc3QncwordmFsdWUuIFRoZSBwYXRjaCBmaXhlcyB0aGlzIGlzc3VlIHNvIHRoYXQgcHl0aG9uIHdvdWxkIGNoZWNrIGlmIFRBUkdFVCBtYWNoaW5lCitpcyA2NGJpdCBub3QgdGhlIEhPU1QgbWFjaGluZS4gSW4gdGhpcyB3YXkgd2lsbCBoYXZlICJkbCIgYW5kICJpbWFnZW9wIiBtb2R1bGVzCitidWlsdCBpZiBIT1NUIG1hY2hpbmUgaXMgNjRiaXQgYnV0IHRoZSB0YXJnZXQgbWFjaGluZSBpcyAzMmJpdC4KKworU2lnbmVkLW9mZi1ieTogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IFB5dGhvbi0yLjcuMi9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuMi5vcmlnL3NldHVwLnB5CTIwMTItMDMtMjUgMDE6MTA6NDEuNTQwMTYzMTg3ICswMjAwCisrKysgUHl0aG9uLTIuNy4yL3NldHVwLnB5CTIwMTItMDMtMjUgMDE6MjY6MDYuMDkyNTM5OTkwICswMjAwCitAQCAtMjMsNiArMjMsMjEgQEAKKyAjIFRoaXMgZ2xvYmFsIHZhcmlhYmxlIGlzIHVzZWQgdG8gaG9sZCB0aGUgbGlzdCBvZiBtb2R1bGVzIHRvIGJlIGRpc2FibGVkLgorIGRpc2FibGVkX21vZHVsZV9saXN0ID0gW10KKyAKKytkZWYgdGFyZ2V0X2lzXzY0Yml0X3BsYXRmb3JtICgpOgorKyAgICAiIiIKKysgICAgSW4gY2FzZSBvZiBjcm9zcy1jb21waWxlLCBzb21lIG1vZHVsZXMgYXJlIG5vdCBidWlsZCBhcyBzZXR1cCBjaGVja3MgaWYgSE9TVAorKyAgICBpcyA2NGJpdCBhbmQgbm90IFRBUkdFVC4KKysgICAgQXMgcHl0aG9uIHdhcyBidWlsdCBmb3IgVEFSR0VUIHdlIGNhbiBjaGVjayB0aGlzIGluIHB5Y29uZmlnLmggaW4gdGhpcyB3YXk6CisrCVNpemVvZiBMT05HIG9uIGEgMzIgYml0IHBsYXRmb3JtIGlzIDQgYnl0ZXMKKysJU2l6ZW9mIExPTkcgb24gYSA2NCBiaXQgcGxhdGZvcm0gaXMgOCBieXRlcworKyAgICAiIiIKKysgICAgcHljb25mID0gb3BlbigicHljb25maWcuaCIpLnJlYWQoKQorKyAgICBhdXggPSByZS5zZWFyY2gociIjcypkZWZpbmVccytTSVpFT0ZfTE9OR1xzKzhccyoiLCBweWNvbmYpCisrICAgIGlmIGF1eCBpcyBub3QgTm9uZToKKysJcmV0dXJuIFRydWUKKysgICAgZWxzZToKKysJcmV0dXJuIEZhbHNlCisrCisgZGVmIGFkZF9kaXJfdG9fbGlzdChkaXJsaXN0LCBkaXIpOgorICAgICAiIiJBZGQgdGhlIGRpcmVjdG9yeSAnZGlyJyB0byB0aGUgbGlzdCAnZGlybGlzdCcgKGF0IHRoZSBmcm9udCkgaWYKKyAgICAgMSkgJ2RpcicgaXMgbm90IGFscmVhZHkgaW4gJ2Rpcmxpc3QnCitAQCAtNjI4LDcgKzY0Myw3IEBACisgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdhdWRpb29wJywgWydhdWRpb29wLmMnXSkgKQorIAorICAgICAgICAgIyBEaXNhYmxlZCBvbiA2NC1iaXQgcGxhdGZvcm1zCistICAgICAgICBpZiBzeXMubWF4aW50ICE9IDkyMjMzNzIwMzY4NTQ3NzU4MDdMOgorKyAgICAgICAgaWYgbm90IHRhcmdldF9pc182NGJpdF9wbGF0Zm9ybSgpOgorICAgICAgICAgICAgICMgT3BlcmF0aW9ucyBvbiBpbWFnZXMKKyAgICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdpbWFnZW9wJywgWydpbWFnZW9wLmMnXSkgKQorICAgICAgICAgZWxzZToKK0BAIC0xNDE4LDcgKzE0MzMsNyBAQAorICAgICAgICAgICAgICAgICBtaXNzaW5nLmFwcGVuZCgnX2NvZGVjc18lcycgJSBsb2MpCisgCisgICAgICAgICAjIER5bmFtaWMgbG9hZGluZyBtb2R1bGUKKy0gICAgICAgIGlmIHN5cy5tYXhpbnQgPT0gMHg3ZmZmZmZmZjoKKysgICAgICAgIGlmIG5vdCB0YXJnZXRfaXNfNjRiaXRfcGxhdGZvcm0oKToKKyAgICAgICAgICAgICAjIFRoaXMgcmVxdWlyZXMgc2l6ZW9mKGludCkgPT0gc2l6ZW9mKGxvbmcpID09IHNpemVvZihjaGFyKikKKyAgICAgICAgICAgICBkbF9pbmMgPSBmaW5kX2ZpbGUoJ2RsZmNuLmgnLCBbXSwgaW5jX2RpcnMpCisgICAgICAgICAgICAgaWYgKGRsX2luYyBpcyBub3QgTm9uZSkgYW5kIChwbGF0Zm9ybSBub3QgaW4gWydhdGhlb3MnXSk6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2ZpeC1tYWtlZmlsZS1mb3ItcHRlc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2ZpeC1tYWtlZmlsZS1mb3ItcHRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY5MTEyZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vZml4LW1ha2VmaWxlLWZvci1wdGVzdC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitBZGQgJ2J1aWxkLXRlc3QnIGFuZCAncnVudGVzdC1URVNUUycgdGFyZ2V0cyB0byBNYWtlZmlsZSwgdG8gYnVpbGQgYW5kIHJ1biB0ZXN0cworY3Jvc3MtY29tcGlsZWQuCisKK1NpZ25lZC1vZmYtYnk6IFR1ZG9yIEZsb3JlYSA8dHVkb3IuZmxvcmVhQGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KK2RpZmYgLXJ1TiBhL01ha2VmaWxlLnByZS5pbiBiL01ha2VmaWxlLnByZS5pbgorLS0tIGEvTWFrZWZpbGUucHJlLmluCTIwMTMtMDYtMjcgMTA6NDQ6MTEuMDMzODQwNTMyICswMjAwCisrKysgYi9NYWtlZmlsZS5wcmUuaW4JMjAxMy0wNi0yNyAxMDo0NDozOS41NzI2MzUyNzMgKzAyMDAKK0BAIC03MDksMTQgKzcwOSwxOSBAQAorICMgZ2VuZXJhdGVkIGJ5dGVjb2RlLiAgVGhpcyBpcyBzb21ldGltZXMgYSB2ZXJ5IHNoeSBidWcgbmVlZGluZyBhIGxvdCBvZgorICMgc2FtcGxlIGRhdGEuCisgCistVEVTVE9QVFM9CS1sICQoRVhUUkFURVNUT1BUUykKKytURVNUT1BUUz0JLWwgLXYgJChFWFRSQVRFU1RPUFRTKQorIFRFU1RQUk9HPQkkKHNyY2RpcikvTGliL3Rlc3QvcmVncnRlc3QucHkKKy1URVNUUFlUSE9OPQkkKFJVTlNIQVJFRCkgLi8kKEJVSUxEUFlUSE9OKSAtV2QgLTMgLUUgLXR0ICQoVEVTVFBZVEhPTk9QVFMpCistdGVzdDoJCWFsbCBwbGF0Zm9ybQorLQkJLWZpbmQgJChzcmNkaXIpL0xpYiAtbmFtZSAnKi5weVtjb10nIC1wcmludCB8IHhhcmdzIHJtIC1mCisrVEVTVFBZVEhPTj0JJChSVU5TSEFSRUQpICQoQlVJTERQWVRIT04pIC1XZCAtMyAtRSAtdHQgJChURVNUUFlUSE9OT1BUUykKKyt0ZXN0OgkJYnVpbGQtdGVzdAorKwkJJChNQUtFKSBydW50ZXN0LVRFU1RTCisrCisrcnVudGVzdC1URVNUUzoKKysJCS1maW5kICQoc3JjZGlyKSAtbmFtZSAnKi5weVtjb10nIC1wcmludCB8IHhhcmdzIHJtIC1mCisgCQktJChURVNUUFlUSE9OKSAkKFRFU1RQUk9HKSAkKFRFU1RPUFRTKQorIAkJJChURVNUUFlUSE9OKSAkKFRFU1RQUk9HKSAkKFRFU1RPUFRTKQorIAorK2J1aWxkLXRlc3Q6CWFsbCBwbGF0Zm9ybQorKworIHRlc3RhbGw6CWFsbCBwbGF0Zm9ybQorIAkJLWZpbmQgJChzcmNkaXIpL0xpYiAtbmFtZSAnKi5weVtjb10nIC1wcmludCB8IHhhcmdzIHJtIC1mCisgCQkkKFRFU1RQWVRIT04pICQoc3JjZGlyKS9MaWIvY29tcGlsZWFsbC5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2ZpeF9mb3JfdXNpbmdfZGlmZmVyZW50X2xpYmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDI2MmQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2gKQEAgLTAsMCArMSw3NyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtFbWJlZGRlZCBzcGVjaWZpY10KKworVGhpcyBwYXRjaCBmaXhlcyBpc3N1aW5nIHdpdGggZGlmZmVyZW50IGxpYmRpciBsaWtlIGxpYjY0LgorVGhpcyBwYXRjaCBtYWtlcyB0aGUgbmF0aXZlIHB5dGhvbiBiaW5hcnkgbW9kdWxlcyBmaW5kYWJsZQoraW4gdGhlIGluc3RhbGwgcHJvY2VzcyBvZiB0aGUgaG9zdCBweXRob24uCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitEYXRlOiAyMDEyLzAzLzE0CisKK1VwZGF0ZWQgZm9yIHB5dGhvbiAyLjcuMworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK0RhdGU6IDIwMTIvMDUvMDEKKworUmViYXNlZCBmb3IgcHl0aG9uLTIuNy45CitTaWduZWQtT2ZmLUJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9zeXNjb25maWcucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvc3lzY29uZmlnLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi9zeXNjb25maWcucHkKK0BAIC05LDcgKzksNyBAQCBfSU5TVEFMTF9TQ0hFTUVTID0geworICAgICAncG9zaXhfcHJlZml4JzogeworICAgICAgICAgJ3N0ZGxpYic6ICd7YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdwbGF0c3RkbGliJzogJ3twbGF0YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKy0gICAgICAgICdwdXJlbGliJzogJ3tiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorKyAgICAgICAgJ3B1cmVsaWInOiAne2Jhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdwbGF0bGliJzogJ3twbGF0YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ2luY2x1ZGUnOiAne2Jhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdwbGF0aW5jbHVkZSc6ICd7cGxhdGJhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKK0BAIC02Nyw3ICs2Nyw3IEBAIF9JTlNUQUxMX1NDSEVNRVMgPSB7CisgICAgICdwb3NpeF91c2VyJzogeworICAgICAgICAgJ3N0ZGxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAncGxhdHN0ZGxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCistICAgICAgICAncHVyZWxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisrICAgICAgICAncHVyZWxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdwbGF0bGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ2luY2x1ZGUnOiAne3VzZXJiYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAnc2NyaXB0cyc6ICd7dXNlcmJhc2V9L2JpbicsCitJbmRleDogUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL01ha2VmaWxlLnByZS5pbgorKysrIFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KK0BAIC0xMDQ2LDI3ICsxMDQ2LDI3IEBAIGxpYmluc3RhbGw6CWJ1aWxkX2FsbCAkKHNyY2RpcikvTGliLyQoUEwKKyAJCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvTW9kdWxlcy94eG1vZHVsZS5jIFwKKyAJCQkkKERFU1RESVIpJChMSUJERVNUKS9kaXN0dXRpbHMvdGVzdHMgOyBcCisgCWZpCistCVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgICQoUlVOU0hBUkVEKSBcCisrCVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCk6JHtDUk9TU1BZVEhPTlBBVEh9ICQoUlVOU0hBUkVEKSBcCisgCQkkKEhPU1RQWVRIT04pIC1XaSAtdHQgJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCisgCQktZCAkKExJQkRFU1QpIC1mIFwKKyAJCS14ICdiYWRfY29kaW5nfGJhZHN5bnRheHxzaXRlLXBhY2thZ2VzfGxpYjJ0bzMvdGVzdHMvZGF0YScgXAorIAkJJChERVNURElSKSQoTElCREVTVCkKKy0JUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorKwlQWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpOiR7Q1JPU1NQWVRIT05QQVRIfSQoUlVOU0hBUkVEKSBcCisgCQkkKEhPU1RQWVRIT04pIC1XaSAtdHQgJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCisgCQktZCAkKExJQkRFU1QpIC1mIFwKKyAJCS14ICdiYWRfY29kaW5nfGJhZHN5bnRheHxzaXRlLXBhY2thZ2VzfGxpYjJ0bzMvdGVzdHMvZGF0YScgXAorIAkJJChERVNURElSKSQoTElCREVTVCkKKy0JLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgICQoUlVOU0hBUkVEKSBcCisrCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpOiR7Q1JPU1NQWVRIT05QQVRIfSAkKFJVTlNIQVJFRCkgXAorIAkJJChIT1NUUFlUSE9OKSAtV2kgLXR0ICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorIAkJLWQgJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzIC1mIFwKKyAJCS14IGJhZHN5bnRheCAkKERFU1RESVIpJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzCistCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCisrCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpOiR7Q1JPU1NQWVRIT05QQVRIfSAkKFJVTlNIQVJFRCkgXAorIAkJJChIT1NUUFlUSE9OKSAtV2kgLXR0ICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorIAkJLWQgJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzIC1mIFwKKyAJCS14IGJhZHN5bnRheCAkKERFU1RESVIpJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzCistCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCisrCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpOiR7Q1JPU1NQWVRIT05QQVRIfSAkKFJVTlNIQVJFRCkgXAorIAkJJChIT1NUUFlUSE9OKSAtbSBsaWIydG8zLnBnZW4yLmRyaXZlciAkKERFU1RESVIpJChMSUJERVNUKS9saWIydG8zL0dyYW1tYXIudHh0CistCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCisrCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpOiR7Q1JPU1NQWVRIT05QQVRIfSAkKFJVTlNIQVJFRCkgXAorIAkJJChIT1NUUFlUSE9OKSAtbSBsaWIydG8zLnBnZW4yLmRyaXZlciAkKERFU1RESVIpJChMSUJERVNUKS9saWIydG8zL1BhdHRlcm5HcmFtbWFyLnR4dAorIAorICMgQ3JlYXRlIHRoZSBQTEFURElSIHNvdXJjZSBkaXJlY3RvcnksIGlmIG9uZSB3YXNuJ3QgZGlzdHJpYnV0ZWQuLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9ob3N0X2luY2x1ZGVfY29udGFtaW5hdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vaG9zdF9pbmNsdWRlX2NvbnRhbWluYXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBhYWZiMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vaG9zdF9pbmNsdWRlX2NvbnRhbWluYXRpb24ucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAord2hlbiBidWlsZGluZyBweXRob24gZm9yIHFlbXV4ODYtNjQgb24gdWJ1bnR1IDExLjEwLzY0Yml0CitpdCBncm9wZXMgaW50byBob3N0IGluY2x1ZGVzIGFuZCB0aGVuIG1peGVzIHRoZW0gd2l0aCBjcm9zcworaW5jbHVkZXMgYW5kIGFzIGEgcmVzdWx0IHNvbWUgbW9kdWxlcyBmYWlsIHRvIGNvbXBpbGUgYW5kIGxpbmsKK29uZSBvZiB0aGUgbW9kdWxlcyBpcyBweXRob24tZWxlbWVudHRyZWUgd2hpY2ggaXMgdGhlbiBub3QKK2ZvdW5kIGR1cmluZyBpbWFnZSBjcmVhdGlvbgorCitQcm9ibGUgaXMgdGhhdCBzZXR1cC5weSB0cmllcyB0byBhZGQgbmF0aXZlIGluY2x1ZGVzIHRoYXQgbmV3ZXIKK3VidW50dSBoYXMgaW50cm9kdWNlZCBmb3IgbXVsdGlhcmNoIHN1cHBvcnQuIEJ1dCB0aGF0IHNob3VsZAorb25seSBoYXBwZW4gZm9yIG5hdGl2ZSBidWlsZHMgYW5kIG5vdCBjcm9zcyBidWlsZGluZyBweXRob24KK3NvIHdlIGFkZCBhIGNoZWNrIGhlcmUuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworCitkaWZmIC0tZ2l0IGEvc2V0dXAucHkgYi9zZXR1cC5weQoraW5kZXggYmEyZDI0Mi4uYmY4NTliZSAxMDA2NDQKKy0tLSBhL3NldHVwLnB5CisrKysgYi9zZXR1cC5weQorQEAgLTM5Myw2ICszOTMsOCBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgCisgICAgICAgICBpZiBub3QgZmluZF9leGVjdXRhYmxlKCdkcGtnLWFyY2hpdGVjdHVyZScpOgorICAgICAgICAgICAgIHJldHVybgorKyAgICAgICAgaWYgb3MuZW52aXJvbi5nZXQoJ0NST1NTX0NPTVBJTEUnKSBpcyBub3QgTm9uZToKKysgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgIG9wdCA9ICcnCisgICAgICAgICBpZiBjcm9zc19jb21waWxpbmc6CisgICAgICAgICAgICAgb3B0ID0gJy10JyArIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignSE9TVF9HTlVfVFlQRScpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL211bHRpbGliLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9tdWx0aWxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmZhMGQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9tdWx0aWxpYi5wYXRjaApAQCAtMCwwICsxLDI5NiBAQAorUmViYXNlZCBmb3IgcHl0aG9uLTIuNy45CitTaWduZWQtT2ZmLUJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0yLjcuOS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9jb25maWd1cmUuYWMKKysrKyBQeXRob24tMi43LjkvY29uZmlndXJlLmFjCitAQCAtNzM2LDYgKzczNiwxMCBAQCBTdW5PUyopCisgICAgIDs7CisgZXNhYworIAorK0FDX1NVQlNUKExJQikKKytBQ19NU0dfQ0hFQ0tJTkcoTElCKQorK0xJQj1gYmFzZW5hbWUgJHtsaWJkaXJ9YAorK0FDX01TR19SRVNVTFQoJExJQikKKyAKKyBBQ19TVUJTVChMSUJSQVJZKQorIEFDX01TR19DSEVDS0lORyhMSUJSQVJZKQorSW5kZXg6IFB5dGhvbi0yLjcuOS9JbmNsdWRlL3B5dGhvbnJ1bi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvSW5jbHVkZS9weXRob25ydW4uaAorKysrIFB5dGhvbi0yLjcuOS9JbmNsdWRlL3B5dGhvbnJ1bi5oCitAQCAtMTA4LDYgKzEwOCw3IEBAIFB5QVBJX0ZVTkMoY2hhciAqKSBQeV9HZXRQYXRoKHZvaWQpOworIC8qIEluIHRoZWlyIG93biBmaWxlcyAqLworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRWZXJzaW9uKHZvaWQpOworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRQbGF0Zm9ybSh2b2lkKTsKKytQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0TGliKHZvaWQpOworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRDb3B5cmlnaHQodm9pZCk7CisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldENvbXBpbGVyKHZvaWQpOworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRCdWlsZEluZm8odm9pZCk7CitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKKysrKyBQeXRob24tMi43LjkvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKK0BAIC0yMiw2ICsyMiw4IEBAIGZyb20gc2l0ZSBpbXBvcnQgVVNFUl9CQVNFCisgZnJvbSBzaXRlIGltcG9ydCBVU0VSX1NJVEUKKyAKKyAKKytsaWJuYW1lID0gc3lzLmxpYgorKworIGlmIHN5cy52ZXJzaW9uIDwgIjIuMiI6CisgICAgIFdJTkRPV1NfU0NIRU1FID0geworICAgICAgICAgJ3B1cmVsaWInOiAnJGJhc2UnLAorQEAgLTQyLDcgKzQ0LDcgQEAgZWxzZToKKyBJTlNUQUxMX1NDSEVNRVMgPSB7CisgICAgICd1bml4X3ByZWZpeCc6IHsKKyAgICAgICAgICdwdXJlbGliJzogJyRiYXNlL2xpYi9weXRob24kcHlfdmVyc2lvbl9zaG9ydC9zaXRlLXBhY2thZ2VzJywKKy0gICAgICAgICdwbGF0bGliJzogJyRwbGF0YmFzZS9saWIvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvc2l0ZS1wYWNrYWdlcycsCisrICAgICAgICAncGxhdGxpYic6ICckcGxhdGJhc2UvJytsaWJuYW1lKycvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAnaGVhZGVycyc6ICckYmFzZS9pbmNsdWRlL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0LyRkaXN0X25hbWUnLAorICAgICAgICAgJ3NjcmlwdHMnOiAnJGJhc2UvYmluJywKKyAgICAgICAgICdkYXRhJyAgIDogJyRiYXNlJywKK0luZGV4OiBQeXRob24tMi43LjkvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorQEAgLTExOSw4ICsxMTksMTEgQEAgZGVmIGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MCwgc3RhbgorICAgICAgICAgcHJlZml4ID0gcGxhdF9zcGVjaWZpYyBhbmQgRVhFQ19QUkVGSVggb3IgUFJFRklYCisgCisgICAgIGlmIG9zLm5hbWUgPT0gInBvc2l4IjoKKy0gICAgICAgIGxpYnB5dGhvbiA9IG9zLnBhdGguam9pbihwcmVmaXgsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYiIsICJweXRob24iICsgZ2V0X3B5dGhvbl92ZXJzaW9uKCkpCisrICAgICAgICBpZiBwbGF0X3NwZWNpZmljIG9yIHN0YW5kYXJkX2xpYjoKKysgICAgICAgICAgICBsaWIgPSBzeXMubGliCisrICAgICAgICBlbHNlOgorKyAgICAgICAgICAgIGxpYiA9ICJsaWIiCisrICAgICAgICBsaWJweXRob24gPSBvcy5wYXRoLmpvaW4ocHJlZml4LCBsaWIsICJweXRob24iICsgZ2V0X3B5dGhvbl92ZXJzaW9uKCkpCisgICAgICAgICBpZiBzdGFuZGFyZF9saWI6CisgICAgICAgICAgICAgcmV0dXJuIGxpYnB5dGhvbgorICAgICAgICAgZWxzZToKK0luZGV4OiBQeXRob24tMi43LjkvTGliL3B5ZG9jLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3B5ZG9jLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi9weWRvYy5weQorQEAgLTM4Myw3ICszODMsNyBAQCBjbGFzcyBEb2M6CisgCisgICAgICAgICBkb2Nsb2MgPSBvcy5lbnZpcm9uLmdldCgiUFlUSE9ORE9DUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5IikKKy0gICAgICAgIGJhc2VkaXIgPSBvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCAibGliIiwKKysgICAgICAgIGJhc2VkaXIgPSBvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCBzeXMubGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIitzeXMudmVyc2lvblswOjNdKQorICAgICAgICAgaWYgKGlzaW5zdGFuY2Uob2JqZWN0LCB0eXBlKG9zKSkgYW5kCisgICAgICAgICAgICAgKG9iamVjdC5fX25hbWVfXyBpbiAoJ2Vycm5vJywgJ2V4Y2VwdGlvbnMnLCAnZ2MnLCAnaW1wJywKK0luZGV4OiBQeXRob24tMi43LjkvTGliL3NpdGUucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvc2l0ZS5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvc2l0ZS5weQorQEAgLTI4OCwxMyArMjg4LDE4IEBAIGRlZiBnZXRzaXRlcGFja2FnZXMoKToKKyAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ29zMmVteCcsICdyaXNjb3MnKToKKyAgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJMaWIiLCAic2l0ZS1wYWNrYWdlcyIpKQorICAgICAgICAgZWxpZiBvcy5zZXAgPT0gJy8nOgorLSAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsCisrICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCBzeXMubGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpdGUtcGFja2FnZXMiKSkKKy0gICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLCAic2l0ZS1weXRob24iKSkKKysgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsIHN5cy5saWIsICJzaXRlLXB5dGhvbiIpKQorKyAgICAgICAgICAgIGlmIHN5cy5saWIgIT0gImxpYiI6CisrICAgICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXRlLXBhY2thZ2VzIikpCisrICAgICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsICJzaXRlLXB5dGhvbiIpKQorICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKHByZWZpeCkKKy0gICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLCAic2l0ZS1wYWNrYWdlcyIpKQorKyAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgc3lzLmxpYiwgInNpdGUtcGFja2FnZXMiKSkKKyAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIjoKKyAgICAgICAgICAgICAjIGZvciBmcmFtZXdvcmsgYnVpbGRzICpvbmx5KiB3ZSBhZGQgdGhlIHN0YW5kYXJkIEFwcGxlCisgICAgICAgICAgICAgIyBsb2NhdGlvbnMuCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9zeXNjb25maWcucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvc3lzY29uZmlnLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi9zeXNjb25maWcucHkKK0BAIC03LDEwICs3LDEwIEBAIGZyb20gb3MucGF0aCBpbXBvcnQgcGFyZGlyLCByZWFscGF0aAorIAorIF9JTlNUQUxMX1NDSEVNRVMgPSB7CisgICAgICdwb3NpeF9wcmVmaXgnOiB7CistICAgICAgICAnc3RkbGliJzogJ3tiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKy0gICAgICAgICdwbGF0c3RkbGliJzogJ3twbGF0YmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisrICAgICAgICAnc3RkbGliJzogJ3tiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorKyAgICAgICAgJ3BsYXRzdGRsaWInOiAne3BsYXRiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3B1cmVsaWInOiAne2Jhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCistICAgICAgICAncGxhdGxpYic6ICd7cGxhdGJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisrICAgICAgICAncGxhdGxpYic6ICd7cGxhdGJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdpbmNsdWRlJzogJ3tiYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAncGxhdGluY2x1ZGUnOiAne3BsYXRiYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAnc2NyaXB0cyc6ICd7YmFzZX0vYmluJywKK0BAIC02NSwxMCArNjUsMTAgQEAgX0lOU1RBTExfU0NIRU1FUyA9IHsKKyAgICAgICAgICdkYXRhJyAgIDogJ3t1c2VyYmFzZX0nLAorICAgICAgICAgfSwKKyAgICAgJ3Bvc2l4X3VzZXInOiB7CistICAgICAgICAnc3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCistICAgICAgICAncGxhdHN0ZGxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorKyAgICAgICAgJ3N0ZGxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisrICAgICAgICAncGxhdHN0ZGxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAncHVyZWxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCistICAgICAgICAncGxhdGxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisrICAgICAgICAncGxhdGxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdpbmNsdWRlJzogJ3t1c2VyYmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3NjcmlwdHMnOiAne3VzZXJiYXNlfS9iaW4nLAorICAgICAgICAgJ2RhdGEnICAgOiAne3VzZXJiYXNlfScsCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi90ZXN0L3Rlc3RfZGwucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvdGVzdC90ZXN0X2RsLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi90ZXN0L3Rlc3RfZGwucHkKK0BAIC00LDEwICs0LDExIEBACisgaW1wb3J0IHVuaXR0ZXN0CisgZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgaW1wb3J0X21vZHVsZQorIGRsID0gaW1wb3J0X21vZHVsZSgnZGwnLCBkZXByZWNhdGVkPVRydWUpCisraW1wb3J0IHN5cworIAorIHNoYXJlZGxpYnMgPSBbCistICAgICgnL3Vzci9saWIvbGliYy5zbycsICdnZXRwaWQnKSwKKy0gICAgKCcvbGliL2xpYmMuc28uNicsICdnZXRwaWQnKSwKKysgICAgKCcvdXNyLycrc3lzLmxpYisnL2xpYmMuc28nLCAnZ2V0cGlkJyksCisrICAgICgnLycrc3lzLmxpYisnL2xpYmMuc28uNicsICdnZXRwaWQnKSwKKyAgICAgKCcvdXNyL2Jpbi9jeWd3aW4xLmRsbCcsICdnZXRwaWQnKSwKKyAgICAgKCcvdXNyL2xpYi9saWJjLmR5bGliJywgJ2dldHBpZCcpLAorICAgICBdCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvdGVzdC90ZXN0X3NpdGUucHkKK0BAIC0yNDEsMTIgKzI0MSwxNiBAQCBjbGFzcyBIZWxwZXJGdW5jdGlvbnNUZXN0cyh1bml0dGVzdC5UZXN0CisgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJzWzJdLCB3YW50ZWQpCisgICAgICAgICBlbGlmIG9zLnNlcCA9PSAnLyc6CisgICAgICAgICAgICAgIyBPUyBYIG5vbi1mcmFtd2V3b3JrIGJ1aWxkcywgTGludXgsIEZyZWVCU0QsIGV0YworLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpcnMpLCAyKQorICAgICAgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbigneG94bycsICdsaWInLCAncHl0aG9uJyArIHN5cy52ZXJzaW9uWzozXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpdGUtcGFja2FnZXMnKQorLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyc1swXSwgd2FudGVkKQorKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YW50ZWQgaW4gZGlycykKKyAgICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJ3hveG8nLCAnbGliJywgJ3NpdGUtcHl0aG9uJykKKy0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcnNbMV0sIHdhbnRlZCkKKysgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod2FudGVkIGluIGRpcnMpCisrICAgICAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKCd4b3hvJywgc3lzLmxpYiwgJ3B5dGhvbicgKyBzeXMudmVyc2lvbls6M10sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaXRlLXBhY2thZ2VzJykKKysgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod2FudGVkIGluIGRpcnMpCisrICAgICAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKCd4b3hvJywgc3lzLmxpYiwgJ3NpdGUtcHl0aG9uJykKKysgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod2FudGVkIGluIGRpcnMpCisgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICMgb3RoZXIgcGxhdGZvcm1zCisgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlycyksIDIpCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi90cmFjZS5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi90cmFjZS5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvdHJhY2UucHkKK0BAIC03NTQsMTAgKzc1NCwxMCBAQCBkZWYgbWFpbihhcmd2PU5vbmUpOgorICAgICAgICAgICAgICAgICAjIHNob3VsZCBJIGFsc28gY2FsbCBleHBhbmR1c2VyPyAoYWZ0ZXIgYWxsLCBjb3VsZCB1c2UgJEhPTUUpCisgCisgICAgICAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoIiRwcmVmaXgiLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzeXMucHJlZml4LCAibGliIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLnByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10pKQorICAgICAgICAgICAgICAgICBzID0gcy5yZXBsYWNlKCIkZXhlY19wcmVmaXgiLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsICJsaWIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsIHN5cy5saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdKSkKKyAgICAgICAgICAgICAgICAgcyA9IG9zLnBhdGgubm9ybXBhdGgocykKKyAgICAgICAgICAgICAgICAgaWdub3JlX2RpcnMuYXBwZW5kKHMpCitJbmRleDogUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL01ha2VmaWxlLnByZS5pbgorKysrIFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KK0BAIC04Nyw2ICs4Nyw3IEBAIFBZX0NGTEFHUz0JJChDRkxBR1MpICQoQ1BQRkxBR1MpICQoQ0ZMQUcKKyAKKyAjIE1hY2hpbmUtZGVwZW5kZW50IHN1YmRpcmVjdG9yaWVzCisgTUFDSERFUD0JQE1BQ0hERVBACisrTElCPQkJQExJQkAKKyAKKyAjIE11bHRpYXJjaCBkaXJlY3RvcnkgKG1heSBiZSBlbXB0eSkKKyBNVUxUSUFSQ0g9CUBNVUxUSUFSQ0hACitAQCAtMTA2LDcgKzEwNyw3IEBAIExJQkRJUj0JCUBsaWJkaXJACisgTUFORElSPQkJQG1hbmRpckAKKyBJTkNMVURFRElSPQlAaW5jbHVkZWRpckAKKyBDT05GSU5DTFVERURJUj0JJChleGVjX3ByZWZpeCkvaW5jbHVkZQorLVNDUklQVERJUj0JJChwcmVmaXgpL2xpYgorK1NDUklQVERJUj0JJChwcmVmaXgpL0BMSUJACisgCisgIyBEZXRhaWxlZCBkZXN0aW5hdGlvbiBkaXJlY3RvcmllcworIEJJTkxJQkRFU1Q9CSQoTElCRElSKS9weXRob24kKFZFUlNJT04pCitAQCAtNTk4LDYgKzU5OSw3IEBAIE1vZHVsZXMvZ2V0cGF0aC5vOiAkKHNyY2RpcikvTW9kdWxlcy9nZXQKKyAJCS1ERVhFQ19QUkVGSVg9JyIkKGV4ZWNfcHJlZml4KSInIFwKKyAJCS1EVkVSU0lPTj0nIiQoVkVSU0lPTikiJyBcCisgCQktRFZQQVRIPSciJChWUEFUSCkiJyBcCisrCQktRExJQj0nIiQoTElCKSInIFwKKyAJCS1vICRAICQoc3JjZGlyKS9Nb2R1bGVzL2dldHBhdGguYworIAorIE1vZHVsZXMvcHl0aG9uLm86ICQoc3JjZGlyKS9Nb2R1bGVzL3B5dGhvbi5jCitAQCAtNjQwLDcgKzY0Miw3IEBAICQoQVNUX0MpOiAkKEFTVF9BU0RMKSAkKEFTRExHRU5fRklMRVMpCisgUHl0aG9uL2NvbXBpbGUubyBQeXRob24vc3ltdGFibGUubyBQeXRob24vYXN0Lm86ICQoR1JBTU1BUl9IKSAkKEFTVF9IKQorIAorIFB5dGhvbi9nZXRwbGF0Zm9ybS5vOiAkKHNyY2RpcikvUHl0aG9uL2dldHBsYXRmb3JtLmMKKy0JCSQoQ0MpIC1jICQoUFlfQ0ZMQUdTKSAtRFBMQVRGT1JNPSciJChNQUNIREVQKSInIC1vICRAICQoc3JjZGlyKS9QeXRob24vZ2V0cGxhdGZvcm0uYworKwkJJChDQykgLWMgJChQWV9DRkxBR1MpIC1EUExBVEZPUk09JyIkKE1BQ0hERVApIicgLURMSUI9JyIkKExJQikiJyAtbyAkQCAkKHNyY2RpcikvUHl0aG9uL2dldHBsYXRmb3JtLmMKKyAKKyBQeXRob24vaW1wb3J0ZGwubzogJChzcmNkaXIpL1B5dGhvbi9pbXBvcnRkbC5jCisgCQkkKENDKSAtYyAkKFBZX0NGTEFHUykgLUkkKERMSU5DTERJUikgLW8gJEAgJChzcmNkaXIpL1B5dGhvbi9pbXBvcnRkbC5jCitJbmRleDogUHl0aG9uLTIuNy45L01vZHVsZXMvZ2V0cGF0aC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTW9kdWxlcy9nZXRwYXRoLmMKKysrKyBQeXRob24tMi43LjkvTW9kdWxlcy9nZXRwYXRoLmMKK0BAIC0xMTYsOSArMTE2LDExIEBACisgI2RlZmluZSBFWEVDX1BSRUZJWCBQUkVGSVgKKyAjZW5kaWYKKyAKKysjZGVmaW5lIExJQl9QWVRIT04gTElCICIvcHl0aG9uIiBWRVJTSU9OCisrCisgI2lmbmRlZiBQWVRIT05QQVRICistI2RlZmluZSBQWVRIT05QQVRIIFBSRUZJWCAiL2xpYi9weXRob24iIFZFUlNJT04gIjoiIFwKKy0gICAgICAgICAgICAgIEVYRUNfUFJFRklYICIvbGliL3B5dGhvbiIgVkVSU0lPTiAiL2xpYi1keW5sb2FkIgorKyNkZWZpbmUgUFlUSE9OUEFUSCBQUkVGSVggIi8iIExJQl9QWVRIT04gIjoiIFwKKysgICAgICAgICAgICAgIEVYRUNfUFJFRklYICIvIiBMSUJfUFlUSE9OICIvbGliLWR5bmxvYWQiCisgI2VuZGlmCisgCisgI2lmbmRlZiBMQU5ETUFSSworQEAgLTEyOSw3ICsxMzEsNyBAQCBzdGF0aWMgY2hhciBwcmVmaXhbTUFYUEFUSExFTisxXTsKKyBzdGF0aWMgY2hhciBleGVjX3ByZWZpeFtNQVhQQVRITEVOKzFdOworIHN0YXRpYyBjaGFyIHByb2dwYXRoW01BWFBBVEhMRU4rMV07Cisgc3RhdGljIGNoYXIgKm1vZHVsZV9zZWFyY2hfcGF0aCA9IE5VTEw7Cistc3RhdGljIGNoYXIgbGliX3B5dGhvbltdID0gImxpYi9weXRob24iIFZFUlNJT047Cisrc3RhdGljIGNoYXIgbGliX3B5dGhvbltdID0gTElCX1BZVEhPTjsKKyAKKyBzdGF0aWMgdm9pZAorIHJlZHVjZShjaGFyICpkaXIpCitJbmRleDogUHl0aG9uLTIuNy45L1B5dGhvbi9nZXRwbGF0Zm9ybS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvUHl0aG9uL2dldHBsYXRmb3JtLmMKKysrKyBQeXRob24tMi43LjkvUHl0aG9uL2dldHBsYXRmb3JtLmMKK0BAIC0xMCwzICsxMCwxMyBAQCBQeV9HZXRQbGF0Zm9ybSh2b2lkKQorIHsKKyAJcmV0dXJuIFBMQVRGT1JNOworIH0KKysKKysjaWZuZGVmIExJQgorKyNkZWZpbmUgTElCICJsaWIiCisrI2VuZGlmCisrCisrY29uc3QgY2hhciAqCisrUHlfR2V0TGliKHZvaWQpCisreworKwlyZXR1cm4gTElCOworK30KK0luZGV4OiBQeXRob24tMi43LjkvUHl0aG9uL3N5c21vZHVsZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvUHl0aG9uL3N5c21vZHVsZS5jCisrKysgUHl0aG9uLTIuNy45L1B5dGhvbi9zeXNtb2R1bGUuYworQEAgLTE0MzcsNiArMTQzNyw4IEBAIF9QeVN5c19Jbml0KHZvaWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZyhQeV9HZXRDb3B5cmlnaHQoKSkpOworICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJwbGF0Zm9ybSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZyhQeV9HZXRQbGF0Zm9ybSgpKSk7CisrICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImxpYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZyhQeV9HZXRMaWIoKSkpOworICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJleGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nKFB5X0dldFByb2dyYW1GdWxsUGF0aCgpKSk7CisgICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoInByZWZpeCIsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3BhcmFsbGVsLW1ha2VpbnN0LWNyZWF0ZS1iaW5kaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3BhcmFsbGVsLW1ha2VpbnN0LWNyZWF0ZS1iaW5kaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUxY2I0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vcGFyYWxsZWwtbWFrZWluc3QtY3JlYXRlLWJpbmRpci5wYXRjaApAQCAtMCwwICsxLDE5IEBACitXaGVuIHVzaW5nIG1ha2UgLWogd2l0aCB0aGUgJ2luc3RhbGwnIHRhcmdldCwgaXQncyBwb3NzaWJsZSBmb3IgYWx0YmluaW5zdGFsbAorKHdoaWNoIG5vcm1hbGx5IGNyZWF0ZXMgQklORElSKSBhbmQgbGliYWluc3RhbGwgKHdoaWNoIGRvZXNuJ3QsIHRob3VnaCBpdAoraW5zdGFsbHMgcHl0aG9uLWNvbmZpZyB0aGVyZSkgdG8gcmFjZSwgcmVzdWx0aW5nIGluIGEgZmFpbHVyZSBkdWUgdG8KK2F0dGVtcHRpbmcgdG8gaW5zdGFsbCBweXRob24tY29uZmlnIGludG8gYSBub25leGlzdGVudCBCSU5ESVIuIEVuc3VyZSBpdCBhbHNvCitleGlzdHMgaW4gdGhlIGxpYmFpbnN0YWxsIHRhcmdldC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBQeXRob24tMi43LjMub3JpZy9NYWtlZmlsZS5wcmUuaW4KKysrKyBQeXRob24tMi43LjMvTWFrZWZpbGUucHJlLmluCitAQCAtMTAwOCw3ICsxMDA4LDcgQEAgTElCUEw9CQkkKExJQlApL2NvbmZpZworIExJQlBDPQkJJChMSUJESVIpL3BrZ2NvbmZpZworCisgbGliYWluc3RhbGw6CWFsbCBweXRob24tY29uZmlnCistCUBmb3IgaSBpbiAkKExJQkRJUikgJChMSUJQKSAkKExJQlBMKSAkKExJQlBDKTsgXAorKwlAZm9yIGkgaW4gJChMSUJESVIpICQoTElCUCkgJChMSUJQTCkgJChMSUJQQykgJChCSU5ESVIpOyBcCisJZG8gXAorCQlpZiB0ZXN0ICEgLWQgJChERVNURElSKSQkaTsgdGhlbiBcCisJCQllY2hvICJDcmVhdGluZyBkaXJlY3RvcnkgJCRpIjsgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9weXRob24tMi43LjMtcmVtb3ZlLWJzZGItcnBhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3B5dGhvbi0yLjcuMy1yZW1vdmUtYnNkYi1ycGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTZiZTBhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9weXRob24tMi43LjMtcmVtb3ZlLWJzZGItcnBhdGgucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworUmVtb3ZlIHRoZSBSUEFUSCB0byBhdm9pZCBRQSBpc3N1ZSB3YXJuaW5nLgorCitSUDogQWRkZWQgc2Vjb25kYXJ5IHVubmVjZXNzYXJ5IHJwYXRoIHRvIHRoZSBsaXN0IDIwMTIvOC83CitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorCisKK0luZGV4OiBQeXRob24tMi43LjMvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43LjMub3JpZy9zZXR1cC5weQkyMDEyLTA4LTA3IDEwOjQxOjU4LjU2MDEzMjUyOSArMDAwMAorKysrIFB5dGhvbi0yLjcuMy9zZXR1cC5weQkyMDEyLTA4LTA3IDExOjA5OjQ3Ljg1MjA5NDUxNSArMDAwMAorQEAgLTEwNDIsNyArMTA0Miw2IEBACisgICAgICAgICAgICAgZXh0cy5hcHBlbmQoRXh0ZW5zaW9uKCdfYnNkZGInLCBbJ19ic2RkYi5jJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMgPSBbJ2JzZGRiLmgnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeV9kaXJzPWRibGliX2RpciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZV9saWJyYXJ5X2RpcnM9ZGJsaWJfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX2RpcnM9ZGJfaW5jcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzPWRibGlicykpCisgICAgICAgICBlbHNlOgorQEAgLTEyNTIsNyArMTI1MSw2IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgImJ1aWxkaW5nIGRibSB1c2luZyBiZGIiCisgICAgICAgICAgICAgICAgICAgICAgICAgZGJtZXh0ID0gRXh0ZW5zaW9uKCdkYm0nLCBbJ2RibW1vZHVsZS5jJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnlfZGlycz1kYmxpYl9kaXIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWVfbGlicmFyeV9kaXJzPWRibGliX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9kaXJzPWRiX2luY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZV9tYWNyb3M9WworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdIQVZFX0JFUktEQl9IJywgTm9uZSksCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZjllZWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3J1bi1wdGVzdApAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9zaAorIworI1RoaXMgc2NyaXB0IGlzIHVzZWQgdG8gcnVuIHB5dGhvbiB0ZXN0IHN1aXRlcworCittYWtlIC1mIExJQkRJUi9weXRob24vcHRlc3QvTWFrZWZpbGUgLWsgcnVudGVzdC1URVNUUyBzcmNkaXI9TElCRElSL3B5dGhvbjIuNyBURVNUUFJPRz1MSUJESVIvcHl0aG9uMi43L3Rlc3QvcmVncnRlc3QucHkgfCBzZWQgLWUgJy9cLlwuXC4gb2svIHMvXi9QQVNTOiAvZycgLWUgJy9cLlwuXC4gW0VSUk9SfEZBSUxdLyBzL14vRkFJTDogL2cnIC1lICcvXC5cLlwuIHNraXBwZWQvIHMvXi9TS0lQOiAvZycgLWUgJ3MvIFwuXC5cLiBvay8vZycgLWUgJ3MvIFwuXC5cLiBFUlJPUi8vZycgLWUgJ3MvIFwuXC5cLiBGQUlMLy9nJyAtZSAncy8gXC5cLlwuIHNraXBwZWQvL2cnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NlYXJjaF9kYl9oX2luX2luY19kaXJzX2FuZF9hdm9pZF93YXJuaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9zZWFyY2hfZGJfaF9pbl9pbmNfZGlyc19hbmRfYXZvaWRfd2FybmluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWNiNTUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9zZWFyY2hfZGJfaF9pbl9pbmNfZGlyc19hbmRfYXZvaWRfd2FybmluZy5wYXRjaApAQCAtMCwwICsxLDM1IEBACitweXRob24gc2hvdWxkIHNlYXJjaCBmb3IgZGIuaCBpbiBpbmNfZGlycyBhbmQgbm90IGluIGEgaGFyZGNvZGVkIHBhdGguCitJZiBkYi5oIGlzIGZvdW5kIGJ1dCBIQVNIVkVSU0lPTiBpcyBub3QgMiB3ZSBhdm9pZCBhIHdhcm5pbmcgYnkgbm90IAorYWRkaW5nIHRoaXMgbW9kdWxlIHRvIG1pc3NpbmcgdmFyaWFibGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CisKKworZGlmZiAtLWdpdCBhL3NldHVwLnB5IGIvc2V0dXAucHkKK2luZGV4IGI4ODc4MDguLmFlNTE2MDcgMTAwNjQ0CistLS0gYS9zZXR1cC5weQorKysrIGIvc2V0dXAucHkKK0BAIC0xMjM3LDYgKzEyMzcsOCBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAjIHRoZSBtb3JlIHJlY2VudCBiZXJrZWxleWRiJ3MgZGIuaCBmaWxlIGZpcnN0IGluIHRoZSBpbmNsdWRlIHBhdGgKKyAgICAgICAgICMgd2hlbiBhdHRlbXB0aW5nIHRvIGNvbXBpbGUgYW5kIGl0IHdpbGwgZmFpbC4KKyAgICAgICAgIGYgPSAiL3Vzci9pbmNsdWRlL2RiLmgiCisrICAgICAgICBpZiBsZW4oaW5jX2RpcnMpICE9IDA6CisrICAgICAgICAgICAgZiA9IG9zLnBhdGguam9pbihpbmNfZGlyc1swXSwgImRiLmgiKQorIAorICAgICAgICAgaWYgaG9zdF9wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgICBpZiBpc19tYWNvc3hfc2RrX3BhdGgoZik6CitAQCAtMTI1Nyw4ICsxMjU5LDEwIEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM9bGlicmFyaWVzKSkKKyAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIGV4dHMuYXBwZW5kKEV4dGVuc2lvbignYnNkZGIxODUnLCBbJ2JzZGRibW9kdWxlLmMnXSkpCistICAgICAgICAgICAgZWxzZToKKy0gICAgICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoJ2JzZGRiMTg1JykKKysgICAgICAgICAgICAjIElmIGEgbmV3ZXIgdmVyc2lvbiBpcyBkZXRlY3RlZCBkb24ndCByZXBvcnQgYW4gdXNlbGVzcworKyAgICAgICAgICAgICMgd2FybmluZworKyAgICAgICAgICAgICNlbHNlOgorKyAgICAgICAgICAgICMgICAgbWlzc2luZy5hcHBlbmQoJ2JzZGRiMTg1JykKKyAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoJ2JzZGRiMTg1JykKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc2V0dXBfcHlfc2tpcF9jcm9zc19pbXBvcnRfY2hlY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NldHVwX3B5X3NraXBfY3Jvc3NfaW1wb3J0X2NoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjY2RiOTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NldHVwX3B5X3NraXBfY3Jvc3NfaW1wb3J0X2NoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1RoaXMgcGF0Y2ggc2tpcHMgb3ZlciB0aGUgJ2ltcG9ydCBjaGVjaycgc2V0dXAucHkgZG9lcyB3aGVuIGJ1aWxkaW5nCitleHRlbnNpb25zLiAgVGhpcyBnZW5lcmFsbHkgd29uJ3Qgd29yayB3aGVuIGNyb3NzLWNvbXBpbGluZy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZC1zcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogVG9tIFphbnVzc2kgPHRvbS56YW51c3NpQGludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0yLjcuMi9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuMi5vcmlnL3NldHVwLnB5CTIwMTEtMTEtMDQgMTY6NDY6MzQuNTUzNzk2NDEwIC0wNTAwCisrKysgUHl0aG9uLTIuNy4yL3NldHVwLnB5CTIwMTEtMTEtMDQgMTY6NTk6NDkuNjkyODAyMzEzIC0wNTAwCitAQCAtMjg3LDYgKzI4NywxNSBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4dC5uYW1lLCBzeXMuZXhjX2luZm8oKVsxXSkpCisgICAgICAgICAgICAgc2VsZi5mYWlsZWQuYXBwZW5kKGV4dC5uYW1lKQorICAgICAgICAgICAgIHJldHVybgorKworKyAgICAgICAgIyBJZiB3ZSdyZSBjcm9zcy1jb21waWxpbmcsIHdlIHdhbnQgdG8gc2tpcCB0aGUgaW1wb3J0IGNoZWNrCisrICAgICAgICAjIGkuZS4gd2Ugc2hvdWxkbid0IGJlIGR5bmFtaWNhbGx5IGxvYWRpbmcgdGFyZ2V0IHNoYXJlZCBsaWJzCisrICAgICAgICBpZiBvcy5lbnZpcm9uLmdldCgnQ1JPU1NfQ09NUElMRScpIGlzIG5vdCBOb25lOgorKyAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoCisrICAgICAgICAgICAgICAgICdXQVJOSU5HOiBza2lwcGluZyBpbXBvcnQgY2hlY2sgZm9yIGNyb3NzLWNvbXBpbGVkICIlcyInICUKKysgICAgICAgICAgICAgICAgZXh0Lm5hbWUpCisrICAgICAgICAgICAgcmV0dXJuCisrCisgICAgICAgICAjIFdvcmthcm91bmQgZm9yIE1hYyBPUyBYOiBUaGUgQ2FyYm9uLWJhc2VkIG1vZHVsZXMgY2Fubm90IGJlCisgICAgICAgICAjIHJlbGlhYmx5IGltcG9ydGVkIGludG8gYSBjb21tYW5kLWxpbmUgUHl0aG9uCisgICAgICAgICBpZiAnQ2FyYm9uJyBpbiBleHQuZXh0cmFfbGlua19hcmdzOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9zZXR1cHR3ZWFrcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc2V0dXB0d2Vha3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E5MWIxOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc2V0dXB0d2Vha3MucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorVGhpcyBwYXRjaCByZW1vdmVzIHZhcmlvdXMgd2F5cyBuYXRpdmUgc3lzdGVtIG9wdGlvbnMgY2FuIHBhc3MgaW50byB0aGUgcHl0aG9uIAorY29tcGlsYXRpb24gYW5kIHNvbWVob3cgYnJlYWsgQyBtb2R1bGVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIFNwZWNpZmljXQorCitSUCAyMDEyLzA0LzIzCisKK0luZGV4OiBQeXRob24tMi43LjIvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43LjIub3JpZy9zZXR1cC5weQkyMDEyLTA0LTIzIDIwOjAzOjQ3LjI5NTU4MjU1MyArMDAwMAorKysrIFB5dGhvbi0yLjcuMi9zZXR1cC5weQkyMDEyLTA0LTIzIDIwOjAzOjE1LjAwMDAwMDAwMCArMDAwMAorQEAgLTIzMSw3ICsyMzEsMTMgQEAKKyAgICAgICAgICMgY29tcGlsZXJzCisgICAgICAgICBpZiBjb21waWxlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAoY2NzaGFyZWQsY2ZsYWdzKSA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMoJ0NDU0hBUkVEJywnQ0ZMQUdTJykKKy0gICAgICAgICAgICBhcmdzWydjb21waWxlcl9zbyddID0gY29tcGlsZXIgKyAnICcgKyBjY3NoYXJlZCArICcgJyArIGNmbGFncworKyAgICAgICAgICAgICMgTmVlZCB0byBmaWx0ZXIgb3V0IC1pc3lzcm9vdCBmcm9tIHRoZSBmbGFncy4gSWRlYWxseSBzaG91bGQgCisrICAgICAgICAgICAgIyBmaWd1cmUgb3V0IHRhcmdldCBmbGFncyBoZXJlLgorKyAgICAgICAgICAgIGZsYWdzID0gW10KKysgICAgICAgICAgICBmb3IgZiBpbiBjZmxhZ3Muc3BsaXQoKToKKysgICAgICAgICAgICAgICAgaWYgbm90IGYuc3RhcnRzd2l0aCgiLWlzeXN0ZW0iKToKKysgICAgICAgICAgICAgICAgICAgIGZsYWdzLmFwcGVuZChmKQorKyAgICAgICAgICAgIGFyZ3NbJ2NvbXBpbGVyX3NvJ10gPSBjb21waWxlciArICcgJyArIGNjc2hhcmVkICsgJyAnICsgJyAnLmpvaW4oZmxhZ3MpCisgICAgICAgICBzZWxmLmNvbXBpbGVyLnNldF9leGVjdXRhYmxlcygqKmFyZ3MpCisgCisgICAgICAgICBidWlsZF9leHQuYnVpbGRfZXh0ZW5zaW9ucyhzZWxmKQorQEAgLTM5Myw3ICszOTksNiBAQAorICAgICAgICAgIyBpbnRvIGNvbmZpZ3VyZSBhbmQgc3RvcmVkIGluIHRoZSBNYWtlZmlsZSAoaXNzdWUgZm91bmQgb24gT1MgWCAxMC4zKS4KKyAgICAgICAgIGZvciBlbnZfdmFyLCBhcmdfbmFtZSwgZGlyX2xpc3QgaW4gKAorICAgICAgICAgICAgICAgICAoJ0xERkxBR1MnLCAnLVInLCBzZWxmLmNvbXBpbGVyLnJ1bnRpbWVfbGlicmFyeV9kaXJzKSwKKy0gICAgICAgICAgICAgICAgKCdMREZMQUdTJywgJy1MJywgc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMpLAorICAgICAgICAgICAgICAgICAoJ0NQUEZMQUdTJywgJy1JJywgc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMpKToKKyAgICAgICAgICAgICBlbnZfdmFsID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKGVudl92YXIpCisgICAgICAgICAgICAgaWYgZW52X3ZhbDoKK0BAIC00MTksMTYgKzQyNCwxNiBAQAorICAgICAgICAgICAgICAgICAgICAgZm9yIGRpcmVjdG9yeSBpbiByZXZlcnNlZChvcHRpb25zLmRpcnMpOgorICAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChkaXJfbGlzdCwgZGlyZWN0b3J5KQorIAorLSAgICAgICAgaWYgb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KSAhPSAnL3VzcicgXAorLSAgICAgICAgICAgICAgICBhbmQgbm90IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUFlUSE9ORlJBTUVXT1JLJyk6CisrIyAgICAgICAgaWYgb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KSAhPSAnL3VzcicgXAorKyMgICAgICAgICAgICAgICAgYW5kIG5vdCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1BZVEhPTkZSQU1FV09SSycpOgorICAgICAgICAgICAgICMgT1NYIG5vdGU6IERvbid0IGFkZCBMSUJESVIgYW5kIElOQ0xVREVESVIgdG8gYnVpbGRpbmcgYSBmcmFtZXdvcmsKKyAgICAgICAgICAgICAjIChQWVRIT05GUkFNRVdPUksgaXMgc2V0KSB0byBhdm9pZCAjIGxpbmtpbmcgcHJvYmxlbXMgd2hlbgorICAgICAgICAgICAgICMgYnVpbGRpbmcgYSBmcmFtZXdvcmsgd2l0aCBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcyB0aGFuCisgICAgICAgICAgICAgIyB0aGUgb25lIHRoYXQgaXMgY3VycmVudGx5IGluc3RhbGxlZCAoaXNzdWUgIzc0NzMpCistICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkxJQkRJUiIpKQorLSAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJJTkNMVURFRElSIikpCisrIyAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycywKKysjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiTElCRElSIikpCisrIyAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycywKKysjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiSU5DTFVERURJUiIpKQorIAorICAgICAgICAgdHJ5OgorICAgICAgICAgICAgIGhhdmVfdW5pY29kZSA9IHVuaWNvZGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc2l0ZWN1c3RvbWl6ZS5weSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc2l0ZWN1c3RvbWl6ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzM5MDE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9zaXRlY3VzdG9taXplLnB5CkBAIC0wLDAgKzEsNDUgQEAKKyMgT3BlbkVtYmVkZGVkIHNpdGVjdXN0b21pemUucHkgKEMpIDIwMDItMjAwOCBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtbGF1ZXJAdmFuaWxsZS1tZWRpYS5kZT4KKyMgR1BMdjIgb3IgbGF0ZXIKKyMgVmVyc2lvbjogMjAwODExMjMKKyMgRmVhdHVyZXM6CisjICogc2V0IHByb3BlciBkZWZhdWx0IGVuY29kaW5nCisjICogZW5hYmxlIHJlYWRsaW5lIGNvbXBsZXRpb24gaW4gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyCisjICogbG9hZCBjb21tYW5kIGxpbmUgaGlzdG9yeSBvbiBzdGFydHVwCisjICogc2F2ZSBjb21tYW5kIGxpbmUgaGlzdG9yeSBvbiBleGl0IAorCitpbXBvcnQgb3MKKworZGVmIF9fZXhpdGhhbmRsZXIoKToKKyAgICB0cnk6CisgICAgICAgIHJlYWRsaW5lLndyaXRlX2hpc3RvcnlfZmlsZSggIiVzLy5weXRob24taGlzdG9yeSIgJSBvcy5nZXRlbnYoICJIT01FIiwgIi90bXAiICkgKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBwYXNzCisKK2RlZiBfX3JlZ2lzdGVyRXhpdEhhbmRsZXIoKToKKyAgICBpbXBvcnQgYXRleGl0CisgICAgYXRleGl0LnJlZ2lzdGVyKCBfX2V4aXRoYW5kbGVyICkKKworZGVmIF9fZW5hYmxlUmVhZGxpbmVTdXBwb3J0KCk6CisgICAgcmVhZGxpbmUuc2V0X2hpc3RvcnlfbGVuZ3RoKCAxMDAwICkKKyAgICByZWFkbGluZS5wYXJzZV9hbmRfYmluZCggInRhYjogY29tcGxldGUiICkKKyAgICB0cnk6CisgICAgICAgIHJlYWRsaW5lLnJlYWRfaGlzdG9yeV9maWxlKCAiJXMvLnB5dGhvbi1oaXN0b3J5IiAlIG9zLmdldGVudiggIkhPTUUiLCAiL3RtcCIgKSApCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHBhc3MKKworZGVmIF9fZW5hYmxlRGVmYXVsdEVuY29kaW5nKCk6CisgICAgaW1wb3J0IHN5cworICAgIHRyeToKKyAgICAgICAgc3lzLnNldGRlZmF1bHRlbmNvZGluZyggInV0ZjgiICkKKyAgICBleGNlcHQgTG9va3VwRXJyb3I6CisgICAgICAgIHBhc3MKKworaW1wb3J0IHN5cwordHJ5OgorICAgIGltcG9ydCBybGNvbXBsZXRlciwgcmVhZGxpbmUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCitlbHNlOgorICAgIF9fZW5hYmxlRGVmYXVsdEVuY29kaW5nKCkKKyAgICBfX3JlZ2lzdGVyRXhpdEhhbmRsZXIoKQorICAgIF9fZW5hYmxlUmVhZGxpbmVTdXBwb3J0KCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vdXNlX3N5c3Jvb3RfbmN1cnNlc19pbnN0ZWFkX29mX2hvc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3VzZV9zeXNyb290X25jdXJzZXNfaW5zdGVhZF9vZl9ob3N0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNjU3ODYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3VzZV9zeXNyb290X25jdXJzZXNfaW5zdGVhZF9vZl9ob3N0LnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1B5dGhvbiB0cmllcyB0byB1c2UgbmN1cnNlc3cgZnJvbSB0aGUgaG9zdCwKK2lmIGl0IGlzIG5vdCBmb3VuZCBjYXVzZXMgYW4gZXJyb3Igb24gY29uZmlndXJlLAord2Ugc2hvdWxkIHVzZSBuY3Vyc2VzdyBmcm9tIHN5c3Jvb3QgaW5zdGVhZAorCisKK1NpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTIuNy45L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIFB5dGhvbi0yLjcuOS9jb25maWd1cmUuYWMKK0BAIC00MzExLDcgKzQzMTEsNyBAQCBmaQorIAorICMgZmlyc3QgY3Vyc2VzIGNvbmZpZ3VyZSBjaGVjaworIGFjX3NhdmVfY3BwZmxhZ3M9IiRDUFBGTEFHUyIKKy1DUFBGTEFHUz0iJENQUEZMQUdTIC1JL3Vzci9pbmNsdWRlL25jdXJzZXN3IgorK0NQUEZMQUdTPSIkQ1BQRkxBR1MgLUk9L3Vzci9pbmNsdWRlL25jdXJzZXN3IgorIAorIEFDX0NIRUNLX0hFQURFUlMoY3Vyc2VzLmggbmN1cnNlcy5oKQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtbmF0aXZlXzMuNC4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtbmF0aXZlXzMuNC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NGZmMDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1uYXRpdmVfMy40LjMuYmIKQEAgLTAsMCArMSw3NiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24uaW5jCisKK1BSID0gIiR7SU5DX1BSfS4wIgorUFlUSE9OX01BSk1JTiA9ICIzLjQiCitESVNUUk9fU1JDX1VSSSA/PSAiZmlsZTovL3NpdGVjdXN0b21pemUucHkiCitESVNUUk9fU1JDX1VSSV9saW51eHN0ZGJhc2UgPSAiIgorU1JDX1VSSSA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmcvZnRwL3B5dGhvbi8ke1BWfS9QeXRob24tJHtQVn0udGFyLnh6IFwKK2ZpbGU6Ly8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2ggXAorZmlsZTovL3B5dGhvbi1jb25maWcucGF0Y2ggXAorZmlsZTovLzAwMC1jcm9zcy1jb21waWxlLnBhdGNoIFwKK2ZpbGU6Ly8wMjAtZG9udC1jb21waWxlLXB5dGhvbi1maWxlcy5wYXRjaCBcCitmaWxlOi8vMDMwLWZpeHVwLWluY2x1ZGUtZGlycy5wYXRjaCBcCitmaWxlOi8vMDcwLWRvbnQtY2xlYW4taXBrZy1pbnN0YWxsLnBhdGNoIFwKK2ZpbGU6Ly8wODAtZGlzdHV0aWxzLWRvbnRfYWRqdXN0X2ZpbGVzLnBhdGNoIFwKK2ZpbGU6Ly8xMTAtZW5hYmxlLXpsaWIucGF0Y2ggXAorZmlsZTovLzEzMC1yZWFkbGluZS1zZXR1cC5wYXRjaCBcCitmaWxlOi8vMTUwLWZpeC1zZXR1cHRlcm0ucGF0Y2ggXAorZmlsZTovL3B5dGhvbi0zLjMtbXVsdGlsaWIucGF0Y2ggXAorZmlsZTovLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaCBcCitmaWxlOi8vYXZvaWRfd2FybmluZ19hYm91dF90a2ludGVyLnBhdGNoIFwKK2ZpbGU6Ly9zaHV0aWwtZm9sbG93LXN5bWxpbmstZml4LnBhdGNoIFwKK2ZpbGU6Ly8wMDAxLWgycHktRml4LWlzc3VlLTEzMDMyLXdoZXJlLWl0LWZhaWxzLXdpdGgtVW5pY29kZURlY28ucGF0Y2ggXAorZmlsZTovL3N5c3Jvb3QtaW5jbHVkZS1oZWFkZXJzLnBhdGNoIFwKK2ZpbGU6Ly91bml4Y2NvbXBpbGVyLnBhdGNoIFwKK2ZpbGU6Ly9tYWtlcmFjZS5wYXRjaCBcCiske0RJU1RST19TUkNfVVJJfSBcCitmaWxlOi8vc3lzY29uZmlnLnB5LWFkZC1fUFlUSE9OX1BST0pFQ1RfU1JDLnBhdGNoIFwKK2ZpbGU6Ly9zZXR1cC5weS1jaGVjay1jcm9zc19jb21waWxpbmctd2hlbi1nZXQtRkxBR1MucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjdkMDkyZDFiYmE2ZTE3ZjBkOWJkMjFiNDllNDQxZGQ1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI1YjM5NjM1MzM3NjhkNWZjMzI1YTRkN2E2YmQ2ZjY2NjcyNjAwMmQ2OTZmMWQzOTllYzA2YjA0M2VhOTk2YjgiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWRkOThkMDFkNDcxZmFjOGQ4ZGJkZDk3NTIyOWRiYTAzIgorCitTID0gIiR7V09SS0RJUn0vUHl0aG9uLSR7UFZ9IgorCitFWFRSQU5BVElWRVBBVEggKz0gImJ6aXAyLW5hdGl2ZSIKK0RFUEVORFMgPSAib3BlbnNzbC1uYXRpdmUgYnppcDItcmVwbGFjZW1lbnQtbmF0aXZlIHpsaWItbmF0aXZlIHJlYWRsaW5lLW5hdGl2ZSBzcWxpdGUzLW5hdGl2ZSIKKworaW5oZXJpdCBuYXRpdmUKKworUlBST1ZJREVTICs9ICJweXRob24zLWRpc3R1dGlscy1uYXRpdmUgcHl0aG9uMy1jb21wcmVzc2lvbi1uYXRpdmUgcHl0aG9uMy10ZXh0dXRpbHMtbmF0aXZlIHB5dGhvbjMtY29yZS1uYXRpdmUiCisKK0VYVFJBX09FQ09ORl9hcHBlbmQgPSAiIC0tYmluZGlyPSR7YmluZGlyfS8ke1BOfSAtLXdpdGhvdXQtZW5zdXJlcGlwIgorCitFWFRSQV9PRU1BS0UgPSAnXAorICBCVUlMRF9TWVM9IiIgXAorICBIT1NUX1NZUz0iIiBcCisgIExJQkM9IiIgXAorICBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSX05BVElWRX0gXAorICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSX05BVElWRX0gXAorICBMSUI9JHtiYXNlbGlifSBcCisgIEFSQ0g9JHtUQVJHRVRfQVJDSH0gXAorJworCisjIE5vIGN0eXBlcyBvcHRpb24gZm9yIHB5dGhvbiAzCitQWVRIT05MU0JPUFRTID0gIiIKKworZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKKwlhdXRvcmVjb25mIC0tdmVyYm9zZSAtLWluc3RhbGwgLS1mb3JjZSAtLWV4Y2x1ZGU9YXV0b3BvaW50IC4uL1B5dGhvbi0ke1BWfS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpCit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorCWlmIFsgLWUgJHtXT1JLRElSfS9zaXRlY3VzdG9taXplLnB5IF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2l0ZWN1c3RvbWl6ZS5weSAke0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59CisJZmkKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vJHtQTn0KKwlpbnN0YWxsIC1tIDA3NTUgUGFyc2VyL3BnZW4gJHtEfSR7YmluZGlyfS8ke1BOfQorCisJIyBNYWtlIHN1cmUgd2UgdXNlIC91c3IvYmluL2VudiBweXRob24KKwlmb3IgUFlUSFNDUklQVCBpbiBgZ3JlcCAtcklsICR7YmluZGlyfS8ke1BOfS9weXRob24gJHtEfSR7YmluZGlyfS8ke1BOfWA7IGRvCisJCXNlZCAtaSAtZSAnMXN8XiMhLip8IyEvdXNyL2Jpbi9lbnYgcHl0aG9uM3wnICRQWVRIU0NSSVBUCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcGlwXzYuMS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcGlwXzYuMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZmMzMGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1waXBfNi4xLjEuYmIKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJUaGUgUHlQQSByZWNvbW1lbmRlZCB0b29sIGZvciBpbnN0YWxsaW5nIFB5dGhvbiBwYWNrYWdlcyIKK3NIT01FUEFHRXNzcyA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3BpcCIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9NDU2NjViNTMwMzJjMDJiMzVlMjlkZGFiOGU2MWZhOTEiCisKK1NSQ05BTUUgPSAicGlwIgorREVQRU5EUyArPSAicHl0aG9uMyBweXRob24zLXNldHVwdG9vbHMtbmF0aXZlIgorCitTUkNfVVJJID0gIiBcCisgIGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL3AvJHtTUkNOQU1FfS8ke1NSQ05BTUV9LSR7UFZ9LnRhci5neiBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiNmIxOWUwYTkzNGQ5ODJhNWE0Yjc5OGU5NTdjYjZkNDUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODlmM2I2MjZkMjI1ZTA4ZTdmMjBkODUwNDRhZmE0MGY2MTJlYjMyODQ0ODQxNjk4MTNkYzJkMDYzMWYyYTU1NiIKKworUyA9ICIke1dPUktESVJ9LyR7U1JDTkFNRX0tJHtQVn0iCisKK2luaGVyaXQgZGlzdHV0aWxzMworCitESVNUVVRJTFNfSU5TVEFMTF9BUkdTICs9ICItLWluc3RhbGwtbGliPSR7RH0ke2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzIgorCitkb19pbnN0YWxsX3ByZXBlbmQoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9LyR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMKK30KKworIyBVc2Ugc2V0dXB0b29scyBzaXRlLnB5IGluc3RlYWQsIGF2b2lkIHNoYXJlZCBzdGF0ZSBpc3N1ZQorZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgcm0gJHtEfS8ke2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzL3NpdGUucHkKKyAgICBybSAke0R9LyR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMvX19weWNhY2hlX18vc2l0ZS5jcHl0aG9uLTM0LnB5YworfQorCitSREVQRU5EU18ke1BOfSA9ICJcCisgIHB5dGhvbjMtY29tcGlsZSBcCisgIHB5dGhvbjMtaW8gXAorICBweXRob24zLWpzb24gXAorICBweXRob24zLW5ldHNlcnZlciBcCisgIHB5dGhvbjMtc2V0dXB0b29scyBcCisgIHB5dGhvbjMtdW5peGFkbWluIFwKKyAgcHl0aG9uMy14bWxycGMgXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtc2V0dXB0b29sc18xOC4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtc2V0dXB0b29sc18xOC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMGFjODAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1zZXR1cHRvb2xzXzE4LjIuYmIKQEAgLTAsMCArMSw1NSBAQAorU1VNTUFSWSA9ICJEb3dubG9hZCwgYnVpbGQsIGluc3RhbGwsIHVwZ3JhZGUsIGFuZCB1bmluc3RhbGwgUHl0aG9uIHBhY2thZ2VzIgorSE9NRVBBR0UgPSAiaHR0cDovL3BhY2thZ2VzLnB5dGhvbi5vcmcvc2V0dXB0b29scyIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJQU0YiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zZXR1cC5weTtiZWdpbmxpbmU9Nzg7ZW5kbGluZT03ODttZDU9OGEzMTQyNzBkZDdhOGRiY2E3NDE3NzU0MTVmMTcxNmUiCisKK1NSQ05BTUUgPSAic2V0dXB0b29scyIKK0RFUEVORFMgKz0gInB5dGhvbjMiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSArPSAicHl0aG9uMy1uYXRpdmUiCisKK1NSQ19VUkkgPSAiIFwKKyAgaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2Uvcy8ke1NSQ05BTUV9LyR7U1JDTkFNRX0tJHtQVn0udGFyLmd6IFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MmI0ZTQ4OTM5ZWYzMTFkNzIwNGY4ZmU5NDA3NjRmNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwOTk0YTU4ZGYyN2VhNWRjNTIzNzgyYTYwMTM1N2EyMTk4Yjc0OTNkY2M5OWEzMGQ1MTgyN2EyMzU4NWI1YjFkIgorCitTID0gIiR7V09SS0RJUn0vJHtTUkNOQU1FfS0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMzCisKK0RJU1RVVElMU19JTlNUQUxMX0FSR1MgKz0gIi0taW5zdGFsbC1saWI9JHtEfSR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMiCisKK2RvX2luc3RhbGxfcHJlcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0vJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcworfQorIworIyAgVGhlIGluc3RhbGxlciBwdXRzIHRoZSB3cm9uZyBwYXRoIGluIHRoZSBzZXR1cHRvb2xzLnB0aCBmaWxlLiAgQ29ycmVjdCBpdC4KKyMKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIHJtICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9zZXR1cHRvb2xzLnB0aAorICAgIG12ICR7RH0ke2JpbmRpcn0vZWFzeV9pbnN0YWxsICR7RH0ke2JpbmRpcn0vZWFzeTNfaW5zdGFsbAorICAgIGVjaG8gIi4vJHtTUkNOQU1FfS0ke1BWfS1weSR7UFlUSE9OX0JBU0VWRVJTSU9OfS5lZ2ciID4gJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L3NldHVwdG9vbHMucHRoCit9CisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgcHl0aG9uMy1kaXN0dXRpbHMgXAorICBweXRob24zLWNvbXByZXNzaW9uIFwKKyIKK1JERVBFTkRTXyR7UE59X2NsYXNzLXRhcmdldCA9ICJcCisgIHB5dGhvbjMtY3R5cGVzIFwKKyAgcHl0aG9uMy1kaXN0dXRpbHMgXAorICBweXRob24zLWVtYWlsIFwKKyAgcHl0aG9uMy1pbXBvcnRsaWIgXAorICBweXRob24zLW51bWJlcnMgXAorICBweXRob24zLWNvbXByZXNzaW9uIFwKKyAgcHl0aG9uMy1zaGVsbCBcCisgIHB5dGhvbjMtc3VicHJvY2VzcyBcCisgIHB5dGhvbjMtdGV4dHV0aWxzIFwKKyAgcHl0aG9uMy1wa2d1dGlsIFwKKyAgcHl0aG9uMy10aHJlYWRpbmcgXAorICBweXRob24zLW1pc2MgXAorICBweXRob24zLXVuaXR0ZXN0IFwKKyAgcHl0aG9uMy14bWwgXAorIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMDAtY3Jvc3MtY29tcGlsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAwMC1jcm9zcy1jb21waWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MDZhNTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMDAtY3Jvc3MtY29tcGlsZS5wYXRjaApAQCAtMCwwICsxLDgzIEBACitXZSBjcm9zcyBjb21waWxlIHB5dGhvbi4gVGhpcyBwYXRjaCB1c2VzIHRvb2xzIGZyb20gaG9zdC9uYXRpdmUKK3B5dGhvbiBpbnN0ZWFkIG9mIGluLXRyZWUgdG9vbHMKKworLUtoZW0KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlW0NvbmZpZ3VyYXRpb24gU3BlY2lmaWNdCisKKy0tLQorIE1ha2VmaWxlLnByZS5pbiB8ICAgMjUgKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKKworLS0tIGEvTWFrZWZpbGUucHJlLmluCisrKysgYi9NYWtlZmlsZS5wcmUuaW4KK0BAIC0xOTMsNiArMTkzLDcgQEAgTElCT0JKUz0JQExJQk9CSlNACisgCisgUFlUSE9OPQkJcHl0aG9uJChFWEUpCisgQlVJTERQWVRIT049CXB5dGhvbiQoQlVJTERFWEUpCisrSE9TVFBZVEhPTj0JJChCVUlMRFBZVEhPTikKKyAKKyBQWVRIT05fRk9SX0JVSUxEPUBQWVRIT05fRk9SX0JVSUxEQAorIF9QWVRIT05fSE9TVF9QTEFURk9STT1AX1BZVEhPTl9IT1NUX1BMQVRGT1JNQAorQEAgLTIzOSw2ICsyNDAsNyBAQCBMSUJGRklfSU5DTFVERURJUj0JQExJQkZGSV9JTkNMVURFRElSQAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgIyBQYXJzZXIKKyBQR0VOPQkJUGFyc2VyL3BnZW4kKEVYRSkKKytIT1NUUEdFTj0JJChQR0VOKSQoRVhFKQorIAorIFBTUkNTPQkJXAorIAkJUGFyc2VyL2FjY2VsZXIuYyBcCitAQCAtNDUxLDcgKzQ1Myw3IEBAIGJ1aWxkX2FsbF9nZW5lcmF0ZV9wcm9maWxlOgorIAorIHJ1bl9wcm9maWxlX3Rhc2s6CisgCTogIyBGSVhNRTogY2FuJ3QgcnVuIGZvciBhIGNyb3NzIGJ1aWxkCistCSQoUlVOU0hBUkVEKSAuLyQoQlVJTERQWVRIT04pICQoUFJPRklMRV9UQVNLKQorKwkkKFJVTlNIQVJFRCkgJChIT1NUUFlUSE9OKSAkKFBST0ZJTEVfVEFTSykKKyAKKyBidWlsZF9hbGxfdXNlX3Byb2ZpbGU6CisgCSQoTUFLRSkgYWxsIENGTEFHUz0iJChDRkxBR1MpIC1mcHJvZmlsZS11c2UgLWZwcm9maWxlLWNvcnJlY3Rpb24iCitAQCAtNjQwLDcgKzY0Miw3IEBAICQoSU9fT0JKUyk6ICQoSU9fSCkKKyAkKEdSQU1NQVJfSCk6ICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykKKyAJCUAkKE1LRElSX1ApIEluY2x1ZGUKKyAJCSQoTUFLRSkgJChQR0VOKQorLQkJJChQR0VOKSAkKEdSQU1NQVJfSU5QVVQpICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQykKKysJCSQoSE9TVFBHRU4pICQoR1JBTU1BUl9JTlBVVCkgJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKQorICQoR1JBTU1BUl9DKTogJChHUkFNTUFSX0gpICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykKKyAJCSQoTUFLRSkgJChHUkFNTUFSX0gpCisgCQl0b3VjaCAkKEdSQU1NQVJfQykKK0BAIC04MjAsNyArODIyLDcgQEAgJChMSUJSQVJZX09CSlMpICQoTU9ET0JKUykgTW9kdWxlcy9weXRobworICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAKKyBURVNUT1BUUz0JJChFWFRSQVRFU1RPUFRTKQorLVRFU1RQWVRIT049CSQoUlVOU0hBUkVEKSAuLyQoQlVJTERQWVRIT04pICQoVEVTVFBZVEhPTk9QVFMpCisrVEVTVFBZVEhPTj0JJChSVU5TSEFSRUQpICQoSE9TVFBZVEhPTikgJChURVNUUFlUSE9OT1BUUykKKyBURVNUUlVOTkVSPQkkKFRFU1RQWVRIT04pICQoc3JjZGlyKS9Ub29scy9zY3JpcHRzL3J1bl90ZXN0cy5weQorIFRFU1RUSU1FT1VUPQkzNjAwCisgCitAQCAtMTIyOSw3ICsxMjMxLDcgQEAgZnJhbWV3b3JraW5zdGFsbHN0cnVjdHVyZToJJChMRExJQlJBUlkpCisgCQlmaTsgXAorIAlkb25lCisgCSQoTE4pIC1mc24gaW5jbHVkZS9weXRob24kKExEVkVSU0lPTikgJChERVNURElSKSQocHJlZml4KS9IZWFkZXJzCistCXNlZCAncy8lVkVSU0lPTiUvJyJgJChSVU5TSEFSRUQpIC4vJChCVUlMRFBZVEhPTikgLWMgJ2ltcG9ydCBwbGF0Zm9ybTsgcHJpbnQocGxhdGZvcm0ucHl0aG9uX3ZlcnNpb24oKSknYCInL2cnIDwgJChSRVNTUkNESVIpL0luZm8ucGxpc3QgPiAkKERFU1RESVIpJChwcmVmaXgpL1Jlc291cmNlcy9JbmZvLnBsaXN0CisrCXNlZCAncy8lVkVSU0lPTiUvJyJgJChSVU5TSEFSRUQpICQoSE9TVFBZVEhPTikgLWMgJ2ltcG9ydCBwbGF0Zm9ybTsgcHJpbnQocGxhdGZvcm0ucHl0aG9uX3ZlcnNpb24oKSknYCInL2cnIDwgJChSRVNTUkNESVIpL0luZm8ucGxpc3QgPiAkKERFU1RESVIpJChwcmVmaXgpL1Jlc291cmNlcy9JbmZvLnBsaXN0CisgCSQoTE4pIC1mc24gJChWRVJTSU9OKSAkKERFU1RESVIpJChQWVRIT05GUkFNRVdPUktJTlNUQUxMRElSKS9WZXJzaW9ucy9DdXJyZW50CisgCSQoTE4pIC1mc24gVmVyc2lvbnMvQ3VycmVudC8kKFBZVEhPTkZSQU1FV09SSykgJChERVNURElSKSQoUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUikvJChQWVRIT05GUkFNRVdPUkspCisgCSQoTE4pIC1mc24gVmVyc2lvbnMvQ3VycmVudC9IZWFkZXJzICQoREVTVERJUikkKFBZVEhPTkZSQU1FV09SS0lOU1RBTExESVIpL0hlYWRlcnMKK0BAIC0xMjg4LDcgKzEyOTAsNyBAQCBjb25maWcuc3RhdHVzOgkkKHNyY2RpcikvY29uZmlndXJlCisgCisgIyBSdW4gcmVpbmRlbnQgb24gdGhlIGxpYnJhcnkKKyByZWluZGVudDoKKy0JLi8kKEJVSUxEUFlUSE9OKSAkKHNyY2RpcikvVG9vbHMvc2NyaXB0cy9yZWluZGVudC5weSAtciAkKHNyY2RpcikvTGliCisrCSQoSE9TVFBZVEhPTikgJChzcmNkaXIpL1Rvb2xzL3NjcmlwdHMvcmVpbmRlbnQucHkgLXIgJChzcmNkaXIpL0xpYgorIAorICMgUmVydW4gY29uZmlndXJlIHdpdGggdGhlIHNhbWUgb3B0aW9ucyBhcyBpdCB3YXMgcnVuIGxhc3QgdGltZSwKKyAjIHByb3ZpZGVkIHRoZSBjb25maWcuc3RhdHVzIHNjcmlwdCBleGlzdHMKK0BAIC0xNDE0LDcgKzE0MTYsNyBAQCBmdW5ueToKKyAKKyAjIFBlcmZvcm0gc29tZSB2ZXJpZmljYXRpb24gY2hlY2tzIG9uIGFueSBtb2RpZmllZCBmaWxlcy4KKyBwYXRjaGNoZWNrOgorLQkkKFJVTlNIQVJFRCkgLi8kKEJVSUxEUFlUSE9OKSAkKHNyY2RpcikvVG9vbHMvc2NyaXB0cy9wYXRjaGNoZWNrLnB5CisrCSQoUlVOU0hBUkVEKSAkKEhPU1RQWVRIT04pICQoc3JjZGlyKS9Ub29scy9zY3JpcHRzL3BhdGNoY2hlY2sucHkKKyAKKyAjIERlcGVuZGVuY2llcworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDAwMS1oMnB5LUZpeC1pc3N1ZS0xMzAzMi13aGVyZS1pdC1mYWlscy13aXRoLVVuaWNvZGVEZWNvLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDAwMS1oMnB5LUZpeC1pc3N1ZS0xMzAzMi13aGVyZS1pdC1mYWlscy13aXRoLVVuaWNvZGVEZWNvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNmIyNGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMDAxLWgycHktRml4LWlzc3VlLTEzMDMyLXdoZXJlLWl0LWZhaWxzLXdpdGgtVW5pY29kZURlY28ucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRnJvbSAyZjVhNGM3MDhkOTBmYThkYjIxZjQ0NmFlODc5Y2ZmNzkzODc0NDhkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMjAgTWF5IDIwMTMgMjE6MDM6MTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gaDJweTogRml4IGlzc3VlIDEzMDMyIHdoZXJlIGl0IGZhaWxzIHdpdGggVW5pY29kZURlY29kZUVycm9yCisKK3VzZSB1dGYtOCB0byBvcGVuIHRoZSBmaWxlcworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIFRvb2xzL3NjcmlwdHMvaDJweS5weSB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2gycHkucHkgYi9Ub29scy9zY3JpcHRzL2gycHkucHkKK2luZGV4IDRmODcxZDkuLmE1M2ZiZTAgMTAwNzU1CistLS0gYS9Ub29scy9zY3JpcHRzL2gycHkucHkKKysrKyBiL1Rvb2xzL3NjcmlwdHMvaDJweS5weQorQEAgLTY5LDEzICs2OSwxMyBAQCBkZWYgbWFpbigpOgorICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJyMgR2VuZXJhdGVkIGJ5IGgycHkgZnJvbSBzdGRpblxuJykKKyAgICAgICAgICAgICBwcm9jZXNzKHN5cy5zdGRpbiwgc3lzLnN0ZG91dCkKKyAgICAgICAgIGVsc2U6CistICAgICAgICAgICAgZnAgPSBvcGVuKGZpbGVuYW1lLCAncicpCisrICAgICAgICAgICAgZnAgPSBvcGVuKGZpbGVuYW1lLCAncicsIGVuY29kaW5nPSd1dGYtOCcpCisgICAgICAgICAgICAgb3V0ZmlsZSA9IG9zLnBhdGguYmFzZW5hbWUoZmlsZW5hbWUpCisgICAgICAgICAgICAgaSA9IG91dGZpbGUucmZpbmQoJy4nKQorICAgICAgICAgICAgIGlmIGkgPiAwOiBvdXRmaWxlID0gb3V0ZmlsZVs6aV0KKyAgICAgICAgICAgICBtb2RuYW1lID0gb3V0ZmlsZS51cHBlcigpCisgICAgICAgICAgICAgb3V0ZmlsZSA9IG1vZG5hbWUgKyAnLnB5JworLSAgICAgICAgICAgIG91dGZwID0gb3BlbihvdXRmaWxlLCAndycpCisrICAgICAgICAgICAgb3V0ZnAgPSBvcGVuKG91dGZpbGUsICd3JywgZW5jb2Rpbmc9J3V0Zi04JykKKyAgICAgICAgICAgICBvdXRmcC53cml0ZSgnIyBHZW5lcmF0ZWQgYnkgaDJweSBmcm9tICVzXG4nICUgZmlsZW5hbWUpCisgICAgICAgICAgICAgZmlsZWRpY3QgPSB7fQorICAgICAgICAgICAgIGZvciBkaXIgaW4gc2VhcmNoZGlyczoKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMjAtZG9udC1jb21waWxlLXB5dGhvbi1maWxlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAyMC1kb250LWNvbXBpbGUtcHl0aG9uLWZpbGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZWYyODYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMjAtZG9udC1jb21waWxlLXB5dGhvbi1maWxlcy5wYXRjaApAQCAtMCwwICsxLDM3IEBACitEb250IGNyb3NzIGNvbXBpbGUgc2l0ZSBwYWNrYWdlcworCistS2hlbQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGVbRW1iZWRkZWQtU3BlY2lmaWNdCisKKy0tLQorIE1ha2VmaWxlLnByZS5pbiB8ICAgMTYgLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxNiBkZWxldGlvbnMoLSkKKworLS0tIGEvTWFrZWZpbGUucHJlLmluCisrKysgYi9NYWtlZmlsZS5wcmUuaW4KK0BAIC0xMDc4LDI0ICsxMDc4LDYgQEAgbGliaW5zdGFsbDoJYnVpbGRfYWxsICQoc3JjZGlyKS9MaWIvJChQTAorIAkJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9Nb2R1bGVzL3h4bW9kdWxlLmMgXAorIAkJCSQoREVTVERJUikkKExJQkRFU1QpL2Rpc3R1dGlscy90ZXN0cyA7IFwKKyAJZmkKKy0JLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgICQoUlVOU0hBUkVEKSBcCistCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1XaSAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKy0JCS1kICQoTElCREVTVCkgLWYgXAorLQkJLXggJ2JhZF9jb2Rpbmd8YmFkc3ludGF4fHNpdGUtcGFja2FnZXN8bGliMnRvMy90ZXN0cy9kYXRhJyBcCistCQkkKERFU1RESVIpJChMSUJERVNUKQorLQktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorLQkJJChQWVRIT05fRk9SX0JVSUxEKSAtV2kgLU8gJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCistCQktZCAkKExJQkRFU1QpIC1mIFwKKy0JCS14ICdiYWRfY29kaW5nfGJhZHN5bnRheHxzaXRlLXBhY2thZ2VzfGxpYjJ0bzMvdGVzdHMvZGF0YScgXAorLQkJJChERVNURElSKSQoTElCREVTVCkKKy0JLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgICQoUlVOU0hBUkVEKSBcCistCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1XaSAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKy0JCS1kICQoTElCREVTVCkvc2l0ZS1wYWNrYWdlcyAtZiBcCistCQkteCBiYWRzeW50YXggJChERVNURElSKSQoTElCREVTVCkvc2l0ZS1wYWNrYWdlcworLQktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorLQkJJChQWVRIT05fRk9SX0JVSUxEKSAtV2kgLU8gJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCistCQktZCAkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMgLWYgXAorLQkJLXggYmFkc3ludGF4ICQoREVTVERJUikkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMKKyAJLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKyAJCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLW0gbGliMnRvMy5wZ2VuMi5kcml2ZXIgJChERVNURElSKSQoTElCREVTVCkvbGliMnRvMy9HcmFtbWFyLnR4dAorIAktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDMtZml4LXRraW50ZXItZGV0ZWN0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDMtZml4LXRraW50ZXItZGV0ZWN0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZGZkMmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMy1maXgtdGtpbnRlci1kZXRlY3Rpb24ucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworIyBXZSBuZWVkIHRvIHN1cHBseSBTVEFHSU5HX0lOQ0RJUiBoZXJlLCBvdGhlcndpc2UgdGhlIFRrIGhlYWRlcnMKKyMgd2lsbCBub3QgYmUgZm91bmQuCisjIFNpZ25lZC1PZmY6IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1pY2tleUB2YW5pbGxlLmRlPgorCitJbmRleDogUHl0aG9uLTMuMy4wcmMyL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuMy4wcmMyLm9yaWcvc2V0dXAucHkJMjAxMi0wOS0yMCAxNToyNDoxNC4wMDkxMjQwMDMgLTA3MDAKKysrKyBQeXRob24tMy4zLjByYzIvc2V0dXAucHkJMjAxMi0wOS0yMCAxNToyNTowOC40NDkxMjQ5NjMgLTA3MDAKK0BAIC0xNjIwLDcgKzE2MjAsNyBAQAorICAgICAgICAgICAgICAgICBkb3R2ZXJzaW9uID0gZG90dmVyc2lvbls6LTFdICsgJy4nICsgZG90dmVyc2lvblstMV0KKyAgICAgICAgICAgICB0Y2xfaW5jbHVkZV9zdWIgPSBbXQorICAgICAgICAgICAgIHRrX2luY2x1ZGVfc3ViID0gW10KKy0gICAgICAgICAgICBmb3IgZGlyIGluIGluY19kaXJzOgorKyAgICAgICAgICAgIGZvciBkaXIgaW4gW29zLmdldGVudigiU1RBR0lOR19JTkNESVIiKV06CisgICAgICAgICAgICAgICAgIHRjbF9pbmNsdWRlX3N1YiArPSBbZGlyICsgb3Muc2VwICsgInRjbCIgKyBkb3R2ZXJzaW9uXQorICAgICAgICAgICAgICAgICB0a19pbmNsdWRlX3N1YiArPSBbZGlyICsgb3Muc2VwICsgInRrIiArIGRvdHZlcnNpb25dCisgICAgICAgICAgICAgdGtfaW5jbHVkZV9zdWIgKz0gdGNsX2luY2x1ZGVfc3ViCitAQCAtMTYzOSwyMiArMTYzOSw2IEBACisgICAgICAgICAgICAgaWYgZGlyIG5vdCBpbiBpbmNsdWRlX2RpcnM6CisgICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycy5hcHBlbmQoZGlyKQorIAorLSAgICAgICAgIyBDaGVjayBmb3IgdmFyaW91cyBwbGF0Zm9ybS1zcGVjaWZpYyBkaXJlY3RvcmllcworLSAgICAgICAgaWYgaG9zdF9wbGF0Zm9ybSA9PSAnc3Vub3M1JzoKKy0gICAgICAgICAgICBpbmNsdWRlX2RpcnMuYXBwZW5kKCcvdXNyL29wZW53aW4vaW5jbHVkZScpCistICAgICAgICAgICAgYWRkZWRfbGliX2RpcnMuYXBwZW5kKCcvdXNyL29wZW53aW4vbGliJykKKy0gICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoJy91c3IvWDExUjYvaW5jbHVkZScpOgorLSAgICAgICAgICAgIGluY2x1ZGVfZGlycy5hcHBlbmQoJy91c3IvWDExUjYvaW5jbHVkZScpCistICAgICAgICAgICAgYWRkZWRfbGliX2RpcnMuYXBwZW5kKCcvdXNyL1gxMVI2L2xpYjY0JykKKy0gICAgICAgICAgICBhZGRlZF9saWJfZGlycy5hcHBlbmQoJy91c3IvWDExUjYvbGliJykKKy0gICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoJy91c3IvWDExUjUvaW5jbHVkZScpOgorLSAgICAgICAgICAgIGluY2x1ZGVfZGlycy5hcHBlbmQoJy91c3IvWDExUjUvaW5jbHVkZScpCistICAgICAgICAgICAgYWRkZWRfbGliX2RpcnMuYXBwZW5kKCcvdXNyL1gxMVI1L2xpYicpCistICAgICAgICBlbHNlOgorLSAgICAgICAgICAgICMgQXNzdW1lIGRlZmF1bHQgbG9jYXRpb24gZm9yIFgxMQorLSAgICAgICAgICAgIGluY2x1ZGVfZGlycy5hcHBlbmQoJy91c3IvWDExL2luY2x1ZGUnKQorLSAgICAgICAgICAgIGFkZGVkX2xpYl9kaXJzLmFwcGVuZCgnL3Vzci9YMTEvbGliJykKKy0KKyAgICAgICAgICMgSWYgQ3lnd2luLCB0aGVuIHZlcmlmeSB0aGF0IFggaXMgaW5zdGFsbGVkIGJlZm9yZSBwcm9jZWVkaW5nCisgICAgICAgICBpZiBob3N0X3BsYXRmb3JtID09ICdjeWd3aW4nOgorICAgICAgICAgICAgIHgxMV9pbmMgPSBmaW5kX2ZpbGUoJ1gxMS9YbGliLmgnLCBbXSwgaW5jbHVkZV9kaXJzKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDMwLWZpeHVwLWluY2x1ZGUtZGlycy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAzMC1maXh1cC1pbmNsdWRlLWRpcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJlYWM3YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAzMC1maXh1cC1pbmNsdWRlLWRpcnMucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRG8gbm90IGhhcmRjb2RlIC91c3IgaW50byBpbmNsdWRlIHBhdGhzIHdoZW4gY3Jvc3MgY29tcGlsaW5nCisKKy1LaGVtCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworIAorLS0tCisgc2V0dXAucHkgfCAgIDE1ICsrLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQorCitJbmRleDogUHl0aG9uLTMuMy4yL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuMy4yLm9yaWcvc2V0dXAucHkKKysrKyBQeXRob24tMy4zLjIvc2V0dXAucHkKK0BAIC00NDQsNyArNDQ0LDggQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgIyBvbmx5IGNoYW5nZSB0aGlzIGZvciBjcm9zcyBidWlsZHMgZm9yIDMuMywgaXNzdWVzIG9uIE1hZ2VpYQorICAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgorICAgICAgICAgICAgIHNlbGYuYWRkX2djY19wYXRocygpCistICAgICAgICBzZWxmLmFkZF9tdWx0aWFyY2hfcGF0aHMoKQorKyAgICAgICAgaWYgbm90IGNyb3NzX2NvbXBpbGluZzoKKysgICAgICAgICAgICBzZWxmLmFkZF9tdWx0aWFyY2hfcGF0aHMoKQorIAorICAgICAgICAgIyBBZGQgcGF0aHMgc3BlY2lmaWVkIGluIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgTERGTEFHUyBhbmQKKyAgICAgICAgICMgQ1BQRkxBR1MgZm9yIGhlYWRlciBhbmQgbGlicmFyeSBmaWxlcy4KK0BAIC00ODAsNyArNDgxLDcgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgICAgICAgICAgICAgZm9yIGRpcmVjdG9yeSBpbiByZXZlcnNlZChvcHRpb25zLmRpcnMpOgorICAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChkaXJfbGlzdCwgZGlyZWN0b3J5KQorIAorLSAgICAgICAgaWYgb3MucGF0aC5ub3JtcGF0aChzeXMuYmFzZV9wcmVmaXgpICE9ICcvdXNyJyBcCisrICAgICAgICBpZiBub3QgY3Jvc3NfY29tcGlsaW5nIGFuZCBvcy5wYXRoLm5vcm1wYXRoKHN5cy5iYXNlX3ByZWZpeCkgIT0gJy91c3InIFwKKyAgICAgICAgICAgICAgICAgYW5kIG5vdCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1BZVEhPTkZSQU1FV09SSycpOgorICAgICAgICAgICAgICMgT1NYIG5vdGU6IERvbid0IGFkZCBMSUJESVIgYW5kIElOQ0xVREVESVIgdG8gYnVpbGRpbmcgYSBmcmFtZXdvcmsKKyAgICAgICAgICAgICAjIChQWVRIT05GUkFNRVdPUksgaXMgc2V0KSB0byBhdm9pZCAjIGxpbmtpbmcgcHJvYmxlbXMgd2hlbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDQtZGVmYXVsdC1pcy1vcHRpbWl6ZWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wNC1kZWZhdWx0LWlzLW9wdGltaXplZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjhmMjY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDQtZGVmYXVsdC1pcy1vcHRpbWl6ZWQucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworIyB3aGVuIGNvbXBpbGluZyBmb3IgYW4gZW1iZWRkZWQgc3lzdGVtLCB3ZSBuZWVkIGV2ZXJ5IGJpdCBvZgorIyBwZXJmb3JtYW5jZSB3ZSBjYW4gZ2V0LiBkZWZhdWx0IHRvIG9wdGltaXplZCB3aXRoIHRoZSBvcHRpb24KKyMgb2Ygb3B0LW91dC4KKyMgU2lnbmVkLU9mZjogTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QHZhbmlsbGUtbWVkaWEuZGU+CisKKworMjAxMi8wNS8wMQorU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworUmViYXNlZCBmb3IgMy40LjIgMDIvMjAxNQorU2lnbmVkLW9mZi1ieTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBQeXRob24tMy40LjIvUHl0aG9uL2NvbXBpbGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL1B5dGhvbi9jb21waWxlLmMKKysrKyBQeXRob24tMy40LjIvUHl0aG9uL2NvbXBpbGUuYworQEAgLTMwLDcgKzMwLDcgQEAKKyAjaW5jbHVkZSAic3ltdGFibGUuaCIKKyAjaW5jbHVkZSAib3Bjb2RlLmgiCisgCistaW50IFB5X09wdGltaXplRmxhZyA9IDA7CisraW50IFB5X09wdGltaXplRmxhZyA9IDE7CisgCisgI2RlZmluZSBERUZBVUxUX0JMT0NLX1NJWkUgMTYKKyAjZGVmaW5lIERFRkFVTFRfQkxPQ0tTIDgKK0luZGV4OiBQeXRob24tMy40LjIvTW9kdWxlcy9tYWluLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9Nb2R1bGVzL21haW4uYworKysrIFB5dGhvbi0zLjQuMi9Nb2R1bGVzL21haW4uYworQEAgLTM4LDcgKzM4LDcgQEAgc3RhdGljIHdjaGFyX3QgKipvcmlnX2FyZ3Y7Cisgc3RhdGljIGludCAgb3JpZ19hcmdjOworIAorIC8qIGNvbW1hbmQgbGluZSBvcHRpb25zICovCistI2RlZmluZSBCQVNFX09QVFMgTCJiQmM6ZEVoaUlKbTpPcVJzU3R1dlZXOnhYOj8iCisrI2RlZmluZSBCQVNFX09QVFMgTCJiQmM6ZEVoaUlKbTpOT3FSc1N0dXZWVzp4WDo/IgorIAorICNkZWZpbmUgUFJPR1JBTV9PUFRTIEJBU0VfT1BUUworIAorQEAgLTY0LDYgKzY0LDcgQEAgc3RhdGljIGNoYXIgKnVzYWdlXzIgPSAiXAorIC1tIG1vZCA6IHJ1biBsaWJyYXJ5IG1vZHVsZSBhcyBhIHNjcmlwdCAodGVybWluYXRlcyBvcHRpb24gbGlzdClcblwKKyAtTyAgICAgOiBvcHRpbWl6ZSBnZW5lcmF0ZWQgYnl0ZWNvZGUgc2xpZ2h0bHk7IGFsc28gUFlUSE9OT1BUSU1JWkU9eFxuXAorIC1PTyAgICA6IHJlbW92ZSBkb2Mtc3RyaW5ncyBpbiBhZGRpdGlvbiB0byB0aGUgLU8gb3B0aW1pemF0aW9uc1xuXAorKy1OICAgICA6IGRvIE5PVCBvcHRpbWl6ZSBnZW5lcmF0ZWQgYnl0ZWNvZGVcblwKKyAtcSAgICAgOiBkb24ndCBwcmludCB2ZXJzaW9uIGFuZCBjb3B5cmlnaHQgbWVzc2FnZXMgb24gaW50ZXJhY3RpdmUgc3RhcnR1cFxuXAorIC1zICAgICA6IGRvbid0IGFkZCB1c2VyIHNpdGUgZGlyZWN0b3J5IHRvIHN5cy5wYXRoOyBhbHNvIFBZVEhPTk5PVVNFUlNJVEVcblwKKyAtUyAgICAgOiBkb24ndCBpbXBseSAnaW1wb3J0IHNpdGUnIG9uIGluaXRpYWxpemF0aW9uXG5cCitAQCAtNDE4LDggKzQxOSw4IEBAIFB5X01haW4oaW50IGFyZ2MsIHdjaGFyX3QgKiphcmd2KQorIAorICAgICAgICAgLyogY2FzZSAnSic6IHJlc2VydmVkIGZvciBKeXRob24gKi8KKyAKKy0gICAgICAgIGNhc2UgJ08nOgorLSAgICAgICAgICAgIFB5X09wdGltaXplRmxhZysrOworKyAgICAgICAgY2FzZSAnTic6CisrICAgICAgICAgICAgUHlfT3B0aW1pemVGbGFnPTA7CisgICAgICAgICAgICAgYnJlYWs7CisgCisgICAgICAgICBjYXNlICdCJzoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzA3MC1kb250LWNsZWFuLWlwa2ctaW5zdGFsbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzA3MC1kb250LWNsZWFuLWlwa2ctaW5zdGFsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODk5MjliCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDcwLWRvbnQtY2xlYW4taXBrZy1pbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK2NvbnNpZGVyIG9wa2cgZGlyZWN0b3JpZXMgd2hlbiBjbGVhbmluZyB1cAorCistS2hlbQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCistLS0KKyBNYWtlZmlsZS5wcmUuaW4gfCAgICA2ICsrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKKy0tLSBhL01ha2VmaWxlLnByZS5pbgorKysrIGIvTWFrZWZpbGUucHJlLmluCitAQCAtMTMwNiw4ICsxMzA2LDggQEAgdG91Y2g6CisgIyBTYW5pdGF0aW9uIHRhcmdldHMgLS0gY2xlYW4gbGVhdmVzIGxpYnJhcmllcywgZXhlY3V0YWJsZXMgYW5kIHRhZ3MKKyAjIGZpbGVzLCB3aGljaCBjbG9iYmVyIHJlbW92ZXMgYXMgd2VsbAorIHB5Y3JlbW92YWw6CistCS1maW5kICQoc3JjZGlyKSAtZGVwdGggLW5hbWUgJ19fcHljYWNoZV9fJyAtZXhlYyBybSAtcmYge30gJzsnCistCS1maW5kICQoc3JjZGlyKSAtbmFtZSAnKi5weVtjb10nIC1leGVjIHJtIC1mIHt9ICc7JworKwktZmluZCAkKHNyY2RpcikgISAtcGF0aCAnLi9pcGtnLWluc3RhbGwvKicgLWRlcHRoIC1uYW1lICdfX3B5Y2FjaGVfXycgLWV4ZWMgcm0gLXJmIHt9ICc7JworKwktZmluZCAkKHNyY2RpcikgISAtcGF0aCAnLi9pcGtnLWluc3RhbGwvKicgLW5hbWUgJyoucHlbY29dJyAtZXhlYyBybSAtZiB7fSAnOycKKyAKKyBybXRlc3R0dXJkczoKKyAJLXJtIC1mICpCQUQgKkdPT0QgKlNLSVBQRUQKK0BAIC0xMzIxLDkgKzEzMjEsOSBAQCBkb2NjbGVhbjoKKyAJLXJtIC1yZiBEb2MvdG9vbHMvc3BoaW54IERvYy90b29scy9weWdtZW50cyBEb2MvdG9vbHMvZG9jdXRpbHMKKyAKKyBjbGVhbjogcHljcmVtb3ZhbAorLQlmaW5kIC4gLW5hbWUgJyouW29hXScgLWV4ZWMgcm0gLWYge30gJzsnCistCWZpbmQgLiAtbmFtZSAnKi5zW29sXScgLWV4ZWMgcm0gLWYge30gJzsnCistCWZpbmQgLiAtbmFtZSAnKi5zby5bMC05XSouWzAtOV0qJyAtZXhlYyBybSAtZiB7fSAnOycKKysJZmluZCAuICEgLXBhdGggJy4vaXBrZy1pbnN0YWxsLyonIC1uYW1lICcqLltvYV0nIC1leGVjIHJtIC1mIHt9ICc7JworKwlmaW5kIC4gISAtcGF0aCAnLi9pcGtnLWluc3RhbGwvKicgLW5hbWUgJyouc1tvbF0nIC1leGVjIHJtIC1mIHt9ICc7JworKwlmaW5kIC4gISAtcGF0aCAnLi9pcGtnLWluc3RhbGwvKicgLW5hbWUgJyouc28uWzAtOV0qLlswLTldKicgLWV4ZWMgcm0gLWYge30gJzsnCisgCWZpbmQgYnVpbGQgLW5hbWUgJ2ZmaWNvbmZpZy5oJyAtZXhlYyBybSAtZiB7fSAnOycgfHwgdHJ1ZQorIAlmaW5kIGJ1aWxkIC1uYW1lICdmZmljb25maWcucHknIC1leGVjIHJtIC1mIHt9ICc7JyB8fCB0cnVlCisgCS1ybSAtZiBMaWIvbGliMnRvMy8qR3JhbW1hcioucGlja2xlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wODAtZGlzdHV0aWxzLWRvbnRfYWRqdXN0X2ZpbGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDgwLWRpc3R1dGlscy1kb250X2FkanVzdF9maWxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTY0MTlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDgwLWRpc3R1dGlscy1kb250X2FkanVzdF9maWxlcy5wYXRjaApAQCAtMCwwICsxLDkyIEBACitkbyBub3QgImFkanVzdCIgcHl0aG9uIGZpbGVzIGJlZm9yZSBjb3B5aW5nCisKKy1LaGVtCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbRW1iZWRkZWQtU3BlY2lmaWNdCisKKy0tLQorIExpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5IHwgICA0MyArKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAzOSBkZWxldGlvbnMoLSkKKworLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3NjcmlwdHMucHkKKysrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5CitAQCAtNTEsMTAgKzUxLDcgQEAgY2xhc3MgYnVpbGRfc2NyaXB0cyhDb21tYW5kKToKKyAKKyAKKyAgICAgZGVmIGNvcHlfc2NyaXB0cyhzZWxmKToKKy0gICAgICAgICIiIkNvcHkgZWFjaCBzY3JpcHQgbGlzdGVkIGluICdzZWxmLnNjcmlwdHMnOyBpZiBpdCdzIG1hcmtlZCBhcyBhCistICAgICAgICBQeXRob24gc2NyaXB0IGluIHRoZSBVbml4IHdheSAoZmlyc3QgbGluZSBtYXRjaGVzICdmaXJzdF9saW5lX3JlJywKKy0gICAgICAgIGllLiBzdGFydHMgd2l0aCAiXCMhIiBhbmQgY29udGFpbnMgInB5dGhvbiIpLCB0aGVuIGFkanVzdCB0aGUgZmlyc3QKKy0gICAgICAgIGxpbmUgdG8gcmVmZXIgdG8gdGhlIGN1cnJlbnQgUHl0aG9uIGludGVycHJldGVyIGFzIHdlIGNvcHkuCisrICAgICAgICAiIiJDb3B5IGVhY2ggc2NyaXB0IGxpc3RlZCBpbiAnc2VsZi5zY3JpcHRzJworICAgICAgICAgIiIiCisgICAgICAgICBzZWxmLm1rcGF0aChzZWxmLmJ1aWxkX2RpcikKKyAgICAgICAgIG91dGZpbGVzID0gW10KK0BAIC03OCw2NCArNzUsMTAgQEAgY2xhc3MgYnVpbGRfc2NyaXB0cyhDb21tYW5kKToKKyAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuZHJ5X3J1bjoKKyAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgIGYgPSBOb25lCistICAgICAgICAgICAgZWxzZToKKy0gICAgICAgICAgICAgICAgZW5jb2RpbmcsIGxpbmVzID0gdG9rZW5pemUuZGV0ZWN0X2VuY29kaW5nKGYucmVhZGxpbmUpCistICAgICAgICAgICAgICAgIGYuc2VlaygwKQorLSAgICAgICAgICAgICAgICBmaXJzdF9saW5lID0gZi5yZWFkbGluZSgpCistICAgICAgICAgICAgICAgIGlmIG5vdCBmaXJzdF9saW5lOgorLSAgICAgICAgICAgICAgICAgICAgc2VsZi53YXJuKCIlcyBpcyBhbiBlbXB0eSBmaWxlIChza2lwcGluZykiICUgc2NyaXB0KQorLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKKy0KKy0gICAgICAgICAgICAgICAgbWF0Y2ggPSBmaXJzdF9saW5lX3JlLm1hdGNoKGZpcnN0X2xpbmUpCistICAgICAgICAgICAgICAgIGlmIG1hdGNoOgorLSAgICAgICAgICAgICAgICAgICAgYWRqdXN0ID0gVHJ1ZQorLSAgICAgICAgICAgICAgICAgICAgcG9zdF9pbnRlcnAgPSBtYXRjaC5ncm91cCgxKSBvciBiJycKKy0KKy0gICAgICAgICAgICBpZiBhZGp1c3Q6CistICAgICAgICAgICAgICAgIGxvZy5pbmZvKCJjb3B5aW5nIGFuZCBhZGp1c3RpbmcgJXMgLT4gJXMiLCBzY3JpcHQsCistICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRfZGlyKQorLSAgICAgICAgICAgICAgICB1cGRhdGVkX2ZpbGVzLmFwcGVuZChvdXRmaWxlKQorLSAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5kcnlfcnVuOgorLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IHN5c2NvbmZpZy5weXRob25fYnVpbGQ6CistICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IHNlbGYuZXhlY3V0YWJsZQorLSAgICAgICAgICAgICAgICAgICAgZWxzZToKKy0gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gb3MucGF0aC5qb2luKAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkJJTkRJUiIpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24lcyVzIiAlIChzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIlZFUlNJT04iKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJFWEUiKSkpCistICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gb3MuZnNlbmNvZGUoZXhlY3V0YWJsZSkKKy0gICAgICAgICAgICAgICAgICAgIHNoZWJhbmcgPSBiIiMhIiArIGV4ZWN1dGFibGUgKyBwb3N0X2ludGVycCArIGIiXG4iCistICAgICAgICAgICAgICAgICAgICAjIFB5dGhvbiBwYXJzZXIgc3RhcnRzIHRvIHJlYWQgYSBzY3JpcHQgdXNpbmcgVVRGLTggdW50aWwKKy0gICAgICAgICAgICAgICAgICAgICMgaXQgZ2V0cyBhICNjb2Rpbmc6eHh4IGNvb2tpZS4gVGhlIHNoZWJhbmcgaGFzIHRvIGJlIHRoZQorLSAgICAgICAgICAgICAgICAgICAgIyBmaXJzdCBsaW5lIG9mIGEgZmlsZSwgdGhlICNjb2Rpbmc6eHh4IGNvb2tpZSBjYW5ub3QgYmUKKy0gICAgICAgICAgICAgICAgICAgICMgd3JpdHRlbiBiZWZvcmUuIFNvIHRoZSBzaGViYW5nIGhhcyB0byBiZSBkZWNvZGFibGUgZnJvbQorLSAgICAgICAgICAgICAgICAgICAgIyBVVEYtOC4KKy0gICAgICAgICAgICAgICAgICAgIHRyeToKKy0gICAgICAgICAgICAgICAgICAgICAgICBzaGViYW5nLmRlY29kZSgndXRmLTgnKQorLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKKy0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHNoZWJhbmcgKHshcn0pIGlzIG5vdCBkZWNvZGFibGUgIgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJvbSB1dGYtOCIuZm9ybWF0KHNoZWJhbmcpKQorLSAgICAgICAgICAgICAgICAgICAgIyBJZiB0aGUgc2NyaXB0IGlzIGVuY29kZWQgdG8gYSBjdXN0b20gZW5jb2RpbmcgKHVzZSBhCistICAgICAgICAgICAgICAgICAgICAjICNjb2Rpbmc6eHh4IGNvb2tpZSksIHRoZSBzaGViYW5nIGhhcyB0byBiZSBkZWNvZGFibGUgZnJvbQorLSAgICAgICAgICAgICAgICAgICAgIyB0aGUgc2NyaXB0IGVuY29kaW5nIHRvby4KKy0gICAgICAgICAgICAgICAgICAgIHRyeToKKy0gICAgICAgICAgICAgICAgICAgICAgICBzaGViYW5nLmRlY29kZShlbmNvZGluZykKKy0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6CistICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBzaGViYW5nICh7IXJ9KSBpcyBub3QgZGVjb2RhYmxlICIKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyb20gdGhlIHNjcmlwdCBlbmNvZGluZyAoe30pIgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNoZWJhbmcsIGVuY29kaW5nKSkKKy0gICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihvdXRmaWxlLCAid2IiKSBhcyBvdXRmOgorLSAgICAgICAgICAgICAgICAgICAgICAgIG91dGYud3JpdGUoc2hlYmFuZykKKy0gICAgICAgICAgICAgICAgICAgICAgICBvdXRmLndyaXRlbGluZXMoZi5yZWFkbGluZXMoKSkKKy0gICAgICAgICAgICAgICAgaWYgZjoKKy0gICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorLSAgICAgICAgICAgIGVsc2U6CistICAgICAgICAgICAgICAgIGlmIGY6CisrICAgICAgICAgICAgaWYgZjoKKyAgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorLSAgICAgICAgICAgICAgICB1cGRhdGVkX2ZpbGVzLmFwcGVuZChvdXRmaWxlKQorLSAgICAgICAgICAgICAgICBzZWxmLmNvcHlfZmlsZShzY3JpcHQsIG91dGZpbGUpCisrICAgICAgICAgICAgdXBkYXRlZF9maWxlcy5hcHBlbmQob3V0ZmlsZSkKKysgICAgICAgICAgICBzZWxmLmNvcHlfZmlsZShzY3JpcHQsIG91dGZpbGUpCisgCisgICAgICAgICBpZiBvcy5uYW1lID09ICdwb3NpeCc6CisgICAgICAgICAgICAgZm9yIGZpbGUgaW4gb3V0ZmlsZXM6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMTAtZW5hYmxlLXpsaWIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMTAtZW5hYmxlLXpsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI5MmExOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzExMC1lbmFibGUtemxpYi5wYXRjaApAQCAtMCwwICsxLDIxIEBACitFbmFibGUgemxpYiBpbiBweXRob24KKworLUtoZW0KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1TcGVjaWZpY10KKworLS0tCisgTW9kdWxlcy9TZXR1cC5kaXN0IHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS9Nb2R1bGVzL1NldHVwLmRpc3QKKysrKyBiL01vZHVsZXMvU2V0dXAuZGlzdAorQEAgLTM1NCw3ICszNTQsNyBAQCBfc3ltdGFibGUgc3ltdGFibGVtb2R1bGUuYworICMgQW5kcmV3IEt1Y2hsaW5nJ3MgemxpYiBtb2R1bGUuCisgIyBUaGlzIHJlcXVpcmUgemxpYiAxLjEuMyAob3IgbGF0ZXIpLgorICMgU2VlIGh0dHA6Ly93d3cuZ3ppcC5vcmcvemxpYi8KKy0jemxpYiB6bGlibW9kdWxlLmMgLUkkKHByZWZpeCkvaW5jbHVkZSAtTCQoZXhlY19wcmVmaXgpL2xpYiAtbHoKKyt6bGliIHpsaWJtb2R1bGUuYyAtbHoKKyAKKyAjIEludGVyZmFjZSB0byB0aGUgRXhwYXQgWE1MIHBhcnNlcgorICMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzEyLWRpc3R1dGlscy1wcmVmaXgtaXMtaW5zaWRlLXN0YWdpbmctYXJlYS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzEyLWRpc3R1dGlscy1wcmVmaXgtaXMtaW5zaWRlLXN0YWdpbmctYXJlYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjAyZGYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTItZGlzdHV0aWxzLXByZWZpeC1pcy1pbnNpZGUtc3RhZ2luZy1hcmVhLnBhdGNoCkBAIC0wLDAgKzEsODEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKzAyLzIwMTUgUmViYXNlZCBmb3IgUHl0aG9uIDMuNC4yCisKKyMgVGhlIHByb3BlciBwcmVmaXggaXMgaW5zaWRlIG91ciBzdGFnaW5nIGFyZWEuCisjIFNpZ25lZC1PZmY6IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1pY2tleUB2YW5pbGxlLW1lZGlhLmRlPgorIyBTaWduZWQtb2ZmLWJ5OiBQaGlsIEJsdW5kZWxsIDxwaGlsYkBnbnUub3JnPgorIyBTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorIyBTaWduZWQtb2ZmLWJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0zLjQuMi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CisrKysgUHl0aG9uLTMuNC4yL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CitAQCAtMTYsMTAgKzE2LDExIEBAIGltcG9ydCBzeXMKKyBmcm9tIC5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc1BsYXRmb3JtRXJyb3IKKyAKKyAjIFRoZXNlIGFyZSBuZWVkZWQgaW4gYSBjb3VwbGUgb2Ygc3BvdHMsIHNvIGp1c3QgY29tcHV0ZSB0aGVtIG9uY2UuCistUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KQorLUVYRUNfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuZXhlY19wcmVmaXgpCistQkFTRV9QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5iYXNlX3ByZWZpeCkKKy1CQVNFX0VYRUNfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuYmFzZV9leGVjX3ByZWZpeCkKKytQUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5wcmVmaXgpLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApCisrRVhFQ19QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5leGVjX3ByZWZpeCkucmVwbGFjZSggb3MuZ2V0ZW52KCJCVUlMRF9TWVMiKSwgb3MuZ2V0ZW52KCJIT1NUX1NZUyIpICkKKytCQVNFX1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLmJhc2VfcHJlZml4KS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQorK0JBU0VfRVhFQ19QUkVGSVg9IG9zLnBhdGgubm9ybXBhdGgoc3lzLmJhc2VfZXhlY19wcmVmaXgpLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApCisrCisgCisgIyBQYXRoIHRvIHRoZSBiYXNlIGRpcmVjdG9yeSBvZiB0aGUgcHJvamVjdC4gT24gV2luZG93cyB0aGUgYmluYXJ5IG1heQorICMgbGl2ZSBpbiBwcm9qZWN0L1BDQnVpbGQ5LiAgSWYgd2UncmUgZGVhbGluZyB3aXRoIGFuIHg2NCBXaW5kb3dzIGJ1aWxkLAorQEAgLTkzLDcgKzk0LDkgQEAgZGVmIGdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9MCwgcHJlZgorICAgICBJZiAncHJlZml4JyBpcyBzdXBwbGllZCwgdXNlIGl0IGluc3RlYWQgb2Ygc3lzLmJhc2VfcHJlZml4IG9yCisgICAgIHN5cy5iYXNlX2V4ZWNfcHJlZml4IC0tIGkuZS4sIGlnbm9yZSAncGxhdF9zcGVjaWZpYycuCisgICAgICIiIgorLSAgICBpZiBwcmVmaXggaXMgTm9uZToKKysgICAgaWYgcHJlZml4IGlzIE5vbmUgYW5kIG9zLmVudmlyb25bJ1NUQUdJTkdfSU5DRElSJ10gIT0gIiI6CisrICAgICAgICBwcmVmaXggPSBvcy5lbnZpcm9uWydTVEFHSU5HX0lOQ0RJUiddLnJzdHJpcCgnaW5jbHVkZScpCisrICAgIGVsaWYgcHJlZml4IGlzIE5vbmU6CisgICAgICAgICBwcmVmaXggPSBwbGF0X3NwZWNpZmljIGFuZCBCQVNFX0VYRUNfUFJFRklYIG9yIEJBU0VfUFJFRklYCisgICAgIGlmIG9zLm5hbWUgPT0gInBvc2l4IjoKKyAgICAgICAgIGlmIHB5dGhvbl9idWlsZDoKK0BAIC0xMzQsNiArMTM3LDEyIEBAIGRlZiBnZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPTAsIHN0YW4KKyAgICAgSWYgJ3ByZWZpeCcgaXMgc3VwcGxpZWQsIHVzZSBpdCBpbnN0ZWFkIG9mIHN5cy5iYXNlX3ByZWZpeCBvcgorICAgICBzeXMuYmFzZV9leGVjX3ByZWZpeCAtLSBpLmUuLCBpZ25vcmUgJ3BsYXRfc3BlY2lmaWMnLgorICAgICAiIiIKKysgICAgaWYgcHJlZml4IGlzIE5vbmUgYW5kIG9zLmVudmlyb25bJ1NUQUdJTkdfTElCRElSJ10gIT0gIiI6CisrICAgICAgICBsaWJfYmFzZW5hbWUgPSBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddLnNwbGl0KCcvJylbLTFdCisrICAgICAgICBwcmVmaXggPSBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddLnJzdHJpcChsaWJfYmFzZW5hbWUpCisrICAgIGVsc2U6CisrICAgICAgICBsaWJfYmFzZW5hbWUgPSBzeXMubGliCisrCisgICAgIGlmIHByZWZpeCBpcyBOb25lOgorICAgICAgICAgaWYgc3RhbmRhcmRfbGliOgorICAgICAgICAgICAgIHByZWZpeCA9IHBsYXRfc3BlY2lmaWMgYW5kIEJBU0VfRVhFQ19QUkVGSVggb3IgQkFTRV9QUkVGSVgKK0BAIC0xNDIsNyArMTUxLDcgQEAgZGVmIGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MCwgc3RhbgorIAorICAgICBpZiBvcy5uYW1lID09ICJwb3NpeCI6CisgICAgICAgICBsaWJweXRob24gPSBvcy5wYXRoLmpvaW4ocHJlZml4LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWIiLCAicHl0aG9uIiArIGdldF9weXRob25fdmVyc2lvbigpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYl9iYXNlbmFtZSwgInB5dGhvbiIgKyBnZXRfcHl0aG9uX3ZlcnNpb24oKSkKKyAgICAgICAgIGlmIHN0YW5kYXJkX2xpYjoKKyAgICAgICAgICAgICByZXR1cm4gbGlicHl0aG9uCisgICAgICAgICBlbHNlOgorQEAgLTI0Miw3ICsyNTEsNyBAQCBkZWYgZ2V0X2NvbmZpZ19oX2ZpbGVuYW1lKCk6CisgICAgIGVsc2U6CisgICAgICAgICBpbmNfZGlyID0gZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz0xKQorIAorLSAgICByZXR1cm4gb3MucGF0aC5qb2luKGluY19kaXIsICdweWNvbmZpZy5oJykKKysgICAgcmV0dXJuIG9zLnBhdGguam9pbihpbmNfZGlyLCAncHljb25maWcuaCcucmVwbGFjZSggb3MuZ2V0ZW52KCJCVUlMRF9TWVMiKSwgb3MuZ2V0ZW52KCJIT1NUX1NZUyIpICkpCisgCisgCisgZGVmIGdldF9tYWtlZmlsZV9maWxlbmFtZSgpOgorQEAgLTI1MSw3ICsyNjAsNyBAQCBkZWYgZ2V0X21ha2VmaWxlX2ZpbGVuYW1lKCk6CisgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKF9zeXNfaG9tZSBvciBwcm9qZWN0X2Jhc2UsICJNYWtlZmlsZSIpCisgICAgIGxpYl9kaXIgPSBnZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPTAsIHN0YW5kYXJkX2xpYj0xKQorICAgICBjb25maWdfZmlsZSA9ICdjb25maWcte317fScuZm9ybWF0KGdldF9weXRob25fdmVyc2lvbigpLCBidWlsZF9mbGFncykKKy0gICAgcmV0dXJuIG9zLnBhdGguam9pbihsaWJfZGlyLCBjb25maWdfZmlsZSwgJ01ha2VmaWxlJykKKysgICAgcmV0dXJuIG9zLnBhdGguam9pbihsaWJfZGlyLCBjb25maWdfZmlsZSwgJ01ha2VmaWxlJykucmVwbGFjZSggb3MuZ2V0ZW52KCJCVUlMRF9TWVMiKSwgb3MuZ2V0ZW52KCJIT1NUX1NZUyIpICkKKyAKKyAKKyBkZWYgcGFyc2VfY29uZmlnX2goZnAsIGc9Tm9uZSk6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMzAtcmVhZGxpbmUtc2V0dXAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMzAtcmVhZGxpbmUtc2V0dXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgwNTY1MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzEzMC1yZWFkbGluZS1zZXR1cC5wYXRjaApAQCAtMCwwICsxLDU1IEBACitwYWNrYWdlIHB5dGhvbi1yZWFkbGluZQorCistS2hlbQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW0VtYmVkZGVkIFNwZWNpZmljXQorCistLS0gYS9zZXR1cC5weQorKysrIGIvc2V0dXAucHkKK0BAIC02NjYsNDUgKzY2Niw3IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICMgcmVhZGxpbmUKKyAgICAgICAgIGRvX3JlYWRsaW5lID0gc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywgJ3JlYWRsaW5lJykKKyAgICAgICAgIHJlYWRsaW5lX3Rlcm1jYXBfbGlicmFyeSA9ICIiCistICAgICAgICBjdXJzZXNfbGlicmFyeSA9ICIiCistICAgICAgICAjIENhbm5vdCB1c2Ugb3MucG9wZW4gaGVyZSBpbiBweTNrLgorLSAgICAgICAgdG1wZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX3RlbXAsICdyZWFkbGluZV90ZXJtY2FwX2xpYicpCistICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5idWlsZF90ZW1wKToKKy0gICAgICAgICAgICBvcy5tYWtlZGlycyhzZWxmLmJ1aWxkX3RlbXApCistICAgICAgICAjIERldGVybWluZSBpZiByZWFkbGluZSBpcyBhbHJlYWR5IGxpbmtlZCBhZ2FpbnN0IGN1cnNlcyBvciB0aW5mby4KKy0gICAgICAgIGlmIGRvX3JlYWRsaW5lOgorLSAgICAgICAgICAgIGlmIGNyb3NzX2NvbXBpbGluZzoKKy0gICAgICAgICAgICAgICAgcmV0ID0gb3Muc3lzdGVtKCIlcyAtZCAlcyB8IGdyZXAgJyhORUVERUQpJyA+ICVzIiBcCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1JFQURFTEYnKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX3JlYWRsaW5lLCB0bXBmaWxlKSkKKy0gICAgICAgICAgICBlbGlmIGZpbmRfZXhlY3V0YWJsZSgnbGRkJyk6CistICAgICAgICAgICAgICAgIHJldCA9IG9zLnN5c3RlbSgibGRkICVzID4gJXMiICUgKGRvX3JlYWRsaW5lLCB0bXBmaWxlKSkKKy0gICAgICAgICAgICBlbHNlOgorLSAgICAgICAgICAgICAgICByZXQgPSAyNTYKKy0gICAgICAgICAgICBpZiByZXQgPj4gOCA9PSAwOgorLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4odG1wZmlsZSkgYXMgZnA6CistICAgICAgICAgICAgICAgICAgICBmb3IgbG4gaW4gZnA6CistICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ2N1cnNlcycgaW4gbG46CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRsaW5lX3Rlcm1jYXBfbGlicmFyeSA9IHJlLnN1YigKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInLipsaWIobj9jdXJzZXN3PylcLnNvLionLCByJ1wxJywgbG4KKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5yc3RyaXAoKQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworLSAgICAgICAgICAgICAgICAgICAgICAgICMgdGVybWNhcCBpbnRlcmZhY2Ugc3BsaXQgb3V0IGZyb20gbmN1cnNlcworLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICd0aW5mbycgaW4gbG46CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRsaW5lX3Rlcm1jYXBfbGlicmFyeSA9ICd0aW5mbycKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKy0gICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh0bXBmaWxlKToKKy0gICAgICAgICAgICAgICAgb3MudW5saW5rKHRtcGZpbGUpCistICAgICAgICAjIElzc3VlIDczODQ6IElmIHJlYWRsaW5lIGlzIGFscmVhZHkgbGlua2VkIGFnYWluc3QgY3Vyc2VzLAorLSAgICAgICAgIyB1c2UgdGhlIHNhbWUgbGlicmFyeSBmb3IgdGhlIHJlYWRsaW5lIGFuZCBjdXJzZXMgbW9kdWxlcy4KKy0gICAgICAgIGlmICdjdXJzZXMnIGluIHJlYWRsaW5lX3Rlcm1jYXBfbGlicmFyeToKKy0gICAgICAgICAgICBjdXJzZXNfbGlicmFyeSA9IHJlYWRsaW5lX3Rlcm1jYXBfbGlicmFyeQorLSAgICAgICAgZWxpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLCAnbmN1cnNlc3cnKToKKy0gICAgICAgICAgICBjdXJzZXNfbGlicmFyeSA9ICduY3Vyc2VzdycKKy0gICAgICAgIGVsaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywgJ25jdXJzZXMnKToKKy0gICAgICAgICAgICBjdXJzZXNfbGlicmFyeSA9ICduY3Vyc2VzJworLSAgICAgICAgZWxpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLCAnY3Vyc2VzJyk6CistICAgICAgICAgICAgY3Vyc2VzX2xpYnJhcnkgPSAnY3Vyc2VzJworKyAgICAgICAgY3Vyc2VzX2xpYnJhcnkgPSAibmN1cnNlcyIKKyAKKyAgICAgICAgIGlmIGhvc3RfcGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICAgb3NfcmVsZWFzZSA9IGludChvcy51bmFtZSgpWzJdLnNwbGl0KCcuJylbMF0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xNTAtZml4LXNldHVwdGVybS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzE1MC1maXgtc2V0dXB0ZXJtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ZDdjNzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xNTAtZml4LXNldHVwdGVybS5wYXRjaApAQCAtMCwwICsxLDE3IEBACitGaXggd2FybmluZyB3aXRoIG5ld2VyIGNvbXBpbGVyCisKKy1LaGVtCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gYS9Nb2R1bGVzL19jdXJzZXNtb2R1bGUuYworKysrIGIvTW9kdWxlcy9fY3Vyc2VzbW9kdWxlLmMKK0BAIC0xMTYsNyArMTE2LDcgQEAgY2hhciAqUHlDdXJzZXNWZXJzaW9uID0gIjIuMiI7CisgICAgICNkZWZpbmVzIG1hbnkgY29tbW9uIHN5bWJvbHMgKHN1Y2ggYXMgImxpbmVzIikgd2hpY2ggYnJlYWtzIHRoZQorICAgICBjdXJzZXMgbW9kdWxlIGluIG90aGVyIHdheXMuICBTbyB0aGUgY29kZSB3aWxsIGp1c3Qgc3BlY2lmeQorICAgICBleHBsaWNpdCBwcm90b3R5cGVzIGhlcmUuICovCistZXh0ZXJuIGludCBzZXR1cHRlcm0oY2hhciAqLGludCxpbnQgKik7CisrLy9leHRlcm4gaW50IHNldHVwdGVybShjaGFyICosaW50LGludCAqKTsKKyAjaWZkZWYgX19zZ2kKKyAjaW5jbHVkZSA8dGVybS5oPgorICNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvYXZvaWQtbmN1cnNlc3ctaW5jbHVkZS1wYXRoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvYXZvaWQtbmN1cnNlc3ctaW5jbHVkZS1wYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyOWFlNTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9hdm9pZC1uY3Vyc2Vzdy1pbmNsdWRlLXBhdGgucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1dlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCBzeXNyb290IGlzIHVzZWQgYnkgZ2NjIGluc3RlYWQgb2YgYXNzdW1pbmcKK2hhcmRjb2RlZCBsb2NhdGlvbnMgZm9yIGluY2x1ZGUgcGF0aHMKKworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogUHl0aG9uLTMuNC4yL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL2NvbmZpZ3VyZS5hYworKysrIFB5dGhvbi0zLjQuMi9jb25maWd1cmUuYWMKK0BAIC00NDM0LDcgKzQ0MzQsNyBAQCBmaQorIAorICMgZmlyc3QgY3Vyc2VzIGhlYWRlciBjaGVjaworIGFjX3NhdmVfY3BwZmxhZ3M9IiRDUFBGTEFHUyIKKy1DUFBGTEFHUz0iJENQUEZMQUdTIC1JL3Vzci9pbmNsdWRlL25jdXJzZXN3IgorK0NQUEZMQUdTPSIkQ1BQRkxBR1MgLUk9L3Vzci9pbmNsdWRlL25jdXJzZXN3IgorIAorIEFDX0NIRUNLX0hFQURFUlMoY3Vyc2VzLmggbmN1cnNlcy5oKQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvYXZvaWRfd2FybmluZ19hYm91dF90a2ludGVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvYXZvaWRfd2FybmluZ19hYm91dF90a2ludGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOGM1N2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9hdm9pZF93YXJuaW5nX2Fib3V0X3RraW50ZXIucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorX3RraW50ZXIgbW9kdWxlIG5lZWRzIHRrIG1vZHVsZSBhbG9uZyB3aXRoIHRjbC4gdGsgaXMgbm90IHlldCBpbnRlZ3JhdGVkCitpbiB5b2N0byBzbyB3ZSBza2lwIHRoZSBjaGVjayBmb3IgdGhpcyBtb2R1bGUuCitBdm9pZCBhIHdhcm5pbmcgYnkgbm90IGFkZGluZyB0aGlzIG1vZHVsZSB0byBtaXNzaW5nIHZhcmlhYmxlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc3RyaWJ1dGlvbl0KKworU2lnbmVkLW9mZi1ieTogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorCitJbmRleDogUHl0aG9uLTIuNy4yL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy4yLm9yaWcvc2V0dXAucHkJMjAxMi0wNC0wNSAyMzoxODozOC41MDAxMzY2NDcgKzAzMDAKKysrKyBQeXRob24tMi43LjIvc2V0dXAucHkJMjAxMi0wNC0wNSAyMzoxOTozNS44ODgxMzQ5NjkgKzAzMDAKK0BAIC0xNjM0LDggKzE2MzQsMTAgQEAKKyAgICAgICAgICMgQ2FsbCB0aGUgbWV0aG9kIGZvciBkZXRlY3Rpbmcgd2hldGhlciBfdGtpbnRlciBjYW4gYmUgY29tcGlsZWQKKyAgICAgICAgIHNlbGYuZGV0ZWN0X3RraW50ZXIoaW5jX2RpcnMsIGxpYl9kaXJzKQorIAorLSAgICAgICAgaWYgJ190a2ludGVyJyBub3QgaW4gW2UubmFtZSBmb3IgZSBpbiBzZWxmLmV4dGVuc2lvbnNdOgorLSAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdfdGtpbnRlcicpCisrICAgICAgICAjIHRraW50ZXIgbW9kdWxlIHdpbGwgbm90IGJlIGF2YWxhaWJsZSBhcyB5b2N0bworKyAgICAgICAgIyBkb2Vzbid0IGhhdmUgdGsgaW50ZWdyYXRlZCAoeWV0KQorKyAgICAgICAgI2lmICdfdGtpbnRlcicgbm90IGluIFtlLm5hbWUgZm9yIGUgaW4gc2VsZi5leHRlbnNpb25zXToKKysgICAgICAgICMgICAgbWlzc2luZy5hcHBlbmQoJ190a2ludGVyJykKKyAKKyAgICAgICAgIHJldHVybiBtaXNzaW5nCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9jZ2lfcHkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9jZ2lfcHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU1MDRmOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2NnaV9weS5wYXRjaApAQCAtMCwwICsxLDIzIEBACitMaWIvY2dpLnB5OiBVcGRhdGUgdGhlIHNjcmlwdCBhcyBtZW50aW9uZWQgaW4gdGhlIGNvbW1lbnQKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXN0cmlidXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworLS0tIFB5dGhvbi0yLjYuNi9MaWIvY2dpLnB5Lm9yaWcJMjAxMC0wOC0wMSAyMjoxNDoyNy4wMDAwMDAwMDAgLTA1MDAKKysrKyBQeXRob24tMi42LjYvTGliL2NnaS5weQkyMDExLTA5LTIxIDE1OjI4OjQwLjQ3ODIwODYzMSAtMDUwMAorQEAgLTEsMTMgKzEsNCBAQAorLSMhIC91c3IvbG9jYWwvYmluL3B5dGhvbgorLQorLSMgTk9URTogdGhlIGFib3ZlICIvdXNyL2xvY2FsL2Jpbi9weXRob24iIGlzIE5PVCBhIG1pc3Rha2UuICBJdCBpcworLSMgaW50ZW50aW9uYWxseSBOT1QgIi91c3IvYmluL2VudiBweXRob24iLiAgT24gbWFueSBzeXN0ZW1zCistIyAoZS5nLiBTb2xhcmlzKSwgL3Vzci9sb2NhbC9iaW4gaXMgbm90IGluICRQQVRIIGFzIHBhc3NlZCB0byBDR0kKKy0jIHNjcmlwdHMsIGFuZCAvdXNyL2xvY2FsL2JpbiBpcyB0aGUgZGVmYXVsdCBkaXJlY3Rvcnkgd2hlcmUgUHl0aG9uIGlzCistIyBpbnN0YWxsZWQsIHNvIC91c3IvYmluL2VudiB3b3VsZCBiZSB1bmFibGUgdG8gZmluZCBweXRob24uICBHcmFudGVkLAorLSMgYmluYXJ5IGluc3RhbGxhdGlvbnMgYnkgTGludXggdmVuZG9ycyBvZnRlbiBpbnN0YWxsIFB5dGhvbiBpbgorLSMgL3Vzci9iaW4uICBTbyBsZXQgdGhvc2UgdmVuZG9ycyBwYXRjaCBjZ2kucHkgdG8gbWF0Y2ggdGhlaXIgY2hvaWNlCistIyBvZiBpbnN0YWxsYXRpb24uCisrIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIAorICIiIlN1cHBvcnQgbW9kdWxlIGZvciBDR0kgKENvbW1vbiBHYXRld2F5IEludGVyZmFjZSkgc2NyaXB0cy4KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2ZpeF9mb3JfdXNpbmdfZGlmZmVyZW50X2xpYmRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2ZpeF9mb3JfdXNpbmdfZGlmZmVyZW50X2xpYmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDFhOTc4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvZml4X2Zvcl91c2luZ19kaWZmZXJlbnRfbGliZGlyLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbRW1iZWRkZWQgc3BlY2lmaWNdCisKK1RoaXMgcGF0Y2ggZml4ZXMgaXNzdWluZyB3aXRoIGRpZmZlcmVudCBsaWJkaXIgbGlrZSBsaWI2NC4KK1RoaXMgcGF0Y2ggbWFrZXMgdGhlIG5hdGl2ZSBweXRob24gYmluYXJ5IG1vZHVsZXMgZmluZGFibGUKK2luIHRoZSBpbnN0YWxsIHByb2Nlc3Mgb2YgdGhlIGhvc3QgcHl0aG9uLgorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorRGF0ZTogMjAxMi8wMy8xNAorCitVcGRhdGVkIGZvciBweXRob24gMi43LjMKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitEYXRlOiAyMDEyLzA1LzAxCisKK0luZGV4OiBQeXRob24tMy4zLjByYzIvTGliL3N5c2NvbmZpZy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjMuMHJjMi5vcmlnL0xpYi9zeXNjb25maWcucHkJMjAxMi0wOS0yMCAyMjo1MDoxMS4wMDAwMDAwMDAgLTA3MDAKKysrKyBQeXRob24tMy4zLjByYzIvTGliL3N5c2NvbmZpZy5weQkyMDEyLTA5LTIwIDIyOjUzOjAxLjU2MTEyMzM5NiAtMDcwMAorQEAgLTIxLDkgKzIxLDkgQEAKKyAKKyBfSU5TVEFMTF9TQ0hFTUVTID0geworICAgICAncG9zaXhfcHJlZml4JzogeworLSAgICAgICAgJ3N0ZGxpYic6ICd7aW5zdGFsbGVkX2Jhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisrICAgICAgICAnc3RkbGliJzogJ3tiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3BsYXRzdGRsaWInOiAne3BsYXRiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorLSAgICAgICAgJ3B1cmVsaWInOiAne2Jhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisrICAgICAgICAncHVyZWxpYic6ICd7YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ3BsYXRsaWInOiAne3BsYXRiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAnaW5jbHVkZSc6CisgICAgICAgICAgICAgJ3tpbnN0YWxsZWRfYmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH17YWJpZmxhZ3N9JywKK0BAIC04Myw3ICs4Myw3IEBACisgICAgICdwb3NpeF91c2VyJzogeworICAgICAgICAgJ3N0ZGxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAncGxhdHN0ZGxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCistICAgICAgICAncHVyZWxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisrICAgICAgICAncHVyZWxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdwbGF0bGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ2luY2x1ZGUnOiAne3VzZXJiYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAnc2NyaXB0cyc6ICd7dXNlcmJhc2V9L2JpbicsCitJbmRleDogUHl0aG9uLTMuMy4wcmMyL01ha2VmaWxlLnByZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjMuMHJjMi5vcmlnL01ha2VmaWxlLnByZS5pbgkyMDEyLTA5LTIwIDIyOjUwOjExLjAwMDAwMDAwMCAtMDcwMAorKysrIFB5dGhvbi0zLjMuMHJjMi9NYWtlZmlsZS5wcmUuaW4JMjAxMi0wOS0yMCAyMjo1MDo1NC4yNDUxMjM5OTcgLTA3MDAKK0BAIC0xMDgwLDkgKzEwODAsOSBAQAorIAkJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9Nb2R1bGVzL3h4bW9kdWxlLmMgXAorIAkJCSQoREVTVERJUikkKExJQkRFU1QpL2Rpc3R1dGlscy90ZXN0cyA7IFwKKyAJZmkKKy0JLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKysJLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCk6JHtDUk9TU1BZVEhPTlBBVEh9ICQoUlVOU0hBUkVEKSBcCisgCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1tIGxpYjJ0bzMucGdlbjIuZHJpdmVyICQoREVTVERJUikkKExJQkRFU1QpL2xpYjJ0bzMvR3JhbW1hci50eHQKKy0JLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKysJLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCk6JHtDUk9TU1BZVEhPTlBBVEh9ICQoUlVOU0hBUkVEKSBcCisgCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1tIGxpYjJ0bzMucGdlbjIuZHJpdmVyICQoREVTVERJUikkKExJQkRFU1QpL2xpYjJ0bzMvUGF0dGVybkdyYW1tYXIudHh0CisgCisgIyBDcmVhdGUgdGhlIFBMQVRESVIgc291cmNlIGRpcmVjdG9yeSwgaWYgb25lIHdhc24ndCBkaXN0cmlidXRlZC4uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9ob3N0X2luY2x1ZGVfY29udGFtaW5hdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2hvc3RfaW5jbHVkZV9jb250YW1pbmF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMjA1NGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9ob3N0X2luY2x1ZGVfY29udGFtaW5hdGlvbi5wYXRjaApAQCAtMCwwICsxLDI4IEBACit3aGVuIGJ1aWxkaW5nIHB5dGhvbiBmb3IgcWVtdXg4Ni02NCBvbiB1YnVudHUgMTEuMTAvNjRiaXQKK2l0IGdyb3BlcyBpbnRvIGhvc3QgaW5jbHVkZXMgYW5kIHRoZW4gbWl4ZXMgdGhlbSB3aXRoIGNyb3NzCitpbmNsdWRlcyBhbmQgYXMgYSByZXN1bHQgc29tZSBtb2R1bGVzIGZhaWwgdG8gY29tcGlsZSBhbmQgbGluaworb25lIG9mIHRoZSBtb2R1bGVzIGlzIHB5dGhvbi1lbGVtZW50dHJlZSB3aGljaCBpcyB0aGVuIG5vdAorZm91bmQgZHVyaW5nIGltYWdlIGNyZWF0aW9uCisKK1Byb2JsZSBpcyB0aGF0IHNldHVwLnB5IHRyaWVzIHRvIGFkZCBuYXRpdmUgaW5jbHVkZXMgdGhhdCBuZXdlcgordWJ1bnR1IGhhcyBpbnRyb2R1Y2VkIGZvciBtdWx0aWFyY2ggc3VwcG9ydC4gQnV0IHRoYXQgc2hvdWxkCitvbmx5IGhhcHBlbiBmb3IgbmF0aXZlIGJ1aWxkcyBhbmQgbm90IGNyb3NzIGJ1aWxkaW5nIHB5dGhvbgorc28gd2UgYWRkIGEgY2hlY2sgaGVyZS4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogUHl0aG9uLTMuMy4wcmMyL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuMy4wcmMyLm9yaWcvc2V0dXAucHkJMjAxMi0wOS0yMCAyMTo1NDo1MC4wMDAwMDAwMDAgLTA3MDAKKysrKyBQeXRob24tMy4zLjByYzIvc2V0dXAucHkJMjAxMi0wOS0yMCAyMTo1NzozNS4wMjkxMjM4NTggLTA3MDAKK0BAIC00MDIsNiArNDAyLDkgQEAKKyAKKyAgICAgICAgIGlmIG5vdCBmaW5kX2V4ZWN1dGFibGUoJ2Rwa2ctYXJjaGl0ZWN0dXJlJyk6CisgICAgICAgICAgICAgcmV0dXJuCisrICAgICAgICBpZiBjcm9zc19jb21waWxpbmc6CisrICAgICAgICAgICAgcmV0dXJuCisrCisgICAgICAgICBvcHQgPSAnJworICAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgorICAgICAgICAgICAgIG9wdCA9ICctdCcgKyBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0hPU1RfR05VX1RZUEUnKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvbWFrZXJhY2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9tYWtlcmFjZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGE2ODkyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvbWFrZXJhY2UucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorVGhlcmUgaXMgYSByYWNlIGR1ZSB0byB0aGUgZXhlY3V0aW9uIG9mIG1ha2UgaW5zaWRlIHRoZSBtYWtlZmlsZToKKworfCBnY2MgIC1wdGhyZWFkIC1jIC1Xbm8tdW51c2VkLXJlc3VsdCAtRE5ERUJVRyAtZyAgLU8zIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtTzIgLXBpcGUgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtTzIgLXBpcGUgICAtSS4gLUlJbmNsdWRlIC1JLi9JbmNsdWRlIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtZlBJQyAtRFB5X0JVSUxEX0NPUkUgLW8gT2JqZWN0cy9vYm1hbGxvYy5vIE9iamVjdHMvb2JtYWxsb2MuYworfCBnY2MgIC1wdGhyZWFkIC1jIC1Xbm8tdW51c2VkLXJlc3VsdCAtRE5ERUJVRyAtZyAgLU8zIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtTzIgLXBpcGUgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtTzIgLXBpcGUgICAtSS4gLUlJbmNsdWRlIC1JLi9JbmNsdWRlIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtZlBJQyAtRFB5X0JVSUxEX0NPUkUgLW8gUGFyc2VyL3BnZW4ubyBQYXJzZXIvcGdlbi5jfCBnY2MgIC1wdGhyZWFkIC1jIC1Xbm8tdW51c2VkLXJlc3VsdCAtRE5ERUJVRyAtZyAgLU8zIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtTzIgLXBpcGUgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtTzIgLXBpcGUgICAtSS4gLUlJbmNsdWRlIC1JLi9JbmNsdWRlIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtZlBJQyAtRFB5X0JVSUxEX0NPUkUgLW8gT2JqZWN0cy9vYm1hbGxvYy5vIE9iamVjdHMvb2JtYWxsb2MuYworfCBnY2MgIC1wdGhyZWFkIC1jIC1Xbm8tdW51c2VkLXJlc3VsdCAtRE5ERUJVRyAtZyAgLU8zIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtTzIgLXBpcGUgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtTzIgLXBpcGUgICAtSS4gLUlJbmNsdWRlIC1JLi9JbmNsdWRlIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtZlBJQyAtRFB5X0JVSUxEX0NPUkUgLW8gT2JqZWN0cy9vYm1hbGxvYy5vIE9iamVjdHMvb2JtYWxsb2MuYworfCBPYmplY3RzL29ibWFsbG9jLm86IGZpbGUgbm90IHJlY29nbml6ZWQ6IEZpbGUgdHJ1bmNhdGVkCit8IGNvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworfCBtYWtlWzFdOiAqKiogW1BhcnNlci9wZ2VuXSBFcnJvciAxCisKK1RoZSBlYXNpZXN0IHdheSB0byBhdm9pZCB0aGlzIGlzIHRvIGxpc3QgdGhlIGRlcGVuZGVuY2llcyBleHBsaWN0bHkuCisKK1JQIDI4LzIvMjAxNAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IFB5dGhvbi0zLjMuMy9NYWtlZmlsZS5wcmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy4zLjMub3JpZy9NYWtlZmlsZS5wcmUuaW4JMjAxNC0wMi0yNyAxNDowNDozOC4yNjgzMzk1MzMgKzAwMDAKKysrKyBQeXRob24tMy4zLjMvTWFrZWZpbGUucHJlLmluCTIwMTQtMDItMjggMTA6NDA6NTkuMTY2MzYxMTI1ICswMDAwCitAQCAtNjc2LDcgKzY3Niw3IEBACisgCisgJChJT19PQkpTKTogJChJT19IKQorIAorLSQoR1JBTU1BUl9IKTogJChHUkFNTUFSX0lOUFVUKSAkKFBHRU5TUkNTKQorKyQoR1JBTU1BUl9IKTogJChHUkFNTUFSX0lOUFVUKSAkKFBHRU5TUkNTKSAkKFBHRU4pCisgCQlAJChNS0RJUl9QKSBJbmNsdWRlCisgCQkkKE1BS0UpICQoUEdFTikKKyAJCSQoSE9TVFBHRU4pICQoR1JBTU1BUl9JTlBVVCkgJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uLTMuMy1tdWx0aWxpYi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbi0zLjMtbXVsdGlsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNlOTg2MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbi0zLjMtbXVsdGlsaWIucGF0Y2gKQEAgLTAsMCArMSwzMzggQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitnZXQgdGhlIHN5cy5saWIgZnJvbSBweXRob24gaXRzZWxmIGFuZCBkbyBub3QgdXNlIGhhcmRjb2RlZCB2YWx1ZSBvZiAnbGliJworCiswMi8yMDE1IFJlYmFzZWQgZm9yIDMuNC4yCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0zLjQuMi9JbmNsdWRlL3B5dGhvbnJ1bi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvSW5jbHVkZS9weXRob25ydW4uaAorKysrIFB5dGhvbi0zLjQuMi9JbmNsdWRlL3B5dGhvbnJ1bi5oCitAQCAtMjIwLDYgKzIyMCw4IEBAIGludCBfUHlfQ2hlY2tQeXRob24zKCk7CisgLyogSW4gdGhlaXIgb3duIGZpbGVzICovCisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldFZlcnNpb24odm9pZCk7CisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldFBsYXRmb3JtKHZvaWQpOworK1B5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRBcmNoKHZvaWQpOworK1B5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRMaWIodm9pZCk7CisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldENvcHlyaWdodCh2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0Q29tcGlsZXIodm9pZCk7CisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldEJ1aWxkSW5mbyh2b2lkKTsKK0luZGV4OiBQeXRob24tMy40LjIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorKysrIFB5dGhvbi0zLjQuMi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorQEAgLTE5LDYgKzE5LDggQEAgZnJvbSBzaXRlIGltcG9ydCBVU0VSX0JBU0UKKyBmcm9tIHNpdGUgaW1wb3J0IFVTRVJfU0lURQorIEhBU19VU0VSX1NJVEUgPSBUcnVlCisgCisrbGlibmFtZSA9IHN5cy5saWIKKysKKyBXSU5ET1dTX1NDSEVNRSA9IHsKKyAgICAgJ3B1cmVsaWInOiAnJGJhc2UvTGliL3NpdGUtcGFja2FnZXMnLAorICAgICAncGxhdGxpYic6ICckYmFzZS9MaWIvc2l0ZS1wYWNrYWdlcycsCitAQCAtMzAsNyArMzIsNyBAQCBXSU5ET1dTX1NDSEVNRSA9IHsKKyBJTlNUQUxMX1NDSEVNRVMgPSB7CisgICAgICd1bml4X3ByZWZpeCc6IHsKKyAgICAgICAgICdwdXJlbGliJzogJyRiYXNlL2xpYi9weXRob24kcHlfdmVyc2lvbl9zaG9ydC9zaXRlLXBhY2thZ2VzJywKKy0gICAgICAgICdwbGF0bGliJzogJyRwbGF0YmFzZS9saWIvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvc2l0ZS1wYWNrYWdlcycsCisrICAgICAgICAncGxhdGxpYic6ICckcGxhdGJhc2UvJytsaWJuYW1lKycvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAnaGVhZGVycyc6ICckYmFzZS9pbmNsdWRlL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0JGFiaWZsYWdzLyRkaXN0X25hbWUnLAorICAgICAgICAgJ3NjcmlwdHMnOiAnJGJhc2UvYmluJywKKyAgICAgICAgICdkYXRhJyAgIDogJyRiYXNlJywKK0luZGV4OiBQeXRob24tMy40LjIvTGliL3B5ZG9jLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvTGliL3B5ZG9jLnB5CisrKysgUHl0aG9uLTMuNC4yL0xpYi9weWRvYy5weQorQEAgLTM5NCw3ICszOTQsNyBAQCBjbGFzcyBEb2M6CisgCisgICAgICAgICBkb2Nsb2MgPSBvcy5lbnZpcm9uLmdldCgiUFlUSE9ORE9DUyIsIHNlbGYuUFlUSE9ORE9DUykKKyAKKy0gICAgICAgIGJhc2VkaXIgPSBvcy5wYXRoLmpvaW4oc3lzLmJhc2VfZXhlY19wcmVmaXgsICJsaWIiLAorKyAgICAgICAgYmFzZWRpciA9IG9zLnBhdGguam9pbihzeXMuYmFzZV9leGVjX3ByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiVkLiVkIiAlICBzeXMudmVyc2lvbl9pbmZvWzoyXSkKKyAgICAgICAgIGlmIChpc2luc3RhbmNlKG9iamVjdCwgdHlwZShvcykpIGFuZAorICAgICAgICAgICAgIChvYmplY3QuX19uYW1lX18gaW4gKCdlcnJubycsICdleGNlcHRpb25zJywgJ2djJywgJ2ltcCcsCitJbmRleDogUHl0aG9uLTMuNC4yL0xpYi90cmFjZS5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL0xpYi90cmFjZS5weQorKysrIFB5dGhvbi0zLjQuMi9MaWIvdHJhY2UucHkKK0BAIC03NTEsMTAgKzc1MSwxMCBAQCBkZWYgbWFpbihhcmd2PU5vbmUpOgorICAgICAgICAgICAgICAgICAjIHNob3VsZCBJIGFsc28gY2FsbCBleHBhbmR1c2VyPyAoYWZ0ZXIgYWxsLCBjb3VsZCB1c2UgJEhPTUUpCisgCisgICAgICAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoIiRwcmVmaXgiLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzeXMuYmFzZV9wcmVmaXgsICJsaWIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzeXMuYmFzZV9wcmVmaXgsIHN5cy5saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdKSkKKyAgICAgICAgICAgICAgICAgcyA9IHMucmVwbGFjZSgiJGV4ZWNfcHJlZml4IiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLmJhc2VfZXhlY19wcmVmaXgsICJsaWIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzeXMuYmFzZV9leGVjX3ByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10pKQorICAgICAgICAgICAgICAgICBzID0gb3MucGF0aC5ub3JtcGF0aChzKQorICAgICAgICAgICAgICAgICBpZ25vcmVfZGlycy5hcHBlbmQocykKK0luZGV4OiBQeXRob24tMy40LjIvTWFrZWZpbGUucHJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvTWFrZWZpbGUucHJlLmluCisrKysgUHl0aG9uLTMuNC4yL01ha2VmaWxlLnByZS5pbgorQEAgLTEwMSw2ICsxMDEsOCBAQCBQWV9DT1JFX0NGTEFHUz0JJChQWV9DRkxBR1MpICQoUFlfQ0ZMQUdTCisgCisgIyBNYWNoaW5lLWRlcGVuZGVudCBzdWJkaXJlY3RvcmllcworIE1BQ0hERVA9CUBNQUNIREVQQAorK0xJQj0JCUBMSUJACisrQVJDSD0JCUBBUkNIQAorIAorICMgTXVsdGlhcmNoIGRpcmVjdG9yeSAobWF5IGJlIGVtcHR5KQorIE1VTFRJQVJDSD0JQE1VTFRJQVJDSEAKK0BAIC0xMjAsNyArMTIyLDcgQEAgTElCRElSPQkJQGxpYmRpckAKKyBNQU5ESVI9CQlAbWFuZGlyQAorIElOQ0xVREVESVI9CUBpbmNsdWRlZGlyQAorIENPTkZJTkNMVURFRElSPQkkKGV4ZWNfcHJlZml4KS9pbmNsdWRlCistU0NSSVBURElSPQkkKHByZWZpeCkvbGliCisrU0NSSVBURElSPQlAbGliZGlyQAorIEFCSUZMQUdTPQlAQUJJRkxBR1NACisgCisgIyBEZXRhaWxlZCBkZXN0aW5hdGlvbiBkaXJlY3RvcmllcworQEAgLTcxMiw2ICs3MTQsNyBAQCBNb2R1bGVzL2dldHBhdGgubzogJChzcmNkaXIpL01vZHVsZXMvZ2V0CisgCQktREVYRUNfUFJFRklYPSciJChleGVjX3ByZWZpeCkiJyBcCisgCQktRFZFUlNJT049JyIkKFZFUlNJT04pIicgXAorIAkJLURWUEFUSD0nIiQoVlBBVEgpIicgXAorKwkJLURBUkNIPSciJChBUkNIKSInIC1ETElCPSciJChMSUIpIicgXAorIAkJLW8gJEAgJChzcmNkaXIpL01vZHVsZXMvZ2V0cGF0aC5jCisgCisgTW9kdWxlcy9weXRob24ubzogJChzcmNkaXIpL01vZHVsZXMvcHl0aG9uLmMKK0BAIC03ODAsNyArNzgzLDcgQEAgJChBU1RfQyk6ICQoQVNUX0gpICQoQVNUX0FTREwpICQoQVNETEdFTgorIFB5dGhvbi9jb21waWxlLm8gUHl0aG9uL3N5bXRhYmxlLm8gUHl0aG9uL2FzdC5vOiAkKEdSQU1NQVJfSCkgJChBU1RfSCkKKyAKKyBQeXRob24vZ2V0cGxhdGZvcm0ubzogJChzcmNkaXIpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCistCQkkKENDKSAtYyAkKFBZX0NPUkVfQ0ZMQUdTKSAtRFBMQVRGT1JNPSciJChNQUNIREVQKSInIC1vICRAICQoc3JjZGlyKS9QeXRob24vZ2V0cGxhdGZvcm0uYworKwkJJChDQykgLWMgJChQWV9DT1JFX0NGTEFHUykgLURQTEFURk9STT0nIiQoTUFDSERFUCkiJyAtREFSQ0g9JyIkKEFSQ0gpIicgLURMSUI9JyIkKExJQikiJyAtbyAkQCAkKHNyY2RpcikvUHl0aG9uL2dldHBsYXRmb3JtLmMKKyAKKyBQeXRob24vaW1wb3J0ZGwubzogJChzcmNkaXIpL1B5dGhvbi9pbXBvcnRkbC5jCisgCQkkKENDKSAtYyAkKFBZX0NPUkVfQ0ZMQUdTKSAtSSQoRExJTkNMRElSKSAtbyAkQCAkKHNyY2RpcikvUHl0aG9uL2ltcG9ydGRsLmMKK0luZGV4OiBQeXRob24tMy40LjIvTW9kdWxlcy9nZXRwYXRoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9Nb2R1bGVzL2dldHBhdGguYworKysrIFB5dGhvbi0zLjQuMi9Nb2R1bGVzL2dldHBhdGguYworQEAgLTExNyw5ICsxMTcsMTEgQEAKKyAjZGVmaW5lIEVYRUNfUFJFRklYIFBSRUZJWAorICNlbmRpZgorIAorKyNkZWZpbmUgTElCX1BZVEhPTiBMSUIgIi9weXRob24iIFZFUlNJT04KKysKKyAjaWZuZGVmIFBZVEhPTlBBVEgKKy0jZGVmaW5lIFBZVEhPTlBBVEggUFJFRklYICIvbGliL3B5dGhvbiIgVkVSU0lPTiAiOiIgXAorLSAgICAgICAgICAgICAgRVhFQ19QUkVGSVggIi9saWIvcHl0aG9uIiBWRVJTSU9OICIvbGliLWR5bmxvYWQiCisrI2RlZmluZSBQWVRIT05QQVRIIFBSRUZJWCAiLyIgTElCX1BZVEhPTiAiOiIgXAorKyAgICAgICAgICAgICAgRVhFQ19QUkVGSVggIi8iIExJQl9QWVRIT04gIi9saWItZHlubG9hZCIKKyAjZW5kaWYKKyAKKyAjaWZuZGVmIExBTkRNQVJLCitAQCAtMTMwLDYgKzEzMiw3IEBAIHN0YXRpYyB3Y2hhcl90IHByZWZpeFtNQVhQQVRITEVOKzFdOworIHN0YXRpYyB3Y2hhcl90IGV4ZWNfcHJlZml4W01BWFBBVEhMRU4rMV07Cisgc3RhdGljIHdjaGFyX3QgcHJvZ3BhdGhbTUFYUEFUSExFTisxXTsKKyBzdGF0aWMgd2NoYXJfdCAqbW9kdWxlX3NlYXJjaF9wYXRoID0gTlVMTDsKKytzdGF0aWMgd2NoYXJfdCAqbGliX3B5dGhvbiA9IEwiIiBMSUJfUFlUSE9OOworIAorIHN0YXRpYyB2b2lkCisgcmVkdWNlKHdjaGFyX3QgKmRpcikKK0luZGV4OiBQeXRob24tMy40LjIvUHl0aG9uL2dldHBsYXRmb3JtLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9QeXRob24vZ2V0cGxhdGZvcm0uYworKysrIFB5dGhvbi0zLjQuMi9QeXRob24vZ2V0cGxhdGZvcm0uYworQEAgLTEwLDMgKzEwLDIzIEBAIFB5X0dldFBsYXRmb3JtKHZvaWQpCisgeworIAlyZXR1cm4gUExBVEZPUk07CisgfQorKworKyNpZm5kZWYgQVJDSAorKyNkZWZpbmUgQVJDSCAidW5rbm93biIKKysjZW5kaWYKKysKKytjb25zdCBjaGFyICoKKytQeV9HZXRBcmNoKHZvaWQpCisreworKwlyZXR1cm4gQVJDSDsKKyt9CisrCisrI2lmbmRlZiBMSUIKKysjZGVmaW5lIExJQiAibGliIgorKyNlbmRpZgorKworK2NvbnN0IGNoYXIgKgorK1B5X0dldExpYih2b2lkKQorK3sKKysJcmV0dXJuIExJQjsKKyt9CitJbmRleDogUHl0aG9uLTMuNC4yL1B5dGhvbi9zeXNtb2R1bGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL1B5dGhvbi9zeXNtb2R1bGUuYworKysrIFB5dGhvbi0zLjQuMi9QeXRob24vc3lzbW9kdWxlLmMKK0BAIC0xNjk3LDYgKzE2OTcsMTAgQEAgX1B5U3lzX0luaXQodm9pZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZyhQeV9HZXRDb3B5cmlnaHQoKSkpOworICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJwbGF0Zm9ybSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcoUHlfR2V0UGxhdGZvcm0oKSkpOworKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJhcmNoIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZyhQeV9HZXRBcmNoKCkpKTsKKysgICAgU0VUX1NZU19GUk9NX1NUUklORygibGliIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZyhQeV9HZXRMaWIoKSkpOworICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJleGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9HZXRQcm9ncmFtRnVsbFBhdGgoKSwgLTEpKTsKK0luZGV4OiBQeXRob24tMy40LjIvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9zZXR1cC5weQorKysrIFB5dGhvbi0zLjQuMi9zZXR1cC5weQorQEAgLTQ1NCw3ICs0NTQsNyBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAjIGRpcmVjdG9yaWVzIChpLmUuICcuJyBhbmQgJ0luY2x1ZGUnKSBtdXN0IGJlIGZpcnN0LiAgU2VlIGlzc3VlCisgICAgICAgICAjIDEwNTIwLgorICAgICAgICAgaWYgbm90IGNyb3NzX2NvbXBpbGluZzoKKy0gICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMsICcvdXNyL2xvY2FsL2xpYicpCisrICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzLCBvcy5wYXRoLmpvaW4oJy91c3IvbG9jYWwnLCBzeXMubGliKSkKKyAgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsICcvdXNyL2xvY2FsL2luY2x1ZGUnKQorICAgICAgICAgIyBvbmx5IGNoYW5nZSB0aGlzIGZvciBjcm9zcyBidWlsZHMgZm9yIDMuMywgaXNzdWVzIG9uIE1hZ2VpYQorICAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgorQEAgLTUxMiw4ICs1MTIsNyBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAjIGJlIGFzc3VtZWQgdGhhdCBubyBhZGRpdGlvbmFsIC1JLC1MIGRpcmVjdGl2ZXMgYXJlIG5lZWRlZC4KKyAgICAgICAgIGlmIG5vdCBjcm9zc19jb21waWxpbmc6CisgICAgICAgICAgICAgbGliX2RpcnMgPSBzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycyArIFsKKy0gICAgICAgICAgICAgICAgJy9saWI2NCcsICcvdXNyL2xpYjY0JywKKy0gICAgICAgICAgICAgICAgJy9saWInLCAnL3Vzci9saWInLAorKyAgICAgICAgICAgICAgICAnLycgKyBzeXMubGliLCAnL3Vzci8nICsgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgIGluY19kaXJzID0gc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMgKyBbJy91c3IvaW5jbHVkZSddCisgICAgICAgICBlbHNlOgorQEAgLTY5NiwxMSArNjk1LDExIEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICAgICBlbGlmIGN1cnNlc19saWJyYXJ5OgorICAgICAgICAgICAgICAgICByZWFkbGluZV9saWJzLmFwcGVuZChjdXJzZXNfbGlicmFyeSkKKyAgICAgICAgICAgICBlbGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMgKworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycvdXNyL2xpYi90ZXJtY2FwJ10sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJy91c3IvJytzeXMubGliKycvdGVybWNhcCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlcm1jYXAnKToKKyAgICAgICAgICAgICAgICAgcmVhZGxpbmVfbGlicy5hcHBlbmQoJ3Rlcm1jYXAnKQorICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3JlYWRsaW5lJywgWydyZWFkbGluZS5jJ10sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnM9WycvdXNyL2xpYi90ZXJtY2FwJ10sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnM9WycvdXNyLycrc3lzLmxpYisnL3Rlcm1jYXAnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2xpbmtfYXJncz1yZWFkbGluZV9leHRyYV9saW5rX2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM9cmVhZGxpbmVfbGlicykgKQorICAgICAgICAgZWxzZToKK0luZGV4OiBQeXRob24tMy40LjIvTGliL3N5c2NvbmZpZy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL0xpYi9zeXNjb25maWcucHkKKysrKyBQeXRob24tMy40LjIvTGliL3N5c2NvbmZpZy5weQorQEAgLTIwLDEwICsyMCwxMCBAQCBfX2FsbF9fID0gWworIAorIF9JTlNUQUxMX1NDSEVNRVMgPSB7CisgICAgICdwb3NpeF9wcmVmaXgnOiB7CistICAgICAgICAnc3RkbGliJzogJ3tpbnN0YWxsZWRfYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCistICAgICAgICAncGxhdHN0ZGxpYic6ICd7cGxhdGJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorKyAgICAgICAgJ3N0ZGxpYic6ICd7aW5zdGFsbGVkX2Jhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisrICAgICAgICAncGxhdHN0ZGxpYic6ICd7cGxhdGJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAncHVyZWxpYic6ICd7YmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKy0gICAgICAgICdwbGF0bGliJzogJ3twbGF0YmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKysgICAgICAgICdwbGF0bGliJzogJ3twbGF0YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ2luY2x1ZGUnOgorICAgICAgICAgICAgICd7aW5zdGFsbGVkX2Jhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9e2FiaWZsYWdzfScsCisgICAgICAgICAncGxhdGluY2x1ZGUnOgorQEAgLTMyLDEwICszMiwxMCBAQCBfSU5TVEFMTF9TQ0hFTUVTID0geworICAgICAgICAgJ2RhdGEnOiAne2Jhc2V9JywKKyAgICAgICAgIH0sCisgICAgICdwb3NpeF9ob21lJzogeworLSAgICAgICAgJ3N0ZGxpYic6ICd7aW5zdGFsbGVkX2Jhc2V9L2xpYi9weXRob24nLAorLSAgICAgICAgJ3BsYXRzdGRsaWInOiAne2Jhc2V9L2xpYi9weXRob24nLAorKyAgICAgICAgJ3N0ZGxpYic6ICd7aW5zdGFsbGVkX2Jhc2V9Lycrc3lzLmxpYisnL3B5dGhvbicsCisrICAgICAgICAncGxhdHN0ZGxpYic6ICd7YmFzZX0vJytzeXMubGliKycvcHl0aG9uJywKKyAgICAgICAgICdwdXJlbGliJzogJ3tiYXNlfS9saWIvcHl0aG9uJywKKy0gICAgICAgICdwbGF0bGliJzogJ3tiYXNlfS9saWIvcHl0aG9uJywKKysgICAgICAgICdwbGF0bGliJzogJ3tiYXNlfS8nK3N5cy5saWIrJy9weXRob24nLAorICAgICAgICAgJ2luY2x1ZGUnOiAne2luc3RhbGxlZF9iYXNlfS9pbmNsdWRlL3B5dGhvbicsCisgICAgICAgICAncGxhdGluY2x1ZGUnOiAne2luc3RhbGxlZF9iYXNlfS9pbmNsdWRlL3B5dGhvbicsCisgICAgICAgICAnc2NyaXB0cyc6ICd7YmFzZX0vYmluJywKK0BAIC02MSwxMCArNjEsMTAgQEAgX0lOU1RBTExfU0NIRU1FUyA9IHsKKyAgICAgICAgICdkYXRhJzogJ3t1c2VyYmFzZX0nLAorICAgICAgICAgfSwKKyAgICAgJ3Bvc2l4X3VzZXInOiB7CistICAgICAgICAnc3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCistICAgICAgICAncGxhdHN0ZGxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorKyAgICAgICAgJ3N0ZGxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisrICAgICAgICAncGxhdHN0ZGxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAncHVyZWxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCistICAgICAgICAncGxhdGxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisrICAgICAgICAncGxhdGxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdpbmNsdWRlJzogJ3t1c2VyYmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3NjcmlwdHMnOiAne3VzZXJiYXNlfS9iaW4nLAorICAgICAgICAgJ2RhdGEnOiAne3VzZXJiYXNlfScsCitJbmRleDogUHl0aG9uLTMuNC4yL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL2NvbmZpZ3VyZS5hYworKysrIFB5dGhvbi0zLjQuMi9jb25maWd1cmUuYWMKK0BAIC03OTEsNiArNzkxLDQxIEBAIGVzYWMKKyBNVUxUSUFSQ0g9JCgkQ0MgLS1wcmludC1tdWx0aWFyY2ggMj4vZGV2L251bGwpCisgQUNfU1VCU1QoTVVMVElBUkNIKQorIAorK0FDX1NVQlNUKEFSQ0gpCisrQUNfTVNHX0NIRUNLSU5HKEFSQ0gpCisrQVJDSD1gdW5hbWUgLW1gCisrY2FzZSAkQVJDSCBpbgorK2k/ODYpIEFSQ0g9aTM4Njs7CisrZXNhYworK0FDX01TR19SRVNVTFQoJEFSQ0gpCisrCisrQUNfU1VCU1QoTElCKQorK0FDX01TR19DSEVDS0lORyhMSUIpCisrY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgorK0xpbnV4KikKKysgICMgVGVzdCBpZiB0aGUgY29tcGlsZXIgaXMgNjRiaXQKKysgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisrICBweXRob25fY3ZfY2NfNjRiaXRfb3V0cHV0PW5vCisrICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisrICAgICoiRUxGIDY0IiopCisrICAgICAgcHl0aG9uX2N2X2NjXzY0Yml0X291dHB1dD15ZXMKKysgICAgICA7OworKyAgICBlc2FjCisrICBmaQorKyAgcm0gLXJmIGNvbmZ0ZXN0KgorKyAgOzsKKytlc2FjCisrCisrY2FzZSAkQVJDSDokcHl0aG9uX2N2X2NjXzY0Yml0X291dHB1dCBpbgorK3BwYzY0OnllcyB8IHBvd2VycGM2NDp5ZXMgfCBzMzkweDp5ZXMgfCBzcGFyYzY0OnllcyB8IHg4Nl82NDp5ZXMpCisrICBMSUI9ImxpYjY0IgorKyAgOzsKKysqOiopCisrICBMSUI9ImxpYiIKKysgIDs7CisrZXNhYworK0FDX01TR19SRVNVTFQoJExJQikKKyAKKyBBQ19TVUJTVChMSUJSQVJZKQorIEFDX01TR19DSEVDS0lORyhMSUJSQVJZKQorSW5kZXg6IFB5dGhvbi0zLjQuMi9MaWIvc2l0ZS5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL0xpYi9zaXRlLnB5CisrKysgUHl0aG9uLTMuNC4yL0xpYi9zaXRlLnB5CitAQCAtMzA0LDEzICszMDQsMTkgQEAgZGVmIGdldHNpdGVwYWNrYWdlcyhwcmVmaXhlcz1Ob25lKToKKyAgICAgICAgIHNlZW4uYWRkKHByZWZpeCkKKyAKKyAgICAgICAgIGlmIG9zLnNlcCA9PSAnLyc6CistICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwKKysgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsIHN5cy5saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l0ZS1wYWNrYWdlcyIpKQorLSAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsICJzaXRlLXB5dGhvbiIpKQorKyAgICAgICAgICAgIGlmIHN5cy5saWIgIT0gImxpYiI6CisrICAgICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l0ZS1wYWNrYWdlcyIpKQorKyAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgc3lzLmxpYiwgInNpdGUtcHl0aG9uIikpCisrICAgICAgICAgICAgaWYgc3lzLmxpYiAhPSAibGliIjoKKysgICAgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCBzeXMubGliLCAic2l0ZS1weXRob24iKSkKKyAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChwcmVmaXgpCistICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwgInNpdGUtcGFja2FnZXMiKSkKKysgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsIHN5cy5saWIsICJzaXRlLXBhY2thZ2VzIikpCisgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gImRhcndpbiI6CisgICAgICAgICAgICAgIyBmb3IgZnJhbWV3b3JrIGJ1aWxkcyAqb25seSogd2UgYWRkIHRoZSBzdGFuZGFyZCBBcHBsZQorICAgICAgICAgICAgICMgbG9jYXRpb25zLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uLWNvbmZpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbi1jb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIzYjhiNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbi1jb25maWcucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorcHl0aG9uLWNvbmZpZzogUmV2ZXJ0IHRvIHVzaW5nIGRpc3R1dGlscy5zeXNjb25maWcKKworVGhlIG5ld2VyIHN5c2NvbmZpZyBtb2R1bGUgc2hhcmVzIHNvbWUgY29kZSB3aXRoIGRpc3R1dGlscy5zeXNjb25maWcsIGJ1dCB0aGUgc2FtZSBtb2RpZmljYXRpb25zIGFzIGluCisKKzEyLWRpc3R1dGlscy1wcmVmaXgtaXMtaW5zaWRlLXN0YWdpbmctYXJlYS5wYXRjaCBtYWtlcyBkaXN0dXRpbHMuc3lzY29uZmlnCisKK2FmZmVjdCB0aGUgbmF0aXZlIHJ1bnRpbWUgYXMgd2VsbCBhcyBjcm9zcyBidWlsZGluZy4gVXNlIHRoZSBvbGQsIHBhdGNoZWQKK2ltcGxlbWVudGF0aW9uIHdoaWNoIHJldHVybnMgcGF0aHMgaW4gdGhlIHN0YWdpbmcgZGlyZWN0b3J5IGFuZCBmb3IgdGhlIHRhcmdldCwKK2FzIGFwcHJvcHJpYXRlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW0VtYmVkZGVkIFNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBUeWxlciBIYWxsIDx0eWxlcndoYWxsQGdtYWlsLmNvbT4KKzoKK0luZGV4OiBQeXRob24tMy4zLjMvTWlzYy9weXRob24tY29uZmlnLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuMy4zLm9yaWcvTWlzYy9weXRob24tY29uZmlnLmluCisrKysgUHl0aG9uLTMuMy4zL01pc2MvcHl0aG9uLWNvbmZpZy5pbgorQEAgLTQsNyArNCw3IEBACisgaW1wb3J0IGdldG9wdAorIGltcG9ydCBvcworIGltcG9ydCBzeXMKKy1pbXBvcnQgc3lzY29uZmlnCisrZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZworIAorIHZhbGlkX29wdHMgPSBbJ3ByZWZpeCcsICdleGVjLXByZWZpeCcsICdpbmNsdWRlcycsICdsaWJzJywgJ2NmbGFncycsCisgICAgICAgICAgICAgICAnbGRmbGFncycsICdleHRlbnNpb24tc3VmZml4JywgJ2hlbHAnLCAnYWJpZmxhZ3MnLCAnY29uZmlnZGlyJ10KK0BAIC0zMiwxNCArMzIsMTQgQEAgaWYgJy0taGVscCcgaW4gb3B0X2ZsYWdzOgorIAorIGZvciBvcHQgaW4gb3B0X2ZsYWdzOgorICAgICBpZiBvcHQgPT0gJy0tcHJlZml4JzoKKy0gICAgICAgIHByaW50KHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigncHJlZml4JykpCisrICAgICAgICBwcmludChzeXNjb25maWcuUFJFRklYKQorIAorICAgICBlbGlmIG9wdCA9PSAnLS1leGVjLXByZWZpeCc6CistICAgICAgICBwcmludChzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ2V4ZWNfcHJlZml4JykpCisrICAgICAgICBwcmludChzeXNjb25maWcuRVhFQ19QUkVGSVgpCisgCisgICAgIGVsaWYgb3B0IGluICgnLS1pbmNsdWRlcycsICctLWNmbGFncycpOgorLSAgICAgICAgZmxhZ3MgPSBbJy1JJyArIHN5c2NvbmZpZy5nZXRfcGF0aCgnaW5jbHVkZScpLAorLSAgICAgICAgICAgICAgICAgJy1JJyArIHN5c2NvbmZpZy5nZXRfcGF0aCgncGxhdGluY2x1ZGUnKV0KKysgICAgICAgIGZsYWdzID0gWyctSScgKyBzeXNjb25maWcuZ2V0X3B5dGhvbl9pbmMoKSwKKysgICAgICAgICAgICAgICAgICctSScgKyBzeXNjb25maWcuZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz1UcnVlKV0KKyAgICAgICAgIGlmIG9wdCA9PSAnLS1jZmxhZ3MnOgorICAgICAgICAgICAgIGZsYWdzLmV4dGVuZChnZXR2YXIoJ0NGTEFHUycpLnNwbGl0KCkpCisgICAgICAgICBwcmludCgnICcuam9pbihmbGFncykpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24zLXNldHVwLnB5LW5vLWhvc3QtaGVhZGVycy1saWJzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uMy1zZXR1cC5weS1uby1ob3N0LWhlYWRlcnMtbGlicy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmM4YjhjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uMy1zZXR1cC5weS1uby1ob3N0LWhlYWRlcnMtbGlicy5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDQzMjM4ZTFhYzEzZTMyOTg0ZDAxNWM5MmE1ODQxZjNkZTFmZTFkMTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAxOCBOb3YgMjAxNCAwMDowNzowNyAtMDUwMAorU3ViamVjdDogW1BBVENIXSBzZXR1cC5weTogbm8gaG9zdCBoZWFkZXJzIGxpYnMKKworV2hlbiB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLCBzZXR1cC5weSBzaG91bGQgbmV2ZXIgbG9vayBpbiAvdXNyCitvciAvdXNyL2xvY2FsIHRvIGZpbmQgaGVhZGVycyBvciBsaWJyYXJpZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbQ3Jvc3MgY29tcGlsZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNldHVwLnB5IHwgMyAtLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NldHVwLnB5IGIvc2V0dXAucHkKK2luZGV4IGYwMjBiMjguLmU4MzM5Y2QgMTAwNjQ0CistLS0gYS9zZXR1cC5weQorKysrIGIvc2V0dXAucHkKK0BAIC00NDQsMTAgKzQ0NCw3IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgIGlmIG5vdCBjcm9zc19jb21waWxpbmc6CisgICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzLCBvcy5wYXRoLmpvaW4oJy91c3IvbG9jYWwnLCBzeXMubGliKSkKKyAgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsICcvdXNyL2xvY2FsL2luY2x1ZGUnKQorLSAgICAgICAgIyBvbmx5IGNoYW5nZSB0aGlzIGZvciBjcm9zcyBidWlsZHMgZm9yIDMuMywgaXNzdWVzIG9uIE1hZ2VpYQorLSAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgorICAgICAgICAgICAgIHNlbGYuYWRkX2djY19wYXRocygpCistICAgICAgICBpZiBub3QgY3Jvc3NfY29tcGlsaW5nOgorICAgICAgICAgICAgIHNlbGYuYWRkX211bHRpYXJjaF9wYXRocygpCisgCisgICAgICAgICAjIEFkZCBwYXRocyBzcGVjaWZpZWQgaW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBMREZMQUdTIGFuZAorLS0gCisyLjAuMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24zLXVzZS1DUk9TU1BZVEhPTlBBVEgtZm9yLVBZVEhPTl9GT1JfQlVJTEQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24zLXVzZS1DUk9TU1BZVEhPTlBBVEgtZm9yLVBZVEhPTl9GT1JfQlVJTEQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ0OTBkOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbjMtdXNlLUNST1NTUFlUSE9OUEFUSC1mb3ItUFlUSE9OX0ZPUl9CVUlMRC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDUzZWQyMTZkN2JmNzBkZDJhOTI1NDMyYjY4MDVhNzAxZTVmYzNlMGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAxNyBOb3YgMjAxNCAwNjo0NDo0NyArMDAwMAorU3ViamVjdDogW1BBVENIXSBweXRob24zIHVzZSBDUk9TU1BZVEhPTlBBVEggZm9yIFBZVEhPTl9GT1JfQlVJTEQKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtDcm9zcyBjb21waWxlIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA5ODliYWY5Li4yODkwYzk2IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02Nyw3ICs2Nyw3IEBAIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgCSAgICBBQ19NU0dfRVJST1IoW3B5dGhvbiRQQUNLQUdFX1ZFUlNJT04gaW50ZXJwcmV0ZXIgbm90IGZvdW5kXSkKKyAJZmkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJGludGVycCkKKy0JUFlUSE9OX0ZPUl9CVUlMRD0nX1BZVEhPTl9QUk9KRUNUX0JBU0U9JChhYnNfYnVpbGRkaXIpIF9QWVRIT05fSE9TVF9QTEFURk9STT0kKF9QWVRIT05fSE9TVF9QTEFURk9STSkgUFlUSE9OUEFUSD0kKHNoZWxsIHRlc3QgLWYgcHlidWlsZGRpci50eHQgJiYgZWNobyAkKGFic19idWlsZGRpcikvYGNhdCBweWJ1aWxkZGlyLnR4dGA6KSQoc3JjZGlyKS9MaWI6JChzcmNkaXIpL0xpYi8kKFBMQVRESVIpICckaW50ZXJwCisrCVBZVEhPTl9GT1JfQlVJTEQ9J19QWVRIT05fUFJPSkVDVF9CQVNFPSQoYWJzX2J1aWxkZGlyKSBfUFlUSE9OX0hPU1RfUExBVEZPUk09JChfUFlUSE9OX0hPU1RfUExBVEZPUk0pIFBZVEhPTlBBVEg9JChDUk9TU1BZVEhPTlBBVEgpICckaW50ZXJwCisgICAgIGZpCisgZWxpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG1heWJlOyB0aGVuCisgICAgIEFDX01TR19FUlJPUihbQ3Jvc3MgY29tcGlsaW5nIHJlcXVpcmVkIC0taG9zdD1IT1NULVRVUExFIGFuZCAtLWJ1aWxkPUFSQ0hdKQorLS0gCisyLjAuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zZXR1cC5weS1jaGVjay1jcm9zc19jb21waWxpbmctd2hlbi1nZXQtRkxBR1MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zZXR1cC5weS1jaGVjay1jcm9zc19jb21waWxpbmctd2hlbi1nZXQtRkxBR1MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMyZTEyZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NldHVwLnB5LWNoZWNrLWNyb3NzX2NvbXBpbGluZy13aGVuLWdldC1GTEFHUy5wYXRjaApAQCAtMCwwICsxLDUwIEBACitGcm9tIDhkYWQ4MTBmM2EzZDA3M2YwOWFkNzJlMWEzZWUwYTg5NWVhYjJjYTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFN1biwgMTggSmFuIDIwMTUgMTk6MDU6MzYgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gc2V0dXAucHk6Y2hlY2sgY3Jvc3NfY29tcGlsaW5nIHdoZW4gZ2V0IEZMQUdTCisKK0ZpeGVkIHdoZW4gY29tcGlsZSB0YXJnZXQgcHl0aG5vbjM6CitnY2MgLWlzeXN0ZW0vcGF0aC90by9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgXAorICAgIC1MPS9wYXRoL3RvL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliCisKK1RoaXMgaXMgaW5jb3JyZWN0LCB0aGUgbmF0aXZlIHN5c3Jvb3Qgc2hvdWxkIG5vdCBiZSB1c2VkIGJ5IHRhcmdldAorcHl0aG9uMy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgc2V0dXAucHkgfCAgIDEwICsrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc2V0dXAucHkgYi9zZXR1cC5weQoraW5kZXggZTgzMzljZC4uODNmZDMxZiAxMDA2NDQKKy0tLSBhL3NldHVwLnB5CisrKysgYi9zZXR1cC5weQorQEAgLTIzOCw3ICsyMzgsMTAgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgIyB1bmZvcnR1bmF0ZWx5LCBkaXN0dXRpbHMgZG9lc24ndCBsZXQgdXMgcHJvdmlkZSBzZXBhcmF0ZSBDIGFuZCBDKysKKyAgICAgICAgICMgY29tcGlsZXJzCisgICAgICAgICBpZiBjb21waWxlciBpcyBub3QgTm9uZToKKy0gICAgICAgICAgICAoY2NzaGFyZWQsY2ZsYWdzKSA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMoJ0NDU0hBUkVEJywnQ0ZMQUdTJykKKysgICAgICAgICAgICBpZiBjcm9zc19jb21waWxpbmc6CisrICAgICAgICAgICAgICAgIChjY3NoYXJlZCxjZmxhZ3MpID0gKG9zLmVudmlyb24uZ2V0KCdDQ1NIQVJFRCcpIG9yICcnLCBvcy5lbnZpcm9uLmdldCgnQ0ZMQUdTJykgb3IgJycpCisrICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgKGNjc2hhcmVkLGNmbGFncykgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzKCdDQ1NIQVJFRCcsJ0NGTEFHUycpCisgICAgICAgICAgICAgYXJnc1snY29tcGlsZXJfc28nXSA9IGNvbXBpbGVyICsgJyAnICsgY2NzaGFyZWQgKyAnICcgKyBjZmxhZ3MKKyAgICAgICAgIHNlbGYuY29tcGlsZXIuc2V0X2V4ZWN1dGFibGVzKCoqYXJncykKKyAKK0BAIC00NTcsNyArNDYwLDEwIEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICAgICAgICAgKCdMREZMQUdTJywgJy1SJywgc2VsZi5jb21waWxlci5ydW50aW1lX2xpYnJhcnlfZGlycyksCisgICAgICAgICAgICAgICAgICgnTERGTEFHUycsICctTCcsIHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzKSwKKyAgICAgICAgICAgICAgICAgKCdDUFBGTEFHUycsICctSScsIHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzKSk6CistICAgICAgICAgICAgZW52X3ZhbCA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcihlbnZfdmFyKQorKyAgICAgICAgICAgIGlmIGNyb3NzX2NvbXBpbGluZzoKKysgICAgICAgICAgICAgICAgZW52X3ZhbCA9IG9zLmVudmlyb24uZ2V0KGVudl92YXIpCisrICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgZW52X3ZhbCA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcihlbnZfdmFyKQorICAgICAgICAgICAgIGlmIGVudl92YWw6CisgICAgICAgICAgICAgICAgICMgVG8gcHJldmVudCBvcHRwYXJzZSBmcm9tIHJhaXNpbmcgYW4gZXhjZXB0aW9uIGFib3V0IGFueQorICAgICAgICAgICAgICAgICAjIG9wdGlvbnMgaW4gZW52X3ZhbCB0aGF0IGl0IGRvZXNuJ3Qga25vdyBhYm91dCB3ZSBzdHJpcCBvdXQKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zZXR1cC5weS1maW5kLWxpYnJhcmllcy1pbi1zdGFnaW5nLWRpcnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zZXR1cC5weS1maW5kLWxpYnJhcmllcy1pbi1zdGFnaW5nLWRpcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI2YmQzOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NldHVwLnB5LWZpbmQtbGlicmFyaWVzLWluLXN0YWdpbmctZGlycy5wYXRjaApAQCAtMCwwICsxLDMwIEBACitQYXRjaCBzZXR1cC5weSBzbyB0aGF0IHRoZSBkZXRlY3RfbW9kdWxlcygpIGZ1bmN0aW9uIGxvb2tzIGZvciByZXF1aXJlZAorbGlicmFyaWVzIGFuZCBoZWFkZXJzIGluIFNUQUdJTkdfTElCRElSIC8gU1RBR0lOR19JTkNESVIuCisKK1dpdGhvdXQgdGhpcyBwYXRjaCwgc2V2ZXJhbCBleHRlbnNpb24gbW9kdWxlcyBhcmUgbm90IGJ1aWx0LCBldmVuIHRob3VnaAordGhlaXIgZGVwZW5kZW5jaWVzIGFyZSBwcmVzZW50IGluIHRoZSBjb21waWxlcidzIHNlYXJjaCBwYXRocy4KK1RoZSByZXN1bHQgaXMgdGhlIGZvbGxvd2luZyB3YXJuaW5nLCBhbmQgdWx0aW1hdGVseSBpbmNvbXBsZXRlIHBhY2thZ2VzOgorCit8IFRoZSBuZWNlc3NhcnkgYml0cyB0byBidWlsZCB0aGVzZSBvcHRpb25hbCBtb2R1bGVzIHdlcmUgbm90IGZvdW5kOgorfCBfYnoyICAgICAgICAgICAgICAgICAgX2N1cnNlc19wYW5lbCAgICAgICAgIF9kYm0KK3wgX2dkYm0gICAgICAgICAgICAgICAgIF9sem1hICAgICAgICAgICAgICAgICBfc3FsaXRlMworfCBuaXMgICAgICAgICAgICAgICAgICAgcmVhZGxpbmUgICAgICAgICAgICAgIHpsaWIKK3wgVG8gZmluZCB0aGUgbmVjZXNzYXJ5IGJpdHMsIGxvb2sgaW4gc2V0dXAucHkgaW4gZGV0ZWN0X21vZHVsZXMoKSBmb3IgdGhlIG1vZHVsZSdzIG5hbWUuCisKK1Vwc3RyZWFtLVN0YXR1czogIEluYXBwcm9wcmlhdGUgW0Nyb3NzIGNvbXBpbGUgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IERvbWluaWMgU2FjcsOpIDxkb21pbmljLnNhY3JlQGdteC5kZT4KKworSW5kZXg6IFB5dGhvbi0zLjQuMy9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMy5vcmlnL3NldHVwLnB5CisrKysgUHl0aG9uLTMuNC4zL3NldHVwLnB5CitAQCAtNTIxLDYgKzUyMSw4IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgbGliX2RpcnMgPSBzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlyc1s6XQorICAgICAgICAgICAgIGluY19kaXJzID0gc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnNbOl0KKysgICAgICAgICAgICBsaWJfZGlycy5hcHBlbmQob3MuZW52aXJvbi5nZXQoJ1NUQUdJTkdfTElCRElSJykpCisrICAgICAgICAgICAgaW5jX2RpcnMuYXBwZW5kKG9zLmVudmlyb24uZ2V0KCdTVEFHSU5HX0lOQ0RJUicpKQorICAgICAgICAgZXh0cyA9IFtdCisgICAgICAgICBtaXNzaW5nID0gW10KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NldHVwdHdlYWtzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2V0dXB0d2Vha3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E5MWIxOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NldHVwdHdlYWtzLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK1RoaXMgcGF0Y2ggcmVtb3ZlcyB2YXJpb3VzIHdheXMgbmF0aXZlIHN5c3RlbSBvcHRpb25zIGNhbiBwYXNzIGludG8gdGhlIHB5dGhvbiAKK2NvbXBpbGF0aW9uIGFuZCBzb21laG93IGJyZWFrIEMgbW9kdWxlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBTcGVjaWZpY10KKworUlAgMjAxMi8wNC8yMworCitJbmRleDogUHl0aG9uLTIuNy4yL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy4yLm9yaWcvc2V0dXAucHkJMjAxMi0wNC0yMyAyMDowMzo0Ny4yOTU1ODI1NTMgKzAwMDAKKysrKyBQeXRob24tMi43LjIvc2V0dXAucHkJMjAxMi0wNC0yMyAyMDowMzoxNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yMzEsNyArMjMxLDEzIEBACisgICAgICAgICAjIGNvbXBpbGVycworICAgICAgICAgaWYgY29tcGlsZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgKGNjc2hhcmVkLGNmbGFncykgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzKCdDQ1NIQVJFRCcsJ0NGTEFHUycpCistICAgICAgICAgICAgYXJnc1snY29tcGlsZXJfc28nXSA9IGNvbXBpbGVyICsgJyAnICsgY2NzaGFyZWQgKyAnICcgKyBjZmxhZ3MKKysgICAgICAgICAgICAjIE5lZWQgdG8gZmlsdGVyIG91dCAtaXN5c3Jvb3QgZnJvbSB0aGUgZmxhZ3MuIElkZWFsbHkgc2hvdWxkIAorKyAgICAgICAgICAgICMgZmlndXJlIG91dCB0YXJnZXQgZmxhZ3MgaGVyZS4KKysgICAgICAgICAgICBmbGFncyA9IFtdCisrICAgICAgICAgICAgZm9yIGYgaW4gY2ZsYWdzLnNwbGl0KCk6CisrICAgICAgICAgICAgICAgIGlmIG5vdCBmLnN0YXJ0c3dpdGgoIi1pc3lzdGVtIik6CisrICAgICAgICAgICAgICAgICAgICBmbGFncy5hcHBlbmQoZikKKysgICAgICAgICAgICBhcmdzWydjb21waWxlcl9zbyddID0gY29tcGlsZXIgKyAnICcgKyBjY3NoYXJlZCArICcgJyArICcgJy5qb2luKGZsYWdzKQorICAgICAgICAgc2VsZi5jb21waWxlci5zZXRfZXhlY3V0YWJsZXMoKiphcmdzKQorIAorICAgICAgICAgYnVpbGRfZXh0LmJ1aWxkX2V4dGVuc2lvbnMoc2VsZikKK0BAIC0zOTMsNyArMzk5LDYgQEAKKyAgICAgICAgICMgaW50byBjb25maWd1cmUgYW5kIHN0b3JlZCBpbiB0aGUgTWFrZWZpbGUgKGlzc3VlIGZvdW5kIG9uIE9TIFggMTAuMykuCisgICAgICAgICBmb3IgZW52X3ZhciwgYXJnX25hbWUsIGRpcl9saXN0IGluICgKKyAgICAgICAgICAgICAgICAgKCdMREZMQUdTJywgJy1SJywgc2VsZi5jb21waWxlci5ydW50aW1lX2xpYnJhcnlfZGlycyksCistICAgICAgICAgICAgICAgICgnTERGTEFHUycsICctTCcsIHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzKSwKKyAgICAgICAgICAgICAgICAgKCdDUFBGTEFHUycsICctSScsIHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzKSk6CisgICAgICAgICAgICAgZW52X3ZhbCA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcihlbnZfdmFyKQorICAgICAgICAgICAgIGlmIGVudl92YWw6CitAQCAtNDE5LDE2ICs0MjQsMTYgQEAKKyAgICAgICAgICAgICAgICAgICAgIGZvciBkaXJlY3RvcnkgaW4gcmV2ZXJzZWQob3B0aW9ucy5kaXJzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3QoZGlyX2xpc3QsIGRpcmVjdG9yeSkKKyAKKy0gICAgICAgIGlmIG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkgIT0gJy91c3InIFwKKy0gICAgICAgICAgICAgICAgYW5kIG5vdCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1BZVEhPTkZSQU1FV09SSycpOgorKyMgICAgICAgIGlmIG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkgIT0gJy91c3InIFwKKysjICAgICAgICAgICAgICAgIGFuZCBub3Qgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdQWVRIT05GUkFNRVdPUksnKToKKyAgICAgICAgICAgICAjIE9TWCBub3RlOiBEb24ndCBhZGQgTElCRElSIGFuZCBJTkNMVURFRElSIHRvIGJ1aWxkaW5nIGEgZnJhbWV3b3JrCisgICAgICAgICAgICAgIyAoUFlUSE9ORlJBTUVXT1JLIGlzIHNldCkgdG8gYXZvaWQgIyBsaW5raW5nIHByb2JsZW1zIHdoZW4KKyAgICAgICAgICAgICAjIGJ1aWxkaW5nIGEgZnJhbWV3b3JrIHdpdGggZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgdGhhbgorICAgICAgICAgICAgICMgdGhlIG9uZSB0aGF0IGlzIGN1cnJlbnRseSBpbnN0YWxsZWQgKGlzc3VlICM3NDczKQorLSAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJMSUJESVIiKSkKKy0gICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiSU5DTFVERURJUiIpKQorKyMgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMsCisrIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkxJQkRJUiIpKQorKyMgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsCisrIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIklOQ0xVREVESVIiKSkKKyAKKyAgICAgICAgIHRyeToKKyAgICAgICAgICAgICBoYXZlX3VuaWNvZGUgPSB1bmljb2RlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zaHV0aWwtZm9sbG93LXN5bWxpbmstZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2h1dGlsLWZvbGxvdy1zeW1saW5rLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDJiMWM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2h1dGlsLWZvbGxvdy1zeW1saW5rLWZpeC5wYXRjaApAQCAtMCwwICsxLDE3IEBACitzaHV0aWxzIHNob3VsZCBjb25zaWRlciBzeW1saW5rcworCistS2hlbQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGEvTGliL3NodXRpbC5weQkyMDEzLTAxLTI5IDEyOjMxOjA2LjkyNjU1NTc3OSAtMDgwMAorKysrIGIvTGliL3NodXRpbC5weQkyMDEzLTAxLTI5IDE2OjMxOjM5LjA5NzU1NDE4MiAtMDgwMAorQEAgLTEzMiw3ICsxMzIsNyBAQCBkZWYgY29weW1vZGUoc3JjLCBkc3QsICosIGZvbGxvd19zeW1saW5rCisgICAgIHN0ID0gc3RhdF9mdW5jKHNyYykKKyAgICAgY2htb2RfZnVuYyhkc3QsIHN0YXQuU19JTU9ERShzdC5zdF9tb2RlKSkKKyAKKy1pZiBoYXNhdHRyKG9zLCAnbGlzdHhhdHRyJyk6CisraWYgaGFzYXR0cihvcywgJ2xpc3R4YXR0cicpIGFuZCBvcy5saXN0eGF0dHIgaW4gb3Muc3VwcG9ydHNfZm9sbG93X3N5bWxpbmtzOgorICAgICBkZWYgX2NvcHl4YXR0cihzcmMsIGRzdCwgKiwgZm9sbG93X3N5bWxpbmtzPVRydWUpOgorICAgICAgICAgIiIiQ29weSBleHRlbmRlZCBmaWxlc3lzdGVtIGF0dHJpYnV0ZXMgZnJvbSBgc3JjYCB0byBgZHN0YC4KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NpdGVjdXN0b21pemUucHkgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zaXRlY3VzdG9taXplLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOGI1ZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zaXRlY3VzdG9taXplLnB5CkBAIC0wLDAgKzEsMzcgQEAKKyMgT3BlbkVtYmVkZGVkIHNpdGVjdXN0b21pemUucHkgKEMpIDIwMDItMjAwOCBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtbGF1ZXJAdmFuaWxsZS1tZWRpYS5kZT4KKyMgR1BMdjIgb3IgbGF0ZXIKKyMgVmVyc2lvbjogMjAwODExMjMKKyMgRmVhdHVyZXM6CisjICogc2V0IHByb3BlciBkZWZhdWx0IGVuY29kaW5nCisjICogZW5hYmxlIHJlYWRsaW5lIGNvbXBsZXRpb24gaW4gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyCisjICogbG9hZCBjb21tYW5kIGxpbmUgaGlzdG9yeSBvbiBzdGFydHVwCisjICogc2F2ZSBjb21tYW5kIGxpbmUgaGlzdG9yeSBvbiBleGl0IAorCitpbXBvcnQgb3MKKworZGVmIF9fZXhpdGhhbmRsZXIoKToKKyAgICB0cnk6CisgICAgICAgIHJlYWRsaW5lLndyaXRlX2hpc3RvcnlfZmlsZSggIiVzLy5weXRob24taGlzdG9yeSIgJSBvcy5nZXRlbnYoICJIT01FIiwgIi90bXAiICkgKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBwYXNzCisKK2RlZiBfX3JlZ2lzdGVyRXhpdEhhbmRsZXIoKToKKyAgICBpbXBvcnQgYXRleGl0CisgICAgYXRleGl0LnJlZ2lzdGVyKCBfX2V4aXRoYW5kbGVyICkKKworZGVmIF9fZW5hYmxlUmVhZGxpbmVTdXBwb3J0KCk6CisgICAgcmVhZGxpbmUuc2V0X2hpc3RvcnlfbGVuZ3RoKCAxMDAwICkKKyAgICByZWFkbGluZS5wYXJzZV9hbmRfYmluZCggInRhYjogY29tcGxldGUiICkKKyAgICB0cnk6CisgICAgICAgIHJlYWRsaW5lLnJlYWRfaGlzdG9yeV9maWxlKCAiJXMvLnB5dGhvbi1oaXN0b3J5IiAlIG9zLmdldGVudiggIkhPTUUiLCAiL3RtcCIgKSApCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHBhc3MKKworaW1wb3J0IHN5cwordHJ5OgorICAgIGltcG9ydCBybGNvbXBsZXRlciwgcmVhZGxpbmUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCitlbHNlOgorICAgIF9fcmVnaXN0ZXJFeGl0SGFuZGxlcigpCisgICAgX19lbmFibGVSZWFkbGluZVN1cHBvcnQoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc3lzY29uZmlnLnB5LWFkZC1fUFlUSE9OX1BST0pFQ1RfU1JDLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc3lzY29uZmlnLnB5LWFkZC1fUFlUSE9OX1BST0pFQ1RfU1JDLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMDc2NDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zeXNjb25maWcucHktYWRkLV9QWVRIT05fUFJPSkVDVF9TUkMucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSBmYzkzYjNjYzIzYjRmOTY5OGFlOTJhNDI5ODZkYmIwMmI2ZjE5NTg4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBTdW4sIDE4IEphbiAyMDE1IDA2OjI5OjUwIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIHN5c2NvbmZpZy5weTogYWRkIF9QWVRIT05fUFJPSkVDVF9TUkMKKworcHl0aG9uMyBoYXMgaW50cm9kdWNlZCBfUFlUSE9OX1BST0pFQ1RfQkFTRSB3aGljaCBpcyB1c2VkIGZvciBzZXBhcmF0ZSBCCithbmQgUywgYnV0IGl0IGRvZXNuJ3Qgd29yayB3aGVuIGNvbXBpbGUgTW9kdWxlcywgdGhlIHRhcmdldCBweXRob24zIHJ1bnMKK3B5dGhvbjMtbmF0aXZlJ3Mgc3lzY29uZmlnIHRvIGdldCBzcmNkaXIgd2hpY2ggaXMgdGhlIG5hdGl2ZSdzLCB0aGVyZQord291bGQgYmUgZXJyb3JzIHdoZW4gbmF0aXZlJ3Mgc3JjZGlyIGhhcyBiZWVuIHJlbW92ZWQsIGFkZAorX1BZVEhPTl9QUk9KRUNUX1NSQyB0byBmaXggdGhlIHByb2JsZW0uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIExpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5IHwgICAgNSArKysrLQorIExpYi9zeXNjb25maWcucHkgICAgICAgICAgIHwgICAgNSArKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkgYi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQoraW5kZXggYTU0NWFiOS4uNzQzMTdkMSAxMDA2NDQKKy0tLSBhL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CisrKysgYi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorQEAgLTU1NCw3ICs1NTQsMTAgQEAgZGVmIGdldF9jb25maWdfdmFycygqYXJncyk6CisgICAgICAgICBfY29uZmlnX3ZhcnNbJ2V4ZWNfcHJlZml4J10gPSBFWEVDX1BSRUZJWAorIAorICAgICAgICAgIyBBbHdheXMgY29udmVydCBzcmNkaXIgdG8gYW4gYWJzb2x1dGUgcGF0aAorLSAgICAgICAgc3JjZGlyID0gX2NvbmZpZ192YXJzLmdldCgnc3JjZGlyJywgcHJvamVjdF9iYXNlKQorKyAgICAgICAgaWYgIl9QWVRIT05fUFJPSkVDVF9TUkMiIGluIG9zLmVudmlyb246CisrICAgICAgICAgICAgc3JjZGlyID0gb3MucGF0aC5hYnNwYXRoKG9zLmVudmlyb25bIl9QWVRIT05fUFJPSkVDVF9TUkMiXSkKKysgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgc3JjZGlyID0gX2NvbmZpZ192YXJzLmdldCgnc3JjZGlyJywgcHJvamVjdF9iYXNlKQorICAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgorICAgICAgICAgICAgIGlmIHB5dGhvbl9idWlsZDoKKyAgICAgICAgICAgICAgICAgIyBJZiBzcmNkaXIgaXMgYSByZWxhdGl2ZSBwYXRoICh0eXBpY2FsbHkgJy4nIG9yICcuLicpCitkaWZmIC0tZ2l0IGEvTGliL3N5c2NvbmZpZy5weSBiL0xpYi9zeXNjb25maWcucHkKK2luZGV4IDcyODdmMTEuLmNjOTI5OTggMTAwNjQ0CistLS0gYS9MaWIvc3lzY29uZmlnLnB5CisrKysgYi9MaWIvc3lzY29uZmlnLnB5CitAQCAtNTYyLDcgKzU2MiwxMCBAQCBkZWYgZ2V0X2NvbmZpZ192YXJzKCphcmdzKToKKyAgICAgICAgIF9DT05GSUdfVkFSU1sndXNlcmJhc2UnXSA9IF9nZXR1c2VyYmFzZSgpCisgCisgICAgICAgICAjIEFsd2F5cyBjb252ZXJ0IHNyY2RpciB0byBhbiBhYnNvbHV0ZSBwYXRoCistICAgICAgICBzcmNkaXIgPSBfQ09ORklHX1ZBUlMuZ2V0KCdzcmNkaXInLCBfUFJPSkVDVF9CQVNFKQorKyAgICAgICAgaWYgIl9QWVRIT05fUFJPSkVDVF9TUkMiIGluIG9zLmVudmlyb246CisrICAgICAgICAgICAgc3JjZGlyID0gb3MucGF0aC5hYnNwYXRoKG9zLmVudmlyb25bIl9QWVRIT05fUFJPSkVDVF9TUkMiXSkKKysgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgc3JjZGlyID0gX0NPTkZJR19WQVJTLmdldCgnc3JjZGlyJywgX1BST0pFQ1RfQkFTRSkKKyAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKKyAgICAgICAgICAgICBpZiBfUFlUSE9OX0JVSUxEOgorICAgICAgICAgICAgICAgICAjIElmIHNyY2RpciBpcyBhIHJlbGF0aXZlIHBhdGggKHR5cGljYWxseSAnLicgb3IgJy4uJykKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zeXNyb290LWluY2x1ZGUtaGVhZGVycy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3N5c3Jvb3QtaW5jbHVkZS1oZWFkZXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NWI1NTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zeXNyb290LWluY2x1ZGUtaGVhZGVycy5wYXRjaApAQCAtMCwwICsxLDM1IEBACitEb250IHNlYXJjaCBoYXJkY29kZWQgcGF0aHMsIHdlIG1pZ2h0IGJlIGRvaW5nIGEgY3Jvc3MtYnVpbGQKK1VzZSAnPScgaW4tZnJvbnQgdG8gbGV0IGNvbXBpbGVyIGFwcGVuZCBzeXNyb290LCBpZiBpdCBjYW4KKworU2hvdWxkIGZpeCB0aGluZ3MgbGlrZQorCitjb25maWd1cmU6Njk3MjogYXJtLWFuZ3N0cm9tLWxpbnV4LWdudWVhYmktZ2NjICAtbWFyY2g9YXJtdjctYSAtbXRodW1iLWludGVyd29yayAtbWZsb2F0LWFiaT1oYXJkIC1tZnB1PW5lb24gLW10dW5lPWNvcnRleC1hOCAtRE5ERUJVRyAtZm5vLWlubGluZSAtRF9fU09GVEZQX18gLS1zeXNyb290PS9idWlsZC92MjAxMy4wNi9idWlsZC90bXAtYW5nc3Ryb21fdjIwMTNfMDYtZWdsaWJjL3N5c3Jvb3RzL2JlYWdsZWJvbmUgLWMgLU8yIC1waXBlIC1nIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAgLUkvdXNyL2luY2x1ZGUvbmN1cnNlc3cgY29uZnRlc3QuYyA+JjUKK2NjMTogd2FybmluZzogaW5jbHVkZSBsb2NhdGlvbiAiL3Vzci9pbmNsdWRlL25jdXJzZXN3IiBpcyB1bnNhZmUgZm9yIGNyb3NzLWNvbXBpbGF0aW9uIFstV3BvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXNdCisKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWoKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisKK0luZGV4OiBQeXRob24tMy4zLjIvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy4zLjIub3JpZy9zZXR1cC5weQkyMDEzLTA3LTMwIDAxOjMwOjQ4LjAwMDAwMDAwMCAtMDcwMAorKysrIFB5dGhvbi0zLjMuMi9zZXR1cC5weQkyMDEzLTA3LTMwIDAxOjQxOjExLjY5Nzg2MjcyMyAtMDcwMAorQEAgLTEyMTAsNyArMTIxMCw3IEBACisgICAgICAgICBwYW5lbF9saWJyYXJ5ID0gJ3BhbmVsJworICAgICAgICAgaWYgY3Vyc2VzX2xpYnJhcnkgPT0gJ25jdXJzZXN3JzoKKyAgICAgICAgICAgICBjdXJzZXNfZGVmaW5lcy5hcHBlbmQoKCdIQVZFX05DVVJTRVNXJywgJzEnKSkKKy0gICAgICAgICAgICBjdXJzZXNfaW5jbHVkZXMuYXBwZW5kKCcvdXNyL2luY2x1ZGUvbmN1cnNlc3cnKQorKyAgICAgICAgICAgIGN1cnNlc19pbmNsdWRlcy5hcHBlbmQoJz0vdXNyL2luY2x1ZGUvbmN1cnNlc3cnKQorICAgICAgICAgICAgICMgQnVnIDE0NjQwNTY6IElmIF9jdXJzZXMuc28gbGlua3Mgd2l0aCBuY3Vyc2VzdywKKyAgICAgICAgICAgICAjIF9jdXJzZXNfcGFuZWwuc28gbXVzdCBsaW5rIHdpdGggcGFuZWx3LgorICAgICAgICAgICAgIHBhbmVsX2xpYnJhcnkgPSAncGFuZWx3JworQEAgLTE4MTksNyArMTgxOSw3IEBACisgICAgICAgICBpZiBob3N0X3BsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgICMgT1MgWCAxMC41IGNvbWVzIHdpdGggbGliZmZpLmR5bGliOyB0aGUgaW5jbHVkZSBmaWxlcyBhcmUKKyAgICAgICAgICAgICAjIGluIC91c3IvaW5jbHVkZS9mZmkKKy0gICAgICAgICAgICBpbmNfZGlycy5hcHBlbmQoJy91c3IvaW5jbHVkZS9mZmknKQorKyAgICAgICAgICAgIGluY19kaXJzLmFwcGVuZCgnPS91c3IvaW5jbHVkZS9mZmknKQorIAorICAgICAgICAgZmZpX2luYyA9IFtzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkxJQkZGSV9JTkNMVURFRElSIildCisgICAgICAgICBpZiBub3QgZmZpX2luYyBvciBmZmlfaW5jWzBdID09ICcnOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvdW5peGNjb21waWxlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3VuaXhjY29tcGlsZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I5MGYxMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3VuaXhjY29tcGlsZXIucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoZSBDQyB2YXJpYWJsZSxzb21ldGltZXMgbGlrZToieDg2XzY0LXBva3ktbGludXgtZ2NjICAgLW02NCAtLXN5c3Jvb3Q9LyR7VE1QRElSfS9zeXNyb290cy9xZW11eDg2LTY0IiwgY29udGFpbnMgb3B0aW9uIGluZm9ybWF0aW9uLiAKK1RoaXMgd2lsbCBsZWFkIHRvIHdyb25nIGNvbXBpbGVyIG5hbWUgInFlbXV4ODYtNjQiIHJhdGhlciB0aGFuICJ4ODZfNjQtcG9reS1saW51eC1nY2MiIHdoZW4gcHl0aG9uIGZpbmRpbmcgdGhlIGNvbXBpbGVyIG5hbWUuCisKK1NlY29uZGx5IGFkZCAtTD08cGF0aD4gdGhpcyB3YXkgbGlua2VyIHdpbGwgYmUgYWJsZSB0byByZXNvbHZlIC91c3IvbGliIHcuci50IHN5c3Jvb3QgYW5kIG5vdAordXNlIGhhcmRjb2RlZCAvdXNyL2xpYiB0byBsb29rIGZvciBsaWJzIHdoaWNoIGlzIHdyb25nIGluIGNyb3NzIGNvbXBpbGUgZW52aXJvbm1lbnQgYW5kIHRoaXMgd2lsbCB3b3JrCitvayBvbiBuYXRpdmUgc3lzdGVtcyB0b28gc2luY2Ugc3lzcm9vdCBmb3IgbmF0aXZlIGNvbXBpbGVycyBpcyAvCisKK1NpZ25lZC1vZmYtYnk6IE1laSBMZWkgPGxlaS5tZWlAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0luZGV4OiBQeXRob24tMy4zLjIvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuMy4yLm9yaWcvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5CTIwMTMtMDUtMTUgMDk6MzI6NTQuMDAwMDAwMDAwIC0wNzAwCisrKysgUHl0aG9uLTMuMy4yL0xpYi9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weQkyMDEzLTA4LTAxIDAwOjU4OjE4LjYyOTA1NjI4NiAtMDcwMAorQEAgLTIwMiw3ICsyMDIsOSBAQAorICAgICAjIGNjb21waWxlci5weS4KKyAKKyAgICAgZGVmIGxpYnJhcnlfZGlyX29wdGlvbihzZWxmLCBkaXIpOgorLSAgICAgICAgcmV0dXJuICItTCIgKyBkaXIKKysgICAgICAgIGlmIGRpci5zdGFydHN3aXRoKCIuIik6CisrICAgICAgICAgICAgcmV0dXJuICItTCIgKyBkaXIKKysgICAgICAgIHJldHVybiAiLUw9IiArIGRpcgorIAorICAgICBkZWYgX2lzX2djYyhzZWxmLCBjb21waWxlcl9uYW1lKToKKyAgICAgICAgIHJldHVybiAiZ2NjIiBpbiBjb21waWxlcl9uYW1lIG9yICJnKysiIGluIGNvbXBpbGVyX25hbWUKK0BAIC0yMjEsNyArMjIxLDcgQEAKKyAgICAgICAgICMgdGhpcyB0aW1lLCB0aGVyZSdzIG5vIHdheSB0byBkZXRlcm1pbmUgdGhpcyBpbmZvcm1hdGlvbiBmcm9tCisgICAgICAgICAjIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgc3RvcmVkIGluIHRoZSBQeXRob24gaW5zdGFsbGF0aW9uLCBzbworICAgICAgICAgIyB3ZSB1c2UgdGhpcyBoYWNrLgorLSAgICAgICAgY29tcGlsZXIgPSBvcy5wYXRoLmJhc2VuYW1lKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiQ0MiKSkKKysgICAgICAgIGNvbXBpbGVyID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJDQyIpCisgICAgICAgICBpZiBzeXMucGxhdGZvcm1bOjZdID09ICJkYXJ3aW4iOgorICAgICAgICAgICAgICMgTWFjT1NYJ3MgbGlua2VyIGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgLVIgZmxhZyBhdCBhbGwKKyAgICAgICAgICAgICByZXR1cm4gIi1MIiArIGRpcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjNfMy40LjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uM18zLjQuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjFkMjc4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjNfMy40LjMuYmIKQEAgLTAsMCArMSwyMjUgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLmluYworCitERVBFTkRTID0gInB5dGhvbjMtbmF0aXZlIGxpYmZmaSBiemlwMiBkYiBnZGJtIG9wZW5zc2wgcmVhZGxpbmUgc3FsaXRlMyB6bGliIHZpcnR1YWwvbGliaW50bCB4eiIKK1BSID0gIiR7SU5DX1BSfS4wIgorUFlUSE9OX01BSk1JTiA9ICIzLjQiCitQWVRIT05fQklOQUJJPSAiJHtQWVRIT05fTUFKTUlOfW0iCitESVNUUk9fU1JDX1VSSSA/PSAiZmlsZTovL3NpdGVjdXN0b21pemUucHkiCitESVNUUk9fU1JDX1VSSV9saW51eHN0ZGJhc2UgPSAiIgorU1JDX1VSSSA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmcvZnRwL3B5dGhvbi8ke1BWfS9QeXRob24tJHtQVn0udGFyLnh6IFwKK2ZpbGU6Ly9weXRob24tY29uZmlnLnBhdGNoIFwKK2ZpbGU6Ly8wMDAtY3Jvc3MtY29tcGlsZS5wYXRjaCBcCitmaWxlOi8vMDIwLWRvbnQtY29tcGlsZS1weXRob24tZmlsZXMucGF0Y2ggXAorZmlsZTovLzAzMC1maXh1cC1pbmNsdWRlLWRpcnMucGF0Y2ggXAorZmlsZTovLzA3MC1kb250LWNsZWFuLWlwa2ctaW5zdGFsbC5wYXRjaCBcCitmaWxlOi8vMDgwLWRpc3R1dGlscy1kb250X2FkanVzdF9maWxlcy5wYXRjaCBcCitmaWxlOi8vMTEwLWVuYWJsZS16bGliLnBhdGNoIFwKK2ZpbGU6Ly8xMzAtcmVhZGxpbmUtc2V0dXAucGF0Y2ggXAorZmlsZTovLzE1MC1maXgtc2V0dXB0ZXJtLnBhdGNoIFwKK2ZpbGU6Ly8wMDAxLWgycHktRml4LWlzc3VlLTEzMDMyLXdoZXJlLWl0LWZhaWxzLXdpdGgtVW5pY29kZURlY28ucGF0Y2ggXAorZmlsZTovL21ha2VyYWNlLnBhdGNoIFwKKyR7RElTVFJPX1NSQ19VUkl9IFwKKyIKKworU1JDX1VSSSArPSAiXAorICAgICAgICAgICAgZmlsZTovLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDQtZGVmYXVsdC1pcy1vcHRpbWl6ZWQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vY2dpX3B5LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ob3N0X2luY2x1ZGVfY29udGFtaW5hdGlvbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcHl0aG9uLTMuMy1tdWx0aWxpYi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc2h1dGlsLWZvbGxvdy1zeW1saW5rLWZpeC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc3lzcm9vdC1pbmNsdWRlLWhlYWRlcnMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3VuaXhjY29tcGlsZXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2F2b2lkLW5jdXJzZXN3LWluY2x1ZGUtcGF0aC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcHl0aG9uMy11c2UtQ1JPU1NQWVRIT05QQVRILWZvci1QWVRIT05fRk9SX0JVSUxELnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9weXRob24zLXNldHVwLnB5LW5vLWhvc3QtaGVhZGVycy1saWJzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zeXNjb25maWcucHktYWRkLV9QWVRIT05fUFJPSkVDVF9TUkMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3NldHVwLnB5LWNoZWNrLWNyb3NzX2NvbXBpbGluZy13aGVuLWdldC1GTEFHUy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc2V0dXAucHktZmluZC1saWJyYXJpZXMtaW4tc3RhZ2luZy1kaXJzLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjdkMDkyZDFiYmE2ZTE3ZjBkOWJkMjFiNDllNDQxZGQ1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI1YjM5NjM1MzM3NjhkNWZjMzI1YTRkN2E2YmQ2ZjY2NjcyNjAwMmQ2OTZmMWQzOTllYzA2YjA0M2VhOTk2YjgiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWRkOThkMDFkNDcxZmFjOGQ4ZGJkZDk3NTIyOWRiYTAzIgorCitTID0gIiR7V09SS0RJUn0vUHl0aG9uLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBtdWx0aWxpYl9oZWFkZXIgcHl0aG9uM25hdGl2ZSBwa2djb25maWcKKworQ09ORklHVVJFT1BUUyArPSAiIC0td2l0aC1zeXN0ZW0tZmZpICIKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgPSAiYWNfY3ZfaGF2ZV9jaGZsYWdzPW5vIFwKKyAgICAgICAgICAgICAgICBhY19jdl9oYXZlX2xjaGZsYWdzPW5vIFwKKyAgICAgICAgICAgICAgICBhY19jdl9oYXZlX2xvbmdfbG9uZ19mb3JtYXQ9eWVzIFwKKyAgICAgICAgICAgICAgICBhY19jdl9idWdneV9nZXRhZGRyaW5mbz1ubyBcCisgICAgICAgICAgICAgICAgYWNfY3ZfZmlsZV9fZGV2X3B0bXg9eWVzIFwKKyAgICAgICAgICAgICAgICBhY19jdl9maWxlX19kZXZfcHRjPW5vIFwKKyIKKyMgVGhlIDMgbGluZXMgYmVsb3cgYXJlIGNvcGllZCBmcm9tIHRoZSBsaWJmZmkgcmVjaXBlLCBjdHlwZXMgc2hpcHMgaXRzIG93biBjb3B5IG9mIHRoZSBsaWJmZmkgc291cmNlcworI1NvbWVob3cgZ2NjIGRvZXNuJ3Qgc2V0IF9fU09GVEZQX18gd2hlbiBwYXNzaW5nIC1tZmxvYXRhYmk9c29mdHAgOigKK1RBUkdFVF9DQ19BUkNIX2FwcGVuZF9hcm12NiA9ICIgLURfX1NPRlRGUF9fIgorVEFSR0VUX0NDX0FSQ0hfYXBwZW5kX2FybXY3YSA9ICIgLURfX1NPRlRGUF9fIgorVEFSR0VUX0NDX0FSQ0ggKz0gIi1ETkRFQlVHIC1mbm8taW5saW5lIgorRVhUUkFfT0VNQUtFICs9ICJDUk9TU19DT01QSUxFPXllcyIKK0VYVFJBX09FQ09ORiArPSAiQ1JPU1NQWVRIT05QQVRIPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2xpYi1keW5sb2FkLyAtLXdpdGhvdXQtZW5zdXJlcGlwIgorCitleHBvcnQgQ1JPU1NfQ09NUElMRSA9ICIke1RBUkdFVF9QUkVGSVh9IgorZXhwb3J0IF9QWVRIT05fUFJPSkVDVF9CQVNFID0gIiR7Qn0iCitleHBvcnQgX1BZVEhPTl9QUk9KRUNUX1NSQyA9ICIke1N9IgorZXhwb3J0IENDU0hBUkVEID0gIi1mUElDIgorCisjIEZpeCBjdHlwZXMgY3Jvc3MgY29tcGlsYXRpb24KK2V4cG9ydCBDUk9TU1BZVEhPTlBBVEggPSAiJHtCfS9idWlsZC9saWIubGludXgtJHtUQVJHRVRfQVJDSH0tJHtQWVRIT05fTUFKTUlOfToke1N9L0xpYjoke1N9L0xpYi9wbGF0LWxpbnV4IgorCisjIE5vIGN0eXBlcyBvcHRpb24gZm9yIHB5dGhvbiAzCitQWVRIT05MU0JPUFRTID0gIiIKKworZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKKwlybSAtZiAke1N9L01ha2VmaWxlLm9yaWcKKwlhdXRvcmVjb25mIC1XY3Jvc3MgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlIC0tZXhjbHVkZT1hdXRvcG9pbnQgLi4vUHl0aG9uLSR7UFZ9L01vZHVsZXMvX2N0eXBlcy9saWJmZmkKK30KKworZG9fY29tcGlsZSgpIHsKKyAgICAgICAgIyByZWdlbmVyYXRlIHBsYXRmb3JtIHNwZWNpZmljIGZpbGVzLCBiZWNhdXNlIHRoZXkgZGVwZW5kIG9uIHN5c3RlbSBoZWFkZXJzCisgICAgICAgIGNkICR7U30vTGliL3BsYXQtbGludXgqCisgICAgICAgIGluY2x1ZGU9JHtTVEFHSU5HX0lOQ0RJUn0gJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3B5dGhvbjMgXAorICAgICAgICAgICAgICAgICR7U30vVG9vbHMvc2NyaXB0cy9oMnB5LnB5IC1pICcodV9sb25nKScgXAorICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L2RsZmNuLmggXAorICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L2xpbnV4L2Nkcm9tLmggXAorICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L25ldGluZXQvaW4uaCBcCisgICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vc3lzL3R5cGVzLmgKKyAgICAgICAgc2VkIC1lICdzLCR7U1RBR0lOR19ESVJfSE9TVH0sLGcnIC1pICoucHkKKyAgICAgICAgY2QgLQorCisKKwkjIHJlbW92ZSBhbnkgYm9ndXMgTERfTElCUkFSWV9QQVRICisJc2VkIC1pIC1lIHMsUlVOU0hBUkVEPS4qLFJVTlNIQVJFRD0sIE1ha2VmaWxlCisKKwlpZiBbICEgLWYgTWFrZWZpbGUub3JpZyBdOyB0aGVuCisJCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZSBNYWtlZmlsZS5vcmlnCisJZmkKKwlzZWQgLWkgLWUgJ3MsXkNPTkZJR1VSRV9MREZMQUdTPS4qLENPTkZJR1VSRV9MREZMQUdTPS1MLiAtTCR7U1RBR0lOR19MSUJESVJ9LGcnIFwKKwkJLWUgJ3MsbGliZGlyPSR7bGliZGlyfSxsaWJkaXI9JHtTVEFHSU5HX0xJQkRJUn0sZycgXAorCQktZSAncyxsaWJleGVjZGlyPSR7bGliZXhlY2Rpcn0sbGliZXhlY2Rpcj0ke1NUQUdJTkdfRElSX0hPU1R9JHtsaWJleGVjZGlyfSxnJyBcCisJCS1lICdzLF5MSUJESVI9LiosTElCRElSPSR7U1RBR0lOR19MSUJESVJ9LGcnIFwKKwkJLWUgJ3MsaW5jbHVkZWRpcj0ke2luY2x1ZGVkaXJ9LGluY2x1ZGVkaXI9JHtTVEFHSU5HX0lOQ0RJUn0sZycgXAorCQktZSAncyxeSU5DTFVERURJUj0uKixJTkNMVURFPSR7U1RBR0lOR19JTkNESVJ9LGcnIFwKKwkJLWUgJ3MsXkNPTkZJTkNMVURFRElSPS4qLENPTkZJTkNMVURFPSR7U1RBR0lOR19JTkNESVJ9LGcnIFwKKwkJTWFrZWZpbGUKKwkjIHNhdmUgY29weSBvZiBpdCBub3csIGJlY2F1c2UgaWYgd2UgZG8gaXQgaW4gZG9faW5zdGFsbCBhbmQgCisJIyB0aGVuIGNhbGwgZG9faW5zdGFsbCB0d2ljZSB3ZSBnZXQgTWFrZWZpbGUub3JpZyA9PSBNYWtlZmlsZS5zeXNyb290CisJaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlIE1ha2VmaWxlLnN5c3Jvb3QKKworCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3BnZW4gXAorCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9weXRob24zIFwKKwkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKKwkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorCQlCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKwkJTElCPSR7YmFzZWxpYn0gXAorCQlBUkNIPSR7VEFSR0VUX0FSQ0h9IFwKKwkJT1BUPSIke0NGTEFHU30iIGxpYnB5dGhvbjMuc28KKworCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3BnZW4gXAorCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9weXRob24zIFwKKwkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisJCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAorCQlCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKwkJTElCPSR7YmFzZWxpYn0gXAorCQlBUkNIPSR7VEFSR0VUX0FSQ0h9IFwKKwkJT1BUPSIke0NGTEFHU30iCit9CisKK2RvX2luc3RhbGwoKSB7CisJIyBtYWtlIGluc3RhbGwgbmVlZHMgdGhlIG9yaWdpbmFsIE1ha2VmaWxlLCBvciBvdGhlcndpc2UgdGhlIGluY2x1ZXMgd291bGQKKwkjIGdvIHRvICR7RH0ke1NUQUdJTkcuLi59Ly4uLgorCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZS5vcmlnIE1ha2VmaWxlCisKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnCisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnCisKKwkjIHJlcnVuIHRoZSBidWlsZCBvbmNlIGFnYWluIHdpdGggb3JpZ2luYWwgbWFrZWZpbGUgdGhpcyB0aW1lCisJIyBydW4gaW5zdGFsbCBpbiBhIHNlcGFyYXRlIHN0ZXAgdG8gYXZvaWQgY29tcGlsZS9pbnN0YWxsIHJhY2UKKwlvZV9ydW5tYWtlIEhPU1RQR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9wZ2VuIFwKKwkJSE9TVFBZVEhPTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcHl0aG9uMyBcCisJCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKwkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKKwkJQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisJCUxJQj0ke2Jhc2VsaWJ9IFwKKwkJQVJDSD0ke1RBUkdFVF9BUkNIfSBcCisJCURFU1RESVI9JHtEfSBMSUJESVI9JHtsaWJkaXJ9CisJCisJb2VfcnVubWFrZSBIT1NUUEdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcGdlbiBcCisJCUhPU1RQWVRIT049JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3B5dGhvbjMgXAorCQlTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisJCVNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKwkJU1RBR0lOR19CQVNFTElCRElSPSR7U1RBR0lOR19CQVNFTElCRElSfSBcCisJCUJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorCQlMSUI9JHtiYXNlbGlifSBcCisJCUFSQ0g9JHtUQVJHRVRfQVJDSH0gXAorCQlERVNURElSPSR7RH0gTElCRElSPSR7bGliZGlyfSBpbnN0YWxsCisKKwkjIGF2b2lkIGNvbmZsaWN0IHdpdGggMnRvMyBmcm9tIFB5dGhvbiAyCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vMnRvMworCisJaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlLnN5c3Jvb3QgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcvTWFrZWZpbGUKKworCWlmIFsgLWUgJHtXT1JLRElSfS9zaXRlY3VzdG9taXplLnB5IF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2l0ZWN1c3RvbWl6ZS5weSAke0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59CisJZmkKKworCW9lX211bHRpbGliX2hlYWRlciBweXRob24ke1BZVEhPTl9CSU5BQkl9L3B5Y29uZmlnLmgKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrICgpIHsKKwljcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0gVEVSTUlORk9fRElSUz0nJHtzeXNjb25mZGlyfS90ZXJtaW5mbzovZXRjL3Rlcm1pbmZvOi91c3Ivc2hhcmUvdGVybWluZm86L3Vzci9zaGFyZS9taXNjL3Rlcm1pbmZvOi9saWIvdGVybWluZm8nCit9CisKK1NTVEFURV9TQ0FOX0ZJTEVTICs9ICJNYWtlZmlsZSIKK1BBQ0tBR0VfUFJFUFJPQ0VTU19GVU5DUyArPSAicHlfcGFja2FnZV9wcmVwcm9jZXNzIgorCitweV9wYWNrYWdlX3ByZXByb2Nlc3MgKCkgeworCSMgY29weSBiYWNrIHRoZSBvbGQgTWFrZWZpbGUgdG8gZml4IHRhcmdldCBwYWNrYWdlCisJaW5zdGFsbCAtbSAwNjQ0ICR7Qn0vTWFrZWZpbGUub3JpZyAke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy9NYWtlZmlsZQorCSMgUmVtb3ZlIHJlZmVyZW5jZXMgdG8gYnVpbGRtYWNoaW5lIHBhdGhzIGluIHRhcmdldCBNYWtlZmlsZSBhbmQgX3N5c2NvbmZpZ2RhdGEKKwlzZWQgLWkgLWUgJ3M6LS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfTo6ZycgLWUgczonLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0nOjpnIFwKKwkJJHtQS0dEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcvTWFrZWZpbGUgXAorCQkke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L19zeXNjb25maWdkYXRhLnB5Cit9CisKK3JlcXVpcmUgcHl0aG9uLSR7UFlUSE9OX01BSk1JTn0tbWFuaWZlc3QuaW5jCisKKyMgbWFudWFsIGRlcGVuZGVuY3kgYWRkaXRpb25zCitSUFJPVklERVNfJHtQTn0tY29yZSA9ICIke1BOfSIKK1JSRUNPTU1FTkRTXyR7UE59LWNvcmUgPSAiJHtQTn0tcmVhZGxpbmUiCitSUkVDT01NRU5EU18ke1BOfS1jcnlwdCA9ICJvcGVuc3NsIgorUlJFQ09NTUVORFNfJHtQTn0tY3J5cHRfY2xhc3MtbmF0aXZlc2RrID0gIm5hdGl2ZXNkay1vcGVuc3NsIgorCitGSUxFU18ke1BOfS0ydG8zICs9ICIke2JpbmRpcn0vMnRvMy0ke1BZVEhPTl9NQUpNSU59IgorRklMRVNfJHtQTn0tcHlkb2MgKz0gIiR7YmluZGlyfS9weWRvYyR7UFlUSE9OX01BSk1JTn0gJHtiaW5kaXJ9L3B5ZG9jMyIKK0ZJTEVTXyR7UE59LWlkbGUgKz0gIiR7YmluZGlyfS9pZGxlMyAke2JpbmRpcn0vaWRsZSR7UFlUSE9OX01BSk1JTn0iCisKK1BBQ0tBR0VTID0rICIke1BOfS1weXZlbnYiCitGSUxFU18ke1BOfS1weXZlbnYgKz0gIiR7YmluZGlyfS9weXZlbnYtJHtQWVRIT05fTUFKTUlOfSAke2JpbmRpcn0vcHl2ZW52IgorCisjIHBhY2thZ2UgbGlicHl0aG9uMworUEFDS0FHRVMgPSsgImxpYnB5dGhvbjMgbGlicHl0aG9uMy1zdGF0aWNkZXYiCitGSUxFU19saWJweXRob24zID0gIiR7bGliZGlyfS9saWJweXRob24qLnNvLioiCitGSUxFU19saWJweXRob24zLXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnLSR7UFlUSE9OX0JJTkFCSX0vbGlicHl0aG9uJHtQWVRIT05fQklOQUJJfS5hIgorCisjIGNhdGNoIGRlYnVnIGV4dGVuc2lvbnMgKGlzbid0IHRoYXQgYWxyZWFkeSBpbiBweXRob24tY29yZS1kYmc/KQorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9saWItZHlubG9hZC8uZGVidWciCisKKyMgY2F0Y2ggYWxsIHRoZSByZXN0ICh1bnNvcnRlZCkKK1BBQ0tBR0VTICs9ICIke1BOfS1taXNjIgorUkRFUEVORFNfJHtQTn0tbWlzYyArPSAiJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LW1pc2MgPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0iCisKKyMgY2F0Y2ggbWFucGFnZQorUEFDS0FHRVMgKz0gIiR7UE59LW1hbiIKK0ZJTEVTXyR7UE59LW1hbiA9ICIke2RhdGFkaXJ9L21hbiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uXzIuNy45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbl8yLjcuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTQ1NTc3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbl8yLjcuOS5iYgpAQCAtMCwwICsxLDE4MCBAQAorcmVxdWlyZSBweXRob24uaW5jCitERVBFTkRTID0gInB5dGhvbi1uYXRpdmUgbGliZmZpIGJ6aXAyIGRiIGdkYm0gb3BlbnNzbCByZWFkbGluZSBzcWxpdGUzIHpsaWIiCitQUiA9ICIke0lOQ19QUn0iCisKK0RJU1RST19TUkNfVVJJID89ICJmaWxlOi8vc2l0ZWN1c3RvbWl6ZS5weSIKK0RJU1RST19TUkNfVVJJX2xpbnV4c3RkYmFzZSA9ICIiCitTUkNfVVJJICs9ICJcCisgIGZpbGU6Ly8wMS11c2UtcHJvcGVyLXRvb2xzLWZvci1jcm9zcy1idWlsZC5wYXRjaCBcCisgIGZpbGU6Ly8wMy1maXgtdGtpbnRlci1kZXRlY3Rpb24ucGF0Y2ggXAorICBmaWxlOi8vMDYtYXZvaWRfdXNyX2xpYl90ZXJtY2FwX3BhdGhfaW5fbGlua2luZy5wYXRjaCBcCisgICR7RElTVFJPX1NSQ19VUkl9IFwKKyAgZmlsZTovL211bHRpbGliLnBhdGNoIFwKKyAgZmlsZTovL2NnaV9weS5wYXRjaCBcCisgIGZpbGU6Ly9zZXR1cF9weV9za2lwX2Nyb3NzX2ltcG9ydF9jaGVjay5wYXRjaCBcCisgIGZpbGU6Ly9hZGQtbWQ1bW9kdWxlLXN1cHBvcnQucGF0Y2ggXAorICBmaWxlOi8vaG9zdF9pbmNsdWRlX2NvbnRhbWluYXRpb24ucGF0Y2ggXAorICBmaWxlOi8vZml4X2Zvcl91c2luZ19kaWZmZXJlbnRfbGliZGlyLnBhdGNoIFwKKyAgZmlsZTovL3NldHVwdHdlYWtzLnBhdGNoIFwKKyAgZmlsZTovL2NoZWNrLWlmLXRhcmdldC1pcy02NGItbm90LWhvc3QucGF0Y2ggXAorICBmaWxlOi8vc2VhcmNoX2RiX2hfaW5faW5jX2RpcnNfYW5kX2F2b2lkX3dhcm5pbmcucGF0Y2ggXAorICBmaWxlOi8vYXZvaWRfd2FybmluZ19hYm91dF90a2ludGVyLnBhdGNoIFwKKyAgZmlsZTovL2F2b2lkX3dhcm5pbmdfZm9yX3N1bm9zX3NwZWNpZmljX21vZHVsZS5wYXRjaCBcCisgIGZpbGU6Ly9weXRob24tMi43LjMtcmVtb3ZlLWJzZGItcnBhdGgucGF0Y2ggXAorICBmaWxlOi8vZml4LW1ha2VmaWxlLWZvci1wdGVzdC5wYXRjaCBcCisgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICBmaWxlOi8vcGFyYWxsZWwtbWFrZWluc3QtY3JlYXRlLWJpbmRpci5wYXRjaCBcCisgIGZpbGU6Ly91c2Vfc3lzcm9vdF9uY3Vyc2VzX2luc3RlYWRfb2ZfaG9zdC5wYXRjaCBcCisgIGZpbGU6Ly9hdm9pZF9wYXJhbGxlbF9tYWtlX3JhY2VzX29uX3BnZW4ucGF0Y2ggXAorIgorCitTID0gIiR7V09SS0RJUn0vUHl0aG9uLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBtdWx0aWxpYl9oZWFkZXIgcHl0aG9uLWRpciBweXRob25uYXRpdmUKKworQ09ORklHVVJFT1BUUyArPSAiIC0td2l0aC1zeXN0ZW0tZmZpICIKKworIyBUaGUgMyBsaW5lcyBiZWxvdyBhcmUgY29waWVkIGZyb20gdGhlIGxpYmZmaSByZWNpcGUsIGN0eXBlcyBzaGlwcyBpdHMgb3duIGNvcHkgb2YgdGhlIGxpYmZmaSBzb3VyY2VzCisjU29tZWhvdyBnY2MgZG9lc24ndCBzZXQgX19TT0ZURlBfXyB3aGVuIHBhc3NpbmcgLW1mbG9hdGFiaT1zb2Z0cCA6KAorVEFSR0VUX0NDX0FSQ0hfYXBwZW5kX2FybXY2ID0gIiAtRF9fU09GVEZQX18iCitUQVJHRVRfQ0NfQVJDSF9hcHBlbmRfYXJtdjdhID0gIiAtRF9fU09GVEZQX18iCisKKyMgVGhlIGZvbGxvd2luZyBpcyBhIGhhY2sgdW50aWwgd2UgZHJvcCBhY19jdl9zaXplb2Zfb2ZmX3QgZnJvbSBzaXRlIGZpbGVzCitFWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGFyZ2VmaWxlJywgJ2FjX2N2X3NpemVvZl9vZmZfdD04JywgJycsIGQpfSBhY19jdl9maWxlX19kZXZfcHRteD15ZXMgYWNfY3ZfZmlsZV9fZGV2X3B0Yz1ubyIKKworZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKKwlybSAtZiAke1N9L01ha2VmaWxlLm9yaWcKKyAgICAgICAgYXV0b3JlY29uZiAtV2Nyb3NzIC0tdmVyYm9zZSAtLWluc3RhbGwgLS1mb3JjZSAtLWV4Y2x1ZGU9YXV0b3BvaW50IC4uL1B5dGhvbi0ke1BWfS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpCit9CisKK2RvX2NvbXBpbGUoKSB7CisgICAgICAgICMgcmVnZW5lcmF0ZSBwbGF0Zm9ybSBzcGVjaWZpYyBmaWxlcywgYmVjYXVzZSB0aGV5IGRlcGVuZCBvbiBzeXN0ZW0gaGVhZGVycworICAgICAgICBjZCAke1N9L0xpYi9wbGF0LWxpbnV4MgorICAgICAgICBpbmNsdWRlPSR7U1RBR0lOR19JTkNESVJ9ICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbiBcCisgICAgICAgICAgICAgICAgJHtTfS9Ub29scy9zY3JpcHRzL2gycHkucHkgLWkgJyh1X2xvbmcpJyBcCisgICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vZGxmY24uaCBcCisgICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vbGludXgvY2Ryb20uaCBcCisgICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vbmV0aW5ldC9pbi5oIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9zeXMvdHlwZXMuaAorICAgICAgICBzZWQgLWUgJ3MsJHtTVEFHSU5HX0RJUl9IT1NUfSwsZycgLWkgKi5weQorICAgICAgICBjZCAtCisKKwkjIHJlbW92ZSBhbnkgYm9ndXMgTERfTElCUkFSWV9QQVRICisJc2VkIC1pIC1lIHMsUlVOU0hBUkVEPS4qLFJVTlNIQVJFRD0sIE1ha2VmaWxlCisKKwlpZiBbICEgLWYgTWFrZWZpbGUub3JpZyBdOyB0aGVuCisJCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZSBNYWtlZmlsZS5vcmlnCisJZmkKKwlzZWQgLWkgLWUgJ3MjXkxERkxBR1M9LiojTERGTEFHUz0ke0xERkxBR1N9IC1MLiAtTCR7U1RBR0lOR19MSUJESVJ9I2cnIFwKKwkJLWUgJ3MsbGliZGlyPSR7bGliZGlyfSxsaWJkaXI9JHtTVEFHSU5HX0xJQkRJUn0sZycgXAorCQktZSAncyxsaWJleGVjZGlyPSR7bGliZXhlY2Rpcn0sbGliZXhlY2Rpcj0ke1NUQUdJTkdfRElSX0hPU1R9JHtsaWJleGVjZGlyfSxnJyBcCisJCS1lICdzLF5MSUJESVI9LiosTElCRElSPSR7U1RBR0lOR19MSUJESVJ9LGcnIFwKKwkJLWUgJ3MsaW5jbHVkZWRpcj0ke2luY2x1ZGVkaXJ9LGluY2x1ZGVkaXI9JHtTVEFHSU5HX0lOQ0RJUn0sZycgXAorCQktZSAncyxeSU5DTFVERURJUj0uKixJTkNMVURFPSR7U1RBR0lOR19JTkNESVJ9LGcnIFwKKwkJLWUgJ3MsXkNPTkZJTkNMVURFRElSPS4qLENPTkZJTkNMVURFPSR7U1RBR0lOR19JTkNESVJ9LGcnIFwKKwkJTWFrZWZpbGUKKwkjIHNhdmUgY29weSBvZiBpdCBub3csIGJlY2F1c2UgaWYgd2UgZG8gaXQgaW4gZG9faW5zdGFsbCBhbmQgCisJIyB0aGVuIGNhbGwgZG9faW5zdGFsbCB0d2ljZSB3ZSBnZXQgTWFrZWZpbGUub3JpZyA9PSBNYWtlZmlsZS5zeXNyb290CisJaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlIE1ha2VmaWxlLnN5c3Jvb3QKKworCWV4cG9ydCBDUk9TU19DT01QSUxFPSIke1RBUkdFVF9QUkVGSVh9IgorCWV4cG9ydCBQWVRIT05CVUlMRERJUj0iJHtCfSIKKworCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcGdlbiBcCisJCUhPU1RQWVRIT049JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uIFwKKwkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisJCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAorCQlCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKwkJT1BUPSIke0NGTEFHU30iCit9CisKK2RvX2luc3RhbGwoKSB7CisJIyBtYWtlIGluc3RhbGwgbmVlZHMgdGhlIG9yaWdpbmFsIE1ha2VmaWxlLCBvciBvdGhlcndpc2UgdGhlIGluY2x1ZXMgd291bGQKKwkjIGdvIHRvICR7RH0ke1NUQUdJTkcuLi59Ly4uLgorCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZS5vcmlnIE1ha2VmaWxlCisKKwlleHBvcnQgQ1JPU1NfQ09NUElMRT0iJHtUQVJHRVRfUFJFRklYfSIKKwlleHBvcnQgUFlUSE9OQlVJTERESVI9IiR7Qn0iCisKKwkjIEFmdGVyIHN3aXp6bGluZyB0aGUgbWFrZWZpbGUsIHdlIG5lZWQgdG8gcnVuIHRoZSBidWlsZCBhZ2Fpbi4KKwkjIGluc3RhbGwgY2FuIHJhY2Ugd2l0aCB0aGUgYnVpbGQgc28gd2UgaGF2ZSB0byBydW4gdGhpcyBmaXJzdCwgdGhlbiBpbnN0YWxsCisJb2VfcnVubWFrZSBIT1NUUEdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9wZ2VuIFwKKwkJSE9TVFBZVEhPTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9weXRob24gXAorCQlDUk9TU1BZVEhPTlBBVEg9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vbGliLWR5bmxvYWQvIFwKKwkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisJCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAorCQlCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKwkJREVTVERJUj0ke0R9IExJQkRJUj0ke2xpYmRpcn0KKwkKKwlvZV9ydW5tYWtlIEhPU1RQR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3BnZW4gXAorCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbiBcCisJCUNST1NTUFlUSE9OUEFUSD0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9saWItZHlubG9hZC8gXAorCQlTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisJCVNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKwkJU1RBR0lOR19CQVNFTElCRElSPSR7U1RBR0lOR19CQVNFTElCRElSfSBcCisJCUJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorCQlERVNURElSPSR7RH0gTElCRElSPSR7bGliZGlyfSBpbnN0YWxsCisKKwlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUuc3lzcm9vdCAke0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy9NYWtlZmlsZQorCisJaWYgWyAtZSAke1dPUktESVJ9L3NpdGVjdXN0b21pemUucHkgXTsgdGhlbgorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zaXRlY3VzdG9taXplLnB5ICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0KKwlmaQorCisJb2VfbXVsdGlsaWJfaGVhZGVyIHB5dGhvbiR7UFlUSE9OX01BSk1JTn0vcHljb25maWcuaAorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vcHl0aG9uMi43IFRFUk1JTkZPX0RJUlM9JyR7c3lzY29uZmRpcn0vdGVybWluZm86L2V0Yy90ZXJtaW5mbzovdXNyL3NoYXJlL3Rlcm1pbmZvOi91c3Ivc2hhcmUvbWlzYy90ZXJtaW5mbzovbGliL3Rlcm1pbmZvJworfQorCitTU1RBVEVfU0NBTl9GSUxFUyArPSAiTWFrZWZpbGUiCitQQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1MgKz0gInB5X3BhY2thZ2VfcHJlcHJvY2VzcyIKKworcHlfcGFja2FnZV9wcmVwcm9jZXNzICgpIHsKKwkjIGNvcHkgYmFjayB0aGUgb2xkIE1ha2VmaWxlIHRvIGZpeCB0YXJnZXQgcGFja2FnZQorCWluc3RhbGwgLW0gMDY0NCAke0J9L01ha2VmaWxlLm9yaWcgJHtQS0dEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcvTWFrZWZpbGUKKworCSMgUmVtb3ZlIHJlZmVyZW5jZXMgdG8gYnVpbGRtYWNoaW5lIHBhdGhzIGluIHRhcmdldCBNYWtlZmlsZSBhbmQgX3N5c2NvbmZpZ2RhdGEKKwlzZWQgLWkgLWUgJ3M6LS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfTo6ZycgLWUgczonLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0nOjpnIFwKKwkJJHtQS0dEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcvTWFrZWZpbGUgXAorCQkke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L19zeXNjb25maWdkYXRhLnB5Cit9CisKK3JlcXVpcmUgcHl0aG9uLSR7UFlUSE9OX01BSk1JTn0tbWFuaWZlc3QuaW5jCisKKyMgbWFudWFsIGRlcGVuZGVuY3kgYWRkaXRpb25zCitSUFJPVklERVNfJHtQTn0tY29yZSA9ICIke1BOfSIKK1JSRUNPTU1FTkRTXyR7UE59LWNvcmUgPSAiJHtQTn0tcmVhZGxpbmUiCitSUkVDT01NRU5EU18ke1BOfS1jb3JlX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiIG5hdGl2ZXNkay1weXRob24tbW9kdWxlcyIKK1JSRUNPTU1FTkRTXyR7UE59LWNyeXB0ID0gIm9wZW5zc2wiCisKKyMgcGFja2FnZSBsaWJweXRob24yCitQQUNLQUdFUyA9KyAibGliJHtCUE59MiIKK0ZJTEVTX2xpYiR7QlBOfTIgPSAiJHtsaWJkaXJ9L2xpYnB5dGhvbiouc28uKiIKKworIyBjYXRjaCBkZWJ1ZyBleHRlbnNpb25zIChpc24ndCB0aGF0IGFscmVhZHkgaW4gcHl0aG9uLWNvcmUtZGJnPykKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vbGliLWR5bmxvYWQvLmRlYnVnIgorCisjIGNhdGNoIGFsbCB0aGUgcmVzdCAodW5zb3J0ZWQpCitQQUNLQUdFUyArPSAiJHtQTn0tbWlzYyIKK0ZJTEVTXyR7UE59LW1pc2MgPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0iCitSREVQRU5EU18ke1BOfS1wdGVzdCA9ICIke1BOfS1tb2R1bGVzICR7UE59LW1pc2MiCisjaW5oZXJpdCBwdGVzdCBhZnRlciAicmVxdWlyZSBweXRob24tJHtQWVRIT05fTUFKTUlOfS1tYW5pZmVzdC5pbmMiIHNvIFBBQ0tBR0VTIGRvZXNuJ3QgZ2V0IG92ZXJ3cml0dGVuCitpbmhlcml0IHB0ZXN0CisKKyMgVGhpcyBtdXN0IGNvbWUgYWZ0ZXIgaW5oZXJpdCBwdGVzdCBmb3IgdGhlIG92ZXJyaWRlIHRvIHRha2UgZWZmZWN0Citkb19pbnN0YWxsX3B0ZXN0KCkgeworCWNwICR7Qn0vTWFrZWZpbGUgJHtEfSR7UFRFU1RfUEFUSH0KKwlzZWQgLWUgczpMSUJESVIvcHl0aG9uL3B0ZXN0OiR7UFRFU1RfUEFUSH06ZyBcCisJIC1lIHM6TElCRElSOiR7bGliZGlyfTpnIFwKKwkgLWkgJHtEfSR7UFRFU1RfUEFUSH0vcnVuLXB0ZXN0Cit9CisKKyMgY2F0Y2ggbWFucGFnZQorUEFDS0FHRVMgKz0gIiR7UE59LW1hbiIKK0ZJTEVTXyR7UE59LW1hbiA9ICIke2RhdGFkaXJ9L21hbiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L25hdGl2ZXNkay1xZW11LWhlbHBlcl8xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L25hdGl2ZXNkay1xZW11LWhlbHBlcl8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFkMWM1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvbmF0aXZlc2RrLXFlbXUtaGVscGVyXzEuMC5iYgpAQCAtMCwwICsxLDQ3IEBACitTVU1NQVJZID0gIlFlbXUgaGVscGVyIHNjcmlwdHMiCitMSUNFTlNFID0gIkdQTHYyIgorUkRFUEVORFNfJHtQTn0gPSAibmF0aXZlc2RrLXFlbXUiCitQUiA9ICJyOSIKKworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke1dPUktESVJ9L3R1bmN0bC5jO2VuZGxpbmU9NDttZDU9ZmYzYTA5OTk2YmM1ZmZmNmJjNWQ0ZTBiNGMyOGY5OTkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11O2VuZGxpbmU9MTg7bWQ1PTc3ZmJlNDQyYTg4YjFiY2RjMjljM2JhNjc3MzNiMjFiIgorCisKK1NSQ19VUkkgPSAiZmlsZTovLyR7Q09SRUJBU0V9L3NjcmlwdHMvcnVucWVtdSBcCisgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9zY3JpcHRzL3J1bnFlbXUtaW50ZXJuYWwgXAorICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11LWFkZHB0YWJsZTJpbWFnZSBcCisgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9zY3JpcHRzL3J1bnFlbXUtZ2VuLXRhcGRldnMgXAorICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11LWlmdXAgXAorICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11LWlmZG93biBcCisgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9zY3JpcHRzL29lLWZpbmQtbmF0aXZlLXN5c3Jvb3QgXAorICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11LWV4dHJhY3Qtc2RrIFwKKyAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L3NjcmlwdHMvcnVucWVtdS1leHBvcnQtcm9vdGZzIFwKKyAgICAgICAgICAgZmlsZTovL3R1bmN0bC5jIFwKKyAgICAgICAgICAgZmlsZTovL3JhdzJmbGFzaC5jIFwKKyAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfSIKKworaW5oZXJpdCBuYXRpdmVzZGsKKworZG9fY29tcGlsZSgpIHsKKwkke0NDfSB0dW5jdGwuYyAtbyB0dW5jdGwKKwkke0NDfSByYXcyZmxhc2guYyAtbyByYXcyZmxhc2guc3BpdHoKKwkke0NDfSByYXcyZmxhc2guYyAtbyBmbGFzaDJyYXcuc3BpdHogLURmbGFzaDJyYXcKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfSR7Q09SRUJBU0V9L3NjcmlwdHMvb2UtKiAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9JHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11KiAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgdHVuY3RsICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCByYXcyZmxhc2guc3BpdHogJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIGZsYXNoMnJhdy5zcGl0eiAke0R9JHtiaW5kaXJ9LworCWxuIC1mcyByYXcyZmxhc2guc3BpdHogJHtEfSR7YmluZGlyfS9yYXcyZmxhc2guYWtpdGEKKwlsbiAtZnMgcmF3MmZsYXNoLnNwaXR6ICR7RH0ke2JpbmRpcn0vcmF3MmZsYXNoLmJvcnpvaQorCWxuIC1mcyByYXcyZmxhc2guc3BpdHogJHtEfSR7YmluZGlyfS9yYXcyZmxhc2gudGVycmllcgorCWxuIC1mcyBmbGFzaDJyYXcuc3BpdHogJHtEfSR7YmluZGlyfS9mbGFzaDJyYXcuYWtpdGEKKwlsbiAtZnMgZmxhc2gycmF3LnNwaXR6ICR7RH0ke2JpbmRpcn0vZmxhc2gycmF3LmJvcnpvaQorCWxuIC1mcyBmbGFzaDJyYXcuc3BpdHogJHtEfSR7YmluZGlyfS9mbGFzaDJyYXcudGVycmllcgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LWhlbHBlci1uYXRpdmVfMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LWhlbHBlci1uYXRpdmVfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMjdjNGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtaGVscGVyLW5hdGl2ZV8xLjAuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJIZWxwZXIgdXRpbGl0aWVzIG5lZWRlZCBieSB0aGUgcnVucWVtdSBzY3JpcHQiCitMSUNFTlNFID0gIkdQTHYyIgorUkRFUEVORFNfJHtQTn0gPSAicWVtdS1uYXRpdmUiCitQUiA9ICJyMSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtXT1JLRElSfS90dW5jdGwuYztlbmRsaW5lPTQ7bWQ1PWZmM2EwOTk5NmJjNWZmZjZiYzVkNGUwYjRjMjhmOTk5IgorCitTUkNfVVJJID0gImZpbGU6Ly90dW5jdGwuYyIKKworUyA9ICIke1dPUktESVJ9IgorCitpbmhlcml0IG5hdGl2ZQorCitkb19jb21waWxlKCkgeworCSR7Q0N9IHR1bmN0bC5jIC1vIHR1bmN0bAorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgdHVuY3RsICR7RH0ke2JpbmRpcn0vCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtaGVscGVyL3JhdzJmbGFzaC5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LWhlbHBlci9yYXcyZmxhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWZhZjYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LWhlbHBlci9yYXcyZmxhc2guYwpAQCAtMCwwICsxLDM3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcGVuZWRIYW5kIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgR05VIEdQTCB2Mi4KKyAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNkZWZpbmUgVEZSKF8pCQlfCisjZGVmaW5lIFZFUkJPU0UKKyNkZWZpbmUgUEJBUl9MRU4JNDAKKworI2RlZmluZSBQQVJUSVRJT05fU1RBUlQJMHgwMDcwMDAwMAorCitzdGF0aWMgY29uc3QgaW50IGVjY19wb3M4W10gPSB7CisJMHgwLCAweDEsIDB4MiwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgZWNjX3BvczE2W10gPSB7CisJMHgwLCAweDEsIDB4MiwgMHgzLCAweDYsIDB4NywKK307CisKK3N0YXRpYyBjb25zdCBpbnQgZWNjX3BvczY0W10gPSB7CisJMHgyOCwgMHgyOSwgMHgyYSwgMHgyYiwgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwKKwkweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LAorCTB4MzgsIDB4MzksIDB4M2EsIDB4M2IsIDB4M2MsIDB4M2QsIDB4M2UsIDB4M2YsCit9OworCitzdGF0aWMgY29uc3QgaW50IGVjY19ha2l0YVtdID0geworCTB4MDUsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDYsIDB4MDcsIDB4MTUsIDB4MTEsCisJMHgxMiwgMHgxMywgMHgxNiwgMHgxNywgMHgyNSwgMHgyMSwgMHgyMiwgMHgyMywKKwkweDI2LCAweDI3LCAweDM1LCAweDMxLCAweDMyLCAweDMzLCAweDM2LCAweDM3LAorfTsKKworc3RydWN0IGpmZnNfbWFya2VyX3MgeworCWludCBwb3M7CisJdWludDhfdCB2YWx1ZTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyBmcmVlX3BvczhbXSA9IHsKKwl7IDB4MDMsIDB4ZmYgfSwgeyAweDA0LCAweGZmIH0sIHsgMHgwNiwgMHg4NSB9LCB7IDB4MDcsIDB4MTkgfSwKKwl7IC0xIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGpmZnNfbWFya2VyX3MgZnJlZV9wb3MxNltdID0geworCXsgMHgwOCwgMHg4NSB9LCB7IDB4MDksIDB4MTkgfSwgeyAweDBhLCAweDAzIH0sIHsgMHgwYiwgMHgyMCB9LAorCXsgMHgwYywgMHgwOCB9LCB7IDB4MGQsIDB4MDAgfSwgeyAweDBlLCAweDAwIH0sIHsgMHgwZiwgMHgwMCB9LAorCXsgLTEgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyBmcmVlX3BvczY0W10gPSB7CisJeyAweDAyLCAweGZmIH0sIHsgMHgwMywgMHhmZiB9LCB7IDB4MDQsIDB4ZmYgfSwgeyAweDA1LCAweGZmIH0sCisJeyAweDA2LCAweGZmIH0sIHsgMHgwNywgMHhmZiB9LCB7IDB4MDgsIDB4ZmYgfSwgeyAweDA5LCAweGZmIH0sCisJeyAweDBhLCAweGZmIH0sIHsgMHgwYiwgMHhmZiB9LCB7IDB4MGMsIDB4ZmYgfSwgeyAweDBkLCAweGZmIH0sCisJeyAweDBlLCAweGZmIH0sIHsgMHgwZiwgMHhmZiB9LCB7IDB4MTAsIDB4ODUgfSwgeyAweDExLCAweDE5IH0sCisJeyAweDEyLCAweDAzIH0sIHsgMHgxMywgMHgyMCB9LCB7IDB4MTQsIDB4MDggfSwgeyAweDE1LCAweDAwIH0sCisJeyAweDE2LCAweDAwIH0sIHsgMHgxNywgMHgwMCB9LCB7IDB4MTgsIDB4ZmYgfSwgeyAweDE5LCAweGZmIH0sCisJeyAweDFhLCAweGZmIH0sIHsgMHgxYiwgMHhmZiB9LCB7IDB4MWMsIDB4ZmYgfSwgeyAweDFkLCAweGZmIH0sCisJeyAweDFlLCAweGZmIH0sIHsgMHgxZiwgMHhmZiB9LCB7IDB4MjAsIDB4ZmYgfSwgeyAweDIxLCAweGZmIH0sCisJeyAweDIyLCAweGZmIH0sIHsgMHgyMywgMHhmZiB9LCB7IDB4MjQsIDB4ZmYgfSwgeyAweDI1LCAweGZmIH0sCisJeyAweDI2LCAweGZmIH0sIHsgMHgyNywgMHhmZiB9LAorCXsgLTEgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyBmcmVlX2FraXRhW10gPSB7CisJeyAweDA4LCAweDg1IH0sIHsgMHgwOSwgMHgxOSB9LCB7IDB4MGEsIDB4MDMgfSwgeyAweDBiLCAweDIwIH0sCisJeyAweDBjLCAweDA4IH0sIHsgMHgwZCwgMHgwMCB9LCB7IDB4MGUsIDB4MDAgfSwgeyAweDBmLCAweDAwIH0sCisJeyAweDEwLCAweGZmIH0sCisJeyAtMSB9LAorfTsKKworI2RlZmluZSBMRU4oYXJyYXkpCShzaXplb2YoYXJyYXkpIC8gc2l6ZW9mKCphcnJheSkpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWNjX3N0eWxlX3MgeworCWludCBwYWdlX3NpemU7CisJaW50IG9vYl9zaXplOworCWludCBlY2NieXRlczsKKwlpbnQgZWNjc2l6ZTsKKwljb25zdCBpbnQgKmVjY3BvczsKKwlpbnQgcm9tc2l6ZTsKKwljb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyAqZnJlZXBvczsKK30gc3BpdHogPSB7CisJMHgyMDAsIDB4MTAsIDB4MTAwLCBMRU4oZWNjX3BvczE2KSwgZWNjX3BvczE2LCAweDAxMDAwMDAwLCBmcmVlX3BvczE2Cit9LCBha2l0YSA9IHsKKwkweDgwMCwgMHg0MCwgMHgxMDAsIExFTihlY2NfYWtpdGEpLCBlY2NfYWtpdGEsIDB4MDgwMDAwMDAsIGZyZWVfYWtpdGEKK30sIGJvcnpvaSA9IHsKKwkweDgwMCwgMHg0MCwgMHgxMDAsIExFTihlY2NfYWtpdGEpLCBlY2NfYWtpdGEsIDB4MDgwMDAwMDAsIGZyZWVfYWtpdGEKK30sIHRlcnJpZXIgPSB7CisJMHg4MDAsIDB4NDAsIDB4MTAwLCBMRU4oZWNjX2FraXRhKSwgZWNjX2FraXRhLCAweDA4MDAwMDAwLCBmcmVlX2FraXRhCit9OworCitzdHJ1Y3QgZWNjX3N0YXRlX3MgeworCWludCBjb3VudDsKKwl1aW50OF90IGNwOworCXVpbnQ4X3QgbHBbMl07CisJY29uc3Qgc3RydWN0IGVjY19zdHlsZV9zICpzdHlsZTsKK307CisKKyNpZm5kZWYgZmxhc2gycmF3CisvKgorICogUHJlLWNhbGN1bGF0ZWQgMjU2LXdheSAxIGJ5dGUgY29sdW1uIHBhcml0eS4gIFRhYmxlIGJvcnJvd2VkIGZyb20gTGludXguCisgKi8KK3N0YXRpYyBjb25zdCB1aW50OF90IGVjY19wcmVjYWxjX3RhYmxlW10gPSB7CisJMHgwMCwgMHg1NSwgMHg1NiwgMHgwMywgMHg1OSwgMHgwYywgMHgwZiwgMHg1YSwKKwkweDVhLCAweDBmLCAweDBjLCAweDU5LCAweDAzLCAweDU2LCAweDU1LCAweDAwLAorCTB4NjUsIDB4MzAsIDB4MzMsIDB4NjYsIDB4M2MsIDB4NjksIDB4NmEsIDB4M2YsCisJMHgzZiwgMHg2YSwgMHg2OSwgMHgzYywgMHg2NiwgMHgzMywgMHgzMCwgMHg2NSwKKwkweDY2LCAweDMzLCAweDMwLCAweDY1LCAweDNmLCAweDZhLCAweDY5LCAweDNjLAorCTB4M2MsIDB4NjksIDB4NmEsIDB4M2YsIDB4NjUsIDB4MzAsIDB4MzMsIDB4NjYsCisJMHgwMywgMHg1NiwgMHg1NSwgMHgwMCwgMHg1YSwgMHgwZiwgMHgwYywgMHg1OSwKKwkweDU5LCAweDBjLCAweDBmLCAweDVhLCAweDAwLCAweDU1LCAweDU2LCAweDAzLAorCTB4NjksIDB4M2MsIDB4M2YsIDB4NmEsIDB4MzAsIDB4NjUsIDB4NjYsIDB4MzMsCisJMHgzMywgMHg2NiwgMHg2NSwgMHgzMCwgMHg2YSwgMHgzZiwgMHgzYywgMHg2OSwKKwkweDBjLCAweDU5LCAweDVhLCAweDBmLCAweDU1LCAweDAwLCAweDAzLCAweDU2LAorCTB4NTYsIDB4MDMsIDB4MDAsIDB4NTUsIDB4MGYsIDB4NWEsIDB4NTksIDB4MGMsCisJMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywgMHg1NiwgMHgwMywgMHgwMCwgMHg1NSwKKwkweDU1LCAweDAwLCAweDAzLCAweDU2LCAweDBjLCAweDU5LCAweDVhLCAweDBmLAorCTB4NmEsIDB4M2YsIDB4M2MsIDB4NjksIDB4MzMsIDB4NjYsIDB4NjUsIDB4MzAsCisJMHgzMCwgMHg2NSwgMHg2NiwgMHgzMywgMHg2OSwgMHgzYywgMHgzZiwgMHg2YSwKKwkweDZhLCAweDNmLCAweDNjLCAweDY5LCAweDMzLCAweDY2LCAweDY1LCAweDMwLAorCTB4MzAsIDB4NjUsIDB4NjYsIDB4MzMsIDB4NjksIDB4M2MsIDB4M2YsIDB4NmEsCisJMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywgMHg1NiwgMHgwMywgMHgwMCwgMHg1NSwKKwkweDU1LCAweDAwLCAweDAzLCAweDU2LCAweDBjLCAweDU5LCAweDVhLCAweDBmLAorCTB4MGMsIDB4NTksIDB4NWEsIDB4MGYsIDB4NTUsIDB4MDAsIDB4MDMsIDB4NTYsCisJMHg1NiwgMHgwMywgMHgwMCwgMHg1NSwgMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywKKwkweDY5LCAweDNjLCAweDNmLCAweDZhLCAweDMwLCAweDY1LCAweDY2LCAweDMzLAorCTB4MzMsIDB4NjYsIDB4NjUsIDB4MzAsIDB4NmEsIDB4M2YsIDB4M2MsIDB4NjksCisJMHgwMywgMHg1NiwgMHg1NSwgMHgwMCwgMHg1YSwgMHgwZiwgMHgwYywgMHg1OSwKKwkweDU5LCAweDBjLCAweDBmLCAweDVhLCAweDAwLCAweDU1LCAweDU2LCAweDAzLAorCTB4NjYsIDB4MzMsIDB4MzAsIDB4NjUsIDB4M2YsIDB4NmEsIDB4NjksIDB4M2MsCisJMHgzYywgMHg2OSwgMHg2YSwgMHgzZiwgMHg2NSwgMHgzMCwgMHgzMywgMHg2NiwKKwkweDY1LCAweDMwLCAweDMzLCAweDY2LCAweDNjLCAweDY5LCAweDZhLCAweDNmLAorCTB4M2YsIDB4NmEsIDB4NjksIDB4M2MsIDB4NjYsIDB4MzMsIDB4MzAsIDB4NjUsCisJMHgwMCwgMHg1NSwgMHg1NiwgMHgwMywgMHg1OSwgMHgwYywgMHgwZiwgMHg1YSwKKwkweDVhLCAweDBmLCAweDBjLCAweDU5LCAweDAzLCAweDU2LCAweDU1LCAweDAwLAorfTsKKworLyogVXBkYXRlIEVDQyBwYXJpdHkgY291bnQgKi8KK3N0YXRpYyBpbmxpbmUgdWludDhfdCBlY2NfZGlnZXN0KHN0cnVjdCBlY2Nfc3RhdGVfcyAqcywgdWludDhfdCBzYW1wbGUpIHsKKwl1aW50OF90IGlkeCA9IGVjY19wcmVjYWxjX3RhYmxlW3NhbXBsZV07CisKKwlzLT5jcCBePSBpZHggJiAweDNmOworCWlmIChpZHggJiAweDQwKSB7CisJCXMtPmxwWzBdIF49IH4ocy0+Y291bnQgJiAweGZmKTsKKwkJcy0+bHBbMV0gXj0gcy0+Y291bnQgJiAweGZmOworCX0KKwlzLT5jb3VudCArKzsKKworCXJldHVybiBzYW1wbGU7Cit9CisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9kaWdlc3Qoc3RydWN0IGVjY19zdGF0ZV9zICplY2MsCisJCWNvbnN0IHVpbnQ4X3QgKmJ1ZiwgdWludDhfdCAqb3V0KSB7CisJaW50IGksIGxwX2FbMl07CisKKwllY2MtPmxwWzBdID0gMHgwMDsKKwllY2MtPmxwWzFdID0gMHgwMDsKKwllY2MtPmNwID0gMHgwMDsKKwllY2MtPmNvdW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZWNjLT5zdHlsZS0+ZWNjYnl0ZXM7IGkgKyspCisJCWVjY19kaWdlc3QoZWNjLCBidWZbaV0pOworCisjIGRlZmluZSBCU0hSKGJ5dGUsIGZyb20sIHRvKQkoKGVjYy0+bHBbYnl0ZV0gPj4gKGZyb20gLSB0bykpICYgKDEgPDwgdG8pKQorCWxwX2FbMF0gPQorCQlCU0hSKDAsIDQsIDApIHwgQlNIUigwLCA1LCAyKSB8CisJCUJTSFIoMCwgNiwgNCkgfCBCU0hSKDAsIDcsIDYpIHwKKwkJQlNIUigxLCA0LCAxKSB8IEJTSFIoMSwgNSwgMykgfAorCQlCU0hSKDEsIDYsIDUpIHwgQlNIUigxLCA3LCA3KTsKKworIyBkZWZpbmUgQlNITChieXRlLCBmcm9tLCB0bykJKChlY2MtPmxwW2J5dGVdIDw8ICh0byAtIGZyb20pKSAmICgxIDw8IHRvKSkKKwlscF9hWzFdID0KKwkJQlNITCgwLCAwLCAwKSB8IEJTSEwoMCwgMSwgMikgfAorCQlCU0hMKDAsIDIsIDQpIHwgQlNITCgwLCAzLCA2KSB8CisJCUJTSEwoMSwgMCwgMSkgfCBCU0hMKDEsIDEsIDMpIHwKKwkJQlNITCgxLCAyLCA1KSB8IEJTSEwoMSwgMywgNyk7CisKKwlvdXRbMF0gPSB+bHBfYVsxXTsKKwlvdXRbMV0gPSB+bHBfYVswXTsKKwlvdXRbMl0gPSAofmVjYy0+Y3AgPDwgMikgfCAweDAzOworfQorCitzdGF0aWMgdm9pZCBqZmZzMl9mb3JtYXQoY29uc3Qgc3RydWN0IGVjY19zdGF0ZV9zICplY2MsIHVpbnQ4X3Qgb29iW10pIHsKKwljb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyAqYnl0ZTsKKwlmb3IgKGJ5dGUgPSBlY2MtPnN0eWxlLT5mcmVlcG9zOyBieXRlLT5wb3MgPj0gMDsgYnl0ZSArKykKKwkJb29iW2J5dGUtPnBvc10gPSBieXRlLT52YWx1ZTsKK30KKworc3RhdGljIHZvaWQgYnVmZmVyX2ZpbGwoY29uc3Qgc3RydWN0IGVjY19zdGF0ZV9zICplY2MsIHVpbnQ4X3QgYnVmZmVyW10sCisJCWludCAqbGVuLCBpbnQgKnBhcnRpdGlvbiwgaW50IGNvdW50LCB1aW50OF90IGpmZnNfYnVmZmVyW10pIHsKKwlpbnQgcmV0OworCisJc3dpdGNoICgqcGFydGl0aW9uKSB7CisJY2FzZSAwOgorCQlpZiAoY291bnQgPCBQQVJUSVRJT05fU1RBUlQpIHsKKwkJCW1lbWNweShidWZmZXIsIGpmZnNfYnVmZmVyICsgY291bnQsCisJCQkJCWVjYy0+c3R5bGUtPmVjY2J5dGVzKTsKKwkJCSpsZW4gPSBlY2MtPnN0eWxlLT5lY2NieXRlczsKKwkJCWJyZWFrOworCQl9CisJCSpwYXJ0aXRpb24gPSAxOworCWNhc2UgMToKKwkJaWYgKGNvdW50IC0gUEFSVElUSU9OX1NUQVJUIDwgUEFSVElUSU9OX1NUQVJUKSB7CisJCQltZW1jcHkoYnVmZmVyLCBqZmZzX2J1ZmZlciArIGNvdW50IC0gUEFSVElUSU9OX1NUQVJULAorCQkJCQllY2MtPnN0eWxlLT5lY2NieXRlcyk7CisJCQkqbGVuID0gZWNjLT5zdHlsZS0+ZWNjYnl0ZXM7CisJCQlicmVhazsKKwkJfQorCisJCXdoaWxlICgqbGVuIDwgZWNjLT5zdHlsZS0+ZWNjYnl0ZXMpIHsKKwkJCXJldCA9IFRGUihyZWFkKDAsIGJ1ZmZlciArICpsZW4sIDB4ODAwIC0gKmxlbikpOworCQkJaWYgKHJldCA8PSAwKQorCQkJCWJyZWFrOworCQkJKmxlbiArPSByZXQ7CisJCX0KKworCQlpZiAoKmxlbiA9PSAwKQorCQkJKnBhcnRpdGlvbiA9IDI7CisJCWVsc2UgaWYgKCpsZW4gPCBlY2MtPnN0eWxlLT5lY2NieXRlcykgeworCQkJZnByaW50ZihzdGRlcnIsICJcbldhcm5pbmc6ICVpIHN0cmF5IGJ5dGVzXG4iLCAqbGVuKTsKKwkJCW1lbXNldChidWZmZXIgKyAqbGVuLCAweGZmLAorCQkJCQllY2MtPnN0eWxlLT5lY2NieXRlcyAtICpsZW4pOworCQkJKmxlbiA9IGVjYy0+c3R5bGUtPmVjY2J5dGVzOworCQkJYnJlYWs7CisJCX0gZWxzZQorCQkJYnJlYWs7CisJY2FzZSAyOgorCQltZW1zZXQoYnVmZmVyLCAweGZmLCBlY2MtPnN0eWxlLT5lY2NieXRlcyk7CisJCSpsZW4gPSBlY2MtPnN0eWxlLT5lY2NieXRlczsKKwkJYnJlYWs7CisJfQorfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICplbnZwW10pIHsKKwlzdHJ1Y3QgZWNjX3N0YXRlX3MgZWNjOworCXVpbnQ4X3QgYnVmZmVyWzB4MTAwMF0sIGVjY19wYXlsb2FkWzB4NDBdLCByZWdzWzNdLCAqamZmczsKKwlpbnQgcmV0LCBsZW4sIGVjY2J5dGUsIGNvdW50LCBwYXJ0aXRpb247CisKKwkvKiBDaGVjayBpZiB3ZSdyZSBjYWxsZWQgYnkgInJhdzJmbGFzaC5zcGl0eiIgb3Igc2ltaWxhciAqLworCWxlbiA9IHN0cmxlbihhcmd2WzBdKTsKKwlpZiAoIXN0cmNhc2VjbXAoYXJndlswXSArIGxlbiAtIDUsICJha2l0YSIpKQorCQllY2Muc3R5bGUgPSAmYWtpdGE7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndlswXSArIGxlbiAtIDYsICJib3J6b2kiKSkKKwkJZWNjLnN0eWxlID0gJmJvcnpvaTsKKwllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2WzBdICsgbGVuIC0gNywgInRlcnJpZXIiKSkKKwkJZWNjLnN0eWxlID0gJnRlcnJpZXI7CisJZWxzZQorCQllY2Muc3R5bGUgPSAmc3BpdHo7CisKKyMgaWZkZWYgVkVSQk9TRQorCWZwcmludGYoc3RkZXJyLCAiWyIpOworIyBlbmRpZgorCisJLyogU2tpcCBmaXJzdCAxMCBieXRlcyAqLworCVRGUihyZWFkKDAsIGJ1ZmZlciwgMHgxMCkpOworCisJbGVuID0gMDsKKwlqZmZzID0gKHVpbnQ4X3QgKikgbWFsbG9jKFBBUlRJVElPTl9TVEFSVCk7CisJd2hpbGUgKGxlbiA8IFBBUlRJVElPTl9TVEFSVCkgeworCQlyZXQgPSBURlIocmVhZCgwLCBqZmZzICsgbGVuLCBQQVJUSVRJT05fU1RBUlQgLSBsZW4pKTsKKwkJaWYgKHJldCA8PSAwKQorCQkJYnJlYWs7CisJCWxlbiArPSByZXQ7CisJfQorCisJLyogQ29udmVydCBkYXRhIGZyb20gc3RkaW4gKi8KKwlwYXJ0aXRpb24gPSBsZW4gPSBlY2NieXRlID0gY291bnQgPSAwOworCW1lbXNldChlY2NfcGF5bG9hZCwgMHhmZiwgZWNjLnN0eWxlLT5vb2Jfc2l6ZSk7CisJamZmczJfZm9ybWF0KCZlY2MsIGVjY19wYXlsb2FkKTsKKwl3aGlsZSAoY291bnQgPCBlY2Muc3R5bGUtPnJvbXNpemUpIHsKKwkJYnVmZmVyX2ZpbGwoJmVjYywgYnVmZmVyLCAmbGVuLCAmcGFydGl0aW9uLCBjb3VudCwgamZmcyk7CisJCWJ1ZmZlcl9kaWdlc3QoJmVjYywgYnVmZmVyLCByZWdzKTsKKworCQllY2NfcGF5bG9hZFtlY2Muc3R5bGUtPmVjY3Bvc1tlY2NieXRlICsrXV0gPSByZWdzWzBdOworCQllY2NfcGF5bG9hZFtlY2Muc3R5bGUtPmVjY3Bvc1tlY2NieXRlICsrXV0gPSByZWdzWzFdOworCQllY2NfcGF5bG9hZFtlY2Muc3R5bGUtPmVjY3Bvc1tlY2NieXRlICsrXV0gPSByZWdzWzJdOworCisJCVRGUih3cml0ZSgxLCBidWZmZXIsIGVjYy5zdHlsZS0+ZWNjYnl0ZXMpKTsKKwkJY291bnQgKz0gZWNjLnN0eWxlLT5lY2NieXRlczsKKwkJbGVuIC09IGVjYy5zdHlsZS0+ZWNjYnl0ZXM7CisJCW1lbW1vdmUoYnVmZmVyLCBidWZmZXIgKyBlY2Muc3R5bGUtPmVjY2J5dGVzLCBsZW4pOworCisJCWlmIChlY2NieXRlID49IGVjYy5zdHlsZS0+ZWNjc2l6ZSkgeworCQkJVEZSKHdyaXRlKDEsIGVjY19wYXlsb2FkLCBlY2Muc3R5bGUtPm9vYl9zaXplKSk7CisJCQllY2NieXRlID0gMDsKKwkJCW1lbXNldChlY2NfcGF5bG9hZCwgMHhmZiwgZWNjLnN0eWxlLT5vb2Jfc2l6ZSk7CisJCQlpZiAocGFydGl0aW9uIDwgMikKKwkJCQlqZmZzMl9mb3JtYXQoJmVjYywgZWNjX3BheWxvYWQpOworCQl9CisKKyMgaWZkZWYgVkVSQk9TRQorCQlpZiAoY291bnQgKiBQQkFSX0xFTiAvIGVjYy5zdHlsZS0+cm9tc2l6ZSA+CisJCQkJKGNvdW50IC0gZWNjLnN0eWxlLT5lY2NieXRlcykgKgorCQkJCVBCQVJfTEVOIC8gZWNjLnN0eWxlLT5yb21zaXplKQorCQkJZnByaW50ZihzdGRlcnIsICIjIik7CisjIGVuZGlmCisJfQorCisjIGlmZGVmIFZFUkJPU0UKKwlmcHJpbnRmKHN0ZGVyciwgIl1cbiIpOworIyBlbmRpZgorCWZyZWUoamZmcyk7CisJcmV0dXJuIDA7Cit9CisjZWxzZQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqZW52cFtdKSB7CisJc3RydWN0IGVjY19zdGF0ZV9zIGVjYzsKKwl1aW50OF90IGJ1ZmZlclsweDEwMDBdOworCWludCByZXQsIGxlbiwgY291bnQ7CisKKwkvKiBDaGVjayBpZiB3ZSdyZSBjYWxsZWQgYnkgImZsYXNoMnJhdy5zcGl0eiIgb3Igc2ltaWxhciAqLworCWxlbiA9IHN0cmxlbihhcmd2WzBdKTsKKwlpZiAoIXN0cmNhc2VjbXAoYXJndlswXSArIGxlbiAtIDUsICJha2l0YSIpKQorCQllY2Muc3R5bGUgPSAmYWtpdGE7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndlswXSArIGxlbiAtIDYsICJib3J6b2kiKSkKKwkJZWNjLnN0eWxlID0gJmJvcnpvaTsKKwllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2WzBdICsgbGVuIC0gNywgInRlcnJpZXIiKSkKKwkJZWNjLnN0eWxlID0gJnRlcnJpZXI7CisJZWxzZQorCQllY2Muc3R5bGUgPSAmc3BpdHo7CisKKyMgaWZkZWYgVkVSQk9TRQorCWZwcmludGYoc3RkZXJyLCAiWyIpOworIyBlbmRpZgorCisJLyogQ29udmVydCBkYXRhIGZyb20gc3RkaW4gKi8KKwljb3VudCA9IDA7CisJd2hpbGUgKGNvdW50IDwgZWNjLnN0eWxlLT5yb21zaXplKSB7CisJCWxlbiA9IDA7CisJCXdoaWxlIChsZW4gPCBlY2Muc3R5bGUtPnBhZ2Vfc2l6ZSkgeworCQkJcmV0ID0gVEZSKHJlYWQoMCwgYnVmZmVyICsgbGVuLAorCQkJCQkJZWNjLnN0eWxlLT5wYWdlX3NpemUgLSBsZW4pKTsKKwkJCWlmIChyZXQgPD0gMCkKKwkJCQlicmVhazsKKwkJCWxlbiArPSByZXQ7CisJCX0KKwkJaWYgKGxlbiA9PSAwKQorCQkJYnJlYWs7CisJCWlmIChsZW4gPCBlY2Muc3R5bGUtPnBhZ2Vfc2l6ZSkgeworCQkJZnByaW50ZihzdGRlcnIsICJcbldhcm5pbmc6ICVpIHN0cmF5IGJ5dGVzXG4iLCBsZW4pOworCQl9CisKKwkJVEZSKHdyaXRlKDEsIGJ1ZmZlciwgZWNjLnN0eWxlLT5wYWdlX3NpemUpKTsKKworCQljb3VudCArPSBsZW47CisJCWxlbiA9IDA7CisJCXdoaWxlIChsZW4gPCBlY2Muc3R5bGUtPm9vYl9zaXplKSB7CisJCQlyZXQgPSBURlIocmVhZCgwLCBidWZmZXIsIGVjYy5zdHlsZS0+b29iX3NpemUgLSBsZW4pKTsKKwkJCWlmIChyZXQgPD0gMCkKKwkJCQlicmVhazsKKwkJCWxlbiArPSByZXQ7CisJCX0KKworIyBpZmRlZiBWRVJCT1NFCisJCWlmIChjb3VudCAqIFBCQVJfTEVOIC8gZWNjLnN0eWxlLT5yb21zaXplID4KKwkJCQkoY291bnQgLSBlY2Muc3R5bGUtPnBhZ2Vfc2l6ZSkgKgorCQkJCVBCQVJfTEVOIC8gZWNjLnN0eWxlLT5yb21zaXplKQorCQkJZnByaW50ZihzdGRlcnIsICIjIik7CisjIGVuZGlmCisJfQorCisjIGlmZGVmIFZFUkJPU0UKKwlmcHJpbnRmKHN0ZGVyciwgIl1cbiIpOworIyBlbmRpZgorCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtaGVscGVyL3R1bmN0bC5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LWhlbHBlci90dW5jdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmUyNGEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LWhlbHBlci90dW5jdGwuYwpAQCAtMCwwICsxLDE1NiBAQAorLyogQ29weXJpZ2h0IDIwMDIgSmVmZiBEaWtlCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHB3ZC5oPgorI2luY2x1ZGUgPGdycC5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3R1bi5oPgorCisvKiBUVU5TRVRHUk9VUCBhcHBlYXJlZCBpbiAyLjYuMjMgKi8KKyNpZm5kZWYgVFVOU0VUR1JPVVAKKyNkZWZpbmUgVFVOU0VUR1JPVVAgICBfSU9XKCdUJywgMjA2LCBpbnQpCisjZW5kaWYKKworc3RhdGljIHZvaWQgVXNhZ2UoY2hhciAqbmFtZSkKK3sKKyAgZnByaW50ZihzdGRlcnIsICJDcmVhdGU6ICVzIFstYl0gWy11IG93bmVyXSBbLWcgZ3JvdXBdIFstdCBkZXZpY2UtbmFtZV0gIgorCSAgIlstZiB0dW4tY2xvbmUtZGV2aWNlXVxuIiwgbmFtZSk7CisgIGZwcmludGYoc3RkZXJyLCAiRGVsZXRlOiAlcyAtZCBkZXZpY2UtbmFtZSBbLWYgdHVuLWNsb25lLWRldmljZV1cblxuIiwKKwkgIG5hbWUpOworICBmcHJpbnRmKHN0ZGVyciwgIlRoZSBkZWZhdWx0IHR1biBjbG9uZSBkZXZpY2UgaXMgL2Rldi9uZXQvdHVuIC0gc29tZSBzeXN0ZW1zIgorCSAgIiB1c2Vcbi9kZXYvbWlzYy9uZXQvdHVuIGluc3RlYWRcblxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiLWIgd2lsbCByZXN1bHQgaW4gYnJpZWYgb3V0cHV0IChqdXN0IHRoZSBkZXZpY2UgbmFtZSlcbiIpOworICBleGl0KDEpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIHN0cnVjdCBpZnJlcSBpZnI7CisgIHN0cnVjdCBwYXNzd2QgKnB3OworICBzdHJ1Y3QgZ3JvdXAgKmdyOworICB1aWRfdCBvd25lciA9IC0xOworICBnaWRfdCBncm91cCA9IC0xOworICBpbnQgdGFwX2ZkLCBvcHQsIGRlbGV0ZSA9IDAsIGJyaWVmID0gMDsKKyAgY2hhciAqdHVuID0gIiIsICpmaWxlID0gIi9kZXYvbmV0L3R1biIsICpuYW1lID0gYXJndlswXSwgKmVuZDsKKworICB3aGlsZSgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJiZDpmOnQ6dTpnOiIpKSA+IDApeworICAgIHN3aXRjaChvcHQpIHsKKyAgICAgIGNhc2UgJ2InOgorICAgICAgICBicmllZiA9IDE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnZCc6CisgICAgICAgIGRlbGV0ZSA9IDE7CisJdHVuID0gb3B0YXJnOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2YnOgorCWZpbGUgPSBvcHRhcmc7CisJYnJlYWs7CisgICAgICBjYXNlICd1JzoKKwlwdyA9IGdldHB3bmFtKG9wdGFyZyk7CisJaWYocHcgIT0gTlVMTCl7CisJICBvd25lciA9IHB3LT5wd191aWQ7CisJICBicmVhazsKKwl9CisgICAgICAgIG93bmVyID0gc3RydG9sKG9wdGFyZywgJmVuZCwgMCk7CisJaWYoKmVuZCAhPSAnXDAnKXsKKwkgIGZwcmludGYoc3RkZXJyLCAiJyVzJyBpcyBuZWl0aGVyIGEgdXNlcm5hbWUgbm9yIGEgbnVtZXJpYyB1aWQuXG4iLAorCQkgIG9wdGFyZyk7CisJICBVc2FnZShuYW1lKTsKKwl9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnZyc6CisJZ3IgPSBnZXRncm5hbShvcHRhcmcpOworCWlmKGdyICE9IE5VTEwpeworCSAgZ3JvdXAgPSBnci0+Z3JfZ2lkOworCSAgYnJlYWs7CisJfQorICAgICAgICBncm91cCA9IHN0cnRvbChvcHRhcmcsICZlbmQsIDApOworCWlmKCplbmQgIT0gJ1wwJyl7CisJICBmcHJpbnRmKHN0ZGVyciwgIiclcycgaXMgbmVpdGhlciBhIGdyb3VwbmFtZSBub3IgYSBudW1lcmljIGdyb3VwLlxuIiwKKwkJICBvcHRhcmcpOworCSAgVXNhZ2UobmFtZSk7CisJfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAndCc6CisgICAgICAgIHR1biA9IG9wdGFyZzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdoJzoKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVzYWdlKG5hbWUpOworICAgIH0KKyAgfQorCisgIGFyZ3YgKz0gb3B0aW5kOworICBhcmdjIC09IG9wdGluZDsKKworICBpZihhcmdjID4gMCkKKyAgICBVc2FnZShuYW1lKTsKKworICBpZigodGFwX2ZkID0gb3BlbihmaWxlLCBPX1JEV1IpKSA8IDApeworICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG9wZW4gJyVzJyA6ICIsIGZpbGUpOworICAgIHBlcnJvcigiIik7CisgICAgZXhpdCgxKTsKKyAgfQorCisgIG1lbXNldCgmaWZyLCAwLCBzaXplb2YoaWZyKSk7CisKKyAgaWZyLmlmcl9mbGFncyA9IElGRl9UQVAgfCBJRkZfTk9fUEk7CisgIHN0cm5jcHkoaWZyLmlmcl9uYW1lLCB0dW4sIHNpemVvZihpZnIuaWZyX25hbWUpIC0gMSk7CisgIGlmKGlvY3RsKHRhcF9mZCwgVFVOU0VUSUZGLCAodm9pZCAqKSAmaWZyKSA8IDApeworICAgIHBlcnJvcigiVFVOU0VUSUZGIik7CisgICAgZXhpdCgxKTsKKyAgfQorCisgIGlmKGRlbGV0ZSl7CisgICAgaWYoaW9jdGwodGFwX2ZkLCBUVU5TRVRQRVJTSVNULCAwKSA8IDApeworICAgICAgcGVycm9yKCJkaXNhYmxpbmcgVFVOU0VUUEVSU0lTVCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgcHJpbnRmKCJTZXQgJyVzJyBub25wZXJzaXN0ZW50XG4iLCBpZnIuaWZyX25hbWUpOworICB9CisgIGVsc2UgeworICAgIC8qIGVtdWxhdGUgYmVoYXZpb3VyIHByaW9yIHRvIFRVTlNFVEdST1VQICovCisgICAgaWYob3duZXIgPT0gLTEgJiYgZ3JvdXAgPT0gLTEpIHsKKyAgICAgIG93bmVyID0gZ2V0ZXVpZCgpOworICAgIH0KKworICAgIGlmKG93bmVyICE9IC0xKSB7CisgICAgICBpZihpb2N0bCh0YXBfZmQsIFRVTlNFVE9XTkVSLCBvd25lcikgPCAwKXsKKyAgICAgIAlwZXJyb3IoIlRVTlNFVE9XTkVSIik7CisgICAgICAJZXhpdCgxKTsKKyAgICAgIH0KKyAgICB9CisgICAgaWYoZ3JvdXAgIT0gLTEpIHsKKyAgICAgIGlmKGlvY3RsKHRhcF9mZCwgVFVOU0VUR1JPVVAsIGdyb3VwKSA8IDApeworICAgICAgCXBlcnJvcigiVFVOU0VUR1JPVVAiKTsKKyAgICAgIAlleGl0KDEpOworICAgICAgfQorICAgIH0KKworICAgIGlmKGlvY3RsKHRhcF9mZCwgVFVOU0VUUEVSU0lTVCwgMSkgPCAwKXsKKyAgICAgIHBlcnJvcigiZW5hYmxpbmcgVFVOU0VUUEVSU0lTVCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICBpZihicmllZikKKyAgICAgIHByaW50ZigiJXNcbiIsIGlmci5pZnJfbmFtZSk7CisgICAgZWxzZSB7CisgICAgICBwcmludGYoIlNldCAnJXMnIHBlcnNpc3RlbnQgYW5kIG93bmVkIGJ5IiwgaWZyLmlmcl9uYW1lKTsKKyAgICAgIGlmKG93bmVyICE9IC0xKQorICAgICAgICAgIHByaW50ZigiIHVpZCAlZCIsIG93bmVyKTsKKyAgICAgIGlmKGdyb3VwICE9IC0xKQorICAgICAgICAgIHByaW50ZigiIGdpZCAlZCIsIGdyb3VwKTsKKyAgICAgIHByaW50ZigiXG4iKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuKDApOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LXRhcmdldHMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LXRhcmdldHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMzU2NTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtdGFyZ2V0cy5pbmMKQEAgLTAsMCArMSwyMiBAQAorIyBwb3NzaWJsZSBhcmNoIHZhbHVlcyBhcmUgYXJtIGFhcmNoNjQgbWlwcyBtaXBzZWwgbWlwczY0IG1pcHM2NGVsIHBwYyBwcGM2NCBwcGM2NGFiaTMyCisjIHBwY2VtYiBhcm1lYiBhbHBoYSBzcGFyYzMycGx1cyBpMzg2IHg4Nl82NCBjcmlzIG02OGsgbWljcm9ibGF6ZSBzcGFyYyBzcGFyYzMyCisjIHNwYXJjMzJwbHVzCisKK2RlZiBnZXRfcWVtdV90YXJnZXRfbGlzdChkKToKKyAgICBpbXBvcnQgYmIKKyAgICBhcmNocyA9IGQuZ2V0VmFyKCdRRU1VX1RBUkdFVFMnLCBUcnVlKS5zcGxpdCgpCisgICAgdG9zID0gZC5nZXRWYXIoJ0hPU1RfT1MnLCBUcnVlKQorICAgIHNvZnRtbXVvbmx5ID0gIiIKKyAgICBmb3IgYXJjaCBpbiBbJ21pcHM2NCcsICdtaXBzNjRlbCcsICdwcGNlbWInXToKKyAgICAgICAgaWYgYXJjaCBpbiBhcmNoczoKKyAgICAgICAgICAgIHNvZnRtbXVvbmx5ICs9IGFyY2ggKyAiLXNvZnRtbXUsIgorICAgICAgICAgICAgYXJjaHMucmVtb3ZlKGFyY2gpCisgICAgbGludXh1c2Vyb25seSA9ICIiCisgICAgZm9yIGFyY2ggaW4gWydhcm1lYicsICdhbHBoYScsICdwcGM2NGFiaTMyJywgJ3NwYXJjMzJwbHVzJ106CisgICAgICAgIGlmIGFyY2ggaW4gYXJjaHM6CisgICAgICAgICAgICBsaW51eHVzZXJvbmx5ICs9IGFyY2ggKyAiLWxpbnV4LXVzZXIsIgorICAgICAgICAgICAgYXJjaHMucmVtb3ZlKGFyY2gpCisgICAgaWYgJ2xpbnV4JyBub3QgaW4gdG9zOgorICAgICAgICByZXR1cm4gc29mdG1tdW9ubHkgKyAnJy5qb2luKFthcmNoICsgIi1zb2Z0bW11IiArICIsIiBmb3IgYXJjaCBpbiBhcmNoc10pLnJzdHJpcCgnLCcpCisgICAgcmV0dXJuIHNvZnRtbXVvbmx5ICsgbGludXh1c2Vyb25seSArICcnLmpvaW4oW2FyY2ggKyAiLWxpbnV4LXVzZXIiICsgIiwiICsgYXJjaCArICItc29mdG1tdSIgKyAiLCIgZm9yIGFyY2ggaW4gYXJjaHNdKS5yc3RyaXAoJywnKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzhiZjJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LmluYwpAQCAtMCwwICsxLDEzNyBAQAorU1VNTUFSWSA9ICJGYXN0IG9wZW4gc291cmNlIHByb2Nlc3NvciBlbXVsYXRvciIKK0hPTUVQQUdFID0gImh0dHA6Ly9xZW11Lm9yZyIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIuMSIKK0RFUEVORFMgPSAiZ2xpYi0yLjAgemxpYiBwaXhtYW4iCitSREVQRU5EU18ke1BOfV9jbGFzcy10YXJnZXQgKz0gImJhc2ggcHl0aG9uIgorUkRFUEVORFNfJHtQTn0tcHRlc3QgPSAiYmFzaCBtYWtlIgorCityZXF1aXJlIHFlbXUtdGFyZ2V0cy5pbmMKK2luaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0CitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1BSID0gInIxIgorCisjIFFFTVVfVEFSR0VUUyBpcyBvdmVycmlkYWJsZSB2YXJpYWJsZQorUUVNVV9UQVJHRVRTID89ICJhcm0gYWFyY2g2NCBpMzg2IG1pcHMgbWlwc2VsIG1pcHM2NCBtaXBzNjRlbCBwcGMgc2g0IHg4Nl82NCIKKworU1JDX1VSSSA9ICJcCisgICAgZmlsZTovL3Bvd2VycGNfcm9tLmJpbiBcCisgICAgZmlsZTovL2Rpc2FibGUtZ3JhYnMucGF0Y2ggXAorICAgIGZpbGU6Ly9leGNsdWRlLXNvbWUtYXJtLUVBQkktb2Jzb2xldGUtc3lzY2FsbHMucGF0Y2ggXAorICAgIGZpbGU6Ly93YWNvbS5wYXRjaCBcCisgICAgZmlsZTovL2FkZC1wdGVzdC1pbi1tYWtlZmlsZS5wYXRjaCBcCisgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgZmlsZTovL2NwdXMuYy1xZW11X211dGV4X2xvY2tfaW90aHJlYWQtZml4LXJhY2UtY29uZGl0aW9uLWEucGF0Y2ggXAorICAgICIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIlwKKyAgICBmaWxlOi8vZml4LWxpYmNhcC1oZWFkZXItaXNzdWUtb24tc29tZS1kaXN0cm8ucGF0Y2ggXAorICAgIGZpbGU6Ly9jcHVzLmMtcWVtdV9jcHVfa2lja190aHJlYWRfZGVidWdnaW5nLnBhdGNoIFwKKyAgICAiCisKK0VYVFJBX09FQ09ORiArPSAiLS10YXJnZXQtbGlzdD0ke0BnZXRfcWVtdV90YXJnZXRfbGlzdChkKX0gLS1kaXNhYmxlLXdlcnJvciAgLS1kaXNhYmxlLWJsdWV6IC0tZGlzYWJsZS1saWJpc2NzaSAtLXdpdGgtc3lzdGVtLXBpeG1hbiAtLWV4dHJhLWNmbGFncz0nJHtDRkxBR1N9JyIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC0tZW5hYmxlLWRlYnVnIC0tZW5hYmxlLWRlYnVnLWluZm8iCitJTkhJQklUX1NZU1JPT1RfU1RSSVAgPSAiMSIKKworRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZXNkayA9ICItLXRhcmdldC1saXN0PSR7QGdldF9xZW11X3RhcmdldF9saXN0KGQpfSAtLWRpc2FibGUtd2Vycm9yIFwKKwkJCQkiCitleHBvcnQgTElCVE9PTD0iJHtIT1NUX1NZU30tbGlidG9vbCIKKworZG9fY29uZmlndXJlX3ByZXBlbmRfY2xhc3MtbmF0aXZlKCkgeworCSMgQXBwZW5kIGJ1aWxkIGhvc3QgcGtnLWNvbmZpZyBwYXRocyBmb3IgbmF0aXZlIHRhcmdldCBzaW5jZSB0aGUgaG9zdCBtYXkgcHJvdmlkZSBzZGwKKwlCSE9TVF9QS0dDT05GSUdfUEFUSD0kKFBBVEg9L3Vzci9iaW46L2JpbiBwa2ctY29uZmlnIC0tdmFyaWFibGUgcGNfcGF0aCBwa2ctY29uZmlnIHx8IGVjaG8gIiIpCisJaWYgWyAhIC16ICIkQkhPU1RfUEtHQ09ORklHX1BBVEgiIF07IHRoZW4KKwkJZXhwb3J0IFBLR19DT05GSUdfUEFUSD0kUEtHX0NPTkZJR19QQVRIOiRCSE9TVF9QS0dDT05GSUdfUEFUSAorCWZpCit9CisKK0tWTUVOQUJMRSA9ICItLWVuYWJsZS1rdm0iCitLVk1FTkFCTEVfZGFyd2luID0gIi0tZGlzYWJsZS1rdm0iCitLVk1FTkFCTEVfbWluZ3czMiA9ICItLWRpc2FibGUta3ZtIgorCitkb19jb25maWd1cmUoKSB7CisgICAgIyBIYW5kbGUgZGlzdHJvcyBzdWNoIGFzIENlbnRPUyA1IDMyLWJpdCB0aGF0IGRvIG5vdCBoYXZlIGt2bSBzdXBwb3J0CisgICAgS1ZNT1BUUz0iLS1kaXNhYmxlLWt2bSIKKyAgICBpZiBbICIke1BOfSIgIT0gInFlbXUtbmF0aXZlIiAtYSAiJHtQTn0iICE9ICJuYXRpdmVzZGstcWVtdSIgXSBcCisgICAgICAgfHwgWyAtZiAvdXNyL2luY2x1ZGUvbGludXgva3ZtLmggXSA7IHRoZW4KKyAgICAgICBLVk1PUFRTPSIke0tWTUVOQUJMRX0iCisgICAgZmkKKworICAgICR7U30vY29uZmlndXJlIC0tcHJlZml4PSR7cHJlZml4fSAtLXN5c2NvbmZkaXI9JHtzeXNjb25mZGlyfSAtLWxpYmV4ZWNkaXI9JHtsaWJleGVjZGlyfSAtLWxvY2Fsc3RhdGVkaXI9JHtsb2NhbHN0YXRlZGlyfSAtLWRpc2FibGUtc3RyaXAgJHtFWFRSQV9PRUNPTkZ9ICRLVk1PUFRTCisgICAgdGVzdCAhIC1lICR7U30vdGFyZ2V0LWkzODYvYmVnaW5lbmRfZnVuY3Muc2ggfHwgY2htb2QgYSt4ICR7U30vdGFyZ2V0LWkzODYvYmVnaW5lbmRfZnVuY3Muc2gKK30KKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwltYWtlIGJ1aWxkdGVzdC1URVNUUworfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCWNwIC1yTCAke0J9L3Rlc3RzICR7RH0ke1BURVNUX1BBVEh9CisJZmluZCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cyAtdHlwZSBmIC1uYW1lICIqLltTc2hjb2RdIiB8IHhhcmdzIC1pIHJtIC1yZiB7fQorCisJY3AgJHtTfS90ZXN0cy9NYWtlZmlsZSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cworfQorCitkb19pbnN0YWxsICgpIHsKKwlleHBvcnQgU1RSSVA9InRydWUiCisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L3FlbXUKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wb3dlcnBjX3JvbS5iaW4gJHtEfSR7ZGF0YWRpcn0vcWVtdQorfQorCisjIFRoZSBmb2xsb3dpbmcgZnJhZ21lbnQgd2lsbCBjcmVhdGUgYSB3cmFwcGVyIGZvciBxZW11LW1pcHMgdXNlciBlbXVsYXRpb24KKyMgYmluYXJ5IGluIG9yZGVyIHRvIHdvcmsgYXJvdW5kIGEgc2VnbWVudGF0aW9uIGZhdWx0IGlzc3VlLiBCYXNpY2FsbHksIGJ5CisjIGRlZmF1bHQsIHRoZSByZXNlcnZlZCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgZm9yIDMyLW9uLTY0IGJpdCBpcyBzZXQgdG8gNEdCLgorIyBUaGlzIHdpbGwgdHJpZ2dlciBhIE1NVSBhY2Nlc3MgZmF1bHQgaW4gdGhlIHZpcnR1YWwgQ1BVLiBXaXRoIHRoaXMgY2hhbmdlLAorIyB0aGUgcWVtdS1taXBzIHdvcmtzIGZpbmUuCisjIElNUE9SVEFOVDogVGhpcyBwaWVjZSBuZWVkcyB0byBiZSByZW1vdmVkIG9uY2UgdGhlIHJvb3QgY2F1c2UgaXMgZml4ZWQhCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpZiBbIC1lICIke0R9LyR7YmluZGlyfS9xZW11LW1pcHMiIF07IHRoZW4KKwkJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vcWVtdS1taXBzIFwKKwkJCVFFTVVfUkVTRVJWRURfVkE9MHgwCisJZmkKK30KKyMgRU5EIG9mIHFlbXUtbWlwcyB3b3JrYXJvdW5kCisKK1BBQ0tBR0VDT05GSUcgPz89ICIgXAorCWZkdCBzZGwgXAorCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYWxzYScsICdhbHNhJywgJycsIGQpfSBcCisJJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4ZW4nLCAneGVuJywgJycsIGQpfSBcCisJIgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPz89ICJmZHQgYWxzYSB1dWlkIgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmVzZGsgPz89ICJmZHQgc2RsIgorTkFUSVZFREVQUyA9ICIiCitOQVRJVkVERVBTX2NsYXNzLW5hdGl2ZSA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICdsaWJ4ZXh0LW5hdGl2ZScsICcnLGQpfSIKK1BBQ0tBR0VDT05GSUdbc2RsXSA9ICItLWVuYWJsZS1zZGwsLS1kaXNhYmxlLXNkbCxsaWJzZGwgJHtOQVRJVkVERVBTfSwiCitQQUNLQUdFQ09ORklHW3ZpcnRmc10gPSAiLS1lbmFibGUtdmlydGZzIC0tZW5hYmxlLWF0dHIsLS1kaXNhYmxlLXZpcnRmcyxsaWJjYXAgYXR0ciwiCitQQUNLQUdFQ09ORklHW2Fpb10gPSAiLS1lbmFibGUtbGludXgtYWlvLC0tZGlzYWJsZS1saW51eC1haW8sbGliYWlvLCIKK1BBQ0tBR0VDT05GSUdbeGZzXSA9ICItLWVuYWJsZS14ZnNjdGwsLS1kaXNhYmxlLXhmc2N0bCx4ZnNwcm9ncywiCitQQUNLQUdFQ09ORklHW3hlbl0gPSAiLS1lbmFibGUteGVuLC0tZGlzYWJsZS14ZW4seGVuLHhlbi1saWJ4ZW5zdG9yZSB4ZW4tbGlieGVuY3RybCB4ZW4tbGlieGVuZ3Vlc3QiCitQQUNLQUdFQ09ORklHW3ZuYy10bHNdID0gIi0tZW5hYmxlLXZuYyAtLWVuYWJsZS12bmMtdGxzLC0tZGlzYWJsZS12bmMtdGxzLCBnbnV0bHMsIgorUEFDS0FHRUNPTkZJR1t2bmMtc2FzbF0gPSAiLS1lbmFibGUtdm5jIC0tZW5hYmxlLXZuYy1zYXNsLC0tZGlzYWJsZS12bmMtc2FzbCxjeXJ1cy1zYXNsLCIKK1BBQ0tBR0VDT05GSUdbdm5jLWpwZWddID0gIi0tZW5hYmxlLXZuYyAtLWVuYWJsZS12bmMtanBlZywtLWRpc2FibGUtdm5jLWpwZWcsanBlZywiCitQQUNLQUdFQ09ORklHW3ZuYy1wbmddID0gIi0tZW5hYmxlLXZuYyAtLWVuYWJsZS12bmMtcG5nLC0tZGlzYWJsZS12bmMtcG5nLGxpYnBuZywiCitQQUNLQUdFQ09ORklHW2xpYmN1cmxdID0gIi0tZW5hYmxlLWN1cmwsLS1kaXNhYmxlLWN1cmwsbGliY3VybCwiCitQQUNLQUdFQ09ORklHW25zc10gPSAiLS1lbmFibGUtc21hcnRjYXJkLW5zcywtLWRpc2FibGUtc21hcnRjYXJkLW5zcyxuc3MsIgorUEFDS0FHRUNPTkZJR1t1dWlkXSA9ICItLWVuYWJsZS11dWlkLC0tZGlzYWJsZS11dWlkLHV0aWwtbGludXgsIgorUEFDS0FHRUNPTkZJR1tjdXJzZXNdID0gIi0tZW5hYmxlLWN1cnNlcywtLWRpc2FibGUtY3Vyc2VzLG5jdXJzZXMsIgorUEFDS0FHRUNPTkZJR1tndGsrXSA9ICItLWVuYWJsZS1ndGsgLS1lbmFibGUtdnRlLC0tZGlzYWJsZS1ndGsgLS1kaXNhYmxlLXZ0ZSxndGsrIGxpYnZ0ZSwiCitQQUNLQUdFQ09ORklHW2xpYmNhcC1uZ10gPSAiLS1lbmFibGUtY2FwLW5nLC0tZGlzYWJsZS1jYXAtbmcsbGliY2FwLW5nLCIKK1BBQ0tBR0VDT05GSUdbc3NoMl0gPSAiLS1lbmFibGUtbGlic3NoMiwtLWRpc2FibGUtbGlic3NoMixsaWJzc2gyLCIKK1BBQ0tBR0VDT05GSUdbbGlidXNiXSA9ICItLWVuYWJsZS1saWJ1c2IsLS1kaXNhYmxlLWxpYnVzYixsaWJ1c2IxIgorUEFDS0FHRUNPTkZJR1tmZHRdID0gIi0tZW5hYmxlLWZkdCwtLWRpc2FibGUtZmR0LGR0YyIKK1BBQ0tBR0VDT05GSUdbYWxzYV0gPSAiLCxhbHNhLWxpYiIKK1BBQ0tBR0VDT05GSUdbZ2x4XSA9ICItLWVuYWJsZS1vcGVuZ2wsLS1kaXNhYmxlLW9wZW5nbCxtZXNhIgorUEFDS0FHRUNPTkZJR1tsem9dID0gIi0tZW5hYmxlLWx6bywtLWRpc2FibGUtbHpvLGx6byIKK1BBQ0tBR0VDT05GSUdbbnVtYV0gPSAiLS1lbmFibGUtbnVtYSwtLWRpc2FibGUtbnVtYSxudW1hY3RsIgorUEFDS0FHRUNPTkZJR1tnbnV0bHNdID0gIi0tZW5hYmxlLWdudXRscywtLWRpc2FibGUtZ251dGxzLGdudXRscyIKKworRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdhbHNhJywgJy0tYXVkaW8tZHJ2LWxpc3Q9b3NzLGFsc2EnLCAnJywgZCl9IgorCisjIFFlbXUgdGFyZ2V0IHdpbGwgbm90IGJ1aWxkIGluIHdvcmxkIGJ1aWxkIGZvciBBUk0gb3IgTWlwcworQlJPS0VOX3FlbXVhcm0gPSAiMSIKK0JST0tFTl9xZW11bWlwczY0ID0gIjEiCitCUk9LRU5fcWVtdW1pcHMgPSAiMSIKKworSU5TQU5FX1NLSVBfJHtQTn0gPSAiYXJjaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9RZW11LUFybS12ZXJzYXRpbGVwYi1BZGQtbWVtb3J5LXNpemUtY2hlY2tpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvUWVtdS1Bcm0tdmVyc2F0aWxlcGItQWRkLW1lbW9yeS1zaXplLWNoZWNraW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNmNmNTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvUWVtdS1Bcm0tdmVyc2F0aWxlcGItQWRkLW1lbW9yeS1zaXplLWNoZWNraW5nLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gODk2ZmEwMmMyNDM0N2U2ZTkyNTk4MTJjZmRhMTg3YjFkNmNhNjE5OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEppYW5nIEx1IDxsdS5qaWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxMyBOb3YgMjAxMyAxMDozODowOCArMDgwMAorU3ViamVjdDogW1BBVENIXSBRZW11OkFybTp2ZXJzYXRpbGVwYjogQWRkIG1lbW9yeSBzaXplIGNoZWNraW5nCisKK1RoZSBtYWNoaW5lIGNhbiBub3Qgd29yayB3aXRoIG1lbW9yeSBvdmVyIDI1Nk0sIHNvIGFkZCBhIGNoZWNraW5nCithdCBzdGFydHVwLiBJZiB0aGUgbWVtb3J5IHNpemUgZXhjZWVkIDI1Nk0sIGp1c3Qgc3RvcCBlbXVsYXRpb24gdGhlbgordGhyb3cgb3V0IHdhcm5pbmcgYWJvdXQgbWVtb3J5IGxpbWl0YXRpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBKaWFuZyBMdSA8bHUuamlhbmdAd2luZHJpdmVyLmNvbT4KKworVXBkYXRlZCBpdCBvbiAyMDE0LTAxLTE1IGZvciByZWJhc2luZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworVXBkYXRlIGl0IHdoZW4gdXBncmFkZSBxZW11IHRvIDIuMi4wCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4KKy0tLQorIGh3L2FybS92ZXJzYXRpbGVwYi5jIHwgNyArKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvaHcvYXJtL3ZlcnNhdGlsZXBiLmMgYi9ody9hcm0vdmVyc2F0aWxlcGIuYworaW5kZXggNmM2OWY0ZS4uOTI3OGQ5MCAxMDA2NDQKKy0tLSBhL2h3L2FybS92ZXJzYXRpbGVwYi5jCisrKysgYi9ody9hcm0vdmVyc2F0aWxlcGIuYworQEAgLTIwNCw2ICsyMDQsMTMgQEAgc3RhdGljIHZvaWQgdmVyc2F0aWxlX2luaXQoTWFjaGluZVN0YXRlICptYWNoaW5lLCBpbnQgYm9hcmRfaWQpCisgICAgICAgICBleGl0KDEpOworICAgICB9CisKKysgICAgaWYgKG1hY2hpbmUtPnJhbV9zaXplID4gKDI1NiA8PCAyMCkpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLAorKyAgICAgICAgICAgICAgICAicWVtdTogVG9vIG11Y2ggbWVtb3J5IGZvciB0aGlzIG1hY2hpbmU6ICVkIE1CLCBtYXhpbXVtIDI1NiBNQlxuIiwKKysgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpcmFtX3NpemUgLyAoMSA8PCAyMCkpKTsKKysgICAgICAgIGV4aXQoMSk7CisrICAgIH0KKysKKyAgICAgY3B1b2JqID0gb2JqZWN0X25ldyhvYmplY3RfY2xhc3NfZ2V0X25hbWUoY3B1X29jKSk7CisKKyAgICAgLyogQnkgZGVmYXVsdCBBUk0xMTc2IENQVXMgaGF2ZSBFTDMgZW5hYmxlZC4gIFRoaXMgYm9hcmQgZG9lcyBub3QKKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2FkZC1wdGVzdC1pbi1tYWtlZmlsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9hZGQtcHRlc3QtaW4tbWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk5ZjcyMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9hZGQtcHRlc3QtaW4tbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0FkZCBzdWJwYWNrYWdlIC1wdGVzdCB3aGljaCBydW5zIGFsbCB1bml0IHRlc3QgY2FzZXMgZm9yIHFlbXUuCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgdGVzdHMvTWFrZWZpbGUgfCAgIDEwICsrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUgYi90ZXN0cy9NYWtlZmlsZQoraW5kZXggODhmNzEwNS4uM2Y0MGI0YiAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlCisrKysgYi90ZXN0cy9NYWtlZmlsZQorQEAgLTQwNSwzICs0MDUsMTIgQEAgYWxsOiAkKFFFTVVfSU9URVNUU19IRUxQRVJTLXkpCisgCisgLWluY2x1ZGUgJCh3aWxkY2FyZCB0ZXN0cy8qLmQpCisgLWluY2x1ZGUgJCh3aWxkY2FyZCB0ZXN0cy9saWJxb3MvKi5kKQorKworK2J1aWxkdGVzdC1URVNUUzogJChjaGVjay11bml0LXkpCisrCisrcnVudGVzdC1URVNUUzoKKysJZm9yIGYgaW4gJChjaGVjay11bml0LXkpOyBkbyBcCisrCQluZj0kJChlY2hvICQkZiB8IHNlZCAncy90ZXN0c1wvL1wuXC8vZycpOyBcCisrCQkkJG5mOyBcCisrCWRvbmUKKysKKy0tCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9jb25maWd1cmUtZml4LURhcndpbi10YXJnZXQtZGV0ZWN0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2NvbmZpZ3VyZS1maXgtRGFyd2luLXRhcmdldC1kZXRlY3Rpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljZGMxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9jb25maWd1cmUtZml4LURhcndpbi10YXJnZXQtZGV0ZWN0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4KKworRnJvbSA5YWMwOTZkOGVjY2YyZDU2ZWNlNjQ2MzIwYzI4MmM4MzY5ZjgzMzdjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMjkgSnVsIDIwMTQgMTg6MzU6NTkgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlOiBmaXggRGFyd2luIHRhcmdldCBkZXRlY3Rpb24KKworZml4IERhcndpbiB0YXJnZXQgZGV0ZWN0aW9uIGZvciBxZW11Citjcm9zcy1jb21waWxhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDI4M2M3MWMuLjFjNjZhMTEgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTQ0NCw2ICs0NDQsOCBAQCBlbGlmIGNoZWNrX2RlZmluZSBfX3N1bl9fIDsgdGhlbgorICAgdGFyZ2V0b3M9J1N1bk9TJworIGVsaWYgY2hlY2tfZGVmaW5lIF9fSEFJS1VfXyA7IHRoZW4KKyAgIHRhcmdldG9zPSdIYWlrdScKKytlbGlmIGNoZWNrX2RlZmluZSBfX0FQUExFX18gOyB0aGVuCisrICB0YXJnZXRvcz0nRGFyd2luJworIGVsc2UKKyAgIHRhcmdldG9zPWB1bmFtZSAtc2AKKyBmaQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvY3B1cy5jLXFlbXVfY3B1X2tpY2tfdGhyZWFkX2RlYnVnZ2luZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9jcHVzLmMtcWVtdV9jcHVfa2lja190aHJlYWRfZGVidWdnaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MjIxMzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvY3B1cy5jLXFlbXVfY3B1X2tpY2tfdGhyZWFkX2RlYnVnZ2luZy5wYXRjaApAQCAtMCwwICsxLDc2IEBACitGcm9tIDY5N2E4MzRjMzVkMTk0NDdiN2RjZGI5ZTFkOTQzNGJjNmNlMTdjMjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/QW49QzM9QURiYWw9MjBMaW09QzM9QjNuPz0gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBXZWQsIDEyIEF1ZyAyMDE1IDE1OjExOjMwIC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNwdXMuYzogQWRkIGVycm9yIG1lc3NhZ2VzIHdoZW4gcWVtaV9jcHVfa2lja190aHJlYWQgZmFpbHMuCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK0FkZCBjdXN0b21fZGVidWcuaCB3aXRoIGZ1bmN0aW9uIGZvciBwcmludCBiYWNrdHJhY2UgaW5mb3JtYXRpb24uCitXaGVuIHB0aHJlYWRfa2lsbCBmYWlscyBpbiBxZW11X2NwdV9raWNrX3RocmVhZCBkaXNwbGF5IGJhY2t0cmFjZSBhbmQKK2N1cnJlbnQgY3B1IGluZm9ybWF0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IEFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgorLS0tCisgY3B1cy5jICAgICAgICAgfCAgNSArKysrKworIGN1c3RvbV9kZWJ1Zy5oIHwgMjQgKysrKysrKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGN1c3RvbV9kZWJ1Zy5oCisKK2RpZmYgLS1naXQgYS9jcHVzLmMgYi9jcHVzLmMKK2luZGV4IGE4MjJjZTMuLjdlNDc4NmUgMTAwNjQ0CistLS0gYS9jcHVzLmMKKysrKyBiL2NwdXMuYworQEAgLTEwODAsNiArMTA4MCw4IEBAIHN0YXRpYyB2b2lkICpxZW11X3RjZ19jcHVfdGhyZWFkX2ZuKHZvaWQgKmFyZykKKyAgICAgcmV0dXJuIE5VTEw7CisgfQorIAorKyNpbmNsdWRlICJjdXN0b21fZGVidWcuaCIKKysKKyBzdGF0aWMgdm9pZCBxZW11X2NwdV9raWNrX3RocmVhZChDUFVTdGF0ZSAqY3B1KQorIHsKKyAjaWZuZGVmIF9XSU4zMgorQEAgLTEwODgsNiArMTA5MCw5IEBAIHN0YXRpYyB2b2lkIHFlbXVfY3B1X2tpY2tfdGhyZWFkKENQVVN0YXRlICpjcHUpCisgICAgIGVyciA9IHB0aHJlYWRfa2lsbChjcHUtPnRocmVhZC0+dGhyZWFkLCBTSUdfSVBJKTsKKyAgICAgaWYgKGVycikgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiVzOiAlcyIsIF9fZnVuY19fLCBzdHJlcnJvcihlcnIpKTsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ1BVICMlZDpcbiIsIGNwdS0+Y3B1X2luZGV4KTsKKysgICAgICAgIGNwdV9kdW1wX3N0YXRlKGNwdSwgc3RkZXJyLCBmcHJpbnRmLCAwKTsKKysgICAgICAgIGJhY2t0cmFjZV9wcmludCgpOworICAgICAgICAgZXhpdCgxKTsKKyAgICAgfQorICNlbHNlIC8qIF9XSU4zMiAqLworZGlmZiAtLWdpdCBhL2N1c3RvbV9kZWJ1Zy5oIGIvY3VzdG9tX2RlYnVnLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mMDI5ZTQ1CistLS0gL2Rldi9udWxsCisrKysgYi9jdXN0b21fZGVidWcuaAorQEAgLTAsMCArMSwyNCBAQAorKyNpbmNsdWRlIDxleGVjaW5mby5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNkZWZpbmUgQkFDS1RSQUNFX01BWCAxMjgKKytzdGF0aWMgdm9pZCBiYWNrdHJhY2VfcHJpbnQodm9pZCkKKyt7CisrCWludCBuZnVuY3MgPSAwOworKwl2b2lkICpidWZbQkFDS1RSQUNFX01BWF07CisrCWNoYXIgKipzeW1ib2xzOworKwlpbnQgaTsKKysKKysJbmZ1bmNzID0gYmFja3RyYWNlKGJ1ZiwgQkFDS1RSQUNFX01BWCk7CisrCisrCXN5bWJvbHMgPSBiYWNrdHJhY2Vfc3ltYm9scyhidWYsIG5mdW5jcyk7CisrCWlmIChzeW1ib2xzID09IE5VTEwpIHsKKysJCWZwcmludGYoc3RkZXJyLCAiYmFja3RyYWNlX3ByaW50IGZhaWxlZCB0byBnZXQgc3ltYm9scyIpOworKwkJcmV0dXJuOworKwl9CisrCisrCWZwcmludGYoc3RkZXJyLCAiQmFja3RyYWNlIC4uLlxuIik7CisrCWZvciAoaSA9IDA7IGkgPCBuZnVuY3M7IGkrKykKKysJCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHN5bWJvbHNbaV0pOworKworKwlmcmVlKHN5bWJvbHMpOworK30KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2NwdXMuYy1xZW11X211dGV4X2xvY2tfaW90aHJlYWQtZml4LXJhY2UtY29uZGl0aW9uLWEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvY3B1cy5jLXFlbXVfbXV0ZXhfbG9ja19pb3RocmVhZC1maXgtcmFjZS1jb25kaXRpb24tYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWRmZmFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2NwdXMuYy1xZW11X211dGV4X2xvY2tfaW90aHJlYWQtZml4LXJhY2UtY29uZGl0aW9uLWEucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworRnJvbSBmMzU0YjkzMzM0MDhkNDExODU0YWYwNThjYzQ0Y2NlZGE2MGI0NDczIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuPUMzPUFEYmFsPTIwTGltPUMzPUIzbj89IDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgorRGF0ZTogVGh1LCAzIFNlcCAyMDE1IDE0OjA3OjM0IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNwdXMuYzogcWVtdV9tdXRleF9sb2NrX2lvdGhyZWFkIGZpeCByYWNlIGNvbmRpdGlvbiBhdCBjcHUKKyB0aHJlYWQgaW5pdAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitXaGVuIFFFTVUgc3RhcnRzIHRoZSBSQ1UgdGhyZWFkIGV4ZWN1dGVzIHFlbXVfbXV0ZXhfbG9ja190aHJlYWQKK2NhdXNpbmcgZXJyb3IgInFlbXU6cWVtdV9jcHVfa2lja190aHJlYWQ6IE5vIHN1Y2ggcHJvY2VzcyIgYW5kIGV4aXRzLgorCitUaGlzIGlzbid0IG9jY3VyIGZyZXF1ZW50bHkgYnV0IGluIGdsaWJjIHRoZSB0aHJlYWQgaWQgY2FuIGV4aXN0IGFuZAordGhpcyBub3QgZ3VhcmFudGVlIHRoYXQgdGhlIHRocmVhZCBpcyBvbiBhY3RpdmUvcnVubmluZyBzdGF0ZS4gSWYgaXMKK2luc2VydGVkIGEgc2xlZXAoMSkgYWZ0ZXIgbmV3dGhyZWFkIGFzc2lnbm1lbnQgWzFdIHRoZSBpc3N1ZSBhcHBlYXJzLgorCitTbyBub3QgbWFrZSBhc3N1bXB0aW9uIHRoYXQgdGhyZWFkIGV4aXN0IGlmIGZpcnN0X2NwdS0+dGhyZWFkIGlzIHNldAordGhlbiBjaGFuZ2UgdGhlIHZhbGlkYXRpb24gb2YgY3B1IHRvIGNyZWF0ZWQgdGhhdCBpcyBzZXQgaW50byBjcHUKK3RocmVhZHMgKGt2bSwgdGNnLCBkdW1teSkuCisKK1sxXSBodHRwczovL3NvdXJjZXdhcmUub3JnL2dpdC8/cD1nbGliYy5naXQ7YT1ibG9iO2Y9bnB0bC9wdGhyZWFkX2NyZWF0ZS5jO2g9ZDEwZjRlYTgwMDRlMWQ4ZjNhMjY4Yjk1Y2MwZjhkOTNiOGQ4OTg2NztoYj1IRUFEI2w2MjEKKworU2lnbmVkLW9mZi1ieTogQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBjcHVzLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jcHVzLmMgYi9jcHVzLmMKK2luZGV4IDdlNDc4NmUuLjA1ZTU0MDAgMTAwNjQ0CistLS0gYS9jcHVzLmMKKysrKyBiL2NwdXMuYworQEAgLTExNzEsNyArMTE3MSw3IEBAIHZvaWQgcWVtdV9tdXRleF9sb2NrX2lvdGhyZWFkKHZvaWQpCisgICAgICAqIFRDRyBjb2RlIGV4ZWN1dGlvbi4KKyAgICAgICovCisgICAgIGlmICghdGNnX2VuYWJsZWQoKSB8fCBxZW11X2luX3ZjcHVfdGhyZWFkKCkgfHwKKy0gICAgICAgICFmaXJzdF9jcHUgfHwgIWZpcnN0X2NwdS0+dGhyZWFkKSB7CisrICAgICAgICAhZmlyc3RfY3B1IHx8ICFmaXJzdF9jcHUtPmNyZWF0ZWQpIHsKKyAgICAgICAgIHFlbXVfbXV0ZXhfbG9jaygmcWVtdV9nbG9iYWxfbXV0ZXgpOworICAgICAgICAgYXRvbWljX2RlYygmaW90aHJlYWRfcmVxdWVzdGluZ19tdXRleCk7CisgICAgIH0gZWxzZSB7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9kaXNhYmxlLWdyYWJzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2Rpc2FibGUtZ3JhYnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE3MjZiMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9kaXNhYmxlLWdyYWJzLnBhdGNoCkBAIC0wLDAgKzEsNzIgQEAKK1doZW4gdGhlIHBvaW50ZXIgZW50ZXJzIHRoZSBRZW11IHdpbmRvdyBpdCBjYWxscyBTRExfV01fR3JhYklucHV0LCB3aGljaCBjYWxscworWEdyYWJQb2ludGVyIGluIGEgYnVzeWxvb3AgdW50aWwgaXQgcmV0dXJucyBHcmFiU3VjY2Vzcy4gSG93ZXZlciBpZiB0aGVyZSdzIGFscmVhZHkKK2EgcG9pbnRlciBncmFiIChzY3JlZW4gaXMgbG9ja2VkLCBhIG1lbnUgaXMgb3BlbikgdGhlbiBxZW11IHdpbGwgaGFuZyB1bnRpbCB0aGUKK2dyYWIgY2FuIGJlIHRha2VuLiAgSW4gdGhlIHNwZWNpZmljIGNhc2Ugb2YgYSBoZWFkbGVzcyBYIHNlcnZlciBvbiBhbiBhdXRvYnVpbGRlciwgb25jZQordGhlIHNjcmVlbnNhdmVyIGhhcyBraWNrZWQgaW4gYW55IHFlbXUgaW5zdGFuY2UgdGhhdCBhcHBlYXJzIHVuZGVybmVhdGggdGhlCitwb2ludGVyIHdpbGwgaGFuZy4KKworSSdtIG5vdCBlbnRpcmVseSBzdXJlIHdoeSBwb2ludGVyIGdyYWJzIGFyZSByZXF1aXJlZCAodGhlIGRvY3VtZW50YXRpb24KK2V4cGxpY2l0bHkgc2F5cyBpdCBkb2Vzbid0IGRvIGdyYWJzIHdoZW4gdXNpbmcgYSB0YWJsZXQsIHdoaWNoIHdlIGFyZSkgc28gd3JhcAordGhlbSBpbiBhIGNvbmRpdGlvbmFsIHRoYXQgY2FuIGJlIHNldCBieSB0aGUgYXV0b2J1aWxkZXIgZW52aXJvbm1lbnQsIHByZXNlcnZpbmcKK3RoZSBjdXJyZW50IGdyYWJiaW5nIGJlaGF2aW91ciBmb3IgZXZlcnlvbmUgZWxzZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitGcm9tIDRiMTk4OGVjYjAxYTE3ODI2OWVjMDUxM2E3NWYyZWM2MjBjN2VmNmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorRGF0ZTogV2VkLCAxOCBTZXAgMjAxMyAxNDowNDo1NCArMDEwMAorU3ViamVjdDogW1BBVENIXSBzZGwuYzogYWxsb3cgdXNlciB0byBkaXNhYmxlIHBvaW50ZXIgZ3JhYnMKKworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEVyaWMgQsOpbmFyZCA8ZXJpY0BldWtyZWEuY29tPgorLS0tCisgdWkvc2RsLmMgfCAxMiArKysrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3VpL3NkbC5jIGIvdWkvc2RsLmMKK2luZGV4IDM5YTQyZDYuLjliOGFiZTUgMTAwNjQ0CistLS0gYS91aS9zZGwuYworKysrIGIvdWkvc2RsLmMKK0BAIC01OSw2ICs1OSwxMCBAQCBzdGF0aWMgU0RMX0N1cnNvciAqZ3Vlc3Rfc3ByaXRlID0gTlVMTDsKKyBzdGF0aWMgU0RMX1BpeGVsRm9ybWF0IGhvc3RfZm9ybWF0OworIHN0YXRpYyBpbnQgc2NhbGluZ19hY3RpdmUgPSAwOworIHN0YXRpYyBOb3RpZmllciBtb3VzZV9tb2RlX25vdGlmaWVyOworKyNpZm5kZWYgVHJ1ZQorKyNkZWZpbmUgVHJ1ZSAxCisrI2VuZGlmCisrc3RhdGljIGRvaW5nX2dyYWJzID0gVHJ1ZTsKKyAKKyBzdGF0aWMgdm9pZCBzZGxfdXBkYXRlKERpc3BsYXlDaGFuZ2VMaXN0ZW5lciAqZGNsLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCitAQCAtMzg0LDE0ICszODgsMTYgQEAgc3RhdGljIHZvaWQgc2RsX2dyYWJfc3RhcnQodm9pZCkKKyAgICAgICAgICAgICBTRExfV2FycE1vdXNlKGd1ZXN0X3gsIGd1ZXN0X3kpOworICAgICB9IGVsc2UKKyAgICAgICAgIHNkbF9oaWRlX2N1cnNvcigpOworLSAgICBTRExfV01fR3JhYklucHV0KFNETF9HUkFCX09OKTsKKysgICAgaWYgKGRvaW5nX2dyYWJzKQorKyAgICAgIFNETF9XTV9HcmFiSW5wdXQoU0RMX0dSQUJfT04pOworICAgICBndWlfZ3JhYiA9IDE7CisgICAgIHNkbF91cGRhdGVfY2FwdGlvbigpOworIH0KKyAKKyBzdGF0aWMgdm9pZCBzZGxfZ3JhYl9lbmQodm9pZCkKKyB7CistICAgIFNETF9XTV9HcmFiSW5wdXQoU0RMX0dSQUJfT0ZGKTsKKysgICAgaWYgKGRvaW5nX2dyYWJzKQorKyAgICAgIFNETF9XTV9HcmFiSW5wdXQoU0RMX0dSQUJfT0ZGKTsKKyAgICAgZ3VpX2dyYWIgPSAwOworICAgICBzZGxfc2hvd19jdXJzb3IoKTsKKyAgICAgc2RsX3VwZGF0ZV9jYXB0aW9uKCk7CitAQCAtOTA5LDYgKzkxNSw4IEBAIHZvaWQgc2RsX2Rpc3BsYXlfaW5pdChEaXNwbGF5U3RhdGUgKmRzLCBpbnQgZnVsbF9zY3JlZW4sIGludCBub19mcmFtZSkKKyAgICAgICogVGhpcyByZXF1aXJlcyBTREwgPj0gMS4yLjE0LiAqLworICAgICBzZXRlbnYoIlNETF9ESVNBQkxFX0xPQ0tfS0VZUyIsICIxIiwgMSk7CisgCisrICAgIGRvaW5nX2dyYWJzID0gKGdldGVudigiUUVNVV9ET05UX0dSQUIiKSA9PSBOVUxMKTsKKysKKyAgICAgZmxhZ3MgPSBTRExfSU5JVF9WSURFTyB8IFNETF9JTklUX05PUEFSQUNIVVRFOworICAgICBpZiAoU0RMX0luaXQgKGZsYWdzKSkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBTREwoJXMpIC0gZXhpdGluZ1xuIiwKKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvZXhjbHVkZS1zb21lLWFybS1FQUJJLW9ic29sZXRlLXN5c2NhbGxzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2V4Y2x1ZGUtc29tZS1hcm0tRUFCSS1vYnNvbGV0ZS1zeXNjYWxscy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzFiZGE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2V4Y2x1ZGUtc29tZS1hcm0tRUFCSS1vYnNvbGV0ZS1zeXNjYWxscy5wYXRjaApAQCAtMCwwICsxLDkzIEBACitbUEFUQ0hdIGV4Y2x1ZGUgc29tZSBhcm0gRUFCSSBvYnNvbGV0ZSBzeXNjYWxscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworc29tZSBzeXNjYWxscyBhcmUgb2Jzb2xldGUgYW5kIG5vIGxvbmdlciBhdmFpbGFibGUgZm9yIEVBQkksIGV4Y2x1ZGUgdGhlbSB0bworZml4IHRoZSBiZWxvdyBlcnJvcjoKKwlJbiBmaWxlIGluY2x1ZGVkIGZyb20gcWVtdS1zZWNjb21wLmM6MTY6MDoKKwlxZW11LXNlY2NvbXAuYzoyODo3OiBlcnJvcjogJ19fTlJfc2VsZWN0JyB1bmRlY2xhcmVkIGhlcmUgKG5vdCBpbiBhIGZ1bmN0aW9uKQorCSAgICAgIHsgU0NNUF9TWVMoc2VsZWN0KSwgMjUyIH0sCisJICAgICAgICBeCisJcWVtdS1zZWNjb21wLmM6MzY6NzogZXJyb3I6ICdfX05SX21tYXAnIHVuZGVjbGFyZWQgaGVyZSAobm90IGluIGEgZnVuY3Rpb24pCisJICAgICAgeyBTQ01QX1NZUyhtbWFwKSwgMjQ3IH0sCisJICAgICAgICBeCisJcWVtdS1zZWNjb21wLmM6NTc6NzogZXJyb3I6ICdfX05SX2dldHJsaW1pdCcgdW5kZWNsYXJlZCBoZXJlIChub3QgaW4gYSBmdW5jdGlvbikKKwkgICAgICB7IFNDTVBfU1lTKGdldHJsaW1pdCksIDI0NSB9LAorCSAgICAgICAgXgorCXFlbXUtc2VjY29tcC5jOjk2Ojc6IGVycm9yOiAnX19OUl90aW1lJyB1bmRlY2xhcmVkIGhlcmUgKG5vdCBpbiBhIGZ1bmN0aW9uKQorCSAgICAgIHsgU0NNUF9TWVModGltZSksIDI0NSB9LAorCSAgICAgICAgXgorCXFlbXUtc2VjY29tcC5jOjE4NTo3OiBlcnJvcjogJ19fTlJfYWxhcm0nIHVuZGVjbGFyZWQgaGVyZSAobm90IGluIGEgZnVuY3Rpb24pCisJICAgICAgeyBTQ01QX1NZUyhhbGFybSksIDI0MSB9LAorCitwbGVhc2UgcmVmZXIgc291cmNlIGZpbGVzOgorCWFyY2gvYXJtL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKK29yIGtlcm5lbCBoZWFkZXI6CisJL3Vzci9pbmNsdWRlL2FzbS91bmlzdGQuaAorCitTaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBxZW11LXNlY2NvbXAuYyB8IDE0ICsrKysrKysrLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3FlbXUtc2VjY29tcC5jIGIvcWVtdS1zZWNjb21wLmMKK2luZGV4IGNhYTkyNmUuLjVhNzg1MDIgMTAwNjQ0CistLS0gYS9xZW11LXNlY2NvbXAuYworKysrIGIvcWVtdS1zZWNjb21wLmMKK0BAIC0yNSwxNSArMjUsMjEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBRZW11U2VjY29tcFN5c2NhbGwgc2VjY29tcF93aGl0ZWxpc3RbXSA9IHsKKyAgICAgeyBTQ01QX1NZUyh0aW1lcl9zZXR0aW1lKSwgMjU1IH0sCisgICAgIHsgU0NNUF9TWVModGltZXJfZ2V0dGltZSksIDI1NCB9LAorICAgICB7IFNDTVBfU1lTKGZ1dGV4KSwgMjUzIH0sCisrI2lmICFkZWZpbmVkKF9fQVJNX0VBQklfXykKKyAgICAgeyBTQ01QX1NZUyhzZWxlY3QpLCAyNTIgfSwKKysgICAgeyBTQ01QX1NZUyh0aW1lKSwgMjQ1IH0sCisrICAgIHsgU0NNUF9TWVMoYWxhcm0pLCAyNDEgfSwKKysgICAgeyBTQ01QX1NZUyhnZXRybGltaXQpLCAyNDUgfSwKKysgICAgeyBTQ01QX1NZUyhtbWFwKSwgMjQ3IH0sCisrICAgIHsgU0NNUF9TWVMoc29ja2V0Y2FsbCksIDI1MCB9LAorKyAgICB7IFNDTVBfU1lTKGlwYyksIDI0NSB9LAorKyNlbmRpZgorICAgICB7IFNDTVBfU1lTKHJlY3Zmcm9tKSwgMjUxIH0sCisgICAgIHsgU0NNUF9TWVMoc2VuZHRvKSwgMjUwIH0sCistICAgIHsgU0NNUF9TWVMoc29ja2V0Y2FsbCksIDI1MCB9LAorICAgICB7IFNDTVBfU1lTKHJlYWQpLCAyNDkgfSwKKyAgICAgeyBTQ01QX1NZUyhpb19zdWJtaXQpLCAyNDkgfSwKKyAgICAgeyBTQ01QX1NZUyhicmspLCAyNDggfSwKKyAgICAgeyBTQ01QX1NZUyhjbG9uZSksIDI0NyB9LAorLSAgICB7IFNDTVBfU1lTKG1tYXApLCAyNDcgfSwKKyAgICAgeyBTQ01QX1NZUyhtcHJvdGVjdCksIDI0NiB9LAorICAgICB7IFNDTVBfU1lTKGV4ZWN2ZSksIDI0NSB9LAorICAgICB7IFNDTVBfU1lTKG9wZW4pLCAyNDUgfSwKK0BAIC00OCwxMyArNTQsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBRZW11U2VjY29tcFN5c2NhbGwgc2VjY29tcF93aGl0ZWxpc3RbXSA9IHsKKyAgICAgeyBTQ01QX1NZUyhiaW5kKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMobGlzdGVuKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMoc2VtZ2V0KSwgMjQ1IH0sCistICAgIHsgU0NNUF9TWVMoaXBjKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMoZ2V0dGltZW9mZGF5KSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMocmVhZGxpbmspLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhhY2Nlc3MpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhwcmN0bCksIDI0NSB9LAorICAgICB7IFNDTVBfU1lTKHNpZ25hbGZkKSwgMjQ1IH0sCistICAgIHsgU0NNUF9TWVMoZ2V0cmxpbWl0KSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMoc2V0X3RpZF9hZGRyZXNzKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMoc3RhdGZzKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVModW5saW5rKSwgMjQ1IH0sCitAQCAtOTMsNyArOTcsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IFFlbXVTZWNjb21wU3lzY2FsbCBzZWNjb21wX3doaXRlbGlzdFtdID0geworICAgICB7IFNDTVBfU1lTKHRpbWVzKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMoZXhpdCksIDI0NSB9LAorICAgICB7IFNDTVBfU1lTKGNsb2NrX2dldHRpbWUpLCAyNDUgfSwKKy0gICAgeyBTQ01QX1NZUyh0aW1lKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMocmVzdGFydF9zeXNjYWxsKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMocHdyaXRlNjQpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhuYW5vc2xlZXApLCAyNDUgfSwKK0BAIC0xODIsNyArMTg1LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBRZW11U2VjY29tcFN5c2NhbGwgc2VjY29tcF93aGl0ZWxpc3RbXSA9IHsKKyAgICAgeyBTQ01QX1NZUyhsc3RhdDY0KSwgMjQxIH0sCisgICAgIHsgU0NNUF9TWVMoc2VuZGZpbGU2NCksIDI0MSB9LAorICAgICB7IFNDTVBfU1lTKHVnZXRybGltaXQpLCAyNDEgfSwKKy0gICAgeyBTQ01QX1NZUyhhbGFybSksIDI0MSB9LAorICAgICB7IFNDTVBfU1lTKHJ0X3NpZ3N1c3BlbmQpLCAyNDEgfSwKKyAgICAgeyBTQ01QX1NZUyhydF9zaWdxdWV1ZWluZm8pLCAyNDEgfSwKKyAgICAgeyBTQ01QX1NZUyhydF90Z3NpZ3F1ZXVlaW5mbyksIDI0MSB9LAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvZml4LWxpYmNhcC1oZWFkZXItaXNzdWUtb24tc29tZS1kaXN0cm8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvZml4LWxpYmNhcC1oZWFkZXItaXNzdWUtb24tc29tZS1kaXN0cm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNhNmVhMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9maXgtbGliY2FwLWhlYWRlci1pc3N1ZS1vbi1zb21lLWRpc3Ryby5wYXRjaApAQCAtMCwwICsxLDg0IEBACitmaXggbGliY2FwIGhlYWRlciBpc3N1ZSBvbiBzb21lIGRpc3RybworCisxLCBXaGVuIGJ1aWxkIHFlbXUtbmF0aXZlIG9uIFNMRUQgMTEuMiwgdGhlcmUgaXMgYW4gZXJyb3I6CisuLi4KK3wgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC91c3IvaW5jbHVkZS9iaXRzL3NpZ2NvbnRleHQuaDoyOCwKK3wgIGZyb20gL3Vzci9pbmNsdWRlL3NpZ25hbC5oOjMzOSwKK3wgIGZyb20gL2J1aWxkYXJlYTIvdG1wL3dvcmsvaTY4Ni1saW51eC9xZW11LW5hdGl2ZS8xLjQuMC1yMC8KK3FlbXUtMS40LjAvaW5jbHVkZS9xZW11LWNvbW1vbi5oOjQyLAorfCAgZnJvbSBmc2Rldi92aXJ0ZnMtcHJveHktaGVscGVyLmM6MjM6Cit8ICAvdXNyL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaDoyODogZXJyb3I6IGV4cGVjdGVkIHNwZWNpZmllci0KK3F1YWxpZmllci1saXN0IGJlZm9yZSAnX191NjQnCit8ICAvdXNyL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaDoxOTE6IGVycm9yOiBleHBlY3RlZCBzcGVjaWZpZXItCitxdWFsaWZpZXItbGlzdCBiZWZvcmUgJ19fdTY0JworLi4uCisKKzIsIFRoZSB2aXJ0ZnMtcHJveHktaGVscGVyLmMgaW5jbHVkZXMgPHN5cy9jYXBhYmlsaXR5Lmg+IGFuZAorcWVtdS1jb21tb24uaCBpbiBzZXF1ZW5jZS4gVGhlIGhlYWRlciBpbmNsdWRlIG1hcCBpczoKKyhgLS0+JyBwcmVzZW50cyBgaW5jbHVkZScpCisuLi4KKyJ2aXJ0ZnMtcHJveHktaGVscGVyLmMiIC0tPiA8c3lzL2NhcGFiaWxpdHkuaD4KKy4uLgorInZpcnRmcy1wcm94eS1oZWxwZXIuYyIgLS0+ICJxZW11LWNvbW1vbi5oIiAtLT4gPHNpZ25hbC5oPiAtLT4KKzxiaXRzL3NpZ2NvbnRleHQuaD4gLS0+IDxhc20vc2lnY29udGV4dC5oPiAtLT4gPGxpbnV4L3R5cGVzLmg+IC0tPgorPGFzbS90eXBlcy5oPiAtLT4gPGFzbS1nZW5lcmljL3R5cGVzLmg+IC0tPiA8YXNtLWdlbmVyaWMvaW50LWxsNjQuaD4KKy4uLgorCiszLCBUaGUgYnVnIGlzIGZvdW5kIG9uIFNMRUQgMTEuMiB4ODYuIEluIGxpYmNhcCBoZWFkZXIgZmlsZQorL3Vzci9pbmNsdWRlL3N5cy9jYXBhYmlsaXR5LmgsIGl0IGRvZXMgZXZpbCBzdHVmZiBsaWtlIHRoaXM6CisuLi4KKyAgMjUgLyoKKyAgMjYgICogTWFrZSBzdXJlIHdlIGNhbiBiZSBpbmNsdWRlZCBmcm9tIHVzZXJsYW5kIGJ5IHByZXZlbnRpbmcKKyAgMjcgICogY2FwYWJpbGl0eS5oIGZyb20gaW5jbHVkaW5nIG90aGVyIGtlcm5lbCBoZWFkZXJzCisgIDI4ICAqLworICAyOSAjZGVmaW5lIF9MSU5VWF9UWVBFU19ICisgIDMwICNkZWZpbmUgX0xJTlVYX0ZTX0gKKyAgMzEgI2RlZmluZSBfX0xJTlVYX0NPTVBJTEVSX0gKKyAgMzIgI2RlZmluZSBfX3VzZXIKKyAgMzMKKyAgMzQgdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191MzI7CisgIDM1IHR5cGVkZWYgX191MzIgX19sZTMyOworLi4uCitUaGlzIGNvbXBsZXRlbHkgcHJldmVudHMgaW5jbHVkaW5nIC91c3IvaW5jbHVkZS9saW51eC90eXBlcy5oLgorVGhlIGFib3ZlIGA8YXNtL3NpZ2NvbnRleHQuaD4gLS0+IDxsaW51eC90eXBlcy5oPicgaXMgcHJldmVudGVkLAorYW5kICdfX3U2NCcgaXMgZGVmaW5lZCBpbiA8YXNtLWdlbmVyaWMvaW50LWxsNjQuaD4uCisKKzQsIE1vZGlmeSB2aXJ0ZnMtcHJveHktaGVscGVyLmMgdG8gaW5jbHVkZSA8c3lzL2NhcGFiaWxpdHkuaD4KK2xhc3QgdG8gd29ya2Fyb3VuZCB0aGUgaXNzdWUuCisKK2h0dHA6Ly93d3cubGludXh0di5vcmcvcGlwZXJtYWlsL3Zkci8yMDA5LUF1Z3VzdC8wMjExOTQuaHRtbAoraHR0cDovL3BhdGNod29yay5saW51eHR2Lm9yZy9wYXRjaC8xMjc0OC8KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBmc2Rldi92aXJ0ZnMtcHJveHktaGVscGVyLmMgfCAgICA3ICsrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZnNkZXYvdmlydGZzLXByb3h5LWhlbHBlci5jIGIvZnNkZXYvdmlydGZzLXByb3h5LWhlbHBlci5jCistLS0gYS9mc2Rldi92aXJ0ZnMtcHJveHktaGVscGVyLmMKKysrKyBiL2ZzZGV2L3ZpcnRmcy1wcm94eS1oZWxwZXIuYworQEAgLTEyLDcgKzEyLDYgQEAKKyAjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisgI2luY2x1ZGUgPGdldG9wdC5oPgorICNpbmNsdWRlIDxzeXNsb2cuaD4KKy0jaW5jbHVkZSA8c3lzL2NhcGFiaWxpdHkuaD4KKyAjaW5jbHVkZSA8c3lzL2ZzdWlkLmg+CisgI2luY2x1ZGUgPHN5cy92ZnMuaD4KKyAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CitAQCAtMjYsNyArMjUsMTEgQEAKKyAjaW5jbHVkZSAidmlydGlvLTlwLW1hcnNoYWwuaCIKKyAjaW5jbHVkZSAiaHcvOXBmcy92aXJ0aW8tOXAtcHJveHkuaCIKKyAjaW5jbHVkZSAiZnNkZXYvdmlydGlvLTlwLW1hcnNoYWwuaCIKKy0KKysvKgorKyAqIEluY2x1ZGUgdGhpcyBvbmUgbGFzdCBkdWUgdG8gc29tZSB2ZXJzaW9ucyBvZiBpdCBiZWluZyBidWdneToKKysgKiBodHRwOi8vd3d3LmxpbnV4dHYub3JnL3BpcGVybWFpbC92ZHIvMjAwOS1BdWd1c3QvMDIxMTk0Lmh0bWwKKysgKi8KKysjaW5jbHVkZSA8c3lzL2NhcGFiaWxpdHkuaD4KKyAjZGVmaW5lIFBST0dOQU1FICJ2aXJ0ZnMtcHJveHktaGVscGVyIgorIAorICNpZm5kZWYgWEZTX1NVUEVSX01BR0lDCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9wb3dlcnBjX3JvbS5iaW4gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcG93ZXJwY19yb20uYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MDQ0MjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcG93ZXJwY19yb20uYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9xZW11LWVubGFyZ2UtZW52LWVudHJ5LXNpemUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcWVtdS1lbmxhcmdlLWVudi1lbnRyeS1zaXplLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NDI1YWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcWVtdS1lbmxhcmdlLWVudi1lbnRyeS1zaXplLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK3FlbXU6IEFkZCBhZGRpdGlvbiBlbnZpcm9ubWVudCBzcGFjZSB0byBib290IGxvYWRlciBxZW11LXN5c3RlbS1taXBzIAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgLSBPRSB1c2VzIGRlZXAgcGF0aHMKKworSWYgeW91IGNyZWF0ZSBhIHByb2plY3Qgd2l0aCB2ZXJ5IGxvbmcgZGlyZWN0b3J5IG5hbWVzIGxpa2UgMTI4IGNoYXJhY3RlcnMKK2RlZXAgYW5kIHVzZSBORlMsIHRoZSBrZXJuZWwgYXJndW1lbnRzIHdpbGwgYmUgdHJ1bmNhdGVkLiBUaGUga2VybmVsIHdpbGwKK2FjY2VwdCBsb25nZXIgc3RyaW5ncyBzdWNoIGFzIDEwMjQgYnl0ZXMsIGJ1dCB0aGUgcWVtdSBib290IGxvYWRlciBkZWZhdWx0ZWQKK3RvIG9ubHkgMjU2IGJ5dGVzLiBUaGlzIHBhdGNoIGV4cGFuZHMgdGhlIGxpbWl0LgorCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgaHcvbWlwcy9taXBzX21hbHRhLmMgICAgfCAgICAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ody9taXBzL21pcHNfbWFsdGEuYyBiL2h3L21pcHMvbWlwc19tYWx0YS5jCitpbmRleCA5ZDUyMWNjLi4xN2MwMzkxIDEwMDY0NAorLS0tIGEvaHcvbWlwcy9taXBzX21hbHRhLmMKKysrKyBiL2h3L21pcHMvbWlwc19tYWx0YS5jCitAQCAtNTMsNyArNTMsNyBAQAorIAorICNkZWZpbmUgRU5WUF9BRERSCQkweDgwMDAyMDAwbAorICNkZWZpbmUgRU5WUF9OQl9FTlRSSUVTCSAJMTYKKy0jZGVmaW5lIEVOVlBfRU5UUllfU0laRQkgCTI1NgorKyNkZWZpbmUgRU5WUF9FTlRSWV9TSVpFCSAJMTAyNAorIAorIC8qIEhhcmR3YXJlIGFkZHJlc3NlcyAqLworICNkZWZpbmUgRkxBU0hfQUREUkVTUyAweDFlMDAwMDAwVUxMCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YjhlOTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsOCBAQAorIyEvYmluL3NoCisjCisjVGhpcyBzY3JpcHQgaXMgdXNlZCB0byBydW4gcWVtdSB0ZXN0IHN1aXRlcworcHRlc3RkaXI9JChwd2QpCitjZCB0ZXN0cworCitleHBvcnQgU1JDX1BBVEg9JHB0ZXN0ZGlyCittYWtlIC1rIHJ1bnRlc3QtVEVTVFMgfCBzZWQgJy86IE9LLyBzL14vUEFTUzogL2cnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvc21jOTFjMTExX2ZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9zbWM5MWMxMTFfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzN2U3NzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvc21jOTFjMTExX2ZpeC5wYXRjaApAQCAtMCwwICsxLDc0IEBACitUaGUgc21jOTFjMTExLmMgZHJpdmVyIGFwcGVhcnMgdG8gaGF2ZSBzZXZlcmFsIGlzc3Vlcy4gVGhlIGNhbl9yZWNlaXZlKCkKK2Z1bmN0aW9uIGNhbiByZXR1cm4gdGhhdCB0aGUgZHJpdmVyIGlzIHJlYWR5IHdoZW4gcnhfZmlmbyBoYXMgbm90IGJlZW4gCitmcmVlZCB5ZXQuIFRoZXJlIGlzIGFsc28gbm8gc2FuaXR5IGNoZWNrIG9mIHJ4X2ZpZm8oKSBpbiBfcmVjZWl2ZSgpIHdoaWNoCitjYW4gbGVhZCB0byBjb3JydXB0aW9uIG9mIHRoZSByeF9maWZvIGFycmF5LgorCityZWxlYXNlX3BhY2tldCgpIGNhbiBhbHNvIGNhbGwgcWVtdV9mbHVzaF9xdWV1ZWRfcGFja2V0cygpIGJlZm9yZSByeF9maWZvIAoraGFzIGJlZW4gY2xlYW5lZCB1cCwgcmVzdWx0aW5nIGluIGNhc2VzIHdoZXJlIHBhY2tldHMgYXJlIHN1Ym1pdHRlZAorZm9yIHdoaWNoIHRoZXJlIGlzIG5vdCB5ZXQgYW55IHNwYWNlLgorCitUaGlzIHBhdGNoIHRoZXJlZm9yZToKKworKiBmaXhlcyB0aGUgbG9naWMgaW4gY2FuX3JlY2VpdmUoKQorKiBhZGRzIGxvZ2ljIHRvIHJlY2VpdmUoKSBhcyBhIHNhbml0eSBjaGVjaworKiBtb3ZlcyB0aGUgZmx1c2goKSBjYWxscyB0byB0aGUgY29ycmVjdCBwbGFjZXMgd2hlcmUgZGF0YSBpcyByZWFkeQorICB0byBiZSByZWNlaXZlZAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW2Rpc2N1c3Npb24gaW4gcHJvZ3Jlc3Mgb24gbWFpbGluZyBsaXN0XQorUlAgMjAxNS85LzcKKworSW5kZXg6IHFlbXUtMi40LjAvaHcvbmV0L3NtYzkxYzExMS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcWVtdS0yLjQuMC5vcmlnL2h3L25ldC9zbWM5MWMxMTEuYworKysrIHFlbXUtMi40LjAvaHcvbmV0L3NtYzkxYzExMS5jCitAQCAtMTg1LDcgKzE4NSw2IEBAIHN0YXRpYyB2b2lkIHNtYzkxYzExMV9yZWxlYXNlX3BhY2tldChzbWMKKyAgICAgcy0+YWxsb2NhdGVkICY9IH4oMSA8PCBwYWNrZXQpOworICAgICBpZiAocy0+dHhfYWxsb2MgPT0gMHg4MCkKKyAgICAgICAgIHNtYzkxYzExMV90eF9hbGxvYyhzKTsKKy0gICAgcWVtdV9mbHVzaF9xdWV1ZWRfcGFja2V0cyhxZW11X2dldF9xdWV1ZShzLT5uaWMpKTsKKyB9CisgCisgLyogRmx1c2ggdGhlIFRYIEZJRk8uICAqLworQEAgLTIzNyw5ICsyMzYsMTEgQEAgc3RhdGljIHZvaWQgc21jOTFjMTExX2RvX3R4KHNtYzkxYzExMV9zdAorICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAjZW5kaWYKKy0gICAgICAgIGlmIChzLT5jdHIgJiBDVFJfQVVUT19SRUxFQVNFKQorKyAgICAgICAgaWYgKHMtPmN0ciAmIENUUl9BVVRPX1JFTEVBU0UpIHsKKyAgICAgICAgICAgICAvKiBSYWNlPyAgKi8KKyAgICAgICAgICAgICBzbWM5MWMxMTFfcmVsZWFzZV9wYWNrZXQocywgcGFja2V0bnVtKTsKKysgICAgICAgICAgICBxZW11X2ZsdXNoX3F1ZXVlZF9wYWNrZXRzKHFlbXVfZ2V0X3F1ZXVlKHMtPm5pYykpOworKyAgICAgICAgfQorICAgICAgICAgZWxzZSBpZiAocy0+dHhfZmlmb19kb25lX2xlbiA8IE5VTV9QQUNLRVRTKQorICAgICAgICAgICAgIHMtPnR4X2ZpZm9fZG9uZVtzLT50eF9maWZvX2RvbmVfbGVuKytdID0gcGFja2V0bnVtOworICAgICAgICAgcWVtdV9zZW5kX3BhY2tldChxZW11X2dldF9xdWV1ZShzLT5uaWMpLCBwLCBsZW4pOworQEAgLTM3OSw5ICszODAsMTEgQEAgc3RhdGljIHZvaWQgc21jOTFjMTExX3dyaXRlYih2b2lkICpvcGFxdQorICAgICAgICAgICAgICAgICAgICAgc21jOTFjMTExX3JlbGVhc2VfcGFja2V0KHMsIHMtPnJ4X2ZpZm9bMF0pOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIHNtYzkxYzExMV9wb3BfcnhfZmlmbyhzKTsKKysgICAgICAgICAgICAgICAgcWVtdV9mbHVzaF9xdWV1ZWRfcGFja2V0cyhxZW11X2dldF9xdWV1ZShzLT5uaWMpKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgY2FzZSA1OiAvKiBSZWxlYXNlLiAgKi8KKyAgICAgICAgICAgICAgICAgc21jOTFjMTExX3JlbGVhc2VfcGFja2V0KHMsIHMtPnBhY2tldF9udW0pOworKyAgICAgICAgICAgICAgICBxZW11X2ZsdXNoX3F1ZXVlZF9wYWNrZXRzKHFlbXVfZ2V0X3F1ZXVlKHMtPm5pYykpOworICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICBjYXNlIDY6IC8qIEFkZCB0byBUWCBGSUZPLiAgKi8KKyAgICAgICAgICAgICAgICAgc21jOTFjMTExX3F1ZXVlX3R4KHMsIHMtPnBhY2tldF9udW0pOworQEAgLTY0Miw3ICs2NDIsNyBAQCBzdGF0aWMgaW50IHNtYzkxYzExMV9jYW5fcmVjZWl2ZShOZXRDbGllCisgCisgICAgIGlmICgocy0+cmNyICYgUkNSX1JYRU4pID09IDAgfHwgKHMtPnJjciAmIFJDUl9TT0ZUX1JTVCkpCisgICAgICAgICByZXR1cm4gMTsKKy0gICAgaWYgKHMtPmFsbG9jYXRlZCA9PSAoMSA8PCBOVU1fUEFDS0VUUykgLSAxKQorKyAgICBpZiAoKHMtPmFsbG9jYXRlZCA9PSAoMSA8PCBOVU1fUEFDS0VUUykgLSAxKSB8fCAocy0+cnhfZmlmb19sZW4gPT0gTlVNX1BBQ0tFVFMpKQorICAgICAgICAgcmV0dXJuIDA7CisgICAgIHJldHVybiAxOworIH0KK0BAIC02NzEsNiArNjcxLDggQEAgc3RhdGljIHNzaXplX3Qgc21jOTFjMTExX3JlY2VpdmUoTmV0Q2xpZQorICAgICAvKiBUT0RPOiBGbGFnIG92ZXJydW4gYW5kIHJlY2VpdmUgZXJyb3JzLiAgKi8KKyAgICAgaWYgKHBhY2tldHNpemUgPiAyMDQ4KQorICAgICAgICAgcmV0dXJuIC0xOworKyAgICBpZiAgKHMtPnJ4X2ZpZm9fbGVuID09IE5VTV9QQUNLRVRTKQorKyAgICAgICAgcmV0dXJuIC0xOyAgICAKKyAgICAgcGFja2V0bnVtID0gc21jOTFjMTExX2FsbG9jYXRlX3BhY2tldChzKTsKKyAgICAgaWYgKHBhY2tldG51bSA9PSAweDgwKQorICAgICAgICAgcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3NtYzkxYzExMV9maXgxLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3NtYzkxYzExMV9maXgxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMTIyM2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvc21jOTFjMTExX2ZpeDEucGF0Y2gKQEAgLTAsMCArMSw4NSBAQAorRnJvbTogUGV0ZXIgQ3Jvc3Rod2FpdGUgPGNyb3N0aHdhaXRlcGV0ZXJAZ21haWwuY29tPgorU3ViamVjdDogW1JGVCBQQVRDSCB2MSAxLzNdIG5ldDogc21jOTFjMTExOiBndWFyZCBmbHVzaF9xdWV1ZWRfcGFja2V0cygpIG9uCisgY2FuX3J4KCkKK0RhdGU6IFRodSwgMTAgU2VwIDIwMTUgMjE6MjM6NDMgLTA3MDAKKworQ2hlY2sgdGhhdCB0aGUgY29yZSBjYW4gb25jZSBhZ2FpbiByZWNlaXZlIHBhY2tldHMgYmVmb3JlIGFza2luZyB0aGUKK25ldCBsYXllciB0byBkbyBhIGZsdXNoLiBUaGlzIHdpbGwgbWFrZSBpdCBtb3JlIGNvbnZlbmllbnQgdG8gZmx1c2gKK3BhY2tldHMgd2hlbiBhZGRpbmcgbmV3IGNvbmRpdGlvbnMgdG8gY2FuX3JlY2VpdmUuCisKK0FkZCBtaXNzaW5nIGlmIGJyYWNlcyB3aGlsZSBtb3ZpbmcgdGhlIGNhbl9yZWNlaXZlKCkgY29yZSBjb2RlLgorCitTaWduZWQtb2ZmLWJ5OiBQZXRlciBDcm9zdGh3YWl0ZSA8Y3Jvc3Rod2FpdGUucGV0ZXJAZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCistLS0KKworIGh3L25ldC9zbWM5MWMxMTEuYyB8IDMwICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitJbmRleDogcWVtdS0yLjQuMC9ody9uZXQvc21jOTFjMTExLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxZW11LTIuNC4wLm9yaWcvaHcvbmV0L3NtYzkxYzExMS5jCisrKysgcWVtdS0yLjQuMC9ody9uZXQvc21jOTFjMTExLmMKK0BAIC0xMjQsNiArMTI0LDI0IEBAIHN0YXRpYyB2b2lkIHNtYzkxYzExMV91cGRhdGUoc21jOTFjMTExX3MKKyAgICAgcWVtdV9zZXRfaXJxKHMtPmlycSwgbGV2ZWwpOworIH0KKyAKKytzdGF0aWMgaW50IHNtYzkxYzExMV9jYW5fcmVjZWl2ZShzbWM5MWMxMTFfc3RhdGUgKnMpCisreworKyAgICBpZiAoKHMtPnJjciAmIFJDUl9SWEVOKSA9PSAwIHx8IChzLT5yY3IgJiBSQ1JfU09GVF9SU1QpKSB7CisrICAgICAgICByZXR1cm4gMTsKKysgICAgfQorKyAgICBpZiAocy0+YWxsb2NhdGVkID09ICgxIDw8IE5VTV9QQUNLRVRTKSAtIDEpIHsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrICAgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW5saW5lIHZvaWQgc21jOTFjMTExX2ZsdXNoX3F1ZXVlZF9wYWNrZXRzKHNtYzkxYzExMV9zdGF0ZSAqcykKKyt7CisrICAgIGlmIChzbWM5MWMxMTFfY2FuX3JlY2VpdmUocykpIHsKKysgICAgICAgIHFlbXVfZmx1c2hfcXVldWVkX3BhY2tldHMocWVtdV9nZXRfcXVldWUocy0+bmljKSk7CisrICAgIH0KKyt9CisrCisgLyogVHJ5IHRvIGFsbG9jYXRlIGEgcGFja2V0LiAgUmV0dXJucyAweDgwIG9uIGZhaWx1cmUuICAqLworIHN0YXRpYyBpbnQgc21jOTFjMTExX2FsbG9jYXRlX3BhY2tldChzbWM5MWMxMTFfc3RhdGUgKnMpCisgeworQEAgLTE4NSw3ICsyMDMsNyBAQCBzdGF0aWMgdm9pZCBzbWM5MWMxMTFfcmVsZWFzZV9wYWNrZXQoc21jCisgICAgIHMtPmFsbG9jYXRlZCAmPSB+KDEgPDwgcGFja2V0KTsKKyAgICAgaWYgKHMtPnR4X2FsbG9jID09IDB4ODApCisgICAgICAgICBzbWM5MWMxMTFfdHhfYWxsb2Mocyk7CistICAgIHFlbXVfZmx1c2hfcXVldWVkX3BhY2tldHMocWVtdV9nZXRfcXVldWUocy0+bmljKSk7CisrICAgIHNtYzkxYzExMV9mbHVzaF9xdWV1ZWRfcGFja2V0cyhzKTsKKyB9CisgCisgLyogRmx1c2ggdGhlIFRYIEZJRk8uICAqLworQEAgLTYzNiwxNSArNjU0LDExIEBAIHN0YXRpYyB1aW50MzJfdCBzbWM5MWMxMTFfcmVhZGwodm9pZCAqb3AKKyAgICAgcmV0dXJuIHZhbDsKKyB9CisgCistc3RhdGljIGludCBzbWM5MWMxMTFfY2FuX3JlY2VpdmUoTmV0Q2xpZW50U3RhdGUgKm5jKQorK3N0YXRpYyBpbnQgc21jOTFjMTExX2Nhbl9yZWNlaXZlX25jKE5ldENsaWVudFN0YXRlICpuYykKKyB7CisgICAgIHNtYzkxYzExMV9zdGF0ZSAqcyA9IHFlbXVfZ2V0X25pY19vcGFxdWUobmMpOworIAorLSAgICBpZiAoKHMtPnJjciAmIFJDUl9SWEVOKSA9PSAwIHx8IChzLT5yY3IgJiBSQ1JfU09GVF9SU1QpKQorLSAgICAgICAgcmV0dXJuIDE7CistICAgIGlmIChzLT5hbGxvY2F0ZWQgPT0gKDEgPDwgTlVNX1BBQ0tFVFMpIC0gMSkKKy0gICAgICAgIHJldHVybiAwOworLSAgICByZXR1cm4gMTsKKysgICAgcmV0dXJuIHNtYzkxYzExMV9jYW5fcmVjZWl2ZShzKTsKKyB9CisgCisgc3RhdGljIHNzaXplX3Qgc21jOTFjMTExX3JlY2VpdmUoTmV0Q2xpZW50U3RhdGUgKm5jLCBjb25zdCB1aW50OF90ICpidWYsIHNpemVfdCBzaXplKQorQEAgLTczOSw3ICs3NTMsNyBAQCBzdGF0aWMgY29uc3QgTWVtb3J5UmVnaW9uT3BzIHNtYzkxYzExMV9tCisgc3RhdGljIE5ldENsaWVudEluZm8gbmV0X3NtYzkxYzExMV9pbmZvID0geworICAgICAudHlwZSA9IE5FVF9DTElFTlRfT1BUSU9OU19LSU5EX05JQywKKyAgICAgLnNpemUgPSBzaXplb2YoTklDU3RhdGUpLAorLSAgICAuY2FuX3JlY2VpdmUgPSBzbWM5MWMxMTFfY2FuX3JlY2VpdmUsCisrICAgIC5jYW5fcmVjZWl2ZSA9IHNtYzkxYzExMV9jYW5fcmVjZWl2ZV9uYywKKyAgICAgLnJlY2VpdmUgPSBzbWM5MWMxMTFfcmVjZWl2ZSwKKyB9OworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3NtYzkxYzExMV9maXgyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3NtYzkxYzExMV9maXgyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOGFlZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvc21jOTFjMTExX2ZpeDIucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbTogUGV0ZXIgQ3Jvc3Rod2FpdGUgPGNyb3N0aHdhaXRlcGV0ZXJAZ21haWwuY29tPgorWC1Hb29nbGUtT3JpZ2luYWwtRnJvbTogUGV0ZXIgQ3Jvc3Rod2FpdGUgPGNyb3N0aHdhaXRlLnBldGVyQGdtYWlsLmNvbT4KK1RvOiBxZW11LWRldmVsQG5vbmdudS5vcmcKK0NjOiBwZXRlci5tYXlkZWxsQGxpbmFyby5vcmcsIHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmcKK1N1YmplY3Q6IFtSRlQgUEFUQ0ggdjEgMi8zXSBuZXQ6IHNtYzkxYzExMTogZ2F0ZSBjYW5fcmVjZWl2ZSgpIG9uIHJ4IEZJRk8KKyBoYXZpbmcgYSBzbG90CitEYXRlOiBUaHUsIDEwIFNlcCAyMDE1IDIxOjIzOjU3IC0wNzAwCisKK1JldHVybiBmYWxzZSBmcm9tIGNhbl9yZWNlaXZlKCkgd2hlbiB0aGUgRklGTyBkb2Vzbid0IGhhdmUgYSBmcmVlIFJYCitzbG90LiBUaGlzIGZpeGVzIGEgYnVnIGluIHRoZSBjdXJyZW50IGNvZGUgd2hlcmUgdGhlIGFsbG9jYXRlZCBidWZmZXIKK2lzIGZyZWVkIGJlZm9yZSB0aGUgZmlmbyBwb3AsIHRyaWdnZXJpbmcgYSBwcmVtYXR1cmUgZmx1c2ggb2YgcXVldWVkIFJYCitwYWNrZXRzLiBJdCBhbHNvIHdpbGwgaGFuZGxlIGEgY29ybmVyIGNhc2UsIHdoZXJlIHRoZSBndWVzdCBtYW51YWxseQorZnJlZXMgdGhlIGFsbG9jYXRlZCBidWZmZXIgYmVmb3JlIHBvcHBpbmcgdGhlIHJ4IEZJRk8gKGhlbmNlIGl0IGlzIG5vdAorZW5vdWdoIHRvIGp1c3QgZGVsYXkgdGhlIGZsdXNoX3F1ZXVlZF9wYWNrZXRzKCkpLgorCitSZXBvcnRlZC1ieTogUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+CitTaWduZWQtb2ZmLWJ5OiBQZXRlciBDcm9zdGh3YWl0ZSA8Y3Jvc3Rod2FpdGUucGV0ZXJAZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorLS0tCisKKyBody9uZXQvc21jOTFjMTExLmMgfCA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBxZW11LTIuNC4wL2h3L25ldC9zbWM5MWMxMTEuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHFlbXUtMi40LjAub3JpZy9ody9uZXQvc21jOTFjMTExLmMKKysrKyBxZW11LTIuNC4wL2h3L25ldC9zbWM5MWMxMTEuYworQEAgLTEyOSw3ICsxMjksOCBAQCBzdGF0aWMgaW50IHNtYzkxYzExMV9jYW5fcmVjZWl2ZShzbWM5MWMxCisgICAgIGlmICgocy0+cmNyICYgUkNSX1JYRU4pID09IDAgfHwgKHMtPnJjciAmIFJDUl9TT0ZUX1JTVCkpIHsKKyAgICAgICAgIHJldHVybiAxOworICAgICB9CistICAgIGlmIChzLT5hbGxvY2F0ZWQgPT0gKDEgPDwgTlVNX1BBQ0tFVFMpIC0gMSkgeworKyAgICBpZiAocy0+YWxsb2NhdGVkID09ICgxIDw8IE5VTV9QQUNLRVRTKSAtIDEgfHwKKysgICAgICAgIHMtPnJ4X2ZpZm9fbGVuID09IE5VTV9QQUNLRVRTKSB7CisgICAgICAgICByZXR1cm4gMDsKKyAgICAgfQorICAgICByZXR1cm4gMTsKK0BAIC0xODIsNiArMTgzLDcgQEAgc3RhdGljIHZvaWQgc21jOTFjMTExX3BvcF9yeF9maWZvKHNtYzkxYworICAgICB9IGVsc2UgeworICAgICAgICAgcy0+aW50X2xldmVsICY9IH5JTlRfUkNWOworICAgICB9CisrICAgIHNtYzkxYzExMV9mbHVzaF9xdWV1ZWRfcGFja2V0cyhzKTsKKyAgICAgc21jOTFjMTExX3VwZGF0ZShzKTsKKyB9CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvc21jOTFjMTExX2ZpeDMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvc21jOTFjMTExX2ZpeDMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4NjVmNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9zbWM5MWMxMTFfZml4My5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tOiBQZXRlciBDcm9zdGh3YWl0ZSA8Y3Jvc3Rod2FpdGVwZXRlckBnbWFpbC5jb20+CitUbzogcWVtdS1kZXZlbEBub25nbnUub3JnCitDYzogcGV0ZXIubWF5ZGVsbEBsaW5hcm8ub3JnLCByaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnCitTdWJqZWN0OiBbUkZUIFBBVENIIHYxIDMvM10gbmV0OiBzbWM5MWMxMTE6IGZsdXNoIHBhY2tldHMgb24gUkNSIHJlZ2lzdGVyCisgY2hhbmdlcworRGF0ZTogVGh1LCAxMCBTZXAgMjAxNSAyMToyNDoxMiAtMDcwMAorCitUaGUgU09GVF9SU1Qgb3IgUlhFTiBpbiB0aGUgY29udHJvbCByZWdpc3RlciBjYW4gYmUgdXNlZCBhcyBhIGNvbmRpdGlvbgordG8gdW5ibG9jayB0aGUgbmV0IGxheWVyIHZpYSBjYW5fcmVjZWl2ZSgpLiBTbyBjaGVjayBmb3IgcG9zc2libGUKK2ZsdXNoZXMgb24gUkNSIGNoYW5nZXMuIFRoaXMgd2lsbCBkcm9wIGFsbCBwZW5kaW5nIHBhY2tldHMgb24gc29mdAorcmVzZXQgb3IgZGlzYWJsZSB3aGljaCBpcyB0aGUgZnVuY3Rpb25hbCBpbnRlbnQgb2YgdGhlIGNhbl9yZWNlaXZlKCkKK2xvZ2ljLgorCitTaWduZWQtb2ZmLWJ5OiBQZXRlciBDcm9zdGh3YWl0ZSA8Y3Jvc3Rod2FpdGUucGV0ZXJAZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorLS0tCisKKyBody9uZXQvc21jOTFjMTExLmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworSW5kZXg6IHFlbXUtMi40LjAvaHcvbmV0L3NtYzkxYzExMS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcWVtdS0yLjQuMC5vcmlnL2h3L25ldC9zbWM5MWMxMTEuYworKysrIHFlbXUtMi40LjAvaHcvbmV0L3NtYzkxYzExMS5jCitAQCAtMzMxLDYgKzMzMSw3IEBAIHN0YXRpYyB2b2lkIHNtYzkxYzExMV93cml0ZWIodm9pZCAqb3BhcXUKKyAgICAgICAgICAgICBpZiAocy0+cmNyICYgUkNSX1NPRlRfUlNUKSB7CisgICAgICAgICAgICAgICAgIHNtYzkxYzExMV9yZXNldChERVZJQ0UocykpOworICAgICAgICAgICAgIH0KKysgICAgICAgICAgICBzbWM5MWMxMTFfZmx1c2hfcXVldWVkX3BhY2tldHMocyk7CisgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgY2FzZSAxMDogY2FzZSAxMTogLyogUlBDUiAqLworICAgICAgICAgICAgIC8qIElnbm9yZWQgKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS93YWNvbS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS93YWNvbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDA2YWE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3dhY29tLnBhdGNoCkBAIC0wLDAgKzEsMTMwIEBACitUaGUgVVNCIHdhY29tIGRldmljZSBpcyBtaXNzaW5nIGEgSElEIGRlc2NyaXB0b3Igd2hpY2ggY2F1c2VzIGl0Cit0byBmYWlsIHRvIG9wZXJhdGUgd2l0aCByZWNlbnQga2VybmVscyAoZS5nLiAzLjE3KS4KKworVGhpcyBwYXRjaCBhZGRzIGEgSElEIGRlc3JpcHRvciB0byB0aGUgZGV2aWNlLCBiYXNlZCB1cG9uIG9uZSBmcm9tIAorcmVhbCB3Y29tIGRldmljZS4KKworU2lnbmVkLW9mZi1ieTogUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisyMDE0LzExLzI3CisKK0luZGV4OiBxZW11LTIuMS4wL2h3L3VzYi9kZXYtd2Fjb20uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHFlbXUtMi4xLjAub3JpZy9ody91c2IvZGV2LXdhY29tLmMJMjAxNC0wOC0wMSAxNToxMjoxNy4wMDAwMDAwMDAgKzAxMDAKKysrKyBxZW11LTIuMS4wL2h3L3VzYi9kZXYtd2Fjb20uYwkyMDE0LTEwLTEyIDEyOjEzOjMwLjU0MDMwNjA0MiArMDEwMAorQEAgLTY4LDYgKzY4LDg5IEBACisgICAgIFtTVFJfU0VSSUFMTlVNQkVSXSAgICAgPSAiMSIsCisgfTsKKyAKKytzdGF0aWMgY29uc3QgdWludDhfdCBxZW11X3RhYmxldF9oaWRfcmVwb3J0X2Rlc2NyaXB0b3JbXSA9IHsKKysgICAgMHgwNSwgMHgwMSwJCS8qIFVzYWdlIFBhZ2UgKEdlbmVyaWMgRGVza3RvcCkgKi8KKysgICAgMHgwOSwgMHgwMiwJCS8qIFVzYWdlIChNb3VzZSkgKi8KKysgICAgMHhhMSwgMHgwMSwJCS8qIENvbGxlY3Rpb24gKEFwcGxpY2F0aW9uKSAqLworKyAgICAweDg1LCAweDAxLAkJLyogICBSZXBvcnQgSUQgKDEpICovIAorKyAgICAweDA5LCAweDAxLAkJLyogICBVc2FnZSAoUG9pbnRlcikgKi8KKysgICAgMHhhMSwgMHgwMCwJCS8qICAgQ29sbGVjdGlvbiAoUGh5c2ljYWwpICovCisrICAgIDB4MDUsIDB4MDksCQkvKiAgICAgVXNhZ2UgUGFnZSAoQnV0dG9uKSAqLworKyAgICAweDE5LCAweDAxLAkJLyogICAgIFVzYWdlIE1pbmltdW0gKDEpICovCisrICAgIDB4MjksIDB4MDUsCQkvKiAgICAgVXNhZ2UgTWF4aW11bSAoNSkgKi8KKysgICAgMHgxNSwgMHgwMCwJCS8qICAgICBMb2dpY2FsIE1pbmltdW0gKDApICovCisrICAgIDB4MjUsIDB4MDEsCQkvKiAgICAgTG9naWNhbCBNYXhpbXVtICgxKSAqLworKyAgICAweDk1LCAweDA1LAkJLyogICAgIFJlcG9ydCBDb3VudCAoNSkgKi8KKysgICAgMHg3NSwgMHgwMSwJCS8qICAgICBSZXBvcnQgU2l6ZSAoMSkgKi8KKysgICAgMHg4MSwgMHgwMiwJCS8qICAgICBJbnB1dCAoRGF0YSwgVmFyaWFibGUsIEFic29sdXRlKSAqLworKyAgICAweDk1LCAweDAxLAkJLyogICAgIFJlcG9ydCBDb3VudCAoMSkgKi8KKysgICAgMHg3NSwgMHgwMywJCS8qICAgICBSZXBvcnQgU2l6ZSAoMykgKi8KKysgICAgMHg4MSwgMHgwMSwJCS8qICAgICBJbnB1dCAoQ29uc3RhbnQpICovCisrICAgIDB4MDUsIDB4MDEsCQkvKiAgICAgVXNhZ2UgUGFnZSAoR2VuZXJpYyBEZXNrdG9wKSAqLworKyAgICAweDA5LCAweDMwLAkJLyogICAgIFVzYWdlIChYKSAqLworKyAgICAweDA5LCAweDMxLAkJLyogICAgIFVzYWdlIChZKSAqLworKyAgICAweDE1LCAweDgxLAkJLyogICAgIExvZ2ljYWwgTWluaW11bSAoLTEyNykgKi8KKysgICAgMHgyNSwgMHg3ZiwJCS8qICAgICBMb2dpY2FsIE1heGltdW0gKDEyNykgKi8KKysgICAgMHg3NSwgMHgwOCwJCS8qICAgICBSZXBvcnQgU2l6ZSAoOCkgKi8KKysgICAgMHg5NSwgMHgwMiwJCS8qICAgICBSZXBvcnQgQ291bnQgKDIpICovCisrICAgIDB4ODEsIDB4MDYsCQkvKiAgICAgSW5wdXQgKERhdGEsIFZhcmlhYmxlLCBSZWxhdGl2ZSkgKi8KKysgICAgMHhjMCwJCS8qICAgRW5kIENvbGxlY3Rpb24gKi8KKysgICAgMHhjMCwJCS8qIEVuZCBDb2xsZWN0aW9uICovCisrICAgIDB4MDUsIDB4MGQsCQkvKiBVc2FnZSBQYWdlIChEaWdpdGl6ZXIpICovCisrICAgIDB4MDksIDB4MDEsCQkvKiBVc2FnZSAoRGlnaXRpemVyKSAqLworKyAgICAweGExLCAweDAxLAkJLyogQ29sbGVjdGlvbiAoQXBwbGljYXRpb24pICovCisrICAgIDB4ODUsIDB4MDIsCQkvKiAgIFJlcG9ydCBJRCAoMikgKi8gCisrICAgIDB4YTEsIDB4MDAsCQkvKiAgIENvbGxlY3Rpb24gKFBoeXNpY2FsKSAqLworKyAgICAweDA2LCAweDAwLCAweGZmLCAgIC8qICAgVXNhZ2UgUGFnZSAoVmVuZG9yIDB4ZmYwMCkgKi8KKysgICAgMHgwOSwgMHgwMSwgCS8qICAgVXNhZ2UgKERpZ2l0aXplcikgKi8KKysgICAgMHgxNSwgMHgwMCwgCS8qICAgICBMb2dpY2FsIE1pbmltdW0gKDApICovCisrICAgIDB4MjYsIDB4ZmYsIDB4MDAsCS8qICAgICBMb2dpY2FsIE1heGltdW0gKDI1NSkgKi8KKysgICAgMHg3NSwgMHgwOCwJCS8qICAgICBSZXBvcnQgU2l6ZSAoOCkgKi8KKysgICAgMHg5NSwgMHgwOCwJCS8qICAgICBSZXBvcnQgQ291bnQgKDgpICovCisrICAgIDB4ODEsIDB4MDIsCQkvKiAgICAgSW5wdXQgKERhdGEsIFZhcmlhYmxlLCBBYnNvbHV0ZSkgKi8KKysgICAgMHhjMCwgCQkvKiAgIEVuZCBDb2xsZWN0aW9uICovCisrICAgIDB4MDksIDB4MDEsCQkvKiAgIFVzYWdlIChEaWdpdGl6ZXIpICovCisrICAgIDB4ODUsIDB4MDIsIAkvKiAgIFJlcG9ydCBJRCAoMikgKi8gCisrICAgIDB4OTUsIDB4MDEsCQkvKiAgIFJlcG9ydCBDb3VudCAoMSkgKi8KKysgICAgMHhiMSwgMHgwMiwJCS8qICAgRkVBVFVSRSAoMikgKi8KKysgICAgMHhjMCwJCS8qIEVuZCBDb2xsZWN0aW9uICovCisrICAgIDB4MDYsIDB4MDAsIDB4ZmYsCS8qIFVzYWdlIFBhZ2UgKFZlbmRvciAweGZmMDApICovCisrICAgIDB4MDksIDB4MDEsCQkvKiBVc2FnZSAoRGlnaXRpemVyKSAqLworKyAgICAweGExLCAweDAxLAkJLyogQ29sbGVjdGlvbiAoQXBwbGljYXRpb24pICovCisrICAgIDB4ODUsIDB4MDIsICAgCS8qICAgUmVwb3J0IElEICgyKSAqLyAKKysgICAgMHgwNSwgMHgwZCwJCS8qICAgVXNhZ2UgUGFnZSAoRGlnaXRpemVyKSAgKi8KKysgICAgMHgwOSwgMHgyMiwgCS8qICAgVXNhZ2UgKEZpbmdlcikgKi8KKysgICAgMHhhMSwgMHgwMCwgIAkvKiAgIENvbGxlY3Rpb24gKFBoeXNpY2FsKSAqLworKyAgICAweDA2LCAweDAwLCAweGZmLAkvKiAgIFVzYWdlIFBhZ2UgKFZlbmRvciAweGZmMDApICovCisrICAgIDB4MDksIDB4MDEsCQkvKiAgICAgVXNhZ2UgKERpZ2l0aXplcikgKi8KKysgICAgMHgxNSwgMHgwMCwgCS8qICAgICBMb2dpY2FsIE1pbmltdW0gKDApICovCisrICAgIDB4MjYsIDB4ZmYsIDB4MDAsICAJLyogICAgIExvZ2ljYWwgTWF4aW11bSAqLworKyAgICAweDc1LCAweDA4LAkJLyogICAgIFJlcG9ydCBTaXplICg4KSAqLworKyAgICAweDk1LCAweDAyLAkJLyogICAgIFJlcG9ydCBDb3VudCAoMikgKi8KKysgICAgMHg4MSwgMHgwMiwgCS8qICAgICBJbnB1dCAoRGF0YSwgVmFyaWFibGUsIEFic29sdXRlKSAqLworKyAgICAweDA1LCAweDAxLAkJLyogICAgIFVzYWdlIFBhZ2UgKEdlbmVyaWMgRGVza3RvcCkgKi8KKysgICAgMHgwOSwgMHgzMCwJCS8qICAgICBVc2FnZSAoWCkgKi8KKysgICAgMHgzNSwgMHgwMCwgCS8qICAgICBQaHlzaWNhbCBNaW5pbXVtICovCisrICAgIDB4NDYsIDB4ZTAsIDB4MmUsCS8qICAgICBQaHlzaWNhbCBNYXhpbXVtICovCisrICAgIDB4MjYsIDB4ZTAsIDB4MDEsICAgLyogICAgIExvZ2ljYWwgTWF4aW11bSAqLworKyAgICAweDc1LCAweDEwLAkJLyogICAgIFJlcG9ydCBTaXplICgxNikgKi8KKysgICAgMHg5NSwgMHgwMSwJCS8qICAgICBSZXBvcnQgQ291bnQgKDEpICovCisrICAgIDB4ODEsIDB4MDIsCQkvKiAgICAgSW5wdXQgKERhdGEsIFZhcmlhYmxlLCBBYnNvbHV0ZSkgKi8KKysgICAgMHgwOSwgMHgzMSwJCS8qICAgICBVc2FnZSAoWSkgKi8KKysgICAgMHg0NiwgMHg0MCwgMHgxZiwgCS8qICAgICBQaHlzaWNhbCBNYXhpbXVtICovCisrICAgIDB4MjYsIDB4NDAsIDB4MDEsIAkvKiAgICAgTG9naWNhbCBNYXhpbXVtICovCisrICAgIDB4ODEsIDB4MDIsIAkvKiAgICAgSW5wdXQgKERhdGEsIFZhcmlhYmxlLCBBYnNvbHV0ZSkgKi8KKysgICAgMHgwNiwgMHgwMCwgMHhmZiwJLyogICAgIFVzYWdlIFBhZ2UgKFZlbmRvciAweGZmMDApICovCisrICAgIDB4MDksIDB4MDEsIAkvKiAgICAgVXNhZ2UgKERpZ2l0aXplcikgKi8KKysgICAgMHgyNiwgMHhmZiwgMHgwMCwgIAkvKiAgICAgTG9naWNhbCBNYXhpbXVtICovCisrICAgIDB4NzUsIDB4MDgsCQkvKiAgICAgUmVwb3J0IFNpemUgKDgpICovCisrICAgIDB4OTUsIDB4MGQsCQkvKiAgICAgUmVwb3J0IENvdW50ICgxMykgKi8KKysgICAgMHg4MSwgMHgwMiwJCS8qICAgICBJbnB1dCAoRGF0YSwgVmFyaWFibGUsIEFic29sdXRlKSAqLworKyAgICAweGMwLAkJLyogICBFbmQgQ29sbGVjdGlvbiAqLyAKKysgICAgMHhjMCwJCS8qIEVuZCBDb2xsZWN0aW9uICovCisrfTsKKysKKysKKyBzdGF0aWMgY29uc3QgVVNCRGVzY0lmYWNlIGRlc2NfaWZhY2Vfd2Fjb20gPSB7CisgICAgIC5iSW50ZXJmYWNlTnVtYmVyICAgICAgICAgICAgICA9IDAsCisgICAgIC5iTnVtRW5kcG9pbnRzICAgICAgICAgICAgICAgICA9IDEsCitAQCAtODUsNyArMTY4LDcgQEAKKyAgICAgICAgICAgICAgICAgMHgwMCwgICAgICAgICAgLyogIHU4ICBjb3VudHJ5X2NvZGUgKi8KKyAgICAgICAgICAgICAgICAgMHgwMSwgICAgICAgICAgLyogIHU4ICBudW1fZGVzY3JpcHRvcnMgKi8KKyAgICAgICAgICAgICAgICAgMHgyMiwgICAgICAgICAgLyogIHU4ICB0eXBlOiBSZXBvcnQgKi8KKy0gICAgICAgICAgICAgICAgMHg2ZSwgMCwgICAgICAgLyogIHUxNiBsZW4gKi8KKysgICAgICAgICAgICAgICAgc2l6ZW9mKHFlbXVfdGFibGV0X2hpZF9yZXBvcnRfZGVzY3JpcHRvciksIDAsIC8qICB1MTYgbGVuICovCisgICAgICAgICAgICAgfSwKKyAgICAgICAgIH0sCisgICAgIH0sCitAQCAtMjY1LDYgKzM1MCwxNSBAQAorICAgICB9CisgCisgICAgIHN3aXRjaCAocmVxdWVzdCkgeworKyAgICBjYXNlIEludGVyZmFjZVJlcXVlc3QgfCBVU0JfUkVRX0dFVF9ERVNDUklQVE9SOgorKyAgICAgICAgc3dpdGNoICh2YWx1ZSA+PiA4KSB7CisrICAgICAgICBjYXNlIDB4MjI6CisrICAgICAgICAgICAgICAgIG1lbWNweShkYXRhLCBxZW11X3RhYmxldF9oaWRfcmVwb3J0X2Rlc2NyaXB0b3IsCisrICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocWVtdV90YWJsZXRfaGlkX3JlcG9ydF9kZXNjcmlwdG9yKSk7CisrICAgICAgICAgICAgICAgIHAtPmFjdHVhbF9sZW5ndGggPSBzaXplb2YocWVtdV90YWJsZXRfaGlkX3JlcG9ydF9kZXNjcmlwdG9yKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIFdBQ09NX1NFVF9SRVBPUlQ6CisgICAgICAgICBpZiAocy0+bW91c2VfZ3JhYmJlZCkgeworICAgICAgICAgICAgIHFlbXVfcmVtb3ZlX21vdXNlX2V2ZW50X2hhbmRsZXIocy0+ZWhfZW50cnkpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11XzIuNC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11XzIuNC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YjE3ODgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXVfMi40LjAuYmIKQEAgLTAsMCArMSwyMiBAQAorcmVxdWlyZSBxZW11LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00NDFjMjhkMmNmODZlMTVhMzdmYTQ3ZTE1YTcyZmJhYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjtlbmRsaW5lPTI0O21kNT1jMDRkZWY3YWUzODg1MGU3ZDNlZjU0ODU4ODE1OTkxMyIKKworU1JDX1VSSSArPSAiZmlsZTovL2NvbmZpZ3VyZS1maXgtRGFyd2luLXRhcmdldC1kZXRlY3Rpb24ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3FlbXUtZW5sYXJnZS1lbnYtZW50cnktc2l6ZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vUWVtdS1Bcm0tdmVyc2F0aWxlcGItQWRkLW1lbW9yeS1zaXplLWNoZWNraW5nLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zbWM5MWMxMTFfZml4MS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc21jOTFjMTExX2ZpeDIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3NtYzkxYzExMV9maXgzLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSV9wcmVwZW5kID0gImh0dHA6Ly93aWtpLnFlbXUtcHJvamVjdC5vcmcvZG93bmxvYWQvJHtCUH0udGFyLmJ6MiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIxODZlZTgxOTQxNDBhNDg0YTQ1NWY4ZTNjNzQ1ODlmNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3MmIwYjk5MWJiY2M1NDA2NjNhMDE5ZTFlOGM0ZjcxNDA1M2I2OTFkZGEzMmM5YjllZTgwYjI1ZjM2N2U2NjIwIgorCitDT01QQVRJQkxFX0hPU1RfY2xhc3MtdGFyZ2V0X21pcHM2NCA9ICJudWxsIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICAjIFByZXZlbnQgUUEgd2FybmluZ3MgYWJvdXQgaW5zdGFsbGVkICR7bG9jYWxzdGF0ZWRpcn0vcnVuCisgICAgaWYgWyAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4gXTsgdGhlbiBybWRpciAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW47IGZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXV3cmFwcGVyLWNyb3NzXzEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdXdyYXBwZXItY3Jvc3NfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNGM2ZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXV3cmFwcGVyLWNyb3NzXzEuMC5iYgpAQCAtMCwwICsxLDUwIEBACitTVU1NQVJZID0gIlFFTVUgd3JhcHBlciBzY3JpcHQiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitTID0gIiR7V09SS0RJUn0iCisKK2luaGVyaXQgcWVtdQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworCisJZWNobyAiIyEvYmluL3NoIiA+ICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L3FlbXV3cmFwcGVyCisJcWVtdV9iaW5hcnk9JHtAcWVtdV90YXJnZXRfYmluYXJ5KGQpfQorCXFlbXVfb3B0aW9ucz0nJHtRRU1VX09QVElPTlN9JworCWVjaG8gIiRxZW11X2JpbmFyeSAkcWVtdV9vcHRpb25zIFwiXCRAXCIiID4+ICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L3FlbXV3cmFwcGVyCisJZmFsbGJhY2tfcWVtdV9iaW49CisJY2FzZSAkcWVtdV9iaW5hcnkgaW4KKwkJInFlbXUtaTM4NiIpCisJCQlmYWxsYmFja19xZW11X2Jpbj1xZW11LXg4Nl82NAorCQkJOzsKKwkJInFlbXUteDg2XzY0IikKKwkJCWZhbGxiYWNrX3FlbXVfYmluPXFlbXUtaTM4NgorCQkJOzsKKwkJKikKKwkJCTs7CisJZXNhYworCisJaWYgWyAtbiAiJGZhbGxiYWNrX3FlbXVfYmluIiBdOyB0aGVuCisKKwkJY2F0ID4+ICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L3FlbXV3cmFwcGVyIDw8IEVPRgorcmM9XCQ/CitpZiBbIFwkcmMgPSAyNTUgXTsgdGhlbgorCSRmYWxsYmFja19xZW11X2JpbiAiXCRAIgorCXJjPVwkPworZmkKK2V4aXQgXCRyYworRU9GCisKKwlmaQorCisJY2htb2QgK3ggJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vcWVtdXdyYXBwZXIKK30KKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJxZW11d3JhcHBlcl9zeXNyb290X3ByZXByb2Nlc3MiCisKK3FlbXV3cmFwcGVyX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30gJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQorfQorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQtbmF0aXZlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM0YjBhMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZS5pbmMKQEAgLTAsMCArMSwxOCBAQAorUkRFUEVORFNfJHtQTn0gPSAiZGlmZnN0YXQtbmF0aXZlIHBhdGNoLW5hdGl2ZSBiemlwMi1uYXRpdmUgdXRpbC1saW51eC1uYXRpdmUiCisKK0lOSElCSVRfQVVUT1RPT0xTX0RFUFMgPSAiMSIKKworaW5oZXJpdCBuYXRpdmUKKworUEFUQ0hUT09MID0gInBhdGNoIgorRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1ubHMiCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJb2VfcnVuY29uZgorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJIyBEdW1teSBxdWlsdHJjIGZpbGUgZm9yIHBhdGNoLmJiY2xhc3MKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9LworCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L3F1aWx0cmMKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZV8wLjY0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQtbmF0aXZlXzAuNjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJjN2RjZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZV8wLjY0LmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSBxdWlsdC5pbmMKK3JlcXVpcmUgcXVpbHQtbmF0aXZlLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzN2IzNmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC5pbmMKQEAgLTAsMCArMSw2MiBAQAorU1VNTUFSWSA9ICJUb29sIGZvciB3b3JraW5nIHdpdGggc2VyaWVzIG9mIHBhdGNoZXMiCitIT01FUEFHRSA9ICJodHRwOi8vc2F2YW5uYWgubm9uZ251Lm9yZy9wcm9qZWN0cy9xdWlsdC8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitTUkNfVVJJID0gIiR7U0FWQU5OQUhfR05VX01JUlJPUn0vcXVpbHQvcXVpbHQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgZmlsZTovL2luc3RhbGwucGF0Y2ggXAorICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgZmlsZTovL01ha2VmaWxlIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImZjMDMxMGRiNTg2OGEwODczZDYwMmQ0MzMyYTc2ZDQzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM0YmZkMzI4MjIxNGEyODhlOGQzZTkyMWFlNGQ1MmU3M2UyNGM0ZmVhZDcyYjU0NDY3NTJhZGVlOTlhN2FmZmQiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwdGVzdAorCitFWFRSQV9PRUNPTkZfZGFyd2luICs9ICItLXdpdGhvdXQtZGF0ZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtZ2V0b3B0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICIKKworQ0xFQU5CUk9LRU4gPSAiMSIKKworUEFDS0FHRVMgKz0gImd1YXJkcyBndWFyZHMtZG9jIgorRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfSAke2RhdGFkaXJ9L3F1aWx0IFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9xdWlsdCAke2xpYmRpcn0vcXVpbHQiCitGSUxFU19ndWFyZHMgPSAiJHtiaW5kaXJ9L2d1YXJkcyIKK0ZJTEVTXyR7UE59LWRvYyA9ICIke21hbmRpcn0vbWFuMS9xdWlsdC4xICR7ZG9jZGlyfS8ke0JQTn0iCitGSUxFU19ndWFyZHMtZG9jID0gIiR7bWFuZGlyfS9tYW4xL2d1YXJkcy4xIgorCitSREVQRU5EU18ke1BOfSA9ICJiYXNoIgorCitFWFRSQV9PRV9NQUtFX0FSR1NfZGFyd2luID89ICIiCitFWFRSQV9PRV9NQUtFX0FSR1MgPz0gIkJVSUxEX1JPT1Q9JHtEfSIKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfQkFTSD0vYmluL2Jhc2giCisKKyMgcXVpbHQgaWdub3JlcyBERVNURElSCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlICR7RVhUUkFfT0VfTUFLRV9BUkdTfSBpbnN0YWxsCisJIyBjbGVhbnVwIHVucGFja2FnZWQgZmlsZXMKKwlybSAtcmYgJHtEfS8ke2RhdGFkaXJ9L2VtYWNzCit9CisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJb2VfcnVubWFrZSBiaW4vcGF0Y2gtd3JhcHBlciB0ZXN0Ly5kZXBlbmQKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwl0YXIgLWNmIC0gYmluLyAtLWV4Y2x1ZGUgXCouaW4gfCAoIGNkICR7RH0ke1BURVNUX1BBVEh9ICYmIHRhciAteGYgLSApCisJdGFyIC1jZiAtIGNvbXBhdC8gLS1leGNsdWRlIFwqLmluIHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gKQorCXRhciAtY2YgLSBxdWlsdC8gLS1leGNsdWRlIFwqLmluIHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gKQorCXRhciAtY2YgLSB0ZXN0LyAtLWV4Y2x1ZGUgbWFpbC50ZXN0IC0tZXhjbHVkZSBkZWxldGUudGVzdCB8ICggY2QgJHtEfSR7UFRFU1RfUEFUSH0gJiYgdGFyIC14ZiAtICkKKwljcCAke1dPUktESVJ9L01ha2VmaWxlICR7RH0ke1BURVNUX1BBVEh9Cit9CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ID0gIm1ha2UgZmlsZSBzZWQgZ2F3ayBkaWZmdXRpbHMgZmluZHV0aWxzIGVkIHBlcmwgXAorICAgICAgICAgICAgICAgICAgICAgICAgcGVybC1tb2R1bGUtZmlsZWhhbmRsZSBwZXJsLW1vZHVsZS1nZXRvcHQtc3RkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcmwtbW9kdWxlLXBvc2l4IHBlcmwtbW9kdWxlLWZpbGUtdGVtcCBcCisgICAgICAgICAgICAgICAgICAgICAgICBwZXJsLW1vZHVsZS10ZXh0LXBhcnNld29yZHMgcGVybC1tb2R1bGUtb3ZlcmxvYWRpbmcgXAorICAgICAgICAgICAgICAgICAgICAgICAgYmFzaCB1dGlsLWxpbnV4LWdldG9wdCBcCisgICAgICAgICAgICAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L01ha2VmaWxlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzYWM4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L01ha2VmaWxlCkBAIC0wLDAgKzEsMTMgQEAKK1BBVEggOj0gICAgICAgICAkKENVUkRJUikvYmluOiQoQ1VSRElSKS9jb21wYXQ6JChQQVRIKQorUVVJTFRfRElSIDo9ICAgICQoQ1VSRElSKS9xdWlsdAorUVVJTFRSQyA6PSAgICAgICQoQ1VSRElSKS90ZXN0L3Rlc3QucXVpbHRyYworZXhwb3J0IFFVSUxUX0RJUiBRVUlMVFJDCitDSEVDS19FTlYgOj0gUD1wYXRjaGVzLzsgX1A9Li4vcGF0Y2hlcy87IGV4cG9ydCBQIF9QCistaW5jbHVkZSB0ZXN0Ly5kZXBlbmQKKworY2hlY2stJSA6IHRlc3QvJS50ZXN0CisJQExBTkc9QzsgTENfQUxMPUM7IFwKKwlleHBvcnQgTEFORyBMQ19BTEw7IFwKKwkkKENIRUNLX0VOVik7IFwKKwljZCAkKDxEKTsgXAorCS4vcnVuIC1xICQoPEYpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9hY2xvY2FsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvYWNsb2NhbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWY0NDI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvYWNsb2NhbC5wYXRjaApAQCAtMCwwICsxLDEyOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0FkZCB0aGUgYWNsb2NhbC5tNCBhcyBhY2luY2x1ZGUubTQKKworSW5kZXg6IHF1aWx0LTAuNDcvYWNpbmNsdWRlLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgcXVpbHQtMC40Ny9hY2luY2x1ZGUubTQJMjAwNi0xMC0xMCAxNzowNTo1Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMTE5IEBACisrZG5sIEFsbG93IGNvbmZpZ3VyZSB0byBzcGVjaWZ5IGEgc3BlY2lmaWMgYmluYXJ5CisrZG5sIDE6IEVudmlyb25tZW50IHZhcmlhYmxlCisrZG5sIDI6IGJpbmFyeSBuYW1lCisrZG5sIDM6IG9wdGlvbmFsIGxpc3Qgb2YgYWx0ZXJuYXRpdmUgYmluYXJ5IG5hbWVzCisrZG5sIDQ6IG9wdGlvbmFsIGxpc3Qgb2YgYWRkaXRpb25hbCBzZWFyY2ggZGlyZWN0b3JpZXMKKytBQ19ERUZVTihbUVVJTFRfQ09NUEFUX1BST0dfUEFUSF0sWworKyAgbTRfZGVmaW5lKFtpbnRlcm5hbF8kMl9jbWRdLFtlc3lzY21kKGxzIGNvbXBhdC8kMi5pbiAyPi9kZXYvbnVsbCldKQorKworKyAgQUNfQVJHX1dJVEgoJDIsIEFDX0hFTFBfU1RSSU5HKAorKyAgICBbLS13aXRoLSQyXSwgW25hbWUgb2YgdGhlICQyIGV4ZWN1dGFibGUgdG8gdXNlXQorKyAgICAgICAgICAgICAgICAgbTRfaWYoaW50ZXJuYWxfJDJfY21kLFtdLFtdLFsgKHVzZSAtLXdpdGhvdXQtJDIKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHVzZSBhbiBpbnRlcm5hbCBtZWNoYW5pc20pXSkpLAorKyAgWworKyAgICBpZiB0ZXN0IHgiJHdpdGh2YWwiID0geG5vbmU7IHRoZW4KKysgICAgICBBQ19NU0dfRVJST1IoW0ludmFsaWQgY29uZmlndXJlIGFyZ3VtZW50LiAgdXNlIC0td2l0aG91dC0kMl0pCisrICAgIGZpCisrICAgIGlmIHRlc3QgeCIkd2l0aHZhbCIgIT0geG5vOyB0aGVuCisrICAgICAgQUNfTVNHX0NIRUNLSU5HKGZvciAkMikKKysgICAgICAkMT0iJHdpdGh2YWwiCisrICAgICAgaWYgdGVzdCAtZSAiJCQxIjsgdGhlbgorKwlpZiB0ZXN0ICEgLWYgIiQkMSIgLWEgISAtaCAiJCQxIiB8fCB0ZXN0ICEgLXggIiQkMSI7IHRoZW4KKysJICBBQ19NU0dfRVJST1IoWyQkMSBpcyBub3QgYW4gZXhlY3V0YWJsZSBmaWxlXSkKKysJZmkKKysgICAgICBmaQorKyAgICAgIEFDX01TR19SRVNVTFQoWyQkMV0pCisrICAgICAgaWYgdGVzdCAhIC1lICIkJDEiOyB0aGVuCisrICAgICAgICBBQ19NU0dfV0FSTihbJCQxIGRvZXMgbm90IGV4aXN0XSkKKysgICAgICBmaQorKyAgICAgIENPTVBBVF9TWU1MSU5LUz0iJENPTVBBVF9TWU1MSU5LUyAkMiIKKysgICAgZmkKKysgIF0sWworKyAgICBtNF9pZihbJDNdLFtdLFsKKysgICAgICBBQ19QQVRIX1BST0coJDEsJDIsLCRQQVRIOiQ0KQorKyAgICBdLFsKKysgICAgICBBQ19QQVRIX1BST0dTKCQxLCQzLCwkUEFUSDokNCkKKysgICAgICBpZiB0ZXN0IC1uICIkJDEiIC1hICJgZXhwciAiJCQxIiA6ICcuKi9cKFtbXi9dXSpcKSQnYCIgIT0gIiQyIjsgdGhlbgorKwlDT01QQVRfU1lNTElOS1M9IiRDT01QQVRfU1lNTElOS1MgJDIiCisrICAgICAgZmkKKysgICAgXSkKKysgICAgbTRfaWYoWyQ0XSxbXSxbXSxbCisrICAgICAgaWYgdGVzdCAtbiAiJCQxIjsgdGhlbgorKwlhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrICAgICAgICBmb3IgZGlyIGluICIkNCI7IGRvCisrICAgICAgICAgIGlmIHRlc3QgImBkaXJuYW1lICQkMWAiID0gIiRkaXIiOyB0aGVuCisrICAgICAgICAgICAgQ09NUEFUX1NZTUxJTktTPSIkQ09NUEFUX1NZTUxJTktTICQyIgorKwkgICAgYnJlYWsKKysJICBmaQorKyAgICAgICAgZG9uZQorKwlJRlM9IiRhc19zYXZlX0lGUyIKKysgICAgICBmaQorKyAgICBdKQorKyAgXSkKKysgIGlmIHRlc3QgLXogIiQkMSI7IHRoZW4KKysgICAgbTRfaWYoaW50ZXJuYWxfJDJfY21kLFtdLFsKKysgICAgICBBQ19NU0dfRVJST1IoW1BsZWFzZSBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiAkMiB3aXRoIHRoZSBvcHRpb24gJy0td2l0aC0kMiddKQorKyAgICBdLFsKKysgICAgICBBQ19NU0dfV0FSTihbVXNpbmcgaW50ZXJuYWwgJDIgbWVjaGFuaXNtLiAgVXNlIG9wdGlvbiAnLS13aXRoLSQyJyB0byBvdmVycmlkZV0pCisrICAgICAgQ09NUEFUX1BST0dSQU1TPSIkQ09NUEFUX1BST0dSQU1TICQyIgorKyAgICAgICQxPSQyCisrICAgICAgSU5URVJOQUxfJDE9MQorKyAgICBdKQorKyAgZmkKKysgIEFDX1NVQlNUKCQxKQorK10pCisrCisrZG5sIEFsbG93IGNvbmZpZ3VyZSB0byBzcGVjaWZ5IGEgc3BlY2lmaWMgYmluYXJ5CisrZG5sIFRoaXMgdmFyaWFudCBpcyBmb3Igb3B0aW9uYWwgYmluYXJpZXMuCisrZG5sIDE6IEVudmlyb25tZW50IHZhcmlhYmxlCisrZG5sIDI6IGJpbmFyeSBuYW1lCisrZG5sIDM6IG9wdGlvbmFsIGxpc3Qgb2YgYWx0ZXJuYXRpdmUgYmluYXJ5IG5hbWVzCisrZG5sIDQ6IG9wdGlvbmFsIGxpc3Qgb2YgYWRkaXRpb25hbCBzZWFyY2ggZGlyZWN0b3JpZXMKKytBQ19ERUZVTihbUVVJTFRfQ09NUEFUX1BST0dfUEFUSF9PUFRdLFsKKysgIEFDX0FSR19XSVRIKCQyLCBBQ19IRUxQX1NUUklORygKKysgICAgWy0td2l0aC0kMl0sIFtuYW1lIG9mIHRoZSAkMiBleGVjdXRhYmxlIHRvIHVzZV0pLAorKyAgWworKyAgICBpZiB0ZXN0IHgiJHdpdGh2YWwiICE9IHhubzsgdGhlbgorKyAgICAgIEFDX01TR19DSEVDS0lORyhmb3IgJDIpCisrICAgICAgJDE9IiR3aXRodmFsIgorKyAgICAgIGlmIHRlc3QgLWUgIiQkMSI7IHRoZW4KKysJaWYgdGVzdCAhIC1mICIkJDEiIC1hICEgLWggIiQkMSIgfHwgdGVzdCAhIC14ICIkJDEiOyB0aGVuCisrCSAgQUNfTVNHX0VSUk9SKFskJDEgaXMgbm90IGFuIGV4ZWN1dGFibGUgZmlsZV0pCisrCWZpCisrICAgICAgZmkKKysgICAgICBBQ19NU0dfUkVTVUxUKFskJDFdKQorKyAgICAgIGlmIHRlc3QgISAtZSAiJCQxIjsgdGhlbgorKyAgICAgICAgQUNfTVNHX1dBUk4oWyQkMSBkb2VzIG5vdCBleGlzdF0pCisrICAgICAgZmkKKysgICAgICBDT01QQVRfU1lNTElOS1M9IiRDT01QQVRfU1lNTElOS1MgJDIiCisrICAgIGZpCisrICBdLFsKKysgICAgbTRfaWYoWyQzXSxbXSxbCisrICAgICAgQUNfUEFUSF9QUk9HKCQxLCQyLCwkUEFUSDokNCkKKysgICAgXSxbCisrICAgICAgQUNfUEFUSF9QUk9HUygkMSwkMywsJFBBVEg6JDQpCisrICAgICAgaWYgdGVzdCAtbiAiJCQxIiAtYSAiYGV4cHIgIiQkMSIgOiAnLiovXChbW14vXV0qXCkkJ2AiICE9ICIkMiI7IHRoZW4KKysJQ09NUEFUX1NZTUxJTktTPSIkQ09NUEFUX1NZTUxJTktTICQyIgorKyAgICAgIGZpCisrICAgIF0pCisrICAgIG00X2lmKFskNF0sW10sW10sWworKyAgICAgIGlmIHRlc3QgLW4gIiQkMSI7IHRoZW4KKysJYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorKyAgICAgICAgZm9yIGRpciBpbiAiJDQiOyBkbworKyAgICAgICAgICBpZiB0ZXN0ICJgZGlybmFtZSAkJDFgIiA9ICIkZGlyIjsgdGhlbgorKyAgICAgICAgICAgIENPTVBBVF9TWU1MSU5LUz0iJENPTVBBVF9TWU1MSU5LUyAkMiIKKysJICAgIGJyZWFrCisrCSAgZmkKKysgICAgICAgIGRvbmUKKysJSUZTPSIkYXNfc2F2ZV9JRlMiCisrICAgICAgZmkKKysgICAgXSkKKysgICAgaWYgdGVzdCAteiAiJCQxIjsgdGhlbgorKyAgICAgIEFDX01TR19XQVJOKFskMiBub3QgZm91bmQsIHNvbWUgb3B0aW9uYWwgZnVuY3Rpb25hbGl0aWVzIHdpbGwgYmUgbWlzc2luZ10pCisrICAgIGZpCisrICBdKQorKyAgaWYgdGVzdCAteiAiJCQxIjsgdGhlbgorKyAgICAkMT0kMgorKyAgZmkKKysgIEFDX1NVQlNUKCQxKQorK10pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9nbnVfcGF0Y2hfdGVzdF9maXhfdGFyZ2V0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvZ251X3BhdGNoX3Rlc3RfZml4X3RhcmdldC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzIxNTViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvZ251X3BhdGNoX3Rlc3RfZml4X3RhcmdldC5wYXRjaApAQCAtMCwwICsxLDI2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKwordGhlIHRlc3Qgc2hvdWxkIGJlIHNraXBwZWQgZm9yIGNyb3NzIGNvbXBpbGluZy4KKworU2lnbmVkLW9mZi1ieTogUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDAyNmEzNmMuLjhhZjU5MWIgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI0NSw2ICsyNDUsNyBAQCBmaQorIFFVSUxUX0NPTVBBVF9QUk9HX1BBVEgoRElGRiwgZGlmZikKKyBRVUlMVF9DT01QQVRfUFJPR19QQVRIKFBBVENILCBwYXRjaCkKKyAKKytpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgIT0gInh5ZXMiOyB0aGVuCisgIyBTdW4gZGlmZiBhbmQgb3RoZXJzIHdpbGwgbm90IHdvcmsgYmVjYXVzZSBHTlUgcGF0Y2ggb3B0aW9ucyBhcmUgdXNlZC4KKyBBQ19NU0dfQ0hFQ0tJTkcoW3RoZSB2ZXJzaW9uIG9mICRESUZGXSkKKyBpZiAkRElGRiAtLXZlcnNpb24gMj4vZGV2L251bGwgfCBncmVwIEdOVSA+L2Rldi9udWxsOyB0aGVuCitAQCAtMjkzLDYgKzI5NCw3IEBAIGN1cnJlbnQgdmVyc2lvbiBvZiBwYXRjaCBmcm9tIGZ0cC5nbnUub3JnLCBvciBpZiB5b3UgYWxyZWFkeSBoYXZlIEdOVSBwYXRjaAorIHRoZW4geW91IGNhbiBzdXBwbHkgaXRzIHBhdGggd2l0aCB0aGUgJy0td2l0aC1wYXRjaD0nIG9wdGlvbi4KKyBdKQorIGZpCisrZmkKKyAKKyBRVUlMVF9DT01QQVRfUFJPR19QQVRIKEZJTkQsIGZpbmQpCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9pbnN0YWxsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvaW5zdGFsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmE3YWY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvaW5zdGFsbC5wYXRjaApAQCAtMCwwICsxLDEzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIHF1aWx0LTAuNDcvTWFrZWZpbGUuaW4JMjAwOC0xMi0zMSAxOTowOToxMy4wMDAwMDAwMDAgKzAwMDAKKysrKyBxdWlsdC0wLjQ3L01ha2VmaWxlLmluLm9yaWcJMjAwOC0wOC0yMSAxMzoyMTozMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMyw3ICsxMyw3IEBACisgbWFuZGlyIDo9CUBtYW5kaXJACisgbG9jYWxlZGlyIDo9CSQoZGF0YWRpcikvbG9jYWxlCisgZW1hY3NkaXIgOj0JJChkYXRhZGlyKS9lbWFjcy9zaXRlLWxpc3AKKy1ldGNkaXIgOj0JJChzdWJzdCAvdXNyL2V0YywvZXRjLCQocHJlZml4KS9ldGMpCisrZXRjZGlyIDo9CUBzeXNjb25mZGlyQAorIAorIElOU1RBTEwgOj0JQElOU1RBTExACisgUE9EMk1BTiA6PQlAUE9EMk1BTkAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NThhOWRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCisKK2xuIC1zZiAvYmluL2VkIC91c3IvYmluL2VkCitmb3IgaSBpbiBgbHMgdGVzdC8qLnRlc3QgfGF3ayAtRi4gJ3twcmludCAkMX0nIHxhd2sgLUYvICd7cHJpbnQgJDJ9J2A7IGRvIG1ha2UgY2hlY2stJGk7IGlmIFsgJD8gLWVxIDAgXTsgdGhlbiBlY2hvIFBBU1M6ICRpLnRlc3Q7IGVsc2UgZWNobyBGQUlMOiAkaS50ZXN0OyBmaTsgZG9uZQorcm0gLWYgL3Vzci9iaW4vZWQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0XzAuNjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdF8wLjY0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZjkwMGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdF8wLjY0LmJiCkBAIC0wLDAgKzEsMTYgQEAKK3JlcXVpcmUgcXVpbHQuaW5jCitpbmhlcml0IGdldHRleHQKK1JERVBFTkRTXyR7UE59ICs9ICJwYXRjaCBkaWZmc3RhdCBiemlwMiB1dGlsLWxpbnV4IgorU1JDX1VSSSArPSAiZmlsZTovL2FjbG9jYWwucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2dudV9wYXRjaF90ZXN0X2ZpeF90YXJnZXQucGF0Y2ggXAorICAgICAgICAgICAiCisKKyMgZml4IGJ1aWxkLWRpc3RybyBzcGVjaWZpYyBwZXJsIHBhdGggaW4gdGhlIHRhcmdldCBwZXJsIHNjcmlwdHMKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWZvciBwZXJsc2NyaXB0IGluICR7RH0ke2RhdGFkaXJ9L3F1aWx0L3NjcmlwdHMvcmVtb3ZlLXRyYWlsaW5nLXdzICR7RH0ke2RhdGFkaXJ9L3F1aWx0L3NjcmlwdHMvZGVwZW5kZW5jeS1ncmFwaCAke0R9JHtkYXRhZGlyfS9xdWlsdC9zY3JpcHRzL2VkbWFpbCAke0R9JHtiaW5kaXJ9L2d1YXJkcworCWRvCisJCWlmIFsgLWYgJHBlcmxzY3JpcHQgXTsgdGhlbgorCQkJc2VkIC1pIC1lICcxcywjIS4qcGVybCwjISAke1VTUkJJTlBBVEh9L2VudiBwZXJsLCcgJHBlcmxzY3JpcHQKKwkJZmkKKwlkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yZW1ha2UvcmVtYWtlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JlbWFrZS9yZW1ha2UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmODg5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yZW1ha2UvcmVtYWtlLmluYwpAQCAtMCwwICsxLDE2IEBACitTVU1NQVJZID0gIk1ha2VmaWxlIGRlYnVnZ2VyIHdoaWNoIGlzIGdudW1ha2UgY29tcGF0aWJsZSIKK0RFU0NSSVBUSU9OID0gInJlbWFrZSBpcyBhIHBhdGNoZWQgYW5kIG1vZGVybml6ZWQgdmVyc2lvbiBvZiBHTlUgbWFrZSBcCit1dGlsaXR5IHRoYXQgYWRkcyBpbXByb3ZlZCBlcnJvciByZXBvcnRpbmcsIHRoZSBhYmlsaXR5IHRvIHRyYWNlIFwKK2V4ZWN1dGlvbiBpbiBhIGNvbXByZWhlbnNpYmxlIHdheSwgYW5kIGEgZGVidWdnZXIuIgorCitIT01FUEFHRSA9ICJodHRwOi8vYmFzaGRiLnNvdXJjZWZvcmdlLm5ldC9yZW1ha2UvIgorU0VDVElPTiA9ICJkZXZlbCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3JvY2t5L3JlbWFrZS5naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdXBkYXRlLWFsdGVybmF0aXZlcyBwa2djb25maWcKKworQUxURVJOQVRJVkVfJHtQTn0gPSAibWFrZSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVttYWtlXSA9ICIke2JpbmRpcn0vbWFrZSIKK0FMVEVSTkFUSVZFX1RBUkdFVFttYWtlXSA9ICIke2JpbmRpcn0vcmVtYWtlIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcmVtYWtlL3JlbWFrZS92ZXJzaW9uLXJlbWFrZS50ZXhpLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcmVtYWtlL3JlbWFrZS92ZXJzaW9uLXJlbWFrZS50ZXhpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNjMyOWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yZW1ha2UvcmVtYWtlL3ZlcnNpb24tcmVtYWtlLnRleGkucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK3ZlcnNpb24tcmVtYWtlLnRleGkgaXMgbm90IHRoZXJlIGJ1dCBpdCBpcyByZXF1aXJlZCBieSByZW1ha2UudGV4aSwKK2p1c3QgYWRkIGl0IGZvciBnZXR0aW5nIHRoZSAnbWFrZSByZW1ha2UuaW5mbycgd29ya3MuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkaWZmIC0tZ2l0IGEvZG9jL3ZlcnNpb24tcmVtYWtlLnRleGkgYi9kb2MvdmVyc2lvbi1yZW1ha2UudGV4aQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjJhM2I3MmIKKy0tLSAvZGV2L251bGwKKysrKyBiL2RvYy92ZXJzaW9uLXJlbWFrZS50ZXhpCitAQCAtMCwwICsxLDQgQEAKKytAc2V0IFVQREFURUQgMTAgSnVuZSAyMDEyCisrQHNldCBVUERBVEVELU1PTlRIIEp1bmUgMjAxMgorK0BzZXQgRURJVElPTiAzLjgyK2RiZy0wLjlnaXQKKytAc2V0IFZFUlNJT04gMy44MitkYmctMC45Z2l0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yZW1ha2UvcmVtYWtlXzQuMStkYmctMS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcmVtYWtlL3JlbWFrZV80LjErZGJnLTEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjE5MTNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcmVtYWtlL3JlbWFrZV80LjErZGJnLTEuMS5iYgpAQCAtMCwwICsxLDI3IEBACitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2xvYi9DT1BZSU5HLkxJQjttZDU9NGE3NzBiNjdlNmJlMGY2MGRhMjQ0YmViMmRlMGZjZTQiCityZXF1aXJlIHJlbWFrZS5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL3ZlcnNpb24tcmVtYWtlLnRleGkucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNSRVYgPSAiY2Y1NDY0MWQ1MGEwMTY1YmIxNzYyMmIzZTk3NzBmNDI2Y2NiYzU2MSIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0RFUEVORFMgKz0gInJlYWRsaW5lIGd1aWxlIgorIyBOZWVkIHRvIGFkZCAiZ2V0dGV4dC1uYXRpdmUiIGRlcGVuZGVuY3kgdG8gcmVtYWtlLW5hdGl2ZS4KKyMgQnkgZGVmYXVsdCBvbmx5ICJnZXR0ZXh0LW1pbmltYWwtbmF0aXZlIiBpcyBhZGRlZAorIyB3aGVuIGluaGVyaXQgZ2V0dGV4dC4KK0RFUEVORFNfY2xhc3MtbmF0aXZlICs9ICJnZXR0ZXh0LW5hdGl2ZSIKK1BST1ZJREVTICs9ICJtYWtlIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAjIHJlbW92ZSB0aGUgZGVmYXVsdCBMSU5HVUFTIHNpbmNlIHdlIGFyZSBub3QgZ29pbmcgdG8gZ2VuZXJhdGUgbGFuZ3VhZ2VzCisgICAgcm0gJHtTfS9wby9MSU5HVUFTCisgICAgdG91Y2ggJHtTfS9wby9MSU5HVUFTCisgICAgIyBjcmVhdGUgY29uZmlnLnJwYXRoIHdoaWNoIHJlcXVpcmVkIGJ5IGNvbmZpZ3VyZS5hYworICAgICggY2QgJHtTfTsgYXV0b3BvaW50IHx8IHRvdWNoIGNvbmZpZy5ycGF0aCApCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvYWRkX1JQTVNFTlNFX01JU1NJTkdPS190b19ycG1tb2R1bGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9hZGRfUlBNU0VOU0VfTUlTU0lOR09LX3RvX3JwbW1vZHVsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODc3ODcwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvYWRkX1JQTVNFTlNFX01JU1NJTkdPS190b19ycG1tb2R1bGUucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1TcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogUm9uYW4gTGUgTWFydHJldCA8cm9uYW4ubGVtYXJ0cmV0QG9wZW4uZXVyb2dpY2llbC5vcmc+IAorCitkaWZmIC0tZ2l0IGEvcHl0aG9uL3JwbW1vZHVsZS5jIGIvcHl0aG9uL3JwbW1vZHVsZS5jCitpbmRleCBhNGZlMjE3Li43MjhjNjZjIDEwMDY0NAorLS0tIGEvcHl0aG9uL3JwbW1vZHVsZS5jCisrKysgYi9weXRob24vcnBtbW9kdWxlLmMKK0BAIC0zOTYsNiArMzk2LDEwIEBAIHN0YXRpYyBpbnQgaW5pdE1vZHVsZShQeU9iamVjdCAqbSkKKyAgICAgUkVHSVNURVJfRU5VTShSUE1TRU5TRV9TVFJPTkcpOworICAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX0NPTkZJRyk7CisgCisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9PRSkKKysgICAgUkVHSVNURVJfRU5VTShSUE1TRU5TRV9NSVNTSU5HT0spOworKyNlbmRpZgorKworICAgICBSRUdJU1RFUl9FTlVNKFJQTVRSQU5TX0ZMQUdfVEVTVCk7CisgICAgIFJFR0lTVEVSX0VOVU0oUlBNVFJBTlNfRkxBR19CVUlMRF9QUk9CUyk7CisgICAgIFJFR0lTVEVSX0VOVU0oUlBNVFJBTlNfRkxBR19OT1NDUklQVFMpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvZGlzYWJsZV9zaG9ydGNpcmN1aXRlZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL2Rpc2FibGVfc2hvcnRjaXJjdWl0ZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E2NDZkZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL2Rpc2FibGVfc2hvcnRjaXJjdWl0ZWQucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJvbmFuIExlIE1hcnRyZXQgPHJvbmFuLmxlbWFydHJldEBvcGVuLmV1cm9naWNpZWwub3JnPgorCisKK0luZGV4OiBycG0tNC4xMS4yL2J1aWxkL3BhY2suYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS00LjExLjIub3JpZy9idWlsZC9wYWNrLmMKKysrKyBycG0tNC4xMS4yL2J1aWxkL3BhY2suYworQEAgLTU3MSw5ICs1NzEsOSBAQCBycG1SQyBwYWNrYWdlQmluYXJpZXMocnBtU3BlYyBzcGVjLCBjb25zCisgCSAgICBoZWFkZXJQdXRCaW4ocGtnLT5oZWFkZXIsIFJQTVRBR19TT1VSQ0VQS0dJRCwgc3BlYy0+c291cmNlUGtnSWQsMTYpOworIAl9CisgCistCWlmIChjaGVhdGluZykgeworLQkgICAgKHZvaWQpIHJwbWxpYk5lZWRzRmVhdHVyZShwa2csICJTaG9ydENpcmN1aXRlZCIsICI0LjkuMC0xIik7CistCX0KKysvLwlpZiAoY2hlYXRpbmcpIHsKKysvLwkgICAgKHZvaWQpIHJwbWxpYk5lZWRzRmVhdHVyZShwa2csICJTaG9ydENpcmN1aXRlZCIsICI0LjkuMC0xIik7CisrLy8JfQorIAkKKyAJeyAgIGNoYXIgKmJpbkZvcm1hdCA9IHJwbUdldFBhdGgoIiV7X3JwbWZpbGVuYW1lfSIsIE5VTEwpOworIAkgICAgY2hhciAqYmluUnBtLCAqYmluRGlyOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvZml4X2xpYmRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL2ZpeF9saWJkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUwNjI2YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL2ZpeF9saWJkaXIucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1Db3JlIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBSb25hbiBMZSBNYXJ0cmV0IDxyb25hbi5sZW1hcnRyZXRAb3Blbi5ldXJvZ2ljaWVsLm9yZz4KKworCitkaWZmIC0tZ2l0IGEvaW5zdGFsbHBsYXRmb3JtIGIvaW5zdGFsbHBsYXRmb3JtCitpbmRleCA4YzNlYmEwLi5mYTE1ZTkxIDEwMDc1NQorLS0tIGEvaW5zdGFsbHBsYXRmb3JtCisrKysgYi9pbnN0YWxscGxhdGZvcm0KK0BAIC0xMTIsNyArMTEyLDcgQEAgZm9yIEFSQ0ggaW4gbm9hcmNoIGBncmVwIF5hcmNoX2Nhbm9uICRSUE1SQyB8IGN1dCAtZDogLWYyYDsgZG8KKyAgIFsgLXogIiRDQU5PTkFSQ0giIF0gJiYgY29udGludWUKKyAKKyAgIGlmIFsgIiRPUyIgPSAibGludXgiIF0gJiYgWyAiJENBTk9OQ09MT1IiID0gMyBdOyB0aGVuCistICAgICAgTElCPSR7TElCfTY0CisrICAgICAgTElCPSR7TElCfQorICAgZmkKKyAKKyAgIFBQRD0iJHtERVNURElSfS8ke3BsYXRmb3JtZGlyfS8ke0FSQ0h9LSR7T1N9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvcHl0aG9uZGVwcy5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3B5dGhvbmRlcHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDgzYjE3NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3B5dGhvbmRlcHMuc2gKQEAgLTAsMCArMSwxNiBAQAorIyEvYmluL3NoCisKK1sgJCMgLWdlIDEgXSB8fCB7CisgICAgY2F0ID4gL2Rldi9udWxsCisgICAgZXhpdCAwCit9CisKK2Nhc2UgJDEgaW4KKy1SfC0tcmVxdWlyZXMpCisgICAgc2hpZnQKKyAgICBncmVwICIvdXNyL1wobGliW14vXSpcfHNoYXJlXCkvcHl0aG9uW14vXSovIiA+L2Rldi9udWxsICYmIGVjaG8gInB5dGhvbiIKKyAgICBleGl0IDAKKyAgICA7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3JlbW92ZS1kYjMtZnJvbS1jb25maWd1cmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9yZW1vdmUtZGIzLWZyb20tY29uZmlndXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NDBlNTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9yZW1vdmUtZGIzLWZyb20tY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKKworRGlzYWJsZSBjb25maWd1cmluZyB0aGUgZGIzIGRpcmVjdG9yeSBzaW5jZSB3ZSB3aWxsIGJlIHVzaW5nIHRoZQorZXh0ZXJuYWwgREIgcHJvdmlkZWQgYXMgcGFydCBvZiBPRS1Db3JlIGFscmVhZHksIG5vIG5lZWQgdG8gaGF2ZQorZHVwbGljYXRlIGRhdGFiYXNlIGNvZGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtQ29yZSBTcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogcnBtLTQuMTEuMi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNC4xMS4yLm9yaWcvY29uZmlndXJlLmFjCisrKysgcnBtLTQuMTEuMi9jb25maWd1cmUuYWMKK0BAIC04MjUsOSArODI1LDkgQEAgQUNfU1VCU1QoUlBNQ09ORklHRElSKQorIAorIEFDX1NVQlNUKE9CSkRVTVApCisgCistaWYgdGVzdCAiJHdpdGhfZXh0ZXJuYWxfZGIiID0gbm87IHRoZW4KKy0gICAgQUNfQ09ORklHX1NVQkRJUlMoZGIzKQorLWZpCisrI2lmIHRlc3QgIiR3aXRoX2V4dGVybmFsX2RiIiA9IG5vOyB0aGVuCisrIyAgICBBQ19DT05GSUdfU1VCRElSUyhkYjMpCisrI2ZpCisgCisgQU1fQ09ORElUSU9OQUwoW1dJVEhfSU5URVJOQUxfREJdLFt0ZXN0ICIkd2l0aF9leHRlcm5hbF9kYiIgPSBub10pCisgQU1fQ09ORElUSU9OQUwoW0RPWFlHRU5dLFt0ZXN0ICIkRE9YWUdFTiIgIT0gbm9dKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvcmVtb3ZlLWRpci1jaGVjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3JlbW92ZS1kaXItY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFlY2FiNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3JlbW92ZS1kaXItY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJvbmFuIExlIE1hcnRyZXQgPHJvbmFuLmxlbWFydHJldEBvcGVuLmV1cm9naWNpZWwub3JnPgorCisKK0luZGV4OiBycG0tNC4xMS4yL2J1aWxkL2ZpbGVzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNC4xMS4yLm9yaWcvYnVpbGQvZmlsZXMuYworKysrIHJwbS00LjExLjIvYnVpbGQvZmlsZXMuYworQEAgLTEzMjEsMTIgKzEzMjEsNiBAQCBzdGF0aWMgcnBtUkMgYWRkRmlsZShGaWxlTGlzdCBmbCwgY29uc3QKKyAJfQorICAgICB9CisgCistICAgIC8qIEVycm9yIG91dCB3aGVuIGEgbm9uLWRpcmVjdG9yeSBpcyBzcGVjaWZpZWQgYXMgb25lIGluIHNwZWMgKi8KKy0gICAgaWYgKGZsLT5jdXIuaXNEaXIgJiYgKHN0YXRwID09ICZzdGF0YnVmKSAmJiAhU19JU0RJUihzdGF0cC0+c3RfbW9kZSkpIHsKKy0JcnBtbG9nKFJQTUxPR19FUlIsIF8oIk5vdCBhIGRpcmVjdG9yeTogJXNcbiIpLCBkaXNrUGF0aCk7CistCWdvdG8gZXhpdDsKKy0gICAgfQorLQorICAgICAvKiBEb24ndCByZWN1cnNlIGludG8gZXhwbGljaXQgJWRpciwgZG9uJ3QgZG91YmxlLXJlY3Vyc2UgZnJvbSBmdHMgKi8KKyAgICAgaWYgKChmbC0+Y3VyLmlzRGlyICE9IDEpICYmIChzdGF0cCA9PSAmc3RhdGJ1ZikgJiYgU19JU0RJUihzdGF0cC0+c3RfbW9kZSkpIHsKKyAJcmV0dXJuIHJlY3Vyc2VEaXIoZmwsIGRpc2tQYXRoKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3JwbS1zY3JpcHRldGV4ZWNoZWxwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvcnBtLXNjcmlwdGV0ZXhlY2hlbHAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMzM2RlYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3JwbS1zY3JpcHRldGV4ZWNoZWxwLnBhdGNoCkBAIC0wLDAgKzEsMTk0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLUNvcmVdCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJvbmFuIExlIE1hcnRyZXQgPHJvbmFuLmxlbWFydHJldEBvcGVuLmV1cm9naWNpZWwub3JnPgorCisKK0luZGV4OiBycG0tNC4xMS4yL2xpYi9wc20uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS00LjExLjIub3JpZy9saWIvcHNtLmMKKysrKyBycG0tNC4xMS4yL2xpYi9wc20uYworQEAgLTQyMSw3ICs0MjEsOCBAQCBzdGF0aWMgcnBtUkMgcnVuU2NyaXB0KHJwbXBzbSBwc20sIEFSR1ZfCisgCisgICAgIHJwbXN3RW50ZXIocnBtdHNPcChwc20tPnRzLCBSUE1UU19PUF9TQ1JJUFRMRVRTKSwgMCk7CisgICAgIHJjID0gcnBtU2NyaXB0UnVuKHNjcmlwdCwgYXJnMSwgYXJnMiwgc2ZkLAorLQkJICAgICAgcHJlZml4ZXMsIHdhcm5fb25seSwgc2VsaW51eCk7CisrCQkgICAgICBwcmVmaXhlcywgd2Fybl9vbmx5LCBzZWxpbnV4LCBycG10c1Jvb3REaXIocHNtLT50cykgKTsKKysKKyAgICAgcnBtc3dFeGl0KHJwbXRzT3AocHNtLT50cywgUlBNVFNfT1BfU0NSSVBUTEVUUyksIDApOworIAorICAgICAvKiBNYXAgd2Fybi1vbmx5IGVycm9ycyB0byAibm90Zm91bmQiIGZvciBzY3JpcHQgc3RvcCBjYWxsYmFjayAqLworQEAgLTk1OCwxNSArOTU5LDQ5IEBAIHN0YXRpYyBycG1SQyBycG1wc21TdGFnZShycG1wc20gcHNtLCBwa2cKKyAgICAgY2FzZSBQU01fREVTVFJPWToKKyAJYnJlYWs7CisgICAgIGNhc2UgUFNNX1NDUklQVDoJLyogUnVuIGN1cnJlbnQgcGFja2FnZSBzY3JpcHRsZXRzLiAqLworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrICAgICAgICB7CisrICAgICAgICBjb25zdCBjaGFyICogc2NyaXB0bGV0V3JhcHBlciA9IHJwbUV4cGFuZCgiJXs/X2Nyb3NzX3NjcmlwdGxldF93cmFwcGVyfSIsIE5VTEwpOworKwlpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikKKysJICAgICAodm9pZCkgcnBtQ2hyb290T3V0KCk7CisrI2VuZGlmCisrCisgCXJjID0gcnVuSW5zdFNjcmlwdChwc20pOworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrCWlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKQorKwkgICAgICh2b2lkKSBycG1DaHJvb3RJbigpOworKyAgICAgICAgfQorKyNlbmRpZgorIAlicmVhazsKKyAgICAgY2FzZSBQU01fVFJJR0dFUlM6CisgCS8qIFJ1biB0cmlnZ2VycyBpbiBvdGhlciBwYWNrYWdlKHMpIHRoaXMgcGFja2FnZSBzZXRzIG9mZi4gKi8KKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKyAgICAgICAgeworKyAgICAgICAgY29uc3QgY2hhciAqIHNjcmlwdGxldFdyYXBwZXIgPSBycG1FeHBhbmQoIiV7P19jcm9zc19zY3JpcHRsZXRfd3JhcHBlcn0iLCBOVUxMKTsKKysJaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpCisrCSAgICAgKHZvaWQpIHJwbUNocm9vdE91dCgpOworKyNlbmRpZgorIAlyYyA9IHJ1blRyaWdnZXJzKHBzbSk7CisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpCisrCSAgICAgKHZvaWQpIHJwbUNocm9vdEluKCk7CisrICAgICAgICB9CisrI2VuZGlmCisgCWJyZWFrOworICAgICBjYXNlIFBTTV9JTU1FRF9UUklHR0VSUzoKKyAJLyogUnVuIHRyaWdnZXJzIGluIHRoaXMgcGFja2FnZSBvdGhlciBwYWNrYWdlKHMpIHNldCBvZmYuICovCisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJeworKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBzY3JpcHRsZXRXcmFwcGVyID0gcnBtRXhwYW5kKCIlez9fY3Jvc3Nfc2NyaXB0bGV0X3dyYXBwZXJ9IiwgTlVMTCk7CisrCSAgICBpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikKKysJICAgICAodm9pZCkgcnBtQ2hyb290T3V0KCk7CisrI2VuZGlmCisgCXJjID0gcnVuSW1tZWRUcmlnZ2Vycyhwc20pOworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrCSAgICBpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikKKysJICAgICAodm9pZCkgcnBtQ2hyb290SW4oKTsKKysJfQorKyNlbmRpZgorIAlicmVhazsKKyAKKyAgICAgY2FzZSBQU01fUlBNREJfQUREOiB7CitJbmRleDogcnBtLTQuMTEuMi9saWIvcnBtc2NyaXB0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNC4xMS4yLm9yaWcvbGliL3JwbXNjcmlwdC5jCisrKysgcnBtLTQuMTEuMi9saWIvcnBtc2NyaXB0LmMKK0BAIC05Miw3ICs5Miw3IEBAIHN0YXRpYyBycG1SQyBydW5MdWFTY3JpcHQoaW50IHNlbGludXgsIEEKKyBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IFNDUklQVF9QQVRIID0gIlBBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3Vzci9YMTFSNi9iaW4iOworIAorIHN0YXRpYyB2b2lkIGRvU2NyaXB0RXhlYyhpbnQgc2VsaW51eCwgQVJHVl9jb25zdF90IGFyZ3YsIEFSR1ZfY29uc3RfdCBwcmVmaXhlcywKKy0JCQlGRF90IHNjcmlwdEZkLCBGRF90IG91dCkKKysJCQlGRF90IHNjcmlwdEZkLCBGRF90IG91dCwgY2hhciAqIHJvb3REaXIgKQorIHsKKyAgICAgaW50IHBpcGVzWzJdOworICAgICBpbnQgZmxhZzsKK0BAIC0xNTgsMTMgKzE1OCwxMiBAQCBzdGF0aWMgdm9pZCBkb1NjcmlwdEV4ZWMoaW50IHNlbGludXgsIEFSCisgCSAgICBzZXRlbnYoIlJQTV9JTlNUQUxMX1BSRUZJWCIsICpwZiwgMSk7CisgCX0KKyAgICAgfQorLQkKKy0gICAgaWYgKGNoZGlyKCIvIikgPT0gMCkgeworKyAgICBpZiAoY2hkaXIocm9vdERpcikgPT0gMCkgeworIAkvKiBYWFggRG9uJ3QgbXRyYWNlIGludG8gY2hpbGRyZW4uICovCisgCXVuc2V0ZW52KCJNQUxMT0NfQ0hFQ0tfIik7CisgCisgCS8qIFBlcm1pdCBsaWJzZWxpbnV4IHRvIGRvIHRoZSBzY3JpcHRsZXQgZXhlYy4gKi8KKy0JaWYgKHNlbGludXggPT0gMSkgewkKKysJaWYgKHNlbGludXggPT0gMSkgeworIAkgICAgeHggPSBycG1fZXhlY2NvbigwLCBhcmd2WzBdLCBhcmd2LCBlbnZpcm9uKTsKKyAJfQorIAorQEAgLTE3NSwxMiArMTc0LDEyIEBAIHN0YXRpYyB2b2lkIGRvU2NyaXB0RXhlYyhpbnQgc2VsaW51eCwgQVIKKyAgICAgX2V4aXQoMTI3KTsgLyogZXhpdCAxMjcgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBiYXNoKDEpICovCisgfQorIAorLXN0YXRpYyBjaGFyICogd3JpdGVTY3JpcHQoY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICpzY3JpcHQpCisrc3RhdGljIGNoYXIgKiB3cml0ZVNjcmlwdChjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKnNjcmlwdCwgY2hhciAqIHJvb3REaXIpCisgeworICAgICBjaGFyICpmbiA9IE5VTEw7CisgICAgIHNpemVfdCBzbGVuID0gc3RybGVuKHNjcmlwdCk7CisgICAgIGludCBvayA9IDA7CistICAgIEZEX3QgZmQgPSBycG1Na1RlbXBGaWxlKCIvIiwgJmZuKTsKKysgICAgRkRfdCBmZCA9IHJwbU1rVGVtcEZpbGUocm9vdERpciwgJmZuKTsKKyAKKyAgICAgaWYgKEZlcnJvcihmZCkpCisgCWdvdG8gZXhpdDsKK0BAIC0yMDQsNyArMjAzLDcgQEAgZXhpdDoKKyAgKi8KKyBzdGF0aWMgcnBtUkMgcnVuRXh0U2NyaXB0KGludCBzZWxpbnV4LCBBUkdWX2NvbnN0X3QgcHJlZml4ZXMsCisgCQkgICBjb25zdCBjaGFyICpzbmFtZSwgcnBtbG9nTHZsIGx2bCwgRkRfdCBzY3JpcHRGZCwKKy0JCSAgIEFSR1ZfdCAqIGFyZ3ZwLCBjb25zdCBjaGFyICpzY3JpcHQsIGludCBhcmcxLCBpbnQgYXJnMikKKysJCSAgIEFSR1ZfdCAqIGFyZ3ZwLCBjb25zdCBjaGFyICpzY3JpcHQsIGludCBhcmcxLCBpbnQgYXJnMixjaGFyICogcm9vdERpcikKKyB7CisgICAgIEZEX3Qgb3V0ID0gTlVMTDsKKyAgICAgY2hhciAqIGZuID0gTlVMTDsKK0BAIC0yMTUsNyArMjE0LDcgQEAgc3RhdGljIHJwbVJDIHJ1bkV4dFNjcmlwdChpbnQgc2VsaW51eCwgQQorICAgICBycG1sb2coUlBNTE9HX0RFQlVHLCAiJXM6IHNjcmlwdGxldCBzdGFydFxuIiwgc25hbWUpOworIAorICAgICBpZiAoc2NyaXB0KSB7CistCWZuID0gd3JpdGVTY3JpcHQoKmFyZ3ZwWzBdLCBzY3JpcHQpOworKwlmbiA9IHdyaXRlU2NyaXB0KCphcmd2cFswXSwgc2NyaXB0LCByb290RGlyKTsKKyAJaWYgKGZuID09IE5VTEwpIHsKKyAJICAgIHJwbWxvZyhSUE1MT0dfRVJSLAorIAkJICAgXygiQ291bGRuJ3QgY3JlYXRlIHRlbXBvcmFyeSBmaWxlIGZvciAlczogJXNcbiIpLAorQEAgLTI1OCw3ICsyNTcsNyBAQCBzdGF0aWMgcnBtUkMgcnVuRXh0U2NyaXB0KGludCBzZWxpbnV4LCBBCisgICAgIH0gZWxzZSBpZiAocGlkID09IDApIHsvKiBDaGlsZCAqLworIAlycG1sb2coUlBNTE9HX0RFQlVHLCAiJXM6IGV4ZWN2KCVzKSBwaWQgJWRcbiIsCisgCSAgICAgICBzbmFtZSwgKmFyZ3ZwWzBdLCAodW5zaWduZWQpZ2V0cGlkKCkpOworLQlkb1NjcmlwdEV4ZWMoc2VsaW51eCwgKmFyZ3ZwLCBwcmVmaXhlcywgc2NyaXB0RmQsIG91dCk7CisrCWRvU2NyaXB0RXhlYyhzZWxpbnV4LCAqYXJndnAsIHByZWZpeGVzLCBzY3JpcHRGZCwgb3V0LCByb290RGlyKTsKKyAgICAgfQorIAorICAgICBkbyB7CitAQCAtMjk3LDEzICsyOTYsMjcgQEAgZXhpdDoKKyB9CisgCisgcnBtUkMgcnBtU2NyaXB0UnVuKHJwbVNjcmlwdCBzY3JpcHQsIGludCBhcmcxLCBpbnQgYXJnMiwgRkRfdCBzY3JpcHRGZCwKKy0JCSAgIEFSR1ZfY29uc3RfdCBwcmVmaXhlcywgaW50IHdhcm5fb25seSwgaW50IHNlbGludXgpCisrCQkgICBBUkdWX2NvbnN0X3QgcHJlZml4ZXMsIGludCB3YXJuX29ubHksIGludCBzZWxpbnV4LCBjaGFyICogcm9vdERpcikKKyB7CisgICAgIEFSR1ZfdCBhcmdzID0gTlVMTDsKKyAgICAgcnBtbG9nTHZsIGx2bCA9IHdhcm5fb25seSA/IFJQTUxPR19XQVJOSU5HIDogUlBNTE9HX0VSUjsKKyAgICAgcnBtUkMgcmM7CistCistICAgIGlmIChzY3JpcHQgPT0gTlVMTCkgcmV0dXJuIFJQTVJDX09LOworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrICAgIGNvbnN0IGNoYXIgKiBzY3JpcHRsZXRXcmFwcGVyID0gcnBtRXhwYW5kKCIlez9fY3Jvc3Nfc2NyaXB0bGV0X3dyYXBwZXJ9IiwgTlVMTCk7CisrI2VuZGlmCisrIAorKyAgICAgaWYgKHNjcmlwdCA9PSBOVUxMKSByZXR1cm4gUlBNUkNfT0s7CisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysgICAgaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpIHsKKysgICAgICAgYXJndkFkZCgmYXJncywgc2NyaXB0bGV0V3JhcHBlcik7CisrCisrICAgICAgIGlmICggcm9vdERpciApIHsKKysgICAgICAgICBhcmd2QWRkKCZhcmdzLCByb290RGlyKTsKKysgICAgICAgfSBlbHNlIHsKKysgICAgICAgICBhcmd2QWRkKCZhcmdzLCAiLyIpOworKyAgICAgICB9CisrICAgIH0KKysjZW5kaWYKKyAKKyAgICAgLyogY29uc3RydWN0IGEgbmV3IGFyZ3YgYXMgd2UgY2FuJ3QgbW9kaWZ5IHRoZSBvbmUgZnJvbSBoZWFkZXIgKi8KKyAgICAgaWYgKHNjcmlwdC0+YXJncykgeworQEAgLTMxNSw3ICszMjgsNyBAQCBycG1SQyBycG1TY3JpcHRSdW4ocnBtU2NyaXB0IHNjcmlwdCwgaW50CisgICAgIGlmIChyc3RyZXEoYXJnc1swXSwgIjxsdWE+IikpIHsKKyAJcmMgPSBydW5MdWFTY3JpcHQoc2VsaW51eCwgcHJlZml4ZXMsIHNjcmlwdC0+ZGVzY3IsIGx2bCwgc2NyaXB0RmQsICZhcmdzLCBzY3JpcHQtPmJvZHksIGFyZzEsIGFyZzIpOworICAgICB9IGVsc2UgeworLQlyYyA9IHJ1bkV4dFNjcmlwdChzZWxpbnV4LCBwcmVmaXhlcywgc2NyaXB0LT5kZXNjciwgbHZsLCBzY3JpcHRGZCwgJmFyZ3MsIHNjcmlwdC0+Ym9keSwgYXJnMSwgYXJnMik7CisrCXJjID0gcnVuRXh0U2NyaXB0KHNlbGludXgsIHByZWZpeGVzLCBzY3JpcHQtPmRlc2NyLCBsdmwsIHNjcmlwdEZkLCAmYXJncywgc2NyaXB0LT5ib2R5LCBhcmcxLCBhcmcyLCByb290RGlyKTsKKyAgICAgfQorICAgICBhcmd2RnJlZShhcmdzKTsKKyAKK0luZGV4OiBycG0tNC4xMS4yL2xpYi9ycG1zY3JpcHQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS00LjExLjIub3JpZy9saWIvcnBtc2NyaXB0LmgKKysrKyBycG0tNC4xMS4yL2xpYi9ycG1zY3JpcHQuaAorQEAgLTI5LDcgKzI5LDcgQEAgcnBtU2NyaXB0IHJwbVNjcmlwdEZyZWUocnBtU2NyaXB0IHNjcmlwdAorIAorIFJQTV9HTlVDX0lOVEVSTkFMCisgcnBtUkMgcnBtU2NyaXB0UnVuKHJwbVNjcmlwdCBzY3JpcHQsIGludCBhcmcxLCBpbnQgYXJnMiwgRkRfdCBzY3JpcHRGZCwKKy0gICAgICAgICAgICAgICAgICAgQVJHVl9jb25zdF90IHByZWZpeGVzLCBpbnQgd2Fybl9vbmx5LCBpbnQgc2VsaW51eCk7CisrICAgICAgICAgICAgICAgICAgIEFSR1ZfY29uc3RfdCBwcmVmaXhlcywgaW50IHdhcm5fb25seSwgaW50IHNlbGludXgsIGNoYXIgKiByb290RGlyKTsKKyAKKyBSUE1fR05VQ19JTlRFUk5BTAorIHJwbVRhZ1ZhbCBycG1TY3JpcHRUYWcocnBtU2NyaXB0IHNjcmlwdCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9zdXBwb3J0LXN1Z2dlc3RzLXRhZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3N1cHBvcnQtc3VnZ2VzdHMtdGFnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYTYwODUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9zdXBwb3J0LXN1Z2dlc3RzLXRhZy5wYXRjaApAQCAtMCwwICsxLDM4NCBAQAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogUm9uYW4gTGUgTWFydHJldCA8cm9uYW4ubGVtYXJ0cmV0QG9wZW4uZXVyb2dpY2llbC5vcmc+CisKK2RpZmYgLS1naXQgYS9idWlsZC9wYWNrLmMgYi9idWlsZC9wYWNrLmMKK2luZGV4IGI2YjJiZWEuLjVjM2Q4ZGYgMTAwNjQ0CistLS0gYS9idWlsZC9wYWNrLmMKKysrKyBiL2J1aWxkL3BhY2suYworQEAgLTI3Myw4ICsyNzMsMTAgQEAgc3RhdGljIHJwbVRhZ1ZhbCBkZXBldnJ0YWdzW10gPSB7CisgICAgIFJQTVRBR19DT05GTElDVFZFUlNJT04sCisgICAgIFJQTVRBR19PUkRFUlZFUlNJT04sCisgICAgIFJQTVRBR19UUklHR0VSVkVSU0lPTiwKKy0gICAgUlBNVEFHX1NVR0dFU1RTVkVSU0lPTiwKKy0gICAgUlBNVEFHX0VOSEFOQ0VTVkVSU0lPTiwKKysgICAgUlBNVEFHX1NVR0dFU1RWRVJTSU9OLAorKyAgICBSUE1UQUdfRU5IQU5DRVZFUlNJT04sCisrICAgIFJQTVRBR19SRUNPTU1FTkRWRVJTSU9OLAorKyAgICBSUE1UQUdfU1VQUExFTUVOVFZFUlNJT04sCisgICAgIDAKKyB9OworIAorZGlmZiAtLWdpdCBhL2J1aWxkL3BhcnNlUHJlYW1ibGUuYyBiL2J1aWxkL3BhcnNlUHJlYW1ibGUuYworaW5kZXggNTc3MmJlZi4uY2JiYmVlMyAxMDA2NDQKKy0tLSBhL2J1aWxkL3BhcnNlUHJlYW1ibGUuYworKysrIGIvYnVpbGQvcGFyc2VQcmVhbWJsZS5jCitAQCAtODIxLDYgKzgyMSwxMCBAQCBzdGF0aWMgcnBtUkMgaGFuZGxlUHJlYW1ibGVUYWcocnBtU3BlYyBzcGVjLCBQYWNrYWdlIHBrZywgcnBtVGFnVmFsIHRhZywKKyAJfQorIAkvKiBmYWxsdGhyb3VnaCAqLworICAgICBjYXNlIFJQTVRBR19QUkVSRVE6CisrICAgIGNhc2UgUlBNVEFHX1JFQ09NTUVOREZMQUdTOgorKyAgICBjYXNlIFJQTVRBR19TVUdHRVNURkxBR1M6CisrICAgIGNhc2UgUlBNVEFHX1NVUFBMRU1FTlRGTEFHUzoKKysgICAgY2FzZSBSUE1UQUdfRU5IQU5DRUZMQUdTOgorICAgICBjYXNlIFJQTVRBR19DT05GTElDVEZMQUdTOgorICAgICBjYXNlIFJQTVRBR19PQlNPTEVURUZMQUdTOgorICAgICBjYXNlIFJQTVRBR19QUk9WSURFRkxBR1M6CitAQCAtOTIyLDYgKzkyNiwxMCBAQCBzdGF0aWMgc3RydWN0IFByZWFtYmxlUmVjX3MgY29uc3QgcHJlYW1ibGVMaXN0W10gPSB7CisgICAgIHtSUE1UQUdfSUNPTiwJCTAsIDAsIExFTl9BTkRfU1RSKCJpY29uIil9LAorICAgICB7UlBNVEFHX1BST1ZJREVGTEFHUywJMCwgMCwgTEVOX0FORF9TVFIoInByb3ZpZGVzIil9LAorICAgICB7UlBNVEFHX1JFUVVJUkVGTEFHUywJMiwgMCwgTEVOX0FORF9TVFIoInJlcXVpcmVzIil9LAorKyAgICB7UlBNVEFHX1JFQ09NTUVOREZMQUdTLAkwLCAwLCBMRU5fQU5EX1NUUigicmVjb21tZW5kcyIpfSwKKysgICAge1JQTVRBR19TVUdHRVNURkxBR1MsCTAsIDAsIExFTl9BTkRfU1RSKCJzdWdnZXN0cyIpfSwKKysgICAge1JQTVRBR19TVVBQTEVNRU5URkxBR1MsCTAsIDAsIExFTl9BTkRfU1RSKCJzdXBwbGVtZW50cyIpfSwKKysgICAge1JQTVRBR19FTkhBTkNFRkxBR1MsCTAsIDAsIExFTl9BTkRfU1RSKCJlbmhhbmNlcyIpfSwKKyAgICAge1JQTVRBR19QUkVSRVEsCQkyLCAxLCBMRU5fQU5EX1NUUigicHJlcmVxIil9LAorICAgICB7UlBNVEFHX0NPTkZMSUNURkxBR1MsCTAsIDAsIExFTl9BTkRfU1RSKCJjb25mbGljdHMiKX0sCisgICAgIHtSUE1UQUdfT0JTT0xFVEVGTEFHUywJMCwgMCwgTEVOX0FORF9TVFIoIm9ic29sZXRlcyIpfSwKK2RpZmYgLS1naXQgYS9idWlsZC9wYXJzZVJlcXMuYyBiL2J1aWxkL3BhcnNlUmVxcy5jCitpbmRleCBiYTA4MGExLi4xNDI3MTExIDEwMDY0NAorLS0tIGEvYnVpbGQvcGFyc2VSZXFzLmMKKysrKyBiL2J1aWxkL3BhcnNlUmVxcy5jCitAQCAtNjEsNiArNjEsMTggQEAgcnBtUkMgcGFyc2VSQ1BPVChycG1TcGVjIHNwZWMsIFBhY2thZ2UgcGtnLCBjb25zdCBjaGFyICpmaWVsZCwgcnBtVGFnVmFsIHRhZ04sCisgCW5hbWV0YWcgPSBSUE1UQUdfUkVRVUlSRU5BTUU7CisgCXRhZ2ZsYWdzIHw9IFJQTVNFTlNFX0FOWTsKKyAJYnJlYWs7CisrICAgIGNhc2UgUlBNVEFHX1JFQ09NTUVOREZMQUdTOgorKwluYW1ldGFnID0gUlBNVEFHX1JFQ09NTUVORE5BTUU7CisrCWJyZWFrOworKyAgICBjYXNlIFJQTVRBR19TVUdHRVNURkxBR1M6CisrCW5hbWV0YWcgPSBSUE1UQUdfU1VHR0VTVE5BTUU7CisrCWJyZWFrOworKyAgICBjYXNlIFJQTVRBR19TVVBQTEVNRU5URkxBR1M6CisrCW5hbWV0YWcgPSBSUE1UQUdfU1VQUExFTUVOVE5BTUU7CisrCWJyZWFrOworKyAgICBjYXNlIFJQTVRBR19FTkhBTkNFRkxBR1M6CisrCW5hbWV0YWcgPSBSUE1UQUdfRU5IQU5DRU5BTUU7CisrCWJyZWFrOworICAgICBjYXNlIFJQTVRBR19QUk9WSURFRkxBR1M6CisgCW5hbWV0YWcgPSBSUE1UQUdfUFJPVklERU5BTUU7CisgCWJyZWFrOworZGlmZiAtLWdpdCBhL2J1aWxkL3JlcXByb3YuYyBiL2J1aWxkL3JlcXByb3YuYworaW5kZXggYTM2OGY0Mi4uYzI3MGFmNiAxMDA2NDQKKy0tLSBhL2J1aWxkL3JlcXByb3YuYworKysrIGIvYnVpbGQvcmVxcHJvdi5jCitAQCAtODEsNiArODEsMzAgQEAgaW50IGFkZFJlcVByb3YoUGFja2FnZSBwa2csIHJwbVRhZ1ZhbCB0YWdOLAorIAlleHRyYSA9IEZsYWdzICYgUlBNU0VOU0VfVFJJR0dFUjsKKyAJZHNwID0gJnBrZy0+dHJpZ2dlcnM7CisgCWJyZWFrOworKyAgICBjYXNlIFJQTVRBR19SRUNPTU1FTkROQU1FOgorKwl2ZXJzaW9udGFnID0gUlBNVEFHX1JFQ09NTUVORFZFUlNJT047CisrCWZsYWd0YWcgPSBSUE1UQUdfUkVDT01NRU5ERkxBR1M7CisrCWV4dHJhID0gRmxhZ3MgJiBfQUxMX1JFUVVJUkVTX01BU0s7CisrCWRzcCA9ICZwa2ctPnJlY29tbWVuZHM7CisrCWJyZWFrOworKyAgICBjYXNlIFJQTVRBR19TVUdHRVNUTkFNRToKKysJdmVyc2lvbnRhZyA9IFJQTVRBR19TVUdHRVNUVkVSU0lPTjsKKysJZmxhZ3RhZyA9IFJQTVRBR19TVUdHRVNURkxBR1M7CisrCWV4dHJhID0gRmxhZ3MgJiBfQUxMX1JFUVVJUkVTX01BU0s7CisrCWRzcCA9ICZwa2ctPnN1Z2dlc3RzOworKwlicmVhazsKKysgICAgY2FzZSBSUE1UQUdfU1VQUExFTUVOVE5BTUU6CisrCXZlcnNpb250YWcgPSBSUE1UQUdfU1VQUExFTUVOVFZFUlNJT047CisrCWZsYWd0YWcgPSBSUE1UQUdfU1VQUExFTUVOVEZMQUdTOworKwlleHRyYSA9IEZsYWdzICYgX0FMTF9SRVFVSVJFU19NQVNLOworKwlkc3AgPSAmcGtnLT5zdXBwbGVtZW50czsKKysJYnJlYWs7CisrICAgIGNhc2UgUlBNVEFHX0VOSEFOQ0VOQU1FOgorKwl2ZXJzaW9udGFnID0gUlBNVEFHX0VOSEFOQ0VWRVJTSU9OOworKwlmbGFndGFnID0gUlBNVEFHX0VOSEFOQ0VGTEFHUzsKKysJZXh0cmEgPSBGbGFncyAmIF9BTExfUkVRVUlSRVNfTUFTSzsKKysJZHNwID0gJnBrZy0+ZW5oYW5jZXM7CisrCWJyZWFrOworICAgICBjYXNlIFJQTVRBR19SRVFVSVJFTkFNRToKKyAgICAgZGVmYXVsdDoKKyAJdGFnTiA9IFJQTVRBR19SRVFVSVJFTkFNRTsKK2RpZmYgLS1naXQgYS9idWlsZC9ycG1idWlsZF9pbnRlcm5hbC5oIGIvYnVpbGQvcnBtYnVpbGRfaW50ZXJuYWwuaAoraW5kZXggYTllNGM3Yy4uMGExOTc3ZiAxMDA2NDQKKy0tLSBhL2J1aWxkL3JwbWJ1aWxkX2ludGVybmFsLmgKKysrKyBiL2J1aWxkL3JwbWJ1aWxkX2ludGVybmFsLmgKK0BAIC05Myw2ICs5MywxMCBAQCBzdHJ1Y3QgUGFja2FnZV9zIHsKKyAgICAgcnBtZHMgZHM7CQkJLyohPCBSZXF1aXJlczogTiA9IEVWUiAqLworICAgICBycG1kcyByZXF1aXJlczsKKyAgICAgcnBtZHMgcHJvdmlkZXM7CisrICAgIHJwbWRzIHJlY29tbWVuZHM7CisrICAgIHJwbWRzIHN1Z2dlc3RzOworKyAgICBycG1kcyBzdXBwbGVtZW50czsKKysgICAgcnBtZHMgZW5oYW5jZXM7CisgICAgIHJwbWRzIGNvbmZsaWN0czsKKyAgICAgcnBtZHMgb2Jzb2xldGVzOworICAgICBycG1kcyB0cmlnZ2VyczsKK2RpZmYgLS1naXQgYS9idWlsZC9zcGVjLmMgYi9idWlsZC9zcGVjLmMKK2luZGV4IDcwM2VjNzguLjdhZTIxMjAgMTAwNjQ0CistLS0gYS9idWlsZC9zcGVjLmMKKysrKyBiL2J1aWxkL3NwZWMuYworQEAgLTEzOSw2ICsxMzksMTEgQEAgc3RhdGljIFBhY2thZ2UgZnJlZVBhY2thZ2UoUGFja2FnZSBwa2cpCisgICAgIHBrZy0+ZHMgPSBycG1kc0ZyZWUocGtnLT5kcyk7CisgICAgIHBrZy0+cmVxdWlyZXMgPSBycG1kc0ZyZWUocGtnLT5yZXF1aXJlcyk7CisgICAgIHBrZy0+cHJvdmlkZXMgPSBycG1kc0ZyZWUocGtnLT5wcm92aWRlcyk7CisrICAgIHBrZy0+cmVjb21tZW5kcyA9IHJwbWRzRnJlZShwa2ctPnJlY29tbWVuZHMpOworKyAgICBwa2ctPnN1Z2dlc3RzID0gcnBtZHNGcmVlKHBrZy0+c3VnZ2VzdHMpOworKyAgICBwa2ctPnN1cHBsZW1lbnRzID0gcnBtZHNGcmVlKHBrZy0+c3VwcGxlbWVudHMpOworKyAgICBwa2ctPmVuaGFuY2VzID0gcnBtZHNGcmVlKHBrZy0+ZW5oYW5jZXMpOworKworICAgICBwa2ctPmNvbmZsaWN0cyA9IHJwbWRzRnJlZShwa2ctPmNvbmZsaWN0cyk7CisgICAgIHBrZy0+b2Jzb2xldGVzID0gcnBtZHNGcmVlKHBrZy0+b2Jzb2xldGVzKTsKKyAgICAgcGtnLT50cmlnZ2VycyA9IHJwbWRzRnJlZShwa2ctPnRyaWdnZXJzKTsKK2RpZmYgLS1naXQgYS9saWIvcnBtZHMuYyBiL2xpYi9ycG1kcy5jCitpbmRleCA3YTUxMTY3Li4xZTVkZGEwIDEwMDY0NAorLS0tIGEvbGliL3JwbWRzLmMKKysrKyBiL2xpYi9ycG1kcy5jCitAQCAtNTIsNiArNTIsMjIgQEAgc3RhdGljIGludCBkc1R5cGUocnBtVGFnVmFsIHRhZywKKyAJdCA9ICJSZXF1aXJlcyI7CisgCWV2ciA9IFJQTVRBR19SRVFVSVJFVkVSU0lPTjsKKyAJZiA9IFJQTVRBR19SRVFVSVJFRkxBR1M7CisrICAgIH0gZWxzZSBpZiAodGFnID09IFJQTVRBR19TVVBQTEVNRU5UTkFNRSkgeworKwl0ID0gIlN1cHBsZW1lbnRzIjsKKysJZXZyID0gUlBNVEFHX1NVUFBMRU1FTlRWRVJTSU9OOworKwlmID0gUlBNVEFHX1NVUFBMRU1FTlRGTEFHUzsKKysgICAgfSBlbHNlIGlmICh0YWcgPT0gUlBNVEFHX0VOSEFOQ0VOQU1FKSB7CisrCXQgPSAiRW5oYW5jZXMiOworKwlldnIgPSBSUE1UQUdfRU5IQU5DRVZFUlNJT047CisrCWYgPSBSUE1UQUdfRU5IQU5DRUZMQUdTOworKyAgICB9IGVsc2UgaWYgKHRhZyA9PSBSUE1UQUdfUkVDT01NRU5ETkFNRSkgeworKwl0ID0gIlJlY29tbWVuZHMiOworKwlldnIgPSBSUE1UQUdfUkVDT01NRU5EVkVSU0lPTjsKKysJZiA9IFJQTVRBR19SRUNPTU1FTkRGTEFHUzsKKysgICAgfSBlbHNlIGlmICh0YWcgPT0gUlBNVEFHX1NVR0dFU1ROQU1FKSB7CisrCXQgPSAiU3VnZ2VzdHMiOworKwlldnIgPSBSUE1UQUdfU1VHR0VTVFZFUlNJT047CisrCWYgPSBSUE1UQUdfU1VHR0VTVEZMQUdTOworICAgICB9IGVsc2UgaWYgKHRhZyA9PSBSUE1UQUdfQ09ORkxJQ1ROQU1FKSB7CisgCXQgPSAiQ29uZmxpY3RzIjsKKyAJZXZyID0gUlBNVEFHX0NPTkZMSUNUVkVSU0lPTjsKK2RpZmYgLS1naXQgYS9saWIvcnBtdGFnLmggYi9saWIvcnBtdGFnLmgKK2luZGV4IDY0YjAzZjEuLmI5NDMyMjkgMTAwNjQ0CistLS0gYS9saWIvcnBtdGFnLmgKKysrKyBiL2xpYi9ycG10YWcuaAorQEAgLTIxNywxNCArMjE3LDE0IEBAIHR5cGVkZWYgZW51bSBycG1UYWdfZSB7CisgICAgIFJQTVRBR19QUkVUUkFOU1BST0cJCT0gMTE1MywJLyogc1tdICovCisgICAgIFJQTVRBR19QT1NUVFJBTlNQUk9HCT0gMTE1NCwJLyogc1tdICovCisgICAgIFJQTVRBR19ESVNUVEFHCQk9IDExNTUsCS8qIHMgKi8KKy0gICAgUlBNVEFHX1NVR0dFU1RTTkFNRQkJPSAxMTU2LAkvKiBzW10gZXh0ZW5zaW9uICh1bmltcGxlbWVudGVkKSAqLworLSNkZWZpbmUJUlBNVEFHX1NVR0dFU1RTIFJQTVRBR19TVUdHRVNUU05BTUUJLyogc1tdICh1bmltcGxlbWVudGVkKSAqLworLSAgICBSUE1UQUdfU1VHR0VTVFNWRVJTSU9OCT0gMTE1NywJLyogc1tdIGV4dGVuc2lvbiAodW5pbXBsZW1lbnRlZCkgKi8KKy0gICAgUlBNVEFHX1NVR0dFU1RTRkxBR1MJPSAxMTU4LAkvKiBpW10gZXh0ZW5zaW9uICh1bmltcGxlbWVudGVkKSAqLworLSAgICBSUE1UQUdfRU5IQU5DRVNOQU1FCQk9IDExNTksCS8qIHNbXSBleHRlbnNpb24gcGxhY2Vob2xkZXIgKHVuaW1wbGVtZW50ZWQpICovCistI2RlZmluZQlSUE1UQUdfRU5IQU5DRVMgUlBNVEFHX0VOSEFOQ0VTTkFNRQkvKiBzW10gKHVuaW1wbGVtZW50ZWQpICovCistICAgIFJQTVRBR19FTkhBTkNFU1ZFUlNJT04JPSAxMTYwLAkvKiBzW10gZXh0ZW5zaW9uIHBsYWNlaG9sZGVyICh1bmltcGxlbWVudGVkKSAqLworLSAgICBSUE1UQUdfRU5IQU5DRVNGTEFHUwk9IDExNjEsCS8qIGlbXSBleHRlbnNpb24gcGxhY2Vob2xkZXIgKHVuaW1wbGVtZW50ZWQpICovCisrICAgIFJQTVRBR19PTERTVUdHRVNUU05BTUUJPSAxMTU2LAkvKiBzW10gKHVuaW1wbGVtZW50ZWQpICovCisrI2RlZmluZQlSUE1UQUdfT0xEU1VHR0VTVFMgUlBNVEFHX09MRFNVR0dFU1RTTkFNRSAvKiBzW10gKHVuaW1wbGVtZW50ZWQpICovCisrICAgIFJQTVRBR19PTERTVUdHRVNUU1ZFUlNJT04JPSAxMTU3LAkvKiBzW10gKHVuaW1wbGVtZW50ZWQpICovCisrICAgIFJQTVRBR19PTERTVUdHRVNUU0ZMQUdTCT0gMTE1OCwJLyogaVtdICh1bmltcGxlbWVudGVkKSAqLworKyAgICBSUE1UQUdfT0xERU5IQU5DRVNOQU1FCQk9IDExNTksCS8qIHNbXSAodW5pbXBsZW1lbnRlZCkgKi8KKysjZGVmaW5lCVJQTVRBR19PTERFTkhBTkNFUyBSUE1UQUdfT0xERU5IQU5DRVNOQU1FIC8qIHNbXSAodW5pbXBsZW1lbnRlZCkgKi8KKysgICAgUlBNVEFHX09MREVOSEFOQ0VTVkVSU0lPTgk9IDExNjAsCS8qIHNbXSAodW5pbXBsZW1lbnRlZCkgKi8KKysgICAgUlBNVEFHX09MREVOSEFOQ0VTRkxBR1MJPSAxMTYxLAkvKiBpW10gKHVuaW1wbGVtZW50ZWQpICovCisgICAgIFJQTVRBR19QUklPUklUWQkJPSAxMTYyLCAvKiBpW10gZXh0ZW5zaW9uIHBsYWNlaG9sZGVyICh1bmltcGxlbWVudGVkKSAqLworICAgICBSUE1UQUdfQ1ZTSUQJCT0gMTE2MywgLyogcyAodW5pbXBsZW1lbnRlZCkgKi8KKyAjZGVmaW5lCVJQTVRBR19TVk5JRAlSUE1UQUdfQ1ZTSUQJLyogcyAodW5pbXBsZW1lbnRlZCkgKi8KK0BAIC0yNjEsNiArMjYxLDcgQEAgdHlwZWRlZiBlbnVtIHJwbVRhZ19lIHsKKyAgICAgUlBNVEFHX0JVSUxET0JTT0xFVEVTCT0gMTE5NCwgLyogaW50ZXJuYWwgKHVuaW1wbGVtZW50ZWQpICovCisgICAgIFJQTVRBR19EQklOU1RBTkNFCQk9IDExOTUsIC8qIGkgZXh0ZW5zaW9uICovCisgICAgIFJQTVRBR19OVlJBCQkJPSAxMTk2LCAvKiBzIGV4dGVuc2lvbiAqLworKworICAgICAvKiB0YWdzIDE5OTctNDk5OSByZXNlcnZlZCAqLworICAgICBSUE1UQUdfRklMRU5BTUVTCQk9IDUwMDAsIC8qIHNbXSBleHRlbnNpb24gKi8KKyAgICAgUlBNVEFHX0ZJTEVQUk9WSURFCQk9IDUwMDEsIC8qIHNbXSBleHRlbnNpb24gKi8KK0BAIC0zMDcsNiArMzA4LDI2IEBAIHR5cGVkZWYgZW51bSBycG1UYWdfZSB7CisgICAgIFJQTVRBR19PQlNPTEVURU5FVlJTCT0gNTA0MywgLyogc1tdIGV4dGVuc2lvbiAqLworICAgICBSUE1UQUdfQ09ORkxJQ1RORVZSUwk9IDUwNDQsIC8qIHNbXSBleHRlbnNpb24gKi8KKyAgICAgUlBNVEFHX0ZJTEVOTElOS1MJCT0gNTA0NSwJLyogaVtdIGV4dGVuc2lvbiAqLworKyAgICBSUE1UQUdfUkVDT01NRU5ETkFNRQk9IDUwNDYsCS8qIHNbXSAqLworKyNkZWZpbmUJUlBNVEFHX1JFQ09NTUVORFMgUlBNVEFHX1JFQ09NTUVORE5BTUUJLyogc1tdICovCisrICAgIFJQTVRBR19SRUNPTU1FTkRWRVJTSU9OCT0gNTA0NywJLyogc1tdICovCisrICAgIFJQTVRBR19SRUNPTU1FTkRGTEFHUwk9IDUwNDgsCS8qIGlbXSAqLworKyAgICBSUE1UQUdfU1VHR0VTVE5BTUUJCT0gNTA0OSwJLyogc1tdICovCisrI2RlZmluZQlSUE1UQUdfU1VHR0VTVFMgUlBNVEFHX1NVR0dFU1ROQU1FCS8qIHNbXSAqLworKyAgICBSUE1UQUdfU1VHR0VTVFZFUlNJT04JPSA1MDUwLAkvKiBzW10gZXh0ZW5zaW9uICovCisrICAgIFJQTVRBR19TVUdHRVNURkxBR1MJCT0gNTA1MSwJLyogaVtdIGV4dGVuc2lvbiAqLworKyAgICBSUE1UQUdfU1VQUExFTUVOVE5BTUUJPSA1MDUyLAkvKiBzW10gKi8KKysjZGVmaW5lCVJQTVRBR19TVVBQTEVNRU5UUyBSUE1UQUdfU1VQUExFTUVOVE5BTUUgLyogc1tdICovCisrICAgIFJQTVRBR19TVVBQTEVNRU5UVkVSU0lPTgk9IDUwNTMsCS8qIHNbXSAqLworKyAgICBSUE1UQUdfU1VQUExFTUVOVEZMQUdTCT0gNTA1NCwJLyogaVtdICovCisrICAgIFJQTVRBR19FTkhBTkNFTkFNRQkJPSA1MDU1LAkvKiBzW10gKi8KKysjZGVmaW5lCVJQTVRBR19FTkhBTkNFUyBSUE1UQUdfRU5IQU5DRU5BTUUJLyogc1tdICovCisrICAgIFJQTVRBR19FTkhBTkNFVkVSU0lPTgk9IDUwNTYsCS8qIHNbXSAqLworKyAgICBSUE1UQUdfRU5IQU5DRUZMQUdTCQk9IDUwNTcsCS8qIGlbXSAqLworKyAgICBSUE1UQUdfUkVDT01NRU5ETkVWUlMJPSA1MDU4LCAvKiBzW10gZXh0ZW5zaW9uICovCisrICAgIFJQTVRBR19TVUdHRVNUTkVWUlMJCT0gNTA1OSwgLyogc1tdIGV4dGVuc2lvbiAqLworKyAgICBSUE1UQUdfU1VQUExFTUVOVE5FVlJTCT0gNTA2MCwgLyogc1tdIGV4dGVuc2lvbiAqLworKyAgICBSUE1UQUdfRU5IQU5DRU5FVlJTCQk9IDUwNjEsIC8qIHNbXSBleHRlbnNpb24gKi8KKyAKKyAgICAgUlBNVEFHX0ZJUlNURlJFRV9UQUcJLyohPCBpbnRlcm5hbCAqLworIH0gcnBtVGFnOworZGlmZiAtLWdpdCBhL2xpYi90YWdleHRzLmMgYi9saWIvdGFnZXh0cy5jCitpbmRleCAyOWIyYmFlLi5lOTQwMzEwIDEwMDY0NAorLS0tIGEvbGliL3RhZ2V4dHMuYworKysrIGIvbGliL3RhZ2V4dHMuYworQEAgLTc2MSw2ICs3NjEsMjYgQEAgc3RhdGljIGludCByZXF1aXJlbmV2cnNUYWcoSGVhZGVyIGgsIHJwbXRkIHRkLCBoZWFkZXJHZXRGbGFncyBoZ2ZsYWdzKQorICAgICByZXR1cm4gZGVwbmV2cnNUYWcoaCwgdGQsIGhnZmxhZ3MsIFJQTVRBR19SRVFVSVJFTkFNRSk7CisgfQorIAorK3N0YXRpYyBpbnQgcmVjb21tZW5kbmV2cnNUYWcoSGVhZGVyIGgsIHJwbXRkIHRkLCBoZWFkZXJHZXRGbGFncyBoZ2ZsYWdzKQorK3sKKysgICAgcmV0dXJuIGRlcG5ldnJzVGFnKGgsIHRkLCBoZ2ZsYWdzLCBSUE1UQUdfUkVDT01NRU5ETkFNRSk7CisrfQorKworK3N0YXRpYyBpbnQgc3VnZ2VzdG5ldnJzVGFnKEhlYWRlciBoLCBycG10ZCB0ZCwgaGVhZGVyR2V0RmxhZ3MgaGdmbGFncykKKyt7CisrICAgIHJldHVybiBkZXBuZXZyc1RhZyhoLCB0ZCwgaGdmbGFncywgUlBNVEFHX1NVR0dFU1ROQU1FKTsKKyt9CisrCisrc3RhdGljIGludCBzdXBwbGVtZW50bmV2cnNUYWcoSGVhZGVyIGgsIHJwbXRkIHRkLCBoZWFkZXJHZXRGbGFncyBoZ2ZsYWdzKQorK3sKKysgICAgcmV0dXJuIGRlcG5ldnJzVGFnKGgsIHRkLCBoZ2ZsYWdzLCBSUE1UQUdfU1VQUExFTUVOVE5BTUUpOworK30KKysKKytzdGF0aWMgaW50IGVuaGFuY2VuZXZyc1RhZyhIZWFkZXIgaCwgcnBtdGQgdGQsIGhlYWRlckdldEZsYWdzIGhnZmxhZ3MpCisreworKyAgICByZXR1cm4gZGVwbmV2cnNUYWcoaCwgdGQsIGhnZmxhZ3MsIFJQTVRBR19FTkhBTkNFTkFNRSk7CisrfQorKworIHN0YXRpYyBpbnQgcHJvdmlkZW5ldnJzVGFnKEhlYWRlciBoLCBycG10ZCB0ZCwgaGVhZGVyR2V0RmxhZ3MgaGdmbGFncykKKyB7CisgICAgIHJldHVybiBkZXBuZXZyc1RhZyhoLCB0ZCwgaGdmbGFncywgUlBNVEFHX1BST1ZJREVOQU1FKTsKK0BAIC04MjMsNiArODQzLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGVhZGVyVGFnRnVuY19zIHJwbUhlYWRlclRhZ0V4dGVuc2lvbnNbXSA9IHsKKyAgICAgeyBSUE1UQUdfRVBPQ0hOVU0sCQllcG9jaG51bVRhZyB9LAorICAgICB7IFJQTVRBR19JTlNURklMRU5BTUVTLAlpbnN0ZmlsZW5hbWVzVGFnIH0sCisgICAgIHsgUlBNVEFHX1JFUVVJUkVORVZSUywJcmVxdWlyZW5ldnJzVGFnIH0sCisrICAgIHsgUlBNVEFHX1JFQ09NTUVORE5FVlJTLAlyZWNvbW1lbmRuZXZyc1RhZ30sCisrICAgIHsgUlBNVEFHX1NVR0dFU1RORVZSUywJc3VnZ2VzdG5ldnJzVGFnfSwKKysgICAgeyBSUE1UQUdfU1VQUExFTUVOVE5FVlJTLAlzdXBwbGVtZW50bmV2cnNUYWd9LAorKyAgICB7IFJQTVRBR19FTkhBTkNFTkVWUlMsCWVuaGFuY2VuZXZyc1RhZ30sCisgICAgIHsgUlBNVEFHX1BST1ZJREVORVZSUywJcHJvdmlkZW5ldnJzVGFnIH0sCisgICAgIHsgUlBNVEFHX09CU09MRVRFTkVWUlMsCW9ic29sZXRlbmV2cnNUYWcgfSwKKyAgICAgeyBSUE1UQUdfQ09ORkxJQ1RORVZSUywJY29uZmxpY3RuZXZyc1RhZyB9LAorZGlmZiAtLWdpdCBhL3JwbXBvcHQuaW4gYi9ycG1wb3B0LmluCitpbmRleCA4MDU1OTllLi4wMzZhYjRlIDEwMDY0NAorLS0tIGEvcnBtcG9wdC5pbgorKysrIGIvcnBtcG9wdC5pbgorQEAgLTY3LDYgKzY3LDE5IEBAIHJwbQlhbGlhcyAtLXJlcXVpcmVzCS0tcWYgXAorIAktLVBPUFRkZXNjPSQibGlzdCBjYXBhYmlsaXRpZXMgcmVxdWlyZWQgYnkgcGFja2FnZShzKSIKKyBycG0JYWxpYXMgLVIgLS1yZXF1aXJlcworIAorK3JwbQlhbGlhcyAtLXJlY29tbWVuZHMJLS1xZiBcCisrICAiWyV8VkVSQk9TRT97JXtSRUNPTU1FTkRGTEFHUzpkZXB0eXBlfTogfTp7fXwle1JFQ09NTUVORE5FVlJTfVxuXSIgXAorKwktLVBPUFRkZXNjPSQibGlzdCBjYXBhYmlsaXRpZXMgcmVjb21tZW5kZWQgYnkgcGFja2FnZShzKSIKKytycG0JYWxpYXMgLS1zdWdnZXN0cwktLXFmIFwKKysgICJbJXxWRVJCT1NFP3sle1NVR0dFU1RGTEFHUzpkZXB0eXBlfTogfTp7fXwle1NVR0dFU1RORVZSU31cbl0iIFwKKysJLS1QT1BUZGVzYz0kImxpc3QgY2FwYWJpbGl0aWVzIHN1Z2dlc3RlZCBieSBwYWNrYWdlKHMpIgorK3JwbQlhbGlhcyAtLXN1cHBsZW1lbnRzCS0tcWYgXAorKyAgIlslfFZFUkJPU0U/eyV7U1VQUExFTUVOVEZMQUdTOmRlcHR5cGV9OiB9Ont9fCV7U1VQUExFTUVOVE5FVlJTfVxuXSIgXAorKwktLVBPUFRkZXNjPSQibGlzdCBjYXBhYmlsaXRpZXMgc3VwcGxlbWVudGVkIGJ5IHBhY2thZ2UocykiCisrcnBtCWFsaWFzIC0tZW5oYW5jZXMJLS1xZiBcCisrICAiWyV8VkVSQk9TRT97JXtFTkhBTkNFRkxBR1M6ZGVwdHlwZX06IH06e318JXtFTkhBTkNFTkVWUlN9XG5dIiBcCisrCS0tUE9QVGRlc2M9JCJsaXN0IGNhcGFiaWxpdGllcyBlbmhhbmNlZCBieSBwYWNrYWdlKHMpIgorKworIHJwbQlhbGlhcyAtLWluZm8gLS1xZiAnXAorIE5hbWUgICAgICAgIDogJXtOQU1FfVxuXAorICV8RVBPQ0g/e0Vwb2NoICAgICAgIDogJXtFUE9DSH1cbn18XAorZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvU1BFQ1MvZGVwdGVzdC5zcGVjIGIvdGVzdHMvZGF0YS9TUEVDUy9kZXB0ZXN0LnNwZWMKK2luZGV4IGNiNGNiYmQuLjdjNDdmNmQgMTAwNjQ0CistLS0gYS90ZXN0cy9kYXRhL1NQRUNTL2RlcHRlc3Quc3BlYworKysrIGIvdGVzdHMvZGF0YS9TUEVDUy9kZXB0ZXN0LnNwZWMKK0BAIC0xMCw2ICsxMCwxMCBAQCBCdWlsZEFyY2g6CW5vYXJjaAorICV7P3Byb3ZzOlByb3ZpZGVzOiAle3Byb3ZzfX0KKyAlez9jZmxzOkNvbmZsaWN0czogJXtjZmxzfX0KKyAlez9vYnM6T2Jzb2xldGVzOiAle29ic319CisrJXs/cmVjczpSZWNvbW1lbmRzOiAle3JlY3N9fQorKyV7P3N1Z3M6U3VnZ2VzdHM6ICV7c3Vnc319CisrJXs/c3VwczpTdXBwbGVtZW50czogJXtzdXBzfX0KKyslez9lbnM6RW5oYW5jZXM6ICV7ZW5zfX0KKyAKKyAlZGVzY3JpcHRpb24KKyAle3N1bW1hcnl9CitkaWZmIC0tZ2l0IGEvdGVzdHMvcnBtYnVpbGQuYXQgYi90ZXN0cy9ycG1idWlsZC5hdAoraW5kZXggNjIzMDkwMy4uYzRjOTU0YyAxMDA2NDQKKy0tLSBhL3Rlc3RzL3JwbWJ1aWxkLmF0CisrKysgYi90ZXN0cy9ycG1idWlsZC5hdAorQEAgLTE4NSwzICsxODUsMjUgQEAgbHJ3eHJ3eHJ3eCAvb3B0L2dsb2J0ZXN0L2xpbmtnb29kCisgXSwKKyBbXSkKKyBBVF9DTEVBTlVQCisrCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIENoZWNrIGlmIHdlYWsgYW5kIHJldmVyc2UgcmVxdWlyZXMgY2FuIGJlIGJ1aWx0CisrQVRfU0VUVVAoW1dlYWsgYW5kIHJldmVyc2UgcmVxdWlyZXNdKQorK0FUX0tFWVdPUkRTKFtidWlsZF0pCisrQVRfQ0hFQ0soWworKworK3J1bnJvb3QgcnBtYnVpbGQgLWJiIC0tcXVpZXQgXAorKwktLWRlZmluZSAicGtnIHdlYWtkZXBzIiBcCisrCS0tZGVmaW5lICJyZWNzIGZvbyA+IDEuMi4zIiBcCisrCS0tZGVmaW5lICJzdWdzIGJhciA+PSAwLjEuMiIgXAorKwktLWRlZmluZSAic3VwcyBiYXoiIFwKKysJLS1kZWZpbmUgImVucyB6YXAgPSAzIiBcCisrCSAgL2RhdGEvU1BFQ1MvZGVwdGVzdC5zcGVjCisrCisrcnVucm9vdCBycG0gLXFwIC0tcWYgIlsle3N1cHBsZW1lbnRuYW1lfVxuXSIgL2J1aWxkL1JQTVMvbm9hcmNoL2RlcHRlc3Qtd2Vha2RlcHMtMS4wLTEubm9hcmNoLnJwbQorK10sCisrWzBdLAorK1tiYXoKKytdLAorK1tpZ25vcmVdKQorK0FUX0NMRUFOVVAKK2RpZmYgLS1naXQgYS90ZXN0cy9ycG1nZW5lcmFsLmF0IGIvdGVzdHMvcnBtZ2VuZXJhbC5hdAoraW5kZXggMTMxMzFlMi4uODBjY2E2MyAxMDA2NDQKKy0tLSBhL3Rlc3RzL3JwbWdlbmVyYWwuYXQKKysrKyBiL3Rlc3RzL3JwbWdlbmVyYWwuYXQKK0BAIC03OSw2ICs3OSwxMSBAQCBESVNUVEFHCisgRElTVFVSTAorIERTQUhFQURFUgorIEUKKytFTkhBTkNFRkxBR1MKKytFTkhBTkNFTkFNRQorK0VOSEFOQ0VORVZSUworK0VOSEFOQ0VTCisrRU5IQU5DRVZFUlNJT04KKyBFUE9DSAorIEVQT0NITlVNCisgRVZSCitAQCAtMTk5LDYgKzIwNCwxMSBAQCBQUk9WSURFUworIFBST1ZJREVWRVJTSU9OCisgUFVCS0VZUworIFIKKytSRUNPTU1FTkRGTEFHUworK1JFQ09NTUVORE5BTUUKKytSRUNPTU1FTkRORVZSUworK1JFQ09NTUVORFMKKytSRUNPTU1FTkRWRVJTSU9OCisgUkVDT05URVhUUworIFJFTEVBU0UKKyBSRU1PVkVUSUQKK0BAIC0yMTksNyArMjI5LDE3IEBAIFNPVVJDRQorIFNPVVJDRVBBQ0tBR0UKKyBTT1VSQ0VQS0dJRAorIFNPVVJDRVJQTQorK1NVR0dFU1RGTEFHUworK1NVR0dFU1ROQU1FCisrU1VHR0VTVE5FVlJTCisrU1VHR0VTVFMKKytTVUdHRVNUVkVSU0lPTgorIFNVTU1BUlkKKytTVVBQTEVNRU5URkxBR1MKKytTVVBQTEVNRU5UTkFNRQorK1NVUFBMRU1FTlRORVZSUworK1NVUFBMRU1FTlRTCisrU1VQUExFTUVOVFZFUlNJT04KKyBUUklHR0VSQ09ORFMKKyBUUklHR0VSRkxBR1MKKyBUUklHR0VSSU5ERVgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3VzZS1wa2djb25maWctZm9yLXB5dGhvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3VzZS1wa2djb25maWctZm9yLXB5dGhvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDg0Y2Y4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvdXNlLXBrZ2NvbmZpZy1mb3ItcHl0aG9uLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKKworVXNlIHBrZ2NvbmZpZyB0byBnZXQgdGhlIGNvcnJlY3QgaW5jbHVkZSBwYXRocworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogUm9uYW4gTGUgTWFydHJldCA8cm9uYW4ubGVtYXJ0cmV0QG9wZW4uZXVyb2dpY2llbC5vcmc+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGU5N2Y3MjcuLjgxNzlmNDQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTU0MCwxMCArNTQwLDEwIEBAIGVzYWNdLAorIAorIEFTX0lGKFt0ZXN0ICIkZW5hYmxlX3B5dGhvbiIgPSB5ZXNdLFsKKyAgIEFNX1BBVEhfUFlUSE9OKFsyLjZdLFsKKy0gICAgV0lUSF9QWVRIT05fSU5DTFVERT1gJHtQWVRIT059IC1jICdmcm9tIGRpc3R1dGlscy5zeXNjb25maWcgaW1wb3J0ICo7IGltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoZ2V0X3B5dGhvbl9pbmMoKSknYAorKyAgICBXSVRIX1BZVEhPTl9JTkNMVURFPSQoJHtQS0dfQ09ORklHfSAtLWNmbGFncy1vbmx5LUkgIHB5dGhvbikKKyAgICAgV0lUSF9QWVRIT05fU1VCUEFDS0FHRT0xCisgICAgIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKy0gICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSSRXSVRIX1BZVEhPTl9JTkNMVURFIgorKyAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRXSVRIX1BZVEhPTl9JTkNMVURFIgorICAgICBBQ19DSEVDS19IRUFERVIoW1B5dGhvbi5oXSxbXSwKKyAgICAgICBbQUNfTVNHX0VSUk9SKFttaXNzaW5nIFB5dGhvbi5oXSkKKyAgICAgICBdKQorZGlmZiAtLWdpdCBhL3B5dGhvbi9NYWtlZmlsZS5hbSBiL3B5dGhvbi9NYWtlZmlsZS5hbQoraW5kZXggZmZmNTFhZS4uZjM3Y2I5ZCAxMDA2NDQKKy0tLSBhL3B5dGhvbi9NYWtlZmlsZS5hbQorKysrIGIvcHl0aG9uL01ha2VmaWxlLmFtCitAQCAtNCw3ICs0LDcgQEAgRVhUUkFfRElTVCA9IHJwbS9fX2luaXRfXy5weSBycG0vdHJhbnNhY3Rpb24ucHkKKyAKKyBBTV9DUFBGTEFHUyA9IC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvCisgQU1fQ1BQRkxBR1MgKz0gLUkkKHRvcF9zcmNkaXIpL3B5dGhvbgorLUFNX0NQUEZMQUdTICs9IC1JQFdJVEhfUFlUSE9OX0lOQ0xVREVACisrQU1fQ1BQRkxBR1MgKz0gQFdJVEhfUFlUSE9OX0lOQ0xVREVACisgCisgcGtncHlleGVjX0xUTElCUkFSSUVTID0gX3JwbW1vZHVsZS5sYSBfcnBtYm1vZHVsZS5sYSBfcnBtc21vZHVsZS5sYQorIHBrZ3B5ZXhlY19EQVRBID0gcnBtL19faW5pdF9fLnB5IHJwbS90cmFuc2FjdGlvbi5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS8wMDAxLXVzaW5nLXBvcHRQYXJzZUFyZ3ZTdHJpbmctdG8tcGFyc2UtdGhlLV9ncGdfY2hlY2tfcGEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLzAwMDEtdXNpbmctcG9wdFBhcnNlQXJndlN0cmluZy10by1wYXJzZS10aGUtX2dwZ19jaGVja19wYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2JjMzM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS8wMDAxLXVzaW5nLXBvcHRQYXJzZUFyZ3ZTdHJpbmctdG8tcGFyc2UtdGhlLV9ncGdfY2hlY2tfcGEucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorRnJvbSA2NDg1MWM2NjIyYWZmNjQ3ODdhOWZjZWEyNmNjY2RlMTgzYjdjNzQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIlJveS5MaSIgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDExIE5vdiAyMDE0IDE2OjI4OjIyICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHVzaW5nIHBvcHRQYXJzZUFyZ3ZTdHJpbmcgdG8gcGFyc2UgdGhlCisgX2dwZ19jaGVja19wYXNzd29yZF9jbWQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0JvdGggX19ncGdfY2hlY2tfcGFzc3dvcmRfY21kIGFuZCBfX2dwZ19zaWduX2NtZCBpbmNsdWRlICIle19ncGdfbmFtZX0iLCBidXQKK3N0cmFjZSBzaG93cyB0aGF0IGdwZ19uYW1lIGhhcyBhIHF1b3RlIHdoZW4gcnVuIF9ncGdfY2hlY2tfcGFzc3dvcmQsCitidXQgbm90IHdoZW4gcnVuIF9fZ3BnX3NpZ25fY21kOyBmb3IgZXhhbXBsZSwgaWYgZ3BnX25hbWUgaXMgInRlc3RlciIKKworICAgIGV4ZWN2ZSgiL3Vzci9iaW4vZ3BnIiwgWyJncGciLCAiLS1iYXRjaCIsICItLW5vLXZlcmJvc2UiLAorICAgICItLXBhc3NwaHJhc2UtZmQiLCAiMyIsICItdSIsICJcInRlc3RlclwiIiwgIi1zbyIsICItIl0sIFsvKiAyMCB2YXJzICovXSkgPSAwCisKKyAgICBleGVjdmUoIi91c3IvYmluL2dwZyIsIFsiZ3BnIiwgIi0tYmF0Y2giLCAiLS1uby12ZXJib3NlIiwgIi0tbm8tYXJtb3IiLAorICAgICItLXBhc3NwaHJhc2UtZmQiLCAiMyIsICItLW5vLXNlY21lbS13YXJuaW5nIiwgIi11IiwgInRlc3RlciIsICItc2JvIi4uLCkgPSAwCisKK2l0IGNhbiBiZSBmaXhlZCBieSByZW1vdmluZyB0aGUgcXVvdGUgYXJvdW5kICV7Z3BnX25hbWV9IHdoZW4gZGVmaW5lCitfX2dwZ19jaGVja19wYXNzd29yZF9jbWQgaW4gbWFjcm9zL21hY3JvcywgbGlrZSBiZWxvdywgYnV0IGlmIGdwZ19uYW1lIGluY2x1ZGVzCitzcGFjZSwgaXQgd2lsbCBub3Qgd29yay4KKworICAgICAlX19ncGdfY2hlY2tfcGFzc3dvcmRfY21kICAgICAgICV7X19ncGd9IFwKKyAgICAgICAgZ3BnIC0tYmF0Y2ggLS1uby12ZXJib3NlIC0tcGFzc3BocmFzZS1mZCAzIC11ICV7X2dwZ19uYW1lfSAtc28gLQorCitUaGUgcG9wdFBhcnNlQXJndlN0cmluZyBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIF9ncGdfc2lnbl9jbWQsIHNvIHVzaW5nCitwb3B0UGFyc2VBcmd2U3RyaW5nIHRvIHBhcnNlIF9fZ3BnX2NoZWNrX3Bhc3N3b3JkX2NtZCB0byBmaXggdGhpcyBpc3N1ZS4KKworU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgcnBtZGIvc2lnbmF0dXJlLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9ycG1kYi9zaWduYXR1cmUuYyBiL3JwbWRiL3NpZ25hdHVyZS5jCitpbmRleCBjMzVlMGFiLi4wMTZlOGQxIDEwMDY0NAorLS0tIGEvcnBtZGIvc2lnbmF0dXJlLmMKKysrKyBiL3JwbWRiL3NpZ25hdHVyZS5jCitAQCAtNTI5LDcgKzUyOSw3IEBAIGludCBycG1DaGVja1Bhc3NQaHJhc2UoY29uc3QgY2hhciAqIHBhc3NQaHJhc2UpCisgICAJCSh2b2lkKSBzZXRlbnYoIkdOVVBHSE9NRSIsIGdwZ19wYXRoLCAxKTsKKyAKKyAJICAgIGNtZCA9IHJwbUV4cGFuZCgiJXs/X19ncGdfY2hlY2tfcGFzc3dvcmRfY21kfSIsIE5VTEwpOworLQkgICAgcmMgPSBhcmd2U3BsaXQoJmF2LCBjbWQsIE5VTEwpOworKwkgICAgcmMgPSBwb3B0UGFyc2VBcmd2U3RyaW5nKGNtZCwgTlVMTCwgKGNvbnN0IGNoYXIgKioqKSZhdik7CisgCSAgICBpZiAoIXJjKQorIAkJcmMgPSBleGVjdmUoYXZbMF0sIChjaGFyICpjb25zdCAqKWF2KzEsIGVudmlyb24pOworIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2RiY29udmVydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZGJjb252ZXJ0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZGJmMDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2RiY29udmVydC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworSGFjayB0byBwcmV2ZW50IHVubmVlZGVkIGRlbW8gYXBwIGZyb20gYnVpbGRpbmcgb24gb2xkZXIgbGliYword2hlcmUgaXQgd2lsbCBicmVhayB0aGUgYnVpbGQKKworSW5kZXg6IHJwbS01LjQuMTQvdG9vbHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvdG9vbHMvTWFrZWZpbGUuYW0KKysrKyBycG0tNS40LjE0L3Rvb2xzL01ha2VmaWxlLmFtCitAQCAtMjksNyArMjksNyBAQCBFWFRSQV9QUk9HUkFNUyA9IG5peC1jb3B5LWNsb3N1cmUgbml4LWVuCisgCXhpdS1pbnN0YW50aWF0ZSB4aXUtc3RvcmUKKyBub2luc3RfUFJPR1JBTVMgPQorIAorLUVYVFJBX1BST0dSQU1TICs9IGF1Z3Rvb2wgY3VkZnRvb2wgZGJjb252ZXJ0IGRlYnVnZWRpdCBcCisrRVhUUkFfUFJPR1JBTVMgKz0gYXVndG9vbCBjdWRmdG9vbCBkZWJ1Z2VkaXQgXAorIAluaXgtYnVpbGQgbml4LWNoYW5uZWwgbml4LWNvbGxlY3QtZ2FyYmFnZSBcCisgCW5peC1sb2cyeG1sIG5peC1wcmVmZXRjaC11cmwgbml4LXB1bGwgbml4LXB1c2ggXAorIAl4aXUtZWNobyB4aXUtaGFzaCBcCitAQCAtNjQsNyArNjQsNyBAQCBwa2diaW5fUFJPR1JBTVMgPQlcCisgCXJwbWNhY2hlIHJwbWRpZ2VzdCBycG1yZXBvIHJwbXNwZWNkdW1wIFwKKyAJcnBtY21wIHJwbWRlcHMgcnBtZGVwcy1vZWNvcmUgc3FsaXRlMyBAV0lUSF9LRVlVVElMU19SUE1LRVlAIEBXSVRIX0xJQkVMRl9ERUJVR0VESVRACisgaWYgV0lUSF9EQgorLXBrZ2Jpbl9QUk9HUkFNUyArPQlkYmNvbnZlcnQKKytwa2diaW5fUFJPR1JBTVMgKz0JCisgZW5kaWYKKyBkaXN0X21hbl9NQU5TID0JCXJwbWdyZXAuMQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9kZWJ1Z2VkaXQtc2Vndi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZGVidWdlZGl0LXNlZ3YucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVlZjVlZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZGVidWdlZGl0LXNlZ3YucGF0Y2gKQEAgLTAsMCArMSw5OCBAQAorRHVyaW5nIHRoZSByZWNhbGN1bGF0aW9uIG9mIHRoZSBidWlsZGlkLCBpdCdzIG5lY2Vzc2FyeSB0byBjaGFuZ2UgdGhlIHdvcmQKK2JhY2sgdG8gdGhlIG9yaWdpbmFsIGVuZGlhbi4gIEhvd2V2ZXIsIGlmIHdlIGRvIHRoaXMgaW4tcGxhY2UsIHdlJ3ZlIGFsc28KK2FmZmVjdGVkIHRoZSBoZWFkZXJzIHRoYXQgd2UncmUgYWxzbyB3b3JraW5nIG9uLiAgVGhlIHNpZGUgZWZmZWN0IG9mIHRoaXMgaXMKK3dlIGNhbiBubyBsb25nZXIgcmVseSBvbiAnc2hfdHlwZScgYXMgaXQgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkLgorCitUaGlzIHBhdGNoIGVuc3VyZXMgdGhhdCBhbnkgdGltZSB3ZSB0cmFuc2xhdGUgdGhlIGxvYWRlZCBkYXRhIHRvIHRoZSBtYWNoaW5lCitmb3JtYXQsIHdlIG9ubHkgZG8gaXQgaW4gYSBiYWNrdXAgY29weSBhbmQgbmV2ZXIgdGhlIG9yaWdpbmFsIGNvcHkuCisKK05vdGU6IGluIGFsbCBvdGhlciBwbGFjZXMgYSBiYWNrdXAgY29weSB3YXMgdXNlZCwganVzdCBub3QgYnVpbGRpZCBwcm9jZXNzaW5nLgorCitBbHNvIHRoZSBwcm9jZXNzICguLi4pIGZ1bmN0aW9uIHdhcyBtb2RpZmllZCB0byB2ZXJpZnkgdGhlIGRhdGEgaXMgbm90CitOVUxMIGFzIHdlbGwuICBUaGlzIGlzIGFuIGV4dHJhIGNoZWNrIGFuZCBpcyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC90b29scy9kZWJ1Z2VkaXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy90b29scy9kZWJ1Z2VkaXQuYworKysrIHJwbS01LjQuMTQvdG9vbHMvZGVidWdlZGl0LmMKK0BAIC0xNDQ1LDIxICsxNDQ1LDI0IEBAIGhhbmRsZV9idWlsZF9pZCAoRFNPICpkc28sIEVsZl9EYXRhICpidWkKKyAgICAgYXV0byBpbmxpbmUgdm9pZCBwcm9jZXNzIChjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKKyAgICAgeworICAgICAgIG1lbWNodW5rIGNodW5rID0geyAuZGF0YSA9ICh2b2lkICopIGRhdGEsIC5zaXplID0gc2l6ZSB9OworLSAgICAgIGhhc2hGdW5jdGlvbkNvbnRleHRVcGRhdGVNQyAoJmN0eCwgJmNodW5rKTsKKysgICAgICBpZiAoZGF0YSAhPSBOVUxMICYmIHNpemUgIT0gMCkKKysgICAgICAgIGhhc2hGdW5jdGlvbkNvbnRleHRVcGRhdGVNQyAoJmN0eCwgJmNodW5rKTsKKyAgICAgfQorICAgICB1bmlvbgorICAgICB7CisgICAgICAgR0VsZl9FaGRyIGVoZHI7CisgICAgICAgR0VsZl9QaGRyIHBoZHI7CisgICAgICAgR0VsZl9TaGRyIHNoZHI7CistICAgIH0gdTsKKy0gICAgRWxmX0RhdGEgeCA9IHsgLmRfdmVyc2lvbiA9IEVWX0NVUlJFTlQsIC5kX2J1ZiA9ICZ1IH07CisrICAgIH0gdTEsIHUyOworKyAgICBFbGZfRGF0YSBzcmMgID0geyAuZF92ZXJzaW9uID0gRVZfQ1VSUkVOVCwgLmRfYnVmID0gJnUxIH07CisrICAgIEVsZl9EYXRhIGRlc3QgPSB7IC5kX3ZlcnNpb24gPSBFVl9DVVJSRU5ULCAuZF9idWYgPSAmdTIgfTsKKyAKKy0gICAgeC5kX3R5cGUgPSBFTEZfVF9FSERSOworLSAgICB4LmRfc2l6ZSA9IHNpemVvZiB1LmVoZHI7CistICAgIHUuZWhkciA9IGRzby0+ZWhkcjsKKy0gICAgdS5laGRyLmVfcGhvZmYgPSB1LmVoZHIuZV9zaG9mZiA9IDA7CistICAgIGlmIChlbGY2NF94bGF0ZXRvbSAoJngsICZ4LCBkc28tPmVoZHIuZV9pZGVudFtFSV9EQVRBXSkgPT0gTlVMTCkKKysgICAgc3JjLmRfdHlwZSA9IEVMRl9UX0VIRFI7CisrICAgIHNyYy5kX3NpemUgPSBzaXplb2YgdTEuZWhkcjsKKysgICAgZGVzdC5kX3NpemUgPSBzaXplb2YgdTIuZWhkcjsKKysgICAgdTEuZWhkciA9IGRzby0+ZWhkcjsKKysgICAgdTEuZWhkci5lX3Bob2ZmID0gdTEuZWhkci5lX3Nob2ZmID0gMDsKKysgICAgaWYgKGVsZjY0X3hsYXRldG9tICgmZGVzdCwgJnNyYywgZHNvLT5laGRyLmVfaWRlbnRbRUlfREFUQV0pID09IE5VTEwpCisgICAgICAgeworICAgICAgIGJhZDoKKyAJZnByaW50ZiAoc3RkZXJyLCAiRmFpbGVkIHRvIGNvbXB1dGUgaGVhZGVyIGNoZWNrc3VtOiAlc1xuIiwKK0BAIC0xNDY3LDI5ICsxNDcwLDMxIEBAIGhhbmRsZV9idWlsZF9pZCAoRFNPICpkc28sIEVsZl9EYXRhICpidWkKKyAJZXhpdCAoMSk7CisgICAgICAgfQorIAorLSAgICB4LmRfdHlwZSA9IEVMRl9UX1BIRFI7CistICAgIHguZF9zaXplID0gc2l6ZW9mIHUucGhkcjsKKysgICAgc3JjLmRfdHlwZSA9IEVMRl9UX1BIRFI7CisrICAgIHNyYy5kX3NpemUgPSBzaXplb2YgdTEucGhkcjsKKysgICAgZGVzdC5kX3NpemUgPSBzaXplb2YgdTIucGhkcjsKKyAgICAgZm9yIChpID0gMDsgaSA8IGRzby0+ZWhkci5lX3BobnVtOyArK2kpCisgICAgICAgeworLQlpZiAoZ2VsZl9nZXRwaGRyIChkc28tPmVsZiwgaSwgJnUucGhkcikgPT0gTlVMTCkKKysJaWYgKGdlbGZfZ2V0cGhkciAoZHNvLT5lbGYsIGksICZ1MS5waGRyKSA9PSBOVUxMKQorIAkgIGdvdG8gYmFkOworLQlpZiAoZWxmNjRfeGxhdGV0b20gKCZ4LCAmeCwgZHNvLT5laGRyLmVfaWRlbnRbRUlfREFUQV0pID09IE5VTEwpCisrCWlmIChlbGY2NF94bGF0ZXRvbSAoJmRlc3QsICZzcmMsIGRzby0+ZWhkci5lX2lkZW50W0VJX0RBVEFdKSA9PSBOVUxMKQorIAkgIGdvdG8gYmFkOworLQlwcm9jZXNzICh4LmRfYnVmLCB4LmRfc2l6ZSk7CisrCXByb2Nlc3MgKGRlc3QuZF9idWYsIGRlc3QuZF9zaXplKTsKKyAgICAgICB9CisgCistICAgIHguZF90eXBlID0gRUxGX1RfU0hEUjsKKy0gICAgeC5kX3NpemUgPSBzaXplb2YgdS5zaGRyOworKyAgICBzcmMuZF90eXBlID0gRUxGX1RfU0hEUjsKKysgICAgc3JjLmRfc2l6ZSA9IHNpemVvZiB1MS5zaGRyOworKyAgICBkZXN0LmRfc2l6ZSA9IHNpemVvZiB1Mi5zaGRyOworICAgICBmb3IgKGkgPSAwOyBpIDwgZHNvLT5laGRyLmVfc2hudW07ICsraSkKKyAgICAgICBpZiAoZHNvLT5zY25baV0gIT0gTlVMTCkKKyAJeworLQkgIHUuc2hkciA9IGRzby0+c2hkcltpXTsKKy0JICB1LnNoZHIuc2hfb2Zmc2V0ID0gMDsKKy0JICBpZiAoZWxmNjRfeGxhdGV0b20gKCZ4LCAmeCwgZHNvLT5laGRyLmVfaWRlbnRbRUlfREFUQV0pID09IE5VTEwpCisrCSAgdTEuc2hkciA9IGRzby0+c2hkcltpXTsKKysJICB1MS5zaGRyLnNoX29mZnNldCA9IDA7CisrCSAgaWYgKGVsZjY0X3hsYXRldG9tICgmZGVzdCwgJnNyYywgZHNvLT5laGRyLmVfaWRlbnRbRUlfREFUQV0pID09IE5VTEwpCisgCSAgICBnb3RvIGJhZDsKKy0JICBwcm9jZXNzICh4LmRfYnVmLCB4LmRfc2l6ZSk7CisrCSAgcHJvY2VzcyAoZGVzdC5kX2J1ZiwgZGVzdC5kX3NpemUpOworIAorLQkgIGlmICh1LnNoZHIuc2hfdHlwZSAhPSBTSFRfTk9CSVRTKQorKwkgIGlmICh1MS5zaGRyLnNoX3R5cGUgIT0gU0hUX05PQklUUykKKyAJICAgIHsKKyAJICAgICAgRWxmX0RhdGEgKmQgPSBlbGZfcmF3ZGF0YSAoZHNvLT5zY25baV0sIE5VTEwpOworIAkgICAgICBpZiAoZCA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9kZWJ1Z2VkaXQtdmFsaWQtZmlsZS10by1maXgtc2VnbWVudC1mYXVsdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZGVidWdlZGl0LXZhbGlkLWZpbGUtdG8tZml4LXNlZ21lbnQtZmF1bHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdjMzEwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZGVidWdlZGl0LXZhbGlkLWZpbGUtdG8tZml4LXNlZ21lbnQtZmF1bHQucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAorZGVidWdlZGl0OiBmaXggc2VnbWVudCBmYXVsdCB3aGlsZSBmaWxlJ3MgYnNzIG9mZnNldCBoYXZlIGEgbGFyZ2UgbnVtYmVyCisKK1doaWxlIEVMRl9DX1JEV1JfTU1BUCB3YXMgdXNlZCwgZWxmX2JlZ2luIGludm9rZWQgbW1hcCgpIHRvIG1hcCBmaWxlCitpbnRvIG1lbW9yeS4gV2hpbGUgdGhlIGZpbGUncyBic3MgT2Zmc2V0IGhhcyBhIGxhcmdlIG51bWJlciwgZWxmX3VwZGF0ZQorY2FjdWxhdGVkIGZpbGUgc2l6ZSBieSBfX2VsZjY0X3VwZGF0ZW51bGxfd3Jsb2NrIGFuZCB0aGUgc2l6ZSB3YXMKK2VubGFyZ2VkLgorCitJbiB0aGlzIHNpdHVhdGlvbiwgZWxmX3VwZGF0ZSBpbnZva2VkIGZ0cnVuY2F0ZSB0byBlbmxhcmdlIHRoZSBmaWxlLAorYW5kIG1lbW9yeSBzaXplIChlbGYtPm1heGltdW1fc2l6ZSkgYWxzbyB3YXMgaW5jb3JyZWN0bHkgdXBkYXRlZC4KK1RoZXJlIHdhcyBzZWdtZW50IGZhdWx0IGluIGVsZl9lbmQgd2hpY2ggaW52b2tlZCBtdW5tYXAgd2l0aCB0aGUKK2xlbmd0aCBpcyB0aGUgZW5sYXJnZWQgZmlsZSBzaXplLCBub3QgdGhlIG1tYXAncyBsZW5ndGguCisKK0JlZm9yZSB0aGUgYWJvdmUgb3BlcmF0aW9ucywgaW52b2tlIGVsZl9iZWdpbi9lbGZfdXBkYXRlL2VsZl9lbmQKK3dpdGggRUxGX0NfUkRXUiBhbmQgRUxGX0ZfTEFZT1VUIHNldCB0byBlbmxhcmdlIHRoZSBhYm92ZSBmaWxlLCBpdAorY291bGQgbWFrZSBzdXJlIHRoZSBmaWxlIGlzIHNhZmUgZm9yIHRoZSBmb2xsb3dpbmcgZWxmIG9wZXJhdGlvbnMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgdG9vbHMvZGVidWdlZGl0LmMgfCAyNSArKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDI1IGluc2VydGlvbnMoKykKKworSW5kZXg6IHJwbS01LjQuMTQvdG9vbHMvZGVidWdlZGl0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvdG9vbHMvZGVidWdlZGl0LmMKKysrKyBycG0tNS40LjE0L3Rvb2xzL2RlYnVnZWRpdC5jCitAQCAtMTUyNSw2ICsxNTI1LDI4IEBAIGhhbmRsZV9idWlsZF9pZCAoRFNPICpkc28sIEVsZl9EYXRhICpidWkKKyAgIH0KKyB9CisgCisrLyogSXQgYXZvaWRlZCB0aGUgc2VnbWVudCBmYXVsdCB3aGlsZSBmaWxlJ3MgYnNzIG9mZnNldCBoYXZlIGEgbGFyZ2UgbnVtYmVyLgorKyAgIFNlZSBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTEwMTk3MDcKKysgICAgICAgaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD0xMDIwODQyIGZvciBkZXRhaWwuICovCisrdm9pZCB2YWxpZF9maWxlKGludCBmZCkKKyt7CisrICBFbGYgKmVsZiA9IGVsZl9iZWdpbiAoZmQsIEVMRl9DX1JEV1IsIE5VTEwpOworKyAgaWYgKGVsZiA9PSBOVUxMKQorKyAgeworKyAgICBlcnJvciAoMSwgMCwgImVsZl9iZWdpbjogJXMiLCBlbGZfZXJybXNnICgtMSkpOworKyAgICByZXR1cm47CisrICB9CisrCisrICBlbGZfZmxhZ2VsZiAoZWxmLCBFTEZfQ19TRVQsIEVMRl9GX0xBWU9VVCk7CisrCisrICBpZiAoZWxmX3VwZGF0ZSAoZWxmLCBFTEZfQ19XUklURSkgPCAwKQorKyAgICBlcnJvciAoMSwgMCwgImVsZl91cGRhdGU6ICVzIiwgZWxmX2Vycm1zZyAoLTEpKTsKKysKKysgIGVsZl9lbmQgKGVsZik7CisrCisrICByZXR1cm47CisrfQorKworIGludAorIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgeworQEAgLTE2MjEsNiArMTY0Myw5IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgICAgZXhpdCAoMSk7CisgICAgIH0KKyAKKysgIC8qIE1ha2Ugc3VyZSB0aGUgZmlsZSBpcyB2YWxpZC4gKi8KKysgIHZhbGlkX2ZpbGUoZmQpOworKworICAgZHNvID0gZmRvcGVuX2RzbyAoZmQsIGZpbGUpOworICAgaWYgKGRzbyA9PSBOVUxMKQorICAgICBleGl0ICgxKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZnN0YWNrLXByb3RlY3Rvci1jb25maWd1cmUtY2hlY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2ZzdGFjay1wcm90ZWN0b3ItY29uZmlndXJlLWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NmFmNDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2ZzdGFjay1wcm90ZWN0b3ItY29uZmlndXJlLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1NvbWUgb3B0aW9ucyBjaGVja2VkIGluIHRoaXMgbG9vcCBhcmUgbmVlZGluZyBsaW5raW5nIHRvIGZpbmQgb3V0CitpZiB0aGUgb3B0aW9uIGNhbiBiZSB1c2VkIG9yIG5vdCBlLmcuIC1mc3RhY2stcHJvdGVjdG9yIHdoaWNoIG5lZWRzCitsaWJzc3AgdG8gYmUgc3RhZ2VkIGFuZCBhdmFpbGFibGUgZm9yIGNvbXBpbGVyIHRvIGxpbmsgYWdhaW5zdAorVGhlcmVmb3JlIHdlIGNoYW5nZSB0aGUgY29tcGlsZSBvbmx5IGNoZWNrIHRvIGNvbXBpbGUgYW5kIGxpbmsgY2hlY2sKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogcnBtLTUuNC4xNC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgcnBtLTUuNC4xNC9jb25maWd1cmUuYWMKK0BAIC0yMDEsNyArMjAxLDcgQEAgZG5sICMgR05VIEdDQyAodXN1YWxseSAiZ2NjIikKKyAgbXlfc2F2ZV9jZmxhZ3M9IiRDRkxBR1MiCisgIENGTEFHUz0kYworICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgR0NDIHN1cHBvcnRzICRjXSkKKy0gQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSldLAorKyBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdKV0sCisgICAgIFtBQ19NU0dfUkVTVUxUKFt5ZXNdKV0KKyAgICAgW215X2NmbGFncz0kY10sCisgICAgIFtBQ19NU0dfUkVTVUxUKFtub10pXQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9oZWFkZXItaW5jbHVkZS1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2hlYWRlci1pbmNsdWRlLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmZiMTg3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9oZWFkZXItaW5jbHVkZS1maXgucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBycG0tNS40LjE0L3JwbWRiL3JwbWRiLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtZGIvcnBtZGIuaAorKysrIHJwbS01LjQuMTQvcnBtZGIvcnBtZGIuaAorQEAgLTksNiArOSw3IEBACisgCisgI2luY2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDxtaXJlLmg+CisrI2luY2x1ZGUgPGVycm5vLmg+CisgCisgI2luY2x1ZGUgPHJwbXR5cGVzLmg+CisgI2luY2x1ZGUgPHJwbXRhZy5oPgkvKiBYWFggSGVhZGVyIHR5cGVkZWYgKi8KK0luZGV4OiBycG0tNS40LjE0L3JwbWRiL3JwbXRhZy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3JwbWRiL3JwbXRhZy5oCisrKysgcnBtLTUuNC4xNC9ycG1kYi9ycG10YWcuaAorQEAgLTcsNiArNyw3IEBACisgCisgI2luY2x1ZGUgPHJwbWlvdHlwZXMuaD4KKyAjaW5jbHVkZSA8cnBtc3cuaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisgCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL21ha2VmaWxlLWFtLWV4ZWMtaG9vay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vbWFrZWZpbGUtYW0tZXhlYy1ob29rLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYWI5ZWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL21ha2VmaWxlLWFtLWV4ZWMtaG9vay5wYXRjaApAQCAtMCwwICsxLDMzIEBACitycG06IFJlc29sdmUgcGFyYWxsZWwgaW5zdGFsbCBpc3N1ZSB3aGVuIGluc3RhbGxpbmcgbHVhCisKK1doZW4gbHVhIGlzIGJlaW5nIGluc3RhbGxlZCBvbiBzb21lIHN5c3RlbXMgdGhhdCBhcmUgYmVpbmcgcnVuIHdpdGggaGlnaCBsZXZlbHMKK29mIHBhcmFsbGVsaXphdGlvbiB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgaW5zdGFsbC1kYXRhLWFtIGFuZCBpbnN0YWxsLWV4ZWMtaG9vaworYXJlIHByb2Nlc3NlZCBhdCB0aGUgc2FtZSBvciBhIHZlcnkgc2hvcnQgdGltZSBhcGFydC4gVGhpcyBjYXVzZXMKK2luc3RhbGwtcGtnYmluUFJPR1JBTVMsIHdoaWNoIGlzIGEgZGVwZW5kZW5jeSBvZiBib3RoLCB0byBiZSBydW4gYXQgYXJvdW5kIHRoZQorc2FtZSB0aW1lIFRoaXMgc29tZXRpbWVzIGNhdXNlcyBmaWxlIGNvbnRlbnRpb24gYW5kIHdpbGwgc29tZXRpbWVzIGJlIGluIGEgc3RhdGUKK3doZXJlIGluc3RhbGwtZXhlYy1ob29rIGlzIGxvb2tpbmcgZm9yIGEgZmlsZSB0aGF0IGlzIGJlaW5nIGluc3RhbGxlZCBvciBib3RoCitpbnN0YWxsLXBrZ2JpblBST0dSQU1TIGJlaW5nIHJ1biBhcmUgaW5zdGFsbGluZyB0aGUgc2FtZSBmaWxlIGFuZCBmYWlsIGJlY2F1c2UKK2l0IGNhbm5vbiBjcmVhdGUgYSBuZXcgZmlsZS4KKworVGhpcyBwYXRjaCBhbGxvd3MgaW5zdGFsbC1leGVjLWhvb2sgdG8gYmUgY2FsbGVkIGJ5IGluc3RhbGwtZGF0YS1hbSBpbnN0ZWFkIG9mCitpbnN0YWxsLWV4ZWMtYW0uIEl0IGFsc28gcmVtb3ZlZCB0aGUgZGVwZW5kZW5jeSBpbiBpbnN0YWxsLWRhdGEtaG9vayBvbgoraW5zdGFsbC1wa2diaW5QUk9HUkFNUy4gVGhpcyBtZWFucyBpbnN0YWxsLXBrZ2JpblBST0dSQU1TIHdpbGwgb25seSBiZSBydW4gb25jZQorc28gdGhlcmUgd2hvdWxkIGJlIGFueSBmaWxlIGNvbnRlbnRpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNb3JnYW4gTGl0dGxlIDxtb3JnYW4ubGl0dGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2x1YS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9sdWEvTWFrZWZpbGUuYW0KKysrKyBycG0tNS40LjE0L2x1YS9NYWtlZmlsZS5hbQorQEAgLTMyNiw3ICszMjYsNyBAQCBjbGVhbi1sb2NhbDoKKyAjIFhYWCBCdWlsZCAmIGluc3RhbGwgYXMgcnBtbHVhL3JwbWx1YWMgd2l0aCBoYXJkbGlua3MgdG8gbHVhL2x1YWMgcG9zdCBpbnN0YWxsLgorICMgWFhYIENWUyBoYXMgbHVhL2x1YWMgc3ViLWRpcmVjdG9yaWVzIGluIHRoZSBBdHRpYyB0aGF0IGNvbGxpZGUgd2l0aCB0aGUKKyAjIFhYWCBsdWEvbHVhYyBleGVjdXRhYmxlIG5hbWVzIHdoZW4gdXNpbmcgY3ZzIHVwZGF0ZS4KKy1pbnN0YWxsLWV4ZWMtaG9vazoJaW5zdGFsbC1wa2diaW5QUk9HUkFNUworK2luc3RhbGwtZGF0YS1ob29rOgkKKyAJbWtkaXIgLXAgJChERVNURElSKSQocGtnYmluZGlyKQorIAkkKF9fUk0pIC1mICQoREVTVERJUikkKHBrZ2JpbmRpcikvbHVhCisgCSQoX19MTikgJChERVNURElSKSQocGtnYmluZGlyKS9ycG1sdWEgJChERVNURElSKSQocGtnYmluZGlyKS9sdWEKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vbm8tbGRmbGFncy1pbi1wa2djb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL25vLWxkZmxhZ3MtaW4tcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMDYyM2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL25vLWxkZmxhZ3MtaW4tcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK0Rvbid0IHB1dCBMREZMQUdTIGludG8gdGhlIExpYnMucHJpdmF0ZSwgYWxsIGl0IGdlbmVyYWxseSBjb250YWlucyBpcyBhIGxpbmtlcgoraGFzaCBzZWxlY3Rpb24gKGhhcm1sZXNzKSBhbmQgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGxpYmRpciBpbiB0aGUgc3lzcm9vdAorKGFjdGl2ZWx5IGhhcm1mdWwpLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9zY3JpcHRzL3JwbS5wYy5pbiBiL3NjcmlwdHMvcnBtLnBjLmluCitpbmRleCA4MjkzNDcxLi4yZWE0NjljIDEwMDY0NAorLS0tIGEvc2NyaXB0cy9ycG0ucGMuaW4KKysrKyBiL3NjcmlwdHMvcnBtLnBjLmluCitAQCAtMTcgKzE3IEBAIExpYnM6IC1MJHtsaWJkaXJ9IC1scnBtYnVpbGQke3N1ZmZpeH0gLWxycG0ke3N1ZmZpeH0gLWxycG1kYiR7c3VmZml4fSAtbHJwbWlvJHtzCistTGlicy5wcml2YXRlOiBATERGTEFHU0AgQExJQlNACisrTGlicy5wcml2YXRlOiBATElCU0AKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcGVyZmlsZV9ycG1kZXBzLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9wZXJmaWxlX3JwbWRlcHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjcyYzlmMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcGVyZmlsZV9ycG1kZXBzLnNoCkBAIC0wLDAgKzEsNTAgQEAKKyMhL2Jpbi9iYXNoCisKKzogJHtSUE1ERVBTOj1ycG1kZXBzfQorCitwcm9jZXNzKCkgeworCXdoaWxlIHJlYWQgZmlsZV9uYW1lIDsgZG8KKwkJcHJpbnRmICIlc1x0IiAke2ZpbGVfbmFtZX0KKwkJaWYgWyAhIC1kICRmaWxlX25hbWUgXTsgdGhlbgorCQkJcHJpbnRmICIlcyAiICQoJFJQTURFUFMgJDEgJGZpbGVfbmFtZSB8IHNlZCAtZSAncyxycG1saWIoLiosLCcgLWUgJ3MsXChbPD5cPV1cKyBcK1teIF0qXCksKFwxKSxnJykKKwkJZmkKKwkJcHJpbnRmICJcbiIKKwlkb25lCit9CisKK3VzYWdlKCkgeworCWVjaG8gIiQwIHstUHwtLXByb3ZpZGVzfSB7LVJ8LS1yZXF1aXJlc30gRklMRSAuLi4iCit9CisKK3doaWxlIFsgJCMgLWd0IDAgXTsgZG8KKyAgIGNhc2UgIiQxIiBpbgorCS0tcnBtZGVwcykKKwkJUlBNREVQUz0kMgorCQlzaGlmdAorCQlzaGlmdAorCQk7OworCS1SfC0tcmVxdWlyZXMpCisJCXByb2Nlc3NfdHlwZT0tLXJlcXVpcmVzCisJCXNoaWZ0CisJCTs7CisJLVB8LS1wcm92aWRlcykKKwkJcHJvY2Vzc190eXBlPS0tcHJvdmlkZXMKKwkJc2hpZnQKKwkJOzsKKwkqKQorCQlicmVhazsKKwkJOzsKKyAgIGVzYWMKK2RvbmUKKworaWYgWyAteiAiJHByb2Nlc3NfdHlwZSIgXTsgdGhlbgorCXVzYWdlCisJZXhpdCAxCitmaQorCitpZiBbICQjIC1ndCAwIF07IHRoZW4KKwlmaW5kICIkQCIgfCBwcm9jZXNzICRwcm9jZXNzX3R5cGUKKwlleGl0ICQ/CitmaQorCitwcm9jZXNzICRwcm9jZXNzX3R5cGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcHl0aG9uLXJwbS1ycG1zZW5zZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcHl0aG9uLXJwbS1ycG1zZW5zZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTM4YTYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9weXRob24tcnBtLXJwbXNlbnNlLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK3JwbW1vZHVsZS5jOiBFeHBvcnQgYSBmZXcgYWRkaXRpb25hbCBSUE1TRU5TRSB2YWx1ZXMKKworV2Ugd2FudCB0byBzZWUgdGhlIFJQTVNFTlNFX1NDUklQVCB2YWx1ZXMgZm9yIHVzZSB3aXRoIFNNQVJULiAgV2UgYWxzbword2FudCB0byBzZWUgdGhlIE1JU1NJTkdPSyB2YWx1ZSBzbyB3ZSBjYW4gYXZvaWQgcmVjb21tZW5kZWQgcGFja2FnZXMgY2F1c2luZworZmFpbHVyZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L3B5dGhvbi9ycG1tb2R1bGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9weXRob24vcnBtbW9kdWxlLmMKKysrKyBycG0tNS40LjE0L3B5dGhvbi9ycG1tb2R1bGUuYworQEAgLTQ5NCwxMiArNDk0LDE2IEBAIHZvaWQgaW5pdF9ycG0odm9pZCkKKyAgICAgUkVHSVNURVJfRU5VTShSUE1TRU5TRV9FUVVBTCk7CisgICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfTk9URVFVQUwpOworICAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX0ZJTkRfUkVRVUlSRVMpOworLSNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfTUFORFJJVkEpCisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9NQU5EUklWQSkgfHwgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikgfHwgZGVmaW5lZChSUE1fVkVORE9SX09FKQorICAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX1BSRVJFUSk7CisgICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfU0NSSVBUX1BSRSk7CisgICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfU0NSSVBUX1BPU1QpOworICAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX1NDUklQVF9QUkVVTik7CistICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfU0NSSVBUX1BPU1RVTikKKysgICAgUkVHSVNURVJfRU5VTShSUE1TRU5TRV9TQ1JJUFRfUE9TVFVOKTsKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikgfHwgZGVmaW5lZChSUE1fVkVORE9SX09FKQorKyAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX01JU1NJTkdPSyk7CisgI2VuZGlmCisgCisgICAgIFJFR0lTVEVSX0VOVU0oUlBNREVQU19GTEFHX05PVVBHUkFERSk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3B5dGhvbmRlcHMuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3B5dGhvbmRlcHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDgzYjE3NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcHl0aG9uZGVwcy5zaApAQCAtMCwwICsxLDE2IEBACisjIS9iaW4vc2gKKworWyAkIyAtZ2UgMSBdIHx8IHsKKyAgICBjYXQgPiAvZGV2L251bGwKKyAgICBleGl0IDAKK30KKworY2FzZSAkMSBpbgorLVJ8LS1yZXF1aXJlcykKKyAgICBzaGlmdAorICAgIGdyZXAgIi91c3IvXChsaWJbXi9dKlx8c2hhcmVcKS9weXRob25bXi9dKi8iID4vZGV2L251bGwgJiYgZWNobyAicHl0aG9uIgorICAgIGV4aXQgMAorICAgIDs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tQ1ZFLTIwMTMtNjQzNS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLUNWRS0yMDEzLTY0MzUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEwN2U4ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLUNWRS0yMDEzLTY0MzUucGF0Y2gKQEAgLTAsMCArMSwxMDkgQEAKK0Zyb20gMDgxMDVhY2RhMWRhNjNkMzJmYmIxODU5NmEzZDZjM2UwYWExMDZkMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IExlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBXZWQsIDEwIEp1biAyMDE1IDE0OjM2OjU2ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBycG06IENWRS0yMDEzLTY0MzUKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitSZWZlcmVuY2U6CitodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPUNWRS0yMDEzLTY0MzUKKworRGVzY3JpcHRpb246CitJdCB3YXMgZm91bmQgdGhhdCBSUE0gd3JvdGUgZmlsZSBjb250ZW50cyB0byB0aGUgdGFyZ2V0IGluc3RhbGxhdGlvbgorZGlyZWN0b3J5IHVuZGVyIGEgdGVtcG9yYXJ5IG5hbWUsIGFuZCB2ZXJpZmllZCBpdHMgY3J5cHRvZ3JhcGhpYyBzaWduYXR1cmUKK29ubHkgYWZ0ZXIgdGhlIHRlbXBvcmFyeSBmaWxlIGhhcyBiZWVuIHdyaXR0ZW4gY29tcGxldGVseS4gVW5kZXIgY2VydGFpbgorY29uZGl0aW9ucywgdGhlIHN5c3RlbSBpbnRlcnByZXRzIHRoZSB1bnZlcmlmaWVkIHRlbXBvcmFyeSBmaWxlIGNvbnRlbnRzCithbmQgZXh0cmFjdHMgY29tbWFuZHMgZnJvbSBpdC4gVGhpcyBjb3VsZCBhbGxvdyBhbiBhdHRhY2tlciB0byBtb2RpZnkKK3NpZ25lZCBSUE0gZmlsZXMgaW4gc3VjaCBhIHdheSB0aGF0IHRoZXkgd291bGQgZXhlY3V0ZSBjb2RlIGNob3NlbgorYnkgdGhlIGF0dGFja2VyIGR1cmluZyBwYWNrYWdlIGluc3RhbGxhdGlvbi4KKworT3JpZ2luYWwgUGF0Y2g6CitodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vYXR0YWNobWVudC5jZ2k/aWQ9OTU2MjA3CisKK1NpZ25lZC1vZmYtYnk6IExlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+CistLS0KKyBsaWIvZnNtLmMgICAgIHwgIDIgKy0KKyBycG1pby9ycG1pby5jIHwgMTggKysrKysrKysrKysrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL2ZzbS5jIGIvbGliL2ZzbS5jCitpbmRleCAxZWU3ZTY3Li4wOTRlYjFkIDEwMDY0NAorLS0tIGEvbGliL2ZzbS5jCisrKysgYi9saWIvZnNtLmMKK0BAIC03MjYsNyArNzI2LDcgQEAgc3RhdGljIGludCBleHBhbmRSZWd1bGFyKEZTTV90IGZzbSwgcnBtcHNtIHBzbSwgcnBtY3Bpb190IGFyY2hpdmUsIGludCBub2RpZ2VzdCkKKyB7CisgICAgIEZEX3Qgd2ZkID0gTlVMTDsKKyAgICAgY29uc3Qgc3RydWN0IHN0YXQgKiBzdCA9ICZmc20tPnNiOworLSAgICBycG1fbG9mZl90IGxlZnQgPSBzdC0+c3Rfc2l6ZTsKKysgICAgcnBtX2xvZmZfdCBsZWZ0ID0gcnBtZmlGU2l6ZUluZGV4KGZzbUdldEZpKGZzbSksIGZzbS0+aXgpOworICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICogZmlkaWdlc3QgPSBOVUxMOworICAgICBwZ3BIYXNoQWxnbyBkaWdlc3RhbGdvID0gMDsKKyAgICAgaW50IHJjID0gMDsKK2RpZmYgLS1naXQgYS9ycG1pby9ycG1pby5jIGIvcnBtaW8vcnBtaW8uYworaW5kZXggY2QyMjNlOC4uMGIxMmUzMSAxMDA2NDQKKy0tLSBhL3JwbWlvL3JwbWlvLmMKKysrKyBiL3JwbWlvL3JwbWlvLmMKK0BAIC0xMzA5LDE1ICsxMzA5LDE5IEBAIGludCBGY2xvc2UoRkRfdCBmZCkKKyAgKiAtIGJ6b3BlbjoJWzEtOV0gaXMgYmxvY2sgc2l6ZSAobW9kdWxvIDEwMEspCisgICogLSBiem9wZW46CSdzJyBpcyBzbWFsbG1vZGUKKyAgKiAtIEhBQ0s6CScuJyB0ZXJtaW5hdGVzLCByZXN0IGlzIHR5cGUgb2YgSS9PCisrICogLSAgICAgICAgICAgICdVJyBzZXRzICptb2RlIHRvIHplcm8gKG5vIHBlcm1pc3Npb25zKSBpbnN0ZWFkIG9mIDA2NjYKKyAgKi8KKyBzdGF0aWMgdm9pZCBjdnRmbW9kZSAoY29uc3QgY2hhciAqbSwKKyAJCQkJY2hhciAqc3RkaW8sIHNpemVfdCBuc3RkaW8sCisgCQkJCWNoYXIgKm90aGVyLCBzaXplX3Qgbm90aGVyLAorLQkJCQljb25zdCBjaGFyICoqZW5kLCBpbnQgKiBmKQorKwkJCQljb25zdCBjaGFyICoqZW5kLCBpbnQgKmYsIG1vZGVfdCAqbW9kZSkKKyB7CisgICAgIGludCBmbGFncyA9IDA7CisgICAgIGNoYXIgYzsKKyAKKysgICAgaWYgKG1vZGUpCisrICAgICptb2RlID0gMDY2NjsKKysKKyAgICAgc3dpdGNoICgqbSkgeworICAgICBjYXNlICdhJzoKKyAJZmxhZ3MgfD0gT19XUk9OTFkgfCBPX0NSRUFUIHwgT19BUFBFTkQ7CitAQCAtMTM1Nyw2ICsxMzYxLDEwIEBAIHN0YXRpYyB2b2lkIGN2dGZtb2RlIChjb25zdCBjaGFyICptLAorIAkgICAgaWYgKC0tbnN0ZGlvID4gMCkgKnN0ZGlvKysgPSBjOworIAkgICAgY29udGludWU7CisgCSAgICBicmVhazsKKysJY2FzZSAnVSc6CisrCSAgICBpZiAobW9kZSkKKysJCSptb2RlID0gMDsKKysJICAgIGJyZWFrOworIAlkZWZhdWx0OgorIAkgICAgaWYgKC0tbm90aGVyID4gMCkgKm90aGVyKysgPSBjOworIAkgICAgY29udGludWU7CitAQCAtMTM4NSw3ICsxMzkzLDggQEAgZnByaW50ZihzdGRlcnIsICIqKiogRmRvcGVuKCVwLCVzKSAlc1xuIiwgZmQsIGZtb2RlLCBmZGJnKGZkKSk7CisgICAgIGlmIChmZCA9PSBOVUxMIHx8IGZtb2RlID09IE5VTEwpCisgCXJldHVybiBOVUxMOworIAorLSAgICBjdnRmbW9kZShmbW9kZSwgc3RkaW8sIHNpemVvZihzdGRpbyksIG90aGVyLCBzaXplb2Yob3RoZXIpLCAmZW5kLCBOVUxMKTsKKysgICAgY3Z0Zm1vZGUoZm1vZGUsIHN0ZGlvLCBzaXplb2Yoc3RkaW8pLCBvdGhlciwgc2l6ZW9mKG90aGVyKSwgJmVuZCwgTlVMTCwKKysgICAgICAgIE5VTEwpOworICAgICBpZiAoc3RkaW9bMF0gPT0gJ1wwJykKKyAJcmV0dXJuIE5VTEw7CisgICAgIHpzdGRpb1swXSA9ICdcMCc7CitAQCAtMTQzNiw3ICsxNDQ1LDcgQEAgRkRfdCBGb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpmbW9kZSkKKyB7CisgICAgIGNoYXIgc3RkaW9bMjBdLCBvdGhlclsyMF07CisgICAgIGNvbnN0IGNoYXIgKmVuZCA9IE5VTEw7CistICAgIG1vZGVfdCBwZXJtcyA9IDA2NjY7CisrICAgIG1vZGVfdCBwZXJtczsKKyAgICAgaW50IGZsYWdzID0gMDsKKyAgICAgRkRfdCBmZDsKKyAKK0BAIC0xNDQ0LDcgKzE0NTMsOCBAQCBGRF90IEZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmZtb2RlKQorIAlyZXR1cm4gTlVMTDsKKyAKKyAgICAgc3RkaW9bMF0gPSAnXDAnOworLSAgICBjdnRmbW9kZShmbW9kZSwgc3RkaW8sIHNpemVvZihzdGRpbyksIG90aGVyLCBzaXplb2Yob3RoZXIpLCAmZW5kLCAmZmxhZ3MpOworKyAgICBjdnRmbW9kZShmbW9kZSwgc3RkaW8sIHNpemVvZihzdGRpbyksIG90aGVyLCBzaXplb2Yob3RoZXIpLCAmZW5kLCAmZmxhZ3MsCisrICAgICAgICAmcGVybXMpOworICAgICBpZiAoc3RkaW9bMF0gPT0gJ1wwJykKKyAJcmV0dXJuIE5VTEw7CisgCistLSAKKzEuOC40LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tQ1ZFLTIwMTQtODExOC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLUNWRS0yMDE0LTgxMTgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYxNzk1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLUNWRS0yMDE0LTgxMTgucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSA3MWM4MTJlZGYxNDMxYTk5NjdiZDk5YmE2ZmZhNmFiODllYjdlYzdjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGVvbmFyZG8gU2FuZG92YWwgPGxlb25hcmRvLnNhbmRvdmFsLmdvbnphbGV6QGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFdlZCwgMTAgSnVuIDIwMTUgMTI6NTY6NTUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIHJwbTogQ1ZFLTIwMTQtODExOAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1JlZmVyZW5jZToKK2h0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9MTE2ODcxNQorCitEZXNjcmlwdGlvbjoKK0l0IHdhcyBmb3VuZCB0aGF0IFJQTSBjb3VsZCBlbmNvdW50ZXIgYW4gaW50ZWdlciBvdmVyZmxvdywKK2xlYWRpbmcgdG8gYSBzdGFjay1iYXNlZCBvdmVyZmxvdywgd2hpbGUgcGFyc2luZyBhIGNyYWZ0ZWQKK0NQSU8gaGVhZGVyIGluIHRoZSBwYXlsb2FkIHNlY3Rpb24gb2YgYW4gUlBNIGZpbGUuICBUaGlzIGNvdWxkCithbGxvdyBhbiBhdHRhY2tlciB0byBtb2RpZnkgc2lnbmVkIFJQTSBmaWxlcyBpbiBzdWNoIGEgd2F5IHRoYXQKK3RoZXkgd291bGQgZXhlY3V0ZSBjb2RlIGNob3NlbiBieSB0aGUgYXR0YWNrZXIgZHVyaW5nIHBhY2thZ2UKK2luc3RhbGxhdGlvbi4KKworT3JpZ2luYWwgUGF0Y2g6CitodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vYXR0YWNobWVudC5jZ2k/aWQ9OTYyMTU5CisKK1NpZ25lZC1vZmYtYnk6IExlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+CistLS0KKyBsaWIvY3Bpby5jIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWIvY3Bpby5jIGIvbGliL2NwaW8uYworaW5kZXggMzgyZWViNi4uNzRkZGQ5YyAxMDA2NDQKKy0tLSBhL2xpYi9jcGlvLmMKKysrKyBiL2xpYi9jcGlvLmMKK0BAIC0yOTYsNiArMjk2LDkgQEAgaW50IHJwbWNwaW9IZWFkZXJSZWFkKHJwbWNwaW9fdCBjcGlvLCBjaGFyICoqIHBhdGgsIHN0cnVjdCBzdGF0ICogc3QpCisgICAgIHN0LT5zdF9yZGV2ID0gbWFrZWRldihtYWpvciwgbWlub3IpOworIAorICAgICBHRVRfTlVNX0ZJRUxEKGhkci5uYW1lc2l6ZSwgbmFtZVNpemUpOworKyAgICBpZiAobmFtZVNpemUgPD0gMCB8fCBuYW1lU2l6ZSA+IDQwOTYpIHsKKysgICAgICAgIHJldHVybiBDUElPRVJSX0JBRF9IRUFERVI7CisrICAgIH0KKyAKKyAgICAgKnBhdGggPSB4bWFsbG9jKG5hbWVTaXplICsgMSk7CisgICAgIHJlYWQgPSBGcmVhZCgqcGF0aCwgbmFtZVNpemUsIDEsIGNwaW8tPmZkKTsKKy0tIAorMS44LjQuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1hdXRvZ2VuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tYXV0b2dlbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzcxMjM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tYXV0b2dlbi5wYXRjaApAQCAtMCwwICsxLDI1IEBACitSZW1vdmUgdGhlIHNhbml0eSBjaGVja2luZyBmcm9tIHRoZSBycG0gYXV0b2dlbi5zaC4gIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZQord2UgbWF5IGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50LCBidXQgeWV0IGNvbXBhdGlibGUgdmVyc2lvbnMuICBJZiB3ZSBkbyBlbmQKK3VwIGJyZWFraW5nIHRoaW5ncywgd2UnbGwgZGVhbCB3aXRoIGl0IGF0IHRoYXQgdGltZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L3N5Y2svYXV0b2dlbi5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9zeWNrL2F1dG9nZW4uc2gKKysrKyBycG0tNS40LjE0L3N5Y2svYXV0b2dlbi5zaAorQEAgLTM0LDEyICszNCw2IEBAIGxpYnRvb2xpemUgKCkgeworICAgICBldmFsICRfbGlidG9vbGl6ZSAkX2xpYnRvb2xpemVfYXJncworIH0KKyAKKy0jICAgcmVxdWlyZW1lbnRzIHNhbml0eSBjaGVjaworLVsgImBhdXRvbWFrZSAgIC0tdmVyc2lvbiB8IGhlYWQgLTFgIiAhPSAiJEFNViIgXSAmJiBlY2hvICIkVVNBR0UiICMgJiYgZXhpdCAxCistWyAiYGF1dG9jb25mICAgLS12ZXJzaW9uIHwgaGVhZCAtMWAiICE9ICIkQUNWIiBdICYmIGVjaG8gIiRVU0FHRSIgIyAmJiBleGl0IDEKKy1bICJgbGlidG9vbGl6ZSAtLXZlcnNpb24gfCBoZWFkIC0xYCIgIT0gIiRMVFYiIF0gJiYgZWNobyAiJFVTQUdFIiAjICYmIGV4aXQgMQorLVsgImBnZXR0ZXh0aXplIC0tdmVyc2lvbiB8IGhlYWQgLTEgfCBzZWQgLWUgJ3M7Xi4qL1xcKGdldHRleHRpemVcXCk7XFwxOydgIiAhPSAiJEdUVCIgXSAmJiBlY2hvICIkVVNBR0UiICMgJiYgZXhpdCAxCistCisgZWNobyAiLS0tPiBnZW5lcmF0ZSBmaWxlcyB2aWEgR05VIGxpYnRvb2wgKGxpYnRvb2xpemUpIgorIGxpYnRvb2xpemUgLS1xdWlldCAtLWNvcHkgLS1mb3JjZSAtLWluc3RhbGwKKyBlY2hvICItLS0+IGdlbmVyYXRlIGZpbGVzIHZpYSBHTlUgYXV0b2NvbmYgKGFjbG9jYWwsIGF1dG9oZWFkZXIpIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tY2Fub25hcmNoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tY2Fub25hcmNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYWI0OTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1jYW5vbmFyY2gucGF0Y2gKQEAgLTAsMCArMSwxMzYgQEAKK2xpYi9ycG1yYy5jOiBVcGRhdGUgLS10YXJnZXQgcHJvY2Vzc2luZyB0byBzdXBwb3J0IGZ1bGwgR05VIGNhbm9uaWNhbCBhcmNoCisKK1ByaW9yIHRvIHRoaXMgcGF0Y2gsIHdoZW4gdXNpbmcgLS10YXJnZXQsIFJQTSBzdXBwb3J0ZWQgdGhlIGZvcm1hdDoKKyAgPGFyY2g+CisgIDxhcmNoPi08b3M+CisgIDxhcmNoPi08b3M+LWdudQorICA8YXJjaD4tPGFyYml0cmFyeSBpdGVtcz4tPG9zPgorICA8YXJjaD4tPGFyYml0cmFyeSBpdGVtcz4tPG9zPi1nbnUKKworVGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBpdGVtcyB0bzoKKyAgPGFyY2g+CisgIDxhcmNoPi08b3M+CisgIDxhcmNoPi08b3M+LWdudQorICA8YXJjaD4tPHZlbmRvcj4tPG9zPgorICA8YXJjaD4tPHZlbmRvcj4tPG9zPi08ZXh0ZW5zaW9uPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9saWIvcnBtcmMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvcnBtcmMuYworKysrIHJwbS01LjQuMTQvbGliL3JwbXJjLmMKK0BAIC05MjUsOCArOTI1LDggQEAgc3RhdGljIHZvaWQgZ2V0TWFjaGluZUluZm8oaW50IHR5cGUsIC8qQAorIAorIHN0YXRpYyB2b2lkIHJwbVJlYnVpbGRUYXJnZXRWYXJzKGNvbnN0IGNoYXIgKiogdGFyZ2V0LCBjb25zdCBjaGFyICoqIGNhbm9udGFyZ2V0KQorIHsKKy0KKy0gICAgY2hhciAqY2EgPSBOVUxMLCAqY28gPSBOVUxMLCAqY3QgPSBOVUxMOworKyAgICAvKiBjYSA9IGFyY2gsIGN2ID0gdmVuZG9yLCBjbyA9IG9zLCBjZSA9IGV4dGVuc2lvbiwgY3QgPSBjYW5vbiB0YXJnZXQgKi8KKysgICAgY2hhciAqY2EgPSBOVUxMLCAqY3YgPSBOVUxMLCAqY28gPSBOVUxMLCAqY2UgPSBOVUxMLCAqY3QgPSBOVUxMOworICAgICBpbnQgeDsKKyAKKyAgICAgLyogUmVidWlsZCB0aGUgY29tcGF0IHRhYmxlIHRvIHJlY2FsY3VsYXRlIHRoZSBjdXJyZW50IHRhcmdldCBhcmNoLiAgKi8KK0BAIC05MzYsMjMgKzkzNiw2MCBAQCBzdGF0aWMgdm9pZCBycG1SZWJ1aWxkVGFyZ2V0VmFycyhjb25zdCBjCisgICAgIHJwbVNldFRhYmxlcyhSUE1fTUFDSFRBQkxFX0JVSUxEQVJDSCwgUlBNX01BQ0hUQUJMRV9CVUlMRE9TKTsKKyAKKyAgICAgaWYgKHRhcmdldCAmJiAqdGFyZ2V0KSB7CisrCS8qIEdOVSBjYW5vbmljYWwgZm9ybWF0IGlzOgorKwkgKiAgPGFyY2g+LTx2ZW5kb3I+LTxvcz5bLWV4dGVuc2lvbl0KKysJICoKKysJICogV2Ugc3VwcG9ydCB0aGUgYm90aCB0aGUgR05VIGNhbm9uaWNhbCBmb3JtYXQKKysJICogYXMgd2VsbCBhcyB0aGUgdHJhZGl0aW9uYWwgUlBNIGZvcm1hdHM6IAorKwkgKiAgPGFyY2g+CisrCSAqICA8YXJjaD4tPG9zPlstZ251XQorKwkgKi8KKyAJY2hhciAqYzsKKyAJLyogU2V0IGFyY2ggYW5kIG9zIGZyb20gc3BlY2lmaWVkIGJ1aWxkIHRhcmdldCAqLworIAljYSA9IHhzdHJkdXAoKnRhcmdldCk7CistCWlmICgoYyA9IHN0cmNocihjYSwgJy0nKSkgIT0gTlVMTCkgeworKwlpZiAoKGMgPSBzdHJjaHIoY2EsICctJykpID09IE5VTEwpIHsKKysJICAgIC8qIEZvcm1hdCBpcyA8YXJjaD4gKi8KKysJICAgIDsKKysJfSBlbHNlIHsKKyAJICAgICpjKysgPSAnXDAnOworLQkgICAgCistCSAgICBpZiAoKGNvID0gc3RycmNocihjLCAnLScpKSA9PSBOVUxMKSB7CistCQljbyA9IGM7CisrCSAgICBjdiA9IGM7CisrCisrCSAgICBpZiAoKGMgPSBzdHJjaHIoYywgJy0nKSkgPT0gTlVMTCkgeworKwkJLyogRm9ybWF0IGlzIDxhcmNoPi08b3M+ICovCisrCQljbyA9IGN2OworKwkJY3YgPSBOVUxMOworIAkgICAgfSBlbHNlIHsKKy0JCWlmICgheHN0cmNhc2VjbXAoY28sICItZ251IikpCistCQkgICAgKmNvID0gJ1wwJzsKKy0JCWlmICgoY28gPSBzdHJyY2hyKGMsICctJykpID09IE5VTEwpCistCQkgICAgY28gPSBjOworLQkJZWxzZQorLQkJICAgIGNvKys7CisrCQkqYysrID0gJ1wwJzsKKysJCWNvID0gYzsKKysKKysJCWlmICgoYyA9IHN0cmNocihjLCAnLScpKSA9PSBOVUxMKSB7CisrCQkgICAgLyogTWlnaHQgYmU6CisrCQkgICAgICogIDxhcmNoPi08dmVuZG9yPi08b3M+CisrCQkgICAgICogIDxhcmNoPi08b3M+LWdudQorKwkJICAgICAqLworKwkJICAgIGlmICgheHN0cmNhc2VjbXAoY28sICJnbnUiKSkgeworKwkJCS8qIEZvcm1hdCB3YXMgPGFyY2g+LTxvcz4tZ251ICovCisrCQkJY2UgPSBjbzsKKysJCQljbyA9IGN2OworKwkJCWN2ID0gTlVMTDsKKysJCSAgICB9CisrCQl9IGVsc2UgeworKwkJICAgIC8qIEZvcm1hdCB3YXMgPGFyY2g+LTx2ZW5kb3I+LTxvcz4tPGV4dGVuc2lvbj4gKi8KKysJCSAgICAqYysrID0gJ1wwJzsKKysJCSAgICBjZSA9IGM7CisrCQl9CisgCSAgICB9CisrCSAgICBpZiAoY3YgIT0gTlVMTCkgY3YgPSB4c3RyZHVwKGN2KTsKKyAJICAgIGlmIChjbyAhPSBOVUxMKSBjbyA9IHhzdHJkdXAoY28pOworKwkgICAgaWYgKGNlICE9IE5VTEwpIHsKKysJCS8qIFdlIG5lZWQgdG8gcHJlZml4IGl0IHdpdGggYSAiLSIgKi8KKysJCWNoYXIgKiBsY2UgPSBOVUxMOworKworKwkJbGNlID0geG1hbGxvYyhzdHJsZW4oY2UpICsgc2l6ZW9mKCItIikpOworKwkJc3ByaW50ZihsY2UsICItJXMiLCBjZSk7CisrCisrCQljZSA9IGxjZTsKKysJICAgIH0KKyAJfQorICAgICB9IGVsc2UgeworIAljb25zdCBjaGFyICphID0gTlVMTDsKK0BAIC05OTUsOCArMTAzMiwxNiBAQCBzdGF0aWMgdm9pZCBycG1SZWJ1aWxkVGFyZ2V0VmFycyhjb25zdCBjCisgICAgIGFkZE1hY3JvKE5VTEwsICJfdGFyZ2V0IiwgTlVMTCwgY3QsIFJNSUxfUlBNUkMpOworICAgICBkZWxNYWNybyhOVUxMLCAiX3RhcmdldF9jcHUiKTsKKyAgICAgYWRkTWFjcm8oTlVMTCwgIl90YXJnZXRfY3B1IiwgTlVMTCwgY2EsIFJNSUxfUlBNUkMpOworKyAgICBpZiAoY3YpIHsKKysJZGVsTWFjcm8oTlVMTCwgIl90YXJnZXRfdmVuZG9yIik7CisrCWFkZE1hY3JvKE5VTEwsICJfdGFyZ2V0X3ZlbmRvciIsIE5VTEwsIGN2LCBSTUlMX1JQTVJDKTsKKysgICAgfQorICAgICBkZWxNYWNybyhOVUxMLCAiX3RhcmdldF9vcyIpOworICAgICBhZGRNYWNybyhOVUxMLCAiX3RhcmdldF9vcyIsIE5VTEwsIGNvLCBSTUlMX1JQTVJDKTsKKysgICAgaWYgKGNlKSB7CisrCWRlbE1hY3JvKE5VTEwsICJfZ251Iik7CisrCWFkZE1hY3JvKE5VTEwsICJfZ251IiwgTlVMTCwgY2UsIFJNSUxfUlBNUkMpOworKyAgICB9CisgCisgICAgIGlmIChjYW5vbnRhcmdldCkKKyAJKmNhbm9udGFyZ2V0ID0gY3Q7CitAQCAtMTAwNCw4ICsxMDQ5LDEyIEBAIHN0YXRpYyB2b2lkIHJwbVJlYnVpbGRUYXJnZXRWYXJzKGNvbnN0IGMKKyAJY3QgPSBfZnJlZShjdCk7CisgICAgIGNhID0gX2ZyZWUoY2EpOworICAgICAvKkAtdXNlcmVsZWFzZWRAKi8KKysgICAgY3YgPSBfZnJlZShjdik7CisrICAgIC8qQC11c2VyZWxlYXNlZEAqLworICAgICBjbyA9IF9mcmVlKGNvKTsKKyAgICAgLypAPXVzZXJlbGVhc2VkQCovCisrICAgIGNlID0gX2ZyZWUoY2UpOworKyAgICAvKkAtdXNlcmVsZWFzZWRAKi8KKyB9CisgCisgdm9pZCBycG1GcmVlUnBtcmModm9pZCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWNoZWNrLXJvb3RwYXRoLXJlYXNvbmFibGVuZXNzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tY2hlY2stcm9vdHBhdGgtcmVhc29uYWJsZW5lc3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk4NjAzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWNoZWNrLXJvb3RwYXRoLXJlYXNvbmFibGVuZXNzLnBhdGNoCkBAIC0wLDAgKzEsOTYgQEAKK3JwbTogY2hlY2sgaWYgdGhlIGFyZ3VtZW50KHJvb3RwYXRoKSBleGlzdHMgb3IgYmUgd3JpdGFibGUKKworV2hlbiB1c2VyIGV4ZWN1dGUgdGhlIGNvbW1hbmQgInJwbSAtcWFpIC0tcm9vdD0kZGlyIixpZiAkZGlyIGRvZXNuJ3QKK2V4aXN0IG9yIGlzIHVud3JpdGFibGUgYXMgcmVzdWx0IG9mIG1ha2luZyBhIHR5cG8gaW4gcm9vdHBhdGgsdGhlbgoraXQgd2lsbCBjcmVhdGUgZGlyZW50ICRkaXIgYW5kIHN1YmRpcmVjdG9yeS4KK1NvIHdlIHNob3VsZCBhZGQgdGhlIGNoZWNrIGZ1bmN0aW9uIHRvIGZpeCBpdCBiZWZvcmUgY3JlYXRpbmcgcmVsYXRpb25hbAorc3ViZGlyZWN0b3J5LGFuZCB3YXJuIHRoZSBpbmNvcnJlY3Qgcm9vdHBhdGggdG8gdXNlci4gSXQganVzdCBjaGVja3MgdGhlCityb290cGF0aCByZWFzb25hYmxlbmVzcyB3aGVuIHRoZSB1c2VyIGlucHV0IHRoZSBhcmd1bWVudCgtLXJvb3Q9Ly1yPSkuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBaaGl4aW9uZyBDaGkgPHpjaGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIHJwbXF2LmMgfCA0NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvcnBtcXYuYyBiL3JwbXF2LmMKK2luZGV4IDQwYzQyYmQuLjg4ZDg1YWIgMTAwNjQ0CistLS0gYS9ycG1xdi5jCisrKysgYi9ycG1xdi5jCitAQCAtMjA2LDYgKzIwNiw4IEBAIHN0YXRpYyBzdHJ1Y3QgcG9wdE9wdGlvbiBvcHRpb25zVGFibGVbXSA9IHsKKyAgICBQT1BUX1RBQkxFRU5ECisgfTsKKyAKKytzdGF0aWMgaW50IF9ycG1xdl9yb290cGF0aF9zdGF0ZSA9IDA7CisrCisgI2lmZGVmIF9fTUlOVF9fCisgLyogTWlOVCBjYW5ub3QgZHluYW1pY2FsbHkgaW5jcmVhc2UgdGhlIHN0YWNrLiAgKi8KKyBsb25nIF9zdGtzaXplID0gNjQgKiAxMDI0TDsKK0BAIC00MjcsNiArNDI5LDQxIEBAIHN0YXRpYyB2b2lkIGludGVncml0eV9jaGVjayhjb25zdCBjaGFyICpwcm9nbmFtZSwgZW51bSBtb2RlcyBwcm9nbW9kZV9udW0pCisgfQorICNlbmRpZgorIAorKy8qY2hlY2sgaWYgdGhlIHJvb3RkaXIgaXMgd3JpdGFibGUgb3IgZXhpc3RzICovCisraW50IGFjY2Vzc19maWxlKGNvbnN0IGNoYXIgKnJvb3RkaXIpCisreworKyAgICBpbnQgcmV0LHJvb3RkaXJfbGVuOworKworKyAgICBpZihyb290ZGlyID09IE5VTEwpIHsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKworKyAgICByb290ZGlyX2xlbiA9IHN0cmxlbihyb290ZGlyKTsKKysgICAgLyptYWtlIHN1cmUgdGhhdCBkaXJlbnQgYXJndW1lbnQgdHJhaWxpbmcgaXMgIi8iICovCisrICAgIGlmKCEocm9vdGRpcl9sZW4gJiYgcm9vdGRpcltyb290ZGlyX2xlbiAtIDFdID09ICcvJykpeworKyAgICAgICAgY2hhciAqdCA9IChjaGFyICopbWFsbG9jKHJvb3RkaXJfbGVuICsgMik7CisrICAgICAgICAqdCA9ICdcMCc7CisrICAgICAgICAodm9pZClzdHBjcHkoc3RwY3B5KHQscm9vdGRpciksIi8iKTsKKysgICAgICAgIHJldCA9IGFjY2Vzcyh0LEZfT0t8V19PSyk7CisrICAgICAgICBmcmVlKHQpOworKyAgICB9ZWxzZXsKKysgICAgICAgIHJldCA9IGFjY2Vzcyhyb290ZGlyLEZfT0t8V19PSyk7CisrICAgIH0KKysgICAgcmV0dXJuIHJldDsKKyt9CisrCisrLypjaGVjayBpZiBpbnB1dCB0aGUgYXJndW1lbnQgIi0tcm9vdC8tciIgICovCisrdm9pZCBjaGVja19hcmd1bWVudF9yb290KGludCBhcmdjLGNoYXIgKiBjb25zdCBhcmd2W10pCisreworKyAgICBpbnQgaTsKKysgICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworKyAgICAgICAgaWYoc3RybmNtcChhcmd2W2ldLCItLXJvb3Q9Iiw3KSA9PSAwIHx8IHN0cm5jbXAoYXJndltpXSwiLXI9IiwzKSA9PSAwKSB7CisrICAgICAgICAgICAgX3JwbXF2X3Jvb3RwYXRoX3N0YXRlID0gMTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgfQorK30KKysKKyAvKkAtYm91bmRzQCovIC8qIExDTDogc2VnZmF1bHQgKi8KKyAvKkAtbW9kc0AqLyAvKiBGSVg6IHNocnVnICovCisgI2lmICFkZWZpbmVkKF9fR0xJQkNfXykgJiYgIWRlZmluZWQoX19MQ0xJTlRfXykKK0BAIC00NzYsNiArNTEzLDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiogYXJndikKKyAgICAgaW50IHh4OworICNlbmRpZgorIAkKKysgICAgY2hlY2tfYXJndW1lbnRfcm9vdChhcmdjLChjaGFyICpjb25zdCAqKWFyZ3YpOworKworICNpZiAhZGVmaW5lZChfX0dMSUJDX18pICYmICFkZWZpbmVkKF9fTENMSU5UX18pCisgICAgIGVudmlyb24gPSBlbnZwOworICNlbHNlCitAQCAtNzE1LDYgKzc1NCwxMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKiBhcmd2KQorIAkJYXJnZXJyb3IoXygiYXJndW1lbnRzIHRvIC0tcm9vdCAoLXIpIG11c3QgYmVnaW4gd2l0aCBhIC8iKSk7CisgCSAgICBicmVhazsKKyAJfQorKyAgICAgICAgaWYgKF9ycG1xdl9yb290cGF0aF9zdGF0ZSkgeworKyAgICAgICAgICAgIGlmIChhY2Nlc3NfZmlsZShycG1pb1Jvb3REaXIpKSB7CisrICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBfKCJJbnZhbGlkIGRpcmVjdG9yeTolcywgZW5zdXJlIGl0IGV4aXN0cyBvciBiZSB3cml0YWJsZVxuIikscnBtaW9Sb290RGlyKTsKKysgICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKyAgICAgfQorIAorICNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfT1BFTlBLRykgLyogaW50ZWdyaXR5LWNoZWNraW5nICovCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRiLXJlZHVjZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRiLXJlZHVjZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODY5Mzc2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGItcmVkdWNlLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworQ2hhbmdlIGNhY2hlIHNpemUgdG8gcmVkdWNlIHRoZSB1c2FnZSBvZiBkaXNrIHNwYWNlIGZyb20gNjJNQiB0byAyNk1CLiAKKworU2lnbmVkLW9mZi1ieTogTWVpIExlaSA8bGVpLm1laUBpbnRlbC5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L3JwbWRiL0RCX0NPTkZJRy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1kYi9EQl9DT05GSUcuaW4KKysrKyBycG0tNS40LjE0L3JwbWRiL0RCX0NPTkZJRy5pbgorQEAgLTI5LDcgKzI5LDcgQEAgc2V0X3RocmVhZF9jb3VudCA2NAorIAorICMgPT09PT09PT09PT09PT09PSBNZW1vcnkgUG9vbAorICNYWFggaW5pdGlhbGl6aW5nIGRiZW52IHdpdGggc2V0X2NhY2hlc2l6ZSBoYXMgdW5pbXBsZW1lbnRlZCBwcmVyZXF1c2l0ZXMKKy0jc2V0X2NhY2hlc2l6ZSAwIDEwNDg1NzYgMCAKKytzZXRfY2FjaGVzaXplIDAgMTA0ODU3NiAwIAorIHNldF9tcF9tbWFwc2l6ZSAyNjg0MzU0NTYKKyAKKyAjID09PT09PT09PT09PT09PT0gTG9ja2luZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGI1LW9yLWRiNi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRiNS1vci1kYjYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcwMjBhMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRiNS1vci1kYjYucGF0Y2gKQEAgLTAsMCArMSwxNjIgQEAKK1N1cHBvcnQgYm90aCBkYjUgYW5kIGRiNi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0vY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLm9yaWcvY29uZmlndXJlLmFjCisrKysgcnBtL2NvbmZpZ3VyZS5hYworQEAgLTU0Nyw4ICs1NDcsNiBAQCBlbHNlCisgICAgIE1ZUEFUSD0kUEFUSAorIGZpCisgCistREJYWT1kYjYwCistCisgQUNfUEFUSF9QUk9HKF9fQkFTSCwgYmFzaCwgJXtfYmluZGlyfS9iYXNoLCAkTVlQQVRIKQorIEFDX1BBVEhfUFJPRyhfX0JaSVAyLCBiemlwMiwgJXtfYmluZGlyfS9iemlwMiwgJE1ZUEFUSCkKKyBBQ19QQVRIX1BST0coX19DQVQsIGNhdCwgL2Jpbi9jYXQsICRNWVBBVEgpCitAQCAtNTYwLDIyICs1NTgsNiBAQCBBQ19QQVRIX1BST0coX19DTUFLRSwgY21ha2UsICV7X2JpbmRpcn0vCisgQUNfUEFUSF9QUk9HKF9fQ1BJTywgY3BpbywgL2Jpbi9jcGlvLCAkTVlQQVRIKQorIEFDX1BBVEhfUFJPRyhfX0NVUkwsIGN1cmwsICV7X2JpbmRpcn0vY3VybCwgJE1ZUEFUSCkKKyBBQ19QQVRIX1BST0coX19DVlMsIGN2cywgJXtfYmluZGlyfS9jdnMsICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfQVJDSElWRSwgJHtEQlhZfV9hcmNoaXZlLCAle19iaW5kaXJ9LyR7REJYWX1fYXJjaGl2ZSwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9DSEVDS1BPSU5ULCAke0RCWFl9X2NoZWNrcG9pbnQsICV7X2JpbmRpcn0vJHtEQlhZfV9jaGVja3BvaW50LCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX0RFQURMT0NLLCAke0RCWFl9X2RlYWRsb2NrLCAle19iaW5kaXJ9LyR7REJYWX1fZGVhZGxvY2ssICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfRFVNUCwgJHtEQlhZfV9kdW1wLCAle19iaW5kaXJ9LyR7REJYWX1fZHVtcCwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9IT1RCQUNLVVAsICR7REJYWX1faG90YmFja3VwLCAle19iaW5kaXJ9LyR7REJYWX1faG90YmFja3VwLCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX0xPQUQsICR7REJYWX1fbG9hZCwgJXtfYmluZGlyfS8ke0RCWFl9X2xvYWQsICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfTE9HX1ZFUklGWSwgJHtEQlhZfV9sb2dfdmVyaWZ5LCAle19iaW5kaXJ9LyR7REJYWX1fbG9nX3ZlcmlmeSwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9QUklOVExPRywgJHtEQlhZfV9wcmludGxvZywgJXtfYmluZGlyfS8ke0RCWFl9X3ByaW50bG9nLCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX1JFQ09WRVIsICR7REJYWX1fcmVjb3ZlciwgJXtfYmluZGlyfS8ke0RCWFl9X3JlY292ZXIsICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfUkVQTElDQVRFLCAke0RCWFl9X3JlcGxpY2F0ZSwgJXtfYmluZGlyfS8ke0RCWFl9X3JlcGxpY2F0ZSwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQlNRTCwgJHtEQlhZfXNxbCwgJXtfYmluZGlyfS8ke0RCWFl9c3FsLCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX1NRTF9DT0RFR0VOLCAke0RCWFl9X3NxbF9jb2RlZ2VuLCAle19iaW5kaXJ9LyR7REJYWX1fc3FsX2NvZGVnZW4sICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfU1RBVCwgJHtEQlhZfV9zdGF0LCAle19iaW5kaXJ9LyR7REJYWX1fc3RhdCwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9UVU5FUiwgJHtEQlhZfV90dW5lciwgJXtfYmluZGlyfS8ke0RCWFl9X3R1bmVyLCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX1VQR1JBREUsICR7REJYWX1fdXBncmFkZSwgJXtfYmluZGlyfS8ke0RCWFl9X3VwZ3JhZGUsICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfVkVSSUZZLCAke0RCWFl9X3ZlcmlmeSwgJXtfYmluZGlyfS8ke0RCWFl9X3ZlcmlmeSwgJE1ZUEFUSCkKKyBBQ19QQVRIX1BST0coX19ESUZGLCBkaWZmLCAvYmluL2RpZmYsICRNWVBBVEgpCisgQUNfUEFUSF9QUk9HKF9fRElUVE8sIGRpdHRvLCAle19iaW5kaXJ9L2RpdHRvLCAkTVlQQVRIKQorIEFDX1BBVEhfUFJPRyhfX0ZJTEUsIGZpbGUsICV7X2JpbmRpcn0vZmlsZSwgJE1ZUEFUSCkKK0BAIC0xNjA0LDEzICsxNTg2LDE4IEBAIFJQTV9DSEVDS19MSUIoCisgCisgZG5sICMgQmVya2VsZXktREIgJiBTUUxpdGUKKyBEQkxJQlNSQ1M9IiIKKytEQlhZPWRiCisrCisgIyBYWFggd29uJ3QgaGFuZGxlIC0taW5jbHVkZWRpciBvdmVycmlkZQorLUNQUEZMQUdTPSIke0NQUEZMQUdTfSAtSSR7cHJlZml4fS9pbmNsdWRlLyR7REJYWX0iCisrQ1BQRkxBR1Nfc2F2ZT0iJHtDUFBGTEFHU30iCisrQ1BQRkxBR1M9IiR7Q1BQRkxBR1Nfc2F2ZX0gLUkke3ByZWZpeH0vaW5jbHVkZS9kYi02LjAiCisrd2l0aF9kYl9zYXZlPSIke3dpdGhfZGJ9IgorIFJQTV9DSEVDS19MSUIoCisgICAgIFtCZXJrZWxleS1EQl0sIFtkYl0sCisgICAgIFtkYi02LjBdLCBbZGJfY3JlYXRlXSwgW2RiLmhdLAorLSAgICBbeWVzLGV4dGVybmFsXSwgW2RiM10sCisrICAgIFt5ZXMsZXh0ZXJuYWxdLCBbZGI2XSwKKyAgICAgWyBEQkxJQlNSQ1M9IiREQkxJQlNSQ1MgZGIzLmMiCisrICAgICAgREJYWT1kYjYwCisgICAgICAgQU1fQ09ORElUSU9OQUwoV0lUSF9EQiwgWyB0cnVlIF0pCisgICAgICAgQU1fQ09ORElUSU9OQUwoV0lUSF9EQl9JTlRFUk5BTCwgWyB0ZXN0ICIuJFJQTV9DSEVDS19MSUJfTE9DQVRJT04iID0gLmludGVybmFsIF0pCisgICAgICAgaWYgdGVzdCAiLiRSUE1fQ0hFQ0tfTElCX0xPQ0FUSU9OIiA9IC5pbnRlcm5hbDsgdGhlbgorQEAgLTE2MTksMTAgKzE2MDYsMzIgQEAgUlBNX0NIRUNLX0xJQigKKyAgICAgICAgICAgV0lUSF9EQl9TVUJESVI9IiIKKyAgICAgICBmaQorICAgICBdLAorLSAgICBbIEFNX0NPTkRJVElPTkFMKFdJVEhfREIsIFsgZmFsc2UgXSkKKy0gICAgICBBTV9DT05ESVRJT05BTChXSVRIX0RCX0lOVEVSTkFMLCBbIGZhbHNlIF0pCisrICAgIFsgIyBSZXNldCBhIGZldyB2YXJpYWJsZXMgdG8gZnJlc2gKKysgICAgICB3aXRoX2RiPSIke3dpdGhfZGJfc2F2ZX0iCisrICAgICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1Nfc2F2ZX0gLUkke3ByZWZpeH0vaW5jbHVkZS9kYi01LjMiCisrICAgICAgUlBNX0NIRUNLX0xJQigKKysgICAgICAgIFtCZXJrZWxleS1EQl0sIFtkYl0sCisrICAgICAgICBbZGItNS4zXSwgW2RiX2NyZWF0ZV0sIFtkYi5oXSwKKysgICAgICAgIFt5ZXMsZXh0ZXJuYWxdLCBbZGI1M10sCisrICAgICAgICBbIERCTElCU1JDUz0iJERCTElCU1JDUyBkYjMuYyIKKysgICAgICAgICAgREJYWT1kYjUzCisrICAgICAgICAgIEFNX0NPTkRJVElPTkFMKFdJVEhfREIsIFsgdHJ1ZSBdKQorKyAgICAgICAgICBBTV9DT05ESVRJT05BTChXSVRIX0RCX0lOVEVSTkFMLCBbIHRlc3QgIi4kUlBNX0NIRUNLX0xJQl9MT0NBVElPTiIgPSAuaW50ZXJuYWwgXSkKKysgICAgICAgICAgaWYgdGVzdCAiLiRSUE1fQ0hFQ0tfTElCX0xPQ0FUSU9OIiA9IC5pbnRlcm5hbDsgdGhlbgorKyAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfREJfSCwgMSwgW0hhdmUgPGRiLmg+IGhlYWRlcl0pCisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgIFdJVEhfREJfU1VCRElSPSIiCisrICAgICAgICAgIGZpCisrICAgICAgICBdLAorKyAgICAgICAgWyBBTV9DT05ESVRJT05BTChXSVRIX0RCLCBbIGZhbHNlIF0pCisrICAgICAgICAgIEFNX0NPTkRJVElPTkFMKFdJVEhfREJfSU5URVJOQUwsIFsgZmFsc2UgXSkKKysgICAgICAgIF0pCisgICAgIF0pCisgCisraWYgdGVzdCAiLiRhY19jdl9saWJfZGJfNl8wX2RiX2NyZWF0ZSIgIT0gLnllcyAtYSAiLiRhY19jdl9saWJfZGJfNV8zX2RiX2NyZWF0ZSIgIT0gLnllczsgdGhlbgorKyAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU19zYXZlfSIKKytmaQorKworIGRubCAjIFNxbGl0ZSBleHRlcm5hbAorIFJQTV9DSEVDS19MSUIoCisgICAgIFtTUUxpdGVdLCBbc3FsaXRlXSwKK0BAIC0xNjMzLDEwICsxNjQyLDExIEBAIFJQTV9DSEVDS19MSUIoCisgCisgZG5sICMgU3FsaXRlIDMuNy4wLjEgZnJvbSBkYi01LjEuMTkKKyBkbmwgWFhYIGVycm9yOiBgZGIzJyBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgd2l0aCBBQ19DT05GSUdfU1VCRElSUy4KKytpZiB0ZXN0ICIuJGFjX2N2X2xpYl9kYl82XzBfZGJfY3JlYXRlIiA9IC55ZXM7IHRoZW4KKyBSUE1fQ0hFQ0tfTElCKAorICAgICBbQmVya2VsZXktREIgKCtTUUxpdGUzKV0sIFtkYnNxbF0sCisgICAgIFtkYl9zcWwtNi4wXSwgW3NxbGl0ZTNfb3Blbl0sIFtkYnNxbC5oXSwKKy0gICAgW3llcyxleHRlcm5hbF0sIFtkYjMvc3FsXSwKKysgICAgW3llcyxleHRlcm5hbF0sIFtkYjYvc3FsXSwKKyAgICAgWworICAgICAgIEFNX0NPTkRJVElPTkFMKFdJVEhfREJTUUwsIFsgdHJ1ZSBdKQorICAgICAgIEFDX0RFRklORShXSVRIX1NRTElURSwgMSwgW0RlZmluZSBhcyAxIGlmIGJ1aWxkaW5nIHdpdGggU1FMaXRlIGxpYnJhcnldKQorQEAgLTE2NTAsMTIgKzE2NjAsNTAgQEAgUlBNX0NIRUNLX0xJQigKKyAgICAgXSwgWworICAgICAgIEFNX0NPTkRJVElPTkFMKFdJVEhfREJTUUwsIFsgZmFsc2UgXSkKKyAgICAgXSkKKytlbGlmIHRlc3QgIi4kYWNfY3ZfbGliX2RiXzVfM19kYl9jcmVhdGUiID0gLnllczsgdGhlbgorK1JQTV9DSEVDS19MSUIoCisrICAgIFtCZXJrZWxleS1EQiAoK1NRTGl0ZTMpXSwgW2Ric3FsXSwKKysgICAgW2RiX3NxbC01LjNdLCBbc3FsaXRlM19vcGVuXSwgW2Ric3FsLmhdLAorKyAgICBbeWVzLGV4dGVybmFsXSwgW2RiNTMvc3FsXSwKKysgICAgWworKyAgICAgIEFNX0NPTkRJVElPTkFMKFdJVEhfREJTUUwsIFsgdHJ1ZSBdKQorKyAgICAgIEFDX0RFRklORShXSVRIX1NRTElURSwgMSwgW0RlZmluZSBhcyAxIGlmIGJ1aWxkaW5nIHdpdGggU1FMaXRlIGxpYnJhcnldKQorKyAgICAgIGlmIHRlc3QgIi4kUlBNX0NIRUNLX0xJQl9MT0NBVElPTiIgPSAuaW50ZXJuYWw7IHRoZW4KKysgICAgICAgIFdJVEhfREJfQ1BQRkxBR1M9IiR7V0lUSF9EQl9DUFBGTEFHU30gLUlcJCh0b3Bfc3JjZGlyKS9kYi9zcWwvZ2VuZXJhdGVkIgorKyAgICAgICAgV0lUSF9EQl9MSUJTPSIke1dJVEhfREJTUUxfTElCU30iCisrICAgICAgICBEQkxJQlNSQ1M9IiREQkxJQlNSQ1Mgc3FsaXRlLmMiCisrICAgICAgZWxzZQorKyAgICAgICAgV0lUSF9EQlNRTF9TVUJESVI9IiIKKysgICAgICBmaQorKyAgICBdLCBbCisrICAgICAgQU1fQ09ORElUSU9OQUwoV0lUSF9EQlNRTCwgWyBmYWxzZSBdKQorKyAgICBdKQorK2Vsc2UKKytBTV9DT05ESVRJT05BTChXSVRIX0RCU1FMLCBbIGZhbHNlIF0pCisrZmkKKyAKKyBEQkxJQk9CSlM9YGVjaG8gJERCTElCU1JDUyB8IHNlZCAtZSAicy9cLmMvXC5sby9nImAKKyAKKyBBQ19TVUJTVChEQkxJQlNSQ1MpCisgQUNfU1VCU1QoREJMSUJPQkpTKQorIAorK0FDX1BBVEhfUFJPRyhfX0RCX0FSQ0hJVkUsICR7REJYWX1fYXJjaGl2ZSwgJXtfYmluZGlyfS8ke0RCWFl9X2FyY2hpdmUsICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfQ0hFQ0tQT0lOVCwgJHtEQlhZfV9jaGVja3BvaW50LCAle19iaW5kaXJ9LyR7REJYWX1fY2hlY2twb2ludCwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9ERUFETE9DSywgJHtEQlhZfV9kZWFkbG9jaywgJXtfYmluZGlyfS8ke0RCWFl9X2RlYWRsb2NrLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX0RVTVAsICR7REJYWX1fZHVtcCwgJXtfYmluZGlyfS8ke0RCWFl9X2R1bXAsICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfSE9UQkFDS1VQLCAke0RCWFl9X2hvdGJhY2t1cCwgJXtfYmluZGlyfS8ke0RCWFl9X2hvdGJhY2t1cCwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9MT0FELCAke0RCWFl9X2xvYWQsICV7X2JpbmRpcn0vJHtEQlhZfV9sb2FkLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX0xPR19WRVJJRlksICR7REJYWX1fbG9nX3ZlcmlmeSwgJXtfYmluZGlyfS8ke0RCWFl9X2xvZ192ZXJpZnksICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfUFJJTlRMT0csICR7REJYWX1fcHJpbnRsb2csICV7X2JpbmRpcn0vJHtEQlhZfV9wcmludGxvZywgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9SRUNPVkVSLCAke0RCWFl9X3JlY292ZXIsICV7X2JpbmRpcn0vJHtEQlhZfV9yZWNvdmVyLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX1JFUExJQ0FURSwgJHtEQlhZfV9yZXBsaWNhdGUsICV7X2JpbmRpcn0vJHtEQlhZfV9yZXBsaWNhdGUsICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJTUUwsICR7REJYWX1zcWwsICV7X2JpbmRpcn0vJHtEQlhZfXNxbCwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9TUUxfQ09ERUdFTiwgJHtEQlhZfV9zcWxfY29kZWdlbiwgJXtfYmluZGlyfS8ke0RCWFl9X3NxbF9jb2RlZ2VuLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX1NUQVQsICR7REJYWX1fc3RhdCwgJXtfYmluZGlyfS8ke0RCWFl9X3N0YXQsICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfVFVORVIsICR7REJYWX1fdHVuZXIsICV7X2JpbmRpcn0vJHtEQlhZfV90dW5lciwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9VUEdSQURFLCAke0RCWFl9X3VwZ3JhZGUsICV7X2JpbmRpcn0vJHtEQlhZfV91cGdyYWRlLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX1ZFUklGWSwgJHtEQlhZfV92ZXJpZnksICV7X2JpbmRpcn0vJHtEQlhZfV92ZXJpZnksICRNWVBBVEgpCisrCisgQUNfQVJHX1dJVEgoZGItbGFyZ2VmaWxlLCBBU19IRUxQX1NUUklORyhbLS13aXRoLWRiLWxhcmdlZmlsZV0sIFtidWlsZCBCZXJrZWxleS1EQiB3aXRoIExBUkdFRklMRSBzdXBwb3J0XSkpCisgQUNfQVJHX1dJVEgoZGItbXV0ZXgsICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWRiLW11dGV4PUFSR10sIFtidWlsZCBCZXJrZWxleS1EQiB3aXRoIE1VVEVYIHR5cGUgQVJHXSkpCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kYl9idWZmZXJfc21hbGwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kYl9idWZmZXJfc21hbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZiOGUzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRiX2J1ZmZlcl9zbWFsbC5wYXRjaApAQCAtMCwwICsxLDc3IEBACitJbiBjZXJ0YWluIGNhc2VzIHdpdGggQmVya2xleURCIDUuMy54IHdlIGFyZSBnZXR0aW5nIHRoZSBlcnJvcjoKKworZGIzLmM6MTQ0MzogZGJjdXJzb3ItPnBnZXQoLTMwOTk5KTogQkRCMDA2MyBEQl9CVUZGRVJfU01BTEw6IFVzZXIgbWVtb3J5IHRvbyBzbWFsbCBmb3IgcmV0dXJuIHZhbHVlCisKK1NlZSBodHRwczovL2J1Z3MubGF1bmNocGFkLm5ldC9ycG0vK2J1Zy85MzQ0MjAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK0l0IGFwcGVhcnMgdG8gYmUgc29tZSB0eXBlIG9mIGEgYnVnIGluIHRoZSBCZXJrbGV5REIgNS4zLnguICBJbiBhbiBhdHRlbXB0Cit0byB3b3JrYXJvdW5kIHRoZSBwcm9ibGVtLCB3aGVuIHdlIGVuY291bnRlciB0aGlzIHNpdHVhdGlvbiB3ZSBhdHRlbXB0Cit0byBhZGp1c3QgdGhlIHNpemUgb2YgdGhlIG1tYXAgYnVmZmVyIHVudGlsIHRoZSBjYWxsIHdvcmtzLCBvciB3ZQorZW5kIHVwIHRyeWluZyAxMCB0aW1lcy4gIFRoZSBuZXcgc2l6ZSBpcyBlaXRoZXIgdGhlIHVwZGF0ZWQgdnAtPnNpemUKK2Zyb20gdGhlIGZhaWxlZCBwZ2V0IGNhbGwsIG9yIHRoZSBwcmV2aW91cyBzaXplICsgMTAyNC4KKworSWYgREJJIGRlYnVnZ2luZyBpcyBlbmFibGVkLCBhZGRpdGlvbmFsIGRpYWdub3N0aWNzIGFyZSBwcmludGVkLCBvdGhlcndpc2UKK2EgYmFzaWMgcmV0cnkgYW5kIHN1Y2Nlc3MgbWVzc2FnZSBpcyBhZGRlZCB0byBzaG93IHRoYXQgdGhlIGZhaWx1cmUgd2FzCityZXNvbHZlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlICh3b3JrYXJvdW5kKQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L3JwbWRiL3JwbWRiLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtZGIvcnBtZGIuYworKysrIHJwbS01LjQuMTQvcnBtZGIvcnBtZGIuYworQEAgLTIyMTIsOCArMjIxMiwxMiBAQCBzdGF0aWMgaW50IHJwbW1pR2V0KGRiaUluZGV4IGRiaSwgREJDICoKKyAJdnAtPmZsYWdzIHw9IERCX0RCVF9VU0VSTUVNOworIAlyYyA9IGRiaUdldChkYmksIGRiY3Vyc29yLCBrcCwgdnAsIGZsYWdzKTsKKyAJaWYgKHJjID09IERCX0JVRkZFUl9TTUFMTCkgeworKwkgICAgaW50IHJldHJ5ID0gMDsKKysJICAgIHNpemVfdCBvcmlnbGVuID0gdnAtPnNpemU7CisgCSAgICBzaXplX3QgdWhsZW4gPSB2cC0+c2l6ZTsKKy0JICAgIHZvaWQgKiB1aCA9IG1tYXAoTlVMTCwgdWhsZW4sIF9wcm90LCBfZmxhZ3MsIF9mZG5vLCBfb2ZmKTsKKysJICAgIHZvaWQgKiB1aDsKKytyZXRyeV9nZXQ6CisrCSAgICB1aCA9IG1tYXAoTlVMTCwgdWhsZW4sIF9wcm90LCBfZmxhZ3MsIF9mZG5vLCBfb2ZmKTsKKyAJICAgIGlmICh1aCA9PSBOVUxMIHx8IHVoID09ICh2b2lkICopLTEpCisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJCSAgICAiPT0+IG1tYXAoJXBbJXVdLCAweCV4LCAweCV4LCAlZCwgMHgleCkgZXJyb3IoJWQpOiAlc1xuIiwKK0BAIC0yMjM1LDYgKzIyMzksMjUgQEAgc3RhdGljIGludCBycG1taUdldChkYmlJbmRleCBkYmksIERCQyAqCisgCQlpZiAobXVubWFwKHVoLCB1aGxlbikgIT0gMCkKKyAJCSAgICBmcHJpbnRmKHN0ZGVyciwgIj09PiBtdW5tYXAoJXBbJXVdKSBlcnJvciglZCk6ICVzXG4iLAorICAgICAgICAgICAgICAgICAJdWgsICh1bnNpZ25lZCl1aGxlbiwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisrCSAgICAgICAgLyogV2Ugd2FudCB0byBiZSBzdXJlIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgcmV0cnkgYXR0ZW1wdHMgdG8gYXZvaWQgYSBsb29wISAqLworKwkgICAgICAgIGlmIChyYyA9PSBEQl9CVUZGRVJfU01BTEwgJiYgcmV0cnkgPCAxMCkgeworKwkJICAgLyogSWYgd2UgZ290IGEgbGFyZ3IgdnAtc2l6ZSBiYWNrLCB1c2UgdGhhdCwgb3RoZXJ3aXNlIGluY3JlbWVudCB0aGUgc2l6ZSBieSAxayAqLworKwkgICAgICAgICAgIHVobGVuID0gdnAtPnNpemUgPiB1aGxlbiA/IHZwLT5zaXplIDogdWhsZW4gKyAxMDI0OworKwkJICAgcmV0cnkrKzsKKysJICAgICAgICAgICBpZiAoKGRiaSktPmRiaV9kZWJ1ZykKKysJICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICI9PT4gREJfQlVGRkVSX1NNQUxMIG9yaWcgcmVxdWVzdGVkICglZCksIGNvbmZpZ3VyZWQgKCVkKSwgZm9yY2luZyBsYXJnZXIgYnVmZmVyICglZCksIG5ldyBzaXplICglZClcbiIsCisrCSAgICAgICAgICAgICAgICAgICAgb3JpZ2xlbiwgdnAtPnVsZW4sIHVobGVuLCB2cC0+c2l6ZSk7CisrCSAgICAgICAgICAgZWxzZQorKwkgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIj09PiByZXRyeSAoJWQpIGRiM2NwZ2V0ICglZClcbiIsIHJldHJ5LCB1aGxlbik7CisrCSAgICAgICAgICAgZ290byByZXRyeV9nZXQ7CisrCSAgICAgICAgfQorKwkgICAgfQorKwkgICAgaWYgKHJldHJ5KSB7CisrCSAgICAgICAgaWYgKChkYmkpLT5kYmlfZGVidWcpCisrCSAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICI9PT4gc3VjY2VzcyBvcmlnIHJlcXVlc3RlZCAoJWQpLCBjb25maWd1cmVkIGJ1ZmZlciAoJWQpLCBidWZmZXIgKCVkKSwgc2l6ZSBhZnRlciBkYmlHZXQgKCVkKVxuIiwKKysJCQlvcmlnbGVuLCB2cC0+dWxlbiwgdWhsZW4sIHZwLT5zaXplKTsKKysJICAgICAgICBlbHNlCisrCSAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICI9PT4gc3VjY2Vzc1xuIik7CisgCSAgICB9CisgCX0KKyAgICAgfSBlbHNlCitJbmRleDogcnBtLTUuNC4xNC9ycG1kYi9kYjMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1kYi9kYjMuYworKysrIHJwbS01LjQuMTQvcnBtZGIvZGIzLmMKK0BAIC0xNTA5LDcgKzE1MDksNyBAQCBhc3NlcnQoZGIgIT0gTlVMTCk7CisgI2VuZGlmCisgICAgIH0KKyAKKy1EQklERUJVRyhkYmksIChzdGRlcnIsICI8LS0gJXMoJXAsJXAsJXAsJXAsJXAsMHgleCkgcmMgJWQgJXMlc1xuIiwgX19GVU5DVElPTl9fLCBkYmksIGRiY3Vyc29yLCBrZXksIHBrZXksIGRhdGEsIGZsYWdzLCByYywgX0RCQ0ZMQUdTKGZsYWdzKSwgX0tFWURBVEEoa2V5LCBwa2V5LCBkYXRhLCBOVUxMKSkpOworK0RCSURFQlVHKGRiaSwgKHN0ZGVyciwgIjwtLSAlcyglcCwlcCwlcCwlcCwlcCwweCV4KSByYyAlZCAlcyVzXG4iLCBfX0ZVTkNUSU9OX18sIGRiaSwgZGJjdXJzb3IsIGtleSwgcGtleSwgZGF0YSwgZmxhZ3MsIHJjLCBfREJDRkxBR1MoZmxhZ3MpLCBfS0VZREFUQShrZXksIHBrZXksIHJjID09IERCX0JVRkZFUl9TTUFMTCA/IE5VTEwgOiBkYXRhLCBOVUxMKSkpOworICAgICByZXR1cm4gcmM7CisgfQorIC8qQD1tdXN0bW9kQCovCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kZWJ1Zy1wbGF0Zm9ybS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRlYnVnLXBsYXRmb3JtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYjZlMGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kZWJ1Zy1wbGF0Zm9ybS5wYXRjaApAQCAtMCwwICsxLDY1IEBACitEZWJ1ZyB0aGUgcGxhdGZvcm0gc2NvcmUgZ2VuZXJhdGlvbi4uLgorCitJbmRleDogcnBtLTUuNC4xNC9saWIvcnBtcmMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvcnBtcmMuYworKysrIHJwbS01LjQuMTQvbGliL3JwbXJjLmMKK0BAIC00NjUsNiArNDY1LDggQEAgc3RhdGljIHJwbVJDIHJwbVBsYXRmb3JtKGNvbnN0IGNoYXIgKiBwbAorIAorICAgICByYyA9IChycG1SQykgcnBtaW9iU2x1cnAocGxhdGZvcm0sICZpb2IpOworIAorKyAgICBmcHJpbnRmKHN0ZGVyciwgIkQ6IHJwbVBsYXRmb3JtIGZpbGUgJXNcbiIsIHBsYXRmb3JtKTsKKysKKyAgICAgaWYgKHJjIHx8IGlvYiA9PSBOVUxMKSB7CisgCXJjID0gUlBNUkNfRkFJTDsKKyAJZ290byBleGl0OworQEAgLTQ4Niw2ICs0ODgsNyBAQCBzdGF0aWMgcnBtUkMgcnBtUGxhdGZvcm0oY29uc3QgY2hhciAqIHBsCisgCSAgICB3aGlsZSAoLS10ID4gcCAmJiB4aXNzcGFjZSgqdCkpCisgCQkqdCA9ICdcMCc7CisgCSAgICBpZiAodCA+IHApIHsKKysJCWZwcmludGYoc3RkZXJyLCAiRDogcnBtUGxhdGZvcm0gbWlyZUFwcGVuZCBSRUdFWCAlc1xuIiwgcCk7CisgCQl4eCA9IG1pcmVBcHBlbmQoUlBNTUlSRV9SRUdFWCwgMCwgcCwgTlVMTCwgJm1pX3JlLCAmbWlfbnJlKTsKKyAJICAgIH0KKyAJICAgIGNvbnRpbnVlOworQEAgLTUwMyw2ICs1MDYsMTEgQEAgc3RhdGljIHJwbVJDIHJwbVBsYXRmb3JtKGNvbnN0IGNoYXIgKiBwbAorIAkJX2dudSA9IHJwbUV4cGFuZCgiLSIsIGN2b2ctPmdudSwgTlVMTCk7CisgCisgCSAgICBhZGRNYWNybyhOVUxMLCAiX3BsYXRmb3JtX2dudSIsIE5VTEwsIChfZ251ID8gX2dudSA6ICIiKSwgLTEpOworKwkgICAgZnByaW50ZihzdGRlcnIsICJEOiBycG1QbGF0Zm9ybSBhZGRNYWNybyAlcy0lcy0lcyglcylcbiIsCisrCSAgICAJcnBtRXhwYW5kKCIle19wbGF0Zm9ybV9jcHV9IiwgTlVMTCksCisrCQlycG1FeHBhbmQoIiV7X3BsYXRmb3JtX3ZlbmRvcn0iLCBOVUxMKSwKKysJCXJwbUV4cGFuZCgiJXtfcGxhdGZvcm1fb3N9IiwgTlVMTCksCisrCQlycG1FeHBhbmQoIiV7X3BsYXRmb3JtX2dudX0iLCBOVUxMKSk7CisgI2Vsc2UKKyAJICAgIGFkZE1hY3JvKE5VTEwsICJfaG9zdF9jcHUiLCBOVUxMLCBjdm9nLT5jcHUsIC0xKTsKKyAJICAgIGFkZE1hY3JvKE5VTEwsICJfaG9zdF92ZW5kb3IiLCBOVUxMLCBjdm9nLT52ZW5kb3IsIC0xKTsKK0BAIC01MTAsNiArNTE4LDcgQEAgc3RhdGljIHJwbVJDIHJwbVBsYXRmb3JtKGNvbnN0IGNoYXIgKiBwbAorICNlbmRpZgorIAl9CisgCisrCWZwcmludGYoc3RkZXJyLCAiRDogcnBtUGxhdGZvcm0gbWlyZUFwcGVuZCBTVFJDTVAgJXMgLS0gIiwgcCk7CisgI2lmICFkZWZpbmVkKFJQTV9WRU5ET1JfT0UpIC8qIFNraXAgdGhlIGV4cGxpY2l0LXBsYXRmb3JtICovCisgI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9PUEVOUEtHKSAvKiBleHBsaWNpdC1wbGF0Zm9ybSAqLworIAkvKiBkbyBub3QgdXNlIHZlbmRvciBhbmQgR05VIGF0dHJpYnV0aW9uICovCitAQCAtNTE5LDYgKzUyOCw3IEBAIHN0YXRpYyBycG1SQyBycG1QbGF0Zm9ybShjb25zdCBjaGFyICogcGwKKyAJCShjdm9nICYmICpjdm9nLT5nbnUgPyAiLSIgOiBOVUxMKSwKKyAJCShjdm9nID8gY3ZvZy0+Z251IDogTlVMTCksIE5VTEwpOworICNlbmRpZgorKwlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBwKTsKKyAJeHggPSBtaXJlQXBwZW5kKFJQTU1JUkVfU1RSQ01QLCAwLCBwLCBOVUxMLCAmbWlfcmUsICZtaV9ucmUpOworIAlwID0gX2ZyZWUocCk7CisgI2VuZGlmCitAQCAtNjg4LDkgKzY5OCwxMiBAQCBpbnQgcnBtUGxhdGZvcm1TY29yZShjb25zdCBjaGFyICogcGxhdGZvCisgCisgICAgIGlmICgobWlyZSA9IChtaVJFKSBtaV9yZSkgIT0gTlVMTCkKKyAgICAgZm9yIChpID0gMDsgaSA8IG1pX25yZTsgaSsrKSB7CistCWlmIChtaXJlUmVnZXhlYyhtaXJlICsgaSwgcGxhdGZvcm0sIDApID49IDApCisrCWlmIChtaXJlUmVnZXhlYyhtaXJlICsgaSwgcGxhdGZvcm0sIDApID49IDApIHsKKysJICAgIGZwcmludGYoc3RkZXJyLCAiRDogcnBtUGxhdGZvcm1TY29yZSAlcyAoJWQpXG4iLCBwbGF0Zm9ybSwgaSArIDEpOworIAkgICAgcmV0dXJuIChpICsgMSk7CisrCX0KKyAgICAgfQorKyAgICBmcHJpbnRmKHN0ZGVyciwgIkQ6IHJwbVBsYXRmb3JtU2NvcmUgJXMgKCVkKVxuIiwgcGxhdGZvcm0sIDApOworICAgICByZXR1cm4gMDsKKyB9CisgLypAPW9ubHl0cmFuc0AqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGlzYWJsZS1Xbm8tb3ZlcnJpZGUtaW5pdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRpc2FibGUtV25vLW92ZXJyaWRlLWluaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1ZjhkNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRpc2FibGUtV25vLW92ZXJyaWRlLWluaXQucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSA3MGQ4ODE4NzNiNDQzYzliYWQ1MDJkYjk2NjU1OTU0NTVkNGYwYWM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDggSnVsIDIwMTQgMDc6NDE6MTAgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlLmFjOiBkaXNhYmxlIC1Xbm8tb3ZlcnJpZGUtaW5pdAorCitGaXhlZCBycG0tbmF0aXZlLmRvX2NvbmZpZ3VyZSBlcnJvciBvbiBDZW50T1MgNS54OgorCitjYzE6IGVycm9yOiB1bnJlY29nbml6ZWQgY29tbWFuZCBsaW5lIG9wdGlvbiAiLVduby1vdmVycmlkZS1pbml0IgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGFkZWZmZTAuLjY3NDZiNGMgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE2Myw3ICsxNjMsNyBAQCBBQ19BUkdfRU5BQkxFKGJ1aWxkLXdhcm5pbmdzLAorICMgWFhYIGdjYy00LjIgb24gTWFjIE9TIFggaGFzbid0CisgIyAgICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtV25vLXVudXNlZC1idXQtc2V0LXZhcmlhYmxlIgorICMgWFhYIHJwbWlvL3NldC5jIG5lZWRzIHRoaXMKKy0gICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLVduby1vdmVycmlkZS1pbml0IgorKyMgICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLVduby1vdmVycmlkZS1pbml0IgorICAgICAgICAgZWxpZiB0ZXN0ICIuYCRDQyAtViAyPiYxIHwgZ3JlcCAnU3VuIEMnYCIgIT0gLjsgdGhlbgorICAgICAgICAgICAgIGRubCAjIFN1biBTdHVkaW8gKHVzdWFsbHkgImNjIikKKyAgICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLXYiCistLQorMS44LjIuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1maWxlY2xhc3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1maWxlY2xhc3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFkYjZmZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWZpbGVjbGFzcy5wYXRjaApAQCAtMCwwICsxLDM2IEBACitycG1mYy5jOiAgQWx3YXlzIGdlbmVyYXRlIHBlci1maWxlIGluZm9ybWF0aW9uCisKK0V2ZW4gd2hlbiB0aGUgcGVyLWZpbGUgZGVwZW5kZW5jeSBnZW5lcmF0ZSBpcyBkaXNhYmxlZCwgd2Ugd2FudCB0byBnZW5lcmF0ZQorcGVyIGZpbGUgY2xhc3NpZmljYXRpb24gYW5kIG90aGVyIGFzc29jaWF0ZWQgZGF0YS4KKworTm90ZTogdGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kLiAgRXZlbnR1YWxseSB3ZSB3aWxsIHdhbnQgdG8gaGF2ZSBhIHdheQordG8gc2VlZCBwZXItZmlsZSBkZXBlbmRlbmN5IGFuZCBvdGhlciBpbmZvcm1hdGlvbiBpbiBvcmRlciB0byBnZW5lcmF0ZSBhCitwYWNrYWdlIGZyb20gcHJldmlvdXNseSBkZXRlcm1pbmVkIGluZm9ybWF0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9saWIvcnBtZmMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvcnBtZmMuYworKysrIHJwbS01LjQuMTQvbGliL3JwbWZjLmMKK0BAIC0xNzM0LDcgKzE3MzQsNiBAQCBycG1SQyBycG1mY0dlbmVyYXRlRGVwZW5kcyh2b2lkICogX3NwZWMsCisgCS8qIC4uLiB0aGVuIGdlbmVyYXRlIGRlcGVuZGVuY2llcyB1c2luZyAle19fZmluZF9yZXF1aXJlc30gZXQgYWwuICovCisgCXJjID0gcnBtZmNHZW5lcmF0ZURlcGVuZHNIZWxwZXIoc3BlYywgcGtnLCBmaSk7CisgCXByaW50RGVwcyhwa2ctPmhlYWRlcik7CistCXJldHVybiByYzsKKyAgICAgfQorIAorICAgICAvKiBHZW5lcmF0ZSBzY3JpcHRsZXQgRGVwZW5kZW5jaWVzLiAqLworQEAgLTE3NjIsOCArMTc2MSw4IEBAIHJwbVJDIHJwbWZjR2VuZXJhdGVEZXBlbmRzKHZvaWQgKiBfc3BlYywKKyAgICAgYXZbYWNdID0gTlVMTDsKKyAKKyAgICAgZmMgPSBycG1mY05ldygpOworLSAgICBmYy0+c2tpcFByb3YgPSAhcGtnLT5hdXRvUHJvdjsKKy0gICAgZmMtPnNraXBSZXEgPSAhcGtnLT5hdXRvUmVxOworKyAgICBmYy0+c2tpcFByb3YgPSAhcGtnLT5hdXRvUHJvdiB8fCAhaW50ZXJuYWxkZXBzOworKyAgICBmYy0+c2tpcFJlcSA9ICFwa2ctPmF1dG9SZXEgfHwgIWludGVybmFsZGVwczsKKyAgICAgZmMtPnRyYWNrZWQgPSAwOworIAorICAgICB7CWNvbnN0IGNoYXIgKiBidWlsZFJvb3RVUkw7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1maXgtbG9naW8tY3AucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1maXgtbG9naW8tY3AucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdhMGE4ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWZpeC1sb2dpby1jcC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitPY2Nhc2lvbmFsbHkgdGhlIGNwIC1wIGZhaWxzIHdpdGggYSBub24temVybyByZXR1cm4gY29kZS4gIFRoaXMgd2lsbCBjYXVzZQordGhlIHN5c3RlbSBhYm9ydCB0aGUgYnVpbGQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0vcnBtZGIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0ub3JpZy9ycG1kYi9NYWtlZmlsZS5hbQorKysrIHJwbS9ycG1kYi9NYWtlZmlsZS5hbQorQEAgLTIzNCwxMSArMjM0LDE0IEBAIGxjb3YtcmVwb3J0OgorICNsY292LXVwbG9hZDogbGNvdgorICMJcnN5bmMgLXJ2eiAtZSBzc2ggLS1kZWxldGUgbGNvdi8qID8/PworIAorKyQoYnVpbGRkaXIpL2xvZ2lvX3JlY292ZXJfdGVtcGxhdGU6ICQoc3JjZGlyKS9sb2dpb19yZWNvdmVyX3RlbXBsYXRlCisrCUBpZiB0ZXN0ICIuJChidWlsZGRpcikiICE9ICIuJChzcmNkaXIpIjsgdGhlbiBcCisrCQljcCAtZnAgJChzcmNkaXIpL2xvZ2lvX3JlY292ZXJfdGVtcGxhdGUgXAorKwkJICAgICAgJChidWlsZGRpcikvbG9naW9fcmVjb3Zlcl90ZW1wbGF0ZSA7IFwKKysJIGZpCisrCisgbG9naW9fQlVJTFQgPSBsb2dpb19hdXRvLmMgbG9naW9fYXV0b3AuYyBsb2dpb19hdXRvLmggbG9naW9fdGVtcGxhdGUKKy0kKGxvZ2lvX0JVSUxUKToJbG9naW8uYXdrIGxvZ2lvLnNyYyBsb2dpb19yZWNvdmVyX3RlbXBsYXRlCistCUB0ZXN0IC1lICQoYnVpbGRkaXIpL2xvZ2lvX3JlY292ZXJfdGVtcGxhdGUgfHwgXAorLQkJY3AgLXAgJChzcmNkaXIpL2xvZ2lvX3JlY292ZXJfdGVtcGxhdGUgXAorLQkJICAgICAgJChidWlsZGRpcikvbG9naW9fcmVjb3Zlcl90ZW1wbGF0ZQorKyQobG9naW9fQlVJTFQpOglsb2dpby5hd2sgbG9naW8uc3JjICQoYnVpbGRkaXIpL2xvZ2lvX3JlY292ZXJfdGVtcGxhdGUKKyAJQHJtIC1mICQobG9naW9fQlVJTFQpCisgCUAkKEFXSykgLWYgJChzcmNkaXIpL2xvZ2lvLmF3ayBcCisgCQktdiBoZWFkZXJfZmlsZT1sb2dpb19hdXRvLmggXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0taGFyZGxpbmstc2VnZmF1bHQtZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0taGFyZGxpbmstc2VnZmF1bHQtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZWIyMzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1oYXJkbGluay1zZWdmYXVsdC1maXgucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorV2UgbmVlZCB0byBzYW5pdHkgY2hlY2sgdGhhdCB0aGUgbmxpbmsgc2l6ZSBhbmQgb3VyIGxpbmtzTGVmdCBjb3VudGVyCitkbyBtYXRjaC4gSWYgYW4gcnBtIGlzIGJhZGx5IGNvbnN0cnVjdGVkIHdpdGggaWRlbnRpY2FsIGlub2RlIHZhbHVlcworZm9yIG11bHRpcGxlIGhhcmRsaW5rZWQgZmlsZXMsIHN1Y2ggYW4gcnBtIHdpbGwgb3RoZXJ3aXNlIGFjY2VzcyBtZW1vcnkKK291dCBvZiBhcnJheSBib3VuZHMgYW5kIGNhdXNlIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBjcmFzaGVzLgorCitUaGUgZml4IGlzIHRvIGFkZCBpbiB0aGUgc2FuaXR5IGNoZWNrIGFuZCBleGl0IGlmIGJhZCBjaXJjdW1zdGFuY2VzCithcmUgZm91bmQuIFdlIG5lZWQgdG8gZml4IHRoZSBjYWxsZXIgdG8gY2hlY2sgdGhlIHJldHVybiBjb2RlIHRvby4KKworUlAgMjAxNC82LzEwCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogcnBtLTUuNC4xNC9saWIvZnNtLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL2ZzbS5jCisrKysgcnBtLTUuNC4xNC9saWIvZnNtLmMKK0BAIC00OTUsNiArNDk1LDExIEBAIHN0YXRpYyBpbnQgc2F2ZUhhcmRMaW5rKC8qQHNwZWNpYWxAKi8gLyoKKyAgICAgfQorIAorICAgICBpZiAoZnNtLT5nb2FsID09IElPU01fUEtHQlVJTEQpIC0tZnNtLT5saS0+bGlua3NMZWZ0OworKyAgICBpZiAoZnNtLT5saS0+bGlua3NMZWZ0ID4gc3QtPnN0X25saW5rKSB7CisrCXJwbWxvZyhSUE1MT0dfRVJSLCBfKCJDb3JydXB0ZWQgaGFyZGxpbmtzIGZvdW5kIChjb3VudCAlZCBkb2VzIG5vdCBtYXRjaCAlZCksIGV4aXRpbmcuXG4iKSwgZnNtLT5saS0+bGlua3NMZWZ0LCBzdC0+c3RfbmxpbmspOworKwlyZXR1cm4gLTE7CisrICAgIH0KKysKKyAgICAgZnNtLT5saS0+ZmlsZXhbZnNtLT5saS0+bGlua3NMZWZ0XSA9IGZzbS0+aXg7CisgICAgIC8qQC1vYnNlcnZlcnRyYW5zIC1kZXBlbmRlbnR0cmFuc0AqLworICAgICBmc20tPmxpLT5uc3VmZml4W2ZzbS0+bGktPmxpbmtzTGVmdF0gPSBmc20tPm5zdWZmaXg7CitAQCAtMTg3OCw4ICsxODgzLDEzIEBAIGlmICghKGZzbUdldEZpKGZzbSktPm1hcGZsYWdzICYgSU9TTV9QQVkKKyAJZnNtLT5wb3N0cG9uZSA9IGlvc21GaWxlQWN0aW9uU2tpcHBlZChmc20tPmFjdGlvbik7CisgCWlmIChmc20tPmdvYWwgPT0gSU9TTV9QS0dJTlNUQUxMIHx8IGZzbS0+Z29hbCA9PSBJT1NNX1BLR0JVSUxEKSB7CisgCSAgICAvKkAtZXZhbG9yZGVyQCovIC8qIEZJWDogc2F2ZUhhcmRMaW5rIGNhbiBtb2RpZnkgZnNtICovCistCSAgICBpZiAoU19JU1JFRyhzdC0+c3RfbW9kZSkgJiYgc3QtPnN0X25saW5rID4gMSkKKysJICAgIGlmIChTX0lTUkVHKHN0LT5zdF9tb2RlKSAmJiBzdC0+c3RfbmxpbmsgPiAxKSB7CisgCQlmc20tPnBvc3Rwb25lID0gc2F2ZUhhcmRMaW5rKGZzbSk7CisrCQlpZiAoZnNtLT5wb3N0cG9uZSA8IDApIHsKKysJCSAgICByYyA9IFJQTVJDX0ZBSUw7CisrCQkgICAgYnJlYWs7CisrCQl9CisrCSAgICB9CisgCSAgICAvKkA9ZXZhbG9yZGVyQCovCisgCX0KKyBpZiAoZnNtR2V0RmkoZnNtKS0+bWFwZmxhZ3MgJiBJT1NNX1BBWUxPQURfTElTVCkgZnNtLT5wb3N0cG9uZSA9IDE7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1saWJzcWwtZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbGlic3FsLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDJlNDEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbGlic3FsLWZpeC5wYXRjaApAQCAtMCwwICsxLDIyIEBACitEdXJpbmcgaW5zdGFsbGF0aW9uLCB0aGUgbGlidG9vbCByZWxpbmsgYXR0ZW1wdHMgdG8gbGluayB0byAtbHJwbS4uLgorVGhlIHByb2JsZW0gaXMgdGhhdCBpdCBoYXNuJ3QgYmVlbiBpbnN0YWxsZWQgeWV0ISAgU28gc21hbGwgY2hhbmdlIGNhdXNlcwordGhlIGxpYnRvb2wgdG8gaW5zdGVhZCB1c2UgdGhlIGJ1aWxkIHZlcnNpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvTWFrZWZpbGUuYW0KKysrKyBycG0tNS40LjE0L2xpYi9NYWtlZmlsZS5hbQorQEAgLTEyMCw2ICsxMjAsOSBAQCBsaWJycG0ubGE6ICQobGlicnBtX2xhX09CSkVDVFMpICQobGlicnBtCisgI2xpYnNxbF9sYV9TT1VSQ0VTCT0gbGlic3FsLmMKKyAjbGlic3FsX2xhX0xJQkFERAk9IGxpYnJwbS5sYSAkKFJQTURCX0xEQUREX0NPTU1PTikKKyAKKysjIHBrZ2xpYiBsaWJyYXJpZXMgbmVlZHMgdG8gaGF2ZSB1c3JsaWIgbGlicmFyaWVzIGFscmVhZHkgaW5zdGFsbGVkIQorK2luc3RhbGwtcGtnbGliTFRMSUJSQVJJRVM6IGluc3RhbGwtdXNybGliTFRMSUJSQVJJRVMKKysKKyBpbnN0YWxsLWRhdGEtaG9vazoKKyBpZiAhRU5BQkxFX0JVSUxEX0xBRklMRVMKKyAJLWZvciBsIGluICQodXNybGliX0xUTElCUkFSSUVTKTsgZG8gXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbG9nLWF1dG8tcm0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1sb2ctYXV0by1ybS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTUzZjdhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbG9nLWF1dG8tcm0ucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBycG0tNS40LjE0L3JwbWRiL0RCX0NPTkZJRy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1kYi9EQl9DT05GSUcuaW4KKysrKyBycG0tNS40LjE0L3JwbWRiL0RCX0NPTkZJRy5pbgorQEAgLTQsNiArNCw3IEBAIHNldF9kYXRhX2RpciAuCisgc2V0X2NyZWF0ZV9kaXIgLgorIHNldF9sZ19kaXIgLi9sb2cKKyBzZXRfdG1wX2RpciAuL3RtcAorK3NldF9mbGFncyBkYl9sb2dfYXV0b3JlbW92ZSBvbgorIAorICMgLS0gdGhyZWFkX2NvdW50IG11c3QgYmUgPj0gOAorIHNldF90aHJlYWRfY291bnQgNjQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWxzYi1jb21wYXRpYmlsaXR5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbHNiLWNvbXBhdGliaWxpdHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkwYTY2MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWxzYi1jb21wYXRpYmlsaXR5LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK0VuYWJsZSBwbGF0Zm9ybSB0YWcgbWF0Y2hpbmcgd29ya2Fyb3VuZCBpbiBPRS4KKworV2hlbiBpbnN0YWxsaW5nIHNvbWUgTFNCIHBhY2thZ2VzIHRoZSAncGxhdGZvcm0nIGZpZWxkIGluIHRoZSBwYWNrYWdlCithcHBlYXJzIHRvIGJlIGludmFsaWQuICBJbnN0ZWFkIG9mIHJlbHlpbmcgc29sZWx5IG9uIHRoZSBwbGF0Zm9ybSBjb21wYXJpc29uCit3ZSBhbHNvIHdhbnQgdG8gZ2VuZXJhdGUgYSBwZXJjZWl2ZWQgcGxhdGZvcm0gYmFzZWQgb24gdGhlIHZhbGlkIHJwbSBjb250ZW50cworb2YgYXJjaCBhbmQgb3MuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9kZXBlbmRzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL2RlcGVuZHMuYworKysrIHJwbS01LjQuMTQvbGliL2RlcGVuZHMuYworQEAgLTU5NSw3ICs1OTUsNyBAQCBpbnQgcnBtdHNBZGRJbnN0YWxsRWxlbWVudChycG10cyB0cywgSGVhCisgCSAgICBwbGF0Zm9ybSA9IHJwbUV4cGFuZChhcmNoLCAiLXVua25vd24tIiwgb3MsIE5VTEwpOworIAorIAlyYyA9IHJwbVBsYXRmb3JtU2NvcmUocGxhdGZvcm0sIHBsYXRwYXQsIG5wbGF0cGF0KTsKKy0jaWYgZGVmaW5lZChSUE1fVkVORE9SX01BTkRSSVZBKQorKyNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfTUFORFJJVkEpIHx8IGRlZmluZWQoUlBNX1ZFTkRPUl9PRSkKKyAJLyoKKyAJICogSWYgbm8gbWF0Y2ggb24gcGxhdGZvcm0gdGFnLCB3ZSdsbCB0cnkgYWdhaW4gd2l0aCBhcmNoIHRhZworIAkgKiBpbiBjYXNlIHBsYXRmb3JtIHRhZyBpcyBpbmNvbnNpc3RlbnQgd2l0aCBpdCwgd2hpY2ggaXMgdGhlIGNhc2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWx1YS1maXgtcHJpbnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1sdWEtZml4LXByaW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYjQ5ZTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1sdWEtZml4LXByaW50LnBhdGNoCkBAIC0wLDAgKzEsMTA0IEBACitMdWEgJ3ByaW50JyBzdGF0ZW1lbnQgaXMgbm90IHdvcmtpbmcgcHJvcGVybHkgaW5zaWRlIG9mIFJQTSA1CisKK1RoZSBwcmludCBzdGF0ZW1lbnQgc2hvdWxkIGNhcHR1cmUgdGhlIG91dHB1dCBhbmQgc2VuZCBpdCB0byB0aGUgc2NyaXB0Citwcm9jZXNzaW5nIGVuZ2luZSwgYW5kIG5vdCBkaXNwbGF5IGl0IGRpcmVjdGx5IHRvIHRoZSBzY3JlZW4uCisKK1RoaXMgcGF0Y2ggaXMgZnJvbTogaHR0cDovL3JwbTUub3JnL2N2cy9wYXRjaHNldD9jbj0xNzY3MQorCitVcHN0cmVhbS1TdGF0dXM6IGJhY2twb3J0IChwYXRjaHNldCAxNzY3MSBmcm9tIHJwbTUub3JnKQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L0NIQU5HRVMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvQ0hBTkdFUworKysrIHJwbS01LjQuMTQvQ0hBTkdFUworQEAgLTEsMyArMSw0IEBACisrICAgIC0gamJqOiBsdWE6IGZpeDogcmVzdXJyZWN0IG91dHB1dCBjYXB0dXJlIHdpdGggbHVhLTUuMi4KKyAgICAgLSBqYmo6IHZlcmlmeTogZml4OiBicm9rZW4gbG9naWMgZm9yICVnaG9zdCBhdm9pZGFuY2UgKE1hcmsgSGF0bGUpLgorIAorIDUuNC4xMyAtPiA1LjQuMTQ6CitJbmRleDogcnBtLTUuNC4xNC9ycG1pby9ycG1sdWEuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1pby9ycG1sdWEuYworKysrIHJwbS01LjQuMTQvcnBtaW8vcnBtbHVhLmMKK0BAIC0xNzUsNyArMTc1LDcgQEAgcnBtbHVhIHJwbWx1YU5ldyh2b2lkKQorICAgICB9OworICAgICAvKkA9cmVhZG9ubHl0cmFucyA9bnVsbGFzc2lnbiBAKi8KKyAgICAgLypAb2JzZXJ2ZXJAKi8gLypAdW5jaGVja2VkQCovCistICAgIGNvbnN0IGx1YUxfUmVnICpsaWIgPSBsdWFsaWJzOworKyAgICBjb25zdCBsdWFMX1JlZyAqbGliOworICAgICBjaGFyICpwYXRoX2J1ZjsKKyAgICAgY2hhciAqcGF0aF9uZXh0OworICAgICBjaGFyICpwYXRoOworQEAgLTE5MCwzMSArMTkwLDM0IEBAIHJwbWx1YSBycG1sdWFOZXcodm9pZCkKKyAKKyAgICAgbHVhTF9vcGVubGlicyhMKTsKKyAKKy0gICAgZm9yICg7IGxpYi0+bmFtZTsgbGliKyspIHsKKysgICAgZm9yIChsaWIgPSBsdWFsaWJzOyBsaWItPm5hbWU7IGxpYisrKSB7CisgCWx1YUxfcmVxdWlyZWYoTCwgbGliLT5uYW1lLCBsaWItPmZ1bmMsIDEpOworKwlsdWFfcG9wKEwsIDEpOworICAgICB9CisgCisgICAgIHsJY29uc3QgY2hhciAqIF9sdWFfcGF0aCA9IHJwbUdldFBhdGgocnBtbHVhUGF0aCwgTlVMTCk7CisgIAlpZiAoX2x1YV9wYXRoICE9IE5VTEwpIHsKKysjaWYgZGVmaW5lZChMVUFfR0xPQkFMU0lOREVYKQorIAkgICAgbHVhX3B1c2hsaXRlcmFsKEwsICJMVUFfUEFUSCIpOworIAkgICAgbHVhX3B1c2hzdHJpbmcoTCwgX2x1YV9wYXRoKTsKKysJICAgIGx1YV9yYXdzZXQoTCwgTFVBX0dMT0JBTFNJTkRFWCk7CisrI2Vsc2UKKysJICAgIGx1YV9wdXNoc3RyaW5nKEwsIF9sdWFfcGF0aCk7CisrCSAgICBsdWFfc2V0Z2xvYmFsKEwsICJMVUFfUEFUSCIpOworKyNlbmRpZgorIAkgICAgX2x1YV9wYXRoID0gX2ZyZWUoX2x1YV9wYXRoKTsKKyAJfQorICAgICB9CisgCisgI2lmIGRlZmluZWQoTFVBX0dMT0JBTFNJTkRFWCkKKy0gICAgbHVhX3Jhd3NldChMLCBMVUFfR0xPQkFMU0lOREVYKTsKKy0jZWxzZQorLSAgICBsdWFfcHVzaGdsb2JhbHRhYmxlKEwpOworLSNlbmRpZgorICAgICBsdWFfcHVzaGxpdGVyYWwoTCwgInByaW50Iik7CisgICAgIGx1YV9wdXNoY2Z1bmN0aW9uKEwsIHJwbV9wcmludCk7CistCistI2lmIGRlZmluZWQoTFVBX0dMT0JBTFNJTkRFWCkKKyAgICAgbHVhX3Jhd3NldChMLCBMVUFfR0xPQkFMU0lOREVYKTsKKyAjZWxzZQorLSAgICBsdWFfcHVzaGdsb2JhbHRhYmxlKEwpOworKyAgICBsdWFfcHVzaGNmdW5jdGlvbihMLCBycG1fcHJpbnQpOworKyAgICBsdWFfc2V0Z2xvYmFsKEwsICJwcmludCIpOworICNlbmRpZgorKworICAgICBycG1sdWFTZXREYXRhKGx1YSwgImx1YSIsIGx1YSk7CisgCisgICAgIC8qIGxvYWQgYWxsIHN0YW5kYXJkIFJQTSBMdWEgc2NyaXB0IGZpbGVzICovCitAQCAtMzUxLDYgKzM1NCw5IEBAIHZvaWQgcnBtbHVhU2V0VmFyKHJwbWx1YSBfbHVhLCBycG1sdWF2IHYKKyAjaWYgZGVmaW5lZChMVUFfR0xPQkFMU0lOREVYKQorIAlpZiAobHVhLT5wdXNoc2l6ZSA9PSAwKQorIAkgICAgbHVhX3B1c2h2YWx1ZShMLCBMVUFfR0xPQkFMU0lOREVYKTsKKysjZWxzZQorKwlpZiAobHVhLT5wdXNoc2l6ZSA9PSAwKQorKwkgICAgbHVhX3B1c2hnbG9iYWx0YWJsZShMKTsKKyAjZW5kaWYKKyAJaWYgKHB1c2h2YXIoTCwgdmFyLT5rZXlUeXBlLCAmdmFyLT5rZXkpICE9IC0xKSB7CisgCSAgICBpZiAocHVzaHZhcihMLCB2YXItPnZhbHVlVHlwZSwgJnZhci0+dmFsdWUpICE9IC0xKQorQEAgLTEwMzksMTQgKzEwNDUsMTUgQEAgc3RhdGljIGludCBycG1fcHJpbnQgKGx1YV9TdGF0ZSAqTCkKKyAgICAgbHVhX2dldGdsb2JhbChMLCAidG9zdHJpbmciKTsKKyAgICAgZm9yIChpID0gMTsgaSA8PSBuOyBpKyspIHsKKyAJY29uc3QgY2hhciAqczsKKysJc2l6ZV90IGw7CisgCWx1YV9wdXNodmFsdWUoTCwgLTEpOyAgLyogZnVuY3Rpb24gdG8gYmUgY2FsbGVkICovCisgCWx1YV9wdXNodmFsdWUoTCwgaSk7ICAgLyogdmFsdWUgdG8gcHJpbnQgKi8KKyAJbHVhX2NhbGwoTCwgMSwgMSk7CistCXMgPSBsdWFfdG9zdHJpbmcoTCwgLTEpOyAgLyogZ2V0IHJlc3VsdCAqLworKwlzID0gbHVhX3RvbHN0cmluZyhMLCAtMSwgJmwpOyAgLyogZ2V0IHJlc3VsdCAqLworIAlpZiAocyA9PSBOVUxMKQorIAkgICAgcmV0dXJuIGx1YUxfZXJyb3IoTCwgImB0b3N0cmluZycgbXVzdCByZXR1cm4gYSBzdHJpbmcgdG8gYHByaW50JyIpOworIAlpZiAobHVhLT5zdG9yZXByaW50KSB7CistCSAgICBzaXplX3Qgc2wgPSBsdWFfcmF3bGVuKEwsIC0xKTsKKysJICAgIHNpemVfdCBzbCA9IGw7CisgCSAgICBpZiAoKHNpemVfdCkobHVhLT5wcmludGJ1ZnVzZWQrc2wrMSkgPiBsdWEtPnByaW50YnVmc2l6ZSkgeworIAkJbHVhLT5wcmludGJ1ZnNpemUgKz0gc2wrNTEyOworIAkJbHVhLT5wcmludGJ1ZiA9IChjaGFyICopIHhyZWFsbG9jKGx1YS0+cHJpbnRidWYsIGx1YS0+cHJpbnRidWZzaXplKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWx1YS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWx1YS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTkzMGQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbHVhLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0FkZCBzdXBwb3J0IGZvciBjcm9zcyBjb21waWxpbmcgbHVhCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9jb25maWd1cmUuYWMKKysrKyBycG0tNS40LjE0L2NvbmZpZ3VyZS5hYworQEAgLTEyMSw2ICsxMjEsOSBAQCBBQ19QUk9HX1lBQ0MKKyAKKyBBQ19QQVRIX1BST0coQVMsIGFzLCBhcykKKyAKKytDQ19GT1JfQlVJTEQ9JHtDQ19GT1JfQlVJTEQtXCQoQ0MpfQorK0FDX1NVQlNUKENDX0ZPUl9CVUlMRCkKKysKKyBkbmwgIyBHQ0Mgc3BlY2lmaWNzCisgQUNfUFJPR19HQ0NfVFJBRElUSU9OQUwKKyBBQ19BUkdfRU5BQkxFKGJ1aWxkLXBpYywKK0luZGV4OiBycG0tNS40LjE0L2x1YS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9sdWEvTWFrZWZpbGUuYW0KKysrKyBycG0tNS40LjE0L2x1YS9NYWtlZmlsZS5hbQorQEAgLTQxLDcgKzQxLDcgQEAgcnBtbHVhY19MREFERCA9IGxpYmx1YS5sYQorIAorICMgLS0tIGJpbjJjIGRvZXNuJ3QgbmVlZCBhbnl0aGluZyBidXQgYSBjb21waWxlcgorIGJpbjJjJChFWEVFWFQpOiAgYmluMmMuYworLQkkKENDKSAtbyAkQCAkPAorKwkkKENDX0ZPUl9CVUlMRCkgLW8gJEAgJDwKKyAKKyBsaWJsdWFfbGFfU09VUkNFUyA9CisgbGlibHVhX2xhX0NGTEFHUyA9IEBXSVRIX0xVQV9TVUJESVJfREVGQApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbWFjcm9zLmluLWRpc2FibGUtZXh0ZXJuYWwta2V5LXNlcnZlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW1hY3Jvcy5pbi1kaXNhYmxlLWV4dGVybmFsLWtleS1zZXJ2ZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdhMGNmYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW1hY3Jvcy5pbi1kaXNhYmxlLWV4dGVybmFsLWtleS1zZXJ2ZXIucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorZGlzYWJsZSBleHRlcm5hbCBrZXkgc2VydmVyCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXaGVuIFJQTSBleHBlcmllbmNlcyBhIHNpZ25lZCBwYWNrYWdlLCB3aXRoIGEgc2lnbmF0dXJlIHRoYXQgaXQgZG9lcyBOT1Qga25vdy4KK0J5IGRlZmF1bHQgaXQgd2lsbCBzZW5kIHRoZSAtZmluZ2VycHJpbnQtIChhbmQgb25seSB0aGUgMTYgZGlnaXQgZmluZ2VycHJpbnQpIHRvCithbiBleHRlcm5hbCBIS1Agc2VydmVyLCB0cnlpbmcgdG8gZ2V0IHRoZSBrZXkgZG93bi4KKworVGhpcyBpcyBwcm9iYWJseSBub3QgYSByZWFzb25hYmxlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIHRoZSBzeXN0ZW0gdG8gZG8sIGluc3RlYWQKK2l0IHNob3VsZCBzaW1wbHkgZmFpbCB0aGUga2V5IGxvb2t1cC4gIElmIHNvbWVvbmUgd2FudHMgdG8gZW5hYmxlIHRoZSBIS1Agc2VydmVyCitpdCdzIGVhc3kgZW5vdWdoIHRvIGRvIGJ5IGVuYWJsaW5nIHRoZSBuZWNlc3NhcnkgbWFjcm9zLgorCitTaWduZWQtb2ZmLWJ5OiB5emh1MSA8eWFuanVuLnpodUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorLS0tIGEvbWFjcm9zL21hY3Jvcy5pbgorKysrIGIvbWFjcm9zL21hY3Jvcy5pbgorQEAgLTU0Niw4ICs1NDYsOCBAQCAkX2FyYml0cmFyeV90YWdzX3Rlc3RzCUZvbzpCYXIKKyAjIEhvcm93aXR6IEtleSBQcm90b2NvbCBzZXJ2ZXIgY29uZmlndXJhdGlvbgorICMKKyAjJV9oa3Bfa2V5c2VydmVyICAgICAgICAgaGtwOi8va2V5cy5uM25wcS5uZXQKKy0lX2hrcF9rZXlzZXJ2ZXIgICAgICAgICBoa3A6Ly9wb29sLnNrcy1rZXlzZXJ2ZXJzLm5ldAorLSVfaGtwX2tleXNlcnZlcl9xdWVyeSAgICV7X2hrcF9rZXlzZXJ2ZXJ9L3Brcy9sb29rdXA/b3A9Z2V0JnNlYXJjaD0KKysjJV9oa3Bfa2V5c2VydmVyICAgICAgICAgaGtwOi8vcG9vbC5za3Mta2V5c2VydmVycy5uZXQKKysjJV9oa3Bfa2V5c2VydmVyX3F1ZXJ5ICAgJXtfaGtwX2tleXNlcnZlcn0vcGtzL2xvb2t1cD9vcD1nZXQmc2VhcmNoPQorIAorIAorICVfbnNzZGJfcGF0aAkvZXRjL3BraS9uc3NkYgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbWFjcm9zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YWIyZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorbWFjcm9zL21hY3Jvcy5pbjogUmV2ZXJ0IHNldHRpbmdzIHRvIHRoZSBzYW1lIGFzIFJQTSA1LjQuMAorCitFbmFibGUgYSByZWFzb25hYmxlIHNldCBvZiBycG1kZXBzIGRlcGVuZGVuY3kgaGVscGVyIG1hY3Jvcy4gIFRoZXNlIHNldHMKK3dlcmUgdXNlZCBieSBSUE0gNS40LjAuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9tYWNyb3MvbWFjcm9zLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL21hY3Jvcy9tYWNyb3MuaW4KKysrKyBycG0tNS40LjE0L21hY3Jvcy9tYWNyb3MuaW4KK0BAIC0xMDIyLDcgKzEwMjIsNyBAQCAkX2FyYml0cmFyeV90YWdzX3Rlc3RzCUZvbzpCYXIKKyAKKyAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIyAtLS0tIHJwbWJ1aWxkIG1hY3Jvcy4KKy0jJSV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5ycG1idWlsZH0KKysle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MucnBtYnVpbGR9CisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgY21ha2UoLi4uKSBjb25maWd1cmF0aW9uCitAQCAtMTAzOCwxNSArMTAzOCwxNSBAQCAkX2FyYml0cmFyeV90YWdzX3Rlc3RzCUZvbzpCYXIKKyAKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBwZXJsKC4uLikgY29uZmlndXJhdGlvbgorLSMlJXtsb2FkOiV7X3VzcmxpYnJwbX0vbWFjcm9zLmQvcGVybH0KKysle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC9wZXJsfQorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIHB5dGhvbiguLi4pIGNvbmZpZ3VyYXRpb24uCistIyUle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC9weXRob259CisrJXtsb2FkOiV7X3VzcmxpYnJwbX0vbWFjcm9zLmQvcHl0aG9ufQorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIHBocCguLi4pIGNvbmZpZ3VyYXRpb24uCistIyUle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC9waHB9CisrJXtsb2FkOiV7X3VzcmxpYnJwbX0vbWFjcm9zLmQvcGhwfQorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIGphdmEoLi4uKSBjb25maWd1cmF0aW9uLgorQEAgLTEwNTQsMTEgKzEwNTQsMTEgQEAgJF9hcmJpdHJhcnlfdGFnc190ZXN0cwlGb286QmFyCisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgbGlidG9vbCguLi4pIGNvbmZpZ3VyYXRpb24uCistIyUle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC9saWJ0b29sfQorKyV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5kL2xpYnRvb2x9CisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgcGtnY29uZmlnKC4uLikgY29uZmlndXJhdGlvbi4KKy0jJSV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5kL3BrZ2NvbmZpZ30KKysle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC9wa2djb25maWd9CisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgbW9ubyguLi4pIGNvbmZpZ3VyYXRpb24uCitAQCAtMTA3MCw3ICsxMDcwLDcgQEAgJF9hcmJpdHJhcnlfdGFnc190ZXN0cwlGb286QmFyCisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgdGNsKC4uLikgY29uZmlndXJhdGlvbi4KKy0jJSV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5kL3RjbH0KKysle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC90Y2x9CisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgdHlwZWxpYiguLi4pIGNvbmZpZ3VyYXRpb24uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1uby1sb29wbXNnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbm8tbG9vcG1zZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjZlZDJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbm8tbG9vcG1zZy5wYXRjaApAQCAtMCwwICsxLDE5IEBACitsaWIvb3JkZXIuYzogTWFrZSB0aGUgZGVwZW5kZW5jeSBsb29wIG1lc3NhZ2VzIGludG8gZGVidWcgbXNncworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9saWIvb3JkZXIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvb3JkZXIuYworKysrIHJwbS01LjQuMTQvbGliL29yZGVyLmMKK0BAIC0yMTc1LDcgKzIxNzUsNyBAQCByZXNjYW46CisgCQljb25zdCBjaGFyICogZHA7CisgCQlycG1sb2dMdmwgbXNnbHZsID0gKGFuYWNvbmRhIHx8IChycG10c0RGbGFncyh0cykgJiBSUE1ERVBTX0ZMQUdfREVQTE9PUFMpKQorIAkJCT8gUlBNTE9HX1dBUk5JTkcgOiBSUE1MT0dfRVJSOworLSNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfTUFORFJJVkEpIC8qIGxvb3AtZGV0ZWN0aW9uLW9wdGlvbmFsLWxvZ2xldmVsICovCisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9NQU5EUklWQSkgfHwgZGVmaW5lZChSUE1fVkVORE9SX09FKSAvKiBsb29wLWRldGVjdGlvbi1vcHRpb25hbC1sb2dsZXZlbCAqLworIAkJLy8gUmVwb3J0IGxvb3BzIGFzIGRlYnVnLWxldmVsIG1lc3NhZ2UgYnkgZGVmYXVsdCAoNyA9IFJQTUxPR19ERUJVRyksIG92ZXJyaWRhYmxlCisgCQltc2dsdmwgPSBycG1FeHBhbmROdW1lcmljKCIlez9fbG9vcF9kZXRlY3Rpb25fbG9nbGV2ZWx9JXs/IV9sb29wX2RldGVjdGlvbl9sb2dsZXZlbDo3fSIpOworICNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbm8tcGVybC11cnBtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbm8tcGVybC11cnBtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MTgyMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1uby1wZXJsLXVycG0ucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorRGlzYWJsZSBwZXJsLVVSUE0gc3VwcG9ydAorCitUaGlzIGNhdXNlcyBhIGNvbmZpZ3VyZSBmYWlsdXJlIHdoZW4gcGVybC1VUlBNIGlzIG5vdCB1c2VkLgorCit8IGNvbmZpZ3VyZS5hYzoxMTU5OiByZXF1aXJlZCBmaWxlIGBwZXJsLVVSUE0vTWFrZWZpbGUuUEwuaW4nIG5vdCBmb3VuZAorfCBjb25maWd1cmUuYWM6MTE1OTogcmVxdWlyZWQgZmlsZSBgcGVybC1VUlBNL01ha2VmaWxlLmluJyBub3QgZm91bmQKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHJwbS01LjQuMTQvY29uZmlndXJlLmFjCitAQCAtMTE4NiwzMCArMTE4NiwxMCBAQCBBQ19TVUJTVChXSVRIX1BFUkxfU1VCRElSKQorIEFDX1NVQlNUKFdJVEhfUEVSTF9TVUJQQUNLQUdFKQorIEFDX1NVQlNUKFdJVEhfUEVSTF9MSUJTKQorIAorLWRubCAjIG9wdGlvbmFsIFBlcmwtVVJQTSBsYW5ndWFnZSBiaW5kaW5ncworK2RubCAjIGRpc2FibGUgUGVybC1VUlBNIGxhbmd1YWdlIGJpbmRpbmdzCisgV0lUSF9QRVJMX1VSUE1fU1VCRElSPSIiCisgV0lUSF9QRVJMX1VSUE1fU1VCUEFDS0FHRT0wCisgV0lUSF9QRVJMX1VSUE1fTElCUz0iIgorLWlmIHRlc3QgIi4kV0lUSF9QVEhSRUFEUyIgPSAueWVzOyB0aGVuCistICAgIFdJVEhfUEVSTF9VUlBNX0xJQlM9IiRMSUJTIgorLWZpCistQUNfQVJHX1dJVEgocGVybC11cnBtLCBBU19IRUxQX1NUUklORyhbLS13aXRoLXBlcmwtdXJwbV0sIFtidWlsZCB3aXRoIFBlcmwgVVJQTSBsYW5ndWFnZSBiaW5kaW5nc10pLCBbCistICAgIGlmIHRlc3QgIi4kd2l0aHZhbCIgIT0gLm5vOyB0aGVuCistCVBFUkxfVVJQTV9JTlNUQUxMRElSUz0iIgorLQkgICBpZiB0ZXN0ICIkd2l0aHZhbCIgPT0gInZlbmRvciI7IHRoZW4KKy0JCSAgICBQRVJMX1VSUE1fSU5TVEFMTERJUlM9IidJTlNUQUxMRElSUycJPT4gJ3ZlbmRvcicsIgorLQkgICAgZmkKKy0JICAgIGlmIHRlc3QgIiR3aXRodmFsIiA9PSAic2l0ZSI7IHRoZW4KKy0JCSAgICBQRVJMX1VSUE1fSU5TVEFMTERJUlM9IidJTlNUQUxMRElSUycgICAgID0+ICdzaXRlJywiCistCSAgICBmaQorLQkgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtQRVJMX1VSUE1fSU5TVEFMTERJUlNdLCBbJFBFUkxfVVJQTV9JTlNUQUxMRElSU10sIFtQZXJsIGluc3RhbGwgZGlyZWN0b3J5ICh2ZW5kb3Ivc2l0ZSldKQorLQkgICAgQUNfU1VCU1QoUEVSTF9VUlBNX0lOU1RBTExESVJTKQorLSAgICAgICAgV0lUSF9QRVJMX1VSUE1fU1VCRElSPXBlcmwtVVJQTQorLSAgICAgICAgV0lUSF9QRVJMX1VSUE1fU1VCUEFDS0FHRT0xCistICAgICAgICBBQ19DT05GSUdfRklMRVMoW3BlcmwtVVJQTS9NYWtlZmlsZS5QTF0pCistICAgICAgICBBQ19DT05GSUdfRklMRVMoW3BlcmwtVVJQTS9NYWtlZmlsZV0pCistICAgIGZpCistXSkKKyBBQ19TVUJTVChXSVRIX1BFUkxfVVJQTV9TVUJESVIpCisgQUNfU1VCU1QoV0lUSF9QRVJMX1VSUE1fU1VCUEFDS0FHRSkKKyBBQ19TVUJTVChXSVRIX1BFUkxfVVJQTV9MSUJTKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tb3BlbmRiLWJlZm9yZS12ZXJpZnlzY3JpcHQtdG8tYXZvaWQtbnVsbC1wb2ludC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW9wZW5kYi1iZWZvcmUtdmVyaWZ5c2NyaXB0LXRvLWF2b2lkLW51bGwtcG9pbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdkNTg2YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW9wZW5kYi1iZWZvcmUtdmVyaWZ5c2NyaXB0LXRvLWF2b2lkLW51bGwtcG9pbnQucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorcnBtOiBvcGVuZGIgYmVmb3JlIHJwbXZlcmlmeXNjcmlwdCB0byBhdm9pZCBudWxsIHBvaW50IGlucHV0CisKK0lmIHRoZSBjb21tYW5kIGlzICJycG0gLVYiIGFuZCB0aGUgcmV0dXJuIHZhbHVlIG9mIChoZWFkZXJJc0VudHJ5KGgsIFJQTVRBR19WRVJJRllTQ1JJUFQpIAorfHwgaGVhZGVySXNFbnRyeShoLCBSUE1UQUdfU0FOSVRZQ0hFQ0spKSBsb2NhdGVkIGluIC9saWIvdmVyaWZ5LmMgaXMgdHJ1ZSwgaXQgd2lsbCBjYWxsCitycG1wc21TdGFnZSBmdW5jdGlvbihycG1WZXJpZnlTY3JpcHQtPnJwbXBzbVNjcmlwdFN0YWdlLT5ycG1wc21TdGFnZSkgYW5kIG9jY3VyIHNlZ21lbnQKK2ZhdWx0IGJlY2F1c2Ugb2YgbnVsbCBwb2ludChycG10c0dldFJkYih0cykgPT0gTlVMTCBhbmQgcnBtdHNHZXRSZGIodHMpLT5kYl90eG4pLgorU28gd2Ugb3BlbiBycG1kYiB0byBhdm9pZCBiYWQgaW5wdXQgd2hlbiBmaW5kIGhlYWRlcklzRW50cnkgdHJ1ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFpoaXhpb25nIENoaSA8emhpeGlvbmcuY2hpQHdpbmRyaXZlci5jb20+CitJbmRleDogcnBtLTUuNC4xNC9saWIvdmVyaWZ5LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL3ZlcmlmeS5jCTIwMTUtMDctMjIgMjI6MDk6NTkuOTkyODk1MzU1ICswODAwCisrKysgcnBtLTUuNC4xNC9saWIvdmVyaWZ5LmMJMjAxNS0wOC0xMyAxMDoyMDozMy43NTIxNzc5MDYgKzA4MDAKK0BAIC02MTMsNiArNjEzLDggQEAKKyAJeworIAkgICAgRkRfdCBmZG8gPSBmZER1cChTVERPVVRfRklMRU5PKTsKKyAKKysJICAgIHJwbXRzT3BlbkRCKHRzLCBPX1JET05MWSk7ICAgICAgICAgICAgLypPcGVuIHRoZSBEQiB0byBhdm9pZCBudWxsIHBvaW50IGlucHV0IGluIGZ1bmN0aW9uIHJwbXBzbVN0YWdlKCkqLworKworIAkgICAgcmMgPSBycG1maVNldEhlYWRlcihmaSwgaCk7CisgCSAgICBpZiAoKHJjID0gcnBtVmVyaWZ5U2NyaXB0KHF2YSwgdHMsIGZpLCBmZG8pKSAhPSAwKQorIAkJZWMgKz0gcmM7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1vc3NwLXV1aWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1vc3NwLXV1aWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxYWJhOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW9zc3AtdXVpZC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitGaXggaW50ZWdyYXRpb24gb2Ygb3NzcC11dWlkCisKK1dlIG5lZWQgdG8gYXZvaWQgaW5jbHVkaW5nIHRoZSB1dGlsLWxpbnV4IHV1aWQgbGlicmFyeSwgaW5zdGVhZAord2UgbmVlZCBvc3NwLXV1aWQuICBUaGVyZSBpcyBhIHJlbGF0ZWQgaGFjayBpbiBkb19jb25maWd1cmUgdG8KK21ha2Ugc3VyZSB0aGF0IHdlIHVzZSB0aGUgcmlnaHQgLnBjIGZpbGUgYXMgd2VsbC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHJwbS01LjQuMTQvY29uZmlndXJlLmFjCitAQCAtMTk1MSw3ICsxOTUxLDcgQEAgZ3JlcCAtdiAnZGVmaW5lIEhBVkVfVU5JU1REX0gnIGNvbmZkZWZzLgorIGVzYWMKKyBSUE1fQ0hFQ0tfTElCKAorICAgICBbT1NTUCB1dWlkXSwgW3V1aWRdLAorLSAgICBbb3NzcC11dWlkIHV1aWRdLCBbdXVpZF9pbXBvcnRdLCBbdXVpZC5oXSwKKysgICAgW29zc3AtdXVpZF0sIFt1dWlkX2ltcG9ydF0sIFt1dWlkLmhdLAorICAgICBbbm8sZXh0ZXJuYWw6bm9uZV0sIFtdLAorICAgICBbIGRubCAjIGVuYWJsZSBPU1NQIHV1aWQgbmF0aXZlIEFQSSBzdXBwb3J0IGZvciBlbWJlZGRlZCBMdWEKKyAgICAgICBpZiB0ZXN0ICIuJFdJVEhfTFVBIiA9IC55ZXM7IHRoZW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBhY2thZ2VvcmlnaW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wYWNrYWdlb3JpZ2luLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNWUxMjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wYWNrYWdlb3JpZ2luLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK0FkZCB0aGUgYWJpbGl0eSB0byBxdWVyeSB0aGUgcGFja2FnZW9yaWdpbgorCitXcml0dGVuIGJ5IGpiaiBhdCBycG01Lm9yZworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW25vdCBhdXRob3JdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvcnBtZGIvaGRyZm10LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtZGIvaGRyZm10LmMKKysrKyBycG0tNS40LjE0L3JwbWRiL2hkcmZtdC5jCitAQCAtMjQwOSw4ICsyNDA5LDEwIEBAIHN0YXRpYyBpbnQgcGtnb3JpZ2luVGFnKEhlYWRlciBoLCBIRV90IGgKKyAgICAgaW50IHJjID0gMTsKKyAKKyAgICAgaGUtPnRhZyA9IFJQTVRBR19QQUNLQUdFT1JJR0lOOworLSAgICBpZiAoIWhlYWRlckdldChoLCBoZSwgSEVBREVSR0VUX05PRVhURU5TSU9OKQorLSAgICAgJiYgKG9yaWdpbiA9IGhlYWRlckdldE9yaWdpbihoKSkgIT0gTlVMTCkKKysgICAgLyogWFhYIHR3byBzb3VyY2VzIGZvciB0YWcgZGF0YTogd2hhdCBzZWFyY2ggcHJlY2VkZW5jZT8gKi8KKysgICAgaWYgKGhlYWRlckdldChoLCBoZSwgSEVBREVSR0VUX05PRVhURU5TSU9OKSkKKysJcmMgPSAwOworKyAgICBlbHNlIGlmICgob3JpZ2luID0gaGVhZGVyR2V0T3JpZ2luKGgpKSAhPSBOVUxMKQorICAgICB7CisgCWhlLT50ID0gUlBNX1NUUklOR19UWVBFOworIAloZS0+cC5zdHIgPSB4c3RyZHVwKG9yaWdpbik7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wYXlsb2FkLXVzZS1oYXNoZWQtaW5vZGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wYXlsb2FkLXVzZS1oYXNoZWQtaW5vZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNkMDJhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBheWxvYWQtdXNlLWhhc2hlZC1pbm9kZS5wYXRjaApAQCAtMCwwICsxLDE0NiBAQAorSWYgd2UgcnVuIGJ1aWxkcyBvbiBhIGZpbGVzeXN0ZW0gd2l0aCA2NCBiaXQgaW5vZGVzIGxpa2UgWEZTLCB3ZSBuZWVkIHRvCittYXAgdGhlIGlub2RlIG51bWJlcnMgdG8gc29tZXRoaW5nIDMyIGJpdCBzaW5jZSB0aGUgY3BpbyBoZWFkZXIgb25seSBhbGxvd3MKK2ZvciAzMiBiaXQgaW5vZGUgdmFsdWVzLiBJZiB3ZSBkb24ndCBkbyB0aGlzOgorCisjZGVmaW5lIFNFVF9OVU1fRklFTEQocGh5cywgdmFsLCBzcGFjZSkgXAorICAgICAgICBzcHJpbnRmKHNwYWNlLCAiJTguOGx4IiwgKHVuc2lnbmVkIGxvbmcpICh2YWwpKTsgXAorICAgICAgICBtZW1jcHkocGh5cywgc3BhY2UsIDgpCisKK2Zyb20gY3Bpby5jIHdpbGwgcHJpbnQgbGFyZ2VyIHRoYXQgOCBjaGFyYWN0ZXIgdmFsdWVzIGFuZCB0aGVuIHRydW5jYXRlIHRoZSAKK0xTQnMuIFRoaXMgZ2VuZXJhdGVzIGNwaW8gZmlsZXMgd2hlcmUgaGFyZGxpbmtlZCBmaWxlcyBtYXkgaGF2ZSB0aGUgc2FtZQoraW5vZGUgbnVtYmVyLiBUaGUgcmVzdWx0aW5nIHJwbXMgYXJlIHRoZW4gY29ycnVwdGVkLgorCitUaGVyZSBpcyBhIHNlcGFyYXRlIHBhdGNoIGZvciB0aGUgY3Jhc2ggdGhlIGlkZW50aWNhbCBpbm9kZSBudW1iZXJzIGNhdXNlcword2hlbiBleHRyYWN0aW5nIHRoZSBycG0uCisKK1BhdGNoIHRha2VuIGZyb20gaHR0cDovL2dpdC5wbGQtbGludXgub3JnLz9wPXBhY2thZ2VzL3JwbS5naXQ7YT1jb21taXRkaWZmO2g9MTA1MjZjMjNhYWM2MGI3YjYzNmU0YzkzODYyODg3ZGJlZjhlOGYxNQorCitSUCAyMDE0LzYvMTAKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBycG0tNS40LjE0L2J1aWxkL2ZpbGVzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvYnVpbGQvZmlsZXMuYworKysrIHJwbS01LjQuMTQvYnVpbGQvZmlsZXMuYworQEAgLTEzMjgsNiArMTMyOCwyNiBAQCBzdGF0aWMgcnBtdWludDMyX3QgZ2V0RGlnZXN0QWxnbyhIZWFkZXIKKyAgICAgcmV0dXJuIGRhbGdvOworIH0KKyAKKytzdGF0aWMgaW50IGlzSGFyZExpbmsoRmlsZUxpc3RSZWMgZmxwLCBGaWxlTGlzdFJlYyB0bHApCisreworKyAgICByZXR1cm4gKChTX0lTUkVHKGZscC0+ZmxfbW9kZSkgJiYgU19JU1JFRyh0bHAtPmZsX21vZGUpKSAmJgorKyAgICAgICAgICAgICgoZmxwLT5mbF9ubGluayA+IDEpICYmIChmbHAtPmZsX25saW5rID09IHRscC0+ZmxfbmxpbmspKSAmJgorKyAgICAgICAgICAgIChmbHAtPmZsX2lubyA9PSB0bHAtPmZsX2lubykgJiYKKysgICAgICAgICAgICAoZmxwLT5mbF9kZXYgPT0gdGxwLT5mbF9kZXYpKTsKKyt9CisrCisrc3RhdGljIGludCBzZWVuSGFyZExpbmsoRmlsZUxpc3QgZmwsIEZpbGVMaXN0UmVjIGZscCwgaW5vX3QgKmZpbGVpZCkKKyt7CisrICAgIEZpbGVMaXN0UmVjIGlscDsKKysgICAgZm9yIChpbHAgPSBmbC0+ZmlsZUxpc3Q7IGlscCA8IGZscDsgaWxwKyspIHsKKysgICAgICAgIGlmIChpc0hhcmRMaW5rKGZscCwgaWxwKSkgeworKyAgICAgICAgICAgICpmaWxlaWQgPSBpbHAgLSBmbC0+ZmlsZUxpc3Q7CisrICAgICAgICAgICAgcmV0dXJuIDE7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIDA7CisrfQorKworIC8qKgorICAqIEFkZCBmaWxlIGVudHJpZXMgdG8gaGVhZGVyLgorICAqIEB0b2RvIFNob3VsZCBkaXJlY3RvcmllcyBoYXZlICVkb2MvJWNvbmZpZyBhdHRyaWJ1dGVzPyAoIzE0NTMxKQorQEAgLTEzNzQsNiArMTM5NCw3IEBAIG1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsJLyogWFhYIHZhbGcKKyAKKyAgICAgZm9yIChpID0gMCwgZmxwID0gZmwtPmZpbGVMaXN0OyBpIDwgZmwtPmZpbGVMaXN0UmVjc1VzZWQ7IGkrKywgZmxwKyspIHsKKyAJY29uc3QgY2hhciAqczsKKysJaW5vX3QgZmlsZWlkID0gZmxwIC0gZmwtPmZpbGVMaXN0OworIAorICAJLyogTWVyZ2UgZHVwbGljYXRlIGVudHJpZXMuICovCisgCXdoaWxlIChpIDwgKGZsLT5maWxlTGlzdFJlY3NVc2VkIC0gMSkgJiYKK0BAIC0xNDM2LDYgKzE0NTcsMTMgQEAgbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwkvKiBYWFggdmFsZworIAkvKiBMZWF2ZSByb29tIGZvciBib3RoIGRpcm5hbWUgYW5kIGJhc2VuYW1lIE5VTCdzICovCisgCWRwYXRobGVuICs9IChzdHJsZW4oZmxwLT5kaXNrVVJMKSArIDIpOworIAorKwkvKiBFeGNsdWRlcyBhbmQgZHVwZXMgaGF2ZSBiZWVuIGZpbHRlcmVkIG91dCBieSBub3cuICovCisrCWlmIChTX0lTUkVHKGZscC0+ZmxfbW9kZSkpIHsKKysJICAgIGlmIChmbHAtPmZsX25saW5rID09IDEgfHwgIXNlZW5IYXJkTGluayhmbCwgZmxwLCAmZmlsZWlkKSkgeworKwkJZmwtPnRvdGFsRmlsZVNpemUgKz0gZmxwLT5mbF9zaXplOworKwkgICAgfQorKwl9CisrCisgCS8qCisgCSAqIE1ha2UgdGhlIGhlYWRlciwgdGhlIE9MREZJTEVOQU1FUyB3aWxsIGdldCBjb252ZXJ0ZWQgdG8gYSAKKyAJICogY29tcHJlc3NlZCBmaWxlIGxpc3Qgd3JpdGUgYmVmb3JlIHdlIHdyaXRlIHRoZSBhY3R1YWwgcGFja2FnZSB0bworQEAgLTE1MTgsNyArMTU0NiwxMSBAQCBtZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CS8qIFhYWCB2YWxnCisgCisgCS8qIFhYWCBIYXNoIGluc3RlYWQgb2YgNjRiLT4zMmIgdHJ1bmNhdGUgdG8gcHJldmVudCBhbGlhc2luZy4gKi8KKyAJeyAgIGlub190IF9pbm8gPSBmbHAtPmZsX2lubzsKKysJLyogZG9uJ3QgdXNlIGhhc2ggaGVyZSwgYXMgaGFzaCBjb2xsaXNpb25zIHdoaWNoIGhhcHBlbiBvbiBsYXJnZSBwYWNrYWdlcworKwkgICBjYXVzZSBidXMgZXJyb3JzIGluIHJwbWJ1aWxkCisgCSAgICB1aTMyID0gaGFzaEZ1bmN0aW9uU3RyaW5nKDAsICZfaW5vLCBzaXplb2YoX2lubykpOworKwkqLworKwkgICAgdWkzMiA9IGZpbGVpZCArIDE7CisgCX0KKyAJaGUtPnRhZyA9IFJQTVRBR19GSUxFSU5PREVTOworIAloZS0+dCA9IFJQTV9VSU5UMzJfVFlQRTsKK0BAIC0xNzUxLDM5ICsxNzgzLDYgQEAgaWYgKF9ycG1idWlsZEZsYWdzICYgNCkgeworIAkJSU9TTV9NQVBfVFlQRSB8IElPU01fTUFQX01PREUgfCBJT1NNX01BUF9VSUQgfCBJT1NNX01BUF9HSUQ7CisgCWlmIChpc1NyYykKKyAJICAgIGZpLT5mbWFwZmxhZ3NbaV0gfD0gSU9TTV9GT0xMT1dfU1lNTElOS1M7CistCistCWlmIChTX0lTUkVHKGZscC0+ZmxfbW9kZSkpIHsKKy0JICAgIGludCBiaW5nbyA9IDE7CistCSAgICAvKiBIYXJkIGxpbmtzIG5lZWQgYmUgdGFsbGllZCBvbmx5IG9uY2UuICovCistCSAgICBpZiAoZmxwLT5mbF9ubGluayA+IDEpIHsKKy0JCUZpbGVMaXN0UmVjIGpscCA9IGZscCArIDE7CistCQlpbnQgaiA9IGkgKyAxOworLQkJZm9yICg7ICh1bnNpZ25lZClqIDwgZmktPmZjOyBqKyssIGpscCsrKSB7CistCQkgICAgLyogZm9sbG93IG91dGVyIGxvb3AgbG9naWMgKi8KKy0JCSAgICB3aGlsZSAoKChqbHAgLSBmbC0+ZmlsZUxpc3QpIDwgKGZsLT5maWxlTGlzdFJlY3NVc2VkIC0gMSkpICYmCistCQkJICAgICFzdHJjbXAoamxwLT5maWxlVVJMLCBqbHBbMV0uZmlsZVVSTCkpCistCQkJamxwKys7CistCQkgICAgaWYgKGpscC0+ZmxhZ3MgJiBSUE1GSUxFX0VYQ0xVREUpIHsKKy0JCQlqLS07CistCQkJLypAaW5uZXJjb250aW51ZUAqLyBjb250aW51ZTsKKy0JCSAgICB9CistCQkgICAgaWYgKGpscC0+ZmxhZ3MgJiBSUE1GSUxFX0dIT1NUKQorLQkJICAgICAgICAvKkBpbm5lcmNvbnRpbnVlQCovIGNvbnRpbnVlOworLQkJICAgIGlmICghU19JU1JFRyhqbHAtPmZsX21vZGUpKQorLQkJCS8qQGlubmVyY29udGludWVAKi8gY29udGludWU7CistCQkgICAgaWYgKGZscC0+ZmxfbmxpbmsgIT0gamxwLT5mbF9ubGluaykKKy0JCQkvKkBpbm5lcmNvbnRpbnVlQCovIGNvbnRpbnVlOworLQkJICAgIGlmIChmbHAtPmZsX2lubyAhPSBqbHAtPmZsX2lubykKKy0JCQkvKkBpbm5lcmNvbnRpbnVlQCovIGNvbnRpbnVlOworLQkJICAgIGlmIChmbHAtPmZsX2RldiAhPSBqbHAtPmZsX2RldikKKy0JCQkvKkBpbm5lcmNvbnRpbnVlQCovIGNvbnRpbnVlOworLQkJICAgIGJpbmdvID0gMDsJLyogZG9uJ3QgdGFsbHkgaGFyZGxpbmsgeWV0LiAqLworLQkJICAgIC8qQGlubmVyYnJlYWtAKi8gYnJlYWs7CistCQl9CistCSAgICB9CistCSAgICBpZiAoYmluZ28pCistCQlmbC0+dG90YWxGaWxlU2l6ZSArPSBmbHAtPmZsX3NpemU7CistCX0KKyAgICAgfQorIAorICAgICB1aTMyID0gZmwtPnRvdGFsRmlsZVNpemU7CitJbmRleDogcnBtLTUuNC4xNC9saWIvZnNtLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL2ZzbS5jCisrKysgcnBtLTUuNC4xNC9saWIvZnNtLmMKK0BAIC05MDQsNiArOTA0LDcgQEAgaW50IGZzbU1hcEF0dHJzKElPU01fdCBmc20pCisgCisgICAgIGlmIChmaSAmJiBpID49IDAgJiYgaSA8IChpbnQpIGZpLT5mYykgeworIAltb2RlX3QgcGVybXMgPSAoU19JU0RJUihzdC0+c3RfbW9kZSkgPyBmaS0+ZHBlcm1zIDogZmktPmZwZXJtcyk7CisrCWlub190IGZpbmFsSW5vZGUgPSAoZmktPmZpbm9kZXMgPyAoaW5vX3QpZmktPmZpbm9kZXNbaV0gOiAwKTsKKyAJbW9kZV90IGZpbmFsTW9kZSA9IChmaS0+Zm1vZGVzID8gKG1vZGVfdClmaS0+Zm1vZGVzW2ldIDogcGVybXMpOworIAlkZXZfdCBmaW5hbFJkZXYgPSAoZGV2X3QpKGZpLT5mcmRldnMgPyBmaS0+ZnJkZXZzW2ldIDogMCk7CisgCXJwbXVpbnQzMl90IGZpbmFsTXRpbWUgPSAoZmktPmZtdGltZXMgPyBmaS0+Zm10aW1lc1tpXSA6IDApOworQEAgLTk0Myw2ICs5NDQsNyBAQCBpbnQgZnNtTWFwQXR0cnMoSU9TTV90IGZzbSkKKyAJICAgIGlmICgoU19JU0NIUihzdC0+c3RfbW9kZSkgfHwgU19JU0JMSyhzdC0+c3RfbW9kZSkpCisgCSAgICAmJiBzdC0+c3RfbmxpbmsgPT0gMCkKKyAJCXN0LT5zdF9ubGluayA9IDE7CisrCSAgICBzdC0+c3RfaW5vID0gZmluYWxJbm9kZTsKKyAJICAgIHN0LT5zdF9yZGV2ID0gZmluYWxSZGV2OworIAkgICAgc3QtPnN0X210aW1lID0gZmluYWxNdGltZTsKKyAJfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGtnY29uZmlnZGVwcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBrZ2NvbmZpZ2RlcHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQxODJhZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBrZ2NvbmZpZ2RlcHMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorcGtnY29uZmlnZGVwcy5zaDogQ2hhbmdlIHRvIHJlc3RyaWN0aW5nIHBrZ2NvbmZpZyB0byB0aGUgbG9jYWwgZGlyZWN0b3J5CisKK1VzaW5nIFBLR19DT05GSUdfUEFUSCB3aWxsIGFsbG93IHBrZy1jb25maWcgdG8gZmFsbCBiYWNrIHRvIHRoZSBzeXN0ZW0gcGF0aHMsCit3ZSBkb24ndCB3YW50IHRoaXMgYXMgaXQgbWF5IGxlYWQgdG8gaW5hY2N1cmF0ZSByZXN1bHRzIGluIHNvbWUgY29ybmVyIGNhc2VzLgorCitQS0dfQ09ORklHX0xJQkRJUiB3aWxsIGVuc3VyZSBwa2ctY29uZmlnIHN0YXlzIHdpdGhpbiB0aGUgaW5zdGFsbCBkaXJlY3RvcnkuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9zY3JpcHRzL3BrZ2NvbmZpZ2RlcHMuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvc2NyaXB0cy9wa2djb25maWdkZXBzLnNoCisrKysgcnBtLTUuNC4xNC9zY3JpcHRzL3BrZ2NvbmZpZ2RlcHMuc2gKK0BAIC0xOCw4ICsxOCw4IEBAIGNhc2UgJDEgaW4KKyAgICAgKi5wYykKKyAJIyBRdWVyeSB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBwYWNrYWdlLgorIAlESVI9YGRpcm5hbWUgJHtmaWxlbmFtZX1gCistCVBLR19DT05GSUdfUEFUSD0iJERJUjokRElSLy4uLy4uL3NoYXJlL3BrZ2NvbmZpZyIKKy0JZXhwb3J0IFBLR19DT05GSUdfUEFUSAorKwlQS0dfQ09ORklHX0xJQkRJUj0iJERJUjokRElSLy4uLy4uL3NoYXJlL3BrZ2NvbmZpZyIKKysJZXhwb3J0IFBLR19DT05GSUdfTElCRElSCisgCSRwa2djb25maWcgLS1wcmludC1wcm92aWRlcyAiJGZpbGVuYW1lIiAyPiAvZGV2L251bGwgfCB3aGlsZSByZWFkIG4gciB2IDsgZG8KKyAJICAgIFsgLW4gIiRuIiBdIHx8IGNvbnRpbnVlCisgCSAgICAjIFdlIGhhdmUgYSBkZXBlbmRlbmN5LiAgTWFrZSBhIG5vdGUgdGhhdCB3ZSBuZWVkIHRoZSBwa2djb25maWcKK0BAIC00Miw4ICs0Miw4IEBAIGNhc2UgJDEgaW4KKyAJWyAtbiAiJG9uZXNob3QiIF0gJiYgZWNobyAiJG9uZXNob3QiOyBvbmVzaG90PSIiCisgCSMgUXVlcnkgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgcGFja2FnZS4KKyAJRElSPWBkaXJuYW1lICR7ZmlsZW5hbWV9YAorLQlQS0dfQ09ORklHX1BBVEg9IiRESVI6JERJUi8uLi8uLi9zaGFyZS9wa2djb25maWciCistCWV4cG9ydCBQS0dfQ09ORklHX1BBVEgKKysJUEtHX0NPTkZJR19MSUJESVI9IiRESVI6JERJUi8uLi8uLi9zaGFyZS9wa2djb25maWciCisrCWV4cG9ydCBQS0dfQ09ORklHX0xJQkRJUgorIAkkcGtnY29uZmlnIC0tcHJpbnQtcmVxdWlyZXMgIiRmaWxlbmFtZSIgMj4gL2Rldi9udWxsIHwgd2hpbGUgcmVhZCBuIHIgdiA7IGRvCisgCSAgICBbIC1uICIkbiIgXSB8fCBjb250aW51ZQorIAkgICAgaWYgIFsgLW4gIiRyIiBdICYmIFsgLW4gIiR2IiBdOyB0aGVuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wbGF0Zm9ybS1maWxlLWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBsYXRmb3JtLWZpbGUtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNmE2ZTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wbGF0Zm9ybS1maWxlLWZpeC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitEb24ndCBhZGQgdGhlIGZpcnN0IGxpbmUgb2YgL2V0Yy9ycG0vcGxhdGZvcm0gdG8gdGhlIGxpc3Qgb2YgcGF0dGVybnMKK3RvIG1hdGNoIHdoZW4gY29tcHV0aW5nIGFuIGFyY2ggc2NvcmUsIHVzZSBpdCBqdXN0IGZvciBnZXR0aW5nCitpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGxhdGZvcm0gKGNwdS92ZW5kb3Ivb3MpLiBGaXhlcyAjMzg2NC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworSW5kZXg6IHJwbS01LjQuMTQvbGliL3JwbXJjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL3JwbXJjLmMKKysrKyBycG0tNS40LjE0L2xpYi9ycG1yYy5jCitAQCAtNTEwLDYgKzUxMCw3IEBAIHN0YXRpYyBycG1SQyBycG1QbGF0Zm9ybShjb25zdCBjaGFyICogcGwKKyAjZW5kaWYKKyAJfQorIAorKyNpZiAhZGVmaW5lZChSUE1fVkVORE9SX09FKSAvKiBTa2lwIHRoZSBleHBsaWNpdC1wbGF0Zm9ybSAqLworICNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfT1BFTlBLRykgLyogZXhwbGljaXQtcGxhdGZvcm0gKi8KKyAJLyogZG8gbm90IHVzZSB2ZW5kb3IgYW5kIEdOVSBhdHRyaWJ1dGlvbiAqLworIAlwID0gcnBtRXhwYW5kKCIle19ob3N0X2NwdX0tJXtfaG9zdF9vc30iLCBOVUxMKTsKK0BAIC01MjAsNyArNTIxLDggQEAgc3RhdGljIHJwbVJDIHJwbVBsYXRmb3JtKGNvbnN0IGNoYXIgKiBwbAorICNlbmRpZgorIAl4eCA9IG1pcmVBcHBlbmQoUlBNTUlSRV9TVFJDTVAsIDAsIHAsIE5VTEwsICZtaV9yZSwgJm1pX25yZSk7CisgCXAgPSBfZnJlZShwKTsKKy0JCisrI2VuZGlmCisrCisgCWluaXRfcGxhdGZvcm0rKzsKKyAgICAgfQorICAgICByYyA9IChpbml0X3BsYXRmb3JtID8gUlBNUkNfT0sgOiBSUE1SQ19GQUlMKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBsYXRmb3JtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGxhdGZvcm0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFmZDAzOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBsYXRmb3JtLnBhdGNoCkBAIC0wLDAgKzEsMTM3IEBACitGaXggdXAgcGxhdGZvcm0gYW5kIHJlbGF0ZWQgc3lzaW5mbyBmaWxlIGxvYWRpbmcuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGlzIGVuc3VyZXMgdGhhdCBSUE0ga25vd3MgdGhlIGNvbXBhdGlibGUgc2V0IG9mIHBhY2thZ2UgdHlwZXMgYXQgYWxsIHRpbWVzLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9kZXBlbmRzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL2RlcGVuZHMuYworKysrIHJwbS01LjQuMTQvbGliL2RlcGVuZHMuYworQEAgLTI1MCw3ICsyNTAsNyBAQCBzdGF0aWMgaW50IHJwbXRzQWRkVXBncmFkZXMocnBtdHMgdHMsIHJwCisgCSAgICBoZS0+cC5wdHIgPSBfZnJlZShoZS0+cC5wdHIpOworIAl9CisgCistI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpCisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpICYmICFkZWZpbmVkKFJQTV9WRU5ET1JfT0UpCisgCS8qCisgCSAqIElmIHdlJ3JlIGNhcGFibGUgb2YgaW5zdGFsbGluZyBtdWx0aXBsZSBjb2xvcnMKKyAJICogYnV0IGF0IGxlYXN0IG9uZSBvZiB0aGUgcGFja2FnZXMgYXJlIHdoaXRlICgwKSwgd2UKK0BAIC01MDcsNyArNTA3LDcgQEAgYXNzZXJ0KGxhc3R4ID49IDAgJiYgbGFzdHggPCB0cy0+b3JkZXJDbworICAgICByZXR1cm4gMDsKKyB9CisgCistI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpCisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpICYmICFkZWZpbmVkKFJQTV9WRU5ET1JfT0UpCisgLyogSXMgImNvbXBhdCIgY29tcGF0aWJsZSB3LyBhcmNoPyAqLworIGludCBfaXNDb21wYXRpYmxlQXJjaChjb25zdCBjaGFyICogYXJjaCwgY29uc3QgY2hhciAqIGNvbXBhdCkKKyB7CitAQCAtNjYzLDcgKzY2Myw3IEBAIGFzc2VydChoZS0+cC5zdHIgIT0gTlVMTCk7CisgCisgCSAgICBpZiAoYXJjaCA9PSBOVUxMIHx8IChwYXJjaCA9IHJwbXRlQShwKSkgPT0gTlVMTCkKKyAJCWNvbnRpbnVlOworLSNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKQorKyNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKSAmJiAhZGVmaW5lZChSUE1fVkVORE9SX09FKQorIAkgICAgLyogWFhYIGhhY2tlcnkgZm9yIGFsaWFzIG1hdGNoaW5nLiAqLworIAkgICAgaWYgKCFfaXNDb21wYXRpYmxlQXJjaChhcmNoLCBwYXJjaCkpCisgCQljb250aW51ZTsKK0BAIC04MjksNiArODI5LDEyIEBAIGludCBycG10c0FkZEVyYXNlRWxlbWVudChycG10cyB0cywgSGVhZGUKKyAgICAgcmV0dXJuIHJjOworIH0KKyAKKysjaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikgfHwgZGVmaW5lZChSUE1fVkVORE9SX09FKQorKyNkZWZpbmUgX0VUQ19SUE1fU1lTSU5GTyAgICAgICAgIiV7X2V0Y3JwbX0vc3lzaW5mbyIKKysjZWxzZQorKyNkZWZpbmUgX0VUQ19SUE1fU1lTSU5GTyAgICAgICAgU1lTQ09ORklHRElSICIvc3lzaW5mbyIKKysjZW5kaWYKKysKKyAvKkBvbmx5QCovIC8qQG51bGxAKi8gLypAdW5jaGVja2VkQCovCisgc3RhdGljIGNoYXIgKnN5c2luZm9fcGF0aCA9IE5VTEw7CisgCitAQCAtMTMxMSw3ICsxMzE3LDcgQEAgcmV0cnk6CisgCXN5c2luZm9fcGF0aCA9IHJwbUV4cGFuZCgiJXs/X3JwbWRzX3N5c2luZm9fcGF0aH0iLCBOVUxMKTsKKyAJaWYgKCEoc3lzaW5mb19wYXRoICE9IE5VTEwgJiYgKnN5c2luZm9fcGF0aCA9PSAnLycpKSB7CisgCSAgICBzeXNpbmZvX3BhdGggPSBfZnJlZShzeXNpbmZvX3BhdGgpOworLQkgICAgc3lzaW5mb19wYXRoID0geHN0cmR1cChTWVNDT05GSUdESVIgIi9zeXNpbmZvIik7CisrCSAgICBzeXNpbmZvX3BhdGggPSBycG1FeHBhbmQoX0VUQ19SUE1fU1lTSU5GTywgTlVMTCk7CisgCX0KKyAgICAgfQorIAorSW5kZXg6IHJwbS01LjQuMTQvbGliL3JwbWRzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL3JwbWRzLmMKKysrKyBycG0tNS40LjE0L2xpYi9ycG1kcy5jCitAQCAtMTc1OSw3ICsxNzU5LDcgQEAgaW50IHJwbWRzU3lzaW5mbyhycG1QUkNPIFBSQ08sIGNvbnN0IGNoYQorIC8qQC1vYnNlcnZlcnRyYW5zIEAqLworIAkgICAgX3N5c2luZm9fcGF0aCA9IF9mcmVlKF9zeXNpbmZvX3BhdGgpOworIC8qQD1vYnNlcnZlcnRyYW5zIEAqLworLQkgICAgX3N5c2luZm9fcGF0aCA9IHhzdHJkdXAoX0VUQ19SUE1fU1lTSU5GTyk7CisrCSAgICBfc3lzaW5mb19wYXRoID0gcnBtRXhwYW5kKF9FVENfUlBNX1NZU0lORk8sIE5VTEwpOworIAl9CisgICAgIH0KKyAvKkA9bW9kb2JzZXJ2ZXJAKi8KK0luZGV4OiBycG0tNS40LjE0L2xpYi9ycG1yYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9ycG1yYy5jCisrKysgcnBtLTUuNC4xNC9saWIvcnBtcmMuYworQEAgLTM4LDcgKzM4LDEzIEBACisgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25maWdUYXJnZXQgPSBOVUxMOworIAorIC8qQG9ic2VydmVyQCovIC8qQHVuY2hlY2tlZEAqLworLXN0YXRpYyBjb25zdCBjaGFyICogcGxhdGZvcm0gPSBTWVNDT05GSUdESVIgIi9wbGF0Zm9ybSI7CisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpCisrI2RlZmluZSBfRVRDX1JQTV9QTEFURk9STSAgICAgICAgIiV7X2V0Y3JwbX0vcGxhdGZvcm0iCisrI2Vsc2UKKysjZGVmaW5lIF9FVENfUlBNX1BMQVRGT1JNICAgICAgICBTWVNDT05GSUdESVIgIi9wbGF0Zm9ybSIKKysjZW5kaWYKKysKKytzdGF0aWMgY29uc3QgY2hhciAqIF9wbGF0Zm9ybSA9IE5VTEw7CisgCisgLypAb25seUAqLyAvKkByZWxudWxsQCovIC8qQHVuY2hlY2tlZEAqLworIHZvaWQgKiBwbGF0cGF0ID0gTlVMTDsKK0BAIC02OTQsMTYgKzcwMCwxNyBAQCBzdGF0aWMgdm9pZCBkZWZhdWx0TWFjaGluZSgvKkBvdXRAKi8gY29uCisgICAgIGludCByYzsKKyAKKyAgICAgd2hpbGUgKCFnb3REZWZhdWx0cykgeworLSNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKQorLQljb25zdCBjaGFyICogX3BsYXRmb3JtID0gcnBtR2V0UGF0aChfX2V0Y3JwbSwgIi9wbGF0Zm9ybSIsIE5VTEwpOworLSNlbHNlCistCWNvbnN0IGNoYXIgKiBfcGxhdGZvcm0gPSBwbGF0Zm9ybTsKKy0jZW5kaWYKKysJaWYgKF9wbGF0Zm9ybSA9PSBOVUxMKSB7CisrCSAgICBfcGxhdGZvcm0gPSBycG1FeHBhbmQoIiV7P19ycG1yY19wbGF0Zm9ybV9wYXRofSIsIE5VTEwpOworKwkgICAgLyogWFhYIG1heSBuZWVkIHRvIHZhbGlkYXRlIHBhdGggZXhpc3RlbmNlIHNvbWV3aGVuLiAqLworKwkgICAgaWYgKCEoX3BsYXRmb3JtICE9IE5VTEwgJiYgKl9wbGF0Zm9ybSA9PSAnLycpKSB7CisrCQlfcGxhdGZvcm0gPSBfZnJlZShfcGxhdGZvcm0pOworKwkJX3BsYXRmb3JtID0gcnBtRXhwYW5kKF9FVENfUlBNX1BMQVRGT1JNLCBOVUxMKTsKKysJICAgIH0KKysJfQorIAlDVk9HX3QgY3ZvZyA9IE5VTEw7CisgI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9PUEVOUEtHKSAvKiBsYXJnZXItdXRzbmFtZSAqLworIAljb25zdCBjaGFyICpjcDsKKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChSUE1fVkVORE9SX09QRU5QS0cpIC8qIGxhcmdlci11dHNuYW1lICovCisgCS8qIHV0c25hbWUgZmllbGRzIG9uIHNvbWUgcGxhdGZvcm1zIChsaWtlIEhQLVVYKSBhcmUgdmVyeSBzbWFsbAorIAkgICAoanVzdCBhYm91dCA4IGNoYXJhY3RlcnMpLiBUaGlzIGlzIHRvbyBzbWFsbCBmb3IgT3BlblBLRywgc28gY2hlYXQhICovCisgCXJjID0gdW5hbWUoJnVuX3JlYWwpOworQEAgLTc4MCw5ICs3ODcsNyBAQCBzdGF0aWMgdm9pZCBkZWZhdWx0TWFjaGluZSgvKkBvdXRAKi8gY29uCisgCWlmIChjcCAhPSBOVUxMICYmIGNwICE9IF9wbGF0Zm9ybSkKKyAJICAgIGNwID0gX2ZyZWUoY3ApOworICNlbmRpZgorLSNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKQorIAlfcGxhdGZvcm0gPSBfZnJlZShfcGxhdGZvcm0pOworLSNlbmRpZgorIAorIAlpZiAoY29uZmlnVGFyZ2V0ICYmICFwYXJzZUNWT0coY29uZmlnVGFyZ2V0LCAmY3ZvZykgJiYgY3ZvZyAhPSBOVUxMKSB7CisgCSAgICBnb3REZWZhdWx0cyA9IDE7CitAQCAtMTEwMSw2ICsxMTA2LDggQEAgaW50IHJwbVJlYWRDb25maWdGaWxlcygvKkB1bnVzZWRAKi8gY29ucworIAorICNpZmRlZiBQUkVNQUNST0ZJTEVTCisgICAgIGlmIChycG1SZWFkUkMoUFJFTUFDUk9GSUxFUykpIHJldHVybiAtMTsKKysjZWxzZQorKyAgICBpZiAocnBtUmVhZFJDKE5VTEwpKSByZXR1cm4gLTE7CisgI2VuZGlmCisgCisgICAgIC8qIFJlc2V0IHVtYXNrIHRvIGl0cyBkZWZhdWx0IHVtYXNrKDIpIHZhbHVlLiAqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGxhdGZvcm0yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGxhdGZvcm0yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZDU0ZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wbGF0Zm9ybTIucGF0Y2gKQEAgLTAsMCArMSwxMDUgQEAKK0ZpeCB1cCBwbGF0Zm9ybSBhbmQgcmVsYXRlZCBzeXNpbmZvIGZpbGUgbG9hZGluZyAocGFydCAyKS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1dlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2Ugc2V0IHRoZSBfZ251IGZsYWcgc29tZWhvdy4gIFdlIGRvIHRoaXMgYnkgcmVhZGluZworZnJvbSB0aGUgcGxhdGZvcm0gZmlsZSwgYW5kIHNldHRpbmcgYSBuZXcgX3BsYXRmb3JtX2dudSBhbmQgcmVsYXRlZCB2YXJzLgorCitUaGUgZGVmYXVsdCB2YWx1ZXMgb2YgX2hvc3RfY3B1LCBfaG9zdF92ZW5kb3IgYW5kIF9ob3N0X29zIGFyZSBjaGFuZ2VkIHRvCityZWZlcmVuY2UgZWl0aGVyIHRoZSBhdXRvbWF0aWNhbGx5IGRldGVybWluZWQgX3RhcmdldF8uLi4gb3IgX3BsYXRmb3JtXy4uLgordmFsdWVzLiAgVGhlIG1hY3JvcyBmaWxlIHVzZXMgdGhlIGNvbmZpZ3VyZSB0aW1lIGRlZmF1bHRzIGluIF9wbGF0Zm9ybV8uLi4KK3ZlcnNpb25zIGhhdmUgbm90IGJlZW4gZGVmaW5lZC4gIFRoaXMgcHJlc2VydmVzIGV4aXN0aW5nIGJlaGF2aW9yLCBidXQKK2Vuc3VyZXMgcmVhc29uYWJsZSBkZWZhdWx0cyBhcmUgYWx3YXlzIGF2YWlsYWJsZS4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9saWIvcnBtcmMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvcnBtcmMuYworKysrIHJwbS01LjQuMTQvbGliL3JwbXJjLmMKK0BAIC0zMjgsMTAgKzMyOCwxNSBAQCBzdGF0aWMgdm9pZCBzZXREZWZhdWx0cyh2b2lkKQorIAkvKkBtb2RpZmllcyBycG1HbG9iYWxNYWNyb0NvbnRleHQsIGludGVybmFsU3RhdGUgQCovCisgeworIAorLSNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKQorKyNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKSB8fCBkZWZpbmVkKFJQTV9WRU5ET1JfT0UpCisgICAgIGFkZE1hY3JvKE5VTEwsICJfdXNybGlicnBtIiwgTlVMTCwgX191c3JsaWJycG0sIFJNSUxfREVGQVVMVCk7CisgICAgIGFkZE1hY3JvKE5VTEwsICJfZXRjcnBtIiwgTlVMTCwgX19ldGNycG0sIFJNSUxfREVGQVVMVCk7CisgICAgIGFkZE1hY3JvKE5VTEwsICJfdmVuZG9yIiwgTlVMTCwgIiV7P19ob3N0X3ZlbmRvcn0leyE/X2hvc3RfdmVuZG9yOndyc30iLCBSTUlMX0RFRkFVTFQpOworKworKyAgICBhZGRNYWNybyhOVUxMLCAiX2hvc3RfY3B1IiwgTlVMTCwgIiV7P19wbGF0Zm9ybV9jcHV9JXshP19wbGF0Zm9ybV9jcHU6JXs/X3RhcmdldF9jcHV9fSIsIFJNSUxfREVGQVVMVCk7CisrICAgIGFkZE1hY3JvKE5VTEwsICJfaG9zdF92ZW5kb3IiLCBOVUxMLCAiJXs/X3BsYXRmb3JtX3ZlbmRvcn0leyE/X3BsYXRmb3JtX2NwdTolez9fdGFyZ2V0X3ZlbmRvcn19IiwgUk1JTF9ERUZBVUxUKTsKKysgICAgYWRkTWFjcm8oTlVMTCwgIl9ob3N0X29zIiwgTlVMTCwgIiV7P19wbGF0Zm9ybV9vc30leyE/X3BsYXRmb3JtX29zOiV7P190YXJnZXRfb3N9fSIsIFJNSUxfREVGQVVMVCk7CisrICAgIGFkZE1hY3JvKE5VTEwsICJfaG9zdF9nbnUiLCBOVUxMLCAiJXs/X3BsYXRmb3JtX2dudX0leyE/X3BsYXRmb3JtX2dudTolez9fZ251fX0iLCBSTUlMX0RFRkFVTFQpOworICNlbmRpZgorIAorICAgICBhZGRNYWNybyhOVUxMLCAiX3VzciIsIE5VTEwsIFVTUlBSRUZJWCwgUk1JTF9ERUZBVUxUKTsKK0BAIC00ODcsOSArNDkyLDIyIEBAIHN0YXRpYyBycG1SQyBycG1QbGF0Zm9ybShjb25zdCBjaGFyICogcGwKKyAJfQorIAorIAlpZiAoIXBhcnNlQ1ZPRyhwLCAmY3ZvZykgJiYgY3ZvZyAhPSBOVUxMKSB7CisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9PRSkKKysJICAgIGNoYXIgKiBfZ251ID0gTlVMTDsKKysKKysJICAgIGFkZE1hY3JvKE5VTEwsICJfcGxhdGZvcm1fY3B1IiwgTlVMTCwgY3ZvZy0+Y3B1LCAtMSk7CisrCSAgICBhZGRNYWNybyhOVUxMLCAiX3BsYXRmb3JtX3ZlbmRvciIsIE5VTEwsIGN2b2ctPnZlbmRvciwgLTEpOworKwkgICAgYWRkTWFjcm8oTlVMTCwgIl9wbGF0Zm9ybV9vcyIsIE5VTEwsIGN2b2ctPm9zLCAtMSk7CisrCisrCSAgICBpZiAoY3ZvZy0+Z251ICYmIGN2b2ctPmdudVswXSAhPSAnXDAnKQorKwkJX2dudSA9IHJwbUV4cGFuZCgiLSIsIGN2b2ctPmdudSwgTlVMTCk7CisrCisrCSAgICBhZGRNYWNybyhOVUxMLCAiX3BsYXRmb3JtX2dudSIsIE5VTEwsIChfZ251ID8gX2dudSA6ICIiKSwgLTEpOworKyNlbHNlCisgCSAgICBhZGRNYWNybyhOVUxMLCAiX2hvc3RfY3B1IiwgTlVMTCwgY3ZvZy0+Y3B1LCAtMSk7CisgCSAgICBhZGRNYWNybyhOVUxMLCAiX2hvc3RfdmVuZG9yIiwgTlVMTCwgY3ZvZy0+dmVuZG9yLCAtMSk7CisgCSAgICBhZGRNYWNybyhOVUxMLCAiX2hvc3Rfb3MiLCBOVUxMLCBjdm9nLT5vcywgLTEpOworKyNlbmRpZgorIAl9CisgCisgI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9PUEVOUEtHKSAvKiBleHBsaWNpdC1wbGF0Zm9ybSAqLworSW5kZXg6IHJwbS01LjQuMTQvbWFjcm9zL21hY3Jvcy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9tYWNyb3MvbWFjcm9zLmluCisrKysgcnBtLTUuNC4xNC9tYWNyb3MvbWFjcm9zLmluCitAQCAtOTAwLDkgKzkwMCw5IEBAICRfYXJiaXRyYXJ5X3RhZ3NfdGVzdHMJRm9vOkJhcgorICVfb3MJCQlAUlBNQ0FOT05PU0AKKyAlX2dudQkJCUBSUE1DQU5PTkdOVUAKKyAKKy0lX2hvc3RfcGxhdGZvcm0JCSV7X2hvc3RfY3B1fS0le19ob3N0X3ZlbmRvcn0tJXtfaG9zdF9vc30lez9fZ251fQorLSVfYnVpbGRfcGxhdGZvcm0JJXtfYnVpbGRfY3B1fS0le19idWlsZF92ZW5kb3J9LSV7X2J1aWxkX29zfSV7P19nbnV9CistJV90YXJnZXRfcGxhdGZvcm0JJXtfdGFyZ2V0X2NwdX0tJXtfdGFyZ2V0X3ZlbmRvcn0tJXtfdGFyZ2V0X29zfSV7P19nbnV9CisrJV9ob3N0X3BsYXRmb3JtCQkle19ob3N0X2NwdX0tJXtfaG9zdF92ZW5kb3J9LSV7X2hvc3Rfb3N9JXs/X2hvc3RfZ251fSV7IT9faG9zdF9nbnU6JXs/X2dudX19CisrJV9idWlsZF9wbGF0Zm9ybQkle19idWlsZF9jcHV9LSV7X2J1aWxkX3ZlbmRvcn0tJXtfYnVpbGRfb3N9JXs/X2hvc3RfZ251fSV7IT9faG9zdF9nbnU6JXs/X2dudX19CisrJV90YXJnZXRfcGxhdGZvcm0JJXtfdGFyZ2V0X2NwdX0tJXtfdGFyZ2V0X3ZlbmRvcn0tJXtfdGFyZ2V0X29zfSV7P19ob3N0X2dudX0leyE/X2hvc3RfZ251OiV7P19nbnV9fQorIAorICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAjIC0tLS0gY29uZmlndXJlIG1hY3Jvcy4KK0BAIC05NDUsOSArOTQ1LDEwIEBAICRfYXJiaXRyYXJ5X3RhZ3NfdGVzdHMJRm9vOkJhcgorICVfYnVpbGRfb3MJCSV7X2hvc3Rfb3N9CisgJV9ob3N0CQkJQGhvc3RACisgJV9ob3N0X2FsaWFzCQlAaG9zdF9hbGlhc0Ale25pbH0KKy0lX2hvc3RfY3B1CQlAaG9zdF9jcHVACistJV9ob3N0X3ZlbmRvcgkJQGhvc3RfdmVuZG9yQAorLSVfaG9zdF9vcwkJQGhvc3Rfb3NACisrJV9ob3N0X2NwdQkJJXs/X3BsYXRmb3JtX2NwdX0leyE/X3BsYXRmb3JtX2NwdTole19hcmNofX0KKyslX2hvc3RfdmVuZG9yCQklez9fcGxhdGZvcm1fdmVuZG9yfSV7IT9fcGxhdGZvcm1fdmVuZG9yOiV7X3ZlbmRvcn19CisrJV9ob3N0X29zCQklez9fcGxhdGZvcm1fb3N9JXshP19wbGF0Zm9ybV9vczole19vc319CisrJV9ob3N0X2dudQkJJXs/X3BsYXRmb3JtX2dudX0leyE/X3BsYXRmb3JtX2dudTole19nbnV9fQorICVfdGFyZ2V0CQkle19ob3N0fQorICVfdGFyZ2V0X2FsaWFzCQkle19ob3N0X2FsaWFzfQorICVfdGFyZ2V0X2NwdQkJJXtfaG9zdF9jcHV9CitJbmRleDogcnBtLTUuNC4xNC9weXRob24vcnBtbW9kdWxlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcHl0aG9uL3JwbW1vZHVsZS5jCisrKysgcnBtLTUuNC4xNC9weXRob24vcnBtbW9kdWxlLmMKK0BAIC02NSw4ICs2NSw4IEBAIHN0YXRpYyBQeU9iamVjdCAqIGFyY2hTY29yZShQeU9iamVjdCAqIHMKKyAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInMiLCBrd2xpc3QsICZhcmNoKSkKKyAJcmV0dXJuIE5VTEw7CisgCistI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpCistICAgIHBsYXRmb3JtID0gcnBtRXhwYW5kKGFyY2gsICItJXtfaG9zdF92ZW5kb3J9IiwgIi0le19ob3N0X29zfSV7P19nbnV9IiwgTlVMTCk7CisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpIHx8IGRlZmluZWQoUlBNX1ZFTkRPUl9PRSkKKysgICAgcGxhdGZvcm0gPSBycG1FeHBhbmQoYXJjaCwgIi0le19ob3N0X3ZlbmRvcn0iLCAiLSV7X2hvc3Rfb3N9JXs/X2hvc3RfZ251fSV7IT9faG9zdF9nbnU6JXs/X2dudX19IiwgTlVMTCk7CisgI2Vsc2UKKyAgICAgcGxhdGZvcm0gPSBycG1FeHBhbmQoYXJjaCwgIi0iLCAiJXtfdmVuZG9yfSIsICItIiwgIiV7X29zfSIsIE5VTEwpOworICNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcHktaW5pdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXB5LWluaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdkNDA3ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXB5LWluaXQucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorcHl0aG9uL3JwbW1vZHVsZXMuYzogQ2hhbmdlIHRoZSB3YXkgdGhlIHB5dGhvbiBtb2R1bGUgbG9hZHMgdGhlIFJQTSBjb25maWcKKworSW4gb3JkZXIgdG8gc3VwcG9ydCB0aGUgUlBNX1ZFTkRPUl9XSU5EUklWRVIgZW5oYW5jZW1lbnQgb2YgZHluYW1pYworcnVudGltZSByZWxvY2F0aW9uIHBhdGhzLCB3ZSBuZWVkIHRvIGNhbGwgcnBtY2xpSW5pdCBpbnN0ZWFkIG9mIAorcnBtUmVhZENvbmZpZ0ZpbGVzLiAgVGhlIHJwbWNsaUluaXQgd2lsbCBlbmQgdXAgY2FsbGluZyBycG1SZWFkQ29uZmlnRmlsZXMKK2FmdGVyIHRoZSBuZWNlc3NhcnkgcmVsb2NhdGlvbiBwcm9jZXNzaW5nIChpZiBlbmFibGVkKS4KKworQ29kZSBkZXJpdmVkIGZyb20gY2hhbmdlcyBzdWdnZXN0ZWQgYnkgUGF1bCBFZ2dsZXRvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvcHl0aG9uL3JwbW1vZHVsZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3B5dGhvbi9ycG1tb2R1bGUuYworKysrIHJwbS01LjQuMTQvcHl0aG9uL3JwbW1vZHVsZS5jCitAQCAtMzkyLDcgKzM5Miw4IEBAIHZvaWQgaW5pdF9ycG0odm9pZCkKKyAgICAgaWYgKFB5X0F0RXhpdChycG1fZXhpdGhvb2spID09IC0xKQorIAlyZXR1cm47CisgCistICAgIHJwbVJlYWRDb25maWdGaWxlcyhOVUxMLCBOVUxMKTsKKysgICAgY29uc3QgY2hhciAqYXJndlsxXSA9IHsicnBtbW9kdWxlIiwgMH07CisrICAgIHJwbWNsaUluaXQoMSwgYXJndiwgTlVMTCk7CisgCisgICAgIGQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVhbHBhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1yZWFscGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODEwMTIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVhbHBhdGgucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorY2hyb290OiByZWFscGF0aCBpcyByZXF1aXJlZCBiZWZvcmUgZXhwYW5kaW5nIF9kYnBhdGgKKworX3VzciB0dXJuZWQgb3V0IHRvIGJlIGEgcmVsYXRpdmUgcGF0aCB0byBzdXBwb3J0IGR5YW5taWMgY29uZmlnLCBidXQgaXQncworYmVpbmcgdXNlZCBzb21ld2hlcmUgYXMgYSBpbmRpY2F0b3IgdG8gbG9jYXRlIHN1YnN0cmluZ3MsIHNvIHdlIG11c3QgZ2V0Cit0aGUgcmVhbCBwYXRoIG9mIGl0IGluIGFkdmFuY2UuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSAoT3BlbkVtYmVkZGVkIHNwZWNpZmljKQorCitTaWduZWQtb2ZmLWJ5OiBNaW5nIExpdSA8bWluZy5saXVAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtdXJwTiBhL3JwbWlvL3JwbXJwYy5jIGIvcnBtaW8vcnBtcnBjLmMKKy0tLSBhL3JwbWlvL3JwbXJwYy5jCisrKysgYi9ycG1pby9ycG1ycGMuYworQEAgLTI1Nyw3ICsyNTcsOSBAQCBpbnQgT3Blbihjb25zdCBjaGFyICogcGF0aCwgaW50IGZsYWdzLCBtCisgICAgIC8qIFhYWCBpZiB0aGUgb3BlbigyKSBmYWlscywgdHJ5IHRvIHN0cmlwIGEgcG9zc2libGUgY2hyb290KDIpIHByZWZpeC4gKi8KKyAgICAgaWYgKGZkbm8gPCAwICYmIGVycm5vID09IEVOT0VOVCkgeworIAljb25zdCBjaGFyICpkYnBhdGggPSBycG1FeHBhbmQoIiV7P19kYnBhdGh9LyIsIE5VTEwpOworLQljb25zdCBjaGFyICogZm4gPSBzdHJzdHIocGF0aCArIDEsIGRicGF0aCk7CisrCWNoYXIgcmVzb2x2ZWRfZGJwYXRoW1BBVEhfTUFYXTsKKysJcmVhbHBhdGgoZGJwYXRoLCByZXNvbHZlZF9kYnBhdGgpOworKwljb25zdCBjaGFyICogZm4gPSBzdHJzdHIocGF0aCArIDEsIHJlc29sdmVkX2RicGF0aCk7CisgCWlmIChmbikKKyAJICAgIGZkbm8gPSBvcGVuKGZuLCBmbGFncywgbW9kZSk7CisgCWRicGF0aCA9IF9mcmVlKGRicGF0aCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1yZWxvYy1tYWNyb3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1yZWxvYy1tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlmZTUyNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJlbG9jLW1hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDMxIEBACittYWNyb3M6IFVzZSBkeWFubWljIGNvbmZpZyB2cyBoYXJkIGNvZGVkIHNldHRpbmdzCisKK1doZW4gdGhlIGR5bmFtaWMsIHJ1bnRpbWUgcmVsb2NhdGlvbiBpcyBlbmFibGVzIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIAorUlBNIG1hY3JvIGZpbGUgZG9lcyBub3Qgb3ZlcnJpZGUgdGhlIGR5bmFtaWMgc2V0dGluZ3MuICBGaXggdGhpcyBieSBmb3JjaW5nIHRoZQorZHluYW1pYyB2ZXJzaW9uIHRvIGJlIHVzZWQgaW4gYWxsIGNhc2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgKE9wZW5FbWJlZGRlZCBzcGVjaWZpYykKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9tYWNyb3MvbWFjcm9zLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL21hY3Jvcy9tYWNyb3MuaW4KKysrKyBycG0tNS40LjE0L21hY3Jvcy9tYWNyb3MuaW4KK0BAIC0yNywxMSArMjcsMTIgQEAKKyAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIyAtLS0tIGZpbGVzeXN0ZW0gbWFjcm9zLgorICMKKy0lX3VzcgkJCUB1c3JwcmVmaXhACisrJV91c3IJCQkle191c3JsaWJycG19Ly4uLy4uCisgJV91c3JzcmMJCSV7X3Vzcn0vc3JjCistJV92YXIJCQlAdmFycHJlZml4QAorLSVfdXNybGlicnBtCQlAVVNSTElCUlBNQAorLSVfZXRjcnBtCQlAU1lTQ09ORklHRElSQAorKyVfdmFyCQkJJXtfdXNyfS8uLi92YXIKKysjIFRoZSBkeW5hbWljIHJlbG9jYXRpb24gY29kZSBzZXRzIHRoZSBmb2xsb3dpbmcgdHdvIGl0ZW1zCisrIyVfdXNybGlicnBtCQlAVVNSTElCUlBNQAorKyMlX2V0Y3JwbQkJQFNZU0NPTkZJR0RJUkAKKyAKKyAlX19vYmpleHQJCUBvYmpleHRACisgJV9fbGliZXh0CQlAbGliZXh0QApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVtb3ZlLXN5a2NwYXJzZS1kZWNsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVtb3ZlLXN5a2NwYXJzZS1kZWNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2OTAxNmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1yZW1vdmUtc3lrY3BhcnNlLWRlY2wucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorSW5kZXg6IHJwbS01LjQuMTQvc3ljay9saWIvc3ljay5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3N5Y2svbGliL3N5Y2suaAorKysrIHJwbS01LjQuMTQvc3ljay9saWIvc3ljay5oCitAQCAtNjIxLDkgKzYyMSw2IEBAIGxvbmcgc3lja19zZXFfY291bnQoIFN5Y2tOb2RlICpzZXEgKQorICAqLworIHZvaWQgc3lja2Vycm9yKCBjaGFyICptc2cgKQorIAkvKkAqLzsKKy1pbnQgc3lja3BhcnNlKCB2b2lkICogKQorLQkvKkBnbG9iYWxzIGZpbGVTeXN0ZW0gQCovCistCS8qQG1vZGlmaWVzIGZpbGVTeXN0ZW0gQCovOworIC8qIFhYWCB1bmlvbiBZWVNUWVBFICpzeWNrbHZhbCBoYXMgaXNzdWVzIG9uIE1hYyBPUyBYLiAqLworIGludCBzeWNrbGV4KCB2b2lkICpfc3lja2x2YWwsIFN5Y2tQYXJzZXIgKnBhcnNlciApCisgCS8qQG1vZGlmaWVzIF9zeWNrbHZhbCwgcGFyc2VyIEAqLzsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJlc29sdmVkZXAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1yZXNvbHZlZGVwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YTI0M2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1yZXNvbHZlZGVwLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK2xpYi9ycG10cy5jOiBFbnN1cmUgdGhhdCB3ZSBjaGVjayBib3RoIHByb3ZpZGVuYW1lIGFuZCBmaWxlcGF0aHMKKworV2hlbiBsb29raW5nIHVwIGEgbWlzc2luZyBkZXBlbmRlbmNpZXMsIHN1Y2ggYXMgL2Jpbi9zaCwgd2UgbmVlZCB0byBsb29rdXAKK2luIGJvdGggdGhlIHByb3ZpZGVuYW1lIGFuZCBmaWxlcGF0aHMgREIsIG5vdCBqdXN0IHRoZSBmaWxlcGF0aHMgREIuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9ycG10cy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9ycG10cy5jCisrKysgcnBtLTUuNC4xNC9saWIvcnBtdHMuYworQEAgLTQxMCw4ICs0MTAsOCBAQCBmcHJpbnRmKHN0ZGVyciwgIi0tPiAlcyglcCwlcCwlcClcbiIsIF9fCisgCWlmIChzZGIgPT0gTlVMTCkKKyAJICAgIGNvbnRpbnVlOworIAorLQkvKiBMb29rIGZvciBhIG1hdGNoaW5nIFByb3ZpZGVzOiBpbiBzdWdnZXN0ZWQgdW5pdmVyc2UuICovCistCXJwbXRhZyA9ICgqa2V5cCA9PSAnLycgPyBSUE1UQUdfRklMRVBBVEhTIDogUlBNVEFHX1BST1ZJREVOQU1FKTsKKysJcnBtdGFnID0gUlBNVEFHX1BST1ZJREVOQU1FOworKyAgICAgICBkbyB7CisgCW1pID0gcnBtbWlJbml0KHNkYiwgcnBtdGFnLCBrZXlwLCBrZXlsZW4pOworIAl3aGlsZSAoKGggPSBycG1taU5leHQobWkpKSAhPSBOVUxMKSB7CisgCSAgICBzaXplX3QgaG5hbWVsZW47CitAQCAtNDQ2LDYgKzQ0NiwxNSBAQCBmcHJpbnRmKHN0ZGVyciwgIi0tPiAlcyglcCwlcCwlcClcbiIsIF9fCisgCSAgICBiaG5hbWVsZW4gPSBobmFtZWxlbjsKKyAJfQorIAltaSA9IHJwbW1pRnJlZShtaSk7CisrCisrCWlmIChiaCA9PSBOVUxMICYmICprZXlwID09ICcvJyAmJiBycG10YWcgPT0gUlBNVEFHX1BST1ZJREVOQU1FKSB7CisrCSAgIHJwbXRhZyA9IFJQTVRBR19GSUxFUEFUSFM7CisrCSAgIGNvbnRpbnVlOworKyAgICAgICAgfQorKworKyAgICAgICAgYnJlYWs7CisrICAgICAgfSB3aGlsZSAoMSk7CisrCisgICAgIH0KKyAKKyAgICAgLyogSXMgdGhlcmUgYSBzdWdnZXN0ZWQgcmVzb2x1dGlvbj8gKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJwbXBncC1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1ycG1wZ3AtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZmVlZDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1ycG1wZ3AtZml4LnBhdGNoCkBAIC0wLDAgKzEsNjcgQEAKK3JwbXBncC5jOiBBZGQgbWlzc2luZyBpZiBkZWZzIGFyb3VuZCBjcnlwdG8gaW1wbGVtZW50YXRpb25zCisKK1dpdGhvdXQgdGhlc2UsIHRoZSBzeXN0ZW0gd2lsbCBlcnJvciB0cnlpbmcgdG8gZmluZCB0aGUgY29ycmVjdCBjcnlwdG8gCitsaWJyYXJ5IHRvIHVzZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS9ycG1pby9ycG1wZ3AuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS5vcmlnL3JwbWlvL3JwbXBncC5jCisrKysgcnBtL3JwbWlvL3JwbXBncC5jCitAQCAtMTMzOSwxNiArMTMzOSwyNiBAQCBpbnQgcGdwRXhwb3J0UHVia2V5KHBncERpZyBkaWcpCisgeworICAgICBpbnQgcmMgPSAwOwkJLyogYXNzdW1lIGZhaWx1cmUgKi8KKyAKKysjaWYgZGVmaW5lZChXSVRIX0JFRUNSWVBUKQorICAgICBpZiAocGdwSW1wbFZlY3MgPT0gJnJwbWJjSW1wbFZlY3MpCisgCXJjID0gcnBtYmNFeHBvcnRQdWJrZXkoZGlnKTsKKysjZW5kaWYKKysjaWYgZGVmaW5lZChXSVRIX1NTTCkKKyAgICAgaWYgKHBncEltcGxWZWNzID09ICZycG1zc2xJbXBsVmVjcykKKyAJcmMgPSBycG1zc2xFeHBvcnRQdWJrZXkoZGlnKTsKKysjZW5kaWYKKysjaWYgZGVmaW5lZChXSVRIX05TUykKKyAgICAgaWYgKHBncEltcGxWZWNzID09ICZycG1uc3NJbXBsVmVjcykKKyAJcmMgPSBycG1uc3NFeHBvcnRQdWJrZXkoZGlnKTsKKysjZW5kaWYKKysjaWYgZGVmaW5lZChXSVRIX0dDUllQVCkKKyAgICAgaWYgKHBncEltcGxWZWNzID09ICZycG1nY0ltcGxWZWNzKQorIAlyYyA9IHJwbWdjRXhwb3J0UHVia2V5KGRpZyk7CisrI2VuZGlmCisrI2lmIGRlZmluZWQoV0lUSF9UT01DUllQVCkKKyAgICAgaWYgKHBncEltcGxWZWNzID09ICZycG1sdGNJbXBsVmVjcykKKyAJcmMgPSBycG1sdGNFeHBvcnRQdWJrZXkoZGlnKTsKKysjZW5kaWYKKyAgICAgcmV0dXJuIHJjOworIH0KKyAKK0BAIC0xMzU2LDE2ICsxMzY2LDI2IEBAIGludCBwZ3BFeHBvcnRTaWduYXR1cmUocGdwRGlnIGRpZywgRElHRVMKKyB7CisgICAgIGludCByYyA9IDA7CQkvKiBhc3N1bWUgZmFpbHVyZSAqLworIAorKyNpZiBkZWZpbmVkKFdJVEhfQkVFQ1JZUFQpCisgICAgIGlmIChwZ3BJbXBsVmVjcyA9PSAmcnBtYmNJbXBsVmVjcykKKyAJcmMgPSBycG1iY0V4cG9ydFNpZ25hdHVyZShkaWcsIGN0eCk7CisrI2VuZGlmCisrI2lmIGRlZmluZWQoV0lUSF9TU0wpCisgICAgIGlmIChwZ3BJbXBsVmVjcyA9PSAmcnBtc3NsSW1wbFZlY3MpCisgCXJjID0gcnBtc3NsRXhwb3J0U2lnbmF0dXJlKGRpZywgY3R4KTsKKysjZW5kaWYKKysjaWYgZGVmaW5lZChXSVRIX05TUykKKyAgICAgaWYgKHBncEltcGxWZWNzID09ICZycG1uc3NJbXBsVmVjcykKKyAJcmMgPSBycG1uc3NFeHBvcnRTaWduYXR1cmUoZGlnLCBjdHgpOworKyNlbmRpZgorKyNpZiBkZWZpbmVkKFdJVEhfR0NSWVBUKQorICAgICBpZiAocGdwSW1wbFZlY3MgPT0gJnJwbWdjSW1wbFZlY3MpCisgCXJjID0gcnBtZ2NFeHBvcnRTaWduYXR1cmUoZGlnLCBjdHgpOworKyNlbmRpZgorKyNpZiBkZWZpbmVkKFdJVEhfVE9NQ1JZUFQpCisgICAgIGlmIChwZ3BJbXBsVmVjcyA9PSAmcnBtbHRjSW1wbFZlY3MpCisgCXJjID0gcnBtbHRjRXhwb3J0U2lnbmF0dXJlKGRpZywgY3R4KTsKKysjZW5kaWYKKyAgICAgcmV0dXJuIHJjOworIH0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXNjcmlwdGxldGV4ZWNoZWxwZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1zY3JpcHRsZXRleGVjaGVscGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MjUzNzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1zY3JpcHRsZXRleGVjaGVscGVyLnBhdGNoCkBAIC0wLDAgKzEsMTYwIEBACitFbmFibGUgYSBjcm9zcy1pbnN0YWxsIHNjcmlwdGxldCBoZWxwZXIuCisKK1RoZSBoZWxwZXIgaXMgY2FsbGVkIGZyb20gb3V0c2lkZSBvZiB0aGUgY2hyb290IHdpdGggdGhlIGFyZ3VtZW50czoKKworPHJvb3Q+IDxwcm9nPiA8c2NyaXB0PiA8YXJnMT4gWzxhcmcyPiAuLi4gPGFyZ04+XQorCitUaGUgaGVscGVyIHNjcmlwdCBpcyB1c2VkIGJ5IG9lLWNvcmUgdG8gZmFjaWxpdGF0ZSBzaGVsbCBzY3JpcHQgYWN0aW9ucyB0aGF0CitjYW4gbm90IGJlIHJ1biBmcm9tIHdpdGhpbiBhIGNocm9vdCBvbiBhIGZvcmVpZ24gdGFyZ2V0IHN5c3RlbSBkdXJpbmcgYQorY3Jvc3MgaW5zdGFsbC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvbGliL3BzbS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9wc20uYworKysrIHJwbS01LjQuMTQvbGliL3BzbS5jCitAQCAtODA2LDYgKzgwNiwxMCBAQCBzdGF0aWMgcnBtUkMgcnVuU2NyaXB0KHJwbXBzbSBwc20sIEhlYWRlCisgICAgIGludCB4eDsKKyAgICAgaW50IGk7CisgCisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysgICAgY29uc3QgY2hhciAqIHNjcmlwdGxldFdyYXBwZXIgPSBycG1FeHBhbmQoIiV7P19jcm9zc19zY3JpcHRsZXRfd3JhcHBlcn0iLCBOVUxMKTsKKysjZW5kaWYKKysgICAgCisgICAgIGlmIChwc20tPnNzdGF0ZXMgIT0gTlVMTCAmJiBpeCA+PSAwICYmIGl4IDwgUlBNU0NSSVBUX01BWCkKKyAJc3NwID0gcHNtLT5zc3RhdGVzICsgaXg7CisgICAgIGlmIChzc3AgIT0gTlVMTCkKK0BAIC04NzIsMTQgKzg3NiwyOSBAQCBhc3NlcnQoaGUtPnAuc3RyICE9IE5VTEwpOworIAkJKEZfSVNTRVQocHNtLCBVTk9SREVSRUQpID8gImEiIDogIiIpKTsKKyAKKyAgICAgaWYgKFBoZS0+cC5hcmd2ID09IE5VTEwpIHsKKy0JYXJndiA9IChjb25zdCBjaGFyICoqKSBhbGxvY2EoNSAqIHNpemVvZigqYXJndikpOworLQlhcmd2WzBdID0gIi9iaW4vc2giOworLQlhcmdjID0gMTsKKysJYXJndiA9IChjb25zdCBjaGFyICoqKSBhbGxvY2EoNyAqIHNpemVvZigqYXJndikpOworKwlhcmdjID0gMDsKKysgICAgfSBlbHNlIHsKKysJYXJndiA9IChjb25zdCBjaGFyICoqKSBhbGxvY2EoKFBoZS0+YyArIDYpICogc2l6ZW9mKCphcmd2KSk7CisrCWFyZ2MgPSAwOworKyAgICB9CisrCisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysgICAgaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpIHsKKysJYXJndlthcmdjKytdID0gc2NyaXB0bGV0V3JhcHBlcjsKKysJYXJndlthcmdjXSA9IHJwbXRzUm9vdERpcih0cyk7CisrCWlmICghYXJndlthcmdjXSB8fCAhKmFyZ3ZbYXJnY10pCisrCSAgIGFyZ3ZbYXJnY10gPSAiLyI7CisrCWFyZ2MrKzsKKysgICAgfQorKyNlbmRpZgorKworKyAgICBpZiAoUGhlLT5wLmFyZ3YgPT0gTlVMTCkgeworKwlhcmd2W2FyZ2MrK10gPSAiL2Jpbi9zaCI7CisgCWxkY29uZmlnX2RvbmUgPSAwOworICAgICB9IGVsc2UgeworLQlhcmd2ID0gKGNvbnN0IGNoYXIgKiopIGFsbG9jYSgoUGhlLT5jICsgNCkgKiBzaXplb2YoKmFyZ3YpKTsKKy0JbWVtY3B5KGFyZ3YsIFBoZS0+cC5hcmd2LCBQaGUtPmMgKiBzaXplb2YoKmFyZ3YpKTsKKy0JYXJnYyA9IFBoZS0+YzsKKysJbWVtY3B5KChhcmd2ICsgYXJnYyksIFBoZS0+cC5hcmd2LCBQaGUtPmMgKiBzaXplb2YoKmFyZ3YpKTsKKysJYXJnYyArPSBQaGUtPmM7CisgCWxkY29uZmlnX2RvbmUgPSAobGRjb25maWdfcGF0aCAmJiAhc3RyY21wKGFyZ3ZbMF0sIGxkY29uZmlnX3BhdGgpCisgCQk/IDEgOiAwKTsKKyAgICAgfQorQEAgLTkzMCw3ICs5NDksMTIgQEAgYXNzZXJ0KGhlLT5wLnN0ciAhPSBOVUxMKTsKKyAJICAgIGdvdG8gZXhpdDsKKyAKKyAJaWYgKHJwbUlzRGVidWcoKSAmJgorLQkgICAgKCFzdHJjbXAoYXJndlswXSwgIi9iaW4vc2giKSB8fCAhc3RyY21wKGFyZ3ZbMF0sICIvYmluL2Jhc2giKSkpCisrCSAgICAoIXN0cmNtcChhcmd2WzBdLCAiL2Jpbi9zaCIpIHx8ICFzdHJjbXAoYXJndlswXSwgIi9iaW4vYmFzaCIpKQorKyNpZmRlZiBSUE1fVkVORE9SX09FCisrCSAgICB8fCAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlciAmJiAhc3RyY21wKGFyZ3ZbMV0sICIvYmluL3NoIikpCisrCSAgICB8fCAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlciAmJiAhc3RyY21wKGFyZ3ZbMV0sICIvYmluL2Jhc2giKSkKKysjZW5kaWYKKysJICAgKQorIAl7CisgCSAgICBzdGF0aWMgY29uc3QgY2hhciBzZXRfeFtdID0gInNldCAteFxuIjsKKyAJICAgIG53ID0gRndyaXRlKHNldF94LCBzaXplb2Yoc2V0X3hbMF0pLCBzaXplb2Yoc2V0X3gpLTEsIGZkKTsKK0BAIC0xMDY1LDEyICsxMDg5LDIyIEBAIGFzc2VydChoZS0+cC5zdHIgIT0gTlVMTCk7CisgCisgCXsgICBjb25zdCBjaGFyICogcm9vdERpciA9IHJwbXRzUm9vdERpcih0cyk7CisgCSAgICBpZiAoIXJwbXRzQ2hyb290RG9uZSh0cykgJiYgcm9vdERpciAhPSBOVUxMICYmCisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJCSEoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikgJiYKKysjZW5kaWYKKyAJCSEocm9vdERpclswXSA9PSAnLycgJiYgcm9vdERpclsxXSA9PSAnXDAnKSkKKyAJICAgIHsKKyAJCS8qQC1tb2RvYnNlcnZlckAqLworIAkJeHggPSBDaHJvb3Qocm9vdERpcik7CisgCQkvKkA9bW9kb2JzZXJ2ZXJAKi8KKyAJICAgIH0KKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKwkgICAgaWYgKCFycG10c0Nocm9vdERvbmUodHMpICYmIHJvb3REaXIgIT0gTlVMTCAmJgorKwkJKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpICYmCisrCQkhKHJvb3REaXJbMF0gPT0gJy8nICYmIHJvb3REaXJbMV0gPT0gJ1wwJykpCisrCQl4eCA9IENoZGlyKHJvb3REaXIpOworKwkgICAgZWxzZSAKKysjZW5kaWYKKyAJICAgIHh4ID0gQ2hkaXIoIi8iKTsKKyAJICAgIHJwbWxvZyhSUE1MT0dfREVCVUcsIERfKCIlczogJXMoJXMpXHRleGVjdiglcykgcGlkICVkXG4iKSwKKyAJCQlwc20tPnN0ZXBOYW1lLCBzbG4sIE5WUkEsCitAQCAtMjk4NSw2ICszMDE5LDEzIEBAIGFzc2VydChwc20tPnRlICE9IE5VTEwpOworICAgICBjYXNlIFBTTV9TQ1JJUFQ6CS8qIFJ1biBjdXJyZW50IHBhY2thZ2Ugc2NyaXB0bGV0cy4gKi8KKyAJLyogWFhYIHJ1bm5pbmcgJXZlcmlmeXNjcmlwdC8lc2FuaXR5Y2hlY2sgZG9lc24ndCBoYXZlIHBzbS0+dGUgKi8KKyAgICAgewlycG10eG4gX3BhcmVudCA9IChwc20gJiYgcHNtLT50ZSA/IHBzbS0+dGUtPnR4biA6IE5VTEwpOworKworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrICAgICAgICBjb25zdCBjaGFyICogc2NyaXB0bGV0V3JhcHBlciA9IHJwbUV4cGFuZCgiJXs/X2Nyb3NzX3NjcmlwdGxldF93cmFwcGVyfSIsIE5VTEwpOworKwlpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikKKysJICAgICByYyA9IHJwbXBzbU5leHQocHNtLCBQU01fQ0hST09UX09VVCk7CisrI2VuZGlmCisrCisgCXh4ID0gcnBtdHhuQmVnaW4ocnBtdHNHZXRSZGIodHMpLCBfcGFyZW50LCBOVUxMKTsKKyAJcmMgPSBydW5JbnN0U2NyaXB0KHBzbSk7CisgCWlmIChyYykKK0BAIC0yOTkyLDExICszMDMzLDI0IEBAIGFzc2VydChwc20tPnRlICE9IE5VTEwpOworIAllbHNlCisgCSAgICAgeHggPSBycG10eG5Db21taXQocnBtdHNHZXRSZGIodHMpLT5kYl90eG4pOworIAlycG10c0dldFJkYih0cyktPmRiX3R4biA9IE5VTEw7CisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpCisrCSAgICAgcmMgPSBycG1wc21OZXh0KHBzbSwgUFNNX0NIUk9PVF9JTik7CisrI2VuZGlmCisgICAgIH0JYnJlYWs7CisgICAgIGNhc2UgUFNNX1RSSUdHRVJTOgorIAkvKiBSdW4gdHJpZ2dlcnMgaW4gb3RoZXIgcGFja2FnZShzKSB0aGlzIHBhY2thZ2Ugc2V0cyBvZmYuICovCisgCWlmIChycG10c0ZsYWdzKHRzKSAmIFJQTVRSQU5TX0ZMQUdfVEVTVCkJYnJlYWs7CisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysgICAgICAgIGNvbnN0IGNoYXIgKiBzY3JpcHRsZXRXcmFwcGVyID0gcnBtRXhwYW5kKCIlez9fY3Jvc3Nfc2NyaXB0bGV0X3dyYXBwZXJ9IiwgTlVMTCk7CisrCWlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKQorKwkgICAgIHJjID0gcnBtcHNtTmV4dChwc20sIFBTTV9DSFJPT1RfT1VUKTsKKysjZW5kaWYKKyAJcmMgPSBydW5UcmlnZ2Vycyhwc20pOworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrCWlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKQorKwkgICAgIHJjID0gcnBtcHNtTmV4dChwc20sIFBTTV9DSFJPT1RfSU4pOworKyNlbmRpZgorIAlicmVhazsKKyAgICAgY2FzZSBQU01fSU1NRURfVFJJR0dFUlM6CisgCS8qIFJ1biB0cmlnZ2VycyBpbiB0aGlzIHBhY2thZ2Ugb3RoZXIgcGFja2FnZShzKSBzZXQgb2ZmLiAqLworQEAgLTMwMDYsNyArMzA2MCwxOCBAQCBhc3NlcnQocHNtLT50ZSAhPSBOVUxMKTsKKyAJICAgIEZfU0VUKHBzbSwgR09UVFJJR0dFUlMpOworIAl9CisgCWlmIChwc20tPnRyaWdnZXJzICE9IE5VTEwpCisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJeworKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBzY3JpcHRsZXRXcmFwcGVyID0gcnBtRXhwYW5kKCIlez9fY3Jvc3Nfc2NyaXB0bGV0X3dyYXBwZXJ9IiwgTlVMTCk7CisrCSAgICBpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikKKysJICAgICAgICAgcmMgPSBycG1wc21OZXh0KHBzbSwgUFNNX0NIUk9PVF9PVVQpOworKyNlbmRpZgorIAkgICAgcmMgPSBydW5JbW1lZFRyaWdnZXJzKHBzbSk7CisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJICAgIGlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKQorKwkgICAgICAgICByYyA9IHJwbXBzbU5leHQocHNtLCBQU01fQ0hST09UX0lOKTsKKysJfQorKyNlbmRpZgorIAlicmVhazsKKyAKKyAgICAgY2FzZSBQU01fUlBNSU9fRkxBR1M6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1zaG93cmMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1zaG93cmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMzOGI5NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXNob3dyYy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitXb3JrYXJvdW5kIGZvciBhIG1lbW9yeSBsZWFrIGluIC0tc2hvd3JjLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9saWIvcnBtcmMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvcnBtcmMuYworKysrIHJwbS01LjQuMTQvbGliL3JwbXJjLmMKK0BAIC0xMjI4LDExICsxMjI4LDE1IEBAIGludCBycG1TaG93UkMoRklMRSAqIGZwKQorIAkJaWYgKERORVZSICE9IE5VTEwpCisgCQkgICAgZnByaW50ZihmcCwgIiAgICAlc1xuIiwgRE5FVlIrMik7CisgCSAgICB9CisrI2lmIDAKKyAJICAgICh2b2lkKXJwbWRzRnJlZShkcyk7CisgCSAgICBkcyA9IE5VTEw7CisrI2VuZGlmCisgCSAgICBmcHJpbnRmKGZwLCAiXG4iKTsKKyAJfQorKyNpZiAwCisgCVBSQ08gPSBycG1kc0ZyZWVQUkNPKFBSQ08pOworKyNlbmRpZgorICAgICB9CisgCisgICAgIGlmIChycG1Jc1ZlcmJvc2UoKSkgewpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tdGFnLWdlbmVyYXRlLWVuZGlhbi1jb252ZXJzaW9uLWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXRhZy1nZW5lcmF0ZS1lbmRpYW4tY29udmVyc2lvbi1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgzMjc1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXRhZy1nZW5lcmF0ZS1lbmRpYW4tY29udmVyc2lvbi1maXgucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorZml4IGEgZW5kaWFuIGluY29tcGF0aWJsZSBlcnJvciBpbiBnZW5lcmF0aW5nIHJwbSB0YWcKKworQSBmbGF3IHdhcyBmb3VuZCBpbiB0aGUgd2F5IHJwbSBnZW5lcmF0aW5nIGFyYml0cmFyeSB0YWdzLCB3aGljaCBsZWFkcyB0byBhCitpbmNvcnJlY3QgcXVlcnkgcmVzdWx0LCB0aGlzIGlzc3VlIGlzIGludHJvZHVjZWQgYnkgYSBpbmNvbXBhdGlibGUgZW5kaWFuZXNzCit3aGVuIHRoZSBnZW5lcmF0aW5nIHByb2Nlc3MgaXMgZXhlY3V0ZWQgb24gZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuCisKK1RoaXMgcGF0Y2ggcmVzb2x2ZXMgaXQgYnkgdGFraW5nIHRoZSBieXRlIG9yZGVyIHRoYXQgaG9zdCB1c2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWluZyBMaXUgPG1pbmcubGl1QHdpbmRyaXZlci5jb20+CistLS0KKyB0YWduYW1lLmMgfCAgIDE2ICsrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKQorCitJbmRleDogcnBtLTUuNC4xNC9ycG1kYi90YWduYW1lLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtZGIvdGFnbmFtZS5jCisrKysgcnBtLTUuNC4xNC9ycG1kYi90YWduYW1lLmMKK0BAIC0zLDYgKzMsMTkgQEAKKyAgKi8KKyAKKyAjaW5jbHVkZSAic3lzdGVtLmgiCisrI2luY2x1ZGUgPGVuZGlhbi5oPgorKworKy8qIERvbid0IHJlZGVmaW5lIHRoaXMgbWFjcm8gaWYgaXQgYWxyZWFkeSBleGlzdHMgKi8KKysjaWZuZGVmIGxlMzJ0b2gKKysjaWZkZWYgX19VU0VfQlNECisrI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CisrI2lmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKysjZGVmaW5lIGxlMzJ0b2goeCkgKHgpCisrI2Vsc2UKKysjZGVmaW5lIGxlMzJ0b2goeCkgX19ic3dhcF8zMih4KQorKyNlbmRpZgorKyNlbmRpZiAvKiBfX1VTRV9CU0QgKi8KKysjZW5kaWYgLyogbGUzMnRvaCAqLworIAorICNpbmNsdWRlIDxycG1pb19pbnRlcm5hbC5oPgkvKiBYWFggRElHRVNUX0NUWCwgeHRvbG93ZXIsIHhzdHJjYXNlY21wICovCisgI2luY2x1ZGUgPHJwbW1hY3JvLmg+CitAQCAtMTUyLDcgKzE2NSwxMCBAQCBzdGF0aWMgcnBtVGFnIF90YWdHZW5lcmF0ZShjb25zdCBjaGFyICpzCisgICAgIHh4ID0gcnBtRGlnZXN0VXBkYXRlKGN0eCwgcywgbmIpOworICAgICB4eCA9IHJwbURpZ2VzdEZpbmFsKGN0eCwgJmRpZ2VzdCwgJmRpZ2VzdGxlbiwgMCk7CisgICAgIGlmIChkaWdlc3QgJiYgZGlnZXN0bGVuID4gNCkgeworKwkvKiBUaGUgdGFnIGlzIHN0b3JlZCBpbiBhIHVuaWZvcm0gYnl0ZSBvcmRlciBmb3IgY3Jvc3MtZW5kaWFuIGNvbXBhdGliaWxpdHkuCisrCSAgIFN3YXAgdG8gdGhlIGhvc3QgdXNlcy4gKi8KKyAJbWVtY3B5KCZ0YWcsIGRpZ2VzdCArIChkaWdlc3RsZW4gLSA0KSwgNCk7CisrCXRhZyA9IGxlMzJ0b2godGFnKTsKKyAJdGFnID0gKHJwbVRhZykgKHRhZyAmIDB4M2ZmZmZmZmYpOworIAl0YWcgPSAocnBtVGFnKSAodGFnIHwgMHg0MDAwMDAwMCk7CisgICAgIH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXRvb2xzLW10cmVlLUxERkxBR1MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS10b29scy1tdHJlZS1MREZMQUdTLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiODViZWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS10b29scy1tdHJlZS1MREZMQUdTLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1NvdXJjZTogTm9uZQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitBdXRob3I6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiAyMDExLTAzLTAzCitEZXNjcmlwdGlvbjoKK1RoaXMgcGF0Y2ggZml4ZXMgYnVpbGQgaXNzdWUgZm91bmQgd2hlbiBjb21waWxpbmcgcnBtLW5hdGl2ZSBvbiB1YnVudHUKKzExLjA0LWFscGhhLiBQcm9ibGVtIGlzIHRoYXQgbGlua2VyIGRvZXMgbm90IGdldCBjb3JyZWN0IHNldCBvZiBkZXBlbmRlbnQKK2xpYnJhcmllcyB3aGVuIGxpbmtpbmcgbXRyZWUgYmluYXJ5IHdoaWNoIHJlc3VsdHMgaW4gdW5kZWZpbmVkIHN5bWJvbHMKK2luIGxpYnJwbWlvLnNvLiBUaGlzIHBhdGNoIGFkZHMgY29ycmVjdCBmbGFncyB0byBtdHJlZV9MREFERCB0byBhY2NvdW50Citmb3IgcnBtaW8gZGVwcworCitJbmRleDogcnBtLTUuNC4xNC90b29scy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy90b29scy9NYWtlZmlsZS5hbQorKysrIHJwbS01LjQuMTQvdG9vbHMvTWFrZWZpbGUuYW0KK0BAIC0xODYsNyArMTg2LDcgQEAgZ3JlcF9MREFERCA9CQkkKFJQTUlPX0xEQUREX0NPTU1PTikKKyAKKyBtdHJlZV9TT1VSQ0VTID0JCXJwbW10cmVlLmMKKyBtdHJlZV9MREZMQUdTID0JCUBMREZMQUdTX1NUQVRJQ0AgJChMREZMQUdTKQorLW10cmVlX0xEQUREID0JCSQoUlBNX0xEQUREX0NPTU1PTikKKyttdHJlZV9MREFERCA9CQkkKFJQTUlPX0xEQUREX0NPTU1PTikKKyAKKyBycG1yZXBvX1NPVVJDRVMgPQlycG1yZXBvLmMKKyBycG1yZXBvX0NQUEZMQUdTID0JJChBTV9DUFBGTEFHUykgLUkkKHRvcF9zcmNkaXIpL3NjcmlwdHMgLUkkKHRvcF9idWlsZGRpcikvc2NyaXB0cyAkKENQUEZMQUdTKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tdXVpZC1pbmNsdWRlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tdXVpZC1pbmNsdWRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxM2Y4NGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS11dWlkLWluY2x1ZGUucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorQSBwYXRjaCB0byBmaXggYSBwcm9ibGVtIHdoZW4gY29tcGlsaW5nIHdpdGggdXVpZC4KKworV2hlbiBhdHRlbXB0aW5nIHRvIGJ1aWxkIHdpdGggdXVpZCBhbmQgYWxsIHRlc3RzIGNvbXBpbGluZyB3aWxsIGVycm9yIGJlY2F1c2UKK3V1aWQuaCBkb2Vzbid0IGV4aXN0IGluIHRoZSBycG0gdGFyYmFsbC4gRml4IHRoaXMgYnkgY2hhbmdpbmcgdGhlIGluY2x1ZGUgdG8KK3VzZSB0aGUgb25lIGluIG9zc3Agd2hpY2ggc29sdmVzIHRoZSBpc3N1ZS4gCisKK1RoZSByZWNpcGUgYWxyZWFkeSBkZXBlbmRzIG9uIG9zc3Agc28gb3NzcC91dWlkLmggd2lsbCBiZSB0aGVyZSB3aGVuIHJwbS1uYXRpdmUKK2lzIGJ1aWx0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTW9yZ2FuIExpdHRsZSA8bW9yZ2FuLmxpdHRsZUB3aW5kcml2ZXIuY29tPgorCisKK0luZGV4OiBycG0tNS40LjE0L2x1YS9sb2NhbC9sdXVpZC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2x1YS9sb2NhbC9sdXVpZC5jCisrKysgcnBtLTUuNC4xNC9sdWEvbG9jYWwvbHV1aWQuYworQEAgLTIxLDcgKzIxLDcgQEAKKyAKKyAjaWZkZWYgTFVBX1VTRV9VVUlECisgCistI2luY2x1ZGUgInV1aWQuaCIKKysjaW5jbHVkZSA8b3NzcC91dWlkLmg+CisgCisgLyogIEx1YSBtZXRob2Q6IDx1dWlkPiA9IHV1aWQuZ2VuZXJhdGUoPHZlcnNpb24+WywgPHV1aWQtbmFtZXNwYWNlPiwgPGRhdGE+XSkgICovCisgc3RhdGljIGludCBsdXVpZF9nZW5lcmF0ZShsdWFfU3RhdGUgKkwpCitJbmRleDogcnBtLTUuNC4xNC9ycG1pby9ycG11dWlkLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtaW8vcnBtdXVpZC5jCisrKysgcnBtLTUuNC4xNC9ycG1pby9ycG11dWlkLmMKK0BAIC0xNiw3ICsxNiw3IEBACisgI2luY2x1ZGUgInJwbWxvZy5oIgorICNpbmNsdWRlICJycG11dWlkLmgiCisgI2lmZGVmIFdJVEhfVVVJRAorLSNpbmNsdWRlICJ1dWlkLmgiCisrI2luY2x1ZGUgPG9zc3AvdXVpZC5oPgorICNlbmRpZgorICNpbmNsdWRlICJkZWJ1Zy5oIgorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0yY3BpbyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtMmNwaW8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmJjZWY2YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtMmNwaW8KQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisKKyMgUHJldmVudCBnYXdrID49IDQuMC54IGZyb20gZ2V0dGluZyBmdW5ueSBpZGVhcyB3cnQgVVRGIGluIHByaW50ZigpCitMQU5HPUMKKworcGtnPSQxCitpZiBbICIkcGtnIiA9ICIiIC1vICEgLWUgIiRwa2ciIF07IHRoZW4KKyAgICBlY2hvICJubyBwYWNrYWdlIHN1cHBsaWVkIiAxPiYyCisgICBleGl0IDEKK2ZpCisKK2xlYWRzaXplPTk2CitvPWBleHByICRsZWFkc2l6ZSArIDhgCitzZXQgYG9kIC1qICRvIC1OIDggLXQgdTEgJHBrZ2AKK2lsPWBleHByIDI1NiBcKiBcKCAyNTYgXCogXCggMjU2IFwqICQyICsgJDMgXCkgKyAkNCBcKSArICQ1YAorZGw9YGV4cHIgMjU2IFwqIFwoIDI1NiBcKiBcKCAyNTYgXCogJDYgKyAkNyBcKSArICQ4IFwpICsgJDlgCisjIGVjaG8gInNpZyBpbDogJGlsIGRsOiAkZGwiCisKK3NpZ3NpemU9YGV4cHIgOCArIDE2IFwqICRpbCArICRkbGAKK289YGV4cHIgJG8gKyAkc2lnc2l6ZSArIFwoIDggLSBcKCAkc2lnc2l6ZSBcJSA4IFwpIFwpIFwlIDggKyA4YAorc2V0IGBvZCAtaiAkbyAtTiA4IC10IHUxICRwa2dgCitpbD1gZXhwciAyNTYgXCogXCggMjU2IFwqIFwoIDI1NiBcKiAkMiArICQzIFwpICsgJDQgXCkgKyAkNWAKK2RsPWBleHByIDI1NiBcKiBcKCAyNTYgXCogXCggMjU2IFwqICQ2ICsgJDcgXCkgKyAkOCBcKSArICQ5YAorIyBlY2hvICJoZHIgaWw6ICRpbCBkbDogJGRsIgorCitoZHJzaXplPWBleHByIDggKyAxNiBcKiAkaWwgKyAkZGxgCitvPWBleHByICRvICsgJGhkcnNpemVgCitjb21wPWBkZCBpZj0kcGtnIGlicz0kbyBza2lwPTEgY291bnQ9MSAyPi9kZXYvbnVsbCB8IGRkIGJzPTMgY291bnQ9MSAyPiAvZGV2L251bGxgCisKK2d6PSJgZWNobyAuIHwgYXdrICd7IHByaW50ZigiJWMlYyIsIDB4MWYsIDB4OGIpOyB9J2AiCitsem1hPSJgZWNobyAuIHwgYXdrICd7IHByaW50ZigiJWNMWiIsIDB4ZmYpOyB9J2AiCit4ej0iYGVjaG8gLiB8IGF3ayAneyBwcmludGYoIiVjN3oiLCAweGZkKTsgfSdgIgorY2FzZSAiJGNvbXAiIGluCisgICAgQlpoKSAgICAgIGRkIGlmPSIkcGtnIiBpYnM9JG8gc2tpcD0xIDI+L2Rldi9udWxsIHwgYnVuemlwMiA7OworICAgICIkZ3oiKikgICBkZCBpZj0iJHBrZyIgaWJzPSRvIHNraXA9MSAyPi9kZXYvbnVsbCB8IGd1bnppcCA7OworICAgICIkeHoiKikgICBkZCBpZj0iJHBrZyIgaWJzPSRvIHNraXA9MSAyPi9kZXYvbnVsbCB8IHh6Y2F0IDs7CisgICAgIiRsem1hIiopIGRkIGlmPSIkcGtnIiBpYnM9JG8gc2tpcD0xIDI+L2Rldi9udWxsIHwgdW5sem1hIDs7CisgICAgKikgICAgICAgIGVjaG8gIlVucmVjb2duaXplZCBycG0gZmlsZTogJHBrZyI7IGV4aXQgMSA7OworZXNhYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1hdGNoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1hdGNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZDEzYWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbWF0Y2gucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorQWRkIGNvbmZpZ3VyZSBjaGVjayBmb3IgcnBtYXRjaCgpIGFuZCAKK2NyZWF0ZXMgYSBjb21wYXRhYmxlIG1hY3JvIGlmIGl0IGlzIG5vdCBwcm92aWRlZCBieSB0aGUgQyBsaWJyYXJ5LgorCitUaGlzIGlzIG5lZWRlZCBmb3IgdWNsaWJjIHNpbmNlIGl0IGRvZXMgbm90IGhhdmUgdGhlIGFib3ZlIGZ1bmN0aW9uCitpbXBsZW1lbnRlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9jb25maWd1cmUuYWMKKysrKyBycG0tNS40LjE0L2NvbmZpZ3VyZS5hYworQEAgLTk0Myw3ICs5NDMsNyBAQCBBQ19DSEVDS19GVU5DUyhbZG5sCisgICAgIGZ0b2sgZ2V0YWRkcmluZm8gZ2V0YXR0cmxpc3QgZ2V0Y3dkIGdldGRlbGltIGdldGxpbmUgZ2V0bW9kZSBnZXRuYW1laW5mbyBkbmwKKyAgICAgZ2V0cGFzc3BocmFzZSBnZXR4YXR0ciBnZXR3ZCBpY29udiBpbmV0X2F0b24gbGNoZmxhZ3MgbGNobW9kIGxjaG93biBkbmwKKyAgICAgbGdldHhhdHRyIGxzZXR4YXR0ciBsdXRpbWVzIG1hZHZpc2UgbWVtcGNweSBta2R0ZW1wIG1rc3RlbXAgbXRyYWNlIGRubAorLSAgICBwb3NpeF9mYWR2aXNlIHBvc2l4X2ZhbGxvY2F0ZSBwdXRlbnYgcmVhbHBhdGggcmVnY29tcCBzZWN1cmVfZ2V0ZW52IF9fc2VjdXJlX2dldGVudiBkbmwKKysgICAgcG9zaXhfZmFkdmlzZSBwb3NpeF9mYWxsb2NhdGUgcHV0ZW52IHJlYWxwYXRoIHJlZ2NvbXAgcnBtYXRjaCBzZWN1cmVfZ2V0ZW52IF9fc2VjdXJlX2dldGVudiBkbmwKKyAgICAgc2V0YXR0cmxpc3Qgc2V0ZW52IHNldGxvY2FsZSBzZXRtb2RlIHNldHhhdHRyIGRubAorICAgICBzaWdhZGRzZXQgc2lnZGVsc2V0IHNpZ2VtcHR5c2V0IHNpZ2hvbGQgc2lncmVsc2Ugc2lncGF1c2UgZG5sCisgICAgIHNpZ3Byb2NtYXNrIHNpZ3N1c3BlbmQgc2lnYWN0aW9uIGRubAorSW5kZXg6IHJwbS01LjQuMTQvc3lzdGVtLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvc3lzdGVtLmgKKysrKyBycG0tNS40LjE0L3N5c3RlbS5oCitAQCAtMzUzLDYgKzM1MywxNCBAQCBleHRlcm4gaW50IF90b2xvd2VyKGludCkgX19USFJPVwkvKkAqLzsKKyAjaW5jbHVkZSA8bGliZ2VuLmg+CisgI2VuZGlmCisgCisrI2lmbmRlZiBIQVZFX1JQTUFUQ0gKKysjZGVmaW5lIHJwbWF0Y2gobGluZSkgXAorKwkoIChsaW5lID09IE5VTEwpPyAtMSA6IFwKKysJICAoKmxpbmUgPT0gJ3knIHx8ICpsaW5lID09ICdZJyk/IDEgOiBcCisrCSAgKCpsaW5lID09ICduJyB8fCAqbGluZSA9PSAnTicpPyAwIDogXAorKwkgIC0xICkKKysjZW5kaWYKKysKKyAvKiAtLSBSZXRyb2ZpdCBnbGliYyBfX3Byb2duYW1lICovCisgI2lmIGRlZmluZWQgX19HTElCQ19fICYmIF9fR0xJQkNfXyA+PSAyCisgI2lmIF9fR0xJQkNfTUlOT1JfXyA+PSAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbWRlcHMtb2Vjb3JlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1kZXBzLW9lY29yZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmRkMWQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1kZXBzLW9lY29yZS5wYXRjaApAQCAtMCwwICsxLDE5NCBAQAorQWRkIGFuICJycG1kZXBzLW9lY29yZSIgYmluYXJ5IHdoaWNoIGFsbG93cyBiYXRjaCBwcm9jZXNzaW5nIG9mIGluZGl2aWR1YWwgZmlsZQorZGVwZW5kZW5jaWVzIGluIGEgc2ltaWxhciBtYW5uZXIgdG8gcnBtZGVwcyAtLXByb3ZpZGVzIC0tcmVxdWlyZXMgLXYsIHByZWZpeGluZworZWFjaCBsaW5lIG9mIG91dHB1dCB3aXRoIHRoZSBmaWxlbmFtZSB0aGF0IGhhcyB0aGUgZGVwZW5kZW5jeS4KKworVGhpcyBpcyBtdWNoIGZhc3RlciB0aGFuIGluZGl2aWR1YWxseSBjYWxsaW5nIHJwbWRlcHMgb24gZWFjaCBmaWxlLgorCitUaGlzIGJpbmFyeSBpcyB1c2VkIGJ5IHBhY2thZ2UuYmJjbGFzcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBTcGVjaWZpY10KKworUlAgMjAxMi8yLzcKKworLS0tCisgdG9vbHMvTWFrZWZpbGUuYW0gICAgICB8ICAgIDYgKystCisgdG9vbHMvcnBtZGVwcy1vZWNvcmUuYyB8ICAxNDcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxNTIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvcnBtZGVwcy1vZWNvcmUuYworCitJbmRleDogcnBtLTUuNC4xNC90b29scy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy90b29scy9NYWtlZmlsZS5hbQorKysrIHJwbS01LjQuMTQvdG9vbHMvTWFrZWZpbGUuYW0KK0BAIC02Miw3ICs2Miw3IEBAIHBrZ2Jpbl9QUk9HUkFNUyA9CVwKKyAJQFdJVEhfQVVHRUFTX0FVR1RPT0xAIGNocm9vdCBjcCBAV0lUSF9DVURGX0NVREZUT09MQCBmaW5kIG10cmVlIFwKKyAJQFdJVEhfU0VNQU5BR0VfU0VNT0RVTEVAIHdnZXQgXAorIAlycG1jYWNoZSBycG1kaWdlc3QgcnBtcmVwbyBycG1zcGVjZHVtcCBcCistCXJwbWNtcCBycG1kZXBzIHNxbGl0ZTMgQFdJVEhfS0VZVVRJTFNfUlBNS0VZQCBAV0lUSF9MSUJFTEZfREVCVUdFRElUQAorKwlycG1jbXAgcnBtZGVwcyBycG1kZXBzLW9lY29yZSBzcWxpdGUzIEBXSVRIX0tFWVVUSUxTX1JQTUtFWUAgQFdJVEhfTElCRUxGX0RFQlVHRURJVEAKKyBpZiBXSVRIX0RCCisgcGtnYmluX1BST0dSQU1TICs9CWRiY29udmVydAorIGVuZGlmCitAQCAtMTcyLDYgKzE3MiwxMCBAQCBycG1kZXBzX1NPVVJDRVMgPQlycG1kZXBzLmMKKyBycG1kZXBzX0xERkxBR1MgPQlATERGTEFHU19TVEFUSUNAICQoTERGTEFHUykKKyBycG1kZXBzX0xEQUREID0JCSQoUlBNX0xEQUREX0NPTU1PTikKKyAKKytycG1kZXBzX29lY29yZV9TT1VSQ0VTID0gIHJwbWRlcHMtb2Vjb3JlLmMKKytycG1kZXBzX29lY29yZV9MREZMQUdTID0gIEBMREZMQUdTX1NUQVRJQ0AgJChMREZMQUdTKQorK3JwbWRlcHNfb2Vjb3JlX0xEQUREID0gICAgJChSUE1fTERBRERfQ09NTU9OKQorKworIHJwbWRpZ2VzdF9TT1VSQ0VTID0JcnBtZGlnZXN0LmMKKyBycG1kaWdlc3RfTERGTEFHUyA9CUBMREZMQUdTX1NUQVRJQ0AgJChMREZMQUdTKQorIHJwbWRpZ2VzdF9MREFERCA9CSQoUlBNSU9fTERBRERfQ09NTU9OKQorSW5kZXg6IHJwbS01LjQuMTQvdG9vbHMvcnBtZGVwcy1vZWNvcmUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIHJwbS01LjQuMTQvdG9vbHMvcnBtZGVwcy1vZWNvcmUuYworQEAgLTAsMCArMSwxNDcgQEAKKysjaW5jbHVkZSAic3lzdGVtLmgiCisrY29uc3QgY2hhciAqX19wcm9nbmFtZTsKKysKKysjaW5jbHVkZSA8cnBtaW8uaD4KKysjaW5jbHVkZSA8cnBtaW90eXBlcy5oPgorKyNpbmNsdWRlIDxycG1jYi5oPgorKyNpbmNsdWRlIDxhcmd2Lmg+CisrI2luY2x1ZGUgPHJwbXR5cGVzLmg+CisrI2luY2x1ZGUgPHJwbXRhZy5oPgorKworKyNpbmNsdWRlIDxycG1kcy5oPgorKyNkZWZpbmUgICBfUlBNRkNfSU5URVJOQUwgICAgIC8qIFhYWCBmb3IgZGVidWdnaW5nICovCisrI2luY2x1ZGUgPHJwbWZjLmg+CisrCisrI2luY2x1ZGUgPHJwbWNsaS5oPgorKworKyNpbmNsdWRlICJkZWJ1Zy5oIgorKworKy8qQHVuY2hlY2tlZEAqLworK2NoYXIgKnByb2duYW1lOworKworKyNkZWZpbmUgICBSUE1ERVBfUlBNRkMgICAgICAgIDEKKysKKytzdGF0aWMgaW50IHJwbWRlcFByaW50KGNoYXIgKmZpbGVuYW1lLCBycG1kcyBkcywgRklMRSAqIGZwKQorK3sKKysgICAgaWYgKGZwID09IE5VTEwpIGZwID0gc3RkZXJyOworKworKyAgICBkcyA9IHJwbWRzSW5pdChkcyk7CisrICAgIHdoaWxlIChycG1kc05leHQoZHMpID49IDApIHsKKysgIGZwcmludGYoZnAsICIlcyAlczogJXNcbiIsIGZpbGVuYW1lLCBycG1kc1R5cGUoZHMpLCBycG1kc0RORVZSKGRzKSsyKTsKKysgICAgfQorKyAgICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBwb3B0T3B0aW9uIG9wdGlvbnNUYWJsZVtdID0geworKworKyB7IE5VTEwsICdcMCcsIFBPUFRfQVJHX0lOQ0xVREVfVEFCTEUsIHJwbWNsaUFsbFBvcHRUYWJsZSwgMCwKKysgIE5fKCJDb21tb24gb3B0aW9uczoiKSwKKysgIE5VTEwgfSwgCisrCisrICAgUE9QVF9BVVRPQUxJQVMKKysgICBQT1BUX0FVVE9IRUxQCisrICAgUE9QVF9UQUJMRUVORAorK307CisrCisrCisraW50CisrbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgICAgcG9wdENvbnRleHQgb3B0Q29uOworKyAgICBBUkdWX3QgYXYgPSBOVUxMOworKyAgICBycG1mYyBmYyA9IE5VTEw7CisrICAgIEZJTEUgKiBmcCA9IE5VTEw7CisrICAgIGludCBmbGFncyA9IDA7CisrICAgIGludCBhYyA9IDA7CisrICAgIGludCBlYyA9IDE7CisrICAgIGludCB4eDsKKysgICAgaW50IGk7CisrICAgIGNoYXIgYnVmW0JVRlNJWl07CisrICAgIGludCBuZGRpY3Q7CisrICAgIGNvbnN0IGNoYXIgKiBzOworKyAgICBjaGFyICogc2U7CisrICAgIGNvbnN0IGNoYXIgKiBmbjsKKysgICAgY29uc3QgY2hhciAqIE47CisrICAgIGNvbnN0IGNoYXIgKiBFVlI7CisrICAgIGV2ckZsYWdzIEZsYWdzOworKyAgICB1bnNpZ25lZCBjaGFyIGRlcHR5cGU7CisrICAgIGludCBpeDsKKysgICAgcnBtZHMgZHM7CisrCisrLypALW1vZG9ic2VydmVyQCovCisrICAgIGlmICgocHJvZ25hbWUgPSBzdHJyY2hyKGFyZ3ZbMF0sICcvJykpICE9IE5VTEwpCisrICBwcm9nbmFtZSsrOworKyAgICBlbHNlCisrICBwcm9nbmFtZSA9IGFyZ3ZbMF07CisrLypAPW1vZG9ic2VydmVyQCovCisrCisrICAgIG9wdENvbiA9IHJwbWNsaUluaXQoYXJnYywgYXJndiwgb3B0aW9uc1RhYmxlKTsKKysgICAgaWYgKG9wdENvbiA9PSBOVUxMKQorKyAgZ290byBleGl0OworKworKyAgICBhdiA9IHBvcHRHZXRBcmdzKG9wdENvbik7CisrICAgIGFjID0gYXJndkNvdW50KGF2KTsKKysKKysgICAgaWYgKGFjID09IDApIHsKKysgIGF2ID0gTlVMTDsKKysgIHh4ID0gYXJndkZnZXRzKCZhdiwgTlVMTCk7CisrICBhYyA9IGFyZ3ZDb3VudChhdik7CisrICAgIH0KKysKKysgICAgLyogTWFrZSBzdXJlIGZpbGUgbmFtZXMgYXJlIHNvcnRlZC4gKi8KKysgICAgeHggPSBhcmd2U29ydChhdiwgTlVMTCk7CisrCisrICAgIC8qIEJ1aWxkIGZpbGUgY2xhc3MgZGljdGlvbmFyeS4gKi8KKysgICAgZmMgPSBycG1mY05ldygpOworKyAgICB4eCA9IHJwbWZjQ2xhc3NpZnkoZmMsIGF2LCBOVUxMKTsKKysKKysgICAgLyogQnVpbGQgZmlsZS9wYWNrYWdlIGRlcGVuZGVuY3kgZGljdGlvbmFyeS4gKi8KKysgICAgeHggPSBycG1mY0FwcGx5KGZjKTsKKysKKysgICAgLyogR2VuZXJhdGUgcGVyLWZpbGUgaW5kaWNlcyBpbnRvIHBhY2thZ2UgZGVwZW5kZW5jaWVzLiAqLworKyAgICBuZGRpY3QgPSBhcmd2Q291bnQoZmMtPmRkaWN0KTsKKysKKysgICAgZm9yIChpID0gMDsgaSA8IG5kZGljdDsgaSsrKSB7CisrICBzID0gZmMtPmRkaWN0W2ldOworKworKyAgLyogUGFyc2Ugb3V0IChmaWxlIyxkZXB0eXBlLE4sRVZSLEZsYWdzKSAqLworKyAgaXggPSBzdHJ0b2wocywgJnNlLCAxMCk7CisrICBhc3NlcnQoc2UgIT0gTlVMTCk7CisrICBkZXB0eXBlID0gKnNlKys7CisrICBzZSsrOworKyAgTiA9IHNlOworKyAgd2hpbGUgKCpzZSAmJiAqc2UgIT0gJyAnKQorKyAgICAgIHNlKys7CisrICAqc2UrKyA9ICdcMCc7CisrICBFVlIgPSBzZTsKKysgIHdoaWxlICgqc2UgJiYgKnNlICE9ICcgJykKKysgICAgICBzZSsrOworKyAgKnNlKysgPSAnXDAnOworKyAgRmxhZ3MgPSBzdHJ0b2woc2UsIE5VTEwsIDE2KTsKKysKKysgIHN3aXRjaCAoZGVwdHlwZSkgeworKyAgZGVmYXVsdDoKKysgICAgICAvKkBzd2l0Y2hicmVha0AqLyBicmVhazsKKysgIGNhc2UgJ1AnOiAgIAorKyAgICAgIGRzID0gcnBtZHNTaW5nbGUoUlBNVEFHX1BST1ZJREVOQU1FLCBOLCBFVlIsIEZsYWdzKTsKKysgICAgICBycG1kZXBQcmludCgoY2hhciAqKWZjLT5mbltpeF0sIGRzLCBzdGRvdXQpOworKyAgICAgICh2b2lkKXJwbWRzRnJlZShkcyk7CisrICAgICAgZHMgPSBOVUxMOworKyAgICAgIC8qQHN3aXRjaGJyZWFrQCovIGJyZWFrOworKyAgY2FzZSAnUic6CisrICAgICAgZHMgPSBycG1kc1NpbmdsZShSUE1UQUdfUkVRVUlSRU5BTUUsIE4sIEVWUiwgRmxhZ3MpOworKyAgICAgIHJwbWRlcFByaW50KChjaGFyICopZmMtPmZuW2l4XSwgZHMsIHN0ZG91dCk7CisrICAgICAgKHZvaWQpcnBtZHNGcmVlKGRzKTsKKysgICAgICBkcyA9IE5VTEw7CisrICAgICAgLypAc3dpdGNoYnJlYWtAKi8gYnJlYWs7CisrICB9CisrICAgIH0KKysKKysgICAgZmMgPSBycG1mY0ZyZWUoZmMpOworKworKyAgICBlYyA9IDA7CisrCisrZXhpdDoKKysgICAgb3B0Q29uID0gcnBtY2xpRmluaShvcHRDb24pOworKyAgICByZXR1cm4gZWM7CisrfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1xdl9jY19iX2dvbmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbXF2X2NjX2JfZ29uZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDhiZDY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1xdl9jY19iX2dvbmUucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorcnBtOiBjb21waWxlIHJwbXF2LmMgaW5zdGVhZCBvZiBycG1xdi5jYworCitTb21lIHZlcnNpb25zIG9mIGdjYywgNC40LjUgZm9yIGV4YW1wbGUsIHdpbGwgcHV0IGEgcmVmZXJlbmNlIHRvIF9fZ3h4X3BlcnNvbmFsaXR5X3YwCitpbnRvIHJwbS5vIGFuZCBycG1idWlsZC5vLiAgVGhpcyBtZWFucyB3ZSBtdXN0IGxpbmsgd2l0aCBnKyssIGFuZCB0aGUgTWFrZWZpbGUgd2UKK2dlbmVyYXRlIGRvZXMgbm90LgorCitTbywgZ28gYmFjayB0byB1c2luZyBycG1xdi5jICh3aGljaCBpcyBjdXJyZW50bHkgaWRlbnRpY2FsIHRvIHJwbXF2LmNjKS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvdGhlcl0KKworICAgV2hlbiBsaW5raW5nIHdpdGggZysrIGlzIHJlYWxseSBuZWNlc3NhcnksIHRoZSB1cHN0cmVhbSBwYWNrYWdlIHdpbGwgZG8gdGhhdC4KKworU2lnbmVkLW9mZi1ieTogSm9lIFNsYXRlciA8am9lLnNsYXRlckB3aW5kcml2ZXIuY29tPgorCistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0xMjcsMTMgKzEyNywxMyBAQCBycG1fU09VUkNFUyA9CQlidWlsZC5jCisgcnBtX0xERkxBR1MgPQkJQExERkxBR1NfU1RBVElDQCAkKExERkxBR1MpCisgcnBtX0xEQUREID0JCXJwbS5vICQobXlMREFERCkKKyBycG0ubzoJJCh0b3Bfc3JjZGlyKS9ycG1xdi5jCistCSQoQ09NUElMRSkgLURJQU1fUlBNQlQgLURJQU1fUlBNREIgLURJQU1fUlBNRUlVIC1ESUFNX1JQTUsgLURJQU1fUlBNUVYgLW8gJEAgLWMgJCh0b3Bfc3JjZGlyKS9ycG1xdi5jYworKwkkKENPTVBJTEUpIC1ESUFNX1JQTUJUIC1ESUFNX1JQTURCIC1ESUFNX1JQTUVJVSAtRElBTV9SUE1LIC1ESUFNX1JQTVFWIC1vICRAIC1jICQodG9wX3NyY2RpcikvcnBtcXYuYworIAorIHJwbWJ1aWxkX1NPVVJDRVMgPQlidWlsZC5jCisgcnBtYnVpbGRfTERGTEFHUyA9CUBMREZMQUdTX1NUQVRJQ0AgJChMREZMQUdTKQorIHJwbWJ1aWxkX0xEQUREID0JcnBtYnVpbGQubyAkKG15TERBREQpCisgcnBtYnVpbGQubzogJCh0b3Bfc3JjZGlyKS9ycG1xdi5jCistCSQoQ09NUElMRSkgLURJQU1fUlBNQlQgLW8gJEAgLWMgJCh0b3Bfc3JjZGlyKS9ycG1xdi5jYworKwkkKENPTVBJTEUpIC1ESUFNX1JQTUJUIC1vICRAIC1jICQodG9wX3NyY2RpcikvcnBtcXYuYworIAorIC5QSE9OWToJc3BsaW50Cisgc3BsaW50OgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS91Y2xpYmMtc3VwcG9ydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vdWNsaWJjLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg3MGFkYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vdWNsaWJjLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSw2MyBAQAorRGVmaW5lIHRoZSB4KiB3cmFwcGVycyBmb3IgdWNsaWJjIGFzIHdlbGwKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L3JwbWlvL3JwbWlvLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtaW8vcnBtaW8uaAorKysrIHJwbS01LjQuMTQvcnBtaW8vcnBtaW8uaAorQEAgLTIzLDcgKzIzLDggQEAKKyAgKi8KKyAvKkB7Ki8KKyAjaWYgIWRlZmluZWQoX19MQ0xJTlRfXykgJiYgIWRlZmluZWQoX19VQ0xJQkNfXykgJiYgZGVmaW5lZChfX0dMSUJDX18pICYmIFwKKy0JKF9fR0xJQkNfXyA+IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAyKSkKKysJKF9fR0xJQkNfXyA+IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAyKSkgJiYgXAorKwkhZGVmaW5lZChfX1VDTElCQ19fKQorICNkZWZpbmUgVVNFX0NPT0tJRV9TRUVLX1BPSU5URVIgMQorIHR5cGVkZWYgX0lPX29mZjY0X3QgCV9saWJpb19vZmZfdDsKKyB0eXBlZGVmIF9saWJpb19vZmZfdCAqCV9saWJpb19wb3NfdDsKK0luZGV4OiBycG0tNS40LjE0L3N5c3RlbS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3N5c3RlbS5oCisrKysgcnBtLTUuNC4xNC9zeXN0ZW0uaAorQEAgLTQ4MSw3ICs0ODEsNyBAQCBleHRlcm4gdm9pZCBtdW50cmFjZSAodm9pZCkKKyAjZW5kaWYgLyogZGVmaW5lZChfX0xDTElOVF9fKSAqLworIAorIC8qIE1lbW9yeSBhbGxvY2F0aW9uIHZpYSBtYWNybyBkZWZzIHRvIGdldCBtZWFuaW5nZnVsIGxvY2F0aW9ucyBmcm9tIG10cmFjZSgpICovCistI2lmIGRlZmluZWQoX19HTlVDX18pCisrI2lmIGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19VQ0xJQkNfXykKKyAjZGVmaW5lCXhtYWxsb2MoX3NpemUpIAkJKG1hbGxvYyhfc2l6ZSkgPyA6IHZtZWZhaWwoX3NpemUpKQorICNkZWZpbmUJeGNhbGxvYyhfbm1lbWIsIF9zaXplKQkoY2FsbG9jKChfbm1lbWIpLCAoX3NpemUpKSA/IDogdm1lZmFpbChfc2l6ZSkpCisgI2RlZmluZQl4cmVhbGxvYyhfcHRyLCBfc2l6ZSkJKHJlYWxsb2MoKF9wdHIpLCAoX3NpemUpKSA/IDogdm1lZmFpbChfc2l6ZSkpCitJbmRleDogcnBtLTUuNC4xNC9saWIvbGlicnBtLnZlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL2xpYnJwbS52ZXJzCisrKysgcnBtLTUuNC4xNC9saWIvbGlicnBtLnZlcnMKK0BAIC00MDUsNiArNDA1LDEwIEBAIExJQlJQTV8wCisgICAgIHNwZWNlZGl0OworICAgICBzdHJpY3RfZXJhc3VyZXM7CisgICAgIFhycG10c2lJbml0OworKyAgICB4bWFsbG9jOworKyAgICB4cmVhbGxvYzsKKysgICAgeGNhbGxvYzsKKysgICAgeHN0cmR1cDsKKyAgIGxvY2FsOgorICAgICAqOworIH07CitJbmRleDogcnBtLTUuNC4xNC9ycG1pby9saWJycG1pby52ZXJzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3JwbWlvL2xpYnJwbWlvLnZlcnMKKysrKyBycG0tNS40LjE0L3JwbWlvL2xpYnJwbWlvLnZlcnMKK0BAIC0xMDU2LDYgKzEwNTYsMTAgQEAgTElCUlBNSU9fMAorICAgICBtb25nb193cml0ZV9jb25jZXJuX3NldF9tb2RlOworICAgICBtb25nb193cml0ZV9jb25jZXJuX3NldF93OworICAgICBtb25nb193cml0ZV9jb25jZXJuX3NldF93dGltZW91dDsKKysgICAgeG1hbGxvYzsKKysgICAgeHJlYWxsb2M7CisrICAgIHhjYWxsb2M7CisrICAgIHhzdHJkdXA7CisgICBsb2NhbDoKKyAgICAgKjsKKyB9OwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS92ZXJpZnktZml4LWJyb2tlbi1sb2dpYy1mb3ItZ2hvc3QtYXZvaWRhbmNlLU1hcmstSGF0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS92ZXJpZnktZml4LWJyb2tlbi1sb2dpYy1mb3ItZ2hvc3QtYXZvaWRhbmNlLU1hcmstSGF0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMDQ1YWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3ZlcmlmeS1maXgtYnJva2VuLWxvZ2ljLWZvci1naG9zdC1hdm9pZGFuY2UtTWFyay1IYXQucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSA5ZTdiNzJlZTBjOTk0NjA5OTc1OTgxZTEzNWZjMThkMDM4N2FlZmI2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogamJqIDxqYmo+CitEYXRlOiBXZWQsIDE0IE1heSAyMDE0IDIxOjE5OjQxICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIC0gdmVyaWZ5OiBmaXg6IGJyb2tlbiBsb2dpYyBmb3IgJWdob3N0IGF2b2lkYW5jZSAoTWFyaworIEhhdGxlKS4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CistLS0KKyBDSEFOR0VTICAgICAgfCAxICsKKyBsaWIvdmVyaWZ5LmMgfCAzICstLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitJbmRleDogcnBtLTUuNC4xNC9DSEFOR0VTCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL0NIQU5HRVMKKysrKyBycG0tNS40LjE0L0NIQU5HRVMKK0BAIC0xLDMgKzEsNSBAQAorKyAgICAtIGpiajogdmVyaWZ5OiBmaXg6IGJyb2tlbiBsb2dpYyBmb3IgJWdob3N0IGF2b2lkYW5jZSAoTWFyayBIYXRsZSkuCisrCisgNS40LjEzIC0+IDUuNC4xNDoKKyAgICAgLSBtb29uZXk6IHVzZSBfX3N1biBpbnN0ZWFkIG9mIF9fc3VuX18gaW4gI2RlZmluZSAobHAjMTI0MzQ3MikuCisgICAgIC0gbW9vbmV5OiBycG1jb25zdGFudDogZW5zdXJlIGxpbmthZ2UgdyBPcmFjbGUgU3R1ZGlvIDEyLjMgKGxwIzEyNDM0NjkpLgorSW5kZXg6IHJwbS01LjQuMTQvbGliL3ZlcmlmeS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi92ZXJpZnkuYworKysrIHJwbS01LjQuMTQvbGliL3ZlcmlmeS5jCitAQCAtNTg4LDggKzU4OCw3IEBAIHVpbnQzMl90IGZjID0gcnBtZmlGQyhmaSk7CisgCSAgICBjb250aW51ZTsKKyAKKyAJLyogSWYgbm90IHZlcmlmeWluZyAlZ2hvc3QsIHNraXAgZ2hvc3QgZmlsZXMuICovCistCS8qIFhYWCB0aGUgYnJva2VuISEhIGxvZ2ljIGRpc2FibGVzICVnaG9zdCBxdWVyaWVzIGFsd2F5cy4gKi8KKy0JaWYgKCEoRkZfSVNTRVQocXZhLT5xdmFfZmZsYWdzLCBHSE9TVCkgJiYgRkZfSVNTRVQoZmZsYWdzLCBHSE9TVCkpKQorKwlpZiAoIUZGX0lTU0VUKHF2YS0+cXZhX2ZmbGFncywgR0hPU1QpICYmIEZGX0lTU0VUKGZmbGFncywgR0hPU1QpKQorIAkgICAgY29udGludWU7CisgCisgCS8qIEdhdGhlciBwZXItZmlsZSBkYXRhIGludG8gYSBjYXJyaWVyLiAqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV80LjExLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtXzQuMTEuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTBjOTQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV80LjExLjIuYmIKQEAgLTAsMCArMSwxMzcgQEAKK1NVTU1BUlkgPSAiVGhlIFJQTSBwYWNrYWdlIG1hbmFnZW1lbnQgc3lzdGVtIgorREVTQ1JJUFRJT04gPSAiVGhlIFJQTSBQYWNrYWdlIE1hbmFnZXIgKFJQTSkgaXMgYSBwb3dlcmZ1bCBjb21tYW5kIGxpbmUgZHJpdmVuIFwKK3BhY2thZ2UgbWFuYWdlbWVudCBzeXN0ZW0gY2FwYWJsZSBvZiBpbnN0YWxsaW5nLCB1bmluc3RhbGxpbmcsIFwKK3ZlcmlmeWluZywgcXVlcnlpbmcsIGFuZCB1cGRhdGluZyBzb2Z0d2FyZSBwYWNrYWdlcy4gRWFjaCBzb2Z0d2FyZSBcCitwYWNrYWdlIGNvbnNpc3RzIG9mIGFuIGFyY2hpdmUgb2YgZmlsZXMgYWxvbmcgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBcCit0aGUgcGFja2FnZSBsaWtlIGl0cyB2ZXJzaW9uLCBhIGRlc2NyaXB0aW9uLCBldGMuIgorCitTVU1NQVJZXyR7UE59LWRldiA9ICJEZXZlbG9wbWVudCBmaWxlcyBmb3IgbWFuaXB1bGF0aW5nIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWRldiA9ICJUaGlzIHBhY2thZ2UgY29udGFpbnMgdGhlIFJQTSBDIGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcy4gVGhlc2UgXAorZGV2ZWxvcG1lbnQgZmlsZXMgd2lsbCBzaW1wbGlmeSB0aGUgcHJvY2VzcyBvZiB3cml0aW5nIHByb2dyYW1zIHRoYXQgXAorbWFuaXB1bGF0ZSBSUE0gcGFja2FnZXMgYW5kIGRhdGFiYXNlcy4gVGhlc2UgZmlsZXMgYXJlIGludGVuZGVkIHRvIFwKK3NpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mIGNyZWF0aW5nIGdyYXBoaWNhbCBwYWNrYWdlIG1hbmFnZXJzIG9yIGFueSBcCitvdGhlciB0b29scyB0aGF0IG5lZWQgYW4gaW50aW1hdGUga25vd2xlZGdlIG9mIFJQTSBwYWNrYWdlcyBpbiBvcmRlciBcCit0byBmdW5jdGlvbi4iCisKK1NVTU1BUllfcHl0aG9uLXJwbSA9ICJQeXRob24gYmluZGluZ3MgZm9yIGFwcHMgd2hpY2ggd2lsbCBtYW51cHVsYXRlIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OX3B5dGhvbi1ycG0gPSAiVGhlIHJwbS1weXRob24gcGFja2FnZSBjb250YWlucyBhIG1vZHVsZSB0aGF0IHBlcm1pdHMgYXBwbGljYXRpb25zIFwKK3dyaXR0ZW4gaW4gdGhlIFB5dGhvbiBwcm9ncmFtbWluZyBsYW5ndWFnZSB0byB1c2UgdGhlIGludGVyZmFjZSBcCitzdXBwbGllZCBieSB0aGUgUlBNIFBhY2thZ2UgTWFuYWdlciBsaWJyYXJpZXMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnJwbS5vcmciCitMSUNFTlNFID0gIkdQTC0yLjArIgorTElDX0ZJTEVTX0NIS1NVTSA/Pz0gImZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vR1BMLTIuMDttZDU9ODAxZjgwOTgwZDE3MWRkNjQyNTYxMDgzM2EyMmRiZTYiCisKK0RFUEVORFMgPSAiZGIgbGlieG1sMiB4eiBmaW5kdXRpbHMgZmlsZSBwb3B0IG5zcyBiemlwMiBlbGZ1dGlscyBwYXRjaCBhdHRyIHpsaWIgYWNsIGd6aXAgbWFrZSBiaW51dGlscyBweXRob24iCisKK1NSQ19VUkkgKz0gImh0dHA6Ly9ycG0ub3JnL3JlbGVhc2VzL3JwbS00LjExLngvJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgICBmaWxlOi8vdXNlLXBrZ2NvbmZpZy1mb3ItcHl0aG9uLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtZGIzLWZyb20tY29uZmlndXJlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hZGRfUlBNU0VOU0VfTUlTU0lOR09LX3RvX3JwbW1vZHVsZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc3VwcG9ydC1zdWdnZXN0cy10YWcucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3JlbW92ZS1kaXItY2hlY2sucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2Rpc2FibGVfc2hvcnRjaXJjdWl0ZWQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2ZpeF9saWJkaXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3JwbS1zY3JpcHRldGV4ZWNoZWxwLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9weXRob25kZXBzLnNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ycG0tQ1ZFLTIwMTQtODExOC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcnBtLUNWRS0yMDEzLTY0MzUucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NzZhYzk5NDhhODgzNjcwNTRmOGRkYjVjMGU4NzE3MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0MDNmOGRlNjMyYjMzODQ2Y2U1NzQ2ZjQyOWMyMWE2MGY0MGRmZjlkY2I1NmYxYjQxMThmMzdhMDY1MmE0OGQ0IgorCitQUiA9ICJyMSIKKworaW5oZXJpdCBhdXRvdG9vbHMKK2luaGVyaXQgcHl0aG9ubmF0aXZlCitpbmhlcml0IHBrZ2NvbmZpZworaW5oZXJpdCBnZXR0ZXh0CisKK0VYVFJBX09FQ09ORiArPSAiLS1ob3N0PSR7SE9TVF9TWVN9IFwKKyAgICAgICAgICAgICAgICAgLS1wcm9ncmFtLXByZWZpeD0gXAorICAgICAgICAgICAgICAgICAtLXByZWZpeD0ke3ByZWZpeH0gXAorICAgICAgICAgICAgICAgICAtLWV4ZWMtcHJlZml4PSR7cHJlZml4fSBcCisgICAgICAgICAgICAgICAgIC0tYmluZGlyPSR7cHJlZml4fS9iaW4gXAorICAgICAgICAgICAgICAgICAtLXNiaW5kaXI9JHtwcmVmaXh9L3NiaW4gXAorICAgICAgICAgICAgICAgICAtLXN5c2NvbmZkaXI9JHtzeXNjb25mZGlyfSBcCisgICAgICAgICAgICAgICAgIC0tZGF0YWRpcj0ke3ByZWZpeH0vc2hhcmUgXAorICAgICAgICAgICAgICAgICAtLWluY2x1ZGVkaXI9JHtwcmVmaXh9L2luY2x1ZGUgXAorICAgICAgICAgICAgICAgICAtLWxpYmRpcj0ke3ByZWZpeH0vbGliIFwKKyAgICAgICAgICAgICAgICAgLS1saWJleGVjZGlyPSR7cHJlZml4fS9saWJleGVjIFwKKyAgICAgICAgICAgICAgICAgLS1sb2NhbHN0YXRlZGlyPSR7bG9jYWxzdGF0ZWRpcn0gXAorICAgICAgICAgICAgICAgICAtLXNoYXJlZHN0YXRlZGlyPSR7cHJlZml4fS9jb20gXAorICAgICAgICAgICAgICAgICAtLW1hbmRpcj0ke21hbmRpcn0gXAorICAgICAgICAgICAgICAgICAtLWluZm9kaXI9JHtpbmZvZGlyfSBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWFjbCBcCisgICAgICAgICAgICAgICAgIC0td2l0aG91dC1sdWEgXAorICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtY2FwIFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtc2hhcmVkIFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtcHl0aG9uIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWV4dGVybmFsLWRiIFwKKyAgICAgICAgICAgICAgICAiCisKK0NQUEZMQUdTX2FwcGVuZCA9ICIgYHBrZy1jb25maWcgLS1jZmxhZ3MgbnNzYCIKK0xERkxBR1NfYXBwZW5kID0gIiAtV2wsLUJzeW1ib2xpYy1mdW5jdGlvbnMgLWZmdW5jdGlvbi1zZWN0aW9ucyIKK0NDRkxBR1NfYXBwZW5kID0gIiAtZlBJQyAiCitDWFhGTEFHU19hcHBlbmQgPSAiIC1mUElDICIKK0NGTEFHU19hcHBlbmQgPSAiIC1mUElDIC1EUlBNX1ZFTkRPUl9XSU5EUklWRVIgLURSUE1fVkVORE9SX1BPS1kgLURSUE1fVkVORE9SX09FICIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgcm0gLXJmIHNxbGl0ZQorICAgIHJtIC1mIG00L2xpYnRvb2wubTQKKyAgICBybSAtZiBtNC9sdCoubTQKKyAgICBybSAtcmYgZGIzL2NvbmZpZ3VyZSoKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgbXYgJHtEfS8ke2Jhc2VfYmluZGlyfS9ycG0gJHtEfS8ke2JpbmRpcn0vCisgICAgcm1kaXIgJHtEfS8ke2Jhc2VfYmluZGlyfQorICAgIHJtIC1mICR7RH0ke3ByZWZpeH0vbGliLyoubGEKKyAgICBybSAtZiAke0R9JHtwcmVmaXh9L2xpYi9ycG0tcGx1Z2lucy8qLmxhCisgICAgcm0gLWYgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJXt3aXRoX3B5dGhvbl92ZXJzaW9ufS9zaXRlLXBhY2thZ2VzLyoue2EsbGF9CisgICAgcm0gLWYgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJXt3aXRoX3B5dGhvbl92ZXJzaW9ufS9zaXRlLXBhY2thZ2VzL3JwbS8qLnthLGxhfQorICAgIHJtIC1mciAke0R9L3ZhcgorICAgIGluc3RhbGwgLWQgJHtEfSR7cHJlZml4fS9saWIvcnBtL2JpbgorICAgIGxuIC1zIC4uL2RlYnVnZWRpdCAke0R9JHtwcmVmaXh9L2xpYi9ycG0vYmluL2RlYnVnZWRpdAorICAgIGxuIC1zIC4uL3JwbWRlcHMgJHtEfSR7cHJlZml4fS9saWIvcnBtL2Jpbi9ycG1kZXBzLW9lY29yZQorICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3B5dGhvbmRlcHMuc2ggJHtEfS8ke2xpYmRpcn0vcnBtL3B5dGhvbmRlcHMuc2gKK30KKworcGtnX3Bvc3RpbnN0XyR7UE59KCkgeworCisgICAgWyAieFwkRCIgPT0gIngiIF0gJiYgbGRjb25maWcKKyAgICB0ZXN0IC1mICR7bG9jYWxzdGF0ZWRpcn0vbGliL3JwbS9QYWNrYWdlcyB8fCBycG0gLS1pbml0ZGIKKyAgICBybSAtZiAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9ycG0vRmlsZW1kNXMgXAorICAgICAgICAgICR7bG9jYWxzdGF0ZWRpcn0vbGliL3JwbS9GaWxlZGlnZXN0cyBcCisgICAgICAgICAgJHtsb2NhbHN0YXRlZGlyfS9saWIvcnBtL1JlcXVpcmV2ZXJzaW9uIFwKKyAgICAgICAgICAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9ycG0vUHJvdmlkZXZlcnNpb24KKworfQorCitwa2dfcG9zdHJtXyR7UE59KCkgeworICAgIFsgInhcJEQiID09ICJ4IiBdICYmIGxkY29uZmlnCisKK30KKworUEFDS0FHRVMgKz0gInB5dGhvbi0ke1BOfSIKK1BST1ZJREVTICs9ICJweXRob24tcnBtIgorCitGSUxFU18ke1BOfSArPSAgIiR7bGliZGlyfS9ycG0gXAorICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcnBtLXBsdWdpbnMvZXhlYy5zbyBcCisgICAgICAgICAgICAgICAgIgorUkRFUEVORFNfJHtQTn0gPSAiYmFzZS1maWxlcyBydW4tcG9zdGluc3RzIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcnBtLy5kZWJ1Zy8qIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3JwbS1wbHVnaW5zLy5kZWJ1Zy8qIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzL3JwbS8uZGVidWcvKiBcCisgICAgICAgICAgICAgICAgICAgIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy9ycG0vKi5sYSIKKworRklMRVNfcHl0aG9uLSR7UE59ID0gIiR7bGliZGlyfS9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy9ycG0vKiIKK1JERVBFTkRTX3B5dGhvbi0ke1BOfSA9ICIke1BOfSBweXRob24iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV81LjQrY3ZzLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV81LjQrY3ZzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MDNmM2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtXzUuNCtjdnMuYmIKQEAgLTAsMCArMSw1MjggQEAKK1NVTU1BUlkgPSAiVGhlIFJQTSBwYWNrYWdlIG1hbmFnZW1lbnQgc3lzdGVtIgorREVTQ1JJUFRJT04gPSAiVGhlIFJQTSBQYWNrYWdlIE1hbmFnZXIgKFJQTSkgaXMgYSBwb3dlcmZ1bCBjb21tYW5kIGxpbmUgZHJpdmVuIFwKK3BhY2thZ2UgbWFuYWdlbWVudCBzeXN0ZW0gY2FwYWJsZSBvZiBpbnN0YWxsaW5nLCB1bmluc3RhbGxpbmcsIFwKK3ZlcmlmeWluZywgcXVlcnlpbmcsIGFuZCB1cGRhdGluZyBzb2Z0d2FyZSBwYWNrYWdlcy4gRWFjaCBzb2Z0d2FyZSBcCitwYWNrYWdlIGNvbnNpc3RzIG9mIGFuIGFyY2hpdmUgb2YgZmlsZXMgYWxvbmcgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBcCit0aGUgcGFja2FnZSBsaWtlIGl0cyB2ZXJzaW9uLCBhIGRlc2NyaXB0aW9uLCBldGMuIgorCitTVU1NQVJZXyR7UE59LWxpYnMgPSAiTGlicmFyaWVzIGZvciBtYW5pcHVsYXRpbmcgUlBNIHBhY2thZ2VzIgorREVTQ1JJUFRJT05fJHtQTn0tbGlicyA9ICJUaGlzIHBhY2thZ2UgY29udGFpbnMgdGhlIFJQTSBzaGFyZWQgbGlicmFyaWVzLiIKKworU1VNTUFSWV8ke1BOfS1kZXYgPSAiRGV2ZWxvcG1lbnQgZmlsZXMgZm9yIG1hbmlwdWxhdGluZyBSUE0gcGFja2FnZXMiCitERVNDUklQVElPTl8ke1BOfS1kZXYgPSAiVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHRoZSBSUE0gQyBsaWJyYXJ5IGFuZCBoZWFkZXIgZmlsZXMuIFRoZXNlIFwKK2RldmVsb3BtZW50IGZpbGVzIHdpbGwgc2ltcGxpZnkgdGhlIHByb2Nlc3Mgb2Ygd3JpdGluZyBwcm9ncmFtcyB0aGF0IFwKK21hbmlwdWxhdGUgUlBNIHBhY2thZ2VzIGFuZCBkYXRhYmFzZXMuIFRoZXNlIGZpbGVzIGFyZSBpbnRlbmRlZCB0byBcCitzaW1wbGlmeSB0aGUgcHJvY2VzcyBvZiBjcmVhdGluZyBncmFwaGljYWwgcGFja2FnZSBtYW5hZ2VycyBvciBhbnkgXAorb3RoZXIgdG9vbHMgdGhhdCBuZWVkIGFuIGludGltYXRlIGtub3dsZWRnZSBvZiBSUE0gcGFja2FnZXMgaW4gb3JkZXIgXAordG8gZnVuY3Rpb24uIgorCitTVU1NQVJZXyR7UE59LWNvbW1vbiA9ICJDb21tb24gUlBNIHBhdGhzLCBzY3JpcHRzLCBkb2N1bWVudGF0aW9uIGFuZCBjb25maWd1cmF0aW9uIgorREVTQ1JJUFRJT05fJHtQTn0tY29tbW9uID0gIlRoZSBycG0tY29tbW9uIHBhY2thZ2UgY29udGFpbnMgcGF0aHMsIHNjcmlwdHMsIGRvY3VtZW50YXRpb24gXAorYW5kIGNvbmZpZ3VyYXRpb24gY29tbW9uIGJldHdlZW4gUlBNIFBhY2thZ2UgTWFuYWdlci4iCisKK1NVTU1BUllfJHtQTn0tYnVpbGQgPSAiU2NyaXB0cyBhbmQgZXhlY3V0YWJsZSBwcm9ncmFtcyB1c2VkIHRvIGJ1aWxkIHBhY2thZ2VzIgorREVTQ1JJUFRJT05fJHtQTn0tYnVpbGQgPSAiVGhlIHJwbS1idWlsZCBwYWNrYWdlYyBvbnRhaW5zIHRoZSBzY3JpcHRzIGFuZCBleGVjdXRhYmxlIHByb2dyYW1zIFwKK3RoYXQgYXJlIHVzZWQgdG8gYnVpbGQgcGFja2FnZXMgdXNpbmcgdGhlIFJQTSBQYWNrYWdlIE1hbmFnZXIuIgorCitTVU1NQVJZX3B5dGhvbi1ycG0gPSAiUHl0aG9uIGJpbmRpbmdzIGZvciBhcHBzIHdoaWNoIHdpbGwgbWFudXB1bGF0ZSBSUE0gcGFja2FnZXMiCitERVNDUklQVElPTl9weXRob24tcnBtID0gIlRoZSBycG0tcHl0aG9uIHBhY2thZ2UgY29udGFpbnMgYSBtb2R1bGUgdGhhdCBwZXJtaXRzIGFwcGxpY2F0aW9ucyBcCit3cml0dGVuIGluIHRoZSBQeXRob24gcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdG8gdXNlIHRoZSBpbnRlcmZhY2UgXAorc3VwcGxpZWQgYnkgdGhlIFJQTSBQYWNrYWdlIE1hbmFnZXIgbGlicmFyaWVzLiIKKworU1VNTUFSWV9wZXJsLW1vZHVsZS1ycG0gPSAiUGVybCBiaW5kaW5ncyBmb3IgYXBwcyB3aGljaCB3aWxsIG1hbmlwdWxhdGUgUlBNIHBhY2thZ2VzIgorREVTQ1JJUFRJT05fcGVybC1tb2R1bGVzLXJwbSA9ICJUaGUgcGVybC1tb2R1bGVzLXJwbSBwYWNrYWdlIGNvbnRhaW5zIGEgbW9kdWxlIHRoYXQgcGVybWl0cyBhcHBsaWNhdGlvbnMgXAord3JpdHRlbiBpbiB0aGUgUGVybCBwcm9ncmFtbWluZyBsYW5ndWFnZSB0byB1c2UgdGhlIGludGVyZmFjZSBcCitzdXBwbGllZCBieSB0aGUgUlBNIFBhY2thZ2UgTWFuYWdlciBsaWJyYXJpZXMuIgorCitTVU1NQVJZX3BlcmwtbW9kdWxlLXJwbS1kZXYgPSAiRGV2ZWxvcG1lbnQgY29tcG9uZW50cyBmb3IgcGVybCBiaW5kaW5ncyIKK0RFU0NSSVBUSU9OX3BlcmwtbW9kdWxlcy1ycG0tZGV2ID0gIkRldmVsb3BtZW50IGl0ZW1zIHN1Y2ggYXMgbWFuIHBhZ2VzIGZvciB1c2Ugd2l0aCB0aGUgUGVybCBcCitsYW5ndWFnZSBiaW5kaW5ncy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9ycG01Lm9yZy8iCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIgorCitERVBFTkRTID0gImxpYnBjcmUgYXR0ciBhY2wgcG9wdCBvc3NwLXV1aWQgZmlsZSBieWFjYy1uYXRpdmUiCisKK1MgPSAiJHtXT1JLRElSfS9ycG0iCisKKyMgQXBwbHkgdmFyaW91cyBmaXh1cHMgdGhhdCBhcmUgdW5pcXVlIHRvIHRoZSBDVlMgZW52aXJvbm1lbnQKK2RvX2ZpeHVwX3VucGFjayAoKSB7CisJbG4gLXNmIC4uL3N5Y2sgJHtTfS9zeWNrIHx8IDoKKwlsbiAtc2YgLi4vbHVhICR7U30vbHVhIHx8IDoKKwlsbiAke1N9L3JwbXF2LmMgJHtTfS9ycG1xdi5jYyB8fCA6Cit9CisKK2FkZHRhc2sgZml4dXBfdW5wYWNrIGFmdGVyIGRvX3VucGFjayBiZWZvcmUgZG9fcGF0Y2gKKworIyBUaGlzIHJlY2lwZSBpcyByZWFsbHkgZGVzaWduZWQgZm9yIGRldmVsb3BtZW50Li4uIHRvIFRyeSBvdXQgdGhlIGxhdGVzdAorIyBjb21tdW5pdHkgd29yayBpbiBwcm9ncmVzcy4KK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworIyBycG0yY3BpbyBpcyBhIHNoZWxsIHNjcmlwdCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgcnBtIHNyYy5ycG0uICBJdCBpcyBuZWVkZWQKKyMgaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgZGlzdHJpYnV0aW9uIFNSUE0gaW50byBhIGZvcm1hdCB3ZSBjYW4gZXh0cmFjdC4uLgorU1JDX1VSSSA9ICJjdnM6Ly9hbm9ueW1vdXNAcnBtNS5vcmcvY3ZzO3RhZz1ycG0tNV80O21vZHVsZT1ycG0gXAorCSAgIGN2czovL2Fub255bW91c0BycG01Lm9yZy9jdnM7dGFnPXJwbS01XzQ7bW9kdWxlPXN5Y2sgXAorCSAgIGN2czovL2Fub255bW91c0BycG01Lm9yZy9jdnM7dGFnPXJwbS01XzQ7bW9kdWxlPWx1YSBcCisJICAgZmlsZTovL3JwbS1sb2ctYXV0by1ybS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1kYi1yZWR1Y2UucGF0Y2ggXAorCSAgIGZpbGU6Ly9wZXJmaWxlX3JwbWRlcHMuc2ggXAorCSAgIGZpbGU6Ly9ycG0tYXV0b2dlbi5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1saWJzcWwtZml4LnBhdGNoIFwKKwkgICBmaWxlOi8vaGVhZGVyLWluY2x1ZGUtZml4LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXBsYXRmb3JtLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXNob3dyYy5wYXRjaCBcCisJICAgZmlsZTovL3JwbS10b29scy1tdHJlZS1MREZMQUdTLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWZpbGVjbGFzcy5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1jYW5vbmFyY2gucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbm8tbG9vcG1zZy5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1zY3JpcHRsZXRleGVjaGVscGVyLnBhdGNoIFwKKwkgICBmaWxlOi8vcHl0aG9uZGVwcy5zaCBcCisJICAgZmlsZTovL3JwbWRlcHMtb2Vjb3JlLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXJlc29sdmVkZXAucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbm8tcGVybC11cnBtLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLW1hY3Jvcy5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1sdWEucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tb3NzcC11dWlkLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXBhY2thZ2VvcmlnaW4ucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGtnY29uZmlnZGVwcy5wYXRjaCBcCisJICAgZmlsZTovL3VjbGliYy1zdXBwb3J0LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtYXRjaC5wYXRjaCBcCisJICAgZmlsZTovL2ZzdGFjay1wcm90ZWN0b3ItY29uZmlndXJlLWNoZWNrLnBhdGNoIFwKKwkgICBmaWxlOi8vZGJjb252ZXJ0LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXV1aWQtaW5jbHVkZS5wYXRjaCBcCisJICAgZmlsZTovL21ha2VmaWxlLWFtLWV4ZWMtaG9vay5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1kYl9idWZmZXJfc21hbGwucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcHktaW5pdC5wYXRjaCBcCisJICAgZmlsZTovL3B5dGhvbi1ycG0tcnBtc2Vuc2UucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcmVsb2MtbWFjcm9zLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXBsYXRmb3JtMi5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1yZW1vdmUtc3lrY3BhcnNlLWRlY2wucGF0Y2ggXAorCSAgIGZpbGU6Ly9kZWJ1Z2VkaXQtc2Vndi5wYXRjaCBcCisJICAgZmlsZTovL2RlYnVnZWRpdC12YWxpZC1maWxlLXRvLWZpeC1zZWdtZW50LWZhdWx0LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXBsYXRmb3JtLWZpbGUtZml4LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWxzYi1jb21wYXRpYmlsaXR5LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXRhZy1nZW5lcmF0ZS1lbmRpYW4tY29udmVyc2lvbi1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0taGFyZGxpbmstc2VnZmF1bHQtZml4LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXBheWxvYWQtdXNlLWhhc2hlZC1pbm9kZS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1maXgtbG9naW8tY3AucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZGI1LW9yLWRiNi5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1ycG1wZ3AtZml4LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWRpc2FibGUtV25vLW92ZXJyaWRlLWluaXQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcmVhbHBhdGgucGF0Y2ggXAorCSAgIgorCisjIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gZW5hYmxlIHBsYXRmb3JtIHNjb3JlIGRlYnVnZ2luZworIyBUaGlzIGlzIHVzZWZ1bCB3aGVuIGlkZW50aWZ5aW5nIGlzc3VlcyB3aXRoIFNtYXJ0IGJlaW5nIHVuYWJsZQorIyB0byBwcm9jZXNzIGNlcnRhaW4gcGFja2FnZSBmZWVkcy4KKyNTUkNfVVJJICs9ICJmaWxlOi8vcnBtLWRlYnVnLXBsYXRmb3JtLnBhdGNoIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK2FjcGF0aHMgPSAiLUkgJHtTfS9kYi9kaXN0L2FjbG9jYWwgLUkgJHtTfS9kYi9kaXN0L2FjbG9jYWxfamF2YSIKKworIyBTcGVjaWZ5IHRoZSBkZWZhdWx0IHJwbSBtYWNyb3MgaW4gdGVybXMgb2YgYWRqdXN0YWJsZSB2YXJpYWJsZXMKK3JwbV9tYWNyb3MgPSAiJXtfdXNybGlicnBtfS9tYWNyb3M6JXtfdXNybGlicnBtfS9wb2t5L21hY3Jvczole191c3JsaWJycG19L3Bva3kvJXtfdGFyZ2V0fS9tYWNyb3M6JXtfZXRjcnBtfS9tYWNyb3MuKjole19ldGNycG19L21hY3Jvczole19ldGNycG19LyV7X3RhcmdldH0vbWFjcm9zOn4vLm9lcnBtbWFjcm9zIgorcnBtX21hY3Jvc19jbGFzcy1uYXRpdmUgPSAiJXtfdXNybGlicnBtfS9tYWNyb3M6JXtfdXNybGlicnBtfS9wb2t5L21hY3Jvczole191c3JsaWJycG19L3Bva3kvJXtfdGFyZ2V0fS9tYWNyb3M6fi8ub2VycG1tYWNyb3MiCitycG1fbWFjcm9zX2NsYXNzLW5hdGl2ZXNkayA9ICIle191c3JsaWJycG19L21hY3Jvczole191c3JsaWJycG19L3Bva3kvbWFjcm9zOiV7X3VzcmxpYnJwbX0vcG9reS8le190YXJnZXR9L21hY3Jvczp+Ly5vZXJwbW1hY3JvcyIKKworIyBzcWxpdGUgbHVhIHRjbCBhdWdlYXMgbnNzIGdjcnlwdCBuZW9uIHh6IHhhciBrZXl1dGlscyBwZXJsIHNlbGludXgKKworIyBOb3RlOiBwZXJsIGFuZCBzcWxpdGUgdy9vIGRiIHNwZWNpZmllZCBkb2VzIG5vdCBjdXJyZW50bHkgd29yay4KKyMgICAgICAgdGNsLCBhdWdlYXMsIG5zcywgZ2NyeXB0LCB4YXIgYW5kIGtleXV0aWxzIHN1cHBvcnQgaXMgdW50ZXN0ZWQuCitQQUNLQUdFQ09ORklHID8/PSAiZGIgYnppcDIgemxpYiBiZWVjcnlwdCBvcGVuc3NsIGxpYmVsZiBweXRob24iCisKK1BBQ0tBR0VDT05GSUdbYnppcDJdID0gIi0td2l0aC1iemlwMiwtLXdpdGhvdXQtYnppcDIsYnppcDIsIgorUEFDS0FHRUNPTkZJR1t4el0gPSAiLS13aXRoLXh6LC0td2l0aG91dC14eix4eiwiCitQQUNLQUdFQ09ORklHW3psaWJdID0gIi0td2l0aC16bGliLC0td2l0aG91dC16bGliLHpsaWIsIgorUEFDS0FHRUNPTkZJR1t4YXJdID0gIi0td2l0aC14YXIsLS13aXRob3V0LXhhcix4YXIsIgorCitXSVRIX1BZVEhPTiA9ICIgLS13aXRoLXB5dGhvbj0ke1BZVEhPTl9CQVNFVkVSU0lPTn0gXAorCQktLXdpdGgtcHl0aG9uLWluYy1kaXI9JHtTVEFHSU5HX0lOQ0RJUn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059IFwKKwkJLS13aXRoLXB5dGhvbi1saWItZGlyPSR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vc2l0ZS1wYWNrYWdlcyBcCisJCS0td2l0aG91dC1weXRob25lbWJlZCIKK1BBQ0tBR0VDT05GSUdbcHl0aG9uXSA9ICIke1dJVEhfUFlUSE9OfSwtLXdpdGhvdXQtcHl0aG9uLHB5dGhvbiwiCisKKyMgUGVybCBtb2R1bGVzIGFyZSBub3QgYnVpbHQsIGJ1dCB0aGV5IGNvdWxkIGJlIGVuYWJsZWQgZmFpcmx5IGVhc2lseQorIyB0aGUgcGVybCBtb2R1bGUgY3JlYXRpb24gYW5kIGluc3RhbGxhdGlvbiB3b3VsZCBuZWVkIHRvIGJlIHBhdGNoZWQuCisjIChjdXJyZW50bHkgaGFzIGhvc3QgcGVybCBjb250YW1pbmF0aW9uIGlzc3VlcykKK1dJVEhfUEVSTCA9ICItLXdpdGgtcGVybCAtLXdpdGhvdXQtcGVybGVtYmVkIC0td2l0aG91dC1wZXJsLXVycG0iCitXSVRIT1VUX1BFUkwgPSAiLS13aXRob3V0LXBlcmwgLS13aXRob3V0LXBlcmwtdXJwbSIKK1BBQ0tBR0VDT05GSUdbcGVybF0gPSAiJHtXSVRIX1BFUkx9LCR7V0lUSE9VVF9QRVJMfSxwZXJsLCIKKworIyBUaGUgLS13aXRoLWRic3FsIHdpbGwgb25seSB0ZWxsIFJQTSB0byBjaGVjayBmb3Igc3VwcG9ydCwgZGIKKyMgbWF5IG9yIG1heSBub3QgYmUgYnVpbHQgdy8gdGhlIGRic3FsIHN1cHBvcnQuCitXSVRIX0RCID0gIi0td2l0aC1kYiAtLXdpdGgtZGJzcWwgLS13aXRob3V0LWRiLXRvb2xzLWludGVncmF0ZWQiCitQQUNLQUdFQ09ORklHW2RiXSA9ICIke1dJVEhfREJ9LC0td2l0aG91dC1kYixkYiwiCisKK1BBQ0tBR0VDT05GSUdbc3FsaXRlXSA9ICItLXdpdGgtc3FsaXRlLC0td2l0aG91dC1zcWxpdGUsc3FsaXRlMywiCisKK1BBQ0tBR0VDT05GSUdbYmVlY3J5cHRdID0gIi0td2l0aC1iZWVjcnlwdD1leHRlcm5hbCwtLXdpdGhvdXQtYmVlY3J5cHQsYmVlY3J5cHQsIgorUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICItLXdpdGgtb3BlbnNzbCwtLXdpdGhvdXQtb3BlbnNzbCxvcGVuc3NsLCIKK1BBQ0tBR0VDT05GSUdbbnNzXSA9ICItLXdpdGgtbnNzLC0td2l0aG91dC1uc3MsbnNzLCIKK1BBQ0tBR0VDT05GSUdbZ2NyeXB0XSA9ICItLXdpdGgtZ2NyeXB0LC0td2l0aG91dC1nY3J5cHQsZ2NyeXB0LCIKK1BBQ0tBR0VDT05GSUdba2V5dXRpbHNdID0gIi0td2l0aC1rZXl1dGlscywtLXdpdGhvdXQta2V5dXRpbHMsa2V5dXRpbHMsIgorUEFDS0FHRUNPTkZJR1tsaWJlbGZdID0gIi0td2l0aC1saWJlbGYsLS13aXRob3V0LWxpYmVsZixlbGZ1dGlscywiCisKK1dJVEhfU0VMSU5VWCA9ICItLXdpdGgtc2VsaW51eCAtLXdpdGgtc2Vwb2wgLS13aXRoLXNlbWFuYWdlIgorV0lUSE9VVF9TRUxJTlVYID0gIi0td2l0aG91dC1zZWxpbnV4IC0td2l0aG91dC1zZXBvbCAtLXdpdGhvdXQtc2VtYW5hZ2UiCitQQUNLQUdFQ09ORklHW3NlbGludXhdID0gIiR7V0lUSF9TRUxJTlVYfSwke1dJVEhPVVRfU0VMSU5VWH0sbGlic2VsaW51eCwiCisKK1dJVEhfTkVPTiA9ICItLXdpdGgtbmVvbiAtLXdpdGgtbGlicHJveHkgLS13aXRoLWV4cGF0IC0td2l0aG91dC1nc3NhcGkiCitXSVRIT1VUX05FT04gPSAiLS13aXRob3V0LW5lb24gLS13aXRob3V0LWxpYnByb3h5IC0td2l0aG91dC1leHBhdCAtLXdpdGhvdXQtZ3NzYXBpIgorUEFDS0FHRUNPTkZJR1tuZW9uXSA9ICIke1dJVEhfTkVPTn0sJHtXSVRIT1VUX05FT059LG5lb24gZXhwYXQsIgorCitQQUNLQUdFQ09ORklHW2x1YV0gPSAiLS13aXRoLWx1YSwtLXdpdGhvdXQtbHVhLGV4cGF0LCIKK1BBQ0tBR0VDT05GSUdbdGNsXSA9ICItLXdpdGgtdGNsLC0td2l0aG91dC10Y2wsdGNsLCIKKworUEFDS0FHRUNPTkZJR1thdWdlYXNdID0gIi0td2l0aC1hdWdlYXMsLS13aXRob3V0LWF1Z2VhcyxhdWdlYXMsIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tdmVyYm9zZSBcCisJCS0tc3lzY29uZmRpcj0ke3N5c2NvbmZkaXJ9IFwKKwkJLS13aXRoLWZpbGUgXAorCQktLXdpdGgtcGF0aC1tYWdpYz0le191c3JsaWJycG19Ly4uLy4uL3NoYXJlL21pc2MvbWFnaWMubWdjIFwKKwkJLS13aXRoLXN5Y2s9aW50ZXJuYWwgXAorCQktLXdpdGhvdXQtcmVhZGxpbmUgXAorCQktLXdpdGhvdXQtbGlidGFzbjEgXAorCQktLXdpdGhvdXQtcGFrY2hvaXMgXAorCQktLXdpdGhvdXQtZ251dGxzIFwKKwkJLS13aXRoLXBjcmUgXAorCQktLWVuYWJsZS11dGY4IFwKKwkJLS13aXRoLXV1aWQgXAorCQktLXdpdGgtYXR0ciBcCisJCS0td2l0aC1hY2wgXAorCQktLXdpdGgtcG9wdD1leHRlcm5hbCBcCisJCS0td2l0aC1wdGhyZWFkcyBcCisJCS0td2l0aG91dC1jdWRmIFwKKwkJLS13aXRob3V0LWZpY2wgXAorCQktLXdpdGhvdXQtYXRlcm0gXAorCQktLXdpdGhvdXQtbml4IFwKKwkJLS13aXRob3V0LWJhc2ggXAorCQktLXdpdGhvdXQtcmMgXAorCQktLXdpdGhvdXQtanMgXAorCQktLXdpdGhvdXQtZ3BzZWUgXAorCQktLXdpdGhvdXQtcnVieSBcCisJCS0td2l0aG91dC1zcXVpcnJlbCBcCisJCS0td2l0aC1idWlsZC1leHRsaWJkZXAgXAorCQktLXdpdGgtYnVpbGQtbWF4ZXh0bGliZGVwIFwKKwkJLS13aXRob3V0LXZhbGdyaW5kIFwKKwkJLS1kaXNhYmxlLW9wZW5tcCBcCisJCS0tZW5hYmxlLWJ1aWxkLXBpYyBcCisJCS0tZW5hYmxlLWJ1aWxkLXZlcnNpb25zY3JpcHQgXAorCQktLWVuYWJsZS1idWlsZC13YXJuaW5ncyBcCisJCS0tZW5hYmxlLWJ1aWxkLWRlYnVnIFwKKwkJLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlIFwKKwkJLS13aXRoLXBhdGgtbWFjcm9zPSR7cnBtX21hY3Jvc30gXAorCQktLXdpdGgtcGF0aC1saWI9JHtsaWJkaXJ9L3JwbSBcCisJCS0td2l0aC1idWdyZXBvcnQ9aHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcgXAorCQktLXByb2dyYW0tcHJlZml4PSBcCisJCVlBQ0M9YnlhY2MiCisKK0NGTEFHU19hcHBlbmQgPSAiIC1EUlBNX1ZFTkRPUl9XSU5EUklWRVIgLURSUE1fVkVORE9SX1BPS1kgLURSUE1fVkVORE9SX09FIgorCitMREZMQUdTX2FwcGVuZF9saWJjLXVjbGliYyA9ICItbHJ0IC1scHRocmVhZCIKKworUEFDS0FHRVMgPSAiJHtQTn0tZGJnICR7UE59ICR7UE59LWRvYyAke1BOfS1saWJzICR7UE59LWRldiAke1BOfS1zdGF0aWNkZXYgJHtQTn0tY29tbW9uICR7UE59LWJ1aWxkIHB5dGhvbi1ycG0tZGJnIHB5dGhvbi1ycG0tc3RhdGljZGV2IHB5dGhvbi1ycG0tZGV2IHB5dGhvbi1ycG0gcGVybC1tb2R1bGUtcnBtIHBlcmwtbW9kdWxlLXJwbS1kZXYgJHtQTn0tbG9jYWxlIgorCitTT0xJQlMgPSAiNS40LnNvIgorCisjIEJhc2VkIG9uICVmaWxlcyBzZWN0aW9uIGluIHRoZSBycG0uc3BlYworCitGSUxFU18ke1BOfSA9ICAiJHtiaW5kaXJ9L3JwbSBcCisJCSR7YmluZGlyfS9ycG1jb25zdGFudCBcCisJCSR7bGliZGlyfS9ycG0vcnBtLiogXAorCQkke2xpYmRpcn0vcnBtL3RncGcgXAorCQkke2xpYmRpcn0vcnBtL21hY3JvcyBcCisJCSR7bGliZGlyfS9ycG0vcnBtcG9wdCBcCisJCSR7bGliZGlyfS9ycG0vcnBtMmNwaW8gXAorCQkke2xpYmRpcn0vcnBtL3ZjaGVjayBcCisJCSR7bGliZGlyfS9ycG0vaGVscGVycyBcCisJCSR7bGliZGlyfS9ycG0vcWYgXAorCQkke2xpYmRpcn0vcnBtL2NwdWluZm8ueWFtbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL210cmVlIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBta2V5IFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtcmVwbyBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbXJlcG8ucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbXNwZWNkdW1wIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtc3BlY2R1bXAucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3dnZXQgXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlIFwKKwkJJHtsb2NhbHN0YXRlZGlyfS9jYWNoZS9ycG0gXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL3dkaiBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vbGliIFwKKwkJJHtsb2NhbHN0YXRlZGlyfS9saWIvcnBtIFwKKwkJJHtsb2NhbHN0YXRlZGlyfS9saWIvd2RqIFwKKwkJJHtiaW5kaXJ9L3JwbS5yZWFsIFwKKwkJJHtiaW5kaXJ9L3JwbWNvbnN0YW50LnJlYWwgXAorCQkke2JpbmRpcn0vcnBtMmNwaW8ucmVhbCBcCisJCSIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcnBtLy5kZWJ1ZyBcCisJCSR7bGliZGlyfS9ycG0vYmluLy5kZWJ1ZyBcCisJCSIKKworRklMRVNfJHtQTn0tY29tbW9uID0gIiR7YmluZGlyfS9ycG0yY3BpbyBcCisJCSR7YmluZGlyfS9nZW5kaWZmIFwKKwkJJHtzeXNjb25mZGlyfS9ycG0gXAorCQkke2xvY2Fsc3RhdGVkaXJ9L3Nwb29sL3JlcGFja2FnZSBcCisJCSIKKworRklMRVNfJHtQTn0tbGlicyA9ICIke2xpYmRpcn0vbGlicnBtLSouc28gXAorCQkke2xpYmRpcn0vbGlicnBtY29uc3RhbnQtKi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1kYi0qLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWlvLSouc28gXAorCQkke2xpYmRpcn0vbGlicnBtbWlzYy0qLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWJ1aWxkLSouc28gXAorCQkiCisKK0ZJTEVTXyR7UE59LWJ1aWxkID0gIiR7cHJlZml4fS9zcmMvcnBtIFwKKwkJJHtiaW5kaXJ9L3JwbWJ1aWxkIFwKKwkJJHtiaW5kaXJ9L3JwbWJ1aWxkLnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2JycC0qIFwKKwkJJHtsaWJkaXJ9L3JwbS9jaGVjay1maWxlcyBcCisJCSR7bGliZGlyfS9ycG0vY3Jvc3MtYnVpbGQgXAorCQkke2xpYmRpcn0vcnBtL2ZpbmQtZGVidWdpbmZvLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9maW5kLWxhbmcuc2ggXAorCQkke2xpYmRpcn0vcnBtL2ZpbmQtcHJvdi5wbCBcCisJCSR7bGliZGlyfS9ycG0vZmluZC1wcm92aWRlcy5wZXJsIFwKKwkJJHtsaWJkaXJ9L3JwbS9maW5kLXJlcS5wbCBcCisJCSR7bGliZGlyfS9ycG0vZmluZC1yZXF1aXJlcy5wZXJsIFwKKwkJJHtsaWJkaXJ9L3JwbS9nZXRwby5zaCBcCisJCSR7bGliZGlyfS9ycG0vaHR0cC5yZXEgXAorCQkke2xpYmRpcn0vcnBtL2phdmFkZXBzLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9tb25vLWZpbmQtcHJvdmlkZXMgXAorCQkke2xpYmRpcn0vcnBtL21vbm8tZmluZC1yZXF1aXJlcyBcCisJCSR7bGliZGlyfS9ycG0vZXhlY3V0YWJsZWRlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL2xpYnRvb2xkZXBzLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9vc2dpZGVwcy5wbCBcCisJCSR7bGliZGlyfS9ycG0vcGVybGRlcHMucGwgXAorCQkke2xpYmRpcn0vcnBtL3BlcmwucHJvdiBcCisJCSR7bGliZGlyfS9ycG0vcGVybC5yZXEgXAorCQkke2xpYmRpcn0vcnBtL3BocC5wcm92IFwKKwkJJHtsaWJkaXJ9L3JwbS9waHAucmVxIFwKKwkJJHtsaWJkaXJ9L3JwbS9wa2djb25maWdkZXBzLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9weXRob25kZXBzLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vZGVidWdlZGl0IFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vZGVidWdlZGl0LnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1jYWNoZSBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWNhY2hlLnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1jbXAgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1jbXAucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRlcHMgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1kZXBzLnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1kZXBzLW9lY29yZSBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRlcHMtb2Vjb3JlLnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1kaWdlc3QgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1kaWdlc3QucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2FiaS1jb21wbGlhbmNlLWNoZWNrZXIucGwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9hcGktc2FuaXR5LWF1dG90ZXN0LnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vY2hyb290IFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vY3AgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9kYnNxbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2ZpbmQgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9pbnN0YWxsLXNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vbHVhIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vbHVhYyBcCisJCSR7bGliZGlyfS9ycG0vYmluL21raW5zdGFsbGRpcnMgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1sdWEgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1sdWFjIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vc3FsaXRlMyBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvY21ha2UgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL2phdmEgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL2xpYnRvb2wgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL21hbmRyaXZhIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9tb25vIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9wZXJsIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9waHAgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3BrZ2NvbmZpZyBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvcHl0aG9uIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9ydWJ5IFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9zZWxpbnV4IFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC90Y2wgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5ycG1idWlsZCBcCisJCSR7bGliZGlyfS9ycG0vdV9wa2cuc2ggXAorCQkke2xpYmRpcn0vcnBtL3Zwa2ctcHJvdmlkZXMuc2ggXAorCQkke2xpYmRpcn0vcnBtL3Zwa2ctcHJvdmlkZXMyLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9wZXJmaWxlX3JwbWRlcHMuc2ggXAorCQkiCitSREVQRU5EU18ke1BOfSA9ICJiYXNlLWZpbGVzIHJ1bi1wb3N0aW5zdHMiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlc2RrID0gIiIKK1JERVBFTkRTXyR7UE59LWJ1aWxkID0gImZpbGUgYmFzaCBwZXJsIgorCitSREVQRU5EU19weXRob24tcnBtID0gIiR7UE59IgorCitGSUxFU19weXRob24tcnBtLWRiZyA9ICIke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3JwbS8uZGVidWcvXyoiCitGSUxFU19weXRob24tcnBtLWRldiA9ICIke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3JwbS8qLmxhIgorRklMRVNfcHl0aG9uLXJwbS1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9ycG0vKi5hIgorRklMRVNfcHl0aG9uLXJwbSA9ICIke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3JwbSIKKworRklMRVNfcGVybC1tb2R1bGUtcnBtID0gIiR7bGliZGlyfS9wZXJsLyovKiBcCisJCSIKKworRklMRVNfcGVybC1tb2R1bGUtcnBtLWRldiA9ICIke3ByZWZpeH0vc2hhcmUvbWFuL21hbjMvUlBNKiBcCisJCSIKKworUkRFUEVORFNfJHtQTn0tZGV2ICs9ICJiYXNoIgorCitGSUxFU18ke1BOfS1kZXYgPSAiJHtpbmNsdWRlZGlyfS9ycG0gXAorCQkke2xpYmRpcn0vbGlicnBtLmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbS5zbyBcCisJCSR7bGliZGlyfS9saWJycG1jb25zdGFudC5sYSBcCisJCSR7bGliZGlyfS9saWJycG1jb25zdGFudC5zbyBcCisJCSR7bGliZGlyfS9saWJycG1kYi5sYSBcCisJCSR7bGliZGlyfS9saWJycG1kYi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1pby5sYSBcCisJCSR7bGliZGlyfS9saWJycG1pby5zbyBcCisJCSR7bGliZGlyfS9saWJycG1taXNjLmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbW1pc2Muc28gXAorCQkke2xpYmRpcn0vbGlicnBtYnVpbGQubGEgXAorCQkke2xpYmRpcn0vbGlicnBtYnVpbGQuc28gXAorCQkke2xpYmRpcn0vcnBtL2xpYi9saWJsdWEubGEgXAorCQkke2xpYmRpcn0vcGtnY29uZmlnL3JwbS5wYyBcCisJCSR7bGliZGlyfS9ycG0vcnBtZGJfbG9hZGN2dCBcCisJCSIKKworRklMRVNfJHtQTn0tc3RhdGljZGV2ID0gIiBcCisJCSR7bGliZGlyfS9saWJycG0uYSBcCisJCSR7bGliZGlyfS9saWJycG1jb25zdGFudC5hIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWRiLmEgXAorCQkke2xpYmRpcn0vbGlicnBtaW8uYSBcCisJCSR7bGliZGlyfS9saWJycG1taXNjLmEgXAorCQkke2xpYmRpcn0vbGlicnBtYnVpbGQuYSBcCisJCSR7bGliZGlyfS9ycG0vbGliL2xpYmx1YS5hIFwKKwkJIgorCitkb19jb25maWd1cmUoKSB7CisJIyBEaXNhYmxlIHRlc3RzIQorCWVjaG8gImFsbDoiID4gJHtTfS90ZXN0cy9NYWtlZmlsZS5hbQorCXNlZCAtZSAncy9AX19NS0RJUl9QQC8le19fbWtkaXJ9IC1wLycgLWkgJHtTfS9tYWNyb3MvbWFjcm9zLmluCisKKwkoIGNkICR7U307ICR7U30vYXV0b2dlbi5zaCApCisKKwkjIE5BU1RZIGhhY2sgdG8gbWFrZSBzdXJlIGNvbmZpZ3VyZSBmaWxlcyB0aGUgcmlnaHQgcGtnLWNvbmZpZyBmaWxlLi4uCisJc2VkIC1lICdzL3BrZy1jb25maWcgLS1leGlzdHMgdXVpZC9wa2ctY29uZmlnIC0tZXhpc3RzIG9zc3AtdXVpZC9nJyBcCisJICAgIC1lICdzL3BrZy1jb25maWcgdXVpZC9wa2ctY29uZmlnIG9zc3AtdXVpZC9nJyAtaSAke1N9L2NvbmZpZ3VyZQorCisJKCBjZCAke1N9L3N5Y2sgOyBzZXQgK2UgOyBybSAtLSAtbCogOyBtYWtlIGRpc3RjbGVhbiApIHx8IDoKKworCWV4cG9ydCB2YXJwcmVmaXg9JHtsb2NhbHN0YXRlZGlyfQorCW9lX3J1bmNvbmYKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJc2VkIC1pIC1lICdzLCVfX3NjcmlwdGxldF9yZXF1aXJlcywjJSVfX3NjcmlwdGxldF9yZXF1aXJlcywnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MKKwlzZWQgLWkgLWUgJ3MsJV9fcGVybF9wcm92aWRlcywjJSVfX3BlcmxfcHJvdmlkZXMsJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC8qCisJc2VkIC1pIC1lICdzLCVfX3BlcmxfcmVxdWlyZXMsIyUlX19wZXJsX3JlcXVpcmVzLCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zLmQvKgorCXNlZCAtaSAtZSAncywlX3JlcGFja2FnZV9hbGxfZXJhc3VyZXNbXl9dLiosJV9yZXBhY2thZ2VfYWxsX2VyYXN1cmVzIDAsJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zCisJc2VkIC1pIC1lICdzLF4jJV9vcGVuYWxsX2JlZm9yZV9jaHJvb3QuKiwlX29wZW5hbGxfYmVmb3JlX2Nocm9vdFx0MSwnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MKKworCSMgRW5hYmxlIERlYmlhbiBzdHlsZSBhcmJpdHJhcnkgdGFncy4uLgorCXNlZCAtaSAtZSAncywlX2FyYml0cmFyeV90YWdzW15fXS4qLCVfYXJiaXRyYXJ5X3RhZ3MgJXtfYXJiaXRyYXJ5X3RhZ3NfZGViaWFufSwnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MKKworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3B5dGhvbmRlcHMuc2ggJHtEfS8ke2xpYmRpcn0vcnBtL3B5dGhvbmRlcHMuc2gKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wZXJmaWxlX3JwbWRlcHMuc2ggJHtEfS8ke2xpYmRpcn0vcnBtL3BlcmZpbGVfcnBtZGVwcy5zaAorCisJIyBSZW1vdmUgdW5wYWNrYWdlZCBmaWxlcyAoYmFzZWQgb24gbGlzdCBpbiBycG0uc3BlYykKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0ve1NwZWNmaWxlLnBtLGNwYW5mbHV0ZSxjcGFuZmx1dGUyLHJwbWRpZmYscnBtZGlmZi5jZ2ksc3FsLnByb3Ysc3FsLnJlcSx0Y2wucmVxLHRycG19CisKKwlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW44L3JwbWNhY2hlLjgqCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuOC9ycG1ncmFwaC44KgorCXJtIC1mICR7RH0vJHttYW5kaXJ9LyovbWFuOC9ycG1jYWNoZS44KgorCXJtIC1mICR7RH0vJHttYW5kaXJ9LyovbWFuOC9ycG1ncmFwaC44KgorCXJtIC1yZiAke0R9LyR7bWFuZGlyfS97ZnIsa299CisKKwlybSAtZiAke0R9LyR7aW5jbHVkZWRpcn0vcG9wdC5oCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vbGlicG9wdC4qCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcGtnY29uZmlnL3BvcHQucGMKKwlybSAtZiAke0R9LyR7ZGF0YWRpcn0vbG9jYWxlLyovTENfTUVTU0FHRVMvcG9wdC5tbworCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjMvcG9wdC4zCisKKwlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW4xL3hhci4xKgorCXJtIC1mICR7RH0vJHtiaW5kaXJ9L3hhcgorCXJtIC1yZiAke0R9LyR7aW5jbHVkZWRpcn0veGFyCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vbGlieGFyKgorCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vbHoqCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vdW5sem1hCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vdW54egorCXJtIC1mICR7RH0vJHtiaW5kaXJ9L3h6KgorCXJtIC1yZiAke0R9LyR7aW5jbHVkZWRpcn0vbHptYSoKKwlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW4xL2x6Ki4xCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcGtnY29uZmlnL2xpYmx6bWEqCisKKwlybSAtZiAke0R9LyR7bGliZGlyfS9weXRob24le3dpdGhfcHl0aG9uX3ZlcnNpb259L3NpdGUtcGFja2FnZXMvKi57YSxsYX0KKwlybSAtZiAke0R9LyR7bGliZGlyfS9weXRob24le3dpdGhfcHl0aG9uX3ZlcnNpb259L3NpdGUtcGFja2FnZXMvcnBtLyoue2EsbGF9CisKKwkjZmluZCAke0R9LyR7bGliZGlyfS9wZXJsNSAtdHlwZSBmIC1hIFwoIC1uYW1lIHBlcmxsb2NhbC5wb2QgLW8gLW5hbWUgLnBhY2tsaXN0IFwKKwkjCS1vIFwoIC1uYW1lICcqLmJzJyAtYSAtZW1wdHkgXCkgXCkgLWV4ZWMgcm0gLWYge30gJzsnCisJI2ZpbmQgJHtEfS8ke2xpYmRpcn0vcGVybDUgLXR5cGUgZCAtZGVwdGggLWV4ZWMgcm1kaXIge30gMj4vZGV2L251bGwgJzsnCisKKwkjIFdlIGRvbid0IHdhbnQgdGhlIGRlZmF1bHQgbWFjcm8gc2V0CisJcm0gLXJmICR7RH0vJHtsaWJkaXJ9L3JwbS97aVszNDU2XTg2KixhdGhsb24qLHBlbnRpdW0qLHg4Nl82NCosYWxwaGEqLHNwYXJjKixpYTY0KixwcGMqLHMzOTAqLGFybXZbMzRdW2xiXSosYXJtdlszNDVdKixtaXBzKixub2FyY2gqfQorCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2RiY29udmVydC5zaAorCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2xpYnNxbGRiLioKKworCSMgV2UgZG9uJ3Qgd2FudCwgbm9yIG5lZWQgdGhlIE1hbmRyaXZhIG11bHRpYXJjaCBpdGVtcworCXJtIC1mICR7RH0vJHtiaW5kaXJ9L211bHRpYXJjaC1kaXNwYXRjaAorCXJtIC1mICR7RH0vJHtiaW5kaXJ9L211bHRpYXJjaC1wbGF0Zm9ybQorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9jaGVjay1tdWx0aWFyY2gtZmlsZXMKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vbWttdWx0aWFyY2gKKwlybSAtZiAke0R9LyR7aW5jbHVkZWRpcn0vbXVsdGlhcmNoLWRpc3BhdGNoLmgKKworCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9nc3RyZWFtZXIuc2gKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vZ2VtX2hlbHBlci5yYgorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9ydWJ5Z2Vtcy5yYgorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9rbW9kLWRlcHMuc2gKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vcHl0aG9uZWdncy5weQorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9rZXJuZWwKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zLmQvZ3N0cmVhbWVyCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9tZ28KKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vYmluL2RiY29udmVydAorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vcG9tMnNwZWMKKworCXJtIC1yZiAke0R9L3Zhci9saWIvd2RqICR7RH0vdmFyL2NhY2hlL3dkagorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vYXBpLXNhbml0eS1jaGVja2VyLnBsCisKK30KKworYWRkX25hdGl2ZV93cmFwcGVyKCkgeworICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ycG0gXAorCQlSUE1fVVNSTElCUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignbGliZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbSBcCisJCVJQTV9FVENSUE09JyQne1JQTV9FVENSUE0tJ2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbX0gXAorCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKKworICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ycG0yY3BpbyBcCisJCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKKwkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCisJCVJQTV9MT0NBTEVESVJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L2xvY2FsZQorCisgICAgICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3JwbWJ1aWxkIFwKKwkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAorCQlSUE1fRVRDUlBNPSckJ3tSUE1fRVRDUlBNLSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG19IFwKKwkJUlBNX0xPQ0FMRURJUlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vbG9jYWxlCisKKyAgICAgICAgY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vcnBtY29uc3RhbnQgXAorCQlSUE1fVVNSTElCUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignbGliZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbSBcCisJCVJQTV9FVENSUE09JyQne1JQTV9FVENSUE0tJ2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbX0gXAorCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKKworCWZvciBycG1fYmluYXJ5IGluICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vcnBtKiAke0R9LyR7bGliZGlyfS9ycG0vYmluL2RlYnVnZWRpdDsgZG8KKyAgICAgICAgCWNyZWF0ZV93cmFwcGVyICRycG1fYmluYXJ5IFwKKwkJCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKKwkJCVJQTV9FVENSUE09JyQne1JQTV9FVENSUE0tJ2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbX0gXAorCQkJUlBNX0xPQ0FMRURJUlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vbG9jYWxlCisJZG9uZQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJYWRkX25hdGl2ZV93cmFwcGVyCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKwlhZGRfbmF0aXZlX3dyYXBwZXIKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV81LjQuMTQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtXzUuNC4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjlhNGJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV81LjQuMTQuYmIKQEAgLTAsMCArMSw1MTYgQEAKK1NVTU1BUlkgPSAiVGhlIFJQTSBwYWNrYWdlIG1hbmFnZW1lbnQgc3lzdGVtIgorREVTQ1JJUFRJT04gPSAiVGhlIFJQTSBQYWNrYWdlIE1hbmFnZXIgKFJQTSkgaXMgYSBwb3dlcmZ1bCBjb21tYW5kIGxpbmUgZHJpdmVuIFwKK3BhY2thZ2UgbWFuYWdlbWVudCBzeXN0ZW0gY2FwYWJsZSBvZiBpbnN0YWxsaW5nLCB1bmluc3RhbGxpbmcsIFwKK3ZlcmlmeWluZywgcXVlcnlpbmcsIGFuZCB1cGRhdGluZyBzb2Z0d2FyZSBwYWNrYWdlcy4gRWFjaCBzb2Z0d2FyZSBcCitwYWNrYWdlIGNvbnNpc3RzIG9mIGFuIGFyY2hpdmUgb2YgZmlsZXMgYWxvbmcgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBcCit0aGUgcGFja2FnZSBsaWtlIGl0cyB2ZXJzaW9uLCBhIGRlc2NyaXB0aW9uLCBldGMuIgorCitSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTiA9ICI1LjQuMTUgaGFzIGEgcGFja2FnZSBkYXRhYmFzZSBpc3N1ZTogaHR0cDovL2xpc3RzLm9wZW5lbWJlZGRlZC5vcmcvcGlwZXJtYWlsL29wZW5lbWJlZGRlZC1jb3JlLzIwMTUtQXVndXN0LzEwOTE4Ny5odG1sIgorCitTVU1NQVJZXyR7UE59LWxpYnMgPSAiTGlicmFyaWVzIGZvciBtYW5pcHVsYXRpbmcgUlBNIHBhY2thZ2VzIgorREVTQ1JJUFRJT05fJHtQTn0tbGlicyA9ICJUaGlzIHBhY2thZ2UgY29udGFpbnMgdGhlIFJQTSBzaGFyZWQgbGlicmFyaWVzLiIKKworU1VNTUFSWV8ke1BOfS1kZXYgPSAiRGV2ZWxvcG1lbnQgZmlsZXMgZm9yIG1hbmlwdWxhdGluZyBSUE0gcGFja2FnZXMiCitERVNDUklQVElPTl8ke1BOfS1kZXYgPSAiVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHRoZSBSUE0gQyBsaWJyYXJ5IGFuZCBoZWFkZXIgZmlsZXMuIFRoZXNlIFwKK2RldmVsb3BtZW50IGZpbGVzIHdpbGwgc2ltcGxpZnkgdGhlIHByb2Nlc3Mgb2Ygd3JpdGluZyBwcm9ncmFtcyB0aGF0IFwKK21hbmlwdWxhdGUgUlBNIHBhY2thZ2VzIGFuZCBkYXRhYmFzZXMuIFRoZXNlIGZpbGVzIGFyZSBpbnRlbmRlZCB0byBcCitzaW1wbGlmeSB0aGUgcHJvY2VzcyBvZiBjcmVhdGluZyBncmFwaGljYWwgcGFja2FnZSBtYW5hZ2VycyBvciBhbnkgXAorb3RoZXIgdG9vbHMgdGhhdCBuZWVkIGFuIGludGltYXRlIGtub3dsZWRnZSBvZiBSUE0gcGFja2FnZXMgaW4gb3JkZXIgXAordG8gZnVuY3Rpb24uIgorCitTVU1NQVJZXyR7UE59LWNvbW1vbiA9ICJDb21tb24gUlBNIHBhdGhzLCBzY3JpcHRzLCBkb2N1bWVudGF0aW9uIGFuZCBjb25maWd1cmF0aW9uIgorREVTQ1JJUFRJT05fJHtQTn0tY29tbW9uID0gIlRoZSBycG0tY29tbW9uIHBhY2thZ2UgY29udGFpbnMgcGF0aHMsIHNjcmlwdHMsIGRvY3VtZW50YXRpb24gXAorYW5kIGNvbmZpZ3VyYXRpb24gY29tbW9uIGJldHdlZW4gUlBNIFBhY2thZ2UgTWFuYWdlci4iCisKK1NVTU1BUllfJHtQTn0tYnVpbGQgPSAiU2NyaXB0cyBhbmQgZXhlY3V0YWJsZSBwcm9ncmFtcyB1c2VkIHRvIGJ1aWxkIHBhY2thZ2VzIgorREVTQ1JJUFRJT05fJHtQTn0tYnVpbGQgPSAiVGhlIHJwbS1idWlsZCBwYWNrYWdlYyBvbnRhaW5zIHRoZSBzY3JpcHRzIGFuZCBleGVjdXRhYmxlIHByb2dyYW1zIFwKK3RoYXQgYXJlIHVzZWQgdG8gYnVpbGQgcGFja2FnZXMgdXNpbmcgdGhlIFJQTSBQYWNrYWdlIE1hbmFnZXIuIgorCitTVU1NQVJZX3B5dGhvbi1ycG0gPSAiUHl0aG9uIGJpbmRpbmdzIGZvciBhcHBzIHdoaWNoIHdpbGwgbWFudXB1bGF0ZSBSUE0gcGFja2FnZXMiCitERVNDUklQVElPTl9weXRob24tcnBtID0gIlRoZSBycG0tcHl0aG9uIHBhY2thZ2UgY29udGFpbnMgYSBtb2R1bGUgdGhhdCBwZXJtaXRzIGFwcGxpY2F0aW9ucyBcCit3cml0dGVuIGluIHRoZSBQeXRob24gcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdG8gdXNlIHRoZSBpbnRlcmZhY2UgXAorc3VwcGxpZWQgYnkgdGhlIFJQTSBQYWNrYWdlIE1hbmFnZXIgbGlicmFyaWVzLiIKKworU1VNTUFSWV9wZXJsLW1vZHVsZS1ycG0gPSAiUGVybCBiaW5kaW5ncyBmb3IgYXBwcyB3aGljaCB3aWxsIG1hbmlwdWxhdGUgUlBNIHBhY2thZ2VzIgorREVTQ1JJUFRJT05fcGVybC1tb2R1bGVzLXJwbSA9ICJUaGUgcGVybC1tb2R1bGVzLXJwbSBwYWNrYWdlIGNvbnRhaW5zIGEgbW9kdWxlIHRoYXQgcGVybWl0cyBhcHBsaWNhdGlvbnMgXAord3JpdHRlbiBpbiB0aGUgUGVybCBwcm9ncmFtbWluZyBsYW5ndWFnZSB0byB1c2UgdGhlIGludGVyZmFjZSBcCitzdXBwbGllZCBieSB0aGUgUlBNIFBhY2thZ2UgTWFuYWdlciBsaWJyYXJpZXMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vcnBtNS5vcmcvIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSIKKworREVQRU5EUyA9ICJsaWJwY3JlIGF0dHIgYWNsIHBvcHQgb3NzcC11dWlkIGZpbGUgYnlhY2MtbmF0aXZlIgorCisjIHJwbTJjcGlvIGlzIGEgc2hlbGwgc2NyaXB0LCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBycG0gc3JjLnJwbS4gIEl0IGlzIG5lZWRlZAorIyBpbiBvcmRlciB0byBleHRyYWN0IHRoZSBkaXN0cmlidXRpb24gU1JQTSBpbnRvIGEgZm9ybWF0IHdlIGNhbiBleHRyYWN0Li4uCitTUkNfVVJJID0gImh0dHA6Ly93d3cucnBtNS5vcmcvZmlsZXMvcnBtL3JwbS01LjQvcnBtLTUuNC4xNC0wLjIwMTMxMDI0LnNyYy5ycG07ZXh0cmFjdD1ycG0tNS40LjE0LnRhci5neiBcCisJICAgZmlsZTovL3JwbS1sb2ctYXV0by1ybS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1kYi1yZWR1Y2UucGF0Y2ggXAorCSAgIGZpbGU6Ly9wZXJmaWxlX3JwbWRlcHMuc2ggXAorCSAgIGZpbGU6Ly9ycG0tYXV0b2dlbi5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1saWJzcWwtZml4LnBhdGNoIFwKKwkgICBmaWxlOi8vaGVhZGVyLWluY2x1ZGUtZml4LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXBsYXRmb3JtLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXNob3dyYy5wYXRjaCBcCisJICAgZmlsZTovL3JwbS10b29scy1tdHJlZS1MREZMQUdTLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWZpbGVjbGFzcy5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1jYW5vbmFyY2gucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbm8tbG9vcG1zZy5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1zY3JpcHRsZXRleGVjaGVscGVyLnBhdGNoIFwKKwkgICBmaWxlOi8vcHl0aG9uZGVwcy5zaCBcCisJICAgZmlsZTovL3JwbWRlcHMtb2Vjb3JlLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXJlc29sdmVkZXAucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbm8tcGVybC11cnBtLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLW1hY3Jvcy5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1sdWEucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tb3NzcC11dWlkLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXBhY2thZ2VvcmlnaW4ucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGtnY29uZmlnZGVwcy5wYXRjaCBcCisJICAgZmlsZTovL3VjbGliYy1zdXBwb3J0LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtYXRjaC5wYXRjaCBcCisJICAgZmlsZTovL2ZzdGFjay1wcm90ZWN0b3ItY29uZmlndXJlLWNoZWNrLnBhdGNoIFwKKwkgICBmaWxlOi8vZGJjb252ZXJ0LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXV1aWQtaW5jbHVkZS5wYXRjaCBcCisJICAgZmlsZTovL21ha2VmaWxlLWFtLWV4ZWMtaG9vay5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1kYl9idWZmZXJfc21hbGwucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcHktaW5pdC5wYXRjaCBcCisJICAgZmlsZTovL3B5dGhvbi1ycG0tcnBtc2Vuc2UucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcmVsb2MtbWFjcm9zLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXBsYXRmb3JtMi5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1yZW1vdmUtc3lrY3BhcnNlLWRlY2wucGF0Y2ggXAorCSAgIGZpbGU6Ly9kZWJ1Z2VkaXQtc2Vndi5wYXRjaCBcCisJICAgZmlsZTovL2RlYnVnZWRpdC12YWxpZC1maWxlLXRvLWZpeC1zZWdtZW50LWZhdWx0LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXBsYXRmb3JtLWZpbGUtZml4LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWxzYi1jb21wYXRpYmlsaXR5LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXRhZy1nZW5lcmF0ZS1lbmRpYW4tY29udmVyc2lvbi1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly92ZXJpZnktZml4LWJyb2tlbi1sb2dpYy1mb3ItZ2hvc3QtYXZvaWRhbmNlLU1hcmstSGF0LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWhhcmRsaW5rLXNlZ2ZhdWx0LWZpeC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1wYXlsb2FkLXVzZS1oYXNoZWQtaW5vZGUucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZml4LWxvZ2lvLWNwLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWRiNS1vci1kYjYucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZGlzYWJsZS1Xbm8tb3ZlcnJpZGUtaW5pdC5wYXRjaCBcCisJICAgZmlsZTovL3JwbXF2X2NjX2JfZ29uZS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1yZWFscGF0aC5wYXRjaCBcCisJICAgZmlsZTovLzAwMDEtdXNpbmctcG9wdFBhcnNlQXJndlN0cmluZy10by1wYXJzZS10aGUtX2dwZ19jaGVja19wYS5wYXRjaCBcCisJICAgZmlsZTovL25vLWxkZmxhZ3MtaW4tcGtnY29uZmlnLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWx1YS1maXgtcHJpbnQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tY2hlY2stcm9vdHBhdGgtcmVhc29uYWJsZW5lc3MucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbWFjcm9zLmluLWRpc2FibGUtZXh0ZXJuYWwta2V5LXNlcnZlci5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1vcGVuZGItYmVmb3JlLXZlcmlmeXNjcmlwdC10by1hdm9pZC1udWxsLXBvaW50LnBhdGNoIFwKKwkgICIKKworIyBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIGVuYWJsZSBwbGF0Zm9ybSBzY29yZSBkZWJ1Z2dpbmcKKyMgVGhpcyBpcyB1c2VmdWwgd2hlbiBpZGVudGlmeWluZyBpc3N1ZXMgd2l0aCBTbWFydCBiZWluZyB1bmFibGUKKyMgdG8gcHJvY2VzcyBjZXJ0YWluIHBhY2thZ2UgZmVlZHMuCisjU1JDX1VSSSArPSAiZmlsZTovL3JwbS1kZWJ1Zy1wbGF0Zm9ybS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjI1MDkzZDM5OWEwYjVkMTM0MmQyNDkwMGE5MWIzNDdkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY3NmUzYWI0MWY3MmUzYjUwNGUwNDEwOWNmYjU2NWEzMDA3NDJmNTZhN2RhMDg0ZjIwMjAxM2IzMGVlYWU0NjciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworYWNwYXRocyA9ICItSSAke1N9L2RiL2Rpc3QvYWNsb2NhbCAtSSAke1N9L2RiL2Rpc3QvYWNsb2NhbF9qYXZhIgorCisjIFNwZWNpZnkgdGhlIGRlZmF1bHQgcnBtIG1hY3JvcyBpbiB0ZXJtcyBvZiBhZGp1c3RhYmxlIHZhcmlhYmxlcworcnBtX21hY3JvcyA9ICIle191c3JsaWJycG19L21hY3Jvczole191c3JsaWJycG19LyR7RElTVFJPfS9tYWNyb3M6JXtfdXNybGlicnBtfS8ke0RJU1RST30vJXtfdGFyZ2V0fS9tYWNyb3M6JXtfZXRjcnBtfS9tYWNyb3MuKjole19ldGNycG19L21hY3Jvczole19ldGNycG19LyV7X3RhcmdldH0vbWFjcm9zOn4vLm9lcnBtbWFjcm9zIgorcnBtX21hY3Jvc19jbGFzcy1uYXRpdmUgPSAiJXtfdXNybGlicnBtfS9tYWNyb3M6JXtfdXNybGlicnBtfS8ke0RJU1RST30vbWFjcm9zOiV7X3VzcmxpYnJwbX0vJHtESVNUUk99LyV7X3RhcmdldH0vbWFjcm9zOn4vLm9lcnBtbWFjcm9zIgorcnBtX21hY3Jvc19jbGFzcy1uYXRpdmVzZGsgPSAiJXtfdXNybGlicnBtfS9tYWNyb3M6JXtfdXNybGlicnBtfS8ke0RJU1RST30vbWFjcm9zOiV7X3VzcmxpYnJwbX0vJHtESVNUUk99LyV7X3RhcmdldH0vbWFjcm9zOn4vLm9lcnBtbWFjcm9zIgorCisjIHNxbGl0ZSBsdWEgdGNsIGF1Z2VhcyBuc3MgZ2NyeXB0IG5lb24geHogeGFyIGtleXV0aWxzIHBlcmwgc2VsaW51eAorCisjIE5vdGU6IHBlcmwgYW5kIHNxbGl0ZSB3L28gZGIgc3BlY2lmaWVkIGRvZXMgbm90IGN1cnJlbnRseSB3b3JrLgorIyAgICAgICB0Y2wsIGF1Z2VhcywgbnNzLCBnY3J5cHQsIHhhciBhbmQga2V5dXRpbHMgc3VwcG9ydCBpcyB1bnRlc3RlZC4KK1BBQ0tBR0VDT05GSUcgPz89ICJkYiBiemlwMiB6bGliIGJlZWNyeXB0IG9wZW5zc2wgbGliZWxmIHB5dGhvbiIKKworUEFDS0FHRUNPTkZJR1tiemlwMl0gPSAiLS13aXRoLWJ6aXAyLC0td2l0aG91dC1iemlwMixiemlwMiwiCitQQUNLQUdFQ09ORklHW3h6XSA9ICItLXdpdGgteHosLS13aXRob3V0LXh6LHh6LCIKK1BBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS13aXRoLXpsaWIsLS13aXRob3V0LXpsaWIsemxpYiwiCitQQUNLQUdFQ09ORklHW3hhcl0gPSAiLS13aXRoLXhhciwtLXdpdGhvdXQteGFyLHhhciwiCisKK1dJVEhfUFlUSE9OID0gIiAtLXdpdGgtcHl0aG9uPSR7UFlUSE9OX0JBU0VWRVJTSU9OfSBcCisJCS0td2l0aC1weXRob24taW5jLWRpcj0ke1NUQUdJTkdfSU5DRElSfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0gXAorCQktLXdpdGgtcHl0aG9uLWxpYi1kaXI9JHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfS9zaXRlLXBhY2thZ2VzIFwKKwkJLS13aXRob3V0LXB5dGhvbmVtYmVkIgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIiR7V0lUSF9QWVRIT059LC0td2l0aG91dC1weXRob24scHl0aG9uLCIKKworIyBQZXJsIG1vZHVsZXMgYXJlIG5vdCBidWlsdCwgYnV0IHRoZXkgY291bGQgYmUgZW5hYmxlZCBmYWlybHkgZWFzaWx5CisjIHRoZSBwZXJsIG1vZHVsZSBjcmVhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIHdvdWxkIG5lZWQgdG8gYmUgcGF0Y2hlZC4KKyMgKGN1cnJlbnRseSBoYXMgaG9zdCBwZXJsIGNvbnRhbWluYXRpb24gaXNzdWVzKQorV0lUSF9QRVJMID0gIi0td2l0aC1wZXJsIC0td2l0aG91dC1wZXJsZW1iZWQgLS13aXRob3V0LXBlcmwtdXJwbSIKK1dJVEhPVVRfUEVSTCA9ICItLXdpdGhvdXQtcGVybCAtLXdpdGhvdXQtcGVybC11cnBtIgorUEFDS0FHRUNPTkZJR1twZXJsXSA9ICIke1dJVEhfUEVSTH0sJHtXSVRIT1VUX1BFUkx9LHBlcmwsIgorCisjIFRoZSAtLXdpdGgtZGJzcWwgd2lsbCBvbmx5IHRlbGwgUlBNIHRvIGNoZWNrIGZvciBzdXBwb3J0LCBkYgorIyBtYXkgb3IgbWF5IG5vdCBiZSBidWlsdCB3LyB0aGUgZGJzcWwgc3VwcG9ydC4KK1dJVEhfREIgPSAiLS13aXRoLWRiIC0td2l0aC1kYnNxbCAtLXdpdGhvdXQtZGItdG9vbHMtaW50ZWdyYXRlZCIKK1BBQ0tBR0VDT05GSUdbZGJdID0gIiR7V0lUSF9EQn0sLS13aXRob3V0LWRiLGRiLCIKKworUEFDS0FHRUNPTkZJR1tzcWxpdGVdID0gIi0td2l0aC1zcWxpdGUsLS13aXRob3V0LXNxbGl0ZSxzcWxpdGUzLCIKKworUEFDS0FHRUNPTkZJR1tiZWVjcnlwdF0gPSAiLS13aXRoLWJlZWNyeXB0PWV4dGVybmFsLC0td2l0aG91dC1iZWVjcnlwdCxiZWVjcnlwdCwiCitQQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi0td2l0aC1vcGVuc3NsLC0td2l0aG91dC1vcGVuc3NsLG9wZW5zc2wsIgorUEFDS0FHRUNPTkZJR1tuc3NdID0gIi0td2l0aC1uc3MsLS13aXRob3V0LW5zcyxuc3MsIgorUEFDS0FHRUNPTkZJR1tnY3J5cHRdID0gIi0td2l0aC1nY3J5cHQsLS13aXRob3V0LWdjcnlwdCxnY3J5cHQsIgorUEFDS0FHRUNPTkZJR1trZXl1dGlsc10gPSAiLS13aXRoLWtleXV0aWxzLC0td2l0aG91dC1rZXl1dGlscyxrZXl1dGlscywiCitQQUNLQUdFQ09ORklHW2xpYmVsZl0gPSAiLS13aXRoLWxpYmVsZiwtLXdpdGhvdXQtbGliZWxmLGVsZnV0aWxzLCIKKworV0lUSF9TRUxJTlVYID0gIi0td2l0aC1zZWxpbnV4IC0td2l0aC1zZXBvbCAtLXdpdGgtc2VtYW5hZ2UiCitXSVRIT1VUX1NFTElOVVggPSAiLS13aXRob3V0LXNlbGludXggLS13aXRob3V0LXNlcG9sIC0td2l0aG91dC1zZW1hbmFnZSIKK1BBQ0tBR0VDT05GSUdbc2VsaW51eF0gPSAiJHtXSVRIX1NFTElOVVh9LCR7V0lUSE9VVF9TRUxJTlVYfSxsaWJzZWxpbnV4LCIKKworV0lUSF9ORU9OID0gIi0td2l0aC1uZW9uIC0td2l0aC1saWJwcm94eSAtLXdpdGgtZXhwYXQgLS13aXRob3V0LWdzc2FwaSIKK1dJVEhPVVRfTkVPTiA9ICItLXdpdGhvdXQtbmVvbiAtLXdpdGhvdXQtbGlicHJveHkgLS13aXRob3V0LWV4cGF0IC0td2l0aG91dC1nc3NhcGkiCitQQUNLQUdFQ09ORklHW25lb25dID0gIiR7V0lUSF9ORU9OfSwke1dJVEhPVVRfTkVPTn0sbmVvbiBleHBhdCwiCisKK1BBQ0tBR0VDT05GSUdbbHVhXSA9ICItLXdpdGgtbHVhLC0td2l0aG91dC1sdWEsZXhwYXQsIgorUEFDS0FHRUNPTkZJR1t0Y2xdID0gIi0td2l0aC10Y2wsLS13aXRob3V0LXRjbCx0Y2wsIgorCitQQUNLQUdFQ09ORklHW2F1Z2Vhc10gPSAiLS13aXRoLWF1Z2VhcywtLXdpdGhvdXQtYXVnZWFzLGF1Z2VhcywiCisKK0VYVFJBX09FQ09ORiArPSAiLS12ZXJib3NlIFwKKwkJLS1zeXNjb25mZGlyPSR7c3lzY29uZmRpcn0gXAorCQktLXdpdGgtZmlsZSBcCisJCS0td2l0aC1wYXRoLW1hZ2ljPSV7X3VzcmxpYnJwbX0vLi4vLi4vc2hhcmUvbWlzYy9tYWdpYy5tZ2MgXAorCQktLXdpdGgtc3ljaz1pbnRlcm5hbCBcCisJCS0td2l0aG91dC1yZWFkbGluZSBcCisJCS0td2l0aG91dC1saWJ0YXNuMSBcCisJCS0td2l0aG91dC1wYWtjaG9pcyBcCisJCS0td2l0aG91dC1nbnV0bHMgXAorCQktLXdpdGgtcGNyZSBcCisJCS0tZW5hYmxlLXV0ZjggXAorCQktLXdpdGgtdXVpZCBcCisJCS0td2l0aC1hdHRyIFwKKwkJLS13aXRoLWFjbCBcCisJCS0td2l0aC1wb3B0PWV4dGVybmFsIFwKKwkJLS13aXRoLXB0aHJlYWRzIFwKKwkJLS13aXRob3V0LWN1ZGYgXAorCQktLXdpdGhvdXQtZmljbCBcCisJCS0td2l0aG91dC1hdGVybSBcCisJCS0td2l0aG91dC1uaXggXAorCQktLXdpdGhvdXQtYmFzaCBcCisJCS0td2l0aG91dC1yYyBcCisJCS0td2l0aG91dC1qcyBcCisJCS0td2l0aG91dC1ncHNlZSBcCisJCS0td2l0aG91dC1ydWJ5IFwKKwkJLS13aXRob3V0LXNxdWlycmVsIFwKKwkJLS13aXRoLWJ1aWxkLWV4dGxpYmRlcCBcCisJCS0td2l0aC1idWlsZC1tYXhleHRsaWJkZXAgXAorCQktLXdpdGhvdXQtdmFsZ3JpbmQgXAorCQktLWRpc2FibGUtb3Blbm1wIFwKKwkJLS1lbmFibGUtYnVpbGQtcGljIFwKKwkJLS1lbmFibGUtYnVpbGQtdmVyc2lvbnNjcmlwdCBcCisJCS0tZW5hYmxlLWJ1aWxkLXdhcm5pbmdzIFwKKwkJLS1lbmFibGUtYnVpbGQtZGVidWcgXAorCQktLWVuYWJsZS1tYWludGFpbmVyLW1vZGUgXAorCQktLXdpdGgtcGF0aC1tYWNyb3M9JHtycG1fbWFjcm9zfSBcCisJCS0td2l0aC1wYXRoLWxpYj0ke2xpYmRpcn0vcnBtIFwKKwkJLS13aXRoLWJ1Z3JlcG9ydD1odHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZyBcCisJCS0tcHJvZ3JhbS1wcmVmaXg9IFwKKwkJWUFDQz1ieWFjYyIKKworQ0ZMQUdTX2FwcGVuZCA9ICIgLURSUE1fVkVORE9SX1dJTkRSSVZFUiAtRFJQTV9WRU5ET1JfUE9LWSAtRFJQTV9WRU5ET1JfT0UiCisKK0xERkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjID0gIi1scnQgLWxwdGhyZWFkIgorCitQQUNLQUdFUyA9ICIke1BOfS1kYmcgJHtQTn0gJHtQTn0tZG9jICR7UE59LWxpYnMgJHtQTn0tZGV2ICR7UE59LXN0YXRpY2RldiAke1BOfS1jb21tb24gJHtQTn0tYnVpbGQgcHl0aG9uLXJwbSBwZXJsLW1vZHVsZS1ycG0gJHtQTn0tbG9jYWxlIgorCitTT0xJQlMgPSAiNS40LnNvIgorCisjIEJhc2VkIG9uICVmaWxlcyBzZWN0aW9uIGluIHRoZSBycG0uc3BlYworCitGSUxFU18ke1BOfSA9ICAiJHtiaW5kaXJ9L3JwbSBcCisJCSR7YmluZGlyfS9ycG1jb25zdGFudCBcCisJCSR7bGliZGlyfS9ycG0vcnBtLiogXAorCQkke2xpYmRpcn0vcnBtL3RncGcgXAorCQkke2xpYmRpcn0vcnBtL21hY3JvcyBcCisJCSR7bGliZGlyfS9ycG0vcnBtcG9wdCBcCisJCSR7bGliZGlyfS9ycG0vcnBtMmNwaW8gXAorCQkke2xpYmRpcn0vcnBtL3ZjaGVjayBcCisJCSR7bGliZGlyfS9ycG0vaGVscGVycyBcCisJCSR7bGliZGlyfS9ycG0vcWYgXAorCQkke2xpYmRpcn0vcnBtL2NwdWluZm8ueWFtbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL210cmVlIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBta2V5IFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtcmVwbyBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbXJlcG8ucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbXNwZWNkdW1wIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtc3BlY2R1bXAucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3dnZXQgXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlIFwKKwkJJHtsb2NhbHN0YXRlZGlyfS9jYWNoZS9ycG0gXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL3dkaiBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vbGliIFwKKwkJJHtsb2NhbHN0YXRlZGlyfS9saWIvcnBtIFwKKwkJJHtsb2NhbHN0YXRlZGlyfS9saWIvd2RqIFwKKwkJJHtiaW5kaXJ9L3JwbS5yZWFsIFwKKwkJJHtiaW5kaXJ9L3JwbWNvbnN0YW50LnJlYWwgXAorCQkke2JpbmRpcn0vcnBtMmNwaW8ucmVhbCBcCisJCSIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcnBtLy5kZWJ1ZyBcCisJCSR7bGliZGlyfS9ycG0vYmluLy5kZWJ1ZyBcCisJCSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvcnBtLy5kZWJ1Zy9fKiBcCisJCSIKKworRklMRVNfJHtQTn0tY29tbW9uID0gIiR7YmluZGlyfS9ycG0yY3BpbyBcCisJCSR7YmluZGlyfS9nZW5kaWZmIFwKKwkJJHtzeXNjb25mZGlyfS9ycG0gXAorCQkke2xvY2Fsc3RhdGVkaXJ9L3Nwb29sL3JlcGFja2FnZSBcCisJCSIKKworRklMRVNfJHtQTn0tbGlicyA9ICIke2xpYmRpcn0vbGlicnBtLSouc28gXAorCQkke2xpYmRpcn0vbGlicnBtY29uc3RhbnQtKi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1kYi0qLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWlvLSouc28gXAorCQkke2xpYmRpcn0vbGlicnBtbWlzYy0qLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWJ1aWxkLSouc28gXAorCQkiCisKK0ZJTEVTXyR7UE59LWJ1aWxkID0gIiR7cHJlZml4fS9zcmMvcnBtIFwKKwkJJHtiaW5kaXJ9L3JwbWJ1aWxkIFwKKwkJJHtiaW5kaXJ9L3JwbWJ1aWxkLnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2JycC0qIFwKKwkJJHtsaWJkaXJ9L3JwbS9jaGVjay1maWxlcyBcCisJCSR7bGliZGlyfS9ycG0vY3Jvc3MtYnVpbGQgXAorCQkke2xpYmRpcn0vcnBtL2ZpbmQtZGVidWdpbmZvLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9maW5kLWxhbmcuc2ggXAorCQkke2xpYmRpcn0vcnBtL2ZpbmQtcHJvdi5wbCBcCisJCSR7bGliZGlyfS9ycG0vZmluZC1wcm92aWRlcy5wZXJsIFwKKwkJJHtsaWJkaXJ9L3JwbS9maW5kLXJlcS5wbCBcCisJCSR7bGliZGlyfS9ycG0vZmluZC1yZXF1aXJlcy5wZXJsIFwKKwkJJHtsaWJkaXJ9L3JwbS9nZXRwby5zaCBcCisJCSR7bGliZGlyfS9ycG0vaHR0cC5yZXEgXAorCQkke2xpYmRpcn0vcnBtL2phdmFkZXBzLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9tb25vLWZpbmQtcHJvdmlkZXMgXAorCQkke2xpYmRpcn0vcnBtL21vbm8tZmluZC1yZXF1aXJlcyBcCisJCSR7bGliZGlyfS9ycG0vZXhlY3V0YWJsZWRlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL2xpYnRvb2xkZXBzLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9vc2dpZGVwcy5wbCBcCisJCSR7bGliZGlyfS9ycG0vcGVybGRlcHMucGwgXAorCQkke2xpYmRpcn0vcnBtL3BlcmwucHJvdiBcCisJCSR7bGliZGlyfS9ycG0vcGVybC5yZXEgXAorCQkke2xpYmRpcn0vcnBtL3BocC5wcm92IFwKKwkJJHtsaWJkaXJ9L3JwbS9waHAucmVxIFwKKwkJJHtsaWJkaXJ9L3JwbS9wa2djb25maWdkZXBzLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9weXRob25kZXBzLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vZGVidWdlZGl0IFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vZGVidWdlZGl0LnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1jYWNoZSBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWNhY2hlLnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1jbXAgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1jbXAucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRlcHMgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1kZXBzLnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1kZXBzLW9lY29yZSBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRlcHMtb2Vjb3JlLnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1kaWdlc3QgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1kaWdlc3QucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2FiaS1jb21wbGlhbmNlLWNoZWNrZXIucGwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9hcGktc2FuaXR5LWF1dG90ZXN0LnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vY2hyb290IFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vY3AgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9kYnNxbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2ZpbmQgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9pbnN0YWxsLXNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vbHVhIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vbHVhYyBcCisJCSR7bGliZGlyfS9ycG0vYmluL21raW5zdGFsbGRpcnMgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1sdWEgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1sdWFjIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vc3FsaXRlMyBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvY21ha2UgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL2phdmEgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL2xpYnRvb2wgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL21hbmRyaXZhIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9tb25vIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9wZXJsIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9waHAgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3BrZ2NvbmZpZyBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvcHl0aG9uIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9ydWJ5IFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9zZWxpbnV4IFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC90Y2wgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5ycG1idWlsZCBcCisJCSR7bGliZGlyfS9ycG0vdV9wa2cuc2ggXAorCQkke2xpYmRpcn0vcnBtL3Zwa2ctcHJvdmlkZXMuc2ggXAorCQkke2xpYmRpcn0vcnBtL3Zwa2ctcHJvdmlkZXMyLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9wZXJmaWxlX3JwbWRlcHMuc2ggXAorCQkiCitSREVQRU5EU18ke1BOfSA9ICJiYXNlLWZpbGVzIHJ1bi1wb3N0aW5zdHMiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlc2RrID0gIiIKK1JERVBFTkRTXyR7UE59LWJ1aWxkID0gImZpbGUgYmFzaCBwZXJsIgorCitSREVQRU5EU19weXRob24tcnBtID0gIiR7UE59IgorCitGSUxFU19weXRob24tcnBtID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvcnBtIgorUFJPVklERVMgKz0gInB5dGhvbi1ycG0iCisKK0ZJTEVTX3BlcmwtbW9kdWxlLXJwbSA9ICIke2xpYmRpcn0vcGVybC8qLyogXAorCQkiCisKK1JERVBFTkRTXyR7UE59LWRldiArPSAiYmFzaCIKKworRklMRVNfJHtQTn0tZGV2ID0gIiR7aW5jbHVkZWRpcn0vcnBtIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbS5sYSBcCisJCSR7bGliZGlyfS9saWJycG0uc28gXAorCQkke2xpYmRpcn0vbGlicnBtY29uc3RhbnQubGEgXAorCQkke2xpYmRpcn0vbGlicnBtY29uc3RhbnQuc28gXAorCQkke2xpYmRpcn0vbGlicnBtZGIubGEgXAorCQkke2xpYmRpcn0vbGlicnBtZGIuc28gXAorCQkke2xpYmRpcn0vbGlicnBtaW8ubGEgXAorCQkke2xpYmRpcn0vbGlicnBtaW8uc28gXAorCQkke2xpYmRpcn0vbGlicnBtbWlzYy5sYSBcCisJCSR7bGliZGlyfS9saWJycG1taXNjLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWJ1aWxkLmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWJ1aWxkLnNvIFwKKwkJJHtsaWJkaXJ9L3JwbS9saWIvbGlibHVhLmxhIFwKKwkJJHtsaWJkaXJ9L3BrZ2NvbmZpZy9ycG0ucGMgXAorCQkke2xpYmRpcn0vcnBtL3JwbWRiX2xvYWRjdnQgXAorCQkiCisKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiA9ICIgXAorCQkke2xpYmRpcn0vbGlicnBtLmEgXAorCQkke2xpYmRpcn0vbGlicnBtY29uc3RhbnQuYSBcCisJCSR7bGliZGlyfS9saWJycG1kYi5hIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWlvLmEgXAorCQkke2xpYmRpcn0vbGlicnBtbWlzYy5hIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWJ1aWxkLmEgXAorCQkke2xpYmRpcn0vcnBtL2xpYi9saWJsdWEuYSBcCisJCSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvcnBtLyouYSBcCisJCSIKKworZG9fY29uZmlndXJlKCkgeworCSMgRGlzYWJsZSB0ZXN0cyEKKwllY2hvICJhbGw6IiA+ICR7U30vdGVzdHMvTWFrZWZpbGUuYW0KKwlzZWQgLWUgJ3MvQF9fTUtESVJfUEAvJXtfX21rZGlyfSAtcC8nIC1pICR7U30vbWFjcm9zL21hY3Jvcy5pbgorCisJKCBjZCAke1N9OyAke1N9L2F1dG9nZW4uc2ggKQorCisJIyBOQVNUWSBoYWNrIHRvIG1ha2Ugc3VyZSBjb25maWd1cmUgZmlsZXMgdGhlIHJpZ2h0IHBrZy1jb25maWcgZmlsZS4uLgorCXNlZCAtZSAncy9wa2ctY29uZmlnIC0tZXhpc3RzIHV1aWQvcGtnLWNvbmZpZyAtLWV4aXN0cyBvc3NwLXV1aWQvZycgXAorCSAgICAtZSAncy9wa2ctY29uZmlnIHV1aWQvcGtnLWNvbmZpZyBvc3NwLXV1aWQvZycgLWkgJHtTfS9jb25maWd1cmUKKworCSggY2QgJHtTfS9zeWNrIDsgc2V0ICtlIDsgcm0gLS0gLWwqIDsgbWFrZSBkaXN0Y2xlYW4gKSB8fCA6CisKKwlleHBvcnQgdmFycHJlZml4PSR7bG9jYWxzdGF0ZWRpcn0KKwlvZV9ydW5jb25mCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXNlZCAtaSAtZSAncywlX19zY3JpcHRsZXRfcmVxdWlyZXMsIyUlX19zY3JpcHRsZXRfcmVxdWlyZXMsJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zCisJc2VkIC1pIC1lICdzLCVfX3BlcmxfcHJvdmlkZXMsIyUlX19wZXJsX3Byb3ZpZGVzLCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zLmQvKgorCXNlZCAtaSAtZSAncywlX19wZXJsX3JlcXVpcmVzLCMlJV9fcGVybF9yZXF1aXJlcywnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3Jvcy5kLyoKKwlzZWQgLWkgLWUgJ3MsJV9yZXBhY2thZ2VfYWxsX2VyYXN1cmVzW15fXS4qLCVfcmVwYWNrYWdlX2FsbF9lcmFzdXJlcyAwLCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcworCXNlZCAtaSAtZSAncyxeIyVfb3BlbmFsbF9iZWZvcmVfY2hyb290LiosJV9vcGVuYWxsX2JlZm9yZV9jaHJvb3RcdDEsJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zCisKKwkjIEVuYWJsZSBEZWJpYW4gc3R5bGUgYXJiaXRyYXJ5IHRhZ3MuLi4KKwlzZWQgLWkgLWUgJ3MsJV9hcmJpdHJhcnlfdGFnc1teX10uKiwlX2FyYml0cmFyeV90YWdzICV7X2FyYml0cmFyeV90YWdzX2RlYmlhbn0sJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zCisKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9weXRob25kZXBzLnNoICR7RH0vJHtsaWJkaXJ9L3JwbS9weXRob25kZXBzLnNoCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcGVyZmlsZV9ycG1kZXBzLnNoICR7RH0vJHtsaWJkaXJ9L3JwbS9wZXJmaWxlX3JwbWRlcHMuc2gKKworCSMgUmVtb3ZlIHVucGFja2FnZWQgZmlsZXMgKGJhc2VkIG9uIGxpc3QgaW4gcnBtLnNwZWMpCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL3tTcGVjZmlsZS5wbSxjcGFuZmx1dGUsY3BhbmZsdXRlMixycG1kaWZmLHJwbWRpZmYuY2dpLHNxbC5wcm92LHNxbC5yZXEsdGNsLnJlcSx0cnBtfQorCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuOC9ycG1jYWNoZS44KgorCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjgvcnBtZ3JhcGguOCoKKwlybSAtZiAke0R9LyR7bWFuZGlyfS8qL21hbjgvcnBtY2FjaGUuOCoKKwlybSAtZiAke0R9LyR7bWFuZGlyfS8qL21hbjgvcnBtZ3JhcGguOCoKKwlybSAtcmYgJHtEfS8ke21hbmRpcn0ve2ZyLGtvfQorCisJcm0gLWYgJHtEfS8ke2luY2x1ZGVkaXJ9L3BvcHQuaAorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L2xpYnBvcHQuKgorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3BrZ2NvbmZpZy9wb3B0LnBjCisJcm0gLWYgJHtEfS8ke2RhdGFkaXJ9L2xvY2FsZS8qL0xDX01FU1NBR0VTL3BvcHQubW8KKwlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW4zL3BvcHQuMworCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuMS94YXIuMSoKKwlybSAtZiAke0R9LyR7YmluZGlyfS94YXIKKwlybSAtcmYgJHtEfS8ke2luY2x1ZGVkaXJ9L3hhcgorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L2xpYnhhcioKKworCXJtIC1mICR7RH0vJHtiaW5kaXJ9L2x6KgorCXJtIC1mICR7RH0vJHtiaW5kaXJ9L3VubHptYQorCXJtIC1mICR7RH0vJHtiaW5kaXJ9L3VueHoKKwlybSAtZiAke0R9LyR7YmluZGlyfS94eioKKwlybSAtcmYgJHtEfS8ke2luY2x1ZGVkaXJ9L2x6bWEqCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuMS9seiouMQorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3BrZ2NvbmZpZy9saWJsem1hKgorCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJXt3aXRoX3B5dGhvbl92ZXJzaW9ufS9zaXRlLXBhY2thZ2VzLyoue2EsbGF9CisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJXt3aXRoX3B5dGhvbl92ZXJzaW9ufS9zaXRlLXBhY2thZ2VzL3JwbS8qLnthLGxhfQorCisJI2ZpbmQgJHtEfS8ke2xpYmRpcn0vcGVybDUgLXR5cGUgZiAtYSBcKCAtbmFtZSBwZXJsbG9jYWwucG9kIC1vIC1uYW1lIC5wYWNrbGlzdCBcCisJIwktbyBcKCAtbmFtZSAnKi5icycgLWEgLWVtcHR5IFwpIFwpIC1leGVjIHJtIC1mIHt9ICc7JworCSNmaW5kICR7RH0vJHtsaWJkaXJ9L3Blcmw1IC10eXBlIGQgLWRlcHRoIC1leGVjIHJtZGlyIHt9IDI+L2Rldi9udWxsICc7JworCisJIyBXZSBkb24ndCB3YW50IHRoZSBkZWZhdWx0IG1hY3JvIHNldAorCXJtIC1yZiAke0R9LyR7bGliZGlyfS9ycG0ve2lbMzQ1Nl04NiosYXRobG9uKixwZW50aXVtKix4ODZfNjQqLGFscGhhKixzcGFyYyosaWE2NCoscHBjKixzMzkwKixhcm12WzM0XVtsYl0qLGFybXZbMzQ1XSosbWlwcyosbm9hcmNoKn0KKworCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9kYmNvbnZlcnQuc2gKKworCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9saWJzcWxkYi4qCisKKwkjIFdlIGRvbid0IHdhbnQsIG5vciBuZWVkIHRoZSBNYW5kcml2YSBtdWx0aWFyY2ggaXRlbXMKKwlybSAtZiAke0R9LyR7YmluZGlyfS9tdWx0aWFyY2gtZGlzcGF0Y2gKKwlybSAtZiAke0R9LyR7YmluZGlyfS9tdWx0aWFyY2gtcGxhdGZvcm0KKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vY2hlY2stbXVsdGlhcmNoLWZpbGVzCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL21rbXVsdGlhcmNoCisJcm0gLWYgJHtEfS8ke2luY2x1ZGVkaXJ9L211bHRpYXJjaC1kaXNwYXRjaC5oCisKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vZ3N0cmVhbWVyLnNoCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2dlbV9oZWxwZXIucmIKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vcnVieWdlbXMucmIKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0va21vZC1kZXBzLnNoCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL3B5dGhvbmVnZ3MucHkKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zLmQva2VybmVsCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3Jvcy5kL2dzdHJlYW1lcgorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vbWdvCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9kYmNvbnZlcnQKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vYmluL3BvbTJzcGVjCisKKwlybSAtcmYgJHtEfS92YXIvbGliL3dkaiAke0R9L3Zhci9jYWNoZS93ZGoKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vYmluL2FwaS1zYW5pdHktY2hlY2tlci5wbAorCit9CisKK2FkZF9uYXRpdmVfd3JhcHBlcigpIHsKKyAgICAgICAgY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vcnBtIFwKKwkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAorCQlSUE1fRVRDUlBNPSckJ3tSUE1fRVRDUlBNLSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG19IFwKKwkJUlBNX0xPQ0FMRURJUlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vbG9jYWxlCisKKyAgICAgICAgY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vcnBtMmNwaW8gXAorCQlSUE1fVVNSTElCUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignbGliZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbSBcCisJCVJQTV9FVENSUE09JyQne1JQTV9FVENSUE0tJ2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbX0gXAorCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKKworICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ycG1idWlsZCBcCisJCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKKwkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCisJCVJQTV9MT0NBTEVESVJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L2xvY2FsZQorCisgICAgICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3JwbWNvbnN0YW50IFwKKwkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAorCQlSUE1fRVRDUlBNPSckJ3tSUE1fRVRDUlBNLSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG19IFwKKwkJUlBNX0xPQ0FMRURJUlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vbG9jYWxlCisKKwlmb3IgcnBtX2JpbmFyeSBpbiAke0R9LyR7bGliZGlyfS9ycG0vYmluL3JwbSogJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9kZWJ1Z2VkaXQ7IGRvCisgICAgICAgIAljcmVhdGVfd3JhcHBlciAkcnBtX2JpbmFyeSBcCisJCQlSUE1fVVNSTElCUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignbGliZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbSBcCisJCQlSUE1fRVRDUlBNPSckJ3tSUE1fRVRDUlBNLSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG19IFwKKwkJCVJQTV9MT0NBTEVESVJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L2xvY2FsZQorCWRvbmUKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWFkZF9uYXRpdmVfd3JhcHBlcgorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisJYWRkX25hdGl2ZV93cmFwcGVyCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1yZXNvbHZlL3JwbXJlc29sdmUuYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1yZXNvbHZlL3JwbXJlc29sdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjRjYWY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbXJlc29sdmUvcnBtcmVzb2x2ZS5jCkBAIC0wLDAgKzEsNDI0IEBACisvKiBPcGVuRW1iZWRkZWQgUlBNIHJlc29sdmVyIHV0aWxpdHkKKworICBXcml0dGVuIGJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworICBDb3B5cmlnaHQgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpbmNsdWRlIDxycG1kYi5oPgorI2luY2x1ZGUgPHJwbXR5cGVzLmg+CisjaW5jbHVkZSA8cnBtdGFnLmg+CisjaW5jbHVkZSA8cnBtdHMuaD4KKyNpbmNsdWRlIDxycG1tYWNyby5oPgorI2luY2x1ZGUgPHJwbWNiLmg+CisjaW5jbHVkZSA8cnBtbG9nLmg+CisjaW5jbHVkZSA8YXJndi5oPgorI2luY2x1ZGUgPG1pcmUuaD4KKworaW50IGRlYnVnbW9kZTsKK0ZJTEUgKm91dGY7CisKK2ludCBnZXRQYWNrYWdlU3RyKHJwbXRzIHRzLCBjb25zdCBjaGFyICpOVlJBLCBycG1UYWcgdGFnLCBjaGFyICoqdmFsdWUpCit7CisgICAgaW50IHJjID0gLTE7CisgICAgcnBtbWkgbWkgPSBycG10c0luaXRJdGVyYXRvcih0cywgUlBNVEFHX05WUkEsIE5WUkEsIDApOworICAgIEhlYWRlciBoOworICAgIGlmICgoaCA9IHJwbW1pTmV4dChtaSkpICE9IE5VTEwpIHsKKyAgICAgICAgSEVfdCBoZSA9IChIRV90KSBtZW1zZXQoYWxsb2NhKHNpemVvZigqaGUpKSwgMCwgc2l6ZW9mKCpoZSkpOworICAgICAgICBoZS0+dGFnID0gdGFnOworICAgICAgICByYyA9IChoZWFkZXJHZXQoaCwgaGUsIDApICE9IDEpOworICAgICAgICBpZihyYz09MCkKKyAgICAgICAgICAgICp2YWx1ZSA9IHN0cmR1cCgoY2hhciAqKWhlLT5wLnB0cik7CisgICAgfQorICAgICh2b2lkKXJwbW1pRnJlZShtaSk7CisgICAgcmV0dXJuIHJjOworfQorCitpbnQgbG9hZFRzKHJwbXRzICoqdHMsIGludCAqdHNjdCwgY29uc3QgY2hhciAqZGJsaXN0Zm4pCit7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBpbnQgc3ogPSA1OworICAgIGludCByYyA9IDA7CisgICAgaW50IGxpc3RmaWxlID0gMTsKKyAgICBzdHJ1Y3Qgc3RhdCBzdF9idWY7CisKKyAgICByYyA9IHN0YXQoZGJsaXN0Zm4sICZzdF9idWYpOworICAgIGlmKHJjICE9IDApIHsKKyAgICAgICAgcGVycm9yKCJzdGF0Iik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBpZihTX0lTRElSKHN0X2J1Zi5zdF9tb2RlKSkKKyAgICAgICAgbGlzdGZpbGUgPSAwOworCisgICAgaWYobGlzdGZpbGUpIHsKKyAgICAgICAgaWYoZGVidWdtb2RlKQorICAgICAgICAgICAgcHJpbnRmKCJERUJVRzogcmVhZGluZyBkYXRhYmFzZSBsaXN0IGZpbGUgJyVzJ1xuIiwgZGJsaXN0Zm4pOworICAgICAgICAqdHMgPSBtYWxsb2Moc3ogKiBzaXplb2YocnBtdHMpKTsKKyAgICAgICAgRklMRSAqZiA9IGZvcGVuKGRibGlzdGZuLCAiciIgKTsKKyAgICAgICAgaWYoZikgeworICAgICAgICAgICAgY2hhciBsaW5lWzIwNDhdOworICAgICAgICAgICAgd2hpbGUoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkgeworICAgICAgICAgICAgICAgIGludCBsZW4gPSBzdHJsZW4obGluZSkgLSAxOworICAgICAgICAgICAgICAgIGlmKGxlbiA+IDApCisgICAgICAgICAgICAgICAgICAgIC8vIFRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZQorICAgICAgICAgICAgICAgICAgICB3aGlsZShsZW4gPiAwICYmIGlzc3BhY2UobGluZVtsZW5dKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVbbGVuLS1dID0gJ1wwJzsKKworICAgICAgICAgICAgICAgIGlmKGxlbiA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRXhwYW5kIGFycmF5IGlmIG5lZWRlZAorICAgICAgICAgICAgICAgICAgICBpZihjb3VudCA9PSBzeikgeworICAgICAgICAgICAgICAgICAgICAgICAgc3ogKz0gNTsKKyAgICAgICAgICAgICAgICAgICAgICAgICp0cyA9IChycG10cyAqKXJlYWxsb2MoKnRzLCBzeik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZihkZWJ1Z21vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkRFQlVHOiBvcGVuaW5nIGRhdGFiYXNlICclcydcbiIsIGxpbmUpOworICAgICAgICAgICAgICAgICAgICBjaGFyICpkYnBhdGhtID0gbWFsbG9jKHN0cmxlbihsaW5lKSArIDEwKTsKKyAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihkYnBhdGhtLCAiX2RicGF0aCAlcyIsIGxpbmUpOworICAgICAgICAgICAgICAgICAgICBycG1EZWZpbmVNYWNybyhOVUxMLCBkYnBhdGhtLCBSTUlMX0NNRExJTkUpOworICAgICAgICAgICAgICAgICAgICBmcmVlKGRicGF0aG0pOworCisgICAgICAgICAgICAgICAgICAgIHJwbXRzIHRzaSA9IHJwbXRzQ3JlYXRlKCk7CisgICAgICAgICAgICAgICAgICAgICgqdHMpW2NvdW50XSA9IHRzaTsKKyAgICAgICAgICAgICAgICAgICAgcmMgPSBycG10c09wZW5EQih0c2ksIE9fUkRPTkxZKTsKKyAgICAgICAgICAgICAgICAgICAgaWYoIHJjICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gb3BlbiBkYXRhYmFzZSAlc1xuIiwgbGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByYyA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZjbG9zZShmKTsKKyAgICAgICAgICAgICp0c2N0ID0gY291bnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwZXJyb3IoZGJsaXN0Zm4pOworICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYoZGVidWdtb2RlKQorICAgICAgICAgICAgcHJpbnRmKCJERUJVRzogb3BlbmluZyBkYXRhYmFzZSAnJXMnXG4iLCBkYmxpc3Rmbik7CisgICAgICAgIC8vIExvYWQgZnJvbSBzaW5nbGUgZGF0YWJhc2UKKyAgICAgICAgKnRzID0gbWFsbG9jKHNpemVvZihycG10cykpOworICAgICAgICBjaGFyICpkYnBhdGhtID0gbWFsbG9jKHN0cmxlbihkYmxpc3RmbikgKyAxMCk7CisgICAgICAgIHNwcmludGYoZGJwYXRobSwgIl9kYnBhdGggJXMiLCBkYmxpc3Rmbik7CisgICAgICAgIHJwbURlZmluZU1hY3JvKE5VTEwsIGRicGF0aG0sIFJNSUxfQ01ETElORSk7CisgICAgICAgIGZyZWUoZGJwYXRobSk7CisKKyAgICAgICAgcnBtdHMgdHNpID0gcnBtdHNDcmVhdGUoKTsKKyAgICAgICAgKCp0cylbMF0gPSB0c2k7CisgICAgICAgIHJjID0gcnBtdHNPcGVuREIodHNpLCBPX1JET05MWSk7CisgICAgICAgIGlmKCByYyApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG9wZW4gZGF0YWJhc2UgJXNcbiIsIGRibGlzdGZuKTsKKyAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgIH0KKyAgICAgICAgKnRzY3QgPSAxOworICAgIH0KKworICAgIHJldHVybiByYzsKK30KKworaW50IHByb2Nlc3NQYWNrYWdlcyhycG10cyAqdHMsIGludCB0c2NvdW50LCBjb25zdCBjaGFyICpwYWNrYWdlbGlzdGZuLCBpbnQgaWdub3JlbWlzc2luZykKK3sKKyAgICBpbnQgcmMgPSAwOworICAgIGludCBjb3VudCA9IDA7CisgICAgaW50IHN6ID0gMTAwOworICAgIGludCBpID0gMDsKKyAgICBpbnQgbWlzc2luZyA9IDA7CisKKyAgICBGSUxFICpmID0gZm9wZW4ocGFja2FnZWxpc3RmbiwgInIiICk7CisgICAgaWYoZikgeworICAgICAgICBjaGFyIGxpbmVbMjU1XTsKKyAgICAgICAgd2hpbGUoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkgeworICAgICAgICAgICAgaW50IGxlbiA9IHN0cmxlbihsaW5lKSAtIDE7CisgICAgICAgICAgICBpZihsZW4gPiAwKQorICAgICAgICAgICAgICAgIC8vIFRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZQorICAgICAgICAgICAgICAgIHdoaWxlKGxlbiA+IDAgJiYgaXNzcGFjZShsaW5lW2xlbl0pKQorICAgICAgICAgICAgICAgICAgICBsaW5lW2xlbi0tXSA9ICdcMCc7CisKKyAgICAgICAgICAgIGlmKGxlbiA+IDApIHsKKyAgICAgICAgICAgICAgICBpbnQgZm91bmQgPSAwOworICAgICAgICAgICAgICAgIGZvcihpPTA7IGk8dHNjb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIEFSR1ZfdCBrZXlzID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgcnBtZGIgZGIgPSBycG10c0dldFJkYih0c1tpXSk7CisgICAgICAgICAgICAgICAgICAgIHJjID0gcnBtZGJNaXJlQXBwbHkoZGIsIFJQTVRBR19OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSUE1NSVJFX1NUUkNNUCwgbGluZSwgJmtleXMpOworICAgICAgICAgICAgICAgICAgICBpZiAoa2V5cykgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5rZXlzID0gYXJndkNvdW50KGtleXMpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG5rZXlzID09IDEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdmFsdWUgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gZ2V0UGFja2FnZVN0cih0c1tpXSwga2V5c1swXSwgUlBNVEFHX1BBQ0tBR0VPUklHSU4sICZ2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmMgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihvdXRmLCAiJXNcbiIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGdldCBwYWNrYWdlIG9yaWdpbiBmb3IgJXNcbiIsIGxpbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoIG5rZXlzID4gMSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5aW5kZXggPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTXVsdGlwbGUgbWF0Y2hlcyBmb3IgJXM6XG4iLCBsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoIGtleWluZGV4PTA7IGtleWluZGV4PG5rZXlzOyBrZXlpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnZhbHVlID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSBnZXRQYWNrYWdlU3RyKHRzW2ldLCBrZXlzW2tleWluZGV4XSwgUlBNVEFHX1BBQ0tBR0VPUklHSU4sICZ2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJjID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgJXNcbiIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICglcylcbiIsIGtleXNba2V5aW5kZXhdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYoZm91bmQpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiggIWZvdW5kICkgeworICAgICAgICAgICAgICAgICAgICBpZiggaWdub3JlbWlzc2luZyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIHJlc29sdmUgcGFja2FnZSAlcyAtIGlnbm9yaW5nXG4iLCBsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIHJlc29sdmUgcGFja2FnZSAlc1xuIiwgbGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtaXNzaW5nID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICAgICAgZmNsb3NlKGYpOworCisgICAgICAgIGlmKCBtaXNzaW5nICkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogc29tZSBwYWNrYWdlcyB3ZXJlIG1pc3NpbmdcbiIpOworICAgICAgICAgICAgcmMgPSAxOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBwZXJyb3IocGFja2FnZWxpc3Rmbik7CisgICAgICAgIHJjID0gLTE7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfQorCitpbnQgbG9va3VwUHJvdmlkZXIocnBtdHMgdHMsIGNvbnN0IGNoYXIgKnJlcSwgY2hhciAqKnByb3ZpZGVyKQoreworICAgIGludCByYyA9IDA7CisgICAgcnBtbWkgcHJvdm1pID0gcnBtdHNJbml0SXRlcmF0b3IodHMsIFJQTVRBR19QUk9WSURFTkFNRSwgcmVxLCAwKTsKKyAgICBpZihwcm92bWkpIHsKKyAgICAgICAgSGVhZGVyIGg7CisgICAgICAgIGlmICgoaCA9IHJwbW1pTmV4dChwcm92bWkpKSAhPSBOVUxMKSB7CisgICAgICAgICAgICBIRV90IGhlID0gKEhFX3QpIG1lbXNldChhbGxvY2Eoc2l6ZW9mKCpoZSkpLCAwLCBzaXplb2YoKmhlKSk7CisgICAgICAgICAgICBoZS0+dGFnID0gUlBNVEFHX05BTUU7CisgICAgICAgICAgICByYyA9IChoZWFkZXJHZXQoaCwgaGUsIDApICE9IDEpOworICAgICAgICAgICAgaWYocmM9PTApCisgICAgICAgICAgICAgICAgKnByb3ZpZGVyID0gc3RyZHVwKChjaGFyICopaGUtPnAucHRyKTsKKyAgICAgICAgfQorICAgICAgICAodm9pZClycG1taUZyZWUocHJvdm1pKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJjID0gLTE7CisgICAgfQorICAgIHJldHVybiByYzsKK30KKworaW50IHByaW50RGVwTGlzdChycG10cyAqdHMsIGludCB0c2NvdW50KQoreworICAgIGludCByYyA9IDA7CisKKyAgICBpZiggdHNjb3VudCA+IDEgKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIj4xIGRhdGFiYXNlIHNwZWNpZmllZCB3aXRoIGRlcGVuZGVuY3kgbGlzdCwgdXNpbmcgZmlyc3Qgb25seVxuIik7CisKKyAgICAvKiBHZXQgbGlzdCBvZiBuYW1lcyAqLworICAgIHJwbWRiIGRiID0gcnBtdHNHZXRSZGIodHNbMF0pOworICAgIEFSR1ZfdCBuYW1lcyA9IE5VTEw7CisgICAgcmMgPSBycG1kYk1pcmVBcHBseShkYiwgUlBNVEFHX05BTUUsCisgICAgICAgICAgICAgICAgUlBNTUlSRV9TVFJDTVAsIE5VTEwsICZuYW1lcyk7CisgICAgaW50IG5uYW1lcyA9IGFyZ3ZDb3VudChuYW1lcyk7CisKKyAgICAvKiBHZXQgbGlzdCBvZiBOVlJBcyAqLworICAgIEFSR1ZfdCBrZXlzID0gTlVMTDsKKyAgICByYyA9IHJwbWRiTWlyZUFwcGx5KGRiLCBSUE1UQUdfTlZSQSwKKyAgICAgICAgICAgICAgICBSUE1NSVJFX1NUUkNNUCwgTlVMTCwgJmtleXMpOworICAgIGlmIChrZXlzKSB7CisgICAgICAgIGludCBpLCBqOworICAgICAgICBIRV90IGhlID0gKEhFX3QpIG1lbXNldChhbGxvY2Eoc2l6ZW9mKCpoZSkpLCAwLCBzaXplb2YoKmhlKSk7CisgICAgICAgIGludCBua2V5cyA9IGFyZ3ZDb3VudChrZXlzKTsKKyAgICAgICAgZm9yKGk9MDsgaTxua2V5czsgaSsrKSB7CisgICAgICAgICAgICBycG1taSBtaSA9IHJwbXRzSW5pdEl0ZXJhdG9yKHRzWzBdLCBSUE1UQUdfTlZSQSwga2V5c1tpXSwgMCk7CisgICAgICAgICAgICBIZWFkZXIgaDsKKyAgICAgICAgICAgIGlmICgoaCA9IHJwbW1pTmV4dChtaSkpICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAvKiBHZXQgbmFtZSBvZiBwYWNrYWdlICovCisgICAgICAgICAgICAgICAgaGUtPnRhZyA9IFJQTVRBR19OQU1FOworICAgICAgICAgICAgICAgIHJjID0gKGhlYWRlckdldChoLCBoZSwgMCkgIT0gMSk7CisgICAgICAgICAgICAgICAgY2hhciAqbmFtZSA9IHN0cmR1cCgoY2hhciAqKWhlLT5wLnB0cik7CisgICAgICAgICAgICAgICAgLyogR2V0IGl0cyByZXF1aXJlcyAqLworICAgICAgICAgICAgICAgIGhlLT50YWcgPSBSUE1UQUdfUkVRVUlSRU5BTUU7CisgICAgICAgICAgICAgICAgaWYgKHJjID0gKGhlYWRlckdldChoLCBoZSwgMCkgIT0gMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlYnVnbW9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJERUJVRzogJXMgcmVxdWlyZXMgbnVsbFxuIiwgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQVJHVl90IHJlcXMgPSAoQVJHVl90KWhlLT5wLnB0cjsKKyAgICAgICAgICAgICAgICAvKiBHZXQgaXRzIHJlcXVpcmVmbGFncyAqLworICAgICAgICAgICAgICAgIGhlLT50YWcgPSBSUE1UQUdfUkVRVUlSRUZMQUdTOworICAgICAgICAgICAgICAgIHJjID0gKGhlYWRlckdldChoLCBoZSwgMCkgIT0gMSk7CisgICAgICAgICAgICAgICAgcnBtdWludDMyX3QgKnJlcWZsYWdzID0gKHJwbXVpbnQzMl90ICopaGUtPnAudWkzMnA7CisgICAgICAgICAgICAgICAgZm9yKGo9MDsgajxoZS0+YzsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBrOworICAgICAgICAgICAgICAgICAgICBjaGFyICpwcm92ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgZm9yKGs9MDsgazxubmFtZXM7IGsrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RyY21wKG5hbWVzW2tdLCByZXFzW2pdKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdiA9IG5hbWVzW2tdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmKHByb3YpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChpbnQpcmVxZmxhZ3Nbal0gJiAweDgwMDAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYob3V0ZiwgIiVzfCVzIFtSRUNdXG4iLCBuYW1lLCBwcm92KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKG91dGYsICIlc3wlc1xuIiwgbmFtZSwgcHJvdik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByYyA9IGxvb2t1cFByb3ZpZGVyKHRzWzBdLCByZXFzW2pdLCAmcHJvdik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihyYz09MCAmJiBwcm92KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoKGludClyZXFmbGFnc1tqXSAmIDB4ODAwMDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYob3V0ZiwgIiVzfCVzIFtSRUNdXG4iLCBuYW1lLCBwcm92KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYob3V0ZiwgIiVzfCVzXG4iLCBuYW1lLCBwcm92KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHByb3YpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZyZWUobmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAodm9pZClycG1taUZyZWUobWkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfQorCit2b2lkIHVzYWdlKCkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIk9wZW5FbWJlZGRlZCBycG0gcmVzb2x2ZXIgdXRpbGl0eVxuIik7CisgICAgZnByaW50ZihzdGRlcnIsICJzeW50YXg6IHJwbXJlc29sdmUgWy1pXSBbLWRdIFstdF0gPGRibGlzdGZpbGU+IDxwYWNrYWdlbGlzdGZpbGU+XG4iKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIHJwbXRzICp0cyA9IE5VTEw7CisgICAgaW50IHRzY291bnQgPSAwOworICAgIGludCByYyA9IDA7CisgICAgaW50IGk7CisgICAgaW50IGM7CisgICAgaW50IGlnbm9yZW1pc3NpbmcgPSAwOworICAgIGludCBkZXBsaXN0bW9kZSA9IDA7CisgICAgY2hhciAqb3V0ZmlsZSA9IE5VTEw7CisKKyAgICBkZWJ1Z21vZGUgPSAwOworICAgIG91dGYgPSBzdGRvdXQ7CisKKyAgICBvcHRlcnIgPSAwOworICAgIHdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgIml0ZG86IikpICE9IC0xKSB7CisgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICAgICAgY2FzZSAnaSc6CisgICAgICAgICAgICAgICAgaWdub3JlbWlzc2luZyA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgICAgICBkZXBsaXN0bW9kZSA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdkJzoKKyAgICAgICAgICAgICAgICBkZWJ1Z21vZGUgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnbyc6CisgICAgICAgICAgICAgICAgb3V0ZmlsZSA9IHN0cmR1cChvcHRhcmcpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnPyc6CisgICAgICAgICAgICAgICAgaWYoaXNwcmludChvcHRvcHQpKQorICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gb3B0aW9uIGAtJWMnLlxuIiwgb3B0b3B0KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBvcHRpb24gY2hhcmFjdGVyIGBcXHgleCcuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgb3B0b3B0KTsKKyAgICAgICAgICAgICAgICB1c2FnZSgpOworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBhYm9ydCgpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoIGFyZ2MgLSBvcHRpbmQgPCAxICkgeworICAgICAgICB1c2FnZSgpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBpZiggb3V0ZmlsZSApIHsKKyAgICAgICAgaWYoZGVidWdtb2RlKQorICAgICAgICAgICAgcHJpbnRmKCJERUJVRzogVXNpbmcgb3V0cHV0IGZpbGUgJXNcbiIsIG91dGZpbGUpOworICAgICAgICBvdXRmID0gZm9wZW4ob3V0ZmlsZSwgInciKTsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyICpkYmxpc3RmbiA9IGFyZ3Zbb3B0aW5kXTsKKworICAgIHJwbWNsaUluaXQoYXJnYywgYXJndiwgTlVMTCk7CisKKyAgICBpZihkZWJ1Z21vZGUpCisgICAgICAgIHJwbVNldFZlcmJvc2l0eShSUE1MT0dfREVCVUcpOworCisgICAgcnBtRGVmaW5lTWFjcm8oTlVMTCwgIl9fZGJpX3R4biBjcmVhdGUgbm9mc3luYyIsIFJNSUxfQ01ETElORSk7CisKKyAgICByYyA9IGxvYWRUcygmdHMsICZ0c2NvdW50LCBkYmxpc3Rmbik7CisgICAgaWYoIHJjICkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgaWYoIHRzY291bnQgPT0gMCApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJQbGVhc2Ugc3BlY2lmeSBkYXRhYmFzZSBsaXN0IGZpbGUgb3IgZGF0YWJhc2UgbG9jYXRpb25cbiIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBpZihkZXBsaXN0bW9kZSkgeworICAgICAgICByYyA9IHByaW50RGVwTGlzdCh0cywgdHNjb3VudCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiggYXJnYyAtIG9wdGluZCA8IDIgKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlBsZWFzZSBzcGVjaWZ5IHBhY2thZ2UgbGlzdCBmaWxlXG4iKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBrZ2xpc3RmbiA9IGFyZ3Zbb3B0aW5kKzFdOworICAgICAgICAgICAgcmMgPSBwcm9jZXNzUGFja2FnZXModHMsIHRzY291bnQsIHBrZ2xpc3RmbiwgaWdub3JlbWlzc2luZyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IoaT0wOyBpPHRzY291bnQ7IGkrKykKKyAgICAgICAgKHZvaWQpIHJwbXRzQ2xvc2VEQih0c1tpXSk7CisgICAgZnJlZSh0cyk7CisKKyAgICBpZiggb3V0ZmlsZSApIHsKKyAgICAgICAgZmNsb3NlKG91dGYpOworICAgICAgICBmcmVlKG91dGZpbGUpOworICAgIH0KKworICAgIHJldHVybiByYzsKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1yZXNvbHZlXzEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1yZXNvbHZlXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGE1NWZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbXJlc29sdmVfMS4wLmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiT3BlbkVtYmVkZGVkIFJQTSByZXNvbHZlciB1dGlsaXR5IgorREVTQ1JJUFRJT04gPSAiT3BlbkVtYmVkZGVkIFJQTSByZXNvbHZlciAtIHBlcmZvcm1zIFJQTSBkYXRhYmFzZSBsb29rdXBzIGluIGJhdGNoZXMgdG8gYXZvaWQgXAorIHJlcGVhdGVkIGludm9jYXRpb25zIG9mIHJwbSBvbiB0aGUgY29tbWFuZCBsaW5lLiIKK0RFUEVORFMgPSAicnBtIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09NTU9OX0xJQ0VOU0VfRElSfS9HUEwtMi4wO21kNT04MDFmODA5ODBkMTcxZGQ2NDI1NjEwODMzYTIyZGJlNiIKK1BSID0gInIyIgorCitTUkNfVVJJID0gImZpbGU6Ly9ycG1yZXNvbHZlLmMiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9fY29tcGlsZSgpIHsKKwkke0NDfSAke0NGTEFHU30gLWdnZGIgLUkke1NUQUdJTkdfSU5DRElSfS9ycG0gJHtMREZMQUdTfSBycG1yZXNvbHZlLmMgLW8gcnBtcmVzb2x2ZSAtbHJwbWJ1aWxkIC1scnBtIC1scnBtaW8gLWxycG1kYiAtbHBvcHQKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgcnBtcmVzb2x2ZSAke0R9JHtiaW5kaXJ9Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ycG1yZXNvbHZlIFwKKwkJCVJQTV9VU1JMSUJSUE09JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3JwbSBcCisJCQlSUE1fRVRDUlBNPSR7U1RBR0lOR19FVENESVJfTkFUSVZFfS9ycG0gXAorCQkJUlBNX0xPQ0FMRURJUlJQTT0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2xvY2FsZQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9maWxlcy9hY2luY2x1ZGUubTQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9maWxlcy9hY2luY2x1ZGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM1YjQxZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL2ZpbGVzL2FjaW5jbHVkZS5tNApAQCAtMCwwICsxLDk1IEBACitkbmwgdmVyYmF0aW0gcmVuYW1lZCBmcm9tIGFjbG9jYWwubTQgaW4gcnN5bmNfMy4wLjcKK2RubCAwNy8wNi8yMDEwIC0gcWhlCisKK2RubCBBQ19WQUxJREFURV9DQUNIRV9TWVNURU1fVFlQRVsoY21kKV0KK2RubCBpZiB0aGUgY2FjaGUgZmlsZSBpcyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgY3VycmVudCBob3N0LAorZG5sIHRhcmdldCBhbmQgYnVpbGQgc3lzdGVtIHR5cGVzLCBleGVjdXRlIENNRCBvciBwcmludCBhIGRlZmF1bHQKK2RubCBlcnJvciBtZXNzYWdlLgorQUNfREVGVU4oQUNfVkFMSURBVEVfQ0FDSEVfU1lTVEVNX1RZUEUsIFsKKyAgICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfU1lTVEVNXSkKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2NvbmZpZy5jYWNoZSBzeXN0ZW0gdHlwZV0pCisgICAgaWYgeyB0ZXN0IHgiJHthY19jdl9ob3N0X3N5c3RlbV90eXBlK3NldH0iID0geCJzZXQiICYmCisgICAgICAgICB0ZXN0IHgiJGFjX2N2X2hvc3Rfc3lzdGVtX3R5cGUiICE9IHgiJGhvc3QiOyB9IHx8CisgICAgICAgeyB0ZXN0IHgiJHthY19jdl9idWlsZF9zeXN0ZW1fdHlwZStzZXR9IiA9IHgic2V0IiAmJgorICAgICAgICAgdGVzdCB4IiRhY19jdl9idWlsZF9zeXN0ZW1fdHlwZSIgIT0geCIkYnVpbGQiOyB9IHx8CisgICAgICAgeyB0ZXN0IHgiJHthY19jdl90YXJnZXRfc3lzdGVtX3R5cGUrc2V0fSIgPSB4InNldCIgJiYKKyAgICAgICAgIHRlc3QgeCIkYWNfY3ZfdGFyZ2V0X3N5c3RlbV90eXBlIiAhPSB4IiR0YXJnZXQiOyB9OyB0aGVuCisJQUNfTVNHX1JFU1VMVChbZGlmZmVyZW50XSkKKwlpZmVsc2UoJCMsIDEsIFskMV0sCisJCVtBQ19NU0dfRVJST1IoWyJ5b3UgbXVzdCByZW1vdmUgY29uZmlnLmNhY2hlIGFuZCByZXN0YXJ0IGNvbmZpZ3VyZSJdKV0pCisgICAgZWxzZQorCUFDX01TR19SRVNVTFQoW3NhbWVdKQorICAgIGZpCisgICAgYWNfY3ZfaG9zdF9zeXN0ZW1fdHlwZT0iJGhvc3QiCisgICAgYWNfY3ZfYnVpbGRfc3lzdGVtX3R5cGU9IiRidWlsZCIKKyAgICBhY19jdl90YXJnZXRfc3lzdGVtX3R5cGU9IiR0YXJnZXQiCitdKQorCitkbmwgQ2hlY2sgZm9yIHNvY2tsZW5fdDogaGlzdG9yaWNhbGx5IG9uIEJTRCBpdCBpcyBhbiBpbnQsIGFuZCBpbgorZG5sIFBPU0lYIDFnIGl0IGlzIGEgdHlwZSBvZiBpdHMgb3duLCBidXQgc29tZSBwbGF0Zm9ybXMgdXNlIGRpZmZlcmVudAorZG5sIHR5cGVzIGZvciB0aGUgYXJndW1lbnQgdG8gZ2V0c29ja29wdCwgZ2V0cGVlcm5hbWUsIGV0Yy4gIFNvIHdlCitkbmwgaGF2ZSB0byB0ZXN0IHRvIGZpbmQgc29tZXRoaW5nIHRoYXQgd2lsbCB3b3JrLgorCitkbmwgVGhpcyBpcyBubyBnb29kLCBiZWNhdXNlIHBhc3NpbmcgdGhlIHdyb25nIHBvaW50ZXIgb24gQyBjb21waWxlcnMgaXMKK2RubCBsaWtlbHkgdG8gb25seSBnZW5lcmF0ZSBhIHdhcm5pbmcsIG5vdCBhbiBlcnJvci4gIFdlIGRvbid0IGNhbGwgdGhpcyBhdAorZG5sIHRoZSBtb21lbnQuCisKK0FDX0RFRlVOKFtUWVBFX1NPQ0tMRU5fVF0sCitbCisgICBBQ19DSEVDS19UWVBFKFtzb2NrbGVuX3RdLCAsWworICAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igc29ja2xlbl90IGVxdWl2YWxlbnRdKQorICAgICAgQUNfQ0FDSEVfVkFMKFtyc3luY19jdl9zb2NrbGVuX3RfZXF1aXZdLAorICAgICAgWworICAgICAgICAgIyBTeXN0ZW1zIGhhdmUgZWl0aGVyICJzdHJ1Y3Qgc29ja2FkZHIgKiIgb3IKKyAgICAgICAgICMgInZvaWQgKiIgYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBnZXRwZWVybmFtZQorICAgICAgICAgcnN5bmNfY3Zfc29ja2xlbl90X2VxdWl2PQorICAgICAgICAgZm9yIGFyZzIgaW4gInN0cnVjdCBzb2NrYWRkciIgdm9pZDsgZG8KKyAgICAgICAgICAgIGZvciB0IGluIGludCBzaXplX3QgdW5zaWduZWQgbG9uZyAidW5zaWduZWQgbG9uZyI7IGRvCisgICAgICAgICAgICAgICBBQ19UUllfQ09NUElMRShbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorCisgICAgICAgICAgICAgICAgICBpbnQgZ2V0cGVlcm5hbWUgKGludCwgJGFyZzIgKiwgJHQgKik7CisgICAgICAgICAgICAgICBdLFsKKyAgICAgICAgICAgICAgICAgICR0IGxlbjsKKyAgICAgICAgICAgICAgICAgIGdldHBlZXJuYW1lKDAsMCwmbGVuKTsKKyAgICAgICAgICAgICAgIF0sWworICAgICAgICAgICAgICAgICAgcnN5bmNfY3Zfc29ja2xlbl90X2VxdWl2PSIkdCIKKyAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICBdKQorICAgICAgICAgICAgZG9uZQorICAgICAgICAgZG9uZQorCisgICAgICAgICBpZiB0ZXN0ICJ4JHJzeW5jX2N2X3NvY2tsZW5fdF9lcXVpdiIgPSB4OyB0aGVuCisgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0Nhbm5vdCBmaW5kIGEgdHlwZSB0byB1c2UgaW4gcGxhY2Ugb2Ygc29ja2xlbl90XSkKKyAgICAgICAgIGZpCisgICAgICBdKQorICAgICAgQUNfTVNHX1JFU1VMVCgkcnN5bmNfY3Zfc29ja2xlbl90X2VxdWl2KQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKHNvY2tsZW5fdCwgJHJzeW5jX2N2X3NvY2tsZW5fdF9lcXVpdiwKKwkJCVt0eXBlIHRvIHVzZSBpbiBwbGFjZSBvZiBzb2NrbGVuX3QgaWYgbm90IGRlZmluZWRdKV0sCisgICAgICBbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD5dKQorXSkKKworZG5sIEFDX0hBVkVfVFlQRShUWVBFLElOQ0xVREVTKQorQUNfREVGVU4oW0FDX0hBVkVfVFlQRV0sIFsKK0FDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSkKK2N2PWBlY2hvICIkMSIgfCBzZWQgJ3klLi8rLSAlX19wX18lJ2AKK0FDX01TR19DSEVDS0lORyhmb3IgJDEpCitBQ19DQUNIRV9WQUwoW2FjX2N2X3R5cGVfJGN2XSwKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKK0FDX0lOQ0xVREVTX0RFRkFVTFQKKyQyXV0sCitbWyQxIGZvbztdXSldLAorW2V2YWwgImFjX2N2X3R5cGVfJGN2PXllcyJdLAorW2V2YWwgImFjX2N2X3R5cGVfJGN2PW5vIl0pKWRubAorYWNfZm9vPWBldmFsIGVjaG8gXFwkYWNfY3ZfdHlwZV8kY3ZgCitBQ19NU0dfUkVTVUxUKCRhY19mb28pCitpZiB0ZXN0ICIkYWNfZm9vIiA9IHllczsgdGhlbgorICBhY190cl9oZHI9SEFWRV9gZWNobyAkMSB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSAlQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19fJSdgCitpZiBmYWxzZTsgdGhlbgorCUFDX0NIRUNLX1RZUEVTKCQxKQorZmkKKyAgQUNfREVGSU5FX1VOUVVPVEVEKCRhY190cl9oZHIsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdHlwZSBgJDEnXSkKK2ZpCitdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvZmlsZXMvcnN5bmNkLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9maWxlcy9yc3luY2QuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDVmNWIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvZmlsZXMvcnN5bmNkLmNvbmYKQEAgLTAsMCArMSwxNSBAQAorIyAvZXRjL3JzeW5jZC5jb25mCisKKyMgTWluaW1hbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHJzeW5jIGRhZW1vbgorIyBTZWUgcnN5bmMoMSkgYW5kIHJzeW5jZC5jb25mKDUpIG1hbiBwYWdlcyBmb3IgaGVscAorCisjIFRoaXMgZmlsZSBpcyByZXF1aXJlZCBieSByc3luYyAtLWRhZW1vbgorcGlkIGZpbGUgPSAvdmFyL3J1bi9yc3luY2QucGlkCit1c2UgY2hyb290ID0geWVzCityZWFkIG9ubHkgPSB5ZXMKKworIyBTaW1wbGUgZXhhbXBsZSBmb3IgZW5hYmxpbmcgeW91ciBvd24gbG9jYWwgcnN5bmMgc2VydmVyCisjW2V2ZXJ5dGhpbmddCisjCXBhdGggPSAvCisjCWNvbW1lbnQgPSBFdmVyeXRoaW5nIGV4Y2VwdCAvZXRjIGV4cG9zZWQKKyMJZXhjbHVkZSA9IC9ldGMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTIuNi45L3JzeW5jLTIuNi45LWZuYW1lLW9iby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTIuNi45L3JzeW5jLTIuNi45LWZuYW1lLW9iby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDU0NDUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMtMi42LjkvcnN5bmMtMi42LjktZm5hbWUtb2JvLnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgWyBUaGUgcGF0Y2ggaXMgcnN5bmMtMi42Ljkgc3BlY2lmaWMgXQorCitUaGUgcGF0Y2ggaXMgZnJvbSBodHRwczovL2lzc3Vlcy5ycGF0aC5jb20vYnJvd3NlL1JQTC0xNjQ3IGFuZCBpcyB1c2VkIHRvCithZGRyZXNzIGh0dHA6Ly93ZWIubnZkLm5pc3QuZ292L3ZpZXcvdnVsbi9kZXRhaWw/dnVsbklkPUNWRS0yMDA3LTQwOTEKKworRGF0ZTogICBUdWUgTWF5IDEwIDEwOjA3OjM2IDIwMTEgKzA4MDAKK0RleHVhbiBDdWkgPGRleHVhbi5jdWlAaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvc2VuZGVyLmMgYi9zZW5kZXIuYworaW5kZXggNmZjYWE2NS4uMDUzYThmMSAxMDA2NDQKKy0tLSBhL3NlbmRlci5jCisrKysgYi9zZW5kZXIuYworQEAgLTEyMyw2ICsxMjMsNyBAQCB2b2lkIHN1Y2Nlc3NmdWxfc2VuZChpbnQgbmR4KQorIAljaGFyIGZuYW1lW01BWFBBVEhMRU5dOworIAlzdHJ1Y3QgZmlsZV9zdHJ1Y3QgKmZpbGU7CisgCXVuc2lnbmVkIGludCBvZmZzZXQ7CisrCXNpemVfdCBsID0gMDsKKyAKKyAJaWYgKG5keCA8IDAgfHwgbmR4ID49IHRoZV9maWxlX2xpc3QtPmNvdW50KQorIAkJcmV0dXJuOworQEAgLTEzMyw2ICsxMzQsMjAgQEAgdm9pZCBzdWNjZXNzZnVsX3NlbmQoaW50IG5keCkKKyAJCQkJICAgIGZpbGUtPmRpci5yb290LCAiLyIsIE5VTEwpOworIAl9IGVsc2UKKyAJCW9mZnNldCA9IDA7CisrCisrCWwgPSBvZmZzZXQgKyAxOworKwlpZiAoZmlsZSkgeworKwkJaWYgKGZpbGUtPmRpcm5hbWUpCisrCQkJbCArPSBzdHJsZW4oZmlsZS0+ZGlybmFtZSk7CisrCQlpZiAoZmlsZS0+YmFzZW5hbWUpCisrCQkJbCArPSBzdHJsZW4oZmlsZS0+YmFzZW5hbWUpOworKwl9CisrCisrCWlmIChsID49IHNpemVvZihmbmFtZSkpIHsKKysJCXJwcmludGYoRkVSUk9SLCAiT3ZlcmxvbmcgcGF0aG5hbWVcbiIpOworKwkJZXhpdF9jbGVhbnVwKFJFUlJfRklMRVNFTEVDVCk7CisrCX0KKysKKyAJZl9uYW1lKGZpbGUsIGZuYW1lICsgb2Zmc2V0KTsKKyAJaWYgKHJlbW92ZV9zb3VyY2VfZmlsZXMpIHsKKyAJCWlmIChkb191bmxpbmsoZm5hbWUpID09IDApIHsKK0BAIC0yMjQsNiArMjM5LDcgQEAgdm9pZCBzZW5kX2ZpbGVzKHN0cnVjdCBmaWxlX2xpc3QgKmZsaXN0LCBpbnQgZl9vdXQsIGludCBmX2luKQorIAllbnVtIGxvZ2NvZGUgbG9nX2NvZGUgPSBsb2dfYmVmb3JlX3RyYW5zZmVyID8gRkxPRyA6IEZJTkZPOworIAlpbnQgZl94ZmVyID0gd3JpdGVfYmF0Y2ggPCAwID8gYmF0Y2hfZmQgOiBmX291dDsKKyAJaW50IGksIGo7CisrCXNpemVfdCBsID0gMDsKKyAKKyAJaWYgKHZlcmJvc2UgPiAyKQorIAkJcnByaW50ZihGSU5GTywgInNlbmRfZmlsZXMgc3RhcnRpbmdcbiIpOworQEAgLTI1OSw2ICsyNzUsMjAgQEAgdm9pZCBzZW5kX2ZpbGVzKHN0cnVjdCBmaWxlX2xpc3QgKmZsaXN0LCBpbnQgZl9vdXQsIGludCBmX2luKQorIAkJCQlmbmFtZVtvZmZzZXQrK10gPSAnLyc7CisgCQl9IGVsc2UKKyAJCQlvZmZzZXQgPSAwOworKworKwkJbCA9IG9mZnNldCArIDE7CisrCQlpZiAoZmlsZSkgeworKwkJCWlmIChmaWxlLT5kaXJuYW1lKQorKwkJCQlsICs9IHN0cmxlbihmaWxlLT5kaXJuYW1lKTsKKysJCQlpZiAoZmlsZS0+YmFzZW5hbWUpCisrCQkJCWwgKz0gc3RybGVuKGZpbGUtPmJhc2VuYW1lKTsKKysJCX0KKysKKysJCWlmIChsID49IHNpemVvZihmbmFtZSkpIHsKKysJCQlycHJpbnRmKEZFUlJPUiwgIk92ZXJsb25nIHBhdGhuYW1lXG4iKTsKKysJCQlleGl0X2NsZWFudXAoUkVSUl9GSUxFU0VMRUNUKTsKKysJCX0KKysKKyAJCWZuYW1lMiA9IGZfbmFtZShmaWxlLCBmbmFtZSArIG9mZnNldCk7CisgCisgCQlpZiAodmVyYm9zZSA+IDIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy0yLjYuOS9yc3luY2QuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTIuNi45L3JzeW5jZC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NWY1YjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy0yLjYuOS9yc3luY2QuY29uZgpAQCAtMCwwICsxLDE1IEBACisjIC9ldGMvcnN5bmNkLmNvbmYKKworIyBNaW5pbWFsIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgcnN5bmMgZGFlbW9uCisjIFNlZSByc3luYygxKSBhbmQgcnN5bmNkLmNvbmYoNSkgbWFuIHBhZ2VzIGZvciBoZWxwCisKKyMgVGhpcyBmaWxlIGlzIHJlcXVpcmVkIGJ5IHJzeW5jIC0tZGFlbW9uCitwaWQgZmlsZSA9IC92YXIvcnVuL3JzeW5jZC5waWQKK3VzZSBjaHJvb3QgPSB5ZXMKK3JlYWQgb25seSA9IHllcworCisjIFNpbXBsZSBleGFtcGxlIGZvciBlbmFibGluZyB5b3VyIG93biBsb2NhbCByc3luYyBzZXJ2ZXIKKyNbZXZlcnl0aGluZ10KKyMJcGF0aCA9IC8KKyMJY29tbWVudCA9IEV2ZXJ5dGhpbmcgZXhjZXB0IC9ldGMgZXhwb3NlZAorIwlleGNsdWRlID0gL2V0YwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMtMy4xLjEvMDAwMS1Db21wbGFpbi1pZi1hbi1pbmMtcmVjdXJzaXZlLXBhdGgtaXMtbm90LXJpZ2h0LWZvci1pLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMtMy4xLjEvMDAwMS1Db21wbGFpbi1pZi1hbi1pbmMtcmVjdXJzaXZlLXBhdGgtaXMtbm90LXJpZ2h0LWZvci1pLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlY2U1NDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy0zLjEuMS8wMDAxLUNvbXBsYWluLWlmLWFuLWluYy1yZWN1cnNpdmUtcGF0aC1pcy1ub3QtcmlnaHQtZm9yLWkucGF0Y2gKQEAgLTAsMCArMSwxMzUgQEAKK0Zyb20gOTYyZjhiOTAwNDVhYjMzMWZjMDRjOWU2NWY4MGYxYTUzZTY4MjQzYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFdheW5lIERhdmlzb24gPHdheW5lZEBzYW1iYS5vcmc+CitEYXRlOiBXZWQsIDMxIERlYyAyMDE0IDEyOjQxOjAzIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIENvbXBsYWluIGlmIGFuIGluYy1yZWN1cnNpdmUgcGF0aCBpcyBub3QgcmlnaHQgZm9yIGl0cyBkaXIuCisgVGhpcyBlbnN1cmVzIHRoYXQgYSBtYWxpY2lvdXMgc2VuZGVyIGNhbid0IHVzZSBhIGp1c3Qtc2VudCBzeW1saW5rIGFzIGEKKyB0cmFzbmZlciBwYXRoLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2tQb3J0CisKK0ZpeCB0aGUgQ1ZFLTIwMTQtOTUxMiwgcnN5bmMgMy4xLjEgYWxsb3dzIHJlbW90ZSBhdHRhY2tlcnMgdG8gd3JpdGUgdG8gYXJiaXRyYXJ5CitmaWxlcyB2aWEgYSBzeW1saW5rIGF0dGFjayBvbiBhIGZpbGUgaW4gdGhlIHN5bmNocm9uaXphdGlvbiBwYXRoLgorCitCYWNrUG9ydCBhbmQgZml4IHRoaXMgcGF0Y2ggdG8gbWFrZSBpdCBhYmxlIHRvIGFwcGx5IHRvIHNvdXJjZSBjb2RlCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGZsaXN0LmMgfCAyMiArKysrKysrKysrKysrKysrKysrKy0tCisgaW8uYyAgICB8ICAyICstCisgbWFpbi5jICB8ICA0ICsrLS0KKyByc3luYy5jIHwgIDIgKy0KKyBwcm90by5oIHwgMiArLQorIDYgZmlsZXMgY2hhbmdlZCwgMzEgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2ZsaXN0LmMgYi9mbGlzdC5jCitpbmRleCBjMjQ2NzJlLi45MmU0YjY1IDEwMDY0NAorLS0tIGEvZmxpc3QuYworKysrIGIvZmxpc3QuYworQEAgLTI0MzUsOCArMjQzNSw5IEBAIHN0cnVjdCBmaWxlX2xpc3QgKnNlbmRfZmlsZV9saXN0KGludCBmLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAlyZXR1cm4gZmxpc3Q7CisgfQorIAorLXN0cnVjdCBmaWxlX2xpc3QgKnJlY3ZfZmlsZV9saXN0KGludCBmKQorK3N0cnVjdCBmaWxlX2xpc3QgKnJlY3ZfZmlsZV9saXN0KGludCBmLCBpbnQgZGlyX25keCkKKyB7CisrCWNvbnN0IGNoYXIgKmdvb2RfZGlybmFtZSA9IE5VTEw7CisgCXN0cnVjdCBmaWxlX2xpc3QgKmZsaXN0OworIAlpbnQgZHN0YXJ0LCBmbGFnczsKKyAJaW50NjQgc3RhcnRfcmVhZDsKK0BAIC0yNDkyLDYgKzI0OTMsMjMgQEAgc3RydWN0IGZpbGVfbGlzdCAqcmVjdl9maWxlX2xpc3QoaW50IGYpCisgCQlmbGlzdF9leHBhbmQoZmxpc3QsIDEpOworIAkJZmlsZSA9IHJlY3ZfZmlsZV9lbnRyeShmLCBmbGlzdCwgZmxhZ3MpOworIAorKwkJaWYgKGluY19yZWN1cnNlKSB7CisrCQkJc3RhdGljIGNvbnN0IGNoYXIgZW1wdHlfZGlyW10gPSAiXDAiOworKwkJCWNvbnN0IGNoYXIgKmN1cl9kaXIgPSBmaWxlLT5kaXJuYW1lID8gZmlsZS0+ZGlybmFtZSA6IGVtcHR5X2RpcjsKKysJCQlpZiAocmVsYXRpdmVfcGF0aHMgJiYgKmN1cl9kaXIgPT0gJy8nKQorKwkJCQljdXJfZGlyKys7CisrCQkJaWYgKGN1cl9kaXIgIT0gZ29vZF9kaXJuYW1lKSB7CisrCQkJCWNvbnN0IGNoYXIgKmQgPSBkaXJfbmR4ID49IDAgPyBmX25hbWUoZGlyX2ZsaXN0LT5maWxlc1tkaXJfbmR4XSwgTlVMTCkgOiBlbXB0eV9kaXI7CisrCQkJCWlmIChzdHJjbXAoY3VyX2RpciwgZCkgIT0gMCkgeworKwkJCQkJcnByaW50ZihGRVJST1IsCisrCQkJCQkJIkFCT1JUSU5HIGR1ZSB0byBpbnZhbGlkIGRpciBwcmVmaXggZnJvbSBzZW5kZXI6ICVzIChzaG91bGQgYmU6ICVzKVxuIiwKKysJCQkJCQljdXJfZGlyLCBkKTsKKysJCQkJCWV4aXRfY2xlYW51cChSRVJSX1BST1RPQ09MKTsKKysJCQkJfQorKwkJCQlnb29kX2Rpcm5hbWUgPSBjdXJfZGlyOworKwkJCX0KKysJCX0KKysKKyAJCWlmIChTX0lTUkVHKGZpbGUtPm1vZGUpKSB7CisgCQkJLyogQWxyZWFkeSBjb3VudGVkICovCisgCQl9IGVsc2UgaWYgKFNfSVNESVIoZmlsZS0+bW9kZSkpIHsKK0BAIC0yNjE1LDcgKzI2MzMsNyBAQCB2b2lkIHJlY3ZfYWRkaXRpb25hbF9maWxlX2xpc3QoaW50IGYpCisgCQkJcnByaW50ZihGSU5GTywgIlslc10gcmVjZWl2aW5nIGZsaXN0IGZvciBkaXIgJWRcbiIsCisgCQkJCXdob19hbV9pKCksIG5keCk7CisgCQl9CistCQlmbGlzdCA9IHJlY3ZfZmlsZV9saXN0KGYpOworKwkJZmxpc3QgPSByZWN2X2ZpbGVfbGlzdChmLCBuZHgpOworIAkJZmxpc3QtPnBhcmVudF9uZHggPSBuZHg7CisgCX0KKyB9CitkaWZmIC0tZ2l0IGEvaW8uYyBiL2lvLmMKK2luZGV4IGI5YTliZDAuLmE4NjhmYTkgMTAwNjQ0CistLS0gYS9pby5jCisrKysgYi9pby5jCitAQCAtMTY4NSw3ICsxNjg1LDcgQEAgdm9pZCB3YWl0X2Zvcl9yZWNlaXZlcih2b2lkKQorIAkJCQlycHJpbnRmKEZJTkZPLCAiWyVzXSByZWNlaXZpbmcgZmxpc3QgZm9yIGRpciAlZFxuIiwKKyAJCQkJCXdob19hbV9pKCksIG5keCk7CisgCQkJfQorLQkJCWZsaXN0ID0gcmVjdl9maWxlX2xpc3QoaW9idWYuaW5fZmQpOworKwkJCWZsaXN0ID0gcmVjdl9maWxlX2xpc3QoaW9idWYuaW5fZmQsIG5keCk7CisgCQkJZmxpc3QtPnBhcmVudF9uZHggPSBuZHg7CisgI2lmZGVmIFNVUFBPUlRfSEFSRF9MSU5LUworIAkJCWlmIChwcmVzZXJ2ZV9oYXJkX2xpbmtzKQorZGlmZiAtLWdpdCBhL21haW4uYyBiL21haW4uYworaW5kZXggZTdhMTNmNy4uNzEzYjgxOCAxMDA2NDQKKy0tLSBhL21haW4uYworKysrIGIvbWFpbi5jCitAQCAtMTAwOSw3ICsxMDA5LDcgQEAgc3RhdGljIHZvaWQgZG9fc2VydmVyX3JlY3YoaW50IGZfaW4sIGludCBmX291dCwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJCWZpbGVzZnJvbV9mZCA9IC0xOworIAl9CisgCistCWZsaXN0ID0gcmVjdl9maWxlX2xpc3QoZl9pbik7CisrCWZsaXN0ID0gcmVjdl9maWxlX2xpc3QoZl9pbiwgLTEpOworIAlpZiAoIWZsaXN0KSB7CisgCQlycHJpbnRmKEZFUlJPUiwic2VydmVyX3JlY3Y6IHJlY3ZfZmlsZV9saXN0IGVycm9yXG4iKTsKKyAJCWV4aXRfY2xlYW51cChSRVJSX0ZJTEVTRUxFQ1QpOworQEAgLTExODMsNyArMTE4Myw3IEBAIGludCBjbGllbnRfcnVuKGludCBmX2luLCBpbnQgZl9vdXQsIHBpZF90IHBpZCwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAKKyAJaWYgKHdyaXRlX2JhdGNoICYmICFhbV9zZXJ2ZXIpCisgCQlzdGFydF93cml0ZV9iYXRjaChmX2luKTsKKy0JZmxpc3QgPSByZWN2X2ZpbGVfbGlzdChmX2luKTsKKysJZmxpc3QgPSByZWN2X2ZpbGVfbGlzdChmX2luLCAtMSk7CisgCWlmIChpbmNfcmVjdXJzZSAmJiBmaWxlX3RvdGFsID09IDEpCisgCQlyZWN2X2FkZGl0aW9uYWxfZmlsZV9saXN0KGZfaW4pOworIAorZGlmZiAtLWdpdCBhL3JzeW5jLmMgYi9yc3luYy5jCitpbmRleCA2OGZmNmIxLi5jM2VjYzUxIDEwMDY0NAorLS0tIGEvcnN5bmMuYworKysrIGIvcnN5bmMuYworQEAgLTM2NCw3ICszNjQsNyBAQCBpbnQgcmVhZF9uZHhfYW5kX2F0dHJzKGludCBmX2luLCBpbnQgZl9vdXQsIGludCAqaWZsYWdfcHRyLCB1Y2hhciAqdHlwZV9wdHIsCisgCQl9CisgCQkvKiBTZW5kIGFsbCB0aGUgZGF0YSB3ZSByZWFkIGZvciB0aGlzIGZsaXN0IHRvIHRoZSBnZW5lcmF0b3IuICovCisgCQlzdGFydF9mbGlzdF9mb3J3YXJkKG5keCk7CistCQlmbGlzdCA9IHJlY3ZfZmlsZV9saXN0KGZfaW4pOworKwkJZmxpc3QgPSByZWN2X2ZpbGVfbGlzdChmX2luLCBuZHgpOworIAkJZmxpc3QtPnBhcmVudF9uZHggPSBuZHg7CisgCQlzdG9wX2ZsaXN0X2ZvcndhcmQoKTsKKyAJfQorZGlmZiAtLWdpdCBhL3Byb3RvLmggYi9wcm90by5oCitpbmRleCAyMmZjNTM5Li4yNDdjNTU4IDEwMDY0NAorLS0tIGEvcHJvdG8uaAorKysrIGIvcHJvdG8uaAorQEAgLTg5LDcgKzg5LDcgQEAgc3RydWN0IGZpbGVfc3RydWN0ICptYWtlX2ZpbGUoY29uc3QgY2hhciAqZm5hbWUsIHN0cnVjdCBmaWxlX2xpc3QgKmZsaXN0LAorIHZvaWQgdW5tYWtlX2ZpbGUoc3RydWN0IGZpbGVfc3RydWN0ICpmaWxlKTsKKyB2b2lkIHNlbmRfZXh0cmFfZmlsZV9saXN0KGludCBmLCBpbnQgYXRfbGVhc3QpOworIHN0cnVjdCBmaWxlX2xpc3QgKnNlbmRfZmlsZV9saXN0KGludCBmLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKy1zdHJ1Y3QgZmlsZV9saXN0ICpyZWN2X2ZpbGVfbGlzdChpbnQgZik7Cisrc3RydWN0IGZpbGVfbGlzdCAqcmVjdl9maWxlX2xpc3QoaW50IGYsIGludCBkaXJfbmR4KTsKKyB2b2lkIHJlY3ZfYWRkaXRpb25hbF9maWxlX2xpc3QoaW50IGYpOworIGludCBmbGlzdF9maW5kKHN0cnVjdCBmaWxlX2xpc3QgKmZsaXN0LCBzdHJ1Y3QgZmlsZV9zdHJ1Y3QgKmYpOworIGludCBmbGlzdF9maW5kX2lnbm9yZV9kaXJuZXNzKHN0cnVjdCBmaWxlX2xpc3QgKmZsaXN0LCBzdHJ1Y3QgZmlsZV9zdHJ1Y3QgKmYpOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy0zLjEuMS9yc3luYy5naXQtZWFjODU4MDg1LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMtMy4xLjEvcnN5bmMuZ2l0LWVhYzg1ODA4NS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmNhYzQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMtMy4xLjEvcnN5bmMuZ2l0LWVhYzg1ODA4NS5wYXRjaApAQCAtMCwwICsxLDEwMSBAQAorRnJvbSBlYWM4NTgwODVlM2FjOTRlYzBhYjUwNjFkMTFmNTI2NTJjOTBhODY5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogV2F5bmUgRGF2aXNvbiA8d2F5bmVkQHNhbWJhLm9yZz4KK0RhdGU6IE1vbiwgMTEgTWF5IDIwMTUgMTI6MzY6MjAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAxLzFdIEFkZCBjb21wYXQgZmxhZyB0byBhbGxvdyBwcm9wZXIgc2VlZCBjaGVja3N1bSBvcmRlci4KKyBGaXhlcyB0aGUgZXF1aXZhbGVudCBvZiBsaWJyc3luYydzIENWRS0yMDE0LTgyNDIgaXNzdWUuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgY2hlY2tzdW0uYyB8IDE3ICsrKysrKysrKysrKystLS0tCisgY29tcGF0LmMgICB8ICA1ICsrKysrCisgb3B0aW9ucy5jICB8ICAxICsKKyAzIGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jaGVja3N1bS5jIGIvY2hlY2tzdW0uYworaW5kZXggYTFjMmFhMi4uOTMzYjUxNCAxMDA2NDQKKy0tLSBhL2NoZWNrc3VtLmMKKysrKyBiL2NoZWNrc3VtLmMKK0BAIC0yMyw2ICsyMyw3IEBACisgCisgZXh0ZXJuIGludCBjaGVja3N1bV9zZWVkOworIGV4dGVybiBpbnQgcHJvdG9jb2xfdmVyc2lvbjsKKytleHRlcm4gaW50IHByb3Blcl9zZWVkX29yZGVyOworIAorIC8qCisgICBhIHNpbXBsZSAzMiBiaXQgY2hlY2tzdW0gdGhhdCBjYW4gYmUgdXBhZHRlZCBmcm9tIGVpdGhlciBlbmQKK0BAIC01NCwxMCArNTUsMTggQEAgdm9pZCBnZXRfY2hlY2tzdW0yKGNoYXIgKmJ1ZiwgaW50MzIgbGVuLCBjaGFyICpzdW0pCisgCWlmIChwcm90b2NvbF92ZXJzaW9uID49IDMwKSB7CisgCQl1Y2hhciBzZWVkYnVmWzRdOworIAkJbWQ1X2JlZ2luKCZtKTsKKy0JCW1kNV91cGRhdGUoJm0sICh1Y2hhciAqKWJ1ZiwgbGVuKTsKKy0JCWlmIChjaGVja3N1bV9zZWVkKSB7CistCQkJU0lWQUx1KHNlZWRidWYsIDAsIGNoZWNrc3VtX3NlZWQpOworLQkJCW1kNV91cGRhdGUoJm0sIHNlZWRidWYsIDQpOworKwkJaWYgKHByb3Blcl9zZWVkX29yZGVyKSB7CisrCQkJaWYgKGNoZWNrc3VtX3NlZWQpIHsKKysJCQkJU0lWQUx1KHNlZWRidWYsIDAsIGNoZWNrc3VtX3NlZWQpOworKwkJCQltZDVfdXBkYXRlKCZtLCBzZWVkYnVmLCA0KTsKKysJCQl9CisrCQkJbWQ1X3VwZGF0ZSgmbSwgKHVjaGFyICopYnVmLCBsZW4pOworKwkJfSBlbHNlIHsKKysJCQltZDVfdXBkYXRlKCZtLCAodWNoYXIgKilidWYsIGxlbik7CisrCQkJaWYgKGNoZWNrc3VtX3NlZWQpIHsKKysJCQkJU0lWQUx1KHNlZWRidWYsIDAsIGNoZWNrc3VtX3NlZWQpOworKwkJCQltZDVfdXBkYXRlKCZtLCBzZWVkYnVmLCA0KTsKKysJCQl9CisgCQl9CisgCQltZDVfcmVzdWx0KCZtLCAodWNoYXIgKilzdW0pOworIAl9IGVsc2UgeworZGlmZiAtLWdpdCBhL2NvbXBhdC5jIGIvY29tcGF0LmMKK2luZGV4IDI0NTQ5MzcuLmY4OWQ0NjYgMTAwNjQ0CistLS0gYS9jb21wYXQuYworKysrIGIvY29tcGF0LmMKK0BAIC0yNyw2ICsyNyw3IEBAIGludCBpbmNfcmVjdXJzZSA9IDA7CisgaW50IGNvbXBhdF9mbGFncyA9IDA7CisgaW50IHVzZV9zYWZlX2luY19mbGlzdCA9IDA7CisgaW50IHdhbnRfeGF0dHJfb3B0aW0gPSAwOworK2ludCBwcm9wZXJfc2VlZF9vcmRlciA9IDA7CisgCisgZXh0ZXJuIGludCBhbV9zZXJ2ZXI7CisgZXh0ZXJuIGludCBhbV9zZW5kZXI7CitAQCAtNzgsNiArNzksNyBAQCBpbnQgZmlsZXNmcm9tX2NvbnZlcnQgPSAwOworICNkZWZpbmUgQ0ZfU1lNTElOS19JQ09OViAoMTw8MikKKyAjZGVmaW5lIENGX1NBRkVfRkxJU1QJICgxPDwzKQorICNkZWZpbmUgQ0ZfQVZPSURfWEFUVFJfT1BUSU0gKDE8PDQpCisrI2RlZmluZSBDRl9DSEtTVU1fU0VFRF9GSVggKDE8PDUpCisgCisgc3RhdGljIGNvbnN0IGNoYXIgKmNsaWVudF9pbmZvOworIAorQEAgLTI3MSwxMiArMjczLDE1IEBAIHZvaWQgc2V0dXBfcHJvdG9jb2woaW50IGZfb3V0LGludCBmX2luKQorIAkJCQljb21wYXRfZmxhZ3MgfD0gQ0ZfU0FGRV9GTElTVDsKKyAJCQlpZiAobG9jYWxfc2VydmVyIHx8IHN0cmNocihjbGllbnRfaW5mbywgJ3gnKSAhPSBOVUxMKQorIAkJCQljb21wYXRfZmxhZ3MgfD0gQ0ZfQVZPSURfWEFUVFJfT1BUSU07CisrCQkJaWYgKGxvY2FsX3NlcnZlciB8fCBzdHJjaHIoY2xpZW50X2luZm8sICdDJykgIT0gTlVMTCkKKysJCQkJY29tcGF0X2ZsYWdzIHw9IENGX0NIS1NVTV9TRUVEX0ZJWDsKKyAJCQl3cml0ZV9ieXRlKGZfb3V0LCBjb21wYXRfZmxhZ3MpOworIAkJfSBlbHNlCisgCQkJY29tcGF0X2ZsYWdzID0gcmVhZF9ieXRlKGZfaW4pOworIAkJLyogVGhlIGluY19yZWN1cnNlIHZhciBNVVNUIGJlIHNldCB0byAwIG9yIDEuICovCisgCQlpbmNfcmVjdXJzZSA9IGNvbXBhdF9mbGFncyAmIENGX0lOQ19SRUNVUlNFID8gMSA6IDA7CisgCQl3YW50X3hhdHRyX29wdGltID0gcHJvdG9jb2xfdmVyc2lvbiA+PSAzMSAmJiAhKGNvbXBhdF9mbGFncyAmIENGX0FWT0lEX1hBVFRSX09QVElNKTsKKysJCXByb3Blcl9zZWVkX29yZGVyID0gY29tcGF0X2ZsYWdzICYgQ0ZfQ0hLU1VNX1NFRURfRklYID8gMSA6IDA7CisgCQlpZiAoYW1fc2VuZGVyKSB7CisgCQkJcmVjZWl2ZXJfc3ltbGlua190aW1lcyA9IGFtX3NlcnZlcgorIAkJCSAgICA/IHN0cmNocihjbGllbnRfaW5mbywgJ0wnKSAhPSBOVUxMCitkaWZmIC0tZ2l0IGEvb3B0aW9ucy5jIGIvb3B0aW9ucy5jCitpbmRleCAxOWMyYjdkLi40MTI4YjU5IDEwMDY0NAorLS0tIGEvb3B0aW9ucy5jCisrKysgYi9vcHRpb25zLmMKK0BAIC0yNTAzLDYgKzI1MDMsNyBAQCB2b2lkIHNlcnZlcl9vcHRpb25zKGNoYXIgKiphcmdzLCBpbnQgKmFyZ2NfcCkKKyAjZW5kaWYKKyAJCWFyZ3N0clt4KytdID0gJ2YnOyAvKiBmbGlzdCBJL08tZXJyb3Igc2FmZXR5IHN1cHBvcnQgKi8KKyAJCWFyZ3N0clt4KytdID0gJ3gnOyAvKiB4YXR0ciBoYXJkbGluayBvcHRpbWl6YXRpb24gbm90IGRlc2lyZWQgKi8KKysJCWFyZ3N0clt4KytdID0gJ0MnOyAvKiBzdXBwb3J0IGNoZWNrc3VtIHNlZWQgb3JkZXIgZml4ICovCisgCX0KKyAKKyAJaWYgKHggPj0gKGludClzaXplb2YgYXJnc3RyKSB7IC8qIE5vdCBwb3NzaWJsZS4uLiAqLworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY1ZjI3MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLmluYwpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIkZpbGUgc3luY2hyb25pemF0aW9uIHRvb2wiCitIT01FUEFHRSA9ICJodHRwOi8vcnN5bmMuc2FtYmEub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3JzeW5jLnNhbWJhLm9yZy9idWd6aWxsYS5odG1sIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCisKKyMgR1BMdjIrICg8PCAzLjAuMCksIEdQTHYzKyAoPj0gMy4wLjApCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCisjIG5lZWRzIHRvIGFkZCBhY2wgYW5kIGF0dHIKK0RFUEVORFMgPSAicG9wdCIKKworU1JDX1VSSSA9ICJodHRwOi8vcnN5bmMuc2FtYmEub3JnL2Z0cC9yc3luYy9zcmMvcnN5bmMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3JzeW5jZC5jb25mIgorCitpbmhlcml0IGF1dG90b29scworCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcnN5bmNkLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0KK30KKworRVhUUkFfT0VNQUtFPSdTVFJJUD0iIicKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jXzIuNi45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmNfMi42LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg1NGM3NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jXzIuNi45LmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiRmlsZSBzeW5jaHJvbml6YXRpb24gdG9vbCIKK0hPTUVQQUdFID0gImh0dHA6Ly9yc3luYy5zYW1iYS5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vcnN5bmMuc2FtYmEub3JnL2J1Z3ppbGxhLmh0bWwiCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKKworIyBuZWVkcyB0byBhZGQgYWNsIGFuZCBhdHRyCitERVBFTkRTID0gInBvcHQiCisKK1NSQ19VUkkgPSAiaHR0cDovL3JzeW5jLnNhbWJhLm9yZy9mdHAvcnN5bmMvc3JjL3JzeW5jLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9yc3luYy0yLjYuOS1mbmFtZS1vYm8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnN5bmNkLmNvbmYiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5OTZkOGQ4ODMxZGJjYTE3OTEwMDk0ZTU2ZGNiNTk0MiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjYTQzNzMwMWJlY2Q4OTBlNzMzMDBiYzY5YTM5MTg5ZmYxNTY0YmFhNzYxOTQ4ZmYxNDliM2RkN2JkZTYzM2Y5IgorCitpbmhlcml0IGF1dG90b29scworCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcnN5bmNkLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0KK30KKworRVhUUkFfT0VNQUtFPSdTVFJJUD0iIicKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02ZDVhOWQ0YzRkM2FmMjVjZDY4ZmQ4M2U4YThjYjA5YyIKKworUFIgPSAicjQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luY18zLjEuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jXzMuMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NGNkZGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luY18zLjEuMS5iYgpAQCAtMCwwICsxLDMwIEBACityZXF1aXJlIHJzeW5jLmluYworCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9hY2luY2x1ZGUubTQgXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtQ29tcGxhaW4taWYtYW4taW5jLXJlY3Vyc2l2ZS1wYXRoLWlzLW5vdC1yaWdodC1mb3ItaS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcnN5bmMuZ2l0LWVhYzg1ODA4NS5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0M2JkNjY3NmYwYjQwNDMyNmVlZTJkNjNiZTNjZGNmZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3ZGU0MzY0ZmNmNWZlNDJmM2JkYjUxNDQxN2YxYzQwZDEwYmJjYTg5NmFiZTdlN2YyYzU4MWM2ZWEwOGEyNjIxIgorCitQQUNLQUdFQ09ORklHID8/PSAiYWNsIGF0dHIiCitQQUNLQUdFQ09ORklHW2FjbF0gPSAiLS1lbmFibGUtYWNsLXN1cHBvcnQsLS1kaXNhYmxlLWFjbC1zdXBwb3J0LGFjbCwiCitQQUNLQUdFQ09ORklHW2F0dHJdID0gIi0tZW5hYmxlLXhhdHRyLXN1cHBvcnQsLS1kaXNhYmxlLXhhdHRyLXN1cHBvcnQsYXR0ciwiCisKKyMgcnN5bmMgMy4wIHVzZXMgY29uZmlndXJlLnNoIGluc3RlYWQgb2YgY29uZmlndXJlLCBhbmQKKyMgbWFrZWZpbGUgY2hlY2tzIHRoZSBleGlzdGVuY2Ugb2YgY29uZmlndXJlLnNoCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJcm0gLWYgJHtTfS9jb25maWd1cmUgJHtTfS9jb25maWd1cmUuc2gKKwljcCAtZiAke1dPUktESVJ9L2FjaW5jbHVkZS5tNCAke1N9LworCisJIyBCeSBkZWZhdWx0LCBpZiBjcm9zc2NvbXBpbGluZywgcnN5bmMgZGlzYWJsZXMgYSBudW1iZXIgb2YKKwkjIGNhcGFiaWxpdGllcywgaGFyZGxpbmtpbmcgc3ltbGlua3MgYW5kIHNwZWNpYWwgZmlsZXMgKGkuZS4gZGV2aWNlcykKKwlleHBvcnQgcnN5bmNfY3ZfY2FuX2hhcmRsaW5rX3NwZWNpYWw9eWVzCisJZXhwb3J0IHJzeW5jX2N2X2Nhbl9oYXJkbGlua19zeW1saW5rPXllcworfQorCitkb19jb25maWd1cmVfYXBwZW5kICgpIHsKKwljcCAtZiAke1N9L2NvbmZpZ3VyZSAke1N9L2NvbmZpZ3VyZS5zaAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdhYTc4OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieS5pbmMKQEAgLTAsMCArMSwzOCBAQAorU1VNTUFSWSA9ICJBbiBpbnRlcnByZXRlciBvZiBvYmplY3Qtb3JpZW50ZWQgc2NyaXB0aW5nIGxhbmd1YWdlIgorREVTQ1JJUFRJT04gPSAiUnVieSBpcyBhbiBpbnRlcnByZXRlZCBzY3JpcHRpbmcgbGFuZ3VhZ2UgZm9yIHF1aWNrIFwKK2FuZCBlYXN5IG9iamVjdC1vcmllbnRlZCBwcm9ncmFtbWluZy4gSXQgaGFzIG1hbnkgZmVhdHVyZXMgdG8gcHJvY2VzcyBcCit0ZXh0IGZpbGVzIGFuZCB0byBkbyBzeXN0ZW0gbWFuYWdlbWVudCB0YXNrcyAoYXMgaW4gUGVybCkuIFwKK0l0IGlzIHNpbXBsZSwgc3RyYWlnaHQtZm9yd2FyZCwgYW5kIGV4dGVuc2libGUuIFwKKyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cucnVieS1sYW5nLm9yZy8iCitTRUNUSU9OID0gImRldmVsL3J1YnkiCitMSUNFTlNFID0gIlJ1YnkgfCBCU0QgfCBHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiXAorICAgIGZpbGU6Ly9DT1BZSU5HO21kNT04MzdiMzI1OTM1MTdhZTQ4YjljM2I1Yzg3YTVkMjg4YyBcCisgICAgZmlsZTovL0JTREw7bWQ1PTE5YWFmNjVjODhhNDBiNTA4ZDE3YWU0YmU1MzljNGI1XAorICAgIGZpbGU6Ly9HUEw7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzXAorICAgIGZpbGU6Ly9MRUdBTDttZDU9YzQ0MGFkYjU3NWJhNGU2ZTIzNDRjMjYzMGI2YTU1ODRcCisiCisKK0RFUEVORFMgPSAicnVieS1uYXRpdmUgemxpYiBvcGVuc3NsIHRjbCBsaWJ5YW1sIGRiIGdkYm0gcmVhZGxpbmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJsaWJ5YW1sLW5hdGl2ZSIKKworU0hSVF9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKK1NSQ19VUkkgPSAiaHR0cDovL2NhY2hlLnJ1YnktbGFuZy5vcmcvcHViL3J1YnkvJHtTSFJUX1ZFUn0vcnVieS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZXh0bWsucGF0Y2ggXAorIgorCitpbmhlcml0IGF1dG90b29scworCisKKyMgVGhpcyBzbmlwcGV0IGxldHMgY29tcGlsZWQgZXh0ZW5zaW9ucyB3aGljaCByZWx5IG9uIGV4dGVybmFsIGxpYnJhcmllcywKKyMgc3VjaCBhcyB6bGliLCBjb21waWxlIHByb3Blcmx5LiAgSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhlbiB3aGVuIGV4dG1rLnJiCisjIHJ1bnMsIGl0IHVzZXMgdGhlIG5hdGl2ZSBsaWJyYXJpZXMgaW5zdGVhZCBvZiB0aGUgdGFyZ2V0IGxpYnJhcmllcywgYW5kIHNvCisjIG5vbmUgb2YgdGhlIGxpbmtpbmcgb3BlcmF0aW9ucyBzdWNjZWVkIC0tIHdoaWNoIG1ha2VzIGV4dGNvbmYucmIgdGhpbmsKKyMgdGhhdCB0aGUgbGlicmFyaWVzIGFyZW4ndCBhdmFpbGFibGUgYW5kIGhlbmNlIHRoYXQgdGhlIGV4dGVuc2lvbiBjYW4ndCBiZQorIyBidWlsdC4KKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgc2VkIC1pICJzIyUlVEFSR0VUX0NGTEFHUyUlIyRUQVJHRVRfQ0ZMQUdTIzsgcyMlJVRBUkdFVF9MREZMQUdTJSUjJFRBUkdFVF9MREZMQUdTIyIgJHtTfS9jb21tb24ubWsKKyAgICBybSAtcmYgJHtTfS9ydWJ5LworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5L2V4dG1rLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5L2V4dG1rLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNjg0NTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnkvZXh0bWsucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorZGlmZiAtcnUgcnVieS0xLjguNy1wMjQ4Lm9yaWcvZXh0L2V4dG1rLnJiIHJ1YnktMS44LjctcDI0OC9leHQvZXh0bWsucmIKKy0tLSBydWJ5LTEuOC43LXAyNDgub3JpZy9leHQvZXh0bWsucmIJMjAwOS0xMi0yNCAwMzowMTo1OC4wMDAwMDAwMDAgLTA2MDAKKysrKyBydWJ5LTEuOC43LXAyNDgvZXh0L2V4dG1rLnJiCTIwMTAtMDItMTIgMTU6NTU6MjcuMzcwMDYxNTU4IC0wNjAwCitAQCAtMzU0LDggKzM1NCw4IEBACisgICAkcnVieSA9ICckKHRvcGRpcikvbWluaXJ1YnknICsgRVhFRVhUCisgZW5kCisgJHJ1YnkgPDwgIiAtSSckKHRvcGRpciknIgorKyRydWJ5IDw8ICIgLUknJCh0b3Bfc3JjZGlyKS9saWInIgorIHVubGVzcyBDUk9TU19DT01QSUxJTkcKKy0gICRydWJ5IDw8ICIgLUknJCh0b3Bfc3JjZGlyKS9saWInIgorICAgJHJ1YnkgPDwgIiAtSSckKGV4dG91dCkvJChhcmNoKScgLUknJChleHRvdXQpL2NvbW1vbiciIGlmICRleHRvdXQKKyAgICRydWJ5IDw8ICIgLUkuLy0gLUknJCh0b3Bfc3JjZGlyKS9leHQnIC1ycHVyZWxpYi5yYiIKKyAgIEVOVlsiUlVCWUxJQiJdID0gIi0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnlfMi4yLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnlfMi4yLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhjOTQzYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieV8yLjIuMi5iYgpAQCAtMCwwICsxLDQyIEBACityZXF1aXJlIHJ1YnkuaW5jCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzMjZlOTlkZGM3NTM4MWM3YjUwYzg1ZjcwODlmMzI2MCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1ZmZjMGYzMTdlNDI5ZTZiMjlkNGE5OGFjNTIxYzNjZTY1NDgxYmZkMjJhOGNmODQ1ZmEwMmE3YjExM2Q5YjQ0IgorCisjIGl0J3MgdW5rbm93biB0byBjb25maWd1cmUgc2NyaXB0LCBidXQgdGhlbiBwYXNzZWQgdG8gZXh0Y29uZi5yYgorIyBtYXliZSBpdCdzIG5vdCByZWFsbHkgbmVlZGVkIGFzIHdlJ3JlIGhhcmRjb2RpbmcgdGhlIHJlc3VsdCB3aXRoCisjIDAwMDEtc29ja2V0LWV4dGNvbmYtaGFyZGNvZGUtd2lkZS1nZXRhZGRyLWluZm8tdGVzdC1vdXRjby5wYXRjaAorVU5LTk9XTl9DT05GSUdVUkVfV0hJVEVMSVNUICs9ICItLWVuYWJsZS13aWRlLWdldGFkZHJpbmZvIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJRyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgJ2lwdjYnLCAnJywgZCl9IgorCitQQUNLQUdFQ09ORklHW3ZhbGdyaW5kXSA9ICItLXdpdGgtdmFsZ3JpbmQ9eWVzLCAtLXdpdGgtdmFsZ3JpbmQ9bm8sIHZhbGdyaW5kIgorUEFDS0FHRUNPTkZJR1tncG1dID0gIi0td2l0aC1nbXA9eWVzLCAtLXdpdGgtZ21wPW5vLCBnbXAiCitQQUNLQUdFQ09ORklHW2lwdjZdID0gIiwtLWVuYWJsZS13aWRlLWdldGFkZHJpbmZvLCIKKworRVhUUkFfT0VDT05GID0gIlwKKyAgICAtLWRpc2FibGUtdmVyc2lvbmVkLXBhdGhzIFwKKyAgICAtLWRpc2FibGUtcnBhdGggXAorICAgIC0tZGlzYWJsZS1kdHJhY2UgXAorICAgIC0tZW5hYmxlLXNoYXJlZCBcCisgICAgLS1lbmFibGUtbG9hZC1yZWxhdGl2ZSBcCisiCisKK0VYVFJBX09FTUFLRSA9ICIgXAorICAgIExJQlJVQllBUkc9Jy1scnVieS1zdGF0aWMnIFwKKyIKKworZG9faW5zdGFsbCgpIHsKKyAgICBvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vcnVieWdlbXMgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vcmkiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3J1YnkvKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcnVieS8qLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3J1YnkvKi8qLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3J1YnkvKi8qLyovKi8uZGVidWciCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41M2E4ZTFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMKQEAgLTAsMCArMSw5MiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAyMDA3IE9wZW5lZGhhbmQgTHRkLgorIworIyBBdXRob3I6IFJpY2hhcmQgUHVyZGllIDxycHVyZGllQG9wZW5lZGhhbmQuY29tPgorIworCisjIFRoZSBmb2xsb3dpbmcgc2NyaXB0IHdpbGwgcnVuIGFsbCB0aGUgc2NyaXB0bGV0cyBmb3VuZCBpbiAjU1lTQ09ORkRJUiMvZGViLXBvc3RpbnN0cywKKyMgI1NZU0NPTkZESVIjL2lway1wb3N0aW5zdHMgb3IgI1NZU0NPTkZESVIjL3JwbS1wb3NpbnN0cy4KKworIyB0aGUgb3JkZXIgb2YgdGhpcyBsaXN0IGlzIGltcG9ydGFudCwgZG8gbm90IGNoYW5nZSEKK2JhY2tlbmRfbGlzdD0icnBtIGRlYiBpcGsiCisKK3BtX2luc3RhbGxlZD1mYWxzZQorCitmb3IgcG0gaW4gJGJhY2tlbmRfbGlzdDsgZG8KKwlwaV9kaXI9IiNTWVNDT05GRElSIy8kcG0tcG9zdGluc3RzIgorCisJWyAtZCAkcGlfZGlyIF0gJiYgYnJlYWsKKworCWNhc2UgJHBtIGluCisJCSJkZWIiKQorCQkJaWYgWyAtcyAiI0xPQ0FMU1RBVEVESVIjL2xpYi9kcGtnL3N0YXR1cyIgXTsgdGhlbgorCQkJCXBtX2luc3RhbGxlZD10cnVlCisJCQkJYnJlYWsKKwkJCWZpCisJCQk7OworCisJCSJpcGsiKQorCQkJaWYgWyAtcyAiL3Zhci9saWIvb3BrZy9zdGF0dXMiIF07IHRoZW4KKwkJCQlwbV9pbnN0YWxsZWQ9dHJ1ZQorCQkJCWJyZWFrCisJCQlmaQorCQkJOzsKKwllc2FjCitkb25lCisKK3JlbW92ZV9yY3NkX2xpbmsgKCkgeworCWlmIFsgLW4gImB3aGljaCB1cGRhdGUtcmMuZGAiIF07IHRoZW4KKwkJdXBkYXRlLXJjLmQgLWYgcnVuLXBvc3RpbnN0cyByZW1vdmUKKwlmaQorfQorCitpZiBbIC16ICIkcGlfZGlyIiBdOyB0aGVuCisJcmVtb3ZlX3Jjc2RfbGluaworCWV4aXQgMAorZmkKKworWyAtZSAjU1lTQ09ORkRJUiMvZGVmYXVsdC9wb3N0aW5zdCBdICYmIC4gI1NZU0NPTkZESVIjL2RlZmF1bHQvcG9zdGluc3QKKworaWYgWyAiJFBPU1RJTlNUX0xPR0dJTkciID0gIjEiIF07IHRoZW4KKwlybSAtZiAkTE9HRklMRQorCWFwcGVuZF9sb2c9Ij4+JExPR0ZJTEUgMj4mMSIKK2ZpCisKK2V4ZWNfcG9zdGluc3Rfc2NyaXB0bGV0cygpIHsKKwlmb3IgaSBpbiBgbHMgJHBpX2RpcmA7IGRvCisJCWk9JHBpX2Rpci8kaQorCQllY2hvICJSdW5uaW5nIHBvc3RpbnN0ICRpLi4uIgorCQlbICIkUE9TVElOU1RfTE9HR0lORyIgPSAiMSIgXSAmJiBldmFsIGVjaG8gIlJ1bm5pbmcgcG9zdGluc3QgJGkuLi4iICRhcHBlbmRfbG9nCisJCWlmIFsgLXggJGkgXTsgdGhlbgorCQkJZXZhbCBzaCAtYyAkaSAkYXBwZW5kX2xvZworCQkJcm0gJGkKKwkJZWxzZQorCQkJZWNobyAiRVJST1I6IHBvc3RpbnN0ICRpIGZhaWxlZC4iCisJCQlbICIkUE9TVElOU1RfTE9HR0lORyIgPSAiMSIgXSAmJiBldmFsIGVjaG8gIkVSUk9SOiBwb3N0aW5zdCAkaSBmYWlsZWQuIiAkYXBwZW5kX2xvZworCQkJcmVtb3ZlX3BpX2Rpcj0wCisJCWZpCisJZG9uZQorfQorCityZW1vdmVfcGlfZGlyPTEKK2lmICRwbV9pbnN0YWxsZWQ7IHRoZW4KKwljYXNlICRwbSBpbgorCQkiaXBrIikKKwkJCWV2YWwgb3BrZyBjb25maWd1cmUgJGFwcGVuZF9sb2cKKwkJCTs7CisKKwkJImRlYiIpCisJCQlldmFsIGRwa2cgLS1jb25maWd1cmUgLWEgJGFwcGVuZF9sb2cKKwkJCTs7CisJZXNhYworZWxzZQorCWV4ZWNfcG9zdGluc3Rfc2NyaXB0bGV0cworZmkKKworIyBzaW5jZSBhbGwgcG9zdGluc3RhbGxzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSwgcmVtb3ZlIHRoZSBwb3N0aW5zdGFsbHMgZGlyZWN0b3J5CisjIGFuZCB0aGUgcmNTLmQgbGluaworaWYgWyAkcmVtb3ZlX3BpX2RpciA9IDEgXTsgdGhlbgorCXJtIC1yZiAkcGlfZGlyCisJcmVtb3ZlX3Jjc2RfbGluaworZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzLmluaXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy5pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3M2ExZjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy5pbml0CkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKK3J1bi1wb3N0aW5zdHMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzLnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YTA0MzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy5zZXJ2aWNlCkBAIC0wLDAgKzEsMTYgQEAKK1tVbml0XQorRGVzY3JpcHRpb249UnVuIHBlbmRpbmcgcG9zdGluc3RzCitEZWZhdWx0RGVwZW5kZW5jaWVzPW5vCitBZnRlcj1zeXN0ZW1kLXJlbW91bnQtZnMuc2VydmljZSBzeXN0ZW1kLXRtcGZpbGVzLXNldHVwLnNlcnZpY2UgdG1wLm1vdW50CitCZWZvcmU9c3lzaW5pdC50YXJnZXQKK0NvbmRpdGlvblBhdGhFeGlzdHNHbG9iPSNTWVNDT05GRElSIy8qLXBvc3RpbnN0cworCitbU2VydmljZV0KK1R5cGU9b25lc2hvdAorRXhlY1N0YXJ0PSNTQklORElSIy9ydW4tcG9zdGluc3RzCitFeGVjU3RhcnRQb3N0PSNCQVNFX0JJTkRJUiMvc3lzdGVtY3RsIGRpc2FibGUgcnVuLXBvc3RpbnN0cy5zZXJ2aWNlCitSZW1haW5BZnRlckV4aXQ9Tm8KK1RpbWVvdXRTZWM9MAorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PXN5c2luaXQudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHNfMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWM5NGU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzXzEuMC5iYgpAQCAtMCwwICsxLDQ1IEBACitTVU1NQVJZID0gIlJ1bnMgcG9zdGluc3RhbGwgc2NyaXB0cyBvbiBmaXJzdCBib290IG9mIHRoZSB0YXJnZXQgZGV2aWNlIgorU0VDVElPTiA9ICJkZXZlbCIKK1BSID0gInI5IgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworU1JDX1VSSSA9ICJmaWxlOi8vcnVuLXBvc3RpbnN0cyBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcG9zdGluc3RzLmluaXQgXAorICAgICAgICAgICBmaWxlOi8vcnVuLXBvc3RpbnN0cy5zZXJ2aWNlIgorCitTID0gIiR7V09SS0RJUn0iCisKK2luaGVyaXQgYWxsYXJjaCBzeXN0ZW1kIHVwZGF0ZS1yYy5kCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJydW4tcG9zdGluc3RzIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOTkgUyAuIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAicnVuLXBvc3RpbnN0cy5zZXJ2aWNlIgorCitkb19jb25maWd1cmUoKSB7CisJOgorfQorCitkb19jb21waWxlICgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3J1bi1wb3N0aW5zdHMgJHtEfSR7c2JpbmRpcn0vCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9ydW4tcG9zdGluc3RzLmluaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3J1bi1wb3N0aW5zdHMKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcnVuLXBvc3RpbnN0cy5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCisJc2VkIC1pIC1lICdzOiNTWVNDT05GRElSIzoke3N5c2NvbmZkaXJ9OmcnIFwKKyAgICAgICAgICAgICAgIC1lICdzOiNTQklORElSIzoke3NiaW5kaXJ9OmcnIFwKKyAgICAgICAgICAgICAgIC1lICdzOiNCQVNFX0JJTkRJUiM6JHtiYXNlX2JpbmRpcn06ZycgXAorICAgICAgICAgICAgICAgLWUgJ3M6I0xPQ0FMU1RBVEVESVIjOiR7bG9jYWxzdGF0ZWRpcn06ZycgXAorICAgICAgICAgICAgICAgJHtEfSR7c2JpbmRpcn0vcnVuLXBvc3RpbnN0cyBcCisgICAgICAgICAgICAgICAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9ydW4tcG9zdGluc3RzLnNlcnZpY2UKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWwtY29tbW9uL3NnbWwtY29tbW9uLTAuNi4zL2F1dG9oZWxsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb24tMC42LjMvYXV0b2hlbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYzOWIwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWwtY29tbW9uL3NnbWwtY29tbW9uLTAuNi4zL2F1dG9oZWxsLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK1BhdGNoIG9idGFpbmVkIGZyb20gT3BlbkVtYmVkZGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBzZ21sLWNvbW1vbi0wLjYuMy9iaW4vTWFrZWZpbGUuYW1+YXV0b2hlbGwucGF0Y2gJMjAwMS0wMS0zMCAxNTo0MjoyMS4wMDAwMDAwMDAgKzAxMDAKKysrKyBzZ21sLWNvbW1vbi0wLjYuMy9iaW4vTWFrZWZpbGUuYW0JMjAwNC0wNi0xNyAxMTo1MToxMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xLDYgKzEsNSBAQAorIHByaW1pdGl2ZV9zY3JpcHRzID0gc2dtbHdoaWNoCisgCistYmluZGlyID0gJChwcmVmaXgpL2JpbgorIGJpbl9TQ1JJUFRTID0gaW5zdGFsbC1jYXRhbG9nICQocHJpbWl0aXZlX3NjcmlwdHMpCisgCisgRVhUUkFfRElTVCA9ICBpbnN0YWxsLWNhdGFsb2cuaW4gJChwcmltaXRpdmVfc2NyaXB0cykKKy0tLSAvZGV2L251bGwJMjAwMy0wOS0yMyAxOTo1OToyMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBzZ21sLWNvbW1vbi0wLjYuMy9iaW4vc2dtbHdoaWNoLmluCTIwMDQtMDYtMTcgMTE6NTE6MTEuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDcgQEAKKysjIS9iaW4vc2gKKysjIExvY2F0aW9uIG9mIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgY29uc2lzdGVuY3kgd2l0aCBub24tTFNCIHBsYXRmb3JtcworKyMgU2VuZCBhbnkgY29tbWVudHMgdG8gRXJpYyBCaXNjaG9mZiA8ZXJpY0BjYWxkZXJhLmRlPgorKyMgVGhpcyBwcm9ncmFtIGlzIHVuZGVyIEdQTCBsaWNlbnNlLiBTZWUgTElDRU5TRSBmaWxlIGZvciBkZXRhaWxzLgorKworK2VjaG8gIkBzeXNjb25mZGlyQC9zZ21sL3NnbWwuY29uZiIKKysjIFNpbXBsZSwgaXNuJ3QgaXQ/IDstKQorLS0tIC9kZXYvbnVsbAkyMDAzLTA5LTIzIDE5OjU5OjIyLjAwMDAwMDAwMCArMDIwMAorKysrIHNnbWwtY29tbW9uLTAuNi4zL2NvbmZpZy9zZ21sLmNvbmYuaW4JMjAwNC0wNi0xNyAxMTo1MToxMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMiBAQAorK1NHTUxfQkFTRV9ESVI9QGRhdGFkaXJAL3NnbWwKKytTR01MX0NBVEFMT0dTX0RJUj1Ac3lzY29uZmRpckAvc2dtbAorLS0tIHNnbWwtY29tbW9uLTAuNi4zL2NvbmZpZ3VyZS5pbn5hdXRvaGVsbC5wYXRjaAkyMDAxLTA1LTI1IDE4OjQwOjU0LjAwMDAwMDAwMCArMDIwMAorKysrIHNnbWwtY29tbW9uLTAuNi4zL2NvbmZpZ3VyZS5pbgkyMDA0LTA2LTE3IDExOjUzOjIyLjAwMDAwMDAwMCArMDIwMAorQEAgLTMsMTEgKzMsNiBAQAorIAorIEFNX0lOSVRfQVVUT01BS0Uoc2dtbC1jb21tb24sIDAuNi4zKQorIAorLWRvY2Rpcj0nJChwcmVmaXgpL2RvYycKKy1BQ19TVUJTVChkb2NkaXIpCistCistZG5sIENoZWNrcyBmb3IgcHJvZ3JhbXMuCistCisgZG5sIENoZWNrcyBmb3IgbGlicmFyaWVzLgorIAorIGRubCBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KK0BAIC0xOCw2ICsxMyw1IEBACisgCisgQUNfT1VUUFVUKE1ha2VmaWxlIFwKKyAgICAgICAgICAgYmluL01ha2VmaWxlIGJpbi9pbnN0YWxsLWNhdGFsb2cgXAorLSAgICAgICAgICBjb25maWcvTWFrZWZpbGUgXAorLSAgICAgICAgICBkb2MvTWFrZWZpbGUgZG9jL0hUTUwvTWFrZWZpbGUgZG9jL21hbi9NYWtlZmlsZSBkb2MvcmVmZW50cnkvTWFrZWZpbGUgXAorKyAgICAgICAgICBjb25maWcvTWFrZWZpbGUgY29uZmlnL3NnbWwuY29uZiBiaW4vc2dtbHdoaWNoIFwKKyAgICAgICAgICAgc2dtbC1pc28tZW50aXRpZXMvTWFrZWZpbGUgeG1sLWlzby1lbnRpdGllcy9NYWtlZmlsZSkKKworLS0tIHNnbWwtY29tbW9uLTAuNi4zL01ha2VmaWxlLmFtfm5vLWRvY3MJMjAwMS0wNS0yNSAxODoyMjowMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBzZ21sLWNvbW1vbi0wLjYuMy9NYWtlZmlsZS5hbQkyMDA0LTA2LTE3IDExOjQ5OjA5LjAwMDAwMDAwMCArMDIwMAorQEAgLTEsNCArMSw0IEBACistU1VCRElSUyA9IGJpbiBjb25maWcgZG9jIHNnbWwtaXNvLWVudGl0aWVzIHhtbC1pc28tZW50aXRpZXMKKytTVUJESVJTID0gYmluIGNvbmZpZyBzZ21sLWlzby1lbnRpdGllcyB4bWwtaXNvLWVudGl0aWVzCisgCisgc2dtbGNvZGlyID0gJChwcmVmaXgpL3NoYXJlL3NnbWwKKyBzZ21sY29fREFUQSA9IHhtbC5kY2wKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWwtY29tbW9uL3NnbWwtY29tbW9uLTAuNi4zL2xpY2Vuc2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbi0wLjYuMy9saWNlbnNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YjNmNTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbi0wLjYuMy9saWNlbnNlLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK1RoZSBDT1BZSU5HIGZpbGUgc2dtbC1jb21tb24gc2hpcHMgd2l0aCBpcyBqdXN0IGEgc3ltbGluayB0bworL3Vzci9zaGFyZS9hdXRvbWFrZS9DT1BZSU5HLCB3aGljaCBtZWFucyB3ZSBjYW4ndCB2ZXJpZnkgaXQKK3VzaW5nIG91ciBub3JtYWwgbWVhbnMuIFdlIHdvcmthcm91bmQgdGhpcyBieSB1c2luZyB0aGlzIHBhdGNoCit0byBjcmVhdGUgb3VyIG93biBsaWNlbnNlIGZpbGUuIAorCitVcHN0cmVhbSB3YXMgbm90aWZpZWQgYWJvdXQgdGhpcyBvbiAyMDExLTAxLTI0LiBXaGVuIHVwZ3JhZGluZwordGhpcyByZWNpcGUsIHRoaXMgc2hvdWxkIGJlIGZpeGVkIGFuZCB5b3Ugc2hvdWxkIHJlbW92ZSB0aGlzCitwYXRjaC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitkaWZmIC11ck4gc2dtbC1jb21tb24tMC42LjMub3JpZy9MSUNFTlNFLUdQTHYyIHNnbWwtY29tbW9uLTAuNi4zL0xJQ0VOU0UtR1BMdjIKKy0tLSBzZ21sLWNvbW1vbi0wLjYuMy5vcmlnL0xJQ0VOU0UtR1BMdjIJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKKysrKyBzZ21sLWNvbW1vbi0wLjYuMy9MSUNFTlNFLUdQTHYyCTIwMTEtMDEtMjggMTc6MDU6MTcuMjk5NTI4MDAxIC0wODAwCitAQCAtMCwwICsxLDEyIEBACisrQ29weXJpZ2h0IChDKSAxOTk3IENocmlzdGlhbiBTY2h3YXJ6IDxzY2h3YXJ6QGRlYmlhbi5vcmc+LgorK0NvcHlyaWdodCAoQykgMjAwMS0yMDA0IEFyZG8gdmFuIFJhbmdlbHJvb2lqIDxhcmRvQGRlYmlhbi5vcmc+CisrCisrVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgbWF5IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisrdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKytTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorK3ZlcnNpb24uCisrCisrVGhpcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgd2l0aG91dAorK2FueSB3YXJyYW50eTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIG1lcmNoYW50YWJpbGl0eSBvcgorK2ZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorK2ZvciBtb3JlIGRldGFpbHMuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbi1uYXRpdmVfMC42LjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbi1uYXRpdmVfMC42LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk3NTM2NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWwtY29tbW9uL3NnbWwtY29tbW9uLW5hdGl2ZV8wLjYuMy5iYgpAQCAtMCwwICsxLDcxIEBACitTVU1NQVJZID0gIkJhc2UgdXRpbGl0aWVzIGZvciB3b3JraW5nIHdpdGggU0dNTCBhbmQgWE1MIgorREVTQ1JJUFRJT04gPSAiVGhlIHNnbWwtY29tbW9uIHBhY2thZ2UgZ2F0aGVycyB2ZXJ5IGJhc2ljIFwKK3N0dWZmIG5lY2Vzc2FyeSB0byB3b3JrIHdpdGggU0dNTCBhbmQgWE1MLCBzdWNoIGFzIHhtbC5kY2wsIFwKK2EgU0dNTCBkZWNsYXJhdGlvbiBvZiBYTUw7IGlzby1lbnRpdGllcywgYSBsaXN0IG9mIHRoZSBiYXNpYyBcCitTR01MIElTTyBlbnRpdGllczsgYW5kIGluc3RhbGwtY2F0YWxvZywgYSBzY3JpcHQgdXNlZCB0byBcCithZGQgZW50cmllcyB0byAob3IgcmVtb3ZlIGVudHJpZXMgZnJvbSkgY2VudHJhbGl6ZWQgY2F0YWxvZ3MgXAord2hvc2UgZW50cmllcyBhcmUgcG9pbnRlcnMgdG8gU0dNTCBvcGVuIGNhdGFsb2dzLCBcCithcyBkZWZpbmVkIGJ5IE9BU0lTLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vZG9jYm9vay10b29scy8iCitMSUNFTlNFID0gIkdQTHYyKyIKKyMgU2VlIHRoZSBjb21tZW50cyBpbiBsaWNlbnNlLnBhdGNoIHdoZW4gdXBncmFkaW5nIHRoaXMgcmVjaXBlLgorIyBUaGlzIGlzIGludGVkZWQgdG8gYmUgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZC4KK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UtR1BMdjI7bWQ1PWFiOGE1MGFiZTg2ZGZjODU5ZTE0OGJhYWUwNDNjODliIgorU0VDVElPTiA9ICJiYXNlIgorCitQUiA9ICJyMSIKKworcmVxdWlyZSBzZ21sLWNvbW1vbl8ke1BWfS5iYgoraW5oZXJpdCBuYXRpdmUKKworUyA9ICIke1dPUktESVJ9L3NnbWwtY29tbW9uLSR7UFZ9IgorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gInNnbWxfY29tbW9uX25hdGl2ZV9tYW5nbGUiCitTU1RBVEVQT1NUSU5TVEZVTkNTICs9ICJzZ21sX2NvbW1vbl9zc3RhdGVfcG9zdGluc3QiCitDTEVBTkZVTkNTICs9ICJzZ21sX2NvbW1vbl9zc3RhdGVfY2xlYW4iCisKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBpbnN0YWxsLWNhdGFsb2cgc2NyaXB0IGNvbnRhaW5zIGhhcmQtY29kZWQgcmVmZXJlbmNlcyB0bworCSMge3N5c2NvbmZkaXJ9LiBDaGFuZ2UgaXQgdG8gJHtEfSR7c3lzY29uZmRpcn0uCisJc2VkIC1pIC1lICJzfCR7c3lzY29uZmRpcn0vc2dtbHwke0R9JHtzeXNjb25mZGlyfS9zZ21sfGciICR7RH0ke2JpbmRpcn0vaW5zdGFsbC1jYXRhbG9nCisKKwkke0R9JHtiaW5kaXJ9L2luc3RhbGwtY2F0YWxvZyBcCisJCS0tYWRkICR7RH0ke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1lbnQuY2F0IFwKKwkJJHtEfSR7ZGF0YWRpcn0vc2dtbC9zZ21sLWlzby1lbnRpdGllcy04ODc5LjE5ODYvY2F0YWxvZworCisJIyBUaGUgc2dtbC1kb2Nib29rLmNhdCB3aWxsIGJlIHJlZ2VuZXJhdGVkIGJ5IHNzdGF0ZV9wb3N0aW5zdAorCXJtIC1mICR7RH0ke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdAorfQorCitzZ21sX2NvbW1vbl9uYXRpdmVfbWFuZ2xlICgpIHsKKwkjIFJldmVydCBiYWNrIHRvICR7c3lzY29uZmRpcn0gcGF0aCBpbiBpbnN0YWxsLWNhdGFsb2cKKwlzZWQgLWkgLWUgInN8JHtEfSR7c3lzY29uZmRpcn0vc2dtbHwke3N5c2NvbmZkaXJ9L3NnbWx8ZyIgJHtTWVNST09UX0RFU1RESVJ9JHtTVEFHSU5HX0JJTkRJUn0vaW5zdGFsbC1jYXRhbG9nCisJIyBDaGFuZ2UgcGF0aCBmcm9tICR7RH0ke2RhdGFkaXJ9L3NnbWwvc2dtbC1pc28tZW50aXRpZXMtODg3OS4xOTg2L2NhdGFsb2cgdG8gJHtkYXRhZGlyfS9zZ21sL3NnbWwtaXNvLWVudGl0aWVzLTg4NzkuMTk4Ni9jYXRhbG9nIGluIHNnbWwtZW50LmNhdAorCXNlZCAtaSAtZSAic3wke0R9JHtkYXRhZGlyfS9zZ21sL3NnbWwtaXNvLWVudGl0aWVzLTg4NzkuMTk4Ni9jYXRhbG9nfCR7ZGF0YWRpcn0vc2dtbC9zZ21sLWlzby1lbnRpdGllcy04ODc5LjE5ODYvY2F0YWxvZ3xnIiAke1NZU1JPT1RfREVTVERJUn0ke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1lbnQuY2F0CisJIyBSZW1vdmUgJHtEfSBwYXRoIGZyb20gY2F0YWxvZyBmaWxlIGNyZWF0ZWQgYnkgaW5zdGFsbC1jYXRhbG9nIHNjcmlwdAorCXNlZCAtaSAtZSAic3wke0R9fHxnIiAke1NZU1JPT1RfREVTVERJUn0ke3N5c2NvbmZkaXJ9L3NnbWwvY2F0YWxvZworfQorCitzZ21sX2NvbW1vbl9zc3RhdGVfcG9zdGluc3QoKSB7CisJaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3QiIC1vICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXQorCXRoZW4KKwkJJHtiaW5kaXJ9L2luc3RhbGwtY2F0YWxvZyAtLWFkZCAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1lbnQuY2F0CisJCWlmIFsgLWUgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5iYWsgXTsgdGhlbgorCQkJZm9yIGNhdGFsb2cgaW4gYGF3ayAne3ByaW50ICQyfScgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5iYWtgOyBkbworCQkJCWlmIFsgISBgZ3JlcCAkY2F0YWxvZyAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCAxPiAvZGV2L251bGwgMj4mMWAgXTsgdGhlbgorCQkJCQkke2JpbmRpcn0vaW5zdGFsbC1jYXRhbG9nIFwKKwkJCQkJCS0tYWRkICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0ICRjYXRhbG9nCisJCQkJZmkKKwkJCWRvbmUKKwkJZmkKKwlmaQorfQorCitzZ21sX2NvbW1vbl9zc3RhdGVfY2xlYW4gKCkgeworCSMgRW5zdXJlIHRoYXQgdGhlIGNhdGFsb2cgZmlsZSBzZ21sLWRvY2Jvb2suY2F0IGlzIHByb3Blcmx5CisJIyB1cGRhdGVkIHdoZW4gdGhlIHBhY2thZ2UgaXMgcmVtb3ZlZCBmcm9tIHNzdGF0ZSBjYWNoZS4KKwlpZiBbIC1mICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IF07IHRoZW4KKwkJc2VkIC1pICcvXC9zZ21sXC9zZ21sLWVudC5jYXQvZCcgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQKKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb25fMC42LjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbl8wLjYuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDk4NjczCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb25fMC42LjMuYmIKQEAgLTAsMCArMSw2OCBAQAorU1VNTUFSWSA9ICJCYXNlIHV0aWxpdGllcyBmb3Igd29ya2luZyB3aXRoIFNHTUwgYW5kIFhNTCIKK0RFU0NSSVBUSU9OID0gIlRoZSBzZ21sLWNvbW1vbiBwYWNrYWdlIGdhdGhlcnMgdmVyeSBiYXNpYyBcCitzdHVmZiBuZWNlc3NhcnkgdG8gd29yayB3aXRoIFNHTUwgYW5kIFhNTCwgc3VjaCBhcyB4bWwuZGNsLCBcCithIFNHTUwgZGVjbGFyYXRpb24gb2YgWE1MOyBpc28tZW50aXRpZXMsIGEgbGlzdCBvZiB0aGUgYmFzaWMgXAorU0dNTCBJU08gZW50aXRpZXM7IGFuZCBpbnN0YWxsLWNhdGFsb2csIGEgc2NyaXB0IHVzZWQgdG8gXAorYWRkIGVudHJpZXMgdG8gKG9yIHJlbW92ZSBlbnRyaWVzIGZyb20pIGNlbnRyYWxpemVkIGNhdGFsb2dzIFwKK3dob3NlIGVudHJpZXMgYXJlIHBvaW50ZXJzIHRvIFNHTUwgb3BlbiBjYXRhbG9ncywgXAorYXMgZGVmaW5lZCBieSBPQVNJUy4iCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2RvY2Jvb2stdG9vbHMvIgorTElDRU5TRSA9ICJHUEx2MisiCisjIFNlZSB0aGUgY29tbWVudHMgaW4gbGljZW5zZS5wYXRjaCB3aGVuIHVwZ3JhZGluZyB0aGlzIHJlY2lwZS4KKyMgVGhpcyBpcyBpbnRlZGVkIHRvIGJlIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQuCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLUdQTHYyO21kNT1hYjhhNTBhYmU4NmRmYzg1OWUxNDhiYWFlMDQzYzg5YiIKK1NFQ1RJT04gPSAiYmFzZSIKKworUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiZnRwOi8vc291cmNlcy5yZWRoYXQuY29tL3B1Yi9kb2Nib29rLXRvb2xzL25ldy10cmlhbHMvU09VUkNFUy9zZ21sLWNvbW1vbi0ke1BWfS50Z3ogXAorICAgICAgICAgICBmaWxlOi8vYXV0b2hlbGwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGljZW5zZS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjEwM2M5ODI4ZjI0ODIwZGY4NmU1NWU3ODYyZTI4OTc0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdkYzQxOGMxZDM2MTEyM2ZmYzVlNDVkNjFmMWI5NzI1Nzk0MGE4ZWIzNWQwYmZiYmM0OTMzODFjYzViMWY5NTkiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK2RvX2NvbXBpbGVfYXBwZW5kKCkgeworCSMgaW5zdGFsbC1jYXRhbG9nIHNjcmlwdCBjb250YWlucyBoYXJkY29kZWQgcmVmZXJlbmNlcyB0byAvZXRjL3NnbWwKKwlzZWQgLWkgLWUgJ3N8XChbICJdXCtcKS9ldGMvc2dtbHxcMSR7c3lzY29uZmRpcn0vc2dtbHxnJyBiaW4vaW5zdGFsbC1jYXRhbG9nCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3NnbWwiCisKK3BrZ19wb3N0aW5zdF8ke1BOfSgpIHsKKyAgICBpZiBbICJ4JEQiID0gIngiIF07IHRoZW4KKwlpbnN0YWxsLWNhdGFsb2cgXAorCQktLWFkZCAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1lbnQuY2F0IFwKKwkJJHtkYXRhZGlyfS9zZ21sL3NnbWwtaXNvLWVudGl0aWVzLTg4NzkuMTk4Ni9jYXRhbG9nCisKKwlpbnN0YWxsLWNhdGFsb2cgXAorCQktLWFkZCAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCBcCisJCSR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWVudC5jYXQKKyAgICBlbHNlCisJaWYgISBncmVwIC1xICR7ZGF0YWRpcn0vc2dtbC9zZ21sLWlzby1lbnRpdGllcy04ODc5LjE5ODYvY2F0YWxvZyAkRCR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWVudC5jYXQ7IHRoZW4KKwkgICAgZWNobyAiQ0FUQUxPRyAke2RhdGFkaXJ9L3NnbWwvc2dtbC1pc28tZW50aXRpZXMtODg3OS4xOTg2L2NhdGFsb2ciID4+ICREJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdAorCWZpCisJaWYgISBncmVwIC1xICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWVudC5jYXQgJEQke3N5c2NvbmZkaXJ9L3NnbWwvY2F0YWxvZzsgdGhlbgorCSAgICBlY2hvICJDQVRBTE9HICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWVudC5jYXQiID4+ICREJHtzeXNjb25mZGlyfS9zZ21sL2NhdGFsb2cKKwlmaQorCisJaWYgISBncmVwIC1xICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWVudC5jYXQgJEQke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdDsgdGhlbgorCSAgICBlY2hvICJDQVRBTE9HICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWVudC5jYXQiID4+ICREJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQKKwlmaQorCWlmICEgZ3JlcCAtcSAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCAkRCR7c3lzY29uZmRpcn0vc2dtbC9jYXRhbG9nOyB0aGVuCisJICAgIGVjaG8gIkNBVEFMT0cgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQiID4+ICREJHtzeXNjb25mZGlyfS9zZ21sL2NhdGFsb2cKKwlmaQorICAgIGZpCit9CisKK3BrZ19wb3N0cm1fJHtQTn0oKSB7CisJaW5zdGFsbC1jYXRhbG9nIFwKKwkJLS1yZW1vdmUgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdCBcCisJCSR7ZGF0YWRpcn0vc2dtbC9zZ21sLWlzby1lbnRpdGllcy04ODc5LjE5ODYvY2F0YWxvZworCisJaW5zdGFsbC1jYXRhbG9nIFwKKwkJLS1yZW1vdmUgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQgXAorCQkke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1lbnQuY2F0Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sc3BsL3NnbWxzcGwtbmF0aXZlX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWxzcGwvc2dtbHNwbC1uYXRpdmVfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMzQ2MGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sc3BsL3NnbWxzcGwtbmF0aXZlX2dpdC5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIkEgc2ltcGxlIHBvc3QtcHJvY2Vzc29yIGZvciBTR01MUyBhbmQgTlNHTUxTIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL2dpdHBhbi9TR01MU3BtIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xODgxMDY2OWYxM2I4NzM0ODQ1OWU2MTFkMzFhYjc2MCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2dpdHBhbi9TR01MU3BtIFwKKyAgICAgICAgICAiCisKK1NSQ1JFViA9ICI3MTU5NWI5YjVlMzZiZmMwMDA0Njk5NWUwNTg5MjZiZDI3NzkzZmVmIgorCitQViA9ICIxLjErZ2l0JHtTUkNQVn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgbmF0aXZlIGNwYW4KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgbG4gLXMgc2dtbHNwbC5wbCAke0R9JHtiaW5kaXJ9L3NnbWxzcGwKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NxdWFzaGZzLXRvb2xzL3NxdWFzaGZzLXRvb2xzX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NxdWFzaGZzLXRvb2xzL3NxdWFzaGZzLXRvb2xzX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTdiMjgyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3F1YXNoZnMtdG9vbHMvc3F1YXNoZnMtdG9vbHNfZ2l0LmJiCkBAIC0wLDAgKzEsMzcgQEAKKyMgTm90ZSwgd2UgY2FuIHByb2JhYmx5IHJlbW92ZSB0aGUgbHptYSBvcHRpb24gYXMgaXQgaGFzIGJlIHJlcGxhY2VkIHdpdGggeHosCisjIGFuZCBJIGRvbid0IHRoaW5rIHRoZSBrZXJuZWwgc3VwcG9ydHMgaXQgYW55IG1vcmUuCitTVU1NQVJZID0gIlRvb2xzIGZvciBtYW5pcHVsYXRpbmcgU3F1YXNoRlMgZmlsZXN5c3RlbXMiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTC0yICYgUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8uLi9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8uLi8uLi83ekMudHh0O2JlZ2lubGluZT0xMjtlbmRsaW5lPTE2O21kNT0yMDU2Y2Q2ZDkxOWViYzM4MDc2MDIxNDNjNzQ0OWE3YyBcCisiCitERVBFTkRTID0gImF0dHIgemxpYiB4eiBsem8gbHo0IgorCitQViA9ICI0LjMrZ2l0ciR7U1JDUFZ9IgorU1JDUkVWID0gIjljMWRiNmQxM2E1MWEyZTAwOWYwMDI3ZWYzMzZjZTAzNjI0ZWFjMGQiCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vcGxvdWdoZXIvc3F1YXNoZnMtdG9vbHMuZ2l0O3Byb3RvY29sPWh0dHBzIFwKKyAgICAgICAgICAgaHR0cDovL2Rvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvc2V2ZW56aXAvbHptYTQ2NS50YXIuYnoyO25hbWU9bHptYSBcCisiCitTUkNfVVJJW2x6bWEubWQ1c3VtXSA9ICIyOWQ1ZmZkMDNhNWEzZTUxYWVmNmE3NGU5ZWFmYjc1OSIKK1NSQ19VUklbbHptYS5zaGEyNTZzdW1dID0gImM5MzVmZDA0ZGQ4ZTBlOGM2ODhhMzA3OGYzNjc1ZDY5OTY3OWE5MGJlODFjMTI2ODY4MzdlMDg4MGFhMGZhMWUiCisKK1MgPSAiJHtXT1JLRElSfS9naXQvc3F1YXNoZnMtdG9vbHMiCisKKyMgRVhUUkFfT0VNQUtFIGlzIHR5cGljYWxseTogLWUgTUFLRUZMQUdTPQorIyB0aGUgLWUgY2F1c2VzIHByb2JsZW1zIGFzIENGTEFHUyBpcyBtb2RpZmllZCBpbiB0aGUgTWFrZWZpbGUsIHNvCisjIHdlIHJlZGVmaW5lIEVYVFJBX09FTUFLRSBoZXJlCitFWFRSQV9PRU1BS0UgPSAiTUFLRUZMQUdTPSBMWk1BX1NVUFBPUlQ9MSBMWk1BX0RJUj0uLi8uLiBYWl9TVVBQT1JUPTEgTFpPX1NVUFBPUlQ9MSBMWjRfU1VQUE9SVD0xIgorCitkb19jb21waWxlKCkgeworCW9lX3J1bm1ha2UgbWtzcXVhc2hmcyB1bnNxdWFzaGZzCit9Citkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1IG1rc3F1YXNoZnMgJHtEfSR7c2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IHVuc3F1YXNoZnMgJHtEfSR7c2JpbmRpcn0vCit9CisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlLzAwMDEtQWRkLWxpbnV4LWFhcmNoNjQtYXJjaF9yZWdzLmgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlLzAwMDEtQWRkLWxpbnV4LWFhcmNoNjQtYXJjaF9yZWdzLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg1Mzk1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvMDAwMS1BZGQtbGludXgtYWFyY2g2NC1hcmNoX3JlZ3MuaC5wYXRjaApAQCAtMCwwICsxLDI1IEBACitGcm9tIGY4NTg1NDEzMWM4MjY1ZjJlYjU5YzcxNGRjZWE1YzRiM2RjMDliZWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW4ua29vaUBsaW5hcm8ub3JnPgorRGF0ZTogV2VkLCAxNSBBcHIgMjAxNSAxNDoyOTozNyArMDIwMAorU3ViamVjdDogW1BBVENIXSBBZGQgbGludXgvYWFyY2g2NC9hcmNoX3JlZ3MuaAorCitJdCBpcyBtaXNzaW5nIGZyb20gdGhlIHRhcmJhbGwsIGJ1dCBpdCBpcyBwcmVzZW50IGluIGdpdCBmb3IgdjQuMTAKKworU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuLmtvb2lAbGluYXJvLm9yZz4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGludXgvYWFyY2g2NC9hcmNoX3JlZ3MuaCB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpbnV4L2FhcmNoNjQvYXJjaF9yZWdzLmgKKworZGlmZiAtLWdpdCBhL2xpbnV4L2FhcmNoNjQvYXJjaF9yZWdzLmggYi9saW51eC9hYXJjaDY0L2FyY2hfcmVncy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uOWE1ZTMzZQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGludXgvYWFyY2g2NC9hcmNoX3JlZ3MuaAorQEAgLTAsMCArMSwyIEBACisrZXh0ZXJuIHVpbnQ2NF90ICpjb25zdCBhYXJjaDY0X3NwX3B0cjsKKytleHRlcm4gdWludDMyX3QgKmNvbnN0IGFybV9zcF9wdHI7CistLSAKKzEuOS4zCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvSW5jbHVkZS1saW51eC1pb2N0bC5oLWZvci1fSU9DXy1tYWNyb3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL0luY2x1ZGUtbGludXgtaW9jdGwuaC1mb3ItX0lPQ18tbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MzQ2YTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL0luY2x1ZGUtbGludXgtaW9jdGwuaC1mb3ItX0lPQ18tbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsNjkgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Avc3RyYWNlL2NvZGUvY2kvMzQ2MGRjNDg2ZDMzMzIzMTk5OGRlMGYxOTkxODIwNGFhY2VlOWFlMworCitFeHBlY3RlZCB0byBiZSByZWxlYXNlZCBvZmZpY2lhbGx5IGFzIHBhcnQgb2Ygc3RyYWNlIDQuMTEKKworU2lnbmVkLW9mZi1ieTogQW5kcmUgTWNDdXJkeSA8YXJtY2N1cmR5QGdtYWlsLmNvbT4KKworRnJvbSAzNDYwZGM0ODZkMzMzMjMxOTk4ZGUwZjE5OTE4MjA0YWFjZWU5YWUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmVsaXggSmFuZGEgPGZlbGl4LmphbmRhQHBvc3Rlby5kZT4KK0RhdGU6IFNhdCwgMjggTWFyIDIwMTUgMTg6NDA6MTMgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gSW5jbHVkZSA8bGludXgvaW9jdGwuaD4gZm9yIF9JT0NfKiBtYWNyb3MKKworRml4IGEgY29tcGlsYXRpb24gZmFpbHVyZSB3aXRoIG11c2wgbGliYy4KKworKiBldmRldi5jOiBJbmNsdWRlIDxsaW51eC9pb2N0bC5oPi4KKyogaW9jdGwuYzogSW5jbHVkZSA8bGludXgvaW9jdGwuaD4gaW5zdGVhZCBvZiA8YXNtL2lvY3RsLmg+LgorKiBpb2N0bHNvcnQuYzogTGlrZXdpc2UuCisKK1JlcG9ydGVkLWJ5OiBEaW1hIEtyYXNuZXIgPGRpbWFAZGltYWtyYXNuZXIuY29tPgorQWNrZWQtYnk6IE1pa2UgRnJ5c2luZ2VyIDx2YXBpZXJAZ2VudG9vLm9yZz4KKy0tLQorIGV2ZGV2LmMgICAgIHwgMiArKworIGlvY3RsLmMgICAgIHwgMiArLQorIGlvY3Rsc29ydC5jIHwgMiArLQorIDMgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZXZkZXYuYyBiL2V2ZGV2LmMKK2luZGV4IDlhNzQzMGQuLmUwNmY5YzEgMTAwNjQ0CistLS0gYS9ldmRldi5jCisrKysgYi9ldmRldi5jCitAQCAtMjgsNiArMjgsOCBAQAorIAorICNpbmNsdWRlICJkZWZzLmgiCisgCisrI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisrCisgI2lmZGVmIEhBVkVfTElOVVhfSU5QVVRfSAorICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorICNpbmNsdWRlICJ4bGF0L2V2ZGV2X2Ficy5oIgorZGlmZiAtLWdpdCBhL2lvY3RsLmMgYi9pb2N0bC5jCitpbmRleCA0NmY4MzM0Li5jNjdkMDQ4IDEwMDY0NAorLS0tIGEvaW9jdGwuYworKysrIGIvaW9jdGwuYworQEAgLTI5LDcgKzI5LDcgQEAKKyAgKi8KKyAKKyAjaW5jbHVkZSAiZGVmcy5oIgorLSNpbmNsdWRlIDxhc20vaW9jdGwuaD4KKysjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyAjaW5jbHVkZSAieGxhdC9pb2N0bF9kaXJzLmgiCisgCisgI2lmZGVmIEhBVkVfTElOVVhfSU5QVVRfSAorZGlmZiAtLWdpdCBhL2lvY3Rsc29ydC5jIGIvaW9jdGxzb3J0LmMKK2luZGV4IDMzMzU1NmMuLjljMzE2OTEgMTAwNjQ0CistLS0gYS9pb2N0bHNvcnQuYworKysrIGIvaW9jdGxzb3J0LmMKK0BAIC0zMyw3ICszMyw3IEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKy0jaW5jbHVkZSA8YXNtL2lvY3RsLmg+CisrI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisgCisgc3RydWN0IGlvY3RsZW50IHsKKyAJY29uc3QgY2hhciAqaW5mbzsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9JbmNsdWRlLXN5cy1zdGF0LmgtZm9yLVNfSS1tYWNyb3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL0luY2x1ZGUtc3lzLXN0YXQuaC1mb3ItU19JLW1hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjA3MmZlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9JbmNsdWRlLXN5cy1zdGF0LmgtZm9yLVNfSS1tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9zdHJhY2UvY29kZS9jaS9kMzRlMDBiMjkzOTQyYjEwMTJkZGM0OWVkM2FiMzc5YTMyMzM3NjExCisKK0V4cGVjdGVkIHRvIGJlIHJlbGVhc2VkIG9mZmljaWFsbHkgYXMgcGFydCBvZiBzdHJhY2UgNC4xMQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgorCitGcm9tIGQzNGUwMGIyOTM5NDJiMTAxMmRkYzQ5ZWQzYWIzNzlhMzIzMzc2MTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGZWxpeCBKYW5kYSA8ZmVsaXguamFuZGFAcG9zdGVvLmRlPgorRGF0ZTogU2F0LCAyOCBNYXIgMjAxNSAxODoyMTowOSArMDEwMAorU3ViamVjdDogW1BBVENIXSBJbmNsdWRlIDxzeXMvc3RhdC5oPiBmb3IgU19JKiBtYWNyb3MKKworRml4IGEgY29tcGlsYXRpb24gZmFpbHVyZSB3aXRoIG11c2wgbGliYy4KKworKiBta25vZC5jOiBJbmNsdWRlIDxzeXMvc3RhdC5oPi4KKyogcHJpbnRtb2RlLmM6IExpa2V3aXNlLgorCitSZXBvcnRlZC1ieTogRGltYSBLcmFzbmVyIDxkaW1hQGRpbWFrcmFzbmVyLmNvbT4KK0Fja2VkLWJ5OiBNaWtlIEZyeXNpbmdlciA8dmFwaWVyQGdlbnRvby5vcmc+CistLS0KKyBta25vZC5jICAgICB8IDEgKworIHByaW50bW9kZS5jIHwgMSArCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21rbm9kLmMgYi9ta25vZC5jCitpbmRleCAwN2U5YTQ1Li4xNDYzMjMyIDEwMDY0NAorLS0tIGEvbWtub2QuYworKysrIGIvbWtub2QuYworQEAgLTEsNiArMSw3IEBACisgI2luY2x1ZGUgImRlZnMuaCIKKyAKKyAjaW5jbHVkZSA8ZmNudGwuaD4KKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAKKyAjaWZkZWYgTUFKT1JfSU5fU1lTTUFDUk9TCisgIyBpbmNsdWRlIDxzeXMvc3lzbWFjcm9zLmg+CitkaWZmIC0tZ2l0IGEvcHJpbnRtb2RlLmMgYi9wcmludG1vZGUuYworaW5kZXggNGRmMWI5Zi4uYTcyMTkzNiAxMDA2NDQKKy0tLSBhL3ByaW50bW9kZS5jCisrKysgYi9wcmludG1vZGUuYworQEAgLTEsNiArMSw3IEBACisgI2luY2x1ZGUgImRlZnMuaCIKKyAKKyAjaW5jbHVkZSA8ZmNudGwuaD4KKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAKKyAjaW5jbHVkZSAieGxhdC9tb2RldHlwZXMuaCIKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9NYWtlZmlsZS1wdGVzdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvTWFrZWZpbGUtcHRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM2MDMwMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvTWFrZWZpbGUtcHRlc3QucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorc3RyYWNlOiBBZGQgcHRlc3QKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IEdhYnJpZWwgQmFyYnUgPGdhYnJpZWwuYmFyYnVAZW5lYS5jb20+CitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgIHwgIDIgKy0KKyB0ZXN0cy9NYWtlZmlsZS5hbSB8IDE4ICsrKysrKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBlNzM5NThjLi41ZjBkZmVlIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02LDcgKzYsNyBAQCBBQ19JTklUKFtzdHJhY2VdLAorIEFDX0NPTkZJR19TUkNESVIoW3N0cmFjZS5jXSkKKyBBQ19DT05GSUdfQVVYX0RJUihbLl0pCisgQUNfQ09ORklHX0hFQURFUlMoW2NvbmZpZy5oXSkKKy1BTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduIGRpc3QteHogbm8tZGlzdC1nemlwIHNpbGVudC1ydWxlcyBwYXJhbGxlbC10ZXN0c10pCisrQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbiBkaXN0LXh6IG5vLWRpc3QtZ3ppcCBzaWxlbnQtcnVsZXMgc2VyaWFsLXRlc3RzXSkKKyBBTV9NQUlOVEFJTkVSX01PREUKKyBBQ19DQU5PTklDQUxfSE9TVAorIAorZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IGZmNWUxMzYuLjk4NGJkYjYgMTAwNjQ0CistLS0gYS90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0xMDEsMyArMTAxLDIxIEBAIEVYVFJBX0RJU1QgPSBpbml0LnNoIHJ1bi5zaCBcCisgCSAgICAgJChURVNUUykKKyAKKyBDTEVBTkZJTEVTID0gJChURVNUUzo9LnRtcCkKKysKKytidWlsZHRlc3QtVEVTVFM6ICQoY2hlY2tfUFJPR1JBTVMpICQoVEVTVFMpCisrCisraW5zdGFsbC1wdGVzdDoKKysJaW5zdGFsbCAkKEJVSUxERElSKS9zdHJhY2UgJChERVNURElSKQorKwlpbnN0YWxsICIkKHNyY2RpcikvLi4iL3N0cmFjZS1sb2ctbWVyZ2UgJChERVNURElSKQorKwlpbnN0YWxsIC1kICQoREVTVERJUikvJChURVNURElSKQorKwljcCAkKEJVSUxERElSKS8kKFRFU1RESVIpL01ha2VmaWxlICQoREVTVERJUikvJChURVNURElSKQorKwlzZWQgLWkgLWUgJ3MvXk1ha2VmaWxlOi9fTWFrZWZpbGU6LycgJChERVNURElSKS8kKFRFU1RESVIpL01ha2VmaWxlCisrCXNlZCAtaSAtZSAncy9iYXNoL3NoLycgJChERVNURElSKS8kKFRFU1RESVIpL01ha2VmaWxlCisrCWZvciBmaWxlIGluICQoY2hlY2tfUFJPR1JBTVMpOyBkbyBcCisrCQlpbnN0YWxsICQoQlVJTERESVIpLyQoVEVTVERJUikvJCRmaWxlICQoREVTVERJUikvJChURVNURElSKTsgXAorKwlkb25lCisrCWZvciBmaWxlIGluICQoRVhUUkFfRElTVCk7IGRvIFwKKysJCWluc3RhbGwgJChzcmNkaXIpLyQkZmlsZSAkKERFU1RESVIpLyQoVEVTVERJUik7IFwKKysJCXNlZCAtaSAtZSAncy8kJHtzcmNkaXI9Ln0vLi9nJyAkKERFU1RESVIpLyQoVEVTVERJUikvJCRmaWxlOyBcCisrCWRvbmUKKysJZm9yIGkgaW4gbmV0IG5ldC1mZCBzY21fcmlnaHRzLWZkIHNpZ2FjdGlvbjsgZG8gc2VkIC1pIC1lICdzLyQkc3JjZGlyLy4vZycgJChERVNURElSKS8kKFRFU1RESVIpLyQkaS50ZXN0OyBkb25lCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvZ2l0LXZlcnNpb24tZ2VuIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9naXQtdmVyc2lvbi1nZW4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGZlZTc0ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvZ2l0LXZlcnNpb24tZ2VuCkBAIC0wLDAgKzEsMjI1IEBACisjIS9iaW4vc2gKKyMgUHJpbnQgYSB2ZXJzaW9uIHN0cmluZy4KK3NjcmlwdHZlcnNpb249MjAxMi0xMi0zMS4yMzsgIyBVVEMKKworIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgVGhpcyBzY3JpcHQgaXMgZGVyaXZlZCBmcm9tIEdJVC1WRVJTSU9OLUdFTiBmcm9tIEdJVDogaHR0cDovL2dpdC5vci5jei8uCisjIEl0IG1heSBiZSBydW4gdHdvIHdheXM6CisjIC0gZnJvbSBhIGdpdCByZXBvc2l0b3J5IGluIHdoaWNoIHRoZSAiZ2l0IGRlc2NyaWJlIiBjb21tYW5kIGJlbG93CisjICAgcHJvZHVjZXMgdXNlZnVsIG91dHB1dCAodGh1cyByZXF1aXJpbmcgYXQgbGVhc3Qgb25lIHNpZ25lZCB0YWcpCisjIC0gZnJvbSBhIG5vbi1naXQtcmVwbyBkaXJlY3RvcnkgY29udGFpbmluZyBhIC50YXJiYWxsLXZlcnNpb24gZmlsZSwgd2hpY2gKKyMgICBwcmVzdW1lcyB0aGlzIHNjcmlwdCBpcyBpbnZva2VkIGxpa2UgIi4vZ2l0LXZlcnNpb24tZ2VuIC50YXJiYWxsLXZlcnNpb24iLgorCisjIEluIG9yZGVyIHRvIHVzZSBpbnRyYS12ZXJzaW9uIHN0cmluZ3MgaW4geW91ciBwcm9qZWN0LCB5b3Ugd2lsbCBuZWVkIHR3bworIyBzZXBhcmF0ZSBnZW5lcmF0ZWQgdmVyc2lvbiBzdHJpbmcgZmlsZXM6CisjCisjIC50YXJiYWxsLXZlcnNpb24gLSBwcmVzZW50IG9ubHkgaW4gYSBkaXN0cmlidXRpb24gdGFyYmFsbCwgYW5kIG5vdCBpbgorIyAgIGEgY2hlY2tlZC1vdXQgcmVwb3NpdG9yeS4gIENyZWF0ZWQgd2l0aCBjb250ZW50cyB0aGF0IHdlcmUgbGVhcm5lZCBhdAorIyAgIHRoZSBsYXN0IHRpbWUgYXV0b2NvbmYgd2FzIHJ1biwgYW5kIHVzZWQgYnkgZ2l0LXZlcnNpb24tZ2VuLiAgTXVzdCBub3QKKyMgICBiZSBwcmVzZW50IGluIGVpdGhlciAkKHNyY2Rpcikgb3IgJChidWlsZGRpcikgZm9yIGdpdC12ZXJzaW9uLWdlbiB0bworIyAgIGdpdmUgYWNjdXJhdGUgYW5zd2VycyBkdXJpbmcgbm9ybWFsIGRldmVsb3BtZW50IHdpdGggYSBjaGVja2VkIG91dCB0cmVlLAorIyAgIGJ1dCBtdXN0IGJlIHByZXNlbnQgaW4gYSB0YXJiYWxsIHdoZW4gdGhlcmUgaXMgbm8gdmVyc2lvbiBjb250cm9sIHN5c3RlbS4KKyMgICBUaGVyZWZvcmUsIGl0IGNhbm5vdCBiZSB1c2VkIGluIGFueSBkZXBlbmRlbmNpZXMuICBHTlVtYWtlZmlsZSBoYXMKKyMgICBob29rcyB0byBmb3JjZSBhIHJlY29uZmlndXJlIGF0IGRpc3RyaWJ1dGlvbiB0aW1lIHRvIGdldCB0aGUgdmFsdWUKKyMgICBjb3JyZWN0LCB3aXRob3V0IHBlbmFsaXppbmcgbm9ybWFsIGRldmVsb3BtZW50IHdpdGggZXh0cmEgcmVjb25maWd1cmVzLgorIworIyAudmVyc2lvbiAtIHByZXNlbnQgaW4gYSBjaGVja2VkLW91dCByZXBvc2l0b3J5IGFuZCBpbiBhIGRpc3RyaWJ1dGlvbgorIyAgIHRhcmJhbGwuICBVc2FibGUgaW4gZGVwZW5kZW5jaWVzLCBwYXJ0aWN1bGFybHkgZm9yIGZpbGVzIHRoYXQgZG9uJ3QKKyMgICB3YW50IHRvIGRlcGVuZCBvbiBjb25maWcuaCBidXQgZG8gd2FudCB0byB0cmFjayB2ZXJzaW9uIGNoYW5nZXMuCisjICAgRGVsZXRlIHRoaXMgZmlsZSBwcmlvciB0byBhbnkgYXV0b2NvbmYgcnVuIHdoZXJlIHlvdSB3YW50IHRvIHJlYnVpbGQKKyMgICBmaWxlcyB0byBwaWNrIHVwIGEgdmVyc2lvbiBzdHJpbmcgY2hhbmdlOyBhbmQgbGVhdmUgaXQgc3RhbGUgdG8KKyMgICBtaW5pbWl6ZSByZWJ1aWxkIHRpbWUgYWZ0ZXIgdW5yZWxhdGVkIGNoYW5nZXMgdG8gY29uZmlndXJlIHNvdXJjZXMuCisjCisjIEFzIHdpdGggYW55IGdlbmVyYXRlZCBmaWxlIGluIGEgVkMnZCBkaXJlY3RvcnksIHlvdSBzaG91bGQgYWRkCisjIC8udmVyc2lvbiB0byAuZ2l0aWdub3JlLCBzbyB0aGF0IHlvdSBkb24ndCBhY2NpZGVudGFsbHkgY29tbWl0IGl0LgorIyAudGFyYmFsbC12ZXJzaW9uIGlzIG5ldmVyIGdlbmVyYXRlZCBpbiBhIFZDJ2QgZGlyZWN0b3J5LCBzbyBuZWVkbid0CisjIGJlIGxpc3RlZCB0aGVyZS4KKyMKKyMgVXNlIHRoZSBmb2xsb3dpbmcgbGluZSBpbiB5b3VyIGNvbmZpZ3VyZS5hYywgc28gdGhhdCAkKFZFUlNJT04pIHdpbGwKKyMgYXV0b21hdGljYWxseSBiZSB1cC10by1kYXRlIGVhY2ggdGltZSBjb25maWd1cmUgaXMgcnVuIChhbmQgbm90ZSB0aGF0CisjIHNpbmNlIGNvbmZpZ3VyZS5hYyBubyBsb25nZXIgaW5jbHVkZXMgYSB2ZXJzaW9uIHN0cmluZywgTWFrZWZpbGUgcnVsZXMKKyMgc2hvdWxkIG5vdCBkZXBlbmQgb24gY29uZmlndXJlLmFjIGZvciB2ZXJzaW9uIHVwZGF0ZXMpLgorIworIyBBQ19JTklUKFtHTlUgcHJvamVjdF0sCisjICAgICAgICAgbTRfZXN5c2NtZChbYnVpbGQtYXV4L2dpdC12ZXJzaW9uLWdlbiAudGFyYmFsbC12ZXJzaW9uXSksCisjICAgICAgICAgW2J1Zy1wcm9qZWN0QGV4YW1wbGVdKQorIworIyBUaGVuIHVzZSB0aGUgZm9sbG93aW5nIGxpbmVzIGluIHlvdXIgTWFrZWZpbGUuYW0sIHNvIHRoYXQgLnZlcnNpb24KKyMgd2lsbCBiZSBwcmVzZW50IGZvciBkZXBlbmRlbmNpZXMsIGFuZCBzbyB0aGF0IC52ZXJzaW9uIGFuZAorIyAudGFyYmFsbC12ZXJzaW9uIHdpbGwgZXhpc3QgaW4gZGlzdHJpYnV0aW9uIHRhcmJhbGxzLgorIworIyBFWFRSQV9ESVNUID0gJCh0b3Bfc3JjZGlyKS8udmVyc2lvbgorIyBCVUlMVF9TT1VSQ0VTID0gJCh0b3Bfc3JjZGlyKS8udmVyc2lvbgorIyAkKHRvcF9zcmNkaXIpLy52ZXJzaW9uOgorIwllY2hvICQoVkVSU0lPTikgPiAkQC10ICYmIG12ICRALXQgJEAKKyMgZGlzdC1ob29rOgorIwllY2hvICQoVkVSU0lPTikgPiAkKGRpc3RkaXIpLy50YXJiYWxsLXZlcnNpb24KKworCittZT0kMAorCit2ZXJzaW9uPSJnaXQtdmVyc2lvbi1nZW4gJHNjcmlwdHZlcnNpb24KKworQ29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitUaGVyZSBpcyBOTyB3YXJyYW50eS4gIFlvdSBtYXkgcmVkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtYXR0ZXJzLCBzZWUgdGhlIGZpbGVzIG5hbWVkIENPUFlJTkcuIgorCit1c2FnZT0iXAorVXNhZ2U6ICRtZSBbT1BUSU9OXS4uLiBcJHNyY2Rpci8udGFyYmFsbC12ZXJzaW9uIFtUQUctTk9STUFMSVpBVElPTi1TRUQtU0NSSVBUXQorUHJpbnQgYSB2ZXJzaW9uIHN0cmluZy4KKworT3B0aW9uczoKKworICAgLS1wcmVmaXggICAgICAgICAgIHByZWZpeCBvZiBnaXQgdGFncyAoZGVmYXVsdCAndicpCisgICAtLWZhbGxiYWNrICAgICAgICAgZmFsbGJhY2sgdmVyc2lvbiB0byB1c2UgaWYgXCJnaXQgLS12ZXJzaW9uXCIgZmFpbHMKKworICAgLS1oZWxwICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0CisgICAtLXZlcnNpb24gICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKworUnVubmluZyB3aXRob3V0IGFyZ3VtZW50cyB3aWxsIHN1ZmZpY2UgaW4gbW9zdCBjYXNlcy4iCisKK3ByZWZpeD12CitmYWxsYmFjaz0KKword2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC0taGVscCkgZWNobyAiJHVzYWdlIjsgZXhpdCAwOzsKKyAgICAtLXZlcnNpb24pIGVjaG8gIiR2ZXJzaW9uIjsgZXhpdCAwOzsKKyAgICAtLXByZWZpeCkgc2hpZnQ7IHByZWZpeD0iJDEiOzsKKyAgICAtLWZhbGxiYWNrKSBzaGlmdDsgZmFsbGJhY2s9IiQxIjs7CisgICAgLSopCisgICAgICBlY2hvICIkMDogVW5rbm93biBvcHRpb24gJyQxJy4iID4mMgorICAgICAgZWNobyAiJDA6IFRyeSAnLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMgorICAgICAgZXhpdCAxOzsKKyAgICAqKQorICAgICAgaWYgdGVzdCAieCR0YXJiYWxsX3ZlcnNpb25fZmlsZSIgPSB4OyB0aGVuCisgICAgICAgIHRhcmJhbGxfdmVyc2lvbl9maWxlPSIkMSIKKyAgICAgIGVsaWYgdGVzdCAieCR0YWdfc2VkX3NjcmlwdCIgPSB4OyB0aGVuCisgICAgICAgIHRhZ19zZWRfc2NyaXB0PSIkMSIKKyAgICAgIGVsc2UKKyAgICAgICAgZWNobyAiJDA6IGV4dHJhIG5vbi1vcHRpb24gYXJndW1lbnQgJyQxJy4iID4mMgorICAgICAgICBleGl0IDEKKyAgICAgIGZpOzsKKyAgZXNhYworICBzaGlmdAorZG9uZQorCitpZiB0ZXN0ICJ4JHRhcmJhbGxfdmVyc2lvbl9maWxlIiA9IHg7IHRoZW4KKyAgICBlY2hvICIkdXNhZ2UiCisgICAgZXhpdCAxCitmaQorCit0YWdfc2VkX3NjcmlwdD0iJHt0YWdfc2VkX3NjcmlwdDotcy94L3gvfSIKKworbmw9JworJworCisjIEF2b2lkIG1lZGRsaW5nIGJ5IGVudmlyb25tZW50IHZhcmlhYmxlIG9mIHRoZSBzYW1lIG5hbWUuCit2PQordl9mcm9tX2dpdD0KKworIyBGaXJzdCBzZWUgaWYgdGhlcmUgaXMgYSB0YXJiYWxsLW9ubHkgdmVyc2lvbiBmaWxlLgorIyB0aGVuIHRyeSAiZ2l0IGRlc2NyaWJlIiwgdGhlbiBkZWZhdWx0LgoraWYgdGVzdCAtZiAkdGFyYmFsbF92ZXJzaW9uX2ZpbGUKK3RoZW4KKyAgICB2PWBjYXQgJHRhcmJhbGxfdmVyc2lvbl9maWxlYCB8fCB2PQorICAgIGNhc2UgJHYgaW4KKyAgICAgICAgKiRubCopIHY9IDs7ICMgcmVqZWN0IG11bHRpLWxpbmUgb3V0cHV0CisgICAgICAgIFswLTldKikgOzsKKyAgICAgICAgKikgdj0gOzsKKyAgICBlc2FjCisgICAgdGVzdCAieCR2IiA9IHggXAorICAgICAgICAmJiBlY2hvICIkMDogV0FSTklORzogJHRhcmJhbGxfdmVyc2lvbl9maWxlIGlzIG1pc3Npbmcgb3IgZGFtYWdlZCIgMT4mMgorZmkKKworaWYgdGVzdCAieCR2IiAhPSB4Cit0aGVuCisgICAgOiAjIHVzZSAkdgorIyBPdGhlcndpc2UsIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBnaXQgY29tbWl0IGludm9sdmluZyB0aGUgd29ya2luZworIyBkaXJlY3RvcnksIGFuZCAiZ2l0IGRlc2NyaWJlIiBvdXRwdXQgbG9va3Mgc2Vuc2libGUsIHVzZSB0aGF0IHRvCisjIGRlcml2ZSBhIHZlcnNpb24gc3RyaW5nLgorZWxpZiB0ZXN0ICJgZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6eCAuIDI+JjFgIiA9IHggXAorICAgICYmIHY9YGdpdCBkZXNjcmliZSAtLWFiYnJldj00IC0tbWF0Y2g9IiRwcmVmaXgqIiBIRUFEIDI+L2Rldi9udWxsIFwKKyAgICAgICAgICB8fCBnaXQgZGVzY3JpYmUgLS1hYmJyZXY9NCBIRUFEIDI+L2Rldi9udWxsYCBcCisgICAgJiYgdj1gcHJpbnRmICclc1xuJyAiJHYiIHwgc2VkICIkdGFnX3NlZF9zY3JpcHQiYCBcCisgICAgJiYgY2FzZSAkdiBpbgorICAgICAgICAgJHByZWZpeFswLTldKikgOzsKKyAgICAgICAgICopIChleGl0IDEpIDs7CisgICAgICAgZXNhYwordGhlbgorICAgICMgSXMgdGhpcyBhIG5ldyBnaXQgdGhhdCBsaXN0cyBudW1iZXIgb2YgY29tbWl0cyBzaW5jZSB0aGUgbGFzdAorICAgICMgdGFnIG9yIHRoZSBwcmV2aW91cyBvbGRlciB2ZXJzaW9uIHRoYXQgZGlkIG5vdD8KKyAgICAjICAgTmV3ZXI6IHY2LjEwLTc3LWcwZjhmYWViCisgICAgIyAgIE9sZGVyOiB2Ni4xMC1nMGY4ZmFlYgorICAgIGNhc2UgJHYgaW4KKyAgICAgICAgKi0qLSopIDogZ2l0IGRlc2NyaWJlIGlzIG9rYXkgdGhyZWUgcGFydCBmbGF2b3IgOzsKKyAgICAgICAgKi0qKQorICAgICAgICAgICAgOiBnaXQgZGVzY3JpYmUgaXMgb2xkZXIgdHdvIHBhcnQgZmxhdm9yCisgICAgICAgICAgICAjIFJlY3JlYXRlIHRoZSBudW1iZXIgb2YgY29tbWl0cyBhbmQgcmV3cml0ZSBzdWNoIHRoYXQgdGhlCisgICAgICAgICAgICAjIHJlc3VsdCBpcyB0aGUgc2FtZSBhcyBpZiB3ZSB3ZXJlIHVzaW5nIHRoZSBuZXdlciB2ZXJzaW9uCisgICAgICAgICAgICAjIG9mIGdpdCBkZXNjcmliZS4KKyAgICAgICAgICAgIHZ0YWc9YGVjaG8gIiR2IiB8IHNlZCAncy8tLiovLydgCisgICAgICAgICAgICBjb21taXRfbGlzdD1gZ2l0IHJldi1saXN0ICIkdnRhZyIuLkhFQUQgMj4vZGV2L251bGxgIFwKKyAgICAgICAgICAgICAgICB8fCB7IGNvbW1pdF9saXN0PWZhaWxlZDsKKyAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiQwOiBXQVJOSU5HOiBnaXQgcmV2LWxpc3QgZmFpbGVkIiAxPiYyOyB9CisgICAgICAgICAgICBudW1jb21taXRzPWBlY2hvICIkY29tbWl0X2xpc3QiIHwgd2MgLWxgCisgICAgICAgICAgICB2PWBlY2hvICIkdiIgfCBzZWQgInMvXCguKlwpLVwoLipcKS9cMS0kbnVtY29tbWl0cy1cMi8iYDsKKyAgICAgICAgICAgIHRlc3QgIiRjb21taXRfbGlzdCIgPSBmYWlsZWQgJiYgdj1VTktOT1dOCisgICAgICAgICAgICA7OworICAgIGVzYWMKKworICAgICMgQ2hhbmdlIHRoZSBmaXJzdCAnLScgdG8gYSAnLicsIHNvIHZlcnNpb24tY29tcGFyaW5nIHRvb2xzIHdvcmsgcHJvcGVybHkuCisgICAgIyBSZW1vdmUgdGhlICJnIiBpbiBnaXQgZGVzY3JpYmUncyBvdXRwdXQgc3RyaW5nLCB0byBzYXZlIGEgYnl0ZS4KKyAgICB2PWBlY2hvICIkdiIgfCBzZWQgJ3MvLS8uMC4vO3MvXCguKlwpLWcvXDEtLydgOworICAgIHZfZnJvbV9naXQ9MQorZWxpZiB0ZXN0ICJ4JGZhbGxiYWNrIiA9IHggfHwgZ2l0IC0tdmVyc2lvbiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICB2PVVOS05PV04KK2Vsc2UKKyAgICB2PSRmYWxsYmFjaworZmkKKwordj1gZWNobyAiJHYiIHxzZWQgInMvXiRwcmVmaXgvLyJgCisKKyMgVGVzdCB3aGV0aGVyIHRvIGFwcGVuZCB0aGUgIi1kaXJ0eSIgc3VmZml4IG9ubHkgaWYgdGhlIHZlcnNpb24KKyMgc3RyaW5nIHdlJ3JlIHVzaW5nIGNhbWUgZnJvbSBnaXQuICBJLmUuLCBza2lwIHRoZSB0ZXN0IGlmIGl0J3MgIlVOS05PV04iCisjIG9yIGlmIGl0IGNhbWUgZnJvbSAudGFyYmFsbC12ZXJzaW9uLgoraWYgdGVzdCAieCR2X2Zyb21fZ2l0IiAhPSB4OyB0aGVuCisgICMgRG9uJ3QgZGVjbGFyZSBhIHZlcnNpb24gImRpcnR5IiBtZXJlbHkgYmVjYXVzZSBhIHRpbWUgc3RhbXAgaGFzIGNoYW5nZWQuCisgIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoID4gL2Rldi9udWxsIDI+JjEKKworICBkaXJ0eT1gZXhlYyAyPi9kZXYvbnVsbDtnaXQgZGlmZi1pbmRleCAtLW5hbWUtb25seSBIRUFEYCB8fCBkaXJ0eT0KKyAgY2FzZSAiJGRpcnR5IiBpbgorICAgICAgJycpIDs7CisgICAgICAqKSAjIEFwcGVuZCB0aGUgc3VmZml4IG9ubHkgaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHkuCisgICAgICAgICAgY2FzZSAkdiBpbgorICAgICAgICAgICAgKi1kaXJ0eSkgOzsKKyAgICAgICAgICAgICopIHY9IiR2LWRpcnR5IiA7OworICAgICAgICAgIGVzYWMgOzsKKyAgZXNhYworZmkKKworIyBPbWl0IHRoZSB0cmFpbGluZyBuZXdsaW5lLCBzbyB0aGF0IG00X2VzeXNjbWQgY2FuIHVzZSB0aGUgcmVzdWx0IGRpcmVjdGx5LgorZWNobyAiJHYiIHwgdHIgLWQgIiRubCIKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMzNjZjkyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9ydW4tcHRlc3QKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vc2gKK21ha2UgLUMgdGVzdHMgLWsgcnVudGVzdC1URVNUUwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9zdHJhY2UtYWRkLWNvbmZpZ3VyZS1vcHRpb25zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9zdHJhY2UtYWRkLWNvbmZpZ3VyZS1vcHRpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0OGU0YjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL3N0cmFjZS1hZGQtY29uZmlndXJlLW9wdGlvbnMucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorQWRkIG9wdGlvbnMgImFpbyIgYW5kICJhY2wiIHRvIGVuYWJsZS9kaXNhYmxlIGxpYmFpbyBhbmQgYWNsIHN1cHBvcnQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgICAyNiArKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAyNiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGU3Mzk1OGMuLjkwOTkzNzAgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI3MCw2ICsyNzAsMTggQEAgQUNfQ0hFQ0tfSEVBREVSUyhtNF9ub3JtYWxpemUoWworIAlzeXMvdmZzLmgKKyAJc3lzL3hhdHRyLmgKKyBdKSkKKysKKytBQ19BUkdfRU5BQkxFKFthY2xdLAorKwlbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWFjbF0sIFt0dXJuIG9uIGFjbCBzdXBwb3J0XSldLAorKwlbY2FzZSAkZW5hYmxldmFsIGluCisrCXllcykKKysJCUFDX0NIRUNLX0hFQURFUlMoW3N5cy9hY2wuaF0pCisrCQk7OworKwlubykgIDs7CisrCSopICAgQUNfTVNHX0VSUk9SKFtiYWQgdmFsdWUgJGVuYWJsZXZhbCBmb3IgYWlvIG9wdGlvbl0pIDs7CisrCWVzYWNdCisrKQorKworIEFDX0NIRUNLX0hFQURFUlMoW2xpbnV4L2ljbXAuaCBsaW51eC9pbjYuaCBsaW51eC9uZXRsaW5rLmggbGludXgvaWZfcGFja2V0LmhdLAorICAgICAgICAgICAgICAgICAgW10sIFtdLCBbI2luY2x1ZGUgPHN0ZGRlZi5oPgorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CitAQCAtNzQ1LDYgKzc1NywyMCBAQCBpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbF9kbGFkZHIiID0geHllczsgdGhlbgorIGZpCisgQUNfU1VCU1QoZGxfTElCUykKKyAKKytBQ19BUkdfRU5BQkxFKFthaW9dLAorKwlbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWFpb10sIFt0dXJuIG9uIGxpYmFpbyBzdXBwb3J0XSldLAorKwlbY2FzZSAkZW5hYmxldmFsIGluCisrCXllcykKKysJQUNfQ0hFQ0tfSEVBREVSUyhbbGliYWlvLmhdLCBbCisrCQlBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3QgaW9jYi51LmMuZmxhZ3NdLCwsIFsjaW5jbHVkZSA8bGliYWlvLmg+XSkKKysJCUFDX0NIRUNLX0RFQ0xTKFtJT19DTURfUFdSSVRFLCBJT19DTURfUFdSSVRFVl0sLCwgWyNpbmNsdWRlIDxsaWJhaW8uaD5dKQorKwldKQorKwk7OworKwlubykgIDs7CisrCSopICAgQUNfTVNHX0VSUk9SKFtiYWQgdmFsdWUgJGVuYWJsZXZhbCBmb3IgYWlvIG9wdGlvbl0pIDs7CisrCWVzYWNdCisrKQorKworIEFDX1BBVEhfUFJPRyhbUEVSTF0sIFtwZXJsXSkKKyAKKyBkbmwgc3RhY2sgdHJhY2Ugd2l0aCBsaWJ1bndpbmQKKy0tCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlXzQuMTAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlXzQuMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBiN2UzZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2VfNC4xMC5iYgpAQCAtMCwwICsxLDUyIEBACitTVU1NQVJZID0gIlN5c3RlbSBjYWxsIHRyYWNpbmcgdG9vbCIKK0hPTUVQQUdFID0gImh0dHA6Ly9zdHJhY2Uuc291cmNlZm9yZ2UubmV0IgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xMjQ1MDBjMjFlODU2ZjA5MTJkZjI5Mjk1YmExMDRjNyIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vc3RyYWNlL3N0cmFjZS0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1BZGQtbGludXgtYWFyY2g2NC1hcmNoX3JlZ3MuaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9naXQtdmVyc2lvbi1nZW4gXAorICAgICAgICAgICBmaWxlOi8vc3RyYWNlLWFkZC1jb25maWd1cmUtb3B0aW9ucy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS1wdGVzdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vSW5jbHVkZS1zeXMtc3RhdC5oLWZvci1TX0ktbWFjcm9zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0luY2x1ZGUtbGludXgtaW9jdGwuaC1mb3ItX0lPQ18tbWFjcm9zLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxMDdhNWJlNDU1NDkzODYxMTg5ZTliNTdhM2E1MTkxMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlNjE4MGQ4NjZlZjllNzY1ODZiOTZlMmVjZTJiZmVlYjNhYTIzZjVjYzg4MTUzZjc2ZTljYWVkZDY1ZTQwZWUyIgorCitpbmhlcml0IGF1dG90b29scyBwdGVzdCBibHVldG9vdGgKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJtYWtlIGNvcmV1dGlscyBncmVwIGdhd2siCisKK1BBQ0tBR0VDT05GSUdfY2xhc3MtdGFyZ2V0ID8/PSAiXAorICAgIGxpYmFpbyAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2FjbCcsICdhY2wnLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsICdibHVleicsICcnLCBkKX0gXAorIgorCitQQUNLQUdFQ09ORklHW2xpYmFpb10gPSAiLS1lbmFibGUtYWlvLC0tZGlzYWJsZS1haW8sbGliYWlvIgorUEFDS0FHRUNPTkZJR1thY2xdID0gIi0tZW5hYmxlLWFjbCwtLWRpc2FibGUtYWNsLGFjbCIKK1BBQ0tBR0VDT05GSUdbbGlidW53aW5kXSA9ICItLXdpdGgtbGlidW53aW5kLCAtLXdpdGhvdXQtbGlidW53aW5kLCBsaWJ1bndpbmQiCitQQUNLQUdFQ09ORklHW2JsdWV6XSA9ICJhY19jdl9oZWFkZXJfYmx1ZXRvb3RoX2JsdWV0b290aF9oPXllcyxhY19jdl9oZWFkZXJfYmx1ZXRvb3RoX2JsdWV0b290aF9oPW5vLCR7QkxVRVp9IgorCitURVNURElSID0gInRlc3RzIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwljcCAke1dPUktESVJ9L2dpdC12ZXJzaW9uLWdlbiAke1N9Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgV2UgZG9uJ3Qgc2hpcCBzdHJhY2UtZ3JhcGggaGVyZSBiZWNhdXNlIGl0IG5lZWRzIHBlcmwKKwlybSAke0R9JHtiaW5kaXJ9L3N0cmFjZS1ncmFwaAorfQorCitkb19jb21waWxlX3B0ZXN0KCkgeworCW9lX3J1bm1ha2UgLUMgJHtURVNURElSfSBidWlsZHRlc3QtVEVTVFMgT1M9bGludXggQVJDSD0iJHtUQVJHRVRfQVJDSH0iCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJb2VfcnVubWFrZSAtQyAke1RFU1RESVJ9IGluc3RhbGwtcHRlc3QgQlVJTERESVI9JHtCfSBERVNURElSPSR7RH0ke1BURVNUX1BBVEh9IFRFU1RESVI9JHtURVNURElSfQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjguMTMvZGlzYWJsZV9tYWNvcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjguMTMvZGlzYWJsZV9tYWNvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzNiZTQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3VidmVyc2lvbi9zdWJ2ZXJzaW9uLTEuOC4xMy9kaXNhYmxlX21hY29zLnBhdGNoCkBAIC0wLDAgKzEsNjggQEAKK1RoZXNlIHRlc3RzIGRvbid0IHdvcmsgaW4gY3Jvc3MgY29tcGlsaW5nLCBqdXN0IGRpc2FibGUgdGhlbSBmb3Igbm93LCB3ZSBkb24ndAorYnVpbGQgc3VidmVyc2lvbiBvbiBPUy1YIGF0IHRoaXMgdGltZS4KKworUlAgMTAxNC83LzE2CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbbmVlZHMgYSByZXdyaXRlIHRvIHN1cHBvcnQgYSBjYWNoZSB2YWx1ZV0KKworSW5kZXg6IHN1YnZlcnNpb24tMS44LjkvYnVpbGQvYWMtbWFjcm9zL21hY29zeC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHN1YnZlcnNpb24tMS44Ljkub3JpZy9idWlsZC9hYy1tYWNyb3MvbWFjb3N4Lm00CTIwMTItMTEtMjYgMDM6MDQ6MjcuMDAwMDAwMDAwICswMDAwCisrKysgc3VidmVyc2lvbi0xLjguOS9idWlsZC9hYy1tYWNyb3MvbWFjb3N4Lm00CTIwMTQtMDctMTYgMTI6Mjg6NTguMzU3MzAwNDAzICswMDAwCitAQCAtMjQsMjEgKzI0LDcgQEAKKyBBQ19ERUZVTihTVk5fTElCX01BQ0hPX0lURVJBVEUsCisgWworICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgTWFjaC1PIGR5bmFtaWMgbW9kdWxlIGl0ZXJhdGlvbiBmdW5jdGlvbnNdKQorLSAgQUNfUlVOX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCistICAgICNpbmNsdWRlIDxtYWNoLW8vZHlsZC5oPgorLSAgICAjaW5jbHVkZSA8bWFjaC1vL2xvYWRlci5oPgorLSAgXV0sW1sKKy0gICAgY29uc3Qgc3RydWN0IG1hY2hfaGVhZGVyICpoZWFkZXIgPSBfZHlsZF9nZXRfaW1hZ2VfaGVhZGVyKDApOworLSAgICBjb25zdCBjaGFyICpuYW1lID0gX2R5bGRfZ2V0X2ltYWdlX25hbWUoMCk7CistICAgIGlmIChuYW1lICYmIGhlYWRlcikgcmV0dXJuIDA7CistICAgIHJldHVybiAxOworLSAgXV0pXSxbCistICAgIEFDX0RFRklORShbU1ZOX0hBVkVfTUFDSE9fSVRFUkFURV0sIFsxXSwKKy0gICAgICAgICAgICAgIFtJcyBNYWNoLU8gbG93LWxldmVsIF9keWxkIEFQSSBhdmFpbGFibGU/XSkKKy0gICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKy0gIF0sWworICAgICBBQ19NU0dfUkVTVUxUKFtub10pCistICBdKQorIF0pCisgCisgZG5sIFNWTl9MSUJfTUFDT1NfUExJU1QKK0BAIC00NiwzNCArMzIsNyBAQAorIEFDX0RFRlVOKFNWTl9MSUJfTUFDT1NfUExJU1QsCisgWworICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgTWFjIE9TIHByb3BlcnR5IGxpc3QgdXRpbGl0aWVzXSkKKy0KKy0gIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKy0gICAgI2luY2x1ZGUgPEF2YWlsYWJpbGl0eU1hY3Jvcy5oPgorLSAgICAjaWYgIWRlZmluZWQoTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCkgXAorLSAgICAgfHwgIWRlZmluZWQoTUFDX09TX1hfVkVSU0lPTl8xMF8wKSBcCistICAgICB8fCAoTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA8PSBNQUNfT1NfWF9WRVJTSU9OXzEwXzApCistICAgICNlcnJvciBQcm9wZXJ5TGlzdCBBUEkgdW5hdmFpbGFibGUuCistICAgICNlbmRpZgorLSAgXV0sW1tdXSldLFsKKy0gICAgZG5sICMjIyBIYWNrLiAgV2Ugc2hvdWxkIG9ubHkgbmVlZCB0byBwYXNzIHRoZSAtZnJhbWV3b3JrIG9wdGlvbnMgd2hlbgorLSAgICBkbmwgbGlua2luZyBsaWJzdm5fc3Viciwgc2luY2UgaXQgaXMgdGhlIG9ubHkgbGlicmFyeSB0aGF0IHVzZXMgS2V5Y2hhaW4uCistICAgIGRubAorLSAgICBkbmwgVW5mb3J0dW5hdGVseSwgbGlidG9vbCAxLjUueCBkb2Vzbid0IHRyYWNrIHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzIGZvcgorLSAgICBkbmwgT1MgWCBmcmFtZXdvcmtzIGxpa2UgaXQgZG9lcyBmb3Igbm9ybWFsIGxpYnJhcmllcywgc28gd2UgbmVlZCB0bworLSAgICBkbmwgZXhwbGljaXRseSBwYXNzIHRoZSBvcHRpb24gdG8gYWxsIHRoZSB1c2VycyBvZiBsaWJzdm5fc3ViciB0byBhbGxvdworLSAgICBkbmwgc3RhdGljIGJ1aWxkcyB0byBsaW5rIHN1Y2Nlc3NmdWxseS4KKy0gICAgZG5sCistICAgIGRubCBUaGlzIGRvZXMgbWVhbiB0aGF0IGFsbCBleGVjdXRhYmxlcyB3ZSBsaW5rIHdpbGwgYmUgbGlua2VkIGRpcmVjdGx5CistICAgIGRubCB0byB0aGVzZSBmcmFtZXdvcmtzIC0gZXZlbiB3aGVuIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMgLSBidXQgdGhhdAorLSAgICBkbmwgc2hvdWxkbid0IGNhdXNlIGFueSBwcm9ibGVtcy4KKy0KKy0gICAgTElCUz0iJExJQlMgLWZyYW1ld29yayBDb3JlRm91bmRhdGlvbiIKKy0gICAgQUNfREVGSU5FKFtTVk5fSEFWRV9NQUNPU19QTElTVF0sIFsxXSwKKy0gICAgICAgICAgICAgIFtJcyBNYWMgT1MgcHJvcGVydHkgbGlzdCBBUEkgYXZhaWxhYmxlP10pCistICAgIEFDX01TR19SRVNVTFQoW3llc10pCistICBdLFsKKyAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorLSAgXSkKKyBdKQorIAorIGRubCBTVk5fTElCX01BQ09TX0tFWUNIQUlOCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24tMS44LjEzL2xpYnRvb2wyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3VidmVyc2lvbi9zdWJ2ZXJzaW9uLTEuOC4xMy9saWJ0b29sMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2Q1NzJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3VidmVyc2lvbi9zdWJ2ZXJzaW9uLTEuOC4xMy9saWJ0b29sMi5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCistLS0gYS9jb25maWd1cmUuYWMJMjAxMS0xMC0yMCAyMTo1NjowMi4yMzA2NjM5ODcgKzAyMDAKKysrKyBiL2NvbmZpZ3VyZS5hYwkyMDExLTA4LTE3IDE1OjAxOjMwLjAwMDAwMDAwMCArMDIwMAorQEAgLTIyNyw4ICsyMjcsOCBAQAorICAgTElCVE9PTD0iJHNoX2xpYnRvb2wiCisgICBTVk5fTElCVE9PTD0iJHNoX2xpYnRvb2wiCisgZWxzZQorLSAgc2hfbGlidG9vbD0iJGFic19idWlsZGRpci9saWJ0b29sIgorLSAgU1ZOX0xJQlRPT0w9IlwkKFNIRUxMKSAkc2hfbGlidG9vbCIKKysgIHNoX2xpYnRvb2w9IiRhYnNfYnVpbGRkaXIvJGhvc3RfYWxpYXMtbGlidG9vbCIKKysgIFNWTl9MSUJUT09MPSJcJChTSEVMTCkgXCQoYWJzX2J1aWxkZGlyKS8kaG9zdF9hbGlhcy1saWJ0b29sIgorIGZpCisgQUNfU1VCU1QoU1ZOX0xJQlRPT0wpCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24tMS44LjEzL3NlcmYubTQtUmVnZXgtbW9kaWZpZWQtdG8tYWxsb3ctRC1pbi1wYXRocy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjguMTMvc2VyZi5tNC1SZWdleC1tb2RpZmllZC10by1hbGxvdy1ELWluLXBhdGhzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MGU1MjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24tMS44LjEzL3NlcmYubTQtUmVnZXgtbW9kaWZpZWQtdG8tYWxsb3ctRC1pbi1wYXRocy5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIGYxYjZlNDlmMTJhMThlYWJlODhlYjczMmI1NzhhMTYyODFkMDk0OTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUaHUsIDIgSnVsIDIwMTUgMTE6Mzc6NDMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gc2VyZi5tNDogUmVnZXggbW9kaWZpZWQgdG8gYWxsb3cgJy1EJyBpbiBwYXRocworCitVcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkCisKK1RoZSBwYXRjaCBpcyBtZXJnZWQgYnkgc3VidmVyc2lvbiB1cHN0cmVhbSB3aXRoIHJlcGxhY2luZyAnW1s6c3BhY2U6XV0nIHdpdGggJyAnLgorCitodHRwOi8vc3ZuLmFwYWNoZS5vcmcvdmlld3ZjL3N1YnZlcnNpb24vdHJ1bmsvYnVpbGQvYWMtbWFjcm9zL3NlcmYubTQ/cjE9MTU5NDE1NiZyMj0xNjg5ODI0ICAKKworU2lnbmVkLW9mZi1ieTogSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPgorLS0tCisgYnVpbGQvYWMtbWFjcm9zL3NlcmYubTQgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9idWlsZC9hYy1tYWNyb3Mvc2VyZi5tNCBiL2J1aWxkL2FjLW1hY3Jvcy9zZXJmLm00CitpbmRleCBhZTExZTc1Li5mZjhjYmFlIDEwMDY0NAorLS0tIGEvYnVpbGQvYWMtbWFjcm9zL3NlcmYubTQKKysrKyBiL2J1aWxkL2FjLW1hY3Jvcy9zZXJmLm00CitAQCAtMTQzLDcgKzE0Myw3IEBAIEFDX0RFRlVOKFNWTl9TRVJGX1BLR19DT05GSUcsCisgICAgICAgICBpZiAkUEtHX0NPTkZJRyAkc2VyZl9tYWpvciAtLWF0bGVhc3QtdmVyc2lvbj0kc2VyZl9jaGVja192ZXJzaW9uOyB0aGVuCisgICAgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICAgICAgIHNlcmZfZm91bmQ9eWVzCistICAgICAgICAgIFNWTl9TRVJGX0lOQ0xVREVTPVtgJFBLR19DT05GSUcgJHNlcmZfbWFqb3IgLS1jZmxhZ3MgfCAkU0VEIC1lICdzLy1EW14gXSovL2cnYF0KKysgICAgICAgICAgU1ZOX1NFUkZfSU5DTFVERVM9W2AkUEtHX0NPTkZJRyAkc2VyZl9tYWpvciAtLWNmbGFncyB8ICRTRUQgLWUgJ3MvW1s6c3BhY2U6XV0tRFteIF0qLy9nJyAtZSAncy9eLURbXiBdKi8vZydgXQorICAgICAgICAgICBTVk5fU0VSRl9MSUJTPWAkUEtHX0NPTkZJRyAkc2VyZl9tYWpvciAtLWxpYnNgIAorICAgICAgICAgICBicmVhaworICAgICAgICAgZWxzZQorLS0gCisxLjguNC41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbl8xLjguMTMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb25fMS44LjEzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NDNiOTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb25fMS44LjEzLmJiCkBAIC0wLDAgKzEsNTIgQEAKK1NVTU1BUlkgPSAiU3VidmVyc2lvbiAoc3ZuKSB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIGNsaWVudCIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorREVQRU5EUyA9ICJhcHItdXRpbCBzZXJmIHNxbGl0ZTMgZmlsZSIKK1JERVBFTkRTXyR7UE59ID0gInNlcmYiCitMSUNFTlNFID0gIkFwYWNoZS0yIgorSE9NRVBBR0UgPSAiaHR0cDovL3N1YnZlcnNpb24udGlncmlzLm9yZyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK2luaGVyaXQgZ2V0dGV4dCBweXRob25uYXRpdmUKKworU1JDX1VSSSA9ICIke0FQQUNIRV9NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9saWJ0b29sMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlX21hY29zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NlcmYubTQtUmVnZXgtbW9kaWZpZWQtdG8tYWxsb3ctRC1pbi1wYXRocy5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiNDQxMzQxN2I1MjlkN2JkZjgyZjc0ZTUwZGYwMmU4OGIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTA5OWNjNjg4NDA3NTNiNDhhZWRiM2EyN2ViZDFlMmFmYmNjODRkZGI4NzE0MTJlNWQ1MDBlODQzZDYwNzU3OSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MWMyZjAxMTllNDc4NzAwYjU0MjhlMjYzODZjZmY5MjMiCisKK1BBQ0tBR0VDT05GSUdbc2FzbF0gPSAiLS13aXRoLXNhc2wsLS13aXRob3V0LXNhc2wsY3lydXMtc2FzbCIKK1BBQ0tBR0VDT05GSUdbZ25vbWUta2V5cmluZ10gPSAiLS13aXRoLWdub21lLWtleXJpbmcsLS13aXRob3V0LWdub21lLWtleXJpbmcsZ2xpYi0yLjAgZ25vbWUta2V5cmluZyIKKworRVhUUkFfT0VDT05GID0gIiBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LWJlcmtlbGV5LWRiIC0td2l0aG91dC1hcHhzIFwKKyAgICAgICAgICAgICAgICAtLXdpdGhvdXQtc3dpZyAtLXdpdGgtYXByPSR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9IFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtYXByLXV0aWw9JHtTVEFHSU5HX0JJTkRJUl9DUk9TU30gXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1rZXljaGFpbiBcCisgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9SVUJZPW5vbmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK2V4cG9ydCBMREZMQUdTICs9ICIgLUwke1NUQUdJTkdfTElCRElSfSAiCitDUFBGTEFHUyArPSAiLVAiCitCVUlMRF9DUFBGTEFHUyArPSAiLVAiCisKK2FjcGF0aHMgPSAiLUkgYnVpbGQvIC1JIGJ1aWxkL2FjLW1hY3Jvcy8iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlybSAtZiAke1N9L2xpYnRvb2wKKwlybSAtZiAke1N9L2J1aWxkL2xpYnRvb2wubTQgJHtTfS9idWlsZC9sdG1haW4uc2ggJHtTfS9idWlsZC9sdG9wdGlvbnMubTQgJHtTfS9idWlsZC9sdHN1Z2FyLm00ICR7U30vYnVpbGQvbHR2ZXJzaW9uLm00ICR7U30vYnVpbGQvbHR+b2Jzb2xldGUubTQKKwlybSAtZiAke1N9L2FjbG9jYWwubTQKKwlzZWQgLWkgLWUgJ3M6d2l0aF9zYXNsPSIvdXNyL2xvY2FsIjp3aXRoX3Nhc2w9IiR7U1RBR0lOR19ESVJ9IjonICR7U30vYnVpbGQvYWMtbWFjcm9zL3Nhc2wubTQKK30KKworI3wgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGluc3RhbGw6IHdhcm5pbmc6IGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC93b3JrL3g4Nl82NC1saW51eC9zdWJ2ZXJzaW9uLW5hdGl2ZS8xLjguOS1yMC9idWlsZC9zdWJ2ZXJzaW9uL2xpYnN2bl9yYV9sb2NhbC9saWJzdm5fcmFfbG9jYWwtMS5sYScgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWInfCB4ODZfNjQtbGludXgtbGlidG9vbDogaW5zdGFsbDogd2FybmluZzogYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3dvcmsveDg2XzY0LWxpbnV4L3N1YnZlcnNpb24tbmF0aXZlLzEuOC45LXIwL2J1aWxkL3N1YnZlcnNpb24vbGlic3ZuX3JlcG9zL2xpYnN2bl9yZXBvcy0xLmxhJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluIGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYid8IC91c3IvYmluL2xkOiBjYW5ub3QgZmluZCAtbHN2bl9kZWx0YS0xfCBjb2xsZWN0MjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1c3wgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGluc3RhbGw6IHdhcm5pbmc6IGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC93b3JrL3g4Nl82NC1saW51eC9zdWJ2ZXJzaW9uLW5hdGl2ZS8xLjguOS1yMC9idWlsZC9zdWJ2ZXJzaW9uL2xpYnN2bl9yYV9zdm4vbGlic3ZuX3JhX3N2bi0xLmxhJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluIGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYid8IHg4Nl82NC1saW51eC1saWJ0b29sOiBpbnN0YWxsOiB3YXJuaW5nOiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvd29yay94ODZfNjQtbGludXgvc3VidmVyc2lvbi1uYXRpdmUvMS44LjktcjAvYnVpbGQvc3VidmVyc2lvbi9saWJzdm5fcmFfc2VyZi9saWJzdm5fcmFfc2VyZi0xLmxhJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluIGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYicKKyN8IHg4Nl82NC1saW51eC1saWJ0b29sOiBpbnN0YWxsOiBlcnJvcjogcmVsaW5rIGBsaWJzdm5fcmFfc2VyZi0xLmxhJyB3aXRoIHRoZSBhYm92ZSBjb21tYW5kIGJlZm9yZSBpbnN0YWxsaW5nIGl0CisjfCB4ODZfNjQtbGludXgtbGlidG9vbDogaW5zdGFsbDogd2FybmluZzogYC4uLy4uL3N1YnZlcnNpb24vbGlic3ZuX3JlcG9zL2xpYnN2bl9yZXBvcy0xLmxhJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluIGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYicKKyN8IC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3dvcmsveDg2XzY0LWxpbnV4L3N1YnZlcnNpb24tbmF0aXZlLzEuOC45LXIwL3N1YnZlcnNpb24tMS44LjkvYnVpbGQtb3V0cHV0cy5tazoxMDkwOiByZWNpcGUgZm9yIHRhcmdldCAnaW5zdGFsbC1zZXJmLWxpYicgZmFpbGVkCisjfCBtYWtlOiAqKiogW2luc3RhbGwtc2VyZi1saWJdIEVycm9yIDEKK1BBUkFMTEVMX01BS0VJTlNUID0gIiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3YWJiZXIvc3dhYmJlci1uYXRpdmVfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dhYmJlci9zd2FiYmVyLW5hdGl2ZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYzMTNiYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3YWJiZXIvc3dhYmJlci1uYXRpdmVfZ2l0LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiVG9vbCB0byBtb25pdG9yIGFuZCByZXBvcnQgb24gaG9zdCBzeXN0ZW0gZmlsZSB1c2FnZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL3N3YWJiZXIiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MzkzYTVjYTQ0NWY2OTY1ODczZWNhMDI1OWExN2Y4MzMiCisKK1NSQ1JFViA9ICIyZDFmZTM2ZmIwYTRmZGFhZTg4MjNhOTgxOGE2Nzg1MTgyZDc1ZTY2IgorUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3N3YWJiZXIiCisKK2luaGVyaXQgbmF0aXZlCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJOgorfQorCitkb19pbnN0YWxsKCkgeworICBvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2lnL3N3aWcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MjFmYTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2lnL3N3aWcuaW5jCkBAIC0wLDAgKzEsNjMgQEAKK0RFU0NSSVBUSU9OID0gIlNXSUcgLSBTaW1wbGlmaWVkIFdyYXBwZXIgYW5kIEludGVyZmFjZSBHZW5lcmF0b3IiCitIT01FUEFHRSA9ICJodHRwOi8vc3dpZy5zb3VyY2Vmb3JnZS5uZXQvIgorTElDRU5TRSA9ICJCU0QgJiBHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWU3ODA3YTYyODI3ODRhN2RkZTRjODQ2NjI2YjA4ZmM2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0xJQ0VOU0UtR1BMO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9MSUNFTlNFLVVOSVZFUlNJVElFUzttZDU9OGNlOWRjYzhmN2M5OTRkZTRhNDA4YjIwNWM3MmJhMDgiCisKK1NFQ1RJT04gPSAiZGV2ZWwiCisKK0RFUEVORFMgPSAibGlicGNyZSBweXRob24iCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmd6IgorCitpbmhlcml0IGF1dG90b29scyBweXRob25uYXRpdmUKKworRVhUUkFfT0VDT05GID0gIiBcCisgICAgLS13aXRoLXB5dGhvbj0ke1BZVEhPTn0gXAorICAgIC0td2l0aG91dC1hbGxlZ3JvY2wgXAorICAgIC0td2l0aG91dC1hbmRyb2lkIFwKKyAgICAtLXdpdGhvdXQtYm9vc3QgXAorICAgIC0td2l0aG91dC1jaGlja2VuIFwKKyAgICAtLXdpdGhvdXQtY2xpc3AgXAorICAgIC0td2l0aG91dC1jc2hhcnAgXAorICAgIC0td2l0aG91dC1kIFwKKyAgICAtLXdpdGhvdXQtZ2NqIFwKKyAgICAtLXdpdGhvdXQtZ28gXAorICAgIC0td2l0aG91dC1ndWlsZSBcCisgICAgLS13aXRob3V0LWphdmEgXAorICAgIC0td2l0aG91dC1sdWEgXAorICAgIC0td2l0aG91dC1tenNjaGVtZSBcCisgICAgLS13aXRob3V0LW9jYW1sIFwKKyAgICAtLXdpdGhvdXQtb2N0YXZlIFwKKyAgICAtLXdpdGhvdXQtcGVybDUgXAorICAgIC0td2l0aG91dC1waWtlIFwKKyAgICAtLXdpdGhvdXQtcGhwIFwKKyAgICAtLXdpdGhvdXQtcHl0aG9uMyBcCisgICAgLS13aXRob3V0LXIgXAorICAgIC0td2l0aG91dC1ydWJ5IFwKKyAgICAtLXdpdGhvdXQtdGNsIFwKKyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitkb19jb25maWd1cmUoKSB7CisgICAgaW5zdGFsbCAtbSAwNzU1ICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ251LWNvbmZpZy9jb25maWcuZ3Vlc3MgJHtTfS9Ub29scy9jb25maWcKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9nbnUtY29uZmlnL2NvbmZpZy5zdWIgJHtTfS9Ub29scy9jb25maWcKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9nbnUtY29uZmlnL2NvbmZpZy5ndWVzcyAke1N9CisgICAgaW5zdGFsbCAtbSAwNzU1ICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ251LWNvbmZpZy9jb25maWcuc3ViICR7U30KKyAgICBvZV9ydW5jb25mCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKyAgICBjZCAke0R9JHtiaW5kaXJ9CisgICAgbG4gLXMgc3dpZyBzd2lnMi4wCit9CisKK2RlZiBzd2lnbGliX3JlbHBhdGgoZCk6CisgICAgc3dpZ2xpYiA9IGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSkgKyAiLyIgKyBkLmdldFZhcignQlBOJywgVHJ1ZSkgKyAiLyIgKyBkLmdldFZhcignUFYnLCBUcnVlKQorICAgIHJldHVybiBvcy5wYXRoLnJlbHBhdGgoc3dpZ2xpYiwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisgICAgY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmluZGlyfS9zd2lnIFNXSUdfTElCPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QHN3aWdsaWJfcmVscGF0aChkKX0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZy8wMDAxLVVzZS1wcm9jLXNlbGYtZXhlLWZvci1zd2lnLXN3aWdsaWItb24tbm9uLVdpbjMyLXBsYXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2lnL3N3aWcvMDAwMS1Vc2UtcHJvYy1zZWxmLWV4ZS1mb3Itc3dpZy1zd2lnbGliLW9uLW5vbi1XaW4zMi1wbGF0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZGYzZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2lnL3N3aWcvMDAwMS1Vc2UtcHJvYy1zZWxmLWV4ZS1mb3Itc3dpZy1zd2lnbGliLW9uLW5vbi1XaW4zMi1wbGF0LnBhdGNoCkBAIC0wLDAgKzEsNjkgQEAKK0Zyb20gYTRhMDQ0MGE2NDRjNmM1ZTVkYTA5NmVmZTNjZjA1YmEzMDlhMjg0ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJOT0RBLCBLYWkiIDxub2Rha2FpQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMjIgQXByIDIwMTIgMTc6MDE6MDIgKzA5MDAKK1N1YmplY3Q6IFtQQVRDSF0gVXNlIC9wcm9jL3NlbGYvZXhlIGZvciAic3dpZyAtc3dpZ2xpYiIgb24gbm9uLVdpbjMyCisgcGxhdGZvcm1zLgorCitJZiBpdCB3YXNuJ3QgZm91bmQsIHRoZW4gZmFsbCBiYWNrIHRvIGEgZml4ZWQgc3RyaW5nIGp1c3QgYXMgYmVmb3JlLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAoraHR0cDovL3NvdXJjZWZvcmdlLm5ldC9tYWlsYXJjaGl2ZS9tZXNzYWdlLnBocD9tc2dfaWQ9MjkxNzk3MzMKKworLS0tCisgU291cmNlL01vZHVsZXMvbWFpbi5jeHggfCAgIDI0ICsrKysrKysrKysrKysrKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvU291cmNlL01vZHVsZXMvbWFpbi5jeHggYi9Tb3VyY2UvTW9kdWxlcy9tYWluLmN4eAoraW5kZXggZDJmNWQzYi4uY2JiMGExMiAxMDA2NDQKKy0tLSBhL1NvdXJjZS9Nb2R1bGVzL21haW4uY3h4CisrKysgYi9Tb3VyY2UvTW9kdWxlcy9tYWluLmN4eAorQEAgLTI2LDYgKzI2LDExIEBAIGNoYXIgY3Zzcm9vdF9tYWluX2N4eFtdID0gIiRJZCQiOworICNpbmNsdWRlICJjcGFyc2UuaCIKKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8bGltaXRzLmg+CQkvLyBmb3IgSU5UX01BWAorKyNpZm5kZWYgX1dJTjMyCisrI2luY2x1ZGUgPGNzdGRkZWY+CisrI2luY2x1ZGUgPHVuaXN0ZC5oPgkJLy8gZm9yIHJlYWRsaW5rCisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CQkvLyBmb3Igc3RhdAorKyNlbmRpZgorIAorIC8vIEdsb2JhbCB2YXJpYWJsZXMKKyAKK0BAIC05MDIsOSArOTA3LDkgQEAgaW50IFNXSUdfbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdLCBMYW5ndWFnZSAqbCkgeworIAorICAgLy8gQ2hlY2sgZm9yIFNXSUdfTElCIGVudmlyb25tZW50IHZhcmlhYmxlCisgICBpZiAoKGMgPSBnZXRlbnYoIlNXSUdfTElCIikpID09IChjaGFyICopIDApIHsKKysgICAgY2hhciAqcDsKKyAjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgIGNoYXIgYnVmW01BWF9QQVRIXTsKKy0gICAgY2hhciAqcDsKKyAgICAgaWYgKCEoR2V0TW9kdWxlRmlsZU5hbWUoMCwgYnVmLCBNQVhfUEFUSCkgPT0gMCB8fCAocCA9IHN0cnJjaHIoYnVmLCAnXFwnKSkgPT0gMCkpIHsKKyAgICAgICAqKHAgKyAxKSA9ICdcMCc7CisgICAgICAgU3dpZ0xpYiA9IE5ld1N0cmluZ2YoIiVzTGliIiwgYnVmKTsgLy8gTmF0aXZlIHdpbmRvd3MgaW5zdGFsbGF0aW9uIHBhdGgKK0BAIC05MTQsNyArOTE5LDIyIEBAIGludCBTV0lHX21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgTGFuZ3VhZ2UgKmwpIHsKKyAgICAgaWYgKExlbihTV0lHX0xJQl9XSU5fVU5JWCkgPiAwKQorICAgICAgIFN3aWdMaWJXaW5Vbml4ID0gTmV3U3RyaW5nKFNXSUdfTElCX1dJTl9VTklYKTsgLy8gVW5peCBpbnN0YWxsYXRpb24gcGF0aCB1c2luZyBhIGRyaXZlIGxldHRlciAoZm9yIG1zeXMvbWluZ3cpCisgI2Vsc2UKKy0gICAgU3dpZ0xpYiA9IE5ld1N0cmluZyhTV0lHX0xJQik7CisrICAgIGNoYXIgYnVmW1BBVEhfTUFYXTsKKysgICAgaWYgKDAgPCA6OnJlYWRsaW5rKCIvcHJvYy9zZWxmL2V4ZSIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpICYmCisrICAgICAgICAocCA9IDo6c3Ryc3RyKGJ1ZiwgIi9iaW4vc3dpZyIpKSkgeworKyAgICAgICAgaW50IG1ham9yLCBtaW5vciwgcGF0Y2g7CisrICAgICAgICBjb25zdCBpbnQgcmV0ID0gOjpzc2NhbmYoVkVSU0lPTiwgIiVkLiVkLiVkIiwgJm1ham9yLCAmbWlub3IsICZwYXRjaCk7CisrICAgICAgICBpZiAoMyA9PSByZXQpIHsKKysgICAgICAgICAgICBjb25zdCA6OnB0cmRpZmZfdCBkaXJfcGFydF9sZW4gPSBwIC0gYnVmOworKyAgICAgICAgICAgIDo6c25wcmludGYocCwgUEFUSF9NQVggLSBkaXJfcGFydF9sZW4sICIvc2hhcmUvc3dpZy8lZC4lZC4lZCIsIG1ham9yLCBtaW5vciwgcGF0Y2gpOworKyAgICAgICAgICAgIHN0cnVjdCA6OnN0YXQgc3RhdF9yZXM7CisrICAgICAgICAgICAgaWYgKDAgPT0gOjpzdGF0KGJ1ZiwgJnN0YXRfcmVzKSAmJiBTX0lTRElSKHN0YXRfcmVzLnN0X21vZGUpKSB7CisrICAgICAgICAgICAgICAgIFN3aWdMaWIgPSBOZXdTdHJpbmcoYnVmKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgIH0KKysgICAgaWYgKE5VTEwgPT0gU3dpZ0xpYikKKysgICAgICAgIFN3aWdMaWIgPSBOZXdTdHJpbmcoU1dJR19MSUIpOworICNlbmRpZgorICAgfSBlbHNlIHsKKyAgICAgU3dpZ0xpYiA9IE5ld1N0cmluZyhjKTsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2lnL3N3aWcvMDAwMS1jb25maWd1cmUtdXNlLXBrZy1jb25maWctZm9yLXBjcmUtZGV0ZWN0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dpZy9zd2lnLzAwMDEtY29uZmlndXJlLXVzZS1wa2ctY29uZmlnLWZvci1wY3JlLWRldGVjdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjExMjhhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dpZy9zd2lnLzAwMDEtY29uZmlndXJlLXVzZS1wa2ctY29uZmlnLWZvci1wY3JlLWRldGVjdGlvbi5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tIDVjNGQ2ZDg1Mzg5OTRkNWZlOWIzYjQ2YmZhZmFmMGE2MDVlM2JkYTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW4ua29vaUBsaW5hcm8ub3JnPgorRGF0ZTogVHVlLCAxNyBKdW4gMjAxNCAwODoxODoxNyArMDIwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmU6IHVzZSBwa2ctY29uZmlnIGZvciBwY3JlIGRldGVjdGlvbgorCitTaWduZWQtb2ZmLWJ5OiBLb2VuIEtvb2kgPGtvZW4ua29vaUBsaW5hcm8ub3JnPgorVXBzdHJlYW0tU3RhdHVzOiBwZW5kaW5nCistLS0KKyBjb25maWd1cmUuYWMgfCAzOCArKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDMxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAwYzk4NGI3Li42ZWRjZWMxIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC03MCwzOCArNzAsMTQgQEAgQUNfTVNHX1JFU1VMVChbJHdpdGhfcGNyZV0pCisgCisgZG5sIFRvIG1ha2UgY29uZmlndXJpbmcgZWFzaWVyLCBjaGVjayBmb3IgYSBsb2NhbGx5IGJ1aWx0IFBDUkUgdXNpbmcgdGhlIFRvb2xzL3BjcmUtYnVpbGQuc2ggc2NyaXB0CisgaWYgdGVzdCB4IiR7d2l0aF9wY3JlfSIgPSB4eWVzIDsgdGhlbgorLSAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIHVzZSBsb2NhbCBQQ1JFXSkKKy0gIGxvY2FsX3BjcmVfY29uZmlnPW5vCistICBpZiB0ZXN0IC16ICRQQ1JFX0NPTkZJRzsgdGhlbgorLSAgICBpZiB0ZXN0IC1mIGBwd2RgL3BjcmUvcGNyZS1zd2lnLWluc3RhbGwvYmluL3BjcmUtY29uZmlnOyB0aGVuCistICAgICAgUENSRV9DT05GSUc9YHB3ZGAvcGNyZS9wY3JlLXN3aWctaW5zdGFsbC9iaW4vcGNyZS1jb25maWcKKy0gICAgICBsb2NhbF9wY3JlX2NvbmZpZz0kUENSRV9DT05GSUcKKy0gICAgZmkKKy0gIGZpCistICBBQ19NU0dfUkVTVUxUKFskbG9jYWxfcGNyZV9jb25maWddKQorLWZpCistQVNfSUYoW3Rlc3QgIngkd2l0aF9wY3JlIiAhPSB4bm9dLAorLSAgW0FYX1BBVEhfR0VORVJJQyhbcGNyZV0sCistICAgIFtdLCBkbmwgTWluaW1hbCB2ZXJzaW9uIG9mIFBDUkUgd2UgbmVlZCAtLSBhY2NlcHQgYW55CistICAgIFtdLCBkbmwgY3VzdG9tIHNlZCBzY3JpcHQgZm9yIHZlcnNpb24gcGFyc2luZyBpcyBub3QgbmVlZGVkCistICAgIFtBQ19ERUZJTkUoW0hBVkVfUENSRV0sIFsxXSwgW0RlZmluZSBpZiB5b3UgaGF2ZSBQQ1JFIGxpYnJhcnldKQorLSAgICAgTElCUz0iJExJQlMgJFBDUkVfTElCUyIKKy0gICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJFBDUkVfQ0ZMQUdTIgorLSAgICBdLAorLSAgICBbQUNfTVNHX0ZBSUxVUkUoWworLSAgICAgICAgQ2Fubm90IGZpbmQgcGNyZS1jb25maWcgc2NyaXB0IGZyb20gUENSRSAoUGVybCBDb21wYXRpYmxlIFJlZ3VsYXIgRXhwcmVzc2lvbnMpCistICAgICAgICBsaWJyYXJ5IHBhY2thZ2UuIFRoaXMgZGVwZW5kZW5jeSBpcyBuZWVkZWQgZm9yIGNvbmZpZ3VyZSB0byBjb21wbGV0ZSwKKy0gICAgICAgIEVpdGhlcjoKKy0gICAgICAgIC0gSW5zdGFsbCB0aGUgUENSRSBkZXZlbG9wZXIgcGFja2FnZSBvbiB5b3VyIHN5c3RlbSAocHJlZmVycmVkIGFwcHJvYWNoKS4KKy0gICAgICAgIC0gRG93bmxvYWQgdGhlIFBDUkUgc291cmNlIHRhcmJhbGwsIGJ1aWxkIGFuZCBpbnN0YWxsIG9uIHlvdXIgc3lzdGVtCistICAgICAgICAgIGFzIHlvdSB3b3VsZCBmb3IgYW55IHBhY2thZ2UgYnVpbHQgZnJvbSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorLSAgICAgICAgLSBVc2UgdGhlIFRvb2xzL3BjcmUtYnVpbGQuc2ggc2NyaXB0IHRvIGJ1aWxkIFBDUkUganVzdCBmb3IgU1dJRyB0byBzdGF0aWNhbGx5CistICAgICAgICAgIGxpbmsgYWdhaW5zdC4gUnVuICdUb29scy9wY3JlLWJ1aWxkLnNoIC0taGVscCcgZm9yIGluc3RydWN0aW9ucy4KKy0gICAgICAgICAgKHF1aXRlIGVhc3kgYW5kIGRvZXMgbm90IHJlcXVpcmUgcHJpdmlsZWdlcyB0byBpbnN0YWxsIFBDUkUgb24geW91ciBzeXN0ZW0pCistICAgICAgICAtIFVzZSBjb25maWd1cmUgLS13aXRob3V0LXBjcmUgdG8gZGlzYWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIHN1cHBvcnQgaW4gU1dJRworLSAgICAgICAgICAobm90IHJlY29tbWVuZGVkKS5dKQorLSAgICBdKQorKyAgUEtHX0NIRUNLX01PRFVMRVMoW1BDUkVdLCBbbGlicGNyZV0sIFsKKysgICAgQUNfREVGSU5FKFtIQVZFX1BDUkVdLCBbMV0sIFtEZWZpbmUgaWYgeW91IGhhdmUgUENSRSBsaWJyYXJ5XSkKKysgICAgTElCUz0iJExJQlMgJFBDUkVfTElCUyIKKysgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkUENSRV9DRkxBR1MiCisrICBdLCBbCisrICAgIEFDX01TR19XQVJOKFskUENSRV9QS0dfRVJST1JTXSkKKyAgIF0pCisrZmkKKyAKKyAKKyBkbmwgQ0NhY2hlCistLSAKKzEuOS4zCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZ18zLjAuNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZ18zLjAuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTA5MTdlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dpZy9zd2lnXzMuMC42LmJiCkBAIC0wLDAgKzEsOCBAQAorcmVxdWlyZSAke0JQTn0uaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLVVzZS1wcm9jLXNlbGYtZXhlLWZvci1zd2lnLXN3aWdsaWItb24tbm9uLVdpbjMyLXBsYXQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtY29uZmlndXJlLXVzZS1wa2ctY29uZmlnLWZvci1wY3JlLWRldGVjdGlvbi5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJkZjQzYWUyNzE2NDJiY2ZhNjFjMWU1OWY5NzBmOTk2MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjNjdmNjNlYTExOTU2MTA2ZTRjZGE2NjQxNmQ1MDIwMzMwZGM0Y2UyZWU0NTA1N2QzOWE5NDk0Y2UzM2VjYTA1IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDAxLWxpbnV4LXN5c2xpbnV4LXN1cHBvcnQtZXh0Mi0zLTQtZGV2aWNlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwMS1saW51eC1zeXNsaW51eC1zdXBwb3J0LWV4dDItMy00LWRldmljZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWI3ODc1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwMS1saW51eC1zeXNsaW51eC1zdXBwb3J0LWV4dDItMy00LWRldmljZS5wYXRjaApAQCAtMCwwICsxLDg0IEBACitGcm9tIDYwZjM4MzNhYjJiNTg5OTc3MWI0ZWFiNjU0ZTg4Zjk4ODhiOTk1MDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMzEgRGVjIDIwMTQgMTY6MDE6NTUgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAxLzldIGxpbnV4L3N5c2xpbnV4OiBzdXBwb3J0IGV4dDIvMy80IGRldmljZQorCisqIFN1cHBvcnQgZXh0Mi8zLzQgZGVpdmNlLgorKiBUaGUgb3Blbl9leHQyX2ZzKCkgY2hlY2tzIHdoZXRoZXIgaXQgaXMgYW4gZXh0Mi8zLzQgZGV2aWNlLAorICBkbyB0aGUgZXh0Mi8zLzQgaW5zdGFsbGF0aW9uIChpbnN0YWxsX3RvX2V4dDIoKSkgaWYgeWVzLCBvdGhlcndpc2UgZ28KKyAgb24gdG8gdGhlIGZhdC9udGZzLgorKiBUaGUgZXh0Mi8zLzQgc3VwcG9ydCBkb2Vzbid0IHJlcXVpcmUgcm9vdCBwcml2aWxlZ2VzIHNpbmNlIGl0IGRvZXNuJ3QgbmVlZAorICBtb3VudCAoYnV0IHdyaXRlIHBlcm1pc3Npb24gaXMgcmVxdWlyZWQpLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Rlc3RlZC1ieTogRHUgRG9scGhlciA8ZG9scGhlci5kdUBpbnRlbC5jb20+CistLS0KKyBsaW51eC9zeXNsaW51eC5jIHwgMzYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDM2IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpbnV4L3N5c2xpbnV4LmMgYi9saW51eC9zeXNsaW51eC5jCitpbmRleCA5MTJkZTcxLi4zNmZjMjAyIDEwMDc1NQorLS0tIGEvbGludXgvc3lzbGludXguYworKysrIGIvbGludXgvc3lzbGludXguYworQEAgLTI1Niw2ICsyNTYsMjMgQEAgaW50IGRvX29wZW5fZmlsZShjaGFyICpuYW1lKQorICAgICByZXR1cm4gZmQ7CisgfQorIAorKy8qCisrICogQ2hlY2sgd2hldGhlciB0aGUgZGV2aWNlIGNvbnRhaW5zIGFuIGV4dDIsIGV4dDMgb3IgZXh0NCBmcyBhbmQgb3BlbiBpdCBpZgorKyAqIHRydWUuCisrICogcmV0dXJuIHZhbHVlOgorKyAqIDA6IEV2ZXJ5dGhpbmcgaXMgT0sKKysgKiAxOiBOb3QgYW4gZXh0MiwgZXh0MyBvciBleHQ0CisrICogLTE6IHVuZXhwZWN0ZWQgZXJyb3IKKysgKi8KKytzdGF0aWMgaW50IG9wZW5fZXh0Ml9mcyhjb25zdCBjaGFyICpkZXZpY2UsIGNvbnN0IGNoYXIgKnN1YmRpcikKKyt7CisrfQorKworKy8qIFRoZSBpbnN0YWxsIGZ1bmMgZm9yIGV4dDIsIGV4dDMgYW5kIGV4dDQgKi8KKytzdGF0aWMgaW50IGluc3RhbGxfdG9fZXh0Mihjb25zdCBjaGFyICpkZXZpY2UsIGludCBkZXZfZmQsIGNvbnN0IGNoYXIgKnN1YmRpcikKKyt7CisrfQorKworIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgeworICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBzZWN0YnVmW1NFQ1RPUl9TSVpFXTsKK0BAIC0zMTMsNiArMzMwLDI0IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCWRpZSgiY2FuJ3QgY29tYmluZSBhbiBvZmZzZXQgd2l0aCBhIGJsb2NrIGRldmljZSIpOworICAgICB9CisgCisrICAgIC8qCisrICAgICAqIENoZWNrIGlmIGl0IGlzIGFuIGV4dDIsIGV4dDMgb3IgZXh0NAorKyAgICAgKi8KKysgICAgcnYgPSBvcGVuX2V4dDJfZnMob3B0LmRldmljZSwgc3ViZGlyKTsKKysgICAgaWYgKHJ2ID09IDApIHsKKysgICAgICAgIGlmIChpbnN0YWxsX3RvX2V4dDIob3B0LmRldmljZSwgZGV2X2ZkLCBzdWJkaXIpKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogaW5zdGFsbGF0aW9uIGZhaWxlZFxuIiwgb3B0LmRldmljZSk7CisrICAgICAgICAgICAgZXhpdCgxKTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiAwOworKyAgICAvKiBVbmV4cGVjdGVkIGVycm9ycyAqLworKyAgICB9IGVsc2UgaWYgKHJ2ID09IC0xKSB7CisrICAgICAgICBleGl0KDEpOworKyAgICB9CisrCisrICAgIC8qIFJlc2V0IHJ2ICovCisrICAgIHJ2ID0gMDsKKysKKyAgICAgeHByZWFkKGRldl9mZCwgc2VjdGJ1ZiwgU0VDVE9SX1NJWkUsIG9wdC5vZmZzZXQpOworICAgICBmc3luYyhkZXZfZmQpOworIAorQEAgLTMyMiw2ICszNTcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgICAgKi8KKyAgICAgaWYgKChlcnJtc2cgPSBzeXNsaW51eF9jaGVja19ib290c2VjdChzZWN0YnVmLCAmZnNfdHlwZSkpKSB7CisgCWZwcmludGYoc3RkZXJyLCAiJXM6ICVzXG4iLCBvcHQuZGV2aWNlLCBlcnJtc2cpOworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiBzdXBwb3J0ZWQgZnM6IGZhdC9udGZzL2V4dDIvZXgzL2V4dDRcbiIsIHByb2dyYW0pOworIAlleGl0KDEpOworICAgICB9CisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDItbGludXgtc3lzbGludXgtaW1wbGVtZW50LW9wZW5fZXh0Ml9mcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDItbGludXgtc3lzbGludXgtaW1wbGVtZW50LW9wZW5fZXh0Ml9mcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2NmMDYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwMi1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtb3Blbl9leHQyX2ZzLnBhdGNoCkBAIC0wLDAgKzEsMTQxIEBACitGcm9tIDA3ZmI3MzdmYjYwYzA4ZWFhYTQxOTg5ZDUzMWZjMjMwMDk1MjM1NDYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMzEgRGVjIDIwMTQgMTY6MDk6MTggKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAyLzldIGxpbnV4L3N5c2xpbnV4OiBpbXBsZW1lbnQgb3Blbl9leHQyX2ZzKCkKKworVGhlIG9wZW5fZXh0Ml9mcygpIGNoZWNrcyB3aGV0aGVyIGl0IGlzIGFuIGV4dDIvZXh0My9leHQ0IGRldmljZSwgYW5kCityZXR1cm46CiswOiBJdCBpcyBhbiBleHQyLCBleHQzIG9yIGV4dDQuCisxOiBOb3QgYW4gZXh0MiwgZXh0MyBvciBleHQ0LgorLTE6IHVuZXhwZWN0ZWQgZXJyb3IuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorVGVzdGVkLWJ5OiBEdSBEb2xwaGVyIDxkb2xwaGVyLmR1QGludGVsLmNvbT4KKy0tLQorIGxpbnV4L01ha2VmaWxlICAgfCAgMiArLQorIGxpbnV4L3N5c2xpbnV4LmMgfCA4MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgODEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGludXgvTWFrZWZpbGUgYi9saW51eC9NYWtlZmlsZQoraW5kZXggMTE2NjdlMS4uYWMxYWM1OCAxMDA2NDQKKy0tLSBhL2xpbnV4L01ha2VmaWxlCisrKysgYi9saW51eC9NYWtlZmlsZQorQEAgLTUxLDcgKzUxLDcgQEAgc3BvdGxlc3M6IGNsZWFuCisgaW5zdGFsbGVyOiBzeXNsaW51eCBzeXNsaW51eC1ub210b29scworIAorIHN5c2xpbnV4OiAkKE9CSlMpCistCSQoQ0MpICQoTERGTEFHUykgLW8gJEAgJF4KKysJJChDQykgJChMREZMQUdTKSAtbyAkQCAkXiAtbGV4dDJmcworIAorIHN5c2xpbnV4LW5vbXRvb2xzOiBzeXNsaW51eAorIAlsbiAtZiAkPCAkQAorZGlmZiAtLWdpdCBhL2xpbnV4L3N5c2xpbnV4LmMgYi9saW51eC9zeXNsaW51eC5jCitpbmRleCAzNmZjMjAyLi5jYzRlN2RhIDEwMDc1NQorLS0tIGEvbGludXgvc3lzbGludXguYworKysrIGIvbGludXgvc3lzbGludXguYworQEAgLTcyLDYgKzcyLDcgQEAKKyAjaW5jbHVkZSAic3lzbHhmcy5oIgorICNpbmNsdWRlICJzZXRhZHYuaCIKKyAjaW5jbHVkZSAic3lzbHhvcHQuaCIgLyogdW5pZmllZCBvcHRpb25zICovCisrI2luY2x1ZGUgPGV4dDJmcy9leHQyZnMuaD4KKyAKKyBleHRlcm4gY29uc3QgY2hhciAqcHJvZ3JhbTsJLyogTmFtZSBvZiBwcm9ncmFtICovCisgCitAQCAtODIsNiArODMsOSBAQCBjaGFyICptbnRwYXRoID0gTlVMTDsJCS8qIFBhdGggb24gd2hpY2ggdG8gbW91bnQgKi8KKyBpbnQgbG9vcF9mZCA9IC0xOwkJLyogTG9vcCBkZXZpY2UgKi8KKyAjZW5kaWYKKyAKKytleHQyX2ZpbHN5cyAgICAgZTJmcyA9IE5VTEw7ICAgIC8qIEV4dDIvMy80IGZpbGVzeXN0ZW0gKi8KKytleHQyX2lub190ICAgICAgcm9vdCwgY3dkOyAgICAgIC8qIFRoZSByb290IGFuZCBjd2Qgb2YgZTJmcyAqLworKworIHZvaWQgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSkgZGllKGNvbnN0IGNoYXIgKm1zZykKKyB7CisgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6ICVzXG4iLCBwcm9ncmFtLCBtc2cpOworQEAgLTI2Niw2ICsyNzAsODIgQEAgaW50IGRvX29wZW5fZmlsZShjaGFyICpuYW1lKQorICAqLworIHN0YXRpYyBpbnQgb3Blbl9leHQyX2ZzKGNvbnN0IGNoYXIgKmRldmljZSwgY29uc3QgY2hhciAqc3ViZGlyKQorIHsKKysgICAgaW50ICAgICAgICAgcmV0dmFsOworKyAgICBpbnQgICAgICAgICBvcGVuX2ZsYWcgPSBFWFQyX0ZMQUdfUlcsIG1vdW50X2ZsYWdzOworKyAgICBleHQyX2lub190ICBkaXJpbm87CisrICAgIGNoYXIgICAgICAgIG9wdF9zdHJpbmdbNDBdOworKworKyAgICBpZiAob3B0Lm9mZnNldCkgeworKyAgICAgICAgc3ByaW50ZihvcHRfc3RyaW5nLCAib2Zmc2V0PSVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKW9wdC5vZmZzZXQpOworKyAgICAgICAgcmV0dmFsID0gZXh0MmZzX29wZW4yKGRldmljZSwgb3B0X3N0cmluZywgb3Blbl9mbGFnLCAwLCAwLCB1bml4X2lvX21hbmFnZXIsICZlMmZzKTsKKysgICAgfSBlbHNlCisrICAgICAgICByZXR2YWwgPSBleHQyZnNfb3BlbihkZXZpY2UsIG9wZW5fZmxhZywgMCwgMCwgdW5peF9pb19tYW5hZ2VyLCAmZTJmcyk7CisrICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgIC8qIEl0IG1pZ2h0IG5vdCBiZSBhbiBleHROIGZzLCBzbyB3ZSBuZWVkIGNoZWNrIG1hZ2ljIGZpcnN0bHkgKi8KKysgICAgICAgIGlmIChyZXR2YWwgPT0gRVhUMl9FVF9CQURfTUFHSUMpIHsKKysgICAgICAgICAgICAvKiBEbyBub3RoaW5nLCByZXR1cm4gc2lsZW50bHkgKi8KKysgICAgICAgICAgICByZXR1cm4gMTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZXJyb3Igd2hpbGUgdHJ5aW5nIHRvIG9wZW46ICVzXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBkZXZpY2UpOworKyAgICAgICAgICAgIHJldHVybiAtMTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICAvKiBTdG9wIGlmIGl0IGlzIG1vdW50ZWQgKi8KKysgICAgcmV0dmFsID0gZXh0MmZzX2NoZWNrX2lmX21vdW50ZWQoZGV2aWNlLCAmbW91bnRfZmxhZ3MpOworKyAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBleHQyZnNfY2hlY2tfaWZfbW91bnQoKSBlcnJvciBvbiAlc1xuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgZGV2aWNlKTsKKysgICAgICAgIGdvdG8gZmFpbDsKKysgICAgfQorKworKyAgICBpZiAobW91bnRfZmxhZ3MgJiBFWFQyX01GX01PVU5URUQpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6ICVzIGlzIG1vdW50ZWRcbiIsIHByb2dyYW0sIGRldmljZSk7CisrICAgICAgICBnb3RvIGZhaWw7CisrICAgIH0KKysKKysgICAgZTJmcy0+ZGVmYXVsdF9iaXRtYXBfdHlwZSA9IEVYVDJGU19CTUFQNjRfUkJUUkVFOworKworKyAgICAvKiBSZWFkIHRoZSBpbm9kZSBtYXAgKi8KKysgICAgcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGVfYml0bWFwKGUyZnMpOworKyAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiB3aGlsZSByZWFkaW5nIGlub2RlIGJpdG1hcDogJXNcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGRldmljZSk7CisrICAgICAgICBnb3RvIGZhaWw7CisrICAgIH0KKysKKysgICAgLyogUmVhZCB0aGUgYmxvY2sgbWFwICovCisrICAgIHJldHZhbCA9IGV4dDJmc19yZWFkX2Jsb2NrX2JpdG1hcChlMmZzKTsKKysgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogd2hpbGUgcmVhZGluZyBibG9jayBiaXRtYXA6ICVzXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBkZXZpY2UpOworKyAgICAgICAgZ290byBmYWlsOworKyAgICB9CisrCisrICAgIHJvb3QgPSBjd2QgPSBFWFQyX1JPT1RfSU5POworKyAgICAvKiBDaGVjayB0aGUgc3ViZGlyICovCisrICAgIGlmIChzdHJjbXAoc3ViZGlyLCAiLyIpKSB7CisrCXJldHZhbCA9IGV4dDJmc19uYW1laShlMmZzLCByb290LCBjd2QsIHN1YmRpciwgJmRpcmlubyk7CisrICAgICAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZmFpbGVkIHRvIGZpbmQgZGlyICVzIG9uICVzXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBzdWJkaXIsIGRldmljZSk7CisrICAgICAgICAgICAgZ290byBmYWlsOworKyAgICAgICAgfQorKworKyAgICAgICAgcmV0dmFsID0gZXh0MmZzX2NoZWNrX2RpcmVjdG9yeShlMmZzLCBkaXJpbm8pOworKyAgICAgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGZhaWxlZCB0byBjZCB0bzogJXNcbiIsIHByb2dyYW0sIHN1YmRpcik7CisrICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKysgICAgICAgIH0KKysgICAgICAgIGN3ZCA9IGRpcmlubzsKKysgICAgfQorKworKyAgICByZXR1cm4gMDsKKysKKytmYWlsOgorKyAgICAodm9pZCkgZXh0MmZzX2Nsb3NlKGUyZnMpOworKyAgICByZXR1cm4gLTE7CisgfQorIAorIC8qIFRoZSBpbnN0YWxsIGZ1bmMgZm9yIGV4dDIsIGV4dDMgYW5kIGV4dDQgKi8KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwMy1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtaW5zdGFsbF90b19leHQyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwMy1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtaW5zdGFsbF90b19leHQyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YmExMDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDAzLWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1pbnN0YWxsX3RvX2V4dDIucGF0Y2gKQEAgLTAsMCArMSwxMTYgQEAKK0Zyb20gNjRkODU2YjI0MzgxMjkwNzA2ODc3NmIyMDRhMDAzYTNhOGZhMTIyYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAzMSBEZWMgMjAxNCAxNjoxNzo0MiArMDgwMAorU3ViamVjdDogW1BBVENIIDMvOV0gbGludXgvc3lzbGludXg6IGltcGxlbWVudCBpbnN0YWxsX3RvX2V4dDIoKQorCisqIFRoZSBoYW5kbGVfYWR2X29uX2V4dCgpIGNoZWNrcyB3aGV0aGVyIHdlIG9ubHkgbmVlZCB1cGRhdGUgYWR2LgorKiBUaGUgd3JpdGVfdG9fZXh0KCkgaW5zdGFsbHMgZmlsZXMgKGxkbGludXguc3lzIG9yIGxkbGludXguYzMyKSB0byB0aGUKKyAgZGV2aWNlLgorKiBUaGUgaW5zdGFsbF9ib290YmxvY2soKSBpbnN0YWxscyB0aGUgYm9vdCBibG9jay4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitUZXN0ZWQtYnk6IER1IERvbHBoZXIgPGRvbHBoZXIuZHVAaW50ZWwuY29tPgorLS0tCisgbGludXgvc3lzbGludXguYyB8IDc5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDc5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpbnV4L3N5c2xpbnV4LmMgYi9saW51eC9zeXNsaW51eC5jCitpbmRleCBjYzRlN2RhLi40NWYwODBkIDEwMDc1NQorLS0tIGEvbGludXgvc3lzbGludXguYworKysrIGIvbGludXgvc3lzbGludXguYworQEAgLTM0NiwxMSArMzQ2LDkwIEBAIHN0YXRpYyBpbnQgb3Blbl9leHQyX2ZzKGNvbnN0IGNoYXIgKmRldmljZSwgY29uc3QgY2hhciAqc3ViZGlyKQorIGZhaWw6CisgICAgICh2b2lkKSBleHQyZnNfY2xvc2UoZTJmcyk7CisgICAgIHJldHVybiAtMTsKKysKKyt9CisrCisrLyoKKysgKiBJbnN0YWxsIHRoZSBib290IGJsb2NrIG9uIHRoZSBzcGVjaWZpZWQgZGV2aWNlLgorKyAqIE11c3QgYmUgcnVuIEFGVEVSIGZpbGUgaW5zdGFsbGVkLgorKyAqLworK2ludCBpbnN0YWxsX2Jvb3RibG9jayhpbnQgZmQsIGNvbnN0IGNoYXIgKmRldmljZSkKKyt7CisrfQorKworK3N0YXRpYyBpbnQgaGFuZGxlX2Fkdl9vbl9leHQodm9pZCkKKyt7CisrfQorKworKy8qIFdyaXRlIGZpbGVzLCBhZHYsIGJvb3Qgc2VjdG9yICovCisrc3RhdGljIGludCB3cml0ZV90b19leHQoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbmd0aCwKKysgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaV9mbGFncywgaW50IGRldl9mZCwgY29uc3QgY2hhciAqc3ViZGlyKQorK3sKKyB9CisgCisgLyogVGhlIGluc3RhbGwgZnVuYyBmb3IgZXh0MiwgZXh0MyBhbmQgZXh0NCAqLworIHN0YXRpYyBpbnQgaW5zdGFsbF90b19leHQyKGNvbnN0IGNoYXIgKmRldmljZSwgaW50IGRldl9mZCwgY29uc3QgY2hhciAqc3ViZGlyKQorIHsKKysgICAgaW50ICAgICAgICAgcmV0dmFsOworKyAgICBleHQyX2lub190ICBvbGRpbm87CisrCisrICAgIGNvbnN0IGNoYXIgKmZpbGUgPSAibGRsaW51eC5zeXMiOworKyAgICBjb25zdCBjaGFyICpvbGRmaWxlID0gImV4dGxpbnV4LnN5cyI7CisrICAgIGNvbnN0IGNoYXIgKmMzMmZpbGUgPSAibGRsaW51eC5jMzIiOworKworKyAgICAvKiBIYW5kbGUgdGhlIGFkdiAqLworKyAgICBpZiAoaGFuZGxlX2Fkdl9vbl9leHQoKSA8IDApIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGVycm9yIHdoaWxlIGhhbmRsaW5nIEFEViBvbiAlc1xuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgZGV2aWNlKTsKKysgICAgICAgIHJldHZhbCA9IDE7CisrICAgICAgICBnb3RvIGZhaWw7CisrICAgIH0KKysKKysgICAgLyogUmV0dXJuIGlmIG9ubHkgbmVlZCB1cGRhdGUgdGhlIGFkdiAqLworKyAgICBpZiAob3B0LnVwZGF0ZV9vbmx5ID09IC0xKSB7CisrICAgICAgICByZXR1cm4gZXh0MmZzX2Nsb3NlKGUyZnMpOworKyAgICB9CisrCisrICAgIC8qIFdyaXRlIGxkbGludXguc3lzLCBhZHYsIGJvb3Qgc2VjdG9yICovCisrICAgIHJldHZhbCA9IHdyaXRlX3RvX2V4dChmaWxlLCAoY29uc3QgY2hhciBfZm9yY2UgKilib290X2ltYWdlLAorKyAgICAgICAgICAgICAgICBib290X2ltYWdlX2xlbiwgRVhUMl9JTU1VVEFCTEVfRkwsIGRldl9mZCwgc3ViZGlyKTsKKysgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogRVJST1I6IHdoaWxlIHdyaXRpbmc6ICVzLlxuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgZmlsZSk7CisrICAgICAgICBnb3RvIGZhaWw7CisrICAgIH0KKysKKysgICAgLyogV3JpdGUgbGRsaW51eC5jMzIgKi8KKysgICAgcmV0dmFsID0gd3JpdGVfdG9fZXh0KGMzMmZpbGUsCisrICAgICAgICAgICAgICAgIChjb25zdCBjaGFyIF9mb3JjZSAqKXN5c2xpbnV4X2xkbGludXhjMzIsCisrICAgICAgICAgICAgICAgIHN5c2xpbnV4X2xkbGludXhjMzJfbGVuLCAwLCBkZXZfZmQsIHN1YmRpcik7CisrICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEVSUk9SOiB3aGlsZSB3cml0aW5nOiAlcy5cbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGMzMmZpbGUpOworKyAgICAgICAgZ290byBmYWlsOworKyAgICB9CisrCisrICAgIC8qIExvb2sgaWYgd2UgaGF2ZSB0aGUgZXh0bGludXguc3lzIGFuZCByZW1vdmUgaXQqLworKyAgICByZXR2YWwgPSBleHQyZnNfbmFtZWkoZTJmcywgcm9vdCwgY3dkLCBvbGRmaWxlLCAmb2xkaW5vKTsKKysgICAgaWYgKHJldHZhbCA9PSAwKSB7CisrICAgICAgICByZXR2YWwgPSBleHQyZnNfdW5saW5rKGUyZnMsIGN3ZCwgb2xkZmlsZSwgb2xkaW5vLCAwKTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBFUlJPUjogZmFpbGVkIHRvIHVubGluazogJXNcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIG9sZGZpbGUpOworKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKysgICAgICAgIH0KKysgICAgfSBlbHNlIHsKKysgICAgICAgIHJldHZhbCA9IDA7CisrICAgIH0KKysKKysgICAgc3luYygpOworKyAgICByZXR2YWwgPSBpbnN0YWxsX2Jvb3RibG9jayhkZXZfZmQsIGRldmljZSk7CisrICAgIGNsb3NlKGRldl9mZCk7CisrICAgIHN5bmMoKTsKKysKKytmYWlsOgorKyAgICAodm9pZCkgZXh0MmZzX2Nsb3NlKGUyZnMpOworKyAgICByZXR1cm4gcmV0dmFsOworIH0KKyAKKyBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA0LWxpbnV4LXN5c2xpbnV4LWFkZC1leHRfZmlsZV9yZWFkLWFuZC1leHRfZmlsZV93cml0ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDQtbGludXgtc3lzbGludXgtYWRkLWV4dF9maWxlX3JlYWQtYW5kLWV4dF9maWxlX3dyaXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YjU2ZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA0LWxpbnV4LXN5c2xpbnV4LWFkZC1leHRfZmlsZV9yZWFkLWFuZC1leHRfZmlsZV93cml0ZS5wYXRjaApAQCAtMCwwICsxLDkxIEBACitGcm9tIDM1ZDM4NDJjYzRiOTMwYzUxMDJlZWQyOTIxZTAxODliN2Y0ZmQwNjkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMzEgRGVjIDIwMTQgMTY6NDM6MzcgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCA0LzldIGxpbnV4L3N5c2xpbnV4OiBhZGQgZXh0X2ZpbGVfcmVhZCgpIGFuZCBleHRfZmlsZV93cml0ZSgpCisKK1dpbGwgdXNlIHRoZW0gdG8gcmVhZCBhbmQgd3JpdGUgb24gdGhlIGV4dFggZGV2aWNlLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Rlc3RlZC1ieTogRHUgRG9scGhlciA8ZG9scGhlci5kdUBpbnRlbC5jb20+CistLS0KKyBsaW51eC9zeXNsaW51eC5jIHwgNjIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNjIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGludXgvc3lzbGludXguYyBiL2xpbnV4L3N5c2xpbnV4LmMKK2luZGV4IDQ1ZjA4MGQuLjI0N2M4NmEgMTAwNzU1CistLS0gYS9saW51eC9zeXNsaW51eC5jCisrKysgYi9saW51eC9zeXNsaW51eC5jCitAQCAtMzQ5LDYgKzM0OSw2OCBAQCBmYWlsOgorIAorIH0KKyAKKysvKiBSZWFkIGZyb20gYW4gZXh0Ml9maWxlICovCisrc3RhdGljIGludCBleHRfZmlsZV9yZWFkKGV4dDJfZmlsZV90IGUyX2ZpbGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LAorKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZl90IG9mZnNldCwgY29uc3QgY2hhciAqbXNnKQorK3sKKysgICAgaW50ICAgICAgICAgICAgICAgICByZXR2YWw7CisrICAgIGNoYXIgICAgICAgICAgICAgICAgKnB0ciA9IChjaGFyICopIGJ1ZjsKKysgICAgdW5zaWduZWQgaW50ICAgICAgICBnb3QgPSAwOworKyAgICBzaXplX3QgICAgICAgICAgICAgIGRvbmUgPSAwOworKworKyAgICAvKiBBbHdheXMgbHNlZWsgc2luY2UgZTJfZmlsZSBpcyB1bmNvbnRyb2xsZWQgYnkgdGhpcyBmdW5jICovCisrICAgIGlmIChleHQyZnNfZmlsZV9sc2VlayhlMl9maWxlLCBvZmZzZXQsIEVYVDJfU0VFS19TRVQsIE5VTEwpKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBleHQyZnNfZmlsZV9sc2VlaygpIGZhaWxlZC5cbiIsCisrICAgICAgICAgICAgcHJvZ3JhbSk7CisrICAgICAgICByZXR1cm4gLTE7CisrICAgIH0KKysKKysgICAgd2hpbGUgKDEpIHsKKysgICAgICAgIHJldHZhbCA9IGV4dDJmc19maWxlX3JlYWQoZTJfZmlsZSwgcHRyLCBjb3VudCwgJmdvdCk7CisrICAgICAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZXJyb3Igd2hpbGUgcmVhZGluZyAlc1xuIiwKKysgICAgICAgICAgICAgICAgICAgIHByb2dyYW0sIG1zZyk7CisrICAgICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgfQorKyAgICAgICAgY291bnQgLT0gZ290OworKyAgICAgICAgcHRyICs9IGdvdDsKKysgICAgICAgIGRvbmUgKz0gZ290OworKyAgICAgICAgaWYgKGdvdCA9PSAwIHx8IGNvdW50ID09IDApCisrICAgICAgICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGRvbmU7CisrfQorKworKy8qIFdyaXRlIHRvIGFuIGV4dDJfZmlsZSAqLworK3N0YXRpYyBpbnQgZXh0X2ZpbGVfd3JpdGUoZXh0Ml9maWxlX3QgZTJfZmlsZSwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgb2ZmX3Qgb2Zmc2V0KQorK3sKKysgICAgY29uc3QgY2hhciAgICAgICAgICAqcHRyID0gKGNvbnN0IGNoYXIgKikgYnVmOworKyAgICB1bnNpZ25lZCBpbnQgICAgICAgIHdyaXR0ZW4gPSAwOworKyAgICBzaXplX3QgICAgICAgICAgICAgIGRvbmUgPSAwOworKworKyAgICAvKiBBbHdheXMgbHNlZWsgc2luY2UgZTJfZmlsZSBpcyB1bmNvbnRyb2xsZWQgYnkgdGhpcyBmdW5jICovCisrICAgIGlmIChleHQyZnNfZmlsZV9sc2VlayhlMl9maWxlLCBvZmZzZXQsIEVYVDJfU0VFS19TRVQsIE5VTEwpKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZXh0MmZzX2ZpbGVfbHNlZWsoKSBmYWlsZWQuXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtKTsKKysgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgIH0KKysKKysgICAgd2hpbGUgKGNvdW50ID4gMCkgeworKyAgICAgICAgaWYgKGV4dDJmc19maWxlX3dyaXRlKGUyX2ZpbGUsIHB0ciwgY291bnQsICZ3cml0dGVuKSkgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGZhaWxlZCB0byB3cml0ZSBzeXNsaW51eCBhZHYuXG4iLAorKyAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbSk7CisrICAgICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgfQorKyAgICAgICAgY291bnQgLT0gd3JpdHRlbjsKKysgICAgICAgIHB0ciArPSB3cml0dGVuOworKyAgICAgICAgZG9uZSArPSB3cml0dGVuOworKyAgICB9CisrCisrICAgIHJldHVybiBkb25lOworK30KKysKKyAvKgorICAqIEluc3RhbGwgdGhlIGJvb3QgYmxvY2sgb24gdGhlIHNwZWNpZmllZCBkZXZpY2UuCisgICogTXVzdCBiZSBydW4gQUZURVIgZmlsZSBpbnN0YWxsZWQuCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDUtbGludXgtc3lzbGludXgtaW1wbGVtZW50LWhhbmRsZV9hZHZfb25fZXh0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwNS1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtaGFuZGxlX2Fkdl9vbl9leHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI5ZTdjNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDUtbGludXgtc3lzbGludXgtaW1wbGVtZW50LWhhbmRsZV9hZHZfb25fZXh0LnBhdGNoCkBAIC0wLDAgKzEsMTI3IEBACitGcm9tIGNkYjk4MGIzN2Y0MGRjMmM0MTg5MTQzNGM3NzM2ZTQ5ZGE1Mzc1NmUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMzEgRGVjIDIwMTQgMTY6NDc6NTIgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCA1LzldIGxpbnV4L3N5c2xpbnV4OiBpbXBsZW1lbnQgaGFuZGxlX2Fkdl9vbl9leHQoKQorCitJdCByZWFkcyBhZHYgaWYgZm91bmQgb24gdGhlIGRldmljZSwgb3IgcmVzZXRzIHN5c2xpbnV4X2Fkdiwgb3IgdXBkYXRlCit0aGUgYWR2IGlmIHVwZGF0ZSBhZHYgb25seS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitUZXN0ZWQtYnk6IER1IERvbHBoZXIgPGRvbHBoZXIuZHVAaW50ZWwuY29tPgorLS0tCisgbGludXgvc3lzbGludXguYyB8IDk3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDk3IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpbnV4L3N5c2xpbnV4LmMgYi9saW51eC9zeXNsaW51eC5jCitpbmRleCAyNDdjODZhLi5kZTVkMjcyIDEwMDc1NQorLS0tIGEvbGludXgvc3lzbGludXguYworKysrIGIvbGludXgvc3lzbGludXguYworQEAgLTQyMSw2ICs0MjEsMTAzIEBAIGludCBpbnN0YWxsX2Jvb3RibG9jayhpbnQgZmQsIGNvbnN0IGNoYXIgKmRldmljZSkKKyAKKyBzdGF0aWMgaW50IGhhbmRsZV9hZHZfb25fZXh0KHZvaWQpCisgeworKyAgICBpbnQgICAgICAgICAgICAgICAgIGksIHJldHZhbCwgZm91bmRfZmlsZTsKKysgICAgaW50ICAgICAgICAgICAgICAgICBuZWVkX2Nsb3NlID0gMjsgLyogMiBtZWFucyBubyBuZWVkIGV4dHJhIGNsb3NlICovCisrICAgIGNoYXIgICAgICAgICAgICAgICAgKmZpbGVuYW1lc1syXSA9IHsibGRsaW51eC5zeXMiLCAiZXh0bGludXguc3lzIn07CisrICAgIGNoYXIgICAgICAgICAgICAgICAgKmZpbGVuYW1lOworKyAgICBleHQyX2lub190ICAgICAgICAgIG5ld2lubzsKKysgICAgZXh0Ml9maWxlX3QgICAgICAgICBlMl9maWxlOworKyAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAgIGlub2RlOworKworKyAgICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisrICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lc1tpXTsKKysgICAgICAgIGZvdW5kX2ZpbGUgPSAwOworKyAgICAgICAgcmV0dmFsID0gZXh0MmZzX25hbWVpKGUyZnMsIHJvb3QsIGN3ZCwgZmlsZW5hbWUsICZuZXdpbm8pOworKyAgICAgICAgaWYgKHJldHZhbCA9PSAwKSB7CisrICAgICAgICAgICAgZm91bmRfZmlsZSA9IDE7CisrICAgICAgICB9IGVsc2UKKysgICAgICAgICAgICBjb250aW51ZTsKKysKKysgICAgICAgIG5lZWRfY2xvc2UgPSBpOworKworKyAgICAgICAgcmV0dmFsID0gZXh0MmZzX2ZpbGVfb3BlbihlMmZzLCBuZXdpbm8sIEVYVDJfRkxBR19SVywgJmUyX2ZpbGUpOworKyAgICAgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGZhaWxlZCB0byBvcGVuICVzXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBmaWxlbmFtZSk7CisrICAgICAgICAgICAgZ290byBmYWlsOworKyAgICAgICAgfQorKworKyAgICAgICAgcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGUoZTJmcywgbmV3aW5vLCAmaW5vZGUpOworKyAgICAgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGVycm9yIHdoaWxlIHJlYWRpbmcgaW5vZGU6ICV1LCBmaWxlOiAlc1xuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgbmV3aW5vLCBmaWxlbmFtZSk7CisrICAgICAgICAgICAgZ290byBmYWlsOworKyAgICAgICAgfQorKworKyAgICAgICAgLyogQ2hlY2sgdGhlIHNpemUgdG8gc2VlIGlmIHRvbyBzbWFsbCB0byByZWFkICovCisrICAgICAgICBpZiAoaW5vZGUuaV9zaXplIDwgMiAqIEFEVl9TSVpFKSB7CisrICAgICAgICAgICAgaWYgKG9wdC51cGRhdGVfb25seSA9PSAtMSkgeworKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBmYWlsZWQgdG8gd3JpdGUgYXV4aWxsaWFyeSBkYXRhXG5cCisrICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNpemUgb2YgJXMgaXMgdG9vIHNtYWxsIChuZWVkIC0tdXBkYXRlKT9cbiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbSwgZmlsZW5hbWUpOworKyAgICAgICAgICAgICAgICByZXR2YWwgPSAtMTsKKysgICAgICAgICAgICAgICAgZ290byBmYWlsOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBzeXNsaW51eF9yZXNldF9hZHYoc3lzbGludXhfYWR2KTsKKysgICAgICAgICAgICBmb3VuZF9maWxlID0gMDsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysKKysgICAgICAgIC8qIFJlYWQgdGhlIGFkdiAqLworKyAgICAgICAgcmV0dmFsID0gZXh0X2ZpbGVfcmVhZChlMl9maWxlLCBzeXNsaW51eF9hZHYsIDIgKiBBRFZfU0laRSwKKysgICAgICAgICAgICAgICAgICAgICAgICBpbm9kZS5pX3NpemUgLSAyICogQURWX1NJWkUsICJBRFYiKTsKKysgICAgICAgIGlmIChyZXR2YWwgPT0gLTEpCisrICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKysgICAgICAgIGlmIChyZXR2YWwgPT0gMiAqIEFEVl9TSVpFKSB7CisrICAgICAgICAgICAgcmV0dmFsID0gc3lzbGludXhfdmFsaWRhdGVfYWR2KHN5c2xpbnV4X2Fkdik7CisrICAgICAgICAgICAgLyogUmVhZCB0aGUgYWR2IHN1Y2Nlc3NmdWxseSAqLworKyAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gMCkKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrCisrICAgICAgICAvKiBDbG9zZSB0aGUgZmlsZSBpZiByZWFjaGVzIGhlcmUsIG90aGVyd2lzZSB3ZSBsZWF2ZSB0aGUgZmlsZQorKyAgICAgICAgICogb3BlbiBpbiBjYXNlIHdlIG5lZWQgd3JpdGUgaXQgKi8KKysgICAgICAgIG5lZWRfY2xvc2UgPSAyOworKyAgICAgICAgcmV0dmFsID0gZXh0MmZzX2ZpbGVfY2xvc2UoZTJfZmlsZSk7CisrICAgICAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZXJyb3Igd2hpbGUgY2xvc2luZyAlc1xuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgZmlsZW5hbWUpOworKyAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgaWYgKCFmb3VuZF9maWxlKSB7CisrICAgICAgICBpZiAob3B0LnVwZGF0ZV9vbmx5ID09IC0xKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogbm8gbGRsaW51eC5zeXMgb3IgZXh0bGludXguc3lzIGZvdW5kIG9uIHRoZSBkZXZpY2VcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0pOworKyAgICAgICAgICAgIHJldHVybiAtMTsKKysgICAgICAgIH0KKysgICAgICAgIHN5c2xpbnV4X3Jlc2V0X2FkdihzeXNsaW51eF9hZHYpOworKyAgICB9CisrCisrICAgIC8qIFRoZSBtb2RpZnlfYWR2IHdpbGwgcmVzZXQgdGhlIGFkdiBpZiBvcHQucmVzZXRfYWR2ICovCisrICAgIGlmIChtb2RpZnlfYWR2KCkgPCAwKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBlcnJvciB3aGlsZSBtb2RpZnlpbmcgYWR2XG4iLCBwcm9ncmFtKTsKKysgICAgICAgIHJldHZhbCA9IC0xOworKyAgICAgICAgZ290byBmYWlsOworKyAgICB9CisrCisrICAgIC8qIFdyaXRlIGFkdiBpZiB1cGRhdGVfb25seSA9PSAtMSBhbmQgZm91bmQgZmlsZSAqLworKyAgICBpZiAob3B0LnVwZGF0ZV9vbmx5ID09IC0xICYmIGZvdW5kX2ZpbGUpIHsKKysgICAgICAgIGlmIChleHRfZmlsZV93cml0ZShlMl9maWxlLCBzeXNsaW51eF9hZHYsIDIgKiBBRFZfU0laRSAsCisrICAgICAgICAgICAgICAgICAgICAgICAgaW5vZGUuaV9zaXplIC0gMiAqIEFEVl9TSVpFKSA9PSAtMSkKKysgICAgICAgICAgICAgICAgZ290byBmYWlsOworKyAgICB9CisrCisrZmFpbDoKKysgICAgaWYgKG5lZWRfY2xvc2UgIT0gMikKKysgICAgICAgICh2b2lkKSBleHQyZnNfZmlsZV9jbG9zZShlMl9maWxlKTsKKysgICAgcmV0dXJuIHJldHZhbDsKKyB9CisgCisgLyogV3JpdGUgZmlsZXMsIGFkdiwgYm9vdCBzZWN0b3IgKi8KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwNi1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtd3JpdGVfdG9fZXh0LWFuZC1hZGQtc3lzbGluLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwNi1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtd3JpdGVfdG9fZXh0LWFuZC1hZGQtc3lzbGluLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYTg3MjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA2LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC13cml0ZV90b19leHQtYW5kLWFkZC1zeXNsaW4ucGF0Y2gKQEAgLTAsMCArMSwyMTUgQEAKK0Zyb20gOTIyZTU2YzEwZTM2ZDg3Njc3NzU4MGM4NGRhZWY5YTY2YmVhNjUyNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAzMSBEZWMgMjAxNCAxNzoyMDo0MyArMDgwMAorU3ViamVjdDogW1BBVENIIDYvOV0gbGludXgvc3lzbGludXg6IGltcGxlbWVudCB3cml0ZV90b19leHQoKSBhbmQgYWRkCisgc3lzbGludXhleHQuYworCisqIFRoZSB3cml0ZV90b19leHQoKSB3cml0ZSBmaWxlIHRvIHRoZSBleHRYIGRldmljZSwgYW5kIGhhbmRsZSB0aGUgYm9vdAorICBzZWN0b3IuCisqIFRoZSBzeXNsaW51eGV4dC5jIGlzIHVzZWQgZm9yIHBsYWNpbmcgdGhlIGNvZGUgd2hpY2ggYXJlIHVzZWQgYnkKKyAgZXh0bGludXggYW5kIHN5c2xpbnV4ICh3aGljaCBpcyBzeXNsaW51eF9wYXRjaF9ib290c2VjdCgpKS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitUZXN0ZWQtYnk6IER1IERvbHBoZXIgPGRvbHBoZXIuZHVAaW50ZWwuY29tPgorLS0tCisgbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmMgfCAgIDcgKysrCisgbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmggfCAgIDUgKysKKyBsaW51eC9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgMyArLQorIGxpbnV4L3N5c2xpbnV4LmMgICAgICAgICAgIHwgMTE4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDQgZmlsZXMgY2hhbmdlZCwgMTMyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmgKKworZGlmZiAtLWdpdCBhL2xpYmluc3RhbGxlci9zeXNsaW51eGV4dC5jIGIvbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iYjU0Y2VmCistLS0gL2Rldi9udWxsCisrKysgYi9saWJpbnN0YWxsZXIvc3lzbGludXhleHQuYworQEAgLTAsMCArMSw3IEBACisrI2RlZmluZSBfR05VX1NPVVJDRQorKworKy8qIFBhdGNoIHN5c2xpbnV4X2Jvb3RzZWN0ICovCisrdm9pZCBzeXNsaW51eF9wYXRjaF9ib290c2VjdChpbnQgZGV2X2ZkKQorK3sKKyt9CisrCitkaWZmIC0tZ2l0IGEvbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmggYi9saWJpbnN0YWxsZXIvc3lzbGludXhleHQuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjhhYmQ4YjkKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYmluc3RhbGxlci9zeXNsaW51eGV4dC5oCitAQCAtMCwwICsxLDUgQEAKKysjaWZuZGVmIEVYVDJfU1VQRVJfT0ZGU0VUCisrI2RlZmluZSBFWFQyX1NVUEVSX09GRlNFVCAxMDI0CisrI2VuZGlmCisrCisrdm9pZCBzeXNsaW51eF9wYXRjaF9ib290c2VjdChpbnQgZGV2X2ZkKTsKK2RpZmYgLS1naXQgYS9saW51eC9NYWtlZmlsZSBiL2xpbnV4L01ha2VmaWxlCitpbmRleCBhYzFhYzU4Li4zYjIzODY3IDEwMDY0NAorLS0tIGEvbGludXgvTWFrZWZpbGUKKysrKyBiL2xpbnV4L01ha2VmaWxlCitAQCAtMzAsNyArMzAsOCBAQCBTUkNTICAgICA9IHN5c2xpbnV4LmMgXAorICAgICAgICAgICAgLi4vbGliaW5zdGFsbGVyL3N5c2x4bW9kLmMgXAorIAkgICAuLi9saWJpbnN0YWxsZXIvYm9vdHNlY3RfYmluLmMgXAorIAkgICAuLi9saWJpbnN0YWxsZXIvbGRsaW51eGMzMl9iaW4uYyBcCistCSAgIC4uL2xpYmluc3RhbGxlci9sZGxpbnV4X2Jpbi5jCisrCSAgIC4uL2xpYmluc3RhbGxlci9sZGxpbnV4X2Jpbi5jIFwKKysJICAgLi4vbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmMKKyBPQkpTCSA9ICQocGF0c3Vic3QgJS5jLCUubywkKG5vdGRpciAkKFNSQ1MpKSkKKyAKKyAuU1VGRklYRVM6IC5jIC5vIC5pIC5zIC5TCitkaWZmIC0tZ2l0IGEvbGludXgvc3lzbGludXguYyBiL2xpbnV4L3N5c2xpbnV4LmMKK2luZGV4IGRlNWQyNzIuLmYwYzk3YTggMTAwNzU1CistLS0gYS9saW51eC9zeXNsaW51eC5jCisrKysgYi9saW51eC9zeXNsaW51eC5jCitAQCAtNDYsNiArNDYsNyBAQAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyAjaW5jbHVkZSA8c3lzL21vdW50Lmg+CisrI2luY2x1ZGUgPHRpbWUuaD4KKyAKKyAjaW5jbHVkZSAibGludXhpb2N0bC5oIgorIAorQEAgLTcyLDYgKzczLDcgQEAKKyAjaW5jbHVkZSAic3lzbHhmcy5oIgorICNpbmNsdWRlICJzZXRhZHYuaCIKKyAjaW5jbHVkZSAic3lzbHhvcHQuaCIgLyogdW5pZmllZCBvcHRpb25zICovCisrI2luY2x1ZGUgInN5c2xpbnV4ZXh0LmgiCisgI2luY2x1ZGUgPGV4dDJmcy9leHQyZnMuaD4KKyAKKyBleHRlcm4gY29uc3QgY2hhciAqcHJvZ3JhbTsJLyogTmFtZSBvZiBwcm9ncmFtICovCitAQCAtNDE5LDYgKzQyMSwxMiBAQCBpbnQgaW5zdGFsbF9ib290YmxvY2soaW50IGZkLCBjb25zdCBjaGFyICpkZXZpY2UpCisgeworIH0KKyAKKysvKiBDb25zdHJ1Y3QgdGhlIGJvb3QgZmlsZSBtYXAgKi8KKytpbnQgZXh0X2NvbnN0cnVjdF9zZWN0bWFwX2ZzKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IG5ld2lubywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rvcl90ICpzZWN0b3JzLCBpbnQgbnNlY3QpCisreworK30KKysKKyBzdGF0aWMgaW50IGhhbmRsZV9hZHZfb25fZXh0KHZvaWQpCisgeworICAgICBpbnQgICAgICAgICAgICAgICAgIGksIHJldHZhbCwgZm91bmRfZmlsZTsKK0BAIC01MjQsNiArNTMyLDExNiBAQCBmYWlsOgorIHN0YXRpYyBpbnQgd3JpdGVfdG9fZXh0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlfZmxhZ3MsIGludCBkZXZfZmQsIGNvbnN0IGNoYXIgKnN1YmRpcikKKyB7CisrICAgIGV4dDJfaW5vX3QgICAgICAgICAgbmV3aW5vOworKyAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAgIGlub2RlOworKyAgICBpbnQgICAgICAgICAgICAgICAgIHJldHZhbCwgaSwgbW9kYnl0ZXMsIG5zZWN0OworKyAgICBleHQyX2ZpbGVfdCAgICAgICAgIGUyX2ZpbGU7CisrICAgIHNlY3Rvcl90ICAgICAgICAgICAgKnNlY3RvcnM7CisrCisrICAgIC8qIFJlbW92ZSBpdCBpZiBpdCBpcyBhbHJlYWR5IGV4aXN0cyAqLworKyAgICByZXR2YWwgPSBleHQyZnNfbmFtZWkoZTJmcywgcm9vdCwgY3dkLCBmaWxlbmFtZSwgJm5ld2lubyk7CisrICAgIGlmIChyZXR2YWwgPT0gMCkgeworKyAgICAgICAgcmV0dmFsID0gZXh0MmZzX3VubGluayhlMmZzLCBjd2QsIGZpbGVuYW1lLCBuZXdpbm8sIDApOworKyAgICAgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGZhaWxlZCB0byB1bmxpbms6ICVzXG4iLCBwcm9ncmFtLCBmaWxlbmFtZSk7CisrICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICAvKiBDcmVhdGUgbmV3IGlub2RlICovCisrICAgIHJldHZhbCA9IGV4dDJmc19uZXdfaW5vZGUoZTJmcywgY3dkLCAwMTA3NTUsIDAsICZuZXdpbm8pOworKyAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBFUlJPUjogZmFpbGVkIHRvIGNyZWF0ZSBpbm9kZSBmb3I6ICVzXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBmaWxlbmFtZSk7CisrICAgICAgICByZXR1cm4gcmV0dmFsOworKyAgICB9CisrCisrICAgIC8qIExpbmsgdGhlIGlub2RlIGFuZCB0aGUgZmlsZW5hbWUgKi8KKysgICAgcmV0dmFsID0gZXh0MmZzX2xpbmsoZTJmcywgY3dkLCBmaWxlbmFtZSwgbmV3aW5vLCBFWFQyX0ZUX1JFR19GSUxFKTsKKysgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogRVJST1I6IGZhaWxlZCB0byBsaW5rIGlub2RlIGZvcjogJXMuXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBmaWxlbmFtZSk7CisrICAgICAgICByZXR1cm4gcmV0dmFsOworKyAgICB9CisrCisrICAgIGlmIChleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGUyZnMtPmlub2RlX21hcCwgbmV3aW5vKSkKKysgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogd2FybmluZzogaW5vZGUgYWxyZWFkeSBzZXQgJXMuXG4iLAorKyAgICAgICAgICAgIHByb2dyYW0sIGZpbGVuYW1lKTsKKysKKysgICAgICAgIGV4dDJmc19pbm9kZV9hbGxvY19zdGF0czIoZTJmcywgbmV3aW5vLCArMSwgMCk7CisrICAgICAgICBtZW1zZXQoJmlub2RlLCAwLCBzaXplb2YoaW5vZGUpKTsKKysJaW5vZGUuaV9tb2RlID0gTElOVVhfU19JRlJFRyB8IExJTlVYX1NfSVJVU1IgfCBMSU5VWF9TX0lSR1JQCisrICAgICAgICAgICAgICAgICAgICAgICAgfCBMSU5VWF9TX0lST1RIOworKwlpbm9kZS5pX2ZsYWdzIHw9IGlfZmxhZ3M7CisrICAgICAgICBpbm9kZS5pX2F0aW1lID0gaW5vZGUuaV9jdGltZSA9IGlub2RlLmlfbXRpbWUgPQorKyAgICAgICAgICAgIGUyZnMtPm5vdyA/IGUyZnMtPm5vdyA6IHRpbWUoMCk7CisrICAgICAgICBpbm9kZS5pX2xpbmtzX2NvdW50ID0gMTsKKysgICAgICAgIGlmIChlMmZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYKKysgICAgICAgICAgICBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UUykgeworKyAgICAgICAgICAgIHN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIgKmVoOworKworKyAgICAgICAgICAgIGVoID0gKHN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIgKikgJmlub2RlLmlfYmxvY2tbMF07CisrICAgICAgICAgICAgZWgtPmVoX2RlcHRoID0gMDsKKysgICAgICAgICAgICBlaC0+ZWhfZW50cmllcyA9IDA7CisrICAgICAgICAgICAgZWgtPmVoX21hZ2ljID0gZXh0MmZzX2NwdV90b19sZTE2KEVYVDNfRVhUX01BR0lDKTsKKysgICAgICAgICAgICBpID0gKHNpemVvZihpbm9kZS5pX2Jsb2NrKSAtIHNpemVvZigqZWgpKSAvCisrICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgZXh0M19leHRlbnQpOworKyAgICAgICAgICAgIGVoLT5laF9tYXggPSBleHQyZnNfY3B1X3RvX2xlMTYoaSk7CisrICAgICAgICAgICAgaW5vZGUuaV9mbGFncyB8PSBFWFQ0X0VYVEVOVFNfRkw7CisrICAgIH0KKysKKysgICAgcmV0dmFsID0gZXh0MmZzX3dyaXRlX25ld19pbm9kZShlMmZzLCBuZXdpbm8sICZpbm9kZSk7CisrICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEVSUk9SOiB3aGlsZSB3cml0dGluZyBpbm9kZSAlZC5cbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIG5ld2lubyk7CisrICAgICAgICByZXR1cm4gMTsKKysgICAgfQorKworKyAgICByZXR2YWwgPSBleHQyZnNfZmlsZV9vcGVuKGUyZnMsIG5ld2lubywgRVhUMl9GSUxFX1dSSVRFLCAmZTJfZmlsZSk7CisrICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEVSUk9SOiBmYWlsZWQgdG8gb3BlbiAlcy5cbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGZpbGVuYW1lKTsKKysgICAgICAgIHJldHVybiAxOworKyAgICB9CisrCisrICAgIC8qIFdyaXRlIHRvIGZpbGUgKi8KKysgICAgaWYgKGV4dF9maWxlX3dyaXRlKGUyX2ZpbGUsIHN0ciwgbGVuZ3RoLCAwKSA9PSAtMSkKKysgICAgICAgIGdvdG8gZmFpbDsKKysKKysgICAgaWYgKHN0cmNtcChmaWxlbmFtZSwgImxkbGludXguc3lzIikgPT0gMCkgeworKyAgICAgICAgLyogV3JpdGUgQURWICovCisrICAgICAgICBpZiAoZXh0X2ZpbGVfd3JpdGUoZTJfZmlsZSwgc3lzbGludXhfYWR2LCAyICogQURWX1NJWkUsCisrICAgICAgICAgICAgICAgIGJvb3RfaW1hZ2VfbGVuKSA9PSAtMSkKKysgICAgICAgICAgICBnb3RvIGZhaWw7CisrCisrICAgICAgICAvKiBQYXRjaCBzeXNsaW51eF9ib290c2VjdCAqLworKyAgICAgICAgc3lzbGludXhfcGF0Y2hfYm9vdHNlY3QoZGV2X2ZkKTsKKysKKysgICAgICAgIC8qIFBhdGNoIGxkbGludXguc3lzICovCisrICAgICAgICBuc2VjdCA9IChib290X2ltYWdlX2xlbiArIFNFQ1RPUl9TSVpFIC0gMSkgPj4gU0VDVE9SX1NISUZUOworKyAgICAgICAgbnNlY3QgKz0gMjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBUd28gc2VjdG9ycyBmb3IgdGhlIEFEViAqLworKyAgICAgICAgc2VjdG9ycyA9IGFsbG9jYShzaXplb2Yoc2VjdG9yX3QpICogbnNlY3QpOworKyAgICAgICAgbWVtc2V0KHNlY3RvcnMsIDAsIG5zZWN0ICogc2l6ZW9mICpzZWN0b3JzKTsKKysgICAgICAgIC8qIFRoZSBzZWN0b3JzIHdpbGwgYmUgbW9kaWZpZWQgYW5kIHVzZWQgYnkgc3lzbGludXhfcGF0Y2goKSAqLworKyAgICAgICAgcmV0dmFsID0gZXh0X2NvbnN0cnVjdF9zZWN0bWFwX2ZzKGUyZnMsIG5ld2lubywgc2VjdG9ycywgbnNlY3QpOworKyAgICAgICAgaWYgKHJldHZhbCkKKysgICAgICAgICAgICBnb3RvIGZhaWw7CisrCisrICAgICAgICAvKiBDcmVhdGUgdGhlIG1vZGlmaWVkIGltYWdlIGluIG1lbW9yeSAqLworKyAgICAgICAgbW9kYnl0ZXMgPSBzeXNsaW51eF9wYXRjaChzZWN0b3JzLCBuc2VjdCwgb3B0LnN0dXBpZF9tb2RlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQucmFpZF9tb2RlLCBzdWJkaXIsIE5VTEwpOworKworKyAgICAgICAgLyogUmV3cml0ZSB0aGUgZmlyc3QgbW9kYnl0ZXMgb2YgbGRsaW51eC5zeXMgKi8KKysgICAgICAgIGlmIChleHRfZmlsZV93cml0ZShlMl9maWxlLCBzdHIsIG1vZGJ5dGVzLCAwKSA9PSAtMSkgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEVSUk9SOiBmYWlsZWQgdG8gcGF0Y2ggJXMuXG4iLCBwcm9ncmFtLAorKyAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUpOworKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKysgICAgICAgIH0KKysgICAgfQorKworK2ZhaWw6CisrICAgICh2b2lkKSBleHQyZnNfZmlsZV9jbG9zZShlMl9maWxlKTsKKysgICAgcmV0dXJuIHJldHZhbDsKKyB9CisgCisgLyogVGhlIGluc3RhbGwgZnVuYyBmb3IgZXh0MiwgZXh0MyBhbmQgZXh0NCAqLworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA3LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1leHRfY29uc3RydWN0X3NlY3RtYXBfZnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA3LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1leHRfY29uc3RydWN0X3NlY3RtYXBfZnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkxMzgxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDctbGludXgtc3lzbGludXgtaW1wbGVtZW50LWV4dF9jb25zdHJ1Y3Rfc2VjdG1hcF9mcy5wYXRjaApAQCAtMCwwICsxLDg0IEBACitGcm9tIGE5NWI4MzFlMThkZDEyM2Y4NTliYzVlNmM0Y2VjZGNjMDE4NGVlMzcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMiBKYW4gMjAxNSAxMjoxODowMiArMDgwMAorU3ViamVjdDogW1BBVENIIDcvOV0gbGludXgvc3lzbGludXg6IGltcGxlbWVudCBleHRfY29uc3RydWN0X3NlY3RtYXBfZnMoKQorCitUaGUgZXh0X2NvbnN0cnVjdF9zZWN0bWFwX2ZzKCkgY29uc3R1Y3RzIHRoZSBzZWN0b3IgYWNjb3JkaW5nIHRvIHRoZQorYm1hcC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitUZXN0ZWQtYnk6IER1IERvbHBoZXIgPGRvbHBoZXIuZHVAaW50ZWwuY29tPgorLS0tCisgbGludXgvc3lzbGludXguYyB8IDUwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDUwIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpbnV4L3N5c2xpbnV4LmMgYi9saW51eC9zeXNsaW51eC5jCitpbmRleCBmMGM5N2E4Li5jNzQxNzUwIDEwMDc1NQorLS0tIGEvbGludXgvc3lzbGludXguYworKysrIGIvbGludXgvc3lzbGludXguYworQEAgLTQyMSwxMCArNDIxLDYwIEBAIGludCBpbnN0YWxsX2Jvb3RibG9jayhpbnQgZmQsIGNvbnN0IGNoYXIgKmRldmljZSkKKyB7CisgfQorIAorKy8qIFRoZSBmaWxlJ3MgYmxvY2sgY291bnQgKi8KKytpbnQgYmxvY2tfY291bnQgPSAwOworK3N0YXRpYyBpbnQgZ2V0X2Jsb2NrX2NvdW50KGV4dDJfZmlsc3lzIGZzIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKysJCQkgICAgIGJsazY0X3QgKmJsb2NrbnIgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorKwkJCSAgICAgZTJfYmxrY250X3QgYmxvY2tjbnQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorKwkJCSAgICAgYmxrNjRfdCByZWZfYmxvY2sgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorKwkJCSAgICAgaW50IHJlZl9vZmZzZXQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorKwkJCSAgICAgdm9pZCAqcHJpdmF0ZSBFWFQyRlNfQVRUUigodW51c2VkKSkpCisreworKyAgICBibG9ja19jb3VudCsrOworKyAgICByZXR1cm4gMDsKKyt9CisrCisgLyogQ29uc3RydWN0IHRoZSBib290IGZpbGUgbWFwICovCisgaW50IGV4dF9jb25zdHJ1Y3Rfc2VjdG1hcF9mcyhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBuZXdpbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0b3JfdCAqc2VjdG9ycywgaW50IG5zZWN0KQorIHsKKysgICAgYmxrNjRfdCAgICAgICAgICAgICBwYmxrLCBibGtzaXplLCBibGsgPSAwOworKyAgICBzZWN0b3JfdCAgICAgICAgICAgIHNlYzsKKysgICAgdW5zaWduZWQgaW50ICAgICAgICBpOworKyAgICBpbnQgICAgICAgICAgICAgICAgIHJldHZhbDsKKysKKysgICAgYmxrc2l6ZSA9IGZzLT5ibG9ja3NpemU7CisrICAgIGJsa3NpemUgPj49IFNFQ1RPUl9TSElGVDsKKysKKysgICAgLyogR2V0IHRoZSB0b3RhbCBibG9ja3Mgbm8uICovCisrICAgIHJldHZhbCA9IGV4dDJmc19ibG9ja19pdGVyYXRlMyhmcywgbmV3aW5vLCBCTE9DS19GTEFHX1JFQURfT05MWSwKKysgICAgICAgICAgICBOVUxMLCBnZXRfYmxvY2tfY291bnQsIE5VTEwpOworKyAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBFUlJPUjogZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKCkgZmFpbGVkLlxuIiwgcHJvZ3JhbSk7CisrICAgICAgICByZXR1cm4gLTE7CisrICAgIH0KKysKKysgICAgd2hpbGUgKG5zZWN0KSB7CisrICAgICAgICBpZiAoYmxvY2tfY291bnQtLSA9PSAwKQorKyAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgLyogR2V0IHRoZSBwaHlzaWNhbCBibG9jayBuby4gKGJtYXApICovCisrICAgICAgICByZXR2YWwgPSBleHQyZnNfYm1hcDIoZnMsIG5ld2lubywgMCwgMCwgMCwgYmxrLCAwLCAmcGJsayk7CisrICAgICAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogRVJST1I6IGV4dDJmc19ibWFwMigpIGZhaWxlZC5cbiIsIHByb2dyYW0pOworKyAgICAgICAgICAgIHJldHVybiAtMTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGJsaysrOworKyAgICAgICAgc2VjID0gKHNlY3Rvcl90KXBibGsgKiBibGtzaXplOworKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGJsa3NpemU7IGkrKykgeworKyAgICAgICAgICAgICpzZWN0b3JzKysgPSBzZWMrKzsKKysgICAgICAgICAgICBpZiAoISAtLW5zZWN0KQorKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICByZXR1cm4gMDsKKyB9CisgCisgc3RhdGljIGludCBoYW5kbGVfYWR2X29uX2V4dCh2b2lkKQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA4LWxpYmluc3RhbGxlci1zeXNsaW51eGV4dC1pbXBsZW1lbnQtc3lzbGludXhfcGF0Y2hfYm8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA4LWxpYmluc3RhbGxlci1zeXNsaW51eGV4dC1pbXBsZW1lbnQtc3lzbGludXhfcGF0Y2hfYm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQwMGM5OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDgtbGliaW5zdGFsbGVyLXN5c2xpbnV4ZXh0LWltcGxlbWVudC1zeXNsaW51eF9wYXRjaF9iby5wYXRjaApAQCAtMCwwICsxLDQyNyBAQAorRnJvbSA3OGQ3NmI4N2E0Yjg1NWU2YjY2MWFlNDU3MjgzYTYzZjM4NWMwNGM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDIgSmFuIDIwMTUgMTI6MjY6NDYgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCA4LzldIGxpYmluc3RhbGxlci9zeXNsaW51eGV4dDogaW1wbGVtZW50Cisgc3lzbGludXhfcGF0Y2hfYm9vdHNlY3QoKQorCitNb3ZlIHRoZSByZWxhdGVkIGZyb20gZXh0bGludXgvbWFpbi5jIHRvIGxpYmluc3RhbGxlci9zeXNsaW51eGV4dC5jLCB0aGUKK3N5c2xpbnV4X3BhdGNoX2Jvb3RzZWN0KCkgYXJlIHVzZWQgYnkgYm90aCBleHRsaW51eC9tYWluLmMgYW5kCitsaW51eC9zeXNsaW51eC5jLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Rlc3RlZC1ieTogRHUgRG9scGhlciA8ZG9scGhlci5kdUBpbnRlbC5jb20+CistLS0KKyBleHRsaW51eC9NYWtlZmlsZSAgICAgICAgICB8ICAgMyArLQorIGV4dGxpbnV4L21haW4uYyAgICAgICAgICAgIHwgMTY3ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmMgfCAxNzAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCAxNzUgaW5zZXJ0aW9ucygrKSwgMTY1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZXh0bGludXgvTWFrZWZpbGUgYi9leHRsaW51eC9NYWtlZmlsZQoraW5kZXggMDJkMWRiNS4uOTBkZDkyZiAxMDA2NDQKKy0tLSBhL2V4dGxpbnV4L01ha2VmaWxlCisrKysgYi9leHRsaW51eC9NYWtlZmlsZQorQEAgLTMxLDcgKzMxLDggQEAgU1JDUyAgICAgPSBtYWluLmMgXAorIAkgICAuLi9saWJpbnN0YWxsZXIvYWR2aW8uYyBcCisgCSAgIC4uL2xpYmluc3RhbGxlci9ib290c2VjdF9iaW4uYyBcCisgCSAgIC4uL2xpYmluc3RhbGxlci9sZGxpbnV4YzMyX2Jpbi5jIFwKKy0JICAgLi4vbGliaW5zdGFsbGVyL2xkbGludXhfYmluLmMKKysJICAgLi4vbGliaW5zdGFsbGVyL2xkbGludXhfYmluLmMgXAorKwkgICAuLi9saWJpbnN0YWxsZXIvc3lzbGludXhleHQuYworIE9CSlMJID0gJChwYXRzdWJzdCAlLmMsJS5vLCQobm90ZGlyICQoU1JDUykpKQorIAorIC5TVUZGSVhFUzogLmMgLm8gLmkgLnMgLlMKK2RpZmYgLS1naXQgYS9leHRsaW51eC9tYWluLmMgYi9leHRsaW51eC9tYWluLmMKK2luZGV4IDA5NzQwYmQuLjZmZTAyNmUgMTAwNjQ0CistLS0gYS9leHRsaW51eC9tYWluLmMKKysrKyBiL2V4dGxpbnV4L21haW4uYworQEAgLTYwLDYgKzYwLDcgQEAKKyAjaW5jbHVkZSAic2V0YWR2LmgiCisgI2luY2x1ZGUgInN5c2x4b3B0LmgiIC8qIHVuaWZpZWQgb3B0aW9ucyAqLworICNpbmNsdWRlICJtb3VudGluZm8uaCIKKysjaW5jbHVkZSAic3lzbGludXhleHQuaCIKKyAKKyAjaWZkZWYgREVCVUcKKyAjIGRlZmluZSBkcHJpbnRmIHByaW50ZgorQEAgLTY3LDEwICs2OCw2IEBACisgIyBkZWZpbmUgZHByaW50ZiguLi4pICgodm9pZCkwKQorICNlbmRpZgorIAorLSNpZm5kZWYgRVhUMl9TVVBFUl9PRkZTRVQKKy0jZGVmaW5lIEVYVDJfU1VQRVJfT0ZGU0VUIDEwMjQKKy0jZW5kaWYKKy0KKyAvKiBTaW5jZSB3ZSBoYXZlIHVudXNlZCAyMDQ4IGJ5dGVzIGluIHRoZSBwcmltYXJ5IEFHIG9mIGFuIFhGUyBwYXJ0aXRpb24sCisgICogd2Ugd2lsbCB1c2UgdGhlIGZpcnN0IDB+NTEyIGJ5dGVzIHN0YXJ0aW5nIGZyb20gMjA0OCBmb3IgdGhlIFN5c2xpbnV4CisgICogYm9vdCBzZWN0b3IuCitAQCAtOTIsMTM2ICs4OSw2IEBAIHN0YXRpYyBjaGFyIHN1YnZvbFtCVFJGU19TVUJWT0xfTUFYXTsKKyAJCQkgIC0gMipBRFZfU0laRSkKKyAKKyAvKgorLSAqIEdldCB0aGUgc2l6ZSBvZiBhIGJsb2NrIGRldmljZQorLSAqLworLXN0YXRpYyB1aW50NjRfdCBnZXRfc2l6ZShpbnQgZGV2ZmQpCisteworLSAgICB1aW50NjRfdCBieXRlczsKKy0gICAgdWludDMyX3Qgc2VjdHM7CistICAgIHN0cnVjdCBzdGF0IHN0OworLQorLSNpZmRlZiBCTEtHRVRTSVpFNjQKKy0gICAgaWYgKCFpb2N0bChkZXZmZCwgQkxLR0VUU0laRTY0LCAmYnl0ZXMpKQorLQlyZXR1cm4gYnl0ZXM7CistI2VuZGlmCistICAgIGlmICghaW9jdGwoZGV2ZmQsIEJMS0dFVFNJWkUsICZzZWN0cykpCistCXJldHVybiAodWludDY0X3QpIHNlY3RzIDw8IDk7CistICAgIGVsc2UgaWYgKCFmc3RhdChkZXZmZCwgJnN0KSAmJiBzdC5zdF9zaXplKQorLQlyZXR1cm4gc3Quc3Rfc2l6ZTsKKy0gICAgZWxzZQorLQlyZXR1cm4gMDsKKy19CistCistLyoKKy0gKiBHZXQgZGV2aWNlIGdlb21ldHJ5IGFuZCBwYXJ0aXRpb24gb2Zmc2V0CistICovCistc3RydWN0IGdlb21ldHJ5X3RhYmxlIHsKKy0gICAgdWludDY0X3QgYnl0ZXM7CistICAgIHN0cnVjdCBoZF9nZW9tZXRyeSBnOworLX07CistCistc3RhdGljIGludCBzeXNmc19nZXRfb2Zmc2V0KGludCBkZXZmZCwgdW5zaWduZWQgbG9uZyAqc3RhcnQpCisteworLSAgICBzdHJ1Y3Qgc3RhdCBzdDsKKy0gICAgY2hhciBzeXNmc19uYW1lWzEyOF07CistICAgIEZJTEUgKmY7CistICAgIGludCBydjsKKy0KKy0gICAgaWYgKGZzdGF0KGRldmZkLCAmc3QpKQorLQlyZXR1cm4gLTE7CistCistICAgIGlmICgoc2l6ZV90KXNucHJpbnRmKHN5c2ZzX25hbWUsIHNpemVvZiBzeXNmc19uYW1lLAorLQkJCSAiL3N5cy9kZXYvYmxvY2svJXU6JXUvc3RhcnQiLAorLQkJCSBtYWpvcihzdC5zdF9yZGV2KSwgbWlub3Ioc3Quc3RfcmRldikpCistCT49IHNpemVvZiBzeXNmc19uYW1lKQorLQlyZXR1cm4gLTE7CistCistICAgIGYgPSBmb3BlbihzeXNmc19uYW1lLCAiciIpOworLSAgICBpZiAoIWYpCistCXJldHVybiAtMTsKKy0KKy0gICAgcnYgPSBmc2NhbmYoZiwgIiVsdSIsIHN0YXJ0KTsKKy0gICAgZmNsb3NlKGYpOworLQorLSAgICByZXR1cm4gKHJ2ID09IDEpID8gMCA6IC0xOworLX0KKy0KKy0vKiBTdGFuZGFyZCBmbG9wcHkgZGlzayBnZW9tZXRyaWVzLCBwbHVzIExTLTEyMC4gIFppcGRpc2sgZ2VvbWV0cnkKKy0gICAoeC82NC8zMikgaXMgdGhlIGZpbmFsIGZhbGxiYWNrLiAgSSBkb24ndCBrbm93IHdoYXQgTFMtMjQwIGhhcworLSAgIGFzIGl0cyBnZW9tZXRyeSwgc2luY2UgSSBkb24ndCBoYXZlIG9uZSBhbmQgZG9uJ3Qga25vdyBhbnlvbmUgdGhhdCBkb2VzLAorLSAgIGFuZCBHb29nbGUgd2Fzbid0IGhlbHBmdWwuLi4gKi8KKy1zdGF0aWMgY29uc3Qgc3RydWN0IGdlb21ldHJ5X3RhYmxlIHN0YW5kYXJkX2dlb21ldHJpZXNbXSA9IHsKKy0gICAgezM2MCAqIDEwMjQsIHsyLCA5LCA0MCwgMH19LAorLSAgICB7NzIwICogMTAyNCwgezIsIDksIDgwLCAwfX0sCistICAgIHsxMjAwICogMTAyNCwgezIsIDE1LCA4MCwgMH19LAorLSAgICB7MTQ0MCAqIDEwMjQsIHsyLCAxOCwgODAsIDB9fSwKKy0gICAgezE2ODAgKiAxMDI0LCB7MiwgMjEsIDgwLCAwfX0sCistICAgIHsxNzIyICogMTAyNCwgezIsIDIxLCA4MCwgMH19LAorLSAgICB7Mjg4MCAqIDEwMjQsIHsyLCAzNiwgODAsIDB9fSwKKy0gICAgezM4NDAgKiAxMDI0LCB7MiwgNDgsIDgwLCAwfX0sCistICAgIHsxMjMyNjQgKiAxMDI0LCB7OCwgMzIsIDk2MywgMH19LAkvKiBMUzEyMCAqLworLSAgICB7MCwgezAsIDAsIDAsIDB9fQorLX07CistCistaW50IGdldF9nZW9tZXRyeShpbnQgZGV2ZmQsIHVpbnQ2NF90IHRvdGFsYnl0ZXMsIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKQorLXsKKy0gICAgc3RydWN0IGZsb3BweV9zdHJ1Y3QgZmRfc3RyOworLSAgICBzdHJ1Y3QgbG9vcF9pbmZvIGxpOworLSAgICBzdHJ1Y3QgbG9vcF9pbmZvNjQgbGk2NDsKKy0gICAgY29uc3Qgc3RydWN0IGdlb21ldHJ5X3RhYmxlICpncDsKKy0gICAgaW50IHJ2ID0gMDsKKy0KKy0gICAgbWVtc2V0KGdlbywgMCwgc2l6ZW9mICpnZW8pOworLQorLSAgICBpZiAoIWlvY3RsKGRldmZkLCBIRElPX0dFVEdFTywgZ2VvKSkgeworLQlnb3RvIG9rOworLSAgICB9IGVsc2UgaWYgKCFpb2N0bChkZXZmZCwgRkRHRVRQUk0sICZmZF9zdHIpKSB7CistCWdlby0+aGVhZHMgPSBmZF9zdHIuaGVhZDsKKy0JZ2VvLT5zZWN0b3JzID0gZmRfc3RyLnNlY3Q7CistCWdlby0+Y3lsaW5kZXJzID0gZmRfc3RyLnRyYWNrOworLQlnZW8tPnN0YXJ0ID0gMDsKKy0JZ290byBvazsKKy0gICAgfQorLQorLSAgICAvKiBEaWRuJ3Qgd29yay4gIExldCdzIHNlZSBpZiB0aGlzIGlzIG9uZSBvZiB0aGUgc3RhbmRhcmQgZ2VvbWV0cmllcyAqLworLSAgICBmb3IgKGdwID0gc3RhbmRhcmRfZ2VvbWV0cmllczsgZ3AtPmJ5dGVzOyBncCsrKSB7CistCWlmIChncC0+Ynl0ZXMgPT0gdG90YWxieXRlcykgeworLQkgICAgbWVtY3B5KGdlbywgJmdwLT5nLCBzaXplb2YgKmdlbyk7CistCSAgICBnb3RvIG9rOworLQl9CistICAgIH0KKy0KKy0gICAgLyogRGlkbid0IHdvcmsgZWl0aGVyLi4uIGFzc2lnbiBhIGdlb21ldHJ5IG9mIDY0IGhlYWRzLCAzMiBzZWN0b3JzOyB0aGlzIGlzCistICAgICAgIHdoYXQgemlwZGlza3MgdXNlLCBzbyB0aGlzIHdvdWxkIGhlbHAgaWYgc29tZW9uZSBoYXMgYSBVU0Iga2V5IHRoYXQKKy0gICAgICAgdGhleSdyZSBib290aW5nIGluIFVTQi1aSVAgbW9kZS4gKi8KKy0KKy0gICAgZ2VvLT5oZWFkcyA9IG9wdC5oZWFkcyA/IDogNjQ7CistICAgIGdlby0+c2VjdG9ycyA9IG9wdC5zZWN0b3JzID8gOiAzMjsKKy0gICAgZ2VvLT5jeWxpbmRlcnMgPSB0b3RhbGJ5dGVzIC8gKGdlby0+aGVhZHMgKiBnZW8tPnNlY3RvcnMgPDwgU0VDVE9SX1NISUZUKTsKKy0gICAgZ2VvLT5zdGFydCA9IDA7CistCistICAgIGlmICghb3B0LnNlY3RvcnMgJiYgIW9wdC5oZWFkcykgeworLQlmcHJpbnRmKHN0ZGVyciwKKy0JCSJXYXJuaW5nOiB1bmFibGUgdG8gb2J0YWluIGRldmljZSBnZW9tZXRyeSAoZGVmYXVsdGluZyB0byAlZCBoZWFkcywgJWQgc2VjdG9ycylcbiIKKy0JCSIgICAgICAgICAob24gaGFyZCBkaXNrcywgdGhpcyBpcyB1c3VhbGx5IGhhcm1sZXNzLilcbiIsCistCQlnZW8tPmhlYWRzLCBnZW8tPnNlY3RvcnMpOworLQlydiA9IDE7CQkJLyogU3Vib3B0aW1hbCByZXN1bHQgKi8KKy0gICAgfQorLQorLW9rOgorLSAgICAvKiBJZiB0aGlzIGlzIGEgbG9vcGJhY2sgZGV2aWNlLCB0cnkgdG8gc2V0IHRoZSBzdGFydCAqLworLSAgICBpZiAoIWlvY3RsKGRldmZkLCBMT09QX0dFVF9TVEFUVVM2NCwgJmxpNjQpKQorLQlnZW8tPnN0YXJ0ID0gbGk2NC5sb19vZmZzZXQgPj4gU0VDVE9SX1NISUZUOworLSAgICBlbHNlIGlmICghaW9jdGwoZGV2ZmQsIExPT1BfR0VUX1NUQVRVUywgJmxpKSkKKy0JZ2VvLT5zdGFydCA9ICh1bnNpZ25lZCBpbnQpbGkubG9fb2Zmc2V0ID4+IFNFQ1RPUl9TSElGVDsKKy0gICAgZWxzZSBpZiAoIXN5c2ZzX2dldF9vZmZzZXQoZGV2ZmQsICZnZW8tPnN0YXJ0KSkgeworLQkvKiBPSyAqLworLSAgICB9CistCistICAgIHJldHVybiBydjsKKy19CistCistLyoKKyAgKiBRdWVyeSB0aGUgZGV2aWNlIGdlb21ldHJ5IGFuZCBwdXQgaXQgaW50byB0aGUgYm9vdCBzZWN0b3IuCisgICogTWFwIHRoZSBmaWxlIGFuZCBwdXQgdGhlIG1hcCBpbiB0aGUgYm9vdCBzZWN0b3IgYW5kIGZpbGUuCisgICogU3RpY2sgdGhlICJjdXJyZW50IGRpcmVjdG9yeSIgaW5vZGUgbnVtYmVyIGludG8gdGhlIGZpbGUuCitAQCAtMjMxLDExICs5OCw4IEBAIG9rOgorIHN0YXRpYyBpbnQgcGF0Y2hfZmlsZV9hbmRfYm9vdGJsb2NrKGludCBmZCwgY29uc3QgY2hhciAqZGlyLCBpbnQgZGV2ZmQpCisgeworICAgICBzdHJ1Y3Qgc3RhdCBkaXJzdCwgeGRzdDsKKy0gICAgc3RydWN0IGhkX2dlb21ldHJ5IGdlbzsKKyAgICAgc2VjdG9yX3QgKnNlY3RwOworLSAgICB1aW50NjRfdCB0b3RhbGJ5dGVzLCB0b3RhbHNlY3RvcnM7CisgICAgIGludCBuc2VjdDsKKy0gICAgc3RydWN0IGZhdF9ib290X3NlY3RvciAqc2JzOworICAgICBjaGFyICpkaXJwYXRoLCAqc3VicGF0aCwgKnhkaXJwYXRoOworICAgICBpbnQgcnY7CisgCitAQCAtMjc5LDMzICsxNDMsOCBAQCBzdGF0aWMgaW50IHBhdGNoX2ZpbGVfYW5kX2Jvb3RibG9jayhpbnQgZmQsIGNvbnN0IGNoYXIgKmRpciwgaW50IGRldmZkKQorICAgICAvKiBOb3cgc3VicGF0aCBzaG91bGQgY29udGFpbiB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgZnMgYmFzZSAqLworICAgICBkcHJpbnRmKCJzdWJwYXRoID0gJXNcbiIsIHN1YnBhdGgpOworIAorLSAgICB0b3RhbGJ5dGVzID0gZ2V0X3NpemUoZGV2ZmQpOworLSAgICBnZXRfZ2VvbWV0cnkoZGV2ZmQsIHRvdGFsYnl0ZXMsICZnZW8pOworLQorLSAgICBpZiAob3B0LmhlYWRzKQorLQlnZW8uaGVhZHMgPSBvcHQuaGVhZHM7CistICAgIGlmIChvcHQuc2VjdG9ycykKKy0JZ2VvLnNlY3RvcnMgPSBvcHQuc2VjdG9yczsKKy0KKy0gICAgLyogUGF0Y2ggdGhpcyBpbnRvIGEgZmFrZSBGQVQgc3VwZXJibG9jay4gIFRoaXMgaXNuJ3QgYmVjYXVzZQorLSAgICAgICBGQVQgaXMgYSBnb29kIGZvcm1hdCBpbiBhbnkgd2F5LCBpdCdzIGJlY2F1c2UgaXQgbGV0cyB0aGUKKy0gICAgICAgZWFybHkgYm9vdHN0cmFwIHNoYXJlIGNvZGUgd2l0aCB0aGUgRkFUIHZlcnNpb24uICovCistICAgIGRwcmludGYoImhlYWRzID0gJXUsIHNlY3QgPSAldVxuIiwgZ2VvLmhlYWRzLCBnZW8uc2VjdG9ycyk7CistCistICAgIHNicyA9IChzdHJ1Y3QgZmF0X2Jvb3Rfc2VjdG9yICopc3lzbGludXhfYm9vdHNlY3Q7CistCistICAgIHRvdGFsc2VjdG9ycyA9IHRvdGFsYnl0ZXMgPj4gU0VDVE9SX1NISUZUOworLSAgICBpZiAodG90YWxzZWN0b3JzID49IDY1NTM2KSB7CistCXNldF8xNigmc2JzLT5ic1NlY3RvcnMsIDApOworLSAgICB9IGVsc2UgeworLQlzZXRfMTYoJnNicy0+YnNTZWN0b3JzLCB0b3RhbHNlY3RvcnMpOworLSAgICB9CistICAgIHNldF8zMigmc2JzLT5ic0h1Z2VTZWN0b3JzLCB0b3RhbHNlY3RvcnMpOworLQorLSAgICBzZXRfMTYoJnNicy0+YnNCeXRlc1BlclNlYywgU0VDVE9SX1NJWkUpOworLSAgICBzZXRfMTYoJnNicy0+YnNTZWNQZXJUcmFjaywgZ2VvLnNlY3RvcnMpOworLSAgICBzZXRfMTYoJnNicy0+YnNIZWFkcywgZ2VvLmhlYWRzKTsKKy0gICAgc2V0XzMyKCZzYnMtPmJzSGlkZGVuU2VjcywgZ2VvLnN0YXJ0KTsKKysgICAgLyogUGF0Y2ggc3lzbGludXhfYm9vdHNlY3QgKi8KKysgICAgc3lzbGludXhfcGF0Y2hfYm9vdHNlY3QoZGV2ZmQpOworIAorICAgICAvKiBDb25zdHJ1Y3QgdGhlIGJvb3QgZmlsZSBtYXAgKi8KKyAKK2RpZmYgLS1naXQgYS9saWJpbnN0YWxsZXIvc3lzbGludXhleHQuYyBiL2xpYmluc3RhbGxlci9zeXNsaW51eGV4dC5jCitpbmRleCBiYjU0Y2VmLi41YTQ0MjNiIDEwMDY0NAorLS0tIGEvbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmMKKysrKyBiL2xpYmluc3RhbGxlci9zeXNsaW51eGV4dC5jCitAQCAtMSw3ICsxLDE3NyBAQAorICNkZWZpbmUgX0dOVV9TT1VSQ0UKKyAKKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPGdldG9wdC5oPgorKyNpbmNsdWRlIDxleHQyZnMvZXh0MmZzLmg+CisrCisrI2luY2x1ZGUgImxpbnV4aW9jdGwuaCIKKysjaW5jbHVkZSAic3lzbGludXguaCIKKysjaW5jbHVkZSAic3lzbHhpbnQuaCIKKysjaW5jbHVkZSAic3lzbHhvcHQuaCIKKysKKysvKgorKyAqIEdldCB0aGUgc2l6ZSBvZiBhIGJsb2NrIGRldmljZQorKyAqLworK3N0YXRpYyB1aW50NjRfdCBnZXRfc2l6ZShpbnQgZGV2X2ZkKQorK3sKKysgICAgdWludDY0X3QgYnl0ZXM7CisrICAgIHVpbnQzMl90IHNlY3RzOworKyAgICBzdHJ1Y3Qgc3RhdCBzdDsKKysKKysjaWZkZWYgQkxLR0VUU0laRTY0CisrICAgIGlmICghaW9jdGwoZGV2X2ZkLCBCTEtHRVRTSVpFNjQsICZieXRlcykpCisrCXJldHVybiBieXRlczsKKysjZW5kaWYKKysgICAgaWYgKCFpb2N0bChkZXZfZmQsIEJMS0dFVFNJWkUsICZzZWN0cykpCisrCXJldHVybiAodWludDY0X3QpIHNlY3RzIDw8IDk7CisrICAgIGVsc2UgaWYgKCFmc3RhdChkZXZfZmQsICZzdCkgJiYgc3Quc3Rfc2l6ZSkKKysJcmV0dXJuIHN0LnN0X3NpemU7CisrICAgIGVsc2UKKysJcmV0dXJuIDA7CisrfQorKworKy8qCisrICogR2V0IGRldmljZSBnZW9tZXRyeSBhbmQgcGFydGl0aW9uIG9mZnNldAorKyAqLworK3N0YXRpYyBzdHJ1Y3QgZ2VvbWV0cnlfdGFibGUgeworKyAgICB1aW50NjRfdCBieXRlczsKKysgICAgc3RydWN0IGhkX2dlb21ldHJ5IGc7CisrfTsKKysKKytzdGF0aWMgaW50IHN5c2ZzX2dldF9vZmZzZXQoaW50IGRldl9mZCwgdW5zaWduZWQgbG9uZyAqc3RhcnQpCisreworKyAgICBzdHJ1Y3Qgc3RhdCBzdDsKKysgICAgY2hhciBzeXNmc19uYW1lWzEyOF07CisrICAgIEZJTEUgKmY7CisrICAgIGludCBydjsKKysKKysgICAgaWYgKGZzdGF0KGRldl9mZCwgJnN0KSkKKysJcmV0dXJuIC0xOworKworKyAgICBpZiAoKHNpemVfdClzbnByaW50ZihzeXNmc19uYW1lLCBzaXplb2Ygc3lzZnNfbmFtZSwKKysJCQkgIi9zeXMvZGV2L2Jsb2NrLyV1OiV1L3N0YXJ0IiwKKysJCQkgbWFqb3Ioc3Quc3RfcmRldiksIG1pbm9yKHN0LnN0X3JkZXYpKQorKwk+PSBzaXplb2Ygc3lzZnNfbmFtZSkKKysJcmV0dXJuIC0xOworKworKyAgICBmID0gZm9wZW4oc3lzZnNfbmFtZSwgInIiKTsKKysgICAgaWYgKCFmKQorKwlyZXR1cm4gLTE7CisrCisrICAgIHJ2ID0gZnNjYW5mKGYsICIlbHUiLCBzdGFydCk7CisrICAgIGZjbG9zZShmKTsKKysKKysgICAgcmV0dXJuIChydiA9PSAxKSA/IDAgOiAtMTsKKyt9CisrCisrLyogU3RhbmRhcmQgZmxvcHB5IGRpc2sgZ2VvbWV0cmllcywgcGx1cyBMUy0xMjAuICBaaXBkaXNrIGdlb21ldHJ5CisrICAgKHgvNjQvMzIpIGlzIHRoZSBmaW5hbCBmYWxsYmFjay4gIEkgZG9uJ3Qga25vdyB3aGF0IExTLTI0MCBoYXMKKysgICBhcyBpdHMgZ2VvbWV0cnksIHNpbmNlIEkgZG9uJ3QgaGF2ZSBvbmUgYW5kIGRvbid0IGtub3cgYW55b25lIHRoYXQgZG9lcywKKysgICBhbmQgR29vZ2xlIHdhc24ndCBoZWxwZnVsLi4uICovCisrc3RhdGljIGNvbnN0IHN0cnVjdCBnZW9tZXRyeV90YWJsZSBzdGFuZGFyZF9nZW9tZXRyaWVzW10gPSB7CisrICAgIHszNjAgKiAxMDI0LCB7MiwgOSwgNDAsIDB9fSwKKysgICAgezcyMCAqIDEwMjQsIHsyLCA5LCA4MCwgMH19LAorKyAgICB7MTIwMCAqIDEwMjQsIHsyLCAxNSwgODAsIDB9fSwKKysgICAgezE0NDAgKiAxMDI0LCB7MiwgMTgsIDgwLCAwfX0sCisrICAgIHsxNjgwICogMTAyNCwgezIsIDIxLCA4MCwgMH19LAorKyAgICB7MTcyMiAqIDEwMjQsIHsyLCAyMSwgODAsIDB9fSwKKysgICAgezI4ODAgKiAxMDI0LCB7MiwgMzYsIDgwLCAwfX0sCisrICAgIHszODQwICogMTAyNCwgezIsIDQ4LCA4MCwgMH19LAorKyAgICB7MTIzMjY0ICogMTAyNCwgezgsIDMyLCA5NjMsIDB9fSwJLyogTFMxMjAgKi8KKysgICAgezAsIHswLCAwLCAwLCAwfX0KKyt9OworKworK3N0YXRpYyBpbnQgZ2V0X2dlb21ldHJ5KGludCBkZXZfZmQsIHVpbnQ2NF90IHRvdGFsYnl0ZXMsIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKQorK3sKKysgICAgc3RydWN0IGZsb3BweV9zdHJ1Y3QgZmRfc3RyOworKyAgICBzdHJ1Y3QgbG9vcF9pbmZvIGxpOworKyAgICBzdHJ1Y3QgbG9vcF9pbmZvNjQgbGk2NDsKKysgICAgY29uc3Qgc3RydWN0IGdlb21ldHJ5X3RhYmxlICpncDsKKysgICAgaW50IHJ2ID0gMDsKKysKKysgICAgbWVtc2V0KGdlbywgMCwgc2l6ZW9mICpnZW8pOworKworKyAgICBpZiAoIWlvY3RsKGRldl9mZCwgSERJT19HRVRHRU8sIGdlbykpIHsKKysJZ290byBvazsKKysgICAgfSBlbHNlIGlmICghaW9jdGwoZGV2X2ZkLCBGREdFVFBSTSwgJmZkX3N0cikpIHsKKysJZ2VvLT5oZWFkcyA9IGZkX3N0ci5oZWFkOworKwlnZW8tPnNlY3RvcnMgPSBmZF9zdHIuc2VjdDsKKysJZ2VvLT5jeWxpbmRlcnMgPSBmZF9zdHIudHJhY2s7CisrCWdlby0+c3RhcnQgPSAwOworKwlnb3RvIG9rOworKyAgICB9CisrCisrICAgIC8qIERpZG4ndCB3b3JrLiAgTGV0J3Mgc2VlIGlmIHRoaXMgaXMgb25lIG9mIHRoZSBzdGFuZGFyZCBnZW9tZXRyaWVzICovCisrICAgIGZvciAoZ3AgPSBzdGFuZGFyZF9nZW9tZXRyaWVzOyBncC0+Ynl0ZXM7IGdwKyspIHsKKysJaWYgKGdwLT5ieXRlcyA9PSB0b3RhbGJ5dGVzKSB7CisrCSAgICBtZW1jcHkoZ2VvLCAmZ3AtPmcsIHNpemVvZiAqZ2VvKTsKKysJICAgIGdvdG8gb2s7CisrCX0KKysgICAgfQorKworKyAgICAvKiBEaWRuJ3Qgd29yayBlaXRoZXIuLi4gYXNzaWduIGEgZ2VvbWV0cnkgb2YgNjQgaGVhZHMsIDMyIHNlY3RvcnM7IHRoaXMgaXMKKysgICAgICAgd2hhdCB6aXBkaXNrcyB1c2UsIHNvIHRoaXMgd291bGQgaGVscCBpZiBzb21lb25lIGhhcyBhIFVTQiBrZXkgdGhhdAorKyAgICAgICB0aGV5J3JlIGJvb3RpbmcgaW4gVVNCLVpJUCBtb2RlLiAqLworKworKyAgICBnZW8tPmhlYWRzID0gb3B0LmhlYWRzID8gOiA2NDsKKysgICAgZ2VvLT5zZWN0b3JzID0gb3B0LnNlY3RvcnMgPyA6IDMyOworKyAgICBnZW8tPmN5bGluZGVycyA9IHRvdGFsYnl0ZXMgLyAoZ2VvLT5oZWFkcyAqIGdlby0+c2VjdG9ycyA8PCBTRUNUT1JfU0hJRlQpOworKyAgICBnZW8tPnN0YXJ0ID0gMDsKKysKKysgICAgaWYgKCFvcHQuc2VjdG9ycyAmJiAhb3B0LmhlYWRzKSB7CisrCWZwcmludGYoc3RkZXJyLAorKwkJIldhcm5pbmc6IHVuYWJsZSB0byBvYnRhaW4gZGV2aWNlIGdlb21ldHJ5IChkZWZhdWx0aW5nIHRvICVkIGhlYWRzLCAlZCBzZWN0b3JzKVxuIgorKwkJIiAgICAgICAgIChvbiBoYXJkIGRpc2tzLCB0aGlzIGlzIHVzdWFsbHkgaGFybWxlc3MuKVxuIiwKKysJCWdlby0+aGVhZHMsIGdlby0+c2VjdG9ycyk7CisrCXJ2ID0gMTsJCQkvKiBTdWJvcHRpbWFsIHJlc3VsdCAqLworKyAgICB9CisrCisrb2s6CisrICAgIC8qIElmIHRoaXMgaXMgYSBsb29wYmFjayBkZXZpY2UsIHRyeSB0byBzZXQgdGhlIHN0YXJ0ICovCisrICAgIGlmICghaW9jdGwoZGV2X2ZkLCBMT09QX0dFVF9TVEFUVVM2NCwgJmxpNjQpKQorKwlnZW8tPnN0YXJ0ID0gbGk2NC5sb19vZmZzZXQgPj4gU0VDVE9SX1NISUZUOworKyAgICBlbHNlIGlmICghaW9jdGwoZGV2X2ZkLCBMT09QX0dFVF9TVEFUVVMsICZsaSkpCisrCWdlby0+c3RhcnQgPSAodW5zaWduZWQgaW50KWxpLmxvX29mZnNldCA+PiBTRUNUT1JfU0hJRlQ7CisrICAgIGVsc2UgaWYgKCFzeXNmc19nZXRfb2Zmc2V0KGRldl9mZCwgJmdlby0+c3RhcnQpKSB7CisrCS8qIE9LICovCisrICAgIH0KKysKKysgICAgcmV0dXJuIHJ2OworK30KKysKKysKKyAvKiBQYXRjaCBzeXNsaW51eF9ib290c2VjdCAqLworIHZvaWQgc3lzbGludXhfcGF0Y2hfYm9vdHNlY3QoaW50IGRldl9mZCkKKyB7CisrICAgIHVpbnQ2NF90IHRvdGFsYnl0ZXMsIHRvdGFsc2VjdG9yczsKKysgICAgc3RydWN0IGhkX2dlb21ldHJ5IGdlbzsKKysgICAgc3RydWN0IGZhdF9ib290X3NlY3RvciAqc2JzOworKworKyAgICB0b3RhbGJ5dGVzID0gZ2V0X3NpemUoZGV2X2ZkKTsKKysgICAgZ2V0X2dlb21ldHJ5KGRldl9mZCwgdG90YWxieXRlcywgJmdlbyk7CisrCisrICAgIGlmIChvcHQuaGVhZHMpCisrCWdlby5oZWFkcyA9IG9wdC5oZWFkczsKKysgICAgaWYgKG9wdC5zZWN0b3JzKQorKwlnZW8uc2VjdG9ycyA9IG9wdC5zZWN0b3JzOworKworKyAgICAvKiBQYXRjaCB0aGlzIGludG8gYSBmYWtlIEZBVCBzdXBlcmJsb2NrLiAgVGhpcyBpc24ndCBiZWNhdXNlCisrICAgICAgIEZBVCBpcyBhIGdvb2QgZm9ybWF0IGluIGFueSB3YXksIGl0J3MgYmVjYXVzZSBpdCBsZXRzIHRoZQorKyAgICAgICBlYXJseSBib290c3RyYXAgc2hhcmUgY29kZSB3aXRoIHRoZSBGQVQgdmVyc2lvbi4gKi8KKysgICAgc2JzID0gKHN0cnVjdCBmYXRfYm9vdF9zZWN0b3IgKilzeXNsaW51eF9ib290c2VjdDsKKysKKysgICAgdG90YWxzZWN0b3JzID0gdG90YWxieXRlcyA+PiBTRUNUT1JfU0hJRlQ7CisrICAgIGlmICh0b3RhbHNlY3RvcnMgPj0gNjU1MzYpIHsKKysJc2V0XzE2KCZzYnMtPmJzU2VjdG9ycywgMCk7CisrICAgIH0gZWxzZSB7CisrCXNldF8xNigmc2JzLT5ic1NlY3RvcnMsIHRvdGFsc2VjdG9ycyk7CisrICAgIH0KKysgICAgc2V0XzMyKCZzYnMtPmJzSHVnZVNlY3RvcnMsIHRvdGFsc2VjdG9ycyk7CisrCisrICAgIHNldF8xNigmc2JzLT5ic0J5dGVzUGVyU2VjLCBTRUNUT1JfU0laRSk7CisrICAgIHNldF8xNigmc2JzLT5ic1NlY1BlclRyYWNrLCBnZW8uc2VjdG9ycyk7CisrICAgIHNldF8xNigmc2JzLT5ic0hlYWRzLCBnZW8uaGVhZHMpOworKyAgICBzZXRfMzIoJnNicy0+YnNIaWRkZW5TZWNzLCBnZW8uc3RhcnQpOworIH0KKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwOS1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtaW5zdGFsbF9ib290YmxvY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA5LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1pbnN0YWxsX2Jvb3RibG9jay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDg5ZDkyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwOS1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtaW5zdGFsbF9ib290YmxvY2sucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorRnJvbSA3NmM0NjVlODczMTJkYmM2Y2ZmZDA1NDI3ZjFmNGQyZWJkZWU0ZjEzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDIgSmFuIDIwMTUgMTI6Mjg6MzUgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCA5LzldIGxpbnV4L3N5c2xpbnV4OiBpbXBsZW1lbnQgaW5zdGFsbF9ib290YmxvY2soKQorCitSZWZlciB0byB0aGUgaW5zdGFsbF9ib290YmxvY2soKSBpbiBleHRsaW51eC9tYWluLmMgdG8gbWFrZQorbGludXgvc3lzbGludXguYydzIGluc3RhbGxfYm9vdGJsb2NrKCkgd2hpY2ggb25seSBzdXBwb3J0cyBleHQyLzMvNC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitUZXN0ZWQtYnk6IER1IERvbHBoZXIgPGRvbHBoZXIuZHVAaW50ZWwuY29tPgorLS0tCisgbGludXgvc3lzbGludXguYyB8IDIwICsrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpbnV4L3N5c2xpbnV4LmMgYi9saW51eC9zeXNsaW51eC5jCitpbmRleCBjNzQxNzUwLi45MTdmODNhIDEwMDc1NQorLS0tIGEvbGludXgvc3lzbGludXguYworKysrIGIvbGludXgvc3lzbGludXguYworQEAgLTQxOSw2ICs0MTksMjYgQEAgc3RhdGljIGludCBleHRfZmlsZV93cml0ZShleHQyX2ZpbGVfdCBlMl9maWxlLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCwKKyAgKi8KKyBpbnQgaW5zdGFsbF9ib290YmxvY2soaW50IGZkLCBjb25zdCBjaGFyICpkZXZpY2UpCisgeworKyAgICBzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayBzYjsKKysKKysgICAgaWYgKHhwcmVhZChmZCwgJnNiLCBzaXplb2Ygc2IsIEVYVDJfU1VQRVJfT0ZGU0VUICsgb3B0Lm9mZnNldCkgIT0gc2l6ZW9mIHNiKSB7CisrICAgICAgICBwZXJyb3IoInJlYWRpbmcgc3VwZXJibG9jayIpOworKyAgICAgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysgICAgaWYgKHNiLnNfbWFnaWMgIT0gRVhUMl9TVVBFUl9NQUdJQykgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisrICAgICAgICAgICAgICAgICJubyBleHQyLzMvNCBzdXBlcmJsb2NrIGZvdW5kIG9uICVzXG4iLCBkZXZpY2UpOworKyAgICAgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysgICAgaWYgKHhwd3JpdGUoZmQsIHN5c2xpbnV4X2Jvb3RzZWN0LCBzeXNsaW51eF9ib290c2VjdF9sZW4sIDApCisrICAgICAgICAhPSAoc2lnbmVkKXN5c2xpbnV4X2Jvb3RzZWN0X2xlbikgeworKyAgICAgICAgcGVycm9yKCJ3cml0aW5nIGJvb3RibG9jayIpOworKyAgICAgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysgICAgcmV0dXJuIDA7CisgfQorIAorIC8qIFRoZSBmaWxlJ3MgYmxvY2sgY291bnQgKi8KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvc3lzbGludXgtZml4LXBhcmFsbGVsLWJ1aWxkaW5nLWlzc3VlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvc3lzbGludXgtZml4LXBhcmFsbGVsLWJ1aWxkaW5nLWlzc3VlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMmIxZTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC9zeXNsaW51eC1maXgtcGFyYWxsZWwtYnVpbGRpbmctaXNzdWUucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorc3lzbGludXgtbmF0aXZlOiBmaXggcGFyYWxsZWwgYnVpbGRpbmcgaXNzdWUKKworVGhlcmUgbWlnaHQgYmUgYW4gZXJyb3Igd2hlbiBwYXJhbGxlbCBidWlsZDoKKworW3NuaXBdCitjcDogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgYHRtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlLworc3lzbGludXgvY29tMzIvaW5jbHVkZS9ncGxpbmNsdWRlJzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorbWFrZVs0XTogKioqIFtpbnN0YWxsXSBFcnJvciAxCittYWtlWzNdOiAqKiogW2dwbGxpYl0gRXJyb3IgMgorW3NuaXBdCisKK1RoaXMgaXMgYSBwb3RlbnRpYWwgaXNzdWUuIEluICR7U30vY29tMzIvZ3BsbGliL01ha2VmaWxlIGZpbGUsCitpbnN0YWxsIHRhcmdldCB3YW50cyB0byBjb3B5ICQoU1JDKS8uLi9ncGxpbmNsdWRlIHRvCiskKElOU1RBTExST09UKSQoQ09NMzJESVIpL2luY2x1ZGUvIGRpcmVjdG9yeSwgYnV0IGluICR7U30vY29tMzIvbGliL01ha2VmaWxlCitmaWxlLCB0aGUgaW5zdGFsbCB0YXJnZXQgd2lsbCByZW1vdmUgJChJTlNUQUxMUk9PVCkkKENPTTMyRElSKS9pbmNsdWRlCitkaXJlY3RvcnkuIFdlIG5lZWQgdG8gZG8gY29tMzIvbGliIGZpcnN0LgorCitUaGUgcGF0Y2ggbWFrZSBjb20zMi9ncGxsaWIgZGVwZW5kcyBvbiBjb20zMi9saWIgdG8gZml4IHRoaXMgaXNzdWUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbTMyL01ha2VmaWxlIHwgICAgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK0luZGV4OiBzeXNsaW51eC02LjAzL2NvbTMyL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3lzbGludXgtNi4wMy5vcmlnL2NvbTMyL01ha2VmaWxlCisrKysgc3lzbGludXgtNi4wMy9jb20zMi9NYWtlZmlsZQorQEAgLTIxLDMgKzIxLDQgQEAgcm9zaDogbGliIGxpYnV0aWwKKyBzYW1wbGVzOiBsaWJ1dGlsIGVsZmxpbmsvbGRsaW51eAorIHN5c2R1bXA6IGxpYiBsaWJ1dGlsIGxpYnVwbG9hZCBncGxsaWIKKyBsdWEvc3JjOiBjbWVudSBtb2R1bGVzCisrZ3BsbGliOiBsaWIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4L3N5c2xpbnV4LWxpYnVwbG9hZC1kZXBlbmQtbGliLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvc3lzbGludXgtbGlidXBsb2FkLWRlcGVuZC1saWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA3MTRiNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4L3N5c2xpbnV4LWxpYnVwbG9hZC1kZXBlbmQtbGliLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gNDkwZmMzYmJkNjVjMmMyNTJjMWZkZjNkYTBmYWM5ODk4YWE5ZWVhNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAxNSBBdWcgMjAxNCAyMTowOToxNiAtMDcwMAorU3ViamVjdDogW1BBVENIXSBjb20zMi9NYWtlZmlsZTogZml4IHBhcmFsbGVsIGlzc3VlCisKK0ZpeGVkOgorY3AgLXIgc3lzbGludXgtNi4wMS9jb20zMi9saWJ1cGxvYWQvKi5oIGltYWdlL3Vzci9zaGFyZS9zeXNsaW51eC9jb20zMi9pbmNsdWRlLworW3NuaXBdCitybSAtcmYgaW1hZ2UvdXNyL3NoYXJlL3N5c2xpbnV4L2NvbTMyL2luY2x1ZGUKK1tzbmlwXQorY3A6IGNhbm5vdCBjcmVhdGUgcmVndWxhciBmaWxlIGBpbWFnZS91c3Ivc2hhcmUvc3lzbGludXgvY29tMzIvaW5jbHVkZS9zZXJpYWwuaCc6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKworVGhlIGNwIGlzIGhhcHBlbmVkIGluIHRoZSAibGlidXBsb2FkIiBkaXIsIHdoaWxlICJybSAtZnIiIGlzIGhhcHBlbmQgaW4KKyJsaWIiIGRpciwgbGV0ICJsaWJ1cGxvYWQiIGRlcGVuZCAibGliIiB3aWxsIGZpeCB0aGUgcHJvYmxlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgY29tMzIvTWFrZWZpbGUgfCAgICAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2NvbTMyL01ha2VmaWxlIGIvY29tMzIvTWFrZWZpbGUKK2luZGV4IDlhMTcyMWIuLmYxNzJkYjIgMTAwNjQ0CistLS0gYS9jb20zMi9NYWtlZmlsZQorKysrIGIvY29tMzIvTWFrZWZpbGUKK0BAIC0yMSwzICsyMSw0IEBAIHJvc2g6IGxpYiBsaWJ1dGlsCisgc2FtcGxlczogbGlidXRpbCBlbGZsaW5rL2xkbGludXgKKyBzeXNkdW1wOiBsaWJ1cGxvYWQgZ3BsbGliCisgZ3BsbGliOiBsaWIKKytsaWJ1cGxvYWQ6IGxpYgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4L3N5c2xpbnV4LXJlbW92ZS1jbGVhbi1zY3JpcHQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC9zeXNsaW51eC1yZW1vdmUtY2xlYW4tc2NyaXB0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMDAzZTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC9zeXNsaW51eC1yZW1vdmUtY2xlYW4tc2NyaXB0LnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1RoaXMgc2NyaXB0IHRyeSB0byBjYWxsIGdpdCBzdWJtb2R1bGUsIHNpbmNlIHdlIGFyZSBkb3dubG9hZGluZwordGhlIHRhcmJhbGwgaXQgc2VlbXMgaW4tY29ycmVjdCB0byBkbyB0aGlzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLVNwZWNpZmljXQorU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorSW5kZXg6IHN5c2xpbnV4LTYuMDMvZWZpL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3lzbGludXgtNi4wMy5vcmlnL2VmaS9NYWtlZmlsZQorKysrIHN5c2xpbnV4LTYuMDMvZWZpL01ha2VmaWxlCitAQCAtMTAxLDcgKzEwMSw2IEBAIHRpZHkgZGlzdDoKKyAJcm0gLWYgKi5zbyAqLm8gd3JhcHBlcgorIAlmaW5kIC4gXCggLW5hbWUgXCoubyAtbyAtbmFtZSBcKi5hIC1vIC1uYW1lIC5cKi5kIC1vIC1uYW1lIFwqLnRtcCBcKSAtcHJpbnQwIHwgXAorIAkJeGFyZ3MgLTByIHJtIC1mCistCSQodG9wZGlyKS9lZmkvY2xlYW4tZ251LWVmaS5zaCAkKEVGSV9TVUJBUkNIKSAkKG9iamRpcikKKyAKKyBjbGVhbjogdGlkeQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXhfNi4wMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4XzYuMDMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY5YWUyZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4XzYuMDMuYmIKQEAgLTAsMCArMSw4OSBAQAorU1VNTUFSWSA9ICJNdWx0aS1wdXJwb3NlIGxpbnV4IGJvb3Rsb2FkZXIiCitIT01FUEFHRSA9ICJodHRwOi8vc3lzbGludXguenl0b3IuY29tLyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0zNTtlbmRsaW5lPTQxO21kNT01NThmMmM3MWNiMWZiOWJhNTExY2NkNDg1OGU0OGU4YSIKKworIyBJZiB5b3UgcmVhbGx5IHdhbnQgdG8gcnVuIHN5c2xpbnV4LCB5b3UgbmVlZCBtdG9vbHMuICBXZSBqdXN0IHdhbnQgdGhlCisjIGxkbGludXguKiBzdHVmZiBmb3Igbm93LCBzbyBza2lwIG10b29scy1uYXRpdmUKK0RFUEVORFMgPSAibmFzbS1uYXRpdmUgdXRpbC1saW51eCBlMmZzcHJvZ3MiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC91dGlscy9ib290L3N5c2xpbnV4L3N5c2xpbnV4LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9zeXNsaW51eC1maXgtcGFyYWxsZWwtYnVpbGRpbmctaXNzdWUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc3lzbGludXgtbGlidXBsb2FkLWRlcGVuZC1saWIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc3lzbGludXgtcmVtb3ZlLWNsZWFuLXNjcmlwdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWxpbnV4LXN5c2xpbnV4LXN1cHBvcnQtZXh0Mi0zLTQtZGV2aWNlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItbGludXgtc3lzbGludXgtaW1wbGVtZW50LW9wZW5fZXh0Ml9mcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1pbnN0YWxsX3RvX2V4dDIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC1saW51eC1zeXNsaW51eC1hZGQtZXh0X2ZpbGVfcmVhZC1hbmQtZXh0X2ZpbGVfd3JpdGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNS1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtaGFuZGxlX2Fkdl9vbl9leHQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNi1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtd3JpdGVfdG9fZXh0LWFuZC1hZGQtc3lzbGluLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDctbGludXgtc3lzbGludXgtaW1wbGVtZW50LWV4dF9jb25zdHJ1Y3Rfc2VjdG1hcF9mcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA4LWxpYmluc3RhbGxlci1zeXNsaW51eGV4dC1pbXBsZW1lbnQtc3lzbGludXhfcGF0Y2hfYm8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOS1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtaW5zdGFsbF9ib290YmxvY2sucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5MmEyNTNkZjkyMTFlOWMyMDE3Mjc5NmVjZjM4OGYxMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyNmQzOTg2ZDJiZWExMDlkNWRjMGU0ZjhjNDgyMmE0NTkyNzZjZjAyMTEyNWU4YzlmMjNjM2NjYTVkOGM4NTBlIgorCitDT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NHxpLjg2KS4qLShsaW51eHxmcmVlYnNkLiopJworIyBEb24ndCBsZXQgdGhlIHNhbml0eSBjaGVja2VyIHRyaXAgb24gdGhlIDMyIGJpdCByZWFsIG1vZGUgQklPUyBiaW5hcmllcworSU5TQU5FX1NLSVBfJHtQTn0tbWlzYyA9ICJhcmNoIgorSU5TQU5FX1NLSVBfJHtQTn0tY2hhaW4gPSAiYXJjaCIKKworRVhUUkFfT0VNQUtFID0gIiBcCisJQklORElSPSR7YmluZGlyfSBTQklORElSPSR7c2JpbmRpcn0gTElCRElSPSR7bGliZGlyfSBcCisJREFUQURJUj0ke2RhdGFkaXJ9IE1BTkRJUj0ke21hbmRpcn0gSU5DRElSPSR7aW5jbHVkZWRpcn0gXAorIgorIyBzeXNsaW51eCB1c2VzICRMRCBmb3IgbGlua2luZywgc3RyaXAgYC1XbCwnIHNvIGl0IGNhbiB3b3JrCitleHBvcnQgTERGTEFHUyA9ICJgZWNobyAkTERGTEFHUyB8IHNlZCAncy8tV2wsLy9nJ2AiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwkjIGRyb3Agd2luMzIgdGFyZ2V0cyBvciBidWlsZCBmYWlscworCXNlZCAtZSAncyx3aW4zMi9cUyosLGcnIC1pIE1ha2VmaWxlCisKKwkjIGNsZWFuIGluc3RhbGxlciBleGVjdXRhYmxlcyBpbmNsdWRlZCBpbiBzb3VyY2UgdGFyYmFsbAorCW9lX3J1bm1ha2UgY2xlYW4gZmlybXdhcmU9ImVmaTMyIiBFRklJTkM9IiR7aW5jbHVkZWRpcn0iCisJIyBOT1RFOiBUaGVyZSBpcyBhIHRlbXBvcmFyeSB3b3JrIGFyb3VuZCBhYm92ZSB0byBzcGVjaWZ5CisJIwl0aGUgZWZpMzIgYXMgdGhlIGZpcm13YXJlIGVsc2UgdGhlIHByZS1idWlsdCBiaW9zCisJIwlmaWxlcyBnZXQgZXJhc2VkIGNvbnRyYXJ5IHRvIHRoZSBkb2MvZGlzdGliLnR4dAorCSMJSW4gdGhlIGZ1dHVyZSB0aGlzIHNob3VsZCBiZSAiYmlvcyIgYW5kIG5vdCAiZWZpMzIiLgorfQorCitkb19jb21waWxlKCkgeworCSMgTWFrZSBzdXJlIHRoZSByZWNvbXBpbGUgaXMgT0suCisJIyBUaG91Z2ggdGhlICR7Qn0gc2hvdWxkIGFsd2F5cyBleGlzdCwgc3RpbGwgY2hlY2sgaXQgYmVmb3JlIGZpbmQgYW5kIHJtLgorCVsgLWQgIiR7Qn0iIF0gJiYgZmluZCAke0J9IC1uYW1lICcuKi5kJyAtdHlwZSBmIC1leGVjIHJtIC1mIHt9IFw7CisKKwkjIFJlYnVpbGQgb25seSB0aGUgaW5zdGFsbGVyOyBrZWVwIHByZWNvbXBpbGVkIGJvb3Rsb2FkZXJzCisJIyBhcyBwZXIgYXV0aG9yJ3MgcmVxdWVzdCAoZG9jL2Rpc3RyaWIudHh0KQorCW9lX3J1bm1ha2UgQ0M9IiR7Q0N9ICR7Q0ZMQUdTfSIgTERGTEFHUz0iJHtMREZMQUdTfSIgZmlybXdhcmU9ImJpb3MiIGluc3RhbGxlcgorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgQ0M9IiR7Q0N9ICR7Q0ZMQUdTfSIgaW5zdGFsbCBJTlNUQUxMUk9PVD0iJHtEfSIgZmlybXdhcmU9ImJpb3MiCisKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L3N5c2xpbnV4LworCWluc3RhbGwgLW0gNjQ0ICR7U30vYmlvcy9jb3JlL2xkbGludXguc3lzICR7RH0ke2RhdGFkaXJ9L3N5c2xpbnV4LworCWluc3RhbGwgLW0gNjQ0ICR7U30vYmlvcy9jb3JlL2xkbGludXguYnNzICR7RH0ke2RhdGFkaXJ9L3N5c2xpbnV4LworCWluc3RhbGwgLW0gNzU1ICR7U30vYmlvcy9saW51eC9zeXNsaW51eC1ub210b29scyAke0R9JHtiaW5kaXJ9LworfQorCitQQUNLQUdFUyArPSAiJHtQTn0tbm9tdG9vbHMgJHtQTn0tZXh0bGludXggJHtQTn0tbWJyICR7UE59LWNoYWluICR7UE59LXB4ZWxpbnV4ICR7UE59LWlzb2xpbnV4ICR7UE59LW1pc2MiCisKK1JERVBFTkRTXyR7UE59ICs9ICJtdG9vbHMiCitSREVQRU5EU18ke1BOfS1ub210b29scyArPSAibGliZXh0MmZzIgorUkRFUEVORFNfJHtQTn0tbWlzYyArPSAicGVybCIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L3N5c2xpbnV4IgorRklMRVNfJHtQTn0tbm9tdG9vbHMgPSAiJHtiaW5kaXJ9L3N5c2xpbnV4LW5vbXRvb2xzIgorRklMRVNfJHtQTn0tZXh0bGludXggPSAiJHtzYmluZGlyfS9leHRsaW51eCIKK0ZJTEVTXyR7UE59LW1iciA9ICIke2RhdGFkaXJ9LyR7QlBOfS9tYnIuYmluIgorRklMRVNfJHtQTn0tY2hhaW4gPSAiJHtkYXRhZGlyfS8ke0JQTn0vY2hhaW4uYzMyIgorRklMRVNfJHtQTn0taXNvbGludXggPSAiJHtkYXRhZGlyfS8ke0JQTn0vaXNvbGludXguYmluIgorRklMRVNfJHtQTn0tcHhlbGludXggPSAiJHtkYXRhZGlyfS8ke0JQTn0vcHhlbGludXguMCIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS8ke0JQTn0vY29tMzIvbGliKiR7U09MSUJTfSAke2RhdGFkaXJ9LyR7QlBOfS9jb20zMi9pbmNsdWRlICR7ZGF0YWRpcn0vJHtCUE59L2NvbTMyL2NvbTMyLmxkIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2RhdGFkaXJ9LyR7QlBOfS9jb20zMi9saWIqLmEgJHtsaWJkaXJ9LyR7QlBOfS9jb20zMi9saWIqLmEiCitGSUxFU18ke1BOfS1taXNjID0gIiR7ZGF0YWRpcn0vJHtCUE59LyogJHtsaWJkaXJ9LyR7QlBOfS8qICR7YmluZGlyfS8qIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50L2ZpeF9yYW5saWIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50L2ZpeF9yYW5saWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ3MDQ1NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnQvZml4X3JhbmxpYi5wYXRjaApAQCAtMCwwICsxLDE0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Bva3ktc3BlY2lmaWMgZml4XQorCistLS0gYS9NYWtlZmlsZS5pbmMKKysrKyBiL01ha2VmaWxlLmluYworQEAgLTU3LDYgKzU3LDkgQEAKKyAgIGlmZXEgKCQoTk9fVVVJRCksKQorICAgICBMSUJTICs9IC1sdXVpZAorICAgZW5kaWYKKysgIGlmbmVxICgkKFJBTkxJQiksKQorKyAgICBSQU5MSUIgKz0gJEAKKysgIGVuZGlmCisgZW5kaWYKKyAKKyBpZm5lcSAoJChPUFNZUyksV2luZG93cykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnQvdGNmLWFnZW50LmluaXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50L3RjZi1hZ2VudC5pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYzMDMyODAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50L3RjZi1hZ2VudC5pbml0CkBAIC0wLDAgKzEsNzUgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgdGNmLWFnZW50CisjIERlZmF1bHQtU3RhcnQ6ICAgICAzIDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSAyIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IFRhcmdldCBDb21tdW5pY2F0aW9uIEZyYW1ld29yayBhZ2VudAorIyMjIEVORCBJTklUIElORk8KKworREFFTU9OX1BBVEg9L3Vzci9zYmluL3RjZi1hZ2VudAorREFFTU9OX05BTUU9YGJhc2VuYW1lICREQUVNT05fUEFUSGAKKworLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKwordGVzdCAteCAkREFFTU9OX1BBVEggfHwgZXhpdCAwCisKK1BBVEg9L3NiaW46L3Vzci9zYmluOi9iaW46L3Vzci9iaW4KK2V4cG9ydCBQQVRICisKK1JFVFZBTD0wCisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorICAgICAgICBlY2hvIC1uICJTdGFydGluZyAkREFFTU9OX05BTUU6ICIKKyAgICAgICAgJERBRU1PTl9QQVRIIC1kIC1MLSAtbDAKKyAgICAgICAgUkVUVkFMPSQ/CisgICAgICAgIGlmIFsgJFJFVFZBTCAtZXEgMCBdIDsgdGhlbgorICAgICAgICAgICAgZWNobyAiT0siCisgICAgICAgICAgICB0b3VjaCAvdmFyL2xvY2svc3Vic3lzLyREQUVNT05fTkFNRQorICAgICAgICBlbHNlCisgICAgICAgICAgICBlY2hvICJGQUlMIgorICAgICAgICBmaQorICAgICAgICA7OworCisgICAgc3RvcCkKKyAgICAgICAgZWNobyAtbiAiU3RvcHBpbmcgJERBRU1PTl9OQU1FOiAiCisgICAgICAgIGNvdW50PTAKKyAgICAgICAgd2hpbGUgWyAtbiAiYC9iaW4vcGlkb2YgJERBRU1PTl9QQVRIYCIgLWEgJGNvdW50IC1sdCAxMCBdIDsgZG8KKyAgICAgICAgICAgIGtpbGxwcm9jICREQUVNT05fUEFUSCA+JiAvZGV2L251bGwKKyAgICAgICAgICAgIHNsZWVwIDEKKyAgICAgICAgICAgIFJFVFZBTD0kPworICAgICAgICAgICAgaWYgWyAkUkVUVkFMICE9IDAgLW8gLW4gImAvYmluL3BpZG9mICREQUVNT05fUEFUSGAiIF0gOyB0aGVuCisgICAgICAgICAgICAgICAgc2xlZXAgMworICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGNvdW50PWBleHByICRjb3VudCArIDFgCisgICAgICAgIGRvbmUKKyAgICAgICAgcm0gLWYgL3Zhci9sb2NrL3N1YnN5cy8kREFFTU9OX05BTUUKKyAgICAgICAgaWYgWyAtbiAiYC9iaW4vcGlkb2YgJERBRU1PTl9QQVRIYCIgXSA7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIkZBSUwiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVjaG8gIk9LIgorICAgICAgICBmaQorICAgICAgICA7OworCisgICAgcmVzdGFydCkKKyAgICAgICAgJDAgc3RvcAorICAgICAgICBzbGVlcCAxCisgICAgICAgICQwIHN0YXJ0CisgICAgICAgIDs7CisKKyAgICBzdGF0dXMpCisgICAgICAgIHN0YXR1cyAkREFFTU9OX05BTUUKKyAgICAgICAgUkVUVkFMPSQ/CisgICAgICAgIDs7CisKKyAgICBjb25kcmVzdGFydCkKKyAgICAgICAgWyAtZiAvdmFyL2xvY2svc3Vic3lzLyREQUVNT05fTkFNRSBdICYmICQwIHJlc3RhcnQKKyAgICAgICAgOzsKKworICAgICopCisgICAgICAgIGVjaG8gInVzYWdlOiAkMCB7IHN0YXJ0IHwgc3RvcCB8IHN0YXR1cyB8IHJlc3RhcnQgfCBjb25kcmVzdGFydCB8IHN0YXR1cyB9IgorICAgICAgICA7OworZXNhYworCitleGl0ICRSRVRWQUwKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudC90Y2YtYWdlbnQuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnQvdGNmLWFnZW50LnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ5YTZjNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnQvdGNmLWFnZW50LnNlcnZpY2UKQEAgLTAsMCArMSwxMCBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1UYXJnZXQgQ29tbXVuaWNhdGlvbiBGcmFtZXdvcmsgYWdlbnQKK0FmdGVyPW5ldHdvcmsudGFyZ2V0CisKK1tTZXJ2aWNlXQorVHlwZT1mb3JraW5nCitFeGVjU3RhcnQ9QFNCSU5ESVJAL3RjZi1hZ2VudCAtZCAtTC0gLWwwCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnRfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhmZDM5MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnRfZ2l0LmJiCkBAIC0wLDAgKzEsNDkgQEAKK1NVTU1BUlkgPSAiVGFyZ2V0IENvbW11bmljYXRpb24gRnJhbWV3b3JrIGZvciB0aGUgRWNsaXBzZSBJREUiCitIT01FUEFHRSA9ICJodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9UQ0YiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzLyIKKworTElDRU5TRSA9ICJFUEwtMS4wIHwgRURMLTEuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2VkbC12MTAuaHRtbDttZDU9NTIyYTM5MGE4M2RjMTg2NTEzZjA1MDA1NDNhZDM2NzkiCisKK1NSQ1JFViA9ICJiOWE3MzVlOWM3Y2Y4MmY4MGQ0MTJiN2FiMTVkMDhiODlkNWE0Y2NjIgorUFYgPSAiMS4zLjArZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LmVjbGlwc2Uub3JnL2dpdHJvb3QvdGNmL29yZy5lY2xpcHNlLnRjZi5hZ2VudC5naXQ7YnJhbmNoPTEuM19tYXJzX2J1Z2ZpeCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfcmFubGliLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3RjZi1hZ2VudC5pbml0IFwKKyAgICAgICAgICAgZmlsZTovL3RjZi1hZ2VudC5zZXJ2aWNlIFwKKyAgICAgICAgICAiCisKK0RFUEVORFMgPSAidXRpbC1saW51eCBvcGVuc3NsIgorUkRFUEVORFNfJHtQTn0gPSAiYmFzaCIKKworUyA9ICIke1dPUktESVJ9L2dpdC9hZ2VudCIKKworaW5oZXJpdCB1cGRhdGUtcmMuZCBzeXN0ZW1kCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJ0Y2YtYWdlbnQuc2VydmljZSIKKworSU5JVFNDUklQVF9OQU1FID0gInRjZi1hZ2VudCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDk5IDMgNSAuIHN0b3AgMjAgMCAxIDIgNiAuIgorCisjIG1hbmdsaW5nIG5lZWRlZCBmb3IgbWFrZQorTUFLRV9BUkNIID0gImBlY2hvICR7VEFSR0VUX0FSQ0h9IHwgc2VkIHMsaS44NixpNjg2LGAiCitNQUtFX09TID0gImBlY2hvICR7VEFSR0VUX09TfSB8IHNlZCBzLF5saW51eC4qLEdOVS9MaW51eCxgIgorCitFWFRSQV9PRU1BS0UgPSAiTUFDSElORT0ke01BS0VfQVJDSH0gT1BTWVM9JHtNQUtFX09TfSAnQ0M9JHtDQ30nICdBUj0ke0FSfSciCisKKyMgVGhleSBkb24ndCBidWlsZCBvbiBBUk0gYW5kIHdlIGRvbid0IG5lZWQgdGhlbSBhY3R1YWxseS4KK0NGTEFHUyArPSAiLURTRVJWSUNFX1J1bkNvbnRyb2w9MCAtRFNFUlZJQ0VfQnJlYWtwb2ludHM9MCBcCisgICAgLURTRVJWSUNFX01lbW9yeT0wIC1EU0VSVklDRV9SZWdpc3RlcnM9MCAtRFNFUlZJQ0VfTWVtb3J5TWFwPTAgXAorICAgIC1EU0VSVklDRV9TdGFja1RyYWNlPTAgLURTRVJWSUNFX1N5bWJvbHM9MCAtRFNFUlZJQ0VfTGluZU51bWJlcnM9MCBcCisgICAgLURTRVJWSUNFX0V4cHJlc3Npb25zPTAiCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsIElOU1RBTExST09UPSR7RH0KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS90Y2YtYWdlbnQuaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvdGNmLWFnZW50CisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3RjZi1hZ2VudC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3RjZi1hZ2VudC5zZXJ2aWNlCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9hbHRlci1pbmNsdWRlZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2FsdGVyLWluY2x1ZGVkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg1MzBlMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9hbHRlci1pbmNsdWRlZGlyLnBhdGNoCkBAIC0wLDAgKzEsNzYgQEAKK0xldHMgaW5zdGFsbCB0aGUgaW5jbHVkZSBoZWFkZXIgYW5kIHByaXZhdGUgaGVhZGVyIGZpbGVzIGludG8gCit1c3IvaW5jbHVkZS90Y2w4LjYgd2hlbiB2ZXJzaW9uIG9mIHRjbCBpcyA4LjYueAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW0NvbmZpZ3VyYXRpb24gU3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpLmNvbT4KKworRml4ZWQgdGhlIFRDTF9JTkNMVURFX1NQRUMKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5pbiAgfCAgICAyICstCisgY29uZmlndXJlICAgIHwgICAgNCArKy0tCisgY29uZmlndXJlLmluIHwgICAgNCArKy0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCA5N2I5ODNiLi5kYzJhNGRmIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNTMsNyArNTMsNyBAQCBETExfSU5TVEFMTF9ESVIJCT0gQERMTF9JTlNUQUxMX0RJUkAKKyBTQ1JJUFRfSU5TVEFMTF9ESVIJPSAkKElOU1RBTExfUk9PVCkkKFRDTF9MSUJSQVJZKQorIAorICMgRGlyZWN0b3J5IGluIHdoaWNoIHRvIGluc3RhbGwgdGhlIGluY2x1ZGUgZmlsZSB0Y2wuaDoKKy1JTkNMVURFX0lOU1RBTExfRElSCT0gJChJTlNUQUxMX1JPT1QpJChpbmNsdWRlZGlyKQorK0lOQ0xVREVfSU5TVEFMTF9ESVIJPSAkKElOU1RBTExfUk9PVCkkKGluY2x1ZGVkaXIpL3RjbCQoVkVSU0lPTikKKyAKKyAjIFBhdGggdG8gdGhlIHByaXZhdGUgdGNsIGhlYWRlciBkaXI6CisgUFJJVkFURV9JTkNMVURFX0RJUgk9IEBQUklWQVRFX0lOQ0xVREVfRElSQAorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggM2U3OGI0OS4uMjRiM2Y5MiAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtMTkxMzQsNyArMTkxMzQsNyBAQCBldmFsICJUQ0xfTElCX0ZJTEU9bGlidGNsJHtMSUJfU1VGRklYfSIKKyBldmFsICJUQ0xfTElCX0ZJTEU9JHtUQ0xfTElCX0ZJTEV9IgorIAorIFRDTF9MSUJSQVJZPSckKGxpYmRpcikvdGNsJChWRVJTSU9OKScKKy1QUklWQVRFX0lOQ0xVREVfRElSPSckKGluY2x1ZGVkaXIpJworK1BSSVZBVEVfSU5DTFVERV9ESVI9JyQoaW5jbHVkZWRpcikvdGNsJChWRVJTSU9OKScKKyBIVE1MX0RJUj0nJChESVNURElSKS9odG1sJworIAorICMgTm90ZTogIGluIHRoZSBmb2xsb3dpbmcgdmFyaWFibGUsIGl0J3MgaW1wb3J0YW50IHRvIHVzZSB0aGUgYWJzb2x1dGUKK0BAIC0xOTI5Myw3ICsxOTI5Myw3IEBAIFRDTF9CVUlMRF9TVFVCX0xJQl9QQVRIPSJgcHdkYC8ke1RDTF9TVFVCX0xJQl9GSUxFfSIKKyBUQ0xfU1RVQl9MSUJfUEFUSD0iJHtUQ0xfU1RVQl9MSUJfRElSfS8ke1RDTF9TVFVCX0xJQl9GSUxFfSIKKyAKKyAjIEluc3RhbGwgdGltZSBoZWFkZXIgZGlyIGNhbiBiZSBzZXQgdmlhIC0taW5jbHVkZWRpcgorLWV2YWwgIlRDTF9JTkNMVURFX1NQRUM9XCItSSR7aW5jbHVkZWRpcn1cIiIKKytldmFsICJUQ0xfSU5DTFVERV9TUEVDPVwiLUkke2luY2x1ZGVkaXJ9L3RjbCR7VkVSU0lPTn1cIiIKKyAKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyB0Y2xDb25maWcuc2ggcmVmZXJzIHRvIHRoaXMgYnkgYSBkaWZmZXJlbnQgbmFtZQorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggMGUyOGIxNC4uNjJkOWI0MSAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtNzkxLDcgKzc5MSw3IEBAIGV2YWwgIlRDTF9MSUJfRklMRT1saWJ0Y2wke0xJQl9TVUZGSVh9IgorIGV2YWwgIlRDTF9MSUJfRklMRT0ke1RDTF9MSUJfRklMRX0iCisgCisgVENMX0xJQlJBUlk9JyQobGliZGlyKS90Y2wkKFZFUlNJT04pJworLVBSSVZBVEVfSU5DTFVERV9ESVI9JyQoaW5jbHVkZWRpciknCisrUFJJVkFURV9JTkNMVURFX0RJUj0nJChpbmNsdWRlZGlyKS90Y2wkKFZFUlNJT04pJworIEhUTUxfRElSPSckKERJU1RESVIpL2h0bWwnCisgCisgIyBOb3RlOiAgaW4gdGhlIGZvbGxvd2luZyB2YXJpYWJsZSwgaXQncyBpbXBvcnRhbnQgdG8gdXNlIHRoZSBhYnNvbHV0ZQorQEAgLTkxMiw3ICs5MTIsNyBAQCBUQ0xfQlVJTERfU1RVQl9MSUJfUEFUSD0iYHB3ZGAvJHtUQ0xfU1RVQl9MSUJfRklMRX0iCisgVENMX1NUVUJfTElCX1BBVEg9IiR7VENMX1NUVUJfTElCX0RJUn0vJHtUQ0xfU1RVQl9MSUJfRklMRX0iCisgCisgIyBJbnN0YWxsIHRpbWUgaGVhZGVyIGRpciBjYW4gYmUgc2V0IHZpYSAtLWluY2x1ZGVkaXIKKy1ldmFsICJUQ0xfSU5DTFVERV9TUEVDPVwiLUkke2luY2x1ZGVkaXJ9XCIiCisrZXZhbCAiVENMX0lOQ0xVREVfU1BFQz1cIi1JJHtpbmNsdWRlZGlyfS90Y2wke1ZFUlNJT059XCIiCisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgdGNsQ29uZmlnLnNoIHJlZmVycyB0byB0aGlzIGJ5IGEgZGlmZmVyZW50IG5hbWUKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2ZpeC1jb25maWd1cmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvZml4LWNvbmZpZ3VyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjkyYTBlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2ZpeC1jb25maWd1cmUucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiB1bml4L3RjbC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHRjbDguNC4xMS91bml4Lm9yaWcvdGNsLm00CisrKysgdGNsOC40LjExL3VuaXgvdGNsLm00CitAQCAtODQ1LDcgKzg0NSw3IEBAIEFDX0RFRlVOKFNDX0NPTkZJR19DRkxBR1MsIFsKKyAJICAgICMgcmVzdWx0cywgYW5kIHRoZSB2ZXJzaW9uIGlzIGtlcHQgaW4gc3BlY2lhbCBmaWxlKS4KKyAJCisgCSAgICBpZiB0ZXN0IC1yIC9ldGMvLnJlbGlkIC1hICJYYHVuYW1lIC1uYCIgPSAiWGB1bmFtZSAtc2AiIDsgdGhlbgorLQkJc3lzdGVtPU1QLVJBUy1gYXdrICd7cHJpbnQgJDN9JyAvZXRjLy5yZWxpZCdgCisrCQlzeXN0ZW09TVAtUkFTLWBhd2sgJ3twcmludCAkM30nIC9ldGMvLnJlbGlkYAorIAkgICAgZmkKKyAJICAgIGlmIHRlc3QgImB1bmFtZSAtc2AiID0gIkFJWCIgOyB0aGVuCisgCQlzeXN0ZW09QUlYLWB1bmFtZSAtdmAuYHVuYW1lIC1yYAorQEAgLTIyNTAsNyArMjI1MCw3IEBAIEFDX0RFRlVOKFNDX0JMT0NLSU5HX1NUWUxFLCBbCisgCSAgICAjIHJlc3VsdHMsIGFuZCB0aGUgdmVyc2lvbiBpcyBrZXB0IGluIHNwZWNpYWwgZmlsZSkuCisgCQorIAkgICAgaWYgdGVzdCAtciAvZXRjLy5yZWxpZCAtYSAiWGB1bmFtZSAtbmAiID0gIlhgdW5hbWUgLXNgIiA7IHRoZW4KKy0JCXN5c3RlbT1NUC1SQVMtYGF3ayAne3ByaW50ICQzfScgL2V0Yy8ucmVsaWQnYAorKwkJc3lzdGVtPU1QLVJBUy1gYXdrICd7cHJpbnQgJDN9JyAvZXRjLy5yZWxpZGAKKyAJICAgIGZpCisgCSAgICBpZiB0ZXN0ICJgdW5hbWUgLXNgIiA9ICJBSVgiIDsgdGhlbgorIAkJc3lzdGVtPUFJWC1gdW5hbWUgLXZgLmB1bmFtZSAtcmAKK0luZGV4OiB1bml4L2NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHRjbDguNC4xMS91bml4Lm9yaWcvY29uZmlndXJlCisrKysgdGNsOC40LjExL3VuaXgvY29uZmlndXJlCitAQCAtMjEzMCw3ICsyMTMwLDcgQEAgZWNobyAiY29uZmlndXJlOjIxMjE6IGNoZWNraW5nIHN5c3RlbSB2ZQorIAkgICAgIyByZXN1bHRzLCBhbmQgdGhlIHZlcnNpb24gaXMga2VwdCBpbiBzcGVjaWFsIGZpbGUpLgorIAkKKyAJICAgIGlmIHRlc3QgLXIgL2V0Yy8ucmVsaWQgLWEgIlhgdW5hbWUgLW5gIiA9ICJYYHVuYW1lIC1zYCIgOyB0aGVuCistCQlzeXN0ZW09TVAtUkFTLWBhd2sgJ3twcmludCB9JyAvZXRjLy5yZWxpZCdgCisrCQlzeXN0ZW09TVAtUkFTLWBhd2sgJ3twcmludCB9JyAvZXRjLy5yZWxpZGAKKyAJICAgIGZpCisgCSAgICBpZiB0ZXN0ICJgdW5hbWUgLXNgIiA9ICJBSVgiIDsgdGhlbgorIAkJc3lzdGVtPUFJWC1gdW5hbWUgLXZgLmB1bmFtZSAtcmAKK0BAIC03NjA4LDcgKzc2MDgsNyBAQCBlY2hvICJjb25maWd1cmU6NzYwMDogY2hlY2tpbmcgRklPTkJJTyB2CisgCSAgICAjIHJlc3VsdHMsIGFuZCB0aGUgdmVyc2lvbiBpcyBrZXB0IGluIHNwZWNpYWwgZmlsZSkuCisgCQorIAkgICAgaWYgdGVzdCAtciAvZXRjLy5yZWxpZCAtYSAiWGB1bmFtZSAtbmAiID0gIlhgdW5hbWUgLXNgIiA7IHRoZW4KKy0JCXN5c3RlbT1NUC1SQVMtYGF3ayAne3ByaW50IH0nIC9ldGMvLnJlbGlkJ2AKKysJCXN5c3RlbT1NUC1SQVMtYGF3ayAne3ByaW50IH0nIC9ldGMvLnJlbGlkYAorIAkgICAgZmkKKyAJICAgIGlmIHRlc3QgImB1bmFtZSAtc2AiID0gIkFJWCIgOyB0aGVuCisgCQlzeXN0ZW09QUlYLWB1bmFtZSAtdmAuYHVuYW1lIC1yYApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2ZpeF9pc3N1ZV93aXRoX29sZF9kaXN0cm9fZ2xpYmMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvZml4X2lzc3VlX3dpdGhfb2xkX2Rpc3Ryb19nbGliYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTI3MzQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2ZpeF9pc3N1ZV93aXRoX29sZF9kaXN0cm9fZ2xpYmMucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBpbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworRml4ZXMgdGNsIHRhcmdldCByZWNpcGUgYnVpbGQgb24gb2xkIGRpc3Ryb3Mgd2hpY2ggaGF2ZSBnbGliYyBvbGRlciB0aGFuIDIuMTQKKworfCArIGVjaG8gJ05PVEU6IG1ha2UgIERFU1RESVI9L3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvd29yay94ODZfNjQtcG9reS1saW51eC90Y2wtOC41LjExLXI1L2ltYWdlIGluc3RhbGwnCit8IE5PVEU6IG1ha2UgIERFU1RESVI9L3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvd29yay94ODZfNjQtcG9reS1saW51eC90Y2wtOC41LjExLXI1L2ltYWdlIGluc3RhbGwKK3wgKyBtYWtlICBERVNURElSPS9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3dvcmsveDg2XzY0LXBva3ktbGludXgvdGNsLTguNS4xMS1yNS9pbWFnZSBpbnN0YWxsCit8IE1ha2luZyBkaXJlY3RvcnkgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvd29yay94ODZfNjQtcG9reS1saW51eC90Y2wtOC41LjExLXI1L2ltYWdlL3Vzci9saWIKK3wgSW5zdGFsbGluZyBtZXNzYWdlIGNhdGFsb2dzCit8IE1ha2luZyBkaXJlY3RvcnkgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvd29yay94ODZfNjQtcG9reS1saW51eC90Y2wtOC41LjExLXI1L2ltYWdlL3Vzci9zaGFyZS9tYW4KK3wgdGNsc2g6IC9saWI2NC9saWJjLnNvLjY6IHZlcnNpb24gYEdMSUJDXzIuMTQnIG5vdCBmb3VuZCAocmVxdWlyZWQgYnkgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvd29yay94ODZfNjQtcG9reS1saW51eC90Y2wtOC41LjExLXI1L3RjbDguNS4xMS91bml4L2xpYnRjbDguNS5zbykKK3wgTWFraW5nIGRpcmVjdG9yeSAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC93b3JrL3g4Nl82NC1wb2t5LWxpbnV4L3RjbC04LjUuMTEtcjUvaW1hZ2UvdXNyL2JpbgorfCBtYWtlOiAqKiogW2luc3RhbGwtbXNnc10gRXJyb3IgMQorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNC8yNgorCitJbmRleDogdW5peC9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVuaXgub3JpZy9NYWtlZmlsZS5pbgkyMDEzLTExLTEwIDIzOjM4OjAxLjc4NzQyNTYyOCAtMDgwMAorKysrIHVuaXgvTWFrZWZpbGUuaW4JMjAxMy0xMS0xMCAyMzozNzo1OS44MDc0MjU1NzggLTA4MDAKK0BAIC02ODYsNyArNjg2LDcgQEAKKyAjIHRjbHRlc3QgZXhlY3V0YWJsZSBnZXRzIHRoZSBidWlsZCBkaXJlY3RvcnkgYnVybmVkIGludG8gaXRzIGxkIHNlYXJjaCBwYXRoLgorICMgVGhpcyBrZWVwcyB0Y2x0ZXN0IGZyb20gcGlja2luZyB1cCBhbiBhbHJlYWR5IGluc3RhbGxlZCB2ZXJzaW9uIG9mIHRoZSBUY2wKKyAjIGxpYnJhcnkuCistU0hFTExfRU5WID0JQExEX0xJQlJBUllfUEFUSF9WQVJAPWBwd2RgOiR7QExEX0xJQlJBUllfUEFUSF9WQVJAfSBcCisrU0hFTExfRU5WID0JQExEX0xJQlJBUllfUEFUSF9WQVJAPSR7QExEX0xJQlJBUllfUEFUSF9WQVJAfSBcCisgCQlUQ0xMSUJQQVRIPSJAYWJzX2J1aWxkZGlyQC9wa2dzIiBcCisgCQlUQ0xfTElCUkFSWT0iJHtUQ0xfQlVJTERUSU1FX0xJQlJBUll9IgorIAorQEAgLTcxMiw3ICs3MTIsNyBAQAorIAkkKFNIRUxMX0VOVikgJHtUQ0xURVNUX0VYRX0gJChUT1BfRElSKS90ZXN0cy9hbGwudGNsICQoVEVTVEZMQUdTKQorIAorIGdkYi10ZXN0OiAke1RDTFRFU1RfRVhFfQorLQlAZWNobyAic2V0IGVudiBATERfTElCUkFSWV9QQVRIX1ZBUkA9YHB3ZGA6JCR7QExEX0xJQlJBUllfUEFUSF9WQVJAfSIgPiBnZGIucnVuCisrCUBlY2hvICJzZXQgZW52IEBMRF9MSUJSQVJZX1BBVEhfVkFSQD0kJHtATERfTElCUkFSWV9QQVRIX1ZBUkB9IiA+IGdkYi5ydW4KKyAJQGVjaG8gInNldCBlbnYgVENMX0xJQlJBUlk9JHtUQ0xfQlVJTERUSU1FX0xJQlJBUll9IiA+PiBnZGIucnVuCisgCUBlY2hvICJzZXQgYXJncyAkKFRPUF9ESVIpL3Rlc3RzL2FsbC50Y2wgJChURVNURkxBR1MpIC1zaW5nbGVwcm9jIDEiID4+IGdkYi5ydW4KKyAJJChHREIpICR7VENMVEVTVF9FWEV9IC0tY29tbWFuZD1nZGIucnVuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvZml4X25vbl9uYXRpdmVfYnVpbGRfaXNzdWUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvZml4X25vbl9uYXRpdmVfYnVpbGRfaXNzdWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYwZWI3NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9maXhfbm9uX25hdGl2ZV9idWlsZF9pc3N1ZS5wYXRjaApAQCAtMCwwICsxLDY0IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHVuaXgvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1bml4Lm9yaWcvTWFrZWZpbGUuaW4JMjAxMy0xMS0xMCAyMzozNzozNC4yNDM0MjQ5MzQgLTA4MDAKKysrKyB1bml4L01ha2VmaWxlLmluCTIwMTMtMTEtMTAgMjM6Mzc6MzQuMjQzNDI0OTM0IC0wODAwCitAQCAtNzA5LDIzICs3MDksMjMgQEAKKyB0ZXN0OiB0ZXN0LXRjbCB0ZXN0LXBhY2thZ2VzCisgCisgdGVzdC10Y2w6ICR7VENMVEVTVF9FWEV9CistCSQoU0hFTExfRU5WKSAuLyR7VENMVEVTVF9FWEV9ICQoVE9QX0RJUikvdGVzdHMvYWxsLnRjbCAkKFRFU1RGTEFHUykKKysJJChTSEVMTF9FTlYpICR7VENMVEVTVF9FWEV9ICQoVE9QX0RJUikvdGVzdHMvYWxsLnRjbCAkKFRFU1RGTEFHUykKKyAKKyBnZGItdGVzdDogJHtUQ0xURVNUX0VYRX0KKyAJQGVjaG8gInNldCBlbnYgQExEX0xJQlJBUllfUEFUSF9WQVJAPWBwd2RgOiQke0BMRF9MSUJSQVJZX1BBVEhfVkFSQH0iID4gZ2RiLnJ1bgorIAlAZWNobyAic2V0IGVudiBUQ0xfTElCUkFSWT0ke1RDTF9CVUlMRFRJTUVfTElCUkFSWX0iID4+IGdkYi5ydW4KKyAJQGVjaG8gInNldCBhcmdzICQoVE9QX0RJUikvdGVzdHMvYWxsLnRjbCAkKFRFU1RGTEFHUykgLXNpbmdsZXByb2MgMSIgPj4gZ2RiLnJ1bgorLQkkKEdEQikgLi8ke1RDTFRFU1RfRVhFfSAtLWNvbW1hbmQ9Z2RiLnJ1bgorKwkkKEdEQikgJHtUQ0xURVNUX0VYRX0gLS1jb21tYW5kPWdkYi5ydW4KKyAJcm0gZ2RiLnJ1bgorIAorICMgVXNlZnVsIHRhcmdldCB0byBsYXVuY2ggYSBidWlsdCB0Y2x0ZXN0IHdpdGggdGhlIHByb3BlciBwYXRoLC4uLgorIHJ1bnRlc3Q6ICR7VENMVEVTVF9FWEV9CistCSQoU0hFTExfRU5WKSAuLyR7VENMVEVTVF9FWEV9CisrCSQoU0hFTExfRU5WKSAke1RDTFRFU1RfRVhFfQorIAorICMgVXNlZnVsIHRhcmdldCBmb3IgcnVubmluZyB0aGUgdGVzdCBzdWl0ZSB3aXRoIGFuIHVud3JpdGFibGUgY3VycmVudAorICMgZGlyZWN0b3J5Li4uCisgcm8tdGVzdDogJHtUQ0xURVNUX0VYRX0KKy0JZWNobyAnZXhlYyBjaG1vZCAtdyAuO3BhY2thZ2UgcmVxdWlyZSB0Y2x0ZXN0O3RjbHRlc3Q6OnRlbXBvcmFyeURpcmVjdG9yeSAvdG1wO3NvdXJjZSAuLi90ZXN0cy9hbGwudGNsO2V4ZWMgY2htb2QgK3cgLicgfCAkKFNIRUxMX0VOVikgLi8ke1RDTFRFU1RfRVhFfQorKwllY2hvICdleGVjIGNobW9kIC13IC47cGFja2FnZSByZXF1aXJlIHRjbHRlc3Q7dGNsdGVzdDo6dGVtcG9yYXJ5RGlyZWN0b3J5IC90bXA7c291cmNlIC4uL3Rlc3RzL2FsbC50Y2w7ZXhlYyBjaG1vZCArdyAuJyB8ICQoU0hFTExfRU5WKSAke1RDTFRFU1RfRVhFfQorIAorICMgVGhlIGZvbGxvd2luZyB0YXJnZXQgZ2VuZXJhdGVzIHRoZSBzaGFyZWQgbGlicmFyaWVzIGluIGRsdGVzdC8gdGhhdCBhcmUgdXNlZAorICMgZm9yIHRlc3Rpbmc7IHRoZXkgYXJlIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlICJ0Y2x0ZXN0IiB0YXJnZXQgKHZpYSB0aGUKK0BAIC03NDMsMjMgKzc0MywyMyBAQAorICMgVGhpcyB0YXJnZXQgY2FuIGJlIHVzZWQgdG8gcnVuIHRjbHNoIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeQorICMgdmlhIGBtYWtlIHNoZWxsIFNDUklQVD0vdG1wL2Zvby50Y2xgCisgc2hlbGw6ICR7VENMX0VYRX0KKy0JJChTSEVMTF9FTlYpIC4vJHtUQ0xfRVhFfSAkKFNDUklQVCkKKysJJChTSEVMTF9FTlYpICR7VENMX0VYRX0gJChTQ1JJUFQpCisgCisgIyBUaGlzIHRhcmdldCBjYW4gYmUgdXNlZCB0byBydW4gdGNsc2ggaW5zaWRlIGVpdGhlciBnZGIgb3IgaW5zaWdodAorIGdkYjogJHtUQ0xfRVhFfQorLQkkKFNIRUxMX0VOVikgJChHREIpIC4vJHtUQ0xfRVhFfQorKwkkKFNIRUxMX0VOVikgJChHREIpICR7VENMX0VYRX0KKyAKKyB2YWxncmluZDogJHtUQ0xfRVhFfSAke1RDTFRFU1RfRVhFfQorLQkkKFNIRUxMX0VOVikgJChWQUxHUklORCkgJChWQUxHUklOREFSR1MpIC4vJHtUQ0xURVNUX0VYRX0gJChUT1BfRElSKS90ZXN0cy9hbGwudGNsIC1zaW5nbGVwcm9jIDEgLWNvbnN0cmFpbnRzIHZhbGdyaW5kICQoVEVTVEZMQUdTKQorKwkkKFNIRUxMX0VOVikgJChWQUxHUklORCkgJChWQUxHUklOREFSR1MpICR7VENMVEVTVF9FWEV9ICQoVE9QX0RJUikvdGVzdHMvYWxsLnRjbCAtc2luZ2xlcHJvYyAxIC1jb25zdHJhaW50cyB2YWxncmluZCAkKFRFU1RGTEFHUykKKyAKKyB2YWxncmluZHNoZWxsOiAke1RDTF9FWEV9CistCSQoU0hFTExfRU5WKSAkKFZBTEdSSU5EKSAkKFZBTEdSSU5EQVJHUykgLi8ke1RDTF9FWEV9ICQoU0NSSVBUKQorKwkkKFNIRUxMX0VOVikgJChWQUxHUklORCkgJChWQUxHUklOREFSR1MpICR7VENMX0VYRX0gJChTQ1JJUFQpCisgCisgdHJhY2Utc2hlbGw6ICR7VENMX0VYRX0KKy0JJChTSEVMTF9FTlYpICR7VFJBQ0V9ICQoVFJBQ0VfT1BUUykgLi8ke1RDTF9FWEV9ICQoU0NSSVBUKQorKwkkKFNIRUxMX0VOVikgJHtUUkFDRX0gJChUUkFDRV9PUFRTKSAke1RDTF9FWEV9ICQoU0NSSVBUKQorIAorIHRyYWNlLXRlc3Q6ICR7VENMVEVTVF9FWEV9CistCSQoU0hFTExfRU5WKSAke1RSQUNFfSAkKFRSQUNFX09QVFMpIC4vJHtUQ0xURVNUX0VYRX0gJChUT1BfRElSKS90ZXN0cy9hbGwudGNsIC1zaW5nbGVwcm9jIDEgJChURVNURkxBR1MpCisrCSQoU0hFTExfRU5WKSAke1RSQUNFfSAkKFRSQUNFX09QVFMpICR7VENMVEVTVF9FWEV9ICQoVE9QX0RJUikvdGVzdHMvYWxsLnRjbCAtc2luZ2xlcHJvYyAxICQoVEVTVEZMQUdTKQorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgSW5zdGFsbGF0aW9uIHJ1bGVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvbm9fcGFja2FnZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvbm9fcGFja2FnZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI2Y2M0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9ub19wYWNrYWdlcy5wYXRjaApAQCAtMCwwICsxLDUzIEBACit0Y2wgOC42LjAgYnVpbGRzIGJ5IGRlZmF1bHQgYSBudW1iZXIgb2YgcGFja2FnZXMgdGhhdCBhcmUgbm90IG5lZWRlZCBpbiBZb2N0by4KK1RoaXMgcGF0Y2ggY2hhbmdlcyB0aGUgbWFrZWZpbGUgc28gdGhhdCB0aGVzZSBwYWNrYWdlcyBhcmUgbm90IGJ1aWx0IGJ5IGRlZmF1bHQuCisKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogQm9nZGFuIE1hcmluZXNjdSA8Ym9nZGFuLmEubWFyaW5lc2N1QGludGVsLmNvbT4KKworSW5kZXg6IHVuaXgvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1bml4Lm9yaWcvTWFrZWZpbGUuaW4JMjAxMy0xMS0xMCAyMzozODoxMi4yMzU0MjU4OTEgLTA4MDAKKysrKyB1bml4L01ha2VmaWxlLmluCTIwMTMtMTEtMTAgMjM6Mzg6MTIuMjMxNDI1ODkxIC0wODAwCitAQCAtNjExLDcgKzYxMSw3IEBACisgIyBTdGFydCBvZiBydWxlcworICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorLWFsbDogYmluYXJpZXMgbGlicmFyaWVzIGRvYyBwYWNrYWdlcworK2FsbDogYmluYXJpZXMgbGlicmFyaWVzIGRvYworIAorIGJpbmFyaWVzOiAke0xJQl9GSUxFfSAkKFNUVUJfTElCX0ZJTEUpICR7VENMX0VYRX0KKyAKK0BAIC02NTMsMTIgKzY1MywxMiBAQAorICN0Y2xDb25maWcuaDogJChVTklYX0RJUikvdGNsQ29uZmlnLmguaW4KKyAjCSQoU0hFTEwpIGNvbmZpZy5zdGF0dXMKKyAKKy1jbGVhbjogY2xlYW4tcGFja2FnZXMKKytjbGVhbjoKKyAJcm0gLWYgKi5hICoubyBsaWJ0Y2wqIGNvcmUgZXJycyAqfiBcIyogVEFHUyAqLkUgYS5vdXQgXAorIAkJZXJyb3JzICR7VENMX0VYRX0gJHtUQ0xURVNUX0VYRX0gbGliLmV4cCBUY2wgQERUUkFDRV9IRFJACisgCWNkIGRsdGVzdCA7ICQoTUFLRSkgY2xlYW4KKyAKKy1kaXN0Y2xlYW46IGRpc3RjbGVhbi1wYWNrYWdlcyBjbGVhbgorK2Rpc3RjbGVhbjogY2xlYW4KKyAJcm0gLXJmIE1ha2VmaWxlIGNvbmZpZy5zdGF0dXMgY29uZmlnLmNhY2hlIGNvbmZpZy5sb2cgdGNsQ29uZmlnLnNoIFwKKyAJCXRjbENvbmZpZy5oICoucGxpc3QgVGNsLmZyYW1ld29yayB0Y2wucGMKKyAJY2QgZGx0ZXN0IDsgJChNQUtFKSBkaXN0Y2xlYW4KK0BAIC03MDYsNyArNzA2LDcgQEAKKyAjIHRjbHRlc3QsIGllOgorICMJJSBtYWtlIHRlc3QgVEVTVEZMQUdTPSItdmVyYm9zZSBicHMgLWZpbGUgZmlsZU5hbWUudGVzdCIKKyAKKy10ZXN0OiB0ZXN0LXRjbCB0ZXN0LXBhY2thZ2VzCisrdGVzdDogdGVzdC10Y2wKKyAKKyB0ZXN0LXRjbDogJHtUQ0xURVNUX0VYRX0KKyAJJChTSEVMTF9FTlYpICR7VENMVEVTVF9FWEV9ICQoVE9QX0RJUikvdGVzdHMvYWxsLnRjbCAkKFRFU1RGTEFHUykKK0BAIC03NzEsNyArNzcxLDcgQEAKKyBJTlNUQUxMX0RFVl9UQVJHRVRTID0gaW5zdGFsbC1oZWFkZXJzCisgSU5TVEFMTF9FWFRSQV9UQVJHRVRTID0gQEVYVFJBX0lOU1RBTExACisgSU5TVEFMTF9UQVJHRVRTID0gJChJTlNUQUxMX0JBU0VfVEFSR0VUUykgJChJTlNUQUxMX0RPQ19UQVJHRVRTKSAkKElOU1RBTExfREVWX1RBUkdFVFMpIFwKKy0JCSAgJChJTlNUQUxMX1BBQ0tBR0VfVEFSR0VUUykgJChJTlNUQUxMX0VYVFJBX1RBUkdFVFMpCisrCQkgICQoSU5TVEFMTF9FWFRSQV9UQVJHRVRTKQorIAorIGluc3RhbGw6ICQoSU5TVEFMTF9UQVJHRVRTKQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFkYmE2NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9ydW4tcHRlc3QKQEAgLTAsMCArMSw4IEBACisjIS9iaW4vc2gKKworZm9yIGkgaW4gYGxzIHRlc3RzLyoudGVzdCB8YXdrIC1GLyAne3ByaW50ICQyfSdgOyBcCisgICAgZG8gVENMX0xJQlJBUlk9bGlicmFyeSAuL3RjbHRlc3QgdGVzdHMvYWxsLnRjbCAtZmlsZSAkaSA+JGkudG1wIDI+JjE7IFwKKyAgICBncmVwIC1xICJeRmlsZXMgd2l0aCBmYWlsaW5nIHRlc3RzOiIgJGkudG1wOyBcCisgICAgaWYgWyAkPyAtZXEgMCBdOyB0aGVuIGVjaG8gIkZBSUw6ICRpIjsgXAorICAgIGVsc2UgZWNobyAiUEFTUzogJGkiOyBybSAtZiAkaS50bXA7IGZpOyBcCitkb25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvdGNsLWFkZC1zb25hbWUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvdGNsLWFkZC1zb25hbWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYyNzZlYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC90Y2wtYWRkLXNvbmFtZS5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHVuaXgvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW5peC5vcmlnL2NvbmZpZ3VyZQkyMDEzLTA5LTE5IDEzOjE3OjEzLjAwMDAwMDAwMCAtMDcwMAorKysrIHVuaXgvY29uZmlndXJlCTIwMTMtMTEtMTEgMDA6MjA6NTEuNTE5NDkwMzQyIC0wODAwCitAQCAtNzU5OSw2ICs3NTk5LDkgQEAKKyAJICAgICMgZ2V0IHJpZCBvZiB0aGUgd2FybmluZ3MuCisgCSAgICAjQ0ZMQUdTX09QVElNSVpFPSIke0NGTEFHU19PUFRJTUlaRX0gLURfX05PX1NUUklOR19JTkxJTkVTIC1EX19OT19NQVRIX0lOTElORVMiCisgCisrCSAgICAjIGZvbGxvd2luZyBsaW5lIGFkZGVkIGJ5IENXIGZvciBEZWJpYW4gR05VL0xpbnV4CisrCSAgICBUQ0xfU0hMSUJfTERfRVhUUkFTPSItV2wsLXNvbmFtZSxcJHtUQ0xfTElCX0ZJTEV9LjAiCisrCisgCSAgICBTSExJQl9MRD0nJHtDQ30gLXNoYXJlZCAke0NGTEFHU30gJHtMREZMQUdTfScKKyAJICAgIERMX09CSlM9InRjbExvYWREbC5vIgorIAkgICAgRExfTElCUz0iLWxkbCIKK0luZGV4OiB1bml4L3RjbC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVuaXgub3JpZy90Y2wubTQJMjAxMy0wOS0xOSAxMzoxNzoxMy4wMDAwMDAwMDAgLTA3MDAKKysrKyB1bml4L3RjbC5tNAkyMDEzLTExLTExIDAwOjE3OjI0LjI2MzQ4NTEyMyAtMDgwMAorQEAgLTE0MTUsNiArMTQxNSw5IEBACisgCSAgICAjIGdldCByaWQgb2YgdGhlIHdhcm5pbmdzLgorIAkgICAgI0NGTEFHU19PUFRJTUlaRT0iJHtDRkxBR1NfT1BUSU1JWkV9IC1EX19OT19TVFJJTkdfSU5MSU5FUyAtRF9fTk9fTUFUSF9JTkxJTkVTIgorIAorKwkgICAgIyBmb2xsb3dpbmcgbGluZSBhZGRlZCBieSBDVyBmb3IgRGViaWFuIEdOVS9MaW51eAorKwkgICAgVENMX1NITElCX0xEX0VYVFJBUz0iLVdsLC1zb25hbWUsXCR7VENMX0xJQl9GSUxFfS4wIgorKworIAkgICAgU0hMSUJfTEQ9JyR7Q0N9IC1zaGFyZWQgJHtDRkxBR1N9ICR7TERGTEFHU30nCisgCSAgICBETF9PQkpTPSJ0Y2xMb2FkRGwubyIKKyAJICAgIERMX0xJQlM9Ii1sZGwiCitJbmRleDogdW5peC9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVuaXgub3JpZy9NYWtlZmlsZS5pbgkyMDEzLTA5LTE5IDEzOjE3OjEzLjAwMDAwMDAwMCAtMDcwMAorKysrIHVuaXgvTWFrZWZpbGUuaW4JMjAxMy0xMS0xMSAwMDoyMDozMi40MjM0ODk4NjEgLTA4MDAKK0BAIC03OTYsNyArNzk2LDEwIEBACisgCSAgICBkb25lOworIAlAZWNobyAiSW5zdGFsbGluZyAkKExJQl9GSUxFKSB0byAkKERMTF9JTlNUQUxMX0RJUikvIgorIAlAQElOU1RBTExfTElCQAorLQlAY2htb2QgNTU1ICIkKERMTF9JTlNUQUxMX0RJUikvJChMSUJfRklMRSkiCisrCW12ICIkKERMTF9JTlNUQUxMX0RJUikiLyQoTElCX0ZJTEUpICIkKERMTF9JTlNUQUxMX0RJUikiLyQoTElCX0ZJTEUpLjAKKysJbG4gLXNmICQoTElCX0ZJTEUpLjAgIiQoRExMX0lOU1RBTExfRElSKSIvJChMSUJfRklMRSkKKysJbG4gLXNmICIkKERMTF9JTlNUQUxMX0RJUikiLyQoTElCX0ZJTEUpLjAgLi8KKysJQGNobW9kIDU1NSAiJChETExfSU5TVEFMTF9ESVIpIi8kKExJQl9GSUxFKS4wCisgCUBlY2hvICJJbnN0YWxsaW5nICR7VENMX0VYRX0gYXMgJChCSU5fSU5TVEFMTF9ESVIpL3RjbHNoJChWRVJTSU9OKSR7RVhFX1NVRkZJWH0iCisgCUAkKElOU1RBTExfUFJPR1JBTSkgJHtUQ0xfRVhFfSAiJChCSU5fSU5TVEFMTF9ESVIpL3RjbHNoJChWRVJTSU9OKSR7RVhFX1NVRkZJWH0iCisgCUBlY2hvICJJbnN0YWxsaW5nIHRjbENvbmZpZy5zaCB0byAkKENPTkZJR19JTlNUQUxMX0RJUikvIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL3RjbC1yZW1vdmUtaGFyZGNvZGVkLWluc3RhbGwtcGF0aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC90Y2wtcmVtb3ZlLWhhcmRjb2RlZC1pbnN0YWxsLXBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZmN2M4MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC90Y2wtcmVtb3ZlLWhhcmRjb2RlZC1pbnN0YWxsLXBhdGgucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorRnJvbSA2ZWZjOTg3NzQ2ODE3OTU3MTIwNzNjMmI5MWU1ZTlkMTc2MzIzOWI4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIlNvbmcuTGkiIDxTb25nLkxpQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDEgQXVnIDIwMTIgMTk6MDU6NTEgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gdGNsOmluc3RhbGwgdGNsIHRvIGxpYjY0IGluc3RlYWQgb2YgbGliIG9uIDY0Yml0IHRhcmdldAorCitSZW1vdmUgaGFyZGNvZGVkIGxpYnJhcnkgaW5zdGFsbCBwYXRoLiBDaGFuZ2UgJChwcmVmaXgpL2xpYi8gdG8gJHtsaWJkaXJ9LgorCitbWU9DVE8gIzI4NzZdCisKK1RoaXMgaXMgbm90IGEgYnVnLCBidXQgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQgaW50byBkaXJlY3RvcnkgLi4uL2xpYi8uCitPbiA2NGJpdCB0YXJnZXQgdGhhdCBzaG91bGQgYmUgbGliNjQvLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFNvbmcuTGkgPFNvbmcuTGlAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorCistLS0KKyBjb25maWd1cmUgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiB1bml4L2NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVuaXgub3JpZy9jb25maWd1cmUJMjAxMy0xMS0xMCAyMzozODozMy42NDM0MjY0MzAgLTA4MDAKKysrKyB1bml4L2NvbmZpZ3VyZQkyMDEzLTExLTEwIDIzOjM5OjUxLjM0NzQyODM4NyAtMDgwMAorQEAgLTE5MTM0LDcgKzE5MTM0LDcgQEAKKyAKKyBldmFsICJUQ0xfTElCX0ZJTEU9JHtUQ0xfTElCX0ZJTEV9IgorIAorLVRDTF9MSUJSQVJZPSckKHByZWZpeCkvbGliL3RjbCQoVkVSU0lPTiknCisrVENMX0xJQlJBUlk9JyQobGliZGlyKS90Y2wkKFZFUlNJT04pJworIFBSSVZBVEVfSU5DTFVERV9ESVI9JyQoaW5jbHVkZWRpciknCisgSFRNTF9ESVI9JyQoRElTVERJUikvaHRtbCcKKyAKK0luZGV4OiB1bml4L2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVuaXgub3JpZy9jb25maWd1cmUuaW4JMjAxMy0xMS0xMCAyMzoyMDo1MC4wMDAwMDAwMDAgLTA4MDAKKysrKyB1bml4L2NvbmZpZ3VyZS5pbgkyMDEzLTExLTEwIDIzOjM5OjQxLjE5OTQyODEzMSAtMDgwMAorQEAgLTc5MCw3ICs3OTAsNyBAQAorIAorIGV2YWwgIlRDTF9MSUJfRklMRT0ke1RDTF9MSUJfRklMRX0iCisgCistVENMX0xJQlJBUlk9JyQocHJlZml4KS9saWIvdGNsJChWRVJTSU9OKScKKytUQ0xfTElCUkFSWT0nJChsaWJkaXIpL3RjbCQoVkVSU0lPTiknCisgUFJJVkFURV9JTkNMVURFX0RJUj0nJChpbmNsdWRlZGlyKScKKyBIVE1MX0RJUj0nJChESVNURElSKS9odG1sJworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsXzguNi40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsXzguNi40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlOTJiM2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2xfOC42LjQuYmIKQEAgLTAsMCArMSwxMDIgQEAKK1NVTU1BUlkgPSAiVG9vbCBDb21tYW5kIExhbmd1YWdlIgorSE9NRVBBR0UgPSAiaHR0cDovL3RjbC5zb3VyY2Vmb3JnZS5uZXQiCitTRUNUSU9OID0gImRldmVsL3RjbHRrIgorCisjIGh0dHA6Ly93d3cudGNsLnRrL3NvZnR3YXJlL3RjbHRrL2xpY2Vuc2UuaHRtbAorTElDRU5TRSA9ICJ0Y2wgJiBCU0QtMy1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8uLi9saWNlbnNlLnRlcm1zO21kNT0wNThmNjIyOTc5ODI4MWJiY2FjNDIzOWM3ODhjZmEzOCBcCisgICAgZmlsZTovLy4uL2NvbXBhdC9saWNlbnNlLnRlcm1zO21kNT0wNThmNjIyOTc5ODI4MWJiY2FjNDIzOWM3ODhjZmEzOCBcCisgICAgZmlsZTovLy4uL2xpYnJhcnkvbGljZW5zZS50ZXJtczttZDU9MDU4ZjYyMjk3OTgyODFiYmNhYzQyMzljNzg4Y2ZhMzggXAorICAgIGZpbGU6Ly8uLi9tYWNvc3gvbGljZW5zZS50ZXJtczttZDU9MDU4ZjYyMjk3OTgyODFiYmNhYzQyMzljNzg4Y2ZhMzggXAorICAgIGZpbGU6Ly8uLi90ZXN0cy9saWNlbnNlLnRlcm1zO21kNT0wNThmNjIyOTc5ODI4MWJiY2FjNDIzOWM3ODhjZmEzOCBcCisgICAgZmlsZTovLy4uL3dpbi9saWNlbnNlLnRlcm1zO21kNT0wNThmNjIyOTc5ODI4MWJiY2FjNDIzOWM3ODhjZmEzOCBcCisiCisKK0RFUEVORFMgPSAidGNsLW5hdGl2ZSB6bGliIgorCitCQVNFX1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3RjbC8ke0JQTn0ke1BWfS1zcmMudGFyLmd6IFwKKyAgICAgICAgICAgICAgICBmaWxlOi8vdGNsLWFkZC1zb25hbWUucGF0Y2giCitTUkNfVVJJID0gIiR7QkFTRV9TUkNfVVJJfSBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfbm9uX25hdGl2ZV9idWlsZF9pc3N1ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfaXNzdWVfd2l0aF9vbGRfZGlzdHJvX2dsaWJjLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25vX3BhY2thZ2VzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3RjbC1yZW1vdmUtaGFyZGNvZGVkLWluc3RhbGwtcGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hbHRlci1pbmNsdWRlZGlyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiZDdjYmI5MWYxZGVkMTkxOTM3MGEzMGVkZDE1MzQzMDQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWU2ZWQ5NGM5ODFjMWQwYzVmNWZlZmI4MTEyZDA2YzZiZjRkMDUwYTczMjdlOTVlNzFkNDE3YzQxNjUxOWM4ZCIKKworU1JDX1VSSV9jbGFzcy1uYXRpdmUgPSAiJHtCQVNFX1NSQ19VUkl9IgorCitTID0gIiR7V09SS0RJUn0vJHtCUE59JHtQVn0vdW5peCIKKworVkVSID0gIiR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwdGVzdCBiaW5jb25maWcKKworREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiemxpYi1uYXRpdmUiCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS10aHJlYWRzIC0tZGlzYWJsZS1ycGF0aCAtLWxpYmRpcj0ke2xpYmRpcn0iCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwljZCAke1N9CisJZ251LWNvbmZpZ2l6ZQorCWNkICR7Qn0KKwlvZV9ydW5jb25mCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKwllY2hvID4gJHtTfS8uLi9jb21wYXQvZml4c3RydG9kLmMKK30KKworZG9faW5zdGFsbCgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbCBpbnN0YWxsLXByaXZhdGUtaGVhZGVycworCWxuIC1zZiAuL3RjbHNoJHtWRVJ9ICR7RH0ke2JpbmRpcn0vdGNsc2gKKwlsbiAtc2YgdGNsc2g4LjYgJHtEfSR7YmluZGlyfS90Y2xzaCR7VkVSfQorCXNlZCAtaSAicystTCR7Qn0rLUwke1NUQUdJTkdfTElCRElSfStnIiB0Y2xDb25maWcuc2gKKwlzZWQgLWkgInMrJHtXT1JLRElSfSske1NUQUdJTkdfSU5DRElSfStnIiB0Y2xDb25maWcuc2gKKwlzZWQgLWkgInMsLUwke2xpYmRpcn0sLUw9JHtsaWJkaXJ9LGciIHRjbENvbmZpZy5zaAorCXNlZCAtaSAicywtSSR7aW5jbHVkZWRpcn0sLUk9JHtpbmNsdWRlZGlyfSxnIiB0Y2xDb25maWcuc2gKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9CisJaW5zdGFsbCAtbSAwNzU1IHRjbENvbmZpZy5zaCAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQorCWluc3RhbGwgLW0gMDc1NSB0Y2xDb25maWcuc2ggJHtEfSR7bGliZGlyfQorCWNkIC4uCisJZm9yIGRpciBpbiBjb21wYXQgZ2VuZXJpYyB1bml4OyBkbworCQlpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9LyR7QlBOfSR7VkVSfS8kZGlyCisJCWluc3RhbGwgLW0gMDY0NCAke1N9Ly4uLyRkaXIvKi5oICR7RH0ke2luY2x1ZGVkaXJ9LyR7QlBOfSR7VkVSfS8kZGlyLworCWRvbmUKK30KKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJ0Y2xfc3lzcm9vdF9wcmVwcm9jZXNzIgordGNsX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30gJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQorfQorCitQQUNLQUdFUyA9KyAidGNsLWxpYiIKK0ZJTEVTX3RjbC1saWIgPSAiJHtsaWJkaXJ9L2xpYnRjbDguNi5zby4qIgorRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS90Y2wke1ZFUn0gJHtsaWJkaXJ9L3RjbDguNiAke2xpYmRpcn0vdGNsOCIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3RjbENvbmZpZy5zaCAke2xpYmRpcn0vdGNsb29Db25maWcuc2giCisKKyMgaXNuJ3QgZ2V0dGluZyBwaWNrZWQgdXAgYnkgc2hsaWJzIGNvZGUKK1JERVBFTkRTXyR7UE59ICs9ICJ0Y2wtbGliIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJsaWJnY2MiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitkb19jb21waWxlX3B0ZXN0KCkgeworCW9lX3J1bm1ha2UgdGNsdGVzdAorfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCWNwICR7Qn0vdGNsdGVzdCAke0R9JHtQVEVTVF9QQVRIfQorCWNwIC1yICR7U30vLi4vbGlicmFyeSAke0R9JHtQVEVTVF9QQVRIfQorCWNwIC1yICR7U30vLi4vdGVzdHMgJHtEfSR7UFRFU1RfUEFUSH0KK30KKworIyBGaXggc29tZSBwYXRocyB0aGF0IG1pZ2h0IGJlIHVzZWQgYnkgVGNsIGV4dGVuc2lvbnMKK0JJTkNPTkZJR19HTE9CID0gIipDb25maWcuc2giCisKKyMgRml4IHRoZSBwYXRoIGluIHNzdGF0ZQorU1NUQVRFX1NDQU5fRklMRVMgKz0gIipDb25maWcuc2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9hbHRlcm5hdGVfcnBjX3BvcnRzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvYWx0ZXJuYXRlX3JwY19wb3J0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjc0NWQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvYWx0ZXJuYXRlX3JwY19wb3J0cy5wYXRjaApAQCAtMCwwICsxLDE1OCBAQAorQWRkIGFiaWxpdHkgdG8gc3BlY2lmeSByY3AgcG9ydCBudW1iZXJzCisKK0luIG9yZGVyIHRvIHJ1biBtb3JlIHRoYW4gb25lIHVuZnMgc2VydmVyIG9uIGEgaG9zdCBzeXN0ZW0sIHlvdSBtdXN0CitiZSBhYmxlIHRvIHNwZWNpZnkgYWx0ZXJuYXRlIHJwYyBwb3J0IG51bWJlcnMuCisKK0phc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC91bmZzMy9idWdzLzUvCisKKy0tLQorIGRhZW1vbi5jIHwgICA0NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQorIG1vdW50LmMgIHwgICAgNCArKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCAzMyBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKKworLS0tIGEvZGFlbW9uLmMKKysrKyBiL2RhZW1vbi5jCitAQCAtNzgsNiArNzgsOCBAQCBpbnQgb3B0X3Rlc3Rjb25maWcgPSBGQUxTRTsKKyBzdHJ1Y3QgaW5fYWRkciBvcHRfYmluZF9hZGRyOworIGludCBvcHRfcmVhZGFibGVfZXhlY3V0YWJsZXMgPSBGQUxTRTsKKyBjaGFyICpvcHRfcGlkX2ZpbGUgPSBOVUxMOworK2ludCBuZnNfcHJvZyA9IE5GUzNfUFJPR1JBTTsKKytpbnQgbW91bnRfcHJvZyA9IE1PVU5UUFJPRzsKKyAKKyAvKiBSZWdpc3RlciB3aXRoIHBvcnRtYXBwZXI/ICovCisgaW50IG9wdF9wb3J0bWFwcGVyID0gVFJVRTsKK0BAIC0yMDYsNyArMjA4LDcgQEAgc3RhdGljIHZvaWQgcGFyc2Vfb3B0aW9ucyhpbnQgYXJnYywgY2hhcgorIHsKKyAKKyAgICAgaW50IG9wdCA9IDA7CistICAgIGNoYXIgKm9wdHN0cmluZyA9ICJiY0M6ZGU6aGw6bTpuOnByc3RUdXdpOiI7CisrICAgIGNoYXIgKm9wdHN0cmluZyA9ICJiY0M6ZGU6aGw6bTpuOnByc3RUdXdpOng6eToiOworIAorICAgICB3aGlsZSAob3B0ICE9IC0xKSB7CisgCW9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBvcHRzdHJpbmcpOworQEAgLTI2MSw4ICsyNjMsMjQgQEAgc3RhdGljIHZvaWQgcGFyc2Vfb3B0aW9ucyhpbnQgYXJnYywgY2hhcgorIAkJcHJpbnRmCisgCQkgICAgKCJcdC1yICAgICAgICAgIHJlcG9ydCB1bnJlYWRhYmxlIGV4ZWN1dGFibGVzIGFzIHJlYWRhYmxlXG4iKTsKKyAJCXByaW50ZigiXHQtVCAgICAgICAgICB0ZXN0IGV4cG9ydHMgZmlsZSBhbmQgZXhpdFxuIik7CisrCQlwcmludGYoIlx0LXggPHBvcnQ+ICAgYWx0ZXJuYXRlIE5GUyBSUEMgcG9ydFxuIik7CisrCQlwcmludGYoIlx0LXkgPHBvcnQ+ICAgYWx0ZXJuYXRlIE1PVU5URCBSUEMgcG9ydFxuIik7CisgCQlleGl0KDApOworIAkJYnJlYWs7CisrCSAgICBjYXNlICd4JzoKKysJCW5mc19wcm9nID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMTApOworKwkJaWYgKG5mc19wcm9nID09IDApIHsKKysJCSAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgTkZTIFJQQyBwb3J0XG4iKTsKKysJCSAgICBleGl0KDEpOworKwkJfQorKwkJYnJlYWs7CisrCSAgICBjYXNlICd5JzoKKysJCW1vdW50X3Byb2cgPSBzdHJ0b2wob3B0YXJnLCBOVUxMLCAxMCk7CisrCQlpZiAobW91bnRfcHJvZyA9PSAwKSB7CisrCQkgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIE1PVU5URCBSUEMgcG9ydFxuIik7CisrCQkgICAgZXhpdCgxKTsKKysJCX0KKysJCWJyZWFrOworIAkgICAgY2FzZSAnbCc6CisgCQlvcHRfYmluZF9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihvcHRhcmcpOworIAkJaWYgKG9wdF9iaW5kX2FkZHIuc19hZGRyID09ICh1bnNpZ25lZCkgLTEpIHsKK0BAIC0zNDcsMTIgKzM2NSwxMiBAQCB2b2lkIGRhZW1vbl9leGl0KGludCBlcnJvcikKKyAjZW5kaWYJCQkJICAgICAgIC8qIFdJTjMyICovCisgCisgICAgIGlmIChvcHRfcG9ydG1hcHBlcikgeworLQlzdmNfdW5yZWdpc3RlcihNT1VOVFBST0csIE1PVU5UVkVSUzEpOworLQlzdmNfdW5yZWdpc3RlcihNT1VOVFBST0csIE1PVU5UVkVSUzMpOworKwlzdmNfdW5yZWdpc3Rlcihtb3VudF9wcm9nLCBNT1VOVFZFUlMxKTsKKysJc3ZjX3VucmVnaXN0ZXIobW91bnRfcHJvZywgTU9VTlRWRVJTMyk7CisgICAgIH0KKyAKKyAgICAgaWYgKG9wdF9wb3J0bWFwcGVyKSB7CistCXN2Y191bnJlZ2lzdGVyKE5GUzNfUFJPR1JBTSwgTkZTX1YzKTsKKysJc3ZjX3VucmVnaXN0ZXIobmZzX3Byb2csIE5GU19WMyk7CisgICAgIH0KKyAKKyAgICAgaWYgKGVycm9yID09IFNJR1NFR1YpCitAQCAtNjU3LDEzICs2NzUsMTMgQEAgc3RhdGljIHZvaWQgbW91bnRwcm9nXzMoc3RydWN0IHN2Y19yZXEgKgorIHN0YXRpYyB2b2lkIHJlZ2lzdGVyX25mc19zZXJ2aWNlKFNWQ1hQUlQgKiB1ZHB0cmFuc3AsIFNWQ1hQUlQgKiB0Y3B0cmFuc3ApCisgeworICAgICBpZiAob3B0X3BvcnRtYXBwZXIpIHsKKy0JcG1hcF91bnNldChORlMzX1BST0dSQU0sIE5GU19WMyk7CisrCXBtYXBfdW5zZXQobmZzX3Byb2csIE5GU19WMyk7CisgICAgIH0KKyAKKyAgICAgaWYgKHVkcHRyYW5zcCAhPSBOVUxMKSB7CisgCS8qIFJlZ2lzdGVyIE5GUyBzZXJ2aWNlIGZvciBVRFAgKi8KKyAJaWYgKCFzdmNfcmVnaXN0ZXIKKy0JICAgICh1ZHB0cmFuc3AsIE5GUzNfUFJPR1JBTSwgTkZTX1YzLCBuZnMzX3Byb2dyYW1fMywKKysJICAgICh1ZHB0cmFuc3AsIG5mc19wcm9nLCBORlNfVjMsIG5mczNfcHJvZ3JhbV8zLAorIAkgICAgIG9wdF9wb3J0bWFwcGVyID8gSVBQUk9UT19VRFAgOiAwKSkgeworIAkgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwKKyAJCSAgICAidW5hYmxlIHRvIHJlZ2lzdGVyIChORlMzX1BST0dSQU0sIE5GU19WMywgdWRwKS4iKTsKK0BAIC02NzQsNyArNjkyLDcgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJfbmZzX3NlcnZpY2UoU1ZDWFBSVAorICAgICBpZiAodGNwdHJhbnNwICE9IE5VTEwpIHsKKyAJLyogUmVnaXN0ZXIgTkZTIHNlcnZpY2UgZm9yIFRDUCAqLworIAlpZiAoIXN2Y19yZWdpc3RlcgorLQkgICAgKHRjcHRyYW5zcCwgTkZTM19QUk9HUkFNLCBORlNfVjMsIG5mczNfcHJvZ3JhbV8zLAorKwkgICAgKHRjcHRyYW5zcCwgbmZzX3Byb2csIE5GU19WMywgbmZzM19wcm9ncmFtXzMsCisgCSAgICAgb3B0X3BvcnRtYXBwZXIgPyBJUFBST1RPX1RDUCA6IDApKSB7CisgCSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLAorIAkJICAgICJ1bmFibGUgdG8gcmVnaXN0ZXIgKE5GUzNfUFJPR1JBTSwgTkZTX1YzLCB0Y3ApLiIpOworQEAgLTY4NiwxNCArNzA0LDE0IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyX25mc19zZXJ2aWNlKFNWQ1hQUlQKKyBzdGF0aWMgdm9pZCByZWdpc3Rlcl9tb3VudF9zZXJ2aWNlKFNWQ1hQUlQgKiB1ZHB0cmFuc3AsIFNWQ1hQUlQgKiB0Y3B0cmFuc3ApCisgeworICAgICBpZiAob3B0X3BvcnRtYXBwZXIpIHsKKy0JcG1hcF91bnNldChNT1VOVFBST0csIE1PVU5UVkVSUzEpOworLQlwbWFwX3Vuc2V0KE1PVU5UUFJPRywgTU9VTlRWRVJTMyk7CisrCXBtYXBfdW5zZXQobW91bnRfcHJvZywgTU9VTlRWRVJTMSk7CisrCXBtYXBfdW5zZXQobW91bnRfcHJvZywgTU9VTlRWRVJTMyk7CisgICAgIH0KKyAKKyAgICAgaWYgKHVkcHRyYW5zcCAhPSBOVUxMKSB7CisgCS8qIFJlZ2lzdGVyIE1PVU5UIHNlcnZpY2UgKHYxKSBmb3IgVURQICovCisgCWlmICghc3ZjX3JlZ2lzdGVyCistCSAgICAodWRwdHJhbnNwLCBNT1VOVFBST0csIE1PVU5UVkVSUzEsIG1vdW50cHJvZ18zLAorKwkgICAgKHVkcHRyYW5zcCwgbW91bnRfcHJvZywgTU9VTlRWRVJTMSwgbW91bnRwcm9nXzMsCisgCSAgICAgb3B0X3BvcnRtYXBwZXIgPyBJUFBST1RPX1VEUCA6IDApKSB7CisgCSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLAorIAkJICAgICJ1bmFibGUgdG8gcmVnaXN0ZXIgKE1PVU5UUFJPRywgTU9VTlRWRVJTMSwgdWRwKS4iKTsKK0BAIC03MDIsNyArNzIwLDcgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJfbW91bnRfc2VydmljZShTVkNYUAorIAorIAkvKiBSZWdpc3RlciBNT1VOVCBzZXJ2aWNlICh2MykgZm9yIFVEUCAqLworIAlpZiAoIXN2Y19yZWdpc3RlcgorLQkgICAgKHVkcHRyYW5zcCwgTU9VTlRQUk9HLCBNT1VOVFZFUlMzLCBtb3VudHByb2dfMywKKysJICAgICh1ZHB0cmFuc3AsIG1vdW50X3Byb2csIE1PVU5UVkVSUzMsIG1vdW50cHJvZ18zLAorIAkgICAgIG9wdF9wb3J0bWFwcGVyID8gSVBQUk9UT19VRFAgOiAwKSkgeworIAkgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwKKyAJCSAgICAidW5hYmxlIHRvIHJlZ2lzdGVyIChNT1VOVFBST0csIE1PVU5UVkVSUzMsIHVkcCkuIik7CitAQCAtNzEzLDcgKzczMSw3IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyX21vdW50X3NlcnZpY2UoU1ZDWFAKKyAgICAgaWYgKHRjcHRyYW5zcCAhPSBOVUxMKSB7CisgCS8qIFJlZ2lzdGVyIE1PVU5UIHNlcnZpY2UgKHYxKSBmb3IgVENQICovCisgCWlmICghc3ZjX3JlZ2lzdGVyCistCSAgICAodGNwdHJhbnNwLCBNT1VOVFBST0csIE1PVU5UVkVSUzEsIG1vdW50cHJvZ18zLAorKwkgICAgKHRjcHRyYW5zcCwgbW91bnRfcHJvZywgTU9VTlRWRVJTMSwgbW91bnRwcm9nXzMsCisgCSAgICAgb3B0X3BvcnRtYXBwZXIgPyBJUFBST1RPX1RDUCA6IDApKSB7CisgCSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLAorIAkJICAgICJ1bmFibGUgdG8gcmVnaXN0ZXIgKE1PVU5UUFJPRywgTU9VTlRWRVJTMSwgdGNwKS4iKTsKK0BAIC03MjIsNyArNzQwLDcgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJfbW91bnRfc2VydmljZShTVkNYUAorIAorIAkvKiBSZWdpc3RlciBNT1VOVCBzZXJ2aWNlICh2MykgZm9yIFRDUCAqLworIAlpZiAoIXN2Y19yZWdpc3RlcgorLQkgICAgKHRjcHRyYW5zcCwgTU9VTlRQUk9HLCBNT1VOVFZFUlMzLCBtb3VudHByb2dfMywKKysJICAgICh0Y3B0cmFuc3AsIG1vdW50X3Byb2csIE1PVU5UVkVSUzMsIG1vdW50cHJvZ18zLAorIAkgICAgIG9wdF9wb3J0bWFwcGVyID8gSVBQUk9UT19UQ1AgOiAwKSkgeworIAkgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwKKyAJCSAgICAidW5hYmxlIHRvIHJlZ2lzdGVyIChNT1VOVFBST0csIE1PVU5UVkVSUzMsIHRjcCkuIik7CistLS0gYS9tb3VudC5jCisrKysgYi9tb3VudC5jCitAQCAtMTU1LDggKzE1NSw4IEBAIG1vdW50cmVzMyAqbW91bnRwcm9jX21udF8zX3N2YyhkaXJwYXRoICoKKyAgICAgLyogZXJyb3Igb3V0IGlmIG5vdCB2ZXJzaW9uIDMgKi8KKyAgICAgaWYgKHJxc3RwLT5ycV92ZXJzICE9IDMpIHsKKyAJbG9nbXNnKExPR19JTkZPLAorLQkgICAgICAgIiVzIGF0dGVtcHRlZCBtb3VudCB3aXRoIHVuc3VwcG9ydGVkIHByb3RvY29sIHZlcnNpb24iLAorLQkgICAgICAgaW5ldF9udG9hKGdldF9yZW1vdGUocnFzdHApKSk7CisrCSAgICAgICAiJXMgYXR0ZW1wdGVkIG1vdW50IHdpdGggdW5zdXBwb3J0ZWQgcHJvdG9jb2wgdmVyc2lvbjogJWkiLAorKwkgICAgICAgaW5ldF9udG9hKGdldF9yZW1vdGUocnFzdHApKSwgcnFzdHAtPnJxX3ZlcnMpOworIAlyZXN1bHQuZmhzX3N0YXR1cyA9IE1OVDNFUlJfSU5WQUw7CisgCXJldHVybiAmcmVzdWx0OworICAgICB9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9maXhfY29tcGlsZV93YXJuaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvZml4X2NvbXBpbGVfd2FybmluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWRhMDE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvZml4X2NvbXBpbGVfd2FybmluZy5wYXRjaApAQCAtMCwwICsxLDI1IEBACitkYWVtb24uYzogQ2hlY2sgZXhpdCBjb2RlIG9mIGNoZGlyKCkKKworU3RvcCB0aGUgY29tcGlsZSB3YXJuaW5nIGFuZCBmaXggdGhlIGNvZGUgdG8gYWN0IG9uIGEgY2hkaXIoKSBmYWlsdXJlLgorSWYgdGhpcyBvbmUgZG9lcyBmYWlsIHNvbWV0aGluZyBpcyB2ZXJ5LCB2ZXJ5IHdyb25nLgorCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvdW5mczMvYnVncy81LworCistLS0KKyBkYWVtb24uYyB8ICAgIDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS9kYWVtb24uYworKysrIGIvZGFlbW9uLmMKK0BAIC05NjQsNyArOTY0LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAlzaWdhY3Rpb24oU0lHQUxSTSwgJmFjdCwgTlVMTCk7CisgCisgCS8qIGRvbid0IG1ha2UgZGlyZWN0b3J5IHdlIHN0YXJ0ZWQgaW4gYnVzeSAqLworLQljaGRpcigiLyIpOworKwlpZihjaGRpcigiLyIpIDwgMCkKKysJICAgIGRhZW1vbl9leGl0KDApOworIAorIAkvKiBkZXRhY2ggZnJvbSB0ZXJtaW5hbCAqLworIAlpZiAob3B0X2RldGFjaCkgewpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvZml4X3BpZF9yYWNlX3BhcmVudF93cml0ZXNfY2hpbGRfcGlkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvZml4X3BpZF9yYWNlX3BhcmVudF93cml0ZXNfY2hpbGRfcGlkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YjE4N2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9maXhfcGlkX3JhY2VfcGFyZW50X3dyaXRlc19jaGlsZF9waWQucGF0Y2gKQEAgLTAsMCArMSw2MSBAQAorZGFlbW9uLmM6IEZpeCByYWNlIHdpbmRvdyBmb3Igd3JpdGluZyBvZiB0aGUgcGlkIGZpbGUKKworVGhlIHBhcmVudCBwcm9jZXNzIHNob3VsZCB3cml0ZSB0aGUgcGlkIGZpbGUgc3VjaCB0aGF0IHRoZSBwaWQgZmlsZQord2lsbCBjYW4gYmUgY2hlY2tlZCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgZXhpdCBvZiB0aGUgZm9yayBmcm9tIHRoZQorcGFyZW50LgorCitUaGlzIGFsbG93cyBleHRlcm5hbCBtb25pdG9yaW5nIGFwcGxpY2F0aW9ucyB0byB3YXRjaCB0aGUgZGFlbW9uCit3aXRob3V0IGhhdmluZyB0byBhZGQgc2xlZXAgY2FsbHMgdG8gd2FpdCBmb3IgdGhlIHBpZCBmaWxlIGJlIHdyaXR0ZW4KK29uIGEgYnVzeSBzeXN0ZW0uCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC91bmZzMy9idWdzLzUvCisKKy0tLQorIGRhZW1vbi5jIHwgICAxMiArKysrKysrKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCistLS0gYS9kYWVtb24uYworKysrIGIvZGFlbW9uLmMKK0BAIC0xNTMsNyArMTUzLDcgQEAgaW50IGdldF9zb2NrZXRfdHlwZShzdHJ1Y3Qgc3ZjX3JlcSAqcnFzdAorIC8qCisgICogd3JpdGUgY3VycmVudCBwaWQgdG8gYSBmaWxlCisgICovCistc3RhdGljIHZvaWQgY3JlYXRlX3BpZF9maWxlKHZvaWQpCisrc3RhdGljIHZvaWQgY3JlYXRlX3BpZF9maWxlKGludCBwaWQpCisgeworICAgICBjaGFyIGJ1ZlsxNl07CisgICAgIGludCBmZCwgcmVzLCBsZW47CitAQCAtMTc1LDcgKzE3NSw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZV9waWRfZmlsZSh2b2lkKQorICAgICB9CisgI2VuZGlmCisgCistICAgIHNwcmludGYoYnVmLCAiJWlcbiIsIGJhY2tlbmRfZ2V0cGlkKCkpOworKyAgICBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBwaWQpOworICAgICBsZW4gPSBzdHJsZW4oYnVmKTsKKyAKKyAgICAgcmVzID0gYmFja2VuZF9wd3JpdGUoZmQsIGJ1ZiwgbGVuLCAwKTsKK0BAIC05NzAsNiArOTcwLDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJICAgIGZwcmludGYoc3RkZXJyLCAiY291bGQgbm90IGZvcmsgaW50byBiYWNrZ3JvdW5kXG4iKTsKKyAJICAgIGRhZW1vbl9leGl0KDApOworIAl9CisrCWlmIChwaWQpCisrCSAgICBjcmVhdGVfcGlkX2ZpbGUocGlkKTsKKysgICAgfSBlbHNlIHsKKysJY3JlYXRlX3BpZF9maWxlKGJhY2tlbmRfZ2V0cGlkKCkpOworICAgICB9CisgI2VuZGlmCQkJCSAgICAgICAvKiBXSU4zMiAqLworIAorQEAgLTEwMDYsOCArMTAxMCwxMCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCS8qIG5vIHVtYXNrIHRvIG5vdCBzY3JldyB1cCBjcmVhdGUgbW9kZXMgKi8KKyAJdW1hc2soMCk7CisgCisrI2lmZGVmIFdJTjMyCisgCS8qIGNyZWF0ZSBwaWQgZmlsZSBpZiB3YW50ZWQgKi8KKy0JY3JlYXRlX3BpZF9maWxlKCk7CisrCWNyZWF0ZV9waWRfZmlsZShiYWNrZW5kX2dldHBpZCgpKTsKKysjZW5kaWYKKyAKKyAJLyogaW5pdGlhbGl6ZSBpbnRlcm5hbCBzdHVmZiAqLworIAlmaF9jYWNoZV9pbml0KCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9maXhfd2FybmluZ3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9maXhfd2FybmluZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RhODY1NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL2ZpeF93YXJuaW5ncy5wYXRjaApAQCAtMCwwICsxLDUzIEBACitleHBvcnRzLio6IGZpeCB3YXJuaW5ncy4KKworRml4IHRoZXNlIHdhcm5pbmdzOgorbGV4Lnl5LmM6MTIwNzogd2FybmluZzogJ3l5dW5wdXQnIGRlZmluZWQgYnV0IG5vdCB1c2VkCitsZXgueXkuYzoxMjQ4OiB3YXJuaW5nOiAnaW5wdXQnIGRlZmluZWQgYnV0IG5vdCB1c2VkCitleHBvcnRzLnk6IEluIGZ1bmN0aW9uICdzZXRfaG9zdG5hbWUnOgorZXhwb3J0cy55OjMzNDogd2FybmluZzogbGFyZ2UgaW50ZWdlciBpbXBsaWNpdGx5IHRydW5jYXRlZCB0byB1bnNpZ25lZCB0eXBlCitleHBvcnRzLnk6IEluIGZ1bmN0aW9uICdzZXRfaXBhZGRyJzoKK2V4cG9ydHMueTozNTA6IHdhcm5pbmc6IGxhcmdlIGludGVnZXIgaW1wbGljaXRseSB0cnVuY2F0ZWQgdG8gdW5zaWduZWQgdHlwZQorCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvdW5mczMvYnVncy81LworCistLS0KKyBDb25maWcvZXhwb3J0cy5sIHwgICAgMyArKysKKyBDb25maWcvZXhwb3J0cy55IHwgICAgNiArKysrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworLS0tIGEvQ29uZmlnL2V4cG9ydHMubAorKysrIGIvQ29uZmlnL2V4cG9ydHMubAorQEAgLTQ4LDYgKzQ4LDkgQEAgTkVUQ09NUCBbMC05XXsxLDJ9CisgTkVUIHtJUH0iLyJ7TkVUQ09NUH0KKyBPTERORVQge0lQfSIvIntJUH0KKyAKKyslb3B0aW9uIG5vdW5wdXQKKyslb3B0aW9uIG5vaW5wdXQKKysKKyAlJQorIAorIF57V0hJVEV9KlxuCQl7IC8qIGVhdCBlbXB0eSBsaW5lICovIH0KKy0tLSBhL0NvbmZpZy9leHBvcnRzLnkKKysrKyBiL0NvbmZpZy9leHBvcnRzLnkKK0BAIC0zMzEsNyArMzMxLDggQEAgc3RhdGljIHZvaWQgc2V0X2hvc3RuYW1lKGNvbnN0IGNoYXIgKm5hbQorIAlpZiAoZW50KSB7CisgCQltZW1jcHkoJmN1cl9ob3N0LmFkZHIsIGVudC0+aF9hZGRyX2xpc3RbMF0sCisgCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7CistCQljdXJfaG9zdC5tYXNrLnNfYWRkciA9IH4wVUw7CisrCQljdXJfaG9zdC5tYXNrLnNfYWRkciA9IDA7CisrCQljdXJfaG9zdC5tYXNrLnNfYWRkciA9IH5jdXJfaG9zdC5tYXNrLnNfYWRkcjsKKyAJfSBlbHNlIHsKKyAJCWxvZ21zZyhMT0dfQ1JJVCwgImNvdWxkIG5vdCByZXNvbHZlIGhvc3RuYW1lICclcyciLCBuYW1lKTsKKyAJCWVfZXJyb3IgPSBUUlVFOworQEAgLTM0Nyw3ICszNDgsOCBAQCBzdGF0aWMgdm9pZCBzZXRfaXBhZGRyKGNvbnN0IGNoYXIgKmFkZHIpCisgCQorIAlpZiAoIWluZXRfYXRvbihhZGRyLCAmY3VyX2hvc3QuYWRkcikpCisgCQllX2Vycm9yID0gVFJVRTsKKy0JY3VyX2hvc3QubWFzay5zX2FkZHIgPSB+MFVMOworKwljdXJfaG9zdC5tYXNrLnNfYWRkciA9IDA7CisrCWN1cl9ob3N0Lm1hc2suc19hZGRyID0gfmN1cl9ob3N0Lm1hc2suc19hZGRyOworIH0KKyAKKyAvKgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvcmVsYXRpdmVfbWF4X3NvY2tldF9wYXRoX2xlbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL3JlbGF0aXZlX21heF9zb2NrZXRfcGF0aF9sZW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE5ZGQzNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL3JlbGF0aXZlX21heF9zb2NrZXRfcGF0aF9sZW4ucGF0Y2gKQEAgLTAsMCArMSw3NCBAQAorbmZzLmM6IEFsbG93IG1heCBzYS5zdW5fcGF0aCBmb3IgYSBsb2NhbGRvbWFpbiBzb2NrZXQgd2l0aCB0aGUgdXNlciBuZnMtc2VydmVyCisKK1RoZXJlIGlzIGEgaGFyZCBsaW1pdCBmb3IgdGhlIGtlcm5lbCBvZiAxMDggY2hhcmFjdGVycyBmb3IgYQorbG9jYWxkb21haW4gc29ja2V0IG5hbWUuICBUbyBhdm9pZCBwcm9ibGVtcyB3aXRoIHRoZSB1c2VyIG5mcworc2VydmVyIGl0IHNob3VsZCBtYXhpbWl6ZSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYnkgdXNpbmcKK2EgcmVsYXRpdmUgcGF0aCBvbiB0aGUgc2VydmVyIHNpZGUuCisKK1ByZXZpb3VzbHkgdGhlIG5mcy1zZXJ2ZXIgdXNlZCB0aGUgYWJzb2x1dGUgcGF0aCBuYW1lIHBhc3NlZCB0bwordGhlIHNhLnN1bnBhdGggYXJnIGZvciBiaW5kaW5nIHRoZSBzb2NrZXQgYW5kIHRoaXMgaGFzIGNhdXNlZAorcHJvYmxlbXMgZm9yIGJvdGggdGhlIFggc2VydmVyIGFuZCBVU1QgYmluYXJpZXMgd2hpY2ggbWFrZQoraGVhdnkgdXNlIG9mIG5hbWVkIHNvY2tldHMgd2l0aCBsb25nIG5hbWVzLgorCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvdW5mczMvYnVncy81LworCistLS0KKyBuZnMuYyB8ICAgMjkgKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworLS0tIGEvbmZzLmMKKysrKyBiL25mcy5jCitAQCAtNjcyLDYgKzY3Miw3IEBAIFNZTUxJTkszcmVzICpuZnNwcm9jM19zeW1saW5rXzNfc3ZjKFNZTUwKKyB9CisgCisgI2lmbmRlZiBXSU4zMgorK3N0YXRpYyBjaGFyIHBhdGhidWZfdG1wW05GU19NQVhQQVRITEVOICsgTkZTX01BWE5BTUxFTiArIDFdOworIAorIC8qCisgICogY3JlYXRlIFVuaXggc29ja2V0CitAQCAtNjgwLDE3ICs2ODEsNDEgQEAgc3RhdGljIGludCBta3NvY2tldChjb25zdCBjaGFyICpwYXRoLCBtbworIHsKKyAgICAgaW50IHJlcywgc29jazsKKyAgICAgc3RydWN0IHNvY2thZGRyX3VuIGFkZHI7CisrICAgIHVuc2lnbmVkIGludCBsZW4gPSBzdHJsZW4ocGF0aCk7CisgCisgICAgIHNvY2sgPSBzb2NrZXQoUEZfVU5JWCwgU09DS19TVFJFQU0sIDApOworLSAgICBhZGRyLnN1bl9mYW1pbHkgPSBBRl9VTklYOworLSAgICBzdHJjcHkoYWRkci5zdW5fcGF0aCwgcGF0aCk7CisgICAgIHJlcyA9IHNvY2s7CisgICAgIGlmIChyZXMgIT0gLTEpIHsKKysJYWRkci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKysJaWYgKGxlbiA8IHNpemVvZihhZGRyLnN1bl9wYXRoKSAtMSkgeworKwkgICAgc3RyY3B5KGFkZHIuc3VuX3BhdGgsIHBhdGgpOworKwl9IGVsc2UgeworKwkgICAgY2hhciAqcHRyOworKwkgICAgcmVzID0gLTE7CisrCSAgICBpZiAobGVuID49IHNpemVvZihwYXRoKSkKKysJCWdvdG8gb3V0OworKwkgICAgc3RyY3B5KHBhdGhidWZfdG1wLCBwYXRoKTsKKysJICAgIHB0ciA9IHN0cnJjaHIocGF0aGJ1Zl90bXAsJy8nKTsKKysJICAgIGlmIChwdHIpIHsKKysJCSpwdHIgPSAnXDAnOworKwkJcHRyKys7CisrCQlpZiAoY2hkaXIocGF0aGJ1Zl90bXApKQorKwkJICAgIGdvdG8gb3V0OworKwkgICAgfSBlbHNlIHsKKysJCXB0ciA9IHBhdGhidWZfdG1wOworKwkgICAgfQorKwkgICAgaWYgKHN0cmxlbihwdHIpID49IHNpemVvZihhZGRyLnN1bl9wYXRoKSkKKysJCWdvdG8gb3V0OworKwkgICAgc3RyY3B5KGFkZHIuc3VuX3BhdGgsIHB0cik7CisrCX0KKyAJdW1hc2sofm1vZGUpOworIAlyZXMgPQorIAkgICAgYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyLAorIAkJIHNpemVvZihhZGRyLnN1bl9mYW1pbHkpICsgc3RybGVuKGFkZHIuc3VuX3BhdGgpKTsKKyAJdW1hc2soMCk7Cisrb3V0OgorKwlpZiAoY2hkaXIoIi8iKSkKKysJICAgIGZwcmludGYoc3RkZXJyLCAiSW50ZXJuYWwgZmFpbHVyZSB0byBjaGRpciAvXG4iKTsKKyAJY2xvc2Uoc29jayk7CisgICAgIH0KKyAgICAgcmV0dXJuIHJlczsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL3JlbmFtZV9maF9jYWNoZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL3JlbmFtZV9maF9jYWNoZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmQ4OTUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvcmVuYW1lX2ZoX2NhY2hlLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK0Zyb206IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CitEYXRlOiBTYXQsIDIzIEZlYiAyMDEzIDA4OjQ5OjA4IC0wNjAwCitTdWJqZWN0OiBbUEFUQ0hdIGZoX2NhY2hlOiBmaXggc3RhdGxlIG5mcyBoYW5kbGUgb24gcmVuYW1lIHByb2JsZW0KKworVGhlIGZvbGxvd2luZyB0ZXN0IGNhc2UgZmFpbHMgd2l0aCBtb2Rlcm4gbGludW54IGtlcm5lbHMgd2hpY2ggY2FjaGUKK3RoZSByZW5hbWVkIGlub2RlLgorCisgICUgbWtkaXIgYTtta2RpciBiO212IGIgYS87bHMgLWwgYQorICBsczogYS9iOiBTdGFsZSBORlMgZmlsZSBoYW5kbGUKKworVGhlIGlzc3VlIGlzIHRoYXQgbmZzZXJ2ZXIgd2FzIG5vdCB1cGRhdGluZyB0aGUgZmhfY2FjaGUgd2l0aCB0aGUgbmV3Citsb2NhdGlvbiBvZiB0aGUgaW5vZGUsIHdoZW4gaXQgbW92ZXMgZGlyZWN0b3JpZXMuCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC91bmZzMy9idWdzLzUvCisKKy0tLQorIGZoX2NhY2hlLmMgfCAgIDEyICsrKysrKysrKysrKworIGZoX2NhY2hlLmggfCAgICAxICsKKyBuZnMuYyAgICAgIHwgICAgMiArKworIDMgZmlsZXMgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKQorCistLS0gYS9maF9jYWNoZS5jCisrKysgYi9maF9jYWNoZS5jCitAQCAtMTk5LDYgKzE5OSwxOCBAQCBzdGF0aWMgY2hhciAqZmhfY2FjaGVfbG9va3VwKHVpbnQzMiBkZXYsCisgfQorIAorIC8qCisrICogdXBkYXRlIGEgZmggaW5vZGUgY2FjaGUgZm9yIGFuIG9wZXJhdGlvbiBsaWtlIHJlbmFtZQorKyAqLworK3ZvaWQgZmhfY2FjaGVfdXBkYXRlKG5mc19maDMgZmgsIGNoYXIgKnBhdGgpCisreworKyAgICB1bmZzM19maF90ICpvYmogPSAodm9pZCAqKSBmaC5kYXRhLmRhdGFfdmFsOworKyAgICBiYWNrZW5kX3N0YXRzdHJ1Y3QgYnVmOworKworKyAgICBpZiAoYmFja2VuZF9sc3RhdChwYXRoLCAmYnVmKSAhPSAtMSkgeworKwlmaF9jYWNoZV9hZGQob2JqLT5kZXYsIGJ1Zi5zdF9pbm8sIHBhdGgpOworKyAgICB9CisrfQorKy8qCisgICogcmVzb2x2ZSBhIGZpbGVuYW1lIGludG8gYSBwYXRoCisgICogY2FjaGUtdXNpbmcgd3JhcHBlciBmb3IgZmhfZGVjb21wX3JhdworICAqLworLS0tIGEvZmhfY2FjaGUuaAorKysrIGIvZmhfY2FjaGUuaAorQEAgLTE5LDUgKzE5LDYgQEAgdW5mczNfZmhfdCBmaF9jb21wKGNvbnN0IGNoYXIgKnBhdGgsIHN0cgorIHVuZnMzX2ZoX3QgKmZoX2NvbXBfcHRyKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdmNfcmVxICpycXN0cCwgaW50IG5lZWRfZGlyKTsKKyAKKyBjaGFyICpmaF9jYWNoZV9hZGQodWludDMyIGRldiwgdWludDY0IGlubywgY29uc3QgY2hhciAqcGF0aCk7Cisrdm9pZCBmaF9jYWNoZV91cGRhdGUobmZzX2ZoMyBmaCwgY2hhciAqcGF0aCk7CisgCisgI2VuZGlmCistLS0gYS9uZnMuYworKysrIGIvbmZzLmMKK0BAIC04NzYsNiArODc2LDggQEAgUkVOQU1FM3JlcyAqbmZzcHJvYzNfcmVuYW1lXzNfc3ZjKFJFTkFNRQorIAkgICAgcmVzID0gYmFja2VuZF9yZW5hbWUoZnJvbV9vYmosIHRvX29iaik7CisgCSAgICBpZiAocmVzID09IC0xKQorIAkJcmVzdWx0LnN0YXR1cyA9IHJlbmFtZV9lcnIoKTsKKysJICAgIC8qIFVwZGF0ZSB0aGUgZmhfY2FjaGUgd2l0aCBtb3ZlZCBpbm9kZSB2YWx1ZSAqLworKwkgICAgZmhfY2FjaGVfdXBkYXRlKGFyZ3AtPnRvLmRpciwgdG9fb2JqKTsKKyAJfQorICAgICB9CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy90Y3Bfbm9fZGVsYXkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy90Y3Bfbm9fZGVsYXkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM1MjFjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL3RjcF9ub19kZWxheS5wYXRjaApAQCAtMCwwICsxLDU2IEBACitkYWVtb24uYzogQWRkIG9wdGlvbiBmb3IgdGNwIG5vIGRlbGF5CisKK0FsbG93IHRoZSBORlMgdGNwIHNvY2tldHMgdG8gY29uZGl0aW9uYWxseSB1c2UgVENQX05PREVMQVkKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3VuZnMzL2J1Z3MvNS8KKworLS0tCisgZGFlbW9uLmMgfCAgICA5ICsrKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvZGFlbW9uLmMKKysrKyBiL2RhZW1vbi5jCitAQCAtMTcsNiArMTcsNyBAQAorICNpZm5kZWYgV0lOMzIKKyAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisrI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+CisgI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorICNpbmNsdWRlIDxzeXNsb2cuaD4KKyAjZWxzZQkJCQkgICAgICAgLyogV0lOMzIgKi8KK0BAIC03NSw2ICs3Niw3IEBAIHVuc2lnbmVkIGludCBvcHRfbW91bnRfcG9ydCA9IE5GU19QT1JUOworIGludCBvcHRfc2luZ2xldXNlciA9IEZBTFNFOworIGludCBvcHRfYnJ1dGVfZm9yY2UgPSBGQUxTRTsKKyBpbnQgb3B0X3Rlc3Rjb25maWcgPSBGQUxTRTsKKytpbnQgb3B0X3RjcF9ub2RlbGF5ID0gRkFMU0U7Cisgc3RydWN0IGluX2FkZHIgb3B0X2JpbmRfYWRkcjsKKyBpbnQgb3B0X3JlYWRhYmxlX2V4ZWN1dGFibGVzID0gRkFMU0U7CisgY2hhciAqb3B0X3BpZF9maWxlID0gTlVMTDsKK0BAIC0yMDgsNyArMjEwLDcgQEAgc3RhdGljIHZvaWQgcGFyc2Vfb3B0aW9ucyhpbnQgYXJnYywgY2hhcgorIHsKKyAKKyAgICAgaW50IG9wdCA9IDA7CistICAgIGNoYXIgKm9wdHN0cmluZyA9ICJiY0M6ZGU6aGw6bTpuOnByc3RUdXdpOng6eToiOworKyAgICBjaGFyICpvcHRzdHJpbmcgPSAiYmNDOmRlOmhsOm06Tm46cHJzdFR1d2k6eDp5OiI7CisgCisgICAgIHdoaWxlIChvcHQgIT0gLTEpIHsKKyAJb3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIG9wdHN0cmluZyk7CitAQCAtMjk1LDYgKzI5Nyw5IEBAIHN0YXRpYyB2b2lkIHBhcnNlX29wdGlvbnMoaW50IGFyZ2MsIGNoYXIKKyAJCSAgICBleGl0KDEpOworIAkJfQorIAkJYnJlYWs7CisrCSAgICBjYXNlICdOJzoKKysJCW9wdF90Y3Bfbm9kZWxheSA9IFRSVUU7CisrCQlicmVhazsKKyAJICAgIGNhc2UgJ24nOgorIAkJb3B0X25mc19wb3J0ID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMTApOworIAkJaWYgKG9wdF9uZnNfcG9ydCA9PSAwKSB7CitAQCAtODAyLDYgKzgwNyw4IEBAIHN0YXRpYyBTVkNYUFJUICpjcmVhdGVfdGNwX3RyYW5zcG9ydCh1bnMKKyAJc2luLnNpbl9hZGRyLnNfYWRkciA9IG9wdF9iaW5kX2FkZHIuc19hZGRyOworIAlzb2NrID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKKyAJc2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIChjb25zdCBjaGFyICopICZvbiwgc2l6ZW9mKG9uKSk7CisrCWlmIChvcHRfdGNwX25vZGVsYXkpCisrCSAgICBzZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgJm9uLCBzaXplb2Yob24pKTsKKyAJaWYgKGJpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmc2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSkpIHsKKyAJICAgIHBlcnJvcigiYmluZCIpOworIAkgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBiaW5kIHRvIHRjcCBwb3J0ICVkXG4iLCBwb3J0KTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL3VuZnMzX3BhcmFsbGVsX2J1aWxkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvdW5mczNfcGFyYWxsZWxfYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY2NGRkNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL3VuZnMzX3BhcmFsbGVsX2J1aWxkLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0ZpeCBwYXJhbGxlbCBidWlsZCBkZXBlbmRlbmN5IGlzc3VlCisKK0lmIGJ1aWxkaW5nIHdpdGggbWFrZSAtajIgdGhlIGxpYi5hIHdpbGwgbm90IGdldCBidWlsdCBpbiB0aW1lLgorCitKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvdW5mczMvYnVncy81LworCistLS0KKyBDb25maWcvTWFrZWZpbGUuaW4gfCAgICAzICsrKworIE1ha2VmaWxlLmluICAgICAgICB8ICAgIDMgKystCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMjksNyArMjksOCBAQCBERVNURElSID0KKyAKKyBWUEFUSCA9ICQoc3JjZGlyKQorIAorLWFsbDogc3ViZGlycyB1bmZzZCQoRVhFRVhUKQorK2FsbDogc3ViZGlycworKwkkKE1BS0UpIHVuZnNkJChFWEVFWFQpCisgCisgdW5mc2QkKEVYRUVYVCk6ICQoT0JKUykgJChDT05GT0JKKSAkKEVYVFJBT0JKKQorIAkkKENDKSAtbyAkQCAkKE9CSlMpICQoQ09ORk9CSikgJChFWFRSQU9CSikgJChMREZMQUdTKQorLS0tIGEvQ29uZmlnL01ha2VmaWxlLmluCisrKysgYi9Db25maWcvTWFrZWZpbGUuaW4KK0BAIC0xNiw2ICsxNiw5IEBAIGxpYi5hOiAkKE9CSlMpCisgCSQoQVIpIGNycyBsaWIuYSAkKE9CSlMpCisgCisgeS50YWIuaCB5LnRhYi5jOiAkKHNyY2RpcikvZXhwb3J0cy55CisreS50YWIuaDogeS50YWIuYworKworK3kudGFiLmM6ICQoc3JjZGlyKS9leHBvcnRzLnkKKyAJJChZQUNDKSAtZCAkKHNyY2RpcikvZXhwb3J0cy55CisgCisgeS50YWIubzogeS50YWIuYyAkKHNyY2RpcikvZXhwb3J0cy5oICQodG9wX3NyY2RpcikvbmZzLmggJCh0b3Bfc3JjZGlyKS9tb3VudC5oICQodG9wX3NyY2RpcikvZGFlbW9uLmgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzXzAuOS4yMi5yNDkwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczNfMC45LjIyLnI0OTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVjZjU0NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzXzAuOS4yMi5yNDkwLmJiCkBAIC0wLDAgKzEsMzYgQEAKK1NVTU1BUlkgPSAiVXNlcnNwYWNlIE5GUyBzZXJ2ZXIgdjMgcHJvdG9jb2wiCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0xJQ0VOU0UgPSAidW5mczMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT05NDc1ODg1Mjk0ZTE3YzBjYzAwNjc4MjBkMDQyNzkyZSIKKworIyBTVk4gc3VwcG9ydCBmb3IgdXBzdHJlYW0gdmVyc2lvbiBjaGVjayBpc24ndCBpbXBsZW1lbnRlZCB5ZXQKK1JFQ0lQRV9VUFNUUkVBTV9WRVJTSU9OID0gIjAuOS4yMi5yNDk1IgorUkVDSVBFX1VQU1RSRUFNX0RBVEUgPSAiRmViIDA1LCAyMDE1IgorQ0hFQ0tfREFURSA9ICJKdW4gMTAsIDIwMTUiCisKK0RFUEVORFMgPSAiZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIGZsZXgiCitERVBFTkRTX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgKz0gImZsZXgtbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzY4N2FjYzRlZTk5MmU1MzY0NzIzNjVkZDk5NzEyYTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjc0YjQzYWRhOWM2ZWVhMWRhMjZlYjcwMTBkNzI4ODljNTI3ODk4NGJhMGI1MGRmZjRlMDkzMDU3ZDRkNjRmOCIKKworTU9EX1BWID0gIjQ5MCIKK1MgPSAiJHtXT1JLRElSfS90cnVuayIKK1NSQ19VUkkgPSAic3ZuOi8vc3ZuLmNvZGUuc2YubmV0L3AvdW5mczMvY29kZTttb2R1bGU9dHJ1bms7cmV2PSR7TU9EX1BWfSBcCisgICAgICAgICAgIGZpbGU6Ly91bmZzM19wYXJhbGxlbF9idWlsZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hbHRlcm5hdGVfcnBjX3BvcnRzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9waWRfcmFjZV9wYXJlbnRfd3JpdGVzX2NoaWxkX3BpZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfY29tcGlsZV93YXJuaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlbmFtZV9maF9jYWNoZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZWxhdGl2ZV9tYXhfc29ja2V0X3BhdGhfbGVuLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF93YXJuaW5ncy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90Y3Bfbm9fZGVsYXkucGF0Y2ggXAorICAgICAgICAgICIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworIyBUdXJuIG9mZiB0aGVzZSBoZWFkZXIgZGV0ZWN0cyBlbHNlIHRoZSBpbm9kZSBzZWFyY2gKKyMgd2lsbCB3YWxrIGVudGlyZSBmaWxlIHN5c3RlbXMgYW5kIHRoaXMgaXMgYSByZWFsIHByb2JsZW0KKyMgaWYgeW91IGhhdmUgMiBUQiBvZiBmaWxlcyB0byB3YWxrIGluIHlvdXIgZmlsZSBzeXN0ZW0KK0NBQ0hFRF9DT05GSUdVUkVWQVJTID0gImFjX2N2X2hlYWRlcl9tbnRlbnRfaD1ubyBhY19jdl9oZWFkZXJfc3lzX21udHRhYl9oPW5vIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5pZmRlZi91bmlmZGVmXzIuMTAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmlmZGVmL3VuaWZkZWZfMi4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGEwMDc5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5pZmRlZi91bmlmZGVmXzIuMTAuYmIKQEAgLTAsMCArMSwxNSBAQAorU1VNTUFSWSA9ICJTZWxlY3RpdmVseSByZW1vdmUgI2lmZGVmIHN0YXRlbWVudHMgZnJvbSBzb3VyY2VzIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiQlNELTItQ2xhdXNlIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly91bmlmZGVmLmM7ZW5kbGluZT0zMjttZDU9MmNjMjNmMDM4MmE2ZjU2MGY2YTllY2Y0ZTA0MGMwZGEiCisKK1NSQ19VUkkgPSAiaHR0cDovL2RvdGF0LmF0L3Byb2cvJHtCUE59LyR7QlB9LnRhci54eiIKK1NSQ19VUklbbWQ1c3VtXSA9ICJiYjVkODk1ZTVlYmJiYTVjNWNjMGMyNzcxY2Y5N2ViZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzYjliMmI2YjE5NTJlOWI5YzFiOWY3MzRlZGVjMjcwNjg5YTM1YmRiZjMzYWU2NmI1MGUxOWIyZWQwZDJkZjA2IgorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0gcHJlZml4PSR7cHJlZml4fQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxhL3ZhbGEuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMDU2ZmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxhL3ZhbGEuaW5jCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiQyMtbGlrZSBwcm9ncmFtbWluZyBsYW5ndWFnZSBmb3IgZWFzaW5nIEdPYmplY3QgcHJvZ3JhbW1pbmciCitERVNDUklQVElPTiA9ICJWYWxhIGlzIGEgQyMtbGlrZSBsYW5ndWFnZSBkZWRpY2F0ZWQgdG8gZWFzZSBHT2JqZWN0IHByb2dyYW1taW5nLiBcCitWYWxhIGNvbXBpbGVzIHRvIHBsYWluIEMgYW5kIGhhcyBubyBydW50aW1lIGVudmlyb25tZW50IG5vciBwZW5hbGl0aWVzIHdoYXRzb2V2ZXIuIgorU0VDVElPTiA9ICJkZXZlbCIKK0RFUEVORFMgPSAiYmlzb24tbmF0aXZlIGZsZXgtbmF0aXZlIGxpYnhzbHQtbmF0aXZlIGdsaWItMi4wIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCitIT01FUEFHRSA9ICJodHRwOi8vdmFsYS1wcm9qZWN0Lm9yZyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCIKKworU0hSVF9WRVIgPSAiJHtAZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLicpWzBdfS4ke0BkLmdldFZhcignUFYnLDEpLnNwbGl0KCcuJylbMV19IgorCitTUkNfVVJJID0gImh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9HTk9NRS9zb3VyY2VzLyR7QlBOfS8ke1NIUlRfVkVSfS8ke0JQfS50YXIueHoiCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vJHtCUE59LSR7U0hSVF9WRVJ9L3ZhcGkgJHtsaWJkaXJ9LyR7QlBOfS0ke1NIUlRfVkVSfS8iCitGSUxFU18ke1BOfS1kb2MgKz0gIiR7ZGF0YWRpcn0vZGV2aGVscCIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9LyR7QlBOfS0ke1NIUlRfVkVSfS8uZGVidWciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxhL3ZhbGEvMDAwMS1naXQtdmVyc2lvbi1nZW4tZG9uLXQtYXBwZW5kLWRpcnR5LWlmLXdlLXJlLW5vdC1pbi1nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhLzAwMDEtZ2l0LXZlcnNpb24tZ2VuLWRvbi10LWFwcGVuZC1kaXJ0eS1pZi13ZS1yZS1ub3QtaW4tZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzlkYzhjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhLzAwMDEtZ2l0LXZlcnNpb24tZ2VuLWRvbi10LWFwcGVuZC1kaXJ0eS1pZi13ZS1yZS1ub3QtaW4tZy5wYXRjaApAQCAtMCwwICsxLDU1IEBACitGcm9tIDI0NjBkN2I3OWY3ZTkwZGNmZWViZGU1ZTljNTNkOWI2Nzk4YTFmM2MgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDIxIEZlYiAyMDEyIDE3OjEyOjUwICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGdpdC12ZXJzaW9uLWdlbjogZG9uJ3QgYXBwZW5kIC1kaXJ0eSBpZiB3ZSdyZSBub3QgaW4gZ2l0CisgcmVwbworCisqIGZvciBleGFtcGxlIGlmIHdlIGhhdmUgc29tZSBkaXJ0eSBkaXJlY3RvcnkgYW5kIHdlIHVucGFjayBjbGVhbiB2YWxhIHRhcmJhbGwgaW4gaXQsIHRoZW4gaXQgd2lsbCBhcHBlbmQgLWRpcnR5CisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1TcGVjaWZpY10KKy0tLQorIGJ1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4gfCAgIDI1ICsrKysrKysrKysrKysrLS0tLS0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2dpdC12ZXJzaW9uLWdlbiBiL2J1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4KK2luZGV4IDBmYTZmYWEuLjFkMWY5ZDIgMTAwNzU1CistLS0gYS9idWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuCisrKysgYi9idWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuCitAQCAtMTI2LDE4ICsxMjYsMjEgQEAgZmkKKyAKKyB2PWBlY2hvICIkdiIgfHNlZCAncy9edi8vJ2AKKyAKKy0jIERvbid0IGRlY2xhcmUgYSB2ZXJzaW9uICJkaXJ0eSIgbWVyZWx5IGJlY2F1c2UgYSB0aW1lIHN0YW1wIGhhcyBjaGFuZ2VkLgorLWdpdCBzdGF0dXMgPiAvZGV2L251bGwgMj4mMQorK2lmIHRlc3QgLWQgLmdpdAorK3RoZW4KKysJIyBEb24ndCBkZWNsYXJlIGEgdmVyc2lvbiAiZGlydHkiIG1lcmVseSBiZWNhdXNlIGEgdGltZSBzdGFtcCBoYXMgY2hhbmdlZC4KKysJZ2l0IHN0YXR1cyA+IC9kZXYvbnVsbCAyPiYxCisgCistZGlydHk9YHNoIC1jICdnaXQgZGlmZi1pbmRleCAtLW5hbWUtb25seSBIRUFEJyAyPi9kZXYvbnVsbGAgfHwgZGlydHk9CistY2FzZSAiJGRpcnR5IiBpbgorLSAgICAnJykgOzsKKy0gICAgKikgIyBBcHBlbmQgdGhlIHN1ZmZpeCBvbmx5IGlmIHRoZXJlIGlzbid0IG9uZSBhbHJlYWR5LgorLQljYXNlICR2IGluCistCSAgKi1kaXJ0eSkgOzsKKy0JICAqKSB2PSIkdi1kaXJ0eSIgOzsKKy0JZXNhYyA7OworLWVzYWMKKysJZGlydHk9YHNoIC1jICdnaXQgZGlmZi1pbmRleCAtLW5hbWUtb25seSBIRUFEJyAyPi9kZXYvbnVsbGAgfHwgZGlydHk9CisrCWNhc2UgIiRkaXJ0eSIgaW4KKysJICAgICcnKSA7OworKwkgICAgKikgIyBBcHBlbmQgdGhlIHN1ZmZpeCBvbmx5IGlmIHRoZXJlIGlzbid0IG9uZSBhbHJlYWR5LgorKwkJY2FzZSAkdiBpbgorKwkJICAqLWRpcnR5KSA7OworKwkJICAqKSB2PSIkdi1kaXJ0eSIgOzsKKysJCWVzYWMgOzsKKysJZXNhYworK2ZpCisgCisgIyBPbWl0IHRoZSB0cmFpbGluZyBuZXdsaW5lLCBzbyB0aGF0IG00X2VzeXNjbWQgY2FuIHVzZSB0aGUgcmVzdWx0IGRpcmVjdGx5LgorIGVjaG8gIiR2IiB8IHRyIC1kICdcMDEyJworLS0gCisxLjcuOC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYV8wLjI4LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxhL3ZhbGFfMC4yOC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMDkwNmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxhL3ZhbGFfMC4yOC4wLmJiCkBAIC0wLDAgKzEsNiBAQAorcmVxdWlyZSAke0JQTn0uaW5jCisKK1NSQ19VUkkgKz0gIiBmaWxlOi8vMDAwMS1naXQtdmVyc2lvbi1nZW4tZG9uLXQtYXBwZW5kLWRpcnR5LWlmLXdlLXJlLW5vdC1pbi1nLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOGQ0Y2VhYzM0NTFhMGQ1NDk3ZTdiZTM4ZTVlNGMyYWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGQ5ZTNiZDNmODIxNDU2NjQ4NzVmN2MyOWIyZjU0NGJhOTJkMjgxNGY3NTQxMjk0OGY3NzRjMDcyN2ZjOTc3ZiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kLzAwMDEtdmFsZ3JpbmQtRW5hYmxlLXJ0X3NpZ3BlbmRpbmctc3lzY2FsbC1vbi1wcGM2NC1saW51eC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kLzAwMDEtdmFsZ3JpbmQtRW5hYmxlLXJ0X3NpZ3BlbmRpbmctc3lzY2FsbC1vbi1wcGM2NC1saW51eC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmJiNWY1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvMDAwMS12YWxncmluZC1FbmFibGUtcnRfc2lncGVuZGluZy1zeXNjYWxsLW9uLXBwYzY0LWxpbnV4LnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gMWE4MDA2ZjU2MzQyZGFlOWY3MTAwYTNjMzNkODA4NzM2NzZlMDQwNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IExpIFpob3UgPGxpLnpob3VAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjQgQXVnIDIwMTUgMDM6NTU6MTggLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gdmFsZ3JpbmQ6IEVuYWJsZSBydF9zaWdwZW5kaW5nIHN5c2NhbGwgb24gcHBjNjQgbGludXgKKworTmV3IFJldmlzaW9uOiAxNTEzMworRW5hYmxlIHJ0X3NpZ3BlbmRpbmcgc3lzY2FsbCBvbiBwcGM2NCBsaW51eC4KK1BhdGNoIGZyb20gVGhvbWFzIEh1dGggPHRodXRoQHJlZGhhdC5jb20+CisKK0dldCB0aGUgcGF0Y2ggZnJvbSB2YWxncmluZCB1cHN0cmVhbToKK2h0dHA6Ly92YWxncmluZC4xMDkwOC5uNy5uYWJibGUuY29tL1ZhbGdyaW5kLXIxNTEzMy1pbi10cnVuay1ORVdTLWNvcmVncmluZC1tLXN5c3dyYXAtc3lzd3JhcC1wcGM2NC1saW51eC1jLXRkNTQ1ODkuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IGJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IExpIFpob3UgPGxpLnpob3VAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvcmVncmluZC9tX3N5c3dyYXAvc3lzd3JhcC1wcGM2NC1saW51eC5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29yZWdyaW5kL21fc3lzd3JhcC9zeXN3cmFwLXBwYzY0LWxpbnV4LmMgYi9jb3JlZ3JpbmQvbV9zeXN3cmFwL3N5c3dyYXAtcHBjNjQtbGludXguYworaW5kZXggNTk0NmVlMS4uOGFhYTFkNyAxMDA2NDQKKy0tLSBhL2NvcmVncmluZC9tX3N5c3dyYXAvc3lzd3JhcC1wcGM2NC1saW51eC5jCisrKysgYi9jb3JlZ3JpbmQvbV9zeXN3cmFwL3N5c3dyYXAtcHBjNjQtbGludXguYworQEAgLTg4Nyw3ICs4ODcsNyBAQCBzdGF0aWMgU3lzY2FsbFRhYmxlRW50cnkgc3lzY2FsbF90YWJsZVtdID0geworICAgIExJTlhZKF9fTlJfcnRfc2lnYWN0aW9uLCAgICAgIHN5c19ydF9zaWdhY3Rpb24pLCAgICAgICAvLyAxNzMKKyAgICBMSU5YWShfX05SX3J0X3NpZ3Byb2NtYXNrLCAgICBzeXNfcnRfc2lncHJvY21hc2spLCAgICAgLy8gMTc0CisgCistLy8gX19fX18oX19OUl9ydF9zaWdwZW5kaW5nLCAgICAgc3lzX3J0X3NpZ3BlbmRpbmcpLCAgICAgIC8vIDE3NQorKyAgIExJTlhZKF9fTlJfcnRfc2lncGVuZGluZywgICAgIHN5c19ydF9zaWdwZW5kaW5nKSwgICAgICAvLyAxNzUKKyAgICBMSU5YWShfX05SX3J0X3NpZ3RpbWVkd2FpdCwgICBzeXNfcnRfc2lndGltZWR3YWl0KSwgICAgLy8gMTc2CisgICAgTElOWFkoX19OUl9ydF9zaWdxdWV1ZWluZm8sICAgc3lzX3J0X3NpZ3F1ZXVlaW5mbyksICAgIC8vIDE3NworICAgIExJTlhfKF9fTlJfcnRfc2lnc3VzcGVuZCwgICAgIHN5c19ydF9zaWdzdXNwZW5kKSwgICAgICAvLyAxNzgKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvQWRkZWQtc3VwcG9ydC1mb3ItUFBDLWluc3RydWN0aW9ucy1tZmF0YnUtbWZhdGJsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvQWRkZWQtc3VwcG9ydC1mb3ItUFBDLWluc3RydWN0aW9ucy1tZmF0YnUtbWZhdGJsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3Nzc0ZjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9BZGRlZC1zdXBwb3J0LWZvci1QUEMtaW5zdHJ1Y3Rpb25zLW1mYXRidS1tZmF0YmwucGF0Y2gKQEAgLTAsMCArMSw5NiBAQAorRnJvbSAwYmY0YjBhYzE4ZDFlYTQxYjMyYWQ3ODFkMjE0YjI5NWNhMTk5OGYzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5lZXNoIEJhbnNhbCA8YW5lZXNoLmJhbnNhbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogTW9uLCAyMSBOb3YgMjAxMSAxNzozMTozOSArMDUzMAorU3ViamVjdDogW1BBVENIXSBBZGRlZCBzdXBwb3J0IGZvciBQUEMgaW5zdHJ1Y3Rpb25zIG1mYXRidSwgbWZhdGJsLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQW5lZXNoIEJhbnNhbCA8YW5lZXNoLmJhbnNhbEBmcmVlc2NhbGUuY29tPgorLS0tCitDdXJyZW50bHkgVmFsZ3JpbmQgMy43LjAgZG9lcyBub3QgaGF2ZSBzdXBwb3J0IGZvciBQUEMgaW5zdHJ1Y3Rpb25zIG1mYXRidSBhbmQgbWZhdGJsLiBXaGVuIHdlIHJ1biBhIFVTRFBBQSBhcHBsaWNhdGlvbiB3aXRoIFZBTEdSSU5ELCB0aGUgZm9sbG93aW5nIGVycm9yIGlzIGdpdmVuIGJ5IHZhbGdyaW5kIDoKK2Rpc19wcm9jX2N0bChwcGMpKG1mc3ByLFNQUikoMHgyMEYpCitkaXNJbnN0cihwcGMpOiB1bmhhbmRsZWQgaW5zdHJ1Y3Rpb246IDB4N0MwRjgyQTYKKworCisgVkVYL3ByaXYvZ3Vlc3RfcHBjX2RlZnMuaCAgICB8ICAgIDIgKysKKyBWRVgvcHJpdi9ndWVzdF9wcGNfaGVscGVycy5jIHwgICAxOCArKysrKysrKysrKysrKysrKysKKyBWRVgvcHJpdi9ndWVzdF9wcGNfdG9JUi5jICAgIHwgICAyMiArKysrKysrKysrKysrKysrKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA0MiBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvVkVYL3ByaXYvZ3Vlc3RfcHBjX2RlZnMuaCBiL1ZFWC9wcml2L2d1ZXN0X3BwY19kZWZzLmgKK2luZGV4IGRkM2M2MmUuLjExYTM0YWEgMTAwNjQ0CistLS0gYS9WRVgvcHJpdi9ndWVzdF9wcGNfZGVmcy5oCisrKysgYi9WRVgvcHJpdi9ndWVzdF9wcGNfZGVmcy5oCitAQCAtMTQ2LDYgKzE0Niw4IEBAIGV4dGVybiBVSW50IHBwYzMyZ19kaXJ0eWhlbHBlcl9NRlNQUl8yNjhfMjY5ICggVUludCApOworIAorIGV4dGVybiBVSW50IHBwYzMyZ19kaXJ0eWhlbHBlcl9NRlNQUl8yODcgKCB2b2lkICk7CisgCisrZXh0ZXJuIFVJbnQgcHBjMzJnX2RpcnR5aGVscGVyX01GU1BSXzUyNl81MjcgKCBVSW50ICk7CisrCisgZXh0ZXJuIHZvaWQgcHBjMzJnX2RpcnR5aGVscGVyX0xWUyAoIFZleEd1ZXN0UFBDMzJTdGF0ZSogZ3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSW50IHZEX2lkeCwgVUludCBzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUludCBzaGlmdF9yaWdodCApOworZGlmZiAtLWdpdCBhL1ZFWC9wcml2L2d1ZXN0X3BwY19oZWxwZXJzLmMgYi9WRVgvcHJpdi9ndWVzdF9wcGNfaGVscGVycy5jCitpbmRleCAxMWFhNDI4Li5iNDllYTNmIDEwMDY0NAorLS0tIGEvVkVYL3ByaXYvZ3Vlc3RfcHBjX2hlbHBlcnMuYworKysrIGIvVkVYL3ByaXYvZ3Vlc3RfcHBjX2hlbHBlcnMuYworQEAgLTExOSw2ICsxMTksMjQgQEAgVUludCBwcGMzMmdfZGlydHloZWxwZXJfTUZTUFJfMjg3ICggdm9pZCApCisgIyAgZW5kaWYKKyB9CisgCisrLyogQ0FMTEVEIEZST00gR0VORVJBVEVEIENPREUgKi8KKysvKiBESVJUWSBIRUxQRVIgKG5vbi1yZWZlcmVudGlhbGx5IHRyYW5zcGFyZW50KSAqLworK1VJbnQgcHBjMzJnX2RpcnR5aGVscGVyX01GU1BSXzUyNl81MjcgKCBVSW50IHI1MjcgKQorK3sKKysjICBpZiBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9BSVgpCisrICAgVUludCBzcHI7CisrICAgaWYgKHI1MjcpIHsKKysgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibWZzcHIgJTAsNTI3IiA6ICI9YiIoc3ByKSk7CisrICAgfSBlbHNlIHsKKysgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibWZzcHIgJTAsNTI2IiA6ICI9YiIoc3ByKSk7CisrICAgfQorKyAgIHJldHVybiBzcHI7CisrIyAgZWxzZQorKyAgIHJldHVybiAwOworKyMgIGVuZGlmCisrfQorKworKworIAorIC8qIENBTExFRCBGUk9NIEdFTkVSQVRFRCBDT0RFICovCisgLyogRElSVFkgSEVMUEVSIChyZWFkcyBndWVzdCBzdGF0ZSwgd3JpdGVzIGd1ZXN0IG1lbSkgKi8KK2RpZmYgLS1naXQgYS9WRVgvcHJpdi9ndWVzdF9wcGNfdG9JUi5jIGIvVkVYL3ByaXYvZ3Vlc3RfcHBjX3RvSVIuYworaW5kZXggZjhkMjIwZC4uMzdjODk3NCAxMDA2NDQKKy0tLSBhL1ZFWC9wcml2L2d1ZXN0X3BwY190b0lSLmMKKysrKyBiL1ZFWC9wcml2L2d1ZXN0X3BwY190b0lSLmMKK0BAIC01NjU3LDYgKzU2NTcsMjggQEAgc3RhdGljIEJvb2wgZGlzX3Byb2NfY3RsICggVmV4QWJpSW5mbyogdmJpLCBVSW50IHRoZUluc3RyICkKKyAgICAgICAgICBicmVhazsKKyAgICAgICB9CisgCisrCisrICAgICAgY2FzZSA1MjYgLyogMHgyMEUgKi86CisrICAgICAgY2FzZSA1MjcgLyogMHgyMEYgKi86IHsKKysgICAgICAgICBVSW50ICAgICBhcmcgID0gU1BSPT01MjYgPyAwIDogMTsKKysgICAgICAgICBJUlRlbXAgICB2YWwgID0gbmV3VGVtcChJdHlfSTMyKTsKKysgICAgICAgICBJUkV4cHIqKiBhcmdzID0gbWtJUkV4cHJWZWNfMSggbWtVMzIoYXJnKSApOworKyAgICAgICAgIElSRGlydHkqIGQgICAgPSB1bnNhZmVJUkRpcnR5XzFfTigKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLypyZWdwYXJtcyovLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHBjMzJnX2RpcnR5aGVscGVyX01GU1BSXzUyNl81MjciLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbnB0cl90b19mbmVudHJ5CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2YmksICZwcGMzMmdfZGlydHloZWxwZXJfTUZTUFJfNTI2XzUyNyksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MKKysgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKysgICAgICAgICAvKiBleGVjdXRlIHRoZSBkaXJ0eSBjYWxsLCBkdW1waW5nIHRoZSByZXN1bHQgaW4gdmFsLiAqLworKyAgICAgICAgIHN0bXQoIElSU3RtdF9EaXJ0eShkKSApOworKyAgICAgICAgIHB1dElSZWcoIHJEX2FkZHIsCisrICAgICAgICAgICAgICAgICAgbWtXaWRlbkZyb20zMih0eSwgbWtleHByKHZhbCksIEZhbHNlLyp1bnNpZ25lZCovKSApOworKyAgICAgICAgIERJUCgibWZzcHIgciV1LCV1IiwgckRfYWRkciwgKFVJbnQpU1BSKTsKKysgICAgICAgICBicmVhazsKKysgICAgICB9CisrCisgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICB2ZXhfcHJpbnRmKCJkaXNfcHJvY19jdGwocHBjKShtZnNwcixTUFIpKDB4JXgpXG4iLCBTUFIpOworICAgICAgICAgIHJldHVybiBGYWxzZTsKKy0tIAorMS43LjAuNApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvYWRkLXB0ZXN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvYWRkLXB0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNWY4NDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9hZGQtcHRlc3QucGF0Y2gKQEAgLTAsMCArMSwyNDMgQEAKK01vZGlmeSB2Z190ZXN0IHdyYXBwZXIgdG8gc3VwcG9ydCBQVEVTVCBmb3JtYXRzCisKK0NoYW5nZSB0aGUgdmFsZ3JpbmQgcmVncmVzc2lvbiB0ZXN0IHNjcmlwdCB2Z19yZWd0ZXN0IHRvCitzdXBwb3J0IHRoZSB5b2N0byBwdGVzdCBzdGRvdXQgcmVwb3J0aW5nIGZvcm1hdC4gIFRoZSBjb21taXQgYWRkcworJy0teW9jdG8tcHRlc3QnIGFzIGFuIG9wdGlvbmFsIGFyZ3VtZW50IHRvIHZnX3JlZ3Rlc3QsIHdoaWNoIGFsdGVycwordGhlIG91dHB1dCB0byB1c2UgdGhlIHB0ZXN0IGluZnJhc3RydWN0dXJlIHJlcG9ydGluZyBmb3JtYXQ6CisgICAgIltQQVNTfFNLSVB8RkFJTF06IHRlc3RuYW1lIgoraW5zdGVhZCBvZiB2YWxncmluZCdzIGludGVybmFsIHRlc3QgcmVwb3J0aW5nIGZvcm1hdC4gIFdpdGhvdXQgdGhlIGFkZGVkCitvcHRpb24sIC0teW9jdG8tcHRlc3QsIHRoZSB2YWxncmluZCByZWdyZXNzaW9uIHRlc3Qgb3V0cHV0IGlzIHVuY2hhbmdlZC4KKworRW5mb3JjZSAzMCBzZWNvbmRzIGxpbWl0IGZvciB0aGUgdGVzdC4KK1RoaXMgcmVzdW1lIGV4ZWN1dGlvbiBvZiB0aGUgcmVtYWluaW5nIHRlc3RzIHdoZW4gdmFsZ3JpbmQgaGFuZ3MuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBEYXZlIExlcm5lciA8ZGF2ZS5sZXJuZXJAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFR1ZG9yIEZsb3JlYSA8dHVkb3IuZmxvcmVhQGVuZWEuY29tPgorCitkaWZmIC0tZ2l0IGEvdGVzdHMvdmdfcmVndGVzdC5pbiBiL3Rlc3RzL3ZnX3JlZ3Rlc3QuaW4KK2luZGV4IDIyNDM4NWYuLjNlMDM4M2IgMTAwNzU1CistLS0gYS90ZXN0cy92Z19yZWd0ZXN0LmluCisrKysgYi90ZXN0cy92Z19yZWd0ZXN0LmluCitAQCAtMzksMTEgKzM5LDExIEBACisgIyAgICAgICAgICAgICAgIC0tdmFsZ3JpbmQuKQorICMgICAtLWtlZXAtdW5maWx0ZXJlZDoga2VlcCBhIGNvcHkgb2YgdGhlIHVuZmlsdGVyZWQgb3V0cHV0L2Vycm9yIG91dHB1dAorICMgICAgIG9mIGVhY2ggdGVzdCBieSBhZGRpbmcgYW4gZXh0ZW5zaW9uIC51bmZpbHRlcmVkLm91dAorLSMKKyAjICAgLS1vdXRlci12YWxncmluZDogcnVuIHRoaXMgdmFsZ3JpbmQgdW5kZXIgdGhlIGdpdmVuIG91dGVyIHZhbGdyaW5kLgorICMgICAgIFRoaXMgdmFsZ3JpbmQgbXVzdCBiZSBjb25maWd1cmVkIHdpdGggLS1lbmFibGUtaW5uZXIuCisgIyAgIC0tb3V0ZXItdG9vbDogdG9vbCB0byB1c2UgYnkgdGhlIG91dGVyIHZhbGdyaW5kIChkZWZhdWx0IG1lbWNoZWNrKS4KKyAjICAgLS1vdXRlci1hcmdzOiB1c2UgdGhpcyBhcyBvdXRlciB0b29sIGFyZ3MuCisrIyAgIC0teW9jdG8tcHRlc3Q6IG91dHB1dCBpbiB5b2N0byBwdGVzdCBmb3JtYXQKKyAjCisgIyBUaGUgZWFzaWVzdCB3YXkgaXMgdG8gcnVuIGFsbCB0ZXN0cyBpbiB2YWxncmluZC8gd2l0aCAoYXNzdW1pbmcgeW91IGluc3RhbGxlZAorICMgaW4gJFBSRUZJWCk6CitAQCAtMTI2LDcgKzEyNiw3IEBAIHVzZSBzdHJpY3Q7CisgbXkgJHVzYWdlPSJcbiIKKyAgICAgIC4gIlVzYWdlOlxuIgorICAgICAgLiAiICAgdmdfcmVndGVzdCBbLS1hbGwsIC0tdmFsZ3JpbmQsIC0tdmFsZ3JpbmQtbGliLCAtLWtlZXAtdW5maWx0ZXJlZFxuIgorLSAgICAgLiAiICAgICAgICAgICAgICAgICAtLW91dGVyLXZhbGdyaW5kLCAtLW91dGVyLXRvb2wsIC0tb3V0ZXItYXJnc11cbiIKKysgICAgIC4gIiAgICAgICAgICAgICAgICAgLS1vdXRlci12YWxncmluZCwgLS1vdXRlci10b29sLCAtLW91dGVyLWFyZ3MsIC0teW9jdG8tcHRlc3RdXG4iCisgICAgICAuICIgICBVc2UgRVhUUkFfUkVHVEVTVF9PUFRTIHRvIHN1cHBseSBleHRyYSBhcmdzIGZvciBhbGwgdGVzdHNcbiIKKyAgICAgIC4gIlxuIjsKKyAKK0BAIC0xNzAsNiArMTcwLDcgQEAgbXkgJG91dGVyX2FyZ3M7CisgCisgbXkgJHZhbGdyaW5kX2xpYiA9ICIkdGVzdHNfZGlyLy5pbl9wbGFjZSI7CisgbXkgJGtlZXB1bmZpbHRlcmVkID0gMDsKKytteSAkeW9jdG9wdGVzdCA9IDA7CisgCisgIyBkZWZhdWx0IGZpbHRlciBpcyB0aGUgb25lIG5hbWVkICJmaWx0ZXJfc3RkZXJyIiBpbiB0aGUgdGVzdCdzIGRpcmVjdG9yeQorIG15ICRkZWZhdWx0X3N0ZGVycl9maWx0ZXIgPSAiZmlsdGVyX3N0ZGVyciI7CitAQCAtMjI2LDYgKzIyNyw4IEBAIHN1YiBwcm9jZXNzX2NvbW1hbmRfbGluZSgpCisgICAgICAgICAgICAgICAgICR2YWxncmluZF9saWIgPSAkMTsKKyAgICAgICAgICAgICB9IGVsc2lmICgkYXJnID1+IC9eLS1rZWVwLXVuZmlsdGVyZWQkLykgeworICAgICAgICAgICAgICAgICAka2VlcHVuZmlsdGVyZWQgPSAxOworKyAgICAgICAgICAgIH0gZWxzaWYgKCRhcmcgPX4gL14tLXlvY3RvLXB0ZXN0JC8pIHsKKysgICAgICAgICAgICAgICAgJHlvY3RvcHRlc3QgPSAxOworICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgIGRpZSAkdXNhZ2U7CisgICAgICAgICAgICAgfQorQEAgLTM0MCwxMyArMzQzLDI4IEBAIHN1YiByZWFkX3ZndGVzdF9maWxlKCQpCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIFNpbmNlIG1vc3Qgb2YgdGhlIHByb2dyYW0gdGltZSBpcyBzcGVudCBpbiBzeXN0ZW0oKSBjYWxscywgbmVlZCB0aGlzIHRvCisgIyBwcm9wYWdhdGUgYSBDdHJsLUMgZW5hYmxpbmcgdXMgdG8gcXVpdC4KKy1zdWIgbXlzeXN0ZW0oJCkgCisrIyBFbmZvcmNlIDMwIHNlY29uZHMgbGltaXQgZm9yIHRoZSB0ZXN0LgorKyMgVGhpcyByZXN1bWUgZXhlY3V0aW9uIG9mIHRoZSByZW1haW5pbmcgdGVzdHMgaWYgdmFsZ3JpbmQgaGFuZ3MuCisrc3ViIG15c3lzdGVtKCQpCisgeworLSAgICBteSAkZXhpdF9jb2RlID0gc3lzdGVtKCRfWzBdKTsKKy0gICAgKCRleGl0X2NvZGUgPT0gMikgYW5kIGV4aXQgMTsgICAgICAjIDIgaXMgU0lHSU5UCistICAgIHJldHVybiAkZXhpdF9jb2RlOworKyAgICBteSAkZXhpdF9jb2RlPTA7CisrICAgIGV2YWwgeworKyAgICAgICAgbG9jYWwgJFNJR3snQUxSTSd9ID0gc3ViIHsgZGllICJ0aW1lZCBvdXRcbiIgfTsKKysgICAgICAgIGFsYXJtKDMwKTsKKysgICAgICAgICRleGl0X2NvZGUgPSBzeXN0ZW0oJF9bMF0pOworKyAgICAgICAgYWxhcm0gKDApOworKyAgICAgICAgKCRleGl0X2NvZGUgPT0gMikgYW5kIGRpZSAiU0lHSU5UXG4iOyAgICMgMiBpcyBTSUdJTlQKKysgICAgfTsKKysgICAgaWYgKCRAKSB7CisrICAgICAgICBpZiAoJEAgZXEgInRpbWVkIG91dFxuIikgeworKyAgICAgICAgICAgIHByaW50ICJ0aW1lZCBvdXRcbiI7CisrICAgICAgICAgICAgcmV0dXJuIDE7CisrICAgICAgICB9CisrICAgICAgICBpZiAoJEAgZXEgIlNJR0lOVFxuIikgeworKyAgICAgICAgICAgIGV4aXQgMTsKKysgICAgICAgIH0KKysgICAgfQorIH0KKy0KKyAjIGlmICRrZWVwdW5maWx0ZXJlZCwgY29waWVzICQxIHRvICQxLnVuZmlsdGVyZWQub3V0CisgIyByZW5hbWVzICQwIHRwICQxCisgc3ViIGZpbHRlcmVkX3JlbmFtZSgkJCkgCitAQCAtMzk0LDE5ICs0MTIsMjEgQEAgc3ViIGRvX2RpZmZzKCQkJCQpCisgICAgICAgICAgICAgICAgICMgQSBtYXRjaDsgIHJlbW92ZSAub3V0IGFuZCBhbnkgcHJldmlvdXNseSBjcmVhdGVkIC5kaWZmIGZpbGVzLgorICAgICAgICAgICAgICAgICB1bmxpbmsoIiRuYW1lLiRtaWQub3V0Iik7CisgICAgICAgICAgICAgICAgIHVubGluayg8JG5hbWUuJG1pZC5kaWZmKj4pOworLSAgICAgICAgICAgICAgICByZXR1cm47CisrICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgfQorICAgICAjIElmIHdlIHJlYWNoIGhlcmUsIG5vbmUgb2YgdGhlIC5leHAgZmlsZXMgbWF0Y2hlZC4KKy0gICAgcHJpbnQgIioqKiAkbmFtZSBmYWlsZWQgKCRtaWQpICoqKlxuIjsKKysgICAgcHJpbnQgIioqKiAkbmFtZSBmYWlsZWQgKCRtaWQpICoqKlxuIiBpZiAoJHlvY3RvcHRlc3QgPT0gMCkgOworICAgICBwdXNoKEBmYWlsdXJlcywgc3ByaW50ZigiJS00MHMgKCRtaWQpIiwgIiRmdWxsbmFtZSIpKTsKKyAgICAgJG51bV9mYWlsdXJlc3skbWlkfSsrOworKyAgICByZXR1cm4gMTsKKyB9CisgCisgc3ViIGRvX29uZV90ZXN0KCQkKSAKKyB7CisgICAgIG15ICgkZGlyLCAkdmd0ZXN0KSA9IEBfOworKyAgICBteSAkZGlmZlN0YXR1cyA9IDA7CisgICAgICR2Z3Rlc3QgPX4gL14oLiopXC52Z3Rlc3QvOworICAgICBteSAkbmFtZSA9ICQxOworICAgICBteSAkZnVsbG5hbWUgPSAiJGRpci8kbmFtZSI7IAorQEAgLTQyNSw3ICs0NDUsMTEgQEAgc3ViIGRvX29uZV90ZXN0KCQkKQorICAgICAgICAgfSBlbHNpZiAoMjU2ID09ICRwcmVyZXFfcmVzKSB7CisgICAgICAgICAgICAgIyBOYjogd2VpcmQgUGVybC1pc20gLS0gZXhpdCBjb2RlIG9mICcxJyBpcyBzZWVuIGJ5IFBlcmwgYXMgMjU2Li4uCisgICAgICAgICAgICAgIyBQcmVyZXEgZmFpbGVkLCBza2lwLgorLSAgICAgICAgICAgIHByaW50ZigiJS0xNnMgKHNraXBwaW5nLCBwcmVyZXEgZmFpbGVkOiAkcHJlcmVxKVxuIiwgIiRuYW1lOiIpOworKyAgICAgICAgICAgIGlmICgkeW9jdG9wdGVzdCA9PSAwKSB7CisrICAgICAgICAgICAgICAgIHByaW50ZigiJS0xNnMgKHNraXBwaW5nLCBwcmVyZXEgZmFpbGVkOiAkcHJlcmVxKVxuIiwgIiRuYW1lOiIpOworKyAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgICAgIHByaW50ZigiU0tJUDogJGZ1bGxuYW1lXG4iKTsKKysgICAgICAgICAgICB9CisgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAjIEJhZCBwcmVyZXE7IGFib3J0LgorQEAgLTQzOCw3ICs0NjIsNyBAQCBzdWIgZG9fb25lX3Rlc3QoJCQpCisgICAgIGlmIChkZWZpbmVkICRwcm9nQikgeworICAgICAgICAgIyBJZiB0aGVyZSBpcyBhIHByb2dCLCBsZXQncyBzdGFydCBpdCBpbiBiYWNrZ3JvdW5kOgorICAgICAgICAgcHJpbnRmKCIlLTE2cyB2YWxncmluZCAkZXh0cmFvcHRzICR2Z29wdHMgJHByb2cgJGFyZ3MgKHByb2dCOiAkcHJvZ0IgJGFyZ3NCKVxuIiwKKy0gICAgICAgICAgICAgICAiJG5hbWU6Iik7CisrICAgICAgICAgICAgICAgIiRuYW1lOiIpIGlmICgkeW9jdG9wdGVzdCA9PSAwKTsKKyAgICAgICAgICMgcHJvZ0IuZG9uZSB1c2VkIHRvIGRldGVjdCBjaGlsZCBoYXMgZmluaXNoZWQuIFNlZSBiZWxvdy4KKyAgICAgICAgICMgTm90ZTogcmVkaXJlY3Rpb24gb2Ygc3Rkb3V0IGFuZCBzdGRlcnIgaXMgYmVmb3JlICRwcm9nQiB0byBhbGxvdyBhcmdzQgorICAgICAgICAgIyB0byBlLmcuIHJlZGlyZWN0IHN0ZG91dEIgdG8gc3RkZXJyQgorQEAgLTQ1Miw3ICs0NzYsOCBAQCBzdWIgZG9fb25lX3Rlc3QoJCQpCisgICAgICAgICAgICAgICAgICAgICAgLiAidG91Y2ggcHJvZ0IuZG9uZSkgICYiKTsKKyAgICAgICAgIH0KKyAgICAgfSBlbHNlIHsKKy0gICAgICAgIHByaW50ZigiJS0xNnMgdmFsZ3JpbmQgJGV4dHJhb3B0cyAkdmdvcHRzICRwcm9nICRhcmdzXG4iLCAiJG5hbWU6Iik7CisrICAgICAgICBwcmludGYoIiUtMTZzIHZhbGdyaW5kICRleHRyYW9wdHMgJHZnb3B0cyAkcHJvZyAkYXJnc1xuIiwgIiRuYW1lOiIpCisrICAgICAgICAgICAgaWYgKCR5b2N0b3B0ZXN0ID09IDApOworICAgICB9CisgIAorICAgICAjIFBhc3MgdGhlIGFwcHJvcHJpYXRlIC0tdG9vbCBvcHRpb24gZm9yIHRoZSBkaXJlY3RvcnkgKGNhbiBiZSBvdmVycmlkZGVuCitAQCAtNDg3LDcgKzUxMiw3IEBAIHN1YiBkb19vbmVfdGVzdCgkJCkKKyAgICAgIyBGaW5kIGFsbCB0aGUgLnN0ZG91dC5leHAgZmlsZXMuICBJZiBub25lLCB1c2UgL2Rldi9udWxsLgorICAgICBteSBAc3Rkb3V0X2V4cHMgPSA8JG5hbWUuc3Rkb3V0LmV4cCo+OworICAgICBAc3Rkb3V0X2V4cHMgPSAoICIvZGV2L251bGwiICkgaWYgKDAgPT0gc2NhbGFyIEBzdGRvdXRfZXhwcyk7CistICAgIGRvX2RpZmZzKCRmdWxsbmFtZSwgJG5hbWUsICJzdGRvdXQiLCBcQHN0ZG91dF9leHBzKTsgCisrICAgICRkaWZmU3RhdHVzIHw9IGRvX2RpZmZzKCRmdWxsbmFtZSwgJG5hbWUsICJzdGRvdXQiLCBcQHN0ZG91dF9leHBzKTsKKyAKKyAgICAgIyBGaWx0ZXIgc3RkZXJyCisgICAgICRzdGRlcnJfZmlsdGVyX2FyZ3MgPSAkbmFtZSBpZiAoISBkZWZpbmVkICRzdGRlcnJfZmlsdGVyX2FyZ3MpOworQEAgLTQ5Niw3ICs1MjEsNyBAQCBzdWIgZG9fb25lX3Rlc3QoJCQpCisgICAgICMgRmluZCBhbGwgdGhlIC5zdGRlcnIuZXhwIGZpbGVzLiAgQXQgbGVhc3Qgb25lIG11c3QgZXhpc3QuCisgICAgIG15IEBzdGRlcnJfZXhwcyA9IDwkbmFtZS5zdGRlcnIuZXhwKj47CisgICAgICgwICE9IHNjYWxhciBAc3RkZXJyX2V4cHMpIG9yIGRpZSAiQ291bGQgbm90IGZpbmQgYCRuYW1lLnN0ZGVyci5leHAqJ1xuIjsKKy0gICAgZG9fZGlmZnMoJGZ1bGxuYW1lLCAkbmFtZSwgInN0ZGVyciIsIFxAc3RkZXJyX2V4cHMpOyAKKysgICAgJGRpZmZTdGF0dXMgfD0gZG9fZGlmZnMoJGZ1bGxuYW1lLCAkbmFtZSwgInN0ZGVyciIsIFxAc3RkZXJyX2V4cHMpOworIAorICAgICBpZiAoZGVmaW5lZCAkcHJvZ0IpIHsKKyAgICAgICAgICMgd2FpdCBmb3IgdGhlIGNoaWxkIHRvIGJlIGZpbmlzaGVkCitAQCAtNTIwLDcgKzU0NSw3IEBAIHN1YiBkb19vbmVfdGVzdCgkJCkKKyAgICAgICAgICMgRmluZCBhbGwgdGhlIC5zdGRvdXRCLmV4cCBmaWxlcy4gIElmIG5vbmUsIHVzZSAvZGV2L251bGwuCisgICAgICAgICBteSBAc3Rkb3V0Ql9leHBzID0gPCRuYW1lLnN0ZG91dEIuZXhwKj47CisgICAgICAgICBAc3Rkb3V0Ql9leHBzID0gKCAiL2Rldi9udWxsIiApIGlmICgwID09IHNjYWxhciBAc3Rkb3V0Ql9leHBzKTsKKy0gICAgICAgIGRvX2RpZmZzKCRmdWxsbmFtZSwgJG5hbWUsICJzdGRvdXRCIiwgXEBzdGRvdXRCX2V4cHMpOyAKKysgICAgICAgICRkaWZmU3RhdHVzIHw9IGRvX2RpZmZzKCRmdWxsbmFtZSwgJG5hbWUsICJzdGRvdXRCIiwgXEBzdGRvdXRCX2V4cHMpOworICAgICAgICAgCisgICAgICAgICAjIEZpbHRlciBzdGRlcnIKKyAgICAgICAgICRzdGRlcnJCX2ZpbHRlcl9hcmdzID0gJG5hbWUgaWYgKCEgZGVmaW5lZCAkc3RkZXJyQl9maWx0ZXJfYXJncyk7CitAQCAtNTI5LDcgKzU1NCw3IEBAIHN1YiBkb19vbmVfdGVzdCgkJCkKKyAgICAgICAgICMgRmluZCBhbGwgdGhlIC5zdGRlcnJCLmV4cCBmaWxlcy4gIEF0IGxlYXN0IG9uZSBtdXN0IGV4aXN0LgorICAgICAgICAgbXkgQHN0ZGVyckJfZXhwcyA9IDwkbmFtZS5zdGRlcnJCLmV4cCo+OworICAgICAgICAgKDAgIT0gc2NhbGFyIEBzdGRlcnJCX2V4cHMpIG9yIGRpZSAiQ291bGQgbm90IGZpbmQgYCRuYW1lLnN0ZGVyckIuZXhwKidcbiI7CistICAgICAgICBkb19kaWZmcygkZnVsbG5hbWUsICRuYW1lLCAic3RkZXJyQiIsIFxAc3RkZXJyQl9leHBzKTsgCisrICAgICAgICAkZGlmZlN0YXR1cyB8PSBkb19kaWZmcygkZnVsbG5hbWUsICRuYW1lLCAic3RkZXJyQiIsIFxAc3RkZXJyQl9leHBzKTsKKyAgICAgfQorIAorICAgICAjIE1heWJlIGRvIHBvc3QtdGVzdCBjaGVjaworQEAgLTU0MSw3ICs1NjYsNyBAQCBzdWIgZG9fb25lX3Rlc3QoJCQpCisgCSAgICAjIEZpbmQgYWxsIHRoZSAucG9zdC5leHAgZmlsZXMuICBJZiBub25lLCB1c2UgL2Rldi9udWxsLgorIAkgICAgbXkgQHBvc3RfZXhwcyA9IDwkbmFtZS5wb3N0LmV4cCo+OworIAkgICAgQHBvc3RfZXhwcyA9ICggIi9kZXYvbnVsbCIgKSBpZiAoMCA9PSBzY2FsYXIgQHBvc3RfZXhwcyk7CistCSAgICBkb19kaWZmcygkZnVsbG5hbWUsICRuYW1lLCAicG9zdCIsIFxAcG9zdF9leHBzKTsKKysJICAgICRkaWZmU3RhdHVzIHw9IGRvX2RpZmZzKCRmdWxsbmFtZSwgJG5hbWUsICJwb3N0IiwgXEBwb3N0X2V4cHMpOworIAl9CisgICAgIH0KKyAgCitAQCAtNTUwLDYgKzU3NSwxMyBAQCBzdWIgZG9fb25lX3Rlc3QoJCQpCisgICAgICAgICAgICAgcHJpbnQoIihjbGVhbnVwIG9wZXJhdGlvbiBmYWlsZWQ6ICRjbGVhbnVwKVxuIik7CisgICAgIH0KKyAKKysgICAgaWYgKCR5b2N0b3B0ZXN0ID09IDEpIHsKKysgICAgICAgIGlmICgkZGlmZlN0YXR1cyA9PSAwKSB7CisrICAgICAgICAgICAgcHJpbnQoIlBBU1M6ICRmdWxsbmFtZVxuIik7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIHByaW50KCJGQUlMOiAkZnVsbG5hbWVcbiIpOworKyAgICAgICAgfQorKyAgICB9CisgICAgICRudW1fdGVzdHNfZG9uZSsrOworIH0KKyAKK0BAIC01ODksNyArNjIxLDcgQEAgc3ViIHRlc3Rfb25lX2RpcigkJCkKKyAgICAgbXkgJGZvdW5kX3Rlc3RzID0gKDAgIT0gKGdyZXAgeyAkXyA9fiAvXC52Z3Rlc3QkLyB9IEBmcykpOworIAorICAgICBpZiAoJGZvdW5kX3Rlc3RzKSB7CistICAgICAgICBwcmludCAiLS0gUnVubmluZyAgdGVzdHMgaW4gJGZ1bGxfZGlyICRkYXNoZXNcbiI7CisrICAgICAgICBwcmludCAiLS0gUnVubmluZyAgdGVzdHMgaW4gJGZ1bGxfZGlyICRkYXNoZXNcbiIgaWYgKCR5b2N0b3B0ZXN0ID09IDApOworICAgICB9CisgICAgIGZvcmVhY2ggbXkgJGYgKEBmcykgeworICAgICAgICAgaWYgKC1kICRmKSB7CitAQCAtNTk5LDcgKzYzMSw3IEBAIHN1YiB0ZXN0X29uZV9kaXIoJCQpCisgICAgICAgICB9CisgICAgIH0KKyAgICAgaWYgKCRmb3VuZF90ZXN0cykgeworLSAgICAgICAgcHJpbnQgIi0tIEZpbmlzaGVkIHRlc3RzIGluICRmdWxsX2RpciAkZGFzaGVzXG4iOworKyAgICAgICAgcHJpbnQgIi0tIEZpbmlzaGVkIHRlc3RzIGluICRmdWxsX2RpciAkZGFzaGVzXG4iIGlmICgkeW9jdG9wdGVzdCA9PSAwKTsKKyAgICAgfQorIAorICAgICBjaGRpcigiLi4iKTsKK0BAIC02MjUsMTAgKzY1NywxMiBAQCBzdWIgc3VtbWFyaXNlX3Jlc3VsdHMKKyAgICAgICAgICAgICRudW1fZmFpbHVyZXN7InN0ZG91dCJ9LCAgIHBsdXJhbCgkbnVtX2ZhaWx1cmVzeyJzdGRvdXQifSksCisgICAgICAgICAgICAkbnVtX2ZhaWx1cmVzeyJzdGRlcnJCIn0sICBwbHVyYWwoJG51bV9mYWlsdXJlc3sic3RkZXJyQiJ9KSwKKyAgICAgICAgICAgICRudW1fZmFpbHVyZXN7InN0ZG91dEIifSwgIHBsdXJhbCgkbnVtX2ZhaWx1cmVzeyJzdGRvdXRCIn0pLAorLSAgICAgICAgICAgJG51bV9mYWlsdXJlc3sicG9zdCJ9LCAgICAgcGx1cmFsKCRudW1fZmFpbHVyZXN7InBvc3QifSkpOworKyAgICAgICAgICAgJG51bV9mYWlsdXJlc3sicG9zdCJ9LCAgICAgcGx1cmFsKCRudW1fZmFpbHVyZXN7InBvc3QifSkpCisrICAgICAgICAgICAgICAgaWYgKCR5b2N0b3B0ZXN0ID09IDApOworIAorICAgICBmb3JlYWNoIG15ICRmYWlsdXJlIChAZmFpbHVyZXMpIHsKKy0gICAgICAgIHByaW50ICIkZmFpbHVyZVxuIjsKKysgICAgICAgIHByaW50ICIkZmFpbHVyZVxuIgorKyAgICAgICAgICAgaWYgKCR5b2N0b3B0ZXN0ID09IDApOworICAgICB9CisgICAgIHByaW50ICJcbiI7CisgfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvZW5hYmxlLmJ1aWxkaW5nLm9uLjQueC5rZXJuZWwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9lbmFibGUuYnVpbGRpbmcub24uNC54Lmtlcm5lbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDBmMmYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvZW5hYmxlLmJ1aWxkaW5nLm9uLjQueC5rZXJuZWwucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRW5hYmxlIGJ1aWxkaW5nIHZhbGdyaW5kIG9uIGhvc3Qgd2l0aCA0Lngga2VybmVsLgorCitGb3IgT3BlbkVtYmVkZGVkIGJ1aWxkcyB3ZSBzaG91bGQgYmUgY2hlY2tpbmcgc29tZXRoaW5nIGxpa2UKK09MREVTVF9LRVJORUwgaW5zdGVhZCBvZiBgdW5hbWUgLXJgLCBidXQgdGhpcyBpcyBnb29kIGVub3VnaCBmb3Igbm93LgorCitCdWlsZGluZyBvbiA0LngqIGN1cnJlbnRseSBmYWlscyB3aXRoOgorICBjb25maWd1cmU6NTU1NjogY2hlY2tpbmcgZm9yIHRoZSBrZXJuZWwgdmVyc2lvbgorICBjb25maWd1cmU6NTU3OTogcmVzdWx0OiB1bnN1cHBvcnRlZCAoNC4wLjAtcmMzLTAwMTExLWdhZmZiODE3KQorICBjb25maWd1cmU6NTU4MTogZXJyb3I6IFZhbGdyaW5kIHdvcmtzIG9uIGtlcm5lbHMgMi40LCAyLjYKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CisKKy0tLSB2YWxncmluZC0zLjkuMC9jb25maWd1cmUuYWMub3JpZwkyMDE1LTAzLTEzIDE5OjE3OjAxLjI0NzMxMDg2OCArMDEwMAorKysrIHZhbGdyaW5kLTMuOS4wL2NvbmZpZ3VyZS5hYwkyMDE1LTAzLTEzIDE5OjE5OjI3LjM4ODMxNjEwOCArMDEwMAorQEAgLTI3Niw5ICsyNzYsOSBAQAorICAgICAgICAga2VybmVsPWB1bmFtZSAtcmAKKyAKKyAgICAgICAgIGNhc2UgIiR7a2VybmVsfSIgaW4KKy0gICAgICAgICAgICAgMi42Lip8My4qKSAKKy0gICAgICAgIAkgICAgQUNfTVNHX1JFU1VMVChbMi42LngvMy54IGZhbWlseSAoJHtrZXJuZWx9KV0pCistICAgICAgICAJICAgIEFDX0RFRklORShbS0VSTkVMXzJfNl0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgTGludXggMi42Lnggb3IgTGludXggMy54XSkKKysgICAgICAgICAgICAgMi42Lip8My4qfDQuKikgCisrICAgICAgICAJICAgIEFDX01TR19SRVNVTFQoWzIuNi54LzMueC80LnggZmFtaWx5ICgke2tlcm5lbH0pXSkKKysgICAgICAgIAkgICAgQUNfREVGSU5FKFtLRVJORUxfMl82XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBMaW51eCAyLjYueCBvciBMaW51eCAzLnggb3IgTGludXggNC54XSkKKyAgICAgICAgIAkgICAgOzsKKyAKKyAgICAgICAgICAgICAgMi40LiopIAorQEAgLTI4OCw3ICsyODgsNyBAQAorIAorICAgICAgICAgICAgICAqKSAKKyAgICAgICAgIAkgICAgQUNfTVNHX1JFU1VMVChbdW5zdXBwb3J0ZWQgKCR7a2VybmVsfSldKQorLSAgICAgICAgCSAgICBBQ19NU0dfRVJST1IoW1ZhbGdyaW5kIHdvcmtzIG9uIGtlcm5lbHMgMi40LCAyLjZdKQorKyAgICAgICAgCSAgICBBQ19NU0dfRVJST1IoW1ZhbGdyaW5kIHdvcmtzIG9uIGtlcm5lbHMgMi40LCAyLjYsIDMueCwgNC54XSkKKyAgICAgICAgIAkgICAgOzsKKyAgICAgICAgIGVzYWMKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2ZpeGVkLXBlcmwtcGF0aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2ZpeGVkLXBlcmwtcGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDU0ZDA1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvZml4ZWQtcGVybC1wYXRoLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK3RoaXMgaXMgYSB0ZW1wb3JhcnkgcGF0Y2ggdG8gd29ya2Fyb3VuZCBjcm9zcyBjb21waWxhdGlvbi4KK290aGVyd2lzZSBAUEVSTEAgd2lsbCBiZSByZXBsYWNlZCB0byBwZXJsLW5hdGl2ZSBiaW5hcnksCit0aGlzIGNyZWF0ZXMgdW51c2FibGUgc2NyaXB0cyBhbmQgZmFpbHMgRklMRVJERVBFTkRTIG1lY2hhbmlzbQorKGVzcC4gcnBtKQorCithIGJldHRlciBmaXggd291bGQgbmVlZDoKKyAxLiBjb25maWd1cmUuYWMgc2hvdWxkIGRpZmZlcmVudGlhdGUgUEVSTCBhbmQgSE9TVFBFUkwKKyAyLiBvcHRpb25hbGx5IHJlbW92ZSAke1NUQUdJTkdfRElSfSBpbiAjISBsaW5lIGJlZm9yZSBkb19pbnN0YWxsCisKKzgvMzEvMjAxMCAtIGNyZWF0ZWQgYnkgUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworZGlmZiAtLWdpdCBhL2NhY2hlZ3JpbmQvY2dfYW5ub3RhdGUuaW4gYi9jYWNoZWdyaW5kL2NnX2Fubm90YXRlLmluCitpbmRleCA5ZGM5NTY1Li5jYzRlZjA1IDEwMDY0NAorLS0tIGEvY2FjaGVncmluZC9jZ19hbm5vdGF0ZS5pbgorKysrIGIvY2FjaGVncmluZC9jZ19hbm5vdGF0ZS5pbgorQEAgLTEsNCArMSw0IEBACistIyEgQFBFUkxACisrIyEgL3Vzci9iaW4vcGVybAorIAorICMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworICMjLS0tIENhY2hlZ3JpbmQncyBhbm5vdGF0b3IuICAgICAgICAgICAgICAgICAgICAgICBjZ19hbm5vdGF0ZS5pbiAtLS0jIworZGlmZiAtLWdpdCBhL2NhY2hlZ3JpbmQvY2dfZGlmZi5pbiBiL2NhY2hlZ3JpbmQvY2dfZGlmZi5pbgoraW5kZXggOTUxMDY2ZS4uODRjMmRkZSAxMDA2NDQKKy0tLSBhL2NhY2hlZ3JpbmQvY2dfZGlmZi5pbgorKysrIGIvY2FjaGVncmluZC9jZ19kaWZmLmluCitAQCAtMSw0ICsxLDQgQEAKKy0jISBAUEVSTEAKKysjISAvdXNyL2Jpbi9wZXJsCisgCisgIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisgIyMtLS0gQ2FjaGVncmluZCdzIGRpZmZlcmVuY2VyLiAgICAgICAgICAgICAgICAgICAgICAgICBjZ19kaWZmLmluIC0tLSMjCitkaWZmIC0tZ2l0IGEvbWFzc2lmL21zX3ByaW50LmluIGIvbWFzc2lmL21zX3ByaW50LmluCitpbmRleCBlNmZmZGJmLi5mYjQ1OTA2IDEwMDc1NQorLS0tIGEvbWFzc2lmL21zX3ByaW50LmluCisrKysgYi9tYXNzaWYvbXNfcHJpbnQuaW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhIEBQRVJMQAorKyMhIC91c3IvYmluL3BlcmwKKyAKKyAjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyAjIy0tLSBNYXNzaWYncyByZXN1bHRzIHByaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgbXNfcHJpbnQuaW4gLS0tIyMKK2RpZmYgLS1naXQgYS9wZXJmL3ZnX3BlcmYuaW4gYi9wZXJmL3ZnX3BlcmYuaW4KK2luZGV4IDIxODhhMzEuLjgzYWQwMjQgMTAwNjQ0CistLS0gYS9wZXJmL3ZnX3BlcmYuaW4KKysrKyBiL3BlcmYvdmdfcGVyZi5pbgorQEAgLTEsNCArMSw0IEBACistIyEgQFBFUkxACisrIyEgL3Vzci9iaW4vcGVybAorICMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworICMjLS0tIFZhbGdyaW5kIHBlcmZvcm1hbmNlIHRlc3Rpbmcgc2NyaXB0ICAgICAgICAgICAgICAgICAgdmdfcGVyZiAtLS0jIworICMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvZm9yY2Utbm9zdGFicy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2ZvcmNlLW5vc3RhYnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ5ZGZjNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2ZvcmNlLW5vc3RhYnMucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorU3VwcHJlc3MgYnVpbGRpbmcgcHRlc3QgYXBwcyB3aXRoIHRoZSAtZ3N0YWJzIG9wdGlvbgorCitGb3JjZSB0aGUgY29uZmlndXJlIHRlc3RzIGZvciAtZ3N0YWJzIGNvbXBpbGVyIHN1cHBvcnQgdG8gZmFpbCBzbyB0aGF0Cit0aGUgcmVncmVzc2lvbiB0ZXN0cyBkb24ndCB0cnkgdG8gYnVpbGQgd2l0aCB0aGUgLWdzdGFicyBvcHRpb24uCitPdGhlcndpc2UsIHRoZSB2YWxncmluZCBidWlsZCB3aGVuIHB0ZXN0IGlzIGVuYWJsZWQgZmFpbHMgd2l0aCB0aGUKK2Vycm9yOgorICAgIFN0YWJzIGRlYnVnaW5mbyBub3Qgc3VwcG9ydGVkOgorICAgIC4uL3BhY2thZ2UvdXNyL2xpYi92YWxncmluZC9wdGVzdC9tZW1jaGVjay90ZXN0cy9kZWVwX3RlbXBsYXRlcworICAgIEVSUk9SOiBGdW5jdGlvbiBmYWlsZWQ6IHNwbGl0X2FuZF9zdHJpcF9maWxlcworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2dzdGFicyBzdXBwb3J0IGlzIGFwcHJvcHJpYXRlIHVwc3RyZWFtLAorICAgICAgICBidXQgbm90IGZvciB0aGlzIGRpc3Ryb10KKworU2lnbmVkLW9mZi1ieTogRGF2ZSBMZXJuZXIgPGRhdmUubGVybmVyQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDc1NWRmYjkuLmNjOGI1ZTEgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE3NDMsMjIgKzE3NDMsNyBAQCBBTV9DT05ESVRJT05BTChEV0FSRjQsIHRlc3QgeCRhY19oYXZlX2R3YXJmNCA9IHh5ZXMpCisgQ0ZMQUdTPSRzYWZlX0NGTEFHUworIAorIAorLSMgZG9lcyB0aGlzIGNvbXBpbGVyIHN1cHBvcnQgLWdzdGFicyA/CistCistQUNfTVNHX0NIRUNLSU5HKFtpZiBnY2MgYWNjZXB0cyAtZ3N0YWJzXSkKKy0KKy1zYWZlX0NGTEFHUz0kQ0ZMQUdTCistQ0ZMQUdTPSItZ3N0YWJzIgorLUFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1sKKy0gIHJldHVybiAwOworLV1dKV0sIFsKKy1hY19oYXZlX2dzdGFicz15ZXMKKy1BQ19NU0dfUkVTVUxUKFt5ZXNdKQorLV0sIFsKKyBhY19oYXZlX2dzdGFicz1ubworLUFDX01TR19SRVNVTFQoW25vXSkKKy1dKQorLUNGTEFHUz0kc2FmZV9DRkxBR1MKKyBBTV9DT05ESVRJT05BTChbSEFWRV9HU1RBQlNdLCBbdGVzdCB4JGFjX2hhdmVfZ3N0YWJzID0geHllc10pCisgCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9nbGliYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2dsaWJjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MzQ5OWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9nbGliYy5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitCYWNrcG9ydCBvZiBnbGliYyAyLjE5IGFuZCAyLjIwIGFuZCAyLjIxIHN1cHBvcnQuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK0luZGV4OiB2YWxncmluZC0zLjEwLjEvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdmFsZ3JpbmQtMy4xMC4xLm9yaWcvY29uZmlndXJlLmFjCisrKysgdmFsZ3JpbmQtMy4xMC4xL2NvbmZpZ3VyZS5hYworQEAgLTEwMTgsNiArMTAxOCwzNCBAQCBjYXNlICIke0dMSUJDX1ZFUlNJT059IiBpbgorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworKyAgICAgMi4xOSkKKysJQUNfTVNHX1JFU1VMVCgyLjE5IGZhbWlseSkKKysJQUNfREVGSU5FKFtHTElCQ18yXzE5XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjE5LnhdKQorKwlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCTs7CisrICAgICAyLjIwKQorKwlBQ19NU0dfUkVTVUxUKDIuMjAgZmFtaWx5KQorKwlBQ19ERUZJTkUoW0dMSUJDXzJfMjBdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMjAueF0pCisrCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJOzsKKysgICAgIDIuMjEpCisrCUFDX01TR19SRVNVTFQoMi4yMSBmYW1pbHkpCisrCUFDX0RFRklORShbR0xJQkNfMl8yMV0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4yMS54XSkKKysJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwk7OworKyAgICAgMi4yMikKKysJQUNfTVNHX1JFU1VMVCgyLjIyIGZhbWlseSkKKysJQUNfREVGSU5FKFtHTElCQ18yXzIyXSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjIyLnhdKQorKwlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCTs7CisgICAgICBkYXJ3aW4pCisgCUFDX01TR19SRVNVTFQoRGFyd2luKQorIAlBQ19ERUZJTkUoW0RBUldJTl9MSUJDXSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBEYXJ3aW5dKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvcGFzcy1tYWx0aXZlYy1vbmx5LWlmLWl0LXN1cHBvcnRlZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3Bhc3MtbWFsdGl2ZWMtb25seS1pZi1pdC1zdXBwb3J0ZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgxNjdjYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3Bhc3MtbWFsdGl2ZWMtb25seS1pZi1pdC1zdXBwb3J0ZWQucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCityMTQ1NjYgfCBmbG9yaWFuIHwgMjAxNC0wOS0yNCAxNzowMjo1NCAtMDUwMCAoV2VkLCAyNCBTZXAgMjAxNCkgfCA0IGxpbmVzCisKK1RoZSB0ZXN0YnVja2V0cyBub25lL3Rlc3RzL3BwY3szMiw2NH0gZGlkIG5vdCBidWlsZCBpbiBjYXNlIHRoZQordG9vbGNoYWluIGRpZCBub3Qgc3VwcG9ydCAtbWFsdGl2ZWMgLW1hYmk9YWx0aXZlYy4KK1RoaXMgc2hvdWxkIHdvcmsgbm93LiBGaXhlcyBCWiAjMzM4NzMxCisKK0luZGV4OiBub25lL3Rlc3RzL3BwYzMyL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9ub25lL3Rlc3RzL3BwYzMyL01ha2VmaWxlLmFtCShyZXZpc2lvbiAxNDU2NSkKKysrKyBiL25vbmUvdGVzdHMvcHBjMzIvTWFrZWZpbGUuYW0JKHJldmlzaW9uIDE0NTY2KQorQEAgLTcyLDggKzcyLDEyIEBACisgYWxsZXhlY19DRkxBR1MJCT0gJChBTV9DRkxBR1MpIEBGTEFHX1dfTk9fTk9OTlVMTEAKKyAKKyBpZiBIQVNfQUxUSVZFQworK0JVSUxEX0ZMQUdfQUxUSVZFQyA9IC1tYWx0aXZlYworK0JVSUxEX0ZMQUdfQUJJX0FMVElWRUMgPSAtbWFiaT1hbHRpdmVjCisgQUxUSVZFQ19GTEFHID0gLURIQVNfQUxUSVZFQworIGVsc2UKKytCVUlMRF9GTEFHX0FMVElWRUMgPQorK0JVSUxEX0ZMQUdfQUJJX0FMVElWRUMgPQorIEFMVElWRUNfRkxBRyA9CisgZW5kaWYKKyAKK0BAIC0xMDEsMTEgKzEwNSwxMiBAQAorIElTQV8yXzA3X0ZMQUcgPQorIGVuZGlmCisgCistam1faW5zbnNfQ0ZMQUdTID0gJChBTV9DRkxBR1MpIC1XaW5saW5lIC1XYWxsIC1PIC1nIC1tcmVnbmFtZXMgLW1hbHRpdmVjIFwKKy0JCQlARkxBR19NMzJAICQoQUxUSVZFQ19GTEFHKQorK2ptX2luc25zX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAtV2lubGluZSAtV2FsbCAtTyAtZyAtbXJlZ25hbWVzIFwKKysJCQlARkxBR19NMzJAICQoQUxUSVZFQ19GTEFHKSAkKEJVSUxEX0ZMQUdfQUxUSVZFQykKKyAKKy10ZXN0Vk1YX0NGTEFHUyAgPSAkKEFNX0NGTEFHUykgLU8gLWcgLVdhbGwgLW1hbHRpdmVjIC1tYWJpPWFsdGl2ZWMgLURBTFRJVkVDIFwKKy0JCQktREdDQ19DT01QSUxFUiBARkxBR19NMzJACisrdGVzdFZNWF9DRkxBR1MgID0gJChBTV9DRkxBR1MpIC1PIC1nIC1XYWxsIC1EQUxUSVZFQyBcCisrCQkJLURHQ0NfQ09NUElMRVIgQEZMQUdfTTMyQCAgJChCVUlMRF9GTEFHX0FMVElWRUMpIFwKKysJCQkkKEJVSUxEX0ZMQUdfQUJJX0FMVElWRUMpCisgCisgdGVzdF9pc2FfMl8wNl9wYXJ0MV9DRkxBR1MgPSAkKEFNX0NGTEFHUykgLVdpbmxpbmUgLVdhbGwgLU8gLWcgLW1yZWduYW1lcyAkKFZTWF9GTEFHKSBcCisgCQkJQEZMQUdfTTMyQCAkKEFMVElWRUNfRkxBRykgJChCVUlMRF9GTEFHX1ZTWCkKK0luZGV4OiBub25lL3Rlc3RzL3BwYzY0L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9ub25lL3Rlc3RzL3BwYzY0L01ha2VmaWxlLmFtCShyZXZpc2lvbiAxNDU2NSkKKysrKyBiL25vbmUvdGVzdHMvcHBjNjQvTWFrZWZpbGUuYW0JKHJldmlzaW9uIDE0NTY2KQorQEAgLTUwLDggKzUwLDEwIEBACisgYWxsZXhlY19DRkxBR1MJCT0gJChBTV9DRkxBR1MpIEBGTEFHX1dfTk9fTk9OTlVMTEAKKyAKKyBpZiBIQVNfQUxUSVZFQworK0JVSUxEX0ZMQUdfQUxUSVZFQyA9IC1tYWx0aXZlYworIEFMVElWRUNfRkxBRyA9IC1ESEFTX0FMVElWRUMKKyBlbHNlCisrQlVJTERfRkxBR19BTFRJVkVDID0KKyBBTFRJVkVDX0ZMQUcgPQorIGVuZGlmCisgCitAQCAtODgsOCArOTAsOCBAQAorIHRlc3RfaXNhXzJfMDZfcGFydDNfQ0ZMQUdTID0gJChBTV9DRkxBR1MpIC1XaW5saW5lIC1XYWxsIC1PIC1nIC1tcmVnbmFtZXMgJChWU1hfRkxBRykgXAorIAkJCUBGTEFHX002NEAgJChBTFRJVkVDX0ZMQUcpICQoQlVJTERfRkxBR19WU1gpCisgCistam1faW5zbnNfQ0ZMQUdTID0gJChBTV9DRkxBR1MpIC1XaW5saW5lIC1XYWxsIC1PIC1nIC1tcmVnbmFtZXMgLW1hbHRpdmVjIFwKKy0JCQlARkxBR19NNjRAICQoQUxUSVZFQ19GTEFHKQorK2ptX2luc25zX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAtV2lubGluZSAtV2FsbCAtTyAtZyAtbXJlZ25hbWVzIFwKKysJCQlARkxBR19NNjRAICQoQUxUSVZFQ19GTEFHKSAkKEJVSUxEX0ZMQUdfQUxUSVZFQykKKyAKKyB0ZXN0X2RmcDFfQ0ZMQUdTID0gJChBTV9DRkxBR1MpIC1XaW5saW5lIC1XYWxsIC1PIC1nIC1tcmVnbmFtZXMgJChERlBfRkxBRykgXAorIAkJCUBGTEFHX002NEAgJChCVUlMRF9GTEFHU19ERlApCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9yZW1vdmUtYXJtLXZhcmlhbnQtc3BlY2lmaWMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9yZW1vdmUtYXJtLXZhcmlhbnQtc3BlY2lmaWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMxOWFiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3JlbW92ZS1hcm0tdmFyaWFudC1zcGVjaWZpYy5wYXRjaApAQCAtMCwwICsxLDY2IEBACitSZW1vdmUgYXJtIHRlc3RzIHRoYXQgZG9uJ3QgY29tcGlsZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQ29ycmVjdHMgdGhlIG9yaWdpbmFsIGNvbW1pdCBmb3IgdGhlIHBhdGNoIHRoYXQgcmVtb3ZlZCBBUk0gcHRlc3QgQ0ZMQUdTCitzZXR0aW5ncy4gU2luY2UgdGhlIGZsYWdzIGNvdWxkIGJlIHNldCBieSBhIHVzZXIsIHRoZSBmbGFncyBzaG91bGQKK2JlIGtlcHQgaW4gcGxhY2UgZHVyaW5nIGNvbXBpbGF0aW9uLiAgQnkga2VlcGluZyB0aGUgb3JpZ2luYWwgdXAtc3RyZWFtCitDRkxBR1MgZm9yIHRoZSB0ZXN0cywgdGhlbiBhZGRpdGlvbmFsIHRlc3RzIHN1Y2Nlc3NmdWxseSBjb21waWxlCitmb3IgYWxsIHRlc3RlZCBBUk0gdHVuaW5ncy4KKworSG93ZXZlciwgdGhlcmUgd2VyZSBzdGlsbCB0d28gdGVzdHMgbGlzdGVkIGJlbG93IHRoYXQgZGlkIG5vdCBjb21waWxlCitmb3IgYW55IGJlYWdsZWJvbmUgdHVuaW5nIHRoYXQgaXMgdmFsaWQgZm9yIHZhbGdyaW5kLiBXaXRoIHRoZSB1cGRhdGVkCitwYXRjaCwgdGhlIHNldCBvZiBleGNsdWRlZCBBUk0gcHRlc3RzIGFuZCB0aGVpciByZXNwZWN0aXZlIGJ1aWxkCitmYWlsdXJlcyBhcmU6CisgIGludGRpdiAtIGZhaWxzIGZvciBhbGwgYmVhZ2xlYm9uZSB0dW5pbmdzIHdpdGggMiBlcnJvcnM6CisgIHtzdGFuZGFyZCBpbnB1dH06KDQwIG9yIDQxKTogRXJyb3I6IHNlbGVjdGVkIHByb2Nlc3NvciBkb2VzIG5vdAorICAgICAgIHN1cHBvcnQgVGh1bWIgbW9kZSBgdWRpdiByMyxyOSxyMTAnCisgIHtzdGFuZGFyZCBpbnB1dH06KDcyIG9yIDczKTogRXJyb3I6IHNlbGVjdGVkIHByb2Nlc3NvciBkb2VzIG5vdAorICAgICAgIHN1cHBvcnQgVGh1bWIgbW9kZSBgc2RpdiByMyxyOSxyMTAnCisKKyAgdmN2dF9maXhlZF9mbG9hdF9WRlAgLSBmYWlscyBmb3IgYWxsIGJlYWdsZWJvbmUgdHVuaW5ncyBpbiBvbmUgb2YKKyAgdHdvIHdheXM6CisgICAgd2l0aCBuZW9uIHR1bmluZyAoLW1mcHU9bmVvbikgZmFpbHMgd2l0aCBJbnRlcm5hbCBDb21waWxlciBFcnJvcgorICAgIHdpdGhvdXQgbmVvbiB0dW5pbmcgZmFpbHMgd2l0aCAzIGVycm9yczoKKyAgICB7c3RhbmRhcmQgaW5wdXR9OjMzOiBFcnJvcjogc2VsZWN0ZWQgRlBVIGRvZXMgbm90IHN1cHBvcnQKKyAgICAgIGluc3RydWN0aW9uIC0tIGB2Y3Z0LmYzMi5zMzIgczE1LHMxNSwjMScKKyAgICB7c3RhbmRhcmQgaW5wdXR9OjU4OiBFcnJvcjogc2VsZWN0ZWQgRlBVIGRvZXMgbm90IHN1cHBvcnQKKyAgICAgIGluc3RydWN0aW9uIC0tIGB2Y3Z0LmYzMi5zMzIgczE1LHMxNSwjMzInCisgICAge3N0YW5kYXJkIGlucHV0fToxMzY6IEVycm9yOiBzZWxlY3RlZCBGUFUgZG9lcyBub3Qgc3VwcG9ydAorICAgICAgaW5zdHJ1Y3Rpb24gLS0gYHZjdnQuZjMyLnUzMiBzMTUsczE1LCMxJworCitBZnRlciBhcHBseWluZyB0aGlzIGNvbW1pdCwgdGhlIHZhbGdyaW5kIEFSTSBwdGVzdHMgY29tcGlsZSB3aXRob3V0CitlcnJvcnMgZm9yIHR1bmluZ3M6CisgIGFybXY3W3RdW2hmXVtiXVstbmVvbl0gY29ydGV4YThbdF1baGZdWy1uZW9uXQord2hlcmUgdGhlIHR1bmluZyBbb3B0aW9uXSB3YXMgc3VjY2Vzc2Z1bGx5IGNvbXBpbGVkLCBib3RoIHdpdGgKK2FuZCB3aXRob3V0IHRoZSAnb3B0aW9uJywgYW5kIGluIGNvbWJpbmF0aW9uIHdpdGggYWxsIG90aGVyIG9wdGlvbnMuCisKK1NpZ25lZC1vZmYtYnk6IERhdmUgTGVybmVyIDxkYXZlLmxlcm5lckB3aW5kcml2ZXIuY29tPgorCitJbmRleDogdmFsZ3JpbmQtMy4xMC4xL25vbmUvdGVzdHMvYXJtL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdmFsZ3JpbmQtMy4xMC4xLm9yaWcvbm9uZS90ZXN0cy9hcm0vTWFrZWZpbGUuYW0JMjAxNS0wNS0xOSAxNToxMTo1OS4yMjQ4NDI5MjcgLTA1MDAKKysrKyB2YWxncmluZC0zLjEwLjEvbm9uZS90ZXN0cy9hcm0vTWFrZWZpbGUuYW0JMjAxNS0wNS0xOSAxNToxNDoyMC44MDg4NDcwMjggLTA1MDAKK0BAIC0xNyw5ICsxNywxMyBAQAorIAl2ZnAuc3Rkb3V0LmV4cCB2ZnAuc3RkZXJyLmV4cCB2ZnAudmd0ZXN0IFwKKyAJdmZwdjRfZm1hLnN0ZG91dC5leHAgdmZwdjRfZm1hLnN0ZGVyci5leHAgdmZwdjRfZm1hLnZndGVzdAorIAorKyMgUmVtb3ZlIHRoZSBmb2xsb3dpbmcgdGVzdHMgd2hpY2ggY2F1c2UgY29tcGlsZXIgZXJyb3JzIGZvciBhbGwgdHVuaW5ncworKyMgIGF2YWlsYWJsZSBmb3IgYmVhZ2xlIGJvbmUgKHNlZSByZW1vdmUtYXJtLXZhcmlhbnQtc3BlY2lmaWMucGF0Y2gpOgorKyMJaW50ZGl2CisrIwl2Y3Z0X2ZpeGVkX2Zsb2F0X1ZGUAorKworIGNoZWNrX1BST0dSQU1TID0gXAorIAlhbGxleGVjIFwKKy0JaW50ZGl2IFwKKyAJbGRydCBcCisgCWxkcnRfYXJtIFwKKyAJbmVvbjEyOCBcCitAQCAtMjcsNyArMzEsNiBAQAorIAl2NmludEFSTSBcCisgCXY2aW50VGh1bWIgXAorIAl2Nm1lZGlhIFwKKy0JdmN2dF9maXhlZF9mbG9hdF9WRlAgXAorIAl2ZnAgXAorIAl2ZnB2NF9mbWEKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3JlbW92ZS1wcGMtdGVzdHMtZmFpbGluZy1idWlsZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3JlbW92ZS1wcGMtdGVzdHMtZmFpbGluZy1idWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzY0MGZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvcmVtb3ZlLXBwYy10ZXN0cy1mYWlsaW5nLWJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsNzUgQEAKK1JlbW92ZSB0ZXN0IGFwcHMgbm90IGJ1aWxkaW5nIHdpdGggcHBjIGFuZCBQVEVTVAorCitGb3IgbXBjODMxNi1yZGIgaW4gbm9uZS90ZXN0cy9wcGMzMiwgdGhlIG9lIGNvbXBpbGVyIG9wdGlvbnMgYXJlCitpbmNvbnNpc3RlbnQgd2l0aCB0aGUgaW1wb3NlZCB0ZXN0IGNvbXBpbGVyIG9wdGlvbnMgZ2VuZXJhdGluZyBlcnJvcnMKK2FzIGZvbGxvd3M6Cit0ZXN0X2lzYV8yXzA3X3BhcnQxCit0ZXN0X2lzYV8yXzA3X3BhcnQyCit0ZXN0X3RtCit0ZXN0X3RvdWNoX3RtCisgICAgOiB1bnJlY29nbml6ZWQgY29tbWFuZCBsaW5lIG9wdGlvbiAnLW1odG0nCisKK2ptLWluc25zCit0ZXN0Vk1YCisgICAgOiBBbHRpVmVjIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyB0YXJnZXQKKworRm9yIHRoZSBmb2xsb3dpbmcgdGVzdHMsIHRoZWlyIGlubGluZSBhc3NlbWJsZXIgaXMgaW5jb25zaXN0ZW50IHdpdGgKK3RoZSBwcGNlMzAwYzMgdmFyaWFudDoKK3JvdW5kLmM6MzkzCitwb3dlcjUrX3JvdW5kLmM6OTgKKyAgICA6IGltcG9zc2libGUgY29uc3RyYWludCBpbiAnYXNtJworCitGb3IgdGhlIGZvbGxvd2luZyB0ZXN0cywgd2l0aCBib3RoIG1wYzgzMTYtcmRiIGFuZCB3aXRoIHFlbXVwcGMgYnNwLAordGhlIGlubGluZSBhc3NlbWJlciBpcyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgb2UgY29tcGlsZXIgbWFjaGluZQordHVuaW5nOgorSW4gbWVtY2hlY2svdGVzdHMvcHBjMzIKKyBwb3dlcl9JU0EyXzA1LmM6NTYKK0luIG5vbmUvdGVzdHMvcHBjMzIKKyB0ZXN0X2RmcDEuYzo4NQorIHRlc3RfZGZwMi5jOjE2MAorIHRlc3RfZGZwMy5jOjE1NworIHRlc3RfZGZwNC5jOjczCisgdGVzdF9kZnA1LmM6NzMKKyAgICA6IGltcG9zc2libGUgY29uc3RyYWludCBpbiAnYXNtJworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRGF2ZSBMZXJuZXIgPGRhdmUubGVybmVyQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiB2YWxncmluZC0zLjEwLjAvbWVtY2hlY2svdGVzdHMvcHBjMzIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB2YWxncmluZC0zLjEwLjAub3JpZy9tZW1jaGVjay90ZXN0cy9wcGMzMi9NYWtlZmlsZS5hbQorKysrIHZhbGdyaW5kLTMuMTAuMC9tZW1jaGVjay90ZXN0cy9wcGMzMi9NYWtlZmlsZS5hbQorQEAgLTcsOCArNyw3IEBAIEVYVFJBX0RJU1QgPSAkKG5vaW5zdF9TQ1JJUFRTKSBcCisgCXBvd2VyX0lTQTJfMDUuc3RkZXJyLmV4cCBwb3dlcl9JU0EyXzA1LnN0ZG91dC5leHAgcG93ZXJfSVNBMl8wNS52Z3Rlc3QgXAorIAlwb3dlcl9JU0EyXzA1LnN0ZG91dC5leHBfV2l0aG91dF9GUFBPCisgCistY2hlY2tfUFJPR1JBTVMgPSBcCistCXBvd2VyX0lTQTJfMDUKKytjaGVja19QUk9HUkFNUyA9IAorIAorIHBvd2VyX0lTQTJfMDVfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoV0VSUk9SKSAtV2lubGluZSAtV2FsbCAtV3NoYWRvdyAtZyBcCisgCQktSSQodG9wX3NyY2RpcikvaW5jbHVkZSBARkxBR19NMzJACitJbmRleDogdmFsZ3JpbmQtMy4xMC4wL25vbmUvdGVzdHMvcHBjMzIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB2YWxncmluZC0zLjEwLjAub3JpZy9ub25lL3Rlc3RzL3BwYzMyL01ha2VmaWxlLmFtCisrKysgdmFsZ3JpbmQtMy4xMC4wL25vbmUvdGVzdHMvcHBjMzIvTWFrZWZpbGUuYW0KK0BAIC01MiwxNiArNTIsOCBAQCBjaGVja19QUk9HUkFNUyA9IFwKKyAJYWxsZXhlYyBcCisgCWJ1ZzEyOTM5MC1wcGMzMiBcCisgCWJ1ZzEzOTA1MC1wcGMzMiBcCistCWxkc3RyZXYgbHN3IGptLWluc25zIG1mdG9jcmYgbWNyZnMgcm91bmQgdGVzdF9meCB0ZXN0X2d4IFwKKy0JdGVzdFZNWCB0d2kgdHcgeGxjX2RibF91MzIgcG93ZXI1K19yb3VuZCBwb3dlcjZfYmNtcCBcCistCXRlc3RfaXNhXzJfMDZfcGFydDEgXAorLQl0ZXN0X2lzYV8yXzA2X3BhcnQyIFwKKy0JdGVzdF9pc2FfMl8wNl9wYXJ0MyBcCistCXRlc3RfZGZwMSB0ZXN0X2RmcDIgdGVzdF9kZnAzIHRlc3RfZGZwNCB0ZXN0X2RmcDUgXAorLQl0ZXN0X2lzYV8yXzA3X3BhcnQxIFwKKy0JdGVzdF9pc2FfMl8wN19wYXJ0MiBcCistCXRlc3RfdG0gXAorLQl0ZXN0X3RvdWNoX3RtIFwKKysJbGRzdHJldiBsc3cgbWZ0b2NyZiBtY3JmcyB0ZXN0X2Z4IHRlc3RfZ3ggXAorKwl0d2kgdHcgeGxjX2RibF91MzIgcG93ZXI2X2JjbXAgXAorIAlsZHN0X211bHRpcGxlIFwKKyAJZGF0YS1jYWNoZS1pbnN0cnVjdGlvbnMKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mOWE3MmVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMTIgQEAKKyMhL2Jpbi9zaAorCisjIHJ1bi1wdGVzdCAtICdwdGVzdCcgdGVzdCBpbmZyYXN0cnVjdHVyZSBzaGVsbCBzY3JpcHQgdGhhdAorIyAgIHdyYXBzIHRoZSB2YWxncmluZCByZWdyZXNzaW9uIHNjcmlwdCB2Z19yZWd0ZXN0LiAKKyMgICBNdXN0IGJlIHJ1biBpbiB0aGUgL3Vzci9saWIvdmFsZ3JpbmQvcHRlc3QgZGlyZWN0b3J5LiAKKyMKKyMgRGF2ZSBMZXJuZXIgPGRhdmUubGVybmVyQHdpbmRyaXZlci5jb20+CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK1ZBTEdSSU5ETElCPUBsaWJkaXJAL3ZhbGdyaW5kCit0ZXN0cy92Z19yZWd0ZXN0IC0tYWxsIFwKKyAgICAtLXZhbGdyaW5kPS91c3IvYmluL3ZhbGdyaW5kIC0tdmFsZ3JpbmQtbGliPSRWQUxHUklORExJQiBcCisJLS15b2N0by1wdGVzdApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvc2VwYnVpbGRmaXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9zZXBidWlsZGZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGIwZWY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvc2VwYnVpbGRmaXgucGF0Y2gKQEAgLTAsMCArMSwyMzUgQEAKK0ZpeCBvdXQgb2YgdHJlZSBidWlsZHMuIFRoZSBwYXRocyB0byB0aGVzZSBmaWxlcyBuZWVkIHRvIGJlIGZ1bGx5IHNwZWNpZmllZCBpbgordGhlIG91dCBvZiB0cmVlIGJ1aWxkIGNhc2UuIGdsaWJjLTIuWC5zdXBwIGlzIGEgZ2VuZXJhdGVkIGZpbGUgc28gdGhlIGZ1bGwgcGF0aAoraXMgZGVsaWJlcmF0ZWx5IG5vdCBzcGVjaWZpZWQgaW4gdGhhdCBjYXNlLgorCitSUCAyMDEzLzAzLzIzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogdmFsZ3JpbmQtMy45LjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdmFsZ3JpbmQtMy45LjAub3JpZy9jb25maWd1cmUuYWMKKysrKyB2YWxncmluZC0zLjkuMC9jb25maWd1cmUuYWMKK0BAIC0zMjUsMjYgKzMyNSwyNiBAQCBjYXNlICIke2hvc3Rfb3N9IiBpbgorIAkgICAgIDkuKikKKyAJCSAgQUNfTVNHX1JFU1VMVChbRGFyd2luIDkueCAoJHtrZXJuZWx9KSAvIE1hYyBPUyBYIDEwLjUgTGVvcGFyZF0pCisgCQkgIEFDX0RFRklORShbREFSV0lOX1ZFUlNdLCBEQVJXSU5fMTBfNSwgW0RhcndpbiAvIE1hYyBPUyBYIHZlcnNpb25dKQorLQkJICBERUZBVUxUX1NVUFA9ImRhcndpbjkuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCQkgIERFRkFVTFRfU1VQUD0iZGFyd2luOS1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCQkgIERFRkFVTFRfU1VQUD0iJHNyY2Rpci9kYXJ3aW45LnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwkJICBERUZBVUxUX1NVUFA9IiRzcmNkaXIvZGFyd2luOS1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCQkgIDs7CisgCSAgICAgMTAuKikKKyAJCSAgQUNfTVNHX1JFU1VMVChbRGFyd2luIDEwLnggKCR7a2VybmVsfSkgLyBNYWMgT1MgWCAxMC42IFNub3cgTGVvcGFyZF0pCisgCQkgIEFDX0RFRklORShbREFSV0lOX1ZFUlNdLCBEQVJXSU5fMTBfNiwgW0RhcndpbiAvIE1hYyBPUyBYIHZlcnNpb25dKQorLQkJICBERUZBVUxUX1NVUFA9ImRhcndpbjEwLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQkJICBERUZBVUxUX1NVUFA9ImRhcndpbjEwLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJCSAgREVGQVVMVF9TVVBQPSIkc3JjZGlyL2RhcndpbjEwLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwkJICBERUZBVUxUX1NVUFA9IiRzcmNkaXIvZGFyd2luMTAtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAkJICA7OworIAkgICAgIDExLiopCisgCQkgIEFDX01TR19SRVNVTFQoW0RhcndpbiAxMS54ICgke2tlcm5lbH0pIC8gTWFjIE9TIFggMTAuNyBMaW9uXSkKKyAJCSAgQUNfREVGSU5FKFtEQVJXSU5fVkVSU10sIERBUldJTl8xMF83LCBbRGFyd2luIC8gTWFjIE9TIFggdmVyc2lvbl0pCistCQkgIERFRkFVTFRfU1VQUD0iZGFyd2luMTEuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCQkgIERFRkFVTFRfU1VQUD0iZGFyd2luMTAtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwkJICBERUZBVUxUX1NVUFA9IiRzcmNkaXIvZGFyd2luMTEuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCQkgIERFRkFVTFRfU1VQUD0iJHNyY2Rpci9kYXJ3aW4xMC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCQkgIDs7CisgCSAgICAgMTIuKikKKyAJCSAgQUNfTVNHX1JFU1VMVChbRGFyd2luIDEyLnggKCR7a2VybmVsfSkgLyBNYWMgT1MgWCAxMC44IE1vdW50YWluIExpb25dKQorIAkJICBBQ19ERUZJTkUoW0RBUldJTl9WRVJTXSwgREFSV0lOXzEwXzgsIFtEYXJ3aW4gLyBNYWMgT1MgWCB2ZXJzaW9uXSkKKy0JCSAgREVGQVVMVF9TVVBQPSJkYXJ3aW4xMi5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JCSAgREVGQVVMVF9TVVBQPSJkYXJ3aW4xMC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCQkgIERFRkFVTFRfU1VQUD0iJHNyY2Rpci9kYXJ3aW4xMi5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJCSAgREVGQVVMVF9TVVBQPSIkc3JjZGlyL2RhcndpbjEwLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJCSAgOzsKKyAgICAgICAgICAgICAgKikgCisgCQkgIEFDX01TR19SRVNVTFQoW3Vuc3VwcG9ydGVkICgke2tlcm5lbH0pXSkKK0BAIC03OTksMTI0ICs3OTksMTI0IEBAIGNhc2UgIiR7R0xJQkNfVkVSU0lPTn0iIGluCisgICAgICAyLjIpCisgCUFDX01TR19SRVNVTFQoMi4yIGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzJdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMi54XSkKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjIuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4yLUxpbnV4VGhyZWFkcy1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4yLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4yLUxpbnV4VGhyZWFkcy1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgCisgICAgICAyLjMpCisgCUFDX01TR19SRVNVTFQoMi4zIGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzNdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMy54XSkKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjMuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjMuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworIAorICAgICAgMi40KQorIAlBQ19NU0dfUkVTVUxUKDIuNCBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl80XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjQueF0pCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi40LnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi40LnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAKKyAgICAgIDIuNSkKKyAJQUNfTVNHX1JFU1VMVCgyLjUgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfNV0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi41LnhdKQorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuNS5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuNS5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgICAgICAyLjYpCisgCUFDX01TR19SRVNVTFQoMi42IGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzZdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuNi54XSkKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjYuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjYuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgMi43KQorIAlBQ19NU0dfUkVTVUxUKDIuNyBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl83XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjcueF0pCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuOCkKKyAJQUNfTVNHX1JFU1VMVCgyLjggZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfOF0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi44LnhdKQorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgICAgICAyLjkpCisgCUFDX01TR19SRVNVTFQoMi45IGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzldLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuOS54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgMi4xMCkKKyAJQUNfTVNHX1JFU1VMVCgyLjEwIGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzEwXSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjEwLnhdKQorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgICAgICAyLjExKQorIAlBQ19NU0dfUkVTVUxUKDIuMTEgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfMTFdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMTEueF0pCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAgICAgICAgIDs7CisgICAgICAyLjEyKQorIAlBQ19NU0dfUkVTVUxUKDIuMTIgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfMTJdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMTIueF0pCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuMTMpCisgCUFDX01TR19SRVNVTFQoMi4xMyBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl8xM10sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4xMy54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgMi4xNCkKKyAJQUNfTVNHX1JFU1VMVCgyLjE0IGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzE0XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjE0LnhdKQorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgICAgICAyLjE1KQorIAlBQ19NU0dfUkVTVUxUKDIuMTUgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfMTVdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMTUueF0pCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuMTYpCisgCUFDX01TR19SRVNVTFQoMi4xNiBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl8xNl0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4xNi54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgMi4xNykKKyAJQUNfTVNHX1JFU1VMVCgyLjE3IGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzE3XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjE3LnhdKQorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgICAgICAyLjE4KQorIAlBQ19NU0dfUkVTVUxUKDIuMTggZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfMThdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMTgueF0pCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIGRhcndpbikKKyAJQUNfTVNHX1JFU1VMVChEYXJ3aW4pCitAQCAtOTI2LDcgKzkyNiw3IEBAIGNhc2UgIiR7R0xJQkNfVkVSU0lPTn0iIGluCisgICAgICBiaW9uaWMpCisgCUFDX01TR19SRVNVTFQoQmlvbmljKQorIAlBQ19ERUZJTkUoW0JJT05JQ19MSUJDXSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBCaW9uaWNdKQorLQlERUZBVUxUX1NVUFA9ImJpb25pYy5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2Jpb25pYy5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAKKyAgICAgICopCitAQCAtOTQzLDExICs5NDMsMTEgQEAgQUNfU1VCU1QoR0xJQkNfVkVSU0lPTikKKyAjIGF0dGVtcHQgdG8gZGV0ZWN0IHdoZXRoZXIgc3VjaCBsaWJyYXJpZXMgYXJlIGluc3RhbGxlZCBvbiB0aGUKKyAjIGJ1aWxkIG1hY2hpbmUgKG9yIGV2ZW4gaWYgYW55IFggZmFjaWxpdGllcyBhcmUgcHJlc2VudCk7IGp1c3QKKyAjIGFkZCB0aGUgc3VwcHJlc3Npb25zIGFudGlkaXNpcnJlZ2FyZGxlc3MuCistREVGQVVMVF9TVVBQPSJ4ZnJlZS00LnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLURFRkFVTFRfU1VQUD0ieGZyZWUtMy5zdXBwICR7REVGQVVMVF9TVVBQfSIKKytERUZBVUxUX1NVUFA9IiRzcmNkaXIveGZyZWUtNC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKytERUZBVUxUX1NVUFA9IiRzcmNkaXIveGZyZWUtMy5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAKKyAjIEFkZCBnbGliYyBhbmQgWDExIHN1cHByZXNzaW9ucyBmb3IgZXhwLXNnY2hlY2sKKy1ERUZBVUxUX1NVUFA9ImV4cC1zZ2NoZWNrLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorK0RFRkFVTFRfU1VQUD0iJHNyY2Rpci9leHAtc2djaGVjay5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAKKyAKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvdmFsZ3JpbmQtcmVtb3ZlLXJwYXRoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvdmFsZ3JpbmQtcmVtb3ZlLXJwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MmU5Y2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC92YWxncmluZC1yZW1vdmUtcnBhdGgucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIGNvbmZpZ10KK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IHZhbGdyaW5kLTMuMTAuMC9ub25lL3Rlc3RzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdmFsZ3JpbmQtMy4xMC4wLm9yaWcvbm9uZS90ZXN0cy9NYWtlZmlsZS5hbQorKysrIHZhbGdyaW5kLTMuMTAuMC9ub25lL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMjgwLDcgKzI4MCw2IEBAIHRocmVhZGVkX2ZvcmtfTERBREQJPSAtbHB0aHJlYWQKKyB0aHJlYWRlZGVycm5vX0xEQURECT0gLWxwdGhyZWFkCisgdGxzX1NPVVJDRVMJCT0gdGxzLmMgdGxzMi5jCisgdGxzX0RFUEVOREVOQ0lFUwk9IHRscy5zbyB0bHMyLnNvCistdGxzX0xERkxBR1MJCT0gLVdsLC1ycGF0aCwkKGFic190b3BfYnVpbGRkaXIpL25vbmUvdGVzdHMKKyB0bHNfTERBREQJCT0gdGxzLnNvIHRsczIuc28gLWxwdGhyZWFkCisgdGxzX3NvX1NPVVJDRVMJCT0gdGxzX3NvLmMKKyB0bHNfc29fREVQRU5ERU5DSUVTCT0gdGxzMi5zbworQEAgLTI4OCw3ICsyODcsNyBAQCBpZiBWR0NPTkZfT1NfSVNfREFSV0lOCisgIHRsc19zb19MREZMQUdTCQk9IC1keW5hbWljIC1keW5hbWljbGliIC1hbGxfbG9hZCAtZnBpYworICB0bHNfc29fTERBREQJCT0gYHB3ZGAvdGxzMi5zbworIGVsc2UKKy0gdGxzX3NvX0xERkxBR1MJCT0gLVdsLC1ycGF0aCwkKGFic190b3BfYnVpbGRkaXIpL25vbmUvdGVzdHMgLXNoYXJlZCAtZlBJQworKyB0bHNfc29fTERGTEFHUwkJPSAtc2hhcmVkIC1mUElDCisgIHRsc19zb19MREFERAkJPSB0bHMyLnNvCisgZW5kaWYKKyB0bHNfc29fQ0ZMQUdTCQk9ICQoQU1fQ0ZMQUdTKSAtZlBJQwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmRfMy4xMC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmRfMy4xMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YmE5NzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZF8zLjEwLjEuYmIKQEAgLTAsMCArMSwxMDUgQEAKK1NVTU1BUlkgPSAiVmFsZ3JpbmQgbWVtb3J5IGRlYnVnZ2VyIGFuZCBpbnN0cnVtZW50YXRpb24gZnJhbWV3b3JrIgorSE9NRVBBR0UgPSAiaHR0cDovL3ZhbGdyaW5kLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly92YWxncmluZC5vcmcvc3VwcG9ydC9idWdfcmVwb3J0cy5odG1sIgorTElDRU5TRSA9ICJHUEx2MiAmIEdQTHYyKyAmIEJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWM0NjA4MjE2N2EzMTRkNzg1ZDAxMmEyNDQ3NDhkODAzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvcHViX3Rvb2xfYmFzaWNzLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yOTttZDU9ZTcwNzE5MjlhNTBkNGIwZmMyN2EzMDE0YjMxNWIwZjcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS92YWxncmluZC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9NTY7bWQ1PTkyZGY4YTFiZGU1NmZlMmFmNzA5MzFmZjU1ZjY2MjJmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuRE9DUzttZDU9OGZkZWI1YWJkYjIzNWEwOGU3NjgzNWY4ZjMyNjAyMTUiCisKK1gxMURFUEVORFMgPSAidmlydHVhbC9saWJ4MTEiCitERVBFTkRTID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJyR7WDExREVQRU5EU30nLCAnJywgZCl9IFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdGVzdCcsICdib29zdCcsICcnLCBkKX0gXAorICAgICAgICAiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy52YWxncmluZC5vcmcvZG93bmxvYWRzL3ZhbGdyaW5kLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vZml4ZWQtcGVybC1wYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0FkZGVkLXN1cHBvcnQtZm9yLVBQQy1pbnN0cnVjdGlvbnMtbWZhdGJ1LW1mYXRibC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zZXBidWlsZGZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nbGliYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9mb3JjZS1ub3N0YWJzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZS1hcm0tdmFyaWFudC1zcGVjaWZpYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtcHBjLXRlc3RzLWZhaWxpbmctYnVpbGQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdmFsZ3JpbmQtcmVtb3ZlLXJwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2VuYWJsZS5idWlsZGluZy5vbi40Lngua2VybmVsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1wdGVzdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wYXNzLW1hbHRpdmVjLW9ubHktaWYtaXQtc3VwcG9ydGVkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXZhbGdyaW5kLUVuYWJsZS1ydF9zaWdwZW5kaW5nLXN5c2NhbGwtb24tcHBjNjQtbGludXgucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjYwZGRhZTk2MmJjNzllN2M5NWNmYzQ2NjcyNDU3MDdmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZhMjUzZGMyNmRkYjY2MWI2MjY5ZGY1ODE0NGVmZjYwN2VhM2Y3NmE5YmNmZTU3NGIwYzc3MjZlMWRmY2I5OTciCisKK0NPTVBBVElCTEVfSE9TVCA9ICcoaS44Nnx4ODZfNjR8bWlwc3xwb3dlcnBjfHBvd2VycGM2NCkuKi1saW51eCcKK0NPTVBBVElCTEVfSE9TVF9hcm12N2EgPSAnYXJtLiotbGludXgnCisKK1BSID0gInIxIgorCitpbmhlcml0IGF1dG90b29scyBwdGVzdAorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtdGxzIC0td2l0aG91dC1tcGljYyIKK0VYVFJBX09FQ09ORl9hcm12N2EgPSAiLS1lbmFibGUtdGxzIC1ob3N0PWFybXY3LW5vbmUtbGludXgtZ251ZWFiaSAtLXdpdGhvdXQtbXBpY2MiCitFWFRSQV9PRUNPTkYgKz0gIiR7QFsnLS1lbmFibGUtb25seTMyYml0JywnLS1lbmFibGUtb25seTY0Yml0J11bZC5nZXRWYXIoJ1NJVEVJTkZPX0JJVFMnLCBUcnVlKSAhPSAnMzInXX0iCitFWFRSQV9PRU1BS0UgPSAiLXciCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICBpbnN0YWxsIC1tIDY0NCAke0J9L2RlZmF1bHQuc3VwcCAke0R9LyR7bGliZGlyfS92YWxncmluZC8KK30KKworUkRFUEVORFNfJHtQTn0gKz0gInBlcmwiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9LyR7UE59LyovLmRlYnVnLyoiCisKKyMgdmFsZ3JpbmQgbmVlZHMgZGVidWcgaW5mb3JtYXRpb24gZm9yIGxkLnNvIGF0IHJ1bnRpbWUgaW4gb3JkZXIgdG8KKyMgcmVkaXJlY3QgZnVuY3Rpb25zIGxpa2Ugc3RybGVuLgorUlJFQ09NTUVORFNfJHtQTn0gKz0gIiR7VENMSUJDfS1kYmciCisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICIgc2VkIHBlcmwgZ2xpYmMtdXRpbHMgcGVybC1tb2R1bGUtZmlsZS1nbG9iIgorCitkb19jb21waWxlX3B0ZXN0KCkgeworICAgIG9lX3J1bm1ha2UgY2hlY2sgQ0ZMQUdTPSIke0NGTEFHU30gLU8wIiBDWFhGTEFHUz0iJHtDWFhGTEFHU30gLU8wIgorfQorCisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisgICAgY2htb2QgK3ggJHtCfS90ZXN0cy92Z19yZWd0ZXN0CisKKyAgICAjIFRoZSB0ZXN0IGFwcGxpY2F0aW9uIGJpbmFyaWVzIGFyZSBub3QgYXV0b21hdGljYWxseSBpbnN0YWxsZWQuCisgICAgIyBHcmFiIHRoZW0gZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5LgorICAgICMKKyAgICAjIFRoZSByZWdyZXNzaW9uIHRlc3RzIHJlcXVpcmUgc2NyaXB0cyBhbmQgZGF0YSBmaWxlcyB0aGF0IGFyZSBub3QKKyAgICAjIGNvcGllZCB0byB0aGUgYnVpbGQgZGlyZWN0b3J5LiAgVGhleSBtdXN0IGJlIGNvcGllZCBmcm9tIHRoZQorICAgICMgc291cmNlIGRpcmVjdG9yeS4gCisgICAgc2F2ZWRfZGlyPSRQV0QKKyAgICBmb3IgcGFyZW50X2RpciBpbiAke1N9ICR7Qn0gOyBkbworICAgICAgICBjZCAkcGFyZW50X2RpcgorCisgICAgICAgICMgZXhjbHVkZSBzaGVsbCBvciB0aGUgcGFja2FnZSB3b24ndCBpbnN0YWxsCisgICAgICAgIHJtIC1yZiBub25lL3Rlc3RzL3NoZWxsKiAyPi9kZXYvbnVsbAorCisgICAgICAgIHN1YmRpcnM9InRlc3RzIGNhY2hlZ3JpbmQvdGVzdHMgY2FsbGdyaW5kL3Rlc3RzIGRyZC90ZXN0cyBoZWxncmluZC90ZXN0cyBtYXNzaWYvdGVzdHMgbWVtY2hlY2svdGVzdHMgbm9uZS90ZXN0cyIKKworICAgICAgICAjIEdldCB0aGUgdmcgdGVzdCBzY3JpcHRzLCBmaWx0ZXJzLCBhbmQgZXhwZWN0ZWQgZmlsZXMKKyAgICAgICAgZm9yIGRpciBpbiAkc3ViZGlycyA7IGRvCisgICAgICAgICAgICBmaW5kICRkaXIgfCBjcGlvIC1wdmR1ICR7RH0ke1BURVNUX1BBVEh9CisgICAgICAgIGRvbmUKKyAgICAgICAgY2QgJHNhdmVkX2RpcgorICAgIGRvbmUKKworICAgICMgY2xlYW4gb3V0IGJ1aWxkIGFydGlmYWN0cyBiZWZvcmUgYnVpbGRpbmcgdGhlIHJwbQorICAgIGZpbmQgJHtEfSR7UFRFU1RfUEFUSH0gXAorICAgICAgICAgXCggLW5hbWUgIk1ha2VmaWxlKiIgXAorICAgICAgICAtbyAtbmFtZSAiKi5vIiBcCisgICAgICAgIC1vIC1uYW1lICIqLmMiIFwKKyAgICAgICAgLW8gLW5hbWUgIiouUyIgXAorICAgICAgICAtbyAtbmFtZSAiKi5oIiBcKSBcCisgICAgICAgIC1leGVjIHJtIHt9IFw7CisKKyAgICAjIG5lZWRlZCBieSBtYXNzaWYgdGVzdHMKKyAgICBjcCAke0J9L21hc3NpZi9tc19wcmludCAke0R9JHtQVEVTVF9QQVRIfS9tYXNzaWYvbXNfcHJpbnQKKworICAgICMgaGFuZGxlIG11bHRpbGliCisgICAgc2VkIC1pIHM6QGxpYmRpckA6JHtsaWJkaXJ9OmcgJHtEfSR7UFRFU1RfUEFUSH0vcnVuLXB0ZXN0Cit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3htbHRvL2ZpbGVzL2NhdGFsb2cueG1sIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveG1sdG8vZmlsZXMvY2F0YWxvZy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI4ODMzZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3htbHRvL2ZpbGVzL2NhdGFsb2cueG1sCkBAIC0wLDAgKzEsMTkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGNhdGFsb2cgUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIiAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+Cis8Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+Cis8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL2RvY2Jvb2sub3JnL3htbC8iIGNhdGFsb2c9Ii4vZG9jYm9vay14bWwueG1sIi8+Cis8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2siIGNhdGFsb2c9Ii4vZG9jYm9vay14bWwueG1sIi8+Cis8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCIgY2F0YWxvZz0iLi9kb2Nib29rLXhtbC54bWwiLz4KKzxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIFhNTCBFeGNoYW5nZSBUYWJsZSBNb2RlbCAxOTk5MDMxNSIgY2F0YWxvZz0iLi9kb2Nib29rLXhtbC54bWwiLz4KKzxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYW4gV2Fsc2gvL0RURCBDQUxTIFRhYmxlIE1vZGVsIFhNTCIgY2F0YWxvZz0iLi9kb2Nib29rLXhtbC54bWwiLz4KKzxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYW4gV2Fsc2gvL0VMRU1FTlRTIERvY0JrIFhNTCIgY2F0YWxvZz0iLi9kb2Nib29rLXhtbC54bWwiLz4KKzxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYW4gV2Fsc2gvL0RURCBEb2NCb29rIFhNTCIgY2F0YWxvZz0iLi9kb2Nib29rLXhtbC54bWwiLz4KKzxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayIgY2F0YWxvZz0iLi9kb2Nib29rLXhtbC54bWwiLz4KKzxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYW4gV2Fsc2gvL0VOVElUSUVTIERvY0JrIFhNTCIgY2F0YWxvZz0iLi9kb2Nib29rLXhtbC54bWwiLz4KKzxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYW4gV2Fsc2gvL0RURCBEb2NCayBYTUwiIGNhdGFsb2c9Ii4vZG9jYm9vay14bWwueG1sIi8+Cis8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFsIFdhbHNoLy9FeGNoYW5nZSBUYWJsZSBNb2RlbCAxOTk2MDQzMCIgY2F0YWxvZz0iLi9kb2Nib29rLXhtbC54bWwiLz4KKzxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLyIgY2F0YWxvZz0iLi9kb2Nib29rLXhtbC54bWwiLz4KKzxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgQ0FMUyBUYWJsZSBNb2RlbCIgY2F0YWxvZz0iLi9kb2Nib29rLXhtbC54bWwiLz4KKzxkZWxlZ2F0ZVVSSSB1cmlTdGFydFN0cmluZz0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLyIgY2F0YWxvZz0iLi9kb2Nib29rLXhzbC54bWwiLz4KKzxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvIiBjYXRhbG9nPSIuL2RvY2Jvb2steHNsLnhtbCIvPgorPC9jYXRhbG9nPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveG1sdG8veG1sdG8tMC4wLjI2L2NvbmZpZ3VyZS5pbi1kcm9wLXRoZS10ZXN0LW9mLXhtbGxpbnQtYW5kLXhzbHRwcm9jLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveG1sdG8veG1sdG8tMC4wLjI2L2NvbmZpZ3VyZS5pbi1kcm9wLXRoZS10ZXN0LW9mLXhtbGxpbnQtYW5kLXhzbHRwcm9jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNTQ3YTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy94bWx0by94bWx0by0wLjAuMjYvY29uZmlndXJlLmluLWRyb3AtdGhlLXRlc3Qtb2YteG1sbGludC1hbmQteHNsdHByb2MucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorY29uZmlndXJlLmluOiBkcm9wIHRoZSB0ZXN0IG9mIHhtbGxpbnQgYW5kIHhzbHRwcm9jCisKK1RoZSB0ZXN0IGlzIHVubmVjZXNzYXJ5LCB0aGUgeG1sbGludCBhbmQgeHNsdHByb2Mgd2VyZSBleHBsaWNpdGx5CithZGRlZCB0byBSREVQRU5EUy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuaW4gfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTQyLDEwICs0MiwxMCBAQCBBQ19BUkdfVkFSKFtMT0NBTEVdLCBbTmFtZSBhbmQgcGF0aCBvZiB0aGUgYGxvY2FsZScgcHJvZ3JhbS5dKQorIEFDX1BBVEhfUFJPRyhbTE9DQUxFXSwgW2xvY2FsZV0sIFtsb2NhbGVdKQorIAorIEFDX0FSR19WQVIoW1hNTExJTlRdLCBbTmFtZSBhbmQgcGF0aCBvZiB0aGUgYHhtbGxpbnQnIHByb2dyYW0uXSkKKy1BQ19QQVRIX1BST0coW1hNTExJTlRdLCBbeG1sbGludF0sIFt4bWxsaW50XSkKKytkbmwgQUNfUEFUSF9QUk9HKFtYTUxMSU5UXSwgW3htbGxpbnRdLCBbeG1sbGludF0pCisgCisgQUNfQVJHX1ZBUihbWFNMVFBST0NdLCBbTmFtZSBhbmQgcGF0aCBvZiB0aGUgYHhzbHRwcm9jJyBwcm9ncmFtLl0pCistQUNfUEFUSF9QUk9HKFtYU0xUUFJPQ10sIFt4c2x0cHJvY10sIFt4c2x0cHJvY10pCisrZG5sIEFDX1BBVEhfUFJPRyhbWFNMVFBST0NdLCBbeHNsdHByb2NdLCBbeHNsdHByb2NdKQorIAorIGRubAorIGRubCB0b29sY2hhaW5zCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveG1sdG8veG1sdG9fMC4wLjI2LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveG1sdG8veG1sdG9fMC4wLjI2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YTAxODMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy94bWx0by94bWx0b18wLjAuMjYuYmIKQEAgLTAsMCArMSwzOCBAQAorU1VNTUFSWSA9ICJBIHNoZWxsLXNjcmlwdCB0b29sIGZvciBjb252ZXJ0aW5nIFhNTCBmaWxlcyB0byB2YXJpb3VzIGZvcm1hdHMiCitIT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcveG1sdG8vIgorU0VDVElPTiA9ICJkb2NzL3htbHRvIgorTElDRU5TRSA9ICJHUEx2MiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL3JlbGVhc2VzL3gvbS94bWx0by94bWx0by0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLmluLWRyb3AtdGhlLXRlc3Qtb2YteG1sbGludC1hbmQteHNsdHByb2MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2F0YWxvZy54bWwgXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjBjY2E4YmU3ODdiYTAxZTAwYzYxOGNiMzkwYzk4OGI5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNmZDhkMmEyNjA3N2JlMWQ1NTY2ZGZlMjJkZDY2MDk5YWU0ZjQ2MDBkZWE5N2Q2ZTExM2EyY2M1Yjg3MDg5NzciCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKKyMgeG1sdG8gbmVlZHMgZ2V0b3B0L3htbGxpbnQveHNsdHByb2MvYmFzaCBhdCBydW50aW1lCitSREVQRU5EU18ke1BOfSA9ICJkb2Nib29rLXhtbC1kdGQ0IFwKKyAgICAgICAgICAgICAgICAgIGRvY2Jvb2steHNsLXN0eWxlc2hlZXRzIFwKKyAgICAgICAgICAgICAgICAgIHV0aWwtbGludXggXAorICAgICAgICAgICAgICAgICAgbGlieG1sMiBcCisgICAgICAgICAgICAgICAgICBiYXNoIFwKKyIKK1JERVBFTkRTXyR7UE59X2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIFwKKyAgICAgICAgICAgICAgICAgIGxpYnhzbHQtYmluIFwKKyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK0VYVFJBX09FQ09ORl9hcHBlbmQgPSAiIFhNTExJTlQ9eG1sbGludCBYU0xUUFJPQz14c2x0cHJvYyIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS94bWwvCisgICAgaW5zdGFsbCAtbSA3NTUgICR7V09SS0RJUn0vY2F0YWxvZy54bWwgJHtEfSR7c3lzY29uZmRpcn0veG1sL2NhdGFsb2cueG1sCisgICAgY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0veG1sdG8gWE1MX0NBVEFMT0dfRklMRVM9JHtzeXNjb25mZGlyfS94bWwvY2F0YWxvZy54bWwKK30KKworZG9fcG9wdWxhdGVfc3lzcm9vdFtyZGVwdGFza10gPSAiZG9fcG9wdWxhdGVfc3lzcm9vdCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3lhc20veWFzbV8xLjMuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3lhc20veWFzbV8xLjMuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODcwMmVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveWFzbS95YXNtXzEuMy4wLmJiCkBAIC0wLDAgKzEsMTQgQEAKK1NVTU1BUlkgPSAieDg2IChTU0UpIGFzc2VtYmxlciBzdXBwb3J0aW5nIE5BU00gYW5kIEdBUy1zeW50YXhlcyIKK0xJQ0VOU0UgPSAiQlNEIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy50b3J0YWxsLm5ldC9wcm9qZWN0cy95YXNtLyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTEyZDg5MDM1MDhmYjZiZmQ0OWQ4ZDgyYzYxNzBkZDkiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy50b3J0YWxsLm5ldC9wcm9qZWN0cy95YXNtL3JlbGVhc2VzLyR7QlB9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gImZjOWU1ODY3NTFmZjc4OWIzNGIxZjIxZDU3MmQ5NmFmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNkY2U2NjAxYjQ5NWY1YjNkNDViNTlmN2QyNDkyYTM0MGVlN2U4NGI1YmVjYTE3ZTQ4Zjg2MjUwMmJkNTYwM2YiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy96aXNvZnMtdG9vbHMvemlzb2ZzLXRvb2xzLW5hdGl2ZV8xLjAuOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ppc29mcy10b29scy96aXNvZnMtdG9vbHMtbmF0aXZlXzEuMC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMWMwNTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy96aXNvZnMtdG9vbHMvemlzb2ZzLXRvb2xzLW5hdGl2ZV8xLjAuOC5iYgpAQCAtMCwwICsxLDIwIEBACisjIHppc29mcy10b29scy1uYXRpdmUgT0UgYnVpbGQgZmlsZQorIyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitTVU1NQVJZID0gIlV0aWxpdGllcyBmb3IgY3JlYXRpbmcgY29tcHJlc3NlZCBDRC1ST00gZmlsZXN5c3RlbXMiCitIT01FUEFHRSA9ICJodHRwOi8vZnJlZWNvZGUuY29tL3Byb2plY3RzL3ppc29mcy10b29scyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworREVQRU5EUyA9ICJ6bGliLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vcGtncy5mZWRvcmFwcm9qZWN0Lm9yZy9yZXBvL3BrZ3Mvemlzb2ZzLXRvb2xzL3ppc29mcy10b29scy0ke1BWfS50YXIuYnoyLzJkMGVkOGM5YTFmNjBiNDVmOTQ5YjEzNmY5YmUxZjZjL3ppc29mcy10b29scy0ke1BWfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmQwZWQ4YzlhMWY2MGI0NWY5NDliMTM2ZjliZTFmNmMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWU0ZTUzZTQ5MTQ5MzRkNDE2NjAyNDhmYjU5ZDNjODc2MWYxZjFmZDE4MGQ1ZWM5OTNjMTdkZGIzYWZkMDRmMyIKKworaW5oZXJpdCBuYXRpdmUKKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGwgSU5TVEFMTFJPT1Q9JHtEfSBiaW5kaXI9JHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC8wMDAxLXJlbW92ZS1nbGliYy1hc3N1bXB0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvMDAwMS1yZW1vdmUtZ2xpYmMtYXNzdW1wdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2FlMjhiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvMDAwMS1yZW1vdmUtZ2xpYmMtYXNzdW1wdGlvbi5wYXRjaApAQCAtMCwwICsxLDU3IEBACitGcm9tIDdmODExZDljNGViYzk0NDRlNjEzZTI1MWMzMWQ2YmY1MzdhMjRkYzEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNjozNTozMCAtMDcwMAorU3ViamVjdDogW1BBVENIXSByZW1vdmUgZ2xpYmMgYXNzdW1wdGlvbgorCitnbGliYyB0aW1lLmggaGVhZGVyIGhhcyBhbiB1bmRvY3VtZW50ZWQgX19pc2xlYXAgbWFjcm8KK3RoYXQgd2UgYXJlIHVzaW5nIGFuZiBtdXNsIGlzIG1pc3NpbmcgaXQuCitTaW5jZSBpdCBpcyB1bmRvY3VtZW50ZWQgJiBkb2VzIG5vdCBhcHBlYXIKK29uIGFueSBvdGhlciBsaWJjLCBzdG9wIHVzaW5nIGl0IGFuZCBqdXN0IGRlZmluZSB0aGUgbWFjcm8gaW4KK2xvY2FsbHkgIGluc3RlYWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgcGFyc2V0aW1lLnkgfCAxMSArKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9wYXJzZXRpbWUueSBiL3BhcnNldGltZS55CitpbmRleCA3MDA1ZTg4Li4zMjRlNmQzIDEwMDY0NAorLS0tIGEvcGFyc2V0aW1lLnkKKysrKyBiL3BhcnNldGltZS55CitAQCAtOCw2ICs4LDkgQEAKKyAKKyAjZGVmaW5lIFlZREVCVUcgMQorIAorKyNkZWZpbmUgaXNfbGVhcF95ZWFyKHkpIFwKKysgICAgKCh5KSAlIDQgPT0gMCAmJiAoKHkpICUgMTAwICE9IDAgfHwgKHkpICUgNDAwID09IDApKQorKworIHN0cnVjdCB0bSBleGVjdG07Cisgc3RhdGljIGludCBpc2dtdDsKKyBzdGF0aWMgaW50IHllYXJzcGVjOworQEAgLTIxNyw4ICsyMjAsOCBAQCBkYXRlICAgICAgICAgICAgOiBtb250aF9uYW1lIGRheV9udW1iZXIKKyAJCQkJIG1udW0gPT0gMTIpICYmIGRudW0gPiAzMSkKKyAJCQkgICAgfHwgKChtbnVtID09ICA0IHx8IG1udW0gPT0gIDYgfHwgbW51bSA9PSAgOSB8fAorIAkJCSAgICAgICAgIG1udW0gPT0gMTEpICYmIGRudW0gPiAzMCkKKy0JCQkgICAgfHwgKG1udW0gPT0gIDIgJiYgZG51bSA+IDI5ICYmICBfX2lzbGVhcCh5bnVtKzE5MDApKQorLQkJCSAgICB8fCAobW51bSA9PSAgMiAmJiBkbnVtID4gMjggJiYgIV9faXNsZWFwKHludW0rMTkwMCkpCisrCQkJICAgIHx8IChtbnVtID09ICAyICYmIGRudW0gPiAyOSAmJiAgaXNfbGVhcF95ZWFyKHludW0rMTkwMCkpCisrCQkJICAgIHx8IChtbnVtID09ICAyICYmIGRudW0gPiAyOCAmJiAhaXNfbGVhcF95ZWFyKHludW0rMTkwMCkpCisgCQkJICAgKQorIAkJCXsKKyAJCQkgICAgeXllcnJvcigiRXJyb3IgaW4gZGF5IG9mIG1vbnRoIik7CitAQCAtMjYxLDggKzI2NCw4IEBAIGRhdGUgICAgICAgICAgICA6IG1vbnRoX25hbWUgZGF5X251bWJlcgorIAkJCQkgbW51bSA9PSAxMikgJiYgZG51bSA+IDMxKQorIAkJCSAgICB8fCAoKG1udW0gPT0gIDQgfHwgbW51bSA9PSAgNiB8fCBtbnVtID09ICA5IHx8CisgCQkJICAgICAgICAgbW51bSA9PSAxMSkgJiYgZG51bSA+IDMwKQorLQkJCSAgICB8fCAobW51bSA9PSAgMiAmJiBkbnVtID4gMjkgJiYgIF9faXNsZWFwKHludW0rMTkwMCkpCistCQkJICAgIHx8IChtbnVtID09ICAyICYmIGRudW0gPiAyOCAmJiAhX19pc2xlYXAoeW51bSsxOTAwKSkKKysJCQkgICAgfHwgKG1udW0gPT0gIDIgJiYgZG51bSA+IDI5ICYmICBpc19sZWFwX3llYXIoeW51bSsxOTAwKSkKKysJCQkgICAgfHwgKG1udW0gPT0gIDIgJiYgZG51bSA+IDI4ICYmICFpc19sZWFwX3llYXIoeW51bSsxOTAwKSkKKyAJCQkgICApCisgCQkJeworIAkJCSAgICB5eWVycm9yKCJFcnJvciBpbiBkYXkgb2YgbW9udGgiKTsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvYXRkLmluaXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9hdGQuaW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2EzNzliCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvYXRkLmluaXQKQEAgLTAsMCArMSw0NSBAQAorIyEvYmluL3NoCisjCisjIFN0YXJ0cyBhdCBkYWVtb24KKyMKKwordW1hc2sgMDc3CisKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCitzdGFydCgpIHsKKwllY2hvIC1uICJTdGFydGluZyBhdGQ6ICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1waWRmaWxlIC92YXIvcnVuL2F0ZC5waWQgLS1iYWNrZ3JvdW5kIC0tZXhlYyAvdXNyL3NiaW4vYXRkIC0tIC1mCisJZWNobyAiT0siCit9CitzdG9wKCkgeworCWVjaG8gLW4gIlN0b3BwaW5nIGF0ZDogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tcGlkZmlsZSAvdmFyL3J1bi9hdGQucGlkCisJZWNobyAiT0siCit9CityZXN0YXJ0KCkgeworCXN0b3AKKwlzdGFydAorfQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisJc3RhcnQKKwk7OworICBzdG9wKQorCXN0b3AKKwk7OworICByZXN0YXJ0fHJlbG9hZCkKKwlyZXN0YXJ0CisJOzsKKyAgc3RhdHVzKQorCXN0YXR1cyAvdXNyL3NiaW4vYXRkCisJOzsKKyAgKikKKwllY2hvICQiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHJlc3RhcnR8c3RhdHVzfSIKKwlleGl0IDEKK2VzYWMKKworZXhpdCAkPworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9hdGQuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2F0ZC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYzg0NDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9hdGQuc2VydmljZQpAQCAtMCwwICsxLDkgQEAKK1tVbml0XQorRGVzY3JpcHRpb249Sm9iIHNwb29saW5nIHRvb2xzCitBZnRlcj1zeXNsb2cudGFyZ2V0CisKK1tTZXJ2aWNlXQorRXhlY1N0YXJ0PUBTQklORElSQC9hdGQgLWYKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvY29uZmlndXJlLWFkZC1lbmFibGUtcGFtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvY29uZmlndXJlLWFkZC1lbmFibGUtcGFtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNWVmZWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9jb25maWd1cmUtYWRkLWVuYWJsZS1wYW0ucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBhdC0zLjEuMTIvY29uZmlndXJlLmFjCTIwMTEtMDYtMjMgMTQ6NTE6MDMuNjUzNTcyOTQ1ICswODAwCisrKysgYXQtMy4xLjEyL2NvbmZpZ3VyZS5hYy5uZXcJMjAxMS0wNi0yNyAxNjoxMjoxNC45MDM1NzI5NDUgKzA4MDAKK0BAIC04MSwxMCArODEsMTggQEAKKyBBQ19GVU5DX1ZQUklOVEYKKyBBQ19GVU5DX0dFVExPQURBVkcKKyBBQ19DSEVDS19GVU5DUyhnZXRjd2QgbWt0aW1lIHN0cmZ0aW1lIHNldHJldWlkIHNldHJlc3VpZCBzaWdhY3Rpb24gd2FpdHBpZCkKKysKKytBQ19BUkdfV0lUSChbcGFtXSwKKysgIFtBU19IRUxQX1NUUklORyhbLS13aXRob3V0LXBhbV0sIFt3aXRob3V0IFBBTSBzdXBwb3J0XSldKQorKworK2lmIHRlc3QgIngkd2l0aF9wYW0iICE9IHhubzsgdGhlbgorIEFDX0NIRUNLX0hFQURFUlMoc2VjdXJpdHkvcGFtX2FwcGwuaCwgWworICAgUEFNTElCPSItbHBhbSIKKy0gIEFDX0RFRklORShIQVZFX1BBTSwgMSwgW0RlZmluZSB0byAxIGZvciBQQU0gc3VwcG9ydF0pCistXSkKKysgIEFDX0RFRklORShIQVZFX1BBTSwgMSwgW0RlZmluZSB0byAxIGZvciBQQU0gc3VwcG9ydF0pXSwKKysgICBbaWYgdGVzdCAieCR3aXRoX3BhbSIgPSB4eWVzOyB0aGVuCisrICAgQUNfTVNHX0VSUk9SKFtQQU0gc2VsZWN0ZWQgYnV0IHNlY3VyaXR5L3BhbV9taXNjLmggbm90IGZvdW5kXSkKKysgICBmaV0pCisrZmkKKworIGRubCBDaGVja2luZyBmb3IgcHJvZ3JhbXMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvZmlsZV9yZXBsYWNlbWVudF93aXRoX2dwbHYyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvZmlsZV9yZXBsYWNlbWVudF93aXRoX2dwbHYyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZWYwMDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9maWxlX3JlcGxhY2VtZW50X3dpdGhfZ3BsdjIucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK3Bvc2l4dG0uW2NoXSBmaWxlcyBhcmUgcmVwbGFjZWQgd2l0aCBncGx2MiB2ZXJzaW9uIGZyb20gdGhlc2UgbG9jYXRpb25zOgorCitodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWdudWxpYi5naXQ7YT1ibG9iO2Y9bGliL3Bvc2l4dG0uYztoYj01NjYxYWI5ZDQ5NTEyYjRjZjNjMTljYWExMWJiNTgxZDhjZTU2MWJhCitodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWdudWxpYi5naXQ7YT1ibG9iO2Y9bGliL3Bvc2l4dG0uaDtoYj01NjYxYWI5ZDQ5NTEyYjRjZjNjMTljYWExMWJiNTgxZDhjZTU2MWJhIAorCit1cGRhdGUgdGhlIENvcHlyaWdodCBmaWxlIGluZm9ybWF0aW9uIHRvIHJlZmxlY3QgdGhlIHJlcGxhY2VkIGZpbGVzLgorCitEYXRlOiAyMDEwLzA4LzMxCitOaXRpbiBBIEthbWJsZSBuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20KKworSW5kZXg6IGF0LTMuMS4xMi9Db3B5cmlnaHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdC0zLjEuMTIub3JpZy9Db3B5cmlnaHQKKysrKyBhdC0zLjEuMTIvQ29weXJpZ2h0CitAQCAtMzEsMTAgKzMxLDEwIEBAIFRoZSBmaWxlcyBwb3NpeHRtLmMgYW5kIHBvc2l4dG0uaCBoYXZlIHQKKyAgICBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTAsIDE5OTEsIDE5OTgsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsCisgICAgMjAwNSwgMjAwNiwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gSW5jLgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCistICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisgCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2ZpeF9wYXJhbGxlbF9idWlsZF9lcnJvci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2ZpeF9wYXJhbGxlbF9idWlsZF9lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmZmM2UxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvZml4X3BhcmFsbGVsX2J1aWxkX2Vycm9yLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK21ha2UgLWogd2FzIGZhaWxpbmcgc29tZXRpbWVzYSBsaWtlIHRoaXMKK3wgY2NhY2hlIGk1ODYtcG9reS1saW51eC1nY2MgLW1hcmNoPWk1ODYgLS1zeXNyb290PS9ob21lL25pdGluL2J1aWxkL2J1aWxkMC90bXAvc3lzcm9vdHMvaTU4Ni1wb2t5LWxpbnV4IC1JLiAtZmV4cGVuc2l2ZS1vcHRpbWl6YXRpb25zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1mcmVuYW1lLXJlZ2lzdGVycyAtTzIgLWdnZGIgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzIC1vIGF0ZCBhdGQubyBkYWVtb24ubyAgLWxmbCAgLWxwYW0gLVdsLC1PMSAtV2wsLS1hcy1uZWVkZWQKK3wgcGFyc2V0aW1lLmw6NToxOTogZmF0YWwgZXJyb3I6IHkudGFiLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK3wgY29tcGlsYXRpb24gdGVybWluYXRlZC4KK3wgbWFrZTogKioqIFtsZXgueXkub10gRXJyb3IgMQorfCBtYWtlOiAqKiogV2FpdGluZyBmb3IgdW5maW5pc2hlZCBqb2JzLi4uLgorCitGaXhlZCB0aGUgaXNzdWUgYnkgYWRkaW5nIGEgZGVwZW5kZW5jeSBpbiB0aGUgbWFrZWZpbGUuCitOaXRpbiA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMC8wOS8wMgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK0luZGV4OiBhdC0zLjEuMTIvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdC0zLjEuMTIub3JpZy9NYWtlZmlsZS5pbgorKysrIGF0LTMuMS4xMi9NYWtlZmlsZS5pbgorQEAgLTgzLDYgKzgzLDggQEAgeS50YWIuYyB5LnRhYi5oOiBwYXJzZXRpbWUueQorIGxleC55eS5jOiBwYXJzZXRpbWUubAorIAkkKExFWCkgLWkgcGFyc2V0aW1lLmwKKyAKKytwYXJzZXRpbWUubDogeS50YWIuaAorKworIGF0cnVuOiBhdHJ1bi5pbgorIAljb25maWd1cmUKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L21ha2VmaWxlLWZpeC1wYXJhbGxlbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L21ha2VmaWxlLWZpeC1wYXJhbGxlbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzJhNGMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvbWFrZWZpbGUtZml4LXBhcmFsbGVsLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gMTUwYjYzYTkzNmFmNzFiOTkyYTNhN2IwZmMyZDI0OTdlNTFmYzgwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAyOCBKYW4gMjAxNSAyMzo1MjowMCAtMDgwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZTogZml4IGZvciBwYXJhbGxlbCBidWlsZAorCitGaXhlZDoKK3kudGFiLmM6MTAwMTowOiBlcnJvcjogdW50ZXJtaW5hdGVkICNpZgorCitMZXQgIiQoWUFDQykgLWQgcGFyc2V0aW1lLnkiIG9ubHkgcnVuIG9uY2Ugd2lsbCBmaXggdGhlIHByb2JsZW0uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlIHwgICAgNCArKystCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggMmE5YjkxOC4uYWE3YzA0YSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTc1LDcgKzc1LDkgQEAgYXQ6ICQoQVRPQkpFQ1RTKQorIGF0ZDogJChSVU5PQkpFQ1RTKQorIAkkKENDKSAkKExERkxBR1MpIC1vIGF0ZCAkKFJVTk9CSkVDVFMpICQoTElCUykgJChQQU1MSUIpCisgCisteS50YWIuYyB5LnRhYi5oOiBwYXJzZXRpbWUueQorK3kudGFiLmg6IHkudGFiLmMKKysKKyt5LnRhYi5jOiBwYXJzZXRpbWUueQorIAkkKFlBQ0MpIC1kIHBhcnNldGltZS55CisgCisgbGV4Lnl5LmM6IHBhcnNldGltZS5sCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvcGFtLmNvbmYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9wYW0uY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWNlYjlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvcGFtLmNvbmYucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorb2UgZG9lc24ndCBzdXBwb3J0ICJAaW5jbHVkZSIsIHVzZSB0aGUgY29uY3JldGUgZGlyZWN0aXZlIGluc3RlYWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KK0luZGV4OiBhdC0zLjEuMTUvcGFtLmNvbmYKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdC0zLjEuMTUub3JpZy9wYW0uY29uZgorKysrIGF0LTMuMS4xNS9wYW0uY29uZgorQEAgLTEsMTAgKzEsMTEgQEAKKyAjCisgIyBUaGUgUEFNIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIGF0IGRhZW1vbgorICMKKysgCisrYXV0aCAgICByZXF1aXJlZCAgICBwYW1fZW52LnNvCisrYXV0aCAgICBpbmNsdWRlICAgICBjb21tb24tYXV0aAorK2FjY291bnQgaW5jbHVkZSAgICAgY29tbW9uLWFjY291bnQKKytzZXNzaW9uIGluY2x1ZGUgICAgIGNvbW1vbi1zZXNzaW9uLW5vbmludGVyYWN0aXZlCisrc2Vzc2lvbiByZXF1aXJlZCAgICBwYW1fbGltaXRzLnNvCisrc2Vzc2lvbiByZXF1aXJlZCAgICBwYW1fbG9naW51aWQuc28KKyAKKy1hdXRoCXJlcXVpcmVkCXBhbV9lbnYuc28KKy1AaW5jbHVkZSBjb21tb24tYXV0aAorLUBpbmNsdWRlIGNvbW1vbi1hY2NvdW50Cistc2Vzc2lvbiAgICByZXF1aXJlZCAgIHBhbV9sb2dpbnVpZC5zbworLUBpbmNsdWRlIGNvbW1vbi1zZXNzaW9uLW5vbmludGVyYWN0aXZlCistc2Vzc2lvbiAgICByZXF1aXJlZCAgIHBhbV9saW1pdHMuc28KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L3Bvc2l4dG0uYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L3Bvc2l4dG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTE0YmE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvcG9zaXh0bS5jCkBAIC0wLDAgKzEsMzI4IEBACisvKiBQYXJzZSBkYXRlcyBmb3IgdG91Y2ggYW5kIGRhdGUuCisKKyAgIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MCwgMTk5MSwgMTk5OCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwKKyAgIDIwMDUsIDIwMDYsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKy8qIFlhY2MtYmFzZWQgdmVyc2lvbiB3cml0dGVuIGJ5IEppbSBLaW5nZG9uIGFuZCBEYXZpZCBNYWNLZW56aWUuCisgICBSZXdyaXR0ZW4gYnkgSmltIE1leWVyaW5nLiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSAicG9zaXh0bS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIFVTRV9VTkxPQ0tFRF9JTworIyBpbmNsdWRlICJ1bmxvY2tlZC1pby5oIgorI2VuZGlmCisKKy8qIElTRElHSVQgZGlmZmVycyBmcm9tIGlzZGlnaXQsIGFzIGZvbGxvd3M6CisgICAtIEl0cyBhcmcgbWF5IGJlIGFueSBpbnQgb3IgdW5zaWduZWQgaW50OyBpdCBuZWVkIG5vdCBiZSBhbiB1bnNpZ25lZCBjaGFyCisgICAgIG9yIEVPRi4KKyAgIC0gSXQncyB0eXBpY2FsbHkgZmFzdGVyLgorICAgUE9TSVggc2F5cyB0aGF0IG9ubHkgJzAnIHRocm91Z2ggJzknIGFyZSBkaWdpdHMuICBQcmVmZXIgSVNESUdJVCB0bworICAgaXNkaWdpdCB1bmxlc3MgaXQncyBpbXBvcnRhbnQgdG8gdXNlIHRoZSBsb2NhbGUncyBkZWZpbml0aW9uCisgICBvZiBgZGlnaXQnIGV2ZW4gd2hlbiB0aGUgaG9zdCBkb2VzIG5vdCBjb25mb3JtIHRvIFBPU0lYLiAgKi8KKyNkZWZpbmUgSVNESUdJVChjKSAoKHVuc2lnbmVkIGludCkgKGMpIC0gJzAnIDw9IDkpCisKK3RpbWVfdCBta3RpbWUgKCk7CisKKy8qCisgIFBPU0lYIHJlcXVpcmVzOgorCisgIHRvdWNoIC10IFtbQ0NdWVldbW1kZGhobW1bLnNzXSBGSUxFLi4uCisgICAgOCwgMTAsIG9yIDEyIGRpZ2l0cywgZm9sbG93ZWQgYnkgb3B0aW9uYWwgLnNzCisgICAgKFBEU19MRUFESU5HX1lFQVIgfCBQRFNfQ0VOVFVSWSB8IFBEU19TRUNPTkRTKQorCisgIHRvdWNoIG1tZGRoaG1tW1lZXSBGSUxFLi4uIChvYnNvbGV0ZWQgYnkgUE9TSVggMTAwMy4xLTIwMDEpCisgICAgOCBvciAxMCBkaWdpdHMsIFlZIChpZiBwcmVzZW50KSBtdXN0IGJlIGluIHRoZSByYW5nZSA2OS05OQorICAgIChQRFNfVFJBSUxJTkdfWUVBUiB8IFBEU19QUkVfMjAwMCkKKworICBkYXRlIG1tZGRoaG1tW1tDQ11ZWV0KKyAgICA4LCAxMCwgb3IgMTIgZGlnaXRzCisgICAgKFBEU19UUkFJTElOR19ZRUFSIHwgUERTX0NFTlRVUlkpCisKKyovCisKK3N0YXRpYyBpbnQKK3llYXIgKHN0cnVjdCB0bSAqdG0sIGNvbnN0IGludCAqZGlnaXRfcGFpciwgc2l6ZV90IG4sIHVuc2lnbmVkIGludCBzeW50YXhfYml0cykKK3sKKyAgc3dpdGNoIChuKQorICAgIHsKKyAgICBjYXNlIDE6CisgICAgICB0bS0+dG1feWVhciA9ICpkaWdpdF9wYWlyOworICAgICAgLyogRGVkdWNlIHRoZSBjZW50dXJ5IGJhc2VkIG9uIHRoZSB5ZWFyLgorCSBQT1NJWCByZXF1aXJlcyB0aGF0IDAwLTY4IGJlIGludGVycHJldGVkIGFzIDIwMDAtMjA2OCwKKwkgYW5kIHRoYXQgNjktOTkgYmUgaW50ZXJwcmV0ZWQgYXMgMTk2OS0xOTk5LiAgKi8KKyAgICAgIGlmIChkaWdpdF9wYWlyWzBdIDw9IDY4KQorCXsKKwkgIGlmIChzeW50YXhfYml0cyAmIFBEU19QUkVfMjAwMCkKKwkgICAgcmV0dXJuIDE7CisJICB0bS0+dG1feWVhciArPSAxMDA7CisJfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDI6CisgICAgICBpZiAoISAoc3ludGF4X2JpdHMgJiBQRFNfQ0VOVFVSWSkpCisJcmV0dXJuIDE7CisgICAgICB0bS0+dG1feWVhciA9IGRpZ2l0X3BhaXJbMF0gKiAxMDAgKyBkaWdpdF9wYWlyWzFdIC0gMTkwMDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAwOgorICAgICAgeworCXRpbWVfdCBub3c7CisJc3RydWN0IHRtICp0bXA7CisKKwkvKiBVc2UgY3VycmVudCB5ZWFyLiAgKi8KKwl0aW1lICgmbm93KTsKKwl0bXAgPSBsb2NhbHRpbWUgKCZub3cpOworCWlmICghIHRtcCkKKwkgIHJldHVybiAxOworCXRtLT50bV95ZWFyID0gdG1wLT50bV95ZWFyOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgYWJvcnQgKCk7CisgICAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citwb3NpeF90aW1lX3BhcnNlIChzdHJ1Y3QgdG0gKnRtLCBjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBpbnQgc3ludGF4X2JpdHMpCit7CisgIGNvbnN0IGNoYXIgKmRvdCA9IE5VTEw7CisgIGludCBwYWlyWzZdOworICBpbnQgKnA7CisgIHNpemVfdCBpOworCisgIHNpemVfdCBzX2xlbiA9IHN0cmxlbiAocyk7CisgIHNpemVfdCBsZW4gPSAoKChzeW50YXhfYml0cyAmIFBEU19TRUNPTkRTKSAmJiAoZG90ID0gc3RyY2hyIChzLCAnLicpKSkKKwkJPyAoc2l6ZV90KSAoZG90IC0gcykKKwkJOiBzX2xlbik7CisKKyAgaWYgKGxlbiAhPSA4ICYmIGxlbiAhPSAxMCAmJiBsZW4gIT0gMTIpCisgICAgcmV0dXJuIDE7CisKKyAgaWYgKGRvdCkKKyAgICB7CisgICAgICBpZiAoIShzeW50YXhfYml0cyAmIFBEU19TRUNPTkRTKSkKKwlyZXR1cm4gMTsKKworICAgICAgaWYgKHNfbGVuIC0gbGVuICE9IDMpCisJcmV0dXJuIDE7CisgICAgfQorCisgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICBpZiAoIUlTRElHSVQgKHNbaV0pKQorICAgICAgcmV0dXJuIDE7CisKKyAgbGVuIC89IDI7CisgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICBwYWlyW2ldID0gMTAgKiAoc1syKmldIC0gJzAnKSArIHNbMippICsgMV0gLSAnMCc7CisKKyAgcCA9IHBhaXI7CisgIGlmIChzeW50YXhfYml0cyAmIFBEU19MRUFESU5HX1lFQVIpCisgICAgeworICAgICAgaWYgKHllYXIgKHRtLCBwLCBsZW4gLSA0LCBzeW50YXhfYml0cykpCisJcmV0dXJuIDE7CisgICAgICBwICs9IGxlbiAtIDQ7CisgICAgICBsZW4gPSA0OworICAgIH0KKworICAvKiBIYW5kbGUgOCBkaWdpdHMgd29ydGggb2YgYE1NRERoaG1tJy4gICovCisgIHRtLT50bV9tb24gPSAqcCsrIC0gMTsKKyAgdG0tPnRtX21kYXkgPSAqcCsrOworICB0bS0+dG1faG91ciA9ICpwKys7CisgIHRtLT50bV9taW4gPSAqcCsrOworICBsZW4gLT0gNDsKKworICAvKiBIYW5kbGUgYW55IHRyYWlsaW5nIHllYXIuICAqLworICBpZiAoc3ludGF4X2JpdHMgJiBQRFNfVFJBSUxJTkdfWUVBUikKKyAgICB7CisgICAgICBpZiAoeWVhciAodG0sIHAsIGxlbiwgc3ludGF4X2JpdHMpKQorCXJldHVybiAxOworICAgIH0KKworICAvKiBIYW5kbGUgc2Vjb25kcy4gICovCisgIGlmICghZG90KQorICAgIHsKKyAgICAgIHRtLT50bV9zZWMgPSAwOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGludCBzZWNvbmRzOworCisgICAgICArK2RvdDsKKyAgICAgIGlmICghSVNESUdJVCAoZG90WzBdKSB8fCAhSVNESUdJVCAoZG90WzFdKSkKKwlyZXR1cm4gMTsKKyAgICAgIHNlY29uZHMgPSAxMCAqIChkb3RbMF0gLSAnMCcpICsgZG90WzFdIC0gJzAnOworCisgICAgICB0bS0+dG1fc2VjID0gc2Vjb25kczsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIFBhcnNlIGEgUE9TSVgtc3R5bGUgZGF0ZSwgcmV0dXJuaW5nIHRydWUgaWYgc3VjY2Vzc2Z1bC4gICovCisKK2Jvb2wKK3Bvc2l4dGltZSAodGltZV90ICpwLCBjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBpbnQgc3ludGF4X2JpdHMpCit7CisgIHN0cnVjdCB0bSB0bTAKKyNpZmRlZiBsaW50CisgIC8qIFBsYWNhdGUgZ2NjLTQncyAtV3VuaW5pdGlhbGl6ZWQuCisgICAgIHBvc2l4X3RpbWVfcGFyc2UgZmFpbHMgdG8gc2V0IGFsbCBvZiB0bTAgb25seSB3aGVuIGl0IHJldHVybnMKKyAgICAgbm9uemVybyAoZHVlIHRvIHllYXIoKSByZXR1cm5pbmcgbm9uemVybyksIGFuZCBpbiB0aGF0IGNhc2UsCisgICAgIHRoaXMgY29kZSBkb2Vzbid0IHVzZSB0aGUgdG0wIGF0IGFsbC4gICovCisgICAgPSB7IDAsIH0KKyNlbmRpZgorICAgIDsKKyAgc3RydWN0IHRtIHRtMTsKKyAgc3RydWN0IHRtIGNvbnN0ICp0bTsKKyAgdGltZV90IHQ7CisKKyAgaWYgKHBvc2l4X3RpbWVfcGFyc2UgKCZ0bTAsIHMsIHN5bnRheF9iaXRzKSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgdG0xID0gdG0wOworICB0bTEudG1faXNkc3QgPSAtMTsKKyAgdCA9IG1rdGltZSAoJnRtMSk7CisKKyAgaWYgKHQgIT0gKHRpbWVfdCkgLTEpCisgICAgdG0gPSAmdG0xOworICBlbHNlCisgICAgeworICAgICAgLyogbWt0aW1lIHJldHVybnMgLTEgZm9yIGVycm9ycywgYnV0IC0xIGlzIGFsc28gYSB2YWxpZCB0aW1lX3QKKwkgdmFsdWUuICBDaGVjayB3aGV0aGVyIGFuIGVycm9yIHJlYWxseSBvY2N1cnJlZC4gICovCisgICAgICB0bSA9IGxvY2FsdGltZSAoJnQpOworICAgICAgaWYgKCEgdG0pCisJcmV0dXJuIGZhbHNlOworICAgIH0KKworICAvKiBSZWplY3QgZGF0ZXMgbGlrZSAiU2VwdGVtYmVyIDMxIiBhbmQgdGltZXMgbGlrZSAiMjU6NjEiLiAgKi8KKyAgaWYgKCh0bTAudG1feWVhciBeIHRtLT50bV95ZWFyKQorICAgICAgfCAodG0wLnRtX21vbiBeIHRtLT50bV9tb24pCisgICAgICB8ICh0bTAudG1fbWRheSBeIHRtLT50bV9tZGF5KQorICAgICAgfCAodG0wLnRtX2hvdXIgXiB0bS0+dG1faG91cikKKyAgICAgIHwgKHRtMC50bV9taW4gXiB0bS0+dG1fbWluKQorICAgICAgfCAodG0wLnRtX3NlYyBeIHRtLT50bV9zZWMpKQorICAgIHJldHVybiBmYWxzZTsKKworICAqcCA9IHQ7CisgIHJldHVybiB0cnVlOworfQorCisjaWZkZWYgVEVTVF9QT1NJWFRJTUUKKy8qCisgICAgVGVzdCBtYWlubHkgd2l0aCBzeW50YXhfYml0cyA9PSAxMworICAgIChha2E6IChQRFNfTEVBRElOR19ZRUFSIHwgUERTX0NFTlRVUlkgfCBQRFNfU0VDT05EUykpCisKKyAgICBUaGlzIHRlc3QgZGF0YSBhc3N1bWVzIFVuaXZlcnNhbCBUaW1lLCBlLmcuLCBUWj0iVVRDMCIuCisKKyAgICBUaGlzIHRlc3QgZGF0YSBhbHNvIGFzc3VtZXMgdGhhdCB0aW1lX3QgaXMgc2lnbmVkIGFuZCBpcyBhdCBsZWFzdAorICAgIDM5IGJpdHMgd2lkZSwgc28gdGhhdCBpdCBjYW4gcmVwcmVzZW50IGFsbCB5ZWFycyBmcm9tIDAwMDAgdGhyb3VnaAorICAgIDk5OTkuICBBIGhvc3Qgd2l0aCAzMi1iaXQgc2lnbmVkIHRpbWVfdCBjYW4gcmVwcmVzZW50IG9ubHkgdGltZQorICAgIHN0YW1wcyBpbiB0aGUgcmFuZ2UgMTkwMS0xMi0xMyAyMDo0NTo1MiB0aHJvdWdoIDIwMzgtMDEtMTgKKyAgICAwMzoxNDowNyBVVEMsIGFzc3VtaW5nIFBPU0lYIHRpbWVfdCB3aXRoIG5vIGxlYXAgc2Vjb25kcywgc28gdGVzdAorICAgIGNhc2VzIG91dHNpZGUgdGhpcyByYW5nZSB3aWxsIG5vdCB3b3JrIG9uIHN1Y2ggYSBob3N0LgorCisgICAgQWxzbywgdGhlIGZpcnN0IHR3byBsaW5lcyBvZiB0ZXN0IGRhdGEgYXNzdW1lIHRoYXQgdGhlIGN1cnJlbnQKKyAgICB5ZWFyIGlzIDIwMDIuCisKK0JFR0lOLURBVEEKKzEyMTMxNDE1LjE2ICAgICAxMyAgIDEwMzk3ODg5MTYgRnJpIERlYyAxMyAxNDoxNToxNiAyMDAyCisxMjEzMTQxNS4xNiAgICAgMTMgICAxMDM5Nzg4OTE2IEZyaSBEZWMgMTMgMTQ6MTU6MTYgMjAwMgorMDAwMDAxMDEwMDAwLjAwIDEzIC02MjE2NzEzMjgwMCBTdW4gSmFuICAxIDAwOjAwOjAwIDAwMDAKKzE5MDExMjEzMjA0NS41MiAxMyAgLTIxNDc0ODM2NDggRnJpIERlYyAxMyAyMDo0NTo1MiAxOTAxCisxOTAxMTIxMzIwNDUuNTMgMTMgIC0yMTQ3NDgzNjQ3IEZyaSBEZWMgMTMgMjA6NDU6NTMgMTkwMQorMTkwMTEyMTMyMDQ2LjUyIDEzICAtMjE0NzQ4MzU4OCBGcmkgRGVjIDEzIDIwOjQ2OjUyIDE5MDEKKzE5MDExMjEzMjE0NS41MiAxMyAgLTIxNDc0ODAwNDggRnJpIERlYyAxMyAyMTo0NTo1MiAxOTAxCisxOTAxMTIxNDIwNDUuNTIgMTMgIC0yMTQ3Mzk3MjQ4IFNhdCBEZWMgMTQgMjA6NDU6NTIgMTkwMQorMTkwMjAxMTMyMDQ1LjUyIDEzICAtMjE0NDgwNTI0OCBNb24gSmFuIDEzIDIwOjQ1OjUyIDE5MDIKKzE5NjkxMjMxMjM1OS41OSAxMyAgICAgICAgICAgLTEgV2VkIERlYyAzMSAyMzo1OTo1OSAxOTY5CisxOTcwMDEwMTAwMDAuMDAgMTMgICAgICAgICAgICAwIFRodSBKYW4gIDEgMDA6MDA6MDAgMTk3MAorMTk3MDAxMDEwMDAwLjAxIDEzICAgICAgICAgICAgMSBUaHUgSmFuICAxIDAwOjAwOjAxIDE5NzAKKzE5NzAwMTAxMDAwMS4wMCAxMyAgICAgICAgICAgNjAgVGh1IEphbiAgMSAwMDowMTowMCAxOTcwCisxOTcwMDEwMTAxMDAuMDAgMTMgICAgICAgICAzNjAwIFRodSBKYW4gIDEgMDE6MDA6MDAgMTk3MAorMTk3MDAxMDIwMDAwLjAwIDEzICAgICAgICA4NjQwMCBGcmkgSmFuICAyIDAwOjAwOjAwIDE5NzAKKzE5NzAwMjAxMDAwMC4wMCAxMyAgICAgIDI2Nzg0MDAgU3VuIEZlYiAgMSAwMDowMDowMCAxOTcwCisxOTcxMDEwMTAwMDAuMDAgMTMgICAgIDMxNTM2MDAwIEZyaSBKYW4gIDEgMDA6MDA6MDAgMTk3MQorMTk3MDAxMDAwMDAwLjAwIDEzICAgICAgICAgICAgKiAqCisxOTcwMDAwMTAwMDAuMDAgMTMgICAgICAgICAgICAqICoKKzE5NzAwMTAxMDAwMC42MCAxMyAgICAgICAgICAgICogKgorMTk3MDAxMDEwMDYwLjAwIDEzICAgICAgICAgICAgKiAqCisxOTcwMDEwMTI0MDAuMDAgMTMgICAgICAgICAgICAqICoKKzE5NzAwMTMyMDAwMC4wMCAxMyAgICAgICAgICAgICogKgorMTk3MDEzMDEwMDAwLjAwIDEzICAgICAgICAgICAgKiAqCisyMDM4MDExOTAzMTQuMDYgMTMgICAyMTQ3NDgzNjQ2IFR1ZSBKYW4gMTkgMDM6MTQ6MDYgMjAzOAorMjAzODAxMTkwMzE0LjA3IDEzICAgMjE0NzQ4MzY0NyBUdWUgSmFuIDE5IDAzOjE0OjA3IDIwMzgKKzIwMzgwMTE5MDMxNC4wOCAxMyAgIDIxNDc0ODM2NDggVHVlIEphbiAxOSAwMzoxNDowOCAyMDM4Cis5OTk5MTIzMTIzNTkuNTkgMTMgMjUzNDAyMzAwNzk5IEZyaSBEZWMgMzEgMjM6NTk6NTkgOTk5OQorMTExMjEzMTQxNSAgICAgIDEzICAgMTMyMzc4NTcwMCBUdWUgRGVjIDEzIDE0OjE1OjAwIDIwMTEKKzExMTIxMzE0MTUuMTYgICAxMyAgIDEzMjM3ODU3MTYgVHVlIERlYyAxMyAxNDoxNToxNiAyMDExCisyMDExMTIxMzE0MTUuMTYgMTMgICAxMzIzNzg1NzE2IFR1ZSBEZWMgMTMgMTQ6MTU6MTYgMjAxMQorMTkxMTEyMTMxNDE1LjE2IDEzICAtMTgzMTk3NDI4NCBXZWQgRGVjIDEzIDE0OjE1OjE2IDE5MTEKKzIwMzcxMjEzMTQxNS4xNiAxMyAgIDIxNDQzMjY1MTYgU3VuIERlYyAxMyAxNDoxNToxNiAyMDM3CiszNzEyMTMxNDE1LjE2ICAgMTMgICAyMTQ0MzI2NTE2IFN1biBEZWMgMTMgMTQ6MTU6MTYgMjAzNworNjgxMjEzMTQxNS4xNiAgIDEzICAgMzEyMjYzMzcxNiBUaHUgRGVjIDEzIDE0OjE1OjE2IDIwNjgKKzY5MTIxMzE0MTUuMTYgICAxMyAgICAgLTE1OTAyODQgU2F0IERlYyAxMyAxNDoxNToxNiAxOTY5Cis3MDEyMTMxNDE1LjE2ICAgMTMgICAgIDI5OTQ1NzE2IFN1biBEZWMgMTMgMTQ6MTU6MTYgMTk3MAorMTIxMzE0MTU5OSAgICAgICAyICAgIDk0NTA5NDUwMCBNb24gRGVjIDEzIDE0OjE1OjAwIDE5OTkKKzEyMTMxNDE1MDAgICAgICAgMiAgICA5NzY3MTY5MDAgV2VkIERlYyAxMyAxNDoxNTowMCAyMDAwCitFTkQtREFUQQorCisqLworCisjIGRlZmluZSBNQVhfQlVGRl9MRU4gMTAyNAorCitpbnQKK21haW4gKHZvaWQpCit7CisgIGNoYXIgYnVmZltNQVhfQlVGRl9MRU4gKyAxXTsKKworICBidWZmW01BWF9CVUZGX0xFTl0gPSAwOworICB3aGlsZSAoZmdldHMgKGJ1ZmYsIE1BWF9CVUZGX0xFTiwgc3RkaW4pICYmIGJ1ZmZbMF0pCisgICAgeworICAgICAgY2hhciB0aW1lX3N0cltNQVhfQlVGRl9MRU5dOworICAgICAgdW5zaWduZWQgaW50IHN5bnRheF9iaXRzOworICAgICAgdGltZV90IHQ7CisgICAgICBpZiAoc3NjYW5mIChidWZmLCAiJXMgJXUiLCB0aW1lX3N0ciwgJnN5bnRheF9iaXRzKSAhPSAyKQorCXByaW50ZiAoIipcbiIpOworICAgICAgZWxzZQorCXsKKwkgIHByaW50ZiAoIiUtMTVzICUydSAiLCB0aW1lX3N0ciwgc3ludGF4X2JpdHMpOworCSAgaWYgKHBvc2l4dGltZSAoJnQsIHRpbWVfc3RyLCBzeW50YXhfYml0cykpCisJICAgIHByaW50ZiAoIiUxMmxkICVzIiwgKGxvbmcgaW50KSB0LCBjdGltZSAoJnQpKTsKKwkgIGVsc2UKKwkgICAgcHJpbnRmICgiJTEycyAlcyIsICIqIiwgIipcbiIpOworCX0KKyAgICB9CisgIGV4aXQgKDApOworCit9CisjZW5kaWYKKwwKKy8qCitMb2NhbCBWYXJpYWJsZXM6Citjb21waWxlLWNvbW1hbmQ6ICJnY2MgLURURVNUX1BPU0lYVElNRSAtZyAtTyAtV2FsbCAtVyBwb3NpeHRtLmMiCitFbmQ6CisqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvcG9zaXh0bS5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvcG9zaXh0bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MTc0OWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9wb3NpeHRtLmgKQEAgLTAsMCArMSwzNyBAQAorLyogUGFyc2UgZGF0ZXMgZm9yIHRvdWNoIGFuZCBkYXRlLgorCisgICBDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDMsIDIwMDUsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKy8qIFlhY2MtYmFzZWQgdmVyc2lvbiB3cml0dGVuIGJ5IEppbSBLaW5nZG9uIGFuZCBEYXZpZCBNYWNLZW56aWUuCisgICBSZXdyaXR0ZW4gYnkgSmltIE1leWVyaW5nLiAgKi8KKworI2lmbmRlZiBQT1NJWFRNX0hfCisjIGRlZmluZSBQT1NJWFRNX0hfCisKKyMgaW5jbHVkZSA8c3RkYm9vbC5oPgorIyBpbmNsdWRlIDx0aW1lLmg+CisKKy8qIFBPU0lYIERhdGUgU3ludGF4IGZsYWdzLiAgKi8KKyMgZGVmaW5lIFBEU19MRUFESU5HX1lFQVIgMQorIyBkZWZpbmUgUERTX1RSQUlMSU5HX1lFQVIgMgorIyBkZWZpbmUgUERTX0NFTlRVUlkgNAorIyBkZWZpbmUgUERTX1NFQ09ORFMgOAorIyBkZWZpbmUgUERTX1BSRV8yMDAwIDE2CisKK2Jvb2wgcG9zaXh0aW1lICh0aW1lX3QgKnAsIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBzeW50YXhfYml0cyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXRfMy4xLjE2LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXRfMy4xLjE2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MTJiY2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdF8zLjEuMTYuYmIKQEAgLTAsMCArMSw2OSBAQAorU1VNTUFSWSA9ICJEZWxheWVkIGpvYiBleGVjdXRpb24gYW5kIGJhdGNoIHByb2Nlc3NpbmciCitERVNDUklQVElPTiA9ICJBdCBhbGxvd3MgZm9yIGNvbW1hbmRzIHRvIGJlIHJ1biBhdCBhIHBhcnRpY3VsYXIgdGltZS4gIEJhdGNoIHdpbGwgZXhlY3V0ZSBjb21tYW5kcyB3aGVuIFwKK3RoZSBzeXN0ZW0gbG9hZCBsZXZlbHMgZHJvcCB0byBhIHBhcnRpY3VsYXIgbGV2ZWwuIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00MzI1YWZkMzk2ZmViY2I2NTljMzZiNDk1MzMxMzVkNCIKK0RFUEVORFMgPSAiZmxleCBmbGV4LW5hdGl2ZSBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2xpYnBhbScsICcnLCBkKX0iCisKK1JERVBFTkRTXyR7UE59ID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJyR7UEFNX0RFUFN9JywgJycsIGQpfSBcCisiCisKK1BBTV9ERVBTID0gImxpYnBhbSBsaWJwYW0tcnVudGltZSBwYW0tcGx1Z2luLWVudiBwYW0tcGx1Z2luLWxpbWl0cyIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJhdGQiCitSUkVQTEFDRVNfJHtQTn0gPSAiYXRkIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9hL2F0L2F0XyR7UFZ9Lm9yaWcudGFyLmd6IFwKKyAgICBmaWxlOi8vZml4X3BhcmFsbGVsX2J1aWxkX2Vycm9yLnBhdGNoIFwKKyAgICBmaWxlOi8vcG9zaXh0bS5jIFwKKyAgICBmaWxlOi8vcG9zaXh0bS5oIFwKKyAgICBmaWxlOi8vZmlsZV9yZXBsYWNlbWVudF93aXRoX2dwbHYyLnBhdGNoIFwKKyAgICBmaWxlOi8vYXRkLmluaXQgXAorICAgIGZpbGU6Ly9hdGQuc2VydmljZSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fU1JDX1VSSX0nLCAnJywgZCl9IFwKKyAgICBmaWxlOi8vbWFrZWZpbGUtZml4LXBhcmFsbGVsLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMS1yZW1vdmUtZ2xpYmMtYXNzdW1wdGlvbi5wYXRjaCBcCisgICAgIgorCitQQU1fU1JDX1VSSSA9ICJmaWxlOi8vcGFtLmNvbmYucGF0Y2ggXAorICAgICAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS1hZGQtZW5hYmxlLXBhbS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImQwNWRhNzVkOWI3NWQ5MzkxN2ZmYjE2YWI0OGIxZTE5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNiOWFmNTljNmE1NGVkY2U5NTM2YmE2Mjk4NDEwNTU0MDlkMWY4OWQ4YWUyNjQ5NDcyN2E5NzE0MWZiNGQ1YzEiCisKK0VYVFJBX09FQ09ORiArPSAiYWNfY3ZfcGF0aF9TRU5ETUFJTD0vYmluL3RydWUgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtZGFlbW9uX3VzZXJuYW1lPXJvb3QgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtZGFlbW9uX2dyb3VwbmFtZT1yb290IFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWpvYmRpcj0vdmFyL3Nwb29sL2F0L2pvYnMgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtYXRzcG9vbD0vdmFyL3Nwb29sL2F0L3Nwb29sIFwKKyAgICAgICAgICAgICAgICAgYWNfY3ZfaGVhZGVyX3NlY3VyaXR5X3BhbV9hcHBsX2g9JHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAneWVzJywgJ25vJywgZCl9ICIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHN5c3RlbWQgdXBkYXRlLXJjLmQKKworSU5JVFNDUklQVF9OQU1FID0gImF0ZCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiYXRkLnNlcnZpY2UiCisKKworZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKwljcCAtZiAke1dPUktESVJ9L3Bvc2l4dG0uW2NoXSAke1N9Cit9CisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgLWUgIklST09UPSR7RH0iIGluc3RhbGwKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vYXRkLmluaXQJCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9hdGQKKworCSMgaW5zdGFsbCBzeXN0ZW1kIHVuaXQgZmlsZXMKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vYXRkLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vYXRkLnNlcnZpY2UKKworCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0iID0gInBhbSIgXTsgdGhlbgorCQlpbnN0YWxsIC1EIC1tIDA2NDQgJHtXT1JLRElSfS8ke0JQfS9wYW0uY29uZiAke0R9JHtzeXNjb25mZGlyfS9wYW0uZC9hdGQKKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2QxMmNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy5pbmMKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJBdWdlYXMgY29uZmlndXJhdGlvbiBBUEkiCitIT01FUEFHRSA9ICJodHRwOi8vYXVnZWFzLm5ldC8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9hdWdlYXMvcmVwb3J0LzEiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YmJiNDYxMjExYTMzYjEzNGQ0MmVkNWVlODAyYjM3ZmYiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLmF1Z2Vhcy5uZXQvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1taXNzaW5nLWFyZ3otY29uZGl0aW9uYWwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2VwYnVpbGRmaXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCisgICAgICAgICAgIgorCitERVBFTkRTID0gInJlYWRsaW5lIGxpYnhtbDIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitQQUNLQUdFUyA9KyAiJHtQTn0tbGVuc2VzIGxpYiR7QlBOfSIKKworRklMRVNfJHtQTn0tbGVuc2VzID0gIiR7ZGF0YWRpcn0vYXVnZWFzL2xlbnNlcyIKK0ZJTEVTX2xpYiR7QlBOfSA9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTfSIKKworUkRFUEVORFNfbGliJHtCUE59ICs9ICIke1BOfS1sZW5zZXMiCitSUkVDT01NRU5EU19saWIke0JQTn0gKz0gIiR7UE59IgorCitMRUFEX1NPTkFNRSA9ICJsaWJhdWdlYXMuc28iCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtIC1mciAke0R9JHtkYXRhZGlyfS92aW0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTE5ODc2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGF1Z2Vhcy0xLjIuMC9nbnVsaWIvbGliL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXVnZWFzLTEuMi4wLm9yaWcvZ251bGliL2xpYi9NYWtlZmlsZS5hbQorKysrIGF1Z2Vhcy0xLjIuMC9nbnVsaWIvbGliL01ha2VmaWxlLmFtCitAQCAtNDYzLDcgKzQ2Myw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzL2FkZC1taXNzaW5nLWFyZ3otY29uZGl0aW9uYWwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzL2FkZC1taXNzaW5nLWFyZ3otY29uZGl0aW9uYWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJiZGJhYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXMvYWRkLW1pc3NpbmctYXJnei1jb25kaXRpb25hbC5wYXRjaApAQCAtMCwwICsxLDIwIEBACitBZGQgbWlzc2luZyBHTF9HRU5FUkFURV9BUkdaX0ggY29uZGl0aW9uYWwKKworLSBHTF9HRU5FUkFURV9BUkdaX0ggaXMgdXNlZCBpbiBnbnVsaWIvbGliL01ha2VmaWxlLmFtCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitJbmRleDogYXVnZWFzLTEuMC4wL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF1Z2Vhcy0xLjAuMC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGF1Z2Vhcy0xLjAuMC9jb25maWd1cmUuYWMKK0BAIC01NSw2ICs1NSw4IEBAIEFDX0FSR19XSVRIKFtmYWlsbWFsbG9jXSwKKyAKKyBBTV9DT05ESVRJT05BTChbV0lUSF9GQUlMTUFMTE9DXSwgW3Rlc3QgeCR3aXRoX2ZhaWxtYWxsb2MgIT0geG5vXSkKKyAKKytBTV9DT05ESVRJT05BTChbR0xfR0VORVJBVEVfQVJHWl9IXSwgW3Rlc3QgLW4gIiRBUkdaX0giXSkKKysKKyBkbmwgLS1lbmFibGUtZGVidWc9KHllc3xubykKKyBBQ19BUkdfRU5BQkxFKFtkZWJ1Z10sCisgICAgICAgICAgICAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWRlYnVnPW5vL3llc10sCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzL3NlcGJ1aWxkZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy9zZXBidWlsZGZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODJhM2VlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy9zZXBidWlsZGZpeC5wYXRjaApAQCAtMCwwICsxLDIyIEBACitFbnN1cmUgdGhhdCBidWlsZHMgaW4gc2VwYXJhdGUgYnVpbGRkaXJzICgke0J9ICE9ICR7U30pIGNvcnJlY3RseSBpbnN0YWxsIHRoZSAKK2xlbnNlcyBmaWxlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JQIDIwMTMvNC8xNworCitJbmRleDogYXVnZWFzLTEuMC4wL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXVnZWFzLTEuMC4wLm9yaWcvTWFrZWZpbGUuYW0JMjAxMi0xMS0wMiAxNToyMDoxMS4wMDAwMDAwMDAgKzAwMDAKKysrKyBhdWdlYXMtMS4wLjAvTWFrZWZpbGUuYW0JMjAxMy0wNC0xNyAxMDozNjoyNC4wMzM0MDAxMjUgKzAwMDAKK0BAIC01LDggKzUsOCBAQAorIGxlbnNkaXI9JChkYXRhZGlyKS9hdWdlYXMvbGVuc2VzL2Rpc3QKKyBsZW5zdGVzdGRpcj0kKGRhdGFkaXIpL2F1Z2Vhcy9sZW5zZXMvZGlzdC90ZXN0cworIAorLWRpc3RfbGVuc19EQVRBPSQod2lsZGNhcmQgbGVuc2VzLyouYXVnKQorLWRpc3RfbGVuc3Rlc3RfREFUQT0kKHdpbGRjYXJkIGxlbnNlcy90ZXN0cy8qLmF1ZykKKytkaXN0X2xlbnNfREFUQT0kKHdpbGRjYXJkICQodG9wX3NyY2RpcikvbGVuc2VzLyouYXVnKQorK2Rpc3RfbGVuc3Rlc3RfREFUQT0kKHdpbGRjYXJkICQodG9wX3NyY2RpcilsZW5zZXMvdGVzdHMvKi5hdWcpCisgCisgRVhUUkFfRElTVD1hdWdlYXMuc3BlYyBidWlsZC9hdXgvbW92ZS1pZi1jaGFuZ2UgTWFrZWZpbGUuYW0gSEFDS0lORworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhc18xLjQuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXNfMS40LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA2NGFkNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXNfMS40LjAuYmIKQEAgLTAsMCArMSw0IEBACityZXF1aXJlIGF1Z2Vhcy5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gImEyNTM2YTljM2Q3NDRkYzA5ZDIzNDIyOGZlNGIwYzkzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY1OWZhZTdhYzIyOTAyOWU2MGE4NjlhM2I4OGM2MTZjZmQ1MWNmMmZiYTI4NmNkZmUzYWYzYTA1MmNiMzViMzAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L2J1aWxkLXRlc3RzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC9idWlsZC10ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTM0MWVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC9idWlsZC10ZXN0cy5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitBZGQgJ3B0ZXN0JyB0YXJnZXQgdG8gTWFrZWZpbGUsIHRvIHJ1biB0ZXN0cyB3aXRob3V0IGNoZWNraW5nIGRlcGVuZGVuY2llcy4KKworU2lnbmVkLW9mZi1ieTogQW5kZXJzIFJveGVsbCA8YW5kZXJzLnJveGVsbEBlbmVhLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCitkaWZmIC1kTmF1ciBiYXNoLTMuMi40OC9NYWtlZmlsZS5pbi5vcmlnIGJhc2gtMy4yLjQ4L01ha2VmaWxlLmluCistLS0gYmFzaC0zLjIuNDgvTWFrZWZpbGUuaW4ub3JpZwkyMDA2LTA4LTE3IDIzOjAzOjM1LjAwMDAwMDAwMCArMDUwMAorKysrIGJhc2gtMy4yLjQ4L01ha2VmaWxlLmluCTIwMTMtMDctMDIgMjA6MjA6MDcuNTEyNzA5MzI3ICswNTAwCitAQCAtODAzLDE3ICs4MDMsMzEgQEAKKyAJZmkKKyAKKyByZWNobyQoRVhFRVhUKToJCSQoU1VQUE9SVF9TUkMpcmVjaG8uYworLQlAJChDQ19GT1JfQlVJTEQpICQoQ0NGTEFHU19GT1JfQlVJTEQpIC1vICRAICQoU1VQUE9SVF9TUkMpcmVjaG8uYyAke0xJQlNfRk9SX0JVSUxEfQorKwlAJChDQykgJChDQ0ZMQUdTKSAtbyAkQCAkPAorIAorIHplY2hvJChFWEVFWFQpOgkJJChTVVBQT1JUX1NSQyl6ZWNoby5jCistCUAkKENDX0ZPUl9CVUlMRCkgJChDQ0ZMQUdTX0ZPUl9CVUlMRCkgLW8gJEAgJChTVVBQT1JUX1NSQyl6ZWNoby5jICR7TElCU19GT1JfQlVJTER9CisrCUAkKENDKSAkKENDRkxBR1MpIC1vICRAICQ8CisgCisgcHJpbnRlbnYkKEVYRUVYVCk6CSQoU1VQUE9SVF9TUkMpcHJpbnRlbnYuYworLQlAJChDQ19GT1JfQlVJTEQpICQoQ0NGTEFHU19GT1JfQlVJTEQpIC1vICRAICQoU1VQUE9SVF9TUkMpcHJpbnRlbnYuYyAke0xJQlNfRk9SX0JVSUxEfQorKwlAJChDQykgJChDQ0ZMQUdTKSAtbyAkQCAkPAorIAorLXRlc3QgdGVzdHMgY2hlY2s6CWZvcmNlICQoUHJvZ3JhbSkgJChURVNUU19TVVBQT1JUKQorK3Rlc3QgdGVzdHMgY2hlY2s6CisrCUAkKE1BS0UpIGluc3RhbGwtdGVzdAorKwlAJChNQUtFKSBydW50ZXN0CisrCisraW5zdGFsbC10ZXN0OiBidWlsZHRlc3QKKytpZmVxICgkKG9yaWdpbiBJTlNUQUxMX1RFU1RfRElSKSwgdW5kZWZpbmVkKQorIAlALXRlc3QgLWQgdGVzdHMgfHwgbWtkaXIgdGVzdHMKKyAJQGNwICQoVEVTVFNfU1VQUE9SVCkgdGVzdHMKKytlbHNlCisrCUAtdGVzdCAtZCAkKElOU1RBTExfVEVTVF9ESVIpIHx8IG1rZGlyIC1wICQoSU5TVEFMTF9URVNUX0RJUikKKysJQGNwIC1yICQoc3JjZGlyKS90ZXN0cy8qICQoSU5TVEFMTF9URVNUX0RJUikvCisrCUBjcCAkKFRFU1RTX1NVUFBPUlQpICQoSU5TVEFMTF9URVNUX0RJUikKKytlbmRpZgorKworK2J1aWxkdGVzdDogZm9yY2UgJChQcm9ncmFtKSAkKFRFU1RTX1NVUFBPUlQpCisrCisrcnVudGVzdDoKKyAJQCggY2QgJChzcmNkaXIpL3Rlc3RzICYmIFwKKyAJCVBBVEg9JChCVUlMRF9ESVIpL3Rlc3RzOiQkUEFUSCBUSElTX1NIPSQoVEhJU19TSCkgJChTSEVMTCkgJHtURVNUU0NSSVBUfSApCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L2RvbnQtaW5jbHVkZS10YXJnZXQtQ0ZMQUdTLWluLWhvc3QtTERGTEFHUy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvZG9udC1pbmNsdWRlLXRhcmdldC1DRkxBR1MtaW4taG9zdC1MREZMQUdTLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNzU2ZGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L2RvbnQtaW5jbHVkZS10YXJnZXQtQ0ZMQUdTLWluLWhvc3QtTERGTEFHUy5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDkzM2JkODg2YWY0OTY2N2U4OGUyMzg1NDA5NDQ5YWI1OTg4MTNkYWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgorRGF0ZTogV2VkLCAxNSBKdWwgMjAxNSAwMDo1NDozMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBkb250IGluY2x1ZGUgdGFyZ2V0IENGTEFHUyBpbiBob3N0IExERkxBR1MKKworQnVpbGRpbmcgdGhlIGhvc3QgdG9vbCAnbWtidWlsdGlucycgd2lsbCBmYWlsIGlmIHRoZSB0YXJnZXQgQ0ZMQUdTCitjb250YWlucyBhbiBvcHRpb24gd2hpY2ggaXNuJ3Qgc3VwcG9ydGVkIGJ5IHRoZSBob3N0J3MgZ2NjLiBUbyBwcmV2ZW50Cit0aGUgaXNzdWUsIGRlZmluZSBMREZMQUdTX0ZPUl9CVUlMRCBiYXNlZCBvbiBDRkxBR1NfRk9SX0JVSUxEIGluc3RlYWQKK29mIENGTEFHUy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtyZXF1aXJlZCBmb3IgYmFzaCAzLjIuNTcgKEdQTHYyKSByZWNpcGUgb25seV0KKworU2lnbmVkLW9mZi1ieTogQW5kcmUgTWNDdXJkeSA8YXJtY2N1cmR5QGdtYWlsLmNvbT4KKy0tLQorIGJ1aWx0aW5zL01ha2VmaWxlLmluIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYnVpbHRpbnMvTWFrZWZpbGUuaW4gYi9idWlsdGlucy9NYWtlZmlsZS5pbgoraW5kZXggZTAyN2Y3YS4uZWJmZGRmMyAxMDA2NDQKKy0tLSBhL2J1aWx0aW5zL01ha2VmaWxlLmluCisrKysgYi9idWlsdGlucy9NYWtlZmlsZS5pbgorQEAgLTYzLDcgKzYzLDcgQEAgTE9DQUxfREVGUyA9IEBMT0NBTF9ERUZTQAorIAorIExJQlMgPSBATElCU0AKKyBMREZMQUdTID0gQExERkxBR1NAICQoTE9DQUxfTERGTEFHUykgJChDRkxBR1MpCistTERGTEFHU19GT1JfQlVJTEQgPSAkKExERkxBR1MpCisrTERGTEFHU19GT1JfQlVJTEQgPSBATERGTEFHU19GT1JfQlVJTERAICQoTE9DQUxfTERGTEFHUykgJChDRkxBR1NfRk9SX0JVSUxEKQorIExPQ0FMX0xERkxBR1MgPSBATE9DQUxfTERGTEFHU0AKKyAjTElCU19GT1JfQlVJTEQgPSBATElCU19GT1JfQlVJTERACisgTElCU19GT1JfQlVJTEQgPSAkKExJQlMpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvbWtidWlsdGluc19oYXZlX3N0cmluZ2l6ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvbWtidWlsdGluc19oYXZlX3N0cmluZ2l6ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDIyOWE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC9ta2J1aWx0aW5zX2hhdmVfc3RyaW5naXplLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK09uIGhvc3RzIHdpdGggRk9SVElGWV9TT1VSQ0VTLCBzdHJpbmdpemUgc3VwcG9ydCBpcyByZXF1aXJlZCwgYXMgaXQncyB1c2VkIGJ5Cit0aGUgbWFjcm9zIHRvIHdyYXAgZnVuY3Rpb25zIChlLmcuIHJlYWQgYW5kIG9wZW4gaW4gdW5pc3RkLmgpLiBUaG9zZSB3cmFwcGVycwordXNlIHRoZSBTVFJJTkcoKSBtYWNybyBmcm9tIHVuaXN0ZC5oLiBBIGhlYWRlciBpbiB0aGUgYmFzaCBzb3VyY2VzIG92ZXJyaWRlcwordGhlIHVuaXN0ZC5oIG1hY3JvIHRvICd4JyB3aGVuIEhBVkVfU1RSSU5HSVpFIGlzIG5vdCBkZWZpbmVkLCBjYXVzaW5nIHRoZQord3JhcHBlcnMgdG8gZ2VuZXJhdGUgY2FsbHMgdG8gJ3hyZWFkJyBhbmQgJ3hvcGVuJywgd2hpY2ggZG8gbm90IGV4aXN0LAorcmVzdWx0aW5nIGluIGEgZmFpbHVyZSB0byBsaW5rLgorCitBc3N1bWUgd2UgaGF2ZSBzdHJpbmdpemUgc3VwcG9ydCB3aGVuIGNyb3NzLWNvbXBpbGluZywgd2hpY2ggd29ya3MgYXJvdW5kIHRoZQoraXNzdWUuCisKK0l0IG1heSBiZSBiZXN0IGZvciB1cHN0cmVhbSB0byBlaXRoZXIgZ2l2ZSB1cCBvbiBzdXBwb3J0aW5nIGNvbXBpbGVycyB3aXRob3V0CitzdHJpbmdpemUgc3VwcG9ydCwgb3IgdG8gbm90IGRlZmluZSBTVFJJTkcoKSBhdCBhbGwgd2hlbiBGT1JUSUZZX1NPVVJDRVMgaXMKK2RlZmluZWQsIGxldHRpbmcgdGhlIHVuaXN0ZC5oIG9uZSBiZSB1c2VkLCBpbnN0ZWFkLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoZXIgTGFyc29uIDxjaHJpc19sYXJzb25AbWVudG9yLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworLS0tIGJhc2gtNC4yLm9yaWcvYnVpbHRpbnMvbWtidWlsdGlucy5jCisrKysgYmFzaC00LjIvYnVpbHRpbnMvbWtidWlsdGlucy5jCitAQCAtMjgsNiArMjgsNyBAQAorICMgIGRlZmluZSBIQVZFX1NURExJQl9ICisKKyAjICBkZWZpbmUgSEFWRV9SRU5BTUUKKysjICBkZWZpbmUgSEFWRV9TVFJJTkdJWkUKKyAjZW5kaWYgLyogQ1JPU1NfQ09NUElMSU5HICovCisKKyAjaWYgZGVmaW5lZCAoSEFWRV9VTklTVERfSCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRkM2I5OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL3NoCittYWtlIC1rIFRISVNfU0g9L2Jpbi9iYXNoIEJVSUxEX0RJUj0uIHJ1bnRlc3QKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvdGVzdC1vdXRwdXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L3Rlc3Qtb3V0cHV0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMDliN2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L3Rlc3Qtb3V0cHV0LnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK0FkZCBGQUlML1BBU1Mgb3V0cHV0IHRvIHRlc3Qgb3V0cHV0LgorCitTaWduZWQtb2ZmLWJ5OiBCasO2cm4gU3RlbmJlcmcgPGJqc3RAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorZGlmZiAtdU5yIGEvdGVzdHMvcnVuLWFsbCBiL3Rlc3RzL3J1bi1hbGwKKy0tLSBhL3Rlc3RzL3J1bi1hbGwJMTk5OS0xMC0wOCAxNzowNzo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBiL3Rlc3RzL3J1bi1hbGwJMjAxMi0xMC0yNyAyMTowNDoxOC42NjMzMzE4ODcgKzAyMDAKK0BAIC0yMiw3ICsyMiwxNSBAQAorIAljYXNlICR4IGluCisgCSQwfHJ1bi1taW5pbWFsfHJ1bi1ncHJvZikJOzsKKyAJKi5vcmlnfCp+KSA7OworLQkqKQllY2hvICR4IDsgc2ggJHggOzsKKysgICAgKikgIGVjaG8gJHgKKysgICAgICAgICBvdXRwdXQ9YHNoICR4YAorKyAgICAgICAgIGlmIFsgLW4gIiRvdXRwdXQiIF07IHRoZW4KKysgICAgICAgICAgICAgZWNobyAiJG91dHB1dCIKKysgICAgICAgICAgICAgZWNobyAiRkFJTDogJHgiCisrICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICBlY2hvICJQQVNTOiAkeCIKKysgICAgICAgICBmaQorKyAgICAgICAgIDs7CisgCWVzYWMKKyBkb25lCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2guaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDZmMTU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLmluYwpAQCAtMCwwICsxLDYwIEBACitTVU1NQVJZID0gIkFuIHNoLWNvbXBhdGlibGUgY29tbWFuZCBsYW5ndWFnZSBpbnRlcnByZXRlciIKK0hPTUVQQUdFID0gImh0dHA6Ly90aXN3d3cuY2FzZS5lZHUvcGhwL2NoZXQvYmFzaC9iYXNodG9wLmh0bWwiCitTRUNUSU9OID0gImJhc2Uvc2hlbGwiCisKK0RFUEVORFMgPSAibmN1cnNlcyBiaXNvbi1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbyB1cGRhdGUtYWx0ZXJuYXRpdmVzIHB0ZXN0CisKK0VYVFJBX0FVVE9SRUNPTkYgKz0gIi0tZXhjbHVkZT1hdXRvaGVhZGVyIgorRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLWpvYi1jb250cm9sIgorCisjIElmIE5PTl9JTlRFUkFDVElWRV9MT0dJTl9TSEVMTFMgaXMgZGVmaW5lZCwgYWxsIGxvZ2luIHNoZWxscyByZWFkIHRoZQorIyBzdGFydHVwIGZpbGVzLCBldmVuIGlmIHRoZXkgYXJlIG5vdCBpbnRlcmFjdGl2ZS4KKyMgVGhpcyBpcyB3aGF0IG90aGVyIG1ham9yIGRpc3Ryb3MgZG8uIEFuZCB0aGlzIGlzIHdoYXQgd2Ugd2FudGVkLiBTZWUgYnVnIzUzNTkgYW5kIGJ1ZyM3MTM3LgorQ0ZMQUdTICs9ICItRE5PTl9JTlRFUkFDVElWRV9MT0dJTl9TSEVMTFMiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gInNoIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3NoXSA9ICIke2Jhc2VfYmluZGlyfS9zaCIKK0FMVEVSTkFUSVZFX1RBUkdFVFtzaF0gPSAiJHtiYXNlX2JpbmRpcn0vYmFzaCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworUkRFUEVORFNfJHtQTn0gKz0gImJhc2UtZmlsZXMiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIm1ha2UiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlpZiBbICEgLWUgJHtTfS9hY2luY2x1ZGUubTQgXTsgdGhlbgorCQljYXQgJHtTfS9hY2xvY2FsLm00ID4gJHtTfS9hY2luY2x1ZGUubTQKKwlmaQorfQorCitkb19jb21waWxlX3B0ZXN0ICgpIHsKKwlvZV9ydW5tYWtlIGJ1aWxkdGVzdAorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJIyBNb3ZlIC91c3IvYmluL2Jhc2ggdG8gL2Jpbi9iYXNoLCBpZiBuZWVkCisJaWYgWyAiJHtiYXNlX2JpbmRpcn0iICE9ICIke2JpbmRpcn0iIF07IHRoZW4KKwkJbWtkaXIgLXAgJHtEfSR7YmFzZV9iaW5kaXJ9CisJCW12ICR7RH0ke2JpbmRpcn0vYmFzaCAke0R9JHtiYXNlX2JpbmRpcn0KKwlmaQorfQorZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0ICgpIHsKKwkjIENsZWFuIGhvc3QgcGF0aCBpbiBiYXNoYnVnCisJc2VkIC1pIC1lICJzLCR7U1RBR0lOR19ESVJfVEFSR0VUfSwsZyIgJHtEfSR7YmluZGlyfS9iYXNoYnVnCit9CisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworCW1ha2UgSU5TVEFMTF9URVNUX0RJUj0ke0R9JHtQVEVTVF9QQVRIfS90ZXN0cyBpbnN0YWxsLXRlc3QKKwljcCAke0J9L01ha2VmaWxlICR7RH0ke1BURVNUX1BBVEh9CisgICAgICAgIHNlZCAtaSAncy9eTWFrZWZpbGUvX01ha2VmaWxlLycgJHtEfSR7UFRFU1RfUEFUSH0vTWFrZWZpbGUKK30KKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlncmVwIC1xICJeJHtiYXNlX2JpbmRpcn0vYmFzaCQiICREJHtzeXNjb25mZGlyfS9zaGVsbHMgfHwgZWNobyAke2Jhc2VfYmluZGlyfS9iYXNoID4+ICREJHtzeXNjb25mZGlyfS9zaGVsbHMKK30KKworcGtnX3Bvc3RybV8ke1BOfSAoKSB7CisJcHJpbnRmICIkKGdyZXAgLXYgIl4ke2Jhc2VfYmluZGlyfS9iYXNoJCIgJEQke3N5c2NvbmZkaXJ9L3NoZWxscylcbiIgPiAkRCR7c3lzY29uZmRpcn0vc2hlbGxzCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvYnVpbGQtdGVzdHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvYnVpbGQtdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNhODFiNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC9idWlsZC10ZXN0cy5wYXRjaApAQCAtMCwwICsxLDU1IEBACitBZGQgJ3B0ZXN0JyB0YXJnZXQgdG8gTWFrZWZpbGUsIHRvIHJ1biB0ZXN0cyB3aXRob3V0IGNoZWNraW5nIGRlcGVuZGVuY2llcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBBbmRlcnMgUm94ZWxsIDxhbmRlcnMucm94ZWxsQGVuZWEuY29tPgorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCAyNCArKysrKysrKysrKysrKysrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTg0OCwyMCArODQ4LDM0IEBAIG1heWJlLWNsZWFuOgorIAlmaQorIAorIHJlY2hvJChFWEVFWFQpOgkJJChTVVBQT1JUX1NSQylyZWNoby5jCistCUAkKENDX0ZPUl9CVUlMRCkgJChDQ0ZMQUdTX0ZPUl9CVUlMRCkgJHtMREZMQUdTX0ZPUl9CVUlMRH0gLW8gJEAgJChTVVBQT1JUX1NSQylyZWNoby5jICR7TElCU19GT1JfQlVJTER9CisrCUAkKENDKSAkKENDRkxBR1MpICR7TERGTEFHU30gLW8gJEAgJDwKKyAKKyB6ZWNobyQoRVhFRVhUKToJCSQoU1VQUE9SVF9TUkMpemVjaG8uYworLQlAJChDQ19GT1JfQlVJTEQpICQoQ0NGTEFHU19GT1JfQlVJTEQpICR7TERGTEFHU19GT1JfQlVJTER9IC1vICRAICQoU1VQUE9SVF9TUkMpemVjaG8uYyAke0xJQlNfRk9SX0JVSUxEfQorKwlAJChDQykgJChDQ0ZMQUdTKSAke0xERkxBR1N9IC1vICRAICQ8CisgCisgcHJpbnRlbnYkKEVYRUVYVCk6CSQoU1VQUE9SVF9TUkMpcHJpbnRlbnYuYworLQlAJChDQ19GT1JfQlVJTEQpICQoQ0NGTEFHU19GT1JfQlVJTEQpICR7TERGTEFHU19GT1JfQlVJTER9IC1vICRAICQoU1VQUE9SVF9TUkMpcHJpbnRlbnYuYyAke0xJQlNfRk9SX0JVSUxEfQorKwlAJChDQykgJChDQ0ZMQUdTKSAke0xERkxBR1N9IC1vICRAICQ8CisgCisgeGNhc2UkKEVYRUVYVCk6CSQoU1VQUE9SVF9TUkMpeGNhc2UuYworLQlAJChDQ19GT1JfQlVJTEQpICQoQ0NGTEFHU19GT1JfQlVJTEQpICR7TERGTEFHU19GT1JfQlVJTER9IC1vICRAICQoU1VQUE9SVF9TUkMpeGNhc2UuYyAke0xJQlNfRk9SX0JVSUxEfQorKwlAJChDQykgJChDQ0ZMQUdTKSAke0xERkxBR1N9IC1vICRAICQ8CisgCistdGVzdCB0ZXN0cyBjaGVjazoJZm9yY2UgJChQcm9ncmFtKSAkKFRFU1RTX1NVUFBPUlQpCisrdGVzdCB0ZXN0cyBjaGVjazoKKysJQCQoTUFLRSkgaW5zdGFsbC10ZXN0CisrCUAkKE1BS0UpIHJ1bnRlc3QKKysKKytpbnN0YWxsLXRlc3Q6IGJ1aWxkdGVzdAorK2lmZXEgKCQob3JpZ2luIElOU1RBTExfVEVTVF9ESVIpLCB1bmRlZmluZWQpCisgCUAtdGVzdCAtZCB0ZXN0cyB8fCBta2RpciB0ZXN0cworIAlAY3AgJChURVNUU19TVVBQT1JUKSB0ZXN0cworK2Vsc2UKKysJQC10ZXN0IC1kICQoSU5TVEFMTF9URVNUX0RJUikgfHwgbWtkaXIgLXAgJChJTlNUQUxMX1RFU1RfRElSKQorKwlAY3AgLXIgJChzcmNkaXIpL3Rlc3RzLyogJChJTlNUQUxMX1RFU1RfRElSKS8KKysJQGNwICQoVEVTVFNfU1VQUE9SVCkgJChJTlNUQUxMX1RFU1RfRElSKQorK2VuZGlmCisrCisrYnVpbGR0ZXN0OiBmb3JjZSAkKFByb2dyYW0pICQoVEVTVFNfU1VQUE9SVCkKKysKKytydW50ZXN0OgorIAlAKCBjZCAkKHNyY2RpcikvdGVzdHMgJiYgXAorIAkJUEFUSD0kKEJVSUxEX0RJUikvdGVzdHM6JCRQQVRIIFRISVNfU0g9JChUSElTX1NIKSAkKFNIRUxMKSAke1RFU1RTQ1JJUFR9ICkKKyAKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvZXhlY3V0ZV9jbWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvZXhlY3V0ZV9jbWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFmOGYwYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC9leGVjdXRlX2NtZC5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCistLS0gZXhlY3V0ZV9jbWQuYy5vcmlnCUZyaSBKdW4gIDMgMTM6MzQ6NDIgMjAxMQorKysrIGV4ZWN1dGVfY21kLmMJRnJpIEp1biAgMyAxMzozNjo0MSAyMDExCitAQCAtMjIwMiw3ICsyMjAyLDExIEBACisgICAvKiBJZiB0aGUgYGxhc3RwaXBlJyBvcHRpb24gaXMgc2V0IHdpdGggc2hvcHQsIGFuZCBqb2IgY29udHJvbCBpcyBub3QKKyAgICAgIGVuYWJsZWQsIGV4ZWN1dGUgdGhlIGxhc3QgZWxlbWVudCBvZiBub24tYXN5bmMgcGlwZWxpbmVzIGluIHRoZQorICAgICAgY3VycmVudCBzaGVsbCBlbnZpcm9ubWVudC4gKi8KKy0gIGlmIChsYXN0cGlwZV9vcHQgJiYgam9iX2NvbnRyb2wgPT0gMCAmJiBhc3luY2hyb25vdXMgPT0gMCAmJiBwaXBlX291dCA9PSBOT19QSVBFICYmIHByZXYgPiAwKQorKyAgaWYgKGxhc3RwaXBlX29wdCAmJiAKKysjaWYgZGVmaW5lZChKT0JfQ09OVFJPTCkKKysJCWpvYl9jb250cm9sID09IDAgJiYgCisrI2VuZGlmCisrCQlhc3luY2hyb25vdXMgPT0gMCAmJiBwaXBlX291dCA9PSBOT19QSVBFICYmIHByZXYgPiAwKQorICAgICB7CisgICAgICAgbHN0ZGluID0gbW92ZV90b19oaWdoX2ZkICgwLCAwLCAyNTUpOworICAgICAgIGlmIChsc3RkaW4gPiAwKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL21rYnVpbHRpbnNfaGF2ZV9zdHJpbmdpemUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvbWtidWlsdGluc19oYXZlX3N0cmluZ2l6ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTM5MWQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL21rYnVpbHRpbnNfaGF2ZV9zdHJpbmdpemUucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorT24gaG9zdHMgd2l0aCBGT1JUSUZZX1NPVVJDRVMsIHN0cmluZ2l6ZSBzdXBwb3J0IGlzIHJlcXVpcmVkLCBhcyBpdCdzIHVzZWQgYnkKK3RoZSBtYWNyb3MgdG8gd3JhcCBmdW5jdGlvbnMgKGUuZy4gcmVhZCBhbmQgb3BlbiBpbiB1bmlzdGQuaCkuIFRob3NlIHdyYXBwZXJzCit1c2UgdGhlIFNUUklORygpIG1hY3JvIGZyb20gdW5pc3RkLmguIEEgaGVhZGVyIGluIHRoZSBiYXNoIHNvdXJjZXMgb3ZlcnJpZGVzCit0aGUgdW5pc3RkLmggbWFjcm8gdG8gJ3gnIHdoZW4gSEFWRV9TVFJJTkdJWkUgaXMgbm90IGRlZmluZWQsIGNhdXNpbmcgdGhlCit3cmFwcGVycyB0byBnZW5lcmF0ZSBjYWxscyB0byAneHJlYWQnIGFuZCAneG9wZW4nLCB3aGljaCBkbyBub3QgZXhpc3QsCityZXN1bHRpbmcgaW4gYSBmYWlsdXJlIHRvIGxpbmsuCisKK0Fzc3VtZSB3ZSBoYXZlIHN0cmluZ2l6ZSBzdXBwb3J0IHdoZW4gY3Jvc3MtY29tcGlsaW5nLCB3aGljaCB3b3JrcyBhcm91bmQgdGhlCitpc3N1ZS4KKworSXQgbWF5IGJlIGJlc3QgZm9yIHVwc3RyZWFtIHRvIGVpdGhlciBnaXZlIHVwIG9uIHN1cHBvcnRpbmcgY29tcGlsZXJzIHdpdGhvdXQKK3N0cmluZ2l6ZSBzdXBwb3J0LCBvciB0byBub3QgZGVmaW5lIFNUUklORygpIGF0IGFsbCB3aGVuIEZPUlRJRllfU09VUkNFUyBpcworZGVmaW5lZCwgbGV0dGluZyB0aGUgdW5pc3RkLmggb25lIGJlIHVzZWQsIGluc3RlYWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gYmFzaC00LjIub3JpZy9idWlsdGlucy9ta2J1aWx0aW5zLmMKKysrKyBiYXNoLTQuMi9idWlsdGlucy9ta2J1aWx0aW5zLmMKK0BAIC0yOCw2ICsyOCw3IEBACisgIyAgZGVmaW5lIEhBVkVfU1RETElCX0gKKworICMgIGRlZmluZSBIQVZFX1JFTkFNRQorKyMgIGRlZmluZSBIQVZFX1NUUklOR0laRQorICNlbmRpZiAvKiBDUk9TU19DT01QSUxJTkcgKi8KKworICNpZiBkZWZpbmVkIChIQVZFX1VOSVNURF9IKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNmODEzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC9ydW4tcHRlc3QKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vc2gKK21ha2UgLWsgVEhJU19TSD0vYmluL2Jhc2ggQlVJTERfRElSPS4gc3JjZGlyPS4gIHJ1bnRlc3QKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC90ZXN0LW91dHB1dC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC90ZXN0LW91dHB1dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjA5YjdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL3Rlc3Qtb3V0cHV0LnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK0FkZCBGQUlML1BBU1Mgb3V0cHV0IHRvIHRlc3Qgb3V0cHV0LgorCitTaWduZWQtb2ZmLWJ5OiBCasO2cm4gU3RlbmJlcmcgPGJqc3RAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorZGlmZiAtdU5yIGEvdGVzdHMvcnVuLWFsbCBiL3Rlc3RzL3J1bi1hbGwKKy0tLSBhL3Rlc3RzL3J1bi1hbGwJMTk5OS0xMC0wOCAxNzowNzo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBiL3Rlc3RzL3J1bi1hbGwJMjAxMi0xMC0yNyAyMTowNDoxOC42NjMzMzE4ODcgKzAyMDAKK0BAIC0yMiw3ICsyMiwxNSBAQAorIAljYXNlICR4IGluCisgCSQwfHJ1bi1taW5pbWFsfHJ1bi1ncHJvZikJOzsKKyAJKi5vcmlnfCp+KSA7OworLQkqKQllY2hvICR4IDsgc2ggJHggOzsKKysgICAgKikgIGVjaG8gJHgKKysgICAgICAgICBvdXRwdXQ9YHNoICR4YAorKyAgICAgICAgIGlmIFsgLW4gIiRvdXRwdXQiIF07IHRoZW4KKysgICAgICAgICAgICAgZWNobyAiJG91dHB1dCIKKysgICAgICAgICAgICAgZWNobyAiRkFJTDogJHgiCisrICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICBlY2hvICJQQVNTOiAkeCIKKysgICAgICAgICBmaQorKyAgICAgICAgIDs7CisgCWVzYWMKKyBkb25lCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2hfMy4yLjQ4LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoXzMuMi40OC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDJiMjkyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoXzMuMi40OC5iYgpAQCAtMCwwICsxLDQ2IEBACityZXF1aXJlIGJhc2guaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZmQ1ZDliY2FiZDhlZDVhNTRhMDFjZThkMTgzZDU5MmEiCisKK1BSID0gInIxMSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC0ke1BWfS50YXIuZ3o7bmFtZT10YXJiYWxsIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtMy4yLXBhdGNoZXMvYmFzaDMyLTA0OTthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNDkgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC0zLjItcGF0Y2hlcy9iYXNoMzItMDUwO2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDA1MCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTMuMi1wYXRjaGVzL2Jhc2gzMi0wNTE7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDUxIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtMy4yLXBhdGNoZXMvYmFzaDMyLTA1MjthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNTIgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC0zLjItcGF0Y2hlcy9iYXNoMzItMDUzO2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDA1MyBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTMuMi1wYXRjaGVzL2Jhc2gzMi0wNTQ7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDU0IFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtMy4yLXBhdGNoZXMvYmFzaDMyLTA1NTthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNTUgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC0zLjItcGF0Y2hlcy9iYXNoMzItMDU2O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDA1NiBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTMuMi1wYXRjaGVzL2Jhc2gzMi0wNTc7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDU3IFwKKyAgICAgICAgICAgZmlsZTovL21rYnVpbHRpbnNfaGF2ZV9zdHJpbmdpemUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYnVpbGQtdGVzdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdGVzdC1vdXRwdXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL2RvbnQtaW5jbHVkZS10YXJnZXQtQ0ZMQUdTLWluLWhvc3QtTERGTEFHUy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW3RhcmJhbGwubWQ1c3VtXSA9ICIzMzhkY2Y5NzVhOTM2NDBiYjNlYWE4NDNjYTQyZTNmOCIKK1NSQ19VUklbdGFyYmFsbC5zaGEyNTZzdW1dID0gIjEyOGQyODFiZDU2ODJiYTVmNjk1MzEyMjkxNWRhNzE5NzYzNTdkN2E3NjQ5MGQyNjZjOTE3M2IxZDA0MjYzNDgiCitTUkNfVVJJW3BhdGNoMDQ5Lm1kNXN1bV0gPSAiYWY1NzFhMmQxNjRkNWFiZGNhZTQ0OTllOTRlODg5MmMiCitTUkNfVVJJW3BhdGNoMDQ5LnNoYTI1NnN1bV0gPSAiYjEyMTdlZDk0YmRiOTVkYzg3OGZhNWNhYmJmOGExNjQ0MzVlYjBkOWRhMjNhMzkyMTk4ZjQ4NTY2ZWUzNGEyZiIKK1NSQ19VUklbcGF0Y2gwNTAubWQ1c3VtXSA9ICI4NDQzZDQzODVkNzNlYzgzNWFiZTQwMWQ5MDU5MTM3NyIKK1NSQ19VUklbcGF0Y2gwNTAuc2hhMjU2c3VtXSA9ICIwODFiYjAzYzU4MGVjZWU2M2JhMDNiNDBiZWIzY2FmNTA5ZWNhMjk1MTViMmU4ZGQzYzA3ODUwMzYwOWExNjQyIgorU1JDX1VSSVtwYXRjaDA1MS5tZDVzdW1dID0gIjE1YzY2NTMwNDJlOTgxNGFhODcxMjAwOThmYzdhODQ5IgorU1JDX1VSSVtwYXRjaDA1MS5zaGEyNTZzdW1dID0gIjM1NDg4NjA5N2NkOTViNGRlZjc3MDI4ZjMyZWUwMWUyZTA4OGQ1OGE5ODE4NGZlZGU5ZDNjZTkzMjBlMjE4ZWYiCitTUkNfVVJJW3BhdGNoMDUyLm1kNXN1bV0gPSAiNjkxMDIzYTk0NGJiYjkwMDNjYzkyYWQ0NjJkOTFmYTEiCitTUkNfVVJJW3BhdGNoMDUyLnNoYTI1NnN1bV0gPSAiYTBlY2NmOWNlZGE1MDg3MWRiMTBkMjFlZmRkNzRiOTllMzVlZmJkNTVjOTcwYzQwMGVlYWRlMDEyODE2YmI2MSIKK1NSQ19VUklbcGF0Y2gwNTMubWQ1c3VtXSA9ICJlYjk3ZDFjOTIzMGE1NTI4M2Q5ZGFjNjlkM2RlMmU0NiIKK1NSQ19VUklbcGF0Y2gwNTMuc2hhMjU2c3VtXSA9ICJmZTZmMGU5NmUwYjk2NmVhZWQ5ZmI1ZTkzMGNhMTI4OTFmNDM4MGYzMGY5ZTBhNzczZDIwMGZmMjA2M2E4NjRlIgorU1JDX1VSSVtwYXRjaDA1NC5tZDVzdW1dID0gIjExMDc3NDQwNThjNDNiMjQ3ZjU5NzU4NGI4OGJhMGE2IgorU1JDX1VSSVtwYXRjaDA1NC5zaGEyNTZzdW1dID0gImM2ZGFiOTExZTg1Njg4YzU0MmNlNzVhZmMxNzVkYmI0ZTUwMTFkZTUxMDI3NThlMTlhNGE4MGRhYzFlNzkzNTkiCitTUkNfVVJJW3BhdGNoMDU1Lm1kNXN1bV0gPSAiMDVkMjAxMTc2ZDM0OTllMmRmYTRhNzNkMDlkNDJmMDUiCitTUkNfVVJJW3BhdGNoMDU1LnNoYTI1NnN1bV0gPSAiYzBlODE2NzAwODM3OTQyZWQ1NDhkYTc0ZTU5MTdmNzRiNzBjYmJiYjEwYzlmMmNhZjczZThlMDZhMDcxM2QwYSIKK1NSQ19VUklbcGF0Y2gwNTYubWQ1c3VtXSA9ICIyMjJlYWEzYTJjMjZmNTRhMTVhYTVlMDg4MTdhNTM0YSIKK1NSQ19VUklbcGF0Y2gwNTYuc2hhMjU2c3VtXSA9ICIwNjNhOGQ4ZDc0ZTQ0MDdiZjA3YTMyYjk2NWI4ZWY2ZDIxM2E2NmFiZGI2YWYyNmNjMzU4NGE0MzdhNTZiYmI0IgorU1JDX1VSSVtwYXRjaDA1Ny5tZDVzdW1dID0gIjQ3ZDk4ZTNlMDQyODkyNDk1YzVlZmU1NGVjNmU1OTEzIgorU1JDX1VSSVtwYXRjaDA1Ny5zaGEyNTZzdW1dID0gIjVmYzY4OTM5NGQ1MTU5OTBmNWVhNzRlMmRmNzY1ZmM2ZTVlNDJjYTQ0YjQ1OTFiMmM2ZjliZTRiMGNhZGYwZjAiCisKK1BBUkFMTEVMX01BS0UgPSAiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoXzQuMy4zMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaF80LjMuMzAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODExZTYxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaF80LjMuMzAuYmIKQEAgLTAsMCArMSw0NiBAQAorcmVxdWlyZSBiYXNoLmluYworCisjIEdQTHYyKyAoPCA0LjApLCBHUEx2MysgKD49IDQuMCkKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9iYXNoLyR7QlB9LnRhci5nejtuYW1lPXRhcmJhbGwgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDMxO2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAzMSBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wMzI7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDMyIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTAzMzthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMzMgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDM0O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAzNCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wMzU7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDM1IFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTAzNjthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMzYgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDM3O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAzNyBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wMzg7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDM4IFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTAzOTthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMzkgXAorICAgICAgICAgICBmaWxlOi8vZXhlY3V0ZV9jbWQucGF0Y2g7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgZmlsZTovL21rYnVpbHRpbnNfaGF2ZV9zdHJpbmdpemUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYnVpbGQtdGVzdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdGVzdC1vdXRwdXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW3RhcmJhbGwubWQ1c3VtXSA9ICJhMjdiM2VlOWJlODNiZDNiYTQ0OGMwZmY1MmIyODQ0NyIKK1NSQ19VUklbdGFyYmFsbC5zaGEyNTZzdW1dID0gIjMxNzg4MTAxOWJiZjIyNjJmYjgxNGI3ZGQ4ZTQwNjMyZDEzYzM2MDhkMmYyMzc4MDBhODgyOGZiYjhhNjQwZGQiCisKK1NSQ19VUklbcGF0Y2gwMzEubWQ1c3VtXSA9ICIyMzZkZjFhYzExMzBhMDMzZWQwZGJlMmQyMTE1ZjI4ZiIKK1NSQ19VUklbcGF0Y2gwMzEuc2hhMjU2c3VtXSA9ICJjZDUyOWY1OWRkMGYyZmRkNDlkNjE5ZmUzNDY5MWRhNmYwYWZmZWRmODdjYzM3Y2Q0NjBhOWYzZmU4MTJhNjFkIgorU1JDX1VSSVtwYXRjaDAzMi5tZDVzdW1dID0gIjIzNjBmN2U3OWNmYjI4NTI2ZjgwMDIxMDI1ZWE1OTA5IgorU1JDX1VSSVtwYXRjaDAzMi5zaGEyNTZzdW1dID0gIjg4OTM1N2QyOWE2MDA1YjJjMzMwOGNhNWI2Mjg2Y2IyMjNiNWU5YzA4MzIxOWU1ZGIzMTU2MjgyZGQ1NTRmNGEiCitTUkNfVVJJW3BhdGNoMDMzLm1kNXN1bV0gPSAiYjU1MWM0ZWU3Yjg3MTM3NTllNDE0MzQ5OWQwYmJkNDgiCitTUkNfVVJJW3BhdGNoMDMzLnNoYTI1NnN1bV0gPSAiZmIyYTc3ODdhMTNmYmUwMjdhNzMzNWFjYTZlYjNjMjFjZGJkODEzZTllZGMyMjEyNzRiNmE5ZDg2OTJlYWExNiIKK1NSQ19VUklbcGF0Y2gwMzQubWQ1c3VtXSA9ICJjOWE1NmZiZTAzNDhlMDVhODg2ZGZmOTdmMjg3MmI3NCIKK1NSQ19VUklbcGF0Y2gwMzQuc2hhMjU2c3VtXSA9ICJmMTY5NGYwNGYxMTBkZWZlMTMzMGE4NTFjYzI3NjhlN2U1N2RkZDJkZmRiMGUzZTM1MGNhMGUzYzIxNGZmODg5IgorU1JDX1VSSVtwYXRjaDAzNS5tZDVzdW1dID0gImU1NjRlOGFiNDRlZDFjYTNhNGUzMTVhOWY2Y2FiZGM5IgorU1JDX1VSSVtwYXRjaDAzNS5zaGEyNTZzdW1dID0gIjM3MGQ4NWU1MTc4MDAzNmYyMzg2ZGMxOGM1ZWZlOTk2ZWJhOGU2NTJmYzE5NzNmMGY0ZjJhYjU1YTk5M2MxZTMiCitTUkNfVVJJW3BhdGNoMDM2Lm1kNXN1bV0gPSAiYjAwZmY2NmM0MWE3YzBmMDZlMTkxMjAwOTgxOTgwYjAiCitTUkNfVVJJW3BhdGNoMDM2LnNoYTI1NnN1bV0gPSAiYWM1ZjgyNDQ1YjM2ZWZkYjU0M2RiZmFlNjRhZmVkNjNmNTg2ZDc1NzRiODMzZTlhYTljZDUxNzBiYzVmZDI3YyIKK1NSQ19VUklbcGF0Y2gwMzcubWQ1c3VtXSA9ICJiZTJhN2IwNWY2YWU1NjAzMTNmM2M5ZDVmNzEyN2JkYSIKK1NSQ19VUklbcGF0Y2gwMzcuc2hhMjU2c3VtXSA9ICIzM2YxNzBkZDc0MDBhYjM0MThkNzQ5YzU1YzYzOTFiMWQxNjFlZjJkZTdhY2VkMTg3MzQ1MWIzYTNmY2E1ODEzIgorU1JDX1VSSVtwYXRjaDAzOC5tZDVzdW1dID0gIjYxZTA1MjI4MzBiMjRmYmU4YzBkMWIwMTBmMTMyNDcwIgorU1JDX1VSSVtwYXRjaDAzOC5zaGEyNTZzdW1dID0gImFkYmVhYTUwMGNhN2E4MjUzNWYwZTg4ZDY3MzY2MTk2M2Y4YTVmY2RjN2FkNjM0NDVlNjhiZjViNDk3ODYzNjciCitTUkNfVVJJW3BhdGNoMDM5Lm1kNXN1bV0gPSAiYTQ3NzU0ODdhYmU5NTg1MzY3NTFjOGNlNTNjZGY2ZjkiCitTUkNfVVJJW3BhdGNoMDM5LnNoYTI1NnN1bV0gPSAiYWI5NGRjZWQyMjE1NTQxMDk3NjkxZjYwYzNlYjMyM2NjMjhlZjI1NDk0NjNlNmE1MzM0YmJjYzFlNjFlNzRlYyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYy9iY18xLjA2LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmMvYmNfMS4wNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGM4YTg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmMvYmNfMS4wNi5iYgpAQCAtMCwwICsxLDI2IEBACitTVU1NQVJZID0gIkFyYml0cmFyeSBwcmVjaXNpb24gY2FsY3VsYXRvciBsYW5ndWFnZSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iYy9iYy5odG1sIgorCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWQ4MDQ1ZjNiOGY5MjljMWNiMjlhMWUzZmQ3MzdiNDk5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2JjL2JjZGVmcy5oO2VuZGxpbmU9MzE7bWQ1PTQ2ZGZmZGFmMTBhOTk3MjhkZDhjZTM1OGU0NWQ0NmQ4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RjL2RjLmg7ZW5kbGluZT0yNTttZDU9MmY5YzU1OGNkZDgwZTMxYjRkOTA0ZTQ4YzIzNzQzMjggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL251bWJlci5jO2VuZGxpbmU9MzE7bWQ1PTk5NDM0YTA4OThhYmNhNzc4NGFjZmQzNmI4MTkxMTk5IgorCitTRUNUSU9OID0gImJhc2UiCitERVBFTkRTID0gImZsZXgiCitQUiA9ICJyMyIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2JjL2JjLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtc2VnbWVudC1mYXVsdC5wYXRjaCAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkNDRiNWRkZGViZDhhN2E3MzA5YWVhNmMzNmZkYTExNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0ZWY2ZDlmMTdjM2MwZDkyZDg3OThlMzU2NjYxNzVlY2QzZDhlZmFjNDAwOWQ2NDU3YjVjOTljZWE3MmMwZTMzIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiZGMiCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmMvZmlsZXMvZml4LXNlZ21lbnQtZmF1bHQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYy9maWxlcy9maXgtc2VnbWVudC1mYXVsdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGMwZGEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmMvZmlsZXMvZml4LXNlZ21lbnQtZmF1bHQucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK3doZW4gcnVuIGNvbW1hbmQgc3VjaCBhcyAnZWNobyAiYSA9IDEzIiB8IGJjIC1sJywgaXQgc2VnbWVudGF0aW9uIGZhdWx0cy4KK1RoaXMgcGF0Y2ggaXMgZnJvbSBodHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vYmxmcy1zdXBwb3J0QGxpbnV4ZnJvbXNjcmF0Y2gub3JnL21zZzA0NjAyLmh0bWwuCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorCistLS0gYmMtMS4wNi9saWIvbnVtYmVyLmMub3JpZwkyMDAzLTA5LTI2IDIxOjE0OjAyLjAwMDAwMDAwMCArMDAwMAorKysrIGJjLTEuMDYvbGliL251bWJlci5jCTIwMDMtMDktMjYgMjE6MTQ6MjYuMDAwMDAwMDAwICswMDAwCitAQCAtMzQsNiArMzQsNyBAQAorICNpbmNsdWRlIDxudW1iZXIuaD4KKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8Y3R5cGUuaD4vKiBQcm90b3R5cGVzIG5lZWRlZCBmb3IgZXh0ZXJuYWwgdXRpbGl0eSByb3V0aW5lcy4gKi8KKyAKKyAjZGVmaW5lIGJjX3J0X3dhcm4gcnRfd2FybgorLS0tIGJjLTEuMDYvYmMvbG9hZC5jLm9yaWcJMjAwMy0wOS0yNiAyMToxNDoxNC4wMDAwMDAwMDAgKzAwMDAKKysrKyBiYy0xLjA2L2JjL2xvYWQuYwkyMDAzLTA5LTI2IDIxOjE0OjI2LjAwMDAwMDAwMCArMDAwMAorQEAgLTE1Niw3ICsxNTYsNyBAQAorICAgbG9uZyAgbGFiZWxfbm87CisgICBsb25nICB2YWZfbmFtZTsJLyogdmFyaWFibGUsIGFycmF5IG9yIGZ1bmN0aW9uIG51bWJlci4gKi8KKyAgIGxvbmcgIGZ1bmM7CistICBwcm9ncmFtX2NvdW50ZXIgc2F2ZV9hZHI7CisrICBzdGF0aWMgcHJvZ3JhbV9jb3VudGVyIHNhdmVfYWRyOworIAorICAgLyogSW5pdGlhbGl6ZS4gKi8KKyAgIHN0ciA9IGNvZGU7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2wvMDAwMS1maXgtdHlwb3MtaW4tbWFucGFnZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbC8wMDAxLWZpeC10eXBvcy1pbi1tYW5wYWdlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZTM2OGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2wvMDAwMS1maXgtdHlwb3MtaW4tbWFucGFnZS5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tIDljYjE2NjdmOWQzYTliY2ZjM2I4MzQ2NmNkOGQzYjc5ZjA1NTRmZjAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBemF0IEtodXpoaW4gPGEzYXQubWFpbEBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDggSnVsIDIwMTUgMDE6Mzc6MDkgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzNdIGZpeCB0eXBvcyBpbiBtYW5wYWdlCisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9iL2Jsa3Rvb2wvYmxrdG9vbF80LTcuZGViaWFuLnRhci54egorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIGlzIGRlYWRdCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AbGludXguaW50ZWwuY29tPgorCistLS0KKyBibGt0b29sLjggfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYmxrdG9vbC44IGIvYmxrdG9vbC44CitpbmRleCBhMWY1Yzk2Li40NWI3NzI0IDEwMDY0NAorLS0tIGEvYmxrdG9vbC44CisrKysgYi9ibGt0b29sLjgKK0BAIC0xOTEsNyArMTkxLDcgQEAgUXVlcnkgb3Igc2V0IGRldmljZSBidXMgc3RhdGUgKDAgb2ZmLCAxIG9uLCAyIHRyaXN0YXRlKQorIFF1ZXJ5IHRoZSBkZXRlY3RlZCAob3Igb3ZlcnJpZGRlbiwgdmlhIC10KSBkZXZpY2UgY2xhc3MuCisgVHlwaWNhbGx5IHRoaXMgd2lsbCByZXN1bHQgaW4gJ0FUQScgb3IgJ1NDU0knIGZvciBtb3N0IGRldmljZXMuCisgRGV0ZWN0aW9uIGlzIGJhc2VkIG9uIGRldmljZSBtYWpvcjsgdGh1cyB5b3VyIFNBVEEgZGV2aWNlIG1heSBhcHBlYXIgYXMKKy0nU0NTSScuCisrXCYnU0NTSScuCisgCisgLlRQCisgLkIgY2Qtc3BlZWQKK0BAIC0yMzcsNyArMjM3LDcgQEAgT21pdHRpbmcgdGhlIG9uL29mZiBhcmd1bWVudCB3aWxsIHByaW50IHRoZSBjdXJyZW50IHN0YXRlLgorIAorIC5UUAorIC5CIG1lZGlhCistTG9jayBpbiAob3IgdW5sb2NrKSBhIHJlbW92ZWFibGUgZGV2aWNlLgorK0xvY2sgaW4gKG9yIHVubG9jaykgYSByZW1vdmFibGUgZGV2aWNlLgorIAorIC5UUAorIC5CIG11bHRpcGxlLWNvdW50CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbC8wMDAyLWZpeC1zdHJpbmctZXJyb3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2wvMDAwMi1maXgtc3RyaW5nLWVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwOGFiYTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2wvMDAwMi1maXgtc3RyaW5nLWVycm9yLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gZGRiMTA3MWRhMmM3OGQ4MTU1YWFiNjJlOWYwZDQ2ZjY5NTAwMjAwZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEF6YXQgS2h1emhpbiA8YTNhdC5tYWlsQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgOCBKdWwgMjAxNSAwMTo0MjoyNCArMDMwMAorU3ViamVjdDogW1BBVENIIDIvM10gZml4IHN0cmluZyBlcnJvcgorCitUaGlzIHBhdGNoIGlzIHRha2VuIGZyb20KK2Z0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vYi9ibGt0b29sL2Jsa3Rvb2xfNC03LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGxpbnV4LmludGVsLmNvbT4KKworLS0tCisgdXRpbC5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdXRpbC5jIGIvdXRpbC5jCitpbmRleCAxZjNhOWNhLi4yY2NmNTZhIDEwMDY0NAorLS0tIGEvdXRpbC5jCisrKysgYi91dGlsLmMKK0BAIC0yOCw3ICsyOCw3IEBAIHZvaWQgcGRpZShjb25zdCBjaGFyICptc2csIGludCBwZXJyKQorIAlpZiAocGVycikKKyAJCXBlcnJvcihtc2cpOworIAllbHNlCistCQlmcHJpbnRmKHN0ZGVyciwgbXNnKTsKKysJCWZwcmludGYoc3RkZXJyLCAiJXMiLCBtc2cpOworIAlpZiAoYmxrZGV2ID49IDApCisgCQljbG9zZShibGtkZXYpOworIAlleGl0KDEpOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2wvMDAwMy1GaXgtMy1kLWFyZ3VtZW50LWZvci1CTEtST1NFVC1pdC1tdXN0LWJlLWNvbnN0LWludC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbC8wMDAzLUZpeC0zLWQtYXJndW1lbnQtZm9yLUJMS1JPU0VULWl0LW11c3QtYmUtY29uc3QtaW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZWQwYjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2wvMDAwMy1GaXgtMy1kLWFyZ3VtZW50LWZvci1CTEtST1NFVC1pdC1tdXN0LWJlLWNvbnN0LWludC5wYXRjaApAQCAtMCwwICsxLDc4IEBACitGcm9tIDY4ZmFhNjNhYWFkODFmNGEyODllNGEwMzE3M2FiNGNmNzk4ZGViNTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBemF0IEtodXpoaW4gPGEzYXQubWFpbEBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDEgTm92IDIwMTQgMjI6MjQ6MzIgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzNdIEZpeCAzLWQgYXJndW1lbnQgZm9yIEJMS1JPU0VUIGl0IG11c3QgYmUgJ2NvbnN0IGludCAqJworCitNb3N0IG9mICpTRVQgaW9jdGxzIGhhdmUgaW50IHR5cGUgZm9yIDMtZCBhcmd1bWVudCwgZXhjZXB0IEJMS1JPU0VULgorU28gYWRkIGJjX2FyZ190eXBlIGVudW0sIGJ1aWxkIGl0IGludG8gYm9vbF9jb21hbmQgYW5kIGluc3RhbGwgYXJnX3R5cGUKK3RvIGJjX2FyZ19pbnRfcHRyIGZvciBCTEtST1NFVCBvbmx5LgorCitEZWJpYW4tYnVnLWlkOiA2NDExNjQKK0xpbms6IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzY0MTE2NAorCitUaGlzIHBhdGNoIGlzIHRha2VuIGZyb20KK2Z0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vYi9ibGt0b29sL2Jsa3Rvb2xfNC03LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGxpbnV4LmludGVsLmNvbT4KKworLS0tCisgYmxrdG9vbC5jIHwgMTEgKysrKysrKysrLS0KKyBibGt0b29sLmggfCAgNyArKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYmxrdG9vbC5jIGIvYmxrdG9vbC5jCitpbmRleCBmYmVmZWNkLi4yMjFhMTk1IDEwMDY0NAorLS0tIGEvYmxrdG9vbC5jCisrKysgYi9ibGt0b29sLmMKK0BAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgYm9vbF9jb21tYW5kIGJvb2xfY21kX3RibFtdID0geworIAl7IHsgREVGX0JPT0woInBpby1kYXRhIiksIGRjX2F0YSwgREVGX0hESU8oMzJCSVQpIH0sCisgCSAgIjE2LWJpdCIsICIzMi1iaXQiIH0sCisgCXsgeyBERUZfQk9PTCgicmVhZG9ubHkiKSwgZGNfYW55LCBJT0NOQU1FKEJMS1JPR0VUKSwgSU9DTkFNRShCTEtST1NFVCkgfSwKKy0JICBERUZfQk9PTFNUUiB9LAorKwkgIERFRl9CT09MU1RSLCBiY19hcmdfaW50X3B0ciB9LAorIAl7IHsgREVGX0JPT0woInVubWFzay1pcnEiKSwgZGNfYXRhLCBERUZfSERJTyhVTk1BU0tJTlRSKSB9LAorIAkgIERFRl9CT09MU1RSIH0sCisgCXsgeyAid2NhY2hlIiwgY3RfYm9vbCwgaGFuZGxlX3djYWNoZSwgZGNfYW55LAorQEAgLTE3MSw3ICsxNzEsMTQgQEAgc3RhdGljIHZvaWQgaGFuZGxlX2Jvb2woaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBzdHJ1Y3QgY29tbWFuZCAqY21kKQorIAorIAl9IGVsc2UgaWYgKChhcmdjID09IDQpICYmIChjbWQtPndyaXRlX2lvY3RsX25hbWUgIT0gTlVMTCkpIHsKKyAJCWRvXzMyID0gcGFyc2VfYm9vbChhcmdjLCBhcmd2LCBiY20pOworLQkJaWYgKGlvY3RsKGJsa2RldiwgY21kLT53cml0ZV9pb2N0bCwgZG9fMzIpKQorKwkJCisrCQlpbnQgcmV0OworKwkJaWYgKGJjbS0+YXJnX3R5cGUgPT0gYmNfYXJnX2ludF9wdHIpIHsKKysJCQlyZXQgPSBpb2N0bChibGtkZXYsIGNtZC0+d3JpdGVfaW9jdGwsICZkb18zMik7CisrCQl9IGVsc2UgeworKwkJCXJldCA9IGlvY3RsKGJsa2RldiwgY21kLT53cml0ZV9pb2N0bCwgZG9fMzIpOworKwkJfQorKwkJaWYgKHJldCkKKyAJCQlwZGllKGNtZC0+d3JpdGVfaW9jdGxfbmFtZSwgMSk7CisgCX0KKyAJZWxzZSB7CitkaWZmIC0tZ2l0IGEvYmxrdG9vbC5oIGIvYmxrdG9vbC5oCitpbmRleCBmY2U0Mzg3Li44NWFkZDgzIDEwMDY0NAorLS0tIGEvYmxrdG9vbC5oCisrKysgYi9ibGt0b29sLmgKK0BAIC04NSwxMSArODUsMTggQEAgc3RydWN0IGNvbW1hbmQgeworIAljb25zdCBjaGFyCQkqd3JpdGVfaW9jdGxfbmFtZTsKKyB9OworIAorK2VudW0gYmNfYXJnX3R5cGUgeworKwliY19hcmdfaW50LAorKwliY19hcmdfaW50X3B0ciwKKyt9OworKworIHN0cnVjdCBib29sX2NvbW1hbmQgeworIAlzdHJ1Y3QgY29tbWFuZAkJY21kOworIAorIAljb25zdCBjaGFyCQkqc3RyX2ZhbHNlOworIAljb25zdCBjaGFyCQkqc3RyX3RydWU7CisrCisrCWVudW0gYmNfYXJnX3R5cGUgYXJnX3R5cGU7CisgfTsKKyAKKyBzdHJ1Y3QgY2xhc3Nfb3BlcmF0aW9ucyB7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbF80LTcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2xfNC03LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3OTE5NmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2xfNC03LmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiVHVuZSBsb3ctbGV2ZWwgYmxvY2sgZGV2aWNlIHBhcmFtZXRlcnMiCitERVNDUklQVElPTiA9ICJibGt0b29sIGlzIHVzZWQgZm9yIHF1ZXJ5aW5nIGFuZC9vciBjaGFuZ2luZyBzZXR0aW5ncyBcCitvZiBhIGJsb2NrIGRldmljZS4gSXQgaXMgbGlrZSBoZHBhcm0gYnV0IGEgbW9yZSBnZW5lcmFsIHRvb2wsIGFzIGl0IFwKK3dvcmtzIG9uIFNDU0ksIElERSBhbmQgU0FUQSBkZXZpY2VzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9wYWNrYWdlcy5kZWJpYW4ub3JnL3Vuc3RhYmxlL2FkbWluL2Jsa3Rvb2wiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2Jsa3Rvb2wuYztiZWdpbmxpbmU9NztlbmRsaW5lPTg7bWQ1PWE1ZTc5OGVhOThmZDUwOTcyMDg4OTY4YTE1ZTVmMzczIgorCitERVBFTkRTID0gImdsaWItMi4wIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9iL2Jsa3Rvb2wvYmxrdG9vbF80Lm9yaWcudGFyLmd6O25hbWU9dGFyYmFsbCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWZpeC10eXBvcy1pbi1tYW5wYWdlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItZml4LXN0cmluZy1lcnJvci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLUZpeC0zLWQtYXJndW1lbnQtZm9yLUJMS1JPU0VULWl0LW11c3QtYmUtY29uc3QtaW50LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gIjYyZWRjMDljOTkwODEwN2U2OTM5MWM4N2Y0ZjNmZDQwIgorU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiYjFlNmQ1OTEyNTQ2ZDJhNGI3MDRlYzY1YzJiOTY2NGFhM2I0NjYzZTdkODAwZTA2ODAzMzMwMzM1YTJjYjc2NCIKKworUyA9ICIke1dPUktESVJ9LyR7QlBOfS00Lm9yaWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnlhY2MvYnlhY2MuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnlhY2MvYnlhY2MuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZjhkNmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ieWFjYy9ieWFjYy5pbmMKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJCZXJrZWxleSBMQUxSIFlhY2MgcGFyc2VyIGdlbmVyYXRvciIKK0RFU0NSSVBUSU9OID0gIkEgcGFyc2VyIGdlbmVyYXRvciB1dGlsaXR5IHRoYXQgcmVhZHMgYSBncmFtbWFyIHNwZWNpZmljYXRpb24gZnJvbSBhIGZpbGUgYW5kIGdlbmVyYXRlcyBhbiBMUigxKSBcCitwYXJzZXIgZm9yIGl0LiAgVGhlIHBhcnNlcnMgY29uc2lzdCBvZiBhIHNldCBvZiBMQUxSKDEpIHBhcnNpbmcgdGFibGVzIGFuZCBhIGRyaXZlciByb3V0aW5lIHdyaXR0ZW4gaW4gdGhlIEMgXAorcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiUEQiCisKK1NSQ19VUkkgPSAiZnRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvYnlhY2MvYnlhY2MtJHtQVn0udGd6IFwKKyAgICAgICAgICAgZmlsZTovL2J5YWNjLW9wZW4ucGF0Y2giCisKK0VYVFJBX09FQ09ORiArPSAiLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPSdzLF4sYiwnIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworZG9fY29uZmlndXJlKCkgeworCWluc3RhbGwgLW0gMDc1NSAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dudS1jb25maWcvY29uZmlnLmd1ZXNzICR7U30KKwlpbnN0YWxsIC1tIDA3NTUgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9nbnUtY29uZmlnL2NvbmZpZy5zdWIgJHtTfQorCW9lX3J1bmNvbmYKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjL2J5YWNjLW9wZW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ieWFjYy9ieWFjYy9ieWFjYy1vcGVuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNjA1NDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ieWFjYy9ieWFjYy9ieWFjYy1vcGVuLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK2RpZmYgLS1naXQgYS9tYWluLmMgYi9tYWluLmMKK2luZGV4IDYyMGNlM2YuLjgyMDcxYTQgMTAwNjQ0CistLS0gYS9tYWluLmMKKysrKyBiL21haW4uYworQEAgLTUyNiw3ICs1MjYsNyBAQCBteV9ta3N0ZW1wKGNoYXIgKnRlbXApCisgICAgIH0KKyAgICAgaWYgKChuYW1lID0gdGVtcG5hbShkbmFtZSwgZm5hbWUpKSAhPSAwKQorICAgICB7CistCWZkID0gb3BlbihuYW1lLCBPX0NSRUFUIHwgT19FWENMIHwgT19SRFdSKTsKKysgICAgICBmZCA9IG9wZW4obmFtZSwgT19DUkVBVCB8IE9fRVhDTCB8IE9fUkRXUiwgMDY2Nik7CisgCXN0cmNweSh0ZW1wLCBuYW1lKTsKKyAgICAgfQorICAgICBlbHNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ieWFjYy9ieWFjY18yMDE1MDcxMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjXzIwMTUwNzExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YjU0NTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ieWFjYy9ieWFjY18yMDE1MDcxMS5iYgpAQCAtMCwwICsxLDExIEBACisjIFNpZ2guIFRoaXMgaXMgb25lIG9mIHRob3NlIHBsYWNlcyB3aGVyZSBldmVyeW9uZSBsaWNlbnNlcyBpdCBkaWZmZXJlbnRseS4gU29tZW9uZQorIyBldmVuIGFwcGx5IFVDQiB0byBpdCAoRnJlZS9OZXQvT3BlbkJTRCkuIFRoZSBtYWludGFpbmVyIHN0YXRlcyB0aGF0OgorIyAiSSd2ZSBmb3VuZCBubyByZWxpYWJsZSBzb3VyY2Ugd2hpY2ggc3RhdGVzIHRoYXQgYnlhY2MgbXVzdCBiZWFyIGEgVUNCIGNvcHlyaWdodC4iCisjIFNldHRpbmcgdG8gUEQgYXMgdGhpcyBpcyB3aGF0IHRoZSB1cHN0cmVhbSBoYXMgaXQgYXMuCisKK0xJQ0VOU0UgPSAiUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9wYWNrYWdlL2RlYmlhbi9jb3B5cmlnaHQ7bWQ1PWM1MmZiMmQxYjNmNzViM2I3NTM0OTI3ODA3YTFiNzE0IgorcmVxdWlyZSBieWFjYy5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gIjI3MDA0MDEwMzA1ODNjNGU5MTY5YWM3ZWE3ZDA4ZGU4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImMzNTRlNGVlMTRjNGExYmYxMWU1NWRkZTkyNzUwMTFkMTQ4ODdlZjA2NjQwNmEwODhiNmZhNTZjYWYwMzkyNDgiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9NYWtlZmlsZS5hbSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyLTEuMC42L01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMTYzYjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDcxIEBACisKK2xpYl9MVExJQlJBUklFUyA9IGxpYmJ6Mi5sYQorCitsaWJiejJfbGFfU09VUkNFUyA9IGJsb2Nrc29ydC5jICBcCisgICAgICAgICAgICAgICAgICAgIGh1ZmZtYW4uYyAgICBcCisgICAgICAgICAgICAgICAgICAgIGNyY3RhYmxlLmMgICBcCisgICAgICAgICAgICAgICAgICAgIHJhbmR0YWJsZS5jICBcCisgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzLmMgICBcCisgICAgICAgICAgICAgICAgICAgIGRlY29tcHJlc3MuYyBcCisgICAgICAgICAgICAgICAgICAgIGJ6bGliLmMKKworYmluX1BST0dSQU1TID0gYnppcDIgYnppcDJyZWNvdmVyCisKK2J6aXAyX1NPVVJDRVMgPSBiemlwMi5jCitiemlwMl9MREFERCA9IGxpYmJ6Mi5sYQorYnppcDJfREVQRU5ERU5DSUVTID0gbGliYnoyLmxhCisKK2luY2x1ZGVfSEVBREVSUyA9IGJ6bGliLmgKKworYnppcDJyZWNvdmVyX1NPVVJDRVMgPSBiemlwMnJlY292ZXIuYworYnppcDJyZWNvdmVyX0xEQUREID0gbGliYnoyLmxhCitiemlwMnJlY292ZXJfREVQRU5ERU5DSUVTID0gbGliYnoyLmxhCisKK2Jpbl9TQ1JJUFRTID0gYnpncmVwIGJ6bW9yZSBiemRpZmYKKworbWFuX01BTlMgPSBiemlwMi4xIGJ6Z3JlcC4xIGJ6bW9yZS4xIGJ6ZGlmZi4xCitFWFRSQV9ESVNUID0gJChtYW5fTUFOUykKKworcnVudGVzdDoKKwkuL2J6aXAyIC0xICA8IHNhbXBsZTEucmVmID4gc2FtcGxlMS5yYjIKKwkuL2J6aXAyIC0yICA8IHNhbXBsZTIucmVmID4gc2FtcGxlMi5yYjIKKwkuL2J6aXAyIC0zICA8IHNhbXBsZTMucmVmID4gc2FtcGxlMy5yYjIKKwkuL2J6aXAyIC1kICA8IHNhbXBsZTEuYnoyID4gc2FtcGxlMS50c3QKKwkuL2J6aXAyIC1kICA8IHNhbXBsZTIuYnoyID4gc2FtcGxlMi50c3QKKwkuL2J6aXAyIC1kcyA8IHNhbXBsZTMuYnoyID4gc2FtcGxlMy50c3QKKwlAaWYgY21wIHNhbXBsZTEuYnoyIHNhbXBsZTEucmIyOyB0aGVuIGVjaG8gIlBBU1M6IHNhbXBsZTEgY29tcHJlc3MiO1wKKwllbHNlIGVjaG8gIkZBSUw6IHNhbXBsZTEgY29tcHJlc3MiOyBmaQorCUBpZiBjbXAgc2FtcGxlMi5iejIgc2FtcGxlMi5yYjI7IHRoZW4gZWNobyAiUEFTUzogc2FtcGxlMiBjb21wcmVzcyI7XAorCWVsc2UgZWNobyAiRkFJTDogc2FtcGxlMiBjb21wcmVzcyI7IGZpCisJQGlmIGNtcCBzYW1wbGUzLmJ6MiBzYW1wbGUzLnJiMjsgdGhlbiBlY2hvICJQQVNTOiBzYW1wbGUzIGNvbXByZXNzIjtcCisJZWxzZSBlY2hvICJGQUlMOiBzYW1wbGUzIGNvbXByZXNzIjsgZmkKKwlAaWYgY21wIHNhbXBsZTEudHN0IHNhbXBsZTEucmVmOyB0aGVuIGVjaG8gIlBBU1M6IHNhbXBsZTEgZGVjb21wcmVzcyI7XAorCWVsc2UgZWNobyAiRkFJTDogc2FtcGxlMSBkZWNvbXByZXNzIjsgZmkKKwlAaWYgY21wIHNhbXBsZTIudHN0IHNhbXBsZTIucmVmOyB0aGVuIGVjaG8gIlBBU1M6IHNhbXBsZTIgZGVjb21wcmVzcyI7XAorCWVsc2UgZWNobyAiRkFJTDogc2FtcGxlMiBkZWNvbXByZXNzIjsgZmkKKwlAaWYgY21wIHNhbXBsZTMudHN0IHNhbXBsZTMucmVmOyB0aGVuIGVjaG8gIlBBU1M6IHNhbXBsZTMgZGVjb21wcmVzcyI7XAorCWVsc2UgZWNobyAiRkFJTDogc2FtcGxlMyBkZWNvbXByZXNzIjsgZmkKKworaW5zdGFsbC1wdGVzdDoKKwljcCAkKHNyY2RpcikvTWFrZWZpbGUJCSQoREVTVERJUikvCisJY3AgJChzcmNkaXIpL3NhbXBsZTEucmVmCSQoREVTVERJUikvCisJY3AgJChzcmNkaXIpL3NhbXBsZTIucmVmCSQoREVTVERJUikvCisJY3AgJChzcmNkaXIpL3NhbXBsZTMucmVmCSQoREVTVERJUikvCisJY3AgJChzcmNkaXIpL3NhbXBsZTEuYnoyCSQoREVTVERJUikvCisJY3AgJChzcmNkaXIpL3NhbXBsZTIuYnoyCSQoREVTVERJUikvCisJY3AgJChzcmNkaXIpL3NhbXBsZTMuYnoyCSQoREVTVERJUikvCisJbG4gLXMgJChiaW5kaXIpL2J6aXAyCQkkKERFU1RESVIpL2J6aXAyCisKK2luc3RhbGwtZXhlYy1ob29rOgorCWxuIC1zICQoYmluZGlyKS9iemlwMiQoRVhFRVhUKSAkKERFU1RESVIpJChiaW5kaXIpL2J1bnppcDIkKEVYRUVYVCkKKwlsbiAtcyAkKGJpbmRpcikvYnppcDIkKEVYRUVYVCkgJChERVNURElSKSQoYmluZGlyKS9iemNhdCQoRVhFRVhUKQorCWxuIC1zICQoYmluZGlyKS9iemdyZXAkKEVYRUVYVCkgJChERVNURElSKSQoYmluZGlyKS9iemVncmVwJChFWEVFWFQpCisJbG4gLXMgJChiaW5kaXIpL2J6Z3JlcCQoRVhFRVhUKSAkKERFU1RESVIpJChiaW5kaXIpL2J6ZmdyZXAkKEVYRUVYVCkKKwlsbiAtcyAkKGJpbmRpcikvYnptb3JlJChFWEVFWFQpICQoREVTVERJUikkKGJpbmRpcikvYnpsZXNzJChFWEVFWFQpCisJbG4gLXMgJChiaW5kaXIpL2J6ZGlmZiQoRVhFRVhUKSAkKERFU1RESVIpJChiaW5kaXIpL2J6Y21wJChFWEVFWFQpCisKK2luc3RhbGwtZGF0YS1ob29rOgorCWVjaG8gIi5zbyBtYW4xL2J6Z3JlcC4xIiA+ICQoREVTVERJUikkKG1hbmRpcikvbWFuMS9iemVncmVwLjEKKwllY2hvICIuc28gbWFuMS9iemdyZXAuMSIgPiAkKERFU1RESVIpJChtYW5kaXIpL21hbjEvYnpmZ3JlcC4xCisJZWNobyAiLnNvIG1hbjEvYnptb3JlLjEiID4gJChERVNURElSKSQobWFuZGlyKS9tYW4xL2J6bGVzcy4xCisJZWNobyAiLnNvIG1hbjEvYnpkaWZmLjEiID4gJChERVNURElSKSQobWFuZGlyKS9tYW4xL2J6Y21wLjEKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyLTEuMC42L2NvbmZpZ3VyZS5hYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyLTEuMC42L2NvbmZpZ3VyZS5hYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2VlNTc2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnppcDIvYnppcDItMS4wLjYvY29uZmlndXJlLmFjCkBAIC0wLDAgKzEsMTQgQEAKK0FDX1BSRVJFUShbMi41N10pCisKK0FDX0lOSVQoYnppcDIsIDIuMC41LCAsIGxpYlhyZW5kZXIpCitBTV9JTklUX0FVVE9NQUtFKGZvcmVpZ24pCitBTV9NQUlOVEFJTkVSX01PREUKKworI0FNX0NPTkZJR19IRUFERVIoY29uZmlnLmgpCisKKyMgQ2hlY2sgZm9yIHByb2dzCitBQ19QUk9HX0NDCitBQ19QUk9HX0xJQlRPT0wKKworQUNfT1VUUFVUKFtNYWtlZmlsZV0pCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyLTEuMC42L3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyLTEuMC42L3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjIwZmNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnppcDIvYnppcDItMS4wLjYvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL3NoCittYWtlIC1rIHJ1bnRlc3QKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyXzEuMC42LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnppcDIvYnppcDJfMS4wLjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMzZmU0YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyXzEuMC42LmJiCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiVmVyeSBoaWdoLXF1YWxpdHkgZGF0YSBjb21wcmVzc2lvbiBwcm9ncmFtIgorREVTQ1JJUFRJT04gPSAiYnppcDIgY29tcHJlc3NlcyBmaWxlcyB1c2luZyB0aGUgQnVycm93cy1XaGVlbGVyIGJsb2NrLXNvcnRpbmcgdGV4dCBjb21wcmVzc2lvbiBhbGdvcml0aG0sIGFuZCBcCitIdWZmbWFuIGNvZGluZy4gQ29tcHJlc3Npb24gaXMgZ2VuZXJhbGx5IGNvbnNpZGVyYWJseSBiZXR0ZXIgdGhhbiB0aGF0IGFjaGlldmVkIGJ5IG1vcmUgY29udmVudGlvbmFsIFwKK0xaNzcvTFo3OC1iYXNlZCBjb21wcmVzc29ycywgYW5kIGFwcHJvYWNoZXMgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBQUE0gZmFtaWx5IG9mIHN0YXRpc3RpY2FsIGNvbXByZXNzb3JzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuYnppcC5vcmcvIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJiemlwMiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7YmVnaW5saW5lPTg7ZW5kbGluZT0zNzttZDU9NDBkOWQxZWIwNTczNmQxYmZjODZjZmRkOTEwNmU2YjIiCitQUiA9ICJyNSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmJ6aXAub3JnLyR7UFZ9LyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUuYWM7c3ViZGlyPSR7QlB9IFwKKyAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLmFtO3N1YmRpcj0ke0JQfSBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwMGI1MTZmNDcwNGQ0YTdjYjUwYTFkOTdlNmU4ZTE1YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhMjg0OGYzNGZjZDVkNmNmNDdkZWYwMDQ2MWZjYjUyOGEwNDg0ZDhlZGVmODIwOGQ2ZDJlMjkwOWRjNjFkOWNkIgorCitQQUNLQUdFUyA9KyAibGliYnoyIgorCitDRkxBR1NfYXBwZW5kID0gIiAtZlBJQyAtZnBpYyAtV2lubGluZSAtZm5vLXN0cmVuZ3RoLXJlZHVjZSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtYWx0ZXJuYXRpdmVzIHB0ZXN0CisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKK0FMVEVSTkFUSVZFXyR7UE59ID0gImJ1bnppcDIgYnpjYXQiCisKKyNpbnN0YWxsIGJpbmFyaWVzIHRvIGJ6aXAyLW5hdGl2ZSB1bmRlciBzeXNyb290IGZvciByZXBsYWNlbWVudC1uYXRpdmUKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLWJpbmRpcj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQTn0iCisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworCWNwIC1mICR7Qn0vTWFrZWZpbGUgJHtEfSR7UFRFU1RfUEFUSH0vTWFrZWZpbGUKKwlzZWQgLWkgLWUgInN8Xk1ha2VmaWxlOnxfTWFrZWZpbGU6fCIgJHtEfSR7UFRFU1RfUEFUSH0vTWFrZWZpbGUKK30KKworRklMRVNfbGliYnoyID0gIiR7bGliZGlyfS9saWIqJHtTT0xJQlN9IgorCitQUk9WSURFU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBiemlwMi1yZXBsYWNlbWVudC1uYXRpdmUiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Noa2NvbmZpZy9jaGtjb25maWctYWx0ZXJuYXRpdmVzLW5hdGl2ZV8xLjMuNTkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jaGtjb25maWcvY2hrY29uZmlnLWFsdGVybmF0aXZlcy1uYXRpdmVfMS4zLjU5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZDM0YWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jaGtjb25maWcvY2hrY29uZmlnLWFsdGVybmF0aXZlcy1uYXRpdmVfMS4zLjU5LmJiCkBAIC0wLDAgKzEsNDMgQEAKK3JlcXVpcmUgcmVjaXBlcy1leHRlbmRlZC9jaGtjb25maWcvY2hrY29uZmlnXzEuMy41OC5iYgorCitTVU1NQVJZID0gIiR7U1VNTUFSWV9jaGtjb25maWctYWx0ZXJuYXRpdmVzfSIKK0RFU0NSSVBUSU9OID0gIiR7REVTQ1JJUFRJT05fY2hrY29uZmlnLWFsdGVybmF0aXZlc30iCitERVBFTkRTID0gIiIKK1BST1ZJREVTICs9ICJ2aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMtbmF0aXZlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCisKKyMgVGhlIHN5c3Jvb3QgYnJhbmNoIGlzIDEuMy41OSArIHNvbWUgZ2l0IGNvbW1pdHMgZnJvbSBtYXN0ZXIgKyAtLXN5c3Jvb3QKKyMgc3VwcG9ydCBmb3IgYWx0ZXJuYXRpdmVzLgorU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2tlcmdvdGgvY2hrY29uZmlnO2JyYW5jaD1zeXNyb290IgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDUkVWID0gImNkNDM3ZWNiZDg5ODZjODk0NDQyZjhmY2UxZTAwNjFlMjBmMDRkZWUiCitQViA9ICIxLjMuNTkrJHtTUkNQVn0iCisKK2luaGVyaXQgbmF0aXZlCisKKyMgV2Ugd2FudCBvdXIgbmF0aXZlIHJlY2lwZXMgdG8gYnVpbGQgdXNpbmcgdGhlIHRhcmdldCBwYXRocyByYXRoZXIgdGhhbiBwYXRocworIyBpbnRvIHRoZSBzeXNyb290LCBhcyB3ZSBtYXkgdXNlIHRoZW0gdG8gY29uc3RydWN0IHRoZSByb290ZnMuIEFzIHN1Y2gsIHdlCisjIG9ubHkgYWRqdXN0IHRoZSBwYXRocyB0byBtYXRjaCB0aGUgbWV0YWRhdGEgZm9yIHRoZSB0YXJnZXQsIG5vdCBuYXRpdmUuCitvYmV5X3ZhcmlhYmxlcyAoKSB7CisJc2VkIC1pICdzLEFMVEVSTkFUSVZFU19ST09ULE9QS0dfT0ZGTElORV9ST09ULCcgYWx0ZXJuYXRpdmVzLmMKK30KKworZG9fY29tcGlsZSAoKSB7CisJb2VfcnVubWFrZSBhbHRlcm5hdGl2ZXMKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hbHRlcm5hdGl2ZXMgXAorCSAgICAgICAgICAgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2FsdGVybmF0aXZlcworCisJaW5zdGFsbCAtRCAtbSAwNzU1IGFsdGVybmF0aXZlcyAke0R9JHtiaW5kaXJ9L2FsdGVybmF0aXZlcworCWluc3RhbGwgLUQgLW0gMDY0NCBhbHRlcm5hdGl2ZXMuOCAke0R9JHttYW5kaXJ9L21hbjgvYWx0ZXJuYXRpdmVzLjgKKworCWxuIC1zIGFsdGVybmF0aXZlcyAke0R9JHtiaW5kaXJ9L3VwZGF0ZS1hbHRlcm5hdGl2ZXMKKwlsbiAtcyBhbHRlcm5hdGl2ZXMuOCAke0R9JHttYW5kaXJ9L21hbjgvdXBkYXRlLWFsdGVybmF0aXZlcy44Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2xpbnV4c3RkYmFzZSgpIHsKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9sc2IKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Noa2NvbmZpZy9jaGtjb25maWdfMS4zLjU4LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY2hrY29uZmlnL2Noa2NvbmZpZ18xLjMuNTguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg4ODQ3YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Noa2NvbmZpZy9jaGtjb25maWdfMS4zLjU4LmJiCkBAIC0wLDAgKzEsNjUgQEAKK1NVTU1BUlkgPSAiQSBzeXN0ZW0gdG9vbCBmb3IgbWFpbnRhaW5pbmcgdGhlIC9ldGMvcmMqLmQgaGllcmFyY2h5IgorREVTQ1JJUFRJT04gPSAiQ2hrY29uZmlnIGlzIGEgYmFzaWMgc3lzdGVtIHV0aWxpdHkuICBJdCB1cGRhdGVzIGFuZCBxdWVyaWVzIHJ1bmxldmVsIFwKK2luZm9ybWF0aW9uIGZvciBzeXN0ZW0gc2VydmljZXMuICBDaGtjb25maWcgbWFuaXB1bGF0ZXMgdGhlIG51bWVyb3VzIFwKK3N5bWJvbGljIGxpbmtzIGluIC9ldGMvcmMuZCwgdG8gcmVsaWV2ZSBzeXN0ZW0gYWRtaW5pc3RyYXRvcnMgb2Ygc29tZSBcCitvZiB0aGUgZHJ1ZGdlcnkgb2YgbWFudWFsbHkgZWRpdGluZyB0aGUgc3ltYm9saWMgbGlua3MuIgorCitSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTiA9ICJWZXJzaW9uIDEuNSByZXF1aXJlcyBzZWxpbnV4IgorCitIT01FUEFHRSA9ICJodHRwOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9jL2gvY2hrY29uZmlnIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTU3NGM2OTY1YWU1ZjU4M2U1NTg4MGUzOTdmYmIwMTgiCisKK0RFUEVORFMgPSAibGlibmV3dCBwb3B0IgorUFJPVklERVMgKz0gInZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcyIKKworUFIgPSAicjciCisKK1NSQ19VUkkgPSAiaHR0cDovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMvYy9oL2Noa2NvbmZpZy8ke0JQTn0tJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gImMyMDM5Y2E2N2YyNzQ5ZmUwYzA2ZWY3YzZmOGVlMjQ2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjE4YjQ5N2QyNWIyY2FkYTk1NWM3MjgxMGU0NWZjYWQ4MjgwZDEwNWYxN2NmNDVlMjk3MGYxODI3MTIxMWRlNjgiCisKK2luaGVyaXQgZ2V0dGV4dAorCisjIE1ha2VmaWxlIHVzZXMgUlBNX09QVF9GTEFHUyB0byBjb25zdHJ1Y3QgQ0ZMQUdTCisjCitFWFRSQV9PRU1BS0UgPSAiXAorICAgICdSUE1fT1BUX0ZMQUdTPSR7Q0ZMQUdTfScgXAorICAgICdMREZMQUdTPSR7TERGTEFHU30nIFwKKyAgICAnQklORElSPSR7YmFzZV9zYmluZGlyfScgXAorICAgICdTQklORElSPSR7c2JpbmRpcn0nIFwKKyAgICAnTUFORElSPSR7bWFuZGlyfScgXAorICAgICdBTFRESVI9JHtsb2NhbHN0YXRlZGlyfS9saWIvYWx0ZXJuYXRpdmVzJyBcCisgICAgJ0FMVERBVEFESVI9JHtzeXNjb25mZGlyfS9hbHRlcm5hdGl2ZXMnIFwKKyIKKworZG9fdW5wYWNrW3Bvc3RmdW5jc10gKz0gIm9iZXlfdmFyaWFibGVzIgorZG9fdW5wYWNrW3ZhcmRlcHNdICs9ICJvYmV5X3ZhcmlhYmxlcyIKK29iZXlfdmFyaWFibGVzICgpIHsKKwlzZWQgLWkgLWUgJ3MsL2V0Yywke3N5c2NvbmZkaXJ9LDsgcywvbGliL3N5c3RlbWQsJHtiYXNlX2xpYmRpcn0vc3lzdGVtZCwnICR7U30vbGV2ZWxkYi5oCisJc2VkIC1pIC1lICdzLC9ldGMvYWx0ZXJuYXRpdmVzLCR7c3lzY29uZmRpcn0vYWx0ZXJuYXRpdmVzLCcgXAorCSAgICAgICAtZSAncywvdmFyL2xpYi9hbHRlcm5hdGl2ZXMsJHtsb2NhbHN0YXRlZGlyfS9saWIvYWx0ZXJuYXRpdmVzLCcgXAorCSAgICAgICAtZSAncywvdXNyL3NoYXJlL2xvY2FsZSwke2RhdGFkaXJ9L2xvY2FsZSwnICR7U30vYWx0ZXJuYXRpdmVzLmMKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nICdJTlNUQUxMTkxTRElSPSR7RH0ke2RhdGFkaXJ9L2xvY2FsZScgXAorCQknQklORElSPSR7c2JpbmRpcn0nIGluc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2Noa2NvbmZpZy5kCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1hbHRlcm5hdGl2ZXMgJHtQTn0tYWx0ZXJuYXRpdmVzLWRvYyIKK1NVTU1BUllfJHtQTn0tYWx0ZXJuYXRpdmVzID0gIk1haW50YWluIHN5bWJvbGljIGxpbmtzIGRldGVybWluaW5nIGRlZmF1bHQgY29tbWFuZHMiCitERVNDUklQVElPTl8ke1BOfS1hbHRlcm5hdGl2ZXMgPSAiYWx0ZXJuYXRpdmVzIGNyZWF0ZXMsIHJlbW92ZXMsIG1haW50YWlucyBhbmQgZGlzcGxheXMgXAoraW5mb3JtYXRpb24gYWJvdXQgdGhlIHN5bWJvbGljIGxpbmtzIGNvbXByaXNpbmcgdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0uIgorU1VNTUFSWV8ke1BOfS1hbHRlcm5hdGl2ZXMtZG9jID0gIiR7U1VNTUFSWV8ke1BOfS1hbHRlcm5hdGl2ZXN9IC0gRG9jdW1lbnRhdGlvbiBmaWxlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWFsdGVybmF0aXZlcy1kb2MgPSAiJHtERVNDUklQVElPTl8ke1BOfS1hbHRlcm5hdGl2ZXN9ICBcCitUaGlzIHBhY2thZ2UgY29udGFpbnMgZG9jdW1lbnRhdGlvbi4iCitSUFJPVklERVNfJHtQTn0tYWx0ZXJuYXRpdmVzICs9ICJ1cGRhdGUtYWx0ZXJuYXRpdmVzIgorUkNPTkZMSUNUU18ke1BOfS1hbHRlcm5hdGl2ZXMgPSAidXBkYXRlLWFsdGVybmF0aXZlcy1vcGtnIHVwZGF0ZS1hbHRlcm5hdGl2ZXMtZHBrZyIKK0ZJTEVTXyR7UE59LWFsdGVybmF0aXZlcyA9ICIke3NiaW5kaXJ9L2FsdGVybmF0aXZlcyAke3NiaW5kaXJ9L3VwZGF0ZS1hbHRlcm5hdGl2ZXMgXAorCQkJICAgICR7c3lzY29uZmRpcn0vYWx0ZXJuYXRpdmVzICR7bG9jYWxzdGF0ZWRpcn0vbGliL2FsdGVybmF0aXZlcyIKK0ZJTEVTXyR7UE59LWFsdGVybmF0aXZlcy1kb2MgPSAiJHttYW5kaXJ9L21hbjgvYWx0ZXJuYXRpdmVzLjggXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuOC91cGRhdGUtYWx0ZXJuYXRpdmVzLjgiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWUyMTM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBjcGlvLTIuMTEvZ251L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY3Bpby0yLjExLm9yaWcvZ251L01ha2VmaWxlLmFtCisrKysgY3Bpby0yLjExL2dudS9NYWtlZmlsZS5hbQorQEAgLTczNCw3ICs3MzQsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvY3Bpby1DVkUtMjAxNS0xMTk3LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvY3Bpby1DVkUtMjAxNS0xMTk3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NGFmYjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS9jcGlvLUNWRS0yMDE1LTExOTcucGF0Y2gKQEAgLTAsMCArMSwxNTQgQEAKK0Rlc2NyaXB0aW9uOiBDVkUtMjAxNS0xMTk3CisgQXBwbHkgcGF0Y2ggYnkgVml0ZXpzbGF2IENpemVrIG9mIFN1U0UgdG8gZml4IENWRS0yMDE1LTExOTcuCisgVXBzdHJlYW0gaXMgZG9ybWFudCBvciBubyBsb25nZXIgZXhpc3RpbmcuIFRvIHJlc3RvcmUgdGhlIG9sZAorIGJlaGF2aW91ciB1c2UgLS1leHRyYWN0LW92ZXItc3ltbGlua3MgKENsb3NlczogIzc3NDY2OSkKKyBUaGlzIGlzc3VlIGhhcyBiZWVuIGRpc2NvdmVyZWQgYnkgQWxleGFuZGVyIENoZXJlcGFub3YuCitBdXRob3I6IFZpdGV6c2xhdiBDaXplayA8dmNpemVrQHN1c2UuY3o+CitCdWctRGViaWFuOiBodHRwczovL2J1Z3MuZGViaWFuLm9yZy83NzQ2NjkKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworLS0tIGNwaW8tMi4xMStkZnNnLm9yaWcvZG9jL2NwaW8uMQorKysrIGNwaW8tMi4xMStkZnNnL2RvYy9jcGlvLjEKK0BAIC0yMiw2ICsyMiw3IEBAIGNwaW8gXC0gY29weSBmaWxlcyB0byBhbmQgZnJvbSBhcmNoaXZlcworIFtcLVwtb3duZXI9W3VzZXJdWzouXVtncm91cF1dIFtcLVwtbm8tcHJlc2VydmUtb3duZXJdIFtcLVwtbWVzc2FnZT1tZXNzYWdlXQorIFtcLVwtZm9yY2VcLWxvY2FsXSBbXC1cLW5vXC1hYnNvbHV0ZVwtZmlsZW5hbWVzXSBbXC1cLXNwYXJzZV0KKyBbXC1cLW9ubHlcLXZlcmlmeVwtY3JjXSBbXC1cLXRvXC1zdGRvdXRdIFtcLVwtcXVpZXRdIFtcLVwtcnNoLWNvbW1hbmQ9Y29tbWFuZF0KKytbXC1cLWV4dHJhY3RcLW92ZXJcLXN5bWxpbmtzXQorIFtcLVwtaGVscF0gW1wtXC12ZXJzaW9uXSBbcGF0dGVybi4uLl0gWzwgYXJjaGl2ZV0KKyAKKyAuQiBjcGlvCistLS0gY3Bpby0yLjExK2Rmc2cub3JpZy9zcmMvY29weWluLmMKKysrKyBjcGlvLTIuMTErZGZzZy9zcmMvY29weWluLmMKK0BAIC03MDAsNiArNzAwLDUxIEBAIGNvcHlpbl9saW5rIChzdHJ1Y3QgY3Bpb19maWxlX3N0YXQgKmZpbGUKKyAgIGZyZWUgKGxpbmtfbmFtZSk7CisgfQorIAwKKysKKytzdGF0aWMgaW50CisrcGF0aF9jb250YWluc19zeW1saW5rKGNoYXIgKnBhdGgpCisreworKyAgc3RydWN0IHN0YXQgc3Q7CisrICBjaGFyICpzbGFzaDsKKysgIGNoYXIgKm5leHRzbGFzaDsKKysKKysgIC8qIHdlIGdvdCBOVUxMIHBvaW50ZXIgb3IgZW1wdHkgc3RyaW5nICovCisrICBpZiAoIXBhdGggfHwgISpwYXRoKSB7CisrICAgIHJldHVybiBmYWxzZTsKKysgIH0KKysKKysgIHNsYXNoID0gcGF0aDsKKysKKysgIHdoaWxlICgobmV4dHNsYXNoID0gc3RyY2hyKHNsYXNoICsgMSwgJy8nKSkgIT0gTlVMTCkgeworKyAgICBzbGFzaCA9IG5leHRzbGFzaDsKKysgICAgKnNsYXNoID0gJ1wwJzsKKysKKysgICAgaWYgKGxzdGF0KHBhdGgsICZzdCkgIT0gMCkgeworKyAgICAgIGlmIChlcnJubyA9PSBFTE9PUCkgeworKyAgICAgICAgLyogRUxPT1AgLSB0b28gbWFueSBzeW1saW5rcyAqLworKyAgICAgICAgKnNsYXNoID0gJy8nOworKyAgICAgICAgcmV0dXJuIHRydWU7CisrICAgICAgfSBlbHNlIGlmIChlcnJubyA9PSBFTk9NRU0pIHsKKysgICAgICAgIC8qIE5vIG1lbW9yeSBmb3IgbHN0YXQgLSB0ZXJtaW5hdGUgKi8KKysgICAgICAgIHhhbGxvY19kaWUoKTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgLyogY2Fubm90IGxzdGF0IHBhdGggLSBnaXZlIHVwICovCisrICAgICAgICAqc2xhc2ggPSAnLyc7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgfQorKyAgICB9CisrCisrICAgIGlmIChTX0lTTE5LKHN0LnN0X21vZGUpKSB7CisrICAgICAgKnNsYXNoID0gJy8nOworKyAgICAgIHJldHVybiB0cnVlOworKyAgICB9CisrCisrICAgICpzbGFzaCA9ICcvJzsKKysgIH0KKysKKysgIHJldHVybiBmYWxzZTsKKyt9CisrCisgc3RhdGljIHZvaWQKKyBjb3B5aW5fZmlsZSAoc3RydWN0IGNwaW9fZmlsZV9zdGF0ICpmaWxlX2hkciwgaW50IGluX2ZpbGVfZGVzKQorIHsKK0BAIC0xNDcxLDYgKzE1MTYsMjMgQEAgcHJvY2Vzc19jb3B5X2luICgpCisgCXsKKyAJICAvKiBDb3B5IHRoZSBpbnB1dCBmaWxlIGludG8gdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuICAqLworIAorKyAgICAgICAgICAvKiBDYW4gd2Ugd3JpdGUgZmlsZXMgb3ZlciBzeW1saW5rcz8gKi8KKysgICAgICAgICAgaWYgKCFleHRyYWN0X292ZXJfc3ltbGlua3MpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgaWYgKHBhdGhfY29udGFpbnNfc3ltbGluayhmaWxlX2hkci5jX25hbWUpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgLyogc2tpcCB0aGUgZmlsZSAqLworKyAgICAgICAgICAgICAgICAgIC8qCisrICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCB3cml0ZSBvdmVyIHN5bWxpbmtzLiBTa2lwcGluZyAlc1xuIiwgZmlsZV9oZHIuY19uYW1lKTsKKysgICAgICAgICAgICAgICAgICB0YXBlX3Rvc3NfaW5wdXQgKGluX2ZpbGVfZGVzLCBmaWxlX2hkci5jX2ZpbGVzaXplKTsKKysgICAgICAgICAgICAgICAgICB0YXBlX3NraXBfcGFkZGluZyAoaW5fZmlsZV9kZXMsIGZpbGVfaGRyLmNfZmlsZXNpemUpOworKyAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgICAgICAgICovCisrICAgICAgICAgICAgICAgICAgLyogdGVybWluYXRlICovCisrCSAgICAgICAgICBlcnJvciAoMSwgMCwgXygiQ2FuJ3Qgd3JpdGUgb3ZlciBzeW1saW5rczogJXNcbiIpLCBmaWxlX2hkci5jX25hbWUpOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKworIAkgIC8qIERvIHdlIG5lZWQgdG8gcmVuYW1lIHRoZSBmaWxlPyAqLworIAkgIGlmIChyZW5hbWVfZmxhZyB8fCByZW5hbWVfYmF0Y2hfZmlsZSkKKyAJICAgIHsKKy0tLSBjcGlvLTIuMTErZGZzZy5vcmlnL3NyYy9leHRlcm4uaAorKysrIGNwaW8tMi4xMStkZnNnL3NyYy9leHRlcm4uaAorQEAgLTk1LDYgKzk1LDcgQEAgZXh0ZXJuIGNoYXIgaW5wdXRfaXNfc3BlY2lhbDsKKyBleHRlcm4gY2hhciBvdXRwdXRfaXNfc3BlY2lhbDsKKyBleHRlcm4gY2hhciBpbnB1dF9pc19zZWVrYWJsZTsKKyBleHRlcm4gY2hhciBvdXRwdXRfaXNfc2Vla2FibGU7CisrZXh0ZXJuIGJvb2wgZXh0cmFjdF9vdmVyX3N5bWxpbmtzOworIGV4dGVybiBpbnQgKCp4c3RhdCkgKCk7CisgZXh0ZXJuIHZvaWQgKCpjb3B5X2Z1bmN0aW9uKSAoKTsKKyAMCistLS0gY3Bpby0yLjExK2Rmc2cub3JpZy9zcmMvZ2xvYmFsLmMKKysrKyBjcGlvLTIuMTErZGZzZy9zcmMvZ2xvYmFsLmMKK0BAIC0xODcsNiArMTg3LDkgQEAgYm9vbCB0b19zdGRvdXRfb3B0aW9uID0gZmFsc2U7CisgLyogVGhlIG5hbWUgdGhpcyBwcm9ncmFtIHdhcyBydW4gd2l0aC4gICovCisgY2hhciAqcHJvZ3JhbV9uYW1lOworIAorKy8qIEV4dHJhY3QgZmlsZXMgb3ZlciBzeW1ib2xpYyBsaW5rcyAqLworK2Jvb2wgZXh0cmFjdF9vdmVyX3N5bWxpbmtzOworKworIC8qIEEgcG9pbnRlciB0byBlaXRoZXIgbHN0YXQgb3Igc3RhdCwgZGVwZW5kaW5nIG9uIHdoZXRoZXIKKyAgICBkZXJlZmVyZW5jaW5nIG9mIHN5bWxpbmtzIGlzIGRvbmUgZm9yIGlucHV0IGZpbGVzLiAgKi8KKyBpbnQgKCp4c3RhdCkgKCk7CistLS0gY3Bpby0yLjExK2Rmc2cub3JpZy9zcmMvbWFpbi5jCisrKysgY3Bpby0yLjExK2Rmc2cvc3JjL21haW4uYworQEAgLTU3LDcgKzU3LDggQEAgZW51bSBjcGlvX29wdGlvbnMgeworICAgRk9SQ0VfTE9DQUxfT1BUSU9OLCAgICAgICAgICAgIAorICAgREVCVUdfT1BUSU9OLCAgICAgICAgICAgICAgICAgIAorICAgQkxPQ0tfU0laRV9PUFRJT04sICAgICAgICAgICAgIAorLSAgVE9fU1RET1VUX09QVElPTgorKyAgVE9fU1RET1VUX09QVElPTiwKKysgIEVYVFJBQ1RfT1ZFUl9TWU1MSU5LUworIH07CisgCisgY29uc3QgY2hhciAqcHJvZ3JhbV9hdXRob3JzW10gPQorQEAgLTIyMiw2ICsyMjMsOCBAQCBzdGF0aWMgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdGlvbnNbXSA9IHsKKyAgICBOXygiQ3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgd2hlcmUgbmVlZGVkIiksIEdSSUQrMSB9LAorICAgeyJuby1wcmVzZXJ2ZS1vd25lciIsIE5PX1BSRVNFUlZFX09XTkVSX09QVElPTiwgMCwgMCwKKyAgICBOXygiRG8gbm90IGNoYW5nZSB0aGUgb3duZXJzaGlwIG9mIHRoZSBmaWxlcyIpLCBHUklEKzEgfSwKKysgIHsiZXh0cmFjdC1vdmVyLXN5bWxpbmtzIiwgRVhUUkFDVF9PVkVSX1NZTUxJTktTLCAwLCAwLAorKyAgIE5fKCJGb3JjZSB3cml0aW5nIG92ZXIgc3ltYm9saWMgbGlua3MiKSwgR1JJRCsxIH0sCisgICB7InVuY29uZGl0aW9uYWwiLCAndScsIE5VTEwsIDAsCisgICAgTl8oIlJlcGxhY2UgYWxsIGZpbGVzIHVuY29uZGl0aW9uYWxseSIpLCBHUklEKzEgfSwKKyAgIHsic3BhcnNlIiwgU1BBUlNFX09QVElPTiwgTlVMTCwgMCwKK0BAIC00MTIsNiArNDE1LDEwIEBAIGNyYyBuZXdjIG9kYyBiaW4gdXN0YXIgdGFyIChhbGwtY2FwcyBhbHMKKyAgICAgICBub19jaG93bl9mbGFnID0gdHJ1ZTsKKyAgICAgICBicmVhazsKKyAKKysgICAgY2FzZSBFWFRSQUNUX09WRVJfU1lNTElOS1M6CQkgICAgICAgIC8qIC0tZXh0cmFjdC1vdmVyLXN5bWxpbmtzICovCisrICAgICAgZXh0cmFjdF9vdmVyX3N5bWxpbmtzID0gdHJ1ZTsKKysgICAgICBicmVhazsKKysKKyAgICAgY2FzZSAnbyc6CQkvKiBDb3B5LW91dCBtb2RlLiAgKi8KKyAgICAgICBpZiAoY29weV9mdW5jdGlvbiAhPSAwKQorIAllcnJvciAoUEFYRVhJVF9GQUlMVVJFLCAwLCBfKCJNb2RlIGFscmVhZHkgZGVmaW5lZCIpKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjExL2ZpeC1tZW1vcnktb3ZlcnJ1bi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjExL2ZpeC1tZW1vcnktb3ZlcnJ1bi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWNkM2NmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvZml4LW1lbW9yeS1vdmVycnVuLnBhdGNoCkBAIC0wLDAgKzEsMjIwIEBACitjcGlvOiBGaXggbWVtb3J5IG92ZXJydW4gb24gcmVhZGluZyBpbXByb3Blcmx5IGNyZWF0ZWQgbGluayByZWNvcmRzCisKK1NpZ25lZC1vZmYtYnk6IEJpYW4gTmFpbWVuZyA8Ymlhbm5tQGNuLmZ1aml0c3UuY29tPgorCitodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvY2dpdC9jcGlvLmdpdC9jb21taXQvP2lkPTc0NmYzZmY2NzBkY2ZjZGQyOGZjYzk5MGU3OWNkNmZjY2M3YWU0OGQKKworICAqIHNyYy9jb3B5aW4uYyAoZ2V0X2xpbmtfbmFtZSk6IE5ldyBmdW5jdGlvbi4KKyAgKGxpc3RfZmlsZSwgY29weWluX2xpbmspOiB1c2UgZ2V0X2xpbmtfbmFtZQorCisgICogdGVzdHMvc3ltbGluay1iYWQtbGVuZ3RoLmF0OiBOZXcgZmlsZS4KKyAgKiB0ZXN0cy9zeW1saW5rLWxvbmcuYXQ6IE5ldyBmaWxlLgorICAqIHRlc3RzL01ha2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzLgorICAqIHRlc3RzL3Rlc3RzdWl0ZS5hdDogTGlrZXdpc2UuCisKKyAgU2VlIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY3Bpby8yMDE0LTExL21zZzAwMDA3Lmh0bWwKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBTZXJnZXkgUG96bnlha29mZiA8Z3JheUBnbnUub3JnLnVhPgorCitkaWZmIC1OdXJwIGNwaW8tMi4xMS5vcmlnL3NyYy9jb3B5aW4uYyBjcGlvLTIuMTEvc3JjL2NvcHlpbi5jCistLS0gY3Bpby0yLjExLm9yaWcvc3JjL2NvcHlpbi5jCTIwMTAtMDItMTUgMTg6MDI6MjMuMDAwMDAwMDAwICswODAwCisrKysgY3Bpby0yLjExL3NyYy9jb3B5aW4uYwkyMDE0LTEyLTA4IDEzOjE0OjA0LjM1NTU0NzUwOCArMDgwMAorQEAgLTEyNiw2ICsxMjYsMjggQEAgdGFwZV9za2lwX3BhZGRpbmcgKGludCBpbl9maWxlX2Rlcywgb2ZmXworIH0KKyAKKyAMCisrc3RhdGljIGNoYXIgKgorK2dldF9saW5rX25hbWUgKHN0cnVjdCBjcGlvX2ZpbGVfc3RhdCAqZmlsZV9oZHIsIGludCBpbl9maWxlX2RlcykKKyt7CisrICBvZmZfdCBuID0gZmlsZV9oZHItPmNfZmlsZXNpemUgKyAxOworKyAgY2hhciAqbGlua19uYW1lOworKworKyAgaWYgKG4gPT0gMCB8fCBuID4gU0laRV9NQVgpCisrICAgIHsKKysgICAgICBlcnJvciAoMCwgMCwgXygiJXM6IHN0b3JlZCBmaWxlbmFtZSBsZW5ndGggdG9vIGJpZyIpLCBmaWxlX2hkci0+Y19uYW1lKTsKKysgICAgICBsaW5rX25hbWUgPSBOVUxMOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBsaW5rX25hbWUgPSB4bWFsbG9jIChuKTsKKysgICAgICB0YXBlX2J1ZmZlcmVkX3JlYWQgKGxpbmtfbmFtZSwgaW5fZmlsZV9kZXMsIGZpbGVfaGRyLT5jX2ZpbGVzaXplKTsKKysgICAgICBsaW5rX25hbWVbZmlsZV9oZHItPmNfZmlsZXNpemVdID0gJ1wwJzsKKysgICAgICB0YXBlX3NraXBfcGFkZGluZyAoaW5fZmlsZV9kZXMsIGZpbGVfaGRyLT5jX2ZpbGVzaXplKTsKKysgICAgfQorKyAgcmV0dXJuIGxpbmtfbmFtZTsKKyt9CisrCisrDAorIHN0YXRpYyB2b2lkCisgbGlzdF9maWxlKHN0cnVjdCBjcGlvX2ZpbGVfc3RhdCogZmlsZV9oZHIsIGludCBpbl9maWxlX2RlcykKKyB7CitAQCAtMTM2LDIxICsxNTgsMTYgQEAgbGlzdF9maWxlKHN0cnVjdCBjcGlvX2ZpbGVfc3RhdCogZmlsZV9oZAorIAl7CisgCSAgaWYgKGFyY2hpdmVfZm9ybWF0ICE9IGFyZl90YXIgJiYgYXJjaGl2ZV9mb3JtYXQgIT0gYXJmX3VzdGFyKQorIAkgICAgeworLQkgICAgICBjaGFyICpsaW5rX25hbWUgPSBOVUxMOwkvKiBOYW1lIG9mIGhhcmQgYW5kIHN5bWJvbGljIGxpbmtzLiAgKi8KKy0KKy0JICAgICAgbGlua19uYW1lID0gKGNoYXIgKikgeG1hbGxvYyAoKHVuc2lnbmVkIGludCkgZmlsZV9oZHItPmNfZmlsZXNpemUgKyAxKTsKKy0JICAgICAgbGlua19uYW1lW2ZpbGVfaGRyLT5jX2ZpbGVzaXplXSA9ICdcMCc7CistCSAgICAgIHRhcGVfYnVmZmVyZWRfcmVhZCAobGlua19uYW1lLCBpbl9maWxlX2RlcywgZmlsZV9oZHItPmNfZmlsZXNpemUpOworLQkgICAgICBsb25nX2Zvcm1hdCAoZmlsZV9oZHIsIGxpbmtfbmFtZSk7CistCSAgICAgIGZyZWUgKGxpbmtfbmFtZSk7CistCSAgICAgIHRhcGVfc2tpcF9wYWRkaW5nIChpbl9maWxlX2RlcywgZmlsZV9oZHItPmNfZmlsZXNpemUpOworLQkgICAgICByZXR1cm47CisrCSAgICAgIGNoYXIgKmxpbmtfbmFtZSA9IGdldF9saW5rX25hbWUgKGZpbGVfaGRyLCBpbl9maWxlX2Rlcyk7CisrCSAgICAgIGlmIChsaW5rX25hbWUpCisrCQl7CisrCQkgIGxvbmdfZm9ybWF0IChmaWxlX2hkciwgbGlua19uYW1lKTsKKysJCSAgZnJlZSAobGlua19uYW1lKTsKKysJCX0KKyAJICAgIH0KKyAJICBlbHNlCistCSAgICB7CisgCSAgICAgIGxvbmdfZm9ybWF0IChmaWxlX2hkciwgZmlsZV9oZHItPmNfdGFyX2xpbmtuYW1lKTsKKy0JICAgICAgcmV0dXJuOworLQkgICAgfQorKwkgIHJldHVybjsKKyAJfQorICAgICAgIGVsc2UKKyAjZW5kaWYKK0BAIC02NTAsMTAgKzY2Nyw3IEBAIGNvcHlpbl9saW5rKHN0cnVjdCBjcGlvX2ZpbGVfc3RhdCAqZmlsZV8KKyAKKyAgIGlmIChhcmNoaXZlX2Zvcm1hdCAhPSBhcmZfdGFyICYmIGFyY2hpdmVfZm9ybWF0ICE9IGFyZl91c3RhcikKKyAgICAgeworLSAgICAgIGxpbmtfbmFtZSA9IChjaGFyICopIHhtYWxsb2MgKCh1bnNpZ25lZCBpbnQpIGZpbGVfaGRyLT5jX2ZpbGVzaXplICsgMSk7CistICAgICAgbGlua19uYW1lW2ZpbGVfaGRyLT5jX2ZpbGVzaXplXSA9ICdcMCc7CistICAgICAgdGFwZV9idWZmZXJlZF9yZWFkIChsaW5rX25hbWUsIGluX2ZpbGVfZGVzLCBmaWxlX2hkci0+Y19maWxlc2l6ZSk7CistICAgICAgdGFwZV9za2lwX3BhZGRpbmcgKGluX2ZpbGVfZGVzLCBmaWxlX2hkci0+Y19maWxlc2l6ZSk7CisrICAgICAgbGlua19uYW1lID0gZ2V0X2xpbmtfbmFtZSAoZmlsZV9oZHIsIGluX2ZpbGVfZGVzKTsKKyAgICAgfQorICAgZWxzZQorICAgICB7CitkaWZmIC1OdXJwIGNwaW8tMi4xMS5vcmlnL3Rlc3RzL01ha2VmaWxlLmFtIGNwaW8tMi4xMS90ZXN0cy9NYWtlZmlsZS5hbQorLS0tIGNwaW8tMi4xMS5vcmlnL3Rlc3RzL01ha2VmaWxlLmFtCTIwMTAtMDItMTUgMTg6MDI6MjMuMDAwMDAwMDAwICswODAwCisrKysgY3Bpby0yLjExL3Rlc3RzL01ha2VmaWxlLmFtCTIwMTQtMTItMDggMTM6MTQ6NDkuOTMxNTQ1NzI3ICswODAwCitAQCAtNTIsNiArNTIsOCBAQCBURVNUU1VJVEVfQVQgPSBcCisgIHNldHN0YXQwNC5hdFwKKyAgc2V0c3RhdDA1LmF0XAorICBzeW1saW5rLmF0XAorKyBzeW1saW5rLWJhZC1sZW5ndGguYXRcCisrIHN5bWxpbmstbG9uZy5hdFwKKyAgdmVyc2lvbi5hdAorIAorIFRFU1RTVUlURSA9ICQoc3JjZGlyKS90ZXN0c3VpdGUKK2RpZmYgLU51cnAgY3Bpby0yLjExLm9yaWcvdGVzdHMvc3ltbGluay1iYWQtbGVuZ3RoLmF0IGNwaW8tMi4xMS90ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQKKy0tLSBjcGlvLTIuMTEub3JpZy90ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuMTEvdGVzdHMvc3ltbGluay1iYWQtbGVuZ3RoLmF0CTIwMTQtMTItMDggMTM6MTc6NDUuOTc5NTM4ODQ3ICswODAwCitAQCAtMCwwICsxLDQ5IEBACisrIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tNHRlIHRvIGNyZWF0ZSB0ZXN0c3VpdGUuICAtKi0gQXV0b3Rlc3QgLSotCisrIyBDb3B5cmlnaHQgKEMpIDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKysjIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorKyMgMDIxMTAtMTMwMSBVU0EuCisrCisrIyBDcGlvIHYyLjExIGRpZCBzZWdmYXVsdCB3aXRoIGJhZGx5IHNldCBzeW1saW5rIGxlbmd0aC4KKysjIFJlZmVyZW5jZXM6CisrIyBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWNwaW8vMjAxNC0xMS9tc2cwMDAwNy5odG1sCisrCisrQVRfU0VUVVAoW3N5bWxpbmstYmFkLWxlbmd0aF0pCisrQVRfS0VZV09SRFMoW3N5bWxpbmstbG9uZyBjb3B5b3V0XSkKKysKKytBVF9EQVRBKFtBUkNISVZFLmJhc2U2NF0sCisrW3gzRWpBSUJBdElFdEp5OG5BUUFBQUhSVVlXMEZBQUFBRFFCR1NVeEZBQUJ6YjIxbElHTnZiblJsYm5RS0FNZHhJd0JnUS8raExTY3YKKytKd0VBQUFCMFZFaHVCUUQvLy8vL1RFbE9Td0FBUmtsTVJjZHhBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFDd0FBQUFBQVZGSkJTVXhGCisrVWlFaElRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorK0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKKytBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorK0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKKytBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBPQorK10pCisrCisrQVRfQ0hFQ0soWworK2Jhc2U2NCAtZCBBUkNISVZFLmJhc2U2NCA+IEFSQ0hJVkUgfHwgQVRfU0tJUF9URVNUCisrY3BpbyAtbnR2IDwgQVJDSElWRQorK3Rlc3QgJD8gLWVxIDIKKytdLAorK1swXSwKKytbLXJ3LXJ3LXItLSAgIDEgMTAwMjkgICAgMTAwMzEgICAgICAgICAgMTMgTm92IDI1IDEzOjUyIEZJTEUKKytdLFtjcGlvOiBMSU5LOiBzdG9yZWQgZmlsZW5hbWUgbGVuZ3RoIHRvbyBiaWcKKytjcGlvOiBwcmVtYXR1cmUgZW5kIG9mIGZpbGUKKytdKQorKworK0FUX0NMRUFOVVAKK2RpZmYgLU51cnAgY3Bpby0yLjExLm9yaWcvdGVzdHMvc3ltbGluay1sb25nLmF0IGNwaW8tMi4xMS90ZXN0cy9zeW1saW5rLWxvbmcuYXQKKy0tLSBjcGlvLTIuMTEub3JpZy90ZXN0cy9zeW1saW5rLWxvbmcuYXQJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuMTEvdGVzdHMvc3ltbGluay1sb25nLmF0CTIwMTQtMTItMDggMTM6MTc6NTcuMjE5NTM4NDA4ICswODAwCitAQCAtMCwwICsxLDQ2IEBACisrIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tNHRlIHRvIGNyZWF0ZSB0ZXN0c3VpdGUuICAtKi0gQXV0b3Rlc3QgLSotCisrIyBDb3B5cmlnaHQgKEMpIDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKysjIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorKyMgMDIxMTAtMTMwMSBVU0EuCisrCisrIyBDcGlvIHYyLjExLjkwIGNoYW5nZWQgdGhlIHdheSBzeW1saW5rIG5hbWUgaXMgcmVhZCBmcm9tIGFyY2hpdmUuCisrIyBSZWZlcmVuY2VzOgorKyMgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1jcGlvLzIwMTQtMTEvbXNnMDAwMDcuaHRtbAorKworK0FUX1NFVFVQKFtzeW1saW5rLWxvbmddKQorK0FUX0tFWVdPUkRTKFtzeW1saW5rLWxvbmcgY29weW91dF0pCisrCisrQVRfQ0hFQ0soWworKworKyMgbGVuKGRpcm5hbWUpID4gUkVBREJVRlNJWkUKKytkaXJuYW1lPQorK2ZvciBpIGluIHsxLi41Mn07IGRvCisrICAgIGRpcm5hbWU9Inh4eHh4eHh4eC8kZGlybmFtZSIKKysgICAgbWtkaXIgIiRkaXJuYW1lIgorK2RvbmUKKytsbiAtcyAiJGRpcm5hbWUiIHggfHwgQVRfU0tJUF9URVNUCisrCisrZWNobyB4IHwgY3BpbyAtbyA+IGFyCisrbGlzdD1gY3BpbyAtdHYgPCBhciB8IHNlZCAnc3wuKi0+IHx8J2AKKyt0ZXN0ICIkbGlzdCIgPSAiJGRpcm5hbWUiICYmIGVjaG8gc3VjY2VzcyB8fCBlY2hvIGZhaWwKKytdLAorK1swXSwKKytbc3VjY2VzcworK10sWzIgYmxvY2tzCisrMiBibG9ja3MKKytdKQorKworK0FUX0NMRUFOVVAKK2RpZmYgLU51cnAgY3Bpby0yLjExLm9yaWcvdGVzdHMvdGVzdHN1aXRlLmF0IGNwaW8tMi4xMS90ZXN0cy90ZXN0c3VpdGUuYXQKKy0tLSBjcGlvLTIuMTEub3JpZy90ZXN0cy90ZXN0c3VpdGUuYXQJMjAxMC0wMi0xNSAxODowMjoyMy4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuMTEvdGVzdHMvdGVzdHN1aXRlLmF0CTIwMTQtMTItMDggMTM6MTU6MTMuNTE1NTQ0ODA1ICswODAwCitAQCAtMzEsNiArMzEsOCBAQCBtNF9pbmNsdWRlKFt2ZXJzaW9uLmF0XSkKKyAKKyBtNF9pbmNsdWRlKFtpbm91dC5hdF0pCisgbTRfaW5jbHVkZShbc3ltbGluay5hdF0pCisrbTRfaW5jbHVkZShbc3ltbGluay1iYWQtbGVuZ3RoLmF0XSkKKyttNF9pbmNsdWRlKFtzeW1saW5rLWxvbmcuYXRdKQorIG00X2luY2x1ZGUoW2ludGVyZGlyLmF0XSkKKyAKKyBtNF9pbmNsdWRlKFtzZXRzdGF0MDEuYXRdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvcmVtb3ZlLWdldHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS9yZW1vdmUtZ2V0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGQxMTNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvcmVtb3ZlLWdldHMucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorSVNPIEMxMSByZW1vdmVzIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGdldHMoKSBmcm9tIHRoZSBDIGxhbmd1YWdlLCBlZ2xpYmMgMi4xNisgcmVtb3ZlZCBpdAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK0luZGV4OiBjcGlvLTIuMTEvZ251L3N0ZGlvLmluLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjcGlvLTIuMTEub3JpZy9nbnUvc3RkaW8uaW4uaAkyMDEyLTA3LTA0IDEyOjEzOjQzLjEzMzA2NjI0NyAtMDcwMAorKysrIGNwaW8tMi4xMS9nbnUvc3RkaW8uaW4uaAkyMDEyLTA3LTA0IDEyOjE0OjEwLjE4OTA2NzU2NCAtMDcwMAorQEAgLTEzOCw4ICsxMzgsMTAgQEAKKyAvKiBJdCBpcyB2ZXJ5IHJhcmUgdGhhdCB0aGUgZGV2ZWxvcGVyIGV2ZXIgaGFzIGZ1bGwgY29udHJvbCBvZiBzdGRpbiwKKyAgICBzbyBhbnkgdXNlIG9mIGdldHMgd2FycmFudHMgYW4gdW5jb25kaXRpb25hbCB3YXJuaW5nLiAgQXNzdW1lIGl0IGlzCisgICAgYWx3YXlzIGRlY2xhcmVkLCBzaW5jZSBpdCBpcyByZXF1aXJlZCBieSBDODkuICAqLworKyNpZiBkZWZpbmVkIGdldHMKKyAjdW5kZWYgZ2V0cworIF9HTF9XQVJOX09OX1VTRSAoZ2V0cywgImdldHMgaXMgYSBzZWN1cml0eSBob2xlIC0gdXNlIGZnZXRzIGluc3RlYWQiKTsKKysjZW5kaWYKKyAKKyAjaWYgQEdOVUxJQl9GT1BFTkAKKyAjIGlmIEBSRVBMQUNFX0ZPUEVOQApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvc3RhdGRlZi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjExL3N0YXRkZWYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZiOGU4MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjExL3N0YXRkZWYucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorQXZvaWQgbXVsdGlwbGUgc3RhdCBkZWZpbml0aW9ucworUGF0Y2ggdGFrZW4gZnJvbSBjcGlvIG1haWxpbmcgbGlzdCBwb3N0aW5nIDIwMTAtMDMtMTkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitkaWZmIC11ck4gY3Bpby0yLjExLm9yaWcvc3JjL2ZpbGV0eXBlcy5oIGNwaW8tMi4xMS9zcmMvZmlsZXR5cGVzLmgKKy0tLSBjcGlvLTIuMTEub3JpZy9zcmMvZmlsZXR5cGVzLmgJMjAxMC0wMi0xMiAwMjoxOToyMy4wMDAwMDAwMDAgLTA4MDAKKysrKyBjcGlvLTIuMTEvc3JjL2ZpbGV0eXBlcy5oCTIwMTAtMDctMjMgMTM6MTc6MjUuMDAwMDAwMDAwIC0wNzAwCitAQCAtODIsNCArODIsNiBAQAorICNkZWZpbmUgbHN0YXQgc3RhdAorICNlbmRpZgorIGludCBsc3RhdCAoKTsKKysjaWZuZGVmIHN0YXQKKyBpbnQgc3RhdCAoKTsKKysjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjgvYXZvaWRfaGVhcF9vdmVyZmxvdy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjgvYXZvaWRfaGVhcF9vdmVyZmxvdy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWE3Y2Y1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9hdm9pZF9oZWFwX292ZXJmbG93LnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbYnVnZml4OiBodHRwOi8vd2ViLm52ZC5uaXN0Lmdvdi92aWV3L3Z1bG4vZGV0YWlsP3Z1bG5JZD1DVkUtMjAxMC0wNjI0XQorCitUaGlzIHBhdGNoIGF2b2lkcyBoZWFwIG92ZXJmbG93IHJlcG9ydGVkIGJ5IDoKK2h0dHA6Ly93ZWIubnZkLm5pc3QuZ292L3ZpZXcvdnVsbi9kZXRhaWw/dnVsbklkPUNWRS0yMDEwLTA2MjQKKworVGhpcyBpcyBhIGNsZWFuIHBhdGNoIGZvciB0aGUgR1BMdjIgdGFyIHJlY2lwZS4KKwordGhlIEdQTHYyIHRhciByZWNpcGUgcGF0Y2ggaXMgYWxzbyBhcHBsaWNhYmxlIHRvIHRoaXMgR1BMdjIgY3BpbyAKK3JlY2lwZSwgYXMgdGhleSBzaGFyZSBjb2RlLgorCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzA0LzI1CisKK0luZGV4OiB0YXItMS4xNy9saWIvcnRhcGVsaWIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHRhci0xLjE3Lm9yaWcvbGliL3J0YXBlbGliLmMKKysrKyB0YXItMS4xNy9saWIvcnRhcGVsaWIuYworQEAgLTU3MCw3ICs1NzAsNyBAQCBybXRfcmVhZF9fIChpbnQgaGFuZGxlLCBjaGFyICpidWZmZXIsIHNpCisgCisgICBzcHJpbnRmIChjb21tYW5kX2J1ZmZlciwgIlIlbHVcbiIsICh1bnNpZ25lZCBsb25nKSBsZW5ndGgpOworICAgaWYgKGRvX2NvbW1hbmQgKGhhbmRsZSwgY29tbWFuZF9idWZmZXIpID09IC0xCistICAgICAgfHwgKHN0YXR1cyA9IGdldF9zdGF0dXMgKGhhbmRsZSkpID09IFNBRkVfUkVBRF9FUlJPUikKKysgICAgICB8fCAoKHN0YXR1cyA9IGdldF9zdGF0dXMgKGhhbmRsZSkpID09IFNBRkVfUkVBRF9FUlJPUikgfHwgKHN0YXR1cyA+IGxlbmd0aCkpCisgICAgIHJldHVybiBTQUZFX1JFQURfRVJST1I7CisgCisgICBmb3IgKGNvdW50ZXIgPSAwOyBjb3VudGVyIDwgc3RhdHVzOyBjb3VudGVyICs9IHJsZW4sIGJ1ZmZlciArPSBybGVuKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9maXgtbWVtb3J5LW92ZXJydW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi44L2ZpeC1tZW1vcnktb3ZlcnJ1bi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTQ4ZTcwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9maXgtbWVtb3J5LW92ZXJydW4ucGF0Y2gKQEAgLTAsMCArMSwyMTcgQEAKK2NwaW86IEZpeCBtZW1vcnkgb3ZlcnJ1biBvbiByZWFkaW5nIGltcHJvcGVybHkgY3JlYXRlZCBsaW5rIHJlY29yZHMKKworU2lnbmVkLW9mZi1ieTogQmlhbiBOYWltZW5nIDxiaWFubm1AY24uZnVqaXRzdS5jb20+CisKK2h0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9jZ2l0L2NwaW8uZ2l0L2NvbW1pdC8/aWQ9NzQ2ZjNmZjY3MGRjZmNkZDI4ZmNjOTkwZTc5Y2Q2ZmNjYzdhZTQ4ZAorCisgICogc3JjL2NvcHlpbi5jIChnZXRfbGlua19uYW1lKTogTmV3IGZ1bmN0aW9uLgorICAobGlzdF9maWxlLCBjb3B5aW5fbGluayk6IHVzZSBnZXRfbGlua19uYW1lCisKKyAgKiB0ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQ6IE5ldyBmaWxlLgorICAqIHRlc3RzL3N5bWxpbmstbG9uZy5hdDogTmV3IGZpbGUuCisgICogdGVzdHMvTWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMuCisgICogdGVzdHMvdGVzdHN1aXRlLmF0OiBMaWtld2lzZS4KKworICBTZWUgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1jcGlvLzIwMTQtMTEvbXNnMDAwMDcuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFNlcmdleSBQb3pueWFrb2ZmIDxncmF5QGdudS5vcmcudWE+CisKK2RpZmYgLU51cnAgY3Bpby0yLjgub3JpZy9zcmMvY29weWluLmMgY3Bpby0yLjgvc3JjL2NvcHlpbi5jCistLS0gY3Bpby0yLjgub3JpZy9zcmMvY29weWluLmMJMjAwNy0wNi0wNyAxOTo1ODowMy4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuOC9zcmMvY29weWluLmMJMjAxNC0xMi0wOCAxMTozMDowMS4xNTk3OTE0ODQgKzA4MDAKK0BAIC0xMjYsNiArMTI2LDI4IEBAIHRhcGVfc2tpcF9wYWRkaW5nIChpbnQgaW5fZmlsZV9kZXMsIGludAorIH0KKyAKKyAMCisrc3RhdGljIGNoYXIgKgorK2dldF9saW5rX25hbWUgKHN0cnVjdCBjcGlvX2ZpbGVfc3RhdCAqZmlsZV9oZHIsIGludCBpbl9maWxlX2RlcykKKyt7CisrICBvZmZfdCBuID0gZmlsZV9oZHItPmNfZmlsZXNpemUgKyAxOworKyAgY2hhciAqbGlua19uYW1lOworKworKyAgaWYgKG4gPT0gMCB8fCBuID4gU0laRV9NQVgpCisrICAgIHsKKysgICAgICBlcnJvciAoMCwgMCwgXygiJXM6IHN0b3JlZCBmaWxlbmFtZSBsZW5ndGggdG9vIGJpZyIpLCBmaWxlX2hkci0+Y19uYW1lKTsKKysgICAgICBsaW5rX25hbWUgPSBOVUxMOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBsaW5rX25hbWUgPSB4bWFsbG9jIChuKTsKKysgICAgICB0YXBlX2J1ZmZlcmVkX3JlYWQgKGxpbmtfbmFtZSwgaW5fZmlsZV9kZXMsIGZpbGVfaGRyLT5jX2ZpbGVzaXplKTsKKysgICAgICBsaW5rX25hbWVbZmlsZV9oZHItPmNfZmlsZXNpemVdID0gJ1wwJzsKKysgICAgICB0YXBlX3NraXBfcGFkZGluZyAoaW5fZmlsZV9kZXMsIGZpbGVfaGRyLT5jX2ZpbGVzaXplKTsKKysgICAgfQorKyAgcmV0dXJuIGxpbmtfbmFtZTsKKyt9CisrCisrDAorIHN0YXRpYyB2b2lkCisgbGlzdF9maWxlKHN0cnVjdCBjcGlvX2ZpbGVfc3RhdCogZmlsZV9oZHIsIGludCBpbl9maWxlX2RlcykKKyB7CitAQCAtMTM2LDIxICsxNTgsMTYgQEAgbGlzdF9maWxlKHN0cnVjdCBjcGlvX2ZpbGVfc3RhdCogZmlsZV9oZAorIAl7CisgCSAgaWYgKGFyY2hpdmVfZm9ybWF0ICE9IGFyZl90YXIgJiYgYXJjaGl2ZV9mb3JtYXQgIT0gYXJmX3VzdGFyKQorIAkgICAgeworLQkgICAgICBjaGFyICpsaW5rX25hbWUgPSBOVUxMOwkvKiBOYW1lIG9mIGhhcmQgYW5kIHN5bWJvbGljIGxpbmtzLiAgKi8KKy0KKy0JICAgICAgbGlua19uYW1lID0gKGNoYXIgKikgeG1hbGxvYyAoKHVuc2lnbmVkIGludCkgZmlsZV9oZHItPmNfZmlsZXNpemUgKyAxKTsKKy0JICAgICAgbGlua19uYW1lW2ZpbGVfaGRyLT5jX2ZpbGVzaXplXSA9ICdcMCc7CistCSAgICAgIHRhcGVfYnVmZmVyZWRfcmVhZCAobGlua19uYW1lLCBpbl9maWxlX2RlcywgZmlsZV9oZHItPmNfZmlsZXNpemUpOworLQkgICAgICBsb25nX2Zvcm1hdCAoZmlsZV9oZHIsIGxpbmtfbmFtZSk7CistCSAgICAgIGZyZWUgKGxpbmtfbmFtZSk7CistCSAgICAgIHRhcGVfc2tpcF9wYWRkaW5nIChpbl9maWxlX2RlcywgZmlsZV9oZHItPmNfZmlsZXNpemUpOworLQkgICAgICByZXR1cm47CisrCSAgICAgIGNoYXIgKmxpbmtfbmFtZSA9IGdldF9saW5rX25hbWUgKGZpbGVfaGRyLCBpbl9maWxlX2Rlcyk7CisrCSAgICAgIGlmIChsaW5rX25hbWUpCisrCQl7CisrCQkgIGxvbmdfZm9ybWF0IChmaWxlX2hkciwgbGlua19uYW1lKTsKKysJCSAgZnJlZSAobGlua19uYW1lKTsKKysJCX0KKyAJICAgIH0KKyAJICBlbHNlCistCSAgICB7CisgCSAgICAgIGxvbmdfZm9ybWF0IChmaWxlX2hkciwgZmlsZV9oZHItPmNfdGFyX2xpbmtuYW1lKTsKKy0JICAgICAgcmV0dXJuOworLQkgICAgfQorKwkgIHJldHVybjsKKyAJfQorICAgICAgIGVsc2UKKyAjZW5kaWYKK0BAIC03MzIsMTAgKzc0OSw3IEBAIGNvcHlpbl9saW5rKHN0cnVjdCBjcGlvX2ZpbGVfc3RhdCAqZmlsZV8KKyAKKyAgIGlmIChhcmNoaXZlX2Zvcm1hdCAhPSBhcmZfdGFyICYmIGFyY2hpdmVfZm9ybWF0ICE9IGFyZl91c3RhcikKKyAgICAgeworLSAgICAgIGxpbmtfbmFtZSA9IChjaGFyICopIHhtYWxsb2MgKCh1bnNpZ25lZCBpbnQpIGZpbGVfaGRyLT5jX2ZpbGVzaXplICsgMSk7CistICAgICAgbGlua19uYW1lW2ZpbGVfaGRyLT5jX2ZpbGVzaXplXSA9ICdcMCc7CistICAgICAgdGFwZV9idWZmZXJlZF9yZWFkIChsaW5rX25hbWUsIGluX2ZpbGVfZGVzLCBmaWxlX2hkci0+Y19maWxlc2l6ZSk7CistICAgICAgdGFwZV9za2lwX3BhZGRpbmcgKGluX2ZpbGVfZGVzLCBmaWxlX2hkci0+Y19maWxlc2l6ZSk7CisrICAgICAgbGlua19uYW1lID0gZ2V0X2xpbmtfbmFtZSAoZmlsZV9oZHIsIGluX2ZpbGVfZGVzKTsKKyAgICAgfQorICAgZWxzZQorICAgICB7CitkaWZmIC1OdXJwIGNwaW8tMi44Lm9yaWcvdGVzdHMvTWFrZWZpbGUuYW0gY3Bpby0yLjgvdGVzdHMvTWFrZWZpbGUuYW0KKy0tLSBjcGlvLTIuOC5vcmlnL3Rlc3RzL01ha2VmaWxlLmFtCTIwMDYtMTAtMjQgMTg6MzI6MTMuMDAwMDAwMDAwICswODAwCisrKysgY3Bpby0yLjgvdGVzdHMvTWFrZWZpbGUuYW0JMjAxNC0xMi0wOCAxMTozMDo1Mi4zODc3ODk0ODIgKzA4MDAKK0BAIC00NSw2ICs0NSw4IEBAIFRFU1RTVUlURV9BVCA9IFwKKyAgdGVzdHN1aXRlLmF0XAorICBpbm91dC5hdFwKKyAgc3ltbGluay5hdFwKKysgc3ltbGluay1iYWQtbGVuZ3RoLmF0XAorKyBzeW1saW5rLWxvbmcuYXRcCisgIHZlcnNpb24uYXQKKyAKKyBURVNUU1VJVEUgPSAkKHNyY2RpcikvdGVzdHN1aXRlCitkaWZmIC1OdXJwIGNwaW8tMi44Lm9yaWcvdGVzdHMvc3ltbGluay1iYWQtbGVuZ3RoLmF0IGNwaW8tMi44L3Rlc3RzL3N5bWxpbmstYmFkLWxlbmd0aC5hdAorLS0tIGNwaW8tMi44Lm9yaWcvdGVzdHMvc3ltbGluay1iYWQtbGVuZ3RoLmF0CTE5NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgY3Bpby0yLjgvdGVzdHMvc3ltbGluay1iYWQtbGVuZ3RoLmF0CTIwMTQtMTItMDggMTE6MzM6MjUuMjgzNzgzNTA3ICswODAwCitAQCAtMCwwICsxLDQ5IEBACisrIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tNHRlIHRvIGNyZWF0ZSB0ZXN0c3VpdGUuICAtKi0gQXV0b3Rlc3QgLSotCisrIyBDb3B5cmlnaHQgKEMpIDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKysjIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorKyMgMDIxMTAtMTMwMSBVU0EuCisrCisrIyBDcGlvIHYyLjExIGRpZCBzZWdmYXVsdCB3aXRoIGJhZGx5IHNldCBzeW1saW5rIGxlbmd0aC4KKysjIFJlZmVyZW5jZXM6CisrIyBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWNwaW8vMjAxNC0xMS9tc2cwMDAwNy5odG1sCisrCisrQVRfU0VUVVAoW3N5bWxpbmstYmFkLWxlbmd0aF0pCisrQVRfS0VZV09SRFMoW3N5bWxpbmstbG9uZyBjb3B5b3V0XSkKKysKKytBVF9EQVRBKFtBUkNISVZFLmJhc2U2NF0sCisrW3gzRWpBSUJBdElFdEp5OG5BUUFBQUhSVVlXMEZBQUFBRFFCR1NVeEZBQUJ6YjIxbElHTnZiblJsYm5RS0FNZHhJd0JnUS8raExTY3YKKytKd0VBQUFCMFZFaHVCUUQvLy8vL1RFbE9Td0FBUmtsTVJjZHhBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFDd0FBQUFBQVZGSkJTVXhGCisrVWlFaElRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorK0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKKytBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorK0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKKytBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBPQorK10pCisrCisrQVRfQ0hFQ0soWworK2Jhc2U2NCAtZCBBUkNISVZFLmJhc2U2NCA+IEFSQ0hJVkUgfHwgQVRfU0tJUF9URVNUCisrY3BpbyAtbnR2IDwgQVJDSElWRQorK3Rlc3QgJD8gLWVxIDIKKytdLAorK1swXSwKKytbLXJ3LXJ3LXItLSAgIDEgMTAwMjkgICAgMTAwMzEgICAgICAgICAgMTMgTm92IDI1IDEzOjUyIEZJTEUKKytdLFtjcGlvOiBMSU5LOiBzdG9yZWQgZmlsZW5hbWUgbGVuZ3RoIHRvbyBiaWcKKytjcGlvOiBwcmVtYXR1cmUgZW5kIG9mIGZpbGUKKytdKQorKworK0FUX0NMRUFOVVAKK2RpZmYgLU51cnAgY3Bpby0yLjgub3JpZy90ZXN0cy9zeW1saW5rLWxvbmcuYXQgY3Bpby0yLjgvdGVzdHMvc3ltbGluay1sb25nLmF0CistLS0gY3Bpby0yLjgub3JpZy90ZXN0cy9zeW1saW5rLWxvbmcuYXQJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuOC90ZXN0cy9zeW1saW5rLWxvbmcuYXQJMjAxNC0xMi0wOCAxMTozNDoyOC44MDc3ODEwMjQgKzA4MDAKK0BAIC0wLDAgKzEsNDYgQEAKKysjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b200dGUgdG8gY3JlYXRlIHRlc3RzdWl0ZS4gIC0qLSBBdXRvdGVzdCAtKi0KKysjIENvcHlyaWdodCAoQykgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgYW55IGxhdGVyIHZlcnNpb24uCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisrIyAwMjExMC0xMzAxIFVTQS4KKysKKysjIENwaW8gdjIuMTEuOTAgY2hhbmdlZCB0aGUgd2F5IHN5bWxpbmsgbmFtZSBpcyByZWFkIGZyb20gYXJjaGl2ZS4KKysjIFJlZmVyZW5jZXM6CisrIyBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWNwaW8vMjAxNC0xMS9tc2cwMDAwNy5odG1sCisrCisrQVRfU0VUVVAoW3N5bWxpbmstbG9uZ10pCisrQVRfS0VZV09SRFMoW3N5bWxpbmstbG9uZyBjb3B5b3V0XSkKKysKKytBVF9DSEVDSyhbCisrCisrIyBsZW4oZGlybmFtZSkgPiBSRUFEQlVGU0laRQorK2Rpcm5hbWU9CisrZm9yIGkgaW4gezEuLjUyfTsgZG8KKysgICAgZGlybmFtZT0ieHh4eHh4eHh4LyRkaXJuYW1lIgorKyAgICBta2RpciAiJGRpcm5hbWUiCisrZG9uZQorK2xuIC1zICIkZGlybmFtZSIgeCB8fCBBVF9TS0lQX1RFU1QKKysKKytlY2hvIHggfCBjcGlvIC1vID4gYXIKKytsaXN0PWBjcGlvIC10diA8IGFyIHwgc2VkICdzfC4qLT4gfHwnYAorK3Rlc3QgIiRsaXN0IiA9ICIkZGlybmFtZSIgJiYgZWNobyBzdWNjZXNzIHx8IGVjaG8gZmFpbAorK10sCisrWzBdLAorK1tzdWNjZXNzCisrXSxbMiBibG9ja3MKKysyIGJsb2NrcworK10pCisrCisrQVRfQ0xFQU5VUAorZGlmZiAtTnVycCBjcGlvLTIuOC5vcmlnL3Rlc3RzL3Rlc3RzdWl0ZS5hdCBjcGlvLTIuOC90ZXN0cy90ZXN0c3VpdGUuYXQKKy0tLSBjcGlvLTIuOC5vcmlnL3Rlc3RzL3Rlc3RzdWl0ZS5hdAkyMDA2LTEwLTI0IDE4OjMyOjEzLjAwMDAwMDAwMCArMDgwMAorKysrIGNwaW8tMi44L3Rlc3RzL3Rlc3RzdWl0ZS5hdAkyMDE0LTEyLTA4IDExOjM0OjU2LjUxNTc3OTk0MiArMDgwMAorQEAgLTMxLDMgKzMxLDUgQEAgbTRfaW5jbHVkZShbdmVyc2lvbi5hdF0pCisgCisgbTRfaW5jbHVkZShbaW5vdXQuYXRdKQorIG00X2luY2x1ZGUoW3N5bWxpbmsuYXRdKQorK200X2luY2x1ZGUoW3N5bWxpbmstYmFkLWxlbmd0aC5hdF0pCisrbTRfaW5jbHVkZShbc3ltbGluay1sb25nLmF0XSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjgvbTRleHRlbnNpb25zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9tNGV4dGVuc2lvbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2NTg1ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjgvbTRleHRlbnNpb25zLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCisjIERlZmluZSBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMgb25seSBpZiBpdCB3YXMgcHJldmlvdXNseSB1bmRlZmluZWQuCisjIFRoaXMgaXMgbmVlZGVkIHRvIGNvbmZpZ3VyZSBjb3JyZWN0bHkgd2l0aCBuZXdlciB2ZXJzaW9ucyBvZiBhdXRvY29uZi4KKworZGlmZiAtdXJOIGNwaW8tMi44Lm9yaWcvbTQvZXh0ZW5zaW9ucy5tNCBjcGlvLTIuOC9tNC9leHRlbnNpb25zLm00CistLS0gY3Bpby0yLjgub3JpZy9tNC9leHRlbnNpb25zLm00CTIwMDYtMTAtMTIgMDQ6MzQ6NDUuMDAwMDAwMDAwIC0wNzAwCisrKysgY3Bpby0yLjgvbTQvZXh0ZW5zaW9ucy5tNAkyMDEwLTA3LTIzIDE0OjM3OjM2LjAwMDAwMDAwMCAtMDcwMAorQEAgLTEsNCArMSw0IEBACistIyBzZXJpYWwgNCAgLSotIEF1dG9jb25mIC0qLQorKyMgc2VyaWFsIDUgIC0qLSBBdXRvY29uZiAtKi0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0uCisgCisgIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitAQCAtMTYsNiArMTYsNyBAQAorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorICMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorK200X2lmZGVmKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLCBbXSwgWworIEFDX0RFRlVOKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorIFsKKyAgIEFDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKQorQEAgLTQ4LDcgKzQ5LDcgQEAKKyAgICAgQUNfREVGSU5FKFtfX0VYVEVOU0lPTlNfX10pCisgICBBQ19ERUZJTkUoW19QT1NJWF9QVEhSRUFEX1NFTUFOVElDU10pCisgICBBQ19ERUZJTkUoW19UQU5ERU1fU09VUkNFXSkKKy1dKQorK10pXSkKKyAKKyAjIGdsX1VTRV9TWVNURU1fRVhURU5TSU9OUworICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi44L3N0YXRkZWYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi44L3N0YXRkZWYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAwNzk5ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjgvc3RhdGRlZi5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworIyBBdm9pZCBtdWx0aXBsZSBzdGF0IGRlZmluaXRpb25zCisjIFBhdGNoIHRha2VuIGZyb20gY3BpbyBtYWlsaW5nIGxpc3QgcG9zdGluZyAyMDEwLTAzLTE5CisKK2RpZmYgLXVyTiBjcGlvLTIuMTEub3JpZy9zcmMvZmlsZXR5cGVzLmggY3Bpby0yLjExL3NyYy9maWxldHlwZXMuaAorLS0tIGNwaW8tMi4xMS5vcmlnL3NyYy9maWxldHlwZXMuaAkyMDEwLTAyLTEyIDAyOjE5OjIzLjAwMDAwMDAwMCAtMDgwMAorKysrIGNwaW8tMi4xMS9zcmMvZmlsZXR5cGVzLmgJMjAxMC0wNy0yMyAxMzoxNzoyNS4wMDAwMDAwMDAgLTA3MDAKK0BAIC04Miw0ICs4Miw2IEBACisgI2RlZmluZSBsc3RhdCBzdGF0CisgI2VuZGlmCisgaW50IGxzdGF0ICgpOworKyNpZm5kZWYgc3RhdAorIGludCBzdGF0ICgpOworKyNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvXzIuMTEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW9fMi4xMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWQ5MmJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvXzIuMTEuYmIKQEAgLTAsMCArMSwxNSBAQAoraW5jbHVkZSBjcGlvX3YyLmluYworCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjI3ZGVmZTFlOTZjMmUxZWNkNGUwYzliZTg5Njc5NDkiCisKK1BSID0gInI1IgorCitTUkNfVVJJICs9ICJmaWxlOi8vcmVtb3ZlLWdldHMucGF0Y2ggXAorICAgICAgICBmaWxlOi8vZml4LW1lbW9yeS1vdmVycnVuLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2NwaW8tQ1ZFLTIwMTUtMTE5Ny5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTExMmJiNmM0NTg2MzQ2OGI1NDk2YmExMjg3OTJmNmMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjAxYjFkNzc0Y2Q2ZTRjZDM5NDE2MjAzYzkxZWM1OWRiZDY1ZGQyN2Q3OWQ3NWUxYTliODk0OTdlYTY0Mzk3OCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpb18yLjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW9fMi44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOTdkYmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW9fMi44LmJiCkBAIC0wLDAgKzEsMTcgQEAKK3JlcXVpcmUgY3Bpb192Mi5pbmMKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWI3Zjc3MmVhM2EyNDg5MjMxY2I0ODcyNjU2Y2FjMzRiIgorCitQUiA9ICJyNCIKKworU1JDX1VSSSArPSAiZmlsZTovL200ZXh0ZW5zaW9ucy5wYXRjaCBcCisJICAgIGZpbGU6Ly9hdm9pZF9oZWFwX292ZXJmbG93LnBhdGNoIFwKKwkgICAgZmlsZTovL2ZpeC1tZW1vcnktb3ZlcnJ1bi5wYXRjaCBcCisJICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMGNhYTM1NmU2OWUxNDlmYjQ5Yjc2YmFjYzY0NjE1YTEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWIyMDMyNDg4NzRjM2I1YTcyOGIzNTFmMDY1MTNlNTI4MmY3M2UwMTcwYjdmMjA3ZmJmOGMzOWYyOGY2YjRhZCIKKworIyBSZXF1aXJlZCB0byBidWlsZCB3aXRoIGdjYyA0LjMgYW5kIGxhdGVyOgorQ0ZMQUdTICs9ICItZmdudTg5LWlubGluZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpb192Mi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW9fdjIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZGU0YmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW9fdjIuaW5jCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiR05VIGNwaW8gaXMgYSBwcm9ncmFtIHRvIG1hbmFnZSBhcmNoaXZlcyBvZiBmaWxlcyIKK0RFU0NSSVBUSU9OID0gIkdOVSBjcGlvIGlzIGEgdG9vbCBmb3IgY3JlYXRpbmcgYW5kIGV4dHJhY3RpbmcgYXJjaGl2ZXMsIG9yIGNvcHlpbmcgZmlsZXMgZnJvbSBvbmUgcGxhY2UgdG8gXAorYW5vdGhlci4gSXQgaGFuZGxlcyBhIG51bWJlciBvZiBjcGlvIGZvcm1hdHMgYXMgd2VsbCBhcyByZWFkaW5nIGFuZCB3cml0aW5nIHRhciBmaWxlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvY3Bpby8iCitTRUNUSU9OID0gImJhc2UiCisKK0RFUEVORFMgPSAidGV4aW5mby1uYXRpdmUiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9jcGlvL2NwaW8tJHtQVn0udGFyLmd6IFwKKyAgICBmaWxlOi8vc3RhdGRlZi5wYXRjaCBcCisgICAgIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworUyA9ICIke1dPUktESVJ9L2NwaW8tJHtQVn0iCisKK0VYVFJBX09FQ09ORiArPSAiREVGQVVMVF9STVRfRElSPSR7YmFzZV9zYmluZGlyfSIKKworZG9faW5zdGFsbCAoKSB7CisgICAgYXV0b3Rvb2xzX2RvX2luc3RhbGwKKyAgICBpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfS8KKyAgICBtdiAiJHtEfSR7YmluZGlyfS9jcGlvIiAiJHtEfSR7YmFzZV9iaW5kaXJ9L2NwaW8iCisgICAgcm1kaXIgJHtEfSR7YmluZGlyfS8KK30KKworUEFDS0FHRVMgPSsgIiR7UE59LXJtdCIKKworRklMRVNfJHtQTn0tcm10ID0gIiR7YmFzZV9zYmluZGlyfS9ybXQqIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJjcGlvIgorQUxURVJOQVRJVkVfJHtQTn0tcm10ID0gInJtdCIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2NwaW9dID0gIiR7YmFzZV9iaW5kaXJ9L2NwaW8iCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW3JtdF0gPSAiNTAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcm10XSA9ICIke2Jhc2Vfc2JpbmRpcn0vcm10IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWIvMDAwMS1wYWNrbGliLmMtc3VwcG9ydC1kaWN0aW9uYXJ5LWJ5dGUtb3JkZXItZGVwZW5kZW50LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWIvMDAwMS1wYWNrbGliLmMtc3VwcG9ydC1kaWN0aW9uYXJ5LWJ5dGUtb3JkZXItZGVwZW5kZW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYmU3ZGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcmFja2xpYi9jcmFja2xpYi8wMDAxLXBhY2tsaWIuYy1zdXBwb3J0LWRpY3Rpb25hcnktYnl0ZS1vcmRlci1kZXBlbmRlbnQucGF0Y2gKQEAgLTAsMCArMSwzMzkgQEAKK0Zyb20gOGE2ZTQzNzI2YWQwYWU0MWJkMWNjMmMyNDhkOTFkZWIzMTQ1OTM1NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IExlaSBNYW9odWkgPGxlaW1hb2h1aUBjbi5mdWppdHN1LmNvbT4KK0RhdGU6IFR1ZSwgOSBKdW4gMjAxNSAxMToxMTo0OCArMDkwMAorU3ViamVjdDogW1BBVENIXSBwYWNrbGliLmM6IHN1cHBvcnQgZGljdGlvbmFyeSBieXRlIG9yZGVyIGRlcGVuZGVudAorCitUaGUgcHJldmlvdXMgZGljdCBmaWxlcyBhcmUgTk9UIGJ5dGUtb3JkZXIgaW5kZXBlbmRlbnQsIGluIGZhY3QgdGhleSBhcmUKK3Byb2JhYmx5IEFSQ0hJVEVDVFVSRSBTUEVDSUZJQy4KK0NyZWF0ZSB0aGUgZGljdCBmaWxlcyBpbiBiaWcgZW5kaWFuLCBhbmQgY29udmVydCB0byBob3N0IGVuZGlhbiB3aGlsZQorbG9hZCB0aGVtLiBUaGlzIGNvdWxkIGZpeCB0aGUgZW5kaWFuIGlzc3VlIG9uIG11bHRpcGxlIHBsYXRmb3JtLgorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworV2UgY2FuJ3QgdXNlIHRoZSBlbmRpYW4uaCwgaHRvYmUqIGFuZCBiZSp0b2ggZnVuY3Rpb25zIGJlY2F1c2UgdGhleSBhcmUKK25vdCBhdmFpbGFibGUgb24gb2xkZXIgdmVyc2lvbnMgb2YgZ2xpYmMsIHN1Y2ggYXMgdGhhdCBmb3VuZCBpbiBSSEVMCis1LjkuCisKK0NoYW5nZSB0byBjaGVja2luZyBlbmRpYW4gYW5kIGRpcmVjdGx5IGNhbGxpbmcgYnN3YXBfKiBhcyBkZWZpbmVkIGluCitieXRlc3dhcC5oLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK1NpZ25lZC1vZmYtYnk6IExlaSBNYW9odWkgPGxlaW1hb2h1aUBjbi5mdWppdHN1LmNvbT4KKy0tLQorIGxpYi9wYWNrbGliLmMgfCAyMTQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyMTAgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9wYWNrbGliLmMgYi9saWIvcGFja2xpYi5jCitpbmRleCBmODUxNDI0Li4zYWFjODA1IDEwMDY0NAorLS0tIGEvbGliL3BhY2tsaWIuYworKysrIGIvbGliL3BhY2tsaWIuYworQEAgLTE2LDYgKzE2LDEyIEBACisgI2lmZGVmIEhBVkVfU1RESU5UX0gKKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgI2VuZGlmCisrCisrI2lmbmRlZiBfQlNEX1NPVVJDRQorKyNkZWZpbmUgX0JTRF9TT1VSQ0UgICAgICAgICAgICAgLyogU2VlIGZlYXR1cmVfdGVzdF9tYWNyb3MoNykgKi8KKysjZW5kaWYKKysjaW5jbHVkZSA8ZW5kaWFuLmg+CisrI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CisgI2luY2x1ZGUgInBhY2tlci5oIgorIAorIHN0YXRpYyBjb25zdCBjaGFyIHZlcnNfaWRbXSA9ICJwYWNrbGliLmMgOiB2Mi4zcDIgQWxlYyBNdWZmZXR0IDE4IE1heSAxOTkzIjsKK0BAIC00NSw2ICs1MSwxODUgQEAgdHlwZWRlZiBzdHJ1Y3QKKyAgICAgY2hhciBkYXRhX2dldFtOVU1XT1JEU11bTUFYV09SRExFTl07CisgfSBQV0RJQ1Q2NDsKKyAKKytlbnVteworKyAgICBlbl9pczMyLAorKyAgICBlbl9pczY0CisrfTsKKysKKytzdGF0aWMgaW50CisrSWhlYWRlckhvc3RUb0JpZ0VuZGlhbihjaGFyICpwSGVhZGVyLCBpbnQgbkJpdFR5cGUpCisreworKyAgICBpZiAobkJpdFR5cGUgPT0gZW5faXM2NCAmJiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICBzdHJ1Y3QgcGlfaGVhZGVyNjQgKnBIZWFkZXI2NCA9IChzdHJ1Y3QgcGlfaGVhZGVyNjQqKXBIZWFkZXI7CisrCisrICAgICAgICBwSGVhZGVyNjQtPnBpaF9tYWdpYyA9IGJzd2FwXzY0KHBIZWFkZXI2NC0+cGloX21hZ2ljKTsKKysgICAgICAgIHBIZWFkZXI2NC0+cGloX251bXdvcmRzID0gYnN3YXBfNjQocEhlYWRlcjY0LT5waWhfbnVtd29yZHMpOworKyAgICAgICAgcEhlYWRlcjY0LT5waWhfYmxvY2tsZW4gPSBic3dhcF8xNihwSGVhZGVyNjQtPnBpaF9ibG9ja2xlbik7CisrICAgICAgICBwSGVhZGVyNjQtPnBpaF9wYWQgPSBic3dhcF8xNihwSGVhZGVyNjQtPnBpaF9wYWQpOworKworKyNpZiBERUJVRworKyAgICAgICAgcHJpbnRmKCJIZWFkZXI2NDogbWFnaWMgJXgsIG51bXdvcmRzICV4LCBibG9ja2xlbiAleCwgcGFkICV4XG4iLAorKyAgICAgICAgICBwSGVhZGVyNjQtPnBpaF9tYWdpYywgcEhlYWRlcjY0LT5waWhfbnVtd29yZHMsCisrICAgICAgICAgIHBIZWFkZXI2NC0+cGloX2Jsb2NrbGVuLCBwSGVhZGVyNjQtPnBpaF9wYWQpOworKyNlbmRpZgorKyAgICB9CisrICAgIGVsc2UgaWYgKG5CaXRUeXBlID09IGVuX2lzMzIgJiYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikKKysgICAgeworKyAgICAgICAgc3RydWN0IHBpX2hlYWRlciAqcEhlYWRlcjMyID0gKHN0cnVjdCBwaV9oZWFkZXIqKXBIZWFkZXI7CisrCisrICAgICAgICBwSGVhZGVyMzItPnBpaF9tYWdpYyA9IGJzd2FwXzMyKHBIZWFkZXIzMi0+cGloX21hZ2ljKTsKKysgICAgICAgIHBIZWFkZXIzMi0+cGloX251bXdvcmRzID0gYnN3YXBfMzIocEhlYWRlcjMyLT5waWhfbnVtd29yZHMpOworKyAgICAgICAgcEhlYWRlcjMyLT5waWhfYmxvY2tsZW4gPSBic3dhcF8xNihwSGVhZGVyMzItPnBpaF9ibG9ja2xlbik7CisrICAgICAgICBwSGVhZGVyMzItPnBpaF9wYWQgPSBic3dhcF8xNihwSGVhZGVyMzItPnBpaF9wYWQpOworKworKyNpZiBERUJVRworKyAgICAgICAgcHJpbnRmKCJIZWFkZXIzMjogbWFnaWMgJXgsIG51bXdvcmRzICV4LCBibG9ja2xlbiAleCwgcGFkICV4XG4iLAorKyAgICAgICAgICBwSGVhZGVyMzItPnBpaF9tYWdpYywgcEhlYWRlcjMyLT5waWhfbnVtd29yZHMsCisrICAgICAgICAgIHBIZWFkZXIzMi0+cGloX2Jsb2NrbGVuLCBwSGVhZGVyMzItPnBpaF9wYWQpOworKyNlbmRpZgorKyAgICB9CisrICAgIGVsc2UgaWYgKF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pCisrICAgIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTmVpdGhlciAzMiBvciA2NDogJWRcbiIsIG5CaXRUeXBlKTsKKysgICAgICAgIHJldHVybiAoLTEpOworKyAgICB9CisrCisrICAgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50CisrSWhlYWRlckJpZ0VuZGlhblRvSG9zdChjaGFyICpwSGVhZGVyLCBpbnQgbkJpdFR5cGUpCisreworKyAgICBpZiAobkJpdFR5cGUgPT0gZW5faXM2NCAmJiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICBzdHJ1Y3QgcGlfaGVhZGVyNjQgKnBIZWFkZXI2NCA9IChzdHJ1Y3QgcGlfaGVhZGVyNjQqKXBIZWFkZXI7CisrCisrICAgICAgICBwSGVhZGVyNjQtPnBpaF9tYWdpYyA9IGJzd2FwXzY0KHBIZWFkZXI2NC0+cGloX21hZ2ljKTsKKysgICAgICAgIHBIZWFkZXI2NC0+cGloX251bXdvcmRzID0gYnN3YXBfNjQocEhlYWRlcjY0LT5waWhfbnVtd29yZHMpOworKyAgICAgICAgcEhlYWRlcjY0LT5waWhfYmxvY2tsZW4gPSBic3dhcF8xNihwSGVhZGVyNjQtPnBpaF9ibG9ja2xlbik7CisrICAgICAgICBwSGVhZGVyNjQtPnBpaF9wYWQgPSBic3dhcF8xNihwSGVhZGVyNjQtPnBpaF9wYWQpOworKworKyNpZiBERUJVRworKyAgICAgICAgcHJpbnRmKCJIZWFkZXI2NDogbWFnaWMgJXgsIG51bXdvcmRzICV4LCBibG9ja2xlbiAleCwgcGFkICV4XG4iLAorKyAgICAgICAgICBwSGVhZGVyNjQtPnBpaF9tYWdpYywgcEhlYWRlcjY0LT5waWhfbnVtd29yZHMsCisrICAgICAgICAgIHBIZWFkZXI2NC0+cGloX2Jsb2NrbGVuLCBwSGVhZGVyNjQtPnBpaF9wYWQpOworKyNlbmRpZgorKyAgICB9CisrICAgIGVsc2UgaWYgKG5CaXRUeXBlID09IGVuX2lzMzIgJiYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikKKysgICAgeworKyAgICAgICAgc3RydWN0IHBpX2hlYWRlciAqcEhlYWRlcjMyID0gKHN0cnVjdCBwaV9oZWFkZXIqKXBIZWFkZXI7CisrCisrICAgICAgICBwSGVhZGVyMzItPnBpaF9tYWdpYyA9IGJzd2FwXzMyKHBIZWFkZXIzMi0+cGloX21hZ2ljKTsKKysgICAgICAgIHBIZWFkZXIzMi0+cGloX251bXdvcmRzID0gYnN3YXBfMzIocEhlYWRlcjMyLT5waWhfbnVtd29yZHMpOworKyAgICAgICAgcEhlYWRlcjMyLT5waWhfYmxvY2tsZW4gPSBic3dhcF8xNihwSGVhZGVyMzItPnBpaF9ibG9ja2xlbik7CisrICAgICAgICBwSGVhZGVyMzItPnBpaF9wYWQgPSBic3dhcF8xNihwSGVhZGVyMzItPnBpaF9wYWQpOworKworKyNpZiBERUJVRworKyAgICAgICAgcHJpbnRmKCJIZWFkZXIzMjogbWFnaWMgJXgsIG51bXdvcmRzICV4LCBibG9ja2xlbiAleCwgcGFkICV4XG4iLAorKyAgICAgICAgICAgIHBIZWFkZXIzMi0+cGloX21hZ2ljLCBwSGVhZGVyMzItPnBpaF9udW13b3JkcywKKysgICAgICAgICAgICBwSGVhZGVyMzItPnBpaF9ibG9ja2xlbiwgcEhlYWRlcjMyLT5waWhfcGFkKTsKKysjZW5kaWYKKysgICAgfQorKyAgICBlbHNlIGlmIChfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5laXRoZXIgMzIgb3IgNjQ6ICVkXG4iLCBuQml0VHlwZSk7CisrICAgICAgICByZXR1cm4gKC0xKTsKKysgICAgfQorKworKyAgICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludAorK0h3bXNIb3N0VG9CaWdFbmRpYW4oY2hhciAqcEh3bXMsIGludCBuTGVuLGludCBuQml0VHlwZSkKKyt7CisrICAgIGludCBpID0gMDsKKysKKysgICAgaWYgKG5CaXRUeXBlID09IGVuX2lzNjQgJiYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikKKysgICAgeworKyAgICAgICAgdWludDY0X3QgKnBId21zNjQgPSAodWludDY0X3QqKXBId21zOworKworKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5MZW4gLyBzaXplb2YodWludDY0X3QpOyBpKyspCisrICAgICAgICB7CisrICAgICAgICAgICAgKnBId21zNjQgPSBic3dhcF82NCgqcEh3bXM2NCk7CisrICAgICAgICAgICAgKnBId21zNjQrKzsKKysgICAgICAgIH0KKysKKysgICAgfQorKyAgICBlbHNlIGlmIChuQml0VHlwZSA9PSBlbl9pczMyICYmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pCisrICAgIHsKKysgICAgICAgIHVpbnQzMl90ICpwSHdtczMyID0gKHVpbnQzMl90KilwSHdtczsKKysKKysgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuTGVuIC8gc2l6ZW9mKHVpbnQzMl90KTsgaSsrKQorKyAgICAgICAgeworKyAgICAgICAgICAgICpwSHdtczMyID0gYnN3YXBfMzIoKnBId21zMzIpOworKyAgICAgICAgICAgICpwSHdtczMyKys7CisrICAgICAgICB9CisrCisrICAgIH0KKysgICAgZWxzZSBpZiAoX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikKKysgICAgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJOZWl0aGVyIDMyIG9yIDY0OiAlZFxuIiwgbkJpdFR5cGUpOworKyAgICAgICAgcmV0dXJuICgtMSk7CisrICAgIH0KKysKKysjaWYgREVCVUcKKysgICAgZm9yIChpID0gMDsgaSA8IG5MZW47IGkrPTgpCisrICAgIHsKKysgICAgICAgIHByaW50ZigiaHdtcyVzOiAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlhcbiIsCisrICAgICAgICAgICAgbkJpdFR5cGU9PWVuX2lzNjQ/IjY0IjoiMzIiLCBwSHdtc1tpKzBdJjB4RkYsIHBId21zW2krMV0mMHhGRiwKKysgICAgICAgICAgICBwSHdtc1tpKzJdJjB4RkYsIHBId21zW2krM10mMHhGRiwgcEh3bXNbaSs0XSYweEZGLAorKyAgICAgICAgICAgIHBId21zW2krNV0mMHhGRiwgcEh3bXNbaSs2XSYweEZGLCBwSHdtc1tpKzddJjB4RkYpOworKyAgICB9CisrI2VuZGlmCisrCisrICAgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50CisrSHdtc0JpZ0VuZGlhblRvSG9zdChjaGFyICpwSHdtcywgaW50IG5MZW4sIGludCBuQml0VHlwZSkKKyt7CisrICAgIGludCBpID0gMDsKKysKKysgICAgaWYgKG5CaXRUeXBlID09IGVuX2lzNjQgJiYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikKKysgICAgeworKyAgICAgICAgdWludDY0X3QgKnBId21zNjQgPSAodWludDY0X3QqKXBId21zOworKworKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5MZW4gLyBzaXplb2YodWludDY0X3QpOyBpKyspCisrICAgICAgICB7CisrICAgICAgICAgICAgKnBId21zNjQrKyA9IGJzd2FwXzY0KCpwSHdtczY0KTsKKysgICAgICAgIH0KKysKKysgICAgfQorKyAgICBlbHNlIGlmIChuQml0VHlwZSA9PSBlbl9pczMyICYmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pCisrICAgIHsKKysgICAgICAgIHVpbnQzMl90ICpwSHdtczMyID0gKHVpbnQzMl90KilwSHdtczsKKysKKysgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuTGVuIC8gc2l6ZW9mKHVpbnQzMl90KTsgaSsrKQorKyAgICAgICAgeworKyAgICAgICAgICAgICpwSHdtczMyID0gYnN3YXBfMzIoKnBId21zMzIpOworKyAgICAgICAgICAgICpwSHdtczMyKys7CisrICAgICAgICB9CisrCisrICAgIH0KKysgICAgZWxzZSBpZiAoX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikKKysgICAgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJOZWl0aGVyIDMyIG9yIDY0OiAlZFxuIiwgbkJpdFR5cGUpOworKyAgICAgICAgcmV0dXJuICgtMSk7CisrICAgIH0KKysKKysjaWYgREVCVUcKKysgICAgZm9yIChpID0gMDsgaSA8IG5MZW47IGkrPTgpCisrICAgIHsKKysgICAgICAgIHByaW50ZigiaHdtcyVzOiAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlhcbiIsCisrICAgICAgICAgICAgbkJpdFR5cGU9PWVuX2lzNjQ/IjY0IjoiMzIiLCBwSHdtc1tpKzBdJjB4RkYsIHBId21zW2krMV0mMHhGRiwKKysgICAgICAgICAgICBwSHdtc1tpKzJdJjB4RkYsIHBId21zW2krM10mMHhGRiwgcEh3bXNbaSs0XSYweEZGLAorKyAgICAgICAgICAgIHBId21zW2krNV0mMHhGRiwgcEh3bXNbaSs2XSYweEZGLCBwSHdtc1tpKzddJjB4RkYpOworKyAgICB9CisrI2VuZGlmCisrCisrICAgIHJldHVybiAwOworK30KKyAKKyBzdGF0aWMgaW50CisgX1BXSXNCcm9rZW42NChGSUxFICppZnApCitAQCAtNTcsNiArMjQyLDcgQEAgX1BXSXNCcm9rZW42NChGSUxFICppZnApCisgICAgICAgIHJldHVybiAwOworICAgICB9CisgCisrICAgIEloZWFkZXJCaWdFbmRpYW5Ub0hvc3QoKGNoYXIgKikgJnBkZXNjNjQuaGVhZGVyLCBlbl9pczY0KTsKKyAgICAgcmV0dXJuIChwZGVzYzY0LmhlYWRlci5waWhfbWFnaWMgPT0gUElIX01BR0lDKTsKKyB9CisgCitAQCAtMTQ5LDcgKzMzNSwxMSBAQCBQV09wZW4ocHJlZml4LCBtb2RlKQorIAlwZGVzYy5oZWFkZXIucGloX2Jsb2NrbGVuID0gTlVNV09SRFM7CisgCXBkZXNjLmhlYWRlci5waWhfbnVtd29yZHMgPSAwOworIAorLQlmd3JpdGUoKGNoYXIgKikgJnBkZXNjLmhlYWRlciwgc2l6ZW9mKHBkZXNjLmhlYWRlciksIDEsIGlmcCk7CisrCXN0cnVjdCBwaV9oZWFkZXIgdG1waGVhZGVyMzI7CisrCisrCW1lbWNweSgmdG1waGVhZGVyMzIsICAmcGRlc2MuaGVhZGVyLCBzaXplb2YocGRlc2MuaGVhZGVyKSk7CisrCUloZWFkZXJIb3N0VG9CaWdFbmRpYW4oKGNoYXIgKikgJnRtcGhlYWRlcjMyLCBlbl9pczMyKTsKKysJZndyaXRlKChjaGFyICopICZ0bXBoZWFkZXIzMiwgc2l6ZW9mKHRtcGhlYWRlcjMyKSwgMSwgaWZwKTsKKyAgICAgfSBlbHNlCisgICAgIHsKKyAJcGRlc2MuZmxhZ3MgJj0gflBGT1JfV1JJVEU7CitAQCAtMTczLDYgKzM2Myw3IEBAIFBXT3BlbihwcmVmaXgsIG1vZGUpCisgCSAgICByZXR1cm4gTlVMTDsKKyAJfQorIAorKyAgICAgICAgSWhlYWRlckJpZ0VuZGlhblRvSG9zdCgoY2hhciAqKSAmcGRlc2MuaGVhZGVyLCBlbl9pczMyKTsKKyAgICAgICAgIGlmICgocGRlc2MuaGVhZGVyLnBpaF9tYWdpYyA9PSAwKSB8fCAocGRlc2MuaGVhZGVyLnBpaF9udW13b3JkcyA9PSAwKSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICAvKiB1aC1vaC4gZWl0aGVyIGEgYnJva2VuICI2NC1iaXQiIGZpbGUgb3IgYSBnYXJiYWdlIGZpbGUuICovCitAQCAtMTk1LDYgKzM4Niw3IEBAIFBXT3BlbihwcmVmaXgsIG1vZGUpCisgCQl9CisgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgIH0KKysgICAgICAgICAgICBJaGVhZGVyQmlnRW5kaWFuVG9Ib3N0KChjaGFyICopICZwZGVzYzY0LmhlYWRlciwgZW5faXM2NCk7CisgICAgICAgICAgICAgaWYgKHBkZXNjNjQuaGVhZGVyLnBpaF9tYWdpYyAhPSBQSUhfTUFHSUMpCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAvKiBub3BlLCBub3QgIjY0LWJpdCIgYWZ0ZXIgYWxsICovCitAQCAtMjkwLDYgKzQ4Miw3IEBAIFBXT3BlbihwcmVmaXgsIG1vZGUpCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIHBkZXNjLmZsYWdzICY9IH5QRk9SX1VTRUhXTVM7CisgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgSHdtc0JpZ0VuZGlhblRvSG9zdCgoY2hhciopcGRlc2M2NC5od21zLCBzaXplb2YocGRlc2M2NC5od21zKSwgZW5faXM2NCk7CisgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YocGRlc2MuaHdtcykgLyBzaXplb2YocGRlc2MuaHdtc1swXSk7IGkrKykKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgcGRlc2MuaHdtc1tpXSA9IHBkZXNjNjQuaHdtc1tpXTsKK0BAIC0yOTksNiArNDkyLDcgQEAgUFdPcGVuKHByZWZpeCwgbW9kZSkKKyAJICAgIHsKKyAJCXBkZXNjLmZsYWdzICY9IH5QRk9SX1VTRUhXTVM7CisgCSAgICB9CisrCSAgICBId21zQmlnRW5kaWFuVG9Ib3N0KChjaGFyKilwZGVzYy5od21zLCBzaXplb2YocGRlc2MuaHdtcyksIGVuX2lzMzIpOworICNpZiBERUJVRworICAgICAgICAgICAgIGZvciAoaT0xOyBpPD0weGZmOyBpKyspCisgICAgICAgICAgICAgeworQEAgLTMzMiw3ICs1MjYsMTEgQEAgUFdDbG9zZShwd3ApCisgCSAgICByZXR1cm4gKC0xKTsKKyAJfQorIAorLQlpZiAoIWZ3cml0ZSgoY2hhciAqKSAmcHdwLT5oZWFkZXIsIHNpemVvZihwd3AtPmhlYWRlciksIDEsIHB3cC0+aWZwKSkKKysJc3RydWN0IHBpX2hlYWRlciB0bXBoZWFkZXIzMjsKKysKKysJbWVtY3B5KCZ0bXBoZWFkZXIzMiwgICZwd3AtPmhlYWRlciwgc2l6ZW9mKHB3cC0+aGVhZGVyKSk7CisrCUloZWFkZXJIb3N0VG9CaWdFbmRpYW4oKGNoYXIgKikgJnRtcGhlYWRlcjMyLCBlbl9pczMyKTsKKysJaWYgKCFmd3JpdGUoKGNoYXIgKikgJnRtcGhlYWRlcjMyLCBzaXplb2YodG1waGVhZGVyMzIpLCAxLCBwd3AtPmlmcCkpCisgCXsKKyAJICAgIGZwcmludGYoc3RkZXJyLCAiaW5kZXggbWFnaWMgZndyaXRlIGZhaWxlZFxuIik7CisgCSAgICByZXR1cm4gKC0xKTsKK0BAIC0zNTEsNyArNTQ5LDEyIEBAIFBXQ2xvc2UocHdwKQorIAkgICAgCXByaW50ZigiaHdtWyUwMnhdID0gJWRcbiIsIGksIHB3cC0+aHdtc1tpXSk7CisgI2VuZGlmCisgCSAgICB9CistCSAgICBmd3JpdGUocHdwLT5od21zLCAxLCBzaXplb2YocHdwLT5od21zKSwgcHdwLT53ZnApOworKworKwkgICAgUFdESUNUIHRtcF9wd3A7CisrCisrCSAgICBtZW1jcHkoJnRtcF9wd3AsIHB3cCwgc2l6ZW9mKFBXRElDVCkpOworKwkgICAgSHdtc0hvc3RUb0JpZ0VuZGlhbih0bXBfcHdwLmh3bXMsIHNpemVvZih0bXBfcHdwLmh3bXMpLCBlbl9pczMyKTsKKysJICAgIGZ3cml0ZSh0bXBfcHdwLmh3bXMsIDEsIHNpemVvZih0bXBfcHdwLmh3bXMpLCBwd3AtPndmcCk7CisgCX0KKyAgICAgfQorIAorQEAgLTQwNSw3ICs2MDgsOCBAQCBQdXRQVyhwd3AsIHN0cmluZykKKyAKKyAJZGF0dW0gPSAodWludDMyX3QpIGZ0ZWxsKHB3cC0+ZGZwKTsKKyAKKy0JZndyaXRlKChjaGFyICopICZkYXR1bSwgc2l6ZW9mKGRhdHVtKSwgMSwgcHdwLT5pZnApOworKwl1aW50MzJfdCB0bXBkYXR1bSA9IChfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKSA/IGJzd2FwXzMyKGRhdHVtKSA6IGRhdHVtOworKwlmd3JpdGUoKGNoYXIgKikgJnRtcGRhdHVtLCBzaXplb2YodG1wZGF0dW0pLCAxLCBwd3AtPmlmcCk7CisgCisgCWZwdXRzKHB3cC0+ZGF0YV9wdXRbMF0sIHB3cC0+ZGZwKTsKKyAJcHV0YygwLCBwd3AtPmRmcCk7CitAQCAtNDY0LDYgKzY2OCw3IEBAIEdldFBXKHB3cCwgbnVtYmVyKQorICAgICAgICAgICAgcGVycm9yKCIoaW5kZXggZnJlYWQgZmFpbGVkKSIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKysgICAgICAgZGF0dW02NCA9IChfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKSA/IGJzd2FwXzY0KGRhdHVtNjQpIDogZGF0dW02NDsKKyAgICAgICAgZGF0dW0gPSBkYXR1bTY0OworICAgICB9IGVsc2UgeworICAgICAgICBpZiAoZnNlZWsocHdwLT5pZnAsIHNpemVvZihzdHJ1Y3QgcGlfaGVhZGVyKSArICh0aGlzYmxvY2sgKiBzaXplb2YodWludDMyX3QpKSwgMCkpCitAQCAtNDc3LDYgKzY4Miw3IEBAIEdldFBXKHB3cCwgbnVtYmVyKQorICAgICAgICAgICAgcGVycm9yKCIoaW5kZXggZnJlYWQgZmFpbGVkKSIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKysgICAgICAgZGF0dW0gPSAoX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikgPyBic3dhcF8zMihkYXR1bSkgOiBkYXR1bTsKKyAgICAgfQorIAorIAlpbnQgciA9IDE7CistLSAKKzEuOC40LjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWIvMDAwMi1jcmFrbGliLWZpeC10ZXN0bnVtLWFuZC10ZXN0c3RyLWZhaWxlZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NyYWNrbGliL2NyYWNrbGliLzAwMDItY3Jha2xpYi1maXgtdGVzdG51bS1hbmQtdGVzdHN0ci1mYWlsZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIxMGU4MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NyYWNrbGliL2NyYWNrbGliLzAwMDItY3Jha2xpYi1maXgtdGVzdG51bS1hbmQtdGVzdHN0ci1mYWlsZWQucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorRnJvbSAwNmY5YTg4YjVkZDU1OTdmOTE5OGVhMGNiMzRmNWU5NmYxODBlNmUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorRGF0ZTogU2F0LCAyNyBBcHIgMjAxMyAxNjowMjozMCArMDgwMAorU3ViamVjdDogW1BBVENIXSBjcmFrbGliOmZpeCB0ZXN0bnVtIGFuZCB0ZXN0c3RyIGZhaWxlZAorCitFcnJvciBsb2c6CisuLi4KKyQgLi90ZXN0bnVtCisobnVsbCkucHdkLmd6OiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CitQV09wZW46IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKworJCAuL3V0aWwvdGVzdHN0cgorKG51bGwpLnB3ZC5nejogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorUFdPcGVuOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisuLi4KK1NldCBERUZBVUxUX0NSQUNLTElCX0RJQ1QgYXMgdGhlIHBhdGggb2YgIFBXT3BlbgorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIHV0aWwvdGVzdG51bS5jIHwgICAgMiArLQorIHV0aWwvdGVzdHN0ci5jIHwgICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdXRpbC90ZXN0bnVtLmMgYi91dGlsL3Rlc3RudW0uYworaW5kZXggYWUyMjQ2ZC4uY2EyMTBmZiAxMDA2NDQKKy0tLSBhL3V0aWwvdGVzdG51bS5jCisrKysgYi91dGlsL3Rlc3RudW0uYworQEAgLTIwLDcgKzIwLDcgQEAgbWFpbiAoKQorICAgICBQV0RJQ1QgKnB3cDsKKyAgICAgY2hhciBidWZmZXJbU1RSSU5HU0laRV07CisgCistICAgIGlmICghKHB3cCA9IFBXT3BlbiAoTlVMTCwgInIiKSkpCisrICAgIGlmICghKHB3cCA9IFBXT3BlbiAoREVGQVVMVF9DUkFDS0xJQl9ESUNULCAiciIpKSkKKyAgICAgeworIAlwZXJyb3IgKCJQV09wZW4iKTsKKyAJcmV0dXJuICgtMSk7CitkaWZmIC0tZ2l0IGEvdXRpbC90ZXN0c3RyLmMgYi91dGlsL3Rlc3RzdHIuYworaW5kZXggMmEzMWZhNC4uOWZiOWNkYSAxMDA2NDQKKy0tLSBhL3V0aWwvdGVzdHN0ci5jCisrKysgYi91dGlsL3Rlc3RzdHIuYworQEAgLTE1LDcgKzE1LDcgQEAgbWFpbiAoKQorICAgICBQV0RJQ1QgKnB3cDsKKyAgICAgY2hhciBidWZmZXJbU1RSSU5HU0laRV07CisgCistICAgIGlmICghKHB3cCA9IFBXT3BlbiAoTlVMTCwgInIiKSkpCisrICAgIGlmICghKHB3cCA9IFBXT3BlbiAoREVGQVVMVF9DUkFDS0xJQl9ESUNULCAiciIpKSkKKyAgICAgeworIAlwZXJyb3IgKCJQV09wZW4iKTsKKyAJcmV0dXJuICgtMSk7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NyYWNrbGliL2NyYWNrbGliXzIuOS41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWJfMi45LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBmZmUzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NyYWNrbGliL2NyYWNrbGliXzIuOS41LmJiCkBAIC0wLDAgKzEsNDUgQEAKK1NVTU1BUlkgPSAiUGFzc3dvcmQgc3RyZW5ndGggY2hlY2tlciBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9jcmFja2xpYiIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9ZTNlZGEwMWQ5ODE1ZjhkMjRhYWUyZGJkODliNjhiMDYiCisKK0RFUEVORFMgPSAiY3JhY2tsaWItbmF0aXZlIHpsaWIgcHl0aG9uIgorUkRFUEVORF8ke1BOfS1weXRob24gKz0gInB5dGhvbiIKKworUEFDS0FHRVMgKz0gIiR7UE59LXB5dGhvbiIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1weXRob24gLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0iCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2NyYWNrbGliL2NyYWNrbGliLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXBhY2tsaWIuYy1zdXBwb3J0LWRpY3Rpb25hcnktYnl0ZS1vcmRlci1kZXBlbmRlbnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1jcmFrbGliLWZpeC10ZXN0bnVtLWFuZC10ZXN0c3RyLWZhaWxlZC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjM3Njc5MGE5NWMxZmI2NDVlNTllNmU5ODAzYzc4NTgyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU5YWIwMTM4YmM4Y2Y5MGNjY2I4NTA5YjY5NjlhMDI0ZDVlNThkMmQwMmJjYmRjY2JiOWJhOWI4OGJlM2ZhMzMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcHl0aG9ubmF0aXZlIHB5dGhvbi1kaXIKKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgeworCWNyZWF0ZS1jcmFja2xpYi1kaWN0IC1vICR7RH0ke2RhdGFkaXJ9L2NyYWNrbGliL3B3X2RpY3QgJHtEfSR7ZGF0YWRpcn0vY3JhY2tsaWIvY3JhY2tsaWItc21hbGwKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJc3JjX2Rpcj0iJHtEfSR7YmFzZV9saWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcyIKKwlybSAtZiAkc3JjX2Rpci8qLnB5bworCXJtIC1mICRzcmNfZGlyL3Rlc3RfY3JhY2tsaWIucHkKKwkjIE1vdmUgcHl0aG9uIGZpbGVzIGZyb20gJHtiYXNlX2xpYmRpcn0gdG8gJHtsaWJkaXJ9IHNpbmNlIHVzZWQgLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0KKwlpbnN0YWxsIC1kIC1tIDA3NTUgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LworCW12ICRzcmNfZGlyLyogJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CisJcm0gLWZyICR7RH0ke2Jhc2VfbGliZGlyfS8ke1BZVEhPTl9ESVJ9Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworRklMRVNfJHtQTn0tcHl0aG9uID0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2NyYWNrbGliLnB5IFwKKwkke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9fY3JhY2tsaWIuc28gXAorICAgICIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vLmRlYnVnL19jcmFja2xpYi5zbyIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vX2NyYWNrbGliLmEgXAorCSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L19jcmFja2xpYi5sYSBcCisgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9uZC5pbml0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9uZC5pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUzYjg1MTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllL2Nyb25kLmluaXQKQEAgLTAsMCArMSw1OCBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiBjcm9uZCBjcm9udGFiCisjIERlZmF1bHQtU3RhcnQ6ICAyMzQ1CisjIERlZmF1bHQtU3RvcDogICAwMTYKKyMgU2hvcnQtRGVzY3JpcHRpb246IHJ1biBjcm9uIGRhZW1vbgorIyBEZXNjcmlwdGlvbjogY3JvbiBpcyBhIHN0YW5kYXJkIFVOSVggcHJvZ3JhbSB0aGF0IHJ1bnMgdXNlci1zcGVjaWZpZWQKKyMgICAgICAgICAgICAgIHByb2dyYW1zIGF0IHBlcmlvZGljIHNjaGVkdWxlZCB0aW1lcy4gdml4aWUgY3JvbiBhZGRzIGEKKyMgICAgICAgICAgICAgIG51bWJlciBvZiBmZWF0dXJlcyB0byB0aGUgYmFzaWMgVU5JWCBjcm9uLCBpbmNsdWRpbmcgYmV0dGVyCisjICAgICAgICAgICAgICBzZWN1cml0eSBhbmQgbW9yZSBwb3dlcmZ1bCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCisjIyMgRU5EIElOSVQgSU5GTworCitDUk9ORD0vdXNyL3NiaW4vY3JvbmQKK0NPTkZJRz0vZXRjL3N5c2NvbmZpZy9jcm9uZAorCitbIC1mICRDT05GSUcgXSB8fCBleGl0IDEKK1sgLXggJENST05EIF0gfHwgZXhpdCAxCisKKy4gJENPTkZJRworCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgIGVjaG8gLW4gIlN0YXJ0aW5nIGNyb25kOiAiCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tZXhlYyAkQ1JPTkQgLS0gJENST05EQVJHUworICAgIFJFVFZBTD0kPworICAgIGlmIFsgJFJFVFZBTCAtZXEgMCBdIDsgdGhlbgorICAgICAgICBlY2hvICJPSyIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIkZBSUwiCisgICAgZmkKKyAgICA7OworICBzdG9wKQorICAgIGVjaG8gLW4gIlN0b3BwaW5nIGNyb25kOiAiCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1waWRmaWxlIC92YXIvcnVuL2Nyb25kLnBpZAorICAgIFJFVFZBTD0kPworICAgIGlmIFsgJFJFVFZBTCAtZXEgMCBdIDsgdGhlbgorICAgICAgICBlY2hvICJPSyIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIkZBSUwiCisgICAgZmkKKyAgICA7OworICBzdGF0dXMpCisgICAgc3RhdHVzIGNyb25kCisgICAgZXhpdCAkPworICAgIDs7CisgIHJlc3RhcnQpCisgICAgJDAgc3RvcCAmJiBzbGVlcCAxICYmICQwIHN0YXJ0CisgICAgOzsKKyAgKikKKyAgICBlY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvY3JvbmQge3N0YXJ0fHN0b3B8c3RhdHVzfHJlc3RhcnR9IgorICAgIGV4aXQgMQorZXNhYworCitleGl0IDAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9uZC5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9uZC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MzVhNmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllL2Nyb25kLnNlcnZpY2UKQEAgLTAsMCArMSwxMSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1QZXJpb2RpYyBDb21tYW5kIFNjaGVkdWxlcgorCitbU2VydmljZV0KK0Vudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9jcm9uZAorRXhlY1N0YXJ0PUBTQklORElSQC9jcm9uZCAtbiAkQ1JPTkRBUkdTCitFeGVjUmVsb2FkPUBCQVNFX0JJTkRJUkAva2lsbCAtSFVQICRNQUlOUElECitSZXN0YXJ0PWFsd2F5cworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllL2Nyb25kX3BhbV9jb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllL2Nyb25kX3BhbV9jb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc1ODcyYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbmRfcGFtX2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDE5IEBACitwYXNzd29yZC1hdXRoIGlzIHRoZSBGZWRvcmEncyBjb21tb24gcGFtIGNvbmZpZ3VyZSBmaWxlLCB1c2Ugb2UgY29tbW9uIHBhbQorY29uZmlndXJlIGZpbGVzIGluc3RlYWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLSBjcm9uaWUtMS40LjcvcGFtL2Nyb25kLm9yaWcJMjAxMC0xMi0xNiAxNjo1OTowMi4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcm9uaWUtMS40LjcvcGFtL2Nyb25kCTIwMTEtMDctMjAgMDk6NDc6MTYuMDgwODE5MjAzICswODAwCitAQCAtNCw3ICs0LDcgQEAKKyAjCisgIyBObyBQQU0gYXV0aGVudGljYXRpb24gY2FsbGVkLCBhdXRoIG1vZHVsZXMgbm90IG5lZWRlZAorIGFjY291bnQgICAgcmVxdWlyZWQgICBwYW1fYWNjZXNzLnNvCistYWNjb3VudCAgICBpbmNsdWRlICAgIHBhc3N3b3JkLWF1dGgKKythY2NvdW50ICAgIGluY2x1ZGUgICAgY29tbW9uLWFjY291bnQKKyBzZXNzaW9uICAgIHJlcXVpcmVkICAgcGFtX2xvZ2ludWlkLnNvCistc2Vzc2lvbiAgICBpbmNsdWRlICAgIHBhc3N3b3JkLWF1dGgKKy1hdXRoICAgICAgIGluY2x1ZGUgICAgcGFzc3dvcmQtYXV0aAorK3Nlc3Npb24gICAgaW5jbHVkZSAgICBjb21tb24tc2Vzc2lvbi1ub25pbnRlcmFjdGl2ZQorK2F1dGggICAgICAgaW5jbHVkZSAgICBjb21tb24tYXV0aApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9udGFiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9udGFiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYzRmZWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllL2Nyb250YWIKQEAgLTAsMCArMSwxNCBAQAorIyAvZXRjL2Nyb250YWI6IHN5c3RlbS13aWRlIGNyb250YWIKKyMgVW5saWtlIGFueSBvdGhlciBjcm9udGFiIHlvdSBkb24ndCBoYXZlIHRvIHJ1biB0aGUgYGNyb250YWInCisjIGNvbW1hbmQgdG8gaW5zdGFsbCB0aGUgbmV3IHZlcnNpb24gd2hlbiB5b3UgZWRpdCB0aGlzIGZpbGUKKyMgYW5kIGZpbGVzIGluIC9ldGMvY3Jvbi5kLiBUaGVzZSBmaWxlcyBhbHNvIGhhdmUgdXNlcm5hbWUgZmllbGRzLAorIyB0aGF0IG5vbmUgb2YgdGhlIG90aGVyIGNyb250YWJzIGRvLgorCitTSEVMTD0vYmluL3NoCitQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2Jpbjovc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorCisjICBtICBoICBkb20gbW9uIGRvdyB1c2VyCWNvbW1hbmQKKyMgIDEgICogICAgICogKiAqICAgIHJvb3QgICAgICAgIGNkIC8gJiYgcnVuLXBhcnRzIC9ldGMvY3Jvbi5ob3VybHkKKyMgMzAgIDcgICAgICogKiAqICAgIHJvb3QgICAgICAgIGNkIC8gJiYgcnVuLXBhcnRzIC9ldGMvY3Jvbi5kYWlseQorIyA0MiAgNyAgICAgKiAqIDcgICAgcm9vdCAgICAgICAgY2QgLyAmJiBydW4tcGFydHMgL2V0Yy9jcm9uLndlZWtseQorIyA1NSAgNyAgICAgMSAqICogICAgcm9vdCAgICAgICAgY2QgLyAmJiBydW4tcGFydHMgL2V0Yy9jcm9uLm1vbnRobHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWVfMS41LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllXzEuNS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YmQ1OTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllXzEuNS4wLmJiCkBAIC0wLDAgKzEsODEgQEAKK1NVTU1BUlkgPSAiQ3JvbiBkYWVtb24gZm9yIGV4ZWN1dGluZyBwcm9ncmFtcyBhdCBzZXQgdGltZXMiCitERVNDUklQVElPTiA9ICJDcm9uaWUgY29udGFpbnMgdGhlIHN0YW5kYXJkIFVOSVggZGFlbW9uIGNyb25kIHRoYXQgcnVucyBcCitzcGVjaWZpZWQgcHJvZ3JhbXMgYXQgc2NoZWR1bGVkIHRpbWVzIGFuZCByZWxhdGVkIHRvb2xzLiBJdCBpcyBiYXNlZCBvbiB0aGUgXAorb3JpZ2luYWwgY3JvbiBhbmQgaGFzIHNlY3VyaXR5IGFuZCBjb25maWd1cmF0aW9uIGVuaGFuY2VtZW50cyBsaWtlIHRoZSBcCithYmlsaXR5IHRvIHVzZSBwYW0gYW5kIFNFTGludXguIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL2Nyb25pZS8iCitCVUdUUkFDS0VSID0gIm1tYXNsYW5vQHJlZGhhdC5jb20iCisKKyMgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtIExpY2Vuc2UKK0xJQ0VOU0UgPSAiSVNDICYgQlNELTMtQ2xhdXNlICYgQlNELTItQ2xhdXNlICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZGQyYTU5MjE3MDc2MGUxMzg2Yzc2OWUxMDQzYjM3MjIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2Nyb24uYztlbmRsaW5lPTIwO21kNT1iNDI1YzMzNDI2NTAyNjE3NzEyODM1M2ExNDI2MzNiNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcG9wZW4uYztiZWdpbmxpbmU9MztlbmRsaW5lPTMxO21kNT1lZGQ1MDc0MmQ4ZGVmNzEyZTk0NzJkYmEzNTM2NjhhOSIKKworU0VDVElPTiA9ICJ1dGlscyIKKworU1JDX1VSSSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMvYy9yL2Nyb25pZS9jcm9uaWUtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2Nyb25kLmluaXQgXAorICAgICAgICAgICBmaWxlOi8vY3JvbnRhYiBcCisgICAgICAgICAgIGZpbGU6Ly9jcm9uZC5zZXJ2aWNlIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fU1JDX1VSSX0nLCAnJywgZCl9IgorCitQQU1fU1JDX1VSSSA9ICJmaWxlOi8vY3JvbmRfcGFtX2NvbmZpZy5wYXRjaCIKK1BBTV9ERVBTID0gImxpYnBhbSBsaWJwYW0tcnVudGltZSBwYW0tcGx1Z2luLWFjY2VzcyBwYW0tcGx1Z2luLWxvZ2ludWlkIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOWRiNzVlMTg4NGQ4M2E0NWUwMDJkMTQ1YzZjNTRkNDUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWNmMGUzZjRmNTA0MmE5YzA5NDEzZDYyYzhlMGMwNTVlMTI0MDFmNzBiMTEyNDY1ZjBmODFmMmM4NGViZmIzZiIKKworaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLXJjLmQgdXNlcmFkZCBzeXN0ZW1kCisKK1BBQ0tBR0VDT05GSUcgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUdbYXVkaXRdID0gIi0td2l0aC1hdWRpdCwtLXdpdGhvdXQtYXVkaXQsYXVkaXQsIgorUEFDS0FHRUNPTkZJR1twYW1dID0gIi0td2l0aC1wYW0sLS13aXRob3V0LXBhbSxsaWJwYW0sJHtQQU1fREVQU30iCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJjcm9uZCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDkwIDIgMyA0IDUgLiBzdG9wIDYwIDAgMSA2IC4iCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitHUk9VUEFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSBjcm9udGFiIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiY3JvbmQuc2VydmljZSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vc3lzY29uZmlnLworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWluc3RhbGwgLW0gMDY0NCAke1N9L2Nyb25kLnN5c2NvbmZpZyAke0R9JHtzeXNjb25mZGlyfS9zeXNjb25maWcvY3JvbmQKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9jcm9uZC5pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9jcm9uZAorCisJIyBpbnN0YWxsIHN5c3RlbWQgdW5pdCBmaWxlcworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9jcm9uZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBCQVNFX0JJTkRJUkAsJHtiYXNlX2JpbmRpcn0sZycgXAorCSAgICAgICAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyBcCisJICAgICAgICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2Nyb25kLnNlcnZpY2UKKworCSMgYmVsb3cgYXJlIG5lY2Vzc2FyeSBmb3IgYSBjb21wbGV0ZSBjcm9uIGVudmlyb25tZW50CisJaW5zdGFsbCAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9zcG9vbC9jcm9uCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vY3JvbnRhYiAke0R9JHtzeXNjb25mZGlyfS8KKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9jcm9uLmQKKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9jcm9uLmhvdXJseQorCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uZGFpbHkKKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9jcm9uLndlZWtseQorCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24ubW9udGhseQorCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uZGVueQorCisJIyBiZWxvdyBzZXR0aW5nIGlzIG5lY2Vzc2FyeSB0byBhbGxvdyBub3JtYWwgdXNlciB1c2luZyBjcm9udGFiCisKKwkjIHNldGdpZCBmb3IgY3JvbnRhYiBiaW5hcnkKKwljaG93biByb290OmNyb250YWIgJHtEfSR7YmluZGlyfS9jcm9udGFiCisJY2htb2QgMjc1NSAke0R9JHtiaW5kaXJ9L2Nyb250YWIKKworCSMgYWxsb3cgJ2Nyb250YWInIGdyb3VwIHdyaXRlIHRvIC92YXIvc3Bvb2wvY3JvbgorCWNob3duIHJvb3Q6Y3JvbnRhYiAke0R9JHtsb2NhbHN0YXRlZGlyfS9zcG9vbC9jcm9uCisJY2htb2QgNzcwICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3Nwb29sL2Nyb24KKworCWNobW9kIDYwMCAke0R9JHtzeXNjb25mZGlyfS9jcm9udGFiCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L2Nyb24qIgorQ09ORkZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L2Nyb250YWIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2NkZjI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzLmluYwpAQCAtMCwwICsxLDEyMyBAQAorU1VNTUFSWSA9ICJBbiBJbnRlcm5ldCBwcmludGluZyBzeXN0ZW0gZm9yIFVuaXgiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyIgorREVQRU5EUyA9ICJnbnV0bHMgbGlicG5nIGpwZWcgZGJ1cyBkYnVzLWdsaWIgemxpYiBsaWJ1c2IiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5jdXBzLm9yZy9zb2Z0d2FyZS8ke1BWfS8ke0JQfS1zb3VyY2UudGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly91c2VfZWNob19vbmx5X2luX2luaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1kb24tdC10cnktdG8tcnVuLWdlbmVyYXRlZC1iaW5hcmllcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jdXBzX3NlcnZlcmJpbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jdXBzLnNvY2tldCBcCisgICAgICAgICAgIGZpbGU6Ly9jdXBzLnBhdGggXAorICAgICAgICAgICBmaWxlOi8vY3Vwcy5zZXJ2aWNlIFwKKwkgICIKKworTEVBRF9TT05BTUUgPSAibGliY3Vwc2RyaXZlci5zbyIKKworQ0xFQU5CUk9LRU4gPSAiMSIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGJpbmNvbmZpZyB1c2VyYWRkIHN5c3RlbWQKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK0dST1VQQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIGxwYWRtaW4iCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJjdXBzLnNvY2tldCBjdXBzLnBhdGggY3Vwcy5zZXJ2aWNlIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd6ZXJvY29uZicsICdhdmFoaScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW2F2YWhpXSA9ICItLWVuYWJsZS1hdmFoaSwtLWRpc2FibGUtYXZhaGksYXZhaGkiCitQQUNLQUdFQ09ORklHW2FjbF0gPSAiLS1lbmFibGUtYWNsLC0tZGlzYWJsZS1hY2wsYWNsIgorUEFDS0FHRUNPTkZJR1twYW1dID0gIi0tZW5hYmxlLXBhbSwgLS1kaXNhYmxlLXBhbSwgbGlicGFtIgorCitFWFRSQV9PRUNPTkYgPSAiIFwKKyAgICAgICAgICAgICAgIC0tZW5hYmxlLWdudXRscyBcCisgICAgICAgICAgICAgICAtLWVuYWJsZS1kYnVzIFwKKyAgICAgICAgICAgICAgIC0tZW5hYmxlLWJyb3dzaW5nIFwKKyAgICAgICAgICAgICAgIC0tZGlzYWJsZS1nc3NhcGkgXAorICAgICAgICAgICAgICAgLS1lbmFibGUtZGVidWcgXAorICAgICAgICAgICAgICAgLS1kaXNhYmxlLXJlbHJvIFwKKyAgICAgICAgICAgICAgIC0tZW5hYmxlLWxpYnVzYiBcCisgICAgICAgICAgICAgICAtLXdpdGhvdXQtcGhwIFwKKyAgICAgICAgICAgICAgIC0td2l0aG91dC1wZXJsIFwKKyAgICAgICAgICAgICAgIC0td2l0aG91dC1weXRob24gXAorICAgICAgICAgICAgICAgLS13aXRob3V0LWphdmEgXAorICAgICAgICAgICAgICAgIgorCitFWFRSQV9BVVRPUkVDT05GICs9ICItLWV4Y2x1ZGU9YXV0b2hlYWRlciIKKworZG9fY29tcGlsZSAoKSB7CisJZWNobyAiYWxsOiIgICAgPiAgbWFuL01ha2VmaWxlCisJZWNobyAibGliczoiID4+IG1hbi9NYWtlZmlsZQorCWVjaG8gImluc3RhbGw6IiA+PiBtYW4vTWFrZWZpbGUKKwllY2hvICJpbnN0YWxsLWRhdGE6IiA+PiBtYW4vTWFrZWZpbGUKKwllY2hvICJpbnN0YWxsLWV4ZWM6IiA+PiBtYW4vTWFrZWZpbGUKKwllY2hvICJpbnN0YWxsLWhlYWRlcnM6IiA+PiBtYW4vTWFrZWZpbGUKKwllY2hvICJpbnN0YWxsLWxpYnM6IiA+PiBtYW4vTWFrZWZpbGUKKworCW9lX3J1bm1ha2UKK30KKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAiRFNUUk9PVD0ke0R9IiBpbnN0YWxsCisKKwkjIFJlbW92ZSAvdmFyL3J1biBmcm9tIHBhY2thZ2UgYXMgY3Vwc2Qgd2lsbCBwb3B1bGF0ZSBpdCBvbiBzdGFydHVwCisJcm0gLWZyICR7RH0vJHtsb2NhbHN0YXRlZGlyfS9ydW4KKwlybWRpciAke0R9LyR7bGliZGlyfS8ke0JQTn0vZHJpdmVyCisKKwkjIFJlbW92ZSBzeXNpbml0IHNjcmlwdCBhbmQgc3ltbGlua3MgaWYgc3lzdmluaXQgaXMgbm90IGluIERJU1RST19GRUFUVVJFUworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN2aW5pdCcsJ2ZhbHNlJywndHJ1ZScsZCl9OyB0aGVuCisJICAgIHJtIC1yZiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisJICAgIHJtIC1yZiAke0R9JHtzeXNjb25mZGlyfS9yYyoKKwlmaQorCisJIyBJbnN0YWxsIHN5c3RlbWQgdW5pdCBmaWxlcworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9jdXBzLnNvY2tldCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2N1cHMucGF0aCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2N1cHMuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCXNlZCAtaSAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9jdXBzLnNlcnZpY2UKK30KKworcHl0aG9uIGRvX3BhY2thZ2VfYXBwZW5kKCkgeworICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgIyBDaGFuZ2UgcGVybWlzc2lvbnMgYmFjayB0aGUgd2F5IHRoZXkgd2VyZSwgdGhleSBwcm9iYWJseSBoYWQgYSByZWFzb24uLi4KKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIHN1YnByb2Nlc3MuY2FsbCgnY2htb2QgMDUxMSAlcy9pbnN0YWxsL2N1cHMvdmFyL3J1bi9jdXBzL2NlcnRzJyAlIHdvcmtkaXIsIHNoZWxsPVRydWUpCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1saWIgJHtQTn0tbGliaW1hZ2UiCisKK1JERVBFTkRTXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgJ3Byb2NwcycsICcnLCBkKX0iCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2N1cHMvYmFja2VuZCBcCisJCSR7bGliZGlyfS9jdXBzL2NnaS1iaW4gXAorCQkke2xpYmRpcn0vY3Vwcy9maWx0ZXIgXAorCQkke2xpYmRpcn0vY3Vwcy9tb25pdG9yIFwKKwkJJHtsaWJkaXJ9L2N1cHMvbm90aWZpZXIgXAorCQkke2xpYmRpcn0vY3Vwcy9kYWVtb24gXAorCSAgICAgICAiCisKK0ZJTEVTXyR7UE59LWxpYiA9ICIke2xpYmRpcn0vbGliY3Vwcy5zby4qIgorCitGSUxFU18ke1BOfS1saWJpbWFnZSA9ICIke2xpYmRpcn0vbGliY3Vwc2ltYWdlLnNvLioiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2N1cHMvYmFja2VuZC8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vY3Vwcy9jZ2ktYmluLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jdXBzL2ZpbHRlci8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vY3Vwcy9tb25pdG9yLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jdXBzL25vdGlmaWVyLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jdXBzL2RhZW1vbi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICIKKworI3BhY2thZ2UgdGhlIGh0bWwgZm9yIHRoZSB3ZWJndWkgaW5zaWRlIHRoZSBtYWluIHBhY2thZ2VzICh+MU1CIHVuY29tcHJlc3NlZCkKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vZG9jL2N1cHMvaW1hZ2VzIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RvYy9jdXBzLypodG1sIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RvYy9jdXBzLyouY3NzIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2ljb25zLyBcCisgICAgICAgICAgICAgICAiCitDT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vY3Vwcy9jdXBzZC5jb25mIgorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImN1cHNfc3lzcm9vdF9wcmVwcm9jZXNzIgorY3Vwc19zeXNyb290X3ByZXByb2Nlc3MgKCkgeworCXNlZCAtaSAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2N1cHMtY29uZmlnIC1lICdzOmN1cHNfZGF0YWRpcj0uKjpjdXBzX2RhdGFkaXI9JHtkYXRhZGlyfS9jdXBzOicgLWUgJ3M6Y3Vwc19zZXJ2ZXJiaW49Lio6Y3Vwc19zZXJ2ZXJiaW49JHtsaWJkaXJ9L2N1cHM6JworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzLzAwMDEtZG9uLXQtdHJ5LXRvLXJ1bi1nZW5lcmF0ZWQtYmluYXJpZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvMDAwMS1kb24tdC10cnktdG8tcnVuLWdlbmVyYXRlZC1iaW5hcmllcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mzc5ZWI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzLzAwMDEtZG9uLXQtdHJ5LXRvLXJ1bi1nZW5lcmF0ZWQtYmluYXJpZXMucGF0Y2gKQEAgLTAsMCArMSw2OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworRnJvbSA5MDA2OTU4NjE2N2I5MzBiZWZjZTczMDNhZWE1NzA3OGYwNGI0ZWQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK0RhdGU6IFN1biwgMzAgSmFuIDIwMTEgMTY6Mzc6MjcgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gZG9uJ3QgdHJ5IHRvIHJ1biBnZW5lcmF0ZWQgYmluYXJpZXMKKworU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KKy0tLQorIHBwZGMvTWFrZWZpbGUgfCAgIDMwICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCisKK0luZGV4OiBjdXBzLTIuMC4wL3BwZGMvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjdXBzLTIuMC4wLm9yaWcvcHBkYy9NYWtlZmlsZQorKysrIGN1cHMtMi4wLjAvcHBkYy9NYWtlZmlsZQorQEAgLTI0Miw4ICsyNDIsOCBAQCBnZW5zdHJpbmdzOgkJZ2Vuc3RyaW5ncy5vIGxpYmN1cHNwcGRjLmEKKyAJJChDWFgpICQoQVJDSEZMQUdTKSAkKExERkxBR1MpIC1vIGdlbnN0cmluZ3MgZ2Vuc3RyaW5ncy5vIFwKKyAJCWxpYmN1cHNwcGRjLmEgLi4vY3Vwcy8kKExJQkNVUFNTVEFUSUMpICQoTElCR1NTQVBJKSAkKFNTTExJQlMpIFwKKyAJCSQoRE5TU0RMSUJTKSAkKENPTU1PTkxJQlMpICQoTElCWikKKy0JZWNobyBHZW5lcmF0aW5nIGxvY2FsaXphdGlvbiBzdHJpbmdzLi4uCistCS4vZ2Vuc3RyaW5ncyA+c2FtcGxlLmMKKysjCWVjaG8gR2VuZXJhdGluZyBsb2NhbGl6YXRpb24gc3RyaW5ncy4uLgorKyMJLi9nZW5zdHJpbmdzID5zYW1wbGUuYworIAorIAorICMKK0BAIC0yNjAsOSArMjYwLDkgQEAgcHBkYy1zdGF0aWM6CQlwcGRjLm8gbGliY3Vwc3BwZGMuYSAuLi9jdQorIAkkKENYWCkgJChBUkNIRkxBR1MpICQoTERGTEFHUykgLW8gcHBkYy1zdGF0aWMgcHBkYy5vIGxpYmN1cHNwcGRjLmEgXAorIAkJLi4vY3Vwcy8kKExJQkNVUFNTVEFUSUMpICQoTElCR1NTQVBJKSAkKFNTTExJQlMpICQoRE5TU0RMSUJTKSBcCisgCQkkKENPTU1PTkxJQlMpICQoTElCWikKKy0JZWNobyBUZXN0aW5nIFBQRCBjb21waWxlci4uLgorLQkuL3BwZGMtc3RhdGljIC1sIGVuLGZyIC1JIC4uL2RhdGEgZm9vLmRydgorLQkuL3BwZGMtc3RhdGljIC1sIGVuLGZyIC16IC1JIC4uL2RhdGEgZm9vLmRydgorKyMJZWNobyBUZXN0aW5nIFBQRCBjb21waWxlci4uLgorKyMJLi9wcGRjLXN0YXRpYyAtbCBlbixmciAtSSAuLi9kYXRhIGZvby5kcnYKKysjCS4vcHBkYy1zdGF0aWMgLWwgZW4sZnIgLXogLUkgLi4vZGF0YSBmb28uZHJ2CisgCisgCisgIworQEAgLTI4OCwxNyArMjg4LDE3IEBAIHBwZGktc3RhdGljOgkJcHBkYy1zdGF0aWMgcHBkaS5vIGxpYmN1cHMKKyAJJChDWFgpICQoQVJDSEZMQUdTKSAkKExERkxBR1MpIC1vIHBwZGktc3RhdGljIHBwZGkubyBsaWJjdXBzcHBkYy5hIFwKKyAJCS4uL2N1cHMvJChMSUJDVVBTU1RBVElDKSAkKExJQkdTU0FQSSkgJChTU0xMSUJTKSAkKEROU1NETElCUykgXAorIAkJJChDT01NT05MSUJTKSAkKExJQlopCistCWVjaG8gVGVzdGluZyBQUEQgaW1wb3J0ZXIuLi4KKy0JJChSTSkgLXIgcHBkIHBwZDIgc2FtcGxlLWltcG9ydC5kcnYKKy0JLi9wcGRjLXN0YXRpYyAtbCBlbiAtSSAuLi9kYXRhIHNhbXBsZS5kcnYKKy0JLi9wcGRpLXN0YXRpYyAtSSAuLi9kYXRhIC1vIHNhbXBsZS1pbXBvcnQuZHJ2IHBwZC8qCistCS4vcHBkYy1zdGF0aWMgLWwgZW4gLUkgLi4vZGF0YSAtZCBwcGQyIHNhbXBsZS1pbXBvcnQuZHJ2CistCWlmIGRpZmYgLXIgcHBkIHBwZDIgPi9kZXYvbnVsbDsgdGhlbiBcCistCQllY2hvIFBQRCBpbXBvcnQgT0s7IFwKKy0JZWxzZSBcCistCQllY2hvIFBQRCBpbXBvcnQgRkFJTEVEOyBcCistCQlleGl0IDE7IFwKKy0JZmkKKysjCWVjaG8gVGVzdGluZyBQUEQgaW1wb3J0ZXIuLi4KKysjCSQoUk0pIC1yIHBwZCBwcGQyIHNhbXBsZS1pbXBvcnQuZHJ2CisrIwkuL3BwZGMtc3RhdGljIC1sIGVuIC1JIC4uL2RhdGEgc2FtcGxlLmRydgorKyMJLi9wcGRpLXN0YXRpYyAtSSAuLi9kYXRhIC1vIHNhbXBsZS1pbXBvcnQuZHJ2IHBwZC8qCisrIwkuL3BwZGMtc3RhdGljIC1sIGVuIC1JIC4uL2RhdGEgLWQgcHBkMiBzYW1wbGUtaW1wb3J0LmRydgorKyMJaWYgZGlmZiAtciBwcGQgcHBkMiA+L2Rldi9udWxsOyB0aGVuIFwKKysjCQllY2hvIFBQRCBpbXBvcnQgT0s7IFwKKysjCWVsc2UgXAorKyMJCWVjaG8gUFBEIGltcG9ydCBGQUlMRUQ7IFwKKysjCQlleGl0IDE7IFwKKysjCWZpCisgCisgCisgIwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHMucGF0aCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy9jdXBzLnBhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU4Y2M1NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy9jdXBzLnBhdGgKQEAgLTAsMCArMSw4IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPUNVUFMgUHJpbnRlciBTZXJ2aWNlIFNwb29sCisKK1tQYXRoXQorUGF0aEV4aXN0c0dsb2I9L3Zhci9zcG9vbC9jdXBzL2QqCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy9jdXBzLnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvY3Vwcy5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkM2U4MzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvY3Vwcy5zZXJ2aWNlCkBAIC0wLDAgKzEsMTAgQEAKK1tVbml0XQorRGVzY3JpcHRpb249Q1VQUyBQcmludGluZyBTZXJ2aWNlCisKK1tTZXJ2aWNlXQorRXhlY1N0YXJ0PUBTQklORElSQC9jdXBzZCAtZgorUHJpdmF0ZVRtcD10cnVlCisKK1tJbnN0YWxsXQorQWxzbz1jdXBzLnNvY2tldCBjdXBzLnBhdGgKK1dhbnRlZEJ5PXByaW50ZXIudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvY3Vwcy5zb2NrZXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvY3Vwcy5zb2NrZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxNDg3MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy9jdXBzLnNvY2tldApAQCAtMCwwICsxLDggQEAKK1tVbml0XQorRGVzY3JpcHRpb249Q1VQUyBQcmludGluZyBTZXJ2aWNlIFNvY2tldHMKKworW1NvY2tldF0KK0xpc3RlblN0cmVhbT0vdmFyL3J1bi9jdXBzL2N1cHMuc29jaworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PXNvY2tldHMudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvY3Vwc19zZXJ2ZXJiaW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvY3Vwc19zZXJ2ZXJiaW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdiNDRhNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy9jdXBzX3NlcnZlcmJpbi5wYXRjaApAQCAtMCwwICsxLDMyIEBACitNYWtlIENVUFNfU0VSVkVSQklOIHJlbGF0aXZlIHRvIGxpYmRpciBvdGhlcndpc2Ugb24gNjRiaXQgYXJjaGVzCitlLmcuIHBwYzY0IHdoZXJlIGJhc2UgbGliZGlyIGlzIGxpYjY0IHRoaXMgZG9lcyBub3QgZ28gd2VsbAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBjb25maWcgc3BlY2lmaWNdCisKK0luZGV4OiBjdXBzLTEuNC42L2NvbmZpZy1zY3JpcHRzL2N1cHMtZGlyZWN0b3JpZXMubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjdXBzLTEuNC42Lm9yaWcvY29uZmlnLXNjcmlwdHMvY3Vwcy1kaXJlY3Rvcmllcy5tNAkyMDA5LTA0LTEyIDE2OjA0OjUxLjAwMDAwMDAwMCAtMDcwMAorKysrIGN1cHMtMS40LjYvY29uZmlnLXNjcmlwdHMvY3Vwcy1kaXJlY3Rvcmllcy5tNAkyMDEyLTA3LTIxIDEyOjEyOjA1Ljg5NjQwNTkyMyAtMDcwMAorQEAgLTM5Nyw3ICszOTcsNyBAQAorIAkqKQorIAkJIyBBbGwgb3RoZXJzCisgCQlJTlNUQUxMX1NZU1Y9Imluc3RhbGwtc3lzdiIKKy0JCUNVUFNfU0VSVkVSQklOPSIkZXhlY19wcmVmaXgvbGliL2N1cHMiCisrCQlDVVBTX1NFUlZFUkJJTj0iJGxpYmRpci9jdXBzIgorIAkJOzsKKyBlc2FjCisgCitJbmRleDogY3Vwcy0xLjQuNi9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjdXBzLTEuNC42Lm9yaWcvY29uZmlndXJlCTIwMTItMDctMjEgMTI6MTM6MzQuNTEyNDA1OTUwIC0wNzAwCisrKysgY3Vwcy0xLjQuNi9jb25maWd1cmUJMjAxMi0wNy0yMSAxMjoxNDowNS43MjQ0MDYwMTcgLTA3MDAKK0BAIC0xMTE4MSw3ICsxMTE4MSw3IEBACisgCSopCisgCQkjIEFsbCBvdGhlcnMKKyAJCUlOU1RBTExfU1lTVj0iaW5zdGFsbC1zeXN2IgorLQkJQ1VQU19TRVJWRVJCSU49IiRleGVjX3ByZWZpeC9saWIvY3VwcyIKKysJCUNVUFNfU0VSVkVSQklOPSIkbGliZGlyL2N1cHMiCisgCQk7OworIGVzYWMKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy91c2VfZWNob19vbmx5X2luX2luaXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvdXNlX2VjaG9fb25seV9pbl9pbml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NmYxMzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvdXNlX2VjaG9fb25seV9pbl9pbml0LnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0luZGV4OiBjdXBzLTEuNi4xL3NjaGVkdWxlci9jdXBzLnNoLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY3Vwcy0xLjYuMS5vcmlnL3NjaGVkdWxlci9jdXBzLnNoLmluCisrKysgY3Vwcy0xLjYuMS9zY2hlZHVsZXIvY3Vwcy5zaC5pbgorQEAgLTY3LDcgKzY3LDcgQEAgY2FzZSAiYHVuYW1lYCIgaW4KKyAJCUVDSE9fRVJST1I9OgorIAkJOzsKKyAKKy0JTGludXgqKQorKwlEaXNhYmxlTGludXgqKQorIAkJSVNfT049L2Jpbi90cnVlCisgCQlpZiB0ZXN0IC1mIC9ldGMvaW5pdC5kL2Z1bmN0aW9uczsgdGhlbgorIAkJCS4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHNfMi4wLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHNfMi4wLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFkNzNiMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwc18yLjAuNC5iYgpAQCAtMCwwICsxLDYgQEAKK3JlcXVpcmUgY3Vwcy5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PTZjNWEzNTA1OTZmYmEwMjc1NGJkOTZlYjZkZjNhZmQwIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZjVjODQ3ZDlhNGZhYzZjNGM2NmZiMDUyNmE3YWZhYWUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTFkNWU2OGQ5ZjI0ZmFjYTMxN2FlYWViYzE2NGMzNDEwMjgxM2JjMGYxZDY5YzAwYjNhNTliNDljNDlmNGFiZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N3YXV0b21hY3Jvcy9jd2F1dG9tYWNyb3NfMjAxMTAyMDEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jd2F1dG9tYWNyb3MvY3dhdXRvbWFjcm9zXzIwMTEwMjAxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZWEzY2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jd2F1dG9tYWNyb3MvY3dhdXRvbWFjcm9zXzIwMTEwMjAxLmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiQ29sbGVjdGlvbiBvZiBhdXRvY29uZiBtNCBtYWNyb3MiCitTRUNUSU9OID0gImJhc2UiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2N3YXV0b21hY3Jvcy5iZXJsaW9zLyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1lYjcyM2I2MTUzOWZlZWYwMTNkZTQ3NmU2OGI1YzUwYSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vJHtCUE59LmJlcmxpb3MvJHtCUH0udGFyLmJ6MiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIwNzRhZmNiNTBkMGE4YmZmMTA3ODZhMjk1NGIyYjAyZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzMTE1NjAzYjg5MWYzYTE2M2MwYmJiNWZlYTJmMzc0MjExM2ExODNmYTY3NDVlZTVlODllNWY2ZDBlOWY2MTIxIgorCitkb19jb25maWd1cmUoKSB7CisJOgorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgQ1dBVVRPTUFDUk9TUFJFRklYPSR7RH0ke3ByZWZpeH0gaW5zdGFsbAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMi44LjEvZGlmZnV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMi44LjEvZGlmZnV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzA1ZDFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0yLjguMS9kaWZmdXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCithdXRvbWFrZSAxLjEyIGhhcyBkZXByaWNhdGVkIGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQKKwordGhpcyBwYXRjaCBhdm9pZHMgdGhlc2Uga2luZHMgb2YgZXJyb3JzOgorCit8IGNvbmZpZ3VyZS5hYzo5MDogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorfCAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlL2FjbG9jYWwtMS4xMi9wcm90b3MubTQ6MTI6IEFNX0NfUFJPVE9UWVBFUyBpcyBleHBhbmRlZCBmcm9tLi4uCit8IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpZmZ1dGlscy0yLjguMS1yNC9kaWZmdXRpbHMtMi44LjEvbTQvcHJlcmVxLm00OjExMDogam1fUFJFUkVRX1FVT1RFQVJHIGlzIGV4cGFuZGVkIGZyb20uLi4KK3wgY29uZmlndXJlLmFjOjkwOiB0aGUgdG9wIGxldmVsCit8IGF1dG9tNHRlOiBtNCBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNS8wNAorCitJbmRleDogZGlmZnV0aWxzLTIuOC4xL200L3ByZXJlcS5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRpZmZ1dGlscy0yLjguMS5vcmlnL200L3ByZXJlcS5tNAorKysrIGRpZmZ1dGlscy0yLjguMS9tNC9wcmVyZXEubTQKK0BAIC0xMTUsNyArMTE1LDYgQEAgQUNfREVGVU4oW2ptX1BSRVJFUV9RVU9URUFSR10sCisgICBBQ19IRUFERVJfU1REQworICAgQUNfQ19CQUNLU0xBU0hfQQorICAgQUNfTUJTVEFURV9UCistICBBTV9DX1BST1RPVFlQRVMKKyBdKQorIAorIEFDX0RFRlVOKFtqbV9QUkVSRVFfUkVHRVhdLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMy4zLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExYTRiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMy4zLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL2dudWxpYi5tayBiL2xpYi9nbnVsaWIubWsKK2luZGV4IGUxZDc0ZGIuLmMwZTkyZGQgMTAwNjQ0CistLS0gYS9saWIvZ251bGliLm1rCisrKysgYi9saWIvZ251bGliLm1rCitAQCAtMTg4Miw3ICsxODgyLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjMvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjMvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NWM1ZTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLTMuMy9ydW4tcHRlc3QKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKKworbWFrZSAtQyB0ZXN0cyBjaGVjay1URVNUUwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDMzNDFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy5pbmMKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJEaWZmdXRpbHMgY29udGFpbnMgdG9vbHMgdXNlZCBmb3IgZmluZGluZyBkaWZmZXJlbmNlcyBiZXR3ZWVuIGZpbGVzIgorREVTQ1JJUFRJT04gPSAiRGlmZnV0aWxzIGNvbnRhaW5zIHRoZSBHTlUgZGlmZiwgZGlmZjMsIFwKK3NkaWZmLCBhbmQgY21wIHV0aWxpdGllcy4gVGhlc2UgcHJvZ3JhbXMgYXJlIHVzdWFsbHkgXAordXNlZCBmb3IgY3JlYXRpbmcgcGF0Y2ggZmlsZXMuIgorU0VDVElPTiA9ICJiYXNlIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgZ2V0dGV4dAorCisjIGRpZmZ1dGlscyBhc3N1bWVzIG5vbi1nbGliYyBjb21waWxhdGlvbiB3aXRoIHVjbGliYyBhbmQKKyMgdGhpcyBjYXVzZXMgaXQgdG8gZ2VuZXJhdGUgaXRzIG93biBpbXBsZW1lbnRhdGlvbnMgb2YKKyMgc3RhbmRhcmQgZnVuY3Rpb25hbGl0eS4gIHJlZ2V4LmMgYWN0dWFsbHkgYnJlYWtzIGNvbXBpbGF0aW9uCisjIGJlY2F1c2UgaXQgdXNlcyBfX21lbXBjcHksIHRoZXJlIGFyZSBvdGhlciB0aGluZ3MgKFRCRDoKKyMgc2VlIGRpZmZ1dGlscy5tayBpbiBidWlsZHJvb3QpCitFWFRSQV9PRUNPTkZfbGliYy11Y2xpYmMgPSAiLS13aXRob3V0LWluY2x1ZGVkLXJlZ2V4IgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJkaWZmIGNtcCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlsc18yLjguMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHNfMi44LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY0MjViYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHNfMi44LjEuYmIKQEAgLTAsMCArMSwxNiBAQAorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworcmVxdWlyZSBkaWZmdXRpbHMuaW5jCisKK1BSID0gInI3LjAiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9kaWZmdXRpbHMvZGlmZnV0aWxzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9kaWZmdXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzFmOWM1YWUxOWI2MDYwOGY2YzdmMTYyZGE4NmE0MjgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzUwMDE3NDhiMDY5MjI0ZGQ5OGJmMWJiOWVlODc3MzIxYzdkZThiMzMyYzhhYWQ1YWYzZTJhNzM3MmQyM2Y1YSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCWNobW9kIHUrdyAke1N9L3BvL01ha2VmaWxlLmluLmluCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzXzMuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHNfMy4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMDg2OTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzXzMuMy5iYgpAQCAtMCwwICsxLDM3IEBACitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCityZXF1aXJlIGRpZmZ1dGlscy5pbmMKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2RpZmZ1dGlscy9kaWZmdXRpbHMtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyIKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtbGlic2lnc2Vndi1wcmVmaXgiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIE5lZWQgdG8gcmVtb3ZlIGdldHRleHQgbWFjcm9zIHdpdGggd2VpcmQgbWl4IG9mIHZlcnNpb25zCisJZm9yIGkgaW4gY29kZXNldC5tNCBnZXR0ZXh0X2dsLm00IGludGxtYWNvc3gubTQgaW50dHlwZXMtcHJpLm00IGxpYi1sZF9nbC5tNCBsaWItcHJlZml4X2dsLm00IHBvX2dsLm00IHNzaXplX3QubTQgd2NoYXJfdC5tNCB3aW50X3QubTQ7IGRvCisJCXJtIC1mICR7U30vbTQvJGkKKwlkb25lCit9CisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5OTE4MDIwOGVjMmE4MmNlNzFmNTViMGQ3Mzg5ZjFiMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhMjVlODlhOGFiNjVmZGVkMTczMWU0MTg2YmUxYmIyNWNkYTk2NzgzNGI2ZGY5NzM1OTljZGNkNWFiZGZjMTljIgorCitpbmhlcml0IHB0ZXN0CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJdD0ke0R9JHtQVEVTVF9QQVRIfQorCWluc3RhbGwgLUQgJHtTfS9idWlsZC1hdXgvdGVzdC1kcml2ZXIgJHQvYnVpbGQtYXV4L3Rlc3QtZHJpdmVyCisJY3AgLXIgJHtTfS90ZXN0cyAkdC8KKwlpbnN0YWxsICR7Qn0vdGVzdHMvTWFrZWZpbGUgJHQvdGVzdHMvCisJc2VkIC1lICdzfF5NYWtlZmlsZTp8X01ha2VmaWxlOnwnIFwKKwkgICAgLWUgJ3N8YmFzaHxzaHwnIFwKKwkgICAgLWUgJ3N8XnRvcF9zcmNkaXIgPSBcKC4qXCl8dG9wX3NyY2RpciA9IC4uXC98JyBcCisJICAgIC1lICdzfF5zcmNkaXIgPSBcKC4qXCl8c3JjZGlyID0gLnwnIFwKKwkgICAgLWUgJ3N8ImAkKGJ1aWx0X3Byb2dyYW1zKWAifGRpZmZ8JyBcCisJICAgIC1lICdzfGdhd2t8YXdrfGcnIFwKKwkgICAgLWkgJHQvdGVzdHMvTWFrZWZpbGUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2VkL2VkXzAuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2VkL2VkXzAuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDNlNjM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZWQvZWRfMC41LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiTGluZS1vcmllbnRlZCB0ZXh0IGVkaXRvciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9lZC8iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTZkZGQ1MzM1ZWY5NmZiODU4YTEzODIzMGFmNzczNzEwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21haW4uYztiZWdpbmxpbmU9MTtlbmRsaW5lPTE3O21kNT0zNmQ0Yjg1ZTVhZTkwMjhlOTE4ZDFjYzc3NWMyNDc1ZSIKKworUFIgPSAicjIiCitTUkNfVVJJID0gIiR7U0FWQU5OQUhfR05VX01JUlJPUn0vZWQvZWQtJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gIjRlZTIxZTlkY2M5YjViNjAxMmMyMzAzODczNGUxNjMyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVkZWYyYmJkZTBmYmYwZDg4MjMyNzgyYTBlZGVkMzIzZjQ4M2EwNTE5ZDZmZGU5YTNiMTgwOTA1NmZkMzVmM2UiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRVhUUkFfT0VDT05GID0gIidDQz0ke0NDfScgJ0NYWD0ke0NYWH0nICdDRkxBR1M9JHtDRkxBR1N9JyAnQ1hYRkxBR1M9JHtDWFhGTEFHU30nICdDUFBGTEFHUz0ke0NQUEZMQUdTfScgJ0xERkxBR1M9JHtMREZMQUdTfSciCisKK0NPTkZJR1VSRU9QVFMgOj0gIiR7QGQuZ2V0VmFyKCdDT05GSUdVUkVPUFRTJywgVHJ1ZSkucmVwbGFjZSgnLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcnLCAnICcpfSIKK0NPTkZJR1VSRU9QVFMgOj0gIiR7QGQuZ2V0VmFyKCdDT05GSUdVUkVPUFRTJywgVHJ1ZSkucmVwbGFjZSgnLS1kaXNhYmxlLXNpbGVudC1ydWxlcycsICcgJyl9IgorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2VkL2VkXzEuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2VkL2VkXzEuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTk0ZWVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZWQvZWRfMS45LmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiTGluZS1vcmllbnRlZCB0ZXh0IGVkaXRvciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9lZC8iCisKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjI3ZGVmZTFlOTZjMmUxZWNkNGUwYzliZTg5Njc5NDkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZWQuaDtlbmRsaW5lPTIwO21kNT0zNzVhMjBjYzI1NDVhYzExMTVlZWI3YjMyM2M2MGFlMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9tYWluLmM7ZW5kbGluZT0xNzttZDU9MTRkYmIzMjVjMWYyZDRkYWY1MGUwYWE1YzUwMzhlOTYiCisKK1NFQ1RJT04gPSAiYmFzZSIKKworIyBMU0Igc3RhdGVzIHRoYXQgZWQgc2hvdWxkIGJlIGluIC9iaW4vCitiaW5kaXIgPSAiJHtiYXNlX2JpbmRpcn0iCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9lZC9lZC0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1NjViNmQxZDVhOWE4ODE2YjliMzA0ZmM0ZWQ5NDA1ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkNWIzNzJjZmFkZjA3MzAwMTgyMzc3MjI3MmZjZWFjMmNmYTg3NTUyYzVjZDVhOGVmYzFjOGFhZTYxZjQ1YTg4IgorCitpbmhlcml0IHRleGluZm8KKworZG9fY29uZmlndXJlKCkgeworCSR7U30vY29uZmlndXJlCit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCisJIyBJbmZvIGRpciBsaXN0aW5nIGlzbid0IGludGVyZXN0aW5nIGF0IHRoaXMgcG9pbnQgc28gcmVtb3ZlIGl0IGlmIGl0IGV4aXN0cy4KKwlpZiBbIC1lICIke0R9JHtpbmZvZGlyfS9kaXIiIF07IHRoZW4KKwkJcm0gLWYgJHtEfSR7aW5mb2Rpcn0vZGlyCisJZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2V0aHRvb2wvZXRodG9vbC9hdm9pZF9wYXJhbGxlbF90ZXN0cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2V0aHRvb2wvZXRodG9vbC9hdm9pZF9wYXJhbGxlbF90ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjY2MjY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZXRodG9vbC9ldGh0b29sL2F2b2lkX3BhcmFsbGVsX3Rlc3RzLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK3B0ZXN0IG5lZWRzIGJ1aWxkdGVzdC1URVNUUyBhbmQgcnVudGVzdC1URVNUUyB0YXJnZXRzLgorc2VyaWFsLXRlc3RzIGlzIHJlcXVpcmVkIHRvIGdlbmVyYXRlIHRob3NlIHRhcmdldHMuCisKK1NpZ25lZC1vZmYtYnk6IFR1ZG9yIEZsb3JlYSA8dHVkb3IuZmxvcmVhQGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisoZGVmYXVsdCBhdXRvbWFrZSBiZWhhdmlvciBpbmNvbXBhdGlibGUgd2l0aCBwdGVzdCkKKworZGlmZiAtcnVOIGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCistLS0gYS9jb25maWd1cmUuYWMJMjAxNC0wNS0yOCAxODoxOToxMy41MTM5ODA5NzcgKzAyMDAKKysrKyBiL2NvbmZpZ3VyZS5hYwkyMDE0LTA1LTI4IDE4OjE5OjIxLjEyOTY2MDIxNSArMDIwMAorQEAgLTIsNyArMiw3IEBACisgQUNfSU5JVChldGh0b29sLCAzLjE0LCBuZXRkZXZAdmdlci5rZXJuZWwub3JnKQorIEFDX1BSRVJFUSgyLjUyKQorIEFDX0NPTkZJR19TUkNESVIoW2V0aHRvb2wuY10pCistQU1fSU5JVF9BVVRPTUFLRShbZ251XSkKKytBTV9JTklUX0FVVE9NQUtFKFtnbnUgc2VyaWFsLXRlc3RzXSkKKyBBQ19DT05GSUdfSEVBREVSUyhbZXRodG9vbC1jb25maWcuaF0pCisgCisgQU1fTUFJTlRBSU5FUl9NT0RFCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2wvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZXRodG9vbC9ldGh0b29sL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTI0NWRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZXRodG9vbC9ldGh0b29sL3J1bi1wdGVzdApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9zaAorbWFrZSAtayBydW50ZXN0LVRFU1RTCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2xfNC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZXRodG9vbC9ldGh0b29sXzQuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2YyYjFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZXRodG9vbC9ldGh0b29sXzQuMC5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkRpc3BsYXkgb3IgY2hhbmdlIGV0aGVybmV0IGNhcmQgc2V0dGluZ3MiCitERVNDUklQVElPTiA9ICJBIHNtYWxsIHV0aWxpdHkgZm9yIGV4YW1pbmluZyBhbmQgdHVuaW5nIHRoZSBzZXR0aW5ncyBvZiB5b3VyIGV0aGVybmV0LWJhc2VkIG5ldHdvcmsgaW50ZXJmYWNlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL25ldHdvcmsvZXRodG9vbC8iCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZXRodG9vbC5jO2JlZ2lubGluZT00O2VuZGxpbmU9MTc7bWQ1PWMxOWIzMDU0OGM1ODI1NzdmYzZiNDQzNjI2ZmMxMjE2IgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vc29mdHdhcmUvbmV0d29yay9ldGh0b29sL2V0aHRvb2wtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9hdm9pZF9wYXJhbGxlbF90ZXN0cy5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjBhMWM3ODc4N2M3ZGNmMDc3MDE2ZWQ4NjM3MmE0NzJmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUyMDA1MTY3MjdjYzk1ODNlOGI2M2ZkNmU3MmY2NjdmOWVkNDFiYjRmMDU3N2ZmNDgwM2I2MGM2NGNmZDFkYmMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0CitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibWFrZSIKKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKyAgIG9lX3J1bm1ha2UgYnVpbGR0ZXN0LVRFU1RTCit9CisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworICAgY3AgJHtCfS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0KKyAgIGluc3RhbGwgJHtCfS90ZXN0LWNtZGxpbmUgICAgICAgICR7RH0ke1BURVNUX1BBVEh9CisgICBpbnN0YWxsICR7Qn0vdGVzdC1mZWF0dXJlcyAgICAgICAke0R9JHtQVEVTVF9QQVRIfQorICAgaW5zdGFsbCAke0J9L2V0aHRvb2wgICAgICAgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0vZXRodG9vbAorICAgc2VkIC1pICdzL15NYWtlZmlsZS9fTWFrZWZpbGUvJyAgJHtEfSR7UFRFU1RfUEFUSH0vTWFrZWZpbGUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2ZpbmR1dGlscy1maXgtZG9jLWJ1aWxkLWVycm9yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy00LjIuMzEvZmluZHV0aWxzLWZpeC1kb2MtYnVpbGQtZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA3NmU0NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2ZpbmR1dGlscy1maXgtZG9jLWJ1aWxkLWVycm9yLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK0Zyb20gMzNjYmEyNGNiYTdiMDk3M2E3MDJlOTYyN2JkNWI5Mzk2Mjk0OGFlNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDE3IFNlcCAyMDEzIDE2OjExOjE2ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpbmR1dGlsczogZml4IGRvYyBidWlsZCBlcnJvcgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBkb2MvZmluZC50ZXhpIHwgICAgNiArKystLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RvYy9maW5kLnRleGkgYi9kb2MvZmluZC50ZXhpCitpbmRleCA1YjVmMGNmLi5iM2Q5YzZiIDEwMDY0NAorLS0tIGEvZG9jL2ZpbmQudGV4aQorKysrIGIvZG9jL2ZpbmQudGV4aQorQEAgLTYzLDcgKzYzLDcgQEAgdHJhbnNsYXRpb24gYXBwcm92ZWQgYnkgdGhlIEZvdW5kYXRpb24uCisKKyBAcGFnZQorIEB2c2tpcCAwcHQgcGx1cyAxZmlsbGwKKy1AaW5zZXJ0Y29weWluZ3t9CisrQGluc2VydGNvcHlpbmcKKyBAZW5kIHRpdGxlcGFnZQorCisgQGNvbnRlbnRzCitAQCAtMTQ2Niw2ICsxNDY2LDcgQEAgbm8gb3V0cHV0IGlzIGV2ZXIgc2VudCB0byBpdC4KKyAqIEVzY2FwZXM6OgorICogRm9ybWF0IERpcmVjdGl2ZXM6OgorICogVGltZSBGb3JtYXRzOjoKKysqIEZvcm1hdHRpbmcgRmxhZ3M6OgorIEBlbmQgbWVudQorCisgQG5vZGUgRXNjYXBlcworQEAgLTE1MzQsNyArMTUzNSw2IEBAIGZyb20gdGhlIG5vdmVsIHlvdSBhcmUgcmVhZGluZy4KKyAqIFNpemUgRGlyZWN0aXZlczo6CisgKiBMb2NhdGlvbiBEaXJlY3RpdmVzOjoKKyAqIFRpbWUgRGlyZWN0aXZlczo6CistKiBGb3JtYXR0aW5nIEZsYWdzOjoKKyBAZW5kIG1lbnUKKworIEBub2RlIE5hbWUgRGlyZWN0aXZlcworQEAgLTE3ODAsNyArMTc4MCw3IEBAIHNldHRpbmcgdGhlIFRaIGVudmlyb25tZW50IHZhcmlhYmxlKS4gIFRoaXMgaXMgYSBHTlUgZXh0ZW5zaW9uLgorIEBlbmQgdGFibGUKKworIEBub2RlIEZvcm1hdHRpbmcgRmxhZ3MKKy1Ac3Vic3Vic2VjdGlvbiBGb3JtYXR0aW5nIEZsYWdzCisrQHN1YnNlY3Rpb24gRm9ybWF0dGluZyBGbGFncworCisgVGhlIEBzYW1weyVtfSBhbmQgQHNhbXB7JWR9IGRpcmVjdGl2ZXMgc3VwcG9ydCB0aGUgQHNhbXB7I30sIEBzYW1wezB9CisgYW5kIEBzYW1weyt9IGZsYWdzLCBidXQgdGhlIG90aGVyIGRpcmVjdGl2ZXMgZG8gbm90LCBldmVuIGlmIHRoZXkKKy0tCisxLjcuNC4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2ZpbmR1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLTQuMi4zMS9maW5kdXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMGRkYjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLTQuMi4zMS9maW5kdXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCithdXRvbWFrZSAxLjEyIGhhcyBkZXByaWNhdGVkIGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQKKwordGhpcyBwYXRjaCBhdm9pZHMgdGhlc2Uga2luZHMgb2YgZXJyb3JzOgorCit8IGNvbmZpZ3VyZS5pbjo3NTogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNS8wNAorCitJbmRleDogZmluZHV0aWxzLTQuMi4zMS9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBmaW5kdXRpbHMtNC4yLjMxLm9yaWcvY29uZmlndXJlLmluCisrKysgZmluZHV0aWxzLTQuMi4zMS9jb25maWd1cmUuaW4KK0BAIC03Miw3ICs3Miw2IEBAIGRubCBnbF9FQVJMWSBjYWxscyBBQ19HTlVfU09VUkNFIGFueXdheS4KKyAKKyAKKyBBQ19JU0NfUE9TSVgKKy1BTV9DX1BST1RPVFlQRVMKKyAKKyBBQ19QUk9HX0lOU1RBTEwKKyBBQ19QUk9HX1JBTkxJQgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy00LjIuMzEvZ251bGliLWV4dGVuc2lvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2dudWxpYi1leHRlbnNpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjViZDY0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2dudWxpYi1leHRlbnNpb24ucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsZWdhY3kgdmVyc2lvbl0KKwordGhlIG9sZCBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMgd29uJ3Qgd29yayB3aXRoIEFDX0dOVV9TT1VSQ0UKKworYWdhaW5zdCA0LjIuMzEKKzA3LzA4LzIwMTAgLSBxaGUKKworZGlmZiAtLWdpdCBhL2dudWxpYi9tNC9leHRlbnNpb25zLm00IGIvZ251bGliL200L2V4dGVuc2lvbnMubTQKK2luZGV4IDE0M2E5ZTUuLjBmMjdjZWIgMTAwNjQ0CistLS0gYS9nbnVsaWIvbTQvZXh0ZW5zaW9ucy5tNAorKysrIGIvZ251bGliL200L2V4dGVuc2lvbnMubTQKK0BAIC0xMiw0NCArMTIsNiBAQAorICMgZW5vdWdoIGluIHRoaXMgYXJlYSBpdCdzIGxpa2VseSB3ZSdsbCBuZWVkIHRvIHJlZGVmaW5lCisgIyBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMgZm9yIHF1aXRlIHNvbWUgdGltZS4KKyAKKy0jIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUworLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorLSMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorLUFDX0RFRlVOKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorLVsKKy0gIEFDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKQorLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19SVU5fSUZFTFNFXSkKKy0KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorLSAgQUNfUkVRVUlSRShbQUNfQUlYXSkKKy0gIEFDX1JFUVVJUkUoW0FDX01JTklYXSkKKy0KKy0gIEFIX1ZFUkJBVElNKFtfX0VYVEVOU0lPTlNfX10sCistWy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIFNvbGFyaXMuICAqLworLSNpZm5kZWYgX19FWFRFTlNJT05TX18KKy0jIHVuZGVmIF9fRVhURU5TSU9OU19fCistI2VuZGlmCistI2lmbmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKy0jIHVuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworLSNlbmRpZgorLSNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKy0jIHVuZGVmIF9UQU5ERU1fU09VUkNFCistI2VuZGlmXSkKKy0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fXSwKKy0gICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fXSwKKy0gICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorLSAgICAgICBbQUNfTEFOR19QUk9HUkFNKFsKKy0jCSAgZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKKy0JICBBQ19JTkNMVURFU19ERUZBVUxUXSldLAorLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189eWVzXSwKKy0gICAgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPW5vXSldKQorLSAgdGVzdCAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18gPSB5ZXMgJiYKKy0gICAgQUNfREVGSU5FKFtfX0VYVEVOU0lPTlNfX10pCistICBBQ19ERUZJTkUoW19QT1NJWF9QVEhSRUFEX1NFTUFOVElDU10pCistICBBQ19ERUZJTkUoW19UQU5ERU1fU09VUkNFXSkKKy1dKQorLQorICMgZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3Yzg0Y2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLmluYwpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gImZpbmQsIGxvY2F0ZSwgYW5kIHhhcmdzIGJpbmFyaWVzIgorREVTQ1JJUFRJT04gPSAiVGhlIEdOVSBGaW5kIFV0aWxpdGllcyBhcmUgdGhlIGJhc2ljIGRpcmVjdG9yeSBzZWFyY2hpbmcgdXRpbGl0aWVzIG9mIHRoZSBHTlUgb3BlcmF0aW5nIHN5c3RlbS4gXAorVGhlc2UgcHJvZ3JhbXMgYXJlIHR5cGljYWxseSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggb3RoZXIgcHJvZ3JhbXMgdG8gcHJvdmlkZSBtb2R1bGFyIGFuZCBwb3dlcmZ1bCBkaXJlY3RvcnkgXAorc2VhcmNoIGFuZCBmaWxlIGxvY2F0aW5nIGNhcGFiaWxpdGllcyB0byBvdGhlciBjb21tYW5kcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZmluZHV0aWxzLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NhdmFubmFoLmdudS5vcmcvYnVncy8/Z3JvdXA9ZmluZHV0aWxzIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCisKK1NSQ19VUkkgPSAiZnRwOi8vYWxwaGEuZ251Lm9yZy9nbnUvJHtCUE59LyR7QlB9LnRhci5neiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiZmluZCB4YXJncyIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworIyBkaWZmdXRpbHMgYXNzdW1lcyBub24tZ2xpYmMgY29tcGlsYXRpb24gd2l0aCB1Y2xpYmMgYW5kCisjIHRoaXMgY2F1c2VzIGl0IHRvIGdlbmVyYXRlIGl0cyBvd24gaW1wbGVtZW50YXRpb25zIG9mCisjIHN0YW5kYXJkIGZ1bmN0aW9uYWxpdHkuICByZWdleC5jIGFjdHVhbGx5IGJyZWFrcyBjb21waWxhdGlvbgorIyBiZWNhdXNlIGl0IHVzZXMgX19tZW1wY3B5LCB0aGVyZSBhcmUgb3RoZXIgdGhpbmdzIChUQkQ6CisjIHNlZSBkaWZmdXRpbHMubWsgaW4gYnVpbGRyb290KQorRVhUUkFfT0VDT05GX2xpYmMtdWNsaWJjID0gIi0td2l0aG91dC1pbmNsdWRlZC1yZWdleCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MjllMWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogZmluZHV0aWxzLTQuNS4xNC9nbC9saWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBmaW5kdXRpbHMtNC41LjE0Lm9yaWcvZ2wvbGliL01ha2VmaWxlLmFtCisrKysgZmluZHV0aWxzLTQuNS4xNC9nbC9saWIvTWFrZWZpbGUuYW0KK0BAIC0xMjIwLDcgKzEyMjAsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlsc180LjIuMzEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzXzQuMi4zMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGVlMDE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlsc180LjIuMzEuYmIKQEAgLTAsMCArMSwxNCBAQAorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiIKK1BSID0gInI0IgorCityZXF1aXJlIGZpbmR1dGlscy5pbmMKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9LyR7QlBOfS8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZ251bGliLWV4dGVuc2lvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maW5kdXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbmR1dGlscy1maXgtZG9jLWJ1aWxkLWVycm9yLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTBlMzFhMGYxOGE0OTcwOWJmNWE0NDk4NjdjODA0OWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTBkMzRiOGZhY2EwYjNjY2EwNzAzZjZjNmI0OThhZmJlNzJmMGJhMTZjMzU5ODBjMTBlYzllZjc3MjRkNjIwNCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHNfNC41LjE0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlsc180LjUuMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU4YTgyZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHNfNC41LjE0LmJiCkBAIC0wLDAgKzEsMTcgQEAKK3JlcXVpcmUgZmluZHV0aWxzLmluYworCisjIEdQTHYyKyAoPDwgNC4yLjMyKSwgR1BMdjMrICg+PSA0LjIuMzIpCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWYyN2RlZmUxZTk2YzJlMWVjZDRlMGM5YmU4OTY3OTQ5IgorIAorREVQRU5EUyA9ICJiaXNvbi1uYXRpdmUiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYThhODE3NjI4MmZkMjhlOGQxMjM0Yzg0ZDg0N2ZhNjYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGRlM2NmNjI1YTVjOWYxNTRlZWUzMTcxZTA3MjUxNWZmZGRlNDA1MjQ0ZGQwMDUwMmFmNjE3YWM1N2I3M2FlMiIKKworIyBodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9idWdzLz8yNzI5OQorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1wb3NpeC1jbGFuZy13Y2hhcicsICdnbF9jdl9mdW5jX3djd2lkdGhfd29ya3M9eWVzJywgJycsIGQpfSIKKworRVhUUkFfT0VDT05GICs9ICJhY19jdl9wYXRoX1NPUlQ9JHtiaW5kaXJ9L3NvcnQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9mb29tYXRpYy9mb29tYXRpYy1maWx0ZXJzXzQuMC4xNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Zvb21hdGljL2Zvb21hdGljLWZpbHRlcnNfNC4wLjE3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MGM5ODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9mb29tYXRpYy9mb29tYXRpYy1maWx0ZXJzXzQuMC4xNy5iYgpAQCAtMCwwICsxLDM3IEBACitTVU1NQVJZID0gIk9wZW5QcmludGluZyBwcmludGVyIHN1cHBvcnQgLSBmaWx0ZXJzIgorREVTQ1JJUFRJT04gPSAiRm9vbWF0aWMgaXMgYSBwcmludGVyIGRhdGFiYXNlIGRlc2lnbmVkIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHNldCB1cCBcCitjb21tb24gcHJpbnRlcnMgZm9yIHVzZSB3aXRoIFVOSVgtbGlrZSBvcGVyYXRpbmcgc3lzdGVtcy5cCitJdCBwcm92aWRlcyB0aGUgImdsdWUiIGJldHdlZW4gYSBwcmludCBzcG9vbGVyIChsaWtlIENVUFMgb3IgbHByKSBhbmQgXAordGhlIHByaW50ZXIsIGJ5IHByb2Nlc3NpbmcgZmlsZXMgc2VudCB0byB0aGUgcHJpbnRlci4gXAorIFwKK1RoaXMgcGFja2FnZSBjb25zaXN0cyBvZiBmaWx0ZXJzIHVzZWQgYnkgdGhlIHByaW50ZXIgc3Bvb2xlcnMgXAordG8gY29udmVydCB0aGUgaW5jb21pbmcgUG9zdFNjcmlwdCBkYXRhIGludG8gdGhlIHByaW50ZXIncyBuYXRpdmUgXAorZm9ybWF0IHVzaW5nIGEgcHJpbnRlci1zcGVjaWZpYywgYnV0IHNwb29sZXItaW5kZXBlbmRlbnQgUFBEIGZpbGUuIFwKKyIKKworREVQRU5EUyArPSAiY3VwcyBwZXJsIGxpYnhtbDIiCitQUiA9ICJyMSIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke1dPUktESVJ9L2Zvb21hdGljLWZpbHRlcnMtJHtQVn0vQ09QWUlORzttZDU9MzkzYTVjYTQ0NWY2OTY1ODczZWNhMDI1OWExN2Y4MzMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5vcGVucHJpbnRpbmcub3JnL2Rvd25sb2FkL2Zvb21hdGljL2Zvb21hdGljLWZpbHRlcnMtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjA1ZjVkY2JmZTM1OWYxOThlZWYzZGY1YjI4M2Q4OTYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTJlMmU1M2U1MDI1NzFlODhlZWI5MDEwYzQ1YTBkNTQ2NzFmMTU3MDdlZTEwNGY1YzljMjJiNTllYTdhMzNlMyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWZpbGUtY29udmVydGVyLWNoZWNrIC0td2l0aC1maWxlLWNvbnZlcnRlcj10ZXh0dG9wcyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgZXhwb3J0IFBFUkw9IiR7YmluZGlyfS9lbnYgcGVybCIKKyAgICBleHBvcnQgQ1VQU19TRVJWRVJCSU49JHtleGVjX3ByZWZpeH0vbGliL2N1cHMgICAgICAgIyAvdXNyL2xpYiBOT1QgbGliZGlyCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2xpbnV4c3RkYmFzZSgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2V4ZWNfcHJlZml4fS9saWIvY3Vwcy9maWx0ZXIKKyAgICBsbiAtc2YgJHtiaW5kaXJ9L2Zvb21hdGljLXJpcCAke0R9JHtleGVjX3ByZWZpeH0vbGliL2N1cHMvZmlsdGVyCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2V4ZWNfcHJlZml4fS9saWIvY3Vwcy8gJHtleGVjX3ByZWZpeH0vbGliL3Bwci8iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2stMy4xLjUvZ2F3ay0zLjEuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2stMy4xLjUvZ2F3ay0zLjEuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNlNzk4NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dhd2svZ2F3ay0zLjEuNS9nYXdrLTMuMS41X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDQxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworYXV0b21ha2UgMS4xMiBoYXMgZGVwcmljYXRlZCBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0CisKK3RoaXMgcGF0Y2ggYXZvaWRzIHRoZXNlIGtpbmRzIG9mIGVycm9yczoKKworfCBjb25maWd1cmUuYWM6MTI3OiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCit8IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3Ivc2hhcmUvYWNsb2NhbC0xLjEyL3Byb3Rvcy5tNDoxMjogQU1fQ19QUk9UT1RZUEVTIGlzIGV4cGFuZGVkIGZyb20uLi4KK3wgY29uZmlndXJlLmFjOjEyNzogdGhlIHRvcCBsZXZlbAorfCBhdXRvbTR0ZTogbTQgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXM6IDEKKy4uLgorfCBNYWtlZmlsZS5hbToyNzogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNS8wNAorCitJbmRleDogZ2F3ay0zLjEuNS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnYXdrLTMuMS41Lm9yaWcvY29uZmlndXJlLmFjCisrKysgZ2F3ay0zLjEuNS9jb25maWd1cmUuYWMKK0BAIC0xMjQsNyArMTI0LDYgQEAgZmkKKyAKKyBkbmwgY2hlY2sgZm9yIEMgY29tcGlsZXIgZm9yIGF1dG9tYWtlCisgQU1fUFJPR19DQ19TVERDCistQU1fQ19QUk9UT1RZUEVTCisgCisgZG5sIEN5Z3dpbiBkb2Vzbid0IGxpa2UgdG8gZ2V0IGxpYnMgd2l0aCBmdWxsIHBhdGhzCisgZG5sIHNpbmNlIHRoYXQgb3ZlcnJpZGVzIGxpbmtpbmcgYWdhaW5zdCBETExzLgorSW5kZXg6IGdhd2stMy4xLjUvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnYXdrLTMuMS41Lm9yaWcvTWFrZWZpbGUuYW0KKysrKyBnYXdrLTMuMS41L01ha2VmaWxlLmFtCitAQCAtMjQsNyArMjQsNyBAQAorICMjIHByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbgorIAorICMgQXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gaWYgbmVlZGVkLCBtYWtlIC5iejIgZmlsZXMgYWxzby4KKy1BVVRPTUFLRV9PUFRJT05TID0gYW5zaTJrbnIgZGlzdC1iemlwMgorK0FVVE9NQUtFX09QVElPTlMgPSBkaXN0LWJ6aXAyCisgCisgIyBUaGlzIHVuZG9jdW1lbnRlZCB2YXJpYWJsZSBpbnN1cmVzIHRoYXQgYWNsb2NhbCBydW5zCisgIyBjb3JyZWN0bHkgYWZ0ZXIgY2hhbmdpbmcgY29uZmlndXJlLmFjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2stNC4xLjMvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrLTQuMS4zL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjNmMGJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrLTQuMS4zL3J1bi1wdGVzdApAQCAtMCwwICsxLDEwIEBACisjIS9iaW4vc2gKKworY2QgdGVzdAorZm9yIGkgaW4gYGdyZXAgLXZFICJAfF4kfCN8R3QtZHVtbXkiIE1ha2V0ZXN0cyB8YXdrIC1GOiAne3ByaW50ICQxfSdgOyBcCisgIGRvIExDX0FMTD0ke0dBV0tMT0NBTEU6LUN9IExBTkc9JHtHQVdLTE9DQUxFOi1DfSBzcmNkaXI9YHB3ZGAgQVdLPWdhd2sgQ01QPWNtcCBcCisgIG1ha2UgLWYgTWFrZXRlc3RzICRpID4kaS50bXAgMj4mMTsgXAorICBncmVwIC1xICJFcnJvciIgJGkudG1wOyBcCisgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbiBlY2hvICJGQUlMOiAkaSI7IFwKKyAgZWxzZSBlY2hvICJQQVNTOiAkaSI7IHJtIC1mICRpLnRtcDsgZmk7IFwKK2RvbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dhd2svZ2F3a18zLjEuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dhd2svZ2F3a18zLjEuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2FmNGE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrXzMuMS41LmJiCkBAIC0wLDAgKzEsNDIgQEAKK1NVTU1BUlkgPSAiR05VIGF3ayB0ZXh0IHByb2Nlc3NpbmcgdXRpbGl0eSIKK0RFU0NSSVBUSU9OID0gIlRoZSBHTlUgdmVyc2lvbiBvZiBhd2ssIGEgdGV4dCBwcm9jZXNzaW5nIHV0aWxpdHkuIFwKK0F3ayBpbnRlcnByZXRzIGEgc3BlY2lhbC1wdXJwb3NlIHByb2dyYW1taW5nIGxhbmd1YWdlIHRvIGRvIFwKK3F1aWNrIGFuZCBlYXN5IHRleHQgcGF0dGVybiBtYXRjaGluZyBhbmQgcmVmb3JtYXR0aW5nIGpvYnMuIgorSE9NRVBBR0UgPSAid3d3LmdudS5vcmcvc29mdHdhcmUvZ2F3ayIKK0JVR1RSQUNLRVIgID0gImJ1Zy1nYXdrQGdudS5vcmciCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKKyMgZ2F3ayA8PSAzLjEuNTogR1BMdjIKKyMgZ2F3ayA+PSAzLjEuNjogR1BMdjMKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiIKKworUkRFUEVORFNfZ2F3ayArPSAiZ2F3ay1jb21tb24iCitSREVQRU5EU19wZ2F3ayArPSAiZ2F3ay1jb21tb24iCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2dhd2svZ2F3ay0ke1BWfS50YXIuZ3ogXAorCWZpbGU6Ly9nYXdrLTMuMS41X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ3NjAzMjU0ODk0NzljYWMxN2ZlMDExNGI4ZjYyZjMwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ2M2RjYjlkMGNhMzk4YjFkNGY1YTMzMmY2Y2Q5Y2VjNTY0NDEyNjVmY2E2MTZmMmVhMWI0NGQ0NTllOWYwZjgiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbyB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK1BBQ0tBR0VTICs9ICJnYXdrLWNvbW1vbiBwZ2F3ayIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L2dhd2sqICR7YmluZGlyfS9pZ2F3ayIKK0ZJTEVTX2dhd2stY29tbW9uICs9ICIke2RhdGFkaXJ9L2F3ay8qICR7bGliZGlyfS9nYXdrL2F3ay8qIgorRklMRVNfcGdhd2sgPSAiJHtiaW5kaXJ9L3BnYXdrKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2dhd2svYXdrLy5kZWJ1ZyIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiYXdrIgorQUxURVJOQVRJVkVfVEFSR0VUW2F3a10gPSAiJHtiaW5kaXJ9L2dhd2siCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0NGTEFHUyArPSAiLUQgUFJPVE9UWVBFUyIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyByZW1vdmUgdGhlIGxpbmsgc2luY2Ugd2UgZG9uJ3QgcGFja2FnZSBpdAorCXJtICR7RH0ke2JpbmRpcn0vYXdrCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2tfNC4xLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2tfNC4xLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFhODhlNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dhd2svZ2F3a180LjEuMy5iYgpAQCAtMCwwICsxLDQ3IEBACitTVU1NQVJZID0gIkdOVSBhd2sgdGV4dCBwcm9jZXNzaW5nIHV0aWxpdHkiCitERVNDUklQVElPTiA9ICJUaGUgR05VIHZlcnNpb24gb2YgYXdrLCBhIHRleHQgcHJvY2Vzc2luZyB1dGlsaXR5LiBcCitBd2sgaW50ZXJwcmV0cyBhIHNwZWNpYWwtcHVycG9zZSBwcm9ncmFtbWluZyBsYW5ndWFnZSB0byBkbyBcCitxdWljayBhbmQgZWFzeSB0ZXh0IHBhdHRlcm4gbWF0Y2hpbmcgYW5kIHJlZm9ybWF0dGluZyBqb2JzLiIKK0hPTUVQQUdFID0gImh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2F3ay8iCitCVUdUUkFDS0VSICA9ICJidWctZ2F3a0BnbnUub3JnIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCisjIGdhd2sgPD0gMy4xLjU6IEdQTHYyCisjIGdhd2sgPj0gMy4xLjY6IEdQTHYzCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK0RFUEVORFMgKz0gInJlYWRsaW5lIgorCitQQUNLQUdFQ09ORklHW21wZnJdID0gIi0td2l0aC1tcGZyLC0td2l0aG91dC1tcGZyLCBtcGZyIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ2F3ay9nYXdrLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTVkMzdmNDA2OTUwMjY3N2YyNWQxMzQwZGY4ZWVjOTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTI0ZWZmYTViOWVjZDRlZDk0MGYyNTgxYzVkM2MxZGY0ZTRiZDdlNmY3NjhhYTAzM2MxOTE2ZjQ3ZGZjNmUyOSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vYXdrIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vJHtCUE59LyoubGEiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZXhlY2Rpcn0vYXdrLy5kZWJ1ZyIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiYXdrIgorQUxURVJOQVRJVkVfVEFSR0VUW2F3a10gPSAiJHtiaW5kaXJ9L2dhd2siCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgcmVtb3ZlIHRoZSBsaW5rIHNpbmNlIHdlIGRvbid0IHBhY2thZ2UgaXQKKwlybSAke0R9JHtiaW5kaXJ9L2F3aworfQorCitpbmhlcml0IHB0ZXN0CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJbWtkaXIgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorCWZvciBpIGluIGBncmVwIC12RSAiQHxeJHwjfEd0LWR1bW15IiAke1N9L3Rlc3QvTWFrZXRlc3RzIHxhd2sgLUY6ICd7cHJpbnQgJDF9J2AgTWFrZXRlc3RzOyBcCisJICBkbyBjcCAke1N9L3Rlc3QvJGkqICR7RH0ke1BURVNUX1BBVEh9L3Rlc3Q7IFwKKwlkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hYXJjaDY0L29iamFyY2guaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2FhcmNoNjQvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hYXJjaDY0L29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hcm0vb2JqYXJjaC5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvYXJtL29iamFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODc3MmNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvYXJtL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hcm1lYi9vYmphcmNoLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hcm1lYi9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU5MDk3ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2FybWViL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9iYXNlLWdlbmh0LmMtYWRkLWEtcHJlcHJvY2Vzc29yLWRlZmluZS10by1hbGxvdy1mb3BlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvYmFzZS1nZW5odC5jLWFkZC1hLXByZXByb2Nlc3Nvci1kZWZpbmUtdG8tYWxsb3ctZm9wZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTdkNGVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvYmFzZS1nZW5odC5jLWFkZC1hLXByZXByb2Nlc3Nvci1kZWZpbmUtdG8tYWxsb3ctZm9wZS5wYXRjaApAQCAtMCwwICsxLDM2IEBACitiYXNlL2dlbmh0LmM6IGFkZCBhIHByZXByb2Nlc3NvciBkZWZpbmUgdG8gYWxsb3cgZm9wZW4gY2FsbGluZworCitUaGUgY29tbWl0IGluIHVwc3RyZWFtOgoraHR0cDovL2dpdC5naG9zdHNjcmlwdC5jb20vP3A9Z2hvc3RwZGwuZ2l0O2E9Y29tbWl0ZGlmZjtoPTc3M2M2OWU0NmU3MGJkZDU0ODI2NzY0MzdkYWZkMmNhODMzOTc2NDMKKworUmVwbGFjZSBhbGwgZm9wZW4gY2FsbHMgd2l0aCBncF9mb3BlbiBhbmQgYWRkIGEgcHJlcHJvY2Vzc29yIGRlZmluZSBzbwordGhhdCBhbnkgdW5pbnRlbnRpYWwgY2FsbHMgZGlyZWN0bHkgdG8gZm9wZW4gd2lsbCBjYXVzZSBhbiBlcnJvci4KKworT25seSBleGNlcHRpb25zIGFyZSB0aG9zZSBpbiB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgY29kZSwgYW5kIG1rcm9tZnMuYy4KK1RoaXMgcGF0Y2ggYWRkIGEgcHJlcHJvY2Vzc29yIGRlZmluZSB0byBhbGxvdyBmb3BlbiBjYWxsaW5nIGluIGJhc2UvZ2VuaHQuYy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGJhc2UvZ2VuaHQuYyB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Jhc2UvZ2VuaHQuYyBiL2Jhc2UvZ2VuaHQuYworaW5kZXggNGIwNDA4NS4uY2M4MmZmZiAxMDA2NDQKKy0tLSBhL2Jhc2UvZ2VuaHQuYworKysrIGIvYmFzZS9nZW5odC5jCitAQCAtMTYsNiArMTYsMTAgQEAKKyAKKyAvKiBHZW5lcmF0ZSBDIGNvZGUgZm9yIGNvbXBpbGluZyBoYWxmdG9uZXMgaW50byBST00uICovCisgI2luY2x1ZGUgIm1hbGxvY18uaCIKKysKKysvKiBwcmV2ZW50IGdwLmggZnJvbSBkZWZpbmluZyBmb3BlbiAqLworKyNkZWZpbmUgZm9wZW4gZm9wZW4KKysKKyAjaW5jbHVkZSAic3RkaW9fLmgiCisgI2luY2x1ZGUgInN0cmluZ18uaCIKKyAjaW5jbHVkZSAiZ3NjZGVmcy5oIgorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2N1cHMtbm8tZ2NyeXB0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvY3Vwcy1uby1nY3J5cHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjOTM2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2N1cHMtbm8tZ2NyeXB0LnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1N1YmplY3Q6IFtQQVRDSF0gRG9uJ3QgYnVpbGQtZGVwZW5kIG9uIGxpYmdjcnlwdCwgYXMgbm90aGluZyBpcyB1c2VkIGZyb20gaXQKKworQmFja3BvcnRlZCBmcm9tIGh0dHA6Ly93d3cuY3Vwcy5vcmcvc3RyZmlsZXMucGhwLzMzMDgvY3Vwcy1uby1nY3J5cHQucGF0Y2gKKworVGhpcyBhZGRyZXNzZXMgdGhlIGNyeXRvIGRlcGVuZGVuY3kgc2VlbiBkdXJpbmcgYnVpbGQuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKworUmViYXNlIHRoZSBwYXRjaCB0byBnaG9zdHNjcmlwdC05LjE1CitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBjdXBzL2xpYnMvY3Vwcy9odHRwLXByaXZhdGUuaCB8IDEgLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jdXBzL2xpYnMvY3Vwcy9odHRwLXByaXZhdGUuaCBiL2N1cHMvbGlicy9jdXBzL2h0dHAtcHJpdmF0ZS5oCitpbmRleCA5OWE4NWMzLi5hNjc0ODUyIDEwMDY0NAorLS0tIGEvY3Vwcy9saWJzL2N1cHMvaHR0cC1wcml2YXRlLmgKKysrKyBiL2N1cHMvbGlicy9jdXBzL2h0dHAtcHJpdmF0ZS5oCitAQCAtODAsNyArODAsNiBAQCB0eXBlZGVmIGludCBzb2NrbGVuX3Q7CisgIyAgZWxpZiBkZWZpbmVkIEhBVkVfR05VVExTCisgIyAgICBpbmNsdWRlIDxnbnV0bHMvZ251dGxzLmg+CisgIyAgICBpbmNsdWRlIDxnbnV0bHMveDUwOS5oPgorLSMgICAgaW5jbHVkZSA8Z2NyeXB0Lmg+CisgIyAgZWxpZiBkZWZpbmVkKEhBVkVfQ0RTQVNTTCkKKyAjICAgIGluY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisgIyAgICBpbmNsdWRlIDxTZWN1cml0eS9TZWN1cml0eS5oPgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjAyLWdlbmFyY2gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjAyLWdlbmFyY2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI4YTk0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMDItZ2VuYXJjaC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitJbXBvcnQgcGF0Y2ggZnJvbSB3aW5kcml2ZXIgbGludXggZm9yIGNyb3NzIGNvbXBpbGF0aW9uLCBhbmQgc3BsaXQgcGF0Y2hlcworaW50byBvZSB3YXkgdW5kZXIgZGlmZmVyZW50IGRpcmVjdG9yaWVzIHN1Y2ggYXMgaTU4NiwgcG93ZXJwYyBldGMgYWNjb3JkaW5nIAordG8gUmljaGFyZCdzIG9waW5pb24uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLYW5nIEthaSA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorCisjIEF1dGhvcjogQ2hpIFh1IDxjaGkueHVAd2luZHJpdmVyLmNvbT4KKyMgRGF0ZTogRmViIDI2IDIwMTAKKyMgU3VtbWFyeTogR2VuZXJhdGUgYXJjaC5oIGZvciBwcGMzMgorIworCitkaWZmIC1OcnUgZ2hvc3RzY3JpcHQtOC42NC5vcmlnL2Jhc2UvbGliLm1hayBnaG9zdHNjcmlwdC04LjY0L2Jhc2UvbGliLm1haworLS0tIGdob3N0c2NyaXB0LTguNjQub3JpZy9iYXNlL2xpYi5tYWsJMjAxMC0wMi0xMCAxMDozMDowMi4wMDAwMDAwMDAgKzA4MDAKKysrKyBnaG9zdHNjcmlwdC04LjY0L2Jhc2UvbGliLm1hawkyMDEwLTAyLTEwIDEwOjU2OjIxLjAwMDAwMDAwMCArMDgwMAorQEAgLTY3LDggKzY3LDggQEAKKyBzdGRwcmVfaD0kKEdMU1JDKXN0ZHByZS5oICQoc3RkcG5faCkKKyBzdGRpbnRfX2g9JChHTFNSQylzdGRpbnRfLmggJChzdGRfaCkKKyAKKy0kKEdMR0VOKWFyY2guaCA6ICQoR0VOQVJDSF9YRSkKKy0JJChFWFApJChHRU5BUkNIX1hFKSAkKEdMR0VOKWFyY2guaCAkKFRBUkdFVF9BUkNIX0ZJTEUpCisrIyMkKEdMR0VOKWFyY2guaCA6ICQoR0VOQVJDSF9YRSkKKysjIwkkKEVYUCkkKEdFTkFSQ0hfWEUpICQoR0xHRU4pYXJjaC5oICQoVEFSR0VUX0FSQ0hfRklMRSkKKyAKKyAjIFBsYXRmb3JtIGludGVyZmFjZXMKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMDItcHJldmVudF9yZWNvbXBpbGluZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMDItcHJldmVudF9yZWNvbXBpbGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzI5YmU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4wMi1wcmV2ZW50X3JlY29tcGlsaW5nLnBhdGNoCkBAIC0wLDAgKzEsMTAwIEBACit1c3QgdXNlIGNvbW1hbmRzIHByb3ZpZGVkIGJ5IGdob3N0c2NyaXB0LW5hdGl2ZSwgcHJldmVudGluZyByZWNvbXBpbGUgdGhlbSB3aGVuCitjb21waWxlIGdob3N0c2NyaXB0LgorV2F5IHRvIGVuYWJsZSBjcm9zcyBjb21waWxlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2FuZyBLYWkgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL2Jhc2UvdW5peC1hdXgubWFrIGIvYmFzZS91bml4LWF1eC5tYWsKK2luZGV4IGE5MWZiMjYuLmM5OTFkMTEgMTAwNjQ0CistLS0gYS9iYXNlL3VuaXgtYXV4Lm1haworKysrIGIvYmFzZS91bml4LWF1eC5tYWsKK0BAIC02OSw0NiArNjksNDYgQEAgJChHTE9CSilncF9zeXN2LiQoT0JKKTogJChHTFNSQylncF9zeXN2LmMgJChzdGRpb19faCkgJCh0aW1lX19oKSAkKEFLKVwKKyAgJChNQUtFRElSUykKKyAJJChHTENDKSAkKEdMT18pZ3Bfc3lzdi4kKE9CSikgJChDXykgJChHTFNSQylncF9zeXN2LmMKKyAKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEF1eGlsaWFyeSBwcm9ncmFtcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworLQorLSQoRUNIT0dTX1hFKTogJChHTFNSQyllY2hvZ3MuYyAkKEFLKSAkKHN0ZHByZV9oKSAkKE1BS0VESVJTKQorLQkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChFQ0hPR1NfWEUpICQoR0xTUkMpZWNob2dzLmMgJChBVVhFWFRSQUxJQlMpCistCistIyBPbiB0aGUgUlMvNjAwMCAoYXQgbGVhc3QpLCBjb21waWxpbmcgZ2VuYXJjaC5jIHdpdGggZ2NjIHdpdGggLU8KKy0jIHByb2R1Y2VzIGEgYnVnZ3kgZXhlY3V0YWJsZS4KKy0kKEdFTkFSQ0hfWEUpOiAkKEdMU1JDKWdlbmFyY2guYyAkKEFLKSAkKEdFTkFSQ0hfREVQUykgJChNQUtFRElSUykKKy0JJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoR0VOQVJDSF9YRSkgJChHTFNSQylnZW5hcmNoLmMgJChBVVhFWFRSQUxJQlMpCistCistJChHRU5DT05GX1hFKTogJChHTFNSQylnZW5jb25mLmMgJChBSykgJChHRU5DT05GX0RFUFMpICQoTUFLRURJUlMpCistCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEdFTkNPTkZfWEUpICQoR0xTUkMpZ2VuY29uZi5jICQoQVVYRVhUUkFMSUJTKQorLQorLSQoR0VOREVWX1hFKTogJChHTFNSQylnZW5kZXYuYyAkKEFLKSAkKEdFTkRFVl9ERVBTKSAkKE1BS0VESVJTKQorLQkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChHRU5ERVZfWEUpICQoR0xTUkMpZ2VuZGV2LmMgJChBVVhFWFRSQUxJQlMpCistCistJChHRU5IVF9YRSk6ICQoR0xTUkMpZ2VuaHQuYyAkKEFLKSAkKEdFTkhUX0RFUFMpICQoTUFLRURJUlMpCistCSQoQ0NBVVhfKSAkKEdFTkhUX0NGTEFHUykgJChPXykkKEdFTkhUX1hFKSAkKEdMU1JDKWdlbmh0LmMgJChBVVhFWFRSQUxJQlMpCistCistIyBUbyBnZXQgR1MgdG8gdXNlIHRoZSBzeXN0ZW0gemxpYiwgeW91IHJlbW92ZS9oaWRlIHRoZSBncy96bGliIGRpcmVjdG9yeQorLSMgd2hpY2ggbWVhbnMgdGhhdCB0aGUgbWtyb21mcyBidWlsZCBjYW4ndCBmaW5kIHRoZSB6bGliIHNvdXJjZSBpdCBuZWVkcy4KKy0jIFNvIGl0J3Mgc3BsaXQgaW50byB0d28gdGFyZ2V0cywgb25lIHVzaW5nIHRoZSB6bGliIHNvdXJjZSBkaXJlY3RseS4uLi4uCistTUtST01GU19PQkpTXzA9JChNS1JPTUZTX1pMSUJfT0JKUykgJChBVVgpZ3BtaXNjLiQoT0JKKSAkKEFVWClncF9nZXRudi4kKE9CSikgXAorLSAkKEFVWClnc2NkZWZzLiQoT0JKKSAkKEFVWClncF91bml4LiQoT0JKKSAkKEFVWClncF91bmlmcy4kKE9CSikgJChBVVgpZ3BfdW5pZm4uJChPQkopIFwKKy0gJChBVVgpZ3Bfc3RkaWEuJChPQkopICQoQVVYKWdzdXRpbC4kKE9CSikgJChBVVgpbWVtZW50by4kKE9CSikKKy0KKy0kKE1LUk9NRlNfWEUpXzA6ICQoR0xTUkMpbWtyb21mcy5jICQoTUtST01GU19DT01NT05fREVQUykgJChNS1JPTUZTX09CSlNfMCkgJChNQUtFRElSUykKKy0JJChDQ0FVWF8pICQoR0VOT1BUKSAkKENGTEFHUykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoSV8pJChHTE9CSikkKF9JKSAkKElfKSQoWlNSQ0RJUikkKF9JKSAkKEdMU1JDKW1rcm9tZnMuYyAkKE9fKSQoTUtST01GU19YRSlfMCAkKE1LUk9NRlNfT0JKU18wKSAkKEFVWEVYVFJBTElCUykKKy0KKy0jIC4uLi4gYW5kIG9uZSB1c2luZyB0aGUgemxpYiBsaWJyYXJ5IGxpbmtlZCB2aWEgdGhlIGNvbW1hbmQgbGluZQorLU1LUk9NRlNfT0JKU18xPSQoQVVYKWdzY2RlZnMuJChPQkopIFwKKy0gJChBVVgpZ3BtaXNjLiQoT0JKKSAkKEFVWClncF9nZXRudi4kKE9CSikgXAorLSAkKEFVWClncF91bml4LiQoT0JKKSAkKEFVWClncF91bmlmcy4kKE9CSikgJChBVVgpZ3BfdW5pZm4uJChPQkopIFwKKy0gJChBVVgpZ3Bfc3RkaWEuJChPQkopICQoQVVYKWdzdXRpbC4kKE9CSikKKy0KKy0kKE1LUk9NRlNfWEUpXzE6ICQoR0xTUkMpbWtyb21mcy5jICQoTUtST01GU19DT01NT05fREVQUykgJChNS1JPTUZTX09CSlNfMSkgJChNQUtFRElSUykKKy0JJChDQ0FVWF8pICQoR0VOT1BUKSAkKENGTEFHUykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoSV8pJChHTE9CSikkKF9JKSAkKElfKSQoWlNSQ0RJUikkKF9JKSAkKEdMU1JDKW1rcm9tZnMuYyAkKE9fKSQoTUtST01GU19YRSlfMSAkKE1LUk9NRlNfT0JKU18xKSAkKEFVWEVYVFJBTElCUykKKy0KKy0kKE1LUk9NRlNfWEUpOiAkKE1LUk9NRlNfWEUpXyQoU0hBUkVfWkxJQikgJChNQUtFRElSUykKKy0JJChDUF8pICQoTUtST01GU19YRSlfJChTSEFSRV9aTElCKSAkKE1LUk9NRlNfWEUpCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXV4aWxpYXJ5IHByb2dyYW1zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisrIworKyMkKEVDSE9HU19YRSk6ICQoR0xTUkMpZWNob2dzLmMgJChBSykgJChzdGRwcmVfaCkgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEVDSE9HU19YRSkgJChHTFNSQyllY2hvZ3MuYyAkKEFVWEVYVFJBTElCUykKKysjCisrIyMgT24gdGhlIFJTLzYwMDAgKGF0IGxlYXN0KSwgY29tcGlsaW5nIGdlbmFyY2guYyB3aXRoIGdjYyB3aXRoIC1PCisrIyMgcHJvZHVjZXMgYSBidWdneSBleGVjdXRhYmxlLgorKyMkKEdFTkFSQ0hfWEUpOiAkKEdMU1JDKWdlbmFyY2guYyAkKEFLKSAkKEdFTkFSQ0hfREVQUykgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEdFTkFSQ0hfWEUpICQoR0xTUkMpZ2VuYXJjaC5jICQoQVVYRVhUUkFMSUJTKQorKyMKKysjJChHRU5DT05GX1hFKTogJChHTFNSQylnZW5jb25mLmMgJChBSykgJChHRU5DT05GX0RFUFMpICQoTUFLRURJUlMpCisrIwkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChHRU5DT05GX1hFKSAkKEdMU1JDKWdlbmNvbmYuYyAkKEFVWEVYVFJBTElCUykKKysjCisrIyQoR0VOREVWX1hFKTogJChHTFNSQylnZW5kZXYuYyAkKEFLKSAkKEdFTkRFVl9ERVBTKSAkKE1BS0VESVJTKQorKyMJJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoR0VOREVWX1hFKSAkKEdMU1JDKWdlbmRldi5jICQoQVVYRVhUUkFMSUJTKQorKyMKKysjJChHRU5IVF9YRSk6ICQoR0xTUkMpZ2VuaHQuYyAkKEFLKSAkKEdFTkhUX0RFUFMpICQoTUFLRURJUlMpCisrIwkkKENDQVVYXykgJChHRU5IVF9DRkxBR1MpICQoT18pJChHRU5IVF9YRSkgJChHTFNSQylnZW5odC5jICQoQVVYRVhUUkFMSUJTKQorKyMKKysjIyBUbyBnZXQgR1MgdG8gdXNlIHRoZSBzeXN0ZW0gemxpYiwgeW91IHJlbW92ZS9oaWRlIHRoZSBncy96bGliIGRpcmVjdG9yeQorKyMjIHdoaWNoIG1lYW5zIHRoYXQgdGhlIG1rcm9tZnMgYnVpbGQgY2FuJ3QgZmluZCB0aGUgemxpYiBzb3VyY2UgaXQgbmVlZHMuCisrIyMgU28gaXQncyBzcGxpdCBpbnRvIHR3byB0YXJnZXRzLCBvbmUgdXNpbmcgdGhlIHpsaWIgc291cmNlIGRpcmVjdGx5Li4uLi4KKysjTUtST01GU19PQkpTXzA9JChNS1JPTUZTX1pMSUJfT0JKUykgJChBVVgpZ3BtaXNjLiQoT0JKKSAkKEFVWClncF9nZXRudi4kKE9CSikgXAorKyMgJChBVVgpZ3NjZGVmcy4kKE9CSikgJChBVVgpZ3BfdW5peC4kKE9CSikgJChBVVgpZ3BfdW5pZnMuJChPQkopICQoQVVYKWdwX3VuaWZuLiQoT0JKKSBcCisrIyAkKEFVWClncF9zdGRpYS4kKE9CSikgJChBVVgpZ3N1dGlsLiQoT0JKKSAkKEFVWCltZW1lbnRvLiQoT0JKKQorKyMKKysjJChNS1JPTUZTX1hFKV8wOiAkKEdMU1JDKW1rcm9tZnMuYyAkKE1LUk9NRlNfQ09NTU9OX0RFUFMpICQoTUtST01GU19PQkpTXzApICQoTUFLRURJUlMpCisrIwkkKENDQVVYXykgJChHRU5PUFQpICQoQ0ZMQUdTKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChJXykkKEdMT0JKKSQoX0kpICQoSV8pJChaU1JDRElSKSQoX0kpICQoR0xTUkMpbWtyb21mcy5jICQoT18pJChNS1JPTUZTX1hFKV8wICQoTUtST01GU19PQkpTXzApICQoQVVYRVhUUkFMSUJTKQorKyMKKysjIyAuLi4uIGFuZCBvbmUgdXNpbmcgdGhlIHpsaWIgbGlicmFyeSBsaW5rZWQgdmlhIHRoZSBjb21tYW5kIGxpbmUKKysjTUtST01GU19PQkpTXzE9JChBVVgpZ3NjZGVmcy4kKE9CSikgXAorKyMgJChBVVgpZ3BtaXNjLiQoT0JKKSAkKEFVWClncF9nZXRudi4kKE9CSikgXAorKyMgJChBVVgpZ3BfdW5peC4kKE9CSikgJChBVVgpZ3BfdW5pZnMuJChPQkopICQoQVVYKWdwX3VuaWZuLiQoT0JKKSBcCisrIyAkKEFVWClncF9zdGRpYS4kKE9CSikgJChBVVgpZ3N1dGlsLiQoT0JKKQorKyMKKysjJChNS1JPTUZTX1hFKV8xOiAkKEdMU1JDKW1rcm9tZnMuYyAkKE1LUk9NRlNfQ09NTU9OX0RFUFMpICQoTUtST01GU19PQkpTXzEpICQoTUFLRURJUlMpCisrIwkkKENDQVVYXykgJChHRU5PUFQpICQoQ0ZMQUdTKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChJXykkKEdMT0JKKSQoX0kpICQoSV8pJChaU1JDRElSKSQoX0kpICQoR0xTUkMpbWtyb21mcy5jICQoT18pJChNS1JPTUZTX1hFKV8xICQoTUtST01GU19PQkpTXzEpICQoQVVYRVhUUkFMSUJTKQorKyMKKysjJChNS1JPTUZTX1hFKTogJChNS1JPTUZTX1hFKV8kKFNIQVJFX1pMSUIpICQoTUFLRURJUlMpCisrIwkkKENQXykgJChNS1JPTUZTX1hFKV8kKFNIQVJFX1pMSUIpICQoTUtST01GU19YRSkKKyAKKyAjIFF1ZXJ5IHRoZSBlbnZpcm9ubWVudCB0byBjb25zdHJ1Y3QgZ2NvbmZpZ18uaC4KKyAjIFRoZXNlIGFyZSBhbGwgZGVmaW5lZCBjb25kaXRpb25hbGx5IChleGNlcHQgdGhlIEphc1BFUiBvbmUpLCBzbyB0aGF0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjE1LXBhcmFsbGVsLW1ha2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjE1LXBhcmFsbGVsLW1ha2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk3Yjg5NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMTUtcGFyYWxsZWwtbWFrZS5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tIGJlMWUxYjMzMTkxYWZkY2ZlM2MyZWNjNGZmM2UzNjFhNTg1OWU5YzYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMzAgSmFuIDIwMTUgMDA6NDA6MjIgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gY29udHJpYi5tYWs6IGZpeCBmb3IgcGFyYWxsZWwgYnVpbGQKKworRml4ZWQ6CitybTogY2Fubm90IHJlbW92ZSBgL3Vzci9zaGFyZS9naG9zdHNjcmlwdC85LjE1L2xpYic6IElzIGEgZGlyZWN0b3J5CisKK0NyZWF0ZSBsaWIgYmVmb3JlIGluc3RhbGwgdG8gZml4IHRoZSByYWNlIGlzc3VlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb250cmliL2NvbnRyaWIubWFrIHwgICAgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29udHJpYi5tYWsgYi9jb250cmliL2NvbnRyaWIubWFrCitpbmRleCAwOGE4MGQxLi5kZTJlMjBkIDEwMDY0NAorLS0tIGEvY29udHJpYi9jb250cmliLm1haworKysrIGIvY29udHJpYi9jb250cmliLm1haworQEAgLTk0Nyw2ICs5NDcsNyBAQCAkKERFVk9CSilkdmlwcmxpYi4kKE9CSikgOiAkKEpBUFNSQylkdmlwcmxpYi5jICQoSkFQU1JDKWR2aXBybGliLmgKKyAJJChERVZDQykgJChPXykkQCAkKENfKSAkKEpBUFNSQylkdmlwcmxpYi5jCisgCisgZXh0cmEtZG1wcnQtaW5zdGFsbDoKKysJbWtkaXIgLXAgJChERVNURElSKSQoZ3NkYXRhZGlyKSQoRClsaWIKKyAJJChJTlNUQUxMX0RBVEEpICQoSkFQU1JDKWRtcF9pbml0LnBzICQoREVTVERJUikkKGdzZGF0YWRpcikkKEQpbGliIHx8IGV4aXQgMQorIAkkKElOU1RBTExfREFUQSkgJChKQVBTUkMpZG1wX3NpdGUucHMgJChERVNURElSKSQoZ3NkYXRhZGlyKSQoRClsaWIgfHwgZXhpdCAxCisgCSQoSU5TVEFMTF9EQVRBKSAkKEpBUFNSQyllc2NwXzI0LnNyYyAkKERFU1RESVIpJChnc2RhdGFkaXIpJChEKWxpYiB8fCBleGl0IDEKK0BAIC0xMDg4LDYgKzEwODksNyBAQCAkKERFVk9CSilnZGV2YWxwcy4kKE9CSikgOiAkKEpBUFNSQylnZGV2YWxwcy5jICQoUERFVkgpCisgIyMjIC0tLS0tLS0tLS0tLS0tLS0tIEFkZGl0aW9uYWwgLnVwcCBmaWxlcyAtLS0tLS0tLS0tLS0tLS0tICMjIworIAorIGV4dHJhLXVwcC1pbnN0YWxsOgorKwlta2RpciAtcCAkKERFU1RESVIpJChnc2RhdGFkaXIpJChEKWxpYgorIAlmb3IgZiBpbiAkKENPTlRSSUJTUkMpdW5pcHJpbnQkKEQpKi51cHA7IGRvIFwKKyAJICAgICQoSU5TVEFMTF9EQVRBKSAkJGYgJChERVNURElSKSQoZ3NkYXRhZGlyKSQoRClsaWIgfHwgZXhpdCAxOyBcCisgCWRvbmUKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjE2LVdlcnJvci1yZXR1cm4tdHlwZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMTYtV2Vycm9yLXJldHVybi10eXBlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ODY0ODIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjE2LVdlcnJvci1yZXR1cm4tdHlwZS5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDVkNWM4M2M4OWJlMGNmZjI5ZGRlMjI2N2ZhMTY4ZTZmNzE0NmJlOGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgNCBNYXkgMjAxNSAyMjozMTo0OCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBiYXNlL2dlbmRldi5jOiBmaXggZm9yIC1XZXJyb3I9cmV0dXJuLXR5cGUKKworRml4ZWQ6CitiYXNlL2dlbmRldi5jOjgwOjE6IGVycm9yOiByZXR1cm4gdHlwZSBkZWZhdWx0cyB0byAnaW50JyBbLVdlcnJvcj1yZXR1cm4tdHlwZV0KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgYmFzZS9nZW5kZXYuYyB8ICAgIDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvYmFzZS9nZW5kZXYuYyBiL2Jhc2UvZ2VuZGV2LmMKK2luZGV4IDY4YTc0NWYuLjgwNThiNWEgMTAwNjQ0CistLS0gYS9iYXNlL2dlbmRldi5jCisrKysgYi9iYXNlL2dlbmRldi5jCitAQCAtNzcsNiArNzcsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqaW5kZW50X2l0ZW0gPSAiIjsKKyAvKiBGb3J3YXJkIGRlZmluaXRpb25zICovCisgdm9pZCBhZGRfZW50cnkoY29uZmlnICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBib29sKTsKKyAKKytpbnQKKyBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgeworICAgICBjb25maWcgY29uZjsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC1uYXRpdmUtZml4LWRpc2FibGUtc3lzdGVtLWxpYnRpZmYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC1uYXRpdmUtZml4LWRpc2FibGUtc3lzdGVtLWxpYnRpZmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE1ODExNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LW5hdGl2ZS1maXgtZGlzYWJsZS1zeXN0ZW0tbGlidGlmZi5wYXRjaApAQCAtMCwwICsxLDM3IEBACitnaG9zdHNjcmlwdC1uYXRpdmU6Zml4IGRpc2FibGUtc3lzdGVtLWxpYnRpZmYKKworTW9kaWZ5IGNvbmZpZ3VyZSB0byBhZGQgdGhlIGNoZWNrIHRvIG1ha2Ugc3VyZQorZ2hvc3RzY3JpcCBjb3VsZCB3b3JrIHdoaWxlIHN5c3RlbS1saWJ0aWZmIGlzCitkaXNhYmxlZC4KKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb25maWd1cmUuYWMgfCA1ICsrKysrCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEwNTUsNiArMTA1NSw3IEBAIERpc2FibGluZyB0aWZmIG91dHB1dCBkZXZpY2VzLl0pCisgZXNhYworIAorIGlmIHRlc3QgJFNIQVJFX0xJQlRJRkYgLWVxIDA7IHRoZW4KKysgICAgaWYgdGVzdCAtZSAkTElCVElGRkRJUi9jb25maWd1cmU7IHRoZW4KKyAgICAgICBlY2hvCisgICAgICAgZWNobyAiUnVubmluZyBsaWJ0aWZmIGNvbmZpZ3VyZSBzY3JpcHQuLi4iCisgICAgICAgb2xkZGlyPWBwd2RgCitAQCAtMTA2OSw2ICsxMDcwLDEwIEBAIGlmIHRlc3QgJFNIQVJFX0xJQlRJRkYgLWVxIDA7IHRoZW4KKyAgICAgICBjZCAiJG9sZGRpciIKKyAgICAgICBlY2hvCisgICAgICAgZWNobyAiQ29udGludWluZyB3aXRoIEdob3N0c2NyaXB0IGNvbmZpZ3VyYXRpb24uLi4iCisrICAgIGVsc2UKKysgICAgICBBQ19NU0dfTk9USUNFKFtDb3VsZCBub3QgZmluZCBsb2NhbCBjb3B5IG9mIGxpYnRpZmYuCisrRGlzYWJsaW5nIHRpZmYgb3V0cHV0IGRldmljZXMuXSkKKysgICAgZmkKKyBmaQorIAorIEFDX1NVQlNUKFNIQVJFX0xJQlRJRkYpCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvaTU4Ni9vYmphcmNoLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9pNTg2L29iamFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODE3YjdhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvaTU4Ni9vYmphcmNoLmgKQEAgLTAsMCArMSw0MSBAQAorLyogUGFyYW1ldGVycyBkZXJpdmVkIGZyb20gbWFjaGluZSBhbmQgY29tcGlsZXIgYXJjaGl0ZWN0dXJlLiAqLworLyogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkgZ2VuYXJjaC5jLiAqLworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfQUxJR05fU0hPUlRfTU9EIDIKKyNkZWZpbmUgQVJDSF9BTElHTl9JTlRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9MT05HX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fUFRSX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fRkxPQVRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9ET1VCTEVfTU9EIDQKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBzaXplcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9DSEFSIDAKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9TSE9SVCAxCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfSU5UIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HX0xPTkcgMworI2RlZmluZSBBUkNIX1NJWkVPRl9HWF9DT0xPUl9JTkRFWCA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX1BUUiA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgQVJDSF9GTE9BVF9NQU5USVNTQV9CSVRTIDI0CisjZGVmaW5lIEFSQ0hfRE9VQkxFX01BTlRJU1NBX0JJVFMgNTMKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFVuc2lnbmVkIG1heCB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTUFYX1VDSEFSICgodW5zaWduZWQgY2hhcikweGZmICsgKHVuc2lnbmVkIGNoYXIpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVVNIT1JUICgodW5zaWduZWQgc2hvcnQpMHhmZmZmICsgKHVuc2lnbmVkIHNob3J0KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VJTlQgKCh1bnNpZ25lZCBpbnQpfjAgKyAodW5zaWduZWQgaW50KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VMT05HICgodW5zaWduZWQgbG9uZyl+MEwgKyAodW5zaWduZWQgbG9uZykwKQorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gTWlzY2VsbGFuZW91cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9JU19CSUdfRU5ESUFOIDAKKyNkZWZpbmUgQVJDSF9QVFJTX0FSRV9TSUdORUQgMAorI2RlZmluZSBBUkNIX0ZMT0FUU19BUkVfSUVFRSAxCisjZGVmaW5lIEFSQ0hfQVJJVEhfUlNISUZUIDIKKyNkZWZpbmUgQVJDSF9ESVZfTkVHX1BPU19UUlVOQ0FURVMgMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9pNjg2IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvaTY4NgpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi44N2FhY2E1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvaTY4NgpAQCAtMCwwICsxIEBACitpNTg2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWljcm9ibGF6ZWViL29iamFyY2guaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pY3JvYmxhemVlYi9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMyMzJmZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pY3JvYmxhemVlYi9vYmphcmNoLmgKQEAgLTAsMCArMSw0MCBAQAorLyogUGFyYW1ldGVycyBkZXJpdmVkIGZyb20gbWFjaGluZSBhbmQgY29tcGlsZXIgYXJjaGl0ZWN0dXJlLiAqLworLyogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkgZ2VuYXJjaC5jLiAqLworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfQUxJR05fU0hPUlRfTU9EIDIKKyNkZWZpbmUgQVJDSF9BTElHTl9JTlRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9MT05HX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fUFRSX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fRkxPQVRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9ET1VCTEVfTU9EIDQKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBzaXplcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9DSEFSIDAKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9TSE9SVCAxCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfSU5UIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HX0xPTkcgMworI2RlZmluZSBBUkNIX1NJWkVPRl9HWF9DT0xPUl9JTkRFWCA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX1BUUiA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgQVJDSF9GTE9BVF9NQU5USVNTQV9CSVRTIDI0CisjZGVmaW5lIEFSQ0hfRE9VQkxFX01BTlRJU1NBX0JJVFMgNTMKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFVuc2lnbmVkIG1heCB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTUFYX1VDSEFSICgodW5zaWduZWQgY2hhcikweGZmICsgKHVuc2lnbmVkIGNoYXIpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVVNIT1JUICgodW5zaWduZWQgc2hvcnQpMHhmZmZmICsgKHVuc2lnbmVkIHNob3J0KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VJTlQgKCh1bnNpZ25lZCBpbnQpfjAgKyAodW5zaWduZWQgaW50KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VMT05HICgodW5zaWduZWQgbG9uZyl+MEwgKyAodW5zaWduZWQgbG9uZykwKQorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gTWlzY2VsbGFuZW91cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9JU19CSUdfRU5ESUFOIDEKKyNkZWZpbmUgQVJDSF9QVFJTX0FSRV9TSUdORUQgMAorI2RlZmluZSBBUkNIX0ZMT0FUU19BUkVfSUVFRSAxCisjZGVmaW5lIEFSQ0hfQVJJVEhfUlNISUZUIDIKKyNkZWZpbmUgQVJDSF9ESVZfTkVHX1BPU19UUlVOQ0FURVMgMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWljcm9ibGF6ZWVsL29iamFyY2guaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pY3JvYmxhemVlbC9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VjODEwMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pY3JvYmxhemVlbC9vYmphcmNoLmgKQEAgLTAsMCArMSw0MCBAQAorLyogUGFyYW1ldGVycyBkZXJpdmVkIGZyb20gbWFjaGluZSBhbmQgY29tcGlsZXIgYXJjaGl0ZWN0dXJlLiAqLworLyogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkgZ2VuYXJjaC5jLiAqLworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfQUxJR05fU0hPUlRfTU9EIDIKKyNkZWZpbmUgQVJDSF9BTElHTl9JTlRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9MT05HX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fUFRSX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fRkxPQVRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9ET1VCTEVfTU9EIDQKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBzaXplcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9DSEFSIDAKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9TSE9SVCAxCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfSU5UIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HX0xPTkcgMworI2RlZmluZSBBUkNIX1NJWkVPRl9HWF9DT0xPUl9JTkRFWCA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX1BUUiA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgQVJDSF9GTE9BVF9NQU5USVNTQV9CSVRTIDI0CisjZGVmaW5lIEFSQ0hfRE9VQkxFX01BTlRJU1NBX0JJVFMgNTMKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFVuc2lnbmVkIG1heCB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTUFYX1VDSEFSICgodW5zaWduZWQgY2hhcikweGZmICsgKHVuc2lnbmVkIGNoYXIpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVVNIT1JUICgodW5zaWduZWQgc2hvcnQpMHhmZmZmICsgKHVuc2lnbmVkIHNob3J0KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VJTlQgKCh1bnNpZ25lZCBpbnQpfjAgKyAodW5zaWduZWQgaW50KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VMT05HICgodW5zaWduZWQgbG9uZyl+MEwgKyAodW5zaWduZWQgbG9uZykwKQorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gTWlzY2VsbGFuZW91cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9JU19CSUdfRU5ESUFOIDAKKyNkZWZpbmUgQVJDSF9QVFJTX0FSRV9TSUdORUQgMAorI2RlZmluZSBBUkNIX0ZMT0FUU19BUkVfSUVFRSAxCisjZGVmaW5lIEFSQ0hfQVJJVEhfUlNISUZUIDIKKyNkZWZpbmUgQVJDSF9ESVZfTkVHX1BPU19UUlVOQ0FURVMgMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwcy9vYmphcmNoLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzL29iamFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGI2MzdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwcy9vYmphcmNoLmgKQEAgLTAsMCArMSw0MCBAQAorLyogUGFyYW1ldGVycyBkZXJpdmVkIGZyb20gbWFjaGluZSBhbmQgY29tcGlsZXIgYXJjaGl0ZWN0dXJlLiAqLworLyogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkgZ2VuYXJjaC5jLiAqLworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfQUxJR05fU0hPUlRfTU9EIDIKKyNkZWZpbmUgQVJDSF9BTElHTl9JTlRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9MT05HX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fUFRSX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fRkxPQVRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9ET1VCTEVfTU9EIDgKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBzaXplcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9DSEFSIDAKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9TSE9SVCAxCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfSU5UIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HX0xPTkcgMworI2RlZmluZSBBUkNIX1NJWkVPRl9HWF9DT0xPUl9JTkRFWCA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX1BUUiA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgQVJDSF9GTE9BVF9NQU5USVNTQV9CSVRTIDI0CisjZGVmaW5lIEFSQ0hfRE9VQkxFX01BTlRJU1NBX0JJVFMgNTMKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFVuc2lnbmVkIG1heCB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTUFYX1VDSEFSICgodW5zaWduZWQgY2hhcikweGZmICsgKHVuc2lnbmVkIGNoYXIpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVVNIT1JUICgodW5zaWduZWQgc2hvcnQpMHhmZmZmICsgKHVuc2lnbmVkIHNob3J0KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VJTlQgKCh1bnNpZ25lZCBpbnQpfjAgKyAodW5zaWduZWQgaW50KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VMT05HICgodW5zaWduZWQgbG9uZyl+MEwgKyAodW5zaWduZWQgbG9uZykwKQorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gTWlzY2VsbGFuZW91cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9JU19CSUdfRU5ESUFOIDEKKyNkZWZpbmUgQVJDSF9QVFJTX0FSRV9TSUdORUQgMAorI2RlZmluZSBBUkNIX0ZMT0FUU19BUkVfSUVFRSAxCisjZGVmaW5lIEFSQ0hfQVJJVEhfUlNISUZUIDIKKyNkZWZpbmUgQVJDSF9ESVZfTkVHX1BPU19UUlVOQ0FURVMgMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0L29iamFyY2guaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHM2NC9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQwYTE2YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHM2NC9vYmphcmNoLmgKQEAgLTAsMCArMSw0MCBAQAorLyogUGFyYW1ldGVycyBkZXJpdmVkIGZyb20gbWFjaGluZSBhbmQgY29tcGlsZXIgYXJjaGl0ZWN0dXJlLiAqLworLyogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkgZ2VuYXJjaC5jLiAqLworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfQUxJR05fU0hPUlRfTU9EIDIKKyNkZWZpbmUgQVJDSF9BTElHTl9JTlRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9MT05HX01PRCA4CisjZGVmaW5lIEFSQ0hfQUxJR05fUFRSX01PRCA4CisjZGVmaW5lIEFSQ0hfQUxJR05fRkxPQVRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9ET1VCTEVfTU9EIDgKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBzaXplcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9DSEFSIDAKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9TSE9SVCAxCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfSU5UIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HIDMKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HX0xPTkcgMworI2RlZmluZSBBUkNIX1NJWkVPRl9HWF9DT0xPUl9JTkRFWCA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX1BUUiA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgQVJDSF9GTE9BVF9NQU5USVNTQV9CSVRTIDI0CisjZGVmaW5lIEFSQ0hfRE9VQkxFX01BTlRJU1NBX0JJVFMgNTMKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFVuc2lnbmVkIG1heCB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTUFYX1VDSEFSICgodW5zaWduZWQgY2hhcikweGZmICsgKHVuc2lnbmVkIGNoYXIpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVVNIT1JUICgodW5zaWduZWQgc2hvcnQpMHhmZmZmICsgKHVuc2lnbmVkIHNob3J0KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VJTlQgKCh1bnNpZ25lZCBpbnQpfjAgKyAodW5zaWduZWQgaW50KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VMT05HICgodW5zaWduZWQgbG9uZyl+MEwgKyAodW5zaWduZWQgbG9uZykwKQorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gTWlzY2VsbGFuZW91cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9JU19CSUdfRU5ESUFOIDEKKyNkZWZpbmUgQVJDSF9QVFJTX0FSRV9TSUdORUQgMAorI2RlZmluZSBBUkNIX0ZMT0FUU19BUkVfSUVFRSAxCisjZGVmaW5lIEFSQ0hfQVJJVEhfUlNISUZUIDIKKyNkZWZpbmUgQVJDSF9ESVZfTkVHX1BPU19UUlVOQ0FURVMgMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0ZWwvb2JqYXJjaC5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0ZWwvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzNjRlbC9vYmphcmNoLmgKQEAgLTAsMCArMSw0MCBAQAorLyogUGFyYW1ldGVycyBkZXJpdmVkIGZyb20gbWFjaGluZSBhbmQgY29tcGlsZXIgYXJjaGl0ZWN0dXJlLiAqLworLyogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkgZ2VuYXJjaC5jLiAqLworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfQUxJR05fU0hPUlRfTU9EIDIKKyNkZWZpbmUgQVJDSF9BTElHTl9JTlRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9MT05HX01PRCA4CisjZGVmaW5lIEFSQ0hfQUxJR05fUFRSX01PRCA4CisjZGVmaW5lIEFSQ0hfQUxJR05fRkxPQVRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9ET1VCTEVfTU9EIDgKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBzaXplcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9DSEFSIDAKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9TSE9SVCAxCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfSU5UIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HIDMKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HX0xPTkcgMworI2RlZmluZSBBUkNIX1NJWkVPRl9HWF9DT0xPUl9JTkRFWCA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX1BUUiA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgQVJDSF9GTE9BVF9NQU5USVNTQV9CSVRTIDI0CisjZGVmaW5lIEFSQ0hfRE9VQkxFX01BTlRJU1NBX0JJVFMgNTMKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFVuc2lnbmVkIG1heCB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTUFYX1VDSEFSICgodW5zaWduZWQgY2hhcikweGZmICsgKHVuc2lnbmVkIGNoYXIpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVVNIT1JUICgodW5zaWduZWQgc2hvcnQpMHhmZmZmICsgKHVuc2lnbmVkIHNob3J0KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VJTlQgKCh1bnNpZ25lZCBpbnQpfjAgKyAodW5zaWduZWQgaW50KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VMT05HICgodW5zaWduZWQgbG9uZyl+MEwgKyAodW5zaWduZWQgbG9uZykwKQorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gTWlzY2VsbGFuZW91cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9JU19CSUdfRU5ESUFOIDAKKyNkZWZpbmUgQVJDSF9QVFJTX0FSRV9TSUdORUQgMAorI2RlZmluZSBBUkNIX0ZMT0FUU19BUkVfSUVFRSAxCisjZGVmaW5lIEFSQ0hfQVJJVEhfUlNISUZUIDIKKyNkZWZpbmUgQVJDSF9ESVZfTkVHX1BPU19UUlVOQ0FURVMgMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0ZWxuMzIvb2JqYXJjaC5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0ZWxuMzIvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzNjRlbG4zMi9vYmphcmNoLmgKQEAgLTAsMCArMSw0MCBAQAorLyogUGFyYW1ldGVycyBkZXJpdmVkIGZyb20gbWFjaGluZSBhbmQgY29tcGlsZXIgYXJjaGl0ZWN0dXJlLiAqLworLyogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkgZ2VuYXJjaC5jLiAqLworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfQUxJR05fU0hPUlRfTU9EIDIKKyNkZWZpbmUgQVJDSF9BTElHTl9JTlRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9MT05HX01PRCA4CisjZGVmaW5lIEFSQ0hfQUxJR05fUFRSX01PRCA4CisjZGVmaW5lIEFSQ0hfQUxJR05fRkxPQVRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9ET1VCTEVfTU9EIDgKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBzaXplcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9DSEFSIDAKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9TSE9SVCAxCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfSU5UIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HIDMKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HX0xPTkcgMworI2RlZmluZSBBUkNIX1NJWkVPRl9HWF9DT0xPUl9JTkRFWCA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX1BUUiA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgQVJDSF9GTE9BVF9NQU5USVNTQV9CSVRTIDI0CisjZGVmaW5lIEFSQ0hfRE9VQkxFX01BTlRJU1NBX0JJVFMgNTMKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFVuc2lnbmVkIG1heCB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTUFYX1VDSEFSICgodW5zaWduZWQgY2hhcikweGZmICsgKHVuc2lnbmVkIGNoYXIpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVVNIT1JUICgodW5zaWduZWQgc2hvcnQpMHhmZmZmICsgKHVuc2lnbmVkIHNob3J0KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VJTlQgKCh1bnNpZ25lZCBpbnQpfjAgKyAodW5zaWduZWQgaW50KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VMT05HICgodW5zaWduZWQgbG9uZyl+MEwgKyAodW5zaWduZWQgbG9uZykwKQorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gTWlzY2VsbGFuZW91cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9JU19CSUdfRU5ESUFOIDAKKyNkZWZpbmUgQVJDSF9QVFJTX0FSRV9TSUdORUQgMAorI2RlZmluZSBBUkNIX0ZMT0FUU19BUkVfSUVFRSAxCisjZGVmaW5lIEFSQ0hfQVJJVEhfUlNISUZUIDIKKyNkZWZpbmUgQVJDSF9ESVZfTkVHX1BPU19UUlVOQ0FURVMgMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0bjMyL29iamFyY2guaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHM2NG4zMi9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQwYTE2YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHM2NG4zMi9vYmphcmNoLmgKQEAgLTAsMCArMSw0MCBAQAorLyogUGFyYW1ldGVycyBkZXJpdmVkIGZyb20gbWFjaGluZSBhbmQgY29tcGlsZXIgYXJjaGl0ZWN0dXJlLiAqLworLyogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkgZ2VuYXJjaC5jLiAqLworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfQUxJR05fU0hPUlRfTU9EIDIKKyNkZWZpbmUgQVJDSF9BTElHTl9JTlRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9MT05HX01PRCA4CisjZGVmaW5lIEFSQ0hfQUxJR05fUFRSX01PRCA4CisjZGVmaW5lIEFSQ0hfQUxJR05fRkxPQVRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9ET1VCTEVfTU9EIDgKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBzaXplcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9DSEFSIDAKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9TSE9SVCAxCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfSU5UIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HIDMKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HX0xPTkcgMworI2RlZmluZSBBUkNIX1NJWkVPRl9HWF9DT0xPUl9JTkRFWCA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX1BUUiA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgQVJDSF9GTE9BVF9NQU5USVNTQV9CSVRTIDI0CisjZGVmaW5lIEFSQ0hfRE9VQkxFX01BTlRJU1NBX0JJVFMgNTMKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFVuc2lnbmVkIG1heCB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTUFYX1VDSEFSICgodW5zaWduZWQgY2hhcikweGZmICsgKHVuc2lnbmVkIGNoYXIpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVVNIT1JUICgodW5zaWduZWQgc2hvcnQpMHhmZmZmICsgKHVuc2lnbmVkIHNob3J0KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VJTlQgKCh1bnNpZ25lZCBpbnQpfjAgKyAodW5zaWduZWQgaW50KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VMT05HICgodW5zaWduZWQgbG9uZyl+MEwgKyAodW5zaWduZWQgbG9uZykwKQorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gTWlzY2VsbGFuZW91cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9JU19CSUdfRU5ESUFOIDEKKyNkZWZpbmUgQVJDSF9QVFJTX0FSRV9TSUdORUQgMAorI2RlZmluZSBBUkNIX0ZMT0FUU19BUkVfSUVFRSAxCisjZGVmaW5lIEFSQ0hfQVJJVEhfUlNISUZUIDIKKyNkZWZpbmUgQVJDSF9ESVZfTkVHX1BPU19UUlVOQ0FURVMgMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwc2VsL29iamFyY2guaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHNlbC9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlmOTBkZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHNlbC9vYmphcmNoLmgKQEAgLTAsMCArMSw0MCBAQAorLyogUGFyYW1ldGVycyBkZXJpdmVkIGZyb20gbWFjaGluZSBhbmQgY29tcGlsZXIgYXJjaGl0ZWN0dXJlLiAqLworLyogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkgZ2VuYXJjaC5jLiAqLworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfQUxJR05fU0hPUlRfTU9EIDIKKyNkZWZpbmUgQVJDSF9BTElHTl9JTlRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9MT05HX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fUFRSX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fRkxPQVRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9ET1VCTEVfTU9EIDgKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBzaXplcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9DSEFSIDAKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9TSE9SVCAxCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfSU5UIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HX0xPTkcgMworI2RlZmluZSBBUkNIX1NJWkVPRl9HWF9DT0xPUl9JTkRFWCA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX1BUUiA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgQVJDSF9GTE9BVF9NQU5USVNTQV9CSVRTIDI0CisjZGVmaW5lIEFSQ0hfRE9VQkxFX01BTlRJU1NBX0JJVFMgNTMKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFVuc2lnbmVkIG1heCB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTUFYX1VDSEFSICgodW5zaWduZWQgY2hhcikweGZmICsgKHVuc2lnbmVkIGNoYXIpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVVNIT1JUICgodW5zaWduZWQgc2hvcnQpMHhmZmZmICsgKHVuc2lnbmVkIHNob3J0KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VJTlQgKCh1bnNpZ25lZCBpbnQpfjAgKyAodW5zaWduZWQgaW50KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VMT05HICgodW5zaWduZWQgbG9uZyl+MEwgKyAodW5zaWduZWQgbG9uZykwKQorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gTWlzY2VsbGFuZW91cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9JU19CSUdfRU5ESUFOIDAKKyNkZWZpbmUgQVJDSF9QVFJTX0FSRV9TSUdORUQgMAorI2RlZmluZSBBUkNIX0ZMT0FUU19BUkVfSUVFRSAxCisjZGVmaW5lIEFSQ0hfQVJJVEhfUlNISUZUIDIKKyNkZWZpbmUgQVJDSF9ESVZfTkVHX1BPU19UUlVOQ0FURVMgMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvcG93ZXJwYy9vYmphcmNoLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9wb3dlcnBjL29iamFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTkwOTdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvcG93ZXJwYy9vYmphcmNoLmgKQEAgLTAsMCArMSw0MCBAQAorLyogUGFyYW1ldGVycyBkZXJpdmVkIGZyb20gbWFjaGluZSBhbmQgY29tcGlsZXIgYXJjaGl0ZWN0dXJlLiAqLworLyogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkgZ2VuYXJjaC5jLiAqLworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfQUxJR05fU0hPUlRfTU9EIDIKKyNkZWZpbmUgQVJDSF9BTElHTl9JTlRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9MT05HX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fUFRSX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fRkxPQVRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9ET1VCTEVfTU9EIDgKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBzaXplcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9DSEFSIDAKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9TSE9SVCAxCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfSU5UIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HX0xPTkcgMworI2RlZmluZSBBUkNIX1NJWkVPRl9HWF9DT0xPUl9JTkRFWCA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX1BUUiA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgQVJDSF9GTE9BVF9NQU5USVNTQV9CSVRTIDI0CisjZGVmaW5lIEFSQ0hfRE9VQkxFX01BTlRJU1NBX0JJVFMgNTMKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFVuc2lnbmVkIG1heCB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTUFYX1VDSEFSICgodW5zaWduZWQgY2hhcikweGZmICsgKHVuc2lnbmVkIGNoYXIpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVVNIT1JUICgodW5zaWduZWQgc2hvcnQpMHhmZmZmICsgKHVuc2lnbmVkIHNob3J0KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VJTlQgKCh1bnNpZ25lZCBpbnQpfjAgKyAodW5zaWduZWQgaW50KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VMT05HICgodW5zaWduZWQgbG9uZyl+MEwgKyAodW5zaWduZWQgbG9uZykwKQorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gTWlzY2VsbGFuZW91cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9JU19CSUdfRU5ESUFOIDEKKyNkZWZpbmUgQVJDSF9QVFJTX0FSRV9TSUdORUQgMAorI2RlZmluZSBBUkNIX0ZMT0FUU19BUkVfSUVFRSAxCisjZGVmaW5lIEFSQ0hfQVJJVEhfUlNISUZUIDIKKyNkZWZpbmUgQVJDSF9ESVZfTkVHX1BPU19UUlVOQ0FURVMgMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvcG93ZXJwYzY0L29iamFyY2guaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L3Bvd2VycGM2NC9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQwYTE2YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L3Bvd2VycGM2NC9vYmphcmNoLmgKQEAgLTAsMCArMSw0MCBAQAorLyogUGFyYW1ldGVycyBkZXJpdmVkIGZyb20gbWFjaGluZSBhbmQgY29tcGlsZXIgYXJjaGl0ZWN0dXJlLiAqLworLyogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkgZ2VuYXJjaC5jLiAqLworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfQUxJR05fU0hPUlRfTU9EIDIKKyNkZWZpbmUgQVJDSF9BTElHTl9JTlRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9MT05HX01PRCA4CisjZGVmaW5lIEFSQ0hfQUxJR05fUFRSX01PRCA4CisjZGVmaW5lIEFSQ0hfQUxJR05fRkxPQVRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9ET1VCTEVfTU9EIDgKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBzaXplcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9DSEFSIDAKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9TSE9SVCAxCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfSU5UIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HIDMKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HX0xPTkcgMworI2RlZmluZSBBUkNIX1NJWkVPRl9HWF9DT0xPUl9JTkRFWCA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX1BUUiA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgQVJDSF9GTE9BVF9NQU5USVNTQV9CSVRTIDI0CisjZGVmaW5lIEFSQ0hfRE9VQkxFX01BTlRJU1NBX0JJVFMgNTMKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFVuc2lnbmVkIG1heCB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTUFYX1VDSEFSICgodW5zaWduZWQgY2hhcikweGZmICsgKHVuc2lnbmVkIGNoYXIpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVVNIT1JUICgodW5zaWduZWQgc2hvcnQpMHhmZmZmICsgKHVuc2lnbmVkIHNob3J0KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VJTlQgKCh1bnNpZ25lZCBpbnQpfjAgKyAodW5zaWduZWQgaW50KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VMT05HICgodW5zaWduZWQgbG9uZyl+MEwgKyAodW5zaWduZWQgbG9uZykwKQorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gTWlzY2VsbGFuZW91cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9JU19CSUdfRU5ESUFOIDEKKyNkZWZpbmUgQVJDSF9QVFJTX0FSRV9TSUdORUQgMAorI2RlZmluZSBBUkNIX0ZMT0FUU19BUkVfSUVFRSAxCisjZGVmaW5lIEFSQ0hfQVJJVEhfUlNISUZUIDIKKyNkZWZpbmUgQVJDSF9ESVZfTkVHX1BPU19UUlVOQ0FURVMgMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQveDg2LTY0L29iamFyY2guaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L3g4Ni02NC9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA1ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L3g4Ni02NC9vYmphcmNoLmgKQEAgLTAsMCArMSw0MCBAQAorLyogUGFyYW1ldGVycyBkZXJpdmVkIGZyb20gbWFjaGluZSBhbmQgY29tcGlsZXIgYXJjaGl0ZWN0dXJlLiAqLworLyogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkgZ2VuYXJjaC5jLiAqLworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfQUxJR05fU0hPUlRfTU9EIDIKKyNkZWZpbmUgQVJDSF9BTElHTl9JTlRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9MT05HX01PRCA4CisjZGVmaW5lIEFSQ0hfQUxJR05fUFRSX01PRCA4CisjZGVmaW5lIEFSQ0hfQUxJR05fRkxPQVRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9ET1VCTEVfTU9EIDgKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBzaXplcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9DSEFSIDAKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9TSE9SVCAxCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfSU5UIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HIDMKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HX0xPTkcgMworI2RlZmluZSBBUkNIX1NJWkVPRl9HWF9DT0xPUl9JTkRFWCA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX1BUUiA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgQVJDSF9GTE9BVF9NQU5USVNTQV9CSVRTIDI0CisjZGVmaW5lIEFSQ0hfRE9VQkxFX01BTlRJU1NBX0JJVFMgNTMKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFVuc2lnbmVkIG1heCB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTUFYX1VDSEFSICgodW5zaWduZWQgY2hhcikweGZmICsgKHVuc2lnbmVkIGNoYXIpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVVNIT1JUICgodW5zaWduZWQgc2hvcnQpMHhmZmZmICsgKHVuc2lnbmVkIHNob3J0KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VJTlQgKCh1bnNpZ25lZCBpbnQpfjAgKyAodW5zaWduZWQgaW50KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VMT05HICgodW5zaWduZWQgbG9uZyl+MEwgKyAodW5zaWduZWQgbG9uZykwKQorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gTWlzY2VsbGFuZW91cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9JU19CSUdfRU5ESUFOIDAKKyNkZWZpbmUgQVJDSF9QVFJTX0FSRV9TSUdORUQgMAorI2RlZmluZSBBUkNIX0ZMT0FUU19BUkVfSUVFRSAxCisjZGVmaW5lIEFSQ0hfQVJJVEhfUlNISUZUIDIKKyNkZWZpbmUgQVJDSF9ESVZfTkVHX1BPU19UUlVOQ0FURVMgMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHRfOS4xNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0XzkuMTYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM0YWNjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0XzkuMTYuYmIKQEAgLTAsMCArMSwxMDMgQEAKK1NVTU1BUlkgPSAiVGhlIEdQTCBHaG9zdHNjcmlwdCBQb3N0U2NyaXB0L1BERiBpbnRlcnByZXRlciIKK0RFU0NSSVBUSU9OID0gIkdob3N0c2NyaXB0IGlzIHVzZWQgZm9yIFBvc3RTY3JpcHQvUERGIHByZXZpZXcgYW5kIHByaW50aW5nLiAgVXN1YWxseSBhcyBcCithIGJhY2stZW5kIHRvIGEgcHJvZ3JhbSBzdWNoIGFzIGdob3N0dmlldywgaXQgY2FuIGRpc3BsYXkgUG9zdFNjcmlwdCBhbmQgUERGIFwKK2RvY3VtZW50cyBpbiBhbiBYMTEgZW52aXJvbm1lbnQuIFwKK1wKK0Z1cnRoZXJtb3JlLCBpdCBjYW4gcmVuZGVyIFBvc3RTY3JpcHQgYW5kIFBERiBmaWxlcyBhcyBncmFwaGljcyB0byBiZSBwcmludGVkIFwKK29uIG5vbi1Qb3N0U2NyaXB0IHByaW50ZXJzLiBTdXBwb3J0ZWQgcHJpbnRlcnMgaW5jbHVkZSBjb21tb24gXAorZG90LW1hdHJpeCwgaW5ramV0IGFuZCBsYXNlciBtb2RlbHMuIFwKKyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ2hvc3RzY3JpcHQuY29tIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9YjE3Y2VhNTQ3NDM0MzVhYjJhNTgxYzIzN2JlYTI5NGEiCisKK0RFUEVORFMgPSAiZ2hvc3RzY3JpcHQtbmF0aXZlIHRpZmYganBlZyBmb250Y29uZmlnIGN1cHMiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCisKK1NSQ19VUklfQkFTRSA9ICJodHRwOi8vZG93bmxvYWRzLmdob3N0c2NyaXB0LmNvbS9wdWJsaWMvZ2hvc3RzY3JpcHQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgICAgICBmaWxlOi8vZ2hvc3RzY3JpcHQtOS4xNS1wYXJhbGxlbC1tYWtlLnBhdGNoIFwKKyAgICAgICAgICAgICAgICBmaWxlOi8vZ2hvc3RzY3JpcHQtOS4xNi1XZXJyb3ItcmV0dXJuLXR5cGUucGF0Y2ggXAorIgorCitTUkNfVVJJID0gIiR7U1JDX1VSSV9CQVNFfSBcCisgICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC05LjAyLXByZXZlbnRfcmVjb21waWxpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ2hvc3RzY3JpcHQtOS4wMi1nZW5hcmNoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL29iamFyY2guaCBcCisgICAgICAgICAgIGZpbGU6Ly9jdXBzLW5vLWdjcnlwdC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSV9jbGFzcy1uYXRpdmUgPSAiJHtTUkNfVVJJX0JBU0V9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC1uYXRpdmUtZml4LWRpc2FibGUtc3lzdGVtLWxpYnRpZmYucGF0Y2ggXAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2Jhc2UtZ2VuaHQuYy1hZGQtYS1wcmVwcm9jZXNzb3ItZGVmaW5lLXRvLWFsbG93LWZvcGUucGF0Y2ggXAorICAgICAgICAgICAgICAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODI5MzE5MzI1YmJkYjgzZjVjODEzNzlhOGY4NmYzOGYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzQ2ZDc3MjgwY2NhOGFmZGQzZDRjMmMxMzg5ZTMzMmVkOWIwNjA1YmQxMDdiY2FhZTFkNzYxYjA2MWQxYTY4ZCIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC14IC0td2l0aC1zeXN0ZW0tbGlidGlmZiAtLXdpdGhvdXQtamJpZzJkZWMgXAorICAgICAgICAgICAgICAgIC0td2l0aC1mb250cGF0aD0ke2RhdGFkaXJ9L2ZvbnRzIFwKKyAgICAgICAgICAgICAgICAtLXdpdGhvdXQtbGliaWRuIC0td2l0aC1jdXBzLXNlcnZlcmJpbj0ke2V4ZWNfcHJlZml4fS9saWIvY3VwcyBcCisgICAgICAgICAgICAgICAgLS13aXRoLWN1cHMtZGF0YWRpcj0ke2RhdGFkaXJ9L2N1cHMgXAorICAgICAgICAgICAgICAgICR7QGJhc2VfY29uZGl0aW9uYWwoJ1NJVEVJTkZPX0VORElBTk5FU1MnLCAnbGUnLCAnLS1lbmFibGUtbGl0dGxlLWVuZGlhbicsICctLWVuYWJsZS1iaWctZW5kaWFuJywgZCl9IFwKKyAgICAgICAgICAgICAgICAiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfbWlwcyA9ICIgLS13aXRoLWxhcmdlX2NvbG9yX2luZGV4PTAiCitFWFRSQV9PRUNPTkZfYXBwZW5kX21pcHNlbCA9ICIgLS13aXRoLWxhcmdlX2NvbG9yX2luZGV4PTAiCisKKyMgRXhwbGljaXR5IGRpc2FibGUgbGlidGlmZiwgZm9udGNvbmZpZywKKyMgZnJlZXR5cGUsIGN1cHMgZm9yIGdob3N0c2NyaXB0LW5hdGl2ZQorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLXdpdGhvdXQteCAtLXdpdGgtc3lzdGVtLWxpYnRpZmY9bm8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtamJpZzJkZWMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGgtZm9udHBhdGg9JHtkYXRhZGlyfS9mb250cyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aG91dC1saWJpZG4gLS1kaXNhYmxlLWZvbnRjb25maWcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWRpc2FibGUtZnJlZXR5cGUgLS1kaXNhYmxlLWN1cHMiCisKKyMgVGhpcyBoYXMgYmVlbiBmaXhlZCB1cHN0cmVhbSBidXQgZm9yIG5vdyB3ZSBuZWVkIHRvIHN1YnZlcnQgdGhlIGNoZWNrIGZvciB0aW1lLmgKKyMgaHR0cDovL2J1Z3MuZ2hvc3RzY3JpcHQuY29tL3Nob3dfYnVnLmNnaT9pZD02OTI0NDMKKyMgaHR0cDovL2J1Z3MuZ2hvc3RzY3JpcHQuY29tL3Nob3dfYnVnLmNnaT9pZD02OTI0MjYKK0NGTEFHUyArPSAiLURIQVZFX1NZU19USU1FX0g9MSIKK0JVSUxEX0NGTEFHUyArPSAiLURIQVZFX1NZU19USU1FX0g9MSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCW1rZGlyIC1wIG9iagorCW1rZGlyIC1wIHNvb2JqCisJaWYgWyAtZSAke1dPUktESVJ9L29iamFyY2guaCBdOyB0aGVuCisJCWNwICR7V09SS0RJUn0vb2JqYXJjaC5oIG9iai9hcmNoLmgKKwlmaQorfQorCitkb19jb25maWd1cmVfYXBwZW5kICgpIHsKKwkjIGNvcHkgdG9vbHMgZnJvbSB0aGUgbmF0aXZlIGdob3N0c2NyaXB0IGJ1aWxkCisJaWYgWyAiJHtQTn0iICE9ICJnaG9zdHNjcmlwdC1uYXRpdmUiIF07IHRoZW4KKwkJbWtkaXIgLXAgb2JqL2F1eCBzb29iagorCQlmb3IgaSBpbiBnZW5hcmNoIGdlbmNvbmYgbWtyb21mcyBlY2hvZ3MgZ2VuZGV2IGdlbmh0OyBkbworCQkJY3AgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2dob3N0c2NyaXB0LSR7UFZ9LyRpIG9iai9hdXgvJGkKKwkJZG9uZQorCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICBta2RpciAtcCAke0R9JHtkYXRhZGlyfS9naG9zdHNjcmlwdC8ke1BWfS8KKyAgICBjcCAtciAke1N9L1Jlc291cmNlICR7RH0ke2RhdGFkaXJ9L2dob3N0c2NyaXB0LyR7UFZ9LworICAgIGNwIC1yICR7U30vaWNjcHJvZmlsZXMgJHtEfSR7ZGF0YWRpcn0vZ2hvc3RzY3JpcHQvJHtQVn0vCit9CisKK2RvX2NvbXBpbGVfY2xhc3MtbmF0aXZlICgpIHsKKyAgICBta2RpciAtcCBvYmoKKyAgICBmb3IgaSBpbiBnZW5hcmNoIGdlbmNvbmYgbWtyb21mcyBlY2hvZ3MgZ2VuZGV2IGdlbmh0OyBkbworICAgICAgICBvZV9ydW5tYWtlIG9iai9hdXgvJGkKKyAgICBkb25lCit9CisKK2RvX2luc3RhbGxfY2xhc3MtbmF0aXZlICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vZ2hvc3RzY3JpcHQtJHtQVn0KKyAgICBmb3IgaSBpbiBnZW5hcmNoIGdlbmNvbmYgbWtyb21mcyBlY2hvZ3MgZ2VuZGV2IGdlbmh0OyBkbworICAgICAgICBpbnN0YWxsIC1tIDc1NSBvYmovYXV4LyRpICR7RH0ke2JpbmRpcn0vZ2hvc3RzY3JpcHQtJHtQVn0vJGkKKyAgICBkb25lCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3BlcmYvZ3BlcmYuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3BlcmYvZ3BlcmYuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4Y2UyMzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncGVyZi9ncGVyZi5pbmMKQEAgLTAsMCArMSwyMiBAQAorREVTQ1JJUFRJT04gPSAiR05VIGdwZXJmIGlzIGEgcGVyZmVjdCBoYXNoIGZ1bmN0aW9uIGdlbmVyYXRvciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9ncGVyZiIKK1NVTU1BUlkgID0gIkdlbmVyYXRlIGEgcGVyZmVjdCBoYXNoIGZ1bmN0aW9uIGZyb20gYSBzZXQgb2Yga2V5d29yZHMiCitMSUNFTlNFICA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbWFpbi5jYztiZWdpbmxpbmU9ODtlbmRsaW5lPTE5O21kNT1kZWM4ZjYxMTg0NWQwNDczODdlZDU2YjViODVmYTk5YiIKKworU1JDX1VSSSAgPSAiJHtHTlVfTUlSUk9SfS9ncGVyZi9ncGVyZi0ke1BWfS50YXIuZ3oiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKKyMgYXV0b3JlY29uZiBjb3VsZG4ndCBmaW5kIGFjaW5jbHVkZS5tNCB3aGVuIHN0ZXBwaW5nIGludG8gc3ViZGlyZWN0b3J5LiBJbnN0ZWFkIG9mCisjIGR1cGxpY2F0aW5nIGFjaW5jbHVkZS5tNCBpbiBldmVyeSBzdWJkaXJlY3RvcnksIHVzZSBhYnNvbHV0ZSBpbmNsdWRlIHBhdGggdG8gYWNsb2NhbAorRVhUUkFfQVVUT1JFQ09ORiArPSAiIC1JICR7U30iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICAgICBpZiBbICEgLWUgJHtTfS9hY2luY2x1ZGUubTQgXTsgdGhlbgorICAgICAgICAgICAgICAgIGNhdCAke1N9L2FjbG9jYWwubTQgPiAke1N9L2FjaW5jbHVkZS5tNAorICAgICAgICBmaQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmXzMuMC4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3BlcmYvZ3BlcmZfMy4wLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcyODg2MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmXzMuMC4zLmJiCkBAIC0wLDAgKzEsMTAgQEAKK3JlcXVpcmUgZ3BlcmYuaW5jCisKK0xJQ0VOU0UgID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE1Zjg0YWJiMDA3MGFkZjhhMDkyNWQ3ZDUzNGI2ZTBhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9tYWluLmNjO2JlZ2lubGluZT04O2VuZGxpbmU9MTk7bWQ1PTcyYTMwMzRhMTllNzJmMDhlZTQ4ZWY4MjQ0YTEyMWZkIgorCitQUiA9ICJyMSIKKworU1JDX1VSSVttZDVzdW1dID0gImNjMjBlNTg5NzVhMzgwNzU0NDA0MjNjOGZiODVmZDAwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYzMjg3NTI3YzhkOWUyN2U4MDFjZjA4MDQ0MzZmMzQ5NGJkNTY5ZGIwNWQ0OWRjZGQyYTk0MmFlNzJmYTkwNTUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncGVyZi9ncGVyZl8zLjAuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmXzMuMC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MDAzZmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncGVyZi9ncGVyZl8zLjAuNC5iYgpAQCAtMCwwICsxLDUgQEAKK3JlcXVpcmUgZ3BlcmYuaW5jCisKKworU1JDX1VSSVttZDVzdW1dID0gImMxZjFkYjMyZmI2NTk4ZDZhOTNlNmU4ODc5NmE4NjMyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc2NzExMmEyMDQ0MDdlNjJkYmMzMTA2NjQ3Y2Y4MzllZDU0NGYzY2Y1ZDBmMDUyM2FhYTI1MDg2MjNhYWQ2M2UiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL01ha2V2YXJzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9NYWtldmFycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjA5ZjUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9NYWtldmFycwpAQCAtMCwwICsxLDI1IEBACisjIE1ha2VmaWxlIHZhcmlhYmxlcyBmb3IgUE8gZGlyZWN0b3J5IGluIGFueSBwYWNrYWdlIHVzaW5nIEdOVSBnZXR0ZXh0LgorCisjIFVzdWFsbHkgdGhlIG1lc3NhZ2UgZG9tYWluIGlzIHRoZSBzYW1lIGFzIHRoZSBwYWNrYWdlIG5hbWUuCitET01BSU4gPSAkKFBBQ0tBR0UpCisKKyMgVGhlc2UgdHdvIHZhcmlhYmxlcyBkZXBlbmQgb24gdGhlIGxvY2F0aW9uIG9mIHRoaXMgZGlyZWN0b3J5Lgorc3ViZGlyID0gcG8KK3RvcF9idWlsZGRpciA9IC4uCisKKyMgVGhlc2Ugb3B0aW9ucyBnZXQgcGFzc2VkIHRvIHhnZXR0ZXh0LgorWEdFVFRFWFRfT1BUSU9OUyA9IC0ta2V5d29yZD1fIC0ta2V5d29yZD1OXworCisjIFRoaXMgaXMgdGhlIGNvcHlyaWdodCBob2xkZXIgdGhhdCBnZXRzIGluc2VydGVkIGludG8gdGhlIGhlYWRlciBvZiB0aGUKKyMgJChET01BSU4pLnBvdCBmaWxlLiAgU2V0IHRoaXMgdG8gdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIHN1cnJvdW5kaW5nCisjIHBhY2thZ2UuICAoTm90ZSB0aGF0IHRoZSBtc2dzdHIgc3RyaW5ncywgZXh0cmFjdGVkIGZyb20gdGhlIHBhY2thZ2UncworIyBzb3VyY2VzLCBiZWxvbmcgdG8gdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIHBhY2thZ2UuKSAgVHJhbnNsYXRvcnMgYXJlCisjIGV4cGVjdGVkIHRvIHRyYW5zZmVyIHRoZSBjb3B5cmlnaHQgZm9yIHRoZWlyIHRyYW5zbGF0aW9ucyB0byB0aGlzIHBlcnNvbgorIyBvciBlbnRpdHksIG9yIHRvIGRpc2NsYWltIHRoZWlyIGNvcHlyaWdodC4gIFRoZSBlbXB0eSBzdHJpbmcgc3RhbmRzIGZvcgorIyB0aGUgcHVibGljIGRvbWFpbjsgaW4gdGhpcyBjYXNlIHRoZSB0cmFuc2xhdG9ycyBhcmUgZXhwZWN0ZWQgdG8gZGlzY2xhaW0KKyMgdGhlaXIgY29weXJpZ2h0LgorQ09QWVJJR0hUX0hPTERFUiA9IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgaXMgdGhlIGxpc3Qgb2YgbG9jYWxlIGNhdGVnb3JpZXMsIGJleW9uZCBMQ19NRVNTQUdFUywgZm9yIHdoaWNoIHRoZQorIyBtZXNzYWdlIGNhdGFsb2dzIHNoYWxsIGJlIHVzZWQuICBJdCBpcyB1c3VhbGx5IGVtcHR5LgorRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVMgPQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9maXgtZm9yLXRleGluZm8tNS4xLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9maXgtZm9yLXRleGluZm8tNS4xLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNDE0OWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2ZpeC1mb3ItdGV4aW5mby01LjEucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtQb2t5IFNwZWNpZmljIHRoaXMgaXMgZ3BsdjIgdmVyc2lvbl0KKworU2lnbmVkLW9mZi1ieSBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBncmVwLTIuNS4xYS9kb2MvZ3JlcC50ZXhpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3JlcC0yLjUuMWEub3JpZy9kb2MvZ3JlcC50ZXhpCisrKysgZ3JlcC0yLjUuMWEvZG9jL2dyZXAudGV4aQorQEAgLTI4OCw3ICsyODgsNyBAQCBUaGlzIHZlcnNpb24gbnVtYmVyIHNob3VsZCBiZSBpbmNsdWRlZCBpCisgUHJpbnQgYSB1c2FnZSBtZXNzYWdlIGJyaWVmbHkgc3VtbWFyaXppbmcgdGhlc2UgY29tbWFuZC1saW5lIG9wdGlvbnMKKyBhbmQgdGhlIGJ1Zy1yZXBvcnRpbmcgYWRkcmVzcywgdGhlbiBleGl0LgorIAorLUBpdGVteCAtLWJpbmFyeS1maWxlcz1AdmFye3R5cGV9CisrQGl0ZW0gLS1iaW5hcnktZmlsZXM9QHZhcnt0eXBlfQorIEBvcGluZGV4IC0tYmluYXJ5LWZpbGVzCisgQGNpbmRleCBiaW5hcnkgZmlsZXMKKyBJZiB0aGUgZmlyc3QgZmV3IGJ5dGVzIG9mIGEgZmlsZSBpbmRpY2F0ZSB0aGF0IHRoZSBmaWxlIGNvbnRhaW5zIGJpbmFyeQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9maXg2NC1pbnQtdG8tcG9pbnRlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZml4NjQtaW50LXRvLXBvaW50ZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I5MTUyMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZml4NjQtaW50LXRvLXBvaW50ZXIucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorQWx3YXlzIHVzZSBsb2NhbGUuaCBhcyBIQVZFX0xPQ0FMRV9IIGlzIG5vIGxvbmdlciBoYW5kbGVkIGJ5IC4vY29uZmlndXJlCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgWyBvbGQgdmVyc2lvbiB0aGF0IHdpbGwgbm90IGJlIG1haW50YWluZWQgXQorU2lnbmVkLW9mZi1ieTogQWxleCBEQU1JQU4gPGFsZXhhbmRydS5kYW1pYW5AaW50ZWwuY29tPgorCitkaWZmIC0tcmVjdXJzaXZlIC0tdW5pZmllZCBncmVwLTIuNS4xYS1vcmlnL2xpYi9oYXJkLWxvY2FsZS5jIGdyZXAtMi41LjFhL2xpYi9oYXJkLWxvY2FsZS5jCistLS0gZ3JlcC0yLjUuMWEtb3JpZy9saWIvaGFyZC1sb2NhbGUuYwkyMDAxLTAzLTA0IDA3OjMzOjEyLjAwMDAwMDAwMCArMDIwMAorKysrIGdyZXAtMi41LjFhL2xpYi9oYXJkLWxvY2FsZS5jCTIwMTMtMDMtMTEgMTc6MDU6NTIuMDg2NDQ0ODkxICswMjAwCitAQCAtMzgsOSArMzgsNyBAQAorICMgZW5kaWYKKyAjZW5kaWYKKyAKKy0jaWYgSEFWRV9MT0NBTEVfSAorICMgaW5jbHVkZSA8bG9jYWxlLmg+CistI2VuZGlmCisgCisgI2lmIEhBVkVfU1RSSU5HX0gKKyAjIGluY2x1ZGUgPHN0cmluZy5oPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9nZXR0ZXh0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9nZXR0ZXh0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NDYzMzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2dldHRleHQucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorRW5hYmxlIG9wZXJhdGlvbiB3aXRoIGxhdGVyIHZlcnNpb25zIG9mIGdldHRleHQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorUlAgMjAxMi8xMC8xOQorCitJbmRleDogZ3JlcC0yLjUuMWEvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3JlcC0yLjUuMWEub3JpZy9jb25maWd1cmUuaW4JMjAxMi0xMC0xOSAxMjo1Nzo1MS42NDY5NzAyMDQgKzAwMDAKKysrKyBncmVwLTIuNS4xYS9jb25maWd1cmUuaW4JMjAxMi0xMC0xOSAxMjo1OTo0OS45NDY5Njg4MDMgKzAwMDAKK0BAIC0xNDAsNCArMTQwLDQgQEAKKyAJQUNfQ0hFQ0tfTElCKHBjcmUsIHBjcmVfZXhlYykKKyBmaQorIAorLUFDX09VVFBVVChNYWtlZmlsZSBsaWIvTWFrZWZpbGUgbGliL3Bvc2l4L01ha2VmaWxlIHNyYy9NYWtlZmlsZSB0ZXN0cy9NYWtlZmlsZSBwby9NYWtlZmlsZS5pbiBpbnRsL01ha2VmaWxlIGRvYy9NYWtlZmlsZSBtNC9NYWtlZmlsZSB2bXMvTWFrZWZpbGUgYm9vdHN0cmFwL01ha2VmaWxlLCBbc2VkIC1lICIvUE9URklMRVMgPS9yIHBvL1BPVEZJTEVTIiBwby9NYWtlZmlsZS5pbiA+IHBvL01ha2VmaWxlOyBlY2hvIHRpbWVzdGFtcCA+IHN0YW1wLWhdKQorK0FDX09VVFBVVChNYWtlZmlsZSBsaWIvTWFrZWZpbGUgbGliL3Bvc2l4L01ha2VmaWxlIHNyYy9NYWtlZmlsZSB0ZXN0cy9NYWtlZmlsZSBwby9NYWtlZmlsZS5pbiBpbnRsL01ha2VmaWxlIGRvYy9NYWtlZmlsZSBtNC9NYWtlZmlsZSB2bXMvTWFrZWZpbGUgYm9vdHN0cmFwL01ha2VmaWxlLCBbZWNobyB0aW1lc3RhbXAgPiBzdGFtcC1oXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcC1DVkUtMjAxMi01NjY3LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9ncmVwLUNWRS0yMDEyLTU2NjcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU5ZDA2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcC1DVkUtMjAxMi01NjY3LnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1RoZSBwYXRjaCB0byBmaXggQ1ZFLTIwMTItNTY2NworUmVmZXJlbmNlOiBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vYXR0YWNobWVudC5jZ2k/aWQ9Njg2NjA1JmFjdGlvbj1kaWZmCisKK011bHRpcGxlIGludGVnZXIgb3ZlcmZsb3dzIGluIEdOVSBHcmVwIGJlZm9yZSAyLjExIG1pZ2h0IGFsbG93Citjb250ZXh0LWRlcGVuZGVudCBhdHRhY2tlcnMgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZSB2aWEgdmVjdG9ycworaW52b2x2aW5nIGEgbG9uZyBpbnB1dCBsaW5lIHRoYXQgdHJpZ2dlcnMgYSBoZWFwLWJhc2VkIGJ1ZmZlciBvdmVyZmxvdy4KKworaHR0cDovL3dlYi5udmQubmlzdC5nb3Yvdmlldy92dWxuL2RldGFpbD92dWxuSWQ9Q1ZFLTIwMTItNTY2NworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXQorVGhpcyB2ZXJzaW9uIG9mIEdOVSBHcmVwIGhhcyBiZWVuIGFiYW5kb25lZCB1cHN0cmVhbSBhbmQgdGhleSBhcmUgbm8gbG9uZ2VyCithY2NlcHRpbmcgcGF0Y2hlcy4gIFRoaXMgaXMgbm90IGEgYmFja3BvcnQuCisKK1NpZ25lZC1vZmYtYnkgTWluZyBMaXUgPG1pbmcubGl1QHdpbmRyaXZlci5jb20+CistLS0KKyBncmVwLmMgfCAgICA3ICsrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCistLS0gYS9zcmMvZ3JlcC5jCTIwMTMtMDUtMTUgMTM6Mzk6MzMuMzU5MTkxNzY5ICswODAwCisrKysgYS9zcmMvZ3JlcC5jCTIwMTMtMDUtMTUgMTM6NTA6MjIuNjA5MTkxODgyICswODAwCitAQCAtMzA2LDYgKzMwNiwxMSBAQCBmaWxsYnVmIChzaXplX3Qgc2F2ZSwgc3RydWN0IHN0YXRzIGNvbnN0CisgICBpbnQgY2MgPSAxOworICAgY2hhciAqcmVhZGJ1ZjsKKyAgIHNpemVfdCByZWFkc2l6ZTsKKysgIGNvbnN0IHNpemVfdCBtYXhfc2F2ZSA9IElOVF9NQVggLyAyOworKworKyAgLyogTGltaXQgdGhlIGFtb3VudCBvZiBzYXZlZCBkYXRhIHRvIElOVF9NQVggdG8gZml4IENWRS0yMDEyLTU2NjcgKi8KKysgIGlmIChzYXZlID4gbWF4X3NhdmUpCisrICAgICBlcnJvciAoMiwgMCwgXygibGluZSB0b28gbG9uZyIpKTsKKyAKKyAgIC8qIE9mZnNldCBmcm9tIHN0YXJ0IG9mIGJ1ZmZlciB0byBzdGFydCBvZiBvbGQgc3R1ZmYKKyAgICAgIHRoYXQgd2Ugd2FudCB0byBzYXZlLiAgKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcC1lZ3JlcC1mZ3JlcC1GaXgtTFNCLU5HLWNhc2VzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9ncmVwLWVncmVwLWZncmVwLUZpeC1MU0ItTkctY2FzZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI3ZWU1NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcC1lZ3JlcC1mZ3JlcC1GaXgtTFNCLU5HLWNhc2VzLnBhdGNoCkBAIC0wLDAgKzEsMTM0MiBAQAorRnJvbSBjODg0ZGQxMmVjMDYyNTY5MzM1NzAyODQ4ZmM1ZjI5ZjQzNmMyOGZhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGkgeGluIDxsaXhpbi5mbnN0QGNuLmZ1aml0c3UuY29tPgorRGF0ZTogTW9uLCAyNSBNYXkgMjAxNSAxMDoxNTo1NyArMDkwMAorU3ViamVjdDogW1BBVENIXSBncmVwIGVncmVwIGZncmVwOiBGaXggTFNCIE5HIGNhc2VzLgorCitUaGUgTFNCIGNvcmUgdGVzdCByZXF1aXJlcyBncmVwIGVncmVwIGFuZCBmZ3JlcCBjYW4KK3BlcmZvcm0gcGF0dGVybiBtYXRjaGluZyBpbiBzZWFyY2hlcyB3aXRob3V0IHJlZ2FyZAordG8gY2FzZSBpZiAtaSBvcHRpb24gaXMgc3BlY2lmaWVkLgorCitVcHN0cmVhbS1TdGF0dXM6IGJhY2twb3J0LgorCitTaWduZWQtb2ZmLWJ5OiBMaSBYaW4gPGxpeGluLmZuc3RAY24uZnVqaXRzdS5jb20+CistLS0KKyBsaWIvcG9zaXgvcmVnZXguaCB8ICAgNCArCisgc3JjL2RmYS5jICAgICAgICAgfCAgMjIgKy0KKyBzcmMvZ3JlcC5jICAgICAgICB8ICA5NiArKysrLS0tCisgc3JjL3NlYXJjaC5jICAgICAgfCA4MzMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCisgNCBmaWxlcyBjaGFuZ2VkLCA3NjggaW5zZXJ0aW9ucygrKSwgMTg3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL3Bvc2l4L3JlZ2V4LmggYi9saWIvcG9zaXgvcmVnZXguaAoraW5kZXggNjNjMmZlZi4uN2JiMmIwZSAxMDA2NDQKKy0tLSBhL2xpYi9wb3NpeC9yZWdleC5oCisrKysgYi9saWIvcG9zaXgvcmVnZXguaAorQEAgLTEwOSw2ICsxMDksMTAgQEAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCByZWdfc3ludGF4X3Q7CisgICAgSWYgbm90IHNldCwgXHssIFx9LCB7LCBhbmQgfSBhcmUgbGl0ZXJhbHMuICAqLworICNkZWZpbmUgUkVfSU5URVJWQUxTIChSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUgPDwgMSkKKyAKKysvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gaWdub3JlIGNhc2Ugd2hlbiBtYXRjaGluZy4KKysgICBJZiBub3Qgc2V0LCB0aGVuIGNhc2UgaXMgc2lnbmlmaWNhbnQuICAqLworKyNkZWZpbmUgUkVfSUNBU0UgKFJFX0lOVkFMSURfSU5URVJWQUxfT1JEIDw8IDEpCisrCisgLyogSWYgdGhpcyBiaXQgaXMgc2V0LCArLCA/IGFuZCB8IGFyZW4ndCByZWNvZ25pemVkIGFzIG9wZXJhdG9ycy4KKyAgICBJZiBub3Qgc2V0LCB0aGV5IGFyZS4gICovCisgI2RlZmluZSBSRV9MSU1JVEVEX09QUyAoUkVfSU5URVJWQUxTIDw8IDEpCitkaWZmIC0tZ2l0IGEvc3JjL2RmYS5jIGIvc3JjL2RmYS5jCitpbmRleCA1OTBiZmE3Li4yN2M4NzZhIDEwMDY0NAorLS0tIGEvc3JjL2RmYS5jCisrKysgYi9zcmMvZGZhLmMKK0BAIC00MTQsNyArNDE0LDcgQEAgdXBkYXRlX21iX2xlbl9pbmRleCAodW5zaWduZWQgY2hhciBjb25zdCAqcCwgaW50IGxlbikKKyAKKyAvKiBUaGlzIGZ1bmN0aW9uIGZldGNoIGEgd2lkZSBjaGFyYWN0ZXIsIGFuZCB1cGRhdGUgY3VyX21iX2xlbiwKKyAgICB1c2VkIG9ubHkgaWYgdGhlIGN1cnJlbnQgbG9jYWxlIGlzIGEgbXVsdGlieXRlIGVudmlyb25tZW50LiAgKi8KKy1zdGF0aWMgd2NoYXJfdAorK3N0YXRpYyB3aW50X3QKKyBmZXRjaF93YyAoY2hhciBjb25zdCAqZW9mZXJyKQorIHsKKyAgIHdjaGFyX3Qgd2M7CitAQCAtNDIzLDcgKzQyMyw3IEBAIGZldGNoX3djIChjaGFyIGNvbnN0ICplb2ZlcnIpCisgICAgICAgaWYgKGVvZmVyciAhPSAwKQorIAlkZmFlcnJvciAoZW9mZXJyKTsKKyAgICAgICBlbHNlCistCXJldHVybiAtMTsKKysJcmV0dXJuIFdFT0Y7CisgICAgIH0KKyAKKyAgIGN1cl9tYl9sZW4gPSBtYnJ0b3djKCZ3YywgbGV4cHRyLCBsZXhsZWZ0LCAmbWJzKTsKK0BAIC00NTksNyArNDU5LDcgQEAgZmV0Y2hfd2MgKGNoYXIgY29uc3QgKmVvZmVycikKKyBzdGF0aWMgdm9pZAorIHBhcnNlX2JyYWNrZXRfZXhwX21iICgpCisgeworLSAgd2NoYXJfdCB3Yywgd2MxLCB3YzI7CisrICB3aW50X3Qgd2MsIHdjMSwgd2MyOworIAorICAgLyogV29yayBhcmVhIHRvIGJ1aWxkIGEgbWJfY2hhcl9jbGFzc2VzLiAgKi8KKyAgIHN0cnVjdCBtYl9jaGFyX2NsYXNzZXMgKndvcmtfbWJjOworQEAgLTQ5Niw3ICs0OTYsNyBAQCBwYXJzZV9icmFja2V0X2V4cF9tYiAoKQorICAgICB3b3JrX21iYy0+aW52ZXJ0ID0gMDsKKyAgIGRvCisgICAgIHsKKy0gICAgICB3YzEgPSAtMTsgLyogbWFyayB3YzEgaXMgbm90IGluaXRpYWxpemVkIi4gICovCisrICAgICAgd2MxID0gV0VPRjsgLyogbWFyayB3YzEgaXMgbm90IGluaXRpYWxpemVkIi4gICovCisgCisgICAgICAgLyogTm90ZSB0aGF0IGlmIHdlJ3JlIGxvb2tpbmcgYXQgc29tZSBvdGhlciBbOi4uLjpdIGNvbnN0cnVjdCwKKyAJIHdlIGp1c3QgdHJlYXQgaXQgYXMgYSBidW5jaCBvZiBvcmRpbmFyeSBjaGFyYWN0ZXJzLiAgV2UgY2FuIGRvCitAQCAtNTg2LDcgKzU4Niw3IEBAIHBhcnNlX2JyYWNrZXRfZXhwX21iICgpCisgCQkgICAgICB3b3JrX21iYy0+Y29sbF9lbGVtc1t3b3JrX21iYy0+bmNvbGxfZWxlbXMrK10gPSBlbGVtOworIAkJICAgIH0KKyAgCQl9CistCSAgICAgIHdjID0gLTE7CisrCSAgICAgIHdjMSA9IHdjID0gV0VPRjsKKyAJICAgIH0KKyAJICBlbHNlCisgCSAgICAvKiBXZSB0cmVhdCAnWycgYXMgYSBub3JtYWwgY2hhcmFjdGVyIGhlcmUuICAqLworQEAgLTYwMCw3ICs2MDAsNyBAQCBwYXJzZV9icmFja2V0X2V4cF9tYiAoKQorIAkgICAgd2MgPSBmZXRjaF93YygoIlVuYmFsYW5jZWQgWyIpKTsKKyAJfQorIAorLSAgICAgIGlmICh3YzEgPT0gLTEpCisrICAgICAgaWYgKHdjMSA9PSBXRU9GKQorIAl3YzEgPSBmZXRjaF93YyhfKCJVbmJhbGFuY2VkIFsiKSk7CisgCisgICAgICAgaWYgKHdjMSA9PSBMJy0nKQorQEAgLTYzMCwxNyArNjMwLDE3IEBAIHBhcnNlX2JyYWNrZXRfZXhwX21iICgpCisgCSAgICB9CisgCSAgUkVBTExPQ19JRl9ORUNFU1NBUlkod29ya19tYmMtPnJhbmdlX3N0cywgd2NoYXJfdCwKKyAJCQkgICAgICAgcmFuZ2Vfc3RzX2FsLCB3b3JrX21iYy0+bnJhbmdlcyArIDEpOworLQkgIHdvcmtfbWJjLT5yYW5nZV9zdHNbd29ya19tYmMtPm5yYW5nZXNdID0gd2M7CisrCSAgd29ya19tYmMtPnJhbmdlX3N0c1t3b3JrX21iYy0+bnJhbmdlc10gPSAod2NoYXJfdCl3YzsKKyAJICBSRUFMTE9DX0lGX05FQ0VTU0FSWSh3b3JrX21iYy0+cmFuZ2VfZW5kcywgd2NoYXJfdCwKKyAJCQkgICAgICAgcmFuZ2VfZW5kc19hbCwgd29ya19tYmMtPm5yYW5nZXMgKyAxKTsKKy0JICB3b3JrX21iYy0+cmFuZ2VfZW5kc1t3b3JrX21iYy0+bnJhbmdlcysrXSA9IHdjMjsKKysJICB3b3JrX21iYy0+cmFuZ2VfZW5kc1t3b3JrX21iYy0+bnJhbmdlcysrXSA9ICh3Y2hhcl90KXdjMjsKKyAJfQorLSAgICAgIGVsc2UgaWYgKHdjICE9IC0xKQorKyAgICAgIGVsc2UgaWYgKHdjICE9IFdFT0YpCisgCS8qIGJ1aWxkIG5vcm1hbCBjaGFyYWN0ZXJzLiAgKi8KKyAJeworIAkgIFJFQUxMT0NfSUZfTkVDRVNTQVJZKHdvcmtfbWJjLT5jaGFycywgd2NoYXJfdCwgY2hhcnNfYWwsCisgCQkJICAgICAgIHdvcmtfbWJjLT5uY2hhcnMgKyAxKTsKKy0JICB3b3JrX21iYy0+Y2hhcnNbd29ya19tYmMtPm5jaGFycysrXSA9IHdjOworKwkgIHdvcmtfbWJjLT5jaGFyc1t3b3JrX21iYy0+bmNoYXJzKytdID0gKHdjaGFyX3Qpd2M7CisgCX0KKyAgICAgfQorICAgd2hpbGUgKCh3YyA9IHdjMSkgIT0gTCddJyk7CitAQCAtMjU1Miw2ICsyNTUyLDggQEAgbWF0Y2hfbWJfY2hhcnNldCAoc3RydWN0IGRmYSAqZCwgaW50IHMsIHBvc2l0aW9uIHBvcywgaW50IGluZGV4KQorICAgICB9CisgCisgICAvKiBtYXRjaCB3aXRoIGEgY2hhcmFjdGVyPyAgKi8KKysgIGlmIChjYXNlX2ZvbGQpCisrICAgIHdjID0gdG93bG93ZXIgKHdjKTsKKyAgIGZvciAoaSA9IDA7IGk8d29ya19tYmMtPm5jaGFyczsgaSsrKQorICAgICB7CisgICAgICAgaWYgKHdjID09IHdvcmtfbWJjLT5jaGFyc1tpXSkKK2RpZmYgLS1naXQgYS9zcmMvZ3JlcC5jIGIvc3JjL2dyZXAuYworaW5kZXggMmZiMmZhYy4uM2ZkNGI0NyAxMDA2NDQKKy0tLSBhL3NyYy9ncmVwLmMKKysrKyBiL3NyYy9ncmVwLmMKK0BAIC0zMCw2ICszMCwxMiBAQAorICMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyAjIGluY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorICNlbmRpZgorKyNpZiBkZWZpbmVkIEhBVkVfV0NUWVBFX0ggJiYgZGVmaW5lZCBIQVZFX1dDSEFSX0ggJiYgZGVmaW5lZCBIQVZFX01CUlRPV0MKKysvKiBXZSBjYW4gaGFuZGxlIG11bHRpYnl0ZSBzdHJpbmcuICAqLworKyMgZGVmaW5lIE1CU19TVVBQT1JUCisrIyBpbmNsdWRlIDx3Y2hhci5oPgorKyMgaW5jbHVkZSA8d2N0eXBlLmg+CisrI2VuZGlmCisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgInN5c3RlbS5oIgorICNpbmNsdWRlICJnZXRvcHQuaCIKK0BAIC0yNTUsMTkgKzI2MSw2IEBAIHJlc2V0IChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGUsIHN0cnVjdCBzdGF0cyAqc3RhdHMpCisgICBidWZiZWdbLTFdID0gZW9sYnl0ZTsKKyAgIGJ1ZmRlc2MgPSBmZDsKKyAKKy0gIGlmIChmc3RhdCAoZmQsICZzdGF0cy0+c3RhdCkgIT0gMCkKKy0gICAgeworLSAgICAgIGVycm9yICgwLCBlcnJubywgImZzdGF0Iik7CistICAgICAgcmV0dXJuIDA7CistICAgIH0KKy0gIGlmIChkaXJlY3RvcmllcyA9PSBTS0lQX0RJUkVDVE9SSUVTICYmIFNfSVNESVIgKHN0YXRzLT5zdGF0LnN0X21vZGUpKQorLSAgICByZXR1cm4gMDsKKy0jaWZuZGVmIERKR1BQCistICBpZiAoZGV2aWNlcyA9PSBTS0lQX0RFVklDRVMgJiYgKFNfSVNDSFIoc3RhdHMtPnN0YXQuc3RfbW9kZSkgfHwgU19JU0JMSyhzdGF0cy0+c3RhdC5zdF9tb2RlKSB8fCBTX0lTU09DSyhzdGF0cy0+c3RhdC5zdF9tb2RlKSkpCistI2Vsc2UKKy0gIGlmIChkZXZpY2VzID09IFNLSVBfREVWSUNFUyAmJiAoU19JU0NIUihzdGF0cy0+c3RhdC5zdF9tb2RlKSB8fCBTX0lTQkxLKHN0YXRzLT5zdGF0LnN0X21vZGUpKSkKKy0jZW5kaWYKKy0gICAgcmV0dXJuIDA7CisgICBpZiAoU19JU1JFRyAoc3RhdHMtPnN0YXQuc3RfbW9kZSkpCisgICAgIHsKKyAgICAgICBpZiAoZmlsZSkKK0BAIC01NTgsMzMgKzU1MSw2IEBAIHBybGluZSAoY2hhciBjb25zdCAqYmVnLCBjaGFyIGNvbnN0ICpsaW0sIGludCBzZXApCisgICAgIHsKKyAgICAgICBzaXplX3QgbWF0Y2hfc2l6ZTsKKyAgICAgICBzaXplX3QgbWF0Y2hfb2Zmc2V0OworLSAgICAgIGlmKG1hdGNoX2ljYXNlKQorLSAgICAgICAgeworLQkgIC8qIFl1Y2ssIHRoaXMgaXMgdHJpY2t5ICovCistICAgICAgICAgIGNoYXIgKmJ1ZiA9IChjaGFyKikgeG1hbGxvYyAobGltIC0gYmVnKTsKKy0JICBjaGFyICppYmVnID0gYnVmOworLQkgIGNoYXIgKmlsaW0gPSBpYmVnICsgKGxpbSAtIGJlZyk7CistCSAgaW50IGk7CistCSAgZm9yIChpID0gMDsgaSA8IGxpbSAtIGJlZzsgaSsrKQorLQkgICAgaWJlZ1tpXSA9IHRvbG93ZXIgKGJlZ1tpXSk7CistCSAgd2hpbGUgKChtYXRjaF9vZmZzZXQgPSAoKmV4ZWN1dGUpIChpYmVnLCBpbGltLWliZWcsICZtYXRjaF9zaXplLCAxKSkKKy0JCSAhPSAoc2l6ZV90KSAtMSkKKy0JICAgIHsKKy0JICAgICAgY2hhciBjb25zdCAqYiA9IGJlZyArIG1hdGNoX29mZnNldDsKKy0JICAgICAgaWYgKGIgPT0gbGltKQorLQkJYnJlYWs7CistCSAgICAgIGZ3cml0ZSAoYmVnLCBzaXplb2YgKGNoYXIpLCBtYXRjaF9vZmZzZXQsIHN0ZG91dCk7CistCSAgICAgIHByaW50ZiAoIlwzM1slc20iLCBncmVwX2NvbG9yKTsKKy0JICAgICAgZndyaXRlIChiLCBzaXplb2YgKGNoYXIpLCBtYXRjaF9zaXplLCBzdGRvdXQpOworLQkgICAgICBmcHV0cyAoIlwzM1swMG0iLCBzdGRvdXQpOworLQkgICAgICBiZWcgPSBiICsgbWF0Y2hfc2l6ZTsKKy0JICAgICAgaWJlZyA9IGliZWcgKyBtYXRjaF9vZmZzZXQgKyBtYXRjaF9zaXplOworLQkgICAgfQorLQkgIGZ3cml0ZSAoYmVnLCAxLCBsaW0gLSBiZWcsIHN0ZG91dCk7CistCSAgZnJlZSAoYnVmKTsKKy0JICBsYXN0b3V0ID0gbGltOworLQkgIHJldHVybjsKKy0JfQorICAgICAgIHdoaWxlIChsaW0tYmVnICYmIChtYXRjaF9vZmZzZXQgPSAoKmV4ZWN1dGUpIChiZWcsIGxpbSAtIGJlZywgJm1hdGNoX3NpemUsIDEpKQorIAkgICAgICE9IChzaXplX3QpIC0xKQorIAl7CitAQCAtNjAxLDYgKzU2Nyw3IEBAIHBybGluZSAoY2hhciBjb25zdCAqYmVnLCBjaGFyIGNvbnN0ICpsaW0sIGludCBzZXApCisgCSAgZnB1dHMgKCJcMzNbMDBtIiwgc3Rkb3V0KTsKKyAJICBiZWcgPSBiICsgbWF0Y2hfc2l6ZTsKKyAJfQorKyAgICAgIGZwdXRzICgiXDMzW0siLCBzdGRvdXQpOworICAgICB9CisgICBmd3JpdGUgKGJlZywgMSwgbGltIC0gYmVnLCBzdGRvdXQpOworICAgaWYgKGZlcnJvciAoc3Rkb3V0KSkKK0BAIC02MjMsNyArNTkwLDcgQEAgcHJwZW5kaW5nIChjaGFyIGNvbnN0ICpsaW0pCisgICAgICAgc2l6ZV90IG1hdGNoX3NpemU7CisgICAgICAgLS1wZW5kaW5nOworICAgICAgIGlmIChvdXRsZWZ0CistCSAgfHwgKCgoKmV4ZWN1dGUpIChsYXN0b3V0LCBubCAtIGxhc3RvdXQsICZtYXRjaF9zaXplLCAwKSA9PSAoc2l6ZV90KSAtMSkKKysJICB8fCAoKCgqZXhlY3V0ZSkgKGxhc3RvdXQsIG5sICsgMSAtIGxhc3RvdXQsICZtYXRjaF9zaXplLCAwKSA9PSAoc2l6ZV90KSAtMSkKKyAJICAgICAgPT0gIW91dF9pbnZlcnQpKQorIAlwcmxpbmUgKGxhc3RvdXQsIG5sICsgMSwgJy0nKTsKKyAgICAgICBlbHNlCitAQCAtODk1LDYgKzg2MiwxOSBAQCBncmVwZmlsZSAoY2hhciBjb25zdCAqZmlsZSwgc3RydWN0IHN0YXRzICpzdGF0cykKKyAgICAgfQorICAgZWxzZQorICAgICB7CisrICAgICAgaWYgKHN0YXQgKGZpbGUsICZzdGF0cy0+c3RhdCkgIT0gMCkKKysgICAgICAgIHsKKysgICAgICAgICAgc3VwcHJlc3NpYmxlX2Vycm9yIChmaWxlLCBlcnJubyk7CisrICAgICAgICAgIHJldHVybiAxOworKyAgICAgICAgfQorKyAgICAgIGlmIChkaXJlY3RvcmllcyA9PSBTS0lQX0RJUkVDVE9SSUVTICYmIFNfSVNESVIgKHN0YXRzLT5zdGF0LnN0X21vZGUpKQorKyAgICAgICAgcmV0dXJuIDE7CisrI2lmbmRlZiBESkdQUAorKyAgICAgIGlmIChkZXZpY2VzID09IFNLSVBfREVWSUNFUyAmJiAoU19JU0NIUihzdGF0cy0+c3RhdC5zdF9tb2RlKSB8fCBTX0lTQkxLKHN0YXRzLT5zdGF0LnN0X21vZGUpIHx8IFNfSVNTT0NLKHN0YXRzLT5zdGF0LnN0X21vZGUpIHx8IFNfSVNGSUZPKHN0YXRzLT5zdGF0LnN0X21vZGUpKSkKKysjZWxzZQorKyAgICAgIGlmIChkZXZpY2VzID09IFNLSVBfREVWSUNFUyAmJiAoU19JU0NIUihzdGF0cy0+c3RhdC5zdF9tb2RlKSB8fCBTX0lTQkxLKHN0YXRzLT5zdGF0LnN0X21vZGUpKSkKKysjZW5kaWYKKysgICAgICAgIHJldHVybiAxOworICAgICAgIHdoaWxlICgoZGVzYyA9IG9wZW4gKGZpbGUsIE9fUkRPTkxZKSkgPCAwICYmIGVycm5vID09IEVJTlRSKQorIAljb250aW51ZTsKKyAKK0BAIC0xNjgxLDkgKzE2NjEsNiBAQCB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cbiIpKQorIAkgIG91dF9pbnZlcnQgXj0gMTsKKyAJICBtYXRjaF9saW5lcyA9IG1hdGNoX3dvcmRzID0gMDsKKyAJfQorLSAgICAgIGVsc2UKKy0JLyogU3RyaXAgdHJhaWxpbmcgbmV3bGluZS4gKi8KKy0gICAgICAgIC0ta2V5Y2M7CisgICAgIH0KKyAgIGVsc2UKKyAgICAgaWYgKG9wdGluZCA8IGFyZ2MpCitAQCAtMTY5Nyw2ICsxNjc0LDM3IEBAIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLlxuIikpCisgICBpZiAoIWluc3RhbGxfbWF0Y2hlciAobWF0Y2hlcikgJiYgIWluc3RhbGxfbWF0Y2hlciAoImRlZmF1bHQiKSkKKyAgICAgYWJvcnQgKCk7CisgCisrI2lmZGVmIE1CU19TVVBQT1JUCisrICBpZiAoTUJfQ1VSX01BWCAhPSAxICYmIG1hdGNoX2ljYXNlKQorKyAgICB7CisrICAgICAgd2NoYXJfdCB3YzsKKysgICAgICBtYnN0YXRlX3QgY3VyX3N0YXRlLCBwcmV2X3N0YXRlOworKyAgICAgIGludCBpLCBsZW4gPSBzdHJsZW4oa2V5cyk7CisrCisrICAgICAgbWVtc2V0KCZjdXJfc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysgICAgICBmb3IgKGkgPSAwOyBpIDw9IGxlbiA7KQorKwl7CisrCSAgc2l6ZV90IG1iY2xlbjsKKysJICBtYmNsZW4gPSBtYnJ0b3djKCZ3Yywga2V5cyArIGksIGxlbiAtIGksICZjdXJfc3RhdGUpOworKwkgIGlmIChtYmNsZW4gPT0gKHNpemVfdCkgLTEgfHwgbWJjbGVuID09IChzaXplX3QpIC0yIHx8IG1iY2xlbiA9PSAwKQorKwkgICAgeworKwkgICAgICAvKiBBbiBpbnZhbGlkIHNlcXVlbmNlLCBvciBhIHRydW5jYXRlZCBtdWx0aWJ5dGUgY2hhcmFjdGVyLgorKwkJIFdlIHRyZWF0IGl0IGFzIGEgc2luZ2xlYnl0ZSBjaGFyYWN0ZXIuICAqLworKwkgICAgICBtYmNsZW4gPSAxOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgaWYgKGlzd3VwcGVyKCh3aW50X3Qpd2MpKQorKwkJeworKwkJICB3YyA9IHRvd2xvd2VyKCh3aW50X3Qpd2MpOworKwkJICB3Y3J0b21iKGtleXMgKyBpLCB3YywgJmN1cl9zdGF0ZSk7CisrCQl9CisrCSAgICB9CisrCSAgaSArPSBtYmNsZW47CisrCX0KKysgICAgfQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKworICAgKCpjb21waWxlKShrZXlzLCBrZXljYyk7CisgCisgICBpZiAoKGFyZ2MgLSBvcHRpbmQgPiAxICYmICFub19maWxlbmFtZXMpIHx8IHdpdGhfZmlsZW5hbWVzKQorZGlmZiAtLWdpdCBhL3NyYy9zZWFyY2guYyBiL3NyYy9zZWFyY2guYworaW5kZXggN2JkMjMzZi4uM2M2YTQ4NSAxMDA2NDQKKy0tLSBhL3NyYy9zZWFyY2guYworKysrIGIvc3JjL3NlYXJjaC5jCitAQCAtMTgsOSArMTgsMTMgQEAKKyAKKyAvKiBXcml0dGVuIEF1Z3VzdCAxOTkyIGJ5IE1pa2UgSGFlcnRlbC4gKi8KKyAKKysjaWZuZGVmIF9HTlVfU09VUkNFCisrIyBkZWZpbmUgX0dOVV9TT1VSQ0UgMQorKyNlbmRpZgorICNpZmRlZiBIQVZFX0NPTkZJR19ICisgIyBpbmNsdWRlIDxjb25maWcuaD4KKyAjZW5kaWYKKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpZiBkZWZpbmVkIEhBVkVfV0NUWVBFX0ggJiYgZGVmaW5lZCBIQVZFX1dDSEFSX0ggJiYgZGVmaW5lZCBIQVZFX01CUlRPV0MKKyAvKiBXZSBjYW4gaGFuZGxlIG11bHRpYnl0ZSBzdHJpbmcuICAqLworQEAgLTMxLDcgKzM1LDcgQEAKKyAKKyAjaW5jbHVkZSAic3lzdGVtLmgiCisgI2luY2x1ZGUgImdyZXAuaCIKKy0jaW5jbHVkZSAicmVnZXguaCIKKysjaW5jbHVkZSA8cmVnZXguaD4KKyAjaW5jbHVkZSAiZGZhLmgiCisgI2luY2x1ZGUgImt3c2V0LmgiCisgI2luY2x1ZGUgImVycm9yLmgiCitAQCAtMzksNiArNDMsOSBAQAorICNpZmRlZiBIQVZFX0xJQlBDUkUKKyAjIGluY2x1ZGUgPHBjcmUuaD4KKyAjZW5kaWYKKysjaWZkZWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisrIyBpbmNsdWRlIDxsYW5naW5mby5oPgorKyNlbmRpZgorIAorICNkZWZpbmUgTkNIQVIgKFVDSEFSX01BWCArIDEpCisgCitAQCAtNzAsOSArNzcsMTAgQEAgc3RhdGljIGt3c2V0X3Qga3dzZXQ7CisgICAgY2FsbCB0aGUgcmVnZXhwIG1hdGNoZXIgYXQgYWxsLiAqLworIHN0YXRpYyBpbnQga3dzZXRfZXhhY3RfbWF0Y2hlczsKKyAKKy0jaWYgZGVmaW5lZChNQlNfU1VQUE9SVCkKKy1zdGF0aWMgY2hhciogY2hlY2tfbXVsdGlieXRlX3N0cmluZyBQQVJBTVMgKChjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplKSk7CistI2VuZGlmCisrLyogVVRGLTggZW5jb2RpbmcgYWxsb3dzIHNvbWUgb3B0aW1pemF0aW9ucyB0aGF0IHdlIGNhbid0IG90aGVyd2lzZQorKyAgIGFzc3VtZSBpbiBhIG11bHRpYnl0ZSBlbmNvZGluZy4gKi8KKytzdGF0aWMgaW50IHVzaW5nX3V0Zjg7CisrCisgc3RhdGljIHZvaWQga3dzaW5pdCBQQVJBTVMgKCh2b2lkKSk7Cisgc3RhdGljIHZvaWQga3dzbXVzdHMgUEFSQU1TICgodm9pZCkpOworIHN0YXRpYyB2b2lkIEdjb21waWxlIFBBUkFNUyAoKGNoYXIgY29uc3QgKiwgc2l6ZV90KSk7CitAQCAtODQsNiArOTIsMTUgQEAgc3RhdGljIHZvaWQgUGNvbXBpbGUgUEFSQU1TICgoY2hhciBjb25zdCAqLCBzaXplX3QgKSk7Cisgc3RhdGljIHNpemVfdCBQZXhlY3V0ZSBQQVJBTVMgKChjaGFyIGNvbnN0ICosIHNpemVfdCwgc2l6ZV90ICosIGludCkpOworIAorIHZvaWQKKytjaGVja191dGY4ICh2b2lkKQorK3sKKysjaWZkZWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisrICBpZiAoc3RyY21wIChubF9sYW5naW5mbyAoQ09ERVNFVCksICJVVEYtOCIpID09IDApCisrICAgIHVzaW5nX3V0ZjggPSAxOworKyNlbmRpZgorK30KKysKKyt2b2lkCisgZGZhZXJyb3IgKGNoYXIgY29uc3QgKm1lc2cpCisgeworICAgZXJyb3IgKDIsIDAsIG1lc2cpOworQEAgLTE0MSwzOCArMTU4LDYgQEAga3dzbXVzdHMgKHZvaWQpCisgICAgIH0KKyB9CisgCistI2lmZGVmIE1CU19TVVBQT1JUCistLyogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZSB0aGUgYXJyYXkgd2hpY2ggY29ycmVzcG9uZCB0byAiYnVmIi4KKy0gICBUaGVuIHRoaXMgY2hlY2sgbXVsdGlieXRlIHN0cmluZyBhbmQgbWFyayBvbiB0aGUgcG9zaXRpb25zIHdoaWNoCistICAgYXJlIG5vdCBzaW5nbGVieXRlIGNoYXJhY3RlciBub3IgdGhlIGZpcnN0IGJ5dGUgb2YgYSBtdWx0aWJ5dGUKKy0gICBjaGFyYWN0ZXIuICBDYWxsZXIgbXVzdCBmcmVlIHRoZSBhcnJheS4gICovCistc3RhdGljIGNoYXIqCistY2hlY2tfbXVsdGlieXRlX3N0cmluZyhjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplKQorLXsKKy0gIGNoYXIgKm1iX3Byb3BlcnRpZXMgPSBtYWxsb2Moc2l6ZSk7CistICBtYnN0YXRlX3QgY3VyX3N0YXRlOworLSAgaW50IGk7CistICBtZW1zZXQoJmN1cl9zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworLSAgbWVtc2V0KG1iX3Byb3BlcnRpZXMsIDAsIHNpemVvZihjaGFyKSpzaXplKTsKKy0gIGZvciAoaSA9IDA7IGkgPCBzaXplIDspCistICAgIHsKKy0gICAgICBzaXplX3QgbWJjbGVuOworLSAgICAgIG1iY2xlbiA9IG1icmxlbihidWYgKyBpLCBzaXplIC0gaSwgJmN1cl9zdGF0ZSk7CistCistICAgICAgaWYgKG1iY2xlbiA9PSAoc2l6ZV90KSAtMSB8fCBtYmNsZW4gPT0gKHNpemVfdCkgLTIgfHwgbWJjbGVuID09IDApCistCXsKKy0JICAvKiBBbiBpbnZhbGlkIHNlcXVlbmNlLCBvciBhIHRydW5jYXRlZCBtdWx0aWJ5dGUgY2hhcmFjdGVyLgorLQkgICAgIFdlIHRyZWF0IGl0IGFzIGEgc2luZ2xlYnl0ZSBjaGFyYWN0ZXIuICAqLworLQkgIG1iY2xlbiA9IDE7CistCX0KKy0gICAgICBtYl9wcm9wZXJ0aWVzW2ldID0gbWJjbGVuOworLSAgICAgIGkgKz0gbWJjbGVuOworLSAgICB9CistCistICByZXR1cm4gbWJfcHJvcGVydGllczsKKy19CistI2VuZGlmCistCisgc3RhdGljIHZvaWQKKyBHY29tcGlsZSAoY2hhciBjb25zdCAqcGF0dGVybiwgc2l6ZV90IHNpemUpCisgeworQEAgLTE4MSw3ICsxNjYsOCBAQCBHY29tcGlsZSAoY2hhciBjb25zdCAqcGF0dGVybiwgc2l6ZV90IHNpemUpCisgICBzaXplX3QgdG90YWwgPSBzaXplOworICAgY2hhciBjb25zdCAqbW90aWYgPSBwYXR0ZXJuOworIAorLSAgcmVfc2V0X3N5bnRheCAoUkVfU1lOVEFYX0dSRVAgfCBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUpOworKyAgY2hlY2tfdXRmOCAoKTsKKysgIHJlX3NldF9zeW50YXggKFJFX1NZTlRBWF9HUkVQIHwgUkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FIHwgKG1hdGNoX2ljYXNlID8gUkVfSUNBU0UgOiAwKSk7CisgICBkZmFzeW50YXggKFJFX1NZTlRBWF9HUkVQIHwgUkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FLCBtYXRjaF9pY2FzZSwgZW9sYnl0ZSk7CisgCisgICAvKiBGb3IgR05VIHJlZ2V4IGNvbXBpbGVyIHdlIGhhdmUgdG8gcGFzcyB0aGUgcGF0dGVybnMgc2VwYXJhdGVseSB0byBkZXRlY3QKK0BAIC0yMTgsNiArMjA0LDEwIEBAIEdjb21waWxlIChjaGFyIGNvbnN0ICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSkKKyAgICAgICBtb3RpZiA9IHNlcDsKKyAgICAgfSB3aGlsZSAoc2VwICYmIHRvdGFsICE9IDApOworIAorKyAgLyogU3RyaXAgdHJhaWxpbmcgbmV3bGluZS4gKi8KKysgIGlmIChzaXplICYmIHBhdHRlcm5bc2l6ZSAtIDFdID09ICdcbicpCisrICAgIHNpemUtLTsKKysKKyAgIC8qIEluIHRoZSBtYXRjaF93b3JkcyBhbmQgbWF0Y2hfbGluZXMgY2FzZXMsIHdlIHVzZSBhIGRpZmZlcmVudCBwYXR0ZXJuCisgICAgICBmb3IgdGhlIERGQSBtYXRjaGVyIHRoYXQgd2lsbCBxdWlja2x5IHRocm93IG91dCBjYXNlcyB0aGF0IHdvbid0IHdvcmsuCisgICAgICBUaGVuIGlmIERGQSBzdWNjZWVkcyB3ZSBkbyBzb21lIGhhaXJ5IHN0dWZmIHVzaW5nIHRoZSByZWdleCBtYXRjaGVyCitAQCAtMjMzLDcgKzIyMyw3IEBAIEdjb21waWxlIChjaGFyIGNvbnN0ICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSkKKyAgICAgICBzdGF0aWMgY2hhciBjb25zdCBsaW5lX2VuZFtdID0gIlxcKSQiOworICAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHdvcmRfYmVnW10gPSAiXFwoXlxcfFteWzphbG51bTpdX11cXClcXCgiOworICAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHdvcmRfZW5kW10gPSAiXFwpXFwoW15bOmFsbnVtOl1fXVxcfCRcXCkiOworLSAgICAgIGNoYXIgKm4gPSBtYWxsb2MgKHNpemVvZiB3b3JkX2JlZyAtIDEgKyBzaXplICsgc2l6ZW9mIHdvcmRfZW5kKTsKKysgICAgICBjaGFyICpuID0geG1hbGxvYyAoc2l6ZW9mIHdvcmRfYmVnIC0gMSArIHNpemUgKyBzaXplb2Ygd29yZF9lbmQpOworICAgICAgIHNpemVfdCBpOworICAgICAgIHN0cmNweSAobiwgbWF0Y2hfbGluZXMgPyBsaW5lX2JlZyA6IHdvcmRfYmVnKTsKKyAgICAgICBpID0gc3RybGVuIChuKTsKK0BAIC0yNTcsMTQgKzI0NywxNSBAQCBFY29tcGlsZSAoY2hhciBjb25zdCAqcGF0dGVybiwgc2l6ZV90IHNpemUpCisgICBzaXplX3QgdG90YWwgPSBzaXplOworICAgY2hhciBjb25zdCAqbW90aWYgPSBwYXR0ZXJuOworIAorKyAgY2hlY2tfdXRmOCAoKTsKKyAgIGlmIChzdHJjbXAgKG1hdGNoZXIsICJhd2siKSA9PSAwKQorICAgICB7CistICAgICAgcmVfc2V0X3N5bnRheCAoUkVfU1lOVEFYX0FXSyk7CisrICAgICAgcmVfc2V0X3N5bnRheCAoUkVfU1lOVEFYX0FXSyB8IChtYXRjaF9pY2FzZSA/IFJFX0lDQVNFIDogMCkpOworICAgICAgIGRmYXN5bnRheCAoUkVfU1lOVEFYX0FXSywgbWF0Y2hfaWNhc2UsIGVvbGJ5dGUpOworICAgICB9CisgICBlbHNlCisgICAgIHsKKy0gICAgICByZV9zZXRfc3ludGF4IChSRV9TWU5UQVhfUE9TSVhfRUdSRVApOworKyAgICAgIHJlX3NldF9zeW50YXggKFJFX1NZTlRBWF9QT1NJWF9FR1JFUCB8IChtYXRjaF9pY2FzZSA/IFJFX0lDQVNFIDogMCkpOworICAgICAgIGRmYXN5bnRheCAoUkVfU1lOVEFYX1BPU0lYX0VHUkVQLCBtYXRjaF9pY2FzZSwgZW9sYnl0ZSk7CisgICAgIH0KKyAKK0BAIC0zMDEsNiArMjkyLDEwIEBAIEVjb21waWxlIChjaGFyIGNvbnN0ICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSkKKyAgICAgICBtb3RpZiA9IHNlcDsKKyAgICAgfSB3aGlsZSAoc2VwICYmIHRvdGFsICE9IDApOworIAorKyAgLyogU3RyaXAgdHJhaWxpbmcgbmV3bGluZS4gKi8KKysgIGlmIChzaXplICYmIHBhdHRlcm5bc2l6ZSAtIDFdID09ICdcbicpCisrICAgIHNpemUtLTsKKysKKyAgIC8qIEluIHRoZSBtYXRjaF93b3JkcyBhbmQgbWF0Y2hfbGluZXMgY2FzZXMsIHdlIHVzZSBhIGRpZmZlcmVudCBwYXR0ZXJuCisgICAgICBmb3IgdGhlIERGQSBtYXRjaGVyIHRoYXQgd2lsbCBxdWlja2x5IHRocm93IG91dCBjYXNlcyB0aGF0IHdvbid0IHdvcmsuCisgICAgICBUaGVuIGlmIERGQSBzdWNjZWVkcyB3ZSBkbyBzb21lIGhhaXJ5IHN0dWZmIHVzaW5nIHRoZSByZWdleCBtYXRjaGVyCitAQCAtMzE2LDcgKzMxMSw3IEBAIEVjb21waWxlIChjaGFyIGNvbnN0ICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSkKKyAgICAgICBzdGF0aWMgY2hhciBjb25zdCBsaW5lX2VuZFtdID0gIikkIjsKKyAgICAgICBzdGF0aWMgY2hhciBjb25zdCB3b3JkX2JlZ1tdID0gIihefFteWzphbG51bTpdX10pKCI7CisgICAgICAgc3RhdGljIGNoYXIgY29uc3Qgd29yZF9lbmRbXSA9ICIpKFteWzphbG51bTpdX118JCkiOworLSAgICAgIGNoYXIgKm4gPSBtYWxsb2MgKHNpemVvZiB3b3JkX2JlZyAtIDEgKyBzaXplICsgc2l6ZW9mIHdvcmRfZW5kKTsKKysgICAgICBjaGFyICpuID0geG1hbGxvYyAoc2l6ZW9mIHdvcmRfYmVnIC0gMSArIHNpemUgKyBzaXplb2Ygd29yZF9lbmQpOworICAgICAgIHNpemVfdCBpOworICAgICAgIHN0cmNweSAobiwgbWF0Y2hfbGluZXMgPyBsaW5lX2JlZyA6IHdvcmRfYmVnKTsKKyAgICAgICBpID0gc3RybGVuKG4pOworQEAgLTMzOSwxNSArMzM0LDM0IEBAIEVHZXhlY3V0ZSAoY2hhciBjb25zdCAqYnVmLCBzaXplX3Qgc2l6ZSwgc2l6ZV90ICptYXRjaF9zaXplLCBpbnQgZXhhY3QpCisgICBjaGFyIGVvbCA9IGVvbGJ5dGU7CisgICBpbnQgYmFja3JlZiwgc3RhcnQsIGxlbjsKKyAgIHN0cnVjdCBrd3NtYXRjaCBrd3NtOworLSAgc2l6ZV90IGk7CisrICBzaXplX3QgaSwgcmV0X3ZhbDsKKysgIHN0YXRpYyBpbnQgdXNlX2RmYTsKKysgIHN0YXRpYyBpbnQgdXNlX2RmYV9jaGVja2VkID0gMDsKKyAjaWZkZWYgTUJTX1NVUFBPUlQKKy0gIGNoYXIgKm1iX3Byb3BlcnRpZXMgPSBOVUxMOworKyAgaW50IG1iX2N1cl9tYXggPSBNQl9DVVJfTUFYOworKyAgbWJzdGF0ZV90IG1iczsKKysgIG1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKyAjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKyAKKysgIGlmICghdXNlX2RmYV9jaGVja2VkKQorKyAgICB7CisrICAgICAgY2hhciAqZ3JlcF91c2VfZGZhID0gZ2V0ZW52ICgiR1JFUF9VU0VfREZBIik7CisrICAgICAgaWYgKCFncmVwX3VzZV9kZmEpCisrCXsKKyAjaWZkZWYgTUJTX1NVUFBPUlQKKy0gIGlmIChNQl9DVVJfTUFYID4gMSAmJiBrd3NldCkKKy0gICAgbWJfcHJvcGVydGllcyA9IGNoZWNrX211bHRpYnl0ZV9zdHJpbmcoYnVmLCBzaXplKTsKKysJICAvKiBUdXJuIG9mZiBERkEgd2hlbiBwcm9jZXNzaW5nIG11bHRpYnl0ZSBpbnB1dC4gKi8KKysJICB1c2VfZGZhID0gKE1CX0NVUl9NQVggPT0gMSk7CisrI2Vsc2UKKysJICB1c2VfZGZhID0gMTsKKyAjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIHVzZV9kZmEgPSBhdG9pIChncmVwX3VzZV9kZmEpOworKwl9CisrCisrICAgICAgdXNlX2RmYV9jaGVja2VkID0gMTsKKysgICAgfQorIAorICAgYnVmbGltID0gYnVmICsgc2l6ZTsKKyAKK0BAIC0zNTgsNDcgKzM3MiwxMjAgQEAgRUdleGVjdXRlIChjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgKm1hdGNoX3NpemUsIGludCBleGFjdCkKKyAJICBpZiAoa3dzZXQpCisgCSAgICB7CisgCSAgICAgIC8qIEZpbmQgYSBwb3NzaWJsZSBtYXRjaCB1c2luZyB0aGUgS1dzZXQgbWF0Y2hlci4gKi8KKy0JICAgICAgc2l6ZV90IG9mZnNldCA9IGt3c2V4ZWMgKGt3c2V0LCBiZWcsIGJ1ZmxpbSAtIGJlZywgJmt3c20pOworKyNpZmRlZiBNQlNfU1VQUE9SVAorKwkgICAgICBzaXplX3QgYnl0ZXNfbGVmdCA9IDA7CisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCSAgICAgIHNpemVfdCBvZmZzZXQ7CisrI2lmZGVmIE1CU19TVVBQT1JUCisrCSAgICAgIC8qIGt3c2V4ZWMgZG9lc24ndCB3b3JrIHdpdGggbWF0Y2hfaWNhc2UgYW5kIG11bHRpYnl0ZSBpbnB1dC4gKi8KKysJICAgICAgaWYgKG1hdGNoX2ljYXNlICYmIG1iX2N1cl9tYXggPiAxKQorKwkJLyogQXZvaWQga3dzZXQgKi8KKysJCW9mZnNldCA9IDA7CisrCSAgICAgIGVsc2UKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysJICAgICAgb2Zmc2V0ID0ga3dzZXhlYyAoa3dzZXQsIGJlZywgYnVmbGltIC0gYmVnLCAma3dzbSk7CisgCSAgICAgIGlmIChvZmZzZXQgPT0gKHNpemVfdCkgLTEpCistCQl7CisrCSAgICAgICAgZ290byBmYWlsdXJlOworICNpZmRlZiBNQlNfU1VQUE9SVAorLQkJICBpZiAoTUJfQ1VSX01BWCA+IDEpCistCQkgICAgZnJlZShtYl9wcm9wZXJ0aWVzKTsKKy0jZW5kaWYKKy0JCSAgcmV0dXJuIChzaXplX3QpLTE7CisrCSAgICAgIGlmIChtYl9jdXJfbWF4ID4gMSAmJiAhdXNpbmdfdXRmOCkKKysJCXsKKysJCSAgYnl0ZXNfbGVmdCA9IG9mZnNldDsKKysJCSAgd2hpbGUgKGJ5dGVzX2xlZnQpCisrCQkgICAgeworKwkJICAgICAgc2l6ZV90IG1sZW4gPSBtYnJsZW4gKGJlZywgYnl0ZXNfbGVmdCwgJm1icyk7CisrCQkgICAgICBpZiAobWxlbiA9PSAoc2l6ZV90KSAtMSB8fCBtbGVuID09IDApCisrCQkJeworKwkJCSAgLyogSW5jb21wbGV0ZSBjaGFyYWN0ZXI6IHRyZWF0IGFzIHNpbmdsZS1ieXRlLiAqLworKwkJCSAgbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkJCSAgYmVnKys7CisrCQkJICBieXRlc19sZWZ0LS07CisrCQkJICBjb250aW51ZTsKKysJCQl9CisrCisrCQkgICAgICBpZiAobWxlbiA9PSAoc2l6ZV90KSAtMikKKysJCQkvKiBPZmZzZXQgcG9pbnRzIGluc2lkZSBtdWx0aWJ5dGUgY2hhcmFjdGVyOgorKwkJCSAqIG5vIGdvb2QuICovCisrCQkJYnJlYWs7CisrCisrCQkgICAgICBiZWcgKz0gbWxlbjsKKysJCSAgICAgIGJ5dGVzX2xlZnQgLT0gbWxlbjsKKysJCSAgICB9CisgCQl9CisrCSAgICAgIGVsc2UKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKyAJICAgICAgYmVnICs9IG9mZnNldDsKKyAJICAgICAgLyogTmFycm93IGRvd24gdG8gdGhlIGxpbmUgY29udGFpbmluZyB0aGUgY2FuZGlkYXRlLCBhbmQKKyAJCSBydW4gaXQgdGhyb3VnaCBERkEuICovCisgCSAgICAgIGVuZCA9IG1lbWNocihiZWcsIGVvbCwgYnVmbGltIC0gYmVnKTsKKyAJICAgICAgZW5kKys7CisgI2lmZGVmIE1CU19TVVBQT1JUCistCSAgICAgIGlmIChNQl9DVVJfTUFYID4gMSAmJiBtYl9wcm9wZXJ0aWVzW2JlZyAtIGJ1Zl0gPT0gMCkKKysJICAgICAgaWYgKG1iX2N1cl9tYXggPiAxICYmIGJ5dGVzX2xlZnQpCisgCQljb250aW51ZTsKKy0jZW5kaWYKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKyAJICAgICAgd2hpbGUgKGJlZyA+IGJ1ZiAmJiBiZWdbLTFdICE9IGVvbCkKKyAJCS0tYmVnOworLQkgICAgICBpZiAoa3dzbS5pbmRleCA8IGt3c2V0X2V4YWN0X21hdGNoZXMpCistCQlnb3RvIHN1Y2Nlc3M7CistCSAgICAgIGlmIChkZmFleGVjICgmZGZhLCBiZWcsIGVuZCAtIGJlZywgJmJhY2tyZWYpID09IChzaXplX3QpIC0xKQorKwkgICAgICBpZiAoCisrI2lmZGVmIE1CU19TVVBQT1JUCisrCQkgICEobWF0Y2hfaWNhc2UgJiYgbWJfY3VyX21heCA+IDEpICYmCisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCQkgIChrd3NtLmluZGV4IDwga3dzZXRfZXhhY3RfbWF0Y2hlcykpCisrCQlnb3RvIHN1Y2Nlc3NfaW5fYmVnX2FuZF9lbmQ7CisrCSAgICAgIGlmICh1c2VfZGZhICYmCisrCQkgIGRmYWV4ZWMgKCZkZmEsIGJlZywgZW5kIC0gYmVnLCAmYmFja3JlZikgPT0gKHNpemVfdCkgLTEpCisgCQljb250aW51ZTsKKyAJICAgIH0KKyAJICBlbHNlCisgCSAgICB7CisgCSAgICAgIC8qIE5vIGdvb2QgZml4ZWQgc3RyaW5nczsgc3RhcnQgd2l0aCBERkEuICovCistCSAgICAgIHNpemVfdCBvZmZzZXQgPSBkZmFleGVjICgmZGZhLCBiZWcsIGJ1ZmxpbSAtIGJlZywgJmJhY2tyZWYpOworKyNpZmRlZiBNQlNfU1VQUE9SVAorKwkgICAgICBzaXplX3QgYnl0ZXNfbGVmdCA9IDA7CisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCSAgICAgIHNpemVfdCBvZmZzZXQgPSAwOworKwkgICAgICBpZiAodXNlX2RmYSkKKysJCW9mZnNldCA9IGRmYWV4ZWMgKCZkZmEsIGJlZywgYnVmbGltIC0gYmVnLCAmYmFja3JlZik7CisgCSAgICAgIGlmIChvZmZzZXQgPT0gKHNpemVfdCkgLTEpCisgCQlicmVhazsKKyAJICAgICAgLyogTmFycm93IGRvd24gdG8gdGhlIGxpbmUgd2UndmUgZm91bmQuICovCisrI2lmZGVmIE1CU19TVVBQT1JUCisrCSAgICAgIGlmIChtYl9jdXJfbWF4ID4gMSAmJiAhdXNpbmdfdXRmOCkKKysJCXsKKysJCSAgYnl0ZXNfbGVmdCA9IG9mZnNldDsKKysJCSAgd2hpbGUgKGJ5dGVzX2xlZnQpCisrCQkgICAgeworKwkJICAgICAgc2l6ZV90IG1sZW4gPSBtYnJsZW4gKGJlZywgYnl0ZXNfbGVmdCwgJm1icyk7CisrCQkgICAgICBpZiAobWxlbiA9PSAoc2l6ZV90KSAtMSB8fCBtbGVuID09IDApCisrCQkJeworKwkJCSAgLyogSW5jb21wbGV0ZSBjaGFyYWN0ZXI6IHRyZWF0IGFzIHNpbmdsZS1ieXRlLiAqLworKwkJCSAgbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkJCSAgYmVnKys7CisrCQkJICBieXRlc19sZWZ0LS07CisrCQkJICBjb250aW51ZTsKKysJCQl9CisrCisrCQkgICAgICBpZiAobWxlbiA9PSAoc2l6ZV90KSAtMikKKysJCQkvKiBPZmZzZXQgcG9pbnRzIGluc2lkZSBtdWx0aWJ5dGUgY2hhcmFjdGVyOgorKwkJCSAqIG5vIGdvb2QuICovCisrCQkJYnJlYWs7CisrCisrCQkgICAgICBiZWcgKz0gbWxlbjsKKysJCSAgICAgIGJ5dGVzX2xlZnQgLT0gbWxlbjsKKysJCSAgICB9CisrCQl9CisrCSAgICAgIGVsc2UKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKyAJICAgICAgYmVnICs9IG9mZnNldDsKKyAJICAgICAgZW5kID0gbWVtY2hyIChiZWcsIGVvbCwgYnVmbGltIC0gYmVnKTsKKyAJICAgICAgZW5kKys7CisrI2lmZGVmIE1CU19TVVBQT1JUCisrCSAgICAgIGlmIChtYl9jdXJfbWF4ID4gMSAmJiBieXRlc19sZWZ0KQorKwkJY29udGludWU7CisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisgCSAgICAgIHdoaWxlIChiZWcgPiBidWYgJiYgYmVnWy0xXSAhPSBlb2wpCisgCQktLWJlZzsKKyAJICAgIH0KKyAJICAvKiBTdWNjZXNzZnVsLCBubyBiYWNrcmVmZXJlbmNlcyBlbmNvdW50ZXJlZCEgKi8KKy0JICBpZiAoIWJhY2tyZWYpCistCSAgICBnb3RvIHN1Y2Nlc3M7CisrCSAgaWYgKHVzZV9kZmEgJiYgIWJhY2tyZWYpCisrCSAgICBnb3RvIHN1Y2Nlc3NfaW5fYmVnX2FuZF9lbmQ7CisgCX0KKyAgICAgICBlbHNlCisgCWVuZCA9IGJlZyArIHNpemU7CitAQCAtNDEzLDE0ICs1MDAsMTEgQEAgRUdleGVjdXRlIChjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgKm1hdGNoX3NpemUsIGludCBleGFjdCkKKyAJCQkJICAgICAgIGVuZCAtIGJlZyAtIDEsICYocGF0dGVybnNbaV0ucmVncykpKSkKKyAJICAgIHsKKyAJICAgICAgbGVuID0gcGF0dGVybnNbaV0ucmVncy5lbmRbMF0gLSBzdGFydDsKKy0JICAgICAgaWYgKGV4YWN0KQorLQkJeworLQkJICAqbWF0Y2hfc2l6ZSA9IGxlbjsKKy0JCSAgcmV0dXJuIHN0YXJ0OworLQkJfQorKwkgICAgICBpZiAoZXhhY3QgJiYgIW1hdGNoX3dvcmRzKQorKwkgICAgICAgIGdvdG8gc3VjY2Vzc19pbl9zdGFydF9hbmRfbGVuOworIAkgICAgICBpZiAoKCFtYXRjaF9saW5lcyAmJiAhbWF0Y2hfd29yZHMpCisgCQkgIHx8IChtYXRjaF9saW5lcyAmJiBsZW4gPT0gZW5kIC0gYmVnIC0gMSkpCistCQlnb3RvIHN1Y2Nlc3M7CisrCQlnb3RvIHN1Y2Nlc3NfaW5fYmVnX2FuZF9lbmQ7CisgCSAgICAgIC8qIElmIC13LCBjaGVjayBpZiB0aGUgbWF0Y2ggYWxpZ25zIHdpdGggd29yZCBib3VuZGFyaWVzLgorIAkJIFdlIGRvIHRoaXMgaXRlcmF0aXZlbHkgYmVjYXVzZToKKyAJCSAoYSkgdGhlIGxpbmUgbWF5IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBvY2N1cmVuY2Ugb2YgdGhlCitAQCAtNDMxLDEwICs1MTUsMTE0IEBAIEVHZXhlY3V0ZSAoY2hhciBjb25zdCAqYnVmLCBzaXplX3Qgc2l6ZSwgc2l6ZV90ICptYXRjaF9zaXplLCBpbnQgZXhhY3QpCisgCSAgICAgIGlmIChtYXRjaF93b3JkcykKKyAJCXdoaWxlIChzdGFydCA+PSAwKQorIAkJICB7CistCQkgICAgaWYgKChzdGFydCA9PSAwIHx8ICFXQ0hBUiAoKHVuc2lnbmVkIGNoYXIpIGJlZ1tzdGFydCAtIDFdKSkKKy0JCQkmJiAobGVuID09IGVuZCAtIGJlZyAtIDEKKy0JCQkgICAgfHwgIVdDSEFSICgodW5zaWduZWQgY2hhcikgYmVnW3N0YXJ0ICsgbGVuXSkpKQorLQkJICAgICAgZ290byBzdWNjZXNzOworKwkJICAgIGludCBsd29yZF9tYXRjaCA9IDA7CisrCQkgICAgaWYgKHN0YXJ0ID09IDApCisrCQkgICAgICBsd29yZF9tYXRjaCA9IDE7CisrCQkgICAgZWxzZQorKwkJICAgICAgeworKwkJCWFzc2VydCAoc3RhcnQgPiAwKTsKKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJCQlpZiAobWJfY3VyX21heCA+IDEpCisrCQkJICB7CisrCQkJICAgIGNvbnN0IGNoYXIgKnM7CisrCQkJICAgIHNpemVfdCBtcjsKKysJCQkgICAgd2NoYXJfdCBwd2M7CisrCisrCQkJICAgIC8qIExvY2F0ZSB0aGUgc3RhcnQgb2YgdGhlIG11bHRpYnl0ZSBjaGFyYWN0ZXIKKysJCQkgICAgICAgYmVmb3JlIHRoZSBtYXRjaCBwb3NpdGlvbiAoPT0gYmVnICsgc3RhcnQpLiAqLworKwkJCSAgICBpZiAodXNpbmdfdXRmOCkKKysJCQkgICAgICB7CisrCQkJCS8qIFVURi04IGlzIGEgc3BlY2lhbCBjYXNlOiBzY2FuIGJhY2t3YXJkcworKwkJCQkgICB1bnRpbCB3ZSBmaW5kIGEgNy1iaXQgY2hhcmFjdGVyIG9yIGEKKysJCQkJICAgbGVhZCBieXRlLiAqLworKwkJCQlzID0gYmVnICsgc3RhcnQgLSAxOworKwkJCQl3aGlsZSAocyA+IGJ1ZgorKwkJCQkgICAgICAgJiYgKHVuc2lnbmVkIGNoYXIpICpzID49IDB4ODAKKysJCQkJICAgICAgICYmICh1bnNpZ25lZCBjaGFyKSAqcyA8PSAweGJmKQorKwkJCQkgIC0tczsKKysJCQkgICAgICB9CisrCQkJICAgIGVsc2UKKysJCQkgICAgICB7CisrCQkJCS8qIFNjYW4gZm9yd2FyZHMgdG8gZmluZCB0aGUgc3RhcnQgb2YgdGhlCisrCQkJCSAgIGxhc3QgY29tcGxldGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUKKysJCQkJICAgbWF0Y2ggcG9zaXRpb24uICAqLworKwkJCQlzaXplX3QgYnl0ZXNfbGVmdCA9IHN0YXJ0IC0gMTsKKysJCQkJcyA9IGJlZzsKKysJCQkJd2hpbGUgKGJ5dGVzX2xlZnQgPiAwKQorKwkJCQkgIHsKKysJCQkJICAgIG1yID0gbWJybGVuIChzLCBieXRlc19sZWZ0LCAmbWJzKTsKKysJCQkJICAgIGlmIChtciA9PSAoc2l6ZV90KSAtMSB8fCBtciA9PSAwKQorKwkJCQkgICAgICB7CisrCQkJCQltZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzKSk7CisrCQkJCQlzKys7CisrCQkJCQlieXRlc19sZWZ0LS07CisrCQkJCQljb250aW51ZTsKKysJCQkJICAgICAgfQorKwkJCQkgICAgaWYgKG1yID09IChzaXplX3QpIC0yKQorKwkJCQkgICAgICB7CisrCQkJCQltZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzKSk7CisrCQkJCQlicmVhazsKKysJCQkJICAgICAgfQorKwkJCQkgICAgcyArPSBtcjsKKysJCQkJICAgIGJ5dGVzX2xlZnQgLT0gbXI7CisrCQkJCSAgfQorKwkJCSAgICAgIH0KKysJCQkgICAgbXIgPSBtYnJ0b3djICgmcHdjLCBzLCBiZWcgKyBzdGFydCAtIHMsICZtYnMpOworKwkJCSAgICBpZiAobXIgPT0gKHNpemVfdCkgLTIgfHwgbXIgPT0gKHNpemVfdCkgLTEgfHwKKysJCQkJbXIgPT0gMCkKKysJCQkgICAgICB7CisrCQkJCW1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysJCQkJbHdvcmRfbWF0Y2ggPSAxOworKwkJCSAgICAgIH0KKysJCQkgICAgZWxzZSBpZiAoIShpc3dhbG51bSAocHdjKSB8fCBwd2MgPT0gTCdfJykKKysJCQkJICAgICAmJiBtciA9PSBiZWcgKyBzdGFydCAtIHMpCisrCQkJICAgICAgbHdvcmRfbWF0Y2ggPSAxOworKwkJCSAgfQorKwkJCWVsc2UKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysJCQlpZiAoIVdDSEFSICgodW5zaWduZWQgY2hhcikgYmVnW3N0YXJ0IC0gMV0pKQorKwkJCSAgbHdvcmRfbWF0Y2ggPSAxOworKwkJICAgICAgfQorKworKwkJICAgIGlmIChsd29yZF9tYXRjaCkKKysJCSAgICAgIHsKKysJCQlpbnQgcndvcmRfbWF0Y2ggPSAwOworKwkJCWlmIChzdGFydCArIGxlbiA9PSBlbmQgLSBiZWcgLSAxKQorKwkJCSAgcndvcmRfbWF0Y2ggPSAxOworKwkJCWVsc2UKKysJCQkgIHsKKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJCQkgICAgaWYgKG1iX2N1cl9tYXggPiAxKQorKwkJCSAgICAgIHsKKysJCQkJd2NoYXJfdCBud2M7CisrCQkJCWludCBtcjsKKysKKysJCQkJbXIgPSBtYnRvd2MgKCZud2MsIGJlZyArIHN0YXJ0ICsgbGVuLAorKwkJCQkJICAgICBlbmQgLSBiZWcgLSBzdGFydCAtIGxlbiAtIDEpOworKwkJCQlpZiAobXIgPD0gMCkKKysJCQkJICB7CisrCQkJCSAgICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQkJCSAgICByd29yZF9tYXRjaCA9IDE7CisrCQkJCSAgfQorKwkJCQllbHNlIGlmICghaXN3YWxudW0gKG53YykgJiYgbndjICE9IEwnXycpCisrCQkJCSAgcndvcmRfbWF0Y2ggPSAxOworKwkJCSAgICAgIH0KKysJCQkgICAgZWxzZQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKwkJCSAgICBpZiAoIVdDSEFSICgodW5zaWduZWQgY2hhcikgYmVnW3N0YXJ0ICsgbGVuXSkpCisrCQkJICAgICAgcndvcmRfbWF0Y2ggPSAxOworKwkJCSAgfQorKworKwkJCWlmIChyd29yZF9tYXRjaCkKKysJCQkgIHsKKysJCQkgICAgaWYgKCFleGFjdCkKKysJCQkgICAgICAvKiBSZXR1cm5zIHRoZSB3aG9sZSBsaW5lLiAqLworKwkJCSAgICAgIGdvdG8gc3VjY2Vzc19pbl9iZWdfYW5kX2VuZDsKKysJCQkgICAgZWxzZQorKwkJCSAgICAgIC8qIFJldHVybnMganVzdCB0aGlzIHdvcmQgbWF0Y2guICovCisrCQkJICAgICAgZ290byBzdWNjZXNzX2luX3N0YXJ0X2FuZF9sZW47CisrCQkJICB9CisrCQkgICAgICB9CisgCQkgICAgaWYgKGxlbiA+IDApCisgCQkgICAgICB7CisgCQkJLyogVHJ5IGEgc2hvcnRlciBsZW5ndGggYW5jaG9yZWQgYXQgdGhlIHNhbWUgcGxhY2UuICovCitAQCAtNDYxLDI2ICs2NDksMTU0IEBAIEVHZXhlY3V0ZSAoY2hhciBjb25zdCAqYnVmLCBzaXplX3Qgc2l6ZSwgc2l6ZV90ICptYXRjaF9zaXplLCBpbnQgZXhhY3QpCisgCSAgICB9CisgCX0gLyogZm9yIFJlZ2V4IHBhdHRlcm5zLiAgKi8KKyAgICAgfSAvKiBmb3IgKGJlZyA9IGVuZCAuLikgKi8KKy0jaWZkZWYgTUJTX1NVUFBPUlQKKy0gIGlmIChNQl9DVVJfTUFYID4gMSAmJiBtYl9wcm9wZXJ0aWVzKQorLSAgICBmcmVlIChtYl9wcm9wZXJ0aWVzKTsKKy0jZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysKKysgZmFpbHVyZToKKyAgIHJldHVybiAoc2l6ZV90KSAtMTsKKyAKKy0gc3VjY2VzczoKKy0jaWZkZWYgTUJTX1NVUFBPUlQKKy0gIGlmIChNQl9DVVJfTUFYID4gMSAmJiBtYl9wcm9wZXJ0aWVzKQorLSAgICBmcmVlIChtYl9wcm9wZXJ0aWVzKTsKKy0jZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKy0gICptYXRjaF9zaXplID0gZW5kIC0gYmVnOworLSAgcmV0dXJuIGJlZyAtIGJ1ZjsKKysgc3VjY2Vzc19pbl9iZWdfYW5kX2VuZDoKKysgIGxlbiA9IGVuZCAtIGJlZzsKKysgIHN0YXJ0ID0gYmVnIC0gYnVmOworKyAgLyogRkFMTFRIUk9VR0ggKi8KKysKKysgc3VjY2Vzc19pbl9zdGFydF9hbmRfbGVuOgorKyAgKm1hdGNoX3NpemUgPSBsZW47CisrICByZXR1cm4gc3RhcnQ7CisgfQorIAorKyNpZmRlZiBNQlNfU1VQUE9SVAorK3N0YXRpYyBpbnQgZl9pX211bHRpYnl0ZTsgLyogd2hldGhlciB3ZSdyZSB1c2luZyB0aGUgbmV3IC1GaSBNQiBtZXRob2QgKi8KKytzdGF0aWMgc3RydWN0CisreworKyAgd2NoYXJfdCAqKnBhdHRlcm5zOworKyAgc2l6ZV90IGNvdW50LCBtYXhsZW47CisrICB1bnNpZ25lZCBjaGFyICptYXRjaDsKKyt9IEZpbWI7CisrI2VuZGlmCisrCisgc3RhdGljIHZvaWQKKyBGY29tcGlsZSAoY2hhciBjb25zdCAqcGF0dGVybiwgc2l6ZV90IHNpemUpCisgeworKyAgaW50IG1iX2N1cl9tYXggPSBNQl9DVVJfTUFYOworICAgY2hhciBjb25zdCAqYmVnLCAqbGltLCAqZXJyOworIAorKyAgY2hlY2tfdXRmOCAoKTsKKysjaWZkZWYgTUJTX1NVUFBPUlQKKysgIC8qIFN1cHBvcnQgLUYgLWkgZm9yIFVURi04IGlucHV0LiAqLworKyAgaWYgKG1hdGNoX2ljYXNlICYmIG1iX2N1cl9tYXggPiAxKQorKyAgICB7CisrICAgICAgbWJzdGF0ZV90IG1iczsKKysgICAgICB3Y2hhcl90ICp3Y3BhdHRlcm4gPSB4bWFsbG9jICgoc2l6ZSArIDEpICogc2l6ZW9mICh3Y2hhcl90KSk7CisrICAgICAgY29uc3QgY2hhciAqcGF0dGVybmVuZCA9IHBhdHRlcm47CisrICAgICAgc2l6ZV90IHdjc2l6ZTsKKysgICAgICBrd3NldF90IGZpbWJfa3dzZXQgPSBOVUxMOworKyAgICAgIGNoYXIgKnN0YXJ0cyA9IE5VTEw7CisrICAgICAgd2NoYXJfdCAqd2NiZWcsICp3Y2xpbTsKKysgICAgICBzaXplX3QgYWxsb2NhdGVkID0gMDsKKysKKysgICAgICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzKSk7CisrIyBpZmRlZiBfX0dOVV9MSUJSQVJZX18KKysgICAgICB3Y3NpemUgPSBtYnNucnRvd2NzICh3Y3BhdHRlcm4sICZwYXR0ZXJuZW5kLCBzaXplLCBzaXplLCAmbWJzKTsKKysgICAgICBpZiAocGF0dGVybmVuZCAhPSBwYXR0ZXJuICsgc2l6ZSkKKysJd2NzaXplID0gKHNpemVfdCkgLTE7CisrIyBlbHNlCisrICAgICAgeworKwljaGFyICpwYXR0ZXJuY29weSA9IHhtYWxsb2MgKHNpemUgKyAxKTsKKysKKysJbWVtY3B5IChwYXR0ZXJuY29weSwgcGF0dGVybiwgc2l6ZSk7CisrCXBhdHRlcm5jb3B5W3NpemVdID0gJ1wwJzsKKysJcGF0dGVybmVuZCA9IHBhdHRlcm5jb3B5OworKwl3Y3NpemUgPSBtYnNydG93Y3MgKHdjcGF0dGVybiwgJnBhdHRlcm5lbmQsIHNpemUsICZtYnMpOworKwlpZiAocGF0dGVybmVuZCAhPSBwYXR0ZXJuY29weSArIHNpemUpCisrCSAgd2NzaXplID0gKHNpemVfdCkgLTE7CisrCWZyZWUgKHBhdHRlcm5jb3B5KTsKKysgICAgICB9CisrIyBlbmRpZgorKyAgICAgIGlmICh3Y3NpemUgKyAyIDw9IDIpCisrCXsKKytmaW1iX2ZhaWw6CisrCSAgZnJlZSAod2NwYXR0ZXJuKTsKKysJICBmcmVlIChzdGFydHMpOworKwkgIGlmIChmaW1iX2t3c2V0KQorKwkgICAga3dzZnJlZSAoZmltYl9rd3NldCk7CisrCSAgZnJlZSAoRmltYi5wYXR0ZXJucyk7CisrCSAgRmltYi5wYXR0ZXJucyA9IE5VTEw7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICBpZiAoIShmaW1iX2t3c2V0ID0ga3dzYWxsb2MgKE5VTEwpKSkKKysJICAgIGVycm9yICgyLCAwLCBfKCJtZW1vcnkgZXhoYXVzdGVkIikpOworKworKwkgIHN0YXJ0cyA9IHhtYWxsb2MgKG1iX2N1cl9tYXggKiAzKTsKKysJICB3Y2JlZyA9IHdjcGF0dGVybjsKKysJICBkbworKwkgICAgeworKwkgICAgICBpbnQgaTsKKysJICAgICAgc2l6ZV90IHdjbGVuOworKworKwkgICAgICBpZiAoRmltYi5jb3VudCA+PSBhbGxvY2F0ZWQpCisrCQl7CisrCQkgIGlmIChhbGxvY2F0ZWQgPT0gMCkKKysJCSAgICBhbGxvY2F0ZWQgPSAxMjg7CisrCQkgIGVsc2UKKysJCSAgICBhbGxvY2F0ZWQgKj0gMjsKKysJCSAgRmltYi5wYXR0ZXJucyA9IHhyZWFsbG9jIChGaW1iLnBhdHRlcm5zLAorKwkJCQkJICAgIHNpemVvZiAod2NoYXJfdCAqKSAqIGFsbG9jYXRlZCk7CisrCQl9CisrCSAgICAgIEZpbWIucGF0dGVybnNbRmltYi5jb3VudCsrXSA9IHdjYmVnOworKwkgICAgICBmb3IgKHdjbGltID0gd2NiZWc7CisrCQkgICB3Y2xpbSA8IHdjcGF0dGVybiArIHdjc2l6ZSAmJiAqd2NsaW0gIT0gTCdcbic7ICsrd2NsaW0pCisrCQkqd2NsaW0gPSB0b3dsb3dlciAoKndjbGltKTsKKysJICAgICAgKndjbGltID0gTCdcMCc7CisrCSAgICAgIHdjbGVuID0gd2NsaW0gLSB3Y2JlZzsKKysJICAgICAgaWYgKHdjbGVuID4gRmltYi5tYXhsZW4pCisrCQlGaW1iLm1heGxlbiA9IHdjbGVuOworKwkgICAgICBpZiAod2NsZW4gPiAzKQorKwkJd2NsZW4gPSAzOworKwkgICAgICBpZiAod2NsZW4gPT0gMCkKKysJCXsKKysJCSAgaWYgKChlcnIgPSBrd3NpbmNyIChmaW1iX2t3c2V0LCAiIiwgMCkpICE9IDApCisrCQkgICAgZXJyb3IgKDIsIDAsIGVycik7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCWZvciAoaSA9IDA7IGkgPCAoMSA8PCB3Y2xlbik7IGkrKykKKysJCSAgeworKwkJICAgIGNoYXIgKnAgPSBzdGFydHM7CisrCQkgICAgaW50IGosIGs7CisrCisrCQkgICAgZm9yIChqID0gMDsgaiA8IHdjbGVuOyArK2opCisrCQkgICAgICB7CisrCQkJd2NoYXJfdCB3YyA9IHdjYmVnW2pdOworKwkJCWlmIChpICYgKDEgPDwgaikpCisrCQkJICB7CisrCQkJICAgIHdjID0gdG93dXBwZXIgKHdjKTsKKysJCQkgICAgaWYgKHdjID09IHdjYmVnW2pdKQorKwkJCSAgICAgIGNvbnRpbnVlOworKwkJCSAgfQorKwkJCWsgPSB3Y3RvbWIgKHAsIHdjKTsKKysJCQlpZiAoayA8PSAwKQorKwkJCSAgZ290byBmaW1iX2ZhaWw7CisrCQkJcCArPSBrOworKwkJICAgICAgfQorKwkJICAgIGlmICgoZXJyID0ga3dzaW5jciAoZmltYl9rd3NldCwgc3RhcnRzLCBwIC0gc3RhcnRzKSkgIT0gMCkKKysJCSAgICAgIGVycm9yICgyLCAwLCBlcnIpOworKwkJICB9CisrCSAgICAgIGlmICh3Y2xpbSA8IHdjcGF0dGVybiArIHdjc2l6ZSkKKysJCSsrd2NsaW07CisrCSAgICAgIHdjYmVnID0gd2NsaW07CisrCSAgICB9CisrCSAgd2hpbGUgKHdjYmVnIDwgd2NwYXR0ZXJuICsgd2NzaXplKTsKKysJICBmX2lfbXVsdGlieXRlID0gMTsKKysJICBrd3NldCA9IGZpbWJfa3dzZXQ7CisrCSAgZnJlZSAoc3RhcnRzKTsKKysJICBGaW1iLm1hdGNoID0geG1hbGxvYyAoRmltYi5jb3VudCk7CisrCSAgaWYgKChlcnIgPSBrd3NwcmVwIChrd3NldCkpICE9IDApCisrCSAgICBlcnJvciAoMiwgMCwgZXJyKTsKKysJICByZXR1cm47CisrCX0KKysgICAgfQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKworKworICAga3dzaW5pdCAoKTsKKyAgIGJlZyA9IHBhdHRlcm47CisgICBkbworQEAgLTQ5OSw2ICs4MTUsNzYgQEAgRmNvbXBpbGUgKGNoYXIgY29uc3QgKnBhdHRlcm4sIHNpemVfdCBzaXplKQorICAgICBlcnJvciAoMiwgMCwgZXJyKTsKKyB9CisgCisrI2lmZGVmIE1CU19TVVBQT1JUCisrc3RhdGljIGludAorK0ZpbWJleGVjIChjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgKnBsZW4sIGludCBleGFjdCkKKyt7CisrICBzaXplX3QgbGVuLCBsZXR0ZXIsIGk7CisrICBpbnQgcmV0ID0gLTE7CisrICBtYnN0YXRlX3QgbWJzOworKyAgd2NoYXJfdCB3YzsKKysgIGludCBwYXR0ZXJuc19sZWZ0OworKworKyAgYXNzZXJ0IChtYXRjaF9pY2FzZSAmJiBmX2lfbXVsdGlieXRlID09IDEpOworKyAgYXNzZXJ0IChNQl9DVVJfTUFYID4gMSk7CisrCisrICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzKSk7CisrICBtZW1zZXQgKEZpbWIubWF0Y2gsICdcMScsIEZpbWIuY291bnQpOworKyAgbGV0dGVyID0gbGVuID0gMDsKKysgIHBhdHRlcm5zX2xlZnQgPSAxOworKyAgd2hpbGUgKHBhdHRlcm5zX2xlZnQgJiYgbGVuIDw9IHNpemUpCisrICAgIHsKKysgICAgICBzaXplX3QgYzsKKysKKysgICAgICBwYXR0ZXJuc19sZWZ0ID0gMDsKKysgICAgICBpZiAobGVuIDwgc2l6ZSkKKysJeworKwkgIGMgPSBtYnJ0b3djICgmd2MsIGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgJm1icyk7CisrCSAgaWYgKGMgKyAyIDw9IDIpCisrCSAgICByZXR1cm4gcmV0OworKworKwkgIHdjID0gdG93bG93ZXIgKHdjKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGMgPSAxOworKwkgIHdjID0gTCdcMCc7CisrCX0KKysKKysgICAgICBmb3IgKGkgPSAwOyBpIDwgRmltYi5jb3VudDsgaSsrKQorKwl7CisrCSAgaWYgKEZpbWIubWF0Y2hbaV0pCisrCSAgICB7CisrCSAgICAgIGlmIChGaW1iLnBhdHRlcm5zW2ldW2xldHRlcl0gPT0gTCdcMCcpCisrCQl7CisrCQkgIC8qIEZvdW5kIGEgbWF0Y2guICovCisrCQkgICpwbGVuID0gbGVuOworKwkJICBpZiAoIWV4YWN0ICYmICFtYXRjaF93b3JkcykKKysJCSAgICByZXR1cm4gMDsKKysJCSAgZWxzZQorKwkJICAgIHsKKysJCSAgICAgIC8qIEZvciAtdyBvciBleGFjdCBsb29rIGZvciBsb25nZXN0IG1hdGNoLiAgKi8KKysJCSAgICAgIHJldCA9IDA7CisrCQkgICAgICBGaW1iLm1hdGNoW2ldID0gJ1wwJzsKKysJCSAgICAgIGNvbnRpbnVlOworKwkJICAgIH0KKysJCX0KKysKKysJICAgICAgaWYgKEZpbWIucGF0dGVybnNbaV1bbGV0dGVyXSA9PSB3YykKKysJCXBhdHRlcm5zX2xlZnQgPSAxOworKwkgICAgICBlbHNlCisrCQlGaW1iLm1hdGNoW2ldID0gJ1wwJzsKKysJICAgIH0KKysJfQorKworKyAgICAgIGxlbiArPSBjOworKyAgICAgIGxldHRlcisrOworKyAgICB9CisrCisrICByZXR1cm4gcmV0OworK30KKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysKKyBzdGF0aWMgc2l6ZV90CisgRmV4ZWN1dGUgKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCAqbWF0Y2hfc2l6ZSwgaW50IGV4YWN0KQorIHsKK0BAIC01MDYsODggKzg5MiwyNjggQEAgRmV4ZWN1dGUgKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCAqbWF0Y2hfc2l6ZSwgaW50IGV4YWN0KQorICAgcmVnaXN0ZXIgc2l6ZV90IGxlbjsKKyAgIGNoYXIgZW9sID0gZW9sYnl0ZTsKKyAgIHN0cnVjdCBrd3NtYXRjaCBrd3NtYXRjaDsKKysgIHNpemVfdCByZXRfdmFsOworICNpZmRlZiBNQlNfU1VQUE9SVAorLSAgY2hhciAqbWJfcHJvcGVydGllczsKKy0gIGlmIChNQl9DVVJfTUFYID4gMSkKKy0gICAgbWJfcHJvcGVydGllcyA9IGNoZWNrX211bHRpYnl0ZV9zdHJpbmcgKGJ1Ziwgc2l6ZSk7CisrICBpbnQgbWJfY3VyX21heCA9IE1CX0NVUl9NQVg7CisrICBtYnN0YXRlX3QgbWJzOworKyAgbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKyAgY29uc3QgY2hhciAqbGFzdF9jaGFyID0gTlVMTDsKKyAjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKyAKKy0gIGZvciAoYmVnID0gYnVmOyBiZWcgPD0gYnVmICsgc2l6ZTsgKytiZWcpCisrICBmb3IgKGJlZyA9IGJ1ZjsgYmVnIDwgYnVmICsgc2l6ZTsgKytiZWcpCisgICAgIHsKKy0gICAgICBzaXplX3Qgb2Zmc2V0ID0ga3dzZXhlYyAoa3dzZXQsIGJlZywgYnVmICsgc2l6ZSAtIGJlZywgJmt3c21hdGNoKTsKKysgICAgICBzaXplX3Qgb2Zmc2V0OworKyAgICAgIG9mZnNldCA9IGt3c2V4ZWMgKGt3c2V0LCBiZWcsIGJ1ZiArIHNpemUgLSBiZWcsICZrd3NtYXRjaCk7CisrCisgICAgICAgaWYgKG9mZnNldCA9PSAoc2l6ZV90KSAtMSkKKy0JeworKwlnb3RvIGZhaWx1cmU7CisgI2lmZGVmIE1CU19TVVBQT1JUCistCSAgaWYgKE1CX0NVUl9NQVggPiAxKQorLQkgICAgZnJlZShtYl9wcm9wZXJ0aWVzKTsKKy0jZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKy0JICByZXR1cm4gb2Zmc2V0OworKyAgICAgIGlmIChtYl9jdXJfbWF4ID4gMSAmJiAhdXNpbmdfdXRmOCkKKysJeworKwkgIHNpemVfdCBieXRlc19sZWZ0ID0gb2Zmc2V0OworKwkgIHdoaWxlIChieXRlc19sZWZ0KQorKwkgICAgeworKwkgICAgICBzaXplX3QgbWxlbiA9IG1icmxlbiAoYmVnLCBieXRlc19sZWZ0LCAmbWJzKTsKKysKKysJICAgICAgbGFzdF9jaGFyID0gYmVnOworKwkgICAgICBpZiAobWxlbiA9PSAoc2l6ZV90KSAtMSB8fCBtbGVuID09IDApCisrCQl7CisrCQkgIC8qIEluY29tcGxldGUgY2hhcmFjdGVyOiB0cmVhdCBhcyBzaW5nbGUtYnl0ZS4gKi8KKysJCSAgbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkJICBiZWcrKzsKKysJCSAgYnl0ZXNfbGVmdC0tOworKwkJICBjb250aW51ZTsKKysJCX0KKysKKysJICAgICAgaWYgKG1sZW4gPT0gKHNpemVfdCkgLTIpCisrCQkvKiBPZmZzZXQgcG9pbnRzIGluc2lkZSBtdWx0aWJ5dGUgY2hhcmFjdGVyOiBubyBnb29kLiAqLworKwkJYnJlYWs7CisrCisrCSAgICAgIGJlZyArPSBtbGVuOworKwkgICAgICBieXRlc19sZWZ0IC09IG1sZW47CisrCSAgICB9CisrCisrCSAgaWYgKGJ5dGVzX2xlZnQpCisrCSAgICBjb250aW51ZTsKKyAJfQorLSNpZmRlZiBNQlNfU1VQUE9SVAorLSAgICAgIGlmIChNQl9DVVJfTUFYID4gMSAmJiBtYl9wcm9wZXJ0aWVzW29mZnNldCtiZWctYnVmXSA9PSAwKQorLQljb250aW51ZTsgLyogSXQgaXMgYSBwYXJ0IG9mIG11bHRpYnl0ZSBjaGFyYWN0ZXIuICAqLworKyAgICAgIGVsc2UKKyAjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKyAgICAgICBiZWcgKz0gb2Zmc2V0OworLSAgICAgIGxlbiA9IGt3c21hdGNoLnNpemVbMF07CistICAgICAgaWYgKGV4YWN0KQorLQl7CistCSAgKm1hdGNoX3NpemUgPSBsZW47CisgI2lmZGVmIE1CU19TVVBQT1JUCistCSAgaWYgKE1CX0NVUl9NQVggPiAxKQorLQkgICAgZnJlZSAobWJfcHJvcGVydGllcyk7CisrICAgICAgLyogRm9yIGZfaV9tdWx0aWJ5dGUsIHRoZSBzdHJpbmcgYXQgYmVnIG5vdyBtYXRjaGVzIGZpcnN0IDMgY2hhcnMgb2YKKysJIG9uZSBvZiB0aGUgc2VhcmNoIHN0cmluZ3MgKGxlc3MgaWYgdGhlcmUgYXJlIHNob3J0ZXIgc2VhcmNoIHN0cmluZ3MpLgorKwkgU2VlIGlmIHRoaXMgaXMgYSByZWFsIG1hdGNoLiAgKi8KKysgICAgICBpZiAoZl9pX211bHRpYnl0ZQorKwkgICYmIEZpbWJleGVjIChiZWcsIGJ1ZiArIHNpemUgLSBiZWcsICZrd3NtYXRjaC5zaXplWzBdLCBleGFjdCkpCisrCWdvdG8gbmV4dF9jaGFyOworICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworLQkgIHJldHVybiBiZWcgLSBidWY7CistCX0KKysgICAgICBsZW4gPSBrd3NtYXRjaC5zaXplWzBdOworKyAgICAgIGlmIChleGFjdCAmJiAhbWF0Y2hfd29yZHMpCisrCWdvdG8gc3VjY2Vzc19pbl9iZWdfYW5kX2xlbjsKKyAgICAgICBpZiAobWF0Y2hfbGluZXMpCisgCXsKKyAJICBpZiAoYmVnID4gYnVmICYmIGJlZ1stMV0gIT0gZW9sKQorLQkgICAgY29udGludWU7CisrCSAgICBnb3RvIG5leHRfY2hhcjsKKyAJICBpZiAoYmVnICsgbGVuIDwgYnVmICsgc2l6ZSAmJiBiZWdbbGVuXSAhPSBlb2wpCistCSAgICBjb250aW51ZTsKKysJICAgIGdvdG8gbmV4dF9jaGFyOworIAkgIGdvdG8gc3VjY2VzczsKKyAJfQorICAgICAgIGVsc2UgaWYgKG1hdGNoX3dvcmRzKQorLQlmb3IgKHRyeSA9IGJlZzsgbGVuOyApCistCSAgeworLQkgICAgaWYgKHRyeSA+IGJ1ZiAmJiBXQ0hBUigodW5zaWduZWQgY2hhcikgdHJ5Wy0xXSkpCistCSAgICAgIGJyZWFrOworLQkgICAgaWYgKHRyeSArIGxlbiA8IGJ1ZiArIHNpemUgJiYgV0NIQVIoKHVuc2lnbmVkIGNoYXIpIHRyeVtsZW5dKSkKKy0JICAgICAgeworLQkJb2Zmc2V0ID0ga3dzZXhlYyAoa3dzZXQsIGJlZywgLS1sZW4sICZrd3NtYXRjaCk7CistCQlpZiAob2Zmc2V0ID09IChzaXplX3QpIC0xKQorLQkJICB7CisrCXsKKysJICB3aGlsZSAobGVuKQorKwkgICAgeworKwkgICAgICBpbnQgd29yZF9tYXRjaCA9IDA7CisrCSAgICAgIGlmIChiZWcgPiBidWYpCisrCQl7CisgI2lmZGVmIE1CU19TVVBQT1JUCistCQkgICAgaWYgKE1CX0NVUl9NQVggPiAxKQorLQkJICAgICAgZnJlZSAobWJfcHJvcGVydGllcyk7CisrCQkgIGlmIChtYl9jdXJfbWF4ID4gMSkKKysJCSAgICB7CisrCQkgICAgICBjb25zdCBjaGFyICpzOworKwkJICAgICAgaW50IG1yOworKwkJICAgICAgd2NoYXJfdCBwd2M7CisrCisrCQkgICAgICBpZiAodXNpbmdfdXRmOCkKKysJCQl7CisrCQkJICBzID0gYmVnIC0gMTsKKysJCQkgIHdoaWxlIChzID4gYnVmCisrCQkJCSAmJiAodW5zaWduZWQgY2hhcikgKnMgPj0gMHg4MAorKwkJCQkgJiYgKHVuc2lnbmVkIGNoYXIpICpzIDw9IDB4YmYpCisrCQkJICAgIC0tczsKKysJCQl9CisrCQkgICAgICBlbHNlCisrCQkJcyA9IGxhc3RfY2hhcjsKKysJCSAgICAgIG1yID0gbWJ0b3djICgmcHdjLCBzLCBiZWcgLSBzKTsKKysJCSAgICAgIGlmIChtciA8PSAwKQorKwkJCW1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysJCSAgICAgIGVsc2UgaWYgKChpc3dhbG51bSAocHdjKSB8fCBwd2MgPT0gTCdfJykKKysJCQkgICAgICAgJiYgbXIgPT0gKGludCkgKGJlZyAtIHMpKQorKwkJCWdvdG8gbmV4dF9jaGFyOworKwkJICAgIH0KKysJCSAgZWxzZQorICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworLQkJICAgIHJldHVybiBvZmZzZXQ7CistCQkgIH0KKy0JCXRyeSA9IGJlZyArIG9mZnNldDsKKy0JCWxlbiA9IGt3c21hdGNoLnNpemVbMF07CistCSAgICAgIH0KKy0JICAgIGVsc2UKKy0JICAgICAgZ290byBzdWNjZXNzOworLQkgIH0KKysJCSAgaWYgKFdDSEFSICgodW5zaWduZWQgY2hhcikgYmVnWy0xXSkpCisrCQkgICAgZ290byBuZXh0X2NoYXI7CisrCQl9CisrI2lmZGVmIE1CU19TVVBQT1JUCisrCSAgICAgIGlmIChtYl9jdXJfbWF4ID4gMSkKKysJCXsKKysJCSAgd2NoYXJfdCBud2M7CisrCQkgIGludCBtcjsKKysKKysJCSAgbXIgPSBtYnRvd2MgKCZud2MsIGJlZyArIGxlbiwgYnVmICsgc2l6ZSAtIGJlZyAtIGxlbik7CisrCQkgIGlmIChtciA8PSAwKQorKwkJICAgIHsKKysJCSAgICAgIG1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysJCSAgICAgIHdvcmRfbWF0Y2ggPSAxOworKwkJICAgIH0KKysJCSAgZWxzZSBpZiAoIWlzd2FsbnVtIChud2MpICYmIG53YyAhPSBMJ18nKQorKwkJICAgIHdvcmRfbWF0Y2ggPSAxOworKwkJfQorKwkgICAgICBlbHNlCisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCQlpZiAoYmVnICsgbGVuID49IGJ1ZiArIHNpemUgfHwgIVdDSEFSICgodW5zaWduZWQgY2hhcikgYmVnW2xlbl0pKQorKwkJICB3b3JkX21hdGNoID0gMTsKKysJICAgICAgaWYgKHdvcmRfbWF0Y2gpCisrCQl7CisrCQkgIGlmICghZXhhY3QpCisrCQkgICAgLyogUmV0dXJucyB0aGUgd2hvbGUgbGluZSBub3cgd2Uga25vdyB0aGVyZSdzIGEgd29yZCBtYXRjaC4gKi8KKysJCSAgICBnb3RvIHN1Y2Nlc3M7CisrCQkgIGVsc2UKKysJCSAgICAvKiBSZXR1cm5zIGp1c3QgdGhpcyB3b3JkIG1hdGNoLiAqLworKwkJICAgIGdvdG8gc3VjY2Vzc19pbl9iZWdfYW5kX2xlbjsKKysJCX0KKysJICAgICAgaWYgKGxlbiA+IDApCisrCQl7CisrCQkgIC8qIFRyeSBhIHNob3J0ZXIgbGVuZ3RoIGFuY2hvcmVkIGF0IHRoZSBzYW1lIHBsYWNlLiAqLworKwkJICAtLWxlbjsKKysJCSAgb2Zmc2V0ID0ga3dzZXhlYyAoa3dzZXQsIGJlZywgbGVuLCAma3dzbWF0Y2gpOworKworKwkJICBpZiAob2Zmc2V0ID09IC0xKQorKwkJICAgIGdvdG8gbmV4dF9jaGFyOyAvKiBUcnkgYSBkaWZmZXJlbnQgYW5jaG9yLiAqLworKyNpZmRlZiBNQlNfU1VQUE9SVAorKwkJICBpZiAobWJfY3VyX21heCA+IDEgJiYgIXVzaW5nX3V0ZjgpCisrCQkgICAgeworKwkJICAgICAgc2l6ZV90IGJ5dGVzX2xlZnQgPSBvZmZzZXQ7CisrCQkgICAgICB3aGlsZSAoYnl0ZXNfbGVmdCkKKysJCQl7CisrCQkJICBzaXplX3QgbWxlbiA9IG1icmxlbiAoYmVnLCBieXRlc19sZWZ0LCAmbWJzKTsKKysKKysJCQkgIGxhc3RfY2hhciA9IGJlZzsKKysJCQkgIGlmIChtbGVuID09IChzaXplX3QpIC0xIHx8IG1sZW4gPT0gMCkKKysJCQkgICAgeworKwkJCSAgICAgIC8qIEluY29tcGxldGUgY2hhcmFjdGVyOiB0cmVhdCBhcyBzaW5nbGUtYnl0ZS4gKi8KKysJCQkgICAgICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQkJICAgICAgYmVnKys7CisrCQkJICAgICAgYnl0ZXNfbGVmdC0tOworKwkJCSAgICAgIGNvbnRpbnVlOworKwkJCSAgICB9CisrCisrCQkJICBpZiAobWxlbiA9PSAoc2l6ZV90KSAtMikKKysJCQkgICAgeworKwkJCSAgICAgIC8qIE9mZnNldCBwb2ludHMgaW5zaWRlIG11bHRpYnl0ZSBjaGFyYWN0ZXI6CisrCQkJICAgICAgICogbm8gZ29vZC4gKi8KKysJCQkgICAgICBicmVhazsKKysJCQkgICAgfQorKworKwkJCSAgYmVnICs9IG1sZW47CisrCQkJICBieXRlc19sZWZ0IC09IG1sZW47CisrCQkJfQorKworKwkJICAgICAgaWYgKGJ5dGVzX2xlZnQpCisrCQkJeworKwkJCSAgbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkJCSAgZ290byBuZXh0X2NoYXI7IC8qIFRyeSBhIGRpZmZlcmVudCBhbmNob3IuICovCisrCQkJfQorKwkJICAgIH0KKysJCSAgZWxzZQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKwkJICBiZWcgKz0gb2Zmc2V0OworKyNpZmRlZiBNQlNfU1VQUE9SVAorKwkJICAvKiBUaGUgc3RyaW5nIGF0IGJlZyBub3cgbWF0Y2hlcyBmaXJzdCAzIGNoYXJzIG9mIG9uZSBvZgorKwkJICAgICB0aGUgc2VhcmNoIHN0cmluZ3MgKGxlc3MgaWYgdGhlcmUgYXJlIHNob3J0ZXIgc2VhcmNoCisrCQkgICAgIHN0cmluZ3MpLiAgU2VlIGlmIHRoaXMgaXMgYSByZWFsIG1hdGNoLiAgKi8KKysJCSAgaWYgKGZfaV9tdWx0aWJ5dGUKKysJCSAgICAgICYmIEZpbWJleGVjIChiZWcsIGxlbiAtIG9mZnNldCwgJmt3c21hdGNoLnNpemVbMF0sCisrCQkJCSAgIGV4YWN0KSkKKysJCSAgICBnb3RvIG5leHRfY2hhcjsKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysJCSAgbGVuID0ga3dzbWF0Y2guc2l6ZVswXTsKKysJCX0KKysJICAgIH0KKysJfQorICAgICAgIGVsc2UKKyAJZ290byBzdWNjZXNzOworLSAgICB9CistCisrbmV4dF9jaGFyOjsKKyAjaWZkZWYgTUJTX1NVUFBPUlQKKy0gIGlmIChNQl9DVVJfTUFYID4gMSkKKy0gICAgZnJlZSAobWJfcHJvcGVydGllcyk7CisrICAgICAgLyogQWR2YW5jZSB0byBuZXh0IGNoYXJhY3Rlci4gIEZvciBNQl9DVVJfTUFYID09IDEgY2FzZSB0aGlzIGlzIGhhbmRsZWQKKysJIGJ5ICsrYmVnIGFib3ZlLiAgKi8KKysgICAgICBpZiAobWJfY3VyX21heCA+IDEpCisrCXsKKysJICBpZiAodXNpbmdfdXRmOCkKKysJICAgIHsKKysJICAgICAgdW5zaWduZWQgY2hhciBjID0gKmJlZzsKKysJICAgICAgaWYgKGMgPj0gMHhjMikKKysJCXsKKysJCSAgaWYgKGMgPCAweGUwKQorKwkJICAgICsrYmVnOworKwkJICBlbHNlIGlmIChjIDwgMHhmMCkKKysJCSAgICBiZWcgKz0gMjsKKysJCSAgZWxzZSBpZiAoYyA8IDB4ZjgpCisrCQkgICAgYmVnICs9IDM7CisrCQkgIGVsc2UgaWYgKGMgPCAweGZjKQorKwkJICAgIGJlZyArPSA0OworKwkJICBlbHNlIGlmIChjIDwgMHhmZSkKKysJCSAgICBiZWcgKz0gNTsKKysJCX0KKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIHNpemVfdCBsID0gbWJybGVuIChiZWcsIGJ1ZiArIHNpemUgLSBiZWcsICZtYnMpOworKworKwkgICAgICBsYXN0X2NoYXIgPSBiZWc7CisrCSAgICAgIGlmIChsICsgMiA+PSAyKQorKwkJYmVnICs9IGwgLSAxOworKwkgICAgICBlbHNlCisrCQltZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCSAgICB9CisrCX0KKyAjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysgICAgfQorKworKyBmYWlsdXJlOgorICAgcmV0dXJuIC0xOworIAorICBzdWNjZXNzOgorKyNpZmRlZiBNQlNfU1VQUE9SVAorKyAgaWYgKG1iX2N1cl9tYXggPiAxICYmICF1c2luZ191dGY4KQorKyAgICB7CisrICAgICAgZW5kID0gYmVnICsgbGVuOworKyAgICAgIHdoaWxlIChlbmQgPCBidWYgKyBzaXplKQorKwl7CisrCSAgc2l6ZV90IG1sZW4gPSBtYnJsZW4gKGVuZCwgYnVmICsgc2l6ZSAtIGVuZCwgJm1icyk7CisrCSAgaWYgKG1sZW4gPT0gKHNpemVfdCkgLTEgfHwgbWxlbiA9PSAoc2l6ZV90KSAtMiB8fCBtbGVuID09IDApCisrCSAgICB7CisrCSAgICAgIG1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysJICAgICAgbWxlbiA9IDE7CisrCSAgICB9CisrCSAgaWYgKG1sZW4gPT0gMSAmJiAqZW5kID09IGVvbCkKKysJICAgIGJyZWFrOworKworKwkgIGVuZCArPSBtbGVuOworKwl9CisrICAgIH0KKysgIGVsc2UKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKyAgIGVuZCA9IG1lbWNociAoYmVnICsgbGVuLCBlb2wsIChidWYgKyBzaXplKSAtIChiZWcgKyBsZW4pKTsKKysKKyAgIGVuZCsrOworICAgd2hpbGUgKGJ1ZiA8IGJlZyAmJiBiZWdbLTFdICE9IGVvbCkKKyAgICAgLS1iZWc7CistICAqbWF0Y2hfc2l6ZSA9IGVuZCAtIGJlZzsKKy0jaWZkZWYgTUJTX1NVUFBPUlQKKy0gIGlmIChNQl9DVVJfTUFYID4gMSkKKy0gICAgZnJlZSAobWJfcHJvcGVydGllcyk7CistI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrICBsZW4gPSBlbmQgLSBiZWc7CisrICAvKiBGQUxMVEhST1VHSCAqLworKworKyBzdWNjZXNzX2luX2JlZ19hbmRfbGVuOgorKyAgKm1hdGNoX3NpemUgPSBsZW47CisgICByZXR1cm4gYmVnIC0gYnVmOworIH0KKyAKK0BAIC03MDEsOCArMTI2Nyw5IEBAIFBleGVjdXRlIChjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgKm1hdGNoX3NpemUsIGludCBleGFjdCkKKyAgICAgICBjaGFyIGVvbCA9IGVvbGJ5dGU7CisgICAgICAgaWYgKCFleGFjdCkKKyAJeworLQkgIGVuZCA9IG1lbWNociAoZW5kLCBlb2wsIGJ1ZmxpbSAtIGVuZCk7CistCSAgZW5kKys7CisrCSAgd2hpbGUgKGVuZCA8IGJ1ZmxpbSkKKysJICAgIGlmICgqZW5kKysgPT0gZW9sKQorKwkgICAgICBicmVhazsKKyAJICB3aGlsZSAoYnVmIDwgYmVnICYmIGJlZ1stMV0gIT0gZW9sKQorIAkgICAgLS1iZWc7CisgCX0KKy0tIAorMS44LjQuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2dyZXBfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9ncmVwX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2NjZTVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9ncmVwX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDUyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworYXV0b21ha2UgMS4xMiBoYXMgZGVwcmljYXRlZCBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0CisKK3RoaXMgcGF0Y2ggYXZvaWRzIHRoZXNlIGtpbmRzIG9mIGVycm9yczoKKworfCBjb25maWd1cmUuaW46MzM6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKK3wgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9zaGFyZS9hY2xvY2FsLTEuMTIvcHJvdG9zLm00OjEyOiBBTV9DX1BST1RPVFlQRVMgaXMgZXhwYW5kZWQgZnJvbS4uLgorfCBjb25maWd1cmUuaW46MzM6IHRoZSB0b3AgbGV2ZWwKK3wgYXV0b200dGU6IG00IGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzOiAxCisuLi4KK3wgbGliL01ha2VmaWxlLmFtOjI6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKK3wgc3JjL01ha2VmaWxlLmFtOjI6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKK3wgYXV0b3JlY29uZjogYXV0b21ha2UgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXM6IDEKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDUvMDQKKworSW5kZXg6IGdyZXAtMi41LjFhL2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdyZXAtMi41LjFhLm9yaWcvY29uZmlndXJlLmluCisrKysgZ3JlcC0yLjUuMWEvY29uZmlndXJlLmluCitAQCAtMzAsNyArMzAsNiBAQCBBQ19QUk9HX1JBTkxJQgorIAorIGRubCBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgorIEFDX1NZU19MQVJHRUZJTEUKKy1BTV9DX1BST1RPVFlQRVMKKyBBQ19UWVBFX1NJWkVfVAorIEFDX0NIRUNLX1RZUEUoc3NpemVfdCwgaW50KQorIEFDX0NfQ09OU1QKK0luZGV4OiBncmVwLTIuNS4xYS9saWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncmVwLTIuNS4xYS5vcmlnL2xpYi9NYWtlZmlsZS5hbQorKysrIGdyZXAtMi41LjFhL2xpYi9NYWtlZmlsZS5hbQorQEAgLTEsNSArMSw1IEBACisgIworLUFVVE9NQUtFX09QVElPTlMgPSAuLi9zcmMvYW5zaTJrbnIKKytBVVRPTUFLRV9PUFRJT05TID0gCisgCisgU1VCRElSUyA9IHBvc2l4CisgCitJbmRleDogZ3JlcC0yLjUuMWEvc3JjL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3JlcC0yLjUuMWEub3JpZy9zcmMvTWFrZWZpbGUuYW0KKysrKyBncmVwLTIuNS4xYS9zcmMvTWFrZWZpbGUuYW0KK0BAIC0xLDUgKzEsNSBAQAorICMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gY3JlYXRlIE1ha2VmaWxlLmluCistQVVUT01BS0VfT1BUSU9OUyA9IGFuc2kya25yIG5vLWRlcGVuZGVuY2llcworK0FVVE9NQUtFX09QVElPTlMgPSBuby1kZXBlbmRlbmNpZXMKKyAKKyBMTiA9IGxuCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL3VjbGliYy1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL3VjbGliYy1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUwNTRmYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvdWNsaWJjLWZpeC5wYXRjaApAQCAtMCwwICsxLDU1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworIyBGaXggdG8gdXNlIG1lbXBjcHkgaW5zdGVhZCBvZiBfX21lbXBjcHkuIFRoaXMgaXMgbmVlZGVkIGZvciB1Y2xpYmMgd2hpY2gKKyMgZG9lc24ndCBkZWZpbmUgX19tZW1wY3B5LCBvbmx5IG1lbXBjcHkuIFNpbmNlIGJvdGggdWNsaWJjIGFuZCBnbGliYyBoYXZlCisjIG1lbXBjcHksIHdlJ2xsIGp1c3QgdXNlIHRoYXQgaW5zdGVhZC4KKyMgUGF0Y2ggc291cmNlOiBPcGVuRW1iZWRkZWQKKworSW5kZXg6IGdyZXAtMi41LjEvaW50bC9sb2NhbGVhbGlhcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3JlcC0yLjUuMS5vcmlnL2ludGwvbG9jYWxlYWxpYXMuYwkyMDAyLTAzLTE0IDAwOjM5OjA2LjAwMDAwMDAwMCArMTEwMAorKysrIGdyZXAtMi41LjEvaW50bC9sb2NhbGVhbGlhcy5jCTIwMDctMDUtMTcgMTM6NTM6NTguMDAwMDAwMDAwICsxMDAwCitAQCAtNjUsNyArNjUsNyBAQAorICMgZGVmaW5lIHN0cmNhc2VjbXAgX19zdHJjYXNlY21wCisgCisgIyBpZm5kZWYgbWVtcGNweQorLSMgIGRlZmluZSBtZW1wY3B5IF9fbWVtcGNweQorKyMgIGVycm9yICJtZW1wY3B5IG5vdCBkZXRlY3RlZCIKKyAjIGVuZGlmCisgIyBkZWZpbmUgSEFWRV9NRU1QQ1BZCTEKKyAjIGRlZmluZSBIQVZFX19fRlNFVExPQ0tJTkcJMQorSW5kZXg6IGdyZXAtMi41LjEvbGliL2dldG9wdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3JlcC0yLjUuMS5vcmlnL2xpYi9nZXRvcHQuYwkyMDAxLTAzLTA0IDE2OjMzOjEyLjAwMDAwMDAwMCArMTEwMAorKysrIGdyZXAtMi41LjEvbGliL2dldG9wdC5jCTIwMDctMDUtMTcgMTM6NTE6NDQuMDAwMDAwMDAwICsxMDAwCitAQCAtMzI2LDcgKzMyNiw3IEBACisgCW5vbm9wdGlvbl9mbGFnc19sZW4gPSBub25vcHRpb25fZmxhZ3NfbWF4X2xlbiA9IDA7CisgICAgICAgZWxzZQorIAl7CistCSAgbWVtc2V0IChfX21lbXBjcHkgKG5ld19zdHIsIF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFncywKKysJICBtZW1zZXQgKG1lbXBjcHkgKG5ld19zdHIsIF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFncywKKyAJCQkgICAgIG5vbm9wdGlvbl9mbGFnc19tYXhfbGVuKSwKKyAJCSAgJ1wwJywgdG9wICsgMSAtIG5vbm9wdGlvbl9mbGFnc19tYXhfbGVuKTsKKyAJICBub25vcHRpb25fZmxhZ3NfbWF4X2xlbiA9IHRvcCArIDE7CitAQCAtNDM3LDcgKzQzNyw3IEBACisgCSAgICAgIGlmIChfX2dldG9wdF9ub25vcHRpb25fZmxhZ3MgPT0gTlVMTCkKKyAJCW5vbm9wdGlvbl9mbGFnc19tYXhfbGVuID0gLTE7CisgCSAgICAgIGVsc2UKKy0JCW1lbXNldCAoX19tZW1wY3B5IChfX2dldG9wdF9ub25vcHRpb25fZmxhZ3MsIG9yaWdfc3RyLCBsZW4pLAorKwkJbWVtc2V0IChtZW1wY3B5IChfX2dldG9wdF9ub25vcHRpb25fZmxhZ3MsIG9yaWdfc3RyLCBsZW4pLAorIAkJCSdcMCcsIG5vbm9wdGlvbl9mbGFnc19tYXhfbGVuIC0gbGVuKTsKKyAJICAgIH0KKyAJfQorSW5kZXg6IGdyZXAtMi41LjEvbGliL3JlZ2V4LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncmVwLTIuNS4xLm9yaWcvbGliL3JlZ2V4LmMJMjAwMS0wNC0wMyAwNDowNDo0NS4wMDAwMDAwMDAgKzEwMDAKKysrKyBncmVwLTIuNS4xL2xpYi9yZWdleC5jCTIwMDctMDUtMTcgMTM6NTE6NDguMDAwMDAwMDAwICsxMDAwCitAQCAtNzg0Miw3ICs3ODQyLDcgQEAKKyAgICAgICBpZiAobXNnX3NpemUgPiBlcnJidWZfc2l6ZSkKKyAgICAgICAgIHsKKyAjaWYgZGVmaW5lZCBIQVZFX01FTVBDUFkgfHwgZGVmaW5lZCBfTElCQworLQkgICooKGNoYXIgKikgX19tZW1wY3B5IChlcnJidWYsIG1zZywgZXJyYnVmX3NpemUgLSAxKSkgPSAnXDAnOworKwkgICooKGNoYXIgKikgbWVtcGNweSAoZXJyYnVmLCBtc2csIGVycmJ1Zl9zaXplIC0gMSkpID0gJ1wwJzsKKyAjZWxzZQorICAgICAgICAgICBtZW1jcHkgKGVycmJ1ZiwgbXNnLCBlcnJidWZfc2l6ZSAtIDEpOworICAgICAgICAgICBlcnJidWZbZXJyYnVmX3NpemUgLSAxXSA9IDA7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMWE0YmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZ251bGliLm1rIGIvbGliL2dudWxpYi5taworaW5kZXggZTFkNzRkYi4uYzBlOTJkZCAxMDA2NDQKKy0tLSBhL2xpYi9nbnVsaWIubWsKKysrKyBiL2xpYi9nbnVsaWIubWsKK0BAIC0xODgyLDcgKzE4ODIsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAvZ3JlcC1maXgtQ1ZFLTIwMTUtMTM0NS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC9ncmVwLWZpeC1DVkUtMjAxNS0xMzQ1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4OGE5ODgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAvZ3JlcC1maXgtQ1ZFLTIwMTUtMTM0NS5wYXRjaApAQCAtMCwwICsxLDE1NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitCYWNrcG9ydCBwYXRjaCB0byBmaXggQ1ZFLTIwMTUtMTM0NS4KK2h0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9jZ2l0L2dyZXAuZ2l0L2NvbW1pdC8/aWQ9ODNhOTViZAorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorRnJvbSA4M2E5NWJkOGM4NTYxODc1Yjk0OGNhZGQ0MTdjNjUzZGJlN2VmMmUyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogWXVsaXkgUGlzZXRza3kgPHlwaXNldHNreUBmYi5jb20+CitEYXRlOiBUaHUsIDEgSmFuIDIwMTUgMTU6MzY6NTUgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gZ3JlcCAtRjogZml4IGEgaGVhcCBidWZmZXIgKHJlYWQpIG92ZXJydW4KKworZ3JlcCdzIHJlYWQgYnVmZmVyIGlzIG9mdGVuIGZpbGxlZCB0byBpdHMgZnVsbCBzaXplLCBleGNlcHQgd2hlbgorcmVhZGluZyB0aGUgZmluYWwgYnVmZmVyIG9mIGEgZmlsZS4gIEluIHRoYXQgY2FzZSwgdGhlIG51bWJlciBvZgorYnl0ZXMgcmVhZCBtYXkgYmUgZmFyIGxlc3MgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyLiAgSG93ZXZlciwgZm9yCitjZXJ0YWluIHVudXN1YWwgcGF0dGVybi90ZXh0IGNvbWJpbmF0aW9ucywgZ3JlcCAtRiB3b3VsZCBtaXN0YWtlbmx5CitleGFtaW5lIGJ5dGVzIGluIHRoYXQgdW5pbml0aWFsaXplZCByZWdpb24gb2YgbWVtb3J5IHdoZW4gc2VhcmNoaW5nCitmb3IgYSBtYXRjaC4gIFdpdGggY2FyZWZ1bGx5IGNob3NlbiBpbnB1dHMsIG9uZSBjYW4gY2F1c2UgZ3JlcCAtRiB0bworcmVhZCBiZXlvbmQgdGhlIGVuZCBvZiB0aGF0IGJ1ZmZlciBhbHRvZ2V0aGVyLiAgVGhpcyBwcm9ibGVtIGFyb3NlIHZpYQorY29tbWl0IHYyLjE4LTkwLWc3Mzg5M2ZmIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBhIG1vcmUgZWZmaWNpZW50CitoZXVyaXN0aWMgdXNpbmcgd2hhdCBpcyBub3cgdGhlIG1lbWNocl9rd3NldCBmdW5jdGlvbi4gVGhlIHVzZSBvZgordGhhdCBmdW5jdGlvbiBpbiBibWV4ZWNfdHJhbnMgY291bGQgbGVhdmUgVFAgbXVjaCBsYXJnZXIgdGhhbiBFUCwKK2FuZCB0aGUgc3Vic2VxdWVudCBjYWxsIHRvIGJtX2RlbHRhMl9zZWFyY2ggd291bGQgbWlzdGFrZW5seSBhY2Nlc3MKK2JleW9uZCBlbmQgb2YgdGhlIG1haW4gaW5wdXQgcmVhZCBidWZmZXIuCisKKyogc3JjL2t3c2V0LmMgKGJtZXhlY190cmFucyk6IFdoZW4gVFAgcmVhY2hlcyBvciBleGNlZWRzIEVQLAorZG8gbm90IGNhbGwgYm1fZGVsdGEyX3NlYXJjaC4KKyogdGVzdHMva3dzZXQtYWJ1c2U6IE5ldyBmaWxlLgorKiB0ZXN0cy9NYWtlZmlsZS5hbSAoVEVTVFMpOiBBZGQgaXQuCisqIFRIQU5LUy5pbjogVXBkYXRlLgorKiBORVdTIChCdWcgZml4ZXMpOiBNZW50aW9uIGl0LgorCitQcmlvciB0byB0aGlzIHBhdGNoLCB0aGlzIGNvbW1hbmQgd291bGQgdHJpZ2dlciBhIFVNUjoKKworICBwcmludGYgJTAzNjBkYiAwIHwgdmFsZ3JpbmQgc3JjL2dyZXAgLUYgJChwcmludGYgJTAxOWRYYiAwKQorCisgIFVzZSBvZiB1bmluaXRpYWxpc2VkIHZhbHVlIG9mIHNpemUgOAorICAgICBhdCAweDQxNDJCRTogYm1leGVjX3RyYW5zIChrd3NldC5jOjY1NykKKyAgICAgYnkgMHg0MTQzQ0E6IGJtZXhlYyAoa3dzZXQuYzo2NzgpCisgICAgIGJ5IDB4NDE0OTczOiBrd3NleGVjIChrd3NldC5jOjg0OCkKKyAgICAgYnkgMHg0MTREQzQ6IEZleGVjdXRlIChrd3NlYXJjaC5jOjEyOCkKKyAgICAgYnkgMHg0MDRFMkU6IGdyZXBidWYgKGdyZXAuYzoxMjM4KQorICAgICBieSAweDQwNTRCRjogZ3JlcCAoZ3JlcC5jOjE0MTcpCisgICAgIGJ5IDB4NDA1Q0VCOiBncmVwZGVzYyAoZ3JlcC5jOjE2NDUpCisgICAgIGJ5IDB4NDA1RUMxOiBncmVwX2NvbW1hbmRfbGluZV9hcmcgKGdyZXAuYzoxNjkyKQorICAgICBieSAweDQwNzdENDogbWFpbiAoZ3JlcC5jOjI1NzApCisKK1NlZSB0aGUgYWNjb21wYW55aW5nIHRlc3QgZm9yIGhvdyB0byB0cmlnZ2VyIHRoZSBoZWFwIGJ1ZmZlciBvdmVycnVuLgorCitUaGFua3MgdG8gTmltYSBBZ2hkYWlpIGZvciB0ZXN0aW5nIGFuZCBmaW5kaW5nIG51bWVyb3VzCit3YXlzIHRvIGJyZWFrIGVhcmx5IGl0ZXJhdGlvbnMgb2YgdGhpcyBwYXRjaC4KKy0tLQorIE5FV1MgICAgICAgICAgICAgIHwgIDUgKysrKysKKyBUSEFOS1MuaW4gICAgICAgICB8ICAxICsKKyBzcmMva3dzZXQuYyAgICAgICB8ICAyICsrCisgdGVzdHMvTWFrZWZpbGUuYW0gfCAgMSArCisgdGVzdHMva3dzZXQtYWJ1c2UgfCAzMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDUgZmlsZXMgY2hhbmdlZCwgNDEgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDc1NSB0ZXN0cy9rd3NldC1hYnVzZQorCitkaWZmIC0tZ2l0IGEvTkVXUyBiL05FV1MKK2luZGV4IDk3NTQ0MGQuLjM4MzVkOGQgMTAwNjQ0CistLS0gYS9ORVdTCisrKysgYi9ORVdTCitAQCAtMiw2ICsyLDExIEBAIEdOVSBncmVwIE5FV1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gb3V0bGluZSAtKi0KKyAKKyAqIE5vdGV3b3J0aHkgY2hhbmdlcyBpbiByZWxlYXNlID8uPyAoPz8/Py0/Py0/PykgWz9dCisgCisrKiogQnVnIGZpeGVzCisrCisrICBncmVwIG5vIGxvbmdlciByZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGZyb20gYmV5b25kIHRoZSBlbmQKKysgIG9mIHRoZSBoZWFwLWFsbG9jYXRlZCBpbnB1dCBidWZmZXIuCisrCisgCisgKiBOb3Rld29ydGh5IGNoYW5nZXMgaW4gcmVsZWFzZSAyLjIxICgyMDE0LTExLTIzKSBbc3RhYmxlXQorIAorZGlmZiAtLWdpdCBhL1RIQU5LUy5pbiBiL1RIQU5LUy5pbgoraW5kZXggYWVhZjUxNi4uNjI0NDc4ZCAxMDA2NDQKKy0tLSBhL1RIQU5LUy5pbgorKysrIGIvVEhBTktTLmluCitAQCAtNjIsNiArNjIsNyBAQCBNaWNoYWVsIEFpY2hsbWF5ciAgICAgICAgICAgICAgICAgICBtaWtsYUBueC5jb20KKyBNaWxlcyBCYWRlciAgICAgICAgICAgICAgICAgICAgICAgICBtaWxlc0BjY3MubXQubmVjLmNvLmpwCisgTWlycmF6IE1pcnJheiAgICAgICAgICAgICAgICAgICAgICAgbWlycmF6MUByYW1ibGVyLnJ1CisgTmVsc29uIEguIEYuIEJlZWJlICAgICAgICAgICAgICAgICAgYmVlYmVAbWF0aC51dGFoLmVkdQorK05pbWEgQWdoZGFpaSAgICAgICAgICAgICAgICAgICAgICAgIG5hZ2hkYWlpQGZiLmNvbQorIE9sYWYgS2lyY2ggICAgICAgICAgICAgICAgICAgICAgICAgIG9raXJAbnMubHN0LmRlCisgUGF1bCBLaW1vdG8gICAgICAgICAgICAgICAgICAgICAgICAga2ltb3RvQHNwYWNlbmV0LnRuLmNvcm5lbGwuZWR1CisgUMOpdGVyIFJhZGljcyAgICAgICAgICAgICAgICAgICAgICAgIG1pdGNobnVsbEBnbWFpbC5jb20KK2RpZmYgLS1naXQgYS9zcmMva3dzZXQuYyBiL3NyYy9rd3NldC5jCitpbmRleCA0MDAzYzhkLi4zNzZmN2MzIDEwMDY0NAorLS0tIGEvc3JjL2t3c2V0LmMKKysrKyBiL3NyYy9rd3NldC5jCitAQCAtNjQzLDYgKzY0Myw4IEBAIGJtZXhlY190cmFucyAoa3dzZXRfdCBrd3NldCwgY2hhciBjb25zdCAqdGV4dCwgc2l6ZV90IHNpemUpCisgICAgICAgICAgICAgICAgICAgICBpZiAoISB0cCkKKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICAgdHArKzsKKysgICAgICAgICAgICAgICAgICAgIGlmIChlcCA8PSB0cCkKKysgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgfQorICAgICAgICAgICB9CitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggMmNiYTJjZC4uMDUwOGNkMiAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTc1LDYgKzc1LDcgQEAgVEVTVFMgPQkJCQkJCVwKKyAgIGluY29uc2lzdGVudC1yYW5nZQkJCQlcCisgICBpbnZhbGlkLW11bHRpYnl0ZS1pbmZsb29wCQkJXAorICAga2hhZGFmeQkJCQkJXAorKyAga3dzZXQtYWJ1c2UJCQkJCVwKKyAgIGxvbmctbGluZS12cy0yR2lCLXJlYWQJCQlcCisgICBtYXRjaC1saW5lcwkJCQkJXAorICAgbWF4LWNvdW50LW92ZXJyZWFkCQkJCVwKK2RpZmYgLS1naXQgYS90ZXN0cy9rd3NldC1hYnVzZSBiL3Rlc3RzL2t3c2V0LWFidXNlCituZXcgZmlsZSBtb2RlIDEwMDc1NQoraW5kZXggMDAwMDAwMC4uNmQ4ZWMwYworLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdHMva3dzZXQtYWJ1c2UKK0BAIC0wLDAgKzEsMzIgQEAKKysjISAvYmluL3NoCisrIyBFdm9rZSBhIHNlZ2ZhdWx0IGluIGEgaGFyZC10by1yZWFjaCBjb2RlIHBhdGggb2Yga3dzZXQuYy4KKysjIFRoaXMgYnVnIGFmZmVjdGVkIGdyZXAgdmVyc2lvbnMgMi4xOSB0aHJvdWdoIDIuMjEuCisrIworKyMgQ29weXJpZ2h0IChDKSAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKworKy4gIiR7c3JjZGlyPS59L2luaXQuc2giOyBwYXRoX3ByZXBlbmRfIC4uL3NyYworKworK2ZhaWw9MAorKworKyMgVGhpcyB0ZXN0IGNhc2UgY2hvb3NlcyBhIGhheXN0YWNrIG9mIHNpemUgMjYwLDAwMCwgc2luY2UgcHJvZGRpbmcKKysjIHdpdGggZ2RiIHNob3dlZCBhIHJlYWxsb2NhdGlvbiBzbGlnaHRseSBsYXJnZXIgdGhhbiB0aGF0IGluIGZpbGxidWYuCisrIyBUbyByZWFjaCB0aGUgYnVnZ3kgY29kZSwgdGhlIG5lZWRsZSBtdXN0IGhhdmUgbGVuZ3RoIDwgMS8xMSB0aGF0IG9mCisrIyB0aGUgaGF5c3RhY2ssIGFuZCAxMCwwMDAgaXMgYSBuaWNlIHJvdW5kIG51bWJlciB0aGF0IGZpdHMgdGhlIGJpbGwuCisrcHJpbnRmICclMDI2MDAwMGRYeVxuJyAwIHwgZ3JlcCAtRiAkKHByaW50ZiAlMDEwMDAwZHkgMCkKKysKKyt0ZXN0ICQ/ID0gMSB8fCBmYWlsPTEKKysKKytFeGl0ICRmYWlsCistLSAKKzIuNC4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcF8yLjIxLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwXzIuMjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY2MTA5OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcF8yLjIxLmJiCkBAIC0wLDAgKzEsNDIgQEAKK1NVTU1BUlkgPSAiR05VIGdyZXAgdXRpbGl0eSIKK0hPTUVQQUdFID0gImh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL3Byb2plY3RzL2dyZXAvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9idWdzLz9ncm91cD1ncmVwIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTgwMDZkOWM4MTQyNzdjMWJmYzRjYTIyYWY5NGI1OWVlIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ3JlcC9ncmVwLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dyZXAtZml4LUNWRS0yMDE1LTEzNDUucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjQzYzQ4MDY0ZDY0MDk4NjJiOGE4NTBkYjgzYzgwMzhhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUyNDRhMTFjMDBkZWU4ZTdlNWU3MTRiOWFhYTA1M2FjNmNiZmEyN2UxMDRhYmVlMjBkM2M3NzhlNGJiMGU1ZGUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXBlcmwtcmVnZXhwIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJcm0gLWYgJHtTfS9tNC9pbml0Lm00Cit9CisKK2RvX2luc3RhbGwgKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwltdiAke0R9JHtiaW5kaXJ9L2dyZXAgJHtEfSR7YmFzZV9iaW5kaXJ9L2dyZXAKKwltdiAke0R9JHtiaW5kaXJ9L2VncmVwICR7RH0ke2Jhc2VfYmluZGlyfS9lZ3JlcAorCW12ICR7RH0ke2JpbmRpcn0vZmdyZXAgJHtEfSR7YmFzZV9iaW5kaXJ9L2ZncmVwCisJcm1kaXIgJHtEfSR7YmluZGlyfS8KK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiZ3JlcCBlZ3JlcCBmZ3JlcCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtncmVwXSA9ICIke2Jhc2VfYmluZGlyfS9ncmVwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2VncmVwXSA9ICIke2Jhc2VfYmluZGlyfS9lZ3JlcCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtmZ3JlcF0gPSAiJHtiYXNlX2JpbmRpcn0vZmdyZXAiCisKK2V4cG9ydCBDT05GSUdfU0hFTEw9Ii9iaW4vc2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXBfMi41LjFhLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwXzIuNS4xYS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTJkYTI4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwXzIuNS4xYS5iYgpAQCAtMCwwICsxLDU2IEBACitTVU1NQVJZID0gIlBhdHRlcm4gbWF0Y2hpbmcgdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiVGhlIEdOVSB2ZXJzaW9ucyBvZiBjb21tb25seSB1c2VkIGdyZXAgdXRpbGl0aWVzLiAgVGhlIGdyZXAgY29tbWFuZCBzZWFyY2hlcyBvbmUgb3IgbW9yZSBpbnB1dCBcCitmaWxlcyBmb3IgbGluZXMgY29udGFpbmluZyBhIG1hdGNoIHRvIGEgc3BlY2lmaWVkIHBhdHRlcm4uIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIgorCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2dyZXAvZ3JlcC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3VjbGliYy1maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3JlcF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ2V0dGV4dC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXg2NC1pbnQtdG8tcG9pbnRlci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtldmFycyBcCisgICAgICAgICAgIGZpbGU6Ly9ncmVwLUNWRS0yMDEyLTU2NjcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWZvci10ZXhpbmZvLTUuMS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncmVwLWVncmVwLWZncmVwLUZpeC1MU0ItTkctY2FzZXMucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjUyMjAyZmU0NjI3NzBmYTZiZTFiYjY2N2JkNmNmMzBjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjM4YzhhMmJiOTIyM2QxZmIxYjEwYmRkNjA3Y2Y0NDgzMGFmYzkyZmQ0NTFhYzRjZDA3NjE5YmY5MmJkZDMxMzIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCitFWFRSQV9PRUNPTkZfSU5DTFVERURfUkVHRVggPSAiLS13aXRob3V0LWluY2x1ZGVkLXJlZ2V4IgorRVhUUkFfT0VDT05GX0lOQ0xVREVEX1JFR0VYX2xpYmMtbXVzbCA9ICItLXdpdGgtaW5jbHVkZWQtcmVnZXgiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtcGVybC1yZWdleHAgXAorICAgICAgICAgICAgICAgICR7RVhUUkFfT0VDT05GX0lOQ0xVREVEX1JFR0VYfSIKKworQ0ZMQUdTICs9ICItRCBQUk9UT1RZUEVTIgorZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXJtIC1mICR7U30vbTQvaW5pdC5tNAorCWNwIC1mICR7V09SS0RJUn0vTWFrZXZhcnMgJHtTfS9wby8KK30KKworZG9faW5zdGFsbCAoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCW12ICR7RH0ke2JpbmRpcn0vZ3JlcCAke0R9JHtiYXNlX2JpbmRpcn0vZ3JlcAorCW12ICR7RH0ke2JpbmRpcn0vZWdyZXAgJHtEfSR7YmFzZV9iaW5kaXJ9L2VncmVwCisJbXYgJHtEfSR7YmluZGlyfS9mZ3JlcCAke0R9JHtiYXNlX2JpbmRpcn0vZmdyZXAKKwlybWRpciAke0R9JHtiaW5kaXJ9LworfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJncmVwIGVncmVwIGZncmVwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2dyZXBdID0gIiR7YmFzZV9iaW5kaXJ9L2dyZXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZWdyZXBdID0gIiR7YmFzZV9iaW5kaXJ9L2VncmVwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2ZncmVwXSA9ICIke2Jhc2VfYmluZGlyfS9mZ3JlcCIKKworZXhwb3J0IENPTkZJR19TSEVMTD0iL2Jpbi9zaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L2dyb2ZmLTEuMTguMS40LWZpeC1iaW5kaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjE4LjEuNC9ncm9mZi0xLjE4LjEuNC1maXgtYmluZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OWFlNzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjE4LjEuNC9ncm9mZi0xLjE4LjEuNC1maXgtYmluZGlyLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWRdCisKK1NpZ25lZC1vZmYtYnk6IE1pbmcgTGl1IDxtaW5nLmxpdUB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuc3ViIHwgICAxMCArKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworLS0tIGEvY29udHJpYi9ncm9mZmVyL01ha2VmaWxlLnN1YgorKysrIGIvY29udHJpYi9ncm9mZmVyL01ha2VmaWxlLnN1YgorQEAgLTM4LDE2ICszOCwxNiBAQCBncm9mZmVyOiBncm9mZmVyLnNoIGdyb2ZmZXIyLnNoIHZlcnNpb24uCisgCSQoUk0pICRAOworIAlzZWQgXAorICAgICAgICAgICAgIC1lICJzfEBnQHwkKGcpfGciIFwKKy0JICAgIC1lICJzfEBCSU5ESVJAfCQoREVTVERJUikkKGJpbmRpcil8ZyIgXAorKwkgICAgLWUgInN8QEJJTkRJUkB8JChiaW5kaXIpfGciIFwKKyAJICAgIC1lICJzfEBsaWJkaXJAfCQoREVTVERJUikkKGxpYmRpcil8ZyIgXAorIAkgICAgLWUgInN8QFZFUlNJT05AfCQodmVyc2lvbikkKHJldmlzaW9uKXxnIiBcCisgCSAgICAkKHNyY2RpcikvZ3JvZmZlci5zaCA+JEA7CisgCWNobW9kICt4ICRACisgCisgaW5zdGFsbF9kYXRhOiBncm9mZmVyCistCS10ZXN0IC1kICQoREVTVERJUikkKGJpbmRpcikgfHwgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChiaW5kaXIpCistCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2dyb2ZmZXIKKy0JJChJTlNUQUxMX1NDUklQVCkgZ3JvZmZlciAkKERFU1RESVIpJChiaW5kaXIpL2dyb2ZmZXIKKysJLXRlc3QgLWQgJChiaW5kaXIpIHx8ICQobWtpbnN0YWxsZGlycykgJChiaW5kaXIpCisrCS0kKFJNKSAkKGJpbmRpcikvZ3JvZmZlcgorKwkkKElOU1RBTExfU0NSSVBUKSBncm9mZmVyICQoYmluZGlyKS9ncm9mZmVyCisgCS10ZXN0IC1kICQoREVTVERJUikkKGxpYmRpcikvZ3JvZmYvZ3JvZmZlciB8fCBcCisgICAgICAgICAgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKS9ncm9mZi9ncm9mZmVyCisgCS0kKFJNKSAkKERFU1RESVIpJChsaWJkaXIpL2dyb2ZmL2dyb2ZmZXIvZ3JvZmZlcjIuc2gKK0BAIC01OCw3ICs1OCw3IEBAIGluc3RhbGxfZGF0YTogZ3JvZmZlcgorIAkkKERFU1RESVIpJChsaWJkaXIpL2dyb2ZmL2dyb2ZmZXIvdmVyc2lvbi5zaAorIAorIHVuaW5zdGFsbF9zdWI6CistCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2dyb2ZmZXIKKysJLSQoUk0pICQoYmluZGlyKS9ncm9mZmVyCisgCS0kKFJNKSAkKERFU1RESVIpJChsaWJkaXIpL2dyb2ZmL2dyb2ZmZXIvZ3JvZmZlcjIuc2gKKyAJLSQoUk0pICQoREVTVERJUikkKGxpYmRpcikvZ3JvZmYvZ3JvZmZlci92ZXJzaW9uLnNoCisgCS1ybWRpciAkKERFU1RESVIpJChsaWJkaXIpL2dyb2ZmL2dyb2ZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L2dyb2ZmLTEuMTguMS40LXJlbW92ZS1tb20ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjE4LjEuNC9ncm9mZi0xLjE4LjEuNC1yZW1vdmUtbW9tLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNGVmZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjE4LjEuNC9ncm9mZi0xLjE4LjEuNC1yZW1vdmUtbW9tLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZF0KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorLS0tCisgZ3JvZmYtMS4xOC4xLjQvTWFrZWZpbGUuaW4gfCAgICA3ICstLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDYgZGVsZXRpb25zKC0pCisKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTQ2MCwyNyArNDYwLDIyIEBAIE9USEVSRElSUz1cCisgICBzcmMvcm9mZi9ncm9nIFwKKyAgIHNyYy9yb2ZmL25yb2ZmIFwKKyAgIGNvbnRyaWIvbW0gXAorICAgY29udHJpYi9waWMyZ3JhcGggXAorICAgY29udHJpYi9lcW4yZ3JhcGggXAorLSAgY29udHJpYi9ncm9mZmVyIFwKKy0gIGNvbnRyaWIvbW9tIFwKKy0gIGRvYworKyAgY29udHJpYi9ncm9mZmVyCisgQUxMRElSUz0kKElOQ0RJUlMpICQoTElCRElSUykgJChQUk9HRElSUykgXAorICAgJChERVZESVJTKSAkKE9USEVSREVWRElSUykgJChUVFlERVZESVJTKSAkKE9USEVSRElSUykKKyBFWFRSQURJUlM9XAorICAgZm9udC9kZXZwcy9nZW5lcmF0ZSBcCisgICBmb250L2RldmR2aS9nZW5lcmF0ZSBcCisgICBmb250L2RldmxqNC9nZW5lcmF0ZSBcCistICBzcmMveGRpdHZpZXcgXAorICAgZG9jCisgTk9NQUtFRElSUz1cCisgICBhcmNoL2RqZ3BwIFwKKyAgIGNvbnRyaWIvbW0vZXhhbXBsZXMgXAorICAgY29udHJpYi9tbS9tbSBcCistICBjb250cmliL21vbS9leGFtcGxlcyBcCistICBjb250cmliL21vbS9tb21kb2MgXAorICAgc3JjL2xpYnMvc25wcmludGYKKyBESVNURElSUz1cCisgICAkKElOQ0RJUlMpICQoTElCRElSUykgJChQUk9HRElSUykgJChERVZESVJTKSAkKE9USEVSREVWRElSUykgXAorICAgJChBTExUVFlERVZESVJTKSAkKE9USEVSRElSUykgJChFWFRSQURJUlMpICQoTk9NQUtFRElSUykKKyBUQVJHRVRTPWFsbCBpbnN0YWxsIGluc3RhbGxfYmluIGluc3RhbGxfZGF0YSBjbGVhbiBkaXN0Y2xlYW4gbW9zdGx5Y2xlYW4gXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4xOC4xLjQvbWFuLWxvY2FsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4xOC4xLjQvbWFuLWxvY2FsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZjFhYTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjE4LjEuNC9tYW4tbG9jYWwucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZF0KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogZ3JvZmYtMS4xOC4xLjQvdG1hYy9tYW4ubG9jYWwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncm9mZi0xLjE4LjEuNC5vcmlnL3RtYWMvbWFuLmxvY2FsCTIwMDAtMTAtMjYgMjI6MTU6MTcuMDAwMDAwMDAwICswODAwCisrKysgZ3JvZmYtMS4xOC4xLjQvdG1hYy9tYW4ubG9jYWwJMjAxMC0wOC0yNCAxNDoxNzo1Mi4wNzAwMDY2NjQgKzA4MDAKK0BAIC0xLDIgKzEsMjcgQEAKKyAuXCIgVGhpcyBmaWxlIGlzIGxvYWRlZCBhZnRlciBhbi1vbGQudG1hYy4KKyAuXCIgUHV0IGFueSBsb2NhbCBtb2RpZmljYXRpb25zIHRvIGFuLW9sZC50bWFjIGhlcmUuCisrLgorKy5pZiBuIFx7XAorKy4gIFwiIERlYmlhbjogTWFwIFwob3EgdG8gJyByYXRoZXIgdGhhbiBgIGluIG5yb2ZmIG1vZGUgZm9yIGRldmljZXMgb3RoZXIKKysuICBcIiB0aGFuIHV0ZjguCisrLiAgaWYgISdcKlsuVF0ndXRmOCcgXAorKy4gICAgdHIgXFtvcV0nCisrLgorKy4gIFwiIERlYmlhbjogRGlzYWJsZSB0aGUgdXNlIG9mIFNHUiAoQU5TSSBjb2xvdXIpIGVzY2FwZSBzZXF1ZW5jZXMgYnkKKysuICBcIiBncm90dHkuCisrLiAgaWYgJ1xWW0dST0ZGX1NHUl0nJyBcCisrLiAgICBvdXRwdXQgeCBYIHR0eTogc2dyIDAKKysuCisrLiAgXCIgRGViaWFuOiBNYXAgXC0gdG8gdGhlIFVuaWNvZGUgSFlQSEVOLU1JTlVTIGNoYXJhY3RlciwgdG8gbWFrZQorKy4gIFwiIHNlYXJjaGluZyBpbiBtYW4gcGFnZXMgZWFzaWVyLgorKy4gIGlmICdcKlsuVF0ndXRmOCcgXAorKy4gICAgY2hhciBcLSBcTic0NScKKysuCisrLiAgXCIgRGViaWFuOiBNYW55IFVURi04IG1hbiBwYWdlcyB1c2UgIi0iIGluc3RlYWQgb2YgIlwtIiBmb3IgZGFzaGVzIHN1Y2gKKysuICBcIiBhcyB0aG9zZSBpbiBjb21tYW5kLWxpbmUgb3B0aW9ucy4gVGhpcyBpcyBhIGJ1ZyBpbiB0aG9zZSBwYWdlcywgYnV0CisrLiAgXCIgdG9vIG1hbnkgZm9udHMgYXJlIG1pc3NpbmcgdGhlIFVuaWNvZGUgSFlQSEVOIGNoYXJhY3Rlciwgc28gd2UgcmVuZGVyCisrLiAgXCIgdGhpcyBhcyB0aGUgQVNDSUktY29tcGF0aWJsZSBIWVBIRU4tTUlOVVMgaW5zdGVhZC4KKysuICBpZiAnXCpbLlRdJ3V0ZjgnIFwKKysuICAgIGNoYXIgLSBcTic0NScKKysuXH0KKysKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L21kb2MtbG9jYWwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjE4LjEuNC9tZG9jLWxvY2FsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwOWMxYTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjE4LjEuNC9tZG9jLWxvY2FsLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZF0KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogZ3JvZmYtMS4xOC4xLjQvdG1hYy9tZG9jLmxvY2FsCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3JvZmYtMS4xOC4xLjQub3JpZy90bWFjL21kb2MubG9jYWwJMjAwMS0wMy0yMyAwODoxNzo1MS4wMDAwMDAwMDAgKzA4MDAKKysrKyBncm9mZi0xLjE4LjEuNC90bWFjL21kb2MubG9jYWwJMjAxMC0wOC0yNCAxNDoyMDoyMi4wMTQwMDY4NDYgKzA4MDAKK0BAIC0xLDIgKzEsMjYgQEAKKyAuXCIgVGhpcyBmaWxlIGlzIGxvYWRlZCBhZnRlciBkb2MudG1hYy4KKyAuXCIgUHV0IGFueSBsb2NhbCBtb2RpZmljYXRpb25zIHRvIGRvYy50bWFjIGhlcmUuCisrLgorKy5pZiBuIFx7XAorKy4gIFwiIERlYmlhbjogTWFwIFwob3EgdG8gJyByYXRoZXIgdGhhbiBgIGluIG5yb2ZmIG1vZGUgZm9yIGRldmljZXMgb3RoZXIKKysuICBcIiB0aGFuIHV0ZjguCisrLiAgaWYgISdcKlsuVF0ndXRmOCcgXAorKy4gICAgdHIgXFtvcV0nCisrLgorKy4gIFwiIERlYmlhbjogRGlzYWJsZSB0aGUgdXNlIG9mIFNHUiAoQU5TSSBjb2xvdXIpIGVzY2FwZSBzZXF1ZW5jZXMgYnkKKysuICBcIiBncm90dHkuCisrLiAgaWYgJ1xWW0dST0ZGX1NHUl0nJyBcCisrLiAgICBvdXRwdXQgeCBYIHR0eTogc2dyIDAKKysuCisrLiAgXCIgRGViaWFuOiBNYXAgXC0gdG8gdGhlIFVuaWNvZGUgSFlQSEVOLU1JTlVTIGNoYXJhY3RlciwgdG8gbWFrZQorKy4gIFwiIHNlYXJjaGluZyBpbiBtYW4gcGFnZXMgZWFzaWVyLgorKy4gIGlmICdcKlsuVF0ndXRmOCcgXAorKy4gICAgY2hhciBcLSBcTic0NScKKysuCisrLiAgXCIgRGViaWFuOiBNYW55IFVURi04IG1hbiBwYWdlcyB1c2UgIi0iIGluc3RlYWQgb2YgIlwtIiBmb3IgZGFzaGVzIHN1Y2gKKysuICBcIiBhcyB0aG9zZSBpbiBjb21tYW5kLWxpbmUgb3B0aW9ucy4gVGhpcyBpcyBhIGJ1ZyBpbiB0aG9zZSBwYWdlcywgYnV0CisrLiAgXCIgdG9vIG1hbnkgZm9udHMgYXJlIG1pc3NpbmcgdGhlIFVuaWNvZGUgSFlQSEVOIGNoYXJhY3Rlciwgc28gd2UgcmVuZGVyCisrLiAgXCIgdGhpcyBhcyB0aGUgQVNDSUktY29tcGF0aWJsZSBIWVBIRU4tTUlOVVMgaW5zdGVhZC4KKysuICBpZiAnXCpbLlRdJ3V0ZjgnIFwKKysuICAgIGNoYXIgLSBcTic0NScKKysuXH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMjIuMy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4yMi4zLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYxYjQzMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMjIuMy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGdyb2ZmLTEuMjIuMy9zcmMvbGlicy9nbnVsaWIvbGliL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3JvZmYtMS4yMi4zLm9yaWcvc3JjL2xpYnMvZ251bGliL2xpYi9NYWtlZmlsZS5hbQorKysrIGdyb2ZmLTEuMjIuMy9zcmMvbGlicy9nbnVsaWIvbGliL01ha2VmaWxlLmFtCitAQCAtMTEzLDcgKzExMyw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjIyLjMvZ3JvZmYtMS4yMi4yLWNvcnJlY3QtbWFuLmxvY2FsLWluc3RhbGwtcGF0aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMjIuMy9ncm9mZi0xLjIyLjItY29ycmVjdC1tYW4ubG9jYWwtaW5zdGFsbC1wYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MzMyOGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjIyLjMvZ3JvZmYtMS4yMi4yLWNvcnJlY3QtbWFuLmxvY2FsLWluc3RhbGwtcGF0aC5wYXRjaApAQCAtMCwwICsxLDM0IEBACitDb3JyZWN0IHRoZSBpbnN0YWxsIHBhdGggb2YgbWFuLmxvY2FsIHRvIGZpeCBmb2xsb3dpbmcgZXJyb3I6CisgICAgL3lvY3RvL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlL2dyb2ZmLzEuMjIuMi90bWFjL2FuLW9sZC50bWFjOjY5MDogd2FybmluZzogY2FuJ3QgZmluZCBtYWNybyBmaWxlIGBtYW4ubG9jYWwnCisKK1NpZ25lZC1vZmYtYnk6IFpoZW5odWEgTHVvIDx6aGVuaHVhLmx1b0BmcmVlc2NhbGUuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2RpZmYgLS1naXQgYS90bWFjL01ha2VmaWxlLnN1YiBiL3RtYWMvTWFrZWZpbGUuc3ViCitpbmRleCAxNTA2MjMyLi5mMTQ2OGM1IDEwMDY0NAorLS0tIGEvdG1hYy9NYWtlZmlsZS5zdWIKKysrKyBiL3RtYWMvTWFrZWZpbGUuc3ViCitAQCAtMTIxLDkgKzEyMSw5IEBAIGluc3RhbGxfZGF0YTogJChOT1JNQUxGSUxFUykgJChTUEVDSUFMRklMRVMpIG1hbi5sb2NhbCBcCisgCSAgJChSTSkgJChERVNURElSKSQobWRvY2RpcikvJCRmOyBcCisgCSAgJChJTlNUQUxMX0RBVEEpICQkZi1zICQoREVTVERJUikkKG1kb2NkaXIpLyQkZjsgXAorIAlkb25lCistCS10ZXN0IC1mICQoREVTVERJUikkKGxvY2FsdG1hY2RpcikvbWFuLmxvY2FsIFwKKysJLXRlc3QgLWYgJChERVNURElSKSQodG1hY2RpcikvbWFuLmxvY2FsIFwKKyAJICB8fCAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL21hbi5sb2NhbCBcCistCSAgICAgICAkKERFU1RESVIpJChsb2NhbHRtYWNkaXIpL21hbi5sb2NhbAorKwkgICAgICAgJChERVNURElSKSQodG1hY2RpcikvbWFuLmxvY2FsCisgCS10ZXN0IC1mICQoREVTVERJUikkKGxvY2FsdG1hY2RpcikvbWRvYy5sb2NhbCBcCisgCSAgfHwgJChJTlNUQUxMX0RBVEEpIG1kb2MubG9jYWwtcyAkKERFU1RESVIpJChsb2NhbHRtYWNkaXIpL21kb2MubG9jYWwKKyAKK0BAIC0xNjQsOSArMTY0LDkgQEAgdW5pbnN0YWxsX3N1YjoKKyAJJChSTSkgJChERVNURElSKSQodG1hY2RpcikvJCh0bWFjX3NfcHJlZml4KXMudG1hYworIAkkKFJNKSAkKERFU1RESVIpJCh0bWFjZGlyKS8kKHRtYWNfYW5fcHJlZml4KWFuLnRtYWMKKyAJJChSTSkgJChERVNURElSKSQodG1hY2Rpcikvd3d3LnRtYWMKKy0JLWlmIGNtcCAtcyAkKERFU1RESVIpJChsb2NhbHRtYWNkaXIpL21hbi5sb2NhbCBcCisrCS1pZiBjbXAgLXMgJChERVNURElSKSQodG1hY2RpcikvbWFuLmxvY2FsIFwKKyAJICAgICAgICAgICAkKHNyY2RpcikvbWFuLmxvY2FsOyB0aGVuIFwKKy0JICAkKFJNKSAkKERFU1RESVIpJChsb2NhbHRtYWNkaXIpL21hbi5sb2NhbDsgXAorKwkgICQoUk0pICQoREVTVERJUikkKHRtYWNkaXIpL21hbi5sb2NhbDsgXAorIAlmaQorIAktaWYgY21wIC1zICQoREVTVERJUikkKGxvY2FsdG1hY2RpcikvbWRvYy5sb2NhbCBcCisgCSAgICAgICAgICAgJChzcmNkaXIpL21kb2MubG9jYWw7IHRoZW4gXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmZfMS4xOC4xLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZl8xLjE4LjEuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDc4NmEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmZfMS4xOC4xLjQuYmIKQEAgLTAsMCArMSw0OSBAQAorU1VNTUFSWSA9ICJHTlUgVHJvZmYgc29mdHdhcmUiCitERVNDUklQVElPTiA9ICJUaGUgZ3JvZmYgKEdOVSB0cm9mZikgc29mdHdhcmUgaXMgYSB0eXBlc2V0dGluZyBwYWNrYWdlIHdoaWNoIHJlYWRzIHBsYWluIHRleHQgbWl4ZWQgd2l0aCBcCitmb3JtYXR0aW5nIGNvbW1hbmRzIGFuZCBwcm9kdWNlcyBmb3JtYXR0ZWQgb3V0cHV0LiIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9ncm9mZi8iCitMSUNFTlNFID0gIkdQTHYyIgorUFIgPSAicjEiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWU0M2ZjMTZmY2NkODUxOWZiYTQwNWYwYTBmZjZlOGEzIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vJHtCUE59L29sZC8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgIGZpbGU6Ly9ncm9mZi0xLjE4LjEuNC1yZW1vdmUtbW9tLnBhdGNoO3N0cmlwbGV2ZWw9MSBcCisgICAgICAgICAgZmlsZTovL21hbi1sb2NhbC5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL21kb2MtbG9jYWwucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9ncm9mZi0xLjE4LjEuNC1maXgtYmluZGlyLnBhdGNoIFwKKyIgCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRVhUUkFfT0VDT05GPSItLXdpdGhvdXQteCAtLXByZWZpeD0ke0R9IC0tZXhlYy1wcmVmaXg9JHtEfSAtLWJpbmRpcj0ke0R9JHtiaW5kaXJ9IC0tZGF0YWRpcj0ke0R9JHtkYXRhZGlyfSAtLW1hbmRpcj0ke0R9JHtkYXRhZGlyfS9tYW4gLS1pbmZvZGlyPSR7RH0ke2RhdGFkaXJ9aW5mbyAtLXdpdGgtYXBwcmVzZGlyPSR7RH0ke2RhdGFkaXJ9IgorCitTUkNfVVJJW21kNXN1bV0gPSAiY2VlY2I4MTUzMzkzNmQyNTFlZDAxNWY0MGU1ZjcyODciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmYzYzdjM2I2Y2FlNWU4Y2M1MDYyYTE0NGRlNWVmZjAwMjJlOGU5NzBlMTc3NDUyOWNjMmQ1ZGRlNDZjZTUwZCIKK1BBUkFMTEVMX01BS0UgPSAiIgorCitkb19jb25maWd1cmUgKCl7CisgICAgb2VfcnVuY29uZgorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIFNvbWUgZGlzdHJvcyBoYXZlIGJvdGggL2Jpbi9wZXJsIGFuZCAvdXNyL2Jpbi9wZXJsLCBidXQgd2Ugc2V0IHBlcmwgbG9jYXRpb24KKwkjIGZvciB0YXJnZXQgYXMgL3Vzci9iaW4vcGVybCwgc28gZml4IGl0IHRvIC91c3IvYmluL3BlcmwuCisJZm9yIGkgaW4gYWZtdG9kaXQgbW1yb2ZmOyBkbworCQlpZiBbIC1mICR7RH0ke2JpbmRpcn0vJGkgXTsgdGhlbgorCQkJc2VkIC1pIC1lICcxcywjIS4qcGVybCwjISAke1VTUkJJTlBBVEh9L2VudiBwZXJsLCcgJHtEfSR7YmluZGlyfS8kaQorCQlmaQorCWRvbmUKKworCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2dyb2ZmCisJY3AgLXJmICR7RH0ke2RhdGFkaXJ9L2dyb2ZmL3NpdGUtdG1hYy8qICR7RH0ke3N5c2NvbmZkaXJ9L2dyb2ZmLworCWNwIC1yZiAke0R9JHtkYXRhZGlyfS9ncm9mZi9zaXRlLXRtYWMvKiAke0R9JHtkYXRhZGlyfS9ncm9mZi8ke1BWfS90bWFjLworfQorCitwa2dfcG9zdGluc3RfJHtQTn0oKSB7CisJbG4gLXMgdGJsICREJHtiaW5kaXJ9L2d0YmwKKwllY2hvICJleHBvcnQgR1JPRkZfRk9OVF9QQVRIPS91c3Ivc2hhcmUvZ3JvZmYvJHtQVn0vZm9udCIgPj4gJEQke3N5c2NvbmZkaXJ9L3Byb2ZpbGUKKwllY2hvICJleHBvcnQgR1JPRkZfVE1BQ19QQVRIPS91c3Ivc2hhcmUvZ3JvZmYvJHtQVn0vdG1hYyIgPj4gJEQke3N5c2NvbmZkaXJ9L3Byb2ZpbGUKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmZfMS4yMi4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmZfMS4yMi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZmZhODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZl8xLjIyLjMuYmIKQEAgLTAsMCArMSw3MCBAQAorU1VNTUFSWSA9ICJHTlUgVHJvZmYgc29mdHdhcmUiCitERVNDUklQVElPTiA9ICJUaGUgZ3JvZmYgKEdOVSB0cm9mZikgc29mdHdhcmUgaXMgYSB0eXBlc2V0dGluZyBwYWNrYWdlIHdoaWNoIHJlYWRzIHBsYWluIHRleHQgbWl4ZWQgd2l0aCBcCitmb3JtYXR0aW5nIGNvbW1hbmRzIGFuZCBwcm9kdWNlcyBmb3JtYXR0ZWQgb3V0cHV0LiIKK1NFQ1RJT04gPSAiYmFzZSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9ncm9mZi8iCitMSUNFTlNFID0gIkdQTHYzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2dyb2ZmL2dyb2ZmLSR7UFZ9LnRhci5neiBcCisJZmlsZTovL2dyb2ZmLTEuMjIuMi1jb3JyZWN0LW1hbi5sb2NhbC1pbnN0YWxsLXBhdGgucGF0Y2ggXAorCWZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImNjODI1ZmE2NGJjNzMwNmE4ODVmMmZiMjI2OGQzZWM1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNhNDhhOWQ2Yzk3NzUwYmZiZDUzNWZlZWI1YmUwMTExZGI2NDA2ZGRiN2JiNzlmYzY4MDgwOWNkYTZkODI4YTUiCisKK0RFUEVORFMgPSAiZ3JvZmYtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiIgorUkRFUEVORFNfJHtQTn0gKz0gInBlcmwgc2VkIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQteCIKK1BBUkFMTEVMX01BS0UgPSAiIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlpZiBbICIke0JVSUxEX1NZU30iICE9ICIke0hPU1RfU1lTfSIgXTsgdGhlbgorCQlzZWQgLWkgXAorCQkgICAgLWUgJy9eR1JPRkZCSU49L3M6PS4qOj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vZ3JvZmY6JyBcCisJCSAgICAtZSAnL15UUk9GRkJJTj0vczo9Lio6PSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS90cm9mZjonIFwKKwkJICAgIC1lICcvXkdST0ZGX0JJTl9QQVRIPS9zOj0uKjo9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9OicgXAorCQkgICAgLWUgJy9eR1JPRkZfQklOX0RJUj0vczo9Lio6PSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfTonIFwKKwkJICAgICR7U30vY29udHJpYi8qL01ha2VmaWxlLnN1YiBcCisJCSAgICAke1N9L2RvYy9NYWtlZmlsZS5pbiBcCisJCSAgICAke1N9L2RvYy9NYWtlZmlsZS5zdWIKKwlmaQorfQorCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworICAgICMgZ2VuZXJhdGUgZ251bGliIGNvbmZpZ3VyZSBzY3JpcHQKKyAgICBvbGRkaXI9YHB3ZGAKKyAgICBjZCAke1N9L3NyYy9saWJzL2dudWxpYi8KKyAgICBBQ0xPQ0FMPSIkQUNMT0NBTCIgYXV0b3JlY29uZiAtV2Nyb3NzIC0tdmVyYm9zZSAtLWluc3RhbGwgLS1mb3JjZSAke0VYVFJBX0FVVE9SRUNPTkZ9ICRhY3BhdGhzIHx8IGRpZSAiYXV0b3JlY29uZiBleGVjdXRpb24gZmFpbGVkLiIKKyAgICBjZCAke29sZGRpcn0KK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBTb21lIGRpc3Ryb3MgaGF2ZSBib3RoIC9iaW4vcGVybCBhbmQgL3Vzci9iaW4vcGVybCwgYnV0IHdlIHNldCBwZXJsIGxvY2F0aW9uCisJIyBmb3IgdGFyZ2V0IGFzIC91c3IvYmluL3BlcmwsIHNvIGZpeCBpdCB0byAvdXNyL2Jpbi9wZXJsLgorCWZvciBpIGluIGFmbXRvZGl0IG1tcm9mZiBncm9wZGYgcGRmbW9tIGdyb2c7IGRvCisJCWlmIFsgLWYgJHtEfSR7YmluZGlyfS8kaSBdOyB0aGVuCisJCQlzZWQgLWkgLWUgJzFzLCMhLipwZXJsLCMhICR7VVNSQklOUEFUSH0vZW52IHBlcmwsJyAke0R9JHtiaW5kaXJ9LyRpCisJCWZpCisJZG9uZQorCWlmIFsgLWUgJHtEfSR7bGliZGlyfS9jaGFyc2V0LmFsaWFzIF07IHRoZW4KKwkJcm0gLXJmICR7RH0ke2xpYmRpcn0vY2hhcnNldC5hbGlhcworCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwljcmVhdGVfY21kbGluZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2dyb2ZmIFwKKwkJLUYke1NUQUdJTkdfRElSX05BVElWRX0ke2RhdGFkaXJfbmF0aXZlfS9ncm9mZi8ke1BWfS9mb250IFwKKwkJLU0ke1NUQUdJTkdfRElSX05BVElWRX0ke2RhdGFkaXJfbmF0aXZlfS9ncm9mZi8ke1BWfS90bWFjCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vJHtCUE59L3NpdGUtdG1hYyBcCisgICAgICAgICAgICAgICAgJHtsaWJkaXJ9LyR7QlBOfS9ncm9mZmVyLyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS4zLjEyL2R1cC1kZWYtZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwLTEuMy4xMi9kdXAtZGVmLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWU4ZDIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwLTEuMy4xMi9kdXAtZGVmLWZpeC5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitnemlwIHVzZXMgZ251bGliLCB3aG9zZSBoZWFkZXIgY29uZmxpY3Qgd2l0aCBnbGliYy4gVGhpcyBwYXRjaCByZW5hbWUgc29tZSBmdW5jdGlvbiB0byBhdm9pZCBjb25mbGljdC4KKworU2lnbmVkLW9mZi1ieTogWmhhaSBFZHdpbiA8ZWR3aW4uemhhaUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitJbmRleDogZ3ppcC0xLjMuMTIvZ3ppcC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3ppcC0xLjMuMTIub3JpZy9nemlwLmMJMjAxMC0wOC0xMyAxMDoyOTozOC4wMDAwMDAwMDAgKzA4MDAKKysrKyBnemlwLTEuMy4xMi9nemlwLmMJMjAxMC0wOC0xMyAxMDoyOTo0NC4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xNjM3LDcgKzE2MzcsNyBAQAorIAl9CisgICAgICAgfQorIAorLSAgICBpZiAoZnV0aW1lbnMgKG9mZCwgb2ZuYW1lLCB0aW1lc3BlYykgIT0gMCkKKysgICAgaWYgKGZ1dGltZW5zX2dudWxpYiAob2ZkLCBvZm5hbWUsIHRpbWVzcGVjKSAhPSAwKQorICAgICAgIHsKKyAJaW50IGUgPSBlcnJubzsKKyAJV0FSTiAoKHN0ZGVyciwgIiVzOiAiLCBwcm9ncmFtX25hbWUpKTsKK0luZGV4OiBnemlwLTEuMy4xMi9saWIvdXRpbWVucy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3ppcC0xLjMuMTIub3JpZy9saWIvdXRpbWVucy5jCTIwMTAtMDgtMTMgMTA6MzM6NDcuMDAwMDAwMDAwICswODAwCisrKysgZ3ppcC0xLjMuMTIvbGliL3V0aW1lbnMuYwkyMDEwLTA4LTEzIDEwOjM0OjAyLjAwMDAwMDAwMCArMDgwMAorQEAgLTc1LDcgKzc1LDcgQEAKKyAgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSAoc2V0dGluZyBlcnJubykgb24gZmFpbHVyZS4gICovCisgCisgaW50CistZnV0aW1lbnMgKGludCBmZCBBVFRSSUJVVEVfVU5VU0VELAorK2Z1dGltZW5zX2dudWxpYiAoaW50IGZkIEFUVFJJQlVURV9VTlVTRUQsCisgCSAgY2hhciBjb25zdCAqZmlsZSwgc3RydWN0IHRpbWVzcGVjIGNvbnN0IHRpbWVzcGVjWzJdKQorIHsKKyAgIC8qIFNvbWUgTGludXgtYmFzZWQgTkZTIGNsaWVudHMgYXJlIGJ1Z2d5LCBhbmQgbWlzaGFuZGxlIHRpbWUgc3RhbXBzCitAQCAtMTg1LDUgKzE4NSw1IEBACisgaW50CisgdXRpbWVucyAoY2hhciBjb25zdCAqZmlsZSwgc3RydWN0IHRpbWVzcGVjIGNvbnN0IHRpbWVzcGVjWzJdKQorIHsKKy0gIHJldHVybiBmdXRpbWVucyAoLTEsIGZpbGUsIHRpbWVzcGVjKTsKKysgIHJldHVybiBmdXRpbWVuc19nbnVsaWIgKC0xLCBmaWxlLCB0aW1lc3BlYyk7CisgfQorSW5kZXg6IGd6aXAtMS4zLjEyL2xpYi91dGltZW5zLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnemlwLTEuMy4xMi5vcmlnL2xpYi91dGltZW5zLmgJMjAxMC0wOC0xMyAxMDoxNDo1Ny4wMDAwMDAwMDAgKzA4MDAKKysrKyBnemlwLTEuMy4xMi9saWIvdXRpbWVucy5oCTIwMTAtMDgtMTMgMTA6MjE6NDUuMDAwMDAwMDAwICswODAwCitAQCAtMSwzICsxLDMgQEAKKyAjaW5jbHVkZSA8dGltZS5oPgorLWludCBmdXRpbWVucyAoaW50LCBjaGFyIGNvbnN0ICosIHN0cnVjdCB0aW1lc3BlYyBjb25zdCBbMl0pOworK2ludCBmdXRpbWVuc19nbnVsaWIgKGludCwgY2hhciBjb25zdCAqLCBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgWzJdKTsKKyBpbnQgdXRpbWVucyAoY2hhciBjb25zdCAqLCBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgWzJdKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC0xLjMuMTIvbTQtZXh0ZW5zaW9ucy1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS4zLjEyL200LWV4dGVuc2lvbnMtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMmY2OTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS4zLjEyL200LWV4dGVuc2lvbnMtZml4LnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK3JlbW92ZSBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMgdG8gZml4IHRoZSBhdXRvY29uZiBlcnJvciAiQUNfUkVRVUlSRTogY2lyY3VsYXIKK2RlcGVuZGVuY3kgb2YgQUNfR05VX1NPVVJDRSIKKworU2lnbmVkLW9mZi1ieTogWmhhaSBFZHdpbiA8ZWR3aW4uemhhaUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitJbmRleDogZ3ppcC0xLjMuMTIvbTQvZXh0ZW5zaW9ucy5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd6aXAtMS4zLjEyLm9yaWcvbTQvZXh0ZW5zaW9ucy5tNAkyMDEwLTA4LTE2IDE0OjE4OjE2LjAwMDAwMDAwMCArMDgwMAorKysrIGd6aXAtMS4zLjEyL200L2V4dGVuc2lvbnMubTQJMjAxMC0wOC0xNiAxNDoyMTo1NC4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xMiw0NCArMTIsNiBAQAorICMgZW5vdWdoIGluIHRoaXMgYXJlYSBpdCdzIGxpa2VseSB3ZSdsbCBuZWVkIHRvIHJlZGVmaW5lCisgIyBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMgZm9yIHF1aXRlIHNvbWUgdGltZS4KKyAKKy0jIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUworLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorLSMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorLUFDX0RFRlVOKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorLVsKKy0gIEFDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKQorLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19SVU5fSUZFTFNFXSkKKy0KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorLSAgQUNfUkVRVUlSRShbQUNfQUlYXSkKKy0gIEFDX1JFUVVJUkUoW0FDX01JTklYXSkKKy0KKy0gIEFIX1ZFUkJBVElNKFtfX0VYVEVOU0lPTlNfX10sCistWy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIFNvbGFyaXMuICAqLworLSNpZm5kZWYgX19FWFRFTlNJT05TX18KKy0jIHVuZGVmIF9fRVhURU5TSU9OU19fCistI2VuZGlmCistI2lmbmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKy0jIHVuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworLSNlbmRpZgorLSNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKy0jIHVuZGVmIF9UQU5ERU1fU09VUkNFCistI2VuZGlmXSkKKy0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fXSwKKy0gICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fXSwKKy0gICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorLSAgICAgICBbQUNfTEFOR19QUk9HUkFNKFsKKy0jCSAgZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKKy0JICBBQ19JTkNMVURFU19ERUZBVUxUXSldLAorLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189eWVzXSwKKy0gICAgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPW5vXSldKQorLSAgdGVzdCAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18gPSB5ZXMgJiYKKy0gICAgQUNfREVGSU5FKFtfX0VYVEVOU0lPTlNfX10pCistICBBQ19ERUZJTkUoW19QT1NJWF9QVEhSRUFEX1NFTUFOVElDU10pCistICBBQ19ERUZJTkUoW19UQU5ERU1fU09VUkNFXSkKKy1dKQorLQorICMgZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS42L3dyb25nLXBhdGgtZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwLTEuNi93cm9uZy1wYXRoLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mjg2M2Q2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwLTEuNi93cm9uZy1wYXRoLWZpeC5wYXRjaApAQCAtMCwwICsxLDMxIEBACitmaXggTWFrZU1ha2VyIGlzc3VlcyB3aXRoIHVzaW5nIHdyb25nIFNIRUxML0dSRVAKKworQSBzZXQgb2Ygc3Vic3RpdHV0aW9uIGlzIGJlaW5nIHByb2Nlc3NlZCB0byBhbGwgdGFyZ2V0IHNjcmlwdHMgd2l0aCBzZWQgYnkKK3JlcGxhY2luZyBzb21lIGtleSB3b3JkcyB3aXRoIHRoZSBkZXRlY3RlZCB2YWx1ZXMgYXQgY29uZmlndXJlIHRpbWUsIHRoaXMKK2lzIGV4YWN0bHkgbm90IGNvbXBsaWFudCB3aXRoIGNyb3NzIGNvbXBsaW5nLCBhbmQgd2lsbCBjYXVzZSBtaXNzaW5nIHBhdGgKK2Vycm9ycyBhdCBydW4gdGltZSBsaWtlOgorIi91c3IvYmluL3pncmVwOiBsaW5lIDIzMDogL3Vzci9iaW4vZ3JlcDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKKworRml4ZWQgYnkgcmVtb3ZpbmcgdW5uZWVkZWQgc3Vic3RpdHV0aW9uIGFuZCB1c2luZyByZWFsIHJ1bnRpbWUgcGF0aHMKK2luc3RlYWQuCisKK1NpZ25lZC1vZmYtYnk6IE1pbmcgTGl1IDxtaW5nLmxpdUB3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGd6aXAtMS4zLjEyL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkaWZmIC11cnBOIGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQorLS0tIGEvTWFrZWZpbGUuYW0JMjAxMy0xMS0zMCAxMDowNjowOS40MDIyMzQ4NzEgKzA4MDAKKysrKyBiL01ha2VmaWxlLmFtCTIwMTMtMTEtMzAgMTA6MTM6NDIuOTUyMjM2MDI1ICswODAwCitAQCAtODEsOSArODEsOCBAQCBnemlwLmRvYy5nejogZ3ppcC5kb2MgJChiaW5fUFJPR1JBTVMpCisgU1VGRklYRVMgPSAuaW4KKyAuaW46CisgCSQoQU1fVl9HRU4pc2VkIFwKKy0JCS1lICdzfC9iaW4vc2h8JChTSEVMTCl8ZycgXAorIAkJLWUgJ3N8W0BdYmluZGlyQHwnXCcnJChiaW5kaXIpJ1wnJ3xnJyBcCistCQktZSAnc3xbQF1HUkVQQHwkKEdSRVApfGcnIFwKKysJCS1lICdzfFtAXUdSRVBAfCQoYmFzZV9iaW5kaXIpL2dyZXB8ZycgXAorIAkJLWUgJ3N8W0BdVkVSU0lPTkB8JChWRVJTSU9OKXxnJyBcCisgCQkkKHNyY2RpcikvJEAuaW4gPiRALXQgXAorIAkgICYmIGNobW9kIGEreCAkQC10IFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NDgwZWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAuaW5jCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiU3RhbmRhcmQgR05VIGNvbXByZXNzb3IiCitERVNDUklQVElPTiA9ICJHTlUgR3ppcCBpcyBhIHBvcHVsYXIgZGF0YSBjb21wcmVzc2lvbiBwcm9ncmFtIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBKZWFuLWxvdXAgR2FpbGx5IGZvciB0aGUgR05VIFwKK3Byb2plY3QuIE1hcmsgQWRsZXIgd3JvdGUgdGhlIGRlY29tcHJlc3Npb24gcGFydCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nemlwLyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKyMgY2hhbmdlIHRvIEdQTHYzKyBpbiAyMDA3LzA3LiBQcmV2aW91cyBHUEx2MiB2ZXJzaW9uIGlzIDEuMy4xMgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0VYVFJBX09FTUFLRV9jbGFzcy10YXJnZXQgPSAiR1JFUD0ke2Jhc2VfYmluZGlyfS9ncmVwIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJIyBSZW5hbWUgYW5kIG1vdmUgZmlsZXMgaW50byAvYmluIChGSFMpLCB3aGljaCBpcyB0eXBpY2FsIHBsYWNlIGZvciBnemlwCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwltdiAke0R9JHtiaW5kaXJ9L2d1bnppcCAke0R9JHtiYXNlX2JpbmRpcn0vZ3VuemlwCisJbXYgJHtEfSR7YmluZGlyfS9nemlwICR7RH0ke2Jhc2VfYmluZGlyfS9nemlwCisJbXYgJHtEfSR7YmluZGlyfS96Y2F0ICR7RH0ke2Jhc2VfYmluZGlyfS96Y2F0CisJbXYgJHtEfSR7YmluZGlyfS91bmNvbXByZXNzICR7RH0ke2Jhc2VfYmluZGlyfS91bmNvbXByZXNzCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCitBTFRFUk5BVElWRV8ke1BOfSA9ICJndW56aXAgZ3ppcCB6Y2F0IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2d1bnppcF0gPSAiJHtiYXNlX2JpbmRpcn0vZ3VuemlwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2d6aXBdID0gIiR7YmFzZV9iaW5kaXJ9L2d6aXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbemNhdF0gPSAiJHtiYXNlX2JpbmRpcn0vemNhdCIKKworZXhwb3J0IENPTkZJR19TSEVMTD0iL2Jpbi9zaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcF8xLjMuMTIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXBfMS4zLjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MDYyODIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXBfMS4zLjEyLmJiCkBAIC0wLDAgKzEsMTUgQEAKK3JlcXVpcmUgZ3ppcC5pbmMKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nemlwLmg7ZW5kbGluZT0yMjttZDU9YzA5MzRhZDE5MDBkOTI3Zjg2NTU2MTUzZDRjNzZkMjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbHp3Lmg7ZW5kbGluZT0xOTttZDU9YzI3M2UwOWEwMmVkZDk4MDFjYzc0ZDM5NjgzMDQ5ZTkgIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ3ppcC9nemlwLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9tNC1leHRlbnNpb25zLWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kdXAtZGVmLWZpeC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImI1YmFjMmQyMTg0MGFlMDc3ZTAyMTdiYzVlNDg0NWIxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNmNTY1YmUwNWY3ZjNkMWFmZjExN2MwMzBlYjdjNzM4MzAwNTEwYjdkMDk4Y2VkZWE3OTZjYThlNGNkNTg3YWYiCisKK1BSID0gInIyIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwXzEuNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcF8xLjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM0N2YwYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcF8xLjYuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSBnemlwLmluYworCitMSUNFTlNFID0gIkdQTHYzKyIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2d6aXAvJHtCUH0udGFyLmd6IgorU1JDX1VSSV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBmaWxlOi8vd3JvbmctcGF0aC1maXgucGF0Y2giCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2d6aXAuaDtiZWdpbmxpbmU9ODtlbmRsaW5lPTIwO21kNT02ZTQ3Y2FhYTYzMGUwYzhiZjlmMWJjOGQ5NGE4ZWQwZSIKKworUFJPVklERVNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZ3ppcC1yZXBsYWNlbWVudC1uYXRpdmUiCitOQVRJVkVfUEFDS0FHRV9QQVRIX1NVRkZJWCA9ICIvJHtQTn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzg2MDNjYjI4NDNiZjU2ODFmZjQxYWFiM2JjZDZhMjAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTdlYjgzYjc2M2Q5ZTVhZDM1ZjM1MWZlNTUxN2U2YjcxNTIxZDdhYWM3YWNmM2UzY2FjZGI2YjE0OTZkOGY3ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2hkcGFybS9oZHBhcm1fOS40OC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2hkcGFybS9oZHBhcm1fOS40OC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjY3ZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaGRwYXJtL2hkcGFybV85LjQ4LmJiCkBAIC0wLDAgKzEsMzYgQEAKK1NVTU1BUlkgPSAiVXRpbGl0eSBmb3Igdmlld2luZy9tYW5pcHVsYXRpbmcgSURFIGRpc2sgZHJpdmUvZHJpdmVyIHBhcmFtZXRlcnMiCitERVNDUklQVElPTiA9ICJoZHBhcm0gaXMgYSBMaW51eCBzaGVsbCB1dGlsaXR5IGZvciB2aWV3aW5nIFwKK2FuZCBtYW5pcHVsYXRpbmcgdmFyaW91cyBJREUgZHJpdmUgYW5kIGRyaXZlciBwYXJhbWV0ZXJzLiIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiQlNEIgorTElDRU5TRV93aXBlciA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UuVFhUO21kNT05MTBhOGE0MmM5NjJkMjM4NjE5Yzc1ZmRiNzhiZGIyNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vY29weXJpZ2h0O21kNT1hODJkN2JhM2FkZTllOGVjOTAyNzQ5ZGI5OGM1OTJmMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly93aXBlci9HUEx2Mi50eHQ7bWQ1PWZjYjAyZGM1NTJhMDQxZGVlMjdlNGI4NWM3Mzk2MDY3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3dpcGVyL3dpcGVyLnNoO2JlZ2lubGluZT03O2VuZGxpbmU9MzE7bWQ1PWI3YmM2NDJhZGRjMTUyZWEzMDc1MDViZjFhMjk2ZjA5IgorCisKK1BBQ0tBR0VTID0rICJ3aXBlciIKKworRklMRVNfd2lwZXIgPSAiJHtiaW5kaXJ9L3dpcGVyLnNoIgorCitSREVQRU5EU193aXBlciA9ICJiYXNoIGdhd2sgc3RhdCIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vaGRwYXJtLyR7QlB9LnRhci5neiAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyMTNlZmRiZTc0NzFmYWQzNDA4MTk4OTE4ZTE2NDM1NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjZTk3YjRhNzFjYjA0MTQ2ZjU0Y2Y2ZjY5Nzg3ZTdmOTdkZGZkYTk4MzZkYzgwM2I0NTlkM2IzZGYzYTRmYmVlIgorCitFWFRSQV9PRU1BS0UgKz0gJ1NUUklQPSJlY2hvIicKKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImhkcGFybSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtoZHBhcm1dID0gIiR7YmFzZV9zYmluZGlyfS9oZHBhcm0iCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke2Jhc2Vfc2JpbmRpcn0gJHtEfS8ke21hbmRpcn0vbWFuOCAke0R9LyR7YmluZGlyfQorCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgJ3NiaW5kaXI9JHtiYXNlX3NiaW5kaXJ9JyBpbnN0YWxsCisJY3AgJHtTfS93aXBlci93aXBlci5zaCAke0R9LyR7YmluZGlyfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNjkwNzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1mdWxsLWNtZGxpbmUuYmIKQEAgLTAsMCArMSwxMiBAQAorREVTQ1JJUFRJT04gPSAiQSBjb25zb2xlLW9ubHkgaW1hZ2Ugd2l0aCBtb3JlIGZ1bGwtZmVhdHVyZWQgTGludXggc3lzdGVtIFwKK2Z1bmN0aW9uYWxpdHkgaW5zdGFsbGVkLiIKKworSU1BR0VfRkVBVFVSRVMgKz0gInNwbGFzaCBzc2gtc2VydmVyLW9wZW5zc2giCisKK0lNQUdFX0lOU1RBTEwgPSAiXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWJvb3QgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZSBcCisgICAgJHtDT1JFX0lNQUdFX0VYVFJBX0lOU1RBTEx9IFwKKyAgICAiCisKK2luaGVyaXQgY29yZS1pbWFnZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2Uta2VybmVsLWRldi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWtlcm5lbC1kZXYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI2MzZlZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWtlcm5lbC1kZXYuYmIKQEAgLTAsMCArMSwyMCBAQAorREVTQ1JJUFRJT04gPSAiQSBkZXZlbG9wbWVudCBpbWFnZSB0aGF0IGJ1aWxkcyB0aGUga2VybmVsIGFuZCBwYWNrYWdlcyB0aGF0IGFyZSBcCitzZW5zaXRpdmUgdG8ga2VybmVsIHVwZGF0ZXMgYW5kIHZlcnNpb24gY2hhbmdlcyIKKworIyBDb3VsZCBhbHNvIGJlIGNvcmUtaW1hZ2UtYmFzaWMsIGJ1dCB3ZSdsbCBrZWVwIHRoaXMgc21hbGwgZm9yIG5vdworcmVxdWlyZSByZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC5iYgorCitLRVJORUxfREVWX1VUSUxTID89ICJkcm9wYmVhciBjb25ubWFuIgorS0VSTkVMX0RFVl9UT09MUyA/PSAicGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtcHJvZmlsZSBwYWNrYWdlZ3JvdXAtY29yZS1idWlsZGVzc2VudGlhbCBrZXJuZWwtZGV2c3JjIgorS0VSTkVMX0RFVl9NT0RVTEUgPz0gImtlcm5lbC1tb2R1bGVzIgorCitDT1JFX0lNQUdFX0VYVFJBX0lOU1RBTEwgKz0gIiR7S0VSTkVMX0RFVl9NT0RVTEV9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtLRVJORUxfREVWX1VUSUxTfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7S0VSTkVMX0RFVl9UT09MU30gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKKworIyBXZSBuZWVkIGV4dHJhIHNwYWNlIGZvciB0aGluZ3MgbGlrZSBrZXJuZWwgYnVpbGRzLCBldGMuCitJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0VfYXBwZW5kICs9ICIrIDMwMDAwMDAiCisKKyMgTGV0J3MgZGVmaW5lIG91ciBvd24gc3Vic2V0IHRvIHRlc3QsIHdlIGNhbiBsYXRlciBhZGQgYSBvbi10YXJnZXQga2VybmVsIGJ1aWxkIGV2ZW4hCitERUZBVUxUX1RFU1RfU1VJVEVTID0gInBpbmcgc3NoIGRmIGNvbm5tYW4gc3lzbG9nIHNjcCBkYXRlIGRtZXNnIHBhcnNlbG9ncyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWxzYi1kZXYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1sc2ItZGV2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZGM5ZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1sc2ItZGV2LmJiCkBAIC0wLDAgKzEsNyBAQAorcmVxdWlyZSBjb3JlLWltYWdlLWxzYi5iYgorCitERVNDUklQVElPTiA9ICJCYXNpYyBpbWFnZSB3aXRob3V0IFggc3VwcG9ydCBzdWl0YWJsZSBmb3IgZGV2ZWxvcG1lbnQgd29yay4gSXQgXAorY2FuIGJlIHVzZWQgZm9yIGN1c3RvbWl6YXRpb24gYW5kIGltcGxlbWVudGF0aW9ucyB0aGF0IGNvbmZvcm0gdG8gTGludXggXAorU3RhbmRhcmQgQmFzZSAoTFNCKS4iCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJkZXYtcGtncyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWxzYi1zZGsuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1sc2Itc2RrLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYjZlN2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1sc2Itc2RrLmJiCkBAIC0wLDAgKzEsOSBAQAorcmVxdWlyZSBjb3JlLWltYWdlLWxzYi5iYgorCitERVNDUklQVElPTiA9ICJCYXNpYyBpbWFnZSB3aXRob3V0IFggc3VwcG9ydCBzdWl0YWJsZSBmb3IgTGludXggU3RhbmRhcmQgQmFzZSBcCisoTFNCKSBpbXBsZW1lbnRhdGlvbnMuIEl0IGluY2x1ZGVzIHRoZSBmdWxsIG1ldGEtdG9vbGNoYWluLCBwbHVzIGRldmVsb3BtZW50IFwKK2hlYWRlcnMgYW5kIGxpYnJhcmllcyB0byBmb3JtIGEgc3RhbmRhbG9uZSBTREsuIgorCitJTUFHRV9GRUFUVVJFUyArPSAidG9vbHMtc2RrIGRldi1wa2dzIHRvb2xzLWRlYnVnIGVjbGlwc2UtZGVidWcgdG9vbHMtcHJvZmlsZSB0b29scy10ZXN0YXBwcyBkZWJ1Zy10d2Vha3MiCisKK0lNQUdFX0lOU1RBTEwgKz0gImtlcm5lbC1kZXZzcmMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1sc2IuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1sc2IuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI2MWM2ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWxzYi5iYgpAQCAtMCwwICsxLDE0IEBACitERVNDUklQVElPTiA9ICJBbiBpbWFnZSBjb250YWluaW5nIHBhY2thZ2VzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGNvbmZvcm0gXAordG8gdGhlIExpbnV4IFN0YW5kYXJkIEJhc2UgKExTQikgc3BlY2lmaWNhdGlvbi4iCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJzcGxhc2ggc3NoLXNlcnZlci1vcGVuc3NoIGh3Y29kZWNzIHBhY2thZ2UtbWFuYWdlbWVudCIKKworSU1BR0VfSU5TVEFMTCA9ICJcCisgICAgJHtDT1JFX0lNQUdFX0JBU0VfSU5TVEFMTH0gXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZSBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiIFwKKyAgICAiCisKK2luaGVyaXQgY29yZS1pbWFnZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gInBhbSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXItaW5pdHJhbWZzLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtdGVzdG1hc3Rlci1pbml0cmFtZnMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYzMjYwZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXItaW5pdHJhbWZzLmJiCkBAIC0wLDAgKzEsMTkgQEAKK0RFU0NSSVBUSU9OID0gIlNtYWxsIGltYWdlIGNhcGFibGUgb2YgYm9vdGluZyBhIGRldmljZSB3aXRoIGN1c3RvbSBpbnN0YWxsIHNjcmlwdHMsIFwKK2FkZGluZyBhIHNlY29uZCByb290ZnMsIHVzZWQgZm9yIHRlc3RpbmcuIgorCisjIHVzZSAtdGVzdGZzIGxpdmUtaW5zdGFsbCBzY3JpcHRzCitQQUNLQUdFX0lOU1RBTEwgPSAiaW5pdHJhbWZzLWxpdmUtYm9vdCBpbml0cmFtZnMtbGl2ZS1pbnN0YWxsLXRlc3RmcyBpbml0cmFtZnMtbGl2ZS1pbnN0YWxsLWVmaS10ZXN0ZnMgYnVzeWJveCB1ZGV2IGJhc2UtcGFzc3dkICR7Uk9PVEZTX0JPT1RTVFJBUF9JTlNUQUxMfSIKKworIyBEbyBub3QgcG9sbHV0ZSB0aGUgaW5pdHJkIGltYWdlIHdpdGggcm9vdGZzIGZlYXR1cmVzCitJTUFHRV9GRUFUVVJFUyA9ICIiCisKK2V4cG9ydCBJTUFHRV9CQVNFTkFNRSA9ICJjb3JlLWltYWdlLXRlc3RtYXN0ZXItaW5pdHJhbWZzIgorSU1BR0VfTElOR1VBUyA9ICIiCisKK0xJQ0VOU0UgPSAiTUlUIgorCitJTUFHRV9GU1RZUEVTID0gIiR7SU5JVFJBTUZTX0ZTVFlQRVN9IgoraW5oZXJpdCBjb3JlLWltYWdlCisKK0lNQUdFX1JPT1RGU19TSVpFID0gIjgxOTIiCitCQURfUkVDT01NRU5EQVRJT05TICs9ICJidXN5Ym94LXN5c2xvZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS10ZXN0bWFzdGVyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Mjk1YzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS10ZXN0bWFzdGVyLmJiCkBAIC0wLDAgKzEsMTggQEAKK0RFU0NSSVBUSU9OID0gIkEgbWFzdGVyIGltYWdlIHRvIGJlIGRlcGxveWVkIG9uIGEgdGFyZ2V0IHVzZWZ1bCBmb3IgdGVzdGluZyBvdGhlciBpbWFnZXMiCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJzc2gtc2VydmVyLW9wZW5zc2ggcGFja2FnZS1tYW5hZ2VtZW50IgorCitpbmhlcml0IGNvcmUtaW1hZ2UKKworIyB0aGUgZGVwbG95IGNvZGUgcmVxdWlyZXMgYmFzaCBhbmQKKyMgbm9ybWFsIGxpbnV4IHV0aWxpdGllcyBub3QgYnVzeWJveCBvbmVzCitJTUFHRV9JTlNUQUxMICs9ICJcCisgICAgYmFzaCBjb3JldXRpbHMgdXRpbC1saW51eCB0YXIgZ3ppcCBiemlwMiBrbW9kIFwKKyAgICBweXRob24tbW9kdWxlcyBweXRob24tbWlzYyBcCisgICAgZTJmc3Byb2dzIGUyZnNwcm9ncy1ta2UyZnMgcGFydGVkIFwKKyAgICAiCisjIHdlIG5lZWQgYSBwYXJ0aWN1bGFyIGluaXRyYW1mcyBmb3IgbGl2ZSBpbWFnZXMKKyMgdGhhdCBwdWxscyBjdXN0b20gaW5zdGFsbCBzY3JpcHRzIHdoaWNoIHRha2UKKyMgY2FyZSBvZiBwYXJ0aXRpb25pbmcgZm9yIHVzCitJTklUUkRfSU1BR0UgPSAiY29yZS1pbWFnZS10ZXN0bWFzdGVyLWluaXRyYW1mcyIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL3dpYy1pbWFnZS1taW5pbWFsLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL3dpYy1pbWFnZS1taW5pbWFsLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3M2M1NjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvd2ljLWltYWdlLW1pbmltYWwuYmIKQEAgLTAsMCArMSwxNCBAQAorU1VNTUFSWSA9ICJBbiBleGFtcGxlIG9mIHBhcnRpdGlvbmVkIGltYWdlLiIKKworSU1BR0VfSU5TVEFMTCA9ICJwYWNrYWdlZ3JvdXAtY29yZS1ib290ICR7Uk9PVEZTX1BLR01BTkFHRV9CT09UU1RSQVB9IgorCitJTUFHRV9GU1RZUEVTID0gIndpYy5iejIiCitSTV9PTERfSU1BR0UgPSAiMSIKKworIyBjb3JlLWltYWdlLW1pbmltYWwgaXMgcmVmZXJlbmNlZCBpbiAud2tzLCBzbyB3ZSBuZWVkIGl0cyByb290ZnMKKyMgdG8gYmUgcmVhZHkgYmVmb3JlIG91ciByb290ZnMKK2RvX3Jvb3Rmc1tkZXBlbmRzXSArPSAiY29yZS1pbWFnZS1taW5pbWFsOmRvX3Jvb3RmcyIKKworSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFID0gIjIwMDAiCisKK2luaGVyaXQgaW1hZ2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC53a3MgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvd2ljLWltYWdlLW1pbmltYWwud2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5Y2Q4ZjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvd2ljLWltYWdlLW1pbmltYWwud2tzCkBAIC0wLDAgKzEsMTAgQEAKKyMgc2hvcnQtZGVzY3JpcHRpb246IEV4YW1wbGUgb2YgcGFydGl0aW9uZWQgaW1hZ2Ugd2l0aCBjb21wbGV4IGxheW91dAorIyBsb25nLWRlc2NyaXB0aW9uOiBUaGlzIGltYWdlIGNvbnRhaW5zIGJvb3QgcGFydGl0aW9uIGFuZCAzIHJvb3RmcyBwYXJ0aXRpb25zCisjIGNyZWF0ZWQgZnJvbSBjb3JlLWltYWdlLW1pbmltYWwgYW5kIHdpYy1pbWFnZS1taW5pbWFsIGltYWdlIHJlY2lwZXMuCisKK3BhcnQgL2Jvb3QgLS1zb3VyY2UgYm9vdGltZy1wY2Jpb3MgLS1vbmRpc2sgc2RhIC0tbGFiZWwgYm9vdCAtLWFjdGl2ZSAtLWFsaWduIDEwMjQKK3BhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDIgLS1sYWJlbCBwbGF0Zm9ybSAtLWFsaWduIDEwMjQKK3BhcnQgL2NvcmUgLS1zb3VyY2Ugcm9vdGZzIC0tcm9vdGZzLWRpcj1jb3JlLWltYWdlLW1pbmltYWwgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDIgLS1sYWJlbCBjb3JlIC0tYWxpZ24gMTAyNAorcGFydCAvYmFja3VwIC0tc291cmNlIHJvb3RmcyAtLXJvb3Rmcy1kaXI9d2ljLWltYWdlLW1pbmltYWwgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDIgLS1sYWJlbCBiYWNrdXAgLS1hbGlnbiAxMDI0CisKK2Jvb3Rsb2FkZXIgIC0tdGltZW91dD0wICAtLWFwcGVuZD0icm9vdHdhaXQgY29uc29sZT10dHkwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB0YWJsZXMvaXB0YWJsZXMvMDAwMS1jb25maWd1cmUtQWRkLW9wdGlvbi10by1lbmFibGUtZGlzYWJsZS1saWJuZm5ldGxpbmsucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHRhYmxlcy9pcHRhYmxlcy8wMDAxLWNvbmZpZ3VyZS1BZGQtb3B0aW9uLXRvLWVuYWJsZS1kaXNhYmxlLWxpYm5mbmV0bGluay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjYwOWUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB0YWJsZXMvaXB0YWJsZXMvMDAwMS1jb25maWd1cmUtQWRkLW9wdGlvbi10by1lbmFibGUtZGlzYWJsZS1saWJuZm5ldGxpbmsucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorRnJvbSA1YzQ3Y2Y1MDYxYjg1MmMwMjE3OGYwMWUyMzY5MGJmZTM4YTk5ZDkzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMTcgTWFyIDIwMTMgMTE6MjE6MzUgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlOiBBZGQgb3B0aW9uIHRvIGVuYWJsZS9kaXNhYmxlIGxpYm5mbmV0bGluaworCitUaGlzIGNoYW5nZXMgdGhlIGNvbmZpZ3VyZSBiZWhhdmlvdXIgZnJvbSBhdXRvZGV0ZWN0aW5nCitmb3IgbGlibmZuZXRsaW5rIHRvIGhhdmluZyBhbiBvcHRpb24gdG8gZGlzYWJsZSBpdCBleHBsaWNpdGx5CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgY29uZmlndXJlLmFjIHwgICAxMSArKysrKysrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGJhNjE2YWIuLmNlMmQzMTUgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTUzLDYgKzUzLDkgQEAgQUNfQVJHX0VOQUJMRShbbGliaXBxXSwKKyBBQ19BUkdfV0lUSChbcGtnY29uZmlnZGlyXSwgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1wa2djb25maWdkaXI9UEFUSF0sCisgCVtQYXRoIHRvIHRoZSBwa2djb25maWcgZGlyZWN0b3J5IFtbTElCRElSL3BrZ2NvbmZpZ11dXSksCisgCVtwa2djb25maWdkaXI9IiR3aXRodmFsIl0sIFtwa2djb25maWdkaXI9JyR7bGliZGlyfS9wa2djb25maWcnXSkKKytBQ19BUkdfRU5BQkxFKFtsaWJuZm5ldGxpbmtdLAorKwlBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWxpYm5mbmV0bGlua10sIFtEbyBub3QgdXNlIG5ldGZpbHRlciBuZXRsaW5rIGxpYnJhcnldKSwKKysJW2VuYWJsZV9saWJuZm5ldGxpbms9IiRlbmFibGV2YWwiXSwgW2VuYWJsZV9saWJuZm5ldGxpbms9InllcyJdKQorIAorIGxpYmlwdGNfTERGTEFHUzI9IiI7CisgQVhfQ0hFQ0tfTElOS0VSX0ZMQUdTKFstV2wsLS1uby1hcy1uZWVkZWRdLAorQEAgLTg5LDkgKzkyLDExIEBAIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfTEFSR0VGSUxFXSwgW3Rlc3QgIiRlbmFibGVfbGFyZ2VmaWxlIiA9ICJ5ZXMiXSkKKyBBTV9DT05ESVRJT05BTChbRU5BQkxFX0RFVkVMXSwgW3Rlc3QgIiRlbmFibGVfZGV2ZWwiID0gInllcyJdKQorIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfTElCSVBRXSwgW3Rlc3QgIiRlbmFibGVfbGliaXBxIiA9ICJ5ZXMiXSkKKyAKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhbbGlibmZuZXRsaW5rXSwgW2xpYm5mbmV0bGluayA+PSAxLjBdLAorLQlbbmZuZXRsaW5rPTFdLCBbbmZuZXRsaW5rPTBdKQorLUFNX0NPTkRJVElPTkFMKFtIQVZFX0xJQk5GTkVUTElOS10sIFt0ZXN0ICIkbmZuZXRsaW5rIiA9IDFdKQorK0FTX0lGKFt0ZXN0ICJ4JGVuYWJsZV9saWJuZm5ldGxpbmsiID0gInh5ZXMiXSwgWworKyAgUEtHX0NIRUNLX01PRFVMRVMoW2xpYm5mbmV0bGlua10sIFtsaWJuZm5ldGxpbmsgPj0gMS4wXSkKKysgIF0pCisrCisrQU1fQ09ORElUSU9OQUwoW0hBVkVfTElCTkZORVRMSU5LXSwgW3Rlc3QgIngkZW5hYmxlX2xpYm5mbmV0bGluayIgPSAieHllcyJdKQorIAorIHJlZ3VsYXJfQ0ZMQUdTPSItV2FsbCAtV2FnZ3JlZ2F0ZS1yZXR1cm4gLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyBcCisgCS1XbWlzc2luZy1wcm90b3R5cGVzIC1XcmVkdW5kYW50LWRlY2xzIC1Xc2hhZG93IC1Xc3RyaWN0LXByb3RvdHlwZXMgXAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdGFibGVzL2lwdGFibGVzLzAwMDEtZml4LWJ1aWxkLXdpdGgtbXVzbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdGFibGVzL2lwdGFibGVzLzAwMDEtZml4LWJ1aWxkLXdpdGgtbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTAwM2Q5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB0YWJsZXMvaXB0YWJsZXMvMDAwMS1maXgtYnVpbGQtd2l0aC1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsODkgQEAKK0Zyb20gN2MwN2I3ZmQ0ZmRkNzg0NGRkMDMyYWY4MjIzMDZmMDhlNDQyMmMzNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDYgQXByIDIwMTUgMjA6NDc6MjkgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gZml4IGJ1aWxkIHdpdGggbXVzbAorCitBZGQgbmVlZGVkIGhlYWRlcnMgdGhleSBhcmUganVzdCBub3QgbmVlZGVkIGZvciBnbGliYzYrIGJ1dCBhbHNvCitmb3IgbXVzbAorRGVmaW5lIGFkZGl0aW9uYWwgVENPUFRTIGlmIG5vdCB0aGVyZQorCit1X2luaXRYIHR5cGVzIGFyZSBpbiBzeXMvdHlwZXMuaCBiZSBleHBsaWNpdCBhYm91dCBpdAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGV4dGVuc2lvbnMvbGlieHRfVENQT1BUU1RSSVAuYyAgICAgICAgICAgfCAxNSArKysrKysrKysrKysrKysKKyBpbmNsdWRlL2xpYmlwdGMvaXB0X2tlcm5lbF9oZWFkZXJzLmggICAgIHwgMTIgLS0tLS0tLS0tLS0tCisgaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaCB8ICAxICsKKyAzIGZpbGVzIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9saWJ4dF9UQ1BPUFRTVFJJUC5jIGIvZXh0ZW5zaW9ucy9saWJ4dF9UQ1BPUFRTVFJJUC5jCitpbmRleCA2ODk3ODU3Li44YTE3MGIyIDEwMDY0NAorLS0tIGEvZXh0ZW5zaW9ucy9saWJ4dF9UQ1BPUFRTVFJJUC5jCisrKysgYi9leHRlbnNpb25zL2xpYnh0X1RDUE9QVFNUUklQLmMKK0BAIC0xMiw2ICsxMiwyMSBAQAorICNpZm5kZWYgVENQT1BUX01ENVNJRworICMJZGVmaW5lIFRDUE9QVF9NRDVTSUcgMTkKKyAjZW5kaWYKKysjaWZuZGVmIFRDUE9QVF9NQVhTRUcKKysjCWRlZmluZSBUQ1BPUFRfTUFYU0VHIDIKKysjZW5kaWYKKysjaWZuZGVmIFRDUE9QVF9XSU5ET1cKKysjCWRlZmluZSBUQ1BPUFRfV0lORE9XIDMKKysjZW5kaWYKKysjaWZuZGVmIFRDUE9QVF9TQUNLX1BFUk1JVFRFRAorKyMJZGVmaW5lIFRDUE9QVF9TQUNLX1BFUk1JVFRFRCA0CisrI2VuZGlmCisrI2lmbmRlZiBUQ1BPUFRfU0FDSworKyMJZGVmaW5lIFRDUE9QVF9TQUNLIDUKKysjZW5kaWYKKysjaWZuZGVmIFRDUE9QVF9USU1FU1RBTVAKKysjCWRlZmluZSBUQ1BPUFRfVElNRVNUQU1QIDgKKysjZW5kaWYKKyAKKyBlbnVtIHsKKyAJT19TVFJJUF9PUFRJT04gPSAwLAorZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGliaXB0Yy9pcHRfa2VybmVsX2hlYWRlcnMuaCBiL2luY2x1ZGUvbGliaXB0Yy9pcHRfa2VybmVsX2hlYWRlcnMuaAoraW5kZXggMTg4NjFmZS4uYTU5NjNlOSAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvbGliaXB0Yy9pcHRfa2VybmVsX2hlYWRlcnMuaAorKysrIGIvaW5jbHVkZS9saWJpcHRjL2lwdF9rZXJuZWxfaGVhZGVycy5oCitAQCAtNSw3ICs1LDYgQEAKKyAKKyAjaW5jbHVkZSA8bGltaXRzLmg+CisgCistI2lmIGRlZmluZWQoX19HTElCQ19fKSAmJiBfX0dMSUJDX18gPT0gMgorICNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pcF9pY21wLmg+CitAQCAtMTMsMTUgKzEyLDQgQEAKKyAjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KKyAjaW5jbHVkZSA8bmV0L2lmLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNlbHNlIC8qIGxpYmM1ICovCistI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKy0jaW5jbHVkZSA8bGludXgvaXAuaD4KKy0jaW5jbHVkZSA8bGludXgvaW4uaD4KKy0jaW5jbHVkZSA8bGludXgvaWYuaD4KKy0jaW5jbHVkZSA8bGludXgvaWNtcC5oPgorLSNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKy0jaW5jbHVkZSA8bGludXgvdWRwLmg+CistI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CistI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorLSNlbmRpZgorICNlbmRpZgorZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCitpbmRleCA1N2ZkODJhLi40ODA3MjQ2IDEwMDY0NAorLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaAorKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaAorQEAgLTE1LDYgKzE1LDcgQEAKKyAjaWZuZGVmIF9JUFRBQkxFU19ICisgI2RlZmluZSBfSVBUQUJMRVNfSAorIAorKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyAKKyAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQuaD4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB0YWJsZXMvaXB0YWJsZXMvdHlwZXMuaC1hZGQtZGVmaW5lcy10aGF0LWFyZS1yZXF1aXJlZC1mb3ItaWZfcGFja2V0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB0YWJsZXMvaXB0YWJsZXMvdHlwZXMuaC1hZGQtZGVmaW5lcy10aGF0LWFyZS1yZXF1aXJlZC1mb3ItaWZfcGFja2V0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZWUyOWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHRhYmxlcy9pcHRhYmxlcy90eXBlcy5oLWFkZC1kZWZpbmVzLXRoYXQtYXJlLXJlcXVpcmVkLWZvci1pZl9wYWNrZXQucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorRnJvbSAxOTU5MzQ5MWY0M2I3MGMxYTcxYzNiOWI4ZjRmZjRmZDE0NTAwMDE0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJ1Y2UgQXNoZmllbGQgPGJydWNlLmFzaGZpZWxkQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDIzIE1hciAyMDEyIDE0OjI3OjIwIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIHR5cGVzLmg6IGFkZCBkZWZpbmVzIHRoYXQgYXJlIHJlcXVpcmVkIGZvciBpZl9wYWNrZXQuaAorCitUaGUgaXB0YWJsZXMgbG9jYWwgbGludXgvdHlwZXMuaCBvdmVycmlkZXMgdGhlIGtlcm5lbC9zeXNyb290Cit0eXBlcy5oLiBBcyBzdWNoLCB3ZSBuZWVkIHRvIHByb3ZpZGUgc29tZSBkZWZpbmVzIHRoYXQgYXJlIHJlcXVpcmVkCit0byBidWlsZCBhZ2FpbnN0IDMuMisga2VybmVsIGhlYWRlcnMuCisKK2lmbmRlZiBwcm90ZWN0aW9uIGlzIHByb3ZpZGVkIGZvciB0aGUgZGVmaW5lcyB0byBlbnN1cmUgdGhhdAorY29uZmlndXJhdGlvbiB0aGF0IGFscmVhZHkgaGF2ZSB0aGVzZSBkZWZpbmVzIGFyZSBzdGlsbCBidWlsZGFibGUuCisKK1RoaXMgY29tbWl0IGlzIHRlbXBvcmFyeSB1bnRpbCBhIG5ldyB2ZXJzaW9uIG9mIGlwdGFibGVzIGNhbiBiZQordXNlZCB0aGF0IGNvbnRhaW5zIHRoZSBkZWZpbmVzLgorCitUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIGNvbW1pdCBpbiB0aGUgaXB0YWJsZXMgZ2l0IHJlcG9zaXRvcnk6CisKKyAgaHR0cHM6Ly9naXQubmV0ZmlsdGVyLm9yZy9jZ2ktYmluL2dpdHdlYi5jZ2k/cD1pcHRhYmxlcy5naXQ7YT1jb21taXQ7aD1kYmU3N2NjOTc0Y2VlNjU2ZWFlMzdlNzUwMzlkZDFhNDEwYTQ1MzViCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogQnJ1Y2UgQXNoZmllbGQgPGJydWNlLmFzaGZpZWxkQHdpbmRyaXZlci5jb20+CistLS0KKyBpbmNsdWRlL2xpbnV4L3R5cGVzLmggfCAgIDEwICsrKysrKysrKysKKyAxIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKK2luZGV4IDhiNDgzYzguLmViZjY0MzIgMTAwNjQ0CistLS0gYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKKysrKyBiL2luY2x1ZGUvbGludXgvdHlwZXMuaAorQEAgLTM0LDUgKzM0LDE1IEBAIHR5cGVkZWYgX191NjQgX19iaXR3aXNlIF9fYmU2NDsKKyB0eXBlZGVmIF9fdTE2IF9fYml0d2lzZSBfX3N1bTE2OworIHR5cGVkZWYgX191MzIgX19iaXR3aXNlIF9fd3N1bTsKKyAKKysjaWZuZGVmIF9fYWxpZ25lZF91NjQKKysjZGVmaW5lIF9fYWxpZ25lZF91NjQgX191NjQgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpCisrI2VuZGlmCisrI2lmbmRlZiBfX2FsaWduZWRfYmU2NAorKyNkZWZpbmUgX19hbGlnbmVkX2JlNjQgX19iZTY0IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKQorKyNlbmRpZgorKyNpZm5kZWYgX19hbGlnbmVkX2xlNjQKKysjZGVmaW5lIF9fYWxpZ25lZF9sZTY0IF9fbGU2NCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkKKysjZW5kaWYKKysKKyAjZW5kaWYgLyogIF9fQVNTRU1CTFlfXyAqLworICNlbmRpZiAvKiBfTElOVVhfVFlQRVNfSCAqLworLS0gCisxLjcuMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdGFibGVzL2lwdGFibGVzXzEuNC4yMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdGFibGVzL2lwdGFibGVzXzEuNC4yMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWMwMTdiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB0YWJsZXMvaXB0YWJsZXNfMS40LjIxLmJiCkBAIC0wLDAgKzEsNDcgQEAKK1NVTU1BUlkgPSAiVG9vbHMgZm9yIG1hbmFnaW5nIGtlcm5lbCBwYWNrZXQgZmlsdGVyaW5nIGNhcGFiaWxpdGllcyIKK0RFU0NSSVBUSU9OID0gImlwdGFibGVzIGlzIHRoZSB1c2Vyc3BhY2UgY29tbWFuZCBsaW5lIHByb2dyYW0gdXNlZCB0byBjb25maWd1cmUgYW5kIGNvbnRyb2wgbmV0d29yayBwYWNrZXQgXAorZmlsdGVyaW5nIGNvZGUgaW4gTGludXguIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5uZXRmaWx0ZXIub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLm5ldGZpbHRlci5vcmcvIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2M1wKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2lwdGFibGVzL2lwdGFibGVzLmM7YmVnaW5saW5lPTEzO2VuZGxpbmU9MjU7bWQ1PWM1Y2ZmZDA5OTc0NTU4Y2YyN2QwZjc2M2RmMmExMmRjIgorCitSUkVDT01NRU5EU18ke1BOfSA9ICJrZXJuZWwtbW9kdWxlLXgtdGFibGVzIFwKKyAgICAgICAgICAgICAgICAgICAgIGtlcm5lbC1tb2R1bGUtaXAtdGFibGVzIFwKKyAgICAgICAgICAgICAgICAgICAgIGtlcm5lbC1tb2R1bGUtaXB0YWJsZS1maWx0ZXIgXAorICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1pcHRhYmxlLW5hdCBcCisgICAgICAgICAgICAgICAgICAgICBrZXJuZWwtbW9kdWxlLW5mLWRlZnJhZy1pcHY0IFwKKyAgICAgICAgICAgICAgICAgICAgIGtlcm5lbC1tb2R1bGUtbmYtY29ubnRyYWNrIFwKKyAgICAgICAgICAgICAgICAgICAgIGtlcm5lbC1tb2R1bGUtbmYtY29ubnRyYWNrLWlwdjQgXAorICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1uZi1uYXQgXAorICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1pcHQtbWFzcXVlcmFkZSIKK0ZJTEVTXyR7UE59ID0rICIke2xpYmRpcn0veHRhYmxlcy8gJHtkYXRhZGlyfS94dGFibGVzIgorRklMRVNfJHtQTn0tZGJnID0rICIke2xpYmRpcn0veHRhYmxlcy8uZGVidWciCisKK1NSQ19VUkkgPSAiaHR0cDovL25ldGZpbHRlci5vcmcvcHJvamVjdHMvaXB0YWJsZXMvZmlsZXMvaXB0YWJsZXMtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly90eXBlcy5oLWFkZC1kZWZpbmVzLXRoYXQtYXJlLXJlcXVpcmVkLWZvci1pZl9wYWNrZXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUtQWRkLW9wdGlvbi10by1lbmFibGUtZGlzYWJsZS1saWJuZm5ldGxpbmsucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1maXgtYnVpbGQtd2l0aC1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MzZkMDQ4YzhlOGVlZWJjZDk3NTdkMDg2M2ViYjBjMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1MjAwNGM2ODAyMWRhOWE1OTlmZWVkMjdmNjVkZWZjZmIyMjEyOGY3ZGEyYzA1MzFjMGY3NWRlMGY0NzlkM2UwIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1rZXJuZWw9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICAgICAgICAgIgorUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgJ2lwdjYnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgIgorCitQQUNLQUdFQ09ORklHW2lwdjZdID0gIi0tZW5hYmxlLWlwdjYsLS1kaXNhYmxlLWlwdjYsIgorCisjIGxpYm5mbmV0bGluayByZWNpcGUgaXMgaW4gbWV0YS1uZXR3b3JraW5nIGxheWVyCitQQUNLQUdFQ09ORklHW2xpYm5mbmV0bGlua10gPSAiLS1lbmFibGUtbGlibmZuZXRsaW5rLC0tZGlzYWJsZS1saWJuZm5ldGxpbmssbGlibmZuZXRsaW5rIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwkjIFJlbW92ZSBzb21lIGxpYnRvb2wgbTQgZmlsZXMKKwkjIEtlZXAgYXhfY2hlY2tfbGlua2VyX2ZsYWdzLm00IHdoaWNoIGJlbG9uZ3MgdG8gYXV0b2NvbmYtYXJjaGl2ZS4KKwlybSAtZiBsaWJ0b29sLm00IGx0fm9ic29sZXRlLm00IGx0b3B0aW9ucy5tNCBsdHN1Z2FyLm00IGx0dmVyc2lvbi5tNAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB1dGlscy9maWxlcy9kZWJpYW4vdGFyZ2V0cy5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB1dGlscy9maWxlcy9kZWJpYW4vdGFyZ2V0cy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYjU1NzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL2RlYmlhbi90YXJnZXRzLmRpZmYKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK0luZGV4OiBpcHV0aWxzLXMyMDEyMTIyMS9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGlwdXRpbHMtczIwMTIxMjIxLm9yaWcvTWFrZWZpbGUKKysrKyBpcHV0aWxzLXMyMDEyMTIyMS9NYWtlZmlsZQorQEAgLTEwNiw3ICsxMDYsNyBAQCBlbmRpZgorIGVuZGlmCisgCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistSVBWNF9UQVJHRVRTPXRyYWNlcGF0aCBwaW5nIGNsb2NrZGlmZiByZGlzYyBhcnBpbmcgdGZ0cGQgcmFycGQKKytJUFY0X1RBUkdFVFM9dHJhY2VwYXRoIHBpbmcgY2xvY2tkaWZmIGFycGluZworIElQVjZfVEFSR0VUUz10cmFjZXBhdGg2IHRyYWNlcm91dGU2IHBpbmc2CisgVEFSR0VUUz0kKElQVjRfVEFSR0VUUykgJChJUFY2X1RBUkdFVFMpCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL2RlYmlhbi91c2VfZ2V0aG9zdGJ5bmFtZTIuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvZGViaWFuL3VzZV9nZXRob3N0YnluYW1lMi5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYjE4ODYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL2RlYmlhbi91c2VfZ2V0aG9zdGJ5bmFtZTIuZGlmZgpAQCAtMCwwICsxLDMxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW2Zyb20gb3RoZXIgZGlzdHJvIERlYmlhbl0KKworSW5kZXg6IGlwdXRpbHMtczIwMTIxMjIxL3RyYWNlcGF0aC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaXB1dGlscy1zMjAxMjEyMjEub3JpZy90cmFjZXBhdGguYworKysrIGlwdXRpbHMtczIwMTIxMjIxL3RyYWNlcGF0aC5jCitAQCAtMzcwLDkgKzM3MCw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAl9CisgI2VuZGlmCisgCistCWhlID0gZ2V0aG9zdGJ5bmFtZShwKTsKKysJaGUgPSBnZXRob3N0YnluYW1lMihhcmd2WzBdLCBBRl9JTkVUKTsKKyAJaWYgKGhlID09IE5VTEwpIHsKKy0JCWhlcnJvcigiZ2V0aG9zdGJ5bmFtZSIpOworKwkJaGVycm9yKCJnZXRob3N0YnluYW1lMiIpOworIAkJZXhpdCgxKTsKKyAJfQorIAorSW5kZXg6IGlwdXRpbHMtczIwMTIxMjIxL3BpbmcuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGlwdXRpbHMtczIwMTIxMjIxLm9yaWcvcGluZy5jCisrKysgaXB1dGlscy1zMjAxMjEyMjEvcGluZy5jCitAQCAtMjc5LDcgKzI3OSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICNlbHNlCisgCQkJaWRuID0gdGFyZ2V0OworICNlbmRpZgorLQkJCWhwID0gZ2V0aG9zdGJ5bmFtZShpZG4pOworKwkJCWhwID0gZ2V0aG9zdGJ5bmFtZTIoaWRuLCBBRl9JTkVUKTsKKyAJCQlpZiAoIWhwKSB7CisgCQkJCWZwcmludGYoc3RkZXJyLCAicGluZzogdW5rbm93biBob3N0ICVzXG4iLCB0YXJnZXQpOworIAkJCQlleGl0KDIpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB1dGlscy9maWxlcy9maXgtYnVpbGQtY29tbWFuZC1saW5lLWFyZ3VtZW50LXdpdGgtZ251dGxzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB1dGlscy9maWxlcy9maXgtYnVpbGQtY29tbWFuZC1saW5lLWFyZ3VtZW50LXdpdGgtZ251dGxzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5Y2Q4MmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL2ZpeC1idWlsZC1jb21tYW5kLWxpbmUtYXJndW1lbnQtd2l0aC1nbnV0bHMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitGcm9tIDU2OGU5OTBkMzBmYzdlOTQxNmUwYTZmOGM3NGVhNTAxMzkyMWVhZWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBcmphbiB2YW4gZGUgVmVuIDxhcmphbnZhbmRldmVuQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTYgSmFuIDIwMTMgMDM6MTI6MTUgKzA5MDAKK1N1YmplY3Q6IFtQQVRDSF0gcGluZzY6IEZpeCBidWlsZCBjb21tYW5kIGxpbmUgYXJndW1lbnQgd2l0aCBnbnV0bHMuCisKK1RoZSBwaW5nNiBjb21tYW5kIGNhbiB1c2UgZWl0aGVyIG9wZW5zc2wgb3IgZ251dGxzLi4uCithbmQgdGhlIE1ha2VmaWxlIGhhcyBhIGJ1bmNoIG9mIHNldHVwIGZvciBkZWZpbmluZyB3aGljaCBvZiB0aGUgdHdvIHRvIHVzZS4KKworVW5mb3J0dW5hdGVseSwgdGhlIGZpbmFsIC1EIGRlZmluZSBvbiB0aGUgY29tbWFuZGxpbmUgdG8gZW5hYmxlIGdudXRscworaW5zaWRlIHRoZSBwaW5nNi5jIGZpbGUgZGlkbid0IGFjdHVhbGx5IG1ha2UgaXQgb250byB0aGUgZ2NjCitjb21tYW5kbGluZS4KK1RoaXMgcGF0Y2ggYWRkcyB0aGUgJChERUZfQ1JZUFRPKSBNYWtlZmlsZSB2YXJpYWJsZSB0byBmaXggdGhpcyBnYXAuCisKK1NpZ25lZC1vZmYtYnk6IEFyamFuIHZhbiBkZSBWZW4gPGFyamFudmFuZGV2ZW5AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogWU9TSElGVUpJIEhpZGVha2kgPHlvc2hmdWppQGxpbnV4LWlwdjYub3JnPgorLS0tCisgTWFrZWZpbGUgfCAgICAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCBjNjJkOWRmLi44OTI0OWY1IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMTQ5LDcgKzE0OSw3IEBAIExJQl9jbG9ja2RpZmYgPSAkKExJQl9DQVApCisgREVGX3BpbmdfY29tbW9uID0gJChERUZfQ0FQKSAkKERFRl9JRE4pCisgREVGX3BpbmcgID0gJChERUZfQ0FQKSAkKERFRl9JRE4pICQoREVGX1dJVEhPVVRfSUZBRERSUykKKyBMSUJfcGluZyAgPSAkKExJQl9DQVApICQoTElCX0lETikKKy1ERUZfcGluZzYgPSAkKERFRl9DQVApICQoREVGX0lETikgJChERUZfV0lUSE9VVF9JRkFERFJTKSAkKERFRl9FTkFCTEVfUElORzZfUlRIRFIpCisrREVGX3Bpbmc2ID0gJChERUZfQ0FQKSAkKERFRl9JRE4pICQoREVGX1dJVEhPVVRfSUZBRERSUykgJChERUZfRU5BQkxFX1BJTkc2X1JUSERSKSAkKERFRl9DUllQVE8pCisgTElCX3Bpbmc2ID0gJChMSUJfQ0FQKSAkKExJQl9JRE4pICQoTElCX1JFU09MVikgJChMSUJfQ1JZUFRPKQorIAorIHBpbmc6IHBpbmdfY29tbW9uLm8KKy0tIAorMS43LjIuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL25zZ21scy1wYXRoLWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvbnNnbWxzLXBhdGgtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYmY5NDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL25zZ21scy1wYXRoLWZpeC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitGaXggbnNnbWxzIHBhdGggaXNzdWUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFpoYWkgRWR3aW4gPGVkd2luLnpoYWlAaW50ZWwuY29tPgorCitJbmRleDogaXB1dGlscy1zMjAxMDEwMDYvZG9jL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaXB1dGlscy1zMjAxMDEwMDYub3JpZy9kb2MvTWFrZWZpbGUJMjAxMS0wOS0xMyAyMDo0MjoyNy4wMDAwMDAwMDAgKzA4MDAKKysrKyBpcHV0aWxzLXMyMDEwMTAwNi9kb2MvTWFrZWZpbGUJMjAxMS0wOS0xMyAyMTowMTo1Mi4wMDAwMDAwMDAgKzA4MDAKK0BAIC0yNywxMCArMjcsMTUgQEAKKyAjIGRvY2Jvb2sybWFuIHByb2R1Y2VzIHV0dGVybHkgdWdseSBvdXRwdXQgYW5kIEkgZGlkIG5vdCBmaW5kCisgIyBhbnkgd2F5IHRvIGN1c3RvbWl6ZSB0aGlzIGJ1dCBoYWNraW5nIGJhY2tlbmQgcGVybCBzY3JpcHQgYSBsaXR0bGUuCisgIyBXZWxsLCBoZW5jZS4uLgorKyMgbnNnbWxzIHNlZW1zIGFwcGVuZCBwYXRoIHRvIHNlYXJjaCBkaXJlY3RvcnkgYWNjb3JkaW5nIHRvIHRoZSBzeXNpZCBwYXRoLgorKyMgZS5nLiBpZiBpbnB1dCAuLi9pbmRleC5kYiwgaXQgd291bGQgc2VhcmNoICRzZWFyY2hfZGlyZWN0b3J5Ly4uLyByYXRoZXIgdGhhbgorKyMgJHNlYXJjaF9kaXJlY3RvcnksIHdoaWNoIGxlYWRzIHNlYXJjaGluZyBmYWlsdXJlLiBGaXhpbmcgbnNnbWxzIHByb2JhYmx5CisrIyBpbnRyb2R1Y2Ugc29tZSBzaWRlIGVmZmVjdHMsIHNvIHVzZSB0aGlzIHVnbHkgaGFjazogcnVubmluZyBuc2dtbHMgaW4gY3VycmVudAorKyMgZGlyZWN0b3J5LCBhbmQgcnVubmluZyBkb2Nib29rMm1hbiBpbiB0bXAgZGlyZWN0b3J5LgorIAorICQoTUFORklMRVMpOiBpbmRleC5kYgorIAlALW1rZGlyIHRtcC5kYjJtYW4KKy0JQHNldCAtZTsgY2QgdG1wLmRiMm1hbjsgbnNnbWxzIC4uLyQ8IHwgc2dtbHNwbCAuLi9kb2Nib29rMm1hbi1zcGVjLnBsIDsJbXYgJEAgLi4KKysJQHNldCAtZTsgbnNnbWxzICQ8ID50bXAuZGIybWFuL291dHB1dDsgY2QgdG1wLmRiMm1hbjsgY2F0IG91dHB1dCB8IHNnbWxzcGwgLi4vZG9jYm9vazJtYW4tc3BlYy5wbCA7CW12ICRAIC4uCisgCUAtcm0gLXJmIHRtcC5kYjJtYW4KKyAKKyBjbGVhbjoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvaXB1dGlsc19zMjAxMjEyMjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2lwdXRpbHNfczIwMTIxMjIxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4N2EzMmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2lwdXRpbHNfczIwMTIxMjIxLmJiCkBAIC0wLDAgKzEsNzEgQEAKK1NVTU1BUlkgPSAiTmV0d29yayBtb25pdG9yaW5nIHRvb2xzIgorREVTQ1JJUFRJT04gPSAiVXRpbGl0aWVzIGZvciB0aGUgSVAgcHJvdG9jb2wsIGluY2x1ZGluZyB0cmFjZXJvdXRlNiwgXAordHJhY2VwYXRoLCB0cmFjZXBhdGg2LCBwaW5nLCBwaW5nNiBhbmQgYXJwaW5nLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuc2tidWZmLm5ldC9pcHV0aWxzIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCisKK0xJQ0VOU0UgPSAiQlNEICYgR1BMdjIrIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9waW5nLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0zNTttZDU9ZjljZWIyMDE3MzNlOWE2Y2Y4ZjAwNzY2ZGQyNzhkODIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdHJhY2VwYXRoLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xMDttZDU9MGVjZWEyYmY2MGJmZjJmM2Q4NDAwOTZkODc2NDdmM2QgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXJwaW5nLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xMTttZDU9ZmU4NDMwMWI1YzI2NTVjOTUwZjhiOTJhMDU3ZmFmYTYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGZ0cGQuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTMyO21kNT0yODgzNGJmOGE5MWE1YjhhOTI3NTVkYmVlNzA5ZWY5NiAiCisKK0RFUEVORFMgPSAiZ251dGxzIGRvY2Jvb2stdXRpbHMtbmF0aXZlIHNnbWxzcGwtbmF0aXZlIGxpYmNhcCIKKworCitTUkNfVVJJID0gImh0dHA6Ly93d3cuc2tidWZmLm5ldC9pcHV0aWxzLyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2RlYmlhbi91c2VfZ2V0aG9zdGJ5bmFtZTIuZGlmZiBcCisgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vdGFyZ2V0cy5kaWZmIFwKKyAgICAgICAgICAgZmlsZTovL25zZ21scy1wYXRoLWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtYnVpbGQtY29tbWFuZC1saW5lLWFyZ3VtZW50LXdpdGgtZ251dGxzLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2MDcyYWVmNjQyMDU3MjBkZDE4OTNiMzc1ZTE4NDE3MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0NTBmNTQ5ZmM1YjYyMGMyM2M1OTI5YWE2ZDU0YjdkZGZjN2VlMWNiMWU4ZWZkYzVlOGJiMjFkOGQwYzUzMTlmIgorCitkb19jb21waWxlICgpIHsKKwlvZV9ydW5tYWtlICdDQz0ke0NDfSAtRF9HTlVfU09VUkNFJyBWUEFUSD0iJHtTVEFHSU5HX0xJQkRJUn06JHtTVEFHSU5HX0RJUl9IT1NUfS8ke2Jhc2VfbGliZGlyfSIgYWxsIG1hbgorfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1tIDA3NTUgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9ICR7RH0ke21hbmRpcn0vbWFuOAorCSMgU1VJRCByb290IHByb2dyYW1zCisJaW5zdGFsbCAtbSA0NTU1IHBpbmcgJHtEfSR7YmFzZV9iaW5kaXJ9L3BpbmcKKwlpbnN0YWxsIC1tIDQ1NTUgcGluZzYgJHtEfSR7YmFzZV9iaW5kaXJ9L3Bpbmc2CisJaW5zdGFsbCAtbSA0NTU1IHRyYWNlcm91dGU2ICR7RH0ke2Jhc2VfYmluZGlyfS8KKwlpbnN0YWxsIC1tIDQ1NTUgY2xvY2tkaWZmICR7RH0ke2Jhc2VfYmluZGlyfS8KKwkjIE90aGVyIHByb2dyYW1ncworCWZvciBpIGluIGFycGluZyB0cmFjZXBhdGggdHJhY2VwYXRoNjsgZG8KKwkgIGluc3RhbGwgLW0gMDc1NSAkaSAke0R9JHtiYXNlX2JpbmRpcn0vCisJZG9uZQorCSMgTWFudWFsIHBhZ2VzIGZvciB0aGluZ3Mgd2UgYnVpbGQgcGFja2FnZXMgZm9yCisJZm9yIGkgaW4gdHJhY2VwYXRoLjggdHJhY2Vyb3V0ZTYuOCBwaW5nLjggYXJwaW5nLjg7IGRvCisJICBpbnN0YWxsIC1tIDA2NDQgZG9jLyRpICR7RH0ke21hbmRpcn0vbWFuOC8gfHwgdHJ1ZQorCWRvbmUKK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQUxURVJOQVRJVkVfJHtQTn0tcGluZyA9ICJwaW5nIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3BpbmddID0gIiR7YmFzZV9iaW5kaXJ9L3BpbmciCisKK0FMVEVSTkFUSVZFXyR7UE59LXBpbmc2ID0gInBpbmc2IgorQUxURVJOQVRJVkVfTElOS19OQU1FW3Bpbmc2XSA9ICIke2Jhc2VfYmluZGlyfS9waW5nNiIKKworUEFDS0FHRVMgKz0gIiR7UE59LXBpbmcgJHtQTn0tcGluZzYgJHtQTn0tYXJwaW5nICR7UE59LXRyYWNlcGF0aCAke1BOfS10cmFjZXBhdGg2ICR7UE59LXRyYWNlcm91dGU2ICR7UE59LWNsb2NrZGlmZiIKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1waW5nICR7UE59LXBpbmc2ICR7UE59LWFycGluZyAke1BOfS10cmFjZXBhdGggJHtQTn0tdHJhY2VwYXRoNiAke1BOfS10cmFjZXJvdXRlNiAke1BOfS1jbG9ja2RpZmYiCisKK0ZJTEVTXyR7UE59CT0gIiIKK0ZJTEVTXyR7UE59LXBpbmcgPSAiJHtiYXNlX2JpbmRpcn0vcGluZy4ke0JQTn0iCitGSUxFU18ke1BOfS1waW5nNiA9ICIke2Jhc2VfYmluZGlyfS9waW5nNi4ke0JQTn0iCitGSUxFU18ke1BOfS1hcnBpbmcgPSAiJHtiYXNlX2JpbmRpcn0vYXJwaW5nIgorRklMRVNfJHtQTn0tdHJhY2VwYXRoID0gIiR7YmFzZV9iaW5kaXJ9L3RyYWNlcGF0aCIKK0ZJTEVTXyR7UE59LXRyYWNlcGF0aDYgPSAiJHtiYXNlX2JpbmRpcn0vdHJhY2VwYXRoNiIKK0ZJTEVTXyR7UE59LXRyYWNlcm91dGU2CT0gIiR7YmFzZV9iaW5kaXJ9L3RyYWNlcm91dGU2IgorRklMRVNfJHtQTn0tY2xvY2tkaWZmID0gIiR7YmFzZV9iaW5kaXJ9L2Nsb2NrZGlmZiIKK0ZJTEVTXyR7UE59LWRvYwk9ICIke21hbmRpcn0vbWFuOCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xlc3MvbGVzc180NzkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sZXNzL2xlc3NfNDc5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxODk1NGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sZXNzL2xlc3NfNDc5LmJiCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiVGV4dCBmaWxlIHZpZXdlciBzaW1pbGFyIHRvIG1vcmUiCitERVNDUklQVElPTiA9ICJMZXNzIGlzIGEgcHJvZ3JhbSBzaW1pbGFyIHRvIG1vcmUsIGkuZS4gYSB0ZXJtaW5hbCBcCitiYXNlZCBwcm9ncmFtIGZvciB2aWV3aW5nIHRleHQgZmlsZXMgYW5kIHRoZSBvdXRwdXQgZnJvbSBvdGhlciBcCitwcm9ncmFtcy4gTGVzcyBvZmZlcnMgbWFueSBmZWF0dXJlcyBiZXlvbmQgdGhvc2UgdGhhdCBtb3JlIGRvZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ncmVlbndvb2Rzb2Z0d2FyZS5jb20vIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCisjIChHUEx2MisgKDw8IDQxOCksIEdQTHYzKyAoPj0gNDE4KSkgfCBsZXNzCisjIEluY2x1ZGluZyBlbWFpbCBhdXRob3IgZ2l2aW5nIHBlcm1pc3NpbmcgdG8gdXNlIEJTRAorIworIyBGcm9tOiBNYXJrIE51ZGVsbWFuIDxtYXJrbkBncmVlbndvb2Rzb2Z0d2FyZS5jb20+CisjIFRvOiBFbGl6YWJldGggRmxhbmFnYW4gPGVsaXphYmV0aC5mbGFuYWdhbkBpbnRlbC5jb20KKyMgRGF0ZTogMTIvMTkvMTEKKyMKKyMgSGkgRWxpemFiZXRoLAorIyBVc2luZyBhIGdlbmVyaWMgQlNEIGxpY2Vuc2UgZm9yIGxlc3MgaXMgZmluZSB3aXRoIG1lLgorIyBUaGFua3MsCisjCisjIC0tTWFyaworIworCitMSUNFTlNFID0gIkdQTHYzKyB8IEJTRC0yLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0xJQ0VOU0U7bWQ1PTQ4YzI2YTMwN2Y5MWFmNzAwZTFmMDA1ODVmMjE1YWFmIgorREVQRU5EUyA9ICJuY3Vyc2VzIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuZ3JlZW53b29kc29mdHdhcmUuY29tLyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKwkgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjA0OWY1MWNjZmUyNjg2MDA5YzZjZTk0M2VlYjRiYmFmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjViZjA2Y2IzMGVlMmEyYmQxZjc5ZjM5YWE5MWU0NjQ0NGU3Y2IxOWI0OGM5NWM0OTkyZmE2M2NmZTQ1MjdhODAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworZG9faW5zdGFsbCAoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgJ2JpbmRpcj0ke0R9JHtiaW5kaXJ9JyAnbWFuZGlyPSR7RH0ke21hbmRpcn0nIGluc3RhbGwKK30KKworQUxURVJOQVRJVkVfJHtQTn0gPSAibGVzcyIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vMDBfYXJjaGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby8wMF9hcmNoZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ2NDQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vMDBfYXJjaGVzLnBhdGNoCkBAIC0wLDAgKzEsNjA3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitmcm9tIG9wZW5lbWJlZGRlZCwgYWRkZWQgYnkgUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CisKK0luZGV4OiBsaWJhaW8tMC4zLjExMC9zcmMvc3lzY2FsbC1tNjhrLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBsaWJhaW8tMC4zLjExMC9zcmMvc3lzY2FsbC1tNjhrLmgKK0BAIC0wLDAgKzEsNzggQEAKKysjZGVmaW5lIF9fTlJfaW9fc2V0dXAJCTI0MQorKyNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkyNDIKKysjZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzCTI0MworKyNkZWZpbmUgX19OUl9pb19zdWJtaXQJCTI0NAorKyNkZWZpbmUgX19OUl9pb19jYW5jZWwJCTI0NQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDEodHlwZSxmbmFtZSxzbmFtZSxhdHlwZSxhKSBcCisrdHlwZSBmbmFtZShhdHlwZSBhKSBcCisreyBcCisrcmVnaXN0ZXIgbG9uZyBfX3JlcyBfX2FzbV9fICgiJWQwIikgPSBfX05SXyMjc25hbWU7IFwKKytyZWdpc3RlciBsb25nIF9fYSBfX2FzbV9fICgiJWQxIikgPSAobG9uZykoYSk7IFwKKytfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXAgICMwIiBcCisrCQkgICAgICA6ICIrZCIgKF9fcmVzKSBcCisrCQkgICAgICA6ICJkIiAoX19hKSAgKTsgXAorK3JldHVybiAodHlwZSkgX19yZXM7IFwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsMih0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYikgXAorK3R5cGUgZm5hbWUoYXR5cGUgYSxidHlwZSBiKSBcCisreyBcCisrcmVnaXN0ZXIgbG9uZyBfX3JlcyBfX2FzbV9fICgiJWQwIikgPSBfX05SXyMjc25hbWU7IFwKKytyZWdpc3RlciBsb25nIF9fYSBfX2FzbV9fICgiJWQxIikgPSAobG9uZykoYSk7IFwKKytyZWdpc3RlciBsb25nIF9fYiBfX2FzbV9fICgiJWQyIikgPSAobG9uZykoYik7IFwKKytfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXAgICMwIiBcCisrCQkgICAgICA6ICIrZCIgKF9fcmVzKSBcCisrCQkgICAgICA6ICJkIiAoX19hKSwgImQiIChfX2IpIFwKKysJCSAgICAgKTsgXAorK3JldHVybiAodHlwZSkgX19yZXM7IFwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsMyh0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYixjdHlwZSxjKSBcCisrdHlwZSBmbmFtZShhdHlwZSBhLGJ0eXBlIGIsY3R5cGUgYykgXAorK3sgXAorK3JlZ2lzdGVyIGxvbmcgX19yZXMgX19hc21fXyAoIiVkMCIpID0gX19OUl8jI3NuYW1lOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2EgX19hc21fXyAoIiVkMSIpID0gKGxvbmcpKGEpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2IgX19hc21fXyAoIiVkMiIpID0gKGxvbmcpKGIpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2MgX19hc21fXyAoIiVkMyIpID0gKGxvbmcpKGMpOyBcCisrX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0cmFwICAjMCIgXAorKwkJICAgICAgOiAiK2QiIChfX3JlcykgXAorKwkJICAgICAgOiAiZCIgKF9fYSksICJkIiAoX19iKSwgXAorKwkJCSJkIiAoX19jKSBcCisrCQkgICAgICk7IFwKKytyZXR1cm4gKHR5cGUpIF9fcmVzOyBcCisrfQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDQodHlwZSxmbmFtZSxzbmFtZSxhdHlwZSxhLGJ0eXBlLGIsY3R5cGUsYyxkdHlwZSxkKSBcCisrdHlwZSBmbmFtZSAoYXR5cGUgYSwgYnR5cGUgYiwgY3R5cGUgYywgZHR5cGUgZCkgXAorK3sgXAorK3JlZ2lzdGVyIGxvbmcgX19yZXMgX19hc21fXyAoIiVkMCIpID0gX19OUl8jI3NuYW1lOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2EgX19hc21fXyAoIiVkMSIpID0gKGxvbmcpKGEpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2IgX19hc21fXyAoIiVkMiIpID0gKGxvbmcpKGIpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2MgX19hc21fXyAoIiVkMyIpID0gKGxvbmcpKGMpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2QgX19hc21fXyAoIiVkNCIpID0gKGxvbmcpKGQpOyBcCisrX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0cmFwICAjMCIgXAorKwkJICAgICAgOiAiK2QiIChfX3JlcykgXAorKwkJICAgICAgOiAiZCIgKF9fYSksICJkIiAoX19iKSwgXAorKwkJCSJkIiAoX19jKSwgImQiIChfX2QpICBcCisrCQkgICAgICk7IFwKKytyZXR1cm4gKHR5cGUpIF9fcmVzOyBcCisrfQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDUodHlwZSxmbmFtZSxzbmFtZSxhdHlwZSxhLGJ0eXBlLGIsY3R5cGUsYyxkdHlwZSxkLGV0eXBlLGUpIFwKKyt0eXBlIGZuYW1lIChhdHlwZSBhLGJ0eXBlIGIsY3R5cGUgYyxkdHlwZSBkLGV0eXBlIGUpIFwKKyt7IFwKKytyZWdpc3RlciBsb25nIF9fcmVzIF9fYXNtX18gKCIlZDAiKSA9IF9fTlJfIyNzbmFtZTsgXAorK3JlZ2lzdGVyIGxvbmcgX19hIF9fYXNtX18gKCIlZDEiKSA9IChsb25nKShhKTsgXAorK3JlZ2lzdGVyIGxvbmcgX19iIF9fYXNtX18gKCIlZDIiKSA9IChsb25nKShiKTsgXAorK3JlZ2lzdGVyIGxvbmcgX19jIF9fYXNtX18gKCIlZDMiKSA9IChsb25nKShjKTsgXAorK3JlZ2lzdGVyIGxvbmcgX19kIF9fYXNtX18gKCIlZDQiKSA9IChsb25nKShkKTsgXAorK3JlZ2lzdGVyIGxvbmcgX19lIF9fYXNtX18gKCIlZDUiKSA9IChsb25nKShlKTsgXAorK19fYXNtX18gX192b2xhdGlsZV9fICgidHJhcCAgIzAiIFwKKysJCSAgICAgIDogIitkIiAoX19yZXMpIFwKKysJCSAgICAgIDogImQiIChfX2EpLCAiZCIgKF9fYiksIFwKKysJCQkiZCIgKF9fYyksICJkIiAoX19kKSwgImQiIChfX2UpICBcCisrCQkgICAgICk7IFwKKytyZXR1cm4gKHR5cGUpIF9fcmVzOyBcCisrfQorKworSW5kZXg6IGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhaW8tMC4zLjExMC5vcmlnL3NyYy9zeXNjYWxsLmgKKysrKyBsaWJhaW8tMC4zLjExMC9zcmMvc3lzY2FsbC5oCitAQCAtMjgsNiArMjgsMTIgQEAKKyAjaW5jbHVkZSAic3lzY2FsbC1zcGFyYy5oIgorICNlbGlmIGRlZmluZWQoX19hYXJjaDY0X18pCisgI2luY2x1ZGUgInN5c2NhbGwtYXJtNjQuaCIKKysjZWxpZiBkZWZpbmVkKF9fbTY4a19fKQorKyNpbmNsdWRlICJzeXNjYWxsLW02OGsuaCIKKysjZWxpZiBkZWZpbmVkKF9faHBwYV9fKQorKyNpbmNsdWRlICJzeXNjYWxsLXBhcmlzYy5oIgorKyNlbGlmIGRlZmluZWQoX19taXBzX18pCisrI2luY2x1ZGUgInN5c2NhbGwtbWlwcy5oIgorICNlbHNlCisgI3dhcm5pbmcgInVzaW5nIGdlbmVyaWMgc3lzY2FsbCBtZXRob2QiCisgI2luY2x1ZGUgInN5c2NhbGwtZ2VuZXJpYy5oIgorSW5kZXg6IGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLW1pcHMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLW1pcHMuaAorQEAgLTAsMCArMSwyMjMgQEAKKysvKgorKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorKyAqIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDk2LCA5NywgOTgsIDk5LCAyMDAwIGJ5IFJhbGYgQmFlY2hsZQorKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisrICoKKysgKiBDaGFuZ2VkIHN5c3RlbSBjYWxscyBtYWNyb3MgX3N5c2NhbGw1IC0gX3N5c2NhbGw3IHRvIHB1c2ggYXJncyA1IHRvIDcgb250bworKyAqIHRoZSBzdGFjay4gUm9iaW4gRmFyaW5lIGZvciBBQ04gUy5BLCBDb3B5cmlnaHQgKEMpIDE5OTYgYnkgQUNOIFMuQQorKyAqLworKworKyNpZm5kZWYgX01JUFNfU0lNX0FCSTMyCisrI2RlZmluZSBfTUlQU19TSU1fQUJJMzIJCQkxCisrI2RlZmluZSBfTUlQU19TSU1fTkFCSTMyCQkyCisrI2RlZmluZSBfTUlQU19TSU1fQUJJNjQJCQkzCisrI2VuZGlmCisrCisrI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJMzIKKysKKysvKgorKyAqIExpbnV4IG8zMiBzdHlsZSBzeXNjYWxscyBhcmUgaW4gdGhlIHJhbmdlIGZyb20gNDAwMCB0byA0OTk5LgorKyAqLworKyNkZWZpbmUgX19OUl9MaW51eAkJCTQwMDAKKysjZGVmaW5lIF9fTlJfaW9fc2V0dXAJCQkoX19OUl9MaW51eCArIDI0MSkKKysjZGVmaW5lIF9fTlJfaW9fZGVzdHJveQkJCShfX05SX0xpbnV4ICsgMjQyKQorKyNkZWZpbmUgX19OUl9pb19nZXRldmVudHMJCShfX05SX0xpbnV4ICsgMjQzKQorKyNkZWZpbmUgX19OUl9pb19zdWJtaXQJCQkoX19OUl9MaW51eCArIDI0NCkKKysjZGVmaW5lIF9fTlJfaW9fY2FuY2VsCQkJKF9fTlJfTGludXggKyAyNDUpCisrCisrI2VuZGlmIC8qIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJMzIgKi8KKysKKysjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NAorKworKy8qCisrICogTGludXggNjQtYml0IHN5c2NhbGxzIGFyZSBpbiB0aGUgcmFuZ2UgZnJvbSA1MDAwIHRvIDU5OTkuCisrICovCisrI2RlZmluZSBfX05SX0xpbnV4CQkJNTAwMAorKyNkZWZpbmUgX19OUl9pb19zZXR1cAkJCShfX05SX0xpbnV4ICsgMjAwKQorKyNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkJKF9fTlJfTGludXggKyAyMDEpCisrI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkJKF9fTlJfTGludXggKyAyMDIpCisrI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJCShfX05SX0xpbnV4ICsgMjAzKQorKyNkZWZpbmUgX19OUl9pb19jYW5jZWwJCQkoX19OUl9MaW51eCArIDIwNCkKKysjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NCAqLworKworKyNpZiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMgorKworKy8qCisrICogTGludXggTjMyIHN5c2NhbGxzIGFyZSBpbiB0aGUgcmFuZ2UgZnJvbSA2MDAwIHRvIDY5OTkuCisrICovCisrI2RlZmluZSBfX05SX0xpbnV4CQkJNjAwMAorKyNkZWZpbmUgX19OUl9pb19zZXR1cAkJCShfX05SX0xpbnV4ICsgMjAwKQorKyNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkJKF9fTlJfTGludXggKyAyMDEpCisrI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkJKF9fTlJfTGludXggKyAyMDIpCisrI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJCShfX05SX0xpbnV4ICsgMjAzKQorKyNkZWZpbmUgX19OUl9pb19jYW5jZWwJCQkoX19OUl9MaW51eCArIDIwNCkKKysjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIgKi8KKysKKysjZGVmaW5lIGlvX3N5c2NhbGwxKHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSkgXAorK3R5cGUgZm5hbWUoYXR5cGUgYSkgXAorK3sgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTAgYXNtKCIkNCIpID0gKHVuc2lnbmVkIGxvbmcpIGE7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EzIGFzbSgiJDciKTsgXAorKwl1bnNpZ25lZCBsb25nIF9fdjA7IFwKKysJXAorKwlfX2FzbV9fIHZvbGF0aWxlICggXAorKwkiLnNldFx0bm9yZW9yZGVyXG5cdCIgXAorKwkibGlcdCQyLCAlM1x0XHRcdCMgIiAjZm5hbWUgIlxuXHQiIFwKKysJInN5c2NhbGxcblx0IiBcCisrCSJtb3ZlXHQlMCwgJDJcblx0IiBcCisrCSIuc2V0XHRyZW9yZGVyIiBcCisrCTogIj0mciIgKF9fdjApLCAiPXIiIChfX2EzKSBcCisrCTogInIiIChfX2EwKSwgImkiIChfX05SXyMjc25hbWUpIFwKKysJOiAiJDIiLCAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDEzIiwgIiQxNCIsICIkMTUiLCAiJDI0IiwgXAorKwkgICJtZW1vcnkiKTsgXAorKwlcCisrCWlmIChfX2EzID09IDApIFwKKysJCXJldHVybiAodHlwZSkgX192MDsgXAorKwlyZXR1cm4gKHR5cGUpIC0xOyBcCisrfQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDIodHlwZSxmbmFtZSxzbmFtZSxhdHlwZSxhLGJ0eXBlLGIpIFwKKyt0eXBlIGZuYW1lKGF0eXBlIGEsIGJ0eXBlIGIpIFwKKyt7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EwIGFzbSgiJDQiKSA9ICh1bnNpZ25lZCBsb25nKSBhOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMSBhc20oIiQ1IikgPSAodW5zaWduZWQgbG9uZykgYjsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTMgYXNtKCIkNyIpOyBcCisrCXVuc2lnbmVkIGxvbmcgX192MDsgXAorKwlcCisrCV9fYXNtX18gdm9sYXRpbGUgKCBcCisrCSIuc2V0XHRub3Jlb3JkZXJcblx0IiBcCisrCSJsaVx0JDIsICU0XHRcdFx0IyAiICNmbmFtZSAiXG5cdCIgXAorKwkic3lzY2FsbFxuXHQiIFwKKysJIm1vdmVcdCUwLCAkMlxuXHQiIFwKKysJIi5zZXRcdHJlb3JkZXIiIFwKKysJOiAiPSZyIiAoX192MCksICI9ciIgKF9fYTMpIFwKKysJOiAiciIgKF9fYTApLCAiciIgKF9fYTEpLCAiaSIgKF9fTlJfIyNzbmFtZSkgXAorKwk6ICIkMiIsICIkOCIsICIkOSIsICIkMTAiLCAiJDExIiwgIiQxMiIsICIkMTMiLCAiJDE0IiwgIiQxNSIsICIkMjQiLCBcCisrCSAgIm1lbW9yeSIpOyBcCisrCVwKKysJaWYgKF9fYTMgPT0gMCkgXAorKwkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCisrCXJldHVybiAodHlwZSkgLTE7IFwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsMyh0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYixjdHlwZSxjKSBcCisrdHlwZSBmbmFtZShhdHlwZSBhLCBidHlwZSBiLCBjdHlwZSBjKSBcCisreyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMCBhc20oIiQ0IikgPSAodW5zaWduZWQgbG9uZykgYTsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTEgYXNtKCIkNSIpID0gKHVuc2lnbmVkIGxvbmcpIGI7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EyIGFzbSgiJDYiKSA9ICh1bnNpZ25lZCBsb25nKSBjOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMyBhc20oIiQ3Iik7IFwKKysJdW5zaWduZWQgbG9uZyBfX3YwOyBcCisrCVwKKysJX19hc21fXyB2b2xhdGlsZSAoIFwKKysJIi5zZXRcdG5vcmVvcmRlclxuXHQiIFwKKysJImxpXHQkMiwgJTVcdFx0XHQjICIgI2ZuYW1lICJcblx0IiBcCisrCSJzeXNjYWxsXG5cdCIgXAorKwkibW92ZVx0JTAsICQyXG5cdCIgXAorKwkiLnNldFx0cmVvcmRlciIgXAorKwk6ICI9JnIiIChfX3YwKSwgIj1yIiAoX19hMykgXAorKwk6ICJyIiAoX19hMCksICJyIiAoX19hMSksICJyIiAoX19hMiksICJpIiAoX19OUl8jI3NuYW1lKSBcCisrCTogIiQyIiwgIiQ4IiwgIiQ5IiwgIiQxMCIsICIkMTEiLCAiJDEyIiwgIiQxMyIsICIkMTQiLCAiJDE1IiwgIiQyNCIsIFwKKysJICAibWVtb3J5Iik7IFwKKysJXAorKwlpZiAoX19hMyA9PSAwKSBcCisrCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKysJcmV0dXJuICh0eXBlKSAtMTsgXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGw0KHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiLGN0eXBlLGMsZHR5cGUsZCkgXAorK3R5cGUgZm5hbWUoYXR5cGUgYSwgYnR5cGUgYiwgY3R5cGUgYywgZHR5cGUgZCkgXAorK3sgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTAgYXNtKCIkNCIpID0gKHVuc2lnbmVkIGxvbmcpIGE7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2ExIGFzbSgiJDUiKSA9ICh1bnNpZ25lZCBsb25nKSBiOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMiBhc20oIiQ2IikgPSAodW5zaWduZWQgbG9uZykgYzsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTMgYXNtKCIkNyIpID0gKHVuc2lnbmVkIGxvbmcpIGQ7IFwKKysJdW5zaWduZWQgbG9uZyBfX3YwOyBcCisrCVwKKysJX19hc21fXyB2b2xhdGlsZSAoIFwKKysJIi5zZXRcdG5vcmVvcmRlclxuXHQiIFwKKysJImxpXHQkMiwgJTVcdFx0XHQjICIgI2ZuYW1lICJcblx0IiBcCisrCSJzeXNjYWxsXG5cdCIgXAorKwkibW92ZVx0JTAsICQyXG5cdCIgXAorKwkiLnNldFx0cmVvcmRlciIgXAorKwk6ICI9JnIiIChfX3YwKSwgIityIiAoX19hMykgXAorKwk6ICJyIiAoX19hMCksICJyIiAoX19hMSksICJyIiAoX19hMiksICJpIiAoX19OUl8jI3NuYW1lKSBcCisrCTogIiQyIiwgIiQ4IiwgIiQ5IiwgIiQxMCIsICIkMTEiLCAiJDEyIiwgIiQxMyIsICIkMTQiLCAiJDE1IiwgIiQyNCIsIFwKKysJICAibWVtb3J5Iik7IFwKKysJXAorKwlpZiAoX19hMyA9PSAwKSBcCisrCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKysJcmV0dXJuICh0eXBlKSAtMTsgXAorK30KKysKKysjaWYgKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJMzIpCisrCisrLyoKKysgKiBVc2luZyB0aG9zZSBtZWFucyB5b3VyIGJyYWluIG5lZWRzIG1vcmUgdGhhbiBhbiBvaWwgY2hhbmdlIDstKQorKyAqLworKworKyNkZWZpbmUgaW9fc3lzY2FsbDUodHlwZSxmbmFtZSxzbmFtZSxhdHlwZSxhLGJ0eXBlLGIsY3R5cGUsYyxkdHlwZSxkLGV0eXBlLGUpIFwKKyt0eXBlIGZuYW1lKGF0eXBlIGEsIGJ0eXBlIGIsIGN0eXBlIGMsIGR0eXBlIGQsIGV0eXBlIGUpIFwKKyt7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EwIGFzbSgiJDQiKSA9ICh1bnNpZ25lZCBsb25nKSBhOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMSBhc20oIiQ1IikgPSAodW5zaWduZWQgbG9uZykgYjsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTIgYXNtKCIkNiIpID0gKHVuc2lnbmVkIGxvbmcpIGM7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EzIGFzbSgiJDciKSA9ICh1bnNpZ25lZCBsb25nKSBkOyBcCisrCXVuc2lnbmVkIGxvbmcgX192MDsgXAorKwlcCisrCV9fYXNtX18gdm9sYXRpbGUgKCBcCisrCSIuc2V0XHRub3Jlb3JkZXJcblx0IiBcCisrCSJsd1x0JDIsICU2XG5cdCIgXAorKwkic3VidVx0JDI5LCAzMlxuXHQiIFwKKysJInN3XHQkMiwgMTYoJDI5KVxuXHQiIFwKKysJImxpXHQkMiwgJTVcdFx0XHQjICIgI2ZuYW1lICJcblx0IiBcCisrCSJzeXNjYWxsXG5cdCIgXAorKwkibW92ZVx0JTAsICQyXG5cdCIgXAorKwkiYWRkaXVcdCQyOSwgMzJcblx0IiBcCisrCSIuc2V0XHRyZW9yZGVyIiBcCisrCTogIj0mciIgKF9fdjApLCAiK3IiIChfX2EzKSBcCisrCTogInIiIChfX2EwKSwgInIiIChfX2ExKSwgInIiIChfX2EyKSwgImkiIChfX05SXyMjc25hbWUpLCBcCisrCSAgIm0iICgodW5zaWduZWQgbG9uZyllKSBcCisrCTogIiQyIiwgIiQ4IiwgIiQ5IiwgIiQxMCIsICIkMTEiLCAiJDEyIiwgIiQxMyIsICIkMTQiLCAiJDE1IiwgIiQyNCIsIFwKKysJICAibWVtb3J5Iik7IFwKKysJXAorKwlpZiAoX19hMyA9PSAwKSBcCisrCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKysJcmV0dXJuICh0eXBlKSAtMTsgXAorK30KKysKKysjZW5kaWYgLyogKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJMzIpICovCisrCisrI2lmIChfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMikgfHwgKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJNjQpCisrCisrI2RlZmluZSBpb19zeXNjYWxsNSh0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYixjdHlwZSxjLGR0eXBlLGQsZXR5cGUsZSkgXAorK3R5cGUgZm5hbWUgKGF0eXBlIGEsYnR5cGUgYixjdHlwZSBjLGR0eXBlIGQsZXR5cGUgZSkgXAorK3sgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTAgYXNtKCIkNCIpID0gKHVuc2lnbmVkIGxvbmcpIGE7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2ExIGFzbSgiJDUiKSA9ICh1bnNpZ25lZCBsb25nKSBiOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMiBhc20oIiQ2IikgPSAodW5zaWduZWQgbG9uZykgYzsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTMgYXNtKCIkNyIpID0gKHVuc2lnbmVkIGxvbmcpIGQ7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2E0IGFzbSgiJDgiKSA9ICh1bnNpZ25lZCBsb25nKSBlOyBcCisrCXVuc2lnbmVkIGxvbmcgX192MDsgXAorKwlcCisrCV9fYXNtX18gdm9sYXRpbGUgKCBcCisrCSIuc2V0XHRub3Jlb3JkZXJcblx0IiBcCisrCSJsaVx0JDIsICU2XHRcdFx0IyAiICNmbmFtZSAiXG5cdCIgXAorKwkic3lzY2FsbFxuXHQiIFwKKysJIm1vdmVcdCUwLCAkMlxuXHQiIFwKKysJIi5zZXRcdHJlb3JkZXIiIFwKKysJOiAiPSZyIiAoX192MCksICIrciIgKF9fYTMpIFwKKysJOiAiciIgKF9fYTApLCAiciIgKF9fYTEpLCAiciIgKF9fYTIpLCAiciIgKF9fYTQpLCAiaSIgKF9fTlJfIyNzbmFtZSkgXAorKwk6ICIkMiIsICIkOSIsICIkMTAiLCAiJDExIiwgIiQxMiIsICIkMTMiLCAiJDE0IiwgIiQxNSIsICIkMjQiLCBcCisrCSAgIm1lbW9yeSIpOyBcCisrCVwKKysJaWYgKF9fYTMgPT0gMCkgXAorKwkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCisrCXJldHVybiAodHlwZSkgLTE7IFwKKyt9CisrCisrI2VuZGlmIC8qIChfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMikgfHwgKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJNjQpICovCisrCitJbmRleDogbGliYWlvLTAuMy4xMTAvc3JjL3N5c2NhbGwtcGFyaXNjLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBsaWJhaW8tMC4zLjExMC9zcmMvc3lzY2FsbC1wYXJpc2MuaAorQEAgLTAsMCArMSwxNDYgQEAKKysvKgorKyAqIExpbnV4IHN5c3RlbSBjYWxsIG51bWJlcnMuCisrICoKKysgKiBDYXJ5IENvdXRhbnQgc2F5cyB0aGF0IHdlIHNob3VsZCBqdXN0IHVzZSBhbm90aGVyIHN5c2NhbGwgZ2F0ZXdheQorKyAqIHBhZ2UgdG8gYXZvaWQgY2xhc2hpbmcgd2l0aCB0aGUgSFBVWCBzcGFjZSwgYW5kIEkgdGhpbmsgaGUncyByaWdodDoKKysgKiBpdCB3aWxsIHdvdWxkIGtlZXAgYSBicmFuY2ggb3V0IG9mIG91ciBzeXNjYWxsIGVudHJ5IHBhdGgsIGF0IHRoZQorKyAqIHZlcnkgbGVhc3QuICBJZiB3ZSBkZWNpZGUgdG8gY2hhbmdlIGl0IGxhdGVyLCB3ZSBjYW4gYGBqdXN0JycgdHdlYWsKKysgKiB0aGUgTElOVVhfR0FURVdBWV9BRERSIGRlZmluZSBhdCB0aGUgYm90dG9tIGFuZCBtYWtlIF9fTlJfTGludXggYmUKKysgKiAxMDI0IG9yIHNvbWV0aGluZy4gIE9oLCBhbmQgcmVjb21waWxlIGxpYmMuID0pCisrICoKKysgKiA2NC1iaXQgSFBVWCBiaW5hcmllcyBnZXQgdGhlIHN5c2NhbGwgZ2F0ZXdheSBhZGRyZXNzIHBhc3NlZCBpbiBhIHJlZ2lzdGVyCisrICogZnJvbSB0aGUga2VybmVsIGF0IHN0YXJ0dXAsIHdoaWNoIHNlZW1zIGEgc2FuZSBzdHJhdGVneS4KKysgKi8KKysKKysjZGVmaW5lIF9fTlJfTGludXggICAgICAgICAgICAgICAgMAorKyNkZWZpbmUgX19OUl9pb19zZXR1cCAgICAgICAgICAgKF9fTlJfTGludXggKyAyMTUpCisrI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kgICAgICAgICAoX19OUl9MaW51eCArIDIxNikKKysjZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzICAgICAgIChfX05SX0xpbnV4ICsgMjE3KQorKyNkZWZpbmUgX19OUl9pb19zdWJtaXQgICAgICAgICAgKF9fTlJfTGludXggKyAyMTgpCisrI2RlZmluZSBfX05SX2lvX2NhbmNlbCAgICAgICAgICAoX19OUl9MaW51eCArIDIxOSkKKysKKysjZGVmaW5lIFNZU19pZnkoc3lzY2FsbF9uYW1lKSAgIF9fTlJfIyNzeXNjYWxsX25hbWUKKysKKysvKiBBc3N1bWUgYWxsIHN5c2NhbGxzIGFyZSBkb25lIGZyb20gUElDIGNvZGUganVzdCB0byBiZQorKyAqIHNhZmUuIFRoZSB3b3JzdCBjYXNlIHNjZW5hcmlvIGlzIHRoYXQgeW91IGxvc2UgYSByZWdpc3RlcgorKyAqIGFuZCBzYXZlL3Jlc3RvcmUgcjE5IGFjcm9zcyB0aGUgc3lzY2FsbC4gKi8KKysjZGVmaW5lIFBJQworKworKy8qIERlZmluaXRpb24gdGFrZW4gZnJvbSBnbGliYyAyLjMuMworKyAqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2hwcGEvc3lzZGVwLmgKKysgKi8KKysKKysjaWZkZWYgUElDCisrLyogV0FSTklORzogQ0FOTk9UIEJFIFVTRUQgSU4gQSBOT1AhICovCisrIyBkZWZpbmUgS19TVFdfQVNNX1BJQwkiICAgICAgIGNvcHkgJSVyMTksICUlcjRcbiIKKysjIGRlZmluZSBLX0xEV19BU01fUElDCSIgICAgICAgY29weSAlJXI0LCAlJXIxOVxuIgorKyMgZGVmaW5lIEtfVVNJTkdfR1I0CSIlcjQiLAorKyNlbHNlCisrIyBkZWZpbmUgS19TVFdfQVNNX1BJQwkiIFxuIgorKyMgZGVmaW5lIEtfTERXX0FTTV9QSUMJIiBcbiIKKysjIGRlZmluZSBLX1VTSU5HX0dSNAorKyNlbmRpZgorKworKy8qIEdDQyBoYXMgdG8gYmUgd2FybmVkIHRoYXQgYSBzeXNjYWxsIG1heSBjbG9iYmVyIGFsbCB0aGUgQUJJCisrICAgcmVnaXN0ZXJzIGxpc3RlZCBhcyAiY2FsbGVyLXNhdmVzIiwgc2VlIHBhZ2UgOCwgVGFibGUgMgorKyAgIGluIHNlY3Rpb24gMi4yLjYgb2YgdGhlIFBBLVJJU0MgUlVOLVRJTUUgYXJjaGl0ZWN0dXJlCisrICAgZG9jdW1lbnQuIEhvd2V2ZXIhIHIyOCBpcyB0aGUgcmVzdWx0IGFuZCB3aWxsIGNvbmZsaWN0IHdpdGgKKysgICB0aGUgY2xvYmJlciBsaXN0IHNvIGl0IGlzIGxlZnQgb3V0LiBBbHNvIHRoZSBpbnB1dCBhcmd1bWVudHMKKysgICByZWdpc3RlcnMgcjIwIC0+IHIyNiB3aWxsIGNvbmZsaWN0IHdpdGggdGhlIGxpc3Qgc28gdGhleQorKyAgIGFyZSB0cmVhdGVkIHNwZWNpYWxseS4gQWx0aG91Z2ggcjE5IGlzIGNsb2JiZXJlZCBieSB0aGUgc3lzY2FsbAorKyAgIHdlIGNhbm5vdCBzYXkgdGhpcyBiZWNhdXNlIGl0IHdvdWxkIHZpb2xhdGUgQUJJLCB0aHVzIHdlIHNheQorKyAgIHI0IGlzIGNsb2JiZXJlZCBhbmQgdXNlIHRoYXQgcmVnaXN0ZXIgdG8gc2F2ZS9yZXN0b3JlIHIxOQorKyAgIGFjcm9zcyB0aGUgc3lzY2FsbC4gKi8KKysKKysjZGVmaW5lIEtfQ0FMTF9DTE9CX1JFR1MgIiVyMSIsICIlcjIiLCBLX1VTSU5HX0dSNCBcCisrCQkJICIlcjIwIiwgIiVyMjkiLCAiJXIzMSIKKysKKysjdW5kZWYgS19JTkxJTkVfU1lTQ0FMTAorKyNkZWZpbmUgS19JTkxJTkVfU1lTQ0FMTChuYW1lLCBuciwgYXJncy4uLikJKHsJCQlcCisrCWxvbmcgX19zeXNfcmVzOwkJCQkJCQlcCisrCXsJCQkJCQkJCVwKKysJCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19yZXMgX19hc21fXygicjI4Iik7CQlcCisrCQlLX0xPQURfQVJHU18jI25yKGFyZ3MpCQkJCQlcCisrCQkvKiBGSVhNRTogSEFDSyBzdHcvbGR3IHIxOSBhcm91bmQgc3lzY2FsbCAqLwkJXAorKwkJX19hc21fXyB2b2xhdGlsZSgJCQkJCVwKKysJCQlLX1NUV19BU01fUElDCQkJCQlcCisrCQkJIglibGUgIDB4MTAwKCUlc3IyLCAlJXIwKVxuIgkJXAorKwkJCSIJbGRpICUxLCAlJXIyMFxuIgkJCVwKKysJCQlLX0xEV19BU01fUElDCQkJCQlcCisrCQkJOiAiPXIiIChfX3JlcykJCQkJCVwKKysJCQk6ICJpIiAoU1lTX2lmeShuYW1lKSkgS19BU01fQVJHU18jI25yCQlcCisrCQkJOiAibWVtb3J5IiwgS19DQUxMX0NMT0JfUkVHUyBLX0NMT0JfQVJHU18jI25yCVwKKysJCSk7CQkJCQkJCVwKKysJCV9fc3lzX3JlcyA9IChsb25nKV9fcmVzOwkJCQlcCisrCX0JCQkJCQkJCVwKKysJX19zeXNfcmVzOwkJCQkJCQlcCisrfSkKKysKKysjZGVmaW5lIEtfTE9BRF9BUkdTXzAoKQorKyNkZWZpbmUgS19MT0FEX0FSR1NfMShyMjYpCQkJCQlcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19yMjYgX19hc21fXygicjI2IikgPSAodW5zaWduZWQgbG9uZykocjI2KTsgICBcCisrCUtfTE9BRF9BUkdTXzAoKQorKyNkZWZpbmUgS19MT0FEX0FSR1NfMihyMjYscjI1KQkJCQkJXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fcjI1IF9fYXNtX18oInIyNSIpID0gKHVuc2lnbmVkIGxvbmcpKHIyNSk7ICAgXAorKwlLX0xPQURfQVJHU18xKHIyNikKKysjZGVmaW5lIEtfTE9BRF9BUkdTXzMocjI2LHIyNSxyMjQpCQkJCVwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3IyNCBfX2FzbV9fKCJyMjQiKSA9ICh1bnNpZ25lZCBsb25nKShyMjQpOyAgIFwKKysJS19MT0FEX0FSR1NfMihyMjYscjI1KQorKyNkZWZpbmUgS19MT0FEX0FSR1NfNChyMjYscjI1LHIyNCxyMjMpCQkJCVwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3IyMyBfX2FzbV9fKCJyMjMiKSA9ICh1bnNpZ25lZCBsb25nKShyMjMpOyAgIFwKKysJS19MT0FEX0FSR1NfMyhyMjYscjI1LHIyNCkKKysjZGVmaW5lIEtfTE9BRF9BUkdTXzUocjI2LHIyNSxyMjQscjIzLHIyMikJCQlcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19yMjIgX19hc21fXygicjIyIikgPSAodW5zaWduZWQgbG9uZykocjIyKTsgICBcCisrCUtfTE9BRF9BUkdTXzQocjI2LHIyNSxyMjQscjIzKQorKyNkZWZpbmUgS19MT0FEX0FSR1NfNihyMjYscjI1LHIyNCxyMjMscjIyLHIyMSkJCQlcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19yMjEgX19hc21fXygicjIxIikgPSAodW5zaWduZWQgbG9uZykocjIxKTsgICBcCisrCUtfTE9BRF9BUkdTXzUocjI2LHIyNSxyMjQscjIzLHIyMikKKysKKysvKiBFdmVuIHdpdGggemVybyBhcmdzIHdlIHVzZSByMjAgZm9yIHRoZSBzeXNjYWxsIG51bWJlciAqLworKyNkZWZpbmUgS19BU01fQVJHU18wCisrI2RlZmluZSBLX0FTTV9BUkdTXzEgS19BU01fQVJHU18wLCAiciIgKF9fcjI2KQorKyNkZWZpbmUgS19BU01fQVJHU18yIEtfQVNNX0FSR1NfMSwgInIiIChfX3IyNSkKKysjZGVmaW5lIEtfQVNNX0FSR1NfMyBLX0FTTV9BUkdTXzIsICJyIiAoX19yMjQpCisrI2RlZmluZSBLX0FTTV9BUkdTXzQgS19BU01fQVJHU18zLCAiciIgKF9fcjIzKQorKyNkZWZpbmUgS19BU01fQVJHU181IEtfQVNNX0FSR1NfNCwgInIiIChfX3IyMikKKysjZGVmaW5lIEtfQVNNX0FSR1NfNiBLX0FTTV9BUkdTXzUsICJyIiAoX19yMjEpCisrCisrLyogVGhlIHJlZ2lzdGVycyBub3QgbGlzdGVkIGFzIGlucHV0cyBidXQgY2xvYmJlcmVkICovCisrI2RlZmluZSBLX0NMT0JfQVJHU182CisrI2RlZmluZSBLX0NMT0JfQVJHU181IEtfQ0xPQl9BUkdTXzYsICIlcjIxIgorKyNkZWZpbmUgS19DTE9CX0FSR1NfNCBLX0NMT0JfQVJHU181LCAiJXIyMiIKKysjZGVmaW5lIEtfQ0xPQl9BUkdTXzMgS19DTE9CX0FSR1NfNCwgIiVyMjMiCisrI2RlZmluZSBLX0NMT0JfQVJHU18yIEtfQ0xPQl9BUkdTXzMsICIlcjI0IgorKyNkZWZpbmUgS19DTE9CX0FSR1NfMSBLX0NMT0JfQVJHU18yLCAiJXIyNSIKKysjZGVmaW5lIEtfQ0xPQl9BUkdTXzAgS19DTE9CX0FSR1NfMSwgIiVyMjYiCisrCisrI2RlZmluZSBpb19zeXNjYWxsMSh0eXBlLGZuYW1lLHNuYW1lLHR5cGUxLGFyZzEpCQkJXAorK3R5cGUgZm5hbWUodHlwZTEgYXJnMSkJCQkJCQkJXAorK3sJCQkJCQkJCQlcCisrICAgIHJldHVybiBLX0lOTElORV9TWVNDQUxMKHNuYW1lLCAxLCBhcmcxKTsJCQkJXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGwyKHR5cGUsZm5hbWUsc25hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyKQkJXAorK3R5cGUgZm5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMikJCQkJCVwKKyt7CQkJCQkJCQkJXAorKyAgICByZXR1cm4gS19JTkxJTkVfU1lTQ0FMTChzbmFtZSwgMiwgYXJnMSwgYXJnMik7CQkJXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGwzKHR5cGUsZm5hbWUsc25hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMpCVwKKyt0eXBlIGZuYW1lKHR5cGUxIGFyZzEsIHR5cGUyIGFyZzIsIHR5cGUzIGFyZzMpCQkJCVwKKyt7CQkJCQkJCQkJXAorKyAgICByZXR1cm4gS19JTkxJTkVfU1lTQ0FMTChzbmFtZSwgMywgYXJnMSwgYXJnMiwgYXJnMyk7CQlcCisrfQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDQodHlwZSxmbmFtZSxzbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMyx0eXBlNCxhcmc0KSBcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0KQkJXAorK3sJCQkJCQkJCQlcCisrICAgIHJldHVybiBLX0lOTElORV9TWVNDQUxMKHNuYW1lLCA0LCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KTsJCVwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsNSh0eXBlLGZuYW1lLHNuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQsdHlwZTUsYXJnNSkgXAorK3R5cGUgZm5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCwgdHlwZTUgYXJnNSkJXAorK3sJCQkJCQkJCQlcCisrICAgIHJldHVybiBLX0lOTElORV9TWVNDQUxMKHNuYW1lLCA1LCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTsJXAorK30KKysKK0luZGV4OiBsaWJhaW8tMC4zLjExMC9zcmMvc3lzY2FsbC1hcm0uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmFpby0wLjMuMTEwLm9yaWcvc3JjL3N5c2NhbGwtYXJtLmgKKysrKyBsaWJhaW8tMC4zLjExMC9zcmMvc3lzY2FsbC1hcm0uaAorQEAgLTExNCwzICsxMTQsMTE5IEBAIHR5cGUgZm5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMKKyAgIHJldHVybiAodHlwZSkgX19yZXNfcjA7CQkJCQkJXAorIH0KKyAKKysvKgorKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vdW5pc3RkLmgKKysgKgorKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNSBSdXNzZWxsIEtpbmcKKysgKgorKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKysgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKysgKgorKyAqIFBsZWFzZSBmb3J3YXJkIF9hbGxfIGNoYW5nZXMgdG8gdGhpcyBmaWxlIHRvIHJta0Bhcm0ubGludXgub3JnLnVrLAorKyAqIG5vIG1hdHRlciB3aGF0IHRoZSBjaGFuZ2UgaXMuICBUaGFua3MhCisrICovCisrCisrI2RlZmluZSBfX05SX09BQklfU1lTQ0FMTF9CQVNFCTB4OTAwMDAwCisrCisrI2lmIGRlZmluZWQoX190aHVtYl9fKSB8fCBkZWZpbmVkKF9fQVJNX0VBQklfXykKKysjZGVmaW5lIF9fTlJfU1lTQ0FMTF9CQVNFCTAKKysjZWxzZQorKyNkZWZpbmUgX19OUl9TWVNDQUxMX0JBU0UJX19OUl9PQUJJX1NZU0NBTExfQkFTRQorKyNlbmRpZgorKworKyNkZWZpbmUgX19OUl9pb19zZXR1cAkJCShfX05SX1NZU0NBTExfQkFTRSsyNDMpCisrI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjQ0KQorKyNkZWZpbmUgX19OUl9pb19nZXRldmVudHMJCShfX05SX1NZU0NBTExfQkFTRSsyNDUpCisrI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJCShfX05SX1NZU0NBTExfQkFTRSsyNDYpCisrI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJCShfX05SX1NZU0NBTExfQkFTRSsyNDcpCisrCisrI2RlZmluZSBfX3N5czIoeCkgI3gKKysjZGVmaW5lIF9fc3lzMSh4KSBfX3N5czIoeCkKKysKKysjaWYgZGVmaW5lZChfX3RodW1iX18pIHx8IGRlZmluZWQoX19BUk1fRUFCSV9fKQorKyNkZWZpbmUgX19TWVNfUkVHKG5hbWUpIHJlZ2lzdGVyIGxvbmcgX19zeXNyZWcgX19hc21fXygicjciKSA9IF9fTlJfIyNuYW1lOworKyNkZWZpbmUgX19TWVNfUkVHX0xJU1QocmVncy4uLikgInIiIChfX3N5c3JlZykgLCAjI3JlZ3MKKysjZGVmaW5lIF9fc3lzY2FsbChuYW1lKSAic3dpXHQwIgorKyNlbHNlCisrI2RlZmluZSBfX1NZU19SRUcobmFtZSkKKysjZGVmaW5lIF9fU1lTX1JFR19MSVNUKHJlZ3MuLi4pIHJlZ3MKKysjZGVmaW5lIF9fc3lzY2FsbChuYW1lKSAic3dpXHQiIF9fc3lzMShfX05SXyMjbmFtZSkgIiIKKysjZW5kaWYKKysKKysjZGVmaW5lIGlvX3N5c2NhbGwxKHR5cGUsZm5hbWUsc25hbWUsdHlwZTEsYXJnMSkJCQlcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxKSB7CQkJCQkJXAorKyAgX19TWVNfUkVHKHNuYW1lKQkJCQkJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjAgX19hc21fXygicjAiKSA9IChsb25nKWFyZzE7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3Jlc19yMCBfX2FzbV9fKCJyMCIpOwkJCQkJXAorKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCVwKKysgIF9fc3lzY2FsbChzbmFtZSkJCQkJCQkJXAorKwk6ICI9ciIgKF9fcmVzX3IwKQkJCQkJCVwKKysJOiBfX1NZU19SRUdfTElTVCggIjAiIChfX3IwKSApCQkJCQlcCisrCTogIm1lbW9yeSIgKTsJCQkJCQkJXAorKyAgcmV0dXJuICh0eXBlKSBfX3Jlc19yMDsJCQkJCQlcCisrfQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDIodHlwZSxmbmFtZSxzbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIpCQlcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxLHR5cGUyIGFyZzIpIHsJCQkJCVwKKysgIF9fU1lTX1JFRyhzbmFtZSkJCQkJCQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IwIF9fYXNtX18oInIwIikgPSAobG9uZylhcmcxOwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMSBfX2FzbV9fKCJyMSIpID0gKGxvbmcpYXJnMjsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcmVzX3IwIF9fYXNtX18oInIwIik7CQkJCQlcCisrICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAorKyAgX19zeXNjYWxsKHNuYW1lKQkJCQkJCQlcCisrCTogIj1yIiAoX19yZXNfcjApCQkJCQkJXAorKwk6IF9fU1lTX1JFR19MSVNUKCAiMCIgKF9fcjApLCAiciIgKF9fcjEpICkJCQlcCisrCTogIm1lbW9yeSIgKTsJCQkJCQkJXAorKyAgcmV0dXJuICh0eXBlKSBfX3Jlc19yMDsJCQkJCQlcCisrfQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDModHlwZSxmbmFtZSxzbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMykJXAorK3R5cGUgZm5hbWUodHlwZTEgYXJnMSx0eXBlMiBhcmcyLHR5cGUzIGFyZzMpIHsJCQkJXAorKyAgX19TWVNfUkVHKHNuYW1lKQkJCQkJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjAgX19hc21fXygicjAiKSA9IChsb25nKWFyZzE7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IxIF9fYXNtX18oInIxIikgPSAobG9uZylhcmcyOwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMiBfX2FzbV9fKCJyMiIpID0gKGxvbmcpYXJnMzsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcmVzX3IwIF9fYXNtX18oInIwIik7CQkJCQlcCisrICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAorKyAgX19zeXNjYWxsKHNuYW1lKQkJCQkJCQlcCisrCTogIj1yIiAoX19yZXNfcjApCQkJCQkJXAorKwk6IF9fU1lTX1JFR19MSVNUKCAiMCIgKF9fcjApLCAiciIgKF9fcjEpLCAiciIgKF9fcjIpICkJCVwKKysJOiAibWVtb3J5IiApOwkJCQkJCQlcCisrICByZXR1cm4gKHR5cGUpIF9fcmVzX3IwOwkJCQkJCVwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsNCh0eXBlLGZuYW1lLHNuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQpXAorK3R5cGUgZm5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCkgewkJXAorKyAgX19TWVNfUkVHKHNuYW1lKQkJCQkJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjAgX19hc21fXygicjAiKSA9IChsb25nKWFyZzE7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IxIF9fYXNtX18oInIxIikgPSAobG9uZylhcmcyOwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMiBfX2FzbV9fKCJyMiIpID0gKGxvbmcpYXJnMzsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjMgX19hc21fXygicjMiKSA9IChsb25nKWFyZzQ7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3Jlc19yMCBfX2FzbV9fKCJyMCIpOwkJCQkJXAorKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCVwKKysgIF9fc3lzY2FsbChzbmFtZSkJCQkJCQkJXAorKwk6ICI9ciIgKF9fcmVzX3IwKQkJCQkJCVwKKysJOiBfX1NZU19SRUdfTElTVCggIjAiIChfX3IwKSwgInIiIChfX3IxKSwgInIiIChfX3IyKSwgInIiIChfX3IzKSApIFwKKysJOiAibWVtb3J5IiApOwkJCQkJCQlcCisrICByZXR1cm4gKHR5cGUpIF9fcmVzX3IwOwkJCQkJCVwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsNSh0eXBlLGZuYW1lLHNuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQsdHlwZTUsYXJnNSkJXAorK3R5cGUgZm5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCwgdHlwZTUgYXJnNSkge1wKKysgIF9fU1lTX1JFRyhzbmFtZSkJCQkJCQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IwIF9fYXNtX18oInIwIikgPSAobG9uZylhcmcxOwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMSBfX2FzbV9fKCJyMSIpID0gKGxvbmcpYXJnMjsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjIgX19hc21fXygicjIiKSA9IChsb25nKWFyZzM7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IzIF9fYXNtX18oInIzIikgPSAobG9uZylhcmc0OwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yNCBfX2FzbV9fKCJyNCIpID0gKGxvbmcpYXJnNTsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcmVzX3IwIF9fYXNtX18oInIwIik7CQkJCQlcCisrICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAorKyAgX19zeXNjYWxsKHNuYW1lKQkJCQkJCQlcCisrCTogIj1yIiAoX19yZXNfcjApCQkJCQkJXAorKwk6IF9fU1lTX1JFR19MSVNUKCAiMCIgKF9fcjApLCAiciIgKF9fcjEpLCAiciIgKF9fcjIpLAkJXAorKwkJCSAgInIiIChfX3IzKSwgInIiIChfX3I0KSApCQkJXAorKwk6ICJtZW1vcnkiICk7CQkJCQkJCVwKKysgIHJldHVybiAodHlwZSkgX19yZXNfcjA7CQkJCQkJXAorK30KKysKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vZGVzdGRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vZGVzdGRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWQ5NjAxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9kZXN0ZGlyLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitmcm9tIG9wZW5lbWJlZGRlZCwgYWRkZWQgYnkgUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CisKK0luZGV4OiBsaWJhaW8tMC4zLjEwNi9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmFpby0wLjMuMTA2Lm9yaWcvTWFrZWZpbGUJMjAwNC0wMi0yNiAwNzoyNToxMC4wMDAwMDAwMDAgLTA4MDAKKysrKyBsaWJhaW8tMC4zLjEwNi9NYWtlZmlsZQkyMDA2LTEwLTE0IDA5OjE5OjA3LjAwMDAwMDAwMCAtMDcwMAorQEAgLTE1LDcgKzE1LDcgQEAKKyAJQCQoTUFLRSkgLUMgc3JjCisgCisgaW5zdGFsbDoKKy0JQCQoTUFLRSkgLUMgc3JjIGluc3RhbGwgcHJlZml4PSQocHJlZml4KSBpbmNsdWRlZGlyPSQoaW5jbHVkZWRpcikgbGliZGlyPSQobGliZGlyKQorKwlAJChNQUtFKSAtQyBzcmMgaW5zdGFsbCBwcmVmaXg9JChERVNURElSKSQocHJlZml4KSBpbmNsdWRlZGlyPSQoREVTVERJUikkKGluY2x1ZGVkaXIpIGxpYmRpcj0kKERFU1RESVIpJChsaWJkaXIpCisgCisgCisgY2xlYW46CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2dlbmVyaWMtYXJjaC1kZWN0ZWN0aW9uLWZvci1wYWRkaW5nLWRlZmluZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2dlbmVyaWMtYXJjaC1kZWN0ZWN0aW9uLWZvci1wYWRkaW5nLWRlZmluZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJhN2U1NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vZ2VuZXJpYy1hcmNoLWRlY3RlY3Rpb24tZm9yLXBhZGRpbmctZGVmaW5lcy5wYXRjaApAQCAtMCwwICsxLDY1IEBACitGcm9tOiBOYXRoYW4gUm9zc2kgPG5hdGhhbi5yb3NzaUB4aWxpbnguY29tPgorRGF0ZTogVHVlLCAyNyBKYW4gMjAxNSAxNDo1OTozNSArMTAwMAorU3ViamVjdDogW1BBVENIXSBHZW5lcmljIGFyY2ggZGVjdGVjdGlvbiBmb3IgcGFkZGluZyBkZWZpbmVzCisKK1doZW4gYXZhaWxhYmxlIHVzZSB0aGUgR05VIEMgZGVmaW5lcyBmb3IgZW5kaWFuIGFuZCBiaXR3aWR0aCB0bworZGV0ZXJtaW5lIHRoZSBwYWRkaW5nIHJlcXVpcmVkLiBUaGlzIHJlZHVjZXMgdGhlIG5lZWQgdG8gZGVmaW5lIHRoZQorcGFkZGluZyBzZWxlY3Rpb24gZm9yIGV2ZXJ5IGFyY2hpdGVjdHVyZS4KKworU2lnbmVkLW9mZi1ieTogTmF0aGFuIFJvc3NpIDxuYXRoYW4ucm9zc2lAeGlsaW54LmNvbT4KK1NpZ25lZC1vZmYtYnk6IEplZmYgTW95ZXIgPGptb3llckByZWRoYXQuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorLS0tCisgc3JjL2xpYmFpby5oIHwgMTYgKysrKysrKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2xpYmFpby5oIGIvc3JjL2xpYmFpby5oCitpbmRleCAxMjIzMTQ2Li40YTRlMGY1IDEwMDY0NAorLS0tIGEvc3JjL2xpYmFpby5oCisrKysgYi9zcmMvbGliYWlvLmgKK0BAIC01MiwxNCArNTIsMTggQEAgdHlwZWRlZiBlbnVtIGlvX2lvY2JfY21kIHsKKyAvKiBsaXR0bGUgZW5kaWFuLCAzMiBiaXRzICovCisgI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IChkZWZpbmVkKF9fYXJtX18pICYmICFkZWZpbmVkKF9fQVJNRUJfXykpIHx8IFwKKyAgICAgZGVmaW5lZChfX3NoX18pIHx8IGRlZmluZWQoX19iZmluX18pIHx8IGRlZmluZWQoX19NSVBTRUxfXykgfHwgXAorLSAgICBkZWZpbmVkKF9fY3Jpc19fKQorKyAgICBkZWZpbmVkKF9fY3Jpc19fKSB8fCBcCisrICAgIChkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fQllURV9PUkRFUl9fKSAmJiBcCisrICAgICAgICAgX19CWVRFX09SREVSX18gPT0gX19PUkRFUl9MSVRUTEVfRU5ESUFOX18gJiYgX19TSVpFT0ZfTE9OR19fID09IDQpCisgI2RlZmluZSBQQURERUQoeCwgeSkJeDsgdW5zaWduZWQgeQorICNkZWZpbmUgUEFEREVEcHRyKHgsIHkpCXg7IHVuc2lnbmVkIHkKKyAjZGVmaW5lIFBBRERFRHVsKHgsIHkpCXVuc2lnbmVkIGxvbmcgeDsgdW5zaWduZWQgeQorIAorIC8qIGxpdHRsZSBlbmRpYW4sIDY0IGJpdHMgKi8KKyAjZWxpZiBkZWZpbmVkKF9faWE2NF9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hbHBoYV9fKSB8fCBcCistICAgICAgKGRlZmluZWQoX19hYXJjaDY0X18pICYmIGRlZmluZWQoX19BQVJDSDY0RUxfXykpCisrICAgICAgKGRlZmluZWQoX19hYXJjaDY0X18pICYmIGRlZmluZWQoX19BQVJDSDY0RUxfXykpIHx8IFwKKysgICAgICAoZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX0JZVEVfT1JERVJfXykgJiYgXAorKyAgICAgICAgICBfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0xJVFRMRV9FTkRJQU5fXyAmJiBfX1NJWkVPRl9MT05HX18gPT0gOCkKKyAjZGVmaW5lIFBBRERFRCh4LCB5KQl4LCB5CisgI2RlZmluZSBQQURERURwdHIoeCwgeSkJeAorICNkZWZpbmUgUEFEREVEdWwoeCwgeSkJdW5zaWduZWQgbG9uZyB4CitAQCAtNjcsNyArNzEsOSBAQCB0eXBlZGVmIGVudW0gaW9faW9jYl9jbWQgeworIC8qIGJpZyBlbmRpYW4sIDY0IGJpdHMgKi8KKyAjZWxpZiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pIHx8IGRlZmluZWQoX19zMzkweF9fKSB8fCBcCisgICAgICAgKGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pKSB8fCBcCistICAgICAgKGRlZmluZWQoX19hYXJjaDY0X18pICYmIGRlZmluZWQoX19BQVJDSDY0RUJfXykpCisrICAgICAgKGRlZmluZWQoX19hYXJjaDY0X18pICYmIGRlZmluZWQoX19BQVJDSDY0RUJfXykpIHx8IFwKKysgICAgICAoZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX0JZVEVfT1JERVJfXykgJiYgXAorKyAgICAgICAgICAgX19CWVRFX09SREVSX18gPT0gX19PUkRFUl9CSUdfRU5ESUFOX18gJiYgX19TSVpFT0ZfTE9OR19fID09IDgpCisgI2RlZmluZSBQQURERUQoeCwgeSkJdW5zaWduZWQgeTsgeAorICNkZWZpbmUgUEFEREVEcHRyKHgseSkJeAorICNkZWZpbmUgUEFEREVEdWwoeCwgeSkJdW5zaWduZWQgbG9uZyB4CitAQCAtNzYsNyArODIsOSBAQCB0eXBlZGVmIGVudW0gaW9faW9jYl9jbWQgeworICNlbGlmIGRlZmluZWQoX19QUENfXykgfHwgZGVmaW5lZChfX3MzOTBfXykgfHwgXAorICAgICAgIChkZWZpbmVkKF9fYXJtX18pICYmIGRlZmluZWQoX19BUk1FQl9fKSkgfHwgXAorICAgICAgIGRlZmluZWQoX19zcGFyY19fKSB8fCBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX19tNjhrX18pIHx8IFwKKy0gICAgICBkZWZpbmVkKF9faHBwYV9fKSB8fCBkZWZpbmVkKF9fZnJ2X18pIHx8IGRlZmluZWQoX19hdnIzMl9fKQorKyAgICAgIGRlZmluZWQoX19ocHBhX18pIHx8IGRlZmluZWQoX19mcnZfXykgfHwgZGVmaW5lZChfX2F2cjMyX18pIHx8IFwKKysgICAgICAoZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX0JZVEVfT1JERVJfXykgJiYgXAorKyAgICAgICAgICAgX19CWVRFX09SREVSX18gPT0gX19PUkRFUl9CSUdfRU5ESUFOX18gJiYgX19TSVpFT0ZfTE9OR19fID09IDQpCisgI2RlZmluZSBQQURERUQoeCwgeSkJdW5zaWduZWQgeTsgeAorICNkZWZpbmUgUEFEREVEcHRyKHgsIHkpCXVuc2lnbmVkIHk7IHgKKyAjZGVmaW5lIFBBRERFRHVsKHgsIHkpCXVuc2lnbmVkIHk7IHVuc2lnbmVkIGxvbmcgeAorLS0gCisyLjEuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2xpYmFpb19maXhfZm9yX21pcHNfc3lzY2FsbHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2xpYmFpb19maXhfZm9yX21pcHNfc3lzY2FsbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM2ODUwYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vbGliYWlvX2ZpeF9mb3JfbWlwc19zeXNjYWxscy5wYXRjaApAQCAtMCwwICsxLDYyIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBQaGlsIFN0YXViIDxQaGlsLlN0YXViQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBsaWJhaW8tMC4zLjEwOS9zcmMvc3lzY2FsbC1taXBzLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhaW8tMC4zLjEwOS5vcmlnL3NyYy9zeXNjYWxsLW1pcHMuaAorKysrIGxpYmFpby0wLjMuMTA5L3NyYy9zeXNjYWxsLW1pcHMuaAorQEAgLTc2LDcgKzc2LDcgQEAgdHlwZSBmbmFtZShhdHlwZSBhKSBcCisgCVwKKyAJaWYgKF9fYTMgPT0gMCkgXAorIAkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCistCXJldHVybiAodHlwZSkgLTE7IFwKKysJcmV0dXJuICh0eXBlKSAoLShfX3YwKSk7IFwKKyB9CisgCisgI2RlZmluZSBpb19zeXNjYWxsMih0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYikgXAorQEAgLTEwMCw3ICsxMDAsNyBAQCB0eXBlIGZuYW1lKGF0eXBlIGEsIGJ0eXBlIGIpIFwKKyAJXAorIAlpZiAoX19hMyA9PSAwKSBcCisgCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKy0JcmV0dXJuICh0eXBlKSAtMTsgXAorKwlyZXR1cm4gKHR5cGUpICgtKF9fdjApKTsgXAorIH0KKyAKKyAjZGVmaW5lIGlvX3N5c2NhbGwzKHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiLGN0eXBlLGMpIFwKK0BAIC0xMjUsNyArMTI1LDcgQEAgdHlwZSBmbmFtZShhdHlwZSBhLCBidHlwZSBiLCBjdHlwZSBjKSBcCisgCVwKKyAJaWYgKF9fYTMgPT0gMCkgXAorIAkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCistCXJldHVybiAodHlwZSkgLTE7IFwKKysJcmV0dXJuICh0eXBlKSAoLShfX3YwKSk7IFwKKyB9CisgCisgI2RlZmluZSBpb19zeXNjYWxsNCh0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYixjdHlwZSxjLGR0eXBlLGQpIFwKK0BAIC0xNTAsNyArMTUwLDcgQEAgdHlwZSBmbmFtZShhdHlwZSBhLCBidHlwZSBiLCBjdHlwZSBjLCBkdAorIAlcCisgCWlmIChfX2EzID09IDApIFwKKyAJCXJldHVybiAodHlwZSkgX192MDsgXAorLQlyZXR1cm4gKHR5cGUpIC0xOyBcCisrCXJldHVybiAodHlwZSkgKC0oX192MCkpOyBcCisgfQorIAorICNpZiAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMikKK0BAIC0xODYsNyArMTg2LDcgQEAgdHlwZSBmbmFtZShhdHlwZSBhLCBidHlwZSBiLCBjdHlwZSBjLCBkdAorIAlcCisgCWlmIChfX2EzID09IDApIFwKKyAJCXJldHVybiAodHlwZSkgX192MDsgXAorLQlyZXR1cm4gKHR5cGUpIC0xOyBcCisrCXJldHVybiAodHlwZSkgKC0oX192MCkpOyBcCisgfQorIAorICNlbmRpZiAvKiAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMikgKi8KK0BAIC0yMTYsNyArMjE2LDcgQEAgdHlwZSBmbmFtZSAoYXR5cGUgYSxidHlwZSBiLGN0eXBlIGMsZHR5cAorIAlcCisgCWlmIChfX2EzID09IDApIFwKKyAJCXJldHVybiAodHlwZSkgX192MDsgXAorLQlyZXR1cm4gKHR5cGUpIC0xOyBcCisrCXJldHVybiAodHlwZSkgKC0oX192MCkpOyBcCisgfQorIAorICNlbmRpZiAvKiAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIpIHx8IChfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0KSAqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9saWJhaW9fZml4X2Zvcl94MzIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2xpYmFpb19maXhfZm9yX3gzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDhmNWExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9saWJhaW9fZml4X2Zvcl94MzIucGF0Y2gKQEAgLTAsMCArMSw2MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1Byb3Blcmx5IGxvYWQgYXJndW1lbnRzIDUgYW4gNiBmb3IgeDg2LTY0IHN5c2NhbGwKK1VzZSBhc20gKCJyMTAiKSBhbmQgYXNtICgicjgiKSB0byBsb2FkIGFyZ3VtZW50cyA1IGFuIDYgZm9yIHg4Ni02NAorc3lzY2FsbCBzbyB0aGF0IGl0IHdvcmtzIHdpdGggYm90aCB4MzIgYW5kIHg4Ni02NC4KKworUmVjZWl2ZWQgdGhpcyBwYXRjaCBmcm9tIEguSi4gTHUgPGhqbC50b29sc0BnbWFpbC5jb20+CisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDExLzEyLzAyCisKKy0tLSBsaWJhaW8tMC4zLjEwOS9zcmMvc3lzY2FsbC14ODZfNjQuaC54MzIJMjAwOS0xMC0wOSAxMToxNzowMi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJhaW8tMC4zLjEwOS9zcmMvc3lzY2FsbC14ODZfNjQuaAkyMDExLTEyLTAyIDA5OjA5OjA3LjUzNzYwMzIyNCAtMDgwMAorQEAgLTEsOCArMSwxOCBAQAorKyNpZm5kZWYgX19OUl9pb19zZXR1cAorICNkZWZpbmUgX19OUl9pb19zZXR1cAkJMjA2CisrI2VuZGlmCisrI2lmbmRlZiBfX05SX2lvX2Rlc3Ryb3kKKyAjZGVmaW5lIF9fTlJfaW9fZGVzdHJveQkJMjA3CisrI2VuZGlmCisrI2lmbmRlZiBfX05SX2lvX2dldGV2ZW50cworICNkZWZpbmUgX19OUl9pb19nZXRldmVudHMJMjA4CisrI2VuZGlmCisrI2lmbmRlZiBfX05SX2lvX3N1Ym1pdAorICNkZWZpbmUgX19OUl9pb19zdWJtaXQJCTIwOQorKyNlbmRpZgorKyNpZm5kZWYgX19OUl9pb19jYW5jZWwKKyAjZGVmaW5lIF9fTlJfaW9fY2FuY2VsCQkyMTAKKysjZW5kaWYKKyAKKyAjZGVmaW5lIF9fc3lzY2FsbF9jbG9iYmVyICJyMTEiLCJyY3giLCJtZW1vcnkiIAorICNkZWZpbmUgX19zeXNjYWxsICJzeXNjYWxsIgorQEAgLTQyLDEwICs1MiwxMSBAQCByZXR1cm4gX19yZXM7CQkJCQkJCQlcCisgdHlwZSBmbmFtZSAodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCkJCVwKKyB7CQkJCQkJCQkJXAorIGxvbmcgX19yZXM7CQkJCQkJCQlcCistX19hc21fXyB2b2xhdGlsZSAoIm1vdnEgJTUsJSVyMTAgOyIgX19zeXNjYWxsCQkJCVwKKytyZWdpc3RlciBsb25nIF9fYTQgYXNtICgicjEwIikgPSAobG9uZykgYXJnNDsJCQkJXAorK19fYXNtX18gdm9sYXRpbGUgKF9fc3lzY2FsbAkJCQkJCVwKKyAJOiAiPWEiIChfX3JlcykJCQkJCQkJXAorIAk6ICIwIiAoX19OUl8jI3NuYW1lKSwiRCIgKChsb25nKShhcmcxKSksIlMiICgobG9uZykoYXJnMikpLAlcCistCSAgImQiICgobG9uZykoYXJnMykpLCJnIiAoKGxvbmcpKGFyZzQpKSA6IF9fc3lzY2FsbF9jbG9iYmVyLCJyMTAiICk7IFwKKysJICAiZCIgKChsb25nKShhcmczKSksInIiIChfX2E0KSk7IFwKKyByZXR1cm4gX19yZXM7CQkJCQkJCQlcCisgfSAKKyAKK0BAIC01NCwxMCArNjUsMTEgQEAgcmV0dXJuIF9fcmVzOwkJCQkJCQkJXAorIHR5cGUgZm5hbWUgKHR5cGUxIGFyZzEsdHlwZTIgYXJnMix0eXBlMyBhcmczLHR5cGU0IGFyZzQsdHlwZTUgYXJnNSkJXAorIHsJCQkJCQkJCQlcCisgbG9uZyBfX3JlczsJCQkJCQkJCVwKKy1fX2FzbV9fIHZvbGF0aWxlICgibW92cSAlNSwlJXIxMCA7IG1vdnEgJTYsJSVyOCA7ICIgX19zeXNjYWxsCQlcCisrcmVnaXN0ZXIgbG9uZyBfX2E0IGFzbSAoInIxMCIpID0gKGxvbmcpIGFyZzQ7CQkJCVwKKytyZWdpc3RlciBsb25nIF9fYTUgYXNtICgicjgiKSA9IChsb25nKSBhcmc1OwkJCQlcCisrX19hc21fXyB2b2xhdGlsZSAoIF9fc3lzY2FsbAkJCQkJCVwKKyAJOiAiPWEiIChfX3JlcykJCQkJCQkJXAorIAk6ICIwIiAoX19OUl8jI3NuYW1lKSwiRCIgKChsb25nKShhcmcxKSksIlMiICgobG9uZykoYXJnMikpLAlcCistCSAgImQiICgobG9uZykoYXJnMykpLCJnIiAoKGxvbmcpKGFyZzQpKSwiZyIgKChsb25nKShhcmc1KSkgOglcCistCV9fc3lzY2FsbF9jbG9iYmVyLCJyOCIsInIxMCIgKTsJCQkJCVwKKysJICAiZCIgKChsb25nKShhcmczKSksInIiIChfX2E0KSwiciIgKF9fYTUpKTsJCQlcCisgcmV0dXJuIF9fcmVzOwkJCQkJCQkJXAorIH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW9fMC4zLjExMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW9fMC4zLjExMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmUyOWNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpb18wLjMuMTEwLmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiQXN5bmNocm9ub3VzIEkvTyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiQXN5bmNocm9ub3VzIGlucHV0L291dHB1dCBsaWJyYXJ5IHRoYXQgdXNlcyB0aGUga2VybmVscyBuYXRpdmUgaW50ZXJmYWNlIgorSE9NRVBBR0UgPSAiaHR0cDovL2xzZS5zb3VyY2Vmb3JnZS5uZXQvaW8vYWlvLmh0bWwiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDgwNDVmM2I4ZjkyOWMxY2IyOWExZTNmZDczN2I0OTkiCisKK1NSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2xpYmEvbGliYWlvL2xpYmFpb18ke1BWfS5vcmlnLnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9nZW5lcmljLWFyY2gtZGVjdGVjdGlvbi1mb3ItcGFkZGluZy1kZWZpbmVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwX2FyY2hlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kZXN0ZGlyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYmFpb19maXhfZm9yX3gzMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWJhaW9fZml4X2Zvcl9taXBzX3N5c2NhbGxzLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjJhMzU2MDJlNDM3NzgzODNlMmY0OTA3YTRjYTM5YWI4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUwMTkwMjhlNjMxNzI1NzI5Mzc2MjUwZTMyYjQ3MzAxMmY3Y2I2OGUxZjcyNzViZmMxYmJjZGQwZjg3NDVmN2UiCisKK0VYVFJBX09FTUFLRSA9KyAicHJlZml4PSR7cHJlZml4fSBpbmNsdWRlZGlyPSR7aW5jbHVkZWRpcn0gbGliZGlyPSR7bGliZGlyfSIKKyMgTmVlZCBsaWJjIGZvciBzdGFjay1wcm90ZWN0b3IncyBfX3N0YWNrX2Noa19mYWlsX2xvY2FsKCkgYm91bmNlIGZ1bmN0aW9uCitMREZMQUdTX2FwcGVuZF94ODYgPSAiIC1sYyIKKworZG9fY29uZmlndXJlICgpIHsKKyAgICBzZWQgLWkgJ3MjTElOS19GTEFHUz0uKiNMSU5LX0ZMQUdTPSQoTERGTEFHUykjJyBzcmMvTWFrZWZpbGUKK30KKworZG9faW5zdGFsbCAoKSB7CisgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlLzAwMDEtQWRkLUFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTLW9wdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS8wMDAxLUFkZC1BUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUy1vcHRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNhNzc5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS8wMDAxLUFkZC1BUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUy1vcHRpb24ucGF0Y2gKQEAgLTAsMCArMSwxNTEgQEAKK0Zyb20gNTkzNTcxNTc3MDZkNDdjMzY1YjIyMjc3MzllMTdkYWJhMzYwNzUyNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXNzYW5kcm8gR2hlZGluaSA8YWxlc3NhbmRyb0BnaGVkaW5pLm1lPgorRGF0ZTogU3VuLCAxIE1hciAyMDE1IDEyOjA3OjQ1ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZCBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUyBvcHRpb24KKworVGhpcyBmaXhlcyBhIGRpcmVjdG9yeSB0cmF2ZXJzYWwgaW4gdGhlIGNwaW8gdG9vbC4KKworCitVcHN0cmVhbS1TdGF0dXM6IGJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IExpIFpob3UgPGxpLnpob3VAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNwaW8vYnNkY3Bpby4xICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzICsrLQorIGNwaW8vY3Bpby5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsrCisgbGliYXJjaGl2ZS9hcmNoaXZlLmggICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKysKKyBsaWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlzay4zICAgICAgICAgIHwgICAgMyArKysKKyBsaWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wb3NpeC5jICAgIHwgICAxNCArKysrKysrKysrKy0tLQorIGxpYmFyY2hpdmUvdGVzdC90ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLmMgfCAgIDIzICsrKysrKysrKysrKysrKysrKysrKysrCisgNiBmaWxlcyBjaGFuZ2VkLCA0MyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bpby9ic2RjcGlvLjEgYi9jcGlvL2JzZGNwaW8uMQoraW5kZXggZjk2NmFhMC4uZTUyNTQ2ZSAxMDA2NDQKKy0tLSBhL2NwaW8vYnNkY3Bpby4xCisrKysgYi9jcGlvL2JzZGNwaW8uMQorQEAgLTE1Niw3ICsxNTYsOCBAQCBTZWUgYWJvdmUgZm9yIGRlc2NyaXB0aW9uLgorIC5JdCBGbCBGbCBpbnNlY3VyZQorIChpIGFuZCBwIG1vZGUgb25seSkKKyBEaXNhYmxlIHNlY3VyaXR5IGNoZWNrcyBkdXJpbmcgZXh0cmFjdGlvbiBvciBjb3B5aW5nLgorLVRoaXMgYWxsb3dzIGV4dHJhY3Rpb24gdmlhIHN5bWJvbGljIGxpbmtzIGFuZCBwYXRoIG5hbWVzIGNvbnRhaW5pbmcKKytUaGlzIGFsbG93cyBleHRyYWN0aW9uIHZpYSBzeW1ib2xpYyBsaW5rcywgYWJzb2x1dGUgcGF0aHMsCisrYW5kIHBhdGggbmFtZXMgY29udGFpbmluZworIC5TcSAuLgorIGluIHRoZSBuYW1lLgorIC5JdCBGbCBKICwgRmwgRmwgeHoKK2RpZmYgLS1naXQgYS9jcGlvL2NwaW8uYyBiL2NwaW8vY3Bpby5jCitpbmRleCAwYWNkZTExLi5iMjY3ZTliIDEwMDY0NAorLS0tIGEvY3Bpby9jcGlvLmMKKysrKyBiL2NwaW8vY3Bpby5jCitAQCAtMTcxLDYgKzE3MSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJY3Bpby0+ZXh0cmFjdF9mbGFncyB8PSBBUkNISVZFX0VYVFJBQ1RfTk9fT1ZFUldSSVRFX05FV0VSOworIAljcGlvLT5leHRyYWN0X2ZsYWdzIHw9IEFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfU1lNTElOS1M7CisgCWNwaW8tPmV4dHJhY3RfZmxhZ3MgfD0gQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0RPVERPVDsKKysJY3Bpby0+ZXh0cmFjdF9mbGFncyB8PSBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUzsKKyAJY3Bpby0+ZXh0cmFjdF9mbGFncyB8PSBBUkNISVZFX0VYVFJBQ1RfUEVSTTsKKyAJY3Bpby0+ZXh0cmFjdF9mbGFncyB8PSBBUkNISVZFX0VYVFJBQ1RfRkZMQUdTOworIAljcGlvLT5leHRyYWN0X2ZsYWdzIHw9IEFSQ0hJVkVfRVhUUkFDVF9BQ0w7CitAQCAtMjU2LDYgKzI1Nyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJCWNhc2UgT1BUSU9OX0lOU0VDVVJFOgorIAkJCWNwaW8tPmV4dHJhY3RfZmxhZ3MgJj0gfkFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfU1lNTElOS1M7CisgCQkJY3Bpby0+ZXh0cmFjdF9mbGFncyAmPSB+QVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0RPVERPVDsKKysJCQljcGlvLT5leHRyYWN0X2ZsYWdzICY9IH5BUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUzsKKyAJCQlicmVhazsKKyAJCWNhc2UgJ0wnOiAvKiBHTlUgY3BpbyAqLworIAkJCWNwaW8tPm9wdGlvbl9mb2xsb3dfbGlua3MgPSAxOworZGlmZiAtLWdpdCBhL2xpYmFyY2hpdmUvYXJjaGl2ZS5oIGIvbGliYXJjaGl2ZS9hcmNoaXZlLmgKK2luZGV4IDFmMGZjMzguLmVmNjM1YWMgMTAwNjQ0CistLS0gYS9saWJhcmNoaXZlL2FyY2hpdmUuaAorKysrIGIvbGliYXJjaGl2ZS9hcmNoaXZlLmgKK0BAIC02NDksNiArNjQ5LDggQEAgX19MQV9ERUNMIGludCBhcmNoaXZlX3JlYWRfc2V0X3Bhc3NwaHJhc2VfY2FsbGJhY2soc3RydWN0IGFyY2hpdmUgKiwKKyAvKiBEZWZhdWx0OiBEbyBub3QgdXNlIEhGUysgY29tcHJlc3Npb24gaWYgaXQgd2FzIG5vdCBjb21wcmVzc2VkLiAqLworIC8qIFRoaXMgaGFzIG5vIGVmZmVjdCBleGNlcHQgb24gTWFjIE9TIHYxMC42IG9yIGxhdGVyLiAqLworICNkZWZpbmUJQVJDSElWRV9FWFRSQUNUX0hGU19DT01QUkVTU0lPTl9GT1JDRUQJKDB4ODAwMCkKKysvKiBEZWZhdWx0OiBEbyBub3QgcmVqZWN0IGVudHJpZXMgd2l0aCBhYnNvbHV0ZSBwYXRocyAqLworKyNkZWZpbmUgQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0FCU09MVVRFUEFUSFMgKDB4MTAwMDApCisgCisgX19MQV9ERUNMIGludCBhcmNoaXZlX3JlYWRfZXh0cmFjdChzdHJ1Y3QgYXJjaGl2ZSAqLCBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqLAorIAkJICAgICBpbnQgZmxhZ3MpOworZGlmZiAtLWdpdCBhL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrLjMgYi9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlzay4zCitpbmRleCBmYTkyNWNjLi5hMmU3YWZhIDEwMDY0NAorLS0tIGEvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2suMworKysrIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2suMworQEAgLTE3Nyw2ICsxNzcsOSBAQCBUaGUgZGVmYXVsdCBpcyB0byBub3QgcmVmdXNlIHN1Y2ggcGF0aHMuCisgTm90ZSB0aGF0IHBhdGhzIGVuZGluZyBpbgorIC5QYSAuLgorIGFsd2F5cyBjYXVzZSBhbiBlcnJvciwgcmVnYXJkbGVzcyBvZiB0aGlzIGZsYWcuCisrLkl0IENtIEFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTCisrUmVmdXNlIHRvIGV4dHJhY3QgYW4gYWJzb2x1dGUgcGF0aC4KKytUaGUgZGVmYXVsdCBpcyB0byBub3QgcmVmdXNlIHN1Y2ggcGF0aHMuCisgLkl0IENtIEFSQ0hJVkVfRVhUUkFDVF9TUEFSU0UKKyBTY2FuIGRhdGEgZm9yIGJsb2NrcyBvZiBOVUwgYnl0ZXMgYW5kIHRyeSB0byByZWNyZWF0ZSB0aGVtIHdpdGggaG9sZXMuCisgVGhpcyByZXN1bHRzIGluIHNwYXJzZSBmaWxlcywgaW5kZXBlbmRlbnQgb2Ygd2hldGhlciB0aGUgYXJjaGl2ZSBmb3JtYXQKK2RpZmYgLS1naXQgYS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wb3NpeC5jIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcG9zaXguYworaW5kZXggYWIzYmRhYy4uYzEyOTBlYiAxMDA2NDQKKy0tLSBhL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMKKysrKyBiL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMKK0BAIC0yNTA5LDggKzI1MDksOSBAQCBjbGVhbnVwX3BhdGhuYW1lX3dpbihzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICphKQorIC8qCisgICogQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZS4gIEluIHBhcnRpY3VsYXIsIHRoaXMgc3RyaXBzIGR1cGxpY2F0ZQorICAqICcvJyBjaGFyYWN0ZXJzLCAnLicgZWxlbWVudHMsIGFuZCB0cmFpbGluZyAnLycuICBJdCBhbHNvIHJhaXNlcyBhbgorLSAqIGVycm9yIGZvciBhbiBlbXB0eSBwYXRoLCBhIHRyYWlsaW5nICcuLicgb3IgKGlmIF9TRUNVUkVfTk9ET1RET1QgaXMKKy0gKiBzZXQpIGFueSAnLi4nIGluIHRoZSBwYXRoLgorKyAqIGVycm9yIGZvciBhbiBlbXB0eSBwYXRoLCBhIHRyYWlsaW5nICcuLicsIChpZiBfU0VDVVJFX05PRE9URE9UIGlzCisrICogc2V0KSBhbnkgJy4uJyBpbiB0aGUgcGF0aCBvciAoaWYgQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0FCU09MVVRFUEFUSFMKKysgKiBpcyBzZXQpIGlmIHRoZSBwYXRoIGlzIGFic29sdXRlLgorICAqLworIHN0YXRpYyBpbnQKKyBjbGVhbnVwX3BhdGhuYW1lKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKmEpCitAQCAtMjUyOSw4ICsyNTMwLDE1IEBAIGNsZWFudXBfcGF0aG5hbWUoc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqYSkKKyAJY2xlYW51cF9wYXRobmFtZV93aW4oYSk7CisgI2VuZGlmCisgCS8qIFNraXAgbGVhZGluZyAnLycuICovCistCWlmICgqc3JjID09ICcvJykKKysJaWYgKCpzcmMgPT0gJy8nKSB7CisrCQlpZiAoYS0+ZmxhZ3MgJiBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUykgeworKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX01JU0MsCisrCQkJICAgICAgICAgICAgICAgICAgIlBhdGggaXMgYWJzb2x1dGUiKTsKKysJCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKKysJCX0KKysKKyAJCXNlcGFyYXRvciA9ICpzcmMrKzsKKysJfQorIAorIAkvKiBTY2FuIHRoZSBwYXRobmFtZSBvbmUgZWxlbWVudCBhdCBhIHRpbWUuICovCisgCWZvciAoOzspIHsKK2RpZmYgLS1naXQgYS9saWJhcmNoaXZlL3Rlc3QvdGVzdF93cml0ZV9kaXNrX3NlY3VyZS5jIGIvbGliYXJjaGl2ZS90ZXN0L3Rlc3Rfd3JpdGVfZGlza19zZWN1cmUuYworaW5kZXggMzFjNWJmZC4uMmM5NDIwNiAxMDA2NDQKKy0tLSBhL2xpYmFyY2hpdmUvdGVzdC90ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLmMKKysrKyBiL2xpYmFyY2hpdmUvdGVzdC90ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLmMKK0BAIC0xNzgsNiArMTc4LDI5IEBAIERFRklORV9URVNUKHRlc3Rfd3JpdGVfZGlza19zZWN1cmUpCisgCWFzc2VydChTX0lTRElSKHN0LnN0X21vZGUpKTsKKyAJYXJjaGl2ZV9lbnRyeV9mcmVlKGFlKTsKKyAKKysJLyoKKysJICogV2l0aG91dCBzZWN1cml0eSBjaGVja3MsIHdlIHNob3VsZCBiZSBhYmxlIHRvCisrCSAqIGV4dHJhY3QgYW4gYWJzb2x1dGUgcGF0aC4KKysJICovCisrCWFzc2VydCgoYWUgPSBhcmNoaXZlX2VudHJ5X25ldygpKSAhPSBOVUxMKTsKKysJYXJjaGl2ZV9lbnRyeV9jb3B5X3BhdGhuYW1lKGFlLCAiL3RtcC9saWJhcmNoaXZlX3Rlc3QtdGVzdF93cml0ZV9kaXNrX3NlY3VyZS1hYnNvbHV0ZV9wYXRoLnRtcCIpOworKwlhcmNoaXZlX2VudHJ5X3NldF9tb2RlKGFlLCBTX0lGUkVHIHwgMDc3Nyk7CisrCWFzc2VydCgwID09IGFyY2hpdmVfd3JpdGVfaGVhZGVyKGEsIGFlKSk7CisrCWFzc2VydCgwID09IGFyY2hpdmVfd3JpdGVfZmluaXNoX2VudHJ5KGEpKTsKKysJYXNzZXJ0RmlsZUV4aXN0cygiL3RtcC9saWJhcmNoaXZlX3Rlc3QtdGVzdF93cml0ZV9kaXNrX3NlY3VyZS1hYnNvbHV0ZV9wYXRoLnRtcCIpOworKwlhc3NlcnQoMCA9PSB1bmxpbmsoIi90bXAvbGliYXJjaGl2ZV90ZXN0LXRlc3Rfd3JpdGVfZGlza19zZWN1cmUtYWJzb2x1dGVfcGF0aC50bXAiKSk7CisrCisrCS8qIEJ1dCB3aXRoIHNlY3VyaXR5IGNoZWNrcyBlbmFibGVkLCB0aGlzIHNob3VsZCBmYWlsLiAqLworKwlhc3NlcnQoYXJjaGl2ZV9lbnRyeV9jbGVhcihhZSkgIT0gTlVMTCk7CisrCWFyY2hpdmVfZW50cnlfY29weV9wYXRobmFtZShhZSwgIi90bXAvbGliYXJjaGl2ZV90ZXN0LXRlc3Rfd3JpdGVfZGlza19zZWN1cmUtYWJzb2x1dGVfcGF0aC50bXAiKTsKKysJYXJjaGl2ZV9lbnRyeV9zZXRfbW9kZShhZSwgU19JRlJFRyB8IDA3NzcpOworKwlhcmNoaXZlX3dyaXRlX2Rpc2tfc2V0X29wdGlvbnMoYSwgQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0FCU09MVVRFUEFUSFMpOworKwlmYWlsdXJlKCJFeHRyYWN0aW5nIGFuIGFic29sdXRlIHBhdGggc2hvdWxkIGZhaWwgaGVyZS4iKTsKKysJYXNzZXJ0RXF1YWxJbnQoQVJDSElWRV9GQUlMRUQsIGFyY2hpdmVfd3JpdGVfaGVhZGVyKGEsIGFlKSk7CisrCWFyY2hpdmVfZW50cnlfZnJlZShhZSk7CisrCWFzc2VydCgwID09IGFyY2hpdmVfd3JpdGVfZmluaXNoX2VudHJ5KGEpKTsKKysJYXNzZXJ0RmlsZU5vdEV4aXN0cygiL3RtcC9saWJhcmNoaXZlX3Rlc3QtdGVzdF93cml0ZV9kaXNrX3NlY3VyZS1hYnNvbHV0ZV9wYXRoLnRtcCIpOworKworIAlhc3NlcnRFcXVhbEludChBUkNISVZFX09LLCBhcmNoaXZlX3dyaXRlX2ZyZWUoYSkpOworIAorIAkvKiBUZXN0IHRoZSBlbnRyaWVzIG9uIGRpc2suICovCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL2xpYmFyY2hpdmUtQ1ZFLTIwMTMtMDIxMS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9saWJhcmNoaXZlLUNWRS0yMDEzLTAyMTEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI2ZjgwZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9saWJhcmNoaXZlLUNWRS0yMDEzLTAyMTEucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSAyZjU1ZDZiZDMwOGVhNjE5NzU1NThjMjQ2OWFlMzQ5ZGJhMjk3ZTg5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBTYXQsIDIyIEZlYiAyMDE0IDE0OjM1OjU5ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBDVkUtMjAxMy0wMjExCisKK1RoaXMgcGF0Y2ggY29tZXMgZnJvbTpodHRwczovL2dpdGh1Yi5jb20vbGliYXJjaGl2ZS9saWJhcmNoaXZlL2NvbW1pdC8yMjUzMTU0NTUxNDA0M2UwNDYzM2UxYzAxNWM3NTQwYjlkZTlkYmU0CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogQmFvZ2VuIHNoYW5nIDxiYW9nZW4uc2hhbmdAd2luZHJpdmVyLmNvbT4KKworVXBkYXRlIHRoZSBwYXRjaCBiZWNhdXNlIG9mIHVwcmV2IG9uIDIwMTQwMjIyCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlLmMgfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGUuYyBiL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZS5jCitpbmRleCBhM2QxYTMzLi5hMzIzNTg4IDEwMDY0NAorLS0tIGEvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlLmMKKysrKyBiL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZS5jCitAQCAtNjcxLDggKzY3MSwxMiBAQCBzdGF0aWMgc3NpemVfdAorIF9hcmNoaXZlX3dyaXRlX2RhdGEoc3RydWN0IGFyY2hpdmUgKl9hLCBjb25zdCB2b2lkICpidWZmLCBzaXplX3QgcykKKyB7CisgCXN0cnVjdCBhcmNoaXZlX3dyaXRlICphID0gKHN0cnVjdCBhcmNoaXZlX3dyaXRlICopX2E7CisrCWNvbnN0IHNpemVfdCBtYXhfd3JpdGUgPSBJTlRfTUFYOworIAlhcmNoaXZlX2NoZWNrX21hZ2ljKCZhLT5hcmNoaXZlLCBBUkNISVZFX1dSSVRFX01BR0lDLAorIAkgICAgQVJDSElWRV9TVEFURV9EQVRBLCAiYXJjaGl2ZV93cml0ZV9kYXRhIik7CisrCS8qIEluIHBhcnRpY3VsYXIsIHRoaXMgY2F0Y2hlcyBhdHRlbXB0cyB0byBwYXNzIG5lZ2F0aXZlIHZhbHVlcy4gKi8KKysJaWYgKHMgPiBtYXhfd3JpdGUpCisrCQlzID0gbWF4X3dyaXRlOworIAlhcmNoaXZlX2NsZWFyX2Vycm9yKCZhLT5hcmNoaXZlKTsKKyAJcmV0dXJuICgoYS0+Zm9ybWF0X3dyaXRlX2RhdGEpKGEsIGJ1ZmYsIHMpKTsKKyB9CistLSAKKzEuOC4yLjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL21rZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL21rZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOWEyOTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvbWtkaXIucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorQWRkIG1pc3NpbmcgbWtkaXIgY2FsbHMgc28gdGhhdCBvdXQtb2YtdHJlZSBidWlsZHMgd29yay4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgKGh0dHBzOi8vZ2l0aHViLmNvbS9saWJhcmNoaXZlL2xpYmFyY2hpdmUvcHVsbC81MzQpCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggM2ZhMmQyMi4uNWVjY2E1MiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTUwOCw2ICs1MDgsNyBAQCBsaWJhcmNoaXZlX3Rlc3RfTERBREQ9ICQoTFRMSUJJQ09OVikKKyAjIEJ1aWxkaW5nIGl0IGF1dG9tYXRpY2FsbHkgcHJvdmlkZXMgYSBzYW5pdHktY2hlY2sgb24gbGliYXJjaGl2ZV90ZXN0X1NPVVJDRVMKKyAjIGFib3ZlLgorIGxpYmFyY2hpdmUvdGVzdC9saXN0Lmg6IE1ha2VmaWxlCisrCSQoTUtESVJfUCkgbGliYXJjaGl2ZS90ZXN0CisgCWNhdCAkKHRvcF9zcmNkaXIpL2xpYmFyY2hpdmUvdGVzdC90ZXN0XyouYyB8IGdyZXAgREVGSU5FX1RFU1QgPiBsaWJhcmNoaXZlL3Rlc3QvbGlzdC5oCisgCisgbGliYXJjaGl2ZV9URVNUU19FTlZJUk9OTUVOVD0gTElCQVJDSElWRV9URVNUX0ZJTEVTPWBjZCAkKHRvcF9zcmNkaXIpOy9iaW4vcHdkYC9saWJhcmNoaXZlL3Rlc3QgTFJaSVA9Tk9DT05GSUcKK0BAIC04MzUsNiArODM2LDcgQEAgYnNkdGFyX3Rlc3RfQ1BQRkxBR1M9XAorIAkkKFBMQVRGT1JNQ1BQRkxBR1MpCisgCisgdGFyL3Rlc3QvbGlzdC5oOiBNYWtlZmlsZQorKwkkKE1LRElSX1ApIHRhci90ZXN0CisgCWNhdCAkKHRvcF9zcmNkaXIpL3Rhci90ZXN0L3Rlc3RfKi5jIHwgZ3JlcCBERUZJTkVfVEVTVCA+IHRhci90ZXN0L2xpc3QuaAorIAorIGlmIEJVSUxEX0JTRFRBUgorQEAgLTk3NSw2ICs5NzcsNyBAQCBic2RjcGlvX3Rlc3RfQ1BQRkxBR1M9IFwKKyBic2RjcGlvX3Rlc3RfTERBREQ9bGliYXJjaGl2ZV9mZS5sYQorIAorIGNwaW8vdGVzdC9saXN0Lmg6IE1ha2VmaWxlCisrCSQoTUtESVJfUCkgY3Bpby90ZXN0CisgCWNhdCAkKHRvcF9zcmNkaXIpL2NwaW8vdGVzdC90ZXN0XyouYyB8IGdyZXAgREVGSU5FX1RFU1QgPiBjcGlvL3Rlc3QvbGlzdC5oCisgCisgaWYgQlVJTERfQlNEQ1BJTworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMzhiZDI5OS4uN2JkYjAwYyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTAyLDYgKzEwMiw3IEBAIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUworIEFDX0xJQlRPT0xfV0lOMzJfRExMCisgQUNfUFJPR19MSUJUT09MCisgQUNfQ0hFQ0tfVE9PTChbU1RSSVBdLFtzdHJpcF0pCisrQUNfUFJPR19NS0RJUl9QCisgCisgIworICMgT3B0aW9ucyBmb3IgYnVpbGRpbmcgYnNkdGFyLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL3BrZ2NvbmZpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ2YWY5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVXNlIHBrZy1jb25maWcgZm9yIHRoZSBsaWJ4bWwyIGRlcGVuZGVuY3ksIG5vdCB0aGUgLWNvbmZpZyBzY3JpcHQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitSUCAyMDE0LzUvMjIKKworSW5kZXg6IGxpYmFyY2hpdmUtMy4xLjIvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliYXJjaGl2ZS0zLjEuMi5vcmlnL2NvbmZpZ3VyZS5hYwkyMDEzLTAyLTA5IDE3OjIzOjAzLjAwMDAwMDAwMCArMDAwMAorKysrIGxpYmFyY2hpdmUtMy4xLjIvY29uZmlndXJlLmFjCTIwMTQtMDUtMTMgMTU6MjY6NDUuNDQ2NDk5MTA4ICswMDAwCitAQCAtMzI5LDEwICszMjksMTAgQEAKKyAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtZXhwYXRdLCBbRG9uJ3QgYnVpbGQgc3VwcG9ydCBmb3IgeGFyIHRocm91Z2ggZXhwYXRdKSkKKyAKKyBpZiB0ZXN0ICJ4JHdpdGhfeG1sMiIgIT0gInhubyI7IHRoZW4KKy0gIEFDX1BBVEhfUFJPRyhbWE1MMl9DT05GSUddLCBbeG1sMi1jb25maWddLCwgWyR7UEFUSH1dKQorLSAgaWYgdGVzdCAieCRYTUwyX0NPTkZJRyIgIT0gIngiOyB0aGVuCistICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSBgJHtYTUwyX0NPTkZJR30gLS1jZmxhZ3NgIgorLSAgICBMSUJTPSIke0xJQlN9IGAke1hNTDJfQ09ORklHfSAtLWxpYnNgIgorKyAgUEtHX0NIRUNLX01PRFVMRVMoUEtHX1hNTDIsIFtsaWJ4bWwtMi4wXSwsKQorKyAgaWYgdGVzdCAieCRQS0dfWE1MMl9DRkxBR1MiICE9ICJ4IjsgdGhlbgorKyAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30gJHtQS0dfWE1MMl9DRkxBR1N9IgorKyAgICBMSUJTPSIke0xJQlN9ICR7UEtHX1hNTDJfTElCU30iCisgICAgIEFDX0NIRUNLX0xJQih4bWwyLHhtbEluaXRQYXJzZXIsW3RydWVdLEFDX01TR19GQUlMVVJFKE1pc3NpbmcgeG1sMiBsaWJyYXJ5KSkKKyAgIGVsc2UKKyAgICAgQUNfQ0hFQ0tfTElCKHhtbDIseG1sSW5pdFBhcnNlcikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZV8zLjEuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZV8zLjEuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWEzMjU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlXzMuMS4yLmJiCkBAIC0wLDAgKzEsNTMgQEAKK1NVTU1BUlkgPSAiU3VwcG9ydCBmb3IgcmVhZGluZyB2YXJpb3VzIGFyY2hpdmUgZm9ybWF0cyIKK0RFU0NSSVBUSU9OID0gIkMgbGlicmFyeSBhbmQgY29tbWFuZC1saW5lIHRvb2xzIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIHRhciwgY3BpbywgemlwLCBJU08sIGFuZCBvdGhlciBhcmNoaXZlIGZvcm1hdHMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpYmFyY2hpdmUub3JnLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWI0ZTNmZmQ2MDdkNjY4NmM2Y2IyZjYzMzk0MzcwODQxIgorCitERVBFTkRTID0gImUyZnNwcm9ncy1uYXRpdmUiCisKK1BBQ0tBR0VDT05GSUcgPz0gImxpYnhtbDIgemxpYiBiejIiCisKK1BBQ0tBR0VDT05GSUdfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICJcCisJJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdhY2wnLCAnYWNsJywgJycsIGQpfSBcCisJJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4YXR0cicsICd4YXR0cicsICcnLCBkKX0gXAorCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGFyZ2VmaWxlJywgJ2xhcmdlZmlsZScsICcnLCBkKX0gXAorIgorCitQQUNLQUdFQ09ORklHX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiIGxhcmdlZmlsZSIKKworUEFDS0FHRUNPTkZJR1thY2xdID0gIi0tZW5hYmxlLWFjbCwtLWRpc2FibGUtYWNsLGFjbCwiCitQQUNLQUdFQ09ORklHW3hhdHRyXSA9ICItLWVuYWJsZS14YXR0ciwtLWRpc2FibGUteGF0dHIsYXR0ciwiCitQQUNLQUdFQ09ORklHW2xhcmdlZmlsZV0gPSAiLS1lbmFibGUtbGFyZ2VmaWxlLC0tZGlzYWJsZS1sYXJnZWZpbGUsLCIKK1BBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS13aXRoLXpsaWIsLS13aXRob3V0LXpsaWIsemxpYiwiCitQQUNLQUdFQ09ORklHW2J6Ml0gPSAiLS13aXRoLWJ6MmxpYiwtLXdpdGhvdXQtYnoybGliLGJ6aXAyLCIKK1BBQ0tBR0VDT05GSUdbeHpdID0gIi0td2l0aC1sem1hZGVjIC0td2l0aC1sem1hLC0td2l0aG91dC1sem1hZGVjIC0td2l0aG91dC1sem1hLHh6LCIKK1BBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLS13aXRoLW9wZW5zc2wsLS13aXRob3V0LW9wZW5zc2wsb3BlbnNzbCwiCitQQUNLQUdFQ09ORklHW2xpYnhtbDJdID0gIi0td2l0aC14bWwyLC0td2l0aG91dC14bWwyLGxpYnhtbDIsIgorUEFDS0FHRUNPTkZJR1tleHBhdF0gPSAiLS13aXRoLWV4cGF0LC0td2l0aG91dC1leHBhdCxleHBhdCwiCitQQUNLQUdFQ09ORklHW2x6b10gPSAiLS13aXRoLWx6bzIsLS13aXRob3V0LWx6bzIsbHpvLCIKK1BBQ0tBR0VDT05GSUdbbmV0dGxlXSA9ICItLXdpdGgtbmV0dGxlLC0td2l0aG91dC1uZXR0bGUsbmV0dGxlLCIKKworU1JDX1VSSSA9ICJodHRwOi8vbGliYXJjaGl2ZS5vcmcvZG93bmxvYWRzL2xpYmFyY2hpdmUtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2xpYmFyY2hpdmUtQ1ZFLTIwMTMtMDIxMS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1BZGQtQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0FCU09MVVRFUEFUSFMtb3B0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21rZGlyLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZWZhZDVhNTAzZjY2MzI5YmI5ZDJmNDMwOGI1ZGU5OGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWI4N2VhY2Q4ZmU0OWU4ZDkwYzhmZGMxODk4MTMwMjNjY2MzMTljNWU3NTJiMDFmYjZhZDBjYzdiMmM1M2Q1ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgbGliX3BhY2thZ2UgcGtnY29uZmlnCisKK0NQUEZMQUdTICs9ICItSSR7V09SS0RJUn0vZXh0cmEtaW5jbHVkZXMiCisKK2RvX2NvbmZpZ3VyZVtjbGVhbmRpcnNdICs9ICIke1dPUktESVJ9L2V4dHJhLWluY2x1ZGVzIgorZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJIyBXZSBqdXN0IG5lZWQgdGhlIGhlYWRlcnMgZm9yIHNvbWUgdHlwZSBjb25zdGFudHMsIHNvIG5vIG5lZWQgdG8KKwkjIGJ1aWxkIGFsbCBvZiBlMmZzcHJvZ3MgZm9yIHRoZSB0YXJnZXQKKwljcCAtUiAke1NUQUdJTkdfSU5DRElSX05BVElWRX0vZXh0MmZzICR7V09SS0RJUn0vZXh0cmEtaW5jbHVkZXMvCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vYXZvaWRfQU1fUFJPR19NS0RJUl9QX3dhcm5pbmdfZXJyb3Jfd2l0aF9hdXRvbWFrZV8xLjEyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9hdm9pZF9BTV9QUk9HX01LRElSX1Bfd2FybmluZ19lcnJvcl93aXRoX2F1dG9tYWtlXzEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ3NmJiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vYXZvaWRfQU1fUFJPR19NS0RJUl9QX3dhcm5pbmdfZXJyb3Jfd2l0aF9hdXRvbWFrZV8xLjEyLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSAKKworYXV0b21ha2UgMS4xMi54IGhhcyBkZXByZWNhdGVkIEFNX1BST0dfTUtESVJfUCAsIGFuZCB0aHJvd3MgYSB3YXJuaW5nIGZvciB0aGF0LAorYW5kIHRoZSB3YXJuaW5ncyBhcmUgdHJlYXRlZCBhcyBlcnJvcnMgYmVjYXVzZSBvZiB0aGUgLVdlcnJvciBwYXJhbWV0ZXIuCisKK1RoZXNlIEFNX1BST0dfTUtESVJfUCBhcmUgY29taW5nIGZyb20gZ2V0dGV4dCwgYW5kIHRoZSBsYXRlc3QgZ2V0dGV4dCBjb2RlIGhhcyBub3QgCitlbGltaW5hdGVkIHRoZXNlIGRlcHJlY2F0ZWQgbWFjcm9zIHlldC4gU28gZGlzYWJsZSB0aGUgdHJlYXRtZW50IG9mIHdhcm5pbmdzCithcyBlcnJvcnMgdW50aWwgZ2V0dGV4dCBpcyB1cGRhdGVkIHRvIHJlbW92ZSB0aGUgZGVwcmVjYXRlZCBtYWNyb3MuCisKK1NpZ25lZC1PZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA3LzEwCisKK0luZGV4OiBsaWJpZG4tMS4yNC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJpZG4tMS4yNC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGxpYmlkbi0xLjI0L2NvbmZpZ3VyZS5hYworQEAgLTIzLDcgKzIzLDcgQEAgQUNfQ09QWVJJR0hUKFtDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBTaQorIEFDX0NPTkZJR19BVVhfRElSKFtidWlsZC1hdXhdKQorIEFDX0NPTkZJR19NQUNST19ESVIoW200XSkKKyBBQ19DT05GSUdfSEVBREVSUyhjb25maWcuaCkKKy1BTV9JTklUX0FVVE9NQUtFKFsxLjEwIC1XYWxsIC1XZXJyb3IgLVduby1vdmVycmlkZV0pCisrQU1fSU5JVF9BVVRPTUFLRShbMS4xMCAtV2FsbCAtV25vLW92ZXJyaWRlXSkKKyBBTV9TSUxFTlRfUlVMRVMoW3llc10pCisgCisgIyBMaWJyYXJ5IGNvZGUgbW9kaWZpZWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVWSVNJT04rKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg2MzUzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkZCBsaWJpZG4tMS4yNi9kb2MvTWFrZWZpbGUuYW0gbGliaWRuLTEuMjYvZG9jL01ha2VmaWxlLmFtCistLS0gbGliaWRuLTEuMjYvZG9jL01ha2VmaWxlLmFtCTIwMTItMDktMTggMTE6MjU6NDUuMDAwMDAwMDAwICswMzAwCisrKysgbGliaWRuLTEuMjYvZG9jL01ha2VmaWxlLmFtCTIwMTMtMDItMDggMDc6NDE6MjQuNTkxNDMxNDYyICswMjAwCitAQCAtNDksMTUgKzQ5LDkgQEAKKworICMgTWFuIHBhZ2VzLgorCistZGlzdF9tYW5fTUFOUyA9IGlkbi4xICQoZ2RvY19NQU5TKQorK2Rpc3RfbWFuX01BTlMgPSAkKGdkb2NfTUFOUykKKyBNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9ICQoZGlzdF9tYW5fTUFOUykKKworLWlkbi4xOiAkKHRvcF9zcmNkaXIpL3NyYy9pZG4uYyAkKHRvcF9zcmNkaXIpL3NyYy9pZG4uZ2dvIFwKKy0JCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCistCSQoSEVMUDJNQU4pIFwKKy0JCS0tbmFtZT0iSW50ZXJuYXRpb25hbGl6ZWQgRG9tYWluIE5hbWVzIGNvbW1hbmQgbGluZSB0b29sIiBcCistCQktLW91dHB1dD0kQCAkKHRvcF9idWlsZGRpcikvc3JjL2lkbiQoRVhFRVhUKQorLQorICMgR0RPQworCisgR0RPQ19CSU4gPSAkKHNyY2RpcikvZ2RvYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9saWJpZG5fZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9saWJpZG5fZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYWZkMjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuL2xpYmlkbl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoaXMgcGF0Y2ggZml4ZXMgZm9sbG93aW5nIGlzc3VlIHdpdGggYXV0b21ha2UgMS4xMgorCit8IGF1dG9tYWtlOiB3YXJuaW5ncyBhcmUgdHJlYXRlZCBhcyBlcnJvcnMKK3wgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9zaGFyZS9hdXRvbWFrZS0xLjEyL2FtL2x0bGlicmFyeS5hbTogd2FybmluZzogJ2xpYmlkbi5sYSc6IGxpbmtpbmcgbGlidG9vbCBsaWJyYXJpZXMgdXNpbmcgYSBub24tUE9TSVgKK3wgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9zaGFyZS9hdXRvbWFrZS0xLjEyL2FtL2x0bGlicmFyeS5hbTogYXJjaGl2ZXIgcmVxdWlyZXMgJ0FNX1BST0dfQVInIGluICdjb25maWd1cmUuYWMnCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzAzCisKK0luZGV4OiBsaWJpZG4tMS4yNC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJpZG4tMS4yNC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGxpYmlkbi0xLjI0L2NvbmZpZ3VyZS5hYworQEAgLTM0LDYgKzM0LDEwIEBAIEFDX1NVQlNUKExUX0NVUlJFTlQsIDE3KQorIEFDX1NVQlNUKExUX1JFVklTSU9OLCA3KQorIEFDX1NVQlNUKExUX0FHRSwgNikKKyAKKysjIGF1dG9tYWtlIDEuMTIgc2VlbXMgdG8gcmVxdWlyZSB0aGlzLCBidXQgYXV0b21ha2UgMS4xMSBkb2Vzbid0IHJlY29nbml6ZSBpdAorK200X3BhdHRlcm5fYWxsb3coW0FNX1BST0dfQVJdKQorK0FNX1BST0dfQVIKKysKKyBBQ19QUk9HX0NDCisgZ2xfRUFSTFkKKyBsZ2xfRUFSTFkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG5fMC42LjE0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbl8wLjYuMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRmMWQwOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG5fMC42LjE0LmJiCkBAIC0wLDAgKzEsMzMgQEAKK1NVTU1BUlkgPSAiSW50ZXJuYXRpb25hbGl6ZWQgRG9tYWluIE5hbWUgc3VwcG9ydCBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cmluZ3ByZXAsIFB1bnljb2RlIGFuZCBJRE5BIHNwZWNpZmljYXRpb25zIGRlZmluZWQgYnkgdGhlIElFVEYgSW50ZXJuYXRpb25hbGl6ZWQgRG9tYWluIE5hbWVzIChJRE4pIHdvcmtpbmcgZ3JvdXAuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmlkbi8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxHUEx2Mi4xKyAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvaWRuYS5oO2JlZ2lubGluZT02O2VuZGxpbmU9MTg7bWQ1PTEzMzZlODQ4Y2E3YjhlMjU3NjdjM2M3ZThmYTM4YTg5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9pZG4uYztiZWdpbmxpbmU9NjtlbmRsaW5lPTE4O21kNT01NmM4OWUzNTk2NTJhNzFjZGExMjhkNzVmMGZmZGFjNCIKK1BSID0gInIxIgorCitpbmhlcml0IHBrZ2NvbmZpZyBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKK1NSQ19VUkkgPSAiaHR0cDovL2FscGhhLmdudS5vcmcvZ251L2xpYmlkbi8ke0JQTn0tJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDQwZjAxMmE0NWZlYjU2MTY4ODUzOTk4YmI4N2FkNGQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTg5MTBjMmFkNjY0YmRmNGVlZDJjMmZmZjg4ZTI0Zjg4ODI2MzZlYzlkMjY2NjkzNjZmZjAzYjQ2OWMwNWFlMyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJIyB0aGlzIHZlcnNpb24gb2YgbGliaWRuIGNvcGllcyBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMgZnJvbSAKKwkjIGF1dG9jb25mIENWUyBiZWNhdXNlIGF0bSB0aGUgYXV0b2NvbmYgaXQgdXNlcyBpcyBhIGJpdCBvbGQKKwkjIG5vdyB3aXRoIGNyb3NzIGF1dG90b29sLCB0aGF0IG1hY3JvIGlzIGFscmVhZHkgdGhlcmUgYW5kIHRoaXMKKwkjIGxvY2FsIGRlZmluaXRpb24gY2F1c2VzIGNpcmN1bGFyIGRlcGVuZGVuY3kuIEFjdHVhbGx5IEFDX0dOVV9TT1VSQ0UKKwkjIGlzIGlkZW50aWNhbCB0byBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMuIFNvIHJlbW92ZSBhbGwgbG9jYWwKKwkjIHJlZmVyZW5jZXMgdG8gdGhlIGxhdHRlciBoZXJlLgorCXNlZCAtaSAtZSAiL0FDX1JFUVVJUkUoXFtnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlMvZCIgJHtTfS9saWIvZ2wvbTQvZ251bGliLWNvbXAubTQKKwlybSAtZiAke1N9L2xpYi9nbC9tNC9leHRlbnNpb25zLm00Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtIC1yZiAke0R9JHtsaWJkaXJ9L0xpYmlkbi5kbGwKKwlybSAtcmYgJHtEfSR7ZGF0YWRpcn0vZW1hY3MKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG5fMS4zMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG5fMS4zMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjM0NzQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbl8xLjMwLmJiCkBAIC0wLDAgKzEsMzQgQEAKK1NVTU1BUlkgPSAiSW50ZXJuYXRpb25hbGl6ZWQgRG9tYWluIE5hbWUgc3VwcG9ydCBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cmluZ3ByZXAsIFB1bnljb2RlIGFuZCBJRE5BIHNwZWNpZmljYXRpb25zIGRlZmluZWQgYnkgdGhlIElFVEYgSW50ZXJuYXRpb25hbGl6ZWQgRG9tYWluIE5hbWVzIChJRE4pIHdvcmtpbmcgZ3JvdXAuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmlkbi8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIihMR1BMdjIuMSsgfCBMR1BMdjMpICYgR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZGY0YmU0Nzk0MGE5MWVlNjk1NTZmNWY3MWVlZDRhZWMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MRVNTRVJ2MjttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MRVNTRVJ2MzttZDU9ZTZhNjAwZmQ1ZTFkOWNiZGUyZDk4MzY4MDIzM2FkMDIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlOR3YyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HdjM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9pZG5hLmg7ZW5kbGluZT0yMTttZDU9N2MwYjM4MjhkMWIxNTM2NjNiZTlhMDRhZDRmNzk3NWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2lkbi5jO2VuZGxpbmU9MjA7bWQ1PWY0MjM1ZjJhMmNiMmI2NTc4NmIyOTc5ZmIzY2Y3ZmJmIgorCitpbmhlcml0IHBrZ2NvbmZpZyBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9saWJpZG4vJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9saWJpZG5fZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2F2b2lkX0FNX1BST0dfTUtESVJfUF93YXJuaW5nX2Vycm9yX3dpdGhfYXV0b21ha2VfMS4xMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiMTdlZGM4NTUxY2QzMWNjNWYxNGM4MmE5ZGFiZjU4ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzOWI5ZmM5NGQ3NDA4MWMxODU3NTdiMTJlMDg5MWNlNWEyMmRiNTUyNjhlN2QxYmIyNDUzM2ZmNDQzMmViMDUzIgorCisjIGNvbW1hbmQgdG9vbCBpcyB1bmRlciBHUEx2MyssIHdoaWxlIGxpYmlkbiBpdHNlbGYgaXMgdW5kZXIgTEdQTHYyLjErIG9yIExHUEx2MworIyBzbyBwYWNrYWdlIGNvbW1hbmQgaW50byBhIHNlcGFyYXRlIHBhY2thZ2UKK1BBQ0tBR0VTID0rICJpZG4iCitGSUxFU19pZG4gPSAiJHtiaW5kaXJ9LyoiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtY3NoYXJwIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlybSAtcmYgJHtEfSR7ZGF0YWRpcn0vZW1hY3MKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjL2xpYnRpcnBjLTAuMi4xLWZvcnRpZnkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwYy9saWJ0aXJwYy0wLjIuMS1mb3J0aWZ5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNzg1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwYy9saWJ0aXJwYy0wLjIuMS1mb3J0aWZ5LnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK0ZpeCBhIHBvc3NpYmxlIG92ZXJmbG93IChyZXBvcnRlZCBieSBfRk9SVElGWV9TT1VSQ0U9MikKKworUG9ydGVkIGZyb20gR2VudG9vCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogbGlidGlycGMtMC4yLjEvc3JjL2dldHJwY3BvcnQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnRpcnBjLTAuMi4xLm9yaWcvc3JjL2dldHJwY3BvcnQuYworKysrIGxpYnRpcnBjLTAuMi4xL3NyYy9nZXRycGNwb3J0LmMKK0BAIC01NCwxMSArNTQsMTEgQEAgZ2V0cnBjcG9ydChob3N0LCBwcm9nbnVtLCB2ZXJzbnVtLCBwcm90bworIAorIAlpZiAoKGhwID0gZ2V0aG9zdGJ5bmFtZShob3N0KSkgPT0gTlVMTCkKKyAJCXJldHVybiAoMCk7CisrCWlmIChocC0+aF9sZW5ndGggIT0gc2l6ZW9mKGFkZHIuc2luX2FkZHIuc19hZGRyKSkKKysJCXJldHVybiAoMCk7CisgCW1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAJYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAJYWRkci5zaW5fcG9ydCA9ICAwOworLQlpZiAoaHAtPmhfbGVuZ3RoID4gc2l6ZW9mKGFkZHIpKQorLQkgIGhwLT5oX2xlbmd0aCA9IHNpemVvZihhZGRyKTsKKyAJbWVtY3B5KCZhZGRyLnNpbl9hZGRyLnNfYWRkciwgaHAtPmhfYWRkciwgKHNpemVfdClocC0+aF9sZW5ndGgpOworIAkvKiBJbmNvbnNpc3RlbnQgaW50ZXJmYWNlcyBuZWVkIGNhc3RzISA6LSggKi8KKyAJcmV0dXJuIChwbWFwX2dldHBvcnQoJmFkZHIsICh1X2xvbmcpcHJvZ251bSwgKHVfbG9uZyl2ZXJzbnVtLCAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjL3JlbW92ZS1kZXMtdWNsaWJjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidGlycGMvbGlidGlycGMvcmVtb3ZlLWRlcy11Y2xpYmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAwMzM0OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjL3JlbW92ZS1kZXMtdWNsaWJjLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK3VjbGliYyBkb2VzIG5vdCBwcm92aWRlIGRlcyBmdW5jdGlvbmFsaXR5IHVubGlrZSBlZ2xpYmMgc28gbGV0cyBkaXNhYmxlIHNzbCBzdXBwb3J0CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdWNsaWJjIHNwZWNpZmljXQorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IGxpYnRpcnBjLTAuMi4zL3NyYy9ycGNfc29jLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ0aXJwYy0wLjIuMy5vcmlnL3NyYy9ycGNfc29jLmMJMjAxMy0wMy0xMCAxNjowMDo1MS4zNTUyODIxNTMgLTA3MDAKKysrKyBsaWJ0aXJwYy0wLjIuMy9zcmMvcnBjX3NvYy5jCTIwMTMtMDMtMTAgMTY6MDA6NTEuNzAzMjgyMTQ4IC0wNzAwCitAQCAtNTIwLDYgKzUyMCw3IEBACisgCSAgICAocmVzdWx0cHJvY190KSBycGNfd3JhcF9iY2FzdCwgInVkcCIpOworIH0KKyAKKysjaWYgMAorIC8qCisgICogQ3JlYXRlIHRoZSBjbGllbnQgZGVzIGF1dGhlbnRpY2F0aW9uIG9iamVjdC4gT2Jzb2xldGVkIGJ5CisgICogYXV0aGRlc19zZWNjcmVhdGUoKS4KK0BAIC01NTEsNiArNTUyLDcgQEAKKyAJZHVtbXkgPSBhdXRoZGVzX3NlY2NyZWF0ZShzZXJ2ZXJuYW1lLCB3aW5kb3csIE5VTEwsIGNrZXkpOworIAlyZXR1cm4gKGR1bW15KTsKKyB9CisrI2VuZGlmCisgCisgLyoKKyAgKiBDcmVhdGUgYSBjbGllbnQgaGFuZGxlIGZvciBhIHVuaXggY29ubmVjdGlvbi4gT2Jzb2xldGVkIGJ5IGNsbnRfdmNfY3JlYXRlKCkKK0luZGV4OiBsaWJ0aXJwYy0wLjIuMy9zcmMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ0aXJwYy0wLjIuMy5vcmlnL3NyYy9NYWtlZmlsZS5hbQkyMDEzLTAzLTEwIDE2OjAwOjUxLjM1NTI4MjE1MyAtMDcwMAorKysrIGxpYnRpcnBjLTAuMi4zL3NyYy9NYWtlZmlsZS5hbQkyMDEzLTAzLTEwIDE2OjAwOjUxLjcwMzI4MjE0OCAtMDcwMAorQEAgLTUwLDcgKzUwLDcgQEAKKyAgICAgICAgIHJwY19jYWxsbXNnLmMgcnBjX2dlbmVyaWMuYyBycGNfc29jLmMgcnBjYl9jbG50LmMgcnBjYl9wcm90LmMgXAorICAgICAgICAgcnBjYl9zdF94ZHIuYyBzdmMuYyBzdmNfYXV0aC5jIHN2Y19kZy5jIHN2Y19hdXRoX3VuaXguYyBzdmNfYXV0aF9ub25lLmMgXAorICAgICAgICAgc3ZjX2dlbmVyaWMuYyBzdmNfcmF3LmMgc3ZjX3J1bi5jIHN2Y19zaW1wbGUuYyBzdmNfdmMuYyBnZXRwZWVyZWlkLmMgXAorLSAgICAgICAgYXV0aF90aW1lLmMgYXV0aF9kZXMuYyBhdXRoZGVzX3Byb3QuYworKyAgICAgICAgYXV0aF90aW1lLmMKKyAKKyAjIyBYRFIKKyBsaWJ0aXJwY19sYV9TT1VSQ0VTICs9IHhkci5jIHhkcl9yZWMuYyB4ZHJfYXJyYXkuYyB4ZHJfZmxvYXQuYyB4ZHJfbWVtLmMgeGRyX3JlZmVyZW5jZS5jIHhkcl9zdGRpby5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwY18wLjIuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjXzAuMi41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZGYwMDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwY18wLjIuNS5iYgpAQCAtMCwwICsxLDM1IEBACitTVU1NQVJZID0gIlRyYW5zcG9ydC1JbmRlcGVuZGVudCBSUEMgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIkxpYnRpcnBjIGlzIGEgcG9ydCBvZiBTdW5zIFRyYW5zcG9ydC1JbmRlcGVuZGVudCBSUEMgbGlicmFyeSB0byBMaW51eCIKK1NFQ1RJT04gPSAibGlicy9uZXR3b3JrIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saWJ0aXJwYy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MTgzMDc1JmF0aWQ9OTAzNzg0IgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mODM1Y2NlODg1MjQ4MWU0YjJiYmJkZDIzYjVlNDdmMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbmV0bmFtZS5jO2JlZ2lubGluZT0xO2VuZGxpbmU9Mjc7bWQ1PWY4YThjZDJjYjI1YWM1YWExNjc2NzM2NGZiMGUzYzI0IgorCitERVBFTkRTICs9ICJ4ei1uYXRpdmUiCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYnJwYyIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vJHtCUE59LyR7QlB9LnRhci5iejI7bmFtZT1saWJ0aXJwYyBcCisgICAgICAgICAgICR7R0VOVE9PX01JUlJPUn0vJHtCUE59LWdsaWJjLW5mcy50YXIueHo7bmFtZT1nbGliYy1uZnMgXAorICAgICAgICAgICBmaWxlOi8vbGlidGlycGMtMC4yLjEtZm9ydGlmeS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgZmlsZTovL3JlbW92ZS1kZXMtdWNsaWJjLnBhdGNoIgorCitTUkNfVVJJW2xpYnRpcnBjLm1kNXN1bV0gPSAiOGNkNDFhNWVmNWE5YjUwZDBmYjZhYmI5OGFmMTUzNjgiCitTUkNfVVJJW2xpYnRpcnBjLnNoYTI1NnN1bV0gPSAiNjJmOWRlN2MyYzg2ODZjNTY4NzU3NzMwZTFmZWY2NjUwMmEwZTAwZDZjYWNmMzM1NDZkMDI2Nzk4NGUwMDJkYiIKK1NSQ19VUklbZ2xpYmMtbmZzLm1kNXN1bV0gPSAiNWFlNTAwYjlkMGI2YjcyY2I4NzViYzA0OTQ0Yjk0NDUiCitTUkNfVVJJW2dsaWJjLW5mcy5zaGEyNTZzdW1dID0gIjI2NzdjZmVkZjYyNmYzZjVhOGY2ZTUwN2FlZDViYjhmNzlhNzQ1M2I1ODlkNjg0ZGJiYzA4NmU3NTUxNzBkODMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWdzc2FwaSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworICAgICAgICBjcCAtciAke1N9Ly4uL3RpcnBjICR7U30KK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgICAgIGNob3duIHJvb3Q6cm9vdCAke0R9JHtzeXNjb25mZGlyfS9uZXRjb25maWcKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnVzZXIvbGlidXNlcl8wLjYyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidXNlci9saWJ1c2VyXzAuNjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRlZDQ1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnVzZXIvbGlidXNlcl8wLjYyLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAidXNlciBhbmQgZ3JvdXAgYWNjb3VudCBhZG1pbmlzdHJhdGlvbiBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiVGhlIGxpYnVzZXIgbGlicmFyeSBpbXBsZW1lbnRzIGEgc3RhbmRhcmRpemVkIGludGVyZmFjZSBmb3IgbWFuaXB1bGF0aW5nIGFuZCBhZG1pbmlzdGVyaW5nIHVzZXIgXAorYW5kIGdyb3VwIGFjY291bnRzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL2xpYnVzZXIvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvbGlidXNlci9uZXd0aWNrZXQiCisKK0xJQ0VOU0UgPSAiTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWYzMGYwNzE2ZGZkZDBkOTFlYjQzOWViZWM1MjJlYzIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL3VzZXIuaDtlbmRsaW5lPTE5O21kNT03NmIzMDFmNjNjMzlmYTk5MjA2MjM5NWVmYmRjOTU1OCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zYW1wbGVzL3Rlc3R1c2VyLmM7ZW5kbGluZT0xOTttZDU9M2I4N2ZhNjYwZmEzZjRhNmJiMzFkNjI0YWZlMzBiYTEiCisKK1NFQ1RJT04gPSAiYmFzZSIKKworU1JDX1VSSSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMvbC9pL2xpYnVzZXIvbGlidXNlci0ke1BWfS50YXIueHogXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2M2U1ZTVjNTUxZTk5ZGM1MzAyYjQwYjgwYmQ2ZDRmMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhNThmZjRmYWJiMDFhMjUwNDNiMTQyMTg1YTMzZWVlYTk2MTEwOWRkNjBkNGI0MGI2YTlkZjRmYTNjYWNlMjBiIgorCitERVBFTkRTID0gInBvcHQgbGlicGFtIGdsaWItMi4wIHh6LW5hdGl2ZSBkb2Nib29rLXV0aWxzLW5hdGl2ZSBsaW51eGRvYy10b29scy1uYXRpdmUgcHl0aG9uIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHB5dGhvbm5hdGl2ZSBweXRob24tZGlyIHBrZ2NvbmZpZworCitFWFRSQV9PRU1BS0UgPSAiUFlUSE9OX0NQUEZMQUdTPS1JJHtTVEFHSU5HX0lOQ0RJUn0vJHtQWVRIT05fRElSfSIKKworUEFDS0FHRVMgKz0gIiR7UE59LXB5dGhvbiAiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vLmRlYnVnIgorRklMRVNfJHtQTn0tcHl0aG9uID0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC8wMDAxLW1vZF9jZ2ktYnVmZmVycy1kYXRhLXdpdGhvdXQtYm91bmQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC8wMDAxLW1vZF9jZ2ktYnVmZmVycy1kYXRhLXdpdGhvdXQtYm91bmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlkZjE3NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkLzAwMDEtbW9kX2NnaS1idWZmZXJzLWRhdGEtd2l0aG91dC1ib3VuZC5wYXRjaApAQCAtMCwwICsxLDM4NyBAQAorRnJvbSBlNmNjYmFiNWQ0MmIxMTBhYzRmNmNlMWY3MmNiMWU5Y2NiZTQ0MDBhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGkgeGluIDxsaXhpbi5mbnN0QGNuLmZ1aml0c3UuY29tPgorRGF0ZTogVHVlLCAxNiBKdW4gMjAxNSAxOTowMjozOCArMDkwMAorU3ViamVjdDogW1BBVENIXSBtb2RfY2dpIGJ1ZmZlcnMgZGF0YSB3aXRob3V0IGJvdW5kIHNvIGZpeCBpdAorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cDovL3JlZG1pbmUubGlnaHR0cGQubmV0L2lzc3Vlcy8xMjY0XQorCitTaWduZWQtb2ZmLWJ5OiBMaSBYaW4gPGxpeGluLmZuc3RAY24uZnVqaXRzdS5jb20+CisKK1VwZGF0ZSBjb250ZXh0IGZvciAxLjQuMzYuCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgZG9jL2NvbmZpZy9saWdodHRwZC5jb25mIHwgICA4ICsrCisgc3JjL21vZF9jZ2kuYyAgICAgICAgICAgIHwgMTg4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxODcgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RvYy9jb25maWcvbGlnaHR0cGQuY29uZiBiL2RvYy9jb25maWcvbGlnaHR0cGQuY29uZgoraW5kZXggNjBiMGFlMS4uOWMxMDFhNyAxMDA2NDQKKy0tLSBhL2RvYy9jb25maWcvbGlnaHR0cGQuY29uZgorKysrIGIvZG9jL2NvbmZpZy9saWdodHRwZC5jb25mCitAQCAtMzc1LDYgKzM3NSwxNCBAQCBzZXJ2ZXIudXBsb2FkLWRpcnMgPSAoICIvdmFyL3RtcCIgKQorICMjCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKyMjCisrIyMKKysjIyBtYXhpbXVtIGJ5dGVzIGluIHNlbmRfcmF3IGJlZm9yZSBiYWNraW5nIG9mZiBbS0J5dGVdCisrIyMgIGNnaS5oaWdoLXdhdGVybGV2ZWwgICAgICAgID0gMTAyNDAKKysjIyBtaW5pbXVtIGJ5dGVzIGluIHNlbmRfcmF3IHRvIGRpc2FibGUgYmFja29mZiBbS0J5dGVdCisrIyMgIGNnaS5sb3ctd2F0ZXJsZXZlbCAgICAgICAgID0gNTEyMAorKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjIworZGlmZiAtLWdpdCBhL3NyYy9tb2RfY2dpLmMgYi9zcmMvbW9kX2NnaS5jCitpbmRleCAwMWIxODc3Li43YzY3ZWI1IDEwMDY0NAorLS0tIGEvc3JjL21vZF9jZ2kuYworKysrIGIvc3JjL21vZF9jZ2kuYworQEAgLTM4LDYgKzM4LDEwIEBACisgCisgI2luY2x1ZGUgInZlcnNpb24uaCIKKyAKKysvKiBmb3Igb3V0cHV0IGxvZ3MgKi8KKytjaGFyIG1zZ2J1ZlsyMDQ4XTsKKysKKysKKyBlbnVtIHtFT0xfVU5TRVQsIEVPTF9OLCBFT0xfUk59OworIAorIHR5cGVkZWYgc3RydWN0IHsKK0BAIC01Myw5ICs1NywxOSBAQCB0eXBlZGVmIHN0cnVjdCB7CisgCXNpemVfdCBzaXplOworIH0gYnVmZmVyX3BpZF90OworIAorK3N0cnVjdCBoYW5kbGVyX2N0eDsKKysKKyt0eXBlZGVmIHN0cnVjdCB7CisrCXN0cnVjdCBoYW5kbGVyX2N0eCAqKmhjdHg7CisrCXNpemVfdCB1c2VkOworKwlzaXplX3Qgc2l6ZTsKKyt9IGJ1ZmZlcl9jdHhfdDsKKysKKyB0eXBlZGVmIHN0cnVjdCB7CisgCWFycmF5ICpjZ2k7CisgCXVuc2lnbmVkIHNob3J0IGV4ZWN1dGVfeF9vbmx5OworKwl1bnNpZ25lZCBpbnQgaGlnaF93YXRlcmxldmVsOyAvKiBtYXhpbXVtIGJ5dGVzIGluIHNlbmRfcmF3IGJlZm9yZSBiYWNraW5nIG9mZiAqLworKwl1bnNpZ25lZCBpbnQgbG93X3dhdGVybGV2ZWw7ICAvKiBtaW5pbXVtIGJ5dGVzIGluIHNlbmRfcmF3IHRvIGRpc2FibGUgYmFja29mZiAqLworIH0gcGx1Z2luX2NvbmZpZzsKKyAKKyB0eXBlZGVmIHN0cnVjdCB7CitAQCAtNjgsOSArODIsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgeworIAlwbHVnaW5fY29uZmlnICoqY29uZmlnX3N0b3JhZ2U7CisgCisgCXBsdWdpbl9jb25maWcgY29uZjsKKysKKysJYnVmZmVyX2N0eF90IGNnaV9jdHg7CisgfSBwbHVnaW5fZGF0YTsKKyAKKy10eXBlZGVmIHN0cnVjdCB7CisrdHlwZWRlZiBzdHJ1Y3QgaGFuZGxlcl9jdHggeworIAlwaWRfdCBwaWQ7CisgCWludCBmZDsKKyAJaW50IGZkZV9uZHg7IC8qIGluZGV4IGludG8gdGhlIGZkLWV2ZW50IGJ1ZmZlciAqLworQEAgLTc4LDExICs5NCwxNiBAQCB0eXBlZGVmIHN0cnVjdCB7CisgCWNvbm5lY3Rpb24gKnJlbW90ZV9jb25uOyAgLyogZHVtYiBwb2ludGVyICovCisgCXBsdWdpbl9kYXRhICpwbHVnaW5fZGF0YTsgLyogZHVtYiBwb2ludGVyICovCisgCisrCWludCB0aHJvdHRsaW5nOyAgICAgICAgLyogMT13YWl0aW5nIGZvciBzZW5kX3JhdyBidWZmZXIgdG8gZHJhaW4gKi8KKysJb2ZmX3QgaGlnaF93YXRlcmxldmVsOyAvKiBtYXhpbXVtIGJ5dGVzIGluIHNlbmRfcmF3IGJlZm9yZSBiYWNraW5nIG9mZiAqLworKwlvZmZfdCBsb3dfd2F0ZXJsZXZlbDsgIC8qIG1pbmltdW0gYnl0ZXMgaW4gc2VuZF9yYXcgdG8gZGlzYWJsZSBiYWNrb2ZmICovCisrCW9mZl90IGJ5dGVzX2luX2J1ZmZlcjsKKysKKyAJYnVmZmVyICpyZXNwb25zZTsKKyAJYnVmZmVyICpyZXNwb25zZV9oZWFkZXI7CisgfSBoYW5kbGVyX2N0eDsKKyAKKy1zdGF0aWMgaGFuZGxlcl9jdHggKiBjZ2lfaGFuZGxlcl9jdHhfaW5pdCh2b2lkKSB7Cisrc3RhdGljIGhhbmRsZXJfY3R4ICogY2dpX2hhbmRsZXJfY3R4X2luaXQocGx1Z2luX2RhdGEgKnApIHsKKyAJaGFuZGxlcl9jdHggKmhjdHggPSBjYWxsb2MoMSwgc2l6ZW9mKCpoY3R4KSk7CisgCisgCWZvcmNlX2Fzc2VydChoY3R4KTsKK0BAIC05MCwxMyArMTExLDI2IEBAIHN0YXRpYyBoYW5kbGVyX2N0eCAqIGNnaV9oYW5kbGVyX2N0eF9pbml0KHZvaWQpIHsKKyAJaGN0eC0+cmVzcG9uc2UgPSBidWZmZXJfaW5pdCgpOworIAloY3R4LT5yZXNwb25zZV9oZWFkZXIgPSBidWZmZXJfaW5pdCgpOworIAorKwloY3R4LT50aHJvdHRsaW5nID0gMDsKKysJaGN0eC0+aGlnaF93YXRlcmxldmVsID0gKG9mZl90KXAtPmNvbmYuaGlnaF93YXRlcmxldmVsICogMTAyNDsKKysJaGN0eC0+bG93X3dhdGVybGV2ZWwgID0gKG9mZl90KXAtPmNvbmYubG93X3dhdGVybGV2ZWwgICogMTAyNDsKKysJaWYgKGhjdHgtPmxvd193YXRlcmxldmVsID49IGhjdHgtPmhpZ2hfd2F0ZXJsZXZlbCkgeworKwkgICAgaGN0eC0+bG93X3dhdGVybGV2ZWwgPSBoY3R4LT5oaWdoX3dhdGVybGV2ZWwgKiAzIC8gNDsgLyogNzUlICovCisrCX0KKysJaGN0eC0+Ynl0ZXNfaW5fYnVmZmVyID0gMDsKKysKKyAJcmV0dXJuIGhjdHg7CisgfQorIAorLXN0YXRpYyB2b2lkIGNnaV9oYW5kbGVyX2N0eF9mcmVlKGhhbmRsZXJfY3R4ICpoY3R4KSB7Cisrc3RhdGljIHZvaWQgY2dpX2hhbmRsZXJfY3R4X2ZyZWUoc2VydmVyICpzcnYsIGhhbmRsZXJfY3R4ICpoY3R4KSB7CisgCWJ1ZmZlcl9mcmVlKGhjdHgtPnJlc3BvbnNlKTsKKyAJYnVmZmVyX2ZyZWUoaGN0eC0+cmVzcG9uc2VfaGVhZGVyKTsKKyAKKysJLyogdG8gYXZvaWQgY29uZnVzaW9uICovCisrCWlmIChoY3R4LT50aHJvdHRsaW5nKSB7CisrCSAgICBsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzIiwgInVudGhyb3R0bGVkIik7CisrCX0KKysKKyAJZnJlZShoY3R4KTsKKyB9CisgCitAQCAtMTU0LDYgKzE4OCw4IEBAIFNFVERFRkFVTFRTX0ZVTkMobW9kX2Zhc3RjZ2lfc2V0X2RlZmF1bHRzKSB7CisgCWNvbmZpZ192YWx1ZXNfdCBjdltdID0geworIAkJeyAiY2dpLmFzc2lnbiIsICAgICAgICAgICAgICAgICAgTlVMTCwgVF9DT05GSUdfQVJSQVksIFRfQ09ORklHX1NDT1BFX0NPTk5FQ1RJT04gfSwgICAgICAgLyogMCAqLworIAkJeyAiY2dpLmV4ZWN1dGUteC1vbmx5IiwgICAgICAgICAgTlVMTCwgVF9DT05GSUdfQk9PTEVBTiwgVF9DT05GSUdfU0NPUEVfQ09OTkVDVElPTiB9LCAgICAgLyogMSAqLworKwkJeyAiY2dpLmhpZ2gtd2F0ZXJsZXZlbCIsICAgICAgICAgTlVMTCwgVF9DT05GSUdfSU5ULCAgIFRfQ09ORklHX1NDT1BFX0NPTk5FQ1RJT04gfSwgICAgICAgLyogMiAqLworKwkJeyAiY2dpLmxvdy13YXRlcmxldmVsIiwgICAgICAgICAgTlVMTCwgVF9DT05GSUdfSU5ULCAgIFRfQ09ORklHX1NDT1BFX0NPTk5FQ1RJT04gfSwgICAgICAgLyogMyAqLworIAkJeyBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgVF9DT05GSUdfVU5TRVQsIFRfQ09ORklHX1NDT1BFX1VOU0VUfQorIAl9OworIAorQEAgLTE2OSw5ICsyMDUsMTMgQEAgU0VUREVGQVVMVFNfRlVOQyhtb2RfZmFzdGNnaV9zZXRfZGVmYXVsdHMpIHsKKyAKKyAJCXMtPmNnaSAgICA9IGFycmF5X2luaXQoKTsKKyAJCXMtPmV4ZWN1dGVfeF9vbmx5ID0gMDsKKysJCXMtPmhpZ2hfd2F0ZXJsZXZlbCA9IDA7IC8qIDAgPT0gZGlzYWJsZWQgKi8KKysJCXMtPmxvd193YXRlcmxldmVsICA9IDA7CisgCisgCQljdlswXS5kZXN0aW5hdGlvbiA9IHMtPmNnaTsKKyAJCWN2WzFdLmRlc3RpbmF0aW9uID0gJihzLT5leGVjdXRlX3hfb25seSk7CisrCQljdlsyXS5kZXN0aW5hdGlvbiA9ICYocy0+aGlnaF93YXRlcmxldmVsKTsKKysJCWN2WzNdLmRlc3RpbmF0aW9uID0gJihzLT5sb3dfd2F0ZXJsZXZlbCk7CisgCisgCQlwLT5jb25maWdfc3RvcmFnZVtpXSA9IHM7CisgCitAQCAtMTg0LDYgKzIyNCw1MSBAQCBTRVRERUZBVUxUU19GVU5DKG1vZF9mYXN0Y2dpX3NldF9kZWZhdWx0cykgeworIH0KKyAKKyAKKytzdGF0aWMgdm9pZCBjZ2lfcmVjb3VudF9ieXRlc19pbl9idWZmZXIoaGFuZGxlcl9jdHggKmhjdHgpCisreworKwljaHVua3F1ZXVlICpjcSA9IGhjdHgtPnJlbW90ZV9jb25uLT53cml0ZV9xdWV1ZTsKKysJaGN0eC0+Ynl0ZXNfaW5fYnVmZmVyID0gY2h1bmtxdWV1ZV9sZW5ndGgoY3EpIC0gY2h1bmtxdWV1ZV93cml0dGVuKGNxKTsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgY2dpX3Rocm90dGxpbmdfY29udHJvbChzZXJ2ZXIgKnNydiwgaGFuZGxlcl9jdHggKmhjdHgpCisreworKwljZ2lfcmVjb3VudF9ieXRlc19pbl9idWZmZXIoaGN0eCk7CisrCisrI2lmZGVmIERFQlVHCisrCXNwcmludGYobXNnYnVmLCAidGhyb3R0bGluZz0lZCwgY2hhcnM9JWxsdSwgaGlnaD0lbGx1LCBsb3c9JWxsdSIsCisrCQloY3R4LT50aHJvdHRsaW5nLCBoY3R4LT5ieXRlc19pbl9idWZmZXIsCisrCQloY3R4LT5oaWdoX3dhdGVybGV2ZWwsIGhjdHgtPmxvd193YXRlcmxldmVsKTsKKysJbG9nX2Vycm9yX3dyaXRlKHNydiwgX19GSUxFX18sIF9fTElORV9fLCAic3MiLAorKwkJCSIoZGVidWcpIHRocm90dGxpbmcgY29udHJvbCwiLCBtc2didWYpOworKyNlbmRpZgorKworKwlpZiAoaGN0eC0+dGhyb3R0bGluZykgeworKwkJc3ByaW50Zihtc2didWYsICJ0aHJvdHRsaW5nOyBjaGFycyBpbiBxdWV1ZT0lbGx1LCIKKysJCQkiIGxvdy13YXRlcmxldmVsPSVsbHUsIGhpZ2gtd2F0ZXJsZXZlbD0lbGx1IiwKKysJCQloY3R4LT5ieXRlc19pbl9idWZmZXIsCisrCQkJaGN0eC0+bG93X3dhdGVybGV2ZWwsIGhjdHgtPmhpZ2hfd2F0ZXJsZXZlbCk7CisrCQlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzIiwgbXNnYnVmKTsKKysJCWlmIChoY3R4LT5ieXRlc19pbl9idWZmZXIgPD0gaGN0eC0+bG93X3dhdGVybGV2ZWwpIHsKKysJCQlmZGV2ZW50X2V2ZW50X3NldChzcnYtPmV2LCAmKGhjdHgtPmZkZV9uZHgpLCBoY3R4LT5mZCwgRkRFVkVOVF9JTik7CisrCQkJaGN0eC0+dGhyb3R0bGluZyA9IDA7CisrCQkJbG9nX2Vycm9yX3dyaXRlKHNydiwgX19GSUxFX18sIF9fTElORV9fLCAicyIsICJ1bnRocm90dGxlZCIpOworKwkJfQorKwl9IGVsc2UgeworKwkJaWYgKGhjdHgtPmhpZ2hfd2F0ZXJsZXZlbCAhPSAwICYmCisrCQkJaGN0eC0+aGlnaF93YXRlcmxldmVsIDw9IGhjdHgtPmJ5dGVzX2luX2J1ZmZlcikgeworKwkJCWZkZXZlbnRfZXZlbnRfZGVsKHNydi0+ZXYsICYoaGN0eC0+ZmRlX25keCksIGhjdHgtPmZkKTsKKysJCQloY3R4LT50aHJvdHRsaW5nID0gMTsKKysJCQlzcHJpbnRmKG1zZ2J1ZiwgInRocm90dGxlZDsgY2hhcnMgaW4gcXVldWU9JWxsdSwiCisrCQkJCSIgbG93LXdhdGVybGV2ZWw9JWxsdSwgaGlnaC13YXRlcmxldmVsPSVsbHUiLAorKwkJCQloY3R4LT5ieXRlc19pbl9idWZmZXIsCisrCQkJCWhjdHgtPmxvd193YXRlcmxldmVsLCBoY3R4LT5oaWdoX3dhdGVybGV2ZWwpOworKwkJCWxvZ19lcnJvcl93cml0ZShzcnYsIF9fRklMRV9fLCBfX0xJTkVfXywgInMiLCBtc2didWYpOworKwkJfQorKwl9CisrfQorKworKworIHN0YXRpYyBpbnQgY2dpX3BpZF9hZGQoc2VydmVyICpzcnYsIHBsdWdpbl9kYXRhICpwLCBwaWRfdCBwaWQpIHsKKyAJaW50IG0gPSAtMTsKKyAJc2l6ZV90IGk7CitAQCAtMjMwLDYgKzMxNSwzOSBAQCBzdGF0aWMgaW50IGNnaV9waWRfZGVsKHNlcnZlciAqc3J2LCBwbHVnaW5fZGF0YSAqcCwgcGlkX3QgcGlkKSB7CisgCXJldHVybiAwOworIH0KKyAKKysKKytzdGF0aWMgdm9pZCBjZ2lfY3R4X2FkZChwbHVnaW5fZGF0YSAqcCwgaGFuZGxlcl9jdHggKmhjdHgpIHsKKysJYnVmZmVyX2N0eF90ICpyID0gJihwLT5jZ2lfY3R4KTsKKysKKysJaWYgKHItPnNpemUgPT0gMCkgeworKwkJci0+c2l6ZSA9IDE2OworKwkJci0+aGN0eCA9IG1hbGxvYyhzaXplb2YoKnItPmhjdHgpICogci0+c2l6ZSk7CisrCX0gZWxzZSBpZiAoci0+dXNlZCA9PSByLT5zaXplKSB7CisrCQlyLT5zaXplICs9IDE2OworKwkJci0+aGN0eCA9IHJlYWxsb2Moci0+aGN0eCwgc2l6ZW9mKCpyLT5oY3R4KSAqIHItPnNpemUpOworKwl9CisrCisrCXItPmhjdHhbci0+dXNlZCsrXSA9IGhjdHg7CisrfQorKworK3N0YXRpYyB2b2lkIGNnaV9jdHhfZGVsKHBsdWdpbl9kYXRhICpwLCBoYW5kbGVyX2N0eCAqaGN0eCkgeworKwlzaXplX3QgaTsKKysJYnVmZmVyX2N0eF90ICpyID0gJihwLT5jZ2lfY3R4KTsKKysKKysJZm9yIChpID0gMDsgaSA8IHItPnVzZWQ7IGkrKykgeworKwkJaWYgKHItPmhjdHhbaV0gPT0gaGN0eCkgYnJlYWs7CisrCX0KKysKKysJaWYgKGkgIT0gci0+dXNlZCkgeworKwkJLyogZm91bmQgKi8KKysKKysJCWlmIChpICE9IHItPnVzZWQgLSAxKSB7CisrCQkJci0+aGN0eFtpXSA9IHItPmhjdHhbci0+dXNlZCAtIDFdOworKwkJfQorKwkJci0+dXNlZC0tOworKwl9CisrfQorKworIHN0YXRpYyBpbnQgY2dpX3Jlc3BvbnNlX3BhcnNlKHNlcnZlciAqc3J2LCBjb25uZWN0aW9uICpjb24sIHBsdWdpbl9kYXRhICpwLCBidWZmZXIgKmluKSB7CisgCWNoYXIgKm5zOworIAljb25zdCBjaGFyICpzOworQEAgLTM4MCw2ICs0OTgsMTQgQEAgc3RhdGljIGludCBjZ2lfZGVtdXhfcmVzcG9uc2Uoc2VydmVyICpzcnYsIGhhbmRsZXJfY3R4ICpoY3R4KSB7CisgCisgCQlidWZmZXJfY29tbWl0KGhjdHgtPnJlc3BvbnNlLCBuKTsKKyAKKysjaWZkZWYgREVCVUcKKysJCXNwcmludGYobXNnYnVmLCAibj0lZCwgYnl0ZXNfb3V0PSVsbHUsIGJ5dGVzX2luPSVsbHUiLCBuLAorKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpY29uLT53cml0ZV9xdWV1ZS0+Ynl0ZXNfb3V0LAorKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpY29uLT53cml0ZV9xdWV1ZS0+Ynl0ZXNfaW4pOworKwkJbG9nX2Vycm9yX3dyaXRlKHNydiwgX19GSUxFX18sIF9fTElORV9fLCAic3MiLAorKwkJCQkiKGRlYnVnKSByZWFkLCIsIG1zZ2J1Zik7CisrI2VuZGlmCisrCisgCQkvKiBzcGxpdCBoZWFkZXIgZnJvbSBib2R5ICovCisgCisgCQlpZiAoY29uLT5maWxlX3N0YXJ0ZWQgPT0gMCkgeworQEAgLTUwMyw3ICs2MjksMjAgQEAgc3RhdGljIGludCBjZ2lfZGVtdXhfcmVzcG9uc2Uoc2VydmVyICpzcnYsIGhhbmRsZXJfY3R4ICpoY3R4KSB7CisgCQkJfQorIAkJfSBlbHNlIHsKKyAJCQlodHRwX2NodW5rX2FwcGVuZF9idWZmZXIoc3J2LCBjb24sIGhjdHgtPnJlc3BvbnNlKTsKKysjaWZkZWYgREVCVUcKKysJCQlzcHJpbnRmKG1zZ2J1ZiwgIm49JWQsIGJ5dGVzX291dD0lbGx1LCBieXRlc19pbj0lbGx1LCBsaW1pdD0lbGx1IiwgbiwKKysJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljb24tPndyaXRlX3F1ZXVlLT5ieXRlc19vdXQsCisrCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpY29uLT53cml0ZV9xdWV1ZS0+Ynl0ZXNfaW4sCisrCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpaGN0eC0+aGlnaF93YXRlcmxldmVsKTsKKysJCQlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sCisrCQkJCQkic3MiLCAiKGRlYnVnKSBhcHBlbmQsIiwgbXNnYnVmKTsKKysjZW5kaWYKKyAJCQlqb2JsaXN0X2FwcGVuZChzcnYsIGNvbik7CisrCisrCQkJY2dpX3Rocm90dGxpbmdfY29udHJvbChzcnYsIGhjdHgpOworKwkJCWlmIChoY3R4LT50aHJvdHRsaW5nKSB7CisrCQkJCXJldHVybiBGREVWRU5UX0hBTkRMRURfTk9UX0ZJTklTSEVEOworKwkJCX0KKyAJCX0KKyAKKyAjaWYgMAorQEAgLTU1Myw4ICs2OTIsOSBAQCBzdGF0aWMgaGFuZGxlcl90IGNnaV9jb25uZWN0aW9uX2Nsb3NlKHNlcnZlciAqc3J2LCBoYW5kbGVyX2N0eCAqaGN0eCkgeworIAljb24tPnBsdWdpbl9jdHhbcC0+aWRdID0gTlVMTDsKKyAKKyAJLyogaXMgdGhpcyBhIGdvb2QgaWRlYSA/ICovCistCWNnaV9oYW5kbGVyX2N0eF9mcmVlKGhjdHgpOworLQorKwljZ2lfY3R4X2RlbChwLCBoY3R4KTsKKysJY2dpX2hhbmRsZXJfY3R4X2ZyZWUoc3J2LCBoY3R4KTsKKysJCisgCS8qIGlmIHdhaXRwaWQgaGFzbid0IGJlZW4gY2FsbGVkIGJ5IHJlc3BvbnNlLmMgeWV0LCBkbyBpdCBoZXJlICovCisgCWlmIChwaWQpIHsKKyAJCS8qIGNoZWNrIGlmIHRoZSBDR0ktc2NyaXB0IGlzIGFscmVhZHkgZ29uZSAqLworQEAgLTExMDUsNyArMTI0NSw4IEBAIHN0YXRpYyBpbnQgY2dpX2NyZWF0ZV9lbnYoc2VydmVyICpzcnYsIGNvbm5lY3Rpb24gKmNvbiwgcGx1Z2luX2RhdGEgKnAsIGJ1ZmZlciAqCisgCQljb24tPm1vZGUgPSBwLT5pZDsKKyAJCWJ1ZmZlcl9yZXNldChjb24tPnBoeXNpY2FsLnBhdGgpOworIAorLQkJaGN0eCA9IGNnaV9oYW5kbGVyX2N0eF9pbml0KCk7CisrCQloY3R4ID0gY2dpX2hhbmRsZXJfY3R4X2luaXQocCk7CisrCQljZ2lfY3R4X2FkZChwLCBoY3R4KTsKKyAKKyAJCWhjdHgtPnJlbW90ZV9jb25uID0gY29uOworIAkJaGN0eC0+cGx1Z2luX2RhdGEgPSBwOworQEAgLTExMTQsNiArMTI1NSwxMSBAQCBzdGF0aWMgaW50IGNnaV9jcmVhdGVfZW52KHNlcnZlciAqc3J2LCBjb25uZWN0aW9uICpjb24sIHBsdWdpbl9kYXRhICpwLCBidWZmZXIgKgorIAkJaGN0eC0+ZmRlX25keCA9IC0xOworIAorIAkJY29uLT5wbHVnaW5fY3R4W3AtPmlkXSA9IGhjdHg7CisrI2lmZGVmIERFQlVHCisrCQlzcHJpbnRmKG1zZ2J1ZiwgImhjdHg9JXAsIGNvbj0lcCIsICh2b2lkKiloY3R4LCAodm9pZCopY29uKTsKKysJCWxvZ19lcnJvcl93cml0ZShzcnYsIF9fRklMRV9fLCBfX0xJTkVfXywgInNzIiwKKysJCQkJIihkZWJ1ZykgaGN0eCBnZW5lcmF0ZWQsICIsIG1zZ2J1Zik7CisrI2VuZGlmCisgCisgCQlmZGV2ZW50X3JlZ2lzdGVyKHNydi0+ZXYsIGhjdHgtPmZkLCBjZ2lfaGFuZGxlX2ZkZXZlbnQsIGhjdHgpOworIAkJZmRldmVudF9ldmVudF9zZXQoc3J2LT5ldiwgJihoY3R4LT5mZGVfbmR4KSwgaGN0eC0+ZmQsIEZERVZFTlRfSU4pOworQEAgLTExMjgsNyArMTI3NCw4IEBAIHN0YXRpYyBpbnQgY2dpX2NyZWF0ZV9lbnYoc2VydmVyICpzcnYsIGNvbm5lY3Rpb24gKmNvbiwgcGx1Z2luX2RhdGEgKnAsIGJ1ZmZlciAqCisgCisgCQkJY2xvc2UoaGN0eC0+ZmQpOworIAorLQkJCWNnaV9oYW5kbGVyX2N0eF9mcmVlKGhjdHgpOworKwkJCWNnaV9jdHhfZGVsKHAsIGhjdHgpOworKwkJCWNnaV9oYW5kbGVyX2N0eF9mcmVlKHNydiwgaGN0eCk7CisgCisgCQkJY29uLT5wbHVnaW5fY3R4W3AtPmlkXSA9IE5VTEw7CisgCitAQCAtMTE1Myw2ICsxMzAwLDggQEAgc3RhdGljIGludCBtb2RfY2dpX3BhdGNoX2Nvbm5lY3Rpb24oc2VydmVyICpzcnYsIGNvbm5lY3Rpb24gKmNvbiwgcGx1Z2luX2RhdGEgKnAKKyAKKyAJUEFUQ0goY2dpKTsKKyAJUEFUQ0goZXhlY3V0ZV94X29ubHkpOworKwlQQVRDSChoaWdoX3dhdGVybGV2ZWwpOworKwlQQVRDSChsb3dfd2F0ZXJsZXZlbCk7CisgCisgCS8qIHNraXAgdGhlIGZpcnN0LCB0aGUgZ2xvYmFsIGNvbnRleHQgKi8KKyAJZm9yIChpID0gMTsgaSA8IHNydi0+Y29uZmlnX2NvbnRleHQtPnVzZWQ7IGkrKykgeworQEAgLTExNzAsNiArMTMxOSwxMCBAQCBzdGF0aWMgaW50IG1vZF9jZ2lfcGF0Y2hfY29ubmVjdGlvbihzZXJ2ZXIgKnNydiwgY29ubmVjdGlvbiAqY29uLCBwbHVnaW5fZGF0YSAqcAorIAkJCQlQQVRDSChjZ2kpOworIAkJCX0gZWxzZSBpZiAoYnVmZmVyX2lzX2VxdWFsX3N0cmluZyhkdS0+a2V5LCBDT05TVF9TVFJfTEVOKCJjZ2kuZXhlY3V0ZS14LW9ubHkiKSkpIHsKKyAJCQkJUEFUQ0goZXhlY3V0ZV94X29ubHkpOworKwkJCX0gZWxzZSBpZiAoYnVmZmVyX2lzX2VxdWFsX3N0cmluZyhkdS0+a2V5LCBDT05TVF9TVFJfTEVOKCJjZ2kuaGlnaC13YXRlcmxldmVsIikpKSB7CisrCQkJCVBBVENIKGhpZ2hfd2F0ZXJsZXZlbCk7CisrCQkJfSBlbHNlIGlmIChidWZmZXJfaXNfZXF1YWxfc3RyaW5nKGR1LT5rZXksIENPTlNUX1NUUl9MRU4oImNnaS5sb3ctd2F0ZXJsZXZlbCIpKSkgeworKwkJCQlQQVRDSChsb3dfd2F0ZXJsZXZlbCk7CisgCQkJfQorIAkJfQorIAl9CitAQCAtMTIyMiw2ICsxMzc1LDIxIEBAIFVSSUhBTkRMRVJfRlVOQyhjZ2lfaXNfaGFuZGxlZCkgeworIFRSSUdHRVJfRlVOQyhjZ2lfdHJpZ2dlcikgeworIAlwbHVnaW5fZGF0YSAqcCA9IHBfZDsKKyAJc2l6ZV90IG5keDsKKysKKysJZm9yIChuZHggPSAwOyBuZHggPCBwLT5jZ2lfY3R4LnVzZWQ7IG5keCsrKSB7CisrCQloYW5kbGVyX2N0eCAqaGN0eCA9IHAtPmNnaV9jdHguaGN0eFtuZHhdOworKyNpZmRlZiBERUJVRworKwkJY29ubmVjdGlvbiAqY29uID0gaGN0eC0+cmVtb3RlX2Nvbm47CisrCQorKwkJc3ByaW50Zihtc2didWYsICJoY3R4PSVwLCBjb249JXAsIGJ5dGVzX2luX2J1ZmZlcj0lbGx1IiwKKysJCQkodm9pZCopaGN0eCwgKHZvaWQqKWNvbiwKKysJCQkodW5zaWduZWQgbG9uZyBsb25nKWhjdHgtPmJ5dGVzX2luX2J1ZmZlcik7CisrCQlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzcyIsCisrCQkJCSIoZGVidWcpIGZvdW5kIHVzaW5nIGN0eCwiLCBtc2didWYpOworKyNlbmRpZgorKwkJY2dpX3Rocm90dGxpbmdfY29udHJvbChzcnYsIGhjdHgpOworKwl9CisrCisgCS8qIHRoZSB0cmlnZ2VyIGhhbmRsZSBvbmx5IGNhcmVzIGFib3V0IGxvbmVseSBQSUQgd2hpY2ggd2UgaGF2ZSB0byB3YWl0IGZvciAqLworICNpZm5kZWYgX19XSU4zMgorIAorQEAgLTEzMzAsNyArMTQ5OCw4IEBAIFNVQlJFUVVFU1RfRlVOQyhtb2RfY2dpX2hhbmRsZV9zdWJyZXF1ZXN0KSB7CisgCQkJbG9nX2Vycm9yX3dyaXRlKHNydiwgX19GSUxFX18sIF9fTElORV9fLCAic2RzIiwgImNnaSBjbG9zZSBmYWlsZWQgIiwgaGN0eC0+ZmQsIHN0cmVycm9yKGVycm5vKSk7CisgCQl9CisgCistCQljZ2lfaGFuZGxlcl9jdHhfZnJlZShoY3R4KTsKKysJCWNnaV9jdHhfZGVsKHAsIGhjdHgpOworKwkJY2dpX2hhbmRsZXJfY3R4X2ZyZWUoc3J2LCBoY3R4KTsKKyAKKyAJCWNvbi0+cGx1Z2luX2N0eFtwLT5pZF0gPSBOVUxMOworIAorQEAgLTEzNjIsNyArMTUzMSw4IEBAIFNVQlJFUVVFU1RfRlVOQyhtb2RfY2dpX2hhbmRsZV9zdWJyZXF1ZXN0KSB7CisgCQkJbG9nX2Vycm9yX3dyaXRlKHNydiwgX19GSUxFX18sIF9fTElORV9fLCAic2RzIiwgImNnaSBjbG9zZSBmYWlsZWQgIiwgaGN0eC0+ZmQsIHN0cmVycm9yKGVycm5vKSk7CisgCQl9CisgCistCQljZ2lfaGFuZGxlcl9jdHhfZnJlZShoY3R4KTsKKysJCWNnaV9jdHhfZGVsKHAsIGhjdHgpOworKwkJY2dpX2hhbmRsZXJfY3R4X2ZyZWUoc3J2LCBoY3R4KTsKKyAKKyAJCWNvbi0+cGx1Z2luX2N0eFtwLT5pZF0gPSBOVUxMOworIAkJcmV0dXJuIEhBTkRMRVJfRklOSVNIRUQ7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9pbmRleC5odG1sLmxpZ2h0dHBkIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvaW5kZXguaHRtbC5saWdodHRwZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWYxYzM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvaW5kZXguaHRtbC5saWdodHRwZApAQCAtMCwwICsxIEBACis8aHRtbD48Ym9keT48aDE+SXQgd29ya3MhPC9oMT48L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvbGlnaHR0cGQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9saWdodHRwZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjg5YTYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvbGlnaHR0cGQKQEAgLTAsMCArMSwzNCBAQAorIyEvYmluL3NoCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KK0RBRU1PTj0vdXNyL3NiaW4vbGlnaHR0cGQKK05BTUU9bGlnaHR0cGQKK0RFU0M9IkxpZ2h0dHBkIFdlYiBTZXJ2ZXIiCitPUFRTPSItZiAvZXRjL2xpZ2h0dHBkLmNvbmYiCisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwllY2hvIC1uICJTdGFydGluZyAkREVTQzogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLXggIiREQUVNT04iIC0tICRPUFRTCisJZWNobyAiJE5BTUUuIgorCTs7CisgIHN0b3ApCisJZWNobyAtbiAiU3RvcHBpbmcgJERFU0M6ICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLXggIiREQUVNT04iCisJZWNobyAiJE5BTUUuIgorCTs7CisgIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorCWVjaG8gLW4gIlJlc3RhcnRpbmcgJERFU0M6ICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLXggIiREQUVNT04iCisJc2xlZXAgMQorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLXggIiREQUVNT04iIC0tICRPUFRTCisJZWNobyAiJE5BTUUuIgorCTs7CisgICopCisJTj0vZXRjL2luaXQuZC8kTkFNRQorCWVjaG8gIlVzYWdlOiAkTiB7c3RhcnR8c3RvcHxyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iID4mMgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvbGlnaHR0cGQuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkL2xpZ2h0dHBkLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU4NDAyZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkL2xpZ2h0dHBkLmNvbmYKQEAgLTAsMCArMSwzMzEgQEAKKyMgbGlnaHR0cGQgY29uZmlndXJhdGlvbiBmaWxlCisjCisjIHVzZSBpdCBhcyBhIGJhc2UgZm9yIGxpZ2h0dHBkIDEuMC4wIGFuZCBhYm92ZQorIworIyAkSWQ6IGxpZ2h0dHBkLmNvbmYsdiAxLjcgMjAwNC8xMS8wMyAyMjoyNjowNSB3ZWlnb24gRXhwICQKKworIyMjIyMjIyMjIyMjIE9wdGlvbnMgeW91IHJlYWxseSBoYXZlIHRvIHRha2UgY2FyZSBvZiAjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyBtb2R1bGVzIHRvIGxvYWQKKyMgYXQgbGVhc3QgbW9kX2FjY2VzcyBhbmQgbW9kX2FjY2Vzc2xvZyBzaG91bGQgYmUgbG9hZGVkCisjIGFsbCBvdGhlciBtb2R1bGUgc2hvdWxkIG9ubHkgYmUgbG9hZGVkIGlmIHJlYWxseSBuZWNjZXNhcnkKKyMgLSBzYXZlcyBzb21lIHRpbWUKKyMgLSBzYXZlcyBtZW1vcnkKK3NlcnZlci5tb2R1bGVzICAgICAgICAgICAgICA9ICgKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9yZXdyaXRlIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9yZWRpcmVjdCIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfYWxpYXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX2FjY2VzcyIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfY21sIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF90cmlnZ2VyX2I0X2RsIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9hdXRoIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9zdGF0dXMiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3NldGVudiIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfZmFzdGNnaSIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfcHJveHkiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3NpbXBsZV92aG9zdCIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfZXZob3N0IiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF91c2VyZGlyIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9jZ2kiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX2NvbXByZXNzIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9zc2kiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3VzZXJ0cmFjayIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfZXhwaXJlIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9zZWNkb3dubG9hZCIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfcnJkdG9vbCIsCisjCQkJCSJtb2Rfd2ViZGF2IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9hY2Nlc3Nsb2ciICkKKworIyMgYSBzdGF0aWMgZG9jdW1lbnQtcm9vdCwgZm9yIHZpcnR1YWwtaG9zdGluZyB0YWtlIGxvb2sgYXQgdGhlCisjIyBzZXJ2ZXIudmlydHVhbC0qIG9wdGlvbnMKK3NlcnZlci5kb2N1bWVudC1yb290ICAgICAgICA9ICIvd3d3L3BhZ2VzLyIKKworIyMgd2hlcmUgdG8gc2VuZCBlcnJvci1tZXNzYWdlcyB0bworc2VydmVyLmVycm9ybG9nICAgICAgICAgICAgID0gIi93d3cvbG9ncy9saWdodHRwZC5lcnJvci5sb2ciCisKKyMgZmlsZXMgdG8gY2hlY2sgZm9yIGlmIC4uLi8gaXMgcmVxdWVzdGVkCitpbmRleC1maWxlLm5hbWVzICAgICAgICAgICAgPSAoICJpbmRleC5waHAiLCAiaW5kZXguaHRtbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmRleC5odG0iLCAiZGVmYXVsdC5odG0iICkKKworIyMgc2V0IHRoZSBldmVudC1oYW5kbGVyIChyZWFkIHRoZSBwZXJmb3JtYW5jZSBzZWN0aW9uIGluIHRoZSBtYW51YWwpCisjIHNlcnZlci5ldmVudC1oYW5kbGVyID0gImZyZWVic2Qta3F1ZXVlIiAjIG5lZWRlZCBvbiBPUyBYCisKKyMgbWltZXR5cGUgbWFwcGluZworbWltZXR5cGUuYXNzaWduICAgICAgICAgICAgID0gKAorICAiLnBkZiIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vcGRmIiwKKyAgIi5zaWciICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3BncC1zaWduYXR1cmUiLAorICAiLnNwbCIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vZnV0dXJlc3BsYXNoIiwKKyAgIi5jbGFzcyIgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIsCisgICIucHMiICAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9wb3N0c2NyaXB0IiwKKyAgIi50b3JyZW50IiAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtYml0dG9ycmVudCIsCisgICIuZHZpIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LWR2aSIsCisgICIuZ3oiICAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LWd6aXAiLAorICAiLnBhYyIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1ucy1wcm94eS1hdXRvY29uZmlnIiwKKyAgIi5zd2YiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIiwKKyAgIi50YXIuZ3oiICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtdGd6IiwKKyAgIi50Z3oiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtdGd6IiwKKyAgIi50YXIiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtdGFyIiwKKyAgIi56aXAiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3ppcCIsCisgICIubXAzIiAgICAgICAgICA9PiAgICAgICJhdWRpby9tcGVnIiwKKyAgIi5tM3UiICAgICAgICAgID0+ICAgICAgImF1ZGlvL3gtbXBlZ3VybCIsCisgICIud21hIiAgICAgICAgICA9PiAgICAgICJhdWRpby94LW1zLXdtYSIsCisgICIud2F4IiAgICAgICAgICA9PiAgICAgICJhdWRpby94LW1zLXdheCIsCisgICIub2dnIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9vZ2ciLAorICAiLndhdiIgICAgICAgICAgPT4gICAgICAiYXVkaW8veC13YXYiLAorICAiLmdpZiIgICAgICAgICAgPT4gICAgICAiaW1hZ2UvZ2lmIiwKKyAgIi5qcGciICAgICAgICAgID0+ICAgICAgImltYWdlL2pwZWciLAorICAiLmpwZWciICAgICAgICAgPT4gICAgICAiaW1hZ2UvanBlZyIsCisgICIucG5nIiAgICAgICAgICA9PiAgICAgICJpbWFnZS9wbmciLAorICAiLnhibSIgICAgICAgICAgPT4gICAgICAiaW1hZ2UveC14Yml0bWFwIiwKKyAgIi54cG0iICAgICAgICAgID0+ICAgICAgImltYWdlL3gteHBpeG1hcCIsCisgICIueHdkIiAgICAgICAgICA9PiAgICAgICJpbWFnZS94LXh3aW5kb3dkdW1wIiwKKyAgIi5jc3MiICAgICAgICAgID0+ICAgICAgInRleHQvY3NzIiwKKyAgIi5odG1sIiAgICAgICAgID0+ICAgICAgInRleHQvaHRtbCIsCisgICIuaHRtIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L2h0bWwiLAorICAiLmpzIiAgICAgICAgICAgPT4gICAgICAidGV4dC9qYXZhc2NyaXB0IiwKKyAgIi5hc2MiICAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLmMiICAgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIuY3BwIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi5sb2ciICAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLmNvbmYiICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIudGV4dCIgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi50eHQiICAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLmR0ZCIgICAgICAgICAgPT4gICAgICAidGV4dC94bWwiLAorICAiLnhtbCIgICAgICAgICAgPT4gICAgICAidGV4dC94bWwiLAorICAiLm1wZWciICAgICAgICAgPT4gICAgICAidmlkZW8vbXBlZyIsCisgICIubXBnIiAgICAgICAgICA9PiAgICAgICJ2aWRlby9tcGVnIiwKKyAgIi5tb3YiICAgICAgICAgID0+ICAgICAgInZpZGVvL3F1aWNrdGltZSIsCisgICIucXQiICAgICAgICAgICA9PiAgICAgICJ2aWRlby9xdWlja3RpbWUiLAorICAiLmF2aSIgICAgICAgICAgPT4gICAgICAidmlkZW8veC1tc3ZpZGVvIiwKKyAgIi5hc2YiICAgICAgICAgID0+ICAgICAgInZpZGVvL3gtbXMtYXNmIiwKKyAgIi5hc3giICAgICAgICAgID0+ICAgICAgInZpZGVvL3gtbXMtYXNmIiwKKyAgIi53bXYiICAgICAgICAgID0+ICAgICAgInZpZGVvL3gtbXMtd212IiwKKyAgIi5iejIiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtYnppcCIsCisgICIudGJ6IiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LWJ6aXAtY29tcHJlc3NlZC10YXIiLAorICAiLnRhci5iejIiICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1iemlwLWNvbXByZXNzZWQtdGFyIgorICkKKworIyBVc2UgdGhlICJDb250ZW50LVR5cGUiIGV4dGVuZGVkIGF0dHJpYnV0ZSB0byBvYnRhaW4gbWltZSB0eXBlIGlmIHBvc3NpYmxlCisjbWltZXR5cGUudXNlLXhhdHRyICAgICAgICA9ICJlbmFibGUiCisKKworIyMgc2VuZCBhIGRpZmZlcmVudCBTZXJ2ZXI6IGhlYWRlcgorIyMgYmUgbmljZSBhbmQga2VlcCBpdCBhdCBsaWdodHRwZAorIyBzZXJ2ZXIudGFnICAgICAgICAgICAgICAgICA9ICJsaWdodHRwZCIKKworIyMjIyBhY2Nlc3Nsb2cgbW9kdWxlCithY2Nlc3Nsb2cuZmlsZW5hbWUgICAgICAgICAgPSAiL3d3dy9sb2dzL2FjY2Vzcy5sb2ciCitkZWJ1Zy5sb2ctcmVxdWVzdC1oYW5kbGluZyA9ICJlbmFibGUiCisKKworCisKKyMjIGRlbnkgYWNjZXNzIHRoZSBmaWxlLWV4dGVuc2lvbnMKKyMKKyMgfiAgICBpcyBmb3IgYmFja3VwZmlsZXMgZnJvbSB2aSwgZW1hY3MsIGpvZSwgLi4uCisjIC5pbmMgaXMgb2Z0ZW4gdXNlZCBmb3IgY29kZSBpbmNsdWRlcyB3aGljaCBzaG91bGQgaW4gZ2VuZXJhbCBub3QgYmUgcGFydAorIyAgICAgIG9mIHRoZSBkb2N1bWVudC1yb290Cit1cmwuYWNjZXNzLWRlbnkgICAgICAgICAgICAgPSAoICJ+IiwgIi5pbmMiICkKKworJEhUVFBbInVybCJdID1+ICJcLnBkZiQiIHsKKyAgc2VydmVyLnJhbmdlLXJlcXVlc3RzID0gImRpc2FibGUiCit9CisKKyMjCisjIHdoaWNoIGV4dGVuc2lvbnMgc2hvdWxkIG5vdCBiZSBoYW5kbGUgdmlhIHN0YXRpYy1maWxlIHRyYW5zZmVyCisjCisjIC5waHAsIC5wbCwgLmZjZ2kgYXJlIG1vc3Qgb2Z0ZW4gaGFuZGxlZCBieSBtb2RfZmFzdGNnaSBvciBtb2RfY2dpCitzdGF0aWMtZmlsZS5leGNsdWRlLWV4dGVuc2lvbnMgPSAoICIucGhwIiwgIi5wbCIsICIuZmNnaSIgKQorCisjIyMjIyMjIyMgT3B0aW9ucyB0aGF0IGFyZSBnb29kIHRvIGJlIGJ1dCBub3QgbmVjY2VzYXJ5IHRvIGJlIGNoYW5nZWQgIyMjIyMjIworCisjIyBiaW5kIHRvIHBvcnQgKGRlZmF1bHQ6IDgwKQorI3NlcnZlci5wb3J0ICAgICAgICAgICAgICAgID0gODEKKworIyMgYmluZCB0byBsb2NhbGhvc3QgKGRlZmF1bHQ6IGFsbCBpbnRlcmZhY2VzKQorI3NlcnZlci5iaW5kICAgICAgICAgICAgICAgID0gImdyaXN1LmhvbWUua25lc2Noa2UuZGUiCisKKyMjIGVycm9yLWhhbmRsZXIgZm9yIHN0YXR1cyA0MDQKKyNzZXJ2ZXIuZXJyb3ItaGFuZGxlci00MDQgICA9ICIvZXJyb3ItaGFuZGxlci5odG1sIgorI3NlcnZlci5lcnJvci1oYW5kbGVyLTQwNCAgID0gIi9lcnJvci1oYW5kbGVyLnBocCIKKworIyMgdG8gaGVscCB0aGUgcmMuc2NyaXB0cworI3NlcnZlci5waWQtZmlsZSAgICAgICAgICAgID0gIi92YXIvcnVuL2xpZ2h0dHBkLnBpZCIKKworCisjIyMjIyMgdmlydHVhbCBob3N0cworIyMKKyMjICBJZiB5b3Ugd2FudCBuYW1lLWJhc2VkIHZpcnR1YWwgaG9zdGluZyBhZGQgdGhlIG5leHQgdGhyZWUgc2V0dGluZ3MgYW5kIGxvYWQKKyMjICBtb2Rfc2ltcGxlX3Zob3N0CisjIworIyMgZG9jdW1lbnQtcm9vdCA9CisjIyAgIHZpcnR1YWwtc2VydmVyLXJvb3QgKyB2aXJ0dWFsLXNlcnZlci1kZWZhdWx0LWhvc3QgKyB2aXJ0dWFsLXNlcnZlci1kb2Nyb290CisjIyBvcgorIyMgICB2aXJ0dWFsLXNlcnZlci1yb290ICsgaHR0cC1ob3N0ICsgdmlydHVhbC1zZXJ2ZXItZG9jcm9vdAorIyMKKyNzaW1wbGUtdmhvc3Quc2VydmVyLXJvb3QgICA9ICIvaG9tZS93ZWlnb24vd3d3cm9vdC9zZXJ2ZXJzLyIKKyNzaW1wbGUtdmhvc3QuZGVmYXVsdC1ob3N0ICA9ICJncmlzdS5ob21lLmtuZXNjaGtlLmRlIgorI3NpbXBsZS12aG9zdC5kb2N1bWVudC1yb290ID0gIi9wYWdlcy8iCisKKworIyMKKyMjIEZvcm1hdDogPGVycm9yZmlsZS1wcmVmaXg+PHN0YXR1cy1jb2RlPi5odG1sCisjIyAtPiAuLi4uL3N0YXR1cy00MDQuaHRtbCBmb3IgJ0ZpbGUgbm90IGZvdW5kJworI3NlcnZlci5lcnJvcmZpbGUtcHJlZml4ICAgID0gIi9ob21lL3dlaWdvbi9wcm9qZWN0cy9saWdodHRwZC9kb2Mvc3RhdHVzLSIKKworIyMgdmlydHVhbCBkaXJlY3RvcnkgbGlzdGluZ3MKKyNkaXItbGlzdGluZy5hY3RpdmF0ZSAgICAgICA9ICJlbmFibGUiCisKKyMjIGVuYWJsZSBkZWJ1Z2dpbmcKKyNkZWJ1Zy5sb2ctcmVxdWVzdC1oZWFkZXIgICA9ICJlbmFibGUiCisjZGVidWcubG9nLXJlc3BvbnNlLWhlYWRlciAgPSAiZW5hYmxlIgorI2RlYnVnLmxvZy1yZXF1ZXN0LWhhbmRsaW5nID0gImVuYWJsZSIKKyNkZWJ1Zy5sb2ctZmlsZS1ub3QtZm91bmQgICA9ICJlbmFibGUiCisKKyMjIyBvbmx5IHJvb3QgY2FuIHVzZSB0aGVzZSBvcHRpb25zCisjCisjIGNocm9vdCgpIHRvIGRpcmVjdG9yeSAoZGVmYXVsdDogbm8gY2hyb290KCkgKQorI3NlcnZlci5jaHJvb3QgICAgICAgICAgICAgID0gIi8iCisKKyMjIGNoYW5nZSB1aWQgdG8gPHVpZD4gKGRlZmF1bHQ6IGRvbid0IGNhcmUpCisjc2VydmVyLnVzZXJuYW1lICAgICAgICAgICAgPSAid3d3cnVuIgorCisjIyBjaGFuZ2UgdWlkIHRvIDx1aWQ+IChkZWZhdWx0OiBkb24ndCBjYXJlKQorI3NlcnZlci5ncm91cG5hbWUgICAgICAgICAgID0gInd3d3J1biIKKworIyMjIyBjb21wcmVzcyBtb2R1bGUKKyNjb21wcmVzcy5jYWNoZS1kaXIgICAgICAgICA9ICIvdG1wL2xpZ2h0dHBkL2NhY2hlL2NvbXByZXNzLyIKKyNjb21wcmVzcy5maWxldHlwZSAgICAgICAgICA9ICgidGV4dC9wbGFpbiIsICJ0ZXh0L2h0bWwiKQorCisjIyMjIHByb3h5IG1vZHVsZQorIyMgcmVhZCBwcm94eS50eHQgZm9yIG1vcmUgaW5mbworI3Byb3h5LnNlcnZlciAgICAgICAgICAgICAgID0gKCAiLnBocCIgPT4KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAibG9jYWxob3N0IiA9PgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJob3N0IiA9PiAiMTkyLjE2OC4wLjEwMSIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9ydCIgPT4gODAKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworIyMjIyBmYXN0Y2dpIG1vZHVsZQorIyMgcmVhZCBmYXN0Y2dpLnR4dCBmb3IgbW9yZSBpbmZvCisjIyBmb3IgUEhQIGRvbid0IGZvcmdldCB0byBzZXQgY2dpLmZpeF9wYXRoaW5mbyA9IDEgaW4gdGhlIHBocC5pbmkKKyNmYXN0Y2dpLnNlcnZlciAgICAgICAgICAgICA9ICggIi5waHAiID0+CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggImxvY2FsaG9zdCIgPT4KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic29ja2V0IiA9PiAiL3RtcC9waHAtZmFzdGNnaS5zb2NrZXQiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJpbi1wYXRoIiA9PiAiL3Vzci9sb2NhbC9iaW4vcGhwIgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyMjIyMgQ0dJIG1vZHVsZQorI2NnaS5hc3NpZ24gICAgICAgICAgICAgICAgID0gKCAiLnBsIiAgPT4gIi91c3IvYmluL3BlcmwiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLmNnaSIgPT4gIi91c3IvYmluL3BlcmwiICkKKyMKKworIyMjIyBTU0wgZW5naW5lCisjc3NsLmVuZ2luZSAgICAgICAgICAgICAgICAgPSAiZW5hYmxlIgorI3NzbC5wZW1maWxlICAgICAgICAgICAgICAgID0gInNlcnZlci5wZW0iCisKKyMjIyMgc3RhdHVzIG1vZHVsZQorI3N0YXR1cy5zdGF0dXMtdXJsICAgICAgICAgID0gIi9zZXJ2ZXItc3RhdHVzIgorI3N0YXR1cy5jb25maWctdXJsICAgICAgICAgID0gIi9zZXJ2ZXItY29uZmlnIgorCisjIyMjIGF1dGggbW9kdWxlCisjIyByZWFkIGF1dGhlbnRpY2F0aW9uLnR4dCBmb3IgbW9yZSBpbmZvCisjYXV0aC5iYWNrZW5kICAgICAgICAgICAgICAgPSAicGxhaW4iCisjYXV0aC5iYWNrZW5kLnBsYWluLnVzZXJmaWxlID0gImxpZ2h0dHBkLnVzZXIiCisjYXV0aC5iYWNrZW5kLnBsYWluLmdyb3VwZmlsZSA9ICJsaWdodHRwZC5ncm91cCIKKworI2F1dGguYmFja2VuZC5sZGFwLmhvc3RuYW1lID0gImxvY2FsaG9zdCIKKyNhdXRoLmJhY2tlbmQubGRhcC5iYXNlLWRuICA9ICJkYz1teS1kb21haW4sZGM9Y29tIgorI2F1dGguYmFja2VuZC5sZGFwLmZpbHRlciAgID0gIih1aWQ9JCkiCisKKyNhdXRoLnJlcXVpcmUgICAgICAgICAgICAgICA9ICggIi9zZXJ2ZXItc3RhdHVzIiA9PgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1ldGhvZCIgID0+ICJkaWdlc3QiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFsbSIgICA9PiAiZG93bmxvYWQgYXJjaGl2IiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVxdWlyZSIgPT4gInVzZXI9amFuIgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL3NlcnZlci1jb25maWciID0+CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWV0aG9kIiAgPT4gImRpZ2VzdCIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWxtIiAgID0+ICJkb3dubG9hZCBhcmNoaXYiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXF1aXJlIiA9PiAidmFsaWQtdXNlciIKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisjIyMjIHVybCBoYW5kbGluZyBtb2R1bGVzIChyZXdyaXRlLCByZWRpcmVjdCwgYWNjZXNzKQorI3VybC5yZXdyaXRlICAgICAgICAgICAgICAgID0gKCAiXi8kIiAgICAgICAgICAgICA9PiAiL3NlcnZlci1zdGF0dXMiICkKKyN1cmwucmVkaXJlY3QgICAgICAgICAgICAgICA9ICggIl4vd2lzaGxpc3QvKC4rKSIgPT4gImh0dHA6Ly93d3cuMTIzLm9yZy8kMSIgKQorCisjIyMjIGJvdGggcmV3cml0ZS9yZWRpcmVjdCBzdXBwb3J0IGJhY2sgcmVmZXJlbmNlIHRvIHJlZ2V4IGNvbmRpdGlvbmFsIHVzaW5nICVuCisjJEhUVFBbImhvc3QiXSA9fiAiXnd3d1wuKC4qKSIgeworIyAgdXJsLnJlZGlyZWN0ICAgICAgICAgICAgPSAoICJeLyguKikiID0+ICJodHRwOi8vJTEvJDEiICkKKyN9CisKKyMKKyMgZGVmaW5lIGEgcGF0dGVybiBmb3IgdGhlIGhvc3QgdXJsIGZpbmRpbmcKKyMgJSUgPT4gJSBzaWduCisjICUwID0+IGRvbWFpbiBuYW1lICsgdGxkCisjICUxID0+IHRsZAorIyAlMiA9PiBkb21haW4gbmFtZSB3aXRob3V0IHRsZAorIyAlMyA9PiBzdWJkb21haW4gMSBuYW1lCisjICU0ID0+IHN1YmRvbWFpbiAyIG5hbWUKKyMKKyNldmhvc3QucGF0aC1wYXR0ZXJuICAgICAgICA9ICIvaG9tZS9zdG9yYWdlL2Rldi93d3cvJTMvaHRkb2NzLyIKKworIyMjIyBleHBpcmUgbW9kdWxlCisjZXhwaXJlLnVybCAgICAgICAgICAgICAgICAgPSAoICIvYnVnZ3kvIiA9PiAiYWNjZXNzIDIgaG91cnMiLCAiL2FzZGhhcy8iID0+ICJhY2Nlc3MgcGx1cyAxIHNlY29uZHMgMiBtaW51dGVzIikKKworIyMjIyBzc2kKKyNzc2kuZXh0ZW5zaW9uICAgICAgICAgICAgICA9ICggIi5zaHRtbCIgKQorCisjIyMjIHJyZHRvb2wKKyNycmR0b29sLmJpbmFyeSAgICAgICAgICAgICA9ICIvdXNyL2Jpbi9ycmR0b29sIgorI3JyZHRvb2wuZGItbmFtZSAgICAgICAgICAgID0gIi92YXIvd3d3L2xpZ2h0dHBkLnJyZCIKKworIyMjIyBzZXRlbnYKKyNzZXRlbnYuYWRkLXJlcXVlc3QtaGVhZGVyICA9ICggIlRSQVZfRU5WIiA9PiAibXlzcWw6Ly91c2VyQGhvc3QvZGIiICkKKyNzZXRlbnYuYWRkLXJlc3BvbnNlLWhlYWRlciA9ICggIlgtU2VjcmV0LU1lc3NhZ2UiID0+ICI0MiIgKQorCisjIyBmb3IgbW9kX3RyaWdnZXJfYjRfZGwKKyMgdHJpZ2dlci1iZWZvcmUtZG93bmxvYWQuZ2RibS1maWxlbmFtZSA9ICIvaG9tZS93ZWlnb24vdGVzdGJhc2UvdHJpZ2dlci5kYiIKKyMgdHJpZ2dlci1iZWZvcmUtZG93bmxvYWQubWVtY2FjaGUtaG9zdHMgPSAoICIxMjcuMC4wLjE6MTEyMTEiICkKKyMgdHJpZ2dlci1iZWZvcmUtZG93bmxvYWQudHJpZ2dlci11cmwgPSAiXi90cmlnZ2VyLyIKKyMgdHJpZ2dlci1iZWZvcmUtZG93bmxvYWQuZG93bmxvYWQtdXJsID0gIl4vZG93bmxvYWQvIgorIyB0cmlnZ2VyLWJlZm9yZS1kb3dubG9hZC5kZW55LXVybCA9ICJodHRwOi8vMTI3LjAuMC4xL2luZGV4Lmh0bWwiCisjIHRyaWdnZXItYmVmb3JlLWRvd25sb2FkLnRyaWdnZXItdGltZW91dCA9IDEwCisKKyMjIGZvciBtb2RfY21sCisjIyBkb24ndCBmb3JnZXQgdG8gYWRkIGluZGV4LmNtbCB0byBzZXJ2ZXIuaW5kZXhmaWxlcworIyBjbWwuZXh0ZW5zaW9uICAgICAgICAgICAgICAgPSAiLmNtbCIKKyMgY21sLm1lbWNhY2hlLWhvc3RzICAgICAgICAgID0gKCAiMTI3LjAuMC4xOjExMjExIiApCisKKyMjIyMgdmFyaWFibGUgdXNhZ2U6CisjIyB2YXJpYWJsZSBuYW1lIHdpdGhvdXQgIi4iIGlzIGF1dG8gcHJlZml4ZWQgYnkgInZhci4iIGFuZCBiZWNvbWVzICJ2YXIuYmFyIgorI2JhciA9IDEKKyN2YXIubXlzdHJpbmcgPSAiZm9vIgorCisjIyBpbnRlZ2VyIGFkZAorI2JhciArPSAxCisjIyBzdHJpbmcgY29uY2F0LCB3aXRoIGludGVnZXIgY2FzdCBhcyBzdHJpbmcsIHJlc3VsdDogInd3dy5mb28xLmNvbSIKKyNzZXJ2ZXIubmFtZSA9ICJ3d3cuIiArIG15c3RyaW5nICsgdmFyLmJhciArICIuY29tIgorIyMgYXJyYXkgbWVyZ2UKKyNpbmRleC1maWxlLm5hbWVzID0gKGZvbyArICIucGhwIikgKyBpbmRleC1maWxlLm5hbWVzCisjaW5kZXgtZmlsZS5uYW1lcyArPSAoZm9vICsgIi5waHAiKQorCisjIyMjIGluY2x1ZGUKKyNpbmNsdWRlIC9ldGMvbGlnaHR0cGQvbGlnaHR0cGQtaW5jLmNvbmYKKyMjIHNhbWUgYXMgYWJvdmUgaWYgeW91IHJ1bjogImxpZ2h0dHBkIC1mIC9ldGMvbGlnaHR0cGQvbGlnaHR0cGQuY29uZiIKKyNpbmNsdWRlICJsaWdodHRwZC1pbmMuY29uZiIKKworIyMjIyBpbmNsdWRlX3NoZWxsCisjaW5jbHVkZV9zaGVsbCAiZWNobyB2YXIuYT0xIgorIyMgdGhlIGFib3ZlIGlzIHNhbWUgYXM6CisjdmFyLmE9MQorCisjIGluY2x1ZGUgb3RoZXIgY29uZmlnIGZpbGUgZnJhZ21lbnRzIGZyb20gbGlnaHR0cGQuZCBzdWJkaXIKK2luY2x1ZGVfc2hlbGwgImZpbmQgL2V0Yy9saWdodHRwZC5kIC1tYXhkZXB0aCAxIC1uYW1lICcqLmNvbmYnIC1leGVjIGNhdCB7fSBcOyIgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9saWdodHRwZC5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvbGlnaHR0cGQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmE5MDdhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvbGlnaHR0cGQuc2VydmljZQpAQCAtMCwwICsxLDEyIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPUxpZ2h0bmluZyBGYXN0IFdlYnNlcnZlciBXaXRoIExpZ2h0IFN5c3RlbSBSZXF1aXJlbWVudHMKK0FmdGVyPW5ldHdvcmsudGFyZ2V0CisKK1tTZXJ2aWNlXQorRXhlY1N0YXJ0UHJlPUBTQklORElSQC9saWdodHRwZCAtdCAtZiBAU1lTQ09ORkRJUkAvbGlnaHR0cGQuY29uZgorRXhlY1N0YXJ0PUBTQklORElSQC9saWdodHRwZCAtRCAtZiBAU1lTQ09ORkRJUkAvbGlnaHR0cGQuY29uZgorRXhlY1JlbG9hZD1AQkFTRV9CSU5ESVJAL2tpbGwgLUhVUCAkTUFJTlBJRAorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkL3BrZ2NvbmZpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkL3BrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzk1ZjkyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1VzZSBwa2ctY29uZmlnIGZvciBwY3JlIGRlcGVuZGVuY3kgaW5zdGVhZCBvZiAtY29uZmlnIHNjcmlwdC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JQIDIwMTQvNS8yMgorCisKK0luZGV4OiBsaWdodHRwZC0xLjQuMzUvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlnaHR0cGQtMS40LjM1Lm9yaWcvY29uZmlndXJlLmFjCTIwMTQtMDMtMDYgMTQ6MDg6MDAuMDAwMDAwMDAwICswMDAwCisrKysgbGlnaHR0cGQtMS40LjM1L2NvbmZpZ3VyZS5hYwkyMDE0LTA1LTEzIDE2OjU4OjMwLjc1ODQ3MTE2OSArMDAwMAorQEAgLTMwOSwxNiArMzA5LDE0IEBACisgQUNfTVNHX1JFU1VMVChbJFdJVEhfUENSRV0pCisgCisgaWYgdGVzdCAiJFdJVEhfUENSRSIgIT0gIm5vIjsgdGhlbgorLSAgQUNfUEFUSF9QUk9HKFBDUkVDT05GSUcsIHBjcmUtY29uZmlnKQorLQorLSAgaWYgdGVzdCB4IiRQQ1JFQ09ORklHIiAhPSB4OyB0aGVuCistICAgIFBDUkVfTElCPWAkUENSRUNPTkZJRyAtLWxpYnNgCistICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgYCRQQ1JFQ09ORklHIC0tY2ZsYWdzYCIKKysgIFBLR19DSEVDS19NT0RVTEVTKFBDUkVQS0csIFtsaWJwY3JlXSwgWworKyAgICBQQ1JFX0xJQj0ke1BDUkVQS0dfTElCU30KKysgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAke1BDUkVQS0dfQ0ZMQUdTfSIKKyAgICAgQUNfREVGSU5FKFtIQVZFX0xJQlBDUkVdLCBbMV0sIFtsaWJwY3JlXSkKKyAgICAgQUNfREVGSU5FKFtIQVZFX1BDUkVfSF0sIFsxXSwgW3BjcmUuaF0pCistICBlbHNlCisrICBdLCBbCisgICAgICBBQ19NU0dfRVJST1IoW3BjcmUtY29uZmlnIG5vdCBmb3VuZCwgaW5zdGFsbCB0aGUgcGNyZS1kZXZlbCBwYWNrYWdlIG9yIGJ1aWxkIHdpdGggLS13aXRob3V0LXBjcmVdKQorLSAgZmkKKysgIF0pCisgZmkKKyAKKyBBQ19TVUJTVChQQ1JFX0xJQikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkXzEuNC4zNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkXzEuNC4zNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2I2ZTM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGRfMS40LjM2LmJiCkBAIC0wLDAgKzEsNzcgQEAKK1NVTU1BUlkgPSAiTGlnaHR3ZWlnaHQgaGlnaC1wZXJmb3JtYW5jZSB3ZWIgc2VydmVyIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5saWdodHRwZC5uZXQvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vcmVkbWluZS5saWdodHRwZC5uZXQvcHJvamVjdHMvbGlnaHR0cGQvaXNzdWVzIgorCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWU0ZGFjNWM2YWIxNjlhYTIxMmZlYjUwMjg4NTNhNTc5IgorCitTRUNUSU9OID0gIm5ldCIKK0RFUEVORFMgPSAiemxpYiBsaWJwY3JlIgorUkRFUEVORFNfJHtQTn0gKz0gIiBcCisgICAgICAgICAgICAgICBsaWdodHRwZC1tb2R1bGUtYWNjZXNzIFwKKyAgICAgICAgICAgICAgIGxpZ2h0dHBkLW1vZHVsZS1hY2Nlc3Nsb2cgXAorICAgICAgICAgICAgICAgbGlnaHR0cGQtbW9kdWxlLWluZGV4ZmlsZSBcCisgICAgICAgICAgICAgICBsaWdodHRwZC1tb2R1bGUtZGlybGlzdGluZyBcCisgICAgICAgICAgICAgICBsaWdodHRwZC1tb2R1bGUtc3RhdGljZmlsZSBcCisiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLmxpZ2h0dHBkLm5ldC9saWdodHRwZC9yZWxlYXNlcy0xLjQueC9saWdodHRwZC0ke1BWfS50YXIueHogXAorICAgICAgICBmaWxlOi8vaW5kZXguaHRtbC5saWdodHRwZCBcCisgICAgICAgIGZpbGU6Ly9saWdodHRwZC5jb25mIFwKKyAgICAgICAgZmlsZTovL2xpZ2h0dHBkIFwKKyAgICAgICAgZmlsZTovL2xpZ2h0dHBkLnNlcnZpY2UgXAorICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDEtbW9kX2NnaS1idWZmZXJzLWRhdGEtd2l0aG91dC1ib3VuZC5wYXRjaCBcCisgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjE4NDNkYWZmY2IwMThhYTUyOGY2ZDE1ZDQzNTQ0NjU0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg5N2FiNmIxY2M3YmQ1MTY3MWY4YWY3NTllNzg0NjI0NWZiYmNhMDY4NWMzMDAxN2U5M2E1ODgyYTlhYzFhNTMiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJvcGVuc3NsIgorUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICItLXdpdGgtb3BlbnNzbCwgLS13aXRob3V0LW9wZW5zc2wsIG9wZW5zc2wiCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgICAgICAgICAgIC0td2l0aG91dC1iemlwMiBcCisgICAgICAgICAgICAgLS13aXRob3V0LWxkYXAgXAorICAgICAgICAgICAgIC0td2l0aG91dC1sdWEgXAorICAgICAgICAgICAgIC0td2l0aG91dC1tZW1jYWNoZSBcCisgICAgICAgICAgICAgLS13aXRoLXBjcmUgXAorICAgICAgICAgICAgIC0td2l0aG91dC13ZWJkYXYtcHJvcHMgXAorICAgICAgICAgICAgIC0td2l0aG91dC13ZWJkYXYtbG9ja3MgXAorICAgICAgICAgICAgIC0tZGlzYWJsZS1zdGF0aWMgXAorIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXBkYXRlLXJjLmQgZ2V0dGV4dCBzeXN0ZW1kCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJsaWdodHRwZCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIDcwIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAibGlnaHR0cGQuc2VydmljZSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQgJHtEfSR7c3lzY29uZmRpcn0vbGlnaHR0cGQuZCAke0R9L3d3dy9wYWdlcy9kYXYKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9saWdodHRwZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9saWdodHRwZC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9CisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vaW5kZXguaHRtbC5saWdodHRwZCAke0R9L3d3dy9wYWdlcy9pbmRleC5odG1sCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbGlnaHR0cGQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCXNlZCAtaSAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyBcCisJCS1lICdzLEBTWVNDT05GRElSQCwke3N5c2NvbmZkaXJ9LGcnIFwKKwkJLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCisJCSR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2xpZ2h0dHBkLnNlcnZpY2UKKwkjRm9yIEZIUyBjb21wbGlhbmNlLCBjcmVhdGUgc3ltYm9saWMgbGlua3MgdG8gL3Zhci9sb2cgYW5kIC92YXIvdG1wIGZvciBsb2dzIGFuZCB0ZW1wb3JhcnkgZGF0YQorCWxuIC1zZiAke2xvY2Fsc3RhdGVkaXJ9L2xvZyAke0R9L3d3dy9sb2dzCisJbG4gLXNmICR7bG9jYWxzdGF0ZWRpcn0vdG1wICR7RH0vd3d3L3ZhcgorfQorCitGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfSAvd3d3IgorCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9saWdodHRwZC5jb25mIgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJebGlnaHR0cGQtbW9kdWxlLS4qIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgbGlnaHR0cGRfbGliZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfScpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgbGlnaHR0cGRfbGliZGlyLCAnXm1vZF8oLiopXC5zbyQnLCAnbGlnaHR0cGQtbW9kdWxlLSVzJywgJ0xpZ2h0dHBkIG1vZHVsZSBmb3IgJXMnLCBleHRyYV9kZXBlbmRzPScnKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS9hY3QtYXMtbXYtd2hlbi1yb3RhdGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sb2dyb3RhdGUvbG9ncm90YXRlL2FjdC1hcy1tdi13aGVuLXJvdGF0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTkzMWEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS9hY3QtYXMtbXYtd2hlbi1yb3RhdGUucGF0Y2gKQEAgLTAsMCArMSwxNDcgQEAKK0Zyb20gNjhmMjlhYjQ5MGNmOTg3YWEzNGI1ZjRjYWYxNzg0YjU4YTAyMTMwOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAxNyBGZWIgMjAxNSAyMTowODowNyAtMDgwMAorU3ViamVjdDogW1BBVENIXSBBY3QgYXMgdGhlICJtdiIgY29tbWFuZCB3aGVuIHJvdGF0ZSBsb2cKKworQWN0IGFzIHRoZSAibXYiIGNvbW1hbmQgd2hlbiByb3RhdGUgbG9nLCBmaXJzdCByZW5hbWUsIGlmIGZhaWxlZCwgdGhlbgorcmVhZCBhbmQgd3JpdGUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxvZ3JvdGF0ZS5jIHwgICA3MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1OSBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xvZ3JvdGF0ZS5jIGIvbG9ncm90YXRlLmMKK2luZGV4IGQzZGViNmEuLmNmOGJmMmMgMTAwNjQ0CistLS0gYS9sb2dyb3RhdGUuYworKysrIGIvbG9ncm90YXRlLmMKK0BAIC0xMTU3LDYgKzExNTcsNTMgQEAgaW50IGZpbmROZWVkUm90YXRpbmcoc3RydWN0IGxvZ0luZm8gKmxvZywgaW50IGxvZ051bSwgaW50IGZvcmNlKQorICAgICByZXR1cm4gMDsKKyB9CisgCisrLyogQWN0IGFzIHRoZSAibXYiIGNvbW1hbmQsIGlmIHJlbmFtZSBmYWlsZWQsIHRoZW4gcmVhZCB0aGUgb2xkIGZpbGUgYW5kCisrICogd3JpdGUgdG8gbmV3IGZpbGUuIFRoZSBmdW5jdGlvbiB3aGljaCBpbnZva2VzIHRoZSBtdkZpbGUgd2lsbCB1c2UKKysgKiB0aGUgc3RyZXJyb3IoZXJyb3JubykgdG8gaGFuZGxlIHRoZSBlcnJvciBtZXNzYWdlLCBzbyB3ZSBkb24ndCBoYXZlCisrICogdG8gcHJpbnQgdGhlIGVycm9yIG1lc3NhZ2UgaGVyZSAqLworKworK2ludCBtdkZpbGUgKGNoYXIgKm9sZE5hbWUsIGNoYXIgKm5ld05hbWUsIHN0cnVjdCBsb2dJbmZvICpsb2csIGFjbF90eXBlIGFjbCkKKyt7CisrICAgIHN0cnVjdCBzdGF0IHNicHJldjsKKysgICAgaW50IGZkX29sZCwgZmRfbmV3LCBuOworKyAgICBjaGFyIGJ1ZltCVUZTSVpdOworKworKyAgICAvKiBEbyB0aGUgcmVuYW1lIGZpcnN0ICovCisrICAgIGlmICghcmVuYW1lKG9sZE5hbWUsIG5ld05hbWUpKQorKyAgICAgICAgcmV0dXJuIDA7CisrCisrICAgIC8qIElmIHRoZSBlcnJubyBpcyBFWERFViwgdGhlbiByZWFkIG9sZCBmaWxlLCB3cml0ZSBuZXdmaWxlIGFuZAorKyAgICAgKiByZW1vdmUgdGhlIG9sZGZpbGUgKi8KKysgICAgaWYgKGVycm5vID09IEVYREVWKSB7CisrICAgICAgICAvKiBPcGVuIHRoZSBvbGQgZmlsZSB0byByZWFkICovCisrICAgICAgICBpZiAoKGZkX29sZCA9IG9wZW4ob2xkTmFtZSwgT19SRE9OTFkpKSA8IDApCisrICAgICAgICAgICAgcmV0dXJuIDE7CisrCisrICAgICAgICAvKiBDcmVhdGUgdGhlIGZpbGUgdG8gd3JpdGUsIGtlZXAgdGhlIHNhbWUgYXR0cmlidXRlIGFzIHRoZSBvbGQgZmlsZSAqLworKyAgICAgICAgaWYgKHN0YXQob2xkTmFtZSwgJnNicHJldikpCisrICAgICAgICAgICAgcmV0dXJuIDE7CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBpZiAoKGZkX25ldyA9IGNyZWF0ZU91dHB1dEZpbGUobmV3TmFtZSwKKysgICAgICAgICAgICAgICAgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgJnNicHJldiwgYWNsLCAwKSkgPCAwICkKKysgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisrICAgICAgICB9CisrCisrICAgICAgICAvKiBSZWFkIGFuZCB3cml0ZSAqLworKyAgICAgICAgd2hpbGUgKChuID0gcmVhZChmZF9vbGQsIGJ1ZiwgQlVGU0laKSkgPiAwKQorKyAgICAgICAgICAgIGlmICh3cml0ZShmZF9uZXcsIGJ1ZiwgbikgIT0gbikKKysgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisrCisrICAgICAgICBpZiAoKGNsb3NlKGZkX29sZCkgPCAwKSB8fAorKyAgICAgICAgICAgIHJlbW92ZUxvZ0ZpbGUob2xkTmFtZSwgbG9nKSB8fAorKyAgICAgICAgICAgIChjbG9zZShmZF9uZXcpIDwgMCkpCisrICAgICAgICAgICAgcmV0dXJuIDE7CisrCisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgICByZXR1cm4gMTsKKyt9CisrCisgaW50IHByZXJvdGF0ZVNpbmdsZUxvZyhzdHJ1Y3QgbG9nSW5mbyAqbG9nLCBpbnQgbG9nTnVtLCBzdHJ1Y3QgbG9nU3RhdGUgKnN0YXRlLAorIAkJICAgICAgIHN0cnVjdCBsb2dOYW1lcyAqcm90TmFtZXMpCisgeworQEAgLTE1MjMsMTUgKzE1NzAsMTUgQEAgaW50IHByZXJvdGF0ZVNpbmdsZUxvZyhzdHJ1Y3QgbG9nSW5mbyAqbG9nLCBpbnQgbG9nTnVtLCBzdHJ1Y3QgbG9nU3RhdGUgKnN0YXRlLAorIAkJfQorIAorIAkgICAgbWVzc2FnZShNRVNTX0RFQlVHLAorLQkJICAgICJyZW5hbWluZyAlcyB0byAlcyAocm90YXRlY291bnQgJWQsIGxvZ3N0YXJ0ICVkLCBpICVkKSwgXG4iLAorKwkJICAgICJtb3ZpbmcgJXMgdG8gJXMgKHJvdGF0ZWNvdW50ICVkLCBsb2dzdGFydCAlZCwgaSAlZCksIFxuIiwKKyAJCSAgICBvbGROYW1lLCBuZXdOYW1lLCByb3RhdGVDb3VudCwgbG9nU3RhcnQsIGkpOworIAorLQkgICAgaWYgKCFkZWJ1ZyAmJiByZW5hbWUob2xkTmFtZSwgbmV3TmFtZSkpIHsKKysJICAgIGlmICghZGVidWcgJiYgbXZGaWxlKG9sZE5hbWUsIG5ld05hbWUsIGxvZywgcHJldl9hY2wpKSB7CisgCQlpZiAoZXJybm8gPT0gRU5PRU5UKSB7CisgCQkgICAgbWVzc2FnZShNRVNTX0RFQlVHLCAib2xkIGxvZyAlcyBkb2VzIG5vdCBleGlzdFxuIiwKKyAJCQkgICAgb2xkTmFtZSk7CisgCQl9IGVsc2UgeworLQkJICAgIG1lc3NhZ2UoTUVTU19FUlJPUiwgImVycm9yIHJlbmFtaW5nICVzIHRvICVzOiAlc1xuIiwKKysJCSAgICBtZXNzYWdlKE1FU1NfRVJST1IsICJlcnJvciBtb3ZpbmcgJXMgdG8gJXM6ICVzXG4iLAorIAkJCSAgICBvbGROYW1lLCBuZXdOYW1lLCBzdHJlcnJvcihlcnJubykpOworIAkJICAgIGhhc0Vycm9ycyA9IDE7CisgCQl9CitAQCAtMTY2OSwyMSArMTcxNiwyMSBAQCBpbnQgcm90YXRlU2luZ2xlTG9nKHN0cnVjdCBsb2dJbmZvICpsb2csIGludCBsb2dOdW0sIHN0cnVjdCBsb2dTdGF0ZSAqc3RhdGUsCisgCQkJCXJldHVybiAxOworIAkJCX0KKyAKKy0JCQltZXNzYWdlKE1FU1NfREVCVUcsICJyZW5hbWluZyAlcyB0byAlc1xuIiwgbG9nLT5maWxlc1tsb2dOdW1dLAorKwkJCW1lc3NhZ2UoTUVTU19ERUJVRywgIm1vdmluZyAlcyB0byAlc1xuIiwgbG9nLT5maWxlc1tsb2dOdW1dLAorIAkJCQl0bXBGaWxlbmFtZSk7CistCQkJaWYgKCFkZWJ1ZyAmJiAhaGFzRXJyb3JzICYmIHJlbmFtZShsb2ctPmZpbGVzW2xvZ051bV0sIHRtcEZpbGVuYW1lKSkgeworLQkJCW1lc3NhZ2UoTUVTU19FUlJPUiwgImZhaWxlZCB0byByZW5hbWUgJXMgdG8gJXM6ICVzXG4iLAorKwkJCWlmICghZGVidWcgJiYgIWhhc0Vycm9ycyAmJiBtdkZpbGUobG9nLT5maWxlc1tsb2dOdW1dLCByb3ROYW1lcy0+ZmluYWxOYW1lLCBsb2csIHByZXZfYWNsKSkgeworKwkJCW1lc3NhZ2UoTUVTU19FUlJPUiwgImZhaWxlZCB0byBtb3ZlICVzIHRvICVzOiAlc1xuIiwKKyAJCQkJbG9nLT5maWxlc1tsb2dOdW1dLCB0bXBGaWxlbmFtZSwKKyAJCQkJc3RyZXJyb3IoZXJybm8pKTsKKyAJCQkJaGFzRXJyb3JzID0gMTsKKyAJCQl9CisgCQl9CisgCQllbHNlIHsKKy0JCQltZXNzYWdlKE1FU1NfREVCVUcsICJyZW5hbWluZyAlcyB0byAlc1xuIiwgbG9nLT5maWxlc1tsb2dOdW1dLAorKwkJCW1lc3NhZ2UoTUVTU19ERUJVRywgIm1vdmluZyAlcyB0byAlc1xuIiwgbG9nLT5maWxlc1tsb2dOdW1dLAorIAkJCQlyb3ROYW1lcy0+ZmluYWxOYW1lKTsKKyAJCQlpZiAoIWRlYnVnICYmICFoYXNFcnJvcnMgJiYKKy0JCQlyZW5hbWUobG9nLT5maWxlc1tsb2dOdW1dLCByb3ROYW1lcy0+ZmluYWxOYW1lKSkgeworLQkJCQltZXNzYWdlKE1FU1NfRVJST1IsICJmYWlsZWQgdG8gcmVuYW1lICVzIHRvICVzOiAlc1xuIiwKKysJCQltdkZpbGUobG9nLT5maWxlc1tsb2dOdW1dLCByb3ROYW1lcy0+ZmluYWxOYW1lLCBsb2csIHByZXZfYWNsKSkgeworKwkJCQltZXNzYWdlKE1FU1NfRVJST1IsICJmYWlsZWQgdG8gbW92ZSAlcyB0byAlczogJXNcbiIsCisgCQkJCQlsb2ctPmZpbGVzW2xvZ051bV0sIHRtcEZpbGVuYW1lLAorIAkJCQkJc3RyZXJyb3IoZXJybm8pKTsKKyAJCQkJCWhhc0Vycm9ycyA9IDE7CitAQCAtMjA2Myw3ICsyMTEwLDcgQEAgaW50IHJvdGF0ZUxvZ1NldChzdHJ1Y3QgbG9nSW5mbyAqbG9nLCBpbnQgZm9yY2UpCisgICAgIHJldHVybiBoYXNFcnJvcnM7CisgfQorIAorLXN0YXRpYyBpbnQgd3JpdGVTdGF0ZShjaGFyICpzdGF0ZUZpbGVuYW1lKQorK3N0YXRpYyBpbnQgd3JpdGVTdGF0ZShzdHJ1Y3QgbG9nSW5mbyAqbG9nLCBjaGFyICpzdGF0ZUZpbGVuYW1lKQorIHsKKyAJc3RydWN0IGxvZ1N0YXRlICpwOworIAlGSUxFICpmOworQEAgLTIyMjcsNyArMjI3NCw3IEBAIHN0YXRpYyBpbnQgd3JpdGVTdGF0ZShjaGFyICpzdGF0ZUZpbGVuYW1lKQorIAkJZmNsb3NlKGYpOworIAorIAlpZiAoZXJyb3IgPT0gMCkgeworLQkJaWYgKHJlbmFtZSh0bXBGaWxlbmFtZSwgc3RhdGVGaWxlbmFtZSkpIHsKKysJCWlmIChtdkZpbGUodG1wRmlsZW5hbWUsIHN0YXRlRmlsZW5hbWUsIGxvZywgcHJldl9hY2wpKSB7CisgCQkJdW5saW5rKHRtcEZpbGVuYW1lKTsKKyAJCQllcnJvciA9IDE7CisgCQkJbWVzc2FnZShNRVNTX0VSUk9SLCAiZXJyb3IgcmVuYW1pbmcgdGVtcCBzdGF0ZSBmaWxlICVzXG4iLAorQEAgLTI1MjUsNyArMjU3Miw3IEBAIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKKyAJCXJjIHw9IHJvdGF0ZUxvZ1NldChsb2csIGZvcmNlKTsKKyAKKyAJaWYgKCFkZWJ1ZykKKy0JCXJjIHw9IHdyaXRlU3RhdGUoc3RhdGVGaWxlKTsKKysJCXJjIHw9IHdyaXRlU3RhdGUobG9nLCBzdGF0ZUZpbGUpOworIAorIAlyZXR1cm4gKHJjICE9IDApOworIH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGUvZGlzYWJsZS1jaGVjay1kaWZmZXJlbnQtZmlsZXN5c3RlbXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sb2dyb3RhdGUvbG9ncm90YXRlL2Rpc2FibGUtY2hlY2stZGlmZmVyZW50LWZpbGVzeXN0ZW1zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5M2Q3MDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sb2dyb3RhdGUvbG9ncm90YXRlL2Rpc2FibGUtY2hlY2stZGlmZmVyZW50LWZpbGVzeXN0ZW1zLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Rpc2FibGUgdGhlIGNoZWNrIGZvciBkaWZmZXJlbnQgZmlsZXN5c3RlbXMKKworVGhlIGxvZ3JvdGF0ZSBzdXBwb3J0cyByb3RhdGUgbG9nIGFjcm9zcyBkaWZmZXJlbnQgZmlsZXN5c3RlbXMgbm93LCBzbworZGlzYWJsZSB0aGUgY2hlY2sgZm9yIGRpZmZlcmVudCBmaWxlc3lzdGVtcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlnLmMgfCAgICA5IC0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlnLmMgYi9jb25maWcuYworaW5kZXggZGJiZjU2My4uNjRlNjZmNiAxMDA2NDQKKy0tLSBhL2NvbmZpZy5jCisrKysgYi9jb25maWcuYworQEAgLTE0OTMsMTUgKzE0OTMsNiBAQCBzdGF0aWMgaW50IHJlYWRDb25maWdGaWxlKGNvbnN0IGNoYXIgKmNvbmZpZ0ZpbGUsIHN0cnVjdCBsb2dJbmZvICpkZWZDb25maWcpCisgCQkJCQkJCWdvdG8gZXJyb3I7CisgCQkJCQkJfQorIAkJCQkJfQorLQorLQkJCQkJaWYgKHNiLnN0X2RldiAhPSBzYjIuc3RfZGV2CistCQkJCQkJJiYgIShuZXdsb2ctPmZsYWdzICYgKExPR19GTEFHX0NPUFlUUlVOQ0FURSB8IExPR19GTEFHX0NPUFkgfCBMT0dfRkxBR19UTVBGSUxFTkFNRSkpKSB7CistCQkJCQkJbWVzc2FnZShNRVNTX0VSUk9SLAorLQkJCQkJCQkiJXM6JWQgb2xkZGlyICVzIGFuZCBsb2cgZmlsZSAlcyAiCistCQkJCQkJCSJhcmUgb24gZGlmZmVyZW50IGRldmljZXNcbiIsIGNvbmZpZ0ZpbGUsCistCQkJCQkJCWxpbmVOdW0sIG5ld2xvZy0+b2xkRGlyLCBuZXdsb2ctPmZpbGVzW2ldKTsKKy0JCQkJCQlnb3RvIGVycm9yOworLQkJCQkJfQorIAkJCQl9CisgCQkJfQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS91cGRhdGUtdGhlLW1hbnVhbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGUvdXBkYXRlLXRoZS1tYW51YWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBkMDM3ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGUvdXBkYXRlLXRoZS1tYW51YWwucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSBlMGIwZmUzMGU5YzQ5MjM0OTk0YTIwYTg2YWFjZmFmODBlNjkwMDg3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDE3IEZlYiAyMDE1IDIxOjE0OjM3IC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIFVwZGF0ZSB0aGUgbWFudWFsCisKK1VwZGF0ZSB0aGUgbWFudWFsIGZvciByb3RhdGluZyBvbiBkaWZmZXJlbnQgZmlsZXN5c3RlbXMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxvZ3JvdGF0ZS44IHwgICAxMCArKysrLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xvZ3JvdGF0ZS44IGIvbG9ncm90YXRlLjgKK2luZGV4IGU0ZTVmNDguLjg0NDA3ZDAgMTAwNjQ0CistLS0gYS9sb2dyb3RhdGUuOAorKysrIGIvbG9ncm90YXRlLjgKK0BAIC00MDUsMTIgKzQwNSwxMCBAQCBEbyBub3Qgcm90YXRlIHRoZSBsb2cgaWYgaXQgaXMgZW1wdHkgKHRoaXMgb3ZlcnJpZGVzIHRoZSBcZkJpZmVtcHR5XGZSIG9wdGlvbikuCisgCisgLlRQCisgXGZCb2xkZGlyIFxmSWRpcmVjdG9yeVxmUgorLUxvZ3MgYXJlIG1vdmVkIGludG8gXGZJZGlyZWN0b3J5XGZSIGZvciByb3RhdGlvbi4gVGhlIFxmSWRpcmVjdG9yeVxmUiBtdXN0IGJlCistb24gdGhlIHNhbWUgcGh5c2ljYWwgZGV2aWNlIGFzIHRoZSBsb2cgZmlsZSBiZWluZyByb3RhdGVkLCB1bmxlc3MgXGZCY29weVxmUiwKKy1cZkJjb3B5dHJ1bmNhdGVcZlIgb3IgXGZCcmVuYW1lY29weVxmUiBvcHRpb24gaXMgdXNlZC4gVGhlIFxmSWRpcmVjdG9yeVxmUgorLWlzIGFzc3VtZWQgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBob2xkaW5nIHRoZSBsb2cgZmlsZQorLXVubGVzcyBhbiBhYnNvbHV0ZSBwYXRoIG5hbWUgaXMgc3BlY2lmaWVkLiBXaGVuIHRoaXMgb3B0aW9uIGlzIHVzZWQgYWxsCistb2xkIHZlcnNpb25zIG9mIHRoZSBsb2cgZW5kIHVwIGluIFxmSWRpcmVjdG9yeVxmUi4gIFRoaXMgb3B0aW9uIG1heSBiZQorK0xvZ3MgYXJlIG1vdmVkIGludG8gXGZJZGlyZWN0b3J5XGZSIGZvciByb3RhdGlvbi4gVGhlIFxmSWRpcmVjdG9yeVxmUgorK2lzIGFzc3VtZWQgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBob2xkaW5nIHRoZSBsb2cgZmlsZSB1bmxlc3MKKythbiBhYnNvbHV0ZSBwYXRoIG5hbWUgaXMgc3BlY2lmaWVkLiBXaGVuIHRoaXMgb3B0aW9uIGlzIHVzZWQgYWxsIG9sZAorK3ZlcnNpb25zIG9mIHRoZSBsb2cgZW5kIHVwIGluIFxmSWRpcmVjdG9yeVxmUi4gVGhpcyBvcHRpb24gbWF5IGJlCisgb3ZlcnJpZGRlbiBieSB0aGUgXGZCbm9vbGRkaXJcZlIgb3B0aW9uLgorIAorIC5UUAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGVfMy45LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sb2dyb3RhdGUvbG9ncm90YXRlXzMuOS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMGExNTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sb2dyb3RhdGUvbG9ncm90YXRlXzMuOS4xLmJiCkBAIC0wLDAgKzEsNjMgQEAKK1NVTU1BUlkgPSAiUm90YXRlcywgY29tcHJlc3NlcywgcmVtb3ZlcyBhbmQgbWFpbHMgc3lzdGVtIGxvZyBmaWxlcyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0hPTUVQQUdFID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9sb2dyb3RhdGUvIgorTElDRU5TRSA9ICJHUEx2MiIKKworIyBUT0RPOiBsb2dyb3RhdGUgMy44LjggYWRkcyBhdXRvdG9vbHMvYXV0b21ha2Ugc3VwcG9ydCwgdXBkYXRlIHJlY2lwZSB0byB1c2UgaXQuCisjIFRPRE86IERvY3VtZW50IGNvcmV1dGlscyBkZXBlbmRlbmN5LiBXaHkgbm90IFJERVBFTkRTPyBXaHkgbm90IGJ1c3lib3g/CisKK0RFUEVORFM9ImNvcmV1dGlscyBwb3B0IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xODgxMDY2OWYxM2I4NzM0ODQ1OWU2MTFkMzFhYjc2MCIKKworU1JDX1VSSSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMvbC9vL2xvZ3JvdGF0ZS9sb2dyb3RhdGUtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2FjdC1hcy1tdi13aGVuLXJvdGF0ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91cGRhdGUtdGhlLW1hbnVhbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLWNoZWNrLWRpZmZlcmVudC1maWxlc3lzdGVtcy5wYXRjaCBcCisgICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0NDkyYjE0NWI2ZDU0MmU0YTJmNDFlNzdmYTE5OWFiMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwMjI3NjllMzI4OGM4MDk4MTU1OWE4NDIxNzAzYzg4ZTg0MzhiNDQ3MjM1ZTM2ZGQzYzhlOTdjZDk0YzUyNTQ1IgorCitQQUNLQUdFQ09ORklHID89ICJcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdhY2wnLCAnYWNsJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzZWxpbnV4JywgJ3NlbGludXgnLCAnJywgZCl9IFwKKyIKKworUEFDS0FHRUNPTkZJR1thY2xdID0gIiwsYWNsIgorUEFDS0FHRUNPTkZJR1tzZWxpbnV4XSA9ICIsLGxpYnNlbGludXgiCisKK0NPTkZGSUxFU18ke1BOfSArPSAiJHtsb2NhbHN0YXRlZGlyfS9saWIvbG9ncm90YXRlLnN0YXR1cyBcCisJCSAgICAke3N5c2NvbmZkaXJ9L2xvZ3JvdGF0ZS5jb25mIgorCisjIElmIFJQTV9PUFRfRkxBR1MgaXMgdW5zZXQsIGl0IGFkZHMgLWcgaXRzZWxmIHJhdGhlciB0aGFuIG9iZXlpbmcgb3VyCisjIG9wdGltaXphdGlvbiB2YXJpYWJsZXMsIHNvIHVzZSBpdCByYXRoZXIgdGhhbiBFWFRSQV9DRkxBR1MuCitFWFRSQV9PRU1BS0UgPSAiXAorICAgIExGUz0gXAorICAgIE9TX05BTUU9JyR7T1NfTkFNRX0nIFwKKyAgICAnQ0M9JHtDQ30nIFwKKyAgICAnUlBNX09QVF9GTEFHUz0ke0NGTEFHU30nIFwKKyAgICAnRVhUUkFfTERGTEFHUz0ke0xERkxBR1N9JyBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnYWNsJywgJ1dJVEhfQUNMPXllcycsICcnLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3NlbGludXgnLCAnV0lUSF9TRUxJTlVYPXllcycsICcnLCBkKX0gXAorIgorCisjIE9TX05BTUUgaW4gdGhlIG1ha2VmaWxlIGRlZmF1bHRzIHRvIGB1bmFtZSAtc2AuIFRoZSBiZWhhdmlvciBmb3IKKyMgZnJlZWJzZC9uZXRic2QgaXMgcXVlc3Rpb25hYmxlLCBzbyBsZWF2ZSBpdCBhcyBMaW51eCwgd2hpY2ggb25seSBzZXRzCisjIElOU1RBTEw9aW5zdGFsbCBhbmQgQkFTRURJUj0vdXNyLgorT1NfTkFNRSA9ICJMaW51eCIKKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgICMgTWFrZSBzdXJlIHRoZSByZWNvbXBpbGUgaXMgT0sKKyAgICBybSAtZiAke0J9Ly5kZXBlbmQKK30KKworZG9faW5zdGFsbCgpeworICAgIG9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0gUFJFRklYPSR7RH0gTUFORElSPSR7bWFuZGlyfSBCSU5ESVI9JHtiaW5kaXJ9CisgICAgbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vbG9ncm90YXRlLmQKKyAgICBta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9jcm9uLmRhaWx5CisgICAgbWtkaXIgLXAgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliCisgICAgaW5zdGFsbCAtcCAtbSA2NDQgZXhhbXBsZXMvbG9ncm90YXRlLWRlZmF1bHQgJHtEfSR7c3lzY29uZmRpcn0vbG9ncm90YXRlLmNvbmYKKyAgICBpbnN0YWxsIC1wIC1tIDc1NSBleGFtcGxlcy9sb2dyb3RhdGUuY3JvbiAke0R9JHtzeXNjb25mZGlyfS9jcm9uLmRhaWx5L2xvZ3JvdGF0ZQorICAgIHRvdWNoICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9sb2dyb3RhdGUuc3RhdHVzCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2luaXQtZnVuY3Rpb25zIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9pbml0LWZ1bmN0aW9ucwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43YzFkY2UyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9pbml0LWZ1bmN0aW9ucwpAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vc2gKKworIyBMU0IgaW5pdHNjcmlwdCBmdW5jdGlvbnMsIGFzIGRlZmluZWQgaW4gdGhlIExTQiBTcGVjIDEuMS4wCisjCisjIExhd3JlbmNlIExpbSA8bGxpbUBjb3JlLmNvbT4gLSBUdWUsIDI2IEp1bmUgMjAwNworIyBVcGRhdGVkIHRvIHRoZSBsYXRlc3QgTFNCIDMuMSBzcGVjCisjIGh0dHA6Ly9yZWZzcGVjcy5mcmVlc3RhbmRhcmRzLm9yZy9MU0JfMy4xLjAvTFNCLUNvcmUtZ2VuZXJpYy9MU0ItQ29yZS1nZW5lcmljX2xpbmVzLnR4dAorCitzdGFydF9kYWVtb24gKCkgeworCS9ldGMvY29yZS1sc2IvbHNiX3N0YXJ0X2RhZW1vbiAiJEAiCit9CisKK2tpbGxwcm9jICgpIHsKKwkvZXRjL2NvcmUtbHNiL2xzYl9raWxscHJvYyAiJEAiCit9CisKK3BpZG9mcHJvYyAoKSB7CisJL2V0Yy9jb3JlLWxzYi9sc2JfcGlkb2Zwcm9jICIkQCIKK30KKworbG9nX3N1Y2Nlc3NfbXNnICgpIHsKKwkvZXRjL2NvcmUtbHNiL2xzYl9sb2dfbWVzc2FnZSBzdWNjZXNzICIkQCIKK30KKworbG9nX2ZhaWx1cmVfbXNnICgpIHsKKwkvZXRjL2NvcmUtbHNiL2xzYl9sb2dfbWVzc2FnZSBmYWlsdXJlICIkQCIKK30KKworbG9nX3dhcm5pbmdfbXNnICgpIHsKKwkvZXRjL2NvcmUtbHNiL2xzYl9sb2dfbWVzc2FnZSB3YXJuaW5nICIkQCIKK30KKworIyBpbnQgbG9nX2JlZ2luX21lc3NhZ2UgKGNoYXIgKm1lc3NhZ2UpCitsb2dfYmVnaW5fbXNnICgpIHsKKwlpZiBbIC16ICIkMSIgXTsgdGhlbgorCQlyZXR1cm4gMQorCWZpCisJZWNobyAiICogJEAiCit9CisKKworbG9nX2VuZF9tc2cgKCkgeworCS9ldGMvY29yZS1sc2IvbHNiX2xvZ19tZXNzYWdlIGVuZCAiJEAiCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9raWxscHJvYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvbHNiX2tpbGxwcm9jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg2NmMxYTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9raWxscHJvYwpAQCAtMCwwICsxLDYgQEAKKyMhL2Jpbi9zaAorCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCitMU0I9TFNCLTEuMSBraWxscHJvYyAkKgorZXhpdCAkPwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9sc2JfbG9nX21lc3NhZ2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9sb2dfbWVzc2FnZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMDM0M2IwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9sc2JfbG9nX21lc3NhZ2UKQEAgLTAsMCArMSwyNyBAQAorIyEvYmluL3NoCisKKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK0FDVElPTj0kMQorc2hpZnQKKworY2FzZSAiJEFDVElPTiIgaW4KKyAgc3VjY2VzcykKKyAgCWVjaG8gLW4gJCoKKwlzdWNjZXNzICIkKiIKKwllY2hvCisJOzsKKyAgZmFpbHVyZSkKKyAgCWVjaG8gLW4gJCoKKwlmYWlsdXJlICIkKiIKKwllY2hvCisJOzsKKyAgd2FybmluZykKKyAgCWVjaG8gLW4gJCoKKwl3YXJuaW5nICIkKiIKKwllY2hvCisJOzsKKyAgKikKKyAgCTs7Citlc2FjCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvbHNiX3BpZG9mcHJvYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvbHNiX3BpZG9mcHJvYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZDFmZDBmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9sc2JfcGlkb2Zwcm9jCkBAIC0wLDAgKzEsNiBAQAorIyEvYmluL3NoCisKKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK3BpZG9mcHJvYyAkKgorZXhpdCAkPwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9sc2Jfc3RhcnRfZGFlbW9uIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9sc2Jfc3RhcnRfZGFlbW9uCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRlNjJjMjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9zdGFydF9kYWVtb24KQEAgLTAsMCArMSw0NSBAQAorIyEvYmluL3NoCisKKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK25pY2U9Citmb3JjZT0KK3BpZGZpbGU9Cit1c2VyPQorY2hlY2s9CitSRVRWQUw9Cit3aGlsZSBbICIkMSIgIT0gIiR7MSMjWy0rXX0iIF07IGRvCisJY2FzZSAkMSBpbgorCSAgICAgLWYpCisJICAgICAJZm9yY2U9Ii0tZm9yY2UiCisJCXNoaWZ0CisJCTs7CisJICAgICAtbikKKwkgICAgIAluaWNlPSQyCisJCXNoaWZ0IDIKKwkJOzsKKwkgICAgIC1wKQorCQlwaWRmaWxlPSItLXBpZGZpbGUgJDIiCisJCXNoaWZ0IDIKKwkJOzsKKwkgICAgIC11KQorCSAgICAgICAgdXNlcj0iLS11c2VyICQyIgorCQlzaGlmdCAyCisJCTs7CisJICAgICAtYykKKwkgICAgICAgIGNoZWNrPSItLWNoZWNrICQyIgorCQlzaGlmdCAyCisJCTs7CisJICAgICAgKikgICAgIAorIAkJZWNobyAiVW5rbm93biBPcHRpb24gJDEiCisgCQllY2hvICJPcHRpb25zIGFyZToiCisgCQllY2hvICItZiIgCisJCWVjaG8gIi1wIHtwaWRmaWxlfSIKKwkJZWNobyAiLW4gWysvLW5pY2VsZXZlbF0iCisJCWVjaG8gIi11IHt1c2VyfSIKKwkJZWNobyAiLWMge2Jhc2V9IgorCSAgICAgICAgZXhpdCAxOzsJCisJZXNhYworZG9uZQorTFNCPUxTQi0xLjEgZGFlbW9uICR7Zm9yY2U6LX0gJHtuaWNlOi19ICR7cGlkZmlsZTotfSAke3VzZXI6LX0gJHtjaGVjazotfSAkKgorZXhpdCAkPwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYl80LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiXzQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjE1YjYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYl80LjEuYmIKQEAgLTAsMCArMSwxMjcgQEAKK1NVTU1BUlkgPSAiTFNCIHN1cHBvcnQgZm9yIE9wZW5FbWJlZGRlZCIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0hPTUVQQUdFID0gImh0dHA6Ly9wcmRvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvbHNiIgorTElDRU5TRSA9ICJHUEx2MisiCitQUiA9ICJyMiIKKworTFNCX0NPUkUgPSAibHNiLWNvcmUtJHtUQVJHRVRfQVJDSH0iCitMU0JfQ09SRV94ODYgPSAibHNiLWNvcmUtaWEzMiIKK0xTQl9DT1JFX3g4Ni02NCA9ICJsc2ItY29yZS1hbWQ2NCIKK1JQUk9WSURFU18ke1BOfSArPSAiJHtMU0JfQ09SRX0iCisKKyMgbHNiX3JlbGVhc2UgbmVlZHMgZ2V0b3B0CitSREVQRU5EU18ke1BOfSArPSAiJHtWSVJUVUFMLVJVTlRJTUVfZ2V0b3B0fSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO21kNT0xMmRhNTQ0YjFhM2E1YTE3OTVhMjExNjBiNDk0NzFjZiIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcHJvamVjdC9sc2IvbHNiX3JlbGVhc2UvMS40L2xzYi1yZWxlYXNlLTEuNC50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vaW5pdC1mdW5jdGlvbnMgXAorICAgICAgICAgICBmaWxlOi8vbHNiX2tpbGxwcm9jIFwKKyAgICAgICAgICAgZmlsZTovL2xzYl9sb2dfbWVzc2FnZSBcCisgICAgICAgICAgIGZpbGU6Ly9sc2JfcGlkb2Zwcm9jIFwKKyAgICAgICAgICAgZmlsZTovL2xzYl9zdGFydF9kYWVtb24gXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzMDUzN2VmNWEwMWUwY2E5NGI3YjhlYjZhMzZiYjFlNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5OTMyMTI4OGY4ZDYyZTdhMWQ0ODViN2M2YmRjY2YwNjc2NmZiOGNhNjAzYzYxOTU4MDZlNDQ1N2ZkZjE3MTcyIgorUyA9ICIke1dPUktESVJ9L2xzYi1yZWxlYXNlLTEuNCIKKworQ0xFQU5CUk9LRU4gPSAiMSIKKworZG9faW5zdGFsbCgpeworCW9lX3J1bm1ha2UgaW5zdGFsbCBwcmVmaXg9JHtEfSAgbWFuZGlyPSR7RH0vJHtkYXRhZGlyfS9tYW4vIERFU1RESVI9JHtEfQorCisJIyB0aGlzIDIgZGlycyBhcmUgbmVlZGVkIGJ5IHBhY2thZ2UgbHNiLWRpc3QtY2hlY2tlcgorCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L29wdAorCW1rZGlyIC1wICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L29wdAorCisJbWtkaXIgLXAgJHtEfSR7YmFzZV9iaW5kaXJ9CisJbWtkaXIgLXAgJHtEfS8ke2Jhc2VsaWJ9CisJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZAorCXByaW50ZiAiTFNCX1ZFUlNJT049XCJjb3JlLTQuMS1ub2FyY2g6IiA+ICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlCisKKwlpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAiaTU4NiIgXSB8fCBbICIke1RBUkdFVF9BUkNIfSIgPSAiaTY4NiIgXTt0aGVuCisJCXByaW50ZiAiY29yZS00LjEtaWEzMiIgPj4gICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlCisJZWxzZQorCQlwcmludGYgImNvcmUtNC4xLSR7VEFSR0VUX0FSQ0h9IiA+PiAgJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UKKwlmaQorCWVjaG8gIlwiIiA+PiAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZQorCWVjaG8gIkRJU1RSSUJfSUQ9JHtESVNUUk99IiA+PiAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZQorCWVjaG8gIkRJU1RSSUJfUkVMRUFTRT0ke0RJU1RST19WRVJTSU9OfSIgPj4gJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UKKwlpZiBbIC1uICIke0RJU1RST19DT0RFTkFNRX0iIF07IHRoZW4KKwkJZWNobyAiRElTVFJJQl9DT0RFTkFNRT0ke0RJU1RST19DT0RFTkFNRX0iID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlCisJZmkKKwllY2hvICJESVNUUklCX0RFU0NSSVBUSU9OPVwiJHtESVNUUk9fTkFNRX0gJHtESVNUUk9fVkVSU0lPTn1cIiIgPj4gJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UKKworCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJpNTg2IiBdIHx8IFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJpNjg2IiBdO3RoZW4KKwkJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZAorCQl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kL2dyYXBoaWNzLSR7UFZ9LW5vYXJjaAorCQl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kL2Rlc2t0b3AtJHtQVn0tbm9hcmNoCisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZ3JhcGhpY3MtJHtQVn0taWEzMgorCQl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kL2Rlc2t0b3AtJHtQVn0taWEzMgorCWVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIng4Nl82NCIgXTt0aGVuCisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZ3JhcGhpY3MtJHtQVn0tbm9hcmNoCisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZ3JhcGhpY3MtJHtQVn0tYW1kNjQKKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9kZXNrdG9wLSR7UFZ9LWFtZDY0CisJZmkKKwlpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYyIgXTt0aGVuCisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZ3JhcGhpY3MtJHtQVn0tbm9hcmNoCisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZ3JhcGhpY3MtJHtQVn0tcHBjMzIKKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9kZXNrdG9wLSR7UFZ9LXBwYzMyCisJZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYzY0IiBdO3RoZW4KKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9ncmFwaGljcy0ke1BWfS1ub2FyY2gKKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9ncmFwaGljcy0ke1BWfS1wcGM2NAorCQl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kL2Rlc2t0b3AtJHtQVn0tcHBjNjQKKwlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpeworICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vY29yZS1sc2IKKyAgICAgICBmb3IgaSBpbiBsc2Jfa2lsbHByb2MgbHNiX2xvZ19tZXNzYWdlIGxzYl9waWRvZnByb2MgbHNiX3N0YXJ0X2RhZW1vbgorICAgICAgIGRvCisgICAgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9LyR7aX0gJHtEfSR7c3lzY29uZmRpcn0vY29yZS1sc2IKKyAgICAgICBkb25lCisKKyAgICAgICBpbnN0YWxsIC1kICR7RH0vbGliL2xzYgorICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQtZnVuY3Rpb25zICR7RH0vbGliL2xzYgorCisgICAgICAgIyBjcmVhdCBsaW5rcyBmb3IgTFNCIHRlc3QKKyAgICAgICBpbnN0YWxsIC1kICR7RH0vdXNyL2xpYi9sc2IKKyAgICAgICBsbiAtc2YgJHtzYmluZGlyfS9jaGtjb25maWcgJHtEfS91c3IvbGliL2xzYi9pbnN0YWxsX2luaXRkCisgICAgICAgbG4gLXNmICR7c2JpbmRpcn0vY2hrY29uZmlnICR7RH0vdXNyL2xpYi9sc2IvcmVtb3ZlX2luaXRkCisKKyAgICAgICBpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAieDg2XzY0IiBdO3RoZW4KKwkgICAgICAgY2QgJHtEfQorICAgICAgICAgICAgICAgaWYgWyAiJHtiYXNlbGlifSIgIT0gImxpYjY0IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgbG4gLXNmICR7YmFzZWxpYn0gbGliNjQKKyAgICAgICAgICAgICAgIGZpCisJICAgICAgIGNkICR7RH0vJHtiYXNlbGlifQorICAgICAgICAgICAgICAgbG4gLXNmIGxkLWxpbnV4LXg4Ni02NC5zby4yIGxkLWxzYi14ODYtNjQuc28uMgorICAgICAgICAgICAgICAgbG4gLXNmIGxkLWxpbnV4LXg4Ni02NC5zby4yIGxkLWxzYi14ODYtNjQuc28uMworICAgICAgIGZpCisgICAgICAgaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gImk1ODYiIF0gfHwgWyAiJHtUQVJHRVRfQVJDSH0iID0gImk2ODYiIF07dGhlbgorCSAgICAgICBjZCAke0R9LyR7YmFzZWxpYn0KKyAgICAgICAgICAgICAgIGxuIC1zZiBsZC1saW51eC5zby4yIGxkLWxzYi5zby4yCisgICAgICAgICAgICAgICBsbiAtc2YgbGQtbGludXguc28uMiBsZC1sc2Iuc28uMworICAgICAgIGZpCisKKyAgICAgICBpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYzY0IiBdO3RoZW4KKyAgICAgICAgICAgICAgIGNkICR7RH0KKyAgICAgICAgICAgICAgIGlmIFsgIiR7YmFzZWxpYn0iICE9ICJsaWI2NCIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgIGxuIC1zZiAke2Jhc2VsaWJ9IGxpYjY0CisgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgY2QgJHtEfS8ke2Jhc2VsaWJ9CisgICAgICAgICAgICAgICBsbiAtc2YgbGQ2NC5zby4xIGxkLWxzYi1wcGM2NC5zby4yCisgICAgICAgICAgICAgICBsbiAtc2YgbGQ2NC5zby4xIGxkLWxzYi1wcGM2NC5zby4zCisgICAgICAgZmkKKyAgICAgICBpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYyIgXTt0aGVuCisJICAgICAgIGNkICR7RH0vJHtiYXNlbGlifQorICAgICAgICAgICAgICAgbG4gLXNmIGxkLnNvLjEgbGQtbHNiLXBwYzMyLnNvLjIKKyAgICAgICAgICAgICAgIGxuIC1zZiBsZC5zby4xIGxkLWxzYi1wcGMzMi5zby4zCisgICAgICAgZmkKK30KK0ZJTEVTXyR7UE59ICs9ICIvbGliNjQgXAorICAgICAgICAgICAgICAgIC91c3IvbGliL2xzYiBcCisgICAgICAgICAgICAgICAgJHtiYXNlX2xpYmRpcn0vbHNiLyogXAorICAgICAgICAgICAgICAgIC9saWIvbHNiLyogXAorICAgICAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzLzAwMDEtZnVuY3Rpb25zLWF2b2lkLWV4aXQtMS13aGljaC1jYXVzZXMtaW5pdC1zY3JpcHRzLXRvLS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2Jpbml0c2NyaXB0cy8wMDAxLWZ1bmN0aW9ucy1hdm9pZC1leGl0LTEtd2hpY2gtY2F1c2VzLWluaXQtc2NyaXB0cy10by0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgwOWM5YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2Jpbml0c2NyaXB0cy8wMDAxLWZ1bmN0aW9ucy1hdm9pZC1leGl0LTEtd2hpY2gtY2F1c2VzLWluaXQtc2NyaXB0cy10by0ucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1N1YmplY3Q6IGZ1bmN0aW9uczogYXZvaWQgZXhpdCAxIHdoaWNoIGNhdXNlcyBpbml0IHNjcmlwdHMgdG8gZmFpbAorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyByYy5kL2luaXQuZC9mdW5jdGlvbnMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9yYy5kL2luaXQuZC9mdW5jdGlvbnMgYi9yYy5kL2luaXQuZC9mdW5jdGlvbnMKK2luZGV4IDY4NTAwNDYuLjExMjIzZjcgMTAwNjQ0CistLS0gYS9yYy5kL2luaXQuZC9mdW5jdGlvbnMKKysrKyBiL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucworQEAgLTU5Nyw1ICs1OTcsNSBAQCBpZiBbICIkX3VzZV9zeXN0ZW1jdGwiID0gIjEiIF07IHRoZW4KKyAJZmkKKyBmaQorIAorLXN0cnN0ciAiJChjYXQgL3Byb2MvY21kbGluZSkiICJyYy5kZWJ1ZyIgJiYgc2V0IC14Cisrc3Ryc3RyICIkKGNhdCAvcHJvYy9jbWRsaW5lKSIgInJjLmRlYnVnIiAmJiBzZXQgLXggfHwgdHJ1ZQorIAorLS0gCisyLjEuMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHMvZnVuY3Rpb25zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzL2Z1bmN0aW9ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzU2ZDA0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzL2Z1bmN0aW9ucy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFhpYW9mZW5nIFlhbiA8eGlhb2ZlbmcueWFuQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBpbml0c2NyaXB0cy05LjQzL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGluaXRzY3JpcHRzLTkuNDMub3JpZy9yYy5kL2luaXQuZC9mdW5jdGlvbnMKKysrKyBpbml0c2NyaXB0cy05LjQzL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucworQEAgLTEzLDYgKzEzLDcgQEAgdW1hc2sgMDIyCisgUEFUSD0iL3NiaW46L3Vzci9zYmluOi9iaW46L3Vzci9iaW4iCisgZXhwb3J0IFBBVEgKKyAKKysKKyBpZiBbICRQUElEIC1uZSAxIC1hIC16ICIkU1lTVEVNQ1RMX1NLSVBfUkVESVJFQ1QiIF0gJiYgXAorIAkJKCAvYmluL21vdW50cG9pbnQgLXEgL2Nncm91cC9zeXN0ZW1kIHx8IC9iaW4vbW91bnRwb2ludCAtcSAvc3lzL2ZzL2Nncm91cC9zeXN0ZW1kICkgOyB0aGVuCisgICAgICAgICBjYXNlICIkMCIgaW4KK0BAIC01NCw3ICs1NSw3IEBAIHN5c3RlbWN0bF9yZWRpcmVjdCAoKSB7CisgWyAteiAiJHtDT0xVTU5TOi19IiBdICYmIENPTFVNTlM9ODAKKyAKKyBpZiBbIC16ICIke0NPTlNPTEVUWVBFOi19IiBdOyB0aGVuCistICBpZiBbIC1jICIvZGV2L3N0ZGVyciIgLWEgLXIgIi9kZXYvc3RkZXJyIiBdOyB0aGVuCisrICBpZiBbIC1jICIvZGV2L3N0ZGVyciIgLWEgLXIgIi9kZXYvc3RkZXJyIiAtYSAtZSAvc2Jpbi9jb25zb2xldHlwZSBdOyB0aGVuCisgICAgIENPTlNPTEVUWVBFPSIkKC9zYmluL2NvbnNvbGV0eXBlIDwgL2Rldi9zdGRlcnIgMj4vZGV2L251bGwpIgorICAgZWxzZQorICAgICBDT05TT0xFVFlQRT0ic2VyaWFsIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzXzkuNjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHNfOS42NC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGI2NjdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzXzkuNjQuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJTeXNWIGluaXQgc2NyaXB0cyB3aGljaCBhcmUgb25seSB1c2VkIGluIGFuIExTQiBpbWFnZSIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitERVBFTkRTID0gInBvcHQgZ2xpYi0yLjAiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWViZjRlOGI0OTc4MGFiMTg3ZDUxYmQyNmFhYTAyMmM2IgorCitTPSIke1dPUktESVJ9L2luaXRzY3JpcHRzLSR7UFZ9IgorU1JDX1VSSSA9ICJodHRwOi8vcGtncy5mZWRvcmFwcm9qZWN0Lm9yZy9yZXBvL3BrZ3MvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtJHtQVn0udGFyLmJ6Mi85Y2NlMmFlMTAwOTc1MGU4NGJlMzdjMDlhMDI4NzU3ZS9pbml0c2NyaXB0cy0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2Z1bmN0aW9ucy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWZ1bmN0aW9ucy1hdm9pZC1leGl0LTEtd2hpY2gtY2F1c2VzLWluaXQtc2NyaXB0cy10by0ucGF0Y2ggXAorICAgICAgICAgICIgCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5Y2NlMmFlMTAwOTc1MGU4NGJlMzdjMDlhMDI4NzU3ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0OGI1OWNlODE1N2NmYzU4YmJkNGIxZGZhNThhZDEwODcyNDU3NjFhZTExYzIwMzNiNjZhZTM4NjRlYTdlMWNmIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorQUxURVJOQVRJVkVfJHtQTn0gPSAiZnVuY3Rpb25zIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2Z1bmN0aW9uc10gPSAiJHtzeXNjb25mZGlyfS9pbml0LmQvZnVuY3Rpb25zIgorCisjIFNpbmNlIHdlIGFyZSBvbmx5IHRha2luZyB0aGUgcGF0Y2hlZCB2ZXJzaW9uIG9mIGZ1bmN0aW9ucywgbm8gbmVlZCB0bworIyBjb25maWd1cmUgb3IgY29tcGlsZSBhbnl0aGluZyBzbyBkbyBub3QgZXhlY3V0ZSB0aGVzZQorZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIgCitkb19jb21waWxlW25vZXhlY10gPSAiMSIgCisKK2RvX2luc3RhbGwoKXsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9yYy5kL2luaXQuZC9mdW5jdGlvbnMgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2Z1bmN0aW9ucworCXNlZCAtaSAncywke2Jhc2VfYmluZGlyfS9tb3VudHBvaW50LCR7YmluZGlyfS9tb3VudHBvaW50LGcnICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9mdW5jdGlvbnMKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L0xTQl9UZXN0LnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3QvTFNCX1Rlc3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk5NzFhMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L0xTQl9UZXN0LnNoCkBAIC0wLDAgKzEsNTI2IEBACisjIS9iaW4vc2gKKworIyBDb3B5cmlnaHQgKEMpIDIwMTIgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKKworV09SS19ESVI9Ii9vcHQvbHNiLXRlc3QiCisKK2lmIFsgYGlkIC11YCAtbmUgMCBdCit0aGVuCisJY2F0IDw8IEVPRgorCUluIG9yZGVyIHRvIGluc3RhbGwgYW5kIHJ1biBMU0IgdGVzdHN1aXRlLCB5b3UgbmVlZCBhZG1pbmlzdHJhdG9yIHByaXZpbGVnZXMuCisJWW91IGFyZSBjdXJyZW50bHkgcnVubmluZyB0aGlzIHNjcmlwdCBhcyBhbiB1bnByaXZpbGVnZWQgdXNlci4KKworRU9GCisJZXhpdCAxCitmaQorCitBUkNIPWB1bmFtZSAtbWAKK2lmIFsgJHtBUkNIfSAhPSAiaTY4NiIgXSAmJiBbICR7QVJDSH0gIT0gIng4Nl82NCIgXSAmJiBbICR7QVJDSH0gIT0gInBwYyIgXSAmJiBbICR7QVJDSH0gIT0gInBwYzY0IiBdCit0aGVuCisJZWNobyAiRXJyb3I6IFVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZSIKKwlleGl0IDEKK2ZpCisKK3doaWNoIHJwbQoraWYgWyAkPyAtbmUgMCBdCit0aGVuCisJZWNobyAiTm8gcnBtIGNvbW1hbmQgZm91bmQiCisJZXhpdCAxCitmaQorCitSRVQ9MAorCitjZCAke1dPUktfRElSfSB8fCBleGl0IDEKKyMgU3RlcCAxOiBEb3dubG9hZCB0aGUgTFNCIFBhY2thZ2VzCitlY2hvICIiCitlY2hvICJEb3dubG9hZCBMU0IgcGFja2FnZXMuLi4iCitlY2hvICIiCisKK2lmIFsgISAtZSAuL3BhY2thZ2VzX2xpc3QgXQordGhlbgorCWVjaG8gIkVycm9yOiBDb3VsZCBub3QgZmluZCBwYWNrYWdlcyBsaXN0IiA+JjIKKwlleGl0IDEKK2ZpCisKKy4gLi9wYWNrYWdlc19saXN0CisKK1BBQ0tBR0VTX0RJUj0iL3Zhci9vcHQvbHNiL3Rlc3QvbWFuYWdlci9wYWNrYWdlcy9mdHAubGludXhmb3VuZGF0aW9uLm9yZy9wdWIvbHNiIgorCitCQVNFX1BBQ0tBR0VTX0RJUj0iJHtQQUNLQUdFU19ESVJ9L2Jhc2UvJHtMU0JfUkVMRUFTRX0vYmluYXJ5IgorUlVOVElNRV9CQVNFX1BBQ0tBR0VTX0RJUj0iJHtQQUNLQUdFU19ESVJ9L3Rlc3Rfc3VpdGVzL3JlbGVhc2VkLWFsbC9iaW5hcnkvcnVudGltZSIKK1JVTlRJTUVfUEFDS0FHRVNfRElSPSIke1BBQ0tBR0VTX0RJUn0vdGVzdF9zdWl0ZXMvJHtMU0JfUkVMRUFTRX0vYmluYXJ5L3J1bnRpbWUiCitBUFBfUEFDS0FHRVNfRElSPSIke1BBQ0tBR0VTX0RJUn0vYXBwLWJhdHRlcnkvJHtMU0JfUkVMRUFTRX0vJHtMU0JfQVJDSH0iCitBUFBfVEVTVEZJTEVTX0RJUj0iJHtQQUNLQUdFU19ESVJ9L2FwcC1iYXR0ZXJ5L3Rlc3RzIgorU05BUFNIT1RTX1RFU1RGSUxFU19ESVI9IiR7UEFDS0FHRVNfRElSfS9zbmFwc2hvdHMvYXBwYmF0L3Rlc3RzIgorCitpZiBbICEgLWQgJHtQQUNLQUdFU19ESVJ9IF0KK3RoZW4KKwlta2RpciAtcCAke1BBQ0tBR0VTX0RJUn0KK2ZpCisKK2lmIFsgISAtZCAke0JBU0VfUEFDS0FHRVNfRElSfSBdCit0aGVuCisJbWtkaXIgLXAgJHtCQVNFX1BBQ0tBR0VTX0RJUn0KK2ZpCisKK2lmIFsgISAtZCAke1JVTlRJTUVfQkFTRV9QQUNLQUdFU19ESVJ9IF0KK3RoZW4KKwlta2RpciAtcCAke1JVTlRJTUVfQkFTRV9QQUNLQUdFU19ESVJ9CitmaQorCitpZiBbICEgLWQgJHtSVU5USU1FX1BBQ0tBR0VTX0RJUn0gXQordGhlbgorCW1rZGlyIC1wICR7UlVOVElNRV9QQUNLQUdFU19ESVJ9CitmaQorCitpZiBbICEgLWQgJHtBUFBfUEFDS0FHRVNfRElSfSBdCit0aGVuCisJbWtkaXIgLXAgJHtBUFBfUEFDS0FHRVNfRElSfQorZmkKKworaWYgWyAhIC1kICR7QVBQX1RFU1RGSUxFU19ESVJ9IF0KK3RoZW4KKwlta2RpciAtcCAke0FQUF9URVNURklMRVNfRElSfQorZmkKKworIyBPZmZpY2lhbCBkb3dubG9hZCBzZXJ2ZXIgbGlzdC4gWW91IGNhbiByZXBsYWNlIHRoZW0gd2l0aCB5b3VyIG93biBzZXJ2ZXIuCitTRVJWRVJfSVBBRERSPSIxNDAuMjExLjE2OS4yMyIKK1NFUlZFUl9OQU1FPSJmdHAubGludXhmb3VuZGF0aW9uLm9yZyIKKworaWYgISBgZ3JlcCAtRiAtcSAiJHtTRVJWRVJfTkFNRX0iIC9ldGMvaG9zdHNgOyB0aGVuCisJZWNobyAiJHtTRVJWRVJfSVBBRERSfQkke1NFUlZFUl9OQU1FfQkke1NFUlZFUl9OQU1FfSIgPj4gL2V0Yy9ob3N0cworZmkKKworI3BpbmcgLWMgNSAke1NFUlZFUl9OQU1FfQorI2lmIFsgJD8gLW5lIDAgXQorI3RoZW4KKyMJZWNobyAiVGhlIHNlcnZlcjogJHtTRVJWRVJfTkFNRX0gaXMgdW5yZWFjaGFibGUiCisjCWV4aXQgMQorI2ZpCisKK1NFUlZFUjE9IlwKKwlodHRwOi8vJHtTRVJWRVJfTkFNRX0vcHViL2xzYi9iYXNlLyR7TFNCX1JFTEVBU0V9L2JpbmFyeSIKK1NFUlZFUjI9IlwKKwlodHRwOi8vJHtTRVJWRVJfTkFNRX0vcHViL2xzYi90ZXN0X3N1aXRlcy9yZWxlYXNlZC1hbGwvYmluYXJ5L3J1bnRpbWUiCitTRVJWRVIzPSJcCisJaHR0cDovLyR7U0VSVkVSX05BTUV9L3B1Yi9sc2IvdGVzdF9zdWl0ZXMvJHtMU0JfUkVMRUFTRX0vYmluYXJ5L3J1bnRpbWUiCitTRVJWRVI0PSJcCisJaHR0cDovLyR7U0VSVkVSX05BTUV9L3B1Yi9sc2IvYXBwLWJhdHRlcnkvJHtMU0JfUkVMRUFTRX0vJHtMU0JfQVJDSH0iCitTRVJWRVI1PSJcCisJaHR0cDovLyR7U0VSVkVSX05BTUV9L3B1Yi9sc2IvYXBwLWJhdHRlcnkvdGVzdHMiCisKKyMgV2UgdXNpbmcgImN1cmwiIGFzIGEgZG93bmxvYWQgdG9vbCwgIndnZXQiIGlzIGFuIGFsdGVybmF0aXZlLgorQ1VSTD1gd2hpY2ggY3VybGAKK1dHRVQ9YHdoaWNoIHdnZXRgCitpZiBbICEgLXogJHtDVVJMfSBdCit0aGVuCisJRE9XTkxPQURfQ01EPSIke0NVUkx9IC1SIC1MIC1mIC0tcmV0cnkgMyAtLXJldHJ5LWRlbGF5IDQgLS1jb25uZWN0LXRpbWVvdXQgMTgwIC0tY29tcHJlc3NlZCAtQyAtIC1vIgorZWxpZiBbICEgLXogJHtXR0VUfSBdCit0aGVuCisJRE9XTkxPQURfQ01EPSIke1dHRVR9IC1jIC10IDUgLU8iCitlbHNlCisJZWNobyAiQ2FuIG5vdCBmaW5kIGEgZG93bmxvYWQgdG9vbCwgcGxlYXNlIGluc3RhbGwgY3VybCBvciB3Z2V0LiIKKwlleGl0IDEKK2ZpCisKK2NkICR7QkFTRV9QQUNLQUdFU19ESVJ9Citmb3IgcGtnIGluICR7QkFTRV9QQUNLQUdFU19MSVNUfTsgZG8KKwlpZiBbICEgLWYgJHtwa2d9IF0KKwl0aGVuCisJCSMke0RPV05MT0FEX0NNRH0gJHtwa2d9Ii4jcGFydCIgJHtTRVJWRVIxfS8ke3BrZ30gPiAvZGV2L251bGwgMj4mMQorCQkke0RPV05MT0FEX0NNRH0gJHtwa2d9Ii4jcGFydCIgJHtTRVJWRVIxfS8ke3BrZ30KKwkJaWYgWyAkPyAtZXEgMCBdCisJCXRoZW4KKwkJCW12IC1mICR7cGtnfSIuI3BhcnQiICR7cGtnfQorCQkJZWNobyAiRG93bmxvYWQgJHtwa2d9IHN1Y2Nlc3NmdWxseS4iCisJCWVsc2UKKwkJCWVjaG8gIkRvd25sb2FkICR7cGtnfSBmYWlsZWQuIgorCQkJUkVUPTEKKwkJZmkKKwlmaQorZG9uZQorCitjZCAke1JVTlRJTUVfQkFTRV9QQUNLQUdFU19ESVJ9Citmb3IgcGtnIGluICR7UlVOVElNRV9CQVNFX1BBQ0tBR0VTX0xJU1R9OyBkbworCWlmIFsgISAtZiAke3BrZ30gXQorCXRoZW4KKwkJIyR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjJ9LyR7cGtnfSA+IC9kZXYvbnVsbCAyPiYxCisJCSR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjJ9LyR7cGtnfQorCQlpZiBbICQ/IC1lcSAwIF0KKwkJdGhlbgorCQkJbXYgLWYgJHtwa2d9Ii4jcGFydCIgJHtwa2d9CisJCQllY2hvICJEb3dubG9hZCAke3BrZ30gc3VjY2Vzc2Z1bGx5LiIKKwkJZWxzZQorCQkJZWNobyAiRG93bmxvYWQgJHtwa2d9IGZhaWxlZC4iCisJCQlSRVQ9MQorCQlmaQorCWZpCitkb25lCisKK2NkICR7UlVOVElNRV9QQUNLQUdFU19ESVJ9Citmb3IgcGtnIGluICR7UlVOVElNRV9QQUNLQUdFU19MSVNUfTsgZG8KKwlpZiBbICEgLWYgJHtwa2d9IF0KKwl0aGVuCisJCSMke0RPV05MT0FEX0NNRH0gJHtwa2d9Ii4jcGFydCIgJHtTRVJWRVIzfS8ke3BrZ30gPiAvZGV2L251bGwgMj4mMQorCQkke0RPV05MT0FEX0NNRH0gJHtwa2d9Ii4jcGFydCIgJHtTRVJWRVIzfS8ke3BrZ30KKwkJaWYgWyAkPyAtZXEgMCBdCisJCXRoZW4KKwkJCW12IC1mICR7cGtnfSIuI3BhcnQiICR7cGtnfQorCQkJZWNobyAiRG93bmxvYWQgJHtwa2d9IHN1Y2Nlc3NmdWxseS4iCisJCWVsc2UKKwkJCWVjaG8gIkRvd25sb2FkICR7cGtnfSBmYWlsZWQuIgorCQkJUkVUPTEKKwkJZmkKKwlmaQorZG9uZQorCitjZCAke0FQUF9QQUNLQUdFU19ESVJ9Citmb3IgcGtnIGluICR7QVBQX1BBQ0tBR0VTX0xJU1R9OyBkbworCWlmIFsgISAtZiAke3BrZ30gXQorCXRoZW4KKwkJIyR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjR9LyR7cGtnfSA+IC9kZXYvbnVsbCAyPiYxCisJCSR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjR9LyR7cGtnfQorCQlpZiBbICQ/IC1lcSAwIF0KKwkJdGhlbgorCQkJbXYgLWYgJHtwa2d9Ii4jcGFydCIgJHtwa2d9CisJCQllY2hvICJEb3dubG9hZCAke3BrZ30gc3VjY2Vzc2Z1bGx5LiIKKwkJZWxzZQorCQkJZWNobyAiRG93bmxvYWQgJHtwa2d9IGZhaWxlZC4iCisJCQlSRVQ9MQorCQlmaQorCWZpCitkb25lCisKK2NkICR7QVBQX1RFU1RGSUxFU19ESVJ9Citmb3IgcGtnIGluICR7QVBQX1RFU1RGSUxFU19MSVNUfTsgZG8KKwlpZiBbICEgLWYgJHtwa2d9IF0KKwl0aGVuCisJCSMke0RPV05MT0FEX0NNRH0gJHtwa2d9Ii4jcGFydCIgJHtTRVJWRVI1fS8ke3BrZ30gPiAvZGV2L251bGwgMj4mMQorCQkke0RPV05MT0FEX0NNRH0gJHtwa2d9Ii4jcGFydCIgJHtTRVJWRVI1fS8ke3BrZ30KKwkJaWYgWyAkPyAtZXEgMCBdCisJCXRoZW4KKwkJCW12IC1mICR7cGtnfSIuI3BhcnQiICR7cGtnfQorCQkJZWNobyAiRG93bmxvYWQgJHtwa2d9IHN1Y2Nlc3NmdWxseS4iCisJCWVsc2UKKwkJCWVjaG8gIkRvd25sb2FkICR7cGtnfSBmYWlsZWQuIgorCQkJUkVUPTEKKwkJZmkKKwlmaQorZG9uZQorCitpZiBbICR7UkVUfSAtbmUgMCBdCit0aGVuCisJZWNobyAiRG93bmxvYWQgc29tZSBwYWNrYWdlcyBmYWlsZWQuIFBsZWFzZSBkb3dubG9hZCB0aGVtIGFnYWluLiIKKwlleGl0IDEKK2ZpCisKKyMgU3RlcCAyOiBJbnN0YWxsIHRoZSBMU0IgUGFja2FnZXMKK2VjaG8gIiIKK2VjaG8gIkluc3RhbGwgTFNCIHBhY2thZ2VzLi4uIgorZWNobyAiIgorCisjIEtpbGwgbGlnaHR0cGQKK3BzIGF1eCB8IGdyZXAgImxpZ2h0dHBkIiB8IGdyZXAgLXYgLXEgImdyZXAiCitpZiBbICQ/IC1lcSAwIF0KK3RoZW4KKwlraWxsYWxsIGxpZ2h0dHBkID4vZGV2L251bGwgMj4mMQorZmkKKworIyBTdGFydCBhdmFoaS1kYWVtb24KK3BzIGF1eCB8IGdyZXAgImF2YWhpLWRhZW1vbiIgfCBncmVwIC12IC1xICJncmVwIgoraWYgWyAkPyAtbmUgMCBdCit0aGVuCisJL2V0Yy9pbml0LmQvYXZhaGktZGFlbW9uIHN0YXJ0ID4vZGV2L251bGwgMj4mMQorZmkKKworTFNCX1NUQVJUX0NNRD0iL29wdC9sc2IvdGVzdC9tYW5hZ2VyL2Jpbi9kaXN0LWNoZWNrZXItc3RhcnQucGwiCitMU0JfU1RPUF9DTUQ9Ii9vcHQvbHNiL3Rlc3QvbWFuYWdlci9iaW4vZGlzdC1jaGVja2VyLXN0b3AucGwiCisKK1BMQVRGT1JNX0ZJTEU9Ii9ldGMvcnBtL3BsYXRmb3JtIgorCitSUE1fSU5TVEFMTF9DTUQ9InJwbSAtLXF1aWV0IC0tbm9kZXBzIC0tcmVwbGFjZXBrZ3MgLS1ub3NpZ25hdHVyZSAtaSIKK1JQTV9JTlNUQUxMX0NNRF9OT1NDUklQVFM9InJwbSAtLXF1aWV0IC0tbm9kZXBzIC0tcmVwbGFjZXBrZ3MgLS1ub3NjcmlwdHMgLS1ub3NpZ25hdHVyZSAtaSIKKworIyBJZiB0aGUgbHNiIGhhcyBiZWVuIHN0YXJ0ZWQsIHN0b3AgaXQgZmlyc3QuCitpZiBbIC14ICR7TFNCX1NUT1BfQ01EfSBdCit0aGVuCisJJHtMU0JfU1RPUF9DTUR9CitmaQorCitpZiBbICEgLWQgL2V0Yy9ycG0gXQordGhlbgorCW1rZGlyIC1wIC9ldGMvcnBtCitmaQorCitpZiBbICEgLWYgJHtQTEFURk9STV9GSUxFfSBdCit0aGVuCisJdG91Y2ggJHtQTEFURk9STV9GSUxFfQorZmkKKworaWYgISBgZ3JlcCAtRiAtcSAibm9hcmNoLXN1c2UiICR7UExBVEZPUk1fRklMRX1gOyB0aGVuCisJaWYgWyAke0FSQ0h9ID0gaTY4NiBdO3RoZW4KKwkJZWNobyAiaTQ4Ni1zdXNlIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gImk0ODYtbm9hcmNoIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gImk0ODYtcGMiID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAibm9hcmNoLXN1c2UiID4+ICR7UExBVEZPUk1fRklMRX0KKwllbGlmIFsgJHtBUkNIfSA9IHg4Nl82NCBdOyB0aGVuCisJCWVjaG8gImk0ODYtc3VzZSIgPj4gJHtQTEFURk9STV9GSUxFfQorCQllY2hvICJpNDg2LW5vYXJjaCIgPj4gJHtQTEFURk9STV9GSUxFfQorCQllY2hvICJpNDg2LXBjIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gImk0ODYtLiotbGludXguKiIgPj4gJHtQTEFURk9STV9GSUxFfQorCQllY2hvICJub2FyY2gtc3VzZSIgPj4gJHtQTEFURk9STV9GSUxFfQorCQllY2hvICIke0FSQ0h9LXN1c2UiID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAiJHtBUkNIfS1ub2FyY2giID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAiJHtBUkNIfS1wYyIgPj4gJHtQTEFURk9STV9GSUxFfQorCWVsc2UKKwkJZWNobyAiJHtBUkNIfS1zdXNlIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gIiR7QVJDSH0tbm9hcmNoIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gIiR7QVJDSH0tcGMiID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAibm9hcmNoLXN1c2UiID4+ICR7UExBVEZPUk1fRklMRX0KKwlmaQorZmkKKworaWYgWyAtZCAke0JBU0VfUEFDS0FHRVNfRElSfSBdCit0aGVuCisJY2QgJHtCQVNFX1BBQ0tBR0VTX0RJUn0KKwlmb3IgcGtnIGluICR7QkFTRV9QQUNLQUdFU19MSVNUfQorCWRvCisJCXJwbSAtLXF1aWV0IC1xICR7cGtnJVwuKn0KKwkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCQkkUlBNX0lOU1RBTExfQ01EICR7cGtnfQorCQlmaQorCWRvbmUKK2ZpCisKK2lmIFsgLWQgJHtSVU5USU1FX0JBU0VfUEFDS0FHRVNfRElSfSBdCit0aGVuCisJY2QgJHtSVU5USU1FX0JBU0VfUEFDS0FHRVNfRElSfQorCWZvciBwa2cgaW4gJHtSVU5USU1FX0JBU0VfUEFDS0FHRVNfTElTVH0KKwlkbworCQlycG0gLS1xdWlldCAtcSAke3BrZyVcLip9CisJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQkJJFJQTV9JTlNUQUxMX0NNRCAke3BrZ30KKwkJZmkKKwlkb25lCitmaQorCitpZiBbIC1kICR7UlVOVElNRV9QQUNLQUdFU19ESVJ9IF0KK3RoZW4KKwljZCAke1JVTlRJTUVfUEFDS0FHRVNfRElSfQorCWZvciBwa2cgaW4gJHtSVU5USU1FX1BBQ0tBR0VTX0xJU1R9CisJZG8KKwkJcnBtIC0tcXVpZXQgLXEgJHtwa2clXC4qfQorCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJCSRSUE1fSU5TVEFMTF9DTUQgJHtwa2d9CisJCWZpCisJZG9uZQorZmkKKworaWYgWyAtZCAke0FQUF9QQUNLQUdFU19ESVJ9IF0KK3RoZW4KKwljZCAke0FQUF9QQUNLQUdFU19ESVJ9CisJZm9yIHBrZyBpbiAke0FQUF9QQUNLQUdFU19MSVNUfQorCWRvCisJCWVjaG8gIiR7cGtnfSIgfCBncmVwIC1xICJhcGFjaGVcfHhwZGYiCisJCWlmIFsgJD8gLWVxIDAgXQorCQl0aGVuCisJCQlycG0gLS1xdWlldCAtcSAke3BrZyVcLip9CisJCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJCQkkUlBNX0lOU1RBTExfQ01EX05PU0NSSVBUUyAke3BrZ30KKwkJCWZpCisJCWVsc2UKKwkJCXJwbSAtLXF1aWV0IC1xICR7cGtnJVwuKn0KKwkJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQkJCSRSUE1fSU5TVEFMTF9DTUQgJHtwa2d9CisJCQlmaQorCQlmaQorCWRvbmUKK2ZpCisKK2lmIFsgISAtZCAke1NOQVBTSE9UU19URVNURklMRVNfRElSfSBdCit0aGVuCisJbWtkaXIgLXAgJHtTTkFQU0hPVFNfVEVTVEZJTEVTX0RJUn0KK2ZpCisKK2lmIFsgLWQgJHtBUFBfVEVTVEZJTEVTX0RJUn0gXQordGhlbgorCWNkICR7QVBQX1RFU1RGSUxFU19ESVJ9CisJZm9yIHBrZyBpbiAke0FQUF9URVNURklMRVNfTElTVH0KKwlkbworCQljcCAtZiAke3BrZ30gJHtTTkFQU0hPVFNfVEVTVEZJTEVTX0RJUn0KKwlkb25lCitmaQorCitjZCAke1dPUktfRElSfQorCisjIFN0ZXAgMzogU2V0IGVudmlyb25tZW50CitlY2hvICIiCitlY2hvICJTZXQgZW52aXJvbm1lbnQuLi4iCitlY2hvICIiCisKK2NoZWNrICgpCit7CisJaWYgWyAkPyAtZXEgMCBdCisJdGhlbgorCQllY2hvICJQQVNTIgorCWVsc2UgCisJCWVjaG8gIkZBSUwiCisJCWV4aXQgMQorCWZpCit9CisKK2VjaG8gIiIKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKK2VjaG8gIkNyZWF0ZSB0aGUgRGlybmFtZXMgb24gdGFyZ2V0IgorCitpZiBbICEgLWQgL2V0Yy9ycG0vc3lzaW5mbyBdCit0aGVuCisJbWtkaXIgLXAgL2V0Yy9ycG0vc3lzaW5mbworZmkKKworY2F0ID4gL2V0Yy9ycG0vc3lzaW5mby9EaXJuYW1lcyA8PCBFT0YKKy9ldGMvb3B0L2xzYgorL2hvbWUvdGV0L0xTQi50b29scworL29wdC9sc2ItdGV0My1saXRlL2xpYi9rc2gKKy9vcHQvbHNiLXRldDMtbGl0ZS9saWIvcGVybAorL29wdC9sc2ItdGV0My1saXRlL2xpYi9wb3NpeF9zaAorL29wdC9sc2ItdGV0My1saXRlL2xpYi90ZXQzCisvb3B0L2xzYi10ZXQzLWxpdGUvbGliL3hwZzNzaAorL29wdC9sc2IvYXBwYmF0L2xpYi9weXRob24yLjQvc2l0ZS1wYWNrYWdlcy9xbQorL29wdC9sc2IvYXBwYmF0L2xpYi9weXRob24yLjQvc2l0ZS1wYWNrYWdlcy9xbS9leHRlcm5hbAorL29wdC9sc2IvYXBwYmF0L2xpYi9weXRob24yLjQvc2l0ZS1wYWNrYWdlcy9xbS9leHRlcm5hbC9Eb2N1bWVudFRlbXBsYXRlCisvb3B0L2xzYi9hcHBiYXQvbGliL3B5dGhvbjIuNC9zaXRlLXBhY2thZ2VzL3FtL3Rlc3QKKy9vcHQvbHNiL2FwcGJhdC9saWIvcHl0aG9uMi40L3NpdGUtcGFja2FnZXMvcW0vdGVzdC9jbGFzc2VzCisvb3B0L2xzYi9hcHBiYXQvbGliL3B5dGhvbjIuNC9zaXRlLXBhY2thZ2VzL3FtL3Rlc3Qvd2ViCisvb3B0L2xzYi90ZXN0L2RvYworL29wdC9sc2IvdGVzdC9saWIKKy9vcHQvbHNiL3Rlc3QvcW0vZGlhZ25vc3RpY3MKKy9vcHQvbHNiL3Rlc3QvcW0vZG9jCisvb3B0L2xzYi90ZXN0L3FtL2RvYy90ZXN0L2h0bWwKKy9vcHQvbHNiL3Rlc3QvcW0vZG9jL3Rlc3QvcHJpbnQKKy9vcHQvbHNiL3Rlc3QvcW0vZHRtbAorL29wdC9sc2IvdGVzdC9xbS9kdG1sL3Rlc3QKKy9vcHQvbHNiL3Rlc3QvcW0vbWVzc2FnZXMvdGVzdAorL29wdC9sc2IvdGVzdC9xbS90dXRvcmlhbC90ZXN0L3RkYgorL29wdC9sc2IvdGVzdC9xbS90dXRvcmlhbC90ZXN0L3RkYi9RTVRlc3QKKy9vcHQvbHNiL3Rlc3QvcW0vd2ViCisvb3B0L2xzYi90ZXN0L3FtL3dlYi9pbWFnZXMKKy9vcHQvbHNiL3Rlc3QvcW0vd2ViL3N0eWxlc2hlZXRzCisvb3B0L2xzYi90ZXN0L3FtL3htbAorL29wdC9sc2IvdGVzdC9zaGFyZQorL3Vzci9zaGFyZS9kb2MvbHNiLXJ1bnRpbWUtdGVzdAorL3Zhci9vcHQvbHNiCisvb3B0L2xzYi90ZXN0L2Rlc2t0b3AKKy9vcHQvbHNiL3Rlc3QvZGVza3RvcC9mb250Y29uZmlnCisvb3B0L2xzYi90ZXN0L2Rlc2t0b3AvZnJlZXR5cGUKKy9vcHQvbHNiL3Rlc3QvZGVza3RvcC9ndGt2dHMKKy9vcHQvbHNiL3Rlc3QvZGVza3RvcC9saWJwbmcKKy9vcHQvbHNiL3Rlc3QvZGVza3RvcC9xdDMKKy9vcHQvbHNiL3Rlc3QvZGVza3RvcC94ZnQKKy9vcHQvbHNiL3Rlc3QvZGVza3RvcC94bWwKKy9vcHQvbHNiL3Rlc3QvZGVza3RvcC94cmVuZGVyCisKKworRU9GCisKK2lmIFsgLWYgL2V0Yy9ycG0vc3lzaW5mby9EaXJuYW1lcyBdCit0aGVuCisJZWNobyAiU3VjY2VzcyB0byBjcmVhdCBEaXJuYW1lcyBmaWxlIgorZWxzZSAKKwllY2hvICJGYWlsIHRvIGNyZWF0IERpcm5hbWVzIGZpbGUiCitmaQorCitbIC14IC9zYmluL2xkY29uZmlnIF0gJiYgeworZWNobyAiIgorZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorZWNobyAiVXBkYXRlIGNhY2hlIgorL3NiaW4vbGRjb25maWcKK2NoZWNrOworfQorCisjIENoZWNrIGxvb3AgZGV2aWNlCitpZiBbICEgLWIgL2Rldi9sb29wMCBdCit0aGVuCisJaW5zbW9kIC9saWIvbW9kdWxlcy9gdW5hbWUgLXJgL2tlcm5lbC9kcml2ZXJzL2Jsb2NrL2xvb3Aua28KKwlpZiBbICQ/ICE9IDAgXTt0aGVuCisJCWVjaG8gIkluc21vZCBsb29wLmtvIGZhaWxlZC4iCisJZmkKK2ZpCisKKyMgUmVzb2x2ZSBsb2NhbGhvc3QKK0xPQ0FMSE9TVD1gaG9zdG5hbWVgCitpZiAhIGBncmVwIC1GIC1xICIkTE9DQUxIT1NUIiAvZXRjL2hvc3RzYDsgdGhlbgorCWVjaG8gIjEyNy4wLjAuMQkkTE9DQUxIT1NUIiA+PiAvZXRjL2hvc3RzCitmaQorCisjIFdvcmthcm91bmQgdG8gYWRkIHBhcnQgb2YgbG9jYWxlcyBmb3IgTFNCIHRlc3QKK2xvY2FsZWRlZiAtaSBkZV9ERSAtZiBJU08tODg1OS0xIGRlX0RFCitsb2NhbGVkZWYgLWkgZGVfREUgLWYgSVNPLTg4NTktMTUgZGVfREUuSVNPLTg4NTktMTUKK2xvY2FsZWRlZiAtaSBkZV9ERSAtZiBVVEYtOCBkZV9ERS5VVEYtOAorbG9jYWxlZGVmIC1pIGRlX0RFQGV1cm8gLWYgSVNPLTg4NTktMTUgZGVfREVAZXVybworbG9jYWxlZGVmIC1pIGVuX0hLIC1mIElTTy04ODU5LTEgZW5fSEsKK2xvY2FsZWRlZiAtaSBlbl9QSCAtZiBJU08tODg1OS0xIGVuX1BICitsb2NhbGVkZWYgLWkgZW5fVVMgLWYgSVNPLTg4NTktMTUgZW5fVVMuSVNPLTg4NTktMTUKK2xvY2FsZWRlZiAtaSBlbl9VUyAtZiBJU08tODg1OS0xIGVuX1VTLklTTy04ODU5LTEKK2xvY2FsZWRlZiAtaSBlbl9VUyAtZiBJU08tODg1OS0xIGVuX1VTCitsb2NhbGVkZWYgLWkgZW5fVVMgLWYgVVRGLTggZW5fVVMuVVRGLTgKK2xvY2FsZWRlZiAtaSBlbl9VUyAtZiBJU08tODg1OS0xIGVuX1VTLklTTzg4NTktMQorbG9jYWxlZGVmIC1pIGVzX01YIC1mIElTTy04ODU5LTEgZXNfTVgKK2xvY2FsZWRlZiAtaSBmcl9GUiAtZiBJU08tODg1OS0xIGZyX0ZSCitsb2NhbGVkZWYgLWkgaXRfSVQgLWYgSVNPLTg4NTktMSBpdF9JVAorbG9jYWxlZGVmIC1pIGphX0pQIC1mIEVVQy1KUCBqYV9KUC5ldWNqcAorbG9jYWxlZGVmIC1pIHNlX05PIC1mIFVURi04IHNlX05PLlVURi04Citsb2NhbGVkZWYgLWkgdGFfSU4gLWYgVVRGLTggdGFfSU4KK2xvY2FsZWRlZiAtaSBlc19FUyAtZiBJU08tODg1OS0xIGVzX0VTCitsb2NhbGVkZWYgLWkgZnJfRlJAZXVybyAtZiBJU08tODg1OS0xIGZyX0ZSQGV1cm8KK2xvY2FsZWRlZiAtaSBpc19JUyAtZiBVVEYtOCBpc19JUy5VVEYtOAorbG9jYWxlZGVmIC1pIHpoX1RXIC1mIEJJRzUgemhfVFcuQklHNQorbG9jYWxlZGVmIC1pIGVuX1VTIC1mIElTTy04ODU5LTE1IGVuX1VTLklTTy04ODU5LTE1CisKK2VjaG8gIiIKK2VjaG8gIkluc3RhbGxhdGlvbiBkb25lISIKK2VjaG8gIiIKKworIyBTdGVwIDQ6IFN0YXJ0IExTQiB0ZXN0CitpZiBbIC14ICR7TFNCX1NUQVJUX0NNRH0gXQordGhlbgorCSR7TFNCX1NUQVJUX0NNRH0KK2ZpCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKK2VjaG8gIlJ1biBhbGwgdGhlIGNlcnRpZmljYXRpb24gdmVyc2lvbiBvZiBMU0IgVGVzdHMiCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisKK0xTQl9ESVNUX0NIRUNLRVI9Ii9vcHQvbHNiL3Rlc3QvbWFuYWdlci91dGlscy9kaXN0LWNoZWNrZXIucGwiCitTRVNTSU9OPSIke1dPUktfRElSfS9zZXNzaW9uIgoraWYgWyAhIC1lICR7U0VTU0lPTn0gXQordGhlbgorCWVjaG8gIkVycm9yOiBDb3VsZCBub3QgZmluZCBzZXNzaW9uIGZpbGUuIgorCWVjaG8gIllvdSBtdXN0IHJ1biBMU0IgdGVzdCBmcm9tIHdlYmJyb3dlci4iCisJZXhpdCAxCitmaQorCitpZiBbIC14ICR7TFNCX0RJU1RfQ0hFQ0tFUn0gXQordGhlbgorCSR7TFNCX0RJU1RfQ0hFQ0tFUn0gLXYyIC1mICR7U0VTU0lPTn0KKwljaGVjaworZmkKKworZWNobyAiIgorZWNobyAiTFNCIHRlc3QgY29tcGxldGUuIFBsZWFzZSBjaGVjayB0aGUgbG9nIGZpbGUgaW4gL3Zhci9vcHQvbHNiL3Rlc3QvbWFuYWdlci9yZXN1bHRzLyIKK2VjaG8gIiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3QvcGFja2FnZXNfbGlzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L3BhY2thZ2VzX2xpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdkODM1MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L3BhY2thZ2VzX2xpc3QKQEAgLTAsMCArMSw1MCBAQAorTFNCX1JFTEVBU0U9InJlbGVhc2VkLTQuMS4wIgorTFNCX0FSQ0g9ImxzYmFyY2giCisKK0JBU0VfUEFDS0FHRVNfTElTVD0ibHNiLXNldHVwLTQuMS4wLTEubm9hcmNoLnJwbSIKKworUlVOVElNRV9CQVNFX1BBQ0tBR0VTX0xJU1Q9ImxzYi1kaXN0LWNoZWNrZXItNS4wLjAuMS0xLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGV0My1saXRlLTMuNy0yNy5sc2I1LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGV0My1saXRlLWRldmVsLTMuNy0yNy5sc2I1LnRhcmdldGFyY2gucnBtIFwKKwlsc2IteHZmYi0xLjIuMC0yMi50YXJnZXRhcmNoLnJwbSBcCisJIgorCitSVU5USU1FX1BBQ0tBR0VTX0xJU1Q9ImxzYi1jbWRjaGstNC4xLjQtNS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLWxpYmNoay00LjEuNC01LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItcW0tMi4yLTEyLmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10YXNrLWRpc3QtdGVzdGtpdC00LjEuOS0xLm5vYXJjaC5ycG0gXAorCWxzYi10ZXN0LWNvcmUtNC4xLjE1LTEudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LWNwcC10MmMtNC4xLjAtMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtZGVza3RvcC00LjEuOS0xLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1kZXNrdG9wLXQyYy00LjEuMy0zLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1saWJzdGRjcHAtNC4xLjAtMTgubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3Qtb2x2ZXItY29yZS00LjEuNC0xLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1wZXJsLTQuMS44LTEubm9hcmNoLnJwbSBcCisJbHNiLXRlc3QtcHJpbnRpbmctNC4xLjItMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtcHl0aG9uLTQuMS41LTEudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LXF0My1hem92LTQuMS4xLTMudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LXF0NC1hem92LTQuMS4zLTEudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LXh0czUtNS4xLjUtNDUubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtYWxzYS10MmMtNC4xLjAtMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtY29yZS10MmMtNC4xLjItMy50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QteG1sMi1hem92LTQuMS4wLTEudGFyZ2V0YXJjaC5ycG0gXAorCSIKKworQVBQX1BBQ0tBR0VTX0xJU1Q9ImxzYi1weXRob24tMi40LjYtNy5sc2I0LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItYXBhY2hlLTIuMi4xNC04LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10Y2wtOC41LjctOC5sc2I0LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItZXhwZWN0LTUuNDMuMC0xMy5sc2I0LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItZ3JvZmYtMS4yMC4xLTcubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXJhcHRvci0xLjQuMTktNS5sc2I0LnRhcmdldGFyY2gucnBtIFwKKwlsc2IteHBkZi0xLjAxLTE0LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi1zYW1iYS0zLjQuMy05LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi1yc3luYy0zLjAuNi02LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCSIKKworQVBQX1RFU1RGSUxFU19MSVNUPSJleHBlY3QtdGVzdHMudGFyIFwKKwl0Y2wtdGVzdHMudGFyIFwKKwlyYXB0b3ItdGVzdHMudGFyIFwKKwl0ZXN0MS5wZGYgXAorCXRlc3QyLnBkZiBcCisJIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdC9zZXNzaW9uIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3Qvc2Vzc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWNhMmVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3Qvc2Vzc2lvbgpAQCAtMCwwICsxLDE5NCBAQAorW0dFTkVSQUxdCitWRVJCT1NFX0xFVkVMOiAgIDEKK0FSQ0hJVEVDVFVSRTogICAgdGFyZ2V0YXJjaAorVVNFX0lOVEVSTkVUOiAgICAxCitTVERfVkVSU0lPTjogICAgIExTQiA0LjEKK1NURF9QUk9GSUxFOiAgICAgbm8KK1tjbWRjaGtdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW2xpYmNoa10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbYWxzYS10MmNdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW2Fsc2EtdDJjfGxvY2FsfCpdCitBVVRPUkVQTFlfVEVTVFNVSVRFX0RJUjogL29wdC9sc2IvdGVzdC9hbHNhLXQyYworQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L2Fsc2EtdDJjL3Jlc3VsdHMKKworW2NvcmVdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW2NvcmV8bG9jYWx8Kl0KK0FVVE9SRVBMWV9QUk9WSURFU19CQVNIOiBuCitBVVRPUkVQTFlfVEVTVFJVTl9QQVRIOiAvaG9tZS90ZXQvdGVzdF9zZXRzCitBVVRPUkVQTFlfUEVSU09OOiBBdXRvbWF0ZWQKK0FVVE9SRVBMWV9LRVJORUxfTkFNRTogdm1saW51egorQVVUT1JFUExZX0lOU1RBTExfTFNCUEFNX0NPTkY6IHkKK0FVVE9SRVBMWV9QUk9WSURFU19DX1NIRUxMOiBuCitBVVRPUkVQTFlfT1JHQU5JU0FUSU9OOiBOL0EKK0FVVE9SRVBMWV9TRVRfUEFTU19NSU5fREFZUzogeQorQVVUT1JFUExZX1BST1ZJREVTX1NZU1ZfSU5JVDogCitBVVRPUkVQTFlfSVNOVEFMTF9ERVZTOiB5CitBVVRPUkVQTFlfU1VQUE9SVFNfRklMRV9DTUQ6IHkKK0FVVE9SRVBMWV9URVNUX1NZU1RFTTogRGlzdHJpYnV0aW9uIENoZWNrZXIKK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L2NvcmUvdGV0L3Rlc3Rfc2V0cworQVVUT1JFUExZX1NVUFBPUlRTX05MUzogbgorQVVUT1JFUExZX1NVUFBPUlRTX1BST0NFU1NfQUNDT1VOVElORzogbgorQVVUT1JFUExZX1BBVEhfVE9fUkMuRDogCitBVVRPUkVQTFlfQUxMT1dTX01BS0VERVY6IG4KK0FVVE9SRVBMWV9SRVNVTFRTX0RJUjogL29wdC9sc2IvdGVzdC9jb3JlL3RldC90ZXN0X3NldHMvcmVzdWx0cworCitbY29yZS10MmNdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW2NvcmUtdDJjfGxvY2FsfCpdCitBVVRPUkVQTFlfVEVTVFNVSVRFX0RJUjogL29wdC9sc2IvdGVzdC9jb3JlLXQyYworQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L2NvcmUtdDJjL3Jlc3VsdHMKKworW2NwcC10MmNdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW2NwcC10MmN8bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L2NwcC10MmMKK0FVVE9SRVBMWV9SRVNVTFRTX0RJUjogL29wdC9sc2IvdGVzdC9jcHAtdDJjL3Jlc3VsdHMKKworW2Rlc2t0b3BdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW2Rlc2t0b3B8bG9jYWx8Kl0KK0FVVE9SRVBMWV9ERVNLVE9QX0VOVklST05NRU5UOiBbZGVmYXVsdF0KK0FVVE9SRVBMWV9QRVJTT046IEF1dG9tYXRlZAorQVVUT1JFUExZX1hfQ0xJRU5UX0hPU1ROQU1FOiAKK0FVVE9SRVBMWV9URVNUX1NZU1RFTTogRGlzdHJpYnV0aW9uIENoZWNrZXIKK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L2Rlc2t0b3AKK0FVVE9SRVBMWV9YMTFfRk9OVF9QQVRIOiBbZGVmYXVsdF0KK0FVVE9SRVBMWV9TSE9XX1NVTU1BUllfUkVQT1JUOiAKK0FVVE9SRVBMWV9PUkdBTklTQVRJT046IE4vQQorQVVUT1JFUExZX1hWRkJfRElTUExBWTogW2RlZmF1bHRdCisKK1tkZXNrdG9wLXQyY10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbZGVza3RvcC10MmN8bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L2Rlc2t0b3AtdDJjCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QvZGVza3RvcC10MmMvcmVzdWx0cworCitbbGlic3RkY3BwXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tsaWJzdGRjcHB8bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUX1NZU1RFTTogRGlzdHJpYnV0aW9uIENoZWNrZXIKK0FVVE9SRVBMWV9QRVJTT046IEF1dG9tYXRlZAorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QvbGlic3RkY3BwXzQuMS4wCitBVVRPUkVQTFlfT1JHQU5JU0FUSU9OOiBOL0EKK0FVVE9SRVBMWV9HTlVfVFJJUExFVDogCisKK1tvbHZlcl0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbb2x2ZXJ8bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L29sdmVyLWNvcmUKK0FVVE9SRVBMWV9SRVNVTFRTX0RJUjogL3Zhci9vcHQvbHNiL3Rlc3Qvb2x2ZXItY29yZQorCitbcGVybF0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbcGVybHxsb2NhbHwqXQorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QvcGVybAorQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L3BlcmwvcmVzdWx0cworCitbcHJpbnRpbmddCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW3ByaW50aW5nfGxvY2FsfCpdCitBVVRPUkVQTFlfVEVTVFNVSVRFX0RJUjogL29wdC9sc2IvdGVzdC9wcmludGluZworQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L3ByaW50aW5nL3Jlc3VsdHMKKworW3B5dGhvbl0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbcHl0aG9ufGxvY2FsfCpdCitBVVRPUkVQTFlfVEVTVFNVSVRFX0RJUjogL29wdC9sc2IvdGVzdC9weXRob24KK0FVVE9SRVBMWV9SRVNVTFRTX0RJUjogL29wdC9sc2IvdGVzdC9weXRob24vcmVzdWx0cworCitbcXQzLWF6b3ZdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW3F0My1hem92fGxvY2FsfCpdCitBVVRPUkVQTFlfVEVTVFNVSVRFX0RJUjogL29wdC9sc2IvdGVzdC9xdDMtYXpvdgorQVVUT1JFUExZX1gxMV9GT05UX1BBVEg6IFtkZWZhdWx0XQorQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L3F0My1hem92L3Jlc3VsdHMKKworW3F0NC1hem92XQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1txdDQtYXpvdnxsb2NhbHwqXQorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QvcXQ0LWF6b3YKK0FVVE9SRVBMWV9YMTFfRk9OVF9QQVRIOiBbZGVmYXVsdF0KK0FVVE9SRVBMWV9SRVNVTFRTX0RJUjogL29wdC9sc2IvdGVzdC9xdDQtYXpvdi9yZXN1bHRzCisKK1t4bWwyLWF6b3ZdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW3h0czVdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW3h0czV8bG9jYWx8Kl0KK0FVVE9SRVBMWV9YVF9GT05UUEFUSF9HT09EOiBbZGVmYXVsdF0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L3h0czUKK0FVVE9SRVBMWV9YVkZCX0RJU1BMQVk6IFtkZWZhdWx0XQorQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L3h0czUveHRzNS9yZXN1bHRzCitBVVRPUkVQTFlfWFRfRk9OVFBBVEg6IFtkZWZhdWx0XQorQVVUT1JFUExZX1hfQ0xJRU5UX0hPU1ROQU1FOiAKKworW2FwYWNoZV0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbZXhwZWN0XQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tncm9mZl0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbcmFwdG9yXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tyc3luY10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbc2FtYmFdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW3RjbF0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbeHBkZl0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdF8xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdF8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWExMjUwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0XzEuMC5iYgpAQCAtMCwwICsxLDQ5IEBACitTVU1NQVJZID0gIkF1dG9tYXRlcyBMaW51eCBTdGFuZGFyZCBCYXNlIChMU0IpIHRlc3RzIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MiIKK1BSID0gInIzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MU0JfVGVzdC5zaDtiZWdpbmxpbmU9MztlbmRsaW5lPTE2O21kNT03MDYzYmI1NGIwNDcxOWRmMDcxNmI1MTM0NDdmNGZjMCIKKworU1JDX1VSSSA9ICJmaWxlOi8vTFNCX1Rlc3Quc2ggXAorCQkgICBmaWxlOi8vcGFja2FnZXNfbGlzdCBcCisJCSAgIGZpbGU6Ly9zZXNzaW9uIFwKKwkJICAgIgorUkRFUEVORFNfJHtQTn0gPSAicnBtIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7U30vTFNCX1Rlc3Quc2ggJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLWQgICR7RH0vb3B0L2xzYi10ZXN0CisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vcGFja2FnZXNfbGlzdCAke0R9L29wdC9sc2ItdGVzdC9wYWNrYWdlc19saXN0CisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vc2Vzc2lvbiAke0R9L29wdC9sc2ItdGVzdC9zZXNzaW9uCisJaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gImk1ODYiIF0gfHwgWyAiJHtUQVJHRVRfQVJDSH0iID0gImk2ODYiIF07dGhlbgorCQlzZWQgLWkgLWUgJ3MvbHNiYXJjaC9pYTMyL2cnIC1lICdzL3RhcmdldGFyY2gvaTQ4Ni9nJyAke0R9L29wdC9sc2ItdGVzdC9wYWNrYWdlc19saXN0CisJCXNlZCAtaSAtZSAncy90YXJnZXRhcmNoL3g4Ni9nJyAke0R9L29wdC9sc2ItdGVzdC9zZXNzaW9uCisJZmkKKwlpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAieDg2XzY0IiBdO3RoZW4KKwkJc2VkIC1pIC1lICdzL2xzYmFyY2gvYW1kNjQvZycgLWUgJ3MvdGFyZ2V0YXJjaC94ODZfNjQvZycgJHtEfS9vcHQvbHNiLXRlc3QvcGFja2FnZXNfbGlzdAorCQlzZWQgLWkgLWUgJ3MvdGFyZ2V0YXJjaC94ODYtNjQvZycgJHtEfS9vcHQvbHNiLXRlc3Qvc2Vzc2lvbgorCWZpCisJaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gInBvd2VycGMiIF07dGhlbgorCQlzZWQgLWkgLWUgJ3MvbHNiYXJjaC9wcGMzMi9nJyAtZSAncy90YXJnZXRhcmNoL3BwYy9nJyAke0R9L29wdC9sc2ItdGVzdC9wYWNrYWdlc19saXN0CisJCXNlZCAtaSAtZSAncy90YXJnZXRhcmNoL1BQQzMyL2cnICR7RH0vb3B0L2xzYi10ZXN0L3Nlc3Npb24KKwlmaQorCisJIyBGb3IgYSBwcGM2NCB0YXJnZXQuIHRoZSBkZWZhdWx0IHVzZXJzcGFjZSBpcyAzMmIuCisJIyBUaGVyZWZvcmUsIG9ubHkgY2hhbmdlIHRoZSBsc2JhcmNoIGFuZCB0YXJnZXRhcmNoCisJIyBpbiB0aGUgcGFja2FnZV9saXN0IHdoZW4gTUxJQj1saWI2NCBpcyBiZWluZyB1c2VkLgorCSMgT3RoZXJ3aXNlLCBieSBkZWZhdWx0LCB0aGUgcHBjMzIgTFNCIHBhY2thZ2VzCisJIyB3aWxsIGJlIGRvd25sb2FkZWQgYnkgTFNCX1Rlc3Quc2gKKwlpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYzY0IiBdO3RoZW4KKwkJaWYgWyAiJHtQTn0iICE9ICIke0JQTn0iIF07dGhlbgorCQkJc2VkIC1pIC1lICdzL2xzYmFyY2gvcHBjNjQvZycgLWUgJ3MvdGFyZ2V0YXJjaC9wcGM2NC9nJyAke0R9L29wdC9sc2ItdGVzdC9wYWNrYWdlc19saXN0CisJCQlzZWQgLWkgLWUgJ3MvdGFyZ2V0YXJjaC9QUEM2NC9nJyAke0R9L29wdC9sc2ItdGVzdC9zZXNzaW9uCisJCWZpCisJZmkKK30KKworRklMRVNfJHtQTn0gKz0gIi9vcHQvbHNiLXRlc3QvKiBcCisgICAgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc29mL2xzb2ZfNC44OS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzb2YvbHNvZl80Ljg5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliN2RlOWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc29mL2xzb2ZfNC44OS5iYgpAQCAtMCwwICsxLDU3IEBACitTVU1NQVJZID0gIkxpU3QgT3BlbiBGaWxlcyB0b29sIgorREVTQ1JJUFRJT04gPSAiTHNvZiBpcyBhIFVuaXgtc3BlY2lmaWMgZGlhZ25vc3RpYyB0b29sLiBcCitJdHMgbmFtZSBzdGFuZHMgZm9yIExpU3QgT3BlbiBGaWxlcywgYW5kIGl0IGRvZXMganVzdCB0aGF0LiIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkJTRCIKKworU1JDX1VSSSA9ICJmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mL2xzb2ZfJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gIjFiOWNkMzRmM2ZiODY4NTZhMTI1YWJiZjJiZTNhMzg2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgxYWMyZmM1ZmRjOTQ0NzkzYmFmNDFhMTQwMDJiNmRlYjVhMjkwOTZiMzg3NzQ0ZTI4ZjhjMzBhMzYwYTM3MTgiCisKK0xPQ0FMU1JDID0gImZpbGU6Ly8ke1dPUktESVJ9L2xzb2ZfJHtQVn0vbHNvZl8ke1BWfV9zcmMudGFyIgorUyA9ICIke1dPUktESVJ9L2xzb2ZfJHtQVn1fc3JjIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke1N9LzAwUkVBRE1FO2JlZ2lubGluZT02NDU7ZW5kbGluZT02Nzk7bWQ1PTk2NGRmMjc1ZDI2NDI5YmEzYjM5ZGJiOWYyMDUxNzJhIgorCitweXRob24gZG9fdW5wYWNrICgpIHsKKyAgICAjIHRlbXBvcmFyaWx5IGNoYW5nZSBTIGZvciB1bnBhY2sKKyAgICAjIG9mIGxzb2ZfJHtQVn0KKyAgICBzID0gZC5nZXRWYXIoJ1MnLCBGYWxzZSkKKyAgICBkLnNldFZhcignUycsICcke1dPUktESVJ9L2xzb2ZfJHtQVn0nKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnYmFzZV9kb191bnBhY2snLCBkKQorICAgICMgdGVtcG9yYXJpbHkgY2hhbmdlIFNSQ19VUkkgZm9yIHVucGFjaworICAgICMgb2YgbHNvZl8ke1BWfV9zcmMKKyAgICBzcmNfdXJpID0gZC5nZXRWYXIoJ1NSQ19VUkknLCBGYWxzZSkKKyAgICBkLnNldFZhcignU1JDX1VSSScsICcke0xPQ0FMU1JDfScpCisgICAgZC5zZXRWYXIoJ1MnLCBzKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnYmFzZV9kb191bnBhY2snLCBkKQorICAgIGQuc2V0VmFyKCdTUkNfVVJJJywgc3JjX3VyaSkKK30KKworZXhwb3J0IExTT0ZfSU5DTFVERSA9ICIke1NUQUdJTkdfSU5DRElSfSIKKworZG9fY29uZmlndXJlICgpIHsKKwlleHBvcnQgTFNPRl9BUj0iJHtBUn0gY3IiCisJZXhwb3J0IExTT0ZfUkFOTElCPSIke1JBTkxJQn0iCisgICAgICAgIGlmIFsgIngke0dMSUJDVkVSU0lPTn0iICE9ICJ4IiBdO3RoZW4KKyAgICAgICAgICAgICAgICBMSU5VWF9DTElCPWBlY2hvICR7R0xJQkNWRVJTSU9OfSB8c2VkIC1lICdzLFwuLCxnJ2AKKyAgICAgICAgICAgICAgICBMSU5VWF9DTElCPSItREdMSUJDVj0ke0xJTlVYX0NMSUJ9IgorICAgICAgICAgICAgICAgIGV4cG9ydCBMSU5VWF9DTElCCisgICAgICAgIGZpCisJeWVzIHwgLi9Db25maWd1cmUgbGludXgKK30KKworZXhwb3J0IEkgPSAiJHtTVEFHSU5HX0lOQ0RJUn0iCitleHBvcnQgTCA9ICIke1NUQUdJTkdfSU5DRElSfSIKK2V4cG9ydCBFWFRSQV9PRU1BS0UgPSAiIgorCitkb19jb21waWxlICgpIHsKKwlvZV9ydW5tYWtlICdDQz0ke0NDfScgJ0NGR0w9JHtMREZMQUdTfSAtTC4vbGliIC1sbHNvZicgJ0RFQlVHPScgJ0lOQ0w9JHtDRkxBR1N9JworfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9ICR7RH0ke21hbmRpcn0vbWFuOAorCWluc3RhbGwgLW0gNDc1NSBsc29mICR7RH0ke3NiaW5kaXJ9L2xzb2YKKwlpbnN0YWxsIC1tIDA2NDQgbHNvZi44ICR7RH0ke21hbmRpcn0vbWFuOC9sc29mLjgKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwMS1SZW5hbWUtcnVudGVzdHNfbm9sdHAuc2gtc2NyaXB0LXNvLWhhdmUtdW5pcXVlLW5hbWUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDEtUmVuYW1lLXJ1bnRlc3RzX25vbHRwLnNoLXNjcmlwdC1zby1oYXZlLXVuaXF1ZS1uYW1lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNGQyMzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDEtUmVuYW1lLXJ1bnRlc3RzX25vbHRwLnNoLXNjcmlwdC1zby1oYXZlLXVuaXF1ZS1uYW1lLnBhdGNoCkBAIC0wLDAgKzEsMjAyIEBACitGcm9tIDk3NTFhNjUyNmNmZmNkZjRlM2RjMmNiMzM2NDEyNTlhN2JlMDBlMTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDcgRGVjIDIwMTMgMTg6MjQ6MzIgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gUmVuYW1lIHJ1bnRlc3RzX25vbHRwLnNoIHNjcmlwdCBzbyBoYXZlIHVuaXF1ZSBuYW1lCisKKyogdGhleSBhcmUgaW5zdGFsbGVkIGluIHRoZSBzYW1lIHRhcmdldCBwYXRoCisgIC9vcHQvbHRwL3Rlc3RjYXNlcy9iaW4vcnVudGVzdHNfbm9sdHAuc2gKKyAgYW5kIG92ZXJ3cml0ZSBlYWNoIG90aGVyIGluIG5vbi1kZXRlcm1pbmlzdGljIHdheQorICB3aGVuIG11bHRpcGxlIHByb2Nlc3NlcyBhcmUgdXNlZCBpbiAibWFrZSBpbnN0YWxsIgorCisgIC4vdGVtcC9sb2cuZG9faW5zdGFsbDppbnN0YWxsIC1tIDAwNzc1CisgICAgImx0cC8yMDEyMDkwMy1yMi9sdHAtMjAxMjA5MDMvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3N5c3ZpcGMvcnVudGVzdHNfbm9sdHAuc2giCisgICAgImx0cC8yMDEyMDkwMy1yMi9pbWFnZS9vcHQvbHRwL3Rlc3RjYXNlcy9iaW4vcnVudGVzdHNfbm9sdHAuc2giCisgIC4vdGVtcC9sb2cuZG9faW5zdGFsbDppbnN0YWxsIC1tIDAwNzc1CisgICAgImx0cC8yMDEyMDkwMy1yMi9sdHAtMjAxMjA5MDMvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3V0c25hbWUvcnVudGVzdHNfbm9sdHAuc2giCisgICAgImx0cC8yMDEyMDkwMy1yMi9pbWFnZS9vcHQvbHRwL3Rlc3RjYXNlcy9iaW4vcnVudGVzdHNfbm9sdHAuc2giCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyAuLi4va2VybmVsL2NvbnRhaW5lcnMvc3lzdmlwYy9ydW5pcGN0ZXN0c19ub2x0cC5zaCB8IDMxICsrKysrKysrKysrKysrKysKKyAuLi4va2VybmVsL2NvbnRhaW5lcnMvc3lzdmlwYy9ydW50ZXN0c19ub2x0cC5zaCAgICB8IDMxIC0tLS0tLS0tLS0tLS0tLS0KKyAuLi4va2VybmVsL2NvbnRhaW5lcnMvdXRzbmFtZS9ydW50ZXN0c19ub2x0cC5zaCAgICB8IDQxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAuLi4va2VybmVsL2NvbnRhaW5lcnMvdXRzbmFtZS9ydW51dHN0ZXN0c19ub2x0cC5zaCB8IDQxICsrKysrKysrKysrKysrKysrKysrKysKKyA0IGZpbGVzIGNoYW5nZWQsIDcyIGluc2VydGlvbnMoKyksIDcyIGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvc3lzdmlwYy9ydW5pcGN0ZXN0c19ub2x0cC5zaAorIGRlbGV0ZSBtb2RlIDEwMDY0NCB0ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvc3lzdmlwYy9ydW50ZXN0c19ub2x0cC5zaAorIGRlbGV0ZSBtb2RlIDEwMDc1NSB0ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvdXRzbmFtZS9ydW50ZXN0c19ub2x0cC5zaAorIGNyZWF0ZSBtb2RlIDEwMDc1NSB0ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvdXRzbmFtZS9ydW51dHN0ZXN0c19ub2x0cC5zaAorCitkaWZmIC0tZ2l0IGEvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3N5c3ZpcGMvcnVuaXBjdGVzdHNfbm9sdHAuc2ggYi90ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvc3lzdmlwYy9ydW5pcGN0ZXN0c19ub2x0cC5zaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjg0ZjM5OGYKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bmlwY3Rlc3RzX25vbHRwLnNoCitAQCAtMCwwICsxLDMxIEBACisrIyEvYmluL3NoCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDcgICAgICAgICAgICAgICAgICMjCisrIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZCNvciBtb2RpZnkgICAgICAjIworKyMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICAgICMjCisrIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgICAgIyMKKysjIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCisrIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCAgICAgICAgIyMKKysjIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSAjIworKyMjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICMjCisrIyMgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICAgICMjCisrIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07ICBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICAgIyMKKysjIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBICAgICMjCisrIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKworK2V4aXRfY29kZT0wCisrZWNobyAic3lzdmlwYyB0ZXN0cyIKKytmb3IgdHlwZSBpbiBub25lIGNsb25lIHVuc2hhcmU7IGRvCisrICAgICAgZWNobyAiKipzeXN2aXBjICR0eXBlIgorKyAgICAgIC4vc2htbnN0ZXN0X25vbHRwICR0eXBlCisrICAgICAgaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisrICAgICAgICAgICAgICBleGl0X2NvZGU9JD8KKysgICAgICBmaQorK2RvbmUKKytleGl0ICRleGl0X2NvZGUKK2RpZmYgLS1naXQgYS90ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvc3lzdmlwYy9ydW50ZXN0c19ub2x0cC5zaCBiL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bnRlc3RzX25vbHRwLnNoCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDg0ZjM5OGYuLjAwMDAwMDAKKy0tLSBhL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bnRlc3RzX25vbHRwLnNoCisrKysgL2Rldi9udWxsCitAQCAtMSwzMSArMCwwIEBACistIyEvYmluL3NoCistIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKy0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDcgICAgICAgICAgICAgICAgICMjCistIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKy0jIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZCNvciBtb2RpZnkgICAgICAjIworLSMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICAgICMjCistIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgICAgIyMKKy0jIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCAgICAgICAgIyMKKy0jIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSAjIworLSMjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICMjCistIyMgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKy0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICAgICMjCistIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07ICBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICAgIyMKKy0jIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBICAgICMjCistIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKy0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLQorLWV4aXRfY29kZT0wCistZWNobyAic3lzdmlwYyB0ZXN0cyIKKy1mb3IgdHlwZSBpbiBub25lIGNsb25lIHVuc2hhcmU7IGRvCistICAgICAgZWNobyAiKipzeXN2aXBjICR0eXBlIgorLSAgICAgIC4vc2htbnN0ZXN0X25vbHRwICR0eXBlCistICAgICAgaWYgWyAkPyAtbmUgMCBdOyB0aGVuCistICAgICAgICAgICAgICBleGl0X2NvZGU9JD8KKy0gICAgICBmaQorLWRvbmUKKy1leGl0ICRleGl0X2NvZGUKK2RpZmYgLS1naXQgYS90ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvdXRzbmFtZS9ydW50ZXN0c19ub2x0cC5zaCBiL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnRlc3RzX25vbHRwLnNoCitkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKK2luZGV4IDQzY2I3ZTIuLjAwMDAwMDAKKy0tLSBhL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnRlc3RzX25vbHRwLnNoCisrKysgL2Rldi9udWxsCitAQCAtMSw0MSArMCwwIEBACistIyEvYmluL3NoCistIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKy0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDcgICAgICAgICAgICAgICAgICMjCistIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKy0jIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZCNvciBtb2RpZnkgICAgICAjIworLSMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICAgICMjCistIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgICAgIyMKKy0jIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCAgICAgICAgIyMKKy0jIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSAjIworLSMjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICMjCistIyMgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKy0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICAgICMjCistIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07ICBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICAgIyMKKy0jIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBICAgICMjCistIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKy0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLQorLW9sZGhvc3RuYW1lPWBob3N0bmFtZWAKKy1leGl0X2NvZGU9MAorLWVjaG8gInVuc2hhcmUgdGVzdHMiCistZm9yIGkgaW4gYHNlcSAxIDVgOyBkbworLQllY2hvICJ0ZXN0ICRpICh1bnNoYXJlKSIKKy0JLi91dHN0ZXN0X25vbHRwIHVuc2hhcmUgJGkKKy0JaWYgWyAkPyAtbmUgMCBdOyB0aGVuCistCQlleGl0X2NvZGU9JD8KKy0JZmkKKy1kb25lCistZWNobyAiY2xvbmUgdGVzdHMiCistZm9yIGkgaW4gYHNlcSAxIDVgOyBkbworLQllY2hvICJ0ZXN0ICRpIChjbG9uZSkiCistCS4vdXRzdGVzdF9ub2x0cCBjbG9uZSAkaQorLQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKy0JCWV4aXRfY29kZT0kPworLQlmaQorLWRvbmUKKy1ob3N0bmFtZSAiJG9sZGhvc3RuYW1lIgorLWV4aXQgJGV4aXRfY29kZQorZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnV0c3Rlc3RzX25vbHRwLnNoIGIvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3V0c25hbWUvcnVudXRzdGVzdHNfbm9sdHAuc2gKK25ldyBmaWxlIG1vZGUgMTAwNzU1CitpbmRleCAwMDAwMDAwLi40M2NiN2UyCistLS0gL2Rldi9udWxsCisrKysgYi90ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvdXRzbmFtZS9ydW51dHN0ZXN0c19ub2x0cC5zaAorQEAgLTAsMCArMSw0MSBAQAorKyMhL2Jpbi9zaAorKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyBDb3B5cmlnaHQgKGMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDA3ICAgICAgICAgICAgICAgICAjIworKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCisrIyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQjb3IgbW9kaWZ5ICAgICAgIyMKKysjIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAgICAjIworKyMjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICAgICMjCisrIyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgICAgICAgICMjCisrIyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgIyMKKysjIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAjIworKyMjIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCisrIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAgICAjIworKyMjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyAgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICAgICAgICAgICAgICMjCisrIyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQSAgICAjIworKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysKKytvbGRob3N0bmFtZT1gaG9zdG5hbWVgCisrZXhpdF9jb2RlPTAKKytlY2hvICJ1bnNoYXJlIHRlc3RzIgorK2ZvciBpIGluIGBzZXEgMSA1YDsgZG8KKysJZWNobyAidGVzdCAkaSAodW5zaGFyZSkiCisrCS4vdXRzdGVzdF9ub2x0cCB1bnNoYXJlICRpCisrCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorKwkJZXhpdF9jb2RlPSQ/CisrCWZpCisrZG9uZQorK2VjaG8gImNsb25lIHRlc3RzIgorK2ZvciBpIGluIGBzZXEgMSA1YDsgZG8KKysJZWNobyAidGVzdCAkaSAoY2xvbmUpIgorKwkuL3V0c3Rlc3Rfbm9sdHAgY2xvbmUgJGkKKysJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisrCQlleGl0X2NvZGU9JD8KKysJZmkKKytkb25lCisraG9zdG5hbWUgIiRvbGRob3N0bmFtZSIKKytleGl0ICRleGl0X2NvZGUKKy0tIAorMS44LjQuMworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDEtbHRwLXZtYTAzLWZpeC10aGUtYWxnaW5tZW50LW9mLXBhZ2Utc2l6ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwMS1sdHAtdm1hMDMtZml4LXRoZS1hbGdpbm1lbnQtb2YtcGFnZS1zaXplLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNWVhZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDEtbHRwLXZtYTAzLWZpeC10aGUtYWxnaW5tZW50LW9mLXBhZ2Utc2l6ZS5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIDI0Mzg4MWQ3MWQyZDQ5MDI3YzNkYzE1ZmUyN2ViZTdmNGVlNjg3MDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDaHVhbmcgRG9uZyA8Q2h1YW5nLkRvbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMTAgSnVuIDIwMTUgMDk6NTE6MDkgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gbHRwOiB2bWEwMyBmaXggdGhlIGFsZ2lubWVudCBvZiBwYWdlIHNpemUKKwordGhlIG9mZnNldCB0aGUgcGFyYW0gb2YgbW1hcDIoKSBkb2Vzbid0IGFsaWduIHRoZSBwYWdlIHNpemUsIGJ1dCwKK3RoaXMgcGFyYW0gYWxsb3cgbXVzdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBwYWdlIHNpemUgYXMgcmV0dXJuZWQKK2J5IHN5c2NvbmYoX1NDX1BBR0VfU0laRSkubWVhbndoaWxlIG9mZnNldCAqIDQwOTYgbXVzdCBiZSBhCittdWx0aXBsZSBvZiB0aGUgc3lzdGVtIHBhZ2Ugc2l6ZSwgc28gbW9kaWZ5IHRoZSBpbnB1dCBwYXJhbSBvZiBvZmZzZXQKK3Bnb2ZmID0gKFVMT05HX01BWCAtIDEpJih+KChwZ3N6LTEpPj4xMikpOworCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBDaHVhbmcgRG9uZyA8Q2h1YW5nLkRvbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHRlc3RjYXNlcy9rZXJuZWwvbWVtL3ZtYS92bWEwMy5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdGVzdGNhc2VzL2tlcm5lbC9tZW0vdm1hL3ZtYTAzLmMgYi90ZXN0Y2FzZXMva2VybmVsL21lbS92bWEvdm1hMDMuYworaW5kZXggNmFmOTk2MC4uYjg2ZDdjZSAxMDA2NDQKKy0tLSBhL3Rlc3RjYXNlcy9rZXJuZWwvbWVtL3ZtYS92bWEwMy5jCisrKysgYi90ZXN0Y2FzZXMva2VybmVsL21lbS92bWEvdm1hMDMuYworQEAgLTg5LDcgKzg5LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJCWlmIChmZCA9PSAtMSkKKyAJCQl0c3RfYnJrbShUQlJPSyB8IFRFUlJOTywgTlVMTCwgIm9wZW4gJXMiLCBURVNURklMRSk7CisgCistCQlwZ29mZiA9IFVMT05HX01BWCAtIDE7CisrCQlwZ29mZiA9IChVTE9OR19NQVggLSAxKSYofigocGdzei0xKT4+MTIpKTsKKyAJCW1hcCA9IG1tYXAyKE5VTEwsIHBnc3osIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9QUklWQVRFLAorIAkJCSAgICBmZCwgcGdvZmYpOworIAkJaWYgKG1hcCA9PSBNQVBfRkFJTEVEKQorLS0gCisxLjguNS4yLjIzMy5nOTMyZjdlNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwL2FkZC1rbm9iLWZvci1udW1hLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC9hZGQta25vYi1mb3ItbnVtYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjRmMDBhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC9hZGQta25vYi1mb3ItbnVtYS5wYXRjaApAQCAtMCwwICsxLDM5IEBACitbUEFUQ0hdIGFkZCBrbm9iIHRvIGNvbnRyb2wgd2hldGhlciBudW1hIHN1cHBvcnQgc2hvdWxkIGJlIGNoZWNrZWQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK290aGVyd2lzZSB0aGUgcmFuZG9tIGRlcGVuZGVuY3kgd2lsbCBiZSBnZW5lcmF0ZWQKKworU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEwICstCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA5ZjM5N2U3Li4xMzU3MjU2IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xNDIsNiArMTQyLDEyIEBAIGVsc2UKKyAgICAgQUNfU1VCU1QoW1dJVEhfUkVBTFRJTUVfVEVTVFNVSVRFXSxbIm5vIl0pCisgZmkKKyAKKytBQ19BUkdfV0lUSChbbnVtYV0sCisrICBBQ19IRUxQX1NUUklORyhbLS13aXRob3V0LW51bWFdLAorKyAgICBbd2l0aG91dCB0aGUgbnVtYSBzdXBwb3J0XSksCisrICBbXSxbd2l0aF9udW1hPXllc10sCisrKQorKworIEFDX0NPTkZJR19TVUJESVJTKFt1dGlscy9mZnNiLTYuMC1yYzJdKQorIAorICMgRU5EIHRlc3RzdWl0ZXMga25vYnMKK0BAIC0xNTksNyArMTY1LDkgQEAgTFRQX0NIRUNLX1NJR05BTAorIExUUF9DSEVDS19TWVNDQUxMX0VWRU5URkQKKyBMVFBfQ0hFQ0tfU1lTQ0FMTF9LRVlDVEwKKyBMVFBfQ0hFQ0tfU1lTQ0FMTF9NT0RJRllfTERUCisraWYgdGVzdCAieCR3aXRoX251bWEiID0geHllczsgdGhlbgorIExUUF9DSEVDS19TWVNDQUxMX05VTUEKKytmaQorIExUUF9DSEVDS19TWVNDQUxMX1FVT1RBQ1RMCisgTFRQX0NIRUNLX1NZU0NBTExfU0lHTkFMRkQKKyBMVFBfQ0hFQ0tfU1lTQ0FMTF9VTlNIQVJFCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvYWRkLWtub2ItZm9yLXRpcnBjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC9hZGQta25vYi1mb3ItdGlycGMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZmZjRjNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvYWRkLWtub2ItZm9yLXRpcnBjLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK1tQQVRDSF0gYWRkIGtub2IgdG8gY29udHJvbCB3aGV0aGVyIHRpcnBjIHN1cHBvcnQgc2hvdWxkIGJlIGNoZWNrZWQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK3RpcnBjIHN1cHBvcnQgaXMgYnJva2VuIHVwc3RyZWFtLiBpbiB0aGUgbWVhbnRpbWUsIGFsbG93IHRvIGRpc2FibGUgdGlycGMuCisKK1NpZ25lZC1vZmYtYnk6IEZhdGhpIEJvdWRyYSA8ZmF0aGkuYm91ZHJhQGxpbmFyby5vcmc+CistLS0KKyBjb25maWd1cmUuYWMgfCAgICA5ICsrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC05OCw2ICs5OCwxMyBAQCBpZiB0ZXN0ICJ4JHdpdGhfcHl0aG9uIiA9IHh5ZXM7IHRoZW4KKyBlbHNlCisgICAgIEFDX1NVQlNUKFtXSVRIX1BZVEhPTl0sWyJubyJdKQorIGZpCisrCisrIyBUSSBSUEMKKytBQ19BUkdfV0lUSChbdGlycGNdLAorKyAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC10aXJwY10sCisrICAgIFt3aXRob3V0IGxpYnRpcnBjIHN1cHBvcnRdKSwKKysgIFtdLFt3aXRoX3RpcnBjPXllc10sCisrKQorICMgRU5EIHRvb2xzIGtub2JzCisgCisgIyBUZXN0c3VpdGVzIGtub2JzCitAQCAtMTgyLDcgKzE4OSw5IEBAIExUUF9DSEVDS19SRU5BTUVBVAorIExUUF9DSEVDS19GQUxMT0NBVEUKKyBMVFBfQ0hFQ0tfU1lTQ0FMTF9GQ05UTAorIExUUF9DSEVDS19TWVNDQUxMX1BFUkZfRVZFTlRfT1BFTgorK2lmIHRlc3QgIngkd2l0aF90aXJwYyIgPSB4eWVzOyB0aGVuCisgTFRQX0NIRUNLX1RJUlBDCisrZmkKKyBMVFBfQ0hFQ0tfVEVFCisgTFRQX0NIRUNLX1NQTElDRQorIExUUF9DSEVDS19WTVNQTElDRQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC9sdHAtRG8tbm90LWxpbmstYWdhaW5zdC1saWJmbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvbHRwLURvLW5vdC1saW5rLWFnYWluc3QtbGliZmwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmZDRjMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvbHRwLURvLW5vdC1saW5rLWFnYWluc3QtbGliZmwucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSA1YmRhOWMwYWY1Njg2OWM2ZmYyYzI1ZDM4ZWEwODcxNzljOTQ2YmM2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDExIE1hciAyMDE0IDE0OjQ3OjIyICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGx0cDogRG9uJ3QgbGluayBhZ2FpbnN0IGxpYmZsCisKK1dlIGhhdmUgYWxyZWFkeSBkZWZpbmVkIHl5d3JhcCBmdW5jdGlvbiBpbiBzY2FuLmwgZmlsZS4gQWZ0ZXIgdGhpcywgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8KK2xpbmsgYWdhaW5zdCBsaWJmbCBhbmQgc28gbm8gbG9uZ2VyIGdldCBlcnJvcnMgYWJvdXQgdW5kZWZpbmVkIHJlZmVyZW5jZXMgdG8geXlsZXguCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIHBhbi9NYWtlZmlsZSB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3Bhbi9NYWtlZmlsZSBiL3Bhbi9NYWtlZmlsZQoraW5kZXggNGNjNjQ2Ni4uYTRiNTc1YiAxMDA2NDQKKy0tLSBhL3Bhbi9NYWtlZmlsZQorKysrIGIvcGFuL01ha2VmaWxlCitAQCAtMzEsNyArMzEsNyBAQCBDUFBGTEFHUwkJKz0gLVduby1lcnJvcgorIAorIENQUEZMQUdTCQkrPSAtSSQoYWJzX3NyY2RpcikKKyAKKy1MRExJQlMJCQkrPSAtbG0gJChMRVhMSUIpCisrTERMSUJTCQkJKz0gLWxtCisgCisgTEZMQUdTCQkJKz0gLWwKKyAKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwL21ha2Utc2V0cmVnaWQwMi13b3JrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC9tYWtlLXNldHJlZ2lkMDItd29yay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODM2MDEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC9tYWtlLXNldHJlZ2lkMDItd29yay5wYXRjaApAQCAtMCwwICsxLDYxIEBACitbUEFUQ0hdIG1ha2Ugc2V0cmVnaWQwMiB3b3JrCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKwordGhlcmUgaXMgbm8gIm5vYm9keSIgZ3JvdXAgaW4gb2UtY29yZSwgdGhlIHVzZXIgIm5vYm9keSIgYmVsb25ncyB0bworIm5vZ3JvdXAiIGdyb3VwLCBzbyByZXBsYWNlIG5vYm9keSB3aXRoIG5vZ3JvdXAgdG8gbWFrZSB0aGUgdGVzdCBwYXNzCisKK1NpZ25lZC1vZmYtYnk6IFJveS5MaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIHRlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvc2V0cmVnaWQvc2V0cmVnaWQwMi5jIHwgMTYgKysrKysrKystLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL3NldHJlZ2lkL3NldHJlZ2lkMDIuYyBiL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvc2V0cmVnaWQvc2V0cmVnaWQwMi5jCitpbmRleCA4MDU4NjI3Li44NjZiZWU0IDEwMDY0NAorLS0tIGEvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9zZXRyZWdpZC9zZXRyZWdpZDAyLmMKKysrKyBiL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvc2V0cmVnaWQvc2V0cmVnaWQwMi5jCitAQCAtNDEsNyArNDEsNyBAQCBzdGF0aWMgZ2lkX3QgbmVnX29uZSA9IC0xOworIAorIHN0YXRpYyBzdHJ1Y3QgcGFzc3dkICpsdHB1c2VyOworIAorLXN0YXRpYyBzdHJ1Y3QgZ3JvdXAgbm9ib2R5LCByb290LCBiaW47Cisrc3RhdGljIHN0cnVjdCBncm91cCBub2dyb3VwLCByb290LCBiaW47CisgCisgLyoKKyAgKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSBjb250YWlucyBhbGwgdGVzdCBkYXRhLiAgRWFjaCBzdHJ1Y3R1cmUgaW4gdGhlIGFycmF5CitAQCAtNTcsMTcgKzU3LDE3IEBAIHN0cnVjdCB0ZXN0X2RhdGFfdCB7CisgCWNoYXIgKnRlc3RfbXNnOworIH0gdGVzdF9kYXRhW10gPSB7CisgCXsKKy0JJm5lZ19vbmUsICZyb290LmdyX2dpZCwgRVBFUk0sICZub2JvZHksICZub2JvZHksCisrCSZuZWdfb25lLCAmcm9vdC5ncl9naWQsIEVQRVJNLCAmbm9ncm91cCwgJm5vZ3JvdXAsCisgCQkgICAgIkFmdGVyIHNldHJlZ2lkKC0xLCByb290KSwifSwgeworLQkmbmVnX29uZSwgJmJpbi5ncl9naWQsIEVQRVJNLCAmbm9ib2R5LCAmbm9ib2R5LAorKwkmbmVnX29uZSwgJmJpbi5ncl9naWQsIEVQRVJNLCAmbm9ncm91cCwgJm5vZ3JvdXAsCisgCQkgICAgIkFmdGVyIHNldHJlZ2lkKC0xLCBiaW4pIn0sIHsKKy0JJnJvb3QuZ3JfZ2lkLCAmbmVnX29uZSwgRVBFUk0sICZub2JvZHksICZub2JvZHksCisrCSZyb290LmdyX2dpZCwgJm5lZ19vbmUsIEVQRVJNLCAmbm9ncm91cCwgJm5vZ3JvdXAsCisgCQkgICAgIkFmdGVyIHNldHJlZ2lkKHJvb3QsLTEpLCJ9LCB7CistCSZiaW4uZ3JfZ2lkLCAmbmVnX29uZSwgRVBFUk0sICZub2JvZHksICZub2JvZHksCisrCSZiaW4uZ3JfZ2lkLCAmbmVnX29uZSwgRVBFUk0sICZub2dyb3VwLCAmbm9ncm91cCwKKyAJCSAgICAiQWZ0ZXIgc2V0cmVnaWQoYmluLCAtMSksIn0sIHsKKy0JJnJvb3QuZ3JfZ2lkLCAmYmluLmdyX2dpZCwgRVBFUk0sICZub2JvZHksICZub2JvZHksCisrCSZyb290LmdyX2dpZCwgJmJpbi5ncl9naWQsIEVQRVJNLCAmbm9ncm91cCwgJm5vZ3JvdXAsCisgCQkgICAgIkFmdGVyIHNldHJlZ2lkKHJvb3QsIGJpbikifSwgeworLQkmYmluLmdyX2dpZCwgJnJvb3QuZ3JfZ2lkLCBFUEVSTSwgJm5vYm9keSwgJm5vYm9keSwKKysJJmJpbi5ncl9naWQsICZyb290LmdyX2dpZCwgRVBFUk0sICZub2dyb3VwLCAmbm9ncm91cCwKKyAJCSAgICAiQWZ0ZXIgc2V0cmVnaWQoYmluLCByb290KSwifQorIH07CisgCitAQCAtMTY1LDcgKzE2NSw3IEBAIHN0YXRpYyB2b2lkIHNldHVwKHZvaWQpCisgfSB3aGlsZSAoMCkKKyAKKyAJR0VUX0dJRChyb290KTsKKy0JR0VUX0dJRChub2JvZHkpOworKwlHRVRfR0lEKG5vZ3JvdXApOworIAlHRVRfR0lEKGJpbik7CisgCisgCVRFU1RfUEFVU0U7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHBfMjAxNTA0MjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwXzIwMTUwNDIwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwOGViZjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwXzIwMTUwNDIwLmJiCkBAIC0wLDAgKzEsODYgQEAKK1NVTU1BUlkgPSAiTGludXggVGVzdCBQcm9qZWN0IgorREVTQ1JJUFRJT04gPSAiVGhlIExpbnV4IFRlc3QgUHJvamVjdCBpcyBhIGpvaW50IHByb2plY3Qgd2l0aCBTR0ksIElCTSwgT1NETCwgYW5kIEJ1bGwgd2l0aCBhIGdvYWwgdG8gZGVsaXZlciB0ZXN0IHN1aXRlcyB0byB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IHRoYXQgdmFsaWRhdGUgdGhlIHJlbGlhYmlsaXR5LCByb2J1c3RuZXNzLCBhbmQgc3RhYmlsaXR5IG9mIExpbnV4LiBUaGUgTGludXggVGVzdCBQcm9qZWN0IGlzIGEgY29sbGVjdGlvbiBvZiB0b29scyBmb3IgdGVzdGluZyB0aGUgTGludXgga2VybmVsIGFuZCByZWxhdGVkIGZlYXR1cmVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9sdHAuc291cmNlZm9yZ2UubmV0IgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MiAmIEdQTHYyKyAmIExHUEx2MisgJiBMR1BMdjIuMSsgJiBCU0QtMi1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICBmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgIGZpbGU6Ly90ZXN0Y2FzZXMva2VybmVsL2NvbnRyb2xsZXJzL2ZyZWV6ZXIvQ09QWUlORzttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjMgXAorICAgIGZpbGU6Ly90ZXN0Y2FzZXMva2VybmVsL2NvbnRyb2xsZXJzL2ZyZWV6ZXIvcnVuX2ZyZWV6ZXIuc2g7YmVnaW5saW5lPTU7ZW5kbGluZT0xNzttZDU9ODZhNjFkMmMwNDJkNTk4MzZmZmIzNTNhMjE0NTY0OTggXAorICAgIGZpbGU6Ly90ZXN0Y2FzZXMva2VybmVsL2hvdHBsdWcvbWVtb3J5X2hvdHBsdWcvQ09QWUlORzttZDU9ZTA0YTJlNTQyYjJiODYyOWJmOWNkMmJhMjliMGZlNDEgXAorICAgIGZpbGU6Ly90ZXN0Y2FzZXMva2VybmVsL2hvdHBsdWcvY3B1X2hvdHBsdWcvQ09QWUlORzttZDU9ZTA0YTJlNTQyYjJiODYyOWJmOWNkMmJhMjliMGZlNDEgXAorICAgIGZpbGU6Ly90ZXN0Y2FzZXMvb3Blbl9wb3NpeF90ZXN0c3VpdGUvQ09QWUlORzttZDU9MjE2ZTQzYjcyZWZiZTRlZDkwMTdjYzE5YzRjNjhiMDEgXAorICAgIGZpbGU6Ly90ZXN0Y2FzZXMvcmVhbHRpbWUvQ09QWUlORzttZDU9MTJmODg0ZDJhZTFmZjg3YzA5ZTViN2NjYzJjNGNhN2UgXAorICAgIGZpbGU6Ly90b29scy9uZXRwaXBlLTIuNC9DT1BZSU5HO21kNT05ZTM3ODFiYjVmZTc4N2FhODBlMWY1MWY1MDA2YjZmYSBcCisgICAgZmlsZTovL3Rvb2xzL25ldHBpcGUtMi40LWlwdjYvQ09QWUlORzttZDU9OWUzNzgxYmI1ZmU3ODdhYTgwZTFmNTFmNTAwNmI2ZmEgXAorICAgIGZpbGU6Ly90b29scy90b3AtTFRQL3Byb2MvQ09QWUlORzttZDU9YWVmYzg4ZWI4YTQxNjcyZmJmY2ZlNmI2OWFiOGM0OWMgXAorICAgIGZpbGU6Ly90b29scy9wb3VuZGVyMjEvQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgIGZpbGU6Ly91dGlscy9iZW5jaG1hcmsva2VybmJlbmNoLTAuNDIvQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgIGZpbGU6Ly91dGlscy9mZnNiLTYuMC1yYzIvQ09QWUlORzttZDU9YzQ2MDgyMTY3YTMxNGQ3ODVkMDEyYTI0NDc0OGQ4MDMgXAorIgorCitERVBFTkRTID0gImF0dHIgbGliYWlvIGxpYmNhcCBhY2wgb3BlbnNzbCB6aXAtbmF0aXZlIgorU1JDUkVWID0gIjc3ZDBiN2ZkMDE0OGNlNjU3YzVhMjUwNjA2NjdlOTc4YzA3NjYyYTAiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9saW51eC10ZXN0LXByb2plY3QvbHRwLmdpdCBcCisgICAgZmlsZTovLzAwMDEtUmVuYW1lLXJ1bnRlc3RzX25vbHRwLnNoLXNjcmlwdC1zby1oYXZlLXVuaXF1ZS1uYW1lLnBhdGNoIFwKKyAgICBmaWxlOi8vbHRwLURvLW5vdC1saW5rLWFnYWluc3QtbGliZmwucGF0Y2ggXAorICAgIGZpbGU6Ly9tYWtlLXNldHJlZ2lkMDItd29yay5wYXRjaCBcCisgICAgZmlsZTovL2FkZC1rbm9iLWZvci1udW1hLnBhdGNoIFwKKyAgICBmaWxlOi8vYWRkLWtub2ItZm9yLXRpcnBjLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMS1sdHAtdm1hMDMtZml4LXRoZS1hbGdpbm1lbnQtb2YtcGFnZS1zaXplLnBhdGNoIFwKKyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK1RBUkdFVF9DQ19BUkNIICs9ICIke0xERkxBR1N9IgorCitleHBvcnQgcHJlZml4ID0gIi9vcHQvbHRwIgorZXhwb3J0IGV4ZWNfcHJlZml4ID0gIi9vcHQvbHRwIgorCitQQUNLQUdFQ09ORklHW251bWFdID0gIi0td2l0aC1udW1hLCAtLXdpdGhvdXQtbnVtYSwgbnVtYWN0bCwiCitFWFRSQV9BVVRPUkVDT05GICs9ICItSSAke1N9L3Rlc3RjYXNlcy9yZWFsdGltZS9tNCIKK0VYVFJBX09FQ09ORiA9ICIgLS13aXRoLXBvd2VyLW1hbmFnZW1lbnQtdGVzdHN1aXRlIC0td2l0aC1yZWFsdGltZS10ZXN0c3VpdGUgIgorIyBsdHAgbmV0d29yay9ycGMgdGVzdCBjYXNlcyBmdGJmcyB3aGVuIGxpYnRpcnBjIGlzIGZvdW5kCitFWFRSQV9PRUNPTkYgKz0gIiAtLXdpdGhvdXQtdGlycGMgIgorCisjIFRoZSBtYWtlZmlsZXMgbWFrZSBleGNlc3NpdmUgdXNlIG9mIG1ha2UgLUMgYW5kIHNldmVyYWwgaW5jbHVkZSB0ZXN0Y2FzZXMubWsKKyMgd2hpY2ggdHJpZ2dlcnMgYSBidWlsZCBvZiB0aGUgc3lzY2FsbCBoZWFkZXIuIFRvIHJlcHJvZHVjZSwgYnVpbGQgbHRwLAorIyB0aGVuIGRlbGV0ZSB0aGUgaGVhZGVyLCB0aGVuICJtYWtlIC1qIFhYIiBhbmQgd2F0Y2ggcmVnZW4uc2ggcnVuIG11bHRpcGxlCisjIHRpbWVzLiBJdHMgZWFzaWVyIHRvIGdlbmVyYXRlIHRoaXMgb25jZSBoZXJlIGluc3RlYWQuCitkb19jb21waWxlX3ByZXBlbmQgKCkgeworCSggbWFrZSAtQyAke0J9L3Rlc3RjYXNlcy9rZXJuZWwgaW5jbHVkZS9saW51eF9zeXNjYWxsX251bWJlcnMuaCApCit9CisKK2RvX2luc3RhbGwoKXsKKyAgICBpbnN0YWxsIC1kICR7RH0vb3B0L2x0cC8KKyAgICBvZV9ydW5tYWtlIERFU1RESVI9JHtEfSBTS0lQX0lEQ0hFQ0s9MSBpbnN0YWxsCisKKyAgICAjIENvcHkgUE9TSVggdGVzdCBzdWl0ZSBpbnRvICR7RH0vb3B0L2x0cC90ZXN0Y2FzZXMgYnkgbWFudWFsCisgICAgY3AgLXIgdGVzdGNhc2VzL29wZW5fcG9zaXhfdGVzdHN1aXRlICR7RH0vb3B0L2x0cC90ZXN0Y2FzZXMKK30KKworUkRFUEVORFNfJHtQTn0gPSAicGVybCBlMmZzcHJvZ3MtbWtlMmZzIHB5dGhvbi1jb3JlIGxpYmFpbyBiYXNoIGdhd2sgZXhwZWN0IgorCitGSUxFU18ke1BOfS1kYmcgKz0gIlwKKyAgICAvb3B0L2x0cC9ydW50ZXN0Ly5kZWJ1ZyBcCisgICAgL29wdC9sdHAvdGVzdGNhc2VzLyovLmRlYnVnIFwKKyAgICAvb3B0L2x0cC90ZXN0Y2FzZXMvKi8qLy5kZWJ1ZyBcCisgICAgL29wdC9sdHAvdGVzdGNhc2VzLyovKi8qLy5kZWJ1ZyBcCisgICAgL29wdC9sdHAvc2NlbmFyaW9fZ3JvdXBzLy5kZWJ1ZyBcCisgICAgL29wdC9sdHAvdGVzdHNjcmlwdHMvLmRlYnVnIFwKKyAgICAvb3B0L2x0cC90ZXN0c2NyaXB0cy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS8uZGVidWcgXAorIgorCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIi9vcHQvbHRwL2xpYi9saWJtZW0uYSIKKworRklMRVNfJHtQTn0gKz0gIi9vcHQvbHRwLyogL29wdC9sdHAvcnVudGVzdC8qIC9vcHQvbHRwL3NjZW5hcmlvX2dyb3Vwcy8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9iaW4vKiAvb3B0L2x0cC90ZXN0Y2FzZXMvYmluLyovYmluLyogL29wdC9sdHAvdGVzdHNjcmlwdHMvKiAvb3B0L2x0cC90ZXN0Y2FzZXMvb3Blbl9wb3NpeF90ZXN0c3VpdGUvKiAvb3B0L2x0cC90ZXN0Y2FzZXMvb3Blbl9wb3NpeF90ZXN0c3VpdGUvY29uZm9ybWFuY2UvKiAvb3B0L2x0cC90ZXN0Y2FzZXMvb3Blbl9wb3NpeF90ZXN0c3VpdGUvRG9jdW1lbnRhdGlvbi8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS9mdW5jdGlvbmFsLyogL29wdC9sdHAvdGVzdGNhc2VzL29wZW5fcG9zaXhfdGVzdHN1aXRlL2luY2x1ZGUvKiAvb3B0L2x0cC90ZXN0Y2FzZXMvb3Blbl9wb3NpeF90ZXN0c3VpdGUvc2NyaXB0cy8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS9zdHJlc3MvKiAvb3B0L2x0cC90ZXN0Y2FzZXMvb3Blbl9wb3NpeF90ZXN0c3VpdGUvdG9vbHMvKiIKKworIyBBdm9pZCBnZW5lcmF0ZWQgYmluYXJpZXMgc3RyaXBwaW5nLiBPdGhlcndpc2Ugc29tZSBvZiB0aGUgbHRwIHRlc3RzIHN1Y2ggYXMgbGRkMDEgJiBubTAxIGZhaWxzCitJTkhJQklUX1BBQ0tBR0VfU1RSSVAgPSAiMSIKK0lOSElCSVRfUEFDS0FHRV9ERUJVR19TUExJVCA9ICIxIgorIyBIb3dldmVyLCB0ZXN0X2FyY2hfc3RyaXBwZWQgaXMgYWxyZWFkeSBzdHJpcHBlZCwgc28uLi4KK0lOU0FORV9TS0lQXyR7UE59ICs9ICJhbHJlYWR5LXN0cmlwcGVkIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAxLURvbi10LXJldXNlLXdlYWstc3ltYm9sLW9wdG9wdC10by1maXgtRlRCRlMtb24tbWlwcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMDEtRG9uLXQtcmV1c2Utd2Vhay1zeW1ib2wtb3B0b3B0LXRvLWZpeC1GVEJGUy1vbi1taXBzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZGEzMzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAxLURvbi10LXJldXNlLXdlYWstc3ltYm9sLW9wdG9wdC10by1maXgtRlRCRlMtb24tbWlwcy5wYXRjaApAQCAtMCwwICsxLDU5IEBACitGcm9tOiBMdWsgQ2xhZXMgPGx1a0BkZWJpYW4ub3JnPgorRGF0ZTogU2F0LCA0IEp1bCAyMDA5IDEwOjU0OjUzICswMjAwCitTdWJqZWN0OiBEb24ndCByZXVzZSB3ZWFrIHN5bWJvbCBvcHRvcHQgdG8gZml4IEZUQkZTIG9uIG1pcHMqCisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbSAKK2Z0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vaC9oZWlybG9vbS1tYWlseC9oZWlybG9vbS1tYWlseF8xMi41LTUuZGViaWFuLnRhci54egorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIGlzIGRlYWRdCistLS0KKyBnZXRvcHQuYyB8ICAgMTAgKysrKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nZXRvcHQuYyBiL2dldG9wdC5jCitpbmRleCA4M2NlNjI4Li44MmU5ODNjIDEwMDY0NAorLS0tIGEvZ2V0b3B0LmMKKysrKyBiL2dldG9wdC5jCitAQCAtNDMsNyArNDMsNyBAQCB0eXBlZGVmCWludAlzc2l6ZV90OworIGNoYXIJKm9wdGFyZzsKKyBpbnQJb3B0aW5kID0gMTsKKyBpbnQJb3B0ZXJyID0gMTsKKy1pbnQJb3B0b3B0OworK2ludAlvcHRvcHRjOworIAorIHN0YXRpYyB2b2lkCisgZXJyb3IoY29uc3QgY2hhciAqcywgaW50IGMpCitAQCAtNjksNyArNjksNyBAQCBlcnJvcihjb25zdCBjaGFyICpzLCBpbnQgYykKKyAJCSpicCsrID0gKnMrKzsKKyAJd2hpbGUgKCptc2cpCisgCQkqYnArKyA9ICptc2crKzsKKy0JKmJwKysgPSBvcHRvcHQ7CisrCSpicCsrID0gb3B0b3B0YzsKKyAJKmJwKysgPSAnXG4nOworIAl3cml0ZSgyLCBidWYsIGJwIC0gYnVmKTsKKyAJYWNfZnJlZShidWYpOworQEAgLTEwMSwxMyArMTAxLDEzIEBAIGdldG9wdChpbnQgYXJnYywgY2hhciAqY29uc3QgYXJndltdLCBjb25zdCBjaGFyICpvcHRzdHJpbmcpCisgCQl9CisgCQljdXJwID0gJmFyZ3Zbb3B0aW5kXVsxXTsKKyAJfQorLQlvcHRvcHQgPSBjdXJwWzBdICYgMDM3NzsKKysJb3B0b3B0YyA9IGN1cnBbMF0gJiAwMzc3OworIAl3aGlsZSAob3B0c3RyaW5nWzBdKSB7CisgCQlpZiAob3B0c3RyaW5nWzBdID09ICc6JykgeworIAkJCW9wdHN0cmluZysrOworIAkJCWNvbnRpbnVlOworIAkJfQorLQkJaWYgKChvcHRzdHJpbmdbMF0gJiAwMzc3KSA9PSBvcHRvcHQpIHsKKysJCWlmICgob3B0c3RyaW5nWzBdICYgMDM3NykgPT0gb3B0b3B0YykgeworIAkJCWlmIChvcHRzdHJpbmdbMV0gPT0gJzonKSB7CisgCQkJCWlmIChjdXJwWzFdICE9ICdcMCcpIHsKKyAJCQkJCW9wdGFyZyA9IChjaGFyICopJmN1cnBbMV07CitAQCAtMTI3LDcgKzEyNyw3IEBAIGdldG9wdChpbnQgYXJnYywgY2hhciAqY29uc3QgYXJndltdLCBjb25zdCBjaGFyICpvcHRzdHJpbmcpCisgCQkJCQlvcHRpbmQrKzsKKyAJCQkJb3B0YXJnID0gMDsKKyAJCQl9CistCQkJcmV0dXJuIG9wdG9wdDsKKysJCQlyZXR1cm4gb3B0b3B0YzsKKyAJCX0KKyAJCW9wdHN0cmluZysrOworIAl9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAyLVBhdGNoZWQtb3V0LVNTTDItc3VwcG9ydC1zaW5jZS1pdC1pcy1uby1sb25nZXItc3VwcG8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAyLVBhdGNoZWQtb3V0LVNTTDItc3VwcG9ydC1zaW5jZS1pdC1pcy1uby1sb25nZXItc3VwcG8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJhZDQzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMDItUGF0Y2hlZC1vdXQtU1NMMi1zdXBwb3J0LXNpbmNlLWl0LWlzLW5vLWxvbmdlci1zdXBwby5wYXRjaApAQCAtMCwwICsxLDQxIEBACitGcm9tOiBIaWxrbyBCZW5nZW4gPGJlbmdlbkBkZWJpYW4ub3JnPgorRGF0ZTogV2VkLCAyNyBBcHIgMjAxMSAwMDoxODo0MiArMDIwMAorU3ViamVjdDogUGF0Y2hlZCBvdXQgU1NMMiBzdXBwb3J0IHNpbmNlIGl0IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgT3BlblNTTC4KKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS01LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorLS0tCisgbWFpbHguMSAgIHwgICAgMiArLQorIG9wZW5zc2wuYyB8ICAgIDQgKy0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbWFpbHguMSBiL21haWx4LjEKK2luZGV4IDQxN2VhMDQuLmEwMmU0MzAgMTAwNjQ0CistLS0gYS9tYWlseC4xCisrKysgYi9tYWlseC4xCitAQCAtMzU3NSw3ICszNTc1LDcgQEAgT25seSBhcHBsaWNhYmxlIGlmIFNTTC9UTFMgc3VwcG9ydCBpcyBidWlsdCB1c2luZyBPcGVuU1NMLgorIC5UUAorIC5CIHNzbC1tZXRob2QKKyBTZWxlY3RzIGEgU1NML1RMUyBwcm90b2NvbCB2ZXJzaW9uOworLXZhbGlkIHZhbHVlcyBhcmUgYHNzbDInLCBgc3NsMycsIGFuZCBgdGxzMScuCisrdmFsaWQgdmFsdWVzIGFyZSBgc3NsMycsIGFuZCBgdGxzMScuCisgSWYgdW5zZXQsIHRoZSBtZXRob2QgaXMgc2VsZWN0ZWQgYXV0b21hdGljYWxseSwKKyBpZiBwb3NzaWJsZS4KKyAuVFAKK2RpZmYgLS1naXQgYS9vcGVuc3NsLmMgYi9vcGVuc3NsLmMKK2luZGV4IGI0ZTMzZmMuLjQ0ZmU0ZTUgMTAwNjQ0CistLS0gYS9vcGVuc3NsLmMKKysrKyBiL29wZW5zc2wuYworQEAgLTIxNiw5ICsyMTYsNyBAQCBzc2xfc2VsZWN0X21ldGhvZChjb25zdCBjaGFyICp1aHApCisgCisgCWNwID0gc3NsX21ldGhvZF9zdHJpbmcodWhwKTsKKyAJaWYgKGNwICE9IE5VTEwpIHsKKy0JCWlmIChlcXVhbChjcCwgInNzbDIiKSkKKy0JCQltZXRob2QgPSBTU0x2Ml9jbGllbnRfbWV0aG9kKCk7CistCQllbHNlIGlmIChlcXVhbChjcCwgInNzbDMiKSkKKysJCWlmIChlcXVhbChjcCwgInNzbDMiKSkKKyAJCQltZXRob2QgPSBTU0x2M19jbGllbnRfbWV0aG9kKCk7CisgCQllbHNlIGlmIChlcXVhbChjcCwgInRsczEiKSkKKyAJCQltZXRob2QgPSBUTFN2MV9jbGllbnRfbWV0aG9kKCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAzLUZpeGVkLUxpbnRpYW4td2FybmluZy13YXJuaW5nLW1hY3JvLU4tbm90LWRlZmluZWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAzLUZpeGVkLUxpbnRpYW4td2FybmluZy13YXJuaW5nLW1hY3JvLU4tbm90LWRlZmluZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNiNzNhZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMDMtRml4ZWQtTGludGlhbi13YXJuaW5nLXdhcm5pbmctbWFjcm8tTi1ub3QtZGVmaW5lZC5wYXRjaApAQCAtMCwwICsxLDI1IEBACitGcm9tOiBIaWxrbyBCZW5nZW4gPGJlbmdlbkBkZWJpYW4ub3JnPgorRGF0ZTogU2F0LCAxNCBBcHIgMjAxMiAyMDoyMjo0MyArMDIwMAorU3ViamVjdDogRml4ZWQgTGludGlhbiB3YXJuaW5nICh3YXJuaW5nOiBtYWNybyBgTicgbm90IGRlZmluZWQpCisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUtNS5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KKy0tLQorIG1haWx4LjEgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9tYWlseC4xIGIvbWFpbHguMQoraW5kZXggYTAyZTQzMC4uYjA3MjNiZCAxMDA2NDQKKy0tLSBhL21haWx4LjEKKysrKyBiL21haWx4LjEKK0BAIC0zNzgxLDcgKzM3ODEsNyBAQCB5b3UgY291bGQgZXhhbWluZSB0aGUgZmlyc3QgbWVzc2FnZSBieSBnaXZpbmcgdGhlIGNvbW1hbmQ6CisgLnNwCisgLmZpCisgd2hpY2ggbWlnaHQgY2F1c2UKKy0uTiBtYWlseAorKy5JIG1haWx4CisgdG8gcmVzcG9uZCB3aXRoLCBmb3IgZXhhbXBsZToKKyAubmYKKyAuc3AKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTEtb3V0b2YtSW50cm9kdWNlLWV4cGFuZGFkZHItZmxhZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTEtb3V0b2YtSW50cm9kdWNlLWV4cGFuZGFkZHItZmxhZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDYxNjQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxMS1vdXRvZi1JbnRyb2R1Y2UtZXhwYW5kYWRkci1mbGFnLnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK0Zyb20gOTk4NGFlNWNiMGVhMGQ2MWRmMTYxMmIwNjk1MmE2MTMyM2MwODNkOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZsb3JpYW4gV2VpbWVyIDxmd2VpbWVyQHJlZGhhdC5jb20+CitEYXRlOiBNb24sIDE3IE5vdiAyMDE0IDExOjEzOjM4ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMS80XSBvdXRvZjogSW50cm9kdWNlIGV4cGFuZGFkZHIgZmxhZworCitEb2N1bWVudCB0aGF0IGFkZHJlc3MgZXhwYW5zaW9uIGlzIGRpc2FibGVkIHVubGVzcyB0aGUgZXhwYW5kYWRkcgorYmluYXJ5IG9wdGlvbiBpcyBzZXQuCisKK1RoaXMgaGFzIGJlZW4gYXNzaWduZWQgQ1ZFLTIwMTQtNzg0NCBmb3IgQlNEIG1haWx4LCBidXQgaXQgaXMgbm90CithIHZ1bG5lcmFiaWxpdHkgaW4gSGVpcmxvb20gbWFpbHggYmVjYXVzZSB0aGlzIGZlYXR1cmUgd2FzIGRvY3VtZW50ZWQuCisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUtNS5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KKy0tLQorIG1haWx4LjEgfCAxNCArKysrKysrKysrKysrKworIG5hbWVzLmMgfCAgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDE3IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21haWx4LjEgYi9tYWlseC4xCitpbmRleCA3MGE3ODU5Li4yMmExNzFiIDEwMDY0NAorLS0tIGEvbWFpbHguMQorKysrIGIvbWFpbHguMQorQEAgLTY1Niw2ICs2NTYsMTQgQEAgYnV0IGFueSByZXBseSByZXR1cm5lZCB0byB0aGUgbWFjaGluZQorIHdpbGwgaGF2ZSB0aGUgc3lzdGVtIHdpZGUgYWxpYXMgZXhwYW5kZWQKKyBhcyBhbGwgbWFpbCBnb2VzIHRocm91Z2ggc2VuZG1haWwuCisgLlNTICJSZWNpcGllbnQgYWRkcmVzcyBzcGVjaWZpY2F0aW9ucyIKKytJZiB0aGUKKysuSSBleHBhbmRhZGRyCisrb3B0aW9uIGlzIG5vdCBzZXQgKHRoZSBkZWZhdWx0KSwgcmVjaXBpZW50IGFkZHJlc3NlcyBtdXN0IGJlIG5hbWVzIG9mCisrbG9jYWwgbWFpbGJveGVzIG9yIEludGVybmV0IG1haWwgYWRkcmVzc2VzLgorKy5QUAorK0lmIHRoZQorKy5JIGV4cGFuZGFkZHIKKytvcHRpb24gaXMgc2V0LCB0aGUgZm9sbG93aW5nIHJ1bGVzIGFwcGx5OgorIFdoZW4gYW4gYWRkcmVzcyBpcyB1c2VkIHRvIG5hbWUgYSByZWNpcGllbnQKKyAoaW4gYW55IG9mIFRvLCBDYywgb3IgQmNjKSwKKyBuYW1lcyBvZiBsb2NhbCBtYWlsIGZvbGRlcnMKK0BAIC0yMzkxLDYgKzIzOTksMTIgQEAgYW5kIGV4aXRzIGltbWVkaWF0ZWx5LgorIElmIHRoaXMgb3B0aW9uIGlzIHNldCwKKyBcZkltYWlseFxmUiBzdGFydHMgZXZlbiB3aXRoIGFuIGVtcHR5IG1haWxib3guCisgLlRQCisrLkIgZXhwYW5kYWRkcgorK0NhdXNlcworKy5JIG1haWx4CisrdG8gZXhwYW5kIG1lc3NhZ2UgcmVjaXBpZW50IGFkZHJlc3NlcywgYXMgZXhwbGFpbmVkIGluIHRoZSBzZWN0aW9uLAorK1JlY2lwaWVudCBhZGRyZXNzIHNwZWNpZmljYXRpb25zLgorKy5UUAorIC5CIGZsaXByCisgRXhjaGFuZ2VzIHRoZQorIC5JIFJlc3BvbmQKK2RpZmYgLS1naXQgYS9uYW1lcy5jIGIvbmFtZXMuYworaW5kZXggNjZlOTc2Yi4uYzY5NTYwZiAxMDA2NDQKKy0tLSBhL25hbWVzLmMKKysrKyBiL25hbWVzLmMKK0BAIC0yNjgsNiArMjY4LDkgQEAgb3V0b2Yoc3RydWN0IG5hbWUgKm5hbWVzLCBGSUxFICpmbywgc3RydWN0IGhlYWRlciAqaHApCisgCUZJTEUgKmZvdXQsICpmaW47CisgCWludCBpc3BpcGU7CisgCisrCWlmICh2YWx1ZSgiZXhwYW5kYWRkciIpID09IE5VTEwpCisrCQlyZXR1cm4gbmFtZXM7CisrCisgCXRvcCA9IG5hbWVzOworIAlucCA9IG5hbWVzOworIAl0aW1lKCZub3cpOworLS0gCisxLjkuMworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTItdW5wYWNrLURpc2FibGUtb3B0aW9uLXByb2Nlc3NpbmctZm9yLWVtYWlsLWFkZHJlc3Nlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTItdW5wYWNrLURpc2FibGUtb3B0aW9uLXByb2Nlc3NpbmctZm9yLWVtYWlsLWFkZHJlc3Nlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2RiZmQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxMi11bnBhY2stRGlzYWJsZS1vcHRpb24tcHJvY2Vzc2luZy1mb3ItZW1haWwtYWRkcmVzc2VzLnBhdGNoCkBAIC0wLDAgKzEsNzkgQEAKK0Zyb20gZTM0ZTJhYzY3YjgwNDk3MDgwZWJlY2NjZWM0MGMzYjYxNDU2MTY3ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZsb3JpYW4gV2VpbWVyIDxmd2VpbWVyQHJlZGhhdC5jb20+CitEYXRlOiBNb24sIDE3IE5vdiAyMDE0IDExOjE0OjA2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMi80XSB1bnBhY2s6IERpc2FibGUgb3B0aW9uIHByb2Nlc3NpbmcgZm9yIGVtYWlsIGFkZHJlc3NlcworIHdoZW4gY2FsbGluZyBzZW5kbWFpbAorCitUaGlzIHBhdGNoIGlzIHRha2VuIGZyb20KK2Z0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vaC9oZWlybG9vbS1tYWlseC9oZWlybG9vbS1tYWlseF8xMi41LTUuZGViaWFuLnRhci54egorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIGlzIGRlYWRdCistLS0KKyBleHRlcm4uaCAgfCAyICstCisgbmFtZXMuYyAgIHwgOCArKysrKystLQorIHNlbmRvdXQuYyB8IDIgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2V4dGVybi5oIGIvZXh0ZXJuLmgKK2luZGV4IDZiODViYTAuLjg4NzNmZTggMTAwNjQ0CistLS0gYS9leHRlcm4uaAorKysrIGIvZXh0ZXJuLmgKK0BAIC0zOTYsNyArMzk2LDcgQEAgc3RydWN0IG5hbWUgKm91dG9mKHN0cnVjdCBuYW1lICpuYW1lcywgRklMRSAqZm8sIHN0cnVjdCBoZWFkZXIgKmhwKTsKKyBpbnQgaXNfZmlsZWFkZHIoY2hhciAqbmFtZSk7Cisgc3RydWN0IG5hbWUgKnVzZXJtYXAoc3RydWN0IG5hbWUgKm5hbWVzKTsKKyBzdHJ1Y3QgbmFtZSAqY2F0KHN0cnVjdCBuYW1lICpuMSwgc3RydWN0IG5hbWUgKm4yKTsKKy1jaGFyICoqdW5wYWNrKHN0cnVjdCBuYW1lICpucCk7CisrY2hhciAqKnVucGFjayhzdHJ1Y3QgbmFtZSAqc21vcHRzLCBzdHJ1Y3QgbmFtZSAqbnApOworIHN0cnVjdCBuYW1lICplbGlkZShzdHJ1Y3QgbmFtZSAqbmFtZXMpOworIGludCBjb3VudChzdHJ1Y3QgbmFtZSAqbnApOworIHN0cnVjdCBuYW1lICpkZWxldGVfYWx0ZXJuYXRlcyhzdHJ1Y3QgbmFtZSAqbnApOworZGlmZiAtLWdpdCBhL25hbWVzLmMgYi9uYW1lcy5jCitpbmRleCBjNjk1NjBmLi40NWJiYWVkIDEwMDY0NAorLS0tIGEvbmFtZXMuYworKysrIGIvbmFtZXMuYworQEAgLTU0OSw3ICs1NDksNyBAQCBjYXQoc3RydWN0IG5hbWUgKm4xLCBzdHJ1Y3QgbmFtZSAqbjIpCisgICogUmV0dXJuIGFuIGVycm9yIGlmIHRoZSBuYW1lIGxpc3Qgd29uJ3QgZml0LgorICAqLworIGNoYXIgKioKKy11bnBhY2soc3RydWN0IG5hbWUgKm5wKQorK3VucGFjayhzdHJ1Y3QgbmFtZSAqc21vcHRzLCBzdHJ1Y3QgbmFtZSAqbnApCisgeworIAljaGFyICoqYXAsICoqdG9wOworIAlzdHJ1Y3QgbmFtZSAqbjsKK0BAIC01NjQsNyArNTY0LDcgQEAgdW5wYWNrKHN0cnVjdCBuYW1lICpucCkKKyAJICogdGhlIHRlcm1pbmF0aW5nIDAgcG9pbnRlci4gIEFkZGl0aW9uYWwgc3BvdHMgbWF5IGJlIG5lZWRlZAorIAkgKiB0byBwYXNzIGFsb25nIC1mIHRvIHRoZSBob3N0IG1haWxlci4KKyAJICovCistCWV4dHJhID0gMjsKKysJZXh0cmEgPSAzICsgY291bnQoc21vcHRzKTsKKyAJZXh0cmErKzsKKyAJbWV0b28gPSB2YWx1ZSgibWV0b28iKSAhPSBOVUxMOworIAlpZiAobWV0b28pCitAQCAtNTgxLDYgKzU4MSwxMCBAQCB1bnBhY2soc3RydWN0IG5hbWUgKm5wKQorIAkJKmFwKysgPSAiLW0iOworIAlpZiAodmVyYm9zZSkKKyAJCSphcCsrID0gIi12IjsKKysJZm9yICg7IHNtb3B0cyAhPSBOVUxMOyBzbW9wdHMgPSBzbW9wdHMtPm5fZmxpbmspCisrCQlpZiAoKHNtb3B0cy0+bl90eXBlICYgR0RFTCkgPT0gMCkKKysJCQkqYXArKyA9IHNtb3B0cy0+bl9uYW1lOworKwkqYXArKyA9ICItLSI7CisgCWZvciAoOyBuICE9IE5VTEw7IG4gPSBuLT5uX2ZsaW5rKQorIAkJaWYgKChuLT5uX3R5cGUgJiBHREVMKSA9PSAwKQorIAkJCSphcCsrID0gbi0+bl9uYW1lOworZGlmZiAtLWdpdCBhL3NlbmRvdXQuYyBiL3NlbmRvdXQuYworaW5kZXggN2I3ZjJlYi4uYzUyZjE1ZCAxMDA2NDQKKy0tLSBhL3NlbmRvdXQuYworKysrIGIvc2VuZG91dC5jCitAQCAtODM1LDcgKzgzNSw3IEBAIHN0YXJ0X210YShzdHJ1Y3QgbmFtZSAqdG8sIHN0cnVjdCBuYW1lICptYWlsYXJncywgRklMRSAqaW5wdXQsCisgI2VuZGlmCS8qIEhBVkVfU09DS0VUUyAqLworIAorIAlpZiAoKHNtdHAgPSB2YWx1ZSgic210cCIpKSA9PSBOVUxMKSB7CistCQlhcmdzID0gdW5wYWNrKGNhdChtYWlsYXJncywgdG8pKTsKKysJCWFyZ3MgPSB1bnBhY2sobWFpbGFyZ3MsIHRvKTsKKyAJCWlmIChkZWJ1ZyB8fCB2YWx1ZSgiZGVidWciKSkgeworIAkJCXByaW50ZihjYXRnZXRzKGNhdGQsIENBVFNFVCwgMTgxLAorIAkJCQkJIlNlbmRtYWlsIGFyZ3VtZW50czoiKSk7CistLSAKKzEuOS4zCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxMy1maW8uYy1VbmNvbmRpdGlvbmFsbHktcmVxdWlyZS13b3JkZXhwLXN1cHBvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDEzLWZpby5jLVVuY29uZGl0aW9uYWxseS1yZXF1aXJlLXdvcmRleHAtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTU4ZDg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxMy1maW8uYy1VbmNvbmRpdGlvbmFsbHktcmVxdWlyZS13b3JkZXhwLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxMTMgQEAKK0Zyb20gMmJhZThlY2YwNGVjMmJhNmJiOWYwYWY1YjgwNDg1ZGQwZWRiNDI3ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZsb3JpYW4gV2VpbWVyIDxmd2VpbWVyQHJlZGhhdC5jb20+CitEYXRlOiBNb24sIDE3IE5vdiAyMDE0IDEyOjQ4OjI1ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMy80XSBmaW8uYzogVW5jb25kaXRpb25hbGx5IHJlcXVpcmUgd29yZGV4cCBzdXBwb3J0CisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUtNS5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KKy0tLQorIGZpby5jIHwgNjcgKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDYyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZmlvLmMgYi9maW8uYworaW5kZXggNjVlOGYxMC4uMTUyOTIzNiAxMDA2NDQKKy0tLSBhL2Zpby5jCisrKysgYi9maW8uYworQEAgLTQzLDEyICs0MywxNSBAQCBzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZmlvLmMJMi43NiAoZ3JpdHRlcikgOS8xNi8wOSI7CisgI2VuZGlmIC8qIG5vdCBsaW50ICovCisgCisgI2luY2x1ZGUgInJjdi5oIgorKworKyNpZm5kZWYgSEFWRV9XT1JERVhQCisrI2Vycm9yIHdvcmRleHAgc3VwcG9ydCBpcyByZXF1aXJlZAorKyNlbmRpZgorKworICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxzeXMvZmlsZS5oPgorICNpbmNsdWRlIDxzeXMvd2FpdC5oPgorLSNpZmRlZglIQVZFX1dPUkRFWFAKKyAjaW5jbHVkZSA8d29yZGV4cC5oPgorLSNlbmRpZgkvKiBIQVZFX1dPUkRFWFAgKi8KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgCisgI2lmIGRlZmluZWQgKFVTRV9OU1MpCitAQCAtNDgxLDcgKzQ4NCw2IEBAIG5leHQ6Cisgc3RhdGljIGNoYXIgKgorIGdsb2JuYW1lKGNoYXIgKm5hbWUpCisgeworLSNpZmRlZglIQVZFX1dPUkRFWFAKKyAJd29yZGV4cF90IHdlOworIAljaGFyICpjcDsKKyAJc2lnc2V0X3QgbnNldDsKK0BAIC01MjcsNjUgKzUyOSw2IEBAIGdsb2JuYW1lKGNoYXIgKm5hbWUpCisgCX0KKyAJd29yZGZyZWUoJndlKTsKKyAJcmV0dXJuIGNwOworLSNlbHNlCS8qICFIQVZFX1dPUkRFWFAgKi8KKy0JY2hhciB4bmFtZVtQQVRIU0laRV07CistCWNoYXIgY21kYnVmW1BBVEhTSVpFXTsJCS8qIGFsc28gdXNlZCBmb3IgZmlsZSBuYW1lcyAqLworLQlpbnQgcGlkLCBsOworLQljaGFyICpjcCwgKnNoZWxsOworLQlpbnQgcGl2ZWNbMl07CistCWV4dGVybiBpbnQgd2FpdF9zdGF0dXM7CistCXN0cnVjdCBzdGF0IHNidWY7CistCistCWlmIChwaXBlKHBpdmVjKSA8IDApIHsKKy0JCXBlcnJvcigicGlwZSIpOworLQkJcmV0dXJuIG5hbWU7CistCX0KKy0Jc25wcmludGYoY21kYnVmLCBzaXplb2YgY21kYnVmLCAiZWNobyAlcyIsIG5hbWUpOworLQlpZiAoKHNoZWxsID0gdmFsdWUoIlNIRUxMIikpID09IE5VTEwpCistCQlzaGVsbCA9IFNIRUxMOworLQlwaWQgPSBzdGFydF9jb21tYW5kKHNoZWxsLCAwLCAtMSwgcGl2ZWNbMV0sICItYyIsIGNtZGJ1ZiwgTlVMTCk7CistCWlmIChwaWQgPCAwKSB7CistCQljbG9zZShwaXZlY1swXSk7CistCQljbG9zZShwaXZlY1sxXSk7CistCQlyZXR1cm4gTlVMTDsKKy0JfQorLQljbG9zZShwaXZlY1sxXSk7CistYWdhaW46CistCWwgPSByZWFkKHBpdmVjWzBdLCB4bmFtZSwgc2l6ZW9mIHhuYW1lKTsKKy0JaWYgKGwgPCAwKSB7CistCQlpZiAoZXJybm8gPT0gRUlOVFIpCistCQkJZ290byBhZ2FpbjsKKy0JCXBlcnJvcigicmVhZCIpOworLQkJY2xvc2UocGl2ZWNbMF0pOworLQkJcmV0dXJuIE5VTEw7CistCX0KKy0JY2xvc2UocGl2ZWNbMF0pOworLQlpZiAod2FpdF9jaGlsZChwaWQpIDwgMCAmJiBXVEVSTVNJRyh3YWl0X3N0YXR1cykgIT0gU0lHUElQRSkgeworLQkJZnByaW50ZihzdGRlcnIsIGNhdGdldHMoY2F0ZCwgQ0FUU0VULCA4MSwKKy0JCQkJIlwiJXNcIjogRXhwYW5zaW9uIGZhaWxlZC5cbiIpLCBuYW1lKTsKKy0JCXJldHVybiBOVUxMOworLQl9CistCWlmIChsID09IDApIHsKKy0JCWZwcmludGYoc3RkZXJyLCBjYXRnZXRzKGNhdGQsIENBVFNFVCwgODIsCistCQkJCQkiXCIlc1wiOiBObyBtYXRjaC5cbiIpLCBuYW1lKTsKKy0JCXJldHVybiBOVUxMOworLQl9CistCWlmIChsID09IHNpemVvZiB4bmFtZSkgeworLQkJZnByaW50ZihzdGRlcnIsIGNhdGdldHMoY2F0ZCwgQ0FUU0VULCA4MywKKy0JCQkJIlwiJXNcIjogRXhwYW5zaW9uIGJ1ZmZlciBvdmVyZmxvdy5cbiIpLCBuYW1lKTsKKy0JCXJldHVybiBOVUxMOworLQl9CistCXhuYW1lW2xdID0gMDsKKy0JZm9yIChjcCA9ICZ4bmFtZVtsLTFdOyAqY3AgPT0gJ1xuJyAmJiBjcCA+IHhuYW1lOyBjcC0tKQorLQkJOworLQljcFsxXSA9ICdcMCc7CistCWlmIChzdHJjaHIoeG5hbWUsICcgJykgJiYgc3RhdCh4bmFtZSwgJnNidWYpIDwgMCkgeworLQkJZnByaW50ZihzdGRlcnIsIGNhdGdldHMoY2F0ZCwgQ0FUU0VULCA4NCwKKy0JCQkJIlwiJXNcIjogQW1iaWd1b3VzLlxuIiksIG5hbWUpOworLQkJcmV0dXJuIE5VTEw7CistCX0KKy0JcmV0dXJuIHNhdmVzdHIoeG5hbWUpOworLSNlbmRpZgkvKiAhSEFWRV9XT1JERVhQICovCisgfQorIAorIC8qCistLSAKKzEuOS4zCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxNC1nbG9ibmFtZS1JbnZva2Utd29yZGV4cC13aXRoLVdSREVfTk9DTUQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDE0LWdsb2JuYW1lLUludm9rZS13b3JkZXhwLXdpdGgtV1JERV9OT0NNRC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjVjZmE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxNC1nbG9ibmFtZS1JbnZva2Utd29yZGV4cC13aXRoLVdSREVfTk9DTUQucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSA3M2ZlZmEwYzFhYzcwMDQzZWM4NGYyZDhiOGY5ZjY4MzIxM2YxNjhkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmxvcmlhbiBXZWltZXIgPGZ3ZWltZXJAcmVkaGF0LmNvbT4KK0RhdGU6IE1vbiwgMTcgTm92IDIwMTQgMTM6MTE6MzIgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCA0LzRdIGdsb2JuYW1lOiBJbnZva2Ugd29yZGV4cCB3aXRoIFdSREVfTk9DTUQgKENWRS0yMDA0LTI3NzEpCisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUtNS5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KKy0tLQorIGZpby5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZmlvLmMgYi9maW8uYworaW5kZXggMTUyOTIzNi4uNzc0YTIwNCAxMDA2NDQKKy0tLSBhL2Zpby5jCisrKysgYi9maW8uYworQEAgLTQ5Nyw3ICs0OTcsNyBAQCBnbG9ibmFtZShjaGFyICpuYW1lKQorIAlzaWdlbXB0eXNldCgmbnNldCk7CisgCXNpZ2FkZHNldCgmbnNldCwgU0lHQ0hMRCk7CisgCXNpZ3Byb2NtYXNrKFNJR19CTE9DSywgJm5zZXQsIE5VTEwpOworLQlpID0gd29yZGV4cChuYW1lLCAmd2UsIDApOworKwlpID0gd29yZGV4cChuYW1lLCAmd2UsIFdSREVfTk9DTUQpOworIAlzaWdwcm9jbWFzayhTSUdfVU5CTE9DSywgJm5zZXQsIE5VTEwpOworIAlzd2l0Y2ggKGkpIHsKKyAJY2FzZSAwOgorLS0gCisxLjkuMworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTUtdXNyLXNiaW4tc2VuZG1haWwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDE1LXVzci1zYmluLXNlbmRtYWlsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNTk5MTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDE1LXVzci1zYmluLXNlbmRtYWlsLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Rlc2NyaXB0aW9uOiBTZW5kbWFpbCBpcyBhdCAvdXNyL3NiaW4vc2VuZG1haWwKKyBBcyBwZXIgRGViaWFuIFBvbGljeSDCpzExLjYKK0F1dGhvcjogUnlhbiBLYXZhbmFnaCA8cmFrQGRlYmlhbi5vcmc+CitPcmlnaW46IERlYmlhbgorRm9yd2FyZGVkOiBubworLS0tCitUaGlzIHBhdGNoIGhlYWRlciBmb2xsb3dzIERFUC0zOiBodHRwOi8vZGVwLmRlYmlhbi5uZXQvZGVwcy9kZXAzLworSW5kZXg6IGhlaXJsb29tLW1haWx4LTEyLjUvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUtNS5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KKworLS0tIGhlaXJsb29tLW1haWx4LTEyLjUub3JpZy9NYWtlZmlsZQkyMDExLTA0LTI2IDE3OjIzOjIyLjAwMDAwMDAwMCAtMDQwMAorKysrIGhlaXJsb29tLW1haWx4LTEyLjUvTWFrZWZpbGUJMjAxNS0wMS0yNyAxMzoyMDowNC43MzM1NDI4MDEgLTA1MDAKK0BAIC0xMyw3ICsxMyw3IEBACisgCisgTUFJTFJDCQk9ICQoU1lTQ09ORkRJUikvbmFpbC5yYworIE1BSUxTUE9PTAk9IC92YXIvbWFpbAorLVNFTkRNQUlMCT0gL3Vzci9saWIvc2VuZG1haWwKKytTRU5ETUFJTAk9IC91c3Ivc2Jpbi9zZW5kbWFpbAorIAorIERFU1RESVIJCT0KKyAKK0luZGV4OiBoZWlybG9vbS1tYWlseC0xMi41L21haWx4LjEKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBoZWlybG9vbS1tYWlseC0xMi41Lm9yaWcvbWFpbHguMQkyMDE1LTAxLTI3IDEzOjE4OjQ5LjAwMDAwMDAwMCAtMDUwMAorKysrIGhlaXJsb29tLW1haWx4LTEyLjUvbWFpbHguMQkyMDE1LTAxLTI3IDEzOjIwOjMyLjM4MjMzNjg2NyAtMDUwMAorQEAgLTQ5MjIsNyArNDkyMiw3IEBACisgd2hpY2gganVzdCBhY3RzIGFzIGEgcHJveHkuCisgLlBQCisgXGZJTWFpbHhcZlIgaW1tZWRpYXRlbHkgY29udGFjdHMgdGhlIFNNVFAgc2VydmVyIChvcgorLS5JUiBcJS91c3IvbGliL3NlbmRtYWlsICkKKysuSVIgXCUvdXNyL3NiaW4vc2VuZG1haWwgKQorIGV2ZW4gd2hlbiBvcGVyYXRpbmcgaW4KKyAuSSBkaXNjb25uZWN0ZWQKKyBtb2RlLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvZXhwbGljaXRseS5kaXNhYmxlLmtyYjUuc3VwcG9ydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzL2V4cGxpY2l0bHkuZGlzYWJsZS5rcmI1LnN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0ZmQwNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzL2V4cGxpY2l0bHkuZGlzYWJsZS5rcmI1LnN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAora3JiNSBzdXBwb3J0IGlzIGF1dG9kZXRlY3RlZCBmcm9tIHN5c3Jvb3QgbWFraW5nIGJ1aWxkcyB1bmRldGVybWluaXN0aWMKK2ZlZWwgZnJlZSB0byBpbXByb3ZlIHRoaXMgdG8gc3VwcG9ydCBleHBsaWNpdGx5IGVuYWJsaW5nL2Rpc2FibGluZyBpdAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCistLS0gYS9tYWtlY29uZmlnCTIwMTMtMDctMjEgMTU6MDY6MTEuMTc3NzkyMzM0ICswMjAwCisrKysgYi9tYWtlY29uZmlnCTIwMTMtMDctMjEgMTU6MDc6MjAuMDI4NzkzOTk0ICswMjAwCitAQCAtNDI0LDM2ICs0MjQsNiBAQAorIH0KKyAhCisgCistPCR0bXAyLmMgbGlua19jaGVjayBnc3NhcGkgJ2ZvciBHU1NBUEkgaW4gbGliZ3NzJyBcCistCQknI2RlZmluZSBVU0VfR1NTQVBJJyAnLWxnc3MnIHx8CistCTwkdG1wMi5jIGxpbmtfY2hlY2sgZ3NzYXBpICdmb3IgR1NTQVBJIGluIGxpYmdzc2FwaV9rcmI1JyBcCistCQkJJyNkZWZpbmUgVVNFX0dTU0FQSScgJy1sZ3NzYXBpX2tyYjUnIHx8CistCQlsaW5rX2NoZWNrIGdzc2FwaSAnZm9yIEdTU0FQSSBpbiBsaWJnc3NhcGlfa3JiNSwgb2xkLXN0eWxlJyBcCistCQkJCScjZGVmaW5lIFVTRV9HU1NBUEkKKy0jZGVmaW5lIEdTU0FQSV9PTERfU1RZTEUnICctbGdzc2FwaV9rcmI1JyA8PFwhIHx8IFwKKy0JCQlsaW5rX2NoZWNrIGdzc2FwaSAnZm9yIEdTU0FQSSBpbiBsaWJnc3NhcGknIFwKKy0JCQkJJyNkZWZpbmUgVVNFX0dTU0FQSQorLSNkZWZpbmUJR1NTQVBJX1JFR19JTkNMVURFJyAnLWxnc3NhcGknIDw8XCUKKy0jaW5jbHVkZSA8Z3NzYXBpL2dzc2FwaS5oPgorLSNpbmNsdWRlIDxnc3NhcGkvZ3NzYXBpX2dlbmVyaWMuaD4KKy0KKy1pbnQgbWFpbih2b2lkKQorLXsKKy0JZ3NzX2ltcG9ydF9uYW1lKDAsIDAsIGdzc19udF9zZXJ2aWNlX25hbWUsIDApOworLQlnc3NfaW5pdF9zZWNfY29udGV4dCgwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwKTsKKy0JcmV0dXJuIDA7CistfQorLSEKKy0jaW5jbHVkZSA8Z3NzYXBpLmg+CistCistaW50IG1haW4odm9pZCkKKy17CistCWdzc19pbXBvcnRfbmFtZSgwLCAwLCBHU1NfQ19OVF9IT1NUQkFTRURfU0VSVklDRSwgMCk7CistCWdzc19pbml0X3NlY19jb250ZXh0KDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDApOworLQlyZXR1cm4gMDsKKy19CistJQorLQorIGNhdCA+JHRtcDIuYyA8PFwhCisgI2luY2x1ZGUgImNvbmZpZy5oIgorICNpZmRlZiBIQVZFX05MX0xBTkdJTkZPCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9tYWlseF8xMi41LTUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9tYWlseF8xMi41LTUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZhOTA0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L21haWx4XzEyLjUtNS5iYgpAQCAtMCwwICsxLDQzIEBACitTVU1NQVJZID0gIm1haWx4IGlzIHRoZSB0cmFkaXRpb25hbCBjb21tYW5kLWxpbmUtbW9kZSBtYWlsIHVzZXIgYWdlbnQiCisKK0RFU0NSSVBUSU9OID0gIk1haWx4IGlzIGRlcml2ZWQgZnJvbSBCZXJrZWxleSBNYWlsIGFuZCBpcyBpbnRlbmRlZCBwcm92aWRlIHRoZSBcCitmdW5jdGlvbmFsaXR5IG9mIHRoZSBQT1NJWCBtYWlseCBjb21tYW5kIHdpdGggYWRkaXRpb25hbCBzdXBwb3J0IFwKK2ZvciBNSU1FLCBJTUFQLCBQT1AzLCBTTVRQLCBhbmQgUy9NSU1FLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL2hlaXJsb29tLnNvdXJjZWZvcmdlLm5ldC9tYWlseC5odG1sIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitMSUNFTlNFID0gIkJTRCAmIE1QTC0xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDIwMmEwYTYyOTEwY2Y5NGY3YWY4YTM0MzZhMmEyZGQiCisKK0RFUEVORFMgPSAib3BlbnNzbCIKKworU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vaC9oZWlybG9vbS1tYWlseC9oZWlybG9vbS1tYWlseF8xMi41Lm9yaWcudGFyLmd6O25hbWU9YXJjaGl2ZSBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLURvbi10LXJldXNlLXdlYWstc3ltYm9sLW9wdG9wdC10by1maXgtRlRCRlMtb24tbWlwcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLVBhdGNoZWQtb3V0LVNTTDItc3VwcG9ydC1zaW5jZS1pdC1pcy1uby1sb25nZXItc3VwcG8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1GaXhlZC1MaW50aWFuLXdhcm5pbmctd2FybmluZy1tYWNyby1OLW5vdC1kZWZpbmVkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTEtb3V0b2YtSW50cm9kdWNlLWV4cGFuZGFkZHItZmxhZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEyLXVucGFjay1EaXNhYmxlLW9wdGlvbi1wcm9jZXNzaW5nLWZvci1lbWFpbC1hZGRyZXNzZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMy1maW8uYy1VbmNvbmRpdGlvbmFsbHktcmVxdWlyZS13b3JkZXhwLXN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNC1nbG9ibmFtZS1JbnZva2Utd29yZGV4cC13aXRoLVdSREVfTk9DTUQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNS11c3Itc2Jpbi1zZW5kbWFpbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9leHBsaWNpdGx5LmRpc2FibGUua3JiNS5zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjI5YTYwMzNlZjE0MTI4MjRkMDJlYjlkOTIxM2NiMWYyIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiMDE1YmE0MjA5MTM1ODY3ZjM3YTAyNDVkMjIyMzVhMzkyYjhiYmVkOTU2OTEzMjg2Yjg4N2MyZTJhOWE0MjFhZCIKKworUyA9ICIke1dPUktESVJ9L2hlaXJsb29tLW1haWx4LTEyLjUiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcAorCitDRkxBR1NfYXBwZW5kID0gIiAtRF9CU0RfU09VUkNFIC1EREVCSUFOIC1JJHtTfS9FWFQiCisKKyMgIlNUUklQPXRydWUiIG1lYW5zIHRoYXQgJ3RydWUnIGNvbW1hbmQgd2lsbCBiZSB1c2VkIHRvICdzdHJpcCcgZmlsZXMgd2hpY2ggd2lsbCBhY2hpZXZlIHRoZSBlZmZlY3Qgb2Ygbm90IHN0cmlwcGluZyB0aGVtCisjIG1haWx4J3MgTWFrZWZpbGUgZG9lc24ndCBhbGxvdyBhIG1vcmUgc3RyYWlnaHRmb3J3YXJkIHdheSB0byBhdm9pZCBzdHJpcHBpbmcKK0VYVFJBX09FTUFLRSA9ICJTRU5ETUFJTD0ke3NiaW5kaXJ9L3NlbmRtYWlsIElQdjY9LURIQVZFX0lQdjZfRlVOQ1MgUFJFRklYPS91c3IgVUNCSU5TVEFMTD0vdXNyL2Jpbi9pbnN0YWxsIFNUUklQPXRydWUiCisKKyMgVGhlIG1ha2Vjb25maWcgY2FuJ3QgcnVuIHBhcmFsbGVsbHksIG90aGVyd2lzZSB0aGUgY2hlY2tpbmcgcmVzdWx0cworIyBtaWdodCBiZSBpbmNvcnJlY3QgYW5kIGxlYWQgdG8gZXJyb3JzOgorIyBmaW8uYzo1NjoxNzogZmF0YWwgZXJyb3I6IHNzbC5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisjICNpbmNsdWRlIDxzc2wuaD4KK1BBUkFMTEVMX01BS0UgPSAiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuLXBhZ2VzL21hbi1wYWdlc180LjAyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuLXBhZ2VzL21hbi1wYWdlc180LjAyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiOTBhNDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4tcGFnZXMvbWFuLXBhZ2VzXzQuMDIuYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJMaW51eCBtYW4tcGFnZXMiCitERVNDUklQVElPTiA9ICJUaGUgTGludXggbWFuLXBhZ2VzIHByb2plY3QgZG9jdW1lbnRzIHRoZSBMaW51eCBrZXJuZWwgYW5kIEMgbGlicmFyeSBpbnRlcmZhY2VzIHRoYXQgYXJlIGVtcGxveWVkIGJ5IHVzZXIgcHJvZ3JhbXMiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L2RvY3MvbWFuLXBhZ2VzIgorTElDRU5TRSA9ICJHUEx2MisiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTttZDU9OGYyYTNkNDMwNTdkNDU4ZTUwNjY3MTQ5ODA1NjdhNjAiCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvZG9jcy8ke0JQTn0vQXJjaGl2ZS8ke0JQfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5M2RmMzI3OTc5OGEzMzQ1YmIyYzcwOTU4NGM4MzYzOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0MjMyNGY5ZWQ0N2M4OWE0M2NiMzdiNmJiMGQ1ZmJjYWQ0NDgzOGVlZTQ1Y2QzOTRlMTgxYzk4ZDAzOGM0OWZmIgorCitSREVQRU5EU18ke1BOfSA9ICJtYW4iCisKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfQorfQorCisjIE9ubHkgZGVsaXZlcmVzIG1hbi1wYWdlcyBzbyBGSUxFU18ke1BOfSBnZXRzIGV2ZXJ5dGhpbmcKK0ZJTEVTXyR7UE59LWRvYyA9ICIiCitGSUxFU18ke1BOfSA9ICIke21hbmRpcn0vKiIKKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKK0FMVEVSTkFUSVZFXyR7UE59ID0gInBhc3N3ZC41IGdldHNwbmFtLjMiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcGFzc3dkLjVdID0gIiR7bWFuZGlyfS9tYW41L3Bhc3N3ZC41IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2dldHNwbmFtLjNdID0gIiR7bWFuZGlyfS9tYW4zL2dldHNwbmFtLjMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL2NvbmZpZ3VyZV9zZWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL2NvbmZpZ3VyZV9zZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ5ZTY4MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vY29uZmlndXJlX3NlZC5wYXRjaApAQCAtMCwwICsxLDMyIEBACittYW46IHJlcGxhY2UgJywnIHdpdGggJyMnCisKK1NvbWV0aW1lcywgdGhlIHBhcmFtZXRlcnMgb2YgQ0MvQlVJTERfQ0MgY29udGFpbnMgdGhlICcsJywgd2hpY2gKK2NhdXNlIHRoZSBzZWQgY29tbWFuZCBmYWlsZWQsIHNvIHJlcGxhY2UgdGhlICcsJyB3aXRoICcjJworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWXVlIFRhbyA8WXVlLlRhb0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA5ZjYyY2Y5Li45YTU2NWFlIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC0xMzIxLDkgKzEzMjEsOSBAQCBkbworICAgZWNobyAiQ3JlYXRpbmcgJGluZmlsZSBmcm9tICRpbmZpbGUuaW4iCisgICBzZWQgLWUgJworIHMsQHZlcnNpb25ALCR2ZXJzaW9uLAorLXMsQENDQCwkQ0MsCisrcyNAQ0NAIyRDQyMKKyBzLEBFWEVFWFRALCRFWEVFWFQsCistcyxAQlVJTERfQ0NALCRCVUlMRF9DQywKKytzI0BCVUlMRF9DQ0AjJEJVSUxEX0NDIworIHMsQElOU1RBTExALCRJTlNUQUxMLAorIHMsQERFRlNALCRERUZTLAorIHMsQExJQlNALCRMSUJTLAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVnLW5vbnJvb3RidWlsZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWctbm9ucm9vdGJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmODM0YmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVnLW5vbnJvb3RidWlsZC5wYXRjaApAQCAtMCwwICsxLDE2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK2RpZmYgLXUgLXIgbWFuLTEuNWcub2xkL2NvbmZpZ3VyZSBtYW4tMS41Zy9jb25maWd1cmUKKy0tLSBtYW4tMS41Zy5vbGQvY29uZmlndXJlCVdlZCBBcHIgIDcgMDQ6MTY6MDUgMTk5OQorKysrIG1hbi0xLjVnL2NvbmZpZ3VyZQlNb24gTWF5IDE1IDE1OjIyOjQ0IDIwMDAKK0BAIC03OTEsNyArNzkxLDcgQEAKKyAgICAgcmVhZCBtb2RlCisgICAgIGlmIHRlc3QgIiRtb2RlIiAhPSAiIjsgdGhlbiBtYW5fbW9kZT0kbW9kZTsgZmkKKyAgIGZpCistICBtYW5faW5zdGFsbF9mbGFncz0iLW0gJG1hbl9tb2RlIC1vICRtYW5fdXNlciAtZyAkbWFuX2dyb3VwIgorKyAgbWFuX2luc3RhbGxfZmxhZ3M9IiIKKyBmaQorIAorICMgV2hhdCBzZWN0aW9ucyBkbyB3ZSBhbnRpY2lwYXRlPwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41aDEtZ2VuY2F0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41aDEtZ2VuY2F0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NGIxNGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVoMS1nZW5jYXQucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gZ2VuY2F0L2dlbmxpYi5jCTIwMDYtMDgtMDIgMjA6MTE6NDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2VuY2F0L2dlbmxpYi5jLm9kZW4JMjAwOC0xMi0yMSAxOToxODo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC00Nyw2ICs0Nyw3IEBAIHVwLXRvLWRhdGUuICBNYW55IHRoYW5rcy4KKyAwMS8xNC85MSAgIDQgbmF6Z3VsCU9mZiBieSBvbmUgb24gbnVtYmVyIHNwZWNpZmllZCBlbnRyaWVzCisgKi8KKyAKKysjdW5kZWYgX0dOVV9TT1VSQ0UKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2lmZGVmIFNZU1YKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWgxLW1ha2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVoMS1tYWtlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MzFlYjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVoMS1tYWtlLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjVnL21hbi9NYWtlZmlsZS5pbi5taWtlCUZyaSBBcHIgIDkgMTM6MzU6NTQgMTk5OQorKysrIG1hbi0xLjVnL21hbi9NYWtlZmlsZS5pbglGcmkgQXByICA5IDEzOjM2OjQ1IDE5OTkKK0BAIC0xLDggKzEsOCBAQAorICMgb25seSBleGVjdXRlZCBmcm9tIGEgc3ViZGlyCisgTUFOMSA9IG1hbiB3aGF0aXMgYXByb3BvcworLU1BTjUgPSBtYW4uY29uZgorK01BTjUgPSBtYW4uY29uZmlnCisgTUFOOCA9IG1ha2V3aGF0aXMKKy1BTEwgPSBtYW4uMSB3aGF0aXMuMSBhcHJvcG9zLjEgbWFuLmNvbmYuNQorK0FMTCA9IG1hbi4xIHdoYXRpcy4xIGFwcm9wb3MuMSBtYW4uY29uZmlnLjUKKyBNQVlCRTggPSBtYWtld2hhdGlzCisgCisgLlNVRkZJWEVTOiAubWFuIC4xIC41IC44CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVpMi1pbml0aWFsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41aTItaW5pdGlhbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTU2YzA3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41aTItaW5pdGlhbC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS41aTIvc3JjL21ha2V3aGF0aXMuc2guaW5pdGlhbAlUdWUgSnVsICAzIDE1OjM4OjM5IDIwMDEKKysrKyBtYW4tMS41aTIvc3JjL21ha2V3aGF0aXMuc2gJVHVlIEp1bCAgMyAxNTozOTozOSAyMDAxCitAQCAtODEsOCArODEsMTAgQEAKKyAJY29udGludWU7OworICAgICAtcykgc2V0c2VjdGlvbnM9MQorIAljb250aW51ZTs7CistICAgIC11KSBmaW5kYXJnPSItbmV3ZXIgL3Zhci9jYWNoZS9tYW4vd2hhdGlzIgorLQl1cGRhdGU9MQorKyAgICAtdSkgaWYgWyAtZSAvdmFyL2NhY2hlL21hbi93aGF0aXMgXTsgdGhlbgorKwkgIGZpbmRhcmc9Ii1uZXdlciAvdmFyL2NhY2hlL21hbi93aGF0aXMiCisrCSAgdXBkYXRlPTEKKysJZmkKKyAJY29udGludWU7OworICAgICAtdikgdmVyYm9zZT0xCisgCWNvbnRpbnVlOzsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWkyLW5ld2xpbmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVpMi1uZXdsaW5lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMWRmNWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVpMi1uZXdsaW5lLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIHNyYy9tYW4uYwkyMDA4LTEyLTIxIDE5OjE3OjMxLjAwMDAwMDAwMCArMDEwMAorKysrIHNyYy9tYW4uYy5vZGVuCTIwMDgtMTItMjEgMTk6MTc6MzguMDAwMDAwMDAwICswMTAwCitAQCAtMzkxLDcgKzM5MSw3IEBAIGFnYWluOgorIAkgIGJlZysrOworIAorICAgICAgZW5kID0gYmVnOworLSAgICAgd2hpbGUgKCplbmQgIT0gJyAnICYmICplbmQgIT0gJ1x0JyAmJiAqZW5kICE9ICdcbicgJiYgKmVuZCAhPSAnXDAnKQorKyAgICAgd2hpbGUgKCplbmQgIT0gJyAnICYmICplbmQgIT0gJ1x0JyAmJiAqZW5kICE9ICdcbicgJiYgKmVuZCAhPSAnXDAnICYmIChlbmQtYnVmKTxCVUZTSVpFKQorIAkgIGVuZCsrOwkJLyogbm90ZSB0aGF0IGJ1ZiBpcyBOVUwtdGVybWluYXRlZCAqLworICAgICAgKmVuZCA9ICdcMCc7CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVpMi1vdmVyZmxvdy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWkyLW92ZXJmbG93LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZDI4ODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVpMi1vdmVyZmxvdy5wYXRjaApAQCAtMCwwICsxLDE2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS41aTIvc3JjL21hbi5jLm92ZXJmbG93CU1vbiBKdW4gMjUgMDA6MDE6NDUgMjAwMQorKysrIG1hbi0xLjVpMi9zcmMvbWFuLmMJTW9uIEp1biAyNSAwMDowMTo0NSAyMDAxCitAQCAtMzgxLDYgKzM4MSw5IEBACisgCSAgc3RyY2F0KG5hbWUsICIvIik7CisgCSAgc3RyY2F0KG5hbWUsIGJlZyk7CisgICAgICB9CisrICAgICAvKiBJZiB0aGlzIGlzIHRvbyBsb25nLCBiYWQgdGhpbmdzIGhhdmUgYWxyZWFkeSBoYXBwZW5lZC4gKgorKyAgICAgICogd2Ugc2hvdWxkIHF1aXQgSU1NRURJQVRFTFkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrICAgICBpZihzdHJsZW4obmFtZSk+c2l6ZW9mKHVsdG5hbWUpKSBfZXhpdCgxKTsKKyAKKyAgICAgIGdvdG8gYWdhaW47CisgfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ai1pMThuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ai1pMThuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZTA5YzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVqLWkxOG4ucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gbWFuLTEuNWovbXNncy9pbnN0LnNoLmkxOG4JV2VkIEFwciAyNSAxMDo0MDo1MCAyMDAxCisrKysgbWFuLTEuNWovbXNncy9pbnN0LnNoCVdlZCBBcHIgMjUgMTA6NDE6MTcgMjAwMQorQEAgLTI3LDggKzI3LDcgQEAKKyBmb3IgaiBpbiAkTTsgZG8KKyAgIGlmIFsgLWYgJGogXTsgdGhlbgorICAgICBpPWBlY2hvICRqIHwgc2VkIC1lICdzL21lc3MuLy87IHMvLmNhdC8vJ2AKKy0gICAgZGVzdD1gZWNobyAkbG9jZGlyIHwgc2VkIC1lICJzLyVOL21hbi87IHMvJUwvJGkvImAKKy0gICAgZGVzdD0ke1BSRUZJWH0kZGVzdAorKyAgICBkZXN0PSR7UFJFRklYfS9gZWNobyAkbG9jZGlyIHwgc2VkIC1lICJzLyVOL21hbi87IHMvJUwvJGkvImAKKyAgICAgZWNobyAibWtkaXIgLXAgYGRpcm5hbWUgJGRlc3RgIgorICAgICBta2RpciAtcCBgZGlybmFtZSAkZGVzdGA7CisgICAgIGVjaG8gImluc3RhbGwgLWMgLW0gNjQ0ICRqICRkZXN0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ai1ub2NhY2hlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ai1ub2NhY2hlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MWRkZGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVqLW5vY2FjaGUucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gbWFuLTEuNWovc3JjL21hbi5jb25mLmluLm5vY2FjaGUJVGh1IE5vdiAyMiAxNTowNzoxMiAyMDAxCisrKysgbWFuLTEuNWovc3JjL21hbi5jb25mLmluCVRodSBOb3YgMjIgMTU6MDc6MTIgMjAwMQorQEAgLTgxLDYgKzgxLDkgQEAKKyAjIAorICNOT0NBQ0hFCisgIworKyMgTk9DQUNIRSBrZWVwcyBtYW4gZnJvbSBjcmVhdGluZyBjYWNoZSBwYWdlcworK05PQ0FDSEUKKysjCisgIyBVc2VmdWwgcGF0aHMgLSBub3RlIHRoYXQgQ09MIHNob3VsZCBub3QgYmUgZGVmaW5lZCB3aGVuCisgIyBOUk9GRiBpcyBkZWZpbmVkIGFzICJncm9mZiAtVGFzY2lpIiBvciAiZ3JvZmYgLVRsYXRpbjEiOworICMgbm90IG9ubHkgaXMgaXQgc3VwZXJmbHVvdXMsIGJ1dCBpdCBhY3R1YWxseSBkYW1hZ2VzIHRoZSBvdXRwdXQuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVqLXV0ZjgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVqLXV0ZjgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNkM2U0YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWotdXRmOC5wYXRjaApAQCAtMCwwICsxLDYxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS41ai9jb25maWd1cmUudXRmOAlUaHUgTm92IDIyIDE1OjAyOjM1IDIwMDEKKysrKyBtYW4tMS41ai9jb25maWd1cmUJVGh1IE5vdiAyMiAxNTowMzoxNSAyMDAxCitAQCAtNDA4LDkgKzQwOCw5IEBACisgICBGZ2F3az0vYmluL2dhd2sKKyAgIEZhd2s9L2Jpbi9nYXdrCisgICBGbWF3az1taXNzaW5nCistICB0cm9mZj0iIgorLSAgbnJvZmY9IiIKKy0gIGpucm9mZj0iIgorKyAgdHJvZmY9L3Vzci9iaW4vdHJvZmYKKysgIG5yb2ZmPS91c3IvYmluL25yb2ZmCisrICBqbnJvZmY9L3Vzci9iaW4vbnJvZmYKKyAgIGVxbj0iIgorICAgbmVxbj0iIgorICAgam5lcW49IiIKK0BAIC00NTMsNiArNDUzLDggQEAKKyAgICAgZG9uZQorICAgZG9uZQorICAgRmdyb2ZmPS91c3IvYmluL2dyb2ZmCisrICBGbnJvZmY9L3Vzci9iaW4vbnJvZmYKKysgIEZqbnJvZmY9L3Vzci9iaW4vbnJvZmYKKyAgIEZnZXFuPS91c3IvYmluL2dlcW4KKyAgIEZndGJsPS91c3IvYmluL2d0YmwKKyAgIEZjb2w9L3Vzci9iaW4vY29sCitAQCAtNDg1LDI1ICs0ODcsMjUgQEAKKyAgIHRoZW4KKyAgICAgaWYgdGVzdCAkRm5yb2ZmID0gIm1pc3NpbmciCisgICAgIHRoZW4KKy0gICAgICBucm9mZj0ibnJvZmYgLVRsYXRpbjEgLW1hbmRvYyIKKysgICAgICBucm9mZj0ibnJvZmYgLVR1dGY4IC1tYW5kb2MiCisgICAgIGVsc2UKKy0gICAgICBucm9mZj0iJEZucm9mZiAtVGxhdGluMSAtbWFuZG9jIgorKyAgICAgIG5yb2ZmPSIkRm5yb2ZmIC1UdXRmOCAtbWFuZG9jIgorICAgICBmaQorICAgICB0cm9mZj0idHJvZmYgLW1hbmRvYyIKKyAgICAgZWNobyAiV2FybmluZzogY291bGQgbm90IGZpbmQgZ3JvZmYiCisgICBlbHNlCisgICAgIGlmIHRlc3QgJEZucm9mZiA9ICJtaXNzaW5nIgorICAgICB0aGVuCistICAgICAgbnJvZmY9IiRGZ3JvZmYgLVRsYXRpbjEgLW1hbmRvYyIKKysgICAgICBucm9mZj0iJEZncm9mZiAtVHV0ZjggLW1hbmRvYyIKKyAgICAgZWxzZQorLSAgICAgIG5yb2ZmPSIkRm5yb2ZmIC1UbGF0aW4xIC1tYW5kb2MiCisrICAgICAgbnJvZmY9IiRGbnJvZmYgLVR1dGY4IC1tYW5kb2MiCisgICAgIGZpCisgICAgIHRyb2ZmPSIkRmdyb2ZmIC1UcHMgLW1hbmRvYyIKKy0gICAgam5yb2ZmPSIkRmdyb2ZmIC1UbmlwcG9uIC1tYW5kb2NqIgorKyAgICBqbnJvZmY9IiRGam5yb2ZmIC1UdXRmOCAtbWFuZG9jaiIKKyAgIGZpCisgICBlcW49IiRGZ2VxbiAtVHBzIgorLSAgbmVxbj0iJEZnZXFuIC1UbGF0aW4xIgorLSAgam5lcW49IiRGZ2VxbiAtVG5pcHBvbiIKKysgIG5lcW49IiRGZ2VxbiAtVHV0ZjgiCisrICBqbmVxbj0iJEZnZXFuIC1UdXRmOCIKKyAgIHRibD0iJEZndGJsIgorICAgY29sPSIkRmNvbCIKKyAgIHZncmluZD0iJEZ2Z3JpbmQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVrLWNvbmZwYXRoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ay1jb25mcGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTc0NmMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ay1jb25mcGF0aC5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBjb25maWd1cmUJMjAwNi0wNS0wMSAxOTo1NjoxNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBjb25maWd1cmUub2RlbgkyMDA4LTEyLTIxIDE5OjE2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTE5OCw3ICsxOTgsNyBAQAorICAgICBjb25mZGlyPSIke2NvbmZwcmVmaXh9L3NoYXJlL21pc2MiCisgICBmaQorIGZpCistY29uZmZpbGVuYW1lPSJtYW4uY29uZiIKKytjb25mZmlsZW5hbWU9Im1hbi5jb25maWciCisgCisgaWYgdGVzdCAiJFJBTkRPTSIgPSAiJFJBTkRPTSI7IHRoZW4KKyAgICMgUGxhaW4gb2xkIEJvdXJuZSBzaGVsbC4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWstbm9uYXNjaWkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVrLW5vbmFzY2lpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NjJkOWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVrLW5vbmFzY2lpLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIC4vc3JjL2Fwcm9wb3Muc2gubm9uYXNjaWkJMjAwMS0xMS0yMyAwMDozMDo0Mi4wMDAwMDAwMDAgKzAxMDAKKysrKyAuL3NyYy9hcHJvcG9zLnNoCTIwMDItMDgtMTMgMTU6NDQ6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtMTgsOSArMTgsOSBAQAorIAorICMgV2hlbiBtYW4gcGFnZXMgaW4geW91ciBmYXZvcml0ZSBsb2NhbGUgbG9vayB0byBncmVwIGxpa2UgYmluYXJ5IGZpbGVzCisgIyAoYW5kIHlvdSB1c2UgR05VIGdyZXApIHlvdSBtYXkgd2FudCB0byBhZGQgdGhlICdhJyBvcHRpb24gdG8gKmdyZXBvcHQxLgorLWFwcm9wb3NncmVwb3B0MT0naScKKythcHJvcG9zZ3JlcG9wdDE9J2lhJworIGFwcm9wb3NncmVwb3B0Mj0nJworLXdoYXRpc2dyZXBvcHQxPSdpdycKKyt3aGF0aXNncmVwb3B0MT0naXdhJworIHdoYXRpc2dyZXBvcHQyPSdeJworIGdyZXBvcHQxPSQlYXByb3Bvc19vcl93aGF0aXMlZ3JlcG9wdDEKKyBncmVwb3B0Mj0kJWFwcm9wb3Nfb3Jfd2hhdGlzJWdyZXBvcHQyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVrLXNvZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ay1zb2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGI5MjUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ay1zb2ZpeC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS41ai9zcmMvbWFuLmMuc29maXgJVGh1IE5vdiAyMiAxNDo1MTo0NCAyMDAxCisrKysgbWFuLTEuNWovc3JjL21hbi5jCVRodSBOb3YgMjIgMTQ6NTI6NDQgMjAwMQorQEAgLTMwMCw3ICszMDAsNyBAQAorIAorICAgICAgaWYgKHN0cmxlbihuYW1lMCkgPj0gc2l6ZW9mKHVsdG5hbWUpKQorIAkgICAgIHJldHVybiBuYW1lMDsKKy0gICAgIHN0cmNweSh1bHRuYW1lLCBuYW1lMCk7CisrICAgICBzdHJuY3B5KHVsdG5hbWUsIG5hbWUwLCBCVUZTSVpFLTMyKTsKKyAgICAgIG5hbWUgPSB1bHRuYW1lOworIAorIGFnYWluOgorQEAgLTMzMiw3ICszMzIsNyBAQAorIAkgICAqIC5zbyBmaWxlcyAtIHdlIGNvdWxkIGdsb2IgZm9yIGFsbCBwb3NzaWJsZSBleHRlbnNpb25zLAorIAkgICAqIGZvciBub3c6IG9ubHkgdHJ5IC5negorIAkgICAqLworLQkgIGVsc2UgaWYgKGZwID09IE5VTEwgJiYgZ2V0X2V4cGFuZGVyKCIuZ3oiKSAmJgorKwkgIGlmIChmcCA9PSBOVUxMICYmIGdldF9leHBhbmRlcigiLmd6IikgJiYKKyAJCSAgIHN0cmxlbihuYW1lKStzdHJsZW4oIi5neiIpIDwgQlVGU0laRSkgeworIAkgICAgICAgc3RyY2F0KG5hbWUsICIuZ3oiKTsKKyAJICAgICAgIGZwID0gZm9wZW4gKG5hbWUsICJyIik7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1idWcxMTYyMS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLWJ1ZzExNjIxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MTI5OTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1idWcxMTYyMS5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSAuL2NvbmZpZ3VyZS5hZAkyMDAzLTEyLTExIDE5OjE3OjEwLjAwMDAwMDAwMCArMDEwMAorKysrIC4vY29uZmlndXJlCTIwMDMtMTItMTEgMTk6MTc6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtMjYsNyArMjYsNyBAQAorICMgKEluZGVlZCwgLXIgbWF5IGNhdXNlIHRoZSB0ZXJtaW5hbCB0byBnZXQgaW50byBmdW5ueSBzdGF0ZXMuCisgIyBWZXJ5IGluY29udmVuaWVudC4gRm9yIHZpZXdpbmcgcGFnZXMgaW4gc3RyYW5nZSBsb2NhbGVzLCBzZXQgTENfKi4pCisgIworLURFRkFVTFRMRVNTT1BUPSItaXMiCisrREVGQVVMVExFU1NPUFQ9Ii1pc3IiCisgIworICMgTm90ZSB0aGF0IG5vdCBjcmVhdGluZyBhbnkgY2F0IGRpcmVjdG9yaWVzICgvdmFyL2NhY2hlL21hbiBvciBzbykKKyAjIGFuZCBub3QgbWFraW5nIG1hbiBzdWlkIG9yIHNnaWQgaXMgcmVjb21tZW5kZWQuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1idWlsZHJvb3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1idWlsZHJvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM5N2Y1NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLWJ1aWxkcm9vdC5wYXRjaApAQCAtMCwwICsxLDUyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSAuL2NvbmZpZ3VyZS5sZXNzCTIwMDMtMTItMTEgMTk6MTg6MTUuMDAwMDAwMDAwICswMTAwCisrKysgLi9jb25maWd1cmUJMjAwMy0xMi0xMSAxOToyMDowMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC00MDEsMTggKzQwMSwxMyBAQAorIAorIGlmIHRlc3QgIiRhbnMiID0gImZhbHNlIgorIHRoZW4KKy0gIGZvciBpIGluIG1vcmUgbGVzcyBjbXAgY2F0IGF3ayBnYXdrIG1hd2sKKy0gIGRvCistICAgIGV2YWwgRiRpPSJtaXNzaW5nIgorLSAgICBmb3IgaiBpbiAkREVGUEFUSAorLSAgICBkbworLSAgICAgIGlmIHRlc3QgLWYgJGovJGkKKy0gICAgICB0aGVuCistCWV2YWwgRiRpPSRqLyRpCistCWJyZWFrCistICAgICAgZmkKKy0gICAgZG9uZQorLSAgZG9uZQorKyAgRm1vcmU9L2Jpbi9tb3JlCisrICBGbGVzcz0vdXNyL2Jpbi9sZXNzCisrICBGY21wPS91c3IvYmluL2NtcAorKyAgRmNhdD0vYmluL2NhdAorKyAgRmdhd2s9L2Jpbi9nYXdrCisrICBGYXdrPS9iaW4vZ2F3aworKyAgRm1hd2s9bWlzc2luZworICAgdHJvZmY9IiIKKyAgIG5yb2ZmPSIiCisgICBqbnJvZmY9IiIKK0BAIC00NTcsNiArNDUyLDE5IEBACisgICAgICAgZmkKKyAgICAgZG9uZQorICAgZG9uZQorKyAgRmdyb2ZmPS91c3IvYmluL2dyb2ZmCisrICBGZ2Vxbj0vdXNyL2Jpbi9nZXFuCisrICBGZ3RibD0vdXNyL2Jpbi9ndGJsCisrICBGY29sPS91c3IvYmluL2NvbAorKyAgRmdyZWZlcj0vdXNyL2Jpbi9ncmVmZXIKKysgIEZncGljPS91c3IvYmluL2dwaWMKKysgIEZtb3JlPS9iaW4vbW9yZQorKyAgRmxlc3M9L3Vzci9iaW4vbGVzcworKyAgRmNtcD0vdXNyL2Jpbi9jbXAKKysgIEZjYXQ9L2Jpbi9jYXQKKysgIEZnYXdrPS9iaW4vZ2F3aworKworKworICAgZm9yIGkgaW4gZXFuIHRibCByZWZlciBwaWMKKyAgIGRvCisgICAgIGlmIHRlc3QgYGV2YWwgZWNobyBcXCRGZyRpYCA9ICJtaXNzaW5nIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41bTItbm8tY29sb3ItZm9yLXByaW50aW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41bTItbm8tY29sb3ItZm9yLXByaW50aW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NWZmMWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1uby1jb2xvci1mb3ItcHJpbnRpbmcucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gbWFuLTEuNW0yL2NvbmZpZ3VyZS5jb2xvcgkyMDA2LTA5LTE2IDE4OjI3OjM3LjAwMDAwMDAwMCArMDIwMAorKysrIG1hbi0xLjVtMi9jb25maWd1cmUJMjAwNi0wOS0xNiAxODoyODo0NC4wMDAwMDAwMDAgKzAyMDAKK0BAIC01MzksNiArNTM5LDggQEAKKyAgICAgdHJvZmY9IiR0cm9mZiAtYyIKKyAgICAgbnJvZmY9IiRucm9mZiAtYyIKKyAgICAgam5yb2ZmPSIkam5yb2ZmIC1jIgorK2Vsc2UKKysgICAgdHJvZmY9IiR0cm9mZiAtYyIKKyBmaQorIAorIGlmIFsgeCRkZWZhdWx0ID0geCBdOyB0aGVuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1zaWdwaXBlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41bTItc2lncGlwZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWY3OGVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41bTItc2lncGlwZS5wYXRjaApAQCAtMCwwICsxLDMwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS41bTIvc3JjL3V0aWwuY19zaWdwaXBlCTIwMDYtMTItMDkgMTM6NDM6MjEuMDAwMDAwMDAwICswMTAwCisrKysgbWFuLTEuNW0yL3NyYy91dGlsLmMJMjAwNi0xMi0wOSAxMzo1MzoxMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMTYsMTEgKzExNiwxNCBAQAorIHN0YXRpYyBpbnQKKyBzeXN0ZW0xIChjb25zdCBjaGFyICpjb21tYW5kKSB7CisgCXZvaWQgKCpwcmV2X2hhbmRsZXIpKGludCkgPSBzaWduYWwgKFNJR0lOVCxjYXRjaF9pbnQpOworKwlzaWduYWwgKFNJR1BJUEUsU0lHX0lHTik7CisgCWludCByZXQgPSBzeXN0ZW0oY29tbWFuZCk7CisgCisgCS8qIGNoaWxkIHRlcm1pbmF0ZWQgd2l0aCBzaWduYWw/ICovCisgCWlmIChXSUZTSUdOQUxFRChyZXQpICYmCistCSAgICAoV1RFUk1TSUcocmV0KSA9PSBTSUdJTlQgfHwgV1RFUk1TSUcocmV0KSA9PSBTSUdRVUlUKSkKKysJICAgIChXVEVSTVNJRyhyZXQpID09IFNJR0lOVCB8fAorKwkJIFdURVJNU0lHKHJldCkgPT0gU0lHUElQRSB8fAorKwkJIFdURVJNU0lHKHJldCkgPT0gU0lHUVVJVCkpCisgCQlleGl0KDEpOworIAorIAkvKiBvciB3ZSBjYXVnaHQgYW4gaW50ZXJydXB0PyAqLworQEAgLTEyOCw2ICsxMzEsNyBAQAorIAkJZXhpdCgxKTsKKyAKKyAJc2lnbmFsKFNJR0lOVCxwcmV2X2hhbmRsZXIpOworKwlzaWduYWwoU0lHUElQRSxTSUdfREZMKTsKKyAJcmV0dXJuIHJldDsKKyB9CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi10dl9maHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi10dl9maHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU2NmQ3NTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi10dl9maHMucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gbWFuL01ha2VmaWxlLmluCTIwMDgtMTItMjEgMTk6MTk6MzMuMDAwMDAwMDAwICswMTAwCisrKysgbWFuL01ha2VmaWxlLmluLm9kZW4JMjAwOC0xMi0yMSAxOToxOTozOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zNCw2ICszNCwxNSBAQAorIAlmb3IgaSBpbiAkKE1BTjgpOyBcCisgCQlkbyBpZiB0ZXN0IC1mICQkaS44OyB0aGVuICQoSU5TVEFMTCkgJCRpLjggJChtYW5kaXIpL21hbjgvJCRpLkBtYW44ZXh0QDsgZmk7IGRvbmUKKyAKKytpbnN0YWxsLWwxMG46ICQoQUxMKQorKwlta2RpciAtcCAkKG1hbmRpcikvJChTTEFORykvbWFuMSAkKG1hbmRpcikvJChTTEFORykvbWFuNSAkKG1hbmRpcikvJChTTEFORykvbWFuOAorKwlmb3IgaSBpbiAkKE1BTjEpOyBcCisrCQlkbyAkKElOU1RBTEwpICQkaS4xICQobWFuZGlyKS8kKFNMQU5HKS9tYW4xLyQkaS5AbWFuMWV4dEA7IGRvbmUKKysJZm9yIGkgaW4gJChNQU41KTsgXAorKwkJZG8gJChJTlNUQUxMKSAkJGkuNSAkKG1hbmRpcikvJChTTEFORykvbWFuNS8kJGkuQG1hbjVleHRAOyBkb25lCisrCWZvciBpIGluICQoTUFOOCk7IFwKKysJCWRvIGlmIHRlc3QgLWYgJCRpLjg7IHRoZW4gJChJTlNUQUxMKSAkJGkuOCAkKG1hbmRpcikvJChTTEFORykvbWFuOC8kJGkuQG1hbjhleHRAOyBmaTsgZG9uZQorKworIGNsZWFuOgorIAlybSAtZiBjb3JlICouaW4gKi5AbWFuMWV4dEAgKi5AbWFuNWV4dEAgKi5AbWFuOGV4dEAgKn4KKyAKK0BAIC00OSw3ICs1OCw3IEBACisgCUBmb3IgaSBpbiBAbGFuZ3VhZ2VzQDsgZG8gaWYgdGVzdCAtZCAkJGk7IHRoZW4gZWNobzsgXAorIAkJZWNobyAiPT09PSBJbnN0YWxsaW5nIHRoZSBgY2F0ICQkaS50eHRgIG1hbiBwYWdlcy4gPT09PSI7IFwKKyAJCWNkICQkaTsgU0xBTkc9LyQkaTsgaWYgdGVzdCAkJFNMQU5HID0gL2VuOyB0aGVuIFNMQU5HPSA7IGZpOyBcCistCQlleHBvcnQgU0xBTkc7IG1ha2UgLWYgLi4vTWFrZWZpbGUgaW5zdGFsbDsgY2QgLi47IFwKKysJCWV4cG9ydCBTTEFORzsgbWFrZSAtZiAuLi9NYWtlZmlsZSBpbnN0YWxsLWwxMG47IGNkIC4uOyBcCisgCQllbHNlIGVjaG8gIj09PT0gTm8gJCRpIG1hbiBwYWdlcyBmb3VuZC4gPT09PSI7IGZpOyBkb25lCisgCisgY2xlYW5zdWJkaXJzOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS1pMThuX3doYXRpcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtaTE4bl93aGF0aXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMyMTMyNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtaTE4bl93aGF0aXMucGF0Y2gKQEAgLTAsMCArMSwxNDUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworZGlmZiAtTmF1ciBtYW4tMS42ZS5vcmlnL3NyYy9hcHJvcG9zLnNoIG1hbi0xLjZlL3NyYy9hcHJvcG9zLnNoCistLS0gbWFuLTEuNmUub3JpZy9zcmMvYXByb3Bvcy5zaAkyMDA3LTA1LTE4IDEzOjQ5OjMxLjAwMDAwMDAwMCAtMDMwMAorKysrIG1hbi0xLjZlL3NyYy9hcHJvcG9zLnNoCTIwMDctMDUtMTggMTQ6MjQ6MzMuMDAwMDAwMDAwIC0wMzAwCitAQCAtNjAsMTYgKzYwLDU2IEBACisgICAgIGVzYWMKKyBkb25lCisgCisrIyBsaXN0IG9mIGxhbmd1YWdlcyB0byBsb29rIGZvcgorK0xBTkdfTElTVD1gZWNobyAkTEFOR1VBR0U6JExDX0FMTDokTENfTUVTU0FHRVM6JExBTkcgfCB0ciAnOicgJyAnYAorK0RJUl9MSVNUPSIiCisrZm9yIGQgaW4gL3Zhci9jYWNoZS9tYW4gJG1hbnBhdGggL3Vzci9saWIKKytkbworKyAgICBmb3IgbCBpbiAkTEFOR19MSVNUCisrICAgIGRvCisrICAgICAgICBpZiBbIC1kICRkLyRsIF0KKysgICAgICAgIHRoZW4KKysgICAgICAgICAgICAjIGNoZWNrIHRoYXQgdGhlIHBhdGggaXMgbm90IGFscmVhZHkgaW4gdGhlIGxpc3QKKysgICAgICAgICAgICBpZiAhIGVjaG8gIiRESVJfTElTVCIgfCBncmVwICIgJGQvJGxcYiIgPiAvZGV2L251bGwKKysgICAgICAgICAgICB0aGVuCisrICAgICAgICAgICAgICAgIERJUl9MSVNUPSIkRElSX0xJU1QgJGQvJGwiCisrICAgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgIGRvbmUKKysgICAgRElSX0xJU1Q9IiRESVJfTElTVCAkZCIKKysgICAgIyBjaGVjayB0aGF0IHRoZSBwYXRoIGlzIG5vdCBhbHJlYWR5IGluIHRoZSBsaXN0CisrICAgIGlmICEgZWNobyAiJERJUl9MSVNUIiB8IGdyZXAgIiAkZFxiIiA+IC9kZXYvbnVsbAorKyAgICB0aGVuCisrICAgICAgICBESVJfTElTVD0iJERJUl9MSVNUICRkLyRsIgorKyAgICBmaQorK2RvbmUKKysKKyB3aGlsZSBbICIkMSIgIT0gIiIgXQorIGRvCisgICAgIGZvdW5kPTAKKy0gICAgZm9yIGQgaW4gL3Zhci9jYWNoZS9tYW4gJG1hbnBhdGggL3Vzci9saWIKKysgICAgIyBpbiBvcmRlciBub3QgdG8gZGlzcGxheSBsaW5lcyBpbiBtb3JlIHRoYW4gb25lIGxhbmd1YWdlIGZvcgorKyAgICAjIGEgc2FtZSBtYW4gcGFnZTsgd2UgY2hlY2sgdGhhdCBhIGdpdmVuIG1hbiBwYWdlIG5hbWUKKysgICAgIyBoYXNuJ3QgYWxyZWFkeSBiZWVuIGRpc3BsYXllZAorKyAgICBCQVo9IiIKKysgICAgZm9yIGQgaW4gJERJUl9MSVNUCisgICAgIGRvCisgICAgICAgICBpZiBbIC1mICRkL3doYXRpcyBdCisgICAgICAgICB0aGVuCistICAgICAgICAgICAgaWYgZ3JlcCAtIiRncmVwb3B0MSIgIiRncmVwb3B0MiIiJDEiICRkL3doYXRpcworKyAgICAgICAgICAgIGlmIEZPTz1gZ3JlcCAtIiRncmVwb3B0MSIgIiRncmVwb3B0MiIiJDEiICRkL3doYXRpc2AKKyAgICAgICAgICAgICB0aGVuCistICAgICAgICAgICAgICAgIGZvdW5kPTEKKysgICAgICAgICAgICAgICAgIyB0aGUgTENfQUxMPUMgaXMgbmVlZGVkIGluIGNhc2UgdGhlIHRleHQgaXMKKysgICAgICAgICAgICAgICAgIyBpbiBhIGRpZmZlcmVudCBlbmNvZGluZyB0aGFuIHRoZSBsb2NhbGUKKysgICAgICAgICAgICAgICAgQkFSPWBlY2hvIC1lICIkRk9PIiB8IExDX0FMTD1DIHNlZCAncy8gLSAuKiQvLycgfCB0ciAnIFtdJyAnXycgfCBzb3J0IC11YAorKyAgICAgICAgICAgICAgICBmb3IgaSBpbiAkQkFSCisrICAgICAgICAgICAgICAgIGRvCisrICAgICAgICAgICAgICAgICAgICBpZiAhIGVjaG8gIiRCQVoiIHwgZ3JlcCAiJGkiID4gL2Rldi9udWxsCisrICAgICAgICAgICAgICAgICAgICB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgQkFaPSIkQkFaICRpIgorKyAgICAgICAgICAgICAgICAgICAgICAgIGk9Il5gZWNobyAkaSB8IHNlZCAnczpfXCs6XFxcKFxbXyBcXVxcXHxcXFxbXFxcfFxcXF1cXFwpXFxcKzpnJ2AiCisrICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAtZSAiJEZPTyIgfCBncmVwICIkaSIKKysgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZD0xCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICBkb25lCisgIyBTb21lIHBlb3BsZSBhcmUgc2F0aXNmaWVkIHdpdGggYSBzaW5nbGUgb2NjdXJyZW5jZQorICMgQnV0IGl0IGlzIGJldHRlciB0byBnaXZlIGFsbAorICMgICAgICAgICAgICAgICBicmVhaworZGlmZiAtTmF1ciBtYW4tMS42ZS5vcmlnL3NyYy9tYWtld2hhdGlzLnNoIG1hbi0xLjZlL3NyYy9tYWtld2hhdGlzLnNoCistLS0gbWFuLTEuNmUub3JpZy9zcmMvbWFrZXdoYXRpcy5zaAkyMDA3LTA1LTE4IDEzOjQ5OjMxLjAwMDAwMDAwMCAtMDMwMAorKysrIG1hbi0xLjZlL3NyYy9tYWtld2hhdGlzLnNoCTIwMDctMDUtMTggMTM6NTA6MDcuMDAwMDAwMDAwIC0wMzAwCitAQCAtNDEsMTIgKzQxLDMyIEBACisgCisgcHJvZ3JhbT1gYmFzZW5hbWUgJDBgCisgCisrIyB0aGlzIGFsbG93cyB0byBkZWZpbmUgbGFuZ3VhZ2Ugc3BlY2lmaWMgdmFsdWVzIGZybyBOQU1FLCBERVNDUklQVElPTgorKyMgaWYgbm90IGRlZmluZWQsIHVzaW5nIHRob3NlIGRlZmF1bHQgdmFsdWVzCisraWYgWyAteiAiJE1BTl9OQU1FIiBdCisrdGhlbgorKwlNQU5fTkFNRT0i0JjQnNCVfE5PTXxKTcOJTk98TkFWTnzOn86dzp/OnM6RfE5PTUJSRXxOSU1FfElaRU5BfE5JTUl8SU1FfFwKKytOw4lWfE5PTUV85ZCN5YmNfOydtOumhHxOQUFNfE5BWldBfE5VTUV80JjQnNCvfE1FTk980J3QkNCX0JLQkHzlkI3np7B85ZCN56ixIgorK2ZpCisraWYgWyAteiAiJE1BTl9ERVNDUklQVElPTiIgXQorK3RoZW4KKysJTUFOX0RFU0NSSVBUSU9OPSLQntCf0JjQodCQ0J3QmNCVfERFU0NSSVBDScOTfFBPUElTfEJFU0tSSVZFTFNFfEJFU0NIUkVJQlVOR3xcCisrzqDOlc6hzpnOk86hzpHOps6XfERFU0NSSVBDScOTTnxLSVJKRUxEVVN8QVpBTFBFTkF8S1VWQVVTfE9QSVN8TEXDjVLDgVN8REVTQ1JJWklPTkV8XAorK+iqrOaYjnzshKTrqoV8QkVTQ0hSSUpWSU5HfERFU0NSScOHw4NPfERFU0NSSUVSRXzQntCf0JjQoXzmj4/ov7AiCisrZmkKKysjIG1ha2UgdGhlbSBpbnRvIGF3ayByZWdleHAKKytNQU5fTkFNRT0iXigke01BTl9OQU1FfSkiOworK01BTl9ERVNDUklQVElPTj0iXigke01BTl9ERVNDUklQVElPTn0pIjsKKysKKyAjIEluIGNhc2UgYm90aCAvdXNyL21hbiBhbmQgL3Vzci9zaGFyZS9tYW4gZXhpc3QsIHRoZSBmb3JtZXIgaXMgbG9jYWwKKyAjIGFuZCBzaG91bGQgYmUgZmlyc3QuCisgIyBJdCBpcyBhIGJ1ZyB0byBhZGQgL3Zhci9jYWNoZS9tYW4gdG8gREVGQ0FUUEFUSC4KKyBkbT0KKyBmb3IgZCBpbiAvdXNyL3NoYXJlL21hbiAvdXNyL21hbiAvdXNyL1gxMVI2L21hbiAvdXNyL2xvY2FsL21hbgorIGRvCisrICAgIGlmIFsgLW4gIiRMQU5HIiAtYSAtZCAiJGQvJExBTkciIF07IHRoZW4KKysJaWYgWyB4JGRtID0geCBdOyB0aGVuIGRtPSIkZC8kTEFORyI7IGVsc2UgZG09JGRtOiIkZC8kTEFORyI7IGZpCisrICAgIGZpCisgICAgIGlmIFsgLWQgJGQgXTsgdGhlbgorIAlpZiBbIHgkZG0gPSB4IF07IHRoZW4gZG09JGQ7IGVsc2UgZG09JGRtOiRkOyBmaQorICAgICBmaQorQEAgLTU1LDYgKzc1LDkgQEAKKyBkYz0KKyBmb3IgZCBpbiAvdmFyL2NhY2hlL21hbiAvdXNyL3NoYXJlL21hbi9wcmVmb3JtYXQgL3Vzci9tYW4vcHJlZm9ybWF0IC91c3Ivc2hhcmUvbWFuIC91c3IvbWFuCisgZG8KKysgICAgaWYgWyAtbiAiJExBTkciIC1hIC1kICIkZC8kTEFORyIgXTsgdGhlbgorKwlpZiBbIHgkZGMgPSB4IF07IHRoZW4gZG09IiRkLyRMQU5HIjsgZWxzZSBkbT0kZGM6IiRkLyRMQU5HIjsgZmkKKysgICAgZmkKKyAgICAgaWYgWyAtZCAkZCBdOyB0aGVuCisgCWlmIFsgeCRkYyA9IHggXTsgdGhlbiBkYz0kZDsgZWxzZSBkYz0kZGM6JGQ7IGZpCisgICAgIGZpCitAQCAtMTk0LDcgKzIxNyw3IEBACisgCSAgICBzZWN0aW9uPSRpCisgCSAgICBjdXJkaXI9JG1hbmRpci8ke3BhZ2VzfSRpCisgCSAgICBleHBvcnQgc2VjdGlvbiB2ZXJib3NlIGN1cmRpcgorLQkgICAgZmluZCAkbWFuZGlyLyR7cGFnZXN9JGkvLiAtbmFtZSAnKicgJGZpbmRhcmcwICRmaW5kYXJnIC1wcmludCB8ICRBV0sgJworKwkgICAgZmluZCAkbWFuZGlyLyR7cGFnZXN9JGkvLiAtbmFtZSAnKicgJGZpbmRhcmcwICRmaW5kYXJnIC1wcmludCB8IExDX0FMTD1DICRBV0sgLXYgTUFOX05BTUU9IiRNQU5fTkFNRSIgLXYgTUFOX0RFU0NSSVBUSU9OPSIkTUFOX0RFU0NSSVBUSU9OIiAnCisgCisgCSAgICBmdW5jdGlvbiByZWFkbGluZSgpIHsKKyAJICAgICAgaWYgKHVzZV96Y2F0IHx8IHVzZV9iemNhdCkgeworQEAgLTI2MSwxMyArMjg0LDcgQEAKKyAJCWdzdWIoLy5cYi8sICIiKTsKKyAJCWlmICgoJDEgfiAvXlwuW1NzXVtIaF0vICYmCisgCQkgICgkMiB+IC9bTm5dW0FhXVtNbV1bRWVdLyB8fAorLQkJICAgJDIgfiAvXkpNyU5PLyB8fCAkMiB+IC9eTkFWTi8gfHwgJDIgfiAvXk5VTUUvIHx8CistCQkgICAkMiB+IC9eQkVaRUlDSE5VTkcvIHx8ICQyIH4gL15OT01CUkUvIHx8CistCQkgICAkMiB+IC9eTklNSS8gfHwgJDIgfiAvXk5PTS8gfHwgJDIgfiAvXklNRS8gfHwKKy0JCSAgICQyIH4gL15OW8lFXVYvIHx8ICQyIH4gL15OQU1BLyB8fCAkMiB+IC9ezL7BsC8gfHwKKy0JCSAgICQyIH4gL17Mvr7OLyB8fCAkMiB+IC9ewMy4py8gfHwgJDIgfiAvXk5BWldBLyB8fAorLQkJICAgJDIgfiAvXu7h+vfh7unlLyB8fCAkMiB+IC9ew/uzxi8gfHwgJDIgfiAvXqZXutkvIHx8CistCQkgICAkMiB+IC9eTk9NRS8gfHwgJDIgfiAvXk5BQU0vIHx8ICQyIH4gL17IzMUvKSkgfHwKKysJCSAgICQyIH4gTUFOX05BTUUgKSkgfHwKKyAJCSAgKHBhZ2VzID09ICJjYXQiICYmICQxIH4gL15OQU1FLykpIHsKKyAJCSAgICBpZiAoIWluc2gpIHsKKyAJCSAgICAgIGluc2ggPSAxOworQEAgLTI3OCw2ICsyOTUsNyBAQAorIAkJICBpZiAoJDEgfiAvXlwuW1NzXVtIaFlTXS8gfHwKKyAJCSAgICAocGFnZXMgPT0gImNhdCIgJiYKKyAJCSAgICAoJDEgfiAvXlNbeVllRV0vIHx8ICQxIH4gL15ERVNDUklQVElPTi8gfHwKKysJCSAgICAgJDEgfiBNQU5fREVTQ1JJUFRJT04gfHwKKyAJCSAgICAgJDEgfiAvXkNPTU1BTkQvIHx8ICQxIH4gL15PVkVSVklFVy8gfHwKKyAJCSAgICAgJDEgfiAvXlNUUlVDVFVSRVMvIHx8ICQxIH4gL15JTlRST0RVQ1RJT04vIHx8CisgCQkgICAgICQwIH4gL15bXiBdLykpKSB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLW1hbmRpcnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLW1hbmRpcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI0MDA2NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtbWFuZGlycy5wYXRjaApAQCAtMCwwICsxLDMxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS42ZS5vcmlnL3NyYy9tYW4uY29uZi5pbgkyMDA1LTA4LTIwIDIwOjI2OjA2LjAwMDAwMDAwMCAtMDMwMAorKysrIG1hbi0xLjZlL3NyYy9tYW4uY29uZi5pbgkyMDA3LTA1LTE4IDEwOjMwOjI5LjAwMDAwMDAwMCAtMDMwMAorQEAgLTM2LDExICszNiwxMiBAQAorICMKKyAjIEV2ZXJ5IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIE1BTlBBVEggaW5jbHVkZXMgdGhlc2UgZmllbGRzCisgIworLU1BTlBBVEgJL3Vzci9tYW4KKyBNQU5QQVRICS91c3Ivc2hhcmUvbWFuCisrTUFOUEFUSAkvdXNyL1gxMVI2L21hbgorIE1BTlBBVEgJL3Vzci9sb2NhbC9tYW4KKyBNQU5QQVRICS91c3IvbG9jYWwvc2hhcmUvbWFuCistTUFOUEFUSAkvdXNyL1gxMVI2L21hbgorK01BTlBBVEgJL3Vzci9rZXJiZXJvcy9tYW4KKytNQU5QQVRICS91c3IvbWFuCisgIworICMgVW5jb21tZW50IGlmIHlvdSB3YW50IHRvIGluY2x1ZGUgb25lIG9mIHRoZXNlIGJ5IGRlZmF1bHQKKyAjCitAQCAtNjcsNiArNjgsOSBAQAorIE1BTlBBVEhfTUFQCS91c3IvWDExUjYvYmluCQkvdXNyL1gxMVI2L21hbgorIE1BTlBBVEhfTUFQCS91c3IvYmluL1gxMQkJL3Vzci9YMTFSNi9tYW4KKyBNQU5QQVRIX01BUAkvdXNyL2Jpbi9taAkJL3Vzci9zaGFyZS9tYW4KKytNQU5QQVRIX01BUAkvdXNyL2tlcmJlcm9zL2JpbgkJL3Vzci9rZXJiZXJvcy9tYW4KKytNQU5QQVRIX01BUAkvdXNyL2tlcmJlcm9zL3NiaW4JCS91c3Iva2VyYmVyb3MvbWFuCisrCisgIworICMgTk9BVVRPUEFUSCBrZWVwcyBtYW4gZnJvbSBhdXRvbWF0aWNhbGx5IGFkZGluZyBkaXJlY3RvcmllcyB0aGF0IGxvb2sgbGlrZQorICMgbWFudWFsIHBhZ2UgZGlyZWN0b3JpZXMgdG8gdGhlIHBhdGguCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLW5ld19zZWN0aW9ucy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtbmV3X3NlY3Rpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOTc3M2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLW5ld19zZWN0aW9ucy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS42ZS5vcmlnL2NvbmZpZ3VyZQkyMDA2LTA1LTAxIDE0OjU2OjE0LjAwMDAwMDAwMCAtMDMwMAorKysrIG1hbi0xLjZlL2NvbmZpZ3VyZQkyMDA3LTA1LTE4IDE0OjM1OjQzLjAwMDAwMDAwMCAtMDMwMAorQEAgLTk2MCw3ICs5NjAsNyBAQAorIAorICMgV2hhdCBzZWN0aW9ucyBkbyB3ZSBhbnRpY2lwYXRlPworIAorLXRtcHNlY3Rpb25zPSIxIDFwIDggMiAzIDNwIDQgNSA2IDcgOSAwcCB0Y2wgbiBsIHAgbyIKKyt0bXBzZWN0aW9ucz0iMSAxcCA4IDIgMyAzcCAzcG0gNCA1IDYgNyA5IDBwIHRjbCBuIGwgcCBvIgorIAorIGlmIFsgeCRkZWZhdWx0ID0geCBdOyB0aGVuCisgICBlY2hvICIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXJvX3Vzci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtcm9fdXNyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMWNiMGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXJvX3Vzci5wYXRjaApAQCAtMCwwICsxLDMzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK0luZGV4OiBtYW4tMS42Zi9zcmMvbWFrZXdoYXRpcy5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1hbi0xLjZmLm9yaWcvc3JjL21ha2V3aGF0aXMuc2gJMjAxMC0xMi0yOSAxMzo0MjozNC4wMDAwMDAwMDAgLTA4MDAKKysrKyBtYW4tMS42Zi9zcmMvbWFrZXdoYXRpcy5zaAkyMDEwLTEyLTI5IDEzOjQyOjM1LjY2NzQyODM0NyAtMDgwMAorQEAgLTEyNCw3ICsxMjQsNyBAQAorIAljb250aW51ZTs7CisgICAgIC1zKSBzZXRzZWN0aW9ucz0xCisgCWNvbnRpbnVlOzsKKy0gICAgLXUpIGZpbmRhcmc9Ii1jdGltZSAwIgorKyAgICAtdSkgZmluZGFyZz0iLW5ld2VyIC92YXIvY2FjaGUvbWFuL3doYXRpcyIKKyAJdXBkYXRlPTEKKyAJY29udGludWU7OworICAgICAtdikgdmVyYm9zZT0xCitAQCAtMTY1LDE0ICsxNjUsNyBAQAorICMgZmlyc3QgdHJ1bmNhdGUgYWxsIHRoZSB3aGF0aXMgZmlsZXMgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgbmV3LAorICMgdGhlbiBvbmx5IHVwZGF0ZSAtIHdlIG1pZ2h0IHZpc2l0IHRoZSBzYW1lIGRpcmVjdG9yeSB0d2ljZQorIGlmIFsgeCR1cGRhdGUgPSB4IF07IHRoZW4KKy0gICBmb3IgcGFnZXMgaW4gbWFuIGNhdAorLSAgIGRvCistICAgICAgZXZhbCBwYXRoPSJcJCRwYWdlcyJwYXRoCistICAgICAgZm9yIG1hbmRpciBpbiAkcGF0aAorLSAgICAgIGRvCistCSBjcCAvZGV2L251bGwgJG1hbmRpci93aGF0aXMKKy0gICAgICBkb25lCistICAgZG9uZQorKyAgIGNwIC9kZXYvbnVsbCAvdmFyL2NhY2hlL21hbi93aGF0aXMKKyBmaQorIAorIGZvciBwYWdlcyBpbiBtYW4gY2F0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXNlY3VyaXR5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS1zZWN1cml0eS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTJhODgyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS1zZWN1cml0eS5wYXRjaApAQCAtMCwwICsxLDYyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK2RpZmYgLU5hdXIgbWFuLTEuNmUub3JpZy9zcmMvbWFrZXdoYXRpcy5zaCBtYW4tMS42ZS9zcmMvbWFrZXdoYXRpcy5zaAorLS0tIG1hbi0xLjZlLm9yaWcvc3JjL21ha2V3aGF0aXMuc2gJMjAwNi0wNy0xOSAwMTo1ODowOC4wMDAwMDAwMDAgLTAzMDAKKysrKyBtYW4tMS42ZS9zcmMvbWFrZXdoYXRpcy5zaAkyMDA3LTA1LTE4IDEwOjE4OjMxLjAwMDAwMDAwMCAtMDMwMAorQEAgLTQ1LDcgKzQ1LDcgQEAKKyAjIGFuZCBzaG91bGQgYmUgZmlyc3QuCisgIyBJdCBpcyBhIGJ1ZyB0byBhZGQgL3Zhci9jYWNoZS9tYW4gdG8gREVGQ0FUUEFUSC4KKyBkbT0KKy1mb3IgZCBpbiAvdXNyL21hbiAvdXNyL3NoYXJlL21hbiAvdXNyL1gxMVI2L21hbiAvdXNyL2xvY2FsL21hbgorK2ZvciBkIGluIC91c3Ivc2hhcmUvbWFuIC91c3IvbWFuIC91c3IvWDExUjYvbWFuIC91c3IvbG9jYWwvbWFuCisgZG8KKyAgICAgaWYgWyAtZCAkZCBdOyB0aGVuCisgCWlmIFsgeCRkbSA9IHggXTsgdGhlbiBkbT0kZDsgZWxzZSBkbT0kZG06JGQ7IGZpCitAQCAtNTMsNyArNTMsNyBAQAorIGRvbmUKKyBERUZNQU5QQVRIPSRkbQorIGRjPQorLWZvciBkIGluIC91c3IvbWFuL3ByZWZvcm1hdCAvdXNyL21hbiAvdXNyL3NoYXJlL21hbi9wcmVmb3JtYXQgL3Vzci9zaGFyZS9tYW4KKytmb3IgZCBpbiAvdmFyL2NhY2hlL21hbiAvdXNyL3NoYXJlL21hbi9wcmVmb3JtYXQgL3Vzci9tYW4vcHJlZm9ybWF0IC91c3Ivc2hhcmUvbWFuIC91c3IvbWFuCisgZG8KKyAgICAgaWYgWyAtZCAkZCBdOyB0aGVuCisgCWlmIFsgeCRkYyA9IHggXTsgdGhlbiBkYz0kZDsgZWxzZSBkYz0kZGM6JGQ7IGZpCitAQCAtNzYsMTIgKzc2LDEyIEBACisgIyBXZSB0cnkgaGVyZSB0byBiZSBjYXJlZnVsIChhbmQgYXZvaWQgcHJlY29uc3RydWN0ZWQgc3ltbGlua3MpCisgIyBpbiBjYXNlIG1ha2V3aGF0aXMgaXMgcnVuIGFzIHJvb3QsIGJ5IGNyZWF0aW5nIGEgc3ViZGlyZWN0b3J5IG9mIC90bXAuCisgCistVE1QRklMRURJUj0vdG1wL3doYXRpcy50bXAuZGlyLiQkCistcm0gLXJmICRUTVBGSUxFRElSCistaWYgISBta2RpciAtbSAwNzAwICRUTVBGSUxFRElSOyB0aGVuCistICAgIGVjaG8gQ291bGQgbm90IGNyZWF0ZSAkVE1QRklMRURJUgorLSAgICBleGl0IDE7CisrVE1QRklMRURJUj1gbWt0ZW1wIC1kIC90bXAvbWFrZXdoYXRpc1hYWFhYWGAKKytpZiBbICQ/IC1uZSAwIF07IHRoZW4KKysgICBlY2hvICIkMDogQ2FuJ3QgY3JlYXRlIHRlbXAgZmlsZSwgZXhpdGluZy4uLiIKKysgICBleGl0IDEKKyBmaQorK2NobW9kIDA3MDAgJFRNUEZJTEVESVIKKyBUTVBGSUxFPSRUTVBGSUxFRElSL3cKKyAKKyAjIG1ha2Ugc3VyZSBUTVBGSUxFRElSIGlzIGRlbGV0ZWQgaWYgcHJvZ3JhbSBpcyBraWxsZWQgb3IgdGVybWluYXRlcworZGlmZiAtTmF1ciBtYW4tMS42ZS5vcmlnL3NyYy9tYW4uYyBtYW4tMS42ZS9zcmMvbWFuLmMKKy0tLSBtYW4tMS42ZS5vcmlnL3NyYy9tYW4uYwkyMDA2LTA1LTAxIDE3OjM0OjIyLjAwMDAwMDAwMCAtMDMwMAorKysrIG1hbi0xLjZlL3NyYy9tYW4uYwkyMDA3LTA1LTE4IDEwOjExOjMzLjAwMDAwMDAwMCAtMDMwMAorQEAgLTEyMzQsNyArMTIzNCw2IEBACisgI2VuZGlmCisgCisgCistI2lmIDAKKyAgICAgIHsKKyAJLyogVGhlcmUgYXJlIG5vIGtub3duIGNhc2VzIG9mIGJ1ZmZlciBvdmVyZmxvdyBjYXVzZWQgYnkKKyAJICAgZXhjZXNzaXZlbHkgbG9uZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIEluIGNhc2UgeW91IGZpbmQgb25lLAorQEAgLTEyNTcsNyArMTI1Niw2IEBACisgCSAgIE1BTl9JQ09OVl9QQVRILCBNQU5fSUNPTlZfT1BULCBNQU5fSUNPTlZfSU5QVVRfQ0hBUlNFVCwKKyAJICAgTUFOX0lDT05WX09VVFBVVF9DSEFSU0VULCBOTFNQQVRILCBQQVRIICovCisgICAgICB9CistI2VuZGlmCisgCisgCisgI2lmbmRlZiBfX0ZyZWVCU0RfXyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtdXNlX2kxOG5fdmFyc19pbl9hX3N0ZF93YXkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXVzZV9pMThuX3ZhcnNfaW5fYV9zdGRfd2F5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2OGY3NDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXVzZV9pMThuX3ZhcnNfaW5fYV9zdGRfd2F5LnBhdGNoCkBAIC0wLDAgKzEsMTYwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK2RpZmYgLU5hdXIgbWFuLTEuNmUub3JpZy9jYXRvcGVuL2NhdG9wZW4uYyBtYW4tMS42ZS9jYXRvcGVuL2NhdG9wZW4uYworLS0tIG1hbi0xLjZlLm9yaWcvY2F0b3Blbi9jYXRvcGVuLmMJMjAwNS0wOC0yMCAyMDoyNjowNi4wMDAwMDAwMDAgLTAzMDAKKysrKyBtYW4tMS42ZS9jYXRvcGVuL2NhdG9wZW4uYwkyMDA3LTA1LTE4IDExOjMxOjA1LjAwMDAwMDAwMCAtMDMwMAorQEAgLTksMjIgKzksNjMgQEAKKyBleHRlcm4gY2hhciAqaW5kZXggKGNvbnN0IGNoYXIgKiwgaW50KTsgICAgICAgICAvKiBub3QgYWx3YXlzIGluIDxzdHJpbmcuaD4gKi8KKyBleHRlcm4gY2hhciAqbXlfbWFsbG9jKGludCk7CS8qIGluIHV0aWwuYyAqLworIAorKy8qIGlmIHRoZSBwcm9ncmFtIGhhcyBzZ2lkL3N1aWQgcHJpdmlsZWdlcyB0aGVuIGdldGVudiBkb2Vzbid0IHJldHVybgorKyAqIE5MU1BBVEg7IHNvIHdlIHNldCBoZXJlIGEgZ29vZCBkZWZhdWx0IHZhbHVlLgorKyAqLworICNpZm5kZWYgREVGQVVMVF9OTFNQQVRICisgIyBpZiBfX0dMSUJDX18gPj0gMgorLSMgIGRlZmluZSBERUZBVUxUX05MU1BBVEggIi91c3Ivc2hhcmUvbG9jYWxlLyVMLyVOIgorKyMgIGRlZmluZSBERUZBVUxUX05MU1BBVEggIi91c3Ivc2hhcmUvbG9jYWxlLyVMLyVOOi91c3Ivc2hhcmUvbG9jYWxlLyVsXyV0LyVOOi91c3Ivc2hhcmUvbG9jYWxlLyVsLyVOIgorICMgZWxzZQorICMgIGRlZmluZSBERUZBVUxUX05MU1BBVEggIi91c3IvbGliL2xvY2FsZS8lTi8lTCIKKyAjIGVuZGlmCisgI2VuZGlmCisgCistc3RhdGljIG5sX2NhdGQgbXlfY2F0b3BlbnBhdGgoY2hhciAqbmFtZSwgY2hhciAqcGF0aCk7Cisrc3RhdGljIG5sX2NhdGQgbXlfY2F0b3BlbnBhdGgoY2hhciAqbmFtZSwgY2hhciAqcGF0aCwgY2hhciAqbGFuZyk7CisgCisgc3RhdGljCQkJCS8qIHRoaXMgc291cmNlIGluY2x1ZGVkIGluIGdyaXBlcy5jICovCisgbmxfY2F0ZAorIG15X2NhdG9wZW4oY2hhciAqbmFtZSwgaW50IG9mbGFnKSB7CistICBubF9jYXRkIGZkOworKyAgbmxfY2F0ZCBmZCA9IChubF9jYXRkKSAtMTsKKysKKysgIC8qIHVzaW5nIGZpcnN0IHRoZSBteV9jYXRvcGVucGF0aCwgd2hpY2ggbG9va3Mgd2l0aCBMQU5HVUFHRQorKyAgICogYW5kIG9ubHkgaWYgaXQgZmFpbHMgcmVzc29ydCB0byBjYXRvcGVuLCBpdCBnaXZlcyBiZXR0ZXIgaTE4bgorKyAgICovCisrICB7CisrICAgIGNoYXIgKm5sc3BhdGgsICpsYW5nLCAqczsKKyAKKy0gIGZkID0gY2F0b3BlbihuYW1lLCBvZmxhZyk7CisrICAgIC8qCisrICAgICAqICJJZiBOTFNQQVRIIGRvZXMgbm90IGV4aXN0IGluIHRoZSBlbnZpcm9ubWVudCwgb3IgaWYgYQorKyAgICAgKiBtZXNzYWdlIGNhdGFsb2cgY2Fubm90IGJlIG9wZW5lZCBpbiBhbnkgb2YgdGhlIHBhdGhzIHNwZWNpZmllZAorKyAgICAgKiBieSBOTFNQQVRILCB0aGVuIGFuIGltcGxlbWVudGF0aW9uIGRlZmluZWQgZGVmYXVsdCBwYXRoIGlzIHVzZWQiCisrICAgICAqLworKyAgICBubHNwYXRoID0gZ2V0ZW52KCJOTFNQQVRIIik7CisrICAgIGlmICghbmxzcGF0aCkKKysgICAgICBubHNwYXRoID0gREVGQVVMVF9OTFNQQVRIOworKyAKKysgICAgbGFuZyA9IGdldGVudigiTEFOR1VBR0UiKTsKKysgICAgaWYgKCFsYW5nKQorKyAgICAgIGxhbmcgPSBnZXRlbnYoIkxDX0FMTCIpOworKyAgICBpZiAoIWxhbmcpCisrICAgICAgbGFuZyA9IGdldGVudigiTENfTUVTU0FHRVMiKTsKKysgICAgaWYgKCFsYW5nKQorKyAgICAgIGxhbmcgPSBnZXRlbnYoIkxBTkciKTsKKysgICAgaWYgKCFsYW5nKQorKyAgICAgIGxhbmcgPSAiIjsKKysgCisrICAgIHdoaWxlKCpsYW5nICYmIChmZCA9PSAobmxfY2F0ZCkgLTEpKSB7CisrICAgICAgcyA9IGluZGV4KGxhbmcsICc6Jyk7CisrICAgICAgaWYgKHMpICpzID0gMDsKKysgICAgICAgIGZkID0gbXlfY2F0b3BlbnBhdGgobmFtZSwgbmxzcGF0aCwgbGFuZyk7CisrICAgICAgaWYgKHMpIGxhbmc9cysxOworKyAgICAgIGVsc2UgbGFuZyA9ICIiOworKyAgICB9CisrICAgIGlmIChmZCA9PSAobmxfY2F0ZCkgLTEpCisrICAgICAgZmQgPSBteV9jYXRvcGVucGF0aChuYW1lLCBubHNwYXRoLCAiZW4iKTsKKysgIH0KKysKKysgIC8qIHN0aWxsIG5vdCBmb3VuZCwgdXNlIHRoZSBzeXN0ZW0gY2F0b3BlbiAqLworKyAgaWYgKGZkID09IChubF9jYXRkKSAtMSkKKysgICAgZmQgPSBjYXRvcGVuKG5hbWUsIG9mbGFnKTsKKyAKKyAgIGlmIChmZCA9PSAobmxfY2F0ZCkgLTEgJiYgb2ZsYWcpIHsKKyAgICAgb2ZsYWcgPSAwOworQEAgLTMyLDggKzczLDYgQEAKKyAgIH0KKyAKKyAgIGlmIChmZCA9PSAobmxfY2F0ZCkgLTEpIHsKKy0gICAgY2hhciAqbmxzcGF0aDsKKy0KKyAgICAgLyogVGhlIGxpYmMgY2F0b3BlbiBmYWlscyAtIGxldCB1cyBzZWUgaWYgd2UgY2FuIGRvIGJldHRlciAqLworICAgICAvKiBUaGUgcXVvdGVzIGJlbG93IGFyZSBmcm9tIFgvT3BlbiwgWFBHIDE5ODcsIFZvbC4gMy4gKi8KKyAKK0BAIC01OCwxNyArOTcsNiBAQAorICNlbmRpZgorICAgICB9CisgCistICAgIC8qCistICAgICAqICJJZiBOTFNQQVRIIGRvZXMgbm90IGV4aXN0IGluIHRoZSBlbnZpcm9ubWVudCwgb3IgaWYgYQorLSAgICAgKiBtZXNzYWdlIGNhdGFsb2cgY2Fubm90IGJlIG9wZW5lZCBpbiBhbnkgb2YgdGhlIHBhdGhzIHNwZWNpZmllZAorLSAgICAgKiBieSBOTFNQQVRILCB0aGVuIGFuIGltcGxlbWVudGF0aW9uIGRlZmluZWQgZGVmYXVsdCBwYXRoIGlzIHVzZWQiCistICAgICAqLworLQorLSAgICBubHNwYXRoID0gZ2V0ZW52KCJOTFNQQVRIIik7CistICAgIGlmIChubHNwYXRoKQorLSAgICAgIGZkID0gbXlfY2F0b3BlbnBhdGgobmFtZSwgbmxzcGF0aCk7CistICAgIGlmIChmZCA9PSAobmxfY2F0ZCkgLTEpCistICAgICAgZmQgPSBteV9jYXRvcGVucGF0aChuYW1lLCBERUZBVUxUX05MU1BBVEgpOworICAgfQorICAgcmV0dXJuIGZkOworIH0KK0BAIC05MCwxNSArMTE4LDEzIEBACisgICoKKyAgKi8KKyBzdGF0aWMgbmxfY2F0ZAorLW15X2NhdG9wZW5wYXRoKGNoYXIgKm5hbWUsIGNoYXIgKm5sc3BhdGgpIHsKKy0gIGludCBmZDsKKytteV9jYXRvcGVucGF0aChjaGFyICpuYW1lLCBjaGFyICpubHNwYXRoLCBjaGFyICpsYW5nKSB7CisgICBubF9jYXRkIGNmZCA9IChubF9jYXRkKSAtMTsKKy0gIGNoYXIgKnBhdGgwLCAqcGF0aCwgKnMsICpmaWxlLCAqbGFuZywgKmxhbmdfbCwgKmxhbmdfdCwgKmxhbmdfYzsKKysgIGNoYXIgKnBhdGgwLCAqcGF0aCwgKnMsICpmaWxlLCAqbGFuZ19sLCAqbGFuZ190LCAqbGFuZ19jOworICAgaW50IGxhbmdzeiwgbmFtZXN6LCBzeiwgbGFuZ19sX3N6LCBsYW5nX3Rfc3osIGxhbmdfY19zejsKKyAKKyAgIG5hbWVzeiA9IHN0cmxlbihuYW1lKTsKKyAKKy0gIGxhbmcgPSBnZXRlbnYoIkxBTkciKTsKKyAgIGlmICghbGFuZykKKyAgICAgbGFuZyA9ICIiOworICAgbGFuZ3N6ID0gc3RybGVuKGxhbmcpOworQEAgLTE5NCwxNCArMjIwLDkgQEAKKyAgICAgICBwYXRoID0gcysxOworICAgICB9IGVsc2UKKyAgICAgICBwYXRoID0gMDsKKy0gICAgZmQgPSBvcGVuKGZpbGUsIE9fUkRPTkxZKTsKKy0gICAgaWYgKGZkICE9IC0xKSB7CistICAgICAgLyogd2UgZm91bmQgdGhlIHJpZ2h0IGNhdGFsb2cgLSBidXQgd2UgZG9uJ3Qga25vdyB0aGUKKy0JIHR5cGUgb2YgbmxfY2F0ZCwgc28gY2xvc2UgaXQgYWdhaW4gYW5kIGFzayBsaWJjICovCistICAgICAgY2xvc2UoZmQpOworLSAgICAgIGNmZCA9IGNhdG9wZW4oZmlsZSwgMCk7CistICAgICAgYnJlYWs7CistICAgIH0KKysJY2ZkID0gY2F0b3BlbihmaWxlLCAwKTsKKysJaWYgKGNmZCAhPSAobmxfY2F0ZCkgLTEpCisrCQkJYnJlYWs7CisgICB9CisgCisgICBmcmVlKHBhdGgwKTsKK2RpZmYgLU5hdXIgbWFuLTEuNmUub3JpZy9zcmMvbWFucGF0aC5jIG1hbi0xLjZlL3NyYy9tYW5wYXRoLmMKKy0tLSBtYW4tMS42ZS5vcmlnL3NyYy9tYW5wYXRoLmMJMjAwNi0wOC0wMyAxODoxODozMy4wMDAwMDAwMDAgLTAzMDAKKysrKyBtYW4tMS42ZS9zcmMvbWFucGF0aC5jCTIwMDctMDUtMTggMTE6MDI6NDguMDAwMDAwMDAwIC0wMzAwCitAQCAtMjgyLDEzICsyODIsMTQgQEAKKyAJCS8qIFdlIGNhbm5vdCB1c2UgImxhbmcgPSBzZXRsb2NhbGUoTENfTUVTU0FHRVMsIE5VTEwpIiBvciBzbzoKKyAJCSAgIHRoZSByZXR1cm4gdmFsdWUgb2Ygc2V0bG9jYWxlIGlzIGFuIG9wYXF1ZSBzdHJpbmcuICovCisgCQkvKiBQT1NJWCBwcmVzY3JpYmVzIHRoZSBvcmRlcjogTENfQUxMLCBMQ19NRVNTQUdFUywgTEFORyAqLworLQkJaWYoKGxhbmcgPSBnZXRlbnYoIkxDX0FMTCIpKSAhPSBOVUxMKQorKwkgICAgICAgIC8qIExBTkdVQUdFIGlzIEdOVS9MaW51eCBhbmQgb3ZlcnJ1bGVzIGFsbCAqLworKwkJaWYoKGxhbmcgPSBnZXRlbnYoIkxBTkdVQUdFIikpICE9IE5VTEwpCisgCQkJc3BsaXQyKGRpciwgbGFuZywgYWRkX3RvX21hbmRpcmxpc3RfeCwgcGVycnMpOworLQkJaWYoKGxhbmcgPSBnZXRlbnYoIkxDX01FU1NBR0VTIikpICE9IE5VTEwpCisrCQllbHNlIGlmKChsYW5nID0gZ2V0ZW52KCJMQ19BTEwiKSkgIT0gTlVMTCkKKyAJCQlzcGxpdDIoZGlyLCBsYW5nLCBhZGRfdG9fbWFuZGlybGlzdF94LCBwZXJycyk7CistCQlpZigobGFuZyA9IGdldGVudigiTEFORyIpKSAhPSBOVUxMKQorKwkJZWxzZSBpZigobGFuZyA9IGdldGVudigiTENfTUVTU0FHRVMiKSkgIT0gTlVMTCkKKyAJCQlzcGxpdDIoZGlyLCBsYW5nLCBhZGRfdG9fbWFuZGlybGlzdF94LCBwZXJycyk7CistCQlpZigobGFuZyA9IGdldGVudigiTEFOR1VBR0UiKSkgIT0gTlVMTCkKKysJCWVsc2UgaWYoKGxhbmcgPSBnZXRlbnYoIkxBTkciKSkgIT0gTlVMTCkKKyAJCQlzcGxpdDIoZGlyLCBsYW5nLCBhZGRfdG9fbWFuZGlybGlzdF94LCBwZXJycyk7CisgCQlhZGRfdG9fbWFuZGlybGlzdF94KGRpciwgMCwgcGVycnMpOworIAl9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXdoYXRpczIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXdoYXRpczIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM0ZWQzMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtd2hhdGlzMi5wYXRjaApAQCAtMCwwICsxLDU5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK0luZGV4OiBtYW4tMS42Zi9zcmMvbWFrZXdoYXRpcy5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1hbi0xLjZmLm9yaWcvc3JjL21ha2V3aGF0aXMuc2gJMjAxMC0xMi0yOSAxMzo1MTo0NS4wMDAwMDAwMDAgLTA4MDAKKysrKyBtYW4tMS42Zi9zcmMvbWFrZXdoYXRpcy5zaAkyMDEwLTEyLTI5IDEzOjU5OjM1LjM5OTc5OTQxMiAtMDgwMAorQEAgLTE2NCwxMCArMTY0LDE1IEBACisgZmkKKyBjYXRwYXRoPWBlY2hvICR7Y2F0cGF0aH0gfCB0ciA6ICcgJ2AKKyAKKysjV0hBVElTX0RJUj0kREVTVERJUi92YXIvY2FjaGUvbWFuL2BlY2hvICRoZXJlfHNlZCAtZSAncyEuKi9tYW4vISFnJ2AKKytXSEFUSVNfRElSPSRERVNURElSL3Zhci9jYWNoZS9tYW4vJExBTkcKKytbWyAtZCAkV0hBVElTX0RJUiBdXSB8fCBta2RpciAtcCAkV0hBVElTX0RJUi8KKysKKyAjIGZpcnN0IHRydW5jYXRlIGFsbCB0aGUgd2hhdGlzIGZpbGVzIHRoYXQgd2lsbCBiZSBjcmVhdGVkIG5ldywKKyAjIHRoZW4gb25seSB1cGRhdGUgLSB3ZSBtaWdodCB2aXNpdCB0aGUgc2FtZSBkaXJlY3RvcnkgdHdpY2UKKyBpZiBbIHgkdXBkYXRlID0geCBdOyB0aGVuCistICAgY3AgL2Rldi9udWxsIC92YXIvY2FjaGUvbWFuL3doYXRpcworKyAgIG1rZGlyIC1wICRXSEFUSVNfRElSLworKyAgIC9iaW4vZWNobyAtbiA+ICRXSEFUSVNfRElSL3doYXRpcworIGZpCisgCisgZm9yIHBhZ2VzIGluIG1hbiBjYXQKK0BAIC0xODAsMTMgKzE4NSw3IEBACisgCWVjaG8gImFib3V0IHRvIGVudGVyICRtYW5kaXIiID4gL2Rldi9zdGRlcnIKKyAgICAgIGZpCisgCistICAgICAjIGtsdWRnZSBmb3IgU2xhY2t3YXJlJ3MgL3Vzci9tYW4vcHJlZm9ybWF0CistICAgICBpZiBbICRtYW5kaXIgPSAvdXNyL21hbi9wcmVmb3JtYXQgXQorLSAgICAgdGhlbgorLQltYW5kaXIxPS91c3IvbWFuCistICAgICBlbHNlCistCW1hbmRpcjE9JG1hbmRpcgorLSAgICAgZmkKKysgICAgIG1hbmRpcjE9JFdIQVRJU19ESVIKKyAKKyAgICAgICMgaWYgJG1hbmRpciBpcyBvbiBhIHJlYWRvbmx5IHBhcnRpdGlvbiwgYW5kIHRoZSB3aGF0aXMgZmlsZQorICAgICAgIyBpcyBub3QgYSBzeW1saW5rLCB0aGVuIGxldCdzIHNraXAgdHJ5aW5nIHRvIHVwZGF0ZSBpdAorQEAgLTIwNywxMSArMjA2LDYgQEAKKyAJZmkKKyAgICAgIGZpCisgCistICAgICBpZiBbIC1zICR7bWFuZGlyfS93aGF0aXMgLWEgJHBhZ2VzID0gbWFuIC1hIHgkdXBkYXRlID0geCBdOyB0aGVuCistCWlmIFsgeCR2ZXJib3NlICE9IHggXTsgdGhlbgorLQkgICBlY2hvIHNraXBwaW5nICRtYW5kaXIgLSB3ZSBkaWQgaXQgYWxyZWFkeSA+IC9kZXYvc3RkZXJyCistCWZpCistICAgICBlbHNlICAgICAgCisgICAgICAgIGhlcmU9YHB3ZGAKKyAgICAgICAgY2QgJG1hbmRpcgorICAgICAgICBmb3IgaSBpbiAkc2VjdGlvbnMKK0BAIC00NDcsNyArNDQ3LDYgQEAKKworICAgICAgICBjaG1vZCA2NDQgJHttYW5kaXIxfS93aGF0aXMKKyAgICAgICAgcm0gJFRNUEZJTEUKKy0gICAgIGZpCisgICAgZG9uZQorIGRvbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmctd2hhdGlzMy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmctd2hhdGlzMy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzM0NDU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42Zy13aGF0aXMzLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK0RvIG5vdCB1c2UgYWJzb2x1dGUgcGF0aCBmb3IgYXdrIHdoaWxlIGdldHRpbmcgdGhlIHBhdGggb2YgYXdrCit3aGVuIHJ1bm5pbmcgbWFrZXdoYXRpcy4KK1RoaXMgY2FuIGF2b2lkIGVycm9ycyBpZiBwYXRoIG9mIGF3ayBjaGFuZ2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbbWFuLTEuNmddCisKK1NpZ25lZC1vZmYtYnk6IEppYW4gTGl1IDxqaWFuLmxpdUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC1OdXIgbWFuLTEuNmcub3JpZy9zcmMvbWFrZXdoYXRpcy5zaCBtYW4tMS42Zy9zcmMvbWFrZXdoYXRpcy5zaAorLS0tIG1hbi0xLjZnLm9yaWcvc3JjL21ha2V3aGF0aXMuc2gJMjAxNS0wMi0yNSAxNjoxMzoxMi42NTc2MTE0MTkgKzA4MDAKKysrKyBtYW4tMS42Zy9zcmMvbWFrZXdoYXRpcy5zaAkyMDE1LTAyLTI1IDE2OjE0OjQ5LjMzNDY5NDgxNSArMDgwMAorQEAgLTY3LDcgKzY3LDcgQEAKKyAjIGJ1dCB0aGF0IGxlYWRzIHRvIHByb2JsZW1zIGFuZCBidWdzLgorCisgIyBBV0s9L3Vzci9iaW4vZ2F3aworLUFXSz1AYXdrQAorK0FXSz1gd2hpY2ggYXdrYAorCisgIyBGaW5kIGEgcGxhY2UgZm9yIG91ciB0ZW1wb3JhcnkgZmlsZXMuIElmIHNlY3VyaXR5IGlzIG5vdCBhIGNvbmNlcm4sIHVzZQorICMJVE1QRklMRT0vdG1wL3doYXRpcyQkOyBUTVBGSUxFRElSPW5vbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLjEuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi4xLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNjgwNDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi4xLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLjcuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi43Lmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NWFmODIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi43Lmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMTBiZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi5jb25mCkBAIC0wLDAgKzEsMTQxIEBACisjCisjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gbWFuLmNvbmYuaW4gYnkgdGhlCisjIGNvbmZpZ3VyZSBzY3JpcHQuCisjCisjIG1hbi5jb25mIGZyb20gbWFuLTEuNXAKKyMKKyMgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBmaWxlLCBzZWUgdGhlIG1hbiBwYWdlcyBtYW4oMSkKKyMgYW5kIG1hbi5jb25mKDUpLgorIworIyBUaGlzIGZpbGUgaXMgcmVhZCBieSBtYW4gdG8gY29uZmlndXJlIHRoZSBkZWZhdWx0IG1hbnBhdGggKGFsc28gdXNlZAorIyB3aGVuIE1BTlBBVEggY29udGFpbnMgYW4gZW1wdHkgc3Vic3RyaW5nKSwgdG8gZmluZCBvdXQgd2hlcmUgdGhlIGNhdAorIyBwYWdlcyBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIG1hbiBwYWdlcyBzaG91bGQgYmUgc3RvcmVkLAorIyBhbmQgdG8gbWFwIGVhY2ggUEFUSCBlbGVtZW50IHRvIGEgbWFucGF0aCBlbGVtZW50LgorIyBJdCBtYXkgYWxzbyByZWNvcmQgdGhlIHBhdGhuYW1lIG9mIHRoZSBtYW4gYmluYXJ5LiBbVGhpcyBpcyB1bnVzZWQuXQorIyBUaGUgZm9ybWF0IGlzOgorIworIyBNQU5CSU4JCXBhdGhuYW1lCisjIE1BTlBBVEgJCW1hbnBhdGhfZWxlbWVudAlbY29ycmVzcG9uZGluZ19jYXRkaXJdCisjIE1BTlBBVEhfTUFQCQlwYXRoX2VsZW1lbnQJbWFucGF0aF9lbGVtZW50CisjCisjIElmIG5vIGNhdGRpciBpcyBnaXZlbiwgaXQgaXMgYXNzdW1lZCB0byBiZSBlcXVhbCB0byB0aGUgbWFuZGlyCisjIChzbyB0aGF0IHRoaXMgZGlyIGhhcyBib3RoIG1hbjEgZXRjLiBhbmQgY2F0MSBldGMuIHN1YmRpcnMpLgorIyBUaGlzIGlzIHRoZSB0cmFkaXRpb25hbCBVbml4IHNldHVwLgorIyBDZXJ0YWluIHZlcnNpb25zIG9mIHRoZSBGU1NUTkQgcmVjb21tZW5kIHB1dHRpbmcgZm9ybWF0dGVkIHZlcnNpb25zCisjIG9mIC91c3IvLi4uL21hbi9tYW54L3BhZ2UueCBpbnRvIC92YXIvY2F0bWFuLy4uLi9jYXR4L3BhZ2UueC4KKyMgVGhlIGtleXdvcmQgRlNTVE5EIHdpbGwgY2F1c2UgdGhpcyBiZWhhdmlvdXIuCisjIENlcnRhaW4gdmVyc2lvbnMgb2YgdGhlIEZIUyByZWNvbW1lbmQgcHV0dGluZyBmb3JtYXR0ZWQgdmVyc2lvbnMgb2YKKyMgL3Vzci8uLi4vc2hhcmUvbWFuL1tsb2NhbGUvXW1hbngvcGFnZS54IGludG8KKyMgL3Zhci9jYWNoZS9tYW4vLi4uL1tsb2NhbGUvXWNhdHgvcGFnZS54LgorIyBUaGUga2V5d29yZCBGSFMgd2lsbCBjYXVzZSB0aGlzIGJlaGF2aW91ciAoYW5kIG92ZXJyaWRlcyBGU1NUTkQpLgorIyBFeHBsaWNpdGx5IGdpdmVuIGNhdGRpcnMgb3ZlcnJpZGUuCisjCisjIEZTU1RORAorRkhTCisjCisjIFRoaXMgZmlsZSBpcyBhbHNvIHJlYWQgYnkgbWFuIGluIG9yZGVyIHRvIGZpbmQgaG93IHRvIGNhbGwgbnJvZmYsIGxlc3MsIGV0Yy4sCisjIGFuZCB0byBkZXRlcm1pbmUgdGhlIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gZXh0ZW5zaW9ucyBhbmQgZGVjb21wcmVzc29ycy4KKyMKKyMgTUFOQklOCQkvdXNyL2xvY2FsL2Jpbi9tYW4KKyMKKyMgRXZlcnkgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgTUFOUEFUSCBpbmNsdWRlcyB0aGVzZSBmaWVsZHMKKyMKK01BTlBBVEgJL3Vzci9tYW4KK01BTlBBVEgJL3Vzci9zaGFyZS9tYW4KK01BTlBBVEgJL3Vzci9sb2NhbC9tYW4KK01BTlBBVEgJL3Vzci9sb2NhbC9zaGFyZS9tYW4KK01BTlBBVEgJL3Vzci9YMTFSNi9tYW4KKyMKKyMgVW5jb21tZW50IGlmIHlvdSB3YW50IHRvIGluY2x1ZGUgb25lIG9mIHRoZXNlIGJ5IGRlZmF1bHQKKyMKKyMgTUFOUEFUSAkvb3B0LyovbWFuCisjIE1BTlBBVEgJL3Vzci9saWIvKi9tYW4KKyMgTUFOUEFUSAkvdXNyL3NoYXJlLyovbWFuCisjIE1BTlBBVEgJL3Vzci9rZXJiZXJvcy9tYW4KKyMKKyMgU2V0IHVwIFBBVEggdG8gTUFOUEFUSCBtYXBwaW5nCisjCisjIElmIHBlb3BsZSBhc2sgZm9yICJtYW4gZm9vIiBhbmQgaGF2ZSAiL2Rpci9iaW4vZm9vIiBpbiB0aGVpciBQQVRICisjIGFuZCB0aGUgZG9jcyBhcmUgZm91bmQgaW4gIi9kaXIvbWFuIiwgdGhlbiBubyBtYXBwaW5nIGlzIHJlcXVpcmVkLgorIworIyBUaGUgYmVsb3cgbWFwcGluZ3MgYXJlIHN1cGVyZmx1b3VzIHdoZW4gdGhlIHJpZ2h0IGhhbmQgc2lkZSBpcworIyBpbiB0aGUgbWFuZGF0b3J5IG1hbnBhdGggYWxyZWFkeSwgYnV0IHdpbGwga2VlcCBtYW4gZnJvbSBzdGF0dGluZworIyBsb3RzIG9mIG90aGVyIG5lYXJieSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCisjCitNQU5QQVRIX01BUAkvYmluCQkJL3Vzci9zaGFyZS9tYW4KK01BTlBBVEhfTUFQCS9zYmluCQkJL3Vzci9zaGFyZS9tYW4KK01BTlBBVEhfTUFQCS91c3IvYmluCQkvdXNyL3NoYXJlL21hbgorTUFOUEFUSF9NQVAJL3Vzci9zYmluCQkvdXNyL3NoYXJlL21hbgorTUFOUEFUSF9NQVAJL3Vzci9sb2NhbC9iaW4JCS91c3IvbG9jYWwvc2hhcmUvbWFuCitNQU5QQVRIX01BUAkvdXNyL2xvY2FsL3NiaW4JCS91c3IvbG9jYWwvc2hhcmUvbWFuCitNQU5QQVRIX01BUAkvdXNyL1gxMVI2L2JpbgkJL3Vzci9YMTFSNi9tYW4KK01BTlBBVEhfTUFQCS91c3IvYmluL1gxMQkJL3Vzci9YMTFSNi9tYW4KK01BTlBBVEhfTUFQCS91c3IvYmluL21oCQkvdXNyL3NoYXJlL21hbgorIworIyBOT0FVVE9QQVRIIGtlZXBzIG1hbiBmcm9tIGF1dG9tYXRpY2FsbHkgYWRkaW5nIGRpcmVjdG9yaWVzIHRoYXQgbG9vayBsaWtlCisjIG1hbnVhbCBwYWdlIGRpcmVjdG9yaWVzIHRvIHRoZSBwYXRoLgorIworI05PQVVUT1BBVEgKKyMKKyMgTk9DQUNIRSBrZWVwcyBtYW4gZnJvbSBjcmVhdGluZyBjYWNoZSBwYWdlcyAoImNhdCBwYWdlcyIpCisjIChnZW5lcmFsbHkgb25lIGVuYWJsZXMvZGlzYWJsZSBjYXQgcGFnZSBjcmVhdGlvbiBieSBjcmVhdGluZy9kZWxldGluZworIyB0aGUgZGlyZWN0b3J5IHRoZXkgd291bGQgbGl2ZSBpbiAtIG1hbiBuZXZlciBkb2VzIG1rZGlyKQorIyAKKyNOT0NBQ0hFCisjCisjIFVzZWZ1bCBwYXRocyAtIG5vdGUgdGhhdCBDT0wgc2hvdWxkIG5vdCBiZSBkZWZpbmVkIHdoZW4KKyMgTlJPRkYgaXMgZGVmaW5lZCBhcyAiZ3JvZmYgLVRhc2NpaSIgb3IgImdyb2ZmIC1UbGF0aW4xIjsKKyMgbm90IG9ubHkgaXMgaXQgc3VwZXJmbHVvdXMsIGJ1dCBpdCBhY3R1YWxseSBkYW1hZ2VzIHRoZSBvdXRwdXQuCisjIEZvciB1c2Ugd2l0aCB1dGYtOCwgTlJPRkYgc2hvdWxkIGJlICJucm9mZiAtbWFuZG9jIiB3aXRob3V0IC1UIG9wdGlvbi4KKyMgKE1heWJlIC0gYnV0IHRvZGF5IEkgbmVlZCAtVGxhdGluMSB0byBwcmV2ZW50IGRvdWJsZSBjb252ZXJzaW9uIHRvIHV0ZjguKQorIworIyBJZiB5b3UgaGF2ZSBhIG5ldyB0cm9mZiAodmVyc2lvbiAxLjE4LjE/KSBhbmQgaXRzIGNvbG9yZWQgb3V0cHV0CisjIGNhdXNlcyBwcm9ibGVtcywgYWRkIHRoZSAtYyBvcHRpb24gdG8gVFJPRkYsIE5ST0ZGLCBKTlJPRkYuCisjCitUUk9GRgkJL3Vzci9iaW4vZ3JvZmYgLVRwcyAtbWFuZG9jCitOUk9GRgkJL3Vzci9iaW4vbnJvZmYgLVRsYXRpbjEgLW1hbmRvYworSk5ST0ZGCQkvdXNyL2Jpbi9ncm9mZiAtVG5pcHBvbiAtbWFuZG9jagorRVFOCQkvdXNyL2Jpbi9lcW4gLVRwcworTkVRTgkJL3Vzci9iaW4vZXFuIC1UbGF0aW4xCitKTkVRTgkJL3Vzci9iaW4vZXFuIC1UbmlwcG9uCitUQkwJCS91c3IvYmluL3RibAorIyBDT0wJCS91c3IvYmluL2NvbAorUkVGRVIJCS91c3IvYmluL3JlZmVyCitQSUMJCS91c3IvYmluL3BpYworVkdSSU5ECQkKK0dSQVAJCQorUEFHRVIJCS91c3IvYmluL2xlc3MgLWlzUgorQ0FUCQkvYmluL2NhdAorIworIyBUaGUgY29tbWFuZCAibWFuIC1hIHh5enp5IiB3aWxsIHNob3cgYWxsIG1hbiBwYWdlcyBmb3IgeHl6enkuCisjIFdoZW4gQ01QIGlzIGRlZmluZWQgbWFuIHdpbGwgdHJ5IHRvIGF2b2lkIHNob3dpbmcgdGhlIHNhbWUKKyMgdGV4dCB0d2ljZS4gKEJ1dCBjb21wcmVzc2VkIHBhZ2VzIGNvbXBhcmUgdW5lcXVhbC4pCisjCitDTVAJCS91c3IvYmluL2NtcCAtcworIworIyBDb21wcmVzcyBjYXQgcGFnZXMKKyMKK0NPTVBSRVNTCS9iaW4vYnppcDIKK0NPTVBSRVNTX0VYVAkuYnoyCisjCisjIERlZmF1bHQgbWFudWFsIHNlY3Rpb25zIChhbmQgb3JkZXIpIHRvIHNlYXJjaCBpZiAtUyBpcyBub3Qgc3BlY2lmaWVkCisjIGFuZCB0aGUgTUFOU0VDVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0LgorIworTUFOU0VDVAkJMToxcDo4OjI6MzozcDo0OjU6Njo3Ojk6MHA6dGNsOm46bDpwOm8KKyMKKyMgRGVmYXVsdCBvcHRpb25zIHRvIHVzZSB3aGVuIG1hbiBpcyBpbnZva2VkIHdpdGhvdXQgb3B0aW9ucworIyBUaGlzIGlzIG1haW5seSBmb3IgdGhlIGJlbmVmaXQgb2YgdGhvc2UgdGhhdCB0aGluayAtYSBzaG91bGQgYmUgdGhlIGRlZmF1bHQKKyMgTm90ZSB0aGF0IHNvbWUgc3lzdGVtcyBoYXZlIC91c3IvbWFuL2FsbG1hbiwgY2F1c2luZyBwYWdlcyB0byBiZSBzaG93biB0d2ljZS4KKyMKKyNNQU5ERUZPUFRJT05TCS1hCisjCisjIERlY29tcHJlc3Mgd2l0aCBnaXZlbiBkZWNvbXByZXNzb3Igd2hlbiBpbnB1dCBmaWxlIGhhcyBnaXZlbiBleHRlbnNpb24KKyMgVGhlIGNvbW1hbmQgZ2l2ZW4gbXVzdCBhY3QgYXMgYSBmaWx0ZXIuCisjCisuZ3oJCS9iaW4vZ3VuemlwIC1jCisuYnoyCQkvdXNyL2Jpbi9idW56aXAyIC1jCisueHoJCS91c3IvYmluL3VueHogLWMKKy56CQkKKy5aCQkvYmluL3pjYXQKKy5GCQkKKy5ZCQkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFucGF0aC41Lmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW5wYXRoLjUuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAxMmZmOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFucGF0aC41Lmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW5fMS42Zy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW5fMS42Zy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTQ3MzZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbl8xLjZnLmJiCkBAIC0wLDAgKzEsODQgQEAKK1NVTU1BUlkgPSAiT25saW5lIGRvY3VtZW50YXRpb24gdG9vbHMiCitERVNDUklQVElPTiA9ICJBIHNldCBvZiBkb2N1bWVudGF0aW9uIHRvb2xzOiBtYW4sIGFwcm9wb3MgYW5kIHdoYXRpcyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0hPTUVQQUdFID0gImh0dHA6Ly9wcmltYXRlcy54aW1pYW4uY29tL35mbHVjaWZyZWRpL21hbiIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04Y2E0M2NiYzg0MmMyMzM2ZTgzNTkyNmMyMTY2YzI4YiIKKworUFIgPSAicjEiCisKK0RFUEVORFMgPSAiZ3JvZmYgbGVzcyIKKworZGVmIGNvbXByZXNzX3BrZyhkKToKKyAgICBpZiAiY29tcHJlc3NfZG9jIiBpbiAoZC5nZXRWYXIoIklOSEVSSVQiLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgIGNvbXByZXNzID0gZC5nZXRWYXIoIkRPQ19DT01QUkVTUyIsIFRydWUpCisgICAgICAgICBpZiBjb21wcmVzcyA9PSAiZ3oiOgorICAgICAgICAgICAgIHJldHVybiAiZ3ppcCIKKyAgICAgICAgIGVsaWYgY29tcHJlc3MgPT0gImJ6MiI6CisgICAgICAgICAgICAgcmV0dXJuICJiemlwMiIKKyAgICAgICAgIGVsaWYgY29tcHJlc3MgPT0gInh6IjoKKyAgICAgICAgICAgICByZXR1cm4gInh6IgorICAgIHJldHVybiAiIgorCitSREVQRU5EU18ke1BOfSArPSAiJHtAY29tcHJlc3NfcGtnKGQpfSIKKworU1JDX1VSSSA9ICJodHRwOi8vcGtncy5mZWRvcmFwcm9qZWN0Lm9yZy9sb29rYXNpZGUvcGtncy9tYW4yaHRtbC8ke0JQfS50YXIuZ3ovYmExNTRkNTc5NjkyOGI4NDFjOWM2OWYwYWUzNzY2NjAvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVrLWNvbmZwYXRoLnBhdGNoO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41aDEtbWFrZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41ay1ub25hc2NpaS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS42ZS1zZWN1cml0eS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS42ZS1tYW5kaXJzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVtMi1idWcxMTYyMS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41ay1zb2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41bTItYnVpbGRyb290LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjZlLXJvX3Vzci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41aTItbmV3bGluZS5wYXRjaDtzdHJpcGxldmVsPTAgXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNWotdXRmOC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41aTItb3ZlcmZsb3cucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNWotbm9jYWNoZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41aTItaW5pdGlhbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41aDEtZ2VuY2F0LnBhdGNoO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41Zy1ub25yb290YnVpbGQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNW0yLXR2X2Zocy5wYXRjaDtzdHJpcGxldmVsPTAgXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNWotaTE4bi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS42ZS13aGF0aXMyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjZlLXVzZV9pMThuX3ZhcnNfaW5fYV9zdGRfd2F5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVtMi1uby1jb2xvci1mb3ItcHJpbnRpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNW0yLXNpZ3BpcGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNmUtaTE4bl93aGF0aXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNmUtbmV3X3NlY3Rpb25zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi4xLmd6O3VucGFjaz1mYWxzZSBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4uNy5nejt1bnBhY2s9ZmFsc2UgXAorICAgICAgICAgICBmaWxlOi8vbWFuLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vbWFucGF0aC41Lmd6O3VucGFjaz1mYWxzZSBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS42Zy13aGF0aXMzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZV9zZWQucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYmExNTRkNTc5NjkyOGI4NDFjOWM2OWYwYWUzNzY2NjAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2NkY2I4YzNmNGUwMDgwOTIzZDdlODE4ZjBlNGEyMDJkYjI2YzQ2NDE1ZWFlZjM2MTM4N2MyMDk5NWI4OTU5ZiIKKworQ0ZMQUdTICs9ICItRFNZU1YiCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisgICAgICAgICR7U30vY29uZmlndXJlIC1kZWZhdWx0IC1jb25mZGlyIC9ldGMgK3NnaWQgK2ZocyArbGFuZyBhbGwKK30KKworCitkb19pbnN0YWxsKCkgeworICAgICAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCl7CisJbWtkaXIgLXAgICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgICAgIG1rZGlyIC1wICR7RH0ke2RhdGFkaXJ9L21hbi9tYW41CisgICAgICAgIG1rZGlyIC1wICR7RH0ke2RhdGFkaXJ9L21hbi9tYW43CisJY3AgJHtXT1JLRElSfS9tYW4uY29uZiAke0R9JHtzeXNjb25mZGlyfS9tYW4uY29uZmlnCisgICAgICAgIGNwICR7V09SS0RJUn0vbWFuLjEuZ3ogJHtEfSR7ZGF0YWRpcn0vbWFuL21hbjEvCisgICAgICAgIGNwICR7V09SS0RJUn0vbWFuLjcuZ3ogJHtEfSR7ZGF0YWRpcn0vbWFuL21hbjcvCisgICAgICAgIGNwICR7V09SS0RJUn0vbWFucGF0aC41Lmd6ICR7RH0ke2RhdGFkaXJ9L21hbi9tYW41LworfQorCisKK1JERVBFTkRTXyR7UE59ID0gImxlc3MgZ3JvZmYiCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9sb2NhbGUgJHtzeXNjb25mZGlyfS9tYW4uY29uZmlnIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWMvbWMvbWMtQ1RSTC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21jL21jL21jLUNUUkwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU0YmE5ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21jL21jL21jLUNUUkwucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRml4IGJ1aWxkIHdpdGggbXVzbCBieSBlbnN1cmluZyBDVFJMIGlzIGRlZmluZWQuCisKK211c2wgZG9lcyBub3QgZGVmaW5lIENUUkwgaW4gPHRlcm1pb3MuaD4sIHdlIGNvdWxkIGluY2x1ZGUgPHN5cy90dHlkZWZhdWx0cy5oPgorZXhwbGljaXRseSBidXQgaXQncyBlYXNpZXIganVzdCB0byBlbnN1cmUgQ1RSTCBpcyBkZWZpbmVkLgorCitUaGlzIHBhdGNoIGlzIHRha2VuIGZyb20gU2Fib3RhZ2UgTGludXgsIHRoZSBsaWNlbnNlIHN0YXRlbWVudCBmb3IgcGF0Y2hlcyBhbmQKK2J1aWxkIHNjcmlwdHMgaW4gU2Fib3RhZ2UgTGludXggc2F5czoKKworICAgIFRvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCBDaHJpc3RpYW4gTmV1a2lyY2hlbiBoYXMgd2FpdmVkCisgICAgYWxsIGNvcHlyaWdodCBhbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhpcyB3b3JrLgorCisgICAgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworCitUaGVyZWZvcmUgdGhpcyBzaG91bGQgYmUgZ29vZCB0byBpbmNsdWRlIGluIE9wZW5FbWJlZGRlZC4KKworU2lnbmVkLW9mZi1ieTogUGF1bCBCYXJrZXIgPHBhdWxAcGF1bGJhcmtlci5tZS51az4KKworVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZCAoc2hvdWxkIGJlIGluY2x1ZGVkIGluIHY0LjguMTQpCisKK2RpZmYgLXUgbWMtNC44LjEuNy5vcmcvbGliL3R0eS90dHktbmN1cnNlcy5jIG1jLTQuOC4xLjcvbGliL3R0eS90dHktbmN1cnNlcy5jCistLS0gbWMtNC44LjEuNy5vcmcvbGliL3R0eS90dHktbmN1cnNlcy5jCisrKysgbWMtNC44LjEuNy9saWIvdHR5L3R0eS1uY3Vyc2VzLmMKK0BAIC02NSw3ICs2NSw3IEBACisgCisgLyoqKiBmaWxlIHNjb3BlIG1hY3JvIGRlZmluaXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCistI2lmIGRlZmluZWQoX0FJWCkgJiYgIWRlZmluZWQoQ1RSTCkKKysjaWYgIWRlZmluZWQoQ1RSTCkKKyAjZGVmaW5lIENUUkwoeCkgKCh4KSAmIDB4MWYpCisgI2VuZGlmCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tY180LjcuNS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWMvbWNfNC43LjUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDdlYjAyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWMvbWNfNC43LjUuMi5iYgpAQCAtMCwwICsxLDQ5IEBACitTVU1NQVJZID0gIk1pZG5pZ2h0IENvbW1hbmRlciBpcyBhbiBuY3Vyc2VzIGJhc2VkIGZpbGUgbWFuYWdlciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubWlkbmlnaHQtY29tbWFuZGVyLm9yZy8iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitERVBFTkRTID0gIm5jdXJzZXMgZ2xpYi0yLjAiCitSREVQRU5EU18ke1BOfSA9ICJuY3Vyc2VzLXRlcm1pbmZvIgorCitQUiA9ICJyMyIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm1pZG5pZ2h0LWNvbW1hbmRlci5vcmcvZG93bmxvYWRzLyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL21jLUNUUkwucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiZGFlOTY2MjQ0NDk2Y2Q0ZjZkMjgyZDgwYzljZjNjNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhNjgzMzg4NjJiYjMwMDE3ZWI2NWVkNTY5YTU4ZTgwYWI2NmFlOGNlZjExYzg4NjQ0MGM5ZTlmNGQxZWZjNmFiIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXNjcmVlbj1uY3Vyc2VzIC0td2l0aG91dC1ncG0tbW91c2UgLS13aXRob3V0LXggLS13aXRob3V0LXNhbWJhIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZXhlY2Rpcn0vbWMvLmRlYnVnLyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCXNlZCAtaSAtZSAnMXMsIyEuKnBlcmwsIyEke2JpbmRpcn0vZW52IHBlcmwsJyAke0R9JHtsaWJleGVjZGlyfS9tYy9leHRmcy5kLyoKKwlzZWQgLWkgLWUgJzFzLCMhLipweXRob24sIyEke2JpbmRpcn0vZW52IHB5dGhvbiwnICR7RH0ke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvKgorfQorCitQQUNLQUdFUyA9KyAiJHtCUE59LWhlbHBlcnMtcGVybCAke0JQTn0taGVscGVycy1weXRob24gJHtCUE59LWhlbHBlcnMgJHtCUE59LWZpc2giCisKK1NVTU1BUllfJHtCUE59LWhlbHBlcnMtcGVybCA9ICJNaWRuaWdodCBDb21tYW5kZXIgUGVybC1iYXNlZCBoZWxwZXIgc2NyaXB0cyIKK0ZJTEVTXyR7QlBOfS1oZWxwZXJzLXBlcmwgPSAiJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2ErICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9hcHQrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2RlYiAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvZGViYSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9kZWJkICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9kcGtnKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9tYWlsZnMgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3BhdGNoZnMgXCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3JwbXMrICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC91bGliIFwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC91emlwIgorUkRFUEVORFNfJHtCUE59LWhlbHBlcnMtcGVybCA9ICJwZXJsIgorCitTVU1NQVJZXyR7QlBOfS1oZWxwZXJzLXB5dGhvbiA9ICJNaWRuaWdodCBDb21tYW5kZXIgUHl0aG9uLWJhc2VkIGhlbHBlciBzY3JpcHRzIgorRklMRVNfJHtCUE59LWhlbHBlcnMtcHl0aG9uID0gIiR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9zMysgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3VjMTU0MSIKK1JERVBFTkRTXyR7QlBOfS1oZWxwZXJzLXB5dGhvbiA9ICJweXRob24iCisKK1NVTU1BUllfJHtCUE59LWhlbHBlcnMgPSAiTWlkbmlnaHQgQ29tbWFuZGVyIHNoZWxsIGhlbHBlciBzY3JpcHRzIgorRklMRVNfJHtCUE59LWhlbHBlcnMgPSAiJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kLyogJHtsaWJleGVjZGlyfS9tYy9leHQuZC8qIgorCitTVU1NQVJZXyR7QlBOfS1maXNoID0gIk1pZG5pZ2h0IENvbW1hbmRlciBGaXNoIHNjcmlwdHMiCitGSUxFU18ke0JQTn0tZmlzaCA9ICIke2xpYmV4ZWNkaXJ9L21jL2Zpc2giCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21jL21jXzQuOC4xNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21jL21jXzQuOC4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjZjMmZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWMvbWNfNC44LjE0LmJiCkBAIC0wLDAgKzEsNTIgQEAKK1NVTU1BUlkgPSAiTWlkbmlnaHQgQ29tbWFuZGVyIGlzIGFuIG5jdXJzZXMgYmFzZWQgZmlsZSBtYW5hZ2VyIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5taWRuaWdodC1jb21tYW5kZXIub3JnLyIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yNzBiYmFmZTM2MGU3M2Y5ODQwYmQ3OTgxNjIxZjljMiIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0RFUEVORFMgPSAibmN1cnNlcyBnbGliLTIuMCB1dGlsLWxpbnV4IgorUkRFUEVORFNfJHtQTn0gPSAibmN1cnNlcy10ZXJtaW5mbyIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm1pZG5pZ2h0LWNvbW1hbmRlci5vcmcvZG93bmxvYWRzLyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmUxY2I3NTY0M2MyYmQ0ZGY2NGJiY2YyZGFiNzY5MDUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjFmZDBmZDIyODBjM2QwOWQ3ZTBhZWM4YWIwMDFmYzg5ZGFkOGU0ZmQ5OTQxZjM4NjQxNDY2N2I1NTE1MmVjNSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKKworIworIyBCb3RoIFNhbWJhIChzbWIpIGFuZCBzZnRwIHJlcXVpcmUgcGFja2FnZSBkZWxpdmVyZWQgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZAorIworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbc21iXSA9ICItLWVuYWJsZS12ZnMtc21iLC0tZGlzYWJsZS12ZnMtc21iLHNhbWJhLCIKK1BBQ0tBR0VDT05GSUdbc2Z0cF0gPSAiLS1lbmFibGUtdmZzLXNmdHAsLS1kaXNhYmxlLXZmcy1zZnRwLGxpYnNzaDIsIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXNjcmVlbj1uY3Vyc2VzIC0td2l0aG91dC1ncG0tbW91c2UgLS13aXRob3V0LXgiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS9tYy8uZGVidWcvIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJc2VkIC1pIC1lICcxcywjIS4qcGVybCwjISR7YmluZGlyfS9lbnYgcGVybCwnICR7RH0ke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvKgorCXNlZCAtaSAtZSAnMXMsIyEuKnB5dGhvbiwjISR7YmluZGlyfS9lbnYgcHl0aG9uLCcgJHtEfSR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC8qCit9CisKK1BBQ0tBR0VTID0rICIke0JQTn0taGVscGVycy1wZXJsICR7QlBOfS1oZWxwZXJzLXB5dGhvbiAke0JQTn0taGVscGVycyAke0JQTn0tZmlzaCIKKworU1VNTUFSWV8ke0JQTn0taGVscGVycy1wZXJsID0gIk1pZG5pZ2h0IENvbW1hbmRlciBQZXJsLWJhc2VkIGhlbHBlciBzY3JpcHRzIgorRklMRVNfJHtCUE59LWhlbHBlcnMtcGVybCA9ICIke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvYSsgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2FwdCsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvZGViICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9kZWJhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2RlYmQgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2Rwa2crIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL21haWxmcyAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvcGF0Y2hmcyBcIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvcnBtcysgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3VsaWIgXCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3V6aXAiCitSREVQRU5EU18ke0JQTn0taGVscGVycy1wZXJsID0gInBlcmwiCisKK1NVTU1BUllfJHtCUE59LWhlbHBlcnMtcHl0aG9uID0gIk1pZG5pZ2h0IENvbW1hbmRlciBQeXRob24tYmFzZWQgaGVscGVyIHNjcmlwdHMiCitGSUxFU18ke0JQTn0taGVscGVycy1weXRob24gPSAiJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3MzKyAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvdWMxNTQxIgorUkRFUEVORFNfJHtCUE59LWhlbHBlcnMtcHl0aG9uID0gInB5dGhvbiIKKworU1VNTUFSWV8ke0JQTn0taGVscGVycyA9ICJNaWRuaWdodCBDb21tYW5kZXIgc2hlbGwgaGVscGVyIHNjcmlwdHMiCitGSUxFU18ke0JQTn0taGVscGVycyA9ICIke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvKiAke2xpYmV4ZWNkaXJ9L21jL2V4dC5kLyoiCisKK1NVTU1BUllfJHtCUE59LWZpc2ggPSAiTWlkbmlnaHQgQ29tbWFuZGVyIEZpc2ggc2NyaXB0cyIKK0ZJTEVTXyR7QlBOfS1maXNoID0gIiR7bGliZXhlY2Rpcn0vbWMvZmlzaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzLzAwMDEtRml4LXR5cG8taW4tY29tcGFyaXNpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy8wMDAxLUZpeC10eXBvLWluLWNvbXBhcmlzaW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNzBiMWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy8wMDAxLUZpeC10eXBvLWluLWNvbXBhcmlzaW9uLnBhdGNoCkBAIC0wLDAgKzEsODYgQEAKK0Zyb20gMThkMzYwZDc0MjcxYTA2NmE4NDliYzFmYmE0ZjEwZGJiMjNlZDI1MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDggU2VwIDIwMTUgMDg6MTc6NDIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IHR5cG8gaW4gY29tcGFyaXNpb24KKworZXJyb3I6IGNvbXBhcmlzb24gb2YgYXJyYXkgJ2Rldm5tJyBlcXVhbCB0byBhIG51bGwgcG9pbnRlciBpcyBhbHdheXMgZmFsc2UKKworVXNlciBiaXR3aXNlICcmJyBvcGVyYXRvciBhcyBpdCBpcyBhIG1hc2sKKworRml4ZXMKK2Vycm9yOiB1c2Ugb2YgbG9naWNhbCAnJiYnIHdpdGggY29uc3RhbnQgb3BlcmFuZAorCitSZW1vdmUgZXh0cmFuZW91cyBwYXJlbnMKKworZXJyb3I6IGVxdWFsaXR5IGNvbXBhcmlzb24gd2l0aCBleHRyYW5lb3VzIHBhcmVudGhlc2VzCisKK1JlbW92ZSBkZWFkIGNvZGUKKworcmVzdHJpcGUuYzo0NjU6MjE6IGVycm9yOiBleHBsaWNpdGx5IGFzc2lnbmluZyB2YWx1ZSBvZiB2YXJpYWJsZSBvZiB0eXBlICdpbnQnIHRvIGl0c2VsZgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIG1kbW9uLmggICAgICAgfCAyICstCisgbWRvcGVuLmMgICAgICB8IDIgKy0KKyByZXN0cmlwZS5jICAgIHwgMyAtLS0KKyBzdXBlci1pbnRlbC5jIHwgMiArLQorIDQgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbWRtb24uaCBiL21kbW9uLmgKK2luZGV4IGFhNzUwYzYuLjBiMDhjM2QgMTAwNjQ0CistLS0gYS9tZG1vbi5oCisrKysgYi9tZG1vbi5oCitAQCAtMTAxLDcgKzEwMSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGlzX3Jlc3luY19jb21wbGV0ZShzdHJ1Y3QgbWRpbmZvICphcnJheSkKKyAJCWJyZWFrOworIAljYXNlIDEwOgorIAkJbCA9IGFycmF5LT5hcnJheS5sYXlvdXQ7CistCQluY29waWVzID0gKGwgJiAweGZmKSAqICgobCA+PiA4KSAmJiAweGZmKTsKKysJCW5jb3BpZXMgPSAobCAmIDB4ZmYpICogKChsID4+IDgpICYgMHhmZik7CisgCQlzeW5jX3NpemUgPSBhcnJheS0+Y29tcG9uZW50X3NpemUgKiBhcnJheS0+YXJyYXkucmFpZF9kaXNrczsKKyAJCXN5bmNfc2l6ZSAvPSBuY29waWVzOworIAkJYnJlYWs7CitkaWZmIC0tZ2l0IGEvbWRvcGVuLmMgYi9tZG9wZW4uYworaW5kZXggMjg0MTBmNC4uYzVlZTJhNiAxMDA2NDQKKy0tLSBhL21kb3Blbi5jCisrKysgYi9tZG9wZW4uYworQEAgLTMxOCw3ICszMTgsNyBAQCBpbnQgY3JlYXRlX21kZGV2KGNoYXIgKmRldiwgY2hhciAqbmFtZSwgaW50IGF1dG9mLCBpbnQgdHJ1c3R3b3J0aHksCisgCWVsc2UgaWYgKG51bSA8IDApIHsKKyAJCS8qIG5lZWQgdG8gY2hvb3NlIGEgZnJlZSBudW1iZXIuICovCisgCQljaGFyICpfZGV2bm0gPSBmaW5kX2ZyZWVfZGV2bm0odXNlX21kcCk7CistCQlpZiAoZGV2bm0gPT0gTlVMTCkgeworKwkJaWYgKF9kZXZubSA9PSBOVUxMKSB7CisgCQkJcHJfZXJyKCJObyBhdmFpbCBtZCBkZXZpY2VzIC0gYWJvcnRpbmdcbiIpOworIAkJCXJldHVybiAtMTsKKyAJCX0KK2RpZmYgLS1naXQgYS9yZXN0cmlwZS5jIGIvcmVzdHJpcGUuYworaW5kZXggNGQ5MjE5MC4uY2ZlOTY2NiAxMDA2NDQKKy0tLSBhL3Jlc3RyaXBlLmMKKysrKyBiL3Jlc3RyaXBlLmMKK0BAIC00NjEsOSArNDYxLDYgQEAgaW50IHJhaWQ2X2NoZWNrX2Rpc2tzKGludCBkYXRhX2Rpc2tzLCBpbnQgc3RhcnQsIGludCBjaHVua19zaXplLAorIAkJCWN1cnJfYnJva2VuX2Rpc2sgPSBkaXNrRDsKKyAJCX0KKyAKKy0JCWlmKChQeCA9PSAwKSAmJiAoUXggPT0gMCkpCistCQkJY3Vycl9icm9rZW5fZGlzayA9IGN1cnJfYnJva2VuX2Rpc2s7CistCisgCQlpZihjdXJyX2Jyb2tlbl9kaXNrID49IGRhdGFfZGlza3MgKyAyKQorIAkJCWJyb2tlbl9zdGF0dXMgPSAyOworIAorZGlmZiAtLWdpdCBhL3N1cGVyLWludGVsLmMgYi9zdXBlci1pbnRlbC5jCitpbmRleCAzZjgxMmQ2Li4xODM4MDEyIDEwMDY0NAorLS0tIGEvc3VwZXItaW50ZWwuYworKysrIGIvc3VwZXItaW50ZWwuYworQEAgLTEwMDI3LDcgKzEwMDI3LDcgQEAgZW51bSBpbXNtX3Jlc2hhcGVfdHlwZSBpbXNtX2FuYWx5emVfY2hhbmdlKHN0cnVjdCBzdXBlcnR5cGUgKnN0LAorIAkJCQlnZW8tPnNpemUgPSBtYXhfc2l6ZTsKKyAJCX0KKyAKKy0JCWlmICgoZGlyZWN0aW9uID09IFJPTExCQUNLX01FVEFEQVRBX0NIQU5HRVMpKSB7CisrCQlpZiAoZGlyZWN0aW9uID09IFJPTExCQUNLX01FVEFEQVRBX0NIQU5HRVMpIHsKKyAJCQkvKiBhY2NlcHQgc2l6ZSBmb3Igcm9sbGJhY2sgb25seQorIAkJCSovCisgCQl9IGVsc2UgeworLS0gCisyLjUuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9nY2MtNC45LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvZ2NjLTQuOS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGJmMWQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvZ2NjLTQuOS5wYXRjaApAQCAtMCwwICsxLDIyIEBACitzdXBlci1pbnRlbC5jOjUwNjM6MjogZXJyb3I6IHJpZ2h0LWhhbmQgb3BlcmFuZCBvZiBjb21tYSBleHByZXNzaW9uIGhhcyBubyBlZmZlY3QgWy1XZXJyb3I9dW51c2VkLXZhbHVlXQorICBzbnByaW50ZigoY2hhciAqKSBzcGFyZS0+c2lnLCBNQVhfU0lHTkFUVVJFX0xFTkdUSCwKKyAgXgorY2MxOiBhbGwgd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMKK21ha2U6ICoqKiBbc3VwZXItaW50ZWwub10gRXJyb3IgMQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBtZGFkbS0zLjMvc3VwZXItaW50ZWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1kYWRtLTMuMy5vcmlnL3N1cGVyLWludGVsLmMJMjAxNC0wNS0wMiAxNTowODoyMS4xNTQzMTk2NTEgLTA3MDAKKysrKyBtZGFkbS0zLjMvc3VwZXItaW50ZWwuYwkyMDE0LTA1LTAyIDE1OjA5OjMxLjQ3MDk4NTc5NCAtMDcwMAorQEAgLTUwNjAsNyArNTA2MCw3IEBACisgCXNwYXJlLT5jYWNoZV9zaXplID0gbXBiLT5jYWNoZV9zaXplLAorIAlzcGFyZS0+cHdyX2N5Y2xlX2NvdW50ID0gX19jcHVfdG9fbGUzMigxKSwKKyAKKy0Jc25wcmludGYoKGNoYXIgKikgc3BhcmUtPnNpZywgTUFYX1NJR05BVFVSRV9MRU5HVEgsCisrCSh2b2lkKXNucHJpbnRmKChjaGFyICopIHNwYXJlLT5zaWcsIE1BWF9TSUdOQVRVUkVfTEVOR1RILAorIAkJIE1QQl9TSUdOQVRVUkUgTVBCX1ZFUlNJT05fUkFJRDApOworIAorIAlmb3IgKGQgPSBzdXBlci0+ZGlza3M7IGQ7IGQgPSBkLT5uZXh0KSB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9tZGFkbS0zLjIuMl9maXhfZm9yX3gzMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL21kYWRtLTMuMi4yX2ZpeF9mb3JfeDMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiM2RiMGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9tZGFkbS0zLjIuMl9maXhfZm9yX3gzMi5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IHBlbmRpbmcKKworQnkgaGFyZGNvZGluZyBDQydzIGRlZmluaXRpb24gaW4gdGhlIE1ha2VmaWxlLCBhbGwgdGhlIGdjYyBwYXJhbWV0ZXJzIAorc2V0IGJ5IHR1bmUgc2V0dGluZ3MgYXJlIGxvc3QuIENhdXNpbmcgY29tcGlsZSBmYWlsdXJlIHdpdGggeDMyIHRvb2xjaGFpbgorCitBcyB0aGUgYml0YmFrZSBkZWZpbmVkIENDIGlzIGdvb2QsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVkZmluZSBDQyBpbiB0aGUgCittYWtlIGZpbGUsIGhlbmNlIG1ha2luZyB0aGUgQ0MgZGVmaW5pdGlvbiBpbiB0aGUgTWFrZWZpbGUgY29uZGl0aW9uYWwuCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMTIvMDcKKworSW5kZXg6IG1kYWRtLTMuMy9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1kYWRtLTMuMy5vcmlnL01ha2VmaWxlCTIwMTMtMDktMDMgMDc6NDc6NDcuMDAwMDAwMDAwICswMzAwCisrKysgbWRhZG0tMy4zL01ha2VmaWxlCTIwMTMtMTAtMTYgMTY6NDQ6MjMuNTQyMjk1NDg3ICswMzAwCitAQCAtNDEsNyArNDEsNyBAQAorIAorIEtMSUJDX0dDQyA9IGdjYyAtbm9zdGRpbmMgLWl3aXRocHJlZml4IGluY2x1ZGUgLUkkKEtMSUJDKS9rbGliYy9pbmNsdWRlIC1JJChLTElCQykvbGludXgvaW5jbHVkZSAtSSQoS0xJQkMpL2tsaWJjL2FyY2gvaTM4Ni9pbmNsdWRlIC1JJChLTElCQykva2xpYmMvaW5jbHVkZS9iaXRzMzIKKyAKKy1DQyA9ICQoQ1JPU1NfQ09NUElMRSlnY2MKKytDQyA/PSAkKENST1NTX0NPTVBJTEUpZ2NjCisgQ1hGTEFHUyA/PSAtZ2dkYgorIENXRkxBR1MgPSAtV2FsbCAtV2Vycm9yIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdleHRyYSAtV25vLXVudXNlZC1wYXJhbWV0ZXIKKyBpZmRlZiBXQVJOX1VOVVNFRApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvbWRhZG0tMy4zLjJfeDMyX2FiaV90aW1lX3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9tZGFkbS0zLjMuMl94MzJfYWJpX3RpbWVfdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjU2ZDA3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvbWRhZG0tMy4zLjJfeDMyX2FiaV90aW1lX3QucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorV2hlbiB0cnkgdG8gcHJpbnQgdGltZV90IHZhbHVlcyBhcyBhIGxvbmcgaW50IGl0IGNhdXNlcyBhbiBlcnJvciBiZWNhdXNlIHRpbWVfdAorZGF0YSB0eXBlIGluIHgzMiBBQkkgaXMgbG9uZyBsb25nIGludC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgorCitJbmRleDogbWRhZG0tMy4zLjQvbW9uaXRvci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWRhZG0tMy4zLjQub3JpZy9tb25pdG9yLmMKKysrKyBtZGFkbS0zLjMuNC9tb25pdG9yLmMKK0BAIC0yNTcsOSArMjU3LDEyIEBAIHN0YXRpYyBpbnQgcmVhZF9hbmRfYWN0KHN0cnVjdCBhY3RpdmVfYXIKKyAJCQltZGktPmN1cnJfc3RhdGUgPSByZWFkX2Rldl9zdGF0ZShtZGktPnN0YXRlX2ZkKTsKKyAJCX0KKyAJfQorLQorIAlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKKysjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSAmJiBkZWZpbmVkKF9fSUxQMzJfXykKKysJZHByaW50ZigiKCVkKTogJWxsZC4lMDZsbGQgc3RhdGU6JXMgcHJldjolcyBhY3Rpb246JXMgcHJldjogJXMgc3RhcnQ6JWxsdVxuIiwKKysjZWxzZQorIAlkcHJpbnRmKCIoJWQpOiAlbGQuJTA2bGQgc3RhdGU6JXMgcHJldjolcyBhY3Rpb246JXMgcHJldjogJXMgc3RhcnQ6JWxsdVxuIiwKKysjZW5kaWYKKyAJCWEtPmluZm8uY29udGFpbmVyX21lbWJlciwKKyAJCXR2LnR2X3NlYywgdHYudHZfdXNlYywKKyAJCWFycmF5X3N0YXRlc1thLT5jdXJyX3N0YXRlXSwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjI3NjA5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaAorCisuL3Rlc3QgJj4uL3Rlc3QubG9nCitpZiBbICQ/IC1lcSAwIF0KK3RoZW4KKwllY2hvICJQQVNTOiBtZGFkbSIKKwlybSB0ZXN0LmxvZworZWxzZQorCWVjaG8gIkZBSUw6IG1kYWRtIgorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL21kYWRtXzMuMy40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vbWRhZG1fMy4zLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE5ODE2NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL21kYWRtXzMuMy40LmJiCkBAIC0wLDAgKzEsNzEgQEAKK1NVTU1BUlkgPSAiVG9vbCBmb3IgbWFuYWdpbmcgc29mdHdhcmUgUkFJRCB1bmRlciBMaW51eCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvcmFpZC9tZGFkbS8iCisKKyMgU29tZSBmaWxlcyBhcmUgR1BMdjIrIHdoaWxlIG90aGVycyBhcmUgR1BMdjIuCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWRtb24uYztiZWdpbmxpbmU9NDtlbmRsaW5lPTE4O21kNT1hZjdkODQ0NGQ5YzRkM2U1YzdjYWFjMGQ5ZDM0MDM5ZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9tZGFkbS5oO2JlZ2xpbmxuZT00O2VuZGxpbmU9MjI7bWQ1PTQ2MmJjOTkzNmFjMGQzZGExMTAxOTFhM2Y5OTk0MTYxIgorCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC91dGlscy9yYWlkL21kYWRtLyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vbWRhZG0tMy4yLjJfZml4X2Zvcl94MzIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ2NjLTQuOS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tZGFkbS0zLjMuMl94MzJfYWJpX3RpbWVfdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC10eXBvLWluLWNvbXBhcmlzaW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisJICAiCitTUkNfVVJJW21kNXN1bV0gPSAiN2NhOGIxMTQ3MTBmOThmNTNmMjBjNTc4N2I2NzRhMDkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGFlNWY0NTMwNmI4NzMxOTBlOTFmNDEwNzA5YjAwZTUxOTk3YjYzM2MwNzJiMzNmOGVmZDlmN2RmMDIyY2E2OCIKKworQ0ZMQUdTICs9ICItZm5vLXN0cmljdC1hbGlhc2luZyIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK0VYVFJBX09FTUFLRSA9ICJDSEVDS19SVU5fRElSPTAiCisjIFBQQzY0IGFuZCBNSVBTNjQgdXNlcyBsb25nIGxvbmcgZm9yIHU2NCBpbiB0aGUga2VybmVsLCBidXQgcG93ZXJwYydzIGFzbS90eXBlcy5oCisjIHByZXZlbnRzIDY0LWJpdCB1c2VybGFuZCBmcm9tIHNlZWluZyB0aGlzIGRlZmluaXRpb24sIGluc3RlYWQgZGVmYXVsdGluZworIyB0byB1NjQgPT0gbG9uZyBpbiB1c2Vyc3BhY2UuIERlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18gdG8gZ2V0CisjIGludC1sbDY0LmggaW5jbHVkZWQKK0VYVFJBX09FTUFLRV9hcHBlbmRfcG93ZXJwYzY0ID0gJyBDRkxBR1M9LURfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18nCitFWFRSQV9PRU1BS0VfYXBwZW5kX21pcHM2NCA9ICcgQ0ZMQUdTPS1EX19TQU5FX1VTRVJTUEFDRV9UWVBFU19fJworRVhUUkFfT0VNQUtFX2FwcGVuZF9taXBzNjRuMzIgPSAnIENGTEFHUz0tRF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfXycKKworZG9fY29tcGlsZSgpIHsKKwlvZV9ydW5tYWtlCit9CisKK2RvX2luc3RhbGwoKSB7CisJZXhwb3J0IFNUUklQPSIiCisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKK30KKworRklMRVNfJHtQTn0gKz0gIiR7YmFzZV9saWJkaXJ9L3VkZXYvcnVsZXMuZC8qLnJ1bGVzIgorCitpbmhlcml0IHB0ZXN0CisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJb2VfcnVubWFrZSB0ZXN0Cit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJY3AgLWEgJHtTfS90ZXN0cyAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cworCWNwICR7U30vdGVzdCAke0R9JHtQVEVTVF9QQVRIfQorCXNlZCAtZSAncyFzbGVlcCAwLiohc2xlZXAgMSFnOyBzIS92YXIvdG1wIS8hZycgLWkgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorCWxuIC1zIC9zYmluL21kYWRtICR7RH0ke1BURVNUX1BBVEh9L21kYWRtCisJZm9yIHByZyBpbiB0ZXN0X3N0cmlwZSBzd2FwX3N1cGVyIHJhaWQ2Y2hlY2sKKwlkbworCQlpbnN0YWxsIC1EIC1tIDc1NSAkcHJnICR7RH0ke1BURVNUX1BBVEh9LworCWRvbmUKK30KK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJiYXNoIgorUlJFQ09NTUVORFNfJHtQTn0tcHRlc3QgKz0gIiBcCisgICAgY29yZXV0aWxzIFwKKyAgICB1dGlsLWxpbnV4IFwKKyAgICBrZXJuZWwtbW9kdWxlLWxvb3AgXAorICAgIGtlcm5lbC1tb2R1bGUtbGluZWFyIFwKKyAgICBrZXJuZWwtbW9kdWxlLXJhaWQwIFwKKyAgICBrZXJuZWwtbW9kdWxlLXJhaWQxIFwKKyAgICBrZXJuZWwtbW9kdWxlLXJhaWQxMCBcCisgICAga2VybmVsLW1vZHVsZS1yYWlkNDU2IFwKKyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmdldHR5L21pbmdldHR5XzEuMDguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5nZXR0eS9taW5nZXR0eV8xLjA4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMTYyMjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5nZXR0eS9taW5nZXR0eV8xLjA4LmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiQ29tcGFjdCBnZXR0eSB0ZXJtaW5hbCBoYW5kbGVyIGZvciB2aXJ0dWFsIGNvbnNvbGVzIG9ubHkiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL21pbmdldHR5LyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitQUiA9ICJyMyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MGM1NmRiMDE0M2Y0ZjgwYzM2OWVlM2FmNzQyNWFmNmUiCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS8ke0JQTn0vJHtCUH0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmE3NWFkNjQ4N2ZmMjcxNDI0ZmZjMDBhNjQ0MjA5OTAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGY1NWM5MGJhNGZhYTkxM2Q5MWVmOTljYmY1Y2IyZWI0ZGJlMjc4MDMxNGMzYmIxNzk1M2Y4NDljOGNkZGQxNyIKKworIyBzdWJzdGl0dXRlIG91ciBDRkxBR1MgZm9yICItTzIgLVdhbGwgLVcgLXBpcGUiCisjCitFWFRSQV9PRU1BS0UgPSAiQ0M9JyR7Q0N9JyBcCisgICAgICAgICAgICAgICAgQ0ZMQUdTPScke0NGTEFHU30gLURfR05VX1NPVVJDRSciCisKK2RvX2luc3RhbGwoKXsKKyAgICBpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuOCAke0R9LyR7YmFzZV9zYmluZGlyfQorICAgIG9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0KK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImdldHR5IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2dldHR5XSA9ICIke2Jhc2Vfc2JpbmRpcn0vZ2V0dHkiCitBTFRFUk5BVElWRV9UQVJHRVRbZ2V0dHldID0gIiR7YmFzZV9zYmluZGlyfS9taW5nZXR0eSIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tLzAwMDEtRml4LWJ1aWxkLWlzc3VzLXN1cmZhY2VkLWR1ZS10by1tdXNsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tLzAwMDEtRml4LWJ1aWxkLWlzc3VzLXN1cmZhY2VkLWR1ZS10by1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYzY3ZmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5pY29tL21pbmljb20vMDAwMS1GaXgtYnVpbGQtaXNzdXMtc3VyZmFjZWQtZHVlLXRvLW11c2wucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorRnJvbSBkNjJhNTg2MmUyNmVkM2ZjNThkNzg5ZWZlOWM0MGNhNmM5MTFkMzZiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMzEgQXVnIDIwMTUgMjI6MzU6MzEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IGJ1aWxkIGlzc3VzIHN1cmZhY2VkIGR1ZSB0byBtdXNsCisKK3NyYy9nZXRzZGlyLmg6Mjg6MTQ6IGVycm9yOiAnTUFYTkFNTEVOJyB1bmRlY2xhcmVkIGhlcmUgKG5vdCBpbiBhIGZ1bmN0aW9uKQorICAgY2hhciBmbmFtZVtNQVhOQU1MRU4gKyAxXTsgIC8qIGZpbGVuYW1lICsgdGVybWluYXRpbmcgbnVsbCAqLworCitzcmMvZGlhbC5jOjM1MjoyMjogZXJyb3I6ICdLSU9DU09VTkQnIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQorfCAgICAgIGlvY3RsKGNvbnNvbGVmZCwgS0lPQ1NPVU5ELCBrKTsKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBzcmMvZGlhbC5jICAgIHwgMiArLQorIHNyYy9nZXRzZGlyLmMgfCAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2RpYWwuYyBiL3NyYy9kaWFsLmMKK2luZGV4IGE5MGMxZDIuLmJmMDI1NzQgMTAwNjQ0CistLS0gYS9zcmMvZGlhbC5jCisrKysgYi9zcmMvZGlhbC5jCitAQCAtMzksNyArMzksNyBAQAorICNpbmNsdWRlICJpbnRsLmgiCisgCisgI2lmZGVmIFZDX01VU0lDCistIyAgaWYgZGVmaW5lZChfX0dMSUJDX18pCisrIyAgaWYgZGVmaW5lZChfX0dMSUJDX18pIHx8IGRlZmluZWQoX19saW51eF9fKQorICMgICAgaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisgIyAgICBpbmNsdWRlIDxzeXMva2QuaD4KKyAjICAgIGluY2x1ZGUgPHN5cy90aW1lLmg+CitkaWZmIC0tZ2l0IGEvc3JjL2dldHNkaXIuYyBiL3NyYy9nZXRzZGlyLmMKK2luZGV4IDIxOTViMjcuLmI2MWEzNjEgMTAwNjQ0CistLS0gYS9zcmMvZ2V0c2Rpci5jCisrKysgYi9zcmMvZ2V0c2Rpci5jCitAQCAtMzAsNiArMzAsNyBAQAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorIAorICNpbmNsdWRlICJnZXRzZGlyLmgiCistLSAKKzIuNS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbS8wMDAxLWZpeC1taW5pY29tLWgtdi1yZXR1cm4tdmFsdWUtaXMtbm90LTAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5pY29tL21pbmljb20vMDAwMS1maXgtbWluaWNvbS1oLXYtcmV0dXJuLXZhbHVlLWlzLW5vdC0wLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkODI2MWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5pY29tL21pbmljb20vMDAwMS1maXgtbWluaWNvbS1oLXYtcmV0dXJuLXZhbHVlLWlzLW5vdC0wLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1N1YmplY3Q6IFtQQVRDSF0gZml4IG1pbmljb20gLWgvLXYgcmV0dXJuIHZhbHVlIGlzIG5vdCAwCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBMdSBDaG9uZyA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKworLS0tCisgc3JjL21pbmljb20uYyB8ICAgIDYgKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9taW5pY29tLmMgYi9zcmMvbWluaWNvbS5jCitpbmRleCBlMWE1NTdiLi43MzBkYTdjIDEwMDY0NAorLS0tIGEvc3JjL21pbmljb20uYworKysrIGIvc3JjL21pbmljb20uYworQEAgLTExNjYsMTUgKzExNjYsMTMgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkgICAgICAgICAibW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiIKKyAgICAgICAgICAgICAgICAgICJhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb25cbiIKKyAgICAgICAgICAgICAgICAgICIyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4iKTsKKy0gICAgICAgICAgZXhpdCgxKTsKKy0gICAgICAgICAgYnJlYWs7CisrICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgICBjYXNlICdzJzogLyogc2V0dXAgbW9kZSAqLworICAgICAgICAgICBkb3NldHVwID0gMTsKKyAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlICdoJzoKKyAgICAgICAgICAgaGVscHRoZW0oKTsKKy0gICAgICAgICAgZXhpdCgxKTsKKy0gICAgICAgICAgYnJlYWs7CisrICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgICBjYXNlICdwJzogLyogUHNldWRvIHRlcm1pbmFsIHRvIHVzZS4gKi8KKyAgICAgICAgICAgaWYgKHN0cm5jbXAob3B0YXJnLCAiL2Rldi8iLCA1KSA9PSAwKQorICAgICAgICAgICAgIG9wdGFyZyArPSA1OworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbS9hbGxvdy50by5kaXNhYmxlLmxvY2tkZXYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5pY29tL21pbmljb20vYWxsb3cudG8uZGlzYWJsZS5sb2NrZGV2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YzA4ODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5pY29tL21pbmljb20vYWxsb3cudG8uZGlzYWJsZS5sb2NrZGV2LnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CisKKy0tLSBhL2NvbmZpZ3VyZS5pbgkyMDEzLTAyLTA2IDE4OjE4OjEzLjAwMDAwMDAwMCArMDEwMAorKysrIGIvY29uZmlndXJlLmluCTIwMTMtMDctMjEgMTU6MzE6MjcuNjE0ODI4ODk0ICswMjAwCitAQCAtNDAsNyArNDAsMTMgQEAKKyBmaQorIAorIFBLR19QUk9HX1BLR19DT05GSUcKKy1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKysKKytBQ19BUkdfRU5BQkxFKFtsb2NrZGV2XSwKKysgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1sb2NrZGV2XSwKKysgICAgICAgICAgICAgICAgICAgICAgIFtFbmFibGUgbG9ja2RldiBzdXBwb3J0IChkZWY6IGVuYWJsZWQpXSksCisrICAgICAgICBbXSwgW2VuYWJsZV9sb2NrZGV2PSJ5ZXMiXSkKKysKKytpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgdGVzdCAieCRlbmFibGVfbG9ja2RldiIgPSB4eWVzOyB0aGVuCisgCVBLR19DSEVDS19NT0RVTEVTKFtMT0NLREVWXSwgW2xvY2tkZXZdLCBBQ19ERUZJTkUoW0hBVkVfTE9DS0RFVl0sWzFdLFtEZWZpbmUgaWYgeW91IGhhdmUgbG9ja2Rldl0pLFs6XSkKKyBmaQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tXzIuNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbV8yLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU3NWNmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbV8yLjcuYmIKQEAgLTAsMCArMSwyNiBAQAorU1VNTUFSWSA9ICJUZXh0LWJhc2VkIG1vZGVtIGNvbnRyb2wgYW5kIHRlcm1pbmFsIGVtdWxhdGlvbiBwcm9ncmFtIgorREVTQ1JJUFRJT04gPSAiTWluaWNvbSBpcyBhIHRleHQtYmFzZWQgbW9kZW0gY29udHJvbCBhbmQgdGVybWluYWwgZW11bGF0aW9uIHByb2dyYW0gZm9yIFVuaXgtbGlrZSBvcGVyYXRpbmcgc3lzdGVtcyIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorREVQRU5EUyA9ICJuY3Vyc2VzIHZpcnR1YWwvbGliaWNvbnYiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQyMDQ3N2FiYzU2NzQwNGRlYmNhMGEyYTFjYjZiNjQ1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9taW5pY29tLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xMjttZDU9YTU4ODM4Y2I3MDlmMGRiNTE3ZjRlNDI3MzBjNDllODEiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9hbGlvdGguZGViaWFuLm9yZy9mcnMvZG93bmxvYWQucGhwL2xhdGVzdGZpbGUvMy8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYWxsb3cudG8uZGlzYWJsZS5sb2NrZGV2LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZml4LW1pbmljb20taC12LXJldHVybi12YWx1ZS1pcy1ub3QtMC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1idWlsZC1pc3N1cy1zdXJmYWNlZC1kdWUtdG8tbXVzbC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzA0NGNhM2UyOTEyNjhjMzMyOTRmMTcxZDQyNmRjMmQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWFjM2E2NjNiODJmNGY1ZGY2NDExNGI0NzkyYjk5MjZiNTM2Yzg1ZjU5ZGUwZjJkMmIzMjFjNzYyNmE5MDRmNCIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbbG9ja2Rldl0gPSAiLS1lbmFibGUtbG9ja2RldiwtLWRpc2FibGUtbG9ja2Rldixsb2NrZGV2IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZworCitkb19pbnN0YWxsKCkgeworCWZvciBkIGluIGRvYyBleHRyYXMgbWFuIGxpYiBzcmM7IGRvIG1ha2UgLUMgJGQgREVTVERJUj0ke0R9IGluc3RhbGw7IGRvbmUKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWt0ZW1wL2ZpbGVzL2Rpc2FibGUtc3RyaXAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ta3RlbXAvZmlsZXMvZGlzYWJsZS1zdHJpcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDY4NjllCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWt0ZW1wL2ZpbGVzL2Rpc2FibGUtc3RyaXAucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggMzdiM2NjOS4uZjEwMjZmMyAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTk1LDcgKzk1LDcgQEAgaW5zdGFsbC1kaXJzOgorIAkgICAgJChERVNURElSKSQobWFuZGlyKS9tYW4xCisgCisgaW5zdGFsbC1iaW5hcmllczogJChQUk9HKQorLQkkKElOU1RBTEwpIC1tIDA1NTUgLXMgJChQUk9HKSAkKERFU1RESVIpJChiaW5kaXIpLyQoUFJPRykKKysJJChJTlNUQUxMKSAtbSAwNTU1ICQoUFJPRykgJChERVNURElSKSQoYmluZGlyKS8kKFBST0cpCisgCisgaW5zdGFsbC1tYW46CisgCSQoSU5TVEFMTCkgLW0gMDQ0NCAkKHNyY2RpcikvbWt0ZW1wLiQobWFudHlwZSkgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWt0ZW1wL2ZpbGVzL2ZpeC1wYXJhbGxlbC1tYWtlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWt0ZW1wL2ZpbGVzL2ZpeC1wYXJhbGxlbC1tYWtlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYjZkY2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ta3RlbXAvZmlsZXMvZml4LXBhcmFsbGVsLW1ha2UucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorVGhpcyBmaXhlcyB0aGUgcGFyYWxsZWwgbWFrZSBpbnN0YWxsIGZhaWx1cmUKKworVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZAoraHR0cDovL3d3dy5ncmF0aXNvZnQudXMvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTUyOAorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBta3RlbXAtMS43L01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWt0ZW1wLTEuNy5vcmlnL01ha2VmaWxlLmluCisrKysgbWt0ZW1wLTEuNy9NYWtlZmlsZS5pbgorQEAgLTk0LDEwICs5NCwxMCBAQCBpbnN0YWxsLWRpcnM6CisgCSQoU0hFTEwpICQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoREVTVERJUikkKGJpbmRpcikgXAorIAkgICAgJChERVNURElSKSQobWFuZGlyKS9tYW4xCisgCistaW5zdGFsbC1iaW5hcmllczogJChQUk9HKQorK2luc3RhbGwtYmluYXJpZXM6IGluc3RhbGwtZGlycyAkKFBST0cpCisgCSQoSU5TVEFMTCkgLW0gMDU1NSAkKFBST0cpICQoREVTVERJUikkKGJpbmRpcikvJChQUk9HKQorIAorLWluc3RhbGwtbWFuOgorK2luc3RhbGwtbWFuOiBpbnN0YWxsLWRpcnMKKyAJJChJTlNUQUxMKSAtbSAwNDQ0ICQoc3JjZGlyKS9ta3RlbXAuJChtYW50eXBlKSBcCisgCSAgICAkKERFU1RESVIpJChtYW5kaXIpL21hbjEvbWt0ZW1wLjEKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21rdGVtcC9ta3RlbXBfMS43LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWt0ZW1wL21rdGVtcF8xLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUyMzhlZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21rdGVtcC9ta3RlbXBfMS43LmJiCkBAIC0wLDAgKzEsMzQgQEAKK1NVTU1BUlkgPSAiRW5hYmxlcyBzYWZlIHRlbXBvcmFyeSBmaWxlIGNyZWF0aW9uIGZyb20gc2hlbGwgc2NyaXB0cyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubWt0ZW1wLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly93d3cubWt0ZW1wLm9yZy9idWdzIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJJU0MiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT00MzA2ODBmNjMyMmExZWI4NzE5OWI1ZTAxYTgyYzBkNCIKKworUFIgPSAicjMiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLm1rdGVtcC5vcmcvcHViL21rdGVtcC8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgZmlsZTovL2Rpc2FibGUtc3RyaXAucGF0Y2ggXAorICAgICAgICBmaWxlOi8vZml4LXBhcmFsbGVsLW1ha2UucGF0Y2ggXAorICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3ODdiYmVkOWZhMmVlOGU3NjQ1NzMzYzBlOGU2NTE3MiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZTk0YjllMWVkZjg2NmIyNjA5NTQ1ZGE2NWI2Mjc5OTZhYzVkMTU4ZmRhMDcxZTQ5MmJkZGIyZjRhNDgyNjc1IgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtbGliYyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJbXYgJHtEfSR7YmluZGlyfS9ta3RlbXAgJHtEfSR7YmFzZV9iaW5kaXJ9L21rdGVtcAorCXJtZGlyICR7RH0ke2JpbmRpcn0KK30KKworQUxURVJOQVRJVkVfJHtQTn0gPSAibWt0ZW1wIgorQUxURVJOQVRJVkVfTElOS19OQU1FW21rdGVtcF0gPSAiJHtiYXNlX2JpbmRpcn0vbWt0ZW1wIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAibWt0ZW1wLjEiCitBTFRFUk5BVElWRV9QUklPUklUWV8ke1BOfS1kb2MgPSAiMzAwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW21rdGVtcC4xXSA9ICIke21hbmRpcn0vbWFuMS9ta3RlbXAuMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21zbXRwL21zbXRwXzEuNi4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbXNtdHAvbXNtdHBfMS42LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjliZjU2MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21zbXRwL21zbXRwXzEuNi4yLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAibXNtdHAgaXMgYW4gU01UUCBjbGllbnQiCitERVNDUklQVElPTiA9ICJBIHNlbmRtYWlsIHJlcGxhY2VtZW50IGZvciB1c2UgaW4gTVRBcyBsaWtlIG11dHQiCitIT01FUEFHRSA9ICJodHRwOi8vbXNtdHAuc291cmNlZm9yZ2UubmV0LyIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorCitMSUNFTlNFID0gIkdQTHYzIgorREVQRU5EUyA9ICJ6bGliIGdudXRscyIKKworI0NPUFlJTkcgb3IgTGljZW5jZQorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9tc210cC9maWxlcy9tc210cC8ke1BWfS8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzYmFjYTkzYzdlNWYxYWE5ZDM2YTJlNWIzODczOWFiOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyZjZlY2Q3Y2JmYWRmNTQ4ZmQ1NTIwNWJkMjRjYjYzYjg0YmNiYjExODVlZmVkOTE3ZGQ3ODAwNTk1YTQ4Nzg5IgorCitpbmhlcml0IGdldHRleHQgYXV0b3Rvb2xzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRob3V0LWxpYnNlY3JldCAtLXdpdGhvdXQtbGliZ3Nhc2wgLS13aXRob3V0LWxpYmlkbiIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAic2VuZG1haWwiCitBTFRFUk5BVElWRV9UQVJHRVRbc2VuZG1haWxdID0gIiR7YmluZGlyfS9tc210cCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzZW5kbWFpbF0gPSAiJHtzYmluZGlyfS9zZW5kbWFpbCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworcGtnX3Bvc3RpbnN0XyR7UE59X2xpbnV4c3RkYmFzZSAoKSB7CisJIyAvdXNyL2xpYi9zZW5kbWlhbCBpcyByZXF1aXJlZCBieSBMU0IgY29yZSB0ZXN0CisJWyAhIC1MICREL3Vzci9saWIvc2VuZG1haWwgXSAmJiBsbiAtc2YgJHtzYmluZGlyfS9zZW5kbWFpbCAkRC91c3IvbGliLworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9pZmNvbmZpZy1pbnRlcmZhY2UtMC1kZWwtSVAtd2lsbC1yZW1vdmUtdGhlLWFsaWFzZWQtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9pZmNvbmZpZy1pbnRlcmZhY2UtMC1kZWwtSVAtd2lsbC1yZW1vdmUtdGhlLWFsaWFzZWQtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZjgxNDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzL2lmY29uZmlnLWludGVyZmFjZS0wLWRlbC1JUC13aWxsLXJlbW92ZS10aGUtYWxpYXNlZC0ucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSA4MTgxNGRjMmIxNDg0MzAwOTE5M2VmZDMwN2Q4MTRjMjZiYWE2MWYwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmlyaSBQb3BlbGthIDxqcG9wZWxrYUByZWRoYXQuY29tPgorRGF0ZTogV2VkLCA3IERlYyAyMDExIDE5OjE0OjA5ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGlmY29uZmlnIGludGVyZmFjZTowIGRlbCA8SVA+IHdpbGwgcmVtb3ZlIHRoZSBhbGlhc2VkIElQIG9uIElBNjQKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitjb21taXQgODE4MTRkYzJiMTQ4NDMwMDkxOTNlZmQzMDdkODE0YzI2YmFhNjFmMCBmcm9tCitnaXQ6Ly9naXQuY29kZS5zZi5uZXQvcC9uZXQtdG9vbHMvY29kZQorCistLS0KKyBpZmNvbmZpZy5jIHwgICAgNCArKystCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvaWZjb25maWcuYyBiL2lmY29uZmlnLmMKK2luZGV4IGJjNDA1YzYuLmRhZTg5MjIgMTAwNjQ0CistLS0gYS9pZmNvbmZpZy5jCisrKysgYi9pZmNvbmZpZy5jCitAQCAtODkwLDcgKzg5MCw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCSAgICBjb250aW51ZTsKKyAJCX0KKyAJCQorLQkJbWVtY3B5KCZpcCwgJnNpbi5zaW5fYWRkci5zX2FkZHIsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisrCQkvKiBDbGVhciAiaXAiIGluIGNhc2Ugc2l6ZW9mKHVuc2lnbmVkIGxvbmcpID4gc2l6ZW9mKHNpbi5zaW5fYWRkci5zX2FkZHIpICovCisrCQlpcCA9IDA7CisrCQltZW1jcHkoJmlwLCAmc2luLnNpbl9hZGRyLnNfYWRkciwgc2l6ZW9mKHNpbi5zaW5fYWRkci5zX2FkZHIpKTsKKyAJCQorIAkJaWYgKGdldF9ubWJjX3BhcmVudChpZnIuaWZyX25hbWUsICZubSwgJmJjKSA8IDApIHsKKyAJCSAgICBmcHJpbnRmKHN0ZGVyciwgXygiSW50ZXJmYWNlICVzIG5vdCBpbml0aWFsaXplZFxuIiksCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9uZXQtdG9vbHMtY29uZmlnLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzL25ldC10b29scy1jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDM5YzJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9uZXQtdG9vbHMtY29uZmlnLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyogY29uZmlnLmgJQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgY29uZmlndXJhdGlvbiBpbmNsdWRlZmlsZQorKgorKiBORVQtVE9PTFMJQSBjb2xsZWN0aW9uIG9mIHByb2dyYW1zIHRoYXQgZm9ybSB0aGUgYmFzZSBzZXQgb2YgdGhlCisqCQlORVQtMyBOZXR3b3JraW5nIERpc3RyaWJ1dGlvbiBmb3IgdGhlIExJTlVYIG9wZXJhdGluZworKgkJc3lzdGVtLgorKgorKgkJRE8gIE5PVCAgRURJVCAgRElSRUNUTFkKKyoKKyovCisKKy8qIAorICogCisgKiBJbnRlcm5hdGlvbmFsaXphdGlvbgorICogCisgKiBUaGUgbmV0LXRvb2xzIHBhY2thZ2UgaGFzIGN1cnJlbnRseSBiZWVuIHRyYW5zbGF0ZWQgdG8gRnJlbmNoLAorICogR2VybWFuIGFuZCBCcmF6aWxpYW4gUG9ydHVnZXNlLiAgT3RoZXIgdHJhbnNsYXRpb25zIGFyZSwgb2YKKyAqIGNvdXJzZSwgd2VsY29tZS4gIEFuc3dlciBgbicgaGVyZSBpZiB5b3UgaGF2ZSBubyBzdXBwb3J0IGZvcgorICogaW50ZXJuYXRpb25hbGl6YXRpb24gb24geW91ciBzeXN0ZW0uCisgKiAKKyAqLworI2RlZmluZSBJMThOIDEKKworLyogCisgKiAKKyAqIFByb3RvY29sIEZhbWlsaWVzLgorICogCisgKi8KKyNkZWZpbmUgSEFWRV9BRlVOSVggMQorI2RlZmluZSBIQVZFX0FGSU5FVCAxCisjZGVmaW5lIEhBVkVfQUZJTkVUNiAxCisjZGVmaW5lIEhBVkVfQUZJUFggMAorI2RlZmluZSBIQVZFX0FGQVRBTEsgMAorI2RlZmluZSBIQVZFX0FGQVgyNSAwCisjZGVmaW5lIEhBVkVfQUZORVRST00gMQorI2RlZmluZSBIQVZFX0FGUk9TRSAwCisjZGVmaW5lIEhBVkVfQUZYMjUgMAorI2RlZmluZSBIQVZFX0FGRUNPTkVUIDAKKyNkZWZpbmUgSEFWRV9BRkRFQ25ldCAwCisjZGVmaW5lIEhBVkVfQUZBU0ggMAorCisvKiAKKyAqIAorICogRGV2aWNlIEhhcmR3YXJlIHR5cGVzLgorICogCisgKi8KKyNkZWZpbmUgSEFWRV9IV0VUSEVSIDEKKyNkZWZpbmUgSEFWRV9IV0FSQyAxCisjZGVmaW5lIEhBVkVfSFdTTElQIDEKKyNkZWZpbmUgSEFWRV9IV1BQUCAxCisjZGVmaW5lIEhBVkVfSFdUVU5ORUwgMQorI2RlZmluZSBIQVZFX0hXU1RSSVAgMAorI2RlZmluZSBIQVZFX0hXVFIgMAorI2RlZmluZSBIQVZFX0hXQVgyNSAwCisjZGVmaW5lIEhBVkVfSFdST1NFIDAKKyNkZWZpbmUgSEFWRV9IV05FVFJPTSAxCisjZGVmaW5lIEhBVkVfSFdYMjUgMAorI2RlZmluZSBIQVZFX0hXRlIgMQorI2RlZmluZSBIQVZFX0hXU0lUIDAKKyNkZWZpbmUgSEFWRV9IV0ZEREkgMAorI2RlZmluZSBIQVZFX0hXSElQUEkgMAorI2RlZmluZSBIQVZFX0hXQVNIIDAKKyNkZWZpbmUgSEFWRV9IV0hETENMQVBCIDAKKyNkZWZpbmUgSEFWRV9IV0lSREEgMQorI2RlZmluZSBIQVZFX0hXRUMgMAorI2RlZmluZSBIQVZFX0hXSUIgMAorCisvKiAKKyAqIAorICogT3RoZXIgRmVhdHVyZXMuCisgKiAKKyAqLworI2RlZmluZSBIQVZFX0ZXX01BU1FVRVJBREUgMQorI2RlZmluZSBIQVZFX0lQX1RPT0xTIDEKKyNkZWZpbmUgSEFWRV9NSUkgMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9uZXQtdG9vbHMtY29uZmlnLm1ha2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzL25ldC10b29scy1jb25maWcubWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzUxNmYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9uZXQtdG9vbHMtY29uZmlnLm1ha2UKQEAgLTAsMCArMSwzNiBAQAorSTE4Tj0xCitIQVZFX0FGVU5JWD0xCitIQVZFX0FGSU5FVD0xCitIQVZFX0FGSU5FVDY9MQorIyBIQVZFX0FGSVBYPTAKKyMgSEFWRV9BRkFUQUxLPTAKKyMgSEFWRV9BRkFYMjU9MAorSEFWRV9BRk5FVFJPTT0xCisjIEhBVkVfQUZST1NFPTAKKyMgSEFWRV9BRlgyNT0wCisjIEhBVkVfQUZFQ09ORVQ9MAorIyBIQVZFX0FGREVDbmV0PTAKKyMgSEFWRV9BRkFTSD0wCitIQVZFX0hXRVRIRVI9MQorSEFWRV9IV0FSQz0xCitIQVZFX0hXU0xJUD0xCitIQVZFX0hXUFBQPTEKK0hBVkVfSFdUVU5ORUw9MQorSEFWRV9IV1NUUklQPTEKK0hBVkVfSFdUUj0xCisjIEhBVkVfSFdBWDI1PTAKKyMgSEFWRV9IV1JPU0U9MAorSEFWRV9IV05FVFJPTT0xCisjIEhBVkVfSFdYMjU9MAorSEFWRV9IV0ZSPTEKKyMgSEFWRV9IV1NJVD0wCisjIEhBVkVfSFdGRERJPTAKKyMgSEFWRV9IV0hJUFBJPTAKKyMgSEFWRV9IV0FTSD0wCisjIEhBVkVfSFdIRExDTEFQQj0wCitIQVZFX0hXSVJEQT0xCisjIEhBVkVfSFdFQz0wCisjIEhBVkVfSFdJQj0wCitIQVZFX0ZXX01BU1FVRVJBREU9MQorSEFWRV9JUF9UT09MUz0xCitIQVZFX01JST0xCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzXzEuNjAtMjYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzXzEuNjAtMjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVmYzFlNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ldC10b29scy9uZXQtdG9vbHNfMS42MC0yNi5iYgpAQCAtMCwwICsxLDg5IEBACitTVU1NQVJZID0gIkJhc2ljIG5ldHdvcmtpbmcgdG9vbHMiCitERVNDUklQVElPTiA9ICJBIGNvbGxlY3Rpb24gb2YgcHJvZ3JhbXMgdGhhdCBmb3JtIHRoZSBiYXNlIHNldCBvZiB0aGUgTkVULTMgbmV0d29ya2luZyBkaXN0cmlidXRpb24gZm9yIHRoZSBMaW51eCBvcGVyYXRpbmcgc3lzdGVtIgorSE9NRVBBR0UgPSAiaHR0cDovL25ldC10b29scy5iZXJsaW9zLmRlLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3MuZGViaWFuLm9yZy9uZXQtdG9vbHMiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PThjYTQzY2JjODQyYzIzMzZlODM1OTI2YzIxNjZjMjhiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2lmY29uZmlnLmM7YmVnaW5saW5lPTExO2VuZGxpbmU9MTU7bWQ1PWQxY2EzNzIwODBhZDU0MDFlMjNjYTBhZmMzNWNmOWJhIgorCitTUkNfVVJJID0gImh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLzIwMDUwMzEyVDAwMDAwMFovcG9vbC9tYWluL24vJHtCUE59LyR7QlBOfV8xLjYwLm9yaWcudGFyLmd6O25hbWU9dGFyYmFsbCBcCisgICAgICAgICAgIGh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLy8yMDE1MDgzMVQwOTMzNDJaL3Bvb2wvbWFpbi9uLyR7QlBOfS8ke0JQTn1fJHtQVn0uZGlmZi5nejthcHBseT1ubztuYW1lPXBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25ldC10b29scy1jb25maWcuaCBcCisgICAgICAgICAgIGZpbGU6Ly9uZXQtdG9vbHMtY29uZmlnLm1ha2UgXAorICAgICAgICAgICBmaWxlOi8vaWZjb25maWctaW50ZXJmYWNlLTAtZGVsLUlQLXdpbGwtcmVtb3ZlLXRoZS1hbGlhc2VkLS5wYXRjaCBcCisJICAgIgorCitTID0gIiR7V09SS0RJUn0vbmV0LXRvb2xzLTEuNjAiCisKK1NSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gImVjYWYzN2FjYjViNWRhZmY0YmRkYTc3Nzg1ZmQ5MTZkIgorU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiZWM2Nzk2N2NmN2IxYTNhMzgyOGE4NDc2MmZiYzAxM2FjNTBlZTVkYzlhYTMwOTVkNWM1OTFmMzAyYzJkZTBmNSIKKworU1JDX1VSSVtwYXRjaC5tZDVzdW1dID0gImVhMzU5MmY0OWFjODM4MDk2MmJjNGQ5YjY2YzdlN2U5IgorU1JDX1VSSVtwYXRjaC5zaGEyNTZzdW1dID0gImFlZWVhZmFmZjY4ODY2YTQ0NmYwMWJiNjM5ZDRlMDE0NmE2MGFmMzRkY2QyMGUzMWEzZTQ2NTg1MDIyZmM3NmMiCisKK2luaGVyaXQgZ2V0dGV4dAorCisjIFRoZSBNYWtlZmlsZSBpcyBsYW1lLCBubyBwYXJhbGxlbCBidWlsZAorUEFSQUxMRUxfTUFLRSA9ICIiCisKKyMgVW5saWtlIG90aGVyIERlYmlhbiBwYWNrYWdlcywgbmV0LXRvb2xzICouZGlmZi5neiBjb250YWlucyBhbm90aGVyIHNlcmllcyBvZgorIyBwYXRjaGVzIG1haW50YWluZWQgYnkgcXVpbHQuIFNvIG1hbnVhbGx5IGFwcGx5IHRoZW0gYmVmb3JlIGFwcGx5aW5nIG90aGVyIGxvY2FsCisjIHBhdGNoZXMuIEFsc28gcmVtb3ZlIGFsbCB0ZW1wIGZpbGVzIGJlZm9yZSBsZWF2aW5nLCBiZWNhdXNlIGRvX3BhdGNoKCkgd2lsbCBwb3AgCisjIHVwIGFsbCBwcmV2aW91c2x5IGFwcGxpZWQgcGF0Y2hlcyBpbiB0aGUgc3RhcnQKK25ldHRvb2xzX2RvX3BhdGNoKCkgeworCWNkICR7U30KKwlxdWlsdCBwb3AgLWEgfHwgdHJ1ZQorCWlmIFsgLWQgJHtTfS8ucGMtbmV0dG9vbHMgXTsgdGhlbgorCQlybSAtcmYgJHtTfS8ucGMKKwkJbXYgJHtTfS8ucGMtbmV0dG9vbHMgJHtTfS8ucGMKKwkJUVVJTFRfUEFUQ0hFUz0ke1N9L2RlYmlhbi9wYXRjaGVzIHF1aWx0IHBvcCAtYQorCQlybSAtcmYgJHtTfS8ucGMgJHtTfS9kZWJpYW4KKwlmaQorCXBhdGNoIC1wMSA8ICR7V09SS0RJUn0vJHtCUE59XyR7UFZ9LmRpZmYJCisJUVVJTFRfUEFUQ0hFUz0ke1N9L2RlYmlhbi9wYXRjaGVzIHF1aWx0IHB1c2ggLWEKKwltdiAke1N9Ly5wYyAke1N9Ly5wYy1uZXR0b29scworfQorCitkb191bnBhY2tbY2xlYW5kaXJzXSArPSAiJHtTfSIKKworIyBXZSBpbnZva2UgYmFzZSBkb19wYXRjaCBhdCBlbmQsIHRvIGluY29ycG9yYXRlIGFueSBsb2NhbCBwYXRjaAorcHl0aG9uIGRvX3BhdGNoKCkgeworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnbmV0dG9vbHNfZG9fcGF0Y2gnLCBkKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygncGF0Y2hfZG9fcGF0Y2gnLCBkKQorfQorCitkb19jb25maWd1cmUoKSB7CisJIyBuZXQtdG9vbHMgaGFzIGl0cyBvd24gY29uZmlnIG1lY2hhbmlzbSByZXF1aXJpbmcgIm1ha2UgY29uZmlnIgorCSMgd2UgcHJlLWdlbmVyYXRlIGRlc2lyZWQgb3B0aW9ucyBhbmQgY29weSB0byBzb3VyY2UgZGlyZWN0b3J5IGluc3RlYWQKKwljcCAke1dPUktESVJ9L25ldC10b29scy1jb25maWcuaCAgICAke1N9L2NvbmZpZy5oCisJY3AgJHtXT1JLRElSfS9uZXQtdG9vbHMtY29uZmlnLm1ha2UgJHtTfS9jb25maWcubWFrZQorfQorCitkb19jb21waWxlKCkgeworCSMgbmV0LXRvb2xzIHVzZSBDT1BUUy9MT1BUUyB0byBhbGxvdyBhZGRpbmcgY3VzdG9tIG9wdGlvbnMKKwlleHBvcnQgQ09QVFM9IiRDRkxBR1MiCisJZXhwb3J0IExPUFRTPSIkTERGTEFHUyIKKwl1bnNldCBDRkxBR1MKKwl1bnNldCBMREZMQUdTCisKKwlvZV9ydW5tYWtlCit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSAnQkFTRURJUj0ke0R9JyBpbnN0YWxsCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitiYXNlX3NiaW5kaXJfcHJvZ3MgPSAiYXJwIGlmY29uZmlnIGlwbWFkZHIgaXB0dW5uZWwgbWlpLXRvb2wgbmFtZWlmIHBsaXBjb25maWcgcmFycCByb3V0ZSBzbGF0dGFjaCIKK2Jhc2VfYmluZGlyX3Byb2dzICA9ICJkbnNkb21haW5uYW1lIGRvbWFpbm5hbWUgaG9zdG5hbWUgbmV0c3RhdCBuaXNkb21haW5uYW1lIHlwZG9tYWlubmFtZSIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiJHtiYXNlX3NiaW5kaXJfcHJvZ3N9ICR7YmFzZV9iaW5kaXJfcHJvZ3N9IgorcHl0aG9uIF9fYW5vbnltb3VzKCkgeworCWZvciBwcm9nIGluIGQuZ2V0VmFyKCdiYXNlX3NiaW5kaXJfcHJvZ3MnLCBUcnVlKS5zcGxpdCgpOgorCQlkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIHByb2csICclcy8lcycgJSAoZC5nZXRWYXIoJ2Jhc2Vfc2JpbmRpcicsIFRydWUpLCBwcm9nKSkKKwlmb3IgcHJvZyBpbiBkLmdldFZhcignYmFzZV9iaW5kaXJfcHJvZ3MnLCBUcnVlKS5zcGxpdCgpOgorCQlkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIHByb2csICclcy8lcycgJSAoZC5nZXRWYXIoJ2Jhc2VfYmluZGlyJywgVHJ1ZSksIHByb2cpKQorfQorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzL2Nyb3NzX2FyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9maWxlcy9jcm9zc19hci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzAwN2FhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9maWxlcy9jcm9zc19hci5wYXRjaApAQCAtMCwwICsxLDU4IEBACitGaXggY3Jvc3MgbGluayB1c2luZyBhdXRvY29uZiBkZXRlY3RlZCBBUgorCitJZiBidWlsZGluZyBvbiAzMmJpdCBob3N0IGFuZCBjcmVhdGluZyA2NGJpdCBsaWJyYXJpZXMsIHRoZSB0YXJnZXQKK3BhY2thZ2UgYnVpbGRzIHNob3VsZCBub3QgaW52b2tlIHRoZSAzMmJpdCBob3N0cydzIGFyLiAgU3BlY2lmaWNhbGx5Cit5b3Ugd2lsbCBnZXQgYW4gZXJyb3IgbWVzc2FnZSBsaWtlOgorCit4ODZfNjQtbGludXgtZ2NjICAgIC1tNjQgLS1zeXNyb290PS9vcHQvcWVtdXg4Ni02NC90bXAvc3lzcm9vdHMvcWVtdXg4Ni02NCAtZyAtbyB0ZXN0IHRlc3QubyBsaWJuZXd0LmEgLVdsLC1PMSAtV2wsLS1oYXNoLXN0eWxlPWdudSAtV2wsLS1hcy1uZWVkZWQgLWxzbGFuZworbGlibmV3dC5hOiBjb3VsZCBub3QgcmVhZCBzeW1ib2xzOiBBcmNoaXZlIGhhcyBubyBpbmRleDsgcnVuIHJhbmxpYiB0byBhZGQgb25lCitjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKworU2lnbmVkLW9mZi1ieTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluICB8IDMgKystCisgY29uZmlndXJlLmFjIHwgNCArKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTcsNiArNyw3IEBAIENGTEFHUyA9IEBDRkxBR1NACisgTERGTEFHUyA9IEBMREZMQUdTQAorIENQUEZMQUdTID0gLURfR05VX1NPVVJDRSBAQ1BQRkxBR1NAIAorIEdOVV9MRCA9IEBHTlVfTERACisrQVIgPSBAQVJACisgCisgVkVSU0lPTiA9IEBWRVJTSU9OQAorIFRBRyA9IHIkKHN1YnN0IC4sLSwkKFZFUlNJT04pKQorQEAgLTEwOSw3ICsxMTAsNyBAQCB3aGlwdGNsLiQoU09FWFQpOiAkKFdISVBUQ0xPQkpTKSAkKExJQk5FV1RTSCkKKyAJJChDQykgLXNoYXJlZCAkKFNIQ0ZMQUdTKSAkKExERkxBR1MpIC1vIHdoaXB0Y2wuJChTT0VYVCkgJChXSElQVENMT0JKUykgLUwuIC1sbmV3dCAgJChMSUJUQ0wpIC1scG9wdCAkKExJQlMpCisgCisgJChMSUJORVdUKTogJChMSUJPQkpTKQorLQlhciBydiAkQCAkXgorKwkkKEFSKSBydiAkQCAkXgorIAorIG5ld3QubyAkKFNIQVJFRERJUikvbmV3dC5vOiBuZXd0LmMgTWFrZWZpbGUKKyAKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDkyZTZkYTguLmNkODNkNTcgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE1LDYgKzE1LDEwIEBAIEFDX1BST0dfSU5TVEFMTAorIEFDX1BST0dfTE5fUworIEFDX1BST0dfR1JFUAorIEFDX1NZU19MQVJHRUZJTEUKKytBTl9NQUtFVkFSKFtBUl0sIFtBQ19QUk9HX0FSXSkKKytBTl9QUk9HUkFNKFthcl0sIFtBQ19QUk9HX0FSXSkKKytBQ19ERUZVTihbQUNfUFJPR19BUl0sIFtBQ19DSEVDS19UT09MKEFSLCBhciwgOildKQorK0FDX1BST0dfQVIKKyAKKyAjIEFyZSB3ZSB1c2luZyBHTlUgbGQ/CisgQUNfTVNHX0NIRUNLSU5HKFtmb3IgR05VIGxkXSkKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzL2ZpeF9TSEFSRURESVIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzL2ZpeF9TSEFSRURESVIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBhMWU4YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvZmlsZXMvZml4X1NIQVJFRERJUi5wYXRjaApAQCAtMCwwICsxLDM3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQXV0aG9yOiBkZXh1YW4uY3VpQGludGVsLmNvbQorRGF0ZTogRnJpIEFwciAxNSAxNjoxNzozOSBDU1QgMjAxMQorCitUaGUgcGF0Y2ggZml4ZXMgYSBwYXJhbGxlbC1tYWtlIGlzc3VlOiB3aGVuIGdlbmVyYXRpbmcgJChTSEFSRURESVIpLyUubywgd2Ugc2hvdWxkCitlbnN1cmUgdGhlIGRpcmVjdG9yeSAke1NIQVJFRERJUn0gZXhpc3RzLgorCitXZSBuZWVkIHRvIHB1c2ggdGhlIHBhdGNoIHRvIHVwc3RyZWFtLgorCitTaWduZWQtb2ZmLWJ5OiBEZXh1YW4gQ3VpIDxkZXh1YW4uY3VpQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTEyOCwxMiArMTI4LDEyIEBAICQoU0hBUkVERElSKToKKyAKKyBzaGFyZWRsaWI6ICQoTElCTkVXVFNIKQorIAorLSQoTElCTkVXVFNIKTogJChTSEFSRURESVIpICQoU0hBUkVET0JKUykKKyskKExJQk5FV1RTSCk6ICQoU0hBUkVET0JKUykKKyAJJChDQykgLXNoYXJlZCAtbyAkKExJQk5FV1RTSCkgJChTSExJQkZMQUdTKSAkKFNIQVJFRE9CSlMpICQoTERGTEFHUykgJChMSUJTKQorIAlsbiAtZnMgJChMSUJORVdUU09OQU1FKSBsaWJuZXd0LiQoU09FWFQpCisgCWxuIC1mcyAkKExJQk5FV1RTSCkgJChMSUJORVdUU09OQU1FKQorIAorLSQoU0hBUkVERElSKS8lLm8gOiAlLmMKKyskKFNIQVJFRERJUikvJS5vIDogJS5jICQoU0hBUkVERElSKQorIAkkKENDKSAkKFNIQ0ZMQUdTKSAtYyAkKENGTEFHUykgJChDUFBGTEFHUykgLW8gJEAgJDwKKyAKKyBpbnN0YWxsOiAkKExJQk5FV1QpIGluc3RhbGwtc2ggd2hpcHRhaWwKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzL3JlbW92ZV9zbGFuZ19pbmNsdWRlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9maWxlcy9yZW1vdmVfc2xhbmdfaW5jbHVkZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjYzNGVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9maWxlcy9yZW1vdmVfc2xhbmdfaW5jbHVkZS5wYXRjaApAQCAtMCwwICsxLDE2IEBACisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ2l0L01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvTWFrZWZpbGUuaW4KKysrKyBnaXQvTWFrZWZpbGUuaW4KK0BAIC01LDcgKzUsNyBAQCBDQyA9IEBDQ0AKKyBDUFAgPSBAQ1BQQAorIENGTEFHUyA9IEBDRkxBR1NACisgTERGTEFHUyA9IEBMREZMQUdTQAorLUNQUEZMQUdTID0gLURfR05VX1NPVVJDRSAtSS91c3IvaW5jbHVkZS9zbGFuZyBAQ1BQRkxBR1NAIAorK0NQUEZMQUdTID0gLURfR05VX1NPVVJDRSBAQ1BQRkxBR1NAIAorIEdOVV9MRCA9IEBHTlVfTERACisgCisgVkVSU0lPTiA9IEBWRVJTSU9OQApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9saWJuZXd0LXB5dGhvbl8wLjUyLjE4LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9saWJuZXd0LXB5dGhvbl8wLjUyLjE4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YTQxYTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3QtcHl0aG9uXzAuNTIuMTguYmIKQEAgLTAsMCArMSwyOSBAQAorcmVxdWlyZSByZWNpcGVzLWV4dGVuZGVkL25ld3QvbGlibmV3dF8ke1BWfS5iYgorCitTVU1NQVJZIC49ICIgLSBweXRob24iCitERVBFTkRTID0gImxpYm5ld3QgcHl0aG9uIgorUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbi1jb3JlIgorCitpbmhlcml0IHB5dGhvbm5hdGl2ZSBweXRob24tZGlyCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLXB5dGhvbiIKK0VYVFJBX09FTUFLRSArPSAiUFlUSE9OVkVSUz0ke1BZVEhPTl9ESVJ9IgorCisKK2RvX2NvbXBpbGUgKCkgeworCVZFUlNJT049IiQoc2VkIC1uICdzL15WRVJTSU9OID0gLy9wJyBNYWtlZmlsZSkiCisJb2VfcnVubWFrZSBfc25hY2suc28KK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtQWVRIT05fRElSfS9fc25hY2suc28gJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LworCWluc3RhbGwgLW0gMDY0NCBzbmFjay5weSAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vCit9CisKK1BBQ0tBR0VTX3JlbW92ZSA9ICJ3aGlwdGFpbCIKKworRklMRVNfJHtQTn0gPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vLmRlYnVnLyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3RfMC41Mi4xOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvbGlibmV3dF8wLjUyLjE4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMmU0MTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3RfMC41Mi4xOC5iYgpAQCAtMCwwICsxLDU2IEBACitTVU1NQVJZID0gIkEgbGlicmFyeSBmb3IgdGV4dCBtb2RlIHVzZXIgaW50ZXJmYWNlcyIKKworREVTQ1JJUFRJT04gPSAiTmV3dCBpcyBhIHByb2dyYW1taW5nIGxpYnJhcnkgZm9yIGNvbG9yIHRleHQgbW9kZSwgd2lkZ2V0IGJhc2VkIHVzZXIgXAoraW50ZXJmYWNlcy4gIE5ld3QgY2FuIGJlIHVzZWQgdG8gYWRkIHN0YWNrZWQgd2luZG93cywgZW50cnkgd2lkZ2V0cywgXAorY2hlY2tib3hlcywgcmFkaW8gYnV0dG9ucywgbGFiZWxzLCBwbGFpbiB0ZXh0IGZpZWxkcywgc2Nyb2xsYmFycywgXAorZXRjLiwgdG8gdGV4dCBtb2RlIHVzZXIgaW50ZXJmYWNlcy4gIFRoaXMgcGFja2FnZSBhbHNvIGNvbnRhaW5zIHRoZSBcCitzaGFyZWQgbGlicmFyeSBuZWVkZWQgYnkgcHJvZ3JhbXMgYnVpbHQgd2l0aCBuZXd0LCBhcyB3ZWxsIGFzIGEgXAorL3Vzci9iaW4vZGlhbG9nIHJlcGxhY2VtZW50IGNhbGxlZCB3aGlwdGFpbC4gIE5ld3QgaXMgYmFzZWQgb24gdGhlIFwKK3NsYW5nIGxpYnJhcnkuIgorCitIT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvbmV3dC8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWYzMGYwNzE2ZGZkZDBkOTFlYjQzOWViZWM1MjJlYzIiCisKKyMgc2xhbmcgbmVlZHMgdG8gYmUgPj0gMi4yCitERVBFTkRTID0gInNsYW5nIHBvcHQiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL3JlbGVhc2VzL24vZS9uZXd0L25ld3QtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZV9zbGFuZ19pbmNsdWRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9TSEFSRURESVIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY3Jvc3NfYXIucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjg1NzIxYmVlMWEzMTg1NzA3MDRiMTlkY2YzMWQyNjgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzcxYjBlNjM0ZWRlNTZhZTZhNmFjZDkxMDcyOGJiNTgzMmFjMTNkZGIwZDFkMjc5MTlkMjQ5OGRhYjcwYzkxZSIKKworUyA9ICIke1dPUktESVJ9L25ld3QtJHtQVn0iCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtdGNsIC0td2l0aG91dC1weXRob24iCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcAorCitDTEVBTkJST0tFTiA9ICIxIgorCitleHBvcnQgU1RBR0lOR19JTkNESVIKK2V4cG9ydCBTVEFHSU5HX0xJQkRJUgorCitleHBvcnQgQlVJTERfU1lTCitleHBvcnQgSE9TVF9TWVMKKworUEFDS0FHRVNfcHJlcGVuZCA9ICJ3aGlwdGFpbCAiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHNoIGF1dG9nZW4uc2gKK30KKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgICMgTWFrZSBzdXJlIHRoZSByZWNvbXBpbGUgaXMgT0sKKyAgICBybSAtZiAke0J9Ly5kZXBlbmQKK30KKworRklMRVNfd2hpcHRhaWwgPSAiJHtiaW5kaXJ9L3doaXB0YWlsIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ3ZTYwOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLmJiCkBAIC0wLDAgKzEsMTYyIEBACisjCisjIENvcHlyaWdodCAoQykgMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbgorIworCitTVU1NQVJZID0gIlN0YW5kYXJkIGZ1bGwtZmVhdHVyZWQgTGludXggc3lzdGVtIgorREVTQ1JJUFRJT04gPSAiUGFja2FnZSBncm91cCBicmluZ2luZyBpbiBwYWNrYWdlcyBuZWVkZWQgZm9yIGEgbW9yZSB0cmFkaXRpb25hbCBmdWxsLWZlYXR1cmVkIExpbnV4IHN5c3RlbSIKK1BSID0gInI2IgorTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKK1BBQ0tBR0VTID0gIlwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1saWJzIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtdXRpbHMgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1leHRlbmRlZCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWRldi11dGlscyBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLW11bHRpdXNlciBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWluaXRzY3JpcHRzIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtc3lzLXNlcnZpY2VzIFwKKyAgICAiCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgIyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYWZ0ZXIgcmVuYW1lCisgICAgbmFtZW1hcCA9IHt9CisgICAgbmFtZW1hcFsicGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lIl0gPSAicGFja2FnZWdyb3VwLWNvcmUtYmFzaWMiCisgICAgbmFtZW1hcFsicGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWxpYnMiXSA9ICJwYWNrYWdlZ3JvdXAtY29yZS1iYXNpYy1saWJzIgorICAgIG5hbWVtYXBbInBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS11dGlscyJdID0gInBhY2thZ2Vncm91cC1jb3JlLWJhc2ljLXV0aWxzIgorICAgIG5hbWVtYXBbInBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1leHRlbmRlZCJdID0gInBhY2thZ2Vncm91cC1jb3JlLWJhc2ljLWV4dGVuZGVkIgorICAgIG5hbWVtYXBbInBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1kZXYtdXRpbHMiXSA9ICJwYWNrYWdlZ3JvdXAtY29yZS1kZXYtdXRpbHMiCisgICAgbmFtZW1hcFsicGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLW11bHRpdXNlciJdID0gInBhY2thZ2Vncm91cC1jb3JlLW11bHRpdXNlciIKKyAgICBuYW1lbWFwWyJwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtaW5pdHNjcmlwdHMiXSA9ICJwYWNrYWdlZ3JvdXAtY29yZS1pbml0c2NyaXB0cyIKKyAgICBuYW1lbWFwWyJwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtc3lzLXNlcnZpY2VzIl0gPSAicGFja2FnZWdyb3VwLWNvcmUtc3lzLXNlcnZpY2VzIgorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcigiUEFDS0FHRVMiLCBUcnVlKS5zcGxpdCgpCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgaWYgcGtnLmVuZHN3aXRoKCctZGV2Jyk6CisgICAgICAgICAgICBtYXBwZWQgPSBuYW1lbWFwLmdldChwa2dbOi00XSwgTm9uZSkKKyAgICAgICAgICAgIGlmIG1hcHBlZDoKKyAgICAgICAgICAgICAgICBtYXBwZWQgKz0gJy1kZXYnCisgICAgICAgIGVsaWYgcGtnLmVuZHN3aXRoKCctZGJnJyk6CisgICAgICAgICAgICBtYXBwZWQgPSBuYW1lbWFwLmdldChwa2dbOi00XSwgTm9uZSkKKyAgICAgICAgICAgIGlmIG1hcHBlZDoKKyAgICAgICAgICAgICAgICBtYXBwZWQgKz0gJy1kYmcnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYXBwZWQgPSBuYW1lbWFwLmdldChwa2csIE5vbmUpCisKKyAgICAgICAgaWYgbWFwcGVkOgorICAgICAgICAgICAgb2xkdGFza25hbWUgPSBtYXBwZWQucmVwbGFjZSgicGFja2FnZWdyb3VwLWNvcmUiLCAidGFzay1jb3JlIikKKyAgICAgICAgICAgIG1hcHN0ciA9ICIgJXMgJXMiICUgKG1hcHBlZCwgb2xkdGFza25hbWUpCisgICAgICAgICAgICBkLmFwcGVuZFZhcigiUlBST1ZJREVTXyVzIiAlIHBrZywgbWFwc3RyKQorICAgICAgICAgICAgZC5hcHBlbmRWYXIoIlJSRVBMQUNFU18lcyIgJSBwa2csIG1hcHN0cikKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCJSQ09ORkxJQ1RTXyVzIiAlIHBrZywgbWFwc3RyKQorfQorCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZSA9ICJcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWxpYnMgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS11dGlscyBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWV4dGVuZGVkIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtZGV2LXV0aWxzIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtbXVsdGl1c2VyIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtaW5pdHNjcmlwdHMgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1zeXMtc2VydmljZXMgXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWxpYnMgPSAiXAorICAgIGdsaWItMi4wIFwKKyAgICAiCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS11dGlscyA9ICJcCisgICAgYmFzaCBcCisgICAgYWNsIFwKKyAgICBhdHRyIFwKKyAgICBiYyBcCisgICAgY29yZXV0aWxzIFwKKyAgICBjcGlvIFwKKyAgICBlMmZzcHJvZ3MgXAorICAgIGVkIFwKKyAgICBmaWxlIFwKKyAgICBmaW5kdXRpbHMgXAorICAgIGdhd2sgXAorICAgIGdtcCBcCisgICAgZ3JlcCBcCisgICAgbWFrZWRldnMgXAorICAgIG1jIFwKKyAgICBtYy1maXNoIFwKKyAgICBtYy1oZWxwZXJzIFwKKyAgICBtYy1oZWxwZXJzLXBlcmwgXAorICAgIG1jLWhlbHBlcnMtcHl0aG9uIFwKKyAgICBta3RlbXAgXAorICAgIG5jdXJzZXMgXAorICAgIG5ldC10b29scyBcCisgICAgcGF4IFwKKyAgICBwb3B0IFwKKyAgICBwcm9jcHMgXAorICAgIHBzbWlzYyBcCisgICAgc2VkIFwKKyAgICB0YXIgXAorICAgIHRpbWUgXAorICAgIHV0aWwtbGludXggXAorICAgIHpsaWIgXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWV4dGVuZGVkID0gIlwKKyAgICBpcHJvdXRlMiBcCisgICAgaXB1dGlscyBcCisgICAgaXB0YWJsZXMgXAorICAgIG1vZHVsZS1pbml0LXRvb2xzIFwKKyAgICBvcGVuc3NsIFwKKyAgICAiCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1kZXYtdXRpbHMgPSAiXAorICAgIGJ5YWNjIFwKKyAgICBkaWZmdXRpbHMgXAorICAgIG00IFwKKyAgICBtYWtlIFwKKyAgICBwYXRjaCBcCisgICAgIgorCitWSVJUVUFMLVJVTlRJTUVfaW5pdHNjcmlwdHMgPz0gImluaXRzY3JpcHRzIgorVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciA/PSAic3lzdmluaXQiCitWSVJUVUFMLVJVTlRJTUVfbG9naW5fbWFuYWdlciA/PSAiYnVzeWJveCIKK1ZJUlRVQUwtUlVOVElNRV9zeXNsb2cgPz0gInN5c2tsb2dkIgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWluaXRzY3JpcHRzID0gIlwKKyAgICAke1ZJUlRVQUwtUlVOVElNRV9pbml0c2NyaXB0c30gXAorICAgICR7VklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlcn0gXAorICAgIGV0aHRvb2wgXAorICAgICR7VklSVFVBTC1SVU5USU1FX2xvZ2luX21hbmFnZXJ9IFwKKyAgICAke1ZJUlRVQUwtUlVOVElNRV9zeXNsb2d9IFwKKyAgICAiCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1tdWx0aXVzZXIgPSAiXAorICAgIGNyYWNrbGliIFwKKyAgICBnemlwIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdsaWJ1c2VyJywgJycsIGQpfSBcCisgICAgc2hhZG93IFwKKyAgICBzdWRvIFwKKyAgICAiCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1zeXMtc2VydmljZXMgPSAiXAorICAgIGF0IFwKKyAgICBiemlwMiBcCisgICAgY3JvbmllIFwKKyAgICBkYnVzIFwKKyAgICBkYnVzLWdsaWIgXAorICAgIHB5dGhvbi1kYnVzIFwKKyAgICBlbGZ1dGlscyBcCisgICAgZ3ppcCBcCisgICAgbGVzcyBcCisgICAgbGliY2FwIFwKKyAgICBsaWJldmVudCBcCisgICAgbG9ncm90YXRlIFwKKyAgICBuZnMtdXRpbHMgXAorICAgIHBjaXV0aWxzIFwKKyAgICBsaWJwY3JlIFwKKyAgICBycGNiaW5kIFwKKyAgICBzeXNmc3V0aWxzIFwKKyAgICB0Y3Atd3JhcHBlcnMgXAorICAgIHR6ZGF0YSBcCisgICAgIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWxzYi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtbHNiLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlODIzODUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWxzYi5iYgpAQCAtMCwwICsxLDI3OCBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKworU1VNTUFSWSA9ICJMaW51eCBTdGFuZGFyZCBCYXNlIChMU0IpIgorREVTQ1JJUFRJT04gPSAiUGFja2FnZXMgcmVxdWlyZWQgdG8gc2F0aXNmeSB0aGUgTGludXggU3RhbmRhcmQgQmFzZSAoTFNCKSBzcGVjaWZpY2F0aW9uIgorUFIgPSAicjEwIgorTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBsaWJ4dCwgbGlieHRzdCBhbmQgb3RoZXJzIHJlcXVpcmUgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworIworIyBXZSB3aWxsIHNraXAgcGFyc2luZyB0aGlzIHBhY2thZ2VnZW91cCBmb3Igbm9uLWdsaWJjIHN5c3RlbXMKKyMKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgaWYgZC5nZXRWYXIoJ1RDTElCQycsIFRydWUpICE9ICJnbGliYyI6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJpbmNvbXBhdGlibGUgd2l0aCAlcyBDIGxpYnJhcnkiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ1RDTElCQycsIFRydWUpKQorfQorCitQQUNLQUdFUyA9ICJcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1zeXMtZXh0ZW5kZWQgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWRiIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1wZXJsIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1weXRob24gXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLXRjbCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLW1pc2MgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWxzYi1jb3JlIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2ItcGVybCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLXB5dGhvbiBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLWRlc2t0b3AgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWxzYi1ydW50aW1lLWFkZCBcCisgICAgIgorCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWxzYiA9ICJcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtc3lzLWV4dGVuZGVkIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1kYiBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtcGVybCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtcHl0aG9uIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS10Y2wgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWxzYi1taXNjIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2ItY29yZSBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLXBlcmwgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWxzYi1weXRob24gXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWxzYi1kZXNrdG9wIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2ItcnVudGltZS1hZGQgXAorICAgICIKKworCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1zeXMtZXh0ZW5kZWQgPSAiXAorICAgIGN1cmwgXAorICAgIGRoY3AtY2xpZW50IFwKKyAgICBoZHBhcm0gXAorICAgIGxpZ2h0dHBkIFwKKyAgICBsaWJhaW8gXAorICAgIGxyenN6IFwKKyAgICBsem8gXAorICAgIG1jIFwKKyAgICBtYy1maXNoIFwKKyAgICBtYy1oZWxwZXJzIFwKKyAgICBtYy1oZWxwZXJzLXBlcmwgXAorICAgIG1jLWhlbHBlcnMtcHl0aG9uIFwKKyAgICBtZGFkbSBcCisgICAgbWluaWNvbSBcCisgICAgbmVvbiBcCisgICAgcGFydGVkIFwKKyAgICAke1BUSH0gXAorICAgIHF1b3RhIFwKKyAgICBzY3JlZW4gXAorICAgIHNldHNlcmlhbCBcCisgICAgc3lzc3RhdCBcCisgICAgdWRldi1leHRyYWNvbmYgXAorICAgIHVuemlwIFwKKyAgICB3YXRjaGRvZyBcCisgICAgd2dldCBcCisgICAgd2hpY2ggXAorICAgIHhpbmV0ZCBcCisgICAgemlwIFwKKyAgICAiCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWRiID0gIlwKKyAgICBkYiBcCisgICAgc3FsaXRlMyBcCisgICAgIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1wZXJsID0gIlwKKyAgICBnZGJtIFwKKyAgICBwZXJsIFwKKyAgICB6bGliIFwKKyAgICAiCisKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtcHl0aG9uID0gIlwKKyAgICBleHBhdCBcCisgICAgZ2RibSBcCisgICAgZ21wIFwKKyAgICBuY3Vyc2VzIFwKKyAgICBvcGVuc3NsIFwKKyAgICBweXRob24gXAorICAgIHJlYWRsaW5lIFwKKyAgICB6aXAgXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtdGNsID0gIlwKKyAgICB0Y2wgXAorICAgICIKKworIyBNaXNjZWxsYW5lb3VzIHBhY2thZ2VzIHJlcXVpcmVkIGJ5IExTQiAob3IgTFNCIHRlc3RzKQorUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtbHNiLW1pc2MgPSAiXAorICAgIGNoa2NvbmZpZyBcCisgICAgZ2V0dGV4dCBcCisgICAgZ2V0dGV4dC1ydW50aW1lIFwKKyAgICBncm9mZiBcCisgICAgbHNiaW5pdHNjcmlwdHMgXAorICAgIGxzYnRlc3QgXAorICAgIGxzb2YgXAorICAgIHN0cmFjZSBcCisgICAgbGlidXNiMSBcCisgICAgdXNidXRpbHMgXAorICAgIHJwbSBcCisgICAgIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1jb3JlID0gIkxTQiBDb3JlIgorREVTQ1JJUFRJT05fcGFja2FnZWdyb3VwLWNvcmUtbHNiLWNvcmUgPSAiUGFja2FnZXMgcmVxdWlyZWQgdG8gc3VwcG9ydCBjb21tYW5kcy9saWJyYXJpZXMgXAorICAgIHNwZWNpZmllZCBpbiB0aGUgTFNCIENvcmUgc3BlY2lmaWNhdGlvbiIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1jb3JlID0gIlwKKyAgICBhdCBcCisgICAgYmFzaCBcCisgICAgYmMgXAorICAgIGJpbnV0aWxzIFwKKyAgICBiaW51dGlscy1zeW1saW5rcyBcCisgICAgY29yZXV0aWxzIFwKKyAgICBjcGlvIFwKKyAgICBjcm9uaWUgXAorICAgIGN1cHMgXAorICAgIGRpZmZ1dGlscyBcCisgICAgZWQgXAorICAgIGdsaWJjLXV0aWxzIFwKKyAgICBlbGZ1dGlscyBcCisgICAgZmlsZSBcCisgICAgZmluZHV0aWxzIFwKKyAgICBmb250Y29uZmlnLXV0aWxzIFwKKyAgICBmb29tYXRpYy1maWx0ZXJzIFwKKyAgICBnYXdrIFwKKyAgICBnaG9zdHNjcmlwdCBcCisgICAgZ3JlcCBcCisgICAgZ3ppcCBcCisgICAgbG9jYWxlZGVmIFwKKyAgICBsc2IgXAorICAgIG00IFwKKyAgICBtYWlseCBcCisgICAgbWFrZSBcCisgICAgbWFuIFwKKyAgICBtYW4tcGFnZXMgXAorICAgIG1rdGVtcCBcCisgICAgbXNtdHAgXAorICAgIHBhdGNoIFwKKyAgICBwYXggXAorICAgIHByb2NwcyBcCisgICAgcHNtaXNjIFwKKyAgICBzZWQgXAorICAgIHNoYWRvdyBcCisgICAgdGFyIFwKKyAgICB0aW1lIFwKKyAgICB1dGlsLWxpbnV4IFwKKyAgICB4ZGctdXRpbHMgXAorICAgIFwKKyAgICBnbGliYyBcCisgICAgbGliZ2NjIFwKKyAgICBsaWJwYW0gXAorICAgIGxpYnhtbDIgXAorICAgIG5jdXJzZXMgXAorICAgIHpsaWIgXAorICAgIG5zcHIgXAorICAgIGxpYnBuZzEyIFwKKyAgICBuc3MgXAorIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1wZXJsID0gIkxTQiBSdW50aW1lIExhbmd1YWdlcyAoUGVybCkiCitERVNDUklQVElPTl9wYWNrYWdlZ3JvdXAtY29yZS1sc2ItcGVybCA9ICJQYWNrYWdlcyByZXF1aXJlZCB0byBzdXBwb3J0IGxpYnJhcmllcyBcCisgICAgc3BlY2lmaWVkIGluIHRoZSBMU0IgUnVudGltZSBsYW5ndWFnZXMgc3BlY2lmaWNhdGlvbiAoUGVybCBwYXJ0cykiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1sc2ItcGVybCA9ICJcCisgICAgcGVybCBcCisgICAgcGVybC1tb2R1bGVzIFwKKyAgICBwZXJsLW1pc2MgXAorICAgIHBlcmwtcG9kIFwKKyAgICBwZXJsLWRldiBcCisgICAgcGVybC1kb2MgXAorIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1weXRob24gPSAiTFNCIFJ1bnRpbWUgTGFuZ3VhZ2VzIChQeXRob24pIgorREVTQ1JJUFRJT05fcGFja2FnZWdyb3VwLWNvcmUtbHNiLXB5dGhvbiA9ICJQYWNrYWdlcyByZXF1aXJlZCB0byBzdXBwb3J0IGxpYnJhcmllcyBcCisgICAgc3BlY2lmaWVkIGluIHRoZSBMU0IgUnVudGltZSBsYW5ndWFnZXMgc3BlY2lmaWNhdGlvbiAoUHl0aG9uIHBhcnRzKSIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1weXRob24gPSAiXAorICAgIHB5dGhvbiBcCisgICAgcHl0aG9uLW1vZHVsZXMgXAorICAgIHB5dGhvbi1taXNjIFwKKyIKKworZGVmIGdldF9saWJxdDMoZCk6CisgICAgaWYgJ2xpbnV4c3RkYmFzZScgaW4gZC5nZXRWYXIoJ0RJU1RST09WRVJSSURFUycsIEZhbHNlKSBvciAiIjoKKyAgICAgICAgaWYgJ3F0MycgaW4gZC5nZXRWYXIoJ0JCRklMRV9DT0xMRUNUSU9OUycsIEZhbHNlKSBvciAiIjoKKyAgICAgICAgICAgIHJldHVybiAnbGlicXQtbXQzJworCisgICAgICAgIGJiLndhcm4oJ1RoZSBtZXRhLXF0MyBsYXllciBzaG91bGQgYmUgYWRkZWQsIHRoaXMgbGF5ZXIgcHJvdmlkZXMgUXQgMy54JyBcCisgICAgICAgICAgICAgICAgJ2xpYnJhcmllcy4gSXRzIGludGVuZGVkIHVzZSBpcyBmb3IgcGFzc2luZyBMU0IgdGVzdHMgYXMgUXQzIGlzJyBcCisgICAgICAgICAgICAgICAgJ2EgcmVxdWlyZW1lbnQgZm9yIExTQi4nKQorICAgIHJldHVybiAnJworCitRVDRQS0dTID0gIiBcCisgICAgbGlicXRjb3JlNCBcCisgICAgbGlicXRndWk0IFwKKyAgICBsaWJxdHNxbDQgXAorICAgIGxpYnF0c3ZnNCBcCisgICAgbGlicXR4bWw0IFwKKyAgICBsaWJxdG5ldHdvcms0IFwKKyAgICBxdDQtcGx1Z2luLXNxbGRyaXZlci1zcWxpdGUgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAib3BlbmdsIiwgImxpYnF0b3BlbmdsNCIsICIiLCBkKX0gXAorICAgICIKK1FUNFBLR1NfbWlwczY0ID0gIiIKK1FUNFBLR1NfbWlwczY0bjMyID0gIiIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtY29yZS1sc2ItZGVza3RvcCA9ICJMU0IgRGVza3RvcCIKK0RFU0NSSVBUSU9OX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1kZXNrdG9wID0gIlBhY2thZ2VzIHJlcXVpcmVkIHRvIHN1cHBvcnQgbGlicmFyaWVzIFwKKyAgICBzcGVjaWZpZWQgaW4gdGhlIExTQiBEZXNrdG9wIHNwZWNpZmljYXRpb24iCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1sc2ItZGVza3RvcCA9ICJcCisgICAgbGlieHQgXAorICAgIGxpYnh4Zjg2dm0gXAorICAgIGxpYmRybSBcCisgICAgbGliZ2x1IFwKKyAgICBsaWJ4aSBcCisgICAgbGlieHRzdCBcCisgICAgbGlieDExLWxvY2FsZSBcCisgICAgeG9yZy1taW5pbWFsLWZvbnRzIFwKKyAgICBnZGstcGl4YnVmLWxvYWRlci1pY28gXAorICAgIGdkay1waXhidWYtbG9hZGVyLWJtcCBcCisgICAgZ2RrLXBpeGJ1Zi1sb2FkZXItYW5pIFwKKyAgICBnZGstcGl4YnVmLXhsaWIgXAorICAgIGxpYmVyYXRpb24tZm9udHMgXAorICAgIGd0aysgXAorICAgIGF0ayBcCisgICAgbGliYXNvdW5kIFwKKyAgICAke1FUNFBLR1N9IFwKKyAgICAke0BnZXRfbGlicXQzKGQpfSBcCisiCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1ydW50aW1lLWFkZCA9ICJcCisgICAgbGRkIFwKKyAgICBwYW0tcGx1Z2luLXdoZWVsIFwKKyAgICBlMmZzcHJvZ3MtbWtlMmZzIFwKKyAgICBta2ZvbnRkaXIgXAorICAgIGxpYnVyaS1wZXJsIFwKKyAgICBsaWJ4bWwtcGFyc2VyLXBlcmwgXAorICAgIGxpYnhtbC1wZXJsIFwKKyAgICBsaWJ4bWwtc2F4LXBlcmwgXAorICAgIGdsaWJjLWxvY2FsZWRhdGFzIFwKKyAgICBnbGliYy1nY29udnMgXAorICAgIGdsaWJjLWNoYXJtYXBzIFwKKyAgICBnbGliYy1iaW5hcmllcyBcCisgICAgZ2xpYmMtbG9jYWxlZGF0YS1wb3NpeCBcCisgICAgZ2xpYmMtZXh0cmEtbnNzIFwKKyAgICBnbGliYy1wY3Byb2ZpbGUgXAorICAgIGxpYmNsYXNzLWlzYS1wZXJsIFwKKyAgICBsaWJlbnYtcGVybCBcCisgICAgbGliZHVtcHZhbHVlLXBlcmwgXAorICAgIGxpYmZpbGUtY2hlY2t0cmVlLXBlcmwgXAorICAgIGxpYmkxOG4tY29sbGF0ZS1wZXJsIFwKKyAgICBsaWJwb2QtcGxhaW5lci1wZXJsIFwKKyIKKworUFRIID0gInB0aCIKK1BUSF9saWJjLXVjbGliYyA9ICIiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vOTlfcGFtIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS85OV9wYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdlOTkwZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vOTlfcGFtCkBAIC0wLDAgKzEgQEAKK2Qgcm9vdCByb290IDA3NTUgL3Zhci9ydW4vc2VwZXJtaXQgbm9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9jcnlwdF9jb25maWd1cmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL2NyeXB0X2NvbmZpZ3VyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWM4MmE1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9jcnlwdF9jb25maWd1cmUucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorVGhpcyBwYXRjaCBmaXhlcyBhIGNhc2Ugd2hlcmUgaXQgZmluZCBjcnlwdCBkZWZpbmVkIGluIGxpYmMgKG11c2wpIGJ1dAorbm90IGluIHNwZWNpZmllZCBsaWJyYXJpZXMgdGhlbiBpdCBlbmRzIHVwIGFzc2lnbmluZworCitMSUJDUllQVD0iLWwiIHdoaWNoIHRoZW4gZ29lcyBpbnRvIG1ha2VmaWxlIGNhdXNlIGFsbCBzb3J0IG9mIHByb2JsZW1zCitlLmcuCisKK2xkOiBjYW5ub3QgZmluZCAtbC1tMzIKK3wgY29sbGVjdDI6IGVycm9yOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCisKK1RoZSByZWFzb24gaXMgdGhhdCAtbCBhcHBlYXJzIG9uIGNvbW1hbmRsaW5lIHdpdGggb3V0IGFueSBsaWJyYXJ5IGFuZAorY29tcGlsZXIgdHJlYXRzIHRoZSBuZXh0IGFyZ3VtZW50IGFzIGxpYnJhcnkgbmFtZSB3aGF0ZXZlciBpdCBpcy4KKworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBMaW51eC1QQU0tMS4xLjYvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gTGludXgtUEFNLTEuMS42Lm9yZy9jb25maWd1cmUuYWMKKysrKyBMaW51eC1QQU0tMS4xLjYvY29uZmlndXJlLmFjCitAQCAtNDAwLDcgKzQwMCw5IEBAIEFTX0lGKFt0ZXN0ICJ4JGFjX2N2X2hlYWRlcl94Y3J5cHRfaCIgPQorICAgW2NyeXB0X2xpYnM9ImNyeXB0Il0pCisgCisgQkFDS1VQX0xJQlM9JExJQlMKKy1BQ19TRUFSQ0hfTElCUyhbY3J5cHRdLFskY3J5cHRfbGlic10sIExJQkNSWVBUPSItbCRhY19saWIiLCBMSUJDUllQVD0iIikKKytBQ19TRUFSQ0hfTElCUyhbY3J5cHRdLFskY3J5cHRfbGlic10sCisrCSAgICAgICBbdGVzdCAiJGFjX2N2X3NlYXJjaF9jcnlwdCIgPSAibm9uZSByZXF1aXJlZCIgfHwKKysJCUxJQkNSWVBUPSIkYWNfY3Zfc2VhcmNoX2NyeXB0Il0pCisgQUNfQ0hFQ0tfRlVOQ1MoY3J5cHRfciBjcnlwdF9nZW5zYWx0X3IpCisgTElCUz0kQkFDS1VQX0xJQlMKKyBBQ19TVUJTVChMSUJDUllQVCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vZml4c2VwYnVpbGQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL2ZpeHNlcGJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhOWMzYjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL2ZpeHNlcGJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK0ZpeCB0aGUgYnVpbGQgZXJyb3Igd2hlbiBhIHNlcGFyYXRlIGJ1aWxkIGRpcmVjdG9yeSBpcyB1c2VkOgorCitNYWtpbmcgaW5zdGFsbCBpbiB4dGVzdHNtYWtlWzFdOiBFbnRlcmluZyBkaXJlY3RvcnkgYC9tZWRpYS9idWlsZDEvcG9reS9idWlsZDEvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2xpYnBhbS8xLjEuNi1yMi9idWlsZC94dGVzdHMnL3Vzci9iaW4vaW5zdGFsbCAtYyAtZCAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQxL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9saWJwYW0vMS4xLjYtcjIvaW1hZ2UvdXNyL3NoYXJlL0xpbnV4LVBBTS94dGVzdHNmb3IgZmlsZSBpbiBydW4teHRlc3RzLnNoIHRzdC1wYW1fZGlzcGF0Y2gxLnBhbWQgdHN0LXBhbV9kaXNwYXRjaDIucGFtZCB0c3QtcGFtX2Rpc3BhdGNoMy5wYW1kIHRzdC1wYW1fZGlzcGF0Y2g0LnBhbWQgdHN0LXBhbV9kaXNwYXRjaDUucGFtZCB0c3QtcGFtX2NyYWNrbGliMS5wYW1kIHRzdC1wYW1fY3JhY2tsaWIyLnBhbWQgdHN0LXBhbV91bml4MS5wYW1kIHRzdC1wYW1fdW5peDIucGFtZCB0c3QtcGFtX3VuaXgzLnBhbWQgdHN0LXBhbV91bml4NC5wYW1kIHRzdC1wYW1fdW5peDEuc2ggdHN0LXBhbV91bml4Mi5zaCB0c3QtcGFtX3VuaXgzLnNoIHRzdC1wYW1fdW5peDQuc2ggYWNjZXNzLmNvbmYgdHN0LXBhbV9hY2Nlc3MxLnBhbWQgdHN0LXBhbV9hY2Nlc3MxLnNoIHRzdC1wYW1fYWNjZXNzMi5wYW1kIHRzdC1wYW1fYWNjZXNzMi5zaCB0c3QtcGFtX2FjY2VzczMucGFtZCB0c3QtcGFtX2FjY2VzczMuc2ggdHN0LXBhbV9hY2Nlc3M0LnBhbWQgdHN0LXBhbV9hY2Nlc3M0LnNoIGxpbWl0cy5jb25mIHRzdC1wYW1fbGltaXRzMS5wYW1kIHRzdC1wYW1fbGltaXRzMS5zaCB0c3QtcGFtX3N1Y2NlZWRfaWYxLnBhbWQgdHN0LXBhbV9zdWNjZWVkX2lmMS5zaCBncm91cC5jb25mIHRzdC1wYW1fZ3JvdXAxLnBhbWQgdHN0LXBhbV9ncm91cDEuc2ggdHN0LXBhbV9hdXRoZmFpbC5wYW1kIHRzdC1wYW1fYXV0aHN1Y2NlZWQucGFtZCB0c3QtcGFtX3N1YnN0YWNrMS5wYW1kIHRzdC1wYW1fc3Vic3RhY2sxYS5wYW1kIHRzdC1wYW1fc3Vic3RhY2sxLnNoIHRzdC1wYW1fc3Vic3RhY2syLnBhbWQgdHN0LXBhbV9zdWJzdGFjazJhLnBhbWQgdHN0LXBhbV9zdWJzdGFjazIuc2ggdHN0LXBhbV9zdWJzdGFjazMucGFtZCB0c3QtcGFtX3N1YnN0YWNrM2EucGFtZCB0c3QtcGFtX3N1YnN0YWNrMy5zaCB0c3QtcGFtX3N1YnN0YWNrNC5wYW1kIHRzdC1wYW1fc3Vic3RhY2s0YS5wYW1kIHRzdC1wYW1fc3Vic3RhY2s0LnNoIHRzdC1wYW1fc3Vic3RhY2s1LnBhbWQgdHN0LXBhbV9zdWJzdGFjazVhLnBhbWQgdHN0LXBhbV9zdWJzdGFjazUuc2ggdHN0LXBhbV9hc3NlbWJsZV9saW5lMS5wYW1kIHRzdC1wYW1fYXNzZW1ibGVfbGluZTEuc2ggdHN0LXBhbV9wd2hpc3RvcnkxLnBhbWQgdHN0LXBhbV9wd2hpc3RvcnkxLnNoIHRzdC1wYW1fdGltZTEucGFtZCB0aW1lLmNvbmYgOyBkbyBcL3Vzci9iaW4vaW5zdGFsbCAtYyAkZmlsZSAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQxL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9saWJwYW0vMS4xLjYtcjIvaW1hZ2UvdXNyL3NoYXJlL0xpbnV4LVBBTS94dGVzdHMgOyBcCWRvbmUKKy91c3IvYmluL2luc3RhbGw6IGNhbm5vdCBzdGF0IGBydW4teHRlc3RzLnNoJzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorL3Vzci9iaW4vaW5zdGFsbDogY2Fubm90IHN0YXQgYHRzdC1wYW1fZGlzcGF0Y2gxLnBhbWQnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisvdXNyL2Jpbi9pbnN0YWxsOiBjYW5ub3Qgc3RhdCBgdHN0LXBhbV9kaXNwYXRjaDIucGFtZCc6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JQIDIwMTMvMDMvMjEKKworSW5kZXg6IExpbnV4LVBBTS0xLjEuNi94dGVzdHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBMaW51eC1QQU0tMS4xLjYub3JpZy94dGVzdHMvTWFrZWZpbGUuYW0JMjAxMy0wMy0wOCAxMjoyNjozMC4zNjAyNjYwMDAgKzAwMDAKKysrKyBMaW51eC1QQU0tMS4xLjYveHRlc3RzL01ha2VmaWxlLmFtCTIwMTMtMDMtMjEgMTE6Mzk6NTguNTU3MTY2NjUwICswMDAwCitAQCAtNTksNyArNTksNyBAQAorIGluc3RhbGxfeHRlc3RzOgorIAkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKHBrZ2RhdGFkaXIpL3h0ZXN0cworIAlmb3IgZmlsZSBpbiAkKEVYVFJBX0RJU1QpIDsgZG8gXAorLQkJJChJTlNUQUxMKSAkJGZpbGUgJChERVNURElSKSQocGtnZGF0YWRpcikveHRlc3RzIDsgXAorKwkJJChJTlNUQUxMKSAkKHNyY2RpcikvJCRmaWxlICQoREVTVERJUikkKHBrZ2RhdGFkaXIpL3h0ZXN0cyA7IFwKKyAJZG9uZQorIAlmb3IgZmlsZSBpbiAkKFhURVNUUyk7IGRvIFwKKyAJCSQoSU5TVEFMTCkgLmxpYnMvJCRmaWxlICQoREVTVERJUikkKHBrZ2RhdGFkaXIpL3h0ZXN0cyA7IFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vbGlicGFtLXh0ZXN0cy1yZW1vdmUtYmFzaC1kZXBlbmRlbmN5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9saWJwYW0teHRlc3RzLXJlbW92ZS1iYXNoLWRlcGVuZGVuY3kucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgwMDI5YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vbGlicGFtLXh0ZXN0cy1yZW1vdmUtYmFzaC1kZXBlbmRlbmN5LnBhdGNoCkBAIC0wLDAgKzEsMjI2IEBACitGcm9tIDU1NTQwN2ZmNmUyZjc0MmRmNjRhZTkzODU5ZjE0YTBmYzEzOTc4MjkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMTIgU2VwIDIwMTQgMDU6MzU6MDUgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gbGlicGFtL3h0ZXN0czogcmVtb3ZlIGJhc2ggZGVwZW5kZW5jeQorCitUaGVyZSdzIG5vdCBiYXNoIHNwZWNpZmljIHN5bnRheCBpbiB0aGUgeHRlc3Qgc2NyaXB0czoKKworICAjIGFmdGVyIGJlbG93IHBhdGNoZXMgYXBwbGllZDoKKyAgJCBjZCBMaW51eC1QQU0tMS4xLjYveHRlc3RzCisgICQgY2hlY2tiYXNoaXNtcyAqLnNoCisgIE5vIG91dHB1dAorCitKdXN0IHJlbW92ZSB0aGUgcnVudGltZSBkZXBlbmRlbmN5IHRvIGJhc2guCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHh0ZXN0cy9ydW4teHRlc3RzLnNoICAgICAgICAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX2FjY2VzczEuc2ggICAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX2FjY2VzczIuc2ggICAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX2FjY2VzczMuc2ggICAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX2FjY2VzczQuc2ggICAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX2Fzc2VtYmxlX2xpbmUxLnNoIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX2dyb3VwMS5zaCAgICAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX2xpbWl0czEuc2ggICAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX3B3aGlzdG9yeTEuc2ggICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMS5zaCAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMi5zaCAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMy5zaCAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX3N1YnN0YWNrNC5zaCAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX3N1YnN0YWNrNS5zaCAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX3N1Y2NlZWRfaWYxLnNoICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX3VuaXgxLnNoICAgICAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX3VuaXgyLnNoICAgICAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX3VuaXgzLnNoICAgICAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX3VuaXg0LnNoICAgICAgICAgIHwgICAgMiArLQorIDE5IGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEveHRlc3RzL3J1bi14dGVzdHMuc2ggYi94dGVzdHMvcnVuLXh0ZXN0cy5zaAoraW5kZXggM2E4OTA1Ny4uMWNmODY4NCAxMDA3NTUKKy0tLSBhL3h0ZXN0cy9ydW4teHRlc3RzLnNoCisrKysgYi94dGVzdHMvcnVuLXh0ZXN0cy5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyBTUkNESVI9JDEKKyBzaGlmdCAxCitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fYWNjZXNzMS5zaCBiL3h0ZXN0cy90c3QtcGFtX2FjY2VzczEuc2gKK2luZGV4IDE4MGQyNTYuLjcwNTIxZDIgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV9hY2Nlc3MxLnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV9hY2Nlc3MxLnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIC91c3Ivc2Jpbi9ncm91cGFkZCB0c3RwYW1hY2Nlc3MKKyAvdXNyL3NiaW4vdXNlcmFkZCAtRyB0c3RwYW1hY2Nlc3MgLXAgJyEhJyB0c3RwYW1hY2Nlc3MxCitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fYWNjZXNzMi5zaCBiL3h0ZXN0cy90c3QtcGFtX2FjY2VzczIuc2gKK2luZGV4IDBhMzAyNzUuLjdlM2U2MGYgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV9hY2Nlc3MyLnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV9hY2Nlc3MyLnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIC91c3Ivc2Jpbi9ncm91cGFkZCB0c3RwYW1hY2Nlc3MKKyAvdXNyL3NiaW4vdXNlcmFkZCAtcCAnISEnIHRzdHBhbWFjY2VzczIKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9hY2Nlc3MzLnNoIGIveHRlc3RzL3RzdC1wYW1fYWNjZXNzMy5zaAoraW5kZXggMzQ4ZTBjMy4uMzYzMGUyZSAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX2FjY2VzczMuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX2FjY2VzczMuc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgL3Vzci9zYmluL3VzZXJhZGQgLXAgJyEhJyB0c3RwYW1hY2Nlc3MzCisgLi90c3QtcGFtX2FjY2VzczMKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9hY2Nlc3M0LnNoIGIveHRlc3RzL3RzdC1wYW1fYWNjZXNzNC5zaAoraW5kZXggNjFlN2I0NC4uNDUzOGRmNCAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX2FjY2VzczQuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX2FjY2VzczQuc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgL3Vzci9zYmluL3VzZXJhZGQgLXAgJyEhJyB0c3RwYW1hY2Nlc3M0CisgLi90c3QtcGFtX2FjY2VzczQKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9hc3NlbWJsZV9saW5lMS5zaCBiL3h0ZXN0cy90c3QtcGFtX2Fzc2VtYmxlX2xpbmUxLnNoCitpbmRleCAyNDhkNDdlLi5kYzJhNjc1IDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fYXNzZW1ibGVfbGluZTEuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX2Fzc2VtYmxlX2xpbmUxLnNoCitAQCAtMSwzICsxLDMgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIGV4ZWMgLi90c3QtcGFtX2F1dGhmYWlsIHRzdC1wYW1fYXNzZW1ibGVfbGluZTEKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9ncm91cDEuc2ggYi94dGVzdHMvdHN0LXBhbV9ncm91cDEuc2gKK2luZGV4IGI3NjM3N2YuLjQ0ZmFjYTkgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV9ncm91cDEuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX2dyb3VwMS5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyAvdXNyL3NiaW4vZ3JvdXBhZGQgdHN0cGFtZ3JwZworIC91c3Ivc2Jpbi91c2VyYWRkIC1wICchIScgdHN0cGFtZ3JwCitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fbGltaXRzMS5zaCBiL3h0ZXN0cy90c3QtcGFtX2xpbWl0czEuc2gKK2luZGV4IDRmYWE4MjIuLjMyYzAyMWQgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV9saW1pdHMxLnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV9saW1pdHMxLnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIC91c3Ivc2Jpbi91c2VyYWRkIC1wICchIScgdHN0cGFtbGltaXRzCisgLi90c3QtcGFtX2xpbWl0czEKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9wd2hpc3RvcnkxLnNoIGIveHRlc3RzL3RzdC1wYW1fcHdoaXN0b3J5MS5zaAoraW5kZXggZGRiM2I4Yi4uMGYyMTJlMiAxMDA2NDQKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX3B3aGlzdG9yeTEuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX3B3aGlzdG9yeTEuc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgL3Vzci9zYmluL3VzZXJhZGQgdHN0cGFtcHdoaXN0b3J5CisgLi90c3QtcGFtX3B3aGlzdG9yeTEKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazEuc2ggYi94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazEuc2gKK2luZGV4IDUyNjAxNzUuLmYxYjcyYTcgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazEuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMS5zaAorQEAgLTEsMyArMSwzIEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyBleGVjIC4vdHN0LXBhbV9hdXRoZmFpbCB0c3QtcGFtX3N1YnN0YWNrMQorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMi5zaCBiL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMi5zaAoraW5kZXggYzAyZjU5Ny4uMzgwNGZhNyAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMi5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2syLnNoCitAQCAtMSwzICsxLDMgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIGV4ZWMgLi90c3QtcGFtX2F1dGhzdWNjZWVkIHRzdC1wYW1fc3Vic3RhY2syCitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2szLnNoIGIveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2szLnNoCitpbmRleCAwZTU3MmFhLi5hYTQ4ZThlIDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2szLnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazMuc2gKK0BAIC0xLDMgKzEsMyBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgZXhlYyAuL3RzdC1wYW1fYXV0aHN1Y2NlZWQgdHN0LXBhbV9zdWJzdGFjazMKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazQuc2ggYi94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazQuc2gKK2luZGV4IGEzZWYwOGEuLjk1OGEwN2EgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazQuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrNC5zaAorQEAgLTEsMyArMSwzIEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyBleGVjIC4vdHN0LXBhbV9hdXRoc3VjY2VlZCB0c3QtcGFtX3N1YnN0YWNrNAorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrNS5zaCBiL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrNS5zaAoraW5kZXggZTI3MTRmZC4uN2UwZGE3NCAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrNS5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2s1LnNoCitAQCAtMSwzICsxLDMgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIGV4ZWMgLi90c3QtcGFtX2F1dGhmYWlsIHRzdC1wYW1fc3Vic3RhY2s1CitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fc3VjY2VlZF9pZjEuc2ggYi94dGVzdHMvdHN0LXBhbV9zdWNjZWVkX2lmMS5zaAoraW5kZXggYTY0M2IyZS4uNThlNTdiNCAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX3N1Y2NlZWRfaWYxLnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV9zdWNjZWVkX2lmMS5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyAvdXNyL3NiaW4vdXNlcmFkZCAtcCAnISEnIHRzdHBhbXRlc3QKKyAvdXNyL3NiaW4vdXNlcmFkZCAtcCAnISEnIHBhbXRlc3QKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV91bml4MS5zaCBiL3h0ZXN0cy90c3QtcGFtX3VuaXgxLnNoCitpbmRleCBmNzViZDg0Li43MmRlYWMwIDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fdW5peDEuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX3VuaXgxLnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIC91c3Ivc2Jpbi91c2VyYWRkIC1wICchIScgdHN0cGFtdW5peAorIC4vdHN0LXBhbV91bml4MQorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX3VuaXgyLnNoIGIveHRlc3RzL3RzdC1wYW1fdW5peDIuc2gKK2luZGV4IDcwOTMxNTUuLmMwNGQ2ZTYgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV91bml4Mi5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fdW5peDIuc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgIyBwYW11bml4MCA9IDBhWEtaenRBLmQxS1kKKyAvdXNyL3NiaW4vdXNlcmFkZCAtcCAwYVhLWnp0QS5kMUtZICB0c3RwYW11bml4CitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fdW5peDMuc2ggYi94dGVzdHMvdHN0LXBhbV91bml4My5zaAoraW5kZXggZWY0YTA3Yy4uYjUyZGIyYiAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX3VuaXgzLnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV91bml4My5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyAjIHBhbXVuaXgwMSA9IDBhWEtaenRBLmQxS1lJdUZYQXJtZDJqVQorIC91c3Ivc2Jpbi91c2VyYWRkIC1wIDBhWEtaenRBLmQxS1lJdUZYQXJtZDJqVSB0c3RwYW11bml4CitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fdW5peDQuc2ggYi94dGVzdHMvdHN0LXBhbV91bml4NC5zaAoraW5kZXggNzg3YzJmOS4uZTc5NzZmZCAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX3VuaXg0LnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV91bml4NC5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyAjIHBhbXVuaXgwMSA9IDBhWEtaenRBLmQxS1lJdUZYQXJtZDJqVQorIC91c3Ivc2Jpbi91c2VyYWRkIC1wIDBhWEtaenRBLmQxS1lJdUZYQXJtZDJqVSB0c3RwYW11bml4CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9saWJwYW0teHRlc3RzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9saWJwYW0teHRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNjg3NDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL2xpYnBhbS14dGVzdHMucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorVGhpcyBwYXRjaCBpcyB1c2VkIHRvIGNyZWF0ZSBhIG5ldyBzdWIgcGFja2FnZSBsaWJwYW0teHRlc3RzIHRvIGRvIG1vcmUgY2hlY2tzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2FuZyBLYWkgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0gTGludXgtUEFNLTEuMS40L3h0ZXN0cy9NYWtlZmlsZS5hbS5vcmlnCTIwMTEtMDctMTkgMTc6MDA6MDkuNjE5OTgwMDAxICswODAwCisrKysgTGludXgtUEFNLTEuMS40L3h0ZXN0cy9NYWtlZmlsZS5hbQkyMDExLTA3LTE5IDE2OjU0OjAwLjIyOTk3OTk5OCArMDgwMAorQEAgLTcsNyArNyw3IEBACisgQU1fTERGTEFHUyA9IC1MJCh0b3BfYnVpbGRkaXIpL2xpYnBhbSAtbHBhbSBcCisgCS1MJCh0b3BfYnVpbGRkaXIpL2xpYnBhbV9taXNjIC1scGFtX21pc2MKKyAKKy1DTEVBTkZJTEVTID0gKn4gJChYVEVTVFMpCisrQ0xFQU5GSUxFUyA9ICp+CisgCisgRVhUUkFfRElTVCA9IHJ1bi14dGVzdHMuc2ggdHN0LXBhbV9kaXNwYXRjaDEucGFtZCB0c3QtcGFtX2Rpc3BhdGNoMi5wYW1kIFwKKyAJdHN0LXBhbV9kaXNwYXRjaDMucGFtZCB0c3QtcGFtX2Rpc3BhdGNoNC5wYW1kIFwKK0BAIC01MSwzICs1MSwxOCBAQAorIAorIHh0ZXN0czogJChYVEVTVFMpIHJ1bi14dGVzdHMuc2gKKyAJIiQoc3JjZGlyKSIvcnVuLXh0ZXN0cy5zaCAiJChzcmNkaXIpIiAke1hURVNUU30gJHtOT1NSQ1RFU1RTfQorKworK2FsbDogJChYVEVTVFMpCisrCisraW5zdGFsbDogaW5zdGFsbF94dGVzdHMKKysKKytpbnN0YWxsX3h0ZXN0czoKKysJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJChwa2dkYXRhZGlyKS94dGVzdHMKKysJZm9yIGZpbGUgaW4gJChFWFRSQV9ESVNUKSA7IGRvIFwKKysJCSQoSU5TVEFMTCkgJCRmaWxlICQoREVTVERJUikkKHBrZ2RhdGFkaXIpL3h0ZXN0cyA7IFwKKysJZG9uZQorKwlmb3IgZmlsZSBpbiAkKFhURVNUUyk7IGRvIFwKKysJCSQoSU5TVEFMTCkgLmxpYnMvJCRmaWxlICQoREVTVERJUikkKHBrZ2RhdGFkaXIpL3h0ZXN0cyA7IFwKKysJZG9uZQorKworKy5QSE9OWTogYWxsIGluc3RhbGxfeHRlc3RzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS1uby1pbm5ldGdyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tbm8taW5uZXRnci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTU1MWFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tbm8taW5uZXRnci5wYXRjaApAQCAtMCwwICsxLDk3IEBACitpbm5ldGdyIG1heSBub3QgYmUgdGhlcmUgc28gbWFrZSBzdXJlIHRoYXQgd2hlbiBpbm5ldGdyIGlzIG5vdCBwcmVzZW50Cit0aGVuIHdlIGluZm9ybSBhYm91dCBpdCBhbmQgbm90IHVzZSBpdC4KKworLUtoZW0KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitJbmRleDogTGludXgtUEFNLTEuMS4zL21vZHVsZXMvcGFtX2dyb3VwL3BhbV9ncm91cC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gTGludXgtUEFNLTEuMS4zLm9yaWcvbW9kdWxlcy9wYW1fZ3JvdXAvcGFtX2dyb3VwLmMKKysrKyBMaW51eC1QQU0tMS4xLjMvbW9kdWxlcy9wYW1fZ3JvdXAvcGFtX2dyb3VwLmMKK0BAIC02NTksNyArNjU5LDExIEBAIHN0YXRpYyBpbnQgY2hlY2tfYWNjb3VudChwYW1faGFuZGxlX3QgKnAKKyAJfQorIAkvKiBJZiBidWZmZXIgc3RhcnRzIHdpdGggQCwgd2UgYXJlIHVzaW5nIG5ldGdyb3VwcyAqLworIAlpZiAoYnVmZmVyWzBdID09ICdAJykKKy0JICBnb29kICY9IGlubmV0Z3IgKCZidWZmZXJbMV0sIE5VTEwsIHVzZXIsIE5VTEwpOworKyNpZmRlZiBIQVZFX0lOTkVUR1IKKysgICAgICAgICAgIGdvb2QgJj0gaW5uZXRnciAoJmJ1ZmZlclsxXSwgTlVMTCwgdXNlciwgTlVMTCk7CisrI2Vsc2UKKysgICAgICAgICAgIHBhbV9zeXNsb2cgKHBhbWgsIExPR19FUlIsICJwYW1fZ3JvdXAgZG9lcyBub3QgaGF2ZSBuZXRncm91cCBzdXBwb3J0Iik7CisrI2VuZGlmCisgCS8qIG90aGVyd2lzZSwgaWYgdGhlIGJ1ZmZlciBzdGFydHMgd2l0aCAlLCBpdCdzIGEgVU5JWCBncm91cCAqLworIAllbHNlIGlmIChidWZmZXJbMF0gPT0gJyUnKQorICAgICAgICAgICBnb29kICY9IHBhbV9tb2R1dGlsX3VzZXJfaW5fZ3JvdXBfbmFtX25hbShwYW1oLCB1c2VyLCAmYnVmZmVyWzFdKTsKK0luZGV4OiBMaW51eC1QQU0tMS4xLjMvbW9kdWxlcy9wYW1fdGltZS9wYW1fdGltZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gTGludXgtUEFNLTEuMS4zLm9yaWcvbW9kdWxlcy9wYW1fdGltZS9wYW1fdGltZS5jCisrKysgTGludXgtUEFNLTEuMS4zL21vZHVsZXMvcGFtX3RpbWUvcGFtX3RpbWUuYworQEAgLTU1NSw5ICs1NTUsMTMgQEAgY2hlY2tfYWNjb3VudChwYW1faGFuZGxlX3QgKnBhbWgsIGNvbnN0CisgCSAgfQorIAkgIC8qIElmIGJ1ZmZlciBzdGFydHMgd2l0aCBALCB3ZSBhcmUgdXNpbmcgbmV0Z3JvdXBzICovCisgCSAgaWYgKGJ1ZmZlclswXSA9PSAnQCcpCistCSAgICBnb29kICY9IGlubmV0Z3IgKCZidWZmZXJbMV0sIE5VTEwsIHVzZXIsIE5VTEwpOworKyNpZmRlZiBIQVZFX0lOTkVUR1IKKysJICAgICAgIGdvb2QgJj0gaW5uZXRnciAoJmJ1ZmZlclsxXSwgTlVMTCwgdXNlciwgTlVMTCk7CisrI2Vsc2UKKysJICAgICAgIHBhbV9zeXNsb2cgKHBhbWgsIExPR19FUlIsICJwYW1fdGltZSBkb2VzIG5vdCBoYXZlIG5ldGdyb3VwIHN1cHBvcnQiKTsKKysjZW5kaWYKKyAJICBlbHNlCistCSAgICBnb29kICY9IGxvZ2ljX2ZpZWxkKHBhbWgsIHVzZXIsIGJ1ZmZlciwgY291bnQsIGlzX3NhbWUpOworKwkgICAgICAgZ29vZCAmPSBsb2dpY19maWVsZChwYW1oLCB1c2VyLCBidWZmZXIsIGNvdW50LCBpc19zYW1lKTsKKyAJICBEKCgid2l0aCB1c2VyOiAlcyIsIGdvb2QgPyAicGFzc2VzIjoiZmFpbHMiICkpOworIAorIAkgIC8qIGhlcmUgd2UgZ2V0IHRoZSB0aW1lIGZpZWxkICovCitJbmRleDogTGludXgtUEFNLTEuMS4zL21vZHVsZXMvcGFtX3N1Y2NlZWRfaWYvcGFtX3N1Y2NlZWRfaWYuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIExpbnV4LVBBTS0xLjEuMy5vcmlnL21vZHVsZXMvcGFtX3N1Y2NlZWRfaWYvcGFtX3N1Y2NlZWRfaWYuYworKysrIExpbnV4LVBBTS0xLjEuMy9tb2R1bGVzL3BhbV9zdWNjZWVkX2lmL3BhbV9zdWNjZWVkX2lmLmMKK0BAIC0yMzEsMTggKzIzMSwyNyBAQCBldmFsdWF0ZV9ub3Rpbmdyb3VwKHBhbV9oYW5kbGVfdCAqcGFtaCwKKyB9CisgLyogUmV0dXJuIFBBTV9TVUNDRVNTIGlmIHRoZSAoaG9zdCx1c2VyKSBpcyBpbiB0aGUgbmV0Z3JvdXAuICovCisgc3RhdGljIGludAorLWV2YWx1YXRlX2lubmV0Z3IoY29uc3QgY2hhciAqaG9zdCwgY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqZ3JvdXApCisrZXZhbHVhdGVfaW5uZXRncihjb25zdCBwYW1faGFuZGxlX3QqIHBhbWgsIGNvbnN0IGNoYXIgKmhvc3QsIGNvbnN0IGNoYXIgKnVzZXIsIGNvbnN0IGNoYXIgKmdyb3VwKQorIHsKKysjaWZkZWYgSEFWRV9JTk5FVEdSCisgCWlmIChpbm5ldGdyKGdyb3VwLCBob3N0LCB1c2VyLCBOVUxMKSA9PSAxKQorIAkJcmV0dXJuIFBBTV9TVUNDRVNTOworKyNlbHNlCisrICAgICAgICBwYW1fc3lzbG9nIChwYW1oLCBMT0dfRVJSLCAicGFtX3N1Y2NlZWRfaWYgZG9lcyBub3QgaGF2ZSBuZXRncm91cCBzdXBwb3J0Iik7CisrI2VuZGlmCisrCisgCXJldHVybiBQQU1fQVVUSF9FUlI7CisgfQorIC8qIFJldHVybiBQQU1fU1VDQ0VTUyBpZiB0aGUgKGhvc3QsdXNlcikgaXMgTk9UIGluIHRoZSBuZXRncm91cC4gKi8KKyBzdGF0aWMgaW50CistZXZhbHVhdGVfbm90aW5uZXRncihjb25zdCBjaGFyICpob3N0LCBjb25zdCBjaGFyICp1c2VyLCBjb25zdCBjaGFyICpncm91cCkKKytldmFsdWF0ZV9ub3Rpbm5ldGdyKGNvbnN0IHBhbV9oYW5kbGVfdCogcGFtaCwgY29uc3QgY2hhciAqaG9zdCwgY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqZ3JvdXApCisgeworKyNpZmRlZiBIQVZFX0lOTkVUR1IKKyAJaWYgKGlubmV0Z3IoZ3JvdXAsIGhvc3QsIHVzZXIsIE5VTEwpID09IDApCisgCQlyZXR1cm4gUEFNX1NVQ0NFU1M7CisrI2Vsc2UKKysJcGFtX3N5c2xvZyAocGFtaCwgTE9HX0VSUiwgInBhbV9zdWNjZWVkX2lmIGRvZXMgbm90IGhhdmUgbmV0Z3JvdXAgc3VwcG9ydCIpOworKyNlbmRpZgorIAlyZXR1cm4gUEFNX0FVVEhfRVJSOworIH0KKyAKK0BAIC0zNjEsMTQgKzM3MCwxNCBAQCBldmFsdWF0ZShwYW1faGFuZGxlX3QgKnBhbWgsIGludCBkZWJ1ZywKKyAJCWNvbnN0IHZvaWQgKnJob3N0OworIAkJaWYgKHBhbV9nZXRfaXRlbShwYW1oLCBQQU1fUkhPU1QsICZyaG9zdCkgIT0gUEFNX1NVQ0NFU1MpCisgCQkJcmhvc3QgPSBOVUxMOworLQkJcmV0dXJuIGV2YWx1YXRlX2lubmV0Z3Iocmhvc3QsIHVzZXIsIHJpZ2h0KTsKKysJCXJldHVybiBldmFsdWF0ZV9pbm5ldGdyKHBhbWgsIHJob3N0LCB1c2VyLCByaWdodCk7CisgCX0KKyAJLyogKFJob3N0LCB1c2VyKSBpcyBub3QgaW4gdGhpcyBncm91cC4gKi8KKyAJaWYgKHN0cmNhc2VjbXAocXVhbCwgIm5vdGlubmV0Z3IiKSA9PSAwKSB7CisgCQljb25zdCB2b2lkICpyaG9zdDsKKyAJCWlmIChwYW1fZ2V0X2l0ZW0ocGFtaCwgUEFNX1JIT1NULCAmcmhvc3QpICE9IFBBTV9TVUNDRVNTKQorIAkJCXJob3N0ID0gTlVMTDsKKy0JCXJldHVybiBldmFsdWF0ZV9ub3Rpbm5ldGdyKHJob3N0LCB1c2VyLCByaWdodCk7CisrCQlyZXR1cm4gZXZhbHVhdGVfbm90aW5uZXRncihwYW1oLCByaG9zdCwgdXNlciwgcmlnaHQpOworIAl9CisgCS8qIEZhaWwgY2xvc2VkLiAqLworIAlyZXR1cm4gUEFNX1NFUlZJQ0VfRVJSOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tc2VjdXJpdHktYWJzdHJhY3Qtc2VjdXJldHR5LWhhbmRsaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tc2VjdXJpdHktYWJzdHJhY3Qtc2VjdXJldHR5LWhhbmRsaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxODM0ZjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS1zZWN1cml0eS1hYnN0cmFjdC1zZWN1cmV0dHktaGFuZGxpbmcucGF0Y2gKQEAgLTAsMCArMSwyMDAgQEAKK0Rlc2NyaXB0aW9uOiBleHRyYWN0IHRoZSBzZWN1cmV0dHkgbG9naWMgZm9yIHVzZSB3aXRoIHRoZSAibnVsbG9rX3NlY3VyZSIgb3B0aW9uCisgaW50cm9kdWNlZCBpbiB0aGUgIjA1NV9wYW1fdW5peF9udWxsb2tfc2VjdXJlIiBwYXRjaC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1pbmcgTGl1IDxtaW5nLmxpdUB3aW5kcml2ZXIuY29tPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorZGlmZiAtdXJwTiBhL21vZHVsZXMvcGFtX3NlY3VyZXR0eS9NYWtlZmlsZS5hbSBiL21vZHVsZXMvcGFtX3NlY3VyZXR0eS9NYWtlZmlsZS5hbQorLS0tIGEvbW9kdWxlcy9wYW1fc2VjdXJldHR5L01ha2VmaWxlLmFtCTIwMTMtMDctMDUgMTE6MDg6MjMuMjI0NDgzMjM3ICswODAwCisrKysgYi9tb2R1bGVzL3BhbV9zZWN1cmV0dHkvTWFrZWZpbGUuYW0JMjAxMy0wNy0wNSAxMToxNToyMS4zMDQ0ODY0NTYgKzA4MDAKK0BAIC0yNCw2ICsyNCwxMCBAQCBlbmRpZgorIHNlY3VyZWxpYl9MVExJQlJBUklFUyA9IHBhbV9zZWN1cmV0dHkubGEKKyBwYW1fc2VjdXJldHR5X2xhX0xJQkFERCA9IC1MJCh0b3BfYnVpbGRkaXIpL2xpYnBhbSAtbHBhbQorIAorK3BhbV9zZWN1cmV0dHlfbGFfU09VUkNFUyA9CVwKKysJcGFtX3NlY3VyZXR0eS5jCQlcCisrCXR0eV9zZWN1cmUuYworKworIGlmIEVOQUJMRV9SRUdFTkVSQVRFX01BTgorIG5vaW5zdF9EQVRBID0gUkVBRE1FCisgUkVBRE1FOiBwYW1fc2VjdXJldHR5LjgueG1sCitkaWZmIC11cnBOIGEvbW9kdWxlcy9wYW1fc2VjdXJldHR5L3BhbV9zZWN1cmV0dHkuYyBiL21vZHVsZXMvcGFtX3NlY3VyZXR0eS9wYW1fc2VjdXJldHR5LmMKKy0tLSBhL21vZHVsZXMvcGFtX3NlY3VyZXR0eS9wYW1fc2VjdXJldHR5LmMJMjAxMy0wNy0wNSAxMTowNzo1MC4wNjQ0ODM1NjggKzA4MDAKKysrKyBiL21vZHVsZXMvcGFtX3NlY3VyZXR0eS9wYW1fc2VjdXJldHR5LmMJMjAxMy0wNy0wNSAxMToxMjoyMy45OTQ0ODMzNDQgKzA4MDAKK0BAIC0xLDcgKzEsNSBAQAorIC8qIHBhbV9zZWN1cmV0dHkgbW9kdWxlICovCisgCistI2RlZmluZSBTRUNVUkVUVFlfRklMRSAiL2V0Yy9zZWN1cmV0dHkiCistI2RlZmluZSBUVFlfUFJFRklYICAgICAiL2Rldi8iCisgI2RlZmluZSBDTURMSU5FX0ZJTEUgICAiL3Byb2MvY21kbGluZSIKKyAjZGVmaW5lIENPTlNPTEVBQ1RJVkVfRklMRQkiL3N5cy9jbGFzcy90dHkvY29uc29sZS9hY3RpdmUiCisgCitAQCAtNDAsNiArMzgsOSBAQAorICNpbmNsdWRlIDxzZWN1cml0eS9wYW1fbW9kdXRpbC5oPgorICNpbmNsdWRlIDxzZWN1cml0eS9wYW1fZXh0Lmg+CisgCisrZXh0ZXJuIGludCBfcGFtbW9kdXRpbF90dHlfc2VjdXJlKGNvbnN0IHBhbV9oYW5kbGVfdCAqcGFtaCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdXR0eW5hbWUpOworKworICNkZWZpbmUgUEFNX0RFQlVHX0FSRyAgICAgICAweDAwMDEKKyAjZGVmaW5lIFBBTV9OT0NPTlNPTEVfQVJHICAgMHgwMDAyCisgCitAQCAtNzMsMTEgKzc0LDcgQEAgc2VjdXJldHR5X3BlcmZvcm1fY2hlY2sgKHBhbV9oYW5kbGVfdCAqcAorICAgICBjb25zdCBjaGFyICp1c2VybmFtZTsKKyAgICAgY29uc3QgY2hhciAqdXR0eW5hbWU7CisgICAgIGNvbnN0IHZvaWQgKnZvaWRfdXR0eW5hbWU7CistICAgIGNoYXIgdHR5ZmlsZWxpbmVbMjU2XTsKKy0gICAgY2hhciBwdG5hbWVbMjU2XTsKKy0gICAgc3RydWN0IHN0YXQgdHR5ZmlsZWluZm87CisgICAgIHN0cnVjdCBwYXNzd2QgKnVzZXJfcHdkOworLSAgICBGSUxFICp0dHlmaWxlOworIAorICAgICAvKiBsb2cgYSB0cmFpbCBmb3IgZGVidWdnaW5nICovCisgICAgIGlmIChjdHJsICYgUEFNX0RFQlVHX0FSRykgeworQEAgLTEwNSw1MCArMTAyLDcgQEAgc2VjdXJldHR5X3BlcmZvcm1fY2hlY2sgKHBhbV9oYW5kbGVfdCAqcAorIAlyZXR1cm4gUEFNX1NFUlZJQ0VfRVJSOworICAgICB9CisgCistICAgIC8qIFRoZSBQQU1fVFRZIGl0ZW0gbWF5IGJlIHByZWZpeGVkIHdpdGggIi9kZXYvIiAtIHNraXAgdGhhdCAqLworLSAgICBpZiAoc3RybmNtcChUVFlfUFJFRklYLCB1dHR5bmFtZSwgc2l6ZW9mKFRUWV9QUkVGSVgpLTEpID09IDApIHsKKy0JdXR0eW5hbWUgKz0gc2l6ZW9mKFRUWV9QUkVGSVgpLTE7CistICAgIH0KKy0KKy0gICAgaWYgKHN0YXQoU0VDVVJFVFRZX0ZJTEUsICZ0dHlmaWxlaW5mbykpIHsKKy0JcGFtX3N5c2xvZyhwYW1oLCBMT0dfTk9USUNFLCAiQ291bGRuJ3Qgb3BlbiAlczogJW0iLCBTRUNVUkVUVFlfRklMRSk7CistCXJldHVybiBQQU1fU1VDQ0VTUzsgLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgc2VjdXJldHR5IGhhbmRsaW5nLAorLQkJCSAgICAgICB0aGlzIG5lZWRzIHRvIHN1Y2NlZWQuICBCdXQgd2Ugc3RpbGwgbG9nIHRoZQorLQkJCSAgICAgICBlcnJvci4gKi8KKy0gICAgfQorLQorLSAgICBpZiAoKHR0eWZpbGVpbmZvLnN0X21vZGUgJiBTX0lXT1RIKSB8fCAhU19JU1JFRyh0dHlmaWxlaW5mby5zdF9tb2RlKSkgeworLQkvKiBJZiB0aGUgZmlsZSBpcyB3b3JsZCB3cml0YWJsZSBvciBpcyBub3QgYQorLQkgICBub3JtYWwgZmlsZSwgcmV0dXJuIGVycm9yICovCistCXBhbV9zeXNsb2cocGFtaCwgTE9HX0VSUiwKKy0JCSAgICIlcyBpcyBlaXRoZXIgd29ybGQgd3JpdGFibGUgb3Igbm90IGEgbm9ybWFsIGZpbGUiLAorLQkJICAgU0VDVVJFVFRZX0ZJTEUpOworLQlyZXR1cm4gUEFNX0FVVEhfRVJSOworLSAgICB9CistCistICAgIHR0eWZpbGUgPSBmb3BlbihTRUNVUkVUVFlfRklMRSwiciIpOworLSAgICBpZiAodHR5ZmlsZSA9PSBOVUxMKSB7IC8qIENoZWNrIHRoYXQgd2Ugb3BlbmVkIGl0IHN1Y2Nlc3NmdWxseSAqLworLQlwYW1fc3lzbG9nKHBhbWgsIExPR19FUlIsICJFcnJvciBvcGVuaW5nICVzOiAlbSIsIFNFQ1VSRVRUWV9GSUxFKTsKKy0JcmV0dXJuIFBBTV9TRVJWSUNFX0VSUjsKKy0gICAgfQorLQorLSAgICBpZiAoaXNkaWdpdCh1dHR5bmFtZVswXSkpIHsKKy0Jc25wcmludGYocHRuYW1lLCBzaXplb2YocHRuYW1lKSwgInB0cy8lcyIsIHV0dHluYW1lKTsKKy0gICAgfSBlbHNlIHsKKy0JcHRuYW1lWzBdID0gJ1wwJzsKKy0gICAgfQorLQorLSAgICByZXR2YWwgPSAxOworLQorLSAgICB3aGlsZSAoKGZnZXRzKHR0eWZpbGVsaW5lLCBzaXplb2YodHR5ZmlsZWxpbmUpLTEsIHR0eWZpbGUpICE9IE5VTEwpCistCSAgICYmIHJldHZhbCkgeworLQlpZiAodHR5ZmlsZWxpbmVbc3RybGVuKHR0eWZpbGVsaW5lKSAtIDFdID09ICdcbicpCistCSAgICB0dHlmaWxlbGluZVtzdHJsZW4odHR5ZmlsZWxpbmUpIC0gMV0gPSAnXDAnOworLQorLQlyZXR2YWwgPSAoIHN0cmNtcCh0dHlmaWxlbGluZSwgdXR0eW5hbWUpCistCQkgICAmJiAoIXB0bmFtZVswXSB8fCBzdHJjbXAocHRuYW1lLCB1dHR5bmFtZSkpICk7CistICAgIH0KKy0gICAgZmNsb3NlKHR0eWZpbGUpOworKyAgICByZXR2YWwgPSBfcGFtbW9kdXRpbF90dHlfc2VjdXJlKHBhbWgsIHV0dHluYW1lKTsKKyAKKyAgICAgaWYgKHJldHZhbCAmJiAhKGN0cmwgJiBQQU1fTk9DT05TT0xFX0FSRykpIHsKKyAgICAgICAgIEZJTEUgKmNtZGxpbmVmaWxlOworZGlmZiAtdXJwTiBhL21vZHVsZXMvcGFtX3NlY3VyZXR0eS90dHlfc2VjdXJlLmMgYi9tb2R1bGVzL3BhbV9zZWN1cmV0dHkvdHR5X3NlY3VyZS5jCistLS0gYS9tb2R1bGVzL3BhbV9zZWN1cmV0dHkvdHR5X3NlY3VyZS5jCTE5NzAtMDEtMDEgMDg6MzA6MDAuMDAwMDAwMDAwICswODMwCisrKysgYi9tb2R1bGVzL3BhbV9zZWN1cmV0dHkvdHR5X3NlY3VyZS5jCTIwMTMtMDctMDUgMTE6MTQ6MjEuNTM0NDgyOTAwICswODAwCitAQCAtMCwwICsxLDkwIEBACisrLyoKKysgKiBBIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBhIHBhcnRpY3VsYXIgbGluZSBpcyBpbiAvZXRjL3NlY3VyZXR0eQorKyAqLworKworKworKyNkZWZpbmUgU0VDVVJFVFRZX0ZJTEUgIi9ldGMvc2VjdXJldHR5IgorKyNkZWZpbmUgVFRZX1BSRUZJWCAgICAgIi9kZXYvIgorKworKy8qIFRoaXMgZnVuY3Rpb24gdGFrZW4gb3V0IG9mIHBhbV9zZWN1cmV0dHkgYnkgU2FtIEhhcnRtYW4KKysgKiA8aGFydG1hbnNAZGViaWFuLm9yZz4qLworKy8qCisrICogYnkgRWxsaW90IExlZSA8c29wd2l0aEByZWRoYXQuY29tPiwgUmVkIEhhdCBTb2Z0d2FyZS4KKysgKiBKdWx5IDI1LCAxOTk2LgorKyAqIFNsaWdodCBtb2RpZmljYXRpb25zIEFHTS4gMTk5Ni8xMi8zCisrICovCisrCisrI2luY2x1ZGUgPHVuaXN0ZC5oPgorKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysjaW5jbHVkZSA8c2VjdXJpdHkvcGFtX21vZHVsZXMuaD4KKysjaW5jbHVkZSA8c3RkYXJnLmg+CisrI2luY2x1ZGUgPHN5c2xvZy5oPgorKyNpbmNsdWRlIDxzeXMvc3lzbG9nLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c2VjdXJpdHkvcGFtX21vZHV0aWwuaD4KKysjaW5jbHVkZSA8c2VjdXJpdHkvcGFtX2V4dC5oPgorKworK2V4dGVybiBpbnQgX3BhbW1vZHV0aWxfdHR5X3NlY3VyZShjb25zdCBwYW1faGFuZGxlX3QgKnBhbWgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnV0dHluYW1lKTsKKysKKytpbnQgX3BhbW1vZHV0aWxfdHR5X3NlY3VyZShjb25zdCBwYW1faGFuZGxlX3QgKnBhbWgsIGNvbnN0IGNoYXIgKnV0dHluYW1lKQorK3sKKysgICAgaW50IHJldHZhbCA9IFBBTV9BVVRIX0VSUjsKKysgICAgY2hhciB0dHlmaWxlbGluZVsyNTZdOworKyAgICBjaGFyIHB0bmFtZVsyNTZdOworKyAgICBzdHJ1Y3Qgc3RhdCB0dHlmaWxlaW5mbzsKKysgICAgRklMRSAqdHR5ZmlsZTsKKysgICAgLyogVGhlIFBBTV9UVFkgaXRlbSBtYXkgYmUgcHJlZml4ZWQgd2l0aCAiL2Rldi8iIC0gc2tpcCB0aGF0ICovCisrICAgIGlmIChzdHJuY21wKFRUWV9QUkVGSVgsIHV0dHluYW1lLCBzaXplb2YoVFRZX1BSRUZJWCktMSkgPT0gMCkKKysJdXR0eW5hbWUgKz0gc2l6ZW9mKFRUWV9QUkVGSVgpLTE7CisrCisrICAgIGlmIChzdGF0KFNFQ1VSRVRUWV9GSUxFLCAmdHR5ZmlsZWluZm8pKSB7CisrCXBhbV9zeXNsb2cocGFtaCwgTE9HX05PVElDRSwgIkNvdWxkbid0IG9wZW4gJXM6ICVtIiwKKysJICAgICAgICAgICBTRUNVUkVUVFlfRklMRSk7CisrCXJldHVybiBQQU1fU1VDQ0VTUzsgLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgc2VjdXJldHR5IGhhbmRsaW5nLAorKwkJCSAgICAgICB0aGlzIG5lZWRzIHRvIHN1Y2NlZWQuICBCdXQgd2Ugc3RpbGwgbG9nIHRoZQorKwkJCSAgICAgICBlcnJvci4gKi8KKysgICAgfQorKworKyAgICBpZiAoKHR0eWZpbGVpbmZvLnN0X21vZGUgJiBTX0lXT1RIKSB8fCAhU19JU1JFRyh0dHlmaWxlaW5mby5zdF9tb2RlKSkgeworKwkvKiBJZiB0aGUgZmlsZSBpcyB3b3JsZCB3cml0YWJsZSBvciBpcyBub3QgYQorKwkgICBub3JtYWwgZmlsZSwgcmV0dXJuIGVycm9yICovCisrCXBhbV9zeXNsb2cocGFtaCwgTE9HX0VSUiwKKysJICAgICAgICAgICAiJXMgaXMgZWl0aGVyIHdvcmxkIHdyaXRhYmxlIG9yIG5vdCBhIG5vcm1hbCBmaWxlIiwKKysJICAgICAgICAgICBTRUNVUkVUVFlfRklMRSk7CisrCXJldHVybiBQQU1fQVVUSF9FUlI7CisrICAgIH0KKysKKysgICAgdHR5ZmlsZSA9IGZvcGVuKFNFQ1VSRVRUWV9GSUxFLCJyIik7CisrICAgIGlmKHR0eWZpbGUgPT0gTlVMTCkgeyAvKiBDaGVjayB0aGF0IHdlIG9wZW5lZCBpdCBzdWNjZXNzZnVsbHkgKi8KKysJcGFtX3N5c2xvZyhwYW1oLCBMT0dfRVJSLCAiRXJyb3Igb3BlbmluZyAlczogJW0iLCBTRUNVUkVUVFlfRklMRSk7CisrCXJldHVybiBQQU1fU0VSVklDRV9FUlI7CisrICAgIH0KKysKKysgICAgaWYgKGlzZGlnaXQodXR0eW5hbWVbMF0pKSB7CisrCXNucHJpbnRmKHB0bmFtZSwgc2l6ZW9mKHB0bmFtZSksICJwdHMvJXMiLCB1dHR5bmFtZSk7CisrICAgIH0gZWxzZSB7CisrCXB0bmFtZVswXSA9ICdcMCc7CisrICAgIH0KKysKKysgICAgcmV0dmFsID0gMTsKKysKKysgICAgd2hpbGUgKChmZ2V0cyh0dHlmaWxlbGluZSxzaXplb2YodHR5ZmlsZWxpbmUpLTEsIHR0eWZpbGUpICE9IE5VTEwpIAorKwkgICAmJiByZXR2YWwpIHsKKysJaWYodHR5ZmlsZWxpbmVbc3RybGVuKHR0eWZpbGVsaW5lKSAtIDFdID09ICdcbicpCisrCSAgICB0dHlmaWxlbGluZVtzdHJsZW4odHR5ZmlsZWxpbmUpIC0gMV0gPSAnXDAnOworKwlyZXR2YWwgPSAoIHN0cmNtcCh0dHlmaWxlbGluZSx1dHR5bmFtZSkKKysJICAgICAgICAgICAmJiAoIXB0bmFtZVswXSB8fCBzdHJjbXAocHRuYW1lLCB1dHR5bmFtZSkpICk7CisrICAgIH0KKysgICAgZmNsb3NlKHR0eWZpbGUpOworKworKyAgICBpZihyZXR2YWwpIHsKKysJcmV0dmFsID0gUEFNX0FVVEhfRVJSOworKyAgICB9CisrCisrICAgIHJldHVybiByZXR2YWw7CisrfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tdW5peC1udWxsb2stc2VjdXJlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tdW5peC1udWxsb2stc2VjdXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNDFlODIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS11bml4LW51bGxvay1zZWN1cmUucGF0Y2gKQEAgLTAsMCArMSwyNDAgQEAKK0Zyb20gOWJkYzE5NzQ3NDc5NWYyZDAwMGMyYmMwNGY1OGY3Y2VmODg5OGYyMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFtYXJuYXRoIFZhbGx1cmkgPGFtYXJuYXRoLnZhbGx1cmlAaW50ZWwuY29tPgorRGF0ZTogV2VkLCAxNSBKdWwgMjAxNSAxMzowNzoyMCArMDMwMAorU3ViamVjdDogW1BBVENIXSBEZWJpYW4gcGF0Y2ggdG8gYWRkIGEgbmV3ICdudWxsb2tfc2VjdXJlJyBvcHRpb24gdG8gcGFtX3VuaXgsCisgd2hpY2ggYWNjZXB0cyB1c2VycyB3aXRoIG51bGwgcGFzc3dvcmRzIG9ubHkgd2hlbiB0aGUgYXBwbGljYW50IGlzIGNvbm5lY3RlZAorIGZyb20gYSB0dHkgbGlzdGVkIGluIC9ldGMvc2VjdXJldHR5LgorCitBdXRob3JzOiBTYW0gSGFydG1hbiA8aGFydG1hbnNAZGViaWFuLm9yZz4sCisgICAgICAgICBTdGV2ZSBMYW5nYXNlayA8dm9ybG9uQGRlYmlhbi5vcmc+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNaW5nIExpdSA8bWluZy5saXVAd2luZHJpdmVyLmNvbT4KKwordjI6CisJLSBGb3J3YXJkIHBvcnRlZCBmcm9tIHYxLjEuNiB0byB2MS4yLjEKKworU2lnbmVkLW9mZi1ieTogQW1hcm5hdGggVmFsbHVyaSA8YW1hcm5hdGgudmFsbHVyaUBpbnRlbC5jb20+CistLS0KKyBtb2R1bGVzL3BhbV91bml4L01ha2VmaWxlLmFtICAgIHwgIDMgKystCisgbW9kdWxlcy9wYW1fdW5peC9SRUFETUUgICAgICAgICB8IDExICsrKysrKysrKystCisgbW9kdWxlcy9wYW1fdW5peC9wYW1fdW5peC44ICAgICB8ICA5ICsrKysrKysrLQorIG1vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOC54bWwgfCAxOSArKysrKysrKysrKysrKysrKystCisgbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmMgICAgICB8IDQwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0KKyBtb2R1bGVzL3BhbV91bml4L3N1cHBvcnQuaCAgICAgIHwgIDggKysrKysrLS0KKyA2IGZpbGVzIGNoYW5nZWQsIDc5IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbW9kdWxlcy9wYW1fdW5peC9NYWtlZmlsZS5hbSBiL21vZHVsZXMvcGFtX3VuaXgvTWFrZWZpbGUuYW0KK2luZGV4IDU2ZWQ1OTEuLjlhMzcyYWMgMTAwNjQ0CistLS0gYS9tb2R1bGVzL3BhbV91bml4L01ha2VmaWxlLmFtCisrKysgYi9tb2R1bGVzL3BhbV91bml4L01ha2VmaWxlLmFtCitAQCAtMzAsNyArMzAsOCBAQCBpZiBIQVZFX1ZFUlNJT05JTkcKKyAgIHBhbV91bml4X2xhX0xERkxBR1MgKz0gLVdsLC0tdmVyc2lvbi1zY3JpcHQ9JChzcmNkaXIpLy4uL21vZHVsZXMubWFwCisgZW5kaWYKKyBwYW1fdW5peF9sYV9MSUJBREQgPSAkKHRvcF9idWlsZGRpcikvbGlicGFtL2xpYnBhbS5sYSBcCistCUBMSUJDUllQVEAgQExJQlNFTElOVVhAICQoTklTX0xJQlMpCisrCUBMSUJDUllQVEAgQExJQlNFTElOVVhAICQoTklTX0xJQlMpIFwKKysJLi4vcGFtX3NlY3VyZXR0eS90dHlfc2VjdXJlLmxvCisgCisgc2VjdXJlbGliX0xUTElCUkFSSUVTID0gcGFtX3VuaXgubGEKKyAKK2RpZmYgLS1naXQgYS9tb2R1bGVzL3BhbV91bml4L1JFQURNRSBiL21vZHVsZXMvcGFtX3VuaXgvUkVBRE1FCitpbmRleCAzOTM1ZGJhLi43ODgwZDkxIDEwMDY0NAorLS0tIGEvbW9kdWxlcy9wYW1fdW5peC9SRUFETUUKKysrKyBiL21vZHVsZXMvcGFtX3VuaXgvUkVBRE1FCitAQCAtNjcsNyArNjcsMTYgQEAgbnVsbG9rCisgCisgICAgIFRoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGlzIG1vZHVsZSBpcyB0byBub3QgcGVybWl0IHRoZSB1c2VyIGFjY2VzcyB0byBhCisgICAgIHNlcnZpY2UgaWYgdGhlaXIgb2ZmaWNpYWwgcGFzc3dvcmQgaXMgYmxhbmsuIFRoZSBudWxsb2sgYXJndW1lbnQgb3ZlcnJpZGVzCistICAgIHRoaXMgZGVmYXVsdC4KKysgICAgdGhpcyBkZWZhdWx0IGFuZCBhbGxvd3MgYW55IHVzZXIgd2l0aCBhIGJsYW5rIHBhc3N3b3JkIHRvIGFjY2VzcyB0aGUKKysgICAgc2VydmljZS4KKysKKytudWxsb2tfc2VjdXJlCisrCisrICAgIFRoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGlzIG1vZHVsZSBpcyB0byBub3QgcGVybWl0IHRoZSB1c2VyIGFjY2VzcyB0byBhCisrICAgIHNlcnZpY2UgaWYgdGhlaXIgb2ZmaWNpYWwgcGFzc3dvcmQgaXMgYmxhbmsuIFRoZSBudWxsb2tfc2VjdXJlIGFyZ3VtZW50CisrICAgIG92ZXJyaWRlcyB0aGlzIGRlZmF1bHQgYW5kIGFsbG93cyBhbnkgdXNlciB3aXRoIGEgYmxhbmsgcGFzc3dvcmQgdG8gYWNjZXNzCisrICAgIHRoZSBzZXJ2aWNlIGFzIGxvbmcgYXMgdGhlIHZhbHVlIG9mIFBBTV9UVFkgaXMgc2V0IHRvIG9uZSBvZiB0aGUgdmFsdWVzCisrICAgIGZvdW5kIGluIC9ldGMvc2VjdXJldHR5LgorIAorIHRyeV9maXJzdF9wYXNzCisgCitkaWZmIC0tZ2l0IGEvbW9kdWxlcy9wYW1fdW5peC9wYW1fdW5peC44IGIvbW9kdWxlcy9wYW1fdW5peC9wYW1fdW5peC44CitpbmRleCAzMzkxNzhiLi5hNGJkOTA2IDEwMDY0NAorLS0tIGEvbW9kdWxlcy9wYW1fdW5peC9wYW1fdW5peC44CisrKysgYi9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjgKK0BAIC05Miw3ICs5MiwxNCBAQCBUdXJucyBvZmYgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyBuYW1lbHkgbWVzc2FnZXMgYWJvdXQgc2Vzc2lvbiBvcGVuIGFuZCBjbG9zZSB2aQorIC5SUyA0CisgVGhlIGRlZmF1bHQgYWN0aW9uIG9mIHRoaXMgbW9kdWxlIGlzIHRvIG5vdCBwZXJtaXQgdGhlIHVzZXIgYWNjZXNzIHRvIGEgc2VydmljZSBpZiB0aGVpciBvZmZpY2lhbCBwYXNzd29yZCBpcyBibGFua1wmLiBUaGUKKyBcZkJudWxsb2tcZlIKKy1hcmd1bWVudCBvdmVycmlkZXMgdGhpcyBkZWZhdWx0XCYuCisrYXJndW1lbnQgb3ZlcnJpZGVzIHRoaXMgZGVmYXVsdCBhbmQgYWxsb3dzIGFueSB1c2VyIHdpdGggYSBibGFuayBwYXNzd29yZCB0byBhY2Nlc3MgdGhlIHNlcnZpY2VcJi4KKysuUkUKKysuUFAKKytcZkJudWxsb2tfc2VjdXJlXGZSCisrLlJTIDQKKytUaGUgZGVmYXVsdCBhY3Rpb24gb2YgdGhpcyBtb2R1bGUgaXMgdG8gbm90IHBlcm1pdCB0aGUgdXNlciBhY2Nlc3MgdG8gYSBzZXJ2aWNlIGlmIHRoZWlyIG9mZmljaWFsIHBhc3N3b3JkIGlzIGJsYW5rXCYuIFRoZQorK1xmQm51bGxva19zZWN1cmVcZlIKKythcmd1bWVudCBvdmVycmlkZXMgdGhpcyBkZWZhdWx0IGFuZCBhbGxvd3MgYW55IHVzZXIgd2l0aCBhIGJsYW5rIHBhc3N3b3JkIHRvIGFjY2VzcyB0aGUgc2VydmljZSBhcyBsb25nIGFzIHRoZSB2YWx1ZSBvZiBQQU1fVFRZIGlzIHNldCB0byBvbmUgb2YgdGhlIHZhbHVlcyBmb3VuZCBpbiAvZXRjL3NlY3VyZXR0eVwmLgorIC5SRQorIC5QUAorIFxmQnRyeV9maXJzdF9wYXNzXGZSCitkaWZmIC0tZ2l0IGEvbW9kdWxlcy9wYW1fdW5peC9wYW1fdW5peC44LnhtbCBiL21vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOC54bWwKK2luZGV4IGE4YjY0YmIuLjFjZWQ2ZjQgMTAwNjQ0CistLS0gYS9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjgueG1sCisrKysgYi9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjgueG1sCitAQCAtMTU5LDcgKzE1OSwyNCBAQAorICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICBUaGUgZGVmYXVsdCBhY3Rpb24gb2YgdGhpcyBtb2R1bGUgaXMgdG8gbm90IHBlcm1pdCB0aGUKKyAgICAgICAgICAgICB1c2VyIGFjY2VzcyB0byBhIHNlcnZpY2UgaWYgdGhlaXIgb2ZmaWNpYWwgcGFzc3dvcmQgaXMgYmxhbmsuCistICAgICAgICAgICAgVGhlIDxvcHRpb24+bnVsbG9rPC9vcHRpb24+IGFyZ3VtZW50IG92ZXJyaWRlcyB0aGlzIGRlZmF1bHQuCisrICAgICAgICAgICAgVGhlIDxvcHRpb24+bnVsbG9rPC9vcHRpb24+IGFyZ3VtZW50IG92ZXJyaWRlcyB0aGlzIGRlZmF1bHQKKysgICAgICAgICAgICBhbmQgYWxsb3dzIGFueSB1c2VyIHdpdGggYSBibGFuayBwYXNzd29yZCB0byBhY2Nlc3MgdGhlCisrICAgICAgICAgICAgc2VydmljZS4KKysgICAgICAgICAgPC9wYXJhPgorKyAgICAgICAgPC9saXN0aXRlbT4KKysgICAgICA8L3Zhcmxpc3RlbnRyeT4KKysgICAgICA8dmFybGlzdGVudHJ5PgorKyAgICAgICAgPHRlcm0+CisrICAgICAgICAgIDxvcHRpb24+bnVsbG9rX3NlY3VyZTwvb3B0aW9uPgorKyAgICAgICAgPC90ZXJtPgorKyAgICAgICAgPGxpc3RpdGVtPgorKyAgICAgICAgICA8cGFyYT4KKysgICAgICAgICAgICBUaGUgZGVmYXVsdCBhY3Rpb24gb2YgdGhpcyBtb2R1bGUgaXMgdG8gbm90IHBlcm1pdCB0aGUKKysgICAgICAgICAgICB1c2VyIGFjY2VzcyB0byBhIHNlcnZpY2UgaWYgdGhlaXIgb2ZmaWNpYWwgcGFzc3dvcmQgaXMgYmxhbmsuCisrICAgICAgICAgICAgVGhlIDxvcHRpb24+bnVsbG9rX3NlY3VyZTwvb3B0aW9uPiBhcmd1bWVudCBvdmVycmlkZXMgdGhpcworKyAgICAgICAgICAgIGRlZmF1bHQgYW5kIGFsbG93cyBhbnkgdXNlciB3aXRoIGEgYmxhbmsgcGFzc3dvcmQgdG8gYWNjZXNzCisrICAgICAgICAgICAgdGhlIHNlcnZpY2UgYXMgbG9uZyBhcyB0aGUgdmFsdWUgb2YgUEFNX1RUWSBpcyBzZXQgdG8gb25lIG9mCisrICAgICAgICAgICAgdGhlIHZhbHVlcyBmb3VuZCBpbiAvZXRjL3NlY3VyZXR0eS4KKyAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICA8L3Zhcmxpc3RlbnRyeT4KK2RpZmYgLS1naXQgYS9tb2R1bGVzL3BhbV91bml4L3N1cHBvcnQuYyBiL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5jCitpbmRleCBhYmNjZDgyLi4yMzYxOTU3IDEwMDY0NAorLS0tIGEvbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmMKKysrKyBiL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5jCitAQCAtMTg5LDEzICsxODksMjIgQEAgaW50IF9zZXRfY3RybChwYW1faGFuZGxlX3QgKnBhbWgsIGludCBmbGFncywgaW50ICpyZW1lbWJlciwgaW50ICpyb3VuZHMsCisgCS8qIG5vdyBwYXJzZSB0aGUgYXJndW1lbnRzIHRvIHRoaXMgbW9kdWxlICovCisgCisgCWZvciAoOyBhcmdjLS0gPiAwOyArK2FyZ3YpIHsKKysJCWludCBzbDsKKyAKKyAJCUQoKCJwYW1fdW5peCBhcmc6ICVzIiwgKmFyZ3YpKTsKKyAKKyAJCWZvciAoaiA9IDA7IGogPCBVTklYX0NUUkxTXzsgKytqKSB7CistCQkJaWYgKHVuaXhfYXJnc1tqXS50b2tlbgorLQkJCSAgICAmJiAhc3RybmNtcCgqYXJndiwgdW5peF9hcmdzW2pdLnRva2VuLCBzdHJsZW4odW5peF9hcmdzW2pdLnRva2VuKSkpIHsKKy0JCQkJYnJlYWs7CisrCQkJaWYgKHVuaXhfYXJnc1tqXS50b2tlbikgeworKwkJCQlzbCA9IHN0cmxlbih1bml4X2FyZ3Nbal0udG9rZW4pOworKwkJCQlpZiAodW5peF9hcmdzW2pdLnRva2VuW3NsLTFdID09ICc9JykgeworKwkJCQkJLyogZXhjbHVkZSBhcmd1bWVudCBmcm9tIGNvbXBhcmlzb24gKi8KKysJCQkJCWlmICghc3RybmNtcCgqYXJndiwgdW5peF9hcmdzW2pdLnRva2VuLCBzbCkpCisrCQkJCQkJYnJlYWs7CisrCQkJCX0gZWxzZSB7CisrCQkJCS8qIGNvbXBhcmUgZnVsbCBzdHJpbmdzICovCisrCQkJCQlpZiAoIXN0cmNtcCgqYXJndiwgdW5peF9hcmdzW2pdLnRva2VuKSkKKysJCQkJCQlicmVhazsKKysJCQkJfQorIAkJCX0KKyAJCX0KKyAKK0BAIC01NjYsNiArNTc1LDcgQEAgc3RhdGljIGludCBfdW5peF9ydW5faGVscGVyX2JpbmFyeShwYW1faGFuZGxlX3QgKnBhbWgsIGNvbnN0IGNoYXIgKnBhc3N3ZCwKKyAgICAgaWYgKGNoaWxkID09IDApIHsKKyAJc3RhdGljIGNoYXIgKmVudnBbXSA9IHsgTlVMTCB9OworIAljb25zdCBjaGFyICphcmdzW10gPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKysJaW50IG51bGxvayA9IG9mZihVTklYX19OT05VTEwsIGN0cmwpOworIAorIAkvKiBYWFggLSBzaG91bGQgcmVhbGx5IHRpZHkgdXAgUEFNIGhlcmUgdG9vICovCisgCitAQCAtNTkzLDcgKzYwMywxNiBAQCBzdGF0aWMgaW50IF91bml4X3J1bl9oZWxwZXJfYmluYXJ5KHBhbV9oYW5kbGVfdCAqcGFtaCwgY29uc3QgY2hhciAqcGFzc3dkLAorIAkvKiBleGVjIGJpbmFyeSBoZWxwZXIgKi8KKyAJYXJnc1swXSA9IENIS1BXRF9IRUxQRVI7CisgCWFyZ3NbMV0gPSB1c2VyOworLQlpZiAob2ZmKFVOSVhfX05PTlVMTCwgY3RybCkpIHsJLyogdGhpcyBtZWFucyB3ZSd2ZSBzdWNjZWVkZWQgKi8KKysJaWYgKG9uKFVOSVhfTlVMTE9LX1NFQ1VSRSwgY3RybCkpIHsKKysJCWNvbnN0IHZvaWQgKnV0dHluYW1lOworKwkJcmV0dmFsID0gcGFtX2dldF9pdGVtKHBhbWgsIFBBTV9UVFksICZ1dHR5bmFtZSk7CisrCQlpZiAocmV0dmFsICE9IFBBTV9TVUNDRVNTIHx8IHV0dHluYW1lID09IE5VTEwKKysJCQl8fCBfcGFtbW9kdXRpbF90dHlfc2VjdXJlKHBhbWgsIChjb25zdCBjaGFyICopdXR0eW5hbWUpICE9IFBBTV9TVUNDRVNTKSB7CisrCQkJbnVsbG9rID0gMDsKKysJCX0KKysJfQorKworKwlpZiAobnVsbG9rKSB7CisgCSAgYXJnc1syXT0ibnVsbG9rIjsKKyAJfSBlbHNlIHsKKyAJICBhcmdzWzJdPSJub251bGwiOworQEAgLTY3OCw2ICs2OTcsMTcgQEAgX3VuaXhfYmxhbmtwYXNzd2QgKHBhbV9oYW5kbGVfdCAqcGFtaCwgdW5zaWduZWQgaW50IGN0cmwsIGNvbnN0IGNoYXIgKm5hbWUpCisgCWlmIChvbihVTklYX19OT05VTEwsIGN0cmwpKQorIAkJcmV0dXJuIDA7CS8qIHdpbGwgZmFpbCBidXQgZG9uJ3QgbGV0IG9uIHlldCAqLworIAorKwlpZiAob24oVU5JWF9OVUxMT0tfU0VDVVJFLCBjdHJsKSkgeworKwkJaW50IHJldHZhbDI7CisrCQljb25zdCB2b2lkICp1dHR5bmFtZTsKKysJCXJldHZhbDIgPSBwYW1fZ2V0X2l0ZW0ocGFtaCwgUEFNX1RUWSwgJnV0dHluYW1lKTsKKysJCWlmIChyZXR2YWwyICE9IFBBTV9TVUNDRVNTIHx8IHV0dHluYW1lID09IE5VTEwpCisrCQkJcmV0dXJuIDA7CisrCisrCQlpZiAoX3BhbW1vZHV0aWxfdHR5X3NlY3VyZShwYW1oLCAoY29uc3QgY2hhciAqKXV0dHluYW1lKSAhPSBQQU1fU1VDQ0VTUykKKysJCQlyZXR1cm4gMDsKKysJfQorKworIAkvKiBVTklYIHBhc3N3b3JkcyBhcmVhICovCisgCisgCXJldHZhbCA9IGdldF9wd2RfaGFzaChwYW1oLCBuYW1lLCAmcHdkLCAmc2FsdCk7CitAQCAtNzY0LDcgKzc5NCw3IEBAIGludCBfdW5peF92ZXJpZnlfcGFzc3dvcmQocGFtX2hhbmRsZV90ICogcGFtaCwgY29uc3QgY2hhciAqbmFtZQorIAkJCX0KKyAJCX0KKyAJfSBlbHNlIHsKKy0JCXJldHZhbCA9IHZlcmlmeV9wd2RfaGFzaChwLCBzYWx0LCBvZmYoVU5JWF9fTk9OVUxMLCBjdHJsKSk7CisrCQlyZXR2YWwgPSB2ZXJpZnlfcHdkX2hhc2gocCwgc2FsdCwgX3VuaXhfYmxhbmtwYXNzd2QocGFtaCwgY3RybCwgbmFtZSkpOworIAl9CisgCisgCWlmIChyZXR2YWwgPT0gUEFNX1NVQ0NFU1MpIHsKK2RpZmYgLS1naXQgYS9tb2R1bGVzL3BhbV91bml4L3N1cHBvcnQuaCBiL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5oCitpbmRleCAzNzI5Y2UwLi40M2NkYmVhIDEwMDY0NAorLS0tIGEvbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmgKKysrKyBiL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5oCitAQCAtOTksOCArOTksOSBAQCB0eXBlZGVmIHN0cnVjdCB7CisgI2RlZmluZSBVTklYX01JTl9QQVNTX0xFTiAgICAgICAgMjcJLyogbWluIGxlbmd0aCBmb3IgcGFzc3dvcmQgKi8KKyAjZGVmaW5lIFVOSVhfUVVJRVQJCSAyOAkvKiBEb24ndCBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzICovCisgI2RlZmluZSBVTklYX0RFUyAgICAgICAgICAgICAgICAgMjkgICAgIC8qIERFUywgZGVmYXVsdCAqLworKyNkZWZpbmUgVU5JWF9OVUxMT0tfU0VDVVJFICAgICAgIDMwICAgICAvKiBOVUxMIHBhc3N3b3JkcyBhbGxvd2VkIG9ubHkgb24gc2VjdXJlIHR0eXMgKi8KKyAvKiAtLS0tLS0tLS0tLS0tLSAqLworLSNkZWZpbmUgVU5JWF9DVFJMU18gICAgICAgICAgICAgIDMwCS8qIG51bWJlciBvZiBjdHJsIGFyZ3VtZW50cyBkZWZpbmVkICovCisrI2RlZmluZSBVTklYX0NUUkxTXyAgICAgICAgICAgICAgMzEJLyogbnVtYmVyIG9mIGN0cmwgYXJndW1lbnRzIGRlZmluZWQgKi8KKyAKKyAjZGVmaW5lIFVOSVhfREVTX0NSWVBUKGN0cmwpCShvZmYoVU5JWF9NRDVfUEFTUyxjdHJsKSYmb2ZmKFVOSVhfQklHQ1JZUFQsY3RybCkmJm9mZihVTklYX1NIQTI1Nl9QQVNTLGN0cmwpJiZvZmYoVU5JWF9TSEE1MTJfUEFTUyxjdHJsKSYmb2ZmKFVOSVhfQkxPV0ZJU0hfUEFTUyxjdHJsKSkKKyAKK0BAIC0xMTgsNyArMTE5LDcgQEAgc3RhdGljIGNvbnN0IFVOSVhfQ3RybHMgdW5peF9hcmdzW1VOSVhfQ1RSTFNfXSA9CisgLyogVU5JWF9OT1RfU0VUX1BBU1MgKi8gICAgeyJub3Rfc2V0X3Bhc3MiLCAgICBfQUxMX09OXywgICAgICAgICAgICAgICAgMDEwMCwgMH0sCisgLyogVU5JWF9fUFJFTElNICovICAgICAgICAge05VTEwsICAgICAgICAgICAgICBfQUxMX09OX14oMDYwMCksICAgICAgICAgMDIwMCwgMH0sCisgLyogVU5JWF9fVVBEQVRFICovICAgICAgICAge05VTEwsICAgICAgICAgICAgICBfQUxMX09OX14oMDYwMCksICAgICAgICAgMDQwMCwgMH0sCistLyogVU5JWF9fTk9OVUxMICovICAgICAgICAge05VTEwsICAgICAgICAgICAgICBfQUxMX09OXywgICAgICAgICAgICAgICAwMTAwMCwgMH0sCisrLyogVU5JWF9fTk9OVUxMICovICAgICAgICAge05VTEwsICAgICAgICAgICAgICBfQUxMX09OX14oMDIwMDAwMDAwMDApLCAgIDAxMDAwLCAwfSwKKyAvKiBVTklYX19RVUlFVCAqLyAgICAgICAgICB7TlVMTCwgICAgICAgICAgICAgIF9BTExfT05fLCAgICAgICAgICAgICAgIDAyMDAwLCAwfSwKKyAvKiBVTklYX1VTRV9BVVRIVE9LICovICAgICB7InVzZV9hdXRodG9rIiwgICAgIF9BTExfT05fLCAgICAgICAgICAgICAgIDA0MDAwLCAwfSwKKyAvKiBVTklYX1NIQURPVyAqLyAgICAgICAgICB7InNoYWRvdyIsICAgICAgICAgIF9BTExfT05fLCAgICAgICAgICAgICAgMDEwMDAwLCAwfSwKK0BAIC0xMzksNiArMTQwLDcgQEAgc3RhdGljIGNvbnN0IFVOSVhfQ3RybHMgdW5peF9hcmdzW1VOSVhfQ1RSTFNfXSA9CisgLyogVU5JWF9NSU5fUEFTU19MRU4gKi8gICAgeyJtaW5sZW49IiwJCV9BTExfT05fLCAgICAgICAgIDA0MDAwMDAwMDAsIDB9LAorIC8qIFVOSVhfUVVJRVQgKi8gICAgICAgICAgIHsicXVpZXQiLCAgICAgICAgICAgX0FMTF9PTl8sICAgICAgICAgMDEwMDAwMDAwMDAsIDB9LAorIC8qIFVOSVhfREVTICovICAgICAgICAgICAgIHsiZGVzIiwgICAgICAgICAgICAgX0FMTF9PTl9eKDAyNjA0MjAwMDApLCAgICAgIDAsIDF9LAorKy8qIFVOSVhfTlVMTE9LX1NFQ1VSRSAqLyAgIHsibnVsbG9rX3NlY3VyZSIsICAgX0FMTF9PTl9eKDAxMDAwKSwgIDAyMDAwMDAwMDAwLCAwfSwKKyB9OworIAorICNkZWZpbmUgVU5JWF9ERUZBVUxUUyAgKHVuaXhfYXJnc1tVTklYX19OT05VTExdLmZsYWcpCitAQCAtMTcxLDYgKzE3Myw4IEBAIGV4dGVybiBpbnQgX3VuaXhfcmVhZF9wYXNzd29yZChwYW1faGFuZGxlX3QgKiBwYW1oCisgCQkJLGNvbnN0IGNoYXIgKnByb21wdDIKKyAJCQksY29uc3QgY2hhciAqZGF0YV9uYW1lCisgCQkJLGNvbnN0IHZvaWQgKipwYXNzKTsKKytleHRlcm4gaW50IF9wYW1tb2R1dGlsX3R0eV9zZWN1cmUoY29uc3QgcGFtX2hhbmRsZV90ICpwYW1oLAorKyAgICAgICAgIGNvbnN0IGNoYXIgKnV0dHluYW1lKTsKKyAKKyBleHRlcm4gaW50IF91bml4X3J1bl92ZXJpZnlfYmluYXJ5KHBhbV9oYW5kbGVfdCAqcGFtaCwKKyAJCQl1bnNpZ25lZCBpbnQgY3RybCwgY29uc3QgY2hhciAqdXNlciwgaW50ICpkYXlzbGVmdCk7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLWFjY291bnQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1hY2NvdW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNmIxNzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1hY2NvdW50CkBAIC0wLDAgKzEsMjUgQEAKKyMKKyMgL2V0Yy9wYW0uZC9jb21tb24tYWNjb3VudCAtIGF1dGhvcml6YXRpb24gc2V0dGluZ3MgY29tbW9uIHRvIGFsbCBzZXJ2aWNlcworIworIyBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgZnJvbSBvdGhlciBzZXJ2aWNlLXNwZWNpZmljIFBBTSBjb25maWcgZmlsZXMsCisjIGFuZCBzaG91bGQgY29udGFpbiBhIGxpc3Qgb2YgdGhlIGF1dGhvcml6YXRpb24gbW9kdWxlcyB0aGF0IGRlZmluZQorIyB0aGUgY2VudHJhbCBhY2Nlc3MgcG9saWN5IGZvciB1c2Ugb24gdGhlIHN5c3RlbS4gIFRoZSBkZWZhdWx0IGlzIHRvCisjIG9ubHkgZGVueSBzZXJ2aWNlIHRvIHVzZXJzIHdob3NlIGFjY291bnRzIGFyZSBleHBpcmVkIGluIC9ldGMvc2hhZG93LgorIworIyBBcyBvZiBwYW0gMS4wLjEtNiwgdGhpcyBmaWxlIGlzIG1hbmFnZWQgYnkgcGFtLWF1dGgtdXBkYXRlIGJ5IGRlZmF1bHQuCisjIFRvIHRha2UgYWR2YW50YWdlIG9mIHRoaXMsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbmZpZ3VyZSBhbnkKKyMgbG9jYWwgbW9kdWxlcyBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSBkZWZhdWx0IGJsb2NrLCBhbmQgdXNlCisjIHBhbS1hdXRoLXVwZGF0ZSB0byBtYW5hZ2Ugc2VsZWN0aW9uIG9mIG90aGVyIG1vZHVsZXMuICBTZWUKKyMgcGFtLWF1dGgtdXBkYXRlKDgpIGZvciBkZXRhaWxzLgorIworCisjIGhlcmUgYXJlIHRoZSBwZXItcGFja2FnZSBtb2R1bGVzICh0aGUgIlByaW1hcnkiIGJsb2NrKQorYWNjb3VudAlbc3VjY2Vzcz0xIG5ld19hdXRodG9rX3JlcWQ9ZG9uZSBkZWZhdWx0PWlnbm9yZV0JcGFtX3VuaXguc28gCisjIGhlcmUncyB0aGUgZmFsbGJhY2sgaWYgbm8gbW9kdWxlIHN1Y2NlZWRzCithY2NvdW50CXJlcXVpc2l0ZQkJCXBhbV9kZW55LnNvCisjIHByaW1lIHRoZSBzdGFjayB3aXRoIGEgcG9zaXRpdmUgcmV0dXJuIHZhbHVlIGlmIHRoZXJlIGlzbid0IG9uZSBhbHJlYWR5OworIyB0aGlzIGF2b2lkcyB1cyByZXR1cm5pbmcgYW4gZXJyb3IganVzdCBiZWNhdXNlIG5vdGhpbmcgc2V0cyBhIHN1Y2Nlc3MgY29kZQorIyBzaW5jZSB0aGUgbW9kdWxlcyBhYm92ZSB3aWxsIGVhY2gganVzdCBqdW1wIGFyb3VuZAorYWNjb3VudAlyZXF1aXJlZAkJCXBhbV9wZXJtaXQuc28KKyMgYW5kIGhlcmUgYXJlIG1vcmUgcGVyLXBhY2thZ2UgbW9kdWxlcyAodGhlICJBZGRpdGlvbmFsIiBibG9jaykKKyMgZW5kIG9mIHBhbS1hdXRoLXVwZGF0ZSBjb25maWcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLWF1dGggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1hdXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MGI2OWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1hdXRoCkBAIC0wLDAgKzEsMTggQEAKKyMKKyMgL2V0Yy9wYW0uZC9jb21tb24tYXV0aCAtIGF1dGhlbnRpY2F0aW9uIHNldHRpbmdzIGNvbW1vbiB0byBhbGwgc2VydmljZXMKKyMKKyMgVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGZyb20gb3RoZXIgc2VydmljZS1zcGVjaWZpYyBQQU0gY29uZmlnIGZpbGVzLAorIyBhbmQgc2hvdWxkIGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBhdXRoZW50aWNhdGlvbiBtb2R1bGVzIHRoYXQgZGVmaW5lCisjIHRoZSBjZW50cmFsIGF1dGhlbnRpY2F0aW9uIHNjaGVtZSBmb3IgdXNlIG9uIHRoZSBzeXN0ZW0KKyMgKGUuZy4sIC9ldGMvc2hhZG93LCBMREFQLCBLZXJiZXJvcywgZXRjLikuICBUaGUgZGVmYXVsdCBpcyB0byB1c2UgdGhlCisjIHRyYWRpdGlvbmFsIFVuaXggYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcy4KKworIyBoZXJlIGFyZSB0aGUgcGVyLXBhY2thZ2UgbW9kdWxlcyAodGhlICJQcmltYXJ5IiBibG9jaykKK2F1dGgJW3N1Y2Nlc3M9MSBkZWZhdWx0PWlnbm9yZV0JcGFtX3VuaXguc28gbnVsbG9rX3NlY3VyZQorIyBoZXJlJ3MgdGhlIGZhbGxiYWNrIGlmIG5vIG1vZHVsZSBzdWNjZWVkcworYXV0aAlyZXF1aXNpdGUJCQlwYW1fZGVueS5zbworIyBwcmltZSB0aGUgc3RhY2sgd2l0aCBhIHBvc2l0aXZlIHJldHVybiB2YWx1ZSBpZiB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeTsKKyMgdGhpcyBhdm9pZHMgdXMgcmV0dXJuaW5nIGFuIGVycm9yIGp1c3QgYmVjYXVzZSBub3RoaW5nIHNldHMgYSBzdWNjZXNzIGNvZGUKKyMgc2luY2UgdGhlIG1vZHVsZXMgYWJvdmUgd2lsbCBlYWNoIGp1c3QganVtcCBhcm91bmQKK2F1dGgJcmVxdWlyZWQJCQlwYW1fcGVybWl0LnNvCisjIGFuZCBoZXJlIGFyZSBtb3JlIHBlci1wYWNrYWdlIG1vZHVsZXMgKHRoZSAiQWRkaXRpb25hbCIgYmxvY2spCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1wYXNzd29yZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLXBhc3N3b3JkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4OTYwNTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1wYXNzd29yZApAQCAtMCwwICsxLDI2IEBACisjCisjIC9ldGMvcGFtLmQvY29tbW9uLXBhc3N3b3JkIC0gcGFzc3dvcmQtcmVsYXRlZCBtb2R1bGVzIGNvbW1vbiB0byBhbGwgc2VydmljZXMKKyMKKyMgVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGZyb20gb3RoZXIgc2VydmljZS1zcGVjaWZpYyBQQU0gY29uZmlnIGZpbGVzLAorIyBhbmQgc2hvdWxkIGNvbnRhaW4gYSBsaXN0IG9mIG1vZHVsZXMgdGhhdCBkZWZpbmUgdGhlIHNlcnZpY2VzIHRvIGJlCisjIHVzZWQgdG8gY2hhbmdlIHVzZXIgcGFzc3dvcmRzLiAgVGhlIGRlZmF1bHQgaXMgcGFtX3VuaXguCisKKyMgRXhwbGFuYXRpb24gb2YgcGFtX3VuaXggb3B0aW9uczoKKyMKKyMgVGhlICJzaGE1MTIiIG9wdGlvbiBlbmFibGVzIHNhbHRlZCBTSEE1MTIgcGFzc3dvcmRzLiAgV2l0aG91dCB0aGlzIG9wdGlvbiwKKyMgdGhlIGRlZmF1bHQgaXMgVW5peCBjcnlwdC4gIFByaW9yIHJlbGVhc2VzIHVzZWQgdGhlIG9wdGlvbiAibWQ1Ii4KKyMKKyMgVGhlICJvYnNjdXJlIiBvcHRpb24gcmVwbGFjZXMgdGhlIG9sZCBgT0JTQ1VSRV9DSEVDS1NfRU5BQicgb3B0aW9uIGluCisjIGxvZ2luLmRlZnMuCisjCisjIFNlZSB0aGUgcGFtX3VuaXggbWFucGFnZSBmb3Igb3RoZXIgb3B0aW9ucy4KKworIyBoZXJlIGFyZSB0aGUgcGVyLXBhY2thZ2UgbW9kdWxlcyAodGhlICJQcmltYXJ5IiBibG9jaykKK3Bhc3N3b3JkCVtzdWNjZXNzPTEgZGVmYXVsdD1pZ25vcmVdCXBhbV91bml4LnNvIG9ic2N1cmUgc2hhNTEyCisjIGhlcmUncyB0aGUgZmFsbGJhY2sgaWYgbm8gbW9kdWxlIHN1Y2NlZWRzCitwYXNzd29yZAlyZXF1aXNpdGUJCQlwYW1fZGVueS5zbworIyBwcmltZSB0aGUgc3RhY2sgd2l0aCBhIHBvc2l0aXZlIHJldHVybiB2YWx1ZSBpZiB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeTsKKyMgdGhpcyBhdm9pZHMgdXMgcmV0dXJuaW5nIGFuIGVycm9yIGp1c3QgYmVjYXVzZSBub3RoaW5nIHNldHMgYSBzdWNjZXNzIGNvZGUKKyMgc2luY2UgdGhlIG1vZHVsZXMgYWJvdmUgd2lsbCBlYWNoIGp1c3QganVtcCBhcm91bmQKK3Bhc3N3b3JkCXJlcXVpcmVkCQkJcGFtX3Blcm1pdC5zbworIyBhbmQgaGVyZSBhcmUgbW9yZSBwZXItcGFja2FnZSBtb2R1bGVzICh0aGUgIkFkZGl0aW9uYWwiIGJsb2NrKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9jb21tb24tc2Vzc2lvbiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLXNlc3Npb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRhNTUxZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLXNlc3Npb24KQEAgLTAsMCArMSwxOSBAQAorIworIyAvZXRjL3BhbS5kL2NvbW1vbi1zZXNzaW9uIC0gc2Vzc2lvbi1yZWxhdGVkIG1vZHVsZXMgY29tbW9uIHRvIGFsbCBzZXJ2aWNlcworIworIyBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgZnJvbSBvdGhlciBzZXJ2aWNlLXNwZWNpZmljIFBBTSBjb25maWcgZmlsZXMsCisjIGFuZCBzaG91bGQgY29udGFpbiBhIGxpc3Qgb2YgbW9kdWxlcyB0aGF0IGRlZmluZSB0YXNrcyB0byBiZSBwZXJmb3JtZWQKKyMgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2Ygc2Vzc2lvbnMgb2YgKmFueSoga2luZCAoYm90aCBpbnRlcmFjdGl2ZSBhbmQKKyMgbm9uLWludGVyYWN0aXZlKS4KKyMKKworIyBoZXJlIGFyZSB0aGUgcGVyLXBhY2thZ2UgbW9kdWxlcyAodGhlICJQcmltYXJ5IiBibG9jaykKK3Nlc3Npb24JW2RlZmF1bHQ9MV0JCQlwYW1fcGVybWl0LnNvCisjIGhlcmUncyB0aGUgZmFsbGJhY2sgaWYgbm8gbW9kdWxlIHN1Y2NlZWRzCitzZXNzaW9uCXJlcXVpc2l0ZQkJCXBhbV9kZW55LnNvCisjIHByaW1lIHRoZSBzdGFjayB3aXRoIGEgcG9zaXRpdmUgcmV0dXJuIHZhbHVlIGlmIHRoZXJlIGlzbid0IG9uZSBhbHJlYWR5OworIyB0aGlzIGF2b2lkcyB1cyByZXR1cm5pbmcgYW4gZXJyb3IganVzdCBiZWNhdXNlIG5vdGhpbmcgc2V0cyBhIHN1Y2Nlc3MgY29kZQorIyBzaW5jZSB0aGUgbW9kdWxlcyBhYm92ZSB3aWxsIGVhY2gganVzdCBqdW1wIGFyb3VuZAorc2Vzc2lvbglyZXF1aXJlZAkJCXBhbV9wZXJtaXQuc28KKyMgYW5kIGhlcmUgYXJlIG1vcmUgcGVyLXBhY2thZ2UgbW9kdWxlcyAodGhlICJBZGRpdGlvbmFsIiBibG9jaykKK3Nlc3Npb24JcmVxdWlyZWQJcGFtX3VuaXguc28KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1zZXNzaW9uLW5vbmludGVyYWN0aXZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMTBiYjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1zZXNzaW9uLW5vbmludGVyYWN0aXZlCkBAIC0wLDAgKzEsMTkgQEAKKyMKKyMgL2V0Yy9wYW0uZC9jb21tb24tc2Vzc2lvbi1ub25pbnRlcmFjdGl2ZSAtIHNlc3Npb24tcmVsYXRlZCBtb2R1bGVzCisjIGNvbW1vbiB0byBhbGwgbm9uLWludGVyYWN0aXZlIHNlcnZpY2VzCisjCisjIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCBmcm9tIG90aGVyIHNlcnZpY2Utc3BlY2lmaWMgUEFNIGNvbmZpZyBmaWxlcywKKyMgYW5kIHNob3VsZCBjb250YWluIGEgbGlzdCBvZiBtb2R1bGVzIHRoYXQgZGVmaW5lIHRhc2tzIHRvIGJlIHBlcmZvcm1lZAorIyBhdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiBhbGwgbm9uLWludGVyYWN0aXZlIHNlc3Npb25zLgorIworCisjIGhlcmUgYXJlIHRoZSBwZXItcGFja2FnZSBtb2R1bGVzICh0aGUgIlByaW1hcnkiIGJsb2NrKQorc2Vzc2lvbglbZGVmYXVsdD0xXQkJCXBhbV9wZXJtaXQuc28KKyMgaGVyZSdzIHRoZSBmYWxsYmFjayBpZiBubyBtb2R1bGUgc3VjY2VlZHMKK3Nlc3Npb24JcmVxdWlzaXRlCQkJcGFtX2Rlbnkuc28KKyMgcHJpbWUgdGhlIHN0YWNrIHdpdGggYSBwb3NpdGl2ZSByZXR1cm4gdmFsdWUgaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHk7CisjIHRoaXMgYXZvaWRzIHVzIHJldHVybmluZyBhbiBlcnJvciBqdXN0IGJlY2F1c2Ugbm90aGluZyBzZXRzIGEgc3VjY2VzcyBjb2RlCisjIHNpbmNlIHRoZSBtb2R1bGVzIGFib3ZlIHdpbGwgZWFjaCBqdXN0IGp1bXAgYXJvdW5kCitzZXNzaW9uCXJlcXVpcmVkCQkJcGFtX3Blcm1pdC5zbworIyBhbmQgaGVyZSBhcmUgbW9yZSBwZXItcGFja2FnZSBtb2R1bGVzICh0aGUgIkFkZGl0aW9uYWwiIGJsb2NrKQorc2Vzc2lvbglyZXF1aXJlZAlwYW1fdW5peC5zbyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvb3RoZXIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL290aGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjOTcwZWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL290aGVyCkBAIC0wLDAgKzEsMjQgQEAKKyMKKyMgL2V0Yy9wYW0uZC9vdGhlciAtIHNwZWNpZnkgdGhlIFBBTSBmYWxsYmFjayBiZWhhdmlvdXIKKyMKKyMgTm90ZSB0aGF0IHRoaXMgZmlsZSBpcyB1c2VkIGZvciBhbnkgdW5zcGVjaWZpZWQgc2VydmljZTsgZm9yIGV4YW1wbGUKKyNpZiAvZXRjL3BhbS5kL2Nyb24gIHNwZWNpZmllcyBubyBzZXNzaW9uIG1vZHVsZXMgYnV0IGNyb24gY2FsbHMKKyNwYW1fb3Blbl9zZXNzaW9uLCB0aGUgc2Vzc2lvbiBtb2R1bGUgb3V0IG9mIC9ldGMvcGFtLmQvb3RoZXIgaXMKKyN1c2VkLiAgCisKKyMgV2UgdXNlIHBhbV93YXJuLnNvIHRvIGdlbmVyYXRlIHN5c2xvZyBub3RlcyB0aGF0IHRoZSAnb3RoZXInCisjZmFsbGJhY2sgcnVsZXMgYXJlIGJlaW5nIHVzZWQgKGFzIGEgaGludCB0byBzdWdnZXN0IHlvdSBzaG91bGQgc2V0dXAKKyNzcGVjaWZpYyBQQU0gcnVsZXMgZm9yIHRoZSBzZXJ2aWNlIGFuZCBhaWQgdG8gZGVidWdnaW5nKS4gVGhlbiB0byBiZQorI3NlY3VyZSwgZGVueSBhY2Nlc3MgdG8gYWxsIHNlcnZpY2VzIGJ5IGRlZmF1bHQuIAorCithdXRoICAgICAgIHJlcXVpcmVkICAgICBwYW1fd2Fybi5zbworYXV0aCAgICAgICByZXF1aXJlZCAgICAgcGFtX2Rlbnkuc28KKworYWNjb3VudCAgICByZXF1aXJlZCAgICAgcGFtX3dhcm4uc28KK2FjY291bnQgICAgcmVxdWlyZWQgICAgIHBhbV9kZW55LnNvCisKK3Bhc3N3b3JkICAgcmVxdWlyZWQgICAgIHBhbV93YXJuLnNvCitwYXNzd29yZCAgIHJlcXVpcmVkICAgICBwYW1fZGVueS5zbworCitzZXNzaW9uICAgIHJlcXVpcmVkICAgICBwYW1fd2Fybi5zbworc2Vzc2lvbiAgICByZXF1aXJlZCAgICAgcGFtX2Rlbnkuc28KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW1fMS4yLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtXzEuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMzA5N2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtXzEuMi4xLmJiCkBAIC0wLDAgKzEsMTY5IEBACitTVU1NQVJZID0gIkxpbnV4LVBBTSAoUGx1Z2dhYmxlIEF1dGhlbnRpY2F0aW9uIE1vZHVsZXMpIgorREVTQ1JJUFRJT04gPSAiTGludXgtUEFNIChQbHVnZ2FibGUgQXV0aGVudGljYXRpb24gTW9kdWxlcyBmb3IgTGludXgpLCBhIGZsZXhpYmxlIG1lY2hhbmlzbSBmb3IgYXV0aGVudGljYXRpbmcgdXNlcnMiCitIT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvbGludXgtcGFtLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL2xpbnV4LXBhbS9uZXd0aWNrZXQiCitTRUNUSU9OID0gImJhc2UiCisjIFBBTSBpcyBkdWFsIGxpY2Vuc2VkIHVuZGVyIEdQTCBhbmQgQlNELgorIyAvZXRjL3BhbS5kIGNvbWVzIGZyb20gRGViaWFuIGxpYnBhbS1ydW50aW1lIGluIDIwMDktMTEgKGF0IHRoYXQgdGltZQorIyBsaWJwYW0tcnVudGltZS0xLjAuMSBpcyBHUEx2MispLCBieSBvcGVuZW1iZWRkZWQKK0xJQ0VOU0UgPSAiR1BMdjIrIHwgQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2ViNWMxYmY4NTRlODg4MTAwNWQ2NzM1OTllZTc0ZDMiCisKK1NSQ19VUkkgPSAiaHR0cDovL2xpbnV4LXBhbS5vcmcvbGlicmFyeS9MaW51eC1QQU0tJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly85OV9wYW0gXAorICAgICAgICAgICBmaWxlOi8vcGFtLmQvY29tbW9uLWFjY291bnQgXAorICAgICAgICAgICBmaWxlOi8vcGFtLmQvY29tbW9uLWF1dGggXAorICAgICAgICAgICBmaWxlOi8vcGFtLmQvY29tbW9uLXBhc3N3b3JkIFwKKyAgICAgICAgICAgZmlsZTovL3BhbS5kL2NvbW1vbi1zZXNzaW9uIFwKKyAgICAgICAgICAgZmlsZTovL3BhbS5kL2NvbW1vbi1zZXNzaW9uLW5vbmludGVyYWN0aXZlIFwKKyAgICAgICAgICAgZmlsZTovL3BhbS5kL290aGVyIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnBhbS14dGVzdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4c2VwYnVpbGQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGFtLXNlY3VyaXR5LWFic3RyYWN0LXNlY3VyZXR0eS1oYW5kbGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wYW0tdW5peC1udWxsb2stc2VjdXJlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnBhbS14dGVzdHMtcmVtb3ZlLWJhc2gtZGVwZW5kZW5jeS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jcnlwdF9jb25maWd1cmUucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjlkYzUzMDY3NTU2ZDJkZDU2NzgwOGZkNTA5NTE5ZGQ2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjM0MmIxMjExYzBkM2IyMDNhN2RmMjU0MGE1YjAzYTQyOGEwODdiZDhhNDhjMTdlNDlhZTI2OGY5OTJiMzM0ZDkiCisKK1NSQ19VUklfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiBmaWxlOi8vcGFtLW5vLWlubmV0Z3IucGF0Y2giCitTUkNfVVJJX2FwcGVuZF9saWJjLW11c2wgPSAiIGZpbGU6Ly9wYW0tbm8taW5uZXRnci5wYXRjaCIKKworREVQRU5EUyA9ICJiaXNvbiBmbGV4IGZsZXgtbmF0aXZlIGNyYWNrbGliIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWRiLXVuaXF1ZW5hbWU9X3BhbSBcCisgICAgICAgICAgICAgICAgLS1pbmNsdWRlZGlyPSR7aW5jbHVkZWRpcn0vc2VjdXJpdHkgXAorICAgICAgICAgICAgICAgIC0tbGliZGlyPSR7YmFzZV9saWJkaXJ9IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtbmlzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtcmVnZW5lcmF0ZS1kb2N1IFwKKwkJLS1kaXNhYmxlLXByZWx1ZGUiCisKK0NGTEFHU19hcHBlbmQgPSAiIC1mUElDICIKKworUFIgPSAicjUiCisKK1MgPSAiJHtXT1JLRElSfS9MaW51eC1QQU0tJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCisKK1BBQ0tBR0VDT05GSUdbYXVkaXRdID0gIi0tZW5hYmxlLWF1ZGl0LC0tZGlzYWJsZS1hdWRpdCxhdWRpdCwiCisKK1BBQ0tBR0VTICs9ICIke1BOfS1ydW50aW1lICR7UE59LXh0ZXN0cyIKK0ZJTEVTXyR7UE59ID0gIiR7YmFzZV9saWJkaXJ9L2xpYioke1NPTElCU30iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5Ly5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5L3BhbV9maWx0ZXIvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9MaW51eC1QQU0veHRlc3RzLy5kZWJ1ZyIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2Jhc2VfbGliZGlyfS9zZWN1cml0eS8qLmxhICR7YmFzZV9saWJkaXJ9LyoubGEgJHtiYXNlX2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSIKK0ZJTEVTXyR7UE59LXJ1bnRpbWUgPSAiJHtzeXNjb25mZGlyfSIKK0ZJTEVTXyR7UE59LXh0ZXN0cyA9ICIke2RhdGFkaXJ9L0xpbnV4LVBBTS94dGVzdHMiCisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl4ke01MUFJFRklYfXBhbS1wbHVnaW4tLioiCisKK2RlZiBnZXRfbXVsdGlsaWJfYml0KGQpOgorICAgIGJhc2VsaWIgPSBkLmdldFZhcignYmFzZWxpYicsIFRydWUpIG9yICcnCisgICAgcmV0dXJuIGJhc2VsaWIucmVwbGFjZSgnbGliJywgJycpCisKK2xpYnBhbV9zdWZmaXggPSAic3VmZml4JHtAZ2V0X211bHRpbGliX2JpdChkKX0iCisKK1JQUk9WSURFU18ke1BOfSArPSAiJHtQTn0tJHtsaWJwYW1fc3VmZml4fSIKK1JQUk9WSURFU18ke1BOfS1ydW50aW1lICs9ICIke1BOfS1ydW50aW1lLSR7bGlicGFtX3N1ZmZpeH0iCisKK1JERVBFTkRTXyR7UE59LXJ1bnRpbWUgPSAiJHtQTn0tJHtsaWJwYW1fc3VmZml4fSBcCisgICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLWRlbnktJHtsaWJwYW1fc3VmZml4fSBcCisgICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLXBlcm1pdC0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4td2Fybi0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tdW5peC0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAiCitSREVQRU5EU18ke1BOfS14dGVzdHMgPSAiJHtQTn0tJHtsaWJwYW1fc3VmZml4fSBcCisgICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLWFjY2Vzcy0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tZGVidWctJHtsaWJwYW1fc3VmZml4fSBcCisgICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLWNyYWNrbGliLSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi1wd2hpc3RvcnktJHtsaWJwYW1fc3VmZml4fSBcCisgICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLXN1Y2NlZWQtaWYtJHtsaWJwYW1fc3VmZml4fSBcCisgICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLXRpbWUtJHtsaWJwYW1fc3VmZml4fSBcCisgICAgY29yZXV0aWxzIgorCisjIEZJWE1FOiBOYXRpdmUgc3VmZml4IGJyZWFrcyBoZXJlLCBkaXNhYmxlIGl0IGZvciBub3cKK1JSRUNPTU1FTkRTXyR7UE59ID0gIiR7UE59LXJ1bnRpbWUtJHtsaWJwYW1fc3VmZml4fSIKK1JSRUNPTU1FTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBkZWYgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZShwbiwgZGlyLCBmaWxlKToKKyAgICAgICAgbmYgPSBvcy5wYXRoLmpvaW4oZGlyLCBmaWxlKQorICAgICAgICBvZiA9IGQuZ2V0VmFyKCdGSUxFU18nICsgcG4sIFRydWUpCisgICAgICAgIGlmIG9mOgorICAgICAgICAgICAgbmYgPSBvZiArICIgIiArIG5mCisgICAgICAgIGQuc2V0VmFyKCdGSUxFU18nICsgcG4sIG5mKQorCisgICAgZGVmIHBhbV9wbHVnaW5faG9vayhmaWxlLCBwa2csIHBhdHRlcm4sIGZvcm1hdCwgYmFzZW5hbWUpOgorICAgICAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgIGxpYnBhbV9zdWZmaXggPSBkLmdldFZhcignbGlicGFtX3N1ZmZpeCcsIFRydWUpCisKKyAgICAgICAgcmRlcHMgPSBkLmdldFZhcignUkRFUEVORFNfJyArIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgcmRlcHM6CisgICAgICAgICAgICByZGVwcyA9IHJkZXBzICsgIiAiICsgcG4gKyAiLSIgKyBsaWJwYW1fc3VmZml4CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZGVwcyA9IHBuICsgIi0iICsgbGlicGFtX3N1ZmZpeAorICAgICAgICBkLnNldFZhcignUkRFUEVORFNfJyArIHBrZywgcmRlcHMpCisKKyAgICAgICAgcHJvdmlkZXMgPSBkLmdldFZhcignUlBST1ZJREVTXycgKyBwa2csIFRydWUpCisgICAgICAgIGlmIHByb3ZpZGVzOgorICAgICAgICAgICAgcHJvdmlkZXMgPSBwcm92aWRlcyArICIgIiArIHBrZyArICItIiArIGxpYnBhbV9zdWZmaXgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByb3ZpZGVzID0gcGtnICsgIi0iICsgbGlicGFtX3N1ZmZpeAorICAgICAgICBkLnNldFZhcignUlBST1ZJREVTXycgKyBwa2csIHByb3ZpZGVzKQorCisgICAgbWxwcmVmaXggPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKSBvciAnJworICAgIGR2YXIgPSBiYi5kYXRhLmV4cGFuZCgnJHtXT1JLRElSfS9wYWNrYWdlJywgZCwgVHJ1ZSkKKyAgICBwYW1fbGliZGlyID0gZC5leHBhbmQoJyR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5JykKKyAgICBwYW1fc2JpbmRpciA9IGQuZXhwYW5kKCcke3NiaW5kaXJ9JykKKyAgICBwYW1fZmlsdGVyZGlyID0gZC5leHBhbmQoJyR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5L3BhbV9maWx0ZXInKQorICAgIHBhbV9wa2duYW1lID0gbWxwcmVmaXggKyAncGFtLXBsdWdpbiVzJworCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcGFtX2xpYmRpciwgJ15wYW0oLiopXC5zbyQnLCBwYW1fcGtnbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAnUEFNIHBsdWdpbiBmb3IgJXMnLCBob29rPXBhbV9wbHVnaW5faG9vaywgZXh0cmFfZGVwZW5kcz0nJykKKyAgICBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKCclc3BhbS1wbHVnaW4tdW5peCcgJSBtbHByZWZpeCwgcGFtX3NiaW5kaXIsICd1bml4X2Noa3B3ZCcpCisgICAgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZSgnJXNwYW0tcGx1Z2luLXVuaXgnICUgbWxwcmVmaXgsIHBhbV9zYmluZGlyLCAndW5peF91cGRhdGUnKQorICAgIHBhbV9wbHVnaW5fYXBwZW5kX2ZpbGUoJyVzcGFtLXBsdWdpbi10YWxseScgJSBtbHByZWZpeCwgcGFtX3NiaW5kaXIsICdwYW1fdGFsbHknKQorICAgIHBhbV9wbHVnaW5fYXBwZW5kX2ZpbGUoJyVzcGFtLXBsdWdpbi10YWxseTInICUgbWxwcmVmaXgsIHBhbV9zYmluZGlyLCAncGFtX3RhbGx5MicpCisgICAgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZSgnJXNwYW0tcGx1Z2luLXRpbWVzdGFtcCcgJSBtbHByZWZpeCwgcGFtX3NiaW5kaXIsICdwYW1fdGltZXN0YW1wX2NoZWNrJykKKyAgICBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKCclc3BhbS1wbHVnaW4tbWtob21lZGlyJyAlIG1scHJlZml4LCBwYW1fc2JpbmRpciwgJ21raG9tZWRpcl9oZWxwZXInKQorICAgIHBhbV9wbHVnaW5fYXBwZW5kX2ZpbGUoJyVzcGFtLXBsdWdpbi1jb25zb2xlJyAlIG1scHJlZml4LCBwYW1fc2JpbmRpciwgJ3BhbV9jb25zb2xlX2FwcGx5JykKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBwYW1fZmlsdGVyZGlyLCAnXiguKikkJywgJ3BhbS1maWx0ZXItJXMnLCAnUEFNIGZpbHRlciBmb3IgJXMnLCBleHRyYV9kZXBlbmRzPScnKQorfQorCitkb19pbnN0YWxsKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwkjIGRvbid0IGluc3RhbGwgL3Zhci9ydW4gd2hlbiBwb3B1bGF0aW5nIHJvb3Rmcy4gRG8gaXQgdGhyb3VnaCB2b2xhdGlsZQorCXJtIC1yZiAke0R9JHtsb2NhbHN0YXRlZGlyfQorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS85OV9wYW0gJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcGFtLmQvCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcGFtLmQvKiAke0R9JHtzeXNjb25mZGlyfS9wYW0uZC8KKworCSMgVGhlIGxzYiByZXF1aXJlcyB1bml4X2Noa3B3ZCBoYXMgc2V0dWlkIHBlcm1pc3Npb24KKwljaG1vZCA0NzU1ICR7RH0ke3NiaW5kaXJ9L3VuaXhfY2hrcHdkCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWVjaG8gInNlc3Npb24gb3B0aW9uYWwgcGFtX3N5c3RlbWQuc28iID4+ICR7RH0ke3N5c2NvbmZkaXJ9L3BhbS5kL2NvbW1vbi1zZXNzaW9uCisJZmkKK30KKworcHl0aG9uIGRvX3BhbV9zYW5pdHkgKCkgeworICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgYmIud2FybigiQnVpbGRpbmcgbGlicGFtIGJ1dCAncGFtJyBpc24ndCBpbiBESVNUUk9fRkVBVFVSRVMsIFBBTSB3b24ndCB3b3JrIGNvcnJlY3RseSIpCit9CithZGR0YXNrIHBhbV9zYW5pdHkgYmVmb3JlIGRvX2NvbmZpZ3VyZQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayBuYXRpdmUiCisKK0NPTkZGSUxFU18ke1BOfS1ydW50aW1lICs9ICIke3N5c2NvbmZkaXJ9L3BhbS5kL2NvbW1vbi1zZXNzaW9uIgorQ09ORkZJTEVTXyR7UE59LXJ1bnRpbWUgKz0gIiR7c3lzY29uZmRpcn0vcGFtLmQvY29tbW9uLWF1dGgiCitDT05GRklMRVNfJHtQTn0tcnVudGltZSArPSAiJHtzeXNjb25mZGlyfS9wYW0uZC9jb21tb24tcGFzc3dvcmQiCitDT05GRklMRVNfJHtQTn0tcnVudGltZSArPSAiJHtzeXNjb25mZGlyfS9wYW0uZC9jb21tb24tc2Vzc2lvbi1ub25pbnRlcmFjdGl2ZSIKK0NPTkZGSUxFU18ke1BOfS1ydW50aW1lICs9ICIke3N5c2NvbmZkaXJ9L3BhbS5kL2NvbW1vbi1hY2NvdW50IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzLzAwMDEtSW5jbHVkZS1mY250bC5oLWluLXBsYXRmb3JtX2RlZnMuaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy8wMDAxLUluY2x1ZGUtZmNudGwuaC1pbi1wbGF0Zm9ybV9kZWZzLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAzNzZjZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy8wMDAxLUluY2x1ZGUtZmNudGwuaC1pbi1wbGF0Zm9ybV9kZWZzLmgucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSBkNzhkZDA4N2M0ZWM0NzE1YWFiNWZlMTE1NjY4ZTcyNjA0NmVjZDc2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTg6MTY6MDUgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gSW5jbHVkZSBmY250bC5oIGluIC9wbGF0Zm9ybV9kZWZzLmgKKworZXhwb3NlZCB3aGVuIGNvbXBpbGluZyB1c2luZyBtdXNsCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGlicGFydGVkL2ZzL3hmcy9wbGF0Zm9ybV9kZWZzLmggfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2xpYnBhcnRlZC9mcy94ZnMvcGxhdGZvcm1fZGVmcy5oIGIvbGlicGFydGVkL2ZzL3hmcy9wbGF0Zm9ybV9kZWZzLmgKK2luZGV4IDJiNTU3NTIuLjMyYmQzZDMgMTAwNjQ0CistLS0gYS9saWJwYXJ0ZWQvZnMveGZzL3BsYXRmb3JtX2RlZnMuaAorKysrIGIvbGlicGFydGVkL2ZzL3hmcy9wbGF0Zm9ybV9kZWZzLmgKK0BAIC00Miw2ICs0Miw3IEBACisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTFhNGJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL2dudWxpYi5tayBiL2xpYi9nbnVsaWIubWsKK2luZGV4IGUxZDc0ZGIuLmMwZTkyZGQgMTAwNjQ0CistLS0gYS9saWIvZ251bGliLm1rCisrKysgYi9saWIvZ251bGliLm1rCitAQCAtMTg4Miw3ICsxODgyLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL01ha2VmaWxlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlOTBiZTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvTWFrZWZpbGUKQEAgLTAsMCArMSwyODUgQEAKK2FtX190dHlfY29sb3JzX2R1bW15ID0gXAorICBtZ249IHJlZD0gZ3JuPSBsZ249IGJsdT0gYnJnPSBzdGQ9OyBcCisgIGFtX19jb2xvcl90ZXN0cz1ubworCithbV9fdHR5X2NvbG9ycyA9IFwKKyQoYW1fX3R0eV9jb2xvcnNfZHVtbXkpOyBcCit0ZXN0ICJYJChBTV9DT0xPUl9URVNUUykiICE9IFhubyBcCismJiB0ZXN0ICJYJCRURVJNIiAhPSBYZHVtYiBcCismJiB7IHRlc3QgIlgkKEFNX0NPTE9SX1RFU1RTKSIgPSBYYWx3YXlzIHx8IHRlc3QgLXQgMSAyPi9kZXYvbnVsbDsgfSBcCismJiB7IFwKKyAgYW1fX2NvbG9yX3Rlc3RzPXllczsgXAorICByZWQ9JxtbMDszMW0nOyBcCisgIGdybj0nG1swOzMybSc7IFwKKyAgbGduPScbWzE7MzJtJzsgXAorICBibHU9JxtbMTszNG0nOyBcCisgIG1nbj0nG1swOzM1bSc7IFwKKyAgYnJnPScbWzFtJzsgXAorICBzdGQ9JxtbbSc7IFwKK30KKworYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fcnN0X3RpdGxlID0geyBzZWQgJ3MvLiovICAgJiAgIC87aDtzLy4vPS9nO3A7eDtzLyAqJCQvLztwO2cnICYmIGVjaG87IH0KK2FtX19yc3Rfc2VjdGlvbiA9IHsgc2VkICdwO3MvLi89L2c7JyAmJiBlY2hvOyB9CithbV9fc2hfZV9zZXR1cCA9IGNhc2UgJCQtIGluICplKikgc2V0ICtlOzsgZXNhYworCithbV9fY29tbW9uX2RyaXZlcl9mbGFncyA9IFwKKyAgLS1jb2xvci10ZXN0cyAiJCRhbV9fY29sb3JfdGVzdHMiIFwKKyAgLS1lbmFibGUtaGFyZC1lcnJvcnMgIiQkYW1fX2VuYWJsZV9oYXJkX2Vycm9ycyIgXAorICAtLWV4cGVjdC1mYWlsdXJlICIkJGFtX19leHBlY3RfZmFpbHVyZSIKK2FtX19jaGVja19wcmUgPSBcCiskKGFtX19zaF9lX3NldHVwKTsJCQkJCVwKKyQoYW1fX3ZwYXRoX2Fkal9zZXR1cCkgJChhbV9fdnBhdGhfYWRqKQkJCVwKKyQoYW1fX3R0eV9jb2xvcnMpOwkJCQkJXAorc3JjZGlyPSQoc3JjZGlyKTsgZXhwb3J0IHNyY2RpcjsJCQlcCithbV9fb2Rpcj1gZWNobyAiLi8kQCIgfCBzZWQgJ3N8L1teL10qJCR8fCdgOwkJXAordGVzdCAieCQkYW1fX29kaXIiID0geC4gfHwgJChNS0RJUl9QKSAiJCRhbV9fb2RpciIgfHwgZXhpdCAkJD87CVwKK2lmIHRlc3QgLWYgIi4vJCRmIjsgdGhlbiBkaXI9Li87CQkJXAorZWxpZiB0ZXN0IC1mICIkJGYiOyB0aGVuIGRpcj07CQkJCVwKK2Vsc2UgZGlyPSIkKHNyY2RpcikvIjsgZmk7CQkJCVwKK3RzdD0kJGRpciQkZjsgbG9nPSckQCc7IAkJCQlcCitpZiB0ZXN0IC1uICckKERJU0FCTEVfSEFSRF9FUlJPUlMpJzsgdGhlbgkJXAorICBhbV9fZW5hYmxlX2hhcmRfZXJyb3JzPW5vOyAJCQkJXAorZWxzZQkJCQkJCQlcCisgIGFtX19lbmFibGVfaGFyZF9lcnJvcnM9eWVzOyAJCQkJXAorZmk7IAkJCQkJCQlcCiskKEFNX1RFU1RTX0VOVklST05NRU5UKSAkKFRFU1RTX0VOVklST05NRU5UKQorCithbV9fc2V0X1RFU1RTX2Jhc2VzID0gXAorICBiYXNlcz0nJChURVNUX0xPR1MpJzsgXAorICBiYXNlcz1gZm9yIGkgaW4gJCRiYXNlczsgZG8gZWNobyAkJGk7IGRvbmUgfCBzZWQgJ3MvXC5sb2ckJC8vJ2A7IFwKKyAgYmFzZXM9YGVjaG8gJCRiYXNlc2AKKworUkVDSEVDS19MT0dTID0gJChURVNUX0xPR1MpCitURVNUX1NVSVRFX0xPRyA9IHRlc3Qtc3VpdGUubG9nCithbV9fdGVzdF9sb2dzMSA9ICQoVEVTVFM6PS5sb2cpCithbV9fdGVzdF9sb2dzMiA9ICQoYW1fX3Rlc3RfbG9nczE6LmxvZz0ubG9nKQorVEVTVF9MT0dTID0gJChhbV9fdGVzdF9sb2dzMjouc2gubG9nPS5sb2cpCitTSF9MT0dfRFJJVkVSID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvdGVzdC1kcml2ZXIKK1NIX0xPR19DT01QSUxFID0gJChTSF9MT0dfQ09NUElMRVIpCisKK2FtX19zZXRfYiA9IFwKKyAgY2FzZSAnJEAnIGluIFwKKyAgICAqLyopIFwKKyAgICAgIGNhc2UgJyQqJyBpbiBcCisgICAgICAgICovKikgYj0nJConOzsgXAorICAgICAgICAgICopIGI9YGVjaG8gJyRAJyB8IHNlZCAncy9cLmxvZyQkLy8nYDsgXAorICAgICAgIGVzYWM7OyBcCisgICAgKikgXAorICAgICAgYj0nJConOzsgXAorICBlc2FjCisKK01LRElSX1AgPSAvYmluL21rZGlyIC1wCitTSEVMTCA9IC9iaW4vYmFzaAorVkVSU0lPTiA9IDMuMQorUEFDS0FHRV9TVFJJTkcgPSBHTlUgcGFydGVkIDMuMQorUEFDS0FHRV9CVUdSRVBPUlQgPSBidWctcGFydGVkQGdudS5vcmcKK2Fic19zcmNkaXIgPSAkKFBXRCkKK2Fic190b3BfYnVpbGRkaXIgPSAkKFBXRCkvLi4KK2Fic190b3Bfc3JjZGlyID0gJChQV0QpLy4uCitzcmNkaXIgPSAuCit0b3Bfc3JjZGlyID0gLi4KK3N1YmRpciA9IHRlc3RzCitTSF9MT0dfQ09NUElMRVIgPSAkKFNIRUxMKQorCitURVNUUyA9IFwKKyAgaGVscC12ZXJzaW9uLnNoIFwKKyAgdDAwMDAtYmFzaWMuc2ggXAorICB0MDAwMS10aW55LnNoIFwKKyAgdDAwMTAtc2NyaXB0LW5vLWN0cmwtY2hhcnMuc2ggXAorICB0MDEwMC1wcmludC5zaCBcCisgIHQwMTAxLXByaW50LWVtcHR5LnNoIFwKKyAgdDAyMDAtZ3B0LnNoIFwKKyAgdDAyMDEtZ3B0LnNoIFwKKyAgdDAyMDItZ3B0LXBtYnIuc2ggXAorICB0MDIwMy1ncHQtdGlueS1kZXZpY2UtYWJvcnQuc2ggXAorICB0MDIwMy1ncHQtc2hvcnRlbmVkLWRldmljZS1wcmltYXJ5LXZhbGlkLnNoIFwKKyAgdDAyMDUtZ3B0LWxpc3QtY2xvYmJlcnMtcG1ici5zaCBcCisgIHQwMjA2LWdwdC1wcmludC13aXRoLWNvcnJ1cHQtcHJpbWFyeS1jbG9iYmVycy1wbWJyLnNoIFwKKyAgdDAyMDctSUVDLWJpbmFyeS1ub3RhdGlvbi5zaCBcCisgIHQwMjA4LW1rcGFydC1lbmQtaW4tSUVDLnNoIFwKKyAgdDAyMDktZ3B0LXBtYnJfYm9vdC5zaCBcCisgIHQwMjEwLWdwdC1yZXNpemVkLXBhcnRpdGlvbi1lbnRyeS1hcnJheS5zaCBcCisgIHQwMjExLWdwdC1yZXdyaXRlLWhlYWRlci5zaCBcCisgIHQwMjEyLWdwdC1tYW55LXBhcnRpdGlvbnMuc2ggXAorICB0MDIyMC1ncHQtbXNmdHJlcy5zaCBcCisgIHQwMjUwLWdwdC5zaCBcCisgIHQwMjgwLWdwdC1jb3JydXB0LnNoIFwKKyAgdDAzMDAtZG9zLW9uLWdwdC5zaCBcCisgIHQwNDAwLWxvb3AtY2xvYmJlci1pbmZsb29wLnNoIFwKKyAgdDA1MDAtZHVwLWNsb2JiZXIuc2ggXAorICB0MDUwMS1kdXBsaWNhdGUuc2ggXAorICB0MTEwMC1idXN5LWxhYmVsLnNoIFwKKyAgdDExMDEtYnVzeS1wYXJ0aXRpb24uc2ggXAorICB0MTcwMC1wcm9iZS1mcy5zaCBcCisgIHQyMjAwLWRvcy1sYWJlbC1yZWNvZy5zaCBcCisgIHQyMjAxLXBjOTgtbGFiZWwtcmVjb2cuc2ggXAorICB0MjMwMC1kb3MtbGFiZWwtZXh0ZW5kZWQtYm9vdGNvZGUuc2ggXAorICB0MjMxMC1kb3MtZXh0ZW5kZWQtMi1zZWN0b3ItbWluLW9mZnNldC5zaCBcCisgIHQyNDAwLWRvcy1oZnMtcGFydGl0aW9uLXR5cGUuc2ggXAorICB0MjUwMC1wcm9iZS1jb3JydXB0LWhmcy5zaCBcCisgIHQzMDAwLXJlc2l6ZS1mcy5zaCBcCisgIHQzMjAwLXR5cGUtY2hhbmdlLnNoIFwKKyAgdDMzMDAtcGFsby1wcmVwLnNoIFwKKyAgdDMzMTAtZmxhZ3Muc2ggXAorICB0MzQwMC13aG9sZS1kaXNrLUZBVC1wYXJ0aXRpb24uc2ggXAorICB0NDAwMC1zdW4tcmFpZC10eXBlLnNoIFwKKyAgdDQwMDEtc3VuLXZ0b2Muc2ggXAorICB0NDEwMC1tc2Rvcy1wYXJ0aXRpb24tbGltaXRzLnNoIFwKKyAgdDQxMDAtZHZoLXBhcnRpdGlvbi1saW1pdHMuc2ggXAorICB0NDEwMC1tc2Rvcy1zdGFydGluZy1zZWN0b3Iuc2ggXAorICB0NDIwMC1wYXJ0cHJvYmUuc2ggXAorICB0NDMwMC1uaWxmczItdGlueS5zaCBcCisgIHQ1MDAwLXRhZ3Muc2ggXAorICB0NjAwMC1kbS5zaCBcCisgIHQ2MDAxLXBzZXAuc2ggXAorICB0NjEwMC1tZHJhaWQtcGFydGl0aW9ucy5zaCBcCisgIHQ3MDAwLXNjcmlwdGluZy5zaCBcCisgIHQ4MDAwLWxvb3Auc2ggXAorICB0ODAwMS1sb29wLWJsa3BnLnNoIFwKKyAgdDkwMTAtYmlnLXNlY3Rvci5zaCBcCisgIHQ5MDIwLWFsaWdubWVudC5zaCBcCisgIHQ5MDIxLW1heGltYS5zaCBcCisgIHQ5MDIyLW9uZS11bml0LXNuYXAuc2ggXAorICB0OTAyMy12YWx1ZS1sdC1vbmUuc2ggXAorICB0OTAzMC1hbGlnbi1jaGVjay5zaCBcCisgIHQ5MDQwLW1hbnktcGFydGl0aW9ucy5zaCBcCisgIHQ5MDQxLXVuZGV0ZWN0ZWQtaW4tdXNlLTE2dGgtcGFydGl0aW9uLnNoIFwKKyAgdDkwNDItZG9zLXBhcnRpdGlvbi1saW1pdC5zaCBcCisgIHQ5MDUwLXBhcnRpdGlvbi10YWJsZS10eXBlcy5zaAorCitURVNUU19FTlZJUk9OTUVOVCA9IFwKKyAgZXhwb3J0CQkJCQlcCisgIGFic190b3BfYnVpbGRkaXI9JyQoYWJzX3RvcF9idWlsZGRpciknCVwKKyAgYWJzX3RvcF9zcmNkaXI9JyQoYWJzX3RvcF9zcmNkaXIpJwkJXAorICBhYnNfc3JjZGlyPSckKGFic19zcmNkaXIpJwkJCVwKKyAgYnVpbHRfcHJvZ3JhbXM9cGFydGVkCQkJCVwKKyAgc3JjZGlyPSckKHNyY2RpciknCQkJCVwKKyAgdG9wX3NyY2Rpcj0nJCh0b3Bfc3JjZGlyKScJCQlcCisgIFZFUlNJT049JChWRVJTSU9OKQkJCQlcCisgIDsgOT4mMgorCisuU1VGRklYRVM6IC5sb2cKKworJChURVNUX1NVSVRFX0xPRyk6ICQoVEVTVF9MT0dTKQorCUAkKGFtX19zaF9lX3NldHVwKTsgJChhbV9fdHR5X2NvbG9ycyk7ICQoYW1fX3NldF9URVNUU19iYXNlcyk7IFwKKwl3cz0nWyAJXSc7IFwKKwlyZXN1bHRzPWBmb3IgYiBpbiAkJGJhc2VzOyBkbyBlY2hvICQkYi50cnM7IGRvbmVgOyBcCisJdGVzdCAtbiAiJCRyZXN1bHRzIiB8fCByZXN1bHRzPS9kZXYvbnVsbDsgXAorCWFsbD1gICBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6IiAgICAgICAgICAgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJcGFzcz1gIGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKlBBU1MiICAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwlmYWlsPWAgZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqRkFJTCIgICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCXNraXA9YCBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypTS0lQIiAgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJeGZhaWw9YGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKlhGQUlMIiAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwl4cGFzcz1gZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqWFBBU1MiICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCWVycm9yPWBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypFUlJPUiIgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJaWYgdGVzdCBgZXhwciAkJGZhaWwgKyAkJHhwYXNzICsgJCRlcnJvcmAgLWVxIDA7IHRoZW4gXAorCSAgc3VjY2Vzcz10cnVlOyBcCisJZWxzZSBcCisJICBzdWNjZXNzPWZhbHNlOyBcCisJZmk7IFwKKwlicj0nPT09PT09PT09PT09PT09PT09PSc7IGJyPSQkYnIkJGJyJCRiciQkYnI7IFwKKwlyZXN1bHRfY291bnQgKCkgXAorCXsgXAorCSAgICBpZiB0ZXN0IHgiJCQxIiA9IHgiLS1tYXliZS1jb2xvciI7IHRoZW4gXAorCSAgICAgIG1heWJlX2NvbG9yaXplPXllczsgXAorCSAgICBlbGlmIHRlc3QgeCIkJDEiID0geCItLW5vLWNvbG9yIjsgdGhlbiBcCisJICAgICAgbWF5YmVfY29sb3JpemU9bm87IFwKKwkgICAgZWxzZSBcCisJICAgICAgZWNobyAiJEA6IGludmFsaWQgJ3Jlc3VsdF9jb3VudCcgdXNhZ2UiID4mMjsgZXhpdCA0OyBcCisJICAgIGZpOyBcCisJICAgIHNoaWZ0OyBcCisJICAgIGRlc2M9JCQxIGNvdW50PSQkMjsgXAorCSAgICBpZiB0ZXN0ICQkbWF5YmVfY29sb3JpemUgPSB5ZXMgJiYgdGVzdCAkJGNvdW50IC1ndCAwOyB0aGVuIFwKKwkgICAgICBjb2xvcl9zdGFydD0kJDMgY29sb3JfZW5kPSQkc3RkOyBcCisJICAgIGVsc2UgXAorCSAgICAgIGNvbG9yX3N0YXJ0PSBjb2xvcl9lbmQ9OyBcCisJICAgIGZpOyBcCisJICAgIGVjaG8gIiQke2NvbG9yX3N0YXJ0fSMgJCRkZXNjICQkY291bnQkJHtjb2xvcl9lbmR9IjsgXAorCX07IFwKKwljcmVhdGVfdGVzdHN1aXRlX3JlcG9ydCAoKSBcCisJeyBcCisJICByZXN1bHRfY291bnQgJCQxICJUT1RBTDoiICQkYWxsICAgIiQkYnJnIjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiUEFTUzogIiAkJHBhc3MgICIkJGdybiI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIlNLSVA6ICIgJCRza2lwICAiJCRibHUiOyBcCisJICByZXN1bHRfY291bnQgJCQxICJYRkFJTDoiICQkeGZhaWwgIiQkbGduIjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiRkFJTDogIiAkJGZhaWwgICIkJHJlZCI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIlhQQVNTOiIgJCR4cGFzcyAiJCRyZWQiOyBcCisJICByZXN1bHRfY291bnQgJCQxICJFUlJPUjoiICQkZXJyb3IgIiQkbWduIjsgXAorCX07IFwKKwl7CQkJCQkJCQlcCisJICBlY2hvICIkKFBBQ0tBR0VfU1RSSU5HKTogJChzdWJkaXIpLyQoVEVTVF9TVUlURV9MT0cpIiB8CVwKKwkgICAgJChhbV9fcnN0X3RpdGxlKTsJCQkJCQlcCisJICBjcmVhdGVfdGVzdHN1aXRlX3JlcG9ydCAtLW5vLWNvbG9yOwkJCQlcCisJICBlY2hvOwkJCQkJCQkJXAorCSAgZWNobyAiLi4gY29udGVudHM6OiA6ZGVwdGg6IDIiOwkJCQlcCisJICBlY2hvOwkJCQkJCQkJXAorCSAgZm9yIGkgaW4gJCRiYXNlczsgZG8JCQkJCQlcCisJICAgIGlmIGdyZXAgIl4kJHdzKjpjb3B5LWluLWdsb2JhbC1sb2c6JCR3cypubyQkd3MqJCQiICQkaS50cnMgXAorCSAgICAgICAgID4vZGV2L251bGw7IHRoZW4gY29udGludWU7IFwKKwkgICAgZmk7IFwKKwkgICAgZ2xvYl9yZXM9YHNlZCAtbiAtZSAicy8kJHdzKiQkLy8iIFwKKwkgICAgICAgICAgICAgICAgICAgICAtZSAicy9eJCR3cyo6Z2xvYmFsLXRlc3QtcmVzdWx0OiQkd3MqLy9wIiBcCisJCSAgICAgICAgJCRpLnRyc2A7IFwKKwkgICAgdGVzdCAtbiAiJCRnbG9iX3JlcyIgfHwgZ2xvYl9yZXM9UlVOOyBcCisJICAgIGVjaG8gIiQkZ2xvYl9yZXM6ICQkaSIgfCAkKGFtX19yc3Rfc2VjdGlvbik7IFwKKwkgICAgaWYgdGVzdCAhIC1yICQkaS5sb2c7IHRoZW4gXAorCSAgICAgIGVjaG8gImZhdGFsOiBtYWtpbmcgJEA6ICQkaS5sb2cgaXMgdW5yZWFkYWJsZSIgPiYyOyBcCisJICAgICAgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICAgIGNhdCAkJGkubG9nOyBlY2hvOyBcCisJICBkb25lOwlcCisJfSA+JChURVNUX1NVSVRFX0xPRykudG1wOwkJCQkJXAorCW12ICQoVEVTVF9TVUlURV9MT0cpLnRtcCAkKFRFU1RfU1VJVEVfTE9HKTsJCQlcCisJaWYgJCRzdWNjZXNzOyB0aGVuCQkJCQkJXAorCSAgY29sPSIkJGdybiI7CQkJCQkJCVwKKwkgZWxzZQkJCQkJCQkJXAorCSAgY29sPSIkJHJlZCI7CQkJCQkJCVwKKwkgIHRlc3QgeCIkJFZFUkJPU0UiID0geCB8fCBjYXQgJChURVNUX1NVSVRFX0xPRyk7CQlcCisJZmk7CQkJCQkJCQlcCisJZWNobyAiJCR7Y29sfSQkYnIkJHtzdGR9IjsgCQkJCQlcCisJZWNobyAiJCR7Y29sfVRlc3RzdWl0ZSBzdW1tYXJ5IGZvciAkKFBBQ0tBR0VfU1RSSU5HKSQke3N0ZH0iOwlcCisJZWNobyAiJCR7Y29sfSQkYnIkJHtzdGR9IjsgCQkJCQlcCisJY3JlYXRlX3Rlc3RzdWl0ZV9yZXBvcnQgLS1tYXliZS1jb2xvcjsJCQkJXAorCWVjaG8gIiQkY29sJCRiciQkc3RkIjsJCQkJCQlcCisJaWYgJCRzdWNjZXNzOyB0aGVuIDo7IGVsc2UJCQkJCVwKKwkgIGVjaG8gIiQke2NvbH1TZWUgJChzdWJkaXIpLyQoVEVTVF9TVUlURV9MT0cpJCR7c3RkfSI7CQlcCisJICBpZiB0ZXN0IC1uICIkKFBBQ0tBR0VfQlVHUkVQT1JUKSI7IHRoZW4JCQlcCisJICAgIGVjaG8gIiQke2NvbH1QbGVhc2UgcmVwb3J0IHRvICQoUEFDS0FHRV9CVUdSRVBPUlQpJCR7c3RkfSI7CVwKKwkgIGZpOwkJCQkJCQkJXAorCSAgZWNobyAiJCRjb2wkJGJyJCRzdGQiOwkJCQkJXAorCWZpOwkJCQkJCQkJXAorCSQkc3VjY2VzcyB8fCBleGl0IDEKKworY2hlY2stVEVTVFM6CisJQGlmIHRlc3QgJEAgIT0gcmVjaGVjazsgdGhlbiBcCisJICAgbGlzdD0nJChSRUNIRUNLX0xPR1MpJzsgXAorCSAgIHRlc3QgLXogIiQkbGlzdCIgfHwgcm0gLWYgJCRsaXN0OyBcCisJIGZpCisJQHRlc3QgLXogIiQoVEVTVF9TVUlURV9MT0cpIiB8fCBybSAtZiAkKFRFU1RfU1VJVEVfTE9HKQorCUB3cz0nWyAJXSc7IFwKKwlsb2dfbGlzdD0nJyB0cnNfbGlzdD0nJzsgJChhbV9fc2V0X1RFU1RTX2Jhc2VzKTsgXAorCWZvciBpIGluICQkYmFzZXM7IGRvIFwKKwkgIGlmIHRlc3QgLXogIiQkbG9nX2xpc3QiOyB0aGVuIFwKKwkgICAgbG9nX2xpc3Q9IiQkaS5sb2ciOyBcCisJICBlbHNlIFwKKwkgICAgbG9nX2xpc3Q9IiQkbG9nX2xpc3QgJCRpLmxvZyI7IFwKKwkgIGZpOyBcCisJICBpZiB0ZXN0IC16ICIkJHRyc19saXN0IjsgdGhlbiBcCisJICAgIHRyc19saXN0PSIkJGkudHJzIjsgXAorCSAgZWxzZSBcCisJICAgIHRyc19saXN0PSIkJHRyc19saXN0ICQkaS50cnMiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkKFRFU1RfU1VJVEVfTE9HKSBURVNUX0xPR1M9IiQkbG9nX2xpc3QiCisKKy5zaC5sb2c6CisJQHA9JyQ8JzsgXAorCSQoYW1fX3NldF9iKTsgXAorCSQoYW1fX2NoZWNrX3ByZSkgJChTSF9MT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCisJLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCisJJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgLS0gJChTSF9MT0dfQ09NUElMRSkgIiQkdHN0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL2ZpeC1jb21waWxlLWZhaWx1cmUtd2hpbGUtZGlzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL2ZpeC1jb21waWxlLWZhaWx1cmUtd2hpbGUtZGlzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YWI3MTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvZml4LWNvbXBpbGUtZmFpbHVyZS13aGlsZS1kaXMucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorRnJvbSAwNjBlNzQzNTQ3NzRkMzZkMmMxMWVmMDhlM2U3ZWE5YjliNmUyM2ZiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAxMyBOb3YgMjAxNCAxMToyOTozMyArMDgwMAorU3ViamVjdDogW1BBVENIXSBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOiBmaXggY29tcGlsZSBmYWlsdXJlIHdoaWxlCisgLS1kaXNhYmxlLWRldmljZS1tYXBwZXIKKworV2hpbGUgLS1kaXNhYmxlLWRldmljZS1tYXBwZXIsIHRoZSBNQUNSTyBFTkFCTEVfREVWSUNFX01BUFBFUiBpcwordW5kZWYsIGJ1dCBpdCBtaXNzZWQgdG8gc2NvcGUgc29tZSBkZXZpY2UgbWFwcGVyIGZ1bmN0aW9ucy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmMgfCA4ICsrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnBhcnRlZC9hcmNoL2xpbnV4LmMgYi9saWJwYXJ0ZWQvYXJjaC9saW51eC5jCitpbmRleCA2ZmQ3M2M1Li4yYWZhNDc5IDEwMDY0NAorLS0tIGEvbGlicGFydGVkL2FyY2gvbGludXguYworKysrIGIvbGlicGFydGVkL2FyY2gvbGludXguYworQEAgLTIzMjAsNiArMjMyMCw3IEBAIHphc3ByaW50ZiAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgc3RhdGljIGNoYXIgKgorIGRtX2Nhbm9uaWNhbF9wYXRoIChQZWREZXZpY2UgY29uc3QgKmRldikKKyB7CisrI2lmZGVmIEVOQUJMRV9ERVZJQ0VfTUFQUEVSCisgICAgICAgICBMaW51eFNwZWNpZmljIGNvbnN0ICphcmNoX3NwZWNpZmljID0gTElOVVhfU1BFQ0lGSUMgKGRldik7CisgCisgICAgICAgICAvKiBHZXQgbWFwIG5hbWUgZnJvbSBkZXZpY2VtYXBwZXIgKi8KK0BAIC0yMzM3LDYgKzIzMzgsNyBAQCBkbV9jYW5vbmljYWxfcGF0aCAoUGVkRGV2aWNlIGNvbnN0ICpkZXYpCisgICAgICAgICBkbV90YXNrX2Rlc3Ryb3kgKHRhc2spOworICAgICAgICAgcmV0dXJuIGRldl9uYW1lOworIGVycjoKKysjZW5kaWYKKyAgICAgICAgIHJldHVybiBOVUxMOworIH0KKyAKK0BAIC0yOTU3LDEzICsyOTU5LDE1IEBAIF9kaXNrX3N5bmNfcGFydF90YWJsZSAoUGVkRGlzayogZGlzaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgKmxlbmd0aCk7CisgCistCisrI2lmZGVmIEVOQUJMRV9ERVZJQ0VfTUFQUEVSCisgICAgICAgICBpZiAoZGlzay0+ZGV2LT50eXBlID09IFBFRF9ERVZJQ0VfRE0pIHsKKyAgICAgICAgICAgICAgICAgYWRkX3BhcnRpdGlvbiA9IF9kbV9hZGRfcGFydGl0aW9uOworICAgICAgICAgICAgICAgICByZW1vdmVfcGFydGl0aW9uID0gX2RtX3JlbW92ZV9wYXJ0aXRpb247CisgICAgICAgICAgICAgICAgIHJlc2l6ZV9wYXJ0aXRpb24gPSBfZG1fcmVzaXplX3BhcnRpdGlvbjsKKyAgICAgICAgICAgICAgICAgZ2V0X3BhcnRpdGlvbl9zdGFydF9hbmRfbGVuZ3RoID0gX2RtX2dldF9wYXJ0aXRpb25fc3RhcnRfYW5kX2xlbmd0aDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9IGVsc2UKKysjZW5kaWYKKysgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgYWRkX3BhcnRpdGlvbiA9IF9ibGtwZ19hZGRfcGFydGl0aW9uOworICAgICAgICAgICAgICAgICByZW1vdmVfcGFydGl0aW9uID0gX2Jsa3BnX3JlbW92ZV9wYXJ0aXRpb247CisgI2lmZGVmIEJMS1BHX1JFU0laRV9QQVJUSVRJT04KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL2ZpeC1kb2MtbWFuZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL2ZpeC1kb2MtbWFuZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MTFkNGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvZml4LWRvYy1tYW5kaXIucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2J1Zy1wYXJ0ZWRAZ251Lm9yZ10KKworfCBmb3IgcG8gaW4gYGxzIC0xIC4vKi5wdF9CUi5wbyAyPi9kZXYvbnVsbGA7IGRvIFwKK3wgCQltYWtlICQoYmFzZW5hbWUgJHtwbyUucHRfQlIucG99KTsgXAorfCAJZG9uZQorfCBNYWtlZmlsZTo5MDQ6ICoqKiBSZWN1cnNpdmUgdmFyaWFibGUgYG1hbmRpcicgcmVmZXJlbmNlcyBpdHNlbGYgKGV2ZW50dWFsbHkpLiAgU3RvcC4KKworU2lnbmVkLW9mZi1ieTogQW5kcmVhcyBPYmVycml0dGVyIDxvYmlAb3BlbmRyZWFtYm94Lm9yZz4KKworLS0tIHBhcnRlZC0zLjEvZG9jL3BvNGEubWsub3JpZwkyMDEyLTAzLTE1IDE0OjA5OjExLjU1NTgzMTg3MiArMDEwMAorKysrIHBhcnRlZC0zLjEvZG9jL3BvNGEubWsJMjAxMi0wMy0xNSAxNDoxMDo0NC4yNDM4MzA5ODUgKzAxMDAKK0BAIC0yMyw3ICsyMyw3IEBACisgIyB0aHJlc2hvbGQgaXMgODAlKSwgaXQgd29uJ3QgYmUgZGlzdHJpYnV0ZWQsIGFuZCB0aGUgYnVpbGQgd29uJ3QgZmFpbC4KKyAjCisgCistbWFuZGlyID0gJChtYW5kaXIpLyQobGFuZykKKyttYW5kaXIgOj0gJChtYW5kaXIpLyQobGFuZykKKyAKKyAjIEluZm9ybSBhdXRvbWFrZSB0aGF0IHdlIHdhbnQgdG8gaW5zdGFsbCBzb21lIG1hbiBwYWdlcyBpbiBzZWN0aW9uIDEsIDUKKyAjIGFuZCA4LgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL25vX2NoZWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL25vX2NoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZDhkYjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvbm9fY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJZiBjaGVjayBpcyBkZXRlY3RlZCwgaXQgbWFrZXMgdGhlIGJ1aWxkcyBub24tZGV0ZXJtaW5zdGljIHNvIGp1c3QgZm9yY2UKK2l0IHRvIGJlIGRpc2FibGVkLgorCitSUCAtIDQvMTEvMDgKKworSW5kZXg6IHBhcnRlZC0xLjkuMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXJ0ZWQtMS45LjAub3JpZy9jb25maWd1cmUuYWMJMjAwOS0wNy0yMyAxODo1MjowOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBwYXJ0ZWQtMS45LjAvY29uZmlndXJlLmFjCTIwMTAtMDItMDIgMTQ6MTM6NTYuMDEzOTA1MDkzICswMDAwCitAQCAtNDc3LDcgKzQ3Nyw3IEBACisgQU1fQ09ORElUSU9OQUwoW0JVSUxEX0xJTlVYXSwgW3Rlc3QgIiRPUyIgPSBsaW51eF0pCisgCisgZG5sIGNoZWNrIGZvciAiY2hlY2siLCB1bml0IHRlc3RpbmcgbGlicmFyeS9oZWFkZXIKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhbQ0hFQ0tdLCBbY2hlY2sgPj0gMC45LjNdLCBoYXZlX2NoZWNrPXllcywgaGF2ZV9jaGVjaz1ubykKKytoYXZlX2NoZWNrPW5vCisgaWYgdGVzdCAiJGhhdmVfY2hlY2siICE9ICJ5ZXMiOyB0aGVuCisgICAgIEFDX01TR19SRVNVTFQoW1VuYWJsZSB0byBsb2NhdGUgY2hlY2sgdmVyc2lvbiAwLjkuMyBvciBoaWdoZXI6IG5vdCBidWlsZGluZ10pCisgZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NWM1ZTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKK21ha2UgLUMgdGVzdHMgY2hlY2stVEVTVFMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9zeXNjYWxscy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9zeXNjYWxscy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWJiZTlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL3N5c2NhbGxzLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0KKyBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jIHwgICAxMyArKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKykKKworSW5kZXg6IHBhcnRlZC0xLjkuMC9saWJwYXJ0ZWQvYXJjaC9saW51eC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGFydGVkLTEuOS4wLm9yaWcvbGlicGFydGVkL2FyY2gvbGludXguYwkyMDA5LTA3LTIzIDE4OjUyOjA4LjAwMDAwMDAwMCArMDEwMAorKysrIHBhcnRlZC0xLjkuMC9saWJwYXJ0ZWQvYXJjaC9saW51eC5jCTIwMTAtMDItMDIgMTQ6MTQ6MTYuNTIzOTA0NzY4ICswMDAwCitAQCAtMTcsNiArMTcsOCBAQAorIAorICNkZWZpbmUgUFJPQ19ERVZJQ0VTX0JVRlNJWiAxNjM4NAorIAorKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisrCisgI2luY2x1ZGUgPGNvbmZpZy5oPgorICNpbmNsdWRlIDxhcmNoL2xpbnV4Lmg+CisgCitAQCAtMTQ3NywxMiArMTQ3OSwxNCBAQAorIAorICNpZiBTSVpFT0ZfT0ZGX1QgPCA4CisgCisrI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKKyBzdGF0aWMgX3N5c2NhbGw1KGludCxfbGxzZWVrLAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50LCBmZCwKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcsIG9mZnNldF9oaWdoLAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZywgb2Zmc2V0X2xvdywKKyAgICAgICAgICAgICAgICAgIGxvZmZfdCosIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCwgb3JpZ2luKQorKyNlbmRpZgorIAorIGxvZmZfdAorIGxsc2VlayAodW5zaWduZWQgaW50IGZkLCBsb2ZmX3Qgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgd2hlbmNlKQorQEAgLTE0OTAsMTEgKzE0OTQsMjAgQEAKKyAgICAgICAgIGxvZmZfdCByZXN1bHQ7CisgICAgICAgICBpbnQgcmV0dmFsOworIAorKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApCisgICAgICAgICByZXR2YWwgPSBfbGxzZWVrKGZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcgbG9uZylvZmZzZXQpID4+IDMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcgbG9uZylvZmZzZXQpICYgMHhmZmZmZmZmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbmNlKTsKKysjZWxzZQorKyAJcmV0dmFsID0gc3lzY2FsbChfX05SX19sbHNlZWssIGZkLAorKwkJCSAoKHVuc2lnbmVkIGxvbmcgbG9uZylvZmZzZXQpID4+IDMyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcgbG9uZylvZmZzZXQpICYgMHhmZmZmZmZmZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXN1bHQsCisrCQkJIHdoZW5jZSk7CisrI2VuZGlmCisrCisgICAgICAgICByZXR1cm4gKHJldHZhbD09LTEgPyAobG9mZl90KSByZXR2YWwgOiByZXN1bHQpOworIH0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9wYXJ0ZWRfMy4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL3BhcnRlZF8zLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY4YWUwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9wYXJ0ZWRfMy4yLmJiCkBAIC0wLDAgKzEsNDYgQEAKK1NVTU1BUlkgPSAiRGlzayBwYXJ0aXRpb24gZWRpdGluZy9yZXNpemluZyB1dGlsaXR5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZC9wYXJ0ZWQuaHRtbCIKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MmYzMWIyNjZkMzQ0MGRkN2VlNTBmOTJjZjY3ZDhlNmMiCitTRUNUSU9OID0gImNvbnNvbGUvdG9vbHMiCitERVBFTkRTID0gIm5jdXJzZXMgcmVhZGxpbmUgdXRpbC1saW51eCIKK1BSID0gInIxIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vcGFydGVkL3BhcnRlZC0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vbm9fY2hlY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc3lzY2FsbHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWRvYy1tYW5kaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWNvbXBpbGUtZmFpbHVyZS13aGlsZS1kaXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1JbmNsdWRlLWZjbnRsLmgtaW4tcGxhdGZvcm1fZGVmcy5oLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL01ha2VmaWxlIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjAyNDdiNmE3YjMxNGY4ZWRlYjYxODE1OWZhOTVmOWNiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg1OGI1ODljMjIyOTdjYWNkZjQzN2YzYmFmZjZmMDRiMzMzMDg3NTIxYWIyNzRmN2FiNjc3Y2I4YzZiYjc4ZTQiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZGV2aWNlLW1hcHBlciIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgdGV4aW5mbyBwdGVzdAorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIC1DIHRlc3RzIHByaW50LWFsaWduIHByaW50LW1heCBkdXAtY2xvYmJlciBkdXBsaWNhdGUgZnMtcmVzaXplCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJdD0ke0R9JHtQVEVTVF9QQVRIfQorCW1rZGlyICR0L2J1aWxkLWF1eAorCWNwICR7U30vYnVpbGQtYXV4L3Rlc3QtZHJpdmVyICR0L2J1aWxkLWF1eC8KKwljcCAtciAke1N9L3Rlc3RzICR0CisJY3AgJHtXT1JLRElSfS9NYWtlZmlsZSAkdC90ZXN0cy8KKwlzZWQgLWkgInN8XlZFUlNJT04uKnxWRVJTSU9OID0gJHtQVn18ZyIgJHQvdGVzdHMvTWFrZWZpbGUKKwlmb3IgaSBpbiBwcmludC1hbGlnbiBwcmludC1tYXggZHVwLWNsb2JiZXIgZHVwbGljYXRlIGZzLXJlc2l6ZTsgXAorCSAgZG8gY3AgJHtCfS90ZXN0cy8ubGlicy8kaSAkdC90ZXN0cy87IFwKKwlkb25lCisJc2VkIC1lICdzfCAuLi9wYXJ0ZWR8fCcgLWkgJHQvdGVzdHMvKi5zaAorfQorCitSREVQRU5EU18ke1BOfS1wdGVzdCA9ICJiYXNoIGNvcmV1dGlscyBwZXJsIHV0aWwtbGludXgtbG9zZXR1cCBweXRob24iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXgvcGF4L2ZpeF9mb3JfY29tcGlsZV93aXRoX2djYy00LjYuMC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXgvZml4X2Zvcl9jb21waWxlX3dpdGhfZ2NjLTQuNi4wLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4Nzc5YzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXgvcGF4L2ZpeF9mb3JfY29tcGlsZV93aXRoX2djYy00LjYuMC5wYXRjaApAQCAtMCwwICsxLDI1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhpcyBwYXRjaCBmaXhlcyB0aGlzIGNvbXBpbGVyIGVycm9yIHdpdGggZ2NjIDQuNi4wCisKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMDUvMDgKKworfCBmdHMuYzogSW4gZnVuY3Rpb24gJ3BheF9mdHNfc2V0JzoKK3wgZnRzLmM6NDY5Ojc6IGVycm9yOiBwYXJhbWV0ZXIgJ3NwJyBzZXQgYnV0IG5vdCB1c2VkIFstV2Vycm9yPXVudXNlZC1idXQtc2V0LXBhcmFtZXRlcl0KK3wgY2MxOiBhbGwgd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMKK3wgCit8IG1ha2VbMl06ICoqKiBbZnRzLm9dIEVycm9yIDEKKworSW5kZXg6IHBheC0zLjQvbGliL2Z0cy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF4LTMuNC5vcmlnL2xpYi9mdHMuYworKysrIHBheC0zLjQvbGliL2Z0cy5jCitAQCAtNDY2LDcgKzQ2Niw3IEBAIG5hbWU6CQl0ID0gc3AtPmZ0c19wYXRoICsgTkFQUEVORChwLT5mdHMKKyAvKiBBUkdTVVNFRCAqLworIGludAorIGZ0c19zZXQoc3AsIHAsIGluc3RyKQorLQlGVFMgKnNwOworKwlGVFMgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpICpzcDsKKyAJRlRTRU5UICpwOworIAlpbnQgaW5zdHI7CisgewpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGF4L3BheC9wYXgtMy40X2ZpeF9mb3JfeDMyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGF4L3BheC9wYXgtMy40X2ZpeF9mb3JfeDMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwODc4ZjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXgvcGF4L3BheC0zLjRfZml4X2Zvcl94MzIucGF0Y2gKQEAgLTAsMCArMSwxODUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitBdXRob3I6IEguSi4gTHUgPGhqbC50b29sc0BnbWFpbC5jb20+CitEYXRlOiAgIFR1ZSBEZWMgNiAxMDozNDo1MyAyMDExIC0wODAwCisKKyAgICBGaXggcGF4LTMuNCBidWlsZCBmb3IgeDMyCisgICAgCisgICAgb2ZmX3QgaXMgOGJ5dGUgZm9yIHgzMi4gIFdlIG5lZWQgdG8gY2hlY2sgYm90aCBfRklMRV9PRkZTRVRfQklUUyBhbmQKKyAgICBzaXplIG9mIG9mZl90IHRvIHNlZSBpZiBmaWxlIG9mZnNldCBpcyA2NGJpdC4gIFRoaXMgcGF0Y2ggYWRkcworICAgIEFDX0NIRUNLX1NJWkVPRihvZmZfdCkgYW5kIGNoZWNrcyBTSVpFT0ZfT0ZGX1QgPT0gOC4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8xMi8wNgorCitJbmRleDogcGF4LTMuNC9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXgtMy40Lm9yaWcvY29uZmlndXJlLmluCisrKysgcGF4LTMuNC9jb25maWd1cmUuaW4KK0BAIC0zMyw0ICszMyw3IEBAIGRubCBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KKyBkbmwgQ2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KKyBBQ19DX0NPTlNUCisgCisrQUNfQ0hFQ0tfU0laRU9GKG9mZl90KQorK0FDX0NIRUNLX1NJWkVPRihsb25nKQorKworIEFDX09VVFBVVChbTWFrZWZpbGUgbGliL01ha2VmaWxlIHNyYy9NYWtlZmlsZV0pCitJbmRleDogcGF4LTMuNC9zcmMvYXJfaW8uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBheC0zLjQub3JpZy9zcmMvYXJfaW8uYworKysrIHBheC0zLjQvc3JjL2FyX2lvLmMKK0BAIC0zNzgsNyArMzc4LDggQEAgYXJfY2xvc2Uodm9pZCkKKyAJICogY291bGQgaGF2ZSB3cml0dGVuIGFueXRoaW5nIHlldC4KKyAJICovCisgCWlmIChmcm10ID09IE5VTEwpIHsKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorIAkJKHZvaWQpZnByaW50ZihsaXN0ZiwgIiVzOiB1bmtub3duIGZvcm1hdCwgJXF1IGJ5dGVzIHNraXBwZWQuXG4iLAorICNlbHNlCisgCQkodm9pZClmcHJpbnRmKGxpc3RmLCAiJXM6IHVua25vd24gZm9ybWF0LCAlbHUgYnl0ZXMgc2tpcHBlZC5cbiIsCitAQCAtMzkxLDcgKzM5Miw4IEBAIGFyX2Nsb3NlKHZvaWQpCisgCisgCWlmIChzdHJjbXAoTk1fQ1BJTywgYXJndjApID09IDApCisgCQkodm9pZClmcHJpbnRmKGxpc3RmLAorLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgCQkgICAgIiVxdSBibG9ja3NcbiIsCisgI2Vsc2UKKyAJCSAgICAiJWx1IGJsb2Nrc1xuIiwKK0BAIC0zOTksNyArNDAxLDggQEAgYXJfY2xvc2Uodm9pZCkKKyAJCQkocmRjbnQgPyByZGNudCA6IHdyY250KSAvIDUxMjApOworIAllbHNlIGlmIChzdHJjbXAoTk1fVEFSLCBhcmd2MCkgIT0gMCkKKyAJCSh2b2lkKWZwcmludGYobGlzdGYsCistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAJCSAgICAiJXM6ICVzIHZvbCAlZCwgJWx1IGZpbGVzLCAlcXUgYnl0ZXMgcmVhZCwgJXF1IGJ5dGVzIHdyaXR0ZW4uXG4iLAorICNlbHNlCisgCQkgICAgIiVzOiAlcyB2b2wgJWQsICVsdSBmaWxlcywgJWx1IGJ5dGVzIHJlYWQsICVsdSBieXRlcyB3cml0dGVuLlxuIiwKK0luZGV4OiBwYXgtMy40L3NyYy9jcGlvLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXgtMy40Lm9yaWcvc3JjL2NwaW8uYworKysrIHBheC0zLjQvc3JjL2NwaW8uYworQEAgLTIxOCw3ICsyMTgsOCBAQCByZF9sbl9ubSAoQVJDSEQgKmFyY24pCisgCSAqLworIAlpZiAoKGFyY24tPnNiLnN0X3NpemUgPT0gMCkgfHwKKyAJICAgIChhcmNuLT5zYi5zdF9zaXplID49IChvZmZfdCkgc2l6ZW9mKGFyY24tPmxuX25hbWUpKSkgeworLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgCQlwYXh3YXJuICgxLCAiQ3BpbyBsaW5rIG5hbWUgbGVuZ3RoIGlzIGludmFsaWQ6ICVxdSIsCisgCQkJIGFyY24tPnNiLnN0X3NpemUpOworICNlbHNlCitJbmRleDogcGF4LTMuNC9zcmMvZ2VuX3N1YnMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBheC0zLjQub3JpZy9zcmMvZ2VuX3N1YnMuYworKysrIHBheC0zLjQvc3JjL2dlbl9zdWJzLmMKK0BAIC0xMzMsNyArMTMzLDggQEAgbHNfbGlzdCAoQVJDSEQgKmFyY24sIHRpbWVfdCBub3csIEZJTEUgKgorICAgICogcHJpbnQgZGV2aWNlIGlkJ3MgZm9yIGRldmljZXMsIG9yIHNpemVzIGZvciBvdGhlciBub2RlcworICAgICovCisgICBpZiAoKGFyY24tPnR5cGUgPT0gUEFYX0NIUikgfHwgKGFyY24tPnR5cGUgPT0gUEFYX0JMSykpCistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAgICAgKHZvaWQpIGZwcmludGYgKGZwLCAiJTRsdSwlNGx1ICIsICh1bnNpZ25lZCBsb25nKSBNQUpPUiAoc2JwLT5zdF9yZGV2KSwKKyAJCSAgICAodW5zaWduZWQgbG9uZykgTUlOT1IgKHNicC0+c3RfcmRldikpOworICNlbHNlCitAQCAtMTQyLDcgKzE0Myw4IEBAIGxzX2xpc3QgKEFSQ0hEICphcmNuLCB0aW1lX3Qgbm93LCBGSUxFICoKKyAjZW5kaWYKKyAgIGVsc2UKKyAgICAgeworLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgICAgICAgKHZvaWQpIGZwcmludGYgKGZwLCAiJTlxdSAiLCBzYnAtPnN0X3NpemUpOworICNlbHNlCisgICAgICAgKHZvaWQpIGZwcmludGYgKGZwLCAiJTlsdSAiLCBzYnAtPnN0X3NpemUpOworQEAgLTMzNCw3ICszMzYsOCBAQCB1bF9hc2MgKHVfbG9uZyB2YWwsIGNoYXIgKnN0ciwgaW50IGxlbiwgCisgICByZXR1cm4gKDApOworIH0KKyAKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorIC8qCisgICogYXNjX3VxZCgpCisgICoJY29udmVydCBoZXgvb2N0YWwgY2hhcmFjdGVyIHN0cmluZyBpbnRvIGEgdV9xdWFkX3QuIFdlIGRvIG5vdCBoYXZlIHRvCitJbmRleDogcGF4LTMuNC9zcmMvb3B0aW9ucy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF4LTMuNC5vcmlnL3NyYy9vcHRpb25zLmMKKysrKyBwYXgtMy40L3NyYy9vcHRpb25zLmMKK0BAIC0xNTQ1LDcgKzE1NDUsOCBAQCBzdHJfb2ZmdCAoY2hhciAqdmFsKQorICAgY2hhciAqZXhwcjsKKyAgIG9mZl90IG51bSwgdDsKKyAKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorICAgbnVtID0gc3RydG9xICh2YWwsICZleHByLCAwKTsKKyAgIGlmICgobnVtID09IExPTkdfTE9OR19NQVgpIHx8IChudW0gPD0gMCkgfHwgKGV4cHIgPT0gdmFsKSkKKyAjZWxzZQorSW5kZXg6IHBheC0zLjQvc3JjL3Rhci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF4LTMuNC5vcmlnL3NyYy90YXIuYworKysrIHBheC0zLjQvc3JjL3Rhci5jCitAQCAtNTgsNyArNTgsOCBAQAorIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRhcl9jaGtzbSAoY2hhciAqLCBpbnQpOworIHN0YXRpYyBjaGFyICpuYW1lX3NwbGl0IChjaGFyICosIGludCk7Cisgc3RhdGljIGludCB1bF9vY3QgKHVfbG9uZywgY2hhciAqLCBpbnQsIGludCk7CistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyBzdGF0aWMgaW50IHVxZF9vY3QgKHVfcXVhZF90LCBjaGFyICosIGludCwgaW50KTsKKyAjZW5kaWYKKyAKK0BAIC0xOTYsNyArMTk3LDggQEAgdWxfb2N0ICh1X2xvbmcgdmFsLCByZWdpc3RlciBjaGFyICpzdHIsIAorICAgcmV0dXJuICgwKTsKKyB9CisgCistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAvKgorICAqIHVxZF9vY3QoKQorICAqCWNvbnZlcnQgYW4gdV9xdWFkX3QgdG8gYW4gb2N0YWwgc3RyaW5nLiBvbmUgb2YgbWFueSBvZGRiYWxsIGZpZWxkCitAQCAtNDI3LDcgKzQyOSw4IEBAIHRhcl9yZCAoQVJDSEQgKmFyY24sIGNoYXIgKmJ1ZikKKyAJCQkgICAgICAgMHhmZmYpOworICAgYXJjbi0+c2Iuc3RfdWlkID0gKHVpZF90KSBhc2NfdWwgKGhkLT51aWQsIHNpemVvZiAoaGQtPnVpZCksIE9DVCk7CisgICBhcmNuLT5zYi5zdF9naWQgPSAoZ2lkX3QpIGFzY191bCAoaGQtPmdpZCwgc2l6ZW9mIChoZC0+Z2lkKSwgT0NUKTsKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorICAgYXJjbi0+c2Iuc3Rfc2l6ZSA9IChvZmZfdCkgYXNjX3VxZCAoaGQtPnNpemUsIHNpemVvZiAoaGQtPnNpemUpLCBPQ1QpOworICNlbHNlCisgICBhcmNuLT5zYi5zdF9zaXplID0gKG9mZl90KSBhc2NfdWwgKGhkLT5zaXplLCBzaXplb2YgKGhkLT5zaXplKSwgT0NUKTsKK0BAIC02NTksNyArNjYyLDggQEAgdGFyX3dyIChyZWdpc3RlciBBUkNIRCAqIGFyY24pCisgICAgICAgICogZGF0YSBmb2xsb3dzIHRoaXMgZmlsZSwgc28gc2V0IHRoZSBwYWQKKyAgICAgICAgKi8KKyAgICAgICBoZC0+bGlua2ZsYWcgPSBBUkVHVFlQRTsKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorICAgICAgIGlmICh1cWRfb2N0ICgodV9xdWFkX3QpIGFyY24tPnNiLnN0X3NpemUsIGhkLT5zaXplLAorIAkJICAgc2l6ZW9mIChoZC0+c2l6ZSksIDEpKQorICNlbHNlCitAQCAtODM0LDcgKzgzOCw4IEBAIHVzdGFyX3JkIChBUkNIRCAqYXJjbiwgY2hhciAqYnVmKQorICAgICovCisgICBhcmNuLT5zYi5zdF9tb2RlID0gKG1vZGVfdCkgKGFzY191bCAoaGQtPm1vZGUsIHNpemVvZiAoaGQtPm1vZGUpLCBPQ1QpICYKKyAJCQkgICAgICAgMHhmZmYpOworLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgICBhcmNuLT5zYi5zdF9zaXplID0gKG9mZl90KSBhc2NfdXFkIChoZC0+c2l6ZSwgc2l6ZW9mIChoZC0+c2l6ZSksIE9DVCk7CisgI2Vsc2UKKyAgIGFyY24tPnNiLnN0X3NpemUgPSAob2ZmX3QpIGFzY191bCAoaGQtPnNpemUsIHNpemVvZiAoaGQtPnNpemUpLCBPQ1QpOworQEAgLTEwODEsNyArMTA4Niw4IEBAIHVzdGFyX3dyIChyZWdpc3RlciBBUkNIRCAqIGFyY24pCisgICAgICAgZWxzZQorIAloZC0+dHlwZWZsYWcgPSBSRUdUWVBFOworICAgICAgIGFyY24tPnBhZCA9IFRBUl9QQUQgKGFyY24tPnNiLnN0X3NpemUpOworLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgICAgICAgaWYgKHVxZF9vY3QgKCh1X3F1YWRfdCkgYXJjbi0+c2Iuc3Rfc2l6ZSwgaGQtPnNpemUsCisgCQkgICBzaXplb2YgKGhkLT5zaXplKSwgMykpCisgCXsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXhfMy40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGF4L3BheF8zLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQwNDg3MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXhfMy40LmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiUG9ydGFibGUgQXJjaGl2ZSBlWGNoYW5nZSIKK0RFU0NSSVBUSU9OID0gInBheCAoUG9ydGFibGUgQXJjaGl2ZSBlWGNoYW5nZSkgaXMgdGhlIFBPU0lYIHN0YW5kYXJkIGFyY2hpdmUgdG9vbCIKK0hPTUVQQUdFID0gImh0dHA6Ly9jdnN3ZWIub3BlbmJzZC5vcmcvY2dpLWJpbi9jdnN3ZWIvc3JjL2Jpbi9wYXgvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vd3d3Lm9wZW5ic2Qub3JnL3F1ZXJ5LXByLmh0bWwiCisKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGIwYjY3NGRmZGM1NmRhYTM4MzJkNDA2OWI4MjBlYTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3BheC5oO2VuZGxpbmU9NDA7bWQ1PTMwOWQzZTI0MWMxZDgyMDY5MjI4ZTVhNTFlOWI4ZDYwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9jcGlvLmg7ZW5kbGluZT00MDttZDU9YzNiNGJiZmY2MTMzYTgzMzg3OTY4NjE3YmJhZThhYzQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL3Zpcy5oO2VuZGxpbmU9NDA7bWQ1PWIyODNmNzU5YWJkNGE1YWQ3ZTAxNGI4MGY1MWZjMDUzIgorCitTRUNUSU9OID0gImJhc2UiCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJodHRwOi8vcGtncy5mZWRvcmFwcm9qZWN0Lm9yZy9yZXBvL3BrZ3MvJHtCUE59LyR7QlB9LnRhci5iejIvZmJkOTAyM2I1OTBiNDVhYzNhZGU5NTg3MDcwMmEwZDYvJHtCUH0udGFyLmJ6MiBcCisJZmlsZTovL2ZpeF9mb3JfY29tcGlsZV93aXRoX2djYy00LjYuMC5wYXRjaCBcCisJZmlsZTovL3BheC0zLjRfZml4X2Zvcl94MzIucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmYmQ5MDIzYjU5MGI0NWFjM2FkZTk1ODcwNzAyYTBkNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhYzNjMDYwNDhlMDI4MjgwNzdjZjc3NTdkM2QxNDIyNDE0MjkyMzg4OTNiOTFkNTI5YWYyOWEyZThjYzU2MjNiIgorCitpbmhlcml0IGF1dG90b29scwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGJ6aXAyL3BiemlwMl8xLjEuMTIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYnppcDIvcGJ6aXAyXzEuMS4xMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzMwOTgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGJ6aXAyL3BiemlwMl8xLjEuMTIuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJQQlpJUDIgaXMgYSBwYXJhbGxlbCBpbXBsZW1lbnRhdGlvbiBvZiBiemlwMiIKK0RFU0NSSVBUSU9OID0gIlBCWklQMiBpcyBhIHBhcmFsbGVsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBiemlwMiBibG9jay1zb3J0aW5nIFwKK2ZpbGUgY29tcHJlc3NvciB0aGF0IHVzZXMgcHRocmVhZHMgYW5kIGFjaGlldmVzIG5lYXItbGluZWFyIHNwZWVkdXAgb24gU01QIFwKK21hY2hpbmVzLiBUaGUgb3V0cHV0IG9mIHRoaXMgdmVyc2lvbiBpcyBmdWxseSBjb21wYXRpYmxlIHdpdGggYnppcDIgdjEuMC4yIG9yIFwKK25ld2VyIChpZTogYW55dGhpbmcgY29tcHJlc3NlZCB3aXRoIHBiemlwMiBjYW4gYmUgZGVjb21wcmVzc2VkIHdpdGggYnppcDIpLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9jb21wcmVzc2lvbi5jYS9wYnppcDIvIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00YzRmMmVkZWM5Njc5ZDVhYmVmMzUxNGE4MTZiNTRhNCIKKworREVQRU5EUyA9ICJiemlwMiIKK0RFUEVORFNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgYnppcDItcmVwbGFjZW1lbnQtbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHBzOi8vbGF1bmNocGFkLm5ldC8ke0JQTn0vMS4xLyR7UFZ9Lytkb3dubG9hZC8ke0JQfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5MWE0OTExYjEzMzA1ODUwNDIzODQwZWIwZmE2ZjRmOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1NzNiYjM1OGE1YTdkM2JmNWY0MmY4ODFhZjMyNGNlZGY5NjBjNzg2ZThkNjZkZDAzZDQ0OGRkZDhhMDE2NmVlIgorCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgorCitFWFRSQV9PRU1BS0UgPSAiQ1hYPScke0NYWH0gJHtDWFhGTEFHU30nIExERkxBR1M9JyR7TERGTEFHU30nIgorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorICAgIGluc3RhbGwgLW0gMDc1NSBwYnppcDIgJHtEfSR7YmluZGlyfS8KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYmNvbnZlcnQtYXNuMS1wZXJsXzAuMjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYmNvbnZlcnQtYXNuMS1wZXJsXzAuMjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcwZTdlYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGliY29udmVydC1hc24xLXBlcmxfMC4yNy5iYgpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIkNvbnZlcnQ6OkFTTjEgLSBQZXJsIEFTTi4xIEVuY29kZS9EZWNvZGUgbGlicmFyeSIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUUubWQ7YmVnaW5saW5lPTkxO2VuZGxpbmU9OTc7bWQ1PWNlZmY3ZmQyODZlYjZkOGU4ZTBkM2QyM2UwOTZhNjNmIgorCitTUkNfVVJJID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi9hdXRob3JzL2lkL0cvR0IvR0JBUlIvQ29udmVydC1BU04xLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjY4NzIzZTk2YmUwYjI1OGE5ZTIwNDgwMjc2ZThhNjJjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc0YTRhNzhhZTBjNWU5NzMxMDBhYzBhOGYyMDNhMTEwZjc2ZmIwNDdiNzlkYWU0ZmMxZmQ3ZDY4MTRkM2Q1OGEiCisKK1MgPSAiJHtXT1JLRElSfS9Db252ZXJ0LUFTTjEtJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitFWFRSQV9QRVJMRkxBR1MgPSAiLUkgJHtQRVJMSE9TVExJQn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ0aW1lZGF0ZS1wZXJsXzIuMzAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnRpbWVkYXRlLXBlcmxfMi4zMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGZjZGU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ0aW1lZGF0ZS1wZXJsXzIuMzAuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJQZXJsIG1vZHVsZXMgdXNlZnVsIGZvciBtYW5pcHVsYXRpbmcgZGF0ZSBhbmQgdGltZSBpbmZvcm1hdGlvbiIKK1NFQ1RJT04gPSAibGlicyIKKyMgWW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBQZXJsIGl0c2VsZi4KK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7YmVnaW5saW5lPTIxO21kNT01NzZiN2NiNDFlNWU4MjE1MDFhMDFlZDY2ZjBmOWQ5ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9HL0dCL0dCQVJSL1RpbWVEYXRlLSR7UFZ9LnRhci5neiIKKworUyA9ICIke1dPUktESVJ9L1RpbWVEYXRlLSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfSArPSAicGVybC1tb2R1bGUtY2FycCBwZXJsLW1vZHVsZS1leHBvcnRlciBwZXJsLW1vZHVsZS1zdHJpY3QgcGVybC1tb2R1bGUtdGltZS1sb2NhbCIKKworU1JDX1VSSVttZDVzdW1dID0gImIxZDkxMTUzYWM5NzEzNDdhZWU4NDI5MmVkODg2YzFjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc1YmQyNTQ4NzFjYjU4NTNhNmFhMDQwM2FjMGJlMjcwY2RkNzVjOWQxYjY2MzlmMThlY2JhNjNjMTUyOThlODYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1uYW1lc3BhY2VzdXBwb3J0LXBlcmxfMS4xMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGlieG1sLW5hbWVzcGFjZXN1cHBvcnQtcGVybF8xLjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhOWU3MTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1uYW1lc3BhY2VzdXBwb3J0LXBlcmxfMS4xMS5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIlBlcmwgbW9kdWxlIGZvciBzdXBwb3J0aW5nIHNpbXBsZSBnZW5lcmljIG5hbWVzcGFjZXMiCitERVNDUklQVElPTiA9ICJYTUw6Ok5hbWVzcGFjZVN1cHBvcnQgb2ZmZXJzIGEgc2ltcGxlIHdheSB0byBwcm9jZXNzIG5hbWVzcGFjZS1iYXNlZCBYTUwgbmFtZXMuIFwKKyAgICAgICAgICAgICAgICBJdCBhbHNvIGhlbHBzIG1haW50YWluIGEgcHJlZml4LXRvLW5hbWVzcGFjZSBVUkkgbWFwLCBhbmQgcHJvdmlkZXMgYSBudW1iZXIgb2YgXAorICAgICAgICAgICAgICAgIGJhc2ljIGNoZWNrcy4gIgorCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorUFIgPSAicjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL01FVEEueW1sO2JlZ2lubGluZT0yMjtlbmRsaW5lPTIyO21kNT0zYjJiNTY0ZGFlOGI5YWY5ZTg4OTZlODVjMDdkY2JlNSIKKworU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9QL1BFL1BFUklHUklOL1hNTC1OYW1lc3BhY2VTdXBwb3J0LSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIyMjJjY2E3NjE2MWNkOTU2ZDcyNDI4NmQzNmI2MDdkYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2ZDgxNTFmMGEzZjEwMjMxM2Q3NmI2NGJmZDFjMmQ5ZWQ0NmJmZTYzYTE2ZjAzOGU3ZDg2MGZkYTI4N2I3NGVhIgorCisKK1MgPSAiJHtXT1JLRElSfS9YTUwtTmFtZXNwYWNlU3VwcG9ydC0ke1BWfSIKKworaW5oZXJpdCBjcGFuCisKK0JCQ0xBU1NFWFRFTkQ9Im5hdGl2ZSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ4bWwtc2F4LWJhc2UtcGVybF8xLjA4LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ4bWwtc2F4LWJhc2UtcGVybF8xLjA4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YTMzNzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1zYXgtYmFzZS1wZXJsXzEuMDguYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJCYXNlIGNsYXNzIFNBWCBEcml2ZXJzIGFuZCBGaWx0ZXJzIgorREVTQ1JJUFRJT04gPSAiVGhpcyBtb2R1bGUgaGFzIGEgdmVyeSBzaW1wbGUgdGFzayAtIHRvIGJlIGEgYmFzZSBjbGFzcyBmb3IgXAorUGVybFNBWCBkcml2ZXJzIGFuZCBmaWx0ZXJzLiBJdCdzIGRlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIHBhc3MgXAordGhlIGlucHV0IGRpcmVjdGx5IHRvIHRoZSBvdXRwdXQgdW5jaGFuZ2VkLiBJdCBjYW4gYmUgdXNlZnVsIHRvIFwKK3VzZSB0aGlzIG1vZHVsZSBhcyBhIGJhc2UgY2xhc3Mgc28geW91IGRvbid0IGhhdmUgdG8sIGZvciBleGFtcGxlLCBcCitpbXBsZW1lbnQgdGhlIGNoYXJhY3RlcnMoKSBjYWxsYmFjay4iCisKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCitSREVQRU5EU18ke1BOfSArPSAicGVybC1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kaXN0LmluaTtlbmRsaW5lPTU7bWQ1PThmOWM5YTU1MzQwYWVmYWVlNmU5NzA0Yzg4NDY2NDQ2IgorCitTUkNfVVJJID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi9hdXRob3JzL2lkL0cvR1IvR1JBTlRNL1hNTC1TQVgtQmFzZS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzOGM4YzMyNDdkZmQwODA3MTI1OTYxMThkNzBkYmUzMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2NjYyNzAzMThiMTVmODhiODQyN2U1ODUxOThhYmJjMTliYzJlNmNjYjM2ZGM0YzBhNGYyZDk4MDczMzAyMTllIgorCitTID0gIiR7V09SS0RJUn0vWE1MLVNBWC1CYXNlLSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1zYXgtcGVybF8wLjk5LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ4bWwtc2F4LXBlcmxfMC45OS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWQzOTY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ4bWwtc2F4LXBlcmxfMC45OS5iYgpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIlBlcmwgbW9kdWxlIGZvciB1c2luZyBhbmQgYnVpbGRpbmcgUGVybCBTQVgyIFhNTCBwcm9jZXNzb3JzIgorREVTQ1JJUFRJT04gPSAiWE1MOjpTQVggY29uc2lzdHMgb2Ygc2V2ZXJhbCBmcmFtZXdvcmsgY2xhc3NlcyBmb3IgdXNpbmcgYW5kIFwKK2J1aWxkaW5nIFBlcmwgU0FYMiBYTUwgcGFyc2VycywgZmlsdGVycywgYW5kIGRyaXZlcnMuICBJdCBpcyBkZXNpZ25lZCBcIAorYXJvdW5kIHRoZSBuZWVkIHRvIGJlIGFibGUgdG8gInBsdWcgaW4iIGRpZmZlcmVudCBTQVggcGFyc2VycyB0byBhbiBcCithcHBsaWNhdGlvbiB3aXRob3V0IHJlcXVpcmluZyBwcm9ncmFtbWVyIGludGVydmVudGlvbi4gIFRob3NlIG9mIHlvdSBcCitmYW1pbGlhciB3aXRoIHRoZSBEQkkgd2lsbCBiZSByaWdodCBhdCBob21lLiAgU29tZSBvZiB0aGUgZGVzaWducyBcCitjb21lIGZyb20gdGhlIEphdmEgSkFYUCBzcGVjaWZpY2F0aW9uIChTQVggcGFydCksIG9ubHkgd2l0aG91dCB0aGUgXAoramF2YW5lc3MuIgorCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorREVQRU5EUyArPSAibGlieG1sLW5hbWVzcGFjZXN1cHBvcnQtcGVybC1uYXRpdmUiCitSREVQRU5EU18ke1BOfSArPSAibGlieG1sLW5hbWVzcGFjZXN1cHBvcnQtcGVybCBsaWJ4bWwtc2F4LWJhc2UtcGVybCBwZXJsLW1vZHVsZS1maWxlLXRlbXAiCitQUiA9ICJyMiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NjVjNGNkOGYzOWMyNGM3MTM1ZWQ3MGRhY2JjYjA5ZTMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOL2F1dGhvcnMvaWQvRy9HUi9HUkFOVE0vWE1MLVNBWC0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyOTBmNTM3NWFlODdmZGViZmRiNWJjMzg1NDAxOWYyNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzMmIwNGI4ZTM2YjZjYzRjZmM0ODZkZTJkODU5ZDg3YWY1Mzg2ZGQ5MzBmMjM4M2M0OTM0NzA1MGQ2ZjVhZDg0IgorCitTID0gIiR7V09SS0RJUn0vWE1MLVNBWC0ke1BWfSIKKworaW5oZXJpdCBjcGFuCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BpZ3ovcGlnei5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I4OTkxZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BpZ3ovcGlnei5pbmMKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJBIHBhcmFsbGVsIGltcGxlbWVudGF0aW9uIG9mIGd6aXAiCitERVNDUklQVElPTiA9ICJwaWd6LCB3aGljaCBzdGFuZHMgZm9yIHBhcmFsbGVsIGltcGxlbWVudGF0aW9uIG9mIGd6aXAsIGlzIGEgXAorZnVsbHkgZnVuY3Rpb25hbCByZXBsYWNlbWVudCBmb3IgZ3ppcCB0aGF0IGV4cGxvaXRzIG11bHRpcGxlIHByb2Nlc3NvcnMgYW5kIFwKK211bHRpcGxlIGNvcmVzIHRvIHRoZSBoaWx0IHdoZW4gY29tcHJlc3NpbmcgZGF0YS4gcGlneiB3YXMgd3JpdHRlbiBieSBNYXJrIFwKK0FkbGVyLCBhbmQgdXNlcyB0aGUgemxpYiBhbmQgcHRocmVhZCBsaWJyYXJpZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3psaWIubmV0L3BpZ3ovIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJabGliICYgQXBhY2hlLTIuMCIKKworU1JDX1VSSSA9ICJodHRwOi8vemxpYi5uZXQvJHtCUE59LyR7QlB9LnRhci5neiIKKworUFJPVklERVNfY2xhc3MtbmF0aXZlICs9ICJnemlwLW5hdGl2ZSIKKworREVQRU5EUyA9ICJ6bGliIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworZG9faW5zdGFsbF9jbGFzcy10YXJnZXQoKSB7CisJIyBJbnN0YWxsIGZpbGVzIGludG8gL2JpbiAoRkhTKSwgd2hpY2ggaXMgdHlwaWNhbCBwbGFjZSBmb3IgZ3ppcAorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJaW5zdGFsbCAke0J9L3BpZ3ogJHtEfSR7YmFzZV9iaW5kaXJ9L3BpZ3oKKwlsbiAtbnNmIHBpZ3ogJHtEfSR7YmFzZV9iaW5kaXJ9L3VucGlnegorCWxuIC1uc2YgcGlneiAke0R9JHtiYXNlX2JpbmRpcn0vcGlnemNhdAorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgJHtCfS9waWd6ICR7RH0ke2JpbmRpcn0vZ3ppcAorCWxuIC1uc2YgZ3ppcCAke0R9JHtiaW5kaXJ9L2d1bnppcAorCWxuIC1uc2YgZ3ppcCAke0R9JHtiaW5kaXJ9L3pjYXQKK30KKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiODAiCitBTFRFUk5BVElWRV8ke1BOfSA9ICJndW56aXAgZ3ppcCB6Y2F0IgorQUxURVJOQVRJVkVfJHtQTn1fY2xhc3MtbmF0aXZlc2RrID0gIiIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtndW56aXBdID0gIiR7YmFzZV9iaW5kaXJ9L2d1bnppcCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtnemlwXSA9ICIke2Jhc2VfYmluZGlyfS9nemlwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3pjYXRdID0gIiR7YmFzZV9iaW5kaXJ9L3pjYXQiCitBTFRFUk5BVElWRV9UQVJHRVQgPSAiJHtiYXNlX2JpbmRpcn0vcGlneiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BpZ3ovcGlnei9saW5rLW9yZGVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6L2xpbmstb3JkZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJlY2MwZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BpZ3ovcGlnei9saW5rLW9yZGVyLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK1RoaXMgcGF0Y2ggYXZvaWRzIHVuZGVybGlua2luZyBpc3N1ZXMgc2luY2Ugd2UgcGFzcyAtbHogdmlhIExERkxBR1MgYnV0IGl0IGFwcGVhcnMKK2JlZm9yZSBwaWd6Lm8gd2hpY2ggbmVlZHMgc3ltYm9scyBmcm9tIGxpYnogaG93ZXZlciBkdWUgdG8gb3JkZXIgbGlua2VyIGhhcHBpbHkgZGlzY2FyZHMgbGliegorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IHBpZ3otMi4zLjMvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwaWd6LTIuMy4zLm9yaWcvTWFrZWZpbGUJMjAxNS0wMS0xOSAyMDoxMjozMS4wMDAwMDAwMDAgLTA4MDAKKysrKyBwaWd6LTIuMy4zL01ha2VmaWxlCTIwMTUtMDEtMjggMDk6MTE6NTAuMjY2NjY5MTg0IC0wODAwCitAQCAtNSw3ICs1LDcgQEAKKyAjIHVzZSBnY2MgYW5kIGdtYWtlIG9uIFNvbGFyaXMKKyAKKyBwaWd6OiBwaWd6Lm8geWFybi5vIHRyeS5vICR7Wk9QRkxJfWRlZmxhdGUubyAke1pPUEZMSX1ibG9ja3NwbGl0dGVyLm8gJHtaT1BGTEl9dHJlZS5vICR7Wk9QRkxJfWx6NzcubyAke1pPUEZMSX1jYWNoZS5vICR7Wk9QRkxJfWhhc2gubyAke1pPUEZMSX11dGlsLm8gJHtaT1BGTEl9c3F1ZWV6ZS5vICR7Wk9QRkxJfWthdGFqYWluZW4ubworLQkkKENDKSAkKExERkxBR1MpIC1vIHBpZ3ogJF4gLWxwdGhyZWFkIC1sbQorKwkkKENDKSAtbyBwaWd6ICReICQoTERGTEFHUykgLWx6IC1scHRocmVhZCAtbG0KKyAJbG4gLWYgcGlneiB1bnBpZ3oKKyAKKyBwaWd6Lm86IHBpZ3ouYyB5YXJuLmggdHJ5LmggJHtaT1BGTEl9ZGVmbGF0ZS5oICR7Wk9QRkxJfXV0aWwuaAorQEAgLTM1LDcgKzM1LDcgQEAKKyBkZXY6IHBpZ3ogcGlnenQgcGlnem4KKyAKKyBwaWd6dDogcGlnenQubyB5YXJudC5vIHRyeS5vICR7Wk9QRkxJfWRlZmxhdGUubyAke1pPUEZMSX1ibG9ja3NwbGl0dGVyLm8gJHtaT1BGTEl9dHJlZS5vICR7Wk9QRkxJfWx6NzcubyAke1pPUEZMSX1jYWNoZS5vICR7Wk9QRkxJfWhhc2gubyAke1pPUEZMSX11dGlsLm8gJHtaT1BGTEl9c3F1ZWV6ZS5vICR7Wk9QRkxJfWthdGFqYWluZW4ubworLQkkKENDKSAkKExERkxBR1MpIC1vIHBpZ3p0ICReIC1scHRocmVhZCAtbG0KKysJJChDQykgLW8gcGlnenQgJF4gJChMREZMQUdTKSAtbHogLWxwdGhyZWFkIC1sbQorIAorIHBpZ3p0Lm86IHBpZ3ouYyB5YXJuLmggdHJ5LmgKKyAJJChDQykgJChDRkxBR1MpIC1EREVCVUcgLWcgLWMgLW8gcGlnenQubyBwaWd6LmMKK0BAIC00NCw3ICs0NCw3IEBACisgCSQoQ0MpICQoQ0ZMQUdTKSAtRERFQlVHIC1nIC1jIC1vIHlhcm50Lm8geWFybi5jCisgCisgcGlnem46IHBpZ3puLm8gdHJ5bi5vICR7Wk9QRkxJfWRlZmxhdGUubyAke1pPUEZMSX1ibG9ja3NwbGl0dGVyLm8gJHtaT1BGTEl9dHJlZS5vICR7Wk9QRkxJfWx6NzcubyAke1pPUEZMSX1jYWNoZS5vICR7Wk9QRkxJfWhhc2gubyAke1pPUEZMSX11dGlsLm8gJHtaT1BGTEl9c3F1ZWV6ZS5vICR7Wk9QRkxJfWthdGFqYWluZW4ubworLQkkKENDKSAkKExERkxBR1MpIC1vIHBpZ3puICReIC1sbQorKwkkKENDKSAtbyBwaWd6biAkXiAkKExERkxBR1MpIC1seiAtbG0KKyAKKyBwaWd6bi5vOiBwaWd6LmMgdHJ5LmgKKyAJJChDQykgJChDRkxBR1MpIC1EREVCVUcgLUROT1RIUkVBRCAtZyAtYyAtbyBwaWd6bi5vIHBpZ3ouYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6XzIuMy4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6XzIuMy4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MGJlMmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9waWd6L3BpZ3pfMi4zLjMuYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSBwaWd6LmluYworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vcGlnei5jO2JlZ2lubGluZT03O2VuZGxpbmU9MjE7bWQ1PWEyMWQ0MDc1Y2IwMGFiNGNhMTdmY2U1ZTc1MzRjYTk1IgorCitTUkNfVVJJICs9ICJmaWxlOi8vbGluay1vcmRlci5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjAxZDdhMTZjY2U3NzkyOWNjMWE3OGFhMWJkZmI2OGNiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjRlOGI2N2I0MzJjZTc5MDc1NzVhNTQ5ZjNlMWNhYzQ3MDk3ODFiYTBmNmI0OGFmZWE5ZjU5MzY5ODQ2YjUwOWMiCisKK05BVElWRV9QQUNLQUdFX1BBVEhfU1VGRklYID0gIi8ke1BOfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzL2ZpeC1jb25maWd1cmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzL2ZpeC1jb25maWd1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM0YWU4MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHMvZml4LWNvbmZpZ3VyZS5wYXRjaApAQCAtMCwwICsxLDE5IEBACisKK2V4ZWNfcHJlZml4IGlzIC91c3IgZGVmYXVsdCBpbiBPRS1Db3JlCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK0luZGV4OiBwcm9jcHMtbmctMy4zLjEwL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHByb2Nwcy1uZy0zLjMuMTAub3JpZy9jb25maWd1cmUuYWMKKysrKyBwcm9jcHMtbmctMy4zLjEwL2NvbmZpZ3VyZS5hYworQEAgLTcwLDcgKzcwLDcgQEAgQUNfRlVOQ19NTUFQCisgQUNfRlVOQ19SRUFMTE9DCisgQUNfRlVOQ19TVFJUT0QKKyAKKy11c3JiaW5fZXhlY2Rpcj0nJHtleGVjX3ByZWZpeH0vdXNyL2JpbicKKyt1c3JiaW5fZXhlY2Rpcj0nJHtleGVjX3ByZWZpeH0vYmluJworIEFDX1NVQlNUKFt1c3JiaW5fZXhlY2Rpcl0pCisgCisgQU1fR05VX0dFVFRFWFRfVkVSU0lPTihbMC4xNC4xXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHMvc3lzY3RsLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzL3N5c2N0bC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZTc0ODgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzL3N5c2N0bC5jb25mCkBAIC0wLDAgKzEsNjQgQEAKKyMgVGhpcyBjb25maWd1cmF0aW9uIGZpbGUgaXMgdGFrZW4gZnJvbSBEZWJpYW4uCisjCisjIC9ldGMvc3lzY3RsLmNvbmYgLSBDb25maWd1cmF0aW9uIGZpbGUgZm9yIHNldHRpbmcgc3lzdGVtIHZhcmlhYmxlcworIyBTZWUgc3lzY3RsLmNvbmYgKDUpIGZvciBpbmZvcm1hdGlvbi4KKyMKKworI2tlcm5lbC5kb21haW5uYW1lID0gZXhhbXBsZS5jb20KKworIyBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyB0byBzdG9wIGxvdy1sZXZlbCBtZXNzYWdlcyBvbiBjb25zb2xlCisja2VybmVsLnByaW50ayA9IDQgNCAxIDcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMzCisjIEZ1bmN0aW9ucyBwcmV2aW91c2x5IGZvdW5kIGluIG5ldGJhc2UKKyMKKworIyBVbmNvbW1lbnQgdGhlIG5leHQgdHdvIGxpbmVzIHRvIGVuYWJsZSBTcG9vZiBwcm90ZWN0aW9uIChyZXZlcnNlLXBhdGggZmlsdGVyKQorIyBUdXJuIG9uIFNvdXJjZSBBZGRyZXNzIFZlcmlmaWNhdGlvbiBpbiBhbGwgaW50ZXJmYWNlcyB0bworIyBwcmV2ZW50IHNvbWUgc3Bvb2ZpbmcgYXR0YWNrcworbmV0LmlwdjQuY29uZi5kZWZhdWx0LnJwX2ZpbHRlcj0xCituZXQuaXB2NC5jb25mLmFsbC5ycF9maWx0ZXI9MQorCisjIFVuY29tbWVudCB0aGUgbmV4dCBsaW5lIHRvIGVuYWJsZSBUQ1AvSVAgU1lOIGNvb2tpZXMKKyNuZXQuaXB2NC50Y3Bfc3luY29va2llcz0xCisKKyMgVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgdG8gZW5hYmxlIHBhY2tldCBmb3J3YXJkaW5nIGZvciBJUHY0CisjbmV0LmlwdjQuaXBfZm9yd2FyZD0xCisKKyMgVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgdG8gZW5hYmxlIHBhY2tldCBmb3J3YXJkaW5nIGZvciBJUHY2CisjbmV0LmlwdjYuY29uZi5hbGwuZm9yd2FyZGluZz0xCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBZGRpdGlvbmFsIHNldHRpbmdzIC0gdGhlc2Ugc2V0dGluZ3MgY2FuIGltcHJvdmUgdGhlIG5ldHdvcmsKKyMgc2VjdXJpdHkgb2YgdGhlIGhvc3QgYW5kIHByZXZlbnQgYWdhaW5zdCBzb21lIG5ldHdvcmsgYXR0YWNrcworIyBpbmNsdWRpbmcgc3Bvb2ZpbmcgYXR0YWNrcyBhbmQgbWFuIGluIHRoZSBtaWRkbGUgYXR0YWNrcyB0aHJvdWdoCisjIHJlZGlyZWN0aW9uLiBTb21lIG5ldHdvcmsgZW52aXJvbm1lbnRzLCBob3dldmVyLCByZXF1aXJlIHRoYXQgdGhlc2UKKyMgc2V0dGluZ3MgYXJlIGRpc2FibGVkIHNvIHJldmlldyBhbmQgZW5hYmxlIHRoZW0gYXMgbmVlZGVkLgorIworIyBJZ25vcmUgSUNNUCBicm9hZGNhc3RzCisjbmV0LmlwdjQuaWNtcF9lY2hvX2lnbm9yZV9icm9hZGNhc3RzID0gMQorIworIyBJZ25vcmUgYm9ndXMgSUNNUCBlcnJvcnMKKyNuZXQuaXB2NC5pY21wX2lnbm9yZV9ib2d1c19lcnJvcl9yZXNwb25zZXMgPSAxCisjCisjIERvIG5vdCBhY2NlcHQgSUNNUCByZWRpcmVjdHMgKHByZXZlbnQgTUlUTSBhdHRhY2tzKQorI25ldC5pcHY0LmNvbmYuYWxsLmFjY2VwdF9yZWRpcmVjdHMgPSAwCisjbmV0LmlwdjYuY29uZi5hbGwuYWNjZXB0X3JlZGlyZWN0cyA9IDAKKyMgX29yXworIyBBY2NlcHQgSUNNUCByZWRpcmVjdHMgb25seSBmb3IgZ2F0ZXdheXMgbGlzdGVkIGluIG91ciBkZWZhdWx0CisjIGdhdGV3YXkgbGlzdCAoZW5hYmxlZCBieSBkZWZhdWx0KQorIyBuZXQuaXB2NC5jb25mLmFsbC5zZWN1cmVfcmVkaXJlY3RzID0gMQorIworIyBEbyBub3Qgc2VuZCBJQ01QIHJlZGlyZWN0cyAod2UgYXJlIG5vdCBhIHJvdXRlcikKKyNuZXQuaXB2NC5jb25mLmFsbC5zZW5kX3JlZGlyZWN0cyA9IDAKKyMKKyMgRG8gbm90IGFjY2VwdCBJUCBzb3VyY2Ugcm91dGUgcGFja2V0cyAod2UgYXJlIG5vdCBhIHJvdXRlcikKKyNuZXQuaXB2NC5jb25mLmFsbC5hY2NlcHRfc291cmNlX3JvdXRlID0gMAorI25ldC5pcHY2LmNvbmYuYWxsLmFjY2VwdF9zb3VyY2Vfcm91dGUgPSAwCisjCisjIExvZyBNYXJ0aWFuIFBhY2tldHMKKyNuZXQuaXB2NC5jb25mLmFsbC5sb2dfbWFydGlhbnMgPSAxCisjCisKKyNrZXJuZWwuc2htbWF4ID0gMTQxNzYyNTYwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzXzMuMy4xMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHNfMy4zLjEwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZmFiYTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzXzMuMy4xMC5iYgpAQCAtMCwwICsxLDY3IEBACitTVU1NQVJZID0gIlN5c3RlbSBhbmQgcHJvY2VzcyBtb25pdG9yaW5nIHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIlByb2NwcyBjb250YWlucyBhIHNldCBvZiBzeXN0ZW0gdXRpbGl0aWVzIHRoYXQgcHJvdmlkZSBzeXN0ZW0gaW5mb3JtYXRpb24gYWJvdXQgcHJvY2Vzc2VzIHVzaW5nIFwKK3RoZSAvcHJvYyBmaWxlc3lzdGVtLiBUaGUgcGFja2FnZSBpbmNsdWRlcyB0aGUgcHJvZ3JhbXMgcHMsIHRvcCwgdm1zdGF0LCB3LCBraWxsLCBhbmQgc2tpbGwuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRvcmlvdXMub3JnL3Byb2NwcyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU09ImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTRjZjY2YTQ5ODQxMjAwMDdjOTg4MWNjODcxY2Y0OWRiIFwKKyAgICAgICAgICAgICAgICAgIgorCitERVBFTkRTID0gIm5jdXJzZXMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Byb2Nwcy1uZy9Qcm9kdWN0aW9uL3Byb2Nwcy1uZy0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vZml4LWNvbmZpZ3VyZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zeXNjdGwuY29uZiBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWZiN2YzZjZiZjkyY2U2YzVjOWVkOTk0OWFlODU4ZmUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTAyZTZmOTg5NzRkZmNlYWI3OTg4NGRmOTAyY2EzZGYzMGIwZTliYWQ2ZDc2YWVlMGZiNWRjZTE3ZjI2N2YwNCIKKworUyA9ICIke1dPUktESVJ9L3Byb2Nwcy1uZy0ke1BWfSIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNraWxsIC0tZGlzYWJsZS1tb2Rlcm4tdG9wIgorCitDUFBGTEFHUyArPSAiLUkke1N9IgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwlbICIke2JpbmRpcn0iICE9ICIke2Jhc2VfYmluZGlyfSIgXSAmJiBmb3IgaSBpbiAke2Jhc2VfYmluZGlyX3Byb2dzfTsgZG8gbXYgJHtEfSR7YmluZGlyfS8kaSAke0R9JHtiYXNlX2JpbmRpcn0vJGk7IGRvbmUKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2Vfc2JpbmRpcn0KKwlbICIke3NiaW5kaXJ9IiAhPSAiJHtiYXNlX3NiaW5kaXJ9IiBdICYmIGZvciBpIGluICR7YmFzZV9zYmluZGlyX3Byb2dzfTsgZG8gbXYgJHtEfSR7c2JpbmRpcn0vJGkgJHtEfSR7YmFzZV9zYmluZGlyfS8kaTsgZG9uZQorICAgICAgICBpZiBbICIke2Jhc2Vfc2JpbmRpcn0iICE9ICIke3NiaW5kaXJ9IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgcm1kaXIgJHtEfSR7c2JpbmRpcn0KKyAgICAgICAgZmkKKworICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3N5c2N0bC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2N0bC5jb25mCisgICAgICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKyAgICAgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2N0bC5kCisgICAgICAgICAgICAgICAgbG4gLXNmIC4uL3N5c2N0bC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2N0bC5kLzk5LXN5c2N0bC5jb25mCisgICAgICAgIGZpCit9CisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L3N5c2N0bC5jb25mIgorCitiaW5kaXJfcHJvZ3MgPSAiZnJlZSBwa2lsbCBwbWFwIHBncmVwIHB3ZHggc2tpbGwgc25pY2UgdG9wIHVwdGltZSIKK2Jhc2VfYmluZGlyX3Byb2dzICs9ICJraWxsIHBpZG9mIHBzIHdhdGNoIgorYmFzZV9zYmluZGlyX3Byb2dzICs9ICJzeXNjdGwiCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiJHtiaW5kaXJfcHJvZ3N9ICR7YmFzZV9iaW5kaXJfcHJvZ3N9ICR7YmFzZV9zYmluZGlyX3Byb2dzfSIKKworQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gImtpbGwuMSB1cHRpbWUuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtraWxsLjFdID0gIiR7bWFuZGlyfS9tYW4xL2tpbGwuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt1cHRpbWUuMV0gPSAiJHttYW5kaXJ9L21hbjEvdXB0aW1lLjEiCisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBmb3IgcHJvZyBpbiBkLmdldFZhcignYmFzZV9iaW5kaXJfcHJvZ3MnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIHByb2csICclcy8lcycgJSAoZC5nZXRWYXIoJ2Jhc2VfYmluZGlyJywgVHJ1ZSksIHByb2cpKQorCisgICAgZm9yIHByb2cgaW4gZC5nZXRWYXIoJ2Jhc2Vfc2JpbmRpcl9wcm9ncycsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignYmFzZV9zYmluZGlyJywgVHJ1ZSksIHByb2cpKQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wc21pc2MvZmlsZXMvMDAwMS1UeXBvLWluLWZ1c2VyLW1ha2VzLU0tb24tYWxsLXRoZS10aW1lLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL2ZpbGVzLzAwMDEtVHlwby1pbi1mdXNlci1tYWtlcy1NLW9uLWFsbC10aGUtdGltZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTdkNjBmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL2ZpbGVzLzAwMDEtVHlwby1pbi1mdXNlci1tYWtlcy1NLW9uLWFsbC10aGUtdGltZS5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIDM2MzhjYzU1YjRkMDg4NTFmYWJhNDY2MzVkNzM3YjI0ZDAxNjY2NWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmFkIEpvcnNjaCA8YW5vbWllQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6IEZyaSwgMjggRmViIDIwMTQgMjE6NTU6MDIgKzExMDAKK1N1YmplY3Q6IFtQQVRDSF0gVHlwbyBpbiBmdXNlciBtYWtlcyAtTSBvbiBhbGwgdGhlIHRpbWUKKworQnJhZCBmb3VuZCB0aGF0IGZ1c2VyIGhhZCB0aGUgLU0gb3B0aW9uIG9uIGFsbCB0aGUgdGltZS4KK0Egc2ltcGxlIGJ1dCBzaWduaWZpY2FudCB0eXBvIGNhdXNlZCB0aGlzLCB0aGFua3MgdGhlIHRoZSBwYXRjaC4KKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy83NDAyNzUKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBDcmFpZyBTbWFsbCA8Y3NtYWxsQGVuYy5jb20uYXU+CistLS0KKyBDaGFuZ2VMb2cgICB8IDQgKysrKworIHNyYy9mdXNlci5jIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKK2luZGV4IGZkMWNjY2YuLmU1Zjc4NGMgMTAwNjQ0CistLS0gYS9DaGFuZ2VMb2cKKysrKyBiL0NoYW5nZUxvZworQEAgLTEsMyArMSw3IEBACisrQ2hhbmdlcyBpbiAyMi4yMgorKz09PT09PT09PT09PT09PT0KKysJKiBGaXhlZCB0eXBvIGluIGZ1c2VyIHdoaWNoIGhhcyAtTSBvbiBEZWJpYW4gIzc0MDI3NQorKworIENoYW5nZXMgaW4gMjIuMjEKKyA9PT09PT09PT09PT09PT09CisgCSogTWlzc2luZyBjb21tYSBpbiBmdXNlcigxKSBhZGRlZCBEZWJpYW4gIzcwMjM5MQorZGlmZiAtLWdpdCBhL3NyYy9mdXNlci5jIGIvc3JjL2Z1c2VyLmMKK2luZGV4IGI0ODVmNjUuLjM4OWIzMDIgMTAwNjQ0CistLS0gYS9zcmMvZnVzZXIuYworKysrIGIvc3JjL2Z1c2VyLmMKK0BAIC0xMTc0LDcgKzExNzQsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkJdXNhZ2UoXygiTm8gcHJvY2VzcyBzcGVjaWZpY2F0aW9uIGdpdmVuIikpOworIAorIAkvKiBDaGVjayBpZiAtTSBmbGFnIHdhcyB1c2VkIGFuZCBpZiBzbyBjaGVjayBtb3VudHMgKi8KKy0JaWYgKG9wdHMgKiBPUFRfSVNNT1VOVFBPSU5UKSB7CisrCWlmIChvcHRzICYgT1BUX0lTTU9VTlRQT0lOVCkgeworIAkgICAgY2hlY2tfbW91bnRwb2ludHMoJm1vdW50cywgJm5hbWVzX2hlYWQsICZuYW1lc190YWlsKTsKKyAJfQorIAorLS0gCisxLjguNC4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9maWxlcy8wMDAyLUluY2x1ZGUtbGltaXRzLmgtZm9yLVBBVEhfTUFYLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL2ZpbGVzLzAwMDItSW5jbHVkZS1saW1pdHMuaC1mb3ItUEFUSF9NQVgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhhZmNhYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9maWxlcy8wMDAyLUluY2x1ZGUtbGltaXRzLmgtZm9yLVBBVEhfTUFYLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gYWE2NmFmZWNkOGJhOWNjNDEzOWYyNWFiMTVlYzMxNTE3MzQxM2E3ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgQmFya2VyIDxwYXVsQHBhdWxiYXJrZXIubWUudWs+CitEYXRlOiBXZWQsIDIwIEF1ZyAyMDE0IDEwOjMxOjM3ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEluY2x1ZGUgPGxpbWl0cy5oPiBmb3IgUEFUSF9NQVgKKworV2hlbiBidWlsZGluZyBhZ2FpbnN0IG11c2wgbGliYywgUEFUSF9NQVggaXMgZGVmaW5lZCBpbiA8bGltaXRzLmg+LgorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEJhcmtlciA8cGF1bEBwYXVsYmFya2VyLm1lLnVrPgorCitVcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkIChTaG91bGQgYmUgaW4gbmV4dCByZWxlYXNlIGFmdGVyIDIyLjIxKQorLS0tCisgc3JjL3BzdHJlZS5jIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9zcmMvcHN0cmVlLmMgYi9zcmMvcHN0cmVlLmMKK2luZGV4IDA3MWU2YzQuLjBkMjgyNjAgMTAwNjQ0CistLS0gYS9zcmMvcHN0cmVlLmMKKysrKyBiL3NyYy9wc3RyZWUuYworQEAgLTQxLDYgKzQxLDcgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyAKKyAjaW5jbHVkZSAiaTE4bi5oIgorICNpbmNsdWRlICJjb21tLmgiCistLSAKKzIuMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9wc21pc2MuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL3BzbWlzYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhlMDY1NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9wc21pc2MuaW5jCkBAIC0wLDAgKzEsNDQgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGZvciBtYW5hZ2luZyBwcm9jZXNzZXMgb24geW91ciBzeXN0ZW0iCitERVNDUklQVElPTiA9ICJUaGUgcHNtaXNjIHBhY2thZ2UgY29udGFpbnMgdXRpbGl0aWVzIGZvciBtYW5hZ2luZyBwcm9jZXNzZXMgb24geW91ciBcCitzeXN0ZW06IHBzdHJlZSwga2lsbGFsbCBhbmQgZnVzZXIuICBUaGUgcHN0cmVlIGNvbW1hbmQgZGlzcGxheXMgYSB0cmVlIFwKK3N0cnVjdHVyZSBvZiBhbGwgb2YgdGhlIHJ1bm5pbmcgcHJvY2Vzc2VzIG9uIHlvdXIgc3lzdGVtLiAgVGhlIGtpbGxhbGwgXAorY29tbWFuZCBzZW5kcyBhIHNwZWNpZmllZCBzaWduYWwgKFNJR1RFUk0gaWYgbm90aGluZyBpcyBzcGVjaWZpZWQpIHRvIFwKK3Byb2Nlc3NlcyBpZGVudGlmaWVkIGJ5IG5hbWUuICBUaGUgZnVzZXIgY29tbWFuZCBpZGVudGlmaWVzIHRoZSBQSURzIFwKK29mIHByb2Nlc3NlcyB0aGF0IGFyZSB1c2luZyBzcGVjaWZpZWQgZmlsZXMgb3IgZmlsZXN5c3RlbXMuIgorU0VDVElPTiA9ICJiYXNlIgorREVQRU5EUyA9ICJuY3Vyc2VzIHZpcnR1YWwvbGliaW50bCIKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3BzbWlzYy9wc21pc2MtJHtQVn0udGFyLmd6IgorCitTID0gIiR7V09SS0RJUn0vcHNtaXNjLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKK1BBQ0tBR0VTID0rICJmdXNlciBmdXNlci1kb2Mga2lsbGFsbCBraWxsYWxsLWRvYyBwc3RyZWUgcHN0cmVlLWRvYyIKK1BBQ0tBR0VTICs9ICJwc21pc2MtZXh0cmFzIgorCitGSUxFU18ke1BOfSA9ICIiCitSREVQRU5EU18ke1BOfSA9ICJmdXNlciBraWxsYWxsIHBzdHJlZSIKKworRklMRVNfZnVzZXIgPSAiJHtiaW5kaXJ9L2Z1c2VyLiR7QlBOfSIKK0ZJTEVTX2Z1c2VyLWRvYyA9ICIke21hbmRpcn0vbWFuMS9mdXNlcioiCisKK0ZJTEVTX2tpbGxhbGwgPSAiJHtiaW5kaXJ9L2tpbGxhbGwuJHtCUE59IgorRklMRVNfa2lsbGFsbC1kb2MgPSAiJHttYW5kaXJ9L21hbjEva2lsbGFsbCoiCisKK0ZJTEVTX3BzdHJlZSA9ICIke2JpbmRpcn0vcHN0cmVlIgorRklMRVNfcHN0cmVlLWRvYyA9ICIke21hbmRpcn0vbWFuMS9wc3RyZWUqIgorCitGSUxFU19wc21pc2MtZXh0cmFzID0gIiR7YmluZGlyfSIKK0ZJTEVTX3BzbWlzYy1leHRyYXMtZG9jID0gIiR7bWFuZGlyfSIKKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjkwIgorCitBTFRFUk5BVElWRV9raWxsYWxsID0gImtpbGxhbGwiCisKK0FMVEVSTkFUSVZFX2Z1c2VyID0gImZ1c2VyIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL3BzbWlzY18yMi4yMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9wc21pc2NfMjIuMjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhYmE5ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9wc21pc2NfMjIuMjEuYmIKQEAgLTAsMCArMSwxMCBAQAorcmVxdWlyZSBwc21pc2MuaW5jCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjMiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5MzVjMGZkNmViMjA4Mjg4MjYyYjM4NWZhNjU2ZjFiZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5NzMyM2NhZDYxOTIxMDg0NWI2OTZkN2Q3MjJjMzgzODUyYjJhY2I1YzQ5YjViMDg1MmM0ZjI5Yzc3YTgxNDVhIgorCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1UeXBvLWluLWZ1c2VyLW1ha2VzLU0tb24tYWxsLXRoZS10aW1lLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAyLUluY2x1ZGUtbGltaXRzLmgtZm9yLVBBVEhfTUFYLnBhdGNoIFwKKyAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhL2NvbmZpZy10Y3B3cmFwcGVycy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhL2NvbmZpZy10Y3B3cmFwcGVycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjQ3ZmJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvY29uZmlnLXRjcHdyYXBwZXJzLnBhdGNoCkBAIC0wLDAgKzEsNzUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gcXVvdGEtdG9vbHMub3JpZy9jb25maWd1cmUuaW4KKysrKyBxdW90YS10b29scy9jb25maWd1cmUuaW4KK0BAIC0xNTEsMzMgKzE1MSw0NiBAQCBBQ19TVUJTVChRVU9UQV9ORVRMSU5LX1BST0cpCisgQUNfU1VCU1QoTkVUTElOS0xJQlMpCisKKyBBQ19TRUFSQ0hfTElCUyhnZXRob3N0YnluYW1lLCBuc2wpCistQUNfTVNHX0NIRUNLSU5HKGZvciBob3N0X2FjY2VzcyBpbiAtbHdyYXApCistQUNfQ0FDSEVfVkFMKGFjX2N2X2xpYl93cmFwX21haW4sCistCXNhdmVkX0xJQlM9IiRMSUJTIgorLQlMSUJTPSIkTElCUyAtbHdyYXAiCistCVtBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCistCSNpbmNsdWRlIDxzdGRpby5oPgorLQkjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistCSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CistCSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CistCSNpbmNsdWRlIDx0Y3BkLmg+CistCXN0cnVjdCByZXF1ZXN0X2luZm8gcmVxdWVzdDsKKy0JaW50IGRlbnlfc2V2ZXJpdHksIGFsbG93X3NldmVyaXR5O11dLFtbaG9zdHNfYWNjZXNzKCZyZXF1ZXN0KTtdXSldLAorLQlkbmwgV2UgYWx3YXlzIHJlc3RvcmUgTElCUyBhcyB3ZSBhZGQgLWx3cmFwIGluIHRoZSBuZXh0IGNoZWNrCistCVthY19jdl9saWJfd3JhcF9tYWluPXllczsgTElCUz0iJHNhdmVkX0xJQlMiOyBBQ19NU0dfUkVTVUxUKHllcyldLAorLQlbYWNfY3ZfbGliX3dyYXBfbWFpbj1ubzsgTElCUz0iJHNhdmVkX0xJQlMiOyBBQ19NU0dfUkVTVUxUKG5vKV0pCistCV0pCisKKy1pZiB0ZXN0ICR7YWNfY3ZfbGliX3dyYXBfbWFpbn0gPSB5ZXM7IHRoZW4KKy0JQUNfQ0hFQ0tfSEVBREVSKHRjcGQuaCwsIFsKKy0JCWVjaG8gJ0VSUk9SOiBjb3VsZCBub3QgZmluZCB0Y3BkLmggLSBtaXNzaW5nIFRDUCB3cmFwcGVycyBwYWNrYWdlJworLQkJZXhpdCAxCistCV0pCistCUxJQlM9IiRMSUJTIC1sd3JhcCIKKy0JQUNfREVGSU5FKFtIT1NUU19BQ0NFU1NdLCAxLCBbVXNlIGhvc3RzLmFsbG93IGFuZCBob3N0cy5kZW55IGZvciBhY2Nlc3MgY2hlY2tpbmcgb2YgcnBjLnJxdW90YWRdKQorLQlDT01QSUxFX09QVFM9IiRDT01QSUxFX09QVFMgSE9TVFNfQUNDRVNTIgorK0FDX0FSR19XSVRIKHRjcHdyYXBwZXJzLAorKwlbICAtLXdpdGgtdGNwd3JhcHBlcnM9W3llcy9uby90cnldICAgVXNlIGhvc3RzLmFsbG93IGFuZCBob3N0cy5kZW55IGZvciBhY2Nlc3MgY2hlY2tpbmcgb2YgcnBjLnJxdW90YSBbZGVmYXVsdD15ZXMsIGlmIGF2YWlsYWJsZS5dXSwKKysJLAorKwl3aXRoX3RjcHdyYXBwZXJzPSJ0cnkiKQorKworK2lmIHRlc3QgIngkd2l0aF90Y3B3cmFwcGVycyIgIT0geG5vOyB0aGVuCisrCUFDX01TR19DSEVDS0lORyhmb3IgaG9zdF9hY2Nlc3MgaW4gLWx3cmFwKQorKwlBQ19DQUNIRV9WQUwoYWNfY3ZfbGliX3dyYXBfbWFpbiwKKysJCXNhdmVkX0xJQlM9IiRMSUJTIgorKwkJTElCUz0iJExJQlMgLWx3cmFwIgorKwkJW0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKysJCSNpbmNsdWRlIDxzdGRpby5oPgorKwkJI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKwkJI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKysJCSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisrCQkjaW5jbHVkZSA8dGNwZC5oPgorKwkJc3RydWN0IHJlcXVlc3RfaW5mbyByZXF1ZXN0OworKwkJaW50IGRlbnlfc2V2ZXJpdHksIGFsbG93X3NldmVyaXR5O11dLFtbaG9zdHNfYWNjZXNzKCZyZXF1ZXN0KTtdXSldLAorKwkJZG5sIFdlIGFsd2F5cyByZXN0b3JlIExJQlMgYXMgd2UgYWRkIC1sd3JhcCBpbiB0aGUgbmV4dCB0cnkKKysJCVthY19jdl9saWJfd3JhcF9tYWluPXllczsgTElCUz0iJHNhdmVkX0xJQlMiOyBBQ19NU0dfUkVTVUxUKHllcyldLAorKwkJW2FjX2N2X2xpYl93cmFwX21haW49bm87IExJQlM9IiRzYXZlZF9MSUJTIjsgQUNfTVNHX1JFU1VMVChubyldKQorKwkJXSkKKysKKysJaWYgdGVzdCAieCRhY19jdl9saWJfd3JhcF9tYWluIiA9IHh5ZXM7IHRoZW4KKysJCUFDX0NIRUNLX0hFQURFUih0Y3BkLmgsLCBbCisrCQkJaWYgdGVzdCAieCR3aXRoX3RjcHdyYXBwZXJzIiAhPSB4dHJ5OyB0aGVuCisrCQkJCUFDX01TR19FUlJPUihbY291bGQgbm90IGZpbmQgdGNwZC5oIC0gbWlzc2luZyBUQ1Agd3JhcHBlcnMgcGFja2FnZV0pCisrCQkJZmkKKysJCV0pCisrCisrCQlMSUJTPSIkTElCUyAtbHdyYXAiCisrCQlBQ19ERUZJTkUoW0hPU1RTX0FDQ0VTU10sIDEsIFtVc2UgaG9zdHMuYWxsb3cgYW5kIGhvc3RzLmRlbnkgZm9yIGFjY2VzcyBjaGVja2luZyBvZiBycGMucnF1b3RhZF0pCisrCQlDT01QSUxFX09QVFM9IiRDT01QSUxFX09QVFMgSE9TVFNfQUNDRVNTIgorKwllbGlmIHRlc3QgIngkd2l0aF90Y3B3cmFwcGVycyIgIT0geHRyeTsgdGhlbgorKwkJQUNfTVNHX0VSUk9SKFtjb3VsZCBub3QgZmluZCBsaWJ3cmFwIC0gbWlzc2luZyBUQ1Agd3JhcHBlcnMgcGFja2FnZV0pCisrCWZpCisgZmkKKworKworIGRubCBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgorIEFDX0NfQ09OU1QKKyBBQ19DX0lOTElORQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvZmNudGwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9mY250bC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2U2MGZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvZmNudGwucGF0Y2gKQEAgLTAsMCArMSwxMTMgQEAKK0luY2x1ZGUgZmNudGwuaCB0byBwYWNpZnkgY29tcGlsZXIgZXJyb3JzIG9uIG11c2wKK2xpa2UKKworZXJyb3I6IHVua25vd24gdHlwZSBuYW1lICdsb2ZmX3QnCitDb3ZlciBycGMgaGVhZGVycyB1bmRlciBwcm9wZXIgY29uZGl0aW9uYWwKK0RvbnQgdXNlIF9fUCBpdHMgdW5kZWZpbmVkCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCituZGV4OiBxdW90YS10b29scy9xdW90YS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitJbmRleDogcXVvdGEtdG9vbHMvcXVvdGEuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHF1b3RhLXRvb2xzLm9yaWcvcXVvdGEuaAorKysrIHF1b3RhLXRvb2xzL3F1b3RhLmgKK0BAIC0xNjUsNiArMTY1LDYgQEAgZW51bSB7CisgCSNlbmRpZgorICNlbmRpZgorIAorLWxvbmcgcXVvdGFjdGwgX19QKChpbnQsIGNvbnN0IGNoYXIgKiwgcWlkX3QsIGNhZGRyX3QpKTsKKytsb25nIHF1b3RhY3RsIChpbnQsIGNvbnN0IGNoYXIgKiwgcWlkX3QsIGNhZGRyX3QpOworIAorICNlbmRpZiAvKiBfUVVPVEFfICovCitJbmRleDogcXVvdGEtdG9vbHMvcXVvdGFjaGVjay5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9xdW90YWNoZWNrLmMKKysrKyBxdW90YS10b29scy9xdW90YWNoZWNrLmMKK0BAIC0xOSw2ICsxOSw3IEBACisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8ZmNudGwuaD4KKyAKKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitJbmRleDogcXVvdGEtdG9vbHMvcXVvdGFpby5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9xdW90YWlvLmMKKysrKyBxdW90YS10b29scy9xdW90YWlvLmMKK0BAIC0xMiw2ICsxMiw3IEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxzeXMvZmlsZS5oPgorSW5kZXg6IHF1b3RhLXRvb2xzL2RxYmxrX3YyLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxdW90YS10b29scy5vcmlnL2RxYmxrX3YyLmgKKysrKyBxdW90YS10b29scy9kcWJsa192Mi5oCitAQCAtNyw2ICs3LDcgQEAKKyAjaWZuZGVmIEdVQVJEX0RRQkxLX1YyX0gKKyAjZGVmaW5lIEdVQVJEX0RRQkxLX1YyX0gKKyAKKysjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgInF1b3RhX3RyZWUuaCIKKyAKK0luZGV4OiBxdW90YS10b29scy9xdW90YW9wcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9xdW90YW9wcy5jCisrKysgcXVvdGEtdG9vbHMvcXVvdGFvcHMuYworQEAgLTM0LDcgKzM0LDkgQEAKKyAKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisgCisrI2lmIGRlZmluZWQoUlBDKQorICNpbmNsdWRlIDxycGMvcnBjLmg+CisrI2VuZGlmCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxzeXMvZmlsZS5oPgorSW5kZXg6IHF1b3RhLXRvb2xzL3JxdW90YV9jbGllbnQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHF1b3RhLXRvb2xzLm9yaWcvcnF1b3RhX2NsaWVudC5jCisrKysgcXVvdGEtdG9vbHMvcnF1b3RhX2NsaWVudC5jCitAQCAtMTksNyArMTksOSBAQAorIAorICNpbmNsdWRlICJjb25maWcuaCIKKyAKKysjaWYgZGVmaW5lZChSUEMpCisgI2luY2x1ZGUgPHJwYy9ycGMuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorQEAgLTM1LDcgKzM3LDkgQEAKKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgCisgI2luY2x1ZGUgIm1udG9wdC5oIgorKyNpZiBkZWZpbmVkKFJQQykKKyAjaW5jbHVkZSAicnF1b3RhLmgiCisrI2VuZGlmCisgI2luY2x1ZGUgImNvbW1vbi5oIgorICNpbmNsdWRlICJxdW90YWlvLmgiCisgI2luY2x1ZGUgInF1b3Rhc3lzLmgiCitJbmRleDogcXVvdGEtdG9vbHMvc2V0cXVvdGEuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHF1b3RhLXRvb2xzLm9yaWcvc2V0cXVvdGEuYworKysrIHF1b3RhLXRvb2xzL3NldHF1b3RhLmMKK0BAIC03LDcgKzcsOSBAQAorIAorICNpbmNsdWRlICJjb25maWcuaCIKKyAKKysjaWYgZGVmaW5lZChSUEMpCisgI2luY2x1ZGUgPHJwYy9ycGMuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9yZW1vdmVfbm9uX3Bvc2l4X3R5cGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvcmVtb3ZlX25vbl9wb3NpeF90eXBlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDQyZDk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvcmVtb3ZlX25vbl9wb3NpeF90eXBlcy5wYXRjaApAQCAtMCwwICsxLDE4NSBAQAorVXNlIHByb3BlciBDOTkgaW50ZWdlciB0eXBlcworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IHF1b3RhLXRvb2xzL2J5bGFiZWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHF1b3RhLXRvb2xzLm9yaWcvYnlsYWJlbC5jCisrKysgcXVvdGEtdG9vbHMvYnlsYWJlbC5jCitAQCAtMjAsNiArMjAsNyBAQAorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisgCisgI2luY2x1ZGUgImJ5bGFiZWwuaCIKKyAjaW5jbHVkZSAiY29tbW9uLmgiCitAQCAtMzcsMzIgKzM4LDMyIEBAIHN0YXRpYyBzdHJ1Y3QgdXVpZENhY2hlX3MgeworIAorICNkZWZpbmUgRVhUMl9TVVBFUl9NQUdJQwkweEVGNTMKKyBzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayB7CistCXVfY2hhciBzX2R1bW15MVs1Nl07CistCXVfY2hhciBzX21hZ2ljWzJdOworLQl1X2NoYXIgc19kdW1teTJbNDZdOworLQl1X2NoYXIgc191dWlkWzE2XTsKKy0JdV9jaGFyIHNfdm9sdW1lX25hbWVbMTZdOworKwl1aW50OF90IHNfZHVtbXkxWzU2XTsKKysJdWludDhfdCBzX21hZ2ljWzJdOworKwl1aW50OF90IHNfZHVtbXkyWzQ2XTsKKysJdWludDhfdCBzX3V1aWRbMTZdOworKwl1aW50OF90IHNfdm9sdW1lX25hbWVbMTZdOworIH07CisgCistI2RlZmluZSBleHQybWFnaWMocykJKCh1aW50KSBzLnNfbWFnaWNbMF0gKyAoKCh1aW50KSBzLnNfbWFnaWNbMV0pIDw8IDgpKQorKyNkZWZpbmUgZXh0Mm1hZ2ljKHMpCSgodWludDMyX3QpIHMuc19tYWdpY1swXSArICgoKHVpbnQzMl90KSBzLnNfbWFnaWNbMV0pIDw8IDgpKQorIAorICNkZWZpbmUgWEZTX1NVUEVSX01BR0lDICJYRlNCIgorICNkZWZpbmUgWEZTX1NVUEVSX01BR0lDMiAiQlNGWCIKKyBzdHJ1Y3QgeGZzX3N1cGVyX2Jsb2NrIHsKKy0JdV9jaGFyIHNfbWFnaWNbNF07CistCXVfY2hhciBzX2R1bW15WzI4XTsKKy0JdV9jaGFyIHNfdXVpZFsxNl07CistCXVfY2hhciBzX2R1bW15Mls2MF07CistCXVfY2hhciBzX2ZzbmFtZVsxMl07CisrCXVpbnQ4X3Qgc19tYWdpY1s0XTsKKysJdWludDhfdCBzX2R1bW15WzI4XTsKKysJdWludDhfdCBzX3V1aWRbMTZdOworKwl1aW50OF90IHNfZHVtbXkyWzYwXTsKKysJdWludDhfdCBzX2ZzbmFtZVsxMl07CisgfTsKKyAKKyAjZGVmaW5lIFJFSVNFUl9TVVBFUl9NQUdJQwkiUmVJc0VyMkZzIgorIHN0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9jayB7CistCXVfY2hhciBzX2R1bW15MVs1Ml07CistCXVfY2hhciBzX21hZ2ljWzEwXTsKKy0JdV9jaGFyIHNfZHVtbXkyWzIyXTsKKy0JdV9jaGFyIHNfdXVpZFsxNl07CistCXVfY2hhciBzX3ZvbHVtZV9uYW1lWzE2XTsKKysJdWludDhfdCBzX2R1bW15MVs1Ml07CisrCXVpbnQ4X3Qgc19tYWdpY1sxMF07CisrCXVpbnQ4X3Qgc19kdW1teTJbMjJdOworKwl1aW50OF90IHNfdXVpZFsxNl07CisrCXVpbnQ4X3Qgc192b2x1bWVfbmFtZVsxNl07CisgfTsKKyAKKyBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IHN3YXBwZWQodW5zaWduZWQgc2hvcnQgYSkKK0BAIC0yMjIsNyArMjIzLDcgQEAgc3RhdGljIGNoYXIgKmdldF9zcGVjX2J5X3goaW50IG4sIGNvbnN0CisgCXJldHVybiBOVUxMOworIH0KKyAKKy1zdGF0aWMgdV9jaGFyIGZyb21oZXgoY2hhciBjKQorK3N0YXRpYyB1aW50OF90IGZyb21oZXgoY2hhciBjKQorIHsKKyAJaWYgKGlzZGlnaXQoYykpCisgCQlyZXR1cm4gKGMgLSAnMCcpOworQEAgLTIzNCw3ICsyMzUsNyBAQCBzdGF0aWMgdV9jaGFyIGZyb21oZXgoY2hhciBjKQorIAorIHN0YXRpYyBjaGFyICpnZXRfc3BlY19ieV91dWlkKGNvbnN0IGNoYXIgKnMpCisgeworLQl1X2NoYXIgdXVpZFsxNl07CisrCXVpbnQ4X3QgdXVpZFsxNl07CisgCWludCBpOworIAorIAlpZiAoc3RybGVuKHMpICE9IDM2IHx8IHNbOF0gIT0gJy0nIHx8IHNbMTNdICE9ICctJyB8fCBzWzE4XSAhPSAnLScgfHwgc1syM10gIT0gJy0nKQorSW5kZXg6IHF1b3RhLXRvb2xzL3F1b3QuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHF1b3RhLXRvb2xzLm9yaWcvcXVvdC5jCisrKysgcXVvdGEtdG9vbHMvcXVvdC5jCitAQCAtNDcsNiArNDcsNyBAQAorICNpbmNsdWRlIDx1dG1wLmg+CisgI2luY2x1ZGUgPHB3ZC5oPgorICNpbmNsdWRlIDxncnAuaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisgCisgI2luY2x1ZGUgInBvdC5oIgorICNpbmNsdWRlICJxdW90LmgiCitAQCAtNTYsOCArNTcsOCBAQAorICNpbmNsdWRlICJxdW90YXN5cy5oIgorIAorICNkZWZpbmUJVFNJWkUJNTAwCistc3RhdGljIF9fdWludDY0X3Qgc2l6ZXNbVFNJWkVdOworLXN0YXRpYyBfX3VpbnQ2NF90IG92ZXJmbG93OworK3N0YXRpYyB1aW50NjRfdCBzaXplc1tUU0laRV07Cisrc3RhdGljIHVpbnQ2NF90IG92ZXJmbG93OworIAorIHN0YXRpYyBpbnQgYWZsYWc7Cisgc3RhdGljIGludCBjZmxhZzsKK0BAIC03Miw3ICs3Myw3IEBAIHN0YXRpYyB0aW1lX3Qgbm93OworIGNoYXIgKnByb2duYW1lOworIAorIHN0YXRpYyB2b2lkIG1vdW50dGFibGUodm9pZCk7Cistc3RhdGljIGNoYXIgKmlkbmFtZShfX3VpbnQzMl90LCBpbnQpOworK3N0YXRpYyBjaGFyICppZG5hbWUodWludDMyX3QsIGludCk7Cisgc3RhdGljIHZvaWQgcmVwb3J0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworIHN0YXRpYyB2b2lkIGNyZXBvcnQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworIAorQEAgLTE3Myw3ICsxNzQsNyBAQCBzdGF0aWMgaW50IHFjbXAoZHVfdCAqIHAxLCBkdV90ICogcDIpCisgc3RhdGljIHZvaWQgY3JlcG9ydChjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICpmc2RpcikKKyB7CisgCWludCBpOworLQlfX3VpbnQ2NF90IHQgPSAwOworKwl1aW50NjRfdCB0ID0gMDsKKyAKKyAJcHJpbnRmKF8oIiVzICglcyk6XG4iKSwgZmlsZSwgZnNkaXIpOworIAlmb3IgKGkgPSAwOyBpIDwgVFNJWkUgLSAxOyBpKyspCitAQCAtMjE5LDcgKzIyMCw3IEBAIHN0YXRpYyB2b2lkIHJlcG9ydChjb25zdCBjaGFyICpmaWxlLCBjb24KKyAJfQorIH0KKyAKKy1zdGF0aWMgaWRjYWNoZV90ICpnZXRuZXh0ZW50KGludCB0eXBlLCBfX3VpbnQzMl90IGlkLCBpbnQgYnlpZCkKKytzdGF0aWMgaWRjYWNoZV90ICpnZXRuZXh0ZW50KGludCB0eXBlLCB1aW50MzJfdCBpZCwgaW50IGJ5aWQpCisgeworIAlzdHJ1Y3QgcGFzc3dkICpwdzsKKyAJc3RydWN0IGdyb3VwICAqZ3I7CitAQCAtMjQwLDcgKzI0MSw3IEBAIHN0YXRpYyBpZGNhY2hlX3QgKmdldG5leHRlbnQoaW50IHR5cGUsIF8KKyAJcmV0dXJuICZpZGM7CisgfQorIAorLXN0YXRpYyBjaGFyICppZG5hbWUoX191aW50MzJfdCBpZCwgaW50IHR5cGUpCisrc3RhdGljIGNoYXIgKmlkbmFtZSh1aW50MzJfdCBpZCwgaW50IHR5cGUpCisgeworIAlpZGNhY2hlX3QgKm5jcCwgKmlkcDsKKyAJc3RhdGljIGlkY2FjaGVfdCBuY1syXVtOSURdOworQEAgLTI4Niw4ICsyODcsOCBAQCBzdGF0aWMgdm9pZCBhY2N0WEZTKHhmc19ic3RhdF90ICpwKQorIHsKKyAJcmVnaXN0ZXIgZHVfdCAqZHA7CisgCWR1X3QgKipocDsKKy0JX191aW50NjRfdCBzaXplOworLQlfX3VpbnQzMl90IGksIGlkOworKwl1aW50NjRfdCBzaXplOworKwl1aW50MzJfdCBpLCBpZDsKKyAKKyAJaWYgKChwLT5ic19tb2RlICYgU19JRk1UKSA9PSAwKQorIAkJcmV0dXJuOworSW5kZXg6IHF1b3RhLXRvb2xzL3F1b3QuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHF1b3RhLXRvb2xzLm9yaWcvcXVvdC5oCisrKysgcXVvdGEtdG9vbHMvcXVvdC5oCitAQCAtMzUsMTggKzM1LDE4IEBACisgI2RlZmluZQlTRUMyNEhSCSg2MCo2MCoyNCkJLyogc2Vjb25kcyBwZXIgZGF5ICovCisgCisgdHlwZWRlZiBzdHJ1Y3QgeworLQlfX3VpbnQzMl90IGlkOworKwl1aW50MzJfdCBpZDsKKyAJY2hhciBuYW1lW1VUX05BTUVTSVpFICsgMV07CisgfSBpZGNhY2hlX3Q7CisgCisgdHlwZWRlZiBzdHJ1Y3QgZHUgeworIAlzdHJ1Y3QgZHUgKm5leHQ7CistCV9fdWludDY0X3QgYmxvY2tzOworLQlfX3VpbnQ2NF90IGJsb2NrczMwOworLQlfX3VpbnQ2NF90IGJsb2NrczYwOworLQlfX3VpbnQ2NF90IGJsb2NrczkwOworLQlfX3VpbnQ2NF90IG5maWxlczsKKy0JX191aW50MzJfdCBpZDsKKysJdWludDY0X3QgYmxvY2tzOworKwl1aW50NjRfdCBibG9ja3MzMDsKKysJdWludDY0X3QgYmxvY2tzNjA7CisrCXVpbnQ2NF90IGJsb2NrczkwOworKwl1aW50NjRfdCBuZmlsZXM7CisrCXVpbnQzMl90IGlkOworIH0gZHVfdDsKKyAKKyAjZGVmaW5lCU5EVQk2MDAwMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvcmVwbGFjZV9nZXRycGNieW51bWJlcl9yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvcmVwbGFjZV9nZXRycGNieW51bWJlcl9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYTJmZmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9yZXBsYWNlX2dldHJwY2J5bnVtYmVyX3IucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorUmVwbGFjZSBnZXRycGNieW51bWJlcl9yIHdpdGggZ2V0cnBjYnludW1iZXIKK211c2wgYW5kIHVjbGliYyBkb250IGltcGxlbWVudCBpdAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0luZGV4OiBxdW90YS10b29scy9zdmNfc29ja2V0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxdW90YS10b29scy5vcmlnL3N2Y19zb2NrZXQuYworKysrIHF1b3RhLXRvb2xzL3N2Y19zb2NrZXQuYworQEAgLTU1LDcgKzU1LDggQEAgc3RhdGljIGludCBzdmNfc29ja2V0ICh1X2xvbmcgbnVtYmVyLCBpbgorIAlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworIAorIAlpZiAoIXBvcnQpIHsKKy0JCXJldCA9IGdldHJwY2J5bnVtYmVyX3IobnVtYmVyLCAmcnBjYnVmLCBycGNkYXRhLCBzaXplb2YocnBjZGF0YSksICZycGNwKTsKKysJCXJwY3AgPSBnZXRycGNieW51bWJlcihudW1iZXIpOworKwkJcmV0ID0gMDsKKyAJCWlmIChyZXQgPT0gMCAmJiBycGNwICE9IE5VTEwpIHsKKyAJCQkvKiBGaXJzdCB0cnkgbmFtZSAqLworIAkJCXJldCA9IGdldHNlcnZieW5hbWVfcihycGNwLT5yX25hbWUsIHByb3RvLCAmc2VydmJ1Ziwgc2VydmRhdGEsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YV80LjAyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGFfNC4wMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjRiMGEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGFfNC4wMi5iYgpAQCAtMCwwICsxLDQwIEBACitTVU1NQVJZID0gIlRvb2xzIGZvciBtb25pdG9yaW5nICYgbGltaXRpbmcgdXNlciBkaXNrIHVzYWdlIHBlciBmaWxlc3lzdGVtIgorU0VDVElPTiA9ICJiYXNlIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saW51eHF1b3RhLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0xODEzNiZhdGlkPTExODEzNiIKK0xJQ0VOU0UgPSAiQlNEICYgR1BMdjIrICYgTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vcXVvdGEuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTMzO21kNT0zMzFjN2Q3Nzc0NGJmZTBhZDI0MDI3ZjA2NTEwMjhlYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9ycXVvdGFfc2VydmVyLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9ZmU3ZTBkN2UxMWM2ZjgyMGY4ZmE2MmE1YWY3MTIzMGYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3ZjX3NvY2tldC5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTc7bWQ1PTI0ZDVhODc5MmRhNDU5MTA3ODZlZWFjNzUwYmU4Y2ViIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wcm9qZWN0L2xpbnV4cXVvdGEvcXVvdGEtdG9vbHMvJHtQVn0vcXVvdGEtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZy10Y3B3cmFwcGVycy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9mY250bC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmVfbm9uX3Bvc2l4X3R5cGVzLnBhdGNoIFwKKwkgICAiCitTUkNfVVJJX2FwcGVuZF9saWJjLW11c2wgPSAiIGZpbGU6Ly9yZXBsYWNlX2dldHJwY2J5bnVtYmVyX3IucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhOGE1ZGYyNjIyNjFlNjU5NzE2Y2NhZDJhNWQ2ZGYwZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmNGMyZjQ4YWJmOTRiYmRjMzk2ZGYzM2QyNzZmMmU5ZDE5YWY1OGMyMzJjYjg1ZWVmOWMxNzRhNzQ3YzMzNzk1IgorCitTID0gIiR7V09SS0RJUn0vcXVvdGEtdG9vbHMiCisKK0RFUEVORFMgPSAiZ2V0dGV4dC1uYXRpdmUgZTJmc3Byb2dzIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgZ2V0dGV4dCBwa2djb25maWcKKworQ0ZMQUdTICs9ICItST0ke2luY2x1ZGVkaXJ9L3RpcnBjIgorTERGTEFHUyArPSAiLWx0aXJwYyIKK0FTTkVFREVEID0gIiIKK0VYVFJBX09FTUFLRSArPSAnU1RSSVA9IiInCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ0Y3Atd3JhcHBlcnMgcnBjIGJzZCIKK1BBQ0tBR0VDT05GSUdfbGliYy1tdXNsID0gInRjcC13cmFwcGVycyBycGMiCisKK1BBQ0tBR0VDT05GSUdbdGNwLXdyYXBwZXJzXSA9ICItLXdpdGgtdGNwd3JhcHBlcnMsLS13aXRob3V0LXRjcHdyYXBwZXJzLHRjcC13cmFwcGVycyIKK1BBQ0tBR0VDT05GSUdbcnBjXSA9ICItLWVuYWJsZS1ycGM9eWVzLC0tZW5hYmxlLXJwYz1ubyxsaWJ0aXJwYyIKK1BBQ0tBR0VDT05GSUdbYnNkXSA9ICItLWVuYWJsZS1ic2RfYmVoYXZpb3VyPXllcywtLWVuYWJsZS1ic2RfYmVoYXZpb3VyPW5vLCIKKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIFJPT1RESVI9JHtEfSBpbnN0YWxsCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvMDAwMS1Bdm9pZC11c2Utb2YtZ2xpYmMtc3lzLWNkZWZzLmgtaGVhZGVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kLzAwMDEtQXZvaWQtdXNlLW9mLWdsaWJjLXN5cy1jZGVmcy5oLWhlYWRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWVmOWYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kLzAwMDEtQXZvaWQtdXNlLW9mLWdsaWJjLXN5cy1jZGVmcy5oLWhlYWRlci5wYXRjaApAQCAtMCwwICsxLDIyMSBAQAorRnJvbSAyYTQ0ZDg2MjIzM2YyMTI2NTgxZTI5MGQ1NjhlMWM4YjhmMmViOWY1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2FybG8gTGFuZG1ldGVyIDxjbGFuZG1ldGVyQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTkgRmViIDIwMTUgMTU6Mjg6NDUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gQXZvaWQgdXNlIG9mIGdsaWJjIHN5cy9jZGVmcy5oIGhlYWRlcgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIHNyYy9jaGVja19ib3VuZC5jICB8ICAgIDIgKy0KKyBzcmMvcG1hcF9zdmMuYyAgICAgfCAgIDEwICsrKysrLS0tLS0KKyBzcmMvcnBjYl9zdmMuYyAgICAgfCAgIDEwICsrKysrLS0tLS0KKyBzcmMvcnBjYl9zdmNfNC5jICAgfCAgIDE0ICsrKysrKystLS0tLS0tCisgc3JjL3JwY2Jfc3ZjX2NvbS5jIHwgICA0NiArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgc3JjL3JwY2JpbmQuYyAgICAgIHwgICAxMiArKysrKystLS0tLS0KKyBzcmMvdXRpbC5jICAgICAgICAgfCAgICAyICstCisgc3JjL3dhcm1zdGFydC5jICAgIHwgICAgNCArKy0tCisgOCBmaWxlcyBjaGFuZ2VkLCA1MCBpbnNlcnRpb25zKCspLCA1MCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9jaGVja19ib3VuZC5jIGIvc3JjL2NoZWNrX2JvdW5kLmMKK2luZGV4IGM3MGI4NDUuLjVkMjE3MzAgMTAwNjQ0CistLS0gYS9zcmMvY2hlY2tfYm91bmQuYworKysrIGIvc3JjL2NoZWNrX2JvdW5kLmMKK0BAIC03MCw3ICs3MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZmRsaXN0ICpmZGhlYWQ7CS8qIExpbmsgbGlzdCBvZiB0aGUgY2hlY2sgZmQncyAqLworIHN0YXRpYyBzdHJ1Y3QgZmRsaXN0ICpmZHRhaWw7Cisgc3RhdGljIGNoYXIgKm51bGxzdHJpbmcgPSAiIjsKKyAKKy1zdGF0aWMgYm9vbF90IGNoZWNrX2JvdW5kIF9fUCgoc3RydWN0IGZkbGlzdCAqLCBjaGFyICp1YWRkcikpOworK3N0YXRpYyBib29sX3QgY2hlY2tfYm91bmQgKHN0cnVjdCBmZGxpc3QgKiwgY2hhciAqdWFkZHIpOworIAorIC8qCisgICogUmV0dXJucyAxIGlmIHRoZSBnaXZlbiBhZGRyZXNzIGlzIGJvdW5kIGZvciB0aGUgZ2l2ZW4gYWRkciAmIHRyYW5zcG9ydAorZGlmZiAtLWdpdCBhL3NyYy9wbWFwX3N2Yy5jIGIvc3JjL3BtYXBfc3ZjLmMKK2luZGV4IGFkMjhiOTMuLjljN2Q0MDkgMTAwNjQ0CistLS0gYS9zcmMvcG1hcF9zdmMuYworKysrIGIvc3JjL3BtYXBfc3ZjLmMKK0BAIC02MCwxMSArNjAsMTEgQEAgc3RhdGljCWNoYXIgc2Njc2lkW10gPSAiQCgjKXBtYXBfc3ZjLmMgMS4yMyA4OS8wNC8wNSBDb3B5ciAxOTg0IFN1biBNaWNybyI7CisgI2luY2x1ZGUgInJwY2JpbmQuaCIKKyAjaW5jbHVkZSAieGxvZy5oIgorICNpbmNsdWRlIDxycGMvc3ZjX3NvYy5oPiAvKiBzdmNfZ2V0Y2FsbGVyIHJvdXRpbmUgZGVmaW5pdGlvbiAqLworLXN0YXRpYyBzdHJ1Y3QgcG1hcGxpc3QgKmZpbmRfc2VydmljZV9wbWFwIF9fUCgocnBjcHJvZ190LCBycGN2ZXJzX3QsCistCQkJCQkgICAgICAgcnBjcHJvdF90KSk7Cistc3RhdGljIGJvb2xfdCBwbWFwcHJvY19jaGFuZ2UgX19QKChzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosIHVfbG9uZykpOworLXN0YXRpYyBib29sX3QgcG1hcHByb2NfZ2V0cG9ydCBfX1AoKHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKikpOworLXN0YXRpYyBib29sX3QgcG1hcHByb2NfZHVtcCBfX1AoKHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKikpOworK3N0YXRpYyBzdHJ1Y3QgcG1hcGxpc3QgKmZpbmRfc2VydmljZV9wbWFwIChycGNwcm9nX3QsIHJwY3ZlcnNfdCwKKysJCQkJCSAgICAgICBycGNwcm90X3QpOworK3N0YXRpYyBib29sX3QgcG1hcHByb2NfY2hhbmdlIChzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosIHVfbG9uZyk7Cisrc3RhdGljIGJvb2xfdCBwbWFwcHJvY19nZXRwb3J0IChzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICopOworK3N0YXRpYyBib29sX3QgcG1hcHByb2NfZHVtcCAoc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqKTsKKyAKKyAvKgorICAqIENhbGxlZCBmb3IgYWxsIHRoZSB2ZXJzaW9uIDIgaW5xdWlyaWVzLgorZGlmZiAtLWdpdCBhL3NyYy9ycGNiX3N2Yy5jIGIvc3JjL3JwY2Jfc3ZjLmMKK2luZGV4IGJkOTIyMDEuLjZjN2Y3ZmUgMTAwNjQ0CistLS0gYS9zcmMvcnBjYl9zdmMuYworKysrIGIvc3JjL3JwY2Jfc3ZjLmMKK0BAIC01MywxMCArNTMsMTAgQEAKKyAjaW5jbHVkZSAicnBjYmluZC5oIgorICNpbmNsdWRlICJ4bG9nLmgiCisgCistc3RhdGljIHZvaWQgKnJwY2Jwcm9jX2dldGFkZHJfM19sb2NhbCBfX1AoKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLAorLQkJCQkJICAgcnBjdmVyc190KSk7Cistc3RhdGljIHZvaWQgKnJwY2Jwcm9jX2R1bXBfM19sb2NhbCBfX1AoKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLAorLQkJCQkJcnBjdmVyc190KSk7Cisrc3RhdGljIHZvaWQgKnJwY2Jwcm9jX2dldGFkZHJfM19sb2NhbCAodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosCisrCQkJCQkgICBycGN2ZXJzX3QpOworK3N0YXRpYyB2b2lkICpycGNicHJvY19kdW1wXzNfbG9jYWwgKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLAorKwkJCQkJcnBjdmVyc190KTsKKyAKKyAvKgorICAqIENhbGxlZCBieSBzdmNfZ2V0cmVxc2V0LiBUaGVyZSBpcyBhIHNlcGFyYXRlIHNlcnZlciBoYW5kbGUgZm9yCitAQCAtNzUsNyArNzUsNyBAQCBycGNiX3NlcnZpY2VfMyhzdHJ1Y3Qgc3ZjX3JlcSAqcnFzdHAsIFNWQ1hQUlQgKnRyYW5zcCkKKyAJfSBhcmd1bWVudDsKKyAJY2hhciAqcmVzdWx0OworIAl4ZHJwcm9jX3QgeGRyX2FyZ3VtZW50LCB4ZHJfcmVzdWx0OworLQl2b2lkICooKmxvY2FsKSBfX1AoKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLCBycGN2ZXJzX3QpKTsKKysJdm9pZCAqKCpsb2NhbCkgKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLCBycGN2ZXJzX3QpOworIAlycGNwcm9nX3Qgc2V0cHJvZyA9IDA7CisgCisgCXJwY2JzX3Byb2NpbmZvKFJQQ0JWRVJTXzNfU1RBVCwgcnFzdHAtPnJxX3Byb2MpOworZGlmZiAtLWdpdCBhL3NyYy9ycGNiX3N2Y180LmMgYi9zcmMvcnBjYl9zdmNfNC5jCitpbmRleCBiNjczNDUyLi42NzY0YzBhIDEwMDY0NAorLS0tIGEvc3JjL3JwY2Jfc3ZjXzQuYworKysrIGIvc3JjL3JwY2Jfc3ZjXzQuYworQEAgLTU0LDEzICs1NCwxMyBAQAorICNpbmNsdWRlICJycGNiaW5kLmgiCisgI2luY2x1ZGUgInhsb2cuaCIKKyAKKy1zdGF0aWMgdm9pZCAqcnBjYnByb2NfZ2V0YWRkcl80X2xvY2FsIF9fUCgodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosCistCQkJCSAgICAgIHJwY3ZlcnNfdCkpOworLXN0YXRpYyB2b2lkICpycGNicHJvY19nZXR2ZXJzYWRkcl80X2xvY2FsIF9fUCgodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosIHJwY3ZlcnNfdCkpOworK3N0YXRpYyB2b2lkICpycGNicHJvY19nZXRhZGRyXzRfbG9jYWwgKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLAorKwkJCQkgICAgICBycGN2ZXJzX3QpOworK3N0YXRpYyB2b2lkICpycGNicHJvY19nZXR2ZXJzYWRkcl80X2xvY2FsICh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwgcnBjdmVyc190KTsKKyBzdGF0aWMgdm9pZCAqcnBjYnByb2NfZ2V0YWRkcmxpc3RfNF9sb2NhbAorLQlfX1AoKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLCBycGN2ZXJzX3QpKTsKKy1zdGF0aWMgdm9pZCBmcmVlX3JwY2JfZW50cnlfbGlzdCBfX1AoKHJwY2JfZW50cnlfbGlzdF9wdHIgKikpOworLXN0YXRpYyB2b2lkICpycGNicHJvY19kdW1wXzRfbG9jYWwgX19QKCh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwgcnBjdmVyc190KSk7CisrCSh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwgcnBjdmVyc190KTsKKytzdGF0aWMgdm9pZCBmcmVlX3JwY2JfZW50cnlfbGlzdCAocnBjYl9lbnRyeV9saXN0X3B0ciAqKTsKKytzdGF0aWMgdm9pZCAqcnBjYnByb2NfZHVtcF80X2xvY2FsICh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwgcnBjdmVyc190KTsKKyAKKyAvKgorICAqIENhbGxlZCBieSBzdmNfZ2V0cmVxc2V0LiBUaGVyZSBpcyBhIHNlcGFyYXRlIHNlcnZlciBoYW5kbGUgZm9yCitAQCAtNzgsNyArNzgsNyBAQCBycGNiX3NlcnZpY2VfNChzdHJ1Y3Qgc3ZjX3JlcSAqcnFzdHAsIFNWQ1hQUlQgKnRyYW5zcCkKKyAJfSBhcmd1bWVudDsKKyAJY2hhciAqcmVzdWx0OworIAl4ZHJwcm9jX3QgeGRyX2FyZ3VtZW50LCB4ZHJfcmVzdWx0OworLQl2b2lkICooKmxvY2FsKSBfX1AoKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLCBycGN2ZXJzX3QpKTsKKysJdm9pZCAqKCpsb2NhbCkgKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLCBycGN2ZXJzX3QpOworIAlycGNwcm9nX3Qgc2V0cHJvZyA9IDA7CisgCisgCXJwY2JzX3Byb2NpbmZvKFJQQ0JWRVJTXzRfU1RBVCwgcnFzdHAtPnJxX3Byb2MpOworZGlmZiAtLWdpdCBhL3NyYy9ycGNiX3N2Y19jb20uYyBiL3NyYy9ycGNiX3N2Y19jb20uYworaW5kZXggZmY5Y2U2Yi4uOGFlZjllNSAxMDA2NDQKKy0tLSBhL3NyYy9ycGNiX3N2Y19jb20uYworKysrIGIvc3JjL3JwY2Jfc3ZjX2NvbS5jCitAQCAtMTAwLDI5ICsxMDAsMjkgQEAgc3RydWN0IGZpbmZvIHsKKyBzdGF0aWMgc3RydWN0IGZpbmZvICAgICBGSU5GT1tORk9SV0FSRF07CisgCisgCistc3RhdGljIGJvb2xfdCB4ZHJfZW5jYXBfcGFybXMgX19QKChYRFIgKiwgc3RydWN0IGVuY2FwX3Bhcm1zICopKTsKKy1zdGF0aWMgYm9vbF90IHhkcl9ybXRjYWxsX2FyZ3MgX19QKChYRFIgKiwgc3RydWN0IHJfcm10Y2FsbF9hcmdzICopKTsKKy1zdGF0aWMgYm9vbF90IHhkcl9ybXRjYWxsX3Jlc3VsdCBfX1AoKFhEUiAqLCBzdHJ1Y3Qgcl9ybXRjYWxsX2FyZ3MgKikpOworLXN0YXRpYyBib29sX3QgeGRyX29wYXF1ZV9wYXJtcyBfX1AoKFhEUiAqLCBzdHJ1Y3Qgcl9ybXRjYWxsX2FyZ3MgKikpOworLXN0YXRpYyBpbnQgZmluZF9ybXRjYWxsZmRfYnlfbmV0aWQgX19QKChjaGFyICopKTsKKy1zdGF0aWMgU1ZDWFBSVCAqZmluZF9ybXRjYWxseHBydF9ieV9mZCBfX1AoKGludCkpOworLXN0YXRpYyBpbnQgZm9yd2FyZF9yZWdpc3RlciBfX1AoKHVfaW50MzJfdCwgc3RydWN0IG5ldGJ1ZiAqLCBpbnQsIGNoYXIgKiwKKy0gICAgcnBjcHJvY190LCBycGN2ZXJzX3QsIHVfaW50MzJfdCAqKSk7Cistc3RhdGljIHN0cnVjdCBmaW5mbyAqZm9yd2FyZF9maW5kIF9fUCgodV9pbnQzMl90KSk7Cistc3RhdGljIGludCBmcmVlX3Nsb3RfYnlfeGlkIF9fUCgodV9pbnQzMl90KSk7Cistc3RhdGljIGludCBmcmVlX3Nsb3RfYnlfaW5kZXggX19QKChpbnQpKTsKKy1zdGF0aWMgaW50IG5ldGJ1ZmNtcCBfX1AoKHN0cnVjdCBuZXRidWYgKiwgc3RydWN0IG5ldGJ1ZiAqKSk7Cistc3RhdGljIHN0cnVjdCBuZXRidWYgKm5ldGJ1ZmR1cCBfX1AoKHN0cnVjdCBuZXRidWYgKikpOworLXN0YXRpYyB2b2lkIG5ldGJ1ZmZyZWUgX19QKChzdHJ1Y3QgbmV0YnVmICopKTsKKy1zdGF0aWMgaW50IGNoZWNrX3JtdGNhbGxzIF9fUCgoc3RydWN0IHBvbGxmZCAqLCBpbnQpKTsKKy1zdGF0aWMgdm9pZCB4cHJ0X3NldF9jYWxsZXIgX19QKChTVkNYUFJUICosIHN0cnVjdCBmaW5mbyAqKSk7Cistc3RhdGljIHZvaWQgc2VuZF9zdmNzeXNlcnIgX19QKChTVkNYUFJUICosIHN0cnVjdCBmaW5mbyAqKSk7Cistc3RhdGljIHZvaWQgaGFuZGxlX3JlcGx5IF9fUCgoaW50LCBTVkNYUFJUICopKTsKKy1zdGF0aWMgdm9pZCBmaW5kX3ZlcnNpb25zIF9fUCgocnBjcHJvZ190LCBjaGFyICosIHJwY3ZlcnNfdCAqLCBycGN2ZXJzX3QgKikpOworLXN0YXRpYyBycGNibGlzdF9wdHIgZmluZF9zZXJ2aWNlIF9fUCgocnBjcHJvZ190LCBycGN2ZXJzX3QsIGNoYXIgKikpOworLXN0YXRpYyBjaGFyICpnZXRvd25lciBfX1AoKFNWQ1hQUlQgKiwgY2hhciAqLCBzaXplX3QpKTsKKy1zdGF0aWMgaW50IGFkZF9wbWFwbGlzdCBfX1AoKFJQQ0IgKikpOworLXN0YXRpYyBpbnQgZGVsX3BtYXBsaXN0IF9fUCgoUlBDQiAqKSk7Cisrc3RhdGljIGJvb2xfdCB4ZHJfZW5jYXBfcGFybXMgKFhEUiAqLCBzdHJ1Y3QgZW5jYXBfcGFybXMgKik7Cisrc3RhdGljIGJvb2xfdCB4ZHJfcm10Y2FsbF9hcmdzIChYRFIgKiwgc3RydWN0IHJfcm10Y2FsbF9hcmdzICopOworK3N0YXRpYyBib29sX3QgeGRyX3JtdGNhbGxfcmVzdWx0IChYRFIgKiwgc3RydWN0IHJfcm10Y2FsbF9hcmdzICopOworK3N0YXRpYyBib29sX3QgeGRyX29wYXF1ZV9wYXJtcyAoWERSICosIHN0cnVjdCByX3JtdGNhbGxfYXJncyAqKTsKKytzdGF0aWMgaW50IGZpbmRfcm10Y2FsbGZkX2J5X25ldGlkIChjaGFyICopOworK3N0YXRpYyBTVkNYUFJUICpmaW5kX3JtdGNhbGx4cHJ0X2J5X2ZkIChpbnQpOworK3N0YXRpYyBpbnQgZm9yd2FyZF9yZWdpc3RlciAodV9pbnQzMl90LCBzdHJ1Y3QgbmV0YnVmICosIGludCwgY2hhciAqLAorKyAgICBycGNwcm9jX3QsIHJwY3ZlcnNfdCwgdV9pbnQzMl90ICopOworK3N0YXRpYyBzdHJ1Y3QgZmluZm8gKmZvcndhcmRfZmluZCAodV9pbnQzMl90KTsKKytzdGF0aWMgaW50IGZyZWVfc2xvdF9ieV94aWQgKHVfaW50MzJfdCk7Cisrc3RhdGljIGludCBmcmVlX3Nsb3RfYnlfaW5kZXggKGludCk7Cisrc3RhdGljIGludCBuZXRidWZjbXAgKHN0cnVjdCBuZXRidWYgKiwgc3RydWN0IG5ldGJ1ZiAqKTsKKytzdGF0aWMgc3RydWN0IG5ldGJ1ZiAqbmV0YnVmZHVwIChzdHJ1Y3QgbmV0YnVmICopOworK3N0YXRpYyB2b2lkIG5ldGJ1ZmZyZWUgKHN0cnVjdCBuZXRidWYgKik7Cisrc3RhdGljIGludCBjaGVja19ybXRjYWxscyAoc3RydWN0IHBvbGxmZCAqLCBpbnQpOworK3N0YXRpYyB2b2lkIHhwcnRfc2V0X2NhbGxlciAoU1ZDWFBSVCAqLCBzdHJ1Y3QgZmluZm8gKik7Cisrc3RhdGljIHZvaWQgc2VuZF9zdmNzeXNlcnIgKFNWQ1hQUlQgKiwgc3RydWN0IGZpbmZvICopOworK3N0YXRpYyB2b2lkIGhhbmRsZV9yZXBseSAoaW50LCBTVkNYUFJUICopOworK3N0YXRpYyB2b2lkIGZpbmRfdmVyc2lvbnMgKHJwY3Byb2dfdCwgY2hhciAqLCBycGN2ZXJzX3QgKiwgcnBjdmVyc190ICopOworK3N0YXRpYyBycGNibGlzdF9wdHIgZmluZF9zZXJ2aWNlIChycGNwcm9nX3QsIHJwY3ZlcnNfdCwgY2hhciAqKTsKKytzdGF0aWMgY2hhciAqZ2V0b3duZXIgKFNWQ1hQUlQgKiwgY2hhciAqLCBzaXplX3QpOworK3N0YXRpYyBpbnQgYWRkX3BtYXBsaXN0IChSUENCICopOworK3N0YXRpYyBpbnQgZGVsX3BtYXBsaXN0IChSUENCICopOworIAorIC8qCisgICogU2V0IGEgbWFwcGluZyBvZiBwcm9ncmFtLCB2ZXJzaW9uLCBuZXRpZAorZGlmZiAtLWdpdCBhL3NyYy9ycGNiaW5kLmMgYi9zcmMvcnBjYmluZC5jCitpbmRleCAwNDVkYWExLi4xMzcwMTFiIDEwMDY0NAorLS0tIGEvc3JjL3JwY2JpbmQuYworKysrIGIvc3JjL3JwY2JpbmQuYworQEAgLTEzNSwxMyArMTM1LDEzIEBAIGNoYXIgKnRjcF91YWRkcjsJLyogVW5pdmVyc2FsIFRDUCBhZGRyZXNzICovCisgc3RhdGljIGNoYXIgc2Vydm5hbWVbXSA9ICJycGNiaW5kIjsKKyBzdGF0aWMgY2hhciBzdXBlcnVzZXJbXSA9ICJzdXBlcnVzZXIiOworIAorLWludCBtYWluIF9fUCgoaW50LCBjaGFyICpbXSkpOworK2ludCBtYWluIChpbnQsIGNoYXIgKltdKTsKKyAKKy1zdGF0aWMgaW50IGluaXRfdHJhbnNwb3J0IF9fUCgoc3RydWN0IG5ldGNvbmZpZyAqKSk7Cistc3RhdGljIHZvaWQgcmJsbGlzdF9hZGQgX19QKChycGNwcm9nX3QsIHJwY3ZlcnNfdCwgc3RydWN0IG5ldGNvbmZpZyAqLAorLQkJCSAgICAgc3RydWN0IG5ldGJ1ZiAqKSk7Cistc3RhdGljIHZvaWQgdGVybWluYXRlIF9fUCgoaW50KSk7Cistc3RhdGljIHZvaWQgcGFyc2VhcmdzIF9fUCgoaW50LCBjaGFyICpbXSkpOworK3N0YXRpYyBpbnQgaW5pdF90cmFuc3BvcnQgKHN0cnVjdCBuZXRjb25maWcgKik7Cisrc3RhdGljIHZvaWQgcmJsbGlzdF9hZGQgKHJwY3Byb2dfdCwgcnBjdmVyc190LCBzdHJ1Y3QgbmV0Y29uZmlnICosCisrCQkJICAgICBzdHJ1Y3QgbmV0YnVmICopOworK3N0YXRpYyB2b2lkIHRlcm1pbmF0ZSAoaW50KTsKKytzdGF0aWMgdm9pZCBwYXJzZWFyZ3MgKGludCwgY2hhciAqW10pOworIAorIGludAorIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK2RpZmYgLS1naXQgYS9zcmMvdXRpbC5jIGIvc3JjL3V0aWwuYworaW5kZXggYTZjODM1Yi4uMzNiOWU0ZiAxMDA2NDQKKy0tLSBhL3NyYy91dGlsLmMKKysrKyBiL3NyYy91dGlsLmMKK0BAIC03MCw3ICs3MCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmxvY2FsX2luNDsKKyBzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luNiAqbG9jYWxfaW42OworICNlbmRpZgorIAorLXN0YXRpYyBpbnQgYml0bWFza2NtcCBfX1AoKHZvaWQgKiwgdm9pZCAqLCB2b2lkICosIGludCkpOworK3N0YXRpYyBpbnQgYml0bWFza2NtcCAodm9pZCAqLCB2b2lkICosIHZvaWQgKiwgaW50KTsKKyAKKyAvKgorICAqIEZvciBhbGwgYml0cyBzZXQgaW4gIm1hc2siLCBjb21wYXJlIHRoZSBjb3JyZXNwb25kaW5nIGJpdHMgaW4KK2RpZmYgLS1naXQgYS9zcmMvd2FybXN0YXJ0LmMgYi9zcmMvd2FybXN0YXJ0LmMKK2luZGV4IGI2ZWI3M2UuLjQyZGQzYWYgMTAwNjQ0CistLS0gYS9zcmMvd2FybXN0YXJ0LmMKKysrKyBiL3NyYy93YXJtc3RhcnQuYworQEAgLTU4LDggKzU4LDggQEAKKyAjZGVmaW5lCVBNQVBGSUxFCVJQQ0JJTkRfU1RBVEVESVIgIi9wb3J0bWFwLnhkciIKKyAjZW5kaWYKKyAKKy1zdGF0aWMgYm9vbF90IHdyaXRlX3N0cnVjdCBfX1AoKGNoYXIgKiwgeGRycHJvY190LCB2b2lkICopKTsKKy1zdGF0aWMgYm9vbF90IHJlYWRfc3RydWN0IF9fUCgoY2hhciAqLCB4ZHJwcm9jX3QsIHZvaWQgKikpOworK3N0YXRpYyBib29sX3Qgd3JpdGVfc3RydWN0IChjaGFyICosIHhkcnByb2NfdCwgdm9pZCAqKTsKKytzdGF0aWMgYm9vbF90IHJlYWRfc3RydWN0IChjaGFyICosIHhkcnByb2NfdCwgdm9pZCAqKTsKKyAKKyBzdGF0aWMgYm9vbF90Cisgd3JpdGVfc3RydWN0KGNoYXIgKmZpbGVuYW1lLCB4ZHJwcm9jX3Qgc3RydWN0cHJvYywgdm9pZCAqbGlzdCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC8wMDAxLXVjbGliYy1uc3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvMDAwMS11Y2xpYmMtbnNzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYTU1ZjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvMDAwMS11Y2xpYmMtbnNzLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGcm9tIGI4ZjBkN2I3MzE4YmEzNDRjMjU3ODVkNmY1Y2YzZjhkZTk4MDEyZDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOYXRhbmFlbCBDb3BhIDxuY29wYUBhbHBpbmVsaW51eC5vcmc+CitEYXRlOiBUdWUsIDIgRmViIDIwMTAgMDk6MzY6MDMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIHVjbGliYy1uc3MKKworLS0tCisgc3JjL3JwY2JpbmQuYyB8ICAgIDQgKysrKworIDEgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3JwY2JpbmQuYyBiL3NyYy9ycGNiaW5kLmMKK2luZGV4IDUyNWZmYmEuLjFmZTFhNjAgMTAwNjQ0CistLS0gYS9zcmMvcnBjYmluZC5jCisrKysgYi9zcmMvcnBjYmluZC5jCitAQCAtNjcsNyArNjcsMTEgQEAKKyAjaW5jbHVkZSA8cHdkLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorKyNpZiBkZWZpbmVkKF9fVUNMSUJDX18pCisrI2RlZmluZSBfX25zc19jb25maWd1cmVfbG9va3VwKHgseSkKKysjZWxzZQorICNpbmNsdWRlIDxuc3MuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisgI2luY2x1ZGUgInJwY2JpbmQuaCIKKyAKKy0tIAorMS42LjYuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvaW5pdC5kIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL2luaXQuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzQ5OWFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL2luaXQuZApAQCAtMCwwICsxLDg3IEBACisjIS9iaW4vc2gKKyMKKyMgc3RhcnQvc3RvcCBycGNiaW5kIGRhZW1vbi4KKworIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgcnBjYmluZAorIyBSZXF1aXJlZC1TdGFydDogICAgJG5ldHdvcmsKKyMgUmVxdWlyZWQtU3RvcDogICAgICRuZXR3b3JrCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBSUEMgcG9ydG1hcHBlciByZXBsYWNlbWVudAorIyBEZXNjcmlwdGlvbjogICAgICAgcnBjYmluZCBpcyBhIHNlcnZlciB0aGF0IGNvbnZlcnRzIFJQQyAoUmVtb3RlCisjICAgICAgICAgICAgICAgICAgICBQcm9jZWR1cmUgQ2FsbCkgcHJvZ3JhbSBudW1iZXJzIGludG8gREFSUEEKKyMgICAgICAgICAgICAgICAgICAgIHByb3RvY29sIHBvcnQgbnVtYmVycy4gSXQgbXVzdCBiZSBydW5uaW5nIGluCisjICAgICAgICAgICAgICAgICAgICBvcmRlciB0byBtYWtlIFJQQyBjYWxscy4gU2VydmljZXMgdGhhdCB1c2UKKyMgICAgICAgICAgICAgICAgICAgIFJQQyBpbmNsdWRlIE5GUyBhbmQgTklTLgorIyMjIEVORCBJTklUIElORk8KKworIyBTb3VyY2UgZnVuY3Rpb24gbGlicmFyeS4KKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK3Rlc3QgLWYgL3NiaW4vcnBjYmluZCB8fCBleGl0IDAKKworT1BUSU9OUz0iIgoraWYgWyAtZiAvZXRjL2RlZmF1bHQvcnBjYmluZCBdCit0aGVuCisgICAgLiAvZXRjL2RlZmF1bHQvcnBjYmluZAorZWxpZiBbIC1mIC9ldGMvcnBjYmluZC5jb25mIF0KK3RoZW4KKyAgICAuIC9ldGMvcnBjYmluZC5jb25mCitmaQorCitzdGFydCAoKQoreworICAgIGVjaG8gLW4gIlN0YXJ0aW5nIHJwY2JpbmQgZGFlbW9uLi4uIgorICAgIGlmIHBpZG9mIC9zYmluL3JwY2JpbmQgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBlY2hvICJhbHJlYWR5IHJ1bm5pbmcuIgorICAgICAgICBleGl0IDAKKyAgICBmaQorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLWV4ZWMgL3NiaW4vcnBjYmluZCAtLSAiJEAiCisgICAgaWYgWyAkPyAtZXEgMCBdOyB0aGVuCisgICAgICAgIGVjaG8gImRvbmUuIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiZmFpbGVkLiIKKyAgICBmaQorfQorCitzdG9wICgpCit7CisgICAgZWNobyAiU3RvcHBpbmcgcnBjYmluZCBkYWVtb24uLi4iCisgICAgaWYgISBwaWRvZiAvc2Jpbi9ycGNiaW5kID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgZWNobyAibm90IHJ1bm5pbmcuIgorICAgICAgICByZXR1cm4gMAorICAgIGZpCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1leGVjIC9zYmluL3JwY2JpbmQKKyAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KKyAgICAgICAgZWNobyAiZG9uZS4iCisgICAgZWxzZQorICAgICAgICBlY2hvICJmYWlsZWQuIgorICAgIGZpCit9CisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorICAgICAgICBzdGFydCAkT1BUSU9OUworICAgICAgICA7OworICAgIHN0b3ApCisgICAgICAgIHN0b3AKKyAgICAgICAgOzsKKyAgICBmb3JjZS1yZWxvYWQpCisgICAgICAgIHN0b3AKKyAgICAgICAgc3RhcnQgJE9QVElPTlMKKyAgICAgICAgOzsKKyAgICByZXN0YXJ0KQorICAgICAgICBzdG9wCisgICAgICAgIHN0YXJ0ICRPUFRJT05TCisgICAgICAgIDs7CisgICAgc3RhdHVzKQorICAgICAgICBzdGF0dXMgL3NiaW4vcnBjYmluZAorICAgICAgICA7OworICAgICopCisgICAgICAgIGVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9ycGNiaW5kIHtzdGFydHxzdG9wfGZvcmNlLXJlbG9hZHxyZXN0YXJ0fHN0YXR1c30iCisgICAgICAgIGV4aXQgMQorICAgICAgICA7OworZXNhYworCitleGl0ICQ/CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvbXVzbC1zdW5ycGMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvbXVzbC1zdW5ycGMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM3MmExYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9tdXNsLXN1bnJwYy5wYXRjaApAQCAtMCwwICsxLDI5IEBACitUaGUgbXVzbCBpbXBsZW1lbnRhdGlvbiBvZiBnZXRhZGRyaW5mbyBhbmQgZ2V0c2VydmJ5bmFtZSBkb2VzIG5vdAorYWxpYXNlcy4gQXMgYSB3b3JrYXJvdW5kIHdlIHVzZSAic3VucHJjIiBpbnN0ZWFkIG9mICJwb3J0bWFwcGVyIgorCitwb3J0ZWQgZnJvbSBhbHBpbmUgbGludXgKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IHJwY2JpbmQtMC4yLjIvc3JjL3JwY2JpbmQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwY2JpbmQtMC4yLjIub3JpZy9zcmMvcnBjYmluZC5jCisrKysgcnBjYmluZC0wLjIuMi9zcmMvcnBjYmluZC5jCitAQCAtNDkxLDcgKzQ5MSw3IEBAIGluaXRfdHJhbnNwb3J0KHN0cnVjdCBuZXRjb25maWcgKm5jb25mKQorIAkJCWlmICgoYWljb2RlID0gZ2V0YWRkcmluZm8oaG9zdHNbbmhvc3RzYmFrXSwKKyAJCQkgICAgc2Vydm5hbWUsICZoaW50cywgJnJlcykpICE9IDApIHsKKyAJCQkgIGlmICgoYWljb2RlID0gZ2V0YWRkcmluZm8oaG9zdHNbbmhvc3RzYmFrXSwKKy0JCQkJCQkgICAgInBvcnRtYXBwZXIiLCAmaGludHMsICZyZXMpKSAhPSAwKSB7CisrCQkJCQkJICAgICJzdW5ycGMiLCAmaGludHMsICZyZXMpKSAhPSAwKSB7CisgCQkJCXN5c2xvZyhMT0dfRVJSLAorIAkJCQkgICAgImNhbm5vdCBnZXQgbG9jYWwgYWRkcmVzcyBmb3IgJXM6ICVzIiwKKyAJCQkJICAgIG5jb25mLT5uY19uZXRpZCwgZ2FpX3N0cmVycm9yKGFpY29kZSkpOworQEAgLTU2NCw3ICs1NjQsNyBAQCBpbml0X3RyYW5zcG9ydChzdHJ1Y3QgbmV0Y29uZmlnICpuY29uZikKKyAJCWlmICgoc3RyY21wKG5jb25mLT5uY19uZXRpZCwgImxvY2FsIikgIT0gMCkgJiYKKyAJCSAgICAoc3RyY21wKG5jb25mLT5uY19uZXRpZCwgInVuaXgiKSAhPSAwKSkgeworIAkJCWlmICgoYWljb2RlID0gZ2V0YWRkcmluZm8oTlVMTCwgc2Vydm5hbWUsICZoaW50cywgJnJlcykpIT0gMCkgeworLQkJCSAgaWYgKChhaWNvZGUgPSBnZXRhZGRyaW5mbyhOVUxMLCAicG9ydG1hcHBlciIsICZoaW50cywgJnJlcykpIT0gMCkgeworKwkJCSAgaWYgKChhaWNvZGUgPSBnZXRhZGRyaW5mbyhOVUxMLCAic3VucnBjIiwgJmhpbnRzLCAmcmVzKSkhPSAwKSB7CisgCQkJICBwcmludGYoImNhbm5vdCBnZXQgbG9jYWwgYWRkcmVzcyBmb3IgJXM6ICVzIiwgIG5jb25mLT5uY19uZXRpZCwgZ2FpX3N0cmVycm9yKGFpY29kZSkpOworIAkJCSAgc3lzbG9nKExPR19FUlIsCisgCQkJCSAgICAiY2Fubm90IGdldCBsb2NhbCBhZGRyZXNzIGZvciAlczogJXMiLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JlbW92ZS1zeXMtcXVldWUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvcmVtb3ZlLXN5cy1xdWV1ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGZjOTc0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JlbW92ZS1zeXMtcXVldWUucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorbXVzbCBkb2VzIG5vdCBwcm92aWRlIHRoaXMgaGVhZGVyIGFuZCBoZXJlIGlzIHJlYXNvbmluZworaHR0cDovL3dpa2kubXVzbC1saWJjLm9yZy93aWtpL0ZBUSNROl93aHlfaXNfc3lzLjJGcXVldWUuaF9ub3RfaW5jbHVkZWRfLjNGCisKK1NvIGluY2x1ZGUgaXQgb25seSB3aGVuIF9fR0xJQkNfXyBpcyBkZWZpbmVkIHdoaWNoIGlzIHRydWUgZm9yIHVjbGliYyBhbmQgZ2xpYmMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogcnBjYmluZC0wLjIuMi9zcmMvdXRpbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBjYmluZC0wLjIuMi5vcmlnL3NyYy91dGlsLmMKKysrKyBycGNiaW5kLTAuMi4yL3NyYy91dGlsLmMKK0BAIC00MSw3ICs0MSw5IEBACisgCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisrI2lmZGVmIF9fR0xJQkNfXworICNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8bmV0L2lmLmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8aWZhZGRycy5oPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JwY2JpbmQuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9ycGNiaW5kLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE0ZGZiYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9ycGNiaW5kLmNvbmYKQEAgLTAsMCArMSwzIEBACisjIE9wdGlvbmFsIGFyZ3VtZW50cyBwYXNzZWQgdG8gcnBjYmluZC4KKyMKK1JQQ0JJTkRfT1BUUz0iIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JwY2JpbmQuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9ycGNiaW5kLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNhZTI1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9ycGNiaW5kLnNlcnZpY2UKQEAgLTAsMCArMSwxMiBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1SUEMgQmluZCBTZXJ2aWNlCitSZXF1aXJlcz1ycGNiaW5kLnNvY2tldAorCitbU2VydmljZV0KK1R5cGU9Zm9ya2luZworRW52aXJvbm1lbnRGaWxlPS1AU1lTQ09ORkRJUkAvcnBjYmluZC5jb25mCitFeGVjU3RhcnQ9QFNCSU5ESVJAL3JwY2JpbmQgLXcgJFJQQ0JJTkRfT1BUUworU3VjY2Vzc0V4aXRTdGF0dXM9MgorCitbSW5zdGFsbF0KK0Fsc289cnBjYmluZC5zb2NrZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9ycGNiaW5kLnNvY2tldCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9ycGNiaW5kLnNvY2tldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjNjMWQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JwY2JpbmQuc29ja2V0CkBAIC0wLDAgKzEsOCBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1SUENiaW5kIFNlcnZlciBBY3RpdmF0aW9uIFNvY2tldAorCitbU29ja2V0XQorTGlzdGVuU3RyZWFtPS92YXIvcnVuL3JwY2JpbmQuc29jaworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PXNvY2tldHMudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmRfMC4yLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmRfMC4yLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMzNjAyMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZF8wLjIuMy5iYgpAQCAtMCwwICsxLDczIEBACitTVU1NQVJZID0gIlVuaXZlcnNhbCBBZGRyZXNzZXMgdG8gUlBDIFByb2dyYW0gTnVtYmVyIE1hcHBlciIKK0RFU0NSSVBUSU9OID0gIlRoZSBycGNiaW5kIHV0aWxpdHkgaXMgYSBzZXJ2ZXIgdGhhdCBjb252ZXJ0cyBSUEMgXAorICAgICAgICAgICAgICAgcHJvZ3JhbSBudW1iZXJzIGludG8gdW5pdmVyc2FsIGFkZHJlc3Nlcy4iCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvcnBjYmluZC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MjAxMjM3JmF0aWQ9OTc2NzUxIgorREVQRU5EUyA9ICJsaWJ0aXJwYyBxdW90YSIKKworTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iNDY0ODZlNGM0YTQxNjYwMjY5M2E3MTFiYjViZmEzOSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcnBjaW5mby5jO2JlZ2lubGluZT0xO2VuZGxpbmU9Mjc7bWQ1PWY4YThjZDJjYjI1YWM1YWExNjc2NzM2NGZiMGUzYzI0IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9ycGNiaW5kL3JwY2JpbmQtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0LmQgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1Bdm9pZC11c2Utb2YtZ2xpYmMtc3lzLWNkZWZzLmgtaGVhZGVyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZS1zeXMtcXVldWUucGF0Y2ggXAorICAgICAgICAgICAke1VDTElCQ1BBVENIRVN9IFwKKyAgICAgICAgICAgJHtNVVNMUEFUQ0hFU30gXAorICAgICAgICAgICBmaWxlOi8vcnBjYmluZC5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL3JwY2JpbmQuc29ja2V0IFwKKyAgICAgICAgICAgZmlsZTovL3JwY2JpbmQuc2VydmljZSBcCisgICAgICAgICAgIgorTVVTTFBBVENIRVNfbGliYy1tdXNsID0gImZpbGU6Ly9tdXNsLXN1bnJwYy5wYXRjaCIKKworVUNMSUJDUEFUQ0hFU19saWJjLXVjbGliYyA9ICJmaWxlOi8vMDAwMS11Y2xpYmMtbnNzLnBhdGNoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCitVQ0xJQkNQQVRDSEVTID89ICIiCitNVVNMUEFUQ0hFUyA/PSAiIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYzg4NzUyNDZiMjY4OGExYWRmYmQ2YWQ0MzQ4MDI3OGQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTg5NzgyM2E5ZDgyMGVhMDExZDllYTAyMDU0ZDVhYjk5NDY5YjljYTUzNDYyNjVmZWUzODA3MTNjOGZlZDI3YiIKKworaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLXJjLmQgc3lzdGVtZCBwa2djb25maWcKKworUEFDS0FHRUNPTkZJRyA/Pz0gInRjcC13cmFwcGVycyIKK1BBQ0tBR0VDT05GSUdbdGNwLXdyYXBwZXJzXSA9ICItLWVuYWJsZS1saWJ3cmFwLC0tZGlzYWJsZS1saWJ3cmFwLHRjcC13cmFwcGVycyIKKworSU5JVFNDUklQVF9OQU1FID0gInJwY2JpbmQiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAxMiAyIDMgNCA1IC4gc3RvcCA2MCAwIDEgNiAuIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAicnBjYmluZC5zZXJ2aWNlIgorCitpbmhlcml0IHVzZXJhZGQKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK1VTRVJBRERfUEFSQU1fJHtQTn0gPSAiLS1zeXN0ZW0gLS1uby1jcmVhdGUtaG9tZSAtLWhvbWUtZGlyIC8gXAorICAgICAgICAgICAgICAgICAgICAgICAtLXNoZWxsIC9iaW4vZmFsc2UgLS11c2VyLWdyb3VwIHJwYyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICdzeXN0ZW1kJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbc3lzdGVtZF0gPSAiLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aG91dC1zeXN0ZW1kc3lzdGVtdW5pdGRpciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1kIFwKKyIKKworRVhUUkFfT0VDT05GICs9ICIgLS1lbmFibGUtd2FybXN0YXJ0cyAtLXdpdGgtcnBjdXNlcj1ycGMiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwltdiAke0R9JHtiaW5kaXJ9ICR7RH0ke3NiaW5kaXJ9CisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCXNlZCAtZSAncywvZXRjLywke3N5c2NvbmZkaXJ9LyxnJyBcCisJCS1lICdzLC9zYmluLywke3NiaW5kaXJ9LyxnJyBcCisJCSR7V09SS0RJUn0vaW5pdC5kID4gJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3JwY2JpbmQKKwljaG1vZCAwNzU1ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9ycGNiaW5kCisKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9ycGNiaW5kLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcnBjYmluZC5zb2NrZXQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9ycGNiaW5kLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgXAorCQktZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyBcCisJCSR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3JwY2JpbmQuc2VydmljZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi8wMDAxLWZpeC1mb3ItbXVsdGlqb2ItYnVpbGQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuLzAwMDEtZml4LWZvci1tdWx0aWpvYi1idWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGVjZWYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi8wMDAxLWZpeC1mb3ItbXVsdGlqb2ItYnVpbGQucGF0Y2gKQEAgLTAsMCArMSw1OCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitCYWNrcG9ydCBwYXRjaCB0byBmaXggcGFyYWxsZWwgYnVpbGQgZmFpbHVyZSBhbmQgdXBkYXRlIGNvbnRleHQgdG8gbWFrZSBwYXRjaAorY291bGRlIGJlIGFwcGxpZWQuCisKK2h0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9jZ2l0L3NjcmVlbi5naXQvY29tbWl0P2lkPWMwZGU2ZGQKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KK0Zyb20gYzBkZTZkZDc5NzBiMmM3YjQyNmE1YzM5ZGNiYzMxYzJiZWY4NzIzMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9BbWFkZXVzej0yMFM9QzU9ODJhd2k9QzU9ODRza2k/PSA8YW1hZGVAYXNtYmxyLm5ldD4KK0RhdGU6IFRodSwgMiBKYW4gMjAxNCAxODoxODowNiArMDEwMAorU3ViamVjdDogW1BBVENIXSBmaXggZm9yIG11bHRpam9iIGJ1aWxkCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK21ha2Ugc3VyZSB0aGF0IGNvbW0uc2ggc2NyaXB0IGdlbmVyYXRlcyBjb21tLmggaGVhZGVyIGJlZm9yZSBkb2luZworYW55dGhpbmcgZWxzZQorCitTaWduZWQtb2ZmLWJ5OiBBbWFkZXVzeiBTxYJhd2nFhHNraSA8YW1hZGVAYXNtYmxyLm5ldD4KKy0tLQorIE1ha2VmaWxlLmluIHwgMTAgKysrKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCBjZTg2Y2JjLi5kZWExNmQ4IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMjk4LDcgKzI5OCw3IEBAIHNlYXJjaC5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIHNlYXJjaC5jIGNvbmZpZy5oIHNjcmVlbi5oIG9zLmggb3NkZWYuaCBhCisgIGNvbW0uaCBsYXllci5oIHRlcm0uaCBpbWFnZS5oIGRpc3BsYXkuaCB3aW5kb3cuaCBtYXJrLmggZXh0ZXJuLmgKKyB0dHkubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCB0dHkuYyBjb25maWcuaCBzY3JlZW4uaCBvcy5oIG9zZGVmLmggYW5zaS5oIGFjbHMuaCBjb21tLmggXAorICBsYXllci5oIHRlcm0uaCBpbWFnZS5oIGRpc3BsYXkuaCB3aW5kb3cuaCBleHRlcm4uaAorLXRlcm0ubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCB0ZXJtLmMgdGVybS5oCisrdGVybS5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIHRlcm0uYyB0ZXJtLmggY29tbS5oCisgd2luZG93Lm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggd2luZG93LmMgY29uZmlnLmggc2NyZWVuLmggb3MuaCBvc2RlZi5oIGFuc2kuaCBhY2xzLmggXAorICBjb21tLmggbGF5ZXIuaCB0ZXJtLmggaW1hZ2UuaCBkaXNwbGF5Lmggd2luZG93LmggZXh0ZXJuLmggbG9nZmlsZS5oCisgdXRtcC5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIHV0bXAuYyBjb25maWcuaCBzY3JlZW4uaCBvcy5oIG9zZGVmLmggYW5zaS5oIGFjbHMuaCBcCitAQCAtMzI0LDcgKzMyNCw3IEBAIGNhbnZhcy5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIGNhbnZhcy5jIGNvbmZpZy5oIHNjcmVlbi5oIG9zLmggb3NkZWYuaCBhCisgIGNvbW0uaCBsYXllci5oIHRlcm0uaCBpbWFnZS5oIGRpc3BsYXkuaCB3aW5kb3cuaCBleHRlcm4uaCBcCisgIGJyYWlsbGUuaAorIGNvbW0ubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCBjb21tLmMgY29uZmlnLmggYWNscy5oIGNvbW0uaAorLWttYXBkZWYubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCBrbWFwZGVmLmMgY29uZmlnLmgKKytrbWFwZGVmLm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmgga21hcGRlZi5jIGNvbmZpZy5oIGNvbW0uaAorIGFjbHMubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCBhY2xzLmMgY29uZmlnLmggc2NyZWVuLmggb3MuaCBvc2RlZi5oIGFuc2kuaCBhY2xzLmggY29tbS5oIFwKKyAgbGF5ZXIuaCB0ZXJtLmggaW1hZ2UuaCBkaXNwbGF5Lmggd2luZG93LmggZXh0ZXJuLmgKKyBicmFpbGxlLm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggYnJhaWxsZS5jIGNvbmZpZy5oIHNjcmVlbi5oIG9zLmggb3NkZWYuaCBhbnNpLmggYWNscy5oIFwKK0BAIC0zNTAsNyArMzUwLDcgQEAgbGF5b3V0Lm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggbGF5b3V0LmMgY29uZmlnLmggc2NyZWVuLmggb3MuaCBvc2RlZi5oIGEKKyB2aWV3cG9ydC5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIHZpZXdwb3J0LmMgY29uZmlnLmggc2NyZWVuLmggb3MuaCBvc2RlZi5oIGFuc2kuaCBhY2xzLmggXAorICBjb21tLmggbGF5ZXIuaCB0ZXJtLmggaW1hZ2UuaCBkaXNwbGF5Lmggd2luZG93LmggZXh0ZXJuLmggXAorICBicmFpbGxlLmgKKy1saXN0X2dlbmVyaWMubzogbGlzdF9nZW5lcmljLmggbGlzdF9nZW5lcmljLmMgbGF5ZXIuaCBzY3JlZW4uaCBvc2RlZi5oCistbGlzdF9kaXNwbGF5Lm86IGxpc3RfZ2VuZXJpYy5oIGxpc3RfZGlzcGxheS5jIGxheWVyLmggc2NyZWVuLmggb3NkZWYuaAorLWxpc3Rfd2luZG93Lm86IGxpc3RfZ2VuZXJpYy5oIGxpc3Rfd2luZG93LmMgd2luZG93LmggbGF5ZXIuaCBzY3JlZW4uaCBvc2RlZi5oCisrbGlzdF9nZW5lcmljLm86IGxpc3RfZ2VuZXJpYy5oIGxpc3RfZ2VuZXJpYy5jIGxheWVyLmggc2NyZWVuLmggb3NkZWYuaCBjb21tLmgKKytsaXN0X2Rpc3BsYXkubzogbGlzdF9nZW5lcmljLmggbGlzdF9kaXNwbGF5LmMgbGF5ZXIuaCBzY3JlZW4uaCBvc2RlZi5oIGNvbW0uaAorK2xpc3Rfd2luZG93Lm86IGxpc3RfZ2VuZXJpYy5oIGxpc3Rfd2luZG93LmMgd2luZG93LmggbGF5ZXIuaCBzY3JlZW4uaCBvc2RlZi5oIGNvbW0uaAorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi8wMDAyLWNvbW0uaC1ub3ctZGVwZW5kcy1vbi10ZXJtLmgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuLzAwMDItY29tbS5oLW5vdy1kZXBlbmRzLW9uLXRlcm0uaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWQ3MWNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi8wMDAyLWNvbW0uaC1ub3ctZGVwZW5kcy1vbi10ZXJtLmgucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitCYWNrcG9ydCBmcm9tOgorCitodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvY2dpdC9zY3JlZW4uZ2l0L2NvbW1pdC8/aWQ9MzljNWYxYworCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorRnJvbSAzOWM1ZjFjNzZmMWZjZWY0YjU5NThiZjgyOGE2M2Y1MzQyNmI2OTg0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWlrZSBHZXJ3aXR6IDxtaWtlQG1pa2VnZXJ3aXR6LmNvbT4KK0RhdGU6IFR1ZSwgMjQgRGVjIDIwMTMgMjI6MTY6MzEgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gY29tbS5oIG5vdyBkZXBlbmRzIG9uIHRlcm0uaAorCistLS0KKyBzcmMvTWFrZWZpbGUuaW4gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuaW4gYi9zcmMvTWFrZWZpbGUuaW4KK2luZGV4IGU3OTFlNzkuLmQ0ZjdjMGIgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0xMTMsNyArMTEzLDcgQEAgdGVybS5oOiB0ZXJtLmMgdGVybS5zaAorIAorIGttYXBkZWYuYzogdGVybS5oCisgCistY29tbS5oOiBjb21tLmMgY29tbS5zaCBjb25maWcuaAorK2NvbW0uaDogY29tbS5jIGNvbW0uc2ggY29uZmlnLmggdGVybS5oCisgCUFXSz0kKEFXSykgQ0M9IiQoQ0MpICQoQ0ZMQUdTKSIgc3JjZGlyPSR7c3JjZGlyfSBzaCAkKHNyY2RpcikvY29tbS5zaAorIAorIGRvY3M6CistLSAKKzIuNC4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vQXZvaWQtbWlzLWlkZW50aWZ5aW5nLXN5c3RlbXMtYXMtU1ZSNC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vQXZvaWQtbWlzLWlkZW50aWZ5aW5nLXN5c3RlbXMtYXMtU1ZSNC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTg0YWExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9Bdm9pZC1taXMtaWRlbnRpZnlpbmctc3lzdGVtcy1hcy1TVlI0LnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0Zyb20gNzlhZmI2NzY5MDQ2NTM0MDMxNDVmZGE5ZTFhNmE5ZDNlYTFjYjIyYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBGcmksIDcgQXVnIDIwMTUgMTE6MTA6MzIgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCA0LzRdIEF2b2lkIG1pcy1pZGVudGlmeWluZyBzeXN0ZW1zIGFzIFNWUjQKKworTGludXggY2FuIGJlIG1pc2RldGVjdGVkIGFzIFNWUjQgYmVjYXVzZSBpdCBoYXMKK2xpYmVsZiBpbnN0YWxsZWQuIFRoaXMgbGVhZHMgdG8gbGlua2luZyB3aXRoIGxpYmVsZiwgZXZlbiB0aG91Z2ggbm8KK3N5bWJvbHMgZnJvbSB0aGF0IGxpYnJhcnkgd2VyZSBhY3R1YWxseSB1c2VkLCBhbmQgdG8gYSB3b3JrYXJvdW5kIGZvcgorYSBidWdneSBnZXRsb2dpbigpIGJlaW5nIGVuYWJsZWQuCisKK0l0IGlzIG5vdCBkb2N1bWVudGVkIHdoaWNoIGV4YWN0IFNWUjQgc3lzdGVtIGhhZCB0aGUgYnVnIHRoYXQgdGhlCit3b3JrYXJvdW5kIHdhcyBhZGRlZCBmb3IsIHNvIGFsbCBJIGNvdWxkIGRvIGlzIG1ha2UgYW4gZWR1Y2F0ZWQgZ3Vlc3MKK2F0IHRoZSAjZGVmaW5lcyBpdHMgY29tcGlsZXIgd291bGQgYmUgbGlrZWx5IHRvIHNldC4KKworTW9kaWZpZWQgZnJvbSBwYXRjaCBieSBNYWFydGVuIHRlciBIdXVybmUuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9idWdzLz80MzIyM10KKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDE0ICsrKysrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGRjOTI4YWUuLjY1NDM5Y2UgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE3OSwxNCArMTc5LDI0IEBAIEFDX0VHUkVQX0NQUCh5ZXMsCisgI2VuZGlmCisgXSwgTElCUz0iJExJQlMgLWxzb2NrZXQgLWxpbmV0IjtzZXFwdHg9MSkKKyAKKytBQ19DSEVDS0lORyhTVlI0KQorK0FDX0VHUkVQX0NQUCh5ZXMsCisrW21haW4gKCkgeworKyNpZiBkZWZpbmVkKFNWUjQpIHx8IGRlZmluZWQoX19TVlI0KQorKyAgeWVzOworKyNlbmRpZgorK10sIEFDX05PVEUoLSB5b3UgaGF2ZSBhIFNWUjQgc3lzdGVtKSBBQ19ERUZJTkUoU1ZSNCkgc3ZyND0xKQorK2lmIHRlc3QgLW4gIiRzdnI0IiA7IHRoZW4KKyBvbGRsaWJzPSIkTElCUyIKKyBMSUJTPSIkTElCUyAtbGVsZiIKKyBBQ19DSEVDS0lORyhTVlI0KQorIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8dXRtcHguaD4KKyBdLCwKKy1bQUNfQ0hFQ0tfSEVBREVSKGR3YXJmLmgsIEFDX0RFRklORShTVlI0KSBBQ19ERUZJTkUoQlVHR1lHRVRMT0dJTiksCistW0FDX0NIRUNLX0hFQURFUihlbGYuaCwgQUNfREVGSU5FKFNWUjQpIEFDX0RFRklORShCVUdHWUdFVExPR0lOKSldKV0KKytbQUNfQ0hFQ0tfSEVBREVSKGR3YXJmLmgsIEFDX0RFRklORShCVUdHWUdFVExPR0lOKSwKKytbQUNfQ0hFQ0tfSEVBREVSKGVsZi5oLCBBQ19ERUZJTkUoQlVHR1lHRVRMT0dJTikpXSldCisgLExJQlM9IiRvbGRsaWJzIikKKytmaQorKworIEFDX0NIRUNLX0hFQURFUlMoW3N0cm9wdHMuaCBzdHJpbmcuaCBzdHJpbmdzLmhdKQorIAorIEFDX0NIRUNLSU5HKGZvciBTb2xhcmlzIDIueCkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9Qcm92aWRlLWNyb3NzLWNvbXBpbGUtYWx0ZXJuYXRpdmVzLWZvci1BQ19UUllfUlVOLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9Qcm92aWRlLWNyb3NzLWNvbXBpbGUtYWx0ZXJuYXRpdmVzLWZvci1BQ19UUllfUlVOLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0OGJmMDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL1Byb3ZpZGUtY3Jvc3MtY29tcGlsZS1hbHRlcm5hdGl2ZXMtZm9yLUFDX1RSWV9SVU4ucGF0Y2gKQEAgLTAsMCArMSwxMzcgQEAKK0Zyb20gY2QwZjdmMTBhM2ZmZmJjNjBmZTU1ZWIyMDA0NzRkMTNmZTFkYTY1YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBGcmksIDcgQXVnIDIwMTUgMTA6MzQ6MjkgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzRdIFByb3ZpZGUgY3Jvc3MgY29tcGlsZSBhbHRlcm5hdGl2ZXMgZm9yIEFDX1RSWV9SVU4KKworTW9kaWZpZWQgZnJvbSBwYXRjaCBieSBNYWFydGVuIHRlciBIdXVybmUuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9idWdzLz80MzIyM10KKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDMyICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAyNzY5MGE2Li5jZTg5ZjU2IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zNDgsNyArMzQ4LDggQEAgbWFpbigpCisgICBleGl0KDApOworIH0KKyBdLCBBQ19OT1RFKC0geW91ciBmaWZvcyBhcmUgdXNhYmxlKSBmaWZvPTEsCistQUNfTk9URSgtIHlvdXIgZmlmb3MgYXJlIG5vdCB1c2FibGUpKQorK0FDX05PVEUoLSB5b3VyIGZpZm9zIGFyZSBub3QgdXNhYmxlKSwKKytBQ19OT1RFKC0gc2tpcHBpbmcgY2hlY2sgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWluZyBmaWZvcyBhcmUgdXNhYmxlKSBmaWZvPTEpCisgcm0gLWYgL3RtcC9jb25mdGVzdCoKKyAKKyBpZiB0ZXN0IC1uICIkZmlmbyI7IHRoZW4KK0BAIC0zOTYsNyArMzk3LDggQEAgbWFpbigpCisgICBleGl0KDApOworIH0KKyBdLCBBQ19OT1RFKC0geW91ciBpbXBsZW1lbnRhdGlvbiBpcyBvayksIAorLUFDX05PVEUoLSB5b3UgaGF2ZSBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbikgQUNfREVGSU5FKEJST0tFTl9QSVBFKSBmaWZvYnI9MSkKKytBQ19OT1RFKC0geW91IGhhdmUgYSBicm9rZW4gaW1wbGVtZW50YXRpb24pIEFDX0RFRklORShCUk9LRU5fUElQRSkgZmlmb2JyPTEsCisrQUNfTk9URSgtIHNraXBwaW5nIGNoZWNrIGJlY2F1c2Ugd2UgYXJlIGNyb3NzIGNvbXBpbGluZzsgYXNzdW1pbmcgZmlmbyBpbXBsZW1lbnRhdGlvbiBpcyBvaykpCisgcm0gLWYgL3RtcC9jb25mdGVzdCoKKyBmaQorIAorQEAgLTQ1OCw3ICs0NjAsOCBAQCBtYWluKCkKKyAgIGV4aXQoMCk7CisgfQorIF0sIEFDX05PVEUoLSB5b3VyIHNvY2tldHMgYXJlIHVzYWJsZSkgc29jaz0xLAorLUFDX05PVEUoLSB5b3VyIHNvY2tldHMgYXJlIG5vdCB1c2FibGUpKQorK0FDX05PVEUoLSB5b3VyIHNvY2tldHMgYXJlIG5vdCB1c2FibGUpLAorK0FDX05PVEUoLSBza2lwcGluZyBjaGVjayBiZWNhdXNlIHdlIGFyZSBjcm9zcyBjb21waWxpbmc7IGFzc3VtaW5nIHNvY2tldHMgYXJlIHVzYWJsZSkgc29jaz0xKQorIHJtIC1mIC90bXAvY29uZnRlc3QqCisgCisgaWYgdGVzdCAtbiAiJHNvY2siOyB0aGVuCitAQCAtNDk3LDcgKzUwMCw4IEBAIG1haW4oKQorIH0KKyBdLEFDX05PVEUoLSB5b3UgYXJlIG5vcm1hbCksCisgQUNfTk9URSgtIHVuaXggZG9tYWluIHNvY2tldHMgYXJlIG5vdCBrZXB0IGluIHRoZSBmaWxlc3lzdGVtKQorLUFDX0RFRklORShTT0NLX05PVF9JTl9GUykgc29ja25vZnM9MSkKKytBQ19ERUZJTkUoU09DS19OT1RfSU5fRlMpIHNvY2tub2ZzPTEsCisrQUNfTk9URSgtIHNraXBwaW5nIGNoZWNrIGJlY2F1c2Ugd2UgYXJlIGNyb3NzIGNvbXBpbGluZzsgYXNzdW1pbmcgc29ja2V0cyBhcmUgbm9ybWFsKSkKKyBybSAtZiAvdG1wL2NvbmZ0ZXN0KgorIGZpCisgCitAQCAtNjI0LDcgKzYyOCw4IEBAIG1haW4oKQorICAgZXhpdCgwKTsKKyB9CisgXSxBQ19OT1RFKC0gc2VsZWN0IGlzIG9rKSwKKy1BQ19OT1RFKC0gc2VsZWN0IGNhbid0IGNvdW50KSBBQ19ERUZJTkUoU0VMRUNUX0JST0tFTikpCisrQUNfTk9URSgtIHNlbGVjdCBjYW4ndCBjb3VudCkgQUNfREVGSU5FKFNFTEVDVF9CUk9LRU4pLAorK0FDX05PVEUoLSBza2lwcGluZyBjaGVjayBiZWNhdXNlIHdlIGFyZSBjcm9zcyBjb21waWxpbmc7IGFzc3VtaW5nIHNlbGVjdCBpcyBvaykpCisgCisgZG5sCisgZG5sICAgICoqKiogIHRlcm1jYXAgb3IgdGVybWluZm8gICoqKioKK0BAIC02NjYsNyArNjcxLDggQEAgbWFpbigpCisgeworICBleGl0KHN0cmNtcCh0Z290bygiJXAxJWQiLCAwLCAxKSwgIjEiKSA/IDAgOiAxKTsKKyB9XSwgQUNfTk9URSgtIHlvdSB1c2UgdGhlIHRlcm1jYXAgZGF0YWJhc2UpLAorLUFDX05PVEUoLSB5b3UgdXNlIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZSkgQUNfREVGSU5FKFRFUk1JTkZPKSkKKytBQ19OT1RFKC0geW91IHVzZSB0aGUgdGVybWluZm8gZGF0YWJhc2UpIEFDX0RFRklORShURVJNSU5GTyksCisrQUNfTk9URSgtIHNraXBwaW5nIGNoZWNrIGJlY2F1c2Ugd2UgYXJlIGNyb3NzIGNvbXBpbGluZzsgYXNzdW1pbmcgdGVybWluZm8gZGF0YWJhc2UgaXMgdXNlZCkgQUNfREVGSU5FKFRFUk1JTkZPKSkKKyBBQ19DSEVDS0lORyhvc3BlZWQpCisgQUNfVFJZX0xJTksoZXh0ZXJuIHNob3J0IG9zcGVlZDssb3NwZWVkPTU7LCxBQ19ERUZJTkUoTkVFRF9PU1BFRUQpKQorIAorQEAgLTgwMSw3ICs4MDcsOCBAQCBtYWluKCkKKyAgICAgZWxzZQorICAgICAgIEFDX05PVEUoLSBjYW4ndCBkZXRlcm1pbmUgLSBhc3N1bWUgcHR5cyBhcmUgd29ybGQgYWNjZXNzYWJsZSkKKyAgICAgZmkKKy0gIF0KKysgIF0sCisrICBBQ19OT1RFKC0gc2tpcHBpbmcgY2hlY2sgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWluZyBwdHlzIGFyZSB3b3JsZCBhY2Nlc3NhYmxlKQorICkKKyBybSAtZiBjb25mdGVzdF9ncnAKKyBmaQorQEAgLTg4NSw3ICs4OTIsNyBAQCBBQ19FR1JFUF9DUFAoeWVzLAorICNlbmRpZgorIF0sIGxvYWQ9MSkKKyBmaQorLWlmIHRlc3QgLXogIiRsb2FkIiA7IHRoZW4KKytpZiB0ZXN0IC16ICIkbG9hZCIgJiYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyA7IHRoZW4KKyBBQ19DSEVDS0lORyhmb3Iga2VybmVsZmlsZSkKKyBmb3IgY29yZSBpbiAvdW5peCAvdm11bml4IC9keW5peCAvaHAtdXggL3hlbG9zIC9kZXYva3N5bXMgL2tlcm5lbC91bml4IC9rZXJuZWwvZ2VudW5peCAvdW5pY29zIC9tYWNoIC9uZXRic2QgLzM4NmJzZCAvZGd1eCAvYnNkIC9zdGFuZC92bXVuaXg7IGRvCisgICBpZiB0ZXN0IC1mICRjb3JlIHx8IHRlc3QgLWMgJGNvcmU7IHRoZW4KK0BAIC0xMDc4LDcgKzEwODUsNyBAQCBtYWluKCkKKyAjZW5kaWYKKyAgIGV4aXQoMCk7CisgfQorLV0sLEFDX0RFRklORShTWVNWU0lHUykpCisrXSwsQUNfREVGSU5FKFNZU1ZTSUdTKSw6KQorIAorIGZpCisgCitAQCAtMTE1OCw3ICsxMTY1LDcgQEAgbWFpbigpIHsKKyAgIGlmIChzdHJuY21wKGJ1ZiwgImNkZWRlZiIsIDYpKQorICAgICBleGl0KDEpOworICAgZXhpdCgwKTsgLyogbGliYyB2ZXJzaW9uIHdvcmtzIHByb3Blcmx5LiAgKi8KKy19XSwgQUNfREVGSU5FKFVTRUJDT1BZKSkKKyt9XSwgQUNfREVGSU5FKFVTRUJDT1BZKSwsOikKKyAKKyBBQ19UUllfUlVOKFsKKyAjZGVmaW5lIGJjb3B5KHMsZCxsKSBtZW1tb3ZlKGQscyxsKQorQEAgLTExNzMsNyArMTE4MCw4IEBAIG1haW4oKSB7CisgICBpZiAoc3RybmNtcChidWYsICJjZGVkZWYiLCA2KSkKKyAgICAgZXhpdCgxKTsKKyAgIGV4aXQoMCk7IC8qIGxpYmMgdmVyc2lvbiB3b3JrcyBwcm9wZXJseS4gICovCistfV0sIEFDX0RFRklORShVU0VNRU1NT1ZFKSkKKyt9XSwgQUNfREVGSU5FKFVTRU1FTU1PVkUpLCwKKysgIEFDX05PVEUoLSBza2lwcGluZyBjaGVjayBiZWNhdXNlIHdlIGFyZSBjcm9zcyBjb21waWxpbmc7IHVzZSBtZW1tb3ZlKSBBQ19ERUZJTkUoVVNFTUVNTU9WRSkpCisgCisgCisgQUNfVFJZX1JVTihbCitAQCAtMTE4OSw3ICsxMTk3LDcgQEAgbWFpbigpIHsKKyAgIGlmIChzdHJuY21wKGJ1ZiwgImNkZWRlZiIsIDYpKQorICAgICBleGl0KDEpOworICAgZXhpdCgwKTsgLyogbGliYyB2ZXJzaW9uIHdvcmtzIHByb3Blcmx5LiAgKi8KKy19XSwgQUNfREVGSU5FKFVTRU1FTUNQWSkpCisrfV0sIEFDX0RFRklORShVU0VNRU1DUFkpLCw6KQorIAorIEFDX1NZU19MT05HX0ZJTEVfTkFNRVMKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9SZW1vdmUtcmVkdW5kYW50LWNvbXBpbGVyLXNhbml0eS1jaGVja3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL1JlbW92ZS1yZWR1bmRhbnQtY29tcGlsZXItc2FuaXR5LWNoZWNrcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzYyYzEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9SZW1vdmUtcmVkdW5kYW50LWNvbXBpbGVyLXNhbml0eS1jaGVja3MucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAorRnJvbSA3M2I3MjZjMjVmOTRjMWIxNTUxNGVkOTI0OWI5MjdhZmRmYmJmYjk0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IEZyaSwgNyBBdWcgMjAxNSAxMDozMDo0MCArMDMwMAorU3ViamVjdDogW1BBVENIIDEvNF0gUmVtb3ZlIHJlZHVuZGFudCBjb21waWxlciBzYW5pdHkgY2hlY2tzCisKK0FDX1BST0dfQ0MgYWxyZWFkeSBwZXJmb3JtcyBzYW5pdHkgY2hlY2tzLiBBbmQgdW5saWtlIHRoZSByZW1vdmVkCitjaGVja3MsIGl0IGRvZXMgc28gaW4gYSB3YXkgdGhhdCBzdXBwb3J0cyBjcm9zcyBjb21waWxhdGlvbi4KKworTW9kaWZpZWQgZnJvbSBwYXRjaCBieSBNYWFydGVuIHRlciBIdXVybmUuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9idWdzLz80MzIyM10KKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDI3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZmZlMmUzNy4uMjc2OTBhNiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNDgsMzEgKzQ4LDYgQEAgQUNfUFJPR19HQ0NfVFJBRElUSU9OQUwKKyBBQ19JU0NfUE9TSVgKKyBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyAKKy1BQ19UUllfUlVOKG1haW4oKXtleGl0KDApO30sLFsKKy1pZiB0ZXN0ICRDQyAhPSBjYyA7IHRoZW4KKy1BQ19OT1RFKFlvdXIgJENDIGZhaWxlZCAtIHJlc3RhcnRpbmcgd2l0aCBDQz1jYykKKy1BQ19OT1RFKCkKKy1DQz1jYworLWV4cG9ydCBDQworLWV4ZWMgJDAgJGNvbmZpZ3VyZV9hcmdzCistZmkKKy1dKQorLQorLUFDX1RSWV9SVU4obWFpbigpe2V4aXQoMCk7fSwsCistZXhlYyA1PiYyCistZXZhbCAkYWNfbGluaworLUFDX05PVEUoQ0M9JENDOyBDRkxBR1M9JENGTEFHUzsgTElCUz0kTElCUzspCistQUNfTk9URSgkYWNfY29tcGlsZSkKKy1BQ19NU0dfRVJST1IoQ2FuJ3QgcnVuIHRoZSBjb21waWxlciAtIHNvcnJ5KSkKKy0KKy1BQ19UUllfUlVOKFsKKy1tYWluKCkKKy17CistICBpbnQgX19zb21ldGhpbmdfc3RyYW5nZV8oKTsKKy0gIF9fc29tZXRoaW5nX3N0cmFuZ2VfKDApOworLX0KKy1dLEFDX01TR19FUlJPUihZb3VyIGNvbXBpbGVyIGRvZXMgbm90IHNldCB0aGUgZXhpdCBzdGF0dXMgLSBzb3JyeSkpCistCisgQUNfUFJPR19BV0sKKyAKKyBBQ19QUk9HX0lOU1RBTEwKK0BAIC0xMzAwLDggKzEyNzUsNiBAQCBmaQorIGRubCBQdHggYnVnIHdvcmthcm91bmQgLS0gaW5zZXJ0IC1sYyBhZnRlciAtbHRlcm1jYXAKKyB0ZXN0IC1uICIkc2VxcHR4IiAmJiBMSUJTPSItbHRlcm1jYXAgLWxjIC1sc29ja2V0IC1saW5ldCAtbG5zbCAtbHNlYyAtbHNlcSIKKyAKKy1BQ19UUllfUlVOKG1haW4oKXtleGl0KDApO30sLEFDX01TR19FUlJPUihDYW4ndCBydW4gdGhlIGNvbXBpbGVyIC0gaW50ZXJuYWwgZXJyb3IuIFNvcnJ5LikpCistCisgRVRDU0NSRUVOUkM9CisgQUNfTVNHX0NIRUNLSU5HKGZvciB0aGUgZ2xvYmFsIHNjcmVlbnJjIGZpbGUpCisgQUNfQVJHX1dJVEgoc3lzLXNjcmVlbnJjLCBbICAtLXdpdGgtc3lzLXNjcmVlbnJjPXBhdGggdG8gdGhlIGdsb2JhbCBzY3JlZW5yYyBmaWxlXSwgWyBFVENTQ1JFRU5SQz0iJHt3aXRodmFsfSIgXSkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9Ta2lwLWhvc3QtZmlsZS1zeXN0ZW0tY2hlY2tzLXdoZW4tY3Jvc3MtY29tcGlsaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9Ta2lwLWhvc3QtZmlsZS1zeXN0ZW0tY2hlY2tzLXdoZW4tY3Jvc3MtY29tcGlsaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZTU1YTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL1NraXAtaG9zdC1maWxlLXN5c3RlbS1jaGVja3Mtd2hlbi1jcm9zcy1jb21waWxpbmcucGF0Y2gKQEAgLTAsMCArMSwxMzUgQEAKK0Zyb20gZDBiMjBlNGNhY2M2MGFkNjJhMjE1MGNlMDczODhjYjVhMjVjMjA0MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBGcmksIDcgQXVnIDIwMTUgMTE6MDk6MDEgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzRdIFNraXAgaG9zdCBmaWxlIHN5c3RlbSBjaGVja3Mgd2hlbiBjcm9zcy1jb21waWxpbmcKKworTW9kaWZpZWQgZnJvbSBwYXRjaCBieSBNYWFydGVuIHRlciBIdXVybmUuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9idWdzLz80MzIyM10KKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDIzICsrKysrKysrKysrKysrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGNlODlmNTYuLmRjOTI4YWUgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTg1LDcgKzg1LDcgQEAgQUNfQVJHX0VOQUJMRShzb2NrZXQtZGlyLAorIGRubAorIGRubCAgICAqKioqICBzcGVjaWFsIHVuaXggdmFyaWFudHMgICoqKioKKyBkbmwKKy1pZiB0ZXN0IC1uICIkSVNDIjsgdGhlbgorK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm8gJiYgdGVzdCAtbiAiJElTQyIgOyB0aGVuCisgICBBQ19ERUZJTkUoSVNDKSBMSUJTPSIkTElCUyAtbGluZXQiCisgZmkKKyAKK0BAIC05NiwxMCArOTYsMTEgQEAgZG5sIEFDX0RFRklORShPU0YxKQkjIHRoaXMgZGlzYWJsZXMgTUlQUyBhZ2Fpbi4uLi4KKyBkbmwgZmkKKyBkbmwgZmkKKyAKKy1pZiB0ZXN0IC1mIC9zeXNWNjggOyB0aGVuCisraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyAmJiB0ZXN0IC1mIC9zeXNWNjggOyB0aGVuCisgQUNfREVGSU5FKHN5c1Y2OCkKKyBmaQorIAorK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm8gOyB0aGVuCisgQUNfQ0hFQ0tJTkcoZm9yIE1JUFMpCisgaWYgdGVzdCAtZiAvbGliL2xpYm1sZC5hIHx8IHRlc3QgLWYgL3Vzci9saWIvbGlibWxkLmEgfHwgdGVzdCAtZiAvdXNyL2xpYi9jbXBscnMvY2MvbGlibWxkLmE7IHRoZW4KKyBvbGRsaWJzPSIkTElCUyIKK0BAIC0xMjMsNiArMTI0LDcgQEAgQUNfREVGSU5FKFVTRV9XQUlUMikgTElCUz0iJExJQlMgLWxic2QiIDsgQ0M9IiRDQyAtSS91c3IvaW5jbHVkZS9ic2QiCisgKSkKKyBmaQorIGZpCisrZmkKKyAKKyAKKyBBQ19DSEVDS0lORyhmb3IgVWx0cml4KQorQEAgLTEzMiw3ICsxMzQsNyBAQCBBQ19FR1JFUF9DUFAoeWVzLAorICNlbmRpZgorIF0sIFVMVFJJWD0xKQorIAorLWlmIHRlc3QgLWYgL3Vzci9saWIvbGlicHlyLmEgOyB0aGVuCisraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyAmJiB0ZXN0IC1mIC91c3IvbGliL2xpYnB5ci5hIDsgdGhlbgorIG9sZGxpYnM9IiRMSUJTIgorIExJQlM9IiRMSUJTIC1scHlyIgorIEFDX0NIRUNLSU5HKFB5cmFtaWQgT1NYKQorQEAgLTY3OSwxNyArNjgxLDIxIEBAIEFDX1RSWV9MSU5LKGV4dGVybiBzaG9ydCBvc3BlZWQ7LG9zcGVlZD01OywsQUNfREVGSU5FKE5FRURfT1NQRUVEKSkKKyBkbmwKKyBkbmwgICAgKioqKiAgUFRZIHNwZWNpZmljIHRoaW5ncyAgKioqKgorIGRubAorK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm8gOyB0aGVuCisgQUNfQ0hFQ0tJTkcoZm9yIC9kZXYvcHRjKQorIGlmIHRlc3QgLXIgL2Rldi9wdGM7IHRoZW4KKyBBQ19ERUZJTkUoSEFWRV9ERVZfUFRDKQorIGZpCisrZmkKKyAKKytpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vIDsgdGhlbgorIEFDX0NIRUNLSU5HKGZvciBTVlI0IHB0eXMpCisgc3lzdnI0cHR5cz0KKyBpZiB0ZXN0IC1jIC9kZXYvcHRteCA7IHRoZW4KKyBBQ19UUllfTElOSyhbXSxbcHRzbmFtZSgwKTtncmFudHB0KDApO3VubG9ja3B0KDApO10sW0FDX0RFRklORShIQVZFX1NWUjRfUFRZUykKKyBzeXN2cjRwdHlzPTFdKQorIGZpCisrZmkKKyAKKyBBQ19DSEVDS19GVU5DUyhnZXRwdCkKKyAKK0BAIC02OTksNiArNzA1LDcgQEAgQUNfQ0hFQ0tfRlVOQ1Mob3BlbnB0eSwsCisgW0FDX0NIRUNLX0xJQih1dGlsLG9wZW5wdHksIFtBQ19ERUZJTkUoSEFWRV9PUEVOUFRZKV0gW0xJQlM9IiRMSUJTIC1sdXRpbCJdKV0pCisgZmkKKyAKKytpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vIDsgdGhlbgorIEFDX0NIRUNLSU5HKGZvciBwdHlyYW5nZXMpCisgaWYgdGVzdCAtZCAvZGV2L3B0eW0gOyB0aGVuCisgcGRpcj0nL2Rldi9wdHltJworQEAgLTcyMiw2ICs3MjksNyBAQCBwMT1gZWNobyAkcHR5cyB8IHRyICcgJyAnXDAxMicgfCBzZWQgLWUgJ3MvXi4qXCguXCkkL1wxL2cnICB8IHNvcnQgLXUgfCB0ciAtZCAnXAorIEFDX0RFRklORV9VTlFVT1RFRChQVFlSQU5HRTAsIiRwMCIpCisgQUNfREVGSU5FX1VOUVVPVEVEKFBUWVJBTkdFMSwiJHAxIikKKyBmaQorK2ZpCisgCisgZG5sICAgICoqKiogIHB0eSBtb2RlL2dyb3VwIGhhbmRsaW5nICoqKioKKyBkbmwKK0BAIC04NjksMTQgKzg3NywxNiBAQCBmaQorIGRubAorIGRubCAgICAqKioqICBsb2FkYXYgICoqKioKKyBkbmwKKytpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vIDsgdGhlbgorIEFDX0NIRUNLSU5HKGZvciBsaWJ1dGlsKHMpKQorIHRlc3QgLWYgL3Vzci9saWIvbGlidXRpbHMuYSAmJiBMSUJTPSIkTElCUyAtbHV0aWxzIgorIHRlc3QgLWYgL3Vzci9saWIvbGlidXRpbC5hICYmIExJQlM9IiRMSUJTIC1sdXRpbCIKKytmaQorIAorIEFDX0NIRUNLSU5HKGdldGxvYWRhdmcpCisgQUNfVFJZX0xJTksoLFtnZXRsb2FkYXZnKChkb3VibGUgKikwLCAwKTtdLAorIEFDX0RFRklORShMT0FEQVZfR0VUTE9BREFWRykgbG9hZD0xLAorLWlmIHRlc3QgLWYgL3Vzci9saWIvbGlia3ZtLmEgOyB0aGVuCisraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyAmJiB0ZXN0IC1mIC91c3IvbGliL2xpYmt2bS5hIDsgdGhlbgorIG9saWJzPSIkTElCUyIKKyBMSUJTPSIkTElCUyAtbGt2bSIKKyBBQ19DSEVDS0lORyhnZXRsb2FkYXZnIHdpdGggLWxrdm0pCitAQCAtMTA5NCwxMyArMTEwNCwxOCBAQCBkbmwgICAgKioqKiAgbGlicmFyaWVzICAqKioqCisgZG5sCisgCisgQUNfQ0hFQ0tJTkcoZm9yIGNyeXB0IGFuZCBzZWMgbGlicmFyaWVzKQorK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm8gOyB0aGVuCisgdGVzdCAtZiAvbGliL2xpYmNyeXB0X2QuYSB8fCB0ZXN0IC1mIC91c3IvbGliL2xpYmNyeXB0X2QuYSAmJiBMSUJTPSIkTElCUyAtbGNyeXB0X2QiCisrZmkKKyBvbGRsaWJzPSIkTElCUyIKKyBMSUJTPSIkTElCUyAtbGNyeXB0IgorIEFDX0NIRUNLSU5HKGNyeXB0KQorIEFDX1RSWV9MSU5LKCwsLExJQlM9IiRvbGRsaWJzIikKKytpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vIDsgdGhlbgorIHRlc3QgLWYgL2xpYi9saWJzZWMuYSB8fCB0ZXN0IC1mIC91c3IvbGliL2xpYnNlYy5hICYmIExJQlM9IiRMSUJTIC1sc2VjIgorIHRlc3QgLWYgL2xpYi9saWJzaGFkb3cuYSB8fCB0ZXN0IC1mIC91c3IvbGliL2xpYnNoYWRvdy5hICYmIExJQlM9IiRMSUJTIC1sc2hhZG93IgorK2ZpCisrCisgb2xkbGlicz0iJExJQlMiCisgTElCUz0iJExJQlMgLWxzdW4iCisgQUNfQ0hFQ0tJTkcoSVJJWCBzdW4gbGlicmFyeSkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9maXgtcGFyYWxsZWwtbWFrZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vZml4LXBhcmFsbGVsLW1ha2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBjYWY1ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vZml4LXBhcmFsbGVsLW1ha2UucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVGhpcyBmaXhlcyB0aGUgcGFyYWxsZWwgbWFrZSBpbnN0YWxsIGZhaWx1cmUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IHNjcmVlbi00LjAuMy9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNjcmVlbi00LjAuMy5vcmlnL01ha2VmaWxlLmluCisrKysgc2NyZWVuLTQuMC4zL01ha2VmaWxlLmluCitAQCAtNzAsNyArNzAsNyBAQCBzY3JlZW46ICQoT0ZJTEVTKQorIC5jLm86CisgCSQoQ0MpIC1jIC1JLiAtSSQoc3JjZGlyKSAkKE1fQ0ZMQUdTKSAkKERFRlMpICQoT1BUSU9OUykgJChDRkxBR1MpICQ8CisgCistaW5zdGFsbF9iaW46IC52ZXJzaW9uIHNjcmVlbgorK2luc3RhbGxfYmluOiAudmVyc2lvbiBzY3JlZW4gaW5zdGFsbGRpcnMKKyAJLWlmIFsgLWYgJChERVNURElSKSQoYmluZGlyKS8kKFNDUkVFTikgXSAmJiBbICEgLWYgJChERVNURElSKSQoYmluZGlyKS8kKFNDUkVFTikub2xkIF07IFwKKyAJCXRoZW4gbXYgJChERVNURElSKSQoYmluZGlyKS8kKFNDUkVFTikgJChERVNURElSKSQoYmluZGlyKS8kKFNDUkVFTikub2xkOyBmaQorIAkkKElOU1RBTExfUFJPR1JBTSkgc2NyZWVuICQoREVTVERJUikkKGJpbmRpcikvJChTQ1JFRU4pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL3NjcmVlbi5wYW0gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL3NjcmVlbi5wYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY2NTdmYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vc2NyZWVuLnBhbQpAQCAtMCwwICsxLDIgQEAKKyMlUEFNLTEuMAorYXV0aCAgICAgICBpbmNsdWRlICAgICAgY29tbW9uLWF1dGgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW5fNC4zLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuXzQuMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNDU3YWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuXzQuMy4xLmJiCkBAIC0wLDAgKzEsNTIgQEAKK1NVTU1BUlkgPSAiTXVsdGlwbGV4aW5nIHRlcm1pbmFsIG1hbmFnZXIiCitERVNDUklQVElPTiA9ICJTY3JlZW4gaXMgYSBmdWxsLXNjcmVlbiB3aW5kb3cgbWFuYWdlciBcCit0aGF0IG11bHRpcGxleGVzIGEgcGh5c2ljYWwgdGVybWluYWwgYmV0d2VlbiBzZXZlcmFsIFwKK3Byb2Nlc3NlcywgdHlwaWNhbGx5IGludGVyYWN0aXZlIHNoZWxscy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvc2NyZWVuLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvP2Z1bmM9YWRkaXRlbSZncm91cD1zY3JlZW4iCisKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zY3JlZW4uaDtlbmRsaW5lPTI2O21kNT0zOTcxMTQyOTg5Mjg5YTgxOThhNTQ0MjIwNzAzYzJiZiIKKworREVQRU5EUyA9ICJuY3Vyc2VzIFwKKyAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdsaWJwYW0nLCAnJywgZCl9IgorUkRFUEVORFNfJHtQTn0gPSAiYmFzZS1maWxlcyIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3NjcmVlbi9zY3JlZW4tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1wYXJhbGxlbC1tYWtlLnBhdGNoIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnZmlsZTovL3NjcmVlbi5wYW0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgZmlsZTovL1JlbW92ZS1yZWR1bmRhbnQtY29tcGlsZXItc2FuaXR5LWNoZWNrcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9Qcm92aWRlLWNyb3NzLWNvbXBpbGUtYWx0ZXJuYXRpdmVzLWZvci1BQ19UUllfUlVOLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL1NraXAtaG9zdC1maWxlLXN5c3RlbS1jaGVja3Mtd2hlbi1jcm9zcy1jb21waWxpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQXZvaWQtbWlzLWlkZW50aWZ5aW5nLXN5c3RlbXMtYXMtU1ZSNC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWZpeC1mb3ItbXVsdGlqb2ItYnVpbGQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1jb21tLmgtbm93LWRlcGVuZHMtb24tdGVybS5oLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1YmIzYjBmZjI2NzRlMjkzNzhjMzFhZDM0MTExNzBhZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmYTQwNDlmOGFlZTI4M2RlNjJlMjgzZDQyN2YyY2ZkMzVkNmMzNjliNDBmN2Y0NWY5NDdkYmZkOTE1Njk5ZDYzIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW3V0ZW1wdGVyXSA9ICJhY19jdl9oZWFkZXJfdXRlbXB0ZXJfaD15ZXMsYWNfY3ZfaGVhZGVyX3V0ZW1wdGVyX2g9bm8sbGlidXRlbXB0ZXIsIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXB0eS1tb2RlPTA2MjAgLS13aXRoLXB0eS1ncm91cD01IFwKKyAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJy0tZW5hYmxlLXBhbScsICctLWRpc2FibGUtcGFtJywgZCl9IgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIgPSAicGFtIiBdOyB0aGVuCisJCWluc3RhbGwgLUQgLW0gNjQ0ICR7V09SS0RJUn0vc2NyZWVuLnBhbSAke0R9LyR7c3lzY29uZmRpcn0vcGFtLmQvc2NyZWVuCisJZmkKK30KKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlncmVwIC1xICJeJHtiaW5kaXJ9L3NjcmVlbiQiICREJHtzeXNjb25mZGlyfS9zaGVsbHMgfHwgZWNobyAke2JpbmRpcn0vc2NyZWVuID4+ICREJHtzeXNjb25mZGlyfS9zaGVsbHMKK30KKworcGtnX3Bvc3RybV8ke1BOfSAoKSB7CisJcHJpbnRmICIkKGdyZXAgLXYgIl4ke2JpbmRpcn0vc2NyZWVuJCIgJEQke3N5c2NvbmZkaXJ9L3NoZWxscylcbiIgPiAkRCR7c3lzY29uZmRpcn0vc2hlbGxzCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL01ha2V2YXJzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjEuMi9NYWtldmFycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjA5ZjUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjEuMi9NYWtldmFycwpAQCAtMCwwICsxLDI1IEBACisjIE1ha2VmaWxlIHZhcmlhYmxlcyBmb3IgUE8gZGlyZWN0b3J5IGluIGFueSBwYWNrYWdlIHVzaW5nIEdOVSBnZXR0ZXh0LgorCisjIFVzdWFsbHkgdGhlIG1lc3NhZ2UgZG9tYWluIGlzIHRoZSBzYW1lIGFzIHRoZSBwYWNrYWdlIG5hbWUuCitET01BSU4gPSAkKFBBQ0tBR0UpCisKKyMgVGhlc2UgdHdvIHZhcmlhYmxlcyBkZXBlbmQgb24gdGhlIGxvY2F0aW9uIG9mIHRoaXMgZGlyZWN0b3J5Lgorc3ViZGlyID0gcG8KK3RvcF9idWlsZGRpciA9IC4uCisKKyMgVGhlc2Ugb3B0aW9ucyBnZXQgcGFzc2VkIHRvIHhnZXR0ZXh0LgorWEdFVFRFWFRfT1BUSU9OUyA9IC0ta2V5d29yZD1fIC0ta2V5d29yZD1OXworCisjIFRoaXMgaXMgdGhlIGNvcHlyaWdodCBob2xkZXIgdGhhdCBnZXRzIGluc2VydGVkIGludG8gdGhlIGhlYWRlciBvZiB0aGUKKyMgJChET01BSU4pLnBvdCBmaWxlLiAgU2V0IHRoaXMgdG8gdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIHN1cnJvdW5kaW5nCisjIHBhY2thZ2UuICAoTm90ZSB0aGF0IHRoZSBtc2dzdHIgc3RyaW5ncywgZXh0cmFjdGVkIGZyb20gdGhlIHBhY2thZ2UncworIyBzb3VyY2VzLCBiZWxvbmcgdG8gdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIHBhY2thZ2UuKSAgVHJhbnNsYXRvcnMgYXJlCisjIGV4cGVjdGVkIHRvIHRyYW5zZmVyIHRoZSBjb3B5cmlnaHQgZm9yIHRoZWlyIHRyYW5zbGF0aW9ucyB0byB0aGlzIHBlcnNvbgorIyBvciBlbnRpdHksIG9yIHRvIGRpc2NsYWltIHRoZWlyIGNvcHlyaWdodC4gIFRoZSBlbXB0eSBzdHJpbmcgc3RhbmRzIGZvcgorIyB0aGUgcHVibGljIGRvbWFpbjsgaW4gdGhpcyBjYXNlIHRoZSB0cmFuc2xhdG9ycyBhcmUgZXhwZWN0ZWQgdG8gZGlzY2xhaW0KKyMgdGhlaXIgY29weXJpZ2h0LgorQ09QWVJJR0hUX0hPTERFUiA9IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgaXMgdGhlIGxpc3Qgb2YgbG9jYWxlIGNhdGVnb3JpZXMsIGJleW9uZCBMQ19NRVNTQUdFUywgZm9yIHdoaWNoIHRoZQorIyBtZXNzYWdlIGNhdGFsb2dzIHNoYWxsIGJlIHVzZWQuICBJdCBpcyB1c3VhbGx5IGVtcHR5LgorRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVMgPQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjEuMi9maXhfcmV0dXJuX3R5cGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL2ZpeF9yZXR1cm5fdHlwZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzY1NTFlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjEuMi9maXhfcmV0dXJuX3R5cGUucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0NoYW5nZSB0aGUgZ2V0bGluZSByZXR1cm4gdHlwZSB0byBtYXRjaCBpdHMgZGVjbGFyYXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisKK2RpZmYgLXVyTiBzZWQtNC4xLjItb3JpZy9saWIvZ2V0bGluZS5jIHNlZC00LjEuMi9saWIvZ2V0bGluZS5jCistLS0gc2VkLTQuMS4yLW9yaWcvbGliL2dldGxpbmUuYwkyMDEwLTA4LTMxIDA4OjQ3OjUwLjA3MDA5NDAyNCArMDgwMAorKysrIHNlZC00LjEuMi9saWIvZ2V0bGluZS5jCTIwMTAtMDgtMzEgMDg6NDg6NTAuOTgyMTc4MTcyICswODAwCitAQCAtMzAsNyArMzAsNyBAQAorICAgIG5lY2Vzc2FyeS4gIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgKG5vdCBpbmNsdWRpbmcgdGhlCisgICAgbnVsbCB0ZXJtaW5hdG9yKSwgb3IgLTEgb24gZXJyb3Igb3IgRU9GLiAgKi8KKyAKKy1zaXplX3QKKytzc2l6ZV90CisgZ2V0bGluZSAobGluZXB0ciwgbiwgc3RyZWFtKQorICAgICAgY2hhciAqKmxpbmVwdHI7CisgICAgICBzaXplX3QgKm47CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL3NlZC00LjEuMl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL3NlZC00LjEuMl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA1OTQwNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4xLjIvc2VkLTQuMS4yX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDM3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworYXV0b21ha2UtMS4xMi54IGhhcyBkZXByZWNhdGVkIHVzZSBvZiBAbWtkaXJfcEAsIGZpeCB0aGUgaXNzdWUgYnkgdXNpbmcgQE1LRElSX1BAIGluc3RlYWQuCisKK0F2b2lkIHRoaXMgYnVpbGQgaXNzdWU6Cit8IG1ha2VbMV06IG1rZGlyX3BAOiBDb21tYW5kIG5vdCBmb3VuZAorfCBtYWtlWzFdOiAqKiogW2luc3RhbGwtZGF0YS15ZXNdIEVycm9yIDEyNworCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNy8xMworCitJbmRleDogc2VkLTQuMS4yL2ludGwvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzZWQtNC4xLjIub3JpZy9pbnRsL01ha2VmaWxlLmluCisrKysgc2VkLTQuMS4yL2ludGwvTWFrZWZpbGUuaW4KK0BAIC00MCw3ICs0MCw3IEBAIHN1YmRpciA9IGludGwKKyBJTlNUQUxMID0gQElOU1RBTExACisgSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKKyBta2luc3RhbGxkaXJzID0gJChta2Rpcl9wKQorLW1rZGlyX3AgPSBAbWtkaXJfcEAKKytta2Rpcl9wID0gQE1LRElSX1BACisgCisgbCA9IEBJTlRMX0xJQlRPT0xfU1VGRklYX1BSRUZJWEAKKyAKK0luZGV4OiBzZWQtNC4xLjIvcG8vTWFrZWZpbGUuaW4uaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzZWQtNC4xLjIub3JpZy9wby9NYWtlZmlsZS5pbi5pbgorKysrIHNlZC00LjEuMi9wby9NYWtlZmlsZS5pbi5pbgorQEAgLTI5LDcgKzI5LDcgQEAgZ2V0dGV4dHNyY2RpciA9ICQoZGF0YWRpcikvZ2V0dGV4dC9wbworIElOU1RBTEwgPSAvc3J2L2hvbWUvbml0aW4vYnVpbGRzMi9idWlsZDAvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvYmluL2luc3RhbGwgLWMKKyBJTlNUQUxMX0RBVEEgPSAke0lOU1RBTEx9IC1tIDY0NAorIG1raW5zdGFsbGRpcnMgPSAkKG1rZGlyX3ApCistbWtkaXJfcCA9IEBta2Rpcl9wQAorK21rZGlyX3AgPSBATUtESVJfUEAKKyAKKyBDQyA9IGk1ODYtcG9reS1saW51eC1nY2MgIC1tMzIgICAtbWFyY2g9aTU4NiAtLXN5c3Jvb3Q9L3Nydi9ob21lL25pdGluL2J1aWxkczIvYnVpbGQwL3RtcC9zeXNyb290cy9xZW11eDg2CisgR01TR0ZNVCA9IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMyL2J1aWxkMC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9iaW4vbXNnZm10CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExYTRiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4yLjIvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZ251bGliLm1rIGIvbGliL2dudWxpYi5taworaW5kZXggZTFkNzRkYi4uYzBlOTJkZCAxMDA2NDQKKy0tLSBhL2xpYi9nbnVsaWIubWsKKysrKyBiL2xpYi9nbnVsaWIubWsKK0BAIC0xODgyLDcgKzE4ODIsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4yLjIvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMGY2MjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yL3J1bi1wdGVzdApAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9zaAorCittYWtlIC1DIHRlc3RzdWl0ZSAtayBydW50ZXN0LVRFU1RTCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yL3NlZC1hZGQtcHRlc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yL3NlZC1hZGQtcHRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA1ZThiNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4yLjIvc2VkLWFkZC1wdGVzdC5wYXRjaApAQCAtMCwwICsxLDY2IEBACitzZWQ6IGFkZCBwdGVzdAorCitwdGVzdCBuZWVkcyBidWlsZHRlc3QtVEVTVFMgYW5kIHJ1bnRlc3QtVEVTVFMgdGFyZ2V0cy4KK3NlcmlhbC10ZXN0cyBpcyByZXF1aXJlZCB0byBnZW5lcmF0ZSB0aG9zZSB0YXJnZXRzLgorCitBbmQgZml4IGZvbGxvd2luZyBlcnJvciBhZnRlciBhZGQgc2VyaWFsLXRlc3RzLgorCitbc25pcF0KK2hlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIC4uL3NlZC9zZWQKK21ha2VbMl06ICoqKiBbc2VkLjFdIEVycm9yIDIKK1tzbmlwXQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgfCAgICAyICstCisgZG9jL01ha2VmaWxlLmFtICAgICAgIHwgICAgMiArLQorIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbSB8ICAgIDYgKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDlkMzNlYzkuLjRmMGM1MzIgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTQsNyArNCw3IEBAIEFDX0NPTkZJR19BVVhfRElSKGJ1aWxkLWF1eCkKKyBBQ19DT05GSUdfU1JDRElSKFtzZWQvc2VkLmNdKQorIEFNX0NPTkZJR19IRUFERVIoY29uZmlnLmg6Y29uZmlnX2guaW4pCisgQUNfUFJFUkVRKDIuNjApCistQU1fSU5JVF9BVVRPTUFLRQorK0FNX0lOSVRfQVVUT01BS0UoW3NlcmlhbC10ZXN0c10pCisgCisgU0VEX0ZFQVRVUkVfVkVSU0lPTj00LjIuMgorIEFDX0RFRklORV9VTlFVT1RFRChTRURfRkVBVFVSRV9WRVJTSU9OLCAiJFNFRF9GRUFUVVJFX1ZFUlNJT04iLAorZGlmZiAtLWdpdCBhL2RvYy9NYWtlZmlsZS5hbSBiL2RvYy9NYWtlZmlsZS5hbQoraW5kZXggYWY2OTc1Yy4uNmZkOGM5YSAxMDA2NDQKKy0tLSBhL2RvYy9NYWtlZmlsZS5hbQorKysrIGIvZG9jL01ha2VmaWxlLmFtCitAQCAtMjUsNyArMjUsNyBAQCAkKHNyY2Rpcikvcy10ZXhpOiBzZWQtaW4udGV4aSAkKHNyY2RpcikvZ3JvdXBpZnkuc2VkCisgCWZpCisgCWVjaG8gc3RhbXAgPiAkKHNyY2Rpcikvcy10ZXhpCisgCistc2VkLjE6ICQodG9wX3NyY2Rpcikvc2VkL3NlZC5jICQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjICQoc3JjZGlyKS9zZWQueAorK19zZWQuMTogJCh0b3Bfc3JjZGlyKS9zZWQvc2VkLmMgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMgJChzcmNkaXIpL3NlZC54CisgCSQoSEVMUDJNQU4pIC0tbmFtZSAic3RyZWFtIGVkaXRvciBmb3IgZmlsdGVyaW5nIGFuZCB0cmFuc2Zvcm1pbmcgdGV4dCIgXAorIAkgIC1wIHNlZCAtLWluY2x1ZGUgJChzcmNkaXIpL3NlZC54IC1vICQoc3JjZGlyKS9zZWQuMSAkKFNFRCkgCisgCitkaWZmIC0tZ2l0IGEvdGVzdHN1aXRlL01ha2VmaWxlLmFtIGIvdGVzdHN1aXRlL01ha2VmaWxlLmFtCitpbmRleCBkODBlNzJjLi5iMDVmMDFlIDEwMDY0NAorLS0tIGEvdGVzdHN1aXRlL01ha2VmaWxlLmFtCisrKysgYi90ZXN0c3VpdGUvTWFrZWZpbGUuYW0KK0BAIC05OSw1ICs5OSwxMSBAQCBFWFRSQV9ESVNUID0gXAorICMgYXV0b21ha2UgbWFrZXMgYGNoZWNrJyBkZXBlbmQgb24gJChURVNUUykuICBEZWNsYXJlCisgIyBkdW1teSB0YXJnZXRzIGZvciAkKFRFU1RTKSBzbyB0aGF0IG1ha2UgZG9lcyBub3QgY29tcGxhaW4uCisgCisraW5zdGFsbC1wdGVzdDoKKysJY2QgJChCVUlMRERJUik7IHRhciAtY2YgLSAkKFRFU1RESVIpIC0tZXhjbHVkZSAqLm8gfCAoIGNkICQoREVTVERJUikgJiYgdGFyIC14ZiAtICkKKysJZm9yIGkgaW4gJChFWFRSQV9ESVNUKSB0c3QtcmVnZXgyLmM7IGRvIGluc3RhbGwgJChzcmNkaXIpLyQkaSAkKERFU1RESVIpLyQoVEVTVERJUik7IGRvbmUKKysJc2VkIC1lICdzL15NYWtlZmlsZTovX01ha2VmaWxlOi8nIC1lICdzL15zcmNkaXIgPSBcKC4qXCkvc3JjZGlyID0gLi8nIC1lICdzL2Jhc2gvc2gvJyAtaSAkKERFU1RESVIpLyQoVEVTVERJUikvTWFrZWZpbGUKKysJZm9yIGkgaW4gYGdyZXAgLXJsICIuLi9zZWQvc2VkIiAkKERFU1RESVIpLyQoVEVTVERJUilgOyBkbyBzZWQgLWUgJ3MvLi5cL3NlZFwvc2VkL3NlZC8nIC1pICQkaTsgZG9uZQorKworIC5QSE9OWTogJChTRURURVNUUykKKyAkKFNFRFRFU1RTKToKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkXzQuMS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZF80LjEuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGUzYTUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZF80LjEuMi5iYgpAQCAtMCwwICsxLDM1IEBACitTVU1NQVJZID0gIlN0cmVhbSBFRGl0b3IgKHRleHQgZmlsdGVyaW5nIHV0aWxpdHkpIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3NlZC8iCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NlZC9zZWQuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTE3O21kNT1lMDBmZmQxODM3ZjI5ODQzOWEyMTRmZDE5N2Y2YTQwNyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK1BSID0gInI3IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vc2VkL3NlZC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4X3JldHVybl90eXBlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NlZC00LjEuMl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vTWFrZXZhcnMiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5MjhmMGUwNjQyMmY0MTQwOTE5MTc0MDFmMWE4MzRkMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MzhlODM3YmE3NjVkNWRhMGEzMGM5OGI1N2MyOTUzY2VjZWE5NjgyNzg4MmY1OTQ2MTJhY2FjZTkzY2VlZWFiIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgZ2V0dGV4dAorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJY3AgJHtXT1JLRElSfS9NYWtldmFycyAke1N9L3BvLworfQorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJaWYgWyAhICR7RH0ke2JpbmRpcn0gLWVmICR7RH0ke2Jhc2VfYmluZGlyfSBdOyB0aGVuCisJICAgIG12ICR7RH0ke2JpbmRpcn0vc2VkICR7RH0ke2Jhc2VfYmluZGlyfS9zZWQKKwkgICAgcm1kaXIgJHtEfSR7YmluZGlyfS8KKwlmaQorfQorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJzZWQiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc2VkXSA9ICIke2Jhc2VfYmluZGlyfS9zZWQiCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWRfNC4yLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkXzQuMi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYTdkOGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkXzQuMi4yLmJiCkBAIC0wLDAgKzEsNDYgQEAKK1NVTU1BUlkgPSAiU3RyZWFtIEVEaXRvciAodGV4dCBmaWx0ZXJpbmcgdXRpbGl0eSkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvc2VkLyIKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjI3ZGVmZTFlOTZjMmUxZWNkNGUwYzliZTg5Njc5NDkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2VkL3NlZC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MTc7bWQ1PTc2N2FiM2EwNmQ3NTg0ZjZmZDA0NjlhYmFlYzQ0MTJmIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vc2VkL3NlZC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vc2VkLWFkZC1wdGVzdC5wYXRjaCBcCisJICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjQxMTFkZTRmYWEzYjk4NDhhMDY4NmIyZjI2MGM1MDU2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZlYTBhOTRkNGI2MDU4OTRmM2UyZDU1NzJlM2Y5NmU0NDEzYmNhZDNhMDg1YWFlNzM2N2MyY2YwNzkwOGIyZmYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcyBnZXR0ZXh0IHB0ZXN0CitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibWFrZSAke1BOfSIKK1JSRUNPTU1FTkRTXyR7UE59LXB0ZXN0X2FwcGVuZF9saWJjLWdsaWJjID0gIiBsb2NhbGUtYmFzZS1ydS1ydSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1hY2wgXAorICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQVEVTVF9FTkFCTEVEJywgJzEnLCAnLS1lbmFibGUtcmVnZXgtdGVzdHMnLCAnJywgZCl9IgorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJaWYgWyAhICR7RH0ke2JpbmRpcn0gLWVmICR7RH0ke2Jhc2VfYmluZGlyfSBdOyB0aGVuCisJICAgIG12ICR7RH0ke2JpbmRpcn0vc2VkICR7RH0ke2Jhc2VfYmluZGlyfS9zZWQKKwkgICAgcm1kaXIgJHtEfSR7YmluZGlyfS8KKwlmaQorfQorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJzZWQiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc2VkXSA9ICIke2Jhc2VfYmluZGlyfS9zZWQiCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK1RFU1RESVIgPSAidGVzdHN1aXRlIgorCitkb19jb21waWxlX3B0ZXN0KCkgeworCW9lX3J1bm1ha2UgLUMgJHtURVNURElSfSBidWlsZHRlc3QtVEVTVFMKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIC1DICR7VEVTVERJUn0gaW5zdGFsbC1wdGVzdCBCVUlMRERJUj0ke0J9IERFU1RESVI9JHtEfSR7UFRFU1RfUEFUSH0gVEVTVERJUj0ke1RFU1RESVJ9Cit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy8wMDAxLURvLW5vdC1yZWFkLWxvZ2luLmRlZnMtYmVmb3JlLWRvaW5nLWNocm9vdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy8wMDAxLURvLW5vdC1yZWFkLWxvZ2luLmRlZnMtYmVmb3JlLWRvaW5nLWNocm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjhiOTVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzLzAwMDEtRG8tbm90LXJlYWQtbG9naW4uZGVmcy1iZWZvcmUtZG9pbmctY2hyb290LnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gMTcwYzI1YzhlMGI1YzNkYzI2MTVkMWRiOTRjOGQyNGExM2ZmOTliZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgorRGF0ZTogVGh1LCAxMSBTZXAgMjAxNCAxNToxMToyMyArMDIwMAorU3ViamVjdDogW1BBVENIXSBEbyBub3QgcmVhZCBsb2dpbi5kZWZzIGJlZm9yZSBkb2luZyBjaHJvb3QoKQorCitJZiAidXNlcmFkZCAtLXJvb3QgPHJvb3Q+IC4uLiIgd2FzIHVzZWQsIHRoZSBsb2dpbi5kZWZzIGZpbGUgd291bGQgc3RpbGwKK2JlIHJlYWQgZnJvbSAvZXRjL2xvZ2luLmRlZnMgaW5zdGVhZCBvZiA8cm9vdD4vZXRjL2xvZ2luLmRlZnMuIFRoaXMgd2FzCitkdWUgdG8gZ2V0ZGVmX3Vsb25nKCkgYmVpbmcgY2FsbGVkIGJlZm9yZSBwcm9jZXNzX3Jvb3RfZmxhZygpLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cDovL2xpc3RzLmFsaW90aC5kZWJpYW4ub3JnL3BpcGVybWFpbC9wa2ctc2hhZG93LWRldmVsLzIwMTQtU2VwdGVtYmVyLzAxMDQ0Ni5odG1sXQorCitTaWduZWQtb2ZmLWJ5OiBQZXRlciBLamVsbGVyc3RlZHQgPHBldGVyLmtqZWxsZXJzdGVkdEBheGlzLmNvbT4KKy0tLQorIHNyYy91c2VyYWRkLmMgfCA4ICsrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy91c2VyYWRkLmMgYi9zcmMvdXNlcmFkZC5jCitpbmRleCBhOGExZjc2Li5lMWViZjUwIDEwMDY0NAorLS0tIGEvc3JjL3VzZXJhZGQuYworKysrIGIvc3JjL3VzZXJhZGQuYworQEAgLTE5OTMsOSArMTk5MywxMSBAQCBpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICNlbmRpZgkJCQkvKiBVU0VfUEFNICovCisgI2VuZGlmCQkJCS8qIEFDQ1RfVE9PTFNfU0VUVUlEICovCisgCisrI2lmZGVmIEVOQUJMRV9TVUJJRFMKKyAJLyogTmVlZGVkIGZvciB1c2VybnMgY2hlY2sgKi8KKy0JdWlkX3QgdWlkX21pbiA9ICh1aWRfdCkgZ2V0ZGVmX3Vsb25nICgiVUlEX01JTiIsIDEwMDBVTCk7CistCXVpZF90IHVpZF9tYXggPSAodWlkX3QpIGdldGRlZl91bG9uZyAoIlVJRF9NQVgiLCA2MDAwMFVMKTsKKysJdWlkX3QgdWlkX21pbjsKKysJdWlkX3QgdWlkX21heDsKKysjZW5kaWYKKyAKKyAJLyoKKyAJICogR2V0IG15IG5hbWUgc28gdGhhdCBJIGNhbiB1c2UgaXQgdG8gcmVwb3J0IGVycm9ycy4KK0BAIC0yMDI2LDYgKzIwMjgsOCBAQCBpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAlpc19zaGFkb3dfZ3JwID0gc2dyX2ZpbGVfcHJlc2VudCAoKTsKKyAjZW5kaWYKKyAjaWZkZWYgRU5BQkxFX1NVQklEUworKwl1aWRfbWluID0gKHVpZF90KSBnZXRkZWZfdWxvbmcgKCJVSURfTUlOIiwgMTAwMFVMKTsKKysJdWlkX21heCA9ICh1aWRfdCkgZ2V0ZGVmX3Vsb25nICgiVUlEX01BWCIsIDYwMDAwVUwpOworIAlpc19zdWJfdWlkID0gc3ViX3VpZF9maWxlX3ByZXNlbnQgKCkgJiYgIXJmbGcgJiYKKyAJICAgICghdXNlcl9pZCB8fCAodXNlcl9pZCA8PSB1aWRfbWF4ICYmIHVzZXJfaWQgPj0gdWlkX21pbikpOworIAlpc19zdWJfZ2lkID0gc3ViX2dpZF9maWxlX3ByZXNlbnQgKCkgJiYgIXJmbGcgJiYKKy0tIAorMS45LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzLzAwMDEtdXNlcmFkZC5jLWNyZWF0ZS1wYXJlbnQtZGlyZWN0b3JpZXMtd2hlbi1uZWNlc3NhcnkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvMDAwMS11c2VyYWRkLmMtY3JlYXRlLXBhcmVudC1kaXJlY3Rvcmllcy13aGVuLW5lY2Vzc2FyeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWRkZThlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzLzAwMDEtdXNlcmFkZC5jLWNyZWF0ZS1wYXJlbnQtZGlyZWN0b3JpZXMtd2hlbi1uZWNlc3NhcnkucGF0Y2gKQEAgLTAsMCArMSwxMDkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1N1YmplY3Q6IHVzZXJhZGQuYzogY3JlYXRlIHBhcmVudCBkaXJlY3RvcmllcyB3aGVuIG5lY2Vzc2FyeQorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvdXNlcmFkZC5jIHwgICA3MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNDkgaW5zZXJ0aW9ucygrKSwgMjMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvdXNlcmFkZC5jIGIvc3JjL3VzZXJhZGQuYworaW5kZXggNGJkOTY5ZC4uY2I1ZGQ2YyAxMDA2NDQKKy0tLSBhL3NyYy91c2VyYWRkLmMKKysrKyBiL3NyYy91c2VyYWRkLmMKK0BAIC0xODkzLDYgKzE4OTMsMzUgQEAgc3RhdGljIHZvaWQgdXNyX3VwZGF0ZSAodm9pZCkKKyB9CisgCisgLyoKKysgKiBta2Rpcl9wIC0gY3JlYXRlIGRpcmVjdG9yaWVzLCBpbmNsdWRpbmcgcGFyZW50IGRpcmVjdG9yaWVzIHdoZW4gbmVlZGVkCisrICoKKysgKiBzaW1pbGFyIHRvIGBta2RpciAtcCcKKysgKi8KKyt2b2lkIG1rZGlyX3AoY29uc3QgY2hhciAqcGF0aCkgeworKwlpbnQgbGVuID0gc3RybGVuKHBhdGgpOworKwljaGFyIG5ld2RpcltsZW4gKyAxXTsKKysJbW9kZV90IG1vZGUgPSAwNzU1OworKwlpbnQgaSA9IDA7CisrCisrCWlmIChwYXRoW2ldID09ICdcMCcpIHsKKysJCXJldHVybjsKKysJfQorKworKwkvKiBza2lwIHRoZSBsZWFkaW5nICcvJyAqLworKwlpKys7CisrCisrCXdoaWxlKHBhdGhbaV0gIT0gJ1wwJykgeworKwkJaWYgKHBhdGhbaV0gPT0gJy8nKSB7CisrCQkJc3RybmNweShuZXdkaXIsIHBhdGgsIGkpOworKwkJCW5ld2RpcltpXSA9ICdcMCc7CisrCQkJbWtkaXIobmV3ZGlyLCBtb2RlKTsKKysJCX0KKysJCWkrKzsKKysJfQorKwlta2RpcihwYXRoLCBtb2RlKTsKKyt9CisrCisrLyoKKyAgKiBjcmVhdGVfaG9tZSAtIGNyZWF0ZSB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5CisgICoKKyAgKgljcmVhdGVfaG9tZSgpIGNyZWF0ZXMgdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSBpZiBpdCBkb2VzIG5vdAorQEAgLTE5MDcsMzYgKzE5MzYsMzMgQEAgc3RhdGljIHZvaWQgY3JlYXRlX2hvbWUgKHZvaWQpCisgCQkJZmFpbF9leGl0IChFX0hPTUVESVIpOworIAkJfQorICNlbmRpZgorLQkJLyogWFhYIC0gY3JlYXRlIG1pc3NpbmcgcGFyZW50IGRpcmVjdG9yaWVzLiAgLS1tYXJla20gKi8KKy0JCWlmIChta2RpciAodXNlcl9ob21lLCAwKSAhPSAwKSB7CistCQkJZnByaW50ZiAoc3RkZXJyLAorLQkJCSAgICAgICAgIF8oIiVzOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAlc1xuIiksCistCQkJICAgICAgICAgUHJvZywgdXNlcl9ob21lKTsKKy0jaWZkZWYgV0lUSF9BVURJVAorLQkJCWF1ZGl0X2xvZ2dlciAoQVVESVRfQUREX1VTRVIsIFByb2csCistCQkJICAgICAgICAgICAgICAiYWRkaW5nIGhvbWUgZGlyZWN0b3J5IiwKKy0JCQkgICAgICAgICAgICAgIHVzZXJfbmFtZSwgKHVuc2lnbmVkIGludCkgdXNlcl9pZCwKKy0JCQkgICAgICAgICAgICAgIFNIQURPV19BVURJVF9GQUlMVVJFKTsKKy0jZW5kaWYKKy0JCQlmYWlsX2V4aXQgKEVfSE9NRURJUik7CistCQl9CistCQljaG93biAodXNlcl9ob21lLCB1c2VyX2lkLCB1c2VyX2dpZCk7CistCQljaG1vZCAodXNlcl9ob21lLAorLQkJICAgICAgIDA3NzcgJiB+Z2V0ZGVmX251bSAoIlVNQVNLIiwgR0VUREVGX0RFRkFVTFRfVU1BU0spKTsKKy0JCWhvbWVfYWRkZWQgPSB0cnVlOworKwkJbWtkaXJfcCh1c2VyX2hvbWUpOworKwl9CisrCWlmIChhY2Nlc3MgKHVzZXJfaG9tZSwgRl9PSykgIT0gMCkgeworICNpZmRlZiBXSVRIX0FVRElUCisgCQlhdWRpdF9sb2dnZXIgKEFVRElUX0FERF9VU0VSLCBQcm9nLAorIAkJICAgICAgICAgICAgICAiYWRkaW5nIGhvbWUgZGlyZWN0b3J5IiwKKyAJCSAgICAgICAgICAgICAgdXNlcl9uYW1lLCAodW5zaWduZWQgaW50KSB1c2VyX2lkLAorLQkJICAgICAgICAgICAgICBTSEFET1dfQVVESVRfU1VDQ0VTUyk7CisrCQkgICAgICAgICAgICAgIFNIQURPV19BVURJVF9GQUlMVVJFKTsKKyAjZW5kaWYKKy0jaWZkZWYgV0lUSF9TRUxJTlVYCistCQkvKiBSZXNldCBTRUxpbnV4IHRvIGNyZWF0ZSBmaWxlcyB3aXRoIGRlZmF1bHQgY29udGV4dHMgKi8KKy0JCWlmIChyZXNldF9zZWxpbnV4X2ZpbGVfY29udGV4dCAoKSAhPSAwKSB7CistCQkJZmFpbF9leGl0IChFX0hPTUVESVIpOworLQkJfQorKwkJZmFpbF9leGl0IChFX0hPTUVESVIpOworKwl9CisrCWNob3duICh1c2VyX2hvbWUsIHVzZXJfaWQsIHVzZXJfZ2lkKTsKKysJY2htb2QgKHVzZXJfaG9tZSwKKysJICAgICAgIDA3NzcgJiB+Z2V0ZGVmX251bSAoIlVNQVNLIiwgR0VUREVGX0RFRkFVTFRfVU1BU0spKTsKKysJaG9tZV9hZGRlZCA9IHRydWU7CisrI2lmZGVmIFdJVEhfQVVESVQKKysJYXVkaXRfbG9nZ2VyIChBVURJVF9BRERfVVNFUiwgUHJvZywKKysJCSAgICAgICJhZGRpbmcgaG9tZSBkaXJlY3RvcnkiLAorKwkJICAgICAgdXNlcl9uYW1lLCAodW5zaWduZWQgaW50KSB1c2VyX2lkLAorKwkJICAgICAgU0hBRE9XX0FVRElUX1NVQ0NFU1MpOworICNlbmRpZgorKyNpZmRlZiBXSVRIX1NFTElOVVgKKysJLyogUmVzZXQgU0VMaW51eCB0byBjcmVhdGUgZmlsZXMgd2l0aCBkZWZhdWx0IGNvbnRleHRzICovCisrCWlmIChyZXNldF9zZWxpbnV4X2ZpbGVfY29udGV4dCAoKSAhPSAwKSB7CisrCQlmYWlsX2V4aXQgKEVfSE9NRURJUik7CisgCX0KKysjZW5kaWYKKyB9CisgCisgLyoKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvYWxsb3ctZm9yLXNldHRpbmctcGFzc3dvcmQtaW4tY2xlYXItdGV4dC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9hbGxvdy1mb3Itc2V0dGluZy1wYXNzd29yZC1pbi1jbGVhci10ZXh0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZGEyNWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvYWxsb3ctZm9yLXNldHRpbmctcGFzc3dvcmQtaW4tY2xlYXItdGV4dC5wYXRjaApAQCAtMCwwICsxLDIwMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworQWxsb3cgZm9yIHNldHRpbmcgcGFzc3dvcmQgaW4gY2xlYXIgdGV4dC4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL01ha2VmaWxlLmFtIHwgICAgOCArKysrLS0tLQorIHNyYy9ncm91cGFkZC5jICB8ICAgIDggKysrKysrKy0KKyBzcmMvZ3JvdXBtb2QuYyAgfCAgICA4ICsrKysrKystCisgc3JjL3VzZXJhZGQuYyAgIHwgICAgOSArKysrKysrLS0KKyBzcmMvdXNlcm1vZC5jICAgfCAgICA4ICsrKysrKystCisgNSBmaWxlcyBjaGFuZ2VkLCAzMiBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlLmFtIGIvc3JjL01ha2VmaWxlLmFtCitpbmRleCAyNWUyODhkLi44NTZiMDg3IDEwMDY0NAorLS0tIGEvc3JjL01ha2VmaWxlLmFtCisrKysgYi9zcmMvTWFrZWZpbGUuYW0KK0BAIC04OCwxMCArODgsMTAgQEAgY2hncGFzc3dkX0xEQUREID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJTRUxJTlVYKSAkKExJQkNSWVBUKQorIGNoc2hfTERBREQgICAgID0gJChMREFERCkgJChMSUJQQU0pICQoTElCU0VMSU5VWCkgJChMSUJDUllQVF9OT1BBTSkgJChMSUJTS0VZKSAkKExJQk1EKQorIGNocGFzc3dkX0xEQUREID0gJChMREFERCkgJChMSUJQQU0pICQoTElCU0VMSU5VWCkgJChMSUJDUllQVCkKKyBncGFzc3dkX0xEQUREICA9ICQoTERBREQpICQoTElCQVVESVQpICQoTElCU0VMSU5VWCkgJChMSUJDUllQVCkKKy1ncm91cGFkZF9MREFERCA9ICQoTERBREQpICQoTElCUEFNX1NVSUQpICQoTElCQVVESVQpICQoTElCU0VMSU5VWCkKKytncm91cGFkZF9MREFERCA9ICQoTERBREQpICQoTElCUEFNX1NVSUQpICQoTElCQVVESVQpICQoTElCU0VMSU5VWCkgJChMSUJDUllQVCkKKyBncm91cGRlbF9MREFERCA9ICQoTERBREQpICQoTElCUEFNX1NVSUQpICQoTElCQVVESVQpICQoTElCU0VMSU5VWCkKKyBncm91cG1lbXNfTERBREQgPSAkKExEQUREKSAkKExJQlBBTSkgJChMSUJTRUxJTlVYKQorLWdyb3VwbW9kX0xEQUREID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKQorK2dyb3VwbW9kX0xEQUREID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKSAkKExJQkNSWVBUKQorIGdycGNrX0xEQUREICAgID0gJChMREFERCkgJChMSUJTRUxJTlVYKQorIGdycGNvbnZfTERBREQgID0gJChMREFERCkgJChMSUJTRUxJTlVYKQorIGdycHVuY29udl9MREFERCA9ICQoTERBREQpICQoTElCU0VMSU5VWCkKK0BAIC0xMTEsOSArMTExLDkgQEAgc3VfU09VUkNFUyAgICAgPSBcCisgCXN1YXV0aC5jCisgc3VfTERBREQgICAgICAgPSAkKExEQUREKSAkKExJQlBBTSkgJChMSUJDUllQVF9OT1BBTSkgJChMSUJTS0VZKSAkKExJQk1EKQorIHN1bG9naW5fTERBREQgID0gJChMREFERCkgJChMSUJDUllQVCkKKy11c2VyYWRkX0xEQUREICA9ICQoTERBREQpICQoTElCUEFNX1NVSUQpICQoTElCQVVESVQpICQoTElCU0VMSU5VWCkgJChMSUJTRU1BTkFHRSkgJChMSUJBQ0wpICQoTElCQVRUUikKKyt1c2VyYWRkX0xEQUREICA9ICQoTERBREQpICQoTElCUEFNX1NVSUQpICQoTElCQVVESVQpICQoTElCU0VMSU5VWCkgJChMSUJTRU1BTkFHRSkgJChMSUJBQ0wpICQoTElCQVRUUikgJChMSUJDUllQVCkKKyB1c2VyZGVsX0xEQUREICA9ICQoTERBREQpICQoTElCUEFNX1NVSUQpICQoTElCQVVESVQpICQoTElCU0VMSU5VWCkgJChMSUJTRU1BTkFHRSkKKy11c2VybW9kX0xEQUREICA9ICQoTERBREQpICQoTElCUEFNX1NVSUQpICQoTElCQVVESVQpICQoTElCU0VMSU5VWCkgJChMSUJTRU1BTkFHRSkgJChMSUJBQ0wpICQoTElCQVRUUikKKyt1c2VybW9kX0xEQUREICA9ICQoTERBREQpICQoTElCUEFNX1NVSUQpICQoTElCQVVESVQpICQoTElCU0VMSU5VWCkgJChMSUJTRU1BTkFHRSkgJChMSUJBQ0wpICQoTElCQVRUUikgJChMSUJDUllQVCkKKyB2aXB3X0xEQUREICAgICA9ICQoTERBREQpICQoTElCU0VMSU5VWCkKKyAKKyBpbnN0YWxsLWFtOiBhbGwtYW0KK2RpZmYgLS1naXQgYS9zcmMvZ3JvdXBhZGQuYyBiL3NyYy9ncm91cGFkZC5jCitpbmRleCBmNzE2ZjU3Li40ZTI4YzI2IDEwMDY0NAorLS0tIGEvc3JjL2dyb3VwYWRkLmMKKysrKyBiL3NyYy9ncm91cGFkZC5jCitAQCAtMTI0LDYgKzEyNCw3IEBAIHN0YXRpYyAvKkBub3JldHVybkAqL3ZvaWQgdXNhZ2UgKGludCBzdGF0dXMpCisgCSh2b2lkKSBmcHV0cyAoXygiICAtbywgLS1ub24tdW5pcXVlICAgICAgICAgICAgICBhbGxvdyB0byBjcmVhdGUgZ3JvdXBzIHdpdGggZHVwbGljYXRlXG4iCisgCSAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm9uLXVuaXF1ZSkgR0lEXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLXAsIC0tcGFzc3dvcmQgUEFTU1dPUkQgICAgICAgdXNlIHRoaXMgZW5jcnlwdGVkIHBhc3N3b3JkIGZvciB0aGUgbmV3IGdyb3VwXG4iKSwgdXNhZ2VvdXQpOworKwkodm9pZCkgZnB1dHMgKF8oIiAgLVAsIC0tY2xlYXItcGFzc3dvcmQgUEFTU1dPUkQgdXNlIHRoaXMgY2xlYXIgcGFzc3dvcmQgZm9yIHRoZSBuZXcgZ3JvdXBcbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtciwgLS1zeXN0ZW0gICAgICAgICAgICAgICAgICBjcmVhdGUgYSBzeXN0ZW0gYWNjb3VudFxuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1SLCAtLXJvb3QgQ0hST09UX0RJUiAgICAgICAgIGRpcmVjdG9yeSB0byBjaHJvb3QgaW50b1xuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzICgiXG4iLCB1c2FnZW91dCk7CitAQCAtMzg3LDEyICszODgsMTMgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19mbGFncyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJeyJrZXkiLCAgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdLJ30sCisgCQl7Im5vbi11bmlxdWUiLCBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ28nfSwKKyAJCXsicGFzc3dvcmQiLCAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAncCd9LAorKwkJeyJjbGVhci1wYXNzd29yZCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnUCd9LAorIAkJeyJzeXN0ZW0iLCAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdyJ30sCisgCQl7InJvb3QiLCAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1InfSwKKyAJCXtOVUxMLCAwLCBOVUxMLCAnXDAnfQorIAl9OworIAorLQl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgImZnOmhLOm9wOnJSOiIsCisrCXdoaWxlICgoYyA9IGdldG9wdF9sb25nIChhcmdjLCBhcmd2LCAiZmc6aEs6b3A6UDpyUjoiLAorIAkJICAgICAgICAgICAgICAgICBsb25nX29wdGlvbnMsIE5VTEwpKSAhPSAtMSkgeworIAkJc3dpdGNoIChjKSB7CisgCQljYXNlICdmJzoKK0BAIC00NDQsNiArNDQ2LDEwIEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZmxhZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCQlwZmxnID0gdHJ1ZTsKKyAJCQlncm91cF9wYXNzd2QgPSBvcHRhcmc7CisgCQkJYnJlYWs7CisrCQljYXNlICdQJzoKKysJCQlwZmxnID0gdHJ1ZTsKKysJCQlncm91cF9wYXNzd2QgPSBwd19lbmNyeXB0IChvcHRhcmcsIGNyeXB0X21ha2Vfc2FsdCAoTlVMTCwgTlVMTCkpOworKwkJCWJyZWFrOworIAkJY2FzZSAncic6CisgCQkJcmZsZyA9IHRydWU7CisgCQkJYnJlYWs7CitkaWZmIC0tZ2l0IGEvc3JjL2dyb3VwbW9kLmMgYi9zcmMvZ3JvdXBtb2QuYworaW5kZXggZDlkMzgwNy4uNjhmNDlkMSAxMDA2NDQKKy0tLSBhL3NyYy9ncm91cG1vZC5jCisrKysgYi9zcmMvZ3JvdXBtb2QuYworQEAgLTEyNyw2ICsxMjcsNyBAQCBzdGF0aWMgdm9pZCB1c2FnZSAoaW50IHN0YXR1cykKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1vLCAtLW5vbi11bmlxdWUgICAgICAgICAgICAgIGFsbG93IHRvIHVzZSBhIGR1cGxpY2F0ZSAobm9uLXVuaXF1ZSkgR0lEXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLXAsIC0tcGFzc3dvcmQgUEFTU1dPUkQgICAgICAgY2hhbmdlIHRoZSBwYXNzd29yZCB0byB0aGlzIChlbmNyeXB0ZWQpXG4iCisgCSAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVNTV09SRFxuIiksIHVzYWdlb3V0KTsKKysJKHZvaWQpIGZwdXRzIChfKCIgIC1QLCAtLWNsZWFyLXBhc3N3b3JkIFBBU1NXT1JEIGNoYW5nZSB0aGUgcGFzc3dvcmQgdG8gdGhpcyBjbGVhciBQQVNTV09SRFxuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1SLCAtLXJvb3QgQ0hST09UX0RJUiAgICAgICAgIGRpcmVjdG9yeSB0byBjaHJvb3QgaW50b1xuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzICgiXG4iLCB1c2FnZW91dCk7CisgCWV4aXQgKHN0YXR1cyk7CitAQCAtMzc1LDEwICszNzYsMTEgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19mbGFncyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJeyJuZXctbmFtZSIsICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICduJ30sCisgCQl7Im5vbi11bmlxdWUiLCBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ28nfSwKKyAJCXsicGFzc3dvcmQiLCAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAncCd9LAorKwkJeyJjbGVhci1wYXNzd29yZCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnUCd9LAorIAkJeyJyb290IiwgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdSJ30sCisgCQl7TlVMTCwgMCwgTlVMTCwgJ1wwJ30KKyAJfTsKKy0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICJnOmhuOm9wOlI6IiwKKysJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICJnOmhuOm9wOlA6UjoiLAorIAkJICAgICAgICAgICAgICAgICBsb25nX29wdGlvbnMsIE5VTEwpKSAhPSAtMSkgeworIAkJc3dpdGNoIChjKSB7CisgCQljYXNlICdnJzoKK0BAIC00MDUsNiArNDA3LDEwIEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZmxhZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCQlncm91cF9wYXNzd2QgPSBvcHRhcmc7CisgCQkJcGZsZyA9IHRydWU7CisgCQkJYnJlYWs7CisrCQljYXNlICdQJzoKKysJCQlncm91cF9wYXNzd2QgPSBwd19lbmNyeXB0IChvcHRhcmcsIGNyeXB0X21ha2Vfc2FsdCAoTlVMTCwgTlVMTCkpOworKwkJCXBmbGcgPSB0cnVlOworKwkJCWJyZWFrOworIAkJY2FzZSAnUic6IC8qIG5vLW9wLCBoYW5kbGVkIGluIHByb2Nlc3Nfcm9vdF9mbGFnICgpICovCisgCQkJYnJlYWs7CisgCQlkZWZhdWx0OgorZGlmZiAtLWdpdCBhL3NyYy91c2VyYWRkLmMgYi9zcmMvdXNlcmFkZC5jCitpbmRleCBiM2JkNDUxLi40NDE2ZjkwIDEwMDY0NAorLS0tIGEvc3JjL3VzZXJhZGQuYworKysrIGIvc3JjL3VzZXJhZGQuYworQEAgLTc3Myw2ICs3NzMsNyBAQCBzdGF0aWMgdm9pZCB1c2FnZSAoaW50IHN0YXR1cykKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1vLCAtLW5vbi11bmlxdWUgICAgICAgICAgICAgIGFsbG93IHRvIGNyZWF0ZSB1c2VycyB3aXRoIGR1cGxpY2F0ZVxuIgorIAkgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vbi11bmlxdWUpIFVJRFxuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1wLCAtLXBhc3N3b3JkIFBBU1NXT1JEICAgICAgIGVuY3J5cHRlZCBwYXNzd29yZCBvZiB0aGUgbmV3IGFjY291bnRcbiIpLCB1c2FnZW91dCk7CisrCSh2b2lkKSBmcHV0cyAoXygiICAtUCwgLS1jbGVhci1wYXNzd29yZCBQQVNTV09SRCBjbGVhciBwYXNzd29yZCBvZiB0aGUgbmV3IGFjY291bnRcbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtciwgLS1zeXN0ZW0gICAgICAgICAgICAgICAgICBjcmVhdGUgYSBzeXN0ZW0gYWNjb3VudFxuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1SLCAtLXJvb3QgQ0hST09UX0RJUiAgICAgICAgIGRpcmVjdG9yeSB0byBjaHJvb3QgaW50b1xuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1zLCAtLXNoZWxsIFNIRUxMICAgICAgICAgICAgIGxvZ2luIHNoZWxsIG9mIHRoZSBuZXcgYWNjb3VudFxuIiksIHVzYWdlb3V0KTsKK0BAIC0xMDQ3LDYgKzEwNDgsNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2ZsYWdzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkJeyJuby11c2VyLWdyb3VwIiwgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnTid9LAorIAkJCXsibm9uLXVuaXF1ZSIsICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ28nfSwKKyAJCQl7InBhc3N3b3JkIiwgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdwJ30sCisrCQkJeyJjbGVhci1wYXNzd29yZCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnUCd9LAorIAkJCXsic3lzdGVtIiwgICAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ3InfSwKKyAJCQl7InJvb3QiLCAgICAgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdSJ30sCisgCQkJeyJzaGVsbCIsICAgICAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAncyd9LAorQEAgLTEwNTksOSArMTA2MSw5IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZmxhZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCX07CisgCQl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwKKyAjaWZkZWYgV0lUSF9TRUxJTlVYCistCQkgICAgICAgICAgICAgICAgICAgICAgICAgImI6YzpkOkRlOmY6ZzpHOmhrOks6bG1NTm9wOnJSOnM6dTpVWjoiLAorKwkJICAgICAgICAgICAgICAgICAgICAgICAgICJiOmM6ZDpEZTpmOmc6RzpoazpLOmxtTU5vcDpQOnJSOnM6dTpVWjoiLAorICNlbHNlCQkJCS8qICFXSVRIX1NFTElOVVggKi8KKy0JCSAgICAgICAgICAgICAgICAgICAgICAgICAiYjpjOmQ6RGU6ZjpnOkc6aGs6SzpsbU1Ob3A6clI6czp1OlUiLAorKwkJICAgICAgICAgICAgICAgICAgICAgICAgICJiOmM6ZDpEZTpmOmc6RzpoazpLOmxtTU5vcDpQOnJSOnM6dTpVIiwKKyAjZW5kaWYJCQkJLyogIVdJVEhfU0VMSU5VWCAqLworIAkJICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdfb3B0aW9ucywgTlVMTCkpICE9IC0xKSB7CisgCQkJc3dpdGNoIChjKSB7CitAQCAtMTIyNyw2ICsxMjI5LDkgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19mbGFncyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJCQl9CisgCQkJCXVzZXJfcGFzcyA9IG9wdGFyZzsKKyAJCQkJYnJlYWs7CisrCQkJY2FzZSAnUCc6IC8qIHNldCBjbGVhciB0ZXh0IHBhc3N3b3JkICovCisrCQkJCXVzZXJfcGFzcyA9IHB3X2VuY3J5cHQgKG9wdGFyZywgY3J5cHRfbWFrZV9zYWx0IChOVUxMLCBOVUxMKSk7CisrCQkJCWJyZWFrOworIAkJCWNhc2UgJ3InOgorIAkJCQlyZmxnID0gdHJ1ZTsKKyAJCQkJYnJlYWs7CitkaWZmIC0tZ2l0IGEvc3JjL3VzZXJtb2QuYyBiL3NyYy91c2VybW9kLmMKK2luZGV4IGU3ZDQzNTEuLmI3OWY3YTMgMTAwNjQ0CistLS0gYS9zcmMvdXNlcm1vZC5jCisrKysgYi9zcmMvdXNlcm1vZC5jCitAQCAtNDE5LDYgKzQxOSw3IEBAIHN0YXRpYyAvKkBub3JldHVybkAqL3ZvaWQgdXNhZ2UgKGludCBzdGF0dXMpCisgCSAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgbG9jYXRpb24gKHVzZSBvbmx5IHdpdGggLWQpXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLW8sIC0tbm9uLXVuaXF1ZSAgICAgICAgICAgICAgYWxsb3cgdXNpbmcgZHVwbGljYXRlIChub24tdW5pcXVlKSBVSURcbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtcCwgLS1wYXNzd29yZCBQQVNTV09SRCAgICAgICB1c2UgZW5jcnlwdGVkIHBhc3N3b3JkIGZvciB0aGUgbmV3IHBhc3N3b3JkXG4iKSwgdXNhZ2VvdXQpOworKwkodm9pZCkgZnB1dHMgKF8oIiAgLVAsIC0tY2xlYXItcGFzc3dvcmQgUEFTU1dPUkQgdXNlIGNsZWFyIHBhc3N3b3JkIGZvciB0aGUgbmV3IHBhc3N3b3JkXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLVIsIC0tcm9vdCBDSFJPT1RfRElSICAgICAgICAgZGlyZWN0b3J5IHRvIGNocm9vdCBpbnRvXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLXMsIC0tc2hlbGwgU0hFTEwgICAgICAgICAgICAgbmV3IGxvZ2luIHNoZWxsIGZvciB0aGUgdXNlciBhY2NvdW50XG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLXUsIC0tdWlkIFVJRCAgICAgICAgICAgICAgICAgbmV3IFVJRCBmb3IgdGhlIHVzZXIgYWNjb3VudFxuIiksIHVzYWdlb3V0KTsKK0BAIC05OTYsNiArOTk3LDcgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19mbGFncyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJCXsibW92ZS1ob21lIiwgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdtJ30sCisgCQkJeyJub24tdW5pcXVlIiwgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ28nfSwKKyAJCQl7InBhc3N3b3JkIiwgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAncCd9LAorKwkJCXsiY2xlYXItcGFzc3dvcmQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1AnfSwKKyAJCQl7InJvb3QiLCAgICAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnUid9LAorIAkJCXsic2hlbGwiLCAgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdzJ30sCisgCQkJeyJ1aWQiLCAgICAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3UnfSwKK0BAIC0xMDEyLDcgKzEwMTQsNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2ZsYWdzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkJe05VTEwsIDAsIE5VTEwsICdcMCd9CisgCQl9OworIAkJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsCistCQkgICAgICAgICAgICAgICAgICAgICAgICAgImFjOmQ6ZTpmOmc6RzpobDpMbW9wOlI6czp1OlUiCisrCQkgICAgICAgICAgICAgICAgICAgICAgICAgImFjOmQ6ZTpmOmc6RzpobDpMbW9wOlA6UjpzOnU6VSIKKyAjaWZkZWYgRU5BQkxFX1NVQklEUworIAkJICAgICAgICAgICAgICAgICAgICAgICAgICJ2Onc6VjpXOiIKKyAjZW5kaWYJCQkJLyogRU5BQkxFX1NVQklEUyAqLworQEAgLTExMTIsNiArMTExNCwxMCBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2ZsYWdzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkJCXVzZXJfcGFzcyA9IG9wdGFyZzsKKyAJCQkJcGZsZyA9IHRydWU7CisgCQkJCWJyZWFrOworKwkJCWNhc2UgJ1AnOgorKwkJCQl1c2VyX3Bhc3MgPSBwd19lbmNyeXB0IChvcHRhcmcsIGNyeXB0X21ha2Vfc2FsdCAoTlVMTCwgTlVMTCkpOworKwkJCQlwZmxnID0gdHJ1ZTsKKysJCQkJYnJlYWs7CisgCQkJY2FzZSAnUic6IC8qIG5vLW9wLCBoYW5kbGVkIGluIHByb2Nlc3Nfcm9vdF9mbGFnICgpICovCisgCQkJCWJyZWFrOworIAkJCWNhc2UgJ3MnOgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9jaGVja19zaXplX29mX3VpZF90X2FuZF9naWRfdF91c2luZ19BQ19DSEVDS19TSVpFT0YucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvY2hlY2tfc2l6ZV9vZl91aWRfdF9hbmRfZ2lkX3RfdXNpbmdfQUNfQ0hFQ0tfU0laRU9GLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NTU5MGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvY2hlY2tfc2l6ZV9vZl91aWRfdF9hbmRfZ2lkX3RfdXNpbmdfQUNfQ0hFQ0tfU0laRU9GLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb20gMmNiNTQxNThiODBjZGJkOTdjYTNiMzZkZjgzZjkyNTVlOTIzYWUzZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphbWVzIExlIEN1aXJvdCA8Y2hld2lAYXVyYS1vbmxpbmUuY28udWs+CitEYXRlOiBTYXQsIDIzIEF1ZyAyMDE0IDA5OjQ2OjM5ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIENoZWNrIHNpemUgb2YgdWlkX3QgYW5kIGdpZF90IHVzaW5nIEFDX0NIRUNLX1NJWkVPRgorCitUaGlzIGJ1aWx0LWluIGNoZWNrIGlzIHNpbXBsZXIgdGhhbiB0aGUgcHJldmlvdXMgbWV0aG9kIGFuZCwgbW9zdAoraW1wb3J0YW50bHksIHdvcmtzIHdoZW4gY3Jvc3MtY29tcGlsaW5nLgorCitVcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkCitbaHR0cHM6Ly9naXRodWIuY29tL3NoYWRvdy1tYWludC9zaGFkb3cvY29tbWl0LzJjYjU0MTU4YjgwY2RiZDk3Y2EzYjM2ZGY4M2Y5MjU1ZTkyM2FlM2ZdCisKK1NpZ25lZC1vZmYtYnk6IFNlcmdlIEhhbGx5biA8c2VyZ2UuaGFsbHluQHVidW50dS5jb20+CistLS0KKyBjb25maWd1cmUuaW4gfCAxNCArKysrLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCitpbmRleCAxYTNmODQxLi40YTRkNmQwIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC0zMzUsMTYgKzMzNSwxMCBAQCBpZiB0ZXN0ICIkZW5hYmxlX3N1YmlkcyIgIT0gIm5vIjsgdGhlbgorIAlkbmwKKyAJZG5sIEZJWE1FOiBjaGVjayBpZiAzMiBiaXQgVUlEcy9HSURzIGFyZSBzdXBwb3J0ZWQgYnkgbGliYworIAlkbmwKKy0JQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoWworLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy1pbnQgbWFpbih2b2lkKSB7CistCXVpZF90IHU7CistCWdpZF90IGc7CistCXJldHVybiAoc2l6ZW9mIHUgPCA0KSB8fCAoc2l6ZW9mIGcgPCA0KTsKKy19CistCV0pXSwgW2lkMzJiaXQ9InllcyJdLCBbaWQzMmJpdD0ibm8iXSkKKy0KKy0JaWYgdGVzdCAieCRpZDMyYml0IiA9ICJ4eWVzIjsgdGhlbgorKwlBQ19DSEVDS19TSVpFT0YoW3VpZF90XSwsIFsjaW5jbHVkZSAic3lzL3R5cGVzLmgiXSkKKysJQUNfQ0hFQ0tfU0laRU9GKFtnaWRfdF0sLCBbI2luY2x1ZGUgInN5cy90eXBlcy5oIl0pCisrCisrCWlmIHRlc3QgIiRhY19jdl9zaXplb2ZfdWlkX3QiIC1nZSA0ICYmIHRlc3QgIiRhY19jdl9zaXplb2ZfZ2lkX3QiIC1nZSA0OyB0aGVuCisgCQlBQ19ERUZJTkUoRU5BQkxFX1NVQklEUywgMSwgW0RlZmluZSB0byBzdXBwb3J0IHRoZSBzdWJvcmRpbmF0ZSBJRHMuXSkKKyAJCWVuYWJsZV9zdWJpZHM9InllcyIKKyAJZWxzZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2NvbW1vbmlvLmMtZml4LXVuZXhwZWN0ZWQtb3Blbi1mYWlsdXJlLWluLWNocm9vdC1lbnYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvY29tbW9uaW8uYy1maXgtdW5leHBlY3RlZC1vcGVuLWZhaWx1cmUtaW4tY2hyb290LWVudi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmEzZDE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2NvbW1vbmlvLmMtZml4LXVuZXhwZWN0ZWQtb3Blbi1mYWlsdXJlLWluLWNocm9vdC1lbnYucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworY29tbW9uaW8uYzogZml4IHVuZXhwZWN0ZWQgb3BlbiBmYWlsdXJlIGluIGNocm9vdCBlbnZpcm9ubWVudAorCitXaGVuIHVzaW5nIGNvbW1hbmRzIHdpdGggJy1SIDxuZXdyb290Picgb3B0aW9uIGluIG91ciBwc2V1ZG8gZW52aXJvbm1lbnQsCit3ZSB3b3VsZCB1c3VhbGx5IGdldCB0aGUgJ1BlbWlzc2lvbiBEZW5pZWQnIGVycm9yLiBUaGlzIHBhdGNoIHNlcnZlcyBhcworYSB3b3JrYXJvdW5kIHRvIHRoaXMgcHJvYmxlbS4KKworTm90ZSB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCBjaGFuZ2UgdGhlIGxvZ2ljIGluIHRoZSBjb2RlLCBpdCBqdXN0IGV4cGFuZHMKK3RoZSBjb2Rlcy4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgbGliL2NvbW1vbmlvLmMgfCAgIDE2ICsrKysrKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9jb21tb25pby5jIGIvbGliL2NvbW1vbmlvLmMKK2luZGV4IGNjNTM2YmYuLjUxY2FmZDkgMTAwNjQ0CistLS0gYS9saWIvY29tbW9uaW8uYworKysrIGIvbGliL2NvbW1vbmlvLmMKK0BAIC02MTMsMTAgKzYxMywxOCBAQCBpbnQgY29tbW9uaW9fb3BlbiAoc3RydWN0IGNvbW1vbmlvX2RiICpkYiwgaW50IG1vZGUpCisgCWRiLT5jdXJzb3IgPSBOVUxMOworIAlkYi0+Y2hhbmdlZCA9IGZhbHNlOworIAorLQlmZCA9IG9wZW4gKGRiLT5maWxlbmFtZSwKKy0JICAgICAgICAgICAgIChkYi0+cmVhZG9ubHkgPyBPX1JET05MWSA6IE9fUkRXUikKKy0JICAgICAgICAgICB8IE9fTk9DVFRZIHwgT19OT05CTE9DSyB8IE9fTk9GT0xMT1cpOworLQlzYXZlZF9lcnJubyA9IGVycm5vOworKwlpZiAoZGItPnJlYWRvbmx5KSB7CisrCQlmZCA9IG9wZW4gKGRiLT5maWxlbmFtZSwKKysJCQkgICAodHJ1ZSA/IE9fUkRPTkxZIDogT19SRFdSKQorKwkJCSAgIHwgT19OT0NUVFkgfCBPX05PTkJMT0NLIHwgT19OT0ZPTExPVyk7CisrCQlzYXZlZF9lcnJubyA9IGVycm5vOworKwl9IGVsc2UgeworKwkJZmQgPSBvcGVuIChkYi0+ZmlsZW5hbWUsCisrCQkJICAgKGZhbHNlID8gT19SRE9OTFkgOiBPX1JEV1IpCisrCQkJICAgfCBPX05PQ1RUWSB8IE9fTk9OQkxPQ0sgfCBPX05PRk9MTE9XKTsKKysJCXNhdmVkX2Vycm5vID0gZXJybm87CisrCX0KKysKKyAJZGItPmZwID0gTlVMTDsKKyAJaWYgKGZkID49IDApIHsKKyAjaWZkZWYgV0lUSF9UQ0IKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvZGlzYWJsZS1zeXNsb2cucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvZGlzYWJsZS1zeXNsb2cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk0M2ZkNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9kaXNhYmxlLXN5c2xvZy5wYXRjaApAQCAtMCwwICsxLDM0IEBACitEaXNhYmxlIHVzZSBvZiBzeXNsb2cgdG8gcHJldmVudCBzeXNyb290IHVzZXIgYW5kIGdyb3VwIGFkZGl0aW9ucyBmcm9tCit3cml0aW5nIGVudHJpZXMgdG8gdGhlIGhvc3QncyBzeXNsb2cuIFRoaXMgcGF0Y2ggc2hvdWxkIG9ubHkgYmUgdXNlZAord2l0aCB0aGUgc2hhZG93LW5hdGl2ZSByZWNpcGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworZGlmZiAtdXJOIHNoYWRvdy00LjEuNC4zLm9yaWcvL3NyYy9ncm91cGFkZC5jIHNoYWRvdy00LjEuNC4zL3NyYy9ncm91cGFkZC5jCistLS0gc2hhZG93LTQuMS40LjMub3JpZy8vc3JjL2dyb3VwYWRkLmMJMjAxMS0wMi0xMyAwOTo1ODoxNi4wMDAwMDAwMDAgLTA4MDAKKysrKyBzaGFkb3ctNC4xLjQuMy9zcmMvZ3JvdXBhZGQuYwkyMDEyLTA0LTA1IDEwOjA1OjU5LjQ0MDAwMTc1OCAtMDcwMAorQEAgLTM0LDYgKzM0LDkgQEAKKyAKKyAjaWRlbnQgIiRJZDogZ3JvdXBhZGQuYyAzMDE1IDIwMDktMDYtMDUgMjI6MTY6NTZaIG5la3JhbC1ndWVzdCAkIgorIAorKy8qIERpc2FibGUgdXNlIG9mIHN5c2xvZyBzaW5jZSB3ZSdyZSBydW5uaW5nIHRoaXMgY29tbWFuZCBhZ2FpbnN0IGEgc3lzcm9vdCAqLworKyN1bmRlZiBVU0VfU1lTTE9HCisrCisgI2luY2x1ZGUgPGN0eXBlLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGdldG9wdC5oPgorZGlmZiAtdXJOIHNoYWRvdy00LjEuNC4zLm9yaWcvL3NyYy91c2VyYWRkLmMgc2hhZG93LTQuMS40LjMvc3JjL3VzZXJhZGQuYworLS0tIHNoYWRvdy00LjEuNC4zLm9yaWcvL3NyYy91c2VyYWRkLmMJMjAxMS0wMi0xMyAwOTo1ODoxNi4wMDAwMDAwMDAgLTA4MDAKKysrKyBzaGFkb3ctNC4xLjQuMy9zcmMvdXNlcmFkZC5jCTIwMTItMDQtMDUgMTA6MDY6MjUuMDc2MDAxMzE1IC0wNzAwCitAQCAtMzQsNiArMzQsOSBAQAorIAorICNpZGVudCAiJElkOiB1c2VyYWRkLmMgMzAxNSAyMDA5LTA2LTA1IDIyOjE2OjU2WiBuZWtyYWwtZ3Vlc3QgJCIKKyAKKysvKiBEaXNhYmxlIHVzZSBvZiBzeXNsb2cgc2luY2Ugd2UncmUgcnVubmluZyB0aGlzIGNvbW1hbmQgYWdhaW5zdCBhIHN5c3Jvb3QgKi8KKysjdW5kZWYgVVNFX1NZU0xPRworKworICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9maXgtaW5zdGFsbGF0aW9uLWZhaWx1cmUtd2l0aC1zdWJpZHMtZGlzYWJsZWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvZml4LWluc3RhbGxhdGlvbi1mYWlsdXJlLXdpdGgtc3ViaWRzLWRpc2FibGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyY2I5MWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvZml4LWluc3RhbGxhdGlvbi1mYWlsdXJlLXdpdGgtc3ViaWRzLWRpc2FibGVkLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTdWJqZWN0OiBmaXggaW5zdGFsbGF0aW9uIGZhaWx1cmUgd2l0aCBzdWJpZHMgZGlzYWJsZWQKKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL01ha2VmaWxlLmFtIHwgICAgNSArKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5hbSBiL3NyYy9NYWtlZmlsZS5hbQoraW5kZXggMjVlMjg4ZC4uMDc2ZjhlZiAxMDA2NDQKKy0tLSBhL3NyYy9NYWtlZmlsZS5hbQorKysrIGIvc3JjL01ha2VmaWxlLmFtCitAQCAtNTIsNyArNTIsMTAgQEAgdXNiaW5fUFJPR1JBTVMgPSBcCisgbm9pbnN0X1BST0dSQU1TID0gaWQgc3Vsb2dpbgorIAorIHN1aWRiaW5zICAgICAgID0gc3UKKy1zdWlkdWJpbnMgICAgICA9IGNoYWdlIGNoZm4gY2hzaCBleHBpcnkgZ3Bhc3N3ZCBuZXdncnAgcGFzc3dkIG5ld3VpZG1hcCBuZXdnaWRtYXAKKytzdWlkdWJpbnMgICAgICA9IGNoYWdlIGNoZm4gY2hzaCBleHBpcnkgZ3Bhc3N3ZCBuZXdncnAgcGFzc3dkCisraWYgRU5BQkxFX1NVQklEUworK3N1aWR1YmlucyArPSBuZXdnaWRtYXAgbmV3dWlkbWFwCisrZW5kaWYKKyBpZiBBQ0NUX1RPT0xTX1NFVFVJRAorIAlzdWlkdWJpbnMgKz0gY2hhZ2UgY2hncGFzc3dkIGNocGFzc3dkIGdyb3VwYWRkIGdyb3VwZGVsIGdyb3VwbW9kIG5ld3VzZXJzIHVzZXJhZGQgdXNlcmRlbCB1c2VybW9kCisgZW5kaWYKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvbG9naW4uZGVmc19zaGFkb3ctc3lzcm9vdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9sb2dpbi5kZWZzX3NoYWRvdy1zeXNyb290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNjhkZDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvbG9naW4uZGVmc19zaGFkb3ctc3lzcm9vdApAQCAtMCwwICsxLDM4NiBAQAorIworIyAvZXRjL2xvZ2luLmRlZnMgLSBDb25maWd1cmF0aW9uIGNvbnRyb2wgZGVmaW5pdGlvbnMgZm9yIHRoZSBzaGFkb3cgcGFja2FnZS4KKyMKKyMJJElkOiBsb2dpbi5kZWZzIDMwMzggMjAwOS0wNy0yMyAyMDo0MTozNVogbmVrcmFsLWd1ZXN0ICQKKyMKKworIworIyBEZWxheSBpbiBzZWNvbmRzIGJlZm9yZSBiZWluZyBhbGxvd2VkIGFub3RoZXIgYXR0ZW1wdCBhZnRlciBhIGxvZ2luIGZhaWx1cmUKKyMgTm90ZTogV2hlbiBQQU0gaXMgdXNlZCwgc29tZSBtb2R1bGVzIG1heSBlbmZvcmUgYSBtaW5pbWFsIGRlbGF5IChlLmcuCisjICAgICAgIHBhbV91bml4IGVuZm9yY2VzIGEgMnMgZGVsYXkpCisjCitGQUlMX0RFTEFZCQkzCisKKyMKKyMgRW5hYmxlIGxvZ2dpbmcgYW5kIGRpc3BsYXkgb2YgL3Zhci9sb2cvZmFpbGxvZyBsb2dpbiBmYWlsdXJlIGluZm8uCisjCisjRkFJTExPR19FTkFCCQl5ZXMKKworIworIyBFbmFibGUgZGlzcGxheSBvZiB1bmtub3duIHVzZXJuYW1lcyB3aGVuIGxvZ2luIGZhaWx1cmVzIGFyZSByZWNvcmRlZC4KKyMKK0xPR19VTktGQUlMX0VOQUIJbm8KKworIworIyBFbmFibGUgbG9nZ2luZyBvZiBzdWNjZXNzZnVsIGxvZ2lucworIworTE9HX09LX0xPR0lOUwkJbm8KKworIworIyBFbmFibGUgbG9nZ2luZyBhbmQgZGlzcGxheSBvZiAvdmFyL2xvZy9sYXN0bG9nIGxvZ2luIHRpbWUgaW5mby4KKyMKKyNMQVNUTE9HX0VOQUIJCXllcworCisjCisjIEVuYWJsZSBjaGVja2luZyBhbmQgZGlzcGxheSBvZiBtYWlsYm94IHN0YXR1cyB1cG9uIGxvZ2luLgorIworIyBEaXNhYmxlIGlmIHRoZSBzaGVsbCBzdGFydHVwIGZpbGVzIGFscmVhZHkgY2hlY2sgZm9yIG1haWwKKyMgKCJtYWlseCAtZSIgb3IgZXF1aXZhbGVudCkuCisjCisjI01BSUxfQ0hFQ0tfRU5BQgkJeWVzCisKKyMKKyMgRW5hYmxlIGFkZGl0aW9uYWwgY2hlY2tzIHVwb24gcGFzc3dvcmQgY2hhbmdlcy4KKyMKKyNPQlNDVVJFX0NIRUNLU19FTkFCCXllcworCisjCisjIEVuYWJsZSBjaGVja2luZyBvZiB0aW1lIHJlc3RyaWN0aW9ucyBzcGVjaWZpZWQgaW4gL2V0Yy9wb3J0dGltZS4KKyMKKyNQT1JUVElNRV9DSEVDS1NfRU5BQgl5ZXMKKworIworIyBFbmFibGUgc2V0dGluZyBvZiB1bGltaXQsIHVtYXNrLCBhbmQgbmljZW5lc3MgZnJvbSBwYXNzd2QgZ2Vjb3MgZmllbGQuCisjCisjUVVPVEFTX0VOQUIJCXllcworCisjCisjIEVuYWJsZSAic3lzbG9nIiBsb2dnaW5nIG9mIHN1IGFjdGl2aXR5IC0gaW4gYWRkaXRpb24gdG8gc3Vsb2cgZmlsZSBsb2dnaW5nLgorIyBTWVNMT0dfU0dfRU5BQiBkb2VzIHRoZSBzYW1lIGZvciBuZXdncnAgYW5kIHNnLgorIworU1lTTE9HX1NVX0VOQUIJCXllcworU1lTTE9HX1NHX0VOQUIJCXllcworCisjCisjIElmIGRlZmluZWQsIGVpdGhlciBmdWxsIHBhdGhuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGRldmljZSBuYW1lcyBvcgorIyBhICI6IiBkZWxpbWl0ZWQgbGlzdCBvZiBkZXZpY2UgbmFtZXMuICBSb290IGxvZ2lucyB3aWxsIGJlIGFsbG93ZWQgb25seQorIyB1cG9uIHRoZXNlIGRldmljZXMuCisjCitDT05TT0xFCQkvZXRjL3NlY3VyZXR0eQorI0NPTlNPTEUJY29uc29sZTp0dHkwMTp0dHkwMjp0dHkwMzp0dHkwNAorCisjCisjIElmIGRlZmluZWQsIGFsbCBzdSBhY3Rpdml0eSBpcyBsb2dnZWQgdG8gdGhpcyBmaWxlLgorIworI1NVTE9HX0ZJTEUJL3Zhci9sb2cvc3Vsb2cKKworIworIyBJZiBkZWZpbmVkLCAiOiIgZGVsaW1pdGVkIGxpc3Qgb2YgIm1lc3NhZ2Ugb2YgdGhlIGRheSIgZmlsZXMgdG8KKyMgYmUgZGlzcGxheWVkIHVwb24gbG9naW4uCisjCisjTU9URF9GSUxFCS9ldGMvbW90ZAorI01PVERfRklMRQkvZXRjL21vdGQ6L3Vzci9saWIvbmV3cy9uZXdzLW1vdGQKKworIworIyBJZiBkZWZpbmVkLCB0aGlzIGZpbGUgd2lsbCBiZSBvdXRwdXQgYmVmb3JlIGVhY2ggbG9naW4gcHJvbXB0LgorIworI0lTU1VFX0ZJTEUJL2V0Yy9pc3N1ZQorCisjCisjIElmIGRlZmluZWQsIGZpbGUgd2hpY2ggbWFwcyB0dHkgbGluZSB0byBURVJNIGVudmlyb25tZW50IHBhcmFtZXRlci4KKyMgRWFjaCBsaW5lIG9mIHRoZSBmaWxlIGlzIGluIGEgZm9ybWF0IHNvbWV0aGluZyBsaWtlICJ2dDEwMCAgdHR5MDEiLgorIworI1RUWVRZUEVfRklMRQkvZXRjL3R0eXR5cGUKKworIworIyBJZiBkZWZpbmVkLCBsb2dpbiBmYWlsdXJlcyB3aWxsIGJlIGxvZ2dlZCBoZXJlIGluIGEgdXRtcCBmb3JtYXQuCisjIGxhc3QsIHdoZW4gaW52b2tlZCBhcyBsYXN0Yiwgd2lsbCByZWFkIC92YXIvbG9nL2J0bXAsIHNvLi4uCisjCisjRlRNUF9GSUxFCS92YXIvbG9nL2J0bXAKKworIworIyBJZiBkZWZpbmVkLCBuYW1lIG9mIGZpbGUgd2hvc2UgcHJlc2VuY2Ugd2hpY2ggd2lsbCBpbmhpYml0IG5vbi1yb290CisjIGxvZ2lucy4gIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgc2hvdWxkIGJlIGEgbWVzc2FnZSBpbmRpY2F0aW5nCisjIHdoeSBsb2dpbnMgYXJlIGluaGliaXRlZC4KKyMKKyNOT0xPR0lOU19GSUxFCS9ldGMvbm9sb2dpbgorCisjCisjIElmIGRlZmluZWQsIHRoZSBjb21tYW5kIG5hbWUgdG8gZGlzcGxheSB3aGVuIHJ1bm5pbmcgInN1IC0iLiAgRm9yCisjIGV4YW1wbGUsIGlmIHRoaXMgaXMgZGVmaW5lZCBhcyAic3UiIHRoZW4gYSAicHMiIHdpbGwgZGlzcGxheSB0aGUKKyMgY29tbWFuZCBpcyAiLXN1Ii4gIElmIG5vdCBkZWZpbmVkLCB0aGVuICJwcyIgd291bGQgZGlzcGxheSB0aGUKKyMgbmFtZSBvZiB0aGUgc2hlbGwgYWN0dWFsbHkgYmVpbmcgcnVuLCBlLmcuIHNvbWV0aGluZyBsaWtlICItc2giLgorIworU1VfTkFNRQkJc3UKKworIworIyAqUkVRVUlSRUQqCisjICAgRGlyZWN0b3J5IHdoZXJlIG1haWxib3hlcyByZXNpZGUsIF9vcl8gbmFtZSBvZiBmaWxlLCByZWxhdGl2ZSB0byB0aGUKKyMgICBob21lIGRpcmVjdG9yeS4gIElmIHlvdSBfZG9fIGRlZmluZSBib3RoLCAjTUFJTF9ESVIgdGFrZXMgcHJlY2VkZW5jZS4KKyMKKyNNQUlMX0RJUgkvdmFyL3Nwb29sL21haWwKK01BSUxfRklMRQkubWFpbAorCisjCisjIElmIGRlZmluZWQsIGZpbGUgd2hpY2ggaW5oaWJpdHMgYWxsIHRoZSB1c3VhbCBjaGF0dGVyIGR1cmluZyB0aGUgbG9naW4KKyMgc2VxdWVuY2UuICBJZiBhIGZ1bGwgcGF0aG5hbWUsIHRoZW4gaHVzaGVkIG1vZGUgd2lsbCBiZSBlbmFibGVkIGlmIHRoZQorIyB1c2VyJ3MgbmFtZSBvciBzaGVsbCBhcmUgZm91bmQgaW4gdGhlIGZpbGUuICBJZiBub3QgYSBmdWxsIHBhdGhuYW1lLCB0aGVuCisjIGh1c2hlZCBtb2RlIHdpbGwgYmUgZW5hYmxlZCBpZiB0aGUgZmlsZSBleGlzdHMgaW4gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeS4KKyMKK0hVU0hMT0dJTl9GSUxFCS5odXNobG9naW4KKyNIVVNITE9HSU5fRklMRQkvZXRjL2h1c2hsb2dpbnMKKworIworIyBJZiBkZWZpbmVkLCBlaXRoZXIgYSBUWiBlbnZpcm9ubWVudCBwYXJhbWV0ZXIgc3BlYyBvciB0aGUKKyMgZnVsbHktcm9vdGVkIHBhdGhuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIHN1Y2ggYSBzcGVjLgorIworI0VOVl9UWgkJVFo9Q1NUNkNEVAorI0VOVl9UWgkJL2V0Yy90em5hbWUKKworIworIyBJZiBkZWZpbmVkLCBhbiBIWiBlbnZpcm9ubWVudCBwYXJhbWV0ZXIgc3BlYy4KKyMKKyMgZm9yIExpbnV4L3g4NgorI0VOVl9IWgkJSFo9MTAwCisjIEZvciBMaW51eC9BbHBoYS4uLgorI0VOVl9IWgkJSFo9MTAyNAorCisjCisjICpSRVFVSVJFRCogIFRoZSBkZWZhdWx0IFBBVEggc2V0dGluZ3MsIGZvciBzdXBlcnVzZXIgYW5kIG5vcm1hbCB1c2Vycy4KKyMKKyMgKHRoZXkgYXJlIG1pbmltYWwsIGFkZCB0aGUgcmVzdCBpbiB0aGUgc2hlbGwgc3RhcnR1cCBmaWxlcykKK0VOVl9TVVBBVEgJUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorRU5WX1BBVEgJUEFUSD0vYmluOi91c3IvYmluCisKKyMKKyMgVGVybWluYWwgcGVybWlzc2lvbnMKKyMKKyMJVFRZR1JPVVAJTG9naW4gdHR5IHdpbGwgYmUgYXNzaWduZWQgdGhpcyBncm91cCBvd25lcnNoaXAuCisjCVRUWVBFUk0JCUxvZ2luIHR0eSB3aWxsIGJlIHNldCB0byB0aGlzIHBlcm1pc3Npb24uCisjCisjIElmIHlvdSBoYXZlIGEgIndyaXRlIiBwcm9ncmFtIHdoaWNoIGlzICJzZXRnaWQiIHRvIGEgc3BlY2lhbCBncm91cAorIyB3aGljaCBvd25zIHRoZSB0ZXJtaW5hbHMsIGRlZmluZSBUVFlHUk9VUCB0byB0aGUgZ3JvdXAgbnVtYmVyIGFuZAorIyBUVFlQRVJNIHRvIDA2MjAuICBPdGhlcndpc2UgbGVhdmUgVFRZR1JPVVAgY29tbWVudGVkIG91dCBhbmQgYXNzaWduCisjIFRUWVBFUk0gdG8gZWl0aGVyIDYyMiBvciA2MDAuCisjCitUVFlHUk9VUAl0dHkKK1RUWVBFUk0JCTA2MDAKKworIworIyBMb2dpbiBjb25maWd1cmF0aW9uIGluaXRpYWxpemF0aW9uczoKKyMKKyMJRVJBU0VDSEFSCVRlcm1pbmFsIEVSQVNFIGNoYXJhY3RlciAoJ1wwMTAnID0gYmFja3NwYWNlKS4KKyMJS0lMTENIQVIJVGVybWluYWwgS0lMTCBjaGFyYWN0ZXIgKCdcMDI1JyA9IENUUkwvVSkuCisjCVVMSU1JVAkJRGVmYXVsdCAidWxpbWl0IiB2YWx1ZS4KKyMKKyMgVGhlIEVSQVNFQ0hBUiBhbmQgS0lMTENIQVIgYXJlIHVzZWQgb25seSBvbiBTeXN0ZW0gViBtYWNoaW5lcy4KKyMgVGhlIFVMSU1JVCBpcyB1c2VkIG9ubHkgaWYgdGhlIHN5c3RlbSBzdXBwb3J0cyBpdC4KKyMgKG5vdyBpdCB3b3JrcyB3aXRoIHNldHJsaW1pdCB0b287IHVsaW1pdCBpcyBpbiA1MTItYnl0ZSB1bml0cykKKyMKKyMgUHJlZml4IHRoZXNlIHZhbHVlcyB3aXRoICIwIiB0byBnZXQgb2N0YWwsICIweCIgdG8gZ2V0IGhleGFkZWNpbWFsLgorIworRVJBU0VDSEFSCTAxNzcKK0tJTExDSEFSCTAyNQorI1VMSU1JVAkJMjA5NzE1MgorCisjIERlZmF1bHQgaW5pdGlhbCAidW1hc2siIHZhbHVlIGZvciBub24tUEFNIGVuYWJsZWQgc3lzdGVtcy4KKyMgVU1BU0sgaXMgYWxzbyB1c2VkIGJ5IHVzZXJhZGQgYW5kIG5ld3VzZXJzIHRvIHNldCB0aGUgbW9kZSBvZiBuZXcgaG9tZQorIyBkaXJlY3Rvcmllcy4KKyMgMDIyIGlzIHRoZSBkZWZhdWx0IHZhbHVlLCBidXQgMDI3LCBvciBldmVuIDA3NywgY291bGQgYmUgY29uc2lkZXJlZAorIyBiZXR0ZXIgZm9yIHByaXZhY3kuIFRoZXJlIGlzIG5vIE9uZSBUcnVlIEFuc3dlciBoZXJlOiBlYWNoIHN5c2FkbWluCisjIG11c3QgbWFrZSB1cCBoZXIgbWluZC4KK1VNQVNLCQkwMjIKKworIworIyBQYXNzd29yZCBhZ2luZyBjb250cm9sczoKKyMKKyMJUEFTU19NQVhfREFZUwlNYXhpbXVtIG51bWJlciBvZiBkYXlzIGEgcGFzc3dvcmQgbWF5IGJlIHVzZWQuCisjCVBBU1NfTUlOX0RBWVMJTWluaW11bSBudW1iZXIgb2YgZGF5cyBhbGxvd2VkIGJldHdlZW4gcGFzc3dvcmQgY2hhbmdlcy4KKyMJUEFTU19NSU5fTEVOCU1pbmltdW0gYWNjZXB0YWJsZSBwYXNzd29yZCBsZW5ndGguCisjCVBBU1NfV0FSTl9BR0UJTnVtYmVyIG9mIGRheXMgd2FybmluZyBnaXZlbiBiZWZvcmUgYSBwYXNzd29yZCBleHBpcmVzLgorIworUEFTU19NQVhfREFZUwk5OTk5OQorUEFTU19NSU5fREFZUwkwCisjUEFTU19NSU5fTEVOCTUKK1BBU1NfV0FSTl9BR0UJNworCisjCisjIElmICJ5ZXMiLCB0aGUgdXNlciBtdXN0IGJlIGxpc3RlZCBhcyBhIG1lbWJlciBvZiB0aGUgZmlyc3QgZ2lkIDAgZ3JvdXAKKyMgaW4gL2V0Yy9ncm91cCAoY2FsbGVkICJyb290IiBvbiBtb3N0IExpbnV4IHN5c3RlbXMpIHRvIGJlIGFibGUgdG8gInN1IgorIyB0byB1aWQgMCBhY2NvdW50cy4gIElmIHRoZSBncm91cCBkb2Vzbid0IGV4aXN0IG9yIGlzIGVtcHR5LCBubyBvbmUKKyMgd2lsbCBiZSBhYmxlIHRvICJzdSIgdG8gdWlkIDAuCisjCisjU1VfV0hFRUxfT05MWQlubworCisjCisjIElmIGNvbXBpbGVkIHdpdGggY3JhY2tsaWIgc3VwcG9ydCwgd2hlcmUgYXJlIHRoZSBkaWN0aW9uYXJpZXMKKyMKKyNDUkFDS0xJQl9ESUNUUEFUSAkvdmFyL2NhY2hlL2NyYWNrbGliL2NyYWNrbGliX2RpY3QKKworIworIyBNaW4vbWF4IHZhbHVlcyBmb3IgYXV0b21hdGljIHVpZCBzZWxlY3Rpb24gaW4gdXNlcmFkZAorIworVUlEX01JTgkJCSAxMDAwCitVSURfTUFYCQkJNjAwMDAKKyMgU3lzdGVtIGFjY291bnRzCitTWVNfVUlEX01JTgkJICAxMDEKK1NZU19VSURfTUFYCQkgIDk5OQorCisjCisjIE1pbi9tYXggdmFsdWVzIGZvciBhdXRvbWF0aWMgZ2lkIHNlbGVjdGlvbiBpbiBncm91cGFkZAorIworR0lEX01JTgkJCSAxMDAwCitHSURfTUFYCQkJNjAwMDAKKyMgU3lzdGVtIGFjY291bnRzCitTWVNfR0lEX01JTgkJICAxMDEKK1NZU19HSURfTUFYCQkgIDk5OQorCisjCisjIE1heCBudW1iZXIgb2YgbG9naW4gcmV0cmllcyBpZiBwYXNzd29yZCBpcyBiYWQKKyMKK0xPR0lOX1JFVFJJRVMJCTUKKworIworIyBNYXggdGltZSBpbiBzZWNvbmRzIGZvciBsb2dpbgorIworTE9HSU5fVElNRU9VVAkJNjAKKworIworIyBNYXhpbXVtIG51bWJlciBvZiBhdHRlbXB0cyB0byBjaGFuZ2UgcGFzc3dvcmQgaWYgcmVqZWN0ZWQgKHRvbyBlYXN5KQorIworI1BBU1NfQ0hBTkdFX1RSSUVTCTUKKworIworIyBXYXJuIGFib3V0IHdlYWsgcGFzc3dvcmRzIChidXQgc3RpbGwgYWxsb3cgdGhlbSkgaWYgeW91IGFyZSByb290LgorIworI1BBU1NfQUxXQVlTX1dBUk4JeWVzCisKKyMKKyMgTnVtYmVyIG9mIHNpZ25pZmljYW50IGNoYXJhY3RlcnMgaW4gdGhlIHBhc3N3b3JkIGZvciBjcnlwdCgpLgorIyBEZWZhdWx0IGlzIDgsIGRvbid0IGNoYW5nZSB1bmxlc3MgeW91ciBjcnlwdCgpIGlzIGJldHRlci4KKyMgSWdub3JlZCBpZiBNRDVfQ1JZUFRfRU5BQiBzZXQgdG8gInllcyIuCisjCisjUEFTU19NQVhfTEVOCQk4CisKKyMKKyMgUmVxdWlyZSBwYXNzd29yZCBiZWZvcmUgY2hmbi9jaHNoIGNhbiBtYWtlIGFueSBjaGFuZ2VzLgorIworI0NIRk5fQVVUSAkJeWVzCisKKyMKKyMgV2hpY2ggZmllbGRzIG1heSBiZSBjaGFuZ2VkIGJ5IHJlZ3VsYXIgdXNlcnMgdXNpbmcgY2hmbiAtIHVzZQorIyBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycyAiZnJ3aCIgKGZ1bGwgbmFtZSwgcm9vbSBudW1iZXIsIHdvcmsKKyMgcGhvbmUsIGhvbWUgcGhvbmUpLiAgSWYgbm90IGRlZmluZWQsIG5vIGNoYW5nZXMgYXJlIGFsbG93ZWQuCisjIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCAieWVzIiA9ICJyd2giIGFuZCAibm8iID0gImZyd2giLgorIyAKK0NIRk5fUkVTVFJJQ1QJCXJ3aAorCisjCisjIFBhc3N3b3JkIHByb21wdCAoJXMgd2lsbCBiZSByZXBsYWNlZCBieSB1c2VyIG5hbWUpLgorIworIyBYWFggLSBpdCBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHlldCwgZm9yIG5vdyBsZWF2ZSBpdCBjb21tZW50ZWQgb3V0CisjIHRvIHVzZSB0aGUgZGVmYXVsdCB3aGljaCBpcyBqdXN0ICJQYXNzd29yZDogIi4KKyNMT0dJTl9TVFJJTkcJCSIlcydzIFBhc3N3b3JkOiAiCisKKyMKKyMgT25seSB3b3JrcyBpZiBjb21waWxlZCB3aXRoIE1ENV9DUllQVCBkZWZpbmVkOgorIyBJZiBzZXQgdG8gInllcyIsIG5ldyBwYXNzd29yZHMgd2lsbCBiZSBlbmNyeXB0ZWQgdXNpbmcgdGhlIE1ENS1iYXNlZAorIyBhbGdvcml0aG0gY29tcGF0aWJsZSB3aXRoIHRoZSBvbmUgdXNlZCBieSByZWNlbnQgcmVsZWFzZXMgb2YgRnJlZUJTRC4KKyMgSXQgc3VwcG9ydHMgcGFzc3dvcmRzIG9mIHVubGltaXRlZCBsZW5ndGggYW5kIGxvbmdlciBzYWx0IHN0cmluZ3MuCisjIFNldCB0byAibm8iIGlmIHlvdSBuZWVkIHRvIGNvcHkgZW5jcnlwdGVkIHBhc3N3b3JkcyB0byBvdGhlciBzeXN0ZW1zCisjIHdoaWNoIGRvbid0IHVuZGVyc3RhbmQgdGhlIG5ldyBhbGdvcml0aG0uICBEZWZhdWx0IGlzICJubyIuCisjCisjIE5vdGU6IElmIHlvdSB1c2UgUEFNLCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgYSB2YWx1ZSBjb25zaXN0ZW50IHdpdGgKKyMgdGhlIFBBTSBtb2R1bGVzIGNvbmZpZ3VyYXRpb24uCisjCisjIFRoaXMgdmFyaWFibGUgaXMgZGVwcmVjYXRlZC4gWW91IHNob3VsZCB1c2UgRU5DUllQVF9NRVRIT0QuCisjCisjTUQ1X0NSWVBUX0VOQUIJbm8KKworIworIyBPbmx5IHdvcmtzIGlmIGNvbXBpbGVkIHdpdGggRU5DUllQVE1FVEhPRF9TRUxFQ1QgZGVmaW5lZDoKKyMgSWYgc2V0IHRvIE1ENSAsIE1ENS1iYXNlZCBhbGdvcml0aG0gd2lsbCBiZSB1c2VkIGZvciBlbmNyeXB0aW5nIHBhc3N3b3JkCisjIElmIHNldCB0byBTSEEyNTYsIFNIQTI1Ni1iYXNlZCBhbGdvcml0aG0gd2lsbCBiZSB1c2VkIGZvciBlbmNyeXB0aW5nIHBhc3N3b3JkCisjIElmIHNldCB0byBTSEE1MTIsIFNIQTUxMi1iYXNlZCBhbGdvcml0aG0gd2lsbCBiZSB1c2VkIGZvciBlbmNyeXB0aW5nIHBhc3N3b3JkCisjIElmIHNldCB0byBERVMsIERFUy1iYXNlZCBhbGdvcml0aG0gd2lsbCBiZSB1c2VkIGZvciBlbmNyeXB0aW5nIHBhc3N3b3JkIChkZWZhdWx0KQorIyBPdmVycmlkZXMgdGhlIE1ENV9DUllQVF9FTkFCIG9wdGlvbgorIworIyBOb3RlOiBJZiB5b3UgdXNlIFBBTSwgaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIGEgdmFsdWUgY29uc2lzdGVudCB3aXRoCisjIHRoZSBQQU0gbW9kdWxlcyBjb25maWd1cmF0aW9uLgorIworI0VOQ1JZUFRfTUVUSE9EIERFUworCisjCisjIE9ubHkgd29ya3MgaWYgRU5DUllQVF9NRVRIT0QgaXMgc2V0IHRvIFNIQTI1NiBvciBTSEE1MTIuCisjCisjIERlZmluZSB0aGUgbnVtYmVyIG9mIFNIQSByb3VuZHMuCisjIFdpdGggYSBsb3Qgb2Ygcm91bmRzLCBpdCBpcyBtb3JlIGRpZmZpY3VsdCB0byBicnV0ZSBmb3JjaW5nIHRoZSBwYXNzd29yZC4KKyMgQnV0IG5vdGUgYWxzbyB0aGF0IGl0IG1vcmUgQ1BVIHJlc291cmNlcyB3aWxsIGJlIG5lZWRlZCB0byBhdXRoZW50aWNhdGUKKyMgdXNlcnMuCisjCisjIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBsaWJjIHdpbGwgY2hvb3NlIHRoZSBkZWZhdWx0IG51bWJlciBvZiByb3VuZHMgKDUwMDApLgorIyBUaGUgdmFsdWVzIG11c3QgYmUgaW5zaWRlIHRoZSAxMDAwLTk5OTk5OTk5OSByYW5nZS4KKyMgSWYgb25seSBvbmUgb2YgdGhlIE1JTiBvciBNQVggdmFsdWVzIGlzIHNldCwgdGhlbiB0aGlzIHZhbHVlIHdpbGwgYmUgdXNlZC4KKyMgSWYgTUlOID4gTUFYLCB0aGUgaGlnaGVzdCB2YWx1ZSB3aWxsIGJlIHVzZWQuCisjCisjIFNIQV9DUllQVF9NSU5fUk9VTkRTIDUwMDAKKyMgU0hBX0NSWVBUX01BWF9ST1VORFMgNTAwMAorCisjCisjIExpc3Qgb2YgZ3JvdXBzIHRvIGFkZCB0byB0aGUgdXNlcidzIHN1cHBsZW1lbnRhcnkgZ3JvdXAgc2V0CisjIHdoZW4gbG9nZ2luZyBpbiBvbiB0aGUgY29uc29sZSAoYXMgZGV0ZXJtaW5lZCBieSB0aGUgQ09OU09MRQorIyBzZXR0aW5nKS4gIERlZmF1bHQgaXMgbm9uZS4KKyMKKyMgVXNlIHdpdGggY2F1dGlvbiAtIGl0IGlzIHBvc3NpYmxlIGZvciB1c2VycyB0byBnYWluIHBlcm1hbmVudAorIyBhY2Nlc3MgdG8gdGhlc2UgZ3JvdXBzLCBldmVuIHdoZW4gbm90IGxvZ2dlZCBpbiBvbiB0aGUgY29uc29sZS4KKyMgSG93IHRvIGRvIGl0IGlzIGxlZnQgYXMgYW4gZXhlcmNpc2UgZm9yIHRoZSByZWFkZXIuLi4KKyMKKyNDT05TT0xFX0dST1VQUwkJZmxvcHB5OmF1ZGlvOmNkcm9tCisKKyMKKyMgU2hvdWxkIGxvZ2luIGJlIGFsbG93ZWQgaWYgd2UgY2FuJ3QgY2QgdG8gdGhlIGhvbWUgZGlyZWN0b3J5PworIyBEZWZhdWx0IGluIG5vLgorIworREVGQVVMVF9IT01FCXllcworCisjCisjIElmIHRoaXMgZmlsZSBleGlzdHMgYW5kIGlzIHJlYWRhYmxlLCBsb2dpbiBlbnZpcm9ubWVudCB3aWxsIGJlCisjIHJlYWQgZnJvbSBpdC4gIEV2ZXJ5IGxpbmUgc2hvdWxkIGJlIGluIHRoZSBmb3JtIG5hbWU9dmFsdWUuCisjCisjRU5WSVJPTl9GSUxFCS9ldGMvZW52aXJvbm1lbnQKKworIworIyBJZiBkZWZpbmVkLCB0aGlzIGNvbW1hbmQgaXMgcnVuIHdoZW4gcmVtb3ZpbmcgYSB1c2VyLgorIyBJdCBzaG91bGQgcmVtb3ZlIGFueSBhdC9jcm9uL3ByaW50IGpvYnMgZXRjLiBvd25lZCBieQorIyB0aGUgdXNlciB0byBiZSByZW1vdmVkIChwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50KS4KKyMKKyNVU0VSREVMX0NNRAkvdXNyL3NiaW4vdXNlcmRlbF9sb2NhbAorCisjCisjIEVuYWJsZSBzZXR0aW5nIG9mIHRoZSB1bWFzayBncm91cCBiaXRzIHRvIGJlIHRoZSBzYW1lIGFzIG93bmVyIGJpdHMKKyMgKGV4YW1wbGVzOiAwMjIgLT4gMDAyLCAwNzcgLT4gMDA3KSBmb3Igbm9uLXJvb3QgdXNlcnMsIGlmIHRoZSB1aWQgaXMKKyMgdGhlIHNhbWUgYXMgZ2lkLCBhbmQgdXNlcm5hbWUgaXMgdGhlIHNhbWUgYXMgdGhlIHByaW1hcnkgZ3JvdXAgbmFtZS4KKyMKKyMgVGhpcyBhbHNvIGVuYWJsZXMgdXNlcmRlbCB0byByZW1vdmUgdXNlciBncm91cHMgaWYgbm8gbWVtYmVycyBleGlzdC4KKyMKK1VTRVJHUk9VUFNfRU5BQiB5ZXMKKworIworIyBJZiBzZXQgdG8gYSBub24tbnVsIG51bWJlciwgdGhlIHNoYWRvdyB1dGlsaXRpZXMgd2lsbCBtYWtlIHN1cmUgdGhhdAorIyBncm91cHMgbmV2ZXIgaGF2ZSBtb3JlIHRoYW4gdGhpcyBudW1iZXIgb2YgdXNlcnMgb24gb25lIGxpbmUuCisjIFRoaXMgcGVybWl0IHRvIHN1cHBvcnQgc3BsaXQgZ3JvdXBzIChncm91cHMgc3BsaXQgaW50byBtdWx0aXBsZSBsaW5lcywKKyMgd2l0aCB0aGUgc2FtZSBncm91cCBJRCwgdG8gYXZvaWQgbGltaXRhdGlvbiBvZiB0aGUgbGluZSBsZW5ndGggaW4gdGhlCisjIGdyb3VwIGZpbGUpLgorIworIyAwIGlzIHRoZSBkZWZhdWx0IHZhbHVlIGFuZCBkaXNhYmxlcyB0aGlzIGZlYXR1cmUuCisjCisjTUFYX01FTUJFUlNfUEVSX0dST1VQCTAKKworIworIyBJZiB1c2VyYWRkIHNob3VsZCBjcmVhdGUgaG9tZSBkaXJlY3RvcmllcyBmb3IgdXNlcnMgYnkgZGVmYXVsdCAobm9uCisjIHN5c3RlbSB1c2VycyBvbmx5KQorIyBUaGlzIG9wdGlvbiBpcyBvdmVycmlkZGVuIHdpdGggdGhlIC1NIG9yIC1tIGZsYWdzIG9uIHRoZSB1c2VyYWRkIGNvbW1hbmQKKyMgbGluZS4KKyMKK0NSRUFURV9IT01FICAgICB5ZXMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2xvZ2luX2RlZnNfcGFtLnNlZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9sb2dpbl9kZWZzX3BhbS5zZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGExZjNiZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9sb2dpbl9kZWZzX3BhbS5zZWQKQEAgLTAsMCArMSwzMiBAQAorL15GQUlMTE9HX0VOQUIvYiBjb21tZW50CisvXkxBU1RMT0dfRU5BQi9iIGNvbW1lbnQKKy9eTUFJTF9DSEVDS19FTkFCL2IgY29tbWVudAorL15PQlNDVVJFX0NIRUNLU19FTkFCL2IgY29tbWVudAorL15QT1JUVElNRV9DSEVDS1NfRU5BQi9iIGNvbW1lbnQKKy9eUVVPVEFTX0VOQUIvYiBjb21tZW50CisvXk1PVERfRklMRS9iIGNvbW1lbnQKKy9eRlRNUF9GSUxFL2IgY29tbWVudAorL15OT0xPR0lOU19GSUxFL2IgY29tbWVudAorL15FTlZfSFovYiBjb21tZW50CisvXkVOVl9UWi9iIGNvbW1lbnQKKy9eUEFTU19NSU5fTEVOL2IgY29tbWVudAorL15TVV9XSEVFTF9PTkxZL2IgY29tbWVudAorL15DUkFDS0xJQl9ESUNUUEFUSC9iIGNvbW1lbnQKKy9eUEFTU19DSEFOR0VfVFJJRVMvYiBjb21tZW50CisvXlBBU1NfQUxXQVlTX1dBUk4vYiBjb21tZW50CisvXlBBU1NfTUFYX0xFTi9iIGNvbW1lbnQKKy9eUEFTU19NSU5fTEVOL2IgY29tbWVudAorL15DSEZOX0FVVEgvYiBjb21tZW50CisvXkNIU0hfQVVUSC9iIGNvbW1lbnQKKy9eSVNTVUVfRklMRS9iIGNvbW1lbnQKKy9eTE9HSU5fU1RSSU5HL2IgY29tbWVudAorL15VTElNSVQvYiBjb21tZW50CisvXkVOVklST05fRklMRS9iIGNvbW1lbnQKKworYiBleGl0CisKKzogY29tbWVudAorICBzOl46IzoKKworOiBleGl0CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9jaGZuIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL2NoZm4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFmNzY5OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9jaGZuCkBAIC0wLDAgKzEsMTQgQEAKKyMKKyMgVGhlIFBBTSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBTaGFkb3cgYGNoZm4nIHNlcnZpY2UKKyMKKworIyBUaGlzIGFsbG93cyByb290IHRvIGNoYW5nZSB1c2VyIGluZm9tYXRpb24gd2l0aG91dCBiZWluZworIyBwcm9tcHRlZCBmb3IgYSBwYXNzd29yZAorYXV0aAkJc3VmZmljaWVudAlwYW1fcm9vdG9rLnNvCisKKyMgVGhlIHN0YW5kYXJkIFVuaXggYXV0aGVudGljYXRpb24gbW9kdWxlcywgdXNlZCB3aXRoCisjIE5JUyAobWFuIG5zc3dpdGNoKSBhcyB3ZWxsIGFzIG5vcm1hbCAvZXRjL3Bhc3N3ZCBhbmQKKyMgL2V0Yy9zaGFkb3cgZW50cmllcy4KK2F1dGggICAgICAgaW5jbHVkZSAgICAgIGNvbW1vbi1hdXRoCithY2NvdW50ICAgIGluY2x1ZGUgICAgICBjb21tb24tYWNjb3VudAorc2Vzc2lvbiAgICBpbmNsdWRlICAgICAgY29tbW9uLXNlc3Npb24KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9jaHBhc3N3ZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9jaHBhc3N3ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTNlZmE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL2NocGFzc3dkCkBAIC0wLDAgKzEsNCBAQAorIyBUaGUgUEFNIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIFNoYWRvdyAnY2hwYXNzd2QnIHNlcnZpY2UKKyMKKworcGFzc3dvcmQgICBpbmNsdWRlICAgICAgY29tbW9uLXBhc3N3b3JkCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvY2hzaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9jaHNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYjE2OWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvY2hzaApAQCAtMCwwICsxLDE5IEBACisjCisjIFRoZSBQQU0gY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgU2hhZG93IGBjaHNoJyBzZXJ2aWNlCisjCisKKyMgVGhpcyB3aWxsIG5vdCBhbGxvdyBhIHVzZXIgdG8gY2hhbmdlIHRoZWlyIHNoZWxsIHVubGVzcworIyB0aGVpciBjdXJyZW50IG9uZSBpcyBsaXN0ZWQgaW4gL2V0Yy9zaGVsbHMuIFRoaXMga2VlcHMKKyMgYWNjb3VudHMgd2l0aCBzcGVjaWFsIHNoZWxscyBmcm9tIGNoYW5naW5nIHRoZW0uCithdXRoICAgICAgIHJlcXVpcmVkICAgcGFtX3NoZWxscy5zbworCisjIFRoaXMgYWxsb3dzIHJvb3QgdG8gY2hhbmdlIHVzZXIgc2hlbGwgd2l0aG91dCBiZWluZworIyBwcm9tcHRlZCBmb3IgYSBwYXNzd29yZAorYXV0aAkJc3VmZmljaWVudAlwYW1fcm9vdG9rLnNvCisKKyMgVGhlIHN0YW5kYXJkIFVuaXggYXV0aGVudGljYXRpb24gbW9kdWxlcywgdXNlZCB3aXRoCisjIE5JUyAobWFuIG5zc3dpdGNoKSBhcyB3ZWxsIGFzIG5vcm1hbCAvZXRjL3Bhc3N3ZCBhbmQKKyMgL2V0Yy9zaGFkb3cgZW50cmllcy4KK2F1dGggICAgICAgaW5jbHVkZSAgICAgIGNvbW1vbi1hdXRoCithY2NvdW50ICAgIGluY2x1ZGUgICAgICBjb21tb24tYWNjb3VudAorc2Vzc2lvbiAgICBpbmNsdWRlICAgICAgY29tbW9uLXNlc3Npb24KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9sb2dpbiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9sb2dpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzQwMDU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL2xvZ2luCkBAIC0wLDAgKzEsODEgQEAKKyMKKyMgVGhlIFBBTSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBTaGFkb3cgYGxvZ2luJyBzZXJ2aWNlCisjCisKKyMgRW5mb3JjZSBhIG1pbmltYWwgZGVsYXkgaW4gY2FzZSBvZiBmYWlsdXJlIChpbiBtaWNyb3NlY29uZHMpLgorIyAoUmVwbGFjZXMgdGhlIGBGQUlMX0RFTEFZJyBzZXR0aW5nIGZyb20gbG9naW4uZGVmcykKKyMgTm90ZSB0aGF0IG90aGVyIG1vZHVsZXMgbWF5IHJlcXVpcmUgYW5vdGhlciBtaW5pbWFsIGRlbGF5LiAoZm9yIGV4YW1wbGUsCisjIHRvIGRpc2FibGUgYW55IGRlbGF5LCB5b3Ugc2hvdWxkIGFkZCB0aGUgbm9kZWxheSBvcHRpb24gdG8gcGFtX3VuaXgpCithdXRoICAgICAgIG9wdGlvbmFsICAgcGFtX2ZhaWxkZWxheS5zbyAgZGVsYXk9MzAwMDAwMAorCisjIE91dHB1dHMgYW4gaXNzdWUgZmlsZSBwcmlvciB0byBlYWNoIGxvZ2luIHByb21wdCAoUmVwbGFjZXMgdGhlCisjIElTU1VFX0ZJTEUgb3B0aW9uIGZyb20gbG9naW4uZGVmcykuIFVuY29tbWVudCBmb3IgdXNlCisjIGF1dGggICAgICAgcmVxdWlyZWQgICBwYW1faXNzdWUuc28gaXNzdWU9L2V0Yy9pc3N1ZQorCisjIERpc2FsbG93cyByb290IGxvZ2lucyBleGNlcHQgb24gdHR5J3MgbGlzdGVkIGluIC9ldGMvc2VjdXJldHR5CisjIChSZXBsYWNlcyB0aGUgYENPTlNPTEUnIHNldHRpbmcgZnJvbSBsb2dpbi5kZWZzKQorIyBOb3RlIHRoYXQgaXQgaXMgaW5jbHVkZWQgYXMgYSAicmVxdWlzaXRlIiBtb2R1bGUuIE5vIHBhc3N3b3JkIHByb21wdHMgd2lsbAorIyBiZSBkaXNwbGF5ZWQgaWYgdGhpcyBtb2R1bGUgZmFpbHMgdG8gYXZvaWQgaGF2aW5nIHRoZSByb290IHBhc3N3b3JkCisjIHRyYW5zbWl0dGVkIG9uIHVuc2VjdXJlIHR0eXMuCisjIFlvdSBjYW4gY2hhbmdlIGl0IHRvIGEgInJlcXVpcmVkIiBtb2R1bGUgaWYgeW91IHRoaW5rIGl0IHBlcm1pdHMgdG8KKyMgZ3Vlc3MgdmFsaWQgdXNlciBuYW1lcyBvZiB5b3VyIHN5c3RlbSAoaW52YWxpZCB1c2VyIG5hbWVzIGFyZSBjb25zaWRlcmVkCisjIGFzIHBvc3NpYmx5IGJlaW5nIHJvb3QpLgorYXV0aCAgICAgICBbc3VjY2Vzcz1vayBpZ25vcmU9aWdub3JlIHVzZXJfdW5rbm93bj1pZ25vcmUgZGVmYXVsdD1kaWVdICBwYW1fc2VjdXJldHR5LnNvCisKKyMgRGlzYWxsb3dzIG90aGVyIHRoYW4gcm9vdCBsb2dpbnMgd2hlbiAvZXRjL25vbG9naW4gZXhpc3RzCisjIChSZXBsYWNlcyB0aGUgYE5PTE9HSU5TX0ZJTEUnIG9wdGlvbiBmcm9tIGxvZ2luLmRlZnMpCithdXRoICAgICAgIHJlcXVpc2l0ZSAgcGFtX25vbG9naW4uc28KKworIyBUaGlzIG1vZHVsZSBwYXJzZXMgZW52aXJvbm1lbnQgY29uZmlndXJhdGlvbiBmaWxlKHMpCisjIGFuZCBhbHNvIGFsbG93cyB5b3UgdG8gdXNlIGFuIGV4dGVuZGVkIGNvbmZpZworIyBmaWxlIC9ldGMvc2VjdXJpdHkvcGFtX2Vudi5jb25mLgorIyAKKyMgcGFyc2luZyAvZXRjL2Vudmlyb25tZW50IG5lZWRzICJyZWFkZW52PTEiCitzZXNzaW9uICAgICAgIHJlcXVpcmVkICAgcGFtX2Vudi5zbyByZWFkZW52PTEKKworIyBTdGFuZGFyZCBVbip4IGF1dGhlbnRpY2F0aW9uLgorYXV0aCAgICAgICBpbmNsdWRlICAgICAgY29tbW9uLWF1dGgKKworIyBUaGlzIGFsbG93cyBjZXJ0YWluIGV4dHJhIGdyb3VwcyB0byBiZSBncmFudGVkIHRvIGEgdXNlcgorIyBiYXNlZCBvbiB0aGluZ3MgbGlrZSB0aW1lIG9mIGRheSwgdHR5LCBzZXJ2aWNlLCBhbmQgdXNlci4KKyMgUGxlYXNlIGVkaXQgL2V0Yy9zZWN1cml0eS9ncm91cC5jb25mIHRvIGZpdCB5b3VyIG5lZWRzCisjIChSZXBsYWNlcyB0aGUgYENPTlNPTEVfR1JPVVBTJyBvcHRpb24gaW4gbG9naW4uZGVmcykKK2F1dGggICAgICAgb3B0aW9uYWwgICBwYW1fZ3JvdXAuc28KKworIyBVbmNvbW1lbnQgYW5kIGVkaXQgL2V0Yy9zZWN1cml0eS90aW1lLmNvbmYgaWYgeW91IG5lZWQgdG8gc2V0CisjIHRpbWUgcmVzdHJhaW5zdCBvbiBsb2dpbnMuCisjIChSZXBsYWNlcyB0aGUgYFBPUlRUSU1FX0NIRUNLU19FTkFCJyBvcHRpb24gZnJvbSBsb2dpbi5kZWZzCisjIGFzIHdlbGwgYXMgL2V0Yy9wb3J0dGltZSkKKyMgYWNjb3VudCAgICByZXF1aXNpdGUgIHBhbV90aW1lLnNvCisKKyMgVW5jb21tZW50IGFuZCBlZGl0IC9ldGMvc2VjdXJpdHkvYWNjZXNzLmNvbmYgaWYgeW91IG5lZWQgdG8KKyMgc2V0IGFjY2VzcyBsaW1pdHMuCisjIChSZXBsYWNlcyAvZXRjL2xvZ2luLmFjY2VzcyBmaWxlKQorIyBhY2NvdW50ICByZXF1aXJlZCAgICAgICBwYW1fYWNjZXNzLnNvCisKKyMgU2V0cyB1cCB1c2VyIGxpbWl0cyBhY2NvcmRpbmcgdG8gL2V0Yy9zZWN1cml0eS9saW1pdHMuY29uZgorIyAoUmVwbGFjZXMgdGhlIHVzZSBvZiAvZXRjL2xpbWl0cyBpbiBvbGQgbG9naW4pCitzZXNzaW9uICAgIHJlcXVpcmVkICAgcGFtX2xpbWl0cy5zbworCisjIFByaW50cyB0aGUgbGFzdCBsb2dpbiBpbmZvIHVwb24gc3VjY2VzZnVsIGxvZ2luCisjIChSZXBsYWNlcyB0aGUgYExBU1RMT0dfRU5BQicgb3B0aW9uIGZyb20gbG9naW4uZGVmcykKK3Nlc3Npb24gICAgb3B0aW9uYWwgICBwYW1fbGFzdGxvZy5zbworCisjIFByaW50cyB0aGUgbW90ZCB1cG9uIHN1Y2Nlc2Z1bCBsb2dpbgorIyAoUmVwbGFjZXMgdGhlIGBNT1REX0ZJTEUnIG9wdGlvbiBpbiBsb2dpbi5kZWZzKQorc2Vzc2lvbiAgICBvcHRpb25hbCAgIHBhbV9tb3RkLnNvCisKKyMgUHJpbnRzIHRoZSBzdGF0dXMgb2YgdGhlIHVzZXIncyBtYWlsYm94IHVwb24gc3VjY2VzZnVsIGxvZ2luCisjIChSZXBsYWNlcyB0aGUgYE1BSUxfQ0hFQ0tfRU5BQicgb3B0aW9uIGZyb20gbG9naW4uZGVmcykuIAorIworIyBUaGlzIGFsc28gZGVmaW5lcyB0aGUgTUFJTCBlbnZpcm9ubWVudCB2YXJpYWJsZQorIyBIb3dldmVyLCB1c2VyZGVsIGFsc28gbmVlZHMgTUFJTF9ESVIgYW5kIE1BSUxfRklMRSB2YXJpYWJsZXMKKyMgaW4gL2V0Yy9sb2dpbi5kZWZzIHRvIG1ha2Ugc3VyZSB0aGF0IHJlbW92aW5nIGEgdXNlciAKKyMgYWxzbyByZW1vdmVzIHRoZSB1c2VyJ3MgbWFpbCBzcG9vbCBmaWxlLgorIyBTZWUgY29tbWVudHMgaW4gL2V0Yy9sb2dpbi5kZWZzCitzZXNzaW9uICAgIG9wdGlvbmFsICAgcGFtX21haWwuc28gc3RhbmRhcmQKKworIyBTdGFuZGFyZCBVbip4IGFjY291bnQgYW5kIHNlc3Npb24KK2FjY291bnQgICAgaW5jbHVkZSAgICAgIGNvbW1vbi1hY2NvdW50CitwYXNzd29yZCAgIGluY2x1ZGUgICAgICBjb21tb24tcGFzc3dvcmQKK3Nlc3Npb24gICAgaW5jbHVkZSAgICAgIGNvbW1vbi1zZXNzaW9uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvbmV3dXNlcnMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvbmV3dXNlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFhM2RkZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9uZXd1c2VycwpAQCAtMCwwICsxLDQgQEAKKyMgVGhlIFBBTSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBTaGFkb3cgJ25ld3VzZXJzJyBzZXJ2aWNlCisjCisKK3Bhc3N3b3JkICAgaW5jbHVkZSAgICAgIGNvbW1vbi1wYXNzd29yZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL3Bhc3N3ZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9wYXNzd2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUzNDk5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9wYXNzd2QKQEAgLTAsMCArMSw1IEBACisjCisjIFRoZSBQQU0gY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgU2hhZG93IGBwYXNzd2QnIHNlcnZpY2UKKyMKKworcGFzc3dvcmQgICBpbmNsdWRlICAgICAgY29tbW9uLXBhc3N3b3JkCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvc3UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvc3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1OTBhMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9zdQpAQCAtMCwwICsxLDU3IEBACisjCisjIFRoZSBQQU0gY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgU2hhZG93IGBzdScgc2VydmljZQorIworCisjIFRoaXMgYWxsb3dzIHJvb3QgdG8gc3Ugd2l0aG91dCBwYXNzd29yZHMgKG5vcm1hbCBvcGVyYXRpb24pCithdXRoICAgICAgIHN1ZmZpY2llbnQgcGFtX3Jvb3Rvay5zbworCisjIFVuY29tbWVudCB0aGlzIHRvIGZvcmNlIHVzZXJzIHRvIGJlIGEgbWVtYmVyIG9mIGdyb3VwIHJvb3QKKyMgYmVmb3JlIHRoZXkgY2FuIHVzZSBgc3UnLiBZb3UgY2FuIGFsc28gYWRkICJncm91cD1mb28iCisjIHRvIHRoZSBlbmQgb2YgdGhpcyBsaW5lIGlmIHlvdSB3YW50IHRvIHVzZSBhIGdyb3VwIG90aGVyCisjIHRoYW4gdGhlIGRlZmF1bHQgInJvb3QiIChidXQgdGhpcyBtYXkgaGF2ZSBzaWRlIGVmZmVjdCBvZgorIyBkZW55aW5nICJyb290IiB1c2VyLCB1bmxlc3Mgc2hlJ3MgYSBtZW1iZXIgb2YgImZvbyIgb3IgZXhwbGljaXRseQorIyBwZXJtaXR0ZWQgZWFybGllciBieSBlLmcuICJzdWZmaWNpZW50IHBhbV9yb290b2suc28iKS4KKyMgKFJlcGxhY2VzIHRoZSBgU1VfV0hFRUxfT05MWScgb3B0aW9uIGZyb20gbG9naW4uZGVmcykKKyMgYXV0aCAgICAgICByZXF1aXJlZCAgIHBhbV93aGVlbC5zbworCisjIFVuY29tbWVudCB0aGlzIGlmIHlvdSB3YW50IHdoZWVsIG1lbWJlcnMgdG8gYmUgYWJsZSB0bworIyBzdSB3aXRob3V0IGEgcGFzc3dvcmQuCisjIGF1dGggICAgICAgc3VmZmljaWVudCBwYW1fd2hlZWwuc28gdHJ1c3QKKworIyBVbmNvbW1lbnQgdGhpcyBpZiB5b3Ugd2FudCBtZW1iZXJzIG9mIGEgc3BlY2lmaWMgZ3JvdXAgdG8gbm90CisjIGJlIGFsbG93ZWQgdG8gdXNlIHN1IGF0IGFsbC4KKyMgYXV0aCAgICAgICByZXF1aXJlZCAgIHBhbV93aGVlbC5zbyBkZW55IGdyb3VwPW5vc3UKKworIyBVbmNvbW1lbnQgYW5kIGVkaXQgL2V0Yy9zZWN1cml0eS90aW1lLmNvbmYgaWYgeW91IG5lZWQgdG8gc2V0CisjIHRpbWUgcmVzdHJhaW5zdCBvbiBzdSB1c2FnZS4KKyMgKFJlcGxhY2VzIHRoZSBgUE9SVFRJTUVfQ0hFQ0tTX0VOQUInIG9wdGlvbiBmcm9tIGxvZ2luLmRlZnMKKyMgYXMgd2VsbCBhcyAvZXRjL3BvcnR0aW1lKQorIyBhY2NvdW50ICAgIHJlcXVpc2l0ZSAgcGFtX3RpbWUuc28KKworIyBUaGlzIG1vZHVsZSBwYXJzZXMgZW52aXJvbm1lbnQgY29uZmlndXJhdGlvbiBmaWxlKHMpCisjIGFuZCBhbHNvIGFsbG93cyB5b3UgdG8gdXNlIGFuIGV4dGVuZGVkIGNvbmZpZworIyBmaWxlIC9ldGMvc2VjdXJpdHkvcGFtX2Vudi5jb25mLgorIyAKKyMgcGFyc2luZyAvZXRjL2Vudmlyb25tZW50IG5lZWRzICJyZWFkZW52PTEiCitzZXNzaW9uICAgICAgIHJlcXVpcmVkICAgcGFtX2Vudi5zbyByZWFkZW52PTEKKworIyBEZWZpbmVzIHRoZSBNQUlMIGVudmlyb25tZW50IHZhcmlhYmxlCisjIEhvd2V2ZXIsIHVzZXJkZWwgYWxzbyBuZWVkcyBNQUlMX0RJUiBhbmQgTUFJTF9GSUxFIHZhcmlhYmxlcworIyBpbiAvZXRjL2xvZ2luLmRlZnMgdG8gbWFrZSBzdXJlIHRoYXQgcmVtb3ZpbmcgYSB1c2VyIAorIyBhbHNvIHJlbW92ZXMgdGhlIHVzZXIncyBtYWlsIHNwb29sIGZpbGUuCisjIFNlZSBjb21tZW50cyBpbiAvZXRjL2xvZ2luLmRlZnMKKyMKKyMgIm5vcGVuIiBzdGFuZHMgdG8gYXZvaWQgcmVwb3J0aW5nIG5ldyBtYWlsIHdoZW4gc3UnaW5nIHRvIGFub3RoZXIgdXNlcgorc2Vzc2lvbiAgICBvcHRpb25hbCAgIHBhbV9tYWlsLnNvIG5vcGVuCisKKyMgU2V0cyB1cCB1c2VyIGxpbWl0cywgcGxlYXNlIHVuY29tbWVudCBhbmQgcmVhZCAvZXRjL3NlY3VyaXR5L2xpbWl0cy5jb25mCisjIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuCisjIChSZXBsYWNlcyB0aGUgdXNlIG9mIC9ldGMvbGltaXRzIGluIG9sZCBsb2dpbikKKyMgc2Vzc2lvbiAgICByZXF1aXJlZCAgIHBhbV9saW1pdHMuc28KKworIyBUaGUgc3RhbmRhcmQgVW5peCBhdXRoZW50aWNhdGlvbiBtb2R1bGVzLCB1c2VkIHdpdGgKKyMgTklTIChtYW4gbnNzd2l0Y2gpIGFzIHdlbGwgYXMgbm9ybWFsIC9ldGMvcGFzc3dkIGFuZAorIyAvZXRjL3NoYWRvdyBlbnRyaWVzLgorYXV0aCAgICAgICBpbmNsdWRlICAgICAgY29tbW9uLWF1dGgKK2FjY291bnQgICAgaW5jbHVkZSAgICAgIGNvbW1vbi1hY2NvdW50CitzZXNzaW9uICAgIGluY2x1ZGUgICAgICBjb21tb24tc2Vzc2lvbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3NlY3VyZXR0eSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9zZWN1cmV0dHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJlMzQxYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9zZWN1cmV0dHkKQEAgLTAsMCArMSwyMzggQEAKKyMgL2V0Yy9zZWN1cmV0dHk6IGxpc3Qgb2YgdGVybWluYWxzIG9uIHdoaWNoIHJvb3QgaXMgYWxsb3dlZCB0byBsb2dpbi4KKyMgU2VlIHNlY3VyZXR0eSg1KSBhbmQgbG9naW4oMSkuCitjb25zb2xlCisKKyMgU3RhbmRhcmQgc2VyaWFsIHBvcnRzCit0dHlTMAordHR5UzEKK3R0eVMyCit0dHlTMworCisjIEFSTSBBTUJBIFNvQ3MKK3R0eUFNMAordHR5QU0xCit0dHlBTTIKK3R0eUFNMwordHR5QU1BMAordHR5QU1BMQordHR5QU1BMgordHR5QU1BMworCisjIFFDT00gU29jcwordHR5SFNMMAordHR5SFNMMQordHR5SFNMMgordHR5SFNMMwordHR5TVNNMAordHR5TVNNMQordHR5TVNNMgorCisjIFNhbXN1bmcgQVJNIFNvQ3MKK3R0eVNBQzAKK3R0eVNBQzEKK3R0eVNBQzIKK3R0eVNBQzMKKworIyBTVE0gU29DcwordHR5QVMwCit0dHlBUzEKK3R0eUFTMgordHR5QVMzCisKKyMgVEkgT01BUCBTb0NzCit0dHlPMAordHR5TzEKK3R0eU8yCit0dHlPMworCisjIFhpbGlueCBaeW5xIFNvQwordHR5UFMwCit0dHlQUzEKKworIyBVU0IgZG9uZ2xlcwordHR5VVNCMAordHR5VVNCMQordHR5VVNCMgorCisjIFVTQiBzZXJpYWwgZ2FkZ2V0Cit0dHlHUzAKKworIyBQb3dlck1hYwordHR5UFowCit0dHlQWjEKK3R0eVBaMgordHR5UFozCisKKyMgRW1iZWRkZWQgTVBDIHBsYXRmb3JtcwordHR5UFNDMAordHR5UFNDMQordHR5UFNDMgordHR5UFNDMwordHR5UFNDNAordHR5UFNDNQorCisjIFBBLVJJU0MgbXV4IHBvcnRzCit0dHlCMAordHR5QjEKKworIyBTdGFuZGFyZCBoeXBlcnZpc29yIHZpcnR1YWwgY29uc29sZQoraHZjMAorCisjIE9sZHN0eWxlIFhlbiBjb25zb2xlCit4dmMwCisKKyMgU3RhbmRhcmQgY29uc29sZXMKK3R0eTEKK3R0eTIKK3R0eTMKK3R0eTQKK3R0eTUKK3R0eTYKK3R0eTcKK3R0eTgKK3R0eTkKK3R0eTEwCit0dHkxMQordHR5MTIKK3R0eTEzCit0dHkxNAordHR5MTUKK3R0eTE2Cit0dHkxNwordHR5MTgKK3R0eTE5Cit0dHkyMAordHR5MjEKK3R0eTIyCit0dHkyMwordHR5MjQKK3R0eTI1Cit0dHkyNgordHR5MjcKK3R0eTI4Cit0dHkyOQordHR5MzAKK3R0eTMxCit0dHkzMgordHR5MzMKK3R0eTM0Cit0dHkzNQordHR5MzYKK3R0eTM3Cit0dHkzOAordHR5MzkKK3R0eTQwCit0dHk0MQordHR5NDIKK3R0eTQzCit0dHk0NAordHR5NDUKK3R0eTQ2Cit0dHk0NwordHR5NDgKK3R0eTQ5Cit0dHk1MAordHR5NTEKK3R0eTUyCit0dHk1MwordHR5NTQKK3R0eTU1Cit0dHk1NgordHR5NTcKK3R0eTU4Cit0dHk1OQordHR5NjAKK3R0eTYxCit0dHk2MgordHR5NjMKKworIyBMb2NhbCBYIGRpc3BsYXlzIChhbGxvd3MgZW1wdHkgcGFzc3dvcmRzIHdpdGggcGFtX3VuaXgncyBudWxsb2tfc2VjdXJlKQorcHRzLzAKK3B0cy8xCitwdHMvMgorcHRzLzMKKworIyBFbWJlZGRlZCBGcmVlc2NhbGUgaS5NWCBwb3J0cwordHR5bXhjMAordHR5bXhjMQordHR5bXhjMgordHR5bXhjMwordHR5bXhjNAordHR5bXhjNQorCisjIEZyZWVzY2FsZSBscHVhcnQgcG9ydHMKK3R0eUxQMAordHR5TFAxCit0dHlMUDIKK3R0eUxQMwordHR5TFA0Cit0dHlMUDUKKworIyBTdGFuZGFyZCBzZXJpYWwgcG9ydHMsIHdpdGggZGV2ZnMKK3R0cy8wCit0dHMvMQorCisjIFN0YW5kYXJkIGNvbnNvbGVzLCB3aXRoIGRldmZzCit2Yy8xCit2Yy8yCit2Yy8zCit2Yy80Cit2Yy81Cit2Yy82Cit2Yy83Cit2Yy84Cit2Yy85Cit2Yy8xMAordmMvMTEKK3ZjLzEyCit2Yy8xMwordmMvMTQKK3ZjLzE1Cit2Yy8xNgordmMvMTcKK3ZjLzE4Cit2Yy8xOQordmMvMjAKK3ZjLzIxCit2Yy8yMgordmMvMjMKK3ZjLzI0Cit2Yy8yNQordmMvMjYKK3ZjLzI3Cit2Yy8yOAordmMvMjkKK3ZjLzMwCit2Yy8zMQordmMvMzIKK3ZjLzMzCit2Yy8zNAordmMvMzUKK3ZjLzM2Cit2Yy8zNwordmMvMzgKK3ZjLzM5Cit2Yy80MAordmMvNDEKK3ZjLzQyCit2Yy80MwordmMvNDQKK3ZjLzQ1Cit2Yy80NgordmMvNDcKK3ZjLzQ4Cit2Yy80OQordmMvNTAKK3ZjLzUxCit2Yy81MgordmMvNTMKK3ZjLzU0Cit2Yy81NQordmMvNTYKK3ZjLzU3Cit2Yy81OAordmMvNTkKK3ZjLzYwCit2Yy82MQordmMvNjIKK3ZjLzYzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvc2hhZG93LTQuMS4zLWRvdHMtaW4tdXNlcm5hbWVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3NoYWRvdy00LjEuMy1kb3RzLWluLXVzZXJuYW1lcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2JiMGE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3NoYWRvdy00LjEuMy1kb3RzLWluLXVzZXJuYW1lcy5wYXRjaApAQCAtMCwwICsxLDI3IEBACisjIGNvbW1pdCBtZXNzYWdlIGNvcGllZCBmcm9tIG9wZW5lbWJlZGRlZDoKKyMgICAgY29tbWl0IDI0NmM4MDYzN2IxMzVmM2ExMTNkMzE5YjE2MzQyMmY5ODE3NGVlNmMKKyMgICAgQXV0aG9yOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorIyAgICBEYXRlOiAgIFdlZCBKdW4gOSAxMzozNzowMyAyMDEwIC0wNzAwCisjCisjICAgIHNoYWRvdy00LjEuNC4yOiBBZGQgcGF0Y2hlcyB0byBzdXBwb3J0IGRvdHMgaW4gbG9naW4gaWQuCisjICAgIAorIyAgICBTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorIworIyBjb21tZW50IGFkZGVkIGJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMjAxMC0wOC0xMQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK0luZGV4OiBzaGFkb3ctNC4xLjQuMi9saWJtaXNjL2Noa25hbWUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNoYWRvdy00LjEuNC4yLm9yaWcvbGlibWlzYy9jaGtuYW1lLmMJMjAwOS0wNC0yOCAxMjoxNDowNC4wMDAwMDAwMDAgLTA3MDAKKysrKyBzaGFkb3ctNC4xLjQuMi9saWJtaXNjL2Noa25hbWUuYwkyMDEwLTA2LTAzIDE3OjQzOjIwLjYzODk3Mzg1NyAtMDcwMAorQEAgLTYxLDYgKzYxLDcgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfbmFtZSAoY29uc3QgY2hhciAqbgorIAkJICAgICAgKCAoJzAnIDw9ICpuYW1lKSAmJiAoJzknID49ICpuYW1lKSApIHx8CisgCQkgICAgICAoJ18nID09ICpuYW1lKSB8fAorIAkJICAgICAgKCctJyA9PSAqbmFtZSkgfHwKKysJCSAgICAgICgnLicgPT0gKm5hbWUpIHx8CisgCQkgICAgICAoICgnJCcgPT0gKm5hbWUpICYmICgnXDAnID09ICoobmFtZSArIDEpKSApCisgCQkgICAgICkpIHsKKyAJCQlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvc2hhZG93LXVwZGF0ZS1wYW0tY29uZi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9zaGFkb3ctdXBkYXRlLXBhbS1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZjgwNDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvc2hhZG93LXVwZGF0ZS1wYW0tY29uZi5wYXRjaApAQCAtMCwwICsxLDkxIEBACitUaGUgc3lzdGVtLWF1dGggaW4gdGhlIGNvbmZpZ3VyZSBmaWxlcyBpcyBmcm9tIEZlZG9yYSB3aGljaCBwdXQgYWxsIHRoZSA0IHBhbSB0eXBlIHJ1bGVzCitpbiBvbmUgZmlsZS4KK0luIHlvY3RvIGl0IG9iZXkgdGhlIHdheSB3aXRoIERlYmlhbi9VYnVudHUsIGFuZCB0aGUgbmFtZXMgYXJlIGNvbW1vbi1hdXRoLCBjb21tb24tYWNjb3VudCwKK2NvbW1vbi1wYXNzd29yZCBhbmQgY29tbW9uLXNlc3Npb24uCitTbyB1cGRhdGUgdGhlbSB3aXRoIG9lIHdheS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEthbmcgS2FpIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorCitkaWZmIC1OdXIgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvY2hhZ2Ugc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL2NoYWdlCistLS0gc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvY2hhZ2UJMjAxMS0wNy0yMCAxOTowMjoyNy4zODQ4NDQ5NTggKzA4MDAKKysrKyBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvY2hhZ2UJMjAxMS0wNy0yMCAxOTowMzowOC45NjQ4NDQ5NTggKzA4MDAKK0BAIC0xLDQgKzEsNCBAQAorICMlUEFNLTEuMAorIGF1dGgJCXN1ZmZpY2llbnQJcGFtX3Jvb3Rvay5zbworIGFjY291bnQJCXJlcXVpcmVkCXBhbV9wZXJtaXQuc28KKy1wYXNzd29yZAlpbmNsdWRlCQlzeXN0ZW0tYXV0aAorK3Bhc3N3b3JkCWluY2x1ZGUJCWNvbW1vbi1wYXNzd29yZAorZGlmZiAtTnVyIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL2NoZ3Bhc3N3ZCBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvY2hncGFzc3dkCistLS0gc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvY2hncGFzc3dkCTIwMTEtMDctMjAgMTk6MDI6MjcuMzg0ODQ0OTU4ICswODAwCisrKysgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL2NoZ3Bhc3N3ZAkyMDExLTA3LTIwIDE5OjAzOjI2LjU0NDg0NDk1OCArMDgwMAorQEAgLTEsNCArMSw0IEBACisgIyVQQU0tMS4wCisgYXV0aAkJc3VmZmljaWVudAlwYW1fcm9vdG9rLnNvCisgYWNjb3VudAkJcmVxdWlyZWQJcGFtX3Blcm1pdC5zbworLXBhc3N3b3JkCWluY2x1ZGUJCXN5c3RlbS1hdXRoCisrcGFzc3dvcmQJaW5jbHVkZQkJY29tbW9uLXBhc3N3b3JkCitkaWZmIC1OdXIgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvZ3JvdXBhZGQgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL2dyb3VwYWRkCistLS0gc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvZ3JvdXBhZGQJMjAxMS0wNy0yMCAxOTowMjoyNy4zODQ4NDQ5NTggKzA4MDAKKysrKyBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvZ3JvdXBhZGQJMjAxMS0wNy0yMCAxOTowNDowOC4xMjQ4NDQ5NTggKzA4MDAKK0BAIC0xLDQgKzEsNCBAQAorICMlUEFNLTEuMAorIGF1dGgJCXN1ZmZpY2llbnQJcGFtX3Jvb3Rvay5zbworIGFjY291bnQJCXJlcXVpcmVkCXBhbV9wZXJtaXQuc28KKy1wYXNzd29yZAlpbmNsdWRlCQlzeXN0ZW0tYXV0aAorK3Bhc3N3b3JkCWluY2x1ZGUJCWNvbW1vbi1wYXNzd29yZAorZGlmZiAtTnVyIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL2dyb3VwZGVsIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC9ncm91cGRlbAorLS0tIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL2dyb3VwZGVsCTIwMTEtMDctMjAgMTk6MDI6MjcuMzg0ODQ0OTU4ICswODAwCisrKysgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL2dyb3VwZGVsCTIwMTEtMDctMjAgMTk6MDQ6MjYuMTE0ODQ0OTU4ICswODAwCitAQCAtMSw0ICsxLDQgQEAKKyAjJVBBTS0xLjAKKyBhdXRoCQlzdWZmaWNpZW50CXBhbV9yb290b2suc28KKyBhY2NvdW50CQlyZXF1aXJlZAlwYW1fcGVybWl0LnNvCistcGFzc3dvcmQJaW5jbHVkZQkJc3lzdGVtLWF1dGgKKytwYXNzd29yZAlpbmNsdWRlCQljb21tb24tcGFzc3dvcmQKK2RpZmYgLU51ciBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy9ncm91cG1lbXMgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL2dyb3VwbWVtcworLS0tIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL2dyb3VwbWVtcwkyMDExLTA3LTIwIDE5OjAyOjI3LjM4NDg0NDk1OCArMDgwMAorKysrIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC9ncm91cG1lbXMJMjAxMS0wNy0yMCAxOTowNDozNS4wNzQ4NDQ5NTggKzA4MDAKK0BAIC0xLDQgKzEsNCBAQAorICMlUEFNLTEuMAorIGF1dGgJCXN1ZmZpY2llbnQJcGFtX3Jvb3Rvay5zbworIGFjY291bnQJCXJlcXVpcmVkCXBhbV9wZXJtaXQuc28KKy1wYXNzd29yZAlpbmNsdWRlCQlzeXN0ZW0tYXV0aAorK3Bhc3N3b3JkCWluY2x1ZGUJCWNvbW1vbi1wYXNzd29yZAorZGlmZiAtTnVyIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL2dyb3VwbW9kIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC9ncm91cG1vZAorLS0tIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL2dyb3VwbW9kCTIwMTEtMDctMjAgMTk6MDI6MjcuMzg0ODQ0OTU4ICswODAwCisrKysgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL2dyb3VwbW9kCTIwMTEtMDctMjAgMTk6MDQ6NDQuODY0ODQ0OTU4ICswODAwCitAQCAtMSw0ICsxLDQgQEAKKyAjJVBBTS0xLjAKKyBhdXRoCQlzdWZmaWNpZW50CXBhbV9yb290b2suc28KKyBhY2NvdW50CQlyZXF1aXJlZAlwYW1fcGVybWl0LnNvCistcGFzc3dvcmQJaW5jbHVkZQkJc3lzdGVtLWF1dGgKKytwYXNzd29yZAlpbmNsdWRlCQljb21tb24tcGFzc3dvcmQKK2RpZmYgLU51ciBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy91c2VyYWRkIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC91c2VyYWRkCistLS0gc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvdXNlcmFkZAkyMDExLTA3LTIwIDE5OjAyOjI3LjM4NDg0NDk1OCArMDgwMAorKysrIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC91c2VyYWRkCTIwMTEtMDctMjAgMTk6MDc6MjYuMjQ0ODQ0OTU4ICswODAwCitAQCAtMSw0ICsxLDQgQEAKKyAjJVBBTS0xLjAKKyBhdXRoCQlzdWZmaWNpZW50CXBhbV9yb290b2suc28KKyBhY2NvdW50CQlyZXF1aXJlZAlwYW1fcGVybWl0LnNvCistcGFzc3dvcmQJaW5jbHVkZQkJc3lzdGVtLWF1dGgKKytwYXNzd29yZAlpbmNsdWRlCQljb21tb24tcGFzc3dvcmQKK2RpZmYgLU51ciBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy91c2VyZGVsIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC91c2VyZGVsCistLS0gc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvdXNlcmRlbAkyMDExLTA3LTIwIDE5OjAyOjI3LjM4NDg0NDk1OCArMDgwMAorKysrIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC91c2VyZGVsCTIwMTEtMDctMjAgMTk6MDc6MzUuNzM0ODQ0OTU4ICswODAwCitAQCAtMSw0ICsxLDQgQEAKKyAjJVBBTS0xLjAKKyBhdXRoCQlzdWZmaWNpZW50CXBhbV9yb290b2suc28KKyBhY2NvdW50CQlyZXF1aXJlZAlwYW1fcGVybWl0LnNvCistcGFzc3dvcmQJaW5jbHVkZQkJc3lzdGVtLWF1dGgKKytwYXNzd29yZAlpbmNsdWRlCQljb21tb24tcGFzc3dvcmQKK2RpZmYgLU51ciBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy91c2VybW9kIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC91c2VybW9kCistLS0gc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvdXNlcm1vZAkyMDExLTA3LTIwIDE5OjAyOjI3LjM4NDg0NDk1OCArMDgwMAorKysrIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC91c2VybW9kCTIwMTEtMDctMjAgMTk6MDc6NDIuMDI0ODQ0OTU4ICswODAwCitAQCAtMSw0ICsxLDQgQEAKKyAjJVBBTS0xLjAKKyBhdXRoCQlzdWZmaWNpZW50CXBhbV9yb290b2suc28KKyBhY2NvdW50CQlyZXF1aXJlZAlwYW1fcGVybWl0LnNvCistcGFzc3dvcmQJaW5jbHVkZQkJc3lzdGVtLWF1dGgKKytwYXNzd29yZAlpbmNsdWRlCQljb21tb24tcGFzc3dvcmQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy91c2VybW9kLWZpeC1jb21waWxhdGlvbi1mYWlsdXJlLXdpdGgtc3ViaWRzLWRpc2FibGVkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3VzZXJtb2QtZml4LWNvbXBpbGF0aW9uLWZhaWx1cmUtd2l0aC1zdWJpZHMtZGlzYWJsZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdkYzE1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy91c2VybW9kLWZpeC1jb21waWxhdGlvbi1mYWlsdXJlLXdpdGgtc3ViaWRzLWRpc2FibGVkLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCit1c2VybW9kOiBmaXggY29tcGlsYXRpb24gZmFpbHVyZSB3aXRoIHN1YmlkcyBkaXNhYmxlZAorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvdXNlcm1vZC5jIHwgICAgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvdXNlcm1vZC5jIGIvc3JjL3VzZXJtb2QuYworaW5kZXggZTdkNDM1MS4uNjg1YjUwYSAxMDA2NDQKKy0tLSBhL3NyYy91c2VybW9kLmMKKysrKyBiL3NyYy91c2VybW9kLmMKK0BAIC0xMzYwLDcgKzEzNjAsNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2ZsYWdzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkgICAgICAgICBQcm9nLCAodW5zaWduZWQgbG9uZykgdXNlcl9uZXdpZCk7CisgCQlleGl0IChFX1VJRF9JTl9VU0UpOworIAl9CistCisrI2lmZGVmIEVOQUJMRV9TVUJJRFMKKyAJaWYgKCAgICh2ZmxnIHx8IFZmbGcpCisgCSAgICAmJiAhaXNfc3ViX3VpZCkgeworIAkJZnByaW50ZiAoc3RkZXJyLAorQEAgLTEzNzYsNiArMTM3Niw3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZmxhZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCSAgICAgICAgIFByb2csIHN1Yl9naWRfZGJuYW1lICgpLCAiLXciLCAiLVciKTsKKyAJCWV4aXQgKEVfVVNBR0UpOworIAl9CisrI2VuZGlmCisgfQorIAorIC8qCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvdy1zZWN1cmV0dHlfNC4yLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LXNlY3VyZXR0eV80LjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzhmODg4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvdy1zZWN1cmV0dHlfNC4yLjEuYmIKQEAgLTAsMCArMSwzOCBAQAorU1VNTUFSWSA9ICJQcm92aWRlciBvZiB0aGUgbWFjaGluZSBzcGVjaWZpYyBzZWN1cmV0dHkgZmlsZSIKK1NFQ1RJT04gPSAiYmFzZSB1dGlscyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK1BSID0gInIzIgorCitTUkNfVVJJID0gImZpbGU6Ly9zZWN1cmV0dHkiCisKK1MgPSAiJHtXT1JLRElSfSIKKworIyBTaW5jZSBTRVJJQUxfQ09OU09MRVMgaXMgbGlrZWx5IHRvIGJlIHNldCBmcm9tIHRoZSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24KK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK2RvX2luc3RhbGwgKCkgeworCSMgRW5zdXJlIHdlIGFkZCBhIHN1aXRhYmxlIHNlY3VyZXR0eSBmaWxlIHRvIHRoZSBwYWNrYWdlIHRoYXQgaGFzCisJIyBtb3N0IGNvbW1vbiBlbWJlZGRlZCBUVFlzIGRlZmluZWQuCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gMDQwMCAke1dPUktESVJ9L3NlY3VyZXR0eSAke0R9JHtzeXNjb25mZGlyfS9zZWN1cmV0dHkKKwlpZiBbICEgLXogIiR7U0VSSUFMX0NPTlNPTEVTfSIgXTsgdGhlbgorCQkjIE91ciBTRVJJQUxfQ09OU09MRVMgY29udGFpbnMgYSBiYXVkIHJhdGUgYW5kIHNvbWV0aW1lcyBleHRyYQorCQkjIG9wdGlvbnMgYXMgd2VsbC4gVGhlIGZvbGxvd2luZyBwZWFybCA6KSB0YWtlcyB0aGF0IGFuZCBjb252ZXJ0cworCQkjIGl0IGludG8gbmV3bGluZS1zZXBhcmF0ZWQgdHR5J3MgYW5kIGFwcGVuZHMgdGhlbSBpbnRvCisJCSMgc2VjdXJldHR5LiBTbyBpZiBhIG1hY2hpbmUgaGFzIGEgd2VpcmQgbG9va2luZyBjb25zb2xlIGRldmljZQorCQkjIG5vZGUgKGUuZy4gdHR5QU1BMCkgdGhhdCBzZWN1cmV0dHkgZG9lcyBub3Qga25vdywgaXQgd2lsbCBnZXQKKwkJIyBhcHBlbmRlZCB0byBzZWN1cmV0dHkgYW5kIHJvb3QgbG9naW5zIHdpbGwgYmUgYWxsb3dlZCBvbiB0aGF0CisJCSMgY29uc29sZS4KKwkJdG1wPSIke1NFUklBTF9DT05TT0xFU30iCisJCWZvciBlbnRyeSBpbiAkdG1wIDsgZG8KKwkJCXR0eWRldj1gZWNobyAiJGVudHJ5IiB8IHNlZCAtZSAncy9eWzAtOV0qXDsvLycgLWUgJ3MvXDsuKi8vJ2AKKwkJCWlmICEgZ3JlcCAtcSAkdHR5ZGV2ICR7RH0ke3N5c2NvbmZkaXJ9L3NlY3VyZXR0eTsgdGhlbgorCQkJCWVjaG8gJHR0eWRldiA+PiAke0R9JHtzeXNjb25mZGlyfS9zZWN1cmV0dHkKKwkJCWZpCisJCWRvbmUKKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvdy1zeXNyb290XzQuMi4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvdy1zeXNyb290XzQuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NzU2OWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LXN5c3Jvb3RfNC4yLjEuYmIKQEAgLTAsMCArMSwzNCBAQAorU1VNTUFSWSA9ICJTaGFkb3cgdXRpbHMgcmVxdWlyZW1lbnRzIGZvciB1c2VyYWRkLmJiY2xhc3MiCitIT01FUEFHRSA9ICJodHRwOi8vcGtnLXNoYWRvdy5hbGlvdGguZGViaWFuLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9hbGlvdGguZGViaWFuLm9yZy90cmFja2VyLz9ncm91cF9pZD0zMDU4MCIKK1NFQ1RJT04gPSAiYmFzZSB1dGlscyIKK0xJQ0VOU0UgPSAiQlNEIHwgQXJ0aXN0aWMtMS4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbG9naW4uZGVmc19zaGFkb3ctc3lzcm9vdDttZDU9MjVlMmYyZGU0ZGZjOGY5NjZhYzVjZGZjZTQ1Y2Q3ZDUiCisKK0RFUEVORFMgPSAiYmFzZS1wYXNzd2QiCisKK1BSID0gInIzIgorCisjIFRoZSBzb2xlIHB1cnBvc2Ugb2YgdGhpcyByZWNpcGUgaXMgdG8gcHJvdmlkZSB0aGUgL2V0Yy9sb2dpbi5kZWZzCisjIGZpbGUgZm9yIHRoZSB0YXJnZXQgc3lzcm9vdCAtIG5lZWRlZCBzbyB0aGUgc2hhZG93LW5hdGl2ZSB1dGlsaXRpZXMKKyMgY2FuIGFkZCBjdXN0b20gdXNlcnMvZ3JvdXBzIGZvciByZWNpcGVzIHRoYXQgdXNlIGluaGVyaXQgdXNlcmFkZC4KK1NSQ19VUkkgPSAiZmlsZTovL2xvZ2luLmRlZnNfc2hhZG93LXN5c3Jvb3QiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiODYwOGQ4Mjk0YWM4ODk3NGYyN2IyMGY5OTFjMGU3OSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MzNmNWJiNGVhMGM4OGM1NWYzNjQyYzk3ZjlkMjVjYmVmNzRmODJlMGI0Y2Y4ZDU0ZTdhZDZmOWY5Y2FhNzc4IgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLXAgLW0gNzU1ICR7U30vbG9naW4uZGVmc19zaGFkb3ctc3lzcm9vdCAke0R9JHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzCit9CisKK3N5c3Jvb3Rfc3RhZ2VfYWxsKCkgeworCXN5c3Jvb3Rfc3RhZ2VfZGlyICR7RH0gJHtTWVNST09UX0RFU1RESVJ9Cit9CisKKyMgZG9uJ3QgY3JlYXRlIGFueSBwYWNrYWdlcworIyBvdGhlcndpc2U6IGRidXMtZGV2IGRlcGVuZHMgb24gc2hhZG93LXN5c3Jvb3QtZGV2IHdoaWNoIGRlcGVuZHMgb24gc2hhZG93LXN5c3Jvb3QgCisjIGFuZCB0aGlzIGhhcyBhbm90aGVyIGNvcHkgb2YgL2V0Yy9sb2dpbi5kZWZzIGFscmVhZHkgcHJvdmlkZWQgYnkgc2hhZG93CitQQUNLQUdFUyA9ICIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3cuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMTNmZmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LmluYwpAQCAtMCwwICsxLDE5NiBAQAorU1VNTUFSWSA9ICJUb29scyB0byBjaGFuZ2UgYW5kIGFkbWluaXN0ZXIgcGFzc3dvcmQgYW5kIGdyb3VwIGRhdGEiCitIT01FUEFHRSA9ICJodHRwOi8vcGtnLXNoYWRvdy5hbGlvdGguZGViaWFuLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9hbGlvdGguZGViaWFuLm9yZy90cmFja2VyLz9ncm91cF9pZD0zMDU4MCIKK1NFQ1RJT04gPSAiYmFzZS91dGlscyIKK0xJQ0VOU0UgPSAiQlNEIHwgQXJ0aXN0aWMtMS4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWQ4MGZmMWMyYjQwODQzY2Y1NzY4ZTUyMjljZjE2ZTUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3Bhc3N3ZC5jO2JlZ2lubGluZT04O2VuZGxpbmU9MzA7bWQ1PWQ4Mzg4OGVhMTRhZTYxOTUxOTgyZDc3MTI1OTQ3NjYxIgorCitERVBFTkRTID0gInNoYWRvdy1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCitERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKK1NSQ19VUkkgPSAiaHR0cDovL3BrZy1zaGFkb3cuYWxpb3RoLmRlYmlhbi5vcmcvcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9zaGFkb3ctNC4xLjMtZG90cy1pbi11c2VybmFtZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdXNlcm1vZC1maXgtY29tcGlsYXRpb24tZmFpbHVyZS13aXRoLXN1Ymlkcy1kaXNhYmxlZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtaW5zdGFsbGF0aW9uLWZhaWx1cmUtd2l0aC1zdWJpZHMtZGlzYWJsZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1Eby1ub3QtcmVhZC1sb2dpbi5kZWZzLWJlZm9yZS1kb2luZy1jaHJvb3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2hlY2tfc2l6ZV9vZl91aWRfdF9hbmRfZ2lkX3RfdXNpbmdfQUNfQ0hFQ0tfU0laRU9GLnBhdGNoIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncGFtJywgJyR7UEFNX1NSQ19VUkl9JywgJycsIGQpfSBcCisgICAgICAgICAgICIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBcCisgICAgICAgICAgIGZpbGU6Ly9sb2dpbl9kZWZzX3BhbS5zZWQgXAorICAgICAgICAgICBmaWxlOi8vc2hhZG93LXVwZGF0ZS1wYW0tY29uZi5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLXN5c2xvZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hbGxvdy1mb3Itc2V0dGluZy1wYXNzd29yZC1pbi1jbGVhci10ZXh0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbW1vbmlvLmMtZml4LXVuZXhwZWN0ZWQtb3Blbi1mYWlsdXJlLWluLWNocm9vdC1lbnYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS11c2VyYWRkLmMtY3JlYXRlLXBhcmVudC1kaXJlY3Rvcmllcy13aGVuLW5lY2Vzc2FyeS5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZS1zeXNsb2cucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyYmZhZmU3ZDQ5NjI2ODJkMzFiNWViYTY1ZGJhNGZjOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzYjA4OTNkMTQ3Njc2Njg2OGNkODg5MjBmNGYxMjMxYzQ3OTU2NTJhYTQwNzU2OWZhZmY4MDJiY2RhMGYzZDQxIgorCisjIEFkZGl0aW9uYWwgUG9saWN5IGZpbGVzIGZvciBQQU0KK1BBTV9TUkNfVVJJID0gImZpbGU6Ly9wYW0uZC9jaGZuIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9jaHBhc3N3ZCBcCisgICAgICAgICAgICAgICBmaWxlOi8vcGFtLmQvY2hzaCBcCisgICAgICAgICAgICAgICBmaWxlOi8vcGFtLmQvbG9naW4gXAorICAgICAgICAgICAgICAgZmlsZTovL3BhbS5kL25ld3VzZXJzIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9wYXNzd2QgXAorICAgICAgICAgICAgICAgZmlsZTovL3BhbS5kL3N1IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRob3V0LWF1ZGl0IFwKKyAgICAgICAgICAgICAgICAgLS13aXRob3V0LWxpYmNyYWNrIFwKKyAgICAgICAgICAgICAgICAgLS13aXRob3V0LXNlbGludXggXAorICAgICAgICAgICAgICAgICAtLXdpdGgtZ3JvdXAtbmFtZS1tYXgtbGVuZ3RoPTI0IFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtc3Vib3JkaW5hdGUtaWRzPXllcyBcCisgICAgICAgICAgICAgICAgICR7TlNDRE9QVH0iCisKK05TQ0RPUFQgPSAiIgorTlNDRE9QVF9jbGFzcy1uYXRpdmUgPSAiLS13aXRob3V0LW5zY2QiCitOU0NET1BUX2NsYXNzLW5hdGl2ZXNkayA9ICItLXdpdGhvdXQtbnNjZCIKK05TQ0RPUFRfbGliYy11Y2xpYmMgPSAiIC0td2l0aG91dC1uc2NkIgorTlNDRE9QVF9saWJjLWdsaWJjID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1zcGF3bicsICctLXdpdGgtbnNjZCcsICctLXdpdGhvdXQtbnNjZCcsIGQpfSIKKyAgICAgICAgICAKK1BBTV9QTFVHSU5TID0gImxpYnBhbS1ydW50aW1lIFwKKyAgICAgICAgICAgICAgIHBhbS1wbHVnaW4tZmFpbGRlbGF5IFwKKyAgICAgICAgICAgICAgIHBhbS1wbHVnaW4tc2VjdXJldHR5IFwKKyAgICAgICAgICAgICAgIHBhbS1wbHVnaW4tbm9sb2dpbiBcCisgICAgICAgICAgICAgICBwYW0tcGx1Z2luLWVudiBcCisgICAgICAgICAgICAgICBwYW0tcGx1Z2luLWdyb3VwIFwKKyAgICAgICAgICAgICAgIHBhbS1wbHVnaW4tbGltaXRzIFwKKyAgICAgICAgICAgICAgIHBhbS1wbHVnaW4tbGFzdGxvZyBcCisgICAgICAgICAgICAgICBwYW0tcGx1Z2luLW1vdGQgXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1tYWlsIFwKKyAgICAgICAgICAgICAgIHBhbS1wbHVnaW4tc2hlbGxzIFwKKyAgICAgICAgICAgICAgIHBhbS1wbHVnaW4tcm9vdG9rIgorCitQQUNLQUdFQ09ORklHID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZSA9ICIiCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZXNkayA9ICIiCitQQUNLQUdFQ09ORklHW3BhbV0gPSAiLS13aXRoLWxpYnBhbSwtLXdpdGhvdXQtbGlicGFtLGxpYnBhbSwke1BBTV9QTFVHSU5TfSIKK1BBQ0tBR0VDT05GSUdbYXR0cl0gPSAiLS13aXRoLWF0dHIsLS13aXRob3V0LWF0dHIsYXR0ciIKK1BBQ0tBR0VDT05GSUdbYWNsXSA9ICItLXdpdGgtYWNsLC0td2l0aG91dC1hY2wsYWNsIgorCitSREVQRU5EU18ke1BOfSA9ICJzaGFkb3ctc2VjdXJldHR5IFwKKyAgICAgICAgICAgICAgICAgIGJhc2UtcGFzc3dkIFwKKyAgICAgICAgICAgICAgICAgIHV0aWwtbGludXgtc3Vsb2dpbiIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgREVTVERJUj0iJHtEfSIgc2JpbmRpcj0iJHtiYXNlX3NiaW5kaXJ9IiB1c2JpbmRpcj0iJHtzYmluZGlyfSIgaW5zdGFsbAorCisJIyBJbmZvIGRpciBsaXN0aW5nIGlzbid0IGludGVyZXN0aW5nIGF0IHRoaXMgcG9pbnQgc28gcmVtb3ZlIGl0IGlmIGl0IGV4aXN0cy4KKwlpZiBbIC1lICIke0R9JHtpbmZvZGlyfS9kaXIiIF07IHRoZW4KKwkJcm0gLWYgJHtEfSR7aW5mb2Rpcn0vZGlyCisJZmkKKworCSMgRW5hYmxlIENSRUFURV9IT01FIGJ5IGRlZmF1bHQuCisJc2VkIC1pICdzLyNDUkVBVEVfSE9NRS9DUkVBVEVfSE9NRS9nJyAke0R9JHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzCisKKwkjIEFzIHdlIGFyZSBvbiBhbiBlbWJlZGRlZCBzeXN0ZW0sIGVuc3VyZSB0aGUgdXNlcnMgbWFpbGJveCBpcyBpbgorCSMgfi8gbm90IC92YXIvc3Bvb2wvbWFpbCBieSBkZWZhdWx0LCBhcyB3aG8ga25vd3Mgd2hlcmUgb3IgaG93IGJpZworCSMgL3ZhciBpcy4gVGhlIHN5c3RlbSBNREEgd2lsbCBzZXQgdGhpcyBsYXRlciBhbnl3YXkuCisJc2VkIC1pICdzL01BSUxfRElSLyNNQUlMX0RJUi9nJyAke0R9JHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzCisJc2VkIC1pICdzLyNNQUlMX0ZJTEUvTUFJTF9GSUxFL2cnICR7RH0ke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMKKworCSMgRGlzYWJsZSBjaGVja2luZyBlbWFpbHMuCisJc2VkIC1pICdzL01BSUxfQ0hFQ0tfRU5BQi8jTUFJTF9DSEVDS19FTkFCL2cnICR7RH0ke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMKKworCSMgQ29tbWVudCBvdXQgU1VfTkFNRSB0byB3b3JrIGNvcnJlY3RseSB3aXRoIGJ1c3lib3gKKwkjIFNlZSBCdWcjNTM1OSBhbmQgQnVnIzcxNzMKKwlzZWQgLWkgJ3M6XlNVX05BTUU6I1NVX05BTUU6ZycgJHtEfSR7c3lzY29uZmRpcn0vbG9naW4uZGVmcworCisJIyBVc2UgcHJvcGVyIGVuY3J5cHRpb24gZm9yIHBhc3N3b3JkcworCXNlZCAtaSAncy9eI0VOQ1JZUFRfTUVUSE9ELiokL0VOQ1JZUFRfTUVUSE9EIFNIQTUxMi8nICR7RH0ke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMKKworCSMgTm93IHdlIGRvbid0IGhhdmUgYSBtYWlsIHN5c3RlbS4gRGlzYWJsZSBtYWlsIGNyZWF0aW9uIGZvciBub3cuCisJc2VkIC1pICdzOi9iaW4vYmFzaDovYmluL3NoOmcnICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdXNlcmFkZAorCXNlZCAtaSAnL15DUkVBVEVfTUFJTF9TUE9PTC8gczpeOiM6JyAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3VzZXJhZGQKKworCSMgVXNlIHVzZXJzIGdyb3VwIGJ5IGRlZmF1bHQKKwlzZWQgLWkgJ3MsXkdST1VQPTEwMDAsR1JPVVA9MTAwLGcnICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdXNlcmFkZAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIEVuc3VyZSB0aGF0IHRoZSBpbWFnZSBoYXMgYXMgYSAvdmFyL3Nwb29sL21haWwgZGlyIHNvIHNoYWRvdyBjYW4KKwkjIHB1dCBtYWlsYm94ZXMgdGhlcmUgaWYgdGhlIHVzZXIgcmVjb25maWd1cmVzIHNoYWRvdyB0byBpdHMKKwkjIGRlZmF1bHRzIChzZWUgc2VkIGJlbG93KS4KKwlpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3Nwb29sL21haWwKKworCWlmIFsgLWUgJHtXT1JLRElSfS9wYW0uZCBdOyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcGFtLmQvCisJCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3BhbS5kLyogJHtEfSR7c3lzY29uZmRpcn0vcGFtLmQvCisJCSMgUmVtb3ZlIGRlZmF1bHRzIHRoYXQgYXJlIG5vdCB1c2VkIHdoZW4gc3VwcG9ydGluZyBQQU0uCisJCXNlZCAtaSAtZiAke1dPUktESVJ9L2xvZ2luX2RlZnNfcGFtLnNlZCAke0R9JHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzCisJZmkKKworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0gJHtEfSR7YmFzZV9zYmluZGlyfSAke0R9JHtiYXNlX2JpbmRpcn0gCisKKwkjIE1vdmUgYmluYXJpZXMgdG8gdGhlIGxvY2F0aW9ucyB3ZSB3YW50CisJcm0gJHtEfSR7c2JpbmRpcn0vdmlncgorCWxuIC1zZiB2aXB3LiR7QlBOfSAke0R9JHtiYXNlX3NiaW5kaXJ9L3ZpZ3IKKwlpZiBbICIke3NiaW5kaXJ9IiAhPSAiJHtiYXNlX3NiaW5kaXJ9IiBdOyB0aGVuCisJCW12ICR7RH0ke3NiaW5kaXJ9L3ZpcHcgJHtEfSR7YmFzZV9zYmluZGlyfS92aXB3CisJZmkKKwlpZiBbICIke2JpbmRpcn0iICE9ICIke2Jhc2VfYmluZGlyfSIgXTsgdGhlbgorCQltdiAke0R9JHtiaW5kaXJ9L2xvZ2luICR7RH0ke2Jhc2VfYmluZGlyfS9sb2dpbgorCQltdiAke0R9JHtiaW5kaXJ9L3N1ICR7RH0ke2Jhc2VfYmluZGlyfS9zdQorCWZpCisKKwkjIEhhbmRsZSBsaW5rIHByb3Blcmx5IGFmdGVyIHJlbmFtZSwgb3RoZXJ3aXNlIG1pc3NpbmcgZmlsZXMgd291bGQKKwkjIGxlYWQgcnBtIGZhaWxlZCBkZXBlbmRlbmNpZXMuCisJbG4gLXNmIG5ld2dycC4ke0JQTn0gJHtEfSR7YmluZGlyfS9zZworfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tYmFzZSIKK0ZJTEVTXyR7UE59LWJhc2UgPSAiXAorICAgICR7YmFzZV9iaW5kaXJ9L2xvZ2luLnNoYWRvdyBcCisgICAgJHtiYXNlX2JpbmRpcn0vc3Uuc2hhZG93IFwKKyAgICAke2JpbmRpcn0vc2cgXAorICAgICR7YmluZGlyfS9uZXdncnAuc2hhZG93IFwKKyAgICAke2JpbmRpcn0vZ3JvdXBzLnNoYWRvdyBcCisgICAgJHtzeXNjb25mZGlyfS9wYW0uZC9sb2dpbiBcCisgICAgJHtzeXNjb25mZGlyfS9wYW0uZC9zdSBcCisgICAgJHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzIFwKKyIKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1iYXNlIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMjAwIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJwYXNzd2QgY2hmbiBjaHNoIGNocGFzc3dkIHZpcHcgdmlnciIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtjaHBhc3N3ZF0gPSAiJHtzYmluZGlyfS9jaHBhc3N3ZCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt2aXB3XSA9ICIke2Jhc2Vfc2JpbmRpcn0vdmlwdyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt2aWdyXSA9ICIke2Jhc2Vfc2JpbmRpcn0vdmlnciIKKworQUxURVJOQVRJVkVfJHtQTn0tYmFzZSA9ICJuZXdncnAgZ3JvdXBzIGxvZ2luIHN1IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2xvZ2luXSA9ICIke2Jhc2VfYmluZGlyfS9sb2dpbiIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzdV0gPSAiJHtiYXNlX2JpbmRpcn0vc3UiCisKK0FMVEVSTkFUSVZFXyR7UE59LWRvYyA9ICJwYXNzd2QuNSBnZXRzcG5hbS4zIGdyb3Vwcy4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3Bhc3N3ZC41XSA9ICIke21hbmRpcn0vbWFuNS9wYXNzd2QuNSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtnZXRzcG5hbS4zXSA9ICIke21hbmRpcn0vbWFuMy9nZXRzcG5hbS4zIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2dyb3Vwcy4xXSA9ICIke21hbmRpcn0vbWFuMS9ncm91cHMuMSIKKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlpZiBbICJ4JEQiICE9ICJ4IiBdOyB0aGVuCisJICByb290YXJnPSItLXJvb3QgJEQiCisJZWxzZQorCSAgcm9vdGFyZz0iIgorCWZpCisKKwlwd2NvbnYgJHJvb3RhcmcgfHwgZXhpdCAxCisJZ3JwY29udiAkcm9vdGFyZyB8fCBleGl0IDEKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3dfNC4yLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93XzQuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NzVjYjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93XzQuMi4xLmJiCkBAIC0wLDAgKzEsMTAgQEAKK3JlcXVpcmUgc2hhZG93LmluYworCisjIEJ1aWxkIGZhbHNlbHkgYXNzdW1lcyB0aGF0IGlmIC0tZW5hYmxlLWxpYnBhbSBpcyBzZXQsIHdlIGRvbid0IG5lZWQgdG8gbGluayBhZ2FpbnN0CisjIGxpYmNyeXB0LiBUaGlzIGJyZWFrcyBjaHNoLgorQlVJTERfTERGTEFHU19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsIGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1jcnlwdCcsICAnLWxjcnlwdCcsICcnLCBkKSwgJycsIGQpfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvMDAwMS1GaXgtZXJyb3ItY29uZmxpY3RpbmctdHlwZXMtZm9yLXBvc2l4X2Nsb3NlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvMDAwMS1GaXgtZXJyb3ItY29uZmxpY3RpbmctdHlwZXMtZm9yLXBvc2l4X2Nsb3NlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZWJmZTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy8wMDAxLUZpeC1lcnJvci1jb25mbGljdGluZy10eXBlcy1mb3ItcG9zaXhfY2xvc2UucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSA5NmViN2UyOTgyMjE1MTgyM2E2NmExZWI1OWYxZmE0YWVhZDVhZTA4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMzEgQXVnIDIwMTUgMDY6MzM6MjEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4ICBlcnJvcjogY29uZmxpY3RpbmcgdHlwZXMgZm9yICdwb3NpeF9jbG9zZScKKworRXhwb3NlZCB3aGlsZSBjb21waWxpbmcgb24gbXVzbAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIHNyYy9zbHBvc2lvLmMgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3NscG9zaW8uYyBiL3NyYy9zbHBvc2lvLmMKK2luZGV4IDljZTk2OTcuLjlmZjliZmUgMTAwNjQ0CistLS0gYS9zcmMvc2xwb3Npby5jCisrKysgYi9zcmMvc2xwb3Npby5jCitAQCAtMzYzLDcgKzM2Myw3IEBAIHN0YXRpYyBpbnQgcG9zaXhfY2xvc2VfZmQgKGludCAqZmQpCisgICAgcmV0dXJuIDA7CisgfQorIAorLXN0YXRpYyBpbnQgcG9zaXhfY2xvc2UgKFNMRmlsZV9GRF9UeXBlICpmKQorK3N0YXRpYyBpbnQgcG9zaXhfY2xvc2V4IChTTEZpbGVfRkRfVHlwZSAqZikKKyB7CisgICAgaW50IHN0YXR1cyA9IGRvX2Nsb3NlIChmKTsKKyAKK0BAIC0xMDAxLDcgKzEwMDEsNyBAQCBzdGF0aWMgU0xhbmdfSW50cmluX0Z1bl9UeXBlIEZkX05hbWVfVGFibGUgW10gPQorICAgIE1BS0VfSU5UUklOU0lDXzIoIndyaXRlIiwgcG9zaXhfd3JpdGUsIFYsIEYsIEIpLAorICAgIE1BS0VfSU5UUklOU0lDXzEoImR1cF9mZCIsIHBvc2l4X2R1cCwgViwgRiksCisgICAgTUFLRV9JTlRSSU5TSUNfMigiZHVwMl9mZCIsIHBvc2l4X2R1cDIsIEksIEYsIEkpLAorLSAgIE1BS0VfSU5UUklOU0lDXzEoImNsb3NlIiwgcG9zaXhfY2xvc2UsIEksIEYpLAorKyAgIE1BS0VfSU5UUklOU0lDXzEoImNsb3NlIiwgcG9zaXhfY2xvc2V4LCBJLCBGKSwKKyAgICBNQUtFX0lOVFJJTlNJQ18xKCJfY2xvc2UiLCBwb3NpeF9jbG9zZV9mZCwgSSwgSSksCisgI2lmIGRlZmluZWQoVFRZTkFNRV9SKQorICAgIE1BS0VfSU5UUklOU0lDXzAoInR0eW5hbWUiLCBwb3NpeF90dHluYW1lLCBWKSwKKy0tIAorMi41LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvY2hhbmdlLWNoYXItdHlwZS10by1zaWduZWQtY2hhci1pbi1tYWNyb3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9jaGFuZ2UtY2hhci10eXBlLXRvLXNpZ25lZC1jaGFyLWluLW1hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWExZmZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvY2hhbmdlLWNoYXItdHlwZS10by1zaWduZWQtY2hhci1pbi1tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwyMTggQEAKK3NsYW5nOiBjaGFuZ2UgY2hhciB0eXBlIHRvIHNpZ25lZCBjaGFyIGluIG1hY3JvcworCitDIGxhbmd1YWdlIGhhcyAzIGRpc3RpbmN0IGNoYXIgdHlwZXM6CisgICAgICAgICBjaGFyCisgICAgICAgICB1bnNpZ25lZCBjaGFyCisgICAgICAgICBzaWduZWQgY2hhcgorQSBjaGFyIGhhcyB0aGUgc2FtZSByYW5nZSBvZiB2YWx1ZXMgYXMgc2lnbmVkIGNoYXIgb24gWDg2LAorYnV0IHNhbWUgYXMgdW5zaWduZWQgY2hhciBvbiBBUk0gd2hpY2ggbWFkZSBTbGFuZydzIHR5cGVjYXN0KCkKK2FuZCBhcnJheV9zb3J0KCkgdW5hYmxlIHRvIHdvcmsgZm9yIGNoYXIgdmFsdWUgb24gQVJNLCBzaW5jZQorU2xhbmcgaXMgYXNzdW1pbmcgImNoYXIiIGFzICJzaWduZWQgY2hhciIuCisKK05vdyB3ZSBjaGFuZ2UgImNoYXIiIGFzICJzaWduZWQgY2hhciIgZXhwbGljaXRseSBpbgordXRpbC9ta3NsYXJpdGgyLnNsLCBhbmQgdXNlIGl0IHRvIHJlZ2VuZXJhdGUgc3JjL3NsYXJpdGgyLmluYworCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL3NsYXJpdGgyLmluYyAgICAgICB8ICAgNzIgKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHNyYy91dGlsL21rc2xhcml0aDIuc2wgfCAgICAyIC0KKyAyIGZpbGVzIGNoYW5nZWQsIDM3IGluc2VydGlvbnMoKyksIDM3IGRlbGV0aW9ucygtKQorCistLS0gYS9zcmMvdXRpbC9ta3NsYXJpdGgyLnNsCisrKysgYi9zcmMvdXRpbC9ta3NsYXJpdGgyLnNsCitAQCAtMSw3ICsxLDcgQEAKKyAjIS91c3IvYmluL2VudiBzbHNoCisgCisgcHJpdmF0ZSB2YXJpYWJsZSBDVHlwZXMgPQorLSAgWyJjaGFyIiwgInVuc2lnbmVkIGNoYXIiLCAic2hvcnQiLCAidW5zaWduZWQgc2hvcnQiLCAiaW50IiwgInVuc2lnbmVkIGludCIsCisrICBbInNpZ25lZCBjaGFyIiwgInVuc2lnbmVkIGNoYXIiLCAic2hvcnQiLCAidW5zaWduZWQgc2hvcnQiLCAiaW50IiwgInVuc2lnbmVkIGludCIsCisgICAgImxvbmciLCAidW5zaWduZWQgbG9uZyIsICJsb25nIGxvbmciLCAidW5zaWduZWQgbG9uZyBsb25nIiwKKyAgICAiZmxvYXQiLCAiZG91YmxlIiwgImxvbmcgZG91YmxlIl07CisgcHJpdmF0ZSB2YXJpYWJsZSBJc19JbnRfVHlwZSA9CistLS0gYS9zcmMvc2xhcml0aDIuaW5jCisrKysgYi9zcmMvc2xhcml0aDIuaW5jCitAQCAtMSw0MyArMSw0MyBAQAorIC8qIERPIE5PVCBFRElUIC0tIHRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IHNyYy91dGlsL21rc2xhcml0aDIuc2wgKi8KKy0vKiAtLS0tLS0tLS0tLS0gY2hhciAtLS0tLS0tLS0tICovCistREVGVU5fMShjb3B5X2NoYXJfdG9fY2hhcixjaGFyLGNoYXIpCisrLyogLS0tLS0tLS0tLS0tIHNpZ25lZCBjaGFyIC0tLS0tLS0tLS0gKi8KKytERUZVTl8xKGNvcHlfY2hhcl90b19jaGFyLHNpZ25lZCBjaGFyLHNpZ25lZCBjaGFyKQorICNkZWZpbmUgY2hhcl90b19jaGFyCU5VTEwKKyAjZGVmaW5lIGNvcHlfY2hhcl90b191Y2hhcgljb3B5X2NoYXJfdG9fY2hhcgorICNkZWZpbmUgY2hhcl90b191Y2hhcglOVUxMCistREVGVU5fMShjb3B5X2NoYXJfdG9fc2hvcnQsY2hhcixzaG9ydCkKKytERUZVTl8xKGNvcHlfY2hhcl90b19zaG9ydCxzaWduZWQgY2hhcixzaG9ydCkKKyAjZGVmaW5lIGNoYXJfdG9fc2hvcnQJTlVMTAorLURFRlVOXzEoY29weV9jaGFyX3RvX3VzaG9ydCxjaGFyLHVuc2lnbmVkIHNob3J0KQorK0RFRlVOXzEoY29weV9jaGFyX3RvX3VzaG9ydCxzaWduZWQgY2hhcix1bnNpZ25lZCBzaG9ydCkKKyAjZGVmaW5lIGNoYXJfdG9fdXNob3J0CU5VTEwKKy1ERUZVTl8xKGNvcHlfY2hhcl90b19pbnQsY2hhcixpbnQpCistREVGVU5fMihjaGFyX3RvX2ludCxjaGFyLGludCxjb3B5X2NoYXJfdG9faW50KQorLURFRlVOXzEoY29weV9jaGFyX3RvX3VpbnQsY2hhcix1bnNpZ25lZCBpbnQpCistREVGVU5fMihjaGFyX3RvX3VpbnQsY2hhcix1bnNpZ25lZCBpbnQsY29weV9jaGFyX3RvX3VpbnQpCistREVGVU5fMShjb3B5X2NoYXJfdG9fbG9uZyxjaGFyLGxvbmcpCistREVGVU5fMihjaGFyX3RvX2xvbmcsY2hhcixsb25nLGNvcHlfY2hhcl90b19sb25nKQorLURFRlVOXzEoY29weV9jaGFyX3RvX3Vsb25nLGNoYXIsdW5zaWduZWQgbG9uZykKKy1ERUZVTl8yKGNoYXJfdG9fdWxvbmcsY2hhcix1bnNpZ25lZCBsb25nLGNvcHlfY2hhcl90b191bG9uZykKKytERUZVTl8xKGNvcHlfY2hhcl90b19pbnQsc2lnbmVkIGNoYXIsaW50KQorK0RFRlVOXzIoY2hhcl90b19pbnQsc2lnbmVkIGNoYXIsaW50LGNvcHlfY2hhcl90b19pbnQpCisrREVGVU5fMShjb3B5X2NoYXJfdG9fdWludCxzaWduZWQgY2hhcix1bnNpZ25lZCBpbnQpCisrREVGVU5fMihjaGFyX3RvX3VpbnQsc2lnbmVkIGNoYXIsdW5zaWduZWQgaW50LGNvcHlfY2hhcl90b191aW50KQorK0RFRlVOXzEoY29weV9jaGFyX3RvX2xvbmcsc2lnbmVkIGNoYXIsbG9uZykKKytERUZVTl8yKGNoYXJfdG9fbG9uZyxzaWduZWQgY2hhcixsb25nLGNvcHlfY2hhcl90b19sb25nKQorK0RFRlVOXzEoY29weV9jaGFyX3RvX3Vsb25nLHNpZ25lZCBjaGFyLHVuc2lnbmVkIGxvbmcpCisrREVGVU5fMihjaGFyX3RvX3Vsb25nLHNpZ25lZCBjaGFyLHVuc2lnbmVkIGxvbmcsY29weV9jaGFyX3RvX3Vsb25nKQorICNpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQorLURFRlVOXzEoY29weV9jaGFyX3RvX2xsb25nLGNoYXIsbG9uZyBsb25nKQorLURFRlVOXzIoY2hhcl90b19sbG9uZyxjaGFyLGxvbmcgbG9uZyxjb3B5X2NoYXJfdG9fbGxvbmcpCisrREVGVU5fMShjb3B5X2NoYXJfdG9fbGxvbmcsc2lnbmVkIGNoYXIsbG9uZyBsb25nKQorK0RFRlVOXzIoY2hhcl90b19sbG9uZyxzaWduZWQgY2hhcixsb25nIGxvbmcsY29weV9jaGFyX3RvX2xsb25nKQorICNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKSAqLworICNpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQorLURFRlVOXzEoY29weV9jaGFyX3RvX3VsbG9uZyxjaGFyLHVuc2lnbmVkIGxvbmcgbG9uZykKKy1ERUZVTl8yKGNoYXJfdG9fdWxsb25nLGNoYXIsdW5zaWduZWQgbG9uZyBsb25nLGNvcHlfY2hhcl90b191bGxvbmcpCisrREVGVU5fMShjb3B5X2NoYXJfdG9fdWxsb25nLHNpZ25lZCBjaGFyLHVuc2lnbmVkIGxvbmcgbG9uZykKKytERUZVTl8yKGNoYXJfdG9fdWxsb25nLHNpZ25lZCBjaGFyLHVuc2lnbmVkIGxvbmcgbG9uZyxjb3B5X2NoYXJfdG9fdWxsb25nKQorICNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKSAqLworICNpZiBTTEFOR19IQVNfRkxPQVQKKy1ERUZVTl8xKGNvcHlfY2hhcl90b19mbG9hdCxjaGFyLGZsb2F0KQorLURFRlVOXzIoY2hhcl90b19mbG9hdCxjaGFyLGZsb2F0LGNvcHlfY2hhcl90b19mbG9hdCkKKytERUZVTl8xKGNvcHlfY2hhcl90b19mbG9hdCxzaWduZWQgY2hhcixmbG9hdCkKKytERUZVTl8yKGNoYXJfdG9fZmxvYXQsc2lnbmVkIGNoYXIsZmxvYXQsY29weV9jaGFyX3RvX2Zsb2F0KQorICNlbmRpZiAvKiBTTEFOR19IQVNfRkxPQVQgKi8KKyAjaWYgU0xBTkdfSEFTX0ZMT0FUCistREVGVU5fMShjb3B5X2NoYXJfdG9fZG91YmxlLGNoYXIsZG91YmxlKQorLURFRlVOXzIoY2hhcl90b19kb3VibGUsY2hhcixkb3VibGUsY29weV9jaGFyX3RvX2RvdWJsZSkKKytERUZVTl8xKGNvcHlfY2hhcl90b19kb3VibGUsc2lnbmVkIGNoYXIsZG91YmxlKQorK0RFRlVOXzIoY2hhcl90b19kb3VibGUsc2lnbmVkIGNoYXIsZG91YmxlLGNvcHlfY2hhcl90b19kb3VibGUpCisgI2VuZGlmIC8qIFNMQU5HX0hBU19GTE9BVCAqLworICNpZiBkZWZpbmVkKEhBVkVfTE9OR19ET1VCTEUpCistREVGVU5fMShjb3B5X2NoYXJfdG9fbGRvdWJsZSxjaGFyLGxvbmcgZG91YmxlKQorLURFRlVOXzIoY2hhcl90b19sZG91YmxlLGNoYXIsbG9uZyBkb3VibGUsY29weV9jaGFyX3RvX2xkb3VibGUpCisrREVGVU5fMShjb3B5X2NoYXJfdG9fbGRvdWJsZSxzaWduZWQgY2hhcixsb25nIGRvdWJsZSkKKytERUZVTl8yKGNoYXJfdG9fbGRvdWJsZSxzaWduZWQgY2hhcixsb25nIGRvdWJsZSxjb3B5X2NoYXJfdG9fbGRvdWJsZSkKKyAjZW5kaWYgLyogZGVmaW5lZChIQVZFX0xPTkdfRE9VQkxFKSAqLworICNpZiBTTEFOR19IQVNfRkxPQVQKKy1UT19ET1VCTEVfRlVOKGNoYXJfdG9fb25lX2RvdWJsZSxjaGFyKQorK1RPX0RPVUJMRV9GVU4oY2hhcl90b19vbmVfZG91YmxlLHNpZ25lZCBjaGFyKQorICNlbmRpZgorIAorIC8qIC0tLS0tLS0tLS0tLSB1bnNpZ25lZCBjaGFyIC0tLS0tLS0tLS0gKi8KK0BAIC04Miw3ICs4Miw3IEBAIFRPX0RPVUJMRV9GVU4odWNoYXJfdG9fb25lX2RvdWJsZSx1bnNpZ24KKyAjZW5kaWYKKyAKKyAvKiAtLS0tLS0tLS0tLS0gc2hvcnQgLS0tLS0tLS0tLSAqLworLURFRlVOXzEoY29weV9zaG9ydF90b19jaGFyLHNob3J0LGNoYXIpCisrREVGVU5fMShjb3B5X3Nob3J0X3RvX2NoYXIsc2hvcnQsc2lnbmVkIGNoYXIpCisgI2RlZmluZSBzaG9ydF90b19jaGFyCU5VTEwKKyBERUZVTl8xKGNvcHlfc2hvcnRfdG9fdWNoYXIsc2hvcnQsdW5zaWduZWQgY2hhcikKKyAjZGVmaW5lIHNob3J0X3RvX3VjaGFyCU5VTEwKK0BAIC0xMjMsNyArMTIzLDcgQEAgVE9fRE9VQkxFX0ZVTihzaG9ydF90b19vbmVfZG91YmxlLHNob3J0KQorICNlbmRpZgorIAorIC8qIC0tLS0tLS0tLS0tLSB1bnNpZ25lZCBzaG9ydCAtLS0tLS0tLS0tICovCistREVGVU5fMShjb3B5X3VzaG9ydF90b19jaGFyLHVuc2lnbmVkIHNob3J0LGNoYXIpCisrREVGVU5fMShjb3B5X3VzaG9ydF90b19jaGFyLHVuc2lnbmVkIHNob3J0LHNpZ25lZCBjaGFyKQorICNkZWZpbmUgdXNob3J0X3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV91c2hvcnRfdG9fdWNoYXIsdW5zaWduZWQgc2hvcnQsdW5zaWduZWQgY2hhcikKKyAjZGVmaW5lIHVzaG9ydF90b191Y2hhcglOVUxMCitAQCAtMTY0LDcgKzE2NCw3IEBAIFRPX0RPVUJMRV9GVU4odXNob3J0X3RvX29uZV9kb3VibGUsdW5zaWcKKyAjZW5kaWYKKyAKKyAvKiAtLS0tLS0tLS0tLS0gaW50IC0tLS0tLS0tLS0gKi8KKy1ERUZVTl8xKGNvcHlfaW50X3RvX2NoYXIsaW50LGNoYXIpCisrREVGVU5fMShjb3B5X2ludF90b19jaGFyLGludCxzaWduZWQgY2hhcikKKyAjZGVmaW5lIGludF90b19jaGFyCU5VTEwKKyBERUZVTl8xKGNvcHlfaW50X3RvX3VjaGFyLGludCx1bnNpZ25lZCBjaGFyKQorICNkZWZpbmUgaW50X3RvX3VjaGFyCU5VTEwKK0BAIC0yMDUsNyArMjA1LDcgQEAgVE9fRE9VQkxFX0ZVTihpbnRfdG9fb25lX2RvdWJsZSxpbnQpCisgI2VuZGlmCisgCisgLyogLS0tLS0tLS0tLS0tIHVuc2lnbmVkIGludCAtLS0tLS0tLS0tICovCistREVGVU5fMShjb3B5X3VpbnRfdG9fY2hhcix1bnNpZ25lZCBpbnQsY2hhcikKKytERUZVTl8xKGNvcHlfdWludF90b19jaGFyLHVuc2lnbmVkIGludCxzaWduZWQgY2hhcikKKyAjZGVmaW5lIHVpbnRfdG9fY2hhcglOVUxMCisgREVGVU5fMShjb3B5X3VpbnRfdG9fdWNoYXIsdW5zaWduZWQgaW50LHVuc2lnbmVkIGNoYXIpCisgI2RlZmluZSB1aW50X3RvX3VjaGFyCU5VTEwKK0BAIC0yNDYsNyArMjQ2LDcgQEAgVE9fRE9VQkxFX0ZVTih1aW50X3RvX29uZV9kb3VibGUsdW5zaWduZQorICNlbmRpZgorIAorIC8qIC0tLS0tLS0tLS0tLSBsb25nIC0tLS0tLS0tLS0gKi8KKy1ERUZVTl8xKGNvcHlfbG9uZ190b19jaGFyLGxvbmcsY2hhcikKKytERUZVTl8xKGNvcHlfbG9uZ190b19jaGFyLGxvbmcsc2lnbmVkIGNoYXIpCisgI2RlZmluZSBsb25nX3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV9sb25nX3RvX3VjaGFyLGxvbmcsdW5zaWduZWQgY2hhcikKKyAjZGVmaW5lIGxvbmdfdG9fdWNoYXIJTlVMTAorQEAgLTI4Nyw3ICsyODcsNyBAQCBUT19ET1VCTEVfRlVOKGxvbmdfdG9fb25lX2RvdWJsZSxsb25nKQorICNlbmRpZgorIAorIC8qIC0tLS0tLS0tLS0tLSB1bnNpZ25lZCBsb25nIC0tLS0tLS0tLS0gKi8KKy1ERUZVTl8xKGNvcHlfdWxvbmdfdG9fY2hhcix1bnNpZ25lZCBsb25nLGNoYXIpCisrREVGVU5fMShjb3B5X3Vsb25nX3RvX2NoYXIsdW5zaWduZWQgbG9uZyxzaWduZWQgY2hhcikKKyAjZGVmaW5lIHVsb25nX3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV91bG9uZ190b191Y2hhcix1bnNpZ25lZCBsb25nLHVuc2lnbmVkIGNoYXIpCisgI2RlZmluZSB1bG9uZ190b191Y2hhcglOVUxMCitAQCAtMzI5LDcgKzMyOSw3IEBAIFRPX0RPVUJMRV9GVU4odWxvbmdfdG9fb25lX2RvdWJsZSx1bnNpZ24KKyAKKyAvKiAtLS0tLS0tLS0tLS0gbG9uZyBsb25nIC0tLS0tLS0tLS0gKi8KKyAjaWYgZGVmaW5lZChIQVZFX0xPTkdfTE9ORykKKy1ERUZVTl8xKGNvcHlfbGxvbmdfdG9fY2hhcixsb25nIGxvbmcsY2hhcikKKytERUZVTl8xKGNvcHlfbGxvbmdfdG9fY2hhcixsb25nIGxvbmcsc2lnbmVkIGNoYXIpCisgI2RlZmluZSBsbG9uZ190b19jaGFyCU5VTEwKKyBERUZVTl8xKGNvcHlfbGxvbmdfdG9fdWNoYXIsbG9uZyBsb25nLHVuc2lnbmVkIGNoYXIpCisgI2RlZmluZSBsbG9uZ190b191Y2hhcglOVUxMCitAQCAtMzcyLDcgKzM3Miw3IEBAIFRPX0RPVUJMRV9GVU4obGxvbmdfdG9fb25lX2RvdWJsZSxsb25nIGwKKyAKKyAvKiAtLS0tLS0tLS0tLS0gdW5zaWduZWQgbG9uZyBsb25nIC0tLS0tLS0tLS0gKi8KKyAjaWYgZGVmaW5lZChIQVZFX0xPTkdfTE9ORykKKy1ERUZVTl8xKGNvcHlfdWxsb25nX3RvX2NoYXIsdW5zaWduZWQgbG9uZyBsb25nLGNoYXIpCisrREVGVU5fMShjb3B5X3VsbG9uZ190b19jaGFyLHVuc2lnbmVkIGxvbmcgbG9uZyxzaWduZWQgY2hhcikKKyAjZGVmaW5lIHVsbG9uZ190b19jaGFyCU5VTEwKKyBERUZVTl8xKGNvcHlfdWxsb25nX3RvX3VjaGFyLHVuc2lnbmVkIGxvbmcgbG9uZyx1bnNpZ25lZCBjaGFyKQorICNkZWZpbmUgdWxsb25nX3RvX3VjaGFyCU5VTEwKK0BAIC00MTUsNyArNDE1LDcgQEAgVE9fRE9VQkxFX0ZVTih1bGxvbmdfdG9fb25lX2RvdWJsZSx1bnNpZworIAorIC8qIC0tLS0tLS0tLS0tLSBmbG9hdCAtLS0tLS0tLS0tICovCisgI2lmIFNMQU5HX0hBU19GTE9BVAorLURFRlVOXzEoY29weV9mbG9hdF90b19jaGFyLGZsb2F0LGNoYXIpCisrREVGVU5fMShjb3B5X2Zsb2F0X3RvX2NoYXIsZmxvYXQsc2lnbmVkIGNoYXIpCisgI2RlZmluZSBmbG9hdF90b19jaGFyCU5VTEwKKyBERUZVTl8xKGNvcHlfZmxvYXRfdG9fdWNoYXIsZmxvYXQsdW5zaWduZWQgY2hhcikKKyAjZGVmaW5lIGZsb2F0X3RvX3VjaGFyCU5VTEwKK0BAIC00NTgsNyArNDU4LDcgQEAgVE9fRE9VQkxFX0ZVTihmbG9hdF90b19vbmVfZG91YmxlLGZsb2F0KQorIAorIC8qIC0tLS0tLS0tLS0tLSBkb3VibGUgLS0tLS0tLS0tLSAqLworICNpZiBTTEFOR19IQVNfRkxPQVQKKy1ERUZVTl8xKGNvcHlfZG91YmxlX3RvX2NoYXIsZG91YmxlLGNoYXIpCisrREVGVU5fMShjb3B5X2RvdWJsZV90b19jaGFyLGRvdWJsZSxzaWduZWQgY2hhcikKKyAjZGVmaW5lIGRvdWJsZV90b19jaGFyCU5VTEwKKyBERUZVTl8xKGNvcHlfZG91YmxlX3RvX3VjaGFyLGRvdWJsZSx1bnNpZ25lZCBjaGFyKQorICNkZWZpbmUgZG91YmxlX3RvX3VjaGFyCU5VTEwKK0BAIC01MDEsNyArNTAxLDcgQEAgVE9fRE9VQkxFX0ZVTihkb3VibGVfdG9fb25lX2RvdWJsZSxkb3VibAorIAorIC8qIC0tLS0tLS0tLS0tLSBsb25nIGRvdWJsZSAtLS0tLS0tLS0tICovCisgI2lmIGRlZmluZWQoSEFWRV9MT05HX0RPVUJMRSkKKy1ERUZVTl8xKGNvcHlfbGRvdWJsZV90b19jaGFyLGxvbmcgZG91YmxlLGNoYXIpCisrREVGVU5fMShjb3B5X2xkb3VibGVfdG9fY2hhcixsb25nIGRvdWJsZSxzaWduZWQgY2hhcikKKyAjZGVmaW5lIGxkb3VibGVfdG9fY2hhcglOVUxMCisgREVGVU5fMShjb3B5X2xkb3VibGVfdG9fdWNoYXIsbG9uZyBkb3VibGUsdW5zaWduZWQgY2hhcikKKyAjZGVmaW5lIGxkb3VibGVfdG9fdWNoYXIJTlVMTAorQEAgLTU0NSw3ICs1NDUsNyBAQCBUT19ET1VCTEVfRlVOKGxkb3VibGVfdG9fb25lX2RvdWJsZSxsb25nCisgI2lmIFNMQU5HX0hBU19GTE9BVAorIHN0YXRpYyBUb19Eb3VibGVfRnVuX1RhYmxlX1R5cGUgVG9fRG91YmxlX0Z1bl9UYWJsZSBbTUFYX0FSSVRITUVUSUNfVFlQRVNdID0KKyB7CistICAge3NpemVvZihjaGFyKSwgY2hhcl90b19vbmVfZG91YmxlfSwKKysgICB7c2l6ZW9mKHNpZ25lZCBjaGFyKSwgY2hhcl90b19vbmVfZG91YmxlfSwKKyAgICB7c2l6ZW9mKHVuc2lnbmVkIGNoYXIpLCB1Y2hhcl90b19vbmVfZG91YmxlfSwKKyAgICB7c2l6ZW9mKHNob3J0KSwgc2hvcnRfdG9fb25lX2RvdWJsZX0sCisgICAge3NpemVvZih1bnNpZ25lZCBzaG9ydCksIHVzaG9ydF90b19vbmVfZG91YmxlfSwKK0BAIC01ODMsNyArNTgzLDcgQEAgc3RhdGljIFRvX0RvdWJsZV9GdW5fVGFibGVfVHlwZSBUb19Eb3VibAorIAorIHN0YXRpYyBCaW5hcnlfTWF0cml4X1R5cGUgQmluYXJ5X01hdHJpeCBbTUFYX0FSSVRITUVUSUNfVFlQRVNdW01BWF9BUklUSE1FVElDX1RZUEVTXSA9CisgeworLSAgIC8qIGNoYXIgKi8KKysgICAvKiBzaWduZWQgY2hhciAqLworICAgIHsKKyAgICAgIHsoRlZPSURfU1RBUiljb3B5X2NoYXJfdG9fY2hhciwgY2hhcl90b19jaGFyfSwKKyAgICAgIHsoRlZPSURfU1RBUiljb3B5X2NoYXJfdG9fdWNoYXIsIGNoYXJfdG9fdWNoYXJ9LApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvZml4LWNoZWNrLXBjcmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9maXgtY2hlY2stcGNyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzE1NTNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvZml4LWNoZWNrLXBjcmUucGF0Y2gKQEAgLTAsMCArMSwxMDggQEAKK2ZpeCB0aGUgcGNyZSBleGlzdGVuY2UgY2hlY2tpbmcKKword2hlbiBjaGVjayBpZiB0aGVyZSBpcyBwY3JlLCB0aGUgY29uZmlndXJlIGZpbGUgYWx3YXlzIGNoZWNrCit0aGUgaG9zdCBkaXIuIG5vdyB3ZSBtYWtlIGl0IHdvcmsgYnkgYWRkaW5nIGNvcnJlY3QgcHJlZml4IGZvcgorY3Jvc3MtY29tcGlsZSBlbnZpcm9ubWVudC4KKworV2hlbiBlbmFibGUgcGNyZS1tb2R1bGUsIHdlIHNlZSBhIFFBIHdhcm5pbmcgYmVjYXVzZSBycGF0aHMKK2hhcmRjb2RlZCBpbnRvIHRoZSBidWlsZCwgcnBhdGhzIGFyZSBub3QgbmVlZGVkLCBzbyBsZXRzIHR1cm4KK3RoaXMgb2ZmLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IFJveS5MaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8ICAgNjAgKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDU0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCBmMTU4NmMzLi5kMjI4MTRmIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC02OTkxLDYgKzY5OTEsNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdGhlIHBjcmUgbGlicmFyeSBhbmQgaGVhZGVyIGZpbGVzIC4uLiAiID4mNjsgfQorIAkgL3Vzci9pbmNsdWRlL3BjcmUsL3Vzci9saWIgXAorIAkgL3Vzci9wY3JlL2luY2x1ZGUsL3Vzci9wY3JlL2xpYiBcCisgCSAvdXNyL2luY2x1ZGUsL3Vzci9saWIgXAorKwkgL3Vzci9pbmNsdWRlLC91c3IvbGliNjQgXAorIAkgL29wdC9pbmNsdWRlL3BjcmUsL29wdC9saWIgXAorIAkgL29wdC9wY3JlL2luY2x1ZGUsL29wdC9wY3JlL2xpYiBcCisgCSAvb3B0L2luY2x1ZGUsL29wdC9saWIiCitAQCAtNzAyMSwxNCArNzAyMiwxNCBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdGhlIHBjcmUgbGlicmFyeSBhbmQgaGVhZGVyIGZpbGVzIC4uLiAiID4mNjsgfQorICAgICAgICAgeGluY2Rpcj1gZWNobyAkaW5jbHVkZV9hbmRfbGliIHwgdHIgJywnICcgJyB8IGF3ayAne3ByaW50ICQxfSdgCisgCXhsaWJkaXI9YGVjaG8gJGluY2x1ZGVfYW5kX2xpYiB8IHRyICcsJyAnICcgfCBhd2sgJ3twcmludCAkMn0nYAorIAlmb3VuZD0wCistCWlmIHRlc3QgLXIgJHhpbmNkaXIvJHhpbmNmaWxlCisrCWlmIHRlc3QgLXIgJFBLR19DT05GSUdfU1lTUk9PVF9ESVIvJHhpbmNkaXIvJHhpbmNmaWxlCisgCXRoZW4KKyAJICBmb3IgRSBpbiAkZXh0cworIAkgIGRvCistCSAgICBpZiB0ZXN0IC1yICIkeGxpYmRpci8keGxpYmZpbGUuJEUiCisrCSAgICBpZiB0ZXN0IC1yICIkUEtHX0NPTkZJR19TWVNST09UX0RJUi8keGxpYmRpci8keGxpYmZpbGUuJEUiCisgCSAgICB0aGVuCistCSAgICAgIGpkX3BjcmVfaW5jbHVkZV9kaXI9IiR4aW5jZGlyIgorLQkgICAgICBqZF9wY3JlX2xpYnJhcnlfZGlyPSIkeGxpYmRpciIKKysJICAgICAgamRfcGNyZV9pbmNsdWRlX2Rpcj0iJFBLR19DT05GSUdfU1lTUk9PVF9ESVIvJHhpbmNkaXIiCisrCSAgICAgIGpkX3BjcmVfbGlicmFyeV9kaXI9IiRQS0dfQ09ORklHX1NZU1JPT1RfRElSLyR4bGliZGlyIgorIAkgICAgICBqZF93aXRoX3BjcmVfbGlicmFyeT0ieWVzIgorIAkgICAgICBmb3VuZD0xCisgCSAgICAgIGJyZWFrCitAQCAtNzA1NCw1NiArNzA1NSw3IEBAICRhc19lY2hvICJ5ZXM6ICRqZF9wY3JlX2xpYnJhcnlfZGlyIGFuZCAkamRfcGNyZV9pbmNsdWRlX2RpciIgPiY2OyB9CisgICAgIHRoZW4KKyAgICAgICBQQ1JFX0xJQj0iIgorICAgICBlbHNlCistCistaWYgdGVzdCAiWCRqZF9wY3JlX2xpYnJhcnlfZGlyIiAhPSAiWCIKKy10aGVuCistICBpZiB0ZXN0ICJYJFJQQVRIIiA9ICJYIgorLSAgdGhlbgorLQorLWNhc2UgIiRob3N0X29zIiBpbgorLSAgKmxpbnV4Knwqc29sYXJpcyogKQorLSAgICBpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzCistICAgIHRoZW4KKy0gICAgICBpZiB0ZXN0ICJYJGFjX1Jfbm9zcGFjZSIgPSAiWG5vIgorLSAgICAgIHRoZW4KKy0gICAgICAgIFJQQVRIPSItV2wsLVIsIgorLSAgICAgIGVsc2UKKy0gICAgICAgIFJQQVRIPSItV2wsLVIiCistICAgICAgZmkKKy0gICAgZWxzZQorLSAgICAgIGlmIHRlc3QgIlgkYWNfUl9ub3NwYWNlIiA9ICJYbm8iCistICAgICAgdGhlbgorLSAgICAgICAgUlBBVEg9Ii1SICIKKy0gICAgICBlbHNlCistCVJQQVRIPSItUiIKKy0gICAgICBmaQorLSAgICBmaQorLSAgOzsKKy0gICpvc2YqfCpvcGVuYnNkKikKKy0gICAgaWYgdGVzdCAiWCRHQ0MiID0gWHllcworLSAgICB0aGVuCistICAgICAgUlBBVEg9Ii1XbCwtcnBhdGgsIgorLSAgICBlbHNlCistICAgICAgUlBBVEg9Ii1ycGF0aCAiCistICAgIGZpCistICA7OworLSAgKm5ldGJzZCopCistICAgIGlmIHRlc3QgIlgkR0NDIiA9IFh5ZXMKKy0gICAgdGhlbgorLSAgICAgIFJQQVRIPSItV2wsLVIiCistICAgIGZpCistICA7OworLWVzYWMKKy0KKy0gICAgaWYgdGVzdCAiWCRSUEFUSCIgIT0gIlgiCistICAgIHRoZW4KKy0gICAgICBSUEFUSD0iJFJQQVRIJGpkX3BjcmVfbGlicmFyeV9kaXIiCistICAgIGZpCistICBlbHNlCistICAgIFJQQVRIPSIkUlBBVEg6JGpkX3BjcmVfbGlicmFyeV9kaXIiCistICBmaQorLWZpCistCisrICAgICAgUlBBVEg9IiIKKyAgICAgZmkKKyAKKyAgICAgUENSRV9JTkM9LUkkamRfcGNyZV9pbmNsdWRlX2RpcgorLS0gCisxLjcuNC4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3JwYXRoZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvcnBhdGhmaXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBjYWM5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3JwYXRoZml4LnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK1dpdGhvdXQgdGhpcyBwYXRjaCB3ZSBzZWUgcnBhdGhzIGhhcmRjb2RlZCBpbnRvIHRoZSBidWlsZCB3aGljaCByZXN1bHRzIGluIFFBCit3YXJuaW5ncy4gVGhlc2UgcnBhdGhzIGFyZSBub3QgbmVlZGVkIHNvIGxldHMgdHVybiB0aGlzIG9mZi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisoYnV0IGNvdWxkIGJlIHR1cm5lZCBpbnRvIGEgcHJvcGVyIGNvbmZpZ3VyZSBvcHRpb24pCisKK1JQIDIwMTIvMDMvMTQKKworSW5kZXg6IHNsYW5nLTIuMi40L2NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNsYW5nLTIuMi40Lm9yaWcvY29uZmlndXJlCTIwMTItMDMtMTQgMjM6NDA6MDEuMjgzNTYwNjc5ICswMDAwCisrKysgc2xhbmctMi4yLjQvY29uZmlndXJlCTIwMTItMDMtMTQgMjM6NDE6MTguMDIzNTU4OTAwICswMDAwCitAQCAtNjA4MSw1NiArNjA4MSw3IEBACisgRUxGX0NGTEFHUz0iJEVMRl9DRkxBR1MgJElFRUVfQ0ZMQUdTIgorIENGTEFHUz0iJENGTEFHUyAkSUVFRV9DRkxBR1MiCisgCistCistaWYgdGVzdCAiWCRsaWJkaXIiICE9ICJYIgorLXRoZW4KKy0gIGlmIHRlc3QgIlgkUlBBVEgiID0gIlgiCistICB0aGVuCistCistY2FzZSAiJGhvc3Rfb3MiIGluCistICAqbGludXgqfCpzb2xhcmlzKiApCistICAgIGlmIHRlc3QgIlgkR0NDIiA9IFh5ZXMKKy0gICAgdGhlbgorLSAgICAgIGlmIHRlc3QgIlgkYWNfUl9ub3NwYWNlIiA9ICJYbm8iCistICAgICAgdGhlbgorLSAgICAgICAgUlBBVEg9Ii1XbCwtUiwiCistICAgICAgZWxzZQorLSAgICAgICAgUlBBVEg9Ii1XbCwtUiIKKy0gICAgICBmaQorLSAgICBlbHNlCistICAgICAgaWYgdGVzdCAiWCRhY19SX25vc3BhY2UiID0gIlhubyIKKy0gICAgICB0aGVuCistICAgICAgICBSUEFUSD0iLVIgIgorLSAgICAgIGVsc2UKKy0JUlBBVEg9Ii1SIgorLSAgICAgIGZpCistICAgIGZpCistICA7OworLSAgKm9zZip8Km9wZW5ic2QqKQorLSAgICBpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzCistICAgIHRoZW4KKy0gICAgICBSUEFUSD0iLVdsLC1ycGF0aCwiCistICAgIGVsc2UKKy0gICAgICBSUEFUSD0iLXJwYXRoICIKKy0gICAgZmkKKy0gIDs7CistICAqbmV0YnNkKikKKy0gICAgaWYgdGVzdCAiWCRHQ0MiID0gWHllcworLSAgICB0aGVuCistICAgICAgUlBBVEg9Ii1XbCwtUiIKKy0gICAgZmkKKy0gIDs7CistZXNhYworLQorLSAgICBpZiB0ZXN0ICJYJFJQQVRIIiAhPSAiWCIKKy0gICAgdGhlbgorLSAgICAgIFJQQVRIPSIkUlBBVEgkbGliZGlyIgorLSAgICBmaQorLSAgZWxzZQorLSAgICBSUEFUSD0iJFJQQVRIOiRsaWJkaXIiCistICBmaQorLWZpCistCisrUlBBVEg9IiIKKyAKKyAjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorICMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3NsYW5nLWZpeC10aGUtaWNvbnYtZXhpc3RlbmNlLWNoZWNraW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvc2xhbmctZml4LXRoZS1pY29udi1leGlzdGVuY2UtY2hlY2tpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU4ZmU5OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3NsYW5nLWZpeC10aGUtaWNvbnYtZXhpc3RlbmNlLWNoZWNraW5nLnBhdGNoCkBAIC0wLDAgKzEsMTE2IEBACitGcm9tIDQ1ODhmNGEwMjg3Nzg3Nzg4ZWI4NmZiMTZmMzI2Y2JhYTc0NTRlMWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBaaGVuZyBKdW5saW5nIDx6aGVuZ2p1bmxpbmdAaHVhd2VpLmNvbT4KK0RhdGU6IE1vbiwgMTYgSnVuIDIwMTQgMTI6NTE6MjUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gc2xhbmc6IGZpeCB0aGUgaWNvbnYgZXhpc3RlbmNlIGNoZWNraW5nCisKK1doZW4gY2hlY2tpbmcgd2hldGhlciB0aGVyZSBpcyBpY29udiwgdGhlIGNvbmZpZ3VyZSBmaWxlIGFsd2F5cyBjaGVjayAKK3RoZSBob3N0IGVudi4KKworTm93IHdlIG1ha2UgaXQgd29ya2luZyBwcm9wZXJseSBieSBhZGRpbmcgY29ycmVjdCBwcmVmaXggZm9yIGNyb3NzLQorY29tcGlsaW5nIGVudmlyb25tZW50LgorCitXaGVuIGVuYWJsaW5nIGljb252LW1vZHVsZSwgd2Ugc2VlIGEgUUEgd2FybmluZyBiZWNhdXNlIHJwYXRocyBoYXJkY29kZWQKK2ludG8gdGhlIGJ1aWxkLiBBbmQgcnBhdGhzIGFyZSBub3QgbmVlZGVkLCBzbyBsZXQncyB0dXJuIHRoaXMgb2ZmLgorCitUaGlzIHBhdGNoIGlzIGdlbmVyYXRlZCBieSByZWZlcmVuY2luZyB0aGUgZXhpc3RpbmcgImZpeC1jaGVjay1wY3JlIgorcGF0Y2guCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBaaGVuZyBKdW5saW5nIDx6aGVuZ2p1bmxpbmdAaHVhd2VpLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDYwICsrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDU0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA3YTk2MjU2Li45MTYzMmYzIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC03OTA5LDYgKzc5MDksNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdGhlIGljb252IGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcyAuLi4gIiA+JjY7IH0KKyAJIC91c3IvaW5jbHVkZS9pY29udiwvdXNyL2xpYiBcCisgCSAvdXNyL2ljb252L2luY2x1ZGUsL3Vzci9pY29udi9saWIgXAorIAkgL3Vzci9pbmNsdWRlLC91c3IvbGliIFwKKysJIC91c3IvaW5jbHVkZSwvdXNyL2xpYjY0IFwKKyAJIC9vcHQvaW5jbHVkZS9pY29udiwvb3B0L2xpYiBcCisgCSAvb3B0L2ljb252L2luY2x1ZGUsL29wdC9pY29udi9saWIgXAorIAkgL29wdC9pbmNsdWRlLC9vcHQvbGliIgorQEAgLTc5MzksMTQgKzc5NDAsMTQgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRoZSBpY29udiBsaWJyYXJ5IGFuZCBoZWFkZXIgZmlsZXMgLi4uICIgPiY2OyB9CisgICAgICAgICB4aW5jZGlyPWBlY2hvICRpbmNsdWRlX2FuZF9saWIgfCB0ciAnLCcgJyAnIHwgYXdrICd7cHJpbnQgJDF9J2AKKyAJeGxpYmRpcj1gZWNobyAkaW5jbHVkZV9hbmRfbGliIHwgdHIgJywnICcgJyB8IGF3ayAne3ByaW50ICQyfSdgCisgCWZvdW5kPTAKKy0JaWYgdGVzdCAtciAkeGluY2Rpci8keGluY2ZpbGUKKysJaWYgdGVzdCAtciAkUEtHX0NPTkZJR19TWVNST09UX0RJUi8keGluY2Rpci8keGluY2ZpbGUKKyAJdGhlbgorIAkgIGZvciBFIGluICRleHRzCisgCSAgZG8KKy0JICAgIGlmIHRlc3QgLXIgIiR4bGliZGlyLyR4bGliZmlsZS4kRSIKKysJICAgIGlmIHRlc3QgLXIgIiRQS0dfQ09ORklHX1NZU1JPT1RfRElSLyR4bGliZGlyLyR4bGliZmlsZS4kRSIKKyAJICAgIHRoZW4KKy0JICAgICAgamRfaWNvbnZfaW5jbHVkZV9kaXI9IiR4aW5jZGlyIgorLQkgICAgICBqZF9pY29udl9saWJyYXJ5X2Rpcj0iJHhsaWJkaXIiCisrCSAgICAgIGpkX2ljb252X2luY2x1ZGVfZGlyPSIkUEtHX0NPTkZJR19TWVNST09UX0RJUi8keGluY2RpciIKKysJICAgICAgamRfaWNvbnZfbGlicmFyeV9kaXI9IiRQS0dfQ09ORklHX1NZU1JPT1RfRElSLyR4bGliZGlyIgorIAkgICAgICBqZF93aXRoX2ljb252X2xpYnJhcnk9InllcyIKKyAJICAgICAgZm91bmQ9MQorIAkgICAgICBicmVhaworQEAgLTc5NzIsNTYgKzc5NzMsNyBAQCAkYXNfZWNobyAieWVzOiAkamRfaWNvbnZfbGlicmFyeV9kaXIgYW5kICRqZF9pY29udl9pbmNsdWRlX2RpciIgPiY2OyB9CisgICAgIHRoZW4KKyAgICAgICBJQ09OVl9MSUI9IiIKKyAgICAgZWxzZQorLQorLWlmIHRlc3QgIlgkamRfaWNvbnZfbGlicmFyeV9kaXIiICE9ICJYIgorLXRoZW4KKy0gIGlmIHRlc3QgIlgkUlBBVEgiID0gIlgiCistICB0aGVuCistCistY2FzZSAiJGhvc3Rfb3MiIGluCistICAqbGludXgqfCpzb2xhcmlzKiApCistICAgIGlmIHRlc3QgIlgkR0NDIiA9IFh5ZXMKKy0gICAgdGhlbgorLSAgICAgIGlmIHRlc3QgIlgkYWNfUl9ub3NwYWNlIiA9ICJYbm8iCistICAgICAgdGhlbgorLSAgICAgICAgUlBBVEg9Ii1XbCwtUiwiCistICAgICAgZWxzZQorLSAgICAgICAgUlBBVEg9Ii1XbCwtUiIKKy0gICAgICBmaQorLSAgICBlbHNlCistICAgICAgaWYgdGVzdCAiWCRhY19SX25vc3BhY2UiID0gIlhubyIKKy0gICAgICB0aGVuCistICAgICAgICBSUEFUSD0iLVIgIgorLSAgICAgIGVsc2UKKy0JUlBBVEg9Ii1SIgorLSAgICAgIGZpCistICAgIGZpCistICA7OworLSAgKm9zZip8Km9wZW5ic2QqKQorLSAgICBpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzCistICAgIHRoZW4KKy0gICAgICBSUEFUSD0iLVdsLC1ycGF0aCwiCistICAgIGVsc2UKKy0gICAgICBSUEFUSD0iLXJwYXRoICIKKy0gICAgZmkKKy0gIDs7CistICAqbmV0YnNkKikKKy0gICAgaWYgdGVzdCAiWCRHQ0MiID0gWHllcworLSAgICB0aGVuCistICAgICAgUlBBVEg9Ii1XbCwtUiIKKy0gICAgZmkKKy0gIDs7CistZXNhYworLQorLSAgICBpZiB0ZXN0ICJYJFJQQVRIIiAhPSAiWCIKKy0gICAgdGhlbgorLSAgICAgIFJQQVRIPSIkUlBBVEgkamRfaWNvbnZfbGlicmFyeV9kaXIiCistICAgIGZpCistICBlbHNlCistICAgIFJQQVRIPSIkUlBBVEg6JGpkX2ljb252X2xpYnJhcnlfZGlyIgorLSAgZmkKKy1maQorLQorKyAgICAgIFJQQVRIPSIiCisgICAgIGZpCisgCisgICAgIElDT05WX0lOQz0tSSRqZF9pY29udl9pbmNsdWRlX2RpcgorLS0gCisxLjguMy40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3NwcmludGYtYnVnLWNvbmNlcm5pbmctOC1iaXQtY2hhcmFjdGVycy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3NwcmludGYtYnVnLWNvbmNlcm5pbmctOC1iaXQtY2hhcmFjdGVycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjAwMDFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvc3ByaW50Zi1idWctY29uY2VybmluZy04LWJpdC1jaGFyYWN0ZXJzLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworRnJvbSAzYTA1ZDFhOTIwMTQwZTlmMmM3Mjc5MWMxMmY2NjQyMTNmZWI0NmRmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFuZnJlZCBIYW5rZSA8TWFuZnJlZC5IYW5rZUB0bmd0ZWNoLmNvbT4KK0RhdGU6IFRodSwgMjAgSnVuIDIwMTMgMTA6MjQ6MTIgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gc3ByaW50ZiBidWcgKGNvbmNlcm5pbmcgJWMgZm9yIDgtYml0IGNoYXJhY3RlciBpbiBub24tVVRGOAorIG1vZGUpIGZpeGVkCisKK2NoYXIgKnN0ciBwb2ludHMgdG8gU0x1Y2hhcl9UeXBlIHV0ZjhfYnVmW10sIHdoaWNoIGhhZCB0b28gc21hbGwgc2NvcGUKKworc3JjL3Rlc3Qvc3Ryb3BzLnNsIGZhaWxlZCBpbiB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50OgorIC0gY29tcGlsZXI6ICBnY2MgKERlYmlhbiA0LjcuMi01KSA0LjcuMgorIC0gQ0ZMQUdTOiAgICAtZyAtTzIKKyAtIGxpYmM6ICAgICAgR05VIEMgTGlicmFyeSAoRGViaWFuIEVHTElCQyAyLjEzLTM4KSBzdGFibGUgcmVsZWFzZSB2ZXJzaW9uIDIuMTMKKyAtIGtlcm5lbDogICAgMy4yLjAtNC02ODYtcGFlICMxIFNNUCBEZWJpYW4gMy4yLjM5LTIgaTY4NiBHTlUvTGludXgKKy0tLQorIHNyYy9zbHN0cm9wcy5jIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3Nsc3Ryb3BzLmMgYi9zcmMvc2xzdHJvcHMuYworaW5kZXggY2U2YWNiMC4uY2JiYmIwMSAxMDA2NDQKKy0tLSBhL3NyYy9zbHN0cm9wcy5jCisrKysgYi9zcmMvc2xzdHJvcHMuYworQEAgLTE4ODQsNiArMTg4NCw3IEBAIHN0YXRpYyBjaGFyICpTTGRvX3NwcmludGYgKGNoYXIgKmZtdCkgLyp7e3sqLworICNlbmRpZgorICAgIHVuc2lnbmVkIGNoYXIgdWNoOworICAgIGludCB1c2VfbG9uZyA9IDAsIHVzZV9hbHRfZm9ybWF0ID0gMDsKKysgICBTTHVjaGFyX1R5cGUgdXRmOF9idWZbU0xVVEY4X01BWF9NQkxFTisxXTsKKyAKKyAgICB3aGlsZSAoMSkKKyAgICAgIHsKK0BAIC0yMDcxLDcgKzIwNzIsNiBAQCBzdGF0aWMgY2hhciAqU0xkb19zcHJpbnRmIChjaGFyICpmbXQpIC8qe3t7Ki8KKyAjZW5kaWYKKyAJICAgICAgIHsKKyAJCSAgU0x3Y2hhcl9UeXBlIHdjOworLQkJICBTTHVjaGFyX1R5cGUgdXRmOF9idWZbU0xVVEY4X01BWF9NQkxFTisxXTsKKyAKKyAJCSAgaWYgKC0xID09IFNMYW5nX3BvcF93Y2hhciAoJndjKSkKKyAJCSAgICByZXR1cm4gb3V0OworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nXzIuMi40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmdfMi4yLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEyMmY1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nXzIuMi40LmJiCkBAIC0wLDAgKzEsNTQgQEAKK1NVTU1BUlkgPSAiVGhlIHNoYXJlZCBsaWJyYXJ5IGZvciB0aGUgUy1MYW5nIGV4dGVuc2lvbiBsYW5ndWFnZSIKKworREVTQ1JJUFRJT04gPSAiUy1MYW5nIGlzIGFuIGludGVycHJldGVkIGxhbmd1YWdlIGFuZCBhIHByb2dyYW1taW5nIGxpYnJhcnkuICBUaGUgXAorUy1MYW5nIGxhbmd1YWdlIHdhcyBkZXNpZ25lZCBzbyB0aGF0IGl0IGNhbiBiZSBlYXNpbHkgZW1iZWRkZWQgaW50byBcCithIHByb2dyYW0gdG8gcHJvdmlkZSB0aGUgcHJvZ3JhbSB3aXRoIGEgcG93ZXJmdWwgZXh0ZW5zaW9uIGxhbmd1YWdlLiBcCitUaGUgUy1MYW5nIGxpYnJhcnksIHByb3ZpZGVkIGluIHRoaXMgcGFja2FnZSwgcHJvdmlkZXMgdGhlIFMtTGFuZyBcCitleHRlbnNpb24gbGFuZ3VhZ2UuICBTLUxhbmcncyBzeW50YXggcmVzZW1ibGVzIEMsIHdoaWNoIG1ha2VzIGl0IGVhc3kgXAordG8gcmVjb2RlIFMtTGFuZyBwcm9jZWR1cmVzIGluIEMgaWYgeW91IG5lZWQgdG8uIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmplZHNvZnQub3JnL3NsYW5nLyIKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAicGNyZSIKK1BSID0gInIxMiIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE1MmExOGE0NzJkNGY3ZTQ1NDc5YjA2NTYzNzE3YzAyIgorCisKK1NSQ19VUkkgPSAiZnRwOi8vc3BhY2UubWl0LmVkdS9wdWIvZGF2aXMvc2xhbmcvdjIuMi9zbGFuZy0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3JwYXRoZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1jaGVjay1wY3JlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NoYW5nZS1jaGFyLXR5cGUtdG8tc2lnbmVkLWNoYXItaW4tbWFjcm9zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NwcmludGYtYnVnLWNvbmNlcm5pbmctOC1iaXQtY2hhcmFjdGVycy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zbGFuZy1maXgtdGhlLWljb252LWV4aXN0ZW5jZS1jaGVja2luZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1lcnJvci1jb25mbGljdGluZy10eXBlcy1mb3ItcG9zaXhfY2xvc2UucGF0Y2ggXAorICAgICAgICAgICIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK0NMRUFOQlJPS0VOID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3ZmNmZDQ0N2UzNzhmMDdkZDBjMGJhZTY3MWZlNjQ4NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5YTgyNTdhOWEyYTU1MDk5YWY4NThiMTMzMzhkYzhmM2EwNmRkMjA2OWY0NmYwZGYyYzljM2JiODRhMDFkNWRiIgorCitFWFRSQV9PRUNPTkYgKz0gIiAtLXdpdGhvdXQteiAtLXdpdGhvdXQtcG5nIC0td2l0aG91dC1vbmlnIC0teC1pbmNsdWRlcz0ke1NUQUdJTkdfRElSX0hPU1R9L3Vzci9pbmNsdWRlL1gxMSAtLXgtbGlicmFyaWVzPSR7U1RBR0lOR19ESVJfSE9TVH0vdXNyL2xpYiIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgIyBzbGFuZyBrZWVwcyBjb25maWd1cmUuYWMgYW5kIHJlc3Qgb2YgYXV0b2NvbmYgZmlsZXMgaW4gYXV0b2NvbmYvIGRpcmVjdG9yeQorICAgICMgd2UgaGF2ZSB0byBnbyB0aGVyZSB0byBiZSBhYmxlIHRvIHJ1biBnbnUtY29uZmlnaXplIGNhdXNlIGl0IGV4cGVjdHMgY29uZmlndXJlLntpbixhY30KKyAgICAjIHRvIGJlIHByZXNlbnQuIFJlc3VsdGluZyBmaWxlcyBsYW5kIGluIGF1dG9jb25mL2F1dG9jb25mLyBzbyB3ZSBuZWVkIHRvIG1vdmUgdGhlbS4KKyAgICBjZCAke1N9L2F1dG9jb25mICYmIGdudS1jb25maWdpemUgLS1mb3JjZSAmJiBtdiBhdXRvY29uZi9jb25maWcuKiAuCisgICAgY2QgJHtCfQorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0gLWUgJ0lOU1RfTElCX0RJUj0ke1NUQUdJTkdfRElSX0hPU1R9L3Vzci9saWInCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vJHtCUE59L3YyL21vZHVsZXMvICR7ZGF0YWRpcn0vc2xzaC8iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8ke0JQTn0vdjIvbW9kdWxlcy8uZGVidWciCisKK1BBUkFMTEVMX01BS0UgPSAiIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0YXQvc3RhdC0zLjMvZml4LWVycm9yLXJldHVybi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0YXQvc3RhdC0zLjMvZml4LWVycm9yLXJldHVybi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzI5OTVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RhdC9zdGF0LTMuMy9maXgtZXJyb3ItcmV0dXJuLnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKK1RoaXMgcGF0Y2ggZml4aWVzIHRoZSB3cm9uZyByZXR1cm4gY29kZSBvZiBzdGF0IC1oLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFpoYW5nbGUgWWFuZyA8emhhbmdsZS55YW5nQHdpbmRyaXZlci5jb20+CisKKy0tLSBzdGF0LTMuMy9zdGF0LmMub3JpZwkyMDEzLTA4LTIyIDEwOjQ5OjQ1LjAwMDAwMDAwMCArMDgwMAorKysrIHN0YXQtMy4zL3N0YXQuYwkyMDEzLTA4LTIyIDEwOjUwOjMxLjAwMDAwMDAwMCArMDgwMAorQEAgLTg0NSw3ICs4NDUsNyBAQAorICAgICBmcHJpbnRmKHN0ZGVyciwgIlx0XHQlJVMgLSBTZWN1cml0eSBJRCBpbiBTRS1MaW51eFxuIik7CisgICAgIGZwcmludGYoc3RkZXJyLCAiXHRcdCUlQyAtIFNlY3VyaXR5IGNvbnRleHQgaW4gU0UtTGludXhcbiIpOworICAgICBmcHJpbnRmKHN0ZGVyciwgIlx0XHQlJWQgLSBGcmVlIGZpbGUgbm9kZXMgaW4gZmlsZSBzeXN0ZW1cbiIpOworLSAgICBleGl0KDEpOworKyAgICBleGl0KDApOworIH0KKyAgIAorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RhdC9zdGF0XzMuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0YXQvc3RhdF8zLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUxODMxZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0YXQvc3RhdF8zLjMuYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJDb21tYW5kIGxpbmUgZmlsZSBzdGF0dXMgZGlzcGxheSB1dGlsaXR5IgorREVTQ1JJUFRJT04gPSAiRGlzcGxheXMgYWxsIGluZm9ybWF0aW9uIGFib3V0IGEgZmlsZSB0aGF0IHRoZSBzdGF0KCkgY2FsbCBwcm92aWRlcyBhbmQgYWxsIGluZm9ybWF0aW9uIGFib3V0IGEgZmlsZXN5c3RlbSB0aGF0IHN0YXRmcygpIHByb3ZpZGVzLiIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZUklHSFQ7bWQ1PTM5ODg2YjA3N2ZkMDcyZTg3NmU1YzRjMTYzMTBiNjMxIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0dQTDttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5pYmlibGlvLm9yZy9wdWIvTGludXgvdXRpbHMvZmlsZS8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4LWVycm9yLXJldHVybi5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjM3ZTI0N2U4ZTQwMGFkOTIwNWYxYjA1MDBiNzI4ZmQzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcwNzFmMDM4NGE0MjNhOTM4ZGQ1NDJjMWYwODU0N2EwMjgyNGY2MzU5YWNkM2VmM2Y5NDRiMmM0YzJkMWVlMDkiCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0gJHtEfSR7bWFuZGlyfS9tYW4xCisJaW5zdGFsbCAtbSA3NTUgc3RhdCAke0R9JHtiYXNlX2JpbmRpcn0vc3RhdC5zdGF0CisJaW5zdGFsbCAtbSA2NDQgc3RhdC4xICR7RH0ke21hbmRpcn0vbWFuMQorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAic3RhdCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW3N0YXRdID0gIjIwMCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzdGF0XSA9ICIke2Jhc2VfYmluZGlyfS9zdGF0IgorQUxURVJOQVRJVkVfVEFSR0VUW3N0YXRdID0gIiR7YmFzZV9iaW5kaXJ9L3N0YXQuc3RhdCIKKworQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gInN0YXQuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzdGF0LjFdID0gIiR7bWFuZGlyfS9tYW4xL3N0YXQuMSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0cmVzcy9maWxlcy90ZXhpbmZvLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RyZXNzL2ZpbGVzL3RleGluZm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFjNTk1MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0cmVzcy9maWxlcy90ZXhpbmZvLnBhdGNoCkBAIC0wLDAgKzEsNzkgQEAKKy0tLSBhL2RvYy9zdHJlc3MudGV4aQorKysrIGIvZG9jL3N0cmVzcy50ZXhpCitAQCAtNjIsNDcgKzYyLDQ3IEBACisgCisgQHRhYmxlIEBzYW1wCisgQGl0ZW0gLT8KKy1AaXRlbXggLS1oZWxwCisrQGl0ZW0gLS1oZWxwCisgU2hvdyBoZWxwIGluZm9ybWF0aW9uLgorIAorLUBpdGVteCAtLXZlcnNpb24KKytAaXRlbSAtLXZlcnNpb24KKyBTaG93IHZlcnNpb24gaW5mb3JtYXRpb24uCisgCisgQGl0ZW0gLXYKKy1AaXRlbXggLS12ZXJib3NlCisrQGl0ZW0gLS12ZXJib3NlCisgVHVybiB1cCB2ZXJib3NpdHkuCisgCisgQGl0ZW0gLXEKKy1AaXRlbXggLS1xdWlldAorK0BpdGVtIC0tcXVpZXQKKyBUdXJuIGRvd24gdmVyYm9zaXR5LgorIAorIEBpdGVtIC1uCistQGl0ZW14IC0tZHJ5LXJ1bgorK0BpdGVtIC0tZHJ5LXJ1bgorIFNob3cgd2hhdCB3b3VsZCBoYXZlIGJlZW4gZG9uZS4KKyAKKyBAaXRlbSAtdCBAdmFye3NlY3N9CistQGl0ZW14IC0tdGltZW91dCBAdmFye3NlY3N9CisrQGl0ZW0gLS10aW1lb3V0IEB2YXJ7c2Vjc30KKyBUaW1lIG91dCBhZnRlciBAdmFye3NlY3N9IHNlY29uZHMuCisgCistQGl0ZW14IC0tYmFja29mZiBAdmFye3VzZWNzfQorK0BpdGVtIC0tYmFja29mZiBAdmFye3VzZWNzfQorIFdhaXQgZm9yIGZhY3RvciBvZiBAdmFye3VzZWNzfSBtaWNyb3NlY29uZHMgYmVmb3JlIHN0YXJ0aW5nIHdvcmsuCisgCisgQGl0ZW0gLWMgQHZhcntmb3Jrc30KKy1AaXRlbXggLS1jcHUgQHZhcntmb3Jrc30KKytAaXRlbSAtLWNwdSBAdmFye2ZvcmtzfQorIFNwYXduIEB2YXJ7Zm9ya3N9IHByb2Nlc3NlcyBlYWNoIHNwaW5uaW5nIG9uIEBzYW1we3NxcnQoKX0uCisgCisgQGl0ZW0gLWkgQHZhcntmb3Jrc30KKy1AaXRlbXggLS1pbyBAdmFye2ZvcmtzfQorK0BpdGVtIC0taW8gQHZhcntmb3Jrc30KKyBTcGF3biBAdmFye2ZvcmtzfSBwcm9jZXNzZXMgZWFjaCBzcGlubmluZyBvbiBAc2FtcHtzeW5jKCl9LgorIAorIEBpdGVtIC1tIEB2YXJ7Zm9ya3N9CistQGl0ZW14IC0tdm0gQHZhcntmb3Jrc30KKytAaXRlbSAtLXZtIEB2YXJ7Zm9ya3N9CisgU3Bhd24gQHZhcntmb3Jrc30gcHJvY2Vzc2VzIGVhY2ggc3Bpbm5pbmcgb24gQHNhbXB7bWFsbG9jKCl9LgorIAorLUBpdGVteCAtLXZtLWJ5dGVzIEB2YXJ7Ynl0ZXN9CisrQGl0ZW0gLS12bS1ieXRlcyBAdmFye2J5dGVzfQorIEFsbG9jYXRlIEB2YXJ7Ynl0ZXN9IG51bWJlciBvZiBieXRlcy4gIFRoZSBkZWZhdWx0IGlzIDEuCisgCistQGl0ZW14IC0tdm0taGFuZworK0BpdGVtIC0tdm0taGFuZworIEluc3RydWN0IGVhY2ggdm0gaG9nIHByb2Nlc3MgdG8gZ28gdG8gc2xlZXAgYWZ0ZXIgYWxsb2NhdGluZyBtZW1vcnkuICBUaGlzCisgY29udHJhc3RzIHdpdGggdGhlaXIgbm9ybWFsIGJlaGF2aW9yLCB3aGljaCBpcyB0byBmcmVlIHRoZSBtZW1vcnkgYW5kCisgcmVhbGxvY2F0ZSBAZW1waHthZCBpbmZpbml0dW19LiAgVGhpcyBpcyB1c2VmdWwgZm9yIHNpbXVsYXRpbmcgbG93IG1lbW9yeQorQEAgLTExNCwxMyArMTE0LDEzIEBACisgQGVuZCBleGFtcGxlCisgCisgQGl0ZW0gLWQgQHZhcntmb3Jrc30KKy1AaXRlbXggLS1oZGQgQHZhcntmb3Jrc30KKytAaXRlbSAtLWhkZCBAdmFye2ZvcmtzfQorIFNwYXduIEB2YXJ7Zm9ya3N9IHByb2Nlc3NlcyBlYWNoIHNwaW5uaW5nIG9uIEBzYW1we3dyaXRlKCl9LgorIAorLUBpdGVteCAtLWhkZC1ieXRlcyBAdmFye2J5dGVzfQorK0BpdGVtIC0taGRkLWJ5dGVzIEB2YXJ7Ynl0ZXN9CisgV3JpdGUgQHZhcntieXRlc30gbnVtYmVyIG9mIGJ5dGVzLiAgVGhlIGRlZmF1bHQgaXMgMUdCLgorIAorLUBpdGVteCAtLWhkZC1ub2NsZWFuCisrQGl0ZW0gLS1oZGQtbm9jbGVhbgorIERvIG5vdCB1bmxpbmsgZmlsZShzKSB0byB3aGljaCByYW5kb20gQVNDSUkgZGF0YSBpcyB3cml0dGVuLgorIAorIEBlbmQgdGFibGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0cmVzcy9zdHJlc3NfMS4wLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdHJlc3Mvc3RyZXNzXzEuMC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiN2U0YmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdHJlc3Mvc3RyZXNzXzEuMC40LmJiCkBAIC0wLDAgKzEsMTQgQEAKK0RFU0NSSVBUSU9OID0gIkRlbGliZXJhdGVseSBzaW1wbGUgd29ya2xvYWQgZ2VuZXJhdG9yIGZvciBQT1NJWCBzeXN0ZW1zLiBJdCBcCitpbXBvc2VzIGEgY29uZmlndXJhYmxlIGFtb3VudCBvZiBDUFUsIG1lbW9yeSwgSS9PLCBhbmQgZGlzayBzdHJlc3Mgb24gdGhlIHN5c3RlbS4iCitIT01FUEFHRSA9ICJodHRwOi8vcGVvcGxlLnNlYXMuaGFydmFyZC5lZHUvfmFwdy9zdHJlc3MvIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgorCitTUkNfVVJJID0gImh0dHA6Ly9wZW9wbGUuc2Vhcy5oYXJ2YXJkLmVkdS9+YXB3LyR7QlBOfS8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vdGV4aW5mby5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjg5MGE0MjM2ZGQxNjU2NzkyZjNlZjlhMTkwY2Y5OWVmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA1N2U0ZmMyYTc3MDY0MTFlMTAxNGJmMTcyZTRmOTRiNjNhMTJmMTg0MTIzNzhmY2E4Njg0Y2E5MjQwODgyNWIiCisKK2luaGVyaXQgYXV0b3Rvb2xzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL2ZpbGVzL3N1ZG8ucGFtIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9maWxlcy9zdWRvLnBhbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmMyNmU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9maWxlcy9zdWRvLnBhbQpAQCAtMCwwICsxLDYgQEAKKyMlUEFNLTEuMAorYXV0aCAgICAgICBpbmNsdWRlICAgICAgY29tbW9uLWF1dGgKK2FjY291bnQgICAgaW5jbHVkZSAgICAgIGNvbW1vbi1hY2NvdW50CitwYXNzd29yZCAgIGluY2x1ZGUgICAgICBjb21tb24tcGFzc3dvcmQKK3Nlc3Npb24gICAgcmVxdWlyZWQgICAgIHBhbV9rZXlpbml0LnNvIHJldm9rZQorc2Vzc2lvbiAgICByZXF1aXJlZCAgICAgcGFtX2xpbWl0cy5zbwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkby5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI1ODc2YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkby5pbmMKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJQcm92aWRlIGxpbWl0ZWQgc3VwZXIgdXNlciBwcml2aWxlZ2VzIHRvIHNwZWNpZmljIHVzZXJzIgorREVTQ1JJUFRJT04gPSAiU3VkbyAoc3VwZXJ1c2VyIGRvKSBhbGxvd3MgYSBzeXN0ZW0gYWRtaW5pc3RyYXRvciB0byBnaXZlIGNlcnRhaW4gdXNlcnMgKG9yIGdyb3VwcyBvZiB1c2VycykgdGhlIGFiaWxpdHkgdG8gcnVuIHNvbWUgKG9yIGFsbCkgY29tbWFuZHMgYXMgcm9vdCB3aGlsZSBsb2dnaW5nIGFsbCBjb21tYW5kcyBhbmQgYXJndW1lbnRzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuc3Vkby53cyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3d3dy5zdWRvLndzL2J1Z3MvIgorU0VDVElPTiA9ICJhZG1pbiIKK0xJQ0VOU0UgPSAiSVNDICYgQlNEICYgWmxpYiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RvYy9MSUNFTlNFO21kNT1jMTZlNTQyNDA4YWJkYTAxM2Q2NzJiZThlYjg4ZDE3NCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wbHVnaW5zL3N1ZG9lcnMvcmVkYmxhY2suYztiZWdpbmxpbmU9MTtlbmRsaW5lPTQxO21kNT1jZmU0MTExMmY5NmMxOWEwNzQ5MzRkMTI4ZjQ1YzY5MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdXRpbC9yZWFsbG9jYXJyYXkuYztiZWdpbmxpbmU9MztlbmRsaW5lPTE2O21kNT04NWIwOTA1Yjc5NWQ0ZDU4YmYyZTAwNjM1NjQ5ZWVjNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdXRpbC9mbm1hdGNoLmM7YmVnaW5saW5lPTM7ZW5kbGluZT0yNzttZDU9NjdmODNlZTliZDQ1NjU1NzM5NzA4MmY4ZjFiZTBlZmQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL3V0aWwvZ2V0Y3dkLmM7YmVnaW5saW5lPTU7ZW5kbGluZT0yNzttZDU9NDQ5YWY0Y2M1N2ZjN2Q0NmY0MjA5MDYwOGJhM2U2ODEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL3V0aWwvZ2xvYi5jO2JlZ2lubGluZT02O2VuZGxpbmU9MzE7bWQ1PTU4NzI3MzMxNDZiOWViMGRlYjc5ZTFmNjY0ODE1Yjg1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi91dGlsL3NucHJpbnRmLmM7YmVnaW5saW5lPTY7ZW5kbGluZT0zNDttZDU9YzgyYzFiM2E1YzMyZTA4NTQ1YzllYzVkNzFlNDFlNTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9zdWRvX3F1ZXVlLmg7YmVnaW5saW5lPTU7ZW5kbGluZT0yNzttZDU9NDQ5YWY0Y2M1N2ZjN2Q0NmY0MjA5MDYwOGJhM2U2ODEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL3V0aWwvaW5ldF9wdG9uLmM7YmVnaW5saW5lPTM7ZW5kbGluZT0xNzttZDU9Mzk3MGFiMDUxOGFiNzljYmQwYmFmYjY5N2YxMGIzM2EiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW3psaWJdID0gIi0tZW5hYmxlLXpsaWIsLS1kaXNhYmxlLXpsaWIsemxpYiIKKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vc3Vkb2VycyIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1lZGl0b3I9L2Jpbi92aSAtLXdpdGgtZW52LWVkaXRvciIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLW11c2wgPSAiIC0tZGlzYWJsZS1oYXJkZW5pbmcgIgorCisjIG1rc2lnbmFtZS9ta3NpZ2xpc3QgYXJlIHVzZWQgb24gYnVpbGQgaG9zdCB0byBnZW5lcmF0ZSBzb3VyY2UgZmlsZXMKK2RvX2NvbXBpbGVfcHJlcGVuZCAoKSB7CisJb2VfcnVubWFrZSBTU1BfQ0ZMQUdTPSIiIFNTUF9MREZMQUdTPSIiIENDPSIkQlVJTERfQ0MiIENGTEFHUz0iJEJVSUxEX0NGTEFHUyIgQ1BQRkxBR1M9IiRCVUlMRF9DUFBGTEFHUyAtSSR7U30vaW5jbHVkZSAtSSR7U30gLUkke0J9IiAgLUMgbGliL3V0aWwgbWtzaWduYW1lIG1rc2lnbGlzdAorfQorCisjIEV4cGxpY2l0bHkgY3JlYXRlICR7bG9jYWxzdGF0ZWRpcn0vbGliIGJlZm9yZSBkb19pbnN0YWxsIHRvIGVuc3VyZQorIyB0aGUgZGlyZWN0b3J5IGlzIGFjY2Vzc2libGUgYnkgYWxsIHVzZXJzLiBPdGhlcndpc2UgdGhlIG1raW5zdGFsbGRpcnMKKyMgc2NyaXB0IChmcm9tIHN1ZG8pIHdpbGwgcmVjdXJzaXZlbHkgY3JlYXRlICR7bG9jYWxzdGF0ZWRpcn0vbGliL3N1ZG8KKyMgYW5kIHRoZW4gY2htb2QgZWFjaCBkaXJlY3Rvcnkgd2l0aCAwNzAwIHBlcm1pc3Npb25zLCB3aGljaCBpc24ndCB3aGF0CisjIHdlIHdhbnQgKGkuZSwgdXNlcnMgd291bGQgbm90IGJlIGFibGUgdG8gYWNjZXNzIC92YXIvbGliKS4KK2RvX2luc3RhbGxfcHJlcGVuZCAoKXsKKwlta2RpciAtcCAke0R9LyR7bG9jYWxzdGF0ZWRpcn0vbGliCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG8vMDAwMS1JbmNsdWRlLXN5cy10eXBlcy5oLWZvci1pZF90LWRlZmluaXRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG8vMDAwMS1JbmNsdWRlLXN5cy10eXBlcy5oLWZvci1pZF90LWRlZmluaXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIzNmNkNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkby8wMDAxLUluY2x1ZGUtc3lzLXR5cGVzLmgtZm9yLWlkX3QtZGVmaW5pdGlvbi5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIDM4NmUyYzJmYTJhYjJlMDJlZjcxYzI2OGE1NzIwNTEzOWJlMzI5YWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAzMSBBdWcgMjAxNSAwNzowNzo0OSArMDAwMAorU3ViamVjdDogW1BBVENIXSBJbmNsdWRlIHN5cy90eXBlcy5oIGZvciBpZF90IGRlZmluaXRpb24KKworL3N1ZG9fdXRpbC5oOjIxOToxNDogZXJyb3I6IHVua25vd24gdHlwZSBuYW1lICdpZF90JworIF9fZHNvX3B1YmxpYyBpZF90IHN1ZG9fc3RydG9pZF92MShjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnNlcCwKKyBjaGFyICoqZW5kcCwgY29uc3QgY2hhciAqKmVycnN0cik7CisgICAgICAgICAgICAgICBeCisJICAgICAgIG1ha2VbMV06ICoqKiBbcHJlc2VydmVfZmRzLm9dIEVycm9yIDEKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBpbmNsdWRlL3N1ZG9fdXRpbC5oIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2luY2x1ZGUvc3Vkb191dGlsLmggYi9pbmNsdWRlL3N1ZG9fdXRpbC5oCitpbmRleCA4OWM5Zjg5Li5hYzA4NTVhIDEwMDY0NAorLS0tIGEvaW5jbHVkZS9zdWRvX3V0aWwuaAorKysrIGIvaW5jbHVkZS9zdWRvX3V0aWwuaAorQEAgLTE3LDYgKzE3LDggQEAKKyAjaWZuZGVmIFNVRE9fVVRJTF9ICisgI2RlZmluZSBTVURPX1VUSUxfSAorIAorKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysKKyAjaWZkZWYgSEFWRV9TVERCT09MX0gKKyAjIGluY2x1ZGUgPHN0ZGJvb2wuaD4KKyAjZWxzZQorLS0gCisyLjUuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG8vMDAwMS1Vc2UtY29ycmVjdC1wYXRoLXRvLWluaXQuZC1hbmQtdG1wZmlsZXMuZC1maWxlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkby8wMDAxLVVzZS1jb3JyZWN0LXBhdGgtdG8taW5pdC5kLWFuZC10bXBmaWxlcy5kLWZpbGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MTg2ODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG8vMDAwMS1Vc2UtY29ycmVjdC1wYXRoLXRvLWluaXQuZC1hbmQtdG1wZmlsZXMuZC1maWxlcy5wYXRjaApAQCAtMCwwICsxLDMxIEBACitUaGUgbWFrZWZpbGUgdXNlcyB0b3Bfc3JjZGlyIHRvIGZpbmQgZmlsZXMgdGhhdCB3ZXJlIGNyZWF0ZWQgYnkgY29uZmlndXJlLCB3aGVuCitpdCBzaG91bGQgdXNlIHRvcF9idWlsZGRpci4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgKGh0dHA6Ly9idWd6aWxsYS5zdWRvLndzL3Nob3dfYnVnLmNnaT9pZD03MDgpCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCistLS0KKyBzcmMvTWFrZWZpbGUuaW4gfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlLmluIGIvc3JjL01ha2VmaWxlLmluCitpbmRleCBmMDA5ZTEwLi43YWNmYjJkIDEwMDY0NAorLS0tIGEvc3JjL01ha2VmaWxlLmluCisrKysgYi9zcmMvTWFrZWZpbGUuaW4KK0BAIC0xNjUsMTEgKzE2NSwxMSBAQCBpbnN0YWxsLWRpcnM6CisgCisgaW5zdGFsbC1yYzogaW5zdGFsbC1kaXJzCisgCWlmIFsgLW4gIiQoSU5JVF9TQ1JJUFQpIiBdOyB0aGVuIFwKKy0JICAgICQoSU5TVEFMTCkgJChJTlNUQUxMX09XTkVSKSAtbSAwNzU1ICQodG9wX3NyY2RpcikvaW5pdC5kLyQoSU5JVF9TQ1JJUFQpICQoREVTVERJUikkKElOSVRfRElSKS9zdWRvOyBcCisrCSAgICAkKElOU1RBTEwpICQoSU5TVEFMTF9PV05FUikgLW0gMDc1NSAkKHRvcF9idWlsZGRpcikvaW5pdC5kLyQoSU5JVF9TQ1JJUFQpICQoREVTVERJUikkKElOSVRfRElSKS9zdWRvOyBcCisgCSAgICBybSAtZiAkKERFU1RESVIpJChSQ19MSU5LKTsgXAorIAkgICAgbG4gLXMgJChJTklUX0RJUikvc3VkbyAkKERFU1RESVIpJChSQ19MSU5LKTsgXAorIAllbGlmIHRlc3QgLW4gIiQodG1wZmlsZXNfZCkiOyB0aGVuIFwKKy0JICAgICQoSU5TVEFMTCkgJChJTlNUQUxMX09XTkVSKSAtbSAwNjQ0ICQodG9wX3NyY2RpcikvaW5pdC5kL3N1ZG8uY29uZiAkKERFU1RESVIpJCh0bXBmaWxlc19kKS9zdWRvLmNvbmY7IFwKKysJICAgICQoSU5TVEFMTCkgJChJTlNUQUxMX09XTkVSKSAtbSAwNjQ0ICQodG9wX2J1aWxkZGlyKS9pbml0LmQvc3Vkby5jb25mICQoREVTVERJUikkKHRtcGZpbGVzX2QpL3N1ZG8uY29uZjsgXAorIAlmaQorIAorIGluc3RhbGwtYmluYXJpZXM6IGluc3RhbGwtZGlycyAkKFBST0dTKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG9fMS44LjE0cDMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG9fMS44LjE0cDMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIzY2Q2ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkb18xLjguMTRwMy5iYgpAQCAtMCwwICsxLDM2IEBACityZXF1aXJlIHN1ZG8uaW5jCisKK1NSQ19VUkkgPSAiaHR0cDovL2Z0cC5zdWRvLndzL3N1ZG8vZGlzdC9zdWRvLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJyR7UEFNX1NSQ19VUkl9JywgJycsIGQpfSBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVzZS1jb3JyZWN0LXBhdGgtdG8taW5pdC5kLWFuZC10bXBmaWxlcy5kLWZpbGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtSW5jbHVkZS1zeXMtdHlwZXMuaC1mb3ItaWRfdC1kZWZpbml0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitQQU1fU1JDX1VSSSA9ICJmaWxlOi8vc3Vkby5wYW0iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5M2RiZDFlNDdjMTM2MTc5ZmYxYjAxNDk0YzFjMGU3NSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhOGE2OTdjYmIxMTM4NTkwNTg5NDQ4NTBkMDk4NDY0NjE4MjU0ODA0Y2Y5Nzk2MWRlZTkyNjQyOWYwMGExMjM3IgorCitERVBFTkRTICs9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGlicGFtJywgJycsIGQpfSIKK1JERVBFTkRTXyR7UE59ICs9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtLXBsdWdpbi1saW1pdHMgcGFtLXBsdWdpbi1rZXlpbml0JywgJycsIGQpfSIKKworRVhUUkFfT0VDT05GICs9ICIgXAorICAgICAgICAgICAgIGFjX2N2X3R5cGVfcnNpemVfdD1ubyBcCisgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnLS13aXRoLXBhbScsICctLXdpdGhvdXQtcGFtJywgZCl9IFwKKyAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnLS1lbmFibGUtdG1wZmlsZXMuZD0ke2xpYmRpcn0vdG1wZmlsZXMuZCcsICctLWRpc2FibGUtdG1wZmlsZXMuZCcsIGQpfSBcCisgICAgICAgICAgICAgIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIgPSAicGFtIiBdOyB0aGVuCisJCWluc3RhbGwgLUQgLW0gNjY0ICR7V09SS0RJUn0vc3Vkby5wYW0gJHtEfS8ke3N5c2NvbmZkaXJ9L3BhbS5kL3N1ZG8KKwlmaQorCisJY2htb2QgNDExMSAke0R9JHtiaW5kaXJ9L3N1ZG8KKwljaG1vZCAwNDQwICR7RH0ke3N5c2NvbmZkaXJ9L3N1ZG9lcnMKKworCSMgRXhwbGljaXRseSByZW1vdmUgdGhlICR7bG9jYWxzdGF0ZWRpcn0vcnVuIGRpcmVjdG9yeSB0byBhdm9pZCBRQSBlcnJvcgorCXJtZGlyIC1wIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5ICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1bi9zdWRvCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vdG1wZmlsZXMuZCIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS9saWIqJHtTT0xJQlNERVZ9ICR7bGliZGlyfS8ke0JQTn0vKi5sYSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL25vLXN0cmlwLWluc3RhbGwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9uby1zdHJpcC1pbnN0YWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZmJhNzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9uby1zdHJpcC1pbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IHN5c2tsb2dkLTEuNS9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHN5c2tsb2dkLTEuNS5vcmlnL01ha2VmaWxlCTIwMDktMDYtMDkgMTM6MDI6NDEuMDAwMDAwMDAwICswMjAwCisrKysgc3lza2xvZ2QtMS41L01ha2VmaWxlCTIwMDktMDYtMDkgMTM6MDM6MDYuMDAwMDAwMDAwICswMjAwCitAQCAtMTI3LDggKzEyNyw4IEBACisgCXJtIC1mIHN5c2xvZ2Qga2xvZ2Qga3N5bSBzeXNsb2dfdHN0IG9vcHNfdGVzdCBUQUdTIHRzeXNsb2dkIHRrbG9nZAorIAorIGluc3RhbGxfZXhlYzogc3lzbG9nZCBrbG9nZAorLQkke0lOU1RBTEx9IC1tIDUwMCAtcyBzeXNsb2dkICR7QklORElSfS9zeXNsb2dkCistCSR7SU5TVEFMTH0gLW0gNTAwIC1zIGtsb2dkICR7QklORElSfS9rbG9nZAorKwkke0lOU1RBTEx9IC1tIDUwMCBzeXNsb2dkICR7QklORElSfS9zeXNsb2dkCisrCSR7SU5TVEFMTH0gLW0gNTAwIGtsb2dkICR7QklORElSfS9rbG9nZAorIAorIGluc3RhbGxfbWFuOgorIAkke0lOU1RBTEx9IC1tICR7TUFOX1BFUk1TfSBzeXNrbG9nZC44ICR7TUFORElSfS9tYW44L3N5c2tsb2dkLjgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL25vLXZlY3Rvcml6YXRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9uby12ZWN0b3JpemF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxY2MwNDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9uby12ZWN0b3JpemF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitUaGUgY29tcGlsZXIgc2hvdWxkIG5vdCBiZSBnZW5lcmF0aW5nIHZlY3Rvcml6ZWQgaW5zdHJ1Y3Rpb25zIG9uIHRoaXMgdGFyZ2V0LgorVGhpcyBpcyBhIHdvcmsgYXJvdW5kIHVudGlsIEkgY2FuIGRldGVybWluZSB3aHkgdGhpcyBpcyBvY2N1cmluZyBvbiB0aGlzCitwYXJ0aWN1bGFyIHJlY2lwZQorCitJbmRleDogc3lza2xvZ2QtMS41L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3lza2xvZ2QtMS41Lm9yaWcvTWFrZWZpbGUKKysrKyBzeXNrbG9nZC0xLjUvTWFrZWZpbGUKK0BAIC0yMCw3ICsyMCw4IEBACisgQ0M9IGdjYworICNTS0ZMQUdTPSAtZyAtRFNZU1YgLVdhbGwKKyAjTERGTEFHUz0gLWcKKy1TS0ZMQUdTPSAkKFJQTV9PUFRfRkxBR1MpIC1PMyAtRFNZU1YgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLWZuby1zdHJlbmd0aC1yZWR1Y2UKKytTS0ZMQUdTPSAkKFJQTV9PUFRfRkxBR1MpIC1PMyAtRFNZU1YgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLWZuby1zdHJlbmd0aC1yZWR1Y2UgXAorKwktZm5vLXRyZWUtdmVjdG9yaXplCisgIyAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1EX0xBUkdFRklMRV9TT1VSQ0UKKyAjIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLURfTEFSR0VGSUxFNjRfU09VUkNFCisgIyAkKHNoZWxsIGdldGNvbmYgTEZTX1NLRkxBR1MpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9zeXNrbG9nZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL3N5c2tsb2dkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI1OGY4ODIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9zeXNrbG9nZApAQCAtMCwwICsxLDE1MSBAQAorIyEgL2Jpbi9zaAorIyAvZXRjL2luaXQuZC9zeXNrbG9nZDogc3RhcnQgdGhlIHN5c3RlbSBsb2cgZGFlbW9uLgorCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICAgICBzeXNrbG9nZAorIyBSZXF1aXJlZC1TdGFydDogICAgICAgJHJlbW90ZV9mcyAkdGltZQorIyBSZXF1aXJlZC1TdG9wOiAgICAgICAgJHJlbW90ZV9mcyAkdGltZQorIyBTaG91bGQtU3RhcnQ6ICAgICAgICAgJG5ldHdvcmsKKyMgU2hvdWxkLVN0b3A6ICAgICAgICAgICRuZXR3b3JrCisjIERlZmF1bHQtU3RhcnQ6ICAgICAgICAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAgICAwIDEgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogICAgU3lzdGVtIGxvZ2dlcgorIyMjIEVORCBJTklUIElORk8KKworIyBTb3VyY2UgZnVuY3Rpb24gbGlicmFyeS4KKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK1BBVEg9L2JpbjovdXNyL2Jpbjovc2JpbjovdXNyL3NiaW4KKworcGlkZmlsZV9zeXNsb2dkPS92YXIvcnVuL3N5c2xvZ2QucGlkCitwaWRmaWxlX2tsb2dkPS92YXIvcnVuL2tsb2dkLnBpZAorYmlucGF0aF9zeXNsb2dkPS9zYmluL3N5c2xvZ2QKK2JpbnBhdGhfa2xvZ2Q9L3NiaW4va2xvZ2QKKwordGVzdCAteCAkYmlucGF0aCB8fCBleGl0IDAKKwordGVzdCAhIC1yIC9ldGMvZGVmYXVsdC9zeXNsb2dkIHx8IC4gL2V0Yy9kZWZhdWx0L3N5c2xvZ2QKKworY3JlYXRlX3hjb25zb2xlKCkKK3sKKyAgICAjIE9ubHkgcHJvY2VlZCBpZiAvZGV2L3hjb25zb2xlIGlzIHVzZWQgYXQgYWxsCisgICAgaWYgISBncmVwIC1xICdeW14jXS4qL2Rldi94Y29uc29sZScgL2V0Yy9zeXNsb2cuY29uZgorICAgIHRoZW4KKwlyZXR1cm4KKyAgICBmaQorCisgICAgaWYgWyAhIC1lIC9kZXYveGNvbnNvbGUgXTsgdGhlbgorCW1rbm9kIC1tIDY0MCAvZGV2L3hjb25zb2xlIHAKKyAgICBlbHNlCisJY2htb2QgMDY0MCAvZGV2L3hjb25zb2xlCisgICAgZmkKKyAgICBjaG93biByb290OmFkbSAvZGV2L3hjb25zb2xlCisgICAgdGVzdCAhIC14IC9zYmluL3Jlc3RvcmVjb24gfHwgL3NiaW4vcmVzdG9yZWNvbiAvZGV2L3hjb25zb2xlCit9CisKK2xvZ19iZWdpbl9tc2cgKCkgeworICAgIGVjaG8gLW4gJDEKK30KKworbG9nX2VuZF9tc2cgKCkgeworICAgIGVjaG8gJDEKK30KKworbG9nX3N1Y2Nlc3NfbXNnICgpIHsKKyAgICBlY2hvICQxCit9CisKK3J1bm5pbmcoKQoreworICAgICMgTm8gcGlkZmlsZSwgcHJvYmFibHkgbm8gZGFlbW9uIHByZXNlbnQKKyAgICAjCisgICAgaWYgWyAhIC1mICRwaWRmaWxlIF0KKyAgICB0aGVuCisJcmV0dXJuIDEKKyAgICBmaQorCisgICAgcGlkPWBjYXQgJHBpZGZpbGVfc3lzbG9nZGAKKworICAgICMgTm8gcGlkLCBwcm9iYWJseSBubyBkYWVtb24gcHJlc2VudAorICAgICMKKyAgICBpZiBbIC16ICIkcGlkIiBdCisgICAgdGhlbgorCXJldHVybiAxCisgICAgZmkKKworICAgIGlmIFsgISAtZCAvcHJvYy8kcGlkIF0KKyAgICB0aGVuCisJcmV0dXJuIDEKKyAgICBmaQorCisgICAgY21kPWBjYXQgL3Byb2MvJHBpZC9jbWRsaW5lIHwgdHIgIlwwMDAiICJcbiJ8aGVhZCAtbiAxYAorCisgICAgIyBObyBzeXNsb2dkPworICAgICMKKyAgICBpZiBbICIkY21kIiAhPSAiJGJpbnBhdGgiIF0KKyAgICB0aGVuCisJcmV0dXJuIDEKKyAgICBmaQorCisgICAgcmV0dXJuIDAKK30KKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgIGxvZ19iZWdpbl9tc2cgIlN0YXJ0aW5nIHN5c3RlbSBsb2cgZGFlbW9uLi4uIgorICAgIGNyZWF0ZV94Y29uc29sZQorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLXBpZGZpbGUgJHBpZGZpbGVfc3lzbG9nZCAtLW5hbWUgc3lzbG9nZCAtLXN0YXJ0YXMgJGJpbnBhdGhfc3lzbG9nZCAtLSAkU1lTTE9HRAorICAgIGxvZ19lbmRfbXNnICQ/CisgICAgbG9nX2JlZ2luX21zZyAiU3RhcnRpbmcga2VybmVsIGxvZyBkYWVtb24uLi4iCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tcGlkZmlsZSAkcGlkZmlsZV9rbG9nZCAtLW5hbWUga2xvZ2QgLS1zdGFydGFzICRiaW5wYXRoX2tsb2dkIC0tICRLTE9HRAorICAgIGxvZ19lbmRfbXNnICQ/CisgICAgOzsKKyAgc3RvcCkKKyAgICBsb2dfYmVnaW5fbXNnICJTdG9wcGluZyBzeXN0ZW0gbG9nIGRhZW1vbi4uLiIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLXBpZGZpbGUgJHBpZGZpbGVfc3lzbG9nZCAtLW5hbWUgc3lzbG9nZAorICAgIGxvZ19lbmRfbXNnICQ/CisgICAgbG9nX2JlZ2luX21zZyAiU3RvcHBpbmcga2VybmVsIGxvZyBkYWVtb24uLi4iCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1yZXRyeSAzIC0tZXhlYyAkYmlucGF0aF9rbG9nZCAtLXBpZGZpbGUgJHBpZGZpbGVfa2xvZ2QKKyAgICBsb2dfZW5kX21zZyAkPworICAgIDs7CisgIHJlbG9hZHxmb3JjZS1yZWxvYWQpCisgICAgbG9nX2JlZ2luX21zZyAiUmVsb2FkaW5nIHN5c3RlbSBsb2cgZGFlbW9uLi4uIgorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tc2lnbmFsIDEgLS1waWRmaWxlICRwaWRmaWxlX3N5c2xvZ2QgLS1uYW1lIHN5c2xvZ2QKKyAgICBsb2dfZW5kX21zZyAkPworICAgIGxvZ19iZWdpbl9tc2cgIlJlbG9hZGluZyBrZXJuZWwgbG9nIGRhZW1vbi4uLiIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLXJldHJ5IDMgLS1leGVjICRiaW5wYXRoX2tsb2dkIC0tcGlkZmlsZSAkcGlkZmlsZV9rbG9nZAorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLXBpZGZpbGUgJHBpZGZpbGVfa2xvZ2QgLS1uYW1lIGtsb2dkIC0tc3RhcnRhcyAkYmlucGF0aF9rbG9nZCAtLSAkS0xPR0QKKyAgICBsb2dfZW5kX21zZyAkPworICAgIDs7CisgIHJlc3RhcnQpCisgICAgbG9nX2JlZ2luX21zZyAiUmVzdGFydGluZyBzeXN0ZW0gbG9nIGRhZW1vbi4uLiIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1yZXRyeSA1IC0tcXVpZXQgLS1waWRmaWxlICRwaWRmaWxlX3N5c2xvZ2QgLS1uYW1lIHN5c2xvZ2QKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1waWRmaWxlICRwaWRmaWxlX3N5c2xvZ2QgLS1uYW1lIHN5c2xvZ2QgLS1zdGFydGFzICRiaW5wYXRoX3N5c2xvZ2QgLS0gJFNZU0xPR0QKKyAgICBsb2dfZW5kX21zZyAkPworICAgIGxvZ19iZWdpbl9tc2cgIlJlbG9hZGluZyBrZXJuZWwgbG9nIGRhZW1vbi4uLiIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLXJldHJ5IDMgLS1leGVjICRiaW5wYXRoX2tsb2dkIC0tcGlkZmlsZSAkcGlkZmlsZV9rbG9nZAorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLXBpZGZpbGUgJHBpZGZpbGVfa2xvZ2QgLS1uYW1lIGtsb2dkIC0tc3RhcnRhcyAkYmlucGF0aF9rbG9nZCAtLSAkS0xPR0QKKyAgICBsb2dfZW5kX21zZyAkPworICAgIDs7CisgIHJlbG9hZC1vci1yZXN0YXJ0KQorICAgIGlmIHJ1bm5pbmcKKyAgICB0aGVuCisJJDAgcmVsb2FkCisgICAgZWxzZQorCSQwIHN0YXJ0CisgICAgZmkKKyAgICA7OworICBzdGF0dXMpCisgICAgc3RhdHVzIHN5c2xvZ2QKKyAgICBSRVRWQUw9JD8KKyAgICBzdGF0dXMga2xvZ2QKKyAgICBydmFsPSQ/CisgICAgWyAkUkVUVkFMIC1lcSAwIF0gJiYgZXhpdCAkcnZhbAorICAgIGV4aXQgJFJFVFZBTAorICAgIDs7CisgICopCisgICAgbG9nX3N1Y2Nlc3NfbXNnICJVc2FnZTogL2V0Yy9pbml0LmQvc3lza2xvZ2Qge3N0YXJ0fHN0b3B8cmVsb2FkfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfHJlbG9hZC1vci1yZXN0YXJ0fHN0YXR1c30iCisgICAgZXhpdCAxCitlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2QvZmlsZXMvc3lzbG9nLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9zeXNsb2cuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODQ5ZGUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2QvZmlsZXMvc3lzbG9nLmNvbmYKQEAgLTAsMCArMSw3MSBAQAorIyAgL2V0Yy9zeXNsb2cuY29uZglDb25maWd1cmF0aW9uIGZpbGUgZm9yIHN5c2xvZ2QuCisjCisjICBQb3J0ZWQgZnJvbSBkZWJpYW4gYnkgWXUgS2UgPGtlLnl1QGludGVsLmNvbT4KKyMKKworIworIyBGaXJzdCBzb21lIHN0YW5kYXJkIGxvZ2ZpbGVzLiAgTG9nIGJ5IGZhY2lsaXR5LgorIworCithdXRoLGF1dGhwcml2LioJCQkvdmFyL2xvZy9hdXRoLmxvZworKi4qO2F1dGgsYXV0aHByaXYubm9uZQkJLS92YXIvbG9nL3N5c2xvZworI2Nyb24uKgkJCQkvdmFyL2xvZy9jcm9uLmxvZworZGFlbW9uLioJCQktL3Zhci9sb2cvZGFlbW9uLmxvZwora2Vybi4qCQkJCS0vdmFyL2xvZy9rZXJuLmxvZworbHByLioJCQkJLS92YXIvbG9nL2xwci5sb2cKK21haWwuKgkJCQktL3Zhci9sb2cvbWFpbC5sb2cKK3VzZXIuKgkJCQktL3Zhci9sb2cvdXNlci5sb2cKKworIworIyBMb2dnaW5nIGZvciB0aGUgbWFpbCBzeXN0ZW0uICBTcGxpdCBpdCB1cCBzbyB0aGF0CisjIGl0IGlzIGVhc3kgdG8gd3JpdGUgc2NyaXB0cyB0byBwYXJzZSB0aGVzZSBmaWxlcy4KKyMKK21haWwuaW5mbwkJCS0vdmFyL2xvZy9tYWlsLmluZm8KK21haWwud2FybgkJCS0vdmFyL2xvZy9tYWlsLndhcm4KK21haWwuZXJyCQkJL3Zhci9sb2cvbWFpbC5lcnIKKworIyBMb2dnaW5nIGZvciBJTk4gbmV3cyBzeXN0ZW0KKyMKK25ld3MuY3JpdAkJCS92YXIvbG9nL25ld3MuY3JpdAorbmV3cy5lcnIJCQkvdmFyL2xvZy9uZXdzLmVycgorbmV3cy5ub3RpY2UJCQktL3Zhci9sb2cvbmV3cy5ub3RpY2UKKworIworIyBTb21lIGBjYXRjaC1hbGwnIGxvZ2ZpbGVzLgorIworKi49ZGVidWc7XAorYXV0aCxhdXRocHJpdi5ub25lO1wKK25ld3Mubm9uZTttYWlsLm5vbmUJLS92YXIvbG9nL2RlYnVnCisKKyouPWluZm87Ki49bm90aWNlOyouPXdhcm47XAorYXV0aCxhdXRocHJpdi5ub25lO1wKK2Nyb24sZGFlbW9uLm5vbmU7XAorbWFpbCxuZXdzLm5vbmUJCS0vdmFyL2xvZy9tZXNzYWdlcworCisjCisjIEVtZXJnZW5jaWVzIGFyZSBzZW50IHRvIGV2ZXJ5Ym9keSBsb2dnZWQgaW4uCisjCisqLmVtZXJnCQkJCSoKKworIworIyBJIGxpa2UgdG8gaGF2ZSBtZXNzYWdlcyBkaXNwbGF5ZWQgb24gdGhlIGNvbnNvbGUsIGJ1dCBvbmx5IG9uIGEgdmlydHVhbAorIyBjb25zb2xlIEkgdXN1YWxseSBsZWF2ZSBpZGxlLgorIworI2RhZW1vbixtYWlsLio7XAorI25ld3MuPWNyaXQ7bmV3cy49ZXJyO25ld3MuPW5vdGljZTtcCisjKi49ZGVidWc7Ki49aW5mbztcCisjKi49bm90aWNlOyouPXdhcm4JL2Rldi90dHk4CisKKyMgVGhlIG5hbWVkIHBpcGUgL2Rldi94Y29uc29sZSBpcyBmb3IgdGhlIGB4Y29uc29sZScgdXRpbGl0eS4gIFRvIHVzZSBpdCwKKyMgeW91IG11c3QgaW52b2tlIGB4Y29uc29sZScgd2l0aCB0aGUgYC1maWxlJyBvcHRpb246CisjCisjICAgICQgeGNvbnNvbGUgLWZpbGUgL2Rldi94Y29uc29sZSBbLi4uXQorIworIyBOT1RFOiBhZGp1c3QgdGhlIGxpc3QgYmVsb3csIG9yIHlvdSdsbCBnbyBjcmF6eSBpZiB5b3UgaGF2ZSBhIHJlYXNvbmFibHkKKyMgICAgICBidXN5IHNpdGUuLgorIworZGFlbW9uLio7bWFpbC4qO1wKK25ld3MuZXJyO1wKKyouPWRlYnVnOyouPWluZm87XAorKi49bm90aWNlOyouPXdhcm4JfC9kZXYveGNvbnNvbGUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2Qvc3lza2xvZ2QuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2Qvc3lza2xvZ2QuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZjhhYTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9zeXNrbG9nZC5pbmMKQEAgLTAsMCArMSw1OCBAQAorU1VNTUFSWSA9ICJTeXN0ZW0gTG9nIERhZW1vbnMiCitERVNDUklQVElPTiA9ICJUaGUgc3lza2xvZ2QgcGFja2FnZSBpbXBsZW1lbnRzIHR3byBzeXN0ZW0gbG9nIGRhZW1vbnM6IHN5c2xvZ2QsIGtsb2dkIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5pbmZvZHJvbS5vcmcvcHJvamVjdHMvc3lza2xvZ2QvIgorU0VDVElPTiA9ICJiYXNlIgorCitMSUNFTlNFID0gIkdQTHYyKyAmIEJTRCIKK0xJQ0VOU0Vfc3lzbG9nZCA9ICJCU0QiCitMSUNFTlNFX2tsb2dkID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PThjYTQzY2JjODQyYzIzMzZlODM1OTI2YzIxNjZjMjhiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3N5c2xvZ2QuYztiZWdpbmxpbmU9MjtlbmRsaW5lPTE1O21kNT03N2ZmYjJmZWM0OGM0NmQ3Y2EwYWJiMmQ1ODEzZTdmZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9rbG9nZC5jO2JlZ2lubGluZT0yO2VuZGxpbmU9MTk7bWQ1PTdlODdlZDBhZTYxNDJkZTA3OWJjZTczOGMxMGM4OTlkIFwKKyAgICAgICAgICAgICAgICAgICAiCisKK2luaGVyaXQgdXBkYXRlLXJjLmQgdXBkYXRlLWFsdGVybmF0aXZlcworCitTUkNfVVJJID0gImh0dHA6Ly93d3cuaW5mb2Ryb20ub3JnL3Byb2plY3RzL3N5c2tsb2dkL2Rvd25sb2FkL3N5c2tsb2dkLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9uby1zdHJpcC1pbnN0YWxsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3N5c2tsb2dkIFwKKyAgICAgICAgICAgZmlsZTovL3N5c2xvZy5jb25mIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJX2FwcGVuZF9lNTAwdjIgPSAiIGZpbGU6Ly9uby12ZWN0b3JpemF0aW9uLnBhdGNoIgorCitJTklUU0NSSVBUX05BTUUgPSAic3lzbG9nIgorQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vc3lzbG9nLmNvbmYuJHtCUE59IgorCitDRkxBR1NfYXBwZW5kID0gIiAtRFNZU1YiCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7bWFuZGlyfS9tYW44IFwKKwkJCSR7RH0ke21hbmRpcn0vbWFuNSBcCisJCQkke0R9JHtiYXNlX3NiaW5kaXJ9CisJb2VfcnVubWFrZSAnQklORElSPSR7RH0ke2Jhc2Vfc2JpbmRpcn0nIFwKKwkJCSdNQU5ESVI9JHtEfSR7bWFuZGlyfScgaW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L3N5c2xvZy5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2xvZy5jb25mCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDc1NSAke1dPUktESVJ9L3N5c2tsb2dkICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9zeXNsb2cKK30KKworIyBzeXNrbG9nZCBwYWNrYWdlIGhhcyBubyBpbnRlcm5hbCBzeXN0ZW1kIHN1cHBvcnQsIHNvIHdlIHdlaWdoIGJ1c3lib3gncworIyBzeXNrbG9nZCB1dGlsaXR5IG92ZXIgaXQgaW4gY2FzZSBvZiBzeXN0ZW1kCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJzEwJywnMTAwJyxkKX0iCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gInN5c2xvZ2Qga2xvZ2Qgc3lzbG9nLWluaXQgc3lzbG9nLWNvbmYiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzeXNsb2dkXSA9ICIke2Jhc2Vfc2JpbmRpcn0vc3lzbG9nZCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtrbG9nZF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2tsb2dkIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N5c2xvZy1pbml0XSA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9zeXNsb2ciCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3lzbG9nLWNvbmZdID0gIiR7c3lzY29uZmRpcn0vc3lzbG9nLmNvbmYiCisKK3BrZ19wcmVybV8ke1BOfSAoKSB7CisJaWYgdGVzdCAieCREIiA9ICJ4IjsgdGhlbgorCWlmIHRlc3QgIiQxIiA9ICJ1cGdyYWRlIiAtbyAiJDEiID0gInJlbW92ZSI7IHRoZW4KKwkJL2V0Yy9pbml0LmQvc3lzbG9nIHN0b3AKKwlmaQorCWZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9zeXNrbG9nZF8xLjUuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL3N5c2tsb2dkXzEuNS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NWVjYzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9zeXNrbG9nZF8xLjUuMS5iYgpAQCAtMCwwICsxLDQgQEAKK3JlcXVpcmUgc3lza2xvZ2QuaW5jCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjNzA1OTlhYjBkMDM3ZmRlNzI0ZjcyMTBjMmM4ZDdmOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1MTY2YzE4NWFlMjNjOTJlOGI5ZmVlZTY2YTZlM2QwYmM5NDRiZjY3MzExMmY1M2UzZWNmNjJlMDhjZTdjMjAxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM3NjFmYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdC5pbmMKQEAgLTAsMCArMSw1NSBAQAorU1VNTUFSWSA9ICJTeXN0ZW0gcGVyZm9ybWFuY2UgdG9vbHMiCitERVNDUklQVElPTiA9ICJUaGUgc3lzc3RhdCB1dGlsaXRpZXMgYXJlIGEgY29sbGVjdGlvbiBvZiBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHRvb2xzIGZvciBMaW51eC4iCitIT01FUEFHRSA9ICJodHRwOi8vc2ViYXN0aWVuLmdvZGFyZC5wYWdlc3BlcnNvLW9yYW5nZS5mci8iCitMSUNFTlNFID0gIkdQTHYyKyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworU1JDX1VSSSA9ICJodHRwOi8vcGFnZXNwZXJzby1vcmFuZ2UuZnIvc2ViYXN0aWVuLmdvZGFyZC9zeXNzdGF0LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly85OV9zeXNzdGF0IFwKKyAgICAgICAgICAgZmlsZTovL3N5c3N0YXQuc2VydmljZSBcCisgICAgICAgICAgIgorCitERVBFTkRTICs9ICJiYXNlLXBhc3N3ZCIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGdldHRleHQgc3lzdGVtZAorCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1zZW5zb3JzIgorRVhUUkFfT0VNQUtFICs9ICdMRkxBR1M9IiInCisKK1NZU1RFTURfUEFDS0FHRVMgPSAiJHtQTn0iCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAic3lzc3RhdC5zZXJ2aWNlIgorU1lTVEVNRF9BVVRPX0VOQUJMRSA9ICJlbmFibGUiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIGV4cG9ydCBzYV9saWJfZGlyPSR7bGliZGlyfS9zYQorfQorCitkb19pbnN0YWxsKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwkjIGRvbid0IGluc3RhbGwgL3Zhci9sb2cvc2Egd2hlbiBwb3B1bGF0aW5nIHJvb3Rmcy4gRG8gaXQgdGhyb3VnaCB2b2xhdGlsZQorCisJcm0gLXJmICR7RH0vdmFyCisJaW5zdGFsbCAtZCAke0R9L2V0Yy9kZWZhdWx0L3ZvbGF0aWxlcworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9Lzk5X3N5c3N0YXQgJHtEfS9ldGMvZGVmYXVsdC92b2xhdGlsZXMKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zeXNzdGF0LnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MjQExJQkRJUkAjJHtsaWJkaXJ9I2cnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3N0YXQuc2VydmljZQorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworICAgICAgICBpZiBbIC1uICIkRCIgXTsgdGhlbgorICAgICAgICAgICAgICAgIGV4aXQgMAorICAgICAgICBmaQorICAgICAgICBpZiBbIC1lIC9ldGMvaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIF07IHRoZW4KKyAgICAgICAgICAgICAgICAvZXRjL2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCB1cGRhdGUKKyAgICAgICAgZmkKK30KKworCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L3NhIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vc2EvLmRlYnVnLyIKKworVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCitMREZMQUdTX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLWxpbnRsIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0Lzk5X3N5c3N0YXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXQvOTlfc3lzc3RhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjBlYzMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0Lzk5X3N5c3N0YXQKQEAgLTAsMCArMSBAQAorZCByb290IHJvb3QgMDc1NSAvdmFyL2xvZy9zYSBub25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXQvc3lzc3RhdC5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0L3N5c3N0YXQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmYwNzEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0L3N5c3N0YXQuc2VydmljZQpAQCAtMCwwICsxLDEyIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVJlc2V0cyBTeXN0ZW0gQWN0aXZpdHkgTG9ncworCitbU2VydmljZV0KK1R5cGU9b25lc2hvdAorUmVtYWluQWZ0ZXJFeGl0PXllcworVXNlcj1yb290CitFeGVjU3RhcnQ9QExJQkRJUkAvc2Evc2ExIC0tYm9vdAorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdF8xMS4xLjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXRfMTEuMS41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZDJlYzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXRfMTEuMS41LmJiCkBAIC0wLDAgKzEsNyBAQAorcmVxdWlyZSBzeXNzdGF0LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04Y2E0M2NiYzg0MmMyMzM2ZTgzNTkyNmMyMTY2YzI4YiIKKworU1JDX1VSSVttZDVzdW1dID0gIjRkOGU2ZTcyZDA1NzE4OWExNjYwNDYyYTY3OGQ5YWRhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZlYjNhOTBkODZmZmQ2OWNmNWI4ODE0NGE4ODc2YWUwNWJkNDIzODRmNTU5Njc2ZjA4MTAwNjcxNTg5ZmEyYmIiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXItMS4xNy9hdm9pZF9oZWFwX292ZXJmbG93LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci0xLjE3L2F2b2lkX2hlYXBfb3ZlcmZsb3cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEyYWUzYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXItMS4xNy9hdm9pZF9oZWFwX292ZXJmbG93LnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbYnVnZml4OiBodHRwOi8vd2ViLm52ZC5uaXN0Lmdvdi92aWV3L3Z1bG4vZGV0YWlsP3Z1bG5JZD1DVkUtMjAxMC0wNjI0XQorCitUaGlzIHBhdGNoIGF2b2lkcyBoZWFwIG92ZXJmbG93IHJlcG9ydGVkIGJ5IDoKK2h0dHA6Ly93ZWIubnZkLm5pc3QuZ292L3ZpZXcvdnVsbi9kZXRhaWw/dnVsbklkPUNWRS0yMDEwLTA2MjQKKworVGhpcyBpcyBhIGNsZWFuIHBhdGNoIGZvciB0aGUgR1BMdjIgdGFyIHJlY2lwZS4KKworTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8wNC8yNQorCitJbmRleDogdGFyLTEuMTcvbGliL3J0YXBlbGliLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0YXItMS4xNy5vcmlnL2xpYi9ydGFwZWxpYi5jCisrKysgdGFyLTEuMTcvbGliL3J0YXBlbGliLmMKK0BAIC01NzAsNyArNTcwLDcgQEAgcm10X3JlYWRfXyAoaW50IGhhbmRsZSwgY2hhciAqYnVmZmVyLCBzaQorIAorICAgc3ByaW50ZiAoY29tbWFuZF9idWZmZXIsICJSJWx1XG4iLCAodW5zaWduZWQgbG9uZykgbGVuZ3RoKTsKKyAgIGlmIChkb19jb21tYW5kIChoYW5kbGUsIGNvbW1hbmRfYnVmZmVyKSA9PSAtMQorLSAgICAgIHx8IChzdGF0dXMgPSBnZXRfc3RhdHVzIChoYW5kbGUpKSA9PSBTQUZFX1JFQURfRVJST1IpCisrICAgICAgfHwgKChzdGF0dXMgPSBnZXRfc3RhdHVzIChoYW5kbGUpKSA9PSBTQUZFX1JFQURfRVJST1IpIHx8IChzdGF0dXMgPiBsZW5ndGgpKQorICAgICByZXR1cm4gU0FGRV9SRUFEX0VSUk9SOworIAorICAgZm9yIChjb3VudGVyID0gMDsgY291bnRlciA8IHN0YXR1czsgY291bnRlciArPSBybGVuLCBidWZmZXIgKz0gcmxlbikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXItMS4xNy9nY2M0M2J1aWxkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci0xLjE3L2djYzQzYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgwNTlhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXItMS4xNy9nY2M0M2J1aWxkLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCisjIEZpeCBlcnJvcnMgd2hlbiBidWlsdCB3aXRoIGdjYyA0LjMKKyMgUGF0Y2ggdGFrZW4gZnJvbSBEZWJpYW4gYnVnICM0NTIwOTYKKworZGlmZiAtdXJOIHRhci0xLjE3Lm9yaWcvbGliL2FyZ3AtZm10c3RyZWFtLmggdGFyLTEuMTcvbGliL2FyZ3AtZm10c3RyZWFtLmgKKy0tLSB0YXItMS4xNy5vcmlnL2xpYi9hcmdwLWZtdHN0cmVhbS5oCTIwMDYtMDEtMTEgMTI6MjQ6MDUuMDAwMDAwMDAwIC0wODAwCisrKysgdGFyLTEuMTcvbGliL2FyZ3AtZm10c3RyZWFtLmgJMjAxMC0wNy0yMiAyMjozNjoxMi4wMDAwMDAwMDAgLTA3MDAKK0BAIC0xOTgsNyArMTk4LDExIEBACisgI2VuZGlmCisgCisgI2lmbmRlZiBBUkdQX0ZTX0VJCistI2RlZmluZSBBUkdQX0ZTX0VJIGV4dGVybiBpbmxpbmUKKysgI2lmIGRlZmluZWQgX19HTlVDX1NURENfSU5MSU5FX18KKysgICAjZGVmaW5lIEFSR1BfRlNfRUkgZXh0ZXJuIGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2dudV9pbmxpbmVfXykpCisrICNlbHNlCisrICAgI2RlZmluZSBBUkdQX0ZTX0VJIGV4dGVybiBpbmxpbmUKKysgI2VuZGlmCisgI2VuZGlmCisgCisgQVJHUF9GU19FSSBzaXplX3QKK2RpZmYgLXVyTiB0YXItMS4xNy5vcmlnL2xpYi9hcmdwLmggdGFyLTEuMTcvbGliL2FyZ3AuaAorLS0tIHRhci0xLjE3Lm9yaWcvbGliL2FyZ3AuaAkyMDA3LTAzLTMwIDAwOjA5OjExLjAwMDAwMDAwMCAtMDcwMAorKysrIHRhci0xLjE3L2xpYi9hcmdwLmgJMjAxMC0wNy0yMiAyMjozODo0NC4wMDAwMDAwMDAgLTA3MDAKK0BAIC01ODAsNyArNTgwLDExIEBACisgIyBlbmRpZgorIAorICMgaWZuZGVmIEFSR1BfRUkKKy0jICBkZWZpbmUgQVJHUF9FSSBleHRlcm4gX19pbmxpbmVfXworKyMgIGlmIGRlZmluZWQgX19HTlVDX1NURENfSU5MSU5FX18KKysjICAgIGRlZmluZSBBUkdQX0VJIGV4dGVybiBfX2lubGluZV9fIF9fYXR0cmlidXRlX18oKF9fZ251X2lubGluZV9fKSkKKysjICBlbHNlCisrIyAgICBkZWZpbmUgQVJHUF9FSSBleHRlcm4gX19pbmxpbmVfXworKyMgIGVuZGlmCisgIyBlbmRpZgorIAorIEFSR1BfRUkgdm9pZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci0xLjE3L200ZXh0ZW5zaW9ucy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXItMS4xNy9tNGV4dGVuc2lvbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1MzRjMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXItMS4xNy9tNGV4dGVuc2lvbnMucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKKyMgRGVmaW5lIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBvbmx5IGlmIGl0IHdhcyBwcmV2aW91c2x5IHVuZGVmaW5lZC4KKyMgVGhpcyBpcyBuZWVkZWQgdG8gY29uZmlndXJlIGNvcnJlY3RseSB3aXRoIG5ld2VyIHZlcnNpb25zIG9mIGF1dG9jb25mLgorCistLS0gdGFyLTEuMTcvbTQvZXh0ZW5zaW9ucy5tNC5vcmlnCTIwMTAtMDctMjIgMjI6MjE6MzUuMDAwMDAwMDAwIC0wNzAwCisrKysgdGFyLTEuMTcvbTQvZXh0ZW5zaW9ucy5tNAkyMDEwLTA3LTIyIDIyOjIzOjQxLjAwMDAwMDAwMCAtMDcwMAorQEAgLTEsNCArMSw0IEBACistIyBzZXJpYWwgNCAgLSotIEF1dG9jb25mIC0qLQorKyMgc2VyaWFsIDUgIC0qLSBBdXRvY29uZiAtKi0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0uCisgCisgIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitAQCAtMTYsNiArMTYsNyBAQAorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorICMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorK200X2lmZGVmKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLCBbXSwgWworIEFDX0RFRlVOKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorIFsKKyAgIEFDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKQorQEAgLTQ4LDcgKzQ5LDcgQEAKKyAgICAgQUNfREVGSU5FKFtfX0VYVEVOU0lPTlNfX10pCisgICBBQ19ERUZJTkUoW19QT1NJWF9QVEhSRUFEX1NFTUFOVElDU10pCisgICBBQ19ERUZJTkUoW19UQU5ERU1fU09VUkNFXSkKKy1dKQorK10pXSkKKyAKKyAjIGdsX1VTRV9TWVNURU1fRVhURU5TSU9OUworICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMzljNDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyLmluYwpAQCAtMCwwICsxLDUwIEBACitTVU1NQVJZID0gIkdOVSBmaWxlIGFyY2hpdmluZyBwcm9ncmFtIgorREVTQ1JJUFRJT04gPSAiR05VIHRhciBzYXZlcyBtYW55IGZpbGVzIHRvZ2V0aGVyIGludG8gYSBzaW5nbGUgdGFwZSBcCitvciBkaXNrIGFyY2hpdmUsIGFuZCBjYW4gcmVzdG9yZSBpbmRpdmlkdWFsIGZpbGVzIGZyb20gdGhlIGFyY2hpdmUuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3Rhci8iCitTRUNUSU9OID0gImJhc2UiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS90YXIvdGFyLSR7UFZ9LnRhci5iejIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCitFWFRSQV9PRUNPTkYgKz0gIkRFRkFVTFRfUk1UX0RJUj0ke2Jhc2Vfc2JpbmRpcn0iCisKKyMgTGV0IGFjbG9jYWwgdXNlIHRoZSByZWxhdGl2ZSBwYXRoIGZvciB0aGUgbTQgZmlsZSByYXRoZXIgdGhhbiB0aGUKKyMgYWJzb2x1dGUgc2luY2UgdGFyIGhhcyBhIGxvdCBvZiBtNCBmaWxlcywgb3RoZXJ3aXNlIHRoZXJlIG1pZ2h0CisjIGJlIGFuICJBcmd1bWVudCBsaXN0IHRvbyBsb25nIiBlcnJvciB3aGVuIGl0IGlzIGJ1aWx0IGluIGEgbG9uZy9kZWVwCisjIGRpcmVjdG9yeS4KK2FjcGF0aHMgPSAiLUkgLi9tNCIKKworZG9faW5zdGFsbCAoKSB7CisgICAgYXV0b3Rvb2xzX2RvX2luc3RhbGwKKyAgICBsbiAtcyB0YXIgJHtEfSR7YmluZGlyfS9ndGFyCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorICAgIG12ICR7RH0ke2JpbmRpcn0vdGFyICR7RH0ke2Jhc2VfYmluZGlyfS90YXIKKyAgICBtdiAke0R9JHtiaW5kaXJ9L2d0YXIgJHtEfSR7YmFzZV9iaW5kaXJ9L2d0YXIKKyAgICBybWRpciAke0R9JHtiaW5kaXJ9LworfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tcm10IgorCitGSUxFU18ke1BOfS1ybXQgPSAiJHtiYXNlX3NiaW5kaXJ9L3JtdCoiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gInRhciIKK0FMVEVSTkFUSVZFXyR7UE59LXJtdCA9ICJybXQiCitBTFRFUk5BVElWRV8ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorQUxURVJOQVRJVkVfJHtQTn0tcm10X2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt0YXJdID0gIiR7YmFzZV9iaW5kaXJ9L3RhciIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtybXRdID0gIiR7YmFzZV9zYmluZGlyfS9ybXQiCisKK1BST1ZJREVTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIHRhci1yZXBsYWNlbWVudC1uYXRpdmUiCitOQVRJVkVfUEFDS0FHRV9QQVRIX1NVRkZJWCA9ICIvJHtQTn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXIvcmVtb3ZlLWdldHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyL3JlbW92ZS1nZXRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiOGJlMzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyL3JlbW92ZS1nZXRzLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK0lTTyBDMTEgcmVtb3ZlcyB0aGUgc3BlY2lmaWNhdGlvbiBvZiBnZXRzKCkgZnJvbSB0aGUgQyBsYW5ndWFnZSwgZWdsaWJjIDIuMTYrIHJlbW92ZWQgaXQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitJbmRleDogdGFyLTEuMjcvZ251L3N0ZGlvLmluLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0YXItMS4yNy5vcmlnL2dudS9zdGRpby5pbi5oCTIwMTMtMDYtMjkgMDg6NTQ6MjYuMDAwMDAwMDAwICswMzAwCisrKysgdGFyLTEuMjcvZ251L3N0ZGlvLmluLmgJMjAxMy0xMC0xNiAxNToyMjo0Ni45NzcyMDQ3MzcgKzAzMDAKK0BAIC03MTAsMTAgKzcxMCwxMiBAQAorIC8qIEl0IGlzIHZlcnkgcmFyZSB0aGF0IHRoZSBkZXZlbG9wZXIgZXZlciBoYXMgZnVsbCBjb250cm9sIG9mIHN0ZGluLAorICAgIHNvIGFueSB1c2Ugb2YgZ2V0cyB3YXJyYW50cyBhbiB1bmNvbmRpdGlvbmFsIHdhcm5pbmc7IGJlc2lkZXMsIEMxMQorICAgIHJlbW92ZWQgaXQuICAqLworKyNpZiBkZWZpbmVkIGdldHMKKyAjdW5kZWYgZ2V0cworICNpZiBIQVZFX1JBV19ERUNMX0dFVFMKKyBfR0xfV0FSTl9PTl9VU0UgKGdldHMsICJnZXRzIGlzIGEgc2VjdXJpdHkgaG9sZSAtIHVzZSBmZ2V0cyBpbnN0ZWFkIik7CisgI2VuZGlmCisrI2VuZGlmCisgCisgCisgI2lmIEBHTlVMSUJfT0JTVEFDS19QUklOVEZAIHx8IEBHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVhACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyXzEuMTcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyXzEuMTcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjljYTIwNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXJfMS4xNy5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIHRhci5pbmMKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIgorCitQUiA9ICJyMyIKKworU1JDX1VSSSArPSAiZmlsZTovL200ZXh0ZW5zaW9ucy5wYXRjaCBcCisgICAgZmlsZTovL2djYzQzYnVpbGQucGF0Y2ggXAorICAgIGZpbGU6Ly9hdm9pZF9oZWFwX292ZXJmbG93LnBhdGNoIFwKKyAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjNmM0ZjFjMDc1ZGJmMGY3NWMyOTczN2ZhYTU4ZjI5MCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxOWY5MDIxZGRhNTFhMTYyOTVlNDcwNmU4MDg3MGU3MWY4NzEwNzY3NWU1MWMxNzZhNDkxZWJhMGZjNGNhNDkyIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhcl8xLjI4LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhcl8xLjI4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MTYwMDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyXzEuMjguYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSB0YXIuaW5jCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2FjbF0gPSAiLS13aXRoLXBvc2l4LWFjbHMsIC0td2l0aG91dC1wb3NpeC1hY2xzLCBhY2wsIgorCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9yZW1vdmUtZ2V0cy5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI4ZjMyYjJiYzFlZDdkZGY0Y2Y0ZTRhMzk3MTEzNDFiMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MGU0YmZlMDYwMmZlZjM0Y2Q5MDhkOTFjZjYzOGUxN2VlYjA5Mzk0ZDdiOThjMjQ4NzIxN2RjNGQzMTQ3NTYyIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDBfbWFuX3F1b3RpbmcuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzAwX21hbl9xdW90aW5nLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZkNjcxOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzAwX21hbl9xdW90aW5nLmRpZmYKQEAgLTAsMCArMSw3NyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41IHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUJMTk5NS0wMS0zMCAxOTo1MTo0Ny4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CTIwMDQtMDQtMDkgMTY6NTk6NDUuMDAwMDAwMDAwICswMjAwCitAQCAtMTczLDcgKzE3Myw3IEBACisgUGF0dGVybnMgbGlrZSB0aGVzZSBjYW4gYmUgdXNlZCB3aGVuIHRoZSBtYWNoaW5lIGhhcyBkaWZmZXJlbnQgaW50ZXJuZXQKKyBhZGRyZXNzZXMgd2l0aCBkaWZmZXJlbnQgaW50ZXJuZXQgaG9zdG5hbWVzLiAgU2VydmljZSBwcm92aWRlcnMgY2FuIHVzZQorIHRoaXMgZmFjaWxpdHkgdG8gb2ZmZXIgRlRQLCBHT1BIRVIgb3IgV1dXIGFyY2hpdmVzIHdpdGggaW50ZXJuZXQgbmFtZXMKKy10aGF0IG1heSBldmVuIGJlbG9uZyB0byBkaWZmZXJlbnQgb3JnYW5pemF0aW9ucy4gU2VlIGFsc28gdGhlIGB0d2lzdCcKKyt0aGF0IG1heSBldmVuIGJlbG9uZyB0byBkaWZmZXJlbnQgb3JnYW5pemF0aW9ucy4gU2VlIGFsc28gdGhlIGB0d2lzdFwnCisgb3B0aW9uIGluIHRoZSBob3N0c19vcHRpb25zKDUpIGRvY3VtZW50LiBTb21lIHN5c3RlbXMgKFNvbGFyaXMsCisgRnJlZUJTRCkgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBpbnRlcm5ldCBhZGRyZXNzIG9uIG9uZSBwaHlzaWNhbAorIGludGVyZmFjZTsgd2l0aCBvdGhlciBzeXN0ZW1zIHlvdSBtYXkgaGF2ZSB0byByZXNvcnQgdG8gU0xJUCBvciBQUFAKK0BAIC0yMzYsMTAgKzIzNiwxMCBAQAorIEJlZm9yZSBhY2NlcHRpbmcgYSBjbGllbnQgcmVxdWVzdCwgdGhlIHdyYXBwZXJzIGNhbiB1c2UgdGhlIElERU5UCisgc2VydmljZSB0byBmaW5kIG91dCB0aGF0IHRoZSBjbGllbnQgZGlkIG5vdCBzZW5kIHRoZSByZXF1ZXN0IGF0IGFsbC4KKyBXaGVuIHRoZSBjbGllbnQgaG9zdCBwcm92aWRlcyBJREVOVCBzZXJ2aWNlLCBhIG5lZ2F0aXZlIElERU5UIGxvb2t1cAorLXJlc3VsdCAodGhlIGNsaWVudCBtYXRjaGVzIGBVTktOT1dOQGhvc3QnKSBpcyBzdHJvbmcgZXZpZGVuY2Ugb2YgYSBob3N0CisrcmVzdWx0ICh0aGUgY2xpZW50IG1hdGNoZXMgYFVOS05PV05AaG9zdFwnKSBpcyBzdHJvbmcgZXZpZGVuY2Ugb2YgYSBob3N0Cisgc3Bvb2ZpbmcgYXR0YWNrLgorIC5QUAorLUEgcG9zaXRpdmUgSURFTlQgbG9va3VwIHJlc3VsdCAodGhlIGNsaWVudCBtYXRjaGVzIGBLTk9XTkBob3N0JykgaXMKKytBIHBvc2l0aXZlIElERU5UIGxvb2t1cCByZXN1bHQgKHRoZSBjbGllbnQgbWF0Y2hlcyBgS05PV05AaG9zdFwnKSBpcworIGxlc3MgdHJ1c3R3b3J0aHkuIEl0IGlzIHBvc3NpYmxlIGZvciBhbiBpbnRydWRlciB0byBzcG9vZiBib3RoIHRoZQorIGNsaWVudCBjb25uZWN0aW9uIGFuZCB0aGUgSURFTlQgbG9va3VwLCBhbHRob3VnaCBkb2luZyBzbyBpcyBtdWNoCisgaGFyZGVyIHRoYW4gc3Bvb2ZpbmcganVzdCBhIGNsaWVudCBjb25uZWN0aW9uLiBJdCBtYXkgYWxzbyBiZSB0aGF0CitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX29wdGlvbnMuNSB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX29wdGlvbnMuNQorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19vcHRpb25zLjUJMTk5NC0xMi0yOCAxNzo0MjoyOS4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX29wdGlvbnMuNQkyMDA0LTA0LTA5IDE2OjU5OjQ5LjAwMDAwMDAwMCArMDIwMAorQEAgLTEyNCw3ICsxMjQsNyBAQAorIHZhbHVlIGlzIHRha2VuLgorIC5TSCBNSVNDRUxMQU5FT1VTCisgLklQICJiYW5uZXJzIC9zb21lL2RpcmVjdG9yeSIKKy1Mb29rIGZvciBhIGZpbGUgaW4gYC9zb21lL2RpcmVjdG9yeScgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBkYWVtb24KKytMb29rIGZvciBhIGZpbGUgaW4gYC9zb21lL2RpcmVjdG9yeVwnIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZGFlbW9uCisgcHJvY2VzcyAoZm9yIGV4YW1wbGUgaW4udGVsbmV0ZCBmb3IgdGhlIHRlbG5ldCBzZXJ2aWNlKSwgYW5kIGNvcHkgaXRzCisgY29udGVudHMgdG8gdGhlIGNsaWVudC4gTmV3bGluZSBjaGFyYWN0ZXJzIGFyZSByZXBsYWNlZCBieQorIGNhcnJpYWdlLXJldHVybiBuZXdsaW5lLCBhbmQgJTxsZXR0ZXI+IHNlcXVlbmNlcyBhcmUgZXhwYW5kZWQgKHNlZQorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkbWF0Y2guOCB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRtYXRjaC44CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRtYXRjaC44CTE5OTYtMDItMTEgMTc6MDE6MzYuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkbWF0Y2guOAkyMDA0LTA0LTA5IDE3OjAwOjQ5LjAwMDAwMDAwMCArMDIwMAorQEAgLTI2LDcgKzI2LDcgQEAKKyBBIGRhZW1vbiBwcm9jZXNzIG5hbWUuIFR5cGljYWxseSwgdGhlIGxhc3QgY29tcG9uZW50IG9mIGEgZGFlbW9uCisgZXhlY3V0YWJsZSBwYXRobmFtZS4KKyAuSVAgY2xpZW50CistQSBob3N0IG5hbWUgb3IgbmV0d29yayBhZGRyZXNzLCBvciBvbmUgb2YgdGhlIGB1bmtub3duJyBvciBgcGFyYW5vaWQnCisrQSBob3N0IG5hbWUgb3IgbmV0d29yayBhZGRyZXNzLCBvciBvbmUgb2YgdGhlIGB1bmtub3duXCcgb3IgYHBhcmFub2lkXCcKKyB3aWxkY2FyZCBwYXR0ZXJucy4KKyAuc3AKKyBXaGVuIGEgY2xpZW50IGhvc3QgbmFtZSBpcyBzcGVjaWZpZWQsIFxmSXRjcGRtYXRjaFxmUiBnaXZlcyBhCitAQCAtMzcsMTMgKzM3LDEzIEBACisgLlBQCisgT3B0aW9uYWwgaW5mb3JtYXRpb24gc3BlY2lmaWVkIHdpdGggdGhlIFxmSWRhZW1vbkBzZXJ2ZXJcZlIgZm9ybToKKyAuSVAgc2VydmVyCistQSBob3N0IG5hbWUgb3IgbmV0d29yayBhZGRyZXNzLCBvciBvbmUgb2YgdGhlIGB1bmtub3duJyBvciBgcGFyYW5vaWQnCistd2lsZGNhcmQgcGF0dGVybnMuIFRoZSBkZWZhdWx0IHNlcnZlciBuYW1lIGlzIGB1bmtub3duJy4KKytBIGhvc3QgbmFtZSBvciBuZXR3b3JrIGFkZHJlc3MsIG9yIG9uZSBvZiB0aGUgYHVua25vd25cJyBvciBgcGFyYW5vaWRcJworK3dpbGRjYXJkIHBhdHRlcm5zLiBUaGUgZGVmYXVsdCBzZXJ2ZXIgbmFtZSBpcyBgdW5rbm93blwnLgorIC5QUAorIE9wdGlvbmFsIGluZm9ybWF0aW9uIHNwZWNpZmllZCB3aXRoIHRoZSBcZkl1c2VyQGNsaWVudFxmUiBmb3JtOgorIC5JUCB1c2VyCisgQSBjbGllbnQgdXNlciBpZGVudGlmaWVyLiBUeXBpY2FsbHksIGEgbG9naW4gbmFtZSBvciBhIG51bWVyaWMgdXNlcmlkLgorLVRoZSBkZWZhdWx0IHVzZXIgbmFtZSBpcyBgdW5rbm93bicuCisrVGhlIGRlZmF1bHQgdXNlciBuYW1lIGlzIGB1bmtub3duXCcuCisgLlNIIE9QVElPTlMKKyAuSVAgLWQKKyBFeGFtaW5lIFxmSWhvc3RzLmFsbG93XGZSIGFuZCBcZklob3N0cy5kZW55XGZSIGZpbGVzIGluIHRoZSBjdXJyZW50CitAQCAtNzAsNyArNzAsNyBAQAorIC50aSArNQorIHRjcGRtYXRjaCBpbi50ZWxuZXRkIHBhcmFub2lkCisgLlBQCistT24gc29tZSBzeXN0ZW1zLCBkYWVtb24gbmFtZXMgaGF2ZSBubyBgaW4uJyBwcmVmaXgsIG9yIFxmSXRjcGRtYXRjaFxmUgorK09uIHNvbWUgc3lzdGVtcywgZGFlbW9uIG5hbWVzIGhhdmUgbm8gYGluLlwnIHByZWZpeCwgb3IgXGZJdGNwZG1hdGNoXGZSCisgbWF5IG5lZWQgc29tZSBoZWxwIHRvIGxvY2F0ZSB0aGUgaW5ldGQgY29uZmlndXJhdGlvbiBmaWxlLgorIC5TSCBGSUxFUworIC5QUApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDFfbWFuX3BvcnRhYmlsaXR5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDFfbWFuX3BvcnRhYmlsaXR5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNzM1YmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8wMV9tYW5fcG9ydGFiaWxpdHkucGF0Y2gKQEAgLTAsMCArMSwyNTAgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtcnVOcCB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjMgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuMworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuMwkyMDA1LTAzLTA5IDE4OjMwOjI1LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjMJMjAwNS0wMy0wOSAxODoyNzowMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zLDcgKzMsNyBAQAorIGhvc3RzX2FjY2VzcywgaG9zdHNfY3RsLCByZXF1ZXN0X2luaXQsIHJlcXVlc3Rfc2V0IFwtIGFjY2VzcyBjb250cm9sIGxpYnJhcnkKKyAuU0ggU1lOT1BTSVMKKyAubmYKKy0jaW5jbHVkZSAidGNwZC5oIgorKyNpbmNsdWRlIDx0Y3BkLmg+CisgCisgZXh0ZXJuIGludCBhbGxvd19zZXZlcml0eTsKKyBleHRlcm4gaW50IGRlbnlfc2V2ZXJpdHk7CitkaWZmIC1ydU5wIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNSB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41CTIwMDUtMDMtMDkgMTg6MzA6MjUuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQkyMDA1LTAzLTA5IDE4OjMwOjE4LjAwMDAwMDAwMCArMDEwMAorQEAgLTgsOSArOCw5IEBAIG5hbWUsIGhvc3QgbmFtZS9hZGRyZXNzKSBwYXR0ZXJucy4gIEV4YW0KKyBpbXBhdGllbnQgcmVhZGVyIGlzIGVuY291cmFnZWQgdG8gc2tpcCB0byB0aGUgRVhBTVBMRVMgc2VjdGlvbiBmb3IgYQorIHF1aWNrIGludHJvZHVjdGlvbi4KKyAuUFAKKy1BbiBleHRlbmRlZCB2ZXJzaW9uIG9mIHRoZSBhY2Nlc3MgY29udHJvbCBsYW5ndWFnZSBpcyBkZXNjcmliZWQgaW4gdGhlCistXGZJaG9zdHNfb3B0aW9uc1xmUig1KSBkb2N1bWVudC4gVGhlIGV4dGVuc2lvbnMgYXJlIHR1cm5lZCBvbiBhdAorLXByb2dyYW0gYnVpbGQgdGltZSBieSBidWlsZGluZyB3aXRoIC1EUFJPQ0VTU19PUFRJT05TLgorK1RoZSBleHRlbmRlZCB2ZXJzaW9uIG9mIHRoZSBhY2Nlc3MgY29udHJvbCBsYW5ndWFnZSBpcyBkZXNjcmliZWQgaW4gdGhlCisrXGZJaG9zdHNfb3B0aW9uc1xmUig1KSBkb2N1bWVudC4gXGZCTm90ZSB0aGF0IHRoaXMgbGFuZ3VhZ2Ugc3VwZXJzZWRlcworK3RoZSBtZWFuaW5nIG9mIFxmSXNoZWxsX2NvbW1hbmRcZkIgYXMgZG9jdW1lbnRlZCBiZWxvdy5cZlIKKyAuUFAKKyBJbiB0aGUgZm9sbG93aW5nIHRleHQsIFxmSWRhZW1vblxmUiBpcyB0aGUgdGhlIHByb2Nlc3MgbmFtZSBvZiBhCisgbmV0d29yayBkYWVtb24gcHJvY2VzcywgYW5kIFxmSWNsaWVudFxmUiBpcyB0aGUgbmFtZSBhbmQvb3IgYWRkcmVzcyBvZgorQEAgLTM0Niw4ICszNDYsOCBAQCBpbi50ZnRwZDogTE9DQUwsIC5teS5kb21haW4KKyAvZXRjL2hvc3RzLmRlbnk6CisgLmluICszCisgLm5mCistaW4udGZ0cGQ6IEFMTDogKC9zb21lL3doZXJlL3NhZmVfZmluZ2VyIC1sIEAlaCB8IFxcCistCS91c3IvdWNiL21haWwgLXMgJWQtJWggcm9vdCkgJgorK2luLnRmdHBkOiBBTEw6ICgvdXNyL3NiaW4vc2FmZV9maW5nZXIgLWwgQCVoIHwgXFwKKysJL3Vzci9iaW4vbWFpbCAtcyAlZC0laCByb290KSAmCisgLmZpCisgLlBQCisgVGhlIHNhZmVfZmluZ2VyIGNvbW1hbmQgY29tZXMgd2l0aCB0aGUgdGNwZCB3cmFwcGVyIGFuZCBzaG91bGQgYmUKK0BAIC0zODMsNiArMzgzLDcgQEAgdGhhdCBzaG91bGRuXCd0LiAgQWxsIHByb2JsZW1zIGFyZSByZXBvcgorIC5maQorIC5TSCBTRUUgQUxTTworIC5uZgorK2hvc3RzX29wdGlvbnMoNSkgZXh0ZW5kZWQgc3ludGF4LgorIHRjcGQoOCkgdGNwL2lwIGRhZW1vbiB3cmFwcGVyIHByb2dyYW0uCisgdGNwZGNoayg4KSwgdGNwZG1hdGNoKDgpLCB0ZXN0IHByb2dyYW1zLgorIC5TSCBCVUdTCitkaWZmIC1ydU5wIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19vcHRpb25zLjUgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19vcHRpb25zLjUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfb3B0aW9ucy41CTIwMDUtMDMtMDkgMTg6MzA6MjQuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19vcHRpb25zLjUJMjAwNS0wMy0wOSAxODoyNzowMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yLDEwICsyLDggQEAKKyAuU0ggTkFNRQorIGhvc3RzX29wdGlvbnMgXC0gaG9zdCBhY2Nlc3MgY29udHJvbCBsYW5ndWFnZSBleHRlbnNpb25zCisgLlNIIERFU0NSSVBUSU9OCistVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgb3B0aW9uYWwgZXh0ZW5zaW9ucyB0byB0aGUgbGFuZ3VhZ2UgZGVzY3JpYmVkCistaW4gdGhlIGhvc3RzX2FjY2Vzcyg1KSBkb2N1bWVudC4gVGhlIGV4dGVuc2lvbnMgYXJlIGVuYWJsZWQgYXQgcHJvZ3JhbQorLWJ1aWxkIHRpbWUuIEZvciBleGFtcGxlLCBieSBlZGl0aW5nIHRoZSBNYWtlZmlsZSBhbmQgdHVybmluZyBvbiB0aGUgCistUFJPQ0VTU19PUFRJT05TIGNvbXBpbGUtdGltZSBvcHRpb24uCisrVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgZXh0ZW5zaW9ucyB0byB0aGUgbGFuZ3VhZ2UgZGVzY3JpYmVkCisraW4gdGhlIGhvc3RzX2FjY2Vzcyg1KSBkb2N1bWVudC4KKyAuUFAKKyBUaGUgZXh0ZW5zaWJsZSBsYW5ndWFnZSB1c2VzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorIC5zcAorQEAgLTU4LDEyICs1NiwxMiBAQCBOb3RpY2UgdGhlIGxlYWRpbmcgZG90IG9uIHRoZSBkb21haW4gbmFtCisgRXhlY3V0ZSwgaW4gYSBjaGlsZCBwcm9jZXNzLCB0aGUgc3BlY2lmaWVkIHNoZWxsIGNvbW1hbmQsIGFmdGVyCisgcGVyZm9ybWluZyB0aGUgJTxsZXR0ZXI+IGV4cGFuc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBob3N0c19hY2Nlc3MoNSkKKyBtYW51YWwgcGFnZS4gIFRoZSBjb21tYW5kIGlzIGV4ZWN1dGVkIHdpdGggc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyCistY29ubmVjdGVkIHRvIHRoZSBudWxsIGRldmljZSwgc28gdGhhdCBpdCB3b25cJ3QgbWVzcyB1cCB0aGUKKytjb25uZWN0ZWQgdG8gdGhlIG51bGwgZGV2aWNlLCBzbyB0aGF0IGl0IHdvbid0IG1lc3MgdXAgdGhlCisgY29udmVyc2F0aW9uIHdpdGggdGhlIGNsaWVudCBob3N0LiBFeGFtcGxlOgorIC5zcAorIC5uZgorIC50aSArMworLXNwYXduICgvc29tZS93aGVyZS9zYWZlX2ZpbmdlciAtbCBAJWggfCAvdXNyL3VjYi9tYWlsIHJvb3QpICYKKytzcGF3biAoL3Vzci9zYmluL3NhZmVfZmluZ2VyIC1sIEAlaCB8IC91c3IvYmluL21haWwgcm9vdCkgJgorIC5maQorIC5zcAorIGV4ZWN1dGVzLCBpbiBhIGJhY2tncm91bmQgY2hpbGQgcHJvY2VzcywgdGhlIHNoZWxsIGNvbW1hbmQgInNhZmVfZmluZ2VyCitkaWZmIC1ydU5wIHRjcF93cmFwcGVyc183LjYub3JpZy9pbmV0Y2YuYyB0Y3Bfd3JhcHBlcnNfNy42L2luZXRjZi5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2luZXRjZi5jCTE5OTctMDItMTIgMDI6MTM6MjQuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9pbmV0Y2YuYwkyMDA1LTAzLTA5IDE4OjI3OjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTI2LDEzICsyNiwxNyBAQCBleHRlcm4gdm9pZCBleGl0KCk7CisgICAqIGd1ZXNzZXMuIFNob3J0ZXIgbmFtZXMgZm9sbG93IGxvbmdlciBvbmVzLgorICAgKi8KKyBjaGFyICAgKmluZXRfZmlsZXNbXSA9IHsKKysjaWYgMAorICAgICAiL3ByaXZhdGUvZXRjL2luZXRkLmNvbmYiLAkJLyogTkVYVCAqLworICAgICAiL2V0Yy9pbmV0L2luZXRkLmNvbmYiLAkJLyogU1lTVjQgKi8KKyAgICAgIi91c3IvZXRjL2luZXRkLmNvbmYiLAkJLyogSVJJWD8/ICovCisrI2VuZGlmCisgICAgICIvZXRjL2luZXRkLmNvbmYiLAkJCS8qIEJTRCAqLworKyNpZiAwCisgICAgICIvZXRjL25ldC90bGlkLmNvbmYiLAkJLyogU1lTVjQ/PyAqLworICAgICAiL2V0Yy9zYWYvdGxpZC5jb25mIiwJCS8qIFNZU1Y0Pz8gKi8KKyAgICAgIi9ldGMvdGxpZC5jb25mIiwJCQkvKiBTWVNWND8/ICovCisrI2VuZGlmCisgICAgIDAsCisgfTsKKyAKK2RpZmYgLXJ1TnAgdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGQuOCB0Y3Bfd3JhcHBlcnNfNy42L3RjcGQuOAorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkLjgJMTk5Ni0wMi0yMSAxNjozOToxNi4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGQuOAkyMDA1LTAzLTA5IDE4OjI3OjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTEyLDcgKzEyLDExIEBAIFRoZSBwcm9ncmFtIHN1cHBvcnRzIGJvdGggNC4zQlNELXN0eWxlIHMKKyBUTEkuICBGdW5jdGlvbmFsaXR5IG1heSBiZSBsaW1pdGVkIHdoZW4gdGhlIHByb3RvY29sIHVuZGVybmVhdGggVExJIGlzCisgbm90IGFuIGludGVybmV0IHByb3RvY29sLgorIC5QUAorLU9wZXJhdGlvbiBpcyBhcyBmb2xsb3dzOiB3aGVuZXZlciBhIHJlcXVlc3QgZm9yIHNlcnZpY2UgYXJyaXZlcywgdGhlCisrVGhlcmUgYXJlIHR3byBwb3NzaWJsZSBtb2RlcyBvZiBvcGVyYXRpb246IGV4ZWN1dGlvbiBvZiBcZkl0Y3BkXGZQCisrYmVmb3JlIGEgc2VydmljZSBzdGFydGVkIGJ5IFxmSWluZXRkXGZQLCBvciBsaW5raW5nIGEgZGFlbW9uIHdpdGgKKyt0aGUgXGZJbGlid3JhcFxmUCBzaGFyZWQgbGlicmFyeSBhcyBkb2N1bWVudGVkIGluIHRoZSBcZklob3N0c19hY2Nlc3NcZlIoMykKKyttYW51YWwgcGFnZS4gT3BlcmF0aW9uIHdoZW4gc3RhcnRlZCBieSBcZklpbmV0ZFxmUAorK2lzIGFzIGZvbGxvd3M6IHdoZW5ldmVyIGEgcmVxdWVzdCBmb3Igc2VydmljZSBhcnJpdmVzLCB0aGUKKyBcZklpbmV0ZFxmUCBkYWVtb24gaXMgdHJpY2tlZCBpbnRvIHJ1bm5pbmcgdGhlIFxmSXRjcGRcZlAgcHJvZ3JhbQorIGluc3RlYWQgb2YgdGhlIGRlc2lyZWQgc2VydmVyLiBcZkl0Y3BkXGZQIGxvZ3MgdGhlIHJlcXVlc3QgYW5kIGRvZXMKKyBzb21lIGFkZGl0aW9uYWwgY2hlY2tzLiBXaGVuIGFsbCBpcyB3ZWxsLCBcZkl0Y3BkXGZQIHJ1bnMgdGhlCitAQCAtODgsMTEgKzkyLDExIEBAIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgLnNwCisgLmluICs1CisgIyBta2RpciAvb3RoZXIvcGxhY2UKKy0jIG12IC91c3IvZXRjL2luLmZpbmdlcmQgL290aGVyL3BsYWNlCistIyBjcCB0Y3BkIC91c3IvZXRjL2luLmZpbmdlcmQKKysjIG12IC91c3Ivc2Jpbi9pbi5maW5nZXJkIC9vdGhlci9wbGFjZQorKyMgY3AgdGNwZCAvdXNyL3NiaW4vaW4uZmluZ2VyZAorIC5maQorIC5QUAorLVRoZSBleGFtcGxlIGFzc3VtZXMgdGhhdCB0aGUgbmV0d29yayBkYWVtb25zIGxpdmUgaW4gL3Vzci9ldGMuIE9uIHNvbWUKKytUaGUgZXhhbXBsZSBhc3N1bWVzIHRoYXQgdGhlIG5ldHdvcmsgZGFlbW9ucyBsaXZlIGluIC91c3Ivc2Jpbi4gT24gc29tZQorIHN5c3RlbXMsIG5ldHdvcmsgZGFlbW9ucyBsaXZlIGluIC91c3Ivc2JpbiBvciBpbiAvdXNyL2xpYmV4ZWMsIG9yIGhhdmUKKyBubyBgaW4uXCcgcHJlZml4IHRvIHRoZWlyIG5hbWUuCisgLlNIIEVYQU1QTEUgMgorQEAgLTEwMSwzNSArMTA1LDM0IEBAIGFyZSBsZWZ0IGluIHRoZWlyIG9yaWdpbmFsIHBsYWNlLgorIC5QUAorIEluIG9yZGVyIHRvIG1vbml0b3IgYWNjZXNzIHRvIHRoZSBcZklmaW5nZXJcZlIgc2VydmljZSwgcGVyZm9ybSB0aGUKKyBmb2xsb3dpbmcgZWRpdHMgb24gdGhlIFxmSWluZXRkXGZSIGNvbmZpZ3VyYXRpb24gZmlsZSAodXN1YWxseSAKKy1cZkkvZXRjL2luZXRkLmNvbmZcZlIgb3IgXGZJL2V0Yy9pbmV0L2luZXRkLmNvbmZcZlIpOgorK1xmSS9ldGMvaW5ldGQuY29uZlxmUik6CisgLm5mCisgLnNwCisgLnRpICs1CistZmluZ2VyICBzdHJlYW0gIHRjcCAgbm93YWl0ICBub2JvZHkgIC91c3IvZXRjL2luLmZpbmdlcmQgIGluLmZpbmdlcmQKKytmaW5nZXIgIHN0cmVhbSAgdGNwICBub3dhaXQgIG5vYm9keSAgL3Vzci9zYmluL2luLmZpbmdlcmQgIGluLmZpbmdlcmQKKyAuc3AKKyBiZWNvbWVzOgorIC5zcAorIC50aSArNQorLWZpbmdlciAgc3RyZWFtICB0Y3AgIG5vd2FpdCAgbm9ib2R5ICAvc29tZS93aGVyZS90Y3BkICAgICBpbi5maW5nZXJkCisrZmluZ2VyICBzdHJlYW0gIHRjcCAgbm93YWl0ICBub2JvZHkgIC91c3Ivc2Jpbi90Y3BkICAgICBpbi5maW5nZXJkCisgLnNwCisgLmZpCisgLlBQCistVGhlIGV4YW1wbGUgYXNzdW1lcyB0aGF0IHRoZSBuZXR3b3JrIGRhZW1vbnMgbGl2ZSBpbiAvdXNyL2V0Yy4gT24gc29tZQorK1RoZSBleGFtcGxlIGFzc3VtZXMgdGhhdCB0aGUgbmV0d29yayBkYWVtb25zIGxpdmUgaW4gL3Vzci9zYmluLiBPbiBzb21lCisgc3lzdGVtcywgbmV0d29yayBkYWVtb25zIGxpdmUgaW4gL3Vzci9zYmluIG9yIGluIC91c3IvbGliZXhlYywgdGhlCisgZGFlbW9ucyBoYXZlIG5vIGBpbi5cJyBwcmVmaXggdG8gdGhlaXIgbmFtZSwgb3IgdGhlcmUgaXMgbm8gdXNlcmlkCisgZmllbGQgaW4gdGhlIGluZXRkIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAuUFAKKyBTaW1pbGFyIGNoYW5nZXMgd2lsbCBiZSBuZWVkZWQgZm9yIHRoZSBvdGhlciBzZXJ2aWNlcyB0aGF0IGFyZSB0byBiZQorIGNvdmVyZWQgYnkgXGZJdGNwZFxmUi4gIFNlbmQgYSBga2lsbCAtSFVQXCcgdG8gdGhlIFxmSWluZXRkXGZSKDgpCistcHJvY2VzcyB0byBtYWtlIHRoZSBjaGFuZ2VzIGVmZmVjdGl2ZS4gQUlYIHVzZXJzIG1heSBhbHNvIGhhdmUgdG8KKy1leGVjdXRlIHRoZSBgaW5ldGltcFwnIGNvbW1hbmQuCisrcHJvY2VzcyB0byBtYWtlIHRoZSBjaGFuZ2VzIGVmZmVjdGl2ZS4KKyAuU0ggRVhBTVBMRSAzCisgSW4gdGhlIGNhc2Ugb2YgZGFlbW9ucyB0aGF0IGRvIG5vdCBsaXZlIGluIGEgY29tbW9uIGRpcmVjdG9yeSAoInNlY3JldCIKKyBvciBvdGhlcndpc2UpLCBlZGl0IHRoZSBcZklpbmV0ZFxmUiBjb25maWd1cmF0aW9uIGZpbGUgc28gdGhhdCBpdAorIHNwZWNpZmllcyBhbiBhYnNvbHV0ZSBwYXRoIG5hbWUgZm9yIHRoZSBwcm9jZXNzIG5hbWUgZmllbGQuIEZvciBleGFtcGxlOgorIC5uZgorIC5zcAorLSAgICBudGFsayAgZGdyYW0gIHVkcCAgd2FpdCAgcm9vdCAgL3NvbWUvd2hlcmUvdGNwZCAgL3Vzci9sb2NhbC9saWIvbnRhbGtkCisrICAgIG50YWxrICBkZ3JhbSAgdWRwICB3YWl0ICByb290ICAvdXNyL3NiaW4vdGNwZCAgL3Vzci9sb2NhbC9saWIvbnRhbGtkCisgLnNwCisgLmZpCisgLlBQCitAQCAtMTY0LDYgKzE2Nyw3IEBAIFRoZSBkZWZhdWx0IGxvY2F0aW9ucyBvZiB0aGUgaG9zdCBhY2Nlc3MKKyAuU0ggU0VFIEFMU08KKyAubmEKKyAubmYKKytob3N0c19hY2Nlc3MoMyksIGZ1bmN0aW9ucyBwcm92aWRlZCBieSB0aGUgbGlid3JhcCBsaWJyYXJ5LgorIGhvc3RzX2FjY2Vzcyg1KSwgZm9ybWF0IG9mIHRoZSB0Y3BkIGFjY2VzcyBjb250cm9sIHRhYmxlcy4KKyBzeXNsb2cuY29uZig1KSwgZm9ybWF0IG9mIHRoZSBzeXNsb2dkIGNvbnRyb2wgZmlsZS4KKyBpbmV0ZC5jb25mKDUpLCBmb3JtYXQgb2YgdGhlIGluZXRkIGNvbnRyb2wgZmlsZS4KK2RpZmYgLXJ1TnAgdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRjaGsuOCB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRjaGsuOAorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkY2hrLjgJMTk5NS0wMS0wOCAxNzowMDozMS4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRjaGsuOAkyMDA1LTAzLTA5IDE4OjI3OjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTksOCArOSw4IEBAIHRjcGRjaGsgWy1hXSBbLWRdIFstaSBpbmV0X2NvbmZdIFstdl0KKyBwb3RlbnRpYWwgYW5kIHJlYWwgcHJvYmxlbXMgaXQgY2FuIGZpbmQuIFRoZSBwcm9ncmFtIGV4YW1pbmVzIHRoZQorIFxmSXRjcGRcZlIgYWNjZXNzIGNvbnRyb2wgZmlsZXMgKGJ5IGRlZmF1bHQsIHRoZXNlIGFyZQorIFxmSS9ldGMvaG9zdHMuYWxsb3dcZlIgYW5kIFxmSS9ldGMvaG9zdHMuZGVueVxmUiksIGFuZCBjb21wYXJlcyB0aGUKKy1lbnRyaWVzIGluIHRoZXNlIGZpbGVzIGFnYWluc3QgZW50cmllcyBpbiB0aGUgXGZJaW5ldGRcZlIgb3IgXGZJdGxpZFxmUgorLW5ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlcy4KKytlbnRyaWVzIGluIHRoZXNlIGZpbGVzIGFnYWluc3QgZW50cmllcyBpbiB0aGUgXGZJaW5ldGRcZlIKKytuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAuUFAKKyBcZkl0Y3BkY2hrXGZSIHJlcG9ydHMgcHJvYmxlbXMgc3VjaCBhcyBub24tZXhpc3RlbnQgcGF0aG5hbWVzOyBzZXJ2aWNlcworIHRoYXQgYXBwZWFyIGluIFxmSXRjcGRcZlIgYWNjZXNzIGNvbnRyb2wgcnVsZXMsIGJ1dCBhcmUgbm90IGNvbnRyb2xsZWQKK0BAIC0yNiwxNCArMjYsMTMgQEAgcHJvYmxlbS4KKyAuU0ggT1BUSU9OUworIC5JUCAtYQorIFJlcG9ydCBhY2Nlc3MgY29udHJvbCBydWxlcyB0aGF0IHBlcm1pdCBhY2Nlc3Mgd2l0aG91dCBhbiBleHBsaWNpdAorLUFMTE9XIGtleXdvcmQuIFRoaXMgYXBwbGllcyBvbmx5IHdoZW4gdGhlIGV4dGVuZGVkIGFjY2VzcyBjb250cm9sCistbGFuZ3VhZ2UgaXMgZW5hYmxlZCAoYnVpbGQgd2l0aCAtRFBST0NFU1NfT1BUSU9OUykuCisrQUxMT1cga2V5d29yZC4KKyAuSVAgLWQKKyBFeGFtaW5lIFxmSWhvc3RzLmFsbG93XGZSIGFuZCBcZklob3N0cy5kZW55XGZSIGZpbGVzIGluIHRoZSBjdXJyZW50CisgZGlyZWN0b3J5IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgb25lcy4KKyAuSVAgIi1pIGluZXRfY29uZiIKKyBTcGVjaWZ5IHRoaXMgb3B0aW9uIHdoZW4gXGZJdGNwZGNoa1xmUiBpcyB1bmFibGUgdG8gZmluZCB5b3VyCistXGZJaW5ldGQuY29uZlxmUiBvciBcZkl0bGlkLmNvbmZcZlIgbmV0d29yayBjb25maWd1cmF0aW9uIGZpbGUsIG9yIHdoZW4KKytcZklpbmV0ZC5jb25mXGZSIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlLCBvciB3aGVuCisgeW91IHN1c3BlY3QgdGhhdCB0aGUgcHJvZ3JhbSB1c2VzIHRoZSB3cm9uZyBvbmUuCisgLklQIC12CisgRGlzcGxheSB0aGUgY29udGVudHMgb2YgZWFjaCBhY2Nlc3MgY29udHJvbCBydWxlLiAgRGFlbW9uIGxpc3RzLCBjbGllbnQKK0BAIC01NCw3ICs1Myw2IEBAIHRjcGRtYXRjaCg4KSwgZXhwbGFpbiB3aGF0IHRjcGQgd291bGQgZG8KKyBob3N0c19hY2Nlc3MoNSksIGZvcm1hdCBvZiB0aGUgdGNwZCBhY2Nlc3MgY29udHJvbCB0YWJsZXMuCisgaG9zdHNfb3B0aW9ucyg1KSwgZm9ybWF0IG9mIHRoZSBsYW5ndWFnZSBleHRlbnNpb25zLgorIGluZXRkLmNvbmYoNSksIGZvcm1hdCBvZiB0aGUgaW5ldGQgY29udHJvbCBmaWxlLgorLXRsaWQuY29uZig1KSwgZm9ybWF0IG9mIHRoZSB0bGlkIGNvbnRyb2wgZmlsZS4KKyAuU0ggQVVUSE9SUworIC5uYQorIC5uZgorZGlmZiAtcnVOcCB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZG1hdGNoLjggdGNwX3dyYXBwZXJzXzcuNi90Y3BkbWF0Y2guOAorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkbWF0Y2guOAkyMDA1LTAzLTA5IDE4OjMwOjI0LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZG1hdGNoLjgJMjAwNS0wMy0wOSAxODoyNzowMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMyw3ICsxMyw3IEBAIHJlcXVlc3QgZm9yIHNlcnZpY2UuICBFeGFtcGxlcyBhcmUgZ2l2ZW4KKyBUaGUgcHJvZ3JhbSBleGFtaW5lcyB0aGUgXGZJdGNwZFxmUiBhY2Nlc3MgY29udHJvbCB0YWJsZXMgKGRlZmF1bHQKKyBcZkkvZXRjL2hvc3RzLmFsbG93XGZSIGFuZCBcZkkvZXRjL2hvc3RzLmRlbnlcZlIpIGFuZCBwcmludHMgaXRzCisgY29uY2x1c2lvbi4gIEZvciBtYXhpbWFsIGFjY3VyYWN5LCBpdCBleHRyYWN0cyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCistZnJvbSB5b3VyIFxmSWluZXRkXGZSIG9yIFxmSXRsaWRcZlIgbmV0d29yayBjb25maWd1cmF0aW9uIGZpbGUuCisrZnJvbSB5b3VyIFxmSWluZXRkXGZSIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlLgorIC5QUAorIFdoZW4gXGZJdGNwZG1hdGNoXGZSIGZpbmRzIGEgbWF0Y2ggaW4gdGhlIGFjY2VzcyBjb250cm9sIHRhYmxlcywgaXQKKyBpZGVudGlmaWVzIHRoZSBtYXRjaGVkIHJ1bGUuIEluIGFkZGl0aW9uLCBpdCBkaXNwbGF5cyB0aGUgb3B0aW9uYWwKK0BAIC01MCw3ICs1MCw3IEBAIEV4YW1pbmUgXGZJaG9zdHMuYWxsb3dcZlIgYW5kIFxmSWhvc3RzLmQKKyBkaXJlY3RvcnkgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBvbmVzLgorIC5JUCAiLWkgaW5ldF9jb25mIgorIFNwZWNpZnkgdGhpcyBvcHRpb24gd2hlbiBcZkl0Y3BkbWF0Y2hcZlIgaXMgdW5hYmxlIHRvIGZpbmQgeW91cgorLVxmSWluZXRkLmNvbmZcZlIgb3IgXGZJdGxpZC5jb25mXGZSIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlLCBvciB3aGVuCisrXGZJaW5ldGQuY29uZlxmUiBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3Igd2hlbgorIHlvdSBzdXNwZWN0IHRoYXQgdGhlIHByb2dyYW0gdXNlcyB0aGUgd3Jvbmcgb25lLgorIC5TSCBFWEFNUExFUworIFRvIHByZWRpY3QgaG93IFxmSXRjcGRcZlIgd291bGQgaGFuZGxlIGEgdGVsbmV0IHJlcXVlc3QgZnJvbSB0aGUgbG9jYWwKK0BAIC04Niw3ICs4Niw2IEBAIHRjcGRjaGsoOCksIHRjcGQgY29uZmlndXJhdGlvbiBjaGVja2VyCisgaG9zdHNfYWNjZXNzKDUpLCBmb3JtYXQgb2YgdGhlIHRjcGQgYWNjZXNzIGNvbnRyb2wgdGFibGVzLgorIGhvc3RzX29wdGlvbnMoNSksIGZvcm1hdCBvZiB0aGUgbGFuZ3VhZ2UgZXh0ZW5zaW9ucy4KKyBpbmV0ZC5jb25mKDUpLCBmb3JtYXQgb2YgdGhlIGluZXRkIGNvbnRyb2wgZmlsZS4KKy10bGlkLmNvbmYoNSksIGZvcm1hdCBvZiB0aGUgdGxpZCBjb250cm9sIGZpbGUuCisgLlNIIEFVVEhPUlMKKyAubmEKKyAubmYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzA1X3dpbGRjYXJkX21hdGNoaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDVfd2lsZGNhcmRfbWF0Y2hpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUxODgwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzA1X3dpbGRjYXJkX21hdGNoaW5nLnBhdGNoCkBAIC0wLDAgKzEsMTA1IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NlZSBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTE3ODQ3CisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNQkyMDA0LTA0LTEwIDE4OjU0OjMzLjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUJMjAwNC0wNC0xMCAxODo1NDoyNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC04OSw2ICs4OSwxMCBAQAorIGJpdHdpc2UgQU5EIG9mIHRoZSBhZGRyZXNzIGFuZCB0aGUgYG1hc2tcJy4gRm9yIGV4YW1wbGUsIHRoZSBuZXQvbWFzaworIHBhdHRlcm4gYDEzMS4xNTUuNzIuMC8yNTUuMjU1LjI1NC4wXCcgbWF0Y2hlcyBldmVyeSBhZGRyZXNzIGluIHRoZQorIHJhbmdlIGAxMzEuMTU1LjcyLjBcJyB0aHJvdWdoIGAxMzEuMTU1LjczLjI1NVwnLgorKy5JUCBcKGJ1CisrV2lsZGNhcmRzIGAqXCcgYW5kIGA/XCcgY2FuIGJlIHVzZWQgdG8gbWF0Y2ggaG9zdG5hbWVzIG9yIElQIGFkZHJlc3Nlcy4gIFRoaXMKKyttZXRob2Qgb2YgbWF0Y2hpbmcgY2Fubm90IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgbmV0L21hc2tcJyBtYXRjaGluZywKKytob3N0bmFtZSBtYXRjaGluZyBiZWdpbm5pbmcgd2l0aCBgLlwnIG9yIElQIGFkZHJlc3MgbWF0Y2hpbmcgZW5kaW5nIHdpdGggYC5cJy4KKyAuU0ggV0lMRENBUkRTCisgVGhlIGFjY2VzcyBjb250cm9sIGxhbmd1YWdlIHN1cHBvcnRzIGV4cGxpY2l0IHdpbGRjYXJkczoKKyAuSVAgQUxMCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy5jIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLmMJMTk5Ny0wMi0xMiAwMjoxMzoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy5jCTIwMDQtMDQtMTAgMTg6NTI6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMjg5LDYgKzI4OSwxMSBAQAorIHsKKyAgICAgaW50ICAgICBuOworIAorKyNpZm5kZWYgRElTQUJMRV9XSUxEQ0FSRF9NQVRDSElORworKyAgICBpZiAoc3RyY2hyKHRvaywgJyonKSB8fCBzdHJjaHIodG9rLCc/JykpIHsgIC8qIGNvbnRhaW5zICcqJyBvciAnPycgKi8KKysgICAgICAgIHJldHVybiAobWF0Y2hfcGF0dGVybl95bG8oc3RyaW5nLHRvaykpOyAJICAgICAgIAorKyAgICB9IGVsc2UgCisrI2VuZGlmICAgIAorICAgICBpZiAodG9rWzBdID09ICcuJykgewkJCS8qIHN1ZmZpeCAqLworIAluID0gc3RybGVuKHN0cmluZykgLSBzdHJsZW4odG9rKTsKKyAJcmV0dXJuIChuID4gMCAmJiBTVFJfRVEodG9rLCBzdHJpbmcgKyBuKSk7CitAQCAtMzI5LDMgKzMzNCw3MSBAQAorICAgICB9CisgICAgIHJldHVybiAoKGFkZHIgJiBtYXNrKSA9PSBuZXQpOworIH0KKysKKysjaWZuZGVmIERJU0FCTEVfV0lMRENBUkRfTUFUQ0hJTkcKKysvKiBOb3RlOiB0aGlzIGZlYXR1cmUgaGFzIGJlZW4gYWRhcHRlZCBpbiBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgd2F5CisrICAgZnJvbSBUYXR1IFlsb25lbidzIGxhc3QgU1NIIHZlcnNpb24gdW5kZXIgZnJlZSBsaWNlbnNlIGJ5IAorKyAgIFBla2thIFNhdm9sYSA8cGVra2FzQG5ldGNvcmUuZmk+LgorKworKyAgIENvcHlyaWdodCAoYykgMTk5NSBUYXR1IFlsb25lbiA8eWxvQGNzLmh1dC5maT4sIEVzcG9vLCBGaW5sYW5kCisrKi8KKysKKysvKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHN0cmluZyBtYXRjaGVzIHRoZSBwYXR0ZXJuICh3aGljaCBtYXkgY29udGFpbgorKyAgID8gYW5kICogYXMgd2lsZGNhcmRzKSwgYW5kIHplcm8gaWYgaXQgZG9lcyBub3QgbWF0Y2guICovCisrCSAgCisraW50IG1hdGNoX3BhdHRlcm5feWxvKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKnBhdHRlcm4pCisreworKyAgd2hpbGUgKDEpCisrICAgIHsKKysgICAgICAvKiBJZiBhdCBlbmQgb2YgcGF0dGVybiwgYWNjZXB0IGlmIGFsc28gYXQgZW5kIG9mIHN0cmluZy4gKi8KKysgICAgICBpZiAoISpwYXR0ZXJuKQorKyAgICAgICAgcmV0dXJuICEqczsKKysKKysgICAgICAvKiBQcm9jZXNzICcqJy4gKi8KKysgICAgICBpZiAoKnBhdHRlcm4gPT0gJyonKQorKyAgICAgICAgeworKwkgIC8qIFNraXAgdGhlIGFzdGVyaXNrLiAqLworKwkgIHBhdHRlcm4rKzsKKysKKysJICAvKiBJZiBhdCBlbmQgb2YgcGF0dGVybiwgYWNjZXB0IGltbWVkaWF0ZWx5LiAqLworKyAgICAgICAgICBpZiAoISpwYXR0ZXJuKQorKyAgICAgICAgICAgIHJldHVybiAxOworKworKwkgIC8qIElmIG5leHQgY2hhcmFjdGVyIGluIHBhdHRlcm4gaXMga25vd24sIG9wdGltaXplLiAqLworKyAgICAgICAgICBpZiAoKnBhdHRlcm4gIT0gJz8nICYmICpwYXR0ZXJuICE9ICcqJykKKysgICAgICAgICAgICB7CisrCSAgICAgIC8qIExvb2sgaW5zdGFuY2VzIG9mIHRoZSBuZXh0IGNoYXJhY3RlciBpbiBwYXR0ZXJuLCBhbmQgdHJ5CisrCQkgdG8gbWF0Y2ggc3RhcnRpbmcgZnJvbSB0aG9zZS4gKi8KKysgICAgICAgICAgICAgIGZvciAoOyAqczsgcysrKQorKyAgICAgICAgICAgICAgICBpZiAoKnMgPT0gKnBhdHRlcm4gJiYKKysgICAgICAgICAgICAgICAgICAgIG1hdGNoX3BhdHRlcm5feWxvKHMgKyAxLCBwYXR0ZXJuICsgMSkpCisrICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisrCSAgICAgIC8qIEZhaWxlZC4gKi8KKysgICAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgICAgIH0KKysKKysJICAvKiBNb3ZlIGFoZWFkIG9uZSBjaGFyYWN0ZXIgYXQgYSB0aW1lIGFuZCB0cnkgdG8gbWF0Y2ggYXQgZWFjaAorKwkgICAgIHBvc2l0aW9uLiAqLworKyAgICAgICAgICBmb3IgKDsgKnM7IHMrKykKKysgICAgICAgICAgICBpZiAobWF0Y2hfcGF0dGVybl95bG8ocywgcGF0dGVybikpCisrICAgICAgICAgICAgICByZXR1cm4gMTsKKysJICAvKiBGYWlsZWQuICovCisrICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgfQorKworKyAgICAgIC8qIFRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIG1vcmUgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcuICBJZiB3ZSBhcmUKKysJIGF0IHRoZSBlbmQsIGZhaWwuICovCisrICAgICAgaWYgKCEqcykKKysgICAgICAgIHJldHVybiAwOworKworKyAgICAgIC8qIENoZWNrIGlmIHRoZSBuZXh0IGNoYXJhY3RlciBvZiB0aGUgc3RyaW5nIGlzIGFjY2VwdGFibGUuICovCisrICAgICAgaWYgKCpwYXR0ZXJuICE9ICc/JyAmJiAqcGF0dGVybiAhPSAqcykKKysJcmV0dXJuIDA7CisrICAgICAgCisrICAgICAgLyogTW92ZSB0byB0aGUgbmV4dCBjaGFyYWN0ZXIsIGJvdGggaW4gc3RyaW5nIGFuZCBpbiBwYXR0ZXJuLiAqLworKyAgICAgIHMrKzsKKysgICAgICBwYXR0ZXJuKys7CisrICAgIH0KKysgIC8qTk9UUkVBQ0hFRCovCisrfQorKyNlbmRpZiAvKiBESVNBQkxFX1dJTERDQVJEX01BVENISU5HICovCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8wNl9maXhfZ2V0aG9zdGJ5bmFtZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzA2X2ZpeF9nZXRob3N0YnluYW1lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNWY0YjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8wNl9maXhfZ2V0aG9zdGJ5bmFtZS5wYXRjaApAQCAtMCwwICsxLDMyIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKyogTW9uIEZlYiAgNSAyMDAxIFByZXN0b24gQnJvd24gPHBicm93bkByZWRoYXQuY29tPgorLSBmaXggZ2V0aG9zdGJ5bmFtZSB0byB3b3JrIGJldHRlciB3aXRoIGRvdCAiLiIgbm90YXRpb24gKCMxNjk0OSkKKworLS0tIHRjcF93cmFwcGVyc183LjYvc29ja2V0LmMuZml4Z2V0aG9zdGJ5bmFtZQlGcmkgTWFyIDIxIDEzOjI3OjI1IDE5OTcKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3NvY2tldC5jCU1vbiBGZWIgIDUgMTQ6MDk6NDAgMjAwMQorQEAgLTUyLDcgKzUyLDggQEAKKyBjaGFyICAgKm5hbWU7CisgeworICAgICBjaGFyICAgIGRvdF9uYW1lW01BWEhPU1ROQU1FTEVOICsgMV07CistCisrICAgIHN0cnVjdCBob3N0ZW50ICpocDsKKysgICAgCisgICAgIC8qCisgICAgICAqIERvbid0IGFwcGVuZCBkb3RzIHRvIHVucXVhbGlmaWVkIG5hbWVzLiBTdWNoIG5hbWVzIGFyZSBsaWtlbHkgdG8gY29tZQorICAgICAgKiBmcm9tIGxvY2FsIGhvc3RzIGZpbGVzIG9yIGZyb20gTklTLgorQEAgLTYxLDggKzYyLDEyIEBACisgICAgIGlmIChzdHJjaHIobmFtZSwgJy4nKSA9PSAwIHx8IHN0cmxlbihuYW1lKSA+PSBNQVhIT1NUTkFNRUxFTiAtIDEpIHsKKyAJcmV0dXJuIChnZXRob3N0YnluYW1lKG5hbWUpKTsKKyAgICAgfSBlbHNlIHsKKy0Jc3ByaW50Zihkb3RfbmFtZSwgIiVzLiIsIG5hbWUpOworLQlyZXR1cm4gKGdldGhvc3RieW5hbWUoZG90X25hbWUpKTsKKysgICAgICAgIHNwcmludGYoZG90X25hbWUsICIlcy4iLCBuYW1lKTsKKysgICAgICAgIGhwID0gZ2V0aG9zdGJ5bmFtZShkb3RfbmFtZSk7CisrCWlmIChocCkKKysJICAgIHJldHVybiBocDsKKysJZWxzZQorKwkgICAgcmV0dXJuIChnZXRob3N0YnluYW1lKG5hbWUpKTsKKyAgICAgfQorIH0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzEwX3VzYWdpLWlwdjYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMF91c2FnaS1pcHY2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZDQ3YzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMF91c2FnaS1pcHY2LnBhdGNoCkBAIC0wLDAgKzEsMTI1NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2ZpeF9vcHRpb25zLmMgdGNwX3dyYXBwZXJzXzcuNi9maXhfb3B0aW9ucy5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2ZpeF9vcHRpb25zLmMJMTk5Ny0wNC0wOCAwMjoyOToxOS4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2ZpeF9vcHRpb25zLmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMSw2ICsxMSw5IEBACisgCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKysjaWZkZWYgSU5FVDYKKysjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaW5fc3lzdG0uaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgorQEAgLTQxLDYgKzQ0LDIyIEBACisgICAgIHVuc2lnbmVkIGludCBvcHQ7CisgICAgIGludCAgICAgb3B0bGVuOworICAgICBzdHJ1Y3QgaW5fYWRkciBkdW1teTsKKysjaWZkZWYgSU5FVDYKKysgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3M7CisrICAgIGludCBzc2xlbjsKKysKKysgICAgLyoKKysgICAgICogY2hlY2sgaWYgdGhpcyBpcyBBRl9JTkVUIHNvY2tldAorKyAgICAgKiBYWFggSVB2NiBzdXBwb3J0PworKyAgICAgKi8KKysgICAgc3NsZW4gPSBzaXplb2Yoc3MpOworKyAgICBpZiAoZ2V0c29ja25hbWUoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3MsICZzc2xlbikgPCAwKSB7CisrCXN5c2xvZyhMT0dfRVJSLCAiZ2V0cGVlcm5hbWU6ICVtIik7CisrCWNsZWFuX2V4aXQocmVxdWVzdCk7CisrICAgIH0KKysgICAgaWYgKHNzLnNzX2ZhbWlseSAhPSBBRl9JTkVUKQorKwlyZXR1cm47CisrI2VuZGlmCisgCisgICAgIGlmICgoaXAgPSBnZXRwcm90b2J5bmFtZSgiaXAiKSkgIT0gMCkKKyAJaXBwcm90byA9IGlwLT5wX3Byb3RvOworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNSB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41CTIwMDQtMDQtMTAgMTk6MjI6NTguMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTg1LDExICs4NSwxOCBAQAorIGZvciBkYWVtb24gcHJvY2VzcyBuYW1lcyBvciBmb3IgY2xpZW50IHVzZXIgbmFtZXMuCisgLklQIFwoYnUKKyBBbiBleHByZXNzaW9uIG9mIHRoZSBmb3JtIGBuLm4ubi5uL20ubS5tLm1cJyBpcyBpbnRlcnByZXRlZCBhcyBhCistYG5ldC9tYXNrXCcgcGFpci4gQSBob3N0IGFkZHJlc3MgaXMgbWF0Y2hlZCBpZiBgbmV0XCcgaXMgZXF1YWwgdG8gdGhlCisrYG5ldC9tYXNrXCcgcGFpci4gQW4gSVB2NCBob3N0IGFkZHJlc3MgaXMgbWF0Y2hlZCBpZiBgbmV0XCcgaXMgZXF1YWwgdG8gdGhlCisgYml0d2lzZSBBTkQgb2YgdGhlIGFkZHJlc3MgYW5kIHRoZSBgbWFza1wnLiBGb3IgZXhhbXBsZSwgdGhlIG5ldC9tYXNrCisgcGF0dGVybiBgMTMxLjE1NS43Mi4wLzI1NS4yNTUuMjU0LjBcJyBtYXRjaGVzIGV2ZXJ5IGFkZHJlc3MgaW4gdGhlCisgcmFuZ2UgYDEzMS4xNTUuNzIuMFwnIHRocm91Z2ggYDEzMS4xNTUuNzMuMjU1XCcuCisgLklQIFwoYnUKKytBbiBleHByZXNzaW9uIG9mIHRoZSBmb3JtIGBbbjpuOm46bjpuOm46bjpuXS9tXCcgaXMgaW50ZXJwcmV0ZWQgYXMgYQorK2BbbmV0XS9wcmVmaXhsZW5cJyBwYWlyLiBBbiBJUHY2IGhvc3QgYWRkcmVzcyBpcyBtYXRjaGVkIGlmCisrYHByZWZpeGxlblwnIGJpdHMgb2YgYG5ldFwnIGlzIGVxdWFsIHRvIHRoZSBgcHJlZml4bGVuXCcgYml0cyBvZiB0aGUKKythZGRyZXNzLiBGb3IgZXhhbXBsZSwgdGhlIFtuZXRdL3ByZWZpeGxlbiBwYXR0ZXJuCisrYFszZmZlOjUwNToyOjE6Ol0vNjRcJyBtYXRjaGVzIGV2ZXJ5IGFkZHJlc3MgaW4gdGhlIHJhbmdlCisrYDNmZmU6NTA1OjI6MTo6XCcgdGhyb3VnaCBgM2ZmZTo1MDU6MjoxOmZmZmY6ZmZmZjpmZmZmOmZmZmZcJy4KKysuSVAgXChidQorIFdpbGRjYXJkcyBgKlwnIGFuZCBgP1wnIGNhbiBiZSB1c2VkIHRvIG1hdGNoIGhvc3RuYW1lcyBvciBJUCBhZGRyZXNzZXMuICBUaGlzCisgbWV0aG9kIG9mIG1hdGNoaW5nIGNhbm5vdCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYG5ldC9tYXNrXCcgbWF0Y2hpbmcsCisgaG9zdG5hbWUgbWF0Y2hpbmcgYmVnaW5uaW5nIHdpdGggYC5cJyBvciBJUCBhZGRyZXNzIG1hdGNoaW5nIGVuZGluZyB3aXRoIGAuXCcuCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy5jIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLmMJMjAwNC0wNC0xMCAxOToyMjo1OC4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtMjQsNyArMjQsMTMgQEAKKyAvKiBTeXN0ZW0gbGlicmFyaWVzLiAqLworIAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaWZkZWYgSU5UMzJfVAorKyAgICB0eXBlZGVmIHVpbnQzMl90IHVfaW50MzJfdDsKKysjZW5kaWYKKyAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisrI2lmZGVmIElORVQ2CisrI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KK0BAIC0zMyw2ICszOSw5IEBACisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHNldGptcC5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaWZkZWYgSU5FVDYKKysjaW5jbHVkZSA8bmV0ZGIuaD4KKysjZW5kaWYKKyAKKyBleHRlcm4gY2hhciAqZmdldHMoKTsKKyBleHRlcm4gaW50IGVycm5vOworQEAgLTgyLDYgKzkxLDEwIEBACisgc3RhdGljIGludCBob3N0X21hdGNoKCk7Cisgc3RhdGljIGludCBzdHJpbmdfbWF0Y2goKTsKKyBzdGF0aWMgaW50IG1hc2tlZF9tYXRjaCgpOworKyNpZmRlZiBJTkVUNgorK3N0YXRpYyBpbnQgbWFza2VkX21hdGNoNCgpOworK3N0YXRpYyBpbnQgbWFza2VkX21hdGNoNigpOworKyNlbmRpZgorIAorIC8qIFNpemUgb2YgbG9naWNhbCBsaW5lIGJ1ZmZlci4gKi8KKyAKK0BAIC0yODksNiArMzAyLDEzIEBACisgeworICAgICBpbnQgICAgIG47CisgCisrI2lmZGVmIElORVQ2CisrICAgIC8qIGNvbnZlcnQgSVB2NCBtYXBwZWQgSVB2NiBhZGRyZXNzIHRvIElQdjQgYWRkcmVzcyAqLworKyAgICBpZiAoU1RSTl9FUShzdHJpbmcsICI6OmZmZmY6IiwgNykKKysgICAgICAmJiBkb3RfcXVhZF9hZGRyKHN0cmluZyArIDcpICE9IElOQUREUl9OT05FKSB7CisrICAgICAgc3RyaW5nICs9IDc7CisrICAgIH0KKysjZW5kaWYgICAgCisgI2lmbmRlZiBESVNBQkxFX1dJTERDQVJEX01BVENISU5HCisgICAgIGlmIChzdHJjaHIodG9rLCAnKicpIHx8IHN0cmNocih0b2ssJz8nKSkgeyAgLyogY29udGFpbnMgJyonIG9yICc/JyAqLworICAgICAgICAgcmV0dXJuIChtYXRjaF9wYXR0ZXJuX3lsbyhzdHJpbmcsdG9rKSk7IAkgICAgICAgCitAQCAtMzA0LDIwICszMjQsNzIgQEAKKyAgICAgfSBlbHNlIGlmICh0b2tbKG4gPSBzdHJsZW4odG9rKSkgLSAxXSA9PSAnLicpIHsJLyogcHJlZml4ICovCisgCXJldHVybiAoU1RSTl9FUSh0b2ssIHN0cmluZywgbikpOworICAgICB9IGVsc2UgewkJCQkJLyogZXhhY3QgbWF0Y2ggKi8KKysjaWZkZWYgSU5FVDYKKysJc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqcmVzOworKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IHBhdCwgYWRkcjsKKysJaW50IGxlbiwgcmV0OworKwljaGFyIGNoOworKworKwlsZW4gPSBzdHJsZW4odG9rKTsKKysJaWYgKCp0b2sgPT0gJ1snICYmIHRva1tsZW4gLSAxXSA9PSAnXScpIHsKKysJICAgIGNoID0gdG9rW2xlbiAtIDFdOworKwkgICAgdG9rW2xlbiAtIDFdID0gJ1wwJzsKKysJICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworKwkgICAgaGludHMuYWlfZmFtaWx5ID0gQUZfSU5FVDY7CisrCSAgICBoaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworKwkgICAgaGludHMuYWlfZmxhZ3MgPSBBSV9QQVNTSVZFIHwgQUlfTlVNRVJJQ0hPU1Q7CisrCSAgICBpZiAoKHJldCA9IGdldGFkZHJpbmZvKHRvayArIDEsIE5VTEwsICZoaW50cywgJnJlcykpID09IDApIHsKKysJCW1lbWNweSgmcGF0LCByZXMtPmFpX2FkZHIsIHNpemVvZihwYXQpKTsKKysJCWZyZWVhZGRyaW5mbyhyZXMpOworKwkgICAgfQorKwkgICAgdG9rW2xlbiAtIDFdID0gY2g7CisrCSAgICBpZiAocmV0ICE9IDAgfHwgZ2V0YWRkcmluZm8oc3RyaW5nLCBOVUxMLCAmaGludHMsICZyZXMpICE9IDApCisrCQlyZXR1cm4gTk87CisrCSAgICBtZW1jcHkoJmFkZHIsIHJlcy0+YWlfYWRkciwgc2l6ZW9mKGFkZHIpKTsKKysJICAgIGZyZWVhZGRyaW5mbyhyZXMpOworKyNpZmRlZiBOSV9XSVRIU0NPUEVJRAorKwkgICAgaWYgKHBhdC5zaW42X3Njb3BlX2lkICE9IDAgJiYKKysJCWFkZHIuc2luNl9zY29wZV9pZCAhPSBwYXQuc2luNl9zY29wZV9pZCkKKysJCXJldHVybiBOTzsKKysjZW5kaWYKKysJICAgIHJldHVybiAoIW1lbWNtcCgmcGF0LnNpbjZfYWRkciwgJmFkZHIuc2luNl9hZGRyLAorKwkJCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkpOworKwkgICAgcmV0dXJuIChyZXQpOworKwl9CisrI2VuZGlmCisgCXJldHVybiAoU1RSX0VRKHRvaywgc3RyaW5nKSk7CisgICAgIH0KKyB9CisgCisgLyogbWFza2VkX21hdGNoIC0gbWF0Y2ggYWRkcmVzcyBhZ2FpbnN0IG5ldG51bWJlci9uZXRtYXNrICovCisgCisrI2lmZGVmIElORVQ2Cisgc3RhdGljIGludCBtYXNrZWRfbWF0Y2gobmV0X3RvaywgbWFza190b2ssIHN0cmluZykKKyBjaGFyICAgKm5ldF90b2s7CisgY2hhciAgICptYXNrX3RvazsKKyBjaGFyICAgKnN0cmluZzsKKyB7CisrICAgIHJldHVybiAobWFza2VkX21hdGNoNChuZXRfdG9rLCBtYXNrX3Rvaywgc3RyaW5nKSB8fAorKwkgICAgbWFza2VkX21hdGNoNihuZXRfdG9rLCBtYXNrX3Rvaywgc3RyaW5nKSk7CisrfQorKworK3N0YXRpYyBpbnQgbWFza2VkX21hdGNoNChuZXRfdG9rLCBtYXNrX3Rvaywgc3RyaW5nKQorKyNlbHNlCisrc3RhdGljIGludCBtYXNrZWRfbWF0Y2gobmV0X3RvaywgbWFza190b2ssIHN0cmluZykKKysjZW5kaWYKKytjaGFyICAgKm5ldF90b2s7CisrY2hhciAgICptYXNrX3RvazsKKytjaGFyICAgKnN0cmluZzsKKyt7CisrI2lmZGVmIElORVQ2CisrICAgIHVfaW50MzJfdCBuZXQ7CisrICAgIHVfaW50MzJfdCBtYXNrOworKyAgICB1X2ludDMyX3QgYWRkcjsKKysjZWxzZQorICAgICB1bnNpZ25lZCBsb25nIG5ldDsKKyAgICAgdW5zaWduZWQgbG9uZyBtYXNrOworICAgICB1bnNpZ25lZCBsb25nIGFkZHI7CisrI2VuZGlmCisgCisgICAgIC8qCisgICAgICAqIERpc2FsbG93IGZvcm1zIG90aGVyIHRoYW4gZG90dGVkIHF1YWQ6IHRoZSB0cmVhdG1lbnQgdGhhdCBpbmV0X2FkZHIoKQorQEAgLTMyOSwxMiArNDAxLDc4IEBACisgCXJldHVybiAoTk8pOworICAgICBpZiAoKG5ldCA9IGRvdF9xdWFkX2FkZHIobmV0X3RvaykpID09IElOQUREUl9OT05FCisgCXx8IChtYXNrID0gZG90X3F1YWRfYWRkcihtYXNrX3RvaykpID09IElOQUREUl9OT05FKSB7CisrI2lmbmRlZiBJTkVUNgorIAl0Y3BkX3dhcm4oImJhZCBuZXQvbWFzayBleHByZXNzaW9uOiAlcy8lcyIsIG5ldF90b2ssIG1hc2tfdG9rKTsKKysjZW5kaWYKKyAJcmV0dXJuIChOTyk7CQkJCS8qIG5vdCB0Y3BkX2p1bXAoKSAqLworICAgICB9CisgICAgIHJldHVybiAoKGFkZHIgJiBtYXNrKSA9PSBuZXQpOworIH0KKyAKKysjaWZkZWYgSU5FVDYKKytzdGF0aWMgaW50IG1hc2tlZF9tYXRjaDYobmV0X3RvaywgbWFza190b2ssIHN0cmluZykKKytjaGFyICAgKm5ldF90b2s7CisrY2hhciAgICptYXNrX3RvazsKKytjaGFyICAgKnN0cmluZzsKKyt7CisrICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50cywgKnJlczsKKysgICAgc3RydWN0IHNvY2thZGRyX2luNiBuZXQsIGFkZHI7CisrICAgIHVfaW50MzJfdCBtYXNrOworKyAgICBpbnQgbGVuLCBtYXNrX2xlbiwgaSA9IDA7CisrICAgIGNoYXIgY2g7CisrCisrICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworKyAgICBoaW50cy5haV9mYW1pbHkgPSBBRl9JTkVUNjsKKysgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKysgICAgaGludHMuYWlfZmxhZ3MgPSBBSV9QQVNTSVZFIHwgQUlfTlVNRVJJQ0hPU1Q7CisrICAgIGlmIChnZXRhZGRyaW5mbyhzdHJpbmcsIE5VTEwsICZoaW50cywgJnJlcykgIT0gMCkKKysJcmV0dXJuIE5POworKyAgICBtZW1jcHkoJmFkZHIsIHJlcy0+YWlfYWRkciwgc2l6ZW9mKGFkZHIpKTsKKysgICAgZnJlZWFkZHJpbmZvKHJlcyk7CisrCisrICAgIGlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmYWRkci5zaW42X2FkZHIpKSB7CisrCWlmICgoKih1X2ludDMyX3QgKikmbmV0LnNpbjZfYWRkci5zNl9hZGRyWzEyXSA9IGRvdF9xdWFkX2FkZHIobmV0X3RvaykpID09IElOQUREUl9OT05FCisrCSB8fCAobWFzayA9IGRvdF9xdWFkX2FkZHIobWFza190b2spKSA9PSBJTkFERFJfTk9ORSkKKysJICAgIHJldHVybiAoTk8pOworKwlyZXR1cm4gKCgqKHVfaW50MzJfdCAqKSZhZGRyLnNpbjZfYWRkci5zNl9hZGRyWzEyXSAmIG1hc2spID09ICoodV9pbnQzMl90ICopJm5ldC5zaW42X2FkZHIuczZfYWRkclsxMl0pOworKyAgICB9CisrCisrICAgIC8qIG1hdGNoIElQdjYgYWRkcmVzcyBhZ2FpbnN0IG5ldG51bWJlci9wcmVmaXhsZW4gKi8KKysgICAgbGVuID0gc3RybGVuKG5ldF90b2spOworKyAgICBpZiAoKm5ldF90b2sgIT0gJ1snIHx8IG5ldF90b2tbbGVuIC0gMV0gIT0gJ10nKQorKwlyZXR1cm4gTk87CisrICAgIGNoID0gbmV0X3Rva1tsZW4gLSAxXTsKKysgICAgbmV0X3Rva1tsZW4gLSAxXSA9ICdcMCc7CisrICAgIGlmIChnZXRhZGRyaW5mbyhuZXRfdG9rICsgMSwgTlVMTCwgJmhpbnRzLCAmcmVzKSAhPSAwKSB7CisrCW5ldF90b2tbbGVuIC0gMV0gPSBjaDsKKysJcmV0dXJuIE5POworKyAgICB9CisrICAgIG1lbWNweSgmbmV0LCByZXMtPmFpX2FkZHIsIHNpemVvZihuZXQpKTsKKysgICAgZnJlZWFkZHJpbmZvKHJlcyk7CisrICAgIG5ldF90b2tbbGVuIC0gMV0gPSBjaDsKKysgICAgaWYgKChtYXNrX2xlbiA9IGF0b2kobWFza190b2spKSA8IDAgfHwgbWFza19sZW4gPiAxMjgpCisrCXJldHVybiBOTzsKKysKKysjaWZkZWYgTklfV0lUSFNDT1BFSUQKKysgICAgaWYgKG5ldC5zaW42X3Njb3BlX2lkICE9IDAgJiYgYWRkci5zaW42X3Njb3BlX2lkICE9IG5ldC5zaW42X3Njb3BlX2lkKQorKwlyZXR1cm4gTk87CisrI2VuZGlmCisrICAgIHdoaWxlIChtYXNrX2xlbiA+IDApIHsKKysJaWYgKG1hc2tfbGVuIDwgMzIpIHsKKysJICAgIG1hc2sgPSBodG9ubCh+KDB4ZmZmZmZmZmYgPj4gbWFza19sZW4pKTsKKysJICAgIGlmICgoKih1X2ludDMyX3QgKikmYWRkci5zaW42X2FkZHIuczZfYWRkcltpXSAmIG1hc2spICE9ICgqKHVfaW50MzJfdCAqKSZuZXQuc2luNl9hZGRyLnM2X2FkZHJbaV0gJiBtYXNrKSkKKysJCXJldHVybiBOTzsKKysJICAgIGJyZWFrOworKwl9CisrCWlmICgqKHVfaW50MzJfdCAqKSZhZGRyLnNpbjZfYWRkci5zNl9hZGRyW2ldICE9ICoodV9pbnQzMl90ICopJm5ldC5zaW42X2FkZHIuczZfYWRkcltpXSkKKysJICAgIHJldHVybiBOTzsKKysJaSArPSA0OworKwltYXNrX2xlbiAtPSAzMjsKKysgICAgfQorKyAgICByZXR1cm4gWUVTOworK30KKysjZW5kaWYgLyogSU5FVDYgKi8KKysKKyAjaWZuZGVmIERJU0FCTEVfV0lMRENBUkRfTUFUQ0hJTkcKKyAvKiBOb3RlOiB0aGlzIGZlYXR1cmUgaGFzIGJlZW4gYWRhcHRlZCBpbiBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgd2F5CisgICAgZnJvbSBUYXR1IFlsb25lbidzIGxhc3QgU1NIIHZlcnNpb24gdW5kZXIgZnJlZSBsaWNlbnNlIGJ5IAorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9NYWtlZmlsZSB0Y3Bfd3JhcHBlcnNfNy42L01ha2VmaWxlCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL01ha2VmaWxlCTE5OTctMDMtMjEgMTk6Mjc6MjEuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9NYWtlZmlsZQkyMDA0LTA0LTEwIDE5OjIyOjQ0LjAwMDAwMDAwMCArMDIwMAorQEAgLTIxLDcgKzIxLDcgQEAKKyAJQGVjaG8gIglkeW5peCBlcGl4IGVzaXggZnJlZWJzZCBocHV4IGlyaXg0IGlyaXg1IGlyaXg2IGlzYyBpdW5peCIKKyAJQGVjaG8gIglsaW51eCBtYWNodGVuIG1pcHModW50ZXN0ZWQpIG5jcnN2cjQgbmV0YnNkIG5leHQgb3NmIHBvd2VyX3VuaXhfMjExIgorIAlAZWNobyAiCXB0eC0yLnggcHR4LWdlbmVyaWMgcHlyYW1pZCBzY28gc2NvLW5pcyBzY28tb2QyIHNjby1vczUgc2luaXggc3Vub3M0IgorLQlAZWNobyAiCXN1bm9zNDAgc3Vub3M1IHN5c3Y0IHRhbmRlbSB1bHRyaXggdW5pY29zNyB1bmljb3M4IHVuaXh3YXJlMSB1bml4d2FyZTIiCisrCUBlY2hvICIJc3Vub3M0MCBzdW5vczUgc29sYXJpczggc3lzdjQgdGFuZGVtIHVsdHJpeCB1bmljb3M3IHVuaWNvczggdW5peHdhcmUxIHVuaXh3YXJlMiIKKyAJQGVjaG8gIgl1dHMyMTUgdXhwIgorIAlAZWNobworIAlAZWNobyAiSWYgbm9uZSBvZiB0aGVzZSBtYXRjaCB5b3VyIGVudmlyb25tZW50LCBlZGl0IHRoZSBzeXN0ZW0iCitAQCAtMTMxLDIwICsxMzEsMzQgQEAKKyAJTkVUR1JPVVA9LURORVRHUk9VUCBUTEk9IFNZU1RZUEU9Ii1zeXN0eXBlIGJzZDQzIiBhbGwKKyAKKyAjIEZyZWVic2QgYW5kIGxpbnV4IGJ5IGRlZmF1bHQgaGF2ZSBubyBOSVMuCistMzg2YnNkIG5ldGJzZCBic2RvczoKKyszODZic2QgYnNkb3M6CisgCUBtYWtlIFJFQUxfREFFTU9OX0RJUj0kKFJFQUxfREFFTU9OX0RJUikgU1RZTEU9JChTVFlMRSkgXAorIAlMSUJTPSBSQU5MSUI9cmFubGliIEFSRkxBR1M9cnYgQVVYX09CSj0gTkVUR1JPVVA9IFRMST0gXAorIAlFWFRSQV9DRkxBR1M9LURTWVNfRVJSTElTVF9ERUZJTkVEIFZTWVNMT0c9IGFsbAorIAorIGZyZWVic2Q6CisgCUBtYWtlIFJFQUxfREFFTU9OX0RJUj0kKFJFQUxfREFFTU9OX0RJUikgU1RZTEU9JChTVFlMRSkgXAorKwlMSUJTPSItTC91c3IvbG9jYWwvdjYvbGliIC1saW5ldDYiIFwKKyAJTElCUz0gUkFOTElCPXJhbmxpYiBBUkZMQUdTPXJ2IEFVWF9PQko9IE5FVEdST1VQPSBUTEk9IFwKKy0JRVhUUkFfQ0ZMQUdTPS1EU1lTX0VSUkxJU1RfREVGSU5FRCBWU1lTTE9HPSBhbGwKKysJRVhUUkFfQ0ZMQUdTPSItRFNZU19FUlJMSVNUX0RFRklORUQgLURJTkVUNiAtRHNzX2ZhbWlseT1fX3NzX2ZhbWlseSAtRHNzX2xlbj1fX3NzX2xlbiIgXAorKwlWU1lTTE9HPSBhbGwKKysKKytuZXRic2Q6CisrCUBtYWtlIFJFQUxfREFFTU9OX0RJUj0kKFJFQUxfREFFTU9OX0RJUikgU1RZTEU9JChTVFlMRSkgXAorKwlMSUJTPSBSQU5MSUI9cmFubGliIEFSRkxBR1M9cnYgQVVYX09CSj0gTkVUR1JPVVA9IFRMST0gXAorKwlFWFRSQV9DRkxBR1M9Ii1EU1lTX0VSUkxJU1RfREVGSU5FRCAtRElORVQ2IC1Ec3NfZmFtaWx5PV9fc3NfZmFtaWx5IC1Ec3NfbGVuPV9fc3NfbGVuIiBWU1lTTE9HPSBhbGwKKyAKKyBsaW51eDoKKyAJQG1ha2UgUkVBTF9EQUVNT05fRElSPSQoUkVBTF9EQUVNT05fRElSKSBTVFlMRT0kKFNUWUxFKSBcCistCUxJQlM9IFJBTkxJQj1yYW5saWIgQVJGTEFHUz1ydiBBVVhfT0JKPXNldGVudi5vIFwKKy0JTkVUR1JPVVA9IFRMST0gRVhUUkFfQ0ZMQUdTPSItREJST0tFTl9TT19MSU5HRVIiIGFsbAorKwlMSUJTPS1sbnNsIFJBTkxJQj1yYW5saWIgQVJGTEFHUz1ydiBBVVhfT0JKPSBcCisrCU5FVEdST1VQPSItRE5FVEdST1VQIiBUTEk9IFZTWVNMT0c9IEJVR1M9IFwKKysJRVhUUkFfQ0ZMQUdTPSItRFNZU19FUlJMSVNUX0RFRklORUQgLURIQVZFX1NUUkVSUk9SIC1ESU5FVDY9MSAtRHNzX2ZhbWlseT1fX3NzX2ZhbWlseSAtRHNzX2xlbj1fX3NzX2xlbiIgYWxsCisrCisrZ251OgorKwlAbWFrZSBSRUFMX0RBRU1PTl9ESVI9JChSRUFMX0RBRU1PTl9ESVIpIFNUWUxFPSQoU1RZTEUpIFwKKysJTElCUz0tbG5zbCBSQU5MSUI9cmFubGliIEFSRkxBR1M9cnYgQVVYX09CSj0gXAorKwlORVRHUk9VUD0tRE5FVEdST1VQIFRMST0gVlNZU0xPRz0gQlVHUz0gXAorKwlFWFRSQV9DRkxBR1M9Ii1EU1lTX0VSUkxJU1RfREVGSU5FRCAtREhBVkVfU1RSRVJST1IiIGFsbAorIAorICMgVGhpcyBpcyBnb29kIGZvciBtYW55IFNZU1YrQlNEIGh5YnJpZHMgd2l0aCBOSVMsIHByb2JhYmx5IGFsc28gZm9yIEhQLVVYIDcueC4KKyBocHV4IGhwdXg4IGhwdXg5IGhwdXgxMDoKK0BAIC0xOTYsNiArMjEwLDEzIEBACisgCU5FVEdST1VQPS1ETkVUR1JPVVAgQVVYX09CSj1zZXRlbnYubyBUTEk9LURUTEkgXAorIAlCVUdTPSIkKEJVR1MpIC1EU09MQVJJU18yNF9HRVRIT1NUQllOQU1FX0JVRyIgYWxsCisgCisrIyBTdW5PUyA1LjggaXMgYW5vdGhlciBTWVNWNCB2YXJpYW50LCBidXQgaGFzIElQdjYgc3VwcG9ydAorK3NvbGFyaXM4OgorKwlAbWFrZSBSRUFMX0RBRU1PTl9ESVI9JChSRUFMX0RBRU1PTl9ESVIpIFNUWUxFPSQoU1RZTEUpIFwKKysJTElCUz0iLWxzb2NrZXQgLWxuc2wiIFJBTkxJQj1lY2hvIEFSRkxBR1M9cnYgVlNZU0xPRz0gXAorKwlORVRHUk9VUD0tRE5FVEdST1VQIEFVWF9PQko9c2V0ZW52Lm8gVExJPS1EVExJIFwKKysJRVhUUkFfQ0ZMQUdTPSItRElORVQ2IC1ETk9fQ0xPTkVfREVWSUNFIC1ESU5UMzJfVCIgYWxsCisrCisgIyBHZW5lcmljIFNZU1Y0MAorIGVzaXggc3lzdjQ6CisgCUBtYWtlIFJFQUxfREFFTU9OX0RJUj0kKFJFQUxfREFFTU9OX0RJUikgU1RZTEU9JChTVFlMRSkgXAorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9taXNjLmMgdGNwX3dyYXBwZXJzXzcuNi9taXNjLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvbWlzYy5jCTE5OTYtMDItMTEgMTc6MDE6MzAuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9taXNjLmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC01OCw5ICs1OCwzMSBAQAorIHsKKyAgICAgY2hhciAgICpjcDsKKyAKKysjaWZkZWYgSU5FVDYKKysgICAgaW50IGJyYWNrZXQgPSAwOworKworKyAgICBmb3IgKGNwID0gc3RyaW5nOyBjcCAmJiAqY3A7IGNwKyspIHsKKysJc3dpdGNoICgqY3ApIHsKKysJY2FzZSAnWyc6CisrCSAgICBicmFja2V0Kys7CisrCSAgICBicmVhazsKKysJY2FzZSAnXSc6CisrCSAgICBicmFja2V0LS07CisrCSAgICBicmVhazsKKysJZGVmYXVsdDoKKysJICAgIGlmIChicmFja2V0ID09IDAgJiYgKmNwID09IGRlbGltaXRlcikgeworKwkJKmNwKysgPSAwOworKwkJcmV0dXJuIGNwOworKwkgICAgfQorKwkgICAgYnJlYWs7CisrCX0KKysgICAgfQorKyAgICByZXR1cm4gKE5VTEwpOworKyNlbHNlCisgICAgIGlmICgoY3AgPSBzdHJjaHIoc3RyaW5nLCBkZWxpbWl0ZXIpKSAhPSAwKQorIAkqY3ArKyA9IDA7CisgICAgIHJldHVybiAoY3ApOworKyNlbmRpZgorIH0KKyAKKyAvKiBkb3RfcXVhZF9hZGRyIC0gY29udmVydCBkb3R0ZWQgcXVhZCB0byBpbnRlcm5hbCBmb3JtICovCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3JlZnVzZS5jIHRjcF93cmFwcGVyc183LjYvcmVmdXNlLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvcmVmdXNlLmMJMTk5NC0xMi0yOCAxNzo0Mjo0MC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3JlZnVzZS5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtMjUsNyArMjUsMTIgQEAKKyB2b2lkICAgIHJlZnVzZShyZXF1ZXN0KQorIHN0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3Q7CisgeworKyNpZmRlZiBJTkVUNgorKyAgICBzeXNsb2coZGVueV9zZXZlcml0eSwgInJlZnVzZWQgY29ubmVjdCBmcm9tICVzICglcykiLAorKwkgICBldmFsX2NsaWVudChyZXF1ZXN0KSwgZXZhbF9ob3N0YWRkcihyZXF1ZXN0LT5jbGllbnQpKTsKKysjZWxzZQorICAgICBzeXNsb2coZGVueV9zZXZlcml0eSwgInJlZnVzZWQgY29ubmVjdCBmcm9tICVzIiwgZXZhbF9jbGllbnQocmVxdWVzdCkpOworKyNlbmRpZgorICAgICBjbGVhbl9leGl0KHJlcXVlc3QpOworICAgICAvKiBOT1RSRUFDSEVEICovCisgfQorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9yZmM5MzEuYyB0Y3Bfd3JhcHBlcnNfNy42L3JmYzkzMS5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3JmYzkzMS5jCTE5OTUtMDEtMDIgMTY6MTE6MzQuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9yZmM5MzEuYwkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTY4LDIwICs2OCw1MCBAQAorIC8qIHJmYzkzMSAtIHJldHVybiByZW1vdGUgdXNlciBuYW1lLCBnaXZlbiBzb2NrZXQgc3RydWN0dXJlcyAqLworIAorIHZvaWQgICAgcmZjOTMxKHJtdF9zaW4sIG91cl9zaW4sIGRlc3QpCisrI2lmZGVmIElORVQ2Cisrc3RydWN0IHNvY2thZGRyICpybXRfc2luOworK3N0cnVjdCBzb2NrYWRkciAqb3VyX3NpbjsKKysjZWxzZQorIHN0cnVjdCBzb2NrYWRkcl9pbiAqcm10X3NpbjsKKyBzdHJ1Y3Qgc29ja2FkZHJfaW4gKm91cl9zaW47CisrI2VuZGlmCisgY2hhciAgICpkZXN0OworIHsKKyAgICAgdW5zaWduZWQgcm10X3BvcnQ7CisgICAgIHVuc2lnbmVkIG91cl9wb3J0OworKyNpZmRlZiBJTkVUNgorKyAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBybXRfcXVlcnlfc2luOworKyAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBvdXJfcXVlcnlfc2luOworKyAgICBpbnQgYWxlbjsKKysjZWxzZQorICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gcm10X3F1ZXJ5X3NpbjsKKyAgICAgc3RydWN0IHNvY2thZGRyX2luIG91cl9xdWVyeV9zaW47CisrI2VuZGlmCisgICAgIGNoYXIgICAgdXNlclsyNTZdOwkJCS8qIFhYWCAqLworICAgICBjaGFyICAgIGJ1ZmZlcls1MTJdOwkJLyogWFhYICovCisgICAgIGNoYXIgICAqY3A7CisgICAgIGNoYXIgICAqcmVzdWx0ID0gdW5rbm93bjsKKyAgICAgRklMRSAgICpmcDsKKyAKKysjaWZkZWYgSU5FVDYKKysgICAgLyogYWRkcmVzcyBmYW1pbHkgbXVzdCBiZSB0aGUgc2FtZSAqLworKyAgICBpZiAocm10X3Npbi0+c2FfZmFtaWx5ICE9IG91cl9zaW4tPnNhX2ZhbWlseSkgeworKwlTVFJOX0NQWShkZXN0LCByZXN1bHQsIFNUUklOR19MRU5HVEgpOworKwlyZXR1cm47CisrICAgIH0KKysgICAgc3dpdGNoIChvdXJfc2luLT5zYV9mYW1pbHkpIHsKKysgICAgY2FzZSBBRl9JTkVUOgorKwlhbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisrCWJyZWFrOworKyAgICBjYXNlIEFGX0lORVQ2OgorKwlhbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworKwlicmVhazsKKysgICAgZGVmYXVsdDoKKysJU1RSTl9DUFkoZGVzdCwgcmVzdWx0LCBTVFJJTkdfTEVOR1RIKTsKKysJcmV0dXJuOworKyAgICB9CisrI2VuZGlmCisrCisgICAgIC8qCisgICAgICAqIFVzZSBvbmUgdW5idWZmZXJlZCBzdGRpbyBzdHJlYW0gZm9yIHdyaXRpbmcgdG8gYW5kIGZvciByZWFkaW5nIGZyb20KKyAgICAgICogdGhlIFJGQzkzMSBldGMuIHNlcnZlci4gVGhpcyBpcyBkb25lIGJlY2F1c2Ugb2YgYSBidWcgaW4gdGhlIFN1bk9TCitAQCAtOTIsNyArMTIyLDExIEBACisgICAgICAqIHNvY2tldHMuCisgICAgICAqLworIAorKyNpZmRlZiBJTkVUNgorKyAgICBpZiAoKGZwID0gZnNvY2tldChvdXJfc2luLT5zYV9mYW1pbHksIFNPQ0tfU1RSRUFNLCAwKSkgIT0gMCkgeworKyNlbHNlCisgICAgIGlmICgoZnAgPSBmc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKSkgIT0gMCkgeworKyNlbmRpZgorIAlzZXRidWYoZnAsIChjaGFyICopIDApOworIAorIAkvKgorQEAgLTExMiw2ICsxNDYsMjUgQEAKKyAJICAgICAqIGFkZHJlc3NlcyBmcm9tIHRoZSBxdWVyeSBzb2NrZXQuCisgCSAgICAgKi8KKyAKKysjaWZkZWYgSU5FVDYKKysJICAgIG1lbWNweSgmb3VyX3F1ZXJ5X3Npbiwgb3VyX3NpbiwgYWxlbik7CisrCSAgICBtZW1jcHkoJnJtdF9xdWVyeV9zaW4sIHJtdF9zaW4sIGFsZW4pOworKwkgICAgc3dpdGNoIChvdXJfc2luLT5zYV9mYW1pbHkpIHsKKysJICAgIGNhc2UgQUZfSU5FVDoKKysJCSgoc3RydWN0IHNvY2thZGRyX2luICopJm91cl9xdWVyeV9zaW4pLT5zaW5fcG9ydCA9IGh0b25zKEFOWV9QT1JUKTsKKysJCSgoc3RydWN0IHNvY2thZGRyX2luICopJnJtdF9xdWVyeV9zaW4pLT5zaW5fcG9ydCA9IGh0b25zKFJGQzkzMV9QT1JUKTsKKysJCWJyZWFrOworKwkgICAgY2FzZSBBRl9JTkVUNjoKKysJCSgoc3RydWN0IHNvY2thZGRyX2luNiAqKSZvdXJfcXVlcnlfc2luKS0+c2luNl9wb3J0ID0gaHRvbnMoQU5ZX1BPUlQpOworKwkJKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJnJtdF9xdWVyeV9zaW4pLT5zaW42X3BvcnQgPSBodG9ucyhSRkM5MzFfUE9SVCk7CisrCQlicmVhazsKKysJICAgIH0KKysKKysJICAgIGlmIChiaW5kKGZpbGVubyhmcCksIChzdHJ1Y3Qgc29ja2FkZHIgKikgJiBvdXJfcXVlcnlfc2luLAorKwkJICAgICBhbGVuKSA+PSAwICYmCisrCQljb25uZWN0KGZpbGVubyhmcCksIChzdHJ1Y3Qgc29ja2FkZHIgKikgJiBybXRfcXVlcnlfc2luLAorKwkJCWFsZW4pID49IDApIHsKKysjZWxzZQorIAkgICAgb3VyX3F1ZXJ5X3NpbiA9ICpvdXJfc2luOworIAkgICAgb3VyX3F1ZXJ5X3Npbi5zaW5fcG9ydCA9IGh0b25zKEFOWV9QT1JUKTsKKyAJICAgIHJtdF9xdWVyeV9zaW4gPSAqcm10X3NpbjsKK0BAIC0xMjEsNiArMTc0LDcgQEAKKyAJCSAgICAgc2l6ZW9mKG91cl9xdWVyeV9zaW4pKSA+PSAwICYmCisgCQljb25uZWN0KGZpbGVubyhmcCksIChzdHJ1Y3Qgc29ja2FkZHIgKikgJiBybXRfcXVlcnlfc2luLAorIAkJCXNpemVvZihybXRfcXVlcnlfc2luKSkgPj0gMCkgeworKyNlbmRpZgorIAorIAkJLyoKKyAJCSAqIFNlbmQgcXVlcnkgdG8gc2VydmVyLiBOZWdsZWN0IHRoZSByaXNrIHRoYXQgYSAxMy1ieXRlCitAQCAtMTI5LDggKzE4MywxMyBAQAorIAkJICovCisgCisgCQlmcHJpbnRmKGZwLCAiJXUsJXVcclxuIiwKKysjaWZkZWYgSU5FVDYKKysJCQludG9ocygoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXJtdF9zaW4pLT5zaW5fcG9ydCksCisrCQkJbnRvaHMoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilvdXJfc2luKS0+c2luX3BvcnQpKTsKKysjZWxzZQorIAkJCW50b2hzKHJtdF9zaW4tPnNpbl9wb3J0KSwKKyAJCQludG9ocyhvdXJfc2luLT5zaW5fcG9ydCkpOworKyNlbmRpZgorIAkJZmZsdXNoKGZwKTsKKyAKKyAJCS8qCitAQCAtMTQ0LDggKzIwMywxMyBAQAorIAkJICAgICYmIGZlcnJvcihmcCkgPT0gMCAmJiBmZW9mKGZwKSA9PSAwCisgCQkgICAgJiYgc3NjYW5mKGJ1ZmZlciwgIiV1ICwgJXUgOiBVU0VSSUQgOiUqW146XTolMjU1cyIsCisgCQkJICAgICAgJnJtdF9wb3J0LCAmb3VyX3BvcnQsIHVzZXIpID09IDMKKysjaWZkZWYgSU5FVDYKKysJCSAgICAmJiBudG9ocygoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXJtdF9zaW4pLT5zaW5fcG9ydCkgPT0gcm10X3BvcnQKKysJCSAgICAmJiBudG9ocygoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKW91cl9zaW4pLT5zaW5fcG9ydCkgPT0gb3VyX3BvcnQpIHsKKysjZWxzZQorIAkJICAgICYmIG50b2hzKHJtdF9zaW4tPnNpbl9wb3J0KSA9PSBybXRfcG9ydAorIAkJICAgICYmIG50b2hzKG91cl9zaW4tPnNpbl9wb3J0KSA9PSBvdXJfcG9ydCkgeworKyNlbmRpZgorIAorIAkJICAgIC8qCisgCQkgICAgICogU3RyaXAgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuLiBJdCBpcyBwYXJ0IG9mIHRoZQorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9zY2FmZm9sZC5jIHRjcF93cmFwcGVyc183LjYvc2NhZmZvbGQuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9zY2FmZm9sZC5jCTE5OTctMDMtMjEgMTk6Mjc6MjQuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9zY2FmZm9sZC5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtMjUsNyArMjUsOSBAQAorICNkZWZpbmUJSU5BRERSX05PTkUJKC0xKQkJLyogWFhYIHNob3VsZCBiZSAweGZmZmZmZmZmICovCisgI2VuZGlmCisgCisrI2lmbmRlZiBJTkVUNgorIGV4dGVybiBjaGFyICptYWxsb2MoKTsKKysjZW5kaWYKKyAKKyAvKiBBcHBsaWNhdGlvbi1zcGVjaWZpYy4gKi8KKyAKK0BAIC0zOSw2ICs0MSw3IEBACisgaW50ICAgICBkZW55X3NldmVyaXR5ID0gTE9HX1dBUk5JTkc7CisgaW50ICAgICByZmM5MzFfdGltZW91dCA9IFJGQzkzMV9USU1FT1VUOworIAorKyNpZm5kZWYgSU5FVDYKKyAvKiBkdXBfaG9zdGVudCAtIGNyZWF0ZSBob3N0ZW50IGluIG9uZSBtZW1vcnkgYmxvY2sgKi8KKyAKKyBzdGF0aWMgc3RydWN0IGhvc3RlbnQgKmR1cF9ob3N0ZW50KGhwKQorQEAgLTczLDkgKzc2LDQ2IEBACisgICAgIH0KKyAgICAgcmV0dXJuICgmaGItPmhvc3QpOworIH0KKysjZW5kaWYKKyAKKyAvKiBmaW5kX2luZXRfYWRkciAtIGZpbmQgYWxsIGFkZHJlc3NlcyBmb3IgdGhpcyBob3N0LCByZXN1bHQgdG8gZnJlZSgpICovCisgCisrI2lmZGVmIElORVQ2Cisrc3RydWN0IGFkZHJpbmZvICpmaW5kX2luZXRfYWRkcihob3N0KQorK2NoYXIgICAqaG9zdDsKKyt7CisrICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50cywgKnJlczsKKysKKysgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisrICAgIGhpbnRzLmFpX2ZhbWlseSA9IFBGX1VOU1BFQzsKKysgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKysgICAgaGludHMuYWlfZmxhZ3MgPSBBSV9QQVNTSVZFIHwgQUlfTlVNRVJJQ0hPU1Q7CisrICAgIGlmIChnZXRhZGRyaW5mbyhob3N0LCBOVUxMLCAmaGludHMsICZyZXMpID09IDApCisrCXJldHVybiAocmVzKTsKKysKKysgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisrICAgIGhpbnRzLmFpX2ZhbWlseSA9IFBGX1VOU1BFQzsKKysgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKysgICAgaGludHMuYWlfZmxhZ3MgPSBBSV9QQVNTSVZFIHwgQUlfQ0FOT05OQU1FOworKyAgICBpZiAoZ2V0YWRkcmluZm8oaG9zdCwgTlVMTCwgJmhpbnRzLCAmcmVzKSAhPSAwKSB7CisrCXRjcGRfd2FybigiJXM6IGhvc3Qgbm90IGZvdW5kIiwgaG9zdCk7CisrCXJldHVybiAoMCk7CisrICAgIH0KKysgICAgaWYgKHJlcy0+YWlfZmFtaWx5ICE9IEFGX0lORVQ2ICYmIHJlcy0+YWlfZmFtaWx5ICE9IEFGX0lORVQpIHsKKysJdGNwZF93YXJuKCIlZDogbm90IGFuIGludGVybmV0IGhvc3QiLCByZXMtPmFpX2ZhbWlseSk7CisrCWZyZWVhZGRyaW5mbyhyZXMpOworKwlyZXR1cm4gKDApOworKyAgICB9CisrICAgIGlmICghcmVzLT5haV9jYW5vbm5hbWUpIHsKKysJdGNwZF93YXJuKCIlczogaG9zdG5hbWUgYWxpYXMiLCBob3N0KTsKKysJdGNwZF93YXJuKCIoY2Fubm90IG9idGFpbiBvZmZpY2lhbCBuYW1lKSIsIHJlcy0+YWlfY2Fub25uYW1lKTsKKysgICAgfSBlbHNlIGlmIChTVFJfTkUoaG9zdCwgcmVzLT5haV9jYW5vbm5hbWUpKSB7CisrCXRjcGRfd2FybigiJXM6IGhvc3RuYW1lIGFsaWFzIiwgaG9zdCk7CisrCXRjcGRfd2FybigiKG9mZmljaWFsIG5hbWU6ICUuKnMpIiwgU1RSSU5HX0xFTkdUSCwgcmVzLT5haV9jYW5vbm5hbWUpOworKyAgICB9CisrICAgIHJldHVybiAocmVzKTsKKyt9CisrI2Vsc2UKKyBzdHJ1Y3QgaG9zdGVudCAqZmluZF9pbmV0X2FkZHIoaG9zdCkKKyBjaGFyICAgKmhvc3Q7CisgeworQEAgLTExOCw2ICsxNTgsNyBAQAorICAgICB9CisgICAgIHJldHVybiAoZHVwX2hvc3RlbnQoaHApKTsKKyB9CisrI2VuZGlmCisgCisgLyogY2hlY2tfZG5zIC0gZ2l2ZSBlYWNoIGFkZHJlc3MgdGhvcm91Z2ggd29ya291dCwgcmV0dXJuIGFkZHJlc3MgY291bnQgKi8KKyAKK0BAIC0xMjUsOCArMTY2LDEzIEBACisgY2hhciAgICpob3N0OworIHsKKyAgICAgc3RydWN0IHJlcXVlc3RfaW5mbyByZXF1ZXN0OworKyNpZmRlZiBJTkVUNgorKyAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzaW47CisrICAgIHN0cnVjdCBhZGRyaW5mbyAqaHAsICpyZXM7CisrI2Vsc2UKKyAgICAgc3RydWN0IHNvY2thZGRyX2luIHNpbjsKKyAgICAgc3RydWN0IGhvc3RlbnQgKmhwOworKyNlbmRpZgorICAgICBpbnQgICAgIGNvdW50OworICAgICBjaGFyICAgKmFkZHI7CisgCitAQCAtMTM0LDExICsxODAsMTggQEAKKyAJcmV0dXJuICgwKTsKKyAgICAgcmVxdWVzdF9pbml0KCZyZXF1ZXN0LCBSUV9DTElFTlRfU0lOLCAmc2luLCAwKTsKKyAgICAgc29ja19tZXRob2RzKCZyZXF1ZXN0KTsKKysjaWZuZGVmIElORVQ2CisgICAgIG1lbXNldCgoY2hhciAqKSAmc2luLCAwLCBzaXplb2Yoc2luKSk7CisgICAgIHNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKysjZW5kaWYKKyAKKysjaWZkZWYgSU5FVDYKKysgICAgZm9yIChyZXMgPSBocCwgY291bnQgPSAwOyByZXM7IHJlcyA9IHJlcy0+YWlfbmV4dCwgY291bnQrKykgeworKwltZW1jcHkoJnNpbiwgcmVzLT5haV9hZGRyLCByZXMtPmFpX2FkZHJsZW4pOworKyNlbHNlCisgICAgIGZvciAoY291bnQgPSAwOyAoYWRkciA9IGhwLT5oX2FkZHJfbGlzdFtjb3VudF0pICE9IDA7IGNvdW50KyspIHsKKyAJbWVtY3B5KChjaGFyICopICZzaW4uc2luX2FkZHIsIGFkZHIsIHNpemVvZihzaW4uc2luX2FkZHIpKTsKKysjZW5kaWYKKyAKKyAJLyoKKyAJICogRm9yY2UgaG9zdCBuYW1lIGFuZCBhZGRyZXNzIGNvbnZlcnNpb25zLiBVc2UgdGhlIHJlcXVlc3Qgc3RydWN0dXJlCitAQCAtMTUxLDcgKzIwNCwxMSBAQAorIAkgICAgdGNwZF93YXJuKCJob3N0IGFkZHJlc3MgJXMtPm5hbWUgbG9va3VwIGZhaWxlZCIsCisgCQkgICAgICBldmFsX2hvc3RhZGRyKHJlcXVlc3QuY2xpZW50KSk7CisgICAgIH0KKysjaWZkZWYgSU5FVDYKKysgICAgZnJlZWFkZHJpbmZvKGhwKTsKKysjZWxzZQorICAgICBmcmVlKChjaGFyICopIGhwKTsKKysjZW5kaWYKKyAgICAgcmV0dXJuIChjb3VudCk7CisgfQorIAorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9zY2FmZm9sZC5oIHRjcF93cmFwcGVyc183LjYvc2NhZmZvbGQuaAorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9zY2FmZm9sZC5oCTE5OTQtMTItMzEgMTg6MTk6MjAuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9zY2FmZm9sZC5oCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtNCw2ICs0LDEwIEBACisgICAqIEF1dGhvcjogV2lldHNlIFZlbmVtYSwgRWluZGhvdmVuIFVuaXZlcnNpdHkgb2YgVGVjaG5vbG9neSwgVGhlIE5ldGhlcmxhbmRzLgorICAgKi8KKyAKKysjaWZkZWYgSU5FVDYKKytleHRlcm4gc3RydWN0IGFkZHJpbmZvICpmaW5kX2luZXRfYWRkcigpOworKyNlbHNlCisgZXh0ZXJuIHN0cnVjdCBob3N0ZW50ICpmaW5kX2luZXRfYWRkcigpOworKyNlbmRpZgorIGV4dGVybiBpbnQgY2hlY2tfZG5zKCk7CisgZXh0ZXJuIGludCBjaGVja19wYXRoKCk7CitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3NvY2tldC5jIHRjcF93cmFwcGVyc183LjYvc29ja2V0LmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvc29ja2V0LmMJMjAwNC0wNC0xMCAxOToyMjo1OC4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3NvY2tldC5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtMjQsMTMgKzI0LDIyIEBACisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorKyNpZmRlZiBJTlQzMl9UCisrdHlwZWRlZiB1aW50MzJfdCB1X2ludDMyX3Q7CisrI2VuZGlmCisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8bmV0ZGIuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3lzbG9nLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorIAorKyNpZmRlZiBJTkVUNgorKyNpZm5kZWYgTklfV0lUSFNDT1BFSUQKKysjZGVmaW5lIE5JX1dJVEhTQ09QRUlECTAKKysjZW5kaWYKKysjZWxzZQorIGV4dGVybiBjaGFyICppbmV0X250b2EoKTsKKysjZW5kaWYKKyAKKyAvKiBMb2NhbCBzdHVmZi4gKi8KKyAKK0BAIC03OSw4ICs4OCwxMyBAQAorIHZvaWQgICAgc29ja19ob3N0KHJlcXVlc3QpCisgc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKyB7CisrI2lmZGVmIElORVQ2CisrICAgIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBjbGllbnQ7CisrICAgIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzZXJ2ZXI7CisrI2Vsc2UKKyAgICAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiBjbGllbnQ7CisgICAgIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2VydmVyOworKyNlbmRpZgorICAgICBpbnQgICAgIGxlbjsKKyAgICAgY2hhciAgICBidWZbQlVGU0laXTsKKyAgICAgaW50ICAgICBmZCA9IHJlcXVlc3QtPmZkOworQEAgLTEwOSw3ICsxMjMsMTEgQEAKKyAJbWVtc2V0KGJ1ZiwgMCBzaXplb2YoYnVmKSk7CisgI2VuZGlmCisgICAgIH0KKysjaWZkZWYgSU5FVDYKKysgICAgcmVxdWVzdC0+Y2xpZW50LT5zaW4gPSAoc3RydWN0IHNvY2thZGRyICopJmNsaWVudDsKKysjZWxzZQorICAgICByZXF1ZXN0LT5jbGllbnQtPnNpbiA9ICZjbGllbnQ7CisrI2VuZGlmCisgCisgICAgIC8qCisgICAgICAqIERldGVybWluZSB0aGUgc2VydmVyIGJpbmRpbmcuIFRoaXMgaXMgdXNlZCBmb3IgY2xpZW50IHVzZXJuYW1lCitAQCAtMTIyLDcgKzE0MCwxMSBAQAorIAl0Y3BkX3dhcm4oImdldHNvY2tuYW1lOiAlbSIpOworIAlyZXR1cm47CisgICAgIH0KKysjaWZkZWYgSU5FVDYKKysgICAgcmVxdWVzdC0+c2VydmVyLT5zaW4gPSAoc3RydWN0IHNvY2thZGRyICopJnNlcnZlcjsKKysjZWxzZQorICAgICByZXF1ZXN0LT5zZXJ2ZXItPnNpbiA9ICZzZXJ2ZXI7CisrI2VuZGlmCisgfQorIAorIC8qIHNvY2tfaG9zdGFkZHIgLSBtYXAgZW5kcG9pbnQgYWRkcmVzcyB0byBwcmludGFibGUgZm9ybSAqLworQEAgLTEzMCwxMCArMTUyLDI2IEBACisgdm9pZCAgICBzb2NrX2hvc3RhZGRyKGhvc3QpCisgc3RydWN0IGhvc3RfaW5mbyAqaG9zdDsKKyB7CisrI2lmZGVmIElORVQ2CisrICAgIHN0cnVjdCBzb2NrYWRkciAqc2luID0gaG9zdC0+c2luOworKyAgICBpbnQgc2FsZW47CisrCisrICAgIGlmICghc2luKQorKwlyZXR1cm47CisrI2lmZGVmIFNJTjZfTEVOCisrICAgIHNhbGVuID0gc2luLT5zYV9sZW47CisrI2Vsc2UKKysgICAgc2FsZW4gPSAoc2luLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgPyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKQorKwkJCQkJOiBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisrI2VuZGlmCisrICAgIGdldG5hbWVpbmZvKHNpbiwgc2FsZW4sIGhvc3QtPmFkZHIsIHNpemVvZihob3N0LT5hZGRyKSwKKysJCU5VTEwsIDAsIE5JX05VTUVSSUNIT1NUIHwgTklfV0lUSFNDT1BFSUQpOworKyNlbHNlCisgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gaG9zdC0+c2luOworIAorICAgICBpZiAoc2luICE9IDApCisgCVNUUk5fQ1BZKGhvc3QtPmFkZHIsIGluZXRfbnRvYShzaW4tPnNpbl9hZGRyKSwgc2l6ZW9mKGhvc3QtPmFkZHIpKTsKKysjZW5kaWYKKyB9CisgCisgLyogc29ja19ob3N0bmFtZSAtIG1hcCBlbmRwb2ludCBhZGRyZXNzIHRvIGhvc3QgbmFtZSAqLworQEAgLTE0MSw2ICsxNzksMTYwIEBACisgdm9pZCAgICBzb2NrX2hvc3RuYW1lKGhvc3QpCisgc3RydWN0IGhvc3RfaW5mbyAqaG9zdDsKKyB7CisrI2lmZGVmIElORVQ2CisrICAgIHN0cnVjdCBzb2NrYWRkciAqc2luID0gaG9zdC0+c2luOworKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luNDsKKysgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqcmVzLCAqcmVzMCA9IE5VTEw7CisrICAgIGludCBzYWxlbiwgYWxlbiwgZXJyID0gMTsKKysgICAgY2hhciAqYXAgPSBOVUxMLCAqcmFwLCBobmFtZVtOSV9NQVhIT1NUXTsKKysKKysgICAgaWYgKHNpbiAhPSBOVUxMKSB7CisrCWlmIChzaW4tPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgeworKwkgICAgc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2luOworKworKwkgICAgaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42LT5zaW42X2FkZHIpKSB7CisrCQltZW1zZXQoJnNpbjQsIDAsIHNpemVvZihzaW40KSk7CisrI2lmZGVmIFNJTjZfTEVOCisrCQlzaW40LnNpbl9sZW4gPSBzaXplb2Yoc2luNCk7CisrI2VuZGlmCisrCQlzaW40LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworKwkJc2luNC5zaW5fcG9ydCA9IHNpbjYtPnNpbjZfcG9ydDsKKysJCXNpbjQuc2luX2FkZHIuc19hZGRyID0gKih1X2ludDMyX3QgKikmc2luNi0+c2luNl9hZGRyLnM2X2FkZHJbMTJdOworKwkJc2luID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW40OworKwkgICAgfQorKwl9CisrCXN3aXRjaCAoc2luLT5zYV9mYW1pbHkpIHsKKysJY2FzZSBBRl9JTkVUOgorKwkgICAgYXAgPSAoY2hhciAqKSYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNpbiktPnNpbl9hZGRyOworKwkgICAgYWxlbiA9IHNpemVvZihzdHJ1Y3QgaW5fYWRkcik7CisrCSAgICBzYWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworKwkgICAgYnJlYWs7CisrCWNhc2UgQUZfSU5FVDY6CisrCSAgICBhcCA9IChjaGFyICopJigoc3RydWN0IHNvY2thZGRyX2luNiAqKXNpbiktPnNpbjZfYWRkcjsKKysJICAgIGFsZW4gPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKTsKKysJICAgIHNhbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworKwkgICAgYnJlYWs7CisrCWRlZmF1bHQ6CisrCSAgICBicmVhazsKKysJfQorKwlpZiAoYXApCisrCSAgICBlcnIgPSBnZXRuYW1laW5mbyhzaW4sIHNhbGVuLCBobmFtZSwgc2l6ZW9mKGhuYW1lKSwKKysJCQkgICAgICBOVUxMLCAwLCBOSV9XSVRIU0NPUEVJRCB8IE5JX05BTUVSRVFEKTsKKysgICAgfQorKyAgICBpZiAoIWVycikgeworKworKwlTVFJOX0NQWShob3N0LT5uYW1lLCBobmFtZSwgc2l6ZW9mKGhvc3QtPm5hbWUpKTsKKysKKysJLyogcmVqZWN0IG51bWVyaWMgYWRkcmVzc2VzICovCisrCW1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworKwloaW50cy5haV9mYW1pbHkgPSBzaW4tPnNhX2ZhbWlseTsKKysJaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKysJaGludHMuYWlfZmxhZ3MgPSBBSV9QQVNTSVZFIHwgQUlfQ0FOT05OQU1FIHwgQUlfTlVNRVJJQ0hPU1Q7CisrCWlmICgoZXJyID0gZ2V0YWRkcmluZm8oaG9zdC0+bmFtZSwgTlVMTCwgJmhpbnRzLCAmcmVzMCkgPT0gMCkpIHsKKysJICAgIGZyZWVhZGRyaW5mbyhyZXMwKTsKKysJICAgIHJlczAgPSBOVUxMOworKwkgICAgdGNwZF93YXJuKCJob3N0IG5hbWUvbmFtZSBtaXNtYXRjaDogIgorKwkJICAgICAgInJldmVyc2UgbG9va3VwIHJlc3VsdHMgaW4gbm9uLUZRRE4gJXMiLAorKwkJICAgICAgaG9zdC0+bmFtZSk7CisrCSAgICBzdHJjcHkoaG9zdC0+bmFtZSwgcGFyYW5vaWQpOwkvKiBuYW1lIGlzIGJhZCwgY2xvYmJlciBpdCAqLworKwl9CisrCWVyciA9ICFlcnI7CisrICAgIH0KKysgICAgaWYgKCFlcnIpIHsKKysJLyogd2UgYXJlIG5vdyBzdXJlIHRoYXQgdGhpcyBpcyBub24tbnVtZXJpYyAqLworKworKwkvKgorKwkgKiBWZXJpZnkgdGhhdCB0aGUgYWRkcmVzcyBpcyBhIG1lbWJlciBvZiB0aGUgYWRkcmVzcyBsaXN0IHJldHVybmVkCisrCSAqIGJ5IGdldGhvc3RieW5hbWUoaG9zdG5hbWUpLgorKwkgKiAKKysJICogVmVyaWZ5IGFsc28gdGhhdCBnZXRob3N0YnlhZGRyKCkgYW5kIGdldGhvc3RieW5hbWUoKSByZXR1cm4gdGhlIHNhbWUKKysJICogaG9zdG5hbWUsIG9yIHJzaGQgYW5kIHJsb2dpbmQgbWF5IHN0aWxsIGVuZCB1cCBiZWluZyBzcG9vZmVkLgorKwkgKiAKKysJICogT24gc29tZSBzaXRlcywgZ2V0aG9zdGJ5bmFtZSgibG9jYWxob3N0IikgcmV0dXJucyAibG9jYWxob3N0LmRvbWFpbiIuCisrCSAqIFRoaXMgaXMgYSBETlMgYXJ0ZWZhY3QuIFdlIHRyZWF0IGl0IGFzIGEgc3BlY2lhbCBjYXNlLiBXaGVuIHdlCisrCSAqIGNhbid0IGJlbGlldmUgdGhlIGFkZHJlc3MgbGlzdCBmcm9tIGdldGhvc3RieW5hbWUoImxvY2FsaG9zdCIpCisrCSAqIHdlJ3JlIGluIGJpZyB0cm91YmxlIGFueXdheS4KKysJICovCisrCisrCW1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworKwloaW50cy5haV9mYW1pbHkgPSBzaW4tPnNhX2ZhbWlseTsKKysJaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKysJaGludHMuYWlfZmxhZ3MgPSBBSV9QQVNTSVZFIHwgQUlfQ0FOT05OQU1FOworKwlpZiAoZ2V0YWRkcmluZm8oaG9zdC0+bmFtZSwgTlVMTCwgJmhpbnRzLCAmcmVzMCkgIT0gMCkgeworKworKwkgICAgLyoKKysJICAgICAqIFVuYWJsZSB0byB2ZXJpZnkgdGhhdCB0aGUgaG9zdCBuYW1lIG1hdGNoZXMgdGhlIGFkZHJlc3MuIFRoaXMKKysJICAgICAqIG1heSBiZSBhIHRyYW5zaWVudCBwcm9ibGVtIG9yIGEgYm90Y2hlZCBuYW1lIHNlcnZlciBzZXR1cC4KKysJICAgICAqLworKworKwkgICAgdGNwZF93YXJuKCJjYW4ndCB2ZXJpZnkgaG9zdG5hbWU6IGdldGFkZHJpbmZvKCVzLCAlcykgZmFpbGVkIiwKKysJCSAgICAgIGhvc3QtPm5hbWUsCisrCQkgICAgICAoc2luLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgPyAiQUZfSU5FVCIgOiAiQUZfSU5FVDYiKTsKKysKKysJfSBlbHNlIGlmICgocmVzMC0+YWlfY2Fub25uYW1lID09IE5VTEwKKysJCSAgICB8fCBTVFJfTkUoaG9zdC0+bmFtZSwgcmVzMC0+YWlfY2Fub25uYW1lKSkKKysJCSAgICYmIFNUUl9ORShob3N0LT5uYW1lLCAibG9jYWxob3N0IikpIHsKKysKKysJICAgIC8qCisrCSAgICAgKiBUaGUgZ2V0aG9zdGJ5YWRkcigpIGFuZCBnZXRob3N0YnluYW1lKCkgY2FsbHMgZGlkIG5vdCByZXR1cm4KKysJICAgICAqIHRoZSBzYW1lIGhvc3RuYW1lLiBUaGlzIGNvdWxkIGJlIGEgbmFtZXNlcnZlciBjb25maWd1cmF0aW9uCisrCSAgICAgKiBwcm9ibGVtLiBJdCBjb3VsZCBhbHNvIGJlIHRoYXQgc29tZW9uZSBpcyB0cnlpbmcgdG8gc3Bvb2YgdXMuCisrCSAgICAgKi8KKysKKysJICAgIHRjcGRfd2FybigiaG9zdCBuYW1lL25hbWUgbWlzbWF0Y2g6ICVzICE9ICUuKnMiLAorKwkJICAgICAgaG9zdC0+bmFtZSwgU1RSSU5HX0xFTkdUSCwKKysJCSAgICAgIChyZXMwLT5haV9jYW5vbm5hbWUgPT0gTlVMTCkgPyAiIiA6IHJlczAtPmFpX2Nhbm9ubmFtZSk7CisrCisrCX0gZWxzZSB7CisrCisrCSAgICAvKgorKwkgICAgICogVGhlIGFkZHJlc3Mgc2hvdWxkIGJlIGEgbWVtYmVyIG9mIHRoZSBhZGRyZXNzIGxpc3QgcmV0dXJuZWQgYnkKKysJICAgICAqIGdldGhvc3RieW5hbWUoKS4gV2Ugc2hvdWxkIGZpcnN0IHZlcmlmeSB0aGF0IHRoZSBoX2FkZHJ0eXBlCisrCSAgICAgKiBmaWVsZCBpcyBBRl9JTkVULCBidXQgdGhpcyBwcm9ncmFtIGhhcyBhbHJlYWR5IGNhdXNlZCB0b28gbXVjaAorKwkgICAgICogZ3JpZWYgb24gc3lzdGVtcyB3aXRoIGJyb2tlbiBsaWJyYXJ5IGNvZGUuCisrCSAgICAgKi8KKysKKysJICAgIGZvciAocmVzID0gcmVzMDsgcmVzOyByZXMgPSByZXMtPmFpX25leHQpIHsKKysJCWlmIChyZXMtPmFpX2ZhbWlseSAhPSBzaW4tPnNhX2ZhbWlseSkKKysJCSAgICBjb250aW51ZTsKKysJCXN3aXRjaCAocmVzLT5haV9mYW1pbHkpIHsKKysJCWNhc2UgQUZfSU5FVDoKKysJCSAgICByYXAgPSAoY2hhciAqKSYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXJlcy0+YWlfYWRkciktPnNpbl9hZGRyOworKwkJICAgIGJyZWFrOworKwkJY2FzZSBBRl9JTkVUNjoKKysJCSAgICAvKiBuZWVkIHRvIGNoZWNrIHNjb3BlX2lkICovCisrCQkgICAgaWYgKCgoc3RydWN0IHNvY2thZGRyX2luNiAqKXNpbiktPnNpbjZfc2NvcGVfaWQgIT0KKysJCSAgICAgICAgKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopcmVzLT5haV9hZGRyKS0+c2luNl9zY29wZV9pZCkgeworKwkJCWNvbnRpbnVlOworKwkJICAgIH0KKysJCSAgICByYXAgPSAoY2hhciAqKSYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilyZXMtPmFpX2FkZHIpLT5zaW42X2FkZHI7CisrCQkgICAgYnJlYWs7CisrCQlkZWZhdWx0OgorKwkJICAgIGNvbnRpbnVlOworKwkJfQorKwkJaWYgKG1lbWNtcChyYXAsIGFwLCBhbGVuKSA9PSAwKSB7CisrCQkgICAgZnJlZWFkZHJpbmZvKHJlczApOworKwkJICAgIHJldHVybjsJCQkvKiBuYW1lIGlzIGdvb2QsIGtlZXAgaXQgKi8KKysJCX0KKysJICAgIH0KKysKKysJICAgIC8qCisrCSAgICAgKiBUaGUgaG9zdCBuYW1lIGRvZXMgbm90IG1hcCB0byB0aGUgaW5pdGlhbCBhZGRyZXNzLiBQZXJoYXBzCisrCSAgICAgKiBzb21lb25lIGhhcyBtZXNzZWQgdXAuIFBlcmhhcHMgc29tZW9uZSBjb21wcm9taXNlZCBhIG5hbWUKKysJICAgICAqIHNlcnZlci4KKysJICAgICAqLworKworKwkgICAgZ2V0bmFtZWluZm8oc2luLCBzYWxlbiwgaG5hbWUsIHNpemVvZihobmFtZSksCisrCQkJTlVMTCwgMCwgTklfTlVNRVJJQ0hPU1QgfCBOSV9XSVRIU0NPUEVJRCk7CisrCSAgICB0Y3BkX3dhcm4oImhvc3QgbmFtZS9hZGRyZXNzIG1pc21hdGNoOiAlcyAhPSAlLipzIiwKKysJCSAgICAgIGhuYW1lLCBTVFJJTkdfTEVOR1RILAorKwkJICAgICAgKHJlczAtPmFpX2Nhbm9ubmFtZSA9PSBOVUxMKSA/ICIiIDogcmVzMC0+YWlfY2Fub25uYW1lKTsKKysJfQorKwlzdHJjcHkoaG9zdC0+bmFtZSwgcGFyYW5vaWQpOwkJLyogbmFtZSBpcyBiYWQsIGNsb2JiZXIgaXQgKi8KKysJaWYgKHJlczApCisrCSAgICBmcmVlYWRkcmluZm8ocmVzMCk7CisrICAgIH0KKysjZWxzZSAvKiBJTkVUNiAqLworICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IGhvc3QtPnNpbjsKKyAgICAgc3RydWN0IGhvc3RlbnQgKmhwOworICAgICBpbnQgICAgIGk7CitAQCAtMjIwLDYgKzQxMiw3IEBACisgCX0KKyAJc3RyY3B5KGhvc3QtPm5hbWUsIHBhcmFub2lkKTsJCS8qIG5hbWUgaXMgYmFkLCBjbG9iYmVyIGl0ICovCisgICAgIH0KKysjZW5kaWYgLyogSU5FVDYgKi8KKyB9CisgCisgLyogc29ja19zaW5rIC0gYWJzb3JiIHVucmVjZWl2ZWQgSVAgZGF0YWdyYW0gKi8KK0BAIC0yMjgsNyArNDIxLDExIEBACisgaW50ICAgICBmZDsKKyB7CisgICAgIGNoYXIgICAgYnVmW0JVRlNJWl07CisrI2lmZGVmIElORVQ2CisrICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNpbjsKKysjZWxzZQorICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworKyNlbmRpZgorICAgICBpbnQgICAgIHNpemUgPSBzaXplb2Yoc2luKTsKKyAKKyAgICAgLyoKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZC5jIHRjcF93cmFwcGVyc183LjYvdGNwZC5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGQuYwkxOTk2LTAyLTExIDE3OjAxOjMzLjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZC5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtMTIwLDcgKzEyMCwxMiBAQAorIAorICAgICAvKiBSZXBvcnQgcmVxdWVzdCBhbmQgaW52b2tlIHRoZSByZWFsIGRhZW1vbiBwcm9ncmFtLiAqLworIAorKyNpZmRlZiBJTkVUNgorKyAgICBzeXNsb2coYWxsb3dfc2V2ZXJpdHksICJjb25uZWN0IGZyb20gJXMgKCVzKSIsCisrCSAgIGV2YWxfY2xpZW50KCZyZXF1ZXN0KSwgZXZhbF9ob3N0YWRkcihyZXF1ZXN0LmNsaWVudCkpOworKyNlbHNlCisgICAgIHN5c2xvZyhhbGxvd19zZXZlcml0eSwgImNvbm5lY3QgZnJvbSAlcyIsIGV2YWxfY2xpZW50KCZyZXF1ZXN0KSk7CisrI2VuZGlmCisgICAgIGNsb3NlbG9nKCk7CisgICAgICh2b2lkKSBleGVjdihwYXRoLCBhcmd2KTsKKyAgICAgc3lzbG9nKExPR19FUlIsICJlcnJvcjogY2Fubm90IGV4ZWN1dGUgJXM6ICVtIiwgcGF0aCk7CitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRjaGsuYyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRjaGsuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkY2hrLmMJMTk5Ny0wMi0xMiAwMjoxMzoyNS4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRjaGsuYwkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTIyLDYgKzIyLDkgQEAKKyAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrI2lmZGVmIElORVQ2CisrI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KK0BAIC0zOTcsNiArNDAwLDMxIEBACisgICAgIH0KKyB9CisgCisrI2lmZGVmIElORVQ2Cisrc3RhdGljIGludCBpc19pbmV0Nl9hZGRyKHBhdCkKKysgICAgY2hhciAqcGF0OworK3sKKysgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqcmVzOworKyAgICBpbnQgbGVuLCByZXQ7CisrICAgIGNoYXIgY2g7CisrCisrICAgIGlmICgqcGF0ICE9ICdbJykKKysJcmV0dXJuICgwKTsKKysgICAgbGVuID0gc3RybGVuKHBhdCk7CisrICAgIGlmICgoY2ggPSBwYXRbbGVuIC0gMV0pICE9ICddJykKKysJcmV0dXJuICgwKTsKKysgICAgcGF0W2xlbiAtIDFdID0gJ1wwJzsKKysgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisrICAgIGhpbnRzLmFpX2ZhbWlseSA9IEFGX0lORVQ2OworKyAgICBoaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworKyAgICBoaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkUgfCBBSV9OVU1FUklDSE9TVDsKKysgICAgaWYgKChyZXQgPSBnZXRhZGRyaW5mbyhwYXQgKyAxLCBOVUxMLCAmaGludHMsICZyZXMpKSA9PSAwKQorKwlmcmVlYWRkcmluZm8ocmVzKTsKKysgICAgcGF0W2xlbiAtIDFdID0gY2g7CisrICAgIHJldHVybiAocmV0ID09IDApOworK30KKysjZW5kaWYKKysKKyAvKiBjaGVja19ob3N0IC0gY3JpdGljaXplIGhvc3QgcGF0dGVybiAqLworIAorIHN0YXRpYyBpbnQgY2hlY2tfaG9zdChwYXQpCitAQCAtNDIzLDE0ICs0NTEsMjcgQEAKKyAjZW5kaWYKKyAjZW5kaWYKKyAgICAgfSBlbHNlIGlmIChtYXNrID0gc3BsaXRfYXQocGF0LCAnLycpKSB7CS8qIG5ldHdvcmsvbmV0bWFzayAqLworKyNpZmRlZiBJTkVUNgorKwlpbnQgbWFza19sZW47CisrCisrCWlmICgoZG90X3F1YWRfYWRkcihwYXQpID09IElOQUREUl9OT05FCisrCSAgICB8fCBkb3RfcXVhZF9hZGRyKG1hc2spID09IElOQUREUl9OT05FKQorKwkgICAgJiYgKCFpc19pbmV0Nl9hZGRyKHBhdCkKKysJCXx8ICgobWFza19sZW4gPSBhdG9pKG1hc2spKSA8IDAgfHwgbWFza19sZW4gPiAxMjgpKSkKKysjZWxzZQorIAlpZiAoZG90X3F1YWRfYWRkcihwYXQpID09IElOQUREUl9OT05FCisgCSAgICB8fCBkb3RfcXVhZF9hZGRyKG1hc2spID09IElOQUREUl9OT05FKQorKyNlbmRpZgorIAkgICAgdGNwZF93YXJuKCIlcy8lczogYmFkIG5ldC9tYXNrIHBhdHRlcm4iLCBwYXQsIG1hc2spOworICAgICB9IGVsc2UgaWYgKFNUUl9FUShwYXQsICJGQUlMIikpIHsJCS8qIG9ic29sZXRlICovCisgCXRjcGRfd2FybigiRkFJTCBpcyBubyBsb25nZXIgcmVjb2duaXplZCIpOworIAl0Y3BkX3dhcm4oIih1c2UgRVhDRVBUIG9yIERFTlkgaW5zdGVhZCkiKTsKKyAgICAgfSBlbHNlIGlmIChyZXNlcnZlZF9uYW1lKHBhdCkpIHsJCS8qIG90aGVyIHJlc2VydmVkICovCisgCSAvKiB2b2lkICovIDsKKysjaWZkZWYgSU5FVDYKKysgICAgfSBlbHNlIGlmIChpc19pbmV0Nl9hZGRyKHBhdCkpIHsgLyogSVB2NiBhZGRyZXNzICovCisrCWFkZHJfY291bnQgPSAxOworKyNlbmRpZgorICAgICB9IGVsc2UgaWYgKE5PVF9JTkFERFIocGF0KSkgewkJLyogaW50ZXJuZXQgbmFtZSAqLworIAlpZiAocGF0W3N0cmxlbihwYXQpIC0gMV0gPT0gJy4nKSB7CisgCSAgICB0Y3BkX3dhcm4oIiVzOiBkb21haW4gb3IgaG9zdCBuYW1lIGVuZHMgaW4gZG90IiwgcGF0KTsKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZC5oIHRjcF93cmFwcGVyc183LjYvdGNwZC5oCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGQuaAkxOTk2LTAzLTE5IDE2OjIyOjI1LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZC5oCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtMTEsNyArMTEsMTEgQEAKKyBzdHJ1Y3QgaG9zdF9pbmZvIHsKKyAgICAgY2hhciAgICBuYW1lW1NUUklOR19MRU5HVEhdOwkvKiBhY2Nlc3MgdmlhIGV2YWxfaG9zdG5hbWUoaG9zdCkgKi8KKyAgICAgY2hhciAgICBhZGRyW1NUUklOR19MRU5HVEhdOwkvKiBhY2Nlc3MgdmlhIGV2YWxfaG9zdGFkZHIoaG9zdCkgKi8KKysjaWZkZWYgSU5FVDYKKysgICAgc3RydWN0IHNvY2thZGRyICpzaW47CQkvKiBzb2NrZXQgYWRkcmVzcyBvciAwICovCisrI2Vsc2UKKyAgICAgc3RydWN0IHNvY2thZGRyX2luICpzaW47CQkvKiBzb2NrZXQgYWRkcmVzcyBvciAwICovCisrI2VuZGlmCisgICAgIHN0cnVjdCB0X3VuaXRkYXRhICp1bml0OwkJLyogVExJIHRyYW5zcG9ydCBhZGRyZXNzIG9yIDAgKi8KKyAgICAgc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdDsJLyogZm9yIHNoYXJlZCBpbmZvcm1hdGlvbiAqLworIH07CitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRtYXRjaC5jIHRjcF93cmFwcGVyc183LjYvdGNwZG1hdGNoLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZG1hdGNoLmMJMTk5Ni0wMi0xMSAxNzowMTozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRtYXRjaC5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtNTcsNyArNTcsMTEgQEAKKyBpbnQgICAgIGFyZ2M7CisgY2hhciAgKiphcmd2OworIHsKKysjaWZkZWYgSU5FVDYKKysgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqaHAsICpyZXM7CisrI2Vsc2UKKyAgICAgc3RydWN0IGhvc3RlbnQgKmhwOworKyNlbmRpZgorICAgICBjaGFyICAgKm15bmFtZSA9IGFyZ3ZbMF07CisgICAgIGNoYXIgICAqY2xpZW50OworICAgICBjaGFyICAgKnNlcnZlcjsKK0BAIC02OCw4ICs3MiwxMyBAQAorICAgICBpbnQgICAgIGNoOworICAgICBjaGFyICAgKmluZXRjZiA9IDA7CisgICAgIGludCAgICAgY291bnQ7CisrI2lmZGVmIElORVQ2CisrICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNlcnZlcl9zaW47CisrICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGNsaWVudF9zaW47CisrI2Vsc2UKKyAgICAgc3RydWN0IHNvY2thZGRyX2luIHNlcnZlcl9zaW47CisgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBjbGllbnRfc2luOworKyNlbmRpZgorICAgICBzdHJ1Y3Qgc3RhdCBzdDsKKyAKKyAgICAgLyoKK0BAIC0xNzIsMTMgKzE4MSwyMCBAQAorICAgICBpZiAoTk9UX0lOQUREUihzZXJ2ZXIpID09IDAgfHwgSE9TVE5BTUVfS05PV04oc2VydmVyKSkgeworIAlpZiAoKGhwID0gZmluZF9pbmV0X2FkZHIoc2VydmVyKSkgPT0gMCkKKyAJICAgIGV4aXQoMSk7CisrI2lmbmRlZiBJTkVUNgorIAltZW1zZXQoKGNoYXIgKikgJnNlcnZlcl9zaW4sIDAsIHNpemVvZihzZXJ2ZXJfc2luKSk7CisgCXNlcnZlcl9zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisrI2VuZGlmCisgCXJlcXVlc3Rfc2V0KCZyZXF1ZXN0LCBSUV9TRVJWRVJfU0lOLCAmc2VydmVyX3NpbiwgMCk7CisgCisrI2lmZGVmIElORVQ2CisrCWZvciAocmVzID0gaHAsIGNvdW50ID0gMDsgcmVzOyByZXMgPSByZXMtPmFpX25leHQsIGNvdW50KyspIHsKKysJICAgIG1lbWNweSgmc2VydmVyX3NpbiwgcmVzLT5haV9hZGRyLCByZXMtPmFpX2FkZHJsZW4pOworKyNlbHNlCisgCWZvciAoY291bnQgPSAwOyAoYWRkciA9IGhwLT5oX2FkZHJfbGlzdFtjb3VudF0pICE9IDA7IGNvdW50KyspIHsKKyAJICAgIG1lbWNweSgoY2hhciAqKSAmc2VydmVyX3Npbi5zaW5fYWRkciwgYWRkciwKKyAJCSAgIHNpemVvZihzZXJ2ZXJfc2luLnNpbl9hZGRyKSk7CisrI2VuZGlmCisgCisgCSAgICAvKgorIAkgICAgICogRm9yY2UgZXZhbHVhdGlvbiBvZiBzZXJ2ZXIgaG9zdCBuYW1lIGFuZCBhZGRyZXNzLiBIb3N0IG5hbWUKK0BAIC0xOTQsNyArMjEwLDExIEBACisgCSAgICBmcHJpbnRmKHN0ZGVyciwgIlBsZWFzZSBzcGVjaWZ5IGFuIGFkZHJlc3MgaW5zdGVhZFxuIik7CisgCSAgICBleGl0KDEpOworIAl9CisrI2lmZGVmIElORVQ2CisrCWZyZWVhZGRyaW5mbyhocCk7CisrI2Vsc2UKKyAJZnJlZSgoY2hhciAqKSBocCk7CisrI2VuZGlmCisgICAgIH0gZWxzZSB7CisgCXJlcXVlc3Rfc2V0KCZyZXF1ZXN0LCBSUV9TRVJWRVJfTkFNRSwgc2VydmVyLCAwKTsKKyAgICAgfQorQEAgLTIwOCw2ICsyMjgsMTggQEAKKyAJdGNwZG1hdGNoKCZyZXF1ZXN0KTsKKyAJZXhpdCgwKTsKKyAgICAgfQorKyNpZmRlZiBJTkVUNgorKyAgICBtZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKysgICAgaGludHMuYWlfZmFtaWx5ID0gQUZfSU5FVDY7CisrICAgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisrICAgIGhpbnRzLmFpX2ZsYWdzID0gQUlfUEFTU0lWRSB8IEFJX05VTUVSSUNIT1NUOworKyAgICBpZiAoZ2V0YWRkcmluZm8oY2xpZW50LCBOVUxMLCAmaGludHMsICZyZXMpID09IDApIHsKKysJZnJlZWFkZHJpbmZvKHJlcyk7CisrCXJlcXVlc3Rfc2V0KCZyZXF1ZXN0LCBSUV9DTElFTlRfQUREUiwgY2xpZW50LCAwKTsKKysJdGNwZG1hdGNoKCZyZXF1ZXN0KTsKKysJZXhpdCgwKTsKKysgICAgfQorKyNlbmRpZgorIAorICAgICAvKgorICAgICAgKiBQZXJoYXBzIHRoZXkgYXJlIHRlc3Rpbmcgc3BlY2lhbCBjbGllbnQgaG9zdG5hbWUgcGF0dGVybnMgdGhhdCBhcmVuJ3QKK0BAIC0yMjksNiArMjYxLDM0IEBACisgICAgICAqLworICAgICBpZiAoKGhwID0gZmluZF9pbmV0X2FkZHIoY2xpZW50KSkgPT0gMCkKKyAJZXhpdCgxKTsKKysjaWZkZWYgSU5FVDYKKysgICAgcmVxdWVzdF9zZXQoJnJlcXVlc3QsIFJRX0NMSUVOVF9TSU4sICZjbGllbnRfc2luLCAwKTsKKysKKysgICAgZm9yIChyZXMgPSBocCwgY291bnQgPSAwOyByZXM7IHJlcyA9IHJlcy0+YWlfbmV4dCwgY291bnQrKykgeworKwltZW1jcHkoJmNsaWVudF9zaW4sIHJlcy0+YWlfYWRkciwgcmVzLT5haV9hZGRybGVuKTsKKysKKysJLyoKKysJICogZ2V0bmFtZWluZm8oKSBkb2Vzbid0IGRvIHJldmVyc2UgbG9va3VwIGFnYWluc3QgbGluay1sb2NhbAorKwkgKiBhZGRyZXNzLiAgU28sIHdlIHBhc3MgdGhyb3VnaCBob3N0IG5hbWUgZXZhbHVhdGlvbiBhZ2FpbnN0CisrCSAqIHN1Y2ggYWRkcmVzc2VzLgorKwkgKi8KKysJaWYgKHJlcy0+YWlfZmFtaWx5ICE9IEFGX0lORVQ2IHx8CisrCSAgICAhSU42X0lTX0FERFJfTElOS0xPQ0FMKCYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilyZXMtPmFpX2FkZHIpLT5zaW42X2FkZHIpKSB7CisrCSAgICAvKgorKwkgICAgICogRm9yY2UgZXZhbHVhdGlvbiBvZiBjbGllbnQgaG9zdCBuYW1lIGFuZCBhZGRyZXNzLiBIb3N0IG5hbWUKKysJICAgICAqIGNvbmZsaWN0cyB3aWxsIGJlIHJlcG9ydGVkIHdoaWxlIGV2YWxfaG9zdG5hbWUoKSBkb2VzIGl0cyBqb2IuCisrCSAgICAgKi8KKysJICAgIHJlcXVlc3Rfc2V0KCZyZXF1ZXN0LCBSUV9DTElFTlRfTkFNRSwgIiIsIFJRX0NMSUVOVF9BRERSLCAiIiwgMCk7CisrCSAgICBpZiAoU1RSX0VRKGV2YWxfaG9zdG5hbWUocmVxdWVzdC5jbGllbnQpLCB1bmtub3duKSkKKysJCXRjcGRfd2FybigiaG9zdCBhZGRyZXNzICVzLT5uYW1lIGxvb2t1cCBmYWlsZWQiLAorKwkJCSAgZXZhbF9ob3N0YWRkcihyZXF1ZXN0LmNsaWVudCkpOworKwl9CisrCXRjcGRtYXRjaCgmcmVxdWVzdCk7CisrCWlmIChyZXMtPmFpX25leHQpCisrCSAgICBwcmludGYoIlxuIik7CisrICAgIH0KKysgICAgZnJlZWFkZHJpbmZvKGhwKTsKKysjZWxzZQorICAgICBtZW1zZXQoKGNoYXIgKikgJmNsaWVudF9zaW4sIDAsIHNpemVvZihjbGllbnRfc2luKSk7CisgICAgIGNsaWVudF9zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgIHJlcXVlc3Rfc2V0KCZyZXF1ZXN0LCBSUV9DTElFTlRfU0lOLCAmY2xpZW50X3NpbiwgMCk7CitAQCAtMjUwLDYgKzMxMCw3IEBACisgCSAgICBwcmludGYoIlxuIik7CisgICAgIH0KKyAgICAgZnJlZSgoY2hhciAqKSBocCk7CisrI2VuZGlmCisgICAgIGV4aXQoMCk7CisgfQorIAorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy90bGkuYyB0Y3Bfd3JhcHBlcnNfNy42L3RsaS5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RsaS5jCTE5OTctMDMtMjEgMTk6Mjc6MjYuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90bGkuYwkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTY1LDggKzY1LDEzIEBACisgdm9pZCAgICB0bGlfaG9zdChyZXF1ZXN0KQorIHN0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3Q7CisgeworKyNpZmRlZiBJTkVUNgorKyAgICBzdGF0aWMgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgY2xpZW50OworKyAgICBzdGF0aWMgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc2VydmVyOworKyNlbHNlCisgICAgIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW4gY2xpZW50OworICAgICBzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luIHNlcnZlcjsKKysjZW5kaWYKKyAKKyAgICAgLyoKKyAgICAgICogSWYgd2UgZGlzY292ZXIgdGhhdCB3ZSBhcmUgdXNpbmcgYW4gSVAgdHJhbnNwb3J0LCBwcmV0ZW5kIHdlIG5ldmVyCitAQCAtNzYsMTQgKzgxLDI5IEBACisgCisgICAgIHRsaV9lbmRwb2ludHMocmVxdWVzdCk7CisgICAgIGlmICgocmVxdWVzdC0+Y29uZmlnID0gdGxpX3RyYW5zcG9ydChyZXF1ZXN0LT5mZCkpICE9IDAKKysjaWZkZWYgSU5FVDYKKysJJiYgKFNUUl9FUShyZXF1ZXN0LT5jb25maWctPm5jX3Byb3RvZm1seSwgImluZXQiKSB8fAorKwkgICAgU1RSX0VRKHJlcXVlc3QtPmNvbmZpZy0+bmNfcHJvdG9mbWx5LCAiaW5ldDYiKSkpIHsKKysjZWxzZQorIAkmJiBTVFJfRVEocmVxdWVzdC0+Y29uZmlnLT5uY19wcm90b2ZtbHksICJpbmV0IikpIHsKKysjZW5kaWYKKyAJaWYgKHJlcXVlc3QtPmNsaWVudC0+dW5pdCAhPSAwKSB7CisrI2lmZGVmIElORVQ2CisrCSAgICBjbGllbnQgPSAqKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICopIHJlcXVlc3QtPmNsaWVudC0+dW5pdC0+YWRkci5idWY7CisrCSAgICByZXF1ZXN0LT5jbGllbnQtPnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgJmNsaWVudDsKKysjZWxzZQorIAkgICAgY2xpZW50ID0gKihzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgcmVxdWVzdC0+Y2xpZW50LT51bml0LT5hZGRyLmJ1ZjsKKyAJICAgIHJlcXVlc3QtPmNsaWVudC0+c2luID0gJmNsaWVudDsKKysjZW5kaWYKKyAJfQorIAlpZiAocmVxdWVzdC0+c2VydmVyLT51bml0ICE9IDApIHsKKysjaWZkZWYgSU5FVDYKKysJICAgIHNlcnZlciA9ICooc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKikgcmVxdWVzdC0+c2VydmVyLT51bml0LT5hZGRyLmJ1ZjsKKysJICAgIHJlcXVlc3QtPnNlcnZlci0+c2luID0gKHN0cnVjdCBzb2NrYWRkciAqKSAmc2VydmVyOworKyNlbHNlCisgCSAgICBzZXJ2ZXIgPSAqKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSByZXF1ZXN0LT5zZXJ2ZXItPnVuaXQtPmFkZHIuYnVmOworIAkgICAgcmVxdWVzdC0+c2VydmVyLT5zaW4gPSAmc2VydmVyOworKyNlbmRpZgorIAl9CisgCXRsaV9jbGVhbnVwKHJlcXVlc3QpOworIAlzb2NrX21ldGhvZHMocmVxdWVzdCk7CitAQCAtMTg3LDcgKzIwNywxNSBAQAorICAgICB9CisgICAgIHdoaWxlIChjb25maWcgPSBnZXRuZXRjb25maWcoaGFuZGxlcCkpIHsKKyAJaWYgKHN0YXQoY29uZmlnLT5uY19kZXZpY2UsICZmcm9tX2NvbmZpZykgPT0gMCkgeworKyNpZmRlZiBOT19DTE9ORV9ERVZJQ0UKKysJLyoKKysJICogSWYgdGhlIG5ldHdvcmsgZGV2aWNlcyBhcmUgbm90IGNsb25lZCAoYXMgaXMgdGhlIGNhc2UgZm9yCisrCSAqIFNvbGFyaXMgOCBCZXRhKSwgd2UgbXVzdCBjb21wYXJlIHRoZSBtYWpvciBkZXZpY2UgbnVtYmVycy4KKysJICovCisrCSAgICBpZiAobWFqb3IoZnJvbV9jb25maWcuc3RfcmRldikgPT0gbWFqb3IoZnJvbV9jbGllbnQuc3RfcmRldikpCisrI2Vsc2UKKyAJICAgIGlmIChtaW5vcihmcm9tX2NvbmZpZy5zdF9yZGV2KSA9PSBtYWpvcihmcm9tX2NsaWVudC5zdF9yZGV2KSkKKysjZW5kaWYKKyAJCWJyZWFrOworIAl9CisgICAgIH0KK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdXBkYXRlLmMgdGNwX3dyYXBwZXJzXzcuNi91cGRhdGUuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy91cGRhdGUuYwkxOTk0LTEyLTI4IDE3OjQyOjU2LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvdXBkYXRlLmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC00NiwxMCArNDYsMTggQEAKKyAJICAgIHJlcXVlc3QtPmZkID0gdmFfYXJnKGFwLCBpbnQpOworIAkgICAgY29udGludWU7CisgCWNhc2UgUlFfQ0xJRU5UX1NJTjoKKysjaWZkZWYgSU5FVDYKKysJICAgIHJlcXVlc3QtPmNsaWVudC0+c2luID0gdmFfYXJnKGFwLCBzdHJ1Y3Qgc29ja2FkZHIgKik7CisrI2Vsc2UKKyAJICAgIHJlcXVlc3QtPmNsaWVudC0+c2luID0gdmFfYXJnKGFwLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKik7CisrI2VuZGlmCisgCSAgICBjb250aW51ZTsKKyAJY2FzZSBSUV9TRVJWRVJfU0lOOgorKyNpZmRlZiBJTkVUNgorKwkgICAgcmVxdWVzdC0+c2VydmVyLT5zaW4gPSB2YV9hcmcoYXAsIHN0cnVjdCBzb2NrYWRkciAqKTsKKysjZWxzZQorIAkgICAgcmVxdWVzdC0+c2VydmVyLT5zaW4gPSB2YV9hcmcoYXAsIHN0cnVjdCBzb2NrYWRkcl9pbiAqKTsKKysjZW5kaWYKKyAJICAgIGNvbnRpbnVlOworIAorIAkgICAgLyoKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvd29ya2Fyb3VuZHMuYyB0Y3Bfd3JhcHBlcnNfNy42L3dvcmthcm91bmRzLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvd29ya2Fyb3VuZHMuYwkxOTk2LTAzLTE5IDE2OjIyOjI2LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvd29ya2Fyb3VuZHMuYwkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTE2NiwxMSArMTY2LDIyIEBACisgaW50ICAgICpsZW47CisgeworICAgICBpbnQgICAgIHJldDsKKysjaWZkZWYgSU5FVDYKKysgICAgc3RydWN0IHNvY2thZGRyICpzaW4gPSBzYTsKKysjZWxzZQorICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgc2E7CisrI2VuZGlmCisgCisgICAgIGlmICgocmV0ID0gZ2V0cGVlcm5hbWUoc29jaywgc2EsIGxlbikpID49IDAKKysjaWZkZWYgSU5FVDYKKysJJiYgKChzaW4tPnN1X3NpLnNpX2ZhbWlseSA9PSBBRl9JTkVUNgorKwkgICAgICYmIElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzaW4tPnN1X3NpbjYuc2luNl9hZGRyKSkKKysJICAgIHx8IChzaW4tPnN1X3NpLnNpX2ZhbWlseSA9PSBBRl9JTkVUCisrCQkmJiBzaW4tPnN1X3Npbi5zaW5fYWRkci5zX2FkZHIgPT0gMCkpKSB7CisrI2Vsc2UKKyAJJiYgc2EtPnNhX2ZhbWlseSA9PSBBRl9JTkVUCisgCSYmIHNpbi0+c2luX2FkZHIuc19hZGRyID09IDApIHsKKysjZW5kaWYKKyAJZXJybm8gPSBFTk9UQ09OTjsKKyAJcmV0dXJuICgtMSk7CisgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMV90Y3BkX2JsYWNrbGlzdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzExX3RjcGRfYmxhY2tsaXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNjEwNmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMV90Y3BkX2JsYWNrbGlzdC5wYXRjaApAQCAtMCwwICsxLDE1MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitQYXRoOiBuZXdzLnBvcmN1cGluZS5vcmchbmV3cy5wb3JjdXBpbmUub3JnIW5vdC1mb3ItbWFpbAorRnJvbTogV2lldHNlIFZlbmVtYSA8d2lldHNlQCgobm8pKHNwYW0pKHBsZWFzZSkpd3p2Lndpbi50dWUubmw+CitOZXdzZ3JvdXBzOiBjb21wLm1haWwuc2VuZG1haWwsY29tcC5zZWN1cml0eS51bml4CitTdWJqZWN0OiBUQ1AgV3JhcHBlciBCbGFja2xpc3QgRXh0ZW5zaW9uCitGb2xsb3d1cC1UbzogcG9zdGVyCitEYXRlOiA4IFNlcCAxOTk3IDE4OjUzOjEzIC0wNDAwCitPcmdhbml6YXRpb246IFdpZXRzZSdzIGhhbmdvdXQgd2hpbGUgb24gc2FiYXR0aWNhbCBpbiB0aGUgVVNBCitMaW5lczogMTQ3CitTZW5kZXI6IHdpZXRzZUBzcGlrZS5wb3JjdXBpbmUub3JnCitNZXNzYWdlLUlEOiA8NXYxdmtwJGg0ZiQxQHNwaWtlLnBvcmN1cGluZS5vcmc+CitOTlRQLVBvc3RpbmctSG9zdDogc3Bpa2UucG9yY3VwaW5lLm9yZworWHJlZjogbmV3cy5wb3JjdXBpbmUub3JnIGNvbXAubWFpbC5zZW5kbWFpbDozNTQxIGNvbXAuc2VjdXJpdHkudW5peDo3MTU4CisKK1RoZSBwYXRjaCBiZWxvdyBhZGRzIGEgbmV3IGhvc3QgcGF0dGVybiB0byB0aGUgVENQIFdyYXBwZXIgYWNjZXNzCitjb250cm9sIGxhbmd1YWdlLiBJbnN0ZWFkIG9mIGEgaG9zdCBuYW1lIG9yIGFkZHJlc3MgcGF0dGVybiwgeW91CitjYW4gc3BlY2lmeSBhbiBleHRlcm5hbCAvZmlsZS9uYW1lIHdpdGggaG9zdCBuYW1lIG9yIGFkZHJlc3MKK3BhdHRlcm5zLiAgIFRoZSBmZWF0dXJlIGNhbiBiZSB1c2VkIHJlY3Vyc2l2ZWx5LgorCitUaGUgL2ZpbGUvbmFtZSBleHRlbnNpb24gbWFrZXMgaXQgZWFzeSB0byBibGFja2xpc3QgYmFkIHNpdGVzLCBmb3IKK2V4YW1wbGUsIHRvIGJsb2NrIHVud2FudGVkIGVsZWN0cm9uaWMgbWFpbCB3aGVuIGxpYndyYXAgaXMgbGlua2VkCitpbnRvIHNlbmRtYWlsLiAgQWRkaW5nIGhvc3RzIHRvIGEgc2ltcGxlIHRleHQgZmlsZSBpcyBtdWNoIGVhc2llcgordGhhbiBoYXZpbmcgdG8gZWRpdCBhIG1vcmUgY29tcGxleCBob3N0cy5hbGxvdy9kZW55IGZpbGUuCisKK0kgZGV2ZWxvcGVkIHRoaXMgYSB5ZWFyIG9yIHNvIGFnbyBhcyBhIHN1YnN0aXR1dGUgZm9yIE5JUyBuZXRncm91cHMuCitBdCB0aGF0IHRpbWUsIEkgZGlkIG5vdCBjb25zaWRlciBpdCBvZiBzdWZmaWNpZW50IGludGVyZXN0IGZvcgoraW5jbHVzaW9uIGluIHRoZSBUQ1AgV3JhcHBlciBkaXN0cmlidXRpb24uIEhvdyB0aW1lcyBoYXZlIGNoYW5nZWQuCisKK1RoZSBwYXRjaCBpcyByZWxhdGl2ZSB0byBUQ1AgV3JhcHBlcnMgdmVyc2lvbiA3LjYuIFRoZSBtYWluIGFyY2hpdmUKK3NpdGUgaXMgZnRwOi8vZnRwLndpbi50dWUubmwvcHViL3NlY3VyaXR5L3RjcF93cmFwcGVyc183LjYudGFyLmd6CisKK1RoYW5rcyB0byB0aGUgRGViaWFuIExJTlVYIGZvbGtzIGZvciBleHByZXNzaW5nIHRoZWlyIGludGVyZXN0IGluCit0aGlzIHBhdGNoLgorCisJV2lldHNlCisKKworW2RpZmYgdXBkYXRlZCBieSBNZF0KKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNSB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41CTIwMDQtMDQtMTAgMTk6Mjg6MDkuMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQkyMDA0LTA0LTEwIDE5OjI4OjAxLjAwMDAwMDAwMCArMDIwMAorQEAgLTk3LDYgKzk3LDEzIEBACisgYFszZmZlOjUwNToyOjE6Ol0vNjRcJyBtYXRjaGVzIGV2ZXJ5IGFkZHJlc3MgaW4gdGhlIHJhbmdlCisgYDNmZmU6NTA1OjI6MTo6XCcgdGhyb3VnaCBgM2ZmZTo1MDU6MjoxOmZmZmY6ZmZmZjpmZmZmOmZmZmZcJy4KKyAuSVAgXChidQorK0Egc3RyaW5nIHRoYXQgYmVnaW5zIHdpdGggYSBgL1wnIGNoYXJhY3RlciBpcyB0cmVhdGVkIGFzIGEgZmlsZQorK25hbWUuIEEgaG9zdCBuYW1lIG9yIGFkZHJlc3MgaXMgbWF0Y2hlZCBpZiBpdCBtYXRjaGVzIGFueSBob3N0IG5hbWUKKytvciBhZGRyZXNzIHBhdHRlcm4gbGlzdGVkIGluIHRoZSBuYW1lZCBmaWxlLiBUaGUgZmlsZSBmb3JtYXQgaXMKKyt6ZXJvIG9yIG1vcmUgbGluZXMgd2l0aCB6ZXJvIG9yIG1vcmUgaG9zdCBuYW1lIG9yIGFkZHJlc3MgcGF0dGVybnMKKytzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gIEEgZmlsZSBuYW1lIHBhdHRlcm4gY2FuIGJlIHVzZWQgYW55d2hlcmUKKythIGhvc3QgbmFtZSBvciBhZGRyZXNzIHBhdHRlcm4gY2FuIGJlIHVzZWQuCisrLklQIFwoYnUKKyBXaWxkY2FyZHMgYCpcJyBhbmQgYD9cJyBjYW4gYmUgdXNlZCB0byBtYXRjaCBob3N0bmFtZXMgb3IgSVAgYWRkcmVzc2VzLiAgVGhpcworIG1ldGhvZCBvZiBtYXRjaGluZyBjYW5ub3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBuZXQvbWFza1wnIG1hdGNoaW5nLAorIGhvc3RuYW1lIG1hdGNoaW5nIGJlZ2lubmluZyB3aXRoIGAuXCcgb3IgSVAgYWRkcmVzcyBtYXRjaGluZyBlbmRpbmcgd2l0aCBgLlwnLgorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuYyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy5jCTIwMDQtMDQtMTAgMTk6Mjg6MDkuMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuYwkyMDA0LTA0LTEwIDE5OjI3OjA1LjAwMDAwMDAwMCArMDIwMAorQEAgLTI1Myw2ICsyNTMsMjYgQEAKKyAgICAgfQorIH0KKyAKKysvKiBob3N0ZmlsZV9tYXRjaCAtIGxvb2sgdXAgaG9zdCBwYXR0ZXJucyBmcm9tIGZpbGUgKi8KKysKKytzdGF0aWMgaW50IGhvc3RmaWxlX21hdGNoKHBhdGgsIGhvc3QpCisrY2hhciAgICpwYXRoOworK3N0cnVjdCBob3N0c19pbmZvICpob3N0OworK3sKKysgICAgY2hhciAgICB0b2tbQlVGU0laXTsKKysgICAgaW50ICAgICBtYXRjaCA9IE5POworKyAgICBGSUxFICAgKmZwOworKworKyAgICBpZiAoKGZwID0gZm9wZW4ocGF0aCwgInIiKSkgIT0gMCkgeworKwl3aGlsZSAoZnNjYW5mKGZwLCAiJXMiLCB0b2spID09IDEgJiYgIShtYXRjaCA9IGhvc3RfbWF0Y2godG9rLCBob3N0KSkpCisrCSAgICAgLyogdm9pZCAqLyA7CisrCWZjbG9zZShmcCk7CisrICAgIH0gZWxzZSBpZiAoZXJybm8gIT0gRU5PRU5UKSB7CisrCXRjcGRfd2Fybigib3BlbiAlczogJW0iLCBwYXRoKTsKKysgICAgfQorKyAgICByZXR1cm4gKG1hdGNoKTsKKyt9CisrCisgLyogaG9zdF9tYXRjaCAtIG1hdGNoIGhvc3QgbmFtZSBhbmQvb3IgYWRkcmVzcyBhZ2FpbnN0IHBhdHRlcm4gKi8KKyAKKyBzdGF0aWMgaW50IGhvc3RfbWF0Y2godG9rLCBob3N0KQorQEAgLTI4MCw2ICszMDAsOCBAQAorIAl0Y3BkX3dhcm4oIm5ldGdyb3VwIHN1cHBvcnQgaXMgZGlzYWJsZWQiKTsJLyogbm90IHRjcGRfanVtcCgpICovCisgCXJldHVybiAoTk8pOworICNlbmRpZgorKyAgICB9IGVsc2UgaWYgKHRva1swXSA9PSAnLycpIHsJCQkvKiAvZmlsZSBoYWNrICovCisrCXJldHVybiAoaG9zdGZpbGVfbWF0Y2godG9rLCBob3N0KSk7CisgICAgIH0gZWxzZSBpZiAoU1RSX0VRKHRvaywgIktOT1dOIikpIHsJCS8qIGNoZWNrIGFkZHJlc3MgYW5kIG5hbWUgKi8KKyAJY2hhciAgICpuYW1lID0gZXZhbF9ob3N0bmFtZShob3N0KTsKKyAJcmV0dXJuIChTVFJfTkUoZXZhbF9ob3N0YWRkcihob3N0KSwgdW5rbm93bikgJiYgSE9TVE5BTUVfS05PV04obmFtZSkpOworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkY2hrLmMgdGNwX3dyYXBwZXJzXzcuNi90Y3BkY2hrLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZGNoay5jCTIwMDQtMDQtMTAgMTk6Mjg6MDkuMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkY2hrLmMJMjAwNC0wNC0xMCAxOToyNzowNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zNTMsNiArMzUzLDggQEAKKyB7CisgICAgIGlmIChwYXRbMF0gPT0gJ0AnKSB7CisgCXRjcGRfd2FybigiJXM6IGRhZW1vbiBuYW1lIGJlZ2lucyB3aXRoIFwiQFwiIiwgcGF0KTsKKysgICAgfSBlbHNlIGlmIChwYXRbMF0gPT0gJy8nKSB7CisrCXRjcGRfd2FybigiJXM6IGRhZW1vbiBuYW1lIGJlZ2lucyB3aXRoIFwiL1wiIiwgcGF0KTsKKyAgICAgfSBlbHNlIGlmIChwYXRbMF0gPT0gJy4nKSB7CisgCXRjcGRfd2FybigiJXM6IGRhZW1vbiBuYW1lIGJlZ2lucyB3aXRoIGRvdCIsIHBhdCk7CisgICAgIH0gZWxzZSBpZiAocGF0W3N0cmxlbihwYXQpIC0gMV0gPT0gJy4nKSB7CitAQCAtMzg1LDYgKzM4Nyw4IEBACisgeworICAgICBpZiAocGF0WzBdID09ICdAJykgewkJCS8qIEBuZXRncm91cCAqLworIAl0Y3BkX3dhcm4oIiVzOiB1c2VyIG5hbWUgYmVnaW5zIHdpdGggXCJAXCIiLCBwYXQpOworKyAgICB9IGVsc2UgaWYgKHBhdFswXSA9PSAnLycpIHsKKysJdGNwZF93YXJuKCIlczogdXNlciBuYW1lIGJlZ2lucyB3aXRoIFwiL1wiIiwgcGF0KTsKKyAgICAgfSBlbHNlIGlmIChwYXRbMF0gPT0gJy4nKSB7CisgCXRjcGRfd2FybigiJXM6IHVzZXIgbmFtZSBiZWdpbnMgd2l0aCBkb3QiLCBwYXQpOworICAgICB9IGVsc2UgaWYgKHBhdFtzdHJsZW4ocGF0KSAtIDFdID09ICcuJykgeworQEAgLTQzMCw4ICs0MzQsMTMgQEAKKyBzdGF0aWMgaW50IGNoZWNrX2hvc3QocGF0KQorIGNoYXIgICAqcGF0OworIHsKKysgICAgY2hhciAgICBidWZbQlVGU0laXTsKKyAgICAgY2hhciAgICptYXNrOworICAgICBpbnQgICAgIGFkZHJfY291bnQgPSAxOworKyAgICBGSUxFICAgKmZwOworKyAgICBzdHJ1Y3QgdGNwZF9jb250ZXh0IHNhdmVkX2NvbnRleHQ7CisrICAgIGNoYXIgICAqY3A7CisrICAgIGNoYXIgICAqd3NwID0gIiBcdFxyXG4iOworIAorICAgICBpZiAocGF0WzBdID09ICdAJykgewkJCS8qIEBuZXRncm91cCAqLworICNpZmRlZiBOT19ORVRHUkVOVAorQEAgLTQ1MCw2ICs0NTksMjEgQEAKKyAJdGNwZF93YXJuKCJuZXRncm91cCBzdXBwb3J0IGRpc2FibGVkIik7CisgI2VuZGlmCisgI2VuZGlmCisrICAgIH0gZWxzZSBpZiAocGF0WzBdID09ICcvJykgewkJCS8qIC9wYXRoL25hbWUgKi8KKysJaWYgKChmcCA9IGZvcGVuKHBhdCwgInIiKSkgIT0gMCkgeworKwkgICAgc2F2ZWRfY29udGV4dCA9IHRjcGRfY29udGV4dDsKKysJICAgIHRjcGRfY29udGV4dC5maWxlID0gcGF0OworKwkgICAgdGNwZF9jb250ZXh0LmxpbmUgPSAwOworKwkgICAgd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwKSkgeworKwkJdGNwZF9jb250ZXh0LmxpbmUrKzsKKysJCWZvciAoY3AgPSBzdHJ0b2soYnVmLCB3c3ApOyBjcDsgY3AgPSBzdHJ0b2soKGNoYXIgKikgMCwgd3NwKSkKKysJCSAgICBjaGVja19ob3N0KGNwKTsKKysJICAgIH0KKysJICAgIHRjcGRfY29udGV4dCA9IHNhdmVkX2NvbnRleHQ7CisrCSAgICBmY2xvc2UoZnApOworKwl9IGVsc2UgaWYgKGVycm5vICE9IEVOT0VOVCkgeworKwkgICAgdGNwZF93YXJuKCJvcGVuICVzOiAlbSIsIHBhdCk7CisrCX0KKyAgICAgfSBlbHNlIGlmIChtYXNrID0gc3BsaXRfYXQocGF0LCAnLycpKSB7CS8qIG5ldHdvcmsvbmV0bWFzayAqLworICNpZmRlZiBJTkVUNgorIAlpbnQgbWFza19sZW47CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMV91c2FnaV9maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMV91c2FnaV9maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYwZThkMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzExX3VzYWdpX2ZpeC5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXVOIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMgdGNwX3dyYXBwZXJzXzcuNi5uZXcvaG9zdHNfYWNjZXNzLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy5jCU1vbiBNYXkgMjAgMTQ6MDA6NTYgMjAwMgorKysrIHRjcF93cmFwcGVyc183LjYubmV3L2hvc3RzX2FjY2Vzcy5jCU1vbiBNYXkgMjAgMTQ6MjU6MDUgMjAwMgorQEAgLTQ0OCw2ICs0NDgsMTUgQEAKKyAgICAgaW50IGxlbiwgbWFza19sZW4sIGkgPSAwOworICAgICBjaGFyIGNoOworIAorKyAgICAvKgorKyAgICAgKiBCZWhhdmlvciBvZiBnZXRhZGRyaW5mbygpIGFnYWluc3QgSVB2NC1tYXBwZWQgSVB2NiBhZGRyZXNzIGlzCisrICAgICAqIGRpZmZlcmVudCBiZXR3ZWVuIEtBTUUgYW5kIFNvbGFyaXM4LiAgV2hpbGUgS0FNRSByZXR1cm5zCisrICAgICAqIEFGX0lORVQ2LCBTb2xhcmlzOCByZXR1cm5zIEFGX0lORVQuICBTbywgd2UgYXZvaWQgdGhpcyBoZXJlLgorKyAgICAgKi8KKysgICAgaWYgKFNUUk5fRVEoc3RyaW5nLCAiOjpmZmZmOiIsIDcpCisrCSYmIGRvdF9xdWFkX2FkZHIoc3RyaW5nICsgNykgIT0gSU5BRERSX05PTkUpCisrCXJldHVybiAobWFza2VkX21hdGNoNChuZXRfdG9rLCBtYXNrX3Rvaywgc3RyaW5nICsgNykpOworKworICAgICBtZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKyAgICAgaGludHMuYWlfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CitAQCAtNDU3LDEzICs0NjYsNiBAQAorICAgICBtZW1jcHkoJmFkZHIsIHJlcy0+YWlfYWRkciwgc2l6ZW9mKGFkZHIpKTsKKyAgICAgZnJlZWFkZHJpbmZvKHJlcyk7CisgCistICAgIGlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmYWRkci5zaW42X2FkZHIpKSB7CistCWlmICgoKih1X2ludDMyX3QgKikmbmV0LnNpbjZfYWRkci5zNl9hZGRyWzEyXSA9IGRvdF9xdWFkX2FkZHIobmV0X3RvaykpID09IElOQUREUl9OT05FCistCSB8fCAobWFzayA9IGRvdF9xdWFkX2FkZHIobWFza190b2spKSA9PSBJTkFERFJfTk9ORSkKKy0JICAgIHJldHVybiAoTk8pOworLQlyZXR1cm4gKCgqKHVfaW50MzJfdCAqKSZhZGRyLnNpbjZfYWRkci5zNl9hZGRyWzEyXSAmIG1hc2spID09ICoodV9pbnQzMl90ICopJm5ldC5zaW42X2FkZHIuczZfYWRkclsxMl0pOworLSAgICB9CistCisgICAgIC8qIG1hdGNoIElQdjYgYWRkcmVzcyBhZ2FpbnN0IG5ldG51bWJlci9wcmVmaXhsZW4gKi8KKyAgICAgbGVuID0gc3RybGVuKG5ldF90b2spOworICAgICBpZiAoKm5ldF90b2sgIT0gJ1snIHx8IG5ldF90b2tbbGVuIC0gMV0gIT0gJ10nKQorZGlmZiAtdU4gdGNwX3dyYXBwZXJzXzcuNi9zb2NrZXQuYyB0Y3Bfd3JhcHBlcnNfNy42Lm5ldy9zb2NrZXQuYworLS0tIHRjcF93cmFwcGVyc183LjYvc29ja2V0LmMJTW9uIE1heSAyMCAxMzo0ODozNSAyMDAyCisrKysgdGNwX3dyYXBwZXJzXzcuNi5uZXcvc29ja2V0LmMJTW9uIE1heSAyMCAxNDoyMjoyNyAyMDAyCitAQCAtMjI4LDcgKzIyOCw3IEBACisgCWhpbnRzLmFpX2ZhbWlseSA9IHNpbi0+c2FfZmFtaWx5OworIAloaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworIAloaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkUgfCBBSV9DQU5PTk5BTUUgfCBBSV9OVU1FUklDSE9TVDsKKy0JaWYgKChlcnIgPSBnZXRhZGRyaW5mbyhob3N0LT5uYW1lLCBOVUxMLCAmaGludHMsICZyZXMwKSA9PSAwKSkgeworKwlpZiAoKGVyciA9IGdldGFkZHJpbmZvKGhvc3QtPm5hbWUsIE5VTEwsICZoaW50cywgJnJlczApKSA9PSAwKSB7CisgCSAgICBmcmVlYWRkcmluZm8ocmVzMCk7CisgCSAgICByZXMwID0gTlVMTDsKKyAJICAgIHRjcGRfd2FybigiaG9zdCBuYW1lL25hbWUgbWlzbWF0Y2g6ICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzEyX21ha2VmaWxlX2NvbmZpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzEyX21ha2VmaWxlX2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODI4OWU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTJfbWFrZWZpbGVfY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsODMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9NYWtlZmlsZSB0Y3Bfd3JhcHBlcnNfNy42L01ha2VmaWxlCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL01ha2VmaWxlCTIwMDMtMDgtMjEgMDE6NDM6MzkuMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9NYWtlZmlsZQkyMDAzLTA4LTIxIDAxOjQzOjM1LjAwMDAwMDAwMCArMDIwMAorQEAgLTQ1LDcgKzQ1LDcgQEAKKyAjCisgIyBTeXNWLjQgU29sYXJpcyAyLnggT1NGIEFJWAorICNSRUFMX0RBRU1PTl9ESVI9L3Vzci9zYmluCistIworK1JFQUxfREFFTU9OX0RJUj0vdXNyL3NiaW4KKyAjIEJTRCA0LjQKKyAjUkVBTF9EQUVNT05fRElSPS91c3IvbGliZXhlYworICMKK0BAIC01MTIsNiArNTE5LDcgQEAKKyAjIChleGFtcGxlczogYWxsb3csIGRlbnksIGJhbm5lcnMsIHR3aXN0IGFuZCBzcGF3bikuCisgIyAKKyAjU1RZTEUJPSAtRFBST0NFU1NfT1BUSU9OUwkjIEVuYWJsZSBsYW5ndWFnZSBleHRlbnNpb25zLgorK1NUWUxFID0gLURQUk9DRVNTX09QVElPTlMKKyAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgIyBPcHRpb25hbDogQ2hhbmdpbmcgdGhlIGRlZmF1bHQgZGlzcG9zaXRpb24gb2YgbG9nZmlsZSByZWNvcmRzCitAQCAtNTM1LDYgKzU0Myw3IEBACisgIyBUaGUgTE9HX1hYWCBuYW1lcyBiZWxvdyBhcmUgdGFrZW4gZnJvbSB0aGUgL3Vzci9pbmNsdWRlL3N5c2xvZy5oIGZpbGUuCisgCisgRkFDSUxJVFk9IExPR19NQUlMCSMgTE9HX01BSUwgaXMgd2hhdCBtb3N0IHNlbmRtYWlsIGRhZW1vbnMgdXNlCisrRkFDSUxJVFk9IExPR19EQUVNT04KKyAKKyAjIFRoZSBzeXNsb2cgcHJpb3JpdHkgYXQgd2hpY2ggc3VjY2Vzc2Z1bCBjb25uZWN0aW9ucyBhcmUgbG9nZ2VkLgorIAorQEAgLTYzMSw2ICs2NDAsNyBAQAorICMgbG9va3VwcyBhbHRvZ2V0aGVyLCBzZWUgdGhlIG5leHQgc2VjdGlvbi4KKyAKKyBQQVJBTk9JRD0gLURQQVJBTk9JRAorK1BBUkFOT0lEPQorIAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjIE9wdGlvbmFsOiB0dXJuaW5nIG9mZiBob3N0bmFtZSBsb29rdXBzCitAQCAtNjQ0LDYgKzY1NCw3IEBACisgIyBtb2RlIChzZWUgcHJldmlvdXMgc2VjdGlvbikgYW5kIGNvbW1lbnQgb3V0IHRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbi4KKyAKKyBIT1NUTkFNRT0gLURBTFdBWVNfSE9TVE5BTUUKKytIT1NUTkFNRT0KKyAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjIE9wdGlvbmFsOiBUdXJuaW5nIG9uIGhvc3QgQUREUkVTUyBjaGVja2luZworQEAgLTY3MCw2ICs2ODEsNyBAQAorICMgU29sYXJpcyAyLngsIGFuZCBMaW51eC4gU2VlIHlvdXIgc3lzdGVtIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCisgIworICMgS0lMTF9PUFQ9IC1ES0lMTF9JUF9PUFRJT05TCisrS0lMTF9PUFQ9IC1ES0lMTF9JUF9PUFRJT05TCisgCisgIyMgRW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0BAIC02NzcsOSArNjg5LDEwIEBACisgIyBQcm90ZWN0aW9uIGFnYWluc3Qgd2VpcmQgc2hlbGxzIG9yIHdlaXJkIG1ha2UgcHJvZ3JhbXMuCisgCisgU0hFTEwJPSAvYmluL3NoCistLmMubzo7CSQoQ0MpICQoQ0ZMQUdTKSAtYyAkKi5jCisrLmMubzo7CSQoQ0MpICQoQ0ZMQUdTKSAtbyAkKi5vIC1jICQqLmMKKyAKKy1DRkxBR1MJPSAtTyAtREZBQ0lMSVRZPSQoRkFDSUxJVFkpICQoQUNDRVNTKSAkKFBBUkFOT0lEKSAkKE5FVEdST1VQKSBcCisrQ09QVFMJPSAtTzIgLWcKKytDRkxBR1MJPSAkKENPUFRTKSAtREZBQ0lMSVRZPSQoRkFDSUxJVFkpICQoQUNDRVNTKSAkKFBBUkFOT0lEKSAkKE5FVEdST1VQKSBcCisgCSQoQlVHUykgJChTWVNUWVBFKSAkKEFVVEgpICQoVU1BU0spIFwKKyAJLURSRUFMX0RBRU1PTl9ESVI9XCIkKFJFQUxfREFFTU9OX0RJUilcIiAkKFNUWUxFKSAkKEtJTExfT1BUKSBcCisgCS1EU0VWRVJJVFk9JChTRVZFUklUWSkgLURSRkM5MzFfVElNRU9VVD0kKFJGQzkzMV9USU1FT1VUKSBcCitAQCAtNzEyLDEwICs3MjUsMTEgQEAKKyAKKyBjb25maWctY2hlY2s6CisgCUBzZXQgK2U7IHRlc3QgLW4gIiQoUkVBTF9EQUVNT05fRElSKSIgfHwgeyBtYWtlOyBleGl0IDE7IH0KKy0JQHNldCArZTsgZWNobyAkKENGTEFHUykgPi90bXAvY2ZsYWdzLiQkJCQgOyBcCistCWlmIGNtcCBjZmxhZ3MgL3RtcC9jZmxhZ3MuJCQkJCA7IFwKKy0JdGhlbiBybSAvdG1wL2NmbGFncy4kJCQkIDsgXAorLQllbHNlIG12IC90bXAvY2ZsYWdzLiQkJCQgY2ZsYWdzIDsgXAorKwlAc2V0ICtlOyBlY2hvICQoQ0ZMQUdTKSA+Y2ZsYWdzLm5ldyA7IFwKKysJaWYgY21wIGNmbGFncyBjZmxhZ3MubmV3IDsgXAorKwl0aGVuIHJtIGNmbGFncy5uZXcgOyBcCisrCWVsc2UgbXYgY2ZsYWdzLm5ldyBjZmxhZ3MgOyBcCisgCWZpID4vZGV2L251bGwgMj4vZGV2L251bGwKKysJQGlmIFsgISAtZCBzaGFyZWQgXTsgdGhlbiBta2RpciBzaGFyZWQ7IGZpCisgCisgJChMSUIpOgkkKExJQl9PQkopCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xM19zaGxpYl93ZWFrc3ltLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTNfc2hsaWJfd2Vha3N5bS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDEzOTZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTNfc2hsaWJfd2Vha3N5bS5wYXRjaApAQCAtMCwwICsxLDI1NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL01ha2VmaWxlIHRjcF93cmFwcGVyc183LjYvTWFrZWZpbGUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvTWFrZWZpbGUJMjAwNC0wNS0wMiAxNTozNzo1OS4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L01ha2VmaWxlCTIwMDQtMDUtMDIgMTU6MzE6MDkuMDAwMDAwMDAwICswMjAwCitAQCAtMTUwLDE1ICsxNTAsMTUgQEAKKyAKKyBsaW51eDoKKyAJQG1ha2UgUkVBTF9EQUVNT05fRElSPSQoUkVBTF9EQUVNT05fRElSKSBTVFlMRT0kKFNUWUxFKSBcCistCUxJQlM9LWxuc2wgUkFOTElCPXJhbmxpYiBBUkZMQUdTPXJ2IEFVWF9PQko9IFwKKysJTElCUz0tbG5zbCBSQU5MSUI9cmFubGliIEFSRkxBR1M9cnYgQVVYX09CSj13ZWFrX3N5bWJvbHMubyBcCisgCU5FVEdST1VQPSItRE5FVEdST1VQIiBUTEk9IFZTWVNMT0c9IEJVR1M9IFwKKy0JRVhUUkFfQ0ZMQUdTPSItRFNZU19FUlJMSVNUX0RFRklORUQgLURIQVZFX1NUUkVSUk9SIC1ESU5FVDY9MSAtRHNzX2ZhbWlseT1fX3NzX2ZhbWlseSAtRHNzX2xlbj1fX3NzX2xlbiIgYWxsCisrCUVYVFJBX0NGTEFHUz0iLURTWVNfRVJSTElTVF9ERUZJTkVEIC1ESEFWRV9TVFJFUlJPUiAtREhBVkVfV0VBS1NZTVMgLURfUkVFTlRSQU5UIC1ESU5FVDY9MSAtRHNzX2ZhbWlseT1fX3NzX2ZhbWlseSAtRHNzX2xlbj1fX3NzX2xlbiIgYWxsCisgCisgZ251OgorIAlAbWFrZSBSRUFMX0RBRU1PTl9ESVI9JChSRUFMX0RBRU1PTl9ESVIpIFNUWUxFPSQoU1RZTEUpIFwKKy0JTElCUz0tbG5zbCBSQU5MSUI9cmFubGliIEFSRkxBR1M9cnYgQVVYX09CSj0gXAorKwlMSUJTPS1sbnNsIFJBTkxJQj1yYW5saWIgQVJGTEFHUz1ydiBBVVhfT0JKPXdlYWtfc3ltYm9scy5vIFwKKyAJTkVUR1JPVVA9LURORVRHUk9VUCBUTEk9IFZTWVNMT0c9IEJVR1M9IFwKKy0JRVhUUkFfQ0ZMQUdTPSItRFNZU19FUlJMSVNUX0RFRklORUQgLURIQVZFX1NUUkVSUk9SIiBhbGwKKysJRVhUUkFfQ0ZMQUdTPSItRFNZU19FUlJMSVNUX0RFRklORUQgLURIQVZFX1NUUkVSUk9SIC1ESEFWRV9XRUFLU1lNUyAtRF9SRUVOVFJBTlQiIGFsbAorIAorICMgVGhpcyBpcyBnb29kIGZvciBtYW55IFNZU1YrQlNEIGh5YnJpZHMgd2l0aCBOSVMsIHByb2JhYmx5IGFsc28gZm9yIEhQLVVYIDcueC4KKyBocHV4IGhwdXg4IGhwdXg5IGhwdXgxMDoKK0BAIC03MTMsNyArNzEzLDIyIEBACisgCisgTElCCT0gbGlid3JhcC5hCisgCistYWxsIG90aGVyOiBjb25maWctY2hlY2sgdGNwZCB0Y3BkbWF0Y2ggdHJ5LWZyb20gc2FmZV9maW5nZXIgdGNwZGNoaworK3NoYXJlZC8lLm86ICUuYworKwkkKENDKSAkKENGTEFHUykgJChTSENGTEFHUykgLWMgJDwgLW8gJEAKKysKKytTT01BSk9SID0gMAorK1NPTUlOT1IgPSA3LjYKKysKKytTSExJQgkJPSBzaGFyZWQvbGlid3JhcC5zby4kKFNPTUFKT1IpLiQoU09NSU5PUikKKytTSExJQlNPTUFKCT0gc2hhcmVkL2xpYndyYXAuc28uJChTT01BSk9SKQorK1NITElCU08JCT0gc2hhcmVkL2xpYndyYXAuc28KKytTSExJQkZMQUdTCT0gLUxzaGFyZWQgLWx3cmFwCisrCisrU0hMSU5LRkxBR1MgPSAtc2hhcmVkIC1YbGlua2VyIC1zb25hbWUgLVhsaW5rZXIgbGlid3JhcC5zby4kKFNPTUFKT1IpIC1sYyAkKExJQlMpCisrU0hDRkxBR1MgPSAtZlBJQyAtc2hhcmVkIC1EX1JFRU5UUkFOVAorK1NITElCX09CSj0gJChhZGRwcmVmaXggc2hhcmVkLywgJChMSUJfT0JKKSk7CisrCisrYWxsIG90aGVyOiBjb25maWctY2hlY2sgdGNwZCB0Y3BkbWF0Y2ggdHJ5LWZyb20gc2FmZV9maW5nZXIgdGNwZGNoayAkKExJQikKKyAKKyAjIEludmFsaWRhdGUgYWxsIG9iamVjdCBmaWxlcyB3aGVuIHRoZSBjb21waWxlciBvcHRpb25zIChDRkxBR1MpIGhhdmUgY2hhbmdlZC4KKyAKK0BAIC03MzEsMjcgKzc0NiwzMyBAQAorIAkkKEFSKSAkKEFSRkxBR1MpICQoTElCKSAkKExJQl9PQkopCisgCS0kKFJBTkxJQikgJChMSUIpCisgCistdGNwZDoJdGNwZC5vICQoTElCKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgdGNwZC5vICQoTElCKSAkKExJQlMpCisrJChTSExJQik6ICQoU0hMSUJfT0JKKQorKwlybSAtZiAkKFNITElCKQorKwkkKENDKSAtbyAkKFNITElCKSAkKFNITElOS0ZMQUdTKSAkKFNITElCX09CSikKKysJbG4gLXNmICQobm90ZGlyICQoU0hMSUIpKSAkKFNITElCU09NQUopCisrCWxuIC1zZiAkKG5vdGRpciAkKFNITElCU09NQUopKSAkKFNITElCU08pCisrCisrdGNwZDoJdGNwZC5vICQoU0hMSUIpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCB0Y3BkLm8gJChTSExJQkZMQUdTKQorIAorIG1pc2NkOgltaXNjZC5vICQoTElCKQorIAkkKENDKSAkKENGTEFHUykgLW8gJEAgbWlzY2QubyAkKExJQikgJChMSUJTKQorIAorLXNhZmVfZmluZ2VyOiBzYWZlX2Zpbmdlci5vICQoTElCKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgc2FmZV9maW5nZXIubyAkKExJQikgJChMSUJTKQorK3NhZmVfZmluZ2VyOiBzYWZlX2Zpbmdlci5vICQoU0hMSUIpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBzYWZlX2Zpbmdlci5vICQoU0hMSUJGTEFHUykKKyAKKyBUQ1BETUFUQ0hfT0JKID0gdGNwZG1hdGNoLm8gZmFrZWxvZy5vIGluZXRjZi5vIHNjYWZmb2xkLm8KKyAKKy10Y3BkbWF0Y2g6ICQoVENQRE1BVENIX09CSikgJChMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKFRDUERNQVRDSF9PQkopICQoTElCKSAkKExJQlMpCisrdGNwZG1hdGNoOiAkKFRDUERNQVRDSF9PQkopICQoU0hMSUIpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKFRDUERNQVRDSF9PQkopICQoU0hMSUJGTEFHUykKKyAKKy10cnktZnJvbTogdHJ5LWZyb20ubyBmYWtlbG9nLm8gJChMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCB0cnktZnJvbS5vIGZha2Vsb2cubyAkKExJQikgJChMSUJTKQorK3RyeS1mcm9tOiB0cnktZnJvbS5vIGZha2Vsb2cubyAkKFNITElCKQorKwkkKENDKSAkKENGTEFHUykgLW8gJEAgdHJ5LWZyb20ubyBmYWtlbG9nLm8gJChTSExJQkZMQUdTKQorIAorIFRDUERDSEtfT0JKID0gdGNwZGNoay5vIGZha2Vsb2cubyBpbmV0Y2YubyBzY2FmZm9sZC5vCisgCistdGNwZGNoazogJChUQ1BEQ0hLX09CSikgJChMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKFRDUERDSEtfT0JKKSAkKExJQikgJChMSUJTKQorK3RjcGRjaGs6ICQoVENQRENIS19PQkopICQoU0hMSUIpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKFRDUERDSEtfT0JKKSAkKFNITElCRkxBR1MpCisgCisgc2hhcjoJJChLSVQpCisgCUBzaGFyICQoS0lUKQorQEAgLTc2Nyw3ICs3ODgsOSBAQAorIAorIGNsZWFuOgorIAlybSAtZiB0Y3BkIG1pc2NkIHNhZmVfZmluZ2VyIHRjcGRtYXRjaCB0Y3BkY2hrIHRyeS1mcm9tICouW29hXSBjb3JlIFwKKysJbGlid3JhcCouc28qIFwKKyAJY2ZsYWdzCisrCXJtIC1yZiBzaGFyZWQvCisgCisgdGlkeToJY2xlYW4KKyAJY2htb2QgLVIgYStyIC4KK0BAIC05MTMsNSArOTM2LDYgQEAKKyB1cGRhdGUubzogbXlzdGRhcmcuaAorIHVwZGF0ZS5vOiB0Y3BkLmgKKyB2ZnByaW50Zi5vOiBjZmxhZ3MKKyt3ZWFrX3N5bWJvbHMubzogdGNwZC5oCisgd29ya2Fyb3VuZHMubzogY2ZsYWdzCisgd29ya2Fyb3VuZHMubzogdGNwZC5oCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGQuaCB0Y3Bfd3JhcHBlcnNfNy42L3RjcGQuaAorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkLmgJMjAwNC0wNS0wMiAxNTozNzo1OS4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGQuaAkyMDA0LTA1LTAyIDE1OjM3OjQ5LjAwMDAwMDAwMCArMDIwMAorQEAgLTQsNiArNCwxNSBAQAorICAgKiBBdXRob3I6IFdpZXRzZSBWZW5lbWEsIEVpbmRob3ZlbiBVbml2ZXJzaXR5IG9mIFRlY2hub2xvZ3ksIFRoZSBOZXRoZXJsYW5kcy4KKyAgICovCisgCisrI2lmbmRlZiBfVENQV1JBUFBFUlNfVENQRF9ICisrI2RlZmluZSBfVENQV1JBUFBFUlNfVENQRF9ICisrCisrLyogTmVlZCBkZWZpbml0aW9ucyBvZiBzdHJ1Y3Qgc29ja2FkZHJfaW4gYW5kIEZJTEUuICovCisrI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysKKytfX0JFR0lOX0RFQ0xTCisrCisgLyogU3RydWN0dXJlIHRvIGRlc2NyaWJlIG9uZSBjb21tdW5pY2F0aW9ucyBlbmRwb2ludC4gKi8KKyAKKyAjZGVmaW5lIFNUUklOR19MRU5HVEgJMTI4CQkvKiBob3N0cywgdXNlcnMsIHByb2Nlc3NlcyAqLworQEAgLTI5LDEwICszOCwxMCBAQAorICAgICBjaGFyICAgIHBpZFsxMF07CQkJLyogYWNjZXNzIHZpYSBldmFsX3BpZChyZXF1ZXN0KSAqLworICAgICBzdHJ1Y3QgaG9zdF9pbmZvIGNsaWVudFsxXTsJCS8qIGNsaWVudCBlbmRwb2ludCBpbmZvICovCisgICAgIHN0cnVjdCBob3N0X2luZm8gc2VydmVyWzFdOwkJLyogc2VydmVyIGVuZHBvaW50IGluZm8gKi8KKy0gICAgdm9pZCAgKCpzaW5rKSAoKTsJCQkvKiBkYXRhZ3JhbSBzaW5rIGZ1bmN0aW9uIG9yIDAgKi8KKy0gICAgdm9pZCAgKCpob3N0bmFtZSkgKCk7CQkvKiBhZGRyZXNzIHRvIHByaW50YWJsZSBob3N0bmFtZSAqLworLSAgICB2b2lkICAoKmhvc3RhZGRyKSAoKTsJCS8qIGFkZHJlc3MgdG8gcHJpbnRhYmxlIGFkZHJlc3MgKi8KKy0gICAgdm9pZCAgKCpjbGVhbnVwKSAoKTsJCS8qIGNsZWFudXAgZnVuY3Rpb24gb3IgMCAqLworKyAgICB2b2lkICAoKnNpbmspIChpbnQpOwkJLyogZGF0YWdyYW0gc2luayBmdW5jdGlvbiBvciAwICovCisrICAgIHZvaWQgICgqaG9zdG5hbWUpIChzdHJ1Y3QgaG9zdF9pbmZvICopOyAvKiBhZGRyZXNzIHRvIHByaW50YWJsZSBob3N0bmFtZSAqLworKyAgICB2b2lkICAoKmhvc3RhZGRyKSAoc3RydWN0IGhvc3RfaW5mbyAqKTsgLyogYWRkcmVzcyB0byBwcmludGFibGUgYWRkcmVzcyAqLworKyAgICB2b2lkICAoKmNsZWFudXApIChzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOyAvKiBjbGVhbnVwIGZ1bmN0aW9uIG9yIDAgKi8KKyAgICAgc3RydWN0IG5ldGNvbmZpZyAqY29uZmlnOwkJLyogbmV0ZGlyIGhhbmRsZSAqLworIH07CisgCitAQCAtNzAsMjAgKzc5LDI3IEBACisgI2RlZmluZSBmcm9taG9zdCBzb2NrX2hvc3QJCS8qIG5vIFRMSSBzdXBwb3J0IG5lZWRlZCAqLworICNlbmRpZgorIAorLWV4dGVybiBpbnQgaG9zdHNfYWNjZXNzKCk7CQkvKiBhY2Nlc3MgY29udHJvbCAqLworLWV4dGVybiB2b2lkIHNoZWxsX2NtZCgpOwkJLyogZXhlY3V0ZSBzaGVsbCBjb21tYW5kICovCistZXh0ZXJuIGNoYXIgKnBlcmNlbnRfeCgpOwkJLyogZG8gJTxjaGFyPiBleHBhbnNpb24gKi8KKy1leHRlcm4gdm9pZCByZmM5MzEoKTsJCQkvKiBjbGllbnQgbmFtZSBmcm9tIFJGQyA5MzEgZGFlbW9uICovCistZXh0ZXJuIHZvaWQgY2xlYW5fZXhpdCgpOwkJLyogY2xlYW4gdXAgYW5kIGV4aXQgKi8KKy1leHRlcm4gdm9pZCByZWZ1c2UoKTsJCQkvKiBjbGVhbiB1cCBhbmQgZXhpdCAqLworLWV4dGVybiBjaGFyICp4Z2V0cygpOwkJCS8qIGZnZXRzKCkgb24gc3Rlcm9pZHMgKi8KKy1leHRlcm4gY2hhciAqc3BsaXRfYXQoKTsJCS8qIHN0cmNocigpIGFuZCBzcGxpdCAqLworLWV4dGVybiB1bnNpZ25lZCBsb25nIGRvdF9xdWFkX2FkZHIoKTsJLyogcmVzdHJpY3RlZCBpbmV0X2FkZHIoKSAqLworK2V4dGVybiBpbnQgaG9zdHNfYWNjZXNzKHN0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3QpOwkvKiBhY2Nlc3MgY29udHJvbCAqLworK2V4dGVybiB2b2lkIHNoZWxsX2NtZChjaGFyICopOwkJLyogZXhlY3V0ZSBzaGVsbCBjb21tYW5kICovCisrZXh0ZXJuIGNoYXIgKnBlcmNlbnRfeChjaGFyICosIGludCwgY2hhciAqLCBzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOworKwkJCQkJLyogZG8gJTxjaGFyPiBleHBhbnNpb24gKi8KKytleHRlcm4gdm9pZCByZmM5MzEoc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCBzb2NrYWRkciAqLCBjaGFyICopOworKwkJCQkJLyogY2xpZW50IG5hbWUgZnJvbSBSRkMgOTMxIGRhZW1vbiAqLworK2V4dGVybiB2b2lkIGNsZWFuX2V4aXQoc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsJLyogY2xlYW4gdXAgYW5kIGV4aXQgKi8KKytleHRlcm4gdm9pZCByZWZ1c2Uoc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsJLyogY2xlYW4gdXAgYW5kIGV4aXQgKi8KKytleHRlcm4gY2hhciAqeGdldHMoY2hhciAqLCBpbnQsIEZJTEUgKik7CS8qIGZnZXRzKCkgb24gc3Rlcm9pZHMgKi8KKytleHRlcm4gY2hhciAqc3BsaXRfYXQoY2hhciAqLCBpbnQpOwkJLyogc3RyY2hyKCkgYW5kIHNwbGl0ICovCisrZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZG90X3F1YWRfYWRkcihjaGFyICopOwkvKiByZXN0cmljdGVkIGluZXRfYWRkcigpICovCisgCisgLyogR2xvYmFsIHZhcmlhYmxlcy4gKi8KKyAKKysjaWZkZWYgSEFWRV9XRUFLU1lNUworK2V4dGVybiBpbnQgYWxsb3dfc2V2ZXJpdHkgX19hdHRyaWJ1dGVfXyAoKHdlYWspKTsgLyogZm9yIGNvbm5lY3Rpb24gbG9nZ2luZyAqLworK2V4dGVybiBpbnQgZGVueV9zZXZlcml0eSBfX2F0dHJpYnV0ZV9fICgod2VhaykpOyAvKiBmb3IgY29ubmVjdGlvbiBsb2dnaW5nICovCisrI2Vsc2UKKyBleHRlcm4gaW50IGFsbG93X3NldmVyaXR5OwkJLyogZm9yIGNvbm5lY3Rpb24gbG9nZ2luZyAqLworIGV4dGVybiBpbnQgZGVueV9zZXZlcml0eTsJCS8qIGZvciBjb25uZWN0aW9uIGxvZ2dpbmcgKi8KKysjZW5kaWYKKyBleHRlcm4gY2hhciAqaG9zdHNfYWxsb3dfdGFibGU7CQkvKiBmb3IgdmVyaWZpY2F0aW9uIG1vZGUgcmVkaXJlY3Rpb24gKi8KKyBleHRlcm4gY2hhciAqaG9zdHNfZGVueV90YWJsZTsJCS8qIGZvciB2ZXJpZmljYXRpb24gbW9kZSByZWRpcmVjdGlvbiAqLworIGV4dGVybiBpbnQgaG9zdHNfYWNjZXNzX3ZlcmJvc2U7CS8qIGZvciB2ZXJib3NlIG1hdGNoaW5nIG1vZGUgKi8KK0BAIC05OCw2ICsxMTQsOCBAQAorICNpZmRlZiBfX1NURENfXworIGV4dGVybiBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0X2luaXQoc3RydWN0IHJlcXVlc3RfaW5mbyAqLC4uLik7CisgZXh0ZXJuIHN0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3Rfc2V0KHN0cnVjdCByZXF1ZXN0X2luZm8gKiwuLi4pOworK2V4dGVybiBpbnQgaG9zdHNfY3RsKGNoYXIgKmRhZW1vbiwgY2hhciAqY2xpZW50X25hbWUsIGNoYXIgKmNsaWVudF9hZGRyLAorKwkJY2hhciAqY2xpZW50X3VzZXIpOworICNlbHNlCisgZXh0ZXJuIHN0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3RfaW5pdCgpOwkvKiBpbml0aWFsaXplIHJlcXVlc3QgKi8KKyBleHRlcm4gc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdF9zZXQoKTsJLyogdXBkYXRlIHJlcXVlc3Qgc3RydWN0dXJlICovCitAQCAtMTIxLDIwICsxMzksMjMgQEAKKyAgICogaG9zdF9pbmZvIHN0cnVjdHVyZXMgc2VydmUgYXMgY2FjaGVzIGZvciB0aGUgbG9va3VwIHJlc3VsdHMuCisgICAqLworIAorLWV4dGVybiBjaGFyICpldmFsX3VzZXIoKTsJCS8qIGNsaWVudCB1c2VyICovCistZXh0ZXJuIGNoYXIgKmV2YWxfaG9zdG5hbWUoKTsJCS8qIHByaW50YWJsZSBob3N0bmFtZSAqLworLWV4dGVybiBjaGFyICpldmFsX2hvc3RhZGRyKCk7CQkvKiBwcmludGFibGUgaG9zdCBhZGRyZXNzICovCistZXh0ZXJuIGNoYXIgKmV2YWxfaG9zdGluZm8oKTsJCS8qIGhvc3QgbmFtZSBvciBhZGRyZXNzICovCistZXh0ZXJuIGNoYXIgKmV2YWxfY2xpZW50KCk7CQkvKiB3aGF0ZXZlciBpcyBhdmFpbGFibGUgKi8KKy1leHRlcm4gY2hhciAqZXZhbF9zZXJ2ZXIoKTsJCS8qIHdoYXRldmVyIGlzIGF2YWlsYWJsZSAqLworK2V4dGVybiBjaGFyICpldmFsX3VzZXIoc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsJLyogY2xpZW50IHVzZXIgKi8KKytleHRlcm4gY2hhciAqZXZhbF9ob3N0bmFtZShzdHJ1Y3QgaG9zdF9pbmZvICopOwkvKiBwcmludGFibGUgaG9zdG5hbWUgKi8KKytleHRlcm4gY2hhciAqZXZhbF9ob3N0YWRkcihzdHJ1Y3QgaG9zdF9pbmZvICopOwkvKiBwcmludGFibGUgaG9zdCBhZGRyZXNzICovCisrZXh0ZXJuIGNoYXIgKmV2YWxfaG9zdGluZm8oc3RydWN0IGhvc3RfaW5mbyAqKTsJLyogaG9zdCBuYW1lIG9yIGFkZHJlc3MgKi8KKytleHRlcm4gY2hhciAqZXZhbF9jbGllbnQoc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsvKiB3aGF0ZXZlciBpcyBhdmFpbGFibGUgKi8KKytleHRlcm4gY2hhciAqZXZhbF9zZXJ2ZXIoc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsvKiB3aGF0ZXZlciBpcyBhdmFpbGFibGUgKi8KKyAjZGVmaW5lIGV2YWxfZGFlbW9uKHIpCSgociktPmRhZW1vbikJLyogZGFlbW9uIHByb2Nlc3MgbmFtZSAqLworICNkZWZpbmUgZXZhbF9waWQocikJKChyKS0+cGlkKQkvKiBwcm9jZXNzIGlkICovCisgCisgLyogU29ja2V0LXNwZWNpZmljIG1ldGhvZHMsIGluY2x1ZGluZyBETlMgaG9zdG5hbWUgbG9va3Vwcy4gKi8KKyAKKy1leHRlcm4gdm9pZCBzb2NrX2hvc3QoKTsJCS8qIGxvb2sgdXAgZW5kcG9pbnQgYWRkcmVzc2VzICovCistZXh0ZXJuIHZvaWQgc29ja19ob3N0bmFtZSgpOwkJLyogdHJhbnNsYXRlIGFkZHJlc3MgdG8gaG9zdG5hbWUgKi8KKy1leHRlcm4gdm9pZCBzb2NrX2hvc3RhZGRyKCk7CQkvKiBhZGRyZXNzIHRvIHByaW50YWJsZSBhZGRyZXNzICovCisrLyogbG9vayB1cCBlbmRwb2ludCBhZGRyZXNzZXMgKi8KKytleHRlcm4gdm9pZCBzb2NrX2hvc3Qoc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsKKysvKiB0cmFuc2xhdGUgYWRkcmVzcyB0byBob3N0bmFtZSAqLworK2V4dGVybiB2b2lkIHNvY2tfaG9zdG5hbWUoc3RydWN0IGhvc3RfaW5mbyAqKTsKKysvKiBhZGRyZXNzIHRvIHByaW50YWJsZSBhZGRyZXNzICovCisrZXh0ZXJuIHZvaWQgc29ja19ob3N0YWRkcihzdHJ1Y3QgaG9zdF9pbmZvICopOworICNkZWZpbmUgc29ja19tZXRob2RzKHIpIFwKKyAJeyAociktPmhvc3RuYW1lID0gc29ja19ob3N0bmFtZTsgKHIpLT5ob3N0YWRkciA9IHNvY2tfaG9zdGFkZHI7IH0KKyAKK0BAIC0xODIsNyArMjAzLDcgQEAKKyAgICogYmVoYXZpb3IuCisgICAqLworIAorLWV4dGVybiB2b2lkIHByb2Nlc3Nfb3B0aW9ucygpOwkJLyogZXhlY3V0ZSBvcHRpb25zICovCisrZXh0ZXJuIHZvaWQgcHJvY2Vzc19vcHRpb25zKGNoYXIgKiwgc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsvKiBleGVjdXRlIG9wdGlvbnMgKi8KKyBleHRlcm4gaW50IGRyeV9ydW47CQkJLyogdmVyaWZpY2F0aW9uIGZsYWcgKi8KKyAKKyAvKiBCdWcgd29ya2Fyb3VuZHMuICovCitAQCAtMjIxLDMgKzI0Miw3IEBACisgI2RlZmluZSBzdHJ0b2sJbXlfc3RydG9rCisgZXh0ZXJuIGNoYXIgKm15X3N0cnRvaygpOworICNlbmRpZgorKworK19fRU5EX0RFQ0xTCisrCisrI2VuZGlmCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3dlYWtfc3ltYm9scy5jIHRjcF93cmFwcGVyc183LjYvd2Vha19zeW1ib2xzLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvd2Vha19zeW1ib2xzLmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3dlYWtfc3ltYm9scy5jCTIwMDQtMDUtMDIgMTU6MzE6MDkuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDExIEBACisrIC8qCisrICAqIEAoIykgd2Vha19zeW1ib2xzLmggMS41IDk5LzEyLzI5IDIzOjUwCisrICAqIAorKyAgKiBBdXRob3I6IEFudGhvbnkgVG93bnMgPGFqdEBkZWJpYW4ub3JnPgorKyAgKi8KKysKKysjaWZkZWYgSEFWRV9XRUFLU1lNUworKyNpbmNsdWRlIDxzeXNsb2cuaD4KKytpbnQgZGVueV9zZXZlcml0eSA9IExPR19XQVJOSU5HOworK2ludCBhbGxvd19zZXZlcml0eSA9IFNFVkVSSVRZOyAKKysjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzE0X2NpZHJfc3VwcG9ydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzE0X2NpZHJfc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjU2ODVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTRfY2lkcl9zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsNjggQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNSB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41CTIwMDMtMDgtMjEgMDM6MTU6MzYuMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQkyMDAzLTA4LTIxIDAzOjE1OjMxLjAwMDAwMDAwMCArMDIwMAorQEAgLTkwLDYgKzkwLDEwIEBACisgcGF0dGVybiBgMTMxLjE1NS43Mi4wLzI1NS4yNTUuMjU0LjBcJyBtYXRjaGVzIGV2ZXJ5IGFkZHJlc3MgaW4gdGhlCisgcmFuZ2UgYDEzMS4xNTUuNzIuMFwnIHRocm91Z2ggYDEzMS4xNTUuNzMuMjU1XCcuCisgLklQIFwoYnUKKytBbiBleHByZXNzaW9uIG9mIHRoZSBmb3JtIGBuLm4ubi5uL21tJyBpcyBpbnRlcnByZXRlZCBhcyBhCisrYG5ldC9tYXNrbGVuZ3RoJyBwYWlyLCB3aGVyZSBgbW0nIGlzIHRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgYDEnCisrYml0cyBpbiB0aGUgbmV0bWFzayBhcHBsaWVkIHRvIHRoZSBgbi5uLm4ubicgYWRkcmVzcy4KKysuSVAgXChidQorIEFuIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYFtuOm46bjpuOm46bjpuOm5dL21cJyBpcyBpbnRlcnByZXRlZCBhcyBhCisgYFtuZXRdL3ByZWZpeGxlblwnIHBhaXIuIEFuIElQdjYgaG9zdCBhZGRyZXNzIGlzIG1hdGNoZWQgaWYKKyBgcHJlZml4bGVuXCcgYml0cyBvZiBgbmV0XCcgaXMgZXF1YWwgdG8gdGhlIGBwcmVmaXhsZW5cJyBiaXRzIG9mIHRoZQorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuYyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy5jCTIwMDMtMDgtMjEgMDM6MTU6MzYuMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuYwkyMDAzLTA4LTIxIDAzOjA5OjMwLjAwMDAwMDAwMCArMDIwMAorQEAgLTQxNyw3ICs0MTcsOCBAQAorICAgICBpZiAoKGFkZHIgPSBkb3RfcXVhZF9hZGRyKHN0cmluZykpID09IElOQUREUl9OT05FKQorIAlyZXR1cm4gKE5PKTsKKyAgICAgaWYgKChuZXQgPSBkb3RfcXVhZF9hZGRyKG5ldF90b2spKSA9PSBJTkFERFJfTk9ORQorLQl8fCAobWFzayA9IGRvdF9xdWFkX2FkZHIobWFza190b2spKSA9PSBJTkFERFJfTk9ORSkgeworKwl8fCAoKG1hc2sgPSBkb3RfcXVhZF9hZGRyKG1hc2tfdG9rKSkgPT0gSU5BRERSX05PTkUKKysJICAgICYmIChtYXNrID0gY2lkcl9tYXNrX2FkZHIobWFza190b2spKSA9PSAwKSkgeworICNpZm5kZWYgSU5FVDYKKyAJdGNwZF93YXJuKCJiYWQgbmV0L21hc2sgZXhwcmVzc2lvbjogJXMvJXMiLCBuZXRfdG9rLCBtYXNrX3Rvayk7CisgI2VuZGlmCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL21pc2MuYyB0Y3Bfd3JhcHBlcnNfNy42L21pc2MuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9taXNjLmMJMjAwMy0wOC0yMSAwMzoxNTozNi4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L21pc2MuYwkyMDAzLTA4LTIxIDAzOjA5OjMwLjAwMDAwMDAwMCArMDIwMAorQEAgLTEwNywzICsxMDcsMTcgQEAKKyAgICAgfQorICAgICByZXR1cm4gKHJ1bnMgPT0gNCA/IGluZXRfYWRkcihzdHIpIDogSU5BRERSX05PTkUpOworIH0KKysKKysvKiBjaWRyX21hc2tfYWRkciAtIGNvbnZlcnQgY2lkciBuZXRtYXNrIGxlbmd0aCB0byBpbnRlcm5hbCBmb3JtICovCisrCisrdW5zaWduZWQgbG9uZyBjaWRyX21hc2tfYWRkcihzdHIpCisrY2hhciAgICpzdHI7CisreworKyAgICBpbnQgICAgIG1hc2tiaXRzOworKworKyAgICBtYXNrYml0cyA9IGF0b2koc3RyKTsKKysgICAgaWYgKG1hc2tiaXRzIDwgMSB8fCBtYXNrYml0cyA+IDMyKQorKwlyZXR1cm4gKDApOworKyAgICByZXR1cm4gaHRvbmwoMHhGRkZGRkZGRiA8PCAoMzIgLSBtYXNrYml0cykpOworK30KKysKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZGNoay5jIHRjcF93cmFwcGVyc183LjYvdGNwZGNoay5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRjaGsuYwkyMDAzLTA4LTIxIDAzOjE1OjM2LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZGNoay5jCTIwMDMtMDgtMjEgMDM6MDk6MzAuMDAwMDAwMDAwICswMjAwCitAQCAtNDk3LDEyICs0OTcsMTIgQEAKKyAJaW50IG1hc2tfbGVuOworIAorIAlpZiAoKGRvdF9xdWFkX2FkZHIocGF0KSA9PSBJTkFERFJfTk9ORQorLQkgICAgfHwgZG90X3F1YWRfYWRkcihtYXNrKSA9PSBJTkFERFJfTk9ORSkKKysJICAgIHx8IGRvdF9xdWFkX2FkZHIobWFzaykgPT0gSU5BRERSX05PTkUgJiYgY2lkcl9tYXNrX2FkZHIobWFzaykgPT0gMCkKKyAJICAgICYmICghaXNfaW5ldDZfYWRkcihwYXQpCisgCQl8fCAoKG1hc2tfbGVuID0gYXRvaShtYXNrKSkgPCAwIHx8IG1hc2tfbGVuID4gMTI4KSkpCisgI2Vsc2UKKyAJaWYgKGRvdF9xdWFkX2FkZHIocGF0KSA9PSBJTkFERFJfTk9ORQorLQkgICAgfHwgZG90X3F1YWRfYWRkcihtYXNrKSA9PSBJTkFERFJfTk9ORSkKKysJICAgIHx8IGRvdF9xdWFkX2FkZHIobWFzaykgPT0gSU5BRERSX05PTkUgJiYgY2lkcl9tYXNrX2FkZHIobWFzaykgPT0gMCkKKyAjZW5kaWYKKyAJICAgIHRjcGRfd2FybigiJXMvJXM6IGJhZCBuZXQvbWFzayBwYXR0ZXJuIiwgcGF0LCBtYXNrKTsKKyAgICAgfSBlbHNlIGlmIChTVFJfRVEocGF0LCAiRkFJTCIpKSB7CQkvKiBvYnNvbGV0ZSAqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTVfbWF0Y2hfY2xhcmlmeS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzE1X21hdGNoX2NsYXJpZnkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NhNjg3NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzE1X21hdGNoX2NsYXJpZnkucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41IHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUJMjAwNC0wNC0yNSAxMjoxNzo1OS4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CTIwMDQtMDQtMjUgMTI6MTc6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtODksNiArODksOCBAQAorIGJpdHdpc2UgQU5EIG9mIHRoZSBhZGRyZXNzIGFuZCB0aGUgYG1hc2tcJy4gRm9yIGV4YW1wbGUsIHRoZSBuZXQvbWFzaworIHBhdHRlcm4gYDEzMS4xNTUuNzIuMC8yNTUuMjU1LjI1NC4wXCcgbWF0Y2hlcyBldmVyeSBhZGRyZXNzIGluIHRoZQorIHJhbmdlIGAxMzEuMTU1LjcyLjBcJyB0aHJvdWdoIGAxMzEuMTU1LjczLjI1NVwnLgorK2AyNTUuMjU1LjI1NS4yNTVcJyBpcyBub3QgYSB2YWxpZCBtYXNrIHZhbHVlLCBzbyBhIHNpbmdsZSBob3N0IGNhbiBiZQorK21hdGNoZWQganVzdCBieSBpdHMgSVAuCisgLklQIFwoYnUKKyBBbiBleHByZXNzaW9uIG9mIHRoZSBmb3JtIGBuLm4ubi5uL21tJyBpcyBpbnRlcnByZXRlZCBhcyBhCisgYG5ldC9tYXNrbGVuZ3RoJyBwYWlyLCB3aGVyZSBgbW0nIGlzIHRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgYDEnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9leHBhbmRfcmVtb3RlX3BvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9leHBhbmRfcmVtb3RlX3BvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA4NzM3NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L2V4cGFuZF9yZW1vdGVfcG9ydC5wYXRjaApAQCAtMCwwICsxLDczIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvZXZhbC5jIHRjcF93cmFwcGVyc183LjYvZXZhbC5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2V2YWwuYwkxOTk1LTAxLTMwIDE5OjUxOjQ2LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvZXZhbC5jCTIwMDQtMTEtMDQgMTM6NTk6MDEuMDAwMDAwMDAwICswMTAwCitAQCAtOTgsNiArOTgsMjggQEAKKyAgICAgfQorIH0KKyAKKysvKiBldmFsX3BvcnQgLSByZXR1cm4gc3RyaW5nIHdpdGggdGhlIHBvcnQgKi8KKytjaGFyICAgKmV2YWxfcG9ydChzYWRkcikKKysjaWZkZWYgSU5FVDYKKytzdHJ1Y3Qgc29ja2FkZHIgKnNhZGRyOworKyNlbHNlCisrc3RydWN0IHNvY2thZGRyX2luICpzYWRkcjsKKysjZW5kaWYKKyt7CisrICAgIHN0YXRpYyBjaGFyIHBvcnRbMTZdOworKyAgICBpZiAoc2FkZHIgIT0gMCkgeworKyAgICAgICAgc3ByaW50Zihwb3J0LCAiJXUiLAorKyNpZmRlZiBJTkVUNgorKyAgICAgICAgICAgIG50b2hzKCgoc3RydWN0IHNvY2thZGRyX2luICopc2FkZHIpLT5zaW5fcG9ydCkpOworKyNlbHNlCisrICAgICAgICAgICAgbnRvaHMoc2FkZHItPnNpbl9wb3J0KSk7CisrI2VuZGlmCisrICAgIH0gZWxzZSB7CisrCXN0cmNweShwb3J0LCAiMCIpOworKyAgICB9CisrICAgIHJldHVybiAocG9ydCk7CisrfQorKworIC8qIGV2YWxfY2xpZW50IC0gcmV0dXJuIHN0cmluZyB3aXRoIGFzIG11Y2ggYWJvdXQgdGhlIGNsaWVudCBhcyB3ZSBrbm93ICovCisgCisgY2hhciAgICpldmFsX2NsaWVudChyZXF1ZXN0KQorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNSB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41CTIwMDQtMTEtMDQgMTM6MTc6NDUuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQkyMDA0LTExLTA0IDEzOjU1OjMyLjAwMDAwMDAwMCArMDEwMAorQEAgLTE3NSw2ICsxNzUsOCBAQAorIHVuYXZhaWxhYmxlLgorIC5JUCAiJW4gKCVOKSIKKyBUaGUgY2xpZW50IChzZXJ2ZXIpIGhvc3QgbmFtZSAob3IgInVua25vd24iIG9yICJwYXJhbm9pZCIpLgorKy5JUCAiJXIgKCVSKSIKKytUaGUgY2xpZW50cyAoc2VydmVycykgcG9ydCBudW1iZXIgKG9yICIwIikuCisgLklQICVwCisgVGhlIGRhZW1vbiBwcm9jZXNzIGlkLgorIC5JUCAlcworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9wZXJjZW50X3guYyB0Y3Bfd3JhcHBlcnNfNy42L3BlcmNlbnRfeC5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3BlcmNlbnRfeC5jCTE5OTQtMTItMjggMTc6NDI6MzguMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9wZXJjZW50X3guYwkyMDA0LTExLTA0IDEzOjE5OjI5LjAwMDAwMDAwMCArMDEwMAorQEAgLTYzLDYgKzYzLDggQEAKKyAJCWNoID09ICduJyA/IGV2YWxfaG9zdG5hbWUocmVxdWVzdC0+Y2xpZW50KSA6CisgCQljaCA9PSAnTicgPyBldmFsX2hvc3RuYW1lKHJlcXVlc3QtPnNlcnZlcikgOgorIAkJY2ggPT0gJ3AnID8gZXZhbF9waWQocmVxdWVzdCkgOgorKwkJY2ggPT0gJ3InID8gZXZhbF9wb3J0KHJlcXVlc3QtPmNsaWVudC0+c2luKSA6CisrCQljaCA9PSAnUicgPyBldmFsX3BvcnQocmVxdWVzdC0+c2VydmVyLT5zaW4pIDoKKyAJCWNoID09ICdzJyA/IGV2YWxfc2VydmVyKHJlcXVlc3QpIDoKKyAJCWNoID09ICd1JyA/IGV2YWxfdXNlcihyZXF1ZXN0KSA6CisgCQljaCA9PSAnJScgPyAiJSIgOiAodGNwZF93YXJuKCJ1bnJlY29nbml6ZWQgJSUlYyIsIGNoKSwgIiIpOworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkLmggdGNwX3dyYXBwZXJzXzcuNi90Y3BkLmgKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZC5oCTIwMDQtMTEtMDQgMTM6MTc6NDUuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkLmgJMjAwNC0xMS0wNCAxMzoxOToxMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNDUsNiArMTQ1LDExIEBACisgZXh0ZXJuIGNoYXIgKmV2YWxfaG9zdGluZm8oc3RydWN0IGhvc3RfaW5mbyAqKTsJLyogaG9zdCBuYW1lIG9yIGFkZHJlc3MgKi8KKyBleHRlcm4gY2hhciAqZXZhbF9jbGllbnQoc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsvKiB3aGF0ZXZlciBpcyBhdmFpbGFibGUgKi8KKyBleHRlcm4gY2hhciAqZXZhbF9zZXJ2ZXIoc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsvKiB3aGF0ZXZlciBpcyBhdmFpbGFibGUgKi8KKysjaWZkZWYgSU5FVDYKKytleHRlcm4gY2hhciAqZXZhbF9wb3J0KHN0cnVjdCBzb2NrYWRkciAqKTsKKysjZWxzZQorK2V4dGVybiBjaGFyICpldmFsX3BvcnQoc3RydWN0IHNvY2thZGRyX2luICopOworKyNlbmRpZgorICNkZWZpbmUgZXZhbF9kYWVtb24ocikJKChyKS0+ZGFlbW9uKQkvKiBkYWVtb24gcHJvY2VzcyBuYW1lICovCisgI2RlZmluZSBldmFsX3BpZChyKQkoKHIpLT5waWQpCS8qIHByb2Nlc3MgaWQgKi8KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L2hhdmVfc3RyZXJyb3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9oYXZlX3N0cmVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYzU1NGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9oYXZlX3N0cmVycm9yLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9wZXJjZW50X20uYyB0Y3Bfd3JhcHBlcnNfNy42L3BlcmNlbnRfbS5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3BlcmNlbnRfbS5jCTE5OTQtMTItMjggMTc6NDI6MzcuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9wZXJjZW50X20uYwkyMDAzLTA4LTIxIDAyOjQ1OjMxLjAwMDAwMDAwMCArMDIwMAorQEAgLTI5LDExICsyOSwxNSBAQAorIAorICAgICB3aGlsZSAoKmJwID0gKmNwKQorIAlpZiAoKmNwID09ICclJyAmJiBjcFsxXSA9PSAnbScpIHsKKysjaWZkZWYgSEFWRV9TVFJFUlJPUgorKwkgICAgc3RyY3B5KGJwLCBzdHJlcnJvcihlcnJubykpOworKyNlbHNlCisgCSAgICBpZiAoZXJybm8gPCBzeXNfbmVyciAmJiBlcnJubyA+IDApIHsKKyAJCXN0cmNweShicCwgc3lzX2Vycmxpc3RbZXJybm9dKTsKKyAJICAgIH0gZWxzZSB7CisgCQlzcHJpbnRmKGJwLCAiVW5rbm93biBlcnJvciAlZCIsIGVycm5vKTsKKyAJICAgIH0KKysjZW5kaWYKKyAJICAgIGJwICs9IHN0cmxlbihicCk7CisgCSAgICBjcCArPSAyOworIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvbGRmbGFncy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L2xkZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JhMjE0ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L2xkZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitJbmRleDogdGNwX3dyYXBwZXJzXzcuNi5vcmlnL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnLm9yaWcvTWFrZWZpbGUJMjAwOS0wNC0wNiAxMDo1NTo0Ny4wMDAwMDAwMDAgKzAwMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvTWFrZWZpbGUJMjAwOS0wNC0wNiAxMDo1NzowNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC03NDgsMzEgKzc0OCwzMSBAQAorIAorICQoU0hMSUIpOiAkKFNITElCX09CSikKKyAJcm0gLWYgJChTSExJQikKKy0JJChDQykgLW8gJChTSExJQikgJChTSExJTktGTEFHUykgJChTSExJQl9PQkopCisrCSQoQ0MpICQoTERGTEFHUykgLW8gJChTSExJQikgJChTSExJTktGTEFHUykgJChTSExJQl9PQkopCisgCWxuIC1zZiAkKG5vdGRpciAkKFNITElCKSkgJChTSExJQlNPTUFKKQorIAlsbiAtc2YgJChub3RkaXIgJChTSExJQlNPTUFKKSkgJChTSExJQlNPKQorIAorIHRjcGQ6CXRjcGQubyAkKFNITElCKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgdGNwZC5vICQoU0hMSUJGTEFHUykKKysJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgdGNwZC5vICQoU0hMSUJGTEFHUykKKyAKKyBtaXNjZDoJbWlzY2QubyAkKExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAIG1pc2NkLm8gJChMSUIpICQoTElCUykKKysJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgbWlzY2QubyAkKExJQikgJChMSUJTKQorIAorIHNhZmVfZmluZ2VyOiBzYWZlX2Zpbmdlci5vICQoU0hMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBzYWZlX2Zpbmdlci5vICQoU0hMSUJGTEFHUykKKysJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgc2FmZV9maW5nZXIubyAkKFNITElCRkxBR1MpCisgCisgVENQRE1BVENIX09CSiA9IHRjcGRtYXRjaC5vIGZha2Vsb2cubyBpbmV0Y2YubyBzY2FmZm9sZC5vCisgCisgdGNwZG1hdGNoOiAkKFRDUERNQVRDSF9PQkopICQoU0hMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKFRDUERNQVRDSF9PQkopICQoU0hMSUJGTEFHUykKKysJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgJChUQ1BETUFUQ0hfT0JKKSAkKFNITElCRkxBR1MpCisgCisgdHJ5LWZyb206IHRyeS1mcm9tLm8gZmFrZWxvZy5vICQoU0hMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCB0cnktZnJvbS5vIGZha2Vsb2cubyAkKFNITElCRkxBR1MpCisrCSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpIC1vICRAIHRyeS1mcm9tLm8gZmFrZWxvZy5vICQoU0hMSUJGTEFHUykKKyAKKyBUQ1BEQ0hLX09CSiA9IHRjcGRjaGsubyBmYWtlbG9nLm8gaW5ldGNmLm8gc2NhZmZvbGQubworIAorIHRjcGRjaGs6ICQoVENQRENIS19PQkopICQoU0hMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKFRDUERDSEtfT0JKKSAkKFNITElCRkxBR1MpCisrCSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpIC1vICRAICQoVENQRENIS19PQkopICQoU0hMSUJGTEFHUykKKyAKKyBzaGFyOgkkKEtJVCkKKyAJQHNoYXIgJChLSVQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9tYWtlZmlsZS1maXgtcGFyYWxsZWwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9tYWtlZmlsZS1maXgtcGFyYWxsZWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk3MzUyNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L21ha2VmaWxlLWZpeC1wYXJhbGxlbC5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIGRhZjg5ZDI3MmU1MWIyMTUzMDE1Y2U3ZjU0YWIwYjg2MTgyZTY0YzEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMjggSmFuIDIwMTUgMTg6NTA6MjMgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gTWFrZWZpbGU6IGZpeCBmb3IgcGFyYWxsZWwgYnVpbGQKKworRml4ZWQ6CittYWtlOiAqKiogTm8gcnVsZSB0byBtYWtlIHRhcmdldCBgY2ZsYWdzJywgbmVlZGVkIGJ5IGB0Y3BkLm8nLiAgU3RvcC4KKworTGV0ICJjZmxhZ3MiIGRlcGVuZCBvbiBjb25maWctY2hlY2sgd2hpY2ggZ2VuZXJhdGVzIGNmbGdhcyB3aWxsIGZpeCB0aGUKK3Byb2JsZW0uCisKK0Fsc28gZml4ZWQ6CitGYXRhbCBlcnJvcjogY2FuJ3QgY3JlYXRlIHNoYXJlZC9ob3N0c19hY2Nlc3MubzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZSB8ICAgIDUgKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCBmZTVlNzMyLi5mNDY4NzUxIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtNzE0LDYgKzcxNCw3IEBAIEtJVAk9IFJFQURNRSBtaXNjZC5jIHRjcGQuYyBmcm9taG9zdC5jIGhvc3RzX2FjY2Vzcy5jIHNoZWxsX2NtZC5jIFwKKyBMSUIJPSBsaWJ3cmFwLmEKKyAKKyBzaGFyZWQvJS5vOiAlLmMKKysJWyAtZCBzaGFyZWQgXSB8fCBta2RpciAtcCBzaGFyZWQKKyAJJChDQykgJChDRkxBR1MpICQoU0hDRkxBR1MpIC1jICQ8IC1vICRACisgCisgU09NQUpPUiA9IDAKK0BAIC03MzAsNiArNzMxLDggQEAgU0hMSUJfT0JKPSAkKGFkZHByZWZpeCBzaGFyZWQvLCAkKExJQl9PQkopKTsKKyAKKyBhbGwgb3RoZXI6IGNvbmZpZy1jaGVjayB0Y3BkIHRjcGRtYXRjaCB0cnktZnJvbSBzYWZlX2ZpbmdlciB0Y3BkY2hrICQoTElCKQorIAorK2NmbGFnczogY29uZmlnLWNoZWNrCisrCisgIyBJbnZhbGlkYXRlIGFsbCBvYmplY3QgZmlsZXMgd2hlbiB0aGUgY29tcGlsZXIgb3B0aW9ucyAoQ0ZMQUdTKSBoYXZlIGNoYW5nZWQuCisgCisgY29uZmlnLWNoZWNrOgorQEAgLTczOSw3ICs3NDIsNyBAQCBjb25maWctY2hlY2s6CisgCXRoZW4gcm0gY2ZsYWdzLm5ldyA7IFwKKyAJZWxzZSBtdiBjZmxhZ3MubmV3IGNmbGFncyA7IFwKKyAJZmkgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbAorLQlAaWYgWyAhIC1kIHNoYXJlZCBdOyB0aGVuIG1rZGlyIHNoYXJlZDsgZmkKKysJQFsgLWQgc2hhcmVkIF0gfHwgbWtkaXIgLXAgc2hhcmVkCisgCisgJChMSUIpOgkkKExJQl9PQkopCisgCXJtIC1mICQoTElCKQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L21hbl9mcm9taG9zdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L21hbl9mcm9taG9zdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWJkN2QzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvbWFuX2Zyb21ob3N0LnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuMyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy4zCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy4zCTIwMDQtMDQtMjUgMDA6MTA6NDguMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuMwkyMDA0LTA0LTI1IDAwOjA5OjM2LjAwMDAwMDAwMCArMDIwMAorQEAgLTE0LDYgKzE0LDkgQEAKKyBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0X3NldChyZXF1ZXN0LCBrZXksIHZhbHVlLCAuLi4sIDApCisgc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKyAKKyt2b2lkIGZyb21ob3N0KHJlcXVlc3QpCisrc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKysKKyBpbnQgaG9zdHNfYWNjZXNzKHJlcXVlc3QpCisgc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKyAKK0BAIC02MCw2ICs2Myw3IEBACisgaXMgYXZhaWxhYmxlLCBob3N0IG5hbWVzIGFuZCBjbGllbnQgdXNlciBuYW1lcyBhcmUgbG9va2VkIHVwIG9uIGRlbWFuZCwKKyB1c2luZyB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUgYXMgYSBjYWNoZS4gIGhvc3RzX2FjY2VzcygpIHJldHVybnMgemVybyBpZgorIGFjY2VzcyBzaG91bGQgYmUgZGVuaWVkLgorK2Zyb21ob3N0KCkgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGhvc3RzX2FjY2VzcygpLgorIC5QUAorIGhvc3RzX2N0bCgpIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIHJlcXVlc3RfaW5pdCgpIGFuZCBob3N0c19hY2Nlc3MoKQorIHJvdXRpbmVzIHdpdGggYSBwZXJoYXBzIG1vcmUgY29udmVuaWVudCBpbnRlcmZhY2UgKHRob3VnaCBpdCBkb2VzIG5vdApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvcmVuYW1lX3N0cmluZ3NfdmFyaWFibGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9yZW5hbWVfc3RyaW5nc192YXJpYWJsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjUwNjAwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvcmVuYW1lX3N0cmluZ3NfdmFyaWFibGUucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorU1RSSU5HUyBuYW1lIGNvbmZsaWN0cyB3aXRoIHZhcmlhYmxlIGZvciBzdHJpbmdzIHRvb2xzIChlLmcuIGk1ODYtb2UtbGludXgtc3RyaW5ncykKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworLS0tIHRjcF93cmFwcGVyc183LjYvTWFrZWZpbGUub3JpZwkyMDEzLTA0LTE4IDIzOjQxOjU4LjI3Nzk4MTc0MCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvTWFrZWZpbGUJMjAxMy0wNC0xOCAyMzo0Mjo0Mi41MTM5Nzg5NjYgKzAyMDAKK0BAIC0zMDksNyArMzA5LDcgQEAKKyBweXJhbWlkOgorIAlAbWFrZSBSRUFMX0RBRU1PTl9ESVI9JChSRUFMX0RBRU1PTl9ESVIpIFNUWUxFPSQoU1RZTEUpIFwKKyAJTElCUz0gUkFOTElCPXJhbmxpYiBBUkZMQUdTPXJ2IEFVWF9PQko9ImVudmlyb24ubyB2ZnByaW50Zi5vIiBcCistCVNUUklOR1M9Ii1Ec3RyY2hyPWluZGV4IC1Ec3RycmNocj1yaW5kZXggLURtZW1jbXA9YmNtcCAtRG5vX21lbWNweSIgXAorKwlTVFJJTkdTX0ZMQUdTPSItRHN0cmNocj1pbmRleCAtRHN0cnJjaHI9cmluZGV4IC1EbWVtY21wPWJjbXAgLURub19tZW1jcHkiIFwKKyAJTkVUR1JPVVA9Ii1ETkVUR1JPVVAgLURVU0VfR0VURE9NQUlOIiBUTEk9IGFsbAorIAorICMgVW50ZXN0ZWQuCitAQCAtNDE5LDcgKzQxOSw3IEBACisgIyBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBpZiB5b3VyIEMgbGlicmFyeSBkb2VzIG5vdCBwcm92aWRlIHRoZQorICMgc3RyY2hyL3N0cnJjaHIvbWVtY21wIHJvdXRpbmVzLCBidXQgY29tZXMgd2l0aCBpbmRleC9yaW5kZXgvYmNtcC4KKyAjCistI1NUUklOR1M9IC1Ec3RyY2hyPWluZGV4IC1Ec3RycmNocj1yaW5kZXggLURtZW1jbXA9YmNtcCAtRG5vX21lbWNweQorKyNTVFJJTkdTX0ZMQUdTPSAtRHN0cmNocj1pbmRleCAtRHN0cnJjaHI9cmluZGV4IC1EbWVtY21wPWJjbXAgLURub19tZW1jcHkKKyAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICMgU3lzdGVtIGRlcGVuZGVuY2llczogc2VsZWN0aW9uIG9mIG5vbi1kZWZhdWx0IG9iamVjdCBsaWJyYXJpZXMuCitAQCAtNjkwLDcgKzY5MCw3IEBACisgCSQoQlVHUykgJChTWVNUWVBFKSAkKEFVVEgpICQoVU1BU0spIFwKKyAJLURSRUFMX0RBRU1PTl9ESVI9XCIkKFJFQUxfREFFTU9OX0RJUilcIiAkKFNUWUxFKSAkKEtJTExfT1BUKSBcCisgCS1EU0VWRVJJVFk9JChTRVZFUklUWSkgLURSRkM5MzFfVElNRU9VVD0kKFJGQzkzMV9USU1FT1VUKSBcCistCSQoVUNIQVIpICQoVEFCTEVTKSAkKFNUUklOR1MpICQoVExJKSAkKEVYVFJBX0NGTEFHUykgJChET1QpIFwKKysJJChVQ0hBUikgJChUQUJMRVMpICQoU1RSSU5HU19GTEFHUykgJChUTEkpICQoRVhUUkFfQ0ZMQUdTKSAkKERPVCkgXAorIAkkKFZTWVNMT0cpICQoSE9TVE5BTUUpCisgCisgTElCX09CSj0gaG9zdHNfYWNjZXNzLm8gb3B0aW9ucy5vIHNoZWxsX2NtZC5vIHJmYzkzMS5vIGV2YWwubyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9yZXN0b3JlX3NpZ2FsYXJtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvcmVzdG9yZV9zaWdhbGFybS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODc1YjgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvcmVzdG9yZV9zaWdhbGFybS5wYXRjaApAQCAtMCwwICsxLDM5IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvcmZjOTMxLmMgdGNwX3dyYXBwZXJzXzcuNi9yZmM5MzEuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9yZmM5MzEuYwkyMDA0LTA4LTI5IDE4OjQwOjA4LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvcmZjOTMxLmMJMjAwNC0wOC0yOSAxODo0MDowMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC05Miw2ICs5Miw4IEBACisgICAgIGNoYXIgICAqY3A7CisgICAgIGNoYXIgICAqcmVzdWx0ID0gdW5rbm93bjsKKyAgICAgRklMRSAgICpmcDsKKysgICAgdW5zaWduZWQgc2F2ZWRfdGltZW91dDsKKysgICAgc3RydWN0IHNpZ2FjdGlvbiBuYWN0LCBvYWN0OworIAorICNpZmRlZiBJTkVUNgorICAgICAvKiBhZGRyZXNzIGZhbWlseSBtdXN0IGJlIHRoZSBzYW1lICovCitAQCAtMTM0LDcgKzEzNiwxMiBAQAorIAkgKi8KKyAKKyAJaWYgKHNldGptcCh0aW1lYnVmKSA9PSAwKSB7CistCSAgICBzaWduYWwoU0lHQUxSTSwgdGltZW91dCk7CisrCSAgICAvKiBTYXZlIFNJR0FMUk0gdGltZXIgYW5kIGhhbmRsZXIuIFN1ZGhlZXIgQWJkdWwtU2FsYW0sIFNVTi4gKi8KKysJICAgIHNhdmVkX3RpbWVvdXQgPSBhbGFybSgwKTsKKysJICAgIG5hY3Quc2FfaGFuZGxlciA9IHRpbWVvdXQ7CisrCSAgICBuYWN0LnNhX2ZsYWdzID0gMDsKKysJICAgICh2b2lkKSBzaWdlbXB0eXNldCgmbmFjdC5zYV9tYXNrKTsKKysJICAgICh2b2lkKSBzaWdhY3Rpb24oU0lHQUxSTSwgJm5hY3QsICZvYWN0KTsKKyAJICAgIGFsYXJtKHJmYzkzMV90aW1lb3V0KTsKKyAKKyAJICAgIC8qCitAQCAtMjIzLDYgKzIzMCwxMCBAQAorIAkgICAgfQorIAkgICAgYWxhcm0oMCk7CisgCX0KKysJLyogUmVzdG9yZSBTSUdBTFJNIHRpbWVyIGFuZCBoYW5kbGVyLiBTdWRoZWVyIEFiZHVsLVNhbGFtLCBTVU4uICovCisrCSh2b2lkKSBzaWdhY3Rpb24oU0lHQUxSTSwgJm9hY3QsIE5VTEwpOworKwlpZiAoc2F2ZWRfdGltZW91dCA+IDApCisrCSAgICBhbGFybShzYXZlZF90aW1lb3V0KTsKKyAJZmNsb3NlKGZwKTsKKyAgICAgfQorICAgICBTVFJOX0NQWShkZXN0LCByZXN1bHQsIFNUUklOR19MRU5HVEgpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvcmZjOTMxLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9yZmM5MzEuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjNmNGYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvcmZjOTMxLmRpZmYKQEAgLTAsMCArMSw0MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU5wIHRjcF93cmFwcGVyc183LjYub3JpZy9zY2FmZm9sZC5jIHRjcF93cmFwcGVyc183LjYvc2NhZmZvbGQuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9zY2FmZm9sZC5jCTIwMDUtMDMtMDkgMTg6MjI6MDQuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9zY2FmZm9sZC5jCTIwMDUtMDMtMDkgMTg6MjA6NDcuMDAwMDAwMDAwICswMTAwCitAQCAtMjM3LDEwICsyMzcsMTcgQEAgc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKyAKKyAvKiBBUkdTVVNFRCAqLworIAorLXZvaWQgICAgcmZjOTMxKHJlcXVlc3QpCistc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKyt2b2lkICAgIHJmYzkzMShybXRfc2luLCBvdXJfc2luLCBkZXN0KQorKyNpZmRlZiBJTkVUNgorK3N0cnVjdCBzb2NrYWRkciAqcm10X3NpbjsKKytzdHJ1Y3Qgc29ja2FkZHIgKm91cl9zaW47CisrI2Vsc2UKKytzdHJ1Y3Qgc29ja2FkZHJfaW4gKnJtdF9zaW47Cisrc3RydWN0IHNvY2thZGRyX2luICpvdXJfc2luOworKyNlbmRpZgorK2NoYXIgICAqZGVzdDsKKyB7CistICAgIHN0cmNweShyZXF1ZXN0LT51c2VyLCB1bmtub3duKTsKKysgICAgc3RyY3B5KGRlc3QsIHVua25vd24pOworIH0KKyAKKyAvKiBjaGVja19wYXRoIC0gZXhhbWluZSBhY2Nlc3NpYmlsaXR5ICovCitkaWZmIC1ydU5wIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkLmggdGNwX3dyYXBwZXJzXzcuNi90Y3BkLmgKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZC5oCTIwMDUtMDMtMDkgMTg6MjI6MDQuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkLmgJMjAwNS0wMy0wOSAxODoyMToyMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC04Myw3ICs4MywxMSBAQCBleHRlcm4gaW50IGhvc3RzX2FjY2VzcyhzdHJ1Y3QgcmVxdWVzdF9pCisgZXh0ZXJuIHZvaWQgc2hlbGxfY21kKGNoYXIgKik7CQkvKiBleGVjdXRlIHNoZWxsIGNvbW1hbmQgKi8KKyBleHRlcm4gY2hhciAqcGVyY2VudF94KGNoYXIgKiwgaW50LCBjaGFyICosIHN0cnVjdCByZXF1ZXN0X2luZm8gKik7CisgCQkJCQkvKiBkbyAlPGNoYXI+IGV4cGFuc2lvbiAqLworKyNpZmRlZiBJTkVUNgorIGV4dGVybiB2b2lkIHJmYzkzMShzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHNvY2thZGRyICosIGNoYXIgKik7CisrI2Vsc2UKKytleHRlcm4gdm9pZCByZmM5MzEoc3RydWN0IHNvY2thZGRyX2luICosIHN0cnVjdCBzb2NrYWRkcl9pbiAqLCBjaGFyICopOworKyNlbmRpZgorIAkJCQkJLyogY2xpZW50IG5hbWUgZnJvbSBSRkMgOTMxIGRhZW1vbiAqLworIGV4dGVybiB2b2lkIGNsZWFuX2V4aXQoc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsJLyogY2xlYW4gdXAgYW5kIGV4aXQgKi8KKyBleHRlcm4gdm9pZCByZWZ1c2Uoc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsJLyogY2xlYW4gdXAgYW5kIGV4aXQgKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NhZmVfZmluZ2VyLjggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zYWZlX2Zpbmdlci44Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NTYxNmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zYWZlX2Zpbmdlci44CkBAIC0wLDAgKzEsMzQgQEAKKy5USCBTQUZFX0ZJTkdFUiA4ICIyMXRoIEp1bmUgMTk5NyIgTGludXggIkxpbnV4IFByb2dyYW1tZXIncyBNYW51YWwiCisuU0ggTkFNRQorc2FmZV9maW5nZXIgXC0gZmluZ2VyIGNsaWVudCB3cmFwcGVyIHRoYXQgcHJvdGVjdHMgYWdhaW5zdCBuYXN0eSBzdHVmZgorZnJvbSBmaW5nZXIgc2VydmVycworLlNIIFNZTk9QU0lTCisuQiBzYWZlX2ZpbmdlciBbZmluZ2VyX29wdGlvbnNdCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgc2FmZV9maW5nZXIKK2NvbW1hbmQgcHJvdGVjdHMgYWdhaW5zdCBuYXN0eSBzdHVmZiBmcm9tIGZpbmdlciBzZXJ2ZXJzLiBVc2UgdGhpcworcHJvZ3JhbSBmb3IgYXV0b21hdGljIHJldmVyc2UgZmluZ2VyIHByb2JlcyBmcm9tIHRoZQorLkIgdGNwX3dyYXBwZXIKKy5CICh0Y3BkKQorLCBub3QgdGhlIHJhdyBmaW5nZXIgY29tbWFuZC4gVGhlCisuQiBzYWZlX2ZpbmdlcgorY29tbWFuZCBtYWtlcyBzdXJlIHRoYXQgdGhlIGZpbmdlciBjbGllbnQgaXMgbm90IHJ1biB3aXRoIHJvb3QKK3ByaXZpbGVnZXMuIEl0IGFsc28gcnVucyB0aGUgZmluZ2VyIGNsaWVudCB3aXRoIGEgZGVmaW5lZCBQQVRICitlbnZpcm9ubWVudC4KKy5CIHNhZmVfZmluZ2VyCit3aWxsIGFsc28gcHJvdGVjdCB5b3UgZnJvbSBwcm9ibGVtcyBjYXVzZWQgYnkgdGhlIG91dHB1dCBvZiBzb21lCitmaW5nZXIgc2VydmVycy4gVGhlIHByb2JsZW06IHNvbWUgcHJvZ3JhbXMgbWF5IHJlYWN0IHRvIHN0dWZmIGluCit0aGUgZmlyc3QgY29sdW1uLiBPdGhlciBwcm9ncmFtcyBtYXkgZ2V0IHVwc2V0IGJ5IHRocmFzaCBhbnl3aGVyZQorb24gYSBsaW5lLiBGaWxlIHN5c3RlbXMgbWF5IGZpbGwgdXAgYXMgdGhlIGZpbmdlciBzZXJ2ZXIga2VlcHMKK3NlbmRpbmcgZGF0YS4gVGV4dCBlZGl0b3JzIG1heSBib21iIG91dCBvbiBleHRyZW1lbHkgbG9uZyBsaW5lcy4KK1RoZSBmaW5nZXIgc2VydmVyIG1heSB0YWtlIGZvcmV2ZXIgYmVjYXVzZSBpdCBpcyBzb21laG93IHdlZGdlZC4KKy5CIHNhZmVfZmluZ2VyCit0YWtlcyBjYXJlIG9mIGFsbCB0aGlzIGJhZG5lc3MuCisuU0ggU0VFIEFMU08KKy5CUiBob3N0c19hY2Nlc3MgKDUpLAorLkJSIGhvc3RzX29wdGlvbnMgKDUpLAorLkJSIHRjcGQgKDgpCisuU0ggQVVUSE9SCitXaWV0c2UgVmVuZW1hLCBFaW5kaG92ZW4gVW5pdmVyc2l0eSBvZiBUZWNobm9sb2d5LCBUaGUgTmV0aGVybGFuZHMuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NhZmVfZmluZ2VyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc2FmZV9maW5nZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMyYWZlZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NhZmVfZmluZ2VyLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworLS0tIHRjcC13cmFwcGVycy03LjYtaXB2Ni4xLm9yaWcvc2FmZV9maW5nZXIuYworKysrIHRjcC13cmFwcGVycy03LjYtaXB2Ni4xL3NhZmVfZmluZ2VyLmMKK0BAIC0yNiwyMSArMjYsMjQgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8cHdkLmg+CisrI2luY2x1ZGUgPHN5c2xvZy5oPgorIAorIGV4dGVybiB2b2lkIGV4aXQoKTsKKyAKKyAvKiBMb2NhbCBzdHVmZiAqLworIAorLWNoYXIgICAgcGF0aFtdID0gIlBBVEg9L2JpbjovdXNyL2JpbjovdXNyL3VjYjovdXNyL2JzZDovZXRjOi91c3IvZXRjOi91c3Ivc2JpbiI7CisrY2hhciAgICBwYXRoW10gPSAiUEFUSD0vYmluOi91c3IvYmluOi9zYmluOi91c3Ivc2JpbiI7CisgCisgI2RlZmluZQlUSU1FX0xJTUlUCTYwCQkvKiBEbyBub3Qga2VlcCBsaXN0aW5naW5nIGZvcmV2ZXIgKi8KKyAjZGVmaW5lCUlOUFVUX0xFTkdUSAkxMDAwMDAJCS8qIERvIG5vdCBrZWVwIGxpc3RpbmdpbmcgZm9yZXZlciAqLworICNkZWZpbmUJTElORV9MRU5HVEgJMTI4CQkvKiBFZGl0b3JzIGNhbiBjaG9rZSBvbiBsb25nIGxpbmVzICovCisgI2RlZmluZQlGSU5HRVJfUFJPR1JBTQkiZmluZ2VyIgkvKiBNb3N0LCBpZiBub3QgYWxsLCBVTklYIHN5c3RlbXMgKi8KKyAjZGVmaW5lCVVOUFJJVl9OQU1FCSJub2JvZHkiCS8qIFByZWZlcnJlZCBwcml2aWxlZ2UgbGV2ZWwgKi8KKy0jZGVmaW5lCVVOUFJJVl9VR0lECTMyNzY3CQkvKiBEZWZhdWx0IHVpZCBhbmQgZ2lkICovCisrI2RlZmluZQlVTlBSSVZfVUdJRAk2NTUzNAkJLyogRGVmYXVsdCB1aWQgYW5kIGdpZCAqLworIAorIGludCAgICAgZmluZ2VyX3BpZDsKKytpbnQJYWxsb3dfc2V2ZXJpdHkgPSBTRVZFUklUWTsKKytpbnQJZGVueV9zZXZlcml0eSA9IExPR19XQVJOSU5HOworIAorIHZvaWQgICAgY2xlYW51cChzaWcpCisgaW50ICAgICBzaWc7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zaWdfZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc2lnX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDdlYTA0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc2lnX2ZpeC5wYXRjaApAQCAtMCwwICsxLDM2IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKyogTW9uIEZlYiAxMCAyMDAzIEhhcmFsZCBIb3llciA8aGFyYWxkQHJlZGhhdC5kZT4gNy42LTI5CistIGFkZGVkIHNlY3VyaXR5IHBhdGNoIHRjcF93cmFwcGVycy03LjYtc2lnLnBhdGNoCisKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy5jLnNpZwkyMDAzLTAyLTEwIDE2OjE4OjMxLjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMJMjAwMy0wMi0xMCAxNjo1MDozOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC02Niw2ICs2Niw3IEBACisgCisgI2RlZmluZQlZRVMJCTEKKyAjZGVmaW5lCU5PCQkwCisrI2RlZmluZSBFUlIgICAgICAgICAgICAgLTEKKyAKKyAgLyoKKyAgICogVGhlc2UgdmFyaWFibGVzIGFyZSBnbG9iYWxseSB2aXNpYmxlIHNvIHRoYXQgdGhleSBjYW4gYmUgcmVkaXJlY3RlZCBpbgorQEAgLTEyOSw5ICsxMjksOSBAQAorIAlyZXR1cm4gKHZlcmRpY3QgPT0gQUNfUEVSTUlUKTsKKyAgICAgaWYgKHRhYmxlX21hdGNoKGhvc3RzX2FsbG93X3RhYmxlLCByZXF1ZXN0KSkKKyAJcmV0dXJuIChZRVMpOworLSAgICBpZiAodGFibGVfbWF0Y2goaG9zdHNfZGVueV90YWJsZSwgcmVxdWVzdCkpCistCXJldHVybiAoTk8pOworLSAgICByZXR1cm4gKFlFUyk7CisrICAgIGlmICh0YWJsZV9tYXRjaChob3N0c19kZW55X3RhYmxlLCByZXF1ZXN0KSA9PSBOTykKKysJcmV0dXJuIChZRVMpOworKyAgICByZXR1cm4gKE5PKTsKKyB9CisgCisgLyogdGFibGVfbWF0Y2ggLSBtYXRjaCB0YWJsZSBlbnRyaWVzIHdpdGggKGRhZW1vbiwgY2xpZW50KSBwYWlyICovCitAQCAtMTc1LDYgKzE3NSw3IEBACisgCSh2b2lkKSBmY2xvc2UoZnApOworICAgICB9IGVsc2UgaWYgKGVycm5vICE9IEVOT0VOVCkgeworIAl0Y3BkX3dhcm4oImNhbm5vdCBvcGVuICVzOiAlbSIsIHRhYmxlKTsKKysJbWF0Y2ggPSBFUlI7CisgICAgIH0KKyAgICAgaWYgKG1hdGNoKSB7CisgCWlmIChob3N0c19hY2Nlc3NfdmVyYm9zZSA+IDEpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zaWdsb25nam1wLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc2lnbG9uZ2ptcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmRkNjM0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc2lnbG9uZ2ptcC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TnAgdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3JmYzkzMS5jIHRjcF93cmFwcGVyc183LjYvcmZjOTMxLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvcmZjOTMxLmMJMjAwNC0wOC0yOSAxODo0MjoyNS4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3JmYzkzMS5jCTIwMDQtMDgtMjkgMTg6NDE6MDQuMDAwMDAwMDAwICswMjAwCitAQCAtMzMsNyArMzMsNyBAQCBzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpIHJmYzkzMS5jIDEuCisgCisgaW50ICAgICByZmM5MzFfdGltZW91dCA9IFJGQzkzMV9USU1FT1VUOy8qIEdsb2JhbCBzbyBpdCBjYW4gYmUgY2hhbmdlZCAqLworIAorLXN0YXRpYyBqbXBfYnVmIHRpbWVidWY7Cisrc3RhdGljIHNpZ2ptcF9idWYgdGltZWJ1ZjsKKyAKKyAvKiBmc29ja2V0IC0gb3BlbiBzdGRpbyBzdHJlYW0gb24gdG9wIG9mIHNvY2tldCAqLworIAorQEAgLTYyLDcgKzYyLDcgQEAgaW50ICAgICBwcm90b2NvbDsKKyBzdGF0aWMgdm9pZCB0aW1lb3V0KHNpZykKKyBpbnQgICAgIHNpZzsKKyB7CistICAgIGxvbmdqbXAodGltZWJ1Ziwgc2lnKTsKKysgICAgc2lnbG9uZ2ptcCh0aW1lYnVmLCBzaWcpOworIH0KKyAKKyAvKiByZmM5MzEgLSByZXR1cm4gcmVtb3RlIHVzZXIgbmFtZSwgZ2l2ZW4gc29ja2V0IHN0cnVjdHVyZXMgKi8KK0BAIC0xMzUsNyArMTM1LDcgQEAgY2hhciAgICpkZXN0OworIAkgKiBTZXQgdXAgYSB0aW1lciBzbyB3ZSB3b24ndCBnZXQgc3R1Y2sgd2hpbGUgd2FpdGluZyBmb3IgdGhlIHNlcnZlci4KKyAJICovCisgCistCWlmIChzZXRqbXAodGltZWJ1ZikgPT0gMCkgeworKwlpZiAoc2lnc2V0am1wKHRpbWVidWYsIDApID09IDApIHsKKyAJICAgIC8qIFNhdmUgU0lHQUxSTSB0aW1lciBhbmQgaGFuZGxlci4gU3VkaGVlciBBYmR1bC1TYWxhbSwgU1VOLiAqLworIAkgICAgc2F2ZWRfdGltZW91dCA9IGFsYXJtKDApOworIAkgICAgbmFjdC5zYV9oYW5kbGVyID0gdGltZW91dDsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NvY2tsZW5fdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NvY2tsZW5fdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTQ2ZGY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc29ja2xlbl90LnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK2NvbW1pdCA4OGI2OTg0ZWYwYmYzYjcwM2MxYzg1MTA5MjY2MmI5NWU5MWRiMWZmCitBdXRob3I6IGZhcnJhaCByYXNoaWQgPGZhcnJhaC5yYXNoaWRAd2luZHJpdmVyLmNvbT4KK0RhdGU6ICAgVHVlIEZlYiAxMiAwOTo1Mzo1MCAyMDEzIC0wNTAwCisKKyAgICB0Y3Atd3JhcHBlcnMgU3VwcG9ydCBmb3IgYnVpbGRpbmcgd2l0aCBnbGliYworICAgIAorICAgIEFkZGVkIHN1cHBvcnQgZm9yIHNvY2tsZW5fdCB0eXBlIHRvIGxlbiBhcmd1bWVudCBwYXNzZWQgdG8gc29ja2V0IHJlbGF0ZWQKKyAgICBjYWxscy4gVGhpcyBmaXhlcyBhIGJ1ZyB0aGF0IGNhdXNlcyB0Y3Agd3JhcHBlcnMgdG8gZmFpbCB3aGVuIHVzaW5nIHNzaGQuCisgICAgCisgICAgVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogZmFycmFoIHJhc2hpZCA8ZmFycmFoLnJhc2hpZEB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvZml4X29wdGlvbnMuYyBiL2ZpeF9vcHRpb25zLmMKK2luZGV4IDc0NzNhZGYuLmZlMmI0NDIgMTAwNjQ0CistLS0gYS9maXhfb3B0aW9ucy5jCisrKysgYi9maXhfb3B0aW9ucy5jCitAQCAtMzgsNyArMzgsMTIgQEAgc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKyAjaWZkZWYgSVBfT1BUSU9OUworICAgICB1bnNpZ25lZCBjaGFyIG9wdGJ1ZltCVUZGRVJfU0laRSAvIDNdLCAqY3A7CisgICAgIGNoYXIgICAgbGJ1ZltCVUZGRVJfU0laRV0sICpscDsKKy0gICAgaW50ICAgICBvcHRzaXplID0gc2l6ZW9mKG9wdGJ1ZiksIGlwcHJvdG87CisrI2lmZGVmIF9fR0xJQkNfXworKyAgICBzb2NrbGVuX3QgIG9wdHNpemUgPSBzaXplb2Yob3B0YnVmKTsKKysjZWxzZQorKyAgICBpbnQgICAgIG9wdHNpemUgPSBzaXplb2Yob3B0YnVmKTsKKysjZW5kaWYKKysgICAgaW50IGlwcHJvdG87CisgICAgIHN0cnVjdCBwcm90b2VudCAqaXA7CisgICAgIGludCAgICAgZmQgPSByZXF1ZXN0LT5mZDsKKyAgICAgdW5zaWduZWQgaW50IG9wdDsKK2RpZmYgLS1naXQgYS9zb2NrZXQuYyBiL3NvY2tldC5jCitpbmRleCA0YjJjNTc1Li5hMGQyOTg3IDEwMDY0NAorLS0tIGEvc29ja2V0LmMKKysrKyBiL3NvY2tldC5jCitAQCAtOTUsNyArOTUsMTEgQEAgc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKyAgICAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiBjbGllbnQ7CisgICAgIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2VydmVyOworICNlbmRpZgorKyNpZmRlZiBfX0dMSUJDX18KKysgICAgc29ja2xlbl90ICBsZW47CisrI2Vsc2UKKyAgICAgaW50ICAgICBsZW47CisrI2VuZGlmCisgICAgIGNoYXIgICAgYnVmW0JVRlNJWl07CisgICAgIGludCAgICAgZmQgPSByZXF1ZXN0LT5mZDsKKyAKK0BAIC00MjYsNyArNDMwLDExIEBAIGludCAgICAgZmQ7CisgI2Vsc2UKKyAgICAgc3RydWN0IHNvY2thZGRyX2luIHNpbjsKKyAjZW5kaWYKKysjaWZkZWYgX19HTElCQ19fCisrICAgIHNvY2tsZW5fdCAgc2l6ZSA9IHNpemVvZihzaW4pOworKyNlbHNlCisgICAgIGludCAgICAgc2l6ZSA9IHNpemVvZihzaW4pOworKyNlbmRpZgorIAorICAgICAvKgorICAgICAgKiBFYXQgdXAgdGhlIG5vdC15ZXQgcmVjZWl2ZWQgZGF0YWdyYW0uIFNvbWUgc3lzdGVtcyBpbnNpc3Qgb24gYQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvdGNwZGNoa19saWJ3cmFwcGVkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvdGNwZGNoa19saWJ3cmFwcGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMjliZGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi90Y3BkY2hrX2xpYndyYXBwZWQucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRjaGsuYyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRjaGsuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkY2hrLmMJMjAwMy0wOC0yMSAwMjo1MDozNy4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRjaGsuYwkyMDAzLTA4LTIxIDAyOjUwOjMzLjAwMDAwMDAwMCArMDIwMAorQEAgLTUzLDYgKzUzLDI0IEBACisgI2luY2x1ZGUgImluZXRjZi5oIgorICNpbmNsdWRlICJzY2FmZm9sZC5oIgorIAorKy8qIGxpc3Qgb2YgcHJvZ3JhbXMgd2hpY2ggYXJlIGtub3duIHRvIGJlIGxpbmtlZCB3aXRoIGxpYndyYXAgaW4gZGViaWFuICovCisrc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGxpYndyYXBfcHJvZ3JhbXNbXSA9IHsKKysgICAgInBvcnRtYXAiLCAibW91bnRkIiwgInN0YXRkIiwgInVnaWRkIiwKKysgICAgInJlZGlyIiwgInJsaW5ldGQiLAorKyAgICAic3NoZCIsCisrICAgICJhdGZ0cGQiLAorKyAgICAiZGlhbGQiLAorKyAgICAiZXNvdW5kIiwKKysgICAgImdkbSIsICJnbm9tZS1zZXNzaW9uIiwKKysgICAgImljZWNhc3QiLCAiaWNlY2FzdF9hZG1pbiIsICJpY2VjYXN0X2NsaWVudCIsICJpY2VjYXN0X3NvdXJjZSIsCisrICAgICJteXNxbGQiLAorKyAgICAibnRvcCIsCisrICAgICJwcHRwZCIsCisrICAgICJycXVvdGFkIiwKKysgICAgInNlbmRtYWlsIiwgInNtYWlsIiwKKysgICAgTlVMTAorK307CisrCisgIC8qCisgICAqIFN0b2xlbiBmcm9tIGhvc3RzX2FjY2Vzcy5jLi4uCisgICAqLworQEAgLTE0Nyw4ICsxNjUsOCBAQAorICAgICAvKgorICAgICAgKiBUaGVzZSBhcmUgbm90IHJ1biBmcm9tIGluZXRkIGJ1dCBtYXkgaGF2ZSBidWlsdC1pbiBhY2Nlc3MgY29udHJvbC4KKyAgICAgICovCistICAgIGluZXRfc2V0KCJwb3J0bWFwIiwgV1JfTk9UKTsKKy0gICAgaW5ldF9zZXQoInJwY2JpbmQiLCBXUl9OT1QpOworKyAgICBmb3IgKGMgPSAwOyBsaWJ3cmFwX3Byb2dyYW1zW2NdOyBjKyspCisrCWluZXRfc2V0KGxpYndyYXBfcHJvZ3JhbXNbY10sIFdSX1lFUyk7CisgCisgICAgIC8qCisgICAgICAqIENoZWNrIGFjY2Vzc2liaWxpdHkgb2YgYWNjZXNzIGNvbnRyb2wgZmlsZXMuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi90cnktZnJvbS44IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvdHJ5LWZyb20uOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzhmMzA1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvdHJ5LWZyb20uOApAQCAtMCwwICsxLDI4IEBACisuVEggVFJZLUZST00gOCAiMjF0aCBKdW5lIDE5OTciIExpbnV4ICJMaW51eCBQcm9ncmFtbWVyJ3MgTWFudWFsIgorLlNIIE5BTUUKK3RyeS1mcm9tIFwtIHRlc3QgcHJvZ3JhbSBmb3IgdGhlIHRjcF93cmFwcGVyCisuU0ggU1lOT1BTSVMKKy5CIHRyeS1mcm9tCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgdHJ5LWZyb20KK2NvbW1hbmQgY2FuIGJlIGNhbGxlZCB2aWEgYSByZW1vdGUgc2hlbGwgY29tbWFuZCB0byBmaW5kIG91dAoraWYgdGhlIGhvc3RuYW1lIGFuZCBhZGRyZXNzIGFyZSBwcm9wZXJseSByZWNvZ25pemVkCitieSB0aGUKKy5CIHRjcF93cmFwcGVyCitsaWJyYXJ5LCBpZiB1c2VybmFtZSBsb29rdXAgd29ya3MsIGFuZCAoU3lzViBvbmx5KSBpZiB0aGUgVExJCitvbiB0b3Agb2YgSVAgaGV1cmlzdGljcyB3b3JrLiBEaWFnbm9zdGljcyBhcmUgcmVwb3J0ZWQgdGhyb3VnaAorLkJSIHN5c2xvZyAoMykKK2FuZCByZWRpcmVjdGVkIHRvIHN0ZGVyci4KKworRXhhbXBsZToKKworcnNoIGhvc3QgL3NvbWUvd2hlcmUvdHJ5LWZyb20KKworLlNIIFNFRSBBTFNPCisuQlIgaG9zdHNfYWNjZXNzICg1KSwKKy5CUiBob3N0c19vcHRpb25zICg1KSwKKy5CUiB0Y3BkICg4KQorLlNIIEFVVEhPUgorV2lldHNlIFZlbmVtYSwgRWluZGhvdmVuIFVuaXZlcnNpdHkgb2YgVGVjaG5vbG9neSwgVGhlIE5ldGhlcmxhbmRzLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzXzcuNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnNfNy42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MzA0NzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzXzcuNi5iYgpAQCAtMCwwICsxLDEyOCBAQAorU1VNTUFSWSA9ICJTZWN1cml0eSB0b29sIHRoYXQgaXMgYSB3cmFwcGVyIGZvciBUQ1AgZGFlbW9ucyIKK0RFU0NSSVBUSU9OID0gIlRvb2xzIGZvciBtb25pdG9yaW5nIGFuZCBmaWx0ZXJpbmcgaW5jb21pbmcgcmVxdWVzdHMgZm9yIHRjcCBcCisgICAgICAgICAgICAgICBzZXJ2aWNlcy4iCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKKworTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9ESVNDTEFJTUVSO21kNT0wNzFiZDY5Y2I3OGIxODg4OGVhNWUzZGE1YzMxMjdmYSIKK1BSID0icjEwIgorCisKK1BBQ0tBR0VTID0gIiR7UE59LWRiZyBsaWJ3cmFwIGxpYndyYXAtZG9jIGxpYndyYXAtZGV2IGxpYndyYXAtc3RhdGljZGV2ICR7UE59ICR7UE59LWRvYyIKK0ZJTEVTX2xpYndyYXAgPSAiJHtiYXNlX2xpYmRpcn0vbGliKiR7U09MSUJTfSIKK0ZJTEVTX2xpYndyYXAtZG9jID0gIiR7bWFuZGlyfS9tYW4zICR7bWFuZGlyfS9tYW41IgorRklMRVNfbGlid3JhcC1kZXYgPSAiJHtsaWJkaXJ9L2xpYioke1NPTElCU0RFVn0gJHtpbmNsdWRlZGlyfSIKK0ZJTEVTX2xpYndyYXAtc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWIqLmEiCitGSUxFU18ke1BOfSA9ICIke3NiaW5kaXJ9IgorRklMRVNfJHtQTn0tZG9jID0gIiR7bWFuZGlyfS9tYW44IgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5wb3JjdXBpbmUub3JnL3B1Yi9zZWN1cml0eS90Y3Bfd3JhcHBlcnNfJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwX21hbl9xdW90aW5nLmRpZmYgXAorICAgICAgICAgICBmaWxlOi8vMDFfbWFuX3BvcnRhYmlsaXR5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzA1X3dpbGRjYXJkX21hdGNoaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzA2X2ZpeF9nZXRob3N0YnluYW1lLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzEwX3VzYWdpLWlwdjYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMTFfdGNwZF9ibGFja2xpc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMTFfdXNhZ2lfZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzEyX21ha2VmaWxlX2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8xM19zaGxpYl93ZWFrc3ltLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzE0X2NpZHJfc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8xNV9tYXRjaF9jbGFyaWZ5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2V4cGFuZF9yZW1vdGVfcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9oYXZlX3N0cmVycm9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbl9mcm9taG9zdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZXN0b3JlX3NpZ2FsYXJtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JmYzkzMS5kaWZmIFwKKyAgICAgICAgICAgZmlsZTovL3NhZmVfZmluZ2VyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NpZ19maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2lnbG9uZ2ptcC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zb2NrbGVuX3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdGNwZGNoa19saWJ3cmFwcGVkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xkZmxhZ3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVuYW1lX3N0cmluZ3NfdmFyaWFibGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdHJ5LWZyb20uOCBcCisgICAgICAgICAgIGZpbGU6Ly9zYWZlX2Zpbmdlci44IFwKKyAgICAgICAgICAgZmlsZTovL21ha2VmaWxlLWZpeC1wYXJhbGxlbC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImU2ZmEyNWY3MTIyNmQwOTBmMzRkZTNmNmIxMjJmYjVhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk1NDNkN2FkZWRmNzhhNmRlMGIyMjFjY2JiZDE5NTJlMDhiNTEzODcxN2Y0YWRlODE0MDM5YmI0ODlhNDMxNWQiCisKK1MgPSAiJHtXT1JLRElSfS90Y3Bfd3JhcHBlcnNfJHtQVn0iCisKK0VYVFJBX09FTUFLRSA9ICInQ0M9JHtDQ30nIFwKKyAgICAgICAgICAgICAgICAnQVI9JHtBUn0nIFwKKyAgICAgICAgICAgICAgICAnUkFOTElCPSR7UkFOTElCfScgXAorICAgICAgICAgICAgICAgICdSRUFMX0RBRU1PTl9ESVI9JHtzYmluZGlyfScgXAorICAgICAgICAgICAgICAgICdTVFlMRT0tRFBST0NFU1NfT1BUSU9OUycgXAorICAgICAgICAgICAgICAgICdGQUNJTElUWT1MT0dfREFFTU9OJyBcCisgICAgICAgICAgICAgICAgJ1NFVkVSSVRZPUxPR19JTkZPJyBcCisgICAgICAgICAgICAgICAgJ0JVR1M9JyBcCisgICAgICAgICAgICAgICAgJ1ZTWVNMT0c9JyBcCisgICAgICAgICAgICAgICAgJ1JGQzkzMV9USU1FT1VUPTEwJyBcCisgICAgICAgICAgICAgICAgJ0FDQ0VTUz0tREhPU1RTX0FDQ0VTUycgXAorICAgICAgICAgICAgICAgICdLSUxMX09QVD0tREtJTExfSVBfT1BUSU9OUycgXAorICAgICAgICAgICAgICAgICdVTUFTSz0tRERBRU1PTl9VTUFTSz0wMjInIFwKKyAgICAgICAgICAgICAgICAnTkVUR1JPVVA9JHtFWFRSQV9PRU1BS0VfTkVUR1JPVVB9JyBcCisgICAgICAgICAgICAgICAgJ0xJQlM9LWxuc2wnIFwKKyAgICAgICAgICAgICAgICAnQVJGTEFHUz1ydicgXAorICAgICAgICAgICAgICAgICdBVVhfT0JKPXdlYWtfc3ltYm9scy5vJyBcCisgICAgICAgICAgICAgICAgJ1RMST0nIFwKKyAgICAgICAgICAgICAgICAnQ09QVFM9JyBcCisgICAgICAgICAgICAgICAgJ0VYVFJBX0NGTEFHUz0ke0NGTEFHU30gLURTWVNfRVJSTElTVF9ERUZJTkVEIC1ESEFWRV9TVFJFUlJPUiAtREhBVkVfV0VBS1NZTVMgLURfUkVFTlRSQU5UIC1ESU5FVDY9MSAtRHNzX2ZhbWlseT1fX3NzX2ZhbWlseSAtRHNzX2xlbj1fX3NzX2xlbiciCisKK0VYVFJBX09FTUFLRV9ORVRHUk9VUCA9ICItRE5FVEdST1VQIC1EVVNFX0dFVERPTUFJTiIKK0VYVFJBX09FTUFLRV9ORVRHUk9VUF9saWJjLXVjbGliYyA9ICItRFVTRV9HRVRET01BSU4iCisKK2RvX2NvbXBpbGUgKCkgeworCW9lX3J1bm1ha2UgJ1RBQkxFUz0tREhPU1RTX0RFTlk9XCIke3N5c2NvbmZkaXJ9L2hvc3RzLmRlbnlcIiAtREhPU1RTX0FMTE9XPVwiJHtzeXNjb25mZGlyfS9ob3N0cy5hbGxvd1wiJyBcCisJCSAgIGFsbAorfQorCitCSU5TID0gInNhZmVfZmluZ2VyIHRjcGQgdGNwZGNoayB0cnktZnJvbSB0Y3BkbWF0Y2giCitNQU5TMyA9ICJob3N0c19hY2Nlc3MiCitNQU5TNSA9ICJob3N0c19vcHRpb25zIgorTUFOUzggPSAidGNwZCB0Y3BkY2hrIHRjcGRtYXRjaCIKK2RvX2luc3RhbGwgKCkgeworCW9lX2xpYmluc3RhbGwgLWEgbGlid3JhcCAke0R9JHtsaWJkaXJ9CisJb2VfbGliaW5zdGFsbCAtQyBzaGFyZWQgLXNvIGxpYndyYXAgJHtEfSR7YmFzZV9saWJkaXJ9CisKKwlpZiBbICIke2xpYmRpcn0iICE9ICIke2Jhc2VfbGliZGlyfSIgXSA7IHRoZW4KKwkJcmVsX2xpYl9wcmVmaXg9YGVjaG8gJHtsaWJkaXJ9IHwgc2VkICdzLFwoXi9cfFwpW14vXVteL10qLC4uLGcnYAorCQlsaWJuYW1lPWByZWFkbGluayAke0R9JHtiYXNlX2xpYmRpcn0vbGlid3JhcC5zbyB8IHhhcmdzIGJhc2VuYW1lYAorCQlsbiAtcyAke3JlbF9saWJfcHJlZml4fSR7YmFzZV9saWJkaXJ9LyR7bGlibmFtZX0gJHtEfSR7bGliZGlyfS9saWJ3cmFwLnNvCisJCXJtIC1mICR7RH0ke2Jhc2VfbGliZGlyfS9saWJ3cmFwLnNvCisJZmkKKworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlmb3IgYiBpbiAke0JJTlN9OyBkbworCQlpbnN0YWxsIC1tIDA3NTUgJGIgJHtEfSR7c2JpbmRpcn0vIHx8IGV4aXQgMQorCWRvbmUKKworCWluc3RhbGwgLWQgJHtEfSR7bWFuZGlyfS9tYW4zCisJZm9yIG0gaW4gJHtNQU5TM307IGRvCisJCWluc3RhbGwgLW0gMDY0NCAkbS4zICR7RH0ke21hbmRpcn0vbWFuMy8gfHwgZXhpdCAxCisJZG9uZQorCisJaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjUKKwlmb3IgbSBpbiAke01BTlM1fTsgZG8KKwkJaW5zdGFsbCAtbSAwNjQ0ICRtLjUgJHtEfSR7bWFuZGlyfS9tYW41LyB8fCBleGl0IDEKKwlkb25lCisKKwlpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuOAorCWZvciBtIGluICR7TUFOUzh9OyBkbworCQlpbnN0YWxsIC1tIDA2NDQgJG0uOCAke0R9JHttYW5kaXJ9L21hbjgvIHx8IGV4aXQgMQorCWRvbmUKKworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3RyeS1mcm9tLjggJHtEfSR7bWFuZGlyfS9tYW44LworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NhZmVfZmluZ2VyLjggJHtEfSR7bWFuZGlyfS9tYW44LworCisJaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfQorCWluc3RhbGwgLW0gMDY0NCB0Y3BkLmggJHtEfSR7aW5jbHVkZWRpcn0vCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vaG9zdHMuYWxsb3cKKwl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9ob3N0cy5kZW55Cit9CisKK0ZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L2hvc3RzLmFsbG93ICR7c3lzY29uZmRpcn0vaG9zdHMuZGVueSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGkyaHRtbC90ZXhpMmh0bWxfNS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aTJodG1sL3RleGkyaHRtbF81LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFjMjg5ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGkyaHRtbC90ZXhpMmh0bWxfNS4wLmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiUGVybCBzY3JpcHQgdGhhdCBjb252ZXJ0cyBUZXhpbmZvIHRvIEhUTUwiCitIT01FUEFHRSAgICA9ICJodHRwOi8vd3d3Lm5vbmdudS5vcmcvdGV4aTJodG1sLyIKK1NFQ1RJT04gICAgID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFICAgICA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIgorCitQUiA9ICJyMiIKKworU1JDX1VSSSAgICAgPSAiJHtTQVZBTk5BSF9HTlVfTUlSUk9SfS90ZXhpMmh0bWwvJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZjE1YWM4NzZmY2RjOGJlODY1YjE2NTM1ZjQ4MGFhNTQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZThhOThiMGVlMjBjNDk1YTZhYjg5NDM5OGEwNjVlZjU4MDI3MmRiZDVhMTViMWIxOWU4YmQxYmM4OWQ5ZjlmYSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCSMgYXV0b3Rvb2xzX2RvX2NvbmZpZ3VyZSB1cGRhdGVzIHBvL01ha2VmaWxlLmluLmluLCB3ZSBhbHNvIG5lZWQKKwkjIHVwZGF0ZSBwb19kb2N1bWVudC4KKwljcCAtZiAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dldHRleHQvcG8vTWFrZWZpbGUuaW4uaW4gJHtTfS9wb19kb2N1bWVudC8KKwljcCAtZiAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dldHRleHQvcG8vTWFrZWZpbGUuaW4uaW4gJHtTfS9wb19tZXNzYWdlcy8KK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCXNlZCAtaSAtZSAnMXMsIyEuKnBlcmwsIyEgJHtVU1JCSU5QQVRIfS9lbnYgcGVybCwnICR7RH0ke2JpbmRpcn0vdGV4aTJodG1sCit9CisKK0ZJTEVTXyR7UE59LWRvYyArPSAiJHtkYXRhZGlyfS90ZXhpbmZvIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby1kdW1teS1uYXRpdmUvdGV4aW5mby1kdW1teS1uYXRpdmUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvLWR1bW15LW5hdGl2ZS90ZXhpbmZvLWR1bW15LW5hdGl2ZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTQyMGEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby1kdW1teS1uYXRpdmUvdGV4aW5mby1kdW1teS1uYXRpdmUuYmIKQEAgLTAsMCArMSwzMCBAQAorREVTQ1JJUFRJT04gPSAiRmFrZSB2ZXJzaW9uIG9mIHRoZSB0ZXhpbmZvIHV0aWxpdHkgc3VpdGUiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ2YmI2MmU3M2NhOGI5MDFkM2YyZTlkNzE1NDJmNGJiIgorREVQRU5EUyA9ICIiCitQViA9ICIxLjAiCisKK1NSQ19VUkkgPSAiZmlsZTovL3RlbXBsYXRlLnB5IGZpbGU6Ly9DT1BZSU5HIgorCitTID0gIiR7V09SS0RJUn0iCisKK05BVElWRV9QQUNLQUdFX1BBVEhfU1VGRklYID0gIi8ke1BOfSIKKworaW5oZXJpdCBuYXRpdmUKKworZG9faW5zdGFsbF9uYW1lKCkgeworICAgIEZJTEVOQU1FPSIke0R9JHtiaW5kaXJ9LyQxIgorICAgICMgVXNpbmcgbG4gY2F1c2VzIHByb2JsZW1zIHdpdGggcm1fd29yaworICAgIGNwIC1UICIke1N9L3RlbXBsYXRlLnB5IiAiJEZJTEVOQU1FIgorICAgIGNobW9kICt4ICRGSUxFTkFNRQorfQorCitkb19pbnN0YWxsKCkgeworICAgIG1rZGlyIC1wICIke0R9JHtiaW5kaXJ9IgorICAgIGZvciBpIGluIG1ha2VpbmZvIHBvZDJ0ZXhpIHRleGkyZHZpIHBkZnRleGkyZHZpIHRleGluZGV4IHRleGkycGRmIFwKKyAgICAgICAgICAgICB0eGl4bWwydGV4aSB0ZXhpMmFueSBpbnN0YWxsLWluZm8gZ2luc3RhbGwtaW5mbyBcCisgICAgICAgICAgICAgdXBkYXRlLWluZm8tZGlyOyBkbworICAgICAgICBkb19pbnN0YWxsX25hbWUgJGkKKyAgICBkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvLWR1bW15LW5hdGl2ZS90ZXhpbmZvLWR1bW15L0NPUFlJTkcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvLWR1bW15LW5hdGl2ZS90ZXhpbmZvLWR1bW15L0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMxY2JlNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8tZHVtbXktbmF0aXZlL3RleGluZm8tZHVtbXkvQ09QWUlORwpAQCAtMCwwICsxLDE5IEBACitDb3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycC4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvLWR1bW15LW5hdGl2ZS90ZXhpbmZvLWR1bW15L3RlbXBsYXRlLnB5IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby1kdW1teS1uYXRpdmUvdGV4aW5mby1kdW1teS90ZW1wbGF0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjcwMzNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby1kdW1teS1uYXRpdmUvdGV4aW5mby1kdW1teS90ZW1wbGF0ZS5weQpAQCAtMCwwICsxLDEyMiBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjIuNworCisjIHRlbXBsYXRlLnB5IChhbmQgb3RoZXIgZmlsZW5hbWVzKQorIyBCeSBNYXggRWxpYXNlciAobWF4LmVsaWFzZXJAaW50ZWwuY29tKQorCisjIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3JwLgorCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyMgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisjIFRIRSBTT0ZUV0FSRS4KKworIyBUaGlzIHByb2dyYW0gYWN0cyBsaWtlIGEgZHVtbXkgdmVyc2lvbiBvZiB0aGUgdGV4aW5mbyB1dGlsaXRpZXMsIGNyZWF0aW5nCisjIHRoZSByaWdodCBvdXRwdXQgZmlsZXMgYnV0IGxlYXZpbmcgdGhlbSBibGFuay4gSXQgd2lsbCBwYXJzZSBvdXQgdGhlIG5hbWUKKyMgb2YgdGhlIGV4ZWN1dGFibGUgZnJvbSBhcmd2WzBdIGFuZCBlbXVsYXRlIHRoZSBjb3JyZXNwb25kaW5nIHByb2dyYW0sIHNvCisjIG11bHRpcGxlIGNvcGllcyBvZiB0aGlzIHNjcmlwdCB3aWxsIGV4aXN0IHVuZGVyIGRpZmZlcmVudCBuYW1lcy4KKworaW1wb3J0IHN5cywgb3MKKworb2xvbmcgPSAiLS1vdXRwdXQ9IgorRWxvbmcgPSAiLS1tYWNyby1leHBhbmQ9IgorCisKK3RoaXNfYmluYXJ5ID0gc3lzLmFyZ3ZbMF0uc3BsaXQgKCIvIilbLTFdCisKKyMgVG8gYmUgb3V0cHV0dGVkIGlmIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXNuJ3QgYmVlbiBzdHViYmVkIHlldCBpcyBpbnZva2VkLgorc3R1Yl9tc2cgPSAiIiIKK1RoaXMgc3RhbmQtaW4gdmVyc2lvbiBvZiAlcyBpcyBub3QgeWV0IGZ1bGx5IGNhcGFibGUgb2YgZW11bGF0aW5nIHRoZSByZWFsCit2ZXJzaW9uIGZyb20gdGhlIEdOVSB0ZXhpbmZvIHN1aXRlLiBJZiB5b3Ugc2VlIHRoaXMgbWVzc2FnZSwgZmlsZSBhIGJ1ZyByZXBvcnQKK3dpdGggZGV0YWlscyBvbiB0aGUgcmVjaXBlIHRoYXQgZmFpbGVkLgorIiIiICUgdGhpc19iaW5hcnkKKworIyBBdXRvdG9vbHMgc2V0dXBzIHF1ZXJ5IHRoZSB2ZXJzaW9uLCBzbyB0aGlzIGlzIGFjdHVhbGx5IG5lY2Vzc2FyeS4gU29tZSBvZgorIyB0aGVtIChsb29raW4nIGF0IHlvdSwgZ2xpYmMpIGFjdHVhbGx5IGxvb2sgZm9yIHRoZSBzdWJzdHJpbmcgIkdOVSB0ZXhpbmZvLCIKKyMgc28gd2UgcHV0IHRoYXQgc3Vic3RyaW5nIGluIHRoZXJlIHdpdGhvdXQgYWN0dWFsbHkgdGVsbGluZyBhIGxpZS4KK3ZlcnNpb25fc3RyID0gIiIiICVzIChmYWtlIHRleGluZm8sIGVtdWxhdGluZyBHTlUgdGV4aW5mbykgNS4yCisgCitTdXBlciBhbWF6aW5nIHZlcnNpb24gd2hpY2ggaXMgdG90YWxseSBub3QgZmFrZSBpbiBhbnkgd2F5IHdoYXRzb2V2ZXIuCitDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycC4gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQKK2xpY2Vuc2UuCisiIiIgJSB0aGlzX2JpbmFyeQorCitzaW1wbGVfYmluYXJpZXMgPSAicG9kMnRleGkgdGV4aTJkdmkgcGRmdGV4aTJkdmkgdGV4aW5kZXggdGV4aTJwZGYgXAorICAgICAgICAgICAgICAgICAgIHR4aXhtbDJ0ZXhpIGluc3RhbGwtaW5mbyBnaW5zdGFsbC1pbmZvIFwKKyAgICAgICAgICAgICAgICAgICB1cGRhdGUtaW5mby1kaXIiLnNwbGl0ICgpCisKKyMgVGhlc2UgdXRpbGl0aWVzIHVzZSBhIHNsaWdodGx5IGRpZmZlcmVudCBzZXQgb2Ygb3B0aW9ucyBhbmQgZmxhZ3MuCitjb21wbGV4X2JpbmFyaWVzID0gIm1ha2VpbmZvIHRleGkyYW55Ii5zcGxpdCAoKQorCit2YWxpZF9iaW5hcmllcyA9IHNpbXBsZV9iaW5hcmllcyArIGNvbXBsZXhfYmluYXJpZXMKKworIyBGb3IgZ2VuZXJhdGluZyBibGFuayBvdXRwdXQgZmlsZXMuCitkZWYgdG91Y2hfZmlsZSAocGF0aCk6CisgICAgZiA9IG9wZW4gKHBhdGgsICJ3IikKKyAgICBmLmNsb3NlICgpCisKK2Fzc2VydCB0aGlzX2JpbmFyeSBpbiB2YWxpZF9iaW5hcmllcywgXAorICAgICAgIHRoaXNfYmluYXJ5ICsgIiBpcyBub3Qgb25lIG9mICIgKyAnLCAnLmpvaW4gKHZhbGlkX2JpbmFyaWVzKQorCitpZiAiLS12ZXJzaW9uIiBpbiBzeXMuYXJndjoKKyAgICBwcmludCB2ZXJzaW9uX3N0cgorICAgIHN5cy5leGl0ICgwKQorCisjIEZvciBkZWJ1Z2dpbmcKK2xvZ19pbnRlcmNlcHRpb25zID0gRmFsc2UKK2lmIGxvZ19pbnRlcmNlcHRpb25zOgorICAgIGYgPSBvcGVuICgiL3RtcC9pbnRlcmNlcHRlZF8iICsgdGhpc19iaW5hcnksICJhIikKKyAgICBmLndyaXRlICgnICcuam9pbiAoW3RoaXNfYmluYXJ5XSArIHN5cy5hcmd2WzE6XSkgKyAnXG4nKQorICAgIGYuY2xvc2UgKCkKKworIyBMb29rIHRocm91Z2ggdGhlIG9wdGlvbnMgYW5kIGZsYWdzLCBhbmQgaWYgbmVjZXNzYXJ5LCB0b3VjaCBhbnkgb3V0cHV0CisjIGZpbGVzLgorYXJnX2lkeCA9IDEKK3doaWxlIGFyZ19pZHggPCBsZW4gKHN5cy5hcmd2KToKKyAgICBhcmcgPSBzeXMuYXJndiBbYXJnX2lkeF0KKyAgICAKKyAgICBpZiBhcmcgPT0gIi0tIjoKKyAgICAgICAgYnJlYWsKKyAgICAKKyAgICAjIFNvbWV0aGluZyBsaWtlIC1JIC4gY2FuIHJlc3VsdCBpbiBhIG5lZWQgZm9yIHRoaXMgKHNwZWNpZmljYWxseSB0aGUgLikKKyAgICBlbGlmIGxlbiAoYXJnKSA8IDI6CisgICAgICAgIHBhc3MKKyAgICAKKyAgICAjIENoZWNrIGlmIC1vIG9yIC0tb3V0cHV0IGlzIHNwZWNpZmllZC4gVGhlc2UgY2FuIGJlIHVzZWQgYXQgbW9zdCBvbmNlLgorICAgIGVsaWYgYXJnWzBdID09ICctJyBhbmQgYXJnWzFdICE9ICctJyBhbmQgYXJnW2xlbiAoYXJnKSAtIDFdID09ICdvJzoKKyAgICAgICAgdG91Y2hfZmlsZSAoc3lzLmFyZ3ZbYXJnX2lkeCArIDFdKQorICAgICAgICBzeXMuZXhpdCAoMCkKKyAgICBlbGlmIGFyZy5zdGFydHN3aXRoIChvbG9uZyk6CisgICAgICAgIHRvdWNoX2ZpbGUgKGFyZy5zcGxpdCAoIj0iKVsxXSkKKyAgICAgICAgc3lzLmV4aXQgKDApCisgICAgCisgICAgIyBDaGVjayBmb3IgZnVuY3Rpb25hbGl0eSB0aGF0IGlzbid0IGltcGxlbWVudGVkIHlldC4KKyAgICBlbHNlOgorICAgICAgICBhc3NlcnQgYXJnWzBdICE9ICctJyBvciBhcmdbMV0gPT0gJy0nIG9yICdFJyBub3QgaW4gYXJnIG9yIFwKKyAgICAgICAgICAgICAgIHRoaXNfYmluYXJ5IGluIHNpbXBsZV9iaW5hcmllcywgXAorICAgICAgICAgICAgICAgIi1FIG9wdGlvbiBub3QgeWV0IHN1cHBvcnRlZCIgKyBzdHViX21zZworICAgICAgICAKKyAgICAgICAgYXNzZXJ0IG5vdCBhcmcuc3RhcnRzd2l0aCAoRWxvbmcpLCBcCisgICAgICAgICAgICAgICBFbG9uZ1s6LTFdICsgIiBvcHRpb24gbm90IHlldCBzdXBwb3J0ZWQiICsgc3R1Yl9tc2cKKyAgICAKKyAgICBhcmdfaWR4ICs9IDEKKworIyBUaGUgLW8vLS1vdXRwdXQgb3B0aW9uIG92ZXJyaWRlcyB0aGUgZGVmYXVsdC4gRm9yIG1ha2VpbmZvIGFuZCB0ZXhpMmFueSwKKyMgdGhhdCBkZWZhdWx0IGlzIHRvIGxvb2sgZm9yIGEgQHNldGZpbGVuYW1lIGNvbW1hbmQgaW4gdGhlIGlucHV0IGZpbGUuCisjIE90aGVyd2lzZSwgcHJpbnRpbmcgbm90aGluZyB0byBzdGRvdXQgYW5kIHRoZW4gZXhpdGluZyBzaG91bGQgc3VmZmljZS4KK2Fzc2VydCB0aGlzX2JpbmFyeSBpbiBzaW1wbGVfYmluYXJpZXMsIFwKKyAgICAgICAiRG9uJ3Qga25vdyBob3cgdG8gZ2V0IGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZSBmcm9tIGlucHV0IGZpbGUhIiArIFwKKyAgICAgICBzdHViX21zZworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8tNC44L2NoZWNrLWxvY2FsZS1oLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvLTQuOC9jaGVjay1sb2NhbGUtaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGQ2NjYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvLTQuOC9jaGVjay1sb2NhbGUtaC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitmaXggdGhlIG1hY3JvIGNoZWNrCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitjb25maWd1cmUgZG9lcyBub3QgY2hlY2sgaWYgbG9jYWxlLmggZXhpc3RzLCBidXQgY2hlY2sgc2V0bG9jYWxlLAoraWYgc2V0bG9jYWxlIGV4aXN0LCB0aGUgbG9jYWxlLmggc2hvdWxkIGV4aXN0LgorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWIvc3lzdGVtLmggfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvc3lzdGVtLmggYi9saWIvc3lzdGVtLmgKK2luZGV4IDk0NmViM2MuLmM3MDAzN2IgMTAwNjQ0CistLS0gYS9saWIvc3lzdGVtLmgKKysrKyBiL2xpYi9zeXN0ZW0uaAorQEAgLTQyLDcgKzQyLDcgQEAgZXh0ZXJuIGNoYXIgKnN1YnN0cmluZyAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworICNpbmNsdWRlIDxjdHlwZS5oPgorIAorIC8qIEFsbCBzeXN0ZW1zIG5vd2FkYXlzIHByb2JhYmx5IGhhdmUgdGhlc2UgZnVuY3Rpb25zLCBidXQgLi4uICovCistI2lmZGVmIEhBVkVfTE9DQUxFX0gKKysjaWZkZWYgSEFWRV9TRVRMT0NBTEUKKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgI2VuZGlmCisgI2lmbmRlZiBIQVZFX1NFVExPQ0FMRQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8tNC44L2RvLWNvbXBpbGUtbmF0aXZlLXRvb2xzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvLTQuOC9kby1jb21waWxlLW5hdGl2ZS10b29scy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWViZTI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvLTQuOC9kby1jb21waWxlLW5hdGl2ZS10b29scy5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitGcm9tIDQ1OGU5NDUwY2VjZjcwM2Y1NTUzNmU2MDkzNjUxNjI3MTk1ODU5MDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiUm95LkxpIiA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMTAgU2VwIDIwMTQgMTc6MDM6MjkgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gZG8gbm90IGNvbXBpbGUgaG9zdCB0b29scywgc2luY2Ugd2UgaGF2ZSBuYXRpdmUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJveS5MaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDIzICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAyMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYjQ2MTMwZC4uY2Y1ODY1NCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtOTAsMjggKzkwLDcgQEAgQUNfQ0FOT05JQ0FMX0JVSUxECisgIyAkbmF0aXZlX3Rvb2xzIGlzIGFsc28gYWRkZWQgdG8gU1VCRElSUyBpbiB0aGUgbWFpbiBNYWtlZmlsZS5hbSwKKyAjIHNvIHRoYXQgbWFrZSBjb21waWxlcyB0aGUgbmF0aXZlIHRvb2xzIGZpcnN0LgorICMKKy1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vOyB0aGVuCistICBuYXRpdmVfdG9vbHM9CistZWxzZQorLSAgbmF0aXZlX3Rvb2xzPXRvb2xzCistICB0ZXN0IC1kICIkbmF0aXZlX3Rvb2xzIiB8fCBta2RpciAiJG5hdGl2ZV90b29scyIKKy0gIGNvbmZkaXI9YChjZCAiJHNyY2RpciI7cHdkKWAKKy0gICMgTWFrZSBzdXJlIHRoZSBzZWNvbmRhcnkgY29uZmlndXJlIHdvbid0IGZhaWwgd2l0aAorLSAgIyAiZXJyb3I6IHNvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkIi4KKy0gIHJtIC1mIGNvbmZpZy5zdGF0dXMKKy0gIEFDX01TR19OT1RJQ0UoW1tEb2luZyBjb25maWd1cmUgb2YgbmF0aXZlIHRvb2xzICgke2J1aWxkfSkuXV0pCistICBjZCAiJG5hdGl2ZV90b29scyIgfHwgZXhpdCAxCistICAjIFJ1biBzZWNvbmRhcnkgY29uZmlndXJlIGluIGFsdGVybmF0ZSBlbnZpcm9ubWVudCBvcgorLSAgIyBpdCBnZXRzIHRoZSB3cm9uZyBDQyBldGMuICBlbnYgLWkgZ2l2ZXMgdGhpcyBidWlsZCBob3N0IGNvbmZpZ3VyZQorLSAgIyBhIGNsZWFuIGVudmlyb25tZW50LgorLSAgZW52IC1pIENDPSIke0JVSUxEX0NDfSIgQVI9IiR7QlVJTERfQVJ9IiBSQU5MSUI9IiR7QlVJTERfUkFOTElCfSIgXAorLSAgICAgIFBBVEg9IiR7UEFUSH0iIFwKKy0gICAgICB0b29sc19vbmx5PTEgXAorLSAgICAke2NvbmZkaXJ9L2NvbmZpZ3VyZSAtLWJ1aWxkPSR7YnVpbGR9IC0taG9zdD0ke2J1aWxkfSBcCistICAgICAgICAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1ycGF0aCAtLWRpc2FibGUtbmxzCistICBjZCAuLiB8fCBleGl0IDEKKy0gIEFDX01TR19OT1RJQ0UoW1tDb250aW51aW5nIHdpdGggbWFpbiBjb25maWd1cmUgKCR7aG9zdH0pLl1dKQorLWZpCisrbmF0aXZlX3Rvb2xzPQorIEFDX1NVQlNUKG5hdGl2ZV90b29scykKKyBBTV9DT05ESVRJT05BTChUT09MU19PTkxZLCBbW3Rlc3QgIngkdG9vbHNfb25seSIgPSB4MV1dKQorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8tNC44L3VzaW5nLW5hdGl2ZS1tYWtlaW5mby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby00LjgvdXNpbmctbmF0aXZlLW1ha2VpbmZvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOTcwNTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8tNC44L3VzaW5nLW5hdGl2ZS1tYWtlaW5mby5wYXRjaApAQCAtMCwwICsxLDI0IEBACitGcm9tIDliMGRmN2Q2ZDNjMThjZmFjODJjMjkxZDYwYTUzNTdkMWJjOGQ5ZDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiUm95LkxpIiA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMTAgU2VwIDIwMTQgMTc6MTA6MDMgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gdXNpbmcgbmF0aXZlIG1ha2VpbmZvCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBkb2MvTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICstCisKK2RpZmYgLS1naXQgYS9kb2MvTWFrZWZpbGUuYW0gYi9kb2MvTWFrZWZpbGUuYW0KK2luZGV4IDYzZGY4MTguLmI2Y2ViMzQgMTAwNjQ0CistLS0gYS9kb2MvTWFrZWZpbGUuYW0KKysrKyBiL2RvYy9NYWtlZmlsZS5hbQorQEAgLTE5LDcgKzE5LDcgQEAgbWFuX01BTlMgPSBpbmZvLjEgaW5mb2tleS4xIGluc3RhbGwtaW5mby4xIG1ha2VpbmZvLjEgdGV4aW5kZXguMSB0ZXhpMmR2aS4xIFwKKyAKKyAjIFVzZSB0aGUgcHJvZ3JhbXMgYnVpbHQgaW4gb3VyIGRpc3RyaWJ1dGlvbiwgdGFraW5nIGFjY291bnQgb2YgcG9zc2libGUKKyAjIGNyb3NzLWNvbXBpbGluZy4KKy1NQUtFSU5GTyA9ICQodG9wX2J1aWxkZGlyKS8kKG5hdGl2ZV90b29scykvbWFrZWluZm8vbWFrZWluZm8KKytNQUtFSU5GTyA9IG1ha2VpbmZvCisgSU5TVEFMTF9JTkZPID0gJCh0b3BfYnVpbGRkaXIpLyQobmF0aXZlX3Rvb2xzKS91dGlsL2luc3RhbGwtaW5mbworIAorIFRYSV9YTEFURSA9IHR4aS1jcy50ZXggdHhpLWRlLnRleCB0eGktZW4udGV4IHR4aS1lcy50ZXggdHhpLWZyLnRleCBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MzM4YWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiB0ZXhpbmZvLTUuMi9nbnVsaWIvbGliL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGV4aW5mby01LjIub3JpZy9nbnVsaWIvbGliL01ha2VmaWxlLmFtCisrKysgdGV4aW5mby01LjIvZ251bGliL2xpYi9NYWtlZmlsZS5hbQorQEAgLTM3OCw3ICszNzgsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL2Rpc2FibGUtbmF0aXZlLXRvb2xzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL2Rpc2FibGUtbmF0aXZlLXRvb2xzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNmYxNjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vZGlzYWJsZS1uYXRpdmUtdG9vbHMucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorV2UgYWxyZWFkeSBERVBFTkQgb24gdGhlIG5hdGl2ZSB0ZXhpbmZvIGJlaW5nIHByZXNlbnQgYmVmb3JlIGJ1aWxkaW5nIHNvCit0aGVyZSBpc24ndCBhbnkgbmVlZCB0byB0cnkgYW5kIGJ1aWxkIHRoZSByZXF1aXJlZCBuYXRpdmUgdGV4aW5mbyBiaW5hcmllcworYmVmb3JlIGNyb3NzLWNvbXBpbGluZy4gVGhpcyBzaW1wbGlmaWVzIHRoZSByZWNpcGUgc29tZXdoYXQhCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBvZSBzcGVjaWZpYworCitTaWduZWQtb2ZmLWJ5OiBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiB0ZXhpbmZvLTQuMTMvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGV4aW5mby00LjEzLm9yaWcvY29uZmlndXJlLmFjCisrKysgdGV4aW5mby00LjEzL2NvbmZpZ3VyZS5hYworQEAgLTEwMCwyOSArMTAwLDcgQEAgQUNfQ0FOT05JQ0FMX0JVSUxECisgIyAkbmF0aXZlX3Rvb2xzIGlzIGFsc28gYWRkZWQgdG8gU1VCRElSUyBpbiB0aGUgbWFpbiBNYWtlZmlsZS5hbSwKKyAjIHNvIHRoYXQgbWFrZSBjb21waWxlcyB0aGUgbmF0aXZlIHRvb2xzIGZpcnN0LgorICMKKy1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vOyB0aGVuCistICBuYXRpdmVfdG9vbHM9CistZWxzZQorLSAgbmF0aXZlX3Rvb2xzPXRvb2xzCistICB0ZXN0IC1kICIkbmF0aXZlX3Rvb2xzIiB8fCBta2RpciAiJG5hdGl2ZV90b29scyIKKy0gIGNvbmZkaXI9YChjZCAiJHNyY2RpciI7cHdkKWAKKy0gICMgTWFrZSBzdXJlIHRoZSBzZWNvbmRhcnkgY29uZmlndXJlIHdvbid0IGZhaWwgd2l0aAorLSAgIyAiZXJyb3I6IHNvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkIi4KKy0gIHJtIC1mIGNvbmZpZy5zdGF0dXMKKy0gIEFDX01TR19OT1RJQ0UoW1tEb2luZyBjb25maWd1cmUgb2YgbmF0aXZlIHRvb2xzICgke2J1aWxkfSkuXV0pCistICBjZCAiJG5hdGl2ZV90b29scyIgfHwgZXhpdCAxCistICAjIFJ1biBzZWNvbmRhcnkgY29uZmlndXJlIGluIGFsdGVybmF0ZSBlbnZpcm9ubWVudCBvcgorLSAgIyBpdCBnZXRzIHRoZSB3cm9uZyBDQyBldGMuCistICAjIGVudiAtaSBnaXZlcyB0aGlzIGJ1aWxkIGhvc3QgY29uZmlndXJlIGEgY2xlYW4gZW52aXJvbm1lbnQ7CistICAjIGNvbnNlcXVlbnRseSwgd2UgaGF2ZSB0byByZS1pbml0aWFsaXplICRQQVRILgorLSAgZW52IC1pIENDPSIkQlVJTERfQ0MiIEFSPSIkQlVJTERfQVIiIFJBTkxJQj0iJEJVSUxEX1JBTkxJQiIgXAorLSAgICAgIFBBVEg9IiRQQVRIIiBcCistICAgICAgdG9vbHNfb25seT0xIFwKKy0gICAgJHtjb25mZGlyfS9jb25maWd1cmUgLS1idWlsZD0ke2J1aWxkfSAtLWhvc3Q9JHtidWlsZH0gXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAtLWRpc2FibGUtcnBhdGggLS1kaXNhYmxlLW5scworLSAgY2QgLi4gfHwgZXhpdCAxCistICBBQ19NU0dfTk9USUNFKFtbQ29udGludWluZyB3aXRoIG1haW4gY29uZmlndXJlICgke2hvc3R9KS5dXSkKKy1maQorK25hdGl2ZV90b29scz0KKyBBQ19TVUJTVChuYXRpdmVfdG9vbHMpCisgQU1fQ09ORElUSU9OQUwoVE9PTFNfT05MWSwgW1t0ZXN0ICJ4JHRvb2xzX29ubHkiID0geDFdXSkKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2U0N2VjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK0Zyb20gNmYxZjM5MTJmY2I5MDBiM2EzZTZjYmUzMzYwMzA2ZmFkZTMzMzQ5NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBUaHUsIDYgQXVnIDIwMTUgMTQ6NTU6MDggKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gZG9udC1kZXBlbmQtb24taGVscDJtYW4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CistLS0KKyBkb2MvTWFrZWZpbGUuYW0gfCAgMiArLQorIG1hbi9NYWtlZmlsZS5hbSB8IDEyICsrKysrKy0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZG9jL01ha2VmaWxlLmFtIGIvZG9jL01ha2VmaWxlLmFtCitpbmRleCA3MTk4YTZiLi40YmJhNTUwIDEwMDY0NAorLS0tIGEvZG9jL01ha2VmaWxlLmFtCisrKysgYi9kb2MvTWFrZWZpbGUuYW0KK0BAIC00MCw3ICs0MCw3IEBAIHJlZmNhcmRfZmlsZXMgPSByZWZjYXJkL01ha2VmaWxlIHJlZmNhcmQvdHhpY21kY2hlY2sgXAorICMgSW5jbHVkZSBvdXIgdGV4aW5mby50ZXgsIG5vdCBBdXRvbWFrZSdzLgorIEVYVFJBX0RJU1QgPSBlcHNmLnRleCB0ZXhpbmZvLnRleCBcCisgICAgICAgICAgICAgIGZkbC50ZXhpIFwKKy0JICAgICAkKG1hbl9NQU5TKSAkKFRYSV9YTEFURSkgXAorKwkgICAgICQoVFhJX1hMQVRFKSBcCisgCSAgICAgJChyZWZjYXJkX2ZpbGVzKQorIAorIGlmIElOU1RBTExfV0FSTklOR1MKK2RpZmYgLS1naXQgYS9tYW4vTWFrZWZpbGUuYW0gYi9tYW4vTWFrZWZpbGUuYW0KK2luZGV4IGEwOGQ2MDMuLmJkZmM5YTQgMTAwNjQ0CistLS0gYS9tYW4vTWFrZWZpbGUuYW0KKysrKyBiL21hbi9NYWtlZmlsZS5hbQorQEAgLTEzLDI0ICsxMywyNCBAQAorICMgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgCisgIyBUaGVzZSBhcmUgZ2VuZXJhdGVkIHVzaW5nIGhlbHAybWFuLgorLW1hbl9NQU5TID0gaW5zdGFsbC1pbmZvLjEgbWFrZWluZm8uMSB0ZXhpbmRleC4xIHRleGkyZHZpLjEKKysjbWFuX01BTlMgPSBpbnN0YWxsLWluZm8uMSBtYWtlaW5mby4xIHRleGluZGV4LjEgdGV4aTJkdmkuMQorIAorICMgVGhlc2UgcmVxdWlyZSB0aGUgYnVpbGQgaW4gaW5mby8sIHRodXMgY2FuJ3QgZG8gaWYgd2UgZmFpbGVkIHRvIGZpbmQgYQorICMgdGVybWluYWwgbGlicmFyeS4KKyBpZiBIQVZFX1RFUk1MSUJTCistbWFuX01BTlMgKz0gaW5mby4xCisrI21hbl9NQU5TICs9IGluZm8uMQorIGVuZGlmCisgCisgIyBUaGVzZSBhcmUgaGFuZC13cml0dGVuLgorLW1hbl9NQU5TICs9IGluZm8uNSB0ZXhpbmZvLjUKKysjbWFuX01BTlMgKz0gaW5mby41IHRleGluZm8uNQorIAorICMgVGhpcyBpcyBnZW5lcmF0ZWQgYnkgcG9kMm1hbiwgYnV0IGxldCdzIGp1c3QgcnVuIGl0IGJ5IGhhbmQuCistbWFuX01BTlMgKz0gcG9kMnRleGkuMQorKyNtYW5fTUFOUyArPSBwb2QydGV4aS4xCisgCisgIyBUaGVzZSBhcmUganVzdCAuc28ncyB0byB0aGUgY29tbW9uIHByb2dyYW0uCistbWFuX01BTlMgKz0gdGV4aTJhbnkuMSB0ZXhpMnBkZi4xIHBkZnRleGkyZHZpLjEKKysjbWFuX01BTlMgKz0gdGV4aTJhbnkuMSB0ZXhpMnBkZi4xIHBkZnRleGkyZHZpLjEKKyAKKy1FWFRSQV9ESVNUID0gJChtYW5fTUFOUykgZ2luZm8uaDJtCisrRVhUUkFfRElTVCA9IGdpbmZvLmgybQorIAorICMgTWFpbnRhaW5lcnMgc2hvdWxkIGJlIGFibGUgdG8gcmVnZW5lcmF0ZS4KKyBNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9ICQobWFuX01BTlMpCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby9saW5rLXppcC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby9saW5rLXppcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjZlOWZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL2xpbmstemlwLnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKK2luc3RhbGwtaW5mbyB1c2VzIHN5bWJvbHMgZnJvbSB6bGliIHNvIG11c3QgbGluayBhZ2FpbnN0IGl0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSm9zaHVhIExvY2sgPGpvc2hAbGludXguaW50ZWwuY29tPgorCitJbmRleDogdGV4aW5mby01LjEvaW5zdGFsbC1pbmZvL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGV4aW5mby01LjEub3JpZy9pbnN0YWxsLWluZm8vTWFrZWZpbGUuYW0KKysrKyB0ZXhpbmZvLTUuMS9pbnN0YWxsLWluZm8vTWFrZWZpbGUuYW0KK0BAIC0zNCw0ICszNCw0IEBAIEFNX0NQUEZMQUdTID0gCQkJCQlcCisgICAtSSQodG9wX3NyY2RpcikvZ251bGliL2xpYgkJCVwKKyAgIC1JJCh0b3BfYnVpbGRkaXIpL2dudWxpYi9saWIJCQlcCisgICAtRExPQ0FMRURJUj1cIiQobG9jYWxlZGlyKVwiCistTERBREQgPSAkKHRvcF9idWlsZGRpcikvZ251bGliL2xpYi9saWJnbnUuYSAkKExJQklOVEwpCisrTERBREQgPSAkKHRvcF9idWlsZGRpcikvZ251bGliL2xpYi9saWJnbnUuYSAkKExJQklOVEwpIC1segpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL3RleGluZm8tNC4xMi16bGliLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL3RleGluZm8tNC4xMi16bGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYmQyMjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vdGV4aW5mby00LjEyLXpsaWIucGF0Y2gKQEAgLTAsMCArMSwyMzMgQEAKK0Zyb20gMjBlMWQ4YTk0ODFkYzEzZGQxZDRkMTY4YjkwZTBlZDJmZjA5N2I5OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBUaHUsIDYgQXVnIDIwMTUgMTQ6Mjk6NTcgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gdGV4aW5mby00LjEyLXpsaWIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBpbnN0YWxsLWluZm8vTWFrZWZpbGUuaW4gICAgfCAgMiArLQorIGluc3RhbGwtaW5mby9pbnN0YWxsLWluZm8uYyB8IDY3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgNDIgaW5zZXJ0aW9ucygrKSwgMjcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9pbnN0YWxsLWluZm8vTWFrZWZpbGUuaW4gYi9pbnN0YWxsLWluZm8vTWFrZWZpbGUuaW4KK2luZGV4IGFkNzNhYmIuLmVhYTIxNTMgMTAwNjQ0CistLS0gYS9pbnN0YWxsLWluZm8vTWFrZWZpbGUuaW4KKysrKyBiL2luc3RhbGwtaW5mby9NYWtlZmlsZS5pbgorQEAgLTI0MSw3ICsyNDEsNyBAQCBhbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQoYmluZGlyKSIgIiQoREVTVERJUikkKGJpbmRpcikiCisgUFJPR1JBTVMgPSAkKGJpbl9QUk9HUkFNUykKKyBhbV9naW5zdGFsbF9pbmZvX09CSkVDVFMgPSBpbnN0YWxsLWluZm8uJChPQkpFWFQpCisgZ2luc3RhbGxfaW5mb19PQkpFQ1RTID0gJChhbV9naW5zdGFsbF9pbmZvX09CSkVDVFMpCistZ2luc3RhbGxfaW5mb19MREFERCA9ICQoTERBREQpCisrZ2luc3RhbGxfaW5mb19MREFERCA9ICQoTERBREQpIC1segorIGFtX19ERVBFTkRFTkNJRVNfMSA9CisgZ2luc3RhbGxfaW5mb19ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvZ251bGliL2xpYi9saWJnbnUuYSBcCisgCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorZGlmZiAtLWdpdCBhL2luc3RhbGwtaW5mby9pbnN0YWxsLWluZm8uYyBiL2luc3RhbGwtaW5mby9pbnN0YWxsLWluZm8uYworaW5kZXggYjQ1NGMxNS4uNGUzOTEyMiAxMDA2NDQKKy0tLSBhL2luc3RhbGwtaW5mby9pbnN0YWxsLWluZm8uYworKysrIGIvaW5zdGFsbC1pbmZvL2luc3RhbGwtaW5mby5jCitAQCAtMjIsNiArMjIsNyBAQAorICNpbmNsdWRlIDxnZXRvcHQuaD4KKyAjaW5jbHVkZSA8cmVnZXguaD4KKyAjaW5jbHVkZSA8YXJnei5oPgorKyNpbmNsdWRlIDx6bGliLmg+CisgCisgI2RlZmluZSBUQUJfV0lEVEggOAorIAorQEAgLTY4NCwxNSArNjg1LDE1IEBAIFRoZSBmaXJzdCB0aW1lIHlvdSBpbnZva2UgSW5mbyB5b3Ugc3RhcnQgb2ZmIGxvb2tpbmcgYXQgdGhpcyBub2RlLlxuXAorICAgIAorICAgIFJldHVybiBlaXRoZXIgc3RkaW4gcmVhZGluZyB0aGUgZmlsZSwgb3IgYSBub24tc3RkaW4gcGlwZSByZWFkaW5nCisgICAgdGhlIG91dHB1dCBvZiB0aGUgY29tcHJlc3Npb24gcHJvZ3JhbS4gICovCistRklMRSAqCisrdm9pZCAqCisgb3Blbl9wb3NzaWJseV9jb21wcmVzc2VkX2ZpbGUgKGNoYXIgKmZpbGVuYW1lLAorICAgICB2b2lkICgqY3JlYXRlX2NhbGxiYWNrKSAoY2hhciAqKSwKKy0gICAgY2hhciAqKm9wZW5lZF9maWxlbmFtZSwgY2hhciAqKmNvbXByZXNzaW9uX3Byb2dyYW0pIAorKyAgICBjaGFyICoqb3BlbmVkX2ZpbGVuYW1lLCBjaGFyICoqY29tcHJlc3Npb25fcHJvZ3JhbSwgaW50ICppc19waXBlKSAKKyB7CisgICBjaGFyICpsb2NhbF9vcGVuZWRfZmlsZW5hbWUsICpsb2NhbF9jb21wcmVzc2lvbl9wcm9ncmFtOworICAgaW50IG5yZWFkOworICAgY2hhciBkYXRhWzEzXTsKKy0gIEZJTEUgKmY7CisrICBnekZpbGUgKmY7CisgCisgICAvKiBXZSBsZXQgdGhlbSBwYXNzIE5VTEwgaWYgdGhleSBkb24ndCB3YW50IHRoaXMgaW5mbywgYnV0IGl0J3MgZWFzaWVyCisgICAgICB0byBhbHdheXMgZGV0ZXJtaW5lIGl0LiAgKi8KK0BAIC03MDAsNDggKzcwMSw0OCBAQCBvcGVuX3Bvc3NpYmx5X2NvbXByZXNzZWRfZmlsZSAoY2hhciAqZmlsZW5hbWUsCisgICAgIG9wZW5lZF9maWxlbmFtZSA9ICZsb2NhbF9vcGVuZWRfZmlsZW5hbWU7CisgCisgICAqb3BlbmVkX2ZpbGVuYW1lID0gZmlsZW5hbWU7CistICBmID0gZm9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworKyAgZiA9IGd6b3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisgICBpZiAoIWYpCisgICAgIHsKKyAgICAgICAqb3BlbmVkX2ZpbGVuYW1lID0gY29uY2F0IChmaWxlbmFtZSwgIi5neiIsICIiKTsKKy0gICAgICBmID0gZm9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworKyAgICAgIGYgPSBnem9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworICAgICB9CisgICBpZiAoIWYpCisgICAgIHsKKyAgICAgICBmcmVlICgqb3BlbmVkX2ZpbGVuYW1lKTsKKyAgICAgICAqb3BlbmVkX2ZpbGVuYW1lID0gY29uY2F0IChmaWxlbmFtZSwgIi54eiIsICIiKTsKKy0gICAgICBmID0gZm9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworKyAgICAgIGYgPSBnem9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworICAgICB9CisgICBpZiAoIWYpCisgICAgIHsKKyAgICAgICBmcmVlICgqb3BlbmVkX2ZpbGVuYW1lKTsKKyAgICAgICAqb3BlbmVkX2ZpbGVuYW1lID0gY29uY2F0IChmaWxlbmFtZSwgIi5iejIiLCAiIik7CistICAgICAgZiA9IGZvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKysgICAgICBmID0gZ3pvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKyAgICAgfQorICAgaWYgKCFmKQorICAgICB7CisgICAgICAgZnJlZSAoKm9wZW5lZF9maWxlbmFtZSk7CisgICAgICAgKm9wZW5lZF9maWxlbmFtZSA9IGNvbmNhdCAoZmlsZW5hbWUsICIubHoiLCAiIik7CistICAgICAgZiA9IGZvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKysgICAgICBmID0gZ3pvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKyAgICAgfQorICAgaWYgKCFmKQorICAgICB7CisgICAgICBmcmVlICgqb3BlbmVkX2ZpbGVuYW1lKTsKKyAgICAgICpvcGVuZWRfZmlsZW5hbWUgPSBjb25jYXQgKGZpbGVuYW1lLCAiLmx6bWEiLCAiIik7CistICAgICBmID0gZm9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworKyAgICAgZiA9IGd6b3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisgICAgIH0KKyAjaWZkZWYgX19NU0RPU19fCisgICBpZiAoIWYpCisgICAgIHsKKyAgICAgICBmcmVlICgqb3BlbmVkX2ZpbGVuYW1lKTsKKyAgICAgICAqb3BlbmVkX2ZpbGVuYW1lID0gY29uY2F0IChmaWxlbmFtZSwgIi5pZ3oiLCAiIik7CistICAgICAgZiA9IGZvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKysgICAgICBmID0gZ3pvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKyAgICAgfQorICAgaWYgKCFmKQorICAgICB7CisgICAgICAgZnJlZSAoKm9wZW5lZF9maWxlbmFtZSk7CisgICAgICAgKm9wZW5lZF9maWxlbmFtZSA9IGNvbmNhdCAoZmlsZW5hbWUsICIuaW56IiwgIiIpOworLSAgICAgIGYgPSBmb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisrICAgICAgZiA9IGd6b3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisgICAgIH0KKyAjZW5kaWYgLyogX19NU0RPU19fICovCisgICBpZiAoIWYpCitAQCAtNzU3LDcgKzc1OCw3IEBAIG9wZW5fcG9zc2libHlfY29tcHJlc3NlZF9maWxlIChjaGFyICpmaWxlbmFtZSwKKyAgICAgICAgICAgKCpjcmVhdGVfY2FsbGJhY2spIChmaWxlbmFtZSk7CisgCisgICAgICAgICAgIC8qIEFuZCB0cnkgb3BlbmluZyBpdCBhZ2Fpbi4gICovCistICAgICAgICAgIGYgPSBmb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisrICAgICAgICAgIGYgPSBnem9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworICAgICAgICAgICBpZiAoIWYpCisgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICB9CitAQCAtNzY3LDEyICs3NjgsMTIgQEAgb3Blbl9wb3NzaWJseV9jb21wcmVzc2VkX2ZpbGUgKGNoYXIgKmZpbGVuYW1lLAorIAorICAgLyogUmVhZCBmaXJzdCBmZXcgYnl0ZXMgb2YgZmlsZSByYXRoZXIgdGhhbiByZWx5aW5nIG9uIHRoZSBmaWxlbmFtZS4KKyAgICAgIElmIHRoZSBmaWxlIGlzIHNob3J0ZXIgdGhhbiB0aGlzIGl0IGNhbid0IGJlIHVzYWJsZSBhbnl3YXkuICAqLworLSAgbnJlYWQgPSBmcmVhZCAoZGF0YSwgc2l6ZW9mIChkYXRhKSwgMSwgZik7CistICBpZiAobnJlYWQgIT0gMSkKKysgIG5yZWFkID0gZ3pyZWFkIChmLCBkYXRhLCBzaXplb2YgKGRhdGEpKTsKKysgIGlmIChucmVhZCAhPSBzaXplb2YgKGRhdGEpKQorICAgICB7CisgICAgICAgLyogRW1wdHkgZmlsZXMgZG9uJ3Qgc2V0IGVycm5vLiAgQ2FsbGluZyBjb2RlIGNhbiBjaGVjayBmb3IKKyAgICAgICAgICB0aGlzLCBzbyBtYWtlIHN1cmUgZXJybm8gPT0gMCBqdXN0IGluIGNhc2UgaXQgaXNuJ3QgYWxyZWFkeS4gKi8KKy0gICAgICBpZiAobnJlYWQgPT0gMCkKKysgICAgICBpZiAobnJlYWQgPj0gMCkKKyAgICAgICAgIGVycm5vID0gMDsKKyAgICAgICByZXR1cm4gMDsKKyAgICAgfQorQEAgLTgzOCwzNSArODM5LDQwIEBAIG9wZW5fcG9zc2libHlfY29tcHJlc3NlZF9maWxlIChjaGFyICpmaWxlbmFtZSwKKyAgICAgKmNvbXByZXNzaW9uX3Byb2dyYW0gPSBOVUxMOworIAorICAgLyogU2VlayBiYWNrIG92ZXIgdGhlIG1hZ2ljIGJ5dGVzLiAgKi8KKy0gIGlmIChmc2VlayAoZiwgMCwgMCkgPCAwKQorKyAgaWYgKGd6c2VlayAoZiwgMCwgU0VFS19TRVQpID09IC0xKQorICAgICByZXR1cm4gMDsKKyAKKyAgIGlmICgqY29tcHJlc3Npb25fcHJvZ3JhbSkKKyAgICAgeyAvKiBJdCdzIGNvbXByZXNzZWQsIHNvIG9wZW4gYSBwaXBlLiAgKi8KKysgICAgICBGSUxFICpwOworICAgICAgIGNoYXIgKmNvbW1hbmQgPSBjb25jYXQgKCpjb21wcmVzc2lvbl9wcm9ncmFtLCAiIC1kIiwgIiIpOworIAorLSAgICAgIGlmIChmY2xvc2UgKGYpIDwgMCkKKysgICAgICBpZiAoZ3pjbG9zZSAoZikgPCAwKQorICAgICAgICAgcmV0dXJuIDA7CistICAgICAgZiA9IGZyZW9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4sIHN0ZGluKTsKKy0gICAgICBpZiAoIWYpCisrICAgICAgcCA9IGZyZW9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4sIHN0ZGluKTsKKysgICAgICBpZiAoIXApCisgICAgICAgICByZXR1cm4gMDsKKy0gICAgICBmID0gcG9wZW4gKGNvbW1hbmQsICJyIik7CistICAgICAgaWYgKCFmKQorKyAgICAgIHAgPSBwb3BlbiAoY29tbWFuZCwgInIiKTsKKysgICAgICBpZiAoIXApCisgICAgICAgICB7CisgICAgICAgICAgIC8qIFVzZWQgZm9yIGVycm9yIG1lc3NhZ2UgaW4gY2FsbGluZyBjb2RlLiAqLworICAgICAgICAgICAqb3BlbmVkX2ZpbGVuYW1lID0gY29tbWFuZDsKKyAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAgKmlzX3BpcGUgPSAxOworKyAgICAgIHJldHVybiBwOworICAgICB9CisgICBlbHNlCisgICAgIHsKKy0jaWYgT19CSU5BUlkKKysjaWYgMCAmJiBPX0JJTkFSWQorICAgICAgIC8qIFNpbmNlIHRoaXMgaXMgYSB0ZXh0IGZpbGUsIGFuZCB3ZSBvcGVuZWQgaXQgaW4gYmluYXJ5IG1vZGUsCisgICAgICAgICAgc3dpdGNoIGJhY2sgdG8gdGV4dCBtb2RlLiAgKi8KKyAgICAgICBmID0gZnJlb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgInIiLCBmKTsKKyAgICAgICBpZiAoISBmKQorIAlyZXR1cm4gMDsKKyAjZW5kaWYKKysgICAgICAqaXNfcGlwZSA9IDA7CisgICAgIH0KKyAKKyAgIHJldHVybiBmOworQEAgLTg4NSw3ICs4OTEsOCBAQCByZWFkZmlsZSAoY2hhciAqZmlsZW5hbWUsIGludCAqc2l6ZXAsCisgICAgIHZvaWQgKCpjcmVhdGVfY2FsbGJhY2spIChjaGFyICopLCBjaGFyICoqb3BlbmVkX2ZpbGVuYW1lLAorICAgICBjaGFyICoqY29tcHJlc3Npb25fcHJvZ3JhbSkKKyB7CistICBGSUxFICpmOworKyAgdm9pZCAqZjsKKysgIGludCBwaXBlX3A7CisgICBpbnQgZmlsbGVkID0gMDsKKyAgIGludCBkYXRhX3NpemUgPSA4MTkyOworICAgY2hhciAqZGF0YSA9IHhtYWxsb2MgKGRhdGFfc2l6ZSk7CitAQCAtODkzLDE0ICs5MDAsMjAgQEAgcmVhZGZpbGUgKGNoYXIgKmZpbGVuYW1lLCBpbnQgKnNpemVwLAorICAgLyogSWYgdGhleSBwYXNzZWQgdGhlIHNwYWNlIGZvciB0aGUgZmlsZSBuYW1lIHRvIHJldHVybiwgdXNlIGl0LiAgKi8KKyAgIGYgPSBvcGVuX3Bvc3NpYmx5X2NvbXByZXNzZWRfZmlsZSAoZmlsZW5hbWUsIGNyZWF0ZV9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbmVkX2ZpbGVuYW1lLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbl9wcm9ncmFtKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb25fcHJvZ3JhbSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBpcGVfcCk7CisgCisgICBpZiAoIWYpCisgICAgIHJldHVybiAwOworIAorICAgZm9yICg7OykKKyAgICAgeworLSAgICAgIGludCBucmVhZCA9IGZyZWFkIChkYXRhICsgZmlsbGVkLCAxLCBkYXRhX3NpemUgLSBmaWxsZWQsIGYpOworKyAgICAgIGludCBucmVhZDsKKysKKysgICAgICBpZiAocGlwZV9wKQorKyAgICAgICAgbnJlYWQgPSBmcmVhZCAoZGF0YSArIGZpbGxlZCwgMSwgZGF0YV9zaXplIC0gZmlsbGVkLCBmKTsKKysgICAgICBlbHNlCisrICAgICAgICBucmVhZCA9IGd6cmVhZCAoZiwgZGF0YSArIGZpbGxlZCwgZGF0YV9zaXplIC0gZmlsbGVkKTsKKyAgICAgICBpZiAobnJlYWQgPCAwKQorICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgaWYgKG5yZWFkID09IDApCitAQCAtOTE5LDggKzkzMiwxMCBAQCByZWFkZmlsZSAoY2hhciAqZmlsZW5hbWUsIGludCAqc2l6ZXAsCisgICAvKiBXZSBuZWVkIHRvIGNsb3NlIHRoZSBzdHJlYW0sIHNpbmNlIG9uIHNvbWUgc3lzdGVtcyB0aGUgcGlwZSBjcmVhdGVkCisgICAgICBieSBwb3BlbiBpcyBzaW11bGF0ZWQgYnkgYSB0ZW1wb3JhcnkgZmlsZSB3aGljaCBvbmx5IGdldHMgcmVtb3ZlZAorICAgICAgaW5zaWRlIHBjbG9zZS4gICovCistICBpZiAoZiAhPSBzdGRpbikKKysgIGlmIChwaXBlX3ApCisgICAgIHBjbG9zZSAoZik7CisrICBlbHNlCisrICAgIGd6Y2xvc2UgKGYpOworIAorICAgKnNpemVwID0gZmlsbGVkOworICAgcmV0dXJuIGRhdGE7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby91c2VfaG9zdF9tYWtlZG9jLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL3VzZV9ob3N0X21ha2Vkb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI3ZjMyZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby91c2VfaG9zdF9tYWtlZG9jLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY3Jvc3MgYnVpbGQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IHRleGluZm8tNS4xL2luZm8vTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0ZXhpbmZvLTUuMS5vcmlnL2luZm8vTWFrZWZpbGUuYW0KKysrKyB0ZXhpbmZvLTUuMS9pbmZvL01ha2VmaWxlLmFtCitAQCAtNzYsNyArNzYsNyBAQCBjbWRfc291cmNlcyA9ICQoc3JjZGlyKS9zZXNzaW9uLmMgJChzcmNkCisgIyBtb3JlIHRoYW4gb25jZS4KKyBmdW5zLmg6IG1ha2Vkb2MkKEVYRUVYVCkgJChjbWRfc291cmNlcykKKyAJcm0gLWYgJChnZW5lcmF0ZWRfc291cmNlcykKKy0JJCh0b3BfYnVpbGRkaXIpLyQobmF0aXZlX3Rvb2xzKS9pbmZvL21ha2Vkb2MgJChjbWRfc291cmNlcykKKysJbWFrZWRvYyAkKGNtZF9zb3VyY2VzKQorIAorICMgVGhlIGZvbGxvd2luZyBoYWNrIGlzIG5lY2Vzc2FyeSB0byBoaW50IG1ha2UgYmVmb3JlIHRoZSBhdXRvbWF0aWMKKyAjIGRlcGVuZGVuY2llcyBhcmUgYnVpbHQuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm9fNC44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzY3OGUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvXzQuOC5iYgpAQCAtMCwwICsxLDU1IEBACitTVU1NQVJZID0gIkRvY3VtZW50YXRpb24gc3lzdGVtIGZvciBvbi1saW5lIGluZm9ybWF0aW9uIGFuZCBwcmludGVkIG91dHB1dCIKK0RFU0NSSVBUSU9OID0gIlRleGluZm8gaXMgYSBkb2N1bWVudGF0aW9uIHN5c3RlbSB0aGF0IGNhbiBwcm9kdWNlIGJvdGggXAorb25saW5lIGluZm9ybWF0aW9uIGFuZCBwcmludGVkIG91dHB1dCBmcm9tIGEgc2luZ2xlIHNvdXJjZSBmaWxlLiBUaGUgXAorR05VIFByb2plY3QgdXNlcyB0aGUgVGV4aW5mbyBmaWxlIGZvcm1hdCBmb3IgbW9zdCBvZiBpdHMgZG9jdW1lbnRhdGlvbi4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK1BST1ZJREVTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIHRleGluZm8tNC44LXJlcGxhY2VtZW50LW5hdGl2ZSIKKworREVQRU5EUyA9ICJ6bGliIG5jdXJzZXMgdGV4aW5mby00LjgtcmVwbGFjZW1lbnQtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiemxpYi1uYXRpdmUgbmN1cnNlcy1uYXRpdmUiCisKK1RBUkdFVF9QQVRDSCA9ICJmaWxlOi8vdXNlX2hvc3RfbWFrZWRvYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91c2luZy1uYXRpdmUtbWFrZWluZm8ucGF0Y2ggXAorIgorVEFSR0VUX1BBVENIX2NsYXNzLW5hdGl2ZSA9ICIiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS90ZXhpbmZvLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9jaGVjay1sb2NhbGUtaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kby1jb21waWxlLW5hdGl2ZS10b29scy5wYXRjaCBcCisgICAgICAgICAgICR7VEFSR0VUX1BBVENIfSBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGU5YTFhNTkxZWQyMzYwMDNkMGQ0YjAwOGJmMDdlZWYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWYzY2RlZWJlNjVmZGY1MTBmNTVkNzY1YWIxMDMxYjU0NDE2YWE1YmMyNjM1YjZhNTRlZjliY2IyMzY3YzkxNyIKKwordGV4X3RleGluZm8gPSAidGV4bWYvdGV4L3RleGluZm8iCisKK2luaGVyaXQgZ2V0dGV4dCBhdXRvdG9vbHMKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJbWtkaXIgLXAgJHtEfSR7ZGF0YWRpcn0vJHt0ZXhfdGV4aW5mb30KKwlpbnN0YWxsIC1wIC1tNjQ0ICR7U30vZG9jL3RleGluZm8udGV4ICR7U30vZG9jL3R4aS0/Py50ZXggJHtEfSR7ZGF0YWRpcn0vJHt0ZXhfdGV4aW5mb30KK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWluc3RhbGwgLW0gNzU1IGluZm8vbWFrZWRvYyAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSA3NTUgbWFrZWluZm8vbWFrZWluZm8gJHtEfSR7YmluZGlyfQorfQorCitQQUNLQUdFUyArPSAiaW5mbyBpbmZvLWRvYyIKKworRklMRVNfaW5mbyA9ICIke2JpbmRpcn0vaW5mbyAke2JpbmRpcn0vaW5mb2tleSAke2JpbmRpcn0vaW5zdGFsbC1pbmZvIgorRklMRVNfaW5mby1kb2MgPSAiJHtpbmZvZGlyfS9pbmZvLmluZm8gJHtpbmZvZGlyfS9kaXIgJHtpbmZvZGlyfS9pbmZvLSouaW5mbyBcCisgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMS9pbmZvLjEqICR7bWFuZGlyfS9tYW41L2luZm8uNSogXAorICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEvaW5mb2tleS4xKiAke21hbmRpcn0vbWFuMS9pbnN0YWxsLWluZm8uMSoiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9tYWtlaW5mbyAke2JpbmRpcn0vdGV4aSogJHtiaW5kaXJ9L3BkZnRleGkyZHZpICR7YmluZGlyfS9wb2QydGV4aSAke2RhdGFkaXJ9L3RleGluZm8iCitGSUxFU18ke1BOfS1kb2MgPSAiJHtpbmZvZGlyfS90ZXhpbmZvKiBcCisgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS8ke3RleF90ZXhpbmZvfSBcCisgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEgJHttYW5kaXJ9L21hbjUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvXzYuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mb182LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZiNzE1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mb182LjAuYmIKQEAgLTAsMCArMSw4MiBAQAorU1VNTUFSWSA9ICJEb2N1bWVudGF0aW9uIHN5c3RlbSBmb3Igb24tbGluZSBpbmZvcm1hdGlvbiBhbmQgcHJpbnRlZCBvdXRwdXQiCitERVNDUklQVElPTiA9ICJUZXhpbmZvIGlzIGEgZG9jdW1lbnRhdGlvbiBzeXN0ZW0gdGhhdCBjYW4gcHJvZHVjZSBib3RoIFwKK29ubGluZSBpbmZvcm1hdGlvbiBhbmQgcHJpbnRlZCBvdXRwdXQgZnJvbSBhIHNpbmdsZSBzb3VyY2UgZmlsZS4gVGhlIFwKK0dOVSBQcm9qZWN0IHVzZXMgdGhlIFRleGluZm8gZmlsZSBmb3JtYXQgZm9yIG1vc3Qgb2YgaXRzIGRvY3VtZW50YXRpb24uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworUFJPVklERVNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgdGV4aW5mby1yZXBsYWNlbWVudC1uYXRpdmUiCisKK2RlZiBjb21wcmVzc19wa2coZCk6CisgICAgaWYgImNvbXByZXNzX2RvYyIgaW4gKGQuZ2V0VmFyKCJJTkhFUklUIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICBjb21wcmVzcyA9IGQuZ2V0VmFyKCJET0NfQ09NUFJFU1MiLCBUcnVlKQorICAgICAgICAgaWYgY29tcHJlc3MgPT0gImd6IjoKKyAgICAgICAgICAgICByZXR1cm4gImd6aXAiCisgICAgICAgICBlbGlmIGNvbXByZXNzID09ICJiejIiOgorICAgICAgICAgICAgIHJldHVybiAiYnppcDIiCisgICAgICAgICBlbGlmIGNvbXByZXNzID09ICJ4eiI6CisgICAgICAgICAgICAgcmV0dXJuICJ4eiIKKyAgICByZXR1cm4gIiIKKworUkRFUEVORFNfaW5mbyArPSAiJHtAY29tcHJlc3NfcGtnKGQpfSIKKworREVQRU5EUyA9ICJ6bGliIG5jdXJzZXMgdGV4aW5mby1yZXBsYWNlbWVudC1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJ6bGliLW5hdGl2ZSBuY3Vyc2VzLW5hdGl2ZSIKKworVEFSR0VUX1BBVENIID0gImZpbGU6Ly91c2VfaG9zdF9tYWtlZG9jLnBhdGNoIgorVEFSR0VUX1BBVENIX2NsYXNzLW5hdGl2ZSA9ICIiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS90ZXhpbmZvLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly90ZXhpbmZvLTQuMTItemxpYi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLW5hdGl2ZS10b29scy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saW5rLXppcC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAgJHtUQVJHRVRfUEFUQ0h9IFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlMWEyZWY1ZGNlNTAxOGI1M2YwZjZlZWQ0NWIyNDdhNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4M2QzMTgzMjkwZjM0ZTdmOTU4ZDIwOWQwYjIwMDIyYzZmZTllOTIxZWI2ZmU5NGMyN2Q5ODg4MjdkNDg3OGQyIgorCit0ZXhfdGV4aW5mbyA9ICJ0ZXhtZi90ZXgvdGV4aW5mbyIKKworaW5oZXJpdCBnZXR0ZXh0IGF1dG90b29scworCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyBhdXRvdG9vbHNfZG9fY29uZmlndXJlIHVwZGF0ZXMgcG8vTWFrZWZpbGUuaW4uaW4sIHdlIGFsc28gbmVlZAorCSMgdXBkYXRlIHBvX2RvY3VtZW50LgorCWNwIC1mICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ2V0dGV4dC9wby9NYWtlZmlsZS5pbi5pbiAke1N9L3BvX2RvY3VtZW50LworfQorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisJaWYgWyAtZCB0b29scyBdO3RoZW4KKwkJb2VfcnVubWFrZSAtQyB0b29scy9nbnVsaWIvbGliCisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJbWtkaXIgLXAgJHtEfSR7ZGF0YWRpcn0vJHt0ZXhfdGV4aW5mb30KKwlpbnN0YWxsIC1wIC1tNjQ0ICR7U30vZG9jL3RleGluZm8udGV4ICR7U30vZG9jL3R4aS0/Py50ZXggJHtEfSR7ZGF0YWRpcn0vJHt0ZXhfdGV4aW5mb30KKwlzZWQgLWkgLWUgJzFzLCMhLipwZXJsLCMhICR7VVNSQklOUEFUSH0vZW52IHBlcmwsJyAke0R9JHtiaW5kaXJ9L3RleGkyYW55ICR7RH0ke2JpbmRpcn0vcG9kMnRleGkKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWluc3RhbGwgLW0gNzU1IGluZm8vbWFrZWRvYyAke0R9JHtiaW5kaXJ9Cit9CisKK1BBQ0tBR0VTICs9ICJpbmZvIGluZm8tZG9jIgorCitGSUxFU19pbmZvID0gIiR7YmluZGlyfS9pbmZvICR7YmluZGlyfS9pbmZva2V5ICR7YmluZGlyfS9pbnN0YWxsLWluZm8iCitGSUxFU19pbmZvLWRvYyA9ICIke2luZm9kaXJ9L2luZm8uaW5mbyogJHtpbmZvZGlyfS9kaXIgJHtpbmZvZGlyfS9pbmZvLSouaW5mbyogXAorICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEvaW5mby4xKiAke21hbmRpcn0vbWFuNS9pbmZvLjUqIFwKKyAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4xL2luZm9rZXkuMSogJHttYW5kaXJ9L21hbjEvaW5zdGFsbC1pbmZvLjEqIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vbWFrZWluZm8gJHtiaW5kaXJ9L3RleGkqICR7YmluZGlyfS9wZGZ0ZXhpMmR2aSAke2JpbmRpcn0vcG9kMnRleGkgJHtkYXRhZGlyfS90ZXhpbmZvIgorUkRFUEVORFNfJHtQTn0gPSAicGVybCIKK0ZJTEVTXyR7UE59LWRvYyA9ICIke2luZm9kaXJ9L3RleGluZm8qIFwKKyAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9LyR7dGV4X3RleGluZm99IFwKKyAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMSAke21hbmRpcn0vbWFuNSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90aW1lL3RpbWUtMS43L2RlYmlhbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RpbWUvdGltZS0xLjcvZGViaWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZWEwZTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90aW1lL3RpbWUtMS43L2RlYmlhbi5wYXRjaApAQCAtMCwwICsxLDEzMDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworLS0tIHRpbWUtMS43Lm9yaWcvY29uZmlndXJlLmluCisrKysgdGltZS0xLjcvY29uZmlndXJlLmluCitAQCAtMSwxMSArMSw4IEBACisgZG5sIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCisgQUNfSU5JVCh0aW1lLmMpCistVkVSU0lPTj0xLjcKKy1BQ19TVUJTVChWRVJTSU9OKQorLVBBQ0tBR0U9dGltZQorLUFDX1NVQlNUKFBBQ0tBR0UpCisrQU1fSU5JVF9BVVRPTUFLRSh0aW1lLCAxLjcpCisgCistQUNfQVJHX1BST0dSQU0KKytBTV9NQUlOVEFJTkVSX01PREUKKyAKKyBkbmwgQ2hlY2tzIGZvciBwcm9ncmFtcy4KKyBBQ19QUk9HX0NDCitAQCAtMTUsNyArMTIsNyBAQAorIGRubCBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KKyBBQ19IRUFERVJfU1REQworIEFDX0hFQURFUl9TWVNfV0FJVAorLUFDX0NIRUNLX0hFQURFUlModW5pc3RkLmggc3RyaW5nLmggc3lzL3J1c2FnZS5oKQorK0FDX0NIRUNLX0hFQURFUlModW5pc3RkLmggc3RyaW5nLmggc3lzL3J1c2FnZS5oIHN5cy9yZXNvdXJjZS5oKQorIAorIGRubCBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgorIEFDX0NfQ09OU1QKKy0tLSB0aW1lLTEuNy5vcmlnL3ZlcnNpb24udGV4aQorKysrIHRpbWUtMS43L3ZlcnNpb24udGV4aQorQEAgLTEsMyArMSwzIEBACistQHNldCBVUERBVEVEIDEyIEp1bmUgMTk5NgorK0BzZXQgVVBEQVRFRCA5IE1heSAyMDAyCisgQHNldCBFRElUSU9OIDEuNworIEBzZXQgVkVSU0lPTiAxLjcKKy0tLSB0aW1lLTEuNy5vcmlnL3RpbWUuYworKysrIHRpbWUtMS43L3RpbWUuYworQEAgLTE0Nyw2ICsxNDcsMTAgQEAKKyAgIE5VTEwKKyB9OworIAwKKysKKysvKiBJZiB0cnVlLCBkbyBub3Qgc2hvdyB0aGUgZXhpdCBtZXNzYWdlICovCisrc3RhdGljIGJvb2xlYW4gcXVpZXQ7CisrCisgLyogSWYgdHJ1ZSwgc2hvdyBhbiBFbmdsaXNoIGRlc2NyaXB0aW9uIG5leHQgdG8gZWFjaCBzdGF0aXN0aWMuICAqLworIHN0YXRpYyBib29sZWFuIHZlcmJvc2U7CisgCitAQCAtMTcyLDYgKzE3Niw3IEBACisgICB7ImhlbHAiLCBub19hcmd1bWVudCwgTlVMTCwgJ2gnfSwKKyAgIHsib3V0cHV0LWZpbGUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ28nfSwKKyAgIHsicG9ydGFiaWxpdHkiLCBub19hcmd1bWVudCwgTlVMTCwgJ3AnfSwKKysgIHsicXVpZXQiLCBub19hcmd1bWVudCxOVUxMLCAncSd9LAorICAgeyJ2ZXJib3NlIiwgbm9fYXJndW1lbnQsIE5VTEwsICd2J30sCisgICB7InZlcnNpb24iLCBub19hcmd1bWVudCwgTlVMTCwgJ1YnfSwKKyAgIHtOVUxMLCBub19hcmd1bWVudCwgTlVMTCwgMH0KK0BAIC0zMzMsNyArMzM4LDggQEAKKyAgIGVsc2UgaWYgKFdJRlNJR05BTEVEIChyZXNwLT53YWl0c3RhdHVzKSkKKyAgICAgZnByaW50ZiAoZnAsICJDb21tYW5kIHRlcm1pbmF0ZWQgYnkgc2lnbmFsICVkXG4iLAorIAkgICAgIFdURVJNU0lHIChyZXNwLT53YWl0c3RhdHVzKSk7CistICBlbHNlIGlmIChXSUZFWElURUQgKHJlc3AtPndhaXRzdGF0dXMpICYmIFdFWElUU1RBVFVTIChyZXNwLT53YWl0c3RhdHVzKSkKKysgIGVsc2UgaWYgKFdJRkVYSVRFRCAocmVzcC0+d2FpdHN0YXR1cykgJiYgV0VYSVRTVEFUVVMgKHJlc3AtPndhaXRzdGF0dXMpCisrCSAgICYmICFxdWlldCkKKyAgICAgZnByaW50ZiAoZnAsICJDb21tYW5kIGV4aXRlZCB3aXRoIG5vbi16ZXJvIHN0YXR1cyAlZFxuIiwKKyAJICAgICBXRVhJVFNUQVRVUyAocmVzcC0+d2FpdHN0YXR1cykpOworIAorQEAgLTUyMyw2ICs1MjksNyBAQAorICAgY2hhciAqZm9ybWF0OwkJCS8qIEZvcm1hdCBmb3VuZCBpbiBlbnZpcm9ubWVudC4gICovCisgCisgICAvKiBJbml0aWFsaXplIHRoZSBvcHRpb24gZmxhZ3MuICAqLworKyAgcXVpZXQgPSBmYWxzZTsKKyAgIHZlcmJvc2UgPSBmYWxzZTsKKyAgIG91dGZpbGUgPSBOVUxMOworICAgb3V0ZnAgPSBzdGRlcnI7CitAQCAtNTM2LDcgKzU0Myw3IEBACisgICBpZiAoZm9ybWF0KQorICAgICBvdXRwdXRfZm9ybWF0ID0gZm9ybWF0OworIAorLSAgd2hpbGUgKChvcHRjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICIrYWY6bzpwdlYiLCBsb25nb3B0cywgKGludCAqKSAwKSkKKysgIHdoaWxlICgob3B0YyA9IGdldG9wdF9sb25nIChhcmdjLCBhcmd2LCAiK2FmOm86cHF2ViIsIGxvbmdvcHRzLCAoaW50ICopIDApKQorIAkgIT0gRU9GKQorICAgICB7CisgICAgICAgc3dpdGNoIChvcHRjKQorQEAgLTU1NSw2ICs1NjIsOSBAQAorIAljYXNlICdwJzoKKyAJICBvdXRwdXRfZm9ybWF0ID0gcG9zaXhfZm9ybWF0OworIAkgIGJyZWFrOworKwljYXNlICdxJzoKKysJICBxdWlldCA9IHRydWU7CisrCSAgYnJlYWs7CisgCWNhc2UgJ3YnOgorIAkgIHZlcmJvc2UgPSB0cnVlOworIAkgIGJyZWFrOworQEAgLTY0Miw5ICs2NTIsOSBAQAorICAgZmZsdXNoIChvdXRmcCk7CisgCisgICBpZiAoV0lGU1RPUFBFRCAocmVzLndhaXRzdGF0dXMpKQorLSAgICBleGl0IChXU1RPUFNJRyAocmVzLndhaXRzdGF0dXMpKTsKKysgICAgZXhpdCAoV1NUT1BTSUcgKHJlcy53YWl0c3RhdHVzKSArIDEyOCk7CisgICBlbHNlIGlmIChXSUZTSUdOQUxFRCAocmVzLndhaXRzdGF0dXMpKQorLSAgICBleGl0IChXVEVSTVNJRyAocmVzLndhaXRzdGF0dXMpKTsKKysgICAgZXhpdCAoV1RFUk1TSUcgKHJlcy53YWl0c3RhdHVzKSArIDEyOCk7CisgICBlbHNlIGlmIChXSUZFWElURUQgKHJlcy53YWl0c3RhdHVzKSkKKyAgICAgZXhpdCAoV0VYSVRTVEFUVVMgKHJlcy53YWl0c3RhdHVzKSk7CisgfQorQEAgLTY1Nyw3ICs2NjcsNyBAQAorICAgZnByaW50ZiAoc3RyZWFtLCAiXAorIFVzYWdlOiAlcyBbLWFwdlZdIFstZiBmb3JtYXRdIFstbyBmaWxlXSBbLS1hcHBlbmRdIFstLXZlcmJvc2VdXG5cCisgICAgICAgIFstLXBvcnRhYmlsaXR5XSBbLS1mb3JtYXQ9Zm9ybWF0XSBbLS1vdXRwdXQ9ZmlsZV0gWy0tdmVyc2lvbl1cblwKKy0gICAgICAgWy0taGVscF0gY29tbWFuZCBbYXJnLi4uXVxuIiwKKysgICAgICAgWy0tcXVpZXRdIFstLWhlbHBdIGNvbW1hbmQgW2FyZy4uLl1cbiIsCisgCSAgIHByb2dyYW1fbmFtZSk7CisgICBleGl0IChzdGF0dXMpOworIH0KKy0tLSB0aW1lLTEuNy5vcmlnL3Jlc3VzZS5oCisrKysgdGltZS0xLjcvcmVzdXNlLmgKK0BAIC0zNiwxOSArMzYsOCBAQAorICMgaW5jbHVkZSA8c3lzL3J1c2FnZS5oPgorICNlbHNlCisgIyBkZWZpbmUgVFZfTVNFQyB0dl91c2VjIC8gMTAwMAorLSMgaWYgSEFWRV9XQUlUMworKyMgaWYgSEFWRV9TWVNfUkVTT1VSQ0VfSAorICMgIGluY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorLSMgZWxzZQorLS8qIFByb2Nlc3MgcmVzb3VyY2UgdXNhZ2Ugc3RydWN0dXJlLiAgKi8KKy1zdHJ1Y3QgcnVzYWdlCisteworLSAgc3RydWN0IHRpbWV2YWwgcnVfdXRpbWU7CS8qIFVzZXIgdGltZSB1c2VkLiAgKi8KKy0gIHN0cnVjdCB0aW1ldmFsIHJ1X3N0aW1lOwkvKiBTeXN0ZW0gdGltZSB1c2VkLiAgKi8KKy0gIGludCBydV9tYXhyc3MsIHJ1X2l4cnNzLCBydV9pZHJzcywgcnVfaXNyc3MsCistICBydV9taW5mbHQsIHJ1X21hamZsdCwgcnVfbnN3YXAsIHJ1X2luYmxvY2ssIAorLSAgcnVfb3VibG9jaywgcnVfbXNnc25kLCBydV9tc2dyY3YsIHJ1X25zaWduYWxzLAorLSAgcnVfbnZjc3csIHJ1X25pdmNzdzsKKy19OworICMgZW5kaWYKKyAjZW5kaWYKKyAKKy0tLSB0aW1lLTEuNy5vcmlnL3RpbWUudGV4aQorKysrIHRpbWUtMS43L3RpbWUudGV4aQorQEAgLTExLDYgKzExLDEyIEBACisgQGZpbmFsb3V0CisgQGVuZCBpZnRleAorIAorK0BkaXJjYXRlZ29yeSBJbmRpdmlkdWFsIHV0aWxpdGllcworK0BkaXJlbnRyeQorKyogdGltZTogKHRpbWUpLiAgICAgICAgICAgICAgICAgICAgIFJ1biBwcm9ncmFtcyBhbmQgc3VtbWFyaXplCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtIHJlc291cmNlIHVzYWdlLgorK0BlbmQgZGlyZW50cnkKKysKKyBAaWZpbmZvCisgVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgdGhlIEdOVSBAY29kZXt0aW1lfSBjb21tYW5kIGZvciBydW5uaW5nIHByb2dyYW1zCisgYW5kIHN1bW1hcml6aW5nIHRoZSBzeXN0ZW0gcmVzb3VyY2VzIHRoZXkgdXNlLgorQEAgLTE4NSw2ICsxOTEsMTAgQEAKKyBzeXMgJVMKKyBAZW5kIGV4YW1wbGUKKyAKKytAaXRlbSAtcQorK0BpdGVteCAtLXF1aWV0CisrU3VwcHJlc3Mgbm9uLXplcm8gZXJyb3IgY29kZSBmcm9tIHRoZSBleGVjdXRlZCBwcm9ncmFtLgorKworIEBpdGVtIC12CisgQGl0ZW14IC0tdmVyYm9zZQorIEBjaW5kZXggZm9ybWF0CistLS0gdGltZS0xLjcub3JpZy90aW1lLmluZm8KKysrKyB0aW1lLTEuNy90aW1lLmluZm8KK0BAIC0xLDUgKzEsMTAgQEAKKy1UaGlzIGlzIEluZm8gZmlsZSAuL3RpbWUuaW5mbywgcHJvZHVjZWQgYnkgTWFrZWluZm8tMS41NSBmcm9tIHRoZSBpbnB1dAorLWZpbGUgdGltZS50ZXhpLgorK1RoaXMgaXMgdGltZS5pbmZvLCBwcm9kdWNlZCBieSBtYWtlaW5mbyB2ZXJzaW9uIDQuMSBmcm9tIHRpbWUudGV4aS4KKysKKytJTkZPLURJUi1TRUNUSU9OIEluZGl2aWR1YWwgdXRpbGl0aWVzCisrU1RBUlQtSU5GTy1ESVItRU5UUlkKKysqIHRpbWU6ICh0aW1lKS4gICAgICAgICAgICAgICAgICAgICBSdW4gcHJvZ3JhbXMgYW5kIHN1bW1hcml6ZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSByZXNvdXJjZSB1c2FnZS4KKytFTkQtSU5GTy1ESVItRU5UUlkKKyAKKyAgICBUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSB0aGUgR05VIGB0aW1lJyBjb21tYW5kIGZvciBydW5uaW5nIHByb2dyYW1zCisgYW5kIHN1bW1hcml6aW5nIHRoZSBzeXN0ZW0gcmVzb3VyY2VzIHRoZXkgdXNlLgorQEAgLTMxLDcgKzM2LDcgQEAKKyAKKyAqIFJlc291cmNlIE1lYXN1cmVtZW50OjogIE1lYXN1cmluZyBwcm9ncmFtIHJlc291cmNlIHVzZS4KKyAKKy0gLS0gVGhlIERldGFpbGVkIE5vZGUgTGlzdGluZyAtLQorKyAtLS0gVGhlIERldGFpbGVkIE5vZGUgTGlzdGluZyAtLS0KKyAKKyBNZWFzdXJpbmcgUHJvZ3JhbSBSZXNvdXJjZSBVc2UKKyAKK0BAIC01OCwxNCArNjMsMTQgQEAKKyAgICBUaGUgYHRpbWUnIGNvbW1hbmQgcnVucyBhbm90aGVyIHByb2dyYW0sIHRoZW4gZGlzcGxheXMgaW5mb3JtYXRpb24KKyBhYm91dCB0aGUgcmVzb3VyY2VzIHVzZWQgYnkgdGhhdCBwcm9ncmFtLCBjb2xsZWN0ZWQgYnkgdGhlIHN5c3RlbSB3aGlsZQorIHRoZSBwcm9ncmFtIHdhcyBydW5uaW5nLiAgWW91IGNhbiBzZWxlY3Qgd2hpY2ggaW5mb3JtYXRpb24gaXMgcmVwb3J0ZWQKKy1hbmQgdGhlIGZvcm1hdCBpbiB3aGljaCBpdCBpcyBzaG93biAoKm5vdGUgU2V0dGluZyBGb3JtYXQ6Oi4pLCBvciBoYXZlCisrYW5kIHRoZSBmb3JtYXQgaW4gd2hpY2ggaXQgaXMgc2hvd24gKCpub3RlIFNldHRpbmcgRm9ybWF0OjopLCBvciBoYXZlCisgYHRpbWUnIHNhdmUgdGhlIGluZm9ybWF0aW9uIGluIGEgZmlsZSBpbnN0ZWFkIG9mIGRpc3BsYXlpbmcgaXQgb24gdGhlCistc2NyZWVuICgqbm90ZSBSZWRpcmVjdGluZzo6LikuCisrc2NyZWVuICgqbm90ZSBSZWRpcmVjdGluZzo6KS4KKyAKKyAgICBUaGUgcmVzb3VyY2VzIHRoYXQgYHRpbWUnIGNhbiByZXBvcnQgb24gZmFsbCBpbnRvIHRoZSBnZW5lcmFsCisgY2F0ZWdvcmllcyBvZiB0aW1lLCBtZW1vcnksIGFuZCBJL08gYW5kIElQQyBjYWxscy4gIFNvbWUgc3lzdGVtcyBkbyBub3QKKyBwcm92aWRlIG11Y2ggaW5mb3JtYXRpb24gYWJvdXQgcHJvZ3JhbSByZXNvdXJjZSB1c2U7IGB0aW1lJyByZXBvcnRzCistdW5hdmFpbGFibGUgaW5mb3JtYXRpb24gYXMgemVybyB2YWx1ZXMgKCpub3RlIEFjY3VyYWN5OjouKS4KKyt1bmF2YWlsYWJsZSBpbmZvcm1hdGlvbiBhcyB6ZXJvIHZhbHVlcyAoKm5vdGUgQWNjdXJhY3k6OikuCisgCisgICAgVGhlIGZvcm1hdCBvZiB0aGUgYHRpbWUnIGNvbW1hbmQgaXM6CisgCitAQCAtMTMyLDYgKzEzNywxMCBAQAorICAgICAgICAgICB1c2VyICVVCisgICAgICAgICAgIHN5cyAlUworIAorK2AtcScKKytgLS1xdWlldCcKKysgICAgIFN1cHByZXNzIG5vbi16ZXJvIGVycm9yIGNvZGUgZnJvbSB0aGUgZXhlY3V0ZWQgcHJvZ3JhbS4KKysKKyBgLXYnCisgYC0tdmVyYm9zZScKKyAgICAgIFVzZSB0aGUgYnVpbHQtaW4gdmVyYm9zZSBmb3JtYXQsIHdoaWNoIGRpc3BsYXlzIGVhY2ggYXZhaWxhYmxlCitAQCAtMTc0LDcgKzE4Myw3IEBACisgICAgVGhlIHJlc291cmNlIHNwZWNpZmllcnMsIHdoaWNoIGFyZSBhIHN1cGVyc2V0IG9mIHRob3NlIHJlY29nbml6ZWQgYnkKKyB0aGUgYHRjc2gnIGJ1aWx0aW4gYHRpbWUnIGNvbW1hbmQsIGFyZSBsaXN0ZWQgYmVsb3cuICBOb3QgYWxsIHJlc291cmNlcworIGFyZSBtZWFzdXJlZCBieSBhbGwgdmVyc2lvbnMgb2YgVW5peCwgc28gc29tZSBvZiB0aGUgdmFsdWVzIG1pZ2h0IGJlCistcmVwb3J0ZWQgYXMgemVybyAoKm5vdGUgQWNjdXJhY3k6Oi4pLgorK3JlcG9ydGVkIGFzIHplcm8gKCpub3RlIEFjY3VyYWN5OjopLgorIAorICogTWVudToKKyAKK0BAIC0zMDgsMTEgKzMxNywxMSBAQAorIGAtbyBGSUxFJworIGAtLW91dHB1dD1GSUxFJworICAgICAgV3JpdGUgdGhlIHJlc291cmNlIHVzZSBzdGF0aXN0aWNzIHRvIEZJTEUuICBCeSBkZWZhdWx0LCB0aGlzCistICAgICAqb3ZlcndyaXRlcyogdGhlIGZpbGUsIGRlc3Ryb3lpbmcgdGhlIGZpbGUncyBwcmV2aW91cyBjb250ZW50cy4KKysgICAgIF9vdmVyd3JpdGVzXyB0aGUgZmlsZSwgZGVzdHJveWluZyB0aGUgZmlsZSdzIHByZXZpb3VzIGNvbnRlbnRzLgorIAorIGAtYScKKyBgLS1hcHBlbmQnCistICAgICAqQXBwZW5kKiB0aGUgcmVzb3VyY2UgdXNlIGluZm9ybWF0aW9uIHRvIHRoZSBvdXRwdXQgZmlsZSBpbnN0ZWFkCisrICAgICBfQXBwZW5kXyB0aGUgcmVzb3VyY2UgdXNlIGluZm9ybWF0aW9uIHRvIHRoZSBvdXRwdXQgZmlsZSBpbnN0ZWFkCisgICAgICBvZiBvdmVyd3JpdGluZyBpdC4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgdXNlZnVsIHdpdGggdGhlIGAtbycgb3IKKyAgICAgIGAtLW91dHB1dCcgb3B0aW9uLgorIAorQEAgLTQzNyw3ICs0NDYsNyBAQAorIAorIGAtYScKKyBgLS1hcHBlbmQnCistICAgICAqQXBwZW5kKiB0aGUgcmVzb3VyY2UgdXNlIGluZm9ybWF0aW9uIHRvIHRoZSBvdXRwdXQgZmlsZSBpbnN0ZWFkCisrICAgICBfQXBwZW5kXyB0aGUgcmVzb3VyY2UgdXNlIGluZm9ybWF0aW9uIHRvIHRoZSBvdXRwdXQgZmlsZSBpbnN0ZWFkCisgICAgICBvZiBvdmVyd3JpdGluZyBpdC4KKyAKKyBgLWYgRk9STUFUJworQEAgLTQ2MiwxNyArNDcxLDE3IEBACisgCisgHworIFRhZyBUYWJsZToKKy1Ob2RlOiBUb3B/OTM0CistTm9kZTogUmVzb3VyY2UgTWVhc3VyZW1lbnR/MTcyNQorLU5vZGU6IFNldHRpbmcgRm9ybWF0fzM2NzgKKy1Ob2RlOiBGb3JtYXQgU3RyaW5nfzQ5MDcKKy1Ob2RlOiBUaW1lIFJlc291cmNlc382MjE0CistTm9kZTogTWVtb3J5IFJlc291cmNlc382ODQ0CistTm9kZTogSS9PIFJlc291cmNlc383NTQ5CistTm9kZTogQ29tbWFuZCBJbmZvfzg3NDcKKy1Ob2RlOiBSZWRpcmVjdGluZ384OTY0CistTm9kZTogRXhhbXBsZXN/OTc1NAorLU5vZGU6IEFjY3VyYWN5fzEyMDY0CistTm9kZTogSW52b2tpbmcgdGltZX8xMzU4NgorK05vZGU6IFRvcH8xMTE1CisrTm9kZTogUmVzb3VyY2UgTWVhc3VyZW1lbnR/MTkwOAorK05vZGU6IFNldHRpbmcgRm9ybWF0fzM4NTgKKytOb2RlOiBGb3JtYXQgU3RyaW5nfzUxNjQKKytOb2RlOiBUaW1lIFJlc291cmNlc382NDcwCisrTm9kZTogTWVtb3J5IFJlc291cmNlc383MTAwCisrTm9kZTogSS9PIFJlc291cmNlc383ODA1CisrTm9kZTogQ29tbWFuZCBJbmZvfzkwMDMKKytOb2RlOiBSZWRpcmVjdGluZ385MjIwCisrTm9kZTogRXhhbXBsZXN/MTAwMTAKKytOb2RlOiBBY2N1cmFjeX8xMjMyMAorK05vZGU6IEludm9raW5nIHRpbWV/MTM4NDIKKyAfCisgRW5kIFRhZyBUYWJsZQorLS0tIHRpbWUtMS43Lm9yaWcvdGltZS5odG1sCisrKysgdGltZS0xLjcvdGltZS5odG1sCitAQCAtMCwwICsxLDEwMjEgQEAKKys8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorKyAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQwL2xvb3NlLmR0ZCI+CisrPEhUTUw+CisrPCEtLSBDcmVhdGVkIG9uIFNlcHRlbWJlciwgMSAyMDAzIGJ5IHRleGkyaHRtbCAxLjY2IC0tPgorKzwhLS0KKytXcml0dGVuIGJ5OiBMaW9uZWwgQ29ucyA8TGlvbmVsLkNvbnNAY2Vybi5jaD4gKG9yaWdpbmFsIGF1dGhvcikKKysgICAgICAgICAgICBLYXJsIEJlcnJ5ICA8a2FybEBmcmVlZnJpZW5kcy5vcmc+CisrICAgICAgICAgICAgT2xhZiBCYWNobWFubiA8b2JhY2htYW5AbWF0aGVtYXRpay51bmkta2wuZGU+CisrICAgICAgICAgICAgYW5kIG1hbnkgb3RoZXJzLgorK01haW50YWluZWQgYnk6IE1hbnkgY3JlYXRpdmUgcGVvcGxlIDxkZXZAdGV4aTJodG1sLmN2c2hvbWUub3JnPgorK1NlbmQgYnVncyBhbmQgc3VnZ2VzdGlvbnMgdG8gPHVzZXJzQHRleGkyaHRtbC5jdnNob21lLm9yZz4KKysKKystLT4KKys8SEVBRD4KKys8VElUTEU+TWVhc3VyaW5nIFByb2dyYW0gUmVzb3VyY2UgVXNlPC9USVRMRT4KKysKKys8TUVUQSBOQU1FPSJkZXNjcmlwdGlvbiIgQ09OVEVOVD0iTWVhc3VyaW5nIFByb2dyYW0gUmVzb3VyY2UgVXNlIj4KKys8TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0iTWVhc3VyaW5nIFByb2dyYW0gUmVzb3VyY2UgVXNlIj4KKys8TUVUQSBOQU1FPSJyZXNvdXJjZS10eXBlIiBDT05URU5UPSJkb2N1bWVudCI+CisrPE1FVEEgTkFNRT0iZGlzdHJpYnV0aW9uIiBDT05URU5UPSJnbG9iYWwiPgorKzxNRVRBIE5BTUU9IkdlbmVyYXRvciIgQ09OVEVOVD0idGV4aTJodG1sIDEuNjYiPgorKworKzwvSEVBRD4KKysKKys8Qk9EWSBMQU5HPSJlbiIgQkdDT0xPUj0iI0ZGRkZGRiIgVEVYVD0iIzAwMDAwMCIgTElOSz0iIzAwMDBGRiIgVkxJTks9IiM4MDAwODAiIEFMSU5LPSIjRkYwMDAwIj4KKysKKys8QSBOQU1FPSJTRUNfVG9wIj48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMT5NZWFzdXJpbmcgUHJvZ3JhbSBSZXNvdXJjZSBVc2U8L0gxPgorKworKzxQPgorKworK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIHRoZSBHTlUgPENPREU+dGltZTwvQ09ERT4gY29tbWFuZCBmb3IgcnVubmluZyBwcm9ncmFtcworK2FuZCBzdW1tYXJpemluZyB0aGUgc3lzdGVtIHJlc291cmNlcyB0aGV5IHVzZS4KKytUaGlzIGlzIGVkaXRpb24gMS43LCBmb3IgdmVyc2lvbiAxLjcuCisrPC9QPgorKzxQPgorKworKzwvUD4KKys8VEFCTEUgQk9SREVSPSIwIiBDRUxMU1BBQ0lORz0iMCI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUMxIj4xLiBNZWFzdXJpbmcgUHJvZ3JhbSBSZXNvdXJjZSBVc2U8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5NZWFzdXJpbmcgcHJvZ3JhbSByZXNvdXJjZSB1c2UuPC9URD48L1RSPgorKzxUUj48VEggQ09MU1BBTj0iMyIgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj4KKys8L1RIPjwvVFI+CisrPFRSPjxUSCBDT0xTUEFOPSIzIiBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPiAtLSBUaGUgRGV0YWlsZWQgTm9kZSBMaXN0aW5nIC0tLQorKzwvVEg+PC9UUj4KKys8VFI+PFRIIENPTFNQQU49IjMiIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+CisrPC9USD48L1RSPgorKzxUUj48VEggQ09MU1BBTj0iMyIgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5NZWFzdXJpbmcgUHJvZ3JhbSBSZXNvdXJjZSBVc2UKKys8L1RIPjwvVFI+CisrPFRSPjxUSCBDT0xTUEFOPSIzIiBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPgorKzwvVEg+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzIiPjEuMSBTZXR0aW5nIHRoZSBPdXRwdXQgRm9ybWF0PC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+U2VsZWN0aW5nIHRoZSBpbmZvcm1hdGlvbiByZXBvcnRlZCBieSA8Q09ERT50aW1lPC9DT0RFPi48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUMzIj4xLjIgVGhlIEZvcm1hdCBTdHJpbmc8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5UaGUgaW5mb3JtYXRpb24gPENPREU+dGltZTwvQ09ERT4gY2FuIHJlcG9ydC48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUM4Ij4xLjMgUmVkaXJlY3RpbmcgT3V0cHV0PC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+V3JpdGluZyB0aGUgaW5mb3JtYXRpb24gdG8gYSBmaWxlLjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzkiPjEuNCBFeGFtcGxlczwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPkV4YW1wbGVzIG9mIHVzaW5nIDxDT0RFPnRpbWU8L0NPREU+LjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzEwIj4xLjUgQWNjdXJhY3k8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5MaW1pdGF0aW9ucyBvbiB0aGUgYWNjdXJhY3kgb2YgPENPREU+dGltZTwvQ09ERT4gb3V0cHV0LjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzExIj4xLjYgUnVubmluZyB0aGUgPENPREU+dGltZTwvQ09ERT4gQ29tbWFuZDwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPlN1bW1hcnkgb2YgdGhlIG9wdGlvbnMgdG8gdGhlIDxDT0RFPnRpbWU8L0NPREU+IGNvbW1hbmQuPC9URD48L1RSPgorKzxUUj48VEggQ09MU1BBTj0iMyIgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj4KKys8L1RIPjwvVFI+CisrPFRSPjxUSCBDT0xTUEFOPSIzIiBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPlRoZSBGb3JtYXQgU3RyaW5nCisrPC9USD48L1RSPgorKzxUUj48VEggQ09MU1BBTj0iMyIgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj4KKys8L1RIPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUM0Ij4xLjIuMSBUaW1lIFJlc291cmNlczwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzUiPjEuMi4yIE1lbW9yeSBSZXNvdXJjZXM8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUM2Ij4xLjIuMyBJL08gUmVzb3VyY2VzPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNyI+MS4yLjQgQ29tbWFuZCBJbmZvPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PC9URD48L1RSPgorKzwvVEFCTEU+CisrPFA+CisrCisrPEhSIFNJWkU9MT4KKys8QSBOQU1FPSJTRUMxIj48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMyIj4gJmd0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bICZsdDsmbHQ7IF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+IFVwIDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bICZndDsmZ3Q7IF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxBIE5BTUU9IlJlc291cmNlIE1lYXN1cmVtZW50Ij48L0E+CisrPEgxPiAxLiBNZWFzdXJpbmcgUHJvZ3JhbSBSZXNvdXJjZSBVc2UgPC9IMT4KKys8IS0tZG9jaWQ6OlNFQzE6Oi0tPgorKzxQPgorKworK1RoZSA8Q09ERT50aW1lPC9DT0RFPiBjb21tYW5kIHJ1bnMgYW5vdGhlciBwcm9ncmFtLCB0aGVuIGRpc3BsYXlzIGluZm9ybWF0aW9uCisrYWJvdXQgdGhlIHJlc291cmNlcyB1c2VkIGJ5IHRoYXQgcHJvZ3JhbSwgY29sbGVjdGVkIGJ5IHRoZSBzeXN0ZW0gd2hpbGUKKyt0aGUgcHJvZ3JhbSB3YXMgcnVubmluZy4gIFlvdSBjYW4gc2VsZWN0IHdoaWNoIGluZm9ybWF0aW9uIGlzIHJlcG9ydGVkCisrYW5kIHRoZSBmb3JtYXQgaW4gd2hpY2ggaXQgaXMgc2hvd24gKHNlZSBzZWN0aW9uIDxBIEhSRUY9InRpbWUuaHRtbCNTRUMyIj4xLjEgU2V0dGluZyB0aGUgT3V0cHV0IEZvcm1hdDwvQT4pLCBvciBoYXZlCisrPENPREU+dGltZTwvQ09ERT4gc2F2ZSB0aGUgaW5mb3JtYXRpb24gaW4gYSBmaWxlIGluc3RlYWQgb2YgZGlzcGxheWluZyBpdCBvbiB0aGUKKytzY3JlZW4gKHNlZSBzZWN0aW9uIDxBIEhSRUY9InRpbWUuaHRtbCNTRUM4Ij4xLjMgUmVkaXJlY3RpbmcgT3V0cHV0PC9BPikuCisrPC9QPgorKzxQPgorKworK1RoZSByZXNvdXJjZXMgdGhhdCA8Q09ERT50aW1lPC9DT0RFPiBjYW4gcmVwb3J0IG9uIGZhbGwgaW50byB0aGUgZ2VuZXJhbAorK2NhdGVnb3JpZXMgb2YgdGltZSwgbWVtb3J5LCBhbmQgSS9PIGFuZCBJUEMgY2FsbHMuICBTb21lIHN5c3RlbXMgZG8gbm90CisrcHJvdmlkZSBtdWNoIGluZm9ybWF0aW9uIGFib3V0IHByb2dyYW0gcmVzb3VyY2UgdXNlOyA8Q09ERT50aW1lPC9DT0RFPgorK3JlcG9ydHMgdW5hdmFpbGFibGUgaW5mb3JtYXRpb24gYXMgemVybyB2YWx1ZXMgKHNlZSBzZWN0aW9uIDxBIEhSRUY9InRpbWUuaHRtbCNTRUMxMCI+MS41IEFjY3VyYWN5PC9BPikuCisrPC9QPgorKzxQPgorKworK1RoZSBmb3JtYXQgb2YgdGhlIDxDT0RFPnRpbWU8L0NPREU+IGNvbW1hbmQgaXM6CisrPC9QPgorKzxQPgorKworKzxUQUJMRT48dHI+PHRkPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPWV4YW1wbGU+PHByZT50aW1lIFtvcHRpb248c21hbGw+Li4uPC9zbWFsbD5dIDxWQVI+Y29tbWFuZDwvVkFSPiBbPFZBUj5hcmc8L1ZBUj48c21hbGw+Li4uPC9zbWFsbD5dCisrPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+PFA+CisrCisrPEEgTkFNRT0iSURYMSI+PC9BPgorKzxDT0RFPnRpbWU8L0NPREU+IHJ1bnMgdGhlIHByb2dyYW0gPFZBUj5jb21tYW5kPC9WQVI+LCB3aXRoIGFueSBnaXZlbiBhcmd1bWVudHMKKys8VkFSPmFyZzwvVkFSPjxzbWFsbD4uLi48L3NtYWxsPi4gIFdoZW4gPFZBUj5jb21tYW5kPC9WQVI+IGZpbmlzaGVzLCA8Q09ERT50aW1lPC9DT0RFPiBkaXNwbGF5cworK2luZm9ybWF0aW9uIGFib3V0IHJlc291cmNlcyB1c2VkIGJ5IDxWQVI+Y29tbWFuZDwvVkFSPi4KKys8L1A+CisrPFA+CisrCisrSGVyZSBpcyBhbiBleGFtcGxlIG9mIHVzaW5nIDxDT0RFPnRpbWU8L0NPREU+IHRvIG1lYXN1cmUgdGhlIHRpbWUgYW5kIG90aGVyCisrcmVzb3VyY2VzIHVzZWQgYnkgcnVubmluZyB0aGUgcHJvZ3JhbSA8Q09ERT5ncmVwPC9DT0RFPjoKKys8L1A+CisrPFA+CisrCisrPFRBQkxFPjx0cj48dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ZXhhbXBsZT48cHJlPmVnJCB0aW1lIGdyZXAgbm9ib2R5IC9ldGMvYWxpYXNlcworK25vYm9keTovZGV2L251bGwKKytldGMtZmlsZXM6bm9ib2R5CisrbWlzYy1ncm91cDpub2JvZHkKKyswLjA3dXNlciAwLjUwc3lzdGVtIDA6MDYuNjllbGFwc2VkIDglQ1BVICgwYXZndGV4dCs0ODlhdmdkYXRhIDMyNG1heHJlc2lkZW50KWsKKys0NmlucHV0cys3b3V0cHV0cyAoNDNtYWpvcisyNTFtaW5vcilwYWdlZmF1bHRzIDBzd2FwcworKzwvcHJlPjwvdGQ+PC90cj48L3RhYmxlPjxQPgorKworK01haWwgc3VnZ2VzdGlvbnMgYW5kIGJ1ZyByZXBvcnRzIGZvciBHTlUgPENPREU+dGltZTwvQ09ERT4gdG8KKys8Q09ERT5idWctZ251LXV0aWxzQHByZXAuYWkubWl0LmVkdTwvQ09ERT4uICBQbGVhc2UgaW5jbHVkZSB0aGUgdmVyc2lvbiBvZgorKzxDT0RFPnRpbWU8L0NPREU+LCB3aGljaCB5b3UgY2FuIGdldCBieSBydW5uaW5nIGA8U0FNUD50aW1lIC0tdmVyc2lvbjwvU0FNUD4nLCBhbmQgdGhlCisrb3BlcmF0aW5nIHN5c3RlbSBhbmQgQyBjb21waWxlciB5b3UgdXNlZC4KKys8L1A+CisrPFA+CisrCisrPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFNQQUNJTkc9IjAiPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMiI+MS4xIFNldHRpbmcgdGhlIE91dHB1dCBGb3JtYXQ8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5TZWxlY3RpbmcgdGhlIGluZm9ybWF0aW9uIHJlcG9ydGVkIGJ5IDxDT0RFPnRpbWU8L0NPREU+LjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzMiPjEuMiBUaGUgRm9ybWF0IFN0cmluZzwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPlRoZSBpbmZvcm1hdGlvbiA8Q09ERT50aW1lPC9DT0RFPiBjYW4gcmVwb3J0LjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzgiPjEuMyBSZWRpcmVjdGluZyBPdXRwdXQ8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5Xcml0aW5nIHRoZSBpbmZvcm1hdGlvbiB0byBhIGZpbGUuPC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDOSI+MS40IEV4YW1wbGVzPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+RXhhbXBsZXMgb2YgdXNpbmcgPENPREU+dGltZTwvQ09ERT4uPC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMTAiPjEuNSBBY2N1cmFjeTwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPkxpbWl0YXRpb25zIG9uIHRoZSBhY2N1cmFjeSBvZiA8Q09ERT50aW1lPC9DT0RFPiBvdXRwdXQuPC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMTEiPjEuNiBSdW5uaW5nIHRoZSA8Q09ERT50aW1lPC9DT0RFPiBDb21tYW5kPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+U3VtbWFyeSBvZiB0aGUgb3B0aW9ucyB0byB0aGUgPENPREU+dGltZTwvQ09ERT4gY29tbWFuZC48L1REPjwvVFI+CisrPC9UQUJMRT4KKys8UD4KKysKKys8QSBOQU1FPSJTZXR0aW5nIEZvcm1hdCI+PC9BPgorKzxIUiBTSVpFPSI2Ij4KKys8QSBOQU1FPSJTRUMyIj48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxIj4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMzIj4gJmd0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7Jmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgyPiAxLjEgU2V0dGluZyB0aGUgT3V0cHV0IEZvcm1hdCA8L0gyPgorKzwhLS1kb2NpZDo6U0VDMjo6LS0+CisrPFA+CisrCisrPENPREU+dGltZTwvQ09ERT4gdXNlcyBhIDxFTT5mb3JtYXQgc3RyaW5nPC9FTT4gdG8gZGV0ZXJtaW5lIHdoaWNoIGluZm9ybWF0aW9uIHRvCisrZGlzcGxheSBhYm91dCB0aGUgcmVzb3VyY2VzIHVzZWQgYnkgdGhlIGNvbW1hbmQgaXQgcnVucy4gIFNlZSBzZWN0aW9uIDxBIEhSRUY9InRpbWUuaHRtbCNTRUMzIj4xLjIgVGhlIEZvcm1hdCBTdHJpbmc8L0E+LCBmb3IgdGhlIGludGVycHJldGF0aW9uIG9mIHRoZSBmb3JtYXQgc3RyaW5nIGNvbnRlbnRzLgorKzwvUD4KKys8UD4KKysKKytZb3UgY2FuIHNwZWNpZnkgYSBmb3JtYXQgc3RyaW5nIHdpdGggdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zIGxpc3RlZAorK2JlbG93LiAgSWYgbm8gZm9ybWF0IGlzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBidXQgdGhlCisrPENPREU+VElNRTwvQ09ERT4gZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LCBpdHMgdmFsdWUgaXMgdXNlZCBhcyB0aGUgZm9ybWF0Cisrc3RyaW5nLiAgT3RoZXJ3aXNlLCB0aGUgZGVmYXVsdCBmb3JtYXQgYnVpbHQgaW50byA8Q09ERT50aW1lPC9DT0RFPiBpcyB1c2VkOgorKzwvUD4KKys8UD4KKysKKys8VEFCTEU+PHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZCBjbGFzcz1leGFtcGxlPjxwcmU+JVV1c2VyICVTc3lzdGVtICVFZWxhcHNlZCAlUENQVSAoJVh0ZXh0KyVEZGF0YSAlTW1heClrCisrJUlpbnB1dHMrJU9vdXRwdXRzICglRm1ham9yKyVSbWlub3IpcGFnZWZhdWx0cyAlV3N3YXBzCisrPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+PFA+CisrCisrVGhlIGNvbW1hbmQgbGluZSBvcHRpb25zIHRvIHNldCB0aGUgZm9ybWF0IGFyZToKKys8L1A+CisrPFA+CisrCisrPC9QPgorKzxETCBDT01QQUNUPgorKzxEVD48Q09ERT4tZiA8VkFSPmZvcm1hdDwvVkFSPjwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tZm9ybWF0PTxWQVI+Zm9ybWF0PC9WQVI+PC9DT0RFPgorKzxERD5Vc2UgPFZBUj5mb3JtYXQ8L1ZBUj4gYXMgdGhlIGZvcm1hdCBzdHJpbmcuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT4tcDwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tcG9ydGFiaWxpdHk8L0NPREU+CisrPEREPlVzZSB0aGUgZm9sbG93aW5nIGZvcm1hdCBzdHJpbmcsIGZvciBjb25mb3JtYW5jZSB3aXRoIFBPU0lYIHN0YW5kYXJkCisrMTAwMy4yOgorKzxQPgorKworKzxUQUJMRT48dHI+PHRkPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPWV4YW1wbGU+PHByZT5yZWFsICVlCisrdXNlciAlVQorK3N5cyAlUworKzwvcHJlPjwvdGQ+PC90cj48L3RhYmxlPjxQPgorKworKzwvUD4KKys8RFQ+PENPREU+LXE8L0NPREU+CisrPEREPjxEVD48Q09ERT4tLXF1aWV0PC9DT0RFPgorKzxERD5TdXBwcmVzcyBub24temVybyBlcnJvciBjb2RlIGZyb20gdGhlIGV4ZWN1dGVkIHByb2dyYW0uCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT4tdjwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tdmVyYm9zZTwvQ09ERT4KKys8REQ+PEEgTkFNRT0iSURYMiI+PC9BPgorK1VzZSB0aGUgYnVpbHQtaW4gdmVyYm9zZSBmb3JtYXQsIHdoaWNoIGRpc3BsYXlzIGVhY2ggYXZhaWxhYmxlIHBpZWNlIG9mCisraW5mb3JtYXRpb24gb24gdGhlIHByb2dyYW0ncyByZXNvdXJjZSB1c2Ugb24gaXRzIG93biBsaW5lLCB3aXRoIGFuCisrRW5nbGlzaCBkZXNjcmlwdGlvbiBvZiBpdHMgbWVhbmluZy4KKys8L0RMPgorKzxQPgorKworKzxBIE5BTUU9IkZvcm1hdCBTdHJpbmciPjwvQT4KKys8SFIgU0laRT0iNiI+CisrPEEgTkFNRT0iU0VDMyI+PC9BPgorKzxUQUJMRSBDRUxMUEFERElORz0xIENFTExTUEFDSU5HPTEgQk9SREVSPTA+CisrPFRSPjxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMiI+ICZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNCI+ICZndDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxIj4gJmx0OyZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+IFVwIDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bICZndDsmZ3Q7IF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMj4gMS4yIFRoZSBGb3JtYXQgU3RyaW5nIDwvSDI+CisrPCEtLWRvY2lkOjpTRUMzOjotLT4KKys8UD4KKysKKys8QSBOQU1FPSJJRFgzIj48L0E+CisrPEEgTkFNRT0iSURYNCI+PC9BPgorK1RoZSA8RU0+Zm9ybWF0IHN0cmluZzwvRU0+IGNvbnRyb2xzIHRoZSBjb250ZW50cyBvZiB0aGUgPENPREU+dGltZTwvQ09ERT4gb3V0cHV0LgorK0l0IGNvbnNpc3RzIG9mIDxFTT5yZXNvdXJjZSBzcGVjaWZpZXJzPC9FTT4gYW5kIDxFTT5lc2NhcGVzPC9FTT4sIGludGVyc3BlcnNlZAorK3dpdGggcGxhaW4gdGV4dC4KKys8L1A+CisrPFA+CisrCisrQSBiYWNrc2xhc2ggaW50cm9kdWNlcyBhbiA8RU0+ZXNjYXBlPC9FTT4sIHdoaWNoIGlzIHRyYW5zbGF0ZWQKKytpbnRvIGEgc2luZ2xlIHByaW50aW5nIGNoYXJhY3RlciB1cG9uIG91dHB1dC4gIFRoZSB2YWxpZCBlc2NhcGVzIGFyZQorK2xpc3RlZCBiZWxvdy4gIEFuIGludmFsaWQgZXNjYXBlIGlzIG91dHB1dCBhcyBhIHF1ZXN0aW9uIG1hcmsgZm9sbG93ZWQKKytieSBhIGJhY2tzbGFzaC4KKys8L1A+CisrPFA+CisrCisrPC9QPgorKzxETCBDT01QQUNUPgorKzxEVD48Q09ERT5cdDwvQ09ERT4KKys8REQ+YSB0YWIgY2hhcmFjdGVyCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5cbjwvQ09ERT4KKys8REQ+YSBuZXdsaW5lCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5cXDwvQ09ERT4KKys8REQ+YSBsaXRlcmFsIGJhY2tzbGFzaAorKzwvREw+CisrPFA+CisrCisrPENPREU+dGltZTwvQ09ERT4gYWx3YXlzIHByaW50cyBhIG5ld2xpbmUgYWZ0ZXIgcHJpbnRpbmcgdGhlIHJlc291cmNlIHVzZQorK2luZm9ybWF0aW9uLCBzbyBub3JtYWxseSBmb3JtYXQgc3RyaW5ncyBkbyBub3QgZW5kIHdpdGggYSBuZXdsaW5lCisrY2hhcmFjdGVyIChvciBgPFNBTVA+XG48L1NBTVA+JykuCisrPC9QPgorKzxQPgorKworK0EgcmVzb3VyY2Ugc3BlY2lmaWVyIGNvbnNpc3RzIG9mIGEgcGVyY2VudCBzaWduIGZvbGxvd2VkIGJ5IGFub3RoZXIKKytjaGFyYWN0ZXIuICBBbiBpbnZhbGlkIHJlc291cmNlIHNwZWNpZmllciBpcyBvdXRwdXQgYXMgYSBxdWVzdGlvbiBtYXJrCisrZm9sbG93ZWQgYnkgdGhlIGludmFsaWQgY2hhcmFjdGVyLiAgVXNlIGA8U0FNUD4lJTwvU0FNUD4nIHRvIG91dHB1dCBhIGxpdGVyYWwKKytwZXJjZW50IHNpZ24uCisrPC9QPgorKzxQPgorKworK1RoZSByZXNvdXJjZSBzcGVjaWZpZXJzLCB3aGljaCBhcmUgYSBzdXBlcnNldCBvZiB0aG9zZSByZWNvZ25pemVkIGJ5IHRoZQorKzxDT0RFPnRjc2g8L0NPREU+IGJ1aWx0aW4gPENPREU+dGltZTwvQ09ERT4gY29tbWFuZCwgYXJlIGxpc3RlZCBiZWxvdy4gIE5vdCBhbGwKKytyZXNvdXJjZXMgYXJlIG1lYXN1cmVkIGJ5IGFsbCB2ZXJzaW9ucyBvZiBVbml4LCBzbyBzb21lIG9mIHRoZSB2YWx1ZXMKKyttaWdodCBiZSByZXBvcnRlZCBhcyB6ZXJvIChzZWUgc2VjdGlvbiA8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMTAiPjEuNSBBY2N1cmFjeTwvQT4pLgorKzwvUD4KKys8UD4KKysKKys8VEFCTEUgQk9SREVSPSIwIiBDRUxMU1BBQ0lORz0iMCI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUM0Ij4xLjIuMSBUaW1lIFJlc291cmNlczwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzUiPjEuMi4yIE1lbW9yeSBSZXNvdXJjZXM8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUM2Ij4xLjIuMyBJL08gUmVzb3VyY2VzPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNyI+MS4yLjQgQ29tbWFuZCBJbmZvPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PC9URD48L1RSPgorKzwvVEFCTEU+CisrPFA+CisrCisrPEEgTkFNRT0iVGltZSBSZXNvdXJjZXMiPjwvQT4KKys8SFIgU0laRT0iNiI+CisrPEEgTkFNRT0iU0VDNCI+PC9BPgorKzxUQUJMRSBDRUxMUEFERElORz0xIENFTExTUEFDSU5HPTEgQk9SREVSPTA+CisrPFRSPjxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMyI+ICZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNSI+ICZndDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxIj4gJmx0OyZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+IFVwIDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bICZndDsmZ3Q7IF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMz4gMS4yLjEgVGltZSBSZXNvdXJjZXMgPC9IMz4KKys8IS0tZG9jaWQ6OlNFQzQ6Oi0tPgorKzxQPgorKworKzwvUD4KKys8REwgQ09NUEFDVD4KKys8RFQ+PENPREU+RTwvQ09ERT4KKys8REQ+RWxhcHNlZCByZWFsICh3YWxsIGNsb2NrKSB0aW1lIHVzZWQgYnkgdGhlIHByb2Nlc3MsIGluCisrW2hvdXJzOl1taW51dGVzOnNlY29uZHMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5lPC9DT0RFPgorKzxERD5FbGFwc2VkIHJlYWwgKHdhbGwgY2xvY2spIHRpbWUgdXNlZCBieSB0aGUgcHJvY2VzcywgaW4KKytzZWNvbmRzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+UzwvQ09ERT4KKys8REQ+VG90YWwgbnVtYmVyIG9mIENQVS1zZWNvbmRzIHVzZWQgYnkgdGhlIHN5c3RlbSBvbiBiZWhhbGYgb2YgdGhlIHByb2Nlc3MKKysoaW4ga2VybmVsIG1vZGUpLCBpbiBzZWNvbmRzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+VTwvQ09ERT4KKys8REQ+VG90YWwgbnVtYmVyIG9mIENQVS1zZWNvbmRzIHRoYXQgdGhlIHByb2Nlc3MgdXNlZCBkaXJlY3RseSAoaW4gdXNlcgorK21vZGUpLCBpbiBzZWNvbmRzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+UDwvQ09ERT4KKys8REQ+UGVyY2VudGFnZSBvZiB0aGUgQ1BVIHRoYXQgdGhpcyBqb2IgZ290LiAgVGhpcyBpcyBqdXN0IHVzZXIgKyBzeXN0ZW0KKyt0aW1lcyBkaXZpZWQgYnkgdGhlIHRvdGFsIHJ1bm5pbmcgdGltZS4KKys8L0RMPgorKzxQPgorKworKzxBIE5BTUU9Ik1lbW9yeSBSZXNvdXJjZXMiPjwvQT4KKys8SFIgU0laRT0iNiI+CisrPEEgTkFNRT0iU0VDNSI+PC9BPgorKzxUQUJMRSBDRUxMUEFERElORz0xIENFTExTUEFDSU5HPTEgQk9SREVSPTA+CisrPFRSPjxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNCI+ICZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNiI+ICZndDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxIj4gJmx0OyZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+IFVwIDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bICZndDsmZ3Q7IF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMz4gMS4yLjIgTWVtb3J5IFJlc291cmNlcyA8L0gzPgorKzwhLS1kb2NpZDo6U0VDNTo6LS0+CisrPFA+CisrCisrPC9QPgorKzxETCBDT01QQUNUPgorKzxEVD48Q09ERT5NPC9DT0RFPgorKzxERD5NYXhpbXVtIHJlc2lkZW50IHNldCBzaXplIG9mIHRoZSBwcm9jZXNzIGR1cmluZyBpdHMgbGlmZXRpbWUsIGluCisrS2lsb2J5dGVzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+dDwvQ09ERT4KKys8REQ+QXZlcmFnZSByZXNpZGVudCBzZXQgc2l6ZSBvZiB0aGUgcHJvY2VzcywgaW4gS2lsb2J5dGVzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+SzwvQ09ERT4KKys8REQ+QXZlcmFnZSB0b3RhbCAoZGF0YStzdGFjayt0ZXh0KSBtZW1vcnkgdXNlIG9mIHRoZSBwcm9jZXNzLCBpbiBLaWxvYnl0ZXMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5EPC9DT0RFPgorKzxERD5BdmVyYWdlIHNpemUgb2YgdGhlIHByb2Nlc3MncyB1bnNoYXJlZCBkYXRhIGFyZWEsIGluIEtpbG9ieXRlcy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPnA8L0NPREU+CisrPEREPkF2ZXJhZ2Ugc2l6ZSBvZiB0aGUgcHJvY2VzcydzIHVuc2hhcmVkIHN0YWNrLCBpbiBLaWxvYnl0ZXMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5YPC9DT0RFPgorKzxERD5BdmVyYWdlIHNpemUgb2YgdGhlIHByb2Nlc3MncyBzaGFyZWQgdGV4dCwgaW4gS2lsb2J5dGVzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+WjwvQ09ERT4KKys8REQ+U3lzdGVtJ3MgcGFnZSBzaXplLCBpbiBieXRlcy4gIFRoaXMgaXMgYSBwZXItc3lzdGVtIGNvbnN0YW50LCBidXQKKyt2YXJpZXMgYmV0d2VlbiBzeXN0ZW1zLgorKzwvREw+CisrPFA+CisrCisrPEEgTkFNRT0iSS9PIFJlc291cmNlcyI+PC9BPgorKzxIUiBTSVpFPSI2Ij4KKys8QSBOQU1FPSJTRUM2Ij48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM1Ij4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM3Ij4gJmd0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7Jmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgzPiAxLjIuMyBJL08gUmVzb3VyY2VzIDwvSDM+CisrPCEtLWRvY2lkOjpTRUM2OjotLT4KKys8UD4KKysKKys8L1A+CisrPERMIENPTVBBQ1Q+CisrPERUPjxDT0RFPkY8L0NPREU+CisrPEREPk51bWJlciBvZiBtYWpvciwgb3IgSS9PLXJlcXVpcmluZywgcGFnZSBmYXVsdHMgdGhhdCBvY2N1cnJlZCB3aGlsZSB0aGUKKytwcm9jZXNzIHdhcyBydW5uaW5nLiAgVGhlc2UgYXJlIGZhdWx0cyB3aGVyZSB0aGUgcGFnZSBoYXMgYWN0dWFsbHkKKyttaWdyYXRlZCBvdXQgb2YgcHJpbWFyeSBtZW1vcnkuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5SPC9DT0RFPgorKzxERD5OdW1iZXIgb2YgbWlub3IsIG9yIHJlY292ZXJhYmxlLCBwYWdlIGZhdWx0cy4gIFRoZXNlIGFyZSBwYWdlcyB0aGF0IGFyZQorK25vdCB2YWxpZCAoc28gdGhleSBmYXVsdCkgYnV0IHdoaWNoIGhhdmUgbm90IHlldCBiZWVuIGNsYWltZWQgYnkgb3RoZXIKKyt2aXJ0dWFsIHBhZ2VzLiAgVGh1cyB0aGUgZGF0YSBpbiB0aGUgcGFnZSBpcyBzdGlsbCB2YWxpZCBidXQgdGhlIHN5c3RlbQorK3RhYmxlcyBtdXN0IGJlIHVwZGF0ZWQuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5XPC9DT0RFPgorKzxERD5OdW1iZXIgb2YgdGltZXMgdGhlIHByb2Nlc3Mgd2FzIHN3YXBwZWQgb3V0IG9mIG1haW4gbWVtb3J5LgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+YzwvQ09ERT4KKys8REQ+TnVtYmVyIG9mIHRpbWVzIHRoZSBwcm9jZXNzIHdhcyBjb250ZXh0LXN3aXRjaGVkIGludm9sdW50YXJpbHkgKGJlY2F1c2UKKyt0aGUgdGltZSBzbGljZSBleHBpcmVkKS4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPnc8L0NPREU+CisrPEREPk51bWJlciBvZiB0aW1lcyB0aGF0IHRoZSBwcm9ncmFtIHdhcyBjb250ZXh0LXN3aXRjaGVkIHZvbHVudGFyaWx5LCBmb3IKKytpbnN0YW5jZSB3aGlsZSB3YWl0aW5nIGZvciBhbiBJL08gb3BlcmF0aW9uIHRvIGNvbXBsZXRlLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+STwvQ09ERT4KKys8REQ+TnVtYmVyIG9mIGZpbGUgc3lzdGVtIGlucHV0cyBieSB0aGUgcHJvY2Vzcy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPk88L0NPREU+CisrPEREPk51bWJlciBvZiBmaWxlIHN5c3RlbSBvdXRwdXRzIGJ5IHRoZSBwcm9jZXNzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+cjwvQ09ERT4KKys8REQ+TnVtYmVyIG9mIHNvY2tldCBtZXNzYWdlcyByZWNlaXZlZCBieSB0aGUgcHJvY2Vzcy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPnM8L0NPREU+CisrPEREPk51bWJlciBvZiBzb2NrZXQgbWVzc2FnZXMgc2VudCBieSB0aGUgcHJvY2Vzcy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPms8L0NPREU+CisrPEREPk51bWJlciBvZiBzaWduYWxzIGRlbGl2ZXJlZCB0byB0aGUgcHJvY2Vzcy4KKys8L0RMPgorKzxQPgorKworKzxBIE5BTUU9IkNvbW1hbmQgSW5mbyI+PC9BPgorKzxIUiBTSVpFPSI2Ij4KKys8QSBOQU1FPSJTRUM3Ij48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM2Ij4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM4Ij4gJmd0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7Jmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgzPiAxLjIuNCBDb21tYW5kIEluZm8gPC9IMz4KKys8IS0tZG9jaWQ6OlNFQzc6Oi0tPgorKzxQPgorKworKzwvUD4KKys8REwgQ09NUEFDVD4KKys8RFQ+PENPREU+QzwvQ09ERT4KKys8REQ+TmFtZSBhbmQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBvZiB0aGUgY29tbWFuZCBiZWluZyB0aW1lZC4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPng8L0NPREU+CisrPEREPkV4aXQgc3RhdHVzIG9mIHRoZSBjb21tYW5kLgorKzwvREw+CisrPFA+CisrCisrPEEgTkFNRT0iUmVkaXJlY3RpbmciPjwvQT4KKys8SFIgU0laRT0iNiI+CisrPEEgTkFNRT0iU0VDOCI+PC9BPgorKzxUQUJMRSBDRUxMUEFERElORz0xIENFTExTUEFDSU5HPTEgQk9SREVSPTA+CisrPFRSPjxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNyI+ICZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDOSI+ICZndDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxIj4gJmx0OyZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+IFVwIDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bICZndDsmZ3Q7IF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMj4gMS4zIFJlZGlyZWN0aW5nIE91dHB1dCA8L0gyPgorKzwhLS1kb2NpZDo6U0VDODo6LS0+CisrPFA+CisrCisrQnkgZGVmYXVsdCwgPENPREU+dGltZTwvQ09ERT4gd3JpdGVzIHRoZSByZXNvdXJjZSB1c2Ugc3RhdGlzdGljcyB0byB0aGUKKytzdGFuZGFyZCBlcnJvciBzdHJlYW0uICBUaGUgb3B0aW9ucyBiZWxvdyBtYWtlIGl0IHdyaXRlIHRoZSBzdGF0aXN0aWNzCisrdG8gYSBmaWxlIGluc3RlYWQuICBEb2luZyB0aGlzIGNhbiBiZSB1c2VmdWwgaWYgdGhlIHByb2dyYW0geW91J3JlCisrcnVubmluZyB3cml0ZXMgdG8gdGhlIHN0YW5kYXJkIGVycm9yIG9yIHlvdSdyZSBydW5uaW5nIDxDT0RFPnRpbWU8L0NPREU+Cisrbm9uaW50ZXJhY3RpdmVseSBvciBpbiB0aGUgYmFja2dyb3VuZC4KKys8L1A+CisrPFA+CisrCisrPC9QPgorKzxETCBDT01QQUNUPgorKzxEVD48Q09ERT4tbyA8VkFSPmZpbGU8L1ZBUj48L0NPREU+CisrPEREPjxEVD48Q09ERT4tLW91dHB1dD08VkFSPmZpbGU8L1ZBUj48L0NPREU+CisrPEREPldyaXRlIHRoZSByZXNvdXJjZSB1c2Ugc3RhdGlzdGljcyB0byA8VkFSPmZpbGU8L1ZBUj4uICBCeSBkZWZhdWx0LCB0aGlzCisrPEVNPm92ZXJ3cml0ZXM8L0VNPiB0aGUgZmlsZSwgZGVzdHJveWluZyB0aGUgZmlsZSdzIHByZXZpb3VzIGNvbnRlbnRzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+LWE8L0NPREU+CisrPEREPjxEVD48Q09ERT4tLWFwcGVuZDwvQ09ERT4KKys8REQ+PEVNPkFwcGVuZDwvRU0+IHRoZSByZXNvdXJjZSB1c2UgaW5mb3JtYXRpb24gdG8gdGhlIG91dHB1dCBmaWxlIGluc3RlYWQKKytvZiBvdmVyd3JpdGluZyBpdC4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgdXNlZnVsIHdpdGggdGhlIGA8U0FNUD4tbzwvU0FNUD4nIG9yCisrYDxTQU1QPi0tb3V0cHV0PC9TQU1QPicgb3B0aW9uLgorKzwvREw+CisrPFA+CisrCisrPEEgTkFNRT0iRXhhbXBsZXMiPjwvQT4KKys8SFIgU0laRT0iNiI+CisrPEEgTkFNRT0iU0VDOSI+PC9BPgorKzxUQUJMRSBDRUxMUEFERElORz0xIENFTExTUEFDSU5HPTEgQk9SREVSPTA+CisrPFRSPjxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDOCI+ICZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMTAiPiAmZ3Q7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMSI+ICZsdDsmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPiBVcCA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WyAmZ3Q7Jmd0OyBdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDI+IDEuNCBFeGFtcGxlcyA8L0gyPgorKzwhLS1kb2NpZDo6U0VDOTo6LS0+CisrPFA+CisrCisrUnVuIHRoZSBjb21tYW5kIGA8U0FNUD53YyAvZXRjL2hvc3RzPC9TQU1QPicgYW5kIHNob3cgdGhlIGRlZmF1bHQgaW5mb3JtYXRpb246CisrPC9QPgorKzxQPgorKworKzxUQUJMRT48dHI+PHRkPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPWV4YW1wbGU+PHByZT5lZyQgdGltZSB3YyAvZXRjL2hvc3RzCisrICAgICAgMzUgICAgIDExMSAgICAxMTM0IC9ldGMvaG9zdHMKKyswLjAwdXNlciAwLjAxc3lzdGVtIDA6MDAuMDRlbGFwc2VkIDI1JUNQVSAoMGF2Z3RleHQrMGF2Z2RhdGEgMG1heHJlc2lkZW50KWsKKysxaW5wdXRzKzFvdXRwdXRzICgwbWFqb3IrMG1pbm9yKXBhZ2VmYXVsdHMgMHN3YXBzCisrPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+PFA+CisrCisrUnVuIHRoZSBjb21tYW5kIGA8U0FNUD5scyAtRnM8L1NBTVA+JyBhbmQgc2hvdyBqdXN0IHRoZSB1c2VyLCBzeXN0ZW0sIGFuZAorK3dhbGwtY2xvY2sgdGltZToKKys8L1A+CisrPFA+CisrCisrPFRBQkxFPjx0cj48dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ZXhhbXBsZT48cHJlPmVnJCB0aW1lIC1mICZxdW90O1x0JUUgcmVhbCxcdCVVIHVzZXIsXHQlUyBzeXMmcXVvdDsgbHMgLUZzCisrdG90YWwgMTYKKysxIGFjY291bnQvICAgICAgMSBkYi8gICAgICAgICAgIDEgbWFpbC8gICAgICAgICAxIHJ1bi8KKysxIGJhY2t1cHMvICAgICAgMSBlbWFjcy8gICAgICAgIDEgbXNncy8gICAgICAgICAxIHJ3aG8vCisrMSBjcmFzaC8gICAgICAgIDEgZ2FtZXMvICAgICAgICAxIHByZXNlcnZlLyAgICAgMSBzcG9vbC8KKysxIGNyb24vICAgICAgICAgMSBsb2cvICAgICAgICAgIDEgcXVvdGFzLyAgICAgICAxIHRtcC8KKysgICAgICAgIDA6MDAuMDMgcmVhbCwgICAwLjAwIHVzZXIsICAgICAgMC4wMSBzeXMKKys8L3ByZT48L3RkPjwvdHI+PC90YWJsZT48UD4KKysKKytFZGl0IHRoZSBmaWxlIGA8VFQ+LmJhc2hyYzwvVFQ+JyBhbmQgaGF2ZSA8Q09ERT50aW1lPC9DT0RFPiBhcHBlbmQgdGhlIGVsYXBzZWQgdGltZQorK2FuZCBudW1iZXIgb2Ygc2lnbmFscyB0byB0aGUgZmlsZSBgPFRUPmxvZzwvVFQ+JywgcmVhZGluZyB0aGUgZm9ybWF0IHN0cmluZworK2Zyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIDxDT0RFPlRJTUU8L0NPREU+OgorKzwvUD4KKys8UD4KKysKKys8VEFCTEU+PHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZCBjbGFzcz1leGFtcGxlPjxwcmU+ZWckIGV4cG9ydCBUSU1FPSZxdW90O1x0JUUsXHQlayZxdW90OyAjIElmIHVzaW5nIGJhc2ggb3Iga3NoCisrZWckIHNldGVudiBUSU1FICZxdW90O1x0JUUsXHQlayZxdW90OyAjIElmIHVzaW5nIGNzaCBvciB0Y3NoCisrZWckIHRpbWUgLWEgLW8gbG9nIGVtYWNzIC5iYXNocmMKKytlZyQgY2F0IGxvZworKyAgICAgICAgMDoxNi41NSwgICAgICAgIDcyNgorKzwvcHJlPjwvdGQ+PC90cj48L3RhYmxlPjxQPgorKworK1J1biB0aGUgY29tbWFuZCBgPFNBTVA+c2xlZXAgNDwvU0FNUD4nIGFuZCBzaG93IGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgaXQKKyt2ZXJib3NlbHk6CisrPC9QPgorKzxQPgorKworKzxUQUJMRT48dHI+PHRkPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPWV4YW1wbGU+PHByZT5lZyQgdGltZSAtdiBzbGVlcCA0CisrICAgICAgICBDb21tYW5kIGJlaW5nIHRpbWVkOiAmcXVvdDtzbGVlcCA0JnF1b3Q7CisrICAgICAgICBVc2VyIHRpbWUgKHNlY29uZHMpOiAwLjAwCisrICAgICAgICBTeXN0ZW0gdGltZSAoc2Vjb25kcyk6IDAuMDUKKysgICAgICAgIFBlcmNlbnQgb2YgQ1BVIHRoaXMgam9iIGdvdDogMSUKKysgICAgICAgIEVsYXBzZWQgKHdhbGwgY2xvY2spIHRpbWUgKGg6bW06c3Mgb3IgbTpzcyk6IDA6MDQuMjYKKysgICAgICAgIEF2ZXJhZ2Ugc2hhcmVkIHRleHQgc2l6ZSAoa2J5dGVzKTogMzYKKysgICAgICAgIEF2ZXJhZ2UgdW5zaGFyZWQgZGF0YSBzaXplIChrYnl0ZXMpOiAyNAorKyAgICAgICAgQXZlcmFnZSBzdGFjayBzaXplIChrYnl0ZXMpOiAwCisrICAgICAgICBBdmVyYWdlIHRvdGFsIHNpemUgKGtieXRlcyk6IDYwCisrICAgICAgICBNYXhpbXVtIHJlc2lkZW50IHNldCBzaXplIChrYnl0ZXMpOiAzMgorKyAgICAgICAgQXZlcmFnZSByZXNpZGVudCBzZXQgc2l6ZSAoa2J5dGVzKTogMjQKKysgICAgICAgIE1ham9yIChyZXF1aXJpbmcgSS9PKSBwYWdlIGZhdWx0czogMworKyAgICAgICAgTWlub3IgKHJlY2xhaW1pbmcgYSBmcmFtZSkgcGFnZSBmYXVsdHM6IDAKKysgICAgICAgIFZvbHVudGFyeSBjb250ZXh0IHN3aXRjaGVzOiAxMQorKyAgICAgICAgSW52b2x1bnRhcnkgY29udGV4dCBzd2l0Y2hlczogMAorKyAgICAgICAgU3dhcHM6IDAKKysgICAgICAgIEZpbGUgc3lzdGVtIGlucHV0czogMworKyAgICAgICAgRmlsZSBzeXN0ZW0gb3V0cHV0czogMQorKyAgICAgICAgU29ja2V0IG1lc3NhZ2VzIHNlbnQ6IDAKKysgICAgICAgIFNvY2tldCBtZXNzYWdlcyByZWNlaXZlZDogMAorKyAgICAgICAgU2lnbmFscyBkZWxpdmVyZWQ6IDEKKysgICAgICAgIFBhZ2Ugc2l6ZSAoYnl0ZXMpOiA0MDk2CisrICAgICAgICBFeGl0IHN0YXR1czogMAorKzwvcHJlPjwvdGQ+PC90cj48L3RhYmxlPjxQPgorKworKzxBIE5BTUU9IkFjY3VyYWN5Ij48L0E+CisrPEhSIFNJWkU9IjYiPgorKzxBIE5BTUU9IlNFQzEwIj48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM5Ij4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxMSI+ICZndDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxIj4gJmx0OyZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+IFVwIDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bICZndDsmZ3Q7IF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMj4gMS41IEFjY3VyYWN5IDwvSDI+CisrPCEtLWRvY2lkOjpTRUMxMDo6LS0+CisrPFA+CisrCisrVGhlIGVsYXBzZWQgdGltZSBpcyBub3QgY29sbGVjdGVkIGF0b21pY2FsbHkgd2l0aCB0aGUgZXhlY3V0aW9uIG9mIHRoZQorK3Byb2dyYW07IGFzIGEgcmVzdWx0LCBpbiBiaXphcnJlIGNpcmN1bXN0YW5jZXMgKGlmIHRoZSA8Q09ERT50aW1lPC9DT0RFPgorK2NvbW1hbmQgZ2V0cyBzdG9wcGVkIG9yIHN3YXBwZWQgb3V0IGluIGJldHdlZW4gd2hlbiB0aGUgcHJvZ3JhbSBiZWluZworK3RpbWVkIGV4aXRzIGFuZCB3aGVuIDxDT0RFPnRpbWU8L0NPREU+IGNhbGN1bGF0ZXMgaG93IGxvbmcgaXQgdG9vayB0byBydW4pLCBpdAorK2NvdWxkIGJlIG11Y2ggbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBleGVjdXRpb24gdGltZS4KKys8L1A+CisrPFA+CisrCisrV2hlbiB0aGUgcnVubmluZyB0aW1lIG9mIGEgY29tbWFuZCBpcyB2ZXJ5IG5lYXJseSB6ZXJvLCBzb21lIHZhbHVlcworKyhlLmcuLCB0aGUgcGVyY2VudGFnZSBvZiBDUFUgdXNlZCkgbWF5IGJlIHJlcG9ydGVkIGFzIGVpdGhlciB6ZXJvICh3aGljaAorK2lzIHdyb25nKSBvciBhIHF1ZXN0aW9uIG1hcmsuCisrPC9QPgorKzxQPgorKworK01vc3QgaW5mb3JtYXRpb24gc2hvd24gYnkgPENPREU+dGltZTwvQ09ERT4gaXMgZGVyaXZlZCBmcm9tIHRoZSA8Q09ERT53YWl0MzwvQ09ERT4KKytzeXN0ZW0gY2FsbC4gIFRoZSBudW1iZXJzIGFyZSBvbmx5IGFzIGdvb2QgYXMgdGhvc2UgcmV0dXJuZWQgYnkKKys8Q09ERT53YWl0MzwvQ09ERT4uICBNYW55IHN5c3RlbXMgZG8gbm90IG1lYXN1cmUgYWxsIG9mIHRoZSByZXNvdXJjZXMgdGhhdAorKzxDT0RFPnRpbWU8L0NPREU+IGNhbiByZXBvcnQgb247IHRob3NlIHJlc291cmNlcyBhcmUgcmVwb3J0ZWQgYXMgemVyby4gIFRoZQorK3N5c3RlbXMgdGhhdCBtZWFzdXJlIG1vc3Qgb3IgYWxsIG9mIHRoZSByZXNvdXJjZXMgYXJlIGJhc2VkIG9uIDQuMiBvcgorKzQuM0JTRC4gIExhdGVyIEJTRCByZWxlYXNlcyB1c2UgZGlmZmVyZW50IG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgdGhhdAorK21lYXN1cmVzIGZld2VyIHJlc291cmNlcy4KKys8L1A+CisrPFA+CisrCisrT24gc3lzdGVtcyB0aGF0IGRvIG5vdCBoYXZlIGEgPENPREU+d2FpdDM8L0NPREU+IGNhbGwgdGhhdCByZXR1cm5zIHN0YXR1cworK2luZm9ybWF0aW9uLCB0aGUgPENPREU+dGltZXM8L0NPREU+IHN5c3RlbSBjYWxsIGlzIHVzZWQgaW5zdGVhZC4gIEl0IHByb3ZpZGVzCisrbXVjaCBsZXNzIGluZm9ybWF0aW9uIHRoYW4gPENPREU+d2FpdDM8L0NPREU+LCBzbyBvbiB0aG9zZSBzeXN0ZW1zIDxDT0RFPnRpbWU8L0NPREU+CisrcmVwb3J0cyBtb3N0IG9mIHRoZSByZXNvdXJjZXMgYXMgemVyby4KKys8L1A+CisrPFA+CisrCisrVGhlIGA8U0FNUD4lSTwvU0FNUD4nIGFuZCBgPFNBTVA+JU88L1NBTVA+JyB2YWx1ZXMgYXJlIGFsbGVnZWRseSBvbmx5ICZxdW90O3JlYWwmcXVvdDsgaW5wdXQKKythbmQgb3V0cHV0IGFuZCBkbyBub3QgaW5jbHVkZSB0aG9zZSBzdXBwbGllZCBieSBjYWNoaW5nIGRldmljZXMuICBUaGUKKyttZWFuaW5nIG9mICZxdW90O3JlYWwmcXVvdDsgSS9PIHJlcG9ydGVkIGJ5IGA8U0FNUD4lSTwvU0FNUD4nIGFuZCBgPFNBTVA+JU88L1NBTVA+JyBtYXkgYmUKKyttdWRkbGVkIGZvciB3b3Jrc3RhdGlvbnMsIGVzcGVjaWFsbHkgZGlza2xlc3Mgb25lcy4KKys8L1A+CisrPFA+CisrCisrPEEgTkFNRT0iSW52b2tpbmcgdGltZSI+PC9BPgorKzxIUiBTSVpFPSI2Ij4KKys8QSBOQU1FPSJTRUMxMSI+PC9BPgorKzxUQUJMRSBDRUxMUEFERElORz0xIENFTExTUEFDSU5HPTEgQk9SREVSPTA+CisrPFRSPjxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMTAiPiAmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bICZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7Jmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgyPiAxLjYgUnVubmluZyB0aGUgPENPREU+dGltZTwvQ09ERT4gQ29tbWFuZCA8L0gyPgorKzwhLS1kb2NpZDo6U0VDMTE6Oi0tPgorKzxQPgorKworK1RoZSBmb3JtYXQgb2YgdGhlIDxDT0RFPnRpbWU8L0NPREU+IGNvbW1hbmQgaXM6CisrPC9QPgorKzxQPgorKworKzxUQUJMRT48dHI+PHRkPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPWV4YW1wbGU+PHByZT50aW1lIFtvcHRpb248c21hbGw+Li4uPC9zbWFsbD5dIDxWQVI+Y29tbWFuZDwvVkFSPiBbPFZBUj5hcmc8L1ZBUj48c21hbGw+Li4uPC9zbWFsbD5dCisrPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+PFA+CisrCisrPEEgTkFNRT0iSURYNSI+PC9BPgorKzxDT0RFPnRpbWU8L0NPREU+IHJ1bnMgdGhlIHByb2dyYW0gPFZBUj5jb21tYW5kPC9WQVI+LCB3aXRoIGFueSBnaXZlbiBhcmd1bWVudHMKKys8VkFSPmFyZzwvVkFSPjxzbWFsbD4uLi48L3NtYWxsPi4gIFdoZW4gPFZBUj5jb21tYW5kPC9WQVI+IGZpbmlzaGVzLCA8Q09ERT50aW1lPC9DT0RFPiBkaXNwbGF5cworK2luZm9ybWF0aW9uIGFib3V0IHJlc291cmNlcyB1c2VkIGJ5IDxWQVI+Y29tbWFuZDwvVkFSPiAob24gdGhlIHN0YW5kYXJkIGVycm9yCisrb3V0cHV0LCBieSBkZWZhdWx0KS4gIElmIDxWQVI+Y29tbWFuZDwvVkFSPiBleGl0cyB3aXRoIG5vbi16ZXJvIHN0YXR1cyBvciBpcworK3Rlcm1pbmF0ZWQgYnkgYSBzaWduYWwsIDxDT0RFPnRpbWU8L0NPREU+IGRpc3BsYXlzIGEgd2FybmluZyBtZXNzYWdlIGFuZCB0aGUKKytleGl0IHN0YXR1cyBvciBzaWduYWwgbnVtYmVyLgorKzwvUD4KKys8UD4KKysKKytPcHRpb25zIHRvIDxDT0RFPnRpbWU8L0NPREU+IG11c3QgYXBwZWFyIG9uIHRoZSBjb21tYW5kIGxpbmUgYmVmb3JlCisrPFZBUj5jb21tYW5kPC9WQVI+LiAgQW55dGhpbmcgb24gdGhlIGNvbW1hbmQgbGluZSBhZnRlciA8VkFSPmNvbW1hbmQ8L1ZBUj4gaXMKKytwYXNzZWQgYXMgYXJndW1lbnRzIHRvIDxWQVI+Y29tbWFuZDwvVkFSPi4KKys8L1A+CisrPFA+CisrCisrPC9QPgorKzxETCBDT01QQUNUPgorKzxEVD48Q09ERT4tbyA8VkFSPmZpbGU8L1ZBUj48L0NPREU+CisrPEREPjxEVD48Q09ERT4tLW91dHB1dD08VkFSPmZpbGU8L1ZBUj48L0NPREU+CisrPEREPldyaXRlIHRoZSByZXNvdXJjZSB1c2Ugc3RhdGlzdGljcyB0byA8VkFSPmZpbGU8L1ZBUj4uCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT4tYTwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tYXBwZW5kPC9DT0RFPgorKzxERD48RU0+QXBwZW5kPC9FTT4gdGhlIHJlc291cmNlIHVzZSBpbmZvcm1hdGlvbiB0byB0aGUgb3V0cHV0IGZpbGUgaW5zdGVhZAorK29mIG92ZXJ3cml0aW5nIGl0LgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+LWYgPFZBUj5mb3JtYXQ8L1ZBUj48L0NPREU+CisrPEREPjxEVD48Q09ERT4tLWZvcm1hdD08VkFSPmZvcm1hdDwvVkFSPjwvQ09ERT4KKys8REQ+VXNlIDxWQVI+Zm9ybWF0PC9WQVI+IGFzIHRoZSBmb3JtYXQgc3RyaW5nLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+LS1oZWxwPC9DT0RFPgorKzxERD5QcmludCBhIHN1bW1hcnkgb2YgdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zIHRvIDxDT0RFPnRpbWU8L0NPREU+IGFuZCBleGl0LgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+LXA8L0NPREU+CisrPEREPjxEVD48Q09ERT4tLXBvcnRhYmlsaXR5PC9DT0RFPgorKzxERD5Vc2UgdGhlIFBPU0lYIGZvcm1hdC4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPi12PC9DT0RFPgorKzxERD48RFQ+PENPREU+LS12ZXJib3NlPC9DT0RFPgorKzxERD48QSBOQU1FPSJJRFg2Ij48L0E+CisrVXNlIHRoZSBidWlsdC1pbiB2ZXJib3NlIGZvcm1hdC4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPi1WPC9DT0RFPgorKzxERD48RFQ+PENPREU+LS12ZXJzaW9uPC9DT0RFPgorKzxERD48QSBOQU1FPSJJRFg3Ij48L0E+CisrUHJpbnQgdGhlIHZlcnNpb24gbnVtYmVyIG9mIDxDT0RFPnRpbWU8L0NPREU+IGFuZCBleGl0LgorKzwvREw+CisrPFA+CisrCisrPEhSIFNJWkU9IjYiPgorKzxBIE5BTUU9IlNFQ19Db250ZW50cyI+PC9BPgorKzxUQUJMRSBDRUxMUEFERElORz0xIENFTExTUEFDSU5HPTEgQk9SREVSPTA+CisrPFRSPjxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDE+VGFibGUgb2YgQ29udGVudHM8L0gxPgorKzxCTE9DS1FVT1RFPgorKzxBIE5BTUU9IlRPQzEiIEhSRUY9InRpbWUuaHRtbCNTRUMxIj4xLiBNZWFzdXJpbmcgUHJvZ3JhbSBSZXNvdXJjZSBVc2U8L0E+CisrPEJSPgorKzxCTE9DS1FVT1RFPgorKzxBIE5BTUU9IlRPQzIiIEhSRUY9InRpbWUuaHRtbCNTRUMyIj4xLjEgU2V0dGluZyB0aGUgT3V0cHV0IEZvcm1hdDwvQT4KKys8QlI+CisrPEEgTkFNRT0iVE9DMyIgSFJFRj0idGltZS5odG1sI1NFQzMiPjEuMiBUaGUgRm9ybWF0IFN0cmluZzwvQT4KKys8QlI+CisrPEJMT0NLUVVPVEU+CisrPEEgTkFNRT0iVE9DNCIgSFJFRj0idGltZS5odG1sI1NFQzQiPjEuMi4xIFRpbWUgUmVzb3VyY2VzPC9BPgorKzxCUj4KKys8QSBOQU1FPSJUT0M1IiBIUkVGPSJ0aW1lLmh0bWwjU0VDNSI+MS4yLjIgTWVtb3J5IFJlc291cmNlczwvQT4KKys8QlI+CisrPEEgTkFNRT0iVE9DNiIgSFJFRj0idGltZS5odG1sI1NFQzYiPjEuMi4zIEkvTyBSZXNvdXJjZXM8L0E+CisrPEJSPgorKzxBIE5BTUU9IlRPQzciIEhSRUY9InRpbWUuaHRtbCNTRUM3Ij4xLjIuNCBDb21tYW5kIEluZm88L0E+CisrPEJSPgorKzwvQkxPQ0tRVU9URT4KKys8QSBOQU1FPSJUT0M4IiBIUkVGPSJ0aW1lLmh0bWwjU0VDOCI+MS4zIFJlZGlyZWN0aW5nIE91dHB1dDwvQT4KKys8QlI+CisrPEEgTkFNRT0iVE9DOSIgSFJFRj0idGltZS5odG1sI1NFQzkiPjEuNCBFeGFtcGxlczwvQT4KKys8QlI+CisrPEEgTkFNRT0iVE9DMTAiIEhSRUY9InRpbWUuaHRtbCNTRUMxMCI+MS41IEFjY3VyYWN5PC9BPgorKzxCUj4KKys8QSBOQU1FPSJUT0MxMSIgSFJFRj0idGltZS5odG1sI1NFQzExIj4xLjYgUnVubmluZyB0aGUgPENPREU+dGltZTwvQ09ERT4gQ29tbWFuZDwvQT4KKys8QlI+CisrPC9CTE9DS1FVT1RFPgorKzwvQkxPQ0tRVU9URT4KKys8SFIgU0laRT0xPgorKzxBIE5BTUU9IlNFQ19PVkVSVklFVyI+PC9BPgorKzxUQUJMRSBDRUxMUEFERElORz0xIENFTExTUEFDSU5HPTEgQk9SREVSPTA+CisrPFRSPjxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDE+U2hvcnQgVGFibGUgb2YgQ29udGVudHM8L0gxPgorKzxCTE9DS1FVT1RFPgorKzxBIE5BTUU9IlRPQzEiIEhSRUY9InRpbWUuaHRtbCNTRUMxIj4xLiBNZWFzdXJpbmcgUHJvZ3JhbSBSZXNvdXJjZSBVc2U8L0E+CisrPEJSPgorKworKzwvQkxPQ0tRVU9URT4KKys8SFIgU0laRT0xPgorKzxBIE5BTUU9IlNFQ19BYm91dCI+PC9BPgorKzxUQUJMRSBDRUxMUEFERElORz0xIENFTExTUEFDSU5HPTEgQk9SREVSPTA+CisrPFRSPjxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDE+QWJvdXQgdGhpcyBkb2N1bWVudDwvSDE+CisrVGhpcyBkb2N1bWVudCB3YXMgZ2VuZXJhdGVkCisrYnkgCisrdXNpbmcgPEEgSFJFRj0iaHR0cDovL3RleGkyaHRtbC5jdnNob21lLm9yZyI+PEk+dGV4aTJodG1sPC9JPjwvQT4KKys8UD48L1A+CisrVGhlIGJ1dHRvbnMgaW4gdGhlIG5hdmlnYXRpb24gcGFuZWxzIGhhdmUgdGhlIGZvbGxvd2luZyBtZWFuaW5nOgorKzxQPjwvUD4KKys8dGFibGUgYm9yZGVyID0gIjEiPgorKzxUUj4KKys8VEg+IEJ1dHRvbiA8L1RIPgorKzxUSD4gTmFtZSA8L1RIPgorKzxUSD4gR28gdG8gPC9USD4KKys8VEg+IEZyb20gMS4yLjMgZ28gdG88L1RIPgorKzwvVFI+CisrPFRSPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKysgWyAmbHQ7IF0gPC9URD4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrQmFjaworKzwvVEQ+CisrPFREPgorK3ByZXZpb3VzIHNlY3Rpb24gaW4gcmVhZGluZyBvcmRlcgorKzwvVEQ+CisrPFREPgorKzEuMi4yCisrPC9URD4KKys8L1RSPgorKzxUUj4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrIFsgJmd0OyBdIDwvVEQ+CisrPFREIEFMSUdOPSJDRU5URVIiPgorK0ZvcndhcmQKKys8L1REPgorKzxURD4KKytuZXh0IHNlY3Rpb24gaW4gcmVhZGluZyBvcmRlcgorKzwvVEQ+CisrPFREPgorKzEuMi40CisrPC9URD4KKys8L1RSPgorKzxUUj4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrIFsgJmx0OyZsdDsgXSA8L1REPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKytGYXN0QmFjaworKzwvVEQ+CisrPFREPgorK2JlZ2lubmluZyBvZiB0aGlzIGNoYXB0ZXIgb3IgcHJldmlvdXMgY2hhcHRlcgorKzwvVEQ+CisrPFREPgorKzEKKys8L1REPgorKzwvVFI+CisrPFRSPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKysgWyBVcCBdIDwvVEQ+CisrPFREIEFMSUdOPSJDRU5URVIiPgorK1VwCisrPC9URD4KKys8VEQ+CisrdXAgc2VjdGlvbgorKzwvVEQ+CisrPFREPgorKzEuMgorKzwvVEQ+CisrPC9UUj4KKys8VFI+CisrPFREIEFMSUdOPSJDRU5URVIiPgorKyBbICZndDsmZ3Q7IF0gPC9URD4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrRmFzdEZvcndhcmQKKys8L1REPgorKzxURD4KKytuZXh0IGNoYXB0ZXIKKys8L1REPgorKzxURD4KKysyCisrPC9URD4KKys8L1RSPgorKzxUUj4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrIFtUb3BdIDwvVEQ+CisrPFREIEFMSUdOPSJDRU5URVIiPgorK1RvcAorKzwvVEQ+CisrPFREPgorK2NvdmVyICh0b3ApIG9mIGRvY3VtZW50CisrPC9URD4KKys8VEQ+CisrICZuYnNwOyAKKys8L1REPgorKzwvVFI+CisrPFRSPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKysgW0NvbnRlbnRzXSA8L1REPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKytDb250ZW50cworKzwvVEQ+CisrPFREPgorK3RhYmxlIG9mIGNvbnRlbnRzCisrPC9URD4KKys8VEQ+CisrICZuYnNwOyAKKys8L1REPgorKzwvVFI+CisrPFRSPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKysgW0luZGV4XSA8L1REPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKytJbmRleAorKzwvVEQ+CisrPFREPgorK2NvbmNlcHQgaW5kZXgKKys8L1REPgorKzxURD4KKysgJm5ic3A7IAorKzwvVEQ+CisrPC9UUj4KKys8VFI+CisrPFREIEFMSUdOPSJDRU5URVIiPgorKyBbID8gXSA8L1REPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKytBYm91dAorKzwvVEQ+CisrPFREPgorK3RoaXMgcGFnZQorKzwvVEQ+CisrPFREPgorKyAmbmJzcDsgCisrPC9URD4KKys8L1RSPgorKzwvVEFCTEU+CisrICAgIDxQPgorKyAgICAgIHdoZXJlIHRoZSA8U1RST05HPiBFeGFtcGxlIDwvU1RST05HPiBhc3N1bWVzIHRoYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24KKysgICAgICBpcyBhdCA8U1RST05HPiBTdWJzdWJzZWN0aW9uIE9uZS1Ud28tVGhyZWUgPC9TVFJPTkc+IG9mIGEgZG9jdW1lbnQgb2YKKysgICAgICB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZTo8L1A+CisrICAgIDxVTD4KKysgICAgICA8TEk+IDEuIFNlY3Rpb24gT25lCisrICAgICAgICA8VUw+CisrICAgICAgICAgIDxMST4xLjEgU3Vic2VjdGlvbiBPbmUtT25lCisrICAgICAgICAgICAgPFVMPgorKyAgICAgICAgICAgICAgPExJPi4uLjwvTEk+CisrICAgICAgICAgICAgPC9VTD4KKysgICAgICAgICAgPExJPjEuMiBTdWJzZWN0aW9uIE9uZS1Ud28KKysgICAgICAgICAgICA8VUw+CisrICAgICAgICAgICAgICA8TEk+MS4yLjEgU3Vic3Vic2VjdGlvbiBPbmUtVHdvLU9uZTwvTEk+CisrICAgICAgICAgICAgICA8TEk+MS4yLjIgU3Vic3Vic2VjdGlvbiBPbmUtVHdvLVR3bzwvTEk+CisrICAgICAgICAgICAgICA8TEk+MS4yLjMgU3Vic3Vic2VjdGlvbiBPbmUtVHdvLVRocmVlICZuYnNwOyAmbmJzcDsKKysgICAgICAgICAgICAgICAgPFNUUk9ORz4mbHQ7PT0gQ3VycmVudCBQb3NpdGlvbiA8L1NUUk9ORz48L0xJPgorKyAgICAgICAgICAgICAgPExJPjEuMi40IFN1YnN1YnNlY3Rpb24gT25lLVR3by1Gb3VyPC9MST4KKysgICAgICAgICAgICA8L1VMPgorKyAgICAgICAgICA8L0xJPgorKyAgICAgICAgICA8TEk+MS4zIFN1YnNlY3Rpb24gT25lLVRocmVlCisrICAgICAgICAgICAgPFVMPgorKyAgICAgICAgICAgICAgPExJPi4uLjwvTEk+CisrICAgICAgICAgICAgPC9VTD4KKysgICAgICAgICAgPC9MST4KKysgICAgICAgICAgPExJPjEuNCBTdWJzZWN0aW9uIE9uZS1Gb3VyPC9MST4KKysgICAgICAgIDwvVUw+CisrICAgICAgPC9MST4KKysgICAgPC9VTD4KKysKKys8SFIgU0laRT0xPgorKzxCUj4KKys8Rk9OVCBTSVpFPSItMSI+CisrVGhpcyBkb2N1bWVudCB3YXMgZ2VuZXJhdGVkCisrYnkgPEk+cm9vdDwvST4gb24gPEk+U2VwdGVtYmVyLCAxIDIwMDM8L0k+CisrdXNpbmcgPEEgSFJFRj0iaHR0cDovL3RleGkyaHRtbC5jdnNob21lLm9yZyI+PEk+dGV4aTJodG1sPC9JPjwvQT4KKys8L0ZPTlQ+CisrCisrPC9CT0RZPgorKzwvSFRNTD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RpbWUvdGltZS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90aW1lL3RpbWUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ODYyMTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90aW1lL3RpbWUuaW5jCkBAIC0wLDAgKzEsMTIgQEAKK1NVTU1BUlkgPSAiVG9vbCB0aGF0IG1lYXN1cmVzIENQVSByZXNvdXJjZXMiCitERVNDUklQVElPTiA9ICJ0aW1lIG1lYXN1cmVzIG1hbnkgb2YgdGhlIENQVSByZXNvdXJjZXMsIHN1Y2ggYXMgdGltZSBhbmQgXAorbWVtb3J5LCB0aGF0IG90aGVyIHByb2dyYW1zIHVzZS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGltZS8iCitTRUNUSU9OID0gInV0aWxzIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04Y2E0M2NiYzg0MmMyMzM2ZTgzNTkyNmMyMTY2YzI4YiIKKworaW5oZXJpdCB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAidGltZSIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RpbWUvdGltZV8xLjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90aW1lL3RpbWVfMS43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYzUzNTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90aW1lL3RpbWVfMS43LmJiCkBAIC0wLDAgKzEsMTEgQEAKK3JlcXVpcmUgdGltZS5pbmMKKworUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS90aW1lL3RpbWUtJHtQVn0udGFyLmd6IFwKKwkgICBmaWxlOi8vZGViaWFuLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTM4ZDJiOGIzNGIxY2EyNTljZjdiMDUzY2FhYzMyYjMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTM3ZWE3OWEyNTNiZjg1YTg1YWRhMmY3YzYzMmMxNGU0ODFhNWZkMjYyYTM2MmY2ZjRmZDU4ZTY4NjAxNDk2ZCIKKworaW5oZXJpdCBhdXRvdG9vbHMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6Y29kZS90emNvZGUtbmF0aXZlXzIwMTVmLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpjb2RlL3R6Y29kZS1uYXRpdmVfMjAxNWYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg4NjVhMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6Y29kZS90emNvZGUtbmF0aXZlXzIwMTVmLmJiCkBAIC0wLDAgKzEsMjUgQEAKKyMgbm90ZSB0aGF0IHdlIGFsbG93IGZvciB1cyB0byB1c2UgZGF0YSBsYXRlciB0aGFuIG91ciBjb2RlIHZlcnNpb24KKyMKK0RFU0NSSVBUSU9OID0gInR6Y29kZSwgdGltZXpvbmUgem9uZWluZm8gdXRpbHMgLS0gemljLCB6ZHVtcCwgdHpzZWxlY3QiCitMSUNFTlNFID0gIlBEICYgQlNEIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke1dPUktESVJ9L1JFQURNRTttZDU9ZDBmZjkzYTczZGQ1YmMzYzZlNzI0YmI0MzQzNzYwZjYiCisKK1NSQ19VUkkgPSIgZnRwOi8vZnRwLmlhbmEub3JnL3R6L3JlbGVhc2VzL3R6Y29kZSR7UFZ9LnRhci5nejtuYW1lPXR6Y29kZSBcCisgICAgICAgICAgIGZ0cDovL2Z0cC5pYW5hLm9yZy90ei9yZWxlYXNlcy90emRhdGEyMDE1Zi50YXIuZ3o7bmFtZT10emRhdGEiCisKK1NSQ19VUklbdHpjb2RlLm1kNXN1bV0gPSAiMTk1NzhkNDMyYmE4YjkyZjczNDA2YTE3YTliYzI2OGQiCitTUkNfVVJJW3R6Y29kZS5zaGEyNTZzdW1dID0gIjBjOTVlMGE0MmJiNjExNDFmNzkwZjRmNWYyMDRiOTU0ZDc2NTRjODk0YWE1NGE1OTRhMjE1ZDZmMzhkZTg0YWUiCitTUkNfVVJJW3R6ZGF0YS5tZDVzdW1dID0gImUzYjgyNzMyZDIwZTk3M2U0OGFmMWM2ZjEzZGY5YTFkIgorU1JDX1VSSVt0emRhdGEuc2hhMjU2c3VtXSA9ICI5NTlmODFiNTQxZTA0MmVjYjEzYzUwMDk3ZDI2NGFlOTJmZjAzYTU3OTc5YzQ3OGRiY2YyNGQ1ZGEyNDI1MzFkIgorCitTID0gIiR7V09SS0RJUn0iCisKK2luaGVyaXQgbmF0aXZlCisKK2RvX2luc3RhbGwgKCkgeworICAgICAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vCisgICAgICAgIGluc3RhbGwgLW0gNzU1IHppYyAke0R9JHtiaW5kaXJ9LworICAgICAgICBpbnN0YWxsIC1tIDc1NSB6ZHVtcCAke0R9JHtiaW5kaXJ9LworICAgICAgICBpbnN0YWxsIC1tIDc1NSB0enNlbGVjdCAke0R9JHtiaW5kaXJ9LworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpkYXRhL3R6ZGF0YV8yMDE1Zi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6ZGF0YS90emRhdGFfMjAxNWYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NkYTQwZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6ZGF0YS90emRhdGFfMjAxNWYuYmIKQEAgLTAsMCArMSwyMDcgQEAKK0RFU0NSSVBUSU9OID0gIlRpbWV6b25lIGRhdGEiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmlhbmEub3JnL3RpbWUtem9uZXMiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIlBEICYgQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vYXNpYTtiZWdpbmxpbmU9MjtlbmRsaW5lPTM7bWQ1PTk5NmE5ODExNzQ3YWE0OGRiOTFlZDIzOWU1YjM1NWExIgorREVQRU5EUyA9ICJ0emNvZGUtbmF0aXZlIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5pYW5hLm9yZy90ei9yZWxlYXNlcy90emRhdGEke1BWfS50YXIuZ3o7bmFtZT10emRhdGEiCisKK1NSQ19VUklbdHpkYXRhLm1kNXN1bV0gPSAiZTNiODI3MzJkMjBlOTczZTQ4YWYxYzZmMTNkZjlhMWQiCitTUkNfVVJJW3R6ZGF0YS5zaGEyNTZzdW1dID0gIjk1OWY4MWI1NDFlMDQyZWNiMTNjNTAwOTdkMjY0YWU5MmZmMDNhNTc5NzljNDc4ZGJjZjI0ZDVkYTI0MjUzMWQiCisKK2luaGVyaXQgYWxsYXJjaAorCitSQ09ORkxJQ1RTXyR7UE59ID0gInRpbWV6b25lcyB0aW1lem9uZS1hZnJpY2EgdGltZXpvbmUtYW1lcmljYSB0aW1lem9uZS1hbnRhcmN0aWNhIFwKKyAgICAgICAgICAgICB0aW1lem9uZS1hcmN0aWMgdGltZXpvbmUtYXNpYSB0aW1lem9uZS1hdGxhbnRpYyBcCisgICAgICAgICAgICAgdGltZXpvbmUtYXVzdHJhbGlhIHRpbWV6b25lLWV1cm9wZSB0aW1lem9uZS1pbmRpYW4gXAorICAgICAgICAgICAgIHRpbWV6b25lLWlzbzMxNjYudGFiIHRpbWV6b25lLXBhY2lmaWMgdGltZXpvbmUtem9uZS50YWIiCisKK1MgPSAiJHtXT1JLRElSfSIKKworREVGQVVMVF9USU1FWk9ORSA/PSAiVW5pdmVyc2FsIgorCitUWk9ORVM9ICJhZnJpY2EgYW50YXJjdGljYSBhc2lhIGF1c3RyYWxhc2lhIGV1cm9wZSBub3J0aGFtZXJpY2Egc291dGhhbWVyaWNhICBcCisgICAgICAgICBmYWN0b3J5IGV0Y2V0ZXJhIGJhY2t3YXJkIHN5c3RlbXYgXAorICAgICAgICAiCisjIHBhY2lmaWNuZXcgCisKK2RvX2NvbXBpbGUgKCkgeworICAgICAgICBmb3Igem9uZSBpbiAke1RaT05FU307IGRvIFwKKyAgICAgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS96aWMgLWQgJHtXT1JLRElSfSR7ZGF0YWRpcn0vem9uZWluZm8gLUwgL2Rldi9udWxsIFwKKyAgICAgICAgICAgICAgICAteSAke1N9L3llYXJpc3R5cGUuc2ggJHtTfS8ke3pvbmV9IDsgXAorICAgICAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3ppYyAtZCAke1dPUktESVJ9JHtkYXRhZGlyfS96b25laW5mby9wb3NpeCAtTCAvZGV2L251bGwgXAorICAgICAgICAgICAgICAgIC15ICR7U30veWVhcmlzdHlwZS5zaCAke1N9LyR7em9uZX0gOyBcCisgICAgICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vemljIC1kICR7V09SS0RJUn0ke2RhdGFkaXJ9L3pvbmVpbmZvL3JpZ2h0IC1MICR7U30vbGVhcHNlY29uZHMgXAorICAgICAgICAgICAgICAgIC15ICR7U30veWVhcmlzdHlwZS5zaCAke1N9LyR7em9uZX0gOyBcCisgICAgICAgIGRvbmUKK30KKworZG9faW5zdGFsbCAoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtEfS8kZXhlY19wcmVmaXggJHtEfSR7ZGF0YWRpcn0vem9uZWluZm8KKyAgICAgICAgY3AgLXBQUiAke1N9LyRleGVjX3ByZWZpeCAke0R9LworICAgICAgICAjIGxpYmMgaXMgcmVtb3Zpbmcgem9uZWluZm8gZmlsZXMgZnJvbSBwYWNrYWdlCisgICAgICAgIGNwIC1wUCAiJHtTfS96b25lLnRhYiIgJHtEfSR7ZGF0YWRpcn0vem9uZWluZm8KKyAgICAgICAgY3AgLXBQICIke1N9L2lzbzMxNjYudGFiIiAke0R9JHtkYXRhZGlyfS96b25laW5mbworCisgICAgICAgICMgSW5zdGFsbCBkZWZhdWx0IHRpbWV6b25lCisgICAgICAgIGlmIFsgLWUgJHtEfSR7ZGF0YWRpcn0vem9uZWluZm8vJHtERUZBVUxUX1RJTUVaT05FfSBdOyB0aGVuCisgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgICAgICAgICBlY2hvICR7REVGQVVMVF9USU1FWk9ORX0gPiAke0R9JHtzeXNjb25mZGlyfS90aW1lem9uZQorICAgICAgICAgICAgbG4gLXMgJHtkYXRhZGlyfS96b25laW5mby8ke0RFRkFVTFRfVElNRVpPTkV9ICR7RH0ke3N5c2NvbmZkaXJ9L2xvY2FsdGltZQorICAgICAgICBlbHNlCisgICAgICAgICAgICBiYmVycm9yICJERUZBVUxUX1RJTUVaT05FIGlzIHNldCB0byBhbiBpbnZhbGlkIHZhbHVlLiIKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorCisgICAgICAgIGNob3duIC1SIHJvb3Q6cm9vdCAke0R9Cit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJZXRjX2x0PSIkRCR7c3lzY29uZmRpcn0vbG9jYWx0aW1lIgorCXNyYz0iJEQke3N5c2NvbmZkaXJ9L3RpbWV6b25lIgorCisJaWYgWyAtZSAke3NyY30gXSA7IHRoZW4KKwkJdHo9JChzZWQgLWUgJ3M6Iy4qOjonIC1lICdzOltbOnNwYWNlOl1dKjo6ZycgLWUgJy9eJC9kJyAiJHtzcmN9IikKKwlmaQorCQorCWlmIFsgLXogIiR7dHp9IiBdIDsgdGhlbgorCQlleGl0IDAKKwlmaQorCQorCWlmIFsgISAtZSAiJEQke2RhdGFkaXJ9L3pvbmVpbmZvLyR7dHp9IiBdIDsgdGhlbgorCQllY2hvICJZb3UgaGF2ZSBhbiBpbnZhbGlkIFRJTUVaT05FIHNldHRpbmcgaW4gJHtzcmN9IgorCQllY2hvICJZb3VyICR7ZXRjX2x0fSBoYXMgYmVlbiByZXNldCB0byBVbml2ZXJzYWw7IGVuam95ISIKKwkJdHo9IlVuaXZlcnNhbCIKKwkJZWNobyAiVXBkYXRpbmcgJHtldGNfbHR9IHdpdGggJEQke2RhdGFkaXJ9L3pvbmVpbmZvLyR7dHp9IgorCQlpZiBbIC1MICR7ZXRjX2x0fSBdIDsgdGhlbgorCQkJcm0gLWYgIiR7ZXRjX2x0fSIKKwkJZmkKKwkJbG4gLXMgIiR7ZGF0YWRpcn0vem9uZWluZm8vJHt0en0iICIke2V0Y19sdH0iCisJZmkKK30KKworIyBQYWNrYWdlcyBwcmltYXJpbHkgb3JnYW5pemVkIGJ5IGRpcmVjdG9yeSB3aXRoIGEgbWFqb3IgY2l0eQorIyBpbiBtb3N0IHRpbWUgem9uZXMgaW4gdGhlIGJhc2UgcGFja2FnZQorCitQQUNLQUdFUyA9ICJ0emRhdGEgdHpkYXRhLW1pc2MgdHpkYXRhLXBvc2l4IHR6ZGF0YS1yaWdodCB0emRhdGEtYWZyaWNhIFwKKyAgICB0emRhdGEtYW1lcmljYXMgdHpkYXRhLWFudGFyY3RpY2EgdHpkYXRhLWFyY3RpYyB0emRhdGEtYXNpYSBcCisgICAgdHpkYXRhLWF0bGFudGljIHR6ZGF0YS1hdXN0cmFsaWEgdHpkYXRhLWV1cm9wZSB0emRhdGEtcGFjaWZpYyIKKworRklMRVNfdHpkYXRhLWFmcmljYSArPSAiJHtkYXRhZGlyfS96b25laW5mby9BZnJpY2EvKiIKK1JQUk9WSURFU190emRhdGEtYWZyaWNhID0gInR6ZGF0YS1hZnJpY2EiCisKK0ZJTEVTX3R6ZGF0YS1hbWVyaWNhcyArPSAiJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhLyogIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1VTLyogICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQnJhemlsLyogICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9DYW5hZGEvKiAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL01leGljby8qICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQ2hpbGUvKiIKK1JQUk9WSURFU190emRhdGEtYW1lcmljYXMgPSAidHpkYXRhLWFtZXJpY2FzIgorCitGSUxFU190emRhdGEtYW50YXJjdGljYSArPSAiJHtkYXRhZGlyfS96b25laW5mby9BbnRhcmN0aWNhLyoiCitSUFJPVklERVNfdHpkYXRhLWFudGFyY3RpY2EgPSAidHpkYXRhLWFudGFyY3RpY2EiCisKK0ZJTEVTX3R6ZGF0YS1hcmN0aWMgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQXJjdGljLyoiCitSUFJPVklERVNfdHpkYXRhLWFyY3RpYyA9ICJ0emRhdGEtYXJjdGljIgorCitGSUxFU190emRhdGEtYXNpYSArPSAiJHtkYXRhZGlyfS96b25laW5mby9Bc2lhLyogICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0luZGlhbi8qICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTWlkZWFzdC8qIgorUlBST1ZJREVTX3R6ZGF0YS1hc2lhID0gInR6ZGF0YS1hc2lhIgorCitGSUxFU190emRhdGEtYXRsYW50aWMgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQXRsYW50aWMvKiIKK1JQUk9WSURFU190emRhdGEtYXRsYW50aWMgPSAidHpkYXRhLWF0bGFudGljIgorCitGSUxFU190emRhdGEtYXVzdHJhbGlhICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0F1c3RyYWxpYS8qIgorUlBST1ZJREVTX3R6ZGF0YS1hdXN0cmFsaWEgPSAidHpkYXRhLWF1c3RyYWxpYSIKKworRklMRVNfdHpkYXRhLWV1cm9wZSArPSAiJHtkYXRhZGlyfS96b25laW5mby9FdXJvcGUvKiIKK1JQUk9WSURFU190emRhdGEtZXVyb3BlID0gInR6ZGF0YS1ldXJvcGUiCisKK0ZJTEVTX3R6ZGF0YS1wYWNpZmljICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL1BhY2lmaWMvKiIKK1JQUk9WSURFU190emRhdGEtcGFjaWZpYyA9ICJ0emRhdGEtcGFjaWZpYyIKKworRklMRVNfdHpkYXRhLXBvc2l4ICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL3Bvc2l4LyoiCitSUFJPVklERVNfdHpkYXRhLXBvc2l4ID0gInR6ZGF0YS1wb3NpeCIKKworRklMRVNfdHpkYXRhLXJpZ2h0ICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL3JpZ2h0LyoiCitSUFJPVklERVNfdHpkYXRhLXJpZ2h0ID0gInR6ZGF0YS1yaWdodCIKKworCitGSUxFU190emRhdGEtbWlzYyArPSAiJHtkYXRhZGlyfS96b25laW5mby9DdWJhICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FZ3lwdCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FaXJlICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9GYWN0b3J5ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HQi1FaXJlICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Ib25na29uZyAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9JY2VsYW5kICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9JcmFuICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Jc3JhZWwgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9KYW1haWNhICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9KYXBhbiAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Ld2FqYWxlaW4gICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9MaWJ5YSAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9OYXZham8gICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Qb2xhbmQgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Qb3J0dWdhbCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9TaW5nYXBvcmUgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9UdXJrZXkiCitSUFJPVklERVNfdHpkYXRhLW1pc2MgPSAidHpkYXRhLW1pc2MiCisKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vUGFjaWZpYy9Ib25vbHVsdSAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9BbmNob3JhZ2UgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9Mb3NfQW5nZWxlcyAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9EZW52ZXIgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9DaGljYWdvICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9OZXdfWW9yayAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9DYXJhY2FzICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9TYW9fUGF1bG8gICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRXVyb3BlL0xvbmRvbiAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRXVyb3BlL1BhcmlzICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQWZyaWNhL0NhaXJvICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRXVyb3BlL01vc2NvdyAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS9EdWJhaSAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS9LYXJhY2hpICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS9EaGFrYSAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS9CYW5rb2sgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS9Ib25nX0tvbmcgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS9Ub2t5byAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXVzdHJhbGlhL0RhcndpbiAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXVzdHJhbGlhL0FkZWxhaWRlICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXVzdHJhbGlhL0JyaXNiYW5lICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXVzdHJhbGlhL1N5ZG5leSAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUGFjaWZpYy9Ob3VtZWEgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQ0VUICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQ1NUNkNEVCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRUVUICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRVNUICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRVNUNUVEVCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR0IgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR01UICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR01UKzAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR01ULTAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR01UMCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR3JlZW53aWNoICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSFNUICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTUVUICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTVNUICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTVNUN01EVCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTlogICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTlotQ0hBVCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUFJDICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUFNUOFBEVCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUk9DICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUk9LICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vVUNUICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vVVRDICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vVW5pdmVyc2FsICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vVy1TVSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vV0VUICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vWnVsdSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vem9uZS50YWIgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vaXNvMzE2Ni50YWIgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRXRjLyoiCisKK0NPTkZGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS90aW1lem9uZSAke3N5c2NvbmZkaXJ9L2xvY2FsdGltZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwLzA2LXVuemlwNjAtYWx0LWljb252LXV0ZjhfQ1ZFLTIwMTUtMTMxNS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwLzA2LXVuemlwNjAtYWx0LWljb252LXV0ZjhfQ1ZFLTIwMTUtMTMxNS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmEzYzFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMDYtdW56aXA2MC1hbHQtaWNvbnYtdXRmOF9DVkUtMjAxNS0xMzE1LnBhdGNoCkBAIC0wLDAgKzEsNDAyIEBACitGcm9tOiBHaW92YW5uaSBTY2Fmb3JhIDxnaW92YW5uaS5hcmNobGludXgub3JnPgorU3ViamVjdDogdW56aXAgZmlsZXMgZW5jb2RlZCB3aXRoIG5vbi1sYXRpbiwgbm9uLXVuaWNvZGUgZmlsZSBuYW1lcworTGFzdC1VcGRhdGU6IDIwMTUtMDItMTEKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitVcGRhdGVkIDIwMTUtMDItMTEgYnkgTWFyYyBEZXNsYXVyaWVycyA8bWFyYy5kZXNsYXVyaWVyc0BjYW5vbmljYWwuY29tPgordG8gZml4IGJ1ZmZlciBvdmVyZmxvdyBpbiBjaGFyc2V0X3RvX2ludGVybigpCisKK1NpZ25lZC1vZmYtYnk6IE1hcmMgRGVzbGF1cmllcnMgPG1hcmMuZGVzbGF1cmllcnNAY2Fub25pY2FsLmNvbT4KKworSW5kZXg6IHVuemlwLTYuMC91bml4L3VuaXguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVuemlwLTYuMC5vcmlnL3VuaXgvdW5peC5jCTIwMTUtMDItMTEgMDg6NDY6NDMuNjc1MzI0MjkwIC0wNTAwCisrKysgdW56aXAtNi4wL3VuaXgvdW5peC5jCTIwMTUtMDItMTEgMDk6MTg6MDQuOTAyMDgxMzE5IC0wNTAwCitAQCAtMzAsNiArMzAsOSBAQAorICNkZWZpbmUgVU5aSVBfSU5URVJOQUwKKyAjaW5jbHVkZSAidW56aXAuaCIKKyAKKysjaW5jbHVkZSA8aWNvbnYuaD4KKysjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKysKKyAjaWZkZWYgU0NPX1hFTklYCisgIyAgZGVmaW5lIFNZU05ESVIKKyAjZWxzZSAgLyogU0NPIFVuaXgsIEFJWCwgRE5JWCwgVEkgU3lzViwgQ29oZXJlbnQgNC54LCAuLi4gKi8KK0BAIC0xODc0LDMgKzE4NzcsMTAyIEBACisgICAgIH0KKyB9CisgI2VuZGlmIC8qIFFMWklQICovCisrCisrCisrdHlwZWRlZiBzdHJ1Y3QgeworKyAgICBjaGFyICpsb2NhbF9jaGFyc2V0OworKyAgICBjaGFyICphcmNoaXZlX2NoYXJzZXQ7CisrfSBDSEFSU0VUX01BUDsKKysKKysvKiBBIG1hcHBpbmcgb2YgbG9jYWwgPC0+IGFyY2hpdmUgY2hhcnNldHMgdXNlZCBieSBkZWZhdWx0IHRvIGNvbnZlcnQgZmlsZW5hbWVzCisrICogb2YgRE9TL1dpbmRvd3MgWmlwIGFyY2hpdmVzLiBDdXJyZW50bHkgdmVyeSBiYXNpYy4gKi8KKytzdGF0aWMgQ0hBUlNFVF9NQVAgZG9zX2NoYXJzZXRfbWFwW10gPSB7CisrICAgIHsgIkFOU0lfWDMuNC0xOTY4IiwgIkNQODUwIiB9LAorKyAgICB7ICJJU08tODg1OS0xIiwgIkNQODUwIiB9LAorKyAgICB7ICJDUDEyNTIiLCAiQ1A4NTAiIH0sCisrICAgIHsgIlVURi04IiwgIkNQODY2IiB9LAorKyAgICB7ICJLT0k4LVIiLCAiQ1A4NjYiIH0sCisrICAgIHsgIktPSTgtVSIsICJDUDg2NiIgfSwKKysgICAgeyAiSVNPLTg4NTktNSIsICJDUDg2NiIgfQorK307CisrCisrY2hhciBPRU1fQ1BbTUFYX0NQX05BTUVdID0gIiI7CisrY2hhciBJU09fQ1BbTUFYX0NQX05BTUVdID0gIiI7CisrCisrLyogVHJ5IHRvIGd1ZXNzIHRoZSBkZWZhdWx0IHZhbHVlIG9mIE9FTV9DUCBiYXNlZCBvbiB0aGUgY3VycmVudCBsb2NhbGUuCisrICogSVNPX0NQIGlzIGxlZnQgYWxvbmUgZm9yIG5vdy4gKi8KKyt2b2lkIGluaXRfY29udmVyc2lvbl9jaGFyc2V0cygpCisreworKyAgICBjb25zdCBjaGFyICpsb2NhbF9jaGFyc2V0OworKyAgICBpbnQgaTsKKysKKysgICAgLyogTWFrZSBhIGd1ZXNzIG9ubHkgaWYgT0VNX0NQIG5vdCBhbHJlYWR5IHNldC4gKi8gCisrICAgIGlmKCpPRU1fQ1AgPT0gJ1wwJykgeworKyAgICAJbG9jYWxfY2hhcnNldCA9IG5sX2xhbmdpbmZvKENPREVTRVQpOworKyAgICAJZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKGRvc19jaGFyc2V0X21hcCkvc2l6ZW9mKENIQVJTRVRfTUFQKTsgaSsrKQorKyAgICAJCWlmKCFzdHJjYXNlY21wKGxvY2FsX2NoYXJzZXQsIGRvc19jaGFyc2V0X21hcFtpXS5sb2NhbF9jaGFyc2V0KSkgeworKyAgICAJCQlzdHJuY3B5KE9FTV9DUCwgZG9zX2NoYXJzZXRfbWFwW2ldLmFyY2hpdmVfY2hhcnNldCwKKysgICAgCQkJCQlzaXplb2YoT0VNX0NQKSk7CisrICAgIAkJCWJyZWFrOworKyAgICAJCX0KKysgICAgfQorK30KKysKKysvKiBDb252ZXJ0IGEgc3RyaW5nIGZyb20gb25lIGVuY29kaW5nIHRvIHRoZSBjdXJyZW50IGxvY2FsZSB1c2luZyBpY29udigpLgorKyAqIEJlIGFzIG5vbi1pbnRydXNpdmUgYXMgcG9zc2libGUuIElmIGVycm9yIGlzIGVuY291bnRlcmVkIGR1cmluZyBjb3ZlcnRpb24KKysgKiBqdXN0IGxlYXZlIHRoZSBzdHJpbmcgaW50YWN0LiAqLworK3N0YXRpYyB2b2lkIGNoYXJzZXRfdG9faW50ZXJuKGNoYXIgKnN0cmluZywgY2hhciAqZnJvbV9jaGFyc2V0KQorK3sKKysgICAgaWNvbnZfdCBjZDsKKysgICAgY2hhciAqcywqZCwgKmJ1ZjsKKysgICAgc2l6ZV90IHNsZW4sIGRsZW4sIGJ1ZmxlbjsKKysgICAgY29uc3QgY2hhciAqbG9jYWxfY2hhcnNldDsKKysKKysgICAgaWYoKmZyb21fY2hhcnNldCA9PSAnXDAnKQorKyAgICAJcmV0dXJuOworKworKyAgICBidWYgPSBOVUxMOworKyAgICBsb2NhbF9jaGFyc2V0ID0gbmxfbGFuZ2luZm8oQ09ERVNFVCk7CisrCisrICAgIGlmKChjZCA9IGljb252X29wZW4obG9jYWxfY2hhcnNldCwgZnJvbV9jaGFyc2V0KSkgPT0gKGljb252X3QpLTEpCisrICAgICAgICByZXR1cm47CisrCisrICAgIHNsZW4gPSBzdHJsZW4oc3RyaW5nKTsKKysgICAgcyA9IHN0cmluZzsKKysKKysgICAgLyogIE1ha2Ugc3VyZSBPVVRCVUZTSVogKyAxIG5ldmVyIGVuZHMgdXAgc21hbGxlciB0aGFuIEZJTE5BTVNJWgorKyAgICAgKiAgYXMgdGhpcyBmdW5jdGlvbiBhbHNvIGdldHMgY2FsbGVkIHdpdGggRy5vdXRidWYgaW4gZmlsZWlvLmMKKysgICAgICovCisrICAgIGJ1ZmxlbiA9IEZJTE5BTVNJWjsKKysgICAgaWYgKE9VVEJVRlNJWiArIDEgPCBGSUxOQU1TSVopCisrICAgIHsKKysgICAgICAgIGJ1ZmxlbiA9IE9VVEJVRlNJWiArIDE7CisrICAgIH0KKysKKysgICAgZCA9IGJ1ZiA9IG1hbGxvYyhidWZsZW4pOworKyAgICBpZighZCkKKysgICAgCWdvdG8gY2xlYW51cDsKKysKKysgICAgYnplcm8oYnVmLGJ1Zmxlbik7CisrICAgIGRsZW4gPSBidWZsZW4gLSAxOworKworKyAgICBpZihpY29udihjZCwgJnMsICZzbGVuLCAmZCwgJmRsZW4pID09IChzaXplX3QpLTEpCisrICAgIAlnb3RvIGNsZWFudXA7CisrICAgIHN0cm5jcHkoc3RyaW5nLCBidWYsIGJ1Zmxlbik7CisrCisrICAgIGNsZWFudXA6CisrICAgIGZyZWUoYnVmKTsKKysgICAgaWNvbnZfY2xvc2UoY2QpOworK30KKysKKysvKiBDb252ZXJ0IGEgc3RyaW5nIGZyb20gT0VNX0NQIHRvIHRoZSBjdXJyZW50IGxvY2FsZSBjaGFyc2V0LiAqLworK2lubGluZSB2b2lkIG9lbV9pbnRlcm4oY2hhciAqc3RyaW5nKQorK3sKKysgICAgY2hhcnNldF90b19pbnRlcm4oc3RyaW5nLCBPRU1fQ1ApOworK30KKysKKysvKiBDb252ZXJ0IGEgc3RyaW5nIGZyb20gSVNPX0NQIHRvIHRoZSBjdXJyZW50IGxvY2FsZSBjaGFyc2V0LiAqLworK2lubGluZSB2b2lkIGlzb19pbnRlcm4oY2hhciAqc3RyaW5nKQorK3sKKysgICAgY2hhcnNldF90b19pbnRlcm4oc3RyaW5nLCBJU09fQ1ApOworK30KK0luZGV4OiB1bnppcC02LjAvdW5peC91bnhjZmcuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVuemlwLTYuMC5vcmlnL3VuaXgvdW54Y2ZnLmgJMjAxNS0wMi0xMSAwODo0Njo0My42NzUzMjQyOTAgLTA1MDAKKysrKyB1bnppcC02LjAvdW5peC91bnhjZmcuaAkyMDE1LTAyLTExIDA4OjQ2OjQzLjY3MTMyNDI2MCAtMDUwMAorQEAgLTIyOCw0ICsyMjgsMzAgQEAKKyAvKiB3aWxkX2RpciwgZGlybmFtZSwgd2lsZG5hbWUsIG1hdGNobmFtZVtdLCBkaXJuYW1lbGVuLCBoYXZlX2Rpcm5hbWUsICovCisgLyogICAgYW5kIG5vdGZpcnN0Y2FsbCBhcmUgdXNlZCBieSBkb193aWxkKCkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworIAorKworKyNkZWZpbmUgTUFYX0NQX05BTUUgMjUgCisrICAgCisrI2lmZGVmIFNFVExPQ0FMRQorKyMgIHVuZGVmIFNFVExPQ0FMRQorKyNlbmRpZgorKyNkZWZpbmUgU0VUTE9DQUxFKGNhdGVnb3J5LCBsb2NhbGUpIHNldGxvY2FsZShjYXRlZ29yeSwgbG9jYWxlKQorKyNpbmNsdWRlIDxsb2NhbGUuaD4KKysgICAKKysjaWZkZWYgX0lTT19JTlRFUk4KKysjICB1bmRlZiBfSVNPX0lOVEVSTgorKyNlbmRpZgorKyNkZWZpbmUgX0lTT19JTlRFUk4oc3RyMSkgaXNvX2ludGVybihzdHIxKQorKworKyNpZmRlZiBfT0VNX0lOVEVSTgorKyMgIHVuZGVmIF9PRU1fSU5URVJOCisrI2VuZGlmCisrI2lmbmRlZiBJWl9PRU0ySVNPX0FSUkFZCisrIyAgZGVmaW5lIElaX09FTTJJU09fQVJSQVkKKysjZW5kaWYKKysjZGVmaW5lIF9PRU1fSU5URVJOKHN0cjEpIG9lbV9pbnRlcm4oc3RyMSkKKysKKyt2b2lkIGlzb19pbnRlcm4oY2hhciAqKTsKKyt2b2lkIG9lbV9pbnRlcm4oY2hhciAqKTsKKyt2b2lkIGluaXRfY29udmVyc2lvbl9jaGFyc2V0cyh2b2lkKTsKKysgICAKKyAjZW5kaWYgLyogIV9fdW54Y2ZnX2ggKi8KK0luZGV4OiB1bnppcC02LjAvdW56aXAuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVuemlwLTYuMC5vcmlnL3VuemlwLmMJMjAxNS0wMi0xMSAwODo0Njo0My42NzUzMjQyOTAgLTA1MDAKKysrKyB1bnppcC02LjAvdW56aXAuYwkyMDE1LTAyLTExIDA4OjQ2OjQzLjY3NTMyNDI5MCAtMDUwMAorQEAgLTMyNywxMSArMzI3LDIxIEBACisgICAtMiAganVzdCBmaWxlbmFtZXMgYnV0IGFsbG93IC1oLy10Ly16ICAtbCAgbG9uZyBVbml4IFwibHMgLWxcIiBmb3JtYXRcblwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC12ICB2ZXJib3NlLCBtdWx0aS1wYWdlIGZvcm1hdFxuIjsKKyAKKysjaWZuZGVmIFVOSVgKKyBzdGF0aWMgWkNPTlNUIGNoYXIgRmFyIFppcEluZm9Vc2FnZUxpbmUzW10gPSAibWlzY2VsbGFuZW91cyBvcHRpb25zOlxuXAorICAgLWggIHByaW50IGhlYWRlciBsaW5lICAgICAgIC10ICBwcmludCB0b3RhbHMgZm9yIGxpc3RlZCBmaWxlcyBvciBmb3IgYWxsXG5cCisgICAteiAgcHJpbnQgemlwZmlsZSBjb21tZW50ICAgLVQgIHByaW50IGZpbGUgdGltZXMgaW4gc29ydGFibGUgZGVjaW1hbCBmb3JtYXRcCisgXG4gIC1DICBiZSBjYXNlLWluc2Vuc2l0aXZlICAgJXNcCisgICAteCAgZXhjbHVkZSBmaWxlbmFtZXMgdGhhdCBmb2xsb3cgZnJvbSBsaXN0aW5nXG4iOworKyNlbHNlIC8qIFVOSVggKi8KKytzdGF0aWMgWkNPTlNUIGNoYXIgRmFyIFppcEluZm9Vc2FnZUxpbmUzW10gPSAibWlzY2VsbGFuZW91cyBvcHRpb25zOlxuXAorKyAgLWggIHByaW50IGhlYWRlciBsaW5lICAgICAgIC10ICBwcmludCB0b3RhbHMgZm9yIGxpc3RlZCBmaWxlcyBvciBmb3IgYWxsXG5cCisrICAteiAgcHJpbnQgemlwZmlsZSBjb21tZW50ICAlYy1UJWMgcHJpbnQgZmlsZSB0aW1lcyBpbiBzb3J0YWJsZSBkZWNpbWFsIGZvcm1hdFwKKytcbiAlYy1DJWMgYmUgY2FzZS1pbnNlbnNpdGl2ZSAgICVzXAorKyAgLXggIGV4Y2x1ZGUgZmlsZW5hbWVzIHRoYXQgZm9sbG93IGZyb20gbGlzdGluZ1xuXAorKyAgLU8gQ0hBUlNFVCAgc3BlY2lmeSBhIGNoYXJhY3RlciBlbmNvZGluZyBmb3IgRE9TLCBXaW5kb3dzIGFuZCBPUy8yIGFyY2hpdmVzXG5cCisrICAtSSBDSEFSU0VUICBzcGVjaWZ5IGEgY2hhcmFjdGVyIGVuY29kaW5nIGZvciBVTklYIGFuZCBvdGhlciBhcmNoaXZlc1xuIjsKKysjZW5kaWYgLyogIVVOSVggKi8KKyAjaWZkZWYgTU9SRQorICAgIHN0YXRpYyBaQ09OU1QgY2hhciBGYXIgWmlwSW5mb1VzYWdlTGluZTRbXSA9CisgICAgICAiICAtTSAgcGFnZSBvdXRwdXQgdGhyb3VnaCBidWlsdC1pbiBcIm1vcmVcIlxuIjsKK0BAIC02NjQsNiArNjc0LDE3IEBACisgICAtVSAgdXNlIGVzY2FwZXMgZm9yIGFsbCBub24tQVNDSUkgVW5pY29kZSAgLVVVIGlnbm9yZSBhbnkgVW5pY29kZSBmaWVsZHNcblwKKyAgIC1DICBtYXRjaCBmaWxlbmFtZXMgY2FzZS1pbnNlbnNpdGl2ZWx5ICAgICAtTCAgbWFrZSAoc29tZSkgbmFtZXMgXAorIGxvd2VyY2FzZVxuICUtNDJzICAtViAgcmV0YWluIFZNUyB2ZXJzaW9uIG51bWJlcnNcbiVzIjsKKysjZWxpZiAoZGVmaW5lZCBVTklYKQorK3N0YXRpYyBaQ09OU1QgY2hhciBGYXIgVW56aXBVc2FnZUxpbmU0W10gPSAiXAorK21vZGlmaWVyczpcblwKKysgIC1uICBuZXZlciBvdmVyd3JpdGUgZXhpc3RpbmcgZmlsZXMgICAgICAgICAtcSAgcXVpZXQgbW9kZSAoLXFxID0+IHF1aWV0ZXIpXG5cCisrICAtbyAgb3ZlcndyaXRlIGZpbGVzIFdJVEhPVVQgcHJvbXB0aW5nICAgICAgLWEgIGF1dG8tY29udmVydCBhbnkgdGV4dCBmaWxlc1xuXAorKyAgLWogIGp1bmsgcGF0aHMgKGRvIG5vdCBtYWtlIGRpcmVjdG9yaWVzKSAgIC1hYSB0cmVhdCBBTEwgZmlsZXMgYXMgdGV4dFxuXAorKyAgLVUgIHVzZSBlc2NhcGVzIGZvciBhbGwgbm9uLUFTQ0lJIFVuaWNvZGUgIC1VVSBpZ25vcmUgYW55IFVuaWNvZGUgZmllbGRzXG5cCisrICAtQyAgbWF0Y2ggZmlsZW5hbWVzIGNhc2UtaW5zZW5zaXRpdmVseSAgICAgLUwgIG1ha2UgKHNvbWUpIG5hbWVzIFwKKytsb3dlcmNhc2VcbiAlLTQycyAgLVYgIHJldGFpbiBWTVMgdmVyc2lvbiBudW1iZXJzXG4lc1wKKysgIC1PIENIQVJTRVQgIHNwZWNpZnkgYSBjaGFyYWN0ZXIgZW5jb2RpbmcgZm9yIERPUywgV2luZG93cyBhbmQgT1MvMiBhcmNoaXZlc1xuXAorKyAgLUkgQ0hBUlNFVCAgc3BlY2lmeSBhIGNoYXJhY3RlciBlbmNvZGluZyBmb3IgVU5JWCBhbmQgb3RoZXIgYXJjaGl2ZXNcblxuIjsKKyAjZWxzZSAvKiAhVk1TICovCisgc3RhdGljIFpDT05TVCBjaGFyIEZhciBVbnppcFVzYWdlTGluZTRbXSA9ICJcCisgbW9kaWZpZXJzOlxuXAorQEAgLTgwMiw2ICs4MjMsMTAgQEAKKyAjZW5kaWYgLyogVU5JQ09ERV9TVVBQT1JUICovCisgCisgCisrI2lmZGVmIFVOSVgKKysgICAgaW5pdF9jb252ZXJzaW9uX2NoYXJzZXRzKCk7CisrI2VuZGlmCisrCisgI2lmIChkZWZpbmVkKF9fSUJNQ19fKSAmJiBkZWZpbmVkKF9fREVCVUdfQUxMT0NfXykpCisgICAgIGV4dGVybiB2b2lkIERlYnVnTWFsbG9jKHZvaWQpOworIAorQEAgLTEzMzUsNiArMTM2MCwxMSBAQAorICAgICBhcmdjID0gKnBhcmdjOworICAgICBhcmd2ID0gKnBhcmd2OworIAorKyNpZmRlZiBVTklYCisrICAgIGV4dGVybiBjaGFyIE9FTV9DUFtNQVhfQ1BfTkFNRV07CisrICAgIGV4dGVybiBjaGFyIElTT19DUFtNQVhfQ1BfTkFNRV07CisrI2VuZGlmCisrICAgIAorICAgICB3aGlsZSAoKythcmd2LCAoLS1hcmdjID4gMCAmJiAqYXJndiAhPSBOVUxMICYmICoqYXJndiA9PSAnLScpKSB7CisgICAgICAgICBzID0gKmFyZ3YgKyAxOworICAgICAgICAgd2hpbGUgKChjID0gKnMrKykgIT0gMCkgeyAgICAvKiAiIT0gMCI6ICBwcmV2ZW50IFR1cmJvIEMgd2FybmluZyAqLworQEAgLTE1MTYsNiArMTU0NiwzNSBAQAorICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgI2VuZGlmICAvKiBNQUNPUyAqLworKyNpZmRlZiBVTklYCisrICAgIAkJCWNhc2UgKCdJJyk6CisrICAgICAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3I6ICBlbmNvZGluZ3MgY2FuJ3QgYmUgbmVnYXRlZCIpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oUEtfUEFSQU0pOworKyAgICAJCQkJfSBlbHNlIHsKKysgICAgCQkJCQlpZigqcykgeyAvKiBIYW5kbGUgdGhlIC1JY2hhcnNldCBjYXNlICovCisrICAgIAkJCQkJCS8qIEFzc3VtZSB0aGF0IGNoYXJzZXRzIGNhbid0IHN0YXJ0IHdpdGggYSBkYXNoIHRvIHNwb3QgYXJndW1lbnRzIG1pc3VzZSAqLworKyAgICAJCQkJCQlpZigqcyA9PSAnLScpIHsgCisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsCisrICAgICAgICAJCSAgICAgICAgICAgICAgICAgICJlcnJvcjogIGEgdmFsaWQgY2hhcmFjdGVyIGVuY29kaW5nIHNob3VsZCBmb2xsb3cgdGhlIC1JIGFyZ3VtZW50IikpOworKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKFBLX1BBUkFNKTsgCisrICAgIAkJCQkJCX0KKysgICAgCQkJCQkJc3RybmNweShJU09fQ1AsIHMsIHNpemVvZihJU09fQ1ApKTsKKysgICAgCQkJCQl9IGVsc2UgeyAvKiAtSSBjaGFyc2V0ICovCisrICAgIAkJCQkJCSsrYXJndjsKKysgICAgCQkJCQkJaWYoISgtLWFyZ2MgPiAwICYmICphcmd2ICE9IE5VTEwgJiYgKiphcmd2ICE9ICctJykpIHsKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgIAkJICAgICAgICAgICAgICAgICAgImVycm9yOiAgYSB2YWxpZCBjaGFyYWN0ZXIgZW5jb2Rpbmcgc2hvdWxkIGZvbGxvdyB0aGUgLUkgYXJndW1lbnQiKSk7CisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oUEtfUEFSQU0pOyAKKysgICAgCQkJCQkJfQorKyAgICAJCQkJCQlzID0gKmFyZ3Y7CisrICAgIAkJCQkJCXN0cm5jcHkoSVNPX0NQLCBzLCBzaXplb2YoSVNPX0NQKSk7CisrICAgIAkJCQkJfQorKyAgICAJCQkJCXdoaWxlKCooKytzKSk7IC8qIE5vIHBhcmFtcyBzdHJhaWdodCBhZnRlciBjaGFyc2V0IG5hbWUgKi8KKysgICAgCQkJCX0KKysgICAgCQkJCWJyZWFrOworKyNlbmRpZiAvKiA/VU5JWCAqLworICAgICAgICAgICAgICAgICBjYXNlICgnaicpOiAgICAvKiBqdW5rIHBhdGhuYW1lcy9kaXJlY3Rvcnkgc3RydWN0dXJlICovCisgICAgICAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgdU8uamZsYWcgPSBGQUxTRSwgbmVnYXRpdmUgPSAwOworQEAgLTE1OTEsNiArMTY1MCwzNSBAQAorICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgKyt1Ty5vdmVyd3JpdGVfYWxsOworICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrI2lmZGVmIFVOSVgKKysgICAgCQkJY2FzZSAoJ08nKToKKysgICAgICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvcjogIGVuY29kaW5ncyBjYW4ndCBiZSBuZWdhdGVkIikpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7CisrICAgIAkJCQl9IGVsc2UgeworKyAgICAJCQkJCWlmKCpzKSB7IC8qIEhhbmRsZSB0aGUgLU9jaGFyc2V0IGNhc2UgKi8KKysgICAgCQkJCQkJLyogQXNzdW1lIHRoYXQgY2hhcnNldHMgY2FuJ3Qgc3RhcnQgd2l0aCBhIGRhc2ggdG8gc3BvdCBhcmd1bWVudHMgbWlzdXNlICovCisrICAgIAkJCQkJCWlmKCpzID09ICctJykgeyAKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgIAkJICAgICAgICAgICAgICAgICAgImVycm9yOiAgYSB2YWxpZCBjaGFyYWN0ZXIgZW5jb2Rpbmcgc2hvdWxkIGZvbGxvdyB0aGUgLUkgYXJndW1lbnQiKSk7CisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oUEtfUEFSQU0pOyAKKysgICAgCQkJCQkJfQorKyAgICAJCQkJCQlzdHJuY3B5KE9FTV9DUCwgcywgc2l6ZW9mKE9FTV9DUCkpOworKyAgICAJCQkJCX0gZWxzZSB7IC8qIC1PIGNoYXJzZXQgKi8KKysgICAgCQkJCQkJKythcmd2OworKyAgICAJCQkJCQlpZighKC0tYXJnYyA+IDAgJiYgKmFyZ3YgIT0gTlVMTCAmJiAqKmFyZ3YgIT0gJy0nKSkgeworKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAiZXJyb3I6ICBhIHZhbGlkIGNoYXJhY3RlciBlbmNvZGluZyBzaG91bGQgZm9sbG93IHRoZSAtTyBhcmd1bWVudCIpKTsKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7IAorKyAgICAJCQkJCQl9CisrICAgIAkJCQkJCXMgPSAqYXJndjsKKysgICAgCQkJCQkJc3RybmNweShPRU1fQ1AsIHMsIHNpemVvZihPRU1fQ1ApKTsKKysgICAgCQkJCQl9CisrICAgIAkJCQkJd2hpbGUoKigrK3MpKTsgLyogTm8gcGFyYW1zIHN0cmFpZ2h0IGFmdGVyIGNoYXJzZXQgbmFtZSAqLworKyAgICAJCQkJfQorKyAgICAJCQkJYnJlYWs7CisrI2VuZGlmIC8qID9VTklYICovCisgICAgICAgICAgICAgICAgIGNhc2UgKCdwJyk6ICAgIC8qIHBpcGVzOiAgZXh0cmFjdCB0byBzdGRvdXQsIG5vIG1lc3NhZ2VzICovCisgICAgICAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICB1Ty5jZmxhZyA9IEZBTFNFOworSW5kZXg6IHVuemlwLTYuMC91bnpwcml2LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1bnppcC02LjAub3JpZy91bnpwcml2LmgJMjAxNS0wMi0xMSAwODo0Njo0My42NzUzMjQyOTAgLTA1MDAKKysrKyB1bnppcC02LjAvdW56cHJpdi5oCTIwMTUtMDItMTEgMDg6NDY6NDMuNjc1MzI0MjkwIC0wNTAwCitAQCAtMzAwOCw3ICszMDA4LDcgQEAKKyAgICAgICAgICAhKCgoaXNsb2NoZHIpIHx8IChpc3V4YXR0KSkgJiYgXAorICAgICAgICAgICAgKChob3N0dmVyKSA9PSAyNSB8fCAoaG9zdHZlcikgPT0gMjYgfHwgKGhvc3R2ZXIpID09IDQwKSkpIHx8IFwKKyAgICAgICAgIChob3N0bnVtKSA9PSBGU19IUEZTXyB8fCBcCistICAgICAgICAoKGhvc3RudW0pID09IEZTX05URlNfICYmIChob3N0dmVyKSA9PSA1MCkpIHsgXAorKyAgICAgICAgKChob3N0bnVtKSA9PSBGU19OVEZTXyAvKiAmJiAoaG9zdHZlcikgPT0gNTAgKi8gKSkgeyBcCisgICAgICAgICBfT0VNX0lOVEVSTigoc3RyaW5nKSk7IFwKKyAgICAgfSBlbHNlIHsgXAorICAgICAgICAgX0lTT19JTlRFUk4oKHN0cmluZykpOyBcCitJbmRleDogdW56aXAtNi4wL3ppcGluZm8uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVuemlwLTYuMC5vcmlnL3ppcGluZm8uYwkyMDE1LTAyLTExIDA4OjQ2OjQzLjY3NTMyNDI5MCAtMDUwMAorKysrIHVuemlwLTYuMC96aXBpbmZvLmMJMjAxNS0wMi0xMSAwODo0Njo0My42NzUzMjQyOTAgLTA1MDAKK0BAIC00NTcsNiArNDU3LDEwIEBACisgICAgIGludCAgICB0ZmxhZ19zbG09VFJVRSwgdGZsYWdfMnY9RkFMU0U7CisgICAgIGludCAgICBleHBsaWNpdF9oPUZBTFNFLCBleHBsaWNpdF90PUZBTFNFOworIAorKyNpZmRlZiBVTklYCisrICAgIGV4dGVybiBjaGFyIE9FTV9DUFtNQVhfQ1BfTkFNRV07CisrICAgIGV4dGVybiBjaGFyIElTT19DUFtNQVhfQ1BfTkFNRV07CisrI2VuZGlmCisgCisgI2lmZGVmIE1BQ09TCisgICAgIHVPLmxmbGFnID0gTEZMQUc7ICAgICAgICAgLyogcmVzZXQgZGVmYXVsdCBvbiBlYWNoIGNhbGwgKi8KK0BAIC01MDEsNiArNTA1LDM1IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVPLmxmbGFnID0gMDsKKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyNpZmRlZiBVTklYCisrICAgIAkJCWNhc2UgKCdJJyk6CisrICAgICAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3I6ICBlbmNvZGluZ3MgY2FuJ3QgYmUgbmVnYXRlZCIpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oUEtfUEFSQU0pOworKyAgICAJCQkJfSBlbHNlIHsKKysgICAgCQkJCQlpZigqcykgeyAvKiBIYW5kbGUgdGhlIC1JY2hhcnNldCBjYXNlICovCisrICAgIAkJCQkJCS8qIEFzc3VtZSB0aGF0IGNoYXJzZXRzIGNhbid0IHN0YXJ0IHdpdGggYSBkYXNoIHRvIHNwb3QgYXJndW1lbnRzIG1pc3VzZSAqLworKyAgICAJCQkJCQlpZigqcyA9PSAnLScpIHsgCisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsCisrICAgICAgICAJCSAgICAgICAgICAgICAgICAgICJlcnJvcjogIGEgdmFsaWQgY2hhcmFjdGVyIGVuY29kaW5nIHNob3VsZCBmb2xsb3cgdGhlIC1JIGFyZ3VtZW50IikpOworKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKFBLX1BBUkFNKTsgCisrICAgIAkJCQkJCX0KKysgICAgCQkJCQkJc3RybmNweShJU09fQ1AsIHMsIHNpemVvZihJU09fQ1ApKTsKKysgICAgCQkJCQl9IGVsc2UgeyAvKiAtSSBjaGFyc2V0ICovCisrICAgIAkJCQkJCSsrYXJndjsKKysgICAgCQkJCQkJaWYoISgtLWFyZ2MgPiAwICYmICphcmd2ICE9IE5VTEwgJiYgKiphcmd2ICE9ICctJykpIHsKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgIAkJICAgICAgICAgICAgICAgICAgImVycm9yOiAgYSB2YWxpZCBjaGFyYWN0ZXIgZW5jb2Rpbmcgc2hvdWxkIGZvbGxvdyB0aGUgLUkgYXJndW1lbnQiKSk7CisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oUEtfUEFSQU0pOyAKKysgICAgCQkJCQkJfQorKyAgICAJCQkJCQlzID0gKmFyZ3Y7CisrICAgIAkJCQkJCXN0cm5jcHkoSVNPX0NQLCBzLCBzaXplb2YoSVNPX0NQKSk7CisrICAgIAkJCQkJfQorKyAgICAJCQkJCXdoaWxlKCooKytzKSk7IC8qIE5vIHBhcmFtcyBzdHJhaWdodCBhZnRlciBjaGFyc2V0IG5hbWUgKi8KKysgICAgCQkJCX0KKysgICAgCQkJCWJyZWFrOworKyNlbmRpZiAvKiA/VU5JWCAqLworICAgICAgICAgICAgICAgICBjYXNlICdsJzogICAgICAvKiBsb25nZXIgZm9ybSBvZiAibHMgLWwiIHR5cGUgbGlzdGluZyAqLworICAgICAgICAgICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKQorICAgICAgICAgICAgICAgICAgICAgICAgIHVPLmxmbGFnID0gLTIsIG5lZ2F0aXZlID0gMDsKK0BAIC01MjEsNiArNTU0LDM1IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgRy5NX2ZsYWcgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgI2VuZGlmCisrI2lmZGVmIFVOSVgKKysgICAgCQkJY2FzZSAoJ08nKToKKysgICAgICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvcjogIGVuY29kaW5ncyBjYW4ndCBiZSBuZWdhdGVkIikpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7CisrICAgIAkJCQl9IGVsc2UgeworKyAgICAJCQkJCWlmKCpzKSB7IC8qIEhhbmRsZSB0aGUgLU9jaGFyc2V0IGNhc2UgKi8KKysgICAgCQkJCQkJLyogQXNzdW1lIHRoYXQgY2hhcnNldHMgY2FuJ3Qgc3RhcnQgd2l0aCBhIGRhc2ggdG8gc3BvdCBhcmd1bWVudHMgbWlzdXNlICovCisrICAgIAkJCQkJCWlmKCpzID09ICctJykgeyAKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgIAkJICAgICAgICAgICAgICAgICAgImVycm9yOiAgYSB2YWxpZCBjaGFyYWN0ZXIgZW5jb2Rpbmcgc2hvdWxkIGZvbGxvdyB0aGUgLUkgYXJndW1lbnQiKSk7CisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oUEtfUEFSQU0pOyAKKysgICAgCQkJCQkJfQorKyAgICAJCQkJCQlzdHJuY3B5KE9FTV9DUCwgcywgc2l6ZW9mKE9FTV9DUCkpOworKyAgICAJCQkJCX0gZWxzZSB7IC8qIC1PIGNoYXJzZXQgKi8KKysgICAgCQkJCQkJKythcmd2OworKyAgICAJCQkJCQlpZighKC0tYXJnYyA+IDAgJiYgKmFyZ3YgIT0gTlVMTCAmJiAqKmFyZ3YgIT0gJy0nKSkgeworKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAiZXJyb3I6ICBhIHZhbGlkIGNoYXJhY3RlciBlbmNvZGluZyBzaG91bGQgZm9sbG93IHRoZSAtTyBhcmd1bWVudCIpKTsKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7IAorKyAgICAJCQkJCQl9CisrICAgIAkJCQkJCXMgPSAqYXJndjsKKysgICAgCQkJCQkJc3RybmNweShPRU1fQ1AsIHMsIHNpemVvZihPRU1fQ1ApKTsKKysgICAgCQkJCQl9CisrICAgIAkJCQkJd2hpbGUoKigrK3MpKTsgLyogTm8gcGFyYW1zIHN0cmFpZ2h0IGFmdGVyIGNoYXJzZXQgbmFtZSAqLworKyAgICAJCQkJfQorKyAgICAJCQkJYnJlYWs7CisrI2VuZGlmIC8qID9VTklYICovCisgICAgICAgICAgICAgICAgIGNhc2UgJ3MnOiAgICAgIC8qIGRlZmF1bHQ6ICBzaG9ydGVyICJscyAtbCIgdHlwZSBsaXN0aW5nICovCisgICAgICAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgdU8ubGZsYWcgPSAtMiwgbmVnYXRpdmUgPSAwOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMDktY3ZlLTIwMTQtODEzOS1jcmMtb3ZlcmZsb3cucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8wOS1jdmUtMjAxNC04MTM5LWNyYy1vdmVyZmxvdy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTM3ZjBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMDktY3ZlLTIwMTQtODEzOS1jcmMtb3ZlcmZsb3cucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorRnJvbTogc21zCitTdWJqZWN0OiBGaXggQ1ZFLTIwMTQtODEzOTogQ1JDMzIgdmVyaWZpY2F0aW9uIGhlYXAtYmFzZWQgb3ZlcmZsb3cKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNzczNzIyCisKK1RoZSBwYXRjaCBjb21lcyBmcm9tIHVuemlwXzYuMC04K2RlYjd1Mi5kZWJpYW4udGFyLmd6CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorCistLS0gYS9leHRyYWN0LmMKKysrKyBiL2V4dHJhY3QuYworQEAgLTI5OCw2ICsyOTgsOCBAQAorICNpZm5kZWYgU0ZYCisgICAgc3RhdGljIFpDT05TVCBjaGFyIEZhciBJbmNvbnNpc3RFRmxlbmd0aFtdID0gImJhZCBleHRyYS1maWVsZCBlbnRyeTpcbiBcCisgICAgICBFRiBibG9jayBsZW5ndGggKCV1IGJ5dGVzKSBleGNlZWRzIHJlbWFpbmluZyBFRiBkYXRhICgldSBieXRlcylcbiI7CisrICAgc3RhdGljIFpDT05TVCBjaGFyIEZhciBUb29TbWFsbEVCbGVuZ3RoW10gPSAiYmFkIGV4dHJhLWZpZWxkIGVudHJ5OlxuIFwKKysgICAgIEVGIGJsb2NrIGxlbmd0aCAoJXUgYnl0ZXMpIGludmFsaWQgKDwgJWQpXG4iOworICAgIHN0YXRpYyBaQ09OU1QgY2hhciBGYXIgSW52YWxpZENvbXByRGF0YUVBc1tdID0KKyAgICAgICIgaW52YWxpZCBjb21wcmVzc2VkIGRhdGEgZm9yIEVBc1xuIjsKKyAjICBpZiAoZGVmaW5lZChXSU4zMikgJiYgZGVmaW5lZChOVFNEX0VBUykpCitAQCAtMjAyMyw3ICsyMDI1LDggQEAKKyAgICAgICAgIGViSUQgPSBtYWtld29yZChlZik7CisgICAgICAgICBlYkxlbiA9ICh1bnNpZ25lZCltYWtld29yZChlZitFQl9MRU4pOworIAorLSAgICAgICAgaWYgKGViTGVuID4gKGVmX2xlbiAtIEVCX0hFQURTSVpFKSkgeworKyAgICAgICAgaWYgKGViTGVuID4gKGVmX2xlbiAtIEVCX0hFQURTSVpFKSkKKysgICAgICAgIHsKKyAgICAgICAgICAgIC8qIERpc2NvdmVyZWQgc29tZSBleHRyYSBmaWVsZCBpbmNvbnNpc3RlbmN5ISAqLworICAgICAgICAgICAgIGlmICh1Ty5xZmxhZykKKyAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMSwgKChjaGFyICopc2xpZGUsICIlLTIycyAiLAorQEAgLTIxNTgsMTEgKzIxNjEsMTkgQEAKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICBjYXNlIEVGX1BLVk1TOgorLSAgICAgICAgICAgICAgICBpZiAobWFrZWxvbmcoZWYrRUJfSEVBRFNJWkUpICE9CisrICAgICAgICAgICAgICAgIGlmIChlYkxlbiA8IDQpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDEsCisrICAgICAgICAgICAgICAgICAgICAgKChjaGFyICopc2xpZGUsIExvYWRGYXJTdHJpbmcoVG9vU21hbGxFQmxlbmd0aCksCisrICAgICAgICAgICAgICAgICAgICAgZWJMZW4sIDQpKTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBlbHNlIGlmIChtYWtlbG9uZyhlZitFQl9IRUFEU0laRSkgIT0KKyAgICAgICAgICAgICAgICAgICAgIGNyYzMyKENSQ1ZBTF9JTklUSUFMLCBlZisoRUJfSEVBRFNJWkUrNCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXh0ZW50KShlYkxlbi00KSkpCisrICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDEsICgoY2hhciAqKXNsaWRlLAorICAgICAgICAgICAgICAgICAgICAgICBMb2FkRmFyU3RyaW5nKEJhZENSQ19FQXMpKSk7CisrICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgY2FzZSBFRl9QS1czMjoKKyAgICAgICAgICAgICBjYXNlIEVGX1BLVU5JWDoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwLzEwLWN2ZS0yMDE0LTgxNDAtdGVzdC1jb21wci1lYi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwLzEwLWN2ZS0yMDE0LTgxNDAtdGVzdC1jb21wci1lYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGM3ZDUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMTAtY3ZlLTIwMTQtODE0MC10ZXN0LWNvbXByLWViLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb206IHNtcworU3ViamVjdDogRml4IENWRS0yMDE0LTgxNDA6IG91dC1vZi1ib3VuZHMgd3JpdGUgaXNzdWUgaW4gdGVzdF9jb21wcl9lYigpCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzc3MzcyMgorCitUaGUgcGF0Y2ggY29tZXMgZnJvbSB1bnppcF82LjAtOCtkZWI3dTIuZGViaWFuLnRhci5negorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKworLS0tIGEvZXh0cmFjdC5jCisrKysgYi9leHRyYWN0LmMKK0BAIC0yMjMyLDEwICsyMjMyLDE3IEBACisgICAgIGlmIChjb21wcl9vZmZzZXQgPCA0KSAgICAgICAgICAgICAgICAvKiBmaWVsZCBpcyBub3QgY29tcHJlc3NlZDogKi8KKyAgICAgICAgIHJldHVybiBQS19PSzsgICAgICAgICAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgYW5kIHNpZ25hbCBPSyAqLworIAorKyAgICAvKiBSZXR1cm4gbm8vYmFkLWRhdGEgZXJyb3Igc3RhdHVzIGlmIGFueSBwcm9ibGVtIGlzIGZvdW5kOgorKyAgICAgKiAgICAxLiBlYl9zaXplIGlzIHRvbyBzbWFsbCB0byBob2xkIHRoZSB1bmNvbXByZXNzZWQgc2l6ZQorKyAgICAgKiAgICAgICAoZWJfdWNzaXplKS4gIChFbHNlIGV4dHJhY3QgZWJfdWNzaXplLikKKysgICAgICogICAgMi4gZWJfdWNzaXplIGlzIHplcm8gKGludmFsaWQpLiAgMjAxNC0xMi0wNCBTTVMuCisrICAgICAqICAgIDMuIGViX3Vjc2l6ZSBpcyBwb3NpdGl2ZSwgYnV0IGViX3NpemUgaXMgdG9vIHNtYWxsIHRvIGhvbGQKKysgICAgICogICAgICAgdGhlIGNvbXByZXNzZWQgZGF0YSBoZWFkZXIuCisrICAgICAqLworICAgICBpZiAoKGViX3NpemUgPCAoRUJfVUNTSVpFX1AgKyA0KSkgfHwKKy0gICAgICAgICgoZWJfdWNzaXplID0gbWFrZWxvbmcoZWIrKEVCX0hFQURTSVpFK0VCX1VDU0laRV9QKSkpID4gMEwgJiYKKy0gICAgICAgICBlYl9zaXplIDw9IChjb21wcl9vZmZzZXQgKyBFQl9DTVBSSEVBRExFTikpKQorLSAgICAgICAgcmV0dXJuIElaX0VGX1RSVU5DOyAgICAgICAgICAgICAgIC8qIG5vIGNvbXByZXNzZWQgZGF0YSEgKi8KKysgICAgICgoZWJfdWNzaXplID0gbWFrZWxvbmcoIGViKyAoRUJfSEVBRFNJWkUrIEVCX1VDU0laRV9QKSkpID09IDBMKSB8fAorKyAgICAgKChlYl91Y3NpemUgPiAwTCkgJiYgKGViX3NpemUgPD0gKGNvbXByX29mZnNldCArIEVCX0NNUFJIRUFETEVOKSkpKQorKyAgICAgICAgcmV0dXJuIElaX0VGX1RSVU5DOyAgICAgICAgICAgICAvKiBuby9iYWQgY29tcHJlc3NlZCBkYXRhISAqLworIAorICAgICBpZiAoCisgI2lmZGVmIElOVF8xNkJJVApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMTEtY3ZlLTIwMTQtODE0MS1nZXR6aXA2NGRhdGEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8xMS1jdmUtMjAxNC04MTQxLWdldHppcDY0ZGF0YS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGMxZGIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMTEtY3ZlLTIwMTQtODE0MS1nZXR6aXA2NGRhdGEucGF0Y2gKQEAgLTAsMCArMSwxNDQgQEAKK0Zyb206IHNtcworU3ViamVjdDogRml4IENWRS0yMDE0LTgxNDE6IG91dC1vZi1ib3VuZHMgcmVhZCBpc3N1ZXMgaW4gZ2V0WmlwNjREYXRhKCkKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNzczNzIyCisKK1RoZSBwYXRjaCBjb21lcyBmcm9tIHVuemlwXzYuMC04K2RlYjd1Mi5kZWJpYW4udGFyLmd6CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorCisKKy0tLSBhL2ZpbGVpby5jCisrKysgYi9maWxlaW8uYworQEAgLTE3Niw2ICsxNzYsOCBAQAorICNlbmRpZgorIHN0YXRpYyBaQ09OU1QgY2hhciBGYXIgRXh0cmFGaWVsZFRvb0xvbmdbXSA9CisgICAid2FybmluZzogIGV4dHJhIGZpZWxkIHRvbyBsb25nICglZCkuICBJZ25vcmluZy4uLlxuIjsKKytzdGF0aWMgWkNPTlNUIGNoYXIgRmFyIEV4dHJhRmllbGRDb3JydXB0W10gPQorKyAgIndhcm5pbmc6ICBleHRyYSBmaWVsZCAodHlwZTogMHglMDR4KSBjb3JydXB0LiAgQ29udGludWluZy4uLlxuIjsKKyAKKyAjaWZkZWYgV0lORExMCisgICAgc3RhdGljIFpDT05TVCBjaGFyIEZhciBEaXNrRnVsbFF1ZXJ5W10gPQorQEAgLTIyOTUsNyArMjI5NywxMiBAQAorICAgICAgICAgICAgIGlmIChyZWFkYnVmKF9fR19fIChjaGFyICopRy5leHRyYV9maWVsZCwgbGVuZ3RoKSA9PSAwKQorICAgICAgICAgICAgICAgICByZXR1cm4gUEtfRU9GOworICAgICAgICAgICAgIC8qIExvb2tzIGxpa2UgaGVyZSBpcyB3aGVyZSBleHRyYSBmaWVsZHMgYXJlIHJlYWQgKi8KKy0gICAgICAgICAgICBnZXRaaXA2NERhdGEoX19HX18gRy5leHRyYV9maWVsZCwgbGVuZ3RoKTsKKysgICAgICAgICAgICBpZiAoZ2V0WmlwNjREYXRhKF9fR19fIEcuZXh0cmFfZmllbGQsIGxlbmd0aCkgIT0gUEtfQ09PTCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgICAgICAgICAgIExvYWRGYXJTdHJpbmcoIEV4dHJhRmllbGRDb3JydXB0KSwgRUZfUEtTWjY0KSk7CisrICAgICAgICAgICAgICAgIGVycm9yID0gUEtfV0FSTjsKKysgICAgICAgICAgICB9CisgI2lmZGVmIFVOSUNPREVfU1VQUE9SVAorICAgICAgICAgICAgIEcudW5pcGF0aF9maWxlbmFtZSA9IE5VTEw7CisgICAgICAgICAgICAgaWYgKEcuVXpPLlVfZmxhZyA8IDIpIHsKKy0tLSBhL3Byb2Nlc3MuYworKysrIGIvcHJvY2Vzcy5jCitAQCAtMSw1ICsxLDUgQEAKKyAvKgorLSAgQ29weXJpZ2h0IChjKSAxOTkwLTIwMDkgSW5mby1aSVAuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAgQ29weXJpZ2h0IChjKSAxOTkwLTIwMTQgSW5mby1aSVAuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIAorICAgU2VlIHRoZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFLCB2ZXJzaW9uIDIwMDktSmFuLTAyIG9yIGxhdGVyCisgICAodGhlIGNvbnRlbnRzIG9mIHdoaWNoIGFyZSBhbHNvIGluY2x1ZGVkIGluIHVuemlwLmgpIGZvciB0ZXJtcyBvZiB1c2UuCitAQCAtMTkwMSw0OCArMTkwMSw4MiBAQAorICAgICBhbmQgYSA0LWJ5dGUgdmVyc2lvbiBvZiBkaXNrIHN0YXJ0IG51bWJlci4KKyAgICAgU2V0cyBib3RoIGxvY2FsIGhlYWRlciBhbmQgY2VudHJhbCBoZWFkZXIgZmllbGRzLiAgTm90IHRlcnJpYmx5IGNsZXZlciwKKyAgICAgYnV0IGl0IG1lYW5zIHRoYXQgdGhpcyBwcm9jZWR1cmUgaXMgb25seSBjYWxsZWQgaW4gb25lIHBsYWNlLgorKworKyAgICAyMDE0LTEyLTA1IFNNUy4KKysgICAgQWRkZWQgY2hlY2tzIHRvIGVuc3VyZSB0aGF0IGVub3VnaCBkYXRhIGFyZSBhdmFpbGFibGUgYmVmb3JlIGNhbGxpbmcKKysgICAgbWFrZWludDY0KCkgb3IgbWFrZWxvbmcoKS4gIFJlcGxhY2VkIHZhcmlvdXMgc2l6ZW9mKCkgdmFsdWVzIHdpdGgKKysgICAgc2ltcGxlICgiNCIgb3IgIjgiKSBjb25zdGFudHMuICAoVGhlIFppcDY0IHN0cnVjdHVyZXMgZG8gbm90IGRlcGVuZAorKyAgICBvbiBvdXIgdmFyaWFibGUgc2l6ZXMuKSAgRXJyb3IgaGFuZGxpbmcgaXMgY3J1ZGUsIGJ1dCB3ZSBzaG91bGQgbm93CisrICAgIHN0YXkgd2l0aGluIHRoZSBidWZmZXIuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorKyNkZWZpbmUgWjY0RkxHUyAweGZmZmYKKysjZGVmaW5lIFo2NEZMR0wgMHhmZmZmZmZmZgorKworICAgICBpZiAoZWZfbGVuID09IDAgfHwgZWZfYnVmID09IE5VTEwpCisgICAgICAgICByZXR1cm4gUEtfQ09PTDsKKyAKKyAgICAgVHJhY2UoKHN0ZGVyciwiXG5nZXRaaXA2NERhdGE6IHNjYW5uaW5nIGV4dHJhIGZpZWxkIG9mIGxlbmd0aCAldVxuIiwKKyAgICAgICBlZl9sZW4pKTsKKyAKKy0gICAgd2hpbGUgKGVmX2xlbiA+PSBFQl9IRUFEU0laRSkgeworKyAgICB3aGlsZSAoZWZfbGVuID49IEVCX0hFQURTSVpFKQorKyAgICB7CisgICAgICAgICBlYl9pZCA9IG1ha2V3b3JkKEVCX0lEICsgZWZfYnVmKTsKKyAgICAgICAgIGViX2xlbiA9IG1ha2V3b3JkKEVCX0xFTiArIGVmX2J1Zik7CisgCistICAgICAgICBpZiAoZWJfbGVuID4gKGVmX2xlbiAtIEVCX0hFQURTSVpFKSkgeworLSAgICAgICAgICAgIC8qIGRpc2NvdmVyZWQgc29tZSBleHRyYSBmaWVsZCBpbmNvbnNpc3RlbmN5ISAqLworKyAgICAgICAgaWYgKGViX2xlbiA+IChlZl9sZW4gLSBFQl9IRUFEU0laRSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgLyogRXh0cmEgYmxvY2sgbGVuZ3RoIGV4Y2VlZHMgcmVtYWluaW5nIGV4dHJhIGZpZWxkIGxlbmd0aC4gKi8KKyAgICAgICAgICAgICBUcmFjZSgoc3RkZXJyLAorICAgICAgICAgICAgICAgImdldFppcDY0RGF0YTogYmxvY2sgbGVuZ3RoICV1ID4gcmVzdCBlZl9zaXplICV1XG4iLCBlYl9sZW4sCisgICAgICAgICAgICAgICBlZl9sZW4gLSBFQl9IRUFEU0laRSkpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorLSAgICAgICAgaWYgKGViX2lkID09IEVGX1BLU1o2NCkgeworLQorKyAgICAgICAgaWYgKGViX2lkID09IEVGX1BLU1o2NCkKKysgICAgICAgIHsKKyAgICAgICAgICAgaW50IG9mZnNldCA9IEVCX0hFQURTSVpFOworIAorLSAgICAgICAgICBpZiAoRy5jcmVjLnVjc2l6ZSA9PSAweGZmZmZmZmZmIHx8IEcubHJlYy51Y3NpemUgPT0gMHhmZmZmZmZmZil7CistICAgICAgICAgICAgRy5scmVjLnVjc2l6ZSA9IEcuY3JlYy51Y3NpemUgPSBtYWtlaW50NjQob2Zmc2V0ICsgZWZfYnVmKTsKKy0gICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKEcuY3JlYy51Y3NpemUpOworKyAgICAgICAgICBpZiAoKEcuY3JlYy51Y3NpemUgPT0gWjY0RkxHTCkgfHwgKEcubHJlYy51Y3NpemUgPT0gWjY0RkxHTCkpCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBpZiAob2Zmc2V0KyA4ID4gZWZfbGVuKQorKyAgICAgICAgICAgICAgcmV0dXJuIFBLX0VSUjsKKysKKysgICAgICAgICAgICBHLmNyZWMudWNzaXplID0gRy5scmVjLnVjc2l6ZSA9IG1ha2VpbnQ2NChvZmZzZXQgKyBlZl9idWYpOworKyAgICAgICAgICAgIG9mZnNldCArPSA4OworICAgICAgICAgICB9CistICAgICAgICAgIGlmIChHLmNyZWMuY3NpemUgPT0gMHhmZmZmZmZmZiB8fCBHLmxyZWMuY3NpemUgPT0gMHhmZmZmZmZmZil7CistICAgICAgICAgICAgRy5jc2l6ZSA9IEcubHJlYy5jc2l6ZSA9IEcuY3JlYy5jc2l6ZSA9IG1ha2VpbnQ2NChvZmZzZXQgKyBlZl9idWYpOworLSAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2YoRy5jcmVjLmNzaXplKTsKKysKKysgICAgICAgICAgaWYgKChHLmNyZWMuY3NpemUgPT0gWjY0RkxHTCkgfHwgKEcubHJlYy5jc2l6ZSA9PSBaNjRGTEdMKSkKKysgICAgICAgICAgeworKyAgICAgICAgICAgIGlmIChvZmZzZXQrIDggPiBlZl9sZW4pCisrICAgICAgICAgICAgICByZXR1cm4gUEtfRVJSOworKworKyAgICAgICAgICAgIEcuY3NpemUgPSBHLmNyZWMuY3NpemUgPSBHLmxyZWMuY3NpemUgPSBtYWtlaW50NjQob2Zmc2V0ICsgZWZfYnVmKTsKKysgICAgICAgICAgICBvZmZzZXQgKz0gODsKKyAgICAgICAgICAgfQorLSAgICAgICAgICBpZiAoRy5jcmVjLnJlbGF0aXZlX29mZnNldF9sb2NhbF9oZWFkZXIgPT0gMHhmZmZmZmZmZil7CisrCisrICAgICAgICAgIGlmIChHLmNyZWMucmVsYXRpdmVfb2Zmc2V0X2xvY2FsX2hlYWRlciA9PSBaNjRGTEdMKQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgaWYgKG9mZnNldCsgOCA+IGVmX2xlbikKKysgICAgICAgICAgICAgIHJldHVybiBQS19FUlI7CisrCisgICAgICAgICAgICAgRy5jcmVjLnJlbGF0aXZlX29mZnNldF9sb2NhbF9oZWFkZXIgPSBtYWtlaW50NjQob2Zmc2V0ICsgZWZfYnVmKTsKKy0gICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKEcuY3JlYy5yZWxhdGl2ZV9vZmZzZXRfbG9jYWxfaGVhZGVyKTsKKysgICAgICAgICAgICBvZmZzZXQgKz0gODsKKyAgICAgICAgICAgfQorLSAgICAgICAgICBpZiAoRy5jcmVjLmRpc2tfbnVtYmVyX3N0YXJ0ID09IDB4ZmZmZil7CisrCisrICAgICAgICAgIGlmIChHLmNyZWMuZGlza19udW1iZXJfc3RhcnQgPT0gWjY0RkxHUykKKysgICAgICAgICAgeworKyAgICAgICAgICAgIGlmIChvZmZzZXQrIDQgPiBlZl9sZW4pCisrICAgICAgICAgICAgICByZXR1cm4gUEtfRVJSOworKworICAgICAgICAgICAgIEcuY3JlYy5kaXNrX251bWJlcl9zdGFydCA9ICh6dXZsX3QpbWFrZWxvbmcob2Zmc2V0ICsgZWZfYnVmKTsKKy0gICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKEcuY3JlYy5kaXNrX251bWJlcl9zdGFydCk7CisrICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7CisgICAgICAgICAgIH0KKysjaWYgMAorKyAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgLyogRXhwZWN0IG9ubHkgb25lIEVGX1BLU1o2NCBibG9jay4gKi8KKysjZW5kaWYgLyogMCAqLworICAgICAgICAgfQorIAorLSAgICAgICAgLyogU2tpcCB0aGlzIGV4dHJhIGZpZWxkIGJsb2NrICovCisrICAgICAgICAvKiBTa2lwIHRoaXMgZXh0cmEgZmllbGQgYmxvY2suICovCisgICAgICAgICBlZl9idWYgKz0gKGViX2xlbiArIEVCX0hFQURTSVpFKTsKKyAgICAgICAgIGVmX2xlbiAtPSAoZWJfbGVuICsgRUJfSEVBRFNJWkUpOworICAgICB9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC9hdm9pZC1zdHJpcC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwL2F2b2lkLXN0cmlwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMzBlNDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC9hdm9pZC1zdHJpcC5wYXRjaApAQCAtMCwwICsxLDUwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKwordW5peC9NYWtlZmlsZTogcmVtb3ZlIGhhcmQgY29kZWQgc3RyaXAgY29tbWFuZHMKKworUmVtb3ZlIHRoZSBoYXJkIGNvZGVkIHN0cmlwIGNvbW1hbmRzLCBib3RoIExGMiAodXNlZCBpbiBsaW5raW5nKSBhbmQKK1NUUklQIHVzZWQgYWxvbmUuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtdXIgdW56aXA2MC5vcmlnL3VuaXgvY29uZmlndXJlIHVuemlwNjAvdW5peC9jb25maWd1cmUKKy0tLSB1bnppcDYwLm9yaWcvdW5peC9jb25maWd1cmUJMjAwOS0wNC0xNiAxNDoyNToxMi4wMDAwMDAwMDAgLTA1MDAKKysrKyB1bnppcDYwL3VuaXgvY29uZmlndXJlCTIwMTEtMDYtMjEgMTE6MjM6MzYuODIyODQ5OTYwIC0wNTAwCitAQCAtMTcsNyArMTcsNyBAQAorIElaX0JaSVAyPSR7M30KKyBDRkxBR1M9IiR7Q0ZMQUdTfSAtSS4gLURVTklYIgorIExGTEFHUzE9IiIKKy1MRkxBR1MyPSItcyIKKytMRkxBR1MyPSIiCisgTE49ImxuIC1zIgorIAorIENGTEFHU19PUFQ9JycKK2RpZmYgLXVyIHVuemlwNjAub3JpZy91bml4L01ha2VmaWxlIHVuemlwNjAvdW5peC9NYWtlZmlsZQorLS0tIHVuemlwNjAub3JpZy91bml4L01ha2VmaWxlCTIwMDktMDEtMTggMTY6NDE6MTguMDAwMDAwMDAwIC0wNjAwCisrKysgdW56aXA2MC91bml4L01ha2VmaWxlCTIwMTEtMDYtMjEgMTE6MTI6MjIuOTAwMDAzMzg4IC0wNTAwCitAQCAtNTIsNyArNTIsNyBAQAorIENGID0gJChDRkxBR1MpICQoQ0ZfTk9PUFQpCisgTEZMQUdTMSA9CisgTEYgPSAtbyB1bnppcCRFICQoTEZMQUdTMSkKKy1MRjIgPSAtcworK0xGMiA9IAorIAorICMgVW5aaXBTRlggZmxhZ3MKKyBTTCA9IC1vIHVuemlwc2Z4JEUgJChMRkxBR1MxKQorQEAgLTcwLDcgKzcwLDcgQEAKKyBDSE1PRCA9IGNobW9kCisgQklOUEVSTVMgPSA3NTUKKyBNQU5QRVJNUyA9IDY0NAorLVNUUklQID0gc3RyaXAKKytTVFJJUCA9CisgRSA9CisgTyA9IC5vCisgTSA9IHVuaXgKK0BAIC03NzYsNyArNzc2LDYgQEAKKyAjCisgZ2NjOgkJdW5peF9tYWtlCisgCSQoTUFLRSkgdW56aXBzIENDPWdjYyBMRD1nY2MgQ0ZMQUdTPSItTzMiIExGMj0iIgorLQkkKFNUUklQKSAkKFVOWklQUykKKyAKKyAjIEhldXJpa29uIEhLNjggKDY4MDEwKSwgVW5pUGx1cysgU3lzdGVtIFYgNS4wLCBHcmVlbiBIaWxscyBDLTY4MDAwCisgaGs2ODoJCXVuaXhfbWFrZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvZGVmaW5lLWxkZmxhZ3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC9kZWZpbmUtbGRmbGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTljNmUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvZGVmaW5lLWxkZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorUGFzcyBMREZMQUdTIHRvIHRoZSBsaW5rZXIgCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNaWtoYWlsIER1cm5ldiA8TWlraGFpbF9EdXJuZXZAbWVudG9yLmNvbT4KKworZGlmZiAtTmF1ciBvbGQvdW5peC9jb25maWd1cmUgbmV3L3VuaXgvY29uZmlndXJlCistLS0gb2xkL3VuaXgvY29uZmlndXJlCTIwMTQtMDEtMTMgMjE6NTk6MjcuMDAwMDAwMDAwICsxMTAwCisrKysgbmV3L3VuaXgvY29uZmlndXJlCTIwMTQtMDEtMTQgMTY6MzY6MDIuMDAwMDAwMDAwICsxMTAwCitAQCAtMTYsNyArMTYsNyBAQAorIENGTEFHU1I9JHtDRkxBR1N9CisgSVpfQlpJUDI9JHszfQorIENGTEFHUz0iJHtDRkxBR1N9IC1JLiAtRFVOSVgiCistTEZMQUdTMT0iIgorK0xGTEFHUzE9JHtMREZMQUdTfQorIExGTEFHUzI9IiIKKyBMTj0ibG4gLXMiCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC91bnppcC02LjBfb3ZlcmZsb3czLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC91bnppcC02LjBfb3ZlcmZsb3czLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEwYmZiYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwL3VuemlwLTYuMF9vdmVyZmxvdzMuZGlmZgpAQCAtMCwwICsxLDQ1IEBACitGcm9tIDE5MDA0MGViZmNmNTM5NWE2Y2NlZGVkZTJjYzkzNDNkMzRmMGExMDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBtYW5jaGEgPG1hbmNoYTEgQVQgem9obyBET1QgY29tPgorRGF0ZTogV2VkLCAxMSBGZWIgMjAxNQorU3ViamVjdDogSW5mby1aSVAgVW5aaXAgYnVmZmVyIG92ZXJmbG93CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworQnkgY2FyZWZ1bGx5IGNyYWZ0aW5nIGEgY29ycnVwdCBaSVAgYXJjaGl2ZSB3aXRoICJleHRyYSBmaWVsZHMiIHRoYXQKK3B1cnBvcnQgdG8gaGF2ZSBjb21wcmVzc2VkIGJsb2NrcyBsYXJnZXIgdGhhbiB0aGUgY29ycmVzcG9uZGluZwordW5jb21wcmVzc2VkIGJsb2NrcyBpbiBTVE9SRUQgbm8tY29tcHJlc3Npb24gbW9kZSwgYW4gYXR0YWNrZXIgY2FuCit0cmlnZ2VyIGEgaGVhcCBvdmVyZmxvdyB0aGF0IGNhbiByZXN1bHQgaW4gYXBwbGljYXRpb24gY3Jhc2ggb3IKK3Bvc3NpYmx5IGhhdmUgb3RoZXIgdW5zcGVjaWZpZWQgaW1wYWN0LgorCitUaGlzIHBhdGNoIGVuc3VyZXMgdGhhdCB3aGVuIGV4dHJhIGZpZWxkcyB1c2UgU1RPUkVEIG1vZGUsIHRoZQorImNvbXByZXNzZWQiIGFuZCB1bmNvbXByZXNzZWQgYmxvY2sgc2l6ZXMgbWF0Y2guCisKK1NpZ25lZC1vZmYtYnk6IG1hbmNoYSA8bWFuY2hhMSBBVCB6b2hvIERPVCBjb20+CistLS0KKyBleHRyYWN0LmMgfCAgICA4ICsrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorCistLS0gYS9leHRyYWN0LmMKKysrKyBiL2V4dHJhY3QuYworQEAgLTIyMTcsNiArMjIxNyw3IEBAIHN0YXRpYyBpbnQgdGVzdF9jb21wcl9lYihfX0dfXyBlYiwgZWJfc2kKKyAgICAgdWxnIGViX3Vjc2l6ZTsKKyAgICAgdWNoICplYl91Y3B0cjsKKyAgICAgaW50IHI7CisrICAgIHVzaCBtZXRob2Q7CisgCisgICAgIGlmIChjb21wcl9vZmZzZXQgPCA0KSAgICAgICAgICAgICAgICAvKiBmaWVsZCBpcyBub3QgY29tcHJlc3NlZDogKi8KKyAgICAgICAgIHJldHVybiBQS19PSzsgICAgICAgICAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgYW5kIHNpZ25hbCBPSyAqLworQEAgLTIyMjYsNiArMjIyNywxMyBAQCBzdGF0aWMgaW50IHRlc3RfY29tcHJfZWIoX19HX18gZWIsIGViX3NpCisgICAgICAgICAgZWJfc2l6ZSA8PSAoY29tcHJfb2Zmc2V0ICsgRUJfQ01QUkhFQURMRU4pKSkKKyAgICAgICAgIHJldHVybiBJWl9FRl9UUlVOQzsgICAgICAgICAgICAgICAvKiBubyBjb21wcmVzc2VkIGRhdGEhICovCisgCisrICAgIG1ldGhvZCA9IG1ha2V3b3JkKGViICsgKEVCX0hFQURTSVpFICsgY29tcHJfb2Zmc2V0KSk7CisrICAgIGlmICgobWV0aG9kID09IFNUT1JFRCkgJiYKKysgICAgICAgIChlYl9zaXplIC0gY29tcHJfb2Zmc2V0IC0gRUJfQ01QUkhFQURMRU4gIT0gZWJfdWNzaXplKSkKKysJcmV0dXJuIFBLX0VSUjsJCQkgIC8qIGNvbXByZXNzZWQgJiB1bmNvbXByZXNzZWQKKysJCQkJCSAgICogc2hvdWxkIG1hdGNoIGluIFNUT1JFRAorKwkJCQkJICAgKiBtZXRob2QgKi8KKysKKyAgICAgaWYgKAorICNpZmRlZiBJTlRfMTZCSVQKKyAgICAgICAgICgoKHVsZykoZXh0ZW50KWViX3Vjc2l6ZSkgIT0gZWJfdWNzaXplKSB8fApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXBfNi4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXBfNi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMGE3MTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcF82LjAuYmIKQEAgLTAsMCArMSw1MSBAQAorU1VNTUFSWSA9ICJVdGlsaXRpZXMgZm9yIGV4dHJhY3RpbmcgYW5kIHZpZXdpbmcgZmlsZXMgaW4gLnppcCBhcmNoaXZlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuaW5mby16aXAub3JnIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJCU0QtMy1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT05NGNhZWM1YTUxZWY1NWVmNzExZWU0ZThiMWM2OWUyOSIKK1BFID0gIjEiCitQUiA9ICJyNSIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuaW5mby16aXAub3JnL3B1Yi9pbmZvemlwL3NyYy91bnppcDYwLnRneiBcCisJZmlsZTovL2F2b2lkLXN0cmlwLnBhdGNoIFwKKwlmaWxlOi8vZGVmaW5lLWxkZmxhZ3MucGF0Y2ggXAorCWZpbGU6Ly8wNi11bnppcDYwLWFsdC1pY29udi11dGY4X0NWRS0yMDE1LTEzMTUucGF0Y2ggXAorCWZpbGU6Ly91bnppcC02LjBfb3ZlcmZsb3czLmRpZmYgXAorCWZpbGU6Ly8wOS1jdmUtMjAxNC04MTM5LWNyYy1vdmVyZmxvdy5wYXRjaCBcCisJZmlsZTovLzEwLWN2ZS0yMDE0LTgxNDAtdGVzdC1jb21wci1lYi5wYXRjaCBcCisJZmlsZTovLzExLWN2ZS0yMDE0LTgxNDEtZ2V0emlwNjRkYXRhLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjYyYjQ5MDQwNzQ4OTUyMWRiODYzYjUyM2E3Zjg2Mzc1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAzNmQ5Njk5MTY0NmQwNDQ5ZWQwYWE5NTJlNGZiZTIxYjQ3NmNlOTk0YWJjMjc2ZTQ5ZDMwZTY4NjcwOGJkMzciCitTID0gIiR7V09SS0RJUn0vdW56aXA2MCIKKworIyBNYWtlZmlsZSB1c2VzIENGX05PT1BUIGluc3RlYWQgb2YgQ0ZMQUdTLiAgV2UgbGlmdGVkIHRoZSB2YWx1ZXMgZnJvbQorIyBNYWtlZmlsZSBhbmQgYWRkIENGTEFHUy4gIE9wdGltaXphdGlvbiB3aWxsIGJlIG92ZXJyaWRlbiBieSB1bnppcAorIyBjb25maWd1cmUgdG8gYmUgLU8zLgorIworRVhUUkFfT0VNQUtFICs9ICJTVFJJUD10cnVlIExGMj0nJyBcCisgICAgICAgICAgICAgICAgJ0NGX05PT1BUPS1JLiAtSWJ6aXAyIC1EVU5JWCAke0NGTEFHU30nIgorCitleHBvcnQgTEQgPSAiJHtDQ30iCitMRF9jbGFzcy1uYXRpdmUgPSAiJHtDQ30iCisKK2RvX2NvbXBpbGUoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgLWYgdW5peC9NYWtlZmlsZSBnZW5lcmljCit9CisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgLWYgdW5peC9NYWtlZmlsZSBpbnN0YWxsIHByZWZpeD0ke0R9JHtwcmVmaXh9CisJaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9CisJbXYgJHtEfSR7cHJlZml4fS9tYW4vKiAke0R9JHttYW5kaXJ9CisJcm1kaXIgJHtEfSR7cHJlZml4fS9tYW4vCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gInVuemlwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3VuemlwXSA9ICIke2JpbmRpcn0vdW56aXAiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvZml4LXBpbmctZmFpbHVyZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL2ZpeC1waW5nLWZhaWx1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRhYjljNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL2ZpeC1waW5nLWZhaWx1cmUucGF0Y2gKQEAgLTAsMCArMSw3OSBAQAorRml4IHBpbmcgbW9kZSBmYWlsdXJlCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyAgCisKK1doZW4gd2F0Y2hkb2cgd29ya3Mgb24gcGluZyBtb2RlLCB0aGUgc3lzdGVtIHdpbGwgYmUgcmVib290ZWQgc2luY2UKK3dhdGNoZG9nIGNhbiBub3QgcmVjZWl2ZSB0aGUgZXhwZWN0ZWQgRUNPUkVQTFkgb24gYSBzZXR0aW5nIGludGVydmFsLgorCitQaW5nIG1vZGUgdXNlcyBhIHJhdyBzb2NrZXQgdG8gc2VuZCBhIEVDTyBwYWNrZXQsIHRoZW4gdXNlcyBzZWxlY3QoKQordG8gd2FpdCBhbmQgcmVjdmZyb20oKSB0byByZWNlaXZlIHRoZSBFQ09SRVBMWSBwYWNrZXQsIGlmIHNlbGVjdCgpCitzaG93cyB0aGUgZGF0YSBpcyByZWFkeSwgYW5kIHRoZSBkYXRhIGlzIG5vdCB0aGUgZXhwZWN0ZWQgRUNPUkVQTFksCithbmQgd2FpdGluZyB0aW1lIGlzIG5vdCBvdmVyZHVlLCBpdCB3aWxsIGNvbnRpbnVlIHVzZSBzZWxlY3QoKSBhbmQKK3JlY3Zmcm9tKCkuCisKK1Byb2JsZW0gaXMgdGhhdCB0aGUgcmF3IHNvY2tldCBjYW4gcmVjZWl2ZSBhbnkgaWNtcCBwYWNrZXRzLCBpZiB3ZSBkbworbm90IHNldCBmaWx0ZXJzLCBhbmQgdGhlcmUgYXJlIG1hbnkgaWNtcCBwYWNrZXRzIG9uIHNvY2tldCwgdGhpcworcHJvZ3JhbSB3aWxsIG5vdCBmaW5kIGl0cyBpbnRlcmVzdGVkIEVDT1JFUExZIHBhY2tldCBpbiBhIHNwZWNpYWwKK2ludGVydmFsLCB3aGljaCBtYWtlcyB0aGUgcGluZyBtb2RlIGZhaWwuCisKKworT3RoZXIgcHJvZ3JhbSBpcyB0aGF0IHdhdGNoZG9nIHNvbWV0aW1lIGNhbiBub3QgcmVhY2ggdGhlIGNhbGwgb2YKK3JlY3Zmcm9tIHRvIHRyeSB0byByZWNlaXZlIHBhY2tldHMgc2luY2UgdHZfc2VjIG9mIHN0cnVjdCB0aW1ldmFsCitvZiBzZWxlY3QgcGFyYW1ldGVyIGlzIDAuCisKK1RoZSB0aW1lb3V0IG9mIHNlbGVjdCgpIGlzIHRoZSByZXN1bHQgb2YgcGluZyBpbnRlcnZhbCBtaW51c2luZyB0aGUKK3RpbWUgb2YgY2FsbGluZyBnZXR0aW1lb2ZkYXkgc3BlbmRpbmcsIHdoZW4gcGluZyBpbnRlcnZhbCBpcyAxIHNlY29uZCwKK2FuZCB0aGUgY2FsbCBvZiBnZXR0aW1lb2ZkYXkoKSBzcGVuZHMgc2V2ZXJhbCB1c2Vjb25kcywgdGhlIHR2X3NlYyBvZgorc3RydWN0IHRpbWV2YWwgb2Ygc2VsZWN0IHBhcmFtZXRlciBtdXN0IGJlIDAsIGF0IHRoYXQgY29uZGl0aW9uLCB3ZQorc2hvdWxkIGl0IGlzIHZhbGlkIG9mIHR2X3NlYyBvZiBzdHJ1Y3QgdGltZXZhbCBvZiBzZWxlY3QgcGFyYW1ldGVyIGJlIDAgCisKK1NpZ25lZC1vZmYtYnk6IFJveS5MaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9uZXQuYyAgICAgIHwgICAgMiArLQorIHNyYy93YXRjaGRvZy5jIHwgICAgNSArKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitJbmRleDogd2F0Y2hkb2ctNS4xNC9zcmMvd2F0Y2hkb2cuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdhdGNoZG9nLTUuMTQub3JpZy9zcmMvd2F0Y2hkb2cuYworKysrIHdhdGNoZG9nLTUuMTQvc3JjL3dhdGNoZG9nLmMKK0BAIC0yNCw2ICsyNCw3IEBACisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyAjaW5jbHVkZSA8bGludXgvb29tLmg+CisrI2luY2x1ZGUgPGxpbnV4L2ljbXAuaD4KKyAjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgCitJbmRleDogd2F0Y2hkb2ctNS4xNC9zcmMvbmV0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3YXRjaGRvZy01LjE0Lm9yaWcvc3JjL25ldC5jCisrKysgd2F0Y2hkb2ctNS4xNC9zcmMvbmV0LmMKK0BAIC0xMSw3ICsxMSw4IEBACisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHN5cy90aW1lLmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KKy0jaW5jbHVkZSA8bmV0aW5ldC9pcF9pY21wLmg+CisrI2luY2x1ZGUgPGxpbnV4L2ljbXAuaD4KKysvLyNpbmNsdWRlIDxuZXRpbmV0L2lwX2ljbXAuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgkJLyogZm9yIGdldGhvc3RuYW1lKCkgZXRjICovCitAQCAtMTc5LDYgKzE4MCw5IEBAIGludCBvcGVuX25ldGNoZWNrKHN0cnVjdCBsaXN0ICp0bGlzdCkKKyB7CisgCXN0cnVjdCBsaXN0ICphY3Q7CisgCWludCBob2xkID0gMDsKKysJc3RydWN0IGljbXBfZmlsdGVyIGZpbHQ7CisrCWZpbHQuZGF0YSA9IH4oMTw8SUNNUF9FQ0hPUkVQTFkpOworKworIAorIAlpZiAodGxpc3QgIT0gTlVMTCkgeworIAkJZm9yIChhY3QgPSB0bGlzdDsgYWN0ICE9IE5VTEw7IGFjdCA9IGFjdC0+bmV4dCkgeworQEAgLTIwMiw2ICsyMDYsNyBAQCBpbnQgb3Blbl9uZXRjaGVjayhzdHJ1Y3QgbGlzdCAqdGxpc3QpCisgCQkJICAgIGZhdGFsX2Vycm9yKEVYX1NZU0VSUiwgImVycm9yIG9wZW5pbmcgc29ja2V0ICglcykiLCBzdHJlcnJvcihlcnJubykpOworIAkJCX0KKyAKKysJCQlzZXRzb2Nrb3B0KG5ldC0+c29ja19mcCwgU09MX1JBVywgSUNNUF9GSUxURVIsIChjaGFyKikmZmlsdCwgc2l6ZW9mKGZpbHQpKTsKKyAJCQkvKiB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IgYnJvYWRjYXN0IHBpbmdzIHRvIHdvcmsgKi8KKyAJCQkodm9pZClzZXRzb2Nrb3B0KG5ldC0+c29ja19mcCwgU09MX1NPQ0tFVCwgU09fQlJPQURDQVNULCAoY2hhciAqKSZob2xkLCBzaXplb2YoaG9sZCkpOworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvZml4c2VwYnVpbGQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy9maXhzZXBidWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmFkM2ExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvZml4c2VwYnVpbGQucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorRml4IG91dCBvZiB0cmVlIGJ1aWxkIHN1cHBvcnQ6CisKK3wgaW5zdGFsbGluZyAvZXRjL3dhdGNoZG9nLmNvbmYKK3wgIC9iaW4vbWtkaXIgLXAgJy9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvd2F0Y2hkb2cvNS4xMy1yMC9pbWFnZS91c3Ivc2hhcmUvbWFuL21hbjUnCit8ICAvYmluL21rZGlyIC1wICcvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dhdGNoZG9nLzUuMTMtcjAvaW1hZ2UvdXNyL3NoYXJlL21hbi9tYW44JworfCAgL3Vzci9iaW4vaW5zdGFsbCAtYyAtbSA2NDQgL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC93YXRjaGRvZy81LjEzLXIwL3dhdGNoZG9nLTUuMTMvd2F0Y2hkb2cuY29uZi41ICcvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dhdGNoZG9nLzUuMTMtcjAvaW1hZ2UvdXNyL3NoYXJlL21hbi9tYW41JworfCAgL3Vzci9iaW4vaW5zdGFsbCAtYyAtbSA2NDQgL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC93YXRjaGRvZy81LjEzLXIwL3dhdGNoZG9nLTUuMTMvd2F0Y2hkb2cuOCAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dhdGNoZG9nLzUuMTMtcjAvd2F0Y2hkb2ctNS4xMy93ZF9rZWVwYWxpdmUuOCAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dhdGNoZG9nLzUuMTMtcjAvd2F0Y2hkb2ctNS4xMy93ZF9pZGVudGlmeS44ICcvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dhdGNoZG9nLzUuMTMtcjAvaW1hZ2UvdXNyL3NoYXJlL21hbi9tYW44JworfCAvdXNyL2Jpbi9pbnN0YWxsOiBjYW5ub3Qgc3RhdCBgd2F0Y2hkb2cuY29uZic6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK3wgbWFrZVsyXTogKioqIFtpbnN0YWxsLWV0Yy1sb2NhbF0gRXJyb3IgMQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUlAgMjAxMy8wMy8yMQorCitJbmRleDogd2F0Y2hkb2ctNS4xMy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdhdGNoZG9nLTUuMTMub3JpZy9NYWtlZmlsZS5hbQkyMDEzLTAyLTAxIDExOjE1OjQ0LjAwMDAwMDAwMCArMDAwMAorKysrIHdhdGNoZG9nLTUuMTMvTWFrZWZpbGUuYW0JMjAxMy0wMy0yMSAxMTo1OTozNS42MzcxMzkwMzEgKzAwMDAKK0BAIC0xNiw3ICsxNiw3IEBACisgCWVsc2UgXAorIAkgICAgICAgIGVjaG8gImluc3RhbGxpbmcgJChDT05GSUdfRklMRU5BTUUpIjsgXAorIAkJJChta2luc3RhbGxkaXJzKSBgZGlybmFtZSAkKERFU1RESVIpJChDT05GSUdfRklMRU5BTUUpYDsgXAorLQkgICAgICAgICQoSU5TVEFMTF9EQVRBKSB3YXRjaGRvZy5jb25mICQoREVTVERJUikkKENPTkZJR19GSUxFTkFNRSk7IFwKKysJICAgICAgICAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL3dhdGNoZG9nLmNvbmYgJChERVNURElSKSQoQ09ORklHX0ZJTEVOQU1FKTsgXAorIAlmaQorIAorIGluc3RhbGwtZGF0YS1sb2NhbDogaW5zdGFsbC1ldGMtbG9jYWwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL3dhdGNoZG9nLWNvbmYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy93YXRjaGRvZy1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZjI5NjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy93YXRjaGRvZy1jb25mLnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKKy0tLSB3YXRjaGRvZy01LjEzLm9yaWcvd2F0Y2hkb2cuY29uZgkyMDEzLTAyLTAxIDEyOjE1OjQ0LjAwMDAwMDAwMCArMDEwMAorKysrIHdhdGNoZG9nLTUuMTMvd2F0Y2hkb2cuY29uZgkyMDE0LTExLTEzIDEwOjU5OjQzLjIzMzk0MzAwMCArMDEwMAorQEAgLTIwLDcgKzIwLDcgQEAKKyAjdGVzdC1iaW5hcnkJCT0gCisgI3Rlc3QtdGltZW91dAkJPSAKKyAKKy0jd2F0Y2hkb2ctZGV2aWNlCT0gL2Rldi93YXRjaGRvZworK3dhdGNoZG9nLWRldmljZQk9IC9kZXYvd2F0Y2hkb2cKKyAKKyAjIERlZmF1bHRzIGNvbXBpbGVkIGludG8gdGhlIGJpbmFyeQorICN0ZW1wZXJhdHVyZS1kZXZpY2UJPQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvd2F0Y2hkb2ctaW5pdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL3dhdGNoZG9nLWluaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZhOGVlOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL3dhdGNoZG9nLWluaXQucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorLS0tIHdhdGNoZG9nLTUuMTMub3JpZy9yZWRoYXQvd2F0Y2hkb2cuaW5pdAkyMDE0LTExLTEyIDE3OjE4OjM5LjEyNTk0MzAwMCArMDEwMAorKysrIHdhdGNoZG9nLTUuMTMvcmVkaGF0L3dhdGNoZG9nLmluaXQJMjAxNC0xMS0xMiAxODoyNzozNi4xODk5NDMwMDAgKzAxMDAKK0BAIC03LDcgKzcsNyBAQAorICMgICAgICAgICAgICAgICAgIEhlbm5pbmcgUC4gU2NobWllZGVoYXVzZW4gPGhwc0B0YW5zdGFhZmwuZGU+CisgCisgIyBTb3VyY2UgZnVuY3Rpb24gbGlicmFyeS4KKy0uIC9ldGMvcmMuZC9pbml0LmQvZnVuY3Rpb25zCisrLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKyAKKyBbIC14IC91c3Ivc2Jpbi93YXRjaGRvZyAtYSAtZSAvZXRjL3dhdGNoZG9nLmNvbmYgXSB8fCBleGl0IDAKKyAKK0BAIC0yMywyMiArMjMsMjIgQEAKKyAKKyBzdGFydCgpIHsKKyAKKy0JZWNobyAtbiAkIlN0YXJ0aW5nICRwcm9nOiAiCisrCWVjaG8gLW4gIlN0YXJ0aW5nICRwcm9nOiAiCisgCWlmIFsgLW4gIiQocGlkb2Zwcm9jICRwcm9nKSIgXTsgdGhlbgorLQkJZWNobyAtbiAkIiRwcm9nOiBhbHJlYWR5IHJ1bm5pbmciCistCQllY2hvX2ZhaWx1cmUKKysJCWVjaG8gLW4gIiRwcm9nOiBhbHJlYWR5IHJ1bm5pbmcgIgorKwkJZmFpbHVyZQorIAkJZWNobworIAkJcmV0dXJuIDEKKyAJZmkKKyAJaWYgWyAiJFZFUkJPU0UiID0gInllcyIgXTsgdGhlbgorLQkgICAgZGFlbW9uIC91c3Ivc2Jpbi8ke3Byb2d9IC12CisrCSAgICAvdXNyL3NiaW4vJHtwcm9nfSAtdgorIAllbHNlCistCSAgICBkYWVtb24gL3Vzci9zYmluLyR7cHJvZ30KKysJICAgIC91c3Ivc2Jpbi8ke3Byb2d9CisgICAgICAgICBmaQorIAlSRVRWQUw9JD8KKyAJWyAkUkVUVkFMIC1lcSAwIF0gJiYgdG91Y2ggJGxvY2tmaWxlCistCVsgJFJFVFZBTCAtZXEgMCBdICYmIGVjaG9fc3VjY2VzcworLQlbICRSRVRWQUwgLW5lIDAgXSAmJiBlY2hvX2ZhaWx1cmUKKysJWyAkUkVUVkFMIC1lcSAwIF0gJiYgc3VjY2VzcworKwlbICRSRVRWQUwgLW5lIDAgXSAmJiBmYWlsdXJlCisgCWVjaG8KKyAJcmV0dXJuICRSRVRWQUwKKyB9CitAQCAtNTAsOCArNTAsMTAgQEAKKyAJIyBhbmQgcmVib290IHRoZSBib3guCisgCWtpbGxwcm9jICRwcm9nIC1URVJNCisgCVJFVFZBTD0kPworLQllY2hvCisgCVsgJFJFVFZBTCAtZXEgMCBdICYmIHJtIC1mICRsb2NrZmlsZSAkcGlkZmlsZQorKwlbICRSRVRWQUwgLWVxIDAgXSAmJiBzdWNjZXNzCisrCVsgJFJFVFZBTCAtbmUgMCBdICYmIGZhaWx1cmUKKysJZWNobworIAlyZXR1cm4gJFJFVFZBTAorIH0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nXzUuMTQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZ181LjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYzBhOGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZ181LjE0LmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiU29mdHdhcmUgd2F0Y2hkb2ciCitERVNDUklQVElPTiA9ICJXYXRjaGRvZyBpcyBhIGRhZW1vbiB0aGF0IGNoZWNrcyBpZiB5b3VyIHN5c3RlbSBpcyBzdGlsbCBcCit3b3JraW5nLiBJZiBwcm9ncmFtcyBpbiB1c2VyIHNwYWNlIGFyZSBub3QgbG9uZ2VyIGV4ZWN1dGVkIFwKK2l0IHdpbGwgcmVib290IHRoZSBzeXN0ZW0uIgorSE9NRVBBR0UgPSAiaHR0cDovL3dhdGNoZG9nLnNvdXJjZWZvcmdlLm5ldC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MTcyMDMwJmF0aWQ9ODYwMTk0IgorCitMSUNFTlNFID0gIkdQTC0yLjArIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWNjMDU1MWJmNTRhZDk3ZjZiNTQxNzIwZjg0ZDY1NjkiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3dhdGNoZG9nL3dhdGNoZG9nLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXhzZXBidWlsZC5wYXRjaCBcCisJICAgZmlsZTovL2ZpeC1waW5nLWZhaWx1cmUucGF0Y2ggXAorCSAgIGZpbGU6Ly93YXRjaGRvZy1pbml0LnBhdGNoIFwKKwkgICBmaWxlOi8vd2F0Y2hkb2ctY29uZi5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjViMmRiYTBjNTkzOTQyZjRhY2MxMDBiY2EwZDU2MGM0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYyMGIyZjQ5ZTk4NzlmMmU4NWM3M2Q0YzFmNDIyZjkxMDFlNmIzOGU4MjRmZWEyNDE0YmVmZDhiYjY4NjZhZDEiCisKK2luaGVyaXQgYXV0b3Rvb2xzCitpbmhlcml0IHVwZGF0ZS1yYy5kCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJ3YXRjaGRvZy5zaCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDE1IDEgMiAzIDQgNSAuIHN0b3AgODUgMCA2IC4iCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gImtlcm5lbC1tb2R1bGUtc29mdGRvZyIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtRCAke1N9L3JlZGhhdC93YXRjaGRvZy5pbml0ICR7RH0vJHtzeXNjb25mZGlyfS9pbml0LmQvd2F0Y2hkb2cuc2gKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0OWI4OTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXQuaW5jCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiQ29uc29sZSBVUkwgZG93bmxvYWQgdXRpbGl0eSBzdXBwb3J0aW5nIEhUVFAsIEZUUCwgZXRjIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS93Z2V0LyIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorREVQRU5EUyA9ICJnbnV0bHMgemxpYiBsaWJwY3JlIgorCitJTkNfUFIgPSAicjE2IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLWlwdjYgLS13aXRoLXNzbD1nbnV0bHMgLS1kaXNhYmxlLXJwYXRoIC0tZGlzYWJsZS1pcmkgXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1saWJnbnV0bHMtcHJlZml4IGFjX2N2X2hlYWRlcl91dWlkX3V1aWRfaD1ubyIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAid2dldCIKK0FMVEVSTkFUSVZFXyR7UE59X2NsYXNzLW5hdGl2ZXNkayA9ICIiCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICJjYS1jZXJ0aWZpY2F0ZXMiCisKK0JCQ0xBU1NFWFRFTkQgKz0gIm5hdGl2ZXNkayIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbbGlidXVpZF0gPSAiLS13aXRoLWxpYnV1aWQsIC0td2l0aG91dC1saWJ1dWlkLHV0aWwtbGludXgiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXQvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiM2M2ZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXQvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiB3Z2V0LTEuMTYuMy9saWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3Z2V0LTEuMTYuMy5vcmlnL2xpYi9NYWtlZmlsZS5hbQorKysrIHdnZXQtMS4xNi4zL2xpYi9NYWtlZmlsZS5hbQorQEAgLTg0Niw3ICs4NDYsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0L2ZpeF9tYWtlZmlsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldC9maXhfbWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFhMmU3ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldC9maXhfbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogd2dldC0xLjEyL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdnZXQtMS4xMi5vcmlnL2NvbmZpZ3VyZS5hYwkyMDA5LTA5LTIyIDA5OjM5OjQ5LjAwMDAwMDAwMCAtMDcwMAorKysrIHdnZXQtMS4xMi9jb25maWd1cmUuYWMJMjAxMS0xMC0xOSAyMDozMjo1My43MTQ4MTIxNjAgLTA3MDAKK0BAIC0xNzcsNyArMTc3LDcgQEAKKyBkbmwgR2V0dGV4dAorIGRubAorIEFNX0dOVV9HRVRURVhUKFtleHRlcm5hbF0sW25lZWQtbmdldHRleHRdKQorLUFNX0dOVV9HRVRURVhUX1ZFUlNJT04oWzAuMTddKQorK0FNX0dOVV9HRVRURVhUX1ZFUlNJT04oWzAuMThdKQorIAorIEFDX1BST0dfUkFOTElCCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXRfMS4xNi4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0XzEuMTYuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzM0YTQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0XzEuMTYuMy5iYgpAQCAtMCwwICsxLDkgQEAKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS93Z2V0L3dnZXQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9tYWtlZmlsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmNjFkOTAxMWI5OWY4MjQxMDZhNWQ1YTA1ZGQwZjYzZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZjFjNmQwOWQ3MTQ4YzFjMmQ5ZmQwZWE2NTVkY2Y0ZGNjNDA3ZGViMmRiMzJkNDEyNjI1MWNhMDI0NWNiNjcwIgorCityZXF1aXJlIHdnZXQuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaC0yLjE4L2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaC0yLjE4L2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk1Y2RjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoLTIuMTgvYXV0b21ha2UtZm9yZWlnbi5wYXRjaApAQCAtMCwwICsxLDI4IEBACitTdWJqZWN0OiBbUEFUQ0hdIGF1dG9tYWtlIGZvcmVpZ24gc3RyaWN0bmVzcworCitVc2UgZm9yZWlnbiBzdHJpY3RuZXNzIHRvIGF2b2lkIGF1dG9tYWtlIGVycm9ycy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBubyBsb25nZXIgYWN0aXZlXQorCitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgICAgNSArKystLQorIDEgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiMzBiNmY1Li5iZDMyMjJjIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xLDYgKzEsNyBAQAorIGRubCBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgorLUFDX0lOSVQod2hpY2guYykKKy1BTV9JTklUX0FVVE9NQUtFKHdoaWNoLCAyLjE4KQorK0FDX0lOSVQoW3doaWNoXSxbMi4xOF0pCisrQUNfQ09ORklHX1NSQ0RJUih3aGljaC5jKQorK0FNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ25dKQorIEFNX0NPTkZJR19IRUFERVIoY29uZmlnLmgpCisgQU1fTUFJTlRBSU5FUl9NT0RFCisgCistLSAKKzEuNy4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoLTIuMTgvZml4X25hbWVfY29uZmxpY3RfZ3JvdXBfbWVtYmVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2gtMi4xOC9maXhfbmFtZV9jb25mbGljdF9ncm91cF9tZW1iZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI5YjFhNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoLTIuMTgvZml4X25hbWVfY29uZmxpY3RfZ3JvdXBfbWVtYmVyLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdGhpcyBpcyAyLjE4KEdQTHYyKSBzcGVjaWZpY10KKworIyBnbGliYyBhbHNvIGltcGxlbWVudHMgdGhlIGZ1bmN0aW9uIGdyb3VwX21lbWJlci4gVG8gYXZvaWQgbmFtZSBjb25mbGljdCwKKyMgaGVyZSBsZXQgdXMgYXBwZW5kIGEgIl8iIHRvIHdoaWNoJ3MgdmVyc2lvbi4KKyMKKyMgU2lnbmVkLW9mZi1ieSBEZXh1YW4gQ3VpIDxkZXh1YW4uY3VpQGludGVsLmNvbT4sIDIwMTAtMDgtMjAKKyMgKHRoaXMgcGF0Y2ggaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIpCisKKy0tLSB3aGljaC0yLjE4L2Jhc2guYworKysrIHdoaWNoLTIuMTgvYmFzaC5jCitAQCAtNDUsNyArNDUsMTIgQEAKKyAgKiAtIGNoYW5nZWQgYWxsIG9jY3VyZW5jZXMgb2YgJ2dpZF90JyBpbnRvICdHSURfVCcuCisgICogLSBleHBvcnRlZCBmdW5jdGlvbnMgbmVlZGVkIGluIHdoaWNoLmMKKyAgKi8KKy1zdGF0aWMgaW50IGdyb3VwX21lbWJlciAoR0lEX1QgZ2lkKTsKKysKKysvKgorKyAqIGdsaWJjIGFsc28gaW1wbGVtZW50cyB0aGUgZnVuY3Rpb24gZ3JvdXBfbWVtYmVyLiBUbyBhdm9pZCBuYW1lIGNvbmZsaWN0LAorKyAqIGhlcmUgbGV0IHVzIGFwcGVuZCBhICJfIiB0byB3aGljaCdzIHZlcnNpb24uCisrICovCisrc3RhdGljIGludCBfZ3JvdXBfbWVtYmVyIChHSURfVCBnaWQpOworIHN0YXRpYyBjaGFyKiBleHRyYWN0X2NvbG9uX3VuaXQgKGNoYXIgY29uc3QqIHN0cmluZywgaW50ICpwX2luZGV4KTsKKyAKKyAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQEAgLTIwMCw4ICsyMDUsOCBAQAorIAorIC8qIEZyb20gYmFzaC0yLjA1YiAvIGdlbmVyYWwuYyAvIGxpbmUgODA1ICovCisgLyogUmV0dXJuIG5vbi16ZXJvIGlmIEdJRCBpcyBvbmUgdGhhdCB3ZSBoYXZlIGluIG91ciBncm91cHMgbGlzdC4gKi8KKy1pbnQKKy1ncm91cF9tZW1iZXIgKEdJRF9UIGdpZCkKKytzdGF0aWMgaW50CisrX2dyb3VwX21lbWJlciAoR0lEX1QgZ2lkKQorIHsKKyAjaWYgZGVmaW5lZCAoSEFWRV9HRVRHUk9VUFMpCisgICByZWdpc3RlciBpbnQgaTsKK0BAIC0yOTAsNyArMjk1LDcgQEAKKyAgICAgcmV0dXJuIChYX0JJVCAodV9tb2RlX2JpdHMgKGZpbmZvLnN0X21vZGUpKSkgPyAoRlNfRVhJU1RTIHwgRlNfRVhFQ0FCTEUpIDogRlNfRVhJU1RTOworIAorICAgLyogT3RoZXJ3aXNlLCBpZiB3ZSBhcmUgaW4gdGhlIG93bmluZyBncm91cCwgdGhlIGdyb3VwIHBlcm1pc3Npb25zIGFwcGx5LiAqLworLSAgaWYgKGdyb3VwX21lbWJlciAoZmluZm8uc3RfZ2lkKSkKKysgIGlmIChfZ3JvdXBfbWVtYmVyIChmaW5mby5zdF9naWQpKQorICAgICByZXR1cm4gKFhfQklUIChnX21vZGVfYml0cyAoZmluZm8uc3RfbW9kZSkpKSA/IChGU19FWElTVFMgfCBGU19FWEVDQUJMRSkgOiBGU19FWElTVFM7CisgCisgICAvKiBPdGhlcndpc2UsIGlmIHdlIGFyZSBpbiB0aGUgb3RoZXIgZ3JvdXAsIHRoZSBvdGhlciBwZXJtaXNzaW9ucyBhcHBseS4gKi8KK0BAIC0zMzEsNyArMzM2LDcgQEAKKyAvKiBHaXZlbiBhIHN0cmluZyBjb250YWluaW5nIHVuaXRzIG9mIGluZm9ybWF0aW9uIHNlcGFyYXRlZCBieSBjb2xvbnMsCisgICAgcmV0dXJuIHRoZSBuZXh0IG9uZSBwb2ludGVkIHRvIGJ5IChQX0lOREVYKSwgb3IgTlVMTCBpZiB0aGVyZSBhcmUgbm8gbW9yZS4KKyAgICBBZHZhbmNlIChQX0lOREVYKSB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBjb2xvbi4gKi8KKy1jaGFyKgorK3N0YXRpYyBjaGFyKgorIGV4dHJhY3RfY29sb25fdW5pdCAoY2hhciBjb25zdCogc3RyaW5nLCBpbnQqIHBfaW5kZXgpCisgeworICAgaW50IGksIHN0YXJ0LCBsZW47CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaC0yLjIxL2F1dG9tYWtlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2gtMi4yMS9hdXRvbWFrZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDBmMmU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2gtMi4yMS9hdXRvbWFrZS5wYXRjaApAQCAtMCwwICsxLDE5IEBACitVcGRhdGUgYXV0b2NvbmYgcHJvbG9ndWUgdG8gdXNlICJmb3JlaWduIiBzdHJpY3RuZXNzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGQ5NzQ0NjEuLmEyMGRmYTggMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEsNyArMSw3IEBACisgZG5sIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCisgQUNfSU5JVChbd2hpY2hdLCBbMi4yMV0pCisgQUNfQ09ORklHX1NSQ0RJUih3aGljaC5jKQorLUFNX0lOSVRfQVVUT01BS0UKKytBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKKyBBTV9DT05GSUdfSEVBREVSKGNvbmZpZy5oKQorIEFNX01BSU5UQUlORVJfTU9ERQorIAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaF8yLjE4LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2hfMi4xOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjZjYzk5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2hfMi4xOC5iYgpAQCAtMCwwICsxLDM0IEBACitTVU1NQVJZID0gIkRpc3BsYXlzIHRoZSBmdWxsIHBhdGggb2Ygc2hlbGwgY29tbWFuZHMiCitERVNDUklQVElPTiA9ICJXaGljaCBpcyBhIHV0aWxpdHkgdGhhdCBwcmludHMgb3V0IHRoZSBmdWxsIHBhdGggb2YgdGhlIFwKK2V4ZWN1dGFibGVzIHRoYXQgYmFzaCgxKSB3b3VsZCBleGVjdXRlIHdoZW4gdGhlIHBhc3NlZCBcCitwcm9ncmFtIG5hbWVzIHdvdWxkIGhhdmUgYmVlbiBlbnRlcmVkIG9uIHRoZSBzaGVsbCBwcm9tcHQuIFwKK0l0IGRvZXMgdGhpcyBieSB1c2luZyB0aGUgZXhhY3Qgc2FtZSBhbGdvcml0aG0gYXMgYmFzaC4iCitTRUNUSU9OID0gImxpYnMiCitIT01FUEFHRSA9ICJodHRwOi8vY2FybG8xNy5ob21lLnhzNGFsbC5ubC93aGljaC8iCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCisKK1BSID0gInIyIgorCitTUkNfVVJJID0gImh0dHA6Ly9wa2dzLmZlZG9yYXByb2plY3Qub3JnL3JlcG8vcGtncy93aGljaC93aGljaC0yLjE4LnRhci5nei80MmQ1MTkzOGU0OGI5MWY2ZTE5ZmFiZjIxNmY1YzNlOS93aGljaC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4X25hbWVfY29uZmxpY3RfZ3JvdXBfbWVtYmVyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDJkNTE5MzhlNDhiOTFmNmUxOWZhYmYyMTZmNWMzZTkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTQ0NWNkN2UwMmVjMGMyNmE0NGZkNTYwOTg0NjRkZWQwNjRiYTVkOTNkZDJlMTVlYzEyNDEwYmE1NmIyZTU0NCIKKworREVQRU5EUyA9ICJjd2F1dG9tYWNyb3MtbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJT0xEPSJAQUNMT0NBTF9DV0ZMQUdTQCIKKwlORVc9Ii1JICR7U1RBR0lOR19ESVJfTkFUSVZFfS8ke2RhdGFkaXJ9L2N3YXV0b21hY3Jvcy9tNCIKKwlzZWQgLWkgInMjJHtPTER9IyR7TkVXfSNnIiBgZ3JlcCAtcmwgJHtPTER9ICR7U31gCit9CisKK0FMVEVSTkFUSVZFXyR7UE59ID0gIndoaWNoIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaF8yLjIxLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2hfMi4yMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzY4N2Y2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2hfMi4yMS5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIkRpc3BsYXlzIHRoZSBmdWxsIHBhdGggb2Ygc2hlbGwgY29tbWFuZHMiCitERVNDUklQVElPTiA9ICJXaGljaCBpcyBhIHV0aWxpdHkgdGhhdCBwcmludHMgb3V0IHRoZSBmdWxsIHBhdGggb2YgdGhlIFwKK2V4ZWN1dGFibGVzIHRoYXQgYmFzaCgxKSB3b3VsZCBleGVjdXRlIHdoZW4gdGhlIHBhc3NlZCBcCitwcm9ncmFtIG5hbWVzIHdvdWxkIGhhdmUgYmVlbiBlbnRlcmVkIG9uIHRoZSBzaGVsbCBwcm9tcHQuIFwKK0l0IGRvZXMgdGhpcyBieSB1c2luZyB0aGUgZXhhY3Qgc2FtZSBhbGdvcml0aG0gYXMgYmFzaC4iCitTRUNUSU9OID0gImxpYnMiCitIT01FUEFHRSA9ICJodHRwOi8vY2FybG8xNy5ob21lLnhzNGFsbC5ubC93aGljaC8iCisKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDRcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly93aGljaC5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTc7bWQ1PWE5OTYzNjkzYWYyMjcyZTdhOGRmNmYyMzExNjRlN2EyIgorREVQRU5EUyAgICAgPSAiY3dhdXRvbWFjcm9zLW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK1BSID0gInIzIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWliZXJ0eSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3doaWNoL3doaWNoLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9hdXRvbWFrZS5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjA5N2ZmMWEzMjRhZTAyZTBhM2IwMzY5ZjA3YTc1NDRhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY0YTI0NWI5NDEyNGIzNzdkOGI0OTY0NmJmNDIxZjkxNTVkMzZhYTc2MTRiNmViZjgzNzA1ZDNmZmM3NmVhYWQiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCXNlZCAtaSAtZSAncyVAQUNMT0NBTF9DV0ZMQUdTQCUtSSAke1NUQUdJTkdfRElSX05BVElWRX0vdXNyL3NoYXJlL2N3YXV0b21hY3Jvcy9tNCVnJyAke1N9L01ha2VmaWxlLmFtICR7U30vdGlsZGUvTWFrZWZpbGUuYW0KK30KKworQUxURVJOQVRJVkVfJHtQTn0gPSAid2hpY2giCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94ZGctdXRpbHMveGRnLXV0aWxzLzAwMDEtUmVpbnN0YXRlLXhkZy10ZXJtaW5hbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hkZy11dGlscy94ZGctdXRpbHMvMDAwMS1SZWluc3RhdGUteGRnLXRlcm1pbmFsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZDFiYWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94ZGctdXRpbHMveGRnLXV0aWxzLzAwMDEtUmVpbnN0YXRlLXhkZy10ZXJtaW5hbC5wYXRjaApAQCAtMCwwICsxLDY3MiBAQAorRnJvbSAxNzRhYTcyMDZmNGIzMDhkNGQyMjkyYmI4MDY3YTA3ZDhjYzcxNWMwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK0RhdGU6IFR1ZSwgMjkgQXByIDIwMTQgMDc6Mjk6MzIgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gUmVpbnN0YXRlIHhkZy10ZXJtaW5hbAorCitTaWduZWQtb2ZmLWJ5OiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW1JldmVydF0KKy0tLQorIHNjcmlwdHMvTWFrZWZpbGUuaW4gIHwgICA2ICstCisgc2NyaXB0cy94ZGctdGVybWluYWwgfCA2MjIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA2MjUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA3NTUgc2NyaXB0cy94ZGctdGVybWluYWwKKworZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUuaW4gYi9zY3JpcHRzL01ha2VmaWxlLmluCitpbmRleCAyYzdkMmFjLi5iZWYxMGQxIDEwMDY0NAorLS0tIGEvc2NyaXB0cy9NYWtlZmlsZS5pbgorKysrIGIvc2NyaXB0cy9NYWtlZmlsZS5pbgorQEAgLTIwLDExICsyMCwxMSBAQCBTQ1JJUFRTCQk9IFwKKyAgICAgeGRnLW9wZW4gXAorICAgICB4ZGctZW1haWwgXAorICAgICB4ZGctc2NyZWVuc2F2ZXIgXAorLSAgICB4ZGctc2V0dGluZ3MKKysgICAgeGRnLXNldHRpbmdzIFwKKysgICAgeGRnLXRlcm1pbmFsCisgIyAgICB4ZGctc3UKKyAjICAgIHhkZy1jb3B5IFwKKyAjICAgIHhkZy1maWxlLWRpYWxvZworLSMgICAgeGRnLXRlcm1pbmFsCisgCisgTUFOUEFHRVM9CSQoU0NSSVBUUzolPW1hbi8lLjEpCisgV0VCUEFHRVM9CSQoU0NSSVBUUzolPSUuaHRtbCkKK0BAIC00Miw3ICs0Miw3IEBAIHJlbGVhc2U6CXNjcmlwdHMgaHRtbCBtYW4KKyAJcm0gLWYgeGRnLSouaW4gKn4gSEFDS0lORyBnZW5lcmF0ZS1oZWxwLXNjcmlwdC5hd2sKKyAJcm0gLXJmIGRlc2MvCisgCXJtIC1yZiB4c2wvCistCXJtIC1mIHhkZy1maWxlLWRpYWxvZyB4ZGctc3UgeGRnLWNvcHkgeGRnLXRlcm1pbmFsCisrCXJtIC1mIHhkZy1maWxlLWRpYWxvZyB4ZGctc3UgeGRnLWNvcHkKKyAKKyBkaXN0Y2xlYW46IGNsZWFuCisgCXJtIC1mIE1ha2VmaWxlCitkaWZmIC0tZ2l0IGEvc2NyaXB0cy94ZGctdGVybWluYWwgYi9zY3JpcHRzL3hkZy10ZXJtaW5hbAorbmV3IGZpbGUgbW9kZSAxMDA3NTUKK2luZGV4IDAwMDAwMDAuLjRiZDkyMDUKKy0tLSAvZGV2L251bGwKKysrKyBiL3NjcmlwdHMveGRnLXRlcm1pbmFsCitAQCAtMCwwICsxLDYyMiBAQAorKyMhL2Jpbi9zaAorKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjICAgeGRnLXRlcm1pbmFsCisrIworKyMgICBVdGlsaXR5IHNjcmlwdCB0byBvcGVuIHRoZSByZWdpc3RlcmVkIHRlcm1pbmFsIGVtdWxhdG9yCisrIworKyMgICBSZWZlciB0byB0aGUgdXNhZ2UoKSBmdW5jdGlvbiBiZWxvdyBmb3IgdXNhZ2UuCisrIworKyMgICBDb3B5cmlnaHQgMjAwOS0yMDEwLCBGYXRoaSBCb3VkcmEgPGZhYm9AZnJlZWRlc2t0b3Aub3JnPgorKyMgICBDb3B5cmlnaHQgMjAwOS0yMDEwLCBSZXggRGlldGVyIDxyZGlldGVyQGZlZG9yYXByb2plY3Qub3JnPgorKyMgICBDb3B5cmlnaHQgMjAwNiwgS2V2aW4gS3JhbW1lciA8a2V2aW4ua3JhbW1lckBnbXguYXQ+CisrIworKyMgICBMSUNFTlNFOgorKyMKKysjICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKysjICAgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKysjICAgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorKyMgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKysjICAgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisrIyAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrIworKyMgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorKyMgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysjCisrIyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCisrIyAgIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorKyMgICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorKyMgICBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorKyMgICBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKysjICAgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisrIyAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKysjCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworK21hbnVhbHBhZ2UoKQorK3sKKytjYXQgPDwgX01BTlVBTFBBR0UKKytOYW1lCisrCisrICAgeGRnLXRlcm1pbmFsIC0gb3BlbnMgdGhlIHVzZXIncyBwcmVmZXJyZWQgdGVybWluYWwgZW11bGF0b3IgYXBwbGljYXRpb24KKysKKytTeW5vcHNpcworKworKyAgIHhkZy10ZXJtaW5hbCBbY29tbWFuZF0KKysKKysgICB4ZGctdGVybWluYWwgeyAtLWhlbHAgfCAtLW1hbnVhbCB8IC0tdmVyc2lvbiB9CisrCisrRGVzY3JpcHRpb24KKysKKysgICB4ZGctdGVybWluYWwgb3BlbnMgdGhlIHVzZXIncyBwcmVmZXJyZWQgdGVybWluYWwgZW11bGF0b3IgYXBwbGljYXRpb24uIElmCisrICAgYSBjb21tYW5kIGlzIHByb3ZpZGVkIHRoZSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgYnkgdGhlIHNoZWxsIHdpdGhpbiB0aGUKKysgICBuZXdseSBvcGVuZWQgdGVybWluYWwgd2luZG93LgorKworKyAgIHhkZy10ZXJtaW5hbCBpcyBmb3IgdXNlIGluc2lkZSBhIGRlc2t0b3Agc2Vzc2lvbiBvbmx5LiBJdCBpcyBub3QKKysgICByZWNvbW1lbmRlZCB0byB1c2UgeGRnLXRlcm1pbmFsIGFzIHJvb3QuCisrCisrT3B0aW9ucworKworKyAgIC0taGVscAorKyAgICAgICAgICAgU2hvdyBjb21tYW5kIHN5bm9wc2lzLgorKworKyAgIC0tbWFudWFsCisrICAgICAgICAgICBTaG93IHRoaXMgbWFudWFsIHBhZ2UuCisrCisrICAgLS12ZXJzaW9uCisrICAgICAgICAgICBTaG93IHRoZSB4ZGctdXRpbHMgdmVyc2lvbiBpbmZvcm1hdGlvbi4KKysKKytFeGl0IENvZGVzCisrCisrICAgQW4gZXhpdCBjb2RlIG9mIDAgaW5kaWNhdGVzIHN1Y2Nlc3Mgd2hpbGUgYSBub24temVybyBleGl0IGNvZGUgaW5kaWNhdGVzCisrICAgZmFpbHVyZS4gVGhlIGZvbGxvd2luZyBmYWlsdXJlIGNvZGVzIGNhbiBiZSByZXR1cm5lZDoKKysKKysgICAxCisrICAgICAgICAgICBFcnJvciBpbiBjb21tYW5kIGxpbmUgc3ludGF4LgorKworKyAgIDMKKysgICAgICAgICAgIEEgcmVxdWlyZWQgdG9vbCBjb3VsZCBub3QgYmUgZm91bmQuCisrCisrICAgNAorKyAgICAgICAgICAgVGhlIGFjdGlvbiBmYWlsZWQuCisrCisrRXhhbXBsZXMKKysKKysgeGRnLXRlcm1pbmFsCisrCisrICAgT3BlbnMgdGhlIHVzZXIncyBkZWZhdWx0IHRlcm1pbmFsIGVtdWxhdG9yLCBqdXN0IHN0YXJ0aW5nIGFuIGludGVyYWN0aXZlCisrICAgc2hlbGwuCisrCisrIHhkZy10ZXJtaW5hbCB0b3AKKysKKysgICBPcGVucyB0aGUgdXNlcidzIGRlZmF1bHQgdGVybWluYWwgZW11bGF0b3IgYW5kIGxldHMgaXQgcnVuIHRoZSB0b3AKKysgICBleGVjdXRhYmxlLgorK19NQU5VQUxQQUdFCisrfQorKworK3VzYWdlKCkKKyt7CisrY2F0IDw8IF9VU0FHRQorKyAgIHhkZy10ZXJtaW5hbCAtIG9wZW5zIHRoZSB1c2VyJ3MgcHJlZmVycmVkIHRlcm1pbmFsIGVtdWxhdG9yIGFwcGxpY2F0aW9uCisrCisrU3lub3BzaXMKKysKKysgICB4ZGctdGVybWluYWwgW2NvbW1hbmRdCisrCisrICAgeGRnLXRlcm1pbmFsIHsgLS1oZWxwIHwgLS1tYW51YWwgfCAtLXZlcnNpb24gfQorKworK19VU0FHRQorK30KKysKKysjQHhkZy11dGlscy1jb21tb25ACisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjICAgQ29tbW9uIHV0aWxpdHkgZnVuY3Rpb25zIGluY2x1ZGVkIGluIGFsbCBYREcgd3JhcHBlciBzY3JpcHRzCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKKytERUJVRygpCisreworKyAgWyAteiAiJHtYREdfVVRJTFNfREVCVUdfTEVWRUx9IiBdICYmIHJldHVybiAwOworKyAgWyAke1hER19VVElMU19ERUJVR19MRVZFTH0gLWx0ICQxIF0gJiYgcmV0dXJuIDA7CisrICBzaGlmdAorKyAgZWNobyAiJEAiID4mMgorK30KKysKKysjIFRoaXMgaGFuZGxlcyBiYWNrc2xhc2hlcyBidXQgbm90IHF1b3RlIG1hcmtzLgorK2ZpcnN0X3dvcmQoKQorK3sKKysgICAgcmVhZCBmaXJzdCByZXN0CisrICAgIGVjaG8gIiRmaXJzdCIKKyt9CisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIG1hcCBhIGJpbmFyeSB0byBhIC5kZXNrdG9wIGZpbGUKKytiaW5hcnlfdG9fZGVza3RvcF9maWxlKCkKKyt7CisrICAgIHNlYXJjaD0iJHtYREdfREFUQV9IT01FOi0kSE9NRS8ubG9jYWwvc2hhcmV9OiR7WERHX0RBVEFfRElSUzotL3Vzci9sb2NhbC9zaGFyZTovdXNyL3NoYXJlfSIKKysgICAgYmluYXJ5PSJgd2hpY2ggIiQxImAiCisrICAgIGJpbmFyeT0iYHJlYWRsaW5rIC1mICIkYmluYXJ5ImAiCisrICAgIGJhc2U9ImBiYXNlbmFtZSAiJGJpbmFyeSJgIgorKyAgICBJRlM9OgorKyAgICBmb3IgZGlyIGluICRzZWFyY2g7IGRvCisrICAgICAgICB1bnNldCBJRlMKKysgICAgICAgIFsgIiRkaXIiIF0gfHwgY29udGludWUKKysgICAgICAgIFsgLWQgIiRkaXIvYXBwbGljYXRpb25zIiBdIHx8IFsgLWQgIiRkaXIvYXBwbG5rIiBdIHx8IGNvbnRpbnVlCisrICAgICAgICBmb3IgZmlsZSBpbiAiJGRpciIvYXBwbGljYXRpb25zLyouZGVza3RvcCAiJGRpciIvYXBwbGljYXRpb25zLyovKi5kZXNrdG9wICIkZGlyIi9hcHBsbmsvKi5kZXNrdG9wICIkZGlyIi9hcHBsbmsvKi8qLmRlc2t0b3A7IGRvCisrICAgICAgICAgICAgWyAtciAiJGZpbGUiIF0gfHwgY29udGludWUKKysgICAgICAgICAgICAjIENoZWNrIHRvIG1ha2Ugc3VyZSBpdCdzIHdvcnRoIHRoZSBwcm9jZXNzaW5nLgorKyAgICAgICAgICAgIGdyZXAgLXEgIl5FeGVjLiokYmFzZSIgIiRmaWxlIiB8fCBjb250aW51ZQorKyAgICAgICAgICAgICMgTWFrZSBzdXJlIGl0J3MgYSB2aXNpYmxlIGRlc2t0b3AgZmlsZSAoZS5nLiBub3QgInByZWZlcnJlZC13ZWItYnJvd3Nlci5kZXNrdG9wIikuCisrICAgICAgICAgICAgZ3JlcCAtRXEgIl4oTm9EaXNwbGF5fEhpZGRlbik9dHJ1ZSIgIiRmaWxlIiAmJiBjb250aW51ZQorKyAgICAgICAgICAgIGNvbW1hbmQ9ImBncmVwIC1FICJeRXhlYyhcW1teXT1dKl0pPz0iICIkZmlsZSIgfCBjdXQgLWQ9IC1mIDItIHwgZmlyc3Rfd29yZGAiCisrICAgICAgICAgICAgY29tbWFuZD0iYHdoaWNoICIkY29tbWFuZCJgIgorKyAgICAgICAgICAgIGlmIFsgeCJgcmVhZGxpbmsgLWYgIiRjb21tYW5kImAiID0geCIkYmluYXJ5IiBdOyB0aGVuCisrICAgICAgICAgICAgICAgICMgRml4IGFueSBkb3VibGUgc2xhc2hlcyB0aGF0IGdvdCBhZGRlZCBwYXRoIGNvbXBvc2l0aW9uCisrICAgICAgICAgICAgICAgIGVjaG8gIiRmaWxlIiB8IHNlZCAtZSAncywvLyosLyxnJworKyAgICAgICAgICAgICAgICByZXR1cm4KKysgICAgICAgICAgICBmaQorKyAgICAgICAgZG9uZQorKyAgICBkb25lCisrfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBtYXAgYSAuZGVza3RvcCBmaWxlIHRvIGEgYmluYXJ5CisrIyMgRklYTUU6IGhhbmRsZSB2ZW5kb3IgZGlyIGNhc2UKKytkZXNrdG9wX2ZpbGVfdG9fYmluYXJ5KCkKKyt7CisrICAgIHNlYXJjaD0iJHtYREdfREFUQV9IT01FOi0kSE9NRS8ubG9jYWwvc2hhcmV9OiR7WERHX0RBVEFfRElSUzotL3Vzci9sb2NhbC9zaGFyZTovdXNyL3NoYXJlfSIKKysgICAgZGVza3RvcD0iYGJhc2VuYW1lICIkMSJgIgorKyAgICBJRlM9OgorKyAgICBmb3IgZGlyIGluICRzZWFyY2g7IGRvCisrICAgICAgICB1bnNldCBJRlMKKysgICAgICAgIFsgIiRkaXIiIF0gJiYgWyAtZCAiJGRpci9hcHBsaWNhdGlvbnMiIF0gfHwgY29udGludWUKKysgICAgICAgIGZpbGU9IiRkaXIvYXBwbGljYXRpb25zLyRkZXNrdG9wIgorKyAgICAgICAgWyAtciAiJGZpbGUiIF0gfHwgY29udGludWUKKysgICAgICAgICMgUmVtb3ZlIGFueSBhcmd1bWVudHMgKCVGLCAlZiwgJVUsICV1LCBldGMuKS4KKysgICAgICAgIGNvbW1hbmQ9ImBncmVwIC1FICJeRXhlYyhcW1teXT1dKl0pPz0iICIkZmlsZSIgfCBjdXQgLWQ9IC1mIDItIHwgZmlyc3Rfd29yZGAiCisrICAgICAgICBjb21tYW5kPSJgd2hpY2ggIiRjb21tYW5kImAiCisrICAgICAgICByZWFkbGluayAtZiAiJGNvbW1hbmQiCisrICAgICAgICByZXR1cm4KKysgICAgZG9uZQorK30KKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgRXhpdCBzY3JpcHQgb24gc3VjY2Vzc2Z1bGx5IGNvbXBsZXRpbmcgdGhlIGRlc2lyZWQgb3BlcmF0aW9uCisrCisrZXhpdF9zdWNjZXNzKCkKKyt7CisrICAgIGlmIFsgJCMgLWd0IDAgXTsgdGhlbgorKyAgICAgICAgZWNobyAiJEAiCisrICAgICAgICBlY2hvCisrICAgIGZpCisrCisrICAgIGV4aXQgMAorK30KKysKKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIEV4aXQgc2NyaXB0IG9uIG1hbGZvcm1lZCBhcmd1bWVudHMsIG5vdCBlbm91Z2ggYXJndW1lbnRzCisrIyBvciBtaXNzaW5nIHJlcXVpcmVkIG9wdGlvbi4KKysjIHByaW50cyB1c2FnZSBpbmZvcm1hdGlvbgorKworK2V4aXRfZmFpbHVyZV9zeW50YXgoKQorK3sKKysgICAgaWYgWyAkIyAtZ3QgMCBdOyB0aGVuCisrICAgICAgICBlY2hvICJ4ZGctdGVybWluYWw6ICRAIiA+JjIKKysgICAgICAgIGVjaG8gIlRyeSAneGRnLXRlcm1pbmFsIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjIKKysgICAgZWxzZQorKyAgICAgICAgdXNhZ2UKKysgICAgICAgIGVjaG8gIlVzZSAnbWFuIHhkZy10ZXJtaW5hbCcgb3IgJ3hkZy10ZXJtaW5hbCAtLW1hbnVhbCcgZm9yIGFkZGl0aW9uYWwgaW5mby4iCisrICAgIGZpCisrCisrICAgIGV4aXQgMQorK30KKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgRXhpdCBzY3JpcHQgb24gbWlzc2luZyBmaWxlIHNwZWNpZmllZCBvbiBjb21tYW5kIGxpbmUKKysKKytleGl0X2ZhaWx1cmVfZmlsZV9taXNzaW5nKCkKKyt7CisrICAgIGlmIFsgJCMgLWd0IDAgXTsgdGhlbgorKyAgICAgICAgZWNobyAieGRnLXRlcm1pbmFsOiAkQCIgPiYyCisrICAgIGZpCisrCisrICAgIGV4aXQgMgorK30KKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgRXhpdCBzY3JpcHQgb24gZmFpbHVyZSB0byBsb2NhdGUgbmVjZXNzYXJ5IHRvb2wgYXBwbGljYXRpb25zCisrCisrZXhpdF9mYWlsdXJlX29wZXJhdGlvbl9pbXBvc3NpYmxlKCkKKyt7CisrICAgIGlmIFsgJCMgLWd0IDAgXTsgdGhlbgorKyAgICAgICAgZWNobyAieGRnLXRlcm1pbmFsOiAkQCIgPiYyCisrICAgIGZpCisrCisrICAgIGV4aXQgMworK30KKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgRXhpdCBzY3JpcHQgb24gZmFpbHVyZSByZXR1cm5lZCBieSBhIHRvb2wgYXBwbGljYXRpb24KKysKKytleGl0X2ZhaWx1cmVfb3BlcmF0aW9uX2ZhaWxlZCgpCisreworKyAgICBpZiBbICQjIC1ndCAwIF07IHRoZW4KKysgICAgICAgIGVjaG8gInhkZy10ZXJtaW5hbDogJEAiID4mMgorKyAgICBmaQorKworKyAgICBleGl0IDQKKyt9CisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgRXhpdCBzY3JpcHQgb24gaW5zdWZmaWNpZW50IHBlcm1pc3Npb24gdG8gcmVhZCBhIHNwZWNpZmllZCBmaWxlCisrCisrZXhpdF9mYWlsdXJlX2ZpbGVfcGVybWlzc2lvbl9yZWFkKCkKKyt7CisrICAgIGlmIFsgJCMgLWd0IDAgXTsgdGhlbgorKyAgICAgICAgZWNobyAieGRnLXRlcm1pbmFsOiAkQCIgPiYyCisrICAgIGZpCisrCisrICAgIGV4aXQgNQorK30KKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBFeGl0IHNjcmlwdCBvbiBpbnN1ZmZpY2llbnQgcGVybWlzc2lvbiB0byB3cml0ZSBhIHNwZWNpZmllZCBmaWxlCisrCisrZXhpdF9mYWlsdXJlX2ZpbGVfcGVybWlzc2lvbl93cml0ZSgpCisreworKyAgICBpZiBbICQjIC1ndCAwIF07IHRoZW4KKysgICAgICAgIGVjaG8gInhkZy10ZXJtaW5hbDogJEAiID4mMgorKyAgICBmaQorKworKyAgICBleGl0IDYKKyt9CisrCisrY2hlY2tfaW5wdXRfZmlsZSgpCisreworKyAgICBpZiBbICEgLWUgIiQxIiBdOyB0aGVuCisrICAgICAgICBleGl0X2ZhaWx1cmVfZmlsZV9taXNzaW5nICJmaWxlICckMScgZG9lcyBub3QgZXhpc3QiCisrICAgIGZpCisrICAgIGlmIFsgISAtciAiJDEiIF07IHRoZW4KKysgICAgICAgIGV4aXRfZmFpbHVyZV9maWxlX3Blcm1pc3Npb25fcmVhZCAibm8gcGVybWlzc2lvbiB0byByZWFkIGZpbGUgJyQxJyIKKysgICAgZmkKKyt9CisrCisrY2hlY2tfdmVuZG9yX3ByZWZpeCgpCisreworKyAgICBmaWxlX2xhYmVsPSIkMiIKKysgICAgWyAtbiAiJGZpbGVfbGFiZWwiIF0gfHwgZmlsZV9sYWJlbD0iZmlsZW5hbWUiCisrICAgIGZpbGU9YGJhc2VuYW1lICIkMSJgCisrICAgIGNhc2UgIiRmaWxlIiBpbgorKyAgICAgICBbWzphbHBoYTpdXSotKikKKysgICAgICAgICByZXR1cm4KKysgICAgICAgICA7OworKyAgICBlc2FjCisrCisrICAgIGVjaG8gInhkZy10ZXJtaW5hbDogJGZpbGVfbGFiZWwgJyRmaWxlJyBkb2VzIG5vdCBoYXZlIGEgcHJvcGVyIHZlbmRvciBwcmVmaXgiID4mMgorKyAgICBlY2hvICdBIHZlbmRvciBwcmVmaXggY29uc2lzdHMgb2YgYWxwaGEgY2hhcmFjdGVycyAoW2EtekEtWl0pIGFuZCBpcyB0ZXJtaW5hdGVkJyA+JjIKKysgICAgZWNobyAnd2l0aCBhIGRhc2ggKCItIikuIEFuIGV4YW1wbGUgJyIkZmlsZV9sYWJlbCInIGlzICciJ2V4YW1wbGUtJGZpbGUnIiA+JjIKKysgICAgZWNobyAiVXNlIC0tbm92ZW5kb3IgdG8gb3ZlcnJpZGUgb3IgJ3hkZy10ZXJtaW5hbCAtLW1hbnVhbCcgZm9yIGFkZGl0aW9uYWwgaW5mby4iID4mMgorKyAgICBleGl0IDEKKyt9CisrCisrY2hlY2tfb3V0cHV0X2ZpbGUoKQorK3sKKysgICAgIyBpZiB0aGUgZmlsZSBleGlzdHMsIGNoZWNrIGlmIGl0IGlzIHdyaXRlYWJsZQorKyAgICAjIGlmIGl0IGRvZXMgbm90IGV4aXN0cywgY2hlY2sgaWYgd2UgYXJlIGFsbG93ZWQgdG8gd3JpdGUgb24gdGhlIGRpcmVjdG9yeQorKyAgICBpZiBbIC1lICIkMSIgXTsgdGhlbgorKyAgICAgICAgaWYgWyAhIC13ICIkMSIgXTsgdGhlbgorKyAgICAgICAgICAgIGV4aXRfZmFpbHVyZV9maWxlX3Blcm1pc3Npb25fd3JpdGUgIm5vIHBlcm1pc3Npb24gdG8gd3JpdGUgdG8gZmlsZSAnJDEnIgorKyAgICAgICAgZmkKKysgICAgZWxzZQorKyAgICAgICAgRElSPWBkaXJuYW1lICIkMSJgCisrICAgICAgICBpZiBbICEgLXcgIiRESVIiIF0gfHwgWyAhIC14ICIkRElSIiBdOyB0aGVuCisrICAgICAgICAgICAgZXhpdF9mYWlsdXJlX2ZpbGVfcGVybWlzc2lvbl93cml0ZSAibm8gcGVybWlzc2lvbiB0byBjcmVhdGUgZmlsZSAnJDEnIgorKyAgICAgICAgZmkKKysgICAgZmkKKyt9CisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIENoZWNrcyBmb3Igc2hhcmVkIGNvbW1hbmRzLCBlLmcuIC0taGVscAorKworK2NoZWNrX2NvbW1vbl9jb21tYW5kcygpCisreworKyAgICB3aGlsZSBbICQjIC1ndCAwIF0gOyBkbworKyAgICAgICAgcGFybT0iJDEiCisrICAgICAgICBzaGlmdAorKworKyAgICAgICAgY2FzZSAiJHBhcm0iIGluCisrICAgICAgICAgICAgLS1oZWxwKQorKyAgICAgICAgICAgIHVzYWdlCisrICAgICAgICAgICAgZWNobyAiVXNlICdtYW4geGRnLXRlcm1pbmFsJyBvciAneGRnLXRlcm1pbmFsIC0tbWFudWFsJyBmb3IgYWRkaXRpb25hbCBpbmZvLiIKKysgICAgICAgICAgICBleGl0X3N1Y2Nlc3MKKysgICAgICAgICAgICA7OworKworKyAgICAgICAgICAgIC0tbWFudWFsKQorKyAgICAgICAgICAgIG1hbnVhbHBhZ2UKKysgICAgICAgICAgICBleGl0X3N1Y2Nlc3MKKysgICAgICAgICAgICA7OworKworKyAgICAgICAgICAgIC0tdmVyc2lvbikKKysgICAgICAgICAgICBlY2hvICJ4ZGctdGVybWluYWwgMS4xLjAgcmMxIgorKyAgICAgICAgICAgIGV4aXRfc3VjY2VzcworKyAgICAgICAgICAgIDs7CisrICAgICAgICBlc2FjCisrICAgIGRvbmUKKyt9CisrCisrY2hlY2tfY29tbW9uX2NvbW1hbmRzICIkQCIKKysKKytbIC16ICIke1hER19VVElMU19ERUJVR19MRVZFTH0iIF0gJiYgdW5zZXQgWERHX1VUSUxTX0RFQlVHX0xFVkVMOworK2lmIFsgJHtYREdfVVRJTFNfREVCVUdfTEVWRUwtMH0gLWx0IDEgXTsgdGhlbgorKyAgICAjIEJlIHNpbGVudAorKyAgICB4ZGdfcmVkaXJlY3Rfb3V0cHV0PSIgPiAvZGV2L251bGwgMj4gL2Rldi9udWxsIgorK2Vsc2UKKysgICAgIyBBbGwgb3V0cHV0IHRvIHN0ZGVycgorKyAgICB4ZGdfcmVkaXJlY3Rfb3V0cHV0PSIgPiYyIgorK2ZpCisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBDaGVja3MgZm9yIGtub3duIGRlc2t0b3AgZW52aXJvbm1lbnRzCisrIyBzZXQgdmFyaWFibGUgREUgdG8gdGhlIGRlc2t0b3AgZW52aXJvbm1lbnRzIG5hbWUsIGxvd2VyY2FzZQorKworK2RldGVjdERFKCkKKyt7CisrICAgICMgc2VlIGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTM0MTY0CisrICAgIHVuc2V0IEdSRVBfT1BUSU9OUworKworKyAgICBpZiBbIC1uICIke1hER19DVVJSRU5UX0RFU0tUT1B9IiBdOyB0aGVuCisrICAgICAgY2FzZSAiJHtYREdfQ1VSUkVOVF9ERVNLVE9QfSIgaW4KKysgICAgICAgICBFTkxJR0hURU5NRU5UKQorKyAgICAgICAgICAgREU9ZW5saWdodGVubWVudDsKKysgICAgICAgICAgIDs7CisrICAgICAgICAgR05PTUUpCisrICAgICAgICAgICBERT1nbm9tZTsKKysgICAgICAgICAgIDs7CisrICAgICAgICAgS0RFKQorKyAgICAgICAgICAgREU9a2RlOworKyAgICAgICAgICAgOzsKKysgICAgICAgICBMWERFKQorKyAgICAgICAgICAgREU9bHhkZTsKKysgICAgICAgICAgIDs7CisrICAgICAgICAgTUFURSkKKysgICAgICAgICAgIERFPW1hdGU7CisrICAgICAgICAgICA7OworKyAgICAgICAgIFhGQ0UpCisrICAgICAgICAgICBERT14ZmNlCisrICAgICAgICAgICA7OworKyAgICAgIGVzYWMKKysgICAgZmkKKysKKysgICAgaWYgWyB4IiRERSIgPSB4IiIgXTsgdGhlbgorKyAgICAgICMgY2xhc3NpYyBmYWxsYmFja3MKKysgICAgICBpZiBbIHgiJEtERV9GVUxMX1NFU1NJT04iICE9IHgiIiBdOyB0aGVuIERFPWtkZTsKKysgICAgICBlbGlmIFsgeCIkR05PTUVfREVTS1RPUF9TRVNTSU9OX0lEIiAhPSB4IiIgXTsgdGhlbiBERT1nbm9tZTsKKysgICAgICBlbGlmIFsgeCIkTUFURV9ERVNLVE9QX1NFU1NJT05fSUQiICE9IHgiIiBdOyB0aGVuIERFPW1hdGU7CisrICAgICAgZWxpZiBgZGJ1cy1zZW5kIC0tcHJpbnQtcmVwbHkgLS1kZXN0PW9yZy5mcmVlZGVza3RvcC5EQnVzIC9vcmcvZnJlZWRlc2t0b3AvREJ1cyBvcmcuZnJlZWRlc2t0b3AuREJ1cy5HZXROYW1lT3duZXIgc3RyaW5nOm9yZy5nbm9tZS5TZXNzaW9uTWFuYWdlciA+IC9kZXYvbnVsbCAyPiYxYCA7IHRoZW4gREU9Z25vbWU7CisrICAgICAgZWxpZiB4cHJvcCAtcm9vdCBfRFRfU0FWRV9NT0RFIDI+IC9kZXYvbnVsbCB8IGdyZXAgJyA9IFwieGZjZTRcIiQnID4vZGV2L251bGwgMj4mMTsgdGhlbiBERT14ZmNlOworKyAgICAgIGVsaWYgeHByb3AgLXJvb3QgMj4gL2Rldi9udWxsIHwgZ3JlcCAtaSAnXnhmY2VfZGVza3RvcF93aW5kb3cnID4vZGV2L251bGwgMj4mMTsgdGhlbiBERT14ZmNlCisrICAgICAgZWxpZiBlY2hvICRERVNLVE9QIHwgZ3JlcCAtcSAnXkVubGlnaHRlbm1lbnQnOyB0aGVuIERFPWVubGlnaHRlbm1lbnQ7CisrICAgICAgZmkKKysgICAgZmkKKysKKysgICAgaWYgWyB4IiRERSIgPSB4IiIgXTsgdGhlbgorKyAgICAgICMgZmFsbGJhY2sgdG8gY2hlY2tpbmcgJERFU0tUT1BfU0VTU0lPTgorKyAgICAgIGNhc2UgIiRERVNLVE9QX1NFU1NJT04iIGluCisrICAgICAgICAgZ25vbWUpCisrICAgICAgICAgICBERT1nbm9tZTsKKysgICAgICAgICAgIDs7CisrICAgICAgICAgTFhERXxMdWJ1bnR1KQorKyAgICAgICAgICAgREU9bHhkZTsgCisrICAgICAgICAgICA7OworKyAgICAgICAgIE1BVEUpCisrICAgICAgICAgICBERT1tYXRlOworKyAgICAgICAgICAgOzsKKysgICAgICAgICB4ZmNlfHhmY2U0fCdYZmNlIFNlc3Npb24nKQorKyAgICAgICAgICAgREU9eGZjZTsKKysgICAgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgICBmaQorKworKyAgICBpZiBbIHgiJERFIiA9IHgiIiBdOyB0aGVuCisrICAgICAgIyBmYWxsYmFjayB0byB1bmFtZSBvdXRwdXQgZm9yIG90aGVyIHBsYXRmb3JtcworKyAgICAgIGNhc2UgIiQodW5hbWUgMj4vZGV2L251bGwpIiBpbiAKKysgICAgICAgIERhcndpbikKKysgICAgICAgICAgREU9ZGFyd2luOworKyAgICAgICAgICA7OworKyAgICAgIGVzYWMKKysgICAgZmkKKysKKysgICAgaWYgWyB4IiRERSIgPSB4Imdub21lIiBdOyB0aGVuCisrICAgICAgIyBnbm9tZS1kZWZhdWx0LWFwcGxpY2F0aW9ucy1wcm9wZXJ0aWVzIGlzIG9ubHkgYXZhaWxhYmxlIGluIEdOT01FIDIueAorKyAgICAgICMgYnV0IG5vdCBpbiBHTk9NRSAzLngKKysgICAgICB3aGljaCBnbm9tZS1kZWZhdWx0LWFwcGxpY2F0aW9ucy1wcm9wZXJ0aWVzID4gL2Rldi9udWxsIDI+JjEgIHx8IERFPSJnbm9tZTMiCisrICAgIGZpCisrfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBrZm1jbGllbnQgZXhlYy9vcGVuVVJMIGNhbiBnaXZlIGJvZ3VzIGV4aXQgdmFsdWUgaW4gS0RFIDw9IDMuNS40CisrIyBJdCBhbHNvIGFsd2F5cyByZXR1cm5zIDEgaW4gS0RFIDMuNCBhbmQgZWFybGllcgorKyMgU2ltcGx5IHJldHVybiAwIGluIHN1Y2ggY2FzZQorKworK2tmbWNsaWVudF9maXhfZXhpdF9jb2RlKCkKKyt7CisrICAgIHZlcnNpb249YExDX0FMTD1DLlVURi04IGtkZS1jb25maWcgLS12ZXJzaW9uIDI+L2Rldi9udWxsIHwgZ3JlcCAnXktERSdgCisrICAgIG1ham9yPWBlY2hvICR2ZXJzaW9uIHwgc2VkICdzL0tERS4qOiBcKFswLTldXCkuKi9cMS8nYAorKyAgICBtaW5vcj1gZWNobyAkdmVyc2lvbiB8IHNlZCAncy9LREUuKjogWzAtOV0qXC5cKFswLTldXCkuKi9cMS8nYAorKyAgICByZWxlYXNlPWBlY2hvICR2ZXJzaW9uIHwgc2VkICdzL0tERS4qOiBbMC05XSpcLlswLTldKlwuXChbMC05XVwpLiovXDEvJ2AKKysgICAgdGVzdCAiJG1ham9yIiAtZ3QgMyAmJiByZXR1cm4gJDEKKysgICAgdGVzdCAiJG1pbm9yIiAtZ3QgNSAmJiByZXR1cm4gJDEKKysgICAgdGVzdCAiJHJlbGVhc2UiIC1ndCA0ICYmIHJldHVybiAkMQorKyAgICByZXR1cm4gMAorK30KKysKKyt0ZXJtaW5hbF9rZGUoKQorK3sKKysgICAgdGVybWluYWw9YGtyZWFkY29uZmlnIC0tZmlsZSBrZGVnbG9iYWxzIC0tZ3JvdXAgR2VuZXJhbCAtLWtleSBUZXJtaW5hbEFwcGxpY2F0aW9uIC0tZGVmYXVsdCBrb25zb2xlYAorKworKyAgICB0ZXJtaW5hbF9leGVjPWB3aGljaCAkdGVybWluYWwgMj4vZGV2L251bGxgCisrCisrICAgIGlmIFsgLXggIiR0ZXJtaW5hbF9leGVjIiBdOyB0aGVuCisrICAgICAgICBpZiBbIHgiJDEiID0geCIiIF07IHRoZW4KKysgICAgICAgICAgICAkdGVybWluYWxfZXhlYworKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgICR0ZXJtaW5hbF9leGVjIC1lICIkMSIKKysgICAgICAgIGZpCisrCisrICAgICAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KKysgICAgICAgICAgICBleGl0X3N1Y2Nlc3MKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBleGl0X2ZhaWx1cmVfb3BlcmF0aW9uX2ZhaWxlZAorKyAgICAgICAgZmkKKysgICAgZWxzZQorKyAgICAgICAgZXhpdF9mYWlsdXJlX29wZXJhdGlvbl9pbXBvc3NpYmxlICJjb25maWd1cmVkIHRlcm1pbmFsIHByb2dyYW0gJyR0ZXJtaW5hbCcgbm90IGZvdW5kIG9yIG5vdCBleGVjdXRhYmxlIgorKyAgICBmaQorK30KKysKKyt0ZXJtaW5hbF9nbm9tZSgpCisreworKyAgICB0ZXJtX2V4ZWNfa2V5PSIvZGVza3RvcC9nbm9tZS9hcHBsaWNhdGlvbnMvdGVybWluYWwvZXhlYyIKKysgICAgdGVybV9leGVjX2FyZ19rZXk9Ii9kZXNrdG9wL2dub21lL2FwcGxpY2F0aW9ucy90ZXJtaW5hbC9leGVjX2FyZyIKKysKKysgICAgdGVybV9leGVjPWBnY29uZnRvb2wtMiAtLWdldCAke3Rlcm1fZXhlY19rZXl9YAorKyAgICB0ZXJtX2V4ZWNfYXJnPWBnY29uZnRvb2wtMiAtLWdldCAke3Rlcm1fZXhlY19hcmdfa2V5fWAKKysKKysgICAgdGVybWluYWxfZXhlYz1gd2hpY2ggJHRlcm1fZXhlYyAyPi9kZXYvbnVsbGAKKysKKysgICAgaWYgWyAteCAiJHRlcm1pbmFsX2V4ZWMiIF07IHRoZW4KKysgICAgICAgIGlmIFsgeCIkMSIgPSB4IiIgXTsgdGhlbgorKyAgICAgICAgICAgICR0ZXJtaW5hbF9leGVjCisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgaWYgWyB4IiR0ZXJtX2V4ZWNfYXJnIiA9IHgiIiBdOyB0aGVuCisrICAgICAgICAgICAgICAgICR0ZXJtaW5hbF9leGVjICIkMSIKKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICR0ZXJtaW5hbF9leGVjICIkdGVybV9leGVjX2FyZyIgIiQxIgorKyAgICAgICAgICAgIGZpCisrICAgICAgICBmaQorKworKyAgICAgICAgaWYgWyAkPyAtZXEgMCBdOyB0aGVuCisrICAgICAgICAgICAgZXhpdF9zdWNjZXNzCisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgZXhpdF9mYWlsdXJlX29wZXJhdGlvbl9mYWlsZWQKKysgICAgICAgIGZpCisrICAgIGVsc2UKKysgICAgICAgIGV4aXRfZmFpbHVyZV9vcGVyYXRpb25faW1wb3NzaWJsZSAiY29uZmlndXJlZCB0ZXJtaW5hbCBwcm9ncmFtICckdGVybV9leGVjJyBub3QgZm91bmQgb3Igbm90IGV4ZWN1dGFibGUiCisrICAgIGZpCisrfQorKworK3Rlcm1pbmFsX3hmY2UoKQorK3sKKysgICAgaWYgWyB4IiQxIiA9IHgiIiBdOyB0aGVuCisrICAgICAgICBleG8tb3BlbiAtLWxhdW5jaCBUZXJtaW5hbEVtdWxhdG9yCisrICAgIGVsc2UKKysgICAgICAgIGV4by1vcGVuIC0tbGF1bmNoIFRlcm1pbmFsRW11bGF0b3IgIiQxIgorKyAgICBmaQorKworKyAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KKysgICAgICAgIGV4aXRfc3VjY2VzcworKyAgICBlbHNlCisrICAgICAgICBleGl0X2ZhaWx1cmVfb3BlcmF0aW9uX2ZhaWxlZAorKyAgICBmaQorK30KKysKKyt0ZXJtaW5hbF9nZW5lcmljKCkKKyt7CisrICAgICMgaWYgJFRFUk0gaXMgYSBrbm93biBub24tY29tbWFuZCwgdXNlIGhhcmQtY29kZWQgZmFsbGJhY2tzCisrICAgIGlmIFsgeCIkVEVSTSIgPSB4IiIgXSB8fCBbIHgiJFRFUk0iID0geCJsaW51eCIgXSB8fCBbIHgiJFRFUk0iID0geCJ2dDEwMCIgXTsgdGhlbgorKyAgICAgICAgVEVSTT14dGVybQorKyAgICBmaQorKworKyAgICB0ZXJtaW5hbF9leGVjPWB3aGljaCAkVEVSTSAyPi9kZXYvbnVsbGAKKysKKysgICAgaWYgWyAteCAiJHRlcm1pbmFsX2V4ZWMiIF07IHRoZW4KKysgICAgICAgIGlmIFsgeCIkMSIgPSB4IiIgXTsgdGhlbgorKyAgICAgICAgICAgICR0ZXJtaW5hbF9leGVjCisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgIyBzY3JlZW4gYW5kIHVyeHZ0IHdvbid0IGRvIHRoZWlyIG93biBwYXJzaW5nIG9mIHF1b3RlZCBhcmd1bWVudHMKKysgICAgICAgICAgICBpZiBbIHgiJFRFUk0iID0geCJzY3JlZW4iIF07IHRoZW4KKysgICAgICAgICAgICAgICAgIyBzY3JlZW4gaGFzIGFuIGluY29tcGF0aWJsZSBtZWFuaW5nIGZvciAtZQorKyAgICAgICAgICAgICAgICBzaCAtYyAiZXhlYyAkdGVybWluYWxfZXhlYyAkMSIKKysgICAgICAgICAgICBlbGlmIFsgeCIkVEVSTSIgPSB4InVyeHZ0IiBdIHx8IFsgeCIkVEVSTSIgPSB4InJ4dnQtdW5pY29kZSIgXSB8fCBbIHgiJFRFUk0iID0geCJyeHZ0IiBdOyB0aGVuCisrICAgICAgICAgICAgICAgICNUT0RPOiBVc2Ugd2hhdGV2ZXIgbWVjaGFuaXNtIGRhc2ggc3VwcG9ydHMgdG8gdGVzdCBmb3IKKysgICAgICAgICAgICAgICAgIyAgICAgIHJ4dnQtKiB0byBtYXRjaCB0aGluZ3MgbGlrZSByeHZ0LXVuaWNvZGUtMjU2Y29sb3IKKysgICAgICAgICAgICAgICAgc2ggLWMgImV4ZWMgJHRlcm1pbmFsX2V4ZWMgLWUgJDEiCisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAkdGVybWluYWxfZXhlYyAtZSAiJDEiCisrICAgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrCisrICAgICAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KKysgICAgICAgICAgICBleGl0X3N1Y2Nlc3MKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBleGl0X2ZhaWx1cmVfb3BlcmF0aW9uX2ZhaWxlZAorKyAgICAgICAgZmkKKysgICAgZWxzZQorKyAgICAgICAgZXhpdF9mYWlsdXJlX29wZXJhdGlvbl9pbXBvc3NpYmxlICJjb25maWd1cmVkIHRlcm1pbmFsIHByb2dyYW0gJyRURVJNJyBub3QgZm91bmQgb3Igbm90IGV4ZWN1dGFibGUiCisrICAgIGZpCisrfQorKworK3Rlcm1pbmFsX2x4ZGUoKQorK3sKKysgICAgaWYgd2hpY2ggbHh0ZXJtaW5hbCAmPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgaWYgWyB4IiQxIiA9IHgiIiBdOyB0aGVuCisrICAgICAgICAgICAgbHh0ZXJtaW5hbAorKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGx4dGVybWluYWwgLWUgIiQxIgorKyAgICAgICAgZmkKKysgICAgZWxzZQorKyAgICAgICAgdGVybWluYWxfZ2VuZXJpYyAiJDEiCisrICAgIGZpCisrfQorKworKyNbIHgiJDEiICE9IHgiIiBdIHx8IGV4aXRfZmFpbHVyZV9zeW50YXgKKysKKytjb21tYW5kPQorK3doaWxlIFsgJCMgLWd0IDAgXSA7IGRvCisrICAgIHBhcm09IiQxIgorKyAgICBzaGlmdAorKworKyAgICBjYXNlICIkcGFybSIgaW4KKysgICAgICAtKikKKysgICAgICAgIGV4aXRfZmFpbHVyZV9zeW50YXggInVuZXhwZWN0ZWQgb3B0aW9uICckcGFybSciCisrICAgICAgICA7OworKworKyAgICAgICopCisrICAgICAgICBpZiBbIC1uICIkY29tbWFuZCIgXSA7IHRoZW4KKysgICAgICAgICAgICBleGl0X2ZhaWx1cmVfc3ludGF4ICJ1bmV4cGVjdGVkIGFyZ3VtZW50ICckcGFybSciCisrICAgICAgICBmaQorKyAgICAgICAgY29tbWFuZD0iJHBhcm0iCisrICAgICAgICA7OworKyAgICBlc2FjCisrZG9uZQorKworK2RldGVjdERFCisrCisraWYgWyB4IiRERSIgPSB4IiIgXTsgdGhlbgorKyAgICBERT1nZW5lcmljCisrZmkKKysKKytjYXNlICIkREUiIGluCisrICAgIGtkZSkKKysgICAgdGVybWluYWxfa2RlICIkY29tbWFuZCIKKysgICAgOzsKKysKKysgICAgZ25vbWUqKQorKyAgICB0ZXJtaW5hbF9nbm9tZSAiJGNvbW1hbmQiCisrICAgIDs7CisrCisrICAgIHhmY2UpCisrICAgIHRlcm1pbmFsX3hmY2UgIiRjb21tYW5kIgorKyAgICA7OworKworKyAgICBseGRlKQorKyAgICB0ZXJtaW5hbF9seGRlICIkY29tbWFuZCIKKysgICAgOzsKKysKKysgICAgZ2VuZXJpYykKKysgICAgdGVybWluYWxfZ2VuZXJpYyAiJGNvbW1hbmQiCisrICAgIDs7CisrCisrICAgICopCisrICAgIGV4aXRfZmFpbHVyZV9vcGVyYXRpb25faW1wb3NzaWJsZSAibm8gdGVybWluYWwgZW11bGF0b3IgYXZhaWxhYmxlIgorKyAgICA7OworK2VzYWMKKy0tIAorMS45LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGRnLXV0aWxzL3hkZy11dGlsc18xLjEuMC1yYzEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94ZGctdXRpbHMveGRnLXV0aWxzXzEuMS4wLXJjMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmYxZTNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGRnLXV0aWxzL3hkZy11dGlsc18xLjEuMC1yYzEuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJCYXNpYyBkZXNrdG9wIGludGVncmF0aW9uIGZ1bmN0aW9ucyIKKworREVTQ1JJUFRJT04gPSAiVGhlIHhkZy11dGlscyBwYWNrYWdlIGlzIGEgc2V0IG9mIHNpbXBsZSBzY3JpcHRzIHRoYXQgcHJvdmlkZSBiYXNpYyBcCitkZXNrdG9wIGludGVncmF0aW9uIGZ1bmN0aW9ucyBmb3IgYW55IEZyZWUgRGVza3RvcCwgc3VjaCBhcyBMaW51eC4gXAorVGhleSBhcmUgaW50ZW5kZWQgdG8gcHJvdmlkZSBhIHNldCBvZiBkZWZhY3RvIHN0YW5kYXJkcy4gXAorVGhlIGZvbGxvd2luZyBzY3JpcHRzIGFyZSBwcm92aWRlZCBhdCB0aGlzIHRpbWU6IFwKK3hkZy1kZXNrdG9wLWljb24gXCAgICAgCit4ZGctZGVza3RvcC1tZW51IFwgIAoreGRnLWVtYWlsIFwgCit4ZGctaWNvbi1yZXNvdXJjZSBcCit4ZGctbWltZSBcICAgICAgIAoreGRnLW9wZW4gXCAgICAgCit4ZGctc2NyZWVuc2F2ZXIgXCAKK3hkZy10ZXJtaW5hbCBcCisiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9YTUzNjdhOTA5MzQwOThkNmIwNWFmM2I3NDY0MDUwMTQiCisKK1NSQ19VUkkgPSAiaHR0cDovL3BvcnRsYW5kLmZyZWVkZXNrdG9wLm9yZy9kb3dubG9hZC8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtUmVpbnN0YXRlLXhkZy10ZXJtaW5hbC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmFkZjVlN2EwOGUwNTI2ZmM2MGRiZTNlNWI3ZWY4ZDYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2IwNTU1OGFlNGJiOGVkZTM1Njg2M2NhZThjNDJlM2UwMTJhYTQyMWJmOWQ0NTEzMGE1NzBmZDIwOWQ3OTEwMiIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSB4cHJvcCByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitSREVQRU5EU18ke1BOfSArPSAieHByb3AiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL0Rpc2FibGUtc2VydmljZXMtZnJvbS1pbmV0ZC5jb25mLWlmLWEtc2VydmljZS13aXRoLXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL0Rpc2FibGUtc2VydmljZXMtZnJvbS1pbmV0ZC5jb25mLWlmLWEtc2VydmljZS13aXRoLXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q2ZTZjMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQvRGlzYWJsZS1zZXJ2aWNlcy1mcm9tLWluZXRkLmNvbmYtaWYtYS1zZXJ2aWNlLXdpdGgtdC5wYXRjaApAQCAtMCwwICsxLDg2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW2Zyb20gb3RoZXIgZGlzdHJvIERlYmlhbl0KKworRnJvbSBkNTg4YjY1MzBlMTM4MmE2MjQ4OThiM2Y0MzA3ZjYzNmM3MmM4MGE5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGllcnJlIEhhYm91eml0IDxtYWRjb2RlckBkZWJpYW4ub3JnPgorRGF0ZTogV2VkLCAyOCBOb3YgMjAwNyAxMDoxMzowOCArMDEwMAorU3ViamVjdDogW1BBVENIXSBEaXNhYmxlIHNlcnZpY2VzIGZyb20gaW5ldGQuY29uZiBpZiBhIHNlcnZpY2Ugd2l0aCB0aGUgc2FtZSBpZCBleGlzdHMuCisKKyAgVGhpcyB3YXksIGlmIGEgc2VydmljZSBpcyBlbmFibGVkIGluIC9ldGMveGluZXRkKiBfYW5kXyBpbgorL2V0Yy9pbmV0ZC5jb25mLCB0aGUgb25lIChldmVuIGlmIGRpc2FibGVkKSBmcm9tIC9ldGMveGluZXRkKiB0YWtlcworcHJlY2VkZW5jZS4KKworU2lnbmVkLW9mZi1ieTogUGllcnJlIEhhYm91eml0IDxtYWRjb2RlckBkZWJpYW4ub3JnPgorLS0tCisgeGluZXRkL2luZXQuYyB8ICAgMjIgKysrKysrKysrKysrKysrKysrKy0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3hpbmV0ZC9pbmV0LmMgYi94aW5ldGQvaW5ldC5jCitpbmRleCAxY2IyYmEyLi44Y2FhYjQ1IDEwMDY0NAorLS0tIGEveGluZXRkL2luZXQuYworKysrIGIveGluZXRkL2luZXQuYworQEAgLTIzLDYgKzIzLDggQEAKKyAjaW5jbHVkZSAicGFyc2VzdXAuaCIKKyAjaW5jbHVkZSAibnZsaXN0cy5oIgorIAorK3N0YXRpYyBwc2lfaCBpdGVyIDsKKysKKyBzdGF0aWMgaW50IGdldF9uZXh0X2luZXRfZW50cnkoIGludCBmZCwgcHNldF9oIHNjb25mcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VydmljZV9jb25maWcgKmRlZmF1bHRzKTsKKyAKK0BAIC0zMiwxMiArMzQsMTUgQEAgdm9pZCBwYXJzZV9pbmV0X2NvbmZfZmlsZSggaW50IGZkLCBzdHJ1Y3QgY29uZmlndXJhdGlvbiAqY29uZnAgKQorICAgIHN0cnVjdCBzZXJ2aWNlX2NvbmZpZyAqZGVmYXVsdF9jb25maWcgPSBDTkZfREVGQVVMVFMoIGNvbmZwICk7CisgICAgCisgICAgbGluZV9jb3VudCA9IDA7CisrICAgaXRlciA9IHBzaV9jcmVhdGUgKHNjb25mcyk7CisgCisgICAgZm9yKCA7OyApCisgICAgeyAgIAorICAgICAgIGlmIChnZXRfbmV4dF9pbmV0X2VudHJ5KGZkLCBzY29uZnMsIGRlZmF1bHRfY29uZmlnKSA9PSAtMikKKyAgICAgICAgICBicmVhazsKKyAgICB9CisrCisrICAgcHNpX2Rlc3Ryb3koaXRlcik7CisgfQorIAorIHN0YXRpYyBpbnQgZ2V0X25leHRfaW5ldF9lbnRyeSggaW50IGZkLCBwc2V0X2ggc2NvbmZzLCAKK0BAIC00Niw3ICs1MSw3IEBAIHN0YXRpYyBpbnQgZ2V0X25leHRfaW5ldF9lbnRyeSggaW50IGZkLCBwc2V0X2ggc2NvbmZzLAorICAgIGNoYXIgKnA7CisgICAgc3RyX2ggc3RycDsKKyAgICBjaGFyICpsaW5lID0gbmV4dF9saW5lKGZkKTsKKy0gICBzdHJ1Y3Qgc2VydmljZV9jb25maWcgKnNjcDsKKysgICBzdHJ1Y3Qgc2VydmljZV9jb25maWcgKnNjcCwgKnRtcDsKKyAgICB1bnNpZ25lZCB1LCBpOworICAgIGNvbnN0IGNoYXIgKmZ1bmMgPSAiZ2V0X25leHRfaW5ldF9lbnRyeSI7CisgICAgY2hhciAqbmFtZSA9IE5VTEwsICpycGN2ZXJzID0gTlVMTCwgKnJwY3Byb3RvID0gTlVMTDsKK0BAIC00MDUsNyArNDEwLDE2IEBAIHN0YXRpYyBpbnQgZ2V0X25leHRfaW5ldF9lbnRyeSggaW50IGZkLCBwc2V0X2ggc2NvbmZzLAorICAgIFNDX1NQRUNJRlkoIHNjcCwgQV9TT0NLRVRfVFlQRSApOworICAgIFNDX1NQRUNJRlkoIHNjcCwgQV9XQUlUICk7CisgCistICAgaWYoICEgcHNldF9hZGQoc2NvbmZzLCBzY3ApICkKKysgICBmb3IgKCB0bXAgPSBTQ1AoIHBzaV9zdGFydCggaXRlciApICkgOyB0bXAgOyB0bXAgPSBTQ1AoIHBzaV9uZXh0KGl0ZXIpKSApeworKyAgICAgIGlmIChFUShTQ19JRChzY3ApLCBTQ19JRCh0bXApKSkgeworKyAgICAgICAgIHBhcnNlbXNnKExPR19ERUJVRywgZnVuYywgInJlbW92aW5nIGR1cGxpY2F0ZSBzZXJ2aWNlICVzIiwgU0NfTkFNRShzY3ApKTsKKysgICAgICAgICBzY19mcmVlKHNjcCk7CisrICAgICAgICAgc2NwID0gTlVMTDsKKysgICAgICAgICBicmVhazsKKysgICAgICB9CisrICAgfQorKworKyAgIGlmKCBzY3AgJiYgISBwc2V0X2FkZChzY29uZnMsIHNjcCkgKQorICAgIHsKKyAgICAgICBvdXRfb2ZfbWVtb3J5KCBmdW5jICk7CisgICAgICAgcHNldF9kZXN0cm95KGFyZ3MpOworQEAgLTQxNCw3ICs0MjgsOSBAQCBzdGF0aWMgaW50IGdldF9uZXh0X2luZXRfZW50cnkoIGludCBmZCwgcHNldF9oIHNjb25mcywKKyAgICB9CisgCisgICAgcHNldF9kZXN0cm95KGFyZ3MpOworLSAgIHBhcnNlbXNnKCBMT0dfREVCVUcsIGZ1bmMsICJhZGRlZCBzZXJ2aWNlICVzIiwgU0NfTkFNRShzY3ApKTsKKysgICBpZiAoc2NwKSB7CisrICAgICAgcGFyc2Vtc2coIExPR19ERUJVRywgZnVuYywgImFkZGVkIHNlcnZpY2UgJXMiLCBTQ19OQU1FKHNjcCkpOworKyAgIH0KKyAgICByZXR1cm4gMDsKKyB9CisgCistLSAKKzEuNS4zLjYuMjA0MC5nMTVlNgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL1ZhcmlvdXMtZml4ZXMtZnJvbS10aGUtcHJldmlvdXMtbWFpbnRhaW5lci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQvVmFyaW91cy1maXhlcy1mcm9tLXRoZS1wcmV2aW91cy1tYWludGFpbmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNTljZGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL1ZhcmlvdXMtZml4ZXMtZnJvbS10aGUtcHJldmlvdXMtbWFpbnRhaW5lci5wYXRjaApAQCAtMCwwICsxLDc5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW2Zyb20gb3RoZXIgZGlzdHJvIERlYmlhbl0KKworRnJvbSBhMzQxMGIwYmM4MWFiMDNhODg5ZDlmZmMxNGUzNTFiYWRmODM3MmYxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGllcnJlIEhhYm91eml0IDxtYWRjb2RlckBkZWJpYW4ub3JnPgorRGF0ZTogTW9uLCAyNiBOb3YgMjAwNyAxNjowMjowNCArMDEwMAorU3ViamVjdDogW1BBVENIXSBWYXJpb3VzIGZpeGVzIGZyb20gdGhlIHByZXZpb3VzIG1haW50YWluZXIuCisKKy0tLQorIHhpbmV0ZC9jaGlsZC5jICAgfCAgIDIwICsrKysrKysrKysrKysrKysrLS0tCisgeGluZXRkL3NlcnZpY2UuYyB8ICAgIDggKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDIxIGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS94aW5ldGQvY2hpbGQuYyBiL3hpbmV0ZC9jaGlsZC5jCitpbmRleCA4OWVlNTRjLi40OGU5NjE1IDEwMDY0NAorLS0tIGEveGluZXRkL2NoaWxkLmMKKysrKyBiL3hpbmV0ZC9jaGlsZC5jCitAQCAtMjg0LDYgKzI4NCw3IEBAIHZvaWQgY2hpbGRfcHJvY2Vzcyggc3RydWN0IHNlcnZlciAqc2VycCApCisgICAgY29ubmVjdGlvbl9zICAgICAgICAgICAgKmNwICA9IFNFUlZFUl9DT05ORUNUSU9OKCBzZXJwICkgOworICAgIHN0cnVjdCBzZXJ2aWNlX2NvbmZpZyAgICpzY3AgPSBTVkNfQ09ORiggc3AgKSA7CisgICAgY29uc3QgY2hhciAgICAgICAgICAgICAgKmZ1bmMgPSAiY2hpbGRfcHJvY2VzcyIgOworKyAgIGludCAgICAgICAgICAgICAgICAgICAgIGZkLCBudWxsX2ZkOworIAorICAgIHNpZ25hbF9kZWZhdWx0X3N0YXRlKCk7CisgCitAQCAtMjk2LDkgKzI5NywyMiBAQCB2b2lkIGNoaWxkX3Byb2Nlc3MoIHN0cnVjdCBzZXJ2ZXIgKnNlcnAgKQorICAgIHNpZ25hbHNfcGVuZGluZ1swXSA9IC0xOworICAgIHNpZ25hbHNfcGVuZGluZ1sxXSA9IC0xOworIAorLSAgIFNjbG9zZSgwKTsKKy0gICBTY2xvc2UoMSk7CistICAgU2Nsb3NlKDIpOworKyAgIGlmICggKCBudWxsX2ZkID0gb3BlbiggIi9kZXYvbnVsbCIsIE9fUkRPTkxZICkgKSA9PSAtMSApCisrICAgeworKyAgICAgIG1zZyggTE9HX0VSUiwgZnVuYywgIm9wZW4oJy9kZXYvbnVsbCcpIGZhaWxlZDogJW0iKSA7CisrICAgICAgX2V4aXQoIDEgKSA7CisrICAgfQorKworKyAgIGZvciAoIGZkID0gMCA7IGZkIDw9IE1BWF9QQVNTX0ZEIDsgZmQrKyApCisrICAgeworKyAgICAgIGlmICggZmQgIT0gbnVsbF9mZCAmJiBkdXAyKCBudWxsX2ZkLCBmZCApID09IC0xICkKKysgICAgICB7CisrICAgICAgICAgbXNnKCBMT0dfRVJSLCBmdW5jLCAiZHVwMiglZCwgJWQpIGZhaWxlZDogJW0iKSA7CisrICAgICAgICAgX2V4aXQoIDEgKSA7CisrICAgICAgfQorKyAgIH0KKysgICBpZiAoIG51bGxfZmQgPiBNQVhfUEFTU19GRCApCisrICAgICAgKHZvaWQpIFNjbG9zZSggbnVsbF9mZCApIDsKKyAKKyAKKyAjaWZkZWYgREVCVUdfU0VSVkVSCitkaWZmIC0tZ2l0IGEveGluZXRkL3NlcnZpY2UuYyBiL3hpbmV0ZC9zZXJ2aWNlLmMKK2luZGV4IDNkNjhkNzguLjAxMzJkNmMgMTAwNjQ0CistLS0gYS94aW5ldGQvc2VydmljZS5jCisrKysgYi94aW5ldGQvc2VydmljZS5jCitAQCAtNzQ1LDggKzc0NSw4IEBAIHN0YXRpYyBzdGF0dXNfZSBmYWlsZWRfc2VydmljZShzdHJ1Y3Qgc2VydmljZSAqc3AsCisgICAgICAgICAgICAgICAgcmV0dXJuIEZBSUxFRDsKKyAKKyAgICAgICAgICAgICBpZiAoIGxhc3QgPT0gTlVMTCApIHsKKy0gICAgICAgICAgICAgICBsYXN0ID0gU0FJTiggY2FsbG9jKCAxLCBzaXplb2YodW5pb24geHNvY2thZGRyKSApICk7CistCSAgICAgICBTVkNfTEFTVF9ER1JBTV9BRERSKHNwKSA9ICh1bmlvbiB4c29ja2FkZHIgKilsYXN0OworKwkgICAgU1ZDX0xBU1RfREdSQU1fQUREUihzcCkgPSAgU0FJTiggY2FsbG9jKCAxLCBzaXplb2YodW5pb24geHNvY2thZGRyKSApICk7CisrCSAgICBsYXN0ID0gU0FJTiggU1ZDX0xBU1RfREdSQU1fQUREUihzcCkgKTsKKyAgICAgICAgICAgICB9CisgCisgICAgICAgICAgICAgKHZvaWQpIHRpbWUoICZjdXJyZW50X3RpbWUgKSA7CitAQCAtNzcyLDggKzc3Miw4IEBAIHN0YXRpYyBzdGF0dXNfZSBmYWlsZWRfc2VydmljZShzdHJ1Y3Qgc2VydmljZSAqc3AsCisgICAgICAgICAgICAgICAgcmV0dXJuIEZBSUxFRDsKKyAKKyAJICAgIGlmKCBsYXN0ID09IE5VTEwgKSB7CistICAgICAgICAgICAgICAgbGFzdCA9IFNBSU42KGNhbGxvYyggMSwgc2l6ZW9mKHVuaW9uIHhzb2NrYWRkcikgKSApOworLQkgICAgICAgU1ZDX0xBU1RfREdSQU1fQUREUiggc3AgKSA9ICh1bmlvbiB4c29ja2FkZHIgKilsYXN0OworKwkgICAgU1ZDX0xBU1RfREdSQU1fQUREUihzcCkgPSBTQUlONihjYWxsb2MoIDEsIHNpemVvZih1bmlvbiB4c29ja2FkZHIpICkgKTsKKysgICAgICAgICAgICBsYXN0ID0gU0FJTjYoU1ZDX0xBU1RfREdSQU1fQUREUihzcCkpOworICAgICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgICAodm9pZCkgdGltZSggJmN1cnJlbnRfdGltZSApIDsKKy0tIAorMS41LjMuNi4yMDQwLmcxNWU2CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLUNWRS0yMDEzLTQzNDIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC1DVkUtMjAxMy00MzQyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NDJkYmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC1DVkUtMjAxMy00MzQyLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK3hpbmV0ZDogQ1ZFLTIwMTMtNDM0MgorCit4aW5ldGQgZG9lcyBub3QgZW5mb3JjZSB0aGUgdXNlciBhbmQgZ3JvdXAgY29uZmlndXJhdGlvbiBkaXJlY3RpdmVzCitmb3IgVENQTVVYIHNlcnZpY2VzLCB3aGljaCBjYXVzZXMgdGhlc2Ugc2VydmljZXMgdG8gYmUgcnVuIGFzIHJvb3QKK2FuZCBtYWtlcyBpdCBlYXNpZXIgZm9yIHJlbW90ZSBhdHRhY2tlcnMgdG8gZ2FpbiBwcml2aWxlZ2VzIGJ5CitsZXZlcmFnaW5nIGFub3RoZXIgdnVsbmVyYWJpbGl0eSBpbiBhIHNlcnZpY2UuCitodHRwOi8vd2ViLm52ZC5uaXN0Lmdvdi92aWV3L3Z1bG4vZGV0YWlsP3Z1bG5JZD1DVkUtMjAxMy00MzQyCisKK3RoZSBwYXRjaCBjb21lIGZyb206CitodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vYXR0YWNobWVudC5jZ2k/aWQ9Nzk5NzMyJmFjdGlvbj1kaWZmCisKK1NpZ25lZC1vZmYtYnk6IExpIFdhbmcgPGxpLndhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHhpbmV0ZC9idWlsdGlucy5jIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEveGluZXRkL2J1aWx0aW5zLmMgYi94aW5ldGQvYnVpbHRpbnMuYworaW5kZXggM2I4NTU3OS4uMzRhNWJhYyAxMDA2NDQKKy0tLSBhL3hpbmV0ZC9idWlsdGlucy5jCisrKysgYi94aW5ldGQvYnVpbHRpbnMuYworQEAgLTYxNyw3ICs2MTcsNyBAQCBzdGF0aWMgdm9pZCB0Y3BtdXhfaGFuZGxlciggY29uc3Qgc3RydWN0IHNlcnZlciAqc2VycCApCisgICAgaWYoIFNDX0lTX0lOVEVSTkFMKCBzY3AgKSApIHsKKyAgICAgICBTQ19JTlRFUk5BTChzY3AsIG5zZXJwKTsKKyAgICB9IGVsc2UgeworLSAgICAgIGV4ZWNfc2VydmVyKG5zZXJwKTsKKysgICAgICBjaGlsZF9wcm9jZXNzKG5zZXJwKTsKKyAgICB9CisgfQorIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLXNob3VsZC1iZS1hYmxlLXRvLWxpc3Rlbi1vbi1JUHY2LWV2ZW4taW4taW5lLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQtc2hvdWxkLWJlLWFibGUtdG8tbGlzdGVuLW9uLUlQdjYtZXZlbi1pbi1pbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM2NWNhMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLXNob3VsZC1iZS1hYmxlLXRvLWxpc3Rlbi1vbi1JUHY2LWV2ZW4taW4taW5lLnBhdGNoCkBAIC0wLDAgKzEsMTEyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW2Zyb20gb3RoZXIgZGlzdHJvIERlYmlhbl0KKworRnJvbSBmNDRiMjE4Y2NjNzc5YWIzZjRhZWQwNzIzOTBjY2YxMjlkOTRiNThkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRGF2aWQgTWFkb3JlIDxkYXZpZEBwbGVpYWRlcy5zdGFycz4KK0RhdGU6IE1vbiwgMjQgTWFyIDIwMDggMTI6NDU6MzYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0geGluZXRkIHNob3VsZCBiZSBhYmxlIHRvIGxpc3RlbiBvbiBJUHY2IGV2ZW4gaW4gLWluZXRkX2NvbXBhdCBtb2RlCisKK3hpbmV0ZCBkb2VzIG5vdCBiaW5kIHRvIElQdjYgYWRkcmVzc2VzIChhbmQgZG9lcyBub3Qgc2VlbSB0byBoYXZlIGFuCitvcHRpb24gdG8gZG8gc28pIHdoZW4gdXNlZCBpbiAtaW5ldGRfY29tcGF0IG1vZGUuICBBcyBjdXJyZW50IGluZXRkJ3MKK2FyZSBJUHY2LWF3YXJlLCB0aGlzIGlzIGEgcHJvYmxlbTogdGhpcyBtZWFucyB4aW5ldGQgY2Fubm90IGJlIHVzZWQgYXMKK2EgZHJvcC1pbiBpbmV0ZCByZXBsYWNlbWVudC4KKworVGhlIGF0dGFjaGVkIHBhdGNoIGlzIGEgc3VnZ2VzdGlvbjogaXQgYWRkcyBhIC1pbmV0ZF9pcHY2IGdsb2JhbAorb3B0aW9uIHRoYXQsIGlmIHVzZWQsIGNhdXNlcyBpbmV0ZC1jb21wYXRpYmlsaXR5IGxpbmVzIHRvIGhhdmUgYW4KK2ltcGxpY2l0ICJJUHY2IiBvcHRpb24uICBQZXJoYXBzIHRoaXMgaXMgbm90IHRoZSBiZXN0IHNvbHV0aW9uLCBidXQKK3RoZXJlIHNob3VsZCBkZWZpbml0ZWx5IGJlIGEgd2F5IHRvIGdldCBpbmV0ZC5jb25mIHRvIGJlIHJlYWQgaW4KK0lQdjYtYXdhcmUgbW9kZS4KKy0tLQorIHhpbmV0ZC9jb25mcGFyc2UuYyB8ICAgIDEgKworIHhpbmV0ZC9pbmV0LmMgICAgICB8ICAgMTcgKysrKysrKysrKysrKysrKysKKyB4aW5ldGQvb3B0aW9ucy5jICAgfCAgICAzICsrKworIHhpbmV0ZC94aW5ldGQubWFuICB8ICAgIDYgKysrKysrCisgNCBmaWxlcyBjaGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEveGluZXRkL2NvbmZwYXJzZS5jIGIveGluZXRkL2NvbmZwYXJzZS5jCitpbmRleCBkYjlmNDMxLi5kN2IwYmNjIDEwMDY0NAorLS0tIGEveGluZXRkL2NvbmZwYXJzZS5jCisrKysgYi94aW5ldGQvY29uZnBhcnNlLmMKK0BAIC00MCw2ICs0MCw3IEBACisgI2luY2x1ZGUgImluZXQuaCIKKyAjaW5jbHVkZSAibWFpbi5oIgorIAorK2V4dGVybiBpbnQgaW5ldGRfaXB2NjsKKyBleHRlcm4gaW50IGluZXRkX2NvbXBhdDsKKyAKKyAvKgorZGlmZiAtLWdpdCBhL3hpbmV0ZC9pbmV0LmMgYi94aW5ldGQvaW5ldC5jCitpbmRleCA4Y2FhYjQ1Li4yZTYxN2FlIDEwMDY0NAorLS0tIGEveGluZXRkL2luZXQuYworKysrIGIveGluZXRkL2luZXQuYworQEAgLTI1LDYgKzI1LDggQEAKKyAKKyBzdGF0aWMgcHNpX2ggaXRlciA7CisgCisrZXh0ZXJuIGludCBpbmV0ZF9pcHY2OworKworIHN0YXRpYyBpbnQgZ2V0X25leHRfaW5ldF9lbnRyeSggaW50IGZkLCBwc2V0X2ggc2NvbmZzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZXJ2aWNlX2NvbmZpZyAqZGVmYXVsdHMpOworIAorQEAgLTM2MCw2ICszNjIsMjEgQEAgc3RhdGljIGludCBnZXRfbmV4dF9pbmV0X2VudHJ5KCBpbnQgZmQsIHBzZXRfaCBzY29uZnMsCisgICAgICAgICAgfQorICAgICAgICAgIFNDX1NFUlZFUl9BUkdWKHNjcClbdV0gPSBwOworICAgICAgIH0KKysKKysgICAgICAvKiBTZXQgdGhlIElQdjYgZmxhZyBpZiB3ZSB3ZXJlIHBhc3NlZCB0aGUgLWluZXRkX2lwdjYgb3B0aW9uICovCisrICAgICAgaWYgKCBpbmV0ZF9pcHY2ICkKKysgICAgICB7CisrICAgICAgICAgbnZwID0gbnZfZmluZF92YWx1ZSggc2VydmljZV9mbGFncywgIklQdjYiICk7CisrICAgICAgICAgaWYgKCBudnAgPT0gTlVMTCApCisrICAgICAgICAgeworKyAgICAgICAgICAgIHBhcnNlbXNnKCBMT0dfV0FSTklORywgZnVuYywgImluZXRkLmNvbmYgLSBCYWQgZm9vICVzIiwgbmFtZSApIDsKKysgICAgICAgICAgICBwc2V0X2Rlc3Ryb3koYXJncyk7CisrICAgICAgICAgICAgc2NfZnJlZShzY3ApOworKyAgICAgICAgICAgIHJldHVybiAtMTsKKysgICAgICAgICB9CisrICAgICAgICAgTV9TRVQoU0NfWEZMQUdTKHNjcCksIG52cC0+dmFsdWUpOworKyAgICAgIH0KKysKKyAgICAgICAvKiBTZXQgdGhlIHJldXNlIGZsYWcsIGFzIHRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIGluZXRkICovCisgICAgICAgbnZwID0gbnZfZmluZF92YWx1ZSggc2VydmljZV9mbGFncywgIlJFVVNFIiApOworICAgICAgIGlmICggbnZwID09IE5VTEwgKQorZGlmZiAtLWdpdCBhL3hpbmV0ZC9vcHRpb25zLmMgYi94aW5ldGQvb3B0aW9ucy5jCitpbmRleCBiMDU4YjZhLi5kYzJmM2EwIDEwMDY0NAorLS0tIGEveGluZXRkL29wdGlvbnMuYworKysrIGIveGluZXRkL29wdGlvbnMuYworQEAgLTMwLDYgKzMwLDcgQEAgaW50IGxvZ3Byb2NzX29wdGlvbiA7CisgdW5zaWduZWQgbG9ncHJvY3Nfb3B0aW9uX2FyZyA7CisgaW50IHN0YXlhbGl2ZV9vcHRpb249MDsKKyBjaGFyICpwcm9ncmFtX25hbWUgOworK2ludCBpbmV0ZF9pcHY2ID0gMCA7CisgaW50IGluZXRkX2NvbXBhdCA9IDAgOworIGludCBkb250X2ZvcmsgPSAwOworIAorQEAgLTEyOCw2ICsxMjksOCBAQCBpbnQgb3B0X3JlY29nbml6ZSggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCisgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgICAgfQorKyAgICAgICAgIGVsc2UgaWYgKCBzdHJjbXAgKCAmYXJndlsgYXJnIF1bIDEgXSwgImluZXRkX2lwdjYiICkgPT0gMCApCisrICAgICAgICAgICAgaW5ldGRfaXB2NiA9IDE7CisgICAgICAgICAgZWxzZSBpZiAoIHN0cmNtcCAoICZhcmd2WyBhcmcgXVsgMSBdLCAiaW5ldGRfY29tcGF0IiApID09IDAgKQorICAgICAgICAgICAgIGluZXRkX2NvbXBhdCA9IDE7CisgICAgICAgfQorZGlmZiAtLWdpdCBhL3hpbmV0ZC94aW5ldGQubWFuIGIveGluZXRkL3hpbmV0ZC5tYW4KK2luZGV4IGM3NmMzYzYuLmM5ZGQ4MDMgMTAwNjQ0CistLS0gYS94aW5ldGQveGluZXRkLm1hbgorKysrIGIveGluZXRkL3hpbmV0ZC5tYW4KK0BAIC0xMDYsNiArMTA2LDEyIEBAIFRoaXMgb3B0aW9uIGNhdXNlcyB4aW5ldGQgdG8gcmVhZCAvZXRjL2luZXRkLmNvbmYgaW4gYWRkaXRpb24gdG8gdGhlCisgc3RhbmRhcmQgeGluZXRkIGNvbmZpZyBmaWxlcy4gIC9ldGMvaW5ldGQuY29uZiBpcyByZWFkIGFmdGVyIHRoZQorIHN0YW5kYXJkIHhpbmV0ZCBjb25maWcgZmlsZXMuCisgLlRQCisrLkJJIFwtaW5ldGRfaXB2NgorK1RoaXMgb3B0aW9uIGNhdXNlcyB4aW5ldGQgdG8gYmluZCB0byBJUHY2IChBRl9JTkVUNikgYWRkcmVzc2VzIGZvcgorK2luZXRkIGNvbXBhdGliaWxpdHkgbGluZXMgKHNlZSBwcmV2aW91cyBvcHRpb24pLiAgVGhpcyBvbmx5IGFmZmVjdHMKKytob3cgL2V0Yy9pbmV0ZC5jb25mIGlzIGludGVycHJldGVkIGFuZCB0aHVzIG9ubHkgaGFzIGFueSBlZmZlY3QgaWYKKyt0aGUgXC1pbmV0ZF9jb21wYXQgb3B0aW9uIGlzIGFsc28gdXNlZC4KKysuVFAKKyAuQkkgXC1jYyAiIGludGVydmFsIgorIFRoaXMgb3B0aW9uIGluc3RydWN0cworIC5CIHhpbmV0ZAorLS0gCisxLjUuNS5yYzAuMTI3LmdiNDMzNworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTZlYTI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQuY29uZgpAQCAtMCwwICsxLDExIEBACisjIFNpbXBsZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHhpbmV0ZAorIworIyBTb21lIGRlZmF1bHRzLCBhbmQgaW5jbHVkZSAvZXRjL3hpbmV0ZC5kLworCitkZWZhdWx0cworeworCisKK30KKworaW5jbHVkZWRpciAvZXRjL3hpbmV0ZC5kCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5kZWZhdWx0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQuZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGEzOGUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQuZGVmYXVsdApAQCAtMCwwICsxLDEyIEBACisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIHhpbmV0ZC4gVGhpcyBmaWxlIGlzIHNvdXJjZWQgYnkgL2Jpbi9zaCBmcm9tCisjIC9ldGMvaW5pdC5kL3hpbmV0ZAorCisjIGVuYWJsZSB4aW5ldGQgSW5ldGQgY29tcGF0IG1vZGUKK0lORVREX0NPTVBBVD1ZZXMKKworIyBPcHRpb25zIHRvIHBhc3MgdG8geGluZXRkCisjCisjIC1zdGF5YWxpdmUgY29tZXMgYnkgZGVmYXVsdCA6IGl0IGNhbiBiZSByZW1vdmVkIGlmIHhpbmV0ZCBpcyBleHBlY3RlZAorIyBub3QgdG8gc3RhcnQgd2hlbiBubyBzZXJ2aWNlIGlzIGNvbmZpZ3VyZWQKKyMKK1hJTkVURF9PUFRTPSItc3RheWFsaXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQuaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLmluaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc3YzJjOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLmluaXQKQEAgLTAsMCArMSw2NCBAQAorIyEvYmluL3NoCisjCisjIC9ldGMvaW5pdC5kL3hpbmV0ZCAgLS0gIHNjcmlwdCB0byBzdGFydCBhbmQgc3RvcCB4aW5ldGQuCisKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCitpZiB0ZXN0IC1mIC9ldGMvZGVmYXVsdC94aW5ldGQ7IHRoZW4KKwkuIC9ldGMvZGVmYXVsdC94aW5ldGQKK2ZpCisKKwordGVzdCAteCAvdXNyL3NiaW4veGluZXRkIHx8IGV4aXQgMAorCitjaGVja3BvcnRtYXAgKCkgeworICBpZiBncmVwICJeW14gKiNdIiAvZXRjL3hpbmV0ZC5jb25mIHwgZ3JlcCAtcSAncnBjLyc7IHRoZW4KKyAgICBpZiAhIHJwY2luZm8gLXUgbG9jYWxob3N0IHBvcnRtYXBwZXIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICBlY2hvCisgICAgICBlY2hvICJXQVJOSU5HOiBwb3J0bWFwcGVyIGluYWN0aXZlIC0gUlBDIHNlcnZpY2VzIHVuYXZhaWxhYmxlISIKKyAgICAgIGVjaG8gIiAgICBDb21tZW50aW5nIG91dCBvciByZW1vdmluZyB0aGUgUlBDIHNlcnZpY2VzIGZyb20iCisgICAgICBlY2hvICIgICAgdGhlIC9ldGMveGluZXRkLmNvbmYgZmlsZSB3aWxsIHJlbW92ZSB0aGlzIG1lc3NhZ2UuIgorICAgICAgZWNobworICAgIGZpCisgIGZpCit9IAorCitjYXNlICIkMSIgaW4KKyAgICBzdGFydCkKKyAgICAgICAgY2hlY2twb3J0bWFwCisJZWNobyAtbiAiU3RhcnRpbmcgaW50ZXJuZXQgc3VwZXJzZXJ2ZXI6IHhpbmV0ZCIKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1iYWNrZ3JvdW5kIC0tZXhlYyAvdXNyL3NiaW4veGluZXRkIC0tIC1waWRmaWxlIC92YXIvcnVuL3hpbmV0ZC5waWQgJFhJTkVURF9PUFRTCisJZWNobyAiLiIKKwk7OworICAgIHN0b3ApCisJZWNobyAtbiAiU3RvcHBpbmcgaW50ZXJuZXQgc3VwZXJzZXJ2ZXI6IHhpbmV0ZCIKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1zaWduYWwgMyAtLXF1aWV0IC0tZXhlYyAvdXNyL3NiaW4veGluZXRkCisJZWNobyAiLiIKKwk7OworICAgIHN0YXR1cykKKwlzdGF0dXMgL3Vzci9zYmluL3hpbmV0ZDsKKwlleGl0ICQ/CisJOzsKKyAgICByZWxvYWQpCisJZWNobyAtbiAiUmVsb2FkaW5nIGludGVybmV0IHN1cGVyc2VydmVyIGNvbmZpZ3VyYXRpb246IHhpbmV0ZCIKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1zaWduYWwgMSAtLXF1aWV0IC0tZXhlYyAvdXNyL3NiaW4veGluZXRkCisJZWNobyAiLiIKKwk7OworICAgIGZvcmNlLXJlbG9hZCkKKwllY2hvICIkMCBmb3JjZS1yZWxvYWQ6IEZvcmNlIFJlbG9hZCBpcyBkZXByZWNhdGVkIgorCWVjaG8gLW4gIkZvcmNlZnVsbHkgcmVsb2FkaW5nIGludGVybmV0IHN1cGVyc2VydmVyIGNvbmZpZ3VyYXRpb246IHhpbmV0ZCIKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1zaWduYWwgMSAtLXF1aWV0IC0tZXhlYyAvdXNyL3NiaW4veGluZXRkCisJZWNobyAiLiIKKwk7OworICAgIHJlc3RhcnQpCisJJDAgc3RvcAorCSQwIHN0YXJ0CisJOzsKKyAgICAqKQorCWVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC94aW5ldGQge3N0YXJ0fHN0b3B8c3RhdHVzfHJlbG9hZHxmb3JjZS1yZWxvYWR8cmVzdGFydH0iCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWZkYzViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQuc2VydmljZQpAQCAtMCwwICsxLDEzIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVhpbmV0ZCBBIFBvd2VyZnVsIFJlcGxhY2VtZW50IEZvciBJbmV0ZAorQWZ0ZXI9c3lzbG9nLnRhcmdldCBuZXR3b3JrLnRhcmdldAorCitbU2VydmljZV0KK1R5cGU9Zm9ya2luZworUElERmlsZT0vdmFyL3J1bi94aW5ldGQucGlkCitFbnZpcm9ubWVudEZpbGU9LS9ldGMvc3lzY29uZmlnL3hpbmV0ZAorRXhlY1N0YXJ0PUBTQklORElSQC94aW5ldGQgLXN0YXlhbGl2ZSAtcGlkZmlsZSAvdmFyL3J1bi94aW5ldGQucGlkICIkRVhUUkFPUFRJT05TIgorRXhlY1JlbG9hZD1AQkFTRV9CSU5ESVJAL2tpbGwgLUhVUCAkTUFJTlBJRAorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkXzIuMy4xNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGRfMi4zLjE1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYzAzZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkXzIuMy4xNS5iYgpAQCAtMCwwICsxLDY4IEBACitTVU1NQVJZID0gIlNvY2tldC1iYXNlZCBzZXJ2aWNlIGFjdGl2YXRpb24gZGFlbW9uIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL3hpbmV0ZC1vcmcveGluZXRkIgorCisjIHhpbmV0ZCBpcyBhIEJTRC1saWtlIGxpY2Vuc2UKKyMgQXBwbGUgYW5kIEdlbnRvbyBzYXkgQlNEIGhlcmUuCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlSSUdIVDttZDU9OGFkODYxNTE5ODU0MjQ0NGY4NGQyOGE2Y2YyMjZkZDgiCisKK0RFUEVORFMgPSAiIgorUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS94aW5ldGQtb3JnL3hpbmV0ZC5naXQ7cHJvdG9jb2w9aHR0cHMgXAorICAgICAgZmlsZTovL3hpbmV0ZC5pbml0IFwKKyAgICAgIGZpbGU6Ly94aW5ldGQuY29uZiBcCisgICAgICBmaWxlOi8veGluZXRkLmRlZmF1bHQgXAorICAgICAgZmlsZTovL1ZhcmlvdXMtZml4ZXMtZnJvbS10aGUtcHJldmlvdXMtbWFpbnRhaW5lci5wYXRjaCBcCisgICAgICBmaWxlOi8vRGlzYWJsZS1zZXJ2aWNlcy1mcm9tLWluZXRkLmNvbmYtaWYtYS1zZXJ2aWNlLXdpdGgtdC5wYXRjaCBcCisgICAgICBmaWxlOi8veGluZXRkLXNob3VsZC1iZS1hYmxlLXRvLWxpc3Rlbi1vbi1JUHY2LWV2ZW4taW4taW5lLnBhdGNoIFwKKyAgICAgIGZpbGU6Ly94aW5ldGQtQ1ZFLTIwMTMtNDM0Mi5wYXRjaCBcCisgICAgICBmaWxlOi8veGluZXRkLnNlcnZpY2UgXAorICAgICAgIgorCitTUkNSRVYgPSAiNjhiYjlhYjllOWYyMTRhZDhhMjMyMmYyOGFjMWQ2NzMzZTcwYmMyNCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLXJjLmQgc3lzdGVtZAorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAieGluZXRkLnNlcnZpY2UiCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJ4aW5ldGQiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJkZWZhdWx0cyIKKworRVhUUkFfT0VDT05GPSItLWRpc2FibGUtbmxzIgorCitQQUNLQUdFQ09ORklHID8/PSAidGNwLXdyYXBwZXJzIgorUEFDS0FHRUNPTkZJR1t0Y3Atd3JhcHBlcnNdID0gIi0td2l0aC1saWJ3cmFwLCx0Y3Atd3JhcHBlcnMiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwkjIExvb2tzIGxpa2UgY29uZmlndXJlLmluIGlzIGJyb2tlbiwgc28gd2UgYXJlIHNraXBwaW5nCisJIyByZWJ1aWxkaW5nIGNvbmZpZ3VyZSBhbmQgYXJlIGp1c3QgdXNpbmcgdGhlIHNoaXBwZWQgb25lCisJKCBjZCAke1N9OyBnbnUtY29uZmlnaXplIC0tZm9yY2UgKQorCW9lX3J1bmNvbmYKK30KKworZG9faW5zdGFsbCgpIHsKKwkjIFNhbWUgaGVyZSwgdGhlIE1ha2VmaWxlIGRvZXMgc29tZSByZWFsbHkgc3R1cGlkIHRoaW5ncywKKwkjIGJ1dCBzaW5jZSB3ZSBvbmx5IHdhbnQgdHdvIGZpbGVzIHdoeSBub3Qgb3ZlcnJpZGUKKwkjIGRvX2luc3RhbGwgZnJvbSBhdXRvdG9vbHMgYW5kIGRvaW5nIGl0IG91cnNlbGZzPworCWluc3RhbGwgLWQgIiR7RH0ke3NiaW5kaXJ9IgorCWluc3RhbGwgLWQgIiR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZCIKKwlpbnN0YWxsIC1kICIke0R9JHtzeXNjb25mZGlyfS94aW5ldGQuZCIKKwlpbnN0YWxsIC1kICIke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0IgorCWluc3RhbGwgLW0gNjQ0ICIke1dPUktESVJ9L3hpbmV0ZC5jb25mIiAiJHtEfSR7c3lzY29uZmRpcn0iCisJaW5zdGFsbCAtbSA3NTUgIiR7V09SS0RJUn0veGluZXRkLmluaXQiICIke0R9JHtzeXNjb25mZGlyfS9pbml0LmQveGluZXRkIgorCWluc3RhbGwgLW0gNjQ0ICIke1dPUktESVJ9L3hpbmV0ZC5kZWZhdWx0IiAiJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC94aW5ldGQiCisJaW5zdGFsbCAtbSA3NTUgIiR7Qn0veGluZXRkL3hpbmV0ZCIgIiR7RH0ke3NiaW5kaXJ9IgorCWluc3RhbGwgLW0gNzU1ICIke0J9L3hpbmV0ZC9pdG94IiAiJHtEfSR7c2JpbmRpcn0iCisKKwkjIEluc3RhbGwgc3lzdGVtZCB1bml0IGZpbGVzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3hpbmV0ZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBCQVNFX0JJTkRJUkAsJHtiYXNlX2JpbmRpcn0sZycgXAorCSAgICAgICAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyBcCisJICAgICAgICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3hpbmV0ZC5zZXJ2aWNlCit9CisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L3hpbmV0ZC5jb25mIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveHoveHpfNS4yLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94ei94el81LjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGFlNDhmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveHoveHpfNS4yLjEuYmIKQEAgLTAsMCArMSwzNiBAQAorU1VNTUFSWSA9ICJVdGlsaXRpZXMgZm9yIG1hbmFnaW5nIExaTUEgY29tcHJlc3NlZCBmaWxlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly90dWthYW5pLm9yZy94ei8iCitTRUNUSU9OID0gImJhc2UiCisKKyMgVGhlIHNvdXJjZSBpbmNsdWRlcyBiaXRzIG9mIFBELCBHUEx2MiwgR1BMdjMsIExHUEx2Mi4xKywgYnV0IHRoZSBvbmx5IGZpbGUKKyMgd2hpY2ggaXMgR1BMdjMgaXMgYW4gbTQgbWFjcm8gd2hpY2ggaXNuJ3Qgc2hpcHBlZCBpbiBhbnkgb2Ygb3VyIHBhY2thZ2VzLAorIyBhbmQgdGhlIExHUEwgYml0cyBhcmUgdW5kZXIgbGliLywgd2hpY2ggYXBwZWFycyB0byBiZSB1c2VkIGZvciBsaWJnbnUsIHdoaWNoCisjIGFwcGVhcnMgdG8gYmUgdXNlZCBmb3IgRE9TIGJ1aWxkcy4gU28gd2UncmUgbGVmdCB3aXRoIEdQTHYyKyBhbmQgUEQuCitMSUNFTlNFID0gIkdQTHYyKyAmIEdQTHYzKyAmIExHUEx2Mi4xKyAmIFBEIgorTElDRU5TRV8ke1BOfSA9ICJHUEx2MisiCitMSUNFTlNFXyR7UE59LWRldiA9ICJHUEx2MisiCitMSUNFTlNFXyR7UE59LXN0YXRpY2RldiA9ICJHUEx2MisiCitMSUNFTlNFXyR7UE59LWRvYyA9ICJHUEx2MisiCitMSUNFTlNFXyR7UE59LWRiZyA9ICJHUEx2MisiCitMSUNFTlNFXyR7UE59LWxvY2FsZSA9ICJHUEx2MisiCitMSUNFTlNFX2xpYmx6bWEgPSAiUEQiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWM0NzViNmM3ZGNhMjM2NzQwYWNlNGJiYTU1M2U4ZTFjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuR1BMdjI7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuR1BMdjM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEdQTHYyLjE7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9nZXRvcHQuYztlbmRsaW5lPTIzO21kNT0yMDY5YjBlZTcxMDU3MmMwM2JiMzExNGU0NTMyY2Q4NCAiCisKK1NSQ19VUkkgPSAiaHR0cDovL3R1a2Fhbmkub3JnL3h6L3h6LSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIzZTQ0Yzc2NmMzZmI0ZjE5ZTM0OGU2NDZmY2Q1Nzc4YSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiOTE4YjY2NDgwNzZlNzRmOGQ3YWUxOWRiNWVlNjYzZGY4MDAwNDllMTg3MjU5ZmFmNWViOTk3YTdiOTc0NjgxIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK1BBQ0tBR0VTID0rICJsaWJsem1hIgorCitGSUxFU19saWJsem1hID0gIiR7bGliZGlyfS9saWJsem1hKiR7U09MSUJTfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitleHBvcnQgQ09ORklHX1NIRUxMPSIvYmluL3NoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvemlwL3ppcC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC96aXAvemlwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjIxYzVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvemlwL3ppcC5pbmMKQEAgLTAsMCArMSwyNiBAQAorU1VNTUFSWSA9ICJDb21wcmVzc29yL2FyY2hpdmVyIGZvciBjcmVhdGluZyBhbmQgbW9kaWZ5aW5nIC56aXAgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmluZm8temlwLm9yZyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworTElDRU5TRSA9ICJCU0QtMy1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0wNGQ0M2M1ZDcwYjQ5NmMwMzIzMDgxMDZlMjZhZTE3ZCIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuaW5mby16aXAub3JnL3B1Yi9pbmZvemlwL3NyYy96aXAke0BkLmdldFZhcignUFYnLDEpLnJlcGxhY2UoJy4nLCAnJyl9LnRneiIKKworRVhUUkFfT0VNQUtFID0gIidDQz0ke0NDfScgJ0JJTkQ9JHtDQ30nICdBUz0ke0NDfSAtYycgJ0NQUD0ke0NQUH0nIFwKKwkJJ0NGTEFHUz0tSS4gLURVTklYICR7Q0ZMQUdTfScgJ0lOU1RBTEw9aW5zdGFsbCcgXAorCQknQklORkxBR1M9MDc1NScgJ0lOU1RBTExfRD1pbnN0YWxsIC1kJyIKKworZG9fY29tcGlsZSgpIHsKKwlvZV9ydW5tYWtlIC1mIHVuaXgvTWFrZWZpbGUgZmxhZ3MgSVpfQlpJUDI9bm9fc3VjaF9kaXJlY3RvcnkKKwlzZWQgLWkgJ3MjTEZMQUdTMT0iIiNMRkxBR1MxPSIke0xERkxBR1N9IiMnIGZsYWdzCisJb2VfcnVubWFrZSAtZiB1bml4L01ha2VmaWxlIGdlbmVyaWMgSVpfQlpJUDI9bm9fc3VjaF9kaXJlY3RvcnkKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIC1mIHVuaXgvTWFrZWZpbGUgcHJlZml4PSR7RH0ke3ByZWZpeH0gXAorCQkgICBCSU5ESVI9JHtEfSR7YmluZGlyfSBNQU5ESVI9JHtEfSR7bWFuZGlyfS9tYW4xIFwKKwkJICAgaW5zdGFsbAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3ppcC96aXBfMy4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvemlwL3ppcF8zLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU5NjExMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3ppcC96aXBfMy4wLmJiCkBAIC0wLDAgKzEsMTUgQEAKK3JlcXVpcmUgemlwLmluYworCitQUj0icjIiCisKKyMgemlwLTIuMzIgc3RpbGwgdXNlcyBkaXJlY3RvcnkgbmFtZSBvZiB6aXAtMi4zMAorUyA9ICIke1dPUktESVJ9L3ppcDMwIgorCitTUkNfVVJJW21kNXN1bV0gPSAiN2I3NDU1MWU2M2Y4ZWU2YWFiNmZiYzg2Njc2YzBkMzciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjBlOGJiMWY5YjdlYjBiMDEyODU0OTVhMjY5OWRmM2E0Yjc2Njc4NGMxNzY1YThmMWFlZWRmNjNjMDgwNjM2OSIKKworIyB6aXAuaW5jIHNldHMgQ0ZMQUdTLCBidXQgd2hhdCBNYWtlZmlsZSBhY3R1YWxseSB1c2VzIGlzCisjIENGTEFHU19OT09QVC4gIEl0IHdpbGwgYWxzbyBmb3JjZSAtTzMgb3B0aW1pemF0aW9uLCBvdmVycmlkaW5nCisjIHdoYXRldmVyIHdlIHNldC4KKyMKK0VYVFJBX09FTUFLRV9hcHBlbmQgPSAiICdDRkxBR1NfTk9PUFQ9LUkuIC1EVU5JWCAke0NGTEFHU30nIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZXBpcGhhbnkvZXBpcGhhbnlfMy4xNi4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZXBpcGhhbnkvZXBpcGhhbnlfMy4xNi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNmZiMjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9lcGlwaGFueS9lcGlwaGFueV8zLjE2LjMuYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJXZWJLaXQgYmFzZWQgd2ViIGJyb3dzZXIgZm9yIEdOT01FIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKKworREVQRU5EUyA9ICJsaWJzb3VwLTIuNCB3ZWJraXRndGsgZ3RrKzMgaXNvLWNvZGVzIGNhLWNlcnRpZmljYXRlcyBhdmFoaSBsaWJub3RpZnkgZ2NyIGxpYnduY2szIFwKKwkgICBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIGdub21lLWRlc2t0b3AzIgorCitpbmhlcml0IGdub21lYmFzZSBnc2V0dGluZ3MKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLXllbHAubTQtZHJvcC10aGUtY2hlY2stZm9yLWl0c3Rvb2wucGF0Y2giCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIzMjk2YWY0NTMyYjgwMTk3NzVmNGI0MGQyMWEzNDFhZSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImQ1MjdmMTc3MDc3OWVjMjJkOTU1YWViMTNiMTQ4YTg0NmEyNjE0NGU0MzNmZjA0ODBjOTgxYWY4MGUyMzkwYjEiCisKK0VYVFJBX09FQ09ORiArPSAiIC0tZGlzYWJsZS1uc3MgLS13aXRoLWRpc3RyaWJ1dG9yLW5hbWU9JHtESVNUUk99IgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICB0b3VjaCAke1N9L2dub21lLWRvYy11dGlscy5tYWtlCisgICAgc2VkIC1pIC1lIHM6aGVscDo6ZyAke1N9L01ha2VmaWxlLmFtCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2FwcGRhdGEgJHtkYXRhZGlyfS9kYnVzLTEgJHtkYXRhZGlyfS9nbm9tZS1zaGVsbC9zZWFyY2gtcHJvdmlkZXJzIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZXBpcGhhbnkvKi93ZWItZXh0ZW5zaW9ucy8uZGVidWcvbGliZXBoeXdlYmV4dGVuc2lvbi5zbyIKK1JERVBFTkRTXyR7UE59ID0gImlzby1jb2RlcyBhZHdhaXRhLWljb24tdGhlbWUiCitSUkVDT01NRU5EU18ke1BOfSA9ICJjYS1jZXJ0aWZpY2F0ZXMiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2VwaXBoYW55L2ZpbGVzLzAwMDEteWVscC5tNC1kcm9wLXRoZS1jaGVjay1mb3ItaXRzdG9vbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2VwaXBoYW55L2ZpbGVzLzAwMDEteWVscC5tNC1kcm9wLXRoZS1jaGVjay1mb3ItaXRzdG9vbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTg1ZDdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZXBpcGhhbnkvZmlsZXMvMDAwMS15ZWxwLm00LWRyb3AtdGhlLWNoZWNrLWZvci1pdHN0b29sLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gMzBmMDNhMjU2ZWZlMzc1YTRkNWMzYTI0YmY0MTY4ZWJmMzgwZTNhYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogVGh1LCAzMCBKdWwgMjAxNSAxNToxMzoyMyArMDMwMAorU3ViamVjdDogW1BBVENIXSB5ZWxwLm00OiBkcm9wIHRoZSBjaGVjayBmb3IgaXRzdG9vbAorCitJdCBpc24ndCB1c2VkIGZvciBhbnl0aGluZyBkdXJpbmcgYnVpbGQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBwcm92aWRlCitpdCBhcyBhIHJlY2lwZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt0YXJiYWxsLXNwZWNpZmljIGlzc3VlXQorLS0tCisgbTQveWVscC5tNCB8IDYgLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9tNC95ZWxwLm00IGIvbTQveWVscC5tNAoraW5kZXggNWRiODQ3Zi4uMWI2ZWRlNCAxMDA2NDQKKy0tLSBhL200L3llbHAubTQKKysrKyBiL200L3llbHAubTQKK0BAIC0yNywxMiArMjcsNiBAQCBBQ19BUkdfV0lUSChbaGVscC1kaXJdLAorIEhFTFBfRElSPSIkd2l0aF9oZWxwX2RpciIKKyBBQ19TVUJTVChIRUxQX0RJUikKKyAKKy1BQ19BUkdfVkFSKFtJVFNUT09MXSwgW1BhdGggdG8gdGhlIGBpdHN0b29sYCBjb21tYW5kXSkKKy1BQ19DSEVDS19QUk9HKFtJVFNUT09MXSwgW2l0c3Rvb2xdLCBbaXRzdG9vbF0pCistaWYgdGVzdCB4IiRJVFNUT09MIiA9IHg7IHRoZW4KKy0gIEFDX01TR19FUlJPUihbaXRzdG9vbCBub3QgZm91bmRdKQorLWZpCistCisgQUNfQVJHX1ZBUihbWE1MTElOVF0sIFtQYXRoIHRvIHRoZSBgeG1sbGludGAgY29tbWFuZF0pCisgQUNfQ0hFQ0tfUFJPRyhbWE1MTElOVF0sIFt4bWxsaW50XSwgW3htbGxpbnRdKQorIGlmIHRlc3QgeCIkWE1MTElOVCIgPSB4OyB0aGVuCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2djci9nY3JfMy4xNi4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2NyL2djcl8zLjE2LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1YjZlNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2djci9nY3JfMy4xNi4wLmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiQSBsaWJyYXJ5IGZvciBiaXRzIG9mIGNyeXB0byBVSSBhbmQgcGFyc2luZyBldGMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmdub21lLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU1Y2E4MTdjY2I3ZDViNWI2NjM1NTY5MGU5YWJjNjA1IgorCitERVBFTkRTID0gImd0ayszIHAxMS1raXQgZ2xpYi0yLjAgbGliZ2NyeXB0IHZhbGEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdub21lYmFzZSBndGstaWNvbi1jYWNoZSBndGstZG9jCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImQ1ODM1NjgwYmUwYjZhODM4ZTAyYTUyOGQ1Mzc4ZDljIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiZWNmZThkZjQxY2M4ODE1ODM2NGJiMTVhZGRjNjcwYjExZTUzOWZlODQ0NzQyOTgzNjI5YmEyMzIzODg4ZDA3NSIKKworRklMRVNfJHtQTn0gKz0gIiBcCisgICAgJHtkYXRhZGlyfS9kYnVzLTEgXAorICAgICR7ZGF0YWRpcn0vZ2NyLTMgXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmLzAwMDEtcGl4b3BzLUJlLW1vcmUtY2FyZWZ1bC1hYm91dC1pbnRlZ2VyLW92ZXJmbG93LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmLzAwMDEtcGl4b3BzLUJlLW1vcmUtY2FyZWZ1bC1hYm91dC1pbnRlZ2VyLW92ZXJmbG93LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlN2MxZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvMDAwMS1waXhvcHMtQmUtbW9yZS1jYXJlZnVsLWFib3V0LWludGVnZXItb3ZlcmZsb3cucGF0Y2gKQEAgLTAsMCArMSw4OSBAQAorRnJvbSBmZmVjODZlZDUwMTBjNWEyYmUxNGY0N2IzM2JjZjRlZDMxNjlhMTk5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+CitEYXRlOiBNb24sIDEzIEp1bCAyMDE1IDAwOjMzOjQwIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIHBpeG9wczogQmUgbW9yZSBjYXJlZnVsIGFib3V0IGludGVnZXIgb3ZlcmZsb3cKKworT3VyIGxvYWRlciBjb2RlIGlzIHN1cHBvc2VkIHRvIGhhbmRsZSBvdXQtb2YtbWVtb3J5IGFuZCBvdmVyZmxvdworc2l0dWF0aW9ucyBncmFjZWZ1bGx5LCByZXBvcnRpbmcgZXJyb3JzIGluc3RlYWQgb2YgYWJvcnRpbmcuIEJ1dAoraWYgeW91IGxvYWQgYW4gaW1hZ2UgYXQgYSBzcGVjaWZpYyBzaXplLCB3ZSBhbHNvIGV4ZWN1dGUgb3VyCitzY2FsaW5nIGNvZGUsIHdoaWNoIHdhcyBub3QgY2FyZWZ1bCBlbm91Z2ggYWJvdXQgb3ZlcmZsb3cgaW4gc29tZQorcGxhY2VzLgorCitUaGlzIGNvbW1pdCBtYWtlcyB0aGUgc2NhbGluZyBjb2RlIHNpbGVudGx5IHJldHVybiBpZiBpdCBmYWlscyB0bworYWxsb2NhdGUgZmlsdGVyIHRhYmxlcy4gVGhpcyBpcyB0aGUgYmVzdCB3ZSBjYW4gZG8sIHNpbmNlCitnZGtfcGl4YnVmX3NjYWxlKCkgaXMgbm90IHRha2luZyBhIEdFcnJvci4KKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MjI5NworCitVcHN0cmVhbS1TdGF0dXM6IGJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IExpIFpob3UgPGxpLnpob3VAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdkay1waXhidWYvcGl4b3BzL3BpeG9wcy5jIHwgICAyMiArKysrKysrKysrKysrKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE3IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nZGstcGl4YnVmL3BpeG9wcy9waXhvcHMuYyBiL2dkay1waXhidWYvcGl4b3BzL3BpeG9wcy5jCitpbmRleCAyOWExYzE0Li5jZTUxNzQ1IDEwMDY0NAorLS0tIGEvZ2RrLXBpeGJ1Zi9waXhvcHMvcGl4b3BzLmMKKysrKyBiL2dkay1waXhidWYvcGl4b3BzL3BpeG9wcy5jCitAQCAtMTI3Miw3ICsxMjcyLDE2IEBAIG1ha2VfZmlsdGVyX3RhYmxlIChQaXhvcHNGaWx0ZXIgKmZpbHRlcikKKyAgIGludCBpX29mZnNldCwgal9vZmZzZXQ7CisgICBpbnQgbl94ID0gZmlsdGVyLT54Lm47CisgICBpbnQgbl95ID0gZmlsdGVyLT55Lm47CistICBpbnQgKndlaWdodHMgPSBnX25ldyAoaW50LCBTVUJTQU1QTEUgKiBTVUJTQU1QTEUgKiBuX3ggKiBuX3kpOworKyAgZ3NpemUgbl93ZWlnaHRzOworKyAgaW50ICp3ZWlnaHRzOworKworKyAgbl93ZWlnaHRzID0gU1VCU0FNUExFICogU1VCU0FNUExFICogbl94ICogbl95OworKyAgaWYgKG5fd2VpZ2h0cyAvIChTVUJTQU1QTEUgKiBTVUJTQU1QTEUgKiBuX3gpICE9IG5feSkKKysgICAgcmV0dXJuIE5VTEw7IC8qIG92ZXJmbG93LCBiYWlsICovCisrCisrICB3ZWlnaHRzID0gZ190cnlfbmV3IChpbnQsIG5fd2VpZ2h0cyk7CisrICBpZiAoIXdlaWdodHMpCisrICAgIHJldHVybiBOVUxMOyAvKiBvdmVyZmxvdywgYmFpbCAqLworIAorICAgZm9yIChpX29mZnNldD0wOyBpX29mZnNldCA8IFNVQlNBTVBMRTsgaV9vZmZzZXQrKykKKyAgICAgZm9yIChqX29mZnNldD0wOyBqX29mZnNldCA8IFNVQlNBTVBMRTsgal9vZmZzZXQrKykKK0BAIC0xMzQ3LDggKzEzNTYsMTEgQEAgcGl4b3BzX3Byb2Nlc3MgKGd1Y2hhciAgICAgICAgICpkZXN0X2J1ZiwKKyAgIGlmICh4X3N0ZXAgPT0gMCB8fCB5X3N0ZXAgPT0gMCkKKyAgICAgcmV0dXJuOyAvKiBvdmVyZmxvdywgYmFpbCBvdXQgKi8KKyAKKy0gIGxpbmVfYnVmcyA9IGdfbmV3IChndWNoYXIgKiwgZmlsdGVyLT55Lm4pOworICAgZmlsdGVyX3dlaWdodHMgPSBtYWtlX2ZpbHRlcl90YWJsZSAoZmlsdGVyKTsKKysgIGlmICghZmlsdGVyX3dlaWdodHMpCisrICAgIHJldHVybjsgLyogb3ZlcmZsb3csIGJhaWwgb3V0ICovCisrCisrICBsaW5lX2J1ZnMgPSBnX25ldyAoZ3VjaGFyICosIGZpbHRlci0+eS5uKTsKKyAKKyAgIGNoZWNrX3NoaWZ0ID0gY2hlY2tfc2l6ZSA/IGdldF9jaGVja19zaGlmdCAoY2hlY2tfc2l6ZSkgOiAwOworIAorQEAgLTE0NjgsNyArMTQ4MCw3IEBAIHRpbGVfbWFrZV93ZWlnaHRzIChQaXhvcHNGaWx0ZXJEaW1lbnNpb24gKmRpbSwKKyAJCSAgIGRvdWJsZSAgICAgICAgICAgICAgICAgc2NhbGUpCisgeworICAgaW50IG4gPSBjZWlsICgxIC8gc2NhbGUgKyAxKTsKKy0gIGRvdWJsZSAqcGl4ZWxfd2VpZ2h0cyA9IGdfbmV3IChkb3VibGUsIFNVQlNBTVBMRSAqIG4pOworKyAgZG91YmxlICpwaXhlbF93ZWlnaHRzID0gZ19tYWxsb2NfbiAoc2l6ZW9mIChkb3VibGUpICogU1VCU0FNUExFLCBuKTsKKyAgIGludCBvZmZzZXQ7CisgICBpbnQgaTsKKyAKK0BAIC0xNTI2LDcgKzE1MzgsNyBAQCBiaWxpbmVhcl9tYWduaWZ5X21ha2Vfd2VpZ2h0cyAoUGl4b3BzRmlsdGVyRGltZW5zaW9uICpkaW0sCisgICAgIH0KKyAKKyAgIGRpbS0+biA9IG47CistICBkaW0tPndlaWdodHMgPSBnX25ldyAoZG91YmxlLCBTVUJTQU1QTEUgKiBuKTsKKysgIGRpbS0+d2VpZ2h0cyA9IGdfbWFsbG9jX24gKHNpemVvZiAoZG91YmxlKSAqIFNVQlNBTVBMRSwgbik7CisgCisgICBwaXhlbF93ZWlnaHRzID0gZGltLT53ZWlnaHRzOworIAorQEAgLTE2MTcsNyArMTYyOSw3IEBAIGJpbGluZWFyX2JveF9tYWtlX3dlaWdodHMgKFBpeG9wc0ZpbHRlckRpbWVuc2lvbiAqZGltLAorIAkJCSAgIGRvdWJsZSAgICAgICAgICAgICAgICAgc2NhbGUpCisgeworICAgaW50IG4gPSBjZWlsICgxL3NjYWxlICsgMy4wKTsKKy0gIGRvdWJsZSAqcGl4ZWxfd2VpZ2h0cyA9IGdfbmV3IChkb3VibGUsIFNVQlNBTVBMRSAqIG4pOworKyAgZG91YmxlICpwaXhlbF93ZWlnaHRzID0gZ19tYWxsb2NfbiAoc2l6ZW9mIChkb3VibGUpICogU1VCU0FNUExFLCBuKTsKKyAgIGRvdWJsZSB3OworICAgaW50IG9mZnNldCwgaTsKKyAKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvZXh0ZW5kaW5nLWxpYmluc3RhbGwtZGVwZW5kZW5jaWVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL2V4dGVuZGluZy1saWJpbnN0YWxsLWRlcGVuZGVuY2llcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGJkY2VkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL2V4dGVuZGluZy1saWJpbnN0YWxsLWRlcGVuZGVuY2llcy5wYXRjaApAQCAtMCwwICsxLDQyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhpcyBwYXRjaCBmaXhlcyBwYXJhbGxlbCBpbnN0YWxsIGlzc3VlIHRoYXQgbGliIGxpYnBpeGJ1ZmxvYWRlci1wbmcubGEKK2RlcGVuZHMgb24gbGliZ2RrX3BpeGJ1Zi0yLjAubGEgd2hpY2ggd2lsbCBiZSByZWdlbmVyYXRlZCBkdXJpbmcgaW5zdGEtCitsbGF0aW9uLCBpZiBsaWJnZGtfcGl4YnVmLTIuMC5sYSBpcyByZWdlbmVyYXRpbmcgYW5kIGF0IHRoZSBzYW1lIHRpbWUKK2xpYnBpeGJ1ZmxvYWRlci1wbmcubGEgbGlua3MgaXQsIHRoZSBlcnJvciB3aWxsIGhhcHBlbi4KKworRXJyb3IgbWVzc2FnZSBpczoKKyogdXNyL2Jpbi9sZDogY2Fubm90IGZpbmQgLWxnZGtfcGl4YnVmLTIuMAorKiBjb2xsZWN0MjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworCitNYWtlIGFuIGV4cGxpY2l0IGRlcGVuZGVuY3kgdG8gdGhlIGxpYnMgaW5zdGFsbCB0YXJnZXRzIHdvdWxkIGZpeCB0aGlzCitpc3N1ZS4KKworU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CistLS0KKyBnZGstcGl4YnVmL01ha2VmaWxlLmFtIHwgICAgMSArCisgbGliZGVwcy5tayAgICAgICAgICAgICB8ICAgIDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmRlcHMubWsKKworZGlmZiAtLWdpdCBhL2dkay1waXhidWYvTWFrZWZpbGUuYW0gYi9nZGstcGl4YnVmL01ha2VmaWxlLmFtCitpbmRleCA5NWE5M2E4Li5kYjQ0Y2FlIDEwMDY0NAorLS0tIGEvZ2RrLXBpeGJ1Zi9NYWtlZmlsZS5hbQorKysrIGIvZ2RrLXBpeGJ1Zi9NYWtlZmlsZS5hbQorQEAgLTc4MywzICs3ODMsNCBAQCBsb2FkZXJzLmNhY2hlOgorIGVuZGlmCisgCisgLWluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9naXQubWsKKystaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2xpYmRlcHMubWsKK2RpZmYgLS1naXQgYS9saWJkZXBzLm1rIGIvbGliZGVwcy5taworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQ3YTEwYTgKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYmRlcHMubWsKK0BAIC0wLDAgKzEsMyBAQAorKyMgRXh0ZW5kaW5nIGRlcGVuZGVuY2llcyBvZiBpbnN0YWxsLWxvYWRlckxUTElCUkFSSUVTOgorKyMgVGhlICQobGliLUxUTElCUkFSSUVTKSBpcyBuZWVkZWQgYnkgcmVsaW5raW5nICQobG9hZGVyX0xUTElCUkFSSUVTKQorK2luc3RhbGwtbG9hZGVyTFRMSUJSQVJJRVM6IGluc3RhbGwtbGliTFRMSUJSQVJJRVMKKy0tIAorMS43LjYuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvZmF0YWwtbG9hZGVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL2ZhdGFsLWxvYWRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDE0NmM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL2ZhdGFsLWxvYWRlci5wYXRjaApAQCAtMCwwICsxLDc5IEBACitJZiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzcGVjaWZpZWQgc2V0IHRoZSByZXR1cm4gdmFsdWUgZnJvbSBtYWluKCkgdG8KK25vbi16ZXJvIGlmIHRoZSBsb2FkZXIgaGFkIGVycm9ycyAobWlzc2luZyBsaWJyYXJpZXMsIGdlbmVyYWxseSkuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2dkay1waXhidWYvcXVlcnlsb2FkZXJzLmMgYi9nZGstcGl4YnVmL3F1ZXJ5bG9hZGVycy5jCitpbmRleCBhOWNhMDE1Li4zOTU2NzRhIDEwMDY0NAorLS0tIGEvZ2RrLXBpeGJ1Zi9xdWVyeWxvYWRlcnMuYworKysrIGIvZ2RrLXBpeGJ1Zi9xdWVyeWxvYWRlcnMuYworQEAgLTE0Niw3ICsxNDYsNyBAQCB3cml0ZV9sb2FkZXJfaW5mbyAoR1N0cmluZyAqY29udGVudHMsIGNvbnN0IGNoYXIgKnBhdGgsIEdka1BpeGJ1ZkZvcm1hdCAqaW5mbykKKyAgICAgICAgIGdfc3RyaW5nX2FwcGVuZF9jIChjb250ZW50cywgJ1xuJyk7CisgfQorIAorLXN0YXRpYyB2b2lkCisrc3RhdGljIGdib29sZWFuCisgcXVlcnlfbW9kdWxlIChHU3RyaW5nICpjb250ZW50cywgY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlKQorIHsKKyAgICAgICAgIGNoYXIgKnBhdGg7CitAQCAtMTU1LDYgKzE1NSw3IEBAIHF1ZXJ5X21vZHVsZSAoR1N0cmluZyAqY29udGVudHMsIGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZSkKKyAgICAgICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICgqZmlsbF92dGFibGUpICAgKEdka1BpeGJ1Zk1vZHVsZSAqbW9kdWxlKTsKKyAgICAgICAgIGdwb2ludGVyIGZpbGxfaW5mb19wdHI7CisgICAgICAgICBncG9pbnRlciBmaWxsX3Z0YWJsZV9wdHI7CisrICAgICAgICBnYm9vbGVhbiByZXQgPSBUUlVFOworIAorICAgICAgICAgaWYgKGdfcGF0aF9pc19hYnNvbHV0ZSAoZmlsZSkpCisgICAgICAgICAgICAgICAgIHBhdGggPSBnX3N0cmR1cCAoZmlsZSk7CitAQCAtMjA0LDEwICsyMDUsMTMgQEAgcXVlcnlfbW9kdWxlIChHU3RyaW5nICpjb250ZW50cywgY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19tb2R1bGVfZXJyb3IoKSk7CisgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICBnX2ZwcmludGYgKHN0ZGVyciwgIkNhbm5vdCBsb2FkIGxvYWRlciAlc1xuIiwgcGF0aCk7CisrICAgICAgICAgICAgICAgIHJldCA9IEZBTFNFOworICAgICAgICAgfQorICAgICAgICAgaWYgKG1vZHVsZSkKKyAgICAgICAgICAgICAgICAgZ19tb2R1bGVfY2xvc2UgKG1vZHVsZSk7CisgICAgICAgICBnX2ZyZWUgKHBhdGgpOworKworKyAgICAgICAgcmV0dXJuIHJldDsKKyB9CisgCisgI2lmZGVmIEdfT1NfV0lOMzIKK0BAIC0yNTcsNiArMjYxLDcgQEAgaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgICAgICAgIEdTdHJpbmcgKmNvbnRlbnRzOworICAgICAgICAgZ2NoYXIgKmNhY2hlX2ZpbGUgPSBOVUxMOworICAgICAgICAgZ2ludCBmaXJzdF9maWxlID0gMTsKKysgICAgICAgIGdib29sZWFuIHN1Y2Nlc3MgPSBUUlVFOworIAorICNpZmRlZiBHX09TX1dJTjMyCisgICAgICAgICBnY2hhciAqbGliZGlyOworQEAgLTM2MCw3ICszNjUsOCBAQCBpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBsZW4gPSBzdHJsZW4gKGRlbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiA+IFNPRVhUX0xFTiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNtcCAoZGVudCArIGxlbiAtIFNPRVhUX0xFTiwgU09FWFQpID09IDApIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlfbW9kdWxlIChjb250ZW50cywgcGF0aCwgZGVudCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcXVlcnlfbW9kdWxlIChjb250ZW50cywgcGF0aCwgZGVudCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IEZBTFNFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICBnX2Rpcl9jbG9zZSAoZGlyKTsKK0BAIC0zNzgsNyArMzg0LDggQEAgaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbmZpbGVuYW1lID0gZ19sb2NhbGVfdG9fdXRmOCAoaW5maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIE5VTEwsIE5VTEwsIE5VTEwpOworICNlbmRpZgorLSAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5X21vZHVsZSAoY29udGVudHMsIGN3ZCwgaW5maWxlbmFtZSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFxdWVyeV9tb2R1bGUgKGNvbnRlbnRzLCBjd2QsIGluZmlsZW5hbWUpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IEZBTFNFOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIGdfZnJlZSAoY3dkKTsKKyAgICAgICAgIH0KK0BAIC0zOTQsNSArNDAxLDggQEAgaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgZ19wcmludCAoIiVzXG4iLCBjb250ZW50cy0+c3RyKTsKKyAKKy0gICAgICAgIHJldHVybiAwOworKyAgICAgICAgaWYgKGdfZ2V0ZW52ICgiR0RLX1BJWEJVRl9GQVRBTF9MT0FERVIiKSkKKysgICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MgPyAwIDogMTsKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjY2E2MmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvaGFyZGNvZGVkX2xpYnRvb2wucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogZ2RrLXBpeGJ1Zi0yLjIyLjEvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2RrLXBpeGJ1Zi0yLjIyLjEub3JpZy9jb25maWd1cmUuYWMJMjAxMC0xMS0yNiAwOTowNjozNC4wMDAwMDAwMDAgKzA4MDAKKysrKyBnZGstcGl4YnVmLTIuMjIuMS9jb25maWd1cmUuYWMJMjAxMC0xMS0yNiAwOTowNzozMy4wMDAwMDAwMDAgKzA4MDAKK0BAIC0yODcsNyArMjg3LDcgQEAKKyBjYXNlICRlbmFibGVfZXhwbGljaXRfZGVwcyBpbgorICAgYXV0bykKKyAgICAgZXhwb3J0IFNFRAorLSAgICBkZXBsaWJzX2NoZWNrX21ldGhvZD1gKC4vbGlidG9vbCAtLWNvbmZpZzsgZWNobyAnZXZhbCBlY2hvIFwiJGRlcGxpYnNfY2hlY2tfbWV0aG9kXCInKSB8IHNoYAorKyAgICBkZXBsaWJzX2NoZWNrX21ldGhvZD1gKC4vJGhvc3RfYWxpYXMtbGlidG9vbCAtLWNvbmZpZzsgZWNobyAnZXZhbCBlY2hvIFwiJGRlcGxpYnNfY2hlY2tfbWV0aG9kXCInKSB8IHNoYAorICAgICBpZiB0ZXN0ICJ4JGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAnIT0nIHhwYXNzX2FsbCB8fCB0ZXN0ICJ4JGVuYWJsZV9zdGF0aWMiID0geHllcyA7IHRoZW4KKyAgICAgICBlbmFibGVfZXhwbGljaXRfZGVwcz15ZXMKKyAgICAgZWxzZQorQEAgLTQ4NCw3ICs0ODQsNyBAQAorICAgICBkbmwgTm93IHdlIGNoZWNrIHRvIHNlZSBpZiBvdXIgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGliIGRlcHMKKyAgICAgZG5sIChpbiBhIHJhdGhlciB1Z2x5IHdheSBldmVuKQorICAgICBpZiAkZHlud29ya3M7IHRoZW4KKy0gICAgICAgIHBpeGJ1Zl9saWJ0b29sX2NvbmZpZz0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gLi9saWJ0b29sIC0tY29uZmlnIgorKyAgICAgICAgcGl4YnVmX2xpYnRvb2xfY29uZmlnPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSAuLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWciCisgICAgICAgICBwaXhidWZfZGVwbGlic19jaGVjaz1gJHBpeGJ1Zl9saWJ0b29sX2NvbmZpZyB8IFwKKyAgICAgICAgICAgICBncmVwICdeW1thLXpfXV0qY2hlY2tbW2Etel9dXSpfbWV0aG9kPVtbJ1wnJyJdXScgfCBcCisgICAgICAgICAgICAgc2VkICdzLy4qW1snXCcnIl1dXCguKlwpW1snXCcnIl1dJC9cMS8nYAorQEAgLTk1Nyw3ICs5NTcsNyBAQAorICMgV2UgYXJlIHVzaW5nIGdtb2R1bGUtbm8tZXhwb3J0IG5vdywgYnV0IEknbSBsZWF2aW5nIHRoZSBzdHJpcHBpbmcKKyAjIGNvZGUgaW4gcGxhY2UgZm9yIG5vdywgc2luY2UgcGFuZ28gYW5kIGF0ayBzdGlsbCByZXF1aXJlIGdtb2R1bGUuCisgZXhwb3J0IFNFRAorLWV4cG9ydF9keW5hbWljPWAoLi9saWJ0b29sIC0tY29uZmlnOyBlY2hvIGV2YWwgZWNobyBcXCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMpIHwgc2hgCisrZXhwb3J0X2R5bmFtaWM9YCguLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWc7IGVjaG8gZXZhbCBlY2hvIFxcJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYykgfCBzaGAKKyBpZiB0ZXN0IC1uICIkZXhwb3J0X2R5bmFtaWMiOyB0aGVuCisgICBHREtfUElYQlVGX0RFUF9MSUJTPWBlY2hvICRHREtfUElYQlVGX0RFUF9MSUJTIHwgc2VkIC1lICJzLyRleHBvcnRfZHluYW1pYy8vImAKKyBmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY5MDcyMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi9ydW4tcHRlc3QKQEAgLTAsMCArMSwzIEBACisjISAvYmluL3NoCisKK2dub21lLWRlc2t0b3AtdGVzdGluZy1ydW5uZXIgZ2RrLXBpeGJ1ZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmXzIuMzAuOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zl8yLjMwLjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdjMmRjZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zl8yLjMwLjguYmIKQEAgLTAsMCArMSw5NyBAQAorU1VNTUFSWSA9ICJJbWFnZSBsb2FkaW5nIGxpYnJhcnkgZm9yIEdUSysiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmd0ay5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCisKK0xJQ0VOU0UgPSAiTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmLmg7ZW5kbGluZT0yNjttZDU9NzJiMzlkYTdjYmRkZTJlNjY1MzI5ZmVmNjE4ZTFkNmIiCisKK1NFQ1RJT04gPSAibGlicyIKKworREVQRU5EUyA9ICJnbGliLTIuMCIKK0RFUEVORFNfYXBwZW5kX2xpbnV4c3RkYmFzZSA9ICIgdmlydHVhbC9saWJ4MTEiCisKK01BSl9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKKworU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vJHtCUE59LyR7TUFKX1ZFUn0vJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9oYXJkY29kZWRfbGlidG9vbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9leHRlbmRpbmctbGliaW5zdGFsbC1kZXBlbmRlbmNpZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL2ZhdGFsLWxvYWRlci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXBpeG9wcy1CZS1tb3JlLWNhcmVmdWwtYWJvdXQtaW50ZWdlci1vdmVyZmxvdy5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjRmZWQwZDU0NDMyZjFiNjlmYzZlNjZlNjA4YmQ1NTQyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ4NTM4MzA2MTYxMTNkYjQ0MzU4Mzc5OTJjMGFlYmQ5NGNiYjk5M2M0NGRjNTUwNjNjZWU3ZjcyYTdiZWY4YmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0IHBpeGJ1ZmNhY2hlIHB0ZXN0LWdub21lCisKK0xJQlYgPSAiMi4xMC4wIgorCitHREtfUElYQlVGX0xPQURFUlMgPz0gInBuZyBqcGVnIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtHREtfUElYQlVGX0xPQURFUlN9IgorUEFDS0FHRUNPTkZJR19saW51eHN0ZGJhc2UgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSAke0dES19QSVhCVUZfTE9BREVSU30iCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZSA9ICIke0dES19QSVhCVUZfTE9BREVSU30iCisKK1BBQ0tBR0VDT05GSUdbcG5nXSA9ICItLXdpdGgtbGlicG5nLC0td2l0aG91dC1saWJwbmcsbGlicG5nIgorUEFDS0FHRUNPTkZJR1tqcGVnXSA9ICItLXdpdGgtbGlianBlZywtLXdpdGhvdXQtbGlianBlZyxqcGVnIgorUEFDS0FHRUNPTkZJR1t0aWZmXSA9ICItLXdpdGgtbGlidGlmZiwtLXdpdGhvdXQtbGlidGlmZix0aWZmIgorUEFDS0FHRUNPTkZJR1tqcGVnMjAwMF0gPSAiLS13aXRoLWxpYmphc3BlciwtLXdpdGhvdXQtbGliamFzcGVyLGphc3BlciIKKworIyBVc2UgR0lPIHRvIHNuaWZmIGltYWdlIGZvcm1hdCBpbnN0ZWFkIG9mIHRyeWluZyBhbGwgbG9hZGVycworUEFDS0FHRUNPTkZJR1tnaW8tc25pZmZdID0gIi0tZW5hYmxlLWdpby1zbmlmZmluZywtLWRpc2FibGUtZ2lvLXNuaWZmaW5nLCxzaGFyZWQtbWltZS1pbmZvIgorUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0td2l0aC14MTEsLS13aXRob3V0LXgxMSx2aXJ0dWFsL2xpYngxMSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIgorCitQQUNLQUdFUyA9KyAiJHtQTn0teGxpYiIKKworRklMRVNfJHtQTn0teGxpYiA9ICIke2xpYmRpcn0vKnBpeGJ1Zl94bGliKiR7U09MSUJTfSIKK0FMTE9XX0VNUFRZXyR7UE59LXhsaWIgPSAiMSIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L2dkay1waXhidWYtcXVlcnktbG9hZGVycyBcCisJJHtiaW5kaXJ9L2dkay1waXhidWYtcGl4ZGF0YSBcCisJJHtsaWJkaXJ9L2xpYiouc28uKiIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIgXAorCSR7YmluZGlyfS9nZGstcGl4YnVmLWNzb3VyY2UgXAorCSR7aW5jbHVkZWRpcn0vKiBcCisJJHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycy8qLmxhIFwKKyIKKworRklMRVNfJHtQTn0tZGJnICs9ICIgXAorICAgICAgICAke2xpYmRpcn0vLmRlYnVnLyogXAorCSR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9L2xvYWRlcnMvLmRlYnVnLyogXAorIgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJeZ2RrLXBpeGJ1Zi1sb2FkZXItLioiCitQQUNLQUdFU19EWU5BTUlDX2NsYXNzLW5hdGl2ZSA9ICIiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBwb3N0aW5zdF9waXhidWZsb2FkZXIgPSBkLmdldFZhcigicG9zdGluc3RfcGl4YnVmbG9hZGVyIiwgVHJ1ZSkKKworICAgIGxvYWRlcnNfcm9vdCA9IGQuZXhwYW5kKCcke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzJykKKworICAgIHBhY2thZ2VzID0gJyAnLmpvaW4oZG9fc3BsaXRfcGFja2FnZXMoZCwgbG9hZGVyc19yb290LCAnXmxpYnBpeGJ1ZmxvYWRlci0oLiopXC5zbyQnLCAnZ2RrLXBpeGJ1Zi1sb2FkZXItJXMnLCAnR0RLIHBpeGJ1ZiBsb2FkZXIgZm9yICVzJykpCisgICAgZC5zZXRWYXIoJ1BJWEJVRl9QQUNLQUdFUycsIHBhY2thZ2VzKQorCisgICAgIyBUaGUgdGVzdCBzdWl0ZSBleGVyY2lzZXMgYWxsIHRoZSBsb2FkZXJzLCBzbyBlbnN1cmUgdGhleSBhcmUgYWxsCisgICAgIyBkZXBlbmRlbmNpZXMgb2YgdGhlIHB0ZXN0IHBhY2thZ2UuCisgICAgZC5hcHBlbmRWYXIoIlJERVBFTkRTX2dkay1waXhidWYtcHRlc3QiLCAiICIgKyBwYWNrYWdlcykKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWZpbmQgJHtEfSR7bGliZGlyfSAtbmFtZSAibGlicGl4YnVmbG9hZGVyLSoubGEiIC1leGVjIHJtIFx7XH0gXDsKKworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2dkay1waXhidWYtY3NvdXJjZSBcCisJCUdES19QSVhCVUZfTU9EVUxFX0ZJTEU9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycy5jYWNoZQorCisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1waXhkYXRhIFwKKwkJR0RLX1BJWEJVRl9NT0RVTEVfRklMRT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzLmNhY2hlCisKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9nZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMgXAorCQlHREtfUElYQlVGX01PRFVMRV9GSUxFPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9L2xvYWRlcnMuY2FjaGUgXAorCQlHREtfUElYQlVGX01PRFVMRURJUj0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzCit9CitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lLWRlc2t0b3AvZ25vbWUtZGVza3RvcDNfMy4xNi4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUtZGVza3RvcC9nbm9tZS1kZXNrdG9wM18zLjE2LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYyZjA2YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lLWRlc2t0b3AvZ25vbWUtZGVza3RvcDNfMy4xNi4yLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiR05PTUUgbGlicmFyeSBmb3IgcmVhZGluZyAuZGVza3RvcCBmaWxlcyIKK1NFQ1RJT04gPSAieDExL2dub21lIgorTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiIKKworQlBOID0gImdub21lLWRlc2t0b3AiCisKK2luaGVyaXQgZ25vbWUgcGtnY29uZmlnCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJhYjViZjRjYzk0YWQ2MzYzOWY0MmFkY2MxNTQyYjFmMCIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjNhOGYxOTZiNDZlYjlkYmQzYmEyYWZiOGZiNWZlZjZhODgyNTUzOWQ0NDlhMDIxODEzMTEyNDJlMjIyMjdiZDAiCisKK0RFUEVORFMgKz0gImdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMgZ2NvbmYgbGlieHJhbmRyIHZpcnR1YWwvbGlieDExIGd0ayszIGdsaWItMi4wIGdub21lLWRvYy11dGlscyBnbm9tZS1jb21tb24gc3RhcnR1cC1ub3RpZmljYXRpb24gaXNvLWNvZGVzIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWRlc2t0b3AtZG9jcyIKKworUEFDS0FHRVMgPSsgImxpYmdub21lLWRlc2t0b3AzIgorRklMRVNfbGliZ25vbWUtZGVza3RvcDMgPSAiJHtsaWJkaXJ9L2xpYioke1NPTElCU30gJHtkYXRhZGlyfS9saWJnbm9tZS1kZXNrdG9wKi9wbnAuaWRzICR7ZGF0YWRpcn0vZ25vbWUvKnhtbCIKKworUlJFQ09NTUVORFNfbGliZ25vbWUtZGVza3RvcDMgKz0gImdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2Fkd2FpdGEtaWNvbi10aGVtZS9DcmVhdGUtc3ltbGlua3Mtd2hlbi1pbnN0YWxsaW5nLWN1cnNvcnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9hZHdhaXRhLWljb24tdGhlbWUvQ3JlYXRlLXN5bWxpbmtzLXdoZW4taW5zdGFsbGluZy1jdXJzb3JzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NmY5YzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9hZHdhaXRhLWljb24tdGhlbWUvQ3JlYXRlLXN5bWxpbmtzLXdoZW4taW5zdGFsbGluZy1jdXJzb3JzLnBhdGNoCkBAIC0wLDAgKzEsMTc4IEBACitDcmVhdGUgc3ltbGlua3Mgd2hlbiBpbnN0YWxsaW5nIGN1cnNvcnMKKworVGhpcyBjdXRzIGRvd24gdGhlIGluc3RhbGxlZCBzaXplIGJ5IH4xMU1CLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorCisKK0Zyb20gMWU4YzBkZDBhMmRlNWUxZDVmZjYwZmYxMWYxMzFlODg1MTBjN2Y1MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT89RDA9QTA9RDE9ODM9RDE9ODE9RDA9QkI9RDA9QjA9RDA9QkQ9MjA9RDA9OTg9RDA9QjY9RDA9QjE/PQorID0/VVRGLTg/cT89RDE9ODM9RDA9QkI9RDA9QjA9RDE9ODI9RDA9QkU9RDA9QjI/PSA8bHJuMTk4NkBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDE2IE1heSAyMDE1IDA3OjQ5OjE5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIENyZWF0ZSBzeW1saW5rcyB3aGVuIGluc3RhbGxpbmcgY3Vyc29ycworCitBbHNvIHN1cHBvcnQgY3JlYXRpbmcgc3ltbGlua3MgZm9yIFczMiBjdXJzb3JzIChpbmNsdWRpbmcgTCBhbmQgWEwgdmFyaWFudHMpLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5MjIzCistLS0KKyBNYWtlZmlsZS5hbSAgfCA5MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBjb25maWd1cmUuYWMgfCAyNCArKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxMTcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggZmVkMzk3Mi4uNGQwMDI2OCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTYsNiArNiwxNyBAQCBBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNCAke0FDTE9DQUxfRkxBR1N9CisgCisgY3Vyc29yZGlyID0gJChkYXRhZGlyKS9pY29ucy9BZHdhaXRhL2N1cnNvcnMKKyBjdXJzb3JfREFUQSA9ICQod2lsZGNhcmQgJChzcmNkaXIpL0Fkd2FpdGEvY3Vyc29ycy8qKQorK2lmIEVOQUJMRV9MX1hMX1ZBUklBTlRTCisrY3Vyc29ybGRpciA9ICQoZGF0YWRpcikvaWNvbnMvQWR3YWl0YS1MYXJnZS9jdXJzb3JzCisrY3Vyc29ybF9EQVRBID0gJCh3aWxkY2FyZCAkKHNyY2RpcikvQWR3YWl0YS1MYXJnZS9jdXJzb3JzLyopCisrY3Vyc29yeGxkaXIgPSAkKGRhdGFkaXIpL2ljb25zL0Fkd2FpdGEtRXh0cmFMYXJnZS9jdXJzb3JzCisrY3Vyc29yeGxfREFUQSA9ICQod2lsZGNhcmQgJChzcmNkaXIpL0Fkd2FpdGEtRXh0cmFMYXJnZS9jdXJzb3JzLyopCisrZWxzZQorK2N1cnNvcmxkaXIgPQorK2N1cnNvcmxfREFUQSA9CisrY3Vyc29yeGxkaXIgPQorK2N1cnNvcnhsX0RBVEEgPQorK2VuZGlmCisgCisgdGhlbWVfaW5fZmlsZXMgPSBpbmRleC50aGVtZS5pbi5pbgorIHRoZW1lX0RBVEEgPSAkKHRoZW1lX2luX2ZpbGVzOi50aGVtZS5pbi5pbj0udGhlbWUpCitAQCAtOTksNiArMTEwLDg4IEBAIGluc3RhbGwtZGF0YS1sb2NhbDoKKyAJZmkKKyAKKyBpbnN0YWxsLWRhdGEtaG9vazoKKysJY2QgJChERVNURElSKSQoY3Vyc29yZGlyKSAmJiBcCisrCWlmIHRlc3QgIngkKGVuYWJsZV93MzJfY3Vyc29ycykiID0gInh5ZXMiOyBcCisrCXRoZW4gXAorKwkJY3VyPS5jdXIgJiYgXAorKwkJYW5pPS5hbmk7IFwKKysJZWxzZSBcCisrCQljdXI9ICYmIFwKKysJCWFuaT0gOyBcCisrCWZpOyBcCisrCWlmIHRlc3QgIngkKGVuYWJsZV9sX3hsX3ZhcmlhbnRzKSIgPSAieHllcyI7IFwKKysJdGhlbiBcCisrCQl0aGVtZWRpcnM9IiQoY3Vyc29yZGlyKSAkKGN1cnNvcmxkaXIpICQoY3Vyc29yeGxkaXIpIjsgXAorKwllbHNlIFwKKysJCXRoZW1lZGlycz0iJChjdXJzb3JkaXIpIjsgXAorKwlmaTsgXAorKwlmb3IgZCBpbiAkJHRoZW1lZGlyczsgXAorKwlkbyBcCisrCQljZCAkKERFU1RESVIpJCRkICYmIFwKKysJCWVjaG8gQ3JlYXRpbmcgc3ltbGlua3MgaW4gJChERVNURElSKSQkZCAmJiBcCisrCQkkKExOX1MpIC1mICBkb3Rib3gkJGN1cgkJCWRyYXBlZF9ib3gkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBkb3Rib3gkJGN1cgkJCWljb24kJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBkb3Rib3gkJGN1cgkJCXRhcmdldCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGRvdGJveCQkY3VyCQkJZG90X2JveF9tYXNrJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgWF9jdXJzb3IkJGN1cgkJcGlyYXRlJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgbGVmdF9wdHJfd2F0Y2gkJGFuaQkJMDhlOGUxYzk1ZmUyZmMwMWY5NzZmMWUwNjNhMjRjY2QkJGFuaSAmJiBcCisrCQkkKExOX1MpIC1mICBsZWZ0X3B0cl93YXRjaCQkYW5pCQkzZWNiNjEwYzFiZjI0MTBmNDQyMDBmNDhjNDBkMzU5OSQkYW5pICYmIFwKKysJCSQoTE5fUykgLWYgIGxlZnRfcHRyJCRjdXIJCWFycm93JCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgbGVmdF9wdHIkJGN1cgkJdG9wX2xlZnRfYXJyb3ckJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICByaWdodF9wdHIkJGN1cgkJZHJhZnRfbGFyZ2UkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICByaWdodF9wdHIkJGN1cgkJZHJhZnRfc21hbGwkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBtb3ZlJCRjdXIJCQk0NDk4ZjBlMGMxOTM3ZmZlMDFmZDA2Zjk3MzY2NTgzMCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIG1vdmUkJGN1cgkJCTkwODEyMzczODNkOTBlNTA5YWEwMGYwMDE3MGU5NjhmJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgY29weSQkY3VyCQkJMTA4MWUzNzI4M2Q5MDAwMDgwMDAwM2MwN2YzZWY2YmYkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBjb3B5JCRjdXIJCQk2NDA3YjBlOTQxODE3OTA1MDFmZDFlMTY3YjQ3NDg3MiQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGNyb3NzJCRjdXIJCQljcm9zc19yZXZlcnNlJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgY3Jvc3MkJGN1cgkJCWRpYW1vbmRfY3Jvc3MkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBoYW5kMSQkY3VyCQkJZ3JhYiQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGhhbmQyJCRjdXIJCQk5ZDgwMDc4OGYxYjA4ODAwYWU4MTAyMDIzODBhMDgyMiQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGhhbmQyJCRjdXIJCQllMjkyODVlNjM0MDg2MzUyOTQ2YTBlNzA5MGQ3MzEwNiQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGhhbmQyJCRjdXIJCQloYW5kJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgZ3JhYmJpbmckJGN1cgkJZmxldXIkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBxdWVzdGlvbl9hcnJvdyQkY3VyCQlkOWNlMGFiNjA1Njk4ZjMyMDQyNzY3N2I0NThhZDYwYiQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHF1ZXN0aW9uX2Fycm93JCRjdXIJCTVjNmNkOThiM2YzZWJjYjFmOWM3ZjFjMjA0NjMwNDA4JCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgcXVlc3Rpb25fYXJyb3ckJGN1cgkJaGVscCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHF1ZXN0aW9uX2Fycm93JCRjdXIJCWxlZnRfcHRyX2hlbHAkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBsaW5rJCRjdXIJCQkzMDg1YTBlMjg1NDMwODk0OTQwNTI3MDMyZjhiMjZkZiQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGxpbmskJGN1cgkJCTY0MGZiMGU3NDE5NTc5MTUwMWZkMWVkNTdiNDE0ODdmJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgY3Jvc3NlZF9jaXJjbGUkJGN1cgkJMDNiNmUwZmNiMzQ5OTM3NGE4NjdjMDQxZjUyMjk4ZjAkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBmZF9kb3VibGVfYXJyb3ckJGN1cglmY2YxYzNjN2NkNDQ5MWQ4MDFmMWUxYzc4ZjEwMDAwMCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGJkX2RvdWJsZV9hcnJvdyQkY3VyCWM3MDg4ZjBmM2U2YzgwODgyMzZlZjhlMWUzZTcwMDAwJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgc2JfaF9kb3VibGVfYXJyb3ckJGN1ciAJaF9kb3VibGVfYXJyb3ckJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBzYl9oX2RvdWJsZV9hcnJvdyQkY3VyCTE0ZmVmNzgyZDAyNDQwODg0MzkyOTQyYzExMjA1MjMwJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgaF9kb3VibGVfYXJyb3ckJGN1cgkJMDI4MDA2MDMwZTBlN2ViZmZjN2Y3MDcwYzA2MDAxNDAkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBzYl92X2RvdWJsZV9hcnJvdyQkY3VyIAlkb3VibGVfYXJyb3ckJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBzYl92X2RvdWJsZV9hcnJvdyQkY3VyIAl2X2RvdWJsZV9hcnJvdyQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHNiX3ZfZG91YmxlX2Fycm93JCRjdXIJMjg3MGEwOTA4MmMxMDMwNTA4MTBmZmRmZmZmZTAyMDQkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICB2X2RvdWJsZV9hcnJvdyQkY3VyCQkwMDAwODE2MDAwMDAwNjgxMDAwMDQwODA4MDAxMDEwMiQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGxlZnRfcHRyJCRjdXIJCWRlZmF1bHQkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBoYW5kJCRjdXIJCQlwb2ludGVyJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgbGVmdF9wdHJfd2F0Y2gkJGFuaQkJcHJvZ3Jlc3MkJGFuaSAmJiBcCisrCQkkKExOX1MpIC1mICB3YXRjaCQkYW5pCQkJd2FpdCQkYW5pICYmIFwKKysJCSQoTE5fUykgLWYgIGNyb3NzJCRjdXIJCQljcm9zc2hhaXIkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICB4dGVybSQkY3VyCQkJdGV4dCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGRuZC1saW5rJCRjdXIJCWFsaWFzJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgZG5kLWNvcHkkJGN1cgkJY29weSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGRuZC1ub25lJCRjdXIJCW5vLWRyb3AkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBjcm9zc2VkX2NpcmNsZSQkY3VyCQlub3QtYWxsb3dlZCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHNiX2hfZG91YmxlX2Fycm93JCRjdXIJY29sLXJlc2l6ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHNiX3ZfZG91YmxlX2Fycm93JCRjdXIJcm93LXJlc2l6ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHRvcF9zaWRlJCRjdXIJCW4tcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgcmlnaHRfc2lkZSQkY3VyCQllLXJlc2l6ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGJvdHRvbV9zaWRlJCRjdXIJCXMtcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgbGVmdF9zaWRlJCRjdXIJCXctcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgdG9wX3JpZ2h0X2Nvcm5lciQkY3VyCW5lLXJlc2l6ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHRvcF9sZWZ0X2Nvcm5lciQkY3VyCW53LXJlc2l6ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGJvdHRvbV9yaWdodF9jb3JuZXIkJGN1cglzZS1yZXNpemUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBib3R0b21fbGVmdF9jb3JuZXIkJGN1cglzdy1yZXNpemUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBzYl9oX2RvdWJsZV9hcnJvdyQkY3VyCWV3LXJlc2l6ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHNiX3ZfZG91YmxlX2Fycm93JCRjdXIJbnMtcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgZmRfZG91YmxlX2Fycm93JCRjdXIJbmVzdy1yZXNpemUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBiZF9kb3VibGVfYXJyb3ckJGN1cglud3NlLXJlc2l6ZSQkY3VyOyBcCisrCWRvbmUKKyAJaWYgdGVzdCAteiAiJChERVNURElSKSIgJiYgdGVzdCAtbiAiJChHVEtfVVBEQVRFX0lDT05fQ0FDSEUpIiA7IHRoZW4gXAorIAkJJChHVEtfVVBEQVRFX0lDT05fQ0FDSEUpIC1xICQoREVTVERJUikkKHRoZW1lZGlyKTsgXAorIAlmaQorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOWU0ZDhhMC4uMzEyYjI0YyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzEsNiArMzEsNyBAQCBBQ19TVUJTVChbcmVuZGVyX3NpemVzXSwgWyI4eDggMTZ4MTYgMjJ4MjIgMjR4MjQgMzJ4MzIgNDh4NDggMjU2eDI1NiJdKQorIEFDX1NVQlNUKFtzeW1ib2xpY19yZW5kZXJfc2l6ZXNdLCBbIiJdKQorIEFDX1NVQlNUKFtpbnN0YWxsX3NpemVzXSwgWyI4eDggMTZ4MTYgMjJ4MjIgMjR4MjQgMzJ4MzIgNDh4NDggNjR4NjQgOTZ4OTYgMjU2eDI1NiJdKQorIAorK0FDX1BST0dfTE5fUworIEFDX1BBVEhfUFJPRyhHVEtfVVBEQVRFX0lDT05fQ0FDSEUsIGd0ay11cGRhdGUtaWNvbi1jYWNoZSkKKyAKKyAjIG5lZWQgZ2l0LCBpY29udG9vbCwgYW5kIGlua3NjYXBlIGZvciByZW5kZXJpbmcKK0BAIC01Niw2ICs1NywyOSBAQCBpZiB0ZXN0ICJ4JEdUS19FTkNPREVfU1lNQk9MSUNfU1ZHIiA9ICJ4ZmFsc2UiOyB0aGVuCisgZmkKKyBBQ19TVUJTVChzeW1ib2xpY19lbmNvZGVfc2l6ZXMpCisgCisrQUNfQVJHX0VOQUJMRShbdzMyLWN1cnNvcnNdLAorKyAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS13MzItY3Vyc29yc10sCisrICAgIFtNYWtlIGFuZCBpbnN0YWxsIFdpbmRvd3MgY3Vyc29ycyAoLmN1ciBhbmQgLmFuaSkgaW5zdGVhZCBvZiBYIGN1cnNvcnNdKV0sCisrICBbY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgICB5ZXMpIGVuYWJsZV93MzJfY3Vyc29ycz15ZXMgOzsKKysgICAgbm8pICBlbmFibGVfdzMyX2N1cnNvcnM9bm8gOzsKKysgICAgKikgQUNfTVNHX0VSUk9SKFtiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS13MzItY3Vyc29yc10pIDs7CisrICAgZXNhY10sCisrICBbZW5hYmxlX3czMl9jdXJzb3JzPW5vXSkKKytBQ19TVUJTVChlbmFibGVfdzMyX2N1cnNvcnMpCisrCisrQUNfQVJHX0VOQUJMRShbbC14bC12YXJpYW50c10sCisrICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWwteGwtdmFyaWFudHNdLAorKyAgICBbQWxzbyBtYWtlIGFuZCBpbnN0YWxsIExhcmdlIGFuZCBFeHRyYSBMYXJnZSBXaW5kb3dzIGN1cnNvciB2ZXJzaW9uc10pXSwKKysgIFtjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICAgIHllcykgZW5hYmxlX2xfeGxfdmFyaWFudHM9eWVzIDs7CisrICAgIG5vKSAgZW5hYmxlX2xfeGxfdmFyaWFudHM9bm8gOzsKKysgICAgKikgQUNfTVNHX0VSUk9SKFtiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1sLXhsLXZhcmlhbnRzXSkgOzsKKysgICBlc2FjXSwKKysgIFtlbmFibGVfbF94bF92YXJpYW50cz1ub10pCisrQUNfU1VCU1QoZW5hYmxlX2xfeGxfdmFyaWFudHMpCisrQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9MX1hMX1ZBUklBTlRTXSwgW3Rlc3QgeCRlbmFibGVfbF94bF92YXJpYW50cyA9IHh5ZXNdKQorKworIEFDX0NPTkZJR19GSUxFUyhbCisgTWFrZWZpbGUKKyBhZHdhaXRhLWljb24tdGhlbWUucGMKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvYWR3YWl0YS1pY29uLXRoZW1lXzMuMTYuMi4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvYWR3YWl0YS1pY29uLXRoZW1lXzMuMTYuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNmU2OTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9hZHdhaXRhLWljb24tdGhlbWVfMy4xNi4yLjEuYmIKQEAgLTAsMCArMSwzNCBAQAorU1VNTUFSWSA9ICJHVEsrIGljb24gdGhlbWUiCitIT01FUEFHRSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvR05PTUUvc291cmNlcy9hZHdhaXRhLWljb24tdGhlbWUvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCitTRUNUSU9OID0gIngxMS9nbm9tZSIKKworTElDRU5TRSA9ICJMR1BMLTMuMCB8IENDLUJZLVNBLTMuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWM4NGNhYzg4ZTQ2ZmMwNzY0N2VhMDdlNmMyNGVlYjdjIgorCitpbmhlcml0IGFsbGFyY2ggYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0IGd0ay1pY29uLWNhY2hlCisKK0RFUEVORFMgKz0gImludGx0b29sLW5hdGl2ZSIKKworTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vJHtCUE59LyR7TUFKX1ZFUn0vJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9DcmVhdGUtc3ltbGlua3Mtd2hlbi1pbnN0YWxsaW5nLWN1cnNvcnMucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjllZjg2OTUyYzk0N2FhMjdhMWE4ODhiNzczNWQ2MGIzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI0NTU2ZGZiZjU1NWQ0ZmFjMTJkNGQ1YzEyZjc1MTlkZTBkNDNlYzQyYTFiNjQ5NjExNDM5YTUwYmY3YWNiOTYiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgQnVpbGQgdXNlcyBndGstZW5jb2RlLXN5bWJvbGljLXN2ZyB0byBjcmVhdGUgcG5nIHZlcnNpb25zOgorICAgICAgICAjIG5vIG5lZWQgdG8gc3RvcmUgdGhlIHN2Z3MgYW55bW9yZS4KKwlybSAtZiAke0R9JHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvc2NhbGFibGUvKi8qLXN5bWJvbGljLnN2ZyBcCisJICAgICAgJHtEfSR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhL3NjYWxhYmxlLyovKi1zeW1ib2xpYy1ydGwuc3ZnCit9CisKK1BBQ0tBR0VTID0gIiR7UE59LWN1cnNvcnMgJHtQTn0tc3ltYm9saWMgJHtQTn0taGlyZXMgJHtQTn0iCisKK0ZJTEVTXyR7UE59LWN1cnNvcnMgPSAiJHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvY3Vyc29ycy8iCitGSUxFU18ke1BOfS1zeW1ib2xpYyA9ICIke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS8qLyovKi5zeW1ib2xpYy5wbmciCitGSUxFU18ke1BOfS1oaXJlcyA9ICIke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS8yNTZ4MjU2LyIKK0ZJTEVTXyR7UE59ID0gIiR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhLyBcCisgICAgICAgICAgICAgICAke3ByZWZpeH0vc2hhcmUvcGtnY29uZmlnL2Fkd2FpdGEtaWNvbi10aGVtZS5wYyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2djb25mL3JlbW92ZV9wbHVzX2Zyb21faW52YWxpZF9jaGFyYWN0ZXJzX2xpc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nY29uZi9yZW1vdmVfcGx1c19mcm9tX2ludmFsaWRfY2hhcmFjdGVyc19saXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YTdjYTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nY29uZi9yZW1vdmVfcGx1c19mcm9tX2ludmFsaWRfY2hhcmFjdGVyc19saXN0LnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitSZW1vdmUgJysnIGZyb20gaW52YWxpZCBjaGFyYWN0ZXJzIGxpc3QKKworU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgorCitJbmRleDogR0NvbmYtMy4yLjUvZ2NvbmYvZ2NvbmYtYmFja2VuZC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gR0NvbmYtMy4yLjUub3JpZy9nY29uZi9nY29uZi1iYWNrZW5kLmMKKysrKyBHQ29uZi0zLjIuNS9nY29uZi9nY29uZi1iYWNrZW5kLmMKK0BAIC0zNyw3ICszNyw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIGludmFsaWRfY2hhcnNbXSA9CisgICAvKiBTcGFjZSBpcyBjb21tb24gaW4gdXNlciBuYW1lcyAoYW5kIHRodXMgaG9tZSBkaXJlY3Rvcmllcykgb24gV2luZG93cyAqLworICAgIiAiCisgI2VuZGlmCistICAiXHRcclxuXCIkJjw+LCs9IyEoKSd8e31bXT9+YDslXFwiOworKyAgIlx0XHJcblwiJCY8Piw9IyEoKSd8e31bXT9+YDslXFwiOworIAorIHN0YXRpYyBnYm9vbGVhbgorIGdjb25mX2FkZHJlc3NfdmFsaWQgKGNvbnN0IGNoYXIgICphZGRyZXNzLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ2NvbmYvdW5hYmxlLWNvbm5lY3QtZGJ1cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2djb25mL3VuYWJsZS1jb25uZWN0LWRidXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc1OGE0YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2djb25mL3VuYWJsZS1jb25uZWN0LWRidXMucGF0Y2gKQEAgLTAsMCArMSw5NSBAQAorRml4ZXMgZXJyb3JzIHN1Y2ggYXMgdGhpcyBpbiB0aGUgcm9vdGZzIGdlbmVyYXRpb246CisKKyhnY29uZnRvb2wtMi5yZWFsOjEwMDk1KTogR0NvbmYtV0FSTklORyAqKjogQ2xpZW50IGZhaWxlZCB0byBjb25uZWN0IHRvIHRoZSBELUJVUyBkYWVtb246CitVc2luZyBYMTEgZm9yIGRidXMtZGFlbW9uIGF1dG9sYXVuY2ggd2FzIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZSwgc2V0IHlvdXIgREJVU19TRVNTSU9OX0JVU19BRERSRVNTIGluc3RlYWQKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRnJvbSBiMDg5NWUxOTk4ZWJjODNhYjAzMGVjMGYxN2MwNjg1NDM5ZjViNDA0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUmF5IFN0cm9kZSA8cnN0cm9kZUByZWRoYXQuY29tPgorRGF0ZTogTW9uLCAxNSBBcHIgMjAxMyAwOTo1NzozNCAtMDQwMAorU3ViamVjdDogW1BBVENIXSBkYnVzOiBEb24ndCBzcGV3IHRvIGNvbnNvbGUgd2hlbiB1bmFibGUgdG8gY29ubmVjdCB0byBkYnVzCisgZGFlbW9uCisKK0luc3RlYWQgcGFzcyB0aGUgZXJyb3IgdXAgZm9yIHRoZSBjYWxsZXIgdG8gZGVjaWRlIHdoYXQgdG8gZG8uCisKK1RoaXMgcHJldmVudCB1bnRyYXBwYWJsZSB3YXJuaW5nIG1lc3NhZ2VzIGZyb20gc2hvd2luZyB1cCBhdCB0aGUKK2NvbnNvbGUgaWYgZ2NvbmZ0b29sIC0tbWFrZWZpbGUtaW5zdGFsbC1ydWxlIGlzIGNhbGxlZC4KKy0tLQorIGdjb25mL2djb25mLWRidXMuYyB8ICAgMjQgKysrKysrKysrKysrLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NvbmYvZ2NvbmYtZGJ1cy5jIGIvZ2NvbmYvZ2NvbmYtZGJ1cy5jCitpbmRleCA1NjEwZmNmLi4wNDhlM2VhIDEwMDY0NAorLS0tIGEvZ2NvbmYvZ2NvbmYtZGJ1cy5jCisrKysgYi9nY29uZi9nY29uZi1kYnVzLmMKK0BAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIEdIYXNoVGFibGUgICAgICplbmdpbmVzX2J5X2RiID0gTlVMTDsKKyBzdGF0aWMgR0hhc2hUYWJsZSAgICAgKmVuZ2luZXNfYnlfYWRkcmVzcyA9IE5VTEw7Cisgc3RhdGljIGdib29sZWFuICAgICAgICBkYnVzX2Rpc2Nvbm5lY3RlZCA9IEZBTFNFOworIAorLXN0YXRpYyBnYm9vbGVhbiAgICAgZW5zdXJlX2RidXNfY29ubmVjdGlvbiAgICAgICh2b2lkKTsKKytzdGF0aWMgZ2Jvb2xlYW4gICAgIGVuc3VyZV9kYnVzX2Nvbm5lY3Rpb24gICAgICAoR0Vycm9yICoqZXJyb3IpOworIHN0YXRpYyBnYm9vbGVhbiAgICAgZW5zdXJlX3NlcnZpY2UgICAgICAgICAgICAgIChnYm9vbGVhbiAgICAgICAgICBzdGFydF9pZl9ub3RfZm91bmQsCisgCQkJCQkJIEdFcnJvciAgICAgICAgICAqKmVycik7Cisgc3RhdGljIGdib29sZWFuICAgICBlbnN1cmVfZGF0YWJhc2UgICAgICAgICAgICAgKEdDb25mRW5naW5lICAgICAgKmNvbmYsCitAQCAtMzgzLDcgKzM4Myw3IEBAIGdjb25mX2VuZ2luZV9kZXRhY2ggKEdDb25mRW5naW5lICpjb25mKQorIH0KKyAKKyBzdGF0aWMgZ2Jvb2xlYW4KKy1lbnN1cmVfZGJ1c19jb25uZWN0aW9uICh2b2lkKQorK2Vuc3VyZV9kYnVzX2Nvbm5lY3Rpb24gKEdFcnJvciAqKmVycikKKyB7CisgICBEQnVzRXJyb3IgZXJyb3I7CisgCitAQCAtMzkyLDcgKzM5Miw5IEBAIGVuc3VyZV9kYnVzX2Nvbm5lY3Rpb24gKHZvaWQpCisgCisgICBpZiAoZGJ1c19kaXNjb25uZWN0ZWQpCisgICAgIHsKKy0gICAgICBnX3dhcm5pbmcgKCJUaGUgY29ubmVjdGlvbiB0byBEQnVzIHdhcyBicm9rZW4uIENhbid0IHJlaW5pdGlhbGl6ZSBpdC4iKTsKKysgICAgICBnX3NldF9lcnJvciAoZXJyLCBHQ09ORl9FUlJPUiwKKysgICAgICAgICAgICAgICAgICAgR0NPTkZfRVJST1JfTk9fU0VSVkVSLAorKyAgICAgICAgICAgICAgICAgICAiVGhlIGNvbm5lY3Rpb24gdG8gREJ1cyB3YXMgYnJva2VuLiBDYW4ndCByZWluaXRpYWxpemUgaXQuIik7CisgICAgICAgcmV0dXJuIEZBTFNFOworICAgICB9CisgCitAQCAtNDAyLDcgKzQwNCwxMCBAQCBlbnN1cmVfZGJ1c19jb25uZWN0aW9uICh2b2lkKQorICAgCisgICBpZiAoIWdsb2JhbF9jb25uKSAKKyAgICAgeworLSAgICAgIGdfd2FybmluZyAoIkNsaWVudCBmYWlsZWQgdG8gY29ubmVjdCB0byB0aGUgRC1CVVMgZGFlbW9uOlxuJXMiLCBlcnJvci5tZXNzYWdlKTsKKysgICAgICBnX3NldF9lcnJvciAoZXJyLCBHQ09ORl9FUlJPUiwKKysgICAgICAgICAgICAgICAgICAgR0NPTkZfRVJST1JfTk9fU0VSVkVSLAorKyAgICAgICAgICAgICAgICAgICAiQ2xpZW50IGZhaWxlZCB0byBjb25uZWN0IHRvIHRoZSBELUJVUyBkYWVtb246XG4lcyIsCisrICAgICAgICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UpOworICAgICAgIAorICAgICAgIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKKyAgICAgICByZXR1cm4gRkFMU0U7CitAQCAtNDMxLDEzICs0MzYsOCBAQCBlbnN1cmVfc2VydmljZSAoZ2Jvb2xlYW4gIHN0YXJ0X2lmX25vdF9mb3VuZCwKKyAKKyAgIGlmIChnbG9iYWxfY29ubiA9PSBOVUxMKQorICAgICB7CistICAgICAgaWYgKCFlbnN1cmVfZGJ1c19jb25uZWN0aW9uICgpKQorLQl7CistCSAgZ19zZXRfZXJyb3IgKGVyciwgR0NPTkZfRVJST1IsCistCQkgICAgICAgR0NPTkZfRVJST1JfTk9fU0VSVkVSLAorLQkJICAgICAgIF8oIk5vIEQtQlVTIGRhZW1vbiBydW5uaW5nXG4iKSk7CistCSAgcmV0dXJuIEZBTFNFOworLQl9CisrICAgICAgaWYgKCFlbnN1cmVfZGJ1c19jb25uZWN0aW9uIChlcnIpKQorKyAgICAgICAgcmV0dXJuIEZBTFNFOworIAorICAgICAgIGdfYXNzZXJ0IChnbG9iYWxfY29ubiAhPSBOVUxMKTsKKyAgICAgfQorQEAgLTI1MTIsNyArMjUxMiw3IEBAIGdjb25mX3BpbmdfZGFlbW9uICh2b2lkKQorIHsKKyAgIGlmIChnbG9iYWxfY29ubiA9PSBOVUxMKQorICAgeworLSAgICBpZiAoIWVuc3VyZV9kYnVzX2Nvbm5lY3Rpb24gKCkpCisrICAgIGlmICghZW5zdXJlX2RidXNfY29ubmVjdGlvbiAoTlVMTCkpCisgICAgIHsKKyAgICAgICByZXR1cm4gRkFMU0U7CisgICAgIH0KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ2NvbmZfMy4yLjYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nY29uZl8zLjIuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2ZkYWZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ2NvbmZfMy4yLjYuYmIKQEAgLTAsMCArMSw2MCBAQAorU1VNTUFSWSA9ICJHTk9NRSBjb25maWd1cmF0aW9uIHN5c3RlbSIKK1NFQ1RJT04gPSAieDExL2dub21lIgorTElDRU5TRSA9ICJMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTVjYTgxN2NjYjdkNWI1YjY2MzU1NjkwZTlhYmM2MDUiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgZGJ1cyBkYnVzLWdsaWIgbGlieG1sMiBpbnRsdG9vbC1uYXRpdmUgZ29iamVjdC1pbnRyb3NwZWN0aW9uLXN0dWIiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJnbGliLTIuMC1uYXRpdmUgZGJ1cy1uYXRpdmUgZGJ1cy1nbGliLW5hdGl2ZSBsaWJ4bWwyLW5hdGl2ZSBpbnRsdG9vbC1uYXRpdmUgZ25vbWUtY29tbW9uLW5hdGl2ZSBnb2JqZWN0LWludHJvc3BlY3Rpb24tc3R1Yi1uYXRpdmUiCisKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3RrLWRvYyBnZXR0ZXh0CisKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9L0dDb25mLyR7QGdub21lX3ZlcmRpcigiJHtQVn0iKX0vR0NvbmYtJHtQVn0udGFyLnh6O25hbWU9YXJjaGl2ZSBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmVfcGx1c19mcm9tX2ludmFsaWRfY2hhcmFjdGVyc19saXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VuYWJsZS1jb25uZWN0LWRidXMucGF0Y2ggXAorIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIyYjE2OTk2ZDBlNGIxMTI4NTZlZTVjNTkxMzBlODIyYyIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjE5MTJiOTE4MDNhYjA5YTVlZWQzNGQzNjRiZjA5ZmUzYTJhOWM5Njc1MWZkZTAzYTRlMGNmYTUxYTA0ZDc4NGMiCisKK1MgPSAiJHtXT1JLRElSfS9HQ29uZi0ke1BWfSIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNoYXJlZCAtLWRpc2FibGUtc3RhdGljIC0tZW5hYmxlLWRlYnVnPXllcyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWludHJvc3BlY3Rpb24gLS1kaXNhYmxlLW9yYml0IC0td2l0aC1vcGVubGRhcD1ubyAtLWRpc2FibGUtZ3RrIgorCisjIERpc2FibGUgUG9saWN5S2l0IGJ5IGRlZmF1bHQKK1BBQ0tBR0VDT05GSUcgPz89ICIiCisjIFdlIHJlYWxseSBkb24ndCB3YW50IFBvbGljeUtpdCBmb3IgbmF0aXZlIG9yIHVjbGliYworUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPSAiIgorUEFDS0FHRUNPTkZJR19saWJjLXVjbGliYyA9ICIiCisKK1BBQ0tBR0VDT05GSUdbcG9saWN5a2l0XSA9ICItLWVuYWJsZS1kZWZhdWx0cy1zZXJ2aWNlLC0tZGlzYWJsZS1kZWZhdWx0cy1zZXJ2aWNlLHBvbGtpdCIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyB0aGlzIGRpcmVjdG9yeSBuZWVkIHRvIGJlIGNyZWF0ZWQgdG8gYXZvaWQgYW4gRXJyb3IgMjU2IGF0IGdkbSBsYXVuY2gKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2djb25mL2djb25mLnhtbC5zeXN0ZW0KKworCSMgdGhpcyBzdHVmZiBpcyB1bnVzYWJsZQorCXJtIC1mICR7RH0ke2xpYmRpcn0vR0NvbmYvKi8qLiphCisJcm0gLWYgJHtEfSR7bGliZGlyfS9naW8vKi8qLiphCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9nY29uZnRvb2wtMiBcCisJCUdDT05GX0JBQ0tFTkRfRElSPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9HQ29uZi8yCit9CisKKyMgZGlzYWJsZSBkYnVzLXgxMSB3aGVuIHgxMSBpc24ndCBpbiBESVNUUk9fRkVBVFVSRVMKK1JERVBFTkRTXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICdkYnVzLXgxMScsICcnLCBkKX0iCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L0dDb25mLyogXAorICAgICAgICAgICAgICAgICR7bGliZGlyfS9naW8vKi8qLnNvIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3BvbGtpdCogXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3NlcnZpY2VzLyouc2VydmljZSBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzLyouc2VydmljZSBcCisgICAgICAgICAgICAgICAiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8qLyovLmRlYnVnIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9L3NnbWwvZ2NvbmYvZ2NvbmYtMS4wLmR0ZCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1jb21tb25fMy4xNC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtY29tbW9uXzMuMTQuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGI3MDMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtY29tbW9uXzMuMTQuMC5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIkNvbW1vbiBtYWNyb3MgZm9yIGJ1aWxkaW5nIEdOT01FIGFwcGxpY2F0aW9ucyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ25vbWUub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgorCitTRUNUSU9OID0gIngxMS9nbm9tZSIKK2luaGVyaXQgZ25vbWViYXNlIGFsbGFyY2gKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiYmE1OGM2MWQwZDgxYjdjM2ZmODQ1MmM2MjA1MTNhOWQiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI0YzAwMjQyZjc4MWJiNDQxMjg5ZjQ5ZGQ4MGVkMWQ4OTVkODRkZTBjOTRiZmMyYzY4MThhMTA0YzllMzkyNjJjIgorCitFWFRSQV9BVVRPUkVDT05GID0gIiIKK0RFUEVORFMgPSAiIgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9hY2xvY2FsIgorRklMRVNfJHtQTn0tZGV2ID0gIiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTg3NTA2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzLmluYwpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gIkEgY29sbGVjdGlvbiBvZiBkb2N1bWVudGF0aW9uIHV0aWxpdGllcyBmb3IgdGhlIEdub21lIHByb2plY3QiCitERVNDUklQVElPTiA9ICJUaGUgR05PTUUgRG9jdW1lbnRhdGlvbiBCdWlsZCBVdGlsaXRpZXMgKGdub21lLWRvYy0gXAordXRpbHMpIHdlcmUgY3JlYXRlZCB0byBtYWtlIGl0IGVhc2llciBmb3IgYXBwbGljYXRpb24gZGV2ZWxvcGVycyB0byBcCitpbmNsdWRlIGFuZCBjcmVhdGUgZG9jdW1lbnRhdGlvbiBpbiB0aGVpciByZWxlYXNlcy4gVGhleSBpbmNsdWRlIHRoZSBcCit4bWwycG8gdG9vbCB3aGljaCBtYWtlcyBpdCBlYXNpZXIgdG8gdHJhbnNsYXRlIGFuZCBrZWVwIHVwIHRvIGRhdGUgXAordHJhbnNsYXRpb25zIG9mIGRvY3VtZW50YXRpb24uIgorTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgorREVQRU5EUyA9ICJsaWJ4bWwyIGxpYnhzbHQgbGlieHNsdC1uYXRpdmUgZ25vbWUtZG9jLXV0aWxzLW5hdGl2ZSBnbGliLTIuMCIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImxpYnhtbDItbmF0aXZlIGxpYnhzbHQtbmF0aXZlIGludGx0b29sLW5hdGl2ZSBnbGliLTIuMC1uYXRpdmUiCisKK2luaGVyaXQgZ25vbWViYXNlIGdldHRleHQgcHl0aG9uLWRpciBweXRob25uYXRpdmUgYXV0b3Rvb2xzLWJyb2tlbnNlcAorCitDTEVBTkJST0tFTiA9ICIxIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1zY3JvbGxrZWVwZXIiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCW1rZGlyIC1wICAke0R9JHtkYXRhZGlyfS94bWwvZ25vbWUveHNsdC8KKwljcCAtcFByICR7U30veHNsdC8qICR7RH0ke2RhdGFkaXJ9L3htbC9nbm9tZS94c2x0LworCisJY2hvd24gLVIgcm9vdDpyb290ICR7RH0KK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKwlzZWQgLWkgLWUgJ3N8XiMhLiovdXNyL2Jpbi9lbnYgcHl0aG9ufCMhIC91c3IvYmluL2VudiBuYXRpdmVweXRob258JyAke0R9JHtiaW5kaXJ9L3htbDJwbworfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS94bWwqICR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LyoiCisKK1JERVBFTkRTXyR7UE59ID0gImJhc2giCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy9zeXNyb290ZWQtcGtnLWNvbmZpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy9zeXNyb290ZWQtcGtnLWNvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTZkNjk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzL3N5c3Jvb3RlZC1wa2ctY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0luIGNyb3NzIGVudmlyb25tZW50IHdlIGhhdmUgdG8gcHJlcGVuZCB0aGUgc3lzcm9vdCB0byB0aGUgcGF0aCBmb3VuZCBieQorcGtnY29uZmlnIHNpbmNlIHRoZSBwYXRoIHJldHVybmVkIGZyb20gcGtnY29uZmlnIGRvZXMgbm90IGhhdmUgc3lzcm9vdCBwcmVmaXhlZAoraXQgZW5kcyB1cCB1c2luZyB0aGUgZmlsZXMgZnJvbSBob3N0IHN5c3RlbS4gTm93IHVzdWFsbHkgcGVvcGxlIGhhdmUgZ25vbWUgaW5zdGFsbGVkCitzbyB0aGUgYnVpbGQgc3VjY2VlZHMgYnV0IGlmIHlvdSBkb250IGhhdmUgZ25vbWUgaW5zdGFsbGVkIG9uIGJ1aWxkIGhvc3QgdGhlbgoraXQgd29udCBmaW5kIHRoZSBmaWxlcyBvbiBob3N0IHN5c3RlbSBhbmQgcGFja2FnZXMgdXNpbmcgZ25vbWUtZG9jLXV0aWxzIHdvbnQKK2NvbXBpbGUuCisKK1RoaXMgc2hvdWxkIHdvcmsgb2sgd2l0aCBub24gc3lzcm9vdGVkIGJ1aWxkcyB0b28gc2luY2UgaW4gdGhvc2UgY2FzZXMgUEtHX0NPTkZJR19TWVNST09UX0RJUgord2lsbCBiZSBlbXB0eQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK0luZGV4OiBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC90b29scy9nbm9tZS1kb2MtdXRpbHMubWFrZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdub21lLWRvYy11dGlscy0wLjIwLjEwLm9yaWcvdG9vbHMvZ25vbWUtZG9jLXV0aWxzLm1ha2UKKysrKyBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC90b29scy9nbm9tZS1kb2MtdXRpbHMubWFrZQorQEAgLTEzMywxMSArMTMzLDExIEBAIF9ET0NfQUJTX1NSQ0RJUiA9IEBhYnNfc3JjZGlyQAorIF94bWwycG8gPz0gYHdoaWNoIHhtbDJwb2AKKyBfeG1sMnBvX21vZGUgPSAkKGlmICQoRE9DX0lEKSxtYWxsYXJkLGRvY2Jvb2spCisgCistX2RiMmh0bWwgPz0gYCQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSBkYjJodG1sIGdub21lLWRvYy11dGlsc2AKKy1fZGIyb21mICA/PSBgJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIGRiMm9tZiBnbm9tZS1kb2MtdXRpbHNgCistX2NodW5rcyAgPz0gYCQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSB4bWxkaXIgZ25vbWUtZG9jLXV0aWxzYC9nbm9tZS94c2x0L2RvY2Jvb2svdXRpbHMvY2h1bmtzLnhzbAorLV9jcmVkaXRzID89IGAkKFBLR19DT05GSUcpIC0tdmFyaWFibGUgeG1sZGlyIGdub21lLWRvYy11dGlsc2AvZ25vbWUveHNsdC9kb2Nib29rL3V0aWxzL2NyZWRpdHMueHNsCistX2lkcyA/PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSB4bWxkaXIgZ25vbWUtZG9jLXV0aWxzKS9nbm9tZS94c2x0L2RvY2Jvb2svdXRpbHMvaWRzLnhzbAorK19kYjJodG1sID89ICR7UEtHX0NPTkZJR19TWVNST09UX0RJUn1gJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIGRiMmh0bWwgZ25vbWUtZG9jLXV0aWxzYAorK19kYjJvbWYgID89ICR7UEtHX0NPTkZJR19TWVNST09UX0RJUn1gJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIGRiMm9tZiBnbm9tZS1kb2MtdXRpbHNgCisrX2NodW5rcyAgPz0gJHtQS0dfQ09ORklHX1NZU1JPT1RfRElSfWAkKFBLR19DT05GSUcpIC0tdmFyaWFibGUgeG1sZGlyIGdub21lLWRvYy11dGlsc2AvZ25vbWUveHNsdC9kb2Nib29rL3V0aWxzL2NodW5rcy54c2wKKytfY3JlZGl0cyA/PSAke1BLR19DT05GSUdfU1lTUk9PVF9ESVJ9YCQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSB4bWxkaXIgZ25vbWUtZG9jLXV0aWxzYC9nbm9tZS94c2x0L2RvY2Jvb2svdXRpbHMvY3JlZGl0cy54c2wKKytfaWRzID89ICR7UEtHX0NPTkZJR19TWVNST09UX0RJUn0kKHNoZWxsICQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSB4bWxkaXIgZ25vbWUtZG9jLXV0aWxzKS9nbm9tZS94c2x0L2RvY2Jvb2svdXRpbHMvaWRzLnhzbAorIAorIGlmIEVOQUJMRV9TSworIF9FTkFCTEVfU0sgPSB0cnVlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMvdXNlLXVzci1iaW4tZW52LWZvci1weXRob24taW4teG1sMnBvLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzL3VzZS11c3ItYmluLWVudi1mb3ItcHl0aG9uLWluLXhtbDJwby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTE5NmMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzL3VzZS11c3ItYmluLWVudi1mb3ItcHl0aG9uLWluLXhtbDJwby5wYXRjaApAQCAtMCwwICsxLDMwIEBACitXZSBjYW4ndCB1c2UgIyEvZnVsbC9wYXRoL3RvL3B5dGhvbiAtdSBhcyB0aGlzIGNhbiBiZSBsb25nZXIgdGhhbiBzaGViYW5nCithbGxvd3MgZm9yLiAgSW4gb3JkZXIgdG8gYmUgYXBwcm9wcmFpdGUgZm9yIHVwc3RyZWFtIG1vcmUgd29yayB3b3VsZCBiZQorbmVlZGVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBtYWluIHhtbDJwbyBjb2RlIGRvZXNuJ3QgcmVseSBvbiBweXRob24KK2JlaW5nIGludm9rZWQgd2l0aCAtdSAoZm9yY2Ugc3RkaW4vb3V0L2VyciB0byBiZSB1c2VkIHJhdykuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbV291bGQgYnJlYWsgYmVoYXZpb3Igb24gV2luZG93c10KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworSW5kZXg6IGdub21lLWRvYy11dGlscy0wLjIwLjEwL3htbDJwby94bWwycG8vTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC5vcmlnL3htbDJwby94bWwycG8vTWFrZWZpbGUuYW0KKysrKyBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC94bWwycG8veG1sMnBvL01ha2VmaWxlLmFtCitAQCAtNyw3ICs3LDYgQEAgQ0xFQU5GSUxFUyA9IHhtbDJwbworIAorIHhtbDJwbzogeG1sMnBvLnB5LmluCisgCSQoQU1fVl9HRU4pc2VkIC1lICJzL15WRVJTSU9OID0uKi9WRVJTSU9OID0gXCJAVkVSU0lPTkBcIi8iIFwKKy0JICAgIC1lICJzK14jIS4qcHl0aG9uLiorIyEkKFBZVEhPTikrIiBcCisgCSAgPCAkKHNyY2RpcikveG1sMnBvLnB5LmluID4geG1sMnBvCisgCSQoQU1fVl9hdCljaG1vZCAreCB4bWwycG8KKyAKK0luZGV4OiBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC94bWwycG8veG1sMnBvL3htbDJwby5weS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdub21lLWRvYy11dGlscy0wLjIwLjEwLm9yaWcveG1sMnBvL3htbDJwby94bWwycG8ucHkuaW4KKysrKyBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC94bWwycG8veG1sMnBvL3htbDJwby5weS5pbgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24gLXUKKysjIS91c3IvYmluL2VudiBweXRob24KKyAjIC0qLSBlbmNvZGluZzogdXRmLTggLSotCisgIyBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUsIDIwMDYgRGFuaWxvIMWgZWdhbiA8ZGFuaWxvQGdub21lLm9yZz4uCisgIyBDb3B5cmlnaHQgKGMpIDIwMDkgQ2xhdWRlIFBhcm96IDxjbGF1ZGVAMnhsaWJyZS5uZXQ+LgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzL3hzbHRwcm9jX25vbmV0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzL3hzbHRwcm9jX25vbmV0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNDY0OTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMveHNsdHByb2Nfbm9uZXQucGF0Y2gKQEAgLTAsMCArMSw5NSBAQAorVGhpcyBhZGRzIHRoZSAtbm9uZXQgb3B0aW9uIHRvIHhzbHRwcm9jIGludm9jYXRpb25zLCB3aGljaCBmaXhlcworY29tcGlsZSBlcnJvcnMgd2hlbiBidWlsZGluZyB0aGUgZ25vbWUtZG9jLXV0aWxzIGRvY3MuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitJbmRleDogZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAvZG9jL3hzbHQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC5vcmlnL2RvYy94c2x0L01ha2VmaWxlLmFtCisrKysgZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAvZG9jL3hzbHQvTWFrZWZpbGUuYW0KK0BAIC0yMSwxNCArMjEsMTQgQEAgYWxsOiAkKHhzbGRvY19kb2NzKSAkKHhzbGRvY194bWxzKQorIAorICQoeHNsZG9jX2RvY3MpOiAkKHhzbGRvY194c2xzKSB4c2xkb2MuYXdrIHhzbGRvYy1maWxsLnhzbAorIAkkKEFNX1ZfR0VOKSQoR0RVX0FXSykgLWYgIiQoc3JjZGlyKS94c2xkb2MuYXdrIiAiJChmaWx0ZXIgJS8kKGJhc2VuYW1lICQobm90ZGlyICRAKSkueHNsLCQoeHNsZG9jX3hzbHMpKSIgXAorLQl8IHhzbHRwcm9jIC1vICIkQCIgXAorKwl8IHhzbHRwcm9jIC1ub25ldCAtbyAiJEAiIFwKKyAJLS1zdHJpbmdwYXJhbSBiYXNlbmFtZSAiJChiYXNlbmFtZSAkKG5vdGRpciAkQCkpIiBcCisgCS0tc3RyaW5ncGFyYW0geHNsX2ZpbGUgIiQoZmlsdGVyICUvJChiYXNlbmFtZSAkKG5vdGRpciAkQCkpLnhzbCwkKHhzbGRvY194c2xzKSkiIFwKKyAJIiQoc3JjZGlyKS94c2xkb2MtZmlsbC54c2wiIC0KKyAKKyAkKHhzbGRvY194bWxzKTogeHNsZG9jLWRvY2Jvb2sueHNsCisgJCh4c2xkb2NfeG1scyk6IEMvJS54bWwgOiBDLyUueHNsZG9jCistCSQoQU1fVl9HRU4peHNsdHByb2MgLW8gIiRAIiBcCisrCSQoQU1fVl9HRU4peHNsdHByb2MgLW5vbmV0IC1vICIkQCIgXAorIAktLXN0cmluZ3BhcmFtIGJhc2VuYW1lICIkKGJhc2VuYW1lICQobm90ZGlyICRAKSkiIFwKKyAJLS1zdHJpbmdwYXJhbSB4c2xfZmlsZSAiJChmaWx0ZXIgJS8kKGJhc2VuYW1lICQobm90ZGlyICRAKSkueHNsLCQoeHNsZG9jX3hzbHMpKSIgXAorIAkiJChzcmNkaXIpL3hzbGRvYy1kb2Nib29rLnhzbCIgIiQ8IgorQEAgLTYyLDcgKzYyLDcgQEAgZ25vbWUtZG9jLXhzbHQtY2hlY2staW5jbHVkZXM6CisgZ25vbWUtZG9jLXhzbHQtY2hlY2steHNsZG9jOiAkKHhzbGRvY19kb2NzKQorIAlAZWNobyAiUnVubmluZyB4c2xkb2MgY2hlY2tzIjsKKyAJQChlY2hvICI8eHNsZG9jPiI7IGNhdCAkKHhzbGRvY19kb2NzKTsgZWNobyAiPC94c2xkb2M+IikgXAorLQl8IHhzbHRwcm9jICIkKHNyY2RpcikveHNsZG9jLWNoZWNrLnhzbCIgLSAxPiAvZGV2L251bGwKKysJfCB4c2x0cHJvYyAtbm9uZXQgIiQoc3JjZGlyKS94c2xkb2MtY2hlY2sueHNsIiAtIDE+IC9kZXYvbnVsbAorIAorIC5QSE9OWTogY2xlYW4teHNsZG9jCisgY2xlYW4tbG9jYWw6IGNsZWFuX3hzbGRvYworSW5kZXg6IGdub21lLWRvYy11dGlscy0wLjIwLjEwL3Rvb2xzL2dub21lLWRvYy11dGlscy5tYWtlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAub3JpZy90b29scy9nbm9tZS1kb2MtdXRpbHMubWFrZQorKysrIGdub21lLWRvYy11dGlscy0wLjIwLjEwL3Rvb2xzL2dub21lLWRvYy11dGlscy5tYWtlCitAQCAtMzcsNyArMzcsNyBAQCAkKERPQ19IX0ZJTEUpOiAkKERPQ19IX0RPQ1MpOworIAlsaXN0PSckKERPQ19IX0RPQ1MpJzsgZm9yIGRvYyBpbiAkJGxpc3Q7IGRvIFwKKyAJICB4bWxwYXRoPSJgZWNobyAkJGRvYyB8IHNlZCAtZSAncy9eXCguKlwvXCkuKi9cMS8nIC1lICcvXC8vIXMvLiovLydgOiQoc3JjZGlyKS9gZWNobyAkJGRvYyB8IHNlZCAtZSAncy9eXCguKlwvXCkuKi9cMS8nIC1lICcvXC8vIXMvLiovLydgIjsgXAorIAkgIGlmICEgdGVzdCAtZiAiJCRkb2MiOyB0aGVuIGRvYz0iJChzcmNkaXIpLyQkZG9jIjsgZmk7IFwKKy0JICB4c2x0cHJvYyAtLXBhdGggIiQkeG1scGF0aCIgJChfY3JlZGl0cykgJCRkb2M7IFwKKysJICB4c2x0cHJvYyAtbm9uZXQgLS1wYXRoICIkJHhtbHBhdGgiICQoX2NyZWRpdHMpICQkZG9jOyBcCisgCWRvbmUgfCBzb3J0IHwgdW5pcSBcCisgCSAgfCBhd2sgJ0JFR0lOe3M9IiJ9e249c3BsaXQoJCQwLHcsIjwiKTtpZihzIT0iIiYmcyE9c3Vic3RyKHdbMV0sMSxsZW5ndGgod1sxXSktMSkpe3ByaW50IHN9O2lmKG4+MSl7cHJpbnQgJCQwO3M9IiJ9ZWxzZXtzPSQkMH19O0VORHtpZihzIT0iIil7cHJpbnQgc319JyBcCisgCSAgfCBzZWQgLWUgJ3MvXFwvXFxcXC8nIC1lICdzLyIvXFwiLycgLWUgJ3MvXCguKlwpL1x0IlwxIiwvJyA+PiAkQC50bXAKK0BAIC01MCw3ICs1MCw3IEBAICQoRE9DX0hfRklMRSk6ICQoRE9DX0hfRE9DUyk7CisgCSAgZG9jaWQ9YGVjaG8gIiQkZG9jIiB8IHNlZCAtZSAncy8uKlwvXChbXi9dKlwpXC54bWwvXDEvJyBcCisgCSAgICB8IHNlZCAtZSAncy9bXmEtekEtWl9dL18vZycgfCB0ciAnYS16JyAnQS1aJ2A7IFwKKyAJICBlY2hvICQkeG1scGF0aDsgXAorLQkgIGlkcz1geHNsdHByb2MgLS14aW5jbHVkZSAtLXBhdGggIiQkeG1scGF0aCIgJChfaWRzKSAkJGRvY2A7IFwKKysJICBpZHM9YHhzbHRwcm9jIC1ub25ldCAtLXhpbmNsdWRlIC0tcGF0aCAiJCR4bWxwYXRoIiAkKF9pZHMpICQkZG9jYDsgXAorIAkgIGZvciBpZCBpbiAkJGlkczsgZG8gXAorIAkgICAgZWNobyAnI2RlZmluZSBIRUxQXydgZWNobyAkJGRvY2lkYCdfJ2BlY2hvICQkaWQgXAorIAkgICAgICB8IHNlZCAtZSAncy9bXmEtekEtWl9dL18vZycgfCB0ciAnYS16JyAnQS1aJ2AnICInJCRpZCciJyA+PiAkQC50bXA7IFwKK0BAIC0xOTcsNyArMTk3LDcgQEAgJChfRE9DX09NRl9EQikgOiAkKERPQ19NT0RVTEUpLSUub21mIDogJQorIAkgIGVjaG8gIlRoZSBmaWxlICckKF9za2NvbnRlbnRzbGlzdCknIGRvZXMgbm90IGV4aXN0LiIgPiYyOwkJXAorIAkgIGVjaG8gIlBsZWFzZSBjaGVjayB5b3VyIFNjcm9sbEtlZXBlciBpbnN0YWxsYXRpb24uIiA+JjI7CQlcCisgCSAgZXhpdCAxOyB9CistCSQoR0RVX1ZfREIyT01GKXhzbHRwcm9jIC1vICRAICQoY2FsbCBkYjJvbWZfYXJncywkQCwkPCwnZG9jYm9vaycpIHx8IHsgcm0gLWYgIiRAIjsgZXhpdCAxOyB9CisrCSQoR0RVX1ZfREIyT01GKXhzbHRwcm9jIC1ub25ldCAtbyAkQCAkKGNhbGwgZGIyb21mX2FyZ3MsJEAsJDwsJ2RvY2Jvb2snKSB8fCB7IHJtIC1mICIkQCI7IGV4aXQgMTsgfQorIAorICMjIEAgX0RPQ19PTUZfSFRNTAorICMjIFRoZSBPTUYgZmlsZXMgZm9yIEhUTUwgb3V0cHV0CitAQCAtMjEyLDcgKzIxMiw3IEBAIGlmIEVOQUJMRV9TSworIAkgIGVjaG8gIlBsZWFzZSBjaGVjayB5b3VyIFNjcm9sbEtlZXBlciBpbnN0YWxsYXRpb24uIiA+JjI7CQlcCisgCSAgZXhpdCAxOyB9CisgZW5kaWYKKy0JJChHRFVfVl9EQjJPTUYpeHNsdHByb2MgLW8gJEAgJChjYWxsIGRiMm9tZl9hcmdzLCRALCQ8LCd4aHRtbCcpIHx8IHsgcm0gLWYgIiRAIjsgZXhpdCAxOyB9CisrCSQoR0RVX1ZfREIyT01GKXhzbHRwcm9jIC1ub25ldCAtbyAkQCAkKGNhbGwgZGIyb21mX2FyZ3MsJEAsJDwsJ3hodG1sJykgfHwgeyBybSAtZiAiJEAiOyBleGl0IDE7IH0KKyAKKyAjIyBAIF9ET0NfT01GX0FMTAorICMjIEFsbCBPTUYgb3V0cHV0IGZpbGVzIHRvIGJlIGJ1aWx0CitAQCAtMjY3LDcgKzI2Nyw3IEBAIF9ET0NfQ19GSUdVUkVTID0gJChpZiAkKERPQ19GSUdVUkVTKSwKKyAjIyBBbGwgSFRNTCBkb2N1bWVudGF0aW9uIGluIHRoZSBDIGxvY2FsZQorICMgRklYTUU6IHByb2JhYmx5IGhhdmUgdG8gc2hlbGwgZXNjYXBlIHRvIGRldGVybWluZSB0aGUgZmlsZSBuYW1lcworIF9ET0NfQ19IVE1MID0gJChmb3JlYWNoIGYsCQkJCQkJXAorLQkkKHNoZWxsIHhzbHRwcm9jIC0teGluY2x1ZGUgCQkJCQlcCisrCSQoc2hlbGwgeHNsdHByb2MgLW5vbmV0IC0teGluY2x1ZGUgCQkJCQlcCisgCSAgLS1zdHJpbmdwYXJhbSBkYi5jaHVuay5iYXNlbmFtZSAiJChET0NfTU9EVUxFKSIJCVwKKyAJICAkKF9jaHVua3MpICJDLyQoRE9DX01PRFVMRSkueG1sIiksCQkJCVwKKyAJQy8kKGYpLnhodG1sKQorQEAgLTM5Myw3ICszOTMsNyBAQCBfRE9DX0hUTUxfQUxMID0gJChpZiAkKGZpbHRlciBodG1sIEhUTUwsCisgX0RPQ19IVE1MX1RPUFMgPSAkKGZvcmVhY2ggbGMsQyAkKF9ET0NfUkVBTF9MSU5HVUFTKSwkKGxjKS8kKERPQ19NT0RVTEUpLnhodG1sKQorIAorICQoX0RPQ19IVE1MX1RPUFMpOiAkKF9ET0NfQ19ET0NTKSAkKF9ET0NfTENfRE9DUykKKy0JJChHRFVfVl9EQjJIVE0peHNsdHByb2MgLW8gJEAgLS14aW5jbHVkZSAtLXBhcmFtIGRiLmNodW5rLmNodW5rX3RvcCAiZmFsc2UoKSIgLS1zdHJpbmdwYXJhbSBkYi5jaHVuay5iYXNlbmFtZSAiJChET0NfTU9EVUxFKSIgLS1zdHJpbmdwYXJhbSBkYi5jaHVuay5leHRlbnNpb24gIi54aHRtbCIgJChfZGIyaHRtbCkgJChwYXRzdWJzdCAlLnhodG1sLCUueG1sLCRAKQorKwkkKEdEVV9WX0RCMkhUTSl4c2x0cHJvYyAtbm9uZXQgLW8gJEAgLS14aW5jbHVkZSAtLXBhcmFtIGRiLmNodW5rLmNodW5rX3RvcCAiZmFsc2UoKSIgLS1zdHJpbmdwYXJhbSBkYi5jaHVuay5iYXNlbmFtZSAiJChET0NfTU9EVUxFKSIgLS1zdHJpbmdwYXJhbSBkYi5jaHVuay5leHRlbnNpb24gIi54aHRtbCIgJChfZGIyaHRtbCkgJChwYXRzdWJzdCAlLnhodG1sLCUueG1sLCRAKQorIAorIAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHNfMC4yMC4xMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlsc18wLjIwLjEwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Y2MwMDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHNfMC4yMC4xMC5iYgpAQCAtMCwwICsxLDExIEBACityZXF1aXJlIGdub21lLWRvYy11dGlscy5pbmMKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuR1BMO21kNT1lYjcyM2I2MTUzOWZlZWYwMTNkZTQ3NmU2OGI1YzUwYSBcCisJCSAgICBmaWxlOi8vQ09QWUlORy5MR1BMO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyIKKworU1JDX1VSSSArPSAiZmlsZTovL3hzbHRwcm9jX25vbmV0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly91c2UtdXNyLWJpbi1lbnYtZm9yLXB5dGhvbi1pbi14bWwycG8ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3N5c3Jvb3RlZC1wa2ctY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIzYzY0YWQ3YmFjZDYxN2IwNDk5OWU0YTE2OGFmYWFjNSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImNiMDYzOWZmYTk1NTBiNmRkZjNiNjJmM2IxYWRkOTJmYjkyYWI0NjkwZDM1MWYyMzUzY2ZmZTY2OGJlOGM0YTYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1taW1lLWRhdGEvcGtnY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtbWltZS1kYXRhL3BrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTAzNDI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtbWltZS1kYXRhL3BrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDE0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBnbm9tZS1taW1lLWRhdGEtMi4xOC4wL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ25vbWUtbWltZS1kYXRhLTIuMTguMC5vcmlnL01ha2VmaWxlLmFtCTIwMDktMDYtMTEgMTc6Mjc6NDguMDAwMDAwMDAwICswMTAwCisrKysgZ25vbWUtbWltZS1kYXRhLTIuMTguMC9NYWtlZmlsZS5hbQkyMDA5LTA2LTExIDE3OjI3OjU5LjAwMDAwMDAwMCArMDEwMAorQEAgLTEsNiArMSw2IEBACisgU1VCRElSUyA9IG1hbiBwbworIAorLXBrZ2NvbmZpZ2RpciA9ICQoZGF0YWRpcikvcGtnY29uZmlnCisrcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworIHBrZ2NvbmZpZ19EQVRBID0gZ25vbWUtbWltZS1kYXRhLTIuMC5wYworIAorIE5VTEw9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1taW1lLWRhdGFfMi4xOC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtbWltZS1kYXRhXzIuMTguMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzFlYjU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtbWltZS1kYXRhXzIuMTguMC5iYgpAQCAtMCwwICsxLDE5IEBACitTVU1NQVJZID0gIkJhc2UgTUlNRSBhbmQgQXBwbGljYXRpb24gZGF0YWJhc2UgZm9yIEdOT01FIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbm9tZS5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jaGVjay1taW1lLnBsO2VuZGxpbmU9MjY7bWQ1PWE5NWI2M2M5MmMzM2Q0Y2ExYWY2MWEzMTU4ODhmNDUwIgorCitpbmhlcml0IGdub21lYmFzZSBtaW1lCitQUiA9ICJyNCIKKworU1JDX1VSSSArPSAiZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiNTQxODU4MTg4ZjgwMDkwZDEyYTMzYjVhN2MzNGQ0MmMiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIzNzE5NmI1YjM3MDg1YmJjZDQ1YzMzOGMzNmUyNjg5OGZlMzVkZDU5NzUyOTVmNjlmNDgwMjhiMWU4NDM2ZmQ3IgorR05PTUVfQ09NUFJFU1NfVFlQRT0iYnoyIgorCitERVBFTkRTICs9ICJzaGFyZWQtbWltZS1pbmZvIGludGx0b29sLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gInNoYXJlZC1taW1lLWluZm8iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9saWJhcnQtbGdwbC9saWJhcnRfbGdwbC0yLjMuMjEtY3Jvc3Njb21waWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvbGliYXJ0LWxncGwvbGliYXJ0X2xncGwtMi4zLjIxLWNyb3NzY29tcGlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjYxZjU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvbGliYXJ0LWxncGwvbGliYXJ0X2xncGwtMi4zLjIxLWNyb3NzY29tcGlsZS5wYXRjaApAQCAtMCwwICsxLDg0IEBACitUYWtlbiBmcm9tIHBvcnRhZ2UKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitGcm9tIGUxNDQzYzk0NWE0Y2Y2NzA5NmQ4YzI3NzIxYWFkZDczNjgzODJiM2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBHaWxsZXMgRGFydGlndWVsb25ndWUgPGV2YUBnZW50b28ub3JnPgorRGF0ZTogVHVlLCA2IEFwciAyMDEwIDE1OjIyOjI1ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBnZW50b286IHVzZSBJU08gdHlwZXMgZm9yIGZpeGVkIHR5cGUgc2l6ZQorCistLS0KKyBNYWtlZmlsZS5hbSAgfCAgIDExICsrLS0tLS0tLS0tCisgYXJ0X2NvbmZpZy5oIHwgICAgNSArKysrKworIGNvbmZpZ3VyZS5pbiB8ICAgMTAgLS0tLS0tLS0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgYXJ0X2NvbmZpZy5oCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCA5NTk1MmRhLi42YWEyZmUzIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMiwxMyArMiw2IEBAIGNoZWNrX1BST0dSQU1TID0gdGVzdGFydCB0ZXN0dXRhCisgCisgYmluX1NDUklQVFMgPSBcCisgCWxpYmFydDItY29uZmlnCistCQorLW5vaW5zdF9TQ1JJUFRTID0gZ2VuX2FydF9jb25maWcuc2gKKy0KKy1CVUlMVF9TT1VSQ0VTID0gYXJ0X2NvbmZpZy5oCistCistYXJ0X2NvbmZpZy5oOgorLQkuL2dlbl9hcnRfY29uZmlnLnNoID4gYXJ0X2NvbmZpZy5oCisgCisgRVhUUkFfRElTVCA9IAkJCVwKKyAJbGliYXJ0LmRlZgkJXAorQEAgLTE3Myw1ICsxNjYsNSBAQCBpbnN0YWxsLWRhdGEtbG9jYWw6IGluc3RhbGwtbXMtbGliIGluc3RhbGwtbGlidG9vbC1pbXBvcnQtbGliCisgCisgdW5pbnN0YWxsLWxvY2FsOiB1bmluc3RhbGwtbXMtbGliIHVuaW5zdGFsbC1saWJ0b29sLWltcG9ydC1saWIKKyAKKy1DTEVBTkZJTEVTID0gJChCVUlMVF9TT1VSQ0VTKSAkKGJpbl9TQ1JJUFRTKQorLURJU1RDTEVBTkZJTEVTID0gJChCVUlMVF9TT1VSQ0VTKSAkKGJpbl9TQ1JJUFRTKQorK0NMRUFORklMRVMgPSAkKGJpbl9TQ1JJUFRTKQorK0RJU1RDTEVBTkZJTEVTID0gJChiaW5fU0NSSVBUUykKK2RpZmYgLS1naXQgYS9hcnRfY29uZmlnLmggYi9hcnRfY29uZmlnLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi41OTg1ZjFmCistLS0gYS9hcnRfY29uZmlnLmgKKysrKyBiL2FydF9jb25maWcuaAorQEAgLTAsMCArMSw1IEBACisrI2luY2x1ZGUgPHN0ZGludC5oPgorKworK3R5cGVkZWYgdWludDhfdCBhcnRfdTg7CisrdHlwZWRlZiB1aW50MTZfdCBhcnRfdTE2OworK3R5cGVkZWYgdWludDMyX3QgYXJ0X3UzMjsKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KK2luZGV4IGU0ODA0ZjcuLmRkY2FjNGYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTkyLDE1ICs5Miw2IEBAIEFDX0ZVTkNfQUxMT0NBCisgCisgQUNfQ19CSUdFTkRJQU4KKyAKKy1BQ19DSEVDS19TSVpFT0YoY2hhcikKKy1BQ19TVUJTVChBUlRfU0laRU9GX0NIQVIsICRhY19jdl9zaXplb2ZfY2hhcikKKy1BQ19DSEVDS19TSVpFT0Yoc2hvcnQpCistQUNfU1VCU1QoQVJUX1NJWkVPRl9TSE9SVCwgJGFjX2N2X3NpemVvZl9zaG9ydCkKKy1BQ19DSEVDS19TSVpFT0YoaW50KQorLUFDX1NVQlNUKEFSVF9TSVpFT0ZfSU5ULCAkYWNfY3Zfc2l6ZW9mX2ludCkKKy1BQ19DSEVDS19TSVpFT0YobG9uZykKKy1BQ19TVUJTVChBUlRfU0laRU9GX0xPTkcsICRhY19jdl9zaXplb2ZfbG9uZykKKy0KKyBBQ19DT05GSUdfRklMRVMoWworIGxpYmFydC1mZWF0dXJlcy5oCisgTWFrZWZpbGUKK0BAIC0xMDksNiArMTAwLDUgQEAgbGliYXJ0LTIuMC11bmluc3RhbGxlZC5wYworIGxpYmFydC16aXBdKQorIAorIEFDX0NPTkZJR19GSUxFUyhbbGliYXJ0LWNvbmZpZ10sW2NobW9kICt4IGxpYmFydC1jb25maWddKQorLUFDX0NPTkZJR19GSUxFUyhbZ2VuX2FydF9jb25maWcuc2hdLFtjaG1vZCAreCBnZW5fYXJ0X2NvbmZpZy5zaF0pCisgCisgQUNfT1VUUFVUCistLSAKKzEuNy4wLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvbGliYXJ0LWxncGxfMi4zLjIxLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvbGliYXJ0LWxncGxfMi4zLjIxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NTgxYjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9saWJhcnQtbGdwbF8yLjMuMjEuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IG9mIGZ1bmN0aW9ucyBmb3IgMkQgZ3JhcGhpY3MiCitTRUNUSU9OID0gIngxMS9nbm9tZSIKK0xJQ0VOU0UgPSAiTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTciCitQUiA9ICJyMiIKKworIyBjYW4ndCB1c2UgZ25vbWUub2VjbGFzcyBkdWUgdG8gXyBpbiBmaWxlbmFtZQorU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vbGliYXJ0X2xncGwvMi4zL2xpYmFydF9sZ3BsLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vbGliYXJ0X2xncGwtMi4zLjIxLWNyb3NzY29tcGlsZS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDg1NTlmZjNjNjdmZDk1ZDU3YjBjNWU5MWE2YjQzMDIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmRjMTFlNzRjMTBmYzlmZmU0MTg4NTM3ZTJiMzcwYzBhYmFjY2E3ZDg5MDIxZDRkMzAzYWZkZjdmZDc0NzZmYSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0RFUEVORFMgPSAiIgorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vKi5zby4qIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vbGliYXJ0Mi1jb25maWciCisKK1MgPSAiJHtXT1JLRElSfS9saWJhcnRfbGdwbC0ke1BWfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hc18zLjE2LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzL2dzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXNfMy4xNi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZjJjNzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzL2dzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXNfMy4xNi4xLmJiCkBAIC0wLDAgKzEsMTMgQEAKK1NVTU1BUlkgPSAiR05PTUUgZGVza3RvcC13aWRlIEdTZXR0aW5ncyBzY2hlbWFzIgorSE9NRVBBR0UgPSAiaHR0cDovL2xpdmUuZ25vbWUub3JnL2dzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIgorCitERVBFTkRTID0gImdsaWItMi4wIGludGx0b29sLW5hdGl2ZSBnb2JqZWN0LWludHJvc3BlY3Rpb24tc3R1Yi1uYXRpdmUiCisKK2luaGVyaXQgZ25vbWViYXNlIGdzZXR0aW5ncyBnZXR0ZXh0CisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImJhZWJiY2YzYzIwNTkxZjk4ODc2ZTQyZmIwYTNmZDM1IgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNzRmZTlmZGFkNTEwYzhhNjY2NmZlYmVjZWI3ZWJhZmM1ODFlZjk5MGIzYWZjYzhjMWU4YjVkOTBiMjRiMzQ2MSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNTI3M2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysuaW5jCkBAIC0wLDAgKzEsOTcgQEAKK1NVTU1BUlkgPSAiTXVsdGktcGxhdGZvcm0gdG9vbGtpdCBmb3IgY3JlYXRpbmcgR1VJcyIKK0RFU0NSSVBUSU9OID0gIkdUSysgaXMgYSBtdWx0aS1wbGF0Zm9ybSB0b29sa2l0IGZvciBjcmVhdGluZyBncmFwaGljYWwgdXNlciBpbnRlcmZhY2VzLiBPZmZlcmluZyBhIGNvbXBsZXRlIFwKK3NldCBvZiB3aWRnZXRzLCBHVEsrIGlzIHN1aXRhYmxlIGZvciBwcm9qZWN0cyByYW5naW5nIGZyb20gc21hbGwgb25lLW9mZiBwcm9qZWN0cyB0byBjb21wbGV0ZSBhcHBsaWNhdGlvbiBzdWl0ZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ndGsub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCisKK0xJQ0VOU0UgPSAiTEdQTHYyICYgTEdQTHYyKyAmIExHUEx2Mi4xKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTciCisKK1NFQ1RJT04gPSAibGlicyIKKworaW5oZXJpdCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKK0FOWV9PRl9ESVNUUk9fRkVBVFVSRVMgPSAiZGlyZWN0ZmIgeDExIgorCitYMTFERVBFTkRTID0gInZpcnR1YWwvbGlieDExIGxpYnhleHQgbGlieGN1cnNvciBsaWJ4cmFuZHIgbGlieGRhbWFnZSBsaWJ4cmVuZGVyIGxpYnhjb21wb3NpdGUiCitERVBFTkRTID0gImdsaWItMi4wIHBhbmdvIGF0ayBqcGVnIGxpYnBuZyBnZGstcGl4YnVmLW5hdGl2ZSBkb2Nib29rLXV0aWxzLW5hdGl2ZSBcCisgY2Fpcm8gZ2RrLXBpeGJ1ZiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0gXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2RpcmVjdGZiJywgJ2RpcmVjdGZiJywgJycsIGQpfSBcCisiCisKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLXdpdGgteD15ZXMgLS13aXRoLWdka3RhcmdldD14MTEsLS13aXRoLXg9bm8sJHtYMTFERVBFTkRTfSIKKyMgd2l0aG91dCAtLXdpdGgtZ2RrdGFyZ2V0PWRpcmVjdGZiIGl0IHdpbGwgY2hlY2sgZm9yIGNhaXJvLXhsaWIgd2hpY2ggaXNuJ3QgYXZhaWxhYmxlIHdpdGhvdXQgWDExIERJU1RST19GRUFUVVJFCitQQUNLQUdFQ09ORklHW2RpcmVjdGZiXSA9ICItLXdpdGgtZ2RrdGFyZ2V0PWRpcmVjdGZiLCxkaXJlY3RmYiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ3RrLWRvYyBwa2djb25maWcgdXBkYXRlLWFsdGVybmF0aXZlcyBndGstaW1tb2R1bGVzLWNhY2hlCisKK1BBQ0tBR0VTICs9ICJsaWJnYWlsIGd0ay1kZW1vIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlLTIuMCBcCisJJHtiaW5kaXJ9L2d0ay1xdWVyeS1pbW1vZHVsZXMtMi4wIFwKKwkke2xpYmRpcn0vbGliKiR7U09MSUJTfSBcCisJJHtkYXRhZGlyfS90aGVtZXMgJHtzeXNjb25mZGlyfSBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvJHtMSUJWfS9lbmdpbmVzL2xpYnBpeG1hcC5zbyIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIgXAorICAgICAgICAke2RhdGFkaXJ9L2d0ay0yLjAvaW5jbHVkZSBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvaW5jbHVkZSBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvbW9kdWxlcy8qLmxhIFwKKwkke2xpYmRpcn0vZ3RrLTIuMC8ke0xJQlZ9L2xvYWRlcnMvKi5sYSBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvJHtMSUJWfS9pbW1vZHVsZXMvKi5sYSBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvJHtMSUJWfS9wcmludGJhY2tlbmRzLyoubGEgXAorCSR7bGliZGlyfS9ndGstMi4wLyR7TElCVn0vZW5naW5lcy8qLmxhIFwKKwkke2JpbmRpcn0vZ3RrLWJ1aWxkZXItY29udmVydCIKKworRklMRVNfJHtQTn0tZGJnICs9ICIgXAorCSR7bGliZGlyfS9ndGstMi4wL21vZHVsZXMvLmRlYnVnLyogXAorICAgICAgICAke2xpYmRpcn0vZ3RrLTIuMC8ke0xJQlZ9L2xvYWRlcnMvLmRlYnVnLyogXAorCSR7bGliZGlyfS9ndGstMi4wLyR7TElCVn0vaW1tb2R1bGVzLy5kZWJ1Zy8qIFwKKwkke2xpYmRpcn0vZ3RrLTIuMC8ke0xJQlZ9L2VuZ2luZXMvLmRlYnVnLyogXAorCSR7bGliZGlyfS9ndGstMi4wLyR7TElCVn0vcHJpbnRiYWNrZW5kcy8uZGVidWcvKiIKKworRklMRVNfZ3RrLWRlbW8gPSAiIFwKKyAke2RhdGFkaXJ9L2d0ay0yLjAvZGVtby8qIFwKKyAke2JpbmRpcn0vZ3RrLWRlbW8gXAorICIKKworRklMRVNfbGliZ2FpbCA9ICIgXAorCSR7bGliZGlyfS9ndGstMi4wL21vZHVsZXMvbGliZ2FpbC5zbyBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvbW9kdWxlcy9saWJmZXJyZXQuc28gXAorCSIKKworR1RLQkFTRV9SUkVDT01NRU5EUyA/PSAibGliZXJhdGlvbi1mb250cyBnZGstcGl4YnVmLWxvYWRlci1wbmcgZ2RrLXBpeGJ1Zi1sb2FkZXItanBlZyBnZGstcGl4YnVmLWxvYWRlci1naWYgZ2RrLXBpeGJ1Zi1sb2FkZXIteHBtIHNoYXJlZC1taW1lLWluZm8iCitHVEtHTElCQ19SUkVDT01NRU5EUyA/PSAiJHtHVEtCQVNFX1JSRUNPTU1FTkRTfSBnbGliYy1nY29udi1pc284ODU5LTEiCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gIiR7R1RLQkFTRV9SUkVDT01NRU5EU30iCitSUkVDT01NRU5EU18ke1BOfV9saWJjLWdsaWJjID0gIiR7R1RLR0xJQkNfUlJFQ09NTUVORFN9IgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJndGstdXBkYXRlLWljb24tY2FjaGUiCitBTFRFUk5BVElWRV9UQVJHRVRbZ3RrLXVwZGF0ZS1pY29uLWNhY2hlXSA9ICIke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlLTIuMCIKKworZG9faW5zdGFsbCAoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZ3RrLTIuMAorCisJbWtkaXIgLXAgJHtEfSR7bGliZGlyfS9ndGstMi4wL2luY2x1ZGUKKwlpbnN0YWxsIC1tIDA2NDQgZ2RrL2dka2NvbmZpZy5oICR7RH0ke2xpYmRpcn0vZ3RrLTIuMC9pbmNsdWRlL2dka2NvbmZpZy5oCisKKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9ndGsvZ3RrZmlsZWNob29zZXJwcml2YXRlLmggJHtEfSR7aW5jbHVkZWRpcn0vZ3RrLTIuMC9ndGsvCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vZ3RrL2d0a2ZpbGVjaG9vc2VydXRpbHMuaCAgICR7RH0ke2luY2x1ZGVkaXJ9L2d0ay0yLjAvZ3RrLworCWluc3RhbGwgLW0gMDY0NCAke1N9L2d0ay9ndGtmaWxlc3lzdGVtbW9kZWwuaCAgICAke0R9JHtpbmNsdWRlZGlyfS9ndGstMi4wL2d0ay8KKworCW12ICR7RH0ke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlICR7RH0ke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlLTIuMAorfQorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImd0a19zeXNyb290X3ByZXByb2Nlc3MiCisKK2d0a19zeXNyb290X3ByZXByb2Nlc3MgKCkgeworCWlmIFsgLWUgJHtEfSR7YmluZGlyfS9ndGstYnVpbGRlci1jb252ZXJ0IF07IHRoZW4KKwkJaW5zdGFsbCAtZCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworCQlpbnN0YWxsIC1tIDc1NSAke0R9JHtiaW5kaXJ9L2d0ay1idWlsZGVyLWNvbnZlcnQgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS8KKwlmaQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvZG9jLWZpeGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrL2RvYy1maXhlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGU0NzlmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrL2RvYy1maXhlcy5wYXRjaApAQCAtMCwwICsxLDIyIEBACitUaGVyZSBhcmUgaXNzdWVzIGJ1aWxkaW5nIHRoZSBndGsrIHR1dG9yaWFsIGFuZCBmYXEgZG9jdW1lbnRhdGlvbi4KK1NpbmNlIHRoZXkgd2VyZSByZW1vdmVkIGluIGd0aysgdXBzdHJlYW0gYW5kIGFyZSBzdXBlcmZsdW91cyBpbgorZW1iZWRkZWQgYXBwbGljYXRpb25zLCBqdXN0IGRvbid0IGJ1aWxkIHRoZW0uCisKK1RoYW5rcyB0byBKb3NodWEgTG9jayBmb3Igc3VnZ2VzdGluZyB0aGlzIGFwcHJvYWNoLgorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworZGlmZiAtdXJOIGd0aystMi4yMi4xLm9yaWcvZG9jcy9NYWtlZmlsZS5hbSBndGsrLTIuMjIuMS9kb2NzL01ha2VmaWxlLmFtCistLS0gZ3RrKy0yLjIyLjEub3JpZy9kb2NzL01ha2VmaWxlLmFtCTIwMTAtMTEtMTUgMDQ6MTM6MDkuMDAwMDAwMDAwIC0wODAwCisrKysgZ3RrKy0yLjIyLjEvZG9jcy9NYWtlZmlsZS5hbQkyMDExLTAyLTIzIDE5OjI1OjE2LjkxNDgxNTA5NyAtMDgwMAorQEAgLTEsNyArMSw3IEBACisgIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluCisgaW5jbHVkZSAkKHRvcF9zcmNkaXIpL01ha2VmaWxlLmRlY2wKKyAKKy1TVUJESVJTID0gdHV0b3JpYWwgZmFxIHJlZmVyZW5jZSB0b29scworK1NVQkRJUlMgPSByZWZlcmVuY2UgdG9vbHMKKyAKKyBFWFRSQV9ESVNUICs9IFwKKyAJZGVmc2Zvcm1hdC50eHQJCQlcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvaGFyZGNvZGVkX2xpYnRvb2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvaGFyZGNvZGVkX2xpYnRvb2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFlNzI4ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy9oYXJkY29kZWRfbGlidG9vbC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitVcGRhdGVkIHRvIGFwcGx5IHRvIGd0aystMi4yNC4xNQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBndGsrLTIuMjQuMTUvY29uZmlndXJlLmFjIGd0aystMi4yNC4xNS9jb25maWd1cmUuYWMKKy0tLSBndGsrLTIuMjQuMTUvY29uZmlndXJlLmFjCTIwMTMtMDEtMTIgMjA6NTI6NTQuMDAwMDAwMDAwICswMjAwCisrKysgZ3RrKy0yLjI0LjE1L2NvbmZpZ3VyZS5hYwkyMDEzLTAyLTEyIDIxOjMzOjMwLjY4OTkyNTk2NyArMDIwMAorQEAgLTQxNSw3ICs0MTUsNyBAQAorIGNhc2UgJGVuYWJsZV9leHBsaWNpdF9kZXBzIGluCisgICBhdXRvKQorICAgICBleHBvcnQgU0VECistICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kPWAoLi9saWJ0b29sIC0tY29uZmlnOyBlY2hvICdldmFsIGVjaG8gXCIkZGVwbGlic19jaGVja19tZXRob2RcIicpIHwgc2hgCisrICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kPWAoLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnOyBlY2hvICdldmFsIGVjaG8gXCIkZGVwbGlic19jaGVja19tZXRob2RcIicpIHwgc2hgCisgICAgIGlmIHRlc3QgIngkZGVwbGlic19jaGVja19tZXRob2QiICchPScgeHBhc3NfYWxsIHx8IHRlc3QgIngkZW5hYmxlX3N0YXRpYyIgPSB4eWVzIDsgdGhlbgorICAgICAgIGVuYWJsZV9leHBsaWNpdF9kZXBzPXllcworICAgICBlbHNlCitAQCAtNzc0LDcgKzc3NCw3IEBACisgICAgIGRubCBOb3cgd2UgY2hlY2sgdG8gc2VlIGlmIG91ciBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWIgZGVwcworICAgICBkbmwgKGluIGEgcmF0aGVyIHVnbHkgd2F5IGV2ZW4pCisgICAgIGlmICRkeW53b3JrczsgdGhlbgorLSAgICAgICAgbW9kdWxlX2xpYnRvb2xfY29uZmlnPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSAuL2xpYnRvb2wgLS1jb25maWciCisrICAgICAgICBtb2R1bGVfbGlidG9vbF9jb25maWc9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWciCisgICAgICAgICBtb2R1bGVfZGVwbGlic19jaGVjaz1gJG1vZHVsZV9saWJ0b29sX2NvbmZpZyB8IFwKKyAgICAgICAgICAgICBncmVwICdeW1thLXpfXV0qY2hlY2tbW2Etel9dXSpfbWV0aG9kPVtbJ1wnJyJdXScgfCBcCisgICAgICAgICAgICAgc2VkICdzLy4qW1snXCcnIl1dXCguKlwpW1snXCcnIl1dJC9cMS8nYAorQEAgLTE1NzQsNyArMTU3NCw3IEBACisgIyBXZSBhcmUgdXNpbmcgZ21vZHVsZS1uby1leHBvcnQgbm93LCBidXQgSSdtIGxlYXZpbmcgdGhlIHN0cmlwcGluZworICMgY29kZSBpbiBwbGFjZSBmb3Igbm93LCBzaW5jZSBwYW5nbyBhbmQgYXRrIHN0aWxsIHJlcXVpcmUgZ21vZHVsZS4KKyBleHBvcnQgU0VECistZXhwb3J0X2R5bmFtaWM9YCguL2xpYnRvb2wgLS1jb25maWc7IGVjaG8gZXZhbCBlY2hvIFxcJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYykgfCBzaGAKKytleHBvcnRfZHluYW1pYz1gKCRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWc7IGVjaG8gZXZhbCBlY2hvIFxcJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYykgfCBzaGAKKyBpZiB0ZXN0IC1uICIkZXhwb3J0X2R5bmFtaWMiOyB0aGVuCisgICBHREtfREVQX0xJQlM9YGVjaG8gJEdES19ERVBfTElCUyB8IHNlZCAtZSAicy8kZXhwb3J0X2R5bmFtaWMvLyJgCisgICBHVEtfREVQX0xJQlM9YGVjaG8gJEdUS19ERVBfTElCUyB8IHNlZCAtZSAicy8kZXhwb3J0X2R5bmFtaWMvLyJgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvc3RyaWN0LXByb3RvdHlwZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvc3RyaWN0LXByb3RvdHlwZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZlMWY1ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy9zdHJpY3QtcHJvdG90eXBlcy5wYXRjaApAQCAtMCwwICsxLDI0IEBACitGaXhlcworCitpbmNsdWRlL2d0ay0yLjAvZ3RrL2d0a2l0ZW1mYWN0b3J5Lmg6NDc6MTogd2FybmluZzogZnVuY3Rpb24gZGVjbGFyYXRpb24gaXNuJ3QgYSBwcm90b3R5cGUgWy1Xc3RyaWN0LXByb3RvdHlwZXNdCisgdHlwZWRlZiB2b2lkICgqR3RrSXRlbUZhY3RvcnlDYWxsYmFjaykgICgpOworCitnY2M1IGhhcyAtV3N0cmljdC1wcm90b3R5cGVzIG9uIGJ5IGRlZmF1bHQgZm9yIC1XZXJyb3Igc28gdGhpcyBiZWNvbWVzIGEgYnVpbGQgZmFpbHVyZSBmb3IgY29uc3VtZXJzCitvZiB0aGlzIGhlYWRlciBlLmcuIG1hdGNoYm94LXBhbmVsLTIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitJbmRleDogZ3RrKy0yLjI0LjI3L2d0ay9ndGtpdGVtZmFjdG9yeS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3RrKy0yLjI0LjI3Lm9yaWcvZ3RrL2d0a2l0ZW1mYWN0b3J5LmgKKysrKyBndGsrLTIuMjQuMjcvZ3RrL2d0a2l0ZW1mYWN0b3J5LmgKK0BAIC00NCw3ICs0NCw3IEBAIHR5cGVkZWYgdm9pZAkoKkd0a1ByaW50RnVuYykJCSAgIChncG9pbnQKKyAgKiAoTm90ZSB0aGF0IGlmIHdlIGFyZSBpbmNsdWRlZCBmcm9tIGEgQysrIHByb2dyYW0gKCkgd2lsbCBtZWFuCisgICogKHZvaWQpIHNvIGFuIGV4cGxpY2l0IGNhc3Qgd2lsbCBiZSBuZWVkZWQuKQorICAqLworLXR5cGVkZWYJdm9pZAkoKkd0a0l0ZW1GYWN0b3J5Q2FsbGJhY2spICAoKTsKKyt0eXBlZGVmCXZvaWQJKCpHdGtJdGVtRmFjdG9yeUNhbGxiYWNrKSAgKHZvaWQpOworIHR5cGVkZWYJdm9pZAkoKkd0a0l0ZW1GYWN0b3J5Q2FsbGJhY2sxKSAoZ3BvaW50ZXIJCSBjYWxsYmFja19kYXRhLAorIAkJCQkJICAgIGd1aW50CQkgY2FsbGJhY2tfYWN0aW9uLAorIAkJCQkJICAgIEd0a1dpZGdldAkJKndpZGdldCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvdG9nZ2xlLWZvbnQuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy90b2dnbGUtZm9udC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MGQxMjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvdG9nZ2xlLWZvbnQuZGlmZgpAQCAtMCwwICsxLDEwMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBndGsvZ3RrY2VsbHJlbmRlcmVydG9nZ2xlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBndGsvZ3RrY2VsbHJlbmRlcmVydG9nZ2xlLmMub3JpZwkyMDEwLTA2LTIyIDE4OjExOjMzLjAwMDAwMDAwMCArMDgwMAorKysrIGd0ay9ndGtjZWxscmVuZGVyZXJ0b2dnbGUuYwkyMDEwLTA2LTIyIDE4OjExOjQzLjAwMDAwMDAwMCArMDgwMAorQEAgLTcxLDYgKzcxLDggQEAKKyAgIFBST1BfSU5ESUNBVE9SX1NJWkUKKyB9OworIAorKy8qIFRoaXMgaXMgYSBoYXJkLWNvZGVkIGRlZmF1bHQgd2hpY2ggcHJvbXB0bHkgZ2V0cyBvdmVycmlkZGVuIGJ5IGEgc2l6ZQorKyAgIGNhbGN1bGF0ZWQgZnJvbSB0aGUgZm9udCBzaXplLiAqLworICNkZWZpbmUgVE9HR0xFX1dJRFRIIDEzCisgCisgc3RhdGljIGd1aW50IHRvZ2dsZV9jZWxsX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07CitAQCAtODAsOCArODIsOSBAQAorIHR5cGVkZWYgc3RydWN0IF9HdGtDZWxsUmVuZGVyZXJUb2dnbGVQcml2YXRlIEd0a0NlbGxSZW5kZXJlclRvZ2dsZVByaXZhdGU7Cisgc3RydWN0IF9HdGtDZWxsUmVuZGVyZXJUb2dnbGVQcml2YXRlCisgeworLSAgZ2ludCBpbmRpY2F0b3Jfc2l6ZTsKKy0KKysgIGdpbnQgaW5kaWNhdG9yX3NpemU7IC8qIFRoaXMgaXMgdGhlIHJlYWwgc2l6ZSAqLworKyAgZ2ludCBvdmVycmlkZV9zaXplOyAvKiBUaGlzIGlzIHRoZSBzaXplIHNldCBmcm9tIHRoZSBpbmRpY2F0b3Itc2l6ZSBwcm9wZXJ0eSAqLworKyAgR3RrV2lkZ2V0ICpjYWNoZWRfd2lkZ2V0OworICAgZ3VpbnQgaW5jb25zaXN0ZW50IDogMTsKKyB9OworIAorQEAgLTEwNCw2ICsxMDcsNyBAQAorICAgR1RLX0NFTExfUkVOREVSRVIgKGNlbGx0b2dnbGUpLT55cGFkID0gMjsKKyAKKyAgIHByaXYtPmluZGljYXRvcl9zaXplID0gVE9HR0xFX1dJRFRIOworKyAgcHJpdi0+b3ZlcnJpZGVfc2l6ZSA9IDA7CisgICBwcml2LT5pbmNvbnNpc3RlbnQgPSBGQUxTRTsKKyB9CisgCitAQCAtMjEwLDcgKzIxNCw3IEBACisgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGNlbGx0b2dnbGUtPnJhZGlvKTsKKyAgICAgICBicmVhazsKKyAgICAgY2FzZSBQUk9QX0lORElDQVRPUl9TSVpFOgorLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHByaXYtPmluZGljYXRvcl9zaXplKTsKKysgICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBwcml2LT5vdmVycmlkZV9zaXplID8gcHJpdi0+b3ZlcnJpZGVfc2l6ZSA6IHByaXYtPmluZGljYXRvcl9zaXplKTsKKyAgICAgICBicmVhazsKKyAgICAgZGVmYXVsdDoKKyAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcGFyYW1faWQsIHBzcGVjKTsKK0BAIC0yNDUsNyArMjQ5LDcgQEAKKyAgICAgICBjZWxsdG9nZ2xlLT5yYWRpbyA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKKyAgICAgICBicmVhazsKKyAgICAgY2FzZSBQUk9QX0lORElDQVRPUl9TSVpFOgorLSAgICAgIHByaXYtPmluZGljYXRvcl9zaXplID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7CisrICAgICAgcHJpdi0+b3ZlcnJpZGVfc2l6ZSA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOworICAgICAgIGJyZWFrOworICAgICBkZWZhdWx0OgorICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwYXJhbV9pZCwgcHNwZWMpOworQEAgLTI3Myw2ICsyNzcsMjcgQEAKKyB9CisgCisgc3RhdGljIHZvaWQKKytvbl93aWRnZXRfc3R5bGVfc2V0IChHdGtXaWRnZXQgKndpZGdldCwgR3RrU3R5bGUgKnByZXZpb3VzLCBncG9pbnRlciB1c2VyX2RhdGEpCisreworKyAgR3RrQ2VsbFJlbmRlcmVyVG9nZ2xlUHJpdmF0ZSAqcHJpdiA9IHVzZXJfZGF0YTsKKysgIFBhbmdvQ29udGV4dCAqY29udGV4dDsKKysgIFBhbmdvRm9udE1ldHJpY3MgKm1ldHJpY3M7CisrICBpbnQgaGVpZ2h0OworKyAgCisrICBjb250ZXh0ID0gZ3RrX3dpZGdldF9nZXRfcGFuZ29fY29udGV4dCAod2lkZ2V0KTsKKysgIG1ldHJpY3MgPSBwYW5nb19jb250ZXh0X2dldF9tZXRyaWNzIChjb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldC0+c3R5bGUtPmZvbnRfZGVzYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5nb19jb250ZXh0X2dldF9sYW5ndWFnZSAoY29udGV4dCkpOworKworKyAgaGVpZ2h0ID0gcGFuZ29fZm9udF9tZXRyaWNzX2dldF9hc2NlbnQgKG1ldHJpY3MpICsKKysgICAgcGFuZ29fZm9udF9tZXRyaWNzX2dldF9kZXNjZW50IChtZXRyaWNzKTsKKysgIAorKyAgcGFuZ29fZm9udF9tZXRyaWNzX3VucmVmIChtZXRyaWNzKTsKKysgIAorKyAgcHJpdi0+aW5kaWNhdG9yX3NpemUgPSBQQU5HT19QSVhFTFMgKGhlaWdodCAqIDAuODUpOworK30KKysKKytzdGF0aWMgdm9pZAorIGd0a19jZWxsX3JlbmRlcmVyX3RvZ2dsZV9nZXRfc2l6ZSAoR3RrQ2VsbFJlbmRlcmVyICpjZWxsLAorIAkJCQkgICBHdGtXaWRnZXQgICAgICAgKndpZGdldCwKKyAJCQkJICAgR2RrUmVjdGFuZ2xlICAgICpjZWxsX2FyZWEsCitAQCAtMjg3LDYgKzMxMiwyMCBAQAorIAorICAgcHJpdiA9IEdUS19DRUxMX1JFTkRFUkVSX1RPR0dMRV9HRVRfUFJJVkFURSAoY2VsbCk7CisgCisrICBpZiAocHJpdi0+b3ZlcnJpZGVfc2l6ZSkgeworKyAgICBwcml2LT5pbmRpY2F0b3Jfc2l6ZSA9IHByaXYtPm92ZXJyaWRlX3NpemU7CisrICB9IGVsc2UgaWYgKHByaXYtPmNhY2hlZF93aWRnZXQgIT0gd2lkZ2V0KSB7CisrICAgIGlmIChwcml2LT5jYWNoZWRfd2lkZ2V0KSB7CisrICAgICAgZ19vYmplY3RfcmVtb3ZlX3dlYWtfcG9pbnRlciAod2lkZ2V0LCAmcHJpdi0+Y2FjaGVkX3dpZGdldCk7CisrICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jIChwcml2LT5jYWNoZWRfd2lkZ2V0LCBvbl93aWRnZXRfc3R5bGVfc2V0LCBwcml2KTsKKysgICAgfQorKyAgICBwcml2LT5jYWNoZWRfd2lkZ2V0ID0gd2lkZ2V0OworKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyICh3aWRnZXQsICZwcml2LT5jYWNoZWRfd2lkZ2V0KTsKKysgICAgZ19zaWduYWxfY29ubmVjdCAod2lkZ2V0LCAic3R5bGUtc2V0Iiwgb25fd2lkZ2V0X3N0eWxlX3NldCwgcHJpdik7CisrICAgIAorKyAgICBvbl93aWRnZXRfc3R5bGVfc2V0ICh3aWRnZXQsIE5VTEwsIHByaXYpOworKyAgfQorKworICAgY2FsY193aWR0aCA9IChnaW50KSBjZWxsLT54cGFkICogMiArIHByaXYtPmluZGljYXRvcl9zaXplOworICAgY2FsY19oZWlnaHQgPSAoZ2ludCkgY2VsbC0+eXBhZCAqIDIgKyBwcml2LT5pbmRpY2F0b3Jfc2l6ZTsKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy94c2V0dGluZ3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysveHNldHRpbmdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYTk3MGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysveHNldHRpbmdzLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ3RrKy0yLjIxLjIvZ2RrL3gxMS9nZGtldmVudHMteDExLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBndGsrLTIuMjEuMi5vcmlnL2dkay94MTEvZ2RrZXZlbnRzLXgxMS5jCTIwMTAtMDYtMjIgMTc6Mjg6MDQuMDAwMDAwMDAwICswODAwCisrKysgZ3RrKy0yLjIxLjIvZ2RrL3gxMS9nZGtldmVudHMteDExLmMJMjAxMC0wNi0yMiAxNzoyODowNi4wMDAwMDAwMDAgKzA4MDAKK0BAIC0zMDYyLDEwICszMDYyLDkgQEAKKyB7CisgICBHZGtTY3JlZW5YMTEgKnNjcmVlbiA9IGRhdGE7CisgICAKKy0gIGlmICh4c2V0dGluZ3NfY2xpZW50X3Byb2Nlc3NfZXZlbnQgKHNjcmVlbi0+eHNldHRpbmdzX2NsaWVudCwgKFhFdmVudCAqKXhldmVudCkpCistICAgIHJldHVybiBHREtfRklMVEVSX1JFTU9WRTsKKy0gIGVsc2UKKy0gICAgcmV0dXJuIEdES19GSUxURVJfQ09OVElOVUU7CisrICB4c2V0dGluZ3NfY2xpZW50X3Byb2Nlc3NfZXZlbnQgKHNjcmVlbi0+eHNldHRpbmdzX2NsaWVudCwgKFhFdmVudCAqKXhldmVudCk7CisrCisrICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKKyB9CisgCisgc3RhdGljIEJvb2wKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI5ZjBkMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMuaW5jCkBAIC0wLDAgKzEsMTExIEBACitTVU1NQVJZID0gIk11bHRpLXBsYXRmb3JtIHRvb2xraXQgZm9yIGNyZWF0aW5nIEdVSXMiCitERVNDUklQVElPTiA9ICJHVEsrIGlzIGEgbXVsdGktcGxhdGZvcm0gdG9vbGtpdCBmb3IgY3JlYXRpbmcgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlcy4gT2ZmZXJpbmcgYSBjb21wbGV0ZSBcCitzZXQgb2Ygd2lkZ2V0cywgR1RLKyBpcyBzdWl0YWJsZSBmb3IgcHJvamVjdHMgcmFuZ2luZyBmcm9tIHNtYWxsIG9uZS1vZmYgcHJvamVjdHMgdG8gY29tcGxldGUgYXBwbGljYXRpb24gc3VpdGVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ3RrLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorU0VDVElPTiA9ICJsaWJzIgorCitERVBFTkRTID0gImdsaWItMi4wIGNhaXJvIHBhbmdvIGF0ayBqcGVnIGxpYnBuZyBnZGstcGl4YnVmIFwKKyAgICAgICAgICAgZG9jYm9vay11dGlscy1uYXRpdmUgZ2RrLXBpeGJ1Zi1uYXRpdmUgbGliZXBveHkiCisKK0xJQ0VOU0UgPSAiTEdQTHYyICYgTEdQTHYyKyAmIExHUEx2Mi4xKyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGd0ay1kb2MgdXBkYXRlLWFsdGVybmF0aXZlcyBndGstaW1tb2R1bGVzLWNhY2hlIGdzZXR0aW5ncworCisjIFRoaXMgc2hvdWxkIGJlIGluIGF1dG90b29scy5iYmNsYXNzLCBidXQgdW50aWwgc29tZXRoaW5nIGVsc2VzIHVzZXMgaXQgcHV0dGluZworIyBpdCBoZXJlIGF2b2lkcyByZWJ1aWxkaW5nIGV2ZXJ5dGhpbmcuCitleHBvcnQgUEtHX0NPTkZJR19GT1JfQlVJTEQgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3BrZy1jb25maWctbmF0aXZlIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAjIERvIHRoaXMgYmVjYXVzZSB0aGUgY29uZmlndXJlIHNjcmlwdCBpcyBydW5uaW5nIC4vbGlidG9vbCBkaXJlY3RseQorICAgIHJtIC1mIGxpYnRvb2wKKyAgICBsbiAtcyAke1RBUkdFVF9QUkVGSVh9bGlidG9vbCBsaWJ0b29sCit9CisKK0VYVFJBX09FQ09ORiArPSAiIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWdsaWJ0ZXN0IFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXhpbmVyYW1hIFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtbW9kdWxlcyBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1jdXBzIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWludHJvc3BlY3Rpb24gXAorIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJ4MTEiLCAieDExIiwgIiIsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJ3YXlsYW5kIiwgIndheWxhbmQiLCAiIiwgZCl9IgorCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUteDExLWJhY2tlbmQsLS1kaXNhYmxlLXgxMS1iYWNrZW5kLGF0LXNwaTItYXRrIGZvbnRjb25maWcgbGlieDExIGxpYnhleHQgbGlieGN1cnNvciBsaWJ4aSBsaWJ4ZGFtYWdlIGxpYnhyYW5kciBsaWJ4cmVuZGVyIGxpYnhjb21wb3NpdGUgbGlieGZpeGVzIgorUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSA9ICItLWVuYWJsZS13YXlsYW5kLWJhY2tlbmQsLS1kaXNhYmxlLXdheWxhbmQtYmFja2VuZCx3YXlsYW5kIGxpYnhrYmNvbW1vbiB2aXJ0dWFsL21lc2EiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCW12ICR7RH0ke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlICR7RH0ke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlLTMuMAorfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tZGVtbyIKK0xJQlYgPSAiMy4wLjAiCisKK0ZJTEVTXyR7UE59LWRlbW8gPSAiJHtiaW5kaXJ9L2d0azMtZGVtbyBcCisgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9ndGszLWRlbW8tYXBwbGljYXRpb24gXAorICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZ3RrMy1pY29uLWJyb3dzZXIgXAorICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZ3RrMy13aWRnZXQtZmFjdG9yeSBcCisgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ3RrLTMuMC9kZW1vIFwKKyAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvZ3RrMy1kZW1vLmRlc2t0b3AgXAorICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9ndGszLWljb24tYnJvd3Nlci5kZXNrdG9wIFwKKyAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvZ3RrMy13aWRnZXQtZmFjdG9yeS5kZXNrdG9wIFwKKyAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9pY29ucy9oaWNvbG9yLyovYXBwcy9ndGszLWRlbW8qLnBuZyBcCisgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vaWNvbnMvaGljb2xvci8qL2FwcHMvZ3RrMy13aWRnZXQtZmFjdG9yeSoucG5nIgorCisjIFRoZSBkZW1vIHVzZXMgUE5HIGZpbGVzIGFuZCBtaW1lIHR5cGUgc25pZmZpbmcsIHNvIGVuc3VyZSB0aGF0IHRoZXNlCisjIGRlcGVuZGVuY2llcyBhcmUgcHJlc2VudC4KK1JERVBFTkRTXyR7UE59LWRlbW8gKz0gImdkay1waXhidWYtbG9hZGVyLXBuZyBzaGFyZWQtbWltZS1pbmZvIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlLTMuMCBcCisgICAgICAgICAgICAgICAke2JpbmRpcn0vZ3RrLXF1ZXJ5LWltbW9kdWxlcy0zLjAgXAorICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2d0ay1sYXVuY2ggXAorICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYioke1NPTElCU30gXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS90aGVtZXMgJHtzeXNjb25mZGlyfSAke2RhdGFkaXJ9L2dsaWItMi4wL3NjaGVtYXMvIFwKKyAgICAgICAgICAgICAgICR7bGliZGlyfS9ndGstMy4wLyR7TElCVn0vZW5naW5lcy9saWJwaXhtYXAuc28gXAorICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvbW9kdWxlcy8qLnNvIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiBcCisgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ3RrLTMuMC9ndGtidWlsZGVyLnJuZyBcCisgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ3RrLTMuMC9pbmNsdWRlIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvaW5jbHVkZSBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ndGstMy4wLyR7TElCVn0vbG9hZGVycy8qLmxhIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvJHtMSUJWfS9pbW1vZHVsZXMvKi5sYSBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ndGstMy4wLzMuMC4wL3ByaW50YmFja2VuZHMvKi5sYSBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ndGstMy4wLyR7TElCVn0vZW5naW5lcy8qLmxhIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvbW9kdWxlcy8qLmxhIFwKKyAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2d0ay1idWlsZGVyLWNvbnZlcnQgXAorICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmciCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvJHtMSUJWfS9sb2FkZXJzLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ndGstMy4wLyR7TElCVn0vaW1tb2R1bGVzLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ndGstMy4wLyR7TElCVn0vZW5naW5lcy8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC8ke0xJQlZ9L3ByaW50YmFja2VuZHMvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvbW9kdWxlcy8uZGVidWciCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gImFkd2FpdGEtaWNvbi10aGVtZS1zeW1ib2xpYyIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXmd0azMtaW1tb2R1bGUtLiogXmd0azMtcHJpbnRiYWNrZW5kLS4qIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJndGstdXBkYXRlLWljb24tY2FjaGUiCitBTFRFUk5BVElWRV9UQVJHRVRbZ3RrLXVwZGF0ZS1pY29uLWNhY2hlXSA9ICIke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlLTMuMCIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGltcG9ydCBvcy5wYXRoCisKKyAgICBndGtfbGliZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfS9ndGstMy4wLyR7TElCVn0nKQorICAgIGltbW9kdWxlc19yb290ID0gb3MucGF0aC5qb2luKGd0a19saWJkaXIsICdpbW1vZHVsZXMnKQorICAgIHByaW50bW9kdWxlc19yb290ID0gb3MucGF0aC5qb2luKGd0a19saWJkaXIsICdwcmludGJhY2tlbmRzJyk7CisKKyAgICBpbW1vZHVsZXMgPSBkb19zcGxpdF9wYWNrYWdlcyhkLCBpbW1vZHVsZXNfcm9vdCwgJ15pbS0oLiopXC5zbyQnLCAnZ3RrMy1pbW1vZHVsZS0lcycsICdHVEsgaW5wdXQgbW9kdWxlIGZvciAlcycpCisgICAgaWYgaW1tb2R1bGVzOgorICAgICAgICBkLnNldFZhcigiR1RLSU1NT0RVTEVTX1BBQ0tBR0VTIiwgIiAiLmpvaW4oaW1tb2R1bGVzKSkKKworICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHByaW50bW9kdWxlc19yb290LCAnXmxpYnByaW50YmFja2VuZC0oLiopXC5zbyQnLCAnZ3RrMy1wcmludGJhY2tlbmQtJXMnLCAnR1RLIHByaW50YmFja2VuZCBtb2R1bGUgZm9yICVzJykKKworICAgIGlmIChkLmdldFZhcignREVCSUFOX05BTUVTJywgMSkpOgorICAgICAgICBkLnNldFZhcignUEtHXyR7UE59JywgJyR7TUxQUkVGSVh9bGliZ3RrLTMuMCcpCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvRG9udC1mb3JjZS1jc2QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszL0RvbnQtZm9yY2UtY3NkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZDhhODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszL0RvbnQtZm9yY2UtY3NkLnBhdGNoCkBAIC0wLDAgKzEsMTE4IEBACit3aW5kb3c6IENoZWNrIGlmIHdlIGNhbiB1c2UgQ1NEIGJlZm9yZSBlbmFibGluZyB0aGVtCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CisKKworRnJvbSBjNWU1ZWU2NzQ5MGU3ZTdhZjU2MDUyZDhmOGJlYjc1ZGIwMDJjMmYxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRW1tYW51ZWxlIEJhc3NpIDxlYmFzc2lAZ25vbWUub3JnPgorRGF0ZTogV2VkLCAzIEp1biAyMDE1IDE0OjA3OjI5ICswMTAwCitTdWJqZWN0OiB3aW5kb3c6IENoZWNrIGlmIHdlIGNhbiB1c2UgQ1NEIGJlZm9yZSBlbmFibGluZyB0aGVtCisKK1RoZSBjaGFuZ2UgaW4gMDMyMTNiOTUwOWZjMWRmMTZjNjYxOTRlYTE2OGFlZDZjMTUxMTBlOSBjaGFuZ2VkIHRoZSBydWxlcworYXMgdG8gd2hlbiBDU0QgY2FuIGJlIGVuYWJsZWQsIGJ1dCBpdCBhbHNvIHVuY29uZGl0aW9uYWxseSBlbmFibGVzIENTRAord2l0aCB0aGUgaW1wbGljaXQgYXNzdW1wdGlvbiB0aGF0IGNsaWVudC1zaWRlIHNoYWRvd3Mgd2VyZSB0aGUgcmVhbAoraXNzdWUsIGFuZCB0aGF0IHdlIGNvdWxkIHdvcmsgYXJvdW5kIHRoYXQgYnkgZHJhd2luZyBvdXIgb3duIGJvcmRlcnMuCitUaGlzIGFsc28gbWVhbnMgdGhhdCBzZXR0aW5nIGEgdGl0bGViYXIgZm9yIGEgR3RrV2luZG93IHdpbGwgZW5hYmxlIENTRAordW5jb25kaXRpb25hbGx5LgorCitJbiByZWFsaXR5LCBzb21lIHdpbmRvdyBtYW5hZ2VycyAobGlrZSBNYXRjaGJveCkgKm9ubHkqIHN1cHBvcnQKK3NlcnZlci1zaWRlIGRlY29yYXRpb25zLCBhbmQgd2lsbCBpZ25vcmUgYWxsIGhpbnRzIHRvIHRoZSBjb250cmFyeSwgdG8KK3RoZSBwb2ludCBvZiBkcmF3aW5nIGRlY29yYXRpb25zIGF0IHJhbmRvbSBsb2NhdGlvbnMgb24gdG9wIG9mIHRoZQord2luZG93LgorCitTaW5jZSBDU0QgYXJlIGVuYWJsZWQgdW5jb25kaXRpb25hbGx5LCB0aGUgR1RLX0NTRCBlbnZpcm9ubWVudCB2YXJpYWJsZQoraXMgYWxzbyBub3QgYSBzdWl0YWJsZSBlc2NhcGUgaGF0Y2guCisKK0luIHRoZSBncmFuZCB0cmFkaXRpb24gb2YgYXNraW5nIG91cnNlbHZlcyBpZiB3ZSBzaG91bGQgZG8gc29tZXRoaW5nCitqdXN0IGJlY2F1c2Ugd2UgY2FuLCB3ZSBzaG91bGQgc3BsaXQgdGhlIGVudmlyb25tZW50IGNoZWNrcyBmcm9tIHRoZQorY2hlY2tzIG9uIHdoYXQgdGhlIHVzZXIgcmVxdWVzdGVkOyBieSBkb2luZyB0aGF0LCB3ZSBjYW4gYWxzbyBjaGVjaword2hlbiBlbmFibGluZyBjbGllbnQtc2lkZSBkZWNvcmF0aW9ucywgYW5kIGlkZWFsbHkgYmFpbCBvdXQgaWYgbmVlZGVkLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUwMzQzCisKK2RpZmYgLS1naXQgYS9ndGsvZ3Rrd2luZG93LmMgYi9ndGsvZ3Rrd2luZG93LmMKK2luZGV4IDQyM2M2YmQuLjlmZTg4MmYgMTAwNjQ0CistLS0gYS9ndGsvZ3Rrd2luZG93LmMKKysrKyBiL2d0ay9ndGt3aW5kb3cuYworQEAgLTQwNTYsNiArNDA1NiwzMiBAQCBndGtfd2luZG93X3N1cHBvcnRzX2NsaWVudF9zaGFkb3cgKEd0a1dpbmRvdyAqd2luZG93KQorICAgcmV0dXJuIFRSVUU7CisgfQorIAorK3N0YXRpYyBnYm9vbGVhbgorK2d0a193aW5kb3dfY2FuX3VzZV9jc2QgKEd0a1dpbmRvdyAqd2luZG93KQorK3sKKysgIGNvbnN0IGdjaGFyICpjc2RfZW52OworKworKyNpZmRlZiBHREtfV0lORE9XSU5HX0JST0FEV0FZCisrICBpZiAoR0RLX0lTX0JST0FEV0FZX0RJU1BMQVkgKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkgKEdUS19XSURHRVQgKHdpbmRvdykpKSkKKysgICAgcmV0dXJuIFRSVUU7CisrI2VuZGlmCisrCisrI2lmZGVmIEdES19XSU5ET1dJTkdfV0FZTEFORAorKyAgaWYgKEdES19JU19XQVlMQU5EX0RJU1BMQVkgKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkgKEdUS19XSURHRVQgKHdpbmRvdykpKSkKKysgICAgcmV0dXJuIFRSVUU7CisrI2VuZGlmCisrCisrI2lmZGVmIEdES19XSU5ET1dJTkdfTUlSCisrICBpZiAoR0RLX0lTX01JUl9ESVNQTEFZIChndGtfd2lkZ2V0X2dldF9kaXNwbGF5IChHVEtfV0lER0VUICh3aW5kb3cpKSkpCisrICAgIHJldHVybiBUUlVFOworKyNlbmRpZgorKworKyAgY3NkX2VudiA9IGdfZ2V0ZW52ICgiR1RLX0NTRCIpOworKworKyAgLyogSWYgR1RLX0NTRCBpcyB1bnNldCB3ZSBkZWZhdWx0IHRvIENTRCBzdXBwb3J0ICovCisrICByZXR1cm4gY3NkX2VudiA9PSBOVUxMIHx8IChzdHJjbXAgKGNzZF9lbnYsICIxIikgPT0gMCk7CisrfQorKworIHN0YXRpYyB2b2lkCisgZ3RrX3dpbmRvd19lbmFibGVfY3NkIChHdGtXaW5kb3cgKndpbmRvdykKKyB7CitAQCAtNDA2Myw2ICs0MDg5LDEwIEBAIGd0a193aW5kb3dfZW5hYmxlX2NzZCAoR3RrV2luZG93ICp3aW5kb3cpCisgICBHdGtXaWRnZXQgKndpZGdldCA9IEdUS19XSURHRVQgKHdpbmRvdyk7CisgICBHZGtWaXN1YWwgKnZpc3VhbDsKKyAKKysgIC8qIElmIHRoZSBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IENTRCwgdGhlbiB0aGVyZSdzIG5vIHBvaW50IGluIGVuYWJsaW5nIHRoZW0gKi8KKysgIGlmICghZ3RrX3dpbmRvd19jYW5fdXNlX2NzZCAod2luZG93KSkKKysgICAgcmV0dXJuOworKworICAgLyogV2UgbmVlZCBhIHZpc3VhbCB3aXRoIGFscGhhIGZvciBjbGllbnQgc2hhZG93cyAqLworICAgaWYgKHByaXYtPnVzZV9jbGllbnRfc2hhZG93KQorICAgICB7CitAQCAtNTgzOSw3ICs1ODY5LDYgQEAgc3RhdGljIGdib29sZWFuCisgZ3RrX3dpbmRvd19zaG91bGRfdXNlX2NzZCAoR3RrV2luZG93ICp3aW5kb3cpCisgeworICAgR3RrV2luZG93UHJpdmF0ZSAqcHJpdiA9IHdpbmRvdy0+cHJpdjsKKy0gIGNvbnN0IGdjaGFyICpjc2RfZW52OworIAorICAgaWYgKHByaXYtPmNzZF9yZXF1ZXN0ZWQpCisgICAgIHJldHVybiBUUlVFOworQEAgLTU4NTAsMjQgKzU4NzksNyBAQCBndGtfd2luZG93X3Nob3VsZF91c2VfY3NkIChHdGtXaW5kb3cgKndpbmRvdykKKyAgIGlmIChwcml2LT50eXBlID09IEdUS19XSU5ET1dfUE9QVVApCisgICAgIHJldHVybiBGQUxTRTsKKyAKKy0jaWZkZWYgR0RLX1dJTkRPV0lOR19CUk9BRFdBWQorLSAgaWYgKEdES19JU19CUk9BRFdBWV9ESVNQTEFZIChndGtfd2lkZ2V0X2dldF9kaXNwbGF5IChHVEtfV0lER0VUICh3aW5kb3cpKSkpCistICAgIHJldHVybiBUUlVFOworLSNlbmRpZgorLQorLSNpZmRlZiBHREtfV0lORE9XSU5HX1dBWUxBTkQKKy0gIGlmIChHREtfSVNfV0FZTEFORF9ESVNQTEFZIChndGtfd2lkZ2V0X2dldF9kaXNwbGF5IChHVEtfV0lER0VUICh3aW5kb3cpKSkpCistICAgIHJldHVybiBUUlVFOworLSNlbmRpZgorLQorLSNpZmRlZiBHREtfV0lORE9XSU5HX01JUgorLSAgaWYgKEdES19JU19NSVJfRElTUExBWSAoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSAoR1RLX1dJREdFVCAod2luZG93KSkpKQorLSAgICByZXR1cm4gVFJVRTsKKy0jZW5kaWYKKy0KKy0gIGNzZF9lbnYgPSBnX2dldGVudiAoIkdUS19DU0QiKTsKKy0KKy0gIHJldHVybiAoZ19zdHJjbXAwIChjc2RfZW52LCAiMSIpID09IDApOworKyAgcmV0dXJuIGd0a193aW5kb3dfY2FuX3VzZV9jc2QgKHdpbmRvdyk7CisgfQorIAorIHN0YXRpYyB2b2lkCistLSAKK2NnaXQgdjAuMTAuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy9oYXJkY29kZWRfbGlidG9vbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjRiZWViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy9oYXJkY29kZWRfbGlidG9vbC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorCitJbmRleDogZ3RrKy0zLjguMi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBndGsrLTMuOC4yLm9yaWcvY29uZmlndXJlLmFjCisrKysgZ3RrKy0zLjguMi9jb25maWd1cmUuYWMKK0BAIC01MzEsNyArNTMxLDcgQEAgQUNfTVNHX0NIRUNLSU5HKFtXaGV0aGVyIHRvIHdyaXRlIGRlcGVuZAorIGNhc2UgJGVuYWJsZV9leHBsaWNpdF9kZXBzIGluCisgICBhdXRvKQorICAgICBleHBvcnQgU0VECistICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kPWAoLi9saWJ0b29sIC0tY29uZmlnOyBlY2hvICdldmFsIGVjaG8gXCIkZGVwbGlic19jaGVja19tZXRob2RcIicpIHwgc2hgCisrICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kPWAoLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnOyBlY2hvICdldmFsIGVjaG8gXCIkZGVwbGlic19jaGVja19tZXRob2RcIicpIHwgc2hgCisgICAgIGlmIHRlc3QgIngkZGVwbGlic19jaGVja19tZXRob2QiICE9IHhwYXNzX2FsbCB8fCB0ZXN0ICJ4JGVuYWJsZV9zdGF0aWMiID0geHllcyA7IHRoZW4KKyAgICAgICBlbmFibGVfZXhwbGljaXRfZGVwcz15ZXMKKyAgICAgZWxzZQorQEAgLTc5Myw3ICs3OTMsNyBAQCBlbHNlCisgICAgIGRubCBOb3cgd2UgY2hlY2sgdG8gc2VlIGlmIG91ciBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWIgZGVwcworICAgICBkbmwgKGluIGEgcmF0aGVyIHVnbHkgd2F5IGV2ZW4pCisgICAgIGlmICRkeW53b3JrczsgdGhlbgorLSAgICAgICAgbW9kdWxlX2xpYnRvb2xfY29uZmlnPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSAuL2xpYnRvb2wgLS1jb25maWciCisrICAgICAgICBtb2R1bGVfbGlidG9vbF9jb25maWc9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9IC4vJGhvc3RfYWxpYXMtbGlidG9vbCAtLWNvbmZpZyIKKyAgICAgICAgIG1vZHVsZV9kZXBsaWJzX2NoZWNrPWAkbW9kdWxlX2xpYnRvb2xfY29uZmlnIHwgXAorICAgICAgICAgICAgIGdyZXAgJ15bW2Etel9dXSpjaGVja1tbYS16X11dKl9tZXRob2Q9W1snXCcnIl1dJyB8IFwKKyAgICAgICAgICAgICBzZWQgJ3MvLipbWydcJyciXV1cKC4qXClbWydcJyciXV0kL1wxLydgCitAQCAtMTUyOCw3ICsxNTI4LDcgQEAgZmkKKyAjIFdlIGFyZSB1c2luZyBnbW9kdWxlLW5vLWV4cG9ydCBub3csIGJ1dCBJJ20gbGVhdmluZyB0aGUgc3RyaXBwaW5nCisgIyBjb2RlIGluIHBsYWNlIGZvciBub3csIHNpbmNlIHBhbmdvIGFuZCBhdGsgc3RpbGwgcmVxdWlyZSBnbW9kdWxlLgorIGV4cG9ydCBTRUQKKy1leHBvcnRfZHluYW1pYz1gKC4vbGlidG9vbCAtLWNvbmZpZzsgZWNobyBldmFsIGVjaG8gXFwkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjKSB8IHNoYAorK2V4cG9ydF9keW5hbWljPWAoLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnOyBlY2hvIGV2YWwgZWNobyBcXCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMpIHwgc2hgCisgaWYgdGVzdCAtbiAiJGV4cG9ydF9keW5hbWljIjsgdGhlbgorICAgR0RLX0RFUF9MSUJTPWBlY2hvICRHREtfREVQX0xJQlMgfCBzZWQgLWUgInMvJGV4cG9ydF9keW5hbWljLy8iYAorICAgR1RLX0RFUF9MSUJTPWBlY2hvICRHVEtfREVQX0xJQlMgfCBzZWQgLWUgInMvJGV4cG9ydF9keW5hbWljLy8iYApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrM18zLjE2LjYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszXzMuMTYuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDczNmE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrM18zLjE2LjYuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSBndGsrMy5pbmMKKworTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorCitTUkNfVVJJID0gImh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9nbm9tZS9zb3VyY2VzL2d0aysvJHtNQUpfVkVSfS9ndGsrLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9oYXJkY29kZWRfbGlidG9vbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9Eb250LWZvcmNlLWNzZC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmM1OWU1YzhiNWE0NTg1YjYwNjIzZGQ3MDhkZjQwMGIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNGQxMjcyNmQwODU2YTk2OGI0MTgwMmFlNWM1OTcxZDdlOWJhYzUzMjcxN2UzMDlkM2Y4MWI5OTg5ZGE1ZmZiZSIKKworUyA9ICIke1dPUktESVJ9L2d0aystJHtQVn0iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2d0ay9ndGsuaDtlbmRsaW5lPTI1O21kNT0xZDhkYzBmY2NkYmZhMjYyODdhMjcxZGNlODhhZjczNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nZGsvZ2RrLmg7ZW5kbGluZT0yNTttZDU9YzkyMGNlMzlkYzg4YzZmMDZkM2U3YzUwZTA4MDg2ZjIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvdGVzdGd0ay5jO2VuZGxpbmU9MjU7bWQ1PWNiNzMyZGFlZTFkODJhZjdhMmJmOTUzY2YzY2YyNmYxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrXzIuMjQuMjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aytfMi4yNC4yOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzQzNzczCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrXzIuMjQuMjguYmIKQEAgLTAsMCArMSwzNCBAQAorcmVxdWlyZSBndGsrLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9ndGsvZ3RrLmg7ZW5kbGluZT0yNzttZDU9YzU5ZTBiNDQ5MGRkMTM1YTU3MjZlYmY4NTFmOWIxN2YgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2RrL2dkay5oO2VuZGxpbmU9Mjc7bWQ1PTA3ZGIyODVlYzIwOGZiM2UwYmY3ZDg2MWIwNjE0MjAyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzL3Rlc3RndGsuYztlbmRsaW5lPTI3O21kNT0yNjJkYjVkYjVmNzc2Zjk4NjNlNTZkZjMxNDIzZTI0YyIKK1NSQ19VUkkgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL2dub21lL3NvdXJjZXMvZ3RrKy8yLjI0L2d0aystJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL3hzZXR0aW5ncy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9oYXJkY29kZWRfbGlidG9vbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90b2dnbGUtZm9udC5kaWZmO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgIGZpbGU6Ly9kb2MtZml4ZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc3RyaWN0LXByb3RvdHlwZXMucGF0Y2ggXAorCSAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYmZhY2Y4N2IyZWE2N2U0ZTVjNzg2NmE5MDAzZTY1MjYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjJjNjQ0MWU5OGJjNTIzMmU1ZjliYmE2OTY1MDc1ZGNmNTgwYTg3MjYzOThmNzM3NGQzOWY5MGI4OGVkNDY1NiIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXhrYiAtLWRpc2FibGUtZ2xpYnRlc3QgLS1kaXNhYmxlLWN1cHMgLS1kaXNhYmxlLXhpbmVyYW1hIgorCitMSUJWID0gIjIuMTAuMCIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXmd0ay1pbW1vZHVsZS0uKiBeZ3RrLXByaW50YmFja2VuZC0uKiIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGd0a19saWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L2d0ay0yLjAvJHtMSUJWfScpCisgICAgaW1tb2R1bGVzX3Jvb3QgPSBvcy5wYXRoLmpvaW4oZ3RrX2xpYmRpciwgJ2ltbW9kdWxlcycpCisgICAgcHJpbnRtb2R1bGVzX3Jvb3QgPSBvcy5wYXRoLmpvaW4oZ3RrX2xpYmRpciwgJ3ByaW50YmFja2VuZHMnKTsKKworICAgIGQuc2V0VmFyKCdHVEtJTU1PRFVMRVNfUEFDS0FHRVMnLCAnICcuam9pbihkb19zcGxpdF9wYWNrYWdlcyhkLCBpbW1vZHVsZXNfcm9vdCwgJ15pbS0oLiopXC5zbyQnLCAnZ3RrLWltbW9kdWxlLSVzJywgJ0dUSyBpbnB1dCBtb2R1bGUgZm9yICVzJykpKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHByaW50bW9kdWxlc19yb290LCAnXmxpYnByaW50YmFja2VuZC0oLiopXC5zbyQnLCAnZ3RrLXByaW50YmFja2VuZC0lcycsICdHVEsgcHJpbnRiYWNrZW5kIG1vZHVsZSBmb3IgJXMnKQorCisgICAgaWYgKGQuZ2V0VmFyKCdERUJJQU5fTkFNRVMnLCBUcnVlKSk6CisgICAgICAgIGQuc2V0VmFyKCdQS0dfJHtQTn0nLCAnJHtNTFBSRUZJWH1saWJndGstMi4wJykKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrLWljb24tdXRpbHMtbmF0aXZlXzMuMTYuNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrLWljb24tdXRpbHMtbmF0aXZlXzMuMTYuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmEzODE1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGstaWNvbi11dGlscy1uYXRpdmVfMy4xNi42LmJiCkBAIC0wLDAgKzEsNjMgQEAKK1NVTU1BUlkgPSAiTmF0aXZlIGljb24gdXRpbHMgZm9yIEdUSysiCitERVNDUklQVElPTiA9ICJndGstdXBkYXRlLWljb24tY2FjaGUgYW5kIGd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnIGJ1aWx0IGZyb20gR1RLKyBuYXRpdmVseSwgZm9yIGJ1aWxkIHRpbWUgYW5kIG9uLWhvc3QgcG9zdGluc3Qgc2NyaXB0IGV4ZWN1dGlvbi4iCitTRUNUSU9OID0gImxpYnMiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAtbmF0aXZlIGdkay1waXhidWYtbmF0aXZlIGxpYnJzdmctbmF0aXZlIgorCitMSUNFTlNFID0gIkxHUEx2MiAmIExHUEx2MisgJiBMR1BMdjIuMSsiCisKK01BSl9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKKworU1JDX1VSSSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvZ25vbWUvc291cmNlcy9ndGsrLyR7TUFKX1ZFUn0vZ3RrKy0ke1BWfS50YXIueHogXAorICAgICAgICAgIGZpbGU6Ly9SZW1vdmUtR2RrLWRlcGVuZGVuY3ktZnJvbS1ndGstZW5jb2RlLXN5bWJvbGljLXN2Zy5wYXRjaCIKK1NSQ19VUklbbWQ1c3VtXSA9ICJmYzU5ZTVjOGI1YTQ1ODViNjA2MjNkZDcwOGRmNDAwYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0ZDEyNzI2ZDA4NTZhOTY4YjQxODAyYWU1YzU5NzFkN2U5YmFjNTMyNzE3ZTMwOWQzZjgxYjk5ODlkYTVmZmJlIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9ndGsvZ3RrLmg7ZW5kbGluZT0yNTttZDU9MWQ4ZGMwZmNjZGJmYTI2Mjg3YTI3MWRjZTg4YWY3MzcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2RrL2dkay5oO2VuZGxpbmU9MjU7bWQ1PWM5MjBjZTM5ZGM4OGM2ZjA2ZDNlN2M1MGUwODA4NmYyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzL3Rlc3RndGsuYztlbmRsaW5lPTI1O21kNT1jYjczMmRhZWUxZDgyYWY3YTJiZjk1M2NmM2NmMjZmMSIKKworUyA9ICIke1dPUktESVJ9L2d0aystJHtQVn0iCisKK2luaGVyaXQgcGtnY29uZmlnIG5hdGl2ZQorCitQS0dfQ09ORklHX0ZPUl9CVUlMRCA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vcGtnLWNvbmZpZy1uYXRpdmUiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwkjIFF1aXRlIHVnbHkgYnV0IGRlZmluZXMgZW5vdWdoIHRvIGNvbXBpbGUgdGhlIHRvb2xzLgorCWlmICEgdGVzdCAtZiBndGsvY29uZmlnLmg7IHRoZW4KKwkJZWNobyAiI2RlZmluZSBHRVRURVhUX1BBQ0tBR0UgXCJndGszMFwiIiA+PiBndGsvY29uZmlnLmgKKwkJZWNobyAiI2RlZmluZSBIQVZFX1VOSVNURF9IIDEiID4+IGd0ay9jb25maWcuaAorCQllY2hvICIjZGVmaW5lIEhBVkVfRlRXX0ggMSIgPj4gZ3RrL2NvbmZpZy5oCisJZmkKKwlpZiAhIHRlc3QgLWYgZ2RrL2NvbmZpZy5oOyB0aGVuCisJCXRvdWNoIGdkay9jb25maWcuaAorCWZpCit9CisKK2RvX2NvbXBpbGUoKSB7CisJJHtCVUlMRF9DQ30gJHtCVUlMRF9DRkxBR1N9ICR7QlVJTERfTERGTEFHU30gXAorCQkke1N9L2d0ay91cGRhdGVpY29uY2FjaGUuYyBcCisJCSQoJHtQS0dfQ09ORklHX0ZPUl9CVUlMRH0gLS1jZmxhZ3MgLS1saWJzIGdkay1waXhidWYtMi4wKSBcCisJCS1vIGd0ay11cGRhdGUtaWNvbi1jYWNoZQorCisJJHtCVUlMRF9DQ30gJHtCVUlMRF9DRkxBR1N9ICR7QlVJTERfTERGTEFHU30gXAorCQkke1N9L2d0ay9lbmNvZGVzeW1ib2xpYy5jIFwKKwkJJCgke1BLR19DT05GSUdfRk9SX0JVSUxEfSAtLWNmbGFncyAtLWxpYnMgZ2lvLTIuMCBnZGstcGl4YnVmLTIuMCkgXAorCQktbyBndGstZW5jb2RlLXN5bWJvbGljLXN2ZworfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke0J9L2d0ay11cGRhdGUtaWNvbi1jYWNoZSAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcgJHtEfSR7YmluZGlyfQorCisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlIFwKKwkJR0RLX1BJWEJVRl9NT0RVTEVfRklMRT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvMi4xMC4wL2xvYWRlcnMuY2FjaGUKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ndGstZW5jb2RlLXN5bWJvbGljLXN2ZyBcCisJCUdES19QSVhCVUZfTU9EVUxFX0ZJTEU9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLzIuMTAuMC9sb2FkZXJzLmNhY2hlCit9CisKKyMgUHJldmVudCBiaXRiYWtlIGZyb20gb3B0aW1pemluZyBhd2F5IHRoZSBuYXRpdmUgbGlicnN2ZyBzeXNyb290IHBvcHVsYXRpb24KK2RvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmVbZGVwZW5kc10gKz0gImxpYnJzdmctbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ay1pY29uLXV0aWxzL1JlbW92ZS1HZGstZGVwZW5kZW5jeS1mcm9tLWd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGstaWNvbi11dGlscy9SZW1vdmUtR2RrLWRlcGVuZGVuY3ktZnJvbS1ndGstZW5jb2RlLXN5bWJvbGljLXN2Zy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzdmODAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGstaWNvbi11dGlscy9SZW1vdmUtR2RrLWRlcGVuZGVuY3ktZnJvbS1ndGstZW5jb2RlLXN5bWJvbGljLXN2Zy5wYXRjaApAQCAtMCwwICsxLDEwMiBAQAorRnJvbSA0ZDA5ZmYzMjQ0MTlmZTRlNjcxMjMzMDQ0ZTQyNDM3OGRhNTM5NjliIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgOSBKdW4gMjAxNSAxNDoyMDozMCArMDMwMAorU3ViamVjdDogW1BBVENIXSBSZW1vdmUgR2RrLWRlcGVuZGVuY3kgZnJvbSBndGstZW5jb2RlLXN5bWJvbGljLXN2ZworCitCdWlsZGluZyBndGstZW5jb2RlLXN5bWJvbGljLXN2ZyB3aXRob3V0IGJ1aWxkaW5nIEdkayBpcyB1c2VmdWwKK2FzIG9ubHkgdGhlIGljb24gdG9vbHMgYXJlIG5lZWRlZCBvbiB0aGUgbmF0aXZlIGJ1aWxkOiB0aGlzIG1ha2VzCituYXRpdmUgYnVpbGQgbXVjaCBmYXN0ZXIgYW5kIHJlcXVpcmVzIG11Y2ggbGVzcyBkZXBlbmRlbmNpZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgZ3RrL2VuY29kZXN5bWJvbGljLmMgfCAzNiArKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMjYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ndGsvZW5jb2Rlc3ltYm9saWMuYyBiL2d0ay9lbmNvZGVzeW1ib2xpYy5jCitpbmRleCA5ZjdkMDE1Li4xZjA3NTYzIDEwMDY0NAorLS0tIGEvZ3RrL2VuY29kZXN5bWJvbGljLmMKKysrKyBiL2d0ay9lbmNvZGVzeW1ib2xpYy5jCitAQCAtMTksNyArMTksNiBAQAorIAorICNpbmNsdWRlIDxnbGliLmg+CisgI2luY2x1ZGUgPGdkay1waXhidWYvZ2RrLXBpeGRhdGEuaD4KKy0jaW5jbHVkZSA8Z2RrL2dkay5oPgorICNpbmNsdWRlIDxnbGliL2dpMThuLmg+CisgCisgI2lmZGVmIEhBVkVfVU5JU1REX0gKK0BAIC00MywzMCArNDIsMTggQEAgc3RhdGljIEdka1BpeGJ1ZiAqCisgbG9hZF9zeW1ib2xpY19zdmcgKGNoYXIgKmZpbGVfZGF0YSwgZ3NpemUgZmlsZV9sZW4sCisgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwKKy0gICAgICAgICAgICAgICAgICAgY29uc3QgR2RrUkdCQSAgKmZnLAorLSAgICAgICAgICAgICAgICAgICBjb25zdCBHZGtSR0JBICAqc3VjY2Vzc19jb2xvciwKKy0gICAgICAgICAgICAgICAgICAgY29uc3QgR2RrUkdCQSAgKndhcm5pbmdfY29sb3IsCistICAgICAgICAgICAgICAgICAgIGNvbnN0IEdka1JHQkEgICplcnJvcl9jb2xvciwKKysgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY3NzX2ZnLAorKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjc3Nfc3VjY2VzcywKKysgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY3NzX3dhcm5pbmcsCisrICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNzc19lcnJvciwKKyAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAqKmVycm9yKQorIHsKKyAgIEdJbnB1dFN0cmVhbSAqc3RyZWFtOworICAgR2RrUGl4YnVmICpwaXhidWY7CistICBnY2hhciAqY3NzX2ZnOworLSAgZ2NoYXIgKmNzc19zdWNjZXNzOworLSAgZ2NoYXIgKmNzc193YXJuaW5nOworLSAgZ2NoYXIgKmNzc19lcnJvcjsKKyAgIGdjaGFyICpkYXRhOworICAgZ2NoYXIgKnN2Z193aWR0aCwgKnN2Z19oZWlnaHQ7CisgICBnY2hhciAqZXNjYXBlZF9maWxlX2RhdGE7CisgCistICBjc3NfZmcgPSBnZGtfcmdiYV90b19zdHJpbmcgKGZnKTsKKy0KKy0gIGNzc19zdWNjZXNzID0gY3NzX3dhcm5pbmcgPSBjc3NfZXJyb3IgPSBOVUxMOworLQorLSAgY3NzX3dhcm5pbmcgPSBnZGtfcmdiYV90b19zdHJpbmcgKHdhcm5pbmdfY29sb3IpOworLSAgY3NzX2Vycm9yID0gZ2RrX3JnYmFfdG9fc3RyaW5nIChlcnJvcl9jb2xvcik7CistICBjc3Nfc3VjY2VzcyA9IGdka19yZ2JhX3RvX3N0cmluZyAoc3VjY2Vzc19jb2xvcik7CistCisgICAvKiBGZXRjaCBzaXplIGZyb20gdGhlIG9yaWdpbmFsIGljb24gKi8KKyAgIHN0cmVhbSA9IGdfbWVtb3J5X2lucHV0X3N0cmVhbV9uZXdfZnJvbV9kYXRhIChmaWxlX2RhdGEsIGZpbGVfbGVuLCBOVUxMKTsKKyAgIHBpeGJ1ZiA9IGdka19waXhidWZfbmV3X2Zyb21fc3RyZWFtIChzdHJlYW0sIE5VTEwsIGVycm9yKTsKK0BAIC0xMDUsMTAgKzkyLDYgQEAgbG9hZF9zeW1ib2xpY19zdmcgKGNoYXIgKmZpbGVfZGF0YSwgZ3NpemUgZmlsZV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICI8L3N2Zz4iLAorICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgIGdfZnJlZSAoZXNjYXBlZF9maWxlX2RhdGEpOworLSAgZ19mcmVlIChjc3NfZmcpOworLSAgZ19mcmVlIChjc3Nfd2FybmluZyk7CistICBnX2ZyZWUgKGNzc19lcnJvcik7CistICBnX2ZyZWUgKGNzc19zdWNjZXNzKTsKKyAgIGdfZnJlZSAoc3ZnX3dpZHRoKTsKKyAgIGdfZnJlZSAoc3ZnX2hlaWdodCk7CisgCitAQCAtMTY3LDcgKzE1MCw4IEBAIG1ha2Vfc3ltYm9saWNfcGl4YnVmIChjaGFyICpmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICoqZXJyb3IpCisgCisgeworLSAgR2RrUkdCQSByID0geyAxLDAsMCwxfSwgZyA9IHswLDEsMCwxfTsKKysgIGNvbnN0IGNoYXIgcltdID0gInJnYmEoMjU1LDAsMCwxKSI7CisrICBjb25zdCBjaGFyIGdbXSA9ICJyZ2JhKDAsMjU1LDAsMSkiOworICAgR2RrUGl4YnVmICpsb2FkZWQ7CisgICBHZGtQaXhidWYgKnBpeGJ1ZjsKKyAgIGludCBwbGFuZTsKK0BAIC0xOTYsMTAgKzE4MCwxMCBAQCBtYWtlX3N5bWJvbGljX3BpeGJ1ZiAoY2hhciAqZmlsZSwKKyAgICAgICAgKiB0aGUgInJlc3QiLCBhcyBhbGwgY29sb3IgZnJhY3Rpb25zIHNob3VsZCBhZGQgdXAgdG8gMS4KKyAgICAgICAgKi8KKyAgICAgICBsb2FkZWQgPSBsb2FkX3N5bWJvbGljX3N2ZyAoZmlsZV9kYXRhLCBmaWxlX2xlbiwgd2lkdGgsIGhlaWdodCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmcsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lID09IDAgPyAmciA6ICZnLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFuZSA9PSAxID8gJnIgOiAmZywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhbmUgPT0gMiA/ICZyIDogJmcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lID09IDAgPyByIDogZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhbmUgPT0gMSA/IHIgOiBnLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFuZSA9PSAyID8gciA6IGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKTsKKyAgICAgICBpZiAobG9hZGVkID09IE5VTEwpCisgICAgICAgICByZXR1cm4gTlVMTDsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy1zdHViL2d0ay1kb2Mtc3R1Yl9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZG9jLXN0dWIvZ3RrLWRvYy1zdHViX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGYzMjQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy1zdHViL2d0ay1kb2Mtc3R1Yl9naXQuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJTdHViIGltcGxlbWVudGF0aW9uIG9mIGd0ay1kb2MiCitERVNDUklQVElPTiA9ICJTdHViIGltcGxlbWVudGF0aW9uIG9mIGd0ay1kb2MsIGFzIHdlIGRvbid0IHdhbnQgdG8gYnVpbGQgdGhlIEFQSSBkb2N1bWVudGF0aW9uIgorU0VDVElPTiA9ICJ4MTEvYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworUFJPVklERVMgPSAiZ3RrLWRvYyBnb2JqZWN0LWludHJvc3BlY3Rpb24tc3R1YiIKKworU1JDUkVWID0gIjFkZWEyNjY1OTNlZGI3NjZkNmQ4OThjNzk0NTFlZjE5M2ViMTdjZmEiCitQViA9ICIxLjErZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmdub21lLm9yZy8ke0JQTn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1lbmdpbmVzL2d0ay1lbmdpbmVzLTIuMjAuMi9nbGliLTIuMzIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZW5naW5lcy9ndGstZW5naW5lcy0yLjIwLjIvZ2xpYi0yLjMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYjg3OGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZW5naW5lcy9ndGstZW5naW5lcy0yLjIwLjIvZ2xpYi0yLjMyLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK0Zyb20gOGQ0OWEzODZmNDY3Y2JmOGUwODQyZDIyMTgxMjZmNjQzZTUwZjgzNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERvbWluaXF1ZSBMZXVlbmJlcmdlciA8ZGltc3RhckBvcGVuc3VzZS5vcmc+CitEYXRlOiBTdW4sIDI3IE5vdiAyMDExIDE0OjI0OjU3ICswMDAwCitTdWJqZWN0OiBGaXggYnVpbGQgd2l0aCBnbGliIDIuMzE6IE9ubHkgZ2xpYi5oIGNhbiBiZSAjaW5jbHVkZSdkLiBGaXhlcyBidWcgIzY2NDkxNAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKy0tLQorZGlmZiAtLWdpdCBhL2VuZ2luZXMvY2xlYXJsb29rcy9zcmMvYW5pbWF0aW9uLmMgYi9lbmdpbmVzL2NsZWFybG9va3Mvc3JjL2FuaW1hdGlvbi5jCitpbmRleCAxZjdhNDFmLi41NmE5Mjg2IDEwMDY0NAorLS0tIGEvZW5naW5lcy9jbGVhcmxvb2tzL3NyYy9hbmltYXRpb24uYworKysrIGIvZW5naW5lcy9jbGVhcmxvb2tzL3NyYy9hbmltYXRpb24uYworQEAgLTI4LDcgKzI4LDcgQEAKKyAjaW5jbHVkZSAiYW5pbWF0aW9uLmgiCisgCisgI2lmZGVmIEhBVkVfV09SS0lOR19BTklNQVRJT04KKy0jaW5jbHVkZSA8Z2xpYi9ndGltZXIuaD4KKysjaW5jbHVkZSA8Z2xpYi5oPgorIAorIHN0cnVjdCBfQW5pbWF0aW9uSW5mbyB7CisgCUdUaW1lciAqdGltZXI7CistLQorY2dpdCB2MC45LjAuMgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXMtMi4yMC4yL3N1YnN0aXR1dGUtdGVzdHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZW5naW5lcy9ndGstZW5naW5lcy0yLjIwLjIvc3Vic3RpdHV0ZS10ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzU1N2JhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXMtMi4yMC4yL3N1YnN0aXR1dGUtdGVzdHMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIGd0ay1lbmdpbmVzLTIuMjAuMi9jb25maWd1cmUuYWMgZ3RrLWVuZ2luZXMtMi4yMC4yL2NvbmZpZ3VyZS5hYworLS0tIGd0ay1lbmdpbmVzLTIuMjAuMi9jb25maWd1cmUuYWMJMjAxMC0xMC0wMSAxNTo0MjozNy4wMDAwMDAwMDAgKzAzMDAKKysrKyBndGstZW5naW5lcy0yLjIwLjIvY29uZmlndXJlLmFjCTIwMTMtMDgtMjAgMDI6NTA6MjcuOTMwNTEwNTY1ICswMzAwCitAQCAtMTY2LDYgKzE2Niw5IEBACisKKyBBQ19TVUJTVChERVZFTE9QTUVOVF9DRkxBR1MpCisKKytBQ19TVUJTVChbZXhwb3J0ZWRfc3ltYm9sc190ZXN0c10sIFtbJChFWFBPUlRFRF9TWU1CT0xTX1RFU1RTKV1dKQorK0FDX1NVQlNUKFt0b3J0dXJlX3Rlc3RfdGVzdHNdLCBbWyQoVE9SVFVSRV9URVNUX1RFU1RTKV1dKQorKworIEFNX0NPTkZJR19IRUFERVIoW2VuZ2luZXMvc3VwcG9ydC9jb25maWcuaF0pCisKKyBBQ19DT05GSUdfRklMRVMoWworZGlmZiAtTnVyZCBndGstZW5naW5lcy0yLjIwLjIvdGVzdC9NYWtlZmlsZS5hbSBndGstZW5naW5lcy0yLjIwLjIvdGVzdC9NYWtlZmlsZS5hbQorLS0tIGd0ay1lbmdpbmVzLTIuMjAuMi90ZXN0L01ha2VmaWxlLmFtCTIwMTAtMDktMTkgMTg6MTg6MjEuMDAwMDAwMDAwICswMzAwCisrKysgZ3RrLWVuZ2luZXMtMi4yMC4yL3Rlc3QvTWFrZWZpbGUuYW0JMjAxMy0wOC0yMCAwMjo1MDozNi44NDI1MTA4NjUgKzAzMDAKK0BAIC02Niw3ICs2Niw3IEBACisgIyBQcmVmaXggd2l0aCBleHBvcnRlZF8KKyBFWFBPUlRFRF9TWU1CT0xTX1RFU1RTID0gJChwYXRzdWJzdCAlLGV4cG9ydGVkXyUsJChCVUlMRF9FTkdJTkVTKSkKKworLVRFU1RTICs9ICQoRVhQT1JURURfU1lNQk9MU19URVNUUykKKytURVNUUyArPSBAZXhwb3J0ZWRfc3ltYm9sc190ZXN0c0AKKworCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQEAgLTg4LDcgKzg4LDcgQEAKKyBUT1JUVVJFX1RFU1RfVEVTVFMgPSB0b3J0dXJlX2J1aWxkaW4gJChwYXRzdWJzdCAlLHRvcnR1cmVfJSwkKFRPUlRVUkVfVEVTVF9FTkdJTkVTKSkKKworICMgQWRkIFRPUlRVUkVfVEVTVF9FTkdJTkVTIHRvIGxpc3Qgb2YgdGVzdHMKKy1URVNUUyArPSAkKFRPUlRVUkVfVEVTVF9URVNUUykKKytURVNUUyArPSBAdG9ydHVyZV90ZXN0X3Rlc3RzQAorCisgIyBQb3NzaWJsZSBvdGhlciB0ZXN0czoKKyAjICAtIEFuIGV4dGVuc2l2ZSB0aGVtZSBzd2l0Y2ggdGVzdHMgdGhhdCBsb2Fkcy91bmxvYWRzIHRoZSBlbmdpbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1lbmdpbmVzL2d0ay1lbmdpbmVzXzIuMjAuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1lbmdpbmVzL2d0ay1lbmdpbmVzXzIuMjAuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzA0NTRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXNfMi4yMC4yLmJiCkBAIC0wLDAgKzEsNDkgQEAKK1NVTU1BUlkgPSAiR1RLKyB0aGVtZSBlbmdpbmVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbm9tZS5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSIKKworU0VDVElPTiA9ICJ4MTEvYmFzZSIKK0RFUEVORFMgPSAiaW50bHRvb2wtbmF0aXZlIGd0aysiCisKK1BSID0gInIzIgorCitQQUNLQUdFUyArPSAiJHtQTn0tc2NoZW1hcyIKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5ndGstZW5naW5lLS4qIF5ndGstdGhlbWUtLioiCisKK1JERVBFTkRTX2d0ay10aGVtZS1yZWRtb25kID0gImd0ay1lbmdpbmUtcmVkbW9uZDk1IgorUkRFUEVORFNfZ3RrLXRoZW1lLW1ldGFsID0gImd0ay1lbmdpbmUtbWV0YWwiCitSREVQRU5EU19ndGstdGhlbWUtbWlzdCA9ICJndGstZW5naW5lLW1pc3QiCitSREVQRU5EU19ndGstdGhlbWUtY3J1eCA9ICJndGstZW5naW5lLWNydXgtZW5naW5lIgorUkRFUEVORFNfZ3RrLXRoZW1lLWxpZ2h0aG91c2VibHVlID0gImd0ay1lbmdpbmUtbGlnaHRob3VzZWJsdWUiCitSREVQRU5EU19ndGstdGhlbWUtdGhpbmljZSA9ICJndGstZW5naW5lLXRoaW5pY2UiCitSREVQRU5EU19ndGstdGhlbWUtaW5kdXN0cmlhbCA9ICJndGstZW5naW5lLWluZHVzdHJpYWwiCitSREVQRU5EU19ndGstdGhlbWUtY2xlYXJsb29rcyA9ICJndGstZW5naW5lLWNsZWFybG9va3MiCisKK0ZJTEVTXyR7UE59ID0gIiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2d0ay0yLjAvKi9lbmdpbmVzLyoubGEiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9ndGstMi4wLyovZW5naW5lcy8uZGVidWciCitGSUxFU18ke1BOfS1zY2hlbWFzID0gIiR7ZGF0YWRpcn0vZ3RrLWVuZ2luZXMvKi54bWwiCisKK0NGTEFHU19wcmVwZW5kID0gIi1ESEFWRV9BTklNQVRJT04gIgorCitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorCitpbmhlcml0IGdub21lYmFzZQorR05PTUVfQ09NUFJFU1NfVFlQRT0iYnoyIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCgpIHsKKyAgICBlbmdpbmVzX3Jvb3QgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCAiZ3RrLTIuMC8yLjEwLjAvZW5naW5lcyIpCisgICAgdGhlbWVzX3Jvb3QgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgInRoZW1lcyIpCisKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBlbmdpbmVzX3Jvb3QsICdebGliKC4qKVwuc28kJywgJ2d0ay1lbmdpbmUtJXMnLCAnR1RLICVzIHRoZW1lIGVuZ2luZScsIGV4dHJhX2RlcGVuZHM9JycpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgdGhlbWVzX3Jvb3QsICcoLiopJywgJ2d0ay10aGVtZS0lcycsICdHVEsgdGhlbWUgJXMnLCBhbGxvd19kaXJzPVRydWUsIGV4dHJhX2RlcGVuZHM9JycpCisgICAgIyBUT0RPOiBtYXJrIHRoZW1lIHBhY2thZ2VzIGFzIGFyY2ggYWxsCit9CisKK1NSQ19VUkkgKz0gImZpbGU6Ly9nbGliLTIuMzIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3N1YnN0aXR1dGUtdGVzdHMucGF0Y2giCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI1ZGViMjg3YmM2MDc1ZGMyMTgxMjEzMDYwNGM3ZGM0ZiIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjE1YjY4MGFiY2E2Yzc3M2VjYjg1MjUzNTIxZmExMDBkZDNiODU0OWJlZmVlY2M3NTk1YjEwMjA5ZDYyZDY2YjUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstdGhlbWUtdG9ydHVyZXIvZ3RrLXRoZW1lLXRvcnR1cmVyX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay10aGVtZS10b3J0dXJlci9ndGstdGhlbWUtdG9ydHVyZXJfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4OWZkODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstdGhlbWUtdG9ydHVyZXIvZ3RrLXRoZW1lLXRvcnR1cmVyX2dpdC5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkdUSysgVGhlbWUgYmVuY2htYXJrIHByb2dyYW0iCitERVBFTkRTID0gImd0aysiCitIT01FUEFHRSA9ICJodHRwOi8vd2lraS5sYXB0b3Aub3JnL2dvL0dUS19mb3JfT0xQQyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vYXBwd2luZG93LmM7ZW5kbGluZT0xMzttZDU9OGMwOTkyMGRlNDYwYzdlYTFmNjRlZTU2OTg2YWFiZDkiCisKK1NSQ1JFViA9ICI5OTk2MmFlMzliYjVhYWRiMzE5MjliMjVjNThlMWEwNTNmOWM5NTQ1IgorUFYgPSAiMC4wLjArZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZGV2LmxhcHRvcC5vcmcvcHJvamVjdHMvc29jLWd0ay8iCitTID0gIiR7V09SS0RJUn0vZ2l0L2d0ay10aGVtZS10b3J0dXJlciIKKworQ0ZMQUdTICs9ICItV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0xJQkRJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1IHRvcnR1cmVyICR7RH0ke2JpbmRpcn0KK30KKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9oaWNvbG9yLWljb24tdGhlbWUvaGljb2xvci1pY29uLXRoZW1lXzAuMTUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9oaWNvbG9yLWljb24tdGhlbWUvaGljb2xvci1pY29uLXRoZW1lXzAuMTUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcwNDYzMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2hpY29sb3ItaWNvbi10aGVtZS9oaWNvbG9yLWljb24tdGhlbWVfMC4xNS5iYgpAQCAtMCwwICsxLDE0IEBACitTVU1NQVJZID0gIkRlZmF1bHQgaWNvbiB0aGVtZSB0aGF0IGFsbCBpY29uIHRoZW1lcyBhdXRvbWF0aWNhbGx5IGluaGVyaXQgZnJvbSIKK0hPTUVQQUdFID0gImh0dHA6Ly9pY29uLXRoZW1lLmZyZWVkZXNrdG9wLm9yZy93aWtpL0hpY29sb3JUaGVtZSIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMDhhNDQ2ODA5OTEzZmM5YjNjNzE4ZjBlYWVhMDQyNiIKKworU1JDX1VSSSA9ICJodHRwOi8vaWNvbi10aGVtZS5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci54eiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI2YWEyYjM5OTNhODgzZDg1MDE3YzdjYzBjZmMwZmI3MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5Y2M0NWFjMzMxOGMzMTIxMmVhMmQ4Y2I5OWU2NDAyMDczMjM5M2VlNzYzMGZhNmMxODEwYWY1Zjk4NzAzM2NjIgorCitpbmhlcml0IGFsbGFyY2ggYXV0b3Rvb2xzCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2ljb25zIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvanNvbi1nbGliL2pzb24tZ2xpYl8xLjAuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2pzb24tZ2xpYi9qc29uLWdsaWJfMS4wLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkwOGFjMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2pzb24tZ2xpYi9qc29uLWdsaWJfMS4wLjQuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJKU09OLUdMaWIgaW1wbGVtZW50cyBhIGZ1bGwgSlNPTiBwYXJzZXIgdXNpbmcgR0xpYiBhbmQgR09iamVjdCIKK0RFU0NSSVBUSU9OID0gIlVzZSBKU09OLUdMaWIgaXQgaXMgcG9zc2libGUgdG8gcGFyc2UgYW5kIGdlbmVyYXRlIHZhbGlkIEpTT05cCisgZGF0YSBzdHJ1Y3R1cmVzLCB1c2luZyBhIERPTS1saWtlIEFQSS4gSlNPTi1HTGliIGFsc28gb2ZmZXJzIEdPYmplY3QgXAoraW50ZWdyYXRpb24sIHByb3ZpZGluZyB0aGUgYWJpbGl0eSB0byBzZXJpYWxpemUgYW5kIGRlc2VyaWFsaXplIEdPYmplY3QgXAoraW5zdGFuY2VzIHRvIGFuZCBmcm9tIEpTT04gZGF0YSB0eXBlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vbGl2ZS5nbm9tZS5vcmcvSnNvbkdsaWIiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCIKKworREVQRU5EUyA9ICJnbGliLTIuMCIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiMzEzMWIwNDE3ZWNkZTNkYTFhZTcyYWNjZWFhMzc1Y2YiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI4MGYzNTkzY2I2YmQxM2YxNDY1ODI4ZTQ2YTlmNzQwZTJlOWJkM2NkMjI1Nzg4OTQ0MmIzZTYyYmQ2ZGUwNWNkIgorCitpbmhlcml0IGdub21lYmFzZSBnZXR0ZXh0IGxpYl9wYWNrYWdlCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZmZpL2xpYmZmaS8wMDAxLW1pcHMtVXNlLWNvbXBpbGVyLWludGVybmFsLWRlZmluZS1mb3ItbGludXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJmZmkvbGliZmZpLzAwMDEtbWlwcy1Vc2UtY29tcGlsZXItaW50ZXJuYWwtZGVmaW5lLWZvci1saW51eC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjk2ZTYzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZmZpL2xpYmZmaS8wMDAxLW1pcHMtVXNlLWNvbXBpbGVyLWludGVybmFsLWRlZmluZS1mb3ItbGludXgucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSBhNWVmYWE5NmZkOTM0ZWIyNDVjMjM0YTUyNzVmY2Y2MjY5OGVmOTg2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMiBBcHIgMjAxNSAyMTozODowMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBtaXBzOiBVc2UgY29tcGlsZXIgaW50ZXJuYWwgZGVmaW5lIGZvciBsaW51eAorCitfX2xpbnV4X18gaXMgZGVmaW5lZCBieSBjb21waWxlciB3aGVuIGJ1aWxkaW5nIGZvcgorbGludXggcGxhdGZvcm1zLCBsZXRzIHVzZSBpdAorCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL21pcHMvZmZpdGFyZ2V0LmggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbWlwcy9mZml0YXJnZXQuaCBiL3NyYy9taXBzL2ZmaXRhcmdldC5oCitpbmRleCA3MTdkNjU5Li42ZmFhMzU4IDEwMDY0NAorLS0tIGEvc3JjL21pcHMvZmZpdGFyZ2V0LmgKKysrKyBiL3NyYy9taXBzL2ZmaXRhcmdldC5oCitAQCAtMzIsNyArMzIsNyBAQAorICNlcnJvciAiUGxlYXNlIGRvIG5vdCBpbmNsdWRlIGZmaXRhcmdldC5oIGRpcmVjdGx5IGludG8geW91ciBzb3VyY2UuICBVc2UgZmZpLmggaW5zdGVhZC4iCisgI2VuZGlmCisgCistI2lmZGVmIGxpbnV4CisrI2lmZGVmIF9fbGludXhfXworICMgaW5jbHVkZSA8YXNtL3NnaWRlZnMuaD4KKyAjZWxpZiBkZWZpbmVkKF9fcnRlbXNfXykKKyAvKgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJmZmkvbGliZmZpL2ZpeC1saWJmZmkubGEtbG9jYXRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJmZmkvbGliZmZpL2ZpeC1saWJmZmkubGEtbG9jYXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc1YmZmYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmZmaS9saWJmZmkvZml4LWxpYmZmaS5sYS1sb2NhdGlvbi5wYXRjaApAQCAtMCwwICsxLDE4IEBACisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBsaWJmZmktMy4wLjEzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliZmZpLTMuMC4xMy5vcmlnL01ha2VmaWxlLmFtCisrKysgbGliZmZpLTMuMC4xMy9NYWtlZmlsZS5hbQorQEAgLTk4LDcgKzk4LDcgQEAgRkxBR1NfVE9fUEFTUyA9ICQoQU1fTUFLRUZMQUdTKQorIAorIE1BS0VPVkVSUklERVM9CisgCistdG9vbGV4ZWNsaWJfTFRMSUJSQVJJRVMgPSBsaWJmZmkubGEKKytsaWJfTFRMSUJSQVJJRVMgPSBsaWJmZmkubGEKKyBub2luc3RfTFRMSUJSQVJJRVMgPSBsaWJmZmlfY29udmVuaWVuY2UubGEKKyAKKyBsaWJmZmlfbGFfU09VUkNFUyA9IHNyYy9wcmVwX2NpZi5jIHNyYy90eXBlcy5jIFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmZmaS9saWJmZmlfMy4yLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJmZmkvbGliZmZpXzMuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOTE2Y2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJmZmkvbGliZmZpXzMuMi4xLmJiCkBAIC0wLDAgKzEsMjYgQEAKK1NVTU1BUlkgPSAiQSBwb3J0YWJsZSBmb3JlaWduIGZ1bmN0aW9uIGludGVyZmFjZSBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiVGhlIGBsaWJmZmknIGxpYnJhcnkgcHJvdmlkZXMgYSBwb3J0YWJsZSwgaGlnaCBsZXZlbCBwcm9ncmFtbWluZyBpbnRlcmZhY2UgdG8gdmFyaW91cyBjYWxsaW5nIFwKK2NvbnZlbnRpb25zLiAgVGhpcyBhbGxvd3MgYSBwcm9ncmFtbWVyIHRvIGNhbGwgYW55IGZ1bmN0aW9uIHNwZWNpZmllZCBieSBhIGNhbGwgaW50ZXJmYWNlIGRlc2NyaXB0aW9uIGF0IHJ1biBcCit0aW1lLiBGRkkgc3RhbmRzIGZvciBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZS4gIEEgZm9yZWlnbiBmdW5jdGlvbiBpbnRlcmZhY2UgaXMgdGhlIHBvcHVsYXIgbmFtZSBmb3IgdGhlIFwKK2ludGVyZmFjZSB0aGF0IGFsbG93cyBjb2RlIHdyaXR0ZW4gaW4gb25lIGxhbmd1YWdlIHRvIGNhbGwgY29kZSB3cml0dGVuIGluIGFub3RoZXIgbGFuZ3VhZ2UuICBUaGUgYGxpYmZmaScgXAorbGlicmFyeSByZWFsbHkgb25seSBwcm92aWRlcyB0aGUgbG93ZXN0LCBtYWNoaW5lIGRlcGVuZGVudCBsYXllciBvZiBhIGZ1bGx5IGZlYXR1cmVkIGZvcmVpZ24gZnVuY3Rpb24gaW50ZXJmYWNlLiAgXAorQSBsYXllciBtdXN0IGV4aXN0IGFib3ZlIGBsaWJmZmknIHRoYXQgaGFuZGxlcyB0eXBlIGNvbnZlcnNpb25zIGZvciB2YWx1ZXMgcGFzc2VkIGJldHdlZW4gdGhlIHR3byBsYW5ndWFnZXMuIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTM2MTBiYjE3NjgzYTAwODllZDY0MDU1NDE2YjJhZTFiIgorCitTUkNfVVJJID0gImZ0cDovL3NvdXJjZXdhcmUub3JnL3B1Yi9saWJmZmkvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1saWJmZmkubGEtbG9jYXRpb24ucGF0Y2ggXAorCSAgIGZpbGU6Ly8wMDAxLW1pcHMtVXNlLWNvbXBpbGVyLWludGVybmFsLWRlZmluZS1mb3ItbGludXgucGF0Y2ggXAorCSAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjgzYjg5NTg3NjA3ZTNlYjY1YzcwZDM2MWYxM2JhYjQzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQwNmViYjhlMWQ5YTIyZDE5ZTM4ZDYzZmRiODM5NTQyNTNmMzliZWRjNWQ0NjIzMmEwNTY0NTY4NTcyMmNhMzciCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWJ1aWxkZGlyIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2xpYmZmaS0ke1BWfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvZ2xhZGUtY3J1ZnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZS0yLjYuNC9nbGFkZS1jcnVmdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWQ1ODY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvZ2xhZGUtY3J1ZnQucGF0Y2gKQEAgLTAsMCArMSwxMDIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitkaWZmIC11ciBsaWJnbGFkZS0yLjQuMH4vY29uZmlndXJlLmluIGxpYmdsYWRlLTIuNC4wL2NvbmZpZ3VyZS5pbgorLS0tIGxpYmdsYWRlLTIuNC4wfi9jb25maWd1cmUuaW4JMjAwNC0wNS0xNyAxMjozODozMS4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJnbGFkZS0yLjQuMC9jb25maWd1cmUuaW4JMjAwNC0wNy0yOCAxNjo1MzowOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNDcsNiArMTQ3LDE4IEBACisgQU1fQ09ORElUSU9OQUwoSEFWRV9QWVRIT04sICRoYXZlX3B5dGhvbikKKyBBQ19TVUJTVChQWVRIT04pCisgCisrQUNfTVNHX0NIRUNLSU5HKFtmb3IgY3J1ZnQgaW4gbGliZ3RrXSkKKytBQ19UUllfTElOSyhbCisrI2luY2x1ZGUgPGd0ay9ndGsuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKytdLCAgICAgIFsgZ3RrX3RyZWVfZ2V0X3R5cGUgKCk7IHJldHVybiAwOyBdLAorKyAgICAgICAgWyBBQ19NU0dfUkVTVUxUKHllcykKKysgICAgICAgICAgaGF2ZV9jcnVmdD15ZXMgXSwKKysgICAgICAgIFsgQUNfTVNHX1JFU1VMVChubykKKysJICBBQ19ERUZJTkUoRElTQUJMRV9DUlVGVCwsW2xlYXZlIG91dCBzdXBwb3J0IGZvciBvbGQsIGJyb2tlbiB3aWRnZXRzXSkKKysgICAgICAgICAgaGF2ZV9jcnVmdD1ubyBdKQorK0FDX1NVQlNUKERJU0FCTEVfQ1JVRlQpCisrCisgZG5sIGFkZCBkZWJ1Z2dpbmcgb3B0aW9ucyAuLi4KKyBjaGFuZ2VxdW90ZSgsKWRubAorIGlmIHRlc3QgIngkR0NDIiA9IHh5ZXM7IHRoZW4KK09ubHkgaW4gbGliZ2xhZGUtMi40LjA6IGNvbmZpZ3VyZS5pbi5vcmlnCitkaWZmIC11ciBsaWJnbGFkZS0yLjQuMH4vZ2xhZGUvZ2xhZGUtZ3RrLmMgbGliZ2xhZGUtMi40LjAvZ2xhZGUvZ2xhZGUtZ3RrLmMKKy0tLSBsaWJnbGFkZS0yLjQuMH4vZ2xhZGUvZ2xhZGUtZ3RrLmMJMjAwNC0wMy0xMyAxMzo0NzozNS4wMDAwMDAwMDAgKzAwMDAKKysrKyBsaWJnbGFkZS0yLjQuMC9nbGFkZS9nbGFkZS1ndGsuYwkyMDA0LTA3LTI4IDE2OjUzOjUyLjAwMDAwMDAwMCArMDEwMAorQEAgLTIxMyw2ICsyMTMsOCBAQAorIAlndGtfY2xpc3RfY29sdW1uX3RpdGxlc19oaWRlIChHVEtfQ0xJU1QgKHcpKTsKKyB9CisgCisrI2lmbmRlZiBESVNBQkxFX0NSVUZUCisrCisgc3RhdGljIHZvaWQKKyB0cmVlX3NldF9zZWxlY3Rpb25fbW9kZSAoR2xhZGVYTUwgKnhtbCwgR3RrV2lkZ2V0ICp3LAorIAkJCSBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK0BAIC0yMzgsNiArMjQwLDggQEAKKyAgICAgZ3RrX3RyZWVfc2V0X3ZpZXdfbGluZXMgKEdUS19UUkVFICh3KSwgQk9PTCAodmFsdWUpKTsKKyB9CisgCisrI2VuZGlmCisrCisgc3RhdGljIHZvaWQKKyBsaXN0X3NldF9zZWxlY3Rpb25fbW9kZSAoR2xhZGVYTUwgKnhtbCwgR3RrV2lkZ2V0ICp3LAorIAkJCSBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK0BAIC0yNTQsNiArMjU4LDcgQEAKKyAgICAgZ3RrX2NoZWNrX21lbnVfaXRlbV9zZXRfc2hvd190b2dnbGUgKEdUS19DSEVDS19NRU5VX0lURU0gKHcpLCBCT09MICh2YWx1ZSkpOworIH0KKyAKKysjaWZuZGVmIERJU0FCTEVfQ1JVRlQKKyBzdGF0aWMgdm9pZAorIHRleHRfc2V0X3RleHQgKEdsYWRlWE1MICp4bWwsIEd0a1dpZGdldCAqdywKKyAJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQorQEAgLTI2Miw2ICsyNjcsNyBAQAorIAorICAgICBndGtfZWRpdGFibGVfaW5zZXJ0X3RleHQgKEdUS19FRElUQUJMRSAodyksIHZhbHVlLCAtMSwgJnBvcyk7CisgfQorKyNlbmRpZgorIAorIHN0YXRpYyB2b2lkCisgcmFkaW9fbWVudV9pdGVtX3NldF9ncm91cCAoR2xhZGVYTUwgKnhtbCwgR3RrV2lkZ2V0ICp3LAorQEAgLTExMjUsMTMgKzExMzEsMTcgQEAKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX0NMSVNULCAic2VsZWN0aW9uX21vZGUiLCBjbGlzdF9zZXRfc2VsZWN0aW9uX21vZGUpOworICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfQ0xJU1QsICJzaGFkb3dfdHlwZSIsIGNsaXN0X3NldF9zaGFkb3dfdHlwZSk7CisgICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9DTElTVCwgInNob3dfdGl0bGVzIiwgY2xpc3Rfc2V0X3Nob3dfdGl0bGVzKTsKKysjaWZuZGVmIERJU0FCTEVfQ1JVRlQKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX1RSRUUsICJzZWxlY3Rpb25fbW9kZSIsIHRyZWVfc2V0X3NlbGVjdGlvbl9tb2RlKTsKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX1RSRUUsICJ2aWV3X21vZGUiLCB0cmVlX3NldF92aWV3X21vZGUpOworICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfVFJFRSwgInZpZXdfbGluZSIsIHRyZWVfc2V0X3ZpZXdfbGluZSk7CisrI2VuZGlmCisgICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9MSVNULCAic2VsZWN0aW9uX21vZGUiLCBsaXN0X3NldF9zZWxlY3Rpb25fbW9kZSk7CisgICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9DSEVDS19NRU5VX0lURU0sICJhbHdheXNfc2hvd190b2dnbGUiLAorIAkJCQljaGVja19tZW51X2l0ZW1fc2V0X2Fsd2F5c19zaG93X3RvZ2dsZSk7CisrI2lmbmRlZiBESVNBQkxFX0NSVUZUCisgICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9URVhULCAidGV4dCIsIHRleHRfc2V0X3RleHQpOworKyNlbmRpZgorICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfUkFESU9fTUVOVV9JVEVNLCAiZ3JvdXAiLAorIAkJCQlyYWRpb19tZW51X2l0ZW1fc2V0X2dyb3VwKTsKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX1RPT0xCQVIsICJ0b29sdGlwcyIsIHRvb2xiYXJfc2V0X3Rvb2x0aXBzKTsKK0BAIC0xMjg4LDggKzEyOTgsMTAgQEAKKyAJCQkgICBnbGFkZV9zdGFuZGFyZF9idWlsZF9jaGlsZHJlbiwgTlVMTCk7CisgICAgIGdsYWRlX3JlZ2lzdGVyX3dpZGdldCAoR1RLX1RZUEVfVEVBUk9GRl9NRU5VX0lURU0sIGdsYWRlX3N0YW5kYXJkX2J1aWxkX3dpZGdldCwKKyAJCQkgICBOVUxMLCBOVUxMKTsKKysjaWZuZGVmIERJU0FCTEVfQ1JVRlQKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfd2lkZ2V0IChHVEtfVFlQRV9URVhULCBnbGFkZV9zdGFuZGFyZF9idWlsZF93aWRnZXQsCisgCQkJICAgTlVMTCwgTlVMTCk7CisrI2VuZGlmCisgICAgIGdsYWRlX3JlZ2lzdGVyX3dpZGdldCAoR1RLX1RZUEVfVEVYVF9WSUVXLCBnbGFkZV9zdGFuZGFyZF9idWlsZF93aWRnZXQsCisgCQkJICAgTlVMTCwgTlVMTCk7CisgICAgIGdsYWRlX3JlZ2lzdGVyX3dpZGdldCAoR1RLX1RZUEVfVElQU19RVUVSWSwgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfd2lkZ2V0LAorQEAgLTEzMDQsOCArMTMxNiwxMCBAQAorIAkJCSAgIGdsYWRlX3N0YW5kYXJkX2J1aWxkX2NoaWxkcmVuLCBOVUxMKTsKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfd2lkZ2V0IChHVEtfVFlQRV9UT09MX0JVVFRPTiwgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfd2lkZ2V0LAorIAkJCSAgIE5VTEwsIE5VTEwpOworKyNpZm5kZWYgRElTQUJMRV9DUlVGVAorICAgICBnbGFkZV9yZWdpc3Rlcl93aWRnZXQgKEdUS19UWVBFX1RSRUUsIGdsYWRlX3N0YW5kYXJkX2J1aWxkX3dpZGdldCwKKyAJCQkgICBOVUxMLCBOVUxMKTsKKysjZW5kaWYKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfd2lkZ2V0IChHVEtfVFlQRV9UUkVFX1ZJRVcsIGdsYWRlX3N0YW5kYXJkX2J1aWxkX3dpZGdldCwKKyAJCQkgICBOVUxMLCBOVUxMKTsKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfd2lkZ2V0IChHVEtfVFlQRV9WQlVUVE9OX0JPWCwgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfd2lkZ2V0LApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvbm8teG1sMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlLTIuNi40L25vLXhtbDIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM0YzA5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlLTIuNi40L25vLXhtbDIucGF0Y2gKQEAgLTAsMCArMSw1MDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworZGlmZiAtdXJOIGxpYmdsYWRlLTIuNC4yLm9yaWcvY29uZmlndXJlLmluIGxpYmdsYWRlLTIuNC4yL2NvbmZpZ3VyZS5pbgorLS0tIGxpYmdsYWRlLTIuNC4yLm9yaWcvY29uZmlndXJlLmluCTIwMDUtMDItMTEgMTI6NDI6NTguMDAwMDAwMDAwICswMTAwCisrKysgbGliZ2xhZGUtMi40LjIvY29uZmlndXJlLmluCTIwMDUtMDMtMjIgMDE6MjI6MDAuMDAwMDAwMDAwICswMTAwCitAQCAtNTIsMTEgKzUyLDMzIEBACisgQUNfUEFUSF9QUk9HKFBLR19DT05GSUcsIHBrZy1jb25maWcsIG5vKQorIAorIFBLR19DSEVDS19NT0RVTEVTKExJQkdMQURFLCBbZG5sCistICBsaWJ4bWwtMi4wID49IHJlcXVpcmVkX2xpYnhtbF92ZXJzaW9uIGRubAorICAgYXRrID49IHJlcXVpcmVkX2F0a192ZXJzaW9uIGRubAorICAgZ3RrKy0yLjAgPj0gcmVxdWlyZWRfZ3RrX3ZlcnNpb24gZG5sCisgICBnbGliLTIuMCA+PSByZXF1aXJlZF9nbGliX3ZlcnNpb25dKQorIAorK2Rpc2FibGVfeG1sMj1ubworK0FDX0FSR19XSVRIKFtsaWJ4bWwyXSwKKysgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtbGlieG1sMl0sIFtEb24ndCB1c2UgbGlieG1sMiwgdXNlIEdsaWIncyBHTWFya3VwUGFyc2VyIGluc3RlYWRdKSwKKysgIFtkaXNhYmxlX3htbDI9eWVzXSwKKysgIFtkaXNhYmxlX3htbDI9bm9dKQorKworK0FDX01TR19DSEVDS0lORyhbaWYgd2UgYXJlIHVzaW5nIGxpYnhtbDJdKQorK2lmIHRlc3QgIngkZGlzYWJsZV94bWwyIiA9PSAieG5vIjsgdGhlbgorKyAgQUNfTVNHX1JFU1VMVCh5ZXMpCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhYTUwyLCBsaWJ4bWwtMi4wID49IDIuNC4xMCkKKysgIFBLR0NGR19SRVFVSVJFX0xJQlhNTDI9ImxpYnhtbC0yLjAiCisrICBMSUJHTEFERV9DRkxBR1M9IiRMSUJHTEFERV9DRkxBR1MgJFhNTDJfQ0ZMQUdTIgorKyAgTElCR0xBREVfTElCUz0iJExJQkdMQURFX0xJQlMgJFhNTDJfTElCUyIKKytlbHNlCisrICBMSUJHTEFERV9DRkxBR1M9IiRMSUJHTEFERV9DRkxBR1MgLURVU0VfR01BUktVUF9QQVJTRVIiCisrICBQS0dDRkdfUkVRVUlSRV9MSUJYTUwyPSIiCisrICBBQ19NU0dfUkVTVUxUKG5vKQorK2ZpCisrCisrQUNfU1VCU1QoWE1MMl9MSUJTKQorK0FDX1NVQlNUKFhNTDJfQ0ZMQUdTKQorK0FDX1NVQlNUKFBLR0NGR19SRVFVSVJFX0xJQlhNTDIpCisrCisgQUNfTVNHX0NIRUNLSU5HKFtmb3IgbmF0aXZlIFdpbjMyXSkKKyBjYXNlICIkaG9zdCIgaW4KKyAgICotKi1taW5ndyopCitAQCAtMTE2LDYgKzEzOCwyMSBAQAorICAgZmkKKyBmaQorIAorK2lmIHRlc3QgIngkZGlzYWJsZV94bWwyIiA9PSAieHllcyI7IHRoZW4KKysgIGVjaG8gIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIgorKyAgZWNobyAiICBZb3UgY2hvc2UgdG8gZGlzYWJsZSBsaWJ4bWwyIGFuZCB1c2UgR2xpYidzIgorKyAgZWNobyAiICBHTWFya3VwUGFyc2VyIGluc3RlYWQuIiAKKysgIGVjaG8gIAorKyAgZWNobyAiICBQbGVhc2UgYmVhciBpbiBtaW5kIHRoYXQgdXNpbmcgbGliZ2xhZGUgd2l0aCIKKysgIGVjaG8gIiAgR01hcmt1cFBhcnNlciBpcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZSBvbmx5LiIKKysgIGVjaG8KKysgIGVjaG8gIiAgUGxlYXNlIHBvc3QgcHJvYmxlbXMgb3Igc3VjY2VzcyBzdG9yaWVzIHRvIgorKyAgZWNobyAiICB0aGUgZ2xhZGUtZGV2ZWwgbWFpbGluZyBsaXN0LiBUaGFuayB5b3UuIgorKyAgZWNobyAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiCisrZmkKKysKKysKKysKKyBHVEtfRE9DX0NIRUNLKDEuMCkKKyAKKyBkbmwgZ2V0dGV4dCBzdHVmZiAuLi4gdGhlcmUgaXMgbm8gbWVzc2FnZSBjYXRhbG9nIGZvciBsaWJnbGFkZSAtLSBsaWJnbGFkZQorZGlmZiAtdXJOIGxpYmdsYWRlLTIuNC4yLm9yaWcvZ2xhZGUvZ2xhZGUtcGFyc2VyLmMgbGliZ2xhZGUtMi40LjIvZ2xhZGUvZ2xhZGUtcGFyc2VyLmMKKy0tLSBsaWJnbGFkZS0yLjQuMi5vcmlnL2dsYWRlL2dsYWRlLXBhcnNlci5jCTIwMDQtMTEtMTEgMTE6NTY6MTMuMDAwMDAwMDAwICswMTAwCisrKysgbGliZ2xhZGUtMi40LjIvZ2xhZGUvZ2xhZGUtcGFyc2VyLmMJMjAwNS0wMy0yMiAwMToyMDowMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zNCw3ICszNCwxNSBAQAorICMgIGRlZmluZSBkZ2V0dGV4dChEb21haW4sIFN0cmluZykgKFN0cmluZykKKyAjZW5kaWYKKyAKKy0jaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgorKyNpZmRlZiBVU0VfR01BUktVUF9QQVJTRVIKKysjICBpbmNsdWRlIDx6bGliLmg+CisrI2Vsc2UKKysjICBpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CisrI2VuZGlmCisrCisrI2lmZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgorKyMgIGRlZmluZSB4bWxDaGFyIGdjaGFyCisrI2VuZGlmCisgCisgI2luY2x1ZGUgImdsYWRlLXBhcnNlci5oIgorICNpbmNsdWRlICJnbGFkZS1wcml2YXRlLmgiCitAQCAtNTA4LDcgKzUxNiw5IEBACisgICAgIGNhc2UgUEFSU0VSX1NUQVJUOgorIAlpZiAoIXN0cmNtcChuYW1lLCAiZ2xhZGUtaW50ZXJmYWNlIikpIHsKKyAJICAgIHN0YXRlLT5zdGF0ZSA9IFBBUlNFUl9HTEFERV9JTlRFUkZBQ0U7CistI2lmIDAKKysKKysjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgorKyAjaWYgMAorIAkgICAgLyogY2hlY2sgZm9yIGNvcnJlY3QgWE1MIG5hbWVzcGFjZSAqLworIAkgICAgZm9yIChpID0gMDsgYXR0cnMgJiYgYXR0cnNbaV0gIT0gTlVMTDsgaSArPSAyKSB7CisgCQlpZiAoIXN0cmNtcChhdHRyc1tpXSwgInhtbG5zIikgJiYKK0BAIC01MTgsNyArNTI4LDkgQEAKKyAJCSAgICBnX3dhcm5pbmcoInVua25vd24gYXR0cmlidXRlIGAlcycgZm9yIDxnbGFkZS1pbnRlcmZhY2U+IiwKKyAJCQkgICAgICBhdHRyc1tpXSk7CisgCSAgICB9CisrICNlbmRpZgorICNlbmRpZgorKworIAl9IGVsc2UgeworIAkgICAgZ193YXJuaW5nKCJFeHBlY3RlZCA8Z2xhZGUtaW50ZXJmYWNlPi4gIEdvdCA8JXM+LiIsIG5hbWUpOworIAkgICAgc3RhdGUtPnByZXZfc3RhdGUgPSBzdGF0ZS0+c3RhdGU7CitAQCAtMTA2MywxMiArMTA3NSwxOCBAQAorICAgICB9CisgfQorIAorKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCisrCisgc3RhdGljIHhtbEVudGl0eVB0cgorIGdsYWRlX3BhcnNlcl9nZXRfZW50aXR5KEdsYWRlUGFyc2VTdGF0ZSAqc3RhdGUsIGNvbnN0IHhtbENoYXIgKm5hbWUpCisgeworICAgICByZXR1cm4geG1sR2V0UHJlZGVmaW5lZEVudGl0eShuYW1lKTsKKyB9CisgCisrI2VuZGlmIC8qICFkZWZpbmVkKFVTRV9HTUFSS1VQX1BBUlNFUikgKi8KKysKKysjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgorKworIHN0YXRpYyB2b2lkCisgZ2xhZGVfcGFyc2VyX3dhcm5pbmcoR2xhZGVQYXJzZVN0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqbXNnLCAuLi4pCisgeworQEAgLTEwNzksNiArMTA5NywxMCBAQAorICAgICB2YV9lbmQoYXJncyk7CisgfQorIAorKyNlbmRpZiAvKiAhZGVmaW5lZChVU0VfR01BUktVUF9QQVJTRVIpICovCisrCisrI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKKysKKyBzdGF0aWMgdm9pZAorIGdsYWRlX3BhcnNlcl9lcnJvcihHbGFkZVBhcnNlU3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICptc2csIC4uLikKKyB7CitAQCAtMTA4OSw2ICsxMTExLDEwIEBACisgICAgIHZhX2VuZChhcmdzKTsKKyB9CisgCisrI2VuZGlmIC8qICFkZWZpbmVkKFVTRV9HTUFSS1VQX1BBUlNFUikgKi8KKysKKysjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgorKworIHN0YXRpYyB2b2lkCisgZ2xhZGVfcGFyc2VyX2ZhdGFsX2Vycm9yKEdsYWRlUGFyc2VTdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKm1zZywgLi4uKQorIHsKK0BAIC0xMDk5LDYgKzExMjUsMTAgQEAKKyAgICAgdmFfZW5kKGFyZ3MpOworIH0KKyAKKysjZW5kaWYgLyogIWRlZmluZWQoVVNFX0dNQVJLVVBfUEFSU0VSKSAqLworKworKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCisrCisgc3RhdGljIHhtbFNBWEhhbmRsZXIgZ2xhZGVfcGFyc2VyID0geworICAgICAoaW50ZXJuYWxTdWJzZXRTQVhGdW5jKU5VTEwsICAgICAgICAgICAgICAgICAgICAgICAvKiBpbnRlcm5hbFN1YnNldCAqLworICAgICAoaXNTdGFuZGFsb25lU0FYRnVuYylOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpc1N0YW5kYWxvbmUgKi8KK0BAIC0xMTI2LDYgKzExNTYsODIgQEAKKyAgICAgKGZhdGFsRXJyb3JTQVhGdW5jKWdsYWRlX3BhcnNlcl9mYXRhbF9lcnJvciwgICAgICAgLyogZmF0YWxFcnJvciAqLworIH07CisgCisrI2Vsc2UgLyogVVNFX0dNQVJLVVBfUEFSU0VSICovCisrCisrc3RhdGljIHZvaWQKKytnbGFkZV9wYXJzZXJfc3RhcnRfZWxlbWVudF93cmFwcGVyKEdNYXJrdXBQYXJzZUNvbnRleHQgKmNvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICpuYW1lLCAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAqKmF0dHJfbmFtZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgKiphdHRyX3ZhbHVlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgIHN0YXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICoqZXJyb3IpCisreworKyAgICBndWludCBpID0gMDsKKysKKysgICAgLyogUGFjayBhdHRyaWJ1dGUgbmFtZXMvdmFsdWVzIGZyb20gdHdvIHNlcGFyYXRlCisrICAgICAqICBhcnJheXMgKEdNYXJrdXBQYXJzZXIgc3R5bGUpIGludG8gb25lIHNpbmdsZQorKyAgICAgKiAgYXJyYXkgKGxpYnhtbCBTQVhQYXJzZXIgc3R5bGUpLiBUaGlzIGlzIG5vdAorKyAgICAgKiAgdmVyeSBlZmZpY2llbnQsIGJ1dCB3ZSBkbyBpdCB0byBtYWtlIHRoZQorKyAgICAgKiAgR01hcmt1cFBhcnNlciBjb2RlIGFzIGxpdHRsZSBpbnZhc2l2ZSBhcworKyAgICAgKiAgcG9zc2libGUuICovCisrCisrICAgIHdoaWxlIChhdHRyX25hbWVzW2ldICE9IE5VTEwpIHsKKysgICAgICArK2k7CisrICAgIH0KKysKKysgICAgaWYgKDEpCisrICAgIHsKKysgICAgICAgIGNvbnN0IGdjaGFyICphdHRyWyhpKjIpKzFdOworKyAgICAgICAgZ3VpbnQgaiwgazsKKysgICAgICAgCisrICAgICAgICBmb3IgKGo9MCwgaz0wOyAgayA8IGk7ICBqICs9IDIpCisrICAgICAgICB7CisrICAgICAgICAgICAgYXR0cltqXSA9IGF0dHJfbmFtZXNba107CisrICAgICAgICAgICAgYXR0cltqKzFdID0gYXR0cl92YWx1ZXNba107CisrICAgICAgICAgICAgKytrOworKyAgICAgICAgfQorKyAgICAgICAgYXR0cltpKjJdID0gTlVMTDsKKysKKysgICAgICAgIGdsYWRlX3BhcnNlcl9zdGFydF9lbGVtZW50KChHbGFkZVBhcnNlU3RhdGUqKXN0YXRlLCBuYW1lLCBhdHRyKTsKKysgICAgfQorK30KKysKKytzdGF0aWMgdm9pZAorK2dsYWRlX3BhcnNlcl9lbmRfZWxlbWVudF93cmFwcGVyKEdNYXJrdXBQYXJzZUNvbnRleHQgKmNvbnRleHQsIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgKm5hbWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgc3RhdGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICoqZXJyKQorK3sKKysgICAgZ2xhZGVfcGFyc2VyX2VuZF9lbGVtZW50KChHbGFkZVBhcnNlU3RhdGUqKXN0YXRlLCBuYW1lKTsKKyt9CisrCisrc3RhdGljIHZvaWQKKytnbGFkZV9wYXJzZXJfY2hhcmFjdGVyc193cmFwcGVyKEdNYXJrdXBQYXJzZUNvbnRleHQgKmNvbnRleHQsIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAqY2hhcnMsIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgICAgICAgICAgICAgICAgbGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgc3RhdGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgKiplcnIpCisreworKyAgICBnbGFkZV9wYXJzZXJfY2hhcmFjdGVycygoR2xhZGVQYXJzZVN0YXRlKilzdGF0ZSwgY2hhcnMsIChpbnQpIGxlbik7CisrfQorKworK3N0YXRpYyB2b2lkCisrZ2xhZGVfcGFyc2VyX2Vycm9yKEdNYXJrdXBQYXJzZUNvbnRleHQgKmNvbnRleHQsIEdFcnJvciAqZXJyLCBncG9pbnRlciBkYXRhKQorK3sKKysgICAgZ19sb2coIkdsYWRlLVBhcnNlciIsIEdfTE9HX0xFVkVMX0NSSVRJQ0FMLCAiJXMiLCBlcnItPm1lc3NhZ2UpOworK30KKysKKytzdGF0aWMgY29uc3QgR01hcmt1cFBhcnNlciAgIGdsYWRlX3BhcnNlciA9IHsKKysgICAgZ2xhZGVfcGFyc2VyX3N0YXJ0X2VsZW1lbnRfd3JhcHBlciwgIC8qIGVsZW1lbnQgb3BlbiAgICovCisrICAgIGdsYWRlX3BhcnNlcl9lbmRfZWxlbWVudF93cmFwcGVyLCAgICAvKiBlbGVtZW50IGNsb3NlICAqLworKyAgICBnbGFkZV9wYXJzZXJfY2hhcmFjdGVyc193cmFwcGVyLCAgICAgLyogdGV4dCBjb250ZW50ICAgKi8KKysgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBhc3N0aHJvdWdoICAgICovCisrICAgIGdsYWRlX3BhcnNlcl9lcnJvciwgICAgICAgICAgICAgICAgICAvKiBwYXJzZSBlcnJvciAgICAqLworK307CisrCisrI2VuZGlmIC8qIFVTRV9HTUFSS1VQX1BBUlNFUiAqLworKworKworIHN0YXRpYyB2b2lkCisgd2lkZ2V0X2luZm9fZnJlZShHbGFkZVdpZGdldEluZm8gKmluZm8pCisgeworQEAgLTExOTEsNiArMTI5Nyw5IEBACisgICoKKyAgKiBSZXR1cm5zOiB0aGUgR2xhZGVJbnRlcmZhY2Ugc3RydWN0dXJlIGZvciB0aGUgWE1MIGZpbGUuCisgICovCisrCisrI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKKysKKyBHbGFkZUludGVyZmFjZSAqCisgZ2xhZGVfcGFyc2VyX3BhcnNlX2ZpbGUoY29uc3QgZ2NoYXIgKmZpbGUsIGNvbnN0IGdjaGFyICpkb21haW4pCisgeworQEAgLTEyMjIsNiArMTMzMSwzMSBAQAorICAgICByZXR1cm4gc3RhdGUuaW50ZXJmYWNlOworIH0KKyAKKysjZWxzZSAvKiBkZWZpbmVkKFVTRV9HTUFSS1VQX1BBUlNFUikgKi8KKysKKytHbGFkZUludGVyZmFjZSAqCisrZ2xhZGVfcGFyc2VyX3BhcnNlX2ZpbGUoY29uc3QgZ2NoYXIgKmZpbGUsIGNvbnN0IGdjaGFyICpkb21haW4pCisreworKyAgICBHbGFkZUludGVyZmFjZSAgKmludGVyZmFjZTsKKysgICAgR0Vycm9yICAgICAgICAgICplcnIgICAgID0gTlVMTDsKKysgICAgZ2NoYXIgICAgICAgICAgICpjb250ZW50ID0gTlVMTDsKKysgICAgZ3NpemUgICAgICAgICAgICBjbGVuOworKworKyAgICBpZiAoIWdfZmlsZV9nZXRfY29udGVudHMoZmlsZSwgJmNvbnRlbnQsICZjbGVuLCAmZXJyKSkgeworKyAgICAgICAgZ193YXJuaW5nKCJjb3VsZCBub3QgbG9hZCBnbGFkZSBmaWxlOiAlcyIsIGVyci0+bWVzc2FnZSk7CisrICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyKTsKKysgICAgICAgIHJldHVybiBOVUxMOworKyAgICB9CisrCisrICAgIGludGVyZmFjZSA9IGdsYWRlX3BhcnNlcl9wYXJzZV9idWZmZXIoY29udGVudCwgKGdpbnQpIGNsZW4sIGRvbWFpbik7CisrCisrICAgIGdfZnJlZShjb250ZW50KTsKKysKKysgICAgcmV0dXJuIGludGVyZmFjZTsKKyt9CisrCisrI2VuZGlmIC8qIFVTRV9HTUFSS1VQX1BBUlNFUiAqLworKworIC8qKgorICAqIGdsYWRlX3BhcnNlcl9wYXJzZV9idWZmZXIKKyAgKiBAYnVmZmVyOiBhIGJ1ZmZlciBpbiBtZW1vcnkgY29udGFpbmluZyBYTUwgZGF0YS4KK0BAIC0xMjM3LDYgKzEzNzEsOSBAQAorICAqCisgICogUmV0dXJuczogdGhlIEdsYWRlSW50ZXJmYWNlIHN0cnVjdHVyZSBmb3IgdGhlIFhNTCBidWZmZXIuCisgICovCisrCisrI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKKysKKyBHbGFkZUludGVyZmFjZSAqCisgZ2xhZGVfcGFyc2VyX3BhcnNlX2J1ZmZlcihjb25zdCBnY2hhciAqYnVmZmVyLCBnaW50IGxlbiwgY29uc3QgZ2NoYXIgKmRvbWFpbikKKyB7CitAQCAtMTI2Myw2ICsxNDAwLDE2MSBAQAorICAgICByZXR1cm4gc3RhdGUuaW50ZXJmYWNlOworIH0KKyAKKysjZWxzZSAvKiBkZWZpbmVkKFVTRV9HTUFSS1VQX1BBUlNFUikgKi8KKysKKysKKytzdGF0aWMgR2xhZGVJbnRlcmZhY2UgKgorK2dsYWRlX3BhcnNlcl9wYXJzZV9idWZmZXJfaW50ZXJuYWwoY29uc3QgZ2NoYXIgKmJ1ZmZlciwgZ2ludCBsZW4sIGNvbnN0IGdjaGFyICpkb21haW4pCisreworKwlHTWFya3VwUGFyc2VDb250ZXh0ICAqY29udGV4dDsKKysJR2xhZGVQYXJzZVN0YXRlICAgICAgIHN0YXRlID0geyAwIH07CisrCUdFcnJvciAgICAgICAgICAgICAgICplcnIgICA9IE5VTEw7CisrCisrCXN0YXRlLmludGVyZmFjZSA9IE5VTEw7CisrCWlmIChkb21haW4pCisrCQlzdGF0ZS5kb21haW4gPSBkb21haW47CisrCWVsc2UKKysJCXN0YXRlLmRvbWFpbiA9IHRleHRkb21haW4oTlVMTCk7CisrCisrCS8qIEZJWE1FOiBUaGlzIHN0cnN0cigpIGlzIG5vdCBzYWZlLCBhcyBpdCBpZ25vcmVzIHRoZSBsZW4KKysJICogICAgICAgIGFyZ3VtZW50IGFuZCBhc3N1bWVzIHRoZSBidWZmZXIgaXMgTlVMLXRlcm1pbmF0ZWQgKi8KKysJaWYgKHN0cnN0cihidWZmZXIsICI8P3htbCIpID09IE5VTEwpIHsKKysJCWdfd2FybmluZygiTm8gWE1MIGhlYWRlciBmb3VuZCBpbiBkb2N1bWVudCEiKTsKKysJCXJldHVybiBOVUxMOworKwl9CisrCisrCWNvbnRleHQgPSBnX21hcmt1cF9wYXJzZV9jb250ZXh0X25ldygmZ2xhZGVfcGFyc2VyLCAoR01hcmt1cFBhcnNlRmxhZ3MpIDAsICZzdGF0ZSwgTlVMTCk7CisrCisrCWdsYWRlX3BhcnNlcl9zdGFydF9kb2N1bWVudCgmc3RhdGUpOworKworKwlpZiAoIWdfbWFya3VwX3BhcnNlX2NvbnRleHRfcGFyc2UoY29udGV4dCwgYnVmZmVyLCAoZ3NzaXplKSBsZW4sICZlcnIpKSB7CisrCQlnX3dhcm5pbmcoImRvY3VtZW50IG5vdCB3ZWxsIGZvcm1lZDogJXMiLCBlcnItPm1lc3NhZ2UpOworKwkJZ19lcnJvcl9mcmVlKGVycik7CisrCQlpZiAoc3RhdGUuaW50ZXJmYWNlKQorKwkJCWdsYWRlX2ludGVyZmFjZV9kZXN0cm95IChzdGF0ZS5pbnRlcmZhY2UpOworKwkJcmV0dXJuIE5VTEw7CisrCX0KKysKKysJZ2xhZGVfcGFyc2VyX2VuZF9kb2N1bWVudCgmc3RhdGUpOworKworKwlpZiAoc3RhdGUuc3RhdGUgIT0gUEFSU0VSX0ZJTklTSCkgeworKwkJZ193YXJuaW5nKCJkaWQgbm90IGZpbmlzaCBpbiBQQVJTRVJfRklOSVNIIHN0YXRlISIpOworKworKwkJaWYgKHN0YXRlLmludGVyZmFjZSkKKysJCQlnbGFkZV9pbnRlcmZhY2VfZGVzdHJveShzdGF0ZS5pbnRlcmZhY2UpOworKworKwkJcmV0dXJuIE5VTEw7CisrCX0KKysKKysJcmV0dXJuIHN0YXRlLmludGVyZmFjZTsKKyt9CisrCisrc3RydWN0IF9nemlwX3JmYzE5NTJfaGRyCisreworKwlndWludDgJaWQxLCBpZDIsIGNtLCBmbGFnczsKKysJZ3VpbnQzMiBtdGltZTsKKysJZ3VpbnQ4ICB4ZmxhZ3M7CisrCWd1aW50OCAgb3M7CisrfTsKKysKKytzdGF0aWMgR2xhZGVJbnRlcmZhY2UgKgorK2dsYWRlX3BhcnNlcl9wYXJzZV9nemlwcGVkX2J1ZmZlcihjb25zdCBnY2hhciAqYnVmZmVyLCBnaW50IGxlbiwgY29uc3QgZ2NoYXIgKmRvbWFpbikKKyt7CisrCXN0cnVjdCBfZ3ppcF9yZmMxOTUyX2hkciAqaGRyID0gKHN0cnVjdCBfZ3ppcF9yZmMxOTUyX2hkciopYnVmZmVyOworKwlzdHJ1Y3Qgel9zdHJlYW1fcyAgICAgICAgIHpzdHJlYW07CisrCUdsYWRlSW50ZXJmYWNlICAgICAgICAgICAqaW50ZXJmYWNlOworKwljb25zdCBndWludDggICAgICAgICAgICAgKmNidWY7ICAgICAgICAgICAgICAvKiBzdGFydCBvZiBjb21wcmVzc2VkIGRhdGEgKi8KKysJZ3VpbnQ4ICAgICAgICAgICAgICAgICAgICpkZWNvbXByZXNzX2J1ZjsKKysJZ3Vsb25nICAgICAgICAgICAgICAgICAgICBkZWNvbXByZXNzX2xlbiA9IDA7CisrCWdpbnQgICAgICAgICAgICAgICAgICAgICAgcmV0OworKworKwlnX2Fzc2VydChoZHIgIT0gTlVMTCAmJiBoZHItPmlkMSA9PSAweDFmICYmIGhkci0+aWQyID09IDB4OGIpOworKworKwlpZiAoaGRyLT5jbSAhPSBaX0RFRkxBVEVEKSB7CisrCQlnX3dhcm5pbmcoIlVua25vd24gZGVjb21wcmVzc2lvbiBtZXRob2QgJXUiLCAoZ3VpbnQpIGhkci0+Y20pOworKwkJcmV0dXJuIE5VTEw7CisrCX0KKysKKysJLyogVW5jb21wcmVzc2VkIHNpemUgKG1vZHVsbyAyXjMyKSBpcyBsYXN0CisrCSAqICA0IGJ5dGVzIG9mIGd6aXBwZWQgZmlsZSwgYW5kIGxpdHRsZSBlbmRpYW4uCisrCSAqICBTZWUgUkZDIDE5NTIgKi8KKysJZGVjb21wcmVzc19sZW4gPSBHVUlOVDMyX0ZST01fTEUoKigoZ3VpbnQzMiopKCgoZ3VpbnQ4KilidWZmZXIpICsgbGVuIC0gNCkpKTsKKysKKysJLyogcGFyYW5vaWQgbW9kZTogZ2xhZGUgZmlsZXMgPiA1TUIgYXJlIHVubGlrZWx5ICovCisrCWdfcmV0dXJuX3ZhbF9pZl9mYWlsKGRlY29tcHJlc3NfbGVuIDwgNSoxMDI0KjEwMjQsIE5VTEwpOworKworKwlkZWNvbXByZXNzX2J1ZiA9IGdfbWFsbG9jMChkZWNvbXByZXNzX2xlbiArIDEpOyAvKiArMSBmb3IgTlVMLXRlcm1pbmF0b3IgKi8KKysKKysJLyogZmluZCBzdGFydCBvZiBjb21wcmVzc2VkIGRhdGEsIHNraXBwaW5nIGhlYWRlciBzdHVmZiAqLworKwljYnVmID0gKGd1aW50OCopYnVmZmVyICsgMTA7CisrCWlmIChoZHItPmZsYWdzICYgMHgwNCkgeworKwkJZ3VpbnQxNiB4bGVuID0gR1VJTlQxNl9GUk9NX0xFKCooKGd1aW50MTYqKWNidWYpKTsKKysJCWNidWYgKz0geGxlbiArIDI7CisrCX0KKysJaWYgKGhkci0+ZmxhZ3MgJiAweDA4KSB7CisrCQlndWludDE2IG9uYW1lbGVuID0gc3RybGVuKGNidWYpOworKwkJY2J1ZiArPSBvbmFtZWxlbiArIDE7CisrCX0KKysJaWYgKGhkci0+ZmxhZ3MgJiAweDEwKSB7CisrCQlndWludDE2IGNvbW1lbnRsZW4gPSBzdHJsZW4oY2J1Zik7CisrCQljYnVmICs9IGNvbW1lbnRsZW4gKyAxOworKwl9CisrCWlmIChoZHItPmZsYWdzICYgMHgwMikKKysJeworKwkJY2J1ZiArPSAyOyAvKiBza2lwIGhlYWRlciBDUkMxNiAqLworKwl9CisrCisrCXpzdHJlYW0ubmV4dF9pbiAgPSAodm9pZCopY2J1ZjsKKysJenN0cmVhbS5hdmFpbF9pbiA9ICh1TG9uZ2YpIGxlbiAtICgodm9pZCopY2J1Zi0odm9pZCopYnVmZmVyKSAtIDQgLSA0ICsxOyAKKysJenN0cmVhbS5uZXh0X291dCA9IGRlY29tcHJlc3NfYnVmOworKwl6c3RyZWFtLmF2YWlsX291dD0gZGVjb21wcmVzc19sZW47CisrCXpzdHJlYW0uemFsbG9jICAgPSBaX05VTEw7CisrCXpzdHJlYW0uemZyZWUgICAgPSBaX05VTEw7CisrCXpzdHJlYW0ub3BhcXVlICAgPSBaX05VTEw7CisrCisrCXJldCA9IGluZmxhdGVJbml0MigmenN0cmVhbSwgLU1BWF9XQklUUyk7CisrCisrCWlmIChyZXQgIT0gWl9PSykgeworKwkJZ193YXJuaW5nKCJpbmZsYXRlSW5pdDIoKSBmYWlsZWQuIHpsaWIgZXJyb3IgY29kZTogJWQiLCByZXQpOworKwkJZ19mcmVlKGRlY29tcHJlc3NfYnVmKTsKKysJCXJldHVybiBOVUxMOworKwl9CisrCisrCXJldCA9IGluZmxhdGUoJnpzdHJlYW0sIFpfRklOSVNIKTsKKysKKysJaWYgKHJldCAhPSBaX1NUUkVBTV9FTkQpIHsKKysJCWdfd2FybmluZygiemxpYiBkZWNvbXByZXNzaW9uIGZhaWxlZC4gemxpYiBlcnJvciBjb2RlOiAlZCIsIHJldCk7CisrCQlnX2ZyZWUoZGVjb21wcmVzc19idWYpOworKwkJcmV0dXJuIE5VTEw7CisrCX0KKysKKysJaW50ZXJmYWNlID0gZ2xhZGVfcGFyc2VyX3BhcnNlX2J1ZmZlcl9pbnRlcm5hbChkZWNvbXByZXNzX2J1ZiwgZGVjb21wcmVzc19sZW4sIGRvbWFpbik7CisrCisrCWdfZnJlZShkZWNvbXByZXNzX2J1Zik7CisrCisrCXJldHVybiBpbnRlcmZhY2U7CisrfQorKworK0dsYWRlSW50ZXJmYWNlICoKKytnbGFkZV9wYXJzZXJfcGFyc2VfYnVmZmVyKGNvbnN0IGdjaGFyICpidWZmZXIsIGdpbnQgbGVuLCBjb25zdCBnY2hhciAqZG9tYWluKQorK3sKKysJZ19yZXR1cm5fdmFsX2lmX2ZhaWwoYnVmZmVyICE9IE5VTEwsIE5VTEwpOworKwlnX3JldHVybl92YWxfaWZfZmFpbChsZW4gPiAwLCBOVUxMKTsKKysKKysJLyogQ2hlY2sgaWYgYnVmZmVyIGlzIGd6aXBwZWQgKi8KKysJaWYgKGJ1ZmZlclswXSA9PSAweDFmICYmIGJ1ZmZlclsxXSA9PSAoZ2NoYXIpMHg4YikgeworKwkJcmV0dXJuIGdsYWRlX3BhcnNlcl9wYXJzZV9nemlwcGVkX2J1ZmZlcihidWZmZXIsIGxlbiwgZG9tYWluKTsKKysJfQorKworKwkvKiBCdWZmZXIgaXMgY2xlYXJ0ZXh0LiAqLworKwlyZXR1cm4gZ2xhZGVfcGFyc2VyX3BhcnNlX2J1ZmZlcl9pbnRlcm5hbChidWZmZXIsIGxlbiwgZG9tYWluKTsKKyt9CisrCisrI2VuZGlmIC8qIFVTRV9HTUFSS1VQX1BBUlNFUiAqLworKworKworKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCisrCisgc3RhdGljIHZvaWQKKyBkdW1wX3dpZGdldCh4bWxOb2RlICpwYXJlbnQsIEdsYWRlV2lkZ2V0SW5mbyAqaW5mbywgZ2ludCBpbmRlbnQpCisgeworQEAgLTEzODIsNiArMTY3NCw4IEBACisgCXhtbE5vZGVBZGRDb250ZW50KHdpZGdldCwgIiAgIik7CisgfQorIAorKyNlbmRpZiAvKiAhZGVmaW5lZChVU0VfR01BUktVUF9QQVJTRVIpICovCisrCisgLyoqCisgICogZ2xhZGVfaW50ZXJmYWNlX2R1bXAKKyAgKiBAaW50ZXJmYWNlOiB0aGUgR2xhZGVJbnRlcmZhY2UKK0BAIC0xMzkwLDYgKzE2ODQsOSBAQAorICAqIFRoaXMgZnVuY3Rpb24gZHVtcHMgdGhlIGNvbnRlbnRzIG9mIGEgR2xhZGVJbnRlcmZhY2UgaW50byBhIGZpbGUgYXMKKyAgKiBYTUwuICBJdCBpcyBpbnRlbmRlZCBtYWlubHkgYXMgYSBkZWJ1Z2dpbmcgdG9vbC4KKyAgKi8KKysKKysjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgorKworIHZvaWQKKyBnbGFkZV9pbnRlcmZhY2VfZHVtcChHbGFkZUludGVyZmFjZSAqaW50ZXJmYWNlLCBjb25zdCBnY2hhciAqZmlsZW5hbWUpCisgeworQEAgLTE0MjgsNiArMTcyNSwxNyBAQAorICAgICB4bWxGcmVlRG9jKGRvYyk7CisgfQorIAorKyNlbHNlIC8qIGRlZmluZWQoVVNFX0dNQVJLVVBfUEFSU0VSKSAqLworKworK3ZvaWQKKytnbGFkZV9pbnRlcmZhY2VfZHVtcChHbGFkZUludGVyZmFjZSAqaW50ZXJmYWNlLCBjb25zdCBnY2hhciAqZmlsZW5hbWUpCisreworKyAgICBnX3dhcm5pbmcoImdsYWRlX2ludGVyZmFjZV9kdW1wKCkgaXMgb25seSBhdmFpbGFibGUgd2l0aCBsaWJ4bWwyLiIpOworK30KKysKKysjZW5kaWYgLyogVVNFX0dNQVJLVVBfUEFSU0VSICovCisrCisrCisgI2lmIDAKKyBpbnQKKyBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgeworZGlmZiAtdXJOIGxpYmdsYWRlLTIuNC4yLm9yaWcvbGliZ2xhZGUtMi4wLnBjLmluIGxpYmdsYWRlLTIuNC4yL2xpYmdsYWRlLTIuMC5wYy5pbgorLS0tIGxpYmdsYWRlLTIuNC4yLm9yaWcvbGliZ2xhZGUtMi4wLnBjLmluCTIwMDEtMTItMTIgMTU6Mjg6MjMuMDAwMDAwMDAwICswMTAwCisrKysgbGliZ2xhZGUtMi40LjIvbGliZ2xhZGUtMi4wLnBjLmluCTIwMDUtMDMtMjIgMDE6MjA6MDAuMDAwMDAwMDAwICswMTAwCitAQCAtMTEsNyArMTEsNyBAQAorIE5hbWU6IExpYmdsYWRlCisgRGVzY3JpcHRpb246IGEgbGlicmFyeSBmb3IgZHluYW1pY2FsbHkgbG9hZGluZyBHTEFERSBpbnRlcmZhY2UgZmlsZXMKKyBWZXJzaW9uOiBAVkVSU0lPTkAKKy1SZXF1aXJlczogZ3RrKy0yLjAgbGlieG1sLTIuMAorK1JlcXVpcmVzOiBndGsrLTIuMCBAUEtHQ0ZHX1JFUVVJUkVfTElCWE1MMkAKKyBMaWJzOiAtTCR7bGliZGlyfSAtbGdsYWRlLTIuMAorIENmbGFnczogLUkke2luY2x1ZGVkaXJ9L2xpYmdsYWRlLTIuMAorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvcHl0aG9uX2Vudmlyb25tZW50LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvcHl0aG9uX2Vudmlyb25tZW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YjJlYzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZS0yLjYuNC9weXRob25fZW52aXJvbm1lbnQucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorVXNpbmcgQFBZVEhPTkAgZm9yIHRoaXMgcGF0aCB3b3VsZCByZXN1bHQgaW4gdGhlIGJ1aWxkIHN5c3RlbSBweXRob24gYmVpbmcgCityZWZlcnJlZCB0by4gSW5zdGVhZCB3ZSB3YW50IHRvIGxvY2F0ZSBweXRob24gZnJvbSB0aGUgZW52aXJvbm1lbnQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworZGlmZiAtcnVOIGxpYmdsYWRlLTIuNi40LW9yaWcvL2xpYmdsYWRlLWNvbnZlcnQuaW4gbGliZ2xhZGUtMi42LjQvbGliZ2xhZGUtY29udmVydC5pbgorLS0tIGxpYmdsYWRlLTIuNi40LW9yaWcvL2xpYmdsYWRlLWNvbnZlcnQuaW4JMjAxMS0wOS0yMiAxMDoxODoyOC45OTExNjQwMDMgKzA4MDAKKysrKyBsaWJnbGFkZS0yLjYuNC9saWJnbGFkZS1jb252ZXJ0LmluCTIwMTEtMDktMjIgMTA6MTg6NTUuNDMxMTY0MDAzICswODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIUBQWVRIT05ACisrIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisgIyAtKi0gbW9kZTogcHl0aG9uIC0qLQorIAorICMgeWVzLCB0aGlzIHJlcXVpcmVzIHB5dGhvbiAyLnggYW5kIGFuIFhNTCBwYXJzZXIgbW9kdWxlIChlZy4gUHlFeHBhdCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlXzIuNi40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGVfMi42LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUyNjdjYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlXzIuNi40LmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiUnVudGltZSBzdXBwb3J0IGZvciB0aGUgR1RLKyBpbnRlcmZhY2UgYnVpbGRlciIKK0hPTUVQQUdFID0gImh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9saWJnbGFkZS8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIgJiBMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTVjYTgxN2NjYjdkNWI1YjY2MzU1NjkwZTlhYmM2MDUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2xhZGUvZ2xhZGUuaDtlbmRsaW5lPTIyO21kNT1hMDRmNDYxYzk2NGJhNGI1N2ExNzJkMWZiY2Q4ZjhmYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbGFkZS9nbGFkZS1ndGsuYztlbmRsaW5lPTIyO21kNT03NjZmOTkzNDMzZTI2NDJmZWM4NzkzNmQzMTk5OTBmZiIKKworU0VDVElPTiA9ICJsaWJzIgorUFIgPSAicjUiCitERVBFTkRTID0gInpsaWIgZ2RrLXBpeGJ1ZiBndGsrIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ25vbWViYXNlIGd0ay1kb2MKK0dOT01FX0NPTVBSRVNTX1RZUEU9ImJ6MiIKKworU1JDX1VSSSArPSAiZmlsZTovL2dsYWRlLWNydWZ0LnBhdGNoIGZpbGU6Ly9uby14bWwyLnBhdGNoIGZpbGU6Ly9weXRob25fZW52aXJvbm1lbnQucGF0Y2giCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImQxNzc2YjQwZjRlMTY2YjVlOWMxMDdmMWM4ZmU0MTM5IgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNjQzNjFlNzY0NzgzOWQzNmVkODMzNmQ5OTJmZDIxMGQzZTgxMzk4ODIyNjliZWQ0N2RjNDY3NDk4MDE2NWRlYyIKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtbGlieG1sMiIKKworQ0ZMQUdTICs9ICItbHoiCisKK1BBQ0tBR0VTICs9ICIgJHtQTn0tZGF0YSIKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9saWIqLnNvLioiCitGSUxFU18ke1BOfS1kYXRhID0gIiR7ZGF0YWRpcn0veG1sL2xpYmdsYWRlL2dsYWRlLTIuMC5kdGQiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9saWJnbGFkZS1jb252ZXJ0IgorI1JERVBFTkRTXyR7UE59ID0gIiR7UE59LWRhdGEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJub3RpZnkvbGlibm90aWZ5XzAuNy42LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlibm90aWZ5L2xpYm5vdGlmeV8wLjcuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWQxODhjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlibm90aWZ5L2xpYm5vdGlmeV8wLjcuNi5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIHNlbmRpbmcgZGVza3RvcCBub3RpZmljYXRpb25zIHRvIGEgbm90aWZpY2F0aW9uIGRhZW1vbiIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCIKKworREVQRU5EUyA9ICJkYnVzIGd0ayszIGRidXMtZ2xpYiIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3RrLWRvYworCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJhNDk5NzAxOWQwOGY0NmYzYmY1N2I3OGU2Zjc5NWE1OSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjBlZjYxY2E0MDBkMzBlMjgyMTc5NzliZmEwZTczYTc0MDZiMTljMzJkZDc2MTUwNjU0ZWM1YjJiZGY0N2Q4MzciCisKKyMgdGhlcmUgd2VyZSB0aW1lcywgd2UgaGFkIHR3byB2ZXJzaW9ucyBvZiBsaWJub3RpZnkgKG9lLWNvcmUgbGlibm90aWZ5OjAuNi54IC8KKyMgbWV0YS1nbm9tZSBsaWJub3RpZnkzOiAwLjcueCkKK1BST1ZJREVTICs9ICJsaWJub3RpZnkzIgorUlBST1ZJREVTXyR7UE59ICs9ICJsaWJub3RpZnkzIgorUkNPTkZMSUNUU18ke1BOfSArPSAibGlibm90aWZ5MyIKK1JSRVBMQUNFU18ke1BOfSArPSAibGlibm90aWZ5MyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYnJzdmcvbGlicnN2Zy9ndGstb3B0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlicnN2Zy9saWJyc3ZnL2d0ay1vcHRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZhZjQ4MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYnJzdmcvbGlicnN2Zy9ndGstb3B0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK0Zyb20gMWMzOGQ1NzBiMzNmMmIwMzZkNGZhNDdlOTI5YmIyYjMyNjRlMzhiZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBUdWUsIDExIEF1ZyAyMDE1IDE2OjI1OjM4ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZTogYWRkIG9wdGlvbiB0byBlbmFibGUvZGlzYWJsZSB1c2Ugb2YgR1RLKworCitEaXN0cm8gcGFja2FnZXJzIGxpa2UgcHJlZGljdGFiaWxpdHkgYW5kIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQgb3B0aW9uYWwKK2RlcGVuZGVuY2llcyBhcmUgbm90IHByZWRpY2FibGUuICBBZGQgYSAtLXdpdGgtZ3RrMyBvcHRpb24gKGRlZmF1bHQgdG8gImF1dG8iKQorZm9yIGZvcmNpYmx5IGNvbnRyb2xsaW5nIHdoZXRoZXIgR1RLKyB3aWxsIGJlIHVzZWQgb3Igbm90LgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxMjY5M10KKworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRm9yd2FyZC1wb3J0ZWQgdG8gMi40MC4xMAorCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMTcgKysrKysrKysrKystLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYmY3N2YzYS4uY2E3N2RlOCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTI4LDE3ICsxMjgsMjIgQEAgQUNfQ0hFQ0tfRlVOQ1Moc3RydG9rX3IpCisgIyBHVEsKKyAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIAorLVBLR19DSEVDS19NT0RVTEVTKFtHVEszXSxbZ3RrKy0zLjAgPj0gJEdUSzNfUkVRVUlSRURdLFtoYXZlX2d0a18zPXllc10sW2hhdmVfZ3RrXzM9bm9dKQorLQorIEdUSzNfQklOQVJZX1ZFUlNJT049CisgCistaWYgdGVzdCAiJGhhdmVfZ3RrXzMiID0gInllcyI7IHRoZW4KKy0gICAgR1RLM19CSU5BUllfVkVSU0lPTj0iYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z3RrX2JpbmFyeV92ZXJzaW9uIGd0aystMy4wYCIKKytBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gdXNlIEdUSysgM10pCisrQUNfQVJHX1dJVEgoW2d0azNdLAorKyAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtZ3RrM10sW0Rvbid0IGJ1aWxkIEdUSyszIHRvb2xzIChkZWZhdWx0PWF1dG8pXSldLAorKyAgW10sW1BLR19DSEVDS19FWElTVFMoW2d0aystMy4wID49ICRHVEszX1JFUVVJUkVEXSxbd2l0aF9ndGszPXllc10sW3dpdGhfZ3RrMz1ub10pXSkKKytBQ19NU0dfUkVTVUxUKFskd2l0aF9ndGszXSkKKysKKytpZiB0ZXN0ICIkd2l0aF9ndGszIiA9ICJ5ZXMiOyB0aGVuCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhHVEszLCBbZ3RrKy0zLjAgPj0gJEdUSzNfUkVRVUlSRURdKQorKyAgR1RLM19CSU5BUllfVkVSU0lPTj0iYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z3RrX2JpbmFyeV92ZXJzaW9uIGd0aystMy4wYCIKKyBmaQorIAorIEFDX1NVQlNUKFtHVEszX0JJTkFSWV9WRVJTSU9OXSkKKyAKKy1BTV9DT05ESVRJT05BTChbSEFWRV9HVEtfM10sW3Rlc3QgIiRoYXZlX2d0a18zIiA9ICJ5ZXMiXSkKKytBTV9DT05ESVRJT05BTChbSEFWRV9HVEtfM10sW3Rlc3QgIiR3aXRoX2d0azMiID0gInllcyJdKQorIAorIGRubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyBkbmwgR0RLLVBpeGJ1ZiBTVkcgbG9hZGVyCitAQCAtMjg5LDYgKzI5NCw2IEBAIGxpYnJzdmctJFZFUlNJT04KKyAJQnVpbGQgaW50cm9zcGVjdGFibGUgYmluZGluZ3M6ICAke2ZvdW5kX2ludHJvc3BlY3Rpb259CisgCUJ1aWxkIFZhbGEgYmluZGluZ3M6ICAgICAgICAgICAgJHtlbmFibGVfdmFsYX0KKyAJQnVpbGQgR2RrUGl4YnVmIGxvYWRlcjogICAgICAgICAke2VuYWJsZV9waXhidWZfbG9hZGVyfQorLSAgICAgICAgR1RLKyAkR1RLM19SRVFVSVJFRCBvciBsYXRlcjogICAgICAgICAgICR7aGF2ZV9ndGtfM30KKysgICAgICAgIEdUSysgJEdUSzNfUkVRVUlSRUQgb3IgbGF0ZXI6ICAgICAgICAgICAke3dpdGhfZ3RrXzN9CisgCUJ1aWxkIG1pc2NlbGxhZW5vdXMgdG9vbHM6ICAgICAgJHtidWlsZF9taXNjX3Rvb2xzfQorICIKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlicnN2Zy9saWJyc3ZnXzIuNDAuMTAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJyc3ZnL2xpYnJzdmdfMi40MC4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGIwZTRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlicnN2Zy9saWJyc3ZnXzIuNDAuMTAuYmIKQEAgLTAsMCArMSw0NyBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciByZW5kZXJpbmcgU1ZHIGZpbGVzIgorSE9NRVBBR0UgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL0dOT01FL3NvdXJjZXMvbGlicnN2Zy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcnN2Zy5oO2JlZ2lubGluZT0zO2VuZGxpbmU9MjQ7bWQ1PTIwYjQxMTNjNDkwOWJiZjBkNjdlMDA2Nzc4MzAyYmM2IgorCitTRUNUSU9OID0gIngxMS91dGlscyIKK0RFUEVORFMgPSAiY2Fpcm8gZ2RrLXBpeGJ1ZiBnbGliLTIuMCBsaWJjcm9jbyBsaWJ4bWwyIHBhbmdvIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnbm9tZWJhc2UgZ3RrLWRvYyBwaXhidWZjYWNoZQorCitTUkNfVVJJICs9ICJmaWxlOi8vZ3RrLW9wdGlvbi5wYXRjaCIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiZmFkZWJlMmU3OTlhYjE1OTE2OWVlMzE5ODQxNWZmODUiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI5NjVjODA3NDM4Y2U5MGIyMDRlOTMwZmY4MGM5MmViYTE2MDZhMmY2ZmQ1Y2NmZDA5MzM1Yzk5ODk2ZGQzNDc5IgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24gLS1kaXNhYmxlLXZhbGEiCisKKyMgVGhlIG9sZGVyIGxkICgyLjIyKSBvbiB0aGUgaG9zdCAoQ2VudG9zIDYuNSkgZG9lc24ndCBoYXZlIHRoZQorIyAtQnN5bWJvbGljLWZ1bmN0aW9ucyBvcHRpb24sIHdlIGNhbiBkaXNhYmxlIGl0IGZvciBuYXRpdmUuCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgLS1lbmFibGUtQnN5bWJvbGljPWF1dG8iCisKK1BBQ0tBR0VDT05GSUcgPz89ICJnZGtwaXhidWYiCisjIFRoZSBnZGstcGl4YnVmIGxvYWRlcgorUEFDS0FHRUNPTkZJR1tnZGtwaXhidWZdID0gIi0tZW5hYmxlLXBpeGJ1Zi1sb2FkZXIsLS1kaXNhYmxlLXBpeGJ1Zi1sb2FkZXIsZ2RrLXBpeGJ1Zi1uYXRpdmUiCisjIEdUSysgdGVzdCBhcHBsaWNhdGlvbiAocnN2Zy12aWV3KQorUEFDS0FHRUNPTkZJR1tndGtdID0gIi0td2l0aC1ndGszLC0td2l0aG91dC1ndGszLGd0ayszIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIExvYWRhYmxlIG1vZHVsZXMgZG9uJ3QgbmVlZCAuYSBvciAubGEgb24gTGludXgKKwlybSAtZiAke0R9JHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLyovbG9hZGVycy8qLmEgJHtEfSR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8qL2xvYWRlcnMvKi5sYQorfQorCitQQUNLQUdFUyA9KyAibGlicnN2Zy1ndGsgcnN2ZyIKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS8qLnNvLioiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8qL2xvYWRlcnMvLmRlYnVnIgorRklMRVNfcnN2ZyA9ICIke2JpbmRpcn0vcnN2ZyogXAorCSAgICAgICR7ZGF0YWRpcn0vcGl4bWFwcy9zdmctdmlld2VyLnN2ZyBcCisJICAgICAgJHtkYXRhZGlyfS90aGVtZXMiCitGSUxFU19saWJyc3ZnLWd0ayA9ICIke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvKi8qLyouc28iCisKK1BJWEJVRl9QQUNLQUdFUyA9ICJsaWJyc3ZnLWd0ayIKKworUElYQlVGQ0FDSEVfU1lTUk9PVF9ERVBTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGhhcmZidXp6LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIHBhbmdvLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIGljdS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYnNlY3JldC9saWJzZWNyZXRfMC4xOC4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlic2VjcmV0L2xpYnNlY3JldF8wLjE4LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ViYzgzYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYnNlY3JldC9saWJzZWNyZXRfMC4xOC4yLmJiCkBAIC0wLDAgKzEsMTIgQEAKK1NVTU1BUlkgPSAibGlic2VjcmV0IGlzIGEgbGlicmFyeSBmb3Igc3RvcmluZyBhbmQgcmV0cmlldmluZyBwYXNzd29yZHMgYW5kIG90aGVyIHNlY3JldHMiCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MjNjMmE1ZTAxMDZiOTlkNzUyMzg5ODY1NTliYjVmYzYiCisKK2luaGVyaXQgZ25vbWViYXNlIGd0ay1kb2MKKworREVQRU5EUyA9ICJnbGliLTIuMCBsaWJnY3J5cHQiCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLW1hbnBhZ2VzIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIyM2NkZjgyNjdkMTFhMjZmODhmMGRiZWMxZTIwMjJhZCIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjEyZmQyODhiMDEyZTFiMmIxYjU0ZDU4NmNkNGM2NTA3ODg1NzE1NTM0NjQ0YjQ1MzRiN2VmN2Q3MDc5YmE0NDMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJ3bmNrL2xpYnduY2szXzMuMTQuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYnduY2svbGlid25jazNfMy4xNC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZjUxNzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJ3bmNrL2xpYnduY2szXzMuMTQuMC5iYgpAQCAtMCwwICsxLDE1IEBACitTVU1NQVJZID0gIldpbmRvdyBuYXZpZ2F0aW9uIGNvbnN0cnVjdGlvbiB0b29sa2l0IgorTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiIKKworQlBOID0gImxpYnduY2siCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCitERVBFTkRTID0gImdvYmplY3QtaW50cm9zcGVjdGlvbi1zdHViIGd0ayszIGdkay1waXhidWYtbmF0aXZlIGxpYnhyZXMiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJzdGFydHVwLW5vdGlmaWNhdGlvbiIKK1BBQ0tBR0VDT05GSUdbc3RhcnR1cC1ub3RpZmljYXRpb25dID0gIi0tZW5hYmxlLXN0YXJ0dXAtbm90aWZpY2F0aW9uLC0tZGlzYWJsZS1zdGFydHVwLW5vdGlmaWNhdGlvbixzdGFydHVwLW5vdGlmaWNhdGlvbiIKKworaW5oZXJpdCBnbm9tZWJhc2UKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjQ1Mzg2NzJlMGQ3NzVmYWRlZGYxMGFiZWI4MDIwMDQ3IgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiZjUwODAwNzYzNDY2MDliNGMzNjM5NGI4NzlmM2E4NmI5MmNlZDNiOTBhMzdjYjU0YzhlOWExNGYwMGU3OTIxYyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvYnVpbGRlcl8wLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9idWlsZGVyL2J1aWxkZXJfMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNzI5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9idWlsZGVyL2J1aWxkZXJfMC4xLmJiCkBAIC0wLDAgKzEsMzMgQEAKK1NVTU1BUlkgPSAiTmV3IHVzZXIgdG8gZG8gc3BlY2lmaWMgam9iIgorREVTQ1JJUFRJT04gPSAiVGhpcyByZWNpcGUgY3JlYXRlIGEgbmV3IHVzZXIgbmFtZWQgJHtQTn0sIHdobyBpcyB1c2VkIGZvciBzcGVjaWZpYyBqb2JzIGxpa2UgYnVpbGRpbmcuIFRoZSB0YXNrIGNhbiBiZSBhdXRvIHN0YXJ0ZWQgdmlhIG1pbmkgWCIKK1NFQ1RJT04gPSAieDExIgorUFIgPSAicjYiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2J1aWxkZXJfaG9iX3N0YXJ0LnNoO2VuZGxpbmU9NTttZDU9ODQ3OTZjM2M0MTc4NWQ4NjEwMGZkYWJjYmRhZGUwMGUiCisKK1NSQ19VUkkgPSAiZmlsZTovL2J1aWxkZXJfaG9iX3N0YXJ0LnNoIFwKKyAgICAgICAgICAgZmlsZTovL3BsZWFzZV93YWl0X2RpYWxvZy5weSBcCisgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0iCisKK1JERVBFTkRTXyR7UE59ID0gIm1pbmkteC1zZXNzaW9uIgorCitpbmhlcml0IHVzZXJhZGQKKworIyBidWlsZGVyIHVzZXIgcGFzc3dvcmQgaXMgImJ1aWxkZXIiCitCVUlMREVSX1BBU1NXT1JEID89ICIuZ0xpYmlOWG4wUDEyIgorVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK1VTRVJBRERfUEFSQU1fJHtQTn0gPSAiLS1zeXN0ZW0gLS1jcmVhdGUtaG9tZSBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tZ3JvdXBzIHZpZGVvLHR0eSxhdWRpbyBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tcGFzc3dvcmQgJHtCVUlMREVSX1BBU1NXT1JEfSBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tdXNlci1ncm91cCBidWlsZGVyIgorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kIC1tIDc1NSAke0R9JHtzeXNjb25mZGlyfS9taW5pX3gvc2Vzc2lvbi5kCisJaW5zdGFsbCAtcCAtbSA3NTUgYnVpbGRlcl9ob2Jfc3RhcnQuc2ggJHtEfSR7c3lzY29uZmRpcn0vbWluaV94L3Nlc3Npb24uZC8KKworCWNob3duICBidWlsZGVyLmJ1aWxkZXIgJHtEfSR7c3lzY29uZmRpcn0vbWluaV94L3Nlc3Npb24uZC9idWlsZGVyX2hvYl9zdGFydC5zaAorICAgICAgICBpbnN0YWxsIC1wIC1tIDc1NSBwbGVhc2Vfd2FpdF9kaWFsb2cucHkgJHtEfSR7c3lzY29uZmRpcn0vbWluaV94Cit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvZmlsZXMvYnVpbGRlcl9ob2Jfc3RhcnQuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9idWlsZGVyL2ZpbGVzL2J1aWxkZXJfaG9iX3N0YXJ0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzOTRiMDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9idWlsZGVyL2ZpbGVzL2J1aWxkZXJfaG9iX3N0YXJ0LnNoCkBAIC0wLDAgKzEsMzcgQEAKKyMhL2Jpbi9zaAorI1RoaXMgc2NyaXB0IHdpbGwgYmUgY2FsbGVkIHZpYSBtaW5pIFggc2Vzc2lvbiBvbiBiZWhhbGYgb2YgZmlsZSBvd25lciwgYWZ0ZXIKKyNpbnN0YWxsZWQgaW4gL2V0Yy9taW5pX3gvc2Vzc2lvbi5kLy4gQW55IGF1dG8gc3RhcnQgam9icyBpbmNsdWRpbmcgWCBhcHBzIGNhbgorI2JlIHB1dCBoZXJlCisKKyMgc3RhcnQgaG9iIGhlcmUKK2V4cG9ydCBQU0VVRE9fUFJFRklYPS91c3IKK2V4cG9ydCBQU0VVRE9fTE9DQUxTVEFURURJUj0vaG9tZS9idWlsZGVyL3BzZXVkbworZXhwb3J0IFBTRVVET19MSUJESVI9L3Vzci9saWIvcHNldWRvL2xpYjY0CitleHBvcnQgR0lUX1BST1hZX0NPTU1BTkQ9L2hvbWUvYnVpbGRlci9wb2t5L3NjcmlwdHMvb2UtZ2l0LXByb3h5CisKKyNzdGFydCBwY21hbmZtIGluIGRhZW1vbiBtb2RlIHRvIGFsbG93IGFzeW5jaHJvbm91cyBsYXVuY2gKK3BjbWFuZm0gLWQmCisKKyNyZWdpc3RlciBoYW5kbGVycyBmb3Igc29tZSBmaWxlIHR5cGVzCitpZiBbICEgLWQgL2hvbWUvYnVpbGRlci8ubG9jYWwvc2hhcmUvYXBwbGljYXRpb25zIF07IHRoZW4KKyAgICBta2RpciAtcCAvaG9tZS9idWlsZGVyLy5sb2NhbC9zaGFyZS9hcHBsaWNhdGlvbnMvCisgICAgI3JlZ2lzdGVyIGZvbGRlcnMgdG8gb3BlbiB3aXRoIFBDTWFuRk0gZmlsZW1hbmFnZXIKKyAgICB4ZGctbWltZSBkZWZhdWx0IHBjbWFuZm0uZGVza3RvcCBpbm9kZS9kaXJlY3RvcnkKKworICAgICNyZWdpc3RlciBodG1sIGxpbmtzIGFuZCBmaWxlcyB3aXRoIGVwaXBoYW55CisgICAgeGRnLW1pbWUgZGVmYXVsdCBlcGlwaGFueS5kZXNrdG9wIHgtc2NoZW1lLWhhbmRsZXIvaHR0cAorICAgIHhkZy1taW1lIGRlZmF1bHQgZXBpcGhhbnkuZGVza3RvcCB4LXNjaGVtZS1oYW5kbGVyL2h0dHBzCisgICAgeGRnLW1pbWUgZGVmYXVsdCBlcGlwaGFueS5kZXNrdG9wIHRleHQvaHRtbAorCisgICAgI3JlZ2lzdGVyIHRleHQgZmlsZXMgd2l0aCBsZWFmcGFkIHRleHQgZWRpdG9yCisgICAgeGRnLW1pbWUgZGVmYXVsdCBsZWFmcGFkLmRlc2t0b3AgdGV4dC9wbGFpbgorZmkKKworY2QgL2hvbWUvYnVpbGRlci9wb2t5CisuIC4vb2UtaW5pdC1idWlsZC1lbnYKKworaG9iICYKKworbWF0Y2hib3gtdGVybWluYWwmCisKKy9ldGMvbWluaV94L3BsZWFzZV93YWl0X2RpYWxvZy5weSAmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9idWlsZGVyL2ZpbGVzL3BsZWFzZV93YWl0X2RpYWxvZy5weSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvZmlsZXMvcGxlYXNlX3dhaXRfZGlhbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMjM4MWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9idWlsZGVyL2ZpbGVzL3BsZWFzZV93YWl0X2RpYWxvZy5weQpAQCAtMCwwICsxLDI4IEBACisjIS91c3IvYmluL2VudiBweXRob24KK2ltcG9ydCBnbGliCitpbXBvcnQgZ3RrCisgCitkZWYgZGVzdHJveV93aW5kb3dfY2Iod2lkZ2V0LCBldmVudCk6CisgICAgZ3RrLm1haW5fcXVpdCgpCisgCitkZWYgYWxsX2RvbmVfY2IoKToKKyAgICBndGsubWFpbl9xdWl0KCkKKyAKK2RlZiBkaWFsb2d1ZV91aSgpOgorICAgIHdpbmRvdyA9IGd0ay5XaW5kb3coKQorICAgIHdpbmRvdy5zZXRfdGl0bGUoIlBsZWFzZSB3YWl0Li4uIikKKyAgICB3aW5kb3cuY29ubmVjdCgiZGVsZXRlLWV2ZW50IiwgZGVzdHJveV93aW5kb3dfY2IpCisgICAgd2luZG93LnNob3coKQorICAgIHdpbmRvdy5zZXRfYm9yZGVyX3dpZHRoKDEyKQorIAorICAgIG1zZyA9ICJQbGVhc2Ugd2FpdCB3aGlsZSBCaXRCYWtlIGluaXRpYWxpemVzIEhvYiIKKyAgICBsYWJlbCA9IGd0ay5MYWJlbChtc2cpCisgICAgbGFiZWwuc2hvdygpCisgICAgd2luZG93LmFkZChsYWJlbCkKKyAKKyAgICBnbGliLnRpbWVvdXRfYWRkX3NlY29uZHMoMTAsIGFsbF9kb25lX2NiKQorIAoraWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBkaWFsb2d1ZV91aSgpCisgICAgZ3RrLm1haW4oKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyby1mcHUuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8tZnB1LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjcyZTg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8tZnB1LmluYwpAQCAtMCwwICsxLDYgQEAKKworZGVmIGdldF9jYWlyb19mcHVfc2V0dGluZyhiYiwgZCk6CisgICAgaWYgZC5nZXRWYXIoJ1RBUkdFVF9GUFUnLCBUcnVlKSBpbiBbICdzb2Z0JyBdOgorICAgICAgICByZXR1cm4gIi0tZGlzYWJsZS1zb21lLWZsb2F0aW5nLXBvaW50IgorICAgIHJldHVybiAiIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyby5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyby5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU0NTMxOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvLmluYwpAQCAtMCwwICsxLDQ1IEBACitTVU1NQVJZID0gIlRoZSBDYWlybyAyRCB2ZWN0b3IgZ3JhcGhpY3MgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIkNhaXJvIGlzIGEgbXVsdGktcGxhdGZvcm0gbGlicmFyeSBwcm92aWRpbmcgYW50aS1hbGlhc2VkIFwKK3ZlY3Rvci1iYXNlZCByZW5kZXJpbmcgZm9yIG11bHRpcGxlIHRhcmdldCBiYWNrZW5kcy4gUGF0aHMgY29uc2lzdCBcCitvZiBsaW5lIHNlZ21lbnRzIGFuZCBjdWJpYyBzcGxpbmVzIGFuZCBjYW4gYmUgcmVuZGVyZWQgYXQgYW55IHdpZHRoIFwKK3dpdGggdmFyaW91cyBqb2luIGFuZCBjYXAgc3R5bGVzLiBBbGwgY29sb3JzIG1heSBiZSBzcGVjaWZpZWQgd2l0aCBcCitvcHRpb25hbCB0cmFuc2x1Y2VuY2UgKG9wYWNpdHkvYWxwaGEpIGFuZCBjb21iaW5lZCB1c2luZyB0aGUgXAorZXh0ZW5kZWQgUG9ydGVyL0R1ZmYgY29tcG9zaXRpbmcgYWxnZWJyYSBhcyBmb3VuZCBpbiB0aGUgWCBSZW5kZXIgXAorRXh0ZW5zaW9uLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9jYWlyb2dyYXBoaWNzLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJNUEwtMSAmIExHUEx2Mi4xICYgR1BMdjMrIgorTElDRU5TRV8ke1BOfSA9ICJNUEwtMSAmIExHUEx2Mi4xIgorTElDRU5TRV8ke1BOfS1kZXYgPSAiTVBMLTEgJiBMR1BMdjIuMSIKK0xJQ0VOU0VfJHtQTn0tZ29iamVjdCA9ICJNUEwtMSAmIExHUEx2Mi4xIgorTElDRU5TRV8ke1BOfS1wZXJmLXV0aWxzID0gIkdQTHYzKyIKK1gxMURFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlic20gbGlieHJlbmRlciBsaWJ4ZXh0IgorREVQRU5EUyA9ICJsaWJwbmcgZm9udGNvbmZpZyBwaXhtYW4gZ2xpYi0yLjAgemxpYiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMSB4Y2InLCAnJywgZCl9IFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdkaXJlY3RmYicsICdkaXJlY3RmYicsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLXdpdGgteD15ZXMgLWVuYWJsZS14bGliLC0td2l0aC14PW5vIC0tZGlzYWJsZS14bGliLCR7WDExREVQRU5EU30iCitQQUNLQUdFQ09ORklHW3hjYl0gPSAiLS1lbmFibGUteGNiLC0tZGlzYWJsZS14Y2IsbGlieGNiIgorUEFDS0FHRUNPTkZJR1tkaXJlY3RmYl0gPSAiLS1lbmFibGUtZGlyZWN0ZmI9eWVzLCxkaXJlY3RmYiIKK1BBQ0tBR0VDT05GSUdbdmFsZ3JpbmRdID0gIi0tZW5hYmxlLXZhbGdyaW5kPXllcywtLWRpc2FibGUtdmFsZ3JpbmQsdmFsZ3JpbmQiCitQQUNLQUdFQ09ORklHW2VnbF0gPSAiLS1lbmFibGUtZWdsPXllcywtLWRpc2FibGUtZWdsLHZpcnR1YWwvZWdsIgorUEFDS0FHRUNPTkZJR1tnbGVzdjJdID0gIi0tZW5hYmxlLWdsZXN2MiwtLWRpc2FibGUtZ2xlc3YyLHZpcnR1YWwvbGliZ2xlczIiCisKKyNjaGVjayBmb3IgVEFSR0VUX0ZQVT1zb2Z0IGFuZCBpbmZvcm0gY29uZmlndXJlIG9mIHRoZSByZXN1bHQgc28gaXQgY2FuIGRpc2FibGUgc29tZSBmbG9hdGluZyBwb2ludHMgCityZXF1aXJlIGNhaXJvLWZwdS5pbmMKK0VYVFJBX09FQ09ORiArPSAiJHtAZ2V0X2NhaXJvX2ZwdV9zZXR0aW5nKGJiLCBkKX0gXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS10ZWUgXAorICAgICAgICAgICAgICAgICIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKKyMgV2UgZG9uJ3QgZGVwZW5kIG9uIGJpbnV0aWxzIHNvIHdlIG5lZWQgdG8gZGlzYWJsZSB0aGlzCitleHBvcnQgYWNfY3ZfbGliX2JmZF9iZmRfb3BlbnI9Im5vIgorIyBFbnN1cmUgd2UgZG9uJ3QgZGVwZW5kIG9uIExaTworZXhwb3J0IGFjX2N2X2xpYl9sem8yX2x6bzJhX2RlY29tcHJlc3M9Im5vIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworQ0ZMQUdTICs9ICItZmZhdC1sdG8tb2JqZWN0cyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvXzEuMTQuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvXzEuMTQuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODE3ZGJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2Fpcm8vY2Fpcm9fMS4xNC4yLmJiCkBAIC0wLDAgKzEsNDMgQEAKK3JlcXVpcmUgY2Fpcm8uaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWU3M2U5OTllMGM3MmI1YWM5MDEyNDI0ZmExNTdhZDc3IgorCitTUkNfVVJJID0gImh0dHA6Ly9jYWlyb2dyYXBoaWNzLm9yZy9yZWxlYXNlcy9jYWlyby0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlMWNkZmFmMWM2Yzk5NWM0ZDRjNTRlMDcyMTViMDExOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjOTE5ZDk5OWRkYjFiYmJlY2Q0YmJlNjUyOTljYTJhYmQyMDc5YzdlMTNkMjI0NTc3ODk1YWZhNzAwNWVjY2ViIgorCitQQUNLQUdFUyA9KyAiY2Fpcm8tZ29iamVjdCBjYWlyby1zY3JpcHQtaW50ZXJwcmV0ZXIgY2Fpcm8tcGVyZi11dGlscyIKKworU1VNTUFSWV8ke1BOfSA9ICJUaGUgQ2Fpcm8gMkQgdmVjdG9yIGdyYXBoaWNzIGxpYnJhcnkiCitERVNDUklQVElPTl8ke1BOfSA9ICJDYWlybyBpcyBhIG11bHRpLXBsYXRmb3JtIGxpYnJhcnkgcHJvdmlkaW5nIGFudGktYWxpYXNlZCBcCit2ZWN0b3ItYmFzZWQgcmVuZGVyaW5nIGZvciBtdWx0aXBsZSB0YXJnZXQgYmFja2VuZHMuIFBhdGhzIGNvbnNpc3QgXAorb2YgbGluZSBzZWdtZW50cyBhbmQgY3ViaWMgc3BsaW5lcyBhbmQgY2FuIGJlIHJlbmRlcmVkIGF0IGFueSB3aWR0aCBcCit3aXRoIHZhcmlvdXMgam9pbiBhbmQgY2FwIHN0eWxlcy4gQWxsIGNvbG9ycyBtYXkgYmUgc3BlY2lmaWVkIHdpdGggXAorb3B0aW9uYWwgdHJhbnNsdWNlbmNlIChvcGFjaXR5L2FscGhhKSBhbmQgY29tYmluZWQgdXNpbmcgdGhlIFwKK2V4dGVuZGVkIFBvcnRlci9EdWZmIGNvbXBvc2l0aW5nIGFsZ2VicmEgYXMgZm91bmQgaW4gdGhlIFggUmVuZGVyIFwKK0V4dGVuc2lvbi4iCisKK1NVTU1BUllfY2Fpcm8tZ29iamVjdCA9ICJUaGUgQ2Fpcm8gbGlicmFyeSBHT2JqZWN0IHdyYXBwZXIgbGlicmFyeSIKK0RFU0NSSVBUSU9OX2NhaXJvLWdvYmplY3QgPSAiQSBHT2JqZWN0IHdyYXBwZXIgbGlicmFyeSBmb3IgdGhlIENhaXJvIEFQSS4iCisKK1NVTU1BUllfY2Fpcm8tc2NyaXB0LWludGVycHJldGVyID0gIlRoZSBDYWlybyBsaWJyYXJ5IHNjcmlwdCBpbnRlcnByZXRlciIKK0RFU0NSSVBUSU9OX2NhaXJvLXNjcmlwdC1pbnRlcnByZXRlciA9ICJUaGUgQ2Fpcm8gc2NyaXB0IGludGVycHJldGVyIGltcGxlbWVudHMgXAorQ2Fpcm9TY3JpcHQuICBDYWlyb1NjcmlwdCBpcyB1c2VkIGJ5IHRyYWNpbmcgdXRpbGl0aWVzIHRvIGVuYWJsZSB0aGUgYWJpbGl0eSBcCit0byByZXBsYXkgcmVuZGVyaW5nLiIKKworREVTQ1JJUFRJT05fY2Fpcm8tcGVyZi11dGlscyA9ICJUaGUgQ2Fpcm8gbGlicmFyeSBwZXJmb3JtYW5jZSB1dGlsaXRpZXMiCisKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9saWJjYWlyby5zby4qIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vY2Fpcm8vKi5zbyIKK0ZJTEVTXyR7UE59LWdvYmplY3QgPSAiJHtsaWJkaXJ9L2xpYmNhaXJvLWdvYmplY3Quc28uKiIKK0ZJTEVTXyR7UE59LXNjcmlwdC1pbnRlcnByZXRlciA9ICIke2xpYmRpcn0vbGliY2Fpcm8tc2NyaXB0LWludGVycHJldGVyLnNvLioiCitGSUxFU18ke1BOfS1wZXJmLXV0aWxzID0gIiR7YmluZGlyfS9jYWlyby10cmFjZSAke2xpYmRpcn0vY2Fpcm8vKi5sYSAke2xpYmRpcn0vY2Fpcm8vbGliY2Fpcm8tdHJhY2Uuc28uKiIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCXJtIC1yZiAke0R9JHtiaW5kaXJ9L2NhaXJvLXNwaGlueAorCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2NhaXJvL2NhaXJvLWZkcioKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9jYWlyby9jYWlyby1zcGhpbngqCisJcm0gLXJmICR7RH0ke2xpYmRpcn0vY2Fpcm8vLmRlYnVnL2NhaXJvLWZkcioKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9jYWlyby8uZGVidWcvY2Fpcm8tc3BoaW54KgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTIxY2VlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC5pbmMKQEAgLTAsMCArMSw0OCBAQAorU1VNTUFSWSA9ICJHcmFwaGljcyBsaWJyYXJ5IGZvciBjcmVhdGluZyBoYXJkd2FyZS1hY2NlbGVyYXRlZCB1c2VyIGludGVyZmFjZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmNsdXR0ZXItcHJvamVjdC5vcmcvIgorTElDRU5TRSA9ICJMR1BMdjIuMSsiCisKK2luaGVyaXQgY2x1dHRlciBwdGVzdC1nbm9tZQorCitERVBFTkRTID0gInBhbmdvIGdsaWItMi4wIGpzb24tZ2xpYiBhdGsgdWRldiBjb2dsLTEuMCIKK1BBQ0tBR0VfQkVGT1JFX1BOICs9ICIke1BOfS1leGFtcGxlcyIKK0FVVE9UT09MU19BVVhESVIgPSAiJHtTfS9idWlsZCIKKworRURFUEVORFNfWDExID0gInZpcnR1YWwvbGlieDExIGxpYnhpIGxpYnhmaXhlcyIKK0VERVBFTkRTX0dMWCA9ICJ2aXJ0dWFsL2xpYmdsIgorRURFUEVORFNfRUdMID0gInZpcnR1YWwvZWdsIgorRURFUEVORFNfV0FZTEFORCA9ICJ3YXlsYW5kIGxpYnhrYmNvbW1vbiBnZGstcGl4YnVmIgorCitFREVQRU5EU19FVkRFViA9ICJsaWJ4a2Jjb21tb24iCitFUkRFUEVORFNfRVZERVYgPSAieGtleWJvYXJkLWNvbmZpZyIKKworIyBEaXNhYmxlIHByZXR0eSBtdWNoIGV2ZXJ5dGhpbmcsIG92ZXJyaWRlIGluIHBsYXRmb3JtIHNwZWNpZmljIHNldCB1cAorRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbglcCisJICAgICAJIC0tZGlzYWJsZS1xdWFydHotYmFja2VuZAlcCisJICAgICAJIC0tZGlzYWJsZS13aW4zMi1iYWNrZW5kCVwKKwkgICAgIAkgLS1kaXNhYmxlLWdkay1iYWNrZW5kCQlcCisJICAgICAJIC0tZGlzYWJsZS1jZXgxMDAtYmFja2VuZAlcCisJICAgICAJIC0tZGlzYWJsZS10c2xpYi1pbnB1dAkJXAorCSAgICAJIgorCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUteDExLWJhY2tlbmQsLS1kaXNhYmxlLXgxMS1iYWNrZW5kLCR7RURFUEVORFNfWDExfSIKK1BBQ0tBR0VDT05GSUdbZ2x4XSA9ICIsLCR7RURFUEVORFNfWDExfSAke0VERVBFTkRTX0dMWH0iCitQQUNLQUdFQ09ORklHW2VnbF0gPSAiLS1lbmFibGUtZWdsLWJhY2tlbmQsLS1kaXNhYmxlLWVnbC1iYWNrZW5kLCR7RURFUEVORFNfRUdMfSIKK1BBQ0tBR0VDT05GSUdbZXZkZXZdID0gIi0tZW5hYmxlLWV2ZGV2LWlucHV0LC0tZGlzYWJsZS1ldmRldi1pbnB1dCwke0VERVBFTkRTX0VWREVWfSwke0VSREVQRU5EU19FVkRFVn0iCitQQUNLQUdFQ09ORklHW3dheWxhbmRdID0gIi0tZW5hYmxlLXdheWxhbmQtYmFja2VuZCwtLWRpc2FibGUtd2F5bGFuZC1iYWNrZW5kLCR7RURFUEVORFNfV0FZTEFORH0iCitQQUNLQUdFQ09ORklHW3dheWxhbmQtY29tcG9zaXRvcl0gPSAiLS1lbmFibGUtd2F5bGFuZC1jb21wb3NpdG9yLC0tZGlzYWJsZS13YXlsYW5kLWNvbXBvc2l0b3Isd2F5bGFuZCIKKworIyBEZWZhdWx0IGNvbmZpZ3VyYXRpb24sIGRpc3Ryb3MgbWlnaHQgd2FudCB0byBvdmVycmlkZQorUEFDS0FHRUNPTkZJRyA/Pz0gImVnbCBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3YXlsYW5kJywgJ3dheWxhbmQnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICdnbHggeDExJywgJycsIGQpfSIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vY2x1dHRlci9leGFtcGxlcy8uZGVidWciCitGSUxFU18ke1BOfS1leGFtcGxlcyA9ICIke2xpYmRpcn0vY2x1dHRlci9leGFtcGxlcyIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmV4ZWNkaXJ9L2luc3RhbGxlZC10ZXN0cy8uZGVidWciCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCSMgc2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjExMjggZm9yIHRoaXMKKwl0b3VjaCAtdCAyMDAwMDEwMTAwMDAgJHtTfS9wby9jbHV0dGVyLTEuMC5wb3QKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjAvaW5zdGFsbC1leGFtcGxlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjAvaW5zdGFsbC1leGFtcGxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjZhNzBlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC9pbnN0YWxsLWV4YW1wbGVzLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK0luc3RhbGwgdGhlIGV4YW1wbGVzIHRvICRsaWJkaXIvY2x1dHRlci8uCisKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworZGlmZiAtLWdpdCBhL2V4YW1wbGVzL01ha2VmaWxlLmFtIGIvZXhhbXBsZXMvTWFrZWZpbGUuYW0KK2luZGV4IDRiOWI0NDkuLjIzMmNkMTkgMTAwNjQ0CistLS0gYS9leGFtcGxlcy9NYWtlZmlsZS5hbQorKysrIGIvZXhhbXBsZXMvTWFrZWZpbGUuYW0KK0BAIC0zOCw2ICszOCw3IEBAIEFNX0NQUEZMQUdTID0gXAorIAktSSQodG9wX3NyY2RpcikvY2x1dHRlciBcCisgCS1JJCh0b3BfYnVpbGRkaXIpL2NsdXR0ZXIKKyAKKy1ub2luc3RfUFJPR1JBTVMgPSAkKGFsbF9leGFtcGxlcykKKytleGFtcGxlZGlyID0gJChwa2dsaWJkaXIpL2V4YW1wbGVzCisrZXhhbXBsZV9QUk9HUkFNUyA9ICQoYWxsX2V4YW1wbGVzKQorIAorIEVYVFJBX0RJU1QgPSByZWRoYW5kLnBuZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC9ydW4taW5zdGFsbGVkLXRlc3RzLXdpdGgtdGFwLW91dHB1dC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjAvcnVuLWluc3RhbGxlZC10ZXN0cy13aXRoLXRhcC1vdXRwdXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVjMThjNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjAvcnVuLWluc3RhbGxlZC10ZXN0cy13aXRoLXRhcC1vdXRwdXQucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSA2NjhlMWQxNGFmMTMyNDkzODRhYjMyNGM3ZDc5ZWM0MTQ3ZjA3ZTQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IE1vbiwgMjcgQXByIDIwMTUgMjA6MTI6MzMgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gUnVuIGluc3RhbGxlZCB0ZXN0cyB3aXRoIHRhcCBvdXRwdXQKKworQ29uZmlndXJlIG91dHB1dCBmcm9tIGluc3RhbGxlZC10ZXN0cyB0byBiZSBUQVAgY29tcGxpYW50IHN1Y2ggdGhhdAorZ25vbWUtZGVza3RvcC10ZXN0aW5nLXJ1bm5lciBwcm9wZXJseSBpbnRlcnByZXRzIHRoZSByZXN1bHRzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogVGltIE9ybGluZyA8VGljb1RpbW9AZ21haWwuY29tPgorLS0tCisgYnVpbGQvYXV0b3Rvb2xzL2dsaWItdGFwLm1rIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9idWlsZC9hdXRvdG9vbHMvZ2xpYi10YXAubWsgYi9idWlsZC9hdXRvdG9vbHMvZ2xpYi10YXAubWsKK2luZGV4IDdjNWY4MmIuLjg0NGUxN2UgMTAwNjQ0CistLS0gYS9idWlsZC9hdXRvdG9vbHMvZ2xpYi10YXAubWsKKysrKyBiL2J1aWxkL2F1dG90b29scy9nbGliLXRhcC5taworQEAgLTEyNyw3ICsxMjcsOCBAQCBpbnN0YWxsZWRfdGVzdF9tZXRhX0RBVEEgPSAkKGluc3RhbGxlZF90ZXN0Y2FzZXM6PS50ZXN0KQorICUudGVzdDogJSQoRVhFRVhUKSBNYWtlZmlsZQorIAkkKEFNX1ZfR0VOKSAoZWNobyAnW1Rlc3RdJyA+ICRALnRtcDsgXAorIAllY2hvICdUeXBlPXNlc3Npb24nID4+ICRALnRtcDsgXAorLQllY2hvICdFeGVjPWVudiBHX0VOQUJMRV9ESUFHTk9TVElDPTAgQ0xVVFRFUl9FTkFCTEVfRElBR05PU1RJQz0wICQoaW5zdGFsbGVkX3Rlc3RkaXIpLyQ8JyA+PiAkQC50bXA7IFwKKysJZWNobyAnRXhlYz1lbnYgR19FTkFCTEVfRElBR05PU1RJQz0wIENMVVRURVJfRU5BQkxFX0RJQUdOT1NUSUM9MCAkKGluc3RhbGxlZF90ZXN0ZGlyKS8kPCAtLXRhcCcgPj4gJEAudG1wOyBcCisrCWVjaG8gJ091dHB1dD1UQVAnID4+ICRALnRtcDsgXAorIAltdiAkQC50bXAgJEApCisgCisgQ0xFQU5GSUxFUyArPSAkKGluc3RhbGxlZF90ZXN0X21ldGFfREFUQSkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODg3N2U1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC9ydW4tcHRlc3QKQEAgLTAsMCArMSwzIEBACisjISAvYmluL3NoCisKK2dub21lLWRlc2t0b3AtdGVzdGluZy1ydW5uZXIgY2x1dHRlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMF8xLjIyLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wXzEuMjIuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MThjZGZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMF8xLjIyLjQuYmIKQEAgLTAsMCArMSwxMCBAQAorcmVxdWlyZSBjbHV0dGVyLTEuMC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjI2NDk0MjU2Yzk4MGQ0OTcwM2E1NTM5MTZlMzA4M2NkIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiMWQ3N2NlMTYwMjVmODc2NjdhMWQwMGRjNGZhNjE3YTE5MzUxNTZmNjNmZDE3NjM1ZmRhZGYxMzg4NjZjOWUxZSIKKworU1JDX1VSSSArPSAiZmlsZTovL2luc3RhbGwtZXhhbXBsZXMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3J1bi1pbnN0YWxsZWQtdGVzdHMtd2l0aC10YXAtb3V0cHV0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRmZWQ3MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wLmluYwpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIkdTdHJlYW1lciBpbnRlZ3JhdGlvbiBsaWJyYXJ5IGZvciBDbHV0dGVyIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5jbHV0dGVyLXByb2plY3Qub3JnLyIKK0xJQ0VOU0UgPSAiTEdQTHYyKyIKKworaW5oZXJpdCBjbHV0dGVyCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLUluc3RhbGwtZXhhbXBsZS1iaW5hcnktbmVlZGVkLWZvci1jb3JlLWltYWdlLWNsdXR0ZXIucGF0Y2giCisKK0RFUEVORFMgPSAiZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQgY2x1dHRlci0xLjAiCitSREVQRU5EU18ke1BOfSArPSAiZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZSIKK1BBQ0tBR0VTICA9KyAiJHtQTn0tZXhhbXBsZXMiCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iCisKK0ZJTEVTXyR7UE59ICAgICAgICAgICs9ICIke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC9saWIqLnNvIgorRklMRVNfJHtQTn0tZGV2ICAgICAgKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wLyoubGEiCitGSUxFU18ke1BOfS1kYmcgICAgICArPSAiJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvLmRlYnVnL2xpYiouc28iCitGSUxFU18ke1BOfS1leGFtcGxlcyAgPSAiJHtiaW5kaXJ9L3ZpZGVvLXBsYXllciAke2JpbmRpcn0vdmlkZW8tc2luayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wLzAwMDEtSW5zdGFsbC1leGFtcGxlLWJpbmFyeS1uZWVkZWQtZm9yLWNvcmUtaW1hZ2UtY2x1dHRlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wLzAwMDEtSW5zdGFsbC1leGFtcGxlLWJpbmFyeS1uZWVkZWQtZm9yLWNvcmUtaW1hZ2UtY2x1dHRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjI2Yjk5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjAvMDAwMS1JbnN0YWxsLWV4YW1wbGUtYmluYXJ5LW5lZWRlZC1mb3ItY29yZS1pbWFnZS1jbHV0dGVyLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gZDc3YzcxMTI3N2JmMDc1Y2UwNTQ1YzE5YjMyMmYwNDBjNDljNzc4YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogVGh1LCAzMCBBcHIgMjAxNSAxMjoxOToxMyArMDMwMAorU3ViamVjdDogW1BBVENIXSBJbnN0YWxsIGV4YW1wbGUgYmluYXJ5IG5lZWRlZCBmb3IgY29yZS1pbWFnZS1jbHV0dGVyCisKK1NpZ25lZC1vZmYtYnk6IFpoYWkgRWR3aW4gPGVkd2luLnpoYWlAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0ltcG9ydGVkIGZyb20gY2x1dHRlci1nc3QtMS44IHBhY2thZ2UsIGdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZCwKK2NvbW1pdCBhZTI4ZWUzZjdhMDYwYjllMGQxMzE1NGE4NGYyNDQ0YTk4NDkwYjViLCB1cGRhdGVkIGZvciBjbHV0dGVyLWdzdCAzLjAKKworU2lnbmVkLW9mZi1ieTogVG9tYXMgRnJ5ZHJ5Y2ggPHRvbWFzQHNsZWVwZml2ZS5jb20+CitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KKy0tLQorIGV4YW1wbGVzL01ha2VmaWxlLmFtIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvTWFrZWZpbGUuYW0gYi9leGFtcGxlcy9NYWtlZmlsZS5hbQoraW5kZXggYmZiYzFiNS4uMDk2NTVlMyAxMDA2NDQKKy0tLSBhL2V4YW1wbGVzL01ha2VmaWxlLmFtCisrKysgYi9leGFtcGxlcy9NYWtlZmlsZS5hbQorQEAgLTEsNiArMSw2IEBACisgTlVMTCA9ICMKKyAKKy1ub2luc3RfUFJPR1JBTVMgPSBjYW1lcmEtcGxheWVyIHZpZGVvLXBsYXllciB2aWRlby1zaW5rIHZpZGVvLXNpbmstbmF2aWdhdGlvbiB2aWRlby1jb250ZW50CisrYmluX1BST0dSQU1TID0gY2FtZXJhLXBsYXllciB2aWRlby1wbGF5ZXIgdmlkZW8tc2luayB2aWRlby1zaW5rLW5hdmlnYXRpb24gdmlkZW8tY29udGVudAorIAorIEFNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpIFwKKyAJCSQoTUFJTlRBSU5FUl9DRkxBR1MpIFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjAvZW5hYmxlLXRlc3RzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjAvZW5hYmxlLXRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYWVjMzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMC9lbmFibGUtdGVzdHMucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorSW5zdGFsbCBleGFtcGxlIGJpbmFyeSBuZWVkZWQgZm9yIGNvcmUtaW1hZ2UtY2x1dHRlcgorCitTaWduZWQtb2ZmLWJ5OiBaaGFpIEVkd2luIDxlZHdpbi56aGFpQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbXBvcnRlZCBmcm9tIGNsdXR0ZXItZ3N0LTEuOCBwYWNrYWdlLCBnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQsCitjb21taXQgYWUyOGVlM2Y3YTA2MGI5ZTBkMTMxNTRhODRmMjQ0NGE5ODQ5MGI1YiwgdXBkYXRlZCBmb3IgY2x1dHRlci1nc3QgMS42CisKK1NpZ25lZC1vZmYtYnk6IFRvbWFzIEZyeWRyeWNoIDx0b21hc0BzbGVlcGZpdmUuY29tPgorCitJbmRleDogZ2l0L2V4YW1wbGVzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvZXhhbXBsZXMvTWFrZWZpbGUuYW0JMjAxMS0wMS0zMSAxMDoxNDoyMy4wMDAwMDAwMDAgKzA4MDAKKysrKyBnaXQvZXhhbXBsZXMvTWFrZWZpbGUuYW0JMjAxMS0wMS0zMSAxMDoxNDozNC4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xLDYgKzEsNiBAQAorIE5VTEwgPSAjCisgCistbm9pbnN0X1BST0dSQU1TID0gdmlkZW8tcGxheWVyIHZpZGVvLXNpbmsgdmlkZW8tc2luay1uYXZpZ2F0aW9uCisrYmluX1BST0dSQU1TID0gdmlkZW8tcGxheWVyIHZpZGVvLXNpbmsgdmlkZW8tc2luay1uYXZpZ2F0aW9uCisgCisgSU5DTFVERVMgPSAtSSQodG9wX3NyY2RpcikgXAorIAkgICAkKE1BSU5UQUlORVJfQ0ZMQUdTKSBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMF8zLjAuOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wXzMuMC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxOWE5NTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMF8zLjAuOC5iYgpAQCAtMCwwICsxLDcgQEAKK3JlcXVpcmUgY2x1dHRlci1nc3QtMy4wLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jbHV0dGVyLWdzdC9jbHV0dGVyLWdzdC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjQ7bWQ1PTk1YmFhY2JhMTk0ZTgxNGMxMTBlYTNiZGYyNWRkYmY0IgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJmN2Q5N2Y5NmU3Y2NhODJmMzgzMTdkMTczNGQ1ZGFkYiIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjU4MmU4NWI4ODQ4MmUxNmY3ZWM3MTkzNjNlMzhmYWRmODRmYWI0ZDRiYWFhMjFlNTIyN2E0NTRiODI0ZjEzNWMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3RrLTEuMC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3RrLTEuMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU4OThiNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1ndGstMS4wLmluYwpAQCAtMCwwICsxLDEyIEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIGVtYmVkZGluZyBhIENsdXR0ZXIgY2FudmFzIGluIGEgR1RLKyBhcHBsaWNhdGlvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuY2x1dHRlci1wcm9qZWN0Lm9yZy8iCitMSUNFTlNFID0gIkxHUEx2MisiCisKK2luaGVyaXQgY2x1dHRlcgorCitERVBFTkRTID0gImNsdXR0ZXItMS4wIGd0ayszIgorUEFDS0FHRVMgID0rICIke1BOfS1leGFtcGxlcyIKK0FVVE9UT09MU19BVVhESVIgPSAiJHtTfS9idWlsZCIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWd0ay0xLjBfMS42LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3RrLTEuMF8xLjYuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzBlYTE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWd0ay0xLjBfMS42LjIuYmIKQEAgLTAsMCArMSw2IEBACityZXF1aXJlIGNsdXR0ZXItZ3RrLTEuMC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjU1N2Q4MTRjM2U3MGNjM2EyZDFjZjM4MTY5MTliMTRmIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiYmJkMDNkZmE5YTIwMTAyZDVjZGI0NDA1MTNiMGEwMzU5MzNkYTU1N2FkN2U5ZGEzMTU0NjAzNGRlMmRhZjA2OSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NvZ2wvY29nbC0xLjAuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RhMzFjOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NvZ2wvY29nbC0xLjAuaW5jCkBAIC0wLDAgKzEsNzAgQEAKK1NVTU1BUlkgPSAiTW9kZXJuIDNEIGdyYXBoaWNzIEFQSSB3aXRoIGFzc29jaWF0ZWQgdXRpbGl0eSBBUElzIgorSE9NRVBBR0UgPSAiaHR0cDovL3dpa2kuY2x1dHRlci1wcm9qZWN0Lm9yZy93aWtpL0NvZ2wiCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBjbHV0dGVyCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgZ2RrLXBpeGJ1ZiIKK1BBQ0tBR0VTID0rICIke1BOfS1leGFtcGxlcyBcCisgICAgICAgICAgICAgbGliY29nbCBsaWJjb2dsLWdsZXMyIGxpYmNvZ2wtcGFuZ28gbGliY29nbC1wYXRoIFwKKyAgICAgICAgICAgICIKK0FVVE9UT09MU19BVVhESVIgPSAiJHtTfS9idWlsZCIKKworIyBFeHRyYSBERVBFTkRTIGZvciBQQUNLQUdFQ09ORklHCitFREVQRU5EU19HTCA9ICJ2aXJ0dWFsL2xpYmdsIGxpYmRybSIKK0VERVBFTkRTX0dMRVMyID0gInZpcnR1YWwvbGliZ2xlczIiCitFREVQRU5EU19LTVMgPSAibGliZHJtIHZpcnR1YWwvZWdsIgorRURFUEVORFNfRUdMID0gInZpcnR1YWwvZWdsIgorRURFUEVORFNfWDExID0gInZpcnR1YWwvbGlieDExIGxpYnhjb21wb3NpdGUgbGlieGZpeGVzIGxpYnhpIGxpYnhyYW5kciIKK0VERVBFTkRTX1dBWUxBTkQgPSAidmlydHVhbC9tZXNhIHdheWxhbmQiCisKKyMgRXh0cmEgUkRFUEVORFMgZm9yIFBBQ0tBR0VDT05GSUcKKyMgVGhpcyBoYXMgdG8gYmUgZXhwbGljdGx5IGxpc3RlZCwgYmVjYXVzZSBjb2dsIGRsb3BlbnMgdGhlIGJhY2tlbmRzCitFUkRFUEVORFNfR0wgICAgPSAibGliZ2wiCitFUkRFUEVORFNfR0xFUzIgPSAibGliZ2xlczIiCisKKyMgR0xFU3YxIGlzIHJhcmVseSB0ZXN0ZWQsIHNvIGRpc2FibGUgaXQKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24JXAorCSAgICAgICAJIC0tZW5hYmxlLWV4YW1wbGVzLWluc3RhbGwJXAorCSAgICAgICAJIC0tZW5hYmxlLWRlYnVnCQkgCVwKKwkgICAgICAgCSAtLWRpc2FibGUtZ2xlczEJCVwKKwkgICAgICAgICAtLWRpc2FibGUtY2Fpcm8gICAgICAgICAgICAgICAgXAorCSAgICAJIgorCisjIE9wZW5HTC9HTFgKK1BBQ0tBR0VDT05GSUdbZ2x4XSA9ICItLWVuYWJsZS1nbCAtLWVuYWJsZS1nbHgsLS1kaXNhYmxlLWdsIC0tZGlzYWJsZS1nbHgsJHtFREVQRU5EU19HTH0gJHtFREVQRU5EU19YMTF9LCR7RVJERVBFTkRTX0dMfSIKKworIyBHTEVTdjIKK1BBQ0tBR0VDT05GSUdbZ2xlczJdID0gIi0tZW5hYmxlLWdsZXMyLC0tZGlzYWJsZS1nbGVzMiwke0VERVBFTkRTX0dMRVMyfSwgJHtFUkRFUEVORFNfR0xFUzJ9IgorCisjIEVHTCBiYWNrZW5kcworUEFDS0FHRUNPTkZJR1tlZ2wta21zXSA9ICItLWVuYWJsZS1rbXMtZWdsLXBsYXRmb3JtLC0tZGlzYWJsZS1rbXMtZWdsLXBsYXRmb3JtLCR7RURFUEVORFNfS01TfSIKK1BBQ0tBR0VDT05GSUdbZWdsLW51bGxdID0gIi0tZW5hYmxlLW51bGwtZWdsLXBsYXRmb3JtLC0tZGlzYWJsZS1udWxsLWVnbC1wbGF0Zm9ybSIKK1BBQ0tBR0VDT05GSUdbZWdsLXgxMV0gPSAiLS1lbmFibGUteGxpYi1lZ2wtcGxhdGZvcm0sLS1kaXNhYmxlLXhsaWItZWdsLXBsYXRmb3JtLCR7RURFUEVORFNfWDExfSAke0VERVBFTkRTX0VHTH0iCitQQUNLQUdFQ09ORklHW2VnbC13YXlsYW5kXSA9ICItLWVuYWJsZS13YXlsYW5kLWVnbC1wbGF0Zm9ybSwtLWRpc2FibGUtd2F5bGFuZC1lZ2wtcGxhdGZvcm0sJHtFREVQRU5EU19XQVlMQU5EfSIKKworIyBXYXlsYW5kIChzZXJ2ZXItc2lkZSkKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZC1zZXJ2ZXJdID0gIi0tZW5hYmxlLXdheWxhbmQtZWdsLXNlcnZlciwtLWRpc2FibGUtd2F5bGFuZC1lZ2wtc2VydmVyLCR7RURFUEVORFNfV0FZTEFORH0iCisKKyMgU3VwcG9ydCByZW5kZXJpbmcgdGV4dCBkaXJlY3RseSB3aXRoIFBhbmdvCitQQUNLQUdFQ09ORklHW2NvZ2wtcGFuZ29dID0gIi0tZW5hYmxlLWNvZ2wtcGFuZ28sLS1kaXNhYmxlLWNvZ2wtcGFuZ28scGFuZ28iCisKKyMgUmVzcGVjdCB0aGUgRElTVFJPX0ZFQVRVUkVTIHRvIHB1bGwgaW4gR0xYIG9yIFdheWxhbmQgYXMgYXBwcm9wcmlhdGUgYnkKKyMgZGVmYXVsdC4KK1BBQ0tBR0VDT05GSUcgPz89ICJjb2dsLXBhbmdvIGdsZXMyIFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dheWxhbmQnLCAnZWdsLXdheWxhbmQnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICdnbHggZWdsLXgxMScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICIKKworCitGSUxFU18ke1BOfS1leGFtcGxlcyA9ICIke2JpbmRpcn0vKiAke2RhdGFkaXJ9L2NvZ2wvZXhhbXBsZXMtZGF0YS8qIgorRklMRVNfbGliY29nbCA9ICIke2xpYmRpcn0vbGliY29nbCR7U09MSUJTfSIKK0ZJTEVTX2xpYmNvZ2wtZ2xlczIgPSAiJHtsaWJkaXJ9L2xpYmNvZ2wtZ2xlczIke1NPTElCU30iCitGSUxFU19saWJjb2dsLXBhbmdvID0gIiR7bGliZGlyfS9saWJjb2dsLXBhbmdvJHtTT0xJQlN9IgorCitGSUxFU19saWJjb2dsLXBhdGggPSAiJHtsaWJkaXJ9L2xpYmNvZ2wtcGF0aCR7U09MSUJTfSIKKworIyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYWZ0ZXIgRGViaWFuLXJlbmFtaW5nCitSUFJPVklERVNfbGliY29nbCA9ICJjb2dsLTEuMCIKK1JDT05GTElDVFNfbGliY29nbCA9ICJjb2dsLTEuMCIKK1JSRVBMQUNFU19saWJjb2dsID0gImNvZ2wtMS4wIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMC9jb2dsLWZyYW1lYnVmZmVyLWdsLVdvcmstYWdhaW4tb24tR0xFU3YyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMC9jb2dsLWZyYW1lYnVmZmVyLWdsLVdvcmstYWdhaW4tb24tR0xFU3YyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlODM5NTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jb2dsL2NvZ2wtMS4wL2NvZ2wtZnJhbWVidWZmZXItZ2wtV29yay1hZ2Fpbi1vbi1HTEVTdjIucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKworCisKK0Zyb20gZjhjY2U1ZjZjYjI5NThhNDA3NGY4N2NkMzQ1YmZlNDZlMGRkYTZlMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJKYXNwZXIgU3QuIFBpZXJyZSIgPGpzdHBpZXJyZUBtZWNoZXllLm5ldD4KK0RhdGU6IE1vbiwgMjAgQXByIDIwMTUgMTI6MDg6MjkgLTA3MDAKK1N1YmplY3Q6IGNvZ2wtZnJhbWVidWZmZXItZ2w6IFdvcmsgYWdhaW4gb24gR0xFU3YyCisKKworZGlmZiAtLWdpdCBhL2NvZ2wvZHJpdmVyL2dsL2NvZ2wtZnJhbWVidWZmZXItZ2wuYyBiL2NvZ2wvZHJpdmVyL2dsL2NvZ2wtZnJhbWVidWZmZXItZ2wuYworaW5kZXggNzkzYjEwYi4uNjA5Y2ZiMyAxMDA2NDQKKy0tLSBhL2NvZ2wvZHJpdmVyL2dsL2NvZ2wtZnJhbWVidWZmZXItZ2wuYworKysrIGIvY29nbC9kcml2ZXIvZ2wvY29nbC1mcmFtZWJ1ZmZlci1nbC5jCitAQCAtMTA3LDYgKzEwNywxMiBAQAorICNpZm5kZWYgR0xfUEFDS19JTlZFUlRfTUVTQQorICNkZWZpbmUgR0xfUEFDS19JTlZFUlRfTUVTQSAweDg3NTgKKyAjZW5kaWYKKysjaWZuZGVmIEdMX0JBQ0tfTEVGVAorKyNkZWZpbmUgR0xfQkFDS19MRUZUCQkJCTB4MDQwMgorKyNlbmRpZgorKyNpZm5kZWYgR0xfQkFDS19SSUdIVAorKyNkZWZpbmUgR0xfQkFDS19SSUdIVAkJCQkweDA0MDMKKysjZW5kaWYKKyAKKyAjaWZuZGVmIEdMX0NPTE9SCisgI2RlZmluZSBHTF9DT0xPUiAweDE4MDAKK0BAIC0yNDUsNiArMjUxLDkgQEAgX2NvZ2xfZnJhbWVidWZmZXJfZ2xfZmx1c2hfc3RlcmVvX21vZGVfc3RhdGUgKENvZ2xGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIpCisgICBpZiAoZnJhbWVidWZmZXItPnR5cGUgPT0gQ09HTF9GUkFNRUJVRkZFUl9UWVBFX09GRlNDUkVFTikKKyAgICAgcmV0dXJuOworIAorKyAgaWYgKCFjdHgtPmdsRHJhd0J1ZmZlcikKKysgICAgcmV0dXJuOworKworICAgLyogVGhlIG9uZS1zaG90IGRlZmF1bHQgZHJhdyBidWZmZXIgc2V0dGluZyBpbiBfY29nbF9mcmFtZWJ1ZmZlcl9nbF9iaW5kCisgICAgKiBtdXN0IGhhdmUgYWxyZWFkeSBoYXBwZW5lZC4gSWYgbm90IGl0IHdvdWxkIG92ZXJyaWRlIHdoYXQgd2Ugc2V0IGhlcmUuICovCisgICBnX2Fzc2VydCAoY3R4LT53YXNfYm91bmRfdG9fb25zY3JlZW4pOworLS0gCitjZ2l0IHYwLjEwLjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMF8xLjIwLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jb2dsL2NvZ2wtMS4wXzEuMjAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjBiODE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMF8xLjIwLjAuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlIGNvZ2wtMS4wLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vY29nbC1mcmFtZWJ1ZmZlci1nbC1Xb3JrLWFnYWluLW9uLUdMRVN2Mi5wYXRjaCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MWIxYTUwOGQ5MWQyNWNhNjA3YzgzZjkyZjNlMzFjODQiCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI1YjI4ODk3MTk0ZDlmZjc2YTU3NGE5NDkzZDFmN2VlMCIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjcyOWUzNTQ5NTgyOWU3ZDMxZmFmYTMzNThlNDdiNzQzYmEyMWEyYjA4ZmY5YjZjZDI4ZmI3NGMwZGU5MTE5MmIiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLWV4YW1wbGVzL2NvbmZpZ3VyZS5pbi1GaXgtc3RyaW5nLWFyZ3VtZW50LXN5bnRheC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLWV4YW1wbGVzL2NvbmZpZ3VyZS5pbi1GaXgtc3RyaW5nLWFyZ3VtZW50LXN5bnRheC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzE3ZWE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmItZXhhbXBsZXMvY29uZmlndXJlLmluLUZpeC1zdHJpbmctYXJndW1lbnQtc3ludGF4LnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gODgwNzdlZDE1NmE3MTRmMzJiYjQwOGY0MjIyNzhkNjE2MTFmZmQ0MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CitEYXRlOiBTYXQsIDI2IEp1bCAyMDE0IDE2OjU3OjQ2IC0wMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZS5pbjogRml4IHN0cmluZyBhcmd1bWVudCBzeW50YXgKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KKy0tLQorIGNvbmZpZ3VyZS5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggYmZlMWI4Mi4uZTkzOWJiZCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtNjUsNyArNjUsNyBAQCBmaSkKKyAKKyBESVJFQ1RGQl9SRVFVSVJFRF9WRVJTSU9OPTEuNC4xNAorIAorLVBLR19DSEVDS19NT0RVTEVTKERJUkVDVEZCLCBkaXJlY3RmYiA+PSAkRElSRUNURkJfUkVRVUlSRURfVkVSU0lPTixbIFdBVEVSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXdhdGVyIGRpcmVjdGZiYCBdLAorK1BLR19DSEVDS19NT0RVTEVTKFtESVJFQ1RGQl0sIGRpcmVjdGZiID49ICRESVJFQ1RGQl9SRVFVSVJFRF9WRVJTSU9OLFsgV0FURVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9d2F0ZXIgZGlyZWN0ZmJgIF0sCisgCUFDX01TR19FUlJPUihbJERJUkVDVEZCX1BLR19FUlJPUlMKKyAqKiogRGlyZWN0RkIgJERJUkVDVEZCX1JFUVVJUkVEX1ZFUlNJT04gb3IgbmV3ZXIgaXMgcmVxdWlyZWQuIFRoZSBsYXRlc3QgdmVyc2lvbgorICoqKiBvZiBEaXJlY3RGQiBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vd3d3LmRpcmVjdGZiLm9yZy8uXSkpCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLWV4YW1wbGVzXzEuNy4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmItZXhhbXBsZXNfMS43LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMzZThiZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLWV4YW1wbGVzXzEuNy4wLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiRXhhbXBsZSBEaXJlY3RGQiBhcHBsaWNhdGlvbnMiCitERVNDUklQVElPTiA9ICJUaGUgRGlyZWN0RkItZXhhbXBsZXMgcGFja2FnZSBjb250YWlucyBhIHNldCBvZiBzaW1wbGUgRGlyZWN0RkIgXAorICAgICAgYXBwbGljYXRpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdCBhbmQgZGVtb25zdHJhdGUgdmFyaW91cyBEaXJlY3RGQiBcCisgICAgICBmZWF0dXJlcyIKK0RFUEVORFMgPSAiZGlyZWN0ZmIiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIk1JVCIKKworU1JDX1VSSSA9ICIgXAorICAgICAgICAgICBodHRwOi8vd3d3LmRpcmVjdGZiLm9yZy9kb3dubG9hZHMvRXh0cmFzL0RpcmVjdEZCLWV4YW1wbGVzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUuaW4tRml4LXN0cmluZy1hcmd1bWVudC1zeW50YXgucGF0Y2ggXAorICAgICAgICAgICIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWNmNmZkMmIxOTkxNWFmYzRkYTU2MDQzOTI2Y2ExOGYiCisKK1MgPSAiJHtXT1JLRElSfS9EaXJlY3RGQi1leGFtcGxlcy0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4YjYwYzg2N2FmMjk1NDgxYzMyYThjN2ZjNTgwMjMwNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5YTIxMDRjYzRkYTgxMjNjODM3MTgxMzU1MWI2NmI5NDMxOTg5NzlmNzQ1Y2JlYmMwMzRiYjVlMTA4NDQxMjJhIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NmFhZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi5pbmMKQEAgLTAsMCArMSw4MCBAQAorU1VNTUFSWSA9ICJHcmFwaGljcyBhYnN0cmFjdGlvbiBsaWJyYXJ5IGZvciB0aGUgTGludXggRnJhbWVidWZmZXIgRGV2aWNlIgorREVTQ1JJUFRJT04gPSAiRGlyZWN0RkIgaXMgYSB0aGluIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBkZXZlbG9wZXJzIFwKK3dpdGggaGFyZHdhcmUgZ3JhcGhpY3MgYWNjZWxlcmF0aW9uLCBpbnB1dCBkZXZpY2UgaGFuZGxpbmcgYW5kIFwKK2Fic3RyYWN0aW9uLCBhbiBpbnRlZ3JhdGVkIHdpbmRvd2luZyBzeXN0ZW0gd2l0aCBzdXBwb3J0IGZvciBcCit0cmFuc2x1Y2VudCB3aW5kb3dzIGFuZCBtdWx0aXBsZSBkaXNwbGF5IGxheWVycyBvbiB0b3Agb2YgdGhlIFwKK0xpbnV4IGZyYW1lYnVmZmVyIGRldmljZS4iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZGNmM2M4MjU2NTllODI1Mzk2NDVkYTQxYTc5MDg1ODkiCisKK0hPTUVQQUdFID0gImh0dHA6Ly9kaXJlY3RmYi5vcmciCitERVBFTkRTID0gImpwZWcgbGlicG5nIGZyZWV0eXBlIHpsaWIgdHNsaWIgc3lzZnN1dGlscyIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmRpcmVjdGZiLm9yZy9kb3dubG9hZHMvQ29yZS9EaXJlY3RGQi0xLjcvRGlyZWN0RkItJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9mdXNpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYmFzaGlzbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWdmeC1kaXJlY3QtQWJvaWQtdXNuZy1WTEFzLWFuZC1wcmludGYtZm9ybWF0cy5wYXRjaCBcCisgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vRGlyZWN0RkItJHtQVn0iCisKK0xERkxBR1NfYXBwZW5kID0iIC1sdHMgLWxtIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2RpcmVjdGZiLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tqcGVnMjAwMF0gPSAiLS1lbmFibGUtanBlZzIwMDAsLS1kaXNhYmxlLWpwZWcyMDAwLGphc3BlciIKK1BBQ0tBR0VDT05GSUdbZHJta21zXSA9ICItLWVuYWJsZS1kcm1rbXMsLS1kaXNhYmxlLWRybWttcyxsaWJkcm0iCitQQUNLQUdFQ09ORklHW3RpZmZdID0gIi0tZW5hYmxlLXRpZmYsLS1kaXNhYmxlLXRpZmYsdGlmZiIKK1BBQ0tBR0VDT05GSUdbd2VicF0gPSAiLS1lbmFibGUtd2VicCwtLWRpc2FibGUtd2VicCxsaWJ3ZWJwIgorCitFWFRSQV9PRUNPTkYgPSAiXAorICAtLXdpdGgtZ2Z4ZHJpdmVycz1ub25lIFwKKyAgLS1lbmFibGUtZnJlZXR5cGU9eWVzIFwKKyAgLS1lbmFibGUtemxpYiBcCisgIC0tZGlzYWJsZS1pbWxpYjIgXAorICAtLWRpc2FibGUtbWVzYSBcCisgIC0tZGlzYWJsZS1zZGwgXAorICAtLWRpc2FibGUtdm5jIFwKKyAgLS1kaXNhYmxlLXgxMSBcCisiCisKKyNPbmNlIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIG9wdGlvbiBvZiBnY2MgaXMgYWRkZWQgaW50byBUQVJHRVRfQ0xGQUdTIGFzIGRlZmF1bHQKKyN0aGlzIHdpbGwgY2F1c2UgZGlyZWN0ZmIgYnVpbGQgZmFpbHVyZSBvbiB4ODYgYXJjaCwgc28gZmlsdGVyIG91dCBpdC4KK1RBUkdFVF9DRkxBR1NfcmVtb3ZlX3g4NiA9ICItZm5vLW9taXQtZnJhbWUtcG9pbnRlciIKKworI1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5kaXJlY3RmYi1pbnB1dGRyaXZlcnMtLioiCisjCisjcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworIyAgICBpbnB1dGRyaXZlcnNfbGliZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfS9kaXJlY3RmYi0ke1JWfS9pbnB1dGRyaXZlcnMnKQorIyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBpbnB1dGRyaXZlcnNfbGliZGlyLCAnKi5zbyQnLCAnZGlyZWN0ZmItaW5wdXRkcml2ZXJzLSVzJywgJ0RpcmVjdGZiIHBsdWdpbiBmb3IgJXMnKQorI30KKworIyBOT1RFOiBtb25vbGl0aGljIHBhY2thZ2luZyBmb3Igbm93LCBzaG91bGQgaW1wcm92ZSB0aGF0IGV2ZW50dWFsbHkKKworCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vKi8qLy5kZWJ1Zy8qLnNvIFwKKyAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9LyovLmRlYnVnLyouc28gXAorIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIlwKKyAgJHtiaW5kaXJ9L2RpcmVjdGZiLWNvbmZpZyBcCisgICR7bGliZGlyfS9kaXJlY3RmYi0ke1JWfS9zeXN0ZW1zLyoubGEgXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vaW5wdXRkcml2ZXJzLyoubGEgXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vaW50ZXJmYWNlcy8qLyoubGEgXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vd20vKi5sYSBcCisiCisKK0ZJTEVTXyR7UE59ICs9ICJcCisgICR7bGliZGlyfS9kaXJlY3RmYi0ke1JWfS9zeXN0ZW1zLyouc28gXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vaW5wdXRkcml2ZXJzLyouc28gXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vaW50ZXJmYWNlcy8qLyouc28gXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vd20vKi5zbyBcCisgICR7ZGF0YWRpcn0vZGlyZWN0ZmItJHtQVn0gXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvMDAwMS1nZngtZGlyZWN0LUFib2lkLXVzbmctVkxBcy1hbmQtcHJpbnRmLWZvcm1hdHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi8wMDAxLWdmeC1kaXJlY3QtQWJvaWQtdXNuZy1WTEFzLWFuZC1wcmludGYtZm9ybWF0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmUwZjc1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvMDAwMS1nZngtZGlyZWN0LUFib2lkLXVzbmctVkxBcy1hbmQtcHJpbnRmLWZvcm1hdHMucGF0Y2gKQEAgLTAsMCArMSw2MSBAQAorRnJvbSBmNDNlZjQ0ODA2ZmZiOGUzYjM1ZDk5MDcwZGRlOWI2Y2MxNzE0ZDNkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgOCBTZXAgMjAxNSAyMTozMjoyMCArMDAwMAorU3ViamVjdDogW1BBVENIXSBnZngsZGlyZWN0OiBBYm9pZCB1c25nIFZMQXMgYW5kIHByaW50ZiBmb3JtYXRzCisKK1ZMQXMgYXJlIGZsYWdnZWQgYnkgY2xhbmcgd2hlbiB1c2luZyBub24tUE9EIHR5cGVzLCB0aGVyZWZvcmUgcmVwbGFjZQordGhlIHVzYWdlIHdpdGggYWxsb2NhIHdoaWNoIGlzIGV4YWN0IHNhbWUgYWxsb2NhdGlvbiBvbiBzdGFjaworCisgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAoX19wcmludGZfXykpKSBpcyBub3QgcG9ydGFibGUgYXMgdXNlZCBoZXJlCisgdGhlcmVmb3JlIGRpc2FibGUgdGhlIGNoZWNrIGZvciBjbGFuZyBoZXJlLCB3ZSBsb3NlIG5vIGZ1bmN0aW9uYWxpdHkKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBsaWIvZGlyZWN0L3V0aWwuaCB8IDIgKy0KKyBzcmMvZ2Z4L3V0aWwuY3BwICB8IDggKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9kaXJlY3QvdXRpbC5oIGIvbGliL2RpcmVjdC91dGlsLmgKK2luZGV4IDcyOTQxZTkuLjhlN2ZhNGEgMTAwNjQ0CistLS0gYS9saWIvZGlyZWN0L3V0aWwuaAorKysrIGIvbGliL2RpcmVjdC91dGlsLmgKK0BAIC05OCw3ICs5OCw3IEBACisgI2RlZmluZSBEX0NPTlNUX0ZVTkMKKyAjZW5kaWYKKyAKKy0jaWYgX19HTlVDX18gPj0gMworKyNpZiBfX0dOVUNfXyA+PSAzICYmICFkZWZpbmVkIF9fY2xhbmdfXworICNkZWZpbmUgRF9GT1JNQVRfUFJJTlRGKG4pICAgICAgICAgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAoX19wcmludGZfXywgbiwgbisxKSkpCisgI2RlZmluZSBEX0ZPUk1BVF9WUFJJTlRGKG4pICAgICAgICBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCBuLCAwKSkpCisgI2Vsc2UKK2RpZmYgLS1naXQgYS9zcmMvZ2Z4L3V0aWwuY3BwIGIvc3JjL2dmeC91dGlsLmNwcAoraW5kZXggNDAwMzJiYy4uZDEwMTVkNCAxMDA2NDQKKy0tLSBhL3NyYy9nZngvdXRpbC5jcHAKKysrKyBiL3NyYy9nZngvdXRpbC5jcHAKK0BAIC0yOTQsOCArMjk0LDggQEAgZGZiX2dmeF9jb3B5X3JlZ2lvbnNfc3RlcmVvKCBDb3JlU3VyZmFjZSAgICAgICAgICAgKnNvdXJjZSwKKyB7CisgICAgICB1bnNpZ25lZCBpbnQgaSwgbiA9IDA7CisgICAgICBERkJSZWN0YW5nbGUgcmVjdCA9IHsgMCwgMCwgc291cmNlLT5jb25maWcuc2l6ZS53LCBzb3VyY2UtPmNvbmZpZy5zaXplLmggfTsKKy0gICAgIERGQlJlY3RhbmdsZSByZWN0c1tudW1dOworLSAgICAgREZCUG9pbnQgICAgIHBvaW50c1tudW1dOworKyAgICAgREZCUmVjdGFuZ2xlICpyZWN0cyA9ICAoREZCUmVjdGFuZ2xlKilhbGxvY2EoIHNpemVvZihzdHJ1Y3QgREZCUmVjdGFuZ2xlKSAqIG51bSk7CisrICAgICBERkJQb2ludCAqcG9pbnRzID0gIChERkJQb2ludCopYWxsb2NhKCBzaXplb2Yoc3RydWN0IERGQlBvaW50KSAqIG51bSk7CisgCisgICAgICBmb3IgKGk9MDsgaTxudW07IGkrKykgeworICAgICAgICAgICBERkJfUkVHSU9OX0FTU0VSVCggJnJlZ2lvbnNbaV0gKTsKK0BAIC0zNTEsOCArMzUxLDggQEAgZGZiX2dmeF9jb3B5X3JlZ2lvbnNfY2xpZW50KCBDb3JlU3VyZmFjZSAgICAgICAgICAgICAqc291cmNlLAorIHsKKyAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICBpLCBuID0gMDsKKyAgICAgIERGQlJlY3RhbmdsZSAgICAgICAgICAgICByZWN0ID0geyAwLCAwLCBzb3VyY2UtPmNvbmZpZy5zaXplLncsIHNvdXJjZS0+Y29uZmlnLnNpemUuaCB9OworLSAgICAgREZCUmVjdGFuZ2xlICAgICAgICAgICAgIHJlY3RzW251bV07CistICAgICBERkJQb2ludCAgICAgICAgICAgICAgICAgcG9pbnRzW251bV07CisrICAgICBERkJSZWN0YW5nbGUgICAgICAgICAgICAqcmVjdHMgPSAgKERGQlJlY3RhbmdsZSopYWxsb2NhKCBzaXplb2Yoc3RydWN0IERGQlJlY3RhbmdsZSkgKiBudW0pOworKyAgICAgREZCUG9pbnQgICAgICAgICAgICAgICAgKnBvaW50cyA9ICAoREZCUG9pbnQqKWFsbG9jYSggc2l6ZW9mKHN0cnVjdCBERkJQb2ludCkgKiBudW0pOworICAgICAgQ29yZUdyYXBoaWNzU3RhdGVDbGllbnQgKmNsaWVudCA9IF9jbGllbnQgPyBfY2xpZW50IDogJlN0YXRlQ2xpZW50OjpHZXQoKS0+Y2xpZW50OworICAgICAgQ2FyZFN0YXRlICAgICAgICAgICAgICAgKnN0YXRlICA9IGNsaWVudC0+c3RhdGU7CisgICAgICBDYXJkU3RhdGUgICAgICAgICAgICAgICAgYmFja3VwOworLS0gCisyLjUuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi9iYXNoaXNtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvYmFzaGlzbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWY0ZTkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvYmFzaGlzbS5wYXRjaApAQCAtMCwwICsxLDE4IEBACiske3gvL3kvfSBpcyBhIGJhc2ggc3ludGF4LiBSZXBsYWNlIHdpdGggc29tZXRoaW5nIGRhc2ggY29tcGF0aWJsZQorCitSUCAyMDE1LzUvMworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBEaXJlY3RGQi0xLjcuNy9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBEaXJlY3RGQi0xLjcuNy5vcmlnL2NvbmZpZ3VyZS5pbgorKysrIERpcmVjdEZCLTEuNy43L2NvbmZpZ3VyZS5pbgorQEAgLTI2OTYsNyArMjY5Niw3IEBAIEFNX0NPTkRJVElPTkFMKEJVSUxEX1RPT0xTLCB0ZXN0ICIkd2l0aF8KKyBBTV9DT05ESVRJT05BTChDUk9TU19DT01QSUxJTkcsIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gInllcyIpCisgCisgQ0ZMQUdTPSIkQ0ZMQUdTICRERkJfSU5URVJOQUxfQ0ZMQUdTIgorLUNYWEZMQUdTPSIkQ1hYRkxBR1MgJHtDRkxBR1MvLy1XZXJyb3ItaW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb24vfSIKKytDWFhGTEFHUz0iJENYWEZMQUdTICQocHJpbnRmICclc1xuJyAiJENGTEFHUyIgfCBzZWQgJ3MvLVdlcnJvci1pbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbi8vZycpIgorIERGQl9MREZMQUdTPSIkTERGTEFHUyAkWkxJQl9MSUJTIgorIAorIENGTEFHUz0iJENGTEFHUyAkQ0ZMQUdTX1NURCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2NvbmZpZ3VyZWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2NvbmZpZ3VyZWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDhjMDE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvY29uZmlndXJlZml4LnBhdGNoCkBAIC0wLDAgKzEsNjAgQEAKK0xpYnRvb2wgbmVlZHMgdGhlc2Ugc2V0IGNvcnJlY3RseSBlbHNlIHdlIGVuZCB1cCB3aXRoIHBvaW50bGVzcyBycGF0aHMKK3N1Y2ggYXMgdGhlIFFBIHdhcm5pbmdzOgorCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJsYXllciBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWJXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJtYXN0ZXIgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vbWtkZ2lmZnQgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZiZHVtcCBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWJXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJpbnB1dCBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWJXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJmeCBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWJXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJzY3JlZW4gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vbWtkZ2lmZiBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWJXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJpbnNwZWN0b3IgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9ta2RmaWZmIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZiaW5mbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL2RmYnBlbm1vdW50IGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZiZyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2xpYmZ1c2lvbi0xLjQuc28uNiBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2xpYmRpcmVjdGZiLTEuNC5zby42LjAuOSBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2xpYmRpcmVjdGZiLTEuNC5zby42IGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvbGliZnVzaW9uLTEuNC5zby42LjAuOSBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L3N5c3RlbXMvbGliZGlyZWN0ZmJfZmJkZXYuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9zeXN0ZW1zL2xpYmRpcmVjdGZiX2Rldm1lbS5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L3N5c3RlbXMvbGliZGlyZWN0ZmJfZHVtbXkuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQlZpZGVvUHJvdmlkZXIvbGliaWRpcmVjdGZidmlkZW9wcm92aWRlcl92NGwuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQlZpZGVvUHJvdmlkZXIvbGliaWRpcmVjdGZidmlkZW9wcm92aWRlcl9naWYuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lDb3JlUmVzb3VyY2VNYW5hZ2VyL2xpYmljb3JlcmVzb3VyY2VtYW5hZ2VyX3Rlc3Quc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQkltYWdlUHJvdmlkZXIvbGliaWRpcmVjdGZiaW1hZ2Vwcm92aWRlcl9qcGVnLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJJbWFnZVByb3ZpZGVyL2xpYmlkaXJlY3RmYmltYWdlcHJvdmlkZXJfcG5nLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJJbWFnZVByb3ZpZGVyL2xpYmlkaXJlY3RmYmltYWdlcHJvdmlkZXJfZGZpZmYuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQkltYWdlUHJvdmlkZXIvbGliaWRpcmVjdGZiaW1hZ2Vwcm92aWRlcl9naWYuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQkZvbnQvbGliaWRpcmVjdGZiZm9udF9mdDIuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQkZvbnQvbGliaWRpcmVjdGZiZm9udF9kZ2lmZi5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L3dtL2xpYmRpcmVjdGZid21fZGVmYXVsdC5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl96eXRyb25pYy5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9wZW5tb3VudC5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9saW51eF9pbnB1dC5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9zZXJpYWxtb3VzZS5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9tdXRvdWNoLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW5wdXRkcml2ZXJzL2xpYmRpcmVjdGZiX3RzbGliLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW5wdXRkcml2ZXJzL2xpYmRpcmVjdGZiX2pveXN0aWNrLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW5wdXRkcml2ZXJzL2xpYmRpcmVjdGZiX3NvbnlwaS5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9saXJjLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW5wdXRkcml2ZXJzL2xpYmRpcmVjdGZiX3dtOTd4eF90cy5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9wczJtb3VzZS5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9rZXlib2FyZC5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JQIDIwMTIvMDMvMTYKKworSW5kZXg6IERpcmVjdEZCLTEuNC4xNS9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBEaXJlY3RGQi0xLjQuMTUub3JpZy9jb25maWd1cmUuaW4JMjAxMi0wMy0xNiAxMzozMjoyMy42OTI0MDI4NzkgKzAwMDAKKysrKyBEaXJlY3RGQi0xLjQuMTUvY29uZmlndXJlLmluCTIwMTItMDMtMTYgMTM6MzM6MjIuMzEyNDAwOTYwICswMDAwCitAQCAtOTcsMTMgKzk3LDYgQEAKKyBBQ19DSEVDS19TSVpFT0YobG9uZyBsb25nKQorIEFDX0NIRUNLX0ZVTkNTKGZvcmspCisgCistCistIyMgV29yayBhcm91bmQgbGlic3R1aGwgZHVyaW5nIGNyb3NzIGJ1aWxkLi4uCistaWYgdGVzdCAiJGhvc3QiICE9ICIkYnVpbGQiOyB0aGVuCistICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iIgorLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIiCistZmkKKy0KKyBBQ19QQVRIX1BST0dTKFBFUkwsIHBlcmw1IHBlcmwpCisgCisgQUNfUEFUSF9QUk9HKE1BTjJIVE1MLCBtYW4yaHRtbCwgbm8pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi9mdXNpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi9mdXNpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY4MWE2NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2Z1c2lvbi5wYXRjaApAQCAtMCwwICsxLDM2IEBACitkaXJlY3RmYjogRml4IGZvciBoYW5ncyBpbiBkaXJlY3RfdGVzdCwgZnVzaW9uX3NraXJtaXNoIG9uIGV4aXQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBMYXVyZW4gUG9zdCA8bGF1cmVuLnBvc3RAZnJlZXNjYWxlLmNvbT4KKworLS0tIGEvbGliL2Z1c2lvbi9mdXNpb24uYwkyMDEzLTAxLTE4IDIyOjU3OjExLjAwMDAwMDAwMCArMDgwMAorKysrIGIvbGliL2Z1c2lvbi9mdXNpb24uYwkyMDEzLTA3LTA0IDEwOjQyOjU2LjUwMjY5OTExOSArMDgwMAorQEAgLTI4NTMsOSArMjg1MywxNCBAQAorICAgICAgICAgICBkaXJlY3RfbXV0ZXhfbG9jayggJndvcmxkLT5ldmVudF9kaXNwYXRjaGVyX211dGV4ICk7CisgCisgICAgICAgICAgIHdoaWxlICgxKSB7CistICAgICAgICAgICAgICAgaWYgKCF3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9idWZmZXJzKQorKyAgICAgICAgICAgICAgIGlmICghd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfYnVmZmVycyl7CisgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rfd2FpdHF1ZXVlX3dhaXQoICZ3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9jb25kLCAmd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfbXV0ZXggKTsKKy0KKysgICAgICAgICAgICAgICAgICAgIGlmICh3b3JsZC0+ZGlzcGF0Y2hfc3RvcCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgICBEX0RFQlVHX0FUKCBGdXNpb25fTWFpbl9EaXNwYXRjaCwgIiAgLT4gSUdOT1JJTkcgKGRpc3BhdGNoX3N0b3AhKVxuIiApOworKyAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RfbXV0ZXhfdW5sb2NrKCAmd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfbXV0ZXggKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJ1ZiA9IChGdXNpb25FdmVudERpc3BhdGNoZXJCdWZmZXIgKil3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9idWZmZXJzOworICAgICAgICAgICAgICAgIERfTUFHSUNfQVNTRVJUKCBidWYsIEZ1c2lvbkV2ZW50RGlzcGF0Y2hlckJ1ZmZlciApOworIAorQEAgLTI4NzIsNiArMjg3NywxMSBAQAorIC8vRF9JTkZPKCJ3YWl0aW5nLi4uXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgIERfQVNTRVJUKCBidWYtPnJlYWRfcG9zID09IGJ1Zi0+d3JpdGVfcG9zICk7CisgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rfd2FpdHF1ZXVlX3dhaXQoICZ3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9jb25kLCAmd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfbXV0ZXggKTsKKysJCSAgICAgIGlmICh3b3JsZC0+ZGlzcGF0Y2hfc3RvcCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgICBEX0RFQlVHX0FUKCBGdXNpb25fTWFpbl9EaXNwYXRjaCwgIiAgLT4gSUdOT1JJTkcgKGRpc3BhdGNoX3N0b3AhKVxuIiApOworKyAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RfbXV0ZXhfdW5sb2NrKCAmd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfbXV0ZXggKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICAgIGJ1ZiA9IChGdXNpb25FdmVudERpc3BhdGNoZXJCdWZmZXIgKil3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9idWZmZXJzOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmJfMS43LjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYl8xLjcuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmMwNzBlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmJfMS43LjcuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlIGRpcmVjdGZiLmluYworCitSViA9ICIxLjctNyIKKworTEVBRF9TT05BTUUgPSAibGliZGlyZWN0ZmItMS43LnNvLjAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxNTJjZjE4NjNiMWEzYTI4YWExMzcwZTkwNTM0NDBiZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNzg1YzYzOGRjMzFiOGZlM2E3YzgxYmUxNDc1Yzg5YjIyNTVhYjNkNjdiNzc3Yzc0N2QzZmJjNTJmODAyN2EzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZHJtL2xpYmRybS9pbnN0YWxsdGVzdHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kcm0vbGliZHJtL2luc3RhbGx0ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTc1ZGFlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZHJtL2xpYmRybS9pbnN0YWxsdGVzdHMucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAordGVzdHM6IGFsc28gaW5zdGFsbCB0ZXN0cyBhcHAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBZdSBLZSA8a2UueXVAaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggYmYxOTg3Zi4uZDkwOWUxOSAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTI3LDEwICsyNywxMSBAQCBBTV9DUFBGTEFHUyA9IFwKKyAKKyBMREFERCA9ICQodG9wX2J1aWxkZGlyKS9saWJkcm0ubGEKKyAKKy1jaGVja19QUk9HUkFNUyA9IFwKKytiaW5fUFJPR1JBTVMgPSBcCisgCWRyaXN0YXQgXAorIAlkcm1zdGF0CisgCisrY2hlY2tfUFJPR1JBTVMgPQorIGlmIEhBVkVfTk9VVkVBVQorIFNVQkRJUlMgKz0gbm91dmVhdQorIGVuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kcm0vbGliZHJtXzIuNC42Mi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RybS9saWJkcm1fMi40LjYyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNjMwNWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kcm0vbGliZHJtXzIuNC42Mi5iYgpAQCAtMCwwICsxLDQyIEBACitTVU1NQVJZID0gIlVzZXJzcGFjZSBpbnRlcmZhY2UgdG8gdGhlIGtlcm5lbCBEUk0gc2VydmljZXMiCitERVNDUklQVElPTiA9ICJUaGUgcnVudGltZSBsaWJyYXJ5IGZvciBhY2Nlc3NpbmcgdGhlIGtlcm5lbCBEUk0gc2VydmljZXMuICBEUk0gXAorc3RhbmRzIGZvciBcIkRpcmVjdCBSZW5kZXJpbmcgTWFuYWdlclwiLCB3aGljaCBpcyB0aGUga2VybmVsIHBvcnRpb24gb2YgdGhlIFwKK1wiRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZVwiIChEUkkpLiAgRFJJIGlzIHJlcXVpcmVkIGZvciBtYW55IGhhcmR3YXJlIFwKK2FjY2VsZXJhdGVkIE9wZW5HTCBkcml2ZXJzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9kcmkuZnJlZWRlc2t0b3Aub3JnIgorU0VDVElPTiA9ICJ4MTEvYmFzZSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8veGY4NmRybS5jO2JlZ2lubGluZT05O2VuZGxpbmU9MzI7bWQ1PWM4YTNiOTYxYWY3NjY3YzUzMDgxNjc2MWU5NDlkYzcxIgorUFJPVklERVMgPSAiZHJtIgorREVQRU5EUyA9ICJsaWJwdGhyZWFkLXN0dWJzIHVkZXYgbGlicGNpYWNjZXNzIgorCitTUkNfVVJJID0gImh0dHA6Ly9kcmkuZnJlZWRlc2t0b3Aub3JnL2xpYmRybS8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2luc3RhbGx0ZXN0cy5wYXRjaCAiCitTUkNfVVJJW21kNXN1bV0gPSAiYzkyOTFiYWUwZTVjYTY1ZDE0ODM4MjFkMzY5OGQzYWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTA2YzI5NGJkYmUxYzk0YzNjYTA4NDMwNWQ2MWE2ZTVhODM2N2YzYjQ5ODZlNmNjMTNiMWU5YjNmNzU5MzFkYyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWNhaXJvLXRlc3RzIFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtb21hcC1leHBlcmltZW50YWwtYXBpIFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtaW5zdGFsbC10ZXN0LXByb2dyYW1zIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLW1hbnBhZ2VzIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXZhbGdyaW5kIFwKKyAgICAgICAgICAgICAgICAiCisKK0FMTE9XX0VNUFRZXyR7UE59LWRyaXZlcnMgPSAiMSIKK1BBQ0tBR0VTID0rICIke1BOfS10ZXN0cyAke1BOfS1kcml2ZXJzICR7UE59LXJhZGVvbiAke1BOfS1ub3V2ZWF1ICR7UE59LW9tYXAgXAorICAgICAgICAgICAgICR7UE59LWludGVsICR7UE59LWV4eW5vcyAke1BOfS1rbXMgJHtQTn0tZnJlZWRyZW5vIgorCitSUkVDT01NRU5EU18ke1BOfS1kcml2ZXJzID0gIiR7UE59LXJhZGVvbiAke1BOfS1ub3V2ZWF1ICR7UE59LW9tYXAgJHtQTn0taW50ZWwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke1BOfS1leHlub3MgJHtQTn0tZnJlZWRyZW5vIgorCitGSUxFU18ke1BOfS10ZXN0cyA9ICIke2JpbmRpcn0vZHIqICR7YmluZGlyfS9tb2RlKiAke2JpbmRpcn0vKnRlc3QiCitGSUxFU18ke1BOfS1yYWRlb24gPSAiJHtsaWJkaXJ9L2xpYmRybV9yYWRlb24uc28uKiIKK0ZJTEVTXyR7UE59LW5vdXZlYXUgPSAiJHtsaWJkaXJ9L2xpYmRybV9ub3V2ZWF1LnNvLioiCitGSUxFU18ke1BOfS1vbWFwID0gIiR7bGliZGlyfS9saWJkcm1fb21hcC5zby4qIgorRklMRVNfJHtQTn0taW50ZWwgPSAiJHtsaWJkaXJ9L2xpYmRybV9pbnRlbC5zby4qIgorRklMRVNfJHtQTn0tZXh5bm9zID0gIiR7bGliZGlyfS9saWJkcm1fZXh5bm9zLnNvLioiCitGSUxFU18ke1BOfS1rbXMgPSAiJHtsaWJkaXJ9L2xpYmttcyouc28uKiIKK0ZJTEVTXyR7UE59LWZyZWVkcmVubyA9ICIke2xpYmRpcn0vbGliZHJtX2ZyZWVkcmVuby5zby4qIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9lZ2xpbmZvL2VnbGluZm8tZmJfMS4wLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9lZ2xpbmZvL2VnbGluZm8tZmJfMS4wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU1ZDMxZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2VnbGluZm8vZWdsaW5mby1mYl8xLjAuMC5iYgpAQCAtMCwwICsxLDYgQEAKK0VHTElORk9fUExBVEZPUk0gPz0gImZiIgorRUdMSU5GT19CSU5BUllfTkFNRSA/PSAiZWdsaW5mby1mYiIKKworaW5jbHVkZSBlZ2xpbmZvLmluYworCitTVU1NQVJZICs9ICIoRnJhbWVidWZmZXIgdmVyc2lvbikiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9lZ2xpbmZvL2VnbGluZm8teDExXzEuMC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZWdsaW5mby9lZ2xpbmZvLXgxMV8xLjAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDI3ZmRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZWdsaW5mby9lZ2xpbmZvLXgxMV8xLjAuMC5iYgpAQCAtMCwwICsxLDEyIEBACitFR0xJTkZPX1BMQVRGT1JNID89ICJ4MTEiCitFR0xJTkZPX0JJTkFSWV9OQU1FID89ICJlZ2xpbmZvLXgxMSIKKworaW5jbHVkZSBlZ2xpbmZvLmluYworCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSIKKworaW5oZXJpdCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworU1VNTUFSWSArPSAiKFgxMSB2ZXJzaW9uKSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2VnbGluZm8vZWdsaW5mby5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9lZ2xpbmZvL2VnbGluZm8uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NzY4OGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9lZ2xpbmZvL2VnbGluZm8uaW5jCkBAIC0wLDAgKzEsMjcgQEAKK1NVTU1BUlkgPSAiVXRpbGl0eSBmb3IgcHJpbnRpbmcgaW5mb3JtYXRpb24gRUdMIGFuZCBpdHMgY2xpZW50IEFQSXMgKE9wZW5HTCwgT3BlbkdMIEVTLCBPcGVuVkcpIgorU0VDVElPTiA9ICJncmFwaGljcyIKK0xJQ0VOU0UgPSAiWmxpYiIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9kdjEvZWdsaW5mbyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PThkNGYzM2JjM2FkZDk3NmY3ZGZhZTg1ZGFiNjZmMDNjIgorCitERVBFTkRTID0gInZpcnR1YWwvZWdsIgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vZHYxL2VnbGluZm8uZ2l0O2JyYW5jaD1tYXN0ZXIiCitTUkNSRVYgPSAiNGIzMTc2NDhlYzZjZjM5NTU2YTllNWQ4MDc4ZjYwNWJjMGVkZDVkZSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCB3YWYKKworIyBCU1AgbGF5ZXJzIHNob3VsZCBhZGQgLmJiYXBwZW5kIGZpbGVzIGZvciB0aGUgLXgxMSBhbmQgLWZiIC5iYiByZWNpcGVzLCB3aGljaAorIyBhcHBlbmQgdGhlIHJlc3BlY3RpdmUgRUdML09wZW5HTEVTL09wZW5WRyBsaWJyYXJpZXMgdG8gREVQRU5EUyBhbmQgc2V0CisjIEVHTF9ERVZJQ0UgYXMgYXBwcm9wcmlhdGUuCitFR0xJTkZPX0RFVklDRSA/PSAiZ2VuZXJpYyIKKworRVhUUkFfT0VDT05GID0gIi0tcGxhdGZvcm09JHtFR0xJTkZPX1BMQVRGT1JNfSBcCisgICAgICAgICAgICAgICAgLS1kZXZpY2U9JHtFR0xJTkZPX0RFVklDRX0gXAorICAgICAgICAgICAgICAgIC0tc3lzcm9vdCAke1NUQUdJTkdfRElSX1RBUkdFVH0iCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCW12ICR7RH0vJHtiaW5kaXJ9L2VnbGluZm8gJHtEfS8ke2JpbmRpcn0vJHtFR0xJTkZPX0JJTkFSWV9OQU1FfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZm9udGNvbmZpZy9mb250Y29uZmlnL3JldmVydC1zdGF0aWMtcGtnY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZm9udGNvbmZpZy9mb250Y29uZmlnL3JldmVydC1zdGF0aWMtcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYTFlNjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mb250Y29uZmlnL2ZvbnRjb25maWcvcmV2ZXJ0LXN0YXRpYy1wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorUmV2ZXJ0IHBhcnQgb2YgaHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2ZvbnRjb25maWcvY29tbWl0L2ZvbnRjb25maWcucGMuaW4/aWQ9MzM4ZmZlNmI4ODZhZDRiYTg2ZmY0NzFjYjU5YzRhNWU1ZmZiZTQwOAorV2UgcmVhbGx5IGRvbnQgZG8gc3RhdGljIGxpbmtpbmcgc28gaXRzIG5vdCBnb2luZyB0byBjYXVzZSBpc3N1ZXMgZm9yIHVzIGJ1dCBhcyBzdWNoIHRoaXMgaXMgaGFybWluZyB1cyBieSBhZGRpbmcgYWJzb2x1dGUKK3BhdGhzIGludG8gLUkgb3B0aW9ucyBpbnRvIGZvbnRjb25maWcucGMgd2hpY2ggaXMgdGhlbSBwcmVwZW5kZWQgd2l0aCBzeXNyb290IHdoZW4gcmVhZCBiYWNrIGJ5IGNyb3NzIHBrZy1jb25maWcgYW5kCit3ZSBlbmQgdXAgd2l0aCAtSSA8c3lzcm9vdD4vPHN5c3Jvb3Q+L3Vzci9pbmNsdWRlL2ZvbnRjb25maWcgaW4gQ0ZMQUdTIG9mIGNsaWVudHMgd2hpY2ggZGVwZW5kIG9uIGl0LiBvbmUgc3VjaCBleGFtcGxlCitpcyBtYXRjaGJveC1wYW5lbC0yIGFuZCBpdCB3YXMgd29ya2luZyBmaW5lIHdpdGggZ2NjIDwgNSBiZWNhdXNlIGl0IHRvbGVyYXRlZCBub24tZXhpc3RpbmcgcGF0aHMgaW4gLUkgZmxhZ3MgYnV0IGdjYy01CitnZW50bHkgcmVmdXNlcyBhbmQgcmlnaHRseSBzby4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1TcGVjaWZpY10KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBmb250Y29uZmlnLTIuMTEuOTMvZm9udGNvbmZpZy5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGZvbnRjb25maWctMi4xMS45My5vcmlnL2ZvbnRjb25maWcucGMuaW4KKysrKyBmb250Y29uZmlnLTIuMTEuOTMvZm9udGNvbmZpZy5wYy5pbgorQEAgLTE1LDQgKzE1LDQgQEAgUmVxdWlyZXM6IEBQS0dDT05GSUdfUkVRVUlSRVNACisgUmVxdWlyZXMucHJpdmF0ZTogQFBLR0NPTkZJR19SRVFVSVJFU19QUklWQVRFTFlACisgTGliczogLUwke2xpYmRpcn0gLWxmb250Y29uZmlnCisgTGlicy5wcml2YXRlOiBARVhQQVRfTElCU0AgQEZSRUVUWVBFX0xJQlNAIEBJQ09OVl9MSUJTQCBATElCWE1MMl9MSUJTQAorLUNmbGFnczogLUkke2luY2x1ZGVkaXJ9IEBFWFBBVF9DRkxBR1NAIEBGUkVFVFlQRV9DRkxBR1NAIEBJQ09OVl9DRkxBR1NAIEBMSUJYTUwyX0NGTEFHU0AKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZm9udGNvbmZpZy9mb250Y29uZmlnXzIuMTEuOTQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mb250Y29uZmlnL2ZvbnRjb25maWdfMi4xMS45NC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJmZjIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZm9udGNvbmZpZy9mb250Y29uZmlnXzIuMTEuOTQuYmIKQEAgLTAsMCArMSw0NSBAQAorU1VNTUFSWSA9ICJHZW5lcmljIGZvbnQgY29uZmlndXJhdGlvbiBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiRm9udGNvbmZpZyBpcyBhIGZvbnQgY29uZmlndXJhdGlvbiBhbmQgY3VzdG9taXphdGlvbiBsaWJyYXJ5LCB3aGljaCBcCitkb2VzIG5vdCBkZXBlbmQgb24gdGhlIFggV2luZG93IFN5c3RlbS4gSXQgaXMgZGVzaWduZWQgdG8gbG9jYXRlIFwKK2ZvbnRzIHdpdGhpbiB0aGUgc3lzdGVtIGFuZCBzZWxlY3QgdGhlbSBhY2NvcmRpbmcgdG8gcmVxdWlyZW1lbnRzIFwKK3NwZWNpZmllZCBieSBhcHBsaWNhdGlvbnMuIFwKK0ZvbnRjb25maWcgaXMgbm90IGEgcmFzdGVyaXphdGlvbiBsaWJyYXJ5LCBub3IgZG9lcyBpdCBpbXBvc2UgYSBcCitwYXJ0aWN1bGFyIHJhc3Rlcml6YXRpb24gbGlicmFyeSBvbiB0aGUgYXBwbGljYXRpb24uIFRoZSBYLXNwZWNpZmljIFwKK2xpYnJhcnkgJ1hmdCcgdXNlcyBmb250Y29uZmlnIGFsb25nIHdpdGggZnJlZXR5cGUgdG8gc3BlY2lmeSBhbmQgXAorcmFzdGVyaXplIGZvbnRzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mb250Y29uZmlnLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9Zm9udGNvbmZpZyIKKworTElDRU5TRSA9ICJNSVQtc3R5bGUgJiBNSVQgJiBQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdhMDQ0OWU5YmM1MzcwNDAyYTk0YzAwMjA0YmVjYTNkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9mY2ZyZWV0eXBlLmM7ZW5kbGluZT00NTttZDU9NWQ5NTEzZTMxOTZhMWZiZmRmYTk0MDUxYzA5ZGZjODQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2ZjY2FjaGUuYztiZWdpbmxpbmU9MTE5OTtlbmRsaW5lPTEyMTQ7bWQ1PTAzMjZjZmViNGE3MzMzZGQ0ZGQyNWZiYmM0YjlmMjdmIgorCitTRUNUSU9OID0gImxpYnMiCisKK0RFUEVORFMgPSAiZXhwYXQgZnJlZXR5cGUgemxpYiIKKworU1JDX1VSSSA9ICJodHRwOi8vZm9udGNvbmZpZy5vcmcvcmVsZWFzZS9mb250Y29uZmlnLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9yZXZlcnQtc3RhdGljLXBrZ2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI0NzliZTg3MGM3ZjgzZjE1Zjg3YmFjMDg1YjYxZDY0MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3M2Y2ZDMyM2M3YmNmYmRlMjVkNzgzOTc2NzUxOTFkNTViOGY0MTM5MTMyYzZhOTQ0NDQxMGYzYTJkOGE5YTk1IgorCitQQUNLQUdFUyA9KyAiZm9udGNvbmZpZy11dGlscyIKK0ZJTEVTXyR7UE59ID0rICIke2RhdGFkaXJ9L3htbC8qIgorRklMRVNfZm9udGNvbmZpZy11dGlscyA9ICIke2JpbmRpcn0vKiIKKworIyBXb3JrIGFyb3VuZCBwYXN0IGJyZWFrYWdlIGluIGRlYmlhbi5iYmNsYXNzCitSUFJPVklERVNfZm9udGNvbmZpZy11dGlscyA9ICJsaWJmb250Y29uZmlnLXV0aWxzIgorUlJFUExBQ0VTX2ZvbnRjb25maWctdXRpbHMgPSAibGliZm9udGNvbmZpZy11dGlscyIKK1JDT05GTElDVFNfZm9udGNvbmZpZy11dGlscyA9ICJsaWJmb250Y29uZmlnLXV0aWxzIgorREVCSUFOX05PQVVUT05BTUVfZm9udGNvbmZpZy11dGlscyA9ICIxIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRk9OVENPTkZJR19DQUNIRV9ESVIgPz0gIiR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvZm9udGNvbmZpZyIKKworRVhUUkFfT0VDT05GID0gIiAtLWRpc2FibGUtZG9jcyAtLXdpdGgtZGVmYXVsdC1mb250cz0ke2RhdGFkaXJ9L2ZvbnRzIC0td2l0aC1jYWNoZS1kaXI9JHtGT05UQ09ORklHX0NBQ0hFX0RJUn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZnJlZXR5cGUvZnJlZXR5cGVfMi42LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZnJlZXR5cGUvZnJlZXR5cGVfMi42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNTk5YzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mcmVldHlwZS9mcmVldHlwZV8yLjYuYmIKQEAgLTAsMCArMSw2MCBAQAorU1VNTUFSWSA9ICJGcmVldHlwZSBmb250IHJlbmRlcmluZyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiRnJlZVR5cGUgaXMgYSBzb2Z0d2FyZSBmb250IGVuZ2luZSB0aGF0IGlzIGRlc2lnbmVkIHRvIGJlIHNtYWxsLCBlZmZpY2llbnQsIFwKK2hpZ2hseSBjdXN0b21pemFibGUsIGFuZCBwb3J0YWJsZSB3aGlsZSBjYXBhYmxlIG9mIHByb2R1Y2luZyBoaWdoLXF1YWxpdHkgb3V0cHV0IChnbHlwaCBcCitpbWFnZXMpLiBJdCBjYW4gYmUgdXNlZCBpbiBncmFwaGljcyBsaWJyYXJpZXMsIGRpc3BsYXkgc2VydmVycywgZm9udCBjb252ZXJzaW9uIHRvb2xzLCB0ZXh0IFwKK2ltYWdlIGdlbmVyYXRpb24gdG9vbHMsIGFuZCBtYW55IG90aGVyIHByb2R1Y3RzIGFzIHdlbGwuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVldHlwZS5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL3NhdmFubmFoLm5vbmdudS5vcmcvYnVncy8/Z3JvdXA9ZnJlZXR5cGUiCisKK0xJQ0VOU0UgPSAiRnJlZVR5cGUgfCBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kb2NzL0xJQ0VOU0UuVFhUO21kNT1jMDE3ZmYxN2ZjNmYwNzk0YWRmOTNkYjU1NTljY2Q1NiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kb2NzL0ZUTC5UWFQ7bWQ1PWQ0NzllODM3OTdmNjk5ZmU4NzNiMzhkYWRkMGZjZDRjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RvY3MvR1BMdjIuVFhUO21kNT04ZWYzODA0NzZmNjQyYzIwZWJmNDBmZWNiMGFkZDJlYyIKKworU0VDVElPTiA9ICJsaWJzIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9mcmVldHlwZS9mcmVldHlwZS0ke1BWfS50YXIuYnoyIgorU1JDX1VSSVttZDVzdW1dID0gIjU2ODI4OTBjYjAyNjdmNjY3MWRkM2RlNmVhYmQzZTY5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg0NjlmYjgxMjQ3NjRmODUwMjljYzgyNDdjMzFlMTMyYTJjNWU1MTA4NGRkY2UyYTQ0ZWEzMmVlNGFlODM0N2UiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vZnJlZXR5cGUtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgcGtnY29uZmlnIGJpbmNvbmZpZy1kaXNhYmxlZCBtdWx0aWxpYl9oZWFkZXIKKworTElCVE9PTCA9ICIke1N9L2J1aWxkcy91bml4LyR7SE9TVF9TWVN9LWxpYnRvb2wiCitFWFRSQV9PRU1BS0UgPSAiJ0xJQlRPT0w9JHtMSUJUT09MfSciCitFWFRSQV9PRU1BS0VfY2xhc3MtbmF0aXZlID0gIiIKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtemxpYiAtLXdpdGhvdXQtYnppcDIgQ0NfQlVJTEQ9JyR7QlVJTERfQ0N9JyIKK1RBUkdFVF9DUFBGTEFHUyArPSAiLURfRklMRV9PRkZTRVRfQklUUz02NCIKKworCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1twaXhtYXBdID0gIi0td2l0aC1wbmcsLS13aXRob3V0LXBuZyxsaWJwbmciCisjIFRoaXMgcmVzdWx0cyBpbiBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgc28gZW5hYmxpbmcgaXMgbm9uLXRyaXZpYWwKK1BBQ0tBR0VDT05GSUdbaGFyZmJ1enpdID0gIi0td2l0aC1oYXJmYnV6eiwtLXdpdGhvdXQtaGFyZmJ1enosaGFyZmJ1enoiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwljZCBidWlsZHMvdW5peAorCWxpYnRvb2xpemUgLS1mb3JjZSAtLWNvcHkKKwlhY2xvY2FsIC1JIC4KKwlnbnUtY29uZmlnaXplIC0tZm9yY2UKKwlhdXRvY29uZgorCWNkICR7U30KKwlvZV9ydW5jb25mCit9CisKK2RvX2NvbmZpZ3VyZV9jbGFzcy1uYXRpdmUoKSB7CisJKGNkIGJ1aWxkcy91bml4ICYmIGdudS1jb25maWdpemUpIHx8IGRpZSAiZmFpbHVyZSBydW5uaW5nIGdudS1jb25maWdpemUiCisJb2VfcnVuY29uZgorfQorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisJJHtCVUlMRF9DQ30gLW8gb2Jqcy9hcGluYW1lcyBzcmMvdG9vbHMvYXBpbmFtZXMuYworfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlvZV9tdWx0aWxpYl9oZWFkZXIgZnJlZXR5cGUyL2NvbmZpZy9mdGNvbmZpZy5oCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mc3Rlc3RzL2ZzdGVzdHNfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZnN0ZXN0cy9mc3Rlc3RzX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWMzM2Y0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZnN0ZXN0cy9mc3Rlc3RzX2dpdC5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIlZhcmlvdXMgYmVuY2htYXJuaW5nIHRlc3RzIGZvciBYIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vLWhhbmQuY29tIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiWmxpYiIKK0RFUEVORFMgPSAicGFuZ28gbGlieGV4dCBsaWJ4ZnQgdmlydHVhbC9saWJ4MTEgZ3RrKyIKKworU1JDUkVWID0gImU1OTM5ZmY2MDhiOTVjZGQ0ZDBhYjBlMTkzNTc4MWFiOWEyNzZhYzAiCitQViA9ICIwLjErZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly90ZXN0LXBhbmdvLWdkay5jO2VuZGxpbmU9MjQ7bWQ1PTFlZTc0ZWM4NTFlY2RhNTdlYjdhYzZjYzE4MGY3NjU1IgorCitTID0gIiR7V09SS0RJUn0vZ2l0L3Rlc3RzIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXcvYXV0b3Rvb2xzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3L2F1dG90b29scy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGZlMDg3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3L2F1dG90b29scy5wYXRjaApAQCAtMCwwICsxLDE0OSBAQAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBnbGV3L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZ2xldy9NYWtlZmlsZS5hbQkyMDA5LTEyLTAyIDAwOjMwOjIzLjI5NjY0MTY2MyArMDEwMAorQEAgLTAsMCArMSw1IEBACisrCisrQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQgLS1pbnN0YWxsCisrCisrU1VCRElSUyA9IGluY2x1ZGUgc3JjCisrCitJbmRleDogZ2xldy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnbGV3L2NvbmZpZ3VyZS5hYwkyMDA5LTEyLTAyIDAwOjMwOjIzLjI5NjY0MTY2MyArMDEwMAorQEAgLTAsMCArMSw2NyBAQAorKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKysjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCisrCisrQUNfUFJFUkVRKFsyLjYyXSkKKytBQ19JTklUKFtnbGV3XSwgWzEuOS4wXSwgW0JVRy1SRVBPUlQtQUREUkVTU10pCisrQUNfQ09ORklHX1NSQ0RJUihbc3JjL2dsZXcuY10pCisrQUNfQ09ORklHX0hFQURFUlMoW2NvbmZpZy5oXSkKKytBTV9JTklUX0FVVE9NQUtFKFstV2FsbCAtV2Vycm9yIGZvcmVpZ25dKQorK0FDX0NPTkZJR19NQUNST19ESVIoW200XSkKKysKKytMVF9JTklUCisrCisrIyBDaGVja3MgZm9yIHByb2dyYW1zLgorK0FDX1BST0dfQ0MKKytBQ19QUk9HX0lOU1RBTEwKKytBQ19QUk9HX0xOX1MKKysKKysjIENoZWNrcyBmb3IgbGlicmFyaWVzLgorKworKyMgQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMuCisrQUNfQ0hFQ0tfSEVBREVSUyhbaW50dHlwZXMuaCBzdGRkZWYuaCBzdGRpbnQuaCBzdGRsaWIuaCBzdHJpbmcuaF0pCisrCisrIyBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgorK0FDX1RZUEVfSU5UMzJfVAorK0FDX1RZUEVfSU5UNjRfVAorK0FDX1RZUEVfVUlOVDY0X1QKKytBQ19DSEVDS19UWVBFUyhbcHRyZGlmZl90XSkKKysKKysjIENoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMuCisrQUNfRlVOQ19NQUxMT0MKKytBQ19DSEVDS19GVU5DUyhbc3RydG9sXSkKKysKKysjIENoZWNrIGZvciBwa2djb25maWcgbGlicworKworK1BLR19DSEVDS19NT0RVTEVTKFtYMTFdLCBbeDExXSkKKytBQ19TVUJTVChbWDExX0xJQlNdKQorK0FDX1NVQlNUKFtYMTFfQ0ZMQUdTXSkKKysKKytQS0dfQ0hFQ0tfTU9EVUxFUyhbWE1VXSwgW3htdV0pCisrQUNfU1VCU1QoW1hNVV9MSUJTXSkKKytBQ19TVUJTVChbWE1VX0NGTEFHU10pCisrCisrUEtHX0NIRUNLX01PRFVMRVMoW1hJXSwgW3hpXSkKKytBQ19TVUJTVChbWElfTElCU10pCisrQUNfU1VCU1QoW1hJX0NGTEFHU10pCisrCisrUEtHX0NIRUNLX01PRFVMRVMoW1hFWFRdLCBbeGV4dF0pCisrQUNfU1VCU1QoW1hFWFRfTElCU10pCisrQUNfU1VCU1QoW1hFWFRfQ0ZMQUdTXSkKKysKKysjIENoZWNrIGZvciBHTFUgaXMgZW5vdWdoIGFuZCBpbXBsZXMgZ2wgc28gbm8gZG91YmxlZCAtbEdMIGluIExERkxBR1MKKytQS0dfQ0hFQ0tfTU9EVUxFUyhbR0xVXSwgW2dsdV0pCisrQUNfU1VCU1QoW0dMVV9MSUJTXSkKKytBQ19TVUJTVChbR0xVX0NGTEFHU10pCisrCisrIyBFTkFCTEUgb3B0aW9uIGZvciBNdWx0aXBsZSBSZW5kZXJpbmcgQ29udGV4dHMgc3VwcG9ydAorK0FDX0NIRUNLX0VOQUJMRV9HTEVXTVgKKysKKysjIGZvciBub3cgd2UgdXNlIHRoZSBzYW1lIHZlcnNpb24gYXMgdGhlIHBhY2thZ2UsIGJ1dCB0aGF0IHNob3VsZCBiZSBhdm9pZGVkCisrIyBpbiB0aGUgZnV0dXJlCisrCisrQUNfU1VCU1QoW0xJQkdMRVdfU09fVkVSU0lPTl0sIFsxOjk6MF0pCisrCisrQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZQorKyAgICAgICAgICAgICAgICAgaW5jbHVkZS9NYWtlZmlsZQorKyAgICAgICAgICAgICAgICAgc3JjL01ha2VmaWxlXSkKKytBQ19PVVRQVVQKK0luZGV4OiBnbGV3L3NyYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGdsZXcvc3JjL01ha2VmaWxlLmFtCTIwMDktMTItMDIgMDA6MzM6NDguNjkwNzg2MTEwICswMTAwCitAQCAtMCwwICsxLDM1IEBACisrCisrQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZQorKworK2lmIEVOQUJMRV9HTEVXTVgKKytBTV9DUFBGTEFHUyArPSAtREdMRVdfTVgKKytlbmRpZgorKworK0FNX0NGTEFHUyA9IEBYMTFfQ0ZMQUdTQCBcCisrICAgICAgICAgICAgQFhNVV9DRkxBR1NAIFwKKysgICAgICAgICAgICBAWElfQ0ZMQUdTQCBcCisrICAgICAgICAgICAgQFhFWFRfQ0ZMQUdTQCBcCisrICAgICAgICAgICAgQEdMVV9DRkxBR1NACisrCisrbGliX0xUTElCUkFSSUVTID0gbGliR0xFVy5sYQorKworK2xpYkdMRVdfbGFfU09VUkNFUyA9IGdsZXcuYworKworK2xpYkdMRVdfbGFfTElCQUREID0gQFgxMV9MSUJTQCBcCisrICAgICAgICAgICAgICAgICAgICBAWE1VX0xJQlNAIFwKKysgICAgICAgICAgICAgICAgICAgIEBYSV9MSUJTQCBcCisrICAgICAgICAgICAgICAgICAgICBAWEVYVF9MSUJTQCBcCisrICAgICAgICAgICAgICAgICAgICBAR0xVX0xJQlNACisrCisrbGliR0xFV19sYV9MREZMQUdTID0gLXZlcnNpb24tbnVtYmVyIEBMSUJHTEVXX1NPX1ZFUlNJT05ACisrCisrYmluX1BST0dSQU1TID0gZ2xld2luZm8gdmlzdWFsaW5mbworKworK2dsZXdpbmZvX1NPVVJDRVMgPSBnbGV3aW5mby5jCisrCisrZ2xld2luZm9fTERBREQgPSBsaWJHTEVXLmxhCisrCisrdmlzdWFsaW5mb19TT1VSQ0VTID0gIHZpc3VhbGluZm8uYworKworK3Zpc3VhbGluZm9fTERBREQgPSBsaWJHTEVXLmxhCisrCitJbmRleDogZ2xldy9tNC9nbGV3bXgubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnbGV3L200L2dsZXdteC5tNAkyMDA5LTEyLTAyIDAwOjMwOjIzLjI5NjY0MTY2MyArMDEwMAorQEAgLTAsMCArMSwxMSBAQAorKworK0FDX0RFRlVOKFtBQ19DSEVDS19FTkFCTEVfR0xFV01YXSxbCisrQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGluY2x1ZGUgTXVsdGlwbGUgUmVuZGVyaW5nIENvbnRleHRzIHN1cHBvcnRdKQorK0FDX0FSR19FTkFCTEUoW2dsZXdteF0sCisrICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1nbGV3bXhdLCBbZW5hYmxlIEdMRVcgTXVsdGlwbGUgUmVuZGVyaW5nIENvbnRleHRzIChkZWZhdWx0IGlzIG5vKV0pXSwKKysgICBbRU5BQkxFX0dMRVdNWD0iJGVuYWJsZXZhbCJdLAorKyAgIFtFTkFCTEVfR0xFV01YPSJubyJdKQorK0FDX01TR19SRVNVTFQoWyR7RU5BQkxFX0dMRVdNWH1dKQorK0FNX0NPTkRJVElPTkFMKFtFTkFCTEVfR0xFV01YXSwgW3Rlc3QgeCIke0VOQUJMRV9HTEVXTVh9IiA9ICJ4eWVzIl0pCisrXSkKKysKK0luZGV4OiBnbGV3L2luY2x1ZGUvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnbGV3L2luY2x1ZGUvTWFrZWZpbGUuYW0JMjAwOS0xMi0wMiAwMDozMDoyMy4yOTY2NDE2NjMgKzAxMDAKK0BAIC0wLDAgKzEsMyBAQAorKworK25vYmFzZV9pbmNsdWRlX0hFQURFUlMgPSBHTC9nbGV3LmggIEdML2dseGV3LmggIEdML3dnbGV3LmgKKysKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xldy9maXgtZ2xldy5wYy1pbnN0YWxsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3L2ZpeC1nbGV3LnBjLWluc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBhOTlhZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xldy9maXgtZ2xldy5wYy1pbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKKworV2UgbWFpbnRhaW4gdGhlIGF1dG90b29scyBjb25maWd1cmUuYWMgYW5kIE1ha2VmaWxlLmFtLCB0byBjb3JyZWN0bHkKK3Byb3ZpZGUgdGhlIGdsZXcucGMsIHRoZSBmb2xsb3dpbmcgcGF0Y2ggaXMgbmVlZGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogZ2xldy0xLjExLjAvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbGV3LTEuMTEuMC5vcmlnL01ha2VmaWxlLmFtCisrKysgZ2xldy0xLjExLjAvTWFrZWZpbGUuYW0KK0BAIC0zLDMgKzMsNSBAQCBBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNCAtLWluc3RhbGwKKyAKKyBTVUJESVJTID0gaW5jbHVkZSBzcmMKKyAKKytwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisrcGtnY29uZmlnX0RBVEEgPSBnbGV3LnBjCitJbmRleDogZ2xldy0xLjExLjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2xldy0xLjExLjAub3JpZy9jb25maWd1cmUuYWMKKysrKyBnbGV3LTEuMTEuMC9jb25maWd1cmUuYWMKK0BAIC02Niw1ICs2Niw2IEBAIEFDX1NVQlNUKFtMSUJHTEVXX1NPX1ZFUlNJT05dLCBbMTo5OjBdKQorIAorIEFDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGUKKyAgICAgICAgICAgICAgICAgIGluY2x1ZGUvTWFrZWZpbGUKKy0gICAgICAgICAgICAgICAgIHNyYy9NYWtlZmlsZV0pCisrICAgICAgICAgICAgICAgICBzcmMvTWFrZWZpbGUKKysgICAgICAgICAgICAgICAgIGdsZXcucGNdKQorIEFDX09VVFBVVAorSW5kZXg6IGdsZXctMS4xMS4wL2dsZXcucGMuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbGV3LTEuMTEuMC5vcmlnL2dsZXcucGMuaW4KKysrKyBnbGV3LTEuMTEuMC9nbGV3LnBjLmluCitAQCAtNSw3ICs1LDcgQEAgaW5jbHVkZWRpcj0ke3ByZWZpeH0vaW5jbHVkZS9HTAorIAorIE5hbWU6IGdsZXcKKyBEZXNjcmlwdGlvbjogVGhlIE9wZW5HTCBFeHRlbnNpb24gV3JhbmdsZXIgbGlicmFyeQorLVZlcnNpb246IEB2ZXJzaW9uQAorLUNmbGFnczogLUkke2luY2x1ZGVkaXJ9IEBjZmxhZ3NACistTGliczogLUwke2xpYmRpcn0gLWxAbGlibmFtZUAKKy1SZXF1aXJlczogQHJlcXVpcmVzbGliQAorK1ZlcnNpb246IEBWRVJTSU9OQAorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9IEBDRkxBR1NACisrTGliczogLUwke2xpYmRpcn0gLWxHTEVXCisrUmVxdWlyZXM6IGdsdQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3L2dsZXdfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3L2dsZXdfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MDdlZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXcvZ2xld19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoaXMgcGF0Y2ggZml4ZXMgZm9sbG93aW5nIGlzc3VlIHdpdGggYXV0b21ha2UgMS4xMgorCit8IGF1dG9tYWtlOiB3YXJuaW5ncyBhcmUgdHJlYXRlZCBhcyBlcnJvcnMKK3wgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9zaGFyZS9hdXRvbWFrZS0xLjEyL2FtL2x0bGlicmFyeS5hbTogd2FybmluZzogJ2xpYkdMRVcubGEnOiBsaW5raW5nIGxpYnRvb2wgbGlicmFyaWVzIHVzaW5nIGEgbm9uLVBPU0lYCit8IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3Ivc2hhcmUvYXV0b21ha2UtMS4xMi9hbS9sdGxpYnJhcnkuYW06IGFyY2hpdmVyIHJlcXVpcmVzICdBTV9QUk9HX0FSJyBpbiAnY29uZmlndXJlLmFjJworCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNS8wMworCitJbmRleDogZ2xldy0xLjcuMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbGV3LTEuNy4wLm9yaWcvY29uZmlndXJlLmFjCisrKysgZ2xldy0xLjcuMC9jb25maWd1cmUuYWMKK0BAIC0xNCw2ICsxNCw5IEBAIExUX0lOSVQKKyBBQ19QUk9HX0NDCisgQUNfUFJPR19JTlNUQUxMCisgQUNfUFJPR19MTl9TCisrIyBhdXRvbWFrZSAxLjEyIHNlZW1zIHRvIHJlcXVpcmUgdGhpcywgYnV0IGF1dG9tYWtlIDEuMTEgZG9lc24ndCByZWNvZ25pemUgaXQKKyttNF9wYXR0ZXJuX2FsbG93KFtBTV9QUk9HX0FSXSkKKytBTV9QUk9HX0FSCisgCisgIyBDaGVja3MgZm9yIGxpYnJhcmllcy4KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xld18xLjEyLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXdfMS4xMi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMjhjNGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXdfMS4xMi4wLmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiT3BlbkdMIGV4dGVuc2lvbiBsb2FkaW5nIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJUaGUgT3BlbkdMIEV4dGVuc2lvbiBXcmFuZ2xlciBMaWJyYXJ5IChHTEVXKSBpcyBhIGNyb3NzLXBsYXRmb3JtIG9wZW4tc291cmNlIEMvQysrIGV4dGVuc2lvbiBsb2FkaW5nIGxpYnJhcnkuIgorSE9NRVBBR0UgPSAiaHR0cDovL2dsZXcuc291cmNlZm9yZ2UubmV0LyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD02NzU4NiIKK1NFQ1RJT04gPSAieDExIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9MmFjMjUxNTU4ZGU2ODVjNmI5NDc4ZDg5YmUzMTQ5YzIiCisKK0RFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgdmlydHVhbC9saWJnbCBsaWJnbHUgbGlieGV4dCBsaWJ4aSBsaWJ4bXUiCisKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcHJvamVjdC9nbGV3L2dsZXcvJHtQVn0vZ2xldy0ke1BWfS50Z3ogXAorICAgICAgICAgICBmaWxlOi8vYXV0b3Rvb2xzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dsZXdfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1nbGV3LnBjLWluc3RhbGwucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjAxMjQ2YzdlY2QxMzVkOTliZTAzMWFhNjNmODZkY2ExIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFmNTgxMDNmNDgyNGI0NDNlN2ZhNGVkM2FmNTkzYjhlZGFjNmYzYTdiZTNiMzA5MTFlZGJjNzM0NGY0OGU0YmYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2hhcmZidXp6L2hhcmZidXp6XzEuMC4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaGFyZmJ1enovaGFyZmJ1enpfMS4wLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcwYmQ5OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2hhcmZidXp6L2hhcmZidXp6XzEuMC4yLmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiVGV4dCBzaGFwaW5nIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJIYXJmQnV6eiBpcyBhbiBPcGVuVHlwZSB0ZXh0IHNoYXBpbmcgZW5naW5lLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvSGFyZkJ1enoiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PUhhcmZCdXp6IgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWUwMjFkZDZkZGE2ZmYxZTZiMTA0NDAwMmZjNjYyYjliIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9oYi11Y2RuL0NPUFlJTkc7bWQ1PTk5NGJhMGYxMjk1ZjE1YjRiZGE0OTk5YTViYmVkZGVmIFwKKyIKKworU0VDVElPTiA9ICJsaWJzIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL2hhcmZidXp6L3JlbGVhc2UvJHtCUH0udGFyLmJ6MiIKK1NSQ19VUklbbWQ1c3VtXSA9ICJlNzRmNjQ0MDQ1ZmU0MmMzOGEyNjQxZmMxZTgyYTgwMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiZWIzY2FmODY1NDAxMGZjZGNhNjFjODEwYTNhNzUzMjIzN2ZjNTY3ZWU0MjcxZGViNjc0YjVlZmJiZTNiNDY2IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgbGliX3BhY2thZ2UKKworREVQRU5EUyA9ICJnbGliLTIuMCBjYWlybyBmcmVldHlwZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtZ2xpYiAtLXdpdGgtZnJlZXR5cGUgLS13aXRoLWNhaXJvIC0td2l0aG91dC1ncmFwaGl0ZTIiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJpY3UiCitQQUNLQUdFQ09ORklHW2ljdV0gPSAiLS13aXRoLWljdSwtLXdpdGhvdXQtaWN1LGljdSIKKworUEFDS0FHRVMgPSsgIiR7UE59LWljdSAke1BOfS1pY3UtZGJnICR7UE59LWljdS1kZXYiCisKK0ZJTEVTXyR7UE59LWljdSA9ICIke2xpYmRpcn0vbGliaGFyZmJ1enotaWN1LnNvLioiCitGSUxFU18ke1BOfS1pY3UtZGJnID0gIiR7bGliZGlyfS8uZGVidWcvbGliaGFyZmJ1enotaWN1LnNvKiIKK0ZJTEVTXyR7UE59LWljdS1kZXYgPSAiJHtsaWJkaXJ9L2xpYmhhcmZidXp6LWljdS5sYSBcCisgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJoYXJmYnV6ei1pY3Uuc28gXAorICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGtnY29uZmlnL2hhcmZidXp6LWljdS5wYyBcCisiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS1jbHV0dGVyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2UtY2x1dHRlci5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGYyNWNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2UtY2x1dHRlci5iYgpAQCAtMCwwICsxLDEzIEBACitERVNDUklQVElPTiA9ICJBbiBpbWFnZSB3aXRoIHN1cHBvcnQgZm9yIHRoZSBPcGVuIEdMLWJhc2VkIHRvb2xraXQgQ2x1dHRlciwgXAord2hpY2ggZW5hYmxlcyBkZXZlbG9wbWVudCBvZiByaWNoIGFuZCBhbmltYXRlZCBncmFwaGljYWwgdXNlciBpbnRlcmZhY2VzLiIKKworSU1BR0VfRkVBVFVSRVMgKz0gInNwbGFzaCBwYWNrYWdlLW1hbmFnZW1lbnQgeDExLWJhc2UgeDExLXNhdG8gc3NoLXNlcnZlci1kcm9wYmVhciIKKworTElDRU5TRSA9ICJNSVQiCisKK0lNQUdFX0lOU1RBTEwgPSAiXAorICAgICR7Q09SRV9JTUFHRV9CQVNFX0lOU1RBTEx9IFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1jbHV0dGVyLWNvcmUgXAorICAgICIKKworaW5oZXJpdCBjb3JlLWltYWdlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS1kaXJlY3RmYi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLWRpcmVjdGZiLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NDExOTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS1kaXJlY3RmYi5iYgpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIkFuIGltYWdlIHRoYXQgdXNlcyBEaXJlY3RGQiBpbnN0ZWFkIG9mIFgxMSIKK0xJQ0VOU0UgPSAiTUlUIgorCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitpbmhlcml0IGNvcmUtaW1hZ2UgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJkaXJlY3RmYiIKK0NPTkZMSUNUX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK0lNQUdFX0lOU1RBTEwgKz0gIlwKKwkke0NPUkVfSU1BR0VfQkFTRV9JTlNUQUxMfSBcCisJcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lIFwKKwlwYWNrYWdlZ3JvdXAtY29yZS1kaXJlY3RmYiBcCisiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS13ZXN0b24uYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS13ZXN0b24uYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJlMjcxZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLXdlc3Rvbi5iYgpAQCAtMCwwICsxLDExIEBACitTVU1NQVJZID0gIkEgdmVyeSBiYXNpYyBXYXlsYW5kIGltYWdlIHdpdGggYSB0ZXJtaW5hbCIKKworSU1BR0VfRkVBVFVSRVMgKz0gInNwbGFzaCBwYWNrYWdlLW1hbmFnZW1lbnQgc3NoLXNlcnZlci1kcm9wYmVhciBod2NvZGVjcyIKKworTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgY29yZS1pbWFnZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIndheWxhbmQiCisKK0NPUkVfSU1BR0VfQkFTRV9JTlNUQUxMICs9ICJ3ZXN0b24gd2VzdG9uLWluaXQgd2VzdG9uLWV4YW1wbGVzIGd0ayszLWRlbW8gY2x1dHRlci0xLjAtZXhhbXBsZXMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS14MTEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS14MTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ1NWJiOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLXgxMS5iYgpAQCAtMCwwICsxLDkgQEAKK1NVTU1BUlkgPSAiQSB2ZXJ5IGJhc2ljIFgxMSBpbWFnZSB3aXRoIGEgdGVybWluYWwiCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJzcGxhc2ggcGFja2FnZS1tYW5hZ2VtZW50IHgxMS1iYXNlIgorCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBjb3JlLWltYWdlIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHkvMDAwMS1zZWxlY3QtcGxhdGZvcm1zLWJhc2VkLW9uLWNvbmZpZ3VyYXRpb24tcmVzdWx0cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5LzAwMDEtc2VsZWN0LXBsYXRmb3Jtcy1iYXNlZC1vbi1jb25maWd1cmF0aW9uLXJlc3VsdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc0YzhlOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5LzAwMDEtc2VsZWN0LXBsYXRmb3Jtcy1iYXNlZC1vbi1jb25maWd1cmF0aW9uLXJlc3VsdHMucGF0Y2gKQEAgLTAsMCArMSwxMjggQEAKK0Zyb20gM2E5MzE1MGJjMGFlYzg2YWZkYjdkMDUzMjQ3ZGMyNDQ4OTI1ZTA5YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9BbmRyZWFzPTIwTT1DMz1CQ2xsZXI/PSA8c2Nobml0emVsdG9ueUBnb29nbGVtYWlsLmNvbT4KK0RhdGU6IFdlZCwgNiBNYXkgMjAxNSAxMDo0NToyMiArMDIwMAorU3ViamVjdDogW1BBVENIIDEvMl0gc2VsZWN0IHBsYXRmb3JtcyBiYXNlZCBvbiBjb25maWd1cmF0aW9uIHJlc3VsdHMKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgWzFdCisKK1sxXSBodHRwczovL2dpdGh1Yi5jb20vYW5ob2x0L2xpYmVwb3h5L3B1bGwvNTIKKworU2lnbmVkLW9mZi1ieTogQW5kcmVhcyBNw7xsbGVyIDxzY2huaXR6ZWx0b255QGdvb2dsZW1haWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjICAgICAgICAgIHwgMTMgKysrKystLS0tLS0tLQorIHNyYy9kaXNwYXRjaF9jb21tb24uYyB8ICA5ICsrKysrKy0tLQorIHNyYy9kaXNwYXRjaF9jb21tb24uaCB8ICA5ICsrKysrLS0tLQorIDMgZmlsZXMgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGE1MmZjNTguLmJkZDcwZGEgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTU4LDYgKzU4LDEwIEBAIEFDX0NIRUNLX0hFQURFUihbS0hSL2tocnBsYXRmb3JtLmhdLAorICMgdWludHB0cl90IHRvIGEgdm9pZCAqIikgYnkgZGVmYXVsdC4gIEtpbGwgdGhhdC4KKyBYT1JHX1RFU1RTRVRfQ0ZMQUcoQ1dBUk5GTEFHUywgWy1Xbm8taW50LWNvbnZlcnNpb25dKQorIAorK1BLR19DSEVDS19NT0RVTEVTKFgxMSwgW3gxMV0sIFt4MTE9eWVzXSwgW3gxMT1ub10pCisrCisrQU1fQ09ORElUSU9OQUwoSEFWRV9YMTEsIHRlc3QgeCR4MTEgPSB4eWVzKQorKworIGhhc196bm93PXllcworIAorIGNhc2UgJGhvc3Rfb3MgaW4KK0BAIC04Niw3ICs5MCw3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgICAgIDs7CisgICAgICopCisgICAgICAgICBidWlsZF9lZ2w9eWVzCistICAgICAgICBidWlsZF9nbHg9eWVzCisrICAgICAgICBidWlsZF9nbHg9JHgxMQorICAgICAgICAgYnVpbGRfd2dsPW5vCisgICAgICAgICAjIE9uIHBsYXRmb3JtcyB3aXRoIGRsb3Blbiwgd2UgbG9hZCBldmVyeXRoaW5nIGR5bmFtaWNhbGx5IGFuZAorICAgICAgICAgIyBkb24ndCBsaW5rIGFnYWluc3QgYSBzcGVjaWZpYyB3aW5kb3cgc3lzdGVtIG9yIEdMIGltcGxlbWVudGF0aW9uLgorQEAgLTE0NCwxMyArMTQ4LDYgQEAgZXNhYworIAorIEFDX1NVQlNUKFtWSVNJQklMSVRZX0NGTEFHU10pCisgCistUEtHX0NIRUNLX01PRFVMRVMoWDExLCBbeDExXSwgW3gxMT15ZXNdLCBbeDExPW5vXSkKKy1pZiB0ZXN0IHgkeDExID0geG5vIC1hIHgkYnVpbGRfZ2x4ID0geHllczsgdGhlbgorLSAgICBBQ19NU0dfRVJST1IoW2xpYlgxMSBoZWFkZXJzIChsaWJ4MTEtZGV2KSByZXF1aXJlZCB0byBidWlsZCB3aXRoIEdMWCBzdXBwb3J0XSkKKy1maQorLQorLUFNX0NPTkRJVElPTkFMKEhBVkVfWDExLCB0ZXN0IHgkeDExID0geHllcykKKy0KKyBQS0dfQ0hFQ0tfTU9EVUxFUyhHTCwgW2dsXSwgW2dsPXllc10sIFtnbD1ub10pCisgCisgQUNfQ09ORklHX0ZJTEVTKFsKK2RpZmYgLS1naXQgYS9zcmMvZGlzcGF0Y2hfY29tbW9uLmMgYi9zcmMvZGlzcGF0Y2hfY29tbW9uLmMKK2luZGV4IDRlMzRkNmUuLjJhYjg0ZWQgMTAwNjQ0CistLS0gYS9zcmMvZGlzcGF0Y2hfY29tbW9uLmMKKysrKyBiL3NyYy9kaXNwYXRjaF9jb21tb24uYworQEAgLTYxNSwxMCArNjE1LDEzIEBAIGVwb3h5X2dldF9wcm9jX2FkZHJlc3MoY29uc3QgY2hhciAqbmFtZSkKKyAjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyAgICAgcmV0dXJuIGVwb3h5X2dsX2Rsc3ltKG5hbWUpOworICNlbHNlCisrI2lmIFBMQVRGT1JNX0hBU19HTFgKKyAgICAgaWYgKGVwb3h5X2N1cnJlbnRfY29udGV4dF9pc19nbHgoKSkgeworICAgICAgICAgcmV0dXJuIGdsWEdldFByb2NBZGRyZXNzQVJCKChjb25zdCBHTHVieXRlICopbmFtZSk7CistICAgIH0gZWxzZSB7CisrICAgIH0gZWxzZQorKyNlbmRpZiAvKiBQTEFURk9STV9IQVNfR0xYICovCisgI2lmIFBMQVRGT1JNX0hBU19FR0wKKysgICAgeworICAgICAgICAgR0xlbnVtIGVnbF9hcGkgPSBlcG94eV9lZ2xfZ2V0X2N1cnJlbnRfZ2xfY29udGV4dF9hcGkoKTsKKyAKKyAgICAgICAgIHN3aXRjaCAoZWdsX2FwaSkgeworQEAgLTYyOCwxMCArNjMxLDEwIEBAIGVwb3h5X2dldF9wcm9jX2FkZHJlc3MoY29uc3QgY2hhciAqbmFtZSkKKyAgICAgICAgIGNhc2UgRUdMX05PTkU6CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CistI2VuZGlmCisgICAgIH0KKysjZW5kaWYgLyogUExBVEZPUk1fSEFTX0VHTCAqLworICAgICBlcnJ4KDEsICJDb3VsZG4ndCBmaW5kIGN1cnJlbnQgR0xYIG9yIEVHTCBjb250ZXh0LlxuIik7CistI2VuZGlmCisrI2VuZGlmIC8qIF9XSU4zMiB8IF9fQVBQTEVfXyovCisgfQorIAorIHZvaWQKK2RpZmYgLS1naXQgYS9zcmMvZGlzcGF0Y2hfY29tbW9uLmggYi9zcmMvZGlzcGF0Y2hfY29tbW9uLmgKK2luZGV4IDZiODUwM2EuLjgyNjgxZTQgMTAwNjQ0CistLS0gYS9zcmMvZGlzcGF0Y2hfY29tbW9uLmgKKysrKyBiL3NyYy9kaXNwYXRjaF9jb21tb24uaAorQEAgLTIxLDEyICsyMSwxMyBAQAorICAqIElOIFRIRSBTT0ZUV0FSRS4KKyAgKi8KKyAKKysjaW5jbHVkZSA8Y29uZmlnLmg+CisgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyAKKyAjaWZkZWYgX1dJTjMyCisgI2RlZmluZSBQTEFURk9STV9IQVNfRUdMIDAKKyAjZGVmaW5lIFBMQVRGT1JNX0hBU19HTFggMAorLSNkZWZpbmUgUExBVEZPUk1fSEFTX1dHTCAxCisrI2RlZmluZSBQTEFURk9STV9IQVNfV0dMIEJVSUxEX1dHTAorICNkZWZpbmUgRVBPWFlfSU1QT1JURVhQT1JUIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorICNlbGlmIGRlZmluZWQoX19BUFBMRV9fKQorICNkZWZpbmUgUExBVEZPUk1fSEFTX0VHTCAwCitAQCAtMzQsMTMgKzM1LDEzIEBACisgI2RlZmluZSBQTEFURk9STV9IQVNfV0dMIDAKKyAjZGVmaW5lIEVQT1hZX0lNUE9SVEVYUE9SVAorICNlbGlmIGRlZmluZWQoQU5EUk9JRCkKKy0jZGVmaW5lIFBMQVRGT1JNX0hBU19FR0wgMQorKyNkZWZpbmUgUExBVEZPUk1fSEFTX0VHTCBCVUlMRF9FR0wKKyAjZGVmaW5lIFBMQVRGT1JNX0hBU19HTFggMAorICNkZWZpbmUgUExBVEZPUk1fSEFTX1dHTCAwCisgI2RlZmluZSBFUE9YWV9JTVBPUlRFWFBPUlQKKyAjZWxzZQorLSNkZWZpbmUgUExBVEZPUk1fSEFTX0VHTCAxCistI2RlZmluZSBQTEFURk9STV9IQVNfR0xYIDEKKysjZGVmaW5lIFBMQVRGT1JNX0hBU19FR0wgQlVJTERfRUdMCisrI2RlZmluZSBQTEFURk9STV9IQVNfR0xYIEJVSUxEX0dMWAorICNkZWZpbmUgUExBVEZPUk1fSEFTX1dHTCAwCisgI2RlZmluZSBFUE9YWV9JTVBPUlRFWFBPUlQKKyAjZW5kaWYKKy0tIAorMS45LjMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHkvMDAwMi1hZGQtYW4tb3B0aW9uLXRvLWRpc2FibGUtZ2x4LXN1cHBvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eS8wMDAyLWFkZC1hbi1vcHRpb24tdG8tZGlzYWJsZS1nbHgtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjJkNjg0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHkvMDAwMi1hZGQtYW4tb3B0aW9uLXRvLWRpc2FibGUtZ2x4LXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSAyNDg2OGNiZmI5ZGRhNWY2OTI5ZGQyNzdjNDdkMzVkZjAxNmU4NzU0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuZHJlYXM9MjBNPUMzPUJDbGxlcj89IDxzY2huaXR6ZWx0b255QGdvb2dsZW1haWwuY29tPgorRGF0ZTogV2VkLCA2IE1heSAyMDE1IDExOjA1OjQ4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBhZGQgYW4gb3B0aW9uIHRvIGRpc2FibGUgZ2x4IHN1cHBvcnQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKwordGhpcyBvcHRpb24gd291bGQgaGVscCB1cyBpbiB5b2N0byB0byBnZXQgZGV0ZXJtaW5pc3RpYyBidWlsZCByZXN1bHRzCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFsxXQorCitbMV0gaHR0cHM6Ly9naXRodWIuY29tL2FuaG9sdC9saWJlcG94eS9wdWxsLzUyCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlYXMgTcO8bGxlciA8c2Nobml0emVsdG9ueUBnb29nbGVtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDkgKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiZGQ3MGRhLi42YzcxNTNkIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC01OCw3ICs1OCwxNCBAQCBBQ19DSEVDS19IRUFERVIoW0tIUi9raHJwbGF0Zm9ybS5oXSwKKyAjIHVpbnRwdHJfdCB0byBhIHZvaWQgKiIpIGJ5IGRlZmF1bHQuICBLaWxsIHRoYXQuCisgWE9SR19URVNUU0VUX0NGTEFHKENXQVJORkxBR1MsIFstV25vLWludC1jb252ZXJzaW9uXSkKKyAKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhYMTEsIFt4MTFdLCBbeDExPXllc10sIFt4MTE9bm9dKQorK0FDX0FSR19FTkFCTEUoW2dseF0sCisrICAgICAgICAgICAgICAgIFtBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWdseF0sCisrCQkJCVtkaXNhYmxlIGlmIHlvdSBkb24ndCB3YW50IHgxMS9nbHggc3VwcG9ydF0pXSwKKysgICAgICAgICAgICAgICAgW10sCisrICAgICAgICAgICAgICAgIFtlbmFibGVfZ2x4PXllc10KKysgICAgICAgICAgICAgKQorKworK1BLR19DSEVDS19NT0RVTEVTKFgxMSwgW3gxMV0sIFt4MTE9JGVuYWJsZV9nbHhdLCBbeDExPW5vXSkKKyAKKyBBTV9DT05ESVRJT05BTChIQVZFX1gxMSwgdGVzdCB4JHgxMSA9IHh5ZXMpCisgCistLSAKKzEuOS4zCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5L25vLW5lZWQtZm9yLXB5dGhvbjMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eS9uby1uZWVkLWZvci1weXRob24zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiOGZlYTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eS9uby1uZWVkLWZvci1weXRob24zLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1RoZXJlIGlzIG5vIG5lZWQgdG8gdXNlIHB5dGhvbjMgYnkgdGhpcyBwYWNrYWdlICh0aGUgcHl0aG9uIHNjcmlwdHMKK3RoYXQgYXJlIHVzaW5nIGR1cmluZyBjb25maWd1cmF0aW9uIG9ubHkgbmVlZCBweXRob24yLjcrKQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IEdhcnkgVGhvbWFzIDxnYXJ5QG1sYmFzc29jLmNvbT4KKy0tCitJbmRleDogZ2l0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdpdC9jb25maWd1cmUuYWMKK0BAIC00MCw3ICs0MCw3IEBAIG00X2lmbmRlZihbWE9SR19NQUNST1NfVkVSU0lPTl0sCisgWE9SR19NQUNST1NfVkVSU0lPTigxLjgpCisgWE9SR19ERUZBVUxUX09QVElPTlMKKyAKKy1BQ19DSEVDS19QUk9HUyhbUFlUSE9OXSwgW3B5dGhvbjMgcHl0aG9uMiBweXRob25dKQorK0FDX0NIRUNLX1BST0dTKFtQWVRIT05dLCBbcHl0aG9uMiBweXRob25dKQorIAorICMgSW5pdGlhbGl6ZSBsaWJ0b29sCisgQUNfRElTQUJMRV9TVEFUSUMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5X2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDE3MjkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHlfZ2l0LmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiT3BlbkdMIGZ1bmN0aW9uIHBvaW50ZXIgbWFuYWdlbWVudCBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL2FuaG9sdC9saWJlcG94eS8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NThlZjRjODBkNDAxZTA3YmQ5ZWU4YjZiNThjZjQ2NGIiCisKKworU1JDX1VSSSA9ICIgXAorICAgIGdpdDovL2dpdGh1Yi5jb20vYW5ob2x0L2xpYmVwb3h5LmdpdCBcCisgICAgZmlsZTovLzAwMDEtc2VsZWN0LXBsYXRmb3Jtcy1iYXNlZC1vbi1jb25maWd1cmF0aW9uLXJlc3VsdHMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAyLWFkZC1hbi1vcHRpb24tdG8tZGlzYWJsZS1nbHgtc3VwcG9ydC5wYXRjaCBcCisgICAgZmlsZTovL25vLW5lZWQtZm9yLXB5dGhvbjMucGF0Y2ggXAorIgorU1JDUkVWPSJlMmMzM2FmNWJmY2ZjOWQxNjhmOWU3NzYxNTZkZDQ3YzMzZjQyOGIzIgorUFYgPSAiMS4zLjEiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitERVBFTkRTID0gInV0aWwtbWFjcm9zIHZpcnR1YWwvZWdsIgorCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUtZ2x4LCAtLWRpc2FibGUtZ2x4LCB2aXJ0dWFsL2xpYngxMSIKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZmFrZWtleS9saWJmYWtla2V5X2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmZha2VrZXkvbGliZmFrZWtleV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYwZGRlYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmZha2VrZXkvbGliZmFrZWtleV9naXQuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBjb252ZXJ0aW5nIGNoYXJhY3RlcnMgdG8gWCBrZXktcHJlc3NlcyIKK0RFU0NSSVBUSU9OID0gImxpYmZha2VrZXkgaXMgYSBzaW1wbGUgbGlicmFyeSBmb3IgY29udmVydGluZyBVVEYtOCBjaGFyYWN0ZXJzIGludG8gJ2Zha2UnIFggXAora2V5LXByZXNzZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zcmMvbGliZmFrZWtleS5jO2VuZGxpbmU9MzA7bWQ1PTYwMmI1Y2NkNDhmNjQ0MDc1MTA4NjdmMzM3M2I0NDhjIgorCitERVBFTkRTID0gImxpYnh0c3QiCitTRUNUSU9OID0gIngxMS93bSIKKworU1JDUkVWID0gImUzMjdmZjA0OWI4NTAzYWYyZGFkZmZhODQzNzBhMDg2MGI5ZmI2ODIiCitQViA9ICIwLjArZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgbGlieHRzdCByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlibWF0Y2hib3gvbGlibWF0Y2hib3gvbGlicG5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlibWF0Y2hib3gvbGlibWF0Y2hib3gvbGlicG5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZDUwN2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJtYXRjaGJveC9saWJtYXRjaGJveC9saWJwbmcucGF0Y2gKQEAgLTAsMCArMSw2OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRnJvbSAxOWMzZDI0MjAzNDc0OGIzYzYwNzY1NjgzZTFmZjRlMmRmOTcwMjA1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMTAgRGVjIDIwMTMgMTE6Mzc6MzIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlOiBpbXByb3ZlIGxpYnBuZyBkZXRlY3Rpb24KKworSW5zdGVhZCBvZiBsb29raW5nIGZvciAibGlicG5nMTIiIGV4cGxpY2l0bHkgdGhvdWdoIHBrZy1jb25maWcgYW5kIHRoZW4gZmFsbGluZworYmFjayB0byBsaWJyYXJ5IGh1bnRpbmcsIGp1c3QgdXNlIHBrZy1jb25maWcgdG8gZmluZCAibGlicG5nIiB3aGljaCBpcyBwcm92aWRlZAorYnkgYm90aCBsaWJwbmcxMiBhbmQgbGlicG5nMTYuCisKK1RoaXMgYWxzbyBtYWtlcyB0aGUgbGlicG5nIGRldGVjdGlvbiBkZXRlcm1pbmlzdGljLgorCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMjkgKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAyNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOGEyODA3Ni4uNjVkN2M3OSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzQsNyArMzQsNyBAQCBBQ19BUkdfRU5BQkxFKGpwZWcsCisgICBlbmFibGVfanBlZz0kZW5hYmxldmFsLCBlbmFibGVfanBlZz1ubykKKyAKKyBBQ19BUkdfRU5BQkxFKHBuZywKKy0gIFsgIC0tZGlzYWJsZS1wbmcgICAgICAgICAgIGRpc2FibGUgcG5nIHN1cHBvcnQgW2RlZmF1bHQ9bm9dXSwKKysgIFsgIC0tZGlzYWJsZS1wbmcgICAgICAgICAgIGRpc2FibGUgUE5HIHN1cHBvcnQgW2RlZmF1bHQ9ZW5hYmxlZF1dLAorICAgICAgZW5hYmxlX3BuZz0kZW5hYmxldmFsLCBlbmFibGVfcG5nPXllcyApCisgCisgQUNfQVJHX0VOQUJMRShkb3h5Z2VuLWRvY3MsICAgICAKK0BAIC0xNTYsMjkgKzE1NiwxMCBAQCBmaQorIGRubCAtLS0tLS0gQ2hlY2sgZm9yIFBORyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKyBpZiB0ZXN0IHgkZW5hYmxlX3BuZyAhPSB4bm87IHRoZW4KKy0gIEFDX01TR19DSEVDS0lORyhmb3IgbGlicG5nMTIpCistICBpZiB0ZXN0IHgkUEtHX0NPTkZJRyAhPSB4bm8gJiYgJFBLR19DT05GSUcgLS1leGlzdHMgbGlicG5nMTI7IHRoZW4gCistICAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKKy0gICAgICAgIFBOR19MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgbGlicG5nMTJgCistCVBOR19DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzIGxpYnBuZzEyYAorLSAgICAgICAgQUNfREVGSU5FKFVTRV9QTkcsIFsxXSwgW1VzZSBQbmddKQorLQlTVVBQT1JUU19QTkc9MQorLQlQTkdfUkVRVUlSRUQ9ImxpYnBuZzEyIgorLSAgZWxzZQorLQlBQ19NU0dfUkVTVUxUKG5vKQorLSAgICAgICAgIyBBQ19DSEVDS19IRUFERVJTKHBuZy5oLCBbIGhhdmVfcG5nX2g9InllcyIgXSwgWyBoYXZlX3BuZ19oPSJubyIgXSApCistICAgICAgICBBQ19DSEVDS19MSUIoW3BuZ10sIFtwbmdfY3JlYXRlX3JlYWRfc3RydWN0XSwgW2hhdmVfcG5nPSJ5ZXMiXSwgW2hhdmVfcG5nPSJubyJdKQorLQorLSAgICAgICAgaWYgdGVzdCB4JGhhdmVfcG5nPXh5ZXMgJiYgdGVzdCB4JGhhdmVfcG5nX2g9eHllczsgdGhlbiAKKy0gICAgICAgICAgICBBQ19ERUZJTkUoVVNFX1BORywgWzFdLCBbVXNlIFBuZ10pCistCSAgICBTVVBQT1JUU19QTkc9MQorLSAgICAgICAgICAgIFBOR19MSUJTPSItbHBuZyAtbHoiCistICAgICAgICAgICAgTUJfRVhUUkFfTElCUz0iJE1CX0VYVFJBX0xJQlMgJFBOR19MSUJTIgorLSAgICAgICAgZWxzZQorLQkgICAgQUNfTVNHX1dBUk4oWyoqKiBDYW5ub3QgZmluZCBQTkcsIGRpc2FibGluZyBzdXBwb3J0XSkKKy0gICAgICAgICAgICBlbmFibGVfcG5nPW5vCistCWZpCistICBmaQorKyAgUEtHX0NIRUNLX01PRFVMRVMoUE5HLCBsaWJwbmcpCisrICBBQ19ERUZJTkUoVVNFX1BORywgWzFdLCBbVXNlIFBOR10pCisrICBTVVBQT1JUU19QTkc9MQorKyAgUE5HX1JFUVVJUkVEPSJsaWJwbmciCisgZmkKKyAKKyAKKy0tIAorMS44LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlibWF0Y2hib3gvbGlibWF0Y2hib3hfMS4xMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYm1hdGNoYm94L2xpYm1hdGNoYm94XzEuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJlYjY3NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYm1hdGNoYm94L2xpYm1hdGNoYm94XzEuMTEuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJNYXRjaGJveCB3aW5kb3cgbWFuYWdlciBjb3JlIGxpYnJhcnkiCitTRUNUSU9OID0gIngxMS9saWJzIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5jb20vIgorCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJtYi9tYmV4cC5jO2VuZGxpbmU9MjA7bWQ1PTI4YzBhZWYzYjIzZTMwODQ2NGY1ZGFlNmExMWIwZDJmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYm1iL21iZG90ZGVza3RvcC5jO2VuZGxpbmU9MjE7bWQ1PTVhMjg3MTU2YjMyMDdlODUxYzFkNjhkMDljNDM5YjUxIgorCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIGxpYnhleHQiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL21hdGNoYm94LyR7QlBOfS8ke1BWfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9saWJwbmcucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmYzZjYzgwN2Y1NWEzZTdjNzUyZDgwMTMxNzY4NzVkNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyNTRjYWI1MmUzMDRhMzUxMmM4ZGY0YmU1OWQ2OTBjZjM5MjFiYmI2OGEyOGVkZTdmZTI2YjkzNTM0MjE3YjUzIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJqcGVnIHBuZyB4ZnQgeHNldHRpbmdzIgorUEFDS0FHRUNPTkZJR1tqcGVnXSA9ICItLWVuYWJsZS1qcGVnLC0tZGlzYWJsZS1qcGVnLGpwZWciCitQQUNLQUdFQ09ORklHW3BhbmdvXSA9ICItLWVuYWJsZS1wYW5nbywtLWRpc2FibGUtcGFuZ28scGFuZ28iCitQQUNLQUdFQ09ORklHW3BuZ10gPSAiLS1lbmFibGUtcG5nLC0tZGlzYWJsZS1wbmcsbGlicG5nIgorUEFDS0FHRUNPTkZJR1t4ZnRdID0gIi0tZW5hYmxlLXhmdCwtLWRpc2FibGUteGZ0LGxpYnhmdCIKK1BBQ0tBR0VDT05GSUdbeHNldHRpbmdzXSA9ICItLWVuYWJsZS14c2V0dGluZ3MsLS1kaXNhYmxlLXhzZXR0aW5ncyxsaWJ4c2V0dGluZ3MtY2xpZW50IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbC0xLjIuMTUvY29uZmlndXJlX3R3ZWFrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbC0xLjIuMTUvY29uZmlndXJlX3R3ZWFrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOTc2MzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsLTEuMi4xNS9jb25maWd1cmVfdHdlYWsucGF0Y2gKQEAgLTAsMCArMSwxMTExIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBTREwtMS4yLjE1L2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFNETC0xLjIuMTUub3JpZy9jb25maWd1cmUuaW4KKysrKyBTREwtMS4yLjE1L2NvbmZpZ3VyZS5pbgorQEAgLTQ4LDkgKzQ4LDkgQEAgQUNfQ09ORklHX0FVWF9ESVIoW2J1aWxkLXNjcmlwdHNdKQorIGRubCBBQ19DQU5PTklDQUxfSE9TVAorIEFDX0NfQklHRU5ESUFOCisgaWYgdGVzdCB4JGFjX2N2X2NfYmlnZW5kaWFuID0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoU0RMX0JZVEVPUkRFUiwgNDMyMSkKKysgICAgQUNfREVGSU5FKFNETF9CWVRFT1JERVIsIDQzMjEsICJCeXRlIE9yZGVyIikKKyBlbHNlCistICAgIEFDX0RFRklORShTRExfQllURU9SREVSLCAxMjM0KQorKyAgICBBQ19ERUZJTkUoU0RMX0JZVEVPUkRFUiwgMTIzNCwgIkJ5dGUgT3JkZXIiKQorIGZpCisgCisgZG5sIENoZWNrIGZvciB0b29scworQEAgLTEzNCw3ICsxMzQsNyBAQCBBQ19BUkdfRU5BQkxFKGxpYmMsCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxpYmNdLCBbVXNlIHRoZSBzeXN0ZW0gQyBsaWJyYXJ5IFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgLCBlbmFibGVfbGliYz15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV9saWJjID0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoSEFWRV9MSUJDKQorKyAgICBBQ19ERUZJTkUoSEFWRV9MSUJDLDEsIiIpCisgCisgICAgIGRubCBDaGVjayBmb3IgQyBsaWJyYXJ5IGhlYWRlcnMKKyAgICAgQUNfSEVBREVSX1NUREMKK0BAIC0xNDUsNyArMTQ1LDcgQEAgaWYgdGVzdCB4JGVuYWJsZV9saWJjID0geHllczsgdGhlbgorICAgICBpZiB0ZXN0IHgkYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSB4eWVzIC1vIHgkYWNfY3ZfaGVhZGVyX3N0ZGludF9oID0geHllczsgdGhlbgorICAgICAgICAgQUNfQ0hFQ0tfVFlQRShpbnQ2NF90KQorICAgICAgICAgaWYgdGVzdCB4JGFjX2N2X3R5cGVfaW50NjRfdCA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0hBU182NEJJVF9UWVBFKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfSEFTXzY0QklUX1RZUEUsMSwiIikKKyAgICAgICAgIGZpCisgICAgICAgICBoYXZlX2ludHR5cGVzPXllcworICAgICBmaQorQEAgLTE2MSwxMSArMTYxLDExIEBAIGlmIHRlc3QgeCRlbmFibGVfbGliYyA9IHh5ZXM7IHRoZW4KKyAKKyAgICAgQUNfRlVOQ19NRU1DTVAKKyAgICAgaWYgdGVzdCB4JGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmcgPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoSEFWRV9NRU1DTVApCisrICAgICAgICBBQ19ERUZJTkUoSEFWRV9NRU1DTVAsMSwiIikKKyAgICAgZmkKKyAgICAgQUNfRlVOQ19TVFJUT0QKKyAgICAgaWYgdGVzdCB4JGFjX2N2X2Z1bmNfc3RydG9kID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKEhBVkVfU1RSVE9EKQorKyAgICAgICAgQUNfREVGSU5FKEhBVkVfU1RSVE9ELDEsIiIpCisgICAgIGZpCisgICAgIEFDX0NIRUNLX0ZVTkMobXByb3RlY3QsCisgICAgICAgICBBQ19UUllfQ09NUElMRShbCitAQCAtMTkxLDQwICsxOTEsNDAgQEAgaWYgdGVzdCB4JGhhdmVfaW50dHlwZXMgIT0geHllczsgdGhlbgorICAgICBBQ19DSEVDS19TSVpFT0YobG9uZywgNCkKKyAgICAgQUNfQ0hFQ0tfU0laRU9GKGxvbmcgbG9uZywgOCkKKyAgICAgaWYgdGVzdCB4JGFjX2N2X3NpemVvZl9jaGFyID0geDE7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShpbnQ4X3QsIHNpZ25lZCBjaGFyKQorLSAgICAgICAgQUNfREVGSU5FKHVpbnQ4X3QsIHVuc2lnbmVkIGNoYXIpCisrICAgICAgICBBQ19ERUZJTkUoaW50OF90LCBzaWduZWQgY2hhciwiIikKKysgICAgICAgIEFDX0RFRklORSh1aW50OF90LCB1bnNpZ25lZCBjaGFyLCIiKQorICAgICBmaQorICAgICBpZiB0ZXN0IHgkYWNfY3Zfc2l6ZW9mX3Nob3J0ID0geDI7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShpbnQxNl90LCBzaWduZWQgc2hvcnQpCistICAgICAgICBBQ19ERUZJTkUodWludDE2X3QsIHVuc2lnbmVkIHNob3J0KQorKyAgICAgICAgQUNfREVGSU5FKGludDE2X3QsIHNpZ25lZCBzaG9ydCwiIikKKysgICAgICAgIEFDX0RFRklORSh1aW50MTZfdCwgdW5zaWduZWQgc2hvcnQsIiIpCisgICAgIGVsc2UKKyAgICAgICAgIGlmIHRlc3QgeCRhY19jdl9zaXplb2ZfaW50ID0geDI7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoaW50MTZfdCwgc2lnbmVkIGludCkKKy0gICAgICAgICAgICBBQ19ERUZJTkUodWludDE2X3QsIHVuc2lnbmVkIGludCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoaW50MTZfdCwgc2lnbmVkIGludCwiIikKKysgICAgICAgICAgICBBQ19ERUZJTkUodWludDE2X3QsIHVuc2lnbmVkIGludCwiIikKKyAgICAgICAgIGZpCisgICAgIGZpCisgICAgIGlmIHRlc3QgeCRhY19jdl9zaXplb2ZfaW50ID0geDQ7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShpbnQzMl90LCBzaWduZWQgaW50KQorLSAgICAgICAgQUNfREVGSU5FKHVpbnQzMl90LCB1bnNpZ25lZCBpbnQpCisrICAgICAgICBBQ19ERUZJTkUoaW50MzJfdCwgc2lnbmVkIGludCwiIikKKysgICAgICAgIEFDX0RFRklORSh1aW50MzJfdCwgdW5zaWduZWQgaW50LCIiKQorICAgICBlbHNlCisgICAgICAgICBpZiB0ZXN0IHgkYWNfY3Zfc2l6ZW9mX2xvbmcgPSB4NDsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShpbnQzMl90LCBzaWduZWQgbG9uZykKKy0gICAgICAgICAgICBBQ19ERUZJTkUodWludDMyX3QsIHVuc2lnbmVkIGxvbmcpCisrICAgICAgICAgICAgQUNfREVGSU5FKGludDMyX3QsIHNpZ25lZCBsb25nLCIiKQorKyAgICAgICAgICAgIEFDX0RFRklORSh1aW50MzJfdCwgdW5zaWduZWQgbG9uZywiIikKKyAgICAgICAgIGZpCisgICAgIGZpCisgICAgIGlmIHRlc3QgeCRhY19jdl9zaXplb2ZfbG9uZyA9IHg4OyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoaW50NjRfdCwgc2lnbmVkIGxvbmcpCistICAgICAgICBBQ19ERUZJTkUodWludDY0X3QsIHVuc2lnbmVkIGxvbmcpCistICAgICAgICBBQ19ERUZJTkUoU0RMX0hBU182NEJJVF9UWVBFKQorKyAgICAgICAgQUNfREVGSU5FKGludDY0X3QsIHNpZ25lZCBsb25nLCIiKQorKyAgICAgICAgQUNfREVGSU5FKHVpbnQ2NF90LCB1bnNpZ25lZCBsb25nLCIiKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9IQVNfNjRCSVRfVFlQRSwiIikKKyAgICAgZWxzZQorICAgICAgICAgaWYgdGVzdCB4JGFjX2N2X3NpemVvZl9sb25nX2xvbmcgPSB4ODsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShpbnQ2NF90LCBzaWduZWQgbG9uZyBsb25nKQorLSAgICAgICAgICAgIEFDX0RFRklORSh1aW50NjRfdCwgdW5zaWduZWQgbG9uZyBsb25nKQorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfSEFTXzY0QklUX1RZUEUpCisrICAgICAgICAgICAgQUNfREVGSU5FKGludDY0X3QsIHNpZ25lZCBsb25nIGxvbmcsIiIpCisrICAgICAgICAgICAgQUNfREVGSU5FKHVpbnQ2NF90LCB1bnNpZ25lZCBsb25nIGxvbmcsIiIpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9IQVNfNjRCSVRfVFlQRSwiIikKKyAgICAgICAgIGZpCisgICAgIGZpCistICAgIEFDX0RFRklORShzaXplX3QsIHVuc2lnbmVkIGludCkKKy0gICAgQUNfREVGSU5FKHVpbnRwdHJfdCwgdW5zaWduZWQgbG9uZykKKysgICAgQUNfREVGSU5FKHNpemVfdCwgdW5zaWduZWQgaW50LCIiKQorKyAgICBBQ19ERUZJTkUodWludHB0cl90LCB1bnNpZ25lZCBsb25nLCIiKQorIGZpCisgCisgIyBTdGFuZGFyZCBDIHNvdXJjZXMKK0BAIC0yNDUsMjUgKzI0NSwyNSBAQCBBQ19BUkdfRU5BQkxFKGF1ZGlvLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hdWRpb10sIFtFbmFibGUgdGhlIGF1ZGlvIHN1YnN5c3RlbSBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICwgZW5hYmxlX2F1ZGlvPXllcykKKyBpZiB0ZXN0IHgkZW5hYmxlX2F1ZGlvICE9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKFNETF9BVURJT19ESVNBQkxFRCkKKysgICAgQUNfREVGSU5FKFNETF9BVURJT19ESVNBQkxFRCwxLCIiKQorIGZpCisgQUNfQVJHX0VOQUJMRSh2aWRlbywKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW9dLCBbRW5hYmxlIHRoZSB2aWRlbyBzdWJzeXN0ZW0gW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAsIGVuYWJsZV92aWRlbz15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV92aWRlbyAhPSB4eWVzOyB0aGVuCistICAgIEFDX0RFRklORShTRExfVklERU9fRElTQUJMRUQpCisrICAgIEFDX0RFRklORShTRExfVklERU9fRElTQUJMRUQsMSwiIikKKyBmaQorIEFDX0FSR19FTkFCTEUoZXZlbnRzLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1ldmVudHNdLCBbRW5hYmxlIHRoZSBldmVudHMgc3Vic3lzdGVtIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgLCBlbmFibGVfZXZlbnRzPXllcykKKyBpZiB0ZXN0IHgkZW5hYmxlX2V2ZW50cyAhPSB4eWVzOyB0aGVuCistICAgIEFDX0RFRklORShTRExfRVZFTlRTX0RJU0FCTEVEKQorKyAgICBBQ19ERUZJTkUoU0RMX0VWRU5UU19ESVNBQkxFRCwxLCIiKQorIGZpCisgQUNfQVJHX0VOQUJMRShqb3lzdGljaywKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtam95c3RpY2tdLCBbRW5hYmxlIHRoZSBqb3lzdGljayBzdWJzeXN0ZW0gW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAsIGVuYWJsZV9qb3lzdGljaz15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV9qb3lzdGljayAhPSB4eWVzOyB0aGVuCistICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfRElTQUJMRUQpCisrICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfRElTQUJMRUQsMSwiIikKKyBlbHNlCisgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2pveXN0aWNrLyouYyIKKyBmaQorQEAgLTI3MSw0MyArMjcxLDQzIEBAIEFDX0FSR19FTkFCTEUoY2Ryb20sCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWNkcm9tXSwgW0VuYWJsZSB0aGUgY2Ryb20gc3Vic3lzdGVtIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgLCBlbmFibGVfY2Ryb209eWVzKQorIGlmIHRlc3QgeCRlbmFibGVfY2Ryb20gIT0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0RJU0FCTEVEKQorKyAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0RJU0FCTEVELDEsIiIpCisgZmkKKyBBQ19BUkdfRU5BQkxFKHRocmVhZHMsCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXRocmVhZHNdLCBbRW5hYmxlIHRoZSB0aHJlYWRpbmcgc3Vic3lzdGVtIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgLCBlbmFibGVfdGhyZWFkcz15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV90aHJlYWRzICE9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKFNETF9USFJFQURTX0RJU0FCTEVEKQorKyAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRFNfRElTQUJMRUQsMSwiIikKKyBmaQorIEFDX0FSR19FTkFCTEUodGltZXJzLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS10aW1lcnNdLCBbRW5hYmxlIHRoZSB0aW1lciBzdWJzeXN0ZW0gW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAsIGVuYWJsZV90aW1lcnM9eWVzKQorIGlmIHRlc3QgeCRlbmFibGVfdGltZXJzICE9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKFNETF9USU1FUlNfRElTQUJMRUQpCisrICAgIEFDX0RFRklORShTRExfVElNRVJTX0RJU0FCTEVELDEsIiIpCisgZmkKKyBBQ19BUkdfRU5BQkxFKGZpbGUsCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWZpbGVdLCBbRW5hYmxlIHRoZSBmaWxlIHN1YnN5c3RlbSBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICwgZW5hYmxlX2ZpbGU9eWVzKQorIGlmIHRlc3QgeCRlbmFibGVfZmlsZSAhPSB4eWVzOyB0aGVuCistICAgIEFDX0RFRklORShTRExfRklMRV9ESVNBQkxFRCkKKysgICAgQUNfREVGSU5FKFNETF9GSUxFX0RJU0FCTEVELDEsIiIpCisgZmkKKyBBQ19BUkdfRU5BQkxFKGxvYWRzbywKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtbG9hZHNvXSwgW0VuYWJsZSB0aGUgc2hhcmVkIG9iamVjdCBsb2FkaW5nIHN1YnN5c3RlbSBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICwgZW5hYmxlX2xvYWRzbz15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV9sb2Fkc28gIT0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19ESVNBQkxFRCkKKysgICAgQUNfREVGSU5FKFNETF9MT0FEU09fRElTQUJMRUQsMSwiIikKKyBmaQorIEFDX0FSR19FTkFCTEUoY3B1aW5mbywKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtY3B1aW5mb10sIFtFbmFibGUgdGhlIGNwdWluZm8gc3Vic3lzdGVtIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgLCBlbmFibGVfY3B1aW5mbz15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV9jcHVpbmZvICE9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKFNETF9DUFVJTkZPX0RJU0FCTEVEKQorKyAgICBBQ19ERUZJTkUoU0RMX0NQVUlORk9fRElTQUJMRUQsMSwiIikKKyBmaQorIEFDX0FSR19FTkFCTEUoYXNzZW1ibHksCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWFzc2VtYmx5XSwgW0VuYWJsZSBhc3NlbWJseSByb3V0aW5lcyBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICwgZW5hYmxlX2Fzc2VtYmx5PXllcykKKyBpZiB0ZXN0IHgkZW5hYmxlX2Fzc2VtYmx5ID0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoU0RMX0FTU0VNQkxZX1JPVVRJTkVTKQorKyAgICBBQ19ERUZJTkUoU0RMX0FTU0VNQkxZX1JPVVRJTkVTLDEsIiIpCisgZmkKKyAKKyBkbmwgU2VlIGlmIHRoZSBPU1MgYXVkaW8gaW50ZXJmYWNlIGlzIHN1cHBvcnRlZAorQEAgLTMzNSwxMiArMzM1LDEyIEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1vc3NdLCBbc3VwcG9ydAorICAgICAgICAgICAgICAgaW50IGFyZyA9IFNORENUTF9EU1BfU0VURlJBR01FTlQ7CisgICAgICAgICAgICAgXSxbCisgICAgICAgICAgICAgaGF2ZV9vc3M9eWVzCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfT1NTX1NPVU5EQ0FSRF9IKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX09TU19TT1VORENBUkRfSCwxLCIiKQorICAgICAgICAgICAgIF0pCisgICAgICAgICBmaQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkaGF2ZV9vc3MpCisgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9vc3MgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfT1NTKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX09TUywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL2RzcC8qLmMiCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vZG1hLyouYyIKKyAgICAgICAgICAgICBoYXZlX2F1ZGlvPXllcworQEAgLTQwNyw3ICs0MDcsNyBAQCBDaGVja0RNRURJQSgpCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCRoYXZlX2RtZWRpYSkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgYXVkaW8gbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGhhdmVfZG1lZGlhID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0RNRURJQSkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9ETUVESUEsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9kbWVkaWEvKi5jIgorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sYXVkaW8iCisgICAgICAgICAgICAgaGF2ZV9hdWRpbz15ZXMKK0BAIC00NDQsNyArNDQ0LDcgQEAgQ2hlY2tNTUUoKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkaGF2ZV9tbWUpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGF1ZGlvIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRoYXZlX21tZSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9NTUVBVURJTykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9NTUVBVURJTywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL21tZS8qLmMiCisgICAgICAgICAgICAgRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTICRNTUVfQ0ZMQUdTIgorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTICRNTUVfTElCUyIKK0BAIC00NjcsNyArNDY3LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWVzZC1zaGFyZWRdLCBbZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBlbmFibGVfZXNkX3NoYXJlZD15ZXMpCisgICAgICAgICAgICAgZXNkX2xpYj1bYGZpbmRfbGliICJsaWJlc2Quc28uKiIgIiRFU0RfTElCUyIgfCBzZWQgJ3MvLipcL1woLipcKS9cMS87IHEnYF0KKyAKKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9FU0QpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfRVNELDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vZXNkLyouYyIKKyAgICAgICAgICAgICBFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgJEVTRF9DRkxBR1MiCisgICAgICAgICAgICAgaWYgdGVzdCB4JGhhdmVfbG9hZHNvICE9IHh5ZXMgJiYgXAorQEAgLTQ3Nyw3ICs0NzcsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZXNkLXNoYXJlZF0sIFtkCisgICAgICAgICAgICAgaWYgdGVzdCB4JGhhdmVfbG9hZHNvID0geHllcyAmJiBcCisgICAgICAgICAgICAgICAgdGVzdCB4JGVuYWJsZV9lc2Rfc2hhcmVkID0geHllcyAmJiB0ZXN0IHgkZXNkX2xpYiAhPSB4OyB0aGVuCisgICAgICAgICAgICAgICAgIGVjaG8gIi0tIGR5bmFtaWMgbGliZXNkIC0+ICRlc2RfbGliIgorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX0FVRElPX0RSSVZFUl9FU0RfRFlOQU1JQywgIiRlc2RfbGliIikKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNETF9BVURJT19EUklWRVJfRVNEX0RZTkFNSUMsICIkZXNkX2xpYiIsICIiKQorICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgJEVTRF9MSUJTIgorICAgICAgICAgICAgIGZpCitAQCAtNTY0LDcgKzU2NCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hcnRzLXNoYXJlZF0sIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGVuYWJsZV9hcnRzX3NoYXJlZD15ZXMpCisgICAgICAgICAgICAgICAgIGFydHNfbGliPVtgZmluZF9saWIgImxpYmFydHNjLnNvLioiICIkQVJUU19MSUJTIiB8IHNlZCAncy8uKlwvXCguKlwpL1wxLzsgcSdgXQorIAorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9BUlRTKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9BUlRTLCwgIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL2FydHMvKi5jIgorICAgICAgICAgICAgICAgICBFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgJEFSVFNfQ0ZMQUdTIgorICAgICAgICAgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9sb2Fkc28gIT0geHllcyAmJiBcCitAQCAtNTc0LDcgKzU3NCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hcnRzLXNoYXJlZF0sIFsKKyAgICAgICAgICAgICAgICAgaWYgdGVzdCB4JGhhdmVfbG9hZHNvID0geHllcyAmJiBcCisgICAgICAgICAgICAgICAgICAgIHRlc3QgeCRlbmFibGVfYXJ0c19zaGFyZWQgPSB4eWVzICYmIHRlc3QgeCRhcnRzX2xpYiAhPSB4OyB0aGVuCisgICAgICAgICAgICAgICAgICAgICBlY2hvICItLSBkeW5hbWljIGxpYmFydHNjIC0+ICRhcnRzX2xpYiIKKy0gICAgICAgICAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRExfQVVESU9fRFJJVkVSX0FSVFNfRFlOQU1JQywgIiRhcnRzX2xpYiIpCisrICAgICAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX0FVRElPX0RSSVZFUl9BUlRTX0RZTkFNSUMsICIkYXJ0c19saWIiLDEsIiIpCisgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTICRBUlRTX0xJQlMiCisgICAgICAgICAgICAgICAgIGZpCitAQCAtNjM0LDcgKzYzNCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1uYXMtc2hhcmVkXSwgW2QKKyAgICAgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgJE5BU19MSUJTIgorICAgICAgICAgICAgIGZpCisgCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfTkFTKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX05BUywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL25hcy8qLmMiCisgICAgICAgICAgICAgRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTICROQVNfQ0ZMQUdTIgorICAgICAgICAgICAgIGhhdmVfYXVkaW89eWVzCitAQCAtNjQ5LDcgKzY0OSw3IEBAIENoZWNrRGlza0F1ZGlvKCkKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZGlza2F1ZGlvXSwgW3N1cHBvcnQgdGhlIGRpc2sgd3JpdGVyIGF1ZGlvIGRyaXZlciBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICAgICAsIGVuYWJsZV9kaXNrYXVkaW89eWVzKQorICAgICBpZiB0ZXN0IHgkZW5hYmxlX2F1ZGlvID0geHllcyAtYSB4JGVuYWJsZV9kaXNrYXVkaW8gPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9ESVNLKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfRElTSywxLCIiKQorICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vZGlzay8qLmMiCisgICAgIGZpCisgfQorQEAgLTY2MSw3ICs2NjEsNyBAQCBDaGVja0R1bW15QXVkaW8oKQorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1kdW1teWF1ZGlvXSwgW3N1cHBvcnQgdGhlIGR1bW15IGF1ZGlvIGRyaXZlciBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICAgICAsIGVuYWJsZV9kdW1teWF1ZGlvPXllcykKKyAgICAgaWYgdGVzdCB4JGVuYWJsZV9hdWRpbyA9IHh5ZXMgLWEgeCRlbmFibGVfZHVtbXlhdWRpbyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0RVTU1ZKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfRFVNTVksMSwiIikKKyAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL2R1bW15LyouYyIKKyAgICAgZmkKKyB9CitAQCAtNjc3LDcgKzY3Nyw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1taW50YXVkaW9dLCBbc3UKKyAgICAgICAgIEFDX0NIRUNLX0hFQURFUihtaW50L2ZhbGNvbi5oLCBoYXZlX21pbnRfZmFsY29uX2hkcj15ZXMpCisgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9taW50X2ZhbGNvbl9oZHIgPSB4eWVzOyB0aGVuCisgICAgICAgICAgICAgbWludGF1ZGlvPXllcworLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX01JTlQpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfTUlOVCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL21pbnQvKi5jIgorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL21pbnQvKi5TIgorICAgICAgICAgICAgIGhhdmVfYXVkaW89eWVzCitAQCAtNzQ2LDcgKzc0Niw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1uYXNtXSwgW3VzZSBuYXMKKyAgICAgICAgIENvbXBpbGVOQVNNIHVucXVvdGVkLXNlY3Rpb25zIHx8IE5BU009IiIKKyAKKyAgICAgICAgIGlmIHRlc3QgIngkTkFTTSIgIT0geCAtYSAieCROQVNNIiAhPSB4JyIkTkFTTSInOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9IRVJNRVNfQkxJVFRFUlMpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9IRVJNRVNfQkxJVFRFUlMsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9oZXJtZXMvKi5hc20iCisgICAgICAgICAgICAgTkFTTUZMQUdTPSIkTkFTTUZMQUdTIC1JICRzcmNkaXIvc3JjL2hlcm1lcy8iCisgCitAQCAtODQwLDkgKzg0MCw5IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hbHRpdmVjXSwgW3VzZQorICAgICAgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisgCisgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9nY2NfYWx0aXZlYyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FMVElWRUNfQkxJVFRFUlMpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BTFRJVkVDX0JMSVRURVJTLDEsIiIpCisgICAgICAgICAgICAgaWYgdGVzdCB4JGhhdmVfYWx0aXZlY19oX2hkciA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0FMVElWRUNfSCkKKysgICAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0FMVElWRUNfSCwxLCIiKQorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTICRhbHRpdmVjX0NGTEFHUyIKKyAgICAgICAgIGZpCitAQCAtOTIwLDcgKzkyMCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1pcG9kXSwgW2NvbmZpZ3UKKyAKKyAgICAgaWYgdGVzdCB4JGVuYWJsZV9pcG9kID0geHllczsgdGhlbgorICAgICAgICAgRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTIC1ESVBPRCIKKy0gICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0lQT0QpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9JUE9ELDEsIiIpCisgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9pcG9kLyouYyIKKyAgICAgZmkKKyB9CitAQCAtOTU0LDcgKzk1NCw3IEBAIENoZWNrTkFOT1goKQorICAgICAgICAgICAgIEVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAtREVOQUJMRV9OQU5PWF9ESVJFQ1RfRkIiCisgICAgICAgICBmaQorIAorLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfTkFOT1gpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9OQU5PWCwxLCIiKQorICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vbmFub3gvKi5jIgorICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWxuYW5vLVgiCisgICAgICAgICBoYXZlX3ZpZGVvPXllcworQEAgLTEwMjAsNyArMTAyMCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS14MTEtc2hhcmVkXSwgW2QKKyAgICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFhfQ0ZMQUdTIgorICAgICAgICAgICAgIExERkxBR1M9IiRMREZMQUdTICRYX0xJQlMiCisgCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWDExKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMSwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3gxMS8qLmMiCisgICAgICAgICAgICAgRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTICRYX0NGTEFHUyIKKyAKK0BAIC0xMDQyLDggKzEwNDIsOCBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUteDExLXNoYXJlZF0sIFtkCisgICAgICAgICAgICAgICAgdGVzdCB4JGVuYWJsZV94MTFfc2hhcmVkID0geHllcyAmJiB0ZXN0IHgkeDExX2xpYiAhPSB4ICYmIHRlc3QgeCR4MTFleHRfbGliICE9IHg7IHRoZW4KKyAgICAgICAgICAgICAgICAgZWNobyAiLS0gZHluYW1pYyBsaWJYMTEgLT4gJHgxMV9saWIiCisgICAgICAgICAgICAgICAgIGVjaG8gIi0tIGR5bmFtaWMgbGliWDExZXh0IC0+ICR4MTFleHRfbGliIgorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX1ZJREVPX0RSSVZFUl9YMTFfRFlOQU1JQywgIiR4MTFfbGliIikKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNETF9WSURFT19EUklWRVJfWDExX0RZTkFNSUNfWEVYVCwgIiR4MTFleHRfbGliIikKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNETF9WSURFT19EUklWRVJfWDExX0RZTkFNSUMsICIkeDExX2xpYiIsIiIpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRExfVklERU9fRFJJVkVSX1gxMV9EWU5BTUlDX1hFWFQsICIkeDExZXh0X2xpYiIsIiIpCisgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICBlbmFibGVfeDExX3NoYXJlZD1ubworICAgICAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAkWF9MSUJTIC1sWDExIC1sWGV4dCIKK0BAIC0xMDYwLDIwICsxMDYwLDIwIEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1kZ2FdLCBbYWxsb3cgdXMKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tZGdhXSwgW3VzZSBER0EgMi4wIHZpZGVvIGRyaXZlciBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICAgICAsIGVuYWJsZV92aWRlb19kZ2E9eWVzKQorICAgICAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfZGdhID0geHllcyAtYSB4JGVuYWJsZV92aWRlb19kZ2EgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0RHQSkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfREdBLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL2RnYS8qLmMiCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBBQ19BUkdfRU5BQkxFKHZpZGVvLXgxMS1kZ2Ftb3VzZSwKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8teDExLWRnYW1vdXNlXSwgW3VzZSBYMTEgREdBIGZvciBtb3VzZSBldmVudHMgW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGVuYWJsZV92aWRlb194MTFfZGdhbW91c2U9eWVzKQorICAgICAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfZGdhID0geHllcyAtYSB4JGVuYWJsZV92aWRlb194MTFfZGdhbW91c2UgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMV9ER0FNT1VTRSkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWDExX0RHQU1PVVNFLDEsIiIpCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBBQ19BUkdfRU5BQkxFKHZpZGVvLXgxMS12bSwKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8teDExLXZtXSwgW3VzZSBYMTEgVk0gZXh0ZW5zaW9uIGZvciBmdWxsc2NyZWVuIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBlbmFibGVfdmlkZW9feDExX3ZtPXllcykKKyAgICAgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvX3gxMV92bSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWDExX1ZJRE1PREUpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMV9WSURNT0RFLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL1hleHQvWHhmODZ2bS8qLmMiCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBBQ19BUkdfRU5BQkxFKHZpZGVvLXgxMS14diwKK0BAIC0xMDg3LDE0ICsxMDg3LDE0IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby14MTEteHZdLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby14MTEteGluZXJhbWFdLCBbZW5hYmxlIFgxMSBYaW5lcmFtYSBzdXBwb3J0IFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGVuYWJsZV92aWRlb194MTFfeGluZXJhbWE9eWVzKQorICAgICAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdmlkZW9feDExX3hpbmVyYW1hID0geHllczsgdGhlbgorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9YMTFfWElORVJBTUEpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMV9YSU5FUkFNQSwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9YZXh0L1hpbmVyYW1hLyouYyIKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIEFDX0FSR19FTkFCTEUodmlkZW8teDExLXhtZSwKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8teDExLXhtZV0sIFtlbmFibGUgWGkgR3JhcGhpY3MgWE1FIGZvciBmdWxsc2NyZWVuIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGVuYWJsZV92aWRlb194MTFfeG1lPXllcykKKyAgICAgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvX3gxMV94bWUgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMV9YTUUpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMV9YTUUsMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vWGV4dC9YTUUvKi5jIgorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgQUNfQVJHX0VOQUJMRSh2aWRlby14MTEteHJhbmRyLAorQEAgLTExMTEsOCArMTExMSw4IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby14MTEteHJhbmQKKyAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfeDExX3NoYXJlZCA9IHh5ZXMgJiYgdGVzdCB4JHhyYW5kcl9saWIgIT0geCA7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICItLSBkeW5hbWljIGxpYlhyZW5kZXIgLT4gJHhyZW5kZXJfbGliIgorICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIi0tIGR5bmFtaWMgbGliWHJhbmRyIC0+ICR4cmFuZHJfbGliIgorLSAgICAgICAgICAgICAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRExfVklERU9fRFJJVkVSX1gxMV9EWU5BTUlDX1hSRU5ERVIsICIkeHJlbmRlcl9saWIiKQorLSAgICAgICAgICAgICAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRExfVklERU9fRFJJVkVSX1gxMV9EWU5BTUlDX1hSQU5EUiwgIiR4cmFuZHJfbGliIikKKysgICAgICAgICAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX1ZJREVPX0RSSVZFUl9YMTFfRFlOQU1JQ19YUkVOREVSLCAiJHhyZW5kZXJfbGliIiwiIikKKysgICAgICAgICAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX1ZJREVPX0RSSVZFUl9YMTFfRFlOQU1JQ19YUkFORFIsICIkeHJhbmRyX2xpYiIsIiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGVseV9lbmFibGVfdmlkZW9feDExX3hyYW5kcj15ZXMKKyAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICBBQ19DSEVDS19MSUIoWHJlbmRlciwgWFJlbmRlclF1ZXJ5RXh0ZW5zaW9uLCBoYXZlX3hyZW5kZXJfbGliPXllcykKK0BAIC0xMTI1LDcgKzExMjUsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8teDExLXhyYW5kCisgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBpZiB0ZXN0IHgkZGVmaW5pdGVseV9lbmFibGVfdmlkZW9feDExX3hyYW5kciA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWDExX1hSQU5EUikKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWDExX1hSQU5EUiwxLCIiKQorICAgICAgICAgICAgIGZpCisgICAgICAgICBmaQorICAgICBmaQorQEAgLTExNTIsNyArMTE1Miw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1waG90b25dLAorICAgICAgICAgXSkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX3Bob3RvbikKKyAgICAgICAgIGlmIHRlc3QgeCR2aWRlb19waG90b24gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfUEhPVE9OKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1BIT1RPTiwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3Bob3Rvbi8qLmMiCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWxwaCIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworQEAgLTExNjYsNyArMTE2Niw3IEBAIGRubCBTZXQgdXAgdGhlIEJXaW5kb3cgdmlkZW8gZHJpdmVyIGlmIGUKKyBDaGVja0JXSU5ET1coKQorIHsKKyAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlbyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0JXSU5ET1cpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9CV0lORE9XLDEsIiIpCisgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9id2luZG93LyouY2MiCisgICAgICAgICBoYXZlX3ZpZGVvPXllcworICAgICBmaQorQEAgLTExODksNyArMTE4OSw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1jYXJib25dLAorICAgICAgICAgXSkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJGhhdmVfY2FyYm9uKQorICAgICAgICAgaWYgdGVzdCB4JGhhdmVfY2FyYm9uID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1RPT0xCT1gpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfVE9PTEJPWCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL21hY2NvbW1vbi8qLmMiCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vbWFjcm9tLyouYyIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworQEAgLTEyMTgsNyArMTIxOCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1jb2NvYV0sIFsKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJGhhdmVfY29jb2EpCisgICAgICAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKyAgICAgICAgIGlmIHRlc3QgeCRoYXZlX2NvY29hID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1FVQVJUWikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9RVUFSVFosMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9xdWFydHovKi5tIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCisgICAgICAgICBmaQorQEAgLTEyNDUsNyArMTI0NSw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1mYmNvbl0sIFsKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX2ZiY29uKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX2ZiY29uID0geHllczsgdGhlbgorICAgICAgICAgICAgIEFDX0NIRUNLX0ZVTkNTKGdldHBhZ2VzaXplKQorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0ZCQ09OKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0ZCQ09OLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vZmJjb24vKi5jIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCisgICAgICAgICBmaQorQEAgLTEyOTYsNyArMTI5Niw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1kaXJlY3RmYl0KKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX2RpcmVjdGZiKQorIAorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX2RpcmVjdGZiID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0RJUkVDVEZCKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0RJUkVDVEZCLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vZGlyZWN0ZmIvKi5jIgorICAgICAgICAgICAgIEVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAkRElSRUNURkJfQ0ZMQUdTIgorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTICRESVJFQ1RGQl9MSUJTIgorQEAgLTEzMjMsNyArMTMyMyw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1wczJnc10sIFsKKyAgICAgICAgIF0pCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR2aWRlb19wczJncykKKyAgICAgICAgIGlmIHRlc3QgeCR2aWRlb19wczJncyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9QUzJHUykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9QUzJHUywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3BzMmdzLyouYyIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworICAgICAgICAgZmkKK0BAIC0xMzc2LDcgKzEzNzYsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tZ2dpXSwgW3VzCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fZ2dpKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX2dnaSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9HR0kpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfR0dJLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vZ2dpLyouYyIKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAtbGdnaSAtbGdpaSAtbGdnIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCitAQCAtMTQwNiw3ICsxNDA2LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXN2Z2FdLCBbdQorICAgICAgICAgXSkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX3N2Z2EpCisgICAgICAgICBpZiB0ZXN0IHgkdmlkZW9fc3ZnYSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9TVkdBTElCKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1NWR0FMSUIsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9zdmdhLyouYyIKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAtbHZnYSIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworQEAgLTE0MzgsNyArMTQzOCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby12Z2xdLCBbdXMKKyAgICAgICAgIF0pCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR2aWRlb192Z2wpCisgICAgICAgICBpZiB0ZXN0IHgkdmlkZW9fdmdsID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1ZHTCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9WR0wsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby92Z2wvKi5jIgorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sdmdsIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCitAQCAtMTQ2Niw3ICsxNDY2LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXdzY29uc10sCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fd3Njb25zKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX3dzY29ucyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9XU0NPTlMpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfV1NDT05TLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vd3Njb25zLyouYyIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworICAgICAgICAgZmkKK0BAIC0xNDkxLDcgKzE0OTEsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tYWFsaWJdLCBbCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fYWFsaWIpCisgICAgICAgICBpZiB0ZXN0IHgkdmlkZW9fYWFsaWIgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfQUFMSUIpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfQUFMSUIsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9hYWxpYi8qLmMiCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWxhYSIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworQEAgLTE1NTMsNyArMTU1Myw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1xdG9waWFdLAorICAgICAgICAgQ1hYRkxBR1M9IiRPTERfQ1hYIgorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fcXRvcGlhKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX3F0b3BpYSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9RVE9QSUEpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfUVRPUElBLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vcXRvcGlhLyouY2MiCisgICAgICAgICAgICAgU0RMTUFJTl9TT1VSQ0VTPSIkc3JjZGlyL3NyYy9tYWluL3F0b3BpYS8qLmNjIgorICAgICAgICAgICAgIFNETE1BSU5fTERGTEFHUz0iLXN0YXRpYyIKK0BAIC0xNTgzLDcgKzE1ODMsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tcGljb2d1aV0sCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fcGljb2d1aSkKKyAgICAgICAgIGlmIHRlc3QgeCR2aWRlb19waWNvZ3VpID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1BJQ09HVUkpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfUElDT0dVSSwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3BpY29ndWkvKi5jIgorICAgICAgICAgICAgIFNETF9MSUJTPSIkU0RMX0xJQlMgLWxwZ3VpIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCitAQCAtMTYwNyw3ICsxNjA3LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXhiaW9zXSwgWworICAgICB2aWRlb194Ymlvcz1ubworICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvID0geHllcyAtYSB4JGVuYWJsZV92aWRlb194YmlvcyA9IHh5ZXM7IHRoZW4KKyAgICAgICAgIHZpZGVvX3hiaW9zPXllcworLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWEJJT1MpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9YQklPUywxLCIiKQorICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8veGJpb3MvKi5jIgorICAgICAgICAgaGF2ZV92aWRlbz15ZXMKKyAgICAgZmkKK0BAIC0xNjI1LDcgKzE2MjUsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tZ2VtXSwgW3VzCisgICAgICAgICBBQ19DSEVDS19MSUIoZ2VtLCBhcHBsX2luaXQsIGhhdmVfZ2VtX2xpYj15ZXMpCisgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9nZW1faGRyID0geHllcyAtYSB4JGhhdmVfZ2VtX2xpYiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgICB2aWRlb19nZW09eWVzCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfR0VNKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0dFTSwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL2dlbS8qLmMiCisgICAgICAgICAgICAgU0RMX0xJQlM9IiRTRExfTElCUyAtbGdlbSIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworQEAgLTE2NDAsNyArMTY0MCw3IEBAIENoZWNrRHVtbXlWaWRlbygpCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLWR1bW15XSwgW3VzZSBkdW1teSB2aWRlbyBkcml2ZXIgW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAgICAgLCBlbmFibGVfdmlkZW9fZHVtbXk9eWVzKQorICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvX2R1bW15ID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfRFVNTVkpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9EVU1NWSwxLCIiKQorICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vZHVtbXkvKi5jIgorICAgICAgICAgaGF2ZV92aWRlbz15ZXMKKyAgICAgZmkKK0BAIC0xNjY3LDggKzE2NjcsOCBAQCBDaGVja09wZW5HTFgxMSgpCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fb3BlbmdsKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX29wZW5nbCA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTCkKKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTF9HTFgpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wsMSwiIikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTF9HTFgsMSwiIikKKyAgICAgICAgIGZpCisgICAgIGZpCisgfQorQEAgLTE2ODcsNyArMTY4Nyw3IEBAIENoZWNrT3BlbkdMUU5YKCkKKyAgICAgICAgIF0pCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR2aWRlb19vcGVuZ2wpCisgICAgICAgICBpZiB0ZXN0IHgkdmlkZW9fb3BlbmdsID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMLDEsIiIpCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWxHTCIKKyAgICAgICAgIGZpCisgICAgIGZpCitAQCAtMTY5Nyw4ICsxNjk3LDggQEAgZG5sIENoZWNrIGZvciBXaW4zMiBPcGVuR0wKKyBDaGVja1dJTjMyR0woKQorIHsKKyAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlbyA9IHh5ZXMgLWEgeCRlbmFibGVfdmlkZW9fb3BlbmdsID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wpCistICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTF9XR0wpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTCwxLCIiKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0xfV0dMLDEsIiIpCisgICAgIGZpCisgfQorIAorQEAgLTE3MDYsNyArMTcwNiw3IEBAIGRubCBDaGVjayBmb3IgQmVPUyBPcGVuR0wKKyBDaGVja0JlR0woKQorIHsKKyAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlbyA9IHh5ZXMgLWEgeCRlbmFibGVfdmlkZW9fb3BlbmdsID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTCwxLCIiKQorICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWxHTCIKKyAgICAgZmkKKyB9CitAQCAtMTcxNSw3ICsxNzE1LDcgQEAgZG5sIENoZWNrIGZvciBNYWNPUyBPcGVuR0wKKyBDaGVja01hY0dMKCkKKyB7CisgICAgIGlmIHRlc3QgeCRlbmFibGVfdmlkZW8gPSB4eWVzIC1hIHgkZW5hYmxlX3ZpZGVvX29wZW5nbCA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wsMSwiIikKKyAgICAgICAgIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgICAgICotKi1kYXJ3aW4qKQorICAgICAgICAgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvX2NvY29hID0geHllczsgdGhlbgorQEAgLTE3NDcsOCArMTc0Nyw4IEBAIENoZWNrQXRhcmlPU01lc2EoKQorICAgICAgICAgICAgIE9TTUVTQV9DRkxBR1M9YCRPU01FU0FfQ09ORklHIC0tY2ZsYWdzYAorICAgICAgICAgICAgIE9TTUVTQV9MSUJTPWAkT1NNRVNBX0NPTkZJRyAtLWxpYnNgCisgICAgICAgICBmaQorLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wpCistICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTF9PU01FU0EpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTCwxLCIiKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0xfT1NNRVNBLDEsIiIpCisgICAgICAgICBTRExfQ0ZMQUdTPSIkU0RMX0NGTEFHUyAkT1NNRVNBX0NGTEFHUyIKKyAgICAgICAgIFNETF9MSUJTPSIkU0RMX0xJQlMgJE9TTUVTQV9MSUJTIgorIAorQEAgLTE3NTgsNyArMTc1OCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1vc21lc2Etc2hhcmVkXSwKKyAgICAgICAgIGlmIHRlc3QgIngkZW5hYmxlX29zbWVzYV9zaGFyZWQiID0gInh5ZXMiIC1hICJ4JGVuYWJsZV9hdGFyaV9sZGciID0gInh5ZXMiOyB0aGVuCisgICAgICAgICAgICAgIyBEeW5hbWljIGxpbmtpbmcKKyAgICAgICAgICAgICBpZiB0ZXN0ICJ4JGhhdmVfb3NtZXNhX2hkciIgPSAieHllcyI7IHRoZW4KKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0xfT1NNRVNBX0RZTkFNSUMpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMX09TTUVTQV9EWU5BTUlDLDEsIiIpCisgICAgICAgICAgICAgZmkKKyAgICAgICAgIGZpCisgICAgIGZpCitAQCAtMTc5Miw3ICsxNzkyLDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWlucHV0LWV2ZW50c10sCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdXNlX2lucHV0X2V2ZW50cykKKyAgICAgICAgIGlmIHRlc3QgeCR1c2VfaW5wdXRfZXZlbnRzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfSU5QVVRfTElOVVhFVikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0lOUFVUX0xJTlVYRVYsMSwiIikKKyAgICAgICAgIGZpCisgICAgIGZpCisgfQorQEAgLTE4MTQsNyArMTgxNCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1pbnB1dC10c2xpYl0sIFsKKyAgICAgICAgIF0pCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCRlbmFibGVfaW5wdXRfdHNsaWIpCisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2lucHV0X3RzbGliID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfSU5QVVRfVFNMSUIpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9JTlBVVF9UU0xJQiwxLCIiKQorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sdHMiCisgICAgICAgICBmaQorICAgICBmaQorQEAgLTE4MzcsNyArMTgzNyw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wdGhdLCBbdXNlIEdOVQorICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKHB0aCkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHVzZV9wdGgpCisgICAgICAgICBpZiB0ZXN0ICJ4JHVzZV9wdGgiID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX1BUSCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9QVEgsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aHJlYWQvcHRoLyouYyIKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aHJlYWQvZ2VuZXJpYy9TRExfc3lzc2VtLmMiCisgICAgICAgICAgICAgU0RMX0NGTEFHUz0iJFNETF9DRkxBR1MgYCRQVEhfQ09ORklHIC0tY2ZsYWdzYCIKK0BAIC0xOTQzLDcgKzE5NDMsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtcHRocmVhZC1zZW1dLCBbCisgCisgICAgICAgICAjIERvIGZ1dGhlciB0ZXN0aW5nIGlmIHdlIGhhdmUgcHRocmVhZCBzdXBwb3J0Li4uCisgICAgICAgICBpZiB0ZXN0IHgkdXNlX3B0aHJlYWRzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX1BUSFJFQUQpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfUFRIUkVBRCwxLCIiKQorICAgICAgICAgICAgIEVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAkcHRocmVhZF9jZmxhZ3MiCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgJHB0aHJlYWRfbGliIgorICAgICAgICAgICAgIFNETF9DRkxBR1M9IiRTRExfQ0ZMQUdTICRwdGhyZWFkX2NmbGFncyIKK0BAIC0xOTY1LDcgKzE5NjUsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtcHRocmVhZC1zZW1dLCBbCisgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSgmYXR0ciwgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUpOworICAgICAgICAgICAgICAgICBdLFsKKyAgICAgICAgICAgICAgICAgaGFzX3JlY3Vyc2l2ZV9tdXRleGVzPXllcworLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9QVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfUFRIUkVBRF9SRUNVUlNJVkVfTVVURVgsMSwiIikKKyAgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIGlmIHRlc3QgeCRoYXNfcmVjdXJzaXZlX211dGV4ZXMgPSB4bm87IHRoZW4KK0BAIC0xOTc2LDcgKzE5NzYsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtcHRocmVhZC1zZW1dLCBbCisgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleGF0dHJfc2V0a2luZF9ucCgmYXR0ciwgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlApOworICAgICAgICAgICAgICAgICBdLFsKKyAgICAgICAgICAgICAgICAgaGFzX3JlY3Vyc2l2ZV9tdXRleGVzPXllcworLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9QVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9OUCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfTlAsMSwiIikKKyAgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIEFDX01TR19SRVNVTFQoJGhhc19yZWN1cnNpdmVfbXV0ZXhlcykKK0BAIC0yMDY1LDcgKzIwNjUsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtc3RkaW8tcmVkaXJlY3RdCisgICAgIGZpCisgCisgICAgIGlmIHRlc3QgeCRlbmFibGVfdmlkZW8gPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9XSU5ESUIpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9XSU5ESUIsMSwiIikKKyAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3dpbmNvbW1vbi8qLmMiCisgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby93aW5kaWIvKi5jIgorICAgICAgICAgaGF2ZV92aWRlbz15ZXMKK0BAIC0yMDg3LDcgKzIwODcsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZGlyZWN0eF0sIFt1c2UKKyAgICAgICAgICAgICBoYXZlX2RpcmVjdHg9eWVzCisgICAgICAgICBmaQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlbyA9IHh5ZXMgLWEgeCRoYXZlX2RpcmVjdHggPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfRERSQVcpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfRERSQVcsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby93aW5keDUvKi5jIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCisgICAgICAgICBmaQorQEAgLTIxMTgsNyArMjExOCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zZGwtZGxvcGVuXSwgW3UKKyAgICAgICAgICAgICBBQ19DSEVDS19MSUIoYywgZGxvcGVuLCBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyIsCisgICAgICAgICAgICAgICAgQUNfQ0hFQ0tfTElCKGRsLCBkbG9wZW4sIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sZGwiLAorICAgICAgICAgICAgICAgICAgIEFDX0NIRUNLX0xJQihsdGRsLCBkbG9wZW4sIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sbHRkbCIpKSkKKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19ETE9QRU4pCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9MT0FEU09fRExPUEVOLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvbG9hZHNvL2Rsb3Blbi8qLmMiCisgICAgICAgICAgICAgaGF2ZV9sb2Fkc289eWVzCisgICAgICAgICBmaQorQEAgLTIxMzUsNyArMjEzNSw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hdGFyaS1sZGddLCBbdXMKKyAgICAgICAgIEFDX0NIRUNLX0hFQURFUihsZGcuaCwgaGF2ZV9sZGdfaGRyPXllcykKKyAgICAgICAgIEFDX0NIRUNLX0xJQihsZGcsIGxkZ19vcGVuLCBoYXZlX2xkZ19saWI9eWVzLCBoYXZlX2xkZ19saWI9bm8sIC1sZ2VtKQorICAgICAgICAgaWYgdGVzdCB4JGhhdmVfbGRnX2hkciA9IHh5ZXMgLWEgeCRoYXZlX2xkZ19saWIgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9MT0FEU09fTERHKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0xERywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2xvYWRzby9taW50LyouYyIKKyAgICAgICAgICAgICBTRExfTElCUz0iJFNETF9MSUJTIC1sbGRnIC1sZ2VtIgorICAgICAgICAgICAgIGhhdmVfbG9hZHNvPXllcworQEAgLTIyNjYsMTEgKzIyNjYsMTEgQEAgQ2hlY2tVU0JISUQoKQorICAgICAgICAgICAgIGhhdmVfbWFjaGluZV9qb3lzdGljaz15ZXMKKyAgICAgICAgICAgICBdKQorICAgICAgICAgICAgIGlmIHRlc3QgeCRoYXZlX21hY2hpbmVfam95c3RpY2sgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfVVNCSElEX01BQ0hJTkVfSk9ZU1RJQ0tfSCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19VU0JISURfTUFDSElORV9KT1lTVElDS19ILDEsIiIpCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKCRoYXZlX21hY2hpbmVfam95c3RpY2spCisgCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19VU0JISUQpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19VU0JISUQsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9qb3lzdGljay9ic2QvKi5jIgorICAgICAgICAgICAgIEVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAkVVNCX0NGTEFHUyIKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAkVVNCX0xJQlMiCitAQCAtMjI4OSw3ICsyMjg5LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWNsb2NrX2dldHRpbWVdLAorICAgICBpZiB0ZXN0IHgkZW5hYmxlX2Nsb2NrX2dldHRpbWUgPSB4eWVzOyB0aGVuCisgICAgICAgICBBQ19DSEVDS19MSUIocnQsIGNsb2NrX2dldHRpbWUsIGhhdmVfY2xvY2tfZ2V0dGltZT15ZXMpCisgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9jbG9ja19nZXR0aW1lID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0NMT0NLX0dFVFRJTUUpCisrICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfQ0xPQ0tfR0VUVElNRSwxLCIiKQorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1scnQiCisgICAgICAgICBmaQorICAgICBmaQorQEAgLTIzMjAsNyArMjMyMCw3IEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgQ2hlY2tJUG9kCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHRpbWVyIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdGltZXJzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfVU5JWCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1VOSVgsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aW1lci91bml4LyouYyIKKyAgICAgICAgICAgICBoYXZlX3RpbWVycz15ZXMKKyAgICAgICAgIGZpCitAQCAtMjM4NiwxNyArMjM4NiwxNyBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfYXVkaW8gPSB4eWVzOyB0aGVuCisgICAgICAgICAgIGNhc2UgJEFSQ0ggaW4KKyAgICAgICAgICAgICBzeXN2NXxzb2xhcmlzfGhwdXgpCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX1NVTkFVRElPKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9TVU5BVURJTywxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9zdW4vKi5jIgorICAgICAgICAgICAgICAgICBoYXZlX2F1ZGlvPXllcworICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgbmV0YnNkfG9wZW5ic2QpCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0JTRCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfQlNELDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL2JzZC8qLmMiCisgICAgICAgICAgICAgICAgIGhhdmVfYXVkaW89eWVzCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICBhaXgpCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX1BBVUQpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX1BBVUQsMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vcGF1ZGlvLyouYyIKKyAgICAgICAgICAgICAgICAgaGF2ZV9hdWRpbz15ZXMKKyAgICAgICAgICAgICA7OworQEAgLTI0MDYsNyArMjQwNiw3IEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9qb3lzdGljayA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgY2FzZSAkQVJDSCBpbgorICAgICAgICAgICAgIGxpbnV4KQorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX0xJTlVYKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX0xJTlVYLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2pveXN0aWNrL2xpbnV4LyouYyIKKyAgICAgICAgICAgICAgICAgaGF2ZV9qb3lzdGljaz15ZXMKKyAgICAgICAgICAgICA7OworQEAgLTI0MTYsMzIgKzI0MTYsMzIgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2Nkcm9tID0geHllczsgdGhlbgorICAgICAgICAgICBjYXNlICRBUkNIIGluCisgICAgICAgICAgICAgbGludXh8c29sYXJpcykKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9MSU5VWCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9MSU5VWCwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9saW51eC8qLmMiCisgICAgICAgICAgICAgICAgIGhhdmVfY2Ryb209eWVzCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAqZnJlZWJzZCopCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fRlJFRUJTRCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9GUkVFQlNELDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2Nkcm9tL2ZyZWVic2QvKi5jIgorICAgICAgICAgICAgICAgICBoYXZlX2Nkcm9tPXllcworICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgKm9wZW5ic2QqfCpuZXRic2QqKQorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX09QRU5CU0QpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fT1BFTkJTRCwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9vcGVuYnNkLyouYyIKKyAgICAgICAgICAgICAgICAgaGF2ZV9jZHJvbT15ZXMKKyAgICAgICAgICAgICA7OworICAgICAgICAgICAgIGJzZGkpCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fQlNESSkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9CU0RJLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2Nkcm9tL2JzZGkvKi5jIgorICAgICAgICAgICAgICAgICBoYXZlX2Nkcm9tPXllcworICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgYWl4KQorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0FJWCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9BSVgsMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvY2Ryb20vYWl4LyouYyIKKyAgICAgICAgICAgICAgICAgaGF2ZV9jZHJvbT15ZXMKKyAgICAgICAgICAgICA7OworICAgICAgICAgICAgIG9zZikKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9PU0YpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fT1NGLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2Nkcm9tL29zZi8qLmMiCisgICAgICAgICAgICAgICAgIGhhdmVfY2Ryb209eWVzCisgICAgICAgICAgICAgOzsKK0BAIC0yNDQ5LDcgKzI0NDksNyBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHRocmVhZCBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RocmVhZHMgPSB4eWVzIC1hIHgkdXNlX3B0aHJlYWRzICE9IHh5ZXMgLWEgeCR1c2VfcHRoICE9IHh5ZXMgLWEgeCRBUkNIID0geGlyaXg7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9TUFJPQykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9TUFJPQywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RocmVhZC9pcml4LyouYyIKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aHJlYWQvZ2VuZXJpYy9TRExfc3lzbXV0ZXguYyIKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aHJlYWQvZ2VuZXJpYy9TRExfc3lzY29uZC5jIgorQEAgLTI0NTcsNyArMjQ1Nyw3IEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgdGltZXIgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aW1lcnMgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9VTklYKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfVU5JWCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RpbWVyL3VuaXgvKi5jIgorICAgICAgICAgICAgIGhhdmVfdGltZXJzPXllcworICAgICAgICAgZmkKK0BAIC0yNDc2LDIwICsyNDc2LDIwIEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgQ2hlY2tQVEhSRUFECisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGF1ZGlvIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfYXVkaW8gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfUU5YTlRPKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX1FOWE5UTywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL250by8qLmMiCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWxhc291bmQiCisgICAgICAgICAgICAgaGF2ZV9hdWRpbz15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGNkcm9tIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfY2Ryb20gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9RTlgpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9RTlgsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9xbngvKi5jIgorICAgICAgICAgICAgIGhhdmVfY2Ryb209eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB0aW1lciBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RpbWVycyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1VOSVgpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9VTklYLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGltZXIvdW5peC8qLmMiCisgICAgICAgICAgICAgaGF2ZV90aW1lcnM9eWVzCisgICAgICAgICBmaQorQEAgLTI1MTQsMjkgKzI1MTQsMjkgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICBDaGVja05BU00KKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgYXVkaW8gbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9hdWRpbyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9XQVZFT1VUKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX1dBVkVPVVQsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby93aW5kaWIvKi5jIgorICAgICAgICAgICAgIGlmIHRlc3QgeCRoYXZlX2RpcmVjdHggPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0RTT1VORCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfRFNPVU5ELDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL3dpbmR4NS8qLmMiCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBoYXZlX2F1ZGlvPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgam95c3RpY2sgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9qb3lzdGljayA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX1dJTk1NKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfV0lOTU0sMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9qb3lzdGljay93aW4zMi8qLmMiCisgICAgICAgICAgICAgaGF2ZV9qb3lzdGljaz15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGNkcm9tIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfY2Ryb20gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9XSU4zMikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX1dJTjMyLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvY2Ryb20vd2luMzIvKi5jIgorICAgICAgICAgICAgIGhhdmVfY2Ryb209eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB0aHJlYWQgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aHJlYWRzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX1dJTjMyKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX1dJTjMyLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGhyZWFkL3dpbjMyL1NETF9zeXNtdXRleC5jIgorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RocmVhZC93aW4zMi9TRExfc3lzc2VtLmMiCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGhyZWFkL3dpbjMyL1NETF9zeXN0aHJlYWQuYyIKK0BAIC0yNTQ1LDEzICsyNTQ1LDEzIEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgdGltZXIgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aW1lcnMgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9XSU4zMikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1dJTjMyLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGltZXIvd2luMzIvKi5jIgorICAgICAgICAgICAgIGhhdmVfdGltZXJzPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgc2hhcmVkIG9iamVjdCBsb2FkaW5nIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfbG9hZHNvID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX1dJTjMyKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX1dJTjMyLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvbG9hZHNvL3dpbjMyLyouYyIKKyAgICAgICAgICAgICBoYXZlX2xvYWRzbz15ZXMKKyAgICAgICAgIGZpCitAQCAtMjYyMiwyNSArMjYyMiwyNSBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIENoZWNrQmVHTAorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBhdWRpbyBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2F1ZGlvID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0JBVURJTykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9CQVVESU8sMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9iYXVkaW8vKi5jYyIKKyAgICAgICAgICAgICBoYXZlX2F1ZGlvPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgam95c3RpY2sgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9qb3lzdGljayA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX0JFT1MpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19CRU9TLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvam95c3RpY2svYmVvcy8qLmNjIgorICAgICAgICAgICAgIGhhdmVfam95c3RpY2s9eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBjZHJvbSBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2Nkcm9tID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fQkVPUykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0JFT1MsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9iZW9zLyouY2MiCisgICAgICAgICAgICAgaGF2ZV9jZHJvbT15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHRocmVhZCBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RocmVhZHMgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfQkVPUykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9CRU9TLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGhyZWFkL2Jlb3MvKi5jIgorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RocmVhZC9nZW5lcmljL1NETF9zeXNtdXRleC5jIgorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RocmVhZC9nZW5lcmljL1NETF9zeXNjb25kLmMiCitAQCAtMjY0OCw3ICsyNjQ4LDcgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB0aW1lciBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RpbWVycyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX0JFT1MpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9CRU9TLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGltZXIvYmVvcy8qLmMiCisgICAgICAgICAgICAgaGF2ZV90aW1lcnM9eWVzCisgICAgICAgICBmaQorQEAgLTI2NTYsMTEgKzI2NTYsMTEgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2xvYWRzbyA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgICBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgICAgICAgICAgKi0qLWJlb3MqKQorLSAgICAgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9MT0FEU09fQkVPUykKKysgICAgICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0JFT1MsMSwiIikKKyAgICAgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2xvYWRzby9iZW9zLyouYyIKKyAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgKi0qLWhhaWt1KikKKy0gICAgICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0RMT1BFTikKKysgICAgICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0RMT1BFTiwxLCIiKQorICAgICAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvbG9hZHNvL2Rsb3Blbi8qLmMiCisgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgZXNhYyAgICAKK0BAIC0yNjk2LDcgKzI2OTYsNyBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgc2hhcmVkIG9iamVjdCBsb2FkaW5nIGxpYnJhcnkKKyAgICAgICAgICMgKHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBiZWZvcmUgdGhlIGR5bmFtaWMgWDExIGNoZWNrKQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9sb2Fkc28gPSB4eWVzIC1hIHgkaGF2ZV9kbG9wZW4gIT0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0RMQ09NUEFUKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0RMQ09NUEFULDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvbG9hZHNvL21hY29zeC8qLmMiCisgICAgICAgICAgICAgaGF2ZV9sb2Fkc289eWVzCisgICAgICAgICBmaQorQEAgLTI3MTQsMjYgKzI3MTQsMjYgQEAgY2FzZSAiJGhvc3QiIGluCisgCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGF1ZGlvIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfYXVkaW8gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfQ09SRUFVRElPKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0NPUkVBVURJTywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL21hY29zeC8qLmMiCisgICAgICAgICAgICAgaGF2ZV9hdWRpbz15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGpveXN0aWNrIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfam95c3RpY2sgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19JT0tJVCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX0lPS0lULDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvam95c3RpY2svZGFyd2luLyouYyIKKyAgICAgICAgICAgICBoYXZlX2pveXN0aWNrPXllcworICAgICAgICAgICAgIG5lZWRfaW9raXRfZnJhbWV3b3JrPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgY2Ryb20gbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9jZHJvbSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX01BQ09TWCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX01BQ09TWCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2Nkcm9tL21hY29zeC8qLmMiCisgICAgICAgICAgICAgaGF2ZV9jZHJvbT15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHRpbWVyIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdGltZXJzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfVU5JWCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1VOSVgsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aW1lci91bml4LyouYyIKKyAgICAgICAgICAgICBoYXZlX3RpbWVycz15ZXMKKyAgICAgICAgIGZpCitAQCAtMjc3NSwzMCArMjc3NSwzMCBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgYXVkaW8gbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aHJlYWRzID0geHllcyAtYSB4JGVuYWJsZV9wdGggPSB4eWVzOyB0aGVuCisgICAgICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9hdWRpbyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfU1VOQVVESU8pCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX1NVTkFVRElPLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL3N1bi8qLmMiCisgICAgICAgICAgICAgICAgIGhhdmVfYXVkaW89eWVzCisgICAgICAgICAgICAgZmkKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGpveXN0aWNrIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfam95c3RpY2sgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19NSU5UKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfTUlOVCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2pveXN0aWNrL21pbnQvKi5jIgorICAgICAgICAgICAgIGhhdmVfam95c3RpY2s9eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBjZHJvbSBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2Nkcm9tID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fTUlOVCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX01JTlQsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9taW50LyouYyIKKyAgICAgICAgICAgICBoYXZlX2Nkcm9tPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgdGltZXIgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aW1lcnMgPSB4eWVzOyB0aGVuCisgICAgICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aHJlYWRzID0geHllcyAtYSB4JGVuYWJsZV9wdGggPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfVU5JWCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9VTklYLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RpbWVyL3VuaXgvKi5jIgorICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9NSU5UKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX01JTiwxLCIiVCkKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGltZXIvbWludC8qLmMiCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RpbWVyL21pbnQvKi5TIgorICAgICAgICAgICAgIGZpCitAQCAtMjgxMSwyMCArMjgxMSwyMCBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIENoZWNrUFRIUkVBRAorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB2aWRlbyBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1JJU0NPUykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9SSVNDT1MsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9yaXNjb3MvKi5jIgorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3Jpc2Nvcy8qLlMiCisgICAgICAgICAgICAgaGF2ZV92aWRlbz15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGpveXN0aWNrIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfam95c3RpY2sgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19SSVNDT1MpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19SSVNDT1MsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9qb3lzdGljay9yaXNjb3MvKi5jIgorICAgICAgICAgICAgIGhhdmVfam95c3RpY2s9eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB0aW1lciBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RpbWVycyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1JJU0NPUykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1JJU0NPUywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RpbWVyL3Jpc2Nvcy8qLmMiCisgICAgICAgICAgICAgaGF2ZV90aW1lcnM9eWVzCisgICAgICAgICBmaQorQEAgLTI4NDYsMzEgKzI4NDYsMzEgQEAgQ2hlY2tXYXJuQWxsCisgaWYgdGVzdCB4JGVuYWJsZV9qb3lzdGljayA9IHh5ZXM7IHRoZW4KKyAgIGlmIHRlc3QgeCRoYXZlX2pveXN0aWNrICE9IHh5ZXM7IHRoZW4KKyAgICAgIyBXYW50cyBqb3lzdGljayBzdWJzeXN0ZW0sIGJ1dCBkb2Vzbid0IGhhdmUgYSBwbGF0Zm9ybS1zcGVjaWZpYyBiYWNrZW5kLi4uCistICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfRFVNTVkpCisrICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfRFVNTVksMSwiIikKKyAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvam95c3RpY2svZHVtbXkvKi5jIgorICAgZmkKKyBmaQorIGlmIHRlc3QgeCRoYXZlX2Nkcm9tICE9IHh5ZXM7IHRoZW4KKyAgICAgaWYgdGVzdCB4JGVuYWJsZV9jZHJvbSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShTRExfQ0RST01fRElTQUJMRUQpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0RJU0FCTEVELDEsIiIpCisgICAgIGZpCisgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2Nkcm9tL2R1bW15LyouYyIKKyBmaQorIGlmIHRlc3QgeCRoYXZlX3RocmVhZHMgIT0geHllczsgdGhlbgorICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RocmVhZHMgPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRFNfRElTQUJMRUQpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRFNfRElTQUJMRUQsMSwiIikKKyAgICAgZmkKKyAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGhyZWFkL2dlbmVyaWMvKi5jIgorIGZpCisgaWYgdGVzdCB4JGhhdmVfdGltZXJzICE9IHh5ZXM7IHRoZW4KKyAgICAgaWYgdGVzdCB4JGVuYWJsZV90aW1lcnMgPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSU19ESVNBQkxFRCkKKysgICAgICAgIEFDX0RFRklORShTRExfVElNRVJTX0RJU0FCTEVELDEsIiIpCisgICAgIGZpCisgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RpbWVyL2R1bW15LyouYyIKKyBmaQorIGlmIHRlc3QgeCRoYXZlX2xvYWRzbyAhPSB4eWVzOyB0aGVuCisgICAgIGlmIHRlc3QgeCRlbmFibGVfbG9hZHNvID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKFNETF9MT0FEU09fRElTQUJMRUQpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19ESVNBQkxFRCwxLCIiKQorICAgICBmaQorICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9sb2Fkc28vZHVtbXkvKi5jIgorIGZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsLTEuMi4xNS9saWJzZGwtMS4yLjE1LXhkYXRhMzIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsLTEuMi4xNS9saWJzZGwtMS4yLjE1LXhkYXRhMzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk4YjkyNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGwtMS4yLjE1L2xpYnNkbC0xLjIuMTUteGRhdGEzMi5wYXRjaApAQCAtMCwwICsxLDE5IEBACitsaWJYMTEtMS41Ljk5LjkwMSBoYXMgY2hhbmdlZCBwcm90b3R5cGUgb2YgX1hEYXRhMzIKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorPGh0dHA6Ly9idWd6aWxsYS5saWJzZGwub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY5PgorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK2RpZmYgLXIgYjZiMjgyOWNkN2VmIHNyYy92aWRlby94MTEvU0RMX3gxMXN5bS5oCistLS0gYS9zcmMvdmlkZW8veDExL1NETF94MTFzeW0uaAlXZWQgRmViIDI3IDE1OjIwOjMxIDIwMTMgLTA4MDAKKysrKyBiL3NyYy92aWRlby94MTEvU0RMX3gxMXN5bS5oCVdlZCBNYXIgMjcgMTY6MDc6MjMgMjAxMyArMDEwMAorQEAgLTE2NSw3ICsxNjUsNyBAQAorICAqLworICNpZmRlZiBMT05HNjQKKyBTRExfWDExX01PRFVMRShJT18zMkJJVCkKKy1TRExfWDExX1NZTShpbnQsX1hEYXRhMzIsKERpc3BsYXkgKmRweSxyZWdpc3RlciBsb25nICpkYXRhLHVuc2lnbmVkIGxlbiksKGRweSxkYXRhLGxlbikscmV0dXJuKQorK1NETF9YMTFfU1lNKGludCxfWERhdGEzMiwoRGlzcGxheSAqZHB5LHJlZ2lzdGVyIF9YY29uc3QgbG9uZyAqZGF0YSx1bnNpZ25lZCBsZW4pLChkcHksZGF0YSxsZW4pLHJldHVybikKKyBTRExfWDExX1NZTSh2b2lkLF9YUmVhZDMyLChEaXNwbGF5ICpkcHkscmVnaXN0ZXIgbG9uZyAqZGF0YSxsb25nIGxlbiksKGRweSxkYXRhLGxlbiksKQorICNlbmRpZgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsLTEuMi4xNS9wa2djb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsLTEuMi4xNS9wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEzYmFhOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGwtMS4yLjE1L3BrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDE4NyBAQAorUmF0aGVyIHRoYW4gY29kZSB3aGljaCBkb2Vzbid0IGV2ZW4gd29yayBwcm9wZXJseSB3aGVuIGNyb3NzIGNvbXBpbGluZywKK2xldHMganVzdCB1c2UgcGtnLWNvbmZpZyBpbnN0ZWFkLiBJdHMgYSBsaXR0bGUgc2ltcGxlci4KKworUlAgMjAxNC82LzIwCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogU0RMLTEuMi4xNS9zZGwubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBTREwtMS4yLjE1Lm9yaWcvc2RsLm00CisrKysgU0RMLTEuMi4xNS9zZGwubTQKK0BAIC0xMiwxNzQgKzEyLDggQEAgZG5sIFRlc3QgZm9yIFNETCwgYW5kIGRlZmluZSBTRExfQ0ZMQUdTCisgZG5sCisgQUNfREVGVU4oW0FNX1BBVEhfU0RMXSwKKyBbZG5sIAorLWRubCBHZXQgdGhlIGNmbGFncyBhbmQgbGlicmFyaWVzIGZyb20gdGhlIHNkbC1jb25maWcgc2NyaXB0CistZG5sCistQUNfQVJHX1dJVEgoc2RsLXByZWZpeCxbICAtLXdpdGgtc2RsLXByZWZpeD1QRlggICBQcmVmaXggd2hlcmUgU0RMIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSwKKy0gICAgICAgICAgICBzZGxfcHJlZml4PSIkd2l0aHZhbCIsIHNkbF9wcmVmaXg9IiIpCistQUNfQVJHX1dJVEgoc2RsLWV4ZWMtcHJlZml4LFsgIC0td2l0aC1zZGwtZXhlYy1wcmVmaXg9UEZYIEV4ZWMgcHJlZml4IHdoZXJlIFNETCBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sCistICAgICAgICAgICAgc2RsX2V4ZWNfcHJlZml4PSIkd2l0aHZhbCIsIHNkbF9leGVjX3ByZWZpeD0iIikKKy1BQ19BUkdfRU5BQkxFKHNkbHRlc3QsIFsgIC0tZGlzYWJsZS1zZGx0ZXN0ICAgICAgIERvIG5vdCB0cnkgdG8gY29tcGlsZSBhbmQgcnVuIGEgdGVzdCBTREwgcHJvZ3JhbV0sCistCQkgICAgLCBlbmFibGVfc2RsdGVzdD15ZXMpCistCistICBpZiB0ZXN0IHgkc2RsX2V4ZWNfcHJlZml4ICE9IHggOyB0aGVuCistICAgIHNkbF9jb25maWdfYXJncz0iJHNkbF9jb25maWdfYXJncyAtLWV4ZWMtcHJlZml4PSRzZGxfZXhlY19wcmVmaXgiCistICAgIGlmIHRlc3QgeCR7U0RMX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCistICAgICAgU0RMX0NPTkZJRz0kc2RsX2V4ZWNfcHJlZml4L2Jpbi9zZGwtY29uZmlnCistICAgIGZpCistICBmaQorLSAgaWYgdGVzdCB4JHNkbF9wcmVmaXggIT0geCA7IHRoZW4KKy0gICAgc2RsX2NvbmZpZ19hcmdzPSIkc2RsX2NvbmZpZ19hcmdzIC0tcHJlZml4PSRzZGxfcHJlZml4IgorLSAgICBpZiB0ZXN0IHgke1NETF9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgorLSAgICAgIFNETF9DT05GSUc9JHNkbF9wcmVmaXgvYmluL3NkbC1jb25maWcKKy0gICAgZmkKKy0gIGZpCistCistICBhc19zYXZlX1BBVEg9IiRQQVRIIgorLSAgaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCistICAgIFBBVEg9IiRwcmVmaXgvYmluOiRwcmVmaXgvdXNyL2JpbjokUEFUSCIKKy0gIGZpCistICBBQ19QQVRIX1BST0coU0RMX0NPTkZJRywgc2RsLWNvbmZpZywgbm8sIFskUEFUSF0pCistICBQQVRIPSIkYXNfc2F2ZV9QQVRIIgorICAgbWluX3NkbF92ZXJzaW9uPWlmZWxzZShbJDFdLCAsMC4xMS4wLCQxKQorLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBTREwgLSB2ZXJzaW9uID49ICRtaW5fc2RsX3ZlcnNpb24pCistICBub19zZGw9IiIKKy0gIGlmIHRlc3QgIiRTRExfQ09ORklHIiA9ICJubyIgOyB0aGVuCistICAgIG5vX3NkbD15ZXMKKy0gIGVsc2UKKy0gICAgU0RMX0NGTEFHUz1gJFNETF9DT05GSUcgJHNkbF9jb25maWdfYXJncyAtLWNmbGFnc2AKKy0gICAgU0RMX0xJQlM9YCRTRExfQ09ORklHICRzZGxfY29uZmlnX2FyZ3MgLS1saWJzYAorLQorLSAgICBzZGxfbWFqb3JfdmVyc2lvbj1gJFNETF9DT05GSUcgJHNkbF9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCistICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDEvJ2AKKy0gICAgc2RsX21pbm9yX3ZlcnNpb249YCRTRExfQ09ORklHICRzZGxfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wyLydgCistICAgIHNkbF9taWNyb192ZXJzaW9uPWAkU0RMX0NPTkZJRyAkc2RsX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKKy0gICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMy8nYAorLSAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9zZGx0ZXN0IiA9ICJ4eWVzIiA7IHRoZW4KKy0gICAgICBhY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKKy0gICAgICBhY19zYXZlX0NYWEZMQUdTPSIkQ1hYRkxBR1MiCistICAgICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKKy0gICAgICBDRkxBR1M9IiRDRkxBR1MgJFNETF9DRkxBR1MiCistICAgICAgQ1hYRkxBR1M9IiRDWFhGTEFHUyAkU0RMX0NGTEFHUyIKKy0gICAgICBMSUJTPSIkTElCUyAkU0RMX0xJQlMiCistZG5sCistZG5sIE5vdyBjaGVjayBpZiB0aGUgaW5zdGFsbGVkIFNETCBpcyBzdWZmaWNpZW50bHkgbmV3LiAoQWxzbyBzYW5pdHkKKy1kbmwgY2hlY2tzIHRoZSByZXN1bHRzIG9mIHNkbC1jb25maWcgdG8gc29tZSBleHRlbnQKKy1kbmwKKy0gICAgICBybSAtZiBjb25mLnNkbHRlc3QKKy0gICAgICBBQ19UUllfUlVOKFsKKy0jaW5jbHVkZSA8c3RkaW8uaD4KKy0jaW5jbHVkZSA8c3RkbGliLmg+CistI2luY2x1ZGUgPHN0cmluZy5oPgorLSNpbmNsdWRlICJTREwuaCIKKy0KKy1jaGFyKgorLW15X3N0cmR1cCAoY2hhciAqc3RyKQorLXsKKy0gIGNoYXIgKm5ld19zdHI7CistICAKKy0gIGlmIChzdHIpCistICAgIHsKKy0gICAgICBuZXdfc3RyID0gKGNoYXIgKiltYWxsb2MgKChzdHJsZW4gKHN0cikgKyAxKSAqIHNpemVvZihjaGFyKSk7CistICAgICAgc3RyY3B5IChuZXdfc3RyLCBzdHIpOworLSAgICB9CistICBlbHNlCistICAgIG5ld19zdHIgPSBOVUxMOworLSAgCistICByZXR1cm4gbmV3X3N0cjsKKy19CistCistaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisteworLSAgaW50IG1ham9yLCBtaW5vciwgbWljcm87CistICBjaGFyICp0bXBfdmVyc2lvbjsKKy0KKy0gIC8qIFRoaXMgaGFuZ3Mgb24gc29tZSBzeXN0ZW1zICg/KQorLSAgc3lzdGVtICgidG91Y2ggY29uZi5zZGx0ZXN0Iik7CistICAqLworLSAgeyBGSUxFICpmcCA9IGZvcGVuKCJjb25mLnNkbHRlc3QiLCAiYSIpOyBpZiAoIGZwICkgZmNsb3NlKGZwKTsgfQorLQorLSAgLyogSFAvVVggOSAoJUAjISkgd3JpdGVzIHRvIHNzY2FuZiBzdHJpbmdzICovCistICB0bXBfdmVyc2lvbiA9IG15X3N0cmR1cCgiJG1pbl9zZGxfdmVyc2lvbiIpOworLSAgaWYgKHNzY2FuZih0bXBfdmVyc2lvbiwgIiVkLiVkLiVkIiwgJm1ham9yLCAmbWlub3IsICZtaWNybykgIT0gMykgeworLSAgICAgcHJpbnRmKCIlcywgYmFkIHZlcnNpb24gc3RyaW5nXG4iLCAiJG1pbl9zZGxfdmVyc2lvbiIpOworLSAgICAgZXhpdCgxKTsKKy0gICB9CistCistICAgaWYgKCgkc2RsX21ham9yX3ZlcnNpb24gPiBtYWpvcikgfHwKKy0gICAgICAoKCRzZGxfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKCRzZGxfbWlub3JfdmVyc2lvbiA+IG1pbm9yKSkgfHwKKy0gICAgICAoKCRzZGxfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKCRzZGxfbWlub3JfdmVyc2lvbiA9PSBtaW5vcikgJiYgKCRzZGxfbWljcm9fdmVyc2lvbiA+PSBtaWNybykpKQorLSAgICB7CistICAgICAgcmV0dXJuIDA7CistICAgIH0KKy0gIGVsc2UKKy0gICAgeworLSAgICAgIHByaW50ZigiXG4qKiogJ3NkbC1jb25maWcgLS12ZXJzaW9uJyByZXR1cm5lZCAlZC4lZC4lZCwgYnV0IHRoZSBtaW5pbXVtIHZlcnNpb25cbiIsICRzZGxfbWFqb3JfdmVyc2lvbiwgJHNkbF9taW5vcl92ZXJzaW9uLCAkc2RsX21pY3JvX3ZlcnNpb24pOworLSAgICAgIHByaW50ZigiKioqIG9mIFNETCByZXF1aXJlZCBpcyAlZC4lZC4lZC4gSWYgc2RsLWNvbmZpZyBpcyBjb3JyZWN0LCB0aGVuIGl0IGlzXG4iLCBtYWpvciwgbWlub3IsIG1pY3JvKTsKKy0gICAgICBwcmludGYoIioqKiBiZXN0IHRvIHVwZ3JhZGUgdG8gdGhlIHJlcXVpcmVkIHZlcnNpb24uXG4iKTsKKy0gICAgICBwcmludGYoIioqKiBJZiBzZGwtY29uZmlnIHdhcyB3cm9uZywgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBTRExfQ09ORklHXG4iKTsKKy0gICAgICBwcmludGYoIioqKiB0byBwb2ludCB0byB0aGUgY29ycmVjdCBjb3B5IG9mIHNkbC1jb25maWcsIGFuZCByZW1vdmUgdGhlIGZpbGVcbiIpOworLSAgICAgIHByaW50ZigiKioqIGNvbmZpZy5jYWNoZSBiZWZvcmUgcmUtcnVubmluZyBjb25maWd1cmVcbiIpOworLSAgICAgIHJldHVybiAxOworLSAgICB9CistfQorLQorLV0sLCBub19zZGw9eWVzLFtlY2hvICRhY19uICJjcm9zcyBjb21waWxpbmc7IGFzc3VtZWQgT0suLi4gJGFjX2MiXSkKKy0gICAgICAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCistICAgICAgIENYWEZMQUdTPSIkYWNfc2F2ZV9DWFhGTEFHUyIKKy0gICAgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKKy0gICAgIGZpCistICBmaQorLSAgaWYgdGVzdCAieCRub19zZGwiID0geCA7IHRoZW4KKy0gICAgIEFDX01TR19SRVNVTFQoeWVzKQorLSAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkgICAgIAorLSAgZWxzZQorLSAgICAgQUNfTVNHX1JFU1VMVChubykKKy0gICAgIGlmIHRlc3QgIiRTRExfQ09ORklHIiA9ICJubyIgOyB0aGVuCistICAgICAgIGVjaG8gIioqKiBUaGUgc2RsLWNvbmZpZyBzY3JpcHQgaW5zdGFsbGVkIGJ5IFNETCBjb3VsZCBub3QgYmUgZm91bmQiCistICAgICAgIGVjaG8gIioqKiBJZiBTREwgd2FzIGluc3RhbGxlZCBpbiBQUkVGSVgsIG1ha2Ugc3VyZSBQUkVGSVgvYmluIGlzIGluIgorLSAgICAgICBlY2hvICIqKiogeW91ciBwYXRoLCBvciBzZXQgdGhlIFNETF9DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIgorLSAgICAgICBlY2hvICIqKiogZnVsbCBwYXRoIHRvIHNkbC1jb25maWcuIgorLSAgICAgZWxzZQorLSAgICAgICBpZiB0ZXN0IC1mIGNvbmYuc2RsdGVzdCA7IHRoZW4KKy0gICAgICAgIDoKKy0gICAgICAgZWxzZQorLSAgICAgICAgICBlY2hvICIqKiogQ291bGQgbm90IHJ1biBTREwgdGVzdCBwcm9ncmFtLCBjaGVja2luZyB3aHkuLi4iCistICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAkU0RMX0NGTEFHUyIKKy0gICAgICAgICAgQ1hYRkxBR1M9IiRDWFhGTEFHUyAkU0RMX0NGTEFHUyIKKy0gICAgICAgICAgTElCUz0iJExJQlMgJFNETF9MSUJTIgorLSAgICAgICAgICBBQ19UUllfTElOSyhbCistI2luY2x1ZGUgPHN0ZGlvLmg+CistI2luY2x1ZGUgIlNETC5oIgorLQorLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisteyByZXR1cm4gMDsgfQorLSN1bmRlZiAgbWFpbgorLSNkZWZpbmUgbWFpbiBLX2FuZF9SX0NfbWFpbgorLV0sICAgICAgWyByZXR1cm4gMDsgXSwKKy0gICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gY29tcGlsZWQsIGJ1dCBkaWQgbm90IHJ1bi4gVGhpcyB1c3VhbGx5IG1lYW5zIgorLSAgICAgICAgICBlY2hvICIqKiogdGhhdCB0aGUgcnVuLXRpbWUgbGlua2VyIGlzIG5vdCBmaW5kaW5nIFNETCBvciBmaW5kaW5nIHRoZSB3cm9uZyIKKy0gICAgICAgICAgZWNobyAiKioqIHZlcnNpb24gb2YgU0RMLiBJZiBpdCBpcyBub3QgZmluZGluZyBTREwsIHlvdSdsbCBuZWVkIHRvIHNldCB5b3VyIgorLSAgICAgICAgICBlY2hvICIqKiogTERfTElCUkFSWV9QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLCBvciBlZGl0IC9ldGMvbGQuc28uY29uZiB0byBwb2ludCIKKy0gICAgICAgICAgZWNobyAiKioqIHRvIHRoZSBpbnN0YWxsZWQgbG9jYXRpb24gIEFsc28sIG1ha2Ugc3VyZSB5b3UgaGF2ZSBydW4gbGRjb25maWcgaWYgdGhhdCIKKy0gICAgICAgICAgZWNobyAiKioqIGlzIHJlcXVpcmVkIG9uIHlvdXIgc3lzdGVtIgorLQkgIGVjaG8gIioqKiIKKy0gICAgICAgICAgZWNobyAiKioqIElmIHlvdSBoYXZlIGFuIG9sZCB2ZXJzaW9uIGluc3RhbGxlZCwgaXQgaXMgYmVzdCB0byByZW1vdmUgaXQsIGFsdGhvdWdoIgorLSAgICAgICAgICBlY2hvICIqKiogeW91IG1heSBhbHNvIGJlIGFibGUgdG8gZ2V0IHRoaW5ncyB0byB3b3JrIGJ5IG1vZGlmeWluZyBMRF9MSUJSQVJZX1BBVEgiXSwKKy0gICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gZmFpbGVkIHRvIGNvbXBpbGUgb3IgbGluay4gU2VlIHRoZSBmaWxlIGNvbmZpZy5sb2cgZm9yIHRoZSIKKy0gICAgICAgICAgZWNobyAiKioqIGV4YWN0IGVycm9yIHRoYXQgb2NjdXJlZC4gVGhpcyB1c3VhbGx5IG1lYW5zIFNETCB3YXMgaW5jb3JyZWN0bHkgaW5zdGFsbGVkIgorLSAgICAgICAgICBlY2hvICIqKiogb3IgdGhhdCB5b3UgaGF2ZSBtb3ZlZCBTREwgc2luY2UgaXQgd2FzIGluc3RhbGxlZC4gSW4gdGhlIGxhdHRlciBjYXNlLCB5b3UiCistICAgICAgICAgIGVjaG8gIioqKiBtYXkgd2FudCB0byBlZGl0IHRoZSBzZGwtY29uZmlnIHNjcmlwdDogJFNETF9DT05GSUciIF0pCistICAgICAgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgorLSAgICAgICAgICBDWFhGTEFHUz0iJGFjX3NhdmVfQ1hYRkxBR1MiCistICAgICAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCistICAgICAgIGZpCistICAgICBmaQorLSAgICAgU0RMX0NGTEFHUz0iIgorLSAgICAgU0RMX0xJQlM9IiIKKy0gICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCistICBmaQorKyAgUEtHX0NIRUNLX01PRFVMRVMoW1NETF0sIFtzZGwgPj0gJG1pbl9zZGxfdmVyc2lvbl0pCisgICBBQ19TVUJTVChTRExfQ0ZMQUdTKQorICAgQUNfU1VCU1QoU0RMX0xJQlMpCistICBybSAtZiBjb25mLnNkbHRlc3QKKyBdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbF8xLjIuMTUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsXzEuMi4xNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjZiZDQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbF8xLjIuMTUuYmIKQEAgLTAsMCArMSw2NyBAQAorU1VNTUFSWSA9ICJTaW1wbGUgRGlyZWN0TWVkaWEgTGF5ZXIiCitERVNDUklQVElPTiA9ICJTaW1wbGUgRGlyZWN0TWVkaWEgTGF5ZXIgaXMgYSBjcm9zcy1wbGF0Zm9ybSBtdWx0aW1lZGlhIFwKK2xpYnJhcnkgZGVzaWduZWQgdG8gcHJvdmlkZSBsb3cgbGV2ZWwgYWNjZXNzIHRvIGF1ZGlvLCBrZXlib2FyZCwgbW91c2UsIFwKK2pveXN0aWNrLCAzRCBoYXJkd2FyZSB2aWEgT3BlbkdMLCBhbmQgMkQgdmlkZW8gZnJhbWVidWZmZXIuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5saWJzZGwub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEubGlic2RsLm9yZy8iCisKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI3ODE4Y2Q3ZmQ4Mzg3N2E4ZTNlZjgyYjgyNzk4ZWY0IgorCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYnNkbCIKKworREVQRU5EUyA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2RpcmVjdGZiJywgJ2RpcmVjdGZiJywgJycsIGQpfSBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ3ZpcnR1YWwvbGliZ2wgbGliZ2x1JywgJycsIGQpfSBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3ZpcnR1YWwvbGlieDExIGxpYnhleHQgbGlieHJhbmRyIGxpYnhyZW5kZXInLCAnJywgZCl9IFwKKyAgICAgICAgICAgdHNsaWIiCitERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd2aXJ0dWFsL25hdGl2ZXNkay1saWJ4MTEgbmF0aXZlc2RrLWxpYnhyYW5kciBuYXRpdmVzZGstbGlieHJlbmRlciBuYXRpdmVzZGstbGlieGV4dCcsICcnLCBkKX0iCisKK1BSID0gInIzIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubGlic2RsLm9yZy9yZWxlYXNlL1NETC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlX3R3ZWFrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnNkbC0xLjIuMTUteGRhdGEzMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2ggXAorICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L1NETC0ke1BWfSIKKworU1JDX1VSSVttZDVzdW1dID0gIjlkOTZkZjg0MTc1NzJhMmFmYjc4MWE3YzRjODExYTg1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQ2ZDMxNmE3OTNlNWUzNDgxNTVmMGRkOTNiOTc5Nzk4OTMzZmI5OGFhMWVkZWJjYzEwODgyOWQ2NDc0YWFkMDAiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vc2RsLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgbGliX3BhY2thZ2UgYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXN0YXRpYyAtLWVuYWJsZS1jZHJvbSAtLWVuYWJsZS10aHJlYWRzIC0tZW5hYmxlLXRpbWVycyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtZmlsZSAtLWRpc2FibGUtb3NzIC0tZGlzYWJsZS1lc2QgLS1kaXNhYmxlLWFydHMgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1kaXNrYXVkaW8gLS1kaXNhYmxlLW5hcyAtLWRpc2FibGUtZXNkLXNoYXJlZCAtLWRpc2FibGUtZXNkdGVzdCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLW1pbnRhdWRpbyAtLWRpc2FibGUtbmFzbSAtLWRpc2FibGUtdmlkZW8tZGdhIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtdmlkZW8tZmJjb24gLS1kaXNhYmxlLXZpZGVvLXBzMmdzIC0tZGlzYWJsZS12aWRlby1wczMgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS14YmlvcyAtLWRpc2FibGUtZ2VtIC0tZGlzYWJsZS12aWRlby1kdW1teSBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtaW5wdXQtZXZlbnRzIC0tZW5hYmxlLWlucHV0LXRzbGliIC0tZW5hYmxlLXB0aHJlYWRzIFwKKyAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2RpcmVjdGZiJywgJy0tZW5hYmxlLXZpZGVvLWRpcmVjdGZiJywgJy0tZGlzYWJsZS12aWRlby1kaXJlY3RmYicsIGQpfSBcCisgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnLS1lbmFibGUtdmlkZW8tb3BlbmdsJywgJy0tZGlzYWJsZS12aWRlby1vcGVuZ2wnLCBkKX0gXAorICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJy0tZW5hYmxlLXZpZGVvLXgxMScsICctLWRpc2FibGUtdmlkZW8teDExJywgZCl9IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtdmlkZW8tc3ZnYSBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXZpZGVvLXBpY29ndWkgLS1kaXNhYmxlLXZpZGVvLXF0b3BpYSAtLWVuYWJsZS1zZGwtZGxvcGVuIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtcnBhdGggXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1wdWxzZWF1ZGlvIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdhbHNhJywgJ2Fsc2EnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1thbHNhXSA9ICItLWVuYWJsZS1hbHNhIC0tZGlzYWJsZS1hbHNhdGVzdCwtLWRpc2FibGUtYWxzYSxhbHNhLWxpYiwiCisKK0VYVFJBX0FVVE9SRUNPTkYgKz0gIi0taW5jbHVkZT1hY2luY2x1ZGUgLS1leGNsdWRlPWF1dG9oZWFkZXIiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICAgICAjIFJlbW92ZSBvbGQgbGlidG9vbCBtYWNyb3MuCisgICAgICAgIE1BQ1JPUz0ibGlidG9vbC5tNCBsdH5vYnNvbGV0ZS5tNCBsdG9wdGlvbnMubTQgbHRzdWdhci5tNCBsdHZlcnNpb24ubTQiCisgICAgICAgIGZvciBpIGluICR7TUFDUk9TfTsgZG8KKyAgICAgICAgICAgICAgIHJtIC1mICR7U30vYWNpbmNsdWRlLyRpCisgICAgICAgIGRvbmUKKyAgICAgICAgZXhwb3J0IFNZU1JPT1Q9JFBLR19DT05GSUdfU1lTUk9PVF9ESVIKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwyL2xpYnNkbDJfMi4wLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwyL2xpYnNkbDJfMi4wLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdmNjRmMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbDIvbGlic2RsMl8yLjAuMy5iYgpAQCAtMCwwICsxLDYzIEBACitTVU1NQVJZID0gIlNpbXBsZSBEaXJlY3RNZWRpYSBMYXllciIKK0RFU0NSSVBUSU9OID0gIlNpbXBsZSBEaXJlY3RNZWRpYSBMYXllciBpcyBhIGNyb3NzLXBsYXRmb3JtIG11bHRpbWVkaWEgXAorbGlicmFyeSBkZXNpZ25lZCB0byBwcm92aWRlIGxvdyBsZXZlbCBhY2Nlc3MgdG8gYXVkaW8sIGtleWJvYXJkLCBtb3VzZSwgXAoram95c3RpY2ssIDNEIGhhcmR3YXJlIHZpYSBPcGVuR0wsIGFuZCAyRCB2aWRlbyBmcmFtZWJ1ZmZlci4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpYnNkbC5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS5saWJzZGwub3JnLyIKKworU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIlpsaWIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLnR4dDttZDU9NjdkY2I3ZmFlMTY5NTI1NTdiYzVmOTZlOWViNWQxODgiCisKK1BST1ZJREVTID0gInZpcnR1YWwvbGlic2RsMiIKKworREVQRU5EU19jbGFzcy1uYXRpdmVzZGsgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAndmlydHVhbC9uYXRpdmVzZGstbGlieDExIG5hdGl2ZXNkay1saWJ4cmFuZHIgbmF0aXZlc2RrLWxpYnhyZW5kZXIgbmF0aXZlc2RrLWxpYnhleHQnLCAnJywgZCl9IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubGlic2RsLm9yZy9yZWxlYXNlL1NETDItJHtQVn0udGFyLmd6IgorCitTID0gIiR7V09SS0RJUn0vU0RMMi0ke1BWfSIKKworU1JDX1VSSVttZDVzdW1dID0gImZlNmM2MWQyZTlkZjllZjU3MGU3ZTgwYzZlODIyNTM3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImE1YTY5YTZhYmY4MGJjY2U3MTNmYTg3MzYwNzczNWZlNzEyZjQ0Mjc2YTdmMDQ4ZDYwYTYxYmIyZjZiM2M5MGMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlIGJpbmNvbmZpZyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1vc3MgLS1kaXNhYmxlLWVzZCAtLWRpc2FibGUtYXJ0cyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWRpc2thdWRpbyAtLWRpc2FibGUtbmFzIC0tZGlzYWJsZS1lc2Qtc2hhcmVkIC0tZGlzYWJsZS1lc2R0ZXN0IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtdmlkZW8tZHVtbXkgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLXB0aHJlYWRzIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1zZGwtZGxvcGVuIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtcnBhdGgiCisKKyMgb3BlbmdsIHBhY2thZ2Vjb25maWcgZmFjdG9yZWQgb3V0IHRvIG1ha2UgaXQgZWFzeSBmb3IgZGlzdHJvcworIyBhbmQgQlNQIGxheWVycyB0byBwaWNrIGVpdGhlciAoZGVza3RvcCkgb3BlbmdsLCBnbGVzMiwgb3Igbm8gR0wKK1BBQ0tBR0VDT05GSUdfR0wgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ29wZW5nbCcsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUcgPz89ICIgXAorICAgICR7UEFDS0FHRUNPTkZJR19HTH0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYWxzYScsICdhbHNhJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdkaXJlY3RmYicsICdkaXJlY3RmYicsICcnLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHVsc2VhdWRpbycsICdwdWxzZWF1ZGlvJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3YXlsYW5kJywgJ3dheWxhbmQnLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IFwKKyIKK1BBQ0tBR0VDT05GSUdbYWxzYV0gICAgICAgPSAiLS1lbmFibGUtYWxzYSAtLWRpc2FibGUtYWxzYXRlc3QsLS1kaXNhYmxlLWFsc2EsYWxzYS1saWIsIgorUEFDS0FHRUNPTkZJR1tkaXJlY3RmYl0gICA9ICItLWVuYWJsZS12aWRlby1kaXJlY3RmYiAtLWRpc2FibGUtdmlkZW8tZGlyZWN0ZmIsZGlyZWN0ZmIiCitQQUNLQUdFQ09ORklHW2dsZXMyXSAgICAgID0gIi0tZW5hYmxlLXZpZGVvLW9wZW5nbGVzLC0tZGlzYWJsZS12aWRlby1vcGVuZ2xlcyx2aXJ0dWFsL2xpYmdsZXMyIgorUEFDS0FHRUNPTkZJR1tvcGVuZ2xdICAgICA9ICItLWVuYWJsZS12aWRlby1vcGVuZ2wsLS1kaXNhYmxlLXZpZGVvLW9wZW5nbCx2aXJ0dWFsL2xpYmdsIgorUEFDS0FHRUNPTkZJR1twdWxzZWF1ZGlvXSA9ICItLWVuYWJsZS1wdWxzZWF1ZGlvLC0tZGlzYWJsZS1wdWxzZWF1ZGlvLHB1bHNlYXVkaW8iCitQQUNLQUdFQ09ORklHW3RzbGliXSAgICAgID0gIi0tZW5hYmxlLWlucHV0LXRzbGliLC0tZGlzYWJsZS1pbnB1dC10c2xpYix0c2xpYiIKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZF0gICAgPSAiLS1lbmFibGUtdmlkZW8td2F5bGFuZCwtLWRpc2FibGUtdmlkZW8td2F5bGFuZCx3YXlsYW5kIgorUEFDS0FHRUNPTkZJR1t4MTFdICAgICAgICA9ICItLWVuYWJsZS12aWRlby14MTEsLS1kaXNhYmxlLXZpZGVvLXgxMSx2aXJ0dWFsL2xpYngxMSBsaWJ4ZXh0IGxpYnhyYW5kciBsaWJ4cmVuZGVyIgorCitFWFRSQV9BVVRPUkVDT05GICs9ICItLWluY2x1ZGU9YWNpbmNsdWRlIC0tZXhjbHVkZT1hdXRvaGVhZGVyIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAgICAgIyBSZW1vdmUgb2xkIGxpYnRvb2wgbWFjcm9zLgorICAgICAgICBNQUNST1M9ImxpYnRvb2wubTQgbHR+b2Jzb2xldGUubTQgbHRvcHRpb25zLm00IGx0c3VnYXIubTQgbHR2ZXJzaW9uLm00IgorICAgICAgICBmb3IgaSBpbiAke01BQ1JPU307IGRvCisgICAgICAgICAgICAgICBybSAtZiAke1N9L2FjaW5jbHVkZS8kaQorICAgICAgICBkb25lCisgICAgICAgIGV4cG9ydCBTWVNST09UPSRQS0dfQ09ORklHX1NZU1JPT1RfRElSCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvTUlULXN0eWxlLWxpY2Vuc2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvTUlULXN0eWxlLWxpY2Vuc2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI4ZGU5OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9NSVQtc3R5bGUtbGljZW5zZQpAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDEgUmVkIEhhdCwgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cworICogZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQKKyAqIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdAorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgUmVkIEhhdCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAorICogd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgUmVkIEhhdCBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlCisgKiBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqIFJFRCBIQVQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMIFJFRCBIQVQKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiAKKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKgorICogQXV0aG9yOiAgT3dlbiBUYXlsb3IsIFJlZCBIYXQsIEluYy4KKyAqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L2Rpc2FibGVfT3Nfb3B0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L2Rpc2FibGVfT3Nfb3B0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YjdlZmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvZGlzYWJsZV9Pc19vcHRpb24ucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitEbyBub3Qgc2V0IE9zIG9wdGltaXphdGlvbiBpbiB0YXJnZXQgQVBQIENGTEFHUywgc2luY2UgaXQgbWF5IGhhdmUgcG90ZW50aWFsCitlcnJvciBpZiAiLS1lbmFibGUtdGFyZ2V0LW9wdHNwYWNlIiBpcyBub3Qgc2V0IHdoZW4gY29uZmlndXJpbmcgR0NDLgorCitTaWduZWQtb2ZmLWJ5OiBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorCitkaWZmIC1ydU4gWHNldHRpbmdzLWNsaWVudC0wLjEwLW9yaWcvY29uZmlndXJlLmFjIFhzZXR0aW5ncy1jbGllbnQtMC4xMC9jb25maWd1cmUuYWMKKy0tLSBYc2V0dGluZ3MtY2xpZW50LTAuMTAtb3JpZy9jb25maWd1cmUuYWMJMjAxMC0wOS0yMSAxNDowMTo0Ny4wMDAwMDAwMDAgKzA4MDAKKysrKyBYc2V0dGluZ3MtY2xpZW50LTAuMTAvY29uZmlndXJlLmFjCTIwMTAtMDktMjEgMTQ6MDI6MDEuMDAwMDAwMDAwICswODAwCitAQCAtMyw3ICszLDcgQEAKKyBBTV9JTklUX0FVVE9NQUtFKFhzZXR0aW5ncy1jbGllbnQsIDAuMTApCisgQU1fQ09ORklHX0hFQURFUihjb25maWcuaCkKKyAKKy1DRkxBR1M9Ii1PcyAtV2FsbCIKKytDRkxBR1M9Ii1PMiAtV2FsbCIKKyAKKyAjIENoZWNrcyBmb3IgcHJvZ3JhbXMuCisgQUNfUFJPR19DQwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L2xpbmsteDExLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L2xpbmsteDExLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwOGQwZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvbGluay14MTEucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogWHNldHRpbmdzLWNsaWVudC0wLjEwL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gWHNldHRpbmdzLWNsaWVudC0wLjEwLm9yaWcvTWFrZWZpbGUuYW0JMjAwOC0wMi0wNyAxNDo0OTo1NC4wMDAwMDAwMDAgKzAwMDAKKysrKyBYc2V0dGluZ3MtY2xpZW50LTAuMTAvTWFrZWZpbGUuYW0JMjAwOC0wMi0wNyAxNDo1MDowMC4wMDAwMDAwMDAgKzAwMDAKK0BAIC05LDQgKzksNCBAQAorIAorIGxpYlhzZXR0aW5nc19jbGllbnRfbGFfU09VUkNFUz0gJChzb3VyY2VfYykgJChzb3VyY2VfaCkKKyAKKy1saWJYc2V0dGluZ3NfY2xpZW50X2xhX0xJQkFERCAgICAgID0gQFhfTElCU0AKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorK2xpYlhzZXR0aW5nc19jbGllbnRfbGFfTElCQUREICAgICAgPSBAWF9MSUJTQCAtbFgxMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA1ZDA4ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIFhzZXR0aW5ncy1jbGllbnQtMC4xMC9jb25maWd1cmUuYWMgWHNldHRpbmdzLWNsaWVudC0wLjEwL2NvbmZpZ3VyZS5hYworLS0tIFhzZXR0aW5ncy1jbGllbnQtMC4xMC9jb25maWd1cmUuYWMJMjAwMy0wMy0yOCAxMjozOTo1MS4wMDAwMDAwMDAgKzAyMDAKKysrKyBYc2V0dGluZ3MtY2xpZW50LTAuMTAvY29uZmlndXJlLmFjCTIwMTMtMDEtMTEgMDc6Mzc6MjEuNDkxNTk3NzQzICswMjAwCitAQCAtMSw3ICsxLDcgQEAKKyAjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCisgQUNfSU5JVCh4c2V0dGluZ3MtY2xpZW50LmMpCisgQU1fSU5JVF9BVVRPTUFLRShYc2V0dGluZ3MtY2xpZW50LCAwLjEwKQorLUFNX0NPTkZJR19IRUFERVIoY29uZmlnLmgpCisrQUNfQ09ORklHX0hFQURFUlMoY29uZmlnLmgpCisKKyBDRkxBR1M9Ii1PcyAtV2FsbCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudF8wLjEwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50XzAuMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcwZDlmYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudF8wLjEwLmJiCkBAIC0wLDAgKzEsNDEgQEAKK1NVTU1BUlkgPSAidXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRoZSBYc2V0dGluZ3MgcHJvdG9jb2wiCitERVNDUklQVElPTiA9ICJMaWJyYXJpZXMgdXNlZCBmb3IgYXBwbGljYXRpb25zIG1ha2luZyB1c2Ugb2YgdGhlIFhzZXR0aW5ncyBjb25maWd1cmF0aW9uIFwKK3NldHRpbmcgcHJvcGFnYXRpb24gcHJvdG9jb2wuIENvbnRyb2xzIHNldHRpbmcgb2YgZG91YmxlIGNsaWNrIHRpbWVvdXQsIGRyYWctYW5kLWRyb3AgXAordGhyZXNob2xkLCBhbmQgZGVmYXVsdCBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGNvbG9ycyBmb3IgYWxsIGFwcGxpY2F0aW9ucyBydW5uaW5nIHdpdGhpbiBhIFwKK2Rlc2t0b3AuIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnL3NvdXJjZXMvb3B0aW9uYWwtZGVwZW5kZW5jaWVzLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorU0VDVElPTiA9ICJ4L2xpYnMiCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdjZmFjOWQyZDRkYzM2OTRjYzdlYjYwNWNmMzJhNjliIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3hzZXR0aW5ncy1jbGllbnQuaDtlbmRsaW5lPTIyO21kNT03Y2ZhYzlkMmQ0ZGMzNjk0Y2M3ZWI2MDVjZjMyYTY5YiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly94c2V0dGluZ3MtY29tbW9uLmg7ZW5kbGluZT0yMjttZDU9N2NmYWM5ZDJkNGRjMzY5NGNjN2ViNjA1Y2YzMmE2OWIiCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIgorCitQUiA9ICJyNSIKKworaGVhZGVycyA9ICJ4c2V0dGluZ3MtY29tbW9uLmggeHNldHRpbmdzLWNsaWVudC5oIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9tYXRjaGJveC9vcHRpb25hbC1kZXBlbmRlbmNpZXMvWHNldHRpbmdzLWNsaWVudC0wLjEwLnRhci5neiBcCisgICAgICAgIGZpbGU6Ly9NSVQtc3R5bGUtbGljZW5zZSBcCisgICAgICAgIGZpbGU6Ly9saW5rLXgxMS5wYXRjaDthcHBseT15ZXMgXAorICAgICAgICBmaWxlOi8vZGlzYWJsZV9Pc19vcHRpb24ucGF0Y2ggXAorICAgICAgICBmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImMxNGFhOWRiNmMwOTdlMDMwNmRhYzk3ZmI3ZGExYWRkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImYyNzRhNGJjOTY5YWUxOTI5OTRhODU2YjdmNzg2YzZmY2U5NmJhZTc3Zjk2YzFjMmI3MWRkOTc1OTllMDZlNDMiCisKK1MgPSAiJHtXT1JLRElSfS9Yc2V0dGluZ3MtY2xpZW50LTAuMTAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICMgVGhpcyBwYWNrYWdlIGRvZXNuJ3Qgc2hpcCB3aXRoIGl0cyBvd24gQ09QWUlORyBmaWxlIGFuZAorICAgICMgYXV0b3Rvb2xzIHdpbGwgaW5zdGFsbCBhIEdQTHYyIG9uZSBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgTUlULXN0eWxlIGxpY2Vuc2UgaGVyZS4KKyAgICAjIEFkZCB0aGUgY29ycmVjdCBsaWNlbnNlIGhlcmUgdG8gYXZvaWQgY29uZnVzaW9uLgorICAgIGNwIC1mICR7V09SS0RJUn0vTUlULXN0eWxlLWxpY2Vuc2UgJHtTfS9DT1BZSU5HCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXNlc3Npb24vbWF0Y2hib3gtc2Vzc2lvbi9tYXRjaGJveC1zZXNzaW9uIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtc2Vzc2lvbi9tYXRjaGJveC1zZXNzaW9uL21hdGNoYm94LXNlc3Npb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ2Y2FhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXNlc3Npb24vbWF0Y2hib3gtc2Vzc2lvbi9tYXRjaGJveC1zZXNzaW9uCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorIworIyBWZXJ5IHNpbXBsZSBzZXNzaW9uIG1hbmFnZXIgZm9yIG1hdGNoYm94IHRvb2xzCisjCisKKyMgVW5jb21tZW50IGJlbG93IHRvIGVuYWJsZSBwYXJzaW5nIG9mIGRlYmlhbiBtZW51IGVudHJ5cworIyBleHBvcnQgTUJfVVNFX0RFQl9NRU5VUz0xIAorCitpZiBbIC1lICRIT01FLy5tYXRjaGJveC9zZXNzaW9uIF0KK3RoZW4KK2V4ZWMgJEhPTUUvLm1hdGNoYm94L3Nlc3Npb24KK2ZpCisKK2lmIFsgLWUgL2V0Yy9tYXRjaGJveC9zZXNzaW9uIF0KK3RoZW4KK2V4ZWMgL2V0Yy9tYXRjaGJveC9zZXNzaW9uCitmaQorCisjIERlZmF1bHQgZmlsZXMgdG8gcnVuIGlmICRIT01FLy5tYXRjaGJveC9zZXNzaW9uIG9yIC9ldGMvbWF0Y2hib3gvc2Vzc2lvbgorIyBkb250IGV4aXN0LiAKKworbWF0Y2hib3gtZGVza3RvcCAmCittYXRjaGJveC1wYW5lbCAmCitleGVjIG1hdGNoYm94LXdpbmRvdy1tYW5hZ2VyICRACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC1zZXNzaW9uL21hdGNoYm94LXNlc3Npb25fMC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtc2Vzc2lvbi9tYXRjaGJveC1zZXNzaW9uXzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmFmMDU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtc2Vzc2lvbi9tYXRjaGJveC1zZXNzaW9uXzAuMS5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIkN1c3RvbSBNYXRjaGJveCBzZXNzaW9uIGZpbGVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tYXRjaGJveC1wcm9qZWN0Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL21hdGNoYm94LXNlc3Npb247ZW5kbGluZT0yMDttZDU9MTgwZjFjMTY5YTE1ZDA1OWE1NmMzMDA5NGY2ZmI1ZWEiCisKK1NFQ1RJT04gPSAieDExIgorUkNPTkZMSUNUU18ke1BOfSA9ICJtYXRjaGJveC1jb21tb24iCisKK1NSQ19VUkkgPSAiZmlsZTovL21hdGNoYm94LXNlc3Npb24iCitTID0gIiR7V09SS0RJUn0iCisKK1BSID0gInI0IgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAieC1zZXNzaW9uLW1hbmFnZXIiCitBTFRFUk5BVElWRV9UQVJHRVRbeC1zZXNzaW9uLW1hbmFnZXJdID0gIiR7YmluZGlyfS9tYXRjaGJveC1zZXNzaW9uIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9tYXRjaGJveC1zZXNzaW9uICR7RH0vJHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC13bS9tYXRjaGJveC13bS9rYmRjb25maWcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC13bS9tYXRjaGJveC13bS9rYmRjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM5ZGE4ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXdtL21hdGNoYm94LXdtL2tiZGNvbmZpZwpAQCAtMCwwICsxLDQyIEBACisjCisjIFRoaXMgaXMgYW4gZXhhbXBsZSBrZXlib2FyZCBjb25maWcgZmlsZSBmb3IgbWF0Y2hib3gKKyMKKyMgWW91IGNhbiBlZGl0IHRoaXMgZmlsZSBvciBjaGFuZ2UgcGVyIHVzZXIgYnkgY29weWluZyB0byAKKyMgIH4vLm1hdGNoYm94L2tiZGNvbmZpZworIworIyBTZSB0aGUgbWF0Y2hib3ggbWFudWFsIGZvciBtb3JlIGluZm8gKCBodHRwOi8vcHJvamVjdHMuby1oYW5kLmNvbS9tYXRjaGJveCApCisKKyMjIyBXaW5kb3cgb3BlcmF0aW9uIHNob3J0IGN1dHMgCisKKzxBbHQ+bj1uZXh0Cis8QWx0PnA9cHJldgorPEFsdD5jPWNsb3NlCis8QWx0PmQ9ZGVza3RvcAorPEFsdD5tPSFtYXRjaGJveC1yZW1vdGUgLW1ibWVudQorCisjIyMgQXBwIGxhdW5jaGluZy4KKworPGN0cmw+PGFsdD54PSF4dGVybQorPGN0cmw+PGFsdD5yPSFyeHZ0CisKKyMjIyBwb2t5IGFkZGl0aW9ucworCitYRjg2Q2FsZW5kYXI9ISRjb250YWN0cwordGVsZXBob25lPSEkZGF0ZXMKK1hGODZTdGFydD0hbWF0Y2hib3gtcmVtb3RlIC1kZXNrdG9wCitGMj0hbWF0Y2hib3gtcmVtb3RlIC1tYm1lbnUKKworI1hGODZNYWlsPSEkdGFza3MKKyNFc2NhcGU9Y2xvc2UKKworIyMjIHdpbmRvd3Mgc3R5bGUga2V5IHNob3J0Y3V0cworCis8YWx0PlRhYj1uZXh0Cis8YWx0PjxzaGlmdD5UYWI9cHJldgorCis8YWx0PnNwYWNlPXRhc2ttZW51Cis8YWx0PmVzY2FwZT0hbWF0Y2hib3gtcmVtb3RlIC1tYm1lbnUKKzxhbHQ+ZjQ9Y2xvc2UKKworZjExPWZ1bGxzY3JlZW4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtd20vbWF0Y2hib3gtd21fZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtd20vbWF0Y2hib3gtd21fZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMmQyNTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC13bS9tYXRjaGJveC13bV9naXQuYmIKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJNYXRjaGJveCBsaWdodHdlaWdodCB3aW5kb3cgbWFuYWdlciIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NyYy93bS5oO2VuZGxpbmU9MjE7bWQ1PWE3ZTg0NDQ2NWVkYmNmNzljMjgyMzY5ZjkzY2FhODM1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9tYWluLmM7ZW5kbGluZT0yMTttZDU9M2U1ZDlmODMyYjUyN2IwZDcyZGJlOGUzYzRjNjBiOTUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3dtLmM7ZW5kbGluZT0yMTttZDU9OGRjOWQyNDQ3N2Q4N2VmNWRmYmMyZTQ5MjcxNDZhYWIiCisKK1NFQ1RJT04gPSAieDExL3dtIgorREVQRU5EUyA9ICJsaWJtYXRjaGJveCB2aXJ0dWFsL2xpYngxMSBsaWJ4ZXh0IGxpYnhyZW5kZXIgc3RhcnR1cC1ub3RpZmljYXRpb24gZXhwYXQgZ2NvbmYgbGlieGN1cnNvciBsaWJ4Zml4ZXMiCisKK1NSQ1JFViA9ICIyOTU0NGYwZTYxY2MyODFmYzYwMDYxNDQzYTUzNzI3MWUxMDgxYjc4IgorUFYgPSAiMS4yK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL21hdGNoYm94LXdpbmRvdy1tYW5hZ2VyIFwKKyAgICAgICAgICAgZmlsZTovL2tiZGNvbmZpZyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vKiBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L21hdGNoYm94IFwKKyAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vbWF0Y2hib3ggXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS90aGVtZXMvYmxvbmRpZS9tYXRjaGJveCBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3RoZW1lcy9EZWZhdWx0L21hdGNoYm94IFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vdGhlbWVzL01CT3B1cy9tYXRjaGJveCIKKworRVhUUkFfT0VDT05GID0gIiAtLWVuYWJsZS1zdGFydHVwLW5vdGlmaWNhdGlvbiBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS14cm0gXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS1leHBhdCBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1leHBhdC1saWI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtZXhwYXQtaW5jbHVkZXM9JHtTVEFHSU5HX0lOQ0RJUn0iCisKK2RvX2luc3RhbGxfcHJlcGVuZCgpIHsKKwlpbnN0YWxsICR7V09SS0RJUn0va2JkY29uZmlnICR7U30vZGF0YS9rYmRjb25maWcKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lbnUtY2FjaGUvbWVudS1jYWNoZV8xLjAuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lbnUtY2FjaGUvbWVudS1jYWNoZV8xLjAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjkwOWY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVudS1jYWNoZS9tZW51LWNhY2hlXzEuMC4wLmJiCkBAIC0wLDAgKzEsMTYgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgY2FjaGluZyBhcHBsaWNhdGlvbiBtZW51cyIKK0RFU0NSSVBUSU9OID0gIkEgbGlicmFyeSBjcmVhdGluZyBhbmQgdXRpbGl6aW5nIGNhY2hlcyB0byBzcGVlZCB1cCBmcmVlZGVza3RvcC5vcmcgYXBwbGljYXRpb24gbWVudXMiCitIT01FUEFHRSA9ICJodHRwOi8vbHhkZS5zb3VyY2Vmb3JnZS5uZXQvIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA5NjRjNjg5ZmNmNGMyMWM2Nzk3ZWE4NzQwODQxNmI2IgorCitTRUNUSU9OID0gIngxMS9saWJzIgorREVQRU5EUyA9ICJnbGliLTIuMCBpbnRsdG9vbC1uYXRpdmUgbGliZm0tZXh0cmEiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2x4ZGUvbWVudS1jYWNoZS0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0YThlNmMxYTg2ZDVlNjRlYzcyNWQ4NTBhNGFiZmJhZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZjdkZjQzN2JiZmQzMTE5YzVmNjYyYzZkMjA5Yjk4ZjE1ZGUwM2E3MjAzMzA4YzZiNTZhNGMxZTFkNDE5YWFmIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZyBndGstZG9jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL2xpYmdsdV85LjAuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbGliZ2x1XzkuMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMDk5OGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL2xpYmdsdV85LjAuMC5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIlRoZSBPcGVuR0wgdXRpbGl0eSB0b29sa2l0IgorREVTQ1JJUFRJT04gPSAiR0xVIGlzIGEgdXRpbGl0eSB0b29sa2l0IHVzZWQgd2l0aCBPcGVuR0wgaW1wbGVtZW50YXRpb25zIgorCitIT01FUEFHRSA9ICJodHRwOi8vbWVzYTNkLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZyIKK1NFQ1RJT04gPSAieDExIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9pbmNsdWRlL0dML2dsdS5oO2VuZGxpbmU9Mjk7bWQ1PTZiNzljNTcwZjY0NDM2M2IzNTY0NTZlN2Q0NDQ3MWQ5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9saWJ0ZXNzL3Rlc3MuYztlbmRsaW5lPTI5O21kNT02Yjc5YzU3MGY2NDQzNjNiMzU2NDU2ZTdkNDQ0NzFkOSIKKworIyBFcG9jaCBhcyB0aGlzIHVzZWQgdG8gYmUgcGFydCBvZiBtZXNhCitQRSA9ICIyIgorUFIgPSAiMCIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZnJlZWRlc2t0b3Aub3JnL3B1Yi9tZXNhL2dsdS9nbHUtJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gImJlOTI0OTEzMmZmNDkyNzU0NjFjZjkyMDM5MDgzMDMwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFmN2FkMGQzNzlhNzIyZmNiZDMwM2FhNTY1MGM2ZDdkNTU0NGZkZTgzMTk2YjQyYTczZDExOTM1NjhhNGRmMTIiCisKK1MgPSAiJHtXT1JLRElSfS9nbHUtJHtQVn0iCisKK0RFUEVORFMgPSAidmlydHVhbC9saWJnbCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFJlcXVpcmVzIGxpYkdMLnNvIHdoaWNoIGlzIHByb3ZpZGVkIGJ5IG1lc2Egd2hlbiB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCisjIFJlbW92ZSB0aGUgbWVzYS1nbHUgZGVwZW5kZW5jeSBpbiBtZXNhLWdsdS1kZXYsIGFzIG1lc2EtZ2x1IGlzIGVtcHR5CitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDEtbWVzYS1kZW1vcy1BZGQtbWlzc2luZy1kYXRhLWZpbGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDEtbWVzYS1kZW1vcy1BZGQtbWlzc2luZy1kYXRhLWZpbGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZWU5YzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwMS1tZXNhLWRlbW9zLUFkZC1taXNzaW5nLWRhdGEtZmlsZXMucGF0Y2gKQEAgLTAsMCArMSw2MjQgQEAKK0Zyb20gYjY5NWMzYTNmYTNmNGNkNDhjMTNhYTI2NTQyMTEwZGUyNzA3NTUxOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERyZXcgTW9zZWxleSA8ZHJld19tb3NlbGV5QG1lbnRvci5jb20+CitEYXRlOiBNb24sIDEyIE1heSAyMDE0IDE1OjIyOjMyIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0ggMS85XSBtZXNhLWRlbW9zOiBBZGQgbWlzc2luZyBkYXRhIGZpbGVzLgorCitBZGQgc29tZSBkYXRhIGZpbGVzIHRoYXQgYXJlIHByZXNlbnQgaW4gdGhlIGdpdCByZXBvc2l0b3J5OgorICAgaHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL21lc2EvZGVtb3MvdHJlZS8/aWQ9bWVzYS1kZW1vcy04LjEuMAorYnV0IG5vdCBpbiB0aGUgcmVsZWFzZSB0YXJiYWxsCisgICBmdHA6Ly9mdHAuZnJlZWRlc2t0b3Aub3JnL3B1Yi9tZXNhL2RlbW9zLzguMS4wL21lc2EtZGVtb3MtOC4xLjAudGFyLmJ6MgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBEcmV3IE1vc2VsZXkgPGRyZXdfbW9zZWxleUBtZW50b3IuY29tPgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL2ZwZ2xzbC9kZXB0aC1yZWFkLmdsc2wgICAgICB8ICAgNCArCisgc3JjL2ZwZ2xzbC9pbmZpbml0ZS1sb29wLmdsc2wgICB8ICAgNyArCisgc3JjL2dsc2wvQ0gxMS1idW1wbWFwdGV4LmZyYWcgICB8ICA0NyArKysrKysrCisgc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LmZyYWcgICB8ICAzMSArKysrKworIHNyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC52ZXJ0ICAgfCAgMTYgKysrCisgc3JjL2dsc2wvY29udm9sdXRpb24uZnJhZyAgICAgICB8ICAyMSArKysKKyBzcmMvZ2xzbC9zaW1wbGV4LW5vaXNlLmdsc2wgICAgIHwgMjc5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBzcmMvZ2xzbC9za2lubmluZy52ZXJ0ICAgICAgICAgIHwgIDI0ICsrKysKKyBzcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMS5mcmFnIHwgIDE5ICsrKworIHNyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UxLnZlcnQgfCAgMTQgKysKKyBzcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMi5mcmFnIHwgIDE3ICsrKworIHNyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UyLnZlcnQgfCAgMTQgKysKKyBzcmMvdnBnbHNsL2luZmluaXRlLWxvb3AuZ2xzbCAgIHwgICA4ICsrCisgMTMgZmlsZXMgY2hhbmdlZCwgNTAxIGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2ZwZ2xzbC9kZXB0aC1yZWFkLmdsc2wKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2ZwZ2xzbC9pbmZpbml0ZS1sb29wLmdsc2wKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2dsc2wvQ0gxMS1idW1wbWFwdGV4LmZyYWcKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LmZyYWcKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LnZlcnQKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2dsc2wvY29udm9sdXRpb24uZnJhZworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvZ2xzbC9zaW1wbGV4LW5vaXNlLmdsc2wKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2dsc2wvc2tpbm5pbmcudmVydAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMS5mcmFnCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UxLnZlcnQKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTIuZnJhZworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMi52ZXJ0CisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy92cGdsc2wvaW5maW5pdGUtbG9vcC5nbHNsCisKK2RpZmYgLS1naXQgYS9zcmMvZnBnbHNsL2RlcHRoLXJlYWQuZ2xzbCBiL3NyYy9mcGdsc2wvZGVwdGgtcmVhZC5nbHNsCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uODZkMjk4ZQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2ZwZ2xzbC9kZXB0aC1yZWFkLmdsc2wKK0BAIC0wLDAgKzEsNCBAQAorK3ZvaWQgbWFpbigpCisreworKyAgIGdsX0ZyYWdDb2xvciA9IGdsX0ZyYWdDb29yZC56enp6OworK30KK2RpZmYgLS1naXQgYS9zcmMvZnBnbHNsL2luZmluaXRlLWxvb3AuZ2xzbCBiL3NyYy9mcGdsc2wvaW5maW5pdGUtbG9vcC5nbHNsCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYzZkYzZlZQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2ZwZ2xzbC9pbmZpbml0ZS1sb29wLmdsc2wKK0BAIC0wLDAgKzEsNyBAQAorK3ZvaWQgbWFpbigpIHsKKysgICB2ZWM0IHN1bSA9IHZlYzQoMCk7CisrICAgZm9yIChpbnQgaSA9IDE7IGkgIT0gMjsgaSArPSAyKSB7CisrICAgICAgc3VtICs9IHZlYzQoMC4xLCAwLjEsIDAuMSwgMC4xKTsKKysgICB9CisrICAgZ2xfRnJhZ0NvbG9yID0gc3VtOworK30KK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9DSDExLWJ1bXBtYXB0ZXguZnJhZyBiL3NyYy9nbHNsL0NIMTEtYnVtcG1hcHRleC5mcmFnCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjVkYWJiNAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2dsc2wvQ0gxMS1idW1wbWFwdGV4LmZyYWcKK0BAIC0wLDAgKzEsNDcgQEAKKysvLworKy8vIEZyYWdtZW50IHNoYWRlciBmb3IgcHJvY2VkdXJhbCBidW1wcworKy8vCisrLy8gQXV0aG9yczogSm9obiBLZXNzZW5pY2gsIFJhbmRpIFJvc3QKKysvLworKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDA2IDNEbGFicyBJbmMuIEx0ZC4gCisrLy8KKysvLyBTZWUgM0RsYWJzLUxpY2Vuc2UudHh0IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uCisrLy8KKysvLyBUZXh0dXJlIG1hcHBpbmcvbW9kdWxhdGlvbiBhZGRlZCBieSBCcmlhbiBQYXVsCisrLy8KKysKKyt2YXJ5aW5nIHZlYzMgTGlnaHREaXI7CisrdmFyeWluZyB2ZWMzIEV5ZURpcjsKKysKKyt1bmlmb3JtIGZsb2F0IEJ1bXBEZW5zaXR5OyAgICAgLy8gPSAxNi4wCisrdW5pZm9ybSBmbG9hdCBCdW1wU2l6ZTsgICAgICAgIC8vID0gMC4xNQorK3VuaWZvcm0gZmxvYXQgU3BlY3VsYXJGYWN0b3I7ICAvLyA9IDAuNQorKworK3VuaWZvcm0gc2FtcGxlcjJEIFRleDsKKysKKyt2b2lkIG1haW4oKQorK3sKKysgICAgdmVjMyBhbWJpZW50ID0gdmVjMygwLjI1KTsKKysgICAgdmVjMyBsaXRDb2xvcjsKKysgICAgdmVjMiBjID0gQnVtcERlbnNpdHkgKiBnbF9UZXhDb29yZFswXS5zdDsKKysgICAgdmVjMiBwID0gZnJhY3QoYykgLSB2ZWMyKDAuNSk7CisrCisrICAgIGZsb2F0IGQsIGY7CisrICAgIGQgPSBwLnggKiBwLnggKyBwLnkgKiBwLnk7CisrICAgIGYgPSBpbnZlcnNlc3FydChkICsgMS4wKTsKKysKKysgICAgaWYgKGQgPj0gQnVtcFNpemUpCisrICAgICAgICB7IHAgPSB2ZWMyKDAuMCk7IGYgPSAxLjA7IH0KKysKKysgICAgdmVjMyBTdXJmYWNlQ29sb3IgPSB0ZXh0dXJlMkQoVGV4LCBnbF9UZXhDb29yZFswXS5zdCkueHl6OworKworKyAgICB2ZWMzIG5vcm1EZWx0YSA9IHZlYzMocC54LCBwLnksIDEuMCkgKiBmOworKyAgICBsaXRDb2xvciA9IFN1cmZhY2VDb2xvciAqIChhbWJpZW50ICsgbWF4KGRvdChub3JtRGVsdGEsIExpZ2h0RGlyKSwgMC4wKSk7CisrICAgIHZlYzMgcmVmbGVjdERpciA9IHJlZmxlY3QoTGlnaHREaXIsIG5vcm1EZWx0YSk7CisrICAgIAorKyAgICBmbG9hdCBzcGVjID0gbWF4KGRvdChFeWVEaXIsIHJlZmxlY3REaXIpLCAwLjApOworKyAgICBzcGVjICo9IFNwZWN1bGFyRmFjdG9yOworKyAgICBsaXRDb2xvciA9IG1pbihsaXRDb2xvciArIHNwZWMsIHZlYzMoMS4wKSk7CisrCisrICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQobGl0Q29sb3IsIDEuMCk7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC5mcmFnIGIvc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LmZyYWcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wZGIwNjBiCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QuZnJhZworQEAgLTAsMCArMSwzMSBAQAorKyNleHRlbnNpb24gR0xfQVJCX3VuaWZvcm1fYnVmZmVyX29iamVjdCA6IGVuYWJsZQorKworK2xheW91dChzdGQxNDApIHVuaWZvcm0gY29sb3JzMAorK3sKKysgICAgZmxvYXQgRGlmZnVzZUNvb2w7CisrICAgIGZsb2F0IERpZmZ1c2VXYXJtOworKyAgICB2ZWMzICBTdXJmYWNlQ29sb3I7CisrICAgIHZlYzMgIFdhcm1Db2xvcjsKKysgICAgdmVjMyAgQ29vbENvbG9yOworKyAgICB2ZWM0ICBzb21lWzhdOworK307CisrCisrdmFyeWluZyBmbG9hdCBOZG90TDsKKyt2YXJ5aW5nIHZlYzMgIFJlZmxlY3RWZWM7CisrdmFyeWluZyB2ZWMzICBWaWV3VmVjOworKworK3ZvaWQgbWFpbiAodm9pZCkKKyt7CisrCisrICAgIHZlYzMga2Nvb2wgICAgPSBtaW4oQ29vbENvbG9yICsgRGlmZnVzZUNvb2wgKiBTdXJmYWNlQ29sb3IsIDEuMCk7CisrICAgIHZlYzMga3dhcm0gICAgPSBtaW4oV2FybUNvbG9yICsgRGlmZnVzZVdhcm0gKiBTdXJmYWNlQ29sb3IsIDEuMCk7CisrICAgIHZlYzMga2ZpbmFsICAgPSBtaXgoa2Nvb2wsIGt3YXJtLCBOZG90TCk7CisrCisrICAgIHZlYzMgbnJlZmxlY3QgPSBub3JtYWxpemUoUmVmbGVjdFZlYyk7CisrICAgIHZlYzMgbnZpZXcgICAgPSBub3JtYWxpemUoVmlld1ZlYyk7CisrCisrICAgIGZsb2F0IHNwZWMgICAgPSBtYXgoZG90KG5yZWZsZWN0LCBudmlldyksIDAuMCk7CisrICAgIHNwZWMgICAgICAgICAgPSBwb3coc3BlYywgMzIuMCk7CisrCisrICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQgKG1pbihrZmluYWwgKyBzcGVjLCAxLjApLCAxLjApOworK30KK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QudmVydCBiL3NyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC52ZXJ0CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzk3ZDczMworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LnZlcnQKK0BAIC0wLDAgKzEsMTYgQEAKKyt2ZWMzIExpZ2h0UG9zaXRpb24gPSB2ZWMzKDAuMCwgMTAuMCwgNC4wKTsgCisrIAorK3ZhcnlpbmcgZmxvYXQgTmRvdEw7CisrdmFyeWluZyB2ZWMzICBSZWZsZWN0VmVjOworK3ZhcnlpbmcgdmVjMyAgVmlld1ZlYzsKKysgCisrdm9pZCBtYWluKHZvaWQpCisreworKyAgICB2ZWMzIGVjUG9zICAgICAgPSB2ZWMzIChnbF9Nb2RlbFZpZXdNYXRyaXggKiBnbF9WZXJ0ZXgpOworKyAgICB2ZWMzIHRub3JtICAgICAgPSBub3JtYWxpemUoZ2xfTm9ybWFsTWF0cml4ICogZ2xfTm9ybWFsKTsKKysgICAgdmVjMyBsaWdodFZlYyAgID0gbm9ybWFsaXplKExpZ2h0UG9zaXRpb24gLSBlY1Bvcyk7CisrICAgIFJlZmxlY3RWZWMgICAgICA9IG5vcm1hbGl6ZShyZWZsZWN0KC1saWdodFZlYywgdG5vcm0pKTsKKysgICAgVmlld1ZlYyAgICAgICAgID0gbm9ybWFsaXplKC1lY1Bvcyk7CisrICAgIE5kb3RMICAgICAgICAgICA9IChkb3QobGlnaHRWZWMsIHRub3JtKSArIDEuMCkgKiAwLjU7CisrICAgIGdsX1Bvc2l0aW9uICAgICA9IGZ0cmFuc2Zvcm0oKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvY29udm9sdXRpb24uZnJhZyBiL3NyYy9nbHNsL2NvbnZvbHV0aW9uLmZyYWcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lNDliOGFjCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvZ2xzbC9jb252b2x1dGlvbi5mcmFnCitAQCAtMCwwICsxLDIxIEBACisrCisrY29uc3QgaW50IEtlcm5lbFNpemUgPSA5OworKworKy8vdGV4dHVyZSBvZmZzZXRzCisrdW5pZm9ybSB2ZWMyIE9mZnNldFtLZXJuZWxTaXplXTsKKysvL2NvbnZvbHV0aW9uIGtlcm5lbAorK3VuaWZvcm0gdmVjNCBLZXJuZWxWYWx1ZVtLZXJuZWxTaXplXTsKKyt1bmlmb3JtIHNhbXBsZXIyRCBzcmNUZXg7CisrdW5pZm9ybSB2ZWM0IFNjYWxlRmFjdG9yOworK3VuaWZvcm0gdmVjNCBCYXNlQ29sb3I7CisrCisrdm9pZCBtYWluKHZvaWQpCisreworKyAgICBpbnQgaTsKKysgICAgdmVjNCBzdW0gPSB2ZWM0KDAuMCk7CisrICAgIGZvciAoaSA9IDA7IGkgPCBLZXJuZWxTaXplOyArK2kpIHsKKysgICAgICAgIHZlYzQgdG1wID0gdGV4dHVyZTJEKHNyY1RleCwgZ2xfVGV4Q29vcmRbMF0uc3QgKyBPZmZzZXRbaV0pOworKyAgICAgICAgc3VtICs9IHRtcCAqIEtlcm5lbFZhbHVlW2ldOworKyAgICB9CisrICAgIGdsX0ZyYWdDb2xvciA9IHN1bSAqIFNjYWxlRmFjdG9yICsgQmFzZUNvbG9yOworK30KK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9zaW1wbGV4LW5vaXNlLmdsc2wgYi9zcmMvZ2xzbC9zaW1wbGV4LW5vaXNlLmdsc2wKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iNjgzM2NiCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvZ2xzbC9zaW1wbGV4LW5vaXNlLmdsc2wKK0BAIC0wLDAgKzEsMjc5IEBACisrLy8KKysvLyBEZXNjcmlwdGlvbiA6IEFycmF5IGFuZCB0ZXh0dXJlbGVzcyBHTFNMIDJELzNELzREIHNpbXBsZXgKKysvLyBub2lzZSBmdW5jdGlvbnMuCisrLy8gQXV0aG9yIDogSWFuIE1jRXdhbiwgQXNoaW1hIEFydHMuCisrLy8gTWFpbnRhaW5lciA6IGlqbQorKy8vIExhc3Rtb2QgOiAyMDExMDIyMworKy8vIExpY2Vuc2UgOiBDb3B5cmlnaHQgKEMpIDIwMTEgQXNoaW1hIEFydHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEFydGlzdGljIExpY2Vuc2UgMi4wOyBTZWUgTElDRU5DRSBmaWxlLgorKy8vCisrCisrI2RlZmluZSBOT1JNQUxJWkVfR1JBRElFTlRTCisrI3VuZGVmIFVTRV9DSVJDTEUKKysjZGVmaW5lIENPTExBUFNFX1NPUlRORVQKKysKKytmbG9hdCBwZXJtdXRlKGZsb2F0IHgwLHZlYzMgcCkgeworKyAgZmxvYXQgeDEgPSBtb2QoeDAgKiBwLnksIHAueCk7CisrICByZXR1cm4gZmxvb3IoIG1vZCggKHgxICsgcC56KSAqeDAsIHAueCApKTsKKysgIH0KKyt2ZWMyIHBlcm11dGUodmVjMiB4MCx2ZWMzIHApIHsKKysgIHZlYzIgeDEgPSBtb2QoeDAgKiBwLnksIHAueCk7CisrICByZXR1cm4gZmxvb3IoIG1vZCggKHgxICsgcC56KSAqeDAsIHAueCApKTsKKysgIH0KKyt2ZWMzIHBlcm11dGUodmVjMyB4MCx2ZWMzIHApIHsKKysgIHZlYzMgeDEgPSBtb2QoeDAgKiBwLnksIHAueCk7CisrICByZXR1cm4gZmxvb3IoIG1vZCggKHgxICsgcC56KSAqeDAsIHAueCApKTsKKysgIH0KKyt2ZWM0IHBlcm11dGUodmVjNCB4MCx2ZWMzIHApIHsKKysgIHZlYzQgeDEgPSBtb2QoeDAgKiBwLnksIHAueCk7CisrICByZXR1cm4gZmxvb3IoIG1vZCggKHgxICsgcC56KSAqeDAsIHAueCApKTsKKysgIH0KKysKKyt1bmlmb3JtIHZlYzQgcFBhcmFtOworKy8vIEV4YW1wbGUKKysvLyBjb25zdCB2ZWM0IHBQYXJhbSA9IHZlYzQoIDE3LiogMTcuLCAzNC4sIDEuLCA3Lik7CisrCisrZmxvYXQgdGF5bG9ySW52U3FydChmbG9hdCByKQorKyAgeworKyAgcmV0dXJuICggMC44MzY2NjAwMjY1MzQwOCArIDAuNyowLjg1MzczNDcyMDk1MzE0IC0gMC44NTM3MzQ3MjA5NTMxNCAqIHIgKTsKKysgIH0KKysKKytmbG9hdCBzaW1wbGV4Tm9pc2UyKHZlYzIgdikKKysgIHsKKysgIGNvbnN0IHZlYzIgQyA9IHZlYzIoMC4yMTEzMjQ4NjU0MDUxODcxMzQsIC8vICgzLjAtc3FydCgzLjApKS82LjsKKysgICAgICAgICAgICAgICAgICAgICAgMC4zNjYwMjU0MDM3ODQ0Mzg1OTcpOyAvLyAwLjUqKHNxcnQoMy4wKS0xLik7CisrICBjb25zdCB2ZWMzIEQgPSB2ZWMzKCAwLiwgMC41LCAyLjApICogMy4xNDE1OTI2NTM1ODk3OTMxMjsKKysvLyBGaXJzdCBjb3JuZXIKKysgIHZlYzIgaSA9IGZsb29yKHYgKyBkb3QodiwgQy55eSkgKTsKKysgIHZlYzIgeDAgPSB2IC0gaSArIGRvdChpLCBDLnh4KTsKKysKKysvLyBPdGhlciBjb3JuZXJzCisrICB2ZWMyIGkxID0gKHgwLnggPiB4MC55KSA/IHZlYzIoMS4sMC4pIDogdmVjMigwLiwxLikgOworKworKyAgIC8vIHgwID0geDAgLSAwLiArIDAuICogQworKyAgdmVjMiB4MSA9IHgwIC0gaTEgKyAxLiAqIEMueHggOworKyAgdmVjMiB4MiA9IHgwIC0gMS4gKyAyLiAqIEMueHggOworKworKy8vIFBlcm11dGF0aW9ucworKyAgaSA9IG1vZChpLCBwUGFyYW0ueCk7CisrICB2ZWMzIHAgPSBwZXJtdXRlKCBwZXJtdXRlKAorKyAgICAgICAgICAgICBpLnkgKyB2ZWMzKDAuLCBpMS55LCAxLiApLCBwUGFyYW0ueHl6KQorKyAgICAgICAgICAgKyBpLnggKyB2ZWMzKDAuLCBpMS54LCAxLiApLCBwUGFyYW0ueHl6KTsKKysKKysjaWZuZGVmIFVTRV9DSVJDTEUKKysvLyAoIE4gcG9pbnRzIHVuaWZvcm1seSBvdmVyIGEgbGluZSwgbWFwcGVkIG9udG8gYSBkaWFtb25kLikKKysgIHZlYzMgeCA9IGZyYWN0KHAgLyBwUGFyYW0udykgOworKyAgdmVjMyBoID0gMC41IC0gYWJzKHgpIDsKKysKKysgIHZlYzMgc3ggPSB2ZWMzKGxlc3NUaGFuKHgsRC54eHgpKSAqMi4gLTEuOworKyAgdmVjMyBzaCA9IHZlYzMobGVzc1RoYW4oaCxELnh4eCkpOworKworKyAgdmVjMyBhMCA9IHggKyBzeCpzaDsKKysgIHZlYzIgcDAgPSB2ZWMyKGEwLngsaC54KTsKKysgIHZlYzIgcDEgPSB2ZWMyKGEwLnksaC55KTsKKysgIHZlYzIgcDIgPSB2ZWMyKGEwLnosaC56KTsKKysKKysjaWZkZWYgTk9STUFMSVNFX0dSQURJRU5UUworKyAgcDAgKj0gdGF5bG9ySW52U3FydChkb3QocDAscDApKTsKKysgIHAxICo9IHRheWxvckludlNxcnQoZG90KHAxLHAxKSk7CisrICBwMiAqPSB0YXlsb3JJbnZTcXJ0KGRvdChwMixwMikpOworKyNlbmRpZgorKworKyAgdmVjMyBnID0gMi4wICogdmVjMyggZG90KHAwLCB4MCksIGRvdChwMSwgeDEpLCBkb3QocDIsIHgyKSApOworKyNlbHNlCisrLy8gTiBwb2ludHMgYXJvdW5kIGEgdW5pdCBjaXJjbGUuCisrICB2ZWMzIHBoaSA9IEQueiAqIG1vZChwLHBQYXJhbS53KSAvcFBhcmFtLncgOworKyAgdmVjNCBhMCA9IHNpbihwaGkueHh5eStELnh5eHkpOworKyAgdmVjMiBhMSA9IHNpbihwaGkuenogK0QueHkpOworKyAgdmVjMyBnID0gdmVjMyggZG90KGEwLnh5LCB4MCksIGRvdChhMC56dywgeDEpLCBkb3QoYTEueHksIHgyKSApOworKyNlbmRpZgorKy8vIG1peAorKyAgdmVjMyBtID0gbWF4KDAuNSAtIHZlYzMoZG90KHgwLHgwKSwgZG90KHgxLHgxKSwgZG90KHgyLHgyKSksIDAuKTsKKysgIG0gPSBtKm0gOworKyAgcmV0dXJuIDEuNjY2NjYqIDcwLipkb3QobSptLCBnKTsKKysgIH0KKysKKytmbG9hdCBzaW1wbGV4Tm9pc2UzKHZlYzMgdikKKysgIHsKKysgIGNvbnN0IHZlYzIgQyA9IHZlYzIoMS4vNi4gLCAxLi8zLiApIDsKKysgIGNvbnN0IHZlYzQgRCA9IHZlYzQoMC4sIDAuNSwgMS4wLCAyLjApOworKworKy8vIEZpcnN0IGNvcm5lcgorKyAgdmVjMyBpID0gZmxvb3IodiArIGRvdCh2LCBDLnl5eSkgKTsKKysgIHZlYzMgeDAgPSB2IC0gaSArIGRvdChpLCBDLnh4eCkgOworKyAgCisrLy8gT3RoZXIgY29ybmVycworKyNpZmRlZiBDT0xMQVBTRV9TT1JUTkVUCisrICB2ZWMzIGcgPSB2ZWMzKCBncmVhdGVyVGhhbiggeDAueHl6LCB4MC55engpICk7CisrICB2ZWMzIGwgPSB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB4MC54eXosIHgwLnl6eCkgKTsKKysKKysgIHZlYzMgaTEgPSBnLnh5eiAqIGwuenh5OworKyAgdmVjMyBpMiA9IG1heCggZy54eXosIGwuenh5KTsKKysjZWxzZQorKy8vIEtlZXBpbmcgdGhpcyBjbGVhbiAtIGxldCB0aGUgY29tcGlsZXIgb3B0aW1pemUuCisrICB2ZWMzIHExOworKyAgcTEueCA9IG1heCh4MC54LCB4MC55KTsKKysgIHExLnkgPSBtaW4oeDAueCwgeDAueSk7CisrICBxMS56ID0geDAuejsKKysKKysgIHZlYzMgcTI7CisrICBxMi54ID0gbWF4KHExLngscTEueik7CisrICBxMi56ID0gbWluKHExLngscTEueik7CisrICBxMi55ID0gcTEueTsKKysKKysgIHZlYzMgcTM7CisrICBxMy55ID0gbWF4KHEyLnksIHEyLnopOworKyAgcTMueiA9IG1pbihxMi55LCBxMi56KTsKKysgIHEzLnggPSBxMi54OworKworKyAgdmVjMyBpMSA9IHZlYzMoZXF1YWwocTMueHh4LCB4MCkpOworKyAgdmVjMyBpMiA9IGkxICsgdmVjMyhlcXVhbChxMy55eXksIHgwKSk7CisrI2VuZGlmCisrCisrICAgLy8geDAgPSB4MCAtIDAuICsgMC4gKiBDCisrICB2ZWMzIHgxID0geDAgLSBpMSArIDEuICogQy54eHg7CisrICB2ZWMzIHgyID0geDAgLSBpMiArIDIuICogQy54eHg7CisrICB2ZWMzIHgzID0geDAgLSAxLiArIDMuICogQy54eHg7CisrCisrLy8gUGVybXV0YXRpb25zCisrICBpID0gbW9kKGksIHBQYXJhbS54ICk7CisrICB2ZWM0IHAgPSBwZXJtdXRlKCBwZXJtdXRlKCBwZXJtdXRlKAorKyAgICAgICAgICAgICBpLnogKyB2ZWM0KDAuLCBpMS56LCBpMi56LCAxLiApLCBwUGFyYW0ueHl6KQorKyAgICAgICAgICAgKyBpLnkgKyB2ZWM0KDAuLCBpMS55LCBpMi55LCAxLiApLCBwUGFyYW0ueHl6KQorKyAgICAgICAgICAgKyBpLnggKyB2ZWM0KDAuLCBpMS54LCBpMi54LCAxLiApLCBwUGFyYW0ueHl6KTsKKysKKysvLyBHcmFkaWVudHMKKysvLyAoIE4qTiBwb2ludHMgdW5pZm9ybWx5IG92ZXIgYSBzcXVhcmUsIG1hcHBlZCBvbnRvIGEgb2N0b2hlZHJvbi4pCisrICBmbG9hdCBuXyA9IDEuMC9wUGFyYW0udyA7CisrICB2ZWMzIG5zID0gbl8gKiBELnd5eiAtIEQueHp4IDsKKysKKysgIHZlYzQgaiA9IHAgLSBwUGFyYW0udypwUGFyYW0udypmbG9vcihwICogbnMueiAqbnMueik7IC8vIG1vZChwLE4qTikKKysKKysgIHZlYzQgeF8gPSBmbG9vcihqICogbnMueikgOworKyAgdmVjNCB5XyA9IGZsb29yKGogLSBwUGFyYW0udyAqIHhfICkgOyAvLyBtb2QoaixOKQorKworKyAgdmVjNCB4ID0geF8gKm5zLnggKyBucy55eXl5OworKyAgdmVjNCB5ID0geV8gKm5zLnggKyBucy55eXl5OworKyAgdmVjNCBoID0gMS4gLSBhYnMoeCkgLSBhYnMoeSk7CisrCisrICB2ZWM0IGIwID0gdmVjNCggeC54eSwgeS54eSApOworKyAgdmVjNCBiMSA9IHZlYzQoIHguencsIHkuencgKTsKKysKKysgIHZlYzQgczAgPSB2ZWM0KGxlc3NUaGFuKGIwLEQueHh4eCkpICoyLiAtMS47CisrICB2ZWM0IHMxID0gdmVjNChsZXNzVGhhbihiMSxELnh4eHgpKSAqMi4gLTEuOworKyAgdmVjNCBzaCA9IHZlYzQobGVzc1RoYW4oaCwgRC54eHh4KSk7CisrCisrICB2ZWM0IGEwID0gYjAueHp5dyArIHMwLnh6eXcqc2gueHh5eSA7CisrICB2ZWM0IGExID0gYjEueHp5dyArIHMxLnh6eXcqc2guenp3dyA7CisrCisrICB2ZWMzIHAwID0gdmVjMyhhMC54eSxoLngpOworKyAgdmVjMyBwMSA9IHZlYzMoYTAuencsaC55KTsKKysgIHZlYzMgcDIgPSB2ZWMzKGExLnh5LGgueik7CisrICB2ZWMzIHAzID0gdmVjMyhhMS56dyxoLncpOworKworKyNpZmRlZiBOT1JNQUxJU0VfR1JBRElFTlRTCisrICBwMCAqPSB0YXlsb3JJbnZTcXJ0KGRvdChwMCxwMCkpOworKyAgcDEgKj0gdGF5bG9ySW52U3FydChkb3QocDEscDEpKTsKKysgIHAyICo9IHRheWxvckludlNxcnQoZG90KHAyLHAyKSk7CisrICBwMyAqPSB0YXlsb3JJbnZTcXJ0KGRvdChwMyxwMykpOworKyNlbmRpZgorKworKy8vIE1peAorKyAgdmVjNCBtID0gbWF4KDAuNiAtIHZlYzQoZG90KHgwLHgwKSwgZG90KHgxLHgxKSwgZG90KHgyLHgyKSwgZG90KHgzLHgzKSksIDAuKTsKKysgIG0gPSBtICogbTsKKysvL3VzZWQgdG8gYmUgNjQuCisrICByZXR1cm4gNDguMCAqIGRvdCggbSptLCB2ZWM0KCBkb3QocDAseDApLCBkb3QocDEseDEpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90KHAyLHgyKSwgZG90KHAzLHgzKSApICk7CisrICB9CisrCisrdmVjNCBncmFkNChmbG9hdCBqLCB2ZWM0IGlwKQorKyAgeworKyAgY29uc3QgdmVjNCBvbmVzID0gdmVjNCgxLiwxLiwxLiwtMS4pOworKyAgdmVjNCBwLHM7CisrCisrICBwLnh5eiA9IGZsb29yKCBmcmFjdCAodmVjMyhqKSAqIGlwLnh5eikgKnBQYXJhbS53KSAqIGlwLnogLTEuMDsKKysgIHAudyA9IDEuNSAtIGRvdChhYnMocC54eXopLCBvbmVzLnh5eik7CisrICBzID0gdmVjNChsZXNzVGhhbihwLHZlYzQoMC4pKSk7CisrICBwLnh5eiA9IHAueHl6ICsgKHMueHl6KjIuLTEuKSAqIHMud3d3OworKworKyAgcmV0dXJuIHA7CisrICB9CisrCisrZmxvYXQgc2ltcGxleE5vaXNlNCh2ZWM0IHYpCisrICB7CisrICBjb25zdCB2ZWMyIEMgPSB2ZWMyKCAwLjEzODE5NjYwMTEyNTAxMDUwNCwgLy8gKDUgLSBzcXJ0KDUpKS8yMCBHNAorKyAgICAgICAgICAgICAgICAgICAgICAgIDAuMzA5MDE2OTk0Mzc0OTQ3NDUxKTsgLy8gKHNxcnQoNSkgLSAxKS80IEY0CisrLy8gRmlyc3QgY29ybmVyCisrICB2ZWM0IGkgPSBmbG9vcih2ICsgZG90KHYsIEMueXl5eSkgKTsKKysgIHZlYzQgeDAgPSB2IC0gaSArIGRvdChpLCBDLnh4eHgpOworKworKy8vIE90aGVyIGNvcm5lcnMKKysKKysvLyBGb3JjZSBleGlzdGFuY2Ugb2Ygc3RyaWN0IHRvdGFsIG9yZGVyaW5nIGluIHNvcnQuCisrICB2ZWM0IHEwID0gZmxvb3IoeDAgKiAxMDI0LjApICsgdmVjNCggMC4sIDEuLzQuLCAyLi80LiAsIDMuLzQuKTsKKysgIHZlYzQgcTE7CisrICBxMS54eSA9IG1heChxMC54eSxxMC56dyk7IC8vIHg6eiB5OncKKysgIHExLnp3ID0gbWluKHEwLnh5LHEwLnp3KTsKKysKKysgIHZlYzQgcTI7CisrICBxMi54eiA9IG1heChxMS54eixxMS55dyk7IC8vIHg6eSB6OncKKysgIHEyLnl3ID0gbWluKHExLnh6LHExLnl3KTsKKysgIAorKyAgdmVjNCBxMzsKKysgIHEzLnkgPSBtYXgocTIueSxxMi56KTsgLy8geTp6CisrICBxMy56ID0gbWluKHEyLnkscTIueik7CisrICBxMy54dyA9IHEyLnh3OworKworKyAgdmVjNCBpMSA9IHZlYzQobGVzc1RoYW5FcXVhbChxMy54eHh4LCBxMCkpOworKyAgdmVjNCBpMiA9IHZlYzQobGVzc1RoYW5FcXVhbChxMy55eXl5LCBxMCkpOworKyAgdmVjNCBpMyA9IHZlYzQobGVzc1RoYW5FcXVhbChxMy56enp6LCBxMCkpOworKworKyAgIC8vIHgwID0geDAgLSAwLiArIDAuICogQworKyAgdmVjNCB4MSA9IHgwIC0gaTEgKyAxLiAqIEMueHh4eDsKKysgIHZlYzQgeDIgPSB4MCAtIGkyICsgMi4gKiBDLnh4eHg7CisrICB2ZWM0IHgzID0geDAgLSBpMyArIDMuICogQy54eHh4OworKyAgdmVjNCB4NCA9IHgwIC0gMS4gKyA0LiAqIEMueHh4eDsKKysKKysvLyBQZXJtdXRhdGlvbnMKKysgIGkgPSBtb2QoaSwgcFBhcmFtLnggKTsKKysgIGZsb2F0IGowID0gcGVybXV0ZSggcGVybXV0ZSggcGVybXV0ZSggcGVybXV0ZSAoCisrICAgICAgICAgICAgICBpLncsIHBQYXJhbS54eXopICsgaS56LCBwUGFyYW0ueHl6KQorKyAgICAgICAgICAgICsgaS55LCBwUGFyYW0ueHl6KSArIGkueCwgcFBhcmFtLnh5eik7CisrICB2ZWM0IGoxID0gcGVybXV0ZSggcGVybXV0ZSggcGVybXV0ZSggcGVybXV0ZSAoCisrICAgICAgICAgICAgIGkudyArIHZlYzQoaTEudywgaTIudywgaTMudywgMS4gKSwgcFBhcmFtLnh5eikKKysgICAgICAgICAgICsgaS56ICsgdmVjNChpMS56LCBpMi56LCBpMy56LCAxLiApLCBwUGFyYW0ueHl6KQorKyAgICAgICAgICAgKyBpLnkgKyB2ZWM0KGkxLnksIGkyLnksIGkzLnksIDEuICksIHBQYXJhbS54eXopCisrICAgICAgICAgICArIGkueCArIHZlYzQoaTEueCwgaTIueCwgaTMueCwgMS4gKSwgcFBhcmFtLnh5eik7CisrLy8gR3JhZGllbnRzCisrLy8gKCBOKk4qTiBwb2ludHMgdW5pZm9ybWx5IG92ZXIgYSBjdWJlLCBtYXBwZWQgb250byBhIDQtb2N0b2hlZHJvbi4pCisrICB2ZWM0IGlwID0gcFBhcmFtIDsKKysgIGlwLnh5ICo9IHBQYXJhbS53IDsKKysgIGlwLnggKj0gcFBhcmFtLncgOworKyAgaXAgPSB2ZWM0KDEuLDEuLDEuLDIuKSAvIGlwIDsKKysKKysgIHZlYzQgcDAgPSBncmFkNChqMCwgaXApOworKyAgdmVjNCBwMSA9IGdyYWQ0KGoxLngsIGlwKTsKKysgIHZlYzQgcDIgPSBncmFkNChqMS55LCBpcCk7CisrICB2ZWM0IHAzID0gZ3JhZDQoajEueiwgaXApOworKyAgdmVjNCBwNCA9IGdyYWQ0KGoxLncsIGlwKTsKKysKKysjaWZkZWYgTk9STUFMSVNFX0dSQURJRU5UUworKyAgcDAgKj0gdGF5bG9ySW52U3FydChkb3QocDAscDApKTsKKysgIHAxICo9IHRheWxvckludlNxcnQoZG90KHAxLHAxKSk7CisrICBwMiAqPSB0YXlsb3JJbnZTcXJ0KGRvdChwMixwMikpOworKyAgcDMgKj0gdGF5bG9ySW52U3FydChkb3QocDMscDMpKTsKKysgIHA0ICo9IHRheWxvckludlNxcnQoZG90KHA0LHA0KSk7CisrI2VuZGlmCisrCisrLy8gTWl4CisrICB2ZWMzIG0wID0gbWF4KDAuNiAtIHZlYzMoZG90KHgwLHgwKSwgZG90KHgxLHgxKSwgZG90KHgyLHgyKSksIDAuKTsKKysgIHZlYzIgbTEgPSBtYXgoMC42IC0gdmVjMihkb3QoeDMseDMpLCBkb3QoeDQseDQpICksIDAuKTsKKysgIG0wID0gbTAgKiBtMDsKKysgIG0xID0gbTEgKiBtMTsKKysgIHJldHVybiAzMi4gKiAoIGRvdChtMCptMCwgdmVjMyggZG90KCBwMCwgeDAgKSwgZG90KCBwMSwgeDEgKSwgZG90KCBwMiwgeDIgKSkpCisrICAgICAgICAgICAgICAgKyBkb3QobTEqbTEsIHZlYzIoIGRvdCggcDMsIHgzICksIGRvdCggcDQsIHg0ICkgKSApICkgOworKworKyAgfQorKworKworKworZGlmZiAtLWdpdCBhL3NyYy9nbHNsL3NraW5uaW5nLnZlcnQgYi9zcmMvZ2xzbC9za2lubmluZy52ZXJ0CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMjg5NzBlZQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2dsc2wvc2tpbm5pbmcudmVydAorQEAgLTAsMCArMSwyNCBAQAorKy8vIFZlcnRleCB3ZWlnaHRpbmcvYmxlbmRpbiBzaGFkZXIKKysvLyBCcmlhbiBQYXVsCisrLy8gNCBOb3YgMjAwOAorKworK3VuaWZvcm0gbWF0NCBtYXQwLCBtYXQxOworK2F0dHJpYnV0ZSBmbG9hdCB3ZWlnaHQ7CisrCisrdm9pZCBtYWluKCkgCisreworKyAgIC8vIHNpbXBsZSBkaWZmdXNlIHNoYWRpbmcKKysgICAvLyBOb3RlIHRoYXQgd2Ugc2hvdWxkIHJlYWxseSB0cmFuc2Zvcm0gdGhlIG5vcm1hbCB2ZWN0b3IgYWxvbmcgd2l0aAorKyAgIC8vIHRoZSBwb3N0aW9uIGJlbG93Li4uIHNvbWVkYXkuCisrICAgdmVjMyBsaWdodFZlYyA9IHZlYzMoMCwgMCwgMSk7CisrICAgdmVjMyBub3JtID0gZ2xfTm9ybWFsTWF0cml4ICogZ2xfTm9ybWFsOworKyAgIGZsb2F0IGRvdCA9IDAuMiArIG1heCgwLjAsIGRvdChub3JtLCBsaWdodFZlYykpOworKyAgIGdsX0Zyb250Q29sb3IgPSB2ZWM0KGRvdCk7CisrCisrICAgLy8gY29tcHV0ZSBzdW0gb2Ygd2VpZ2h0ZWQgdHJhbnNmb3JtYXRpb25zCisrICAgdmVjNCBwb3MwID0gbWF0MCAqIGdsX1ZlcnRleDsKKysgICB2ZWM0IHBvczEgPSBtYXQxICogZ2xfVmVydGV4OworKyAgIHZlYzQgcG9zID0gbWl4KHBvczAsIHBvczEsIHdlaWdodCk7CisrCisrICAgZ2xfUG9zaXRpb24gPSBnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4ICogcG9zOworK30KK2RpZmYgLS1naXQgYS9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMS5mcmFnIGIvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTEuZnJhZworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjA4Mzk0MzYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UxLmZyYWcKK0BAIC0wLDAgKzEsMTkgQEAKKysvLyBNdWx0aS10ZXh0dXJlIGZyYWdtZW50IHNoYWRlcgorKy8vIEJyaWFuIFBhdWwKKysKKysvLyBDb21wb3NpdGUgc2Vjb25kIHRleHR1cmUgb3ZlciBmaXJzdC4KKysvLyBXZSdyZSBhc3N1bWluZyB0aGUgMm5kIHRleHR1cmUgaGFzIGEgbWVhbmluZ2Z1bCBhbHBoYSBjaGFubmVsLgorKworK3VuaWZvcm0gc2FtcGxlcjJEIHRleDE7CisrdW5pZm9ybSBzYW1wbGVyMkQgdGV4MjsKKyt1bmlmb3JtIHZlYzQgVW5pVjE7CisrdW5pZm9ybSB2ZWM0IFVuaVYyOworKworK3ZvaWQgbWFpbigpCisreworKyAgIHZlYzQgdDM7CisrICAgdmVjNCB0MSA9IHRleHR1cmUyRCh0ZXgxLCBnbF9UZXhDb29yZFswXS54eSk7CisrICAgdmVjNCB0MiA9IHRleHR1cmUyRCh0ZXgyLCBnbF9UZXhDb29yZFsxXS54eSk7CisrICAgdDMgPSBtaXgodDEsIHQyLCB0Mi53KTsKKysgICBnbF9GcmFnQ29sb3IgPSB0MyArIFVuaVYxICsgVW5pVjI7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UxLnZlcnQgYi9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMS52ZXJ0CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uY2VmNTBkYgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTEudmVydAorQEAgLTAsMCArMSwxNCBAQAorKy8vIE11bHRpLXRleHR1cmUgdmVydGV4IHNoYWRlcgorKy8vIEJyaWFuIFBhdWwKKysKKysKKythdHRyaWJ1dGUgdmVjNCBUZXhDb29yZDAsIFRleENvb3JkMTsKKythdHRyaWJ1dGUgdmVjNCBWZXJ0Q29vcmQ7CisrCisrdm9pZCBtYWluKCkKKyt7CisrICAgZ2xfVGV4Q29vcmRbMF0gPSBUZXhDb29yZDA7CisrICAgZ2xfVGV4Q29vcmRbMV0gPSBUZXhDb29yZDE7CisrICAgLy8gbm90ZTogbWF5IHVzZSBnbF9WZXJ0ZXggb3IgVmVydENvb3JkIGhlcmUgZm9yIHRlc3Rpbmc6CisrICAgZ2xfUG9zaXRpb24gPSBnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4ICogZ2xfVmVydGV4OworK30KK2RpZmYgLS1naXQgYS9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMi5mcmFnIGIvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTIuZnJhZworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjBkZjAzMTkKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UyLmZyYWcKK0BAIC0wLDAgKzEsMTcgQEAKKysvLyBNdWx0aS10ZXh0dXJlIGZyYWdtZW50IHNoYWRlcgorKy8vIEJyaWFuIFBhdWwKKysKKysvLyBDb21wb3NpdGUgc2Vjb25kIHRleHR1cmUgb3ZlciBmaXJzdC4KKysvLyBXZSdyZSBhc3N1bWluZyB0aGUgMm5kIHRleHR1cmUgaGFzIGEgbWVhbmluZ2Z1bCBhbHBoYSBjaGFubmVsLgorKworK3VuaWZvcm0gc2FtcGxlcjJEIHRleDE7CisrdW5pZm9ybSBzYW1wbGVyMkQgdGV4MjsKKyt1bmlmb3JtIHZlYzQgVW5pVjE7CisrdW5pZm9ybSB2ZWM0IFVuaVYyOworKworK3ZvaWQgbWFpbigpCisreworKyAgIHZlYzQgdDEgPSB0ZXh0dXJlMkQodGV4MSwgZ2xfVGV4Q29vcmRbMF0ueHkpOworKyAgIHZlYzQgdDIgPSB0ZXh0dXJlMkQodGV4MiwgZ2xfVGV4Q29vcmRbMV0ueHkpOworKyAgIGdsX0ZyYWdDb2xvciA9IHQxICsgdDIgKyBVbmlWMSArIFVuaVYyOworK30KK2RpZmYgLS1naXQgYS9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMi52ZXJ0IGIvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTIudmVydAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmNlZjUwZGIKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UyLnZlcnQKK0BAIC0wLDAgKzEsMTQgQEAKKysvLyBNdWx0aS10ZXh0dXJlIHZlcnRleCBzaGFkZXIKKysvLyBCcmlhbiBQYXVsCisrCisrCisrYXR0cmlidXRlIHZlYzQgVGV4Q29vcmQwLCBUZXhDb29yZDE7CisrYXR0cmlidXRlIHZlYzQgVmVydENvb3JkOworKworK3ZvaWQgbWFpbigpCisreworKyAgIGdsX1RleENvb3JkWzBdID0gVGV4Q29vcmQwOworKyAgIGdsX1RleENvb3JkWzFdID0gVGV4Q29vcmQxOworKyAgIC8vIG5vdGU6IG1heSB1c2UgZ2xfVmVydGV4IG9yIFZlcnRDb29yZCBoZXJlIGZvciB0ZXN0aW5nOgorKyAgIGdsX1Bvc2l0aW9uID0gZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCAqIGdsX1ZlcnRleDsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL3ZwZ2xzbC9pbmZpbml0ZS1sb29wLmdsc2wgYi9zcmMvdnBnbHNsL2luZmluaXRlLWxvb3AuZ2xzbAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmJjN2FlNGIKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy92cGdsc2wvaW5maW5pdGUtbG9vcC5nbHNsCitAQCAtMCwwICsxLDggQEAKKyt2b2lkIG1haW4oKSB7CisrICAgZ2xfUG9zaXRpb24gPSBnbF9WZXJ0ZXg7CisrICAgdmVjNCBzdW0gPSB2ZWM0KDApOworKyAgIGZvciAoaW50IGkgPSAxOyBpICE9IDI7IGkgKz0gMikgeworKyAgICAgIHN1bSArPSB2ZWM0KDAuMSwgMC4xLCAwLjEsIDAuMSk7CisrICAgfQorKyAgIGdsX0Zyb250Q29sb3IgPSBzdW07CisrfQorLS0gCisyLjAuMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwMi1Db3JyZWN0bHktaW1wbGVtZW50LXdpdGgtQUNfV0lUSC1nbHV0LXNvLXRoYXQtd2l0aG91LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDItQ29ycmVjdGx5LWltcGxlbWVudC13aXRoLUFDX1dJVEgtZ2x1dC1zby10aGF0LXdpdGhvdS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTZhZjEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDItQ29ycmVjdGx5LWltcGxlbWVudC13aXRoLUFDX1dJVEgtZ2x1dC1zby10aGF0LXdpdGhvdS5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIDM2ODI5YThkN2FkMjg4ODUxNWZiZWU5NWMyYTcwYjNkNjM2ZDc1MzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorRGF0ZTogV2VkLCA5IEp1bCAyMDE0IDE0OjMwOjMzICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMi85XSBDb3JyZWN0bHkgaW1wbGVtZW50IHdpdGggQUNfV0lUSChnbHV0KSBzbyB0aGF0CisgLS13aXRob3V0LWdsdXQgd29ya3MuCisKKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDI2ICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBjNGVlMTJiLi45NDQ1NDI0IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02NywyMSArNjcsMjUgQEAgREVNT19DRkxBR1M9IiRERU1PX0NGTEFHUyAkR0xfQ0ZMQUdTIgorIERFTU9fTElCUz0iJERFTU9fTElCUyAkR0xfTElCUyIKKyAKKyBkbmwgQ2hlY2sgZm9yIEdMVVQKKy1HTFVUX0NGTEFHUz0iIgorLUdMVVRfTElCUz0tbGdsdXQKKy1nbHV0X2VuYWJsZWQ9eWVzCisrZ2x1dF9lbmFibGVkPW5vCisgQUNfQVJHX1dJVEgoW2dsdXRdLAorIAlbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1nbHV0PURJUl0sCisgCQkJW2dsdXQgaW5zdGFsbCBkaXJlY3RvcnldKV0sCisgCVtHTFVUX0NGTEFHUz0iLUkkd2l0aHZhbC9pbmNsdWRlIgorLQkgR0xVVF9MSUJTPSItTCR3aXRodmFsL2xpYiAtbGdsdXQiXSkKKy1BQ19DSEVDS19IRUFERVIoW0dML2dsdXQuaF0sCistCQlbXSwKKy0JCVtnbHV0X2VuYWJsZWQ9bm9dKQorLUFDX0NIRUNLX0xJQihbZ2x1dF0sCistCQlbZ2x1dEluaXRdLAorLQkJW10sCistCQlbZ2x1dF9lbmFibGVkPW5vXSkKKysJIEdMVVRfTElCUz0iLUwkd2l0aHZhbC9saWIgLWxnbHV0Il0sCisrCVtHTFVUX0NGTEFHUz0iIgorKwkgR0xVVF9MSUJTPSItbGdsdXQiXQorKyAgICAgICAgKQorK0FTX0lGKFt0ZXN0ICJ4JHdpdGhfZ2x1dCIgIT0geG5vXSwKKysgICAgICBbQUNfQ0hFQ0tfSEVBREVSKFtHTC9nbHV0LmhdLAorKyAgICAgICAgICAgICAgICAgICAgICAgW10sCisrICAgICAgICAgICAgICAgICAgICAgICBbZ2x1dF9lbmFibGVkPW5vXSkKKysgICAgICAgQUNfQ0hFQ0tfTElCKFtnbHV0XSwKKysgICAgICAgICAgICAgICAgICAgIFtnbHV0SW5pdF0sCisrICAgICAgICAgICAgICAgICAgICBbXSwKKysgICAgICAgICAgICAgICAgICAgIFtnbHV0X2VuYWJsZWQ9bm9dKQorKyAgICAgICBnbHV0X2VuYWJsZWQ9eWVzCisrXSkKKyAKKyBkbmwgQ2hlY2sgZm9yIEZyZWVHTFVUIDIuNiBvciBsYXRlcgorIEFDX0VHUkVQX0hFQURFUihbZ2x1dEluaXRDb250ZXh0UHJvZmlsZV0sCistLSAKKzIuMC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDAzLWNvbmZpZ3VyZS1BbGxvdy10by1kaXNhYmxlLWRlbW9zLXdoaWNoLXJlcXVpcmUtR0xFVy0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwMy1jb25maWd1cmUtQWxsb3ctdG8tZGlzYWJsZS1kZW1vcy13aGljaC1yZXF1aXJlLUdMRVctLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNThjMmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwMy1jb25maWd1cmUtQWxsb3ctdG8tZGlzYWJsZS1kZW1vcy13aGljaC1yZXF1aXJlLUdMRVctLnBhdGNoCkBAIC0wLDAgKzEsNDI0IEBACitGcm9tIGIyNWU5YzY3NWNmNTYwYjhiMDM3ZGM4NTVjNmIzYjFkMDk5NTc4NjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDkgSnVsIDIwMTQgMTQ6MjM6NDEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzldIGNvbmZpZ3VyZTogQWxsb3cgdG8gZGlzYWJsZSBkZW1vcyB3aGljaCByZXF1aXJlIEdMRVcgb3IKKyBHTFUKKworKiBpbiBzb21lIHN5c3RlbXMgd2l0aG91dCBYMTEgc3VwcG9ydCB3ZSBkb24ndCBoYXZlIEdMRVcsIGJ1dAorICBtZXNhLWRlbW9zIGFyZSBzdGlsbCB1c2VmdWwKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgIHwgNDkgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KKyBzcmMvTWFrZWZpbGUuYW0gICAgICAgICAgICAgICB8IDE0ICsrKysrKy0tLQorIHNyYy9kZW1vcy9NYWtlZmlsZS5hbSAgICAgICAgIHwgNzMgKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQorIHNyYy9lZ2wvTWFrZWZpbGUuYW0gICAgICAgICAgIHwgIDggKysrLS0KKyBzcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbSB8IDQ0ICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCisgc3JjL2VnbC9vcGVuZ2xlczIvTWFrZWZpbGUuYW0gfCAzMyArKysrKysrKysrLS0tLS0tLS0tCisgNiBmaWxlcyBjaGFuZ2VkLCAxMzUgaW5zZXJ0aW9ucygrKSwgODYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDk0NDU0MjQuLmJjNGM4ZDEgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTkzLDI1ICs5Myw0NCBAQCBBQ19FR1JFUF9IRUFERVIoW2dsdXRJbml0Q29udGV4dFByb2ZpbGVdLAorIAkJW0FDX0RFRklORShIQVZFX0ZSRUVHTFVUKV0sCisgCQlbXSkKKyAKKy1kbmwgQ2hlY2sgZm9yIEdMRVcKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhHTEVXLCBbZ2xldyA+PSAxLjUuNF0pCistREVNT19DRkxBR1M9IiRERU1PX0NGTEFHUyAkR0xFV19DRkxBR1MiCistREVNT19MSUJTPSIkREVNT19MSUJTICRHTEVXX0xJQlMiCisrQUNfQVJHX0VOQUJMRShbZ2xld10sCisrICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZ2xld10sCisrICAgICAgICBbYnVpbGQgZGVtb3Mgd2hpY2ggcmVxdWlyZSBnbGV3IEA8OkBkZWZhdWx0PXllc0A6PkBdKV0sCisrICAgIFtlbmFibGVfZ2xldz0iJGVuYWJsZXZhbCJdLAorKyAgICBbZW5hYmxlX2dsZXc9eWVzXQorKykKKysKKytpZiB0ZXN0ICJ4JGVuYWJsZV9nbGV3IiA9IHh5ZXM7IHRoZW4KKysgICAgZG5sIENoZWNrIGZvciBHTEVXCisrICAgIFBLR19DSEVDS19NT0RVTEVTKEdMRVcsIFtnbGV3ID49IDEuNS40XSwgW2dsZXdfZW5hYmxlZD15ZXNdLCBbZ2xld19lbmFibGVkPW5vXSkKKysgICAgREVNT19DRkxBR1M9IiRERU1PX0NGTEFHUyAkR0xFV19DRkxBR1MiCisrICAgIERFTU9fTElCUz0iJERFTU9fTElCUyAkR0xFV19MSUJTIgorK2ZpCisgCisgIyBMSUJTIHdhcyBzZXQgYnkgQUNfQ0hFQ0tfTElCIGFib3ZlCisgTElCUz0iIgorIAorLVBLR19DSEVDS19NT0RVTEVTKEdMVSwgW2dsdV0sIFtdLAorLQkJICBbQUNfQ0hFQ0tfSEVBREVSKFtHTC9nbHUuaF0sCistCQkJCSAgIFtdLAorLQkJICAJCSAgIEFDX01TR19FUlJPUihbR0xVIG5vdCBmb3VuZF0pKQorLQkJICAgQUNfQ0hFQ0tfTElCKFtHTFVdLAorLQkJCQlbZ2x1QmVnaW5DdXJ2ZV0sCistCQkJCVtHTFVfTElCUz0tbEdMVV0sCistCQkJCUFDX01TR19FUlJPUihbR0xVIHJlcXVpcmVkXSkpIF0pCisrQUNfQVJHX0VOQUJMRShbZ2x1XSwKKysgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1nbHVdLAorKyAgICAgICAgW2J1aWxkIGRlbW9zIHdoaWNoIHJlcXVpcmUgZ2x1IEA8OkBkZWZhdWx0PXllc0A6PkBdKV0sCisrICAgIFtlbmFibGVfZ2x1PSIkZW5hYmxldmFsIl0sCisrICAgIFtlbmFibGVfZ2x1PXllc10KKyspCisgCistREVNT19DRkxBR1M9IiRERU1PX0NGTEFHUyAkR0xVX0NGTEFHUyIKKy1ERU1PX0xJQlM9IiRERU1PX0xJQlMgJEdMVV9MSUJTIgorK2lmIHRlc3QgIngkZW5hYmxlX2dsdSIgPSB4eWVzOyB0aGVuCisrICAgIFBLR19DSEVDS19NT0RVTEVTKEdMVSwgW2dsdV0sIFtnbHVfZW5hYmxlZD15ZXNdLAorKyAgICAgICAgICAgICAgICAgICAgIFtBQ19DSEVDS19IRUFERVIoW0dML2dsdS5oXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtHTFUgbm90IGZvdW5kXSkpCisrICAgICAgICAgICAgICAgICAgICAgIEFDX0NIRUNLX0xJQihbR0xVXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtnbHVCZWdpbkN1cnZlXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtHTFVfTElCUz0tbEdMVQorKwkJCQkgICAgZ2x1X2VuYWJsZWQ9eWVzXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbR0xVIHJlcXVpcmVkXSkpIF0pCisrCisrICAgIERFTU9fQ0ZMQUdTPSIkREVNT19DRkxBR1MgJEdMVV9DRkxBR1MiCisrICAgIERFTU9fTElCUz0iJERFTU9fTElCUyAkR0xVX0xJQlMiCisrZmkKKyAKKyBBQ19BUkdfRU5BQkxFKFtlZ2xdLAorICAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWVnbF0sCitAQCAtMzA0LDYgKzMyMyw4IEBAIEFDX1NVQlNUKFtXQVlMQU5EX0NGTEFHU10pCisgQUNfU1VCU1QoW1dBWUxBTkRfTElCU10pCisgCisgCisrQU1fQ09ORElUSU9OQUwoSEFWRV9HTFUsIHRlc3QgIngkZ2x1X2VuYWJsZWQiID0gInh5ZXMiKQorK0FNX0NPTkRJVElPTkFMKEhBVkVfR0xFVywgdGVzdCAieCRnbGV3X2VuYWJsZWQiID0gInh5ZXMiKQorIEFNX0NPTkRJVElPTkFMKEhBVkVfRUdMLCB0ZXN0ICJ4JGVnbF9lbmFibGVkIiA9ICJ4eWVzIikKKyBBTV9DT05ESVRJT05BTChIQVZFX0dMRVNWMSwgdGVzdCAieCRnbGVzdjFfZW5hYmxlZCIgPSAieHllcyIpCisgQU1fQ09ORElUSU9OQUwoSEFWRV9HTEVTVjIsIHRlc3QgIngkZ2xlc3YyX2VuYWJsZWQiID0gInh5ZXMiKQorZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5hbSBiL3NyYy9NYWtlZmlsZS5hbQoraW5kZXggMTY0N2Q2NC4uNzU0YzQ3YyAxMDA2NDQKKy0tLSBhL3NyYy9NYWtlZmlsZS5hbQorKysrIGIvc3JjL01ha2VmaWxlLmFtCitAQCAtMjMsMTQgKzIzLDE4IEBACisgIyAgICBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgorIAorK2lmIEhBVkVfR0xFVworK1VUSUwgPSB1dGlsCisrZW5kaWYKKysKKyBTVUJESVJTID0gXAorLQl1dGlsIFwKKysJJChVVElMKSBcCisgCWRhdGEgXAorIAlkZW1vcyBcCisgCWVnbCBcCisgCWZwIFwKKyAJZnBnbHNsIFwKKyAJZ2xzbCBcCistICAgICAgICBncyBcCisrCWdzIFwKKyAJb2Jqdmlld2VyIFwKKyAJb3NkZW1vcyBcCisgCXBlcmYgXAorQEAgLTQwLDggKzM5LDEyIEBAIFNVQkRJUlMgPSBcCisgCXNsYW5nIFwKKyAJdGVzdHMgXAorIAl0b29scyBcCistCXRyaXZpYWwgXAorLQl2cCBcCistCXZwZ2xzbCBcCisgCXdnbCBcCisgCXhkZW1vcworKworK2lmIEhBVkVfR0xFVworK1NVQkRJUlMgKz0gXAorKwl2cCBcCisrCXZwZ2xzbCBcCisrCXRyaXZpYWwKKytlbmRpZgorZGlmZiAtLWdpdCBhL3NyYy9kZW1vcy9NYWtlZmlsZS5hbSBiL3NyYy9kZW1vcy9NYWtlZmlsZS5hbQoraW5kZXggNDE2MDNmYS4uYWIxZTNhYiAxMDA2NDQKKy0tLSBhL3NyYy9kZW1vcy9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2RlbW9zL01ha2VmaWxlLmFtCitAQCAtMzAsOTEgKzMwLDEwMCBAQCBBTV9MREZMQUdTID0gXAorIAkkKERFTU9fTElCUykgXAorIAkkKEdMVVRfTElCUykKKyAKKytiaW5fUFJPR1JBTVMgPQorKworIGlmIEhBVkVfR0xVVAorLWJpbl9QUk9HUkFNUyA9IFwKKytpZiBIQVZFX0dMRVcKKytiaW5fUFJPR1JBTVMgKz0gXAorIAlhcmJmcGxpZ2h0IFwKKyAJYXJiZnNsaWdodCBcCisgCWFyYm9jY2x1ZGUgXAorIAlhcmJvY2NsdWRlMiBcCistCWJvdW5jZSBcCistCWNsZWFyc3BkIFwKKyAJY29weXBpeCBcCisgCWN1YmVtYXAgXAorIAljdWJlcmVuZGVyIFwKKyAJZGlub3NoYWRlIFwKKy0JZGlzc29sdmUgXAorLQlkcmF3cGl4IFwKKyAJZW5naW5lIFwKKyAJZmJvX2ZpcmVjdWJlIFwKKyAJZmJvdGV4dHVyZSBcCistCWZpcmUgXAorIAlmb2djb29yZCBcCisgCWZwbGlnaHQgXAorIAlmc2xpZ2h0IFwKKysJZ2xvc3MgXAorKwlpc29zdXJmIFwKKysJbXVsdGlhcmIgXAorKwlwYWx0ZXggXAorKwlwb2ludGJsYXN0IFwKKysJcHJvanRleCBcCisrCXNoYWRvd3RleCBcCisrCXNwcml0ZWJsYXN0IFwKKysJc3RleDNkIFwKKysJdGV4dHVyZXMgXAorKwl2YW9fZGVtbyBcCisrCXdpbnBvcworKworK2NvcHlwaXhfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKytjdWJlbWFwX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisrY3ViZXJlbmRlcl9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK2VuZ2luZV9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK2Zib19maXJlY3ViZV9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK2dsb3NzX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisraXNvc3VyZl9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK211bHRpYXJiX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisrcHJvanRleF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK3RleHR1cmVzX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisrd2lucG9zX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisrZW5kaWYKKysKKytpZiBIQVZFX0dMVQorK2Jpbl9QUk9HUkFNUyArPSBcCisrCWJvdW5jZSBcCisrCWNsZWFyc3BkIFwKKysJZGlzc29sdmUgXAorKwlkcmF3cGl4IFwKKysJZmlyZSBcCisgCWdhbW1hIFwKKyAJZ2VhcmJveCBcCisgCWdlYXJzIFwKKyAJZ2VhcnRyYWluIFwKKyAJZ2xpbmZvIFwKKy0JZ2xvc3MgXAorIAlnbHRlc3RwZXJmIFwKKyAJaXBlcnMgXAorLQlpc29zdXJmIFwKKyAJbG9kYmlhcyBcCisgCW1vcnBoM2QgXAorLQltdWx0aWFyYiBcCistCXBhbHRleCBcCisgCXBpeGVsdGVzdCBcCistCXBvaW50Ymxhc3QgXAorLQlwcm9qdGV4IFwKKyAJcmF5IFwKKyAJcmVhZHBpeCBcCisgCXJlZmxlY3QgXAorIAlyZW5vcm1hbCBcCistCXNoYWRvd3RleCBcCisgCXNpbmdsZWJ1ZmZlciBcCisgCXNwZWN0ZXggXAorLQlzcHJpdGVibGFzdCBcCistCXN0ZXgzZCBcCisgCXRlYXBvdCBcCisgCXRlcnJhaW4gXAorIAl0ZXNzZGVtbyBcCisgCXRleGN5bCBcCisgCXRleGVudiBcCistCXRleHR1cmVzIFwKKyAJdHJpc3BkIFwKKyAJdHVubmVsMiBcCistCXR1bm5lbCBcCistCXZhb19kZW1vIFwKKy0Jd2lucG9zCistZW5kaWYKKysJdHVubmVsCisgCisgdHVubmVsX1NPVVJDRVMgPSBcCisgCXR1bm5lbC5jIFwKKyAJdHVubmVsZGF0LmgKKyAKKy1jb3B5cGl4X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCistY3ViZW1hcF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorLWN1YmVyZW5kZXJfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKy1kcmF3cGl4X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgZGlzc29sdmVfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKy1lbmdpbmVfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKy1mYm9fZmlyZWN1YmVfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKytkcmF3cGl4X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgZmlyZV9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorLWdsb3NzX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgaXBlcnNfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKy1pc29zdXJmX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgbG9kYmlhc19MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorLW11bHRpYXJiX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCistcHJvanRleF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorIHJlYWRwaXhfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyByZWZsZWN0X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgdGVhcG90X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgdGV4Y3lsX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCistdGV4dHVyZXNfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyB0dW5uZWxfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyB0dW5uZWwyX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCistd2lucG9zX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisrZW5kaWYKKytlbmRpZgorIAorIEVYVFJBX0RJU1QgPSBcCisgCVJFQURNRQorZGlmZiAtLWdpdCBhL3NyYy9lZ2wvTWFrZWZpbGUuYW0gYi9zcmMvZWdsL01ha2VmaWxlLmFtCitpbmRleCBkNjRhNDllLi40ZmUxY2E4IDEwMDY0NAorLS0tIGEvc3JjL2VnbC9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2VnbC9NYWtlZmlsZS5hbQorQEAgLTI0LDggKzI0LDEyIEBACisgCisgU1VCRElSUyA9IFwKKyAJZWdsdXQgXAorLQlvcGVuZ2wgXAorLQlvcGVudmcgXAorIAlvcGVuZ2xlczEgXAorIAlvcGVuZ2xlczIgXAorIAlvZXNfdmcKKysKKytpZiBIQVZFX0dMVQorK1NVQkRJUlMgKz0gXAorKwlvcGVuZ2wgXAorKwlvcGVudmcKKytlbmRpZgorZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbmdsZXMxL01ha2VmaWxlLmFtIGIvc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0KK2luZGV4IDdhOTgyOGQuLjM0NTVlNzUgMTAwNjQ0CistLS0gYS9zcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0KK0BAIC0zNiwyOCArMzYsNDMgQEAgQU1fTERGTEFHUyA9IFwKKyAJJChFR0xfTElCUykgXAorIAktbG0KKyAKKytub2luc3RfUFJPR1JBTVMgPQorKworIGlmIEhBVkVfRUdMCisgaWYgSEFWRV9HTEVTVjEKKy1ub2luc3RfUFJPR1JBTVMgPSBcCistCWJpbmR0ZXggXAorLQljbGVhciBcCisrbm9pbnN0X1BST0dSQU1TICs9IFwKKyAJZHJhd3RleF9zY3JlZW4gXAorKwlnZWFyc19zY3JlZW4gXAorKwl0b3J1c19zY3JlZW4gXAorKwl0cmlfc2NyZWVuCisrCisrZHJhd3RleF9zY3JlZW5fU09VUkNFUyA9IGRyYXd0ZXguYworK2dlYXJzX3NjcmVlbl9TT1VSQ0VTID0gZ2VhcnMuYworK3RvcnVzX3NjcmVlbl9TT1VSQ0VTID0gdG9ydXMuYworK3RyaV9zY3JlZW5fU09VUkNFUyA9IHRyaS5jCisrCisrZHJhd3RleF9zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKytnZWFyc19zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKyt0b3J1c19zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKyt0cmlfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCisrCisraWYgSEFWRV9YMTEKKytub2luc3RfUFJPR1JBTVMgKz0gXAorKwljbGVhcgorKworK2Jpbl9QUk9HUkFNUyA9IFwKKysJYmluZHRleCBcCisgCWRyYXd0ZXhfeDExIFwKKyAJZWdsZmJkZXYgXAorIAllczFfaW5mbyBcCistCWdlYXJzX3NjcmVlbiBcCisgCWdlYXJzX3gxMSBcCisgCW1zYWEgXAorIAlwYnVmZmVyXAorIAlyZW5kZXJfdGV4IFwKKyAJdGV4dHVyZV9mcm9tX3BpeG1hcCBcCistCXRvcnVzX3NjcmVlbiBcCisgCXRvcnVzX3gxMSBcCistCXRyaV9zY3JlZW4gXAorIAl0cmlfeDExIFwKKyAJdHdvX3dpbgorLWVuZGlmCistZW5kaWYKKyAKKyBiaW5kdGV4X0xEQUREID0gJChYMTFfTElCUykKKyBlczFfaW5mb19MREFERCA9ICQoWDExX0xJQlMpCitAQCAtNzEsMjIgKzg2LDE1IEBAIHR3b193aW5fTERBREQgPSAkKFgxMV9MSUJTKQorIGNsZWFyX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfeDExLmxhICQoRUdMX0xJQlMpICQoWDExX0xJQlMpCisgY2xlYXJfTERGTEFHUyA9CisgCistZHJhd3RleF9zY3JlZW5fU09VUkNFUyA9IGRyYXd0ZXguYworLWdlYXJzX3NjcmVlbl9TT1VSQ0VTID0gZ2VhcnMuYworLXRvcnVzX3NjcmVlbl9TT1VSQ0VTID0gdG9ydXMuYworLXRyaV9zY3JlZW5fU09VUkNFUyA9IHRyaS5jCistCisgZHJhd3RleF94MTFfU09VUkNFUyA9IGRyYXd0ZXguYworIGdlYXJzX3gxMV9TT1VSQ0VTID0gZ2VhcnMuYworIHRvcnVzX3gxMV9TT1VSQ0VTID0gdG9ydXMuYworIHRyaV94MTFfU09VUkNFUyA9IHRyaS5jCisgCistZHJhd3RleF9zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKy1nZWFyc19zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKy10b3J1c19zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKy10cmlfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCistCisgZHJhd3RleF94MTFfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF94MTEubGEKKyBnZWFyc194MTFfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF94MTEubGEKKyB0b3J1c194MTFfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF94MTEubGEKKyB0cmlfeDExX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfeDExLmxhCisrZW5kaWYKKytlbmRpZgorK2VuZGlmCitkaWZmIC0tZ2l0IGEvc3JjL2VnbC9vcGVuZ2xlczIvTWFrZWZpbGUuYW0gYi9zcmMvZWdsL29wZW5nbGVzMi9NYWtlZmlsZS5hbQoraW5kZXggNDFjMWI4MC4uNzRhZjQ2MCAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvb3BlbmdsZXMyL01ha2VmaWxlLmFtCisrKysgYi9zcmMvZWdsL29wZW5nbGVzMi9NYWtlZmlsZS5hbQorQEAgLTM2LDI2ICszNiwyOSBAQCBBTV9MREZMQUdTID0gXAorIGlmIEhBVkVfRUdMCisgaWYgSEFWRV9HTEVTVjIKKyBiaW5fUFJPR1JBTVMgPSBcCistCWVzMl9pbmZvIFwKKy0JZXMyZ2VhcnNfc2NyZWVuIFwKKy0JZXMyZ2VhcnNfeDExIFwKKy0JZXMydHJpCisrCWVzMmdlYXJzX3NjcmVlbgorKworK2VzMmdlYXJzX3NjcmVlbl9TT1VSQ0VTID0gZXMyZ2VhcnMuYworK2VzMmdlYXJzX3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQorKworIGlmIEhBVkVfV0FZTEFORAorIGJpbl9QUk9HUkFNUyArPSBlczJnZWFyc193YXlsYW5kCistZW5kaWYKKy1lbmRpZgorLWVuZGlmCisgCistZXMyX2luZm9fTERBREQgPSAkKFgxMV9MSUJTKQorLWVzMnRyaV9MREFERCA9ICQoWDExX0xJQlMpCisrZXMyZ2VhcnNfd2F5bGFuZF9TT1VSQ0VTID0gZXMyZ2VhcnMuYworK2VzMmdlYXJzX3dheWxhbmRfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF93YXlsYW5kLmxhCisrZW5kaWYKKyAKKy1lczJnZWFyc19zY3JlZW5fU09VUkNFUyA9IGVzMmdlYXJzLmMKKytpZiBIQVZFX1gxMQorK2Jpbl9QUk9HUkFNUyArPSBcCisrCWVzMnRyaSBcCisrCWVzMl9pbmZvIFwKKysJZXMyZ2VhcnNfeDExCisgCisrZXMyX2luZm9fTERBREQgPSAkKFgxMV9MSUJTKQorIGVzMmdlYXJzX3gxMV9TT1VSQ0VTID0gZXMyZ2VhcnMuYworLQorLWVzMmdlYXJzX3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQorLQorIGVzMmdlYXJzX3gxMV9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3gxMS5sYQorK2VzMnRyaV9MREFERCA9ICQoWDExX0xJQlMpCisrZW5kaWYKKytlbmRpZgorK2VuZGlmCisgCistZXMyZ2VhcnNfd2F5bGFuZF9TT1VSQ0VTID0gZXMyZ2VhcnMuYworLWVzMmdlYXJzX3dheWxhbmRfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF93YXlsYW5kLmxhCistLSAKKzIuMC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA0LVVzZS1ERU1PU19EQVRBX0RJUi10by1sb2NhdGUtZGF0YS1maWxlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA0LVVzZS1ERU1PU19EQVRBX0RJUi10by1sb2NhdGUtZGF0YS1maWxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzdiOTdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDQtVXNlLURFTU9TX0RBVEFfRElSLXRvLWxvY2F0ZS1kYXRhLWZpbGVzLnBhdGNoCkBAIC0wLDAgKzEsMjM0IEBACitGcm9tIDVlMTAxMDhkNzZhNTlhYmFjMjFjN2U1NDBiY2ZkMmRkYWNjY2EyY2IgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEcmV3IE1vc2VsZXkgPGRyZXdfbW9zZWxleUBtZW50b3IuY29tPgorRGF0ZTogRnJpLCA5IE1heSAyMDE0IDExOjUwOjI0IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0ggNC85XSBVc2UgREVNT1NfREFUQV9ESVIgdG8gbG9jYXRlIGRhdGEgZmlsZXMKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NDk2XQorU2lnbmVkLW9mZi1ieTogRHJldyBNb3NlbGV5IDxkcmV3X21vc2VsZXlAbWVudG9yLmNvbT4KKy0tLQorIHNyYy9nbHNsL2Jlemllci5jICAgICAgICAgICB8ICAyICstCisgc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LmMgIHwgIDQgKystLQorIHNyYy9nbHNsL2JyaWNrLmMgICAgICAgICAgICB8ICA0ICsrLS0KKyBzcmMvZ2xzbC9idW1wLmMgICAgICAgICAgICAgfCAgNiArKystLS0KKyBzcmMvZ2xzbC9jb252b2x1dGlvbnMuYyAgICAgfCAgMiArLQorIHNyYy9nbHNsL21hbmRlbGJyb3QuYyAgICAgICB8ICA0ICsrLS0KKyBzcmMvZ2xzbC9tdWx0aXRleC5jICAgICAgICAgfCAgNCArKy0tCisgc3JjL2dsc2wvc2ltcGxleC1ub2lzZS5jICAgIHwgIDIgKy0KKyBzcmMvZ2xzbC9za2lubmluZy5jICAgICAgICAgfCAgNCArKy0tCisgc3JjL2dsc2wvdGV4ZGVtbzEuYyAgICAgICAgIHwgIDggKysrKy0tLS0KKyBzcmMvZ2xzbC90b3liYWxsLmMgICAgICAgICAgfCAgNCArKy0tCisgc3JjL29ianZpZXdlci9vYmp2aWV3LmMgICAgIHwgMTIgKysrKysrLS0tLS0tCisgc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZS5jIHwgIDggKysrKy0tLS0KKyAxMyBmaWxlcyBjaGFuZ2VkLCAzMiBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9nbHNsL2Jlemllci5jIGIvc3JjL2dsc2wvYmV6aWVyLmMKK2luZGV4IDBiNTZiYzEuLmUwMTYwM2QgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC9iZXppZXIuYworKysrIGIvc3JjL2dsc2wvYmV6aWVyLmMKK0BAIC0xMyw3ICsxMyw3IEBACisgI2luY2x1ZGUgImdsdXRfd3JhcC5oIgorICNpbmNsdWRlICJzaGFkZXJ1dGlsLmgiCisgCistc3RhdGljIGNvbnN0IGNoYXIgKmZpbGVuYW1lID0gImJlemllci5nZW9tIjsKKytzdGF0aWMgY29uc3QgY2hhciAqZmlsZW5hbWUgPSBERU1PU19EQVRBX0RJUiAiYmV6aWVyLmdlb20iOworIAorIHN0YXRpYyBHTHVpbnQgZnJhZ1NoYWRlcjsKKyBzdGF0aWMgR0x1aW50IHZlcnRTaGFkZXI7CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LmMgYi9zcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QuYworaW5kZXggZTNiZjI0ZC4uNzY2MmIxZiAxMDA2NDQKKy0tLSBhL3NyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC5jCisrKysgYi9zcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QuYworQEAgLTYzLDggKzYzLDggQEAgaW5pdF9vcGVuZ2wgKHZvaWQpCisgICAgICBleGl0KDEpOworICAgfSAgICAgCisgCistICB2c2hhZF9pZCA9IENvbXBpbGVTaGFkZXJGaWxlIChHTF9WRVJURVhfU0hBREVSLCAiYmxpbmtpbmctdGVhcG90LnZlcnQiKTsKKy0gIGZzaGFkX2lkID0gQ29tcGlsZVNoYWRlckZpbGUgKEdMX0ZSQUdNRU5UX1NIQURFUiwgImJsaW5raW5nLXRlYXBvdC5mcmFnIik7CisrICB2c2hhZF9pZCA9IENvbXBpbGVTaGFkZXJGaWxlIChHTF9WRVJURVhfU0hBREVSLCBERU1PU19EQVRBX0RJUiAiYmxpbmtpbmctdGVhcG90LnZlcnQiKTsKKysgIGZzaGFkX2lkID0gQ29tcGlsZVNoYWRlckZpbGUgKEdMX0ZSQUdNRU5UX1NIQURFUiwgREVNT1NfREFUQV9ESVIgImJsaW5raW5nLXRlYXBvdC5mcmFnIik7CisgICBwcm9nX2lkID0gTGlua1NoYWRlcnMgKHZzaGFkX2lkLCBmc2hhZF9pZCk7CisgCisgICBVc2VQcm9ncmFtIChwcm9nX2lkKTsKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9icmljay5jIGIvc3JjL2dsc2wvYnJpY2suYworaW5kZXggMzAyMTg1Ni4uZmU1ZjE5MCAxMDA2NDQKKy0tLSBhL3NyYy9nbHNsL2JyaWNrLmMKKysrKyBiL3NyYy9nbHNsL2JyaWNrLmMKK0BAIC0xNCw4ICsxNCw4IEBACisgI2luY2x1ZGUgInNoYWRlcnV0aWwuaCIKKyAKKyAKKy1zdGF0aWMgY2hhciAqRnJhZ1Byb2dGaWxlID0gIkNIMDYtYnJpY2suZnJhZyI7Cistc3RhdGljIGNoYXIgKlZlcnRQcm9nRmlsZSA9ICJDSDA2LWJyaWNrLnZlcnQiOworK3N0YXRpYyBjaGFyICpGcmFnUHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAiQ0gwNi1icmljay5mcmFnIjsKKytzdGF0aWMgY2hhciAqVmVydFByb2dGaWxlID0gREVNT1NfREFUQV9ESVIgIkNIMDYtYnJpY2sudmVydCI7CisgCisgLyogcHJvZ3JhbS9zaGFkZXIgb2JqZWN0cyAqLworIHN0YXRpYyBHTHVpbnQgZnJhZ1NoYWRlcjsKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9idW1wLmMgYi9zcmMvZ2xzbC9idW1wLmMKK2luZGV4IDU5ZjYyY2QuLjNhMWIyMGEgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC9idW1wLmMKKysrKyBiL3NyYy9nbHNsL2J1bXAuYworQEAgLTE1LDkgKzE1LDkgQEAKKyAjaW5jbHVkZSAicmVhZHRleC5oIgorIAorIAorLXN0YXRpYyBjaGFyICpGcmFnUHJvZ0ZpbGUgPSAiQ0gxMS1idW1wbWFwLmZyYWciOworLXN0YXRpYyBjaGFyICpGcmFnVGV4UHJvZ0ZpbGUgPSAiQ0gxMS1idW1wbWFwdGV4LmZyYWciOworLXN0YXRpYyBjaGFyICpWZXJ0UHJvZ0ZpbGUgPSAiQ0gxMS1idW1wbWFwLnZlcnQiOworK3N0YXRpYyBjaGFyICpGcmFnUHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAiQ0gxMS1idW1wbWFwLmZyYWciOworK3N0YXRpYyBjaGFyICpGcmFnVGV4UHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAiQ0gxMS1idW1wbWFwdGV4LmZyYWciOworK3N0YXRpYyBjaGFyICpWZXJ0UHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAiQ0gxMS1idW1wbWFwLnZlcnQiOworIHN0YXRpYyBjaGFyICpUZXh0dXJlRmlsZSA9IERFTU9TX0RBVEFfRElSICJ0aWxlLnJnYiI7CisgCisgLyogcHJvZ3JhbS9zaGFkZXIgb2JqZWN0cyAqLworZGlmZiAtLWdpdCBhL3NyYy9nbHNsL2NvbnZvbHV0aW9ucy5jIGIvc3JjL2dsc2wvY29udm9sdXRpb25zLmMKK2luZGV4IGExMjBjZmUuLjkzMTJmMDAgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC9jb252b2x1dGlvbnMuYworKysrIGIvc3JjL2dsc2wvY29udm9sdXRpb25zLmMKK0BAIC0zNDAsNyArMzQwLDcgQEAgc3RhdGljIHZvaWQgaW5pdCh2b2lkKQorIAorICAgIG1lbnVJbml0KCk7CisgICAgcmVhZFRleHR1cmUodGV4dHVyZUxvY2F0aW9uKTsKKy0gICBjcmVhdGVQcm9ncmFtKCJjb252b2x1dGlvbi52ZXJ0IiwgImNvbnZvbHV0aW9uLmZyYWciKTsKKysgICBjcmVhdGVQcm9ncmFtKERFTU9TX0RBVEFfRElSICJjb252b2x1dGlvbi52ZXJ0IiwgREVNT1NfREFUQV9ESVIgImNvbnZvbHV0aW9uLmZyYWciKTsKKyAKKyAgICBnbEVuYWJsZShHTF9URVhUVVJFXzJEKTsKKyAgICBnbENsZWFyQ29sb3IoMS4wLCAxLjAsIDEuMCwgMS4wKTsKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9tYW5kZWxicm90LmMgYi9zcmMvZ2xzbC9tYW5kZWxicm90LmMKK2luZGV4IDMxZWRlMWQuLmFiMzRhMGYgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC9tYW5kZWxicm90LmMKKysrKyBiL3NyYy9nbHNsL21hbmRlbGJyb3QuYworQEAgLTE0LDggKzE0LDggQEAKKyAjaW5jbHVkZSAic2hhZGVydXRpbC5oIgorIAorIAorLXN0YXRpYyBjaGFyICpGcmFnUHJvZ0ZpbGUgPSAiQ0gxOC1tYW5kZWwuZnJhZyI7Cistc3RhdGljIGNoYXIgKlZlcnRQcm9nRmlsZSA9ICJDSDE4LW1hbmRlbC52ZXJ0IjsKKytzdGF0aWMgY2hhciAqRnJhZ1Byb2dGaWxlID0gREVNT1NfREFUQV9ESVIgIkNIMTgtbWFuZGVsLmZyYWciOworK3N0YXRpYyBjaGFyICpWZXJ0UHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAiQ0gxOC1tYW5kZWwudmVydCI7CisgCisgLyogcHJvZ3JhbS9zaGFkZXIgb2JqZWN0cyAqLworIHN0YXRpYyBHTHVpbnQgZnJhZ1NoYWRlcjsKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9tdWx0aXRleC5jIGIvc3JjL2dsc2wvbXVsdGl0ZXguYworaW5kZXggMjYyZWE1MC4uNTQ2YmQyNyAxMDA2NDQKKy0tLSBhL3NyYy9nbHNsL211bHRpdGV4LmMKKysrKyBiL3NyYy9nbHNsL211bHRpdGV4LmMKK0BAIC0zNSw4ICszNSw4IEBACisgCisgc3RhdGljIGNvbnN0IGNoYXIgKkRlbW8gPSAibXVsdGl0ZXgiOworIAorLXN0YXRpYyBjb25zdCBjaGFyICpWZXJ0RmlsZSA9ICJtdWx0aXRleC52ZXJ0IjsKKy1zdGF0aWMgY29uc3QgY2hhciAqRnJhZ0ZpbGUgPSAibXVsdGl0ZXguZnJhZyI7Cisrc3RhdGljIGNvbnN0IGNoYXIgKlZlcnRGaWxlID0gREVNT1NfREFUQV9ESVIgIm11bHRpdGV4LnZlcnQiOworK3N0YXRpYyBjb25zdCBjaGFyICpGcmFnRmlsZSA9IERFTU9TX0RBVEFfRElSICJtdWx0aXRleC5mcmFnIjsKKyAKKyBzdGF0aWMgY29uc3QgY2hhciAqVGV4RmlsZXNbMl0gPSAKKyAgICB7CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvc2ltcGxleC1ub2lzZS5jIGIvc3JjL2dsc2wvc2ltcGxleC1ub2lzZS5jCitpbmRleCAxM2ZkZDVkLi44ODVmMDFlIDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvc2ltcGxleC1ub2lzZS5jCisrKysgYi9zcmMvZ2xzbC9zaW1wbGV4LW5vaXNlLmMKK0BAIC0xNjksNyArMTY5LDcgQEAgU3BlY2lhbEtleShpbnQga2V5LCBpbnQgeCwgaW50IHkpCisgc3RhdGljIHZvaWQKKyBJbml0KHZvaWQpCisgeworLSAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lID0gInNpbXBsZXgtbm9pc2UuZ2xzbCI7CisrICAgY29uc3QgY2hhciAqZmlsZW5hbWUgPSBERU1PU19EQVRBX0RJUiAic2ltcGxleC1ub2lzZS5nbHNsIjsKKyAgICBjaGFyIG5vaXNlVGV4dFsxMDAwMF07CisgICAgRklMRSAqZjsKKyAgICBpbnQgbGVuOworZGlmZiAtLWdpdCBhL3NyYy9nbHNsL3NraW5uaW5nLmMgYi9zcmMvZ2xzbC9za2lubmluZy5jCitpbmRleCBiZjM4ZDc3Li41MzZkNDc1IDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvc2tpbm5pbmcuYworKysrIGIvc3JjL2dsc2wvc2tpbm5pbmcuYworQEAgLTIwLDggKzIwLDggQEAKKyAjZGVmaW5lIE1fUEkgMy4xNDE1OTI2NTM1CisgI2VuZGlmCisgCistc3RhdGljIGNoYXIgKkZyYWdQcm9nRmlsZSA9ICJza2lubmluZy5mcmFnIjsKKy1zdGF0aWMgY2hhciAqVmVydFByb2dGaWxlID0gInNraW5uaW5nLnZlcnQiOworK3N0YXRpYyBjaGFyICpGcmFnUHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAic2tpbm5pbmcuZnJhZyI7Cisrc3RhdGljIGNoYXIgKlZlcnRQcm9nRmlsZSA9IERFTU9TX0RBVEFfRElSICJza2lubmluZy52ZXJ0IjsKKyAKKyAvKiBwcm9ncmFtL3NoYWRlciBvYmplY3RzICovCisgc3RhdGljIEdMdWludCBmcmFnU2hhZGVyOworZGlmZiAtLWdpdCBhL3NyYy9nbHNsL3RleGRlbW8xLmMgYi9zcmMvZ2xzbC90ZXhkZW1vMS5jCitpbmRleCA2Y2RlMjM5Li5hMDgyMzQyIDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvdGV4ZGVtbzEuYworKysrIGIvc3JjL2dsc2wvdGV4ZGVtbzEuYworQEAgLTM1LDExICszNSwxMSBAQAorIAorIHN0YXRpYyBjb25zdCBjaGFyICpEZW1vID0gInRleGRlbW8xIjsKKyAKKy1zdGF0aWMgY29uc3QgY2hhciAqUmVmbGVjdFZlcnRGaWxlID0gInJlZmxlY3QudmVydCI7Cistc3RhdGljIGNvbnN0IGNoYXIgKkN1YmVGcmFnRmlsZSA9ICJjdWJlbWFwLmZyYWciOworK3N0YXRpYyBjb25zdCBjaGFyICpSZWZsZWN0VmVydEZpbGUgPSBERU1PU19EQVRBX0RJUiAicmVmbGVjdC52ZXJ0IjsKKytzdGF0aWMgY29uc3QgY2hhciAqQ3ViZUZyYWdGaWxlID0gREVNT1NfREFUQV9ESVIgImN1YmVtYXAuZnJhZyI7CisgCistc3RhdGljIGNvbnN0IGNoYXIgKlNpbXBsZVZlcnRGaWxlID0gInNpbXBsZS52ZXJ0IjsKKy1zdGF0aWMgY29uc3QgY2hhciAqU2ltcGxlVGV4RnJhZ0ZpbGUgPSAic2hhZG93dGV4LmZyYWciOworK3N0YXRpYyBjb25zdCBjaGFyICpTaW1wbGVWZXJ0RmlsZSA9IERFTU9TX0RBVEFfRElSICJzaW1wbGUudmVydCI7Cisrc3RhdGljIGNvbnN0IGNoYXIgKlNpbXBsZVRleEZyYWdGaWxlID0gREVNT1NfREFUQV9ESVIgInNoYWRvd3RleC5mcmFnIjsKKyAKKyBzdGF0aWMgY29uc3QgY2hhciAqR3JvdW5kSW1hZ2UgPSBERU1PU19EQVRBX0RJUiAidGlsZS5yZ2IiOworIAorZGlmZiAtLWdpdCBhL3NyYy9nbHNsL3RveWJhbGwuYyBiL3NyYy9nbHNsL3RveWJhbGwuYworaW5kZXggNWYyNzk1MS4uNGU3ZTgzMiAxMDA2NDQKKy0tLSBhL3NyYy9nbHNsL3RveWJhbGwuYworKysrIGIvc3JjL2dsc2wvdG95YmFsbC5jCitAQCAtMTQsOCArMTQsOCBAQAorICNpbmNsdWRlICJzaGFkZXJ1dGlsLmgiCisgCisgCistc3RhdGljIGNoYXIgKkZyYWdQcm9nRmlsZSA9ICJDSDExLXRveWJhbGwuZnJhZyI7Cistc3RhdGljIGNoYXIgKlZlcnRQcm9nRmlsZSA9ICJDSDExLXRveWJhbGwudmVydCI7Cisrc3RhdGljIGNoYXIgKkZyYWdQcm9nRmlsZSA9IERFTU9TX0RBVEFfRElSICJDSDExLXRveWJhbGwuZnJhZyI7Cisrc3RhdGljIGNoYXIgKlZlcnRQcm9nRmlsZSA9IERFTU9TX0RBVEFfRElSICJDSDExLXRveWJhbGwudmVydCI7CisgCisgLyogcHJvZ3JhbS9zaGFkZXIgb2JqZWN0cyAqLworIHN0YXRpYyBHTHVpbnQgZnJhZ1NoYWRlcjsKK2RpZmYgLS1naXQgYS9zcmMvb2Jqdmlld2VyL29ianZpZXcuYyBiL3NyYy9vYmp2aWV3ZXIvb2Jqdmlldy5jCitpbmRleCA2ZGVmNzI2Li43OGE2YWNmIDEwMDY0NAorLS0tIGEvc3JjL29ianZpZXdlci9vYmp2aWV3LmMKKysrKyBiL3NyYy9vYmp2aWV3ZXIvb2Jqdmlldy5jCitAQCAtMTYyLDEyICsxNjIsMTIgQEAgaW5pdF9tb2RlbCh2b2lkKQorIHN0YXRpYyB2b2lkCisgaW5pdF9za3lib3godm9pZCkKKyB7CistICAgU2t5Ym94VGV4ID0gTG9hZFNreUJveEN1YmVUZXh0dXJlKCJhbHBpbmVfZWFzdC5yZ2IiLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxwaW5lX3dlc3QucmdiIiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFscGluZV91cC5yZ2IiLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxwaW5lX2Rvd24ucmdiIiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFscGluZV9zb3V0aC5yZ2IiLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxwaW5lX25vcnRoLnJnYiIpOworKyAgIFNreWJveFRleCA9IExvYWRTa3lCb3hDdWJlVGV4dHVyZShERU1PU19EQVRBX0RJUiAiYWxwaW5lX2Vhc3QucmdiIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVNT1NfREFUQV9ESVIgImFscGluZV93ZXN0LnJnYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFTU9TX0RBVEFfRElSICJhbHBpbmVfdXAucmdiIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVNT1NfREFUQV9ESVIgImFscGluZV9kb3duLnJnYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFTU9TX0RBVEFfRElSICJhbHBpbmVfc291dGgucmdiIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVNT1NfREFUQV9ESVIgImFscGluZV9ub3J0aC5yZ2IiKTsKKyAgICBnbG1TcGVjdWxhclRleHR1cmUoTW9kZWwsIFNreWJveFRleCk7CisgfQorIAorZGlmZiAtLWdpdCBhL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UuYyBiL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UuYworaW5kZXggNzQyMmI3OC4uZGJmODMzMiAxMDA2NDQKKy0tLSBhL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UuYworKysrIGIvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZS5jCitAQCAtMzMsMTAgKzMzLDEwIEBACisgI2luY2x1ZGUgImdsbWFpbi5oIgorICNpbmNsdWRlICJjb21tb24uaCIKKyAKKy1zdGF0aWMgY29uc3QgY2hhciAqVmVydEZpbGUxID0gImdsc2xzdGF0ZXNjaGFuZ2UxLnZlcnQiOworLXN0YXRpYyBjb25zdCBjaGFyICpGcmFnRmlsZTEgPSAiZ2xzbHN0YXRlc2NoYW5nZTEuZnJhZyI7Cistc3RhdGljIGNvbnN0IGNoYXIgKlZlcnRGaWxlMiA9ICJnbHNsc3RhdGVzY2hhbmdlMi52ZXJ0IjsKKy1zdGF0aWMgY29uc3QgY2hhciAqRnJhZ0ZpbGUyID0gImdsc2xzdGF0ZXNjaGFuZ2UyLmZyYWciOworK3N0YXRpYyBjb25zdCBjaGFyICpWZXJ0RmlsZTEgPSBERU1PU19EQVRBX0RJUiAiZ2xzbHN0YXRlc2NoYW5nZTEudmVydCI7Cisrc3RhdGljIGNvbnN0IGNoYXIgKkZyYWdGaWxlMSA9IERFTU9TX0RBVEFfRElSICJnbHNsc3RhdGVzY2hhbmdlMS5mcmFnIjsKKytzdGF0aWMgY29uc3QgY2hhciAqVmVydEZpbGUyID0gREVNT1NfREFUQV9ESVIgImdsc2xzdGF0ZXNjaGFuZ2UyLnZlcnQiOworK3N0YXRpYyBjb25zdCBjaGFyICpGcmFnRmlsZTIgPSBERU1PU19EQVRBX0RJUiAiZ2xzbHN0YXRlc2NoYW5nZTIuZnJhZyI7Cisgc3RhdGljIHN0cnVjdCB1bmlmb3JtX2luZm8gVW5pZm9ybXMxW10gPSB7CisgICAgeyAidGV4MSIsICAxLCBHTF9TQU1QTEVSXzJELCB7IDAsIDAsIDAsIDAgfSwgLTEgfSwKKyAgICB7ICJ0ZXgyIiwgIDEsIEdMX1NBTVBMRVJfMkQsIHsgMSwgMCwgMCwgMCB9LCAtMSB9LAorLS0gCisyLjAuMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNS1GaXgtYnVpbGQtd2hlbi1FR0xfTUVTQV9zY3JlZW5fc3VyZmFjZS1leHRlbnNpb24taXNuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDUtRml4LWJ1aWxkLXdoZW4tRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UtZXh0ZW5zaW9uLWlzbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWMyYTM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDUtRml4LWJ1aWxkLXdoZW4tRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UtZXh0ZW5zaW9uLWlzbi5wYXRjaApAQCAtMCwwICsxLDI2NyBAQAorRnJvbSA0NTMzNTNhMjIxZGU5YzY0NDc5ZjQzNzI1NjVkMmNkODU5MWIzNmNjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRnJhbmsgQmlubnMgPGZyYW5rLmJpbm5zQGltZ3RlYy5jb20+CitEYXRlOiBGcmksIDI5IEp1biAyMDEyIDExOjI2OjA0ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggNS85XSBGaXggYnVpbGQgd2hlbiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSBleHRlbnNpb24gaXNuJ3QKKyBwcmVzZW50CisKK1RoZSBFR0wgZGVtb3Mgd29uJ3QgYnVpbGQgYWdhaW5zdCBFR0wgaW1wbGVtZW50YXRpb25zIHRoYXQgZG9uJ3Qgc3VwcG9ydAordGhlIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlIGV4dGVuc2lvbi4gRml4IHRoaXMsIGluIG1vc3QgY2FzZXMsIGJ5Cit3cmFwcGluZyByZWxldmFudCBiaXRzIG9mIGNvZGUgaW4gI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLgorCitTaWduZWQtb2ZmLWJ5OiBGcmFuayBCaW5ucyA8ZnJhbmsuYmlubnNAaW1ndGVjLmNvbT4KKworQXBwbGllZCBhbmQgZml4ZWQgdXAgaW4gWW9jdG8gYnkuLi4KKworSW50ZWdyYXRlZC1ieTogVG9tIFphbnVzc2kgPHRvbS56YW51c3NpQGxpbnV4LmludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBzcmMvZWdsL2VnbHV0L2VnbHV0LmMgICAgICAgIHwgIDkgKysrKysrKy0tCisgc3JjL2VnbC9lZ2x1dC9lZ2x1dF9zY3JlZW4uYyB8IDE0ICsrKysrKysrKysrKysrCisgc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYyAgICAgICB8ICAyICsrCisgc3JjL2VnbC9vcGVuZ2wvZGVtbzIuYyAgICAgICB8ICA3ICsrKysrKy0KKyBzcmMvZWdsL29wZW5nbC9kZW1vMy5jICAgICAgIHwgIDcgKysrKysrLQorIDUgZmlsZXMgY2hhbmdlZCwgMzUgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9lZ2wvZWdsdXQvZWdsdXQuYyBiL3NyYy9lZ2wvZWdsdXQvZWdsdXQuYworaW5kZXggMmVlNmYxNS4uZjZhMmFkNCAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvZWdsdXQvZWdsdXQuYworKysrIGIvc3JjL2VnbC9lZ2x1dC9lZ2x1dC5jCitAQCAtNzYsOCArNzYsOSBAQCBfZWdsdXROb3codm9pZCkKKyBzdGF0aWMgdm9pZAorIF9lZ2x1dERlc3Ryb3lXaW5kb3coc3RydWN0IGVnbHV0X3dpbmRvdyAqd2luKQorIHsKKy0gICBpZiAoX2VnbHV0LT5zdXJmYWNlX3R5cGUgIT0gRUdMX1BCVUZGRVJfQklUICYmCistICAgICAgIF9lZ2x1dC0+c3VyZmFjZV90eXBlICE9IEVHTF9TQ1JFRU5fQklUX01FU0EpCisrCisrICAgaWYgKF9lZ2x1dC0+c3VyZmFjZV90eXBlID09IEVHTF9XSU5ET1dfQklUIHx8CisrICAgICAgIF9lZ2x1dC0+c3VyZmFjZV90eXBlID09IEVHTF9QSVhNQVBfQklUKQorICAgICAgIGVnbERlc3Ryb3lTdXJmYWNlKF9lZ2x1dC0+ZHB5LCB3aW4tPnN1cmZhY2UpOworIAorICAgIF9lZ2x1dE5hdGl2ZUZpbmlXaW5kb3cod2luKTsKK0BAIC0xNzUsNyArMTc2LDkgQEAgX2VnbHV0Q3JlYXRlV2luZG93KGNvbnN0IGNoYXIgKnRpdGxlLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkKKyAgICAgICAgICAgICB3aW4tPmNvbmZpZywgd2luLT5uYXRpdmUudS5waXhtYXAsIE5VTEwpOworICAgICAgIGJyZWFrOworICAgIGNhc2UgRUdMX1BCVUZGRVJfQklUOgorKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorICAgIGNhc2UgRUdMX1NDUkVFTl9CSVRfTUVTQToKKysjZW5kaWYKKyAgICAgICB3aW4tPnN1cmZhY2UgPSB3aW4tPm5hdGl2ZS51LnN1cmZhY2U7CisgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKK0BAIC0yODksOCArMjkyLDEwIEBAIGVnbHV0RGVzdHJveVdpbmRvdyhpbnQgd2luKQorICAgIGlmICh3aW5kb3ctPmluZGV4ICE9IHdpbikKKyAgICAgICByZXR1cm47CisgCisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgICAgLyogWFhYIGl0IGNhdXNlcyBzb21lIGJ1ZyBpbiBzdC9lZ2wgS01TIGJhY2tlbmQgKi8KKyAgICBpZiAoIF9lZ2x1dC0+c3VyZmFjZV90eXBlICE9IEVHTF9TQ1JFRU5fQklUX01FU0EpCisrI2VuZGlmCisgICAgICAgZWdsTWFrZUN1cnJlbnQoX2VnbHV0LT5kcHksIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOworIAorICAgIF9lZ2x1dERlc3Ryb3lXaW5kb3coX2VnbHV0LT5jdXJyZW50KTsKK2RpZmYgLS1naXQgYS9zcmMvZWdsL2VnbHV0L2VnbHV0X3NjcmVlbi5jIGIvc3JjL2VnbC9lZ2x1dC9lZ2x1dF9zY3JlZW4uYworaW5kZXggMDIxYThmMS4uMDk0YTRlMiAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvZWdsdXQvZWdsdXRfc2NyZWVuLmMKKysrKyBiL3NyYy9lZ2wvZWdsdXQvZWdsdXRfc2NyZWVuLmMKK0BAIC0zNSwyNiArMzUsMzMgQEAKKyAKKyAjZGVmaW5lIE1BWF9NT0RFUyAxMDAKKyAKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyBzdGF0aWMgRUdMU2NyZWVuTUVTQSBrbXNfc2NyZWVuOworIHN0YXRpYyBFR0xNb2RlTUVTQSBrbXNfbW9kZTsKKyBzdGF0aWMgRUdMaW50IGttc193aWR0aCwga21zX2hlaWdodDsKKysjZW5kaWYKKyAKKyB2b2lkCisgX2VnbHV0TmF0aXZlSW5pdERpc3BsYXkodm9pZCkKKyB7CisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgICAgX2VnbHV0LT5uYXRpdmVfZHB5ID0gRUdMX0RFRkFVTFRfRElTUExBWTsKKyAgICBfZWdsdXQtPnN1cmZhY2VfdHlwZSA9IEVHTF9TQ1JFRU5fQklUX01FU0E7CisrI2VuZGlmCisgfQorIAorIHZvaWQKKyBfZWdsdXROYXRpdmVGaW5pRGlzcGxheSh2b2lkKQorIHsKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyAgICBrbXNfc2NyZWVuID0gMDsKKyAgICBrbXNfbW9kZSA9IDA7CisgICAga21zX3dpZHRoID0gMDsKKyAgICBrbXNfaGVpZ2h0ID0gMDsKKysjZW5kaWYKKyB9CisgCisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgc3RhdGljIHZvaWQKKyBpbml0X2ttcyh2b2lkKQorIHsKK0BAIC05NCwxOSArMTAxLDIzIEBAIGluaXRfa21zKHZvaWQpCisgICAga21zX3dpZHRoID0gd2lkdGg7CisgICAga21zX2hlaWdodCA9IGhlaWdodDsKKyB9CisrI2VuZGlmCisgCisgdm9pZAorIF9lZ2x1dE5hdGl2ZUluaXRXaW5kb3coc3RydWN0IGVnbHV0X3dpbmRvdyAqd2luLCBjb25zdCBjaGFyICp0aXRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKQorIHsKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyAgICBFR0xpbnQgc3VyZl9hdHRyaWJzWzE2XTsKKyAgICBFR0xpbnQgaTsKKysjZW5kaWYKKyAgICBjb25zdCBjaGFyICpleHRzOworIAorICAgIGV4dHMgPSBlZ2xRdWVyeVN0cmluZyhfZWdsdXQtPmRweSwgRUdMX0VYVEVOU0lPTlMpOworICAgIGlmICghZXh0cyB8fCAhc3Ryc3RyKGV4dHMsICJFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSIpKQorICAgICAgIF9lZ2x1dEZhdGFsKCJFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKKyAKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyAgICBpbml0X2ttcygpOworIAorICAgIGkgPSAwOworQEAgLTEyOCwxNCArMTM5LDE3IEBAIF9lZ2x1dE5hdGl2ZUluaXRXaW5kb3coc3RydWN0IGVnbHV0X3dpbmRvdyAqd2luLCBjb25zdCBjaGFyICp0aXRsZSwKKyAKKyAgICB3aW4tPm5hdGl2ZS53aWR0aCA9IGttc193aWR0aDsKKyAgICB3aW4tPm5hdGl2ZS5oZWlnaHQgPSBrbXNfaGVpZ2h0OworKyNlbmRpZgorIH0KKyAKKyB2b2lkCisgX2VnbHV0TmF0aXZlRmluaVdpbmRvdyhzdHJ1Y3QgZWdsdXRfd2luZG93ICp3aW4pCisgeworKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorICAgIGVnbFNob3dTY3JlZW5TdXJmYWNlTUVTQShfZWdsdXQtPmRweSwKKyAgICAgICAgICBrbXNfc2NyZWVuLCBFR0xfTk9fU1VSRkFDRSwgMCk7CisgICAgZWdsRGVzdHJveVN1cmZhY2UoX2VnbHV0LT5kcHksIHdpbi0+bmF0aXZlLnUuc3VyZmFjZSk7CisrI2VuZGlmCisgfQorIAorIHZvaWQKK2RpZmYgLS1naXQgYS9zcmMvZWdsL29wZW5nbC9kZW1vMS5jIGIvc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYworaW5kZXggZDg5MjczNC4uM2EzNTY0YyAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvb3BlbmdsL2RlbW8xLmMKKysrKyBiL3NyYy9lZ2wvb3BlbmdsL2RlbW8xLmMKK0BAIC0xOCw2ICsxOCw3IEBACisgc3RhdGljIHZvaWQKKyBUZXN0U2NyZWVucyhFR0xEaXNwbGF5IGRweSkKKyB7CisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgI2RlZmluZSBNQVggOAorICAgIEVHTFNjcmVlbk1FU0Egc2NyZWVuc1tNQVhdOworICAgIEVHTGludCBudW1TY3JlZW5zOworQEAgLTI4LDYgKzI5LDcgQEAgVGVzdFNjcmVlbnMoRUdMRGlzcGxheSBkcHkpCisgICAgZm9yIChpID0gMDsgaSA8IG51bVNjcmVlbnM7IGkrKykgeworICAgICAgIHByaW50ZigiIFNjcmVlbiAlZCBoYW5kbGU6ICVkXG4iLCBpLCAoaW50KSBzY3JlZW5zW2ldKTsKKyAgICB9CisrI2VuZGlmCisgfQorIAorIC8qKgorZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbmdsL2RlbW8yLmMgYi9zcmMvZWdsL29wZW5nbC9kZW1vMi5jCitpbmRleCA1MDViNDc0Li5iZmVmNTllIDEwMDY0NAorLS0tIGEvc3JjL2VnbC9vcGVuZ2wvZGVtbzIuYworKysrIGIvc3JjL2VnbC9vcGVuZ2wvZGVtbzIuYworQEAgLTE2LDYgKzE2LDcgQEAKKyAKKyAvKiNkZWZpbmUgRlJPTlRCVUZGRVIqLworIAorKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorIHN0YXRpYyB2b2lkIF9zdWJzZXRfUmVjdGYoR0xmbG9hdCB4MSwgR0xmbG9hdCB5MSwgR0xmbG9hdCB4MiwgR0xmbG9hdCB5MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgciwgR0xmbG9hdCBnLCBHTGZsb2F0IGIpCisgeworQEAgLTk1LDEyICs5NiwxMyBAQCBUZXN0U2NyZWVucyhFR0xEaXNwbGF5IGRweSkKKyAgICAgICBwcmludGYoIiBTY3JlZW4gJWQgaGFuZGxlOiAlZFxuIiwgaSwgKGludCkgc2NyZWVuc1tpXSk7CisgICAgfQorIH0KKy0KKysjZW5kaWYKKyAKKyBpbnQKKyBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgeworICAgIGludCBtYWosIG1pbjsKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyAgICBFR0xDb250ZXh0IGN0eDsKKyAgICBFR0xTdXJmYWNlIHBidWZmZXIsIHNjcmVlbl9zdXJmOworICAgIEVHTENvbmZpZyBjb25maWdzWzEwXTsKK0BAIC0xMTUsNiArMTE3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgIEVHTE1vZGVNRVNBIG1vZGU7CisgICAgRUdMU2NyZWVuTUVTQSBzY3JlZW47CisgICAgRUdMaW50IGNvdW50OworKyNlbmRpZgorIAorICAgIEVHTERpc3BsYXkgZCA9IGVnbEdldERpc3BsYXkoRUdMX0RFRkFVTFRfRElTUExBWSk7CisgICAgYXNzZXJ0KGQpOworQEAgLTEzMiw2ICsxMzUsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgICAgZXhpdCgxKTsKKyAgICB9CisgCisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgICAgZWdsR2V0Q29uZmlncyhkLCBjb25maWdzLCAxMCwgJm51bUNvbmZpZ3MpOworICAgIHByaW50ZigiR290ICVkIEVHTCBjb25maWdzOlxuIiwgbnVtQ29uZmlncyk7CisgICAgZm9yIChpID0gMDsgaSA8IG51bUNvbmZpZ3M7IGkrKykgeworQEAgLTIxMSw2ICsyMTUsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgZWdsRGVzdHJveVN1cmZhY2UoZCwgcGJ1ZmZlcik7CisgICAgZWdsRGVzdHJveUNvbnRleHQoZCwgY3R4KTsKKyAgICBlZ2xUZXJtaW5hdGUoZCk7CisrI2VuZGlmCisgCisgICAgcmV0dXJuIDA7CisgfQorZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbmdsL2RlbW8zLmMgYi9zcmMvZWdsL29wZW5nbC9kZW1vMy5jCitpbmRleCBmODRjYTIzLi4zMWI1ZDhiIDEwMDY0NAorLS0tIGEvc3JjL2VnbC9vcGVuZ2wvZGVtbzMuYworKysrIGIvc3JjL2VnbC9vcGVuZ2wvZGVtbzMuYworQEAgLTQ2LDcgKzQ2LDcgQEAgR0x1Ynl0ZSBPcGVuR0xfYml0c1tdID0geworICAgIDB4M2UsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MGMsIDB4MDAsIAorIH07CisgCistCisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgc3RhdGljIHZvaWQgSW5pdCh2b2lkKQorIHsKKyAKK0BAIC01NTEsMTEgKzU1MSwxMyBAQCB3cml0ZV9wcG0oY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IEdMdWJ5dGUgKmJ1ZmZlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorICAgICAgIGZjbG9zZShmKTsKKyAgICB9CisgfQorKyNlbmRpZgorIAorIGludAorIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB7CisgICAgaW50IG1haiwgbWluOworKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorICAgIEVHTENvbnRleHQgY3R4OworICAgIEVHTFN1cmZhY2Ugc2NyZWVuX3N1cmY7CisgICAgRUdMQ29uZmlnIGNvbmZpZ3NbMTBdOworQEAgLTU2Niw2ICs1NjgsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgY29uc3QgR0x1Ynl0ZSAqYml0bWFwOworICAgIEVHTGludCBzY3JlZW5BdHRyaWJzWzMyXTsKKyAgICBFR0xpbnQgaTsKKysjZW5kaWYKKyAKKyAgICBFR0xEaXNwbGF5IGQgPSBlZ2xHZXREaXNwbGF5KEVHTF9ERUZBVUxUX0RJU1BMQVkpOworICAgIGFzc2VydChkKTsKK0BAIC01ODMsNiArNTg2LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgICAgIGV4aXQoMSk7CisgICAgfQorIAorKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorICAgIGVnbEdldENvbmZpZ3MoZCwgY29uZmlncywgMTAsICZudW1Db25maWdzKTsKKyAgICBlZ2xHZXRTY3JlZW5zTUVTQShkLCAmc2NyZWVuLCAxLCAmY291bnQpOworICAgIGVnbEdldE1vZGVzTUVTQShkLCBzY3JlZW4sICZtb2RlLCAxLCAmY291bnQpOworQEAgLTY0Miw2ICs2NDYsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgZWdsRGVzdHJveVN1cmZhY2UoZCwgc2NyZWVuX3N1cmYpOworICAgIGVnbERlc3Ryb3lDb250ZXh0KGQsIGN0eCk7CisgICAgZWdsVGVybWluYXRlKGQpOworKyNlbmRpZgorIAorICAgIHJldHVybiAwOworIH0KKy0tIAorMi4wLjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDYtUXVlcnktZGlzcGxheS1mb3ItRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UtZXh0ZW5zaW9uLS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA2LVF1ZXJ5LWRpc3BsYXktZm9yLUVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLWV4dGVuc2lvbi0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJlMDgwNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA2LVF1ZXJ5LWRpc3BsYXktZm9yLUVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLWV4dGVuc2lvbi0ucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbSA2YTE5ZGJhMWQyNzU1NzljNzNlNzc2M2IwNTU0NDEwZmY0ZTFlNjUwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRnJhbmsgQmlubnMgPGZyYW5rLmJpbm5zQGltZ3RlYy5jb20+CitEYXRlOiBGcmksIDI5IEp1biAyMDEyIDEyOjAwOjI2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggNi85XSBRdWVyeSBkaXNwbGF5IGZvciBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSBleHRlbnNpb24KKyBiZWZvcmUgdXNpbmcgaXQKKworVGhpcyBjb2RlIG1ha2VzIGhlYXZ5IHVzZSBvZiB0aGUgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UgZXh0ZW5zaW9uIHNvCitjaGVjayB0aGUgZGlzcGxheSB0byBkZXRlcm1pbmUgaWYgaXQncyBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgRUdMCitpbXBsZW1lbnRhdGlvbi4gSWYgaXQgZG9lc24ndCB0aGVuIGJhaWwuCisKK1NpZ25lZC1vZmYtYnk6IEZyYW5rIEJpbm5zIDxmcmFuay5iaW5uc0BpbWd0ZWMuY29tPgorCitBcHBsaWVkIGFuZCBmaXhlZCB1cCBpbiBZb2N0byBieS4uLgorCitJbnRlZ3JhdGVkLWJ5OiBUb20gWmFudXNzaSA8dG9tLnphbnVzc2lAbGludXguaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIHNyYy9lZ2wvb3BlbmdsL2RlbW8xLmMgfCA2ICsrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbmdsL2RlbW8xLmMgYi9zcmMvZWdsL29wZW5nbC9kZW1vMS5jCitpbmRleCAzYTM1NjRjLi4wNmUyMTM4IDEwMDY0NAorLS0tIGEvc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYworKysrIGIvc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYworQEAgLTExMCw2ICsxMTAsMTIgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgIHByaW50ZigiRUdMIHZlcnNpb24gPSAlZC4lZFxuIiwgbWFqLCBtaW4pOworICAgIHByaW50ZigiRUdMX1ZFTkRPUiA9ICVzXG4iLCBlZ2xRdWVyeVN0cmluZyhkLCBFR0xfVkVORE9SKSk7CisgCisrICAgaWYgKCFzdHJzdHIoZWdsUXVlcnlTdHJpbmcoZCwgRUdMX0VYVEVOU0lPTlMpLAorKyAgICAgICAgICAgICAgICJFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSIpKSB7CisrICAgICAgcHJpbnRmKCJFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKKysgICAgICBleGl0KDEpOworKyAgIH0KKysKKyAgICBlZ2xHZXRDb25maWdzKGQsIE5VTEwsIDAsICZudW1Db25maWdzKTsKKyAgICBjb25maWdzID0gbWFsbG9jKHNpemVvZigqY29uZmlncykgKm51bUNvbmZpZ3MpOworICAgIGVnbEdldENvbmZpZ3MoZCwgY29uZmlncywgbnVtQ29uZmlncywgJm51bUNvbmZpZ3MpOworLS0gCisyLjAuMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNy1JbnN0YWxsLWZldy1tb3JlLXRlc3QtcHJvZ3JhbXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNy1JbnN0YWxsLWZldy1tb3JlLXRlc3QtcHJvZ3JhbXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlkMmZhYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA3LUluc3RhbGwtZmV3LW1vcmUtdGVzdC1wcm9ncmFtcy5wYXRjaApAQCAtMCwwICsxLDc0IEBACitGcm9tIGQ5MzBiMmRhNTdmN2M5ZWZiODBjOGNlZjhmOGFkYWQxNWJiYmMwZDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDEwIEp1bCAyMDE0IDE0OjMwOjUyICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggNy85XSBJbnN0YWxsIGZldyBtb3JlIHRlc3QgcHJvZ3JhbXMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9lZ2wvb3BlbmdsL01ha2VmaWxlLmFtICAgIHwgIDIgKy0KKyBzcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbSB8IDEwICsrKystLS0tLS0KKyBzcmMvZWdsL29wZW52Zy9NYWtlZmlsZS5hbSAgICB8ICAyICstCisgMyBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZWdsL29wZW5nbC9NYWtlZmlsZS5hbSBiL3NyYy9lZ2wvb3BlbmdsL01ha2VmaWxlLmFtCitpbmRleCAwYzcyMjhmLi44N2IyZjFhIDEwMDY0NAorLS0tIGEvc3JjL2VnbC9vcGVuZ2wvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9lZ2wvb3BlbmdsL01ha2VmaWxlLmFtCitAQCAtNTAsNyArNTAsNyBAQCBlbmRpZgorIGVuZGlmCisgCisgaWYgSEFWRV9FR0wKKy1ub2luc3RfUFJPR1JBTVMgPSBcCisrYmluX1BST0dSQU1TID0gXAorIAlkZW1vMSBcCisgCWRlbW8yIFwKKyAJZGVtbzMgXAorZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbmdsZXMxL01ha2VmaWxlLmFtIGIvc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0KK2luZGV4IDM0NTVlNzUuLjUxNmU1MTYgMTAwNjQ0CistLS0gYS9zcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0KK0BAIC0zNiwxMSArMzYsMTEgQEAgQU1fTERGTEFHUyA9IFwKKyAJJChFR0xfTElCUykgXAorIAktbG0KKyAKKy1ub2luc3RfUFJPR1JBTVMgPQorK2Jpbl9QUk9HUkFNUyA9CisgCisgaWYgSEFWRV9FR0wKKyBpZiBIQVZFX0dMRVNWMQorLW5vaW5zdF9QUk9HUkFNUyArPSBcCisrYmluX1BST0dSQU1TICs9IFwKKyAJZHJhd3RleF9zY3JlZW4gXAorIAlnZWFyc19zY3JlZW4gXAorIAl0b3J1c19zY3JlZW4gXAorQEAgLTU3LDEwICs1Nyw4IEBAIHRvcnVzX3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQorIHRyaV9zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKyAKKyBpZiBIQVZFX1gxMQorLW5vaW5zdF9QUk9HUkFNUyArPSBcCistCWNsZWFyCistCistYmluX1BST0dSQU1TID0gXAorK2Jpbl9QUk9HUkFNUyArPSBcCisrCWNsZWFyIFwKKyAJYmluZHRleCBcCisgCWRyYXd0ZXhfeDExIFwKKyAJZWdsZmJkZXYgXAorZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbnZnL01ha2VmaWxlLmFtIGIvc3JjL2VnbC9vcGVudmcvTWFrZWZpbGUuYW0KK2luZGV4IDczMThhNDMuLmI1NDUyMjUgMTAwNjQ0CistLS0gYS9zcmMvZWdsL29wZW52Zy9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2VnbC9vcGVudmcvTWFrZWZpbGUuYW0KK0BAIC00OSw3ICs0OSw3IEBAIGVuZGlmCisgCisgaWYgSEFWRV9FR0wKKyBpZiBIQVZFX1ZHCistbm9pbnN0X1BST0dSQU1TID0gXAorK2Jpbl9QUk9HUkFNUyA9IFwKKyAJbGlvbl9zY3JlZW4gXAorIAlzcF9zY3JlZW4gXAorIAkkKEVHTF9YMTFfREVNT1MpCistLSAKKzIuMC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA4LWdsc2wtcGVyZi1BZGQtZmV3LW1pc3NpbmctLmdsc2wtLnZlcnQtLmZyYWctZmlsZXMtdG8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwOC1nbHNsLXBlcmYtQWRkLWZldy1taXNzaW5nLS5nbHNsLS52ZXJ0LS5mcmFnLWZpbGVzLXRvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MDg1NzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwOC1nbHNsLXBlcmYtQWRkLWZldy1taXNzaW5nLS5nbHNsLS52ZXJ0LS5mcmFnLWZpbGVzLXRvLnBhdGNoCkBAIC0wLDAgKzEsMTAxIEBACitGcm9tIDBiNmY5NWY5YjhlY2UyMmU5ODU2YzE1MGU0YmUyOWZkODZlYWY1NDYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDEwIEp1bCAyMDE0IDE0OjI5OjI3ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggOC85XSBnbHNsLCBwZXJmOiBBZGQgZmV3IG1pc3NpbmcgLmdsc2wsIC52ZXJ0LCAuZnJhZyBmaWxlcyB0bworIEVYVFJBX0RBVEEKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9mcGdsc2wvTWFrZWZpbGUuYW0gfCAgMiArKworIHNyYy9nbHNsL01ha2VmaWxlLmFtICAgfCAxMCArKysrKysrKy0tCisgc3JjL3BlcmYvTWFrZWZpbGUuYW0gICB8ICA2ICsrKysrKworIHNyYy92cGdsc2wvTWFrZWZpbGUuYW0gfCAgMSArCisgNCBmaWxlcyBjaGFuZ2VkLCAxNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2ZwZ2xzbC9NYWtlZmlsZS5hbSBiL3NyYy9mcGdsc2wvTWFrZWZpbGUuYW0KK2luZGV4IDQ3YzEwMzkuLmZkNDNjOTEgMTAwNjQ0CistLS0gYS9zcmMvZnBnbHNsL01ha2VmaWxlLmFtCisrKysgYi9zcmMvZnBnbHNsL01ha2VmaWxlLmFtCitAQCAtMzksMTAgKzM5LDEyIEBAIG5vaW5zdF9QUk9HUkFNUyA9IFwKKyBlbmRpZgorIAorIEVYVFJBX0RJU1QgPSBcCisrCWRlcHRoLXJlYWQuZ2xzbCBcCisgCWRvd2hpbGUyLmdsc2wgXAorIAlkb3doaWxlLmdsc2wgXAorIAlmb3JicmVhay5nbHNsIFwKKyAJZm9yLmdsc2wgXAorKwlpbmZpbml0ZS1sb29wLmdsc2wgXAorIAltb3YuZ2xzbCBcCisgCW1vdi1pbW0uZ2xzbCBcCisgCXNpbXBsZWlmLmdsc2wgXAorZGlmZiAtLWdpdCBhL3NyYy9nbHNsL01ha2VmaWxlLmFtIGIvc3JjL2dsc2wvTWFrZWZpbGUuYW0KK2luZGV4IDRmYWE4ZGIuLjA3OWEyOWQgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2dsc2wvTWFrZWZpbGUuYW0KK0BAIC0zNyw3ICszNyw3IEBAIEFNX0xERkxBR1MgPSBcCisgaWYgSEFWRV9HTFVUCisgYmluX1BST0dSQU1TID0gXAorIAlhcnJheSBcCistICAgICAgICBiZXppZXIgXAorKwliZXppZXIgXAorIAliaXRtYXAgXAorIAlicmljayBcCisgCWJ1bXAgXAorQEAgLTEyMywxMiArMTIzLDE2IEBAIEVYVFJBX0RJU1QgPSBcCisgCUNIMDYtYnJpY2sudmVydCBcCisgCUNIMTEtYnVtcG1hcC5mcmFnIFwKKyAJQ0gxMS1idW1wbWFwLnZlcnQgXAorKwlDSDExLWJ1bXBtYXB0ZXguZnJhZyBcCisgCUNIMTEtdG95YmFsbC5mcmFnIFwKKyAJQ0gxMS10b3liYWxsLnZlcnQgXAorIAlDSDE4LW1hbmRlbC5mcmFnIFwKKyAJQ0gxOC1tYW5kZWwudmVydCBcCistICAgICAgICBiZXppZXIuZ2VvbSBcCisrCWJlemllci5nZW9tIFwKKyAJYnJpY2suc2h0ZXN0IFwKKysJYmxpbmtpbmctdGVhcG90LmZyYWcgXAorKwlibGlua2luZy10ZWFwb3QudmVydCBcCisrCWNvbnZvbHV0aW9uLmZyYWcgXAorIAljb252b2x1dGlvbi52ZXJ0IFwKKyAJY3ViZW1hcC5mcmFnIFwKKyAJbWFuZGVsYnJvdC5zaHRlc3QgXAorQEAgLTEzOCw1ICsxNDIsNyBAQCBFWFRSQV9ESVNUID0gXAorIAlyZWZsZWN0LnZlcnQgXAorIAlzaGFkb3d0ZXguZnJhZyBcCisgCXNpbXBsZS52ZXJ0IFwKKysJc2ltcGxleC1ub2lzZS5nbHNsIFwKKyAJc2tpbm5pbmcuZnJhZyBcCisrCXNraW5uaW5nLnZlcnQgXAorIAl0b3liYWxsLnNodGVzdAorZGlmZiAtLWdpdCBhL3NyYy9wZXJmL01ha2VmaWxlLmFtIGIvc3JjL3BlcmYvTWFrZWZpbGUuYW0KK2luZGV4IDUzNjNjNTguLmM1Y2NhOGQgMTAwNjQ0CistLS0gYS9zcmMvcGVyZi9NYWtlZmlsZS5hbQorKysrIGIvc3JjL3BlcmYvTWFrZWZpbGUuYW0KK0BAIC01NywzICs1Nyw5IEBAIGJpbl9QUk9HUkFNUyA9IFwKKyBlbmRpZgorIAorIGdsc2xzdGF0ZXNjaGFuZ2VfTERBREQgPSBsaWJwZXJmLmxhIC4uL3V0aWwvbGlidXRpbC5sYQorKworK0VYVFJBX0RJU1QgPSBcCisrCWdsc2xzdGF0ZXNjaGFuZ2UxLmZyYWcgXAorKwlnbHNsc3RhdGVzY2hhbmdlMS52ZXJ0IFwKKysJZ2xzbHN0YXRlc2NoYW5nZTIuZnJhZyBcCisrCWdsc2xzdGF0ZXNjaGFuZ2UyLnZlcnQKK2RpZmYgLS1naXQgYS9zcmMvdnBnbHNsL01ha2VmaWxlLmFtIGIvc3JjL3ZwZ2xzbC9NYWtlZmlsZS5hbQoraW5kZXggNGE4NWVkNC4uNDhiMDhmNCAxMDA2NDQKKy0tLSBhL3NyYy92cGdsc2wvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy92cGdsc2wvTWFrZWZpbGUuYW0KK0BAIC00NCw2ICs0NCw3IEBAIEVYVFJBX0RJU1QgPSBcCisgCWZ1bmMyLmdsc2wgXAorIAlpZmVsc2UuZ2xzbCBcCisgCWlmLmdsc2wgXAorKwlpbmZpbml0ZS1sb29wLmdsc2wgXAorIAltb3YuZ2xzbCBcCisgCW5lc3RlZGlmcy5nbHNsIFwKKyAJbmVzdGVkc3dpenpsZS5nbHNsIFwKKy0tIAorMi4wLjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDktZ2xzbC1wZXJmLUluc3RhbGwtLmdsc2wtLnZlcnQtLmZyYWctZmlsZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwOS1nbHNsLXBlcmYtSW5zdGFsbC0uZ2xzbC0udmVydC0uZnJhZy1maWxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjYyZGVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDktZ2xzbC1wZXJmLUluc3RhbGwtLmdsc2wtLnZlcnQtLmZyYWctZmlsZXMucGF0Y2gKQEAgLTAsMCArMSw3MyBAQAorRnJvbSBjOGMzZGU1NDE3ZDZiNmM3ZDc1NzljNTI4YzBjYWI3MThmNGJmZGI2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorRGF0ZTogVGh1LCAxMCBKdWwgMjAxNCAxNDo0ODoxMiArMDIwMAorU3ViamVjdDogW1BBVENIIDkvOV0gZ2xzbCwgcGVyZjogSW5zdGFsbCAuZ2xzbCwgLnZlcnQsIC5mcmFnIGZpbGVzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL2ZwZ2xzbC9NYWtlZmlsZS5hbSB8IDMgKystCisgc3JjL2dsc2wvTWFrZWZpbGUuYW0gICB8IDMgKystCisgc3JjL3BlcmYvTWFrZWZpbGUuYW0gICB8IDMgKystCisgc3JjL3ZwZ2xzbC9NYWtlZmlsZS5hbSB8IDMgKystCisgNCBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZnBnbHNsL01ha2VmaWxlLmFtIGIvc3JjL2ZwZ2xzbC9NYWtlZmlsZS5hbQoraW5kZXggZmQ0M2M5MS4uMmJmNTFkZSAxMDA2NDQKKy0tLSBhL3NyYy9mcGdsc2wvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9mcGdsc2wvTWFrZWZpbGUuYW0KK0BAIC0zOCw3ICszOCw4IEBAIG5vaW5zdF9QUk9HUkFNUyA9IFwKKyAJZnAtdHJpCisgZW5kaWYKKyAKKy1FWFRSQV9ESVNUID0gXAorK2RlbW9zZGF0YWRpcj0kKGRhdGFkaXIpLyQoUEFDS0FHRSkvCisrZGlzdF9kZW1vc2RhdGFfREFUQT0gXAorIAlkZXB0aC1yZWFkLmdsc2wgXAorIAlkb3doaWxlMi5nbHNsIFwKKyAJZG93aGlsZS5nbHNsIFwKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9NYWtlZmlsZS5hbSBiL3NyYy9nbHNsL01ha2VmaWxlLmFtCitpbmRleCAwNzlhMjlkLi5mNjZlYzI5IDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9nbHNsL01ha2VmaWxlLmFtCitAQCAtMTE4LDcgKzExOCw4IEBAIHZlcnRfb3JfZnJhZ19vbmx5X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgdmVydF90ZXhfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyB2c3JheXRyYWNlX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgCistRVhUUkFfRElTVCA9IFwKKytkZW1vc2RhdGFkaXI9JChkYXRhZGlyKS8kKFBBQ0tBR0UpLworK2Rpc3RfZGVtb3NkYXRhX0RBVEE9IFwKKyAJQ0gwNi1icmljay5mcmFnIFwKKyAJQ0gwNi1icmljay52ZXJ0IFwKKyAJQ0gxMS1idW1wbWFwLmZyYWcgXAorZGlmZiAtLWdpdCBhL3NyYy9wZXJmL01ha2VmaWxlLmFtIGIvc3JjL3BlcmYvTWFrZWZpbGUuYW0KK2luZGV4IGM1Y2NhOGQuLjE0MDI1NmQgMTAwNjQ0CistLS0gYS9zcmMvcGVyZi9NYWtlZmlsZS5hbQorKysrIGIvc3JjL3BlcmYvTWFrZWZpbGUuYW0KK0BAIC01OCw3ICs1OCw4IEBAIGVuZGlmCisgCisgZ2xzbHN0YXRlc2NoYW5nZV9MREFERCA9IGxpYnBlcmYubGEgLi4vdXRpbC9saWJ1dGlsLmxhCisgCistRVhUUkFfRElTVCA9IFwKKytkZW1vc2RhdGFkaXI9JChkYXRhZGlyKS8kKFBBQ0tBR0UpLworK2Rpc3RfZGVtb3NkYXRhX0RBVEE9IFwKKyAJZ2xzbHN0YXRlc2NoYW5nZTEuZnJhZyBcCisgCWdsc2xzdGF0ZXNjaGFuZ2UxLnZlcnQgXAorIAlnbHNsc3RhdGVzY2hhbmdlMi5mcmFnIFwKK2RpZmYgLS1naXQgYS9zcmMvdnBnbHNsL01ha2VmaWxlLmFtIGIvc3JjL3ZwZ2xzbC9NYWtlZmlsZS5hbQoraW5kZXggNDhiMDhmNC4uNTUyNjg2NyAxMDA2NDQKKy0tLSBhL3NyYy92cGdsc2wvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy92cGdsc2wvTWFrZWZpbGUuYW0KK0BAIC0zOCw3ICszOCw4IEBAIG5vaW5zdF9QUk9HUkFNUyA9IFwKKyAJdnAtdHJpcworIGVuZGlmCisgCistRVhUUkFfRElTVCA9IFwKKytkZW1vc2RhdGFkaXI9JChkYXRhZGlyKS8kKFBBQ0tBR0UpLworK2Rpc3RfZGVtb3NkYXRhX0RBVEE9IFwKKyAJZm9yLmdsc2wgXAorIAlmdW5jLmdsc2wgXAorIAlmdW5jMi5nbHNsIFwKKy0tIAorMi4wLjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zXzguMi4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zXzguMi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NTE2NDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3NfOC4yLjAuYmIKQEAgLTAsMCArMSw1NyBAQAorU1VNTUFSWSA9ICJNZXNhIGRlbW8gYXBwbGljYXRpb25zIgorREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIGluY2x1ZGVzIHRoZSBkZW1vbnN0cmF0aW9uIGFwcGxpY2F0aW9uLCBzdWNoIGFzIGdseGdlYXJzLiBcCitUaGVzZSBhcHBsaWNhdGlvbnMgY2FuIGJlIHVzZWQgZm9yIE1lc2EgdmFsaWRhdGlvbiBhbmQgYmVuY2htYXJraW5nLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9tZXNhM2Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnIgorU0VDVElPTiA9ICJ4MTEiCisKK0xJQ0VOU0UgPSAiTUlUICYgUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zcmMveGRlbW9zL2dseGdlYXJzLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9OTE0MjI1Nzg1NDUwZWZmNjQ0YTg2Yzg3MWQzYWUwMGUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3hkZW1vcy9nbHhkZW1vLmM7YmVnaW5saW5lPTE7ZW5kbGluZT04O21kNT1iMDFkNWFiMWFlZTk0ZDM1YjdlZmFhMmVmNDhlMWEwNiIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZnJlZWRlc2t0b3Aub3JnL3B1Yi9tZXNhL2RlbW9zLyR7UFZ9LyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICBmaWxlOi8vMDAwMS1tZXNhLWRlbW9zLUFkZC1taXNzaW5nLWRhdGEtZmlsZXMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAyLUNvcnJlY3RseS1pbXBsZW1lbnQtd2l0aC1BQ19XSVRILWdsdXQtc28tdGhhdC13aXRob3UucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAzLWNvbmZpZ3VyZS1BbGxvdy10by1kaXNhYmxlLWRlbW9zLXdoaWNoLXJlcXVpcmUtR0xFVy0ucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA0LVVzZS1ERU1PU19EQVRBX0RJUi10by1sb2NhdGUtZGF0YS1maWxlcy5wYXRjaCBcCisgICAgZmlsZTovLzAwMDUtRml4LWJ1aWxkLXdoZW4tRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UtZXh0ZW5zaW9uLWlzbi5wYXRjaCBcCisgICAgZmlsZTovLzAwMDYtUXVlcnktZGlzcGxheS1mb3ItRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UtZXh0ZW5zaW9uLS5wYXRjaCBcCisgICAgZmlsZTovLzAwMDctSW5zdGFsbC1mZXctbW9yZS10ZXN0LXByb2dyYW1zLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwOC1nbHNsLXBlcmYtQWRkLWZldy1taXNzaW5nLS5nbHNsLS52ZXJ0LS5mcmFnLWZpbGVzLXRvLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwOS1nbHNsLXBlcmYtSW5zdGFsbC0uZ2xzbC0udmVydC0uZnJhZy1maWxlcy5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiNzI2MTNhMmM4YzAxMzcxNmRiMDJlM2ZmNTlkMjkwNjEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTRiZmVjYjU4MTZkZGQ0YjdiMzdjMWJjODc2YjYzZjFmN2YwNmZkYTU4NzkyMjFhOTc3NGQwOTUyZjkwYmE5MiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BBQ0tBR0VDT05GSUcgPz0gImRybSBvc21lc2EgZnJlZXR5cGUyIGdibSBlZ2wgZ2xlczEgZ2xlczIgXAorICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExIGdsZXcgZ2x1JywgJycsIGQpfSIKKworIyBUaGUgV2F5bGFuZCBjb2RlIGRvZXNuJ3Qgd29yayB3aXRoIFdheWxhbmQgMS4wLCBzbyBkaXNhYmxlIGl0IGZvciBub3cKKyMke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dheWxhbmQnLCAnd2F5bGFuZCcsICcnLCBkKX0iCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtc3lzdGVtLWRhdGEtZmlsZXMiCisKK1BBQ0tBR0VDT05GSUdbZHJtXSA9ICItLWVuYWJsZS1saWJkcm0sLS1kaXNhYmxlLWxpYmRybSxsaWJkcm0iCitQQUNLQUdFQ09ORklHW2VnbF0gPSAiLS1lbmFibGUtZWdsLC0tZGlzYWJsZS1lZ2wsdmlydHVhbC9lZ2wiCitQQUNLQUdFQ09ORklHW2ZyZWV0eXBlMl0gPSAiLS1lbmFibGUtZnJlZXR5cGUyLC0tZGlzYWJsZS1mcmVldHlwZTIsZnJlZXR5cGUiCitQQUNLQUdFQ09ORklHW2dibV0gPSAiLS1lbmFibGUtZ2JtLC0tZGlzYWJsZS1nYm0sdmlydHVhbC9saWJnbCIKK1BBQ0tBR0VDT05GSUdbZ2xlczFdID0gIi0tZW5hYmxlLWdsZXMxLC0tZGlzYWJsZS1nbGVzMSx2aXJ0dWFsL2xpYmdsZXMxIgorUEFDS0FHRUNPTkZJR1tnbGVzMl0gPSAiLS1lbmFibGUtZ2xlczIsLS1kaXNhYmxlLWdsZXMyLHZpcnR1YWwvbGliZ2xlczIiCitQQUNLQUdFQ09ORklHW2dsdXRdID0gIi0td2l0aC1nbHV0PSR7U1RBR0lOR19FWEVDUFJFRklYRElSfSwtLXdpdGhvdXQtZ2x1dCwiCitQQUNLQUdFQ09ORklHW29zbWVzYV0gPSAiLS1lbmFibGUtb3NtZXNhLC0tZGlzYWJsZS1vc21lc2EsIgorUEFDS0FHRUNPTkZJR1t2Z10gPSAiLS1lbmFibGUtdmcsLS1kaXNhYmxlLXZnLHZpcnR1YWwvbGlib3BlbnZnIgorUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSA9ICItLWVuYWJsZS13YXlsYW5kLC0tZGlzYWJsZS13YXlsYW5kLHZpcnR1YWwvbGliZ2wgd2F5bGFuZCIKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTEsLS1kaXNhYmxlLXgxMSx2aXJ0dWFsL2xpYngxMSIKK1BBQ0tBR0VDT05GSUdbZ2xld10gPSAiLS1lbmFibGUtZ2xldywtLWRpc2FibGUtZ2xldyxnbGV3IgorUEFDS0FHRUNPTkZJR1tnbHVdID0gIi0tZW5hYmxlLWdsdSwtLWRpc2FibGUtZ2x1LHZpcnR1YWwvbGliZ2wiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgaXQgY2FuIGJlIGNvbXBsZXRlbHkgZW1wdHkgd2hlbiBhbGwgUEFDS0FHRUNPTkZJRyBvcHRpb25zIGFyZSBkaXNhYmxlZAorCXJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5ICR7RH0ke2JpbmRpcn0KKworCWlmIFsgLWYgJHtEfSR7YmluZGlyfS9jbGVhciBdOyB0aGVuCisgICAgICAgIAltdiAke0R9JHtiaW5kaXJ9L2NsZWFyICR7RH0ke2JpbmRpcn0vY2xlYXIubWVzYS1kZW1vcworCWZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZ2xfMTAuNi4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWdsXzEwLjYuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzJiY2E5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWdsXzEwLjYuMy5iYgpAQCAtMCwwICsxLDEzIEBACityZXF1aXJlIG1lc2FfJHtQVn0uYmIKKworU1VNTUFSWSArPSAiIChPcGVuR0wgb25seSwgbm8gRUdML0dMRVMpIgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9tZXNhOiIKKworUFJPVklERVMgPSAidmlydHVhbC9saWJnbCB2aXJ0dWFsL21lc2EiCisKK1MgPSAiJHtXT1JLRElSfS9tZXNhLSR7UFZ9IgorCitQQUNLQUdFQ09ORklHID8/PSAiZHJpICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0iCisKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY3YTJjNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS5pbmMKQEAgLTAsMCArMSwxODUgQEAKK1NVTU1BUlkgPSAiQSBmcmVlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBPcGVuR0wgQVBJIgorREVTQ1JJUFRJT04gPSAiTWVzYSBpcyBhbiBvcGVuLXNvdXJjZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgT3BlbkdMIHNwZWNpZmljYXRpb24gLSBcCithIHN5c3RlbSBmb3IgcmVuZGVyaW5nIGludGVyYWN0aXZlIDNEIGdyYXBoaWNzLiAgXAorQSB2YXJpZXR5IG9mIGRldmljZSBkcml2ZXJzIGFsbG93cyBNZXNhIHRvIGJlIHVzZWQgaW4gbWFueSBkaWZmZXJlbnQgZW52aXJvbm1lbnRzIFwKK3JhbmdpbmcgZnJvbSBzb2Z0d2FyZSBlbXVsYXRpb24gdG8gY29tcGxldGUgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGZvciBtb2Rlcm4gR1BVcy4gXAorTWVzYSBpcyB1c2VkIGFzIHBhcnQgb2YgdGhlIG92ZXJhbGwgRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZSBhbmQgWC5vcmcgXAorZW52aXJvbm1lbnQuIgorCitIT01FUEFHRSA9ICJodHRwOi8vbWVzYTNkLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZyIKK1NFQ1RJT04gPSAieDExIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kb2NzL2xpY2Vuc2UuaHRtbDttZDU9NmEyMzQ0NTk4MmE3YTk3MmFjMTk4ZTkzY2MxY2IzZGUiCisKK1BFID0gIjIiCisKK0RFUEVORFMgPSAiZXhwYXQgbWFrZWRlcGVuZC1uYXRpdmUgZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIGxpYnhtbDItbmF0aXZlIHVkZXYiCisKK1BST1ZJREVTID0gInZpcnR1YWwvbGliZ2wgdmlydHVhbC9saWJnbGVzMSB2aXJ0dWFsL2xpYmdsZXMyIHZpcnR1YWwvZWdsIHZpcnR1YWwvbWVzYSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHB5dGhvbm5hdGl2ZSBnZXR0ZXh0IGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAib3BlbmdsIgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2hhcmVkLWdsYXBpIgorCitQQUNLQUdFQ09ORklHID8/PSAiZWdsIGdsZXMgZHJpIFwKKwkJJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfVwKKwkJJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3YXlsYW5kJywgJ3dheWxhbmQnLCAnJywgZCl9XAorCQkiCisKK1gxMV9ERVBTID0gInhmODZkcmlwcm90byBnbHByb3RvIHZpcnR1YWwvbGlieDExIGxpYnhleHQgbGlieHhmODZ2bSBsaWJ4ZGFtYWdlIGxpYnhmaXhlcyIKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS1nbHgtdGxzLC0tZGlzYWJsZS1nbHgsJHtYMTFfREVQU30iCitQQUNLQUdFQ09ORklHW3h2bWNdID0gIi0tZW5hYmxlLXh2bWMsLS1kaXNhYmxlLXh2bWMsbGlieHZtYyIKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZF0gPSAiLCx3YXlsYW5kIgorCitEUklEUklWRVJTID0gInN3cmFzdCIKK0RSSURSSVZFUlNfYXBwZW5kX3g4NiA9ICIscmFkZW9uLHIyMDAsbm91dmVhdSxpOTY1LGk5MTUiCitEUklEUklWRVJTX2FwcGVuZF94ODYtNjQgPSAiLHJhZGVvbixyMjAwLG5vdXZlYXUsaTk2NSxpOTE1IgorUEFDS0FHRUNPTkZJR1tkcmldID0gIi0tZW5hYmxlLWRyaSAtLXdpdGgtZHJpLWRyaXZlcnM9JHtEUklEUklWRVJTfSwgLS1kaXNhYmxlLWRyaSwgZHJpMnByb3RvIGxpYmRybSIKK1BBQ0tBR0VDT05GSUdbZHJpM10gPSAiLS1lbmFibGUtZHJpMywgLS1kaXNhYmxlLWRyaTMsIGRyaTNwcm90byBwcmVzZW50cHJvdG8gbGlieHNobWZlbmNlIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLWdibSIKKworUEFDS0FHRUNPTkZJR1tnbGVzXSA9ICItLWVuYWJsZS1nbGVzMSAtLWVuYWJsZS1nbGVzMiwgLS1kaXNhYmxlLWdsZXMxIC0tZGlzYWJsZS1nbGVzMiIKKworRUdMX1BMQVRGT1JNUyAgPSAiZHJtIgorRUdMX1BMQVRGT1JNUyAuPSIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd4MTEnLCAnLHgxMScsICcnLCBkKX0iCitFR0xfUExBVEZPUk1TIC49IiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3dheWxhbmQnLCAnLHdheWxhbmQnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1tlZ2xdID0gIi0tZW5hYmxlLWVnbCAtLXdpdGgtZWdsLXBsYXRmb3Jtcz0ke0VHTF9QTEFURk9STVN9LCAtLWRpc2FibGUtZWdsIgorCitHQUxMSVVNRFJJVkVSUyA9ICJzd3Jhc3QiCitHQUxMSVVNRFJJVkVSU19MTFZNMzMgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncjYwMCcsICdyYWRlb25zaSxyNjAwJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbcjYwMF0gPSAiIgorR0FMTElVTURSSVZFUlNfTExWTTMzX0VOQUJMRUQgPSAiJHtAYmFzZV92ZXJzaW9uX2xlc3Nfb3JfZXF1YWwoJ01FU0FfTExWTV9SRUxFQVNFJywgJzMuMicsIEZhbHNlLCBsZW4oJyR7R0FMTElVTURSSVZFUlNfTExWTTMzfScpID4gMCwgZCl9IgorR0FMTElVTURSSVZFUlNfTExWTSA9ICJyMzAwLHN2Z2Esbm91dmVhdSR7QCcsJHtHQUxMSVVNRFJJVkVSU19MTFZNMzN9JyBpZiAke0dBTExJVU1EUklWRVJTX0xMVk0zM19FTkFCTEVEfSBlbHNlICcnfSIKK0dBTExJVU1EUklWRVJTX2FwcGVuZF94ODYgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZ2FsbGl1bS1sbHZtJywgJywke0dBTExJVU1EUklWRVJTX0xMVk19JywgJycsIGQpfSIKK0dBTExJVU1EUklWRVJTX2FwcGVuZF94ODYtNjQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZ2FsbGl1bS1sbHZtJywgJywke0dBTExJVU1EUklWRVJTX0xMVk19JywgJycsIGQpfSIKKyMga2VlcCAtLXdpdGgtZ2FsbGl1bS1kcml2ZXJzIHNlcGFyYXRlLCBiZWNhdXNlIHdoZW4gb25seSBvbmUgb2YgZ2FsbGl1bSB2ZXJzaW9ucyBpcyBlbmFibGVkLCBvdGhlciAyIHdlcmUgYWRkaW5nIC0td2l0aG91dC1nYWxsaXVtLWRyaXZlcnMKK1BBQ0tBR0VDT05GSUdbZ2FsbGl1bV0gICAgICA9ICItLXdpdGgtZ2FsbGl1bS1kcml2ZXJzPSR7R0FMTElVTURSSVZFUlN9LCAtLXdpdGhvdXQtZ2FsbGl1bS1kcml2ZXJzIgorTUVTQV9MTFZNX1JFTEVBU0UgPz0gIjMuMyIKK1BBQ0tBR0VDT05GSUdbZ2FsbGl1bS1sbHZtXSA9ICItLWVuYWJsZS1nYWxsaXVtLWxsdm0gLS1lbmFibGUtbGx2bS1zaGFyZWQtbGlicywgLS1kaXNhYmxlLWdhbGxpdW0tbGx2bSwgbGx2bSR7TUVTQV9MTFZNX1JFTEVBU0V9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0AnZWxmdXRpbHMnIGlmICR7R0FMTElVTURSSVZFUlNfTExWTTMzX0VOQUJMRUR9IGVsc2UgJyd9IgorZXhwb3J0IFdBTlRfTExWTV9SRUxFQVNFID0gIiR7TUVTQV9MTFZNX1JFTEVBU0V9IgorUEFDS0FHRUNPTkZJR1t4YV0gID0gIi0tZW5hYmxlLXhhLCAtLWRpc2FibGUteGEiCisKKyMgbGx2bXBpcGUgaXMgc2xvdyBpZiBjb21waWxlZCB3aXRoIC1mb21pdC1mcmFtZS1wb2ludGVyIChlLmcuIC1PMikKK0ZVTExfT1BUSU1JWkFUSU9OX2FwcGVuZCA9ICIgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIiCisKKyMgTXVsdGlwbGUgdmlydHVhbC9nbCBwcm92aWRlcnMgYmVpbmcgYnVpbHQgYnJlYWtzIHN0YWdpbmcKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgorCisjIFJlbW92ZSB0aGUgbWVzYSBkZXBlbmRlbmN5IG9uIG1lc2EtZGV2LCBhcyBtZXNhIGlzIGVtcHR5CitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorCitQQUNLQUdFUyA9KyAibGliZWdsLW1lc2EgbGliZWdsLW1lc2EtZGV2IFwKKyAgICAgICAgICAgICBsaWJvc21lc2EgbGlib3NtZXNhLWRldiBcCisgICAgICAgICAgICAgbGliZ2wtbWVzYSBsaWJnbC1tZXNhLWRldiBcCisgICAgICAgICAgICAgbGliZ2xhcGkgbGliZ2xhcGktZGV2IFwKKyAgICAgICAgICAgICBsaWJnYm0gbGliZ2JtLWRldiBcCisgICAgICAgICAgICAgbGliZ2xlczEtbWVzYSBsaWJnbGVzMS1tZXNhLWRldiBcCisgICAgICAgICAgICAgbGliZ2xlczItbWVzYSBsaWJnbGVzMi1tZXNhLWRldiBcCisgICAgICAgICAgICAgbGliZ2xlczMtbWVzYSBsaWJnbGVzMy1tZXNhLWRldiBcCisgICAgICAgICAgICAgbGlid2F5bGFuZC1lZ2wgbGlid2F5bGFuZC1lZ2wtZGV2IFwKKyAgICAgICAgICAgICBsaWJ4dm1jc29mdHBpcGUgbGlieHZtY3NvZnRwaXBlLWRldiBcCisgICAgICAgICAgICAgbGlieGF0cmFja2VyIGxpYnhhdHJhY2tlci1kZXYgXAorICAgICAgICAgICAgIG1lc2EtbWVnYWRyaXZlciBcCisgICAgICAgICAgICAiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICAjIERyaXZlcnMgbmV2ZXIgbmVlZCBsaWJ0b29sIC5sYSBmaWxlcworICAgIHJtIC1mICR7RH0ke2xpYmRpcn0vZHJpLyoubGEKKyAgICBybSAtZiAke0R9JHtsaWJkaXJ9L2VnbC8qLmxhCisgICAgcm0gLWYgJHtEfSR7bGliZGlyfS9nYWxsaXVtLXBpcGUvKi5sYQorICAgIHJtIC1mICR7RH0ke2xpYmRpcn0vZ2JtLyoubGEKKyAgICAKKyAgICAjIGl0IHdhcyBwYWNrYWdlZCBpbiBsaWJkcmljb3JlOS4xLjMtMSBhbmQgcHJldmVudGluZyB1cGdyYWRlcyB3aGVuIGRlYmlhbi5iYmNsYXNzIHdhcyB1c2VkIAorICAgIHJtIC1mICR7RH0ke3N5c2NvbmZkaXJ9L2RyaXJjCit9CisKKyMgRm9yIHRoZSBwYWNrYWdlcyB0aGF0IG1ha2UgdXAgdGhlIE9wZW5HTCBpbnRlcmZhY2VzLCBpbmplY3QgdmFyaWFibGVzIHNvIHRoYXQKKyMgdGhleSBkb24ndCBnZXQgRGViaWFuLXJlbmFtZWQgKHdoaWNoIHdvdWxkIHJlbW92ZSB0aGUgLW1lc2Egc3VmZml4KSwgYW5kCisjIFJQUk9WSURFcy9SQ09ORkxJQ1RzIG9uIHRoZSBnZW5lcmljIGxpYmdsIG5hbWUuCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgcGtnY29uZmlnID0gKGQuZ2V0VmFyKCdQQUNLQUdFQ09ORklHJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBmb3IgcCBpbiAoKCJlZ2wiLCAibGliZWdsIiwgImxpYmVnbDEiKSwKKyAgICAgICAgICAgICAgKCJkcmkiLCAibGliZ2wiLCAibGliZ2wxIiksCisgICAgICAgICAgICAgICgiZ2xlcyIsICJsaWJnbGVzMSIsICJsaWJnbGVzdjEtY20xIiksCisgICAgICAgICAgICAgICgiZ2xlcyIsICJsaWJnbGVzMiIsICJsaWJnbGVzdjItMiIpLAorICAgICAgICAgICAgICAoImdsZXMiLCAibGliZ2xlczMiLCkpOgorICAgICAgICBpZiBub3QgcFswXSBpbiBwa2djb25maWc6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmdWxscCA9IHBbMV0gKyAiLW1lc2EiCisgICAgICAgIHBrZ3MgPSAiICIuam9pbihwWzE6XSkKKyAgICAgICAgZC5zZXRWYXIoIkRFQklBTl9OT0FVVE9OQU1FXyIgKyBmdWxscCwgIjEiKQorICAgICAgICBkLmFwcGVuZFZhcigiUlJFUExBQ0VTXyIgKyBmdWxscCwgcGtncykKKyAgICAgICAgZC5hcHBlbmRWYXIoIlJQUk9WSURFU18iICsgZnVsbHAsIHBrZ3MpCisgICAgICAgIGQuYXBwZW5kVmFyKCJSQ09ORkxJQ1RTXyIgKyBmdWxscCwgcGtncykKKyAgICAgICAgCisgICAgICAgICMgRm9yIC1kZXYsIHRoZSBmaXJzdCBlbGVtZW50IGlzIGJvdGggdGhlIERlYmlhbiBhbmQgb3JpZ2luYWwgbmFtZQorICAgICAgICBmdWxscCArPSAiLWRldiIKKyAgICAgICAgcGtncyA9IHBbMV0gKyAiLWRldiIKKyAgICAgICAgZC5zZXRWYXIoIkRFQklBTl9OT0FVVE9OQU1FXyIgKyBmdWxscCwgIjEiKQorICAgICAgICBkLmFwcGVuZFZhcigiUlJFUExBQ0VTXyIgKyBmdWxscCwgcGtncykKKyAgICAgICAgZC5hcHBlbmRWYXIoIlJQUk9WSURFU18iICsgZnVsbHAsIHBrZ3MpCisgICAgICAgIGQuYXBwZW5kVmFyKCJSQ09ORkxJQ1RTXyIgKyBmdWxscCwgcGtncykKK30KKworcHl0aG9uIG1lc2FfcG9wdWxhdGVfcGFja2FnZXMoKSB7CisgICAgcGtncyA9IFsnbWVzYScsICdtZXNhLWRldicsICdtZXNhLWRiZyddCisgICAgZm9yIHBrZyBpbiBwa2dzOgorICAgICAgICBkLnNldFZhcigiUlBST1ZJREVTXyVzIiAlIHBrZywgcGtnLnJlcGxhY2UoIm1lc2EiLCAibWVzYS1kcmkiLCAxKSkKKyAgICAgICAgZC5zZXRWYXIoIlJDT05GTElDVFNfJXMiICUgcGtnLCBwa2cucmVwbGFjZSgibWVzYSIsICJtZXNhLWRyaSIsIDEpKQorICAgICAgICBkLnNldFZhcigiUlJFUExBQ0VTXyVzIiAlIHBrZywgcGtnLnJlcGxhY2UoIm1lc2EiLCAibWVzYS1kcmkiLCAxKSkKKworICAgIGltcG9ydCByZQorICAgIGRyaV9kcml2ZXJzX3Jvb3QgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCAiZHJpIikKKyAgICBkcmlfcGtncyA9IG9zLmxpc3RkaXIoZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKSArIGRyaV9kcml2ZXJzX3Jvb3QpCisgICAgbGliX25hbWUgPSBkLmV4cGFuZCgiJHtNTFBSRUZJWH1tZXNhLW1lZ2Fkcml2ZXIiKQorICAgIGZvciBwIGluIGRyaV9wa2dzOgorICAgICAgICBtID0gcmUubWF0Y2goJ14oLiopX2RyaVwuc28kJywgcCkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHBrZ19uYW1lID0gIiAke01MUFJFRklYfW1lc2EtZHJpdmVyLSVzIiAlIGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKG0uZ3JvdXAoMSkpCisgICAgICAgICAgICBkLmFwcGVuZFZhcigiUlBST1ZJREVTXyVzIiAlIGxpYl9uYW1lLCBwa2dfbmFtZSkKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCJSQ09ORkxJQ1RTXyVzIiAlIGxpYl9uYW1lLCBwa2dfbmFtZSkKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCJSUkVQTEFDRVNfJXMiICUgbGliX25hbWUsIHBrZ19uYW1lKQorCisgICAgcGlwZV9kcml2ZXJzX3Jvb3QgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCAiZ2FsbGl1bS1waXBlIikKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBwaXBlX2RyaXZlcnNfcm9vdCwgJ15waXBlXyguKilcLnNvJCcsICdtZXNhLWRyaXZlci1waXBlLSVzJywgJ01lc2EgJXMgcGlwZSBkcml2ZXInLCBleHRyYV9kZXBlbmRzPScnKQorfQorCitQQUNLQUdFU1BMSVRGVU5DU19wcmVwZW5kID0gIm1lc2FfcG9wdWxhdGVfcGFja2FnZXMgIgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJebWVzYS1kcml2ZXItLioiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2RyaS8uZGVidWcvKiIKK0ZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L2RyaXJjIgorRklMRVNfbWVzYS1tZWdhZHJpdmVyID0gIiR7bGliZGlyfS9kcmkvKiIKK0ZJTEVTX2xpYmVnbC1tZXNhID0gIiR7bGliZGlyfS9saWJFR0wuc28uKiIKK0ZJTEVTX2xpYmdibSA9ICIke2xpYmRpcn0vbGliZ2JtLnNvLioiCitGSUxFU19saWJnbGVzMS1tZXNhID0gIiR7bGliZGlyfS9saWJHTEVTdjEqLnNvLioiCitGSUxFU19saWJnbGVzMi1tZXNhID0gIiR7bGliZGlyfS9saWJHTEVTdjIuc28uKiIKK0ZJTEVTX2xpYmdsLW1lc2EgPSAiJHtsaWJkaXJ9L2xpYkdMLnNvLioiCitGSUxFU19saWJnbGFwaSA9ICIke2xpYmRpcn0vbGliZ2xhcGkuc28uKiIKK0ZJTEVTX2xpYm9zbWVzYSA9ICIke2xpYmRpcn0vbGliT1NNZXNhLnNvLioiCitGSUxFU19saWJ3YXlsYW5kLWVnbCA9ICIke2xpYmRpcn0vbGlid2F5bGFuZC1lZ2wuc28uKiIKK0ZJTEVTX2xpYnh2bWNzb2Z0cGlwZSA9ICIke2xpYmRpcn0vbGliWHZNQ3NvZnRwaXBlLnNvLioiCitGSUxFU19saWJ4YXRyYWNrZXIgPSAiJHtsaWJkaXJ9L2xpYnhhdHJhY2tlci5zby4qIgorCitGSUxFU18ke1BOfS1kZXYgPSAiJHtsaWJkaXJ9L3BrZ2NvbmZpZy9kcmkucGMiCitGSUxFU19saWJlZ2wtbWVzYS1kZXYgPSAiJHtsaWJkaXJ9L2xpYkVHTC4qICR7aW5jbHVkZWRpcn0vRUdMICR7aW5jbHVkZWRpcn0vS0hSICR7bGliZGlyfS9wa2djb25maWcvZWdsLnBjIgorRklMRVNfbGliZ2JtLWRldiA9ICIke2xpYmRpcn0vbGliZ2JtLiogJHtsaWJkaXJ9L3BrZ2NvbmZpZy9nYm0ucGMgJHtpbmNsdWRlZGlyfS9nYm0uaCIKK0ZJTEVTX2xpYmdsLW1lc2EtZGV2ID0gIiR7bGliZGlyfS9saWJHTC4qICR7aW5jbHVkZWRpcn0vR0wgJHtsaWJkaXJ9L3BrZ2NvbmZpZy9nbC5wYyIKK0ZJTEVTX2xpYmdsYXBpLWRldiA9ICIke2xpYmRpcn0vbGliZ2xhcGkuKiIKK0ZJTEVTX2xpYmdsZXMxLW1lc2EtZGV2ID0gIiR7bGliZGlyfS9saWJHTEVTdjEqLiogJHtpbmNsdWRlZGlyfS9HTEVTICR7bGliZGlyfS9wa2djb25maWcvZ2xlc3YxKi5wYyIKK0ZJTEVTX2xpYmdsZXMyLW1lc2EtZGV2ID0gIiR7bGliZGlyfS9saWJHTEVTdjIuKiAke2luY2x1ZGVkaXJ9L0dMRVMyICR7bGliZGlyfS9wa2djb25maWcvZ2xlc3YyLnBjIgorRklMRVNfbGliZ2xlczMtbWVzYS1kZXYgPSAiJHtpbmNsdWRlZGlyfS9HTEVTMyIKK0ZJTEVTX2xpYm9zbWVzYS1kZXYgPSAiJHtsaWJkaXJ9L2xpYk9TTWVzYS4qICR7aW5jbHVkZWRpcn0vb3NtZXNhLmggJHtsaWJkaXJ9L3BrZ2NvbmZpZy9vc21lc2EucGMiCitGSUxFU19saWJ3YXlsYW5kLWVnbC1kZXYgPSAiJHtsaWJkaXJ9L3BrZ2NvbmZpZy93YXlsYW5kLWVnbC5wYyAke2xpYmRpcn0vbGlid2F5bGFuZC1lZ2wuKiIKK0ZJTEVTX2xpYnh2bWNzb2Z0cGlwZS1kZXYgPSAiJHtsaWJkaXJ9L2xpYlh2TUNzb2Z0cGlwZS5zbyAke2xpYmRpcn0vbGliWHZNQ3NvZnRwaXBlLmxhIgorRklMRVNfbGlieGF0cmFja2VyLWRldiA9ICIke2xpYmRpcn0vbGlieGF0cmFja2VyLnNvICR7bGliZGlyfS9saWJ4YXRyYWNrZXIubGEgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L3hhX3RyYWNrZXIuaCAke2luY2x1ZGVkaXJ9L3hhX2NvbXBvc2l0ZS5oICR7aW5jbHVkZWRpcn0veGFfY29udGV4dC5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BrZ2NvbmZpZy94YXRyYWNrZXIucGMiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2RyaS8uZGVidWcvKiAke2xpYmRpcn0vZWdsLy5kZWJ1Zy8qICR7bGliZGlyfS9nYm0vLmRlYnVnLyogJHtsaWJkaXJ9L2dhbGxpdW0tcGlwZS8uZGVidWciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2FfMTAuNi4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhXzEwLjYuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzU1MDY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhXzEwLjYuMy5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlICR7QlBOfS5pbmMKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZnJlZWRlc2t0b3Aub3JnL3B1Yi9tZXNhLyR7UFZ9L21lc2EtJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTUzZTUyNWQyZjIwZWQ0OGZjYThmMWVjMzE3NmZkODMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTg1OTJlMDdjMzUwY2QyZTg5NjliNzNmYTgzMDQ4YzY1N2EzOWZlMmYxM2YzYjg4ZjVlNTgxOGZlMmU0Njc2ZCIKKworI2JlY2F1c2Ugd2UgY2Fubm90IHJlbHkgb24gdGhlIGZhY3QgdGhhdCBhbGwgYXBwcyB3aWxsIHVzZSBwa2djb25maWcsCisjbWFrZSBlZ2xwbGF0Zm9ybS5oIGluZGVwZW5kZW50IG9mIE1FU0FfRUdMX05PX1gxMV9IRUFERVIKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2VnbCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisgICAgICAgIHNlZCAtaSAtZSAncy9eI2lmIGRlZmluZWQoTUVTQV9FR0xfTk9fWDExX0hFQURFUlMpJC8jaWYgZGVmaW5lZChNRVNBX0VHTF9OT19YMTFfSEVBREVSUykgfHwgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAneDExJywgJzAnLCAnMScsIGQpfS8nICR7RH0ke2luY2x1ZGVkaXJ9L0VHTC9lZ2xwbGF0Zm9ybS5oCisgICAgZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYV9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2FfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMzQ1MTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2FfZ2l0LmJiCkBAIC0wLDAgKzEsMjIgQEAKK3JlcXVpcmUgJHtCUE59LmluYworCitERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCisKK1NSQ1JFViA9ICJlYTBkMWY1NzVjMjE0YzA5YmEzZGYxMjY0NGE5NjBlODZlMDMxNzY2IgorUFYgPSAiMTAuNS40K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC9tZXNhL21lc2E7YnJhbmNoPTEwLjUiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0RFUEVORFMgKz0gInB5dGhvbi1tYWtvLW5hdGl2ZSIKKworaW5oZXJpdCBweXRob25uYXRpdmUKKworI2JlY2F1c2Ugd2UgY2Fubm90IHJlbHkgb24gdGhlIGZhY3QgdGhhdCBhbGwgYXBwcyB3aWxsIHVzZSBwa2djb25maWcsCisjbWFrZSBlZ2xwbGF0Zm9ybS5oIGluZGVwZW5kZW50IG9mIE1FU0FfRUdMX05PX1gxMV9IRUFERVIKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2VnbCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisgICAgICAgIHNlZCAtaSAtZSAncy9eI2lmIGRlZmluZWQoTUVTQV9FR0xfTk9fWDExX0hFQURFUlMpJC8jaWYgZGVmaW5lZChNRVNBX0VHTF9OT19YMTFfSEVBREVSUykgfHwgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAneDExJywgJzAnLCAnMScsIGQpfS8nICR7RH0ke2luY2x1ZGVkaXJ9L0VHTC9lZ2xwbGF0Zm9ybS5oCisgICAgZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21pbmkteC1zZXNzaW9uL2ZpbGVzL21pbmkteC1zZXNzaW9uIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWluaS14LXNlc3Npb24vZmlsZXMvbWluaS14LXNlc3Npb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNhNjU1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21pbmkteC1zZXNzaW9uL2ZpbGVzL21pbmkteC1zZXNzaW9uCkBAIC0wLDAgKzEsMzkgQEAKKyMhL2Jpbi9zaAorIworIyBWZXJ5IHNpbXBsZSBzZXNzaW9uIG1hbmFnZXIgZm9yIE1pbmkgWAorIworCisjIFVuY29tbWVudCBiZWxvdyB0byBlbmFibGUgcGFyc2luZyBvZiBkZWJpYW4gbWVudSBlbnRyeXMKKyMgZXhwb3J0IE1CX1VTRV9ERUJfTUVOVVM9MSAKKworaWYgWyAtZSAkSE9NRS8ubWluaV94L3Nlc3Npb24gXQordGhlbgorZXhlYyAkSE9NRS8ubWluaV94L3Nlc3Npb24KK2ZpCisKK2lmIFsgLWUgL2V0Yy9taW5pX3gvc2Vzc2lvbiBdCit0aGVuCitleGVjIC9ldGMvbWluaV94L3Nlc3Npb24KK2ZpCisKK01JTklfWF9TRVNTSU9OX0RJUj0vZXRjL21pbmlfeC9zZXNzaW9uLmQKK2lmIFsgLWQgIiRNSU5JX1hfU0VTU0lPTl9ESVIiIF07IHRoZW4KKwkjIEV4ZWN1dGUgc2Vzc2lvbiBmaWxlIG9uIGJlaGFsZiBvZiBmaWxlIG93bmVyCisJZmluZCAkTUlOSV9YX1NFU1NJT05fRElSIC10eXBlIGYgfCB3aGlsZSByZWFkIFNFU1NJT05GSUxFOyBkbworCQlzZXQgK2UKKwkJVVNFUk5BTUU9YHN0YXQgLWMgJVUgJFNFU1NJT05GSUxFYAorCQkjIFVzaW5nIHN1IHJhdGhlciB0aGFuIHN1ZG8gYXMgbGF0ZXN0IDEuOC4xIGNhdXNlIGZhaWx1cmUgW1lPQ1RPICMxMjExXQorIwkJc3UgLWwgLWMgJyRTRVNTSU9ORklMRSYnICRVU0VSTkFNRQorCQlzdWRvIC1iIC1pIC11ICRVU0VSTkFNRSAkU0VTU0lPTkZJTEUmCisJCXNldCAtZQorCWRvbmUKK2ZpCisKKyMgVGhpcyByZXNvbHV0aW9uIGlzIGJpZyBlbm91Z2ggZm9yIGhvYjIncyBtYXggd2luZG93IHNpemUuCit4cmFuZHIgLXMgMTAyNHg3NjgKKworIyBEZWZhdWx0IGZpbGVzIHRvIHJ1biBpZiAkSE9NRS8ubWluaV94L3Nlc3Npb24gb3IgL2V0Yy9taW5pX3gvc2Vzc2lvbgorIyBkb250IGV4aXN0LiAKKworbWF0Y2hib3gtdGVybWluYWwmCitleGVjIG1hdGNoYm94LXdpbmRvdy1tYW5hZ2VyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9taW5pLXgtc2Vzc2lvbi9taW5pLXgtc2Vzc2lvbl8wLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9taW5pLXgtc2Vzc2lvbi9taW5pLXgtc2Vzc2lvbl8wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU4OWQ2MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21pbmkteC1zZXNzaW9uL21pbmkteC1zZXNzaW9uXzAuMS5iYgpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIlZlcnkgc2ltcGxlIHNlc3Npb24gbWFuYWdlciBmb3IgWCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnBva3lsaW51eC5vcmciCisKK1BSID0gInI0IgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbWluaS14LXNlc3Npb247ZW5kbGluZT01O21kNT1iNjQzMGJmZmJjZjA1Zjk3NjBlNzI5Mzg4MjZiNzQ4NyIKKworU0VDVElPTiA9ICJ4MTEiCitSQ09ORkxJQ1RTXyR7UE59ID0gIm1hdGNoYm94LWNvbW1vbiIKKworU1JDX1VSSSA9ICJmaWxlOi8vbWluaS14LXNlc3Npb24iCitTID0gIiR7V09SS0RJUn0iCisKK1JERVBFTkRTXyR7UE59ID0gInN1ZG8iCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJ4LXNlc3Npb24tbWFuYWdlciIKK0FMVEVSTkFUSVZFX1RBUkdFVFt4LXNlc3Npb24tbWFuYWdlcl0gPSAiJHtiaW5kaXJ9L21pbmkteC1zZXNzaW9uIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiNTAiCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke1N9L21pbmkteC1zZXNzaW9uICR7RH0vJHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjAvZml4LWJ1aWxkLWRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LTEuMC9maXgtYnVpbGQtZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOGE4MzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjAvZml4LWJ1aWxkLWRpci5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGaXggYnVpbGQgZm9yIFMgIT0gQgorCitUaGlzIHBhdGNoIGlzIHNwZWNpZmljIHRvIHZlcnNpb24gMS40LngKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIEAgaHR0cHM6Ly9naXRodWIuY29tL2NsdXR0ZXItcHJvamVjdC9teC9pc3N1ZXMvODEKK1NpZ25lZC1vZmYtYnk6IFRvbWFzIEZyeWRyeWNoIDx0b21hc0BzbGVlcGZpdmUuY29tPgorLS0KK0luZGV4OiBnaXQvZG9jcy9yZWZlcmVuY2UvbGlibXgtZ3RrL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvZG9jcy9yZWZlcmVuY2UvbGlibXgtZ3RrL01ha2VmaWxlLmFtCTIwMTMtMDUtMDggMTU6MDc6MDIuMDI3MTU0Nzg4ICswMTAwCisrKysgZ2l0L2RvY3MvcmVmZXJlbmNlL2xpYm14LWd0ay9NYWtlZmlsZS5hbQkyMDEzLTA1LTA4IDE1OjE0OjMzLjY4NDMxODY1MCArMDEwMAorQEAgLTEsMyArMSw2IEBACisrRVhUUkFfRElTVD0KKytDTEVBTkZJTEVTPQorKworICMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbgorIAorICMgV2UgcmVxdWlyZSBhdXRvbWFrZSAxLjYgYXQgbGVhc3QuCitAQCAtNzcsNyArODAsNyBAQAorIEdUS0RPQ19MSUJTPSQoTVhfTElCUykgJCh0b3BfYnVpbGRkaXIpL214LWd0ay9saWJteC1ndGstJChNWF9BUElfVkVSU0lPTikubGEKKyAKKyAjIFRoaXMgaW5jbHVkZXMgdGhlIHN0YW5kYXJkIGd0ay1kb2MgbWFrZSBydWxlcywgY29waWVkIGJ5IGd0a2RvY2l6ZS4KKy1pbmNsdWRlICQodG9wX3NyY2RpcikvZ3RrLWRvYy5tYWtlCisraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvZ3RrLWRvYy5tYWtlCisgCisgIyBPdGhlciBmaWxlcyB0byBkaXN0cmlidXRlCisgRVhUUkFfRElTVCArPSB2ZXJzaW9uLnhtbC5pbgorSW5kZXg6IGdpdC9kb2NzL3JlZmVyZW5jZS9saWJteC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2RvY3MvcmVmZXJlbmNlL2xpYm14L01ha2VmaWxlLmFtCTIwMTMtMDUtMDggMTU6MDc6MDIuMDI3MTU0Nzg4ICswMTAwCisrKysgZ2l0L2RvY3MvcmVmZXJlbmNlL2xpYm14L01ha2VmaWxlLmFtCTIwMTMtMDUtMDggMTU6MTQ6MjQuNDU2Mzc4MTM1ICswMTAwCitAQCAtMSwzICsxLDYgQEAKKytFWFRSQV9ESVNUPQorK0NMRUFORklMRVM9CisrCisgIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluCisgCisgIyBXZSByZXF1aXJlIGF1dG9tYWtlIDEuNiBhdCBsZWFzdC4KK0BAIC0xMDYsNyArMTA5LDcgQEAKKyBHVEtET0NfTElCUz0kKE1YX0xJQlMpICQodG9wX2J1aWxkZGlyKS9teC9saWJteC0kKE1YX0FQSV9WRVJTSU9OKS5sYQorIAorICMgVGhpcyBpbmNsdWRlcyB0aGUgc3RhbmRhcmQgZ3RrLWRvYyBtYWtlIHJ1bGVzLCBjb3BpZWQgYnkgZ3RrZG9jaXplLgorLWluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9ndGstZG9jLm1ha2UKKytpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9ndGstZG9jLm1ha2UKKyAKKyAjIE90aGVyIGZpbGVzIHRvIGRpc3RyaWJ1dGUKKyBFWFRSQV9ESVNUICs9IHZlcnNpb24ueG1sLmluCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjAvZml4LXRlc3QtaW5jbHVkZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjAvZml4LXRlc3QtaW5jbHVkZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJjOTNkZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LTEuMC9maXgtdGVzdC1pbmNsdWRlcy5wYXRjaApAQCAtMCwwICsxLDIwIEBACitGaXggbWlzc2luZyBpbmNsdWRlIGRpcmVjdG9yeSB3aGVuIGJ1aWxkaW5nIHRlc3RzCisKK1RoaXMgcGF0Y2ggaXMgY3VycmVudGx5IHJlcXVpcmVkIGZvciBhbGwgdmVyc2lvbnMgb2YgbXgKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIEAgaHR0cHM6Ly9naXRodWIuY29tL2NsdXR0ZXItcHJvamVjdC9teC9pc3N1ZXMvODIKK1NpZ25lZC1vZmYtYnk6IFRvbWFzIEZyeWRyeWNoIDx0b21hc0BzbGVlcGZpdmUuY29tPgorLS0KK0luZGV4OiBnaXQvdGVzdHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy90ZXN0cy9NYWtlZmlsZS5hbQkyMDEzLTA1LTA4IDE1OjE4OjU2LjkxODU5NjQyNSArMDEwMAorKysrIGdpdC90ZXN0cy9NYWtlZmlsZS5hbQkyMDEzLTA1LTA4IDE1OjIzOjI2Ljg2NDc4MTQwMSArMDEwMAorQEAgLTEwLDcgKzEwLDggQEAKKyAKKyBJTkNMVURFUyA9IFwKKyAJLUkkKHRvcF9zcmNkaXIpIFwKKy0JLUkkKHRvcF9idWlsZGRpcikKKysJLUkkKHRvcF9idWlsZGRpcilcCisrCS1JJCh0b3BfYnVpbGRkaXIpL214CisgCisgbm9pbnN0X1BST0dSQU1TID0gCQkJXAorIAl0ZXN0LWRlZm9ybS10ZXh0dXJlCQlcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjBfMS40LjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjBfMS40LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UzNWI2MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LTEuMF8xLjQuNy5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIG14LmluYworCisjIFRoZSAxLjQuNyB0YWcgZG9lcyBub3QgYnVpbGQgYWdhaW5zdCBjb2dsIDEuMTQsIHB1bGwgaW4gYSByZXZpc2lvbiB3aXRoIGEgZml4CitTUkNSRVYgPSAiOWIxZGI2YjgwNjBiZDAwYjEyMWE2OTJmOTQyNDA0YTI0YWUyOTYwZiIKK1BWID0gIjEuNC43K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vY2x1dHRlci1wcm9qZWN0L214LmdpdDticmFuY2g9bXgtMS40IFwKKwkgICBmaWxlOi8vZml4LWJ1aWxkLWRpci5wYXRjaCBcCisJICAgZmlsZTovL2ZpeC10ZXN0LWluY2x1ZGVzLnBhdGNoIFwKKwkgICIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT1mYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9teC9teC13aWRnZXQuYztiZWdpbmxpbmU9ODtlbmRsaW5lPTIwO21kNT0xM2JiYTNjOTczYTcyNDE0YTcwMWUxZTg3YjVlZTg3OSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTdmMTg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXguaW5jCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiQ2x1dHRlciBiYXNlZCBVSSB3aWRnZXQgbGlicmFyeSIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCisKK2luaGVyaXQgY2x1dHRlciBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK0RFUEVORFMgPSAiY2x1dHRlci0xLjAgZGJ1cy1nbGliIGdkay1waXhidWYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NvdXJjZS5jbHV0dGVyLXByb2plY3Qub3JnL3NvdXJjZXMvbXgvJHtAZ2V0X3ZlcmRpcigiJHtQVn0iKX0vbXgtJHtQVn0udGFyLnh6IgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24JCVwKKwkgICAgICAgIC0tZGlzYWJsZS1ndGstZG9jCQlcCisJICAgICAgICAtLWRpc2FibGUtZ3RrLXdpZGdldHMJCVwKKwkJLS13aXRoLWRidXMJCQlcCisJCS0td2l0aC13aW5zeXM9bm9uZQkJXAorCQktLXdpdGhvdXQtY2x1dHRlci1pbWNvbnRleHQJXAorCQktLXdpdGhvdXQtY2x1dHRlci1nZXN0dXJlCVwKKwkJLS13aXRob3V0LXN0YXJ0dXAtbm90aWZpY2F0aW9uCVwKKwkJLS13aXRob3V0LWdsYWRlCQkJXAorCSAgICAgICAiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1jbHV0dGVyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1jbHV0dGVyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNjdlNWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWNsdXR0ZXIuYmIKQEAgLTAsMCArMSwyMSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDcgT3BlbmVkSGFuZCBMdGQuCisjCisKK1NVTU1BUlkgPSAiQ2x1dHRlciBwYWNrYWdlIGdyb3VwcyIKK0xJQ0VOU0UgPSAiTUlUIgorCitQUiA9ICJyNiIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworUEFDS0FHRVMgPSAiXAorICAgICR7UE59LWNvcmUgXAorICAgICIKKworU1VNTUFSWV8ke1BOfS1jb3JlID0gIkNsdXR0ZXIgZ3JhcGhpY3MgbGlicmFyeSIKK1JERVBFTkRTXyR7UE59LWNvcmUgPSAiXAorICAgIGNsdXR0ZXItMS4wIFwKKyAgICBjbHV0dGVyLWdzdC0zLjAgXAorICAgIGNsdXR0ZXItZ3RrLTEuMCBcCisgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1kaXJlY3RmYi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZGlyZWN0ZmIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNkYzBhZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZGlyZWN0ZmIuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJEaXJlY3RGQiB3aXRob3V0IFgxMSIKK0xJQ0VOU0UgPSAiTUlUIgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitUT1VDSCA9ICcgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAidG91Y2hzY3JlZW4iLCAidHNsaWIgdHNsaWItY2FsaWJyYXRlIHRzbGliLXRlc3RzIiwgIiIsZCl9JworCitSREVQRU5EU18ke1BOfSA9ICIgXAorCQlkaXJlY3RmYiBcCisJCWRpcmVjdGZiLWV4YW1wbGVzIFwKKwkJcGFuZ28gXAorCQlwYW5nby1tb2R1bGVzIFwKKwkJZm9udGNvbmZpZyBcCisJCSR7VE9VQ0h9IFwKKyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLWJhc2UuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS1iYXNlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MzAxYTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS1iYXNlLmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiQmFzaWMgWDExIHNlc3Npb24iCitERVNDUklQVElPTiA9ICJQYWNrYWdlcyByZXF1aXJlZCB0byBzZXQgdXAgYSBiYXNpYyB3b3JraW5nIFgxMSBzZXNzaW9uIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyMSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIHJkZXBlbmRzIG9uIG1hdGNoYm94LXdtCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgcGFja2FnZWdyb3VwLWNvcmUteDExLXhzZXJ2ZXIgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLXgxMS11dGlscyBcCisgICAgZGJ1cyBcCisgICAgcG9pbnRlcmNhbCBcCisgICAgbWF0Y2hib3gtdGVybWluYWwgXAorICAgIG1hdGNoYm94LXdtIFwKKyAgICBtaW5pLXgtc2Vzc2lvbiBcCisgICAgbGliZXJhdGlvbi1mb250cyBcCisgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEteHNlcnZlci5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLXhzZXJ2ZXIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUzZjFiNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLXhzZXJ2ZXIuYmIKQEAgLTAsMCArMSwyMSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24KKyMKKworU1VNTUFSWSA9ICJYMTEgZGlzcGxheSBzZXJ2ZXIiCitMSUNFTlNFID0gIk1JVCIKK1BSID0gInI0MCIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIHJkZXBlbmRzIG9uIFhTRVJWRVIKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1hTRVJWRVIgPz0gInhzZXJ2ZXIteG9yZyB4Zjg2LXZpZGVvLWZiZGV2IHhmODYtaW5wdXQtZXZkZXYiCitYU0VSVkVSQ09ERUNTID89ICIiCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgICAke1hTRVJWRVJ9IFwKKyAgICAke1hTRVJWRVJDT0RFQ1N9IFwKKyAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MzdkOGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS5iYgpAQCAtMCwwICsxLDM0IEBACisjCisjIENvcHlyaWdodCAoQykgMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbgorIworCitMSUNFTlNFID0gIk1JVCIKK1BSID0gInI0MCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIHJkZXBlbmRzIG9uIHgxMS1jb21tb24KK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1BBQ0tBR0VTID0gIiR7UE59ICR7UE59LXV0aWxzIgorCisjIHhzZXJ2ZXItY29tbW9uLCB4MTEtY29tbW9uCitWSVJUVUFMLVJVTlRJTUVfeHNlcnZlcl9jb21tb24gPz0gIngxMS1jb21tb24iCisKKyMgZWxzYSwgeHNlcnZlci1ub2RtLWluaXQKK1ZJUlRVQUwtUlVOVElNRV9ncmFwaGljYWxfaW5pdF9tYW5hZ2VyID89ICJ4c2VydmVyLW5vZG0taW5pdCIKKworU1VNTUFSWSA9ICJYMTEgZGlzcGxheSBzZXJ2ZXIgYW5kIGJhc2ljIHV0aWxpdGllcyIKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgICAke1BOfS14c2VydmVyIFwKKyAgICAke1BOfS11dGlscyBcCisgICAgIgorCitTVU1NQVJZXyR7UE59LXV0aWxzID0gIlgxMSBiYXNpYyB1dGlsaXRpZXMgYW5kIGluaXQiCitSREVQRU5EU18ke1BOfS11dGlscyA9ICJcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfeHNlcnZlcl9jb21tb259IFwKKyAgICAke1ZJUlRVQUwtUlVOVElNRV9ncmFwaGljYWxfaW5pdF9tYW5hZ2VyfSBcCisgICAgeGF1dGggXAorICAgIHhob3N0IFwKKyAgICB4c2V0IFwKKyAgICB4cmFuZHIgXAorICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjBmZGY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ28uaW5jCkBAIC0wLDAgKzEsOTkgQEAKK1NVTU1BUlkgPSAiRnJhbWV3b3JrIGZvciBsYXlvdXQgYW5kIHJlbmRlcmluZyBvZiBpbnRlcm5hdGlvbmFsaXplZCB0ZXh0IgorREVTQ1JJUFRJT04gPSAiUGFuZ28gaXMgYSBsaWJyYXJ5IGZvciBsYXlpbmcgb3V0IGFuZCByZW5kZXJpbmcgb2YgdGV4dCwgXAord2l0aCBhbiBlbXBoYXNpcyBvbiBpbnRlcm5hdGlvbmFsaXphdGlvbi4gUGFuZ28gY2FuIGJlIHVzZWQgYW55d2hlcmUgXAordGhhdCB0ZXh0IGxheW91dCBpcyBuZWVkZWQsIHRob3VnaCBtb3N0IG9mIHRoZSB3b3JrIG9uIFBhbmdvIHNvIGZhciBoYXMgXAorYmVlbiBkb25lIGluIHRoZSBjb250ZXh0IG9mIHRoZSBHVEsrIHdpZGdldCB0b29sa2l0LiBQYW5nbyBmb3JtcyB0aGUgXAorY29yZSBvZiB0ZXh0IGFuZCBmb250IGhhbmRsaW5nIGZvciBHVEsrLTIueC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnBhbmdvLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmciCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxHUEx2Mi4wKyIKKworWDExREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJ4ZnQiCitERVBFTkRTID0gImdsaWItMi4wIGZvbnRjb25maWcgZnJlZXR5cGUgemxpYiB2aXJ0dWFsL2xpYmljb252IGNhaXJvIGhhcmZidXp6IHFlbXUtbmF0aXZlIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdGVzdCcsICdwdGVzdCcsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLXdpdGgteGZ0LC0td2l0aG91dC14ZnQsJHtYMTFERVBFTkRTfSIKK1BBQ0tBR0VDT05GSUdbcHRlc3RdID0gIi0tZW5hYmxlLWluc3RhbGxlZC10ZXN0cywtLWRpc2FibGUtaW5zdGFsbGVkLXRlc3RzLGdsaWItMi4wLW5hdGl2ZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJnbGliLTIuMC1uYXRpdmUgY2Fpcm8tbmF0aXZlIGhhcmZidXp6LW5hdGl2ZSIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXnBhbmdvLW1vZHVsZS0uKiIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAicGFuZ28tbW9kdWxlLWJhc2ljLWZjIgorCitpbmhlcml0IGdub21lYmFzZSBndGstZG9jIHFlbXUgcHRlc3QKKworIyBDcmVhdGUgYSBwYW5nby1tb2R1bGVzIHBhY2thZ2UKK0FMTE9XX0VNUFRZXyR7QlBOfS1tb2R1bGVzID0gIjEiCitQQUNLQUdFUyArPSAiJHtCUE59LW1vZHVsZXMiCitSUkVDT01NRU5EU18ke0JQTn0tbW9kdWxlcyA9ICAiJHtAIiAiLmpvaW4oW3AgZm9yIHAgaW4gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKSBpZiBwLmZpbmQoInBhbmdvLW1vZHVsZSIpICE9IC0xXSl9IgorCisKK0VYVFJBX0FVVE9SRUNPTkYgPSAiIgorCisjIHNlZW1zIHRvIGdvIHdyb25nIHdpdGggZGVmYXVsdCBjZmxhZ3MKK0ZVTExfT1BUSU1JWkFUSU9OX2FybSA9ICItTzIiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiBcCisJCS0tZW5hYmxlLWV4cGxpY2l0LWRlcHM9bm8gXAorCSAgICAgICAgLS1kaXNhYmxlLWRlYnVnIFwKKwkgICAgICAgIC0td2l0aC1tbHByZWZpeD0ke01MUFJFRklYfSIKKworTEVBRF9TT05BTUUgPSAibGlicGFuZ28tMS4wKiIKK0xJQlYgPSAiMS44LjAiCisKK3BhbmdvX3Bvc3RpbnN0KCkgeworaWYgISBbIC1lICREJHtzeXNjb25mZGlyfS9wYW5nbyBdIDsgdGhlbgorCW1rZGlyIC1wICREJHtzeXNjb25mZGlyfS9wYW5nbworZmkKKworaWYgWyAtbiAiJEQiIF07IHRoZW4KKwkke0BxZW11X3J1bl9iaW5hcnkoZCwgJyREJywnJHtiaW5kaXJ9LyR7TUxQUkVGSVh9cGFuZ28tcXVlcnltb2R1bGVzJyl9IFwKKwkJJEQke2xpYmRpcn0vcGFuZ28vJHtMSUJWfS9tb2R1bGVzLyouc28gXAorCQk+ICREJHtzeXNjb25mZGlyfS9wYW5nby8ke01MUFJFRklYfXBhbmdvLm1vZHVsZXMgMj4vZGV2L251bGwKKworCVsgJD8gLW5lIDAgXSAmJiBleGl0IDEKKworCXNlZCAtaSAtZSAiczokRDo6IiAkRCR7c3lzY29uZmRpcn0vcGFuZ28vJHtNTFBSRUZJWH1wYW5nby5tb2R1bGVzCisKKwlleGl0IDAKK2Vsc2UKKwkke2JpbmRpcn0vJHtNTFBSRUZJWH1wYW5nby1xdWVyeW1vZHVsZXMgPiAvZXRjL3BhbmdvLyR7TUxQUkVGSVh9cGFuZ28ubW9kdWxlcworZmkKK30KKworIyBUaGlzIGJpbmFyeSBuZWVkcyB0byBiZSBjb21waWxlZCBmb3IgdGhlIGhvc3QgYXJjaGl0ZWN0dXJlLiAgVGhpcyBpc24ndCBwcmV0dHkhCitkb19jb21waWxlX3ByZXBlbmQgKCkgeworCWlmICR7QGJhc2VfY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdGVzdCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisJCW1ha2UgQ0M9IiR7QlVJTERfQ0N9IiBDRkxBR1M9IiIgQU1fQ1BQRkxBR1M9IiQocGtnLWNvbmZpZy1uYXRpdmUgLS1jZmxhZ3MgZ2xpYi0yLjApIiBnZW5fYWxsX3VuaWNvZGVfTERBREQ9IiQocGtnLWNvbmZpZy1uYXRpdmUgLS1saWJzIGdsaWItMi4wKSIgLUMgJHtCfS90ZXN0cyBnZW4tYWxsLXVuaWNvZGUKKwlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaWYgWyAiJHtNTFBSRUZJWH0iICE9ICIiIF07IHRoZW4KKwkJbXYgJHtEfS8ke2JpbmRpcn0vcGFuZ28tcXVlcnltb2R1bGVzICR7RH0vJHtiaW5kaXJ9LyR7TUxQUkVGSVh9cGFuZ28tcXVlcnltb2R1bGVzIAorCWZpCit9CisKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIHBhbmdvX3Bvc3RpbnN0ID0gZC5nZXRWYXIoInBhbmdvX3Bvc3RpbnN0IiwgVHJ1ZSkKKworICAgIG1vZHVsZXNfcm9vdCA9IGQuZXhwYW5kKCcke2xpYmRpcn0vcGFuZ28vJHtMSUJWfS9tb2R1bGVzJykKKworICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIG1vZHVsZXNfcm9vdCwgJ15wYW5nby0oLiopXC5zbyQnLCAncGFuZ28tbW9kdWxlLSVzJywgJ1BhbmdvIG1vZHVsZSAlcycsIHBhbmdvX3Bvc3RpbnN0KQorfQorCitGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L3BhbmdvLyogJHtiaW5kaXJ9LyogJHtsaWJkaXJ9L2xpYnBhbmdvKiR7U09MSUJTfSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3BhbmdvLyR7TElCVn0vbW9kdWxlcy8uZGVidWciCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9wYW5nby8ke0xJQlZ9L21vZHVsZXMvKi5sYSIKKworRklMRVNfJHtQTn0tcHRlc3QgKz0gIiR7bGliZXhlY2Rpcn0vaW5zdGFsbGVkLXRlc3RzLyogXAorICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vaW5zdGFsbGVkLXRlc3RzL3BhbmdvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmV4ZWNkaXJ9L2luc3RhbGxlZC10ZXN0cy8uZGVidWciCisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJnbm9tZS1kZXNrdG9wLXRlc3RpbmcgbGliZXJhdGlvbi1mb250cyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvL211bHRpbGliLWZpeC1jbGVhbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvL211bHRpbGliLWZpeC1jbGVhbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDQxNGRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ28vbXVsdGlsaWItZml4LWNsZWFuLnBhdGNoCkBAIC0wLDAgKzEsNzUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitVcGRhdGVkIHRvIGFwcGx5IHRvIHBhbmdvLTEuMzIuNQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBwYW5nby0xLjMyLjUvY29uZmlndXJlLmFjIHBhbmdvLTEuMzIuNS9jb25maWd1cmUuYWMKKy0tLSBwYW5nby0xLjMyLjUvY29uZmlndXJlLmFjCTIwMTItMTItMDcgMDQ6NDM6MjUuMDAwMDAwMDAwICswMjAwCisrKysgcGFuZ28tMS4zMi41L2NvbmZpZ3VyZS5hYwkyMDEzLTAxLTA5IDA4OjI3OjQwLjMyODUxNjc5MiArMDIwMAorQEAgLTIxMyw2ICsyMTMsMTEgQEAKKworIEFDX1NVQlNUKFBBTkdPX0RFQlVHX0ZMQUdTKQorCisrQUNfQVJHX1dJVEgobWxwcmVmaXgsCisrICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1tbHByZWZpeD08QVJHPl0sIFttdWx0aWxpYiBwcmVmaXhdKSwKKysgICAgICAgICAgICBtbHByZWZpeF9zdHI9JHdpdGh2YWwsIG1scHJlZml4X3N0cj0iIikKKytBQ19ERUZJTkVfVU5RVU9URUQoW01MUFJFRklYXSwgWyIkbWxwcmVmaXhfc3RyIl0sIFttdWx0aWxpYiBwcmVmaXguXSkKKysKKyBBQ19BUkdfRU5BQkxFKHJlYnVpbGRzLAorICAgICAgICAgICAgICAgW0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtcmVidWlsZHNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlIGFsbCBzb3VyY2UgYXV0b2dlbmVyYXRpb24gcnVsZXNdKV0sLAorZGlmZiAtTnVyZCBwYW5nby0xLjMyLjUvcGFuZ28vbW9kdWxlcy5jIHBhbmdvLTEuMzIuNS9wYW5nby9tb2R1bGVzLmMKKy0tLSBwYW5nby0xLjMyLjUvcGFuZ28vbW9kdWxlcy5jCTIwMTItMTItMTcgMjA6Mjc6NTYuMDAwMDAwMDAwICswMjAwCisrKysgcGFuZ28tMS4zMi41L3BhbmdvL21vZHVsZXMuYwkyMDEzLTAxLTA5IDA4OjMxOjE2LjMzNjUxMjA1MiArMDIwMAorQEAgLTU1NSwxMSArNTU1LDExIEBACisgICAgICAgZmlsZXMgPSBnX25ldyAoY2hhciAqLCAzKTsKKworICAgICAgIGZpbGVzWzBdID0gZ19idWlsZF9maWxlbmFtZSAocGFuZ29fZ2V0X3N5c2NvbmZfc3ViZGlyZWN0b3J5ICgpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhbmdvLm1vZHVsZXMiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUxQUkVGSVggInBhbmdvLm1vZHVsZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgZmlsZXNbMV0gPSBnX2J1aWxkX2ZpbGVuYW1lIChwYW5nb19nZXRfbGliX3N1YmRpcmVjdG9yeSAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9WRVJTSU9OLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZHVsZXMuY2FjaGUiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUxQUkVGSVggIm1vZHVsZXMuY2FjaGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgZmlsZXNbMl0gPSBOVUxMOworICAgICB9CitAQCAtNjc0LDcgKzY3NCw4IEBACisgICAgICAgaWYgKCFub19tb2R1bGVfd2FybmluZykKKwl7CisJICBnY2hhciAqZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChwYW5nb19nZXRfc3lzY29uZl9zdWJkaXJlY3RvcnkgKCksCistCQkJCQkgICAgICAicGFuZ28ubW9kdWxlcyIsCisrLyogRm9yIG11bHRpbGliIGNhc2UsIGtlZXAgbXVsdGlwbGUgY29uZmlnIGZpbGUgZm9yIGRpZmZlcmVudCBsaWJzICovCisrCQkJCQkgICAgICBNTFBSRUZJWCAicGFuZ28ubW9kdWxlcyIsCisJCQkJCSAgICAgIE5VTEwpOworCSAgZ19jcml0aWNhbCAoIk5vIG1vZHVsZXMgZm91bmQ6XG4iCisJCSAgICAgICJObyBidWlsdGluIG9yIGR5bmFtaWNhbGx5IGxvYWRlZCBtb2R1bGVzIHdlcmUgZm91bmQuXG4iCitkaWZmIC1OdXJkIHBhbmdvLTEuMzIuNS9wYW5nby9tb2R1bGVzLmMucmVqIHBhbmdvLTEuMzIuNS9wYW5nby9tb2R1bGVzLmMucmVqCistLS0gcGFuZ28tMS4zMi41L3BhbmdvL21vZHVsZXMuYy5yZWoJMTk3MC0wMS0wMSAwMjowMDowMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBwYW5nby0xLjMyLjUvcGFuZ28vbW9kdWxlcy5jLnJlagkyMDEzLTAxLTA5IDA4OjI3OjQwLjMyODUxNjc5MiArMDIwMAorQEAgLTAsMCArMSwxMiBAQAorKy0tLSBwYW5nby9tb2R1bGVzLmMJMjAxMC0wOS0yMiAwMzozNzowMS4wMDAwMDAwMDAgKzA4MDAKKysrKysgcGFuZ28vbW9kdWxlcy5jCTIwMTItMDUtMDggMjE6MjE6MDIuMDAwMDAwMDAwICswODAwCisrQEAgLTUyOSw3ICs1MjksOCBAQAorKworKyAgIGlmICghZmlsZV9zdHIpCisrICAgICBmaWxlX3N0ciA9IGdfYnVpbGRfZmlsZW5hbWUgKHBhbmdvX2dldF9zeXNjb25mX3N1YmRpcmVjdG9yeSAoKSwKKystCQkJCSAicGFuZ28ubW9kdWxlcyIsCisrKy8qIEZvciBtdWx0aWxpYiBjYXNlLCBrZWVwIG11bHRpcGxlIGNvbmZpZyBmaWxlIGZvciBkaWZmZXJlbnQgbGlicyAqLworKysJCQkJIE1MUFJFRklYICJwYW5nby5tb2R1bGVzIiwKKysgCQkJCSBOVUxMKTsKKysKKysgICBmaWxlcyA9IHBhbmdvX3NwbGl0X2ZpbGVfbGlzdCAoZmlsZV9zdHIpOworZGlmZiAtTnVyZCBwYW5nby0xLjMyLjUvcGFuZ28vcXVlcnltb2R1bGVzLmMgcGFuZ28tMS4zMi41L3BhbmdvL3F1ZXJ5bW9kdWxlcy5jCistLS0gcGFuZ28tMS4zMi41L3BhbmdvL3F1ZXJ5bW9kdWxlcy5jCTIwMTItMDgtMjggMTU6Mjc6MTguMDAwMDAwMDAwICswMzAwCisrKysgcGFuZ28tMS4zMi41L3BhbmdvL3F1ZXJ5bW9kdWxlcy5jCTIwMTMtMDEtMDkgMDg6MzE6NDcuODI4NTExMzU5ICswMjAwCitAQCAtMzA0LDcgKzMwNCw3IEBACisKKyAgICAgICBjYWNoZV9maWxlID0gZ19idWlsZF9maWxlbmFtZSAocGFuZ29fZ2V0X2xpYl9zdWJkaXJlY3RvcnkgKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9WRVJTSU9OLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kdWxlcy5jYWNoZSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1MUFJFRklYICJtb2R1bGVzLmNhY2hlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgZXJyID0gTlVMTDsKKyAgICAgICBpZiAoIWdfZmlsZV9zZXRfY29udGVudHMgKGNhY2hlX2ZpbGUsIGNvbnRlbnRzLT5zdHIsIC0xLCAmZXJyKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTg3YTc1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ28vcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMyBAQAorIyEgL2Jpbi9zaAorCitnbm9tZS1kZXNrdG9wLXRlc3RpbmctcnVubmVyIHBhbmdvCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nb18xLjM2LjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nb18xLjM2LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRlNDI1MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvXzEuMzYuOC5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIHBhbmdvLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyIKKworU1JDX1VSSSArPSAiZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgICBmaWxlOi8vbXVsdGlsaWItZml4LWNsZWFuLnBhdGNoIFwKKyIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiMjE3YTlhNzUzMDA2Mjc1MjE1ZmE5ZmExMjc3NjBlY2UiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIxOGRiYjUxYjhhZTEyYmFlMGFiN2E5NThlN2NmMzMxN2M5YWNmYzhhMWUxMTAzZWMyZjE0NzE2NGEwZmMyZDA3IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdC8wMDAxLXRlc3RzLUZpeC1taXNzaW5nLWluY2x1ZGUtb2YtWHV0aWwuaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXQvMDAwMS10ZXN0cy1GaXgtbWlzc2luZy1pbmNsdWRlLW9mLVh1dGlsLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI3Y2MwNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXQvMDAwMS10ZXN0cy1GaXgtbWlzc2luZy1pbmNsdWRlLW9mLVh1dGlsLmgucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KKworRnJvbSBlNDBlMGEyNWY5OTZkMmUyMDVjNGJkZWMyYzhhNWNjN2Y3NGU1MDY1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KK0RhdGU6IE1vbiwgMTUgSnVuIDIwMTUgMTY6MjU6MzAgLTAzMDAKK1N1YmplY3Q6IHRlc3RzOiBGaXggbWlzc2luZyBpbmNsdWRlIG9mIFh1dGlsLmgKKworVGhlIEVHTCB0ZXN0cyByZWx5IG9uIFh1dGlsLmggYmVpbmcgaW5jbHVkZWQuIFNvbWUgRUdMIGltcGxlbWVudGF0aW9uCitkb2VzIG5vdCBleHBsaXRseSBpbmNsdWRlIGl0IGJ5IGRlZmF1bHQgYW5kIHRoZW4gdGhlIGJ1aWxkIGZhaWxzLgorCitTaWduZWQtb2ZmLWJ5OiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgorUmV2aWV3ZWQtYnk6IE5laWwgUm9iZXJ0cyA8bmVpbEBsaW51eC5pbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS90ZXN0cy9lZ2wvZWdsLWNvbmZpZ2xlc3MtY29udGV4dC5jIGIvdGVzdHMvZWdsL2VnbC1jb25maWdsZXNzLWNvbnRleHQuYworaW5kZXggMDUwNGEyNi4uMTU0YjU1YyAxMDA2NDQKKy0tLSBhL3Rlc3RzL2VnbC9lZ2wtY29uZmlnbGVzcy1jb250ZXh0LmMKKysrKyBiL3Rlc3RzL2VnbC9lZ2wtY29uZmlnbGVzcy1jb250ZXh0LmMKK0BAIC0zMiw2ICszMiw3IEBACisgLyogQ2h1bmtzIG9mIGNvZGUgaW4gdGhpcyBmaWxlIGFyZSB0YWtlbiBmcm9tIGVnbC11dGlsLmMgKi8KKyAKKyAjaW5jbHVkZSA8WDExL1hsaWIuaD4KKysjaW5jbHVkZSA8WDExL1h1dGlsLmg+CisgCisgI2luY2x1ZGUgInBpZ2xpdC11dGlsLWdsLmgiCisgI2luY2x1ZGUgInBpZ2xpdC11dGlsLWVnbC5oIgorLS0gCitjZ2l0IHYwLjEwLjIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXRfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ4MjVjOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXRfZ2l0LmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiT3BlbkdMIGRyaXZlciB0ZXN0aW5nIGZyYW1ld29yayIKK0xJQ0VOU0UgPSAiTUlUICYgTEdQTHYyKyAmIEdQTHYzICYgR1BMdjIrICYgQlNELTMtQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjJiZWRlZDcxMDNhM2Q4YTQ0MmEyYTAzOTFkNjA3YjAiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvcGlnbGl0IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdGVzdHMtRml4LW1pc3NpbmctaW5jbHVkZS1vZi1YdXRpbC5oLnBhdGNoIgorCisjIEZyb20gMjAxNC8xMi8wNAorU1JDUkVWID0gIjEyNmM3ZDA0OWI4ZjMyZTU0MTYyNWQ1YTM1ZmJjNWY1ZTRlN2ZiZjgiCisjICh3aGVuIFBWIGdvZXMgYWJvdmUgMS4wIHJlbW92ZSB0aGUgdHJhaWxpbmcgcikKK1BWID0gIjEuMCtnaXRyJHtTUkNQVn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0RFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlieHJlbmRlciB3YWZmbGUgdmlydHVhbC9saWJnbCBsaWJnbHUgcHl0aG9uLW1ha28tbmF0aXZlIHB5dGhvbi1udW1weS1uYXRpdmUiCisKK2luaGVyaXQgY21ha2UgcHl0aG9ubmF0aXZlIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tmcmVlZ2x1dF0gPSAiLURQSUdMSVRfVVNFX0dMVVQ9MSwtRFBJR0xJVF9VU0VfR0xVVD0wLGZyZWVnbHV0LCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICBpZiBbICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdmcmVlZ2x1dCcsICd5ZXMnLCAnbm8nLCBkKX0iID0gIm5vIiBdOyB0aGVuCisgICAgICAgIHNlZCAtaSAtZSAiL14jLippbmNsdWRlIDxHTFwvZnJlZWdsdXRfZXh0Lmg+JC9kIiAke1N9L3NyYy9waWdsaXQvZ2x1dF93cmFwLmgKKyAgICAgICAgc2VkIC1pIC1lICIvXiMuKmluY2x1ZGUuKjxHTFwvZ2x1dC5oPiQvZCIgJHtTfS9zcmMvcGlnbGl0L2dsdXRfd3JhcC5oCisgICBmaQorfQorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9waWdsaXQvKi8uZGVidWcvIgorCitSREVQRU5EU18ke1BOfSA9ICJ3YWZmbGUgcHl0aG9uIHB5dGhvbi1tYWtvIHB5dGhvbi1qc29uIHB5dGhvbi1zdWJwcm9jZXNzIFwKKwlweXRob24tYXJncGFyc2UgcHl0aG9uLWltcG9ydGxpYiBweXRob24tdW5peGFkbWluIFwKKwlweXRob24tbXVsdGlwcm9jZXNzaW5nIHB5dGhvbi10ZXh0dXRpbHMgcHl0aG9uLW5ldHNlcnZlciBweXRob24tc2hlbGwgXAorCW1lc2EtZGVtb3MgYmFzaCBcCisJIgorCitJTlNBTkVfU0tJUF8ke1BOfSArPSAiZGV2LXNvIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcG9uZy1jbG9jay9wb25nLWNsb2NrL3BvbmctY2xvY2stbm8tZmxpY2tlci5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcG9uZy1jbG9jay9wb25nLWNsb2NrL3BvbmctY2xvY2stbm8tZmxpY2tlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxY2ViYzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wb25nLWNsb2NrL3BvbmctY2xvY2svcG9uZy1jbG9jay1uby1mbGlja2VyLmMKQEAgLTAsMCArMSw0MTAgQEAKKy8qCisgKiBQb25nIENsb2NrIC0gQSBjbG9jayB0aGF0IHBsYXlzIHBvbmcuIAorICogICAgICAgICAgICAgU2VlIGh0dHA6Ly9tb2NvbG9jby5jb20vYXJjaGl2ZXMvMDAxNzY2LnBocCBmb3IgdGhlIGluc3BpcmF0aW9uLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBNYXR0aGV3IEFsbHVtCisgKgorICogQXV0aG9yOiBNYXR0aGV3IEFsbHVtIG1hbGx1bUBvcGVuZWRoYW5kLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorCisjaW5jbHVkZSA8WDExL1hsaWIuaD4KKyNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KKyNpbmNsdWRlIDxYMTEvWGF0b20uaD4KKworLyogVHdlYWsgdmFsdWVzIGZvciBkaWZmZXJlbnQgaHcgc2V0dXBzICovCisKKyNkZWZpbmUgRlBTICAgICAgICAgIDUwCisjZGVmaW5lIFJFU1ggICAgICAgICA0MAorI2RlZmluZSBSRVNZICAgICAgICAgNDAKKyNkZWZpbmUgVE9fTUlTU19TRUNTIDU1CisjZGVmaW5lIEJBTExEWCAgICAgICAxNgorI2RlZmluZSBCQUxMRFkgICAgICAgNAorCisKK3R5cGVkZWYgc3RydWN0IFBvbmdDbG9jaworeworICBEaXNwbGF5ICp4ZHB5OworICBpbnQgICAgICB4c2NyZWVuOworICBXaW5kb3cgICB4d2luLCB4d2luX3Jvb3Q7CisgIFBpeG1hcCAgIGJhY2tidWZmZXI7CisgIEdDICAgICAgIHhnYzsKKyAgaW50ICAgICAgeHdpbl93aWR0aCwgeHdpbl9oZWlnaHQ7CisgIGludCAgICAgIHBpeGVsdywgcGl4ZWxoOworCisgIGludCAgICAgIGJhbGxfeCwgYmFsbF95LCBiYWxsX2R4LCBiYWxsX2R5OworICBpbnQgICAgICBiYXRhX3ksIGJhdGJfeTsKKyAgQm9vbCAgICAgYmF0YV90b19taXNzLCBiYXRiX3RvX21pc3M7CisKK30gCitQb25nQ2xvY2s7CisKK3ZvaWQKK2dldF90aW1lKGludCAqaG91ciwgaW50ICptaW4sIGludCAqc2VjKQoreworICBzdHJ1Y3QgdGltZXZhbCAgIHR2OworICBzdHJ1Y3QgdG0gICAgICAgKmxvY2FsVGltZSA9IE5VTEw7IAorICB0aW1lX3QgICAgICAgICAgIGFjdHVhbFRpbWU7CisKKyAgZ2V0dGltZW9mZGF5KCZ0diwgMCk7CisgIGFjdHVhbFRpbWUgPSB0di50dl9zZWM7CisgIGxvY2FsVGltZSA9IGxvY2FsdGltZSgmYWN0dWFsVGltZSk7CisKKyAgaWYgKGhvdXIpCisgICAgKmhvdXIgPSBsb2NhbFRpbWUtPnRtX2hvdXI7CisgIAorICBpZiAobWluKQorICAgICptaW4gID0gbG9jYWxUaW1lLT50bV9taW47CisKKyAgaWYgKHNlYykKKyAgICAqc2VjICA9IGxvY2FsVGltZS0+dG1fc2VjOworfQorCit2b2lkCitkcmF3X3JlY3QgKFBvbmdDbG9jayAqcG9uZ19jbG9jaywgCisJICAgaW50ICAgICAgICB4LAorCSAgIGludCAgICAgICAgeSwKKwkgICBpbnQgICAgICAgIHdpZHRoLAorCSAgIGludCAgICAgICAgaGVpZ2h0KQoreworICBYRmlsbFJlY3RhbmdsZSAocG9uZ19jbG9jay0+eGRweSwKKwkJICBwb25nX2Nsb2NrLT5iYWNrYnVmZmVyLAorCQkgIHBvbmdfY2xvY2stPnhnYywKKwkJICB4ICogcG9uZ19jbG9jay0+cGl4ZWx3LAorCQkgIHkgKiBwb25nX2Nsb2NrLT5waXhlbGgsCisJCSAgd2lkdGggKiBwb25nX2Nsb2NrLT5waXhlbHcsCisJCSAgaGVpZ2h0ICogcG9uZ19jbG9jay0+cGl4ZWxoKTsKK30KKwordm9pZAorZHJhd19maWVsZCAoUG9uZ0Nsb2NrICpwb25nX2Nsb2NrKQoreworICBpbnQgaTsKKworICBkcmF3X3JlY3QgKHBvbmdfY2xvY2ssIDAsIDAsIFJFU1grMSwgMSk7ICAKKyAgZHJhd19yZWN0IChwb25nX2Nsb2NrLCAwLCBSRVNZLTEsIFJFU1grMSwgMSk7ICAKKworICBmb3IgKGk9MDsgaSA8IFJFU1kvMjsgaSsrKQorICAgIGRyYXdfcmVjdCAocG9uZ19jbG9jaywgKFJFU1gvMiktMSwgaSoyLCAyLCAxKTsgIAorfQorCit2b2lkCitkcmF3X2RpZ2l0IChQb25nQ2xvY2sgKnBvbmdfY2xvY2ssIAorCSAgICBpbnQgICAgICAgIHgsCisJICAgIGludCAgICAgICAgeSwKKwkgICAgaW50ICAgICAgICBkaWdpdCkKK3sKKyAgaW50IGRpZ2l0c1tdID0geyAweDFmOGM2M2YsIDB4MWYyMTA4NiwgMHgxZjBmZTFmLCAweDFmODdlMWYsIDB4MTA4N2UzMSwKKwkJICAgMHgxZjg3YzNmLCAweDFmOGZjM2YsIDB4ODQ0MjFmLCAgMHgxZjhmZTNmLCAweDEwODdlM2YgfTsKKworICBYUmVjdGFuZ2xlIHJlY3RzWzUqNV07CisgIGludCBpLGosazsKKworICBpID0gMDsKKworICBmb3IgKGs9MDsgazw1OyBrKyspIAorICAgIGZvciAoaj0wOyBqPDU7IGorKykJCisgICAgICBpZiAoZGlnaXRzW2RpZ2l0XSAmICgxIDw8ICgoayo1KStqKSkpCisJeworCSAgcmVjdHNbaV0ueCAgICAgID0gKHggKyBqKSAqIHBvbmdfY2xvY2stPnBpeGVsdzsgCisJICByZWN0c1tpXS55ICAgICAgPSAoeSArIGspICogcG9uZ19jbG9jay0+cGl4ZWxoOyAKKwkgIHJlY3RzW2ldLndpZHRoICA9IHBvbmdfY2xvY2stPnBpeGVsdzsKKwkgIHJlY3RzW2ldLmhlaWdodCA9IHBvbmdfY2xvY2stPnBpeGVsaDsgIAorCSAgaSsrOworCX0KKworICBYRmlsbFJlY3RhbmdsZXMgKHBvbmdfY2xvY2stPnhkcHksCisJCSAgIHBvbmdfY2xvY2stPmJhY2tidWZmZXIsCisJCSAgIHBvbmdfY2xvY2stPnhnYywKKwkJICAgcmVjdHMsIGkpOworfSAKKwordm9pZAorZHJhd190aW1lIChQb25nQ2xvY2sgKnBvbmdfY2xvY2spCit7CisgIGludCBob3VyLCBtaW47CisKKyAgZ2V0X3RpbWUoJmhvdXIsICZtaW4sIE5VTEwpOworCisgIGRyYXdfZGlnaXQgKHBvbmdfY2xvY2ssIAorCSAgICAgIChSRVNYLzIpIC0gMTQsCisJICAgICAgNSwKKwkgICAgICBob3VyIC8gMTAgKTsKKworICBkcmF3X2RpZ2l0IChwb25nX2Nsb2NrLCAKKwkgICAgICAoUkVTWC8yKSAtIDgsCisJICAgICAgNSwKKwkgICAgICBob3VyICUgMTAgKTsKKworICBkcmF3X2RpZ2l0IChwb25nX2Nsb2NrLCAKKwkgICAgICAoUkVTWC8yKSArIDMsCisJICAgICAgNSwKKwkgICAgICBtaW4gLyAxMCApOworCisgIGRyYXdfZGlnaXQgKHBvbmdfY2xvY2ssIAorCSAgICAgIChSRVNYLzIpICsgOSwKKwkgICAgICA1LAorCSAgICAgIG1pbiAlIDEwICk7Cit9CisKK3ZvaWQKK2RyYXdfYmF0X2FuZF9iYWxsIChQb25nQ2xvY2sgKnBvbmdfY2xvY2spCit7CisgIC8qIGJhbGwgKi8KKworICBYRmlsbFJlY3RhbmdsZSAocG9uZ19jbG9jay0+eGRweSwKKwkJICBwb25nX2Nsb2NrLT5iYWNrYnVmZmVyLAorCQkgIHBvbmdfY2xvY2stPnhnYywKKwkJICBwb25nX2Nsb2NrLT5iYWxsX3gsCisJCSAgcG9uZ19jbG9jay0+YmFsbF95LAorCQkgIHBvbmdfY2xvY2stPnBpeGVsdywKKwkJICBwb25nX2Nsb2NrLT5waXhlbGgpOworCisgIC8qIGJhdCBhICovCisKKyAgWEZpbGxSZWN0YW5nbGUgKHBvbmdfY2xvY2stPnhkcHksCisJCSAgcG9uZ19jbG9jay0+YmFja2J1ZmZlciwKKwkJICBwb25nX2Nsb2NrLT54Z2MsCisJCSAgMCwKKwkJICBwb25nX2Nsb2NrLT5iYXRhX3kgLSAoMiAqIHBvbmdfY2xvY2stPnBpeGVsaCksCisJCSAgcG9uZ19jbG9jay0+cGl4ZWx3LAorCQkgIHBvbmdfY2xvY2stPnBpeGVsaCAqIDUpOworCisgIC8qIGJhdCBiICovCisKKyAgWEZpbGxSZWN0YW5nbGUgKHBvbmdfY2xvY2stPnhkcHksCisJCSAgcG9uZ19jbG9jay0+YmFja2J1ZmZlciwKKwkJICBwb25nX2Nsb2NrLT54Z2MsCisJCSAgKHBvbmdfY2xvY2stPnh3aW5fd2lkdGggLSBwb25nX2Nsb2NrLT5waXhlbHcpLAorCQkgIHBvbmdfY2xvY2stPmJhdGJfeSAtICgyICogcG9uZ19jbG9jay0+cGl4ZWxoKSwKKwkJICBwb25nX2Nsb2NrLT5waXhlbHcsCisJCSAgcG9uZ19jbG9jay0+cGl4ZWxoICogNSk7CisKK30KKwordm9pZAordXBkYXRlX3N0YXRlIChQb25nQ2xvY2sgKnBvbmdfY2xvY2spCit7CisgIGludCBzZWMsIG1pbiwgaG91cjsKKworICBnZXRfdGltZSgmaG91ciwgJm1pbiwgJnNlYyk7CisKKyAgLyogQ2hlY2sgYmFsbCBpcyBvbiBmaWVsZCBhbmQgbm8gb25lcyBkdWVzIHRvIG1pc3MgYSBzaG90LgorICAqLworICBpZiAoIChwb25nX2Nsb2NrLT5iYWxsX3ggPCAwICYmICFwb25nX2Nsb2NrLT5iYXRhX3RvX21pc3MpIAorICAgICAgfHwgKHBvbmdfY2xvY2stPmJhbGxfeCA+IChwb25nX2Nsb2NrLT54d2luX3dpZHRoIC0gcG9uZ19jbG9jay0+cGl4ZWx3KQorCSAgJiYgIXBvbmdfY2xvY2stPmJhdGJfdG9fbWlzcykgKQorICAgIHBvbmdfY2xvY2stPmJhbGxfZHggKj0gLTE7CisKKyAgaWYgKChwb25nX2Nsb2NrLT5iYWxsX3kgPCBwb25nX2Nsb2NrLT5waXhlbGgpCisgICAgICB8fCBwb25nX2Nsb2NrLT5iYWxsX3kgPiAocG9uZ19jbG9jay0+eHdpbl9oZWlnaHQgLSAoMipwb25nX2Nsb2NrLT5waXhlbGgpKSkKKyAgICBwb25nX2Nsb2NrLT5iYWxsX2R5ICo9IC0xOyAKKworICBwb25nX2Nsb2NrLT5iYWxsX3ggKz0gcG9uZ19jbG9jay0+YmFsbF9keDsKKyAgcG9uZ19jbG9jay0+YmFsbF95ICs9IHBvbmdfY2xvY2stPmJhbGxfZHk7CisKKyAgLyogU2V0IHVwIHNvbWVvbmUgdG8gbWlzcyBpZiB3ZSBnZXR0aW5nIGNsb3NlIHRvIGFuIGhvdXIgb3IgbWluLiAKKyAgICovCisgIGlmIChzZWMgPiBUT19NSVNTX1NFQ1MpCisgICAgeworICAgICAgaWYgKG1pbiA9PSA1OSkKKwlwb25nX2Nsb2NrLT5iYXRiX3RvX21pc3MgPSBUcnVlOwkKKyAgICAgIGVsc2UKKwlwb25nX2Nsb2NrLT5iYXRhX3RvX21pc3MgPSBUcnVlOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIFJlc2V0IHRoZSBnYW1lICovCisgICAgICBpZiAocG9uZ19jbG9jay0+YmF0YV90b19taXNzKQorCXsKKwkgIHBvbmdfY2xvY2stPmJhdGFfdG9fbWlzcyA9IEZhbHNlOworCSAgcG9uZ19jbG9jay0+YmFsbF95ID0gcG9uZ19jbG9jay0+YmF0YV95OyAKKwkgIHBvbmdfY2xvY2stPmJhbGxfeCA9IHBvbmdfY2xvY2stPnBpeGVsdzsgCisJICBwb25nX2Nsb2NrLT5iYWxsX2R4ICo9IC0xOworCX0KKworICAgICAgaWYgKHBvbmdfY2xvY2stPmJhdGJfdG9fbWlzcykKKwl7CisJICBwb25nX2Nsb2NrLT5iYXRiX3RvX21pc3MgPSBGYWxzZTsKKwkgIHBvbmdfY2xvY2stPmJhbGxfeSA9IHBvbmdfY2xvY2stPmJhdGJfeTsgCisJICBwb25nX2Nsb2NrLT5iYWxsX3ggPSBwb25nX2Nsb2NrLT54d2luX3dpZHRoIC0gcG9uZ19jbG9jay0+cGl4ZWx3OworCSAgcG9uZ19jbG9jay0+YmFsbF9keCAqPSAtMTsgCisJfQorICAgIH0KKworICAvKiBLZWVwIGJhdHMgb24gZmllbGQgYW5kIG9ubHkgbW92ZSBpbiBub3Qgc2V0dXAgdG8gbWlzcyAqLworICBpZiAocG9uZ19jbG9jay0+YmFsbF95ID49ICgzKnBvbmdfY2xvY2stPnBpeGVsaCkKKyAgICAgICYmIHBvbmdfY2xvY2stPmJhbGxfeSA8PSAgKHBvbmdfY2xvY2stPnh3aW5faGVpZ2h0IC0gKDUqcG9uZ19jbG9jay0+cGl4ZWxoKSkpCisgIHsKKyAgICBpZiAoIXBvbmdfY2xvY2stPmJhdGJfdG9fbWlzcykgCisgICAgICBwb25nX2Nsb2NrLT5iYXRiX3kgPSBwb25nX2Nsb2NrLT5iYWxsX3k7CisKKyAgICBpZiAoIXBvbmdfY2xvY2stPmJhdGFfdG9fbWlzcykKKyAgICAgIHBvbmdfY2xvY2stPmJhdGFfeSA9IHBvbmdfY2xvY2stPmJhbGxfeTsKKyAgfQorfQorCit2b2lkCitkcmF3X2ZyYW1lIChQb25nQ2xvY2sgKnBvbmdfY2xvY2spCit7CisgIHVwZGF0ZV9zdGF0ZSAocG9uZ19jbG9jayk7CisKKyAgLyogQ2xlYXIgcGxheWZpZWxkICovCisgIFhTZXRGb3JlZ3JvdW5kIChwb25nX2Nsb2NrLT54ZHB5LAorCQkgIHBvbmdfY2xvY2stPnhnYywKKwkJICBCbGFja1BpeGVsKHBvbmdfY2xvY2stPnhkcHksIAorCQkJICAgICBwb25nX2Nsb2NrLT54c2NyZWVuKSk7CisKKyAgWEZpbGxSZWN0YW5nbGUgKHBvbmdfY2xvY2stPnhkcHksCisJCSAgcG9uZ19jbG9jay0+YmFja2J1ZmZlciwKKwkJICBwb25nX2Nsb2NrLT54Z2MsCisJCSAgMCwgMCwKKwkJICBwb25nX2Nsb2NrLT54d2luX3dpZHRoLCAKKwkJICBwb25nX2Nsb2NrLT54d2luX2hlaWdodCk7CisKKyAgWFNldEZvcmVncm91bmQgKHBvbmdfY2xvY2stPnhkcHksCisJCSAgcG9uZ19jbG9jay0+eGdjLAorCQkgIFdoaXRlUGl4ZWwocG9uZ19jbG9jay0+eGRweSwgCisJCQkgICAgIHBvbmdfY2xvY2stPnhzY3JlZW4pKTsKKworICBkcmF3X2ZpZWxkIChwb25nX2Nsb2NrKTsKKworICBkcmF3X3RpbWUgKHBvbmdfY2xvY2spOworCisgIGRyYXdfYmF0X2FuZF9iYWxsIChwb25nX2Nsb2NrKTsKKworICAvKiBmbGlwICdiYWNrYnVmZmVyJyAqLworICBYU2V0V2luZG93QmFja2dyb3VuZFBpeG1hcCAocG9uZ19jbG9jay0+eGRweSwgCisJCQkgICAgICBwb25nX2Nsb2NrLT54d2luLAorCQkJICAgICAgcG9uZ19jbG9jay0+YmFja2J1ZmZlcik7CisgIFhDbGVhcldpbmRvdyhwb25nX2Nsb2NrLT54ZHB5LCBwb25nX2Nsb2NrLT54d2luKTsKKworICBYU3luYyhwb25nX2Nsb2NrLT54ZHB5LCBGYWxzZSk7Cit9CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBYR0NWYWx1ZXMgIGdjdjsKKyAgQXRvbSAgICAgICBhdG9tc19XSU5ET1dfU1RBVEUsIGF0b21zX1dJTkRPV19TVEFURV9GVUxMU0NSRUVOOworICBQb25nQ2xvY2sgKnBvbmdfY2xvY2s7CisKKyAgcG9uZ19jbG9jayA9IG1hbGxvYyhzaXplb2YoUG9uZ0Nsb2NrKSk7CisgIG1lbXNldChwb25nX2Nsb2NrLCAwLCBzaXplb2YoUG9uZ0Nsb2NrKSk7CisKKyAgaWYgKChwb25nX2Nsb2NrLT54ZHB5ID0gWE9wZW5EaXNwbGF5KGdldGVudigiRElTUExBWSIpKSkgPT0gTlVMTCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ2Fubm90IGNvbm5lY3QgdG8gWCBzZXJ2ZXIgb24gZGlzcGxheSAlcy4iLAorCSAgICBnZXRlbnYoIkRJU1BMQVkiKSk7CisgICAgZXhpdCgtMSk7CisgIH0KKworICBwb25nX2Nsb2NrLT54c2NyZWVuICAgICA9IERlZmF1bHRTY3JlZW4ocG9uZ19jbG9jay0+eGRweSk7CisgIHBvbmdfY2xvY2stPnh3aW5fcm9vdCAgID0gRGVmYXVsdFJvb3RXaW5kb3cocG9uZ19jbG9jay0+eGRweSk7CisgIHBvbmdfY2xvY2stPnh3aW5fd2lkdGggID0gRGlzcGxheVdpZHRoKHBvbmdfY2xvY2stPnhkcHksIAorCQkJCQkgcG9uZ19jbG9jay0+eHNjcmVlbik7CisgIHBvbmdfY2xvY2stPnh3aW5faGVpZ2h0ID0gRGlzcGxheUhlaWdodChwb25nX2Nsb2NrLT54ZHB5LCAKKwkJCQkJICBwb25nX2Nsb2NrLT54c2NyZWVuKTsKKworICBwb25nX2Nsb2NrLT5waXhlbHcgID0gcG9uZ19jbG9jay0+eHdpbl93aWR0aCAgLyBSRVNYOworICBwb25nX2Nsb2NrLT5waXhlbGggID0gcG9uZ19jbG9jay0+eHdpbl9oZWlnaHQgLyBSRVNZOworCisgIHBvbmdfY2xvY2stPmJhbGxfeCA9IDA7IAorICBwb25nX2Nsb2NrLT5iYWxsX3kgPSBwb25nX2Nsb2NrLT54d2luX2hlaWdodCAvIDI7IAorCisgIHBvbmdfY2xvY2stPmJhbGxfZHggPSBCQUxMRFg7IAorICBwb25nX2Nsb2NrLT5iYWxsX2R5ID0gQkFMTERZOyAKKworICBwb25nX2Nsb2NrLT5iYXRiX3kgPSBwb25nX2Nsb2NrLT5iYXRhX3kgPSBwb25nX2Nsb2NrLT5iYWxsX3k7CisKKyAgZ2N2LmJhY2tncm91bmQgPSBCbGFja1BpeGVsKHBvbmdfY2xvY2stPnhkcHksIAorCQkJICAgICAgcG9uZ19jbG9jay0+eHNjcmVlbik7CisgIGdjdi5mb3JlZ3JvdW5kID0gV2hpdGVQaXhlbChwb25nX2Nsb2NrLT54ZHB5LCAKKwkJCSAgICAgIHBvbmdfY2xvY2stPnhzY3JlZW4pOworICBnY3YuZ3JhcGhpY3NfZXhwb3N1cmVzID0gRmFsc2U7CisKKyAgcG9uZ19jbG9jay0+eGdjID0gWENyZWF0ZUdDIChwb25nX2Nsb2NrLT54ZHB5LCBwb25nX2Nsb2NrLT54d2luX3Jvb3QsIAorCQkJICAgICAgIEdDRm9yZWdyb3VuZHxHQ0JhY2tncm91bmR8R0NHcmFwaGljc0V4cG9zdXJlcywKKwkJCSAgICAgICAmZ2N2KTsKKworICBhdG9tc19XSU5ET1dfU1RBVEUKKyAgICA9IFhJbnRlcm5BdG9tKHBvbmdfY2xvY2stPnhkcHksICJfTkVUX1dNX1NUQVRFIixGYWxzZSk7CisgIGF0b21zX1dJTkRPV19TVEFURV9GVUxMU0NSRUVOCisgICAgPSBYSW50ZXJuQXRvbShwb25nX2Nsb2NrLT54ZHB5LCAiX05FVF9XTV9TVEFURV9GVUxMU0NSRUVOIixGYWxzZSk7CisKKyAgcG9uZ19jbG9jay0+eHdpbiA9IFhDcmVhdGVTaW1wbGVXaW5kb3cocG9uZ19jbG9jay0+eGRweSwgCisJCQkJCSBwb25nX2Nsb2NrLT54d2luX3Jvb3QsIAorCQkJCQkgMCwgMCwKKwkJCQkJIHBvbmdfY2xvY2stPnh3aW5fd2lkdGgsIAorCQkJCQkgcG9uZ19jbG9jay0+eHdpbl9oZWlnaHQsIAorCQkJCQkgMCwKKwkJCQkJIFdoaXRlUGl4ZWwocG9uZ19jbG9jay0+eGRweSwgCisJCQkJCQkgICAgcG9uZ19jbG9jay0+eHNjcmVlbiksCisJCQkJCSBCbGFja1BpeGVsKHBvbmdfY2xvY2stPnhkcHksIAorCQkJCQkJICAgIHBvbmdfY2xvY2stPnhzY3JlZW4pKTsKKworICBwb25nX2Nsb2NrLT5iYWNrYnVmZmVyID0gWENyZWF0ZVBpeG1hcChwb25nX2Nsb2NrLT54ZHB5LCAKKwkJCQkJIHBvbmdfY2xvY2stPnh3aW5fcm9vdCwKKwkJCQkJIHBvbmdfY2xvY2stPnh3aW5fd2lkdGgsIAorCQkJCQkgcG9uZ19jbG9jay0+eHdpbl9oZWlnaHQsIAorCQkJCQkgRGVmYXVsdERlcHRoKHBvbmdfY2xvY2stPnhkcHksIAorCQkJCQkJICAgICAgcG9uZ19jbG9jay0+eHNjcmVlbikpOworCisgIFhTZWxlY3RJbnB1dChwb25nX2Nsb2NrLT54ZHB5LCBwb25nX2Nsb2NrLT54d2luLCBLZXlQcmVzc01hc2spOworICAKKworICAvKiBTZXQgdGhlIGhpbnRzIGZvciBmdWxsc2NyZWVuICovCisgIFhDaGFuZ2VQcm9wZXJ0eShwb25nX2Nsb2NrLT54ZHB5LCAKKwkJICBwb25nX2Nsb2NrLT54d2luLCAKKwkJICBhdG9tc19XSU5ET1dfU1RBVEUsIAorCQkgIFhBX0FUT00sIAorCQkgIDMyLCAKKwkJICBQcm9wTW9kZVJlcGxhY2UsIAorCQkgICh1bnNpZ25lZCBjaGFyICopICZhdG9tc19XSU5ET1dfU1RBVEVfRlVMTFNDUkVFTiwgMSk7CisKKyAgWE1hcFdpbmRvdyhwb25nX2Nsb2NrLT54ZHB5LCBwb25nX2Nsb2NrLT54d2luKTsKKyAgCisgIHdoaWxlIChUcnVlKSAKKyAgICB7CisgICAgICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OworICAgICAgWEV2ZW50ICAgICAgICAgeGV2OworCisgICAgICB0aW1lb3V0LnR2X3NlYyAgPSAwOworICAgICAgdGltZW91dC50dl91c2VjID0gMTAwMDAwMCAvIEZQUzsgCisgICAgICBzZWxlY3QgKDAsIE5VTEwsIE5VTEwsIE5VTEwsICZ0aW1lb3V0KTsKKworICAgICAgZHJhd19mcmFtZSAocG9uZ19jbG9jayk7CisKKyAgICAgIFhGbHVzaChwb25nX2Nsb2NrLT54ZHB5KTsKKworICAgICAgaWYgKFhQZW5kaW5nKHBvbmdfY2xvY2stPnhkcHkpKQorCXsKKwkgIGlmIChYQ2hlY2tNYXNrRXZlbnQocG9uZ19jbG9jay0+eGRweSwgCisJCQkgICAgICBLZXlQcmVzc01hc2ssCisJCQkgICAgICAmeGV2KSkKKwkgICAgZXhpdCgtMSk7CisJfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BvbmctY2xvY2svcG9uZy1jbG9ja18xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wb25nLWNsb2NrL3BvbmctY2xvY2tfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMWE3OTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wb25nLWNsb2NrL3BvbmctY2xvY2tfMS4wLmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiQSBjbG9jayBjb21iaW5lZCB3aXRoIGEgZ2FtZSBvZiBwb25nIgorTElDRU5TRSA9ICJHUEx2MisiCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIHhkbWNwIHhhdSIKKworaW5oZXJpdCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworU1JDX1VSSSA9ICJmaWxlOi8vcG9uZy1jbG9jay1uby1mbGlja2VyLmMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3BvbmctY2xvY2stbm8tZmxpY2tlci5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjM7bWQ1PWRkMjQ4ZDUwZjczZjc0NmQxZWU3ODU4NmIwYjJlYmQzIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2NvbXBpbGUgKCkgeworCSR7Q0N9IC1vIHBvbmctY2xvY2sgcG9uZy1jbG9jay1uby1mbGlja2VyLmMgYHBrZy1jb25maWcgLS1jZmxhZ3MgLS1saWJzIHgxMSB4YXUgeGRtY3BgCit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSBwb25nLWNsb2NrICR7RH0ke2JpbmRpcn0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3N0YXJ0dXAtbm90aWZpY2F0aW9uL3N0YXJ0dXAtbm90aWZpY2F0aW9uLTAuMTIvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvc3RhcnR1cC1ub3RpZmljYXRpb24vc3RhcnR1cC1ub3RpZmljYXRpb24tMC4xMi9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4NmYyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3N0YXJ0dXAtbm90aWZpY2F0aW9uL3N0YXJ0dXAtbm90aWZpY2F0aW9uLTAuMTIvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD01OTA5N10KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmQgc3RhcnR1cC1ub3RpZmljYXRpb24tMC4xMi9jb25maWd1cmUuaW4gc3RhcnR1cC1ub3RpZmljYXRpb24tMC4xMi9jb25maWd1cmUuaW4KKy0tLSBzdGFydHVwLW5vdGlmaWNhdGlvbi0wLjEyL2NvbmZpZ3VyZS5pbgkyMDExLTA1LTE2IDE3OjI5OjIwLjAwMDAwMDAwMCArMDMwMAorKysrIHN0YXJ0dXAtbm90aWZpY2F0aW9uLTAuMTIvY29uZmlndXJlLmluCTIwMTMtMDEtMDcgMDY6MDA6NDguOTIxOTA1NDA5ICswMjAwCitAQCAtMyw3ICszLDcgQEAKKyBBQ19DT05GSUdfU1JDRElSKGxpYnNuL3NuLWxhdW5jaGVlLmMpCisKKyBBTV9JTklUX0FVVE9NQUtFCistQU1fQ09ORklHX0hFQURFUihjb25maWcuaCkKKytBQ19DT05GSUdfSEVBREVSUyhjb25maWcuaCkKKworICMgSG9ub3IgYWNsb2NhbCBmbGFncworIEFDX1NVQlNUKEFDTE9DQUxfQU1GTEFHUywgIlwke0FDTE9DQUxfRkxBR1N9IikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3N0YXJ0dXAtbm90aWZpY2F0aW9uL3N0YXJ0dXAtbm90aWZpY2F0aW9uXzAuMTIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9zdGFydHVwLW5vdGlmaWNhdGlvbi9zdGFydHVwLW5vdGlmaWNhdGlvbl8wLjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMWI5M2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9zdGFydHVwLW5vdGlmaWNhdGlvbi9zdGFydHVwLW5vdGlmaWNhdGlvbl8wLjEyLmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiRW5hYmxlcyBtb25pdG9yaW5nIGFuZCBkaXNwbGF5IG9mIGFwcGxpY2F0aW9uIHN0YXJ0dXAiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL3N0YXJ0dXAtbm90aWZpY2F0aW9uLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9U3BlY2lmaWNhdGlvbnMiCisKKyMgbW9zdCBmaWxlcyBhcmUgdW5kZXIgTUlULCBidXQgbGlic24vc24tdXRpbC5jIGlzIHVuZGVyIExHUEwsIHRoZQorIyBlZmZlY3RpdmUgbGljZW5zZSBpcyBMR1BMCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hMmFlMmNkNDdkNmQyZjIzODQxMGY1MzY0ZGZiYzBmMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJzbi9zbi11dGlsLmM7ZW5kbGluZT0xODttZDU9MThhMTRkYzE4MjVkMzhlNzQxZDc3MjMxMWZlYTllZTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlic24vc24tY29tbW9uLmg7ZW5kbGluZT0yMzttZDU9NmQwNWJjMGViZGNmNTUxM2E2ZTc3Y2IyNmU4Y2Q3ZTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdC90ZXN0LWJvaWxlcnBsYXRlLmg7ZW5kbGluZT0yMzttZDU9OTIzZTcwNmIyYTcwNTg2MTc2ZWVhZDI2MWNjNWJiOTgiCisKK1BSID0gInIyIgorCitTRUNUSU9OID0gImxpYnMiCisKKworREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJzbSB4Y2ItdXRpbCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL3N0YXJ0dXAtbm90aWZpY2F0aW9uL3JlbGVhc2VzLyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjJjZDc3MzI2ZDRkY2FlZDlhNWEyM2ExMjMyZmIzOGU5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNjMzkxZjdlOTMwYzU4MzA5NTA0NWNkMmQxMGViNzNhNjRmMDg1YzdmZGU5ZDI2MGYyNjUyYzdjYjNjZmJlNGEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy90c2xpYi90c2xpYi90cy5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWIvdHMuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjBkYTkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWIvdHMuY29uZgpAQCAtMCwwICsxLDI1IEBACisjIFVuY29tbWVudCBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlIGxpbnV4IGlucHV0IGxheWVyIGV2ZW50IGludGVyZmFjZQorbW9kdWxlX3JhdyBpbnB1dAorCisjIFVuY29tbWVudCBpZiB5b3UncmUgdXNpbmcgYSBTaGFycCBaYXVydXMgU0wtNTUwMC9TTC01MDAwZAorIyBtb2R1bGVfcmF3IGNvbGxpZQorCisjIFVuY29tbWVudCBpZiB5b3UncmUgdXNpbmcgYSBTaGFycCBaYXVydXMgU0wtQzcwMC9DNzUwL0M3NjAvQzg2MAorIyBtb2R1bGVfcmF3IGNvcmdpCisKKyMgVW5jb21tZW50IGlmIHlvdSdyZSB1c2luZyBhIGRldmljZSB3aXRoIGEgVUNCMTIwMC8xMzAwLzE0MDAgVFMgaW50ZXJmYWNlCisjIG1vZHVsZV9yYXcgdWNiMXgwMAorCisjIFVuY29tbWVudCBpZiB5b3UncmUgdXNpbmcgYW4gSFAgaVBhcSBoMzYwMCBvciBzaW1pbGFyCisjIG1vZHVsZV9yYXcgaDM2MDAKKworIyBVbmNvbW1lbnQgaWYgeW91J3JlIHVzaW5nIGEgSGl0YWNoaSBXZWJwYWQKKyMgbW9kdWxlX3JhdyBtazcxMgorCisjIFVuY29tbWVudCBpZiB5b3UncmUgdXNpbmcgYW4gSUJNIEFyY3RpYyBJSQorIyBtb2R1bGVfcmF3IGFyY3RpYzIKKworbW9kdWxlIHB0aHJlcyBwbWluPTEKK21vZHVsZSB2YXJpYW5jZSBkZWx0YT0zMAorbW9kdWxlIGRlaml0dGVyIGRlbHRhPTEwMAorbW9kdWxlIGxpbmVhcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWIvdHNsaWIuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy90c2xpYi90c2xpYi90c2xpYi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDY4ZThkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWIvdHNsaWIuc2gKQEAgLTAsMCArMSw4IEBACisjIS9iaW4vc2gKKworaWYgWyAtZSAvZGV2L2lucHV0L3RvdWNoc2NyZWVuMCBdOyB0aGVuCisgICAgVFNMSUJfVFNERVZJQ0U9L2Rldi9pbnB1dC90b3VjaHNjcmVlbjAKKworICAgIGV4cG9ydCBUU0xJQl9UU0RFVklDRQorZmkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWJfMS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWJfMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkOGM3ZGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy90c2xpYi90c2xpYl8xLjEuYmIKQEAgLTAsMCArMSw1MyBAQAorU1VNTUFSWSA9ICJBbiBhYnN0cmFjdGlvbiBsYXllciBmb3IgdG91Y2hzY3JlZW4gcGFuZWwgZXZlbnRzIgorREVTQ1JJUFRJT04gPSAiVHNsaWIgaXMgYW4gYWJzdHJhY3Rpb24gbGF5ZXIgZm9yIHRvdWNoc2NyZWVuIHBhbmVsIFwKK2V2ZW50cywgYXMgd2VsbCBhcyBhIGZpbHRlciBzdGFjayBmb3IgdGhlIG1hbmlwdWxhdGlvbiBvZiB0aG9zZSBldmVudHMuIFwKK1RzbGliIGlzIGdlbmVyYWxseSB1c2VkIG9uIGVtYmVkZGVkIGRldmljZXMgdG8gcHJvdmlkZSBhIGNvbW1vbiB1c2VyIFwKK3NwYWNlIGludGVyZmFjZSB0byB0b3VjaHNjcmVlbiBmdW5jdGlvbmFsaXR5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly90c2xpYi5iZXJsaW9zLmRlLyIKKworQVVUSE9SID0gIlJ1c3NlbGwgS2luZyB3LyBwbHVnaW5zIGJ5IENocmlzIExhcnNvbiBldC4gYWwuIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMzBhOTcxNmVmMzc2MmUzNDY3YTJmNjJiZjc5MGYwYSIKKworU1JDX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20va2VyZ290aC90c2xpYi9yZWxlYXNlcy9kb3dubG9hZC8ke1BWfS90c2xpYi0ke1BWfS50YXIueHo7ZG93bmxvYWRmaWxlbmFtZT10c2xpYi0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vdHMuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly90c2xpYi5zaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxNDc3MWY4NjA3YjM0MWJiNGIyOTc4MTlkMzdlODM3ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZTM1ZTVmNzEwZWE5MzNiMTE4ZjcxMGUyY2U0NDAzYWMwNzZmZTY5OTI2YjU3MDMzMzg2N2Q0ZGUwODJhNTFjIgorCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2hhcmVkIC0tZGlzYWJsZS1oMzYwMCAtLWVuYWJsZS1pbnB1dCAtLWRpc2FibGUtY29yZ2kgLS1kaXNhYmxlLWNvbGxpZSAtLWRpc2FibGUtbWs3MTIgLS1kaXNhYmxlLWFyY3RpYzIgLS1kaXNhYmxlLXVjYjF4MDAiCisKK2RvX2luc3RhbGxfcHJlcGVuZCgpIHsKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90cy5jb25mICR7U30vZXRjL3RzLmNvbmYKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9wcm9maWxlLmQvCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vdHNsaWIuc2ggJHtEfSR7c3lzY29uZmRpcn0vcHJvZmlsZS5kLworfQorCisjIFBlb3BsZSBzaG91bGQgY29uc2lkZXIgdXNpbmcgdWRldidzIC9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wIHN5bWxpbmsKKyMgaW5zdGVhZCBvZiBkZXRlY3Qtc3R5bHVzCisjUkRFUEVORFNfdHNsaWItY29uZl93ZWlyZC1tYWNoaW5lID0gImRldGVjdC1zdHlsdXMiCitSUFJPVklERVNfdHNsaWItY29uZiA9ICJsaWJ0cy0wLjAtY29uZiIKKworUEFDS0FHRVMgPSsgInRzbGliLWNvbmYgdHNsaWItdGVzdHMgdHNsaWItY2FsaWJyYXRlIgorREVCSUFOX05PQVVUT05BTUVfdHNsaWItY29uZiA9ICIxIgorREVCSUFOX05PQVVUT05BTUVfdHNsaWItdGVzdHMgPSAiMSIKK0RFQklBTl9OT0FVVE9OQU1FX3RzbGliLWNhbGlicmF0ZSA9ICIxIgorCitSREVQRU5EU18ke1BOfSA9ICJ0c2xpYi1jb25mIgorUlJFQ09NTUVORFNfJHtQTn0gPSAicG9pbnRlcmNhbCIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vdHMvLmRlYnVnKiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3RzLyoubGEiCitGSUxFU190c2xpYi1jb25mID0gIiR7c3lzY29uZmRpcn0vdHMuY29uZiAke3N5c2NvbmZkaXJ9L3Byb2ZpbGUuZC90c2xpYi5zaCAke2RhdGFkaXJ9L3RzbGliIgorRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9Lyouc28uKiAke2xpYmRpcn0vdHMvKi5zbyoiCitGSUxFU190c2xpYi1jYWxpYnJhdGUgKz0gIiR7YmluZGlyfS90c19jYWxpYnJhdGUiCitGSUxFU190c2xpYi10ZXN0cyA9ICIke2JpbmRpcn0vdHNfaGFydmVzdCAke2JpbmRpcn0vdHNfcHJpbnQgJHtiaW5kaXJ9L3RzX3ByaW50X3JhdyAke2JpbmRpcn0vdHNfdGVzdCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3R0Zi1mb250cy9saWJlcmF0aW9uLWZvbnRzLzMwLWxpYmVyYXRpb24tYWxpYXNlcy5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHRmLWZvbnRzL2xpYmVyYXRpb24tZm9udHMvMzAtbGliZXJhdGlvbi1hbGlhc2VzLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYwOTQ1MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3R0Zi1mb250cy9saWJlcmF0aW9uLWZvbnRzLzMwLWxpYmVyYXRpb24tYWxpYXNlcy5jb25mCkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGZvbnRjb25maWcgU1lTVEVNICJmb250cy5kdGQiPgorPCEtLSBjb25mLmQvc3ViLXBpeGVsLmNvbmYgLS0+Cis8Zm9udGNvbmZpZz4KKwk8YWxpYXM+CisJCTxmYW1pbHk+c2Fucy1zZXJpZjwvZmFtaWx5PgorCQk8YWNjZXB0PjxmYW1pbHk+TGliZXJhdGlvbiBTYW5zPC9mYW1pbHk+PC9hY2NlcHQ+CisJPC9hbGlhcz4KKwk8YWxpYXM+CisJCTxmYW1pbHk+c2VyaWY8L2ZhbWlseT4KKwkJPGFjY2VwdD48ZmFtaWx5PkxpYmVyYXRpb24gU2VyaWY8L2ZhbWlseT48L2FjY2VwdD4KKwk8L2FsaWFzPgorCTxhbGlhcz4KKwkJPGZhbWlseT5tb25vc3BhY2U8L2ZhbWlseT4KKwkJPGFjY2VwdD48ZmFtaWx5PkxpYmVyYXRpb24gTW9ubzwvZmFtaWx5PjwvYWNjZXB0PgorCTwvYWxpYXM+Cis8L2ZvbnRjb25maWc+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy90dGYtZm9udHMvbGliZXJhdGlvbi1mb250c18xLjA0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHRmLWZvbnRzL2xpYmVyYXRpb24tZm9udHNfMS4wNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGE4MmU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHRmLWZvbnRzL2xpYmVyYXRpb24tZm9udHNfMS4wNC5iYgpAQCAtMCwwICsxLDQwIEBACitTVU1NQVJZID0gIkxpYmVyYXRpb24odG0pIEZvbnRzIgorREVTQ1JJUFRJT04gPSAiVGhlIExpYmVyYXRpb24odG0pIEZvbnRzIGlzIGEgZm9udCBmYW1pbHkgb3JpZ2luYWxseSBcCitjcmVhdGVkIGJ5IEFzY2VuZGVyKGMpIHdoaWNoIGFpbXMgYXQgbWV0cmljIGNvbXBhdGliaWxpdHkgd2l0aCBcCitBcmlhbCwgVGltZXMgTmV3IFJvbWFuLCBDb3VyaWVyIE5ldy4iCitIT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvbGliZXJhdGlvbi1mb250cy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS8iCisKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIjIueCBkZXBlbmRzIG9uIGZvbnRmb3JnZSBwYWNrYWdlLCB3aGljaCBpcyBub3QgeWV0IHByb3ZpZGVkIGluIG9lLWNvcmUiCisKK1NFQ1RJT04gPSAieDExL2ZvbnRzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorUFIgPSAicjQiCitQRSA9ICIxIgorCitpbmhlcml0IGFsbGFyY2ggZm9udGNhY2hlCisKK0ZPTlRfUEFDS0FHRVMgPSAiJHtQTn0iCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL3JlbGVhc2VzL2wvaS9saWJlcmF0aW9uLWZvbnRzL2xpYmVyYXRpb24tZm9udHMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzMwLWxpYmVyYXRpb24tYWxpYXNlcy5jb25mIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDg0Njc5N2VmMGZjNzBiMGNiYWVkZTI1MTQ2NzdjNTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGUwZDA5NTdjODViNzU4NTYxYTNkNGFlZjRlYmNkMmMzOTk1OWU1MzI4NDI5ZDk2YWUxMDYyNDlkODM1MzFhMSIKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9mb250cy90dGYvCisJZm9yIGkgaW4gKi50dGY7IGRvCisJCWluc3RhbGwgLW0gMDY0NCAkaSAke0R9JHtwcmVmaXh9L3NoYXJlL2ZvbnRzL3R0Zi8ke2l9CisJZG9uZQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9mb250cy9jb25mLmQvCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vMzAtbGliZXJhdGlvbi1hbGlhc2VzLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vZm9udHMvY29uZi5kLworCisJaW5zdGFsbCAtZCAke0R9JHtwcmVmaXh9L3NoYXJlL2RvYy8ke0JQTn0vCisJaW5zdGFsbCAtbSAwNjQ0IExpY2Vuc2UudHh0ICR7RH0ke2RhdGFkaXJ9L2RvYy8ke0JQTn0vCit9CisKK1BBQ0tBR0VTID0gIiR7UE59IgorRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0gJHtkYXRhZGlyfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3R0Zi1mb250cy90dGYtYml0c3RyZWFtLXZlcmFfMS4xMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3R0Zi1mb250cy90dGYtYml0c3RyZWFtLXZlcmFfMS4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmU0Y2VmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHRmLWZvbnRzL3R0Zi1iaXRzdHJlYW0tdmVyYV8xLjEwLmJiCkBAIC0wLDAgKzEsMzggQEAKK1NVTU1BUlkgPSAiVGhlIEJpdHN0cmVhbSBWZXJhIGZvbnRzIC0gVFRGIEVkaXRpb24iCitERVNDUklQVElPTiA9ICJUaGUgQml0c3RyZWFtIFZlcmEgZm9udHMgaW5jbHVkZSBmb3VyIG1vbm9zcGFjZSBhbmQgc2FucyBcCitmYWNlcyAobm9ybWFsLCBvYmxpcXVlLCBib2xkLCBib2xkIG9ibGlxdWUpIGFuZCB0d28gc2VyaWYgZmFjZXMgKG5vcm1hbCBcCithbmQgYm9sZCkuICBJbiBhZGRpdGlvbiBGb250Y29uZmlnL1hmdDIgY2FuIGFydGlmaWNpYWxseSBvYmxpcXVlIHRoZSBcCitzZXJpZiBmYWNlcyBmb3IgeW91OiB0aGlzIGxvc2VzIGhpbnRpbmcgYW5kIGRpc3RvcnRzIHRoZSBmYWNlcyBzbGlnaHRseSwgXAorYnV0IGlzIHZpc2libHkgZGlmZmVyZW50IHRoYW4gbm9ybWFsIGFuZCBib2xkLCBhbmQgcmVhc29uYWJseSBwbGVhc2luZy4iCitTRUNUSU9OID0gIngxMS9mb250cyIKK0xJQ0VOU0UgPSAiQml0c3RyZWFtVmVyYSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlSSUdIVC5UWFQ7bWQ1PTI3ZDc0ODRiMWUxOGQwZWU0Y2U1Mzg2NDRhM2YwNGJlIgorUFIgPSAicjciCisKK2luaGVyaXQgZm9udGNhY2hlCisKK0ZPTlRfUEFDS0FHRVMgPSAiJHtQTn0iCisKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9L3R0Zi1iaXRzdHJlYW0tdmVyYS8xLjEwL3R0Zi1iaXRzdHJlYW0tdmVyYS0ke1BWfS50YXIuYnoyIiAKKworZG9faW5zdGFsbCAoKSB7IAorICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3ByZWZpeH0vc2hhcmUvZm9udHMvdHRmLyAKKyAgICAgICAgZm9yIGkgaW4gKi50dGY7IGRvIAorICAgICAgICAgICAgICAgIGluc3RhbGwgLW0gNjQ0ICRpICR7RH0ke3ByZWZpeH0vc2hhcmUvZm9udHMvdHRmLyR7aX0gCisgICAgICAgIGRvbmUgCisKKwkjIGZvbnRjb25maWcgc2hpcHMgdGhpcyB0b28uICBub3Qgc3VyZSB3aGF0IHRvIGRvIGFib3V0IGl0LgorICAgICAgICAjaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9mb250cyAKKyAgICAgICAgI2luc3RhbGwgLW0gNjQ0IGxvY2FsLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vZm9udHMvbG9jYWwuY29uZiAKKworCisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7cHJlZml4fS9zaGFyZS9kb2MvJHtCUE59LworICAgICAgICBmb3IgaSBpbiAqLlRYVDsgZG8gCisgICAgICAgICAgICAgICAgaW5zdGFsbCAtbSA2NDQgJGkgJHtEfSR7cHJlZml4fS9zaGFyZS9kb2MvJHtCUE59LyRpCisgICAgICAgIGRvbmUgCit9IAorCitGSUxFU18ke1BOfSA9ICIvZXRjICR7ZGF0YWRpcn0vZm9udHMiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiYjIyYmQ1YjQ2NzVmNWRiZTE3YzY5NjNkOGMwMGVkNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkYjViMjdkZjdiYmIzMTgwMzZlYmRiNzVhY2QzZTk4ZjFiZDZlYjY2MDhmYjcwYTY3ZDQ3OGNkMjQzZDE3OGRjIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2FmZmxlL3dhZmZsZV8xLjUuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dhZmZsZS93YWZmbGVfMS41LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhhYTA1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dhZmZsZS93YWZmbGVfMS41LjEuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJjcm9zcy1wbGF0Zm9ybSBDIGxpYnJhcnkgdG8gZGVmZXIgc2VsZWN0aW9uIG9mIEdMIEFQSSBhbmQgb2Ygd2luZG93IHN5c3RlbSIKK0xJQ0VOU0UgPSAiQlNELTItQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PTRjNTE1NDQwN2MyNDkwNzUwZGQ0NjFjNTBhZDk0Nzk3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvd2FmZmxlL3dhZmZsZS5oO2VuZGxpbmU9MjQ7bWQ1PTYxZGJmODY5N2Y2MWM3ODY0NWU3NWE5M2M1ODViMWJmIgorCitTUkNfVVJJID0gImh0dHA6Ly93YWZmbGUtZ2wub3JnL2ZpbGVzL3JlbGVhc2UvJHtCUE59LSR7UFZ9LyR7QlBOfS0ke1BWfS50YXIueHoiCitTUkNfVVJJW21kNXN1bV0gPSAiYzBkODAyYmMzZDBhYmE4N2M1MWU0MjNhM2E4YmRkNjkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2JhYjBlOTI2NTE1MDY0ZTgxOGJmMDg5YTVhZjA0YmUzMzMwN2U1ZjQwZDA3NjU5ZmI0MGQ1OWIyYmZlMjBhYSIKKworaW5oZXJpdCBjbWFrZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgbGliX3BhY2thZ2UKKworIyBUaGlzIHNob3VsZCBiZSBvdmVycmlkZGVuIHBlci1tYWNoaW5lIHRvIHJlZmxlY3QgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgR0wKKyMgc3RhY2suCitQQUNLQUdFQ09ORklHID8/PSAiZ2x4IgorCisjIGxpYngxMSByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTLgorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2dseCcsICd4MTEnLCAnJywgZCl9IgorCisjIEkgc2F5IHZpcnR1YWwvbGliZ2wsIGFjdHVhbGx5IHdhbnRzIGdsLnBjCitQQUNLQUdFQ09ORklHW2dseF0gPSAiLUR3YWZmbGVfaGFzX2dseD0xLC1Ed2FmZmxlX2hhc19nbHg9MCx2aXJ0dWFsL2xpYmdsIGxpYngxMSIKKworIyBJIHNheSB2aXJ0dWFsL2xpYmdsLCBhY3R1YWxseSB3YW50cyB3YXlsYW5kLWVnbC5wYywgZWdsLnBjLCBhbmQgdGhlIHdheWxhbmQKKyMgRElTVFJPX0ZFQVRVUkUuCitQQUNLQUdFQ09ORklHW3dheWxhbmRdID0gIi1Ed2FmZmxlX2hhc193YXlsYW5kPTEsLUR3YWZmbGVfaGFzX3dheWxhbmQ9MCx2aXJ0dWFsL2xpYmdsIHdheWxhbmQiCisKKyMgSSBzYXkgdmlydHVhbC9saWJnbCwgYWN0dWFsbHkgd2FudHMgZ2JtLnBjIGVnbC5wYworUEFDS0FHRUNPTkZJR1tnYm1dID0gIi1Ed2FmZmxlX2hhc19nYm09MSwtRHdhZmZsZV9oYXNfZ2JtPTAsdmlydHVhbC9saWJnbCB1ZGV2IgorCisjIEkgc2F5IHZpcnR1YWwvbGliZ2wsIGFjdHVhbGx5IHdhbnRzIGVnbC5wYworUEFDS0FHRUNPTkZJR1t4MTEtZWdsXSA9ICItRHdhZmZsZV9oYXNfeDExX2VnbD0xLC1Ed2FmZmxlX2hhc194MTFfZWdsPTAsdmlydHVhbC9saWJnbCBsaWJ4Y2IiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS9jbWFrZS9Nb2R1bGVzL0ZpbmRXYWZmbGUuY21ha2UgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vY21ha2UvV2FmZmxlLyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXQvbGliaW5wdXQtY29uZmlndXJlLmFjLWFkZC1hcmctd2l0aC1saWJ1bndpbmQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0L2xpYmlucHV0LWNvbmZpZ3VyZS5hYy1hZGQtYXJnLXdpdGgtbGlidW53aW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNWViY2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0L2xpYmlucHV0LWNvbmZpZ3VyZS5hYy1hZGQtYXJnLXdpdGgtbGlidW53aW5kLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0Zyb20gY2M2ZmNlNTg3ZjI2MjhjOGIzNDI3NjRlMDZmYjBmYzI3YzFlODI3NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDMgQXVnIDIwMTUgMjA6MzM6NDQgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlLmFjOiBhZGQgYXJnIC0td2l0aC1saWJ1bndpbmQKKworQWRkIGFyZyAtLXdpdGgtbGlidW53aW5kIGZvciBjb25maWd1cmUgc28gaXQncyBvcHRpb25hbCB0byBjaGVjaworbGlidW53aW5kLCB3aGljaCBpcyBoZWxwZnVsbCB0byBtYWtlIGRldGVybWluaXN0aWMgYnVpbGRzLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbd2F5bGFuZC1kZXZlbF0KKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDE5ICsrKysrKysrKysrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMzE0YjBkNC4uMjQyZDI1MSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjAsMTMgKzYwLDIyIEBAIFBLR19QUk9HX1BLR19DT05GSUcoKQorIFBLR19DSEVDS19NT0RVTEVTKE1UREVWLCBbbXRkZXYgPj0gMS4xLjBdKQorIFBLR19DSEVDS19NT0RVTEVTKExJQlVERVYsIFtsaWJ1ZGV2XSkKKyBQS0dfQ0hFQ0tfTU9EVUxFUyhMSUJFVkRFViwgW2xpYmV2ZGV2ID49IDAuNF0pCistUEtHX0NIRUNLX01PRFVMRVMoTElCVU5XSU5ELAorKworK0FDX0FSR19XSVRIKGxpYnVud2luZCwKKysgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRob3V0LWxpYnVud2luZF0sW0RvIG5vdCB1c2UgbGlidW53aW5kXSkpCisrCisrQVNfSUYoW3Rlc3QgIngkd2l0aF9saWJ1bndpbmQiICE9ICJ4bm8iXSwKKysJW1BLR19DSEVDS19NT0RVTEVTKExJQlVOV0lORCwKKyAJCSAgW2xpYnVud2luZF0sCisgCQkgIFtIQVZFX0xJQlVOV0lORD15ZXNdLAorLQkJICBbSEFWRV9MSUJVTldJTkQ9bm9dKQorLWlmIHRlc3QgIngkSEFWRV9MSUJVTldJTkQiID0gInh5ZXMiOyB0aGVuCistCUFDX0RFRklORShIQVZFX0xJQlVOV0lORCwgMSwgW0hhdmUgbGlidW53aW5kIHN1cHBvcnRdKQorLWZpCisrCQkgIFtIQVZFX0xJQlVOV0lORD1ub10pXSwKKysJW0hBVkVfTElCVU5XSU5EPW5vXSkKKysKKytBU19JRihbdGVzdCAieCRIQVZFX0xJQlVOV0lORCIgPSAieHllcyJdLAorKwlbQUNfREVGSU5FKEhBVkVfTElCVU5XSU5ELCAxLCBbSGF2ZSBsaWJ1bndpbmQgc3VwcG9ydF0pXSwKKysJW0FTX0lGKFt0ZXN0ICJ4JHdpdGhfbGlidW53aW5kIiA9ICJ4eWVzIl0sCisrCQlbQUNfTVNHX0VSUk9SKFtsaWJ1bndpbmQgcmVxdWVzdGVkIGJ1dCBub3QgZm91bmRdKV0pXSkKKysKKyBBTV9DT05ESVRJT05BTChIQVZFX0xJQlVOV0lORCwgW3Rlc3QgIngkSEFWRV9MSUJVTldJTkQiID0geHllc10pCisgQUNfUEFUSF9QUk9HKEFERFIyTElORSwgW2FkZHIybGluZV0pCisgaWYgdGVzdCAieCRBRERSMkxJTkUiICE9ICJ4IjsgdGhlbgorLS0gCisyLjMuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0L3RvdWNocGFkLXNlcmlhbC1zeW5hcHRpY3MtbmVlZC10by1mYWtlLW5ldy10b3VjaGVzLW9uLVRSSVBMRVRBUC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXQvdG91Y2hwYWQtc2VyaWFsLXN5bmFwdGljcy1uZWVkLXRvLWZha2UtbmV3LXRvdWNoZXMtb24tVFJJUExFVEFQLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YzYzYmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0L3RvdWNocGFkLXNlcmlhbC1zeW5hcHRpY3MtbmVlZC10by1mYWtlLW5ldy10b3VjaGVzLW9uLVRSSVBMRVRBUC5wYXRjaApAQCAtMCwwICsxLDcyIEBACitUaGlzIGlzIGEgd29ya2Fyb3VuZCB1cHN0cmVhbSBzdWdnZXN0cyBmb3IgdXNlIHdpdGgga2VybmVsIDQuMS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt0ZW1wb3Jhcnkgd29yay1hcm91bmRdCitTaWduZWQtT2ZmLUJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorCisKKworRnJvbTogUGV0ZXIgSHV0dGVyZXIgPHBldGVyLmh1dHRlcmVyQHdoby10Lm5ldD4KK0RhdGU6IE1vbiBBdWcgMyAxODoyMzoxMiBQRFQgMjAxNQorU3ViamVjdDogW1BBVENIIHYzIGxpYmlucHV0XSB0b3VjaHBhZDogc2VyaWFsIHN5bmFwdGljcyBuZWVkIHRvIGZha2UgbmV3IHRvdWNoZXMgb24gVFJJUExFVEFQCisKK09uIHRoZSA0LjEga2VybmVscyBzeW5hcHRpY3MgcHJldGVuZHMgdG8gaGF2ZSAzIHNsb3RzICh0aGUgc2VyaWFsIGZ3IG9ubHkgZG9lcworMikuIFRoaXMgd2FzIGFkZGVkIHRvIGF2b2lkIGN1cnNvciBqdW1wcyBidXQgaGFzIHNpbmNlIGJlZW4gcmV2ZXJ0ZWQgZm9yIDQuMgorKGtlcm5lbCBjb21taXQgZGJmM2MzNzA4NiwgNC4xLjMgaXMgc3RpbGwgYnVnZ3kpLiBJbiBzb21lIGNhc2VzIGEgVFJJUExFVEFQCittYXkgYmUgdHJpZ2dlcmVkIHdpdGhvdXQgc2xvdCAyIGV2ZXIgYWN0aXZhdGluZy4KKworV2hpbGUgdGhlcmUgYXJlIHN0aWxsIHRob3NlIGtlcm5lbHMgb3V0IHRoZXJlLCB3b3JrIGFyb3VuZCB0aGlzIGJ1ZyBieSBvcGVuaW5nCithIG5ldyB0b3VjaCBwb2ludCB3aGVyZSBub25lIGV4aXN0cyBpZiB0aGUgZmFrZSBmaW5nZXIgY291bnQgZXhjZWVkcyB0aGUgc2xvdAorY291bnQuCisKK1JlcG9ydGVkLWJ5OiBKYW4gQWxleGFuZGVyIFN0ZWZmZW5zIDxqYW4uc3RlZmZlbnMgYXQgZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogUGV0ZXIgSHV0dGVyZXIgPHBldGVyLmh1dHRlcmVyIGF0IHdoby10Lm5ldD4KK1Rlc3RlZC1ieTogSmFuIEFsZXhhbmRlciBTdGVmZmVucyA8amFuLnN0ZWZmZW5zIGF0IGdtYWlsLmNvbT4KK1Jldmlld2VkLWJ5OiBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZSBhdCByZWRoYXQuY29tPgorLS0tCitDaGFuZ2VzIHRvIHYyOgorLSBzcGxpdCBvdXQgdGhlIGhhbmRsaW5nIGluc3RlYWQgb2YgaGF2aW5nIGEgdG1wIHN0YXRlIHZhcmlhYmxlLCBzZWUgSGFucycKKyAgY29tbWVudHMgZnJvbSB2MgorCitNYWlubHkgc2VuZGluZyB0aGlzIHRvIHRoZSBsaXN0IGFnYWluIHNvIEkgaGF2ZSBhIGxpbmsgdG8gcG9pbnQgcGVvcGxlIHRvLgorSWYgeW91J3JlIG9uIDQuMS54IGFkZCB0aGlzIHBhdGNoIHRvIHlvdXIgZGlzdHJpYnV0aW9uIHBhY2thZ2UuCisKKyBzcmMvZXZkZXYtbXQtdG91Y2hwYWQuYyB8IDIyICsrKysrKysrKysrKysrKystLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9ldmRldi1tdC10b3VjaHBhZC5jIGIvc3JjL2V2ZGV2LW10LXRvdWNocGFkLmMKK2luZGV4IGE2ODNkOWEuLjVlZjAzZDUgMTAwNjQ0CistLS0gYS9zcmMvZXZkZXYtbXQtdG91Y2hwYWQuYworKysrIGIvc3JjL2V2ZGV2LW10LXRvdWNocGFkLmMKK0BAIC0zNjksMTMgKzM2OSwyMyBAQCB0cF9yZXN0b3JlX3N5bmFwdGljc190b3VjaGVzKHN0cnVjdCB0cF9kaXNwYXRjaCAqdHAsCisgCWZvciAoaSA9IDA7IGkgPCB0cC0+bnVtX3Nsb3RzOyBpKyspIHsKKyAJCXN0cnVjdCB0cF90b3VjaCAqdCA9IHRwX2dldF90b3VjaCh0cCwgaSk7CisgCistCQlpZiAodC0+c3RhdGUgIT0gVE9VQ0hfRU5EKQorKwkJc3dpdGNoKHQtPnN0YXRlKSB7CisrCQljYXNlIFRPVUNIX0hPVkVSSU5HOgorKwkJY2FzZSBUT1VDSF9CRUdJTjoKKysJCWNhc2UgVE9VQ0hfVVBEQVRFOgorIAkJCWNvbnRpbnVlOworLQorLQkJLyogbmV3IHRvdWNoLCBtb3ZlIGl0IHRocm91Z2ggYmVnaW4gdG8gdXBkYXRlIGltbWVkaWF0ZWx5ICovCistCQl0cF9uZXdfdG91Y2godHAsIHQsIHRpbWUpOworLQkJdHBfYmVnaW5fdG91Y2godHAsIHQsIHRpbWUpOworLQkJdC0+c3RhdGUgPSBUT1VDSF9VUERBVEU7CisrCQljYXNlIFRPVUNIX05PTkU6CisrCQkJLyogbmV3IHRvdWNoLCBtb3ZlIGl0IHRocm91Z2ggdG8gYmVnaW4gaW1tZWRpYXRlbHkgKi8KKysJCQl0cF9uZXdfdG91Y2godHAsIHQsIHRpbWUpOworKwkJCXRwX2JlZ2luX3RvdWNoKHRwLCB0LCB0aW1lKTsKKysJCQlicmVhazsKKysJCWNhc2UgVE9VQ0hfRU5EOgorKwkJCS8qIHRvdWNoIGp1c3QgZW5kZWQgLHdlIG5lZWQgbmVlZCB0byByZXN0b3JlIGl0IHRvIHVwZGF0ZSAqLworKwkJCXRwX25ld190b3VjaCh0cCwgdCwgdGltZSk7CisrCQkJdHBfYmVnaW5fdG91Y2godHAsIHQsIHRpbWUpOworKwkJCXQtPnN0YXRlID0gVE9VQ0hfVVBEQVRFOworKwkJCWJyZWFrOworKwkJfQorIAl9CisgfQorIAorLS0gCisyLjQuMworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0XzAuMjEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXRfMC4yMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNWEyNDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0XzAuMjEuMC5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIkxpYnJhcnkgdG8gaGFuZGxlIGlucHV0IGRldmljZXMgaW4gV2F5bGFuZCBjb21wb3NpdG9ycyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvbGliaW5wdXQvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTIxODRhZWYzOGZmMTM3ZWQzM2NlOWE2M2I5ZDFlYjhmIgorCitERVBFTkRTID0gImxpYmV2ZGV2IHVkZXYgbXRkZXYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvJHtCUE59LyR7QlB9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9saWJpbnB1dC1jb25maWd1cmUuYWMtYWRkLWFyZy13aXRoLWxpYnVud2luZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90b3VjaHBhZC1zZXJpYWwtc3luYXB0aWNzLW5lZWQtdG8tZmFrZS1uZXctdG91Y2hlcy1vbi1UUklQTEVUQVAucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gImY5MWQ4ZjRjZWQ5ODZmMWFlMTZkNTJlYTAyYmM3ODM3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdjY2U3YTllNTEwZGZlNWM0YTE5YWQwMGU5MzUwODA4ZDRmNTlmODYxMWZkMmI1ZTg3MjEzYzUwNzI4M2Y1NTAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tsaWJ1bndpbmRdID0gIi0td2l0aC1saWJ1bndpbmQsLS13aXRob3V0LWxpYnVud2luZCxsaWJ1bndpbmQiCitQQUNLQUdFQ09ORklHW2d1aV0gPSAiLS1lbmFibGUtZXZlbnQtZ3VpLC0tZGlzYWJsZS1ldmVudC1ndWksY2Fpcm8gZ3RrKzMiCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vdWRldi8iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS91ZGV2Ly5kZWJ1ZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbXRkZXZfMS4xLjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL210ZGV2XzEuMS41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZDBlYmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL210ZGV2XzEuMS41LmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiTXVsdGl0b3VjaCBQcm90b2NvbCBUcmFuc2xhdGlvbiBMaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJtdGRldiBpcyBhIGxpYnJhcnkgd2hpY2ggdHJhbnNmb3JtcyBhbGwgdmFyaWFudHMgb2Yga2VybmVsIFwKK211bHRpdG91Y2ggZXZlbnRzIHRvIHRoZSBzbG90dGVkIHR5cGUgQiBwcm90b2NvbC4gVGhlIGV2ZW50cyBwdXQgaW50byBtdGRldiBtYXkgXAorYmUgZnJvbSBhbnkgTVQgZGV2aWNlLCBzcGVjaWZpY2FsbHkgdHlwZSBBIHdpdGhvdXQgY29udGFjdCB0cmFja2luZywgdHlwZSBBIHdpdGggXAorY29udGFjdCB0cmFja2luZywgb3IgdHlwZSBCIHdpdGggY29udGFjdCB0cmFja2luZyIKKworSE9NRVBBR0UgPSAiaHR0cDovL2JpdG1hdGgub3JnL2NvZGUvbXRkZXYvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWVhNmJkMDI2OGJiMGZjZDZiMjc2OTg2MTZjZWVlNWQ2IgorCitTUkNfVVJJID0gImh0dHA6Ly9iaXRtYXRoLm9yZy9jb2RlLyR7QlBOfS8ke0JQfS50YXIuYnoyIgorU1JDX1VSSVttZDVzdW1dID0gIjUyYzk2MTBiNjAwMmY3MWQxNjQyZGMxYTFjY2E1ZWMxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY2NzdkNTcwOGE3OTQ4ODQwZGU3MzRkOGI0Njc1ZDU5ODBkNDU2MTE3MWM1YThlODllNTRhZGY3YTEzZWJhN2YiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kL2Fsd2F5cy1idWlsZC1zY2FubmVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kL2Fsd2F5cy1idWlsZC1zY2FubmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMGU2YmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmQvYWx3YXlzLWJ1aWxkLXNjYW5uZXIucGF0Y2gKQEAgLTAsMCArMSwxMDUgQEAKK2J1aWxkOiBhbHdheXMgYnVpbGQgd2F5bGFuZC1zY2FubmVyCisKK1RoZSBwcmV2aW91cyBpZGlvbSBmb3IgYnVpbGRpbmcgYSBjcm9zcy1jb21waWxlZCBXYXlsYW5kIGlzIHRvIGJ1aWxkIG9uY2UgZm9yCit0aGUgYnVpbGQgaG9zdCAod2l0aCAtLWVuYWJsZS1zY2FubmVyIC0tZGlzYWJsZS1saWJyYXJpZXMpIHRvIGdldCBhCit3YXlsYW5kLXNjYW5uZXIgYmluYXJ5IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCBpbiBhIGNyb3NzLWNvbXBpbGUgKHdpdGgKKy0tZGlzYWJsZS1zY2FubmVyKS4gIFRoZSBwcm9ibGVtIHdpdGggdGhpcyBpcyB0aGF0IHRoZSBjcm9zcyB3YXlsYW5kIGlzIG1pc3NpbmcKK2Egd2F5bGFuZC1zY2FubmVyIGJpbmFyeSwgd2hpY2ggbWVhbnMgeW91IHRoZW4gY2FuJ3QgZG8gYW55IFdheWxhbmQgZGV2ZWxvcG1lbnQKK29uIHRoZSB0YXJnZXQuCisKK0luc3RlYWQsIGFsd2F5cyBidWlsZCB3YXlsYW5kLXNjYW5uZXIgZm9yIHRoZSB0YXJnZXQgYW5kIGNoYW5nZQorLS1lbmFibGUvZGlzYWJsZS1zY2FubmVyIHRvIC0td2l0aC93aXRob3V0LWhvc3Qtc2Nhbm5lci4gIE5vcm1hbCBidWlsZHMgdXNlIHRoZQorZGVmYXVsdCBvZiAtLXdpdGhvdXQtaG9zdC1zY2FubmVyIGFuZCBydW4gdGhlIHdheWxhbmQtc2Nhbm5lciBpdCBqdXN0IGJ1aWx0LCBhbmQKK2Nyb3NzLWNvbXBpbGVkIGJ1aWxkcyBwYXNzIC0td2l0aC1ob3N0LXNjYW5uZXIgdG8gdXNlIGEgcHJldmlvdXNseSBidWlsdCBob3N0CitzY2FubmVyIGJ1dCBzdGlsbCBnZXQgYSB3YXlsYW5kLXNjYW5uZXIgdG8gaW5zdGFsbC4KKworKGEgdGhlb3JldGljYWxseSBuZWF0ZXIgc29sdXRpb24gd291bGQgYmUgdG8gYnVpbGQgdHdvIHNjYW5uZXJzIGlmIHJlcXVpcmVkIChvbmUKK3RvIHJ1biBhbmQgb25lIHRvIGluc3RhbGwpLCBidXQgYXV0b21ha2UgbWFrZXMgdGhpcyBvdmVybHkgY29tcGxpY2F0ZWQpCisKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggYzE5NDk0Zi4uYzJkOTI5YiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTY0LDE2ICs2NCwxNyBAQCBub2Rpc3RfbGlid2F5bGFuZF9jbGllbnRfbGFfU09VUkNFUyA9CQlcCisgCisgcGtnY29uZmlnX0RBVEEgKz0gc3JjL3dheWxhbmQtY2xpZW50LnBjIHNyYy93YXlsYW5kLXNlcnZlci5wYworIAorLWlmIEVOQUJMRV9TQ0FOTkVSCistd2F5bGFuZF9zY2FubmVyID0gJCh0b3BfYnVpbGRkaXIpL3dheWxhbmQtc2Nhbm5lcgorIGJpbl9QUk9HUkFNUyA9IHdheWxhbmQtc2Nhbm5lcgorIHdheWxhbmRfc2Nhbm5lcl9TT1VSQ0VTID0gc3JjL3NjYW5uZXIuYworIHdheWxhbmRfc2Nhbm5lcl9DRkxBR1MgPSAkKEVYUEFUX0NGTEFHUykgJChBTV9DRkxBR1MpCisgd2F5bGFuZF9zY2FubmVyX0xEQUREID0gJChFWFBBVF9MSUJTKSBsaWJ3YXlsYW5kLXV0aWwubGEKKy0kKEJVSUxUX1NPVVJDRVMpIDogd2F5bGFuZC1zY2FubmVyCisgcGtnY29uZmlnX0RBVEEgKz0gc3JjL3dheWxhbmQtc2Nhbm5lci5wYworLWVsc2UKKysKKytpZiBIT1NUX1NDQU5ORVIKKyB3YXlsYW5kX3NjYW5uZXIgPSB3YXlsYW5kLXNjYW5uZXIKKytlbHNlCisrJChCVUlMVF9TT1VSQ0VTKSA6IHdheWxhbmQtc2Nhbm5lcgorK3dheWxhbmRfc2Nhbm5lciA9ICQodG9wX2J1aWxkZGlyKS93YXlsYW5kLXNjYW5uZXIKKyBlbmRpZgorIAorIHByb3RvY29sLyUtcHJvdG9jb2wuYyA6ICQodG9wX3NyY2RpcikvcHJvdG9jb2wvJS54bWwKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGMyYTgwNGUuLmRlMGIwMmYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTY1LDExICs2NSwxMSBAQCBBQ19DSEVDS19ERUNMKENMT0NLX01PTk9UT05JQyxbXSwKKyAJICAgICAgW1sjaW5jbHVkZSA8dGltZS5oPl1dKQorIEFDX0NIRUNLX0hFQURFUlMoW2V4ZWNpbmZvLmhdKQorIAorLUFDX0FSR19FTkFCTEUoW3NjYW5uZXJdLAorLSAgICAgICAgICAgICAgW0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtc2Nhbm5lcl0sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0Rpc2FibGUgY29tcGlsYXRpb24gb2Ygd2F5bGFuZC1zY2FubmVyXSldLAorLSAgICAgICAgICAgICAgW10sCistICAgICAgICAgICAgICBbZW5hYmxlX3NjYW5uZXI9eWVzXSkKKytBQ19BUkdfV0lUSChbaG9zdC1zY2FubmVyXSwKKysgICAgICAgICAgICBbQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1ob3N0LXNjYW5uZXJdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVXNlIGEgaG9zdCB3YXlsYW5kLXNjYW5uZXJdKV0sCisrICAgICAgICAgICAgW10sCisrICAgICAgICAgICAgW3dpdGhfaG9zdF9zY2FubmVyPW5vXSkKKyAKKyBBQ19BUkdfRU5BQkxFKFtkb2N1bWVudGF0aW9uXSwKKyAJICAgICAgW0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtZG9jdW1lbnRhdGlvbl0sCitAQCAtNzcsMjUgKzc3LDIzIEBAIEFDX0FSR19FTkFCTEUoW2RvY3VtZW50YXRpb25dLAorIAkgICAgICBbXSwKKyAJICAgICAgW2VuYWJsZV9kb2N1bWVudGF0aW9uPXllc10pCisgCistQU1fQ09ORElUSU9OQUwoRU5BQkxFX1NDQU5ORVIsIHRlc3QgIngkZW5hYmxlX3NjYW5uZXIiID0geHllcykKKytBTV9DT05ESVRJT05BTChIT1NUX1NDQU5ORVIsIHRlc3QgIngkd2l0aF9ob3N0X3NjYW5uZXIiID0geHllcykKKyAKKyBBQ19BUkdfV0lUSChpY29uZGlyLCBbICAtLXdpdGgtaWNvbmRpcj08ZGlyPiAgICBMb29rIGZvciBjdXJzb3IgaWNvbnMgaGVyZV0sCisgCQkgICAgIFsgIElDT05ESVI9JHdpdGh2YWxdLAorIAkJICAgICBbICBJQ09ORElSPSR7ZGF0YWRpcn0vaWNvbnNdKQorIEFDX1NVQlNUKFtJQ09ORElSXSkKKyAKKy1pZiB0ZXN0ICJ4JGVuYWJsZV9zY2FubmVyIiA9ICJ4eWVzIjsgdGhlbgorLQlQS0dfQ0hFQ0tfTU9EVUxFUyhFWFBBVCwgW2V4cGF0XSwgW10sCistCQlbQUNfQ0hFQ0tfSEVBREVSUyhleHBhdC5oLCBbXSwKKy0JCQlbQUNfTVNHX0VSUk9SKFtDYW4ndCBmaW5kIGV4cGF0LmguIFBsZWFzZSBpbnN0YWxsIGV4cGF0Ll0pXSkKKy0JCSBTQVZFX0xJQlM9IiRMSUJTIgorLQkJIEFDX1NFQVJDSF9MSUJTKFhNTF9QYXJzZXJDcmVhdGUsIGV4cGF0LCBbXSwKKy0JCQlbQUNfTVNHX0VSUk9SKFtDYW4ndCBmaW5kIGV4cGF0IGxpYnJhcnkuIFBsZWFzZSBpbnN0YWxsIGV4cGF0Ll0pXSkKKy0JCSBFWFBBVF9MSUJTPSIkTElCUyIKKy0JCSBMSUJTPSIkU0FWRV9MSUJTIgorLQkJIEFDX1NVQlNUKEVYUEFUX0xJQlMpCistCQldKQorLWZpCisrUEtHX0NIRUNLX01PRFVMRVMoRVhQQVQsIFtleHBhdF0sIFtdLAorKwlbQUNfQ0hFQ0tfSEVBREVSUyhleHBhdC5oLCBbXSwKKysJCVtBQ19NU0dfRVJST1IoW0Nhbid0IGZpbmQgZXhwYXQuaC4gUGxlYXNlIGluc3RhbGwgZXhwYXQuXSldKQorKwkgU0FWRV9MSUJTPSIkTElCUyIKKysJIEFDX1NFQVJDSF9MSUJTKFhNTF9QYXJzZXJDcmVhdGUsIGV4cGF0LCBbXSwKKysJCVtBQ19NU0dfRVJST1IoW0Nhbid0IGZpbmQgZXhwYXQgbGlicmFyeS4gUGxlYXNlIGluc3RhbGwgZXhwYXQuXSldKQorKwkgRVhQQVRfTElCUz0iJExJQlMiCisrCSBMSUJTPSIkU0FWRV9MSUJTIgorKwkgQUNfU1VCU1QoRVhQQVRfTElCUykKKysJXSkKKyAKKyBBQ19QQVRIX1BST0coWFNMVFBST0MsIHhzbHRwcm9jKQorIEFNX0NPTkRJVElPTkFMKFtIQVZFX1hTTFRQUk9DXSwgW3Rlc3QgIngkWFNMVFBST0MiICE9ICJ4Il0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmQvZGlzYWJsZS1tYWNyby1jaGVja3Mtbm90LXVzZWQtZm9yLXNjYW5uZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmQvZGlzYWJsZS1tYWNyby1jaGVja3Mtbm90LXVzZWQtZm9yLXNjYW5uZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4YmM1NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZC9kaXNhYmxlLW1hY3JvLWNoZWNrcy1ub3QtdXNlZC1mb3Itc2Nhbm5lci5wYXRjaApAQCAtMCwwICsxLDUwIEBACitkaXNhYmxlIG1hY3JvIGNoZWNrcyBub3QgdXNlZCBmb3Igc2Nhbm5lcgorCitXZSBvbmx5IGJ1aWxkIHdheWxhbmQtbmF0aXZlIGZvciB0aGUgc2Nhbm5lciwgc28gZGlzYWJsZSB0aGUgYml0cyB3ZSBkb24ndAorYWN0dWFsbHkgbmVlZC4gVGhpcyBhdm9pZCBidWlsZCBpc3N1ZSBvbiBvbGRlciBkaXN0cm8gc3VjaCBhcyBDZW50b3MgNS54OgorfCBlcnJvcjogJ09fQ0xPRVhFQycgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCit8IGVycm9yOiBzeXMvdGltZXJmZC5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Cit8IGVycm9yOiAnQ0xPQ0tfTU9OT1RPTklDJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikKK3wgZXJyb3I6ICdURkRfQ0xPRVhFQycgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCit8IGVycm9yOiAnU0ZEX0NMT0VYRUMnIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogVGluZyBMaXUgPGIyODQ5NUBmcmVlc2NhbGUuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMjAgKysrKysrKysrKy0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNDEsMTYgKzQxLDE2IEBAIEFDX1NVQlNUKEdDQ19DRkxBR1MpCisgCisgQUNfQ0hFQ0tfRlVOQ1MoW2FjY2VwdDQgbWtvc3RlbXAgcG9zaXhfZmFsbG9jYXRlXSkKKyAKKy1BQ19DSEVDS19ERUNMKFNGRF9DTE9FWEVDLFtdLAorLQkgICAgICBbQUNfTVNHX0VSUk9SKCJTRkRfQ0xPRVhFQyBpcyBuZWVkZWQgdG8gY29tcGlsZSB3YXlsYW5kIildLAorLQkgICAgICBbWyNpbmNsdWRlIDxzeXMvc2lnbmFsZmQuaD5dXSkKKy1BQ19DSEVDS19ERUNMKFRGRF9DTE9FWEVDLFtdLAorLQkgICAgICBbQUNfTVNHX0VSUk9SKCJURkRfQ0xPRVhFQyBpcyBuZWVkZWQgdG8gY29tcGlsZSB3YXlsYW5kIildLAorLQkgICAgICBbWyNpbmNsdWRlIDxzeXMvdGltZXJmZC5oPl1dKQorLUFDX0NIRUNLX0RFQ0woQ0xPQ0tfTU9OT1RPTklDLFtdLAorLQkgICAgICBbQUNfTVNHX0VSUk9SKCJDTE9DS19NT05PVE9OSUMgaXMgbmVlZGVkIHRvIGNvbXBpbGUgd2F5bGFuZCIpXSwKKy0JICAgICAgW1sjaW5jbHVkZSA8dGltZS5oPl1dKQorLUFDX0NIRUNLX0hFQURFUlMoW2V4ZWNpbmZvLmhdKQorKyMjQUNfQ0hFQ0tfREVDTChTRkRfQ0xPRVhFQyxbXSwKKysjCSAgICAgIFtBQ19NU0dfRVJST1IoIlNGRF9DTE9FWEVDIGlzIG5lZWRlZCB0byBjb21waWxlIHdheWxhbmQiKV0sCisrIwkgICAgICBbWyNpbmNsdWRlIDxzeXMvc2lnbmFsZmQuaD5dXSkKKysjQUNfQ0hFQ0tfREVDTChURkRfQ0xPRVhFQyxbXSwKKysjCSAgICAgIFtBQ19NU0dfRVJST1IoIlRGRF9DTE9FWEVDIGlzIG5lZWRlZCB0byBjb21waWxlIHdheWxhbmQiKV0sCisrIwkgICAgICBbWyNpbmNsdWRlIDxzeXMvdGltZXJmZC5oPl1dKQorKyNBQ19DSEVDS19ERUNMKENMT0NLX01PTk9UT05JQyxbXSwKKysjCSAgICAgIFtBQ19NU0dfRVJST1IoIkNMT0NLX01PTk9UT05JQyBpcyBuZWVkZWQgdG8gY29tcGlsZSB3YXlsYW5kIildLAorKyMJICAgICAgW1sjaW5jbHVkZSA8dGltZS5oPl1dKQorKyNBQ19DSEVDS19IRUFERVJTKFtleGVjaW5mby5oXSkKKyAKKyBBQ19BUkdfRU5BQkxFKFtzY2FubmVyXSwKKyAgICAgICAgICAgICAgIFtBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXNjYW5uZXJdLAorLS0gCisxLjguMy4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZF8xLjguMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZF8xLjguMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjlhMGFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kXzEuOC4xLmJiCkBAIC0wLDAgKzEsNDUgQEAKK1NVTU1BUlkgPSAiV2F5bGFuZCwgYSBwcm90b2NvbCBiZXR3ZWVuIGEgY29tcG9zaXRvciBhbmQgY2xpZW50cyIKK0RFU0NSSVBUSU9OID0gIldheWxhbmQgaXMgYSBwcm90b2NvbCBmb3IgYSBjb21wb3NpdG9yIHRvIHRhbGsgdG8gaXRzIGNsaWVudHMgXAorYXMgd2VsbCBhcyBhIEMgbGlicmFyeSBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0IHByb3RvY29sLiBUaGUgY29tcG9zaXRvciBjYW4gYmUgXAorYSBzdGFuZGFsb25lIGRpc3BsYXkgc2VydmVyIHJ1bm5pbmcgb24gTGludXgga2VybmVsIG1vZGVzZXR0aW5nIGFuZCBldmRldiBcCitpbnB1dCBkZXZpY2VzLCBhbiBYIGFwcGxpY2F0aW9uLCBvciBhIHdheWxhbmQgY2xpZW50IGl0c2VsZi4gVGhlIGNsaWVudHMgY2FuIFwKK2JlIHRyYWRpdGlvbmFsIGFwcGxpY2F0aW9ucywgWCBzZXJ2ZXJzIChyb290bGVzcyBvciBmdWxsc2NyZWVuKSBvciBvdGhlciBcCitkaXNwbGF5IHNlcnZlcnMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3dheWxhbmQuZnJlZWRlc2t0b3Aub3JnIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xZDQ0NzZhN2Q5OGRkNTY5MWM1M2Q0ZDQzYTUxMGM3MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvd2F5bGFuZC1zZXJ2ZXIuYztlbmRsaW5lPTIxO21kNT0wNzlhZTIxZGJmOThhZGE1MmVjMjM3NDQ4NTFiMGE1YyIKKworU1JDX1VSSSA9ICJodHRwOi8vd2F5bGFuZC5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9hbHdheXMtYnVpbGQtc2Nhbm5lci5wYXRjaCIKK1NSQ19VUklbbWQ1c3VtXSA9ICI2ZTg3Nzg3N2MzZTA0Y2ZiODY1Y2ZjZDA3MzNjOWFiMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmMTdjOTM4ZDFjMjRmZDBhMTBmNjUwYTYyM2EyNzc1ZDMyOWRiMzE2OGI1NzMyZTQ5OGIwODM4OGVjNzc2ZmM4IgorCitTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIFwKKyAgICBmaWxlOi8vZGlzYWJsZS1tYWNyby1jaGVja3Mtbm90LXVzZWQtZm9yLXNjYW5uZXIucGF0Y2ggXAorICAgICIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS1kaXNhYmxlLWRvY3VtZW50YXRpb24iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK0RFUEVORFMgPSAiZXhwYXQgbGliZmZpIHdheWxhbmQtbmF0aXZlIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWRvY3VtZW50YXRpb24gLS13aXRoLWhvc3Qtc2Nhbm5lciIKKworIyBXYXlsYW5kIGluc3RhbGxzIGEgTTQgbWFjcm8gZm9yIG90aGVyIHByb2plY3RzIHRvIHVzZSwgd2hpY2ggdXNlcyB0aGUgdGFyZ2V0CisjIHBrZy1jb25maWcgdG8gZmluZCBmaWxlcy4gIFJlcGxhY2UgcGtnLWNvbmZpZyB3aXRoIHBrZy1jb25maWctbmF0aXZlLgorZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworICBzZWQgLWUgJ3MsUEtHX0NIRUNLX01PRFVMRVMoLiopLCxnJyBcCisgICAgICAtZSAncywkUEtHX0NPTkZJRyxwa2ctY29uZmlnLW5hdGl2ZSxnJyBcCisgICAgICAtaSAke0R9LyR7ZGF0YWRpcn0vYWNsb2NhbC93YXlsYW5kLXNjYW5uZXIubTQKK30KKworc3lzcm9vdF9zdGFnZV9hbGxfYXBwZW5kX2NsYXNzLXRhcmdldCAoKSB7CisJcm0gJHtTWVNST09UX0RFU1RESVJ9LyR7ZGF0YWRpcn0vYWNsb2NhbC93YXlsYW5kLXNjYW5uZXIubTQKKwljcCAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2FjbG9jYWwvd2F5bGFuZC1zY2FubmVyLm00ICR7U1lTUk9PVF9ERVNURElSfS8ke2RhdGFkaXJ9L2FjbG9jYWwvCit9CisKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS8qJHtTT0xJQlN9IgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0gJHtkYXRhZGlyfS93YXlsYW5kIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24taW5pdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLWluaXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhiNzhiYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLWluaXQuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJTdGFydHVwIHNjcmlwdCBmb3IgdGhlIFdlc3RvbiBXYXlsYW5kIGNvbXBvc2l0b3IiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIgorCitTUkNfVVJJID0gImZpbGU6Ly9pbml0IgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbTc1NSAke1dPUktESVJ9L2luaXQgJHtEfS8ke3N5c2NvbmZkaXJ9L2luaXQuZC93ZXN0b24KK30KKworaW5oZXJpdCBhbGxhcmNoIHVwZGF0ZS1yYy5kCisKK1JERVBFTkRTXyR7UE59ID0gIndlc3RvbiBrYmQiCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJ3ZXN0b24iCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCA5IDUgMiAuIHN0b3AgMjAgMCAxIDYgLiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLWluaXQvaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLWluaXQvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTkzOGY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24taW5pdC9pbml0CkBAIC0wLDAgKzEsNjAgQEAKKyMhL2Jpbi9zaAorIworIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogd2VzdG9uCisjIFJlcXVpcmVkLVN0YXJ0OiAkbG9jYWxfZnMgJHJlbW90ZV9mcworIyBSZXF1aXJlZC1TdG9wOiAkbG9jYWxfZnMgJHJlbW90ZV9mcworIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMjIyBFTkQgSU5JVCBJTkZPCisKK2lmIHRlc3QgLWUgL2V0Yy9kZWZhdWx0L3dlc3RvbiA7IHRoZW4KKyAgICAgICAgLiAvZXRjL2RlZmF1bHQvd2VzdG9uCitmaQorCitraWxscHJvYygpIHsKKyAgICAgICAgcGlkPWAvYmluL3BpZG9mICQxYAorICAgICAgICBbICIkcGlkIiAhPSAiIiBdICYmIGtpbGwgJHBpZAorfQorCityZWFkIENNRExJTkUgPCAvcHJvYy9jbWRsaW5lCitmb3IgeCBpbiAkQ01ETElORTsgZG8KKyAgICAgICAgY2FzZSAkeCBpbgorICAgICAgICB3ZXN0b249ZmFsc2UpCisJCWVjaG8gIldlc3RvbiBkaXNhYmxlZCIKKwkJZXhpdCAwOworICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKK2RvbmUKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgICAgICAuIC9ldGMvcHJvZmlsZQorCisgICAgICAgICMgVGhpcyBpcyBhbGwgYSBuYXN0eSBoYWNrCisgICAgICAgIGlmIHRlc3QgLXogIiRYREdfUlVOVElNRV9ESVIiOyB0aGVuCisgICAgICAgICAgICAgICAgZXhwb3J0IFhER19SVU5USU1FX0RJUj0vcnVuL3VzZXIvcm9vdAorICAgICAgICAgICAgICAgIG1rZGlyIC0tcGFyZW50cyAkWERHX1JVTlRJTUVfRElSCisgICAgICAgICAgICAgICAgY2htb2QgMDcwMCAkWERHX1JVTlRJTUVfRElSCisgICAgICAgIGZpCisKKyAgICAgICAgb3BlbnZ0IC1zIHdlc3RvbiAtLSAkT1BUQVJHUworICA7OworCisgIHN0b3ApCisgICAgICAgIGVjaG8gIlN0b3BwaW5nIFdlc3RvbiIKKyAgICAgICAga2lsbHByb2Mgd2VzdG9uCisgIDs7CisKKyAgcmVzdGFydCkKKwkkMCBzdG9wCisgICAgICAgIHNsZWVwIDEKKyAgICAgICAgJDAgc3RhcnQKKyAgOzsKKworICAqKQorICAgICAgICBlY2hvICJ1c2FnZTogJDAgeyBzdGFydCB8IHN0b3AgfCByZXN0YXJ0IH0iCisgIDs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vMDAwMS1tYWtlLWVycm9yLXBvcnRhYmxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vMDAwMS1tYWtlLWVycm9yLXBvcnRhYmxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ODg0OGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi8wMDAxLW1ha2UtZXJyb3ItcG9ydGFibGUucGF0Y2gKQEAgLTAsMCArMSw4MCBAQAorRnJvbSBjMjJlOTAzNjVkODkzNDYyNTgzOTQ4MzNjYmNhZDAzZmYzMmIyZTI3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWF5IDIwMTUgMjA6NTY6MDAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCB3ZXN0b25dIG1ha2UgZXJyb3IoKSBwb3J0YWJsZQorCitlcnJvcigpIGlzIG5vdCBwb3NpeCBidXQgZ251IGV4dGVuc2lvbiBzbyBtYXkgbm90IGJlIGF2YWlsYWJsZSBvbiBhbGwKK2tpbmQgb2Ygc3lzdGVtc2kgZS5nLiBtdXNsLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCisgY29uZmlndXJlLmFjICAgICAgICB8ICAyICsrCisgc3JjL3dlc3Rvbi1lcnJvci5oICB8IDIwICsrKysrKysrKysrKysrKysrKysrCisgc3JjL3dlc3Rvbi1sYXVuY2guYyB8ICAyICstCisgMyBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy93ZXN0b24tZXJyb3IuaAorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAyNjNmYzIyLi5mNTJjZDYyIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC01Nyw2ICs1Nyw4IEBAIEFDX0NIRUNLX0RFQ0woQ0xPQ0tfTU9OT1RPTklDLFtdLAorIAkgICAgICBbWyNpbmNsdWRlIDx0aW1lLmg+XV0pCisgQUNfQ0hFQ0tfSEVBREVSUyhbZXhlY2luZm8uaF0pCisgCisrQUNfQ0hFQ0tfSEVBREVSUyhbZXJyb3IuaF0pCisrCisgQUNfQ0hFQ0tfRlVOQ1MoW21rb3N0ZW1wIHN0cmNocm51bCBpbml0Z3JvdXBzIHBvc2l4X2ZhbGxvY2F0ZV0pCisgCisgQ09NUE9TSVRPUl9NT0RVTEVTPSJ3YXlsYW5kLXNlcnZlciA+PSAxLjcuOTMgcGl4bWFuLTEgPj0gMC4yNS4yIgorZGlmZiAtLWdpdCBhL3NyYy93ZXN0b24tZXJyb3IuaCBiL3NyYy93ZXN0b24tZXJyb3IuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjIwODlkMDIKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy93ZXN0b24tZXJyb3IuaAorQEAgLTAsMCArMSwyMCBAQAorKyNpZm5kZWYgX1dFU1RPTl9FUlJPUl9ICisrI2RlZmluZSBfV0VTVE9OX0VSUk9SX0gKKysKKysjaWYgZGVmaW5lZChIQVZFX0VSUk9SX0gpCisrI2luY2x1ZGUgPGVycm9yLmg+CisrI2Vsc2UKKysjaW5jbHVkZSA8ZXJyLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNkZWZpbmUgX3dlc3Rvbl9lcnJvcihTLCBFLCBGLCAuLi4pIGRvIHsgXAorKwlpZiAoRSkgXAorKwkJZXJyKFMsIEYgIjogJXMiLCAjI19fVkFfQVJHU19fLCBzdHJlcnJvcihFKSk7IFwKKysJZWxzZSBcCisrCQllcnIoUywgRiwgIyNfX1ZBX0FSR1NfXyk7IFwKKyt9IHdoaWxlKDApCisrCisrI2RlZmluZSBlcnJvciBfd2VzdG9uX2Vycm9yCisrI2VuZGlmCisrCisrI2VuZGlmCisrCitkaWZmIC0tZ2l0IGEvc3JjL3dlc3Rvbi1sYXVuY2guYyBiL3NyYy93ZXN0b24tbGF1bmNoLmMKK2luZGV4IDEwYzY2ZGUuLjNlNmQzMGEgMTAwNjQ0CistLS0gYS9zcmMvd2VzdG9uLWxhdW5jaC5jCisrKysgYi9zcmMvd2VzdG9uLWxhdW5jaC5jCitAQCAtMzAsNyArMzAsNiBAQAorICNpbmNsdWRlIDxwb2xsLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgCistI2luY2x1ZGUgPGVycm9yLmg+CisgI2luY2x1ZGUgPGdldG9wdC5oPgorIAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK0BAIC01Niw2ICs1NSw3IEBACisgI2VuZGlmCisgCisgI2luY2x1ZGUgIndlc3Rvbi1sYXVuY2guaCIKKysjaW5jbHVkZSAid2VzdG9uLWVycm9yLmgiCisgCisgI2RlZmluZSBEUk1fTUFKT1IgMjI2CisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL2Rpc2FibGUtd2F5bGFuZC1zY2FubmVyLXBrZy1jaGVjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL2Rpc2FibGUtd2F5bGFuZC1zY2FubmVyLXBrZy1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGJhMzhiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vZGlzYWJsZS13YXlsYW5kLXNjYW5uZXItcGtnLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK0luZGV4OiBnaXQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgZ2l0L2NvbmZpZ3VyZS5hYworQEAgLTUwMSwxMiArNTAxLDYgQEAgaWYgdGVzdCAieCRoYXZlX2xjbXMiID0geHllczsgdGhlbgorIGZpCisgQU1fQ09ORElUSU9OQUwoSEFWRV9MQ01TLCBbdGVzdCAieCRoYXZlX2xjbXMiID0geHllc10pCisgCistQUNfUEFUSF9QUk9HKFt3YXlsYW5kX3NjYW5uZXJdLCBbd2F5bGFuZC1zY2FubmVyXSkKKy1pZiB0ZXN0IHgkd2F5bGFuZF9zY2FubmVyID0geDsgdGhlbgorLQlQS0dfQ0hFQ0tfTU9EVUxFUyhXQVlMQU5EX1NDQU5ORVIsIFt3YXlsYW5kLXNjYW5uZXJdKQorLQl3YXlsYW5kX3NjYW5uZXI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9d2F5bGFuZF9zY2FubmVyIHdheWxhbmQtc2Nhbm5lcmAKKy1maQorLQorIEFDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGUgc3JjL3ZlcnNpb24uaCBzcmMvd2VzdG9uLnBjXSkKKyAKKyBBTV9DT05ESVRJT05BTChbSEFWRV9HSVRfUkVQT10sIFt0ZXN0IC1mICRzcmNkaXIvLmdpdC9sb2dzL0hFQURdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vbWFrZS1sY21zLWV4cGxpY2l0bHktY29uZmlndXJhYmxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vbWFrZS1sY21zLWV4cGxpY2l0bHktY29uZmlndXJhYmxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZTZkNmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9tYWtlLWxjbXMtZXhwbGljaXRseS1jb25maWd1cmFibGUucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAord2VzdG9uLTEuNS4wL2NvbmZpZ3VyZS5hYzogbWFrZSBsY21zIGV4cGxpY2l0bHkgY29uZmlndXJhYmxlCisKK1RoZSBsY21zIHBhY2thZ2UgaXMgb3V0c2lkZSBvZiBvcGVuZW1iZWRkZWQtY29yZSwgc28gbWFrZSBpdAorZXhwbGljaXRseSBjb25maWd1cmFibGUuIE1ha2UgaXQgZGV0ZXJtaW5pc3RpYywgc28gdGhhdCBpZiBsY21zCitkZXBlbmRlbmNpZXMgYXJlIG1pc3NpbmcsIGF1dG9jb25mIHRocm93cyBhIGZhdGFsIGVycm9yLiBGb2xsb3cKK3Vwc3RyZWFtIHN0eWxlIHRvIG1ha2UgaXQgbW9yZSBsaWtlbHkgdG8gYmUgbWVyZ2VkLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHdlc3Rvbi0xLjUuMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3ZXN0b24tMS41LjAub3JpZy9jb25maWd1cmUuYWMKKysrKyB3ZXN0b24tMS41LjAvY29uZmlndXJlLmFjCitAQCAtNDkxLDEyICs0OTEsMjQgQEAgQUNfQVJHX0VOQUJMRShkZW1vLWNsaWVudHMtaW5zdGFsbCwKKyAJCQkgICAgIGVuYWJsZV9kZW1vX2NsaWVudHNfaW5zdGFsbD1ubykKKyBBTV9DT05ESVRJT05BTChJTlNUQUxMX0RFTU9fQ0xJRU5UUywgW3Rlc3QgIngkZW5hYmxlX2RlbW9fY2xpZW50c19pbnN0YWxsIiA9ICJ4eWVzIl0pCisgCistUEtHX0NIRUNLX01PRFVMRVMoTENNUywgbGNtczIsCistICAgICAgICAgICAgICAgICAgW2hhdmVfbGNtcz15ZXNdLCBbaGF2ZV9sY21zPW5vXSkKKy1pZiB0ZXN0ICJ4JGhhdmVfbGNtcyIgPSB4eWVzOyB0aGVuCistICAgICAgIEFDX0RFRklORShIQVZFX0xDTVMsIDEsIFtIYXZlIGxjbXMgc3VwcG9ydF0pCisrQUNfQVJHX0VOQUJMRShsY21zLAorKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1sY21zXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtEaXNhYmxlIGxjbXMgc3VwcG9ydF0pLCwKKysgICAgICAgICAgICAgIGVuYWJsZV9sY21zPWF1dG8pCisrQU1fQ09ORElUSU9OQUwoSEFWRV9MQ01TLCBbdGVzdCAieCRlbmFibGVfbGNtcyIgPSB4eWVzXSkKKytpZiB0ZXN0ICJ4JGVuYWJsZV9sY21zIiAhPSAieG5vIjsgdGhlbgorKyAgICAgICAgUEtHX0NIRUNLX01PRFVMRVMoTENNUywgCisrICAgICAgICAgICAgICAgICAgICAgICAgIGxjbXMyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBbaGF2ZV9sY21zPXllc10sCisrICAgICAgICAgICAgICAgICAgICAgICAgIFtoYXZlX2xjbXM9bm9dKQorKyAgICAgICAgaWYgdGVzdCAieCRoYXZlX2xjbXMiID0gInhubyIgLWEgIngkZW5hYmxlX2xjbXMiID0gInh5ZXMiOyB0aGVuCisrICAgICAgICAgIEFDX01TR19FUlJPUihbbGNtcyBzdXBwb3J0IGV4cGxpY2l0bHkgcmVxdWVzdGVkLCBidXQgbGNtcyBjb3VsZG4ndCBiZSBmb3VuZF0pCisrICAgICAgICBmaQorKyAgICAgICAgaWYgdGVzdCAieCRoYXZlX2xjbXMiID0gInh5ZXMiOyB0aGVuCisrICAgICAgICAgICAgICAgIGVuYWJsZV9sY21zPXllcworKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9MQ01TLCAxLCBbSGF2ZSBsY21zIHN1cHBvcnRdKQorKyAgICAgICAgZmkKKyBmaQorLUFNX0NPTkRJVElPTkFMKEhBVkVfTENNUywgW3Rlc3QgIngkaGF2ZV9sY21zIiA9IHh5ZXNdKQorIAorIEFDX1BBVEhfUFJPRyhbd2F5bGFuZF9zY2FubmVyXSwgW3dheWxhbmQtc2Nhbm5lcl0pCisgaWYgdGVzdCB4JHdheWxhbmRfc2Nhbm5lciA9IHg7IHRoZW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL21ha2UtbGlid2VicC1leHBsaWNpdGx5LWNvbmZpZ3VyYWJsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL21ha2UtbGlid2VicC1leHBsaWNpdGx5LWNvbmZpZ3VyYWJsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDA3ZDRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vbWFrZS1saWJ3ZWJwLWV4cGxpY2l0bHktY29uZmlndXJhYmxlLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKKworVGhlIGxpYndlYnAgcGFja2FnZSBpcyBvdXRzaWRlIG9mIG9wZW5lbWJlZGRlZC1jb3JlLCBzbyBtYWtlIGl0CitleHBsaWNpdGx5IGNvbmZpZ3VyYWJsZS4gTWFrZSBpdCBkZXRlcm1pbmlzdGljLCBzbyB0aGF0IGlmIGxpYndlYnAgCitkZXBlbmRlbmNpZXMgYXJlIG1pc3NpbmcsIGF1dG9jb25mIHRocm93cyBhIGZhdGFsIGVycm9yLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHdlc3Rvbi0xLjUuMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3ZXN0b24tMS41LjAub3JpZy9jb25maWd1cmUuYWMKKysrKyB3ZXN0b24tMS41LjAvY29uZmlndXJlLmFjCitAQCAtMjY4LDkgKzI2OCwyMiBAQCBmaQorIAorIFBLR19DSEVDS19NT0RVTEVTKFBJWE1BTiwgW3BpeG1hbi0xXSkKKyBQS0dfQ0hFQ0tfTU9EVUxFUyhQTkcsIFtsaWJwbmddKQorLVBLR19DSEVDS19NT0RVTEVTKFdFQlAsIFtsaWJ3ZWJwXSwgW2hhdmVfd2VicD15ZXNdLCBbaGF2ZV93ZWJwPW5vXSkKKy1BU19JRihbdGVzdCAieCRoYXZlX3dlYnAiID0gInh5ZXMiXSwKKy0gICAgICBbQUNfREVGSU5FKFtIQVZFX1dFQlBdLCBbMV0sIFtIYXZlIHdlYnBdKV0pCisrQUNfQVJHX0VOQUJMRSh3ZWJwLAorKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS13ZWJwXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtEaXNhYmxlIGxpYndlYnAgc3VwcG9ydF0pLCwKKysgICAgICAgICAgICAgIGVuYWJsZV93ZWJwPWF1dG8pCisrQU1fQ09ORElUSU9OQUwoSEFWRV9XRUJQLCBbdGVzdCAieCRlbmFibGVfd2VicCIgPSB4eWVzXSkKKytBU19JRihbdGVzdCAieCRlbmFibGVfd2VicCIgIT0gInhubyJdLAorKyAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhXRUJQLAorKyAgICAgICAgICAgICAgICAgICAgIFtsaWJ3ZWJwXSwKKysgICAgICAgICAgICAgICAgICAgICBbaGF2ZV93ZWJwPXllc10sCisrICAgICAgICAgICAgICAgICAgICAgW2hhdmVfd2VicD1ub10pCisrICAgIEFTX0lGKFt0ZXN0ICJ4JGhhdmVfd2VicCIgPSAieG5vIiAtYSAieCRlbmFibGVfd2VicCIgPSAieHllcyJdLAorKyAgICAgICAgQUNfTVNHX0VSUk9SKFtsaWJ3ZWJwIHN1cHBvcnQgZXhwbGljaXRseSByZXF1ZXN0LCBidXQgbGlwd2VicCBjb3VsZCBub3QgYmUgZm91bmRdKSkKKysgICAgQVNfSUYoW3Rlc3QgIngkaGF2ZV93ZWJwIiA9ICJ4eWVzIl0sCisrICAgICAgICBbZW5hYmxlX3dlYnA9eWVzXQorKyAgICAgICAgW0FDX0RFRklORShbSEFWRV9XRUJQXSwgWzFdLCBbSGF2ZSB3ZWJwXSldKQorKykKKyAKKyBBQ19BUkdfRU5BQkxFKHZhYXBpLXJlY29yZGVyLCBbICAtLWVuYWJsZS12YWFwaS1yZWNvcmRlcl0sLAorIAkgICAgICBlbmFibGVfdmFhcGlfcmVjb3JkZXI9YXV0bykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL3BhcmFsbGVsbWFrZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL3BhcmFsbGVsbWFrZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmI1ZWZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vcGFyYWxsZWxtYWtlLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0JhY2twb3J0IHR3byBwYXRjaGVzIGZyb20gdXBzdHJlYW0gdG8gZml4IHBhcmFsbGVsIGJ1aWxkcworCistIG1rZGlyIHJhY2VzICgyZWZmMjJiOGU2ZjZlNTI1NWExOTE1YzMzZGZkOTFjZWNmMDJjYmJjKQorLSB3ZXN0b24uZGVza3RvcCByYWNlICgzMTU0NzZmYTdiMWYxYzQ0YzFiMzUxMTYwMzZkZjU0YWM1Y2I5YTAzKQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggNTgxOWIxOS4uZmYxM2IxOSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTIwLDcgKzIwLDcgQEAgd2VzdG9uLmluaSA6ICQoc3JjZGlyKS93ZXN0b24uaW5pLmluCisgCQkkPCA+ICRACisgCisgaXZpLXNoZWxsL3dlc3Rvbi5pbmkgOiAkKHNyY2RpcikvaXZpLXNoZWxsL3dlc3Rvbi5pbmkuaW4KKy0JJChBTV9WX0dFTikkKFNFRCkgXAorKwkkKEFNX1ZfR0VOKSQoTUtESVJfUCkgJChkaXIgJEApICYmICQoU0VEKSBcCisgCQktZSAnc3xAYmluZGlyW0BdfCQoYmluZGlyKXxnJyBcCisgCQktZSAnc3xAYWJzX3RvcF9idWlsZGRpcltAXXwkKGFic190b3BfYnVpbGRkaXIpfGcnIFwKKyAJCS1lICdzfEBhYnNfdG9wX3NyY2RpcltAXXwkKGFic190b3Bfc3JjZGlyKXxnJyBcCitAQCAtMjksNyArMjksNyBAQCBpdmktc2hlbGwvd2VzdG9uLmluaSA6ICQoc3JjZGlyKS9pdmktc2hlbGwvd2VzdG9uLmluaS5pbgorIAkJJDwgPiAkQAorIAorIHRlc3RzL3dlc3Rvbi1pdmkuaW5pIDogJChzcmNkaXIpL2l2aS1zaGVsbC93ZXN0b24uaW5pLmluCistCSQoQU1fVl9HRU4pJChTRUQpIFwKKysJJChBTV9WX0dFTikkKE1LRElSX1ApICQoZGlyICRAKSAmJiAkKFNFRCkgXAorIAkJLWUgJ3N8QGJpbmRpcltAXXwkKGJpbmRpcil8ZycgXAorIAkJLWUgJ3N8QGFic190b3BfYnVpbGRkaXJbQF18JChhYnNfdG9wX2J1aWxkZGlyKXxnJyBcCisgCQktZSAnc3xAYWJzX3RvcF9zcmNkaXJbQF18JChhYnNfdG9wX3NyY2Rpcil8ZycgXAorQEAgLTE3OSw4ICsxNzksNyBAQCBwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisgcGtnY29uZmlnX0RBVEEgPSBzcmMvd2VzdG9uLnBjCisgCisgd2F5bGFuZF9zZXNzaW9uZGlyID0gJChkYXRhZGlyKS93YXlsYW5kLXNlc3Npb25zCistd2F5bGFuZF9zZXNzaW9uX0RBVEEgPSBzcmMvd2VzdG9uLmRlc2t0b3AKKy1kaXN0X3dheWxhbmRfc2Vzc2lvbl9EQVRBID0gJCh3YXlsYW5kX3Nlc3Npb25fREFUQSkKKytkaXN0X3dheWxhbmRfc2Vzc2lvbl9EQVRBID0gc3JjL3dlc3Rvbi5kZXNrdG9wCisgCisgd2VzdG9uaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvd2VzdG9uCisgd2VzdG9uaW5jbHVkZV9IRUFERVJTID0JCQkJXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vd2VzdG9uLmRlc2t0b3AgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi93ZXN0b24uZGVza3RvcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDg2YWU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vd2VzdG9uLmRlc2t0b3AKQEAgLTAsMCArMSw5IEBACitbRGVza3RvcCBFbnRyeV0KK0VuY29kaW5nPVVURi04CitUeXBlPUFwcGxpY2F0aW9uCitOYW1lPVdlc3RvbgorQ29tbWVudD1XYXlsYW5kIENvbXBvc3RpdG9yCitFeGVjPXdlc3RvbgorSWNvbj13ZXN0b24KK1Rlcm1pbmFsPWZhbHNlCitDYXRlZ29yaWVzPVV0aWxpdHk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi93ZXN0b24ucG5nIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vd2VzdG9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYThiN2UwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vd2VzdG9uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbl8xLjguMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uXzEuOC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MmM2MDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbl8xLjguMC5iYgpAQCAtMCwwICsxLDk0IEBACitTVU1NQVJZID0gIldlc3RvbiwgYSBXYXlsYW5kIGNvbXBvc2l0b3IiCitERVNDUklQVElPTiA9ICJXZXN0b24gaXMgdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiBhIFdheWxhbmQgY29tcG9zaXRvciIKK0hPTUVQQUdFID0gImh0dHA6Ly93YXlsYW5kLmZyZWVkZXNrdG9wLm9yZyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Mjc1ZWZhYzI1NTlhMjI0NTI3YmQ0ZmQ1OTNkMzg0NjYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2NvbXBvc2l0b3IuYztlbmRsaW5lPTIzO21kNT1hOTc5M2YxZWRjOGQxYTRjMzQ0Y2E4YWUyNTIzNTJmYiIKKworU1JDX1VSSSA9ICJodHRwOi8vd2F5bGFuZC5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly93ZXN0b24ucG5nIFwKKyAgICAgICAgICAgZmlsZTovL3dlc3Rvbi5kZXNrdG9wIFwKKyAgICAgICAgICAgZmlsZTovL21ha2UtbGNtcy1leHBsaWNpdGx5LWNvbmZpZ3VyYWJsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYWtlLWxpYndlYnAtZXhwbGljaXRseS1jb25maWd1cmFibGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1tYWtlLWVycm9yLXBvcnRhYmxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BhcmFsbGVsbWFrZS5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiMjRjYjhhN2VkMDUzNWI0ZmMzNjQyNjQzOTg4ZGFiMzYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODk2M2U2OWYzMjhlODE1Y2VjNDJjNTgwNDZjNGFmNzIxNDc2Yzc1NDFiYjdkOWVkYzcxNzQwZmFkYTVhZDMxMiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVzZXJhZGQKKworREVQRU5EUyA9ICJsaWJ4a2Jjb21tb24gZ2RrLXBpeGJ1ZiBwaXhtYW4gY2Fpcm8gZ2xpYi0yLjAganBlZyIKK0RFUEVORFMgKz0gIndheWxhbmQgbGliaW5wdXQgdmlydHVhbC9lZ2wgcGFuZ28iCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zZXR1aWQtaW5zdGFsbCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXh3YXlsYW5kIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1zaW1wbGUtY2xpZW50cyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtY2xpZW50cyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtZGVtby1jbGllbnRzLWluc3RhbGwgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1ycGktY29tcG9zaXRvciBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXJkcC1jb21wb3NpdG9yIFwKKyAgICAgICAgICAgICAgICAiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfcWVtdXg4NiA9ICJcCisJCVdFU1RPTl9OQVRJVkVfQkFDS0VORD1mYmRldi1iYWNrZW5kLnNvIFwKKwkJIgorRVhUUkFfT0VDT05GX2FwcGVuZF9xZW11eDg2LTY0ID0gIlwKKwkJV0VTVE9OX05BVElWRV9CQUNLRU5EPWZiZGV2LWJhY2tlbmQuc28gXAorCQkiCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3YXlsYW5kJywgJ2ttcyBmYmRldiB3YXlsYW5kIGVnbCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2xhdW5jaCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgIgorIworIyBDb21wb3NpdG9yIGNob2ljZXMKKyMKKyMgV2VzdG9uIG9uIEtNUworUEFDS0FHRUNPTkZJR1trbXNdID0gIi0tZW5hYmxlLWRybS1jb21wb3NpdG9yLC0tZGlzYWJsZS1kcm0tY29tcG9zaXRvcixkcm0gdWRldiB2aXJ0dWFsL21lc2EgbXRkZXYiCisjIFdlc3RvbiBvbiBXYXlsYW5kIChuZXN0ZWQgV2VzdG9uKQorUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSA9ICItLWVuYWJsZS13YXlsYW5kLWNvbXBvc2l0b3IsLS1kaXNhYmxlLXdheWxhbmQtY29tcG9zaXRvcix2aXJ0dWFsL21lc2EiCisjIFdlc3RvbiBvbiBYMTEKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTEtY29tcG9zaXRvciwtLWRpc2FibGUteDExLWNvbXBvc2l0b3IsdmlydHVhbC9saWJ4MTEgbGlieGNiIGxpYnhjYiBsaWJ4Y3Vyc29yIGNhaXJvIgorIyBIZWFkbGVzcyBXZXN0b24KK1BBQ0tBR0VDT05GSUdbaGVhZGxlc3NdID0gIi0tZW5hYmxlLWhlYWRsZXNzLWNvbXBvc2l0b3IsLS1kaXNhYmxlLWhlYWRsZXNzLWNvbXBvc2l0b3IiCisjIFdlc3RvbiBvbiBmcmFtZWJ1ZmZlcgorUEFDS0FHRUNPTkZJR1tmYmRldl0gPSAiLS1lbmFibGUtZmJkZXYtY29tcG9zaXRvciwtLWRpc2FibGUtZmJkZXYtY29tcG9zaXRvcix1ZGV2IG10ZGV2IgorIyB3ZXN0b24tbGF1bmNoCitQQUNLQUdFQ09ORklHW2xhdW5jaF0gPSAiLS1lbmFibGUtd2VzdG9uLWxhdW5jaCwtLWRpc2FibGUtd2VzdG9uLWxhdW5jaCxsaWJwYW0gZHJtIgorIyBWQS1BUEkgZGVza3RvcCByZWNvcmRlcgorUEFDS0FHRUNPTkZJR1t2YWFwaV0gPSAiLS1lbmFibGUtdmFhcGktcmVjb3JkZXIsLS1kaXNhYmxlLXZhYXBpLXJlY29yZGVyLGxpYnZhIgorIyBXZXN0b24gd2l0aCBFR0wgc3VwcG9ydAorUEFDS0FHRUNPTkZJR1tlZ2xdID0gIi0tZW5hYmxlLWVnbCAtLWVuYWJsZS1zaW1wbGUtZWdsLWNsaWVudHMsLS1kaXNhYmxlLWVnbCAtLWRpc2FibGUtc2ltcGxlLWVnbC1jbGllbnRzLHZpcnR1YWwvZWdsIgorIyBXZXN0b24gd2l0aCBjYWlybyBnbGVzdjIgc3VwcG9ydAorUEFDS0FHRUNPTkZJR1tjYWlyby1nbGVzdjJdID0gIi0td2l0aC1jYWlyby1nbGVzdjIsLS13aXRoLWNhaXJvPWltYWdlLGNhaXJvIgorIyBXZXN0b24gd2l0aCBsY21zIHN1cHBvcnQKK1BBQ0tBR0VDT05GSUdbbGNtc10gPSAiLS1lbmFibGUtbGNtcywtLWRpc2FibGUtbGNtcyxsY21zIgorIyBXZXN0b24gd2l0aCB3ZWJwIHN1cHBvcnQKK1BBQ0tBR0VDT05GSUdbd2VicF0gPSAiLS1lbmFibGUtd2VicCwtLWRpc2FibGUtd2VicCxsaWJ3ZWJwIgorIyBXZXN0b24gd2l0aCB1bndpbmRpbmcgc3VwcG9ydAorUEFDS0FHRUNPTkZJR1tsaWJ1bndpbmRdID0gIi0tZW5hYmxlLWxpYnVud2luZCwtLWRpc2FibGUtbGlidW53aW5kLGxpYnVud2luZCIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBXZXN0b24gZG9lc24ndCBuZWVkIHRoZSAubGEgZmlsZXMgdG8gbG9hZCBtb2R1bGVzLCBzbyB3aXBlIHRoZW0KKwlybSAtZiAke0R9LyR7bGliZGlyfS93ZXN0b24vKi5sYQorCisJIyBJZiBYMTEsIHNoaXAgYSBkZXNrdG9wIGZpbGUgdG8gbGF1bmNoIGl0CisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIgPSAieDExIiBdOyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vYXBwbGljYXRpb25zCisJCWluc3RhbGwgJHtXT1JLRElSfS93ZXN0b24uZGVza3RvcCAke0R9JHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMKKworCQlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2ljb25zL2hpY29sb3IvNDh4NDgvYXBwcworCQlpbnN0YWxsICR7V09SS0RJUn0vd2VzdG9uLnBuZyAke0R9JHtkYXRhZGlyfS9pY29ucy9oaWNvbG9yLzQ4eDQ4L2FwcHMKKyAgICAgICAgZmkKK30KKworUEFDS0FHRVMgKz0gIiR7UE59LWV4YW1wbGVzIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vd2VzdG9uICR7YmluZGlyfS93ZXN0b24tdGVybWluYWwgJHtiaW5kaXJ9L3dlc3Rvbi1pbmZvICR7YmluZGlyfS93ZXN0b24tbGF1bmNoICR7YmluZGlyfS93Y2FwLWRlY29kZSAke2xpYmV4ZWNkaXJ9ICR7bGliZGlyfS8ke0JQTn0vKi5zbyAke2RhdGFkaXJ9IgorRklMRVNfJHtQTn0tZXhhbXBsZXMgPSAiJHtiaW5kaXJ9LyoiCisKK1JERVBFTkRTXyR7UE59ICs9ICJ4a2V5Ym9hcmQtY29uZmlnIgorUlJFQ09NTUVORFNfJHtQTn0gPSAibGliZXJhdGlvbi1mb250cyIKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK0dST1VQQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIHdlc3Rvbi1sYXVuY2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9YZGVmYXVsdHMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9YZGVmYXVsdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjViNjlkZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hkZWZhdWx0cwpAQCAtMCwwICsxLDMgQEAKK1J4dnQqc2Nyb2xsQmFyX3JpZ2h0OiB0cnVlCitSeHZ0KmZvbnQ6IHhmdDpNb25vOnBpeGVsc2l6ZT05CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXJ2ZXIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2VydmVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNTcwZGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2VydmVyCkBAIC0wLDAgKzEsMTIgQEAKKyMhL2Jpbi9zaAorIworCitYU0VSVkVSPS91c3IvYmluL1hvcmcKKworLiAvZXRjL3Byb2ZpbGUKKworQVJHUz0iIC1iciAtcG4iCisKK0RJU1BMQVk9JzowJworCitleGVjIHhpbml0IC9ldGMvWDExL1hzZXNzaW9uIC0tICRYU0VSVkVSICRESVNQTEFZICRBUkdTICQqCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNzMxMjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbgpAQCAtMCwwICsxLDM4IEBACisjIS9iaW4vc2gKKworaWYgWyAteCAvdXNyL2Jpbi9kYnVzLWxhdW5jaCBdOyB0aGVuCisgICAgIyBBcyB0aGlzIGlzIHRoZSBYIHNlc3Npb24gc2NyaXB0LCBhbHdheXMgc3RhcnQgYSBuZXcgREJ1cyBzZXNzaW9uLgorICAgIGV2YWwgYGRidXMtbGF1bmNoIC0tc2gtc3ludGF4IC0tZXhpdC13aXRoLXNlc3Npb24gPC9kZXYvbnVsbGAKKyAgICBlY2hvICJELUJVUyBwZXItc2Vzc2lvbiBkYWVtb24gYWRkcmVzcyBpczogJERCVVNfU0VTU0lPTl9CVVNfQUREUkVTUyIKK2ZpCisKKy4gL2V0Yy9wcm9maWxlCisKK2lmIFsgLWYgJEhPTUUvLnByb2ZpbGUgXTsgdGhlbgorICAgIC4gJEhPTUUvLnByb2ZpbGUKK2ZpCisKK1NZU1NFU1NJT05ESVI9L2V0Yy9YMTEvWHNlc3Npb24uZAorCitleHBvcnQgQ0xVVFRFUl9ESVNBQkxFX01JUE1BUFBFRF9URVhUPTEKKworZm9yIFNFU1NJT05GSUxFIGluICRTWVNTRVNTSU9ORElSLyo7IGRvCisgICAgc2V0ICtlCisgICAgY2FzZSAiJFNFU1NJT05GSUxFIiBpbgorICAgICAgICAqLnNoKQorICAgICAgICAgICAgLiAiJFNFU1NJT05GSUxFIgorICAgICAgICAgICAgOzsKKyAgICAgICAgKi5zaGJnKQorICAgICAgICAgICAgIiRTRVNTSU9ORklMRSIgJgorICAgICAgICAgICAgOzsKKyAgICAgICAgKn4pCisgICAgICAgICAgICAjIElnbm9yZSBiYWNrdXAgZmlsZXMKKyAgICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgICAiJFNFU1NJT05GSUxFIgorICAgICAgICAgICAgOzsKKyAgICBlc2FjCisgICAgc2V0IC1lCitkb25lCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC8xMmtleW1hcC5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvMTJrZXltYXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlkMTAyYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvMTJrZXltYXAuc2gKQEAgLTAsMCArMSw0IEBACisjIS9iaW4vc2gKKworIyBrZHJpdmUgMS40IGRvZXMgbm90IGhhdmUgZGVmYXVsdCBrZXltYXAgaW4gc2VydmVyCisjeG1vZG1hcCAtIDwvZXRjL1gxMS9kZWZhdWx0Lnhtb2RtYXAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvMTN4ZGdiYXNlZGlycy5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvMTN4ZGdiYXNlZGlycy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTU5NGI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC8xM3hkZ2Jhc2VkaXJzLnNoCkBAIC0wLDAgKzEsMTMgQEAKKyMgTWluaW1hbC9zdHViIGltcGxlbWVudGF0aW9uIG9mIHRoZSBYREcgQmFzZSBEaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbi4KKyMgaHR0cDovL3N0YW5kYXJkcy5mcmVlZGVza3RvcC5vcmcvYmFzZWRpci1zcGVjL2Jhc2VkaXItc3BlYy1sYXRlc3QuaHRtbAorIworIyBXYXlsYW5kIG5lZWRzIFhER19SVU5USU1FX0RJUiwgc28gc2V0IGl0IHRvIC90bXAuICBUaGlzIGlzbid0IGNvbXBsaWFudCB3aXRoCisjIHRoZSBzcGVjaWZpY2F0aW9uICh3cm9uZyBtb2RlLCB3cm9uZyBvd25lcikgYnV0IGl0J3MgbW9zdGx5IHN1ZmZpY2llbnQuCisjCisjIEluIHRoZSBpZGVhbCBjYXNlIHdoZXJlIFN5c3RlbUQgaXMgYm9vdGluZyBhbmQgdXNlcnNwYWNlIGlzIGluaXRpYXRlZCBieSBhCisjIFN5c3RlbUQgdXNlciBzZXNzaW9uIHRoaXMgd2lsbCBoYXZlIGJlZW4gc2V0IGFscmVhZHksIHNvIGRvbid0IG92ZXJ3cml0ZSBpdC4KKworaWYgWyAteiAiJFhHRF9SVU5USU1FX0RJUiIgXTsgdGhlbgorCVhER19SVU5USU1FX0RJUj0iL3RtcCIKKyAgICAgICAgZXhwb3J0IFhER19SVU5USU1FX0RJUgorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvODl4ZGdhdXRvc3RhcnQuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzg5eGRnYXV0b3N0YXJ0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNzAwOGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzg5eGRnYXV0b3N0YXJ0LnNoCkBAIC0wLDAgKzEsNyBAQAorWERHQVVUT1NUQVJUPS9ldGMveGRnL2F1dG9zdGFydAoraWYgWyAtZCAkWERHQVVUT1NUQVJUIF07IHRoZW4KKyAgICBmb3IgU0NSSVBUIGluICRYREdBVVRPU1RBUlQvKjsgZG8KKyAgICAgICAgQ01EPWBncmVwIF5FeGVjPSAkU0NSSVBUIHwgY3V0IC1kICc9JyAtZiAyYAorICAgICAgICAkQ01EICYKKyAgICBkb25lCitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC85MFhXaW5kb3dNYW5hZ2VyLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC85MFhXaW5kb3dNYW5hZ2VyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MzZkZWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzkwWFdpbmRvd01hbmFnZXIuc2gKQEAgLTAsMCArMSw3IEBACitpZiBbIC14ICRIT01FLy5Yc2Vzc2lvbiBdOyB0aGVuCisgICAgZXhlYyAkSE9NRS8uWHNlc3Npb24KK2VsaWYgWyAteCAvdXNyL2Jpbi94LXNlc3Npb24tbWFuYWdlciBdOyB0aGVuCisgICAgZXhlYyAvdXNyL2Jpbi94LXNlc3Npb24tbWFuYWdlcgorZWxzZQorICAgIGV4ZWMgL3Vzci9iaW4veC13aW5kb3ctbWFuYWdlcgorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL2RlZmF1bHQueG1vZG1hcCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL2RlZmF1bHQueG1vZG1hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWExM2ZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvZGVmYXVsdC54bW9kbWFwCkBAIC0wLDAgKzEsMjYwIEBACitrZXljb2RlICAgOCA9CitrZXljb2RlICAgOSA9IEVzY2FwZQora2V5Y29kZSAgMTAgPSAxIGV4Y2xhbQora2V5Y29kZSAgMTEgPSAyIGF0CitrZXljb2RlICAxMiA9IDMgbnVtYmVyc2lnbgora2V5Y29kZSAgMTMgPSA0IGRvbGxhcgora2V5Y29kZSAgMTQgPSA1IHBlcmNlbnQKK2tleWNvZGUgIDE1ID0gNiBhc2NpaWNpcmN1bQora2V5Y29kZSAgMTYgPSA3IGFtcGVyc2FuZCBicmFjZWxlZnQKK2tleWNvZGUgIDE3ID0gOCBhc3RlcmlzayBicmFja2V0bGVmdAora2V5Y29kZSAgMTggPSA5IHBhcmVubGVmdCBicmFja2V0cmlnaHQKK2tleWNvZGUgIDE5ID0gMCBwYXJlbnJpZ2h0IGJyYWNlcmlnaHQKK2tleWNvZGUgIDIwID0gbWludXMgdW5kZXJzY29yZSBiYWNrc2xhc2gKK2tleWNvZGUgIDIxID0gZXF1YWwgcGx1cwora2V5Y29kZSAgMjIgPSBCYWNrU3BhY2UKK2tleWNvZGUgIDIzID0gVGFiCitrZXljb2RlICAyNCA9IHEgUSBxCitrZXljb2RlICAyNSA9IHcgVyB3CitrZXljb2RlICAyNiA9IGUgRQora2V5Y29kZSAgMjcgPSByIFIgcgora2V5Y29kZSAgMjggPSB0IFQgdAora2V5Y29kZSAgMjkgPSB5IFkgeQora2V5Y29kZSAgMzAgPSB1IFUgdQora2V5Y29kZSAgMzEgPSBpIEkgaQora2V5Y29kZSAgMzIgPSBvIE8gbwora2V5Y29kZSAgMzMgPSBwIFAgcAora2V5Y29kZSAgMzQgPSBicmFja2V0bGVmdCBicmFjZWxlZnQKK2tleWNvZGUgIDM1ID0gYnJhY2tldHJpZ2h0IGJyYWNlcmlnaHQgYXNjaWl0aWxkZQora2V5Y29kZSAgMzYgPSBSZXR1cm4KK2tleWNvZGUgIDM3ID0gQ29udHJvbF9MCitrZXljb2RlICAzOCA9IGEgQQora2V5Y29kZSAgMzkgPSBzIFMgcwora2V5Y29kZSAgNDAgPSBkIEQKK2tleWNvZGUgIDQxID0gZiBGCitrZXljb2RlICA0MiA9IGcgRyBnCitrZXljb2RlICA0MyA9IGggSCBoCitrZXljb2RlICA0NCA9IGogSiBqCitrZXljb2RlICA0NSA9IGsgSyBrCitrZXljb2RlICA0NiA9IGwgTCBsCitrZXljb2RlICA0NyA9IHNlbWljb2xvbiBjb2xvbgora2V5Y29kZSAgNDggPSBhcG9zdHJvcGhlIHF1b3RlZGJsCitrZXljb2RlICA0OSA9IGdyYXZlIGFzY2lpdGlsZGUKK2tleWNvZGUgIDUwID0gU2hpZnRfTAora2V5Y29kZSAgNTEgPSBiYWNrc2xhc2ggYmFyCitrZXljb2RlICA1MiA9IHogWiB6CitrZXljb2RlICA1MyA9IHggWCB4CitrZXljb2RlICA1NCA9IGMgQwora2V5Y29kZSAgNTUgPSB2IFYgdgora2V5Y29kZSAgNTYgPSBiIEIKK2tleWNvZGUgIDU3ID0gbiBOIG4KK2tleWNvZGUgIDU4ID0gbSBNIG0KK2tleWNvZGUgIDU5ID0gY29tbWEgbGVzcwora2V5Y29kZSAgNjAgPSBwZXJpb2QgZ3JlYXRlcgora2V5Y29kZSAgNjEgPSBzbGFzaCBxdWVzdGlvbgora2V5Y29kZSAgNjIgPSBTaGlmdF9SCitrZXljb2RlICA2MyA9IEtQX011bHRpcGx5CitrZXljb2RlICA2NCA9IEFsdF9MCitrZXljb2RlICA2NSA9IHNwYWNlCitrZXljb2RlICA2NiA9IENhcHNfTG9jawora2V5Y29kZSAgNjcgPSBGMSBGMTEKK2tleWNvZGUgIDY4ID0gRjIgRjEyCitrZXljb2RlICA2OSA9IEYzIEYxMwora2V5Y29kZSAgNzAgPSBGNCBGMTQKK2tleWNvZGUgIDcxID0gRjUgRjE1CitrZXljb2RlICA3MiA9IEY2IEYxNgora2V5Y29kZSAgNzMgPSBGNyBGMTcKK2tleWNvZGUgIDc0ID0gRjggRjE4CitrZXljb2RlICA3NSA9IEY5IEYxOQora2V5Y29kZSAgNzYgPSBGMTAgRjIwCitrZXljb2RlICA3NyA9IE51bV9Mb2NrCitrZXljb2RlICA3OCA9IFNjcm9sbF9Mb2NrCitrZXljb2RlICA3OSA9IEtQXzcKK2tleWNvZGUgIDgwID0gS1BfOAora2V5Y29kZSAgODEgPSBLUF85CitrZXljb2RlICA4MiA9IEtQX1N1YnRyYWN0CitrZXljb2RlICA4MyA9IEtQXzQKK2tleWNvZGUgIDg0ID0gS1BfNQora2V5Y29kZSAgODUgPSBLUF82CitrZXljb2RlICA4NiA9IEtQX0FkZAora2V5Y29kZSAgODcgPSBLUF8xCitrZXljb2RlICA4OCA9IEtQXzIKK2tleWNvZGUgIDg5ID0gS1BfMwora2V5Y29kZSAgOTAgPSBLUF8wCitrZXljb2RlICA5MSA9IEtQX0RlY2ltYWwKK2tleWNvZGUgIDkyID0KK2tleWNvZGUgIDkzID0KK2tleWNvZGUgIDk0ID0gbGVzcyBncmVhdGVyIGJhcgora2V5Y29kZSAgOTUgPSBGMTEKK2tleWNvZGUgIDk2ID0gRjEyCitrZXljb2RlICA5NyA9CitrZXljb2RlICA5OCA9CitrZXljb2RlICA5OSA9CitrZXljb2RlIDEwMCA9CitrZXljb2RlIDEwMSA9CitrZXljb2RlIDEwMiA9CitrZXljb2RlIDEwMyA9CitrZXljb2RlIDEwNCA9IEtQX0VudGVyCitrZXljb2RlIDEwNSA9IENvbnRyb2xfUgora2V5Y29kZSAxMDYgPSBLUF9EaXZpZGUKK2tleWNvZGUgMTA3ID0KK2tleWNvZGUgMTA4ID0gTW9kZV9zd2l0Y2gKK2tleWNvZGUgMTA5ID0gQnJlYWsKK2tleWNvZGUgMTEwID0gSG9tZQora2V5Y29kZSAxMTEgPSBVcAora2V5Y29kZSAxMTIgPSBQcmlvcgora2V5Y29kZSAxMTMgPSBMZWZ0CitrZXljb2RlIDExNCA9IFJpZ2h0CitrZXljb2RlIDExNSA9IEVuZAora2V5Y29kZSAxMTYgPSBEb3duCitrZXljb2RlIDExNyA9IE5leHQKK2tleWNvZGUgMTE4ID0gSW5zZXJ0CitrZXljb2RlIDExOSA9IERlbGV0ZQora2V5Y29kZSAxMjAgPSBNZW51CitrZXljb2RlIDEyMSA9IEYxMwora2V5Y29kZSAxMjIgPSBGMTQKK2tleWNvZGUgMTIzID0gSGVscAora2V5Y29kZSAxMjQgPSBFeGVjdXRlCitrZXljb2RlIDEyNSA9IEYxNwora2V5Y29kZSAxMjYgPSBLUF9TdWJ0cmFjdAora2V5Y29kZSAxMjcgPSBQYXVzZQora2V5Y29kZSAxMjggPQora2V5Y29kZSAxMjkgPQora2V5Y29kZSAxMzAgPQora2V5Y29kZSAxMzEgPQora2V5Y29kZSAxMzIgPQora2V5Y29kZSAxMzMgPQora2V5Y29kZSAxMzQgPQora2V5Y29kZSAxMzUgPQora2V5Y29kZSAxMzYgPQora2V5Y29kZSAxMzcgPQora2V5Y29kZSAxMzggPQora2V5Y29kZSAxMzkgPQora2V5Y29kZSAxNDAgPQora2V5Y29kZSAxNDEgPQora2V5Y29kZSAxNDIgPQora2V5Y29kZSAxNDMgPQora2V5Y29kZSAxNDQgPQora2V5Y29kZSAxNDUgPQora2V5Y29kZSAxNDYgPQora2V5Y29kZSAxNDcgPQora2V5Y29kZSAxNDggPQora2V5Y29kZSAxNDkgPQora2V5Y29kZSAxNTAgPQora2V5Y29kZSAxNTEgPQora2V5Y29kZSAxNTIgPQora2V5Y29kZSAxNTMgPQora2V5Y29kZSAxNTQgPQora2V5Y29kZSAxNTUgPQora2V5Y29kZSAxNTYgPQora2V5Y29kZSAxNTcgPQora2V5Y29kZSAxNTggPQora2V5Y29kZSAxNTkgPQora2V5Y29kZSAxNjAgPQora2V5Y29kZSAxNjEgPQora2V5Y29kZSAxNjIgPQora2V5Y29kZSAxNjMgPQora2V5Y29kZSAxNjQgPQora2V5Y29kZSAxNjUgPQora2V5Y29kZSAxNjYgPQora2V5Y29kZSAxNjcgPQora2V5Y29kZSAxNjggPQora2V5Y29kZSAxNjkgPQora2V5Y29kZSAxNzAgPQora2V5Y29kZSAxNzEgPQora2V5Y29kZSAxNzIgPQora2V5Y29kZSAxNzMgPQora2V5Y29kZSAxNzQgPQora2V5Y29kZSAxNzUgPQora2V5Y29kZSAxNzYgPQora2V5Y29kZSAxNzcgPQora2V5Y29kZSAxNzggPQora2V5Y29kZSAxNzkgPQora2V5Y29kZSAxODAgPQora2V5Y29kZSAxODEgPQora2V5Y29kZSAxODIgPQora2V5Y29kZSAxODMgPQora2V5Y29kZSAxODQgPQora2V5Y29kZSAxODUgPQora2V5Y29kZSAxODYgPQora2V5Y29kZSAxODcgPQora2V5Y29kZSAxODggPQora2V5Y29kZSAxODkgPQora2V5Y29kZSAxOTAgPQora2V5Y29kZSAxOTEgPQora2V5Y29kZSAxOTIgPQora2V5Y29kZSAxOTMgPQora2V5Y29kZSAxOTQgPQora2V5Y29kZSAxOTUgPQora2V5Y29kZSAxOTYgPQora2V5Y29kZSAxOTcgPQora2V5Y29kZSAxOTggPQora2V5Y29kZSAxOTkgPQora2V5Y29kZSAyMDAgPQora2V5Y29kZSAyMDEgPQora2V5Y29kZSAyMDIgPQora2V5Y29kZSAyMDMgPQora2V5Y29kZSAyMDQgPQora2V5Y29kZSAyMDUgPQora2V5Y29kZSAyMDYgPQora2V5Y29kZSAyMDcgPQora2V5Y29kZSAyMDggPQora2V5Y29kZSAyMDkgPQora2V5Y29kZSAyMTAgPQora2V5Y29kZSAyMTEgPQora2V5Y29kZSAyMTIgPQora2V5Y29kZSAyMTMgPQora2V5Y29kZSAyMTQgPQora2V5Y29kZSAyMTUgPQora2V5Y29kZSAyMTYgPQora2V5Y29kZSAyMTcgPQora2V5Y29kZSAyMTggPQora2V5Y29kZSAyMTkgPQora2V5Y29kZSAyMjAgPQora2V5Y29kZSAyMjEgPQora2V5Y29kZSAyMjIgPQora2V5Y29kZSAyMjMgPQora2V5Y29kZSAyMjQgPQora2V5Y29kZSAyMjUgPQora2V5Y29kZSAyMjYgPQora2V5Y29kZSAyMjcgPQora2V5Y29kZSAyMjggPQora2V5Y29kZSAyMjkgPQora2V5Y29kZSAyMzAgPQora2V5Y29kZSAyMzEgPQora2V5Y29kZSAyMzIgPQora2V5Y29kZSAyMzMgPQora2V5Y29kZSAyMzQgPQora2V5Y29kZSAyMzUgPQora2V5Y29kZSAyMzYgPQora2V5Y29kZSAyMzcgPQora2V5Y29kZSAyMzggPQora2V5Y29kZSAyMzkgPQora2V5Y29kZSAyNDAgPQora2V5Y29kZSAyNDEgPQora2V5Y29kZSAyNDIgPQora2V5Y29kZSAyNDMgPQora2V5Y29kZSAyNDQgPQora2V5Y29kZSAyNDUgPQora2V5Y29kZSAyNDYgPQora2V5Y29kZSAyNDcgPQora2V5Y29kZSAyNDggPQora2V5Y29kZSAyNDkgPQora2V5Y29kZSAyNTAgPQora2V5Y29kZSAyNTEgPQora2V5Y29kZSAyNTIgPQora2V5Y29kZSAyNTMgPQora2V5Y29kZSAyNTQgPQorCithZGQgc2hpZnQgPSBTaGlmdF9MCithZGQgc2hpZnQgPSBTaGlmdF9SCithZGQgc2hpZnQgPSBNZW51CithZGQgbG9jayA9IENhcHNfTG9jaworYWRkIGNvbnRyb2wgPSBDb250cm9sX0wKK2FkZCBjb250cm9sID0gQ29udHJvbF9SCithZGQgbW9kMSA9IEFsdF9MCithZGQgbW9kMiA9IE51bV9Mb2NrCishbW9kMyAgICAgIAorYWRkIG1vZDQgPSBNb2RlX3N3aXRjaAorIW1vZDUgICAgICAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2dwbHYyLWxpY2Vuc2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZ3BsdjItbGljZW5zZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmY5NzVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2dwbHYyLWxpY2Vuc2UucGF0Y2gKQEAgLTAsMCArMSwzNTUgQEAKK0NPUFlJTkc6IGFkZCBHUEx2MiBsaWNlbnNlIGZpbGUKKwordGhpcyBpcyBhIGxvY2FsIGZpbGUgcmVjaXBlIGFuZCB0aGUgbGljZW5zZSBmaWxlIGlzIG1pc3NpbmcuSW4gb3JkZXIKK3RvIHBhc3MgdGhlIGxpY2Vuc2UgY2hlY2tzdW0gY2hlY2tpbmcsIHRoZSBsaWNlbnNlIGZpbGUgaXMgbmVlZGVkLiBTbwordGhpcyBwYXRjaCBhZGQgdGhlIEdQTHYyIGxpY2Vuc2UgZmlsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK1NpZ25lZC1vZmYtYnk6IFl1IEtlIDxrZS55dUBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9DT1BZSU5HIGIvQ09QWUlORworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQ1MTE5MDUKKy0tLSAvZGV2L251bGwKKysrKyBiL0NPUFlJTkcKK0BAIC0wLDAgKzEsMzM5IEBACisrCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKysJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorKworKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorKyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisrIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKysKKysJCQkgICAgUHJlYW1ibGUKKysKKysgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKKytmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKKytzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCisrRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bworK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKKyt0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworK3lvdXIgcHJvZ3JhbXMsIHRvby4KKysKKysgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKKytwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CisraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgorK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAorK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CisraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorKworKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KKytUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKysKKysgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKKytncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKKyt5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKKytyaWdodHMuCisrCisrICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisrKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKKytkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorKworKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KKyt0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQorK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCisrdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKKythdXRob3JzJyByZXB1dGF0aW9ucy4KKysKKysgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCisrcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKKytwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKKytwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorKworKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKKyttb2RpZmljYXRpb24gZm9sbG93LgorKworKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisrICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisrCisrICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCisrYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKKyt1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCisrcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCisrbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKKyt0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCisrbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgorK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorKworK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90CisrY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KKytpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCisrV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisrCisrICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKKytzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKKytjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCisrY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKKythbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCisrYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKysKKytZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKKyt5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorKworKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKKytkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKKythYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorKworKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKysgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKysKKysgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisrICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisrCisrICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKysgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisrICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKysgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisrICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorKworK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKKytpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgorK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKKytzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKKytkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKKytvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKKyt0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKysKKytUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKKyt5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KKytleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKKytjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorKworK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KKyt3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKKythIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgorK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisrCisrICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKKyt1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKKytTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisrCisrICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKysgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisrICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorKworKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisrICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKysgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKysgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorKworKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisrICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorKworK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKKyttYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55CisrYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCisrY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5CisrZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKKytvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAorK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKysKKytJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCisrYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisrCisrICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKytleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0Cisrb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCisrdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCisrdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKKytwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisrCisrICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKKytzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKKyttb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKKyt0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKysKKysgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KKyt0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KKytZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bworK3RoaXMgTGljZW5zZS4KKysKKysgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKKytpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKKytvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CisrZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKKytkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCisrTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKKytsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CisrYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCisrdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisrCisrSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCisrYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCisrY2lyY3Vtc3RhbmNlcy4KKysKKytJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CisrcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKKytzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCisraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCisraW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCisrZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAorK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0Cisrc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZworK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAorK2ltcG9zZSB0aGF0IGNob2ljZS4KKysKKytUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KKytiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCisrY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCisrb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZworK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKKytjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKKyt0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCisrb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCisrYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCisrYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisrCisrRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CisrbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgorK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKytGb3VuZGF0aW9uLgorKworKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKKyt0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKKytTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKKyttYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscworK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKKytvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKysKKysJCQkgICAgTk8gV0FSUkFOVFkKKysKKysgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKKytQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKKytQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKKytSRVBBSVIgT1IgQ09SUkVDVElPTi4KKysKKysgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKKytXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCisrUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKKytJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKKytPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECisrVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCisrWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKKytQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKKytQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisrCisrCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworKworKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisrCisrICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CisrcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorKworKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKKyt0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5CisrY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKKyt0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKysKKysgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKysgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKysKKysgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKysgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKysgICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKysKKytBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKysKKytJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCisrd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKysKKysgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisrICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKysgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisrCisrVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCisrcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisrCisrWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKKytzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKysKKysgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKysgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorKworKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisrICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorKworK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5CisrY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCisrbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKytQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbl8wLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb25fMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NmIzMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb25fMC4xLmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiQ29tbW9uIFgxMSBzY3JpcHRzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorU0VDVElPTiA9ICJ4MTEiCitQUiA9ICJyNDciCisKK2luaGVyaXQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIHJkZXBlbmRzIG9uIHhkeXBpbmZvIHhtb2RtYXAgeGluaXQKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NSQ19VUkkgPSAiZmlsZTovL2V0YyBcCisgICAgICAgICAgIGZpbGU6Ly9ncGx2Mi1saWNlbnNlLnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJY3AgLVIgJHtTfS9ldGMgJHtEfSR7c3lzY29uZmRpcn0KKwljaG1vZCAtUiA3NTUgJHtEfSR7c3lzY29uZmRpcn0KKwlmaW5kICR7RH0ke3N5c2NvbmZkaXJ9IC10eXBlIGYgLW5hbWUgXCp+IC1leGVjIHJtIC1yZiB7fSBcOworfQorCitSREVQRU5EU18ke1BOfSA9ICJkYnVzLXgxMSB4bW9kbWFwIHhkcHlpbmZvIHh0c2NhbCB4aW5pdCBmb3JtZmFjdG9yIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjhkNDBlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC5iYgpAQCAtMCwwICsxLDUyIEBACitTVU1NQVJZID0gIlNpbXBsZSBYc2VydmVyIEluaXQgU2NyaXB0IChubyBkbSkiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCitTRUNUSU9OID0gIngxMSIKK1BSID0gInIzMSIKKworU1JDX1VSSSA9ICJmaWxlOi8veHNlcnZlci1ub2RtIFwKKyAgICAgICAgICAgZmlsZTovL1h1c2VybmFtZSBcCisgICAgICAgICAgIGZpbGU6Ly9ncGx2Mi1saWNlbnNlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3hzZXJ2ZXItbm9kbS5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL3hzZXJ2ZXItbm9kbS5jb25mIFwKKyIKKworUyA9ICIke1dPUktESVJ9IgorCisjIFNpbmNlIHdlIHJlZmVyIHRvIFJPT1RMRVNTX1ggd2hpY2ggaXMgbm9ybWFsbHkgZW5hYmxlZCBwZXItbWFjaGluZQorUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCB1cGRhdGUtcmMuZCBzeXN0ZW1kCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKyAgICBpbnN0YWxsIHhzZXJ2ZXItbm9kbSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKworICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0CisgICAgICAgIGluc3RhbGwgeHNlcnZlci1ub2RtLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC94c2VydmVyLW5vZG0KKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS94c2VydmVyLW5vZG0uc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorICAgICAgICBpZiBbICIke1JPT1RMRVNTX1h9IiA9ICIxIiBdIDsgdGhlbgorICAgICAgICAgICAgc2VkIC1pICdzIV5IT01FPS4qIUhPTUU9L2hvbWUveHVzZXIhJyAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3hzZXJ2ZXItbm9kbQorICAgICAgICAgICAgc2VkIC1pICdzIV5Vc2VyPS4qIVVzZXI9eHVzZXIhJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS94c2VydmVyLW5vZG0uc2VydmljZQorICAgICAgICBlbHNlCisgICAgICAgICAgICBzZWQgLWkgJ3MhXkhPTUU9LiohSE9NRT0ke1JPT1RfSE9NRX0hJyAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3hzZXJ2ZXItbm9kbQorICAgICAgICAgICAgc2VkIC1pICcvXlVzZXI9L2QnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3hzZXJ2ZXItbm9kbS5zZXJ2aWNlCisgICAgICAgIGZpCisgICAgZmkKKworICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN2aW5pdCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisgICAgICAgIGlmIFsgIiR7Uk9PVExFU1NfWH0iID0gIjEiIF0gOyB0aGVuCisgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L1gxMQorICAgICAgICAgICAgaW5zdGFsbCBYdXNlcm5hbWUgJHtEfSR7c3lzY29uZmRpcn0vWDExCisgICAgICAgIGZpCisgICAgZmkKK30KKworUkRFUEVORFNfJHtQTn0gPSAiJHtAYmFzZV9jb25kaXRpb25hbCgnUk9PVExFU1NfWCcsICcxJywgJ3h1c2VyLWFjY291bnQnLCAnJywgZCl9IgorCitJTklUU0NSSVBUX05BTUUgPSAieHNlcnZlci1ub2RtIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOSA1IC4gc3RvcCAyMCAwIDEgMiAzIDYgLiIKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJ4c2VydmVyLW5vZG0uc2VydmljZSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC9YdXNlcm5hbWUgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L1h1c2VybmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDYwZTVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC9YdXNlcm5hbWUKQEAgLTAsMCArMSBAQAoreHVzZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQvZ3BsdjItbGljZW5zZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQvZ3BsdjItbGljZW5zZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmY5NzVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC9ncGx2Mi1saWNlbnNlLnBhdGNoCkBAIC0wLDAgKzEsMzU1IEBACitDT1BZSU5HOiBhZGQgR1BMdjIgbGljZW5zZSBmaWxlCisKK3RoaXMgaXMgYSBsb2NhbCBmaWxlIHJlY2lwZSBhbmQgdGhlIGxpY2Vuc2UgZmlsZSBpcyBtaXNzaW5nLkluIG9yZGVyCit0byBwYXNzIHRoZSBsaWNlbnNlIGNoZWNrc3VtIGNoZWNraW5nLCB0aGUgbGljZW5zZSBmaWxlIGlzIG5lZWRlZC4gU28KK3RoaXMgcGF0Y2ggYWRkIHRoZSBHUEx2MiBsaWNlbnNlIGZpbGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitTaWduZWQtb2ZmLWJ5OiBZdSBLZSA8a2UueXVAaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kNTExOTA1CistLS0gL2Rldi9udWxsCisrKysgYi9DT1BZSU5HCitAQCAtMCwwICsxLDMzOSBAQAorKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisrCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKysKKysgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKysgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKysgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisrCisrCQkJICAgIFByZWFtYmxlCisrCisrICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCisrZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKytMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCisrc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKKytHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KKyt1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5CisrdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KKyt5b3VyIHByb2dyYW1zLCB0b28uCisrCisrICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CisrcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQorK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKKyt0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKKytpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAorK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKysKKysgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKKythbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCisrVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKKytkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisrCisrICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCisrZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0CisreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKKytzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCisrcmlnaHRzLgorKworKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCisrZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKysKKysgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCisrdGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKKytzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKKyt3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbworK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCisrYXV0aG9ycycgcmVwdXRhdGlvbnMuCisrCisrICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKKytwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCisrcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CisrcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKysKKysgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCisrbW9kaWZpY2F0aW9uIGZvbGxvdy4KKysKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorKworKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCisrdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6CisrdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKKytlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KKyt0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKysKKytBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKKytydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCisraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorKworKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCisrc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91CisrY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKKytub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CisrYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisrCisrWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCisreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKysKKysgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KKytvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCisrZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCisrYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKysKKysgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisrICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisrCisrICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKysgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKysgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisrICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKysgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKysgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisrICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKysgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKysgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKysgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKysKKytUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCisraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKKythbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KKyt0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCisrc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CisrZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCisrb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCisrdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKKytlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisrCisrVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0CisreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCisrZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCisrY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKysKKytJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCisrd2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCisrYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKKyt0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCisrdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCisrU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorKworKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisrICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKysgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKysgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisrICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisrICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKysgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKysgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKysgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKysKKytUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCisrbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKKytjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKKytzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKKythbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCisrb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKKytpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisrCisrSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKKythY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKKytkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKKytjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorKworKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisrZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcworK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KKytIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgorK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCisrcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorKworKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90Cisrc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKKytkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKKytwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5CisrbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKKythbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCisrdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisrCisrICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKKytvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCisrdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKKytyZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCisrWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KKyt0aGlzIExpY2Vuc2UuCisrCisrICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CisraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKKytjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCisrb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CisrZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKKyttYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CisrbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgorK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KKytyZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorKworK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KKythcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorK2NpcmN1bXN0YW5jZXMuCisrCisrSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55Cisrc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQorK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKKyt0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKKyt0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKKytpbXBvc2UgdGhhdCBjaG9pY2UuCisrCisrVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCisrYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKKyttYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKKyt0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCisrY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCisrdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorKworK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KKytzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKKytlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKKyt0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrRm91bmRhdGlvbi4KKysKKysgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKKytwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCisrdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCisrbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKKytvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCisrb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisrCisrCQkJICAgIE5PIFdBUlJBTlRZCisrCisrICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKKytGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KKytPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCisrUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKKytPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKKytUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCisrUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCisrUkVQQUlSIE9SIENPUlJFQ1RJT04uCisrCisrICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCisrV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCisrSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCisrT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCisrUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCisrUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorKworKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKysKKysJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworKworKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKKytmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKysKKysgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CisrdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0CisrdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisrCisrICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisrICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisrICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisrCisrSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcworK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisrCisrICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisrICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKysgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorKworK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKKytiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKKyttb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorKworK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCisrc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKKytuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisrCisrICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisrICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKysKKysgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKysKKytUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KKytwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisrUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJmYTBhOGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbQpAQCAtMCwwICsxLDY1IEBACisjIS9iaW4vc2gKKyMKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6IHhzZXJ2ZXIKKyMgUmVxdWlyZWQtU3RhcnQ6ICRsb2NhbF9mcyAkcmVtb3RlX2ZzIGRidXMKKyMgUmVxdWlyZWQtU3RvcDogJGxvY2FsX2ZzICRyZW1vdGVfZnMKKyMgRGVmYXVsdC1TdGFydDogICAgIDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSAyIDMgNgorIyMjIEVORCBJTklUIElORk8KKwora2lsbHByb2MoKSB7ICAgICAgICAgICAgIyBraWxsIHRoZSBuYW1lZCBwcm9jZXNzKGVzKQorICAgICAgICBwaWQ9YC9iaW4vcGlkb2YgJDFgCisgICAgICAgIFsgIiRwaWQiICE9ICIiIF0gJiYga2lsbCAkcGlkCit9CisKK3JlYWQgQ01ETElORSA8IC9wcm9jL2NtZGxpbmUKK2ZvciB4IGluICRDTURMSU5FOyBkbworICAgICAgICBjYXNlICR4IGluCisgICAgICAgIHgxMT1mYWxzZSkKKwkJZWNobyAiWCBTZXJ2ZXIgZGlzYWJsZWQiIAorCQlleGl0IDA7CisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworZG9uZQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisgICAgICAgLiAvZXRjL3Byb2ZpbGUKKyAgICAgICB1c2VybmFtZT1yb290CisgICAgICAgZWNobyAiU3RhcnRpbmcgWHNlcnZlciIKKyAgICAgICBpZiBbIC1mIC9ldGMvWDExL1h1c2VybmFtZSBdOyB0aGVuCisgICAgICAgICAgIHVzZXJuYW1lPWBjYXQgL2V0Yy9YMTEvWHVzZXJuYW1lYAorICAgICAgICAgICAjIHNldHRpbmcgZm9yIHJvb3RsZXNzIFgKKyAgICAgICAgICAgY2htb2Qgbyt3IC92YXIvbG9nCisgICAgICAgICAgIGNobW9kIGcrciAvZGV2L3R0eVswLTNdCisgICAgICAgICAgICMgaGlkcmF3IGRldmljZSBpcyBwcm9iYWJseSBuZWVkZWQKKyAgICAgICAgICAgaWYgWyAtZSAvZGV2L2hpZHJhdzAgXTsgdGhlbgorICAgICAgICAgICAgICAgY2htb2QgbytydyAvZGV2L2hpZHJhdyoKKyAgICAgICAgICAgZmkKKyAgICAgICBmaQorICAgICAgICMgVXNpbmcgc3UgcmF0aGVyIHRoYW4gc3VkbyBhcyBsYXRlc3QgMS44LjEgY2F1c2UgZmFpbHVyZSBbWU9DVE8gIzEyMTFdCisgICAgICAgc3UgLWwgLWMgJy9ldGMvWDExL1hzZXJ2ZXImJyAkdXNlcm5hbWUgCisgICAgICAgIyBXYWl0IGZvciB0aGUgZGVza3RvcCB0byBzYXkgaXRzIGZpbmlzaGVkIGxvYWRpbmcKKyAgICAgICAjIGJlZm9yZSBsb2FkaW5nIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0KKyAgICAgICAjIGRidXMtd2FpdCBvcmcubWF0Y2hib3hfcHJvamVjdC5kZXNrdG9wIExvYWRlZAorICA7OworCisgIHN0b3ApCisgICAgICAgIGVjaG8gIlN0b3BwaW5nIFhTZXJ2ZXIiCisgICAgICAgIGtpbGxwcm9jIHhpbml0CisgICAgICAgIHNsZWVwIDEKKyAgICAgICAgY2h2dCAxICYKKyAgOzsKKworICByZXN0YXJ0KQorCSQwIHN0b3AKKyAgICAgICAgJDAgc3RhcnQKKyAgOzsKKworICAqKQorICAgICAgICBlY2hvICJ1c2FnZTogJDAgeyBzdGFydCB8IHN0b3AgfCByZXN0YXJ0IH0iCisgIDs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0uY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MwNTgyYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtLmNvbmYKQEAgLTAsMCArMSBAQAorSE9NRT0vaG9tZS9yb290CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbS5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0uc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmQ5NzlmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0uc2VydmljZQpAQCAtMCwwICsxLDEwIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVhzZXJ2ZXIgc3RhcnR1cCB3aXRob3V0IGEgZGlzcGxheSBtYW5hZ2VyCisKK1tTZXJ2aWNlXQorVXNlcj1yb290CitFbnZpcm9ubWVudEZpbGU9L2V0Yy9kZWZhdWx0L3hzZXJ2ZXItbm9kbQorRXhlY1N0YXJ0PS9ldGMvWDExL1hzZXJ2ZXIKKworW0luc3RhbGxdCitBbGlhcz1kaXNwbGF5LW1hbmFnZXIuc2VydmljZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExdm5jL2ZpbGVzL2VuZGlhbi1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTF2bmMvZmlsZXMvZW5kaWFuLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmE1MzhiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExdm5jL2ZpbGVzL2VuZGlhbi1maXgucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorbGlidm5jc2VydmVyOiByZXBsYWNlIExJQlZOQ1NFUlZFUl9XT1JEU19CSUdFTkRJQU4gd2l0aCBXT1JEU19CSUdFTkRJQU4KKworc2luY2UgbWFjcm8gQUNfQ19CSUdFTkRJQU4gaXMgdXNlZCBpbiBhdXRvY29uZiBhbmQgV09SRFNfQklHRU5ESUFOIGlzCithdXRvbWF0aWNhbGx5IHNldCBmb3IgZGlmZmVyZW50IGFyY2gsIGl0IGlzIGJldHRlciB0byB1c2UgV09SRFNfQklHRU5ESUFOCitpbnN0ZWFkIG9mIExJQlZOQ1NFUlZFUl9XT1JEU19CSUdFTkRJQU4sIHdoaWNoIGN1YXNlIGlzc3VlIGluIG1pcHMuCisKK1NpZ25lZC1vZmYtYnk6IFl1IEtlIDxrZS55dUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitkaWZmIC0tZ2l0IGEvbGlidm5jc2VydmVyL21haW4uYyBiL2xpYnZuY3NlcnZlci9tYWluLmMKK2luZGV4IGI2YmQ5MzAuLjhiYmI3YmYgMTAwNjQ0CistLS0gYS9saWJ2bmNzZXJ2ZXIvbWFpbi5jCisrKysgYi9saWJ2bmNzZXJ2ZXIvbWFpbi5jCitAQCAtNDcsNyArNDcsNyBAQCBzdGF0aWMgTVVURVgoZXh0TXV0ZXgpOworIAorIHN0YXRpYyBpbnQgcmZiRW5hYmxlTG9nZ2luZz0xOworIAorLSNpZmRlZiBMSUJWTkNTRVJWRVJfV09SRFNfQklHRU5ESUFOCisrI2lmZGVmIFdPUkRTX0JJR0VORElBTgorIGNoYXIgcmZiRW5kaWFuVGVzdCA9ICgxPT0wKTsKKyAjZWxzZQorIGNoYXIgcmZiRW5kaWFuVGVzdCA9ICgxPT0xKTsKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExdm5jL2ZpbGVzL3N0YXJ0aW5nLWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMXZuYy9maWxlcy9zdGFydGluZy1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyZTQwNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMXZuYy9maWxlcy9zdGFydGluZy1maXgucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorIi1ndWkiICYgIi1yZmJwb3J0IiByZXF1aXJlICJ3aXNoIiBpbnN0YWxsZWQsIG9yIGVsc2UgeDExdm5jIGZhaWxzIHRvIHN0YXJ0LgorUmVtb3ZpbmcgdGhlc2UgMiBwYXJhbWV0ZXJzIG1ha2VzIHgxMXZuYyB3b3JrcyB3ZWxsIG9uIHBva3kgc2F0byBpbWFnZS4KKworQWRkIGFsc28gLXNraXBfbG9ja2tleXMgb3B0aW9uIHRvIGlnbm9yZSBhbGwgQ2Fwc19Mb2NrLCBTaGlmdF9Mb2NrLCBOdW1fTG9jaywKK1Njcm9sbF9Mb2NrIGtleXN5bXMgcmVjZWl2ZWQgZnJvbSB2aWV3ZXJzLCBpbiBvcmRlciB0byBsZWF2ZSB0aGUgbG9jayBzdGF0ZSBvbgordGhlIHNlcnZlciBzaWRlIHVuY2hhbmdlZC4gWWV0LCB0aGUga2V5cyB3aWxsIGFwcGVhciBjb3JyZWN0bHkuCisKK1NpZ25lZC1vZmYtYnk6IFpoYWkgRWR3aW4gPGVkd2luLnpoYWlAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiB4MTF2bmMtMC45LjEyL3gxMXZuYy94MTF2bmMuZGVza3RvcAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHgxMXZuYy0wLjkuMTIub3JpZy94MTF2bmMveDExdm5jLmRlc2t0b3AJMjAxMS0wMy0wMyAxMDozMzoxOC4wMDAwMDAwMDAgKzA4MDAKKysrKyB4MTF2bmMtMC45LjEyL3gxMXZuYy94MTF2bmMuZGVza3RvcAkyMDExLTAzLTAzIDEwOjM1OjIwLjAwMDAwMDAwMCArMDgwMAorQEAgLTEsNyArMSw3IEBACisgW0Rlc2t0b3AgRW50cnldCisgTmFtZT1YMTFWTkMgU2VydmVyCisgQ29tbWVudD1TaGFyZSB0aGlzIGRlc2t0b3AgYnkgVk5DCistRXhlYz14MTF2bmMgLWd1aSB0cmF5PXNldHBhc3MgLXJmYnBvcnQgUFJPTVBUIC1iZyAtbyAlJUhPTUUvLngxMXZuYy5sb2cuJSVWTkNESVNQTEFZCisrRXhlYz14MTF2bmMgLWJnIC1yZmJwb3J0IDU5MDAgLXNraXBfbG9ja2tleXMgLW8gJSVIT01FLy54MTF2bmMubG9nLiUlVk5DRElTUExBWQorIEljb249Y29tcHV0ZXIKKyBUZXJtaW5hbD1mYWxzZQorIFR5cGU9QXBwbGljYXRpb24KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMXZuYy94MTF2bmNfMC45LjEzLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExdm5jL3gxMXZuY18wLjkuMTMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMwMjQxZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMXZuYy94MTF2bmNfMC45LjEzLmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiRXhwb3J0cyB5b3VyIFggc2Vzc2lvbiBvbi10aGUtZmx5IHZpYSBWTkMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmthcmxydW5nZS5jb20veDExdm5jLyIKKworU0VDVElPTiA9ICJ4MTEvdXRpbHMiCitBVVRIT1IgPSAiS2FybCBSdW5nZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MzYxYjZiODM3Y2FkMjZjNjkwMGE5MjZiNjJhYWRhNWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8veDExdm5jL3gxMXZuYy5oO2VuZGxpbmU9MzM7bWQ1PTZmOTVkYzY1MzU0NjdkN2VlMTU2M2ZkNDM0ZmIzNzJlIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9saWJ2bmNzZXJ2ZXIveDExdm5jLyR7UFZ9L3gxMXZuYy0ke1BWfS50YXIuZ3pcCisgICAgICAgICAgIGZpbGU6Ly9zdGFydGluZy1maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZW5kaWFuLWZpeC5wYXRjaCAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhMzcyZWM0ZmU4MjExMjIxNTQ3YjFjMTA4Y2Y1NmU0YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmNjgyOWYyZTYyOTY2N2E1Mjg0ZGU2MmIwODBiMTMxMjZhMDczNjQ5OWZlNDdjZGI0NDdhZWRiMDdhNTlmMTNiIgorCitERVBFTkRTID0gIm9wZW5zc2wgdmlydHVhbC9saWJ4MTEgbGlieGV4dCBqcGVnIHpsaWIgbGlieGZpeGVzIGxpYnhyYW5kciBsaWJ4ZGFtYWdlIGxpYnh0c3QiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnemVyb2NvbmYnLCAnYXZhaGknLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1thdmFoaV0gPSAiLS13aXRoLWF2YWhpLC0td2l0aG91dC1hdmFoaSxhdmFoaSIKK1BBQ0tBR0VDT05GSUdbeGluZXJhbWFdID0gIi0td2l0aC14aW5lcmFtYSwtLXdpdGhvdXQteGluZXJhbWEsbGlieGluZXJhbWEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEvZml4X3dhdGNoX2N1cnNvci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0wLjEuMS9maXhfd2F0Y2hfY3Vyc29yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYWM1NWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEvZml4X3dhdGNoX2N1cnNvci5wYXRjaApAQCAtMCwwICsxLDE3IEBACitGaXggdHlwbyBpbiBNYWtlZmlsZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEvY3Vyc29ycy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEub3JpZy9jdXJzb3JzL01ha2VmaWxlLmFtCTIwMTMtMDMtMDcgMjI6MjU6MDQuMDAxNDM1MzA1ICswMDAwCisrKysgeGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0wLjEuMS9jdXJzb3JzL01ha2VmaWxlLmFtCTIwMTMtMDMtMDcgMjI6MjU6MDQuMDYxNDM1MzAyICswMDAwCitAQCAtNzksNyArNzksNyBAQAorIAl1bF9hbmdsZSBcCisgCXVyX2FuZ2xlIFwKKyAJdl9kb3VibGVfYXJyb3cgXAorLQl3YXRjaGEgXAorKwl3YXRjaCBcCisgCXh0ZXJtICAKKyAKKyBDVVJTT1JfRElSID0gJChkYXRhZGlyKS9pY29ucy94Y3Vyc29yLXRyYW5zcGFyZW50L2N1cnNvcnMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0wLjEuMS91c2UtcmVsYXRpdmUtc3ltbGlua3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEvdXNlLXJlbGF0aXZlLXN5bWxpbmtzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMjhmZDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEvdXNlLXJlbGF0aXZlLXN5bWxpbmtzLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1VzZSByZWxhdGl2ZSBzeW1saW5rIGZvciBsaW5rIHJhdGhlciB0aGFuIGFic29sdXRlIHBhdGggd2hpY2ggCitkb2Vzbid0IHdvcmsgd2VsbCBpbiBERVNURElSIHNldHRpbmcuCisKK0Fsc28gZml4IG91dCBvZiB0cmVlIGJ1aWxkcyB0byB1c2UgY29ycmVjdCBzcmNkaXIuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitSUCAyMDEzLzMvOAorCitJbmRleDogeGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0wLjEuMS9jdXJzb3JzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0geGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0wLjEuMS5vcmlnL2N1cnNvcnMvTWFrZWZpbGUuYW0JMjAxMy0wMy0wNyAyMjoyNTowMy45MzM0MzUzMDcgKzAwMDAKKysrKyB4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLTAuMS4xL2N1cnNvcnMvTWFrZWZpbGUuYW0JMjAxMy0wMy0wNyAyMjoyNToyNy4yOTM0MzQ3NTUgKzAwMDAKK0BAIC04OCw5ICs4OCw5IEBACisgCisgaW5zdGFsbC1kYXRhLWxvY2FsOgorIAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKENVUlNPUl9ESVIpOyAKKy0JJChJTlNUQUxMX0RBVEEpICQoQ1VSU09SX1JFQUwpICQoREVTVERJUikkKENVUlNPUl9ESVIpLyAKKysJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kKENVUlNPUl9SRUFMKSAkKERFU1RESVIpJChDVVJTT1JfRElSKS8KKyAJZm9yIENVUlNPUiBpbiAkKENVUlNPUl9OQU1FUyk7IGRvIFwKKyAJCWVjaG8gJy0tIEluc3RhbGxpbmcgY3Vyc29yICckJENVUlNPUjsgXAorLQkJbG4gLXMgJChERVNURElSKSQoQ1VSU09SX0RJUikvdHJhbnNwICQoREVTVERJUikkKENVUlNPUl9ESVIpLyQkQ1VSU09SOyBcCisrCQlsbiAtcyB0cmFuc3AgJChERVNURElSKSQoQ1VSU09SX0RJUikvJCRDVVJTT1I7IFwKKyAJZG9uZQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lXzAuMS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lXzAuMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNjY4YWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWVfMC4xLjEuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJUcmFuc3BhcmVudCBYMTEgY3Vyc29yIHRoZW1lIGZvciB0b3VjaHNjcmVlbnMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1hdGNoYm94LXByb2plY3Qub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK1NFQ1RJT04gPSAieDExL2Jhc2UiCitQUiA9ICJyNCIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvbWF0Y2hib3gvdXRpbHMveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0ke1BWfS50YXIuZ3ogXAorCSAgIGZpbGU6Ly91c2UtcmVsYXRpdmUtc3ltbGlua3MucGF0Y2ggXAorCSAgIGZpbGU6Ly9maXhfd2F0Y2hfY3Vyc29yLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiN2IwYzYyMzA0OWQ0YWFiMjA2MDBkNjQ3M2Y4YWFiMjMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjI2YWRmMmQ1MDNkMDEyOTk3MTgzOTBhZTM5ZGFiNDY5MWE2NzIyMGRlMDk0MjNiZTAzNjRlOWEwNjBiZjdlNCIKK0ZJTEVTXyR7UE59ID0gIiR7ZGF0YWRpcn0vaWNvbnMveGN1cnNvci10cmFuc3BhcmVudC9jdXJzb3JzLyoiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGFsbGFyY2gKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3BvaW50ZXJjYWwteGlucHV0L3BvaW50ZXJjYWwueGlucHV0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IvcG9pbnRlcmNhbC14aW5wdXQvcG9pbnRlcmNhbC54aW5wdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYzM2ZjNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3BvaW50ZXJjYWwteGlucHV0L3BvaW50ZXJjYWwueGlucHV0CkBAIC0wLDAgKzEgQEAKKyMgcmVwbGFjZSB3aXRoIHZhbGlkIG1hY2hpbmUgc3BlY2lmaWMgcG9pbnRlcmNhbC54aW5wdXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3BvaW50ZXJjYWwteGlucHV0XzAuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3BvaW50ZXJjYWwteGlucHV0XzAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTM0OGMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IvcG9pbnRlcmNhbC14aW5wdXRfMC4wLmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiVG91Y2hzY3JlZW4gY2FsaWJyYXRpb24gZGF0YSBmcm9tIHhpbnB1dC1jYWxpYnJhdG9yIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworUFIgPSAicjciCisKK1NSQ19VUkkgPSAiZmlsZTovL3BvaW50ZXJjYWwueGlucHV0IgorUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworICAgICMgT25seSBpbnN0YWxsIGZpbGUgaWYgaXQgaGFzIGEgY29udGVudHMKKyAgICBpZiBbIC1zICR7U30vcG9pbnRlcmNhbC54aW5wdXQgXSAmJlwKKyAgICAgICBbICEgLW4gIiQoaGVhZCAtbjEgJHtTfS9wb2ludGVyY2FsLnhpbnB1dHxncmVwICJyZXBsYWNlLipwb2ludGVyY2FsXC54aW5wdXQiKSIgXTsgdGhlbgorICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9LworICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9wb2ludGVyY2FsLnhpbnB1dCAke0R9JHtzeXNjb25mZGlyfS8KKyAgICBmaQorfQorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vcG9pbnRlcmNhbC54aW5wdXQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci94aW5wdXQtY2FsaWJyYXRvci8zMHhpbnB1dF9jYWxpYnJhdGUuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci94aW5wdXQtY2FsaWJyYXRvci8zMHhpbnB1dF9jYWxpYnJhdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI5MDcyNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3hpbnB1dC1jYWxpYnJhdG9yLzMweGlucHV0X2NhbGlicmF0ZS5zaApAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9zaAorCisuIC9ldGMvZm9ybWZhY3Rvci9jb25maWcKKworaWYgWyAiJEhBVkVfVE9VQ0hTQ1JFRU4iID0gIjEiIF07IHRoZW4KKwkvdXNyL2Jpbi94aW5wdXRfY2FsaWJyYXRvcl9vbmNlLnNoCitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IveGlucHV0LWNhbGlicmF0b3IvQWxsb3cteGlucHV0X2NhbGlicmF0b3JfcG9pbnRlcmNhbC5zaC10by1iZS1ydW4tYXMtbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3hpbnB1dC1jYWxpYnJhdG9yL0FsbG93LXhpbnB1dF9jYWxpYnJhdG9yX3BvaW50ZXJjYWwuc2gtdG8tYmUtcnVuLWFzLW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY5ODI5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3hpbnB1dC1jYWxpYnJhdG9yL0FsbG93LXhpbnB1dF9jYWxpYnJhdG9yX3BvaW50ZXJjYWwuc2gtdG8tYmUtcnVuLWFzLW4ucGF0Y2gKQEAgLTAsMCArMSw2NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0Zyb20gMTQ3MzRhOTNiZDNmYzMyMzMyNTQ1OWUyNGIwNDc5NTQyMmUzOTVlNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IExhdXJlbnRpdSBQYWxjdSA8bGF1cmVudGl1LnBhbGN1QGludGVsLmNvbT4KK0RhdGU6IE1vbiwgMSBKdWwgMjAxMyAxNTozODowMiArMDMwMAorU3ViamVjdDogW1BBVENIXSBBbGxvdyB4aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoIHRvIGJlIHJ1biBhcyBub3JtYWwKKyB1c2VyCisKK0FsbG93IG5vcm1hbCB1c2VyIHRvIGNyZWF0ZSB0aGVpciBvd24gcG9pbnRlcmNhbC54aW5wdXQgZmlsZXMgdGhhdAorb3ZlcnJpZGUgdGhlIHN5c3RlbSBwb2ludGVyY2FsIGZpbGUgaW4gL2V0Yy4KKworU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgorLS0tCisgc2NyaXB0cy94aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoIHwgICAzMyArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIzIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc2NyaXB0cy94aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoIGIvc2NyaXB0cy94aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoCitpbmRleCBmY2NiMTk3Li4wYWRhN2RhIDEwMDc1NQorLS0tIGEvc2NyaXB0cy94aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoCisrKysgYi9zY3JpcHRzL3hpbnB1dF9jYWxpYnJhdG9yX3BvaW50ZXJjYWwuc2gKK0BAIC0xMSwxOSArMTEsMzIgQEAKKyBQQVRIPSIvdXNyL2JpbjokUEFUSCIKKyAKKyBCSU5BUlk9InhpbnB1dF9jYWxpYnJhdG9yIgorLUNBTEZJTEU9Ii9ldGMvcG9pbnRlcmNhbC54aW5wdXQiCistTE9HRklMRT0iL3Zhci9sb2cveGlucHV0X2NhbGlicmF0b3IucG9pbnRlcmNhbC5sb2ciCisrU1lTX0NBTEZJTEU9Ii9ldGMvcG9pbnRlcmNhbC54aW5wdXQiCisrVVNFUl9DQUxGSUxFPSIkSE9NRS8ucG9pbnRlcmNhbC9wb2ludGVyY2FsLnhpbnB1dCIKKyAKKy1pZiBbIC1lICRDQUxGSUxFIF0gOyB0aGVuCistICBpZiBncmVwIHJlcGxhY2UgJENBTEZJTEUgOyB0aGVuCistICAgIGVjaG8gIkVtcHR5IGNhbGlicmF0aW9uIGZpbGUgZm91bmQsIHJlbW92aW5nIGl0IgorLSAgICBybSAkQ0FMRklMRQorLSAgZWxzZQorLSAgICBlY2hvICJVc2luZyBjYWxpYnJhdGlvbiBkYXRhIHN0b3JlZCBpbiAkQ0FMRklMRSIKKy0gICAgLiAkQ0FMRklMRSAmJiBleGl0IDAKKy0gIGZpCisraWYgWyAiJFVTRVIiID0gInJvb3QiIF07IHRoZW4KKysgIExPR0ZJTEU9Ii92YXIvbG9nL3hpbnB1dF9jYWxpYnJhdG9yLnBvaW50ZXJjYWwubG9nIgorKyAgQ0FMRklMRVM9IiRTWVNfQ0FMRklMRSIKKytlbHNlCisrICBMT0dGSUxFPSIkSE9NRS8ucG9pbnRlcmNhbC94aW5wdXRfY2FsaWJyYXRvci5wb2ludGVyY2FsLmxvZyIKKysgIENBTEZJTEVTPSIkVVNFUl9DQUxGSUxFICRTWVNfQ0FMRklMRSIKKysgIG1rZGlyIC1wICIkSE9NRS8ucG9pbnRlcmNhbCIKKyBmaQorIAorK2ZvciBDQUxGSUxFIGluICRDQUxGSUxFUzsgZG8KKysgIGlmIFsgLWUgJENBTEZJTEUgXTsgdGhlbgorKyAgICBpZiBncmVwIHJlcGxhY2UgJENBTEZJTEUgOyB0aGVuCisrICAgICAgZWNobyAiRW1wdHkgY2FsaWJyYXRpb24gZmlsZSBmb3VuZCwgcmVtb3ZpbmcgaXQiCisrICAgICAgcm0gJENBTEZJTEUgMj4vZGV2L251bGwgfHwgdHJ1ZQorKyAgICBlbHNlCisrICAgICAgZWNobyAiVXNpbmcgY2FsaWJyYXRpb24gZGF0YSBzdG9yZWQgaW4gJENBTEZJTEUiCisrICAgICAgLiAkQ0FMRklMRSAmJiBleGl0IDAKKysgICAgZmkKKysgIGZpCisrZG9uZQorKworK1sgIiRVU0VSIiAhPSAicm9vdCIgXSAmJiBDQUxGSUxFPSRVU0VSX0NBTEZJTEUKKysKKyBDQUxEQVRBPWAkQklOQVJZIC0tb3V0cHV0LXR5cGUgeGlucHV0IC12IHwgdGVlICRMT0dGSUxFIHwgZ3JlcCAnICAgIHhpbnB1dCBzZXQnIHwgc2VkICdzL14gICAgLy9nOyBzLyQvOy9nJ2AKKyBpZiBbICEgLXogIiRDQUxEQVRBIiBdIDsgdGhlbgorICAgZWNobyAkQ0FMREFUQSA+ICRDQUxGSUxFCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IveGlucHV0LWNhbGlicmF0b3JfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IveGlucHV0LWNhbGlicmF0b3JfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZGUzZDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci94aW5wdXQtY2FsaWJyYXRvcl9naXQuYmIKQEAgLTAsMCArMSwzNyBAQAorU1VNTUFSWSA9ICJUb3VjaHNjcmVlbiBjYWxpYnJhdGlvbiBwcm9ncmFtIGZvciBYMTEiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL3hpbnB1dF9jYWxpYnJhdG9yIgorTElDRU5TRSA9ICJNSVQtWCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NyYy9jYWxpYnJhdG9yLmNwcDtlbmRsaW5lPTIyO21kNT0xYmNiYTA4ZjY3Y2RiNTZmMzQwMjE1NTc4OThlNGI1YSIKK0RFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlieGkiCisKK1BWID0gIjAuNy41K2dpdCR7U1JDUFZ9IgorUFIgPSAicjYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworU1JDUkVWID0gImMwMWM1YWY4MDdjYjRiMDE1N2I4ODJhYjA3YTg5M2RmOWE4MTAxMTEiCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vdGlhcy94aW5wdXRfY2FsaWJyYXRvci5naXQgXAorICAgICAgICAgICBmaWxlOi8vMzB4aW5wdXRfY2FsaWJyYXRlLnNoIFwKKyAgICAgICAgICAgZmlsZTovL0FsbG93LXhpbnB1dF9jYWxpYnJhdG9yX3BvaW50ZXJjYWwuc2gtdG8tYmUtcnVuLWFzLW4ucGF0Y2giCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKKyMgZm9yY2UgbmF0aXZlIFgxMSB1aSBhcyB3ZSBkb24ndCBoYXZlIGd0aysgaW4gREVQRU5EUworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtZ3VpPXgxMSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSAwNzU1ICR7U30vc2NyaXB0cy94aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoICR7RH0ke2JpbmRpcn0veGlucHV0X2NhbGlicmF0b3Jfb25jZS5zaAorCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9YMTEvWHNlc3Npb24uZC8KKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS8zMHhpbnB1dF9jYWxpYnJhdGUuc2ggJHtEfSR7c3lzY29uZmRpcn0vWDExL1hzZXNzaW9uLmQvCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3hkZy9hdXRvc3RhcnQKKyAgICBzZWQgLWUgJ3MsXkV4ZWM9LiosRXhlYz0ke2JpbmRpcn0veGlucHV0X2NhbGlicmF0b3Jfb25jZS5zaCwnICR7U30vc2NyaXB0cy94aW5wdXRfY2FsaWJyYXRvci5kZXNrdG9wID4gJHtEfSR7c3lzY29uZmRpcn0veGRnL2F1dG9zdGFydC94aW5wdXRfY2FsaWJyYXRvci5kZXNrdG9wCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L3hkZy9hdXRvc3RhcnQiCitSREVQRU5EU18ke1BOfSA9ICJ4aW5wdXQgZm9ybWZhY3RvciIKK1JSRUNPTU1FTkRTXyR7UE59ID0gInBvaW50ZXJjYWwteGlucHV0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAvbWtmb250ZGlyXzEuMC43LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAvbWtmb250ZGlyXzEuMC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NTNlMjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC9ta2ZvbnRkaXJfMS4wLjcuYmIKQEAgLTAsMCArMSwyMiBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiQSBwcm9ncmFtIHRvIGNyZWF0ZSBhbiBpbmRleCBvZiBYIGZvbnQgZmlsZXMgaW4gYSBkaXJlY3RvcnkiCisKK0RFU0NSSVBUSU9OID0gIkZvciBlYWNoIGRpcmVjdG9yeSBhcmd1bWVudCwgbWtmb250ZGlyIHJlYWRzIGFsbCBvZiB0aGUgXAorZm9udCBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5LiBUaGUgZm9udCBuYW1lcyBhbmQgcmVsYXRlZCBkYXRhIGFyZSB3cml0dGVuIFwKK291dCB0byB0aGUgZmlsZXMgXCJmb250cy5kaXJcIiwgXCJmb250cy5zY2FsZVwiLCBhbmQgXCJmb250cy5hbGlhc1wiLiAgXAorVGhlIFggc2VydmVyIGFuZCBmb250IHNlcnZlciB1c2UgdGhlc2UgZmlsZXMgdG8gZmluZCB0aGUgYXZhaWxhYmxlIGZvbnQgXAorZmlsZXMuIgorCitQRSA9ICIxIgorUFIgPSAiJHtJTkNfUFJ9LjAiCisKK1JERVBFTkRTXyR7UE59ICs9ICJta2ZvbnRzY2FsZSIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSArPSAibWtmb250c2NhbGUtbmF0aXZlIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjRmY2YyYjkwY2FkYmZjMTUwMDliOWUxMjRkYzNhM2YiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxOGM0MjkxNDhjOTZjMjA3OWVkZGE5MjJhMmI2NzYzMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1NmQ1MmE0ODJkZjEzMDQ4NGU1MWZkMDY2ZDFiNmVkYTdjMmMwMmRkYmM5MWZlNmUyYmUxYjljNGU3MzA2NTMwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAvbWtmb250c2NhbGVfMS4xLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC9ta2ZvbnRzY2FsZV8xLjEuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWNmMTg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAvbWtmb250c2NhbGVfMS4xLjIuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiQSBwcm9ncmFtIHRvIGNyZWF0ZSBhbiBpbmRleCBvZiBzY2FsYWJsZSBmb250IGZpbGVzIGZvciBYIgorCitERVNDUklQVElPTiA9ICJGb3IgZWFjaCBkaXJlY3RvcnkgYXJndW1lbnQsIG1rZm9udHNjYWxlIHJlYWRzIGFsbCBvZiB0aGUgXAorc2NhbGFibGUgZm9udCBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5LiBGb3IgZXZlcnkgZm9udCBmaWxlIGZvdW5kLCBhbiBYMTEgXAorZm9udCBuYW1lIChYTEZEKSBpcyBnZW5lcmF0ZWQsIGFuZCBpcyB3cml0dGVuIHRvZ2V0aGVyIHdpdGggdGhlIGZpbGUgXAorbmFtZSB0byBhIGZpbGUgZm9udHMuc2NhbGUgaW4gdGhlIGRpcmVjdG9yeS4gIFRoZSByZXN1bHRpbmcgZm9udHMuc2NhbGUgXAoraXMgdXNlZCBieSB0aGUgbWtmb250ZGlyIHByb2dyYW0uIgorCitERVBFTkRTID0gInV0aWwtbWFjcm9zLW5hdGl2ZSB6bGliIGxpYmZvbnRlbmMgZnJlZXR5cGUgeHByb3RvIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MmUwZDEyOWQwNTMwNTE3NmQxYTc5MGUwYWMxYWNiN2YiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5YmRkNmViZmE2MmIxYmJkNDc0OTA2YWM4NmE0MGZkOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4YzZkNTIyOGFmODg1NDc3YjlhZWM2MGNhNmYxNzI1NzhlN2QyZGU0MjIzNDM1N2FmNjJmYjAwNDM5NDUzZjIwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAvcmdiXzEuMC42LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAvcmdiXzEuMC42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MjY4MDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC9yZ2JfMS4wLjYuYmIKQEAgLTAsMCArMSwxNiBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWDExIGNvbG9yIG5hbWUgZGF0YWJhc2UiCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgaW5jbHVkZXMgYm90aCB0aGUgbGlzdCBtYXBwaW5nIFggY29sb3IgbmFtZXMgXAordG8gUkdCIHZhbHVlcyAocmdiLnR4dCkgYW5kLCBpZiBjb25maWd1cmVkIHRvIHVzZSBhIGRhdGFiYXNlIGZvciBjb2xvciBcCitsb29rdXAsIHRoZSByZ2IgcHJvZ3JhbSB0byBjb252ZXJ0IHRoZSB0ZXh0IGZpbGUgaW50byB0aGUgYmluYXJ5IGRhdGFiYXNlIFwKK2Zvcm1hdC4iCisKK0RFUEVORFMgKz0gIiB4cHJvdG8gdXRpbC1tYWNyb3MiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lZjU5OGFkYmUyNDFiZDBiMGI5MTEzODMxZjZlMjQ5YSIKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlYWI1YmJkNzY0MmU1Yzc4NDQyOTMwN2VjMjEwZDE5OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiYmNhN2M2YWE1OTkzOWI5ZjZhMGZiOWZmZjE1ZGZkNjIxNzY0MjBmZmQ0YWUzMGM4ZDkyYTZhMTI1ZmJlNmIwIgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9YMTEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94MTFwZXJmXzEuNi4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveDExcGVyZl8xLjYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTkzNTU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveDExcGVyZl8xLjYuMC5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYMTEgc2VydmVyIHBlcmZvcm1hbmNlIHRlc3QgcHJvZ3JhbSIKKworREVTQ1JJUFRJT04gPSAiVGhlIHgxMXBlcmYgcHJvZ3JhbSBydW5zIG9uZSBvciBtb3JlIHBlcmZvcm1hbmNlIHRlc3RzIFwKK2FuZCByZXBvcnRzIGhvdyBmYXN0IGFuIFggc2VydmVyIGNhbiBleGVjdXRlIHRoZSB0ZXN0cy4iCisKKworREVQRU5EUyArPSAibGlieG11IGxpYnhyZW5kZXIgbGlieGZ0IGxpYnhleHQgZm9udGNvbmZpZyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDI4Y2E0ZDY3YTQxZmNkNGZjMzI4M2RjZTliYmRhN2UgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8veDExcGVyZi5oO2VuZGxpbmU9MjQ7bWQ1PTI5NTU1MDY2YmFmNDA2YTEwNWZmOTE3YWMyNWIyZDAxIgorCitQRSA9ICIxIgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L1gxMS94MTFwZXJmY29tcC8qIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZjBiMjRlNGQ4YmViNjIyYTQxOWU4NDMxZTFjMDNjZDciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTg3MDk4ZGVjMTk0NzU3MmQ3MGM2MjY5N2E3YjcwYmRlMWFiNTY2ODIzN2Q0NjYwMDgwZWFkZTZiYzA5Njc1MSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hhdXRoXzEuMC45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGF1dGhfMS4wLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE3M2Y0ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hhdXRoXzEuMC45LmJiCkBAIC0wLDAgKzEsMTIgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworU1VNTUFSWSA9ICJYIGF1dGhvcml0eSB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJYIGFwcGxpY2F0aW9uIHRvIGVkaXQgYW5kIGRpc3BsYXkgdGhlIGF1dGhvcml6YXRpb24gXAoraW5mb3JtYXRpb24gdXNlZCBpbiBjb25uZWN0aW5nIHRvIHRoZSBYIHNlcnZlci4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVlYzc0ZGQ3ZWE0ZDEwYzQ3MTVhN2M0NGYxNTlhNDBiIgorCitERVBFTkRTICs9ICJsaWJ4YXUgbGlieGV4dCBsaWJ4bXUiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiN2Q2MDAzZjMyODM4ZDViNjg4ZTJjOGExMzEwODMyNzEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTZjZTE1MjNlYjQ4YjFmOGE0ZjQyNDRmZTFjM2Q4ZTZhZjFhM2I3ZDRiMGU2MDYzNTgyNDIxYjBiNjhkYzI4ZiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hkcHlpbmZvL2Rpc2FibGUteGtiLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGRweWluZm8vZGlzYWJsZS14a2IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU4MTk5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hkcHlpbmZvL2Rpc2FibGUteGtiLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogeGRweWluZm8tMS4zLjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0geGRweWluZm8tMS4zLjAub3JpZy9jb25maWd1cmUuYWMJMjAxMS0xMC0yMSAyMTozNDoyMS4wMDAwMDAwMDAgLTA3MDAKKysrKyB4ZHB5aW5mby0xLjMuMC9jb25maWd1cmUuYWMJMjAxMS0xMS0yOCAyMDowNjo1Ni41NTQwNTY5MzUgLTA4MDAKK0BAIC00NywxMSArNDcsMTUgQEAKKyAJQUNfQ0hFQ0tfSEVBREVSUyhbWDExL2V4dGVuc2lvbnMvbXVsdGlidWYuaCBYMTEvZXh0ZW5zaW9ucy9YU2htLmhdLCwsWyNpbmNsdWRlIDxYMTEvWGxpYi5oPl0pCisgCUNQUEZMQUdTPSIkU0FWRV9DUFBGTEFHUyJdLFtlY2hvICJub3QgZm91bmQiXSkKKyAKKytBQ19BUkdfRU5BQkxFKHhrYiwgQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS14a2JdLCBbRGlzYWJsZSBYS0Igc3VwcG9ydF0pLAorKwlYS0I9IiRlbmFibGV2YWwiLCBYS0I9InllcyIpCisraWYgdGVzdCAieCRYS0IiID0gInh5ZXMiIDsgdGhlbgorIFBLR19DSEVDS19NT0RVTEVTKERQWV9YS0IsIHgxMSwKKyAJW1NBVkVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAJQ1BQRkxBR1M9IiRDUFBGTEFHUyAkRFBZX1hLQl9DRkxBR1MgJERQWV9YMTFfQ0ZMQUdTIgorIAlBQ19DSEVDS19IRUFERVJTKFtYMTEvZXh0ZW5zaW9ucy9YS0IuaCBYMTEvWEtCbGliLmhdLCwsWyNpbmNsdWRlIDxYMTEvWGxpYi5oPl0pCisgCUNQUEZMQUdTPSIkU0FWRV9DUFBGTEFHUyJdLFtlY2hvICJub3QgZm91bmQiXSkKKytmaQorIAorIFBLR19DSEVDS19NT0RVTEVTKERQWV9YRjg2VklETU9ERSwgeHhmODZ2bSwKKyAJW1NBVkVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hkcHlpbmZvXzEuMy4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGRweWluZm9fMS4zLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYwNGJiNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hkcHlpbmZvXzEuMy4yLmJiCkBAIC0wLDAgKzEsMjAgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIkRpc3BsYXkgaW5mb3JtYXRpb24gdXRpbGl0eSBmb3IgWCIKKworREVTQ1JJUFRJT04gPSAiWGRweWluZm8gaXMgYSB1dGlsaXR5IGZvciBkaXNwbGF5aW5nIGluZm9ybWF0aW9uIGFib3V0IGFuIFwKK1ggc2VydmVyLiBJdCBpcyB1c2VkIHRvIGV4YW1pbmUgdGhlIGNhcGFiaWxpdGllcyBvZiBhIHNlcnZlciwgdGhlIFwKK3ByZWRlZmluZWQgdmFsdWVzIGZvciB2YXJpb3VzIHBhcmFtZXRlcnMgdXNlZCBpbiBjb21tdW5pY2F0aW5nIGJldHdlZW4gXAorY2xpZW50cyBhbmQgdGhlIHNlcnZlciwgYW5kIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2Ygc2NyZWVucyBhbmQgdmlzdWFscyBcCit0aGF0IGFyZSBhdmFpbGFibGUuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mM2QwOWU2YjllMjAzYTFhZjQ4OWUxNmM3MDhmNGZiMyIKK0RFUEVORFMgKz0gImxpYnh0c3QgbGlieGV4dCBsaWJ4eGY4NnZtIGxpYnh4Zjg2ZGdhIGxpYnh4Zjg2bWlzYyBsaWJ4aSBsaWJ4cmVuZGVyIGxpYnhpbmVyYW1hIGxpYmRteCBsaWJ4YXUgbGlieGNvbXBvc2l0ZSIKK1BFID0gIjEiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kaXNhYmxlLXhrYi5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjg4MDkwMzdiZDQ4NTk5YWY1NWRhZDgxYzUwOGI2YjM5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjMwMjM4ZWQ5MTU2MTllMDZjZWI0MTcyMWU1Zjc0N2Q2NzMyMDU1NWNjMzhkNDU5ZTk1NDgzOWMxODljY2FmNTEiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUteGtiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGV2L2RpZXQteDExLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGV2L2RpZXQteDExLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMzA5NTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZXYvZGlldC14MTEucGF0Y2gKQEAgLTAsMCArMSw4MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKKy0tLQorIHhldi5jIHwgICAxNiArKysrKysrKy0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworSW5kZXg6IHhldi0xLjIuMC94ZXYuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHhldi0xLjIuMC5vcmlnL3hldi5jCisrKysgeGV2LTEuMi4wL3hldi5jCitAQCAtMTE2LDcgKzExNiw3IEBAIGRvX0tleVByZXNzIChYRXZlbnQgKmV2ZW50cCkKKyAgICAgbmJ5dGVzID0gWExvb2t1cFN0cmluZyAoZSwgc3RyLCAyNTYsICZrcywgTlVMTCk7CisgCisgICAgIC8qIG5vdCBzdXBwb3NlZCB0byBjYWxsIFhtYkxvb2t1cFN0cmluZyBvbiBhIGtleSByZWxlYXNlIGV2ZW50ICovCistICAgIGlmIChlLT50eXBlID09IEtleVByZXNzICYmIHhpYykgeworKyAgICAvKmlmIChlLT50eXBlID09IEtleVByZXNzICYmIHhpYykgeworICAgICAgICAgZG8geworICAgICAgICAgICAgIG5tYmJ5dGVzID0gWG1iTG9va3VwU3RyaW5nICh4aWMsIGUsIGJ1ZiwgYnNpemUgLSAxLCAma3MsICZzdGF0dXMpOworICAgICAgICAgICAgIGJ1ZltubWJieXRlc10gPSAnXDAnOworQEAgLTEyNiw3ICsxMjYsNyBAQCBkb19LZXlQcmVzcyAoWEV2ZW50ICpldmVudHApCisgICAgICAgICAgICAgICAgIGJ1ZiA9IHJlYWxsb2MgKGJ1ZiwgYnNpemUpOworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0gd2hpbGUgKHN0YXR1cyA9PSBYQnVmZmVyT3ZlcmZsb3cpOworLSAgICB9CisrICAgIH0qLworIAorICAgICBpZiAoa3MgPT0gTm9TeW1ib2wpCisgCWtzbmFtZSA9ICJOb1N5bWJvbCI7CitAQCAtMTU2LDcgKzE1Niw3IEBAIGRvX0tleVByZXNzIChYRXZlbnQgKmV2ZW50cCkKKyAgICAgfQorIAorICAgICAvKiBub3Qgc3VwcG9zZWQgdG8gY2FsbCBYbWJMb29rdXBTdHJpbmcgb24gYSBrZXkgcmVsZWFzZSBldmVudCAqLworLSAgICBpZiAoZS0+dHlwZSA9PSBLZXlQcmVzcyAmJiB4aWMpIHsKKysgICAgLyppZiAoZS0+dHlwZSA9PSBLZXlQcmVzcyAmJiB4aWMpIHsKKyAgICAgICAgIHByaW50ZiAoIiAgICBYbWJMb29rdXBTdHJpbmcgZ2l2ZXMgJWQgYnl0ZXM6ICIsIG5tYmJ5dGVzKTsKKyAgICAgICAgIGlmIChubWJieXRlcyA+IDApIHsKKyAgICAgICAgICAgIGR1bXAgKGJ1Ziwgbm1iYnl0ZXMpOworQEAgLTE2NCw3ICsxNjQsNyBAQCBkb19LZXlQcmVzcyAoWEV2ZW50ICpldmVudHApCisgICAgICAgICB9IGVsc2UgeworICAgICAJICAgcHJpbnRmICgiXG4iKTsKKyAgICAgICAgIH0KKy0gICAgfQorKyAgICB9ICovCisgCisgICAgIHByaW50ZiAoIiAgICBYRmlsdGVyRXZlbnQgcmV0dXJuczogJXNcbiIsCisgCSAgICBYRmlsdGVyRXZlbnQgKGV2ZW50cCwgZS0+d2luZG93KSA/ICJUcnVlIiA6ICJGYWxzZSIpOworQEAgLTEwMTUsNyArMTAxNSw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAgWFNldExvY2FsZU1vZGlmaWVycyBmYWlsZWRcbiIsIFByb2dyYW1OYW1lKTsKKyAgICAgfQorIAorLSAgICB4aW0gPSBYT3BlbklNIChkcHksIE5VTEwsIE5VTEwsIE5VTEwpOworKyAgICAvKnhpbSA9IFhPcGVuSU0gKGRweSwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgIGlmICh4aW0gPT0gTlVMTCkgeworICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICBYT3BlbklNIGZhaWxlZFxuIiwgUHJvZ3JhbU5hbWUpOworICAgICB9CitAQCAtMTA0Miw3ICsxMDQyLDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBYRnJlZSAoeGltX3N0eWxlcyk7CisgICAgICAgICB9CistICAgIH0KKysJfSovCisgCisgICAgIHNjcmVlbiA9IERlZmF1bHRTY3JlZW4gKGRweSk7CisgCitAQCAtMTEwOSw3ICsxMTA5LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAlwcmludGYgKCJPdXRlciB3aW5kb3cgaXMgMHglbHgsIGlubmVyIHdpbmRvdyBpcyAweCVseFxuIiwgdywgc3Vidyk7CisgICAgIH0KKyAKKy0gICAgaWYgKHhpbSAmJiB4aW1fc3R5bGUpIHsKKysgICAgLyppZiAoeGltICYmIHhpbV9zdHlsZSkgeworICAgICAgICAgeGljID0gWENyZWF0ZUlDICh4aW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIFhOSW5wdXRTdHlsZSwgeGltX3N0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBYTkNsaWVudFdpbmRvdywgdywKK0BAIC0xMTE5LDcgKzExMTksNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICAgICAgICBpZiAoeGljID09IE5VTEwpIHsKKyAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJYQ3JlYXRlSUMgZmFpbGVkXG4iKTsKKyAgICAgICAgIH0KKy0gICAgfQorKyAgICB9Ki8KKyAKKyAgICAgaGF2ZV9yciA9IFhSUlF1ZXJ5RXh0ZW5zaW9uIChkcHksICZycl9ldmVudF9iYXNlLCAmcnJfZXJyb3JfYmFzZSk7CisgICAgIGlmIChoYXZlX3JyKSB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZXZfMS4yLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZXZfMS4yLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE1MWI1NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hldl8xLjIuMi5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYIEV2ZW50IFZpZXdlciIKK0RFU0NSSVBUSU9OID0gIlhldiBjcmVhdGVzIGEgd2luZG93IGFuZCB0aGVuIGFza3MgdGhlIFggc2VydmVyIHRvIHNlbmQgaXQgZXZlbnRzIFwKK3doZW5ldmVyIGFueXRoaW5nIGhhcHBlbnMgdG8gdGhlIHdpbmRvdyAoc3VjaCBhcyBpdCBiZWluZyBtb3ZlZCwgcmVzaXplZCwgXAordHlwZWQgaW4sIGNsaWNrZWQgaW4sIGV0Yy4pLiBZb3UgY2FuIGFsc28gYXR0YWNoIGl0IHRvIGFuIGV4aXN0aW5nIHdpbmRvdy4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3hldi5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MzM7bWQ1PTU3N2M5OTQyMWYxODAzYjg5MWQyYzc5MDk3YWU0NjgyIgorTElDRU5TRSA9ICJNSVQiCisKK1BFID0gIjEiCisKK0RFUEVORFMgKz0gImxpYnhyYW5kciB4cHJvdG8iCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kaWV0LXgxMS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjI0OWJkZGU5MGYwMWMwZDg2MWFmNTJkYzhmZWMzNzllIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQ5NGFlNjJhNmMxYWY1NmMyOTYxZDcxZjU3ODIwNzZhYzQxMTZmMGZhNGU0MDE0MjBhYzdlMGRiMzNkYzMxNGYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZXllc18xLjEuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hleWVzXzEuMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZDBjYjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZXllc18xLjEuMS5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYMTEgZXllcyB0aGF0IGZvbGxvdyB0aGUgbW91c2UgY3Vyc29yIGRlbW8iCitERVNDUklQVElPTiA9ICJYZXllcyBpcyBhIHNtYWxsIFgxMSBhcHBsaWNhdGlvbiB0aGF0IHNob3dzIGEgcGFpciBvZiBleWVzIHRoYXQgbW92ZSB0byBcCitmb2xsb3cgdGhlIGxvY2F0aW9uIG9mIHRoZSBtb3VzZSBjdXJzb3IgYXJvdW5kIHRoZSBzY3JlZW4uIgorCitQRSA9ICIxIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zZWE1MWIzNjUwNTFhYzMyZDE4MTNhN2RiYWE0YmZjNiIKKworU1JDX1VSSVttZDVzdW1dID0gImEzMDM1ZGNlY2RiZGI4OWU4NjQxNzdjMDgwOTI0OTgxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk3NWU5ODY4MGNkNTllMWY5NDM5MDE2Mzg2NjA5NTQ2ZWQwOGMyODRkMGYwNWE5NTI3NmY5NmFjYTZlOGE1MjEiCisKK0RFUEVORFMgKz0gImxpYnhhdSBsaWJ4dCBsaWJ4ZXh0IGxpYnhtdSBsaWJ4cmVuZGVyIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGhvc3RfMS4wLjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94aG9zdF8xLjAuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjU3MzdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGhvc3RfMS4wLjcuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiU2VydmVyIGFjY2VzcyBjb250cm9sIHByb2dyYW0gZm9yIFgiCisKK0RFU0NSSVBUSU9OID0gIlRoZSB4aG9zdCBwcm9ncmFtIGlzIHVzZWQgdG8gYWRkIGFuZCBkZWxldGUgaG9zdCBuYW1lcyBvciBcCit1c2VyIG5hbWVzIHRvIHRoZSBsaXN0IGFsbG93ZWQgdG8gbWFrZSBjb25uZWN0aW9ucyB0byB0aGUgWCBzZXJ2ZXIuIEluIFwKK3RoZSBjYXNlIG9mIGhvc3RzLCB0aGlzIHByb3ZpZGVzIGEgcnVkaW1lbnRhcnkgZm9ybSBvZiBwcml2YWN5IGNvbnRyb2wgXAorYW5kIHNlY3VyaXR5LiBFbnZpcm9ubWVudHMgd2hpY2ggcmVxdWlyZSBtb3JlIHNvcGhpc3RpY2F0ZWQgbWVhc3VyZXMgXAorc2hvdWxkIGltcGxlbWVudCB0aGUgdXNlci1iYXNlZCBtZWNoYW5pc20gb3IgdXNlIHRoZSBob29rcyBpbiB0aGUgXAorcHJvdG9jb2wgZm9yIHBhc3Npbmcgb3RoZXIgYXV0aGVudGljYXRpb24gZGF0YSB0byB0aGUgc2VydmVyLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OGZiZWQ3MWRkZGY0ODU0MTgxOGNlZjgwNzkxMjQxOTkiCitERVBFTkRTICs9ICJsaWJ4bXUgbGlieGF1IgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gImY1ZDQ5MDczOGIxNDhjYjdmMmZlNzYwZjQwZjkyNTE2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjkzZTYxOWVlMTU0NzFmNTc2Y2ZiMzBjNjYzZTE4ZjViYzcwYWNhNTc3YTYzZDJjMmMwM2YwMDZhNzgzN2MyOWEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94aW5pdF8xLjMuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hpbml0XzEuMy40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMTg1MTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94aW5pdF8xLjMuNC5iYgpAQCAtMCwwICsxLDIwIEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYIFdpbmRvdyBTeXN0ZW0gaW5pdGlhbGl6ZXIiCisKK0RFU0NSSVBUSU9OID0gIlRoZSB4aW5pdCBwcm9ncmFtIGlzIHVzZWQgdG8gc3RhcnQgdGhlIFggV2luZG93IFN5c3RlbSBcCitzZXJ2ZXIgYW5kIGEgZmlyc3QgY2xpZW50IHByb2dyYW0gb24gc3lzdGVtcyB0aGF0IGNhbm5vdCBzdGFydCBYIFwKK2RpcmVjdGx5IGZyb20gL2V0Yy9pbml0IG9yIGluIGVudmlyb25tZW50cyB0aGF0IHVzZSBtdWx0aXBsZSB3aW5kb3cgXAorc3lzdGVtcy4gV2hlbiB0aGlzIGZpcnN0IGNsaWVudCBleGl0cywgeGluaXQgd2lsbCBraWxsIHRoZSBYIHNlcnZlciBhbmQgXAordGhlbiB0ZXJtaW5hdGUuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xOGYwMWU3YjM5ODA3YmViZTJiOGRmMTAxYTAzOWI2OCIKKworUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjRlOTI4NDUyZGZhZjczODUxNDEzYTJkOGI4Yzc2Mzg4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc1ZDg4ZDczOTdhMDdlMDFkYjI1MzE2M2I3YzdhMDBiMjQ5YjNkMzBlOTk0ODlmMjczNGNhYzlhMGM3OTAyYjMiCisKK0VYVFJBX09FQ09ORiA9ICJhY19jdl9wYXRoX01DT09LSUU9JHtiaW5kaXJ9L21jb29raWUiCisKK1JERVBFTkRTXyR7UE59ICs9ICJ1dGlsLWxpbnV4LW1jb29raWUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94aW5wdXRfMS42LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94aW5wdXRfMS42LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJlZmNjOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hpbnB1dF8xLjYuMS5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJSdW50aW1lIGNvbmZpZ3VyYXRpb24gYW5kIHRlc3Qgb2YgWElucHV0IGRldmljZXMiCisKK0RFU0NSSVBUSU9OID0gIlhpbnB1dCBpcyBhbiB1dGlsaXR5IGZvciBjb25maWd1cmluZyBhbmQgdGVzdGluZyBYSW5wdXQgZGV2aWNlcyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODgxNTI1Zjg5Zjk5Y2FkMzljOTgzMmJjYjcyZTZmYTUiCisKK0RFUEVORFMgKz0gIiBsaWJ4aSBsaWJ4cmFuZHIgbGlieGluZXJhbWEiCisKKworU1JDX1VSSVttZDVzdW1dID0gIjMwNTk4MGFjNzhhNjk1NGUzMDZhMTRkODBhNTRjNDQxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI3NjMyZDBmMjI4YThhNmJlOTNiMDk4NTdlYTQxMzk0MGZjZjQ0MDkxZTYwZjRhMGZlOWY1ZmQ4MmVmZDg3MWYiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hrYmNvbXBfMS4zLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94a2Jjb21wXzEuMy4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYWMwNjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94a2Jjb21wXzEuMy4wLmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIkEgcHJvZ3JhbSB0byBjb21waWxlIFhLQiBrZXlib2FyZCBkZXNjcmlwdGlvbiIKKworREVTQ1JJUFRJT04gPSAiVGhlIHhrYmNvbXAga2V5bWFwIGNvbXBpbGVyIGNvbnZlcnRzIGEgZGVzY3JpcHRpb24gb2YgYW4gXAorWEtCIGtleW1hcCBpbnRvIG9uZSBvZiBzZXZlcmFsIG91dHB1dCBmb3JtYXRzLiBUaGUgbW9zdCBjb21tb24gdXNlIGZvciBcCit4a2Jjb21wIGlzIHRvIGNyZWF0ZSBhIGNvbXBpbGVkIGtleW1hcCBmaWxlICgueGttIGV4dGVuc2lvbikgd2hpY2ggY2FuIFwKK2JlIHJlYWQgZGlyZWN0bHkgYnkgWEtCLWNhcGFibGUgWCBzZXJ2ZXJzIG9yIHV0aWxpdGllcy4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA4NDM2ZTRmNDQ3Njk2NGUyZTJkZDdlN2U0MWUwNzZhIgorCitQUiA9ICIke0lOQ19QUn0uMCIKKworREVQRU5EUyArPSAibGlieGtiZmlsZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwMDEyYThlMzA5MmNkZGY3Zjg3YjI1MGY5NmJiMzhjNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjZmFjOTczNzc4ZmFiZjUyMTYxMjFhZDYwYjdhZjhhYjc0Y2U3NTEzYWYwZjkyNjBjZjhjNTMwOWUxNjIyYjJhIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveG1vZG1hcF8xLjAuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3htb2RtYXBfMS4wLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRlYWM2YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3htb2RtYXBfMS4wLjkuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiVXRpbGl0eSBmb3IgbW9kaWZ5aW5nIGtleW1hcHMgYW5kIHBvaW50ZXIgYnV0dG9uIG1hcHBpbmdzIGluIFgiCisKK0RFU0NSSVBUSU9OID0gIlRoZSB4bW9kbWFwIHByb2dyYW0gaXMgdXNlZCB0byBlZGl0IGFuZCBkaXNwbGF5IHRoZSBcCitrZXlib2FyZCBtb2RpZmllciBtYXAgYW5kIGtleW1hcCB0YWJsZSB0aGF0IGFyZSB1c2VkIGJ5IGNsaWVudCBcCithcHBsaWNhdGlvbnMgdG8gY29udmVydCBldmVudCBrZXljb2RlcyBpbnRvIGtleXN5bXMuIEl0IGlzIHVzdWFsbHkgcnVuIFwKK2Zyb20gdGhlIHVzZXIncyBzZXNzaW9uIHN0YXJ0dXAgc2NyaXB0IHRvIGNvbmZpZ3VyZSB0aGUga2V5Ym9hcmQgXAorYWNjb3JkaW5nIHRvIHBlcnNvbmFsIHRhc3Rlcy4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MjcyYzE3ZTk2MzcwZTFlNzQ3NzNmYTIyZDk5ODk2MjEiCisKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MjNmMDJkM2E1Zjk4NDUwNTU0NTU2MjA1ZjBhOTQ5NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiN2IwZTVjYzVmMTBkMGZiNmQyZDZlYTRmMDBjNzdlOGFjMGU4NDdjYzVhNzNiZTk0Y2Q4NjEzOWFjNGFjNDc4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveG9yZy1hcHAtY29tbW9uLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hvcmctYXBwLWNvbW1vbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUyOWNiMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hvcmctYXBwLWNvbW1vbi5pbmMKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJYIGFwcGxpY2F0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy54Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gIngxMS9hcHBzIgorTElDRU5TRSA9ICJNSVQtWCIKK0RFUEVORFMgPSAidXRpbC1tYWNyb3MtbmF0aXZlIHZpcnR1YWwvbGlieDExIgorCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK0lOQ19QUiA9ICJyOCIKKworU1JDX1VSSSA9ICIke1hPUkdfTUlSUk9SfS9pbmRpdmlkdWFsL2FwcC8ke0JQTn0tJHtQVn0udGFyLmJ6MiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitGSUxFU18ke1BOfSArPSAiICR7bGliZGlyfS9YMTEvJHtCUE59ICR7ZGF0YWRpcn0vWDExL2FwcC1kZWZhdWx0cy8iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94cHJvcF8xLjIuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hwcm9wXzEuMi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3OGJmMDQ1MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hwcm9wXzEuMi4yLmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIlV0aWxpdHkgdG8gZGlzcGxheSB3aW5kb3cgYW5kIGZvbnQgcHJvcGVydGllcyBvZiBhbiBYIHNlcnZlciIKKworREVTQ1JJUFRJT04gPSAiVGhlIHhwcm9wIHV0aWxpdHkgaXMgZm9yIGRpc3BsYXlpbmcgd2luZG93IGFuZCBmb250IFwKK3Byb3BlcnRpZXMgaW4gYW4gWCBzZXJ2ZXIuIE9uZSB3aW5kb3cgb3IgZm9udCBpcyBzZWxlY3RlZCB1c2luZyB0aGUgXAorY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBvciBwb3NzaWJseSBpbiB0aGUgY2FzZSBvZiBhIHdpbmRvdywgYnkgY2xpY2tpbmcgXAorb24gdGhlIGRlc2lyZWQgd2luZG93LiBBIGxpc3Qgb2YgcHJvcGVydGllcyBpcyB0aGVuIGdpdmVuLCBwb3NzaWJseSB3aXRoIFwKK2Zvcm1hdHRpbmcgaW5mb3JtYXRpb24uIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lMjI2YWI4ZGI4OGFjMGJjMDM5MTY3M2JlNDBjOWY5MSIKKworREVQRU5EUyArPSAibGlieG11IgorCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmFlM2QyZmRhMDc2ODQwMjdhNjQzY2E3ODNkNTk1Y2MiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWJlZTg4YjEwMjU4NjVhZDEyMWY3MmQzMjU3NmRkMzAyN2FmMTQ0Njc3NGFhODMwMGNjZTNjMjYxZDg2OWJjNiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hyYW5kcl8xLjQuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hyYW5kcl8xLjQuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWJkNDIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHJhbmRyXzEuNC4zLmJiCkBAIC0wLDAgKzEsMTUgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIlhSYW5kUjogWCBSZXNpemUsIFJvdGF0ZSBhbmQgUmVmbGVjdCBleHRlbnNpb24gY29tbWFuZCIKKworREVTQ1JJUFRJT04gPSAiWHJhbmRyIGlzIHVzZWQgdG8gc2V0IHRoZSBzaXplLCBvcmllbnRhdGlvbiBhbmQvb3IgXAorcmVmbGVjdGlvbiBvZiB0aGUgb3V0cHV0cyBmb3IgYSBzY3JlZW4uIEl0IGNhbiBhbHNvIHNldCB0aGUgc2NyZWVuIFwKK3NpemUuIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWZlMTYwOGJkYjMzY2Y4YzYyYTQ0MzhmN2QzNDY3OWIzIgorREVQRU5EUyArPSAibGlieHJhbmRyIGxpYnhyZW5kZXIiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDQxZmRiOThkMmFiYzYwNTExMDhiNzA3NWQ5NDhmYzciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzE1NGFjMzQ4NmI4NjkyMzY5MmYyZDZjZGIyOTkxYTJlZTcyYmMzMmFmMmM0Mzc5YTZmMWMwNjhmMjA0YmUxYiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hzZXQvZGlzYWJsZS14a2IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94c2V0L2Rpc2FibGUteGtiLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZDEzYTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94c2V0L2Rpc2FibGUteGtiLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK2FkZCAiLWRpc2FibGUteGtiIiBvcHRpb24KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JlYmFzZSBmb3IgMS4yLjEgYnk6IFl1IEtlIDxrZS55dUBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDgxYzNhZTQuLjI2NjAxYmYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTUyLDExICs1MiwxNSBAQCBQS0dfQ0hFQ0tfTU9EVUxFUyhTRVRfWEVYVCwgeGV4dCwKKyAJQUNfQ0hFQ0tfSEVBREVSUyhbWDExL2V4dGVuc2lvbnMvZHBtcy5oIFgxMS9leHRlbnNpb25zL01JVE1pc2MuaF0sLCxbI2luY2x1ZGUgPFgxMS9YbGliLmg+XSkKKyAJQ1BQRkxBR1M9IiRTQVZFX0NQUEZMQUdTIl0sW2VjaG8gIm5vdCBmb3VuZCJdKQorIAorK0FDX0FSR19FTkFCTEUoeGtiLCBBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXhrYl0sIFtEaXNhYmxlIFhLQiBzdXBwb3J0XSksCisrCQlYS0I9IiRlbmFibGV2YWwiLCBYS0I9InllcyIpCisraWYgdGVzdCAieCRYS0IiID0gInh5ZXMiIDsgdGhlbgorIFBLR19DSEVDS19NT0RVTEVTKFNFVF9YS0IsIHgxMSwKKyAJW1NBVkVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAJQ1BQRkxBR1M9IiRDUFBGTEFHUyAkU0VUX1hLQl9DRkxBR1MgJFNFVF9YMTFfQ0ZMQUdTIgorIAlBQ19DSEVDS19IRUFERVJTKFtYMTEvWEtCbGliLmhdLCwsWyNpbmNsdWRlIDxYMTEvWGxpYi5oPl0pCisgCUNQUEZMQUdTPSIkU0FWRV9DUFBGTEFHUyJdLFtlY2hvICJub3QgZm91bmQiXSkKKytmaQorIAorIEFDX0FSR19XSVRIKHhmODZtaXNjLCBBQ19IRUxQX1NUUklORyhbLS13aXRob3V0LXhmODZtaXNjXSxbRGlzYWJsZSB4Zjg2bWlzYyBzdXBwb3J0Ll0pLAorICAgICAgICAgICAgICAgICBbVVNFX1hGODZNSVNDPSIkd2l0aHZhbCJdLCBbVVNFX1hGODZNSVNDPSJ5ZXMiXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hzZXRfMS4yLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94c2V0XzEuMi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ODNiNzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94c2V0XzEuMi4zLmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIlV0aWxpdHkgZm9yIHNldHRpbmcgdmFyaW91cyB1c2VyIHByZWZlcmVuY2Ugb3B0aW9ucyBvZiB0aGUgZGlzcGxheSIKKworREVTQ1JJUFRJT04gPSAieHNldCBpcyBhIHV0aWxpdHkgdGhhdCBpcyB1c2VkIHRvIHNldCB2YXJpb3VzIHVzZXIgXAorcHJlZmVyZW5jZSBvcHRpb25zIG9mIHRoZSBkaXNwbGF5LiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iZWE4MWNjOTgyN2NkZjFhZjBlMTJjMmI4MjI4Y2Y4ZCIKK0RFUEVORFMgKz0gImxpYnhleHQgbGlieHhmODZtaXNjIGxpYnhtdSBsaWJ4YXUiCitQRSA9ICIxIgorCitTUkNfVVJJICs9ICJmaWxlOi8vZGlzYWJsZS14a2IucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkY2QyMjczODhiNTc0ODdkNTQzY2FiMmZkN2E2MDJkNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0MzgyZjRmYjI5Yjg4NjQ3ZTEzZjNiNGJjMjkyNjMxMzQyNzA3NDdmYzE1OWNmYzVmN2UzYWYyMzU4OGM4MDYzIgorCitDRkxBR1MgKz0gIi1EX0dOVV9TT1VSQ0UiCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXhrYiAtLXdpdGhvdXQtZm9udGNhY2hlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHZpbmZvXzEuMS4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHZpbmZvXzEuMS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NjVlZjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94dmluZm9fMS4xLjMuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiUHJpbnQgb3V0IFgtVmlkZW8gZXh0ZW5zaW9uIGFkYXB0b3IgaW5mb3JtYXRpb24iCisKK0RFU0NSSVBUSU9OID0gInh2aW5mbyBwcmludHMgb3V0IHRoZSBjYXBhYmlsaXRpZXMgb2YgYW55IHZpZGVvIGFkYXB0b3JzIFwKK2Fzc29jaWF0ZWQgd2l0aCB0aGUgZGlzcGxheSB0aGF0IGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIFgtVmlkZW8gXAorZXh0ZW5zaW9uLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjY2NDEwMWFkN2ExZGM3NThhNGM0MTA5YmY5NzhlNjgiCitERVBFTkRTICs9ICIgbGlieHYiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTU4MzYwMTc2YjcxOGRlZTNjMzliYzA2NDhjMGQxMGMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWZiYThiNjhkYWY1Mzg2M2U2NmQ1MDA0ZmE5YzcwM2ZjZWNmNjlkYjRkMTUxZWEyZDNkODg1ZDYyMWU2ZTVlYiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3h3aW5pbmZvXzEuMS4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHdpbmluZm9fMS4xLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E0NTI0MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3h3aW5pbmZvXzEuMS4zLmJiCkBAIC0wLDAgKzEsMTUgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIldpbmRvdyBpbmZvcm1hdGlvbiB1dGlsaXR5IGZvciBYIgorCitERVNDUklQVElPTiA9ICJYd2luaW5mbyBpcyBhIHV0aWxpdHkgZm9yIGRpc3BsYXlpbmcgaW5mb3JtYXRpb24gYWJvdXQgXAord2luZG93cy4gIEluZm9ybWF0aW9uIG1heSBpbmNsdWRlIHdpbmRvdyBwb3NpdGlvbiwgc2l6ZSwgY29sb3IgZGVwdGgsIFwKK2FuZCBhIG51bWJlciBvZiBvdGhlciBpdGVtcy4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc4OTc2Y2QzMTE1ZjZmYWY2MTVhY2NjNGUwOTRkOTBlIgorREVQRU5EUyArPSAibGlieGV4dCBsaWJ4bXUiCisKK1BFID0gIjAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiNzc3YmFmYjY3NDU1NWU0OGZkODQzNzYxODI3MDkzMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyMThlYjBlYTk1YmQ4ZGU3OTAzZGZhYTI2NDIzODIwYzUyM2FkMTU5OGJlMDc1MWQyZDhiNmEyYzIzYjIzZmY4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1ldmRldl8yLjkuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtZXZkZXZfMi45LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY0MjhkZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtZXZkZXZfMi45LjIuYmIKQEAgLTAsMCArMSwyMCBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci1pbnB1dC5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBldmVudCBkZXZpY2VzIChldmRldikgaW5wdXQgZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJldmRldiBpcyBhbiBYb3JnIGlucHV0IGRyaXZlciBmb3IgTGludXgncyBnZW5lcmljIGV2ZW50IFwKK2RldmljZXMuIEl0IHRoZXJlZm9yZSBzdXBwb3J0cyBhbGwgaW5wdXQgZGV2aWNlcyB0aGF0IHRoZSBrZXJuZWwga25vd3MgXAorYWJvdXQsIGluY2x1ZGluZyBtb3N0IG1pY2UgYW5kIGtleWJvYXJkcy4gXAorXAorVGhlIGV2ZGV2IGRyaXZlciBjYW4gc2VydmUgYXMgYm90aCBhIHBvaW50ZXIgYW5kIGEga2V5Ym9hcmQgaW5wdXQgXAorZGV2aWNlLCBhbmQgbWF5IGJlIHVzZWQgYXMgYm90aCB0aGUgY29yZSBrZXlib2FyZCBhbmQgdGhlIGNvcmUgcG9pbnRlci4gXAorTXVsdGlwbGUgaW5wdXQgZGV2aWNlcyBhcmUgc3VwcG9ydGVkIGJ5IG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGlzIFwKK2RyaXZlciwgd2l0aCBvbmUgTG9hZCBkaXJlY3RpdmUgZm9yIGV2ZGV2IGluIHRoZSBNb2R1bGUgc2VjdGlvbiBvZiB5b3VyIFwKK3hvcmcuY29uZiBmb3IgZWFjaCBpbnB1dCBkZXZpY2UgdGhhdCB3aWxsIHVzZSB0aGlzIGRyaXZlci4gIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mZWZlMzNiMWNmMGNhY2JhMGU3MmUzYjBmYTBmMGUxNiIKKworREVQRU5EUyArPSAibXRkZXYgbGliZXZkZXYiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5OWVlYmYxNzFlNmM3YmZmYzQyZDRmYzQzMGQ0NzQ1NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3OTIzMjliNTMxYWZjNjkyOGNjZGE5NGU0YjUxYTU1MjBkNGRkZjhlZjlhMDA4OTBhNWQwZDMxODk4YWNlZmVjIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1rZXlib2FyZF8xLjguMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQta2V5Ym9hcmRfMS44LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZlNTFhYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQta2V5Ym9hcmRfMS44LjEuYmIKQEAgLTAsMCArMSwxMyBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci1pbnB1dC5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBrZXlib2FyZCBpbnB1dCBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gImtleWJvYXJkIGlzIGFuIFhvcmcgaW5wdXQgZHJpdmVyIGZvciBrZXlib2FyZHMuIFRoZSBcCitkcml2ZXIgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIE9TLXByb3ZpZGVkIGtleWJvYXJkIGludGVyZmFjZS4gIFRoZSBkcml2ZXIgXAorZnVuY3Rpb25zIGFzIGEga2V5Ym9hcmQgaW5wdXQgZGV2aWNlLCBhbmQgbWF5IGJlIHVzZWQgYXMgdGhlIFggc2VydmVyJ3MgXAorY29yZSBrZXlib2FyZC4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWVhMjA5OWQyNGFjOWUzMTZhNmQ0YjlmMjBiM2Q0ZTEwIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTZjY2M0M2QzODliOTcwYWZiZDM4OTM4NzVkZmQ2NzgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWFjOGZmMzliZjlkYTdkMmZjN2ZkNmMyNDUxNTcyNmU4MTM4MzQwYzA1MThhYjhjNjA2ZTAwOGNmOTNjYTIxMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQta2V5Ym9hcmRfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1rZXlib2FyZF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZiMDhmNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQta2V5Ym9hcmRfZ2l0LmJiCkBAIC0wLDAgKzEsMTYgQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItaW5wdXQuaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0ga2V5Ym9hcmQgaW5wdXQgZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJrZXlib2FyZCBpcyBhbiBYb3JnIGlucHV0IGRyaXZlciBmb3Iga2V5Ym9hcmRzLiBUaGUgXAorZHJpdmVyIHN1cHBvcnRzIHRoZSBzdGFuZGFyZCBPUy1wcm92aWRlZCBrZXlib2FyZCBpbnRlcmZhY2UuICBUaGUgZHJpdmVyIFwKK2Z1bmN0aW9ucyBhcyBhIGtleWJvYXJkIGlucHV0IGRldmljZSwgYW5kIG1heSBiZSB1c2VkIGFzIHRoZSBYIHNlcnZlcidzIFwKK2NvcmUga2V5Ym9hcmQuIgorCitTUkNSRVYgPSAiM2UyOGQ2OGI1MGQyOTE5Mzg3MzRlOTY4NGI4Mjk2Y2E4NjRmMzg5MiIKK1BWID0gIjEuMy4yK2dpdCR7U1JDUFZ9IgorUFIgPSAiJHtJTkNfUFJ9LjAiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hvcmcvZHJpdmVyL3hmODYtaW5wdXQta2V5Ym9hcmQiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LW1vdXNlL3VuYnJlYWsucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LW1vdXNlL3VuYnJlYWsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkzMDg2NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtbW91c2UvdW5icmVhay5wYXRjaApAQCAtMCwwICsxLDIxIEBACitVbmJyZWFrIHRoZSBsaW51eCBtb3VzZSBkcml2ZXIgYnkgdXNpbmcgY29uZmlnLmgKKworUlAgLSA0LzExLzA3CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ2l0L3NyYy9sbnhfbW91c2UuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy9sbnhfbW91c2UuYwkyMDA4LTExLTA0IDIzOjQ2OjA1LjAwMDAwMDAwMCArMDAwMAorKysrIGdpdC9zcmMvbG54X21vdXNlLmMJMjAwOC0xMS0wNCAyMzo0NjoxNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0zLDggKzMsOCBAQAorICAqIENvcHlyaWdodCAxOTk5IGJ5IFRoZSBYRnJlZTg2IFByb2plY3QsIEluYy4KKyAgKi8KKyAKKy0jaWZkZWYgSEFWRV9YT1JHX0NPTkZJR19ICistI2luY2x1ZGUgPHhvcmctY29uZmlnLmg+CisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCisgI2luY2x1ZGUgPFgxMS9YLmg+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LW1vdXNlXzEuOS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1tb3VzZV8xLjkuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjBiNzhhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1tb3VzZV8xLjkuMS5iYgpAQCAtMCwwICsxLDE1IEBACityZXF1aXJlIHhvcmctZHJpdmVyLWlucHV0LmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIG1vdXNlIGlucHV0IGRyaXZlciIKKworREVTQ1JJUFRJT04gPSAibW91c2UgaXMgYW4gWG9yZyBpbnB1dCBkcml2ZXIgZm9yIG1pY2UuIFRoZSBkcml2ZXIgXAorc3VwcG9ydHMgbW9zdCBhdmFpbGFibGUgbW91c2UgdHlwZXMgYW5kIGludGVyZmFjZXMuICBUaGUgbW91c2UgZHJpdmVyIFwKK2Z1bmN0aW9ucyBhcyBhIHBvaW50ZXIgaW5wdXQgZGV2aWNlLCBhbmQgbWF5IGJlIHVzZWQgYXMgdGhlIFggc2VydmVyJ3MgXAorY29yZSBwb2ludGVyLiBNdWx0aXBsZSBtaWNlIGFyZSBzdXBwb3J0ZWQgYnkgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoaXMgXAorZHJpdmVyLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTBlYTlmOTBkNzJiNmQ5MzI3ZGVkZTVmZmRiMmE1MTAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3NzA4NWI2NDljNWMwYjMzMzU2NWJhNTYyZjU3Mzk1MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzNDg1ZDM3NTc3OWMwODQwNmYwNzg5ZmVlZGRlMTU5MzNkYzcwMzE1OGEwODZkZGFjNjM4NTk4ZjQ3OWZjNWNlIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LW1vdXNlX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtbW91c2VfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3OWEyZTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LW1vdXNlX2dpdC5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctZHJpdmVyLWlucHV0LmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIG1vdXNlIGlucHV0IGRyaXZlciIKKworREVTQ1JJUFRJT04gPSAibW91c2UgaXMgYW4gWG9yZyBpbnB1dCBkcml2ZXIgZm9yIG1pY2UuIFRoZSBkcml2ZXIgXAorc3VwcG9ydHMgbW9zdCBhdmFpbGFibGUgbW91c2UgdHlwZXMgYW5kIGludGVyZmFjZXMuICBUaGUgbW91c2UgZHJpdmVyIFwKK2Z1bmN0aW9ucyBhcyBhIHBvaW50ZXIgaW5wdXQgZGV2aWNlLCBhbmQgbWF5IGJlIHVzZWQgYXMgdGhlIFggc2VydmVyJ3MgXAorY29yZSBwb2ludGVyLiBNdWx0aXBsZSBtaWNlIGFyZSBzdXBwb3J0ZWQgYnkgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoaXMgXAorZHJpdmVyLiIKKworU1JDUkVWID0gImVhNWNmZTgwNGUxMTJmMzIwZjE0YWQ4OTZjNzgwMmQ1MzU1MWQzZTYiCitQViA9ICIxLjMuMCtnaXQke1NSQ1BWfSIKK1BSID0gIiR7SU5DX1BSfS4wIgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94b3JnL2RyaXZlci94Zjg2LWlucHV0LW1vdXNlIFwKKyAgICAgICAgICAgZmlsZTovL3VuYnJlYWsucGF0Y2giCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LXN5bmFwdGljc18xLjguMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtc3luYXB0aWNzXzEuOC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YzEyMmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LXN5bmFwdGljc18xLjguMi5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctZHJpdmVyLWlucHV0LmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIHN5bmFwdGljcyB0b3VjaHBhZCBpbnB1dCBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gInN5bmFwdGljcyBpcyBhbiBYb3JnIGlucHV0IGRyaXZlciBmb3IgdGhlIHRvdWNocGFkcyBmcm9tIFwKK1N5bmFwdGljcyBJbmNvcnBvcmF0ZWQuIEV2ZW4gdGhvdWdoIHRoZXNlIHRvdWNocGFkcyAoYnkgZGVmYXVsdCwgXAorb3BlcmF0aW5nIGluIGEgY29tcGF0aWJpbGl0eSBtb2RlIGVtdWxhdGluZyBhIHN0YW5kYXJkIG1vdXNlKSBjYW4gYmUgXAoraGFuZGxlZCBieSB0aGUgbm9ybWFsIGV2ZGV2IG9yIG1vdXNlIGRyaXZlcnMsIHRoaXMgZHJpdmVyIGFsbG93cyBtb3JlIFwKK2FkdmFuY2VkIGZlYXR1cmVzIG9mIHRoZSB0b3VjaHBhZCB0byBiZWNvbWUgYXZhaWxhYmxlLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTVhYWNkMzUzNWE3NDE4MjQ5NTVjNWViOGYwNjEzOTgiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4ZWQ2OGU4Y2M2NzRkZDYxYWRiMjgwNzA0NzY0YWFmYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3YjBlMTY0ZWJkMDJhNjgwZTBjNjk1OTU1ZTc4MzA1OWYzN2VkYjBjMjY1NjM5OGUwYTk3MmFkYzhlNjk4YzgwIgorCitERVBFTkRTICs9ICJsaWJ4aSBtdGRldiBsaWJ4dHN0IGxpYmV2ZGV2IgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9YMTEveG9yZy5jb25mLmQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LXN5bmFwdGljc19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LXN5bmFwdGljc19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQwZjYzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtc3luYXB0aWNzX2dpdC5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctZHJpdmVyLWlucHV0LmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIHN5bmFwdGljcyB0b3VjaHBhZCBpbnB1dCBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gInN5bmFwdGljcyBpcyBhbiBYb3JnIGlucHV0IGRyaXZlciBmb3IgdGhlIHRvdWNocGFkcyBmcm9tIFwKK1N5bmFwdGljcyBJbmNvcnBvcmF0ZWQuIEV2ZW4gdGhvdWdoIHRoZXNlIHRvdWNocGFkcyAoYnkgZGVmYXVsdCwgXAorb3BlcmF0aW5nIGluIGEgY29tcGF0aWJpbGl0eSBtb2RlIGVtdWxhdGluZyBhIHN0YW5kYXJkIG1vdXNlKSBjYW4gYmUgXAoraGFuZGxlZCBieSB0aGUgbm9ybWFsIGV2ZGV2IG9yIG1vdXNlIGRyaXZlcnMsIHRoaXMgZHJpdmVyIGFsbG93cyBtb3JlIFwKK2FkdmFuY2VkIGZlYXR1cmVzIG9mIHRoZSB0b3VjaHBhZCB0byBiZWNvbWUgYXZhaWxhYmxlLiIKKworU1JDUkVWID0gIjkzNGJjMDAxMmY5NDhjNTJhYWRjOGVkYTkxMmY3NzI4ZmI3Mzk0YTIiCitQViA9ICIwLjE1LjIrZ2l0JHtTUkNQVn0iCitQUiA9ICIke0lOQ19QUn0uMSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveG9yZy9kcml2ZXIveGY4Ni1pbnB1dC1zeW5hcHRpY3MiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitERVBFTkRTICs9ICJsaWJ4aSBtdGRldiBsaWJ4dHN0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC12bW1vdXNlXzEzLjEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtdm1tb3VzZV8xMy4xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYxNWI0OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtdm1tb3VzZV8xMy4xLjAuYmIKQEAgLTAsMCArMSwyNiBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci1pbnB1dC5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBWTVdhcmUgbW91c2UgaW5wdXQgZHJpdmVyIgorREVTQ1JJUFRJT04gPSAiVGhlIHZtbW91c2UgZHJpdmVyIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIHNwZWNpYWwgVk1Nb3VzZSBcCitwcm90b2NvbCB0aGF0IGlzIHByb3ZpZGVkIGJ5IFZNd2FyZSB2aXJ0dWFsIG1hY2hpbmVzIHRvIGdpdmUgYWJzb2x1dGUgXAorcG9pbnRlciBwb3NpdGlvbmluZy4gVGhlIHZtbW91c2UgZHJpdmVyIGlzIGNhcGFibGUgb2YgZmFsbGluZyBiYWNrIHRvIHRoZSBcCitzdGFuZGFyZCAnbW91c2UnIGRyaXZlciBpZiBhIFZNd2FyZSB2aXJ0dWFsIG1hY2hpbmUgaXMgbm90IGRldGVjdGVkLiIKKworU1JDX1VSSVttZDVzdW1dID0gIjg1ZTJlNDY0YjcyMTljNDk1YWQzYTE2NDY1YzIyNmVkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBhZjU1ODk1N2FjMWJlMWIyODYzNzEyYzI0NzVkZThmNGQ3ZjE0OTIxZmQwMWRlZDJlMmZkZTQ5MjFiMTkzMTkiCisKK1JERVBFTkRTXyR7UE59ICs9ICJ4Zjg2LWlucHV0LW1vdXNlIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02MjI4NDFjMDY4YTlkNzYyNWZiZmU3YWNmZmIxYThmYyIKKworQ09NUEFUSUJMRV9IT1NUID0gJyhpLjg2fHg4Nl82NCkuKi1saW51eCcKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCSMgV2UgZG9uJ3QgY2FyZSBhYm91dCBoYWwKKwlybSAtcmYgJHtEfSR7ZGF0YWRpcn0vaGFsLworCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2hhbC8KK30KKworRVhUUkFfT0VDT05GID0gIi0td2l0aC11ZGV2LXJ1bGVzLWRpcj0ke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvcnVsZXMuZCIKKworRklMRVNfJHtQTn0gKz0gIiR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi9ydWxlcy5kLyAke2RhdGFkaXJ9L1gxMS94b3JnLmNvbmYuZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tY2lycnVzXzEuNS4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1jaXJydXNfMS41LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ5ODQ3NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tY2lycnVzXzEuNS4zLmJiCkBAIC0wLDAgKzEsMTMgQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItdmlkZW8uaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gY2lycnVzIGRpc3BsYXkgZHJpdmVyIgorREVTQ1JJUFRJT04gPSAiY2lycnVzIGlzIGFuIFhvcmcgZHJpdmVyIGZvciBDaXJydXMgTG9naWMgVkdBIGFkYXB0ZXJzLiBUaGVzZSBcCitkZXZpY2VzIGFyZSBub3Qgc28gY29tbW9uIGluIHRoZSB3aWxkIGFueW1vcmUsIGJ1dCBRRU1VIGNhbiBlbXVsYXRlIG9uZSwgc28gXAordGhlIGRyaXZlciBpcyBzdGlsbCB1c2VmdWwuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02ZGRjN2NhODYwZGM1ZmQwMTRlN2YxNjBlYTY5OTI5NSIKKworU1JDX1VSSVttZDVzdW1dID0gIjdkN2RmZDRjZGM0MmFhOGI2ZTkyMzUxMGZhMDBhZDJiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVkYzg3YjIwYTU1MjU5MTI2YjUyMzliNWMxZWY5MTM0MTllYWI3ZGVkMGVkMTJhZTlhZTk4OTQ2MGQ3MzUxYWIiCisKK0RFUEVORFMgKz0gImxpYnBjaWFjY2VzcyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tZmJkZXZfMC40LjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWZiZGV2XzAuNC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZTliZDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWZiZGV2XzAuNC40LmJiCkBAIC0wLDAgKzEsOSBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci12aWRlby5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBmYmRldiBkaXNwbGF5IGRyaXZlciIKK0RFU0NSSVBUSU9OID0gImZiZGV2IGlzIGFuIFhvcmcgZHJpdmVyIGZvciBmcmFtZWJ1ZmZlciBkZXZpY2VzLiBUaGlzIGlzIGEgbm9uLWFjY2VsZXJhdGVkIGRyaXZlci4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ4Y2JkOTlmZmY3NzNmOTJlODQ0OTQ4Zjc0ZWYwZGY4IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzkzMWMwZTE5ZDQ0MWNjNTc2ZGMwODhmOWViOWZkNzMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWRkNGIzMjY0OTgyMjNhYmJmZGY3ODYwODlhNDZlYTNkYjRmYTZiYmQzNDEzMDhlYjQ4YTllMDBiYzNmZDUxYiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvYWx3YXlzX2luY2x1ZGVfeG9yZ19zZXJ2ZXIuaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvYWx3YXlzX2luY2x1ZGVfeG9yZ19zZXJ2ZXIuaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTVkZDM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC9hbHdheXNfaW5jbHVkZV94b3JnX3NlcnZlci5oLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK0luY2x1ZGUgeG9yZy1zZXJ2ZXIuaCB0byBmaXggYnVpbGQgZXJyb3JzIHNlZW4gd2l0aCBnbGliYyAyLjIwCisKK0luIGZpbGUgaW5jbHVkZWQgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS9zdHJpbmcuaDo2MzQ6MCwKKyAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvd29yay9pNTg2LW9lLWxpbnV4L3hmODYtdmlkZW8taW50ZWwvMl8yLjk5LjkxMi1yMC94Zjg2LXZpZGVvLWludGVsLTIuOTkuOTEyL3NyYy9iYWNrbGlnaHQuYzozOToKKy9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3hvcmcvb3MuaDo1Nzk6MTogZXJyb3I6IGV4cGVjdGVkIGlkZW50aWZpZXIgb3IgJygnIGJlZm9yZSAnX19leHRlbnNpb25fXycKKyBzdHJuZHVwKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IG4pOworIF4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiB4Zjg2LXZpZGVvLWludGVsLTIuOTkuOTEyL3NyYy9iYWNrbGlnaHQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHhmODYtdmlkZW8taW50ZWwtMi45OS45MTIub3JpZy9zcmMvYmFja2xpZ2h0LmMJMjAxNC0wNC0wOSAxMDo0MToxOC4wMDAwMDAwMDAgLTA3MDAKKysrKyB4Zjg2LXZpZGVvLWludGVsLTIuOTkuOTEyL3NyYy9iYWNrbGlnaHQuYwkyMDE0LTA4LTI4IDE4OjUyOjI1LjUyNDA3MDU4NyAtMDcwMAorQEAgLTI5LDYgKzI5LDcgQEAKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisgI2VuZGlmCisgCisrI2luY2x1ZGUgPHhvcmctc2VydmVyLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvd2FpdC5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC9kaXNhYmxlLXgxMS1kcmkzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC9kaXNhYmxlLXgxMS1kcmkzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYTUwOGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL2Rpc2FibGUteDExLWRyaTMucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVGhlc2UgbW9kdWxlcyBhcmUgb25seSB1c2VkIGZvciB0ZXN0cyB0aGF0IGRvbid0IGdldCBpbnN0YWxsZWQsIGFuZCB0aGUKK2F1dG9tYXRpYyBkZXRlY3Rpb24gd2l0aG91dCBleHBsaWNpdCBkZXBlbmRlbmNpZXMgbWVhbnMgdGhhdCBhIGJ1aWxkIGNhbiBmaW5kCitlLmcuIHhzaG1mZW5jZSBhdCBjb25maWd1cmUgdGltZSBidXQgdGhlbiBpdCdzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBzeXNyb290IGJ5Cit0aGUgdGltZSBjb21waWxlIGhhcHBlbnMuCisKK0FzIHRoZSB0ZXN0cyBkb24ndCBnZXQgaW5zdGFsbGVkLCBqdXN0IGRpc2FibGUgdGhlIGNoZWNrcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1zcGVjaWZpY10KK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGJkNjU0ZjMuLjc4YTBlMGQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI1MSArMjUxIEBAIGZpCistUEtHX0NIRUNLX01PRFVMRVMoWDExX0RSSTMsIFt4Y2ItZHJpMyB4Y2Itc3luYyB4Y2ItcHJlc2VudCB4MTEteGNiIHhzaG1mZW5jZSB4MTEgeHJlbmRlciB4ZXh0IGxpYmRybV0sIFt4MTFfZHJpMz0ieWVzIl0sIFt4MTFfZHJpMz0ibm8iXSkKKysjUEtHX0NIRUNLX01PRFVMRVMoWDExX0RSSTMsIFt4Y2ItZHJpMyB4Y2Itc3luYyB4Y2ItcHJlc2VudCB4MTEteGNiIHhzaG1mZW5jZSB4MTEgeHJlbmRlciB4ZXh0IGxpYmRybV0sIFt4MTFfZHJpMz0ieWVzIl0sIFt4MTFfZHJpMz0ibm8iXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvc25hLVByb3RlY3QtYWdhaW5zdC1BQkktYnJlYWthZ2UtaW4tcmVjZW50LXZlcnNpb25zLS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvc25hLVByb3RlY3QtYWdhaW5zdC1BQkktYnJlYWthZ2UtaW4tcmVjZW50LXZlcnNpb25zLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODlkNTJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC9zbmEtUHJvdGVjdC1hZ2FpbnN0LUFCSS1icmVha2FnZS1pbi1yZWNlbnQtdmVyc2lvbnMtLnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK0Zyb20gN2ZlMmIyOTQ4NjUyNDQzZmY0M2Q5MDc4NTViZDdhMDUxZDU0ZDMwOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgorRGF0ZTogVGh1LCAxOSBNYXIgMjAxNSAyMzoxNDoxNyArMDAwMAorU3ViamVjdDogW1BBVENIXSBzbmE6IFByb3RlY3QgYWdhaW5zdCBBQkkgYnJlYWthZ2UgaW4gcmVjZW50IHZlcnNpb25zIG9mCisgbGliZHJtCisKK2NvbW1pdCA3ZmUyYjI5NDg2NTI0NDNmZjQzZDkwNzg1NWJkN2EwNTFkNTRkMzA5IHVwc3RyZWFtLgorCitTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvc3JjL3NuYS9rZ2VtLmMgYi9zcmMvc25hL2tnZW0uYworaW5kZXggMTFmMDgyOGYyYmJjLi42ZjE2Y2JhYzg3ZjIgMTAwNjQ0CistLS0gYS9zcmMvc25hL2tnZW0uYworKysrIGIvc3JjL3NuYS9rZ2VtLmMKK0BAIC0xODIsNiArMTgyLDE1IEBAIHN0cnVjdCBsb2NhbF9pOTE1X2dlbV9jYWNoaW5nIHsKKyAjZGVmaW5lIExPQ0FMX0lPQ1RMX0k5MTVfR0VNX1NFVF9DQUNISU5HIERSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIExPQ0FMX0k5MTVfR0VNX1NFVF9DQUNISU5HLCBzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fY2FjaGluZykKKyAjZGVmaW5lIExPQ0FMX0lPQ1RMX0k5MTVfR0VNX0dFVF9DQUNISU5HIERSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIExPQ0FMX0k5MTVfR0VNX0dFVF9DQUNISU5HLCBzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fY2FjaGluZykKKyAKKytzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fbW1hcCB7CisrCXVpbnQzMl90IGhhbmRsZTsKKysJdWludDMyX3QgcGFkOworKwl1aW50NjRfdCBvZmZzZXQ7CisrCXVpbnQ2NF90IHNpemU7CisrCXVpbnQ2NF90IGFkZHJfcHRyOworK307CisrI2RlZmluZSBMT0NBTF9JT0NUTF9JOTE1X0dFTV9NTUFQIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fTU1BUCwgc3RydWN0IGxvY2FsX2k5MTVfZ2VtX21tYXApCisrCisgc3RydWN0IGxvY2FsX2k5MTVfZ2VtX21tYXAyIHsKKyAJdWludDMyX3QgaGFuZGxlOworIAl1aW50MzJfdCBwYWQ7CitAQCAtNTE0LDE1ICs1MjMsMTUgQEAgcmV0cnlfd2M6CisgCisgc3RhdGljIHZvaWQgKl9fa2dlbV9ib19tYXBfX2NwdShzdHJ1Y3Qga2dlbSAqa2dlbSwgc3RydWN0IGtnZW1fYm8gKmJvKQorIHsKKy0Jc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwIG1tYXBfYXJnOworKwlzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fbW1hcCBhcmc7CisgCWludCBlcnI7CisgCisgcmV0cnk6CistCVZHX0NMRUFSKG1tYXBfYXJnKTsKKy0JbW1hcF9hcmcuaGFuZGxlID0gYm8tPmhhbmRsZTsKKy0JbW1hcF9hcmcub2Zmc2V0ID0gMDsKKy0JbW1hcF9hcmcuc2l6ZSA9IGJ5dGVzKGJvKTsKKy0JaWYgKChlcnIgPSBkb19pb2N0bChrZ2VtLT5mZCwgRFJNX0lPQ1RMX0k5MTVfR0VNX01NQVAsICZtbWFwX2FyZykpKSB7CisrCVZHX0NMRUFSKGFyZyk7CisrCWFyZy5oYW5kbGUgPSBiby0+aGFuZGxlOworKwlhcmcub2Zmc2V0ID0gMDsKKysJYXJnLnNpemUgPSBieXRlcyhibyk7CisrCWlmICgoZXJyID0gZG9faW9jdGwoa2dlbS0+ZmQsIExPQ0FMX0lPQ1RMX0k5MTVfR0VNX01NQVAsICZhcmcpKSkgeworIAkJYXNzZXJ0KGVyciAhPSBFSU5WQUwpOworIAorIAkJaWYgKF9fa2dlbV90aHJvdHRsZV9yZXRpcmUoa2dlbSwgMCkpCitAQCAtNTM2LDEwICs1NDUsMTAgQEAgcmV0cnk6CisgCQlyZXR1cm4gTlVMTDsKKyAJfQorIAorLQlWRyhWQUxHUklORF9NQUtFX01FTV9ERUZJTkVEKG1tYXBfYXJnLmFkZHJfcHRyLCBieXRlcyhibykpKTsKKysJVkcoVkFMR1JJTkRfTUFLRV9NRU1fREVGSU5FRChhcmcuYWRkcl9wdHIsIGJ5dGVzKGJvKSkpOworIAorIAlEQkcoKCIlczogY2FjaGluZyBDUFUgdm1hIGZvciAlZFxuIiwgX19GVU5DVElPTl9fLCBiby0+aGFuZGxlKSk7CistCXJldHVybiBiby0+bWFwX19jcHUgPSAodm9pZCAqKSh1aW50cHRyX3QpbW1hcF9hcmcuYWRkcl9wdHI7CisrCXJldHVybiBiby0+bWFwX19jcHUgPSAodm9pZCAqKSh1aW50cHRyX3QpYXJnLmFkZHJfcHRyOworIH0KKyAKKyBzdGF0aWMgaW50IGdlbV93cml0ZShpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwKKy0tIAorMi40LjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC91ZGV2LWZzdGF0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC91ZGV2LWZzdGF0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNjc1ZWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL3VkZXYtZnN0YXQucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRnJvbSAxMmFmOGE1NzVkMTUxOGQ0MDQxNmY4MzE5NTA0OTE1N2MzYTA2MmE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CitEYXRlOiBUdWUsIDI0IEZlYiAyMDE1IDE1OjI1OjQwICswMDAwCitTdWJqZWN0OiBzbmE6IHVkZXYgaW50ZWdyYXRpb24gZGVwZW5kcyBvbiBmc3RhdCBhbmQgc3lzL3N0YXQuaAorCitzcmMvc25hL3NuYV9kcml2ZXIuYzogSW4gZnVuY3Rpb24gJ3NuYV9oYW5kbGVfdWV2ZW50cyc6CitzcmMvc25hL3NuYV9kcml2ZXIuYzo3NTk6MjogZXJyb3I6IGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9uICdmc3RhdCcgWy1XZXJyb3I9aW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb25dCisKK0Fsc28gdGFrZSB0aGUgb3Bwb3J0dW5pdHkgdG8gaW5jbHVkZSB1ZGV2IHN1cHBvcnQgaW4gdGhlIGNvbmZpZ3VyZQorc3VtbWFyeS4KKworU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDc0NzZlMmIuLmRlM2E0YjMgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE5NywxMSArMTk3LDE1IEBAIEFDX0FSR19FTkFCTEUodWRldiwKKyAKKyBpZiB0ZXN0ICJ4JFVERVYiICE9ICJ4bm8iOyB0aGVuCisgCVBLR19DSEVDS19NT0RVTEVTKFVERVYsIFtsaWJ1ZGV2XSwgW3VkZXY9InllcyJdLCBbdWRldj0ibm8iXSkKKysJQUNfQ0hFQ0tfSEVBREVSUyhbc3lzL3N0YXQuaF0sIFtdLCBbdWRldj0ibm8iXSkKKyAJaWYgdGVzdCAieCRVREVWIiA9ICJ4eWVzIiAtYSAieCR1ZGV2IiAhPSAieHllcyI7IHRoZW4KKyAJCUFDX01TR19FUlJPUihbdWRldiBzdXBwb3J0IHJlcXVlc3RlZCBidXQgbm90IGZvdW5kIChsaWJ1ZGV2KV0pCisgCWZpCisgCWlmIHRlc3QgIngkdWRldiIgPSAieHllcyI7IHRoZW4KKyAJCUFDX0RFRklORShIQVZFX1VERVYsMSxbRW5hYmxlIHVkZXYtYmFzZWQgbW9uaXRvciBob3RwbHVnIGRldGVjdGlvbl0pCisrCQl1ZGV2X21zZz0iIHllcyIKKysJZWxzZQorKwkJdWRldl9tc2c9IiBubyIKKyAJZmkKKyBmaQorIAorQEAgLTkxMSw2ICs5MTUsNyBAQCBlY2hvICIgIFN1cHBvcnQgZm9yIEtlcm5lbCBNb2RlIFNldHRpbmc/ICRLTVMiCisgZWNobyAiICBTdXBwb3J0IGZvciBsZWdhY3kgVXNlciBNb2RlIFNldHRpbmcgKGZvciBpODEwKT8gJFVNUyIKKyBlY2hvICIgIFN1cHBvcnQgZm9yIERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmU6JGRyaV9tc2ciCisgZWNobyAiICBTdXBwb3J0IGZvciBYdiBtb3Rpb24gY29tcGVuc2F0aW9uIChYdk1DIGFuZCBsaWJYdk1DKTokeHZtY19tc2ciCisrZWNobyAiICBTdXBwb3J0IGZvciBkaXNwbGF5IGhvdHBsdWcgbm90aWZpY2F0aW9ucyAodWRldik6JHVkZXZfbXNnIgorIGVjaG8gIiAgQnVpbGQgYWRkaXRpb25hbCB0b29scyBhbmQgdXRpbGl0aWVzPyR0b29sc19tc2ciCisgaWYgdGVzdCAtbiAiJHhwX21zZyI7IHRoZW4KKyBlY2hvICIgIEV4cGVyaW1lbnRhbCBzdXBwb3J0OiR4cF9tc2ciCitkaWZmIC0tZ2l0IGEvc3JjL3NuYS9zbmFfZHJpdmVyLmMgYi9zcmMvc25hL3NuYV9kcml2ZXIuYworaW5kZXggOGMwZDBiNS4uYmMyMGVmMCAxMDA2NDQKKy0tLSBhL3NyYy9zbmEvc25hX2RyaXZlci5jCisrKysgYi9zcmMvc25hL3NuYV9kcml2ZXIuYworQEAgLTc0MCw2ICs3NDAsOCBAQCBzbmFfd2FrZXVwX2hhbmRsZXIoV0FLRVVQSEFORExFUl9BUkdTX0RFQ0wpCisgfQorIAorICNpZiBIQVZFX1VERVYKKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysKKyBzdGF0aWMgdm9pZAorIHNuYV9oYW5kbGVfdWV2ZW50cyhpbnQgZmQsIHZvaWQgKmNsb3N1cmUpCisgeworLS0gCitjZ2l0IHYwLjEwLjIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWxfMi45OS45MTcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsXzIuOTkuOTE3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZjE0NTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsXzIuOTkuOTE3LmJiCkBAIC0wLDAgKzEsNDAgQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItdmlkZW8uaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gSW50ZWwgaW50ZWdyYXRlZCBncmFwaGljcyBjaGlwc2V0cyBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gImludGVsIGlzIGFuIFhvcmcgZHJpdmVyIGZvciBJbnRlbCBpbnRlZ3JhdGVkIGdyYXBoaWNzIFwKK2NoaXBzZXRzLiBUaGUgZHJpdmVyIHN1cHBvcnRzIGRlcHRocyA4LCAxNSwgMTYgYW5kIDI0LiBPbiBzb21lIGNoaXBzZXRzLCBcCit0aGUgZHJpdmVyIHN1cHBvcnRzIGhhcmR3YXJlIGFjY2VsZXJhdGVkIDNEIHZpYSB0aGUgRGlyZWN0IFJlbmRlcmluZyBcCitJbmZyYXN0cnVjdHVyZSAoRFJJKS4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTg3MzBhZDU4ZDExYzdiYmFkOWE3MDY2ZDY5Zjc4MDhlIgorCitTUkNfVVJJICs9ICJmaWxlOi8vZGlzYWJsZS14MTEtZHJpMy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYWx3YXlzX2luY2x1ZGVfeG9yZ19zZXJ2ZXIuaC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc25hLVByb3RlY3QtYWdhaW5zdC1BQkktYnJlYWthZ2UtaW4tcmVjZW50LXZlcnNpb25zLS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdWRldi1mc3RhdC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImZhMTk2YTY2ZTUyYzBjNjI0ZmU1ZDM1MGFmN2E1ZTdiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAwYjc4MWVlYTA1NTU4MjgyMGExMjNjNDdiNjI0MTFiZGY2YWFiZjRmMDNkYzA1NjhmYWVjNTVmYWY5NjY3YzkiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIGRybSBsaWJwY2lhY2Nlc3MgcGl4bWFuIgorCitQQUNLQUdFQ09ORklHID8/PSAieHZtYyBzbmEgdWRldiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICdkcmkgZHJpMSBkcmkyJywgJycsIGQpfSIKKworUEFDS0FHRUNPTkZJR1tkcmldID0gIi0tZW5hYmxlLWRyaSwtLWRpc2FibGUtZHJpIgorUEFDS0FHRUNPTkZJR1tkcmkxXSA9ICItLWVuYWJsZS1kcmkxLC0tZGlzYWJsZS1kcmkxLHhmODZkcmlwcm90byIKK1BBQ0tBR0VDT05GSUdbZHJpMl0gPSAiLS1lbmFibGUtZHJpMiwtLWRpc2FibGUtZHJpMixkcmkycHJvdG8iCitQQUNLQUdFQ09ORklHW2RyaTNdID0gIi0tZW5hYmxlLWRyaTMsLS1kaXNhYmxlLWRyaTMsZHJpM3Byb3RvIgorUEFDS0FHRUNPTkZJR1tzbmFdID0gIi0tZW5hYmxlLXNuYSwtLWRpc2FibGUtc25hIgorUEFDS0FHRUNPTkZJR1t1eGFdID0gIi0tZW5hYmxlLXV4YSwtLWRpc2FibGUtdXhhIgorUEFDS0FHRUNPTkZJR1t1ZGV2XSA9ICItLWVuYWJsZS11ZGV2LC0tZGlzYWJsZS11ZGV2LHVkZXYiCitQQUNLQUdFQ09ORklHW3h2bWNdID0gIi0tZW5hYmxlLXh2bWMsLS1kaXNhYmxlLXh2bWMsbGlieHZtYyB4Y2ItdXRpbCIKK1BBQ0tBR0VDT05GSUdbdG9vbHNdID0gIi0tZW5hYmxlLXRvb2xzLC0tZGlzYWJsZS10b29scyxsaWJ4aW5lcmFtYSBsaWJ4cmFuZHIgbGlieGRhbWFnZSBsaWJ4Zml4ZXMgbGlieGN1cnNvciBsaWJ4dHN0IGxpYnhleHQgbGlieHJlbmRlciIKKworIyAtLWVuYWJsZS1rbXMtb25seSBvcHRpb24gaXMgcmVxdWlyZWQgYnkgUk9PVExFU1NfWAorRVhUUkFfT0VDT05GICs9ICcke0BiYXNlX2NvbmRpdGlvbmFsKCAiUk9PVExFU1NfWCIsICIxIiwgIiAtLWVuYWJsZS1rbXMtb25seSIsICIiLCBkICl9JworCitDT01QQVRJQkxFX0hPU1QgPSAnKGkuODZ8eDg2XzY0KS4qLWxpbnV4JworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9wb2xraXQtMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcC8wMDAxLWRybW1vZGVfb3V0cHV0X2RwbXMtUmVwbGFjZS1sb2dpY2FsLXdpdGgtYml0d2lzZS1vcGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXAvMDAwMS1kcm1tb2RlX291dHB1dF9kcG1zLVJlcGxhY2UtbG9naWNhbC13aXRoLWJpdHdpc2Utb3BlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZTc3ZDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXAvMDAwMS1kcm1tb2RlX291dHB1dF9kcG1zLVJlcGxhY2UtbG9naWNhbC13aXRoLWJpdHdpc2Utb3BlLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gZmM2NTNjYTNiMzY0MzVhZWEyODFhZTQwOWZiOTBmODVlMWJjMGQ4MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDcgU2VwIDIwMTUgMDg6NDQ6MTMgKzAwMDAKK1N1YmplY3Q6IFtmcmVlZHJlbm9dW1BBVENIXSBkcm1tb2RlX291dHB1dF9kcG1zOiBSZXBsYWNlIGxvZ2ljYWwgJiYgd2l0aCBiaXR3aXNlICYKKyBvcGVyYXRpb24KKworVGhpcyBpcyBhIG1hc2sgY2FsY3VsYXRpb24gc28gYml0Yndpc2UgJiBzaG91bGQgaGF2ZSBiZWVuIHVzZWQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworIHNyYy9kcm1tb2RlX2Rpc3BsYXkuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9kcm1tb2RlX2Rpc3BsYXkuYyBiL3NyYy9kcm1tb2RlX2Rpc3BsYXkuYworaW5kZXggYzNjZjRmOC4uZWI1NGI1OSAxMDA2NDQKKy0tLSBhL3NyYy9kcm1tb2RlX2Rpc3BsYXkuYworKysrIGIvc3JjL2RybW1vZGVfZGlzcGxheS5jCitAQCAtNzc3LDcgKzc3Nyw3IEBAIGRybW1vZGVfb3V0cHV0X2RwbXMoeGY4Nk91dHB1dFB0ciBvdXRwdXQsIGludCBtb2RlKQorIAorIAlmb3IgKGkgPSAwOyBpIDwga291dHB1dC0+Y291bnRfcHJvcHM7IGkrKykgeworIAkJcHJvcHMgPSBkcm1Nb2RlR2V0UHJvcGVydHkoZHJtbW9kZS0+ZmQsIGtvdXRwdXQtPnByb3BzW2ldKTsKKy0JCWlmIChwcm9wcyAmJiAocHJvcHMtPmZsYWdzICYmIERSTV9NT0RFX1BST1BfRU5VTSkpIHsKKysJCWlmIChwcm9wcyAmJiAocHJvcHMtPmZsYWdzICYgRFJNX01PREVfUFJPUF9FTlVNKSkgeworIAkJCWlmICghc3RyY21wKHByb3BzLT5uYW1lLCAiRFBNUyIpKSB7CisgCQkJCW1vZGVfaWQgPSBrb3V0cHV0LT5wcm9wc1tpXTsKKyAJCQkJZHJtTW9kZUZyZWVQcm9wZXJ0eShwcm9wcyk7CistLSAKKzIuNS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcF8wLjQuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcF8wLjQuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjY4MmVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwXzAuNC4zLmJiCkBAIC0wLDAgKzEsNDMgQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItdmlkZW8uaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gVGV4YXMgSW5zdHJ1bWVudHMgT01BUCBmcmFtZWJ1ZmZlciBkcml2ZXIiCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gVEkgT01BUCBpbnRlZ3JhdGVkIGdyYXBoaWNzIGNoaXBzZXRzIGRyaXZlciIKKworREVTQ1JJUFRJT04gPSAiT3Blbi1zb3VyY2UgWC5vcmcgZ3JhcGhpY3MgZHJpdmVyIGZvciBUSSBPTUFQIGdyYXBoaWNzIFwKK0N1cnJlbnRseSByZWxpZXMgb24gYSBjbG9zZWQtc291cmNlIHN1Ym1vZHVsZSBmb3IgRVhBIGFjY2VsZXJhdGlvbiBvbiBcCit0aGUgZm9sbG93aW5nIGNoaXBzZXRzOiBcCisgICsgT01BUDM0MzAgXAorICArIE9NQVAzNjMwIFwKKyAgKyBPTUFQNDQzMCBcCisgICsgT01BUDQ0NjAgXAorICArIE9NQVA1NDMwIFwKKyAgKyBPTUFQNTQzMiBcCitcCitOT1RFOiB0aGlzIGRyaXZlciBpcyB3b3JrIGluIHByb2dyZXNzLi4gIHlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIHRyeSBcCithbmQgdXNlIGl0IHlldC4gIFRoZSBBUEkvQUJJIGJldHdlZW4gZHJpdmVyIGFuZCBrZXJuZWwsIGFuZCBkcml2ZXIgYW5kIFwKK2FjY2VsZXJhdGlvbiBzdWJtb2R1bGVzIGlzIG5vdCBzdGFibGUgeWV0LiAgVGhpcyBkcml2ZXIgcmVxdWlyZXMgdGhlIFwKK29tYXBkcm0ga2VybmVsIGRyaXZlciB3LyBHRU0gc3VwcG9ydC4gXAorIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTEwY2U1ZGUzYjExMTMxNWVhNjUyYTVmNzRlYzBjNjAyIgorREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEgbGliZHJtIHhmODZkcmlwcm90byIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtZHJtbW9kZV9vdXRwdXRfZHBtcy1SZXBsYWNlLWxvZ2ljYWwtd2l0aC1iaXR3aXNlLW9wZS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImJlMzVkYWY2ZmE0Yjc1MDkyY2M0YTg5NzhjNDM3YmM1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImRiMWUwZTY5ZmQ0YzRjOGZkY2E1ZWYyY2IwNDQ3YmNjZDc1MThhNzE4NDk1ODc2YTY5MDRiZWY1N2IzOTk4NmQiCisKK0NGTEFHUyArPSAiIC1JJHtTVEFHSU5HX0lOQ0RJUn0veG9yZyAiCisKKyMgVXNlIG92ZXJsYXkgMiBvbiBvbWFwMyB0byBlbmFibGUgb3RoZXIgYXBwcyB0byB1c2Ugb3ZlcmxheSAxIChlLmcuIGRtYWkgb3Igb21hcGZicGxheSkKK2RvX2NvbXBpbGVfcHJlcGVuZF9hcm12N2EgKCkgeworICAgICAgICBzZWQgLWkgLWUgczpmYjE6ZmIyOmcgJHtTfS9zcmMvb21hcF94di5jCit9CisKK3B5dGhvbiAoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zICgnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIidvcGVuZ2wnIG5vdCBpbiBESVNUUk9fRkVBVFVSRVMiKQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAxLVByZXZlbnRzLW9tYXBmYi1mcm9tLWZyb20tY3Jhc2hpbmctd2hlbi1waXhlbGNsb2NrLW8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAxLVByZXZlbnRzLW9tYXBmYi1mcm9tLWZyb20tY3Jhc2hpbmctd2hlbi1waXhlbGNsb2NrLW8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRjZjE2ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDEtUHJldmVudHMtb21hcGZiLWZyb20tZnJvbS1jcmFzaGluZy13aGVuLXBpeGVsY2xvY2stby5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDI4YzAwNmM5NGU1N2VhNzFkZjExZWM0ZmZmNzlkN2ZmY2ZjNDg2MGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGYXIgTWNLb24gPEZhck1jS29uQGJ1Z2xhYnMubmV0PgorRGF0ZTogVHVlLCAzIE1heSAyMDExIDIwOjU5OjA0ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFByZXZlbnRzIG9tYXBmYiBmcm9tIGZyb20gY3Jhc2hpbmcgd2hlbiBwaXhlbGNsb2NrIG9mIDAgaXMKKyBzZW50IHRvIGl0LgorCitEdWUgdG8gYSBMaW51eCBkZXNpZ24gYnVnIGl0IGlzIGVhc3kgdG8gZ2V0IGEgcGl4ZWxjbG9jayBzZXQgdG8gemVybword2hlbiBjaGFuZ2luZyBkaXNwbGF5cyBhdCBydW50aW1lLgorLS0tCisgc3JjL29tYXBmYi1vdXRwdXQuYyB8IDkgKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9vbWFwZmItb3V0cHV0LmMgYi9zcmMvb21hcGZiLW91dHB1dC5jCitpbmRleCBmOGI0ZGIzLi40ZDU5MjY1IDEwMDY0NAorLS0tIGEvc3JjL29tYXBmYi1vdXRwdXQuYworKysrIGIvc3JjL29tYXBmYi1vdXRwdXQuYworQEAgLTEyNSw4ICsxMjUsMTMgQEAgT01BUEZCT3V0cHV0R2V0TW9kZXMoeGY4Nk91dHB1dFB0ciBvdXRwdXQpCisgCS8qIE9ubHkgcG9wdWxhdGUgdGhlIG5hdGl2ZSAoY3VycmVudCkgbW9kZSAqLworIAltb2RlID0gY2FsbG9jKDEsIHNpemVvZihEaXNwbGF5TW9kZVJlYykpOworIAltb2RlLT50eXBlICAgICAgfD0gTV9UX1BSRUZFUlJFRDsKKy0JbW9kZS0+Q2xvY2sgPSBQSUNPUzJLSFoob2ZiLT5zdGF0ZV9pbmZvLnBpeGNsb2NrKTsKKy0JbW9kZS0+U3ludGhDbG9jayA9IFBJQ09TMktIWihvZmItPnN0YXRlX2luZm8ucGl4Y2xvY2spOworKwlpZiAob2ZiLT5zdGF0ZV9pbmZvLnBpeGNsb2NrID09IDApIHsKKysJCW1vZGUtPkNsb2NrID0gMDsKKysJCW1vZGUtPlN5bnRoQ2xvY2sgPSAwOworKwl9IGVsc2UgeworKwkJbW9kZS0+Q2xvY2sgPSBQSUNPUzJLSFoob2ZiLT5zdGF0ZV9pbmZvLnBpeGNsb2NrKTsKKysJCW1vZGUtPlN5bnRoQ2xvY2sgPSBQSUNPUzJLSFoob2ZiLT5zdGF0ZV9pbmZvLnBpeGNsb2NrKTsKKysJfQorIAltb2RlLT5IRGlzcGxheSAgID0gb2ZiLT5zdGF0ZV9pbmZvLnhyZXM7CisgCW1vZGUtPkhTeW5jU3RhcnQgPSBtb2RlLT5IRGlzcGxheQorIAkgICAgICAgICAgICAgICAgICArIG9mYi0+c3RhdGVfaW5mby5yaWdodF9tYXJnaW47CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDEtUmV2ZXJ0LVNldC1hLWxhcmdlLUNSVEMtdXBwZXItbGltaXQtdG8tbm90LXBydW5lLWxhci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDEtUmV2ZXJ0LVNldC1hLWxhcmdlLUNSVEMtdXBwZXItbGltaXQtdG8tbm90LXBydW5lLWxhci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmIwMWQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwMS1SZXZlcnQtU2V0LWEtbGFyZ2UtQ1JUQy11cHBlci1saW1pdC10by1ub3QtcHJ1bmUtbGFyLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb20gOGZiN2QwZjk5ZDRhZmJiNTc0YjMwY2I0ZjFlNjZhOGY4OWQ5NGFkNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitEYXRlOiBXZWQsIDI2IEphbiAyMDExIDEyOjA0OjM2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMS82XSBSZXZlcnQgIlNldCBhIGxhcmdlIENSVEMgdXBwZXIgbGltaXQgdG8gbm90IHBydW5lIGxhcmdlcgorIHJlc29sdXRpb25zIgorCitQaWN0dXJlIGlzIGdhcmJsZWQgYWZ0ZXIgc3dpdGNoaW5nIHJlc29sdXRpb25zLCBzbyByZXZlcnQgaXQuCitWaXJ0dWFsIHNpemUgdG9vIGJpZywgcmV2ZXJ0IHRoZSBjb21taXQgOWM0ZDc1OTJkY2I3ZGMyMGE0OGE2Zjk0MWQ5ZDk0YmQ3M2QzNDE1My4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9vbWFwZmItY3J0Yy5jIHwgOCArKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvb21hcGZiLWNydGMuYyBiL3NyYy9vbWFwZmItY3J0Yy5jCitpbmRleCA5YWFhNTJmLi5jYmVmZjM1IDEwMDY0NAorLS0tIGEvc3JjL29tYXBmYi1jcnRjLmMKKysrKyBiL3NyYy9vbWFwZmItY3J0Yy5jCitAQCAtMTkwLDEzICsxOTAsMTMgQEAgT01BUEZCQ1JUQ0luaXQoU2NybkluZm9QdHIgcFNjcm4pCisgCSAqIEluIHByYWN0aXNlLCB0aGlzIGRvZXNuJ3Qgc2VlbSB0byBiZSBzdXBwb3J0ZWQuCisgCSAqIChubyB3YXkgdG8gc2V0dXAgdGhlIG92ZXJsYXkgb2Zmc2V0L2Jhc2UgYWRkcmVzcykKKyAJICovCistCSAvKiBGSVhNRTogZmlndXJlIG91dCB3aGF0IG1ha2VzIHNlbnNlIGhlcmUuIEEga25vd24gbWF4IHJlc29sdXRpb24/CistCSAgKiBmcmFtZWJ1ZmZlciBzaXplPworLQkgICovCisgCXhmODZDcnRjU2V0U2l6ZVJhbmdlKHBTY3JuLAorLQkgICAgICAgICAgICAgICAgICAgICA4LCA4LCAyMDQ4LCAyMDQ4KTsKKysJICAgICAgICAgICAgICAgICAgICAgOCwgOCwKKysJICAgICAgICAgICAgICAgICAgICAgb2ZiLT5zdGF0ZV9pbmZvLnhyZXNfdmlydHVhbCwKKysJICAgICAgICAgICAgICAgICAgICAgb2ZiLT5zdGF0ZV9pbmZvLnlyZXNfdmlydHVhbCk7CisgCisgCW9mYi0+Y3J0YyA9IHhmODZDcnRjQ3JlYXRlKHBTY3JuLCAmT01BUEZCQ3J0Y0Z1bmNzKTsKKysKKyB9CisgCisgCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDItUmV2ZXJ0LVNldC12aXJ0dWFsLXNpemUtd2hlbi1jb25maWd1cmluZy1mcmFtZWJ1ZmZlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDItUmV2ZXJ0LVNldC12aXJ0dWFsLXNpemUtd2hlbi1jb25maWd1cmluZy1mcmFtZWJ1ZmZlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODNhOTg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwMi1SZXZlcnQtU2V0LXZpcnR1YWwtc2l6ZS13aGVuLWNvbmZpZ3VyaW5nLWZyYW1lYnVmZmVyLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gODU1YzMzM2FjMGQxNjM1MGY4OTVmMWQxYjkzOTFlOWNiYjBiNmRiNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitEYXRlOiBXZWQsIDI2IEphbiAyMDExIDEzOjI3OjIwICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMi82XSBSZXZlcnQgIlNldCB2aXJ0dWFsIHNpemUgd2hlbiBjb25maWd1cmluZyBmcmFtZWJ1ZmZlciIKKworVmlydHVhbCBzaXplIHRvbyBiaWcsIHNvIHJldmVydCBpdC4KKworVGhpcyByZXZlcnRzIGNvbW1pdCAyNjUzZWYwNzg4M2ZiZDFhNWU3MDI1ZjkzMDBjZjg5Yjc5YmE0MjlhLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL29tYXBmYi1jcnRjLmMgfCAyIC0tCisgMSBmaWxlIGNoYW5nZWQsIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvb21hcGZiLWNydGMuYyBiL3NyYy9vbWFwZmItY3J0Yy5jCitpbmRleCBjYmVmZjM1Li45NjU1ZGIyIDEwMDY0NAorLS0tIGEvc3JjL29tYXBmYi1jcnRjLmMKKysrKyBiL3NyYy9vbWFwZmItY3J0Yy5jCitAQCAtOTgsOCArOTgsNiBAQCBPTUFQRkJDcnRjQ29tbWl0Q2hhbmdlTW9kZSAoeGY4NkNydGNQdHIgY3J0YykKKyAJdiA9IG9mYi0+c3RhdGVfaW5mbzsKKyAJdi54cmVzID0gbW9kZS0+SERpc3BsYXk7CisgCXYueXJlcyA9IG1vZGUtPlZEaXNwbGF5OworLQl2LnhyZXNfdmlydHVhbCA9IGNydGMtPnNjcm4tPnZpcnR1YWxYOworLQl2LnlyZXNfdmlydHVhbCA9IGNydGMtPnNjcm4tPnZpcnR1YWxZOworIAl2LmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOworIAl2LnBpeGNsb2NrID0gS0haMlBJQ09TKG1vZGUtPkNsb2NrID8gbW9kZS0+Q2xvY2sgOiA1NjAwMCk7CisgCXYubGVmdF9tYXJnaW4gPSBtb2RlLT5IVG90YWwgLSBtb2RlLT5IU3luY0VuZDsKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwMy1mb3JjZS1wbGFpbi1tb2RlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwMy1mb3JjZS1wbGFpbi1tb2RlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZWE3YzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAzLWZvcmNlLXBsYWluLW1vZGUucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSAyNTJmNDRjMDcyZDM0NDdhMzIxMjdmYzlhZmU1ZDBkNDBmM2M1MTBlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK0RhdGU6IFdlZCwgMjYgSmFuIDIwMTEgMTM6MjA6MjAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzZdIGZvcmNlICdwbGFpbicgbW9kZQorCitUaGUgbmV3IERTUyBtb2RlIGJyZWFrcyBYViwgc28gZm9yY2UgcGxhaW4gbW9kZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9vbWFwZmItZHJpdmVyLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvb21hcGZiLWRyaXZlci5jIGIvc3JjL29tYXBmYi1kcml2ZXIuYworaW5kZXggMDE4ZTA0MC4uNDhhYTA5YyAxMDA2NDQKKy0tLSBhL3NyYy9vbWFwZmItZHJpdmVyLmMKKysrKyBiL3NyYy9vbWFwZmItZHJpdmVyLmMKK0BAIC0zMjYsNyArMzI2LDcgQEAgT01BUEZCUHJlSW5pdChTY3JuSW5mb1B0ciBwU2NybiwgaW50IGZsYWdzKQorIAlPTUFQRkJQcm9iZUNvbnRyb2xsZXIob2ZiLT5jdHJsX25hbWUpOworIAorIAkvKiBEbyB3ZSBoYXZlIHRoZSBEU1Mga2VybmVsIEFQST8gKi8KKy0JaWYgKHN0YXQoU1lTRlNfRFNTX0RJUiwgJnN0KSA9PSAwKSB7CisrCWlmICgwKSB7IC8vc3RhdChTWVNGU19EU1NfRElSLCAmc3QpID09IDApIHsKKyAJCW9mYi0+ZHNzID0gVFJVRTsKKyAJfSBlbHNlIHsKKyAJCW9mYi0+ZHNzID0gRkFMU0U7CistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDQtYmxhY2tsaXN0LXR2LW91dC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDQtYmxhY2tsaXN0LXR2LW91dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGFjOWE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwNC1ibGFja2xpc3QtdHYtb3V0LnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gY2ZhNDZiNjdmNTkxMTVmNmQ4ZWY5NDE0YWY2MDM4MDc0OWZmM2ViMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitEYXRlOiBXZWQsIDI2IEphbiAyMDExIDEzOjIxOjEyICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggNC82XSBibGFja2xpc3QgdHYgb3V0CisKK1RoZSB0di1vdXQgZ2V0cyBhZGRlZCBsYXN0IGFuZCB0aGUgZHJpdmVyIHRyaWVzIHRvIHJlY29uZmlndXJlIGR2aSB0byBUViByZXNvbHV0aW9ucywgd2hpY2ggZmFpbHMuIHNvIGJsYWNrbGlzdCBpdAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9vbWFwZmItb3V0cHV0LWRzcy5jIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL29tYXBmYi1vdXRwdXQtZHNzLmMgYi9zcmMvb21hcGZiLW91dHB1dC1kc3MuYworaW5kZXggNmNjNTJkZS4uODNjYjcxMSAxMDA2NDQKKy0tLSBhL3NyYy9vbWFwZmItb3V0cHV0LWRzcy5jCisrKysgYi9zcmMvb21hcGZiLW91dHB1dC1kc3MuYworQEAgLTIwNSw2ICsyMDUsMTAgQEAgT01BUEZCRFNTT3V0cHV0RGV0ZWN0ICh4Zjg2T3V0cHV0UHRyIG91dHB1dCkKKyAJaWYob2ZiLT50aW1pbmdzW2lkeF1bMF0gPT0gJ1wwJykKKyAJCXJldHVybiBYRjg2T3V0cHV0U3RhdHVzRGlzY29ubmVjdGVkOworIAorKwkvLyBIYWNrIHRvIGRpc2FibGUgdGhlIHR2IG91dAorKwlpZiAoc3RybmNtcChvdXRwdXQtPm5hbWUsICJ0diIsIDIpID09IDApCisrCQlyZXR1cm4gWEY4Nk91dHB1dFN0YXR1c0Rpc2Nvbm5lY3RlZDsKKysKKyAJcmV0dXJuIFhGODZPdXRwdXRTdGF0dXNDb25uZWN0ZWQ7CisgfQorIAorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA1LUF0dGVtcHQtdG8tZml4LVZSRkIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA1LUF0dGVtcHQtdG8tZml4LVZSRkIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdiMjg0MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDUtQXR0ZW1wdC10by1maXgtVlJGQi5wYXRjaApAQCAtMCwwICsxLDMyNSBAQAorRnJvbSA4YjFmNjk3YTYwZTM1YWI4MmZmZmRhYmZhZWZkYjQ1ZTlhOWRmMzc5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRWluby1WaWxsZSBUYWx2YWxhIDx0YWx2YWxhQHN0YW5mb3JkLmVkdT4KK0RhdGU6IFR1ZSwgMjMgQXVnIDIwMTEgMTg6Mzc6MDEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCA1LzZdIEF0dGVtcHQgdG8gZml4IFZSRkIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2h0dHA6Ly9kb21pbmlvbi50aHJ1aGVyZS5uZXQvZ2l0L2NnaXQuY2dpL3hmODYtdmlkZW8tb21hcGZiL2NvbW1pdC8/aD1rb2VuL2ZpeHVwcyZpZD02ODMzZmM5Zjc5NTI2NWU0OTQzZDI0ODEwM2ZiYWYzNDYzYjUxNWQ2CisKK1NpZ25lZC1vZmYtYnk6IFNlYmFzdGlhbiBLcnp5c3prb3dpYWsgPGRvc0Bkb3Nvd2lza28ubmV0PgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL2ltYWdlLWZvcm1hdC1jb252ZXJzaW9ucy5jIHwgIDQgKy0tCisgc3JjL2ltYWdlLWZvcm1hdC1jb252ZXJzaW9ucy5oIHwgIDIgKy0KKyBzcmMvb21hcGZiLWRyaXZlci5jICAgICAgICAgICAgfCAyOCArKysrKysrKysrKysrLS0tCisgc3JjL29tYXBmYi14di1ibGl6emFyZC5jICAgICAgIHwgIDEgKworIHNyYy9vbWFwZmIteHYtZ2VuZXJpYy5jICAgICAgICB8IDcyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQorIHNyYy9vbWFwZmIteHYuYyAgICAgICAgICAgICAgICB8ICAzICsrCisgNiBmaWxlcyBjaGFuZ2VkLCA4OCBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9pbWFnZS1mb3JtYXQtY29udmVyc2lvbnMuYyBiL3NyYy9pbWFnZS1mb3JtYXQtY29udmVyc2lvbnMuYworaW5kZXggZGNlZmE5Yi4uZDQzNDI3ZCAxMDA2NDQKKy0tLSBhL3NyYy9pbWFnZS1mb3JtYXQtY29udmVyc2lvbnMuYworKysrIGIvc3JjL2ltYWdlLWZvcm1hdC1jb252ZXJzaW9ucy5jCitAQCAtMzgsMTMgKzM4LDEzIEBACisgI2luY2x1ZGUgImltYWdlLWZvcm1hdC1jb252ZXJzaW9ucy5oIgorIAorIC8qIEJhc2ljIGxpbmUtYmFzZWQgY29weSBmb3IgcGFja2VkIGZvcm1hdHMgKi8KKy12b2lkIHBhY2tlZF9saW5lX2NvcHkoaW50IHcsIGludCBoLCBpbnQgc3RyaWRlLCB1aW50OF90ICpzcmMsIHVpbnQ4X3QgKmRlc3QpCisrdm9pZCBwYWNrZWRfbGluZV9jb3B5KGludCB3LCBpbnQgaCwgaW50IHNyY19zdHJpZGUsIGludCBkc3Rfc3RyaWRlLCB1aW50OF90ICpzcmMsIHVpbnQ4X3QgKmRlc3QpCisgeworIAlpbnQgaTsKKyAJaW50IGxlbiA9IHcgKiAyOworIAlmb3IgKGkgPSAwOyBpIDwgaDsgaSsrKQorIAl7CistCQltZW1jcHkoZGVzdCArIGkgKiBsZW4sIHNyYyArIGkgKiBzdHJpZGUsIGxlbik7CisrCQltZW1jcHkoZGVzdCArIGkgKiBkc3Rfc3RyaWRlLCBzcmMgKyBpICogc3JjX3N0cmlkZSwgbGVuKTsKKyAJfQorIH0KKyAKK2RpZmYgLS1naXQgYS9zcmMvaW1hZ2UtZm9ybWF0LWNvbnZlcnNpb25zLmggYi9zcmMvaW1hZ2UtZm9ybWF0LWNvbnZlcnNpb25zLmgKK2luZGV4IDU4NDg5NmEuLmJhN2NhZjIgMTAwNjQ0CistLS0gYS9zcmMvaW1hZ2UtZm9ybWF0LWNvbnZlcnNpb25zLmgKKysrKyBiL3NyYy9pbWFnZS1mb3JtYXQtY29udmVyc2lvbnMuaAorQEAgLTI3LDcgKzI3LDcgQEAKKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgCisgLyogQmFzaWMgbGluZS1iYXNlZCBjb3B5IGZvciBwYWNrZWQgZm9ybWF0cyAqLworLXZvaWQgcGFja2VkX2xpbmVfY29weShpbnQgdywgaW50IGgsIGludCBzdHJpZGUsIHVpbnQ4X3QgKnNyYywgdWludDhfdCAqZGVzdCk7Cisrdm9pZCBwYWNrZWRfbGluZV9jb3B5KGludCB3LCBpbnQgaCwgaW50IHNyY19zdHJpZGUsIGludCBkc3Rfc3RyaWRlLCB1aW50OF90ICpzcmMsIHVpbnQ4X3QgKmRlc3QpOworIAorIC8qIEJhc2ljIEMgaW1wbGVtZW50YXRpb24gb2YgWVYxMi9JNDIwIHRvIFVZVlkgY29udmVyc2lvbiAqLworIHZvaWQgdXYxMl90b191eXZ5KGludCB3LCBpbnQgaCwgaW50IHlfcGl0Y2gsIGludCB1dl9waXRjaCwgdWludDhfdCAqeV9wLCB1aW50OF90ICp1X3AsIHVpbnQ4X3QgKnZfcCwgdWludDhfdCAqZGVzdCk7CitkaWZmIC0tZ2l0IGEvc3JjL29tYXBmYi1kcml2ZXIuYyBiL3NyYy9vbWFwZmItZHJpdmVyLmMKK2luZGV4IDQ4YWEwOWMuLjA3OTg5ZjUgMTAwNjQ0CistLS0gYS9zcmMvb21hcGZiLWRyaXZlci5jCisrKysgYi9zcmMvb21hcGZiLWRyaXZlci5jCitAQCAtNjYsNiArNjYsNyBAQAorICNkZWZpbmUgT01BUEZCX1ZFUlNJT04gMTAwMAorICNkZWZpbmUgT01BUEZCX0RSSVZFUl9OQU1FICJPTUFQRkIiCisgI2RlZmluZSBPTUFQRkJfTkFNRSAib21hcGZiIgorKyNkZWZpbmUgRU5GT1JDRV9NT0RFUworIAorIHN0YXRpYyBCb29sIE9NQVBGQlByb2JlKERyaXZlclB0ciBkcnYsIGludCBmbGFncyk7Cisgc3RhdGljIEJvb2wgT01BUEZCUHJlSW5pdChTY3JuSW5mb1B0ciBwU2NybiwgaW50IGZsYWdzKTsKK0BAIC0xMDUsMTEgKzEwNiwxMyBAQCBzdGF0aWMgU3ltVGFiUmVjIE9NQVBGQkNoaXBzZXRzW10gPSB7CisgdHlwZWRlZiBlbnVtIHsKKyAJT1BUSU9OX0FDQ0VMTUVUSE9ELAorIAlPUFRJT05fRkIsCisrCU9QVElPTl9ST1RBVEUsCisgfSBGQkRldk9wdHM7CisgCisgc3RhdGljIGNvbnN0IE9wdGlvbkluZm9SZWMgT01BUEZCT3B0aW9uc1tdID0geworIAl7IE9QVElPTl9BQ0NFTE1FVEhPRCwJIkFjY2VsTWV0aG9kIiwJT1BUVl9TVFJJTkcsCXswfSwJRkFMU0UgfSwKKyAJeyBPUFRJT05fRkIsCQkiZmIiLAkJT1BUVl9TVFJJTkcsCXswfSwJRkFMU0UgfSwKKysJeyBPUFRJT05fUk9UQVRFLAkicm90YXRpb24iLAlPUFRWX1NUUklORywJezB9LAlGQUxTRSB9LAorIAl7IC0xLAkJCU5VTEwsCQlPUFRWX05PTkUsCXswfSwJRkFMU0UgfQorIH07CisgCitAQCAtMjg2LDYgKzI4OSw3IEBAIE9NQVBGQlByZUluaXQoU2NybkluZm9QdHIgcFNjcm4sIGludCBmbGFncykKKyB7CisgCU9NQVBGQlB0ciBvZmI7CisgCUVudGl0eUluZm9QdHIgcEVudDsKKysJY2hhciAqcm90YXRlOworIAlyZ2IgemVyb3MgPSB7IDAsIDAsIDAgfTsKKyAJc3RydWN0IHN0YXQgc3Q7CisgCitAQCAtMzc5LDYgKzM4Myw4IEBAIE9NQVBGQlByZUluaXQoU2NybkluZm9QdHIgcFNjcm4sIGludCBmbGFncykKKyAJcFNjcm4tPnByb2dDbG9jayA9IFRSVUU7CisgCXBTY3JuLT5jaGlwc2V0ICAgPSAib21hcGZiIjsKKyAJCisrCXhmODZEcnZNc2cocFNjcm4tPnNjcm5JbmRleCwgWF9JTkZPLCAiUm90YXRlIHRlc3QgdmVyc2lvbiAwLjAyXG4iKTsKKysJCisgCS8qIFN0YXJ0IHdpdGggY29uZmlndXJlZCB2aXJ0dWFsIHNpemUgKi8KKyAJcFNjcm4tPnZpcnR1YWxYID0gcFNjcm4tPmRpc3BsYXktPnZpcnR1YWxYOworIAlwU2Nybi0+dmlydHVhbFkgPSBwU2Nybi0+ZGlzcGxheS0+dmlydHVhbFk7CitAQCAtNDk2LDEyICs1MDIsMjEgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAlvZmItPkNsb3NlU2NyZWVuID0gcFNjcmVlbi0+Q2xvc2VTY3JlZW47CisgCXBTY3JlZW4tPkNsb3NlU2NyZWVuID0gT01BUEZCQ2xvc2VTY3JlZW47CisgCisrCS8qIEVuZm9yY2UgdGhlIGRlZmF1bHQgbW9kZSAodGhpcyBpcyBzaWxseSBJIGd1ZXNzKSAqLworKyNpZmRlZiBFTkZPUkNFX01PREVTCisrCS8veGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LCBYX0lORk8sICJFbmZvcmNpbmcgbW9kZXNcbiIpOworKwkvL3NldF9tb2RlKG9mYiwgJm9mYi0+ZGVmYXVsdF9tb2RlKTsKKysJLy9wU2Nybi0+ZGlzcGxheVdpZHRoID0gb2ZiLT5maXhlZF9pbmZvLmxpbmVfbGVuZ3RoIC8KKysJLy8gIChvZmItPnN0YXRlX2luZm8uYml0c19wZXJfcGl4ZWw+PjMpOyAvL29mYi0+c3RhdGVfaW5mby54cmVzOworKyNlbmRpZgorKworIAkvKiBNYXAgb3VyIGZyYW1lYnVmZmVyIG1lbW9yeSAqLworKwlvZmItPm1lbV9pbmZvLnNpemUgPSBvZmItPmZpeGVkX2luZm8ubGluZV9sZW5ndGggKiBvZmItPnN0YXRlX2luZm8ueXJlczsKKyAJb2ZiLT5mYiA9IG1tYXAgKE5VTEwsIG9mYi0+bWVtX2luZm8uc2l6ZSwKKyAJICAgICAgICAgICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsCisgCSAgICAgICAgICAgICAgICBvZmItPmZkLCAwKTsKKy0JaWYgKG9mYi0+ZmIgPT0gTlVMTCkgeworLQkJeGY4NkRydk1zZyhzY3JuSW5kZXgsIFhfRVJST1IsICJNYXBwaW5nIGZyYW1lYnVmZmVyIG1lbW9yeSBmYWlsZWRcbiIpOworKwlpZiAob2ZiLT5mYiA9PSBNQVBfRkFJTEVEKSB7CisrCQl4Zjg2RHJ2TXNnKHNjcm5JbmRleCwgWF9FUlJPUiwgIk1hcHBpbmcgZnJhbWVidWZmZXIgbWVtb3J5IGZhaWxlZCwgd2FudGVkICVkIGJ5dGVzLlxuIiwgb2ZiLT5tZW1faW5mby5zaXplKTsKKyAJCXJldHVybiBGQUxTRTsKKyAJfQorIAorQEAgLTU3OCw4ICs1OTMsMTMgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAl9IGVsc2UgaWYgKCFvZmItPmRzcykgeworIAorIAkJb2ZiLT5wbGFuZV9pbmZvLmVuYWJsZWQgPSAxOworLQkJb2ZiLT5wbGFuZV9pbmZvLm91dF93aWR0aCA9IG9mYi0+c3RhdGVfaW5mby54cmVzOworLQkJb2ZiLT5wbGFuZV9pbmZvLm91dF9oZWlnaHQgPSBvZmItPnN0YXRlX2luZm8ueXJlczsKKysJCWlmIChvZmItPnN0YXRlX2luZm8ucm90YXRlID09IDAgfHwgb2ZiLT5zdGF0ZV9pbmZvLnJvdGF0ZSA9PSAyKSB7CisrCQkJb2ZiLT5wbGFuZV9pbmZvLm91dF93aWR0aCA9IG9mYi0+c3RhdGVfaW5mby54cmVzOworKwkJCW9mYi0+cGxhbmVfaW5mby5vdXRfaGVpZ2h0ID0gb2ZiLT5zdGF0ZV9pbmZvLnlyZXM7CisrCQl9IGVsc2UgeworKwkJCW9mYi0+cGxhbmVfaW5mby5vdXRfd2lkdGggPSBvZmItPnN0YXRlX2luZm8ueXJlczsKKysJCQlvZmItPnBsYW5lX2luZm8ub3V0X2hlaWdodCA9IG9mYi0+c3RhdGVfaW5mby54cmVzOworKwkJfQorIAorIAkJaWYgKGlvY3RsIChvZmItPmZkLCBPTUFQRkJfU0VUVVBfUExBTkUsICZvZmItPnBsYW5lX2luZm8pKSB7CisgCQkJeGY4NkRydk1zZyhzY3JuSW5kZXgsIFhfRVJST1IsCitkaWZmIC0tZ2l0IGEvc3JjL29tYXBmYi14di1ibGl6emFyZC5jIGIvc3JjL29tYXBmYi14di1ibGl6emFyZC5jCitpbmRleCA0MDZmZmM2Li5iNzFkMmFhIDEwMDY0NAorLS0tIGEvc3JjL29tYXBmYi14di1ibGl6emFyZC5jCisrKysgYi9zcmMvb21hcGZiLXh2LWJsaXp6YXJkLmMKK0BAIC0yMjAsNiArMjIwLDcgQEAgaW50IE9NQVBGQlhWUHV0SW1hZ2VCbGl6emFyZCAoU2NybkluZm9QdHIgcFNjcm4sCisgCQkJcGFja2VkX2xpbmVfY29weShzcmNfdyAmIH4zLAorIAkJCSAgICAgICAgICAgICAgICAgc3JjX2ggJiB+MywKKyAJCQkgICAgICAgICAgICAgICAgICgoc3JjX3cgKyAxKSAmIH4xKSAqIDIsCisrCQkJCQkgb2ZiLT5wb3J0LT5maXhlZF9pbmZvLmxpbmVfbGVuZ3RoLAorIAkJCSAgICAgICAgICAgICAgICAgKHVpbnQ4X3QqKWJ1ZiwKKyAJCQkgICAgICAgICAgICAgICAgICh1aW50OF90KilvZmItPnBvcnQtPmZiKTsKKyAJCQlicmVhazsKK2RpZmYgLS1naXQgYS9zcmMvb21hcGZiLXh2LWdlbmVyaWMuYyBiL3NyYy9vbWFwZmIteHYtZ2VuZXJpYy5jCitpbmRleCBlNmY4OWZlLi5iMzNmMzQ0IDEwMDY0NAorLS0tIGEvc3JjL29tYXBmYi14di1nZW5lcmljLmMKKysrKyBiL3NyYy9vbWFwZmIteHYtZ2VuZXJpYy5jCitAQCAtNjIsNyArNjIsNyBAQCBpbnQgT01BUFhWQWxsb2NQbGFuZShTY3JuSW5mb1B0ciBwU2NybikKKyB7CisgCU9NQVBGQlB0ciBvZmIgPSBPTUFQRkIocFNjcm4pOworIAorLQkvKiBUaGUgbWVtb3J5IHNpemUgaXMgYWxyZWFkeSBzZXQgaW4gT01BUEZCWFZRdWVyeUltYWdlQXR0cmlidXRlcyAqLworKwkvKiBUaGUgbWVtb3J5IHNpemUgaXMgYWxyZWFkeSBzZXQgYmVmb3JlIHdlIGdldCBoZXJlICovCisgCWlmIChpb2N0bChvZmItPnBvcnQtPmZkLCBPTUFQRkJfU0VUVVBfTUVNLCAmb2ZiLT5wb3J0LT5tZW1faW5mbykgIT0gMCkgeworIAkJeGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LCBYX0VSUk9SLAorIAkJICAgICAgICAgICAiRmFpbGVkIHRvIGFsbG9jYXRlIHZpZGVvIHBsYW5lIG1lbW9yeVxuIik7CitAQCAtNzMsMTkgKzczLDIwIEBAIGludCBPTUFQWFZBbGxvY1BsYW5lKFNjcm5JbmZvUHRyIHBTY3JuKQorIAlvZmItPnBvcnQtPmZiID0gbW1hcCAoTlVMTCwgb2ZiLT5wb3J0LT5tZW1faW5mby5zaXplLAorIAkgICAgICAgICAgICAgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwKKyAJICAgICAgICAgICAgICAgIG9mYi0+cG9ydC0+ZmQsIDApOworLQlpZiAob2ZiLT5wb3J0LT5mYiA9PSBOVUxMKSB7CisrCWlmIChvZmItPnBvcnQtPmZiID09IE1BUF9GQUlMRUQpIHsKKyAJCXhmODZEcnZNc2cocFNjcm4tPnNjcm5JbmRleCwgWF9FUlJPUiwKKyAJCSAgICAgICAgICAgIk1hcHBpbmcgdmlkZW8gbWVtb3J5IGZhaWxlZFxuIik7CisgCQlyZXR1cm4gWHZCYWRBbGxvYzsKKyAJfQorIAorIAkvKiBVcGRhdGUgdGhlIHN0YXRlIGluZm8gKi8KKysJLyogTGV0J3Mgbm90IC0gaXQncyBiYWQKKyAJaWYgKGlvY3RsIChvZmItPnBvcnQtPmZkLCBGQklPR0VUX1ZTQ1JFRU5JTkZPLCAmb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvKSkKKyAJeworIAkJeGY4Nk1zZyhYX0VSUk9SLCAiJXM6IFJlYWRpbmcgc3RhdGUgaW5mbyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisgCQlyZXR1cm4gWHZCYWRBbGxvYzsKKyAJfQorLQorKwkqLworIAlyZXR1cm4gU3VjY2VzczsKKyB9CisgCitAQCAtOTMsNiArOTQsNyBAQCBpbnQgT01BUFhWQWxsb2NQbGFuZShTY3JuSW5mb1B0ciBwU2NybikKKyBpbnQgT01BUFhWU2V0dXBWaWRlb1BsYW5lKFNjcm5JbmZvUHRyIHBTY3JuKQorIHsKKyAJT01BUEZCUHRyIG9mYiA9IE9NQVBGQihwU2Nybik7CisrCWludCByZXQ7CisgCisgCWlmIChpb2N0bCAob2ZiLT5wb3J0LT5mZCwgRkJJT1BVVF9WU0NSRUVOSU5GTywgJm9mYi0+cG9ydC0+c3RhdGVfaW5mbykpCisgCXsKK0BAIC0xMDQsNiArMTA2LDMxIEBAIGludCBPTUFQWFZTZXR1cFZpZGVvUGxhbmUoU2NybkluZm9QdHIgcFNjcm4pCisgCQl4Zjg2TXNnKFhfRVJST1IsICIlczogUmVhZGluZyBzdGF0ZSBpbmZvIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKyAJCXJldHVybiBYdkJhZEFsbG9jOworIAl9CisrCS8qIENoYW5naW5nIHJvdGF0aW9uL25vbnN0ZCBmbGFncyBjYW4gY2hhbmdlIHRoZSBmaXhlZCBpbmZvISAqLworKwlpZiAoaW9jdGwgKG9mYi0+cG9ydC0+ZmQsIEZCSU9HRVRfRlNDUkVFTklORk8sICZvZmItPnBvcnQtPmZpeGVkX2luZm8pKQorKwl7CisrCQl4Zjg2TXNnKFhfRVJST1IsICIlczogUmVhZGluZyBzdGF0ZSBpbmZvIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKysJCXJldHVybiBYdkJhZEFsbG9jOworKwl9CisrCS8qIENvcnJlY3QgZml4ZWQgaW5mbyByZXF1aXJlcyByZWNhbGN1bGF0aW9uIG9mIG5lZWRlZCBtZW1vcnkgKi8KKysJb2ZiLT5wb3J0LT5tZW1faW5mby5zaXplID0gb2ZiLT5wb3J0LT5maXhlZF9pbmZvLmxpbmVfbGVuZ3RoICogb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnlyZXM7CisrCisrCS8qIEFsbG9jYXRlIGJ1ZmZlciBtZW1vcnkgKi8KKysJcmV0ID0gT01BUFhWQWxsb2NQbGFuZShwU2Nybik7CisrCWlmIChyZXQgIT0gU3VjY2VzcykKKysJCXJldHVybiByZXQ7CisrCisrCS8qIFdvcmthcm91bmQgZm9yIHJlc2V0IG9mIG1vZGUgYWZ0ZXIgbWVtb3J5IGFsbG8gKi8KKysJaWYgKGlvY3RsIChvZmItPnBvcnQtPmZkLCBGQklPUFVUX1ZTQ1JFRU5JTkZPLCAmb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvKSkKKysJeworKwkJeGY4Nk1zZyhYX0VSUk9SLCAiJXM6IHNldHRpbmcgc3RhdGUgaW5mbyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisrCQlyZXR1cm4gWHZCYWRBbGxvYzsKKysJfQorKwlpZiAoaW9jdGwgKG9mYi0+cG9ydC0+ZmQsIEZCSU9HRVRfVlNDUkVFTklORk8sICZvZmItPnBvcnQtPnN0YXRlX2luZm8pKQorKwl7CisrCQl4Zjg2TXNnKFhfRVJST1IsICIlczogUmVhZGluZyBzdGF0ZSBpbmZvIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKysJCXJldHVybiBYdkJhZEFsbG9jOworKwl9CisgCisgCWlmKGlvY3RsKG9mYi0+cG9ydC0+ZmQsIE9NQVBGQl9TRVRVUF9QTEFORSwKKyAJICAgJm9mYi0+cG9ydC0+cGxhbmVfaW5mbykgIT0gMCkgeworQEAgLTEyNCw2ICsxNTEsOCBAQCBpbnQgT01BUEZCWFZQdXRJbWFnZUdlbmVyaWMgKFNjcm5JbmZvUHRyIHBTY3JuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJhd2FibGVQdHIgcERyYXcpCisgeworIAlPTUFQRkJQdHIgb2ZiID0gT01BUEZCKHBTY3JuKTsKKysJc2hvcnQgZHJ3X3RlbXA7CisrCXNob3J0IHJvdF94cmVzLCByb3RfeXJlczsKKyAKKyAJaWYgKCFvZmItPnBvcnQtPnBsYW5lX2luZm8uZW5hYmxlZAorIAkgfHwgb2ZiLT5wb3J0LT51cGRhdGVfd2luZG93LnggIT0gc3JjX3gKK0BAIC0xNjMsMTMgKzE5Miw2IEBAIGludCBPTUFQRkJYVlB1dEltYWdlR2VuZXJpYyAoU2NybkluZm9QdHIgcFNjcm4sCisgCQkJcmV0dXJuIFN1Y2Nlc3M7CisgCQl9CisgCistCQkvKiBJZiB3ZSBkb24ndCBoYXZlIHRoZSBwbGFuZSBydW5uaW5nLCBlbmFibGUgaXQgKi8KKy0JCWlmICghb2ZiLT5wb3J0LT5wbGFuZV9pbmZvLmVuYWJsZWQpIHsKKy0JCQlyZXQgPSBPTUFQWFZBbGxvY1BsYW5lKHBTY3JuKTsKKy0JCQlpZiAocmV0ICE9IFN1Y2Nlc3MpCistCQkJCXJldHVybiByZXQ7CistCQl9CistCisgCQkvKiBTZXQgdXAgdGhlIHN0YXRlIGluZm8sIHhyZXMgYW5kIHlyZXMgd2lsbCBiZSB1c2VkIGZvcgorIAkJICogc2NhbGluZyB0byB0aGUgdmFsdWVzIGluIHRoZSBwbGFuZSBpbmZvIHN0cnVjdAorIAkJICovCitAQCAtMTc5LDEyICsyMDEsMzEgQEAgaW50IE9NQVBGQlhWUHV0SW1hZ2VHZW5lcmljIChTY3JuSW5mb1B0ciBwU2NybiwKKyAJCW9mYi0+cG9ydC0+c3RhdGVfaW5mby55cmVzX3ZpcnR1YWwgPSAwOworIAkJb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnhvZmZzZXQgPSAwOworIAkJb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnlvZmZzZXQgPSAwOworLQkJb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnJvdGF0ZSA9IDA7CisrCQkvL29mYi0+cG9ydC0+c3RhdGVfaW5mby5yb3RhdGUgPSAwOworIAkJb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLmdyYXlzY2FsZSA9IDA7CisgCQlvZmItPnBvcnQtPnN0YXRlX2luZm8uYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7CisgCQlvZmItPnBvcnQtPnN0YXRlX2luZm8uYml0c19wZXJfcGl4ZWwgPSAwOworIAkJb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLm5vbnN0ZCA9IHh2X3RvX29tYXBmYl9mb3JtYXQoaW1hZ2UpOworIAorKwkJLyogUGxhbmUgaW5mbyBkb2VzIG5vdCByb3RhdGUgd2l0aCBzdGF0ZV9pbmZvICovCisrCQlpZiAob2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnJvdGF0ZSA9PSAxIHx8CisrCQkgIG9mYi0+cG9ydC0+c3RhdGVfaW5mby5yb3RhdGUgPT0gMykgeworKwkJCWRyd190ZW1wID0gZHJ3X3g7CisrCQkJZHJ3X3ggPSBkcndfeTsKKysJCQlkcndfeSA9IGRyd190ZW1wOworKworKwkJCWRyd190ZW1wID0gZHJ3X3c7CisrCQkJZHJ3X3cgPSBkcndfaDsKKysJCQlkcndfaCA9IGRyd190ZW1wOworKworKwkJCXJvdF94cmVzID0gb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnlyZXM7CisrCQkJcm90X3lyZXMgPSBvZmItPnBvcnQtPnN0YXRlX2luZm8ueHJlczsKKysJCX0gZWxzZSB7CisrCQkJcm90X3hyZXMgPSBvZmItPnBvcnQtPnN0YXRlX2luZm8ueHJlczsKKysJCQlyb3RfeXJlcyA9IG9mYi0+cG9ydC0+c3RhdGVfaW5mby55cmVzOworKwkJfQorKworKworIAkJLyogU2V0IHVwIHRoZSB2aWRlbyBwbGFuZSBpbmZvICovCisgCQlvZmItPnBvcnQtPnBsYW5lX2luZm8uZW5hYmxlZCA9IDE7CisgCQlvZmItPnBvcnQtPnBsYW5lX2luZm8ucG9zX3ggPSBkcndfeDsKK0BAIC0xOTMsMTMgKzIzNCwxMyBAQCBpbnQgT01BUEZCWFZQdXRJbWFnZUdlbmVyaWMgKFNjcm5JbmZvUHRyIHBTY3JuLAorIAkJb2ZiLT5wb3J0LT5wbGFuZV9pbmZvLm91dF9oZWlnaHQgPSBkcndfaCAmIH4xNTsKKyAKKyAJCS8qIENhcCBvdXRwdXQgdG8gc2NyZWVuIHNpemUgKi8KKy0JCWlmIChvZmItPnBvcnQtPnBsYW5lX2luZm8ub3V0X3dpZHRoID4gb2ZiLT5zdGF0ZV9pbmZvLnhyZXMpIHsKKysJCWlmIChvZmItPnBvcnQtPnBsYW5lX2luZm8ub3V0X3dpZHRoID4gcm90X3hyZXMpIHsKKyAJCQlvZmItPnBvcnQtPnBsYW5lX2luZm8ucG9zX3ggPSAwOworLQkJCW9mYi0+cG9ydC0+cGxhbmVfaW5mby5vdXRfd2lkdGggPSBvZmItPnN0YXRlX2luZm8ueHJlczsKKysJCQlvZmItPnBvcnQtPnBsYW5lX2luZm8ub3V0X3dpZHRoID0gcm90X3hyZXM7CisgCQl9CistCQlpZiAob2ZiLT5wb3J0LT5wbGFuZV9pbmZvLm91dF9oZWlnaHQgPiBvZmItPnN0YXRlX2luZm8ueXJlcykgeworKwkJaWYgKG9mYi0+cG9ydC0+cGxhbmVfaW5mby5vdXRfaGVpZ2h0ID4gcm90X3lyZXMpIHsKKyAJCQlvZmItPnBvcnQtPnBsYW5lX2luZm8ucG9zX3kgPSAwOworLQkJCW9mYi0+cG9ydC0+cGxhbmVfaW5mby5vdXRfaGVpZ2h0ID0gb2ZiLT5zdGF0ZV9pbmZvLnlyZXM7CisrCQkJb2ZiLT5wb3J0LT5wbGFuZV9pbmZvLm91dF9oZWlnaHQgPSByb3RfeXJlczsKKyAJCX0KKyAKKyAJCXJldCA9IE9NQVBYVlNldHVwVmlkZW9QbGFuZShwU2Nybik7CitAQCAtMjIzLDYgKzI2NCw3IEBAIGludCBPTUFQRkJYVlB1dEltYWdlR2VuZXJpYyAoU2NybkluZm9QdHIgcFNjcm4sCisgCQkJcGFja2VkX2xpbmVfY29weShzcmNfdyAmIH4xNSwKKyAJCQkgICAgICAgICAgICAgICAgIHNyY19oICYgfjE1LAorIAkJCSAgICAgICAgICAgICAgICAgKChzcmNfdyArIDEpICYgfjEpICogMiwKKysJCQkgICAgICAgICAgICAgICAgIG9mYi0+cG9ydC0+Zml4ZWRfaW5mby5saW5lX2xlbmd0aCwKKyAJCQkgICAgICAgICAgICAgICAgICh1aW50OF90KilidWYsCisgCQkJICAgICAgICAgICAgICAgICAodWludDhfdCopb2ZiLT5wb3J0LT5mYik7CisgCQkJYnJlYWs7CitkaWZmIC0tZ2l0IGEvc3JjL29tYXBmYi14di5jIGIvc3JjL29tYXBmYi14di5jCitpbmRleCAxZGY2NTFlLi4wZmVlMmM2IDEwMDY0NAorLS0tIGEvc3JjL29tYXBmYi14di5jCisrKysgYi9zcmMvb21hcGZiLXh2LmMKK0BAIC0xNjksOCArMTY5LDExIEBAIHN0YXRpYyBpbnQgT01BUEZCWFZRdWVyeUltYWdlQXR0cmlidXRlcyAoU2NybkluZm9QdHIgcFNjcm4sCisgCWggPSAqaGVpZ2h0OworIAorIAl3ID0gKHcgKyAxKSAmIH4xOworKworKwkvKiBDYW4ndCBjYWxjdWxhdGUgdGhlc2UgaGVyZSAtIGRvbid0IGtub3cgbGluZSBsZW5ndGgKKyAJb2ZiLT5wb3J0LT5tZW1faW5mby5zaXplID0gdyA8PCAxOworIAlvZmItPnBvcnQtPm1lbV9pbmZvLnNpemUgKj0gaDsKKysJKi8KKyAKKyAJcmV0dXJuIHNpemU7CisgfQorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA2LW9tYXBmYi1wb3J0LXRvLW5ldy14c2VydmVyLXZpZGVvLUFQSS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDYtb21hcGZiLXBvcnQtdG8tbmV3LXhzZXJ2ZXItdmlkZW8tQVBJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NjcyOTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA2LW9tYXBmYi1wb3J0LXRvLW5ldy14c2VydmVyLXZpZGVvLUFQSS5wYXRjaApAQCAtMCwwICsxLDI3MiBAQAorRnJvbSA4MDNlY2YyOTA5OTQ5ZTYxNTJmNGE4MWI2Y2JiOTJhNDQzMDY3OWFjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMyBOb3YgMjAxMiAwMDozMTowNiArMDEwMAorU3ViamVjdDogW1BBVENIIDYvNl0gb21hcGZiOiBwb3J0IHRvIG5ldyB4c2VydmVyIHZpZGVvIEFQSQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL2NvbXBhdC1hcGkuaCAgICB8IDk2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgc3JjL29tYXBmYi1kcml2ZXIuYyB8IDQxICsrKysrKysrKysrKy0tLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxMTggaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9jb21wYXQtYXBpLmgKKworZGlmZiAtLWdpdCBhL3NyYy9jb21wYXQtYXBpLmggYi9zcmMvY29tcGF0LWFwaS5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjE1OTFiMQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBhdC1hcGkuaAorQEAgLTAsMCArMSw5NiBAQAorKy8qCisrICogQ29weXJpZ2h0IDIwMTIgUmVkIEhhdCwgSW5jLgorKyAqCisrICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKysgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKysgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKysgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKysgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKyAqCisrICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKysgKiBTb2Z0d2FyZS4KKysgKgorKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisrICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisrICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisrICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKysgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKysgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisrICoKKysgKiBBdXRob3I6IERhdmUgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5jb20+CisrICovCisrCisrLyogdGhpcyBmaWxlIHByb3ZpZGVzIEFQSSBjb21wYXQgYmV0d2VlbiBzZXJ2ZXIgcG9zdCAxLjEzIGFuZCBwcmUgaXQsCisrICAgaXQgc2hvdWxkIGJlIHJldXNlZCBpbnNpZGUgYXMgbWFueSBkcml2ZXJzIGFzIHBvc3NpYmxlICovCisrI2lmbmRlZiBDT01QQVRfQVBJX0gKKysjZGVmaW5lIENPTVBBVF9BUElfSAorKworKyNpZm5kZWYgR0xZUEhfSEFTX0dMWVBIX1BJQ1RVUkVfQUNDRVNTT1IKKysjZGVmaW5lIEdldEdseXBoUGljdHVyZShnLCBzKSBHbHlwaFBpY3R1cmUoKGcpKVsocyktPm15TnVtXQorKyNkZWZpbmUgU2V0R2x5cGhQaWN0dXJlKGcsIHMsIHApIEdseXBoUGljdHVyZSgoZykpWyhzKS0+bXlOdW1dID0gcAorKyNlbmRpZgorKworKyNpZm5kZWYgWEY4Nl9IQVNfU0NSTl9DT05WCisrI2RlZmluZSB4Zjg2U2NyZWVuVG9TY3JuKHMpIHhmODZTY3JlZW5zWyhzKS0+bXlOdW1dCisrI2RlZmluZSB4Zjg2U2NyblRvU2NyZWVuKHMpIHNjcmVlbkluZm8uc2NyZWVuc1socyktPnNjcm5JbmRleF0KKysjZW5kaWYKKysKKysjaWZuZGVmIFhGODZfU0NSTl9JTlRFUkZBQ0UKKysKKysjZGVmaW5lIFNDUk5fQVJHX1RZUEUgaW50CisrI2RlZmluZSBTQ1JOX0lORk9fUFRSKGFyZzEpIFNjcm5JbmZvUHRyIHBTY3JuID0geGY4NlNjcmVlbnNbKGFyZzEpXQorKworKyNkZWZpbmUgU0NSRUVOX0FSR19UWVBFIGludAorKyNkZWZpbmUgU0NSRUVOX1BUUihhcmcxKSBTY3JlZW5QdHIgcFNjcmVlbiA9IHNjcmVlbkluZm8uc2NyZWVuc1soYXJnMSldCisrCisrI2RlZmluZSBTQ1JFRU5fSU5JVF9BUkdTX0RFQ0wgaW50IGluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2CisrCisrI2RlZmluZSBCTE9DS0hBTkRMRVJfQVJHU19ERUNMIGludCBhcmcsIHBvaW50ZXIgYmxvY2tEYXRhLCBwb2ludGVyIHBUaW1lb3V0LCBwb2ludGVyIHBSZWFkbWFzaworKyNkZWZpbmUgQkxPQ0tIQU5ETEVSX0FSR1MgYXJnLCBibG9ja0RhdGEsIHBUaW1lb3V0LCBwUmVhZG1hc2sKKysKKysjZGVmaW5lIENMT1NFX1NDUkVFTl9BUkdTX0RFQ0wgaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4KKysjZGVmaW5lIENMT1NFX1NDUkVFTl9BUkdTIHNjcm5JbmRleCwgcFNjcmVlbgorKworKyNkZWZpbmUgQURKVVNUX0ZSQU1FX0FSR1NfREVDTCBpbnQgYXJnLCBpbnQgeCwgaW50IHksIGludCBmbGFncworKworKyNkZWZpbmUgU1dJVENIX01PREVfQVJHU19ERUNMIGludCBhcmcsIERpc3BsYXlNb2RlUHRyIG1vZGUsIGludCBmbGFncworKworKyNkZWZpbmUgRlJFRV9TQ1JFRU5fQVJHU19ERUNMIGludCBhcmcsIGludCBmbGFncworKyNkZWZpbmUgRlJFRV9TQ1JFRU5fQVJHUyh4KSAoeCktPnNjcm5JbmRleCwgMAorKworKyNkZWZpbmUgVlRfRlVOQ19BUkdTX0RFQ0wgaW50IGFyZywgaW50IGZsYWdzCisrI2RlZmluZSBWVF9GVU5DX0FSR1MoZmxhZ3MpIHBTY3JuLT5zY3JuSW5kZXgsIChmbGFncykKKysKKysjZGVmaW5lIFhGODZfRU5BQkxFRElTQUJMRUZCX0FSRyh4KSAoKHgpLT5zY3JuSW5kZXgpCisrI2Vsc2UKKysjZGVmaW5lIFNDUk5fQVJHX1RZUEUgU2NybkluZm9QdHIKKysjZGVmaW5lIFNDUk5fSU5GT19QVFIoYXJnMSkgU2NybkluZm9QdHIgcFNjcm4gPSAoYXJnMSkKKysKKysjZGVmaW5lIFNDUkVFTl9BUkdfVFlQRSBTY3JlZW5QdHIKKysjZGVmaW5lIFNDUkVFTl9QVFIoYXJnMSkgU2NyZWVuUHRyIHBTY3JlZW4gPSAoYXJnMSkKKysKKysjZGVmaW5lIFNDUkVFTl9JTklUX0FSR1NfREVDTCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2CisrCisrI2RlZmluZSBCTE9DS0hBTkRMRVJfQVJHU19ERUNMIFNjcmVlblB0ciBhcmcsIHBvaW50ZXIgcFRpbWVvdXQsIHBvaW50ZXIgcFJlYWRtYXNrCisrI2RlZmluZSBCTE9DS0hBTkRMRVJfQVJHUyBhcmcsIHBUaW1lb3V0LCBwUmVhZG1hc2sKKysKKysjZGVmaW5lIENMT1NFX1NDUkVFTl9BUkdTX0RFQ0wgU2NyZWVuUHRyIHBTY3JlZW4KKysjZGVmaW5lIENMT1NFX1NDUkVFTl9BUkdTIHBTY3JlZW4KKysKKysjZGVmaW5lIEFESlVTVF9GUkFNRV9BUkdTX0RFQ0wgU2NybkluZm9QdHIgYXJnLCBpbnQgeCwgaW50IHkKKysjZGVmaW5lIFNXSVRDSF9NT0RFX0FSR1NfREVDTCBTY3JuSW5mb1B0ciBhcmcsIERpc3BsYXlNb2RlUHRyIG1vZGUKKysKKysjZGVmaW5lIEZSRUVfU0NSRUVOX0FSR1NfREVDTCBTY3JuSW5mb1B0ciBhcmcKKysjZGVmaW5lIEZSRUVfU0NSRUVOX0FSR1MoeCkgKHgpCisrCisrI2RlZmluZSBWVF9GVU5DX0FSR1NfREVDTCBTY3JuSW5mb1B0ciBhcmcKKysjZGVmaW5lIFZUX0ZVTkNfQVJHUyhmbGFncykgcFNjcm4KKysKKysjZGVmaW5lIFhGODZfRU5BQkxFRElTQUJMRUZCX0FSRyh4KSAoeCkKKysKKysjZW5kaWYKKysKKysjZW5kaWYKK2RpZmYgLS1naXQgYS9zcmMvb21hcGZiLWRyaXZlci5jIGIvc3JjL29tYXBmYi1kcml2ZXIuYworaW5kZXggMDc5ODlmNS4uNDg2ZmZhNCAxMDA2NDQKKy0tLSBhL3NyYy9vbWFwZmItZHJpdmVyLmMKKysrKyBiL3NyYy9vbWFwZmItZHJpdmVyLmMKK0BAIC00NCw2ICs0NCw4IEBACisgCisgI2luY2x1ZGUgImV4YS5oIgorIAorKyNpbmNsdWRlICJjb21wYXQtYXBpLmgiCisrCisgI2lmZGVmIEhBVkVfWEVYVFBST1RPXzcxCisgI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL2RwbXNjb25zdC5oPgorICNlbHNlCitAQCAtNzAsMTAgKzcyLDEwIEBACisgCisgc3RhdGljIEJvb2wgT01BUEZCUHJvYmUoRHJpdmVyUHRyIGRydiwgaW50IGZsYWdzKTsKKyBzdGF0aWMgQm9vbCBPTUFQRkJQcmVJbml0KFNjcm5JbmZvUHRyIHBTY3JuLCBpbnQgZmxhZ3MpOworLXN0YXRpYyBCb29sIE9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndik7Cistc3RhdGljIEJvb2wgT01BUEZCRW50ZXJWVChpbnQgc2NybkluZGV4LCBpbnQgZmxhZ3MpOworLXN0YXRpYyB2b2lkIE9NQVBGQkxlYXZlVlQoaW50IHNjcm5JbmRleCwgaW50IGZsYWdzKTsKKy1zdGF0aWMgQm9vbCBPTUFQRkJTd2l0Y2hNb2RlKGludCBzY3JuSW5kZXgsIERpc3BsYXlNb2RlUHRyIG1vZGUsIGludCBmbGFncyk7Cisrc3RhdGljIEJvb2wgT01BUEZCU2NyZWVuSW5pdChTQ1JFRU5fSU5JVF9BUkdTX0RFQ0wpOworK3N0YXRpYyBCb29sIE9NQVBGQkVudGVyVlQoVlRfRlVOQ19BUkdTX0RFQ0wpOworK3N0YXRpYyB2b2lkIE9NQVBGQkxlYXZlVlQoVlRfRlVOQ19BUkdTX0RFQ0wpOworK3N0YXRpYyBCb29sIE9NQVBGQlN3aXRjaE1vZGUoU1dJVENIX01PREVfQVJHU19ERUNMKTsKKyAKKyBzdGF0aWMgQm9vbAorIE9NQVBGQkVuc3VyZVJlYyhTY3JuSW5mb1B0ciBwU2NybikKK0BAIC00ODEsNyArNDgzLDcgQEAgT01BUEZCWHZTY3JlZW5Jbml0KFNjcmVlblB0ciBwU2NyZWVuKQorIH0KKyAKKyBzdGF0aWMgQm9vbAorLU9NQVBGQkNsb3NlU2NyZWVuKGludCBzY3JuSW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuKQorK09NQVBGQkNsb3NlU2NyZWVuKENMT1NFX1NDUkVFTl9BUkdTX0RFQ0wpCisgeworIAlTY3JuSW5mb1B0ciBwU2NybiA9IHhmODZTY3JlZW5zW3BTY3JlZW4tPm15TnVtXTsKKyAJT01BUEZCUHRyIG9mYiA9IE9NQVBGQihwU2Nybik7CitAQCAtNDkwLDExICs0OTIsMTEgQEAgT01BUEZCQ2xvc2VTY3JlZW4oaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4pCisgCisgCXBTY3JlZW4tPkNsb3NlU2NyZWVuID0gb2ZiLT5DbG9zZVNjcmVlbjsKKyAJCistCXJldHVybiAoKnBTY3JlZW4tPkNsb3NlU2NyZWVuKShzY3JuSW5kZXgsIHBTY3JlZW4pOworKwlyZXR1cm4gKCpwU2NyZWVuLT5DbG9zZVNjcmVlbikoQ0xPU0VfU0NSRUVOX0FSR1MpOworIH0KKyAKKyBzdGF0aWMgQm9vbAorLU9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndikKKytPTUFQRkJTY3JlZW5Jbml0KFNDUkVFTl9JTklUX0FSR1NfREVDTCkKKyB7CisgCVNjcm5JbmZvUHRyIHBTY3JuID0geGY4NlNjcmVlbnNbcFNjcmVlbi0+bXlOdW1dOworIAlPTUFQRkJQdHIgb2ZiID0gT01BUEZCKHBTY3JuKTsKK0BAIC01MTYsNyArNTE4LDcgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkgICAgICAgICAgICAgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwKKyAJICAgICAgICAgICAgICAgIG9mYi0+ZmQsIDApOworIAlpZiAob2ZiLT5mYiA9PSBNQVBfRkFJTEVEKSB7CistCQl4Zjg2RHJ2TXNnKHNjcm5JbmRleCwgWF9FUlJPUiwgIk1hcHBpbmcgZnJhbWVidWZmZXIgbWVtb3J5IGZhaWxlZCwgd2FudGVkICVkIGJ5dGVzLlxuIiwgb2ZiLT5tZW1faW5mby5zaXplKTsKKysJCXhmODZEcnZNc2cocFNjcm4tPnNjcm5JbmRleCwgWF9FUlJPUiwgIk1hcHBpbmcgZnJhbWVidWZmZXIgbWVtb3J5IGZhaWxlZCwgd2FudGVkICVkIGJ5dGVzLlxuIiwgb2ZiLT5tZW1faW5mby5zaXplKTsKKyAJCXJldHVybiBGQUxTRTsKKyAJfQorIAorQEAgLTUyNiw3ICs1MjgsNyBAQCBPTUFQRkJTY3JlZW5Jbml0KGludCBzY3JuSW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCS8qIE9ubHkgc3VwcG9ydCBUcnVlQ29sb3IgZm9yIG5vdyAqLworIAlpZiAoIW1pU2V0VmlzdWFsVHlwZXMocFNjcm4tPmRlcHRoLCBUcnVlQ29sb3JNYXNrLAorIAkJcFNjcm4tPnJnYkJpdHMsIHBTY3JuLT5kZWZhdWx0VmlzdWFsKSkgeworLQkJeGY4NkRydk1zZyhzY3JuSW5kZXgsIFhfRVJST1IsICJ2aXN1YWwgdHlwZSBzZXR1cCBmYWlsZWQiCisrCQl4Zjg2RHJ2TXNnKHBTY3JuLT5zY3JuSW5kZXgsIFhfRVJST1IsICJ2aXN1YWwgdHlwZSBzZXR1cCBmYWlsZWQiCisgCQkgICAgICAgICAgICIgZm9yICVkIGJpdHMgcGVyIHBpeGVsIFsxXVxuIiwKKyAJCSAgICAgICAgICAgcFNjcm4tPmJpdHNQZXJQaXhlbCk7CisgCQlyZXR1cm4gRkFMU0U7CitAQCAtNTM0LDcgKzUzNiw3IEBAIE9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndikKKyAKKyAJLyogU2V0IHVwIHBpeG1hcCBkZXB0aCBpbmZvcm1hdGlvbiAqLworIAlpZiAoIW1pU2V0UGl4bWFwRGVwdGhzKCkpIHsKKy0JCXhmODZEcnZNc2coc2NybkluZGV4LFhfRVJST1IsInBpeG1hcCBkZXB0aCBzZXR1cCBmYWlsZWRcbiIpOworKwkJeGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LFhfRVJST1IsInBpeG1hcCBkZXB0aCBzZXR1cCBmYWlsZWRcbiIpOworIAkJcmV0dXJuIEZBTFNFOworIAl9CisgCitAQCAtNTQ2LDcgKzU0OCw3IEBAIE9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJICAgICAgICAgICAgICAgICAgcFNjcm4tPnZpcnR1YWxZLCBwU2Nybi0+eERwaSwKKyAJICAgICAgICAgICAgICAgICAgcFNjcm4tPnlEcGksIHBTY3JuLT5kaXNwbGF5V2lkdGgsCisgCSAgICAgICAgICAgICAgICAgIHBTY3JuLT5iaXRzUGVyUGl4ZWwpKSB7CistCQl4Zjg2RHJ2TXNnKHNjcm5JbmRleCwgWF9FUlJPUiwgImZiU2NyZWVuSW5pdCBmYWlsZWRcbiIpOworKwkJeGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LCBYX0VSUk9SLCAiZmJTY3JlZW5Jbml0IGZhaWxlZFxuIik7CisgCQlyZXR1cm4gRkFMU0U7CisgCX0KKyAKK0BAIC01NjcsNyArNTY5LDcgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAorIAkvKiBJbml0aWFsaXplIFhSZW5kZXIgZmFsbGJhY2tzICovCisgCWlmICghZmJQaWN0dXJlSW5pdChwU2NyZWVuLCBOVUxMLCAwKSkgeworLQkJeGY4NkRydk1zZyhzY3JuSW5kZXgsIFhfRVJST1IsICJmYlBpY3R1cmVJbml0IGZhaWxlZFxuIik7CisrCQl4Zjg2RHJ2TXNnKHBTY3JuLT5zY3JuSW5kZXgsIFhfRVJST1IsICJmYlBpY3R1cmVJbml0IGZhaWxlZFxuIik7CisgCQlyZXR1cm4gRkFMU0U7CisgCX0KKyAJCitAQCAtNTc5LDcgKzU4MSw3IEBAIE9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndikKKyAKKyAJLyogSW5pdGlhbGl6ZSBkZWZhdWx0IGNvbG9ybWFwICovCisgCWlmICghbWlDcmVhdGVEZWZDb2xvcm1hcChwU2NyZWVuKSkgeworLQkJeGY4NkRydk1zZyhzY3JuSW5kZXgsIFhfRVJST1IsCisrCQl4Zjg2RHJ2TXNnKHBTY3JuLT5zY3JuSW5kZXgsIFhfRVJST1IsCisgCQkgICAgICAgICAgICJjcmVhdGluZyBkZWZhdWx0IGNvbG9ybWFwIGZhaWxlZFxuIik7CisgCQlyZXR1cm4gRkFMU0U7CisgCX0KK0BAIC01ODksNyArNTkxLDcgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJLyogVGhpcyBpcyBub24tZmF0YWwgc2luY2Ugd2UgbWlnaHQgYmUgcnVubmluZyBhZ2FpbnN0IG9sZGVyCisgCQkgKiBrZXJuZWwgZHJpdmVyIGluIHdoaWNoIGNhc2Ugd2Ugb25seSBkbyBiYXNpYyAyRCBzdHVmZi4uLgorIAkJICovCistCQl4Zjg2RHJ2TXNnKHNjcm5JbmRleCwgWF9FUlJPUiwgIlJlYWRpbmcgcGxhbmUgaW5mbyBmYWlsZWRcbiIpOworKwkJeGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LCBYX0VSUk9SLCAiUmVhZGluZyBwbGFuZSBpbmZvIGZhaWxlZFxuIik7CisgCX0gZWxzZSBpZiAoIW9mYi0+ZHNzKSB7CisgCisgCQlvZmItPnBsYW5lX2luZm8uZW5hYmxlZCA9IDE7CitAQCAtNjAyLDcgKzYwNCw3IEBAIE9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCX0KKyAKKyAJCWlmIChpb2N0bCAob2ZiLT5mZCwgT01BUEZCX1NFVFVQX1BMQU5FLCAmb2ZiLT5wbGFuZV9pbmZvKSkgeworLQkJCXhmODZEcnZNc2coc2NybkluZGV4LCBYX0VSUk9SLAorKwkJCXhmODZEcnZNc2cocFNjcm4tPnNjcm5JbmRleCwgWF9FUlJPUiwKKyAJCQkgICAgICAgICAgICAiJXM6IFBsYW5lIHNldHVwIGZhaWxlZDogJXNcbiIsCisgCQkJICAgICAgICAgICAgX19GVU5DVElPTl9fLCBzdHJlcnJvcihlcnJubykpOworIAkJCXJldHVybiBGQUxTRTsKK0BAIC02NDUsOSArNjQ3LDEwIEBAIE9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJcmV0dXJuIFRSVUU7CisgfQorIAorLXN0YXRpYyBCb29sIE9NQVBGQlN3aXRjaE1vZGUoaW50IHNjcm5JbmRleCwgRGlzcGxheU1vZGVQdHIgbW9kZSwgaW50IGZsYWdzKQorK3N0YXRpYyBCb29sIE9NQVBGQlN3aXRjaE1vZGUoU1dJVENIX01PREVfQVJHU19ERUNMKQorIHsKKy0JcmV0dXJuIHhmODZTZXRTaW5nbGVNb2RlICh4Zjg2U2NyZWVuc1tzY3JuSW5kZXhdLCBtb2RlLCBSUl9Sb3RhdGVfMCk7CisrCVNDUk5fSU5GT19QVFIoYXJnKTsKKysJcmV0dXJuIHhmODZTZXRTaW5nbGVNb2RlIChwU2NybiwgbW9kZSwgUlJfUm90YXRlXzApOworIH0KKyAKKyB2b2lkCitAQCAtNjk5LDE0ICs3MDIsMTQgQEAgT01BUEZCUHJpbnRDYXBhYmlsaXRpZXMoU2NybkluZm9QdHIgcFNjcm4sCisgLyoqKiBVbmltcGxlbWVudGVkOiAqLworIAorIHN0YXRpYyBCb29sCistT01BUEZCRW50ZXJWVChpbnQgc2NybkluZGV4LCBpbnQgZmxhZ3MpCisrT01BUEZCRW50ZXJWVChWVF9GVU5DX0FSR1NfREVDTCkKKyB7CisgCXhmODZNc2coWF9OT1RfSU1QTEVNRU5URUQsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKyAJcmV0dXJuIFRSVUU7CisgfQorIAorIHN0YXRpYyB2b2lkCistT01BUEZCTGVhdmVWVChpbnQgc2NybkluZGV4LCBpbnQgZmxhZ3MpCisrT01BUEZCTGVhdmVWVChWVF9GVU5DX0FSR1NfREVDTCkKKyB7CisgCXhmODZNc2coWF9OT1RfSU1QTEVNRU5URUQsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKyB9CistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDctYWx3YXlzX2luY2x1ZGVfeG9yZ19zZXJ2ZXIuaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDctYWx3YXlzX2luY2x1ZGVfeG9yZ19zZXJ2ZXIuaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzBiOWIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwNy1hbHdheXNfaW5jbHVkZV94b3JnX3NlcnZlci5oLnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK0ZpeCBlcnJvcnMgd2l0aCBnbGliYyAyLjIwCisKK0luIGZpbGUgaW5jbHVkZWQgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS9zdHJpbmcuaDo2MzQ6MCwKKyAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS94b3JnL29zLmg6NTMsCisgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUveG9yZy9taXNjLmg6MTE1LAorICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3hvcmcveGY4NnN0ci5oOjM3LAorICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3hvcmcveGY4Ni5oOjQ0LAorICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy93b3JrL2k1ODYtb2UtbGludXgveGY4Ni12aWRlby1vbWFwZmIvMl8wLjEuMStnaXRyQVVUT0lOQysyOGMwMDZjOTRlLXIyMS43L2dpdC9zcmMvb21hcGZiLXh2LWJsaXp6YXJkLmM6MzM6CisvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS94b3JnL29zLmg6NTc5OjE6IGVycm9yOiBleHBlY3RlZCBpZGVudGlmaWVyIG9yICcoJyBiZWZvcmUgJ19fZXh0ZW5zaW9uX18nCisgc3RybmR1cChjb25zdCBjaGFyICpzdHIsIHNpemVfdCBuKTsKKyBeCitJbiBmaWxlIGluY2x1ZGVkIGZyb20gL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUvc3RyaW5nLmg6NjM0OjAsCisgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUveG9yZy9vcy5oOjUzLAorICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3hvcmcvbWlzYy5oOjExNSwKKyAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS94b3JnL3hmODZzdHIuaDozNywKKyAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS94b3JnL3hmODYuaDo0NCwKKyAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvd29yay9pNTg2LW9lLWxpbnV4L3hmODYtdmlkZW8tb21hcGZiLzJfMC4xLjErZ2l0ckFVVE9JTkMrMjhjMDA2Yzk0ZS1yMjEuNy9naXQvc3JjL29tYXBmYi14di1nZW5lcmljLmM6Mjg6CisvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS94b3JnL29zLmg6NTc5OjE6IGVycm9yOiBleHBlY3RlZCBpZGVudGlmaWVyIG9yICcoJyBiZWZvcmUgJ19fZXh0ZW5zaW9uX18nCisgc3RybmR1cChjb25zdCBjaGFyICpzdHIsIHNpemVfdCBuKTsKKyBeCisKK1NpbmdlZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworSW5kZXg6IGdpdC9zcmMvb21hcGZiLXh2LWJsaXp6YXJkLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zcmMvb21hcGZiLXh2LWJsaXp6YXJkLmMJMjAxNC0wOC0yOCAwNToxNjoyNS42ODQwNzA1ODcgLTA3MDAKKysrKyBnaXQvc3JjL29tYXBmYi14di1ibGl6emFyZC5jCTIwMTQtMDgtMjggMTk6MDU6MzkuNDQwMDcwNTg3IC0wNzAwCitAQCAtMzAsNiArMzAsNyBAQAorICAqICAtCisgICovCisgCisrI2luY2x1ZGUgPHhvcmctc2VydmVyLmg+CisgI2luY2x1ZGUgInhmODYuaCIKKyAjaW5jbHVkZSAieGY4Nl9PU2xpYi5oIgorICNpbmNsdWRlICJ4Zjg2eHYuaCIKK0luZGV4OiBnaXQvc3JjL29tYXBmYi14di1nZW5lcmljLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zcmMvb21hcGZiLXh2LWdlbmVyaWMuYwkyMDE0LTA4LTI4IDA1OjE2OjI1LjY4NDA3MDU4NyAtMDcwMAorKysrIGdpdC9zcmMvb21hcGZiLXh2LWdlbmVyaWMuYwkyMDE0LTA4LTI4IDE5OjA1OjUxLjc4MDA3MDU4NyAtMDcwMAorQEAgLTI1LDYgKzI1LDcgQEAKKyAgKiBHZW5lcmljIGZ1bmN0aW9ucyBmb3IgdGhlIFhWIGRyaXZlcgorICAqLworIAorKyNpbmNsdWRlIDx4b3JnLXNlcnZlci5oPgorICNpbmNsdWRlICJ4Zjg2LmgiCisgI2luY2x1ZGUgInhmODZfT1NsaWIuaCIKKyAjaW5jbHVkZSAieGY4Nnh2LmgiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYl9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYl9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVlYjg3MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiX2dpdC5iYgpAQCAtMCwwICsxLDM1IEBACityZXF1aXJlIHhvcmctZHJpdmVyLXZpZGVvLmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIFRleGFzIEluc3RydW1lbnRzIE9NQVAgZnJhbWVidWZmZXIgZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJvbWFwZmIgZHJpdmVyIHN1cHBvcnRzIHRoZSBiYXNpYyBUZXhhcyBJbnN0cnVtZW50cyBPTUFQIFwKK2ZyYW1lYnVmZmVyLiIKKworTElDRU5TRSA9ICJNSVQtWCAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTYzZTJjYmFjNTM4NjNmNjBlMmY0MzM0M2ZiMzQzNjdmIgorREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEiCisKK1NSQ1JFViA9ICIzM2UzNmMxMmRkZTMzNmVkYmRkMzQ2MjZkZDhhZGZjYWViYzhmYmI4IgorUFIgPSAiJHtJTkNfUFJ9LjciCitQViA9ICIwLjEuMStnaXRyJHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbnNjbS5kZWJpYW4ub3JnL2NvbGxhYi1tYWludC94Zjg2LXZpZGVvLW9tYXBmYi5naXQgXAorICBmaWxlOi8vMDAwMS1QcmV2ZW50cy1vbWFwZmItZnJvbS1mcm9tLWNyYXNoaW5nLXdoZW4tcGl4ZWxjbG9jay1vLnBhdGNoIFwKKyAgZmlsZTovLzAwMDEtUmV2ZXJ0LVNldC1hLWxhcmdlLUNSVEMtdXBwZXItbGltaXQtdG8tbm90LXBydW5lLWxhci5wYXRjaCBcCisgIGZpbGU6Ly8wMDAyLVJldmVydC1TZXQtdmlydHVhbC1zaXplLXdoZW4tY29uZmlndXJpbmctZnJhbWVidWZmZXIucGF0Y2ggXAorICBmaWxlOi8vMDAwMy1mb3JjZS1wbGFpbi1tb2RlLnBhdGNoIFwKKyAgZmlsZTovLzAwMDQtYmxhY2tsaXN0LXR2LW91dC5wYXRjaCBcCisgIGZpbGU6Ly8wMDA1LUF0dGVtcHQtdG8tZml4LVZSRkIucGF0Y2ggXAorICBmaWxlOi8vMDAwNi1vbWFwZmItcG9ydC10by1uZXcteHNlcnZlci12aWRlby1BUEkucGF0Y2ggXAorICBmaWxlOi8vMDAwNy1hbHdheXNfaW5jbHVkZV94b3JnX3NlcnZlci5oLnBhdGNoIFwKKyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRVhUUkFfT0VDT05GX2FybXY3YSA9ICIgLS1lbmFibGUtbmVvbiAiCitDRkxBR1MgKz0gIiAtSSR7U1RBR0lOR19JTkNESVJ9L3hvcmcgIgorCisjIFVzZSBvdmVybGF5IDIgb24gb21hcDMgdG8gZW5hYmxlIG90aGVyIGFwcHMgdG8gdXNlIG92ZXJsYXkgMSAoZS5nLiBkbWFpIG9yIG9tYXBmYnBsYXkpCitkb19jb21waWxlX3ByZXBlbmRfYXJtdjdhICgpIHsKKyAgICAgICAgc2VkIC1pIC1lIHM6ZmIxOmZiMjpnICR7U30vc3JjL29tYXBmYi14di5jCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLXZlc2FfMi4zLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLXZlc2FfMi4zLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEyNTFiNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tdmVzYV8yLjMuNC5iYgpAQCAtMCwwICsxLDIxIEBACityZXF1aXJlIHhvcmctZHJpdmVyLXZpZGVvLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hMWYwNjEwZWJkYzZmMzE0YTlmYTUxMDJhOGM1YzFiMCIKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBHZW5lcmljIFZlc2EgdmlkZW8gZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJ2ZXNhIGlzIGFuIFhvcmcgZHJpdmVyIGZvciBnZW5lcmljIFZFU0EgdmlkZW8gY2FyZHMuIEl0IFwKK2NhbiBkcml2ZSBtb3N0IFZFU0EtY29tcGF0aWJsZSB2aWRlbyBjYXJkcywgYnV0IG9ubHkgbWFrZXMgdXNlIG9mIHRoZSBcCitiYXNpYyBzdGFuZGFyZCBWRVNBIGNvcmUgdGhhdCBpcyBjb21tb24gdG8gdGhlc2UgY2FyZHMuIFRoZSBkcml2ZXIgXAorc3VwcG9ydHMgZGVwdGhzIDgsIDE1IDE2IGFuZCAyNC4iCisKK1BSID0gIiR7SU5DX1BSfS4wIgorCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSByYW5kcnByb3RvIGxpYnBjaWFjY2VzcyIKKworQ09NUEFUSUJMRV9IT1NUID0gJyhpLjg2fHg4Nl82NCkuKi1saW51eCcKKworUlJFQ09NTUVORFNfJHtQTn0gKz0gInhzZXJ2ZXIteG9yZy1tb2R1bGUtbGliaW50MTAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhODkzYzM3YzU4OWY3YTMxY2VhOTI5YTVkODk2YTBlMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3YmRkZjRkODc5ZGQ2ZjY3MDg4ZWNiMjAzYTMxZTEyMzM0YWFiOTgwMTc0YmQwOTA5OTMwYTIxZjMyZTI1MWMxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby12bXdhcmUvMDAwMi1hZGQtb3B0aW9uLWZvci12bXdnZngucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLXZtd2FyZS8wMDAyLWFkZC1vcHRpb24tZm9yLXZtd2dmeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDM5ZDA4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby12bXdhcmUvMDAwMi1hZGQtb3B0aW9uLWZvci12bXdnZngucGF0Y2gKQEAgLTAsMCArMSw5OCBAQAorVXBzdHJlYW0tU3RhdHVzOlN1Ym1pdHRlZAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRnJvbSBmMTAzZDZmNTcwNjcxYzY0OWNjZDdiMjI1ZTZkNmM5ZjE0MzcxODg4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK0RhdGU6IFdlZCwgMjUgSnVuIDIwMTQgMTY6MTY6NDQgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIGFkZCBvcHRpb24gZm9yIHZtd2dmeAorCistLS0KKyBjb25maWd1cmUuYWMgfCAgIDQ5ICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMjkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGJlNDBlZDcuLjhlMTUzMDcgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTY0LDYgKzY0LDEzIEBAIEFDX0FSR19FTkFCTEUodm13YXJlY3RybC1jbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVk1XQVJFQ1RSTD0kZW5hYmxldmFsXSwgW1ZNV0FSRUNUUkw9bm9dKQorIEFNX0NPTkRJVElPTkFMKEJVSUxEX1ZNV0FSRUNUUkwsIFt0ZXN0ICJ4JFZNV0FSRUNUUkwiID0geHllc10pCisgCisrIyBEZWZpbmUgYSBjb25maWd1cmUgb3B0aW9uIHRvIGJ1aWxkIHRoZSB2bXdnZnggZHJpdmVyCisrQUNfQVJHX0VOQUJMRSh2bXdnZngsCisrICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXZtd2dmeF0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRGlzYWJsZSB2bXdnZnggZHJpdmVyIChLTVMvM0QpIChkZWZhdWx0OiBlbmFibGVkKV0pLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1ZNV0dGWD0iJGVuYWJsZXZhbCJdLCBbVk1XR0ZYPSJ5ZXMiXSkKKytBTV9DT05ESVRJT05BTChCVUlMRF9WTVdHRlgsIHRlc3QgIngkVk1XR0ZYIiA9IHh5ZXMpCisrCisgIyBTdG9yZSB0aGUgbGlzdCBvZiBzZXJ2ZXIgZGVmaW5lZCBvcHRpb25hbCBleHRlbnNpb25zIGluIFJFUVVJUkVEX01PRFVMRVMKKyBYT1JHX0RSSVZFUl9DSEVDS19FWFQoUkFORFIsIHJhbmRycHJvdG8pCisgWE9SR19EUklWRVJfQ0hFQ0tfRVhUKFJFTkRFUiwgcmVuZGVycHJvdG8pCitAQCAtODUsMTEgKzkyLDYgQEAgUEtHX0NIRUNLX0VYSVNUUyhbeG9yZy1zZXJ2ZXIgPj0gMS40Ljk5XSwKKyAgICAgICAgICAgICAgICAgIFtBQ19ERUZJTkUoW0hBVkVfWE9SR19TRVJWRVJfMV81XzBdLCAxLAorICAgICAgICAgICAgICAgICAgW0hhcyB2ZXJzaW9uIDEuNS4wIG9yIGdyZWF0ZXIgb2YgdGhlIFhzZXJ2ZXJdKV0pCisgCistUEtHX0NIRUNLX0VYSVNUUyhbeG9yZy1zZXJ2ZXIgPj0gMS43LjBdLAorLSAgICAgICAgICAgICAgICAgW0FDX0RFRklORShbSEFWRV9YT1JHX1NFUlZFUl8xXzdfMF0sIDEsCistICAgICAgICAgICAgICAgICBbSGFzIHZlcnNpb24gMS43LjAgb3IgZ3JlYXRlciBvZiB0aGUgWHNlcnZlcl0pCistCQkgQlVJTERfVk1XR0ZYPXllc10sW0JVSUxEX1ZNV0dGWD1ub10pCistCisgUEtHX0NIRUNLX0VYSVNUUyhbeG9yZy1zZXJ2ZXIgPj0gMS4xMi4wXSwKKyAgICAgICAgICAgICAgICAgIFtBQ19ERUZJTkUoW0hBVkVfWE9SR19TRVJWRVJfMV8xMl8wXSwgMSwKKyAgICAgICAgICAgICAgICAgIFtIYXMgdmVyc2lvbiAxLjEyLjAgb3IgZ3JlYXRlciBvZiB0aGUgWHNlcnZlcl0pXSkKK0BAIC0xMTQsMzkgKzExNiwyOCBAQCBBTV9DT05ESVRJT05BTChYU0VSVkVSX0xJQlBDSUFDQ0VTUywgdGVzdCAieCRYU0VSVkVSX0xJQlBDSUFDQ0VTUyIgPSB4eWVzKQorIAorIEFDX1NVQlNUKFttb2R1bGVkaXJdKQorIAorLWlmIHRlc3QgeCRCVUlMRF9WTVdHRlggPSB4eWVzOyB0aGVuCistCVBLR19DSEVDS19NT0RVTEVTKFtMSUJEUk1dLCBbbGliZHJtXSxbXSxbQlVJTERfVk1XR0ZYPW5vXSkKKy1maQorLWlmIHRlc3QgeCRCVUlMRF9WTVdHRlggPSB4eWVzOyB0aGVuCistIworLSMgRWFybHkgdmVyc2lvbnMgb2YgbWVzYSAxMCBmb3Jnb3QgdG8gYnVtcCB0aGUgWEEgbWFqb3IgdmVyc2lvbiBudW1iZXIgaW4KKy0jIHRoZSB4YV90cmFja2VyLmggaGVhZGVyCistIworLQlQS0dfQ0hFQ0tfTU9EVUxFUyhbWEFUUkFDS0VSXSwgW3hhdHJhY2tlciA+PSAwLjQuMF0sCistCQkJICBbUEtHX0NIRUNLX0VYSVNUUyhbeGF0cmFja2VyID0gMi4wLjBdLAorLQkgICAgICAgICAgICAgICAgICBbQUNfREVGSU5FKFtIQVZFX1hBXzJdLCAxLAorLSAgICAgICAgICAgICAgIAkJICBbSGFzIHZlcnNpb24gMiBvZiBYQV0pXSldLAorLQkJCSAgW0JVSUxEX1ZNV0dGWD1ub10pCistIworLSMgQ2hlY2sgZm9yIHByaW1lLgorLSMKKytBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgS2VybmVsIE1vZGUgU2V0dGluZyBhbmQgM0RdKQorK2lmIHRlc3QgeCRWTVdHRlggPSB4eWVzOyB0aGVuCisrCVBLR19DSEVDS19NT0RVTEVTKFtMSUJEUk1dLCBbbGliZHJtXSkKKysJIyBDaGVjayBmb3IgcHJpbWUuCisgCVBLR19DSEVDS19FWElTVFMoW2xpYmRybSA+PSAyLjQuMzhdLAorIAkJCSBbQUNfREVGSU5FKFtIQVZFX0xJQkRSTV8yXzRfMzhdLCAxLAorIAkJCSBbSGFzIHZlcnNpb24gMi40LjM4IG9yIGdyZWF0ZXIgb2YgbGliZHJtXSldKQorLWZpCisgCistRFJJVkVSX05BTUU9dm13YXJlCistQUNfU1VCU1QoW0RSSVZFUl9OQU1FXSkKKy0KKy1BQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgS2VybmVsIE1vZGUgU2V0dGluZyBhbmQgM0RdKQorLWlmIHRlc3QgeCRCVUlMRF9WTVdHRlggPSB4eWVzOyB0aGVuCistCUFDX01TR19SRVNVTFQoW3llc10pCisrCSMgRWFybHkgdmVyc2lvbnMgb2YgbWVzYSAxMCBmb3Jnb3QgdG8gYnVtcCB0aGUgWEEgbWFqb3IgdmVyc2lvbiBudW1iZXIKKysJIyBpbiB0aGUgeGFfdHJhY2tlci5oIGhlYWRlcgorKwlQS0dfQ0hFQ0tfTU9EVUxFUyhbWEFUUkFDS0VSXSwgW3hhdHJhY2tlciA+PSAwLjQuMF0sCisrCQkJICBbUEtHX0NIRUNLX0VYSVNUUyhbeGF0cmFja2VyID0gMi4wLjBdLAorKwkgICAgICAgICAgICAgICAgICBbQUNfREVGSU5FKFtIQVZFX1hBXzJdLCAxLAorKyAgICAgICAgICAgICAgIAkJICBbSGFzIHZlcnNpb24gMiBvZiBYQV0pXSldKQorICAgICAgICAgQUNfREVGSU5FKFtCVUlMRF9WTVdHRlhdLCAxLCBbQnVpbGRpbmcgdGhlIHZtd2dmeCBkcml2ZXIgcGF0aF0pCisrCUFDX01TR19SRVNVTFQoW3llc10pCisgZWxzZQorIAlBQ19NU0dfUkVTVUxUKFtub10pCisgZmkKKyAKKy1BTV9DT05ESVRJT05BTChCVUlMRF9WTVdHRlgsIHRlc3QgIngkQlVJTERfVk1XR0ZYIiA9IHh5ZXMpCisrRFJJVkVSX05BTUU9dm13YXJlCisrQUNfU1VCU1QoW0RSSVZFUl9OQU1FXSkKKyAKKyBBQ19DT05GSUdfRklMRVMoWworICAgICAgICAgICAgICAgICBNYWtlZmlsZQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLXZtd2FyZV8xMy4xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLXZtd2FyZV8xMy4xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODliOThlZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tdm13YXJlXzEzLjEuMC5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctZHJpdmVyLXZpZGVvLmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIFZNd2FyZSBTVkdBIGRpc3BsYXkgZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJ2bXdhcmUgaXMgYW4gWG9yZyBkcml2ZXIgZm9yIFZNd2FyZSB2aXJ0dWFsIHZpZGVvIGNhcmRzLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWZjZDdkNDM3YTk1OWExNWZiZWU4NzA3NzQ3YzZiNTMiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIHhpbmVyYW1hcHJvdG8gdmlkZW9wcm90byBsaWJwY2lhY2Nlc3MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAyLWFkZC1vcHRpb24tZm9yLXZtd2dmeC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjBjYmEyMmZlZDRjYjYzOWQ1YzQyNzZmNzg5MmM1NDNkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNjMWQyNDRlNGIxYjc3ZTkyMTI2OTU3OTY1Y2RjOWZiODJkZTRjMjE1YzA3MDZhM2E4YWFmZjY5MzllNGEwY2MiCisKK0NPTVBBVElCTEVfSE9TVCA9ICcoaS44Ni4qLWxpbnV4fHg4Nl82NC4qLWxpbnV4KScKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtdm13Z2Z4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveG9yZy1kcml2ZXItY29tbW9uLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hvcmctZHJpdmVyLWNvbW1vbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RkZDFjNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hvcmctZHJpdmVyLWNvbW1vbi5pbmMKQEAgLTAsMCArMSw0MSBAQAorU1VNTUFSWSA9ICJYIGRyaXZlciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gIngxMS9kcml2ZXJzIgorTElDRU5TRSA9ICJNSVQtWCIKKworUEUgPSAiMiIKK0lOQ19QUiA9ICJyMjEiCisKK0RFUEVORFMgPSAidmlydHVhbC94c2VydmVyIHhwcm90byByYW5kcnByb3RvIHV0aWwtbWFjcm9zIgorCitTUkNfVVJJID0gIiR7WE9SR19NSVJST1J9L2luZGl2aWR1YWwvZHJpdmVyLyR7QlBOfS0ke1BWfS50YXIuYnoyIgorCitGSUxFU18ke1BOfSArPSAiICR7bGliZGlyfS94b3JnL21vZHVsZXMvZHJpdmVycy8qLnNvIgorRklMRVNfJHtQTn0tZGJnICs9ICIgJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9kcml2ZXJzLy5kZWJ1ZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwveHNlcnZlcgorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworIyBGSVhNRTogV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSBsaWJ0b29sIGFyY2hpdmVzICgqLmxhKSBmcm9tIG1vZHVsZXMKKyMgZGlyZWN0b3J5LCBhcyB0aGV5IHNlcnZlIG5vIHVzZWZ1bCBwdXJwb3NlLiBVcHN0cmVhbSBzaG91bGQgZml4IE1ha2VmaWxlLmFtCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlmaW5kICR7RH0ke2xpYmRpcn0veG9yZy9tb2R1bGVzIC1yZWdleCAiLipcLmxhJCIgfCB4YXJncyBybSAtZiAtLQorfQorCisjIEZ1bmN0aW9uIHRvIGFkZCB0aGUgcmVsZXZhbnQgQUJJIGRlcGVuZGVuY3kgdG8gZHJpdmVycywgd2hpY2ggc2hvdWxkIGJlIGNhbGxlZAorIyBmcm9tIGEgUEFDS0FHRUZVTkMuCitkZWYgX2FkZF94b3JnX2FiaV9kZXBlbmRzKGQsIG5hbWUpOgorICAgICMgTWFwIG9mIEFCSSBuYW1lcyBleHBvc2VkIGluIHRoZSBkZXBlbmRlbmNpZXMgdG8gcGtnLWNvbmZpZyB2YXJpYWJsZXMKKyAgICBhYmlzID0geworICAgICAgInZpZGVvIjogImFiaV92aWRlb2RydiIsCisgICAgICAiaW5wdXQiOiAiYWJpX3hpbnB1dCIKKyAgICB9CisKKyAgICBvdXRwdXQgPSBvcy5wb3BlbigicGtnLWNvbmZpZyB4b3JnLXNlcnZlciAtLXZhcmlhYmxlPSVzIiAlIGFiaXNbbmFtZV0pLnJlYWQoKQorICAgIG1scHJlZml4ID0gZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkgb3IgJycKKyAgICBhYmkgPSAiJXN4b3JnLWFiaS0lcy0lcyIgJSAobWxwcmVmaXgsIG5hbWUsIG91dHB1dC5zcGxpdCgiLiIpWzBdKQorCisgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgIGQuYXBwZW5kVmFyKCdSREVQRU5EU18nICsgcG4sICcgJyArIGFiaSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hvcmctZHJpdmVyLWlucHV0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hvcmctZHJpdmVyLWlucHV0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmVjMDY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveG9yZy1kcml2ZXItaW5wdXQuaW5jCkBAIC0wLDAgKzEsMTEgQEAKK2luY2x1ZGUgeG9yZy1kcml2ZXItY29tbW9uLmluYworCitERVBFTkRTICs9ICJpbnB1dHByb3RvIGticHJvdG8gIgorCitweXRob24gYWRkX3hvcmdfYWJpX2RlcGVuZHMoKSB7CisgICAgX2FkZF94b3JnX2FiaV9kZXBlbmRzKGQsICJpbnB1dCIpCit9CitQQUNLQUdFRlVOQ1MgPSsgImFkZF94b3JnX2FiaV9kZXBlbmRzIgorCitGSUxFU18ke1BOfSArPSAiICR7bGliZGlyfS94b3JnL21vZHVsZXMvaW5wdXQvKi5zbyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiICR7bGliZGlyfS94b3JnL21vZHVsZXMvaW5wdXQvLmRlYnVnIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveG9yZy1kcml2ZXItdmlkZW8uaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveG9yZy1kcml2ZXItdmlkZW8uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MjgxZTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94b3JnLWRyaXZlci12aWRlby5pbmMKQEAgLTAsMCArMSw4IEBACitpbmNsdWRlIHhvcmctZHJpdmVyLWNvbW1vbi5pbmMKKworREVQRU5EUyA9KyAicmVuZGVycHJvdG8gdmlkZW9wcm90byB4ZXh0cHJvdG8gZm9udHNwcm90byIKKworcHl0aG9uIGFkZF94b3JnX2FiaV9kZXBlbmRzKCkgeworICAgIF9hZGRfeG9yZ19hYmlfZGVwZW5kcyhkLCAidmlkZW8iKQorfQorUEFDS0FHRUZVTkNTID0rICJhZGRfeG9yZ19hYmlfZGVwZW5kcyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9lbmNvZGluZ3Mvbm9jb21waWxlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9lbmNvZGluZ3Mvbm9jb21waWxlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzMwYzE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2VuY29kaW5ncy9ub2NvbXBpbGVyLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworWE9SR19ERUZBVUxUX09QVElPTlMgcHVsbHMgaW4gdGhlIGZvbGxvd2luZyBkZXBlbmRlbmN5IGNoYWluczoKKworWE9SR19DV0FSTkZMQUdTIC0+IEFDX1BST0dfQ0NfQzk5CitYT1JHX1NUUklDVF9PUFRJT04gLT4gQUNfUFJPR19DQ19DOTksIFhPUkdfQ1dBUk5GTEFHUworWE9SR19NQU5QQUdFX1NFQ1RJT05TIC0+IEFDX0NBTk9OSUNBTF9IT1NUIC0+IENoZWNrcyBob3N0IAorCitlYWNoIG9mIHdoaWNoIHRyaWdnZXJzIHRoZSB1c2Ugb2YgdGhlIGhvc3QgY29tcGlsZXIuIEFzIGFuICJhbGwiCithcmNoaXRlY3R1cmUgcGFja2FnZSwgaXQgc2hvdWxkbid0IG5lZWQgYSBjb21waWxlciAoYW5kIGRvZXNuJ3QpLgorCitSUCAxNy81LzIwMTEKKworSW5kZXg6IGVuY29kaW5ncy0xLjAuNC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbmNvZGluZ3MtMS4wLjQub3JpZy9jb25maWd1cmUuYWMJMjAxMS0wNS0xNyAyMzozNjoxOS41MDUwOTU4NzYgKzAxMDAKKysrKyBlbmNvZGluZ3MtMS4wLjQvY29uZmlndXJlLmFjCTIwMTEtMDUtMTcgMjM6NTQ6MTQuOTM1MDk2MTI4ICswMTAwCitAQCAtNCwxMiArNCwxMiBAQAorIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ24gZGlzdC1iemlwMl0pCisgQU1fTUFJTlRBSU5FUl9NT0RFCisgCistIyBSZXF1aXJlIHhvcmctbWFjcm9zOiBYT1JHX0RFRkFVTFRfT1BUSU9OUworIG00X2lmbmRlZihbWE9SR19NQUNST1NfVkVSU0lPTl0sCisgCSAgW200X2ZhdGFsKFttdXN0IGluc3RhbGwgeG9yZy1tYWNyb3MgMS4zIG9yIGxhdGVyIGJlZm9yZSBydW5uaW5nIGF1dG9jb25mL2F1dG9nZW5dKV0pCisgWE9SR19NQUNST1NfVkVSU0lPTigxLjMpCistWE9SR19ERUZBVUxUX09QVElPTlMKKy0KKytYT1JHX1JFTEVBU0VfVkVSU0lPTgorK1hPUkdfQ0hBTkdFTE9HCisrWE9SR19JTlNUQUxMCisgQUNfUFJPR19JTlNUQUxMCisgCisgIyBSZXF1aXJlIFguT3JnJ3MgZm9udCB1dGlsIG1hY3JvcyAxLjIgb3IgbGF0ZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9lbmNvZGluZ3NfMS4wLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZW5jb2RpbmdzXzEuMC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwODQ2ZDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZW5jb2RpbmdzXzEuMC40LmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiVGhlIFhvcmcgZm9udCBlbmNvZGluZyBmaWxlcyIKKworREVTQ1JJUFRJT04gPSAiVGhlIGVuY29kaW5ncyB0aGF0IG1hcCB0byBzcGVjaWZpYyBjaGFyYWN0ZXJzIGZvciBhIFwKK251bWJlciBvZiBYb3JnIGFuZCBjb21tb24gZm9udHMuIgorCityZXF1aXJlIHhvcmctZm9udC1jb21tb24uaW5jCitMSUNFTlNFID0gIlBEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OWRhOTNmMmRhZjJkNTU3MmZhYTJiZmFmMGRiZDllNzYiCitQRSA9ICIxIgorUFIgPSAiJHtJTkNfUFJ9LjEiCisKK0RFUEVORFMgPSAibWtmb250c2NhbGUtbmF0aXZlIGZvbnQtdXRpbC1uYXRpdmUiCitSREVQRU5EU18ke1BOfSA9ICIiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ub2NvbXBpbGVyLnBhdGNoIgorCitpbmhlcml0IGFsbGFyY2gKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtZW5jb2RpbmdzZGlyPSR7ZGF0YWRpcn0vZm9udHMvWDExL2VuY29kaW5ncyIKKworU1JDX1VSSVttZDVzdW1dID0gIjBmMmQ2NTQ2ZDUxNGM1Y2M0ZWNmNzhhNjA2NTdhNWMxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNlZDYzMTI5ODhhNDVkMjM4MTJjMmFjNzA4YjQ1OTVmNjNmZDdhNDljNGRjZDlmNjZiZGNkNTBkMTA1N2Q1MzkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZm9udC1hbGlhcy0xLjAuMy9ub2NvbXBpbGVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2ZvbnQtYWxpYXMtMS4wLjMvbm9jb21waWxlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjlmYjhjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2ZvbnQtYWxpYXMtMS4wLjMvbm9jb21waWxlci5wYXRjaApAQCAtMCwwICsxLDMyIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1hPUkdfREVGQVVMVF9PUFRJT05TIHB1bGxzIGluIHRoZSBmb2xsb3dpbmcgZGVwZW5kZW5jeSBjaGFpbnM6CisKK1hPUkdfQ1dBUk5GTEFHUyAtPiBBQ19QUk9HX0NDX0M5OQorWE9SR19TVFJJQ1RfT1BUSU9OIC0+IEFDX1BST0dfQ0NfQzk5LCBYT1JHX0NXQVJORkxBR1MKK1hPUkdfTUFOUEFHRV9TRUNUSU9OUyAtPiBBQ19DQU5PTklDQUxfSE9TVCAtPiBDaGVja3MgaG9zdCAKKworZWFjaCBvZiB3aGljaCB0cmlnZ2VycyB0aGUgdXNlIG9mIHRoZSBob3N0IGNvbXBpbGVyLiBBcyBhbiAiYWxsIgorYXJjaGl0ZWN0dXJlIHBhY2thZ2UsIGl0IHNob3VsZG4ndCBuZWVkIGEgY29tcGlsZXIgKGFuZCBkb2Vzbid0KS4KKworUlAgMTcvNS8yMDExCisKK2RpZmYgLXVOciBmb250LWFsaWFzLTEuMC4zLm9yaWcvL2NvbmZpZ3VyZS5hYyBmb250LWFsaWFzLTEuMC4zL2NvbmZpZ3VyZS5hYworLS0tIGZvbnQtYWxpYXMtMS4wLjMub3JpZy8vY29uZmlndXJlLmFjCTIwMTEtMDUtMTggMjE6Mjk6MTguMzc4MjU4NjQzICswMjAwCisrKysgZm9udC1hbGlhcy0xLjAuMy9jb25maWd1cmUuYWMJMjAxMS0wNS0xOCAyMTozMjowNi44NjUyNTg1OTMgKzAyMDAKK0BAIC0yOCwxMiArMjgsMTIgQEAKKyBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduIGRpc3QtYnppcDJdKQorIEFNX01BSU5UQUlORVJfTU9ERQorIAorLSMgUmVxdWlyZSB4b3JnLW1hY3JvczogWE9SR19ERUZBVUxUX09QVElPTlMKKyBtNF9pZm5kZWYoW1hPUkdfTUFDUk9TX1ZFUlNJT05dLAorIAkgIFttNF9mYXRhbChbbXVzdCBpbnN0YWxsIHhvcmctbWFjcm9zIDEuMyBvciBsYXRlciBiZWZvcmUgcnVubmluZyBhdXRvY29uZi9hdXRvZ2VuXSldKQorIFhPUkdfTUFDUk9TX1ZFUlNJT04oMS4zKQorLVhPUkdfREVGQVVMVF9PUFRJT05TCistCisrWE9SR19SRUxFQVNFX1ZFUlNJT04KKytYT1JHX0NIQU5HRUxPRworK1hPUkdfSU5TVEFMTAorIEFDX1BST0dfSU5TVEFMTAorIAorIFhPUkdfRk9OVFJPT1RESVIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LWFsaWFzXzEuMC4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2ZvbnQtYWxpYXNfMS4wLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVlMTAxNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LWFsaWFzXzEuMC4zLmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiWCBmb250IGFsaWFzZXMiCisKK3JlcXVpcmUgeG9yZy1mb250LWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iZjAxNThiODliZTQ5M2Q1MjNkNjlkOWYyOTI2NTAzOCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jeXJpbGxpYy9mb250cy5hbGlhczttZDU9ZjQwNzk1YjA2NDBkNjc4NTgyNmFlY2QzYjE2ZjYxMjQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vNzVkcGkvZm9udHMuYWxpYXM7bWQ1PTZiYzQ4MDIzZjJhZTdmM2JmYzEwNWRiN2IwZWU2YjQ5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21pc2MvZm9udHMuYWxpYXM7bWQ1PWE4ZWMwNWQ1Mjg0MzFkNGM5NzAzYjU1YTdlZmQ2N2E4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLzEwMGRwaS9mb250cy5hbGlhczttZDU9ODViZWJkNmNhMjEzYWE2NTZjMzAxYTcyZWI0Mzk3Y2IiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ub2NvbXBpbGVyLnBhdGNoIgorCitERVBFTkRTID0gInV0aWwtbWFjcm9zLW5hdGl2ZSBmb250LXV0aWwtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAiZW5jb2RpbmdzIGZvbnQtdXRpbCIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICJmb250LXV0aWwtbmF0aXZlIgorCitpbmhlcml0IGFsbGFyY2gKKworUEUgPSAiMSIKK1BSID0gIiR7SU5DX1BSfS4zIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNmQyNWY2NDc5NmZlZjM0YjUzYjQzOWMyZTllZmE1NjIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGI0NTNiMmFhZTFjZmE4MDkwMDA5Y2EwMzcwMzdiOGM1ZTMzMzU1MDY1MWQ1YTE1OGI3MjY0Y2UxZDQ3MmM5YSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LXV0aWxfMS4zLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZm9udC11dGlsXzEuMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyODUxMjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZm9udC11dGlsXzEuMy4xLmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiWC5PcmcgZm9udCBwYWNrYWdlIGNyZWF0aW9uL2luc3RhbGxhdGlvbiB1dGlsaXRpZXMiCisKK3JlcXVpcmUgeG9yZy1mb250LWNvbW1vbi5pbmMKKworI1VuaWNvZGUgaXMgTUlUCitMSUNFTlNFID0gIkJTRCAmIE1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVkZjIwOGVjNjVlYjg0Y2U1YmI4ZDgyZDhmM2I5Njc1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3VjczJhbnkuYztlbmRsaW5lPTI4O21kNT04MzU3ZGM1NjdmYzYyOGJkMTI2OTZmMTViMmEzM2JjYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9iZGZ0cnVuY2F0ZS5jO2VuZGxpbmU9MjY7bWQ1PTRmODJmZmMxMDFhMWIxNjVlYWU5YzY5OThhYmZmOTM3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21hcC1JU084ODU5LTE7YmVnaW5saW5lPTk7ZW5kbGluZT0yMzttZDU9MWNlY2I5ODQwNjMyNDhmMjlmZmU1YzQ2ZjVjMDRmMzQiCisKK0RFUEVORFMgPSAiZW5jb2RpbmdzIHV0aWwtbWFjcm9zIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAidXRpbC1tYWNyb3MtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAibWtmb250ZGlyIG1rZm9udHNjYWxlIGVuY29kaW5ncyIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICJta2ZvbnRkaXItbmF0aXZlIG1rZm9udHNjYWxlLW5hdGl2ZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyMzc1NmRhYjgwOWY5ZWM1MDExYmIyN2ZiMmMzYzdkNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhYTdlYmRiMDcxNTEwNmRkMjU1MDgyZjIzMTBkYmFhMmNkN2UyMjU5NTdjMmE3N2Q3MTk3MjBjN2NjOTJiOTIxIgorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImZvbnR1dGlsX3N5c3Jvb3RfcHJlcHJvY2VzcyIKK2ZvbnR1dGlsX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSR7ZGF0YWRpcn0vZm9udHMvICR7U1lTUk9PVF9ERVNURElSfSR7ZGF0YWRpcn0vZm9udHMvCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1mb250LWNvbW1vbi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1mb250LWNvbW1vbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUyNjdmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLWZvbnQtY29tbW9uLmluYwpAQCAtMCwwICsxLDQyIEBACitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lngub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD14b3JnIgorCitTRUNUSU9OID0gIngxMS9mb250cyIKK0xJQ0VOU0UgPSAiTUlULVgiCisKK0RFUEVORFMgPSAiIGVuY29kaW5ncyBmb250LWFsaWFzIGZvbnQtdXRpbC1uYXRpdmUgbWtmb250ZGlyLW5hdGl2ZSBta2ZvbnRzY2FsZS1uYXRpdmUiCitSREVQRU5EU18ke1BOfSA9ICJlbmNvZGluZ3MgZm9udC11dGlsIGZvbnQtYWxpYXMiCisKK1hPUkdfUE4gPSAiJHtCUE59IgorSU5DX1BSID0gInIyIgorCisKK1NSQ19VUkkgPSAiJHtYT1JHX01JUlJPUn0vaW5kaXZpZHVhbC9mb250LyR7WE9SR19QTn0tJHtQVn0udGFyLmJ6MiIKK1MgPSAiJHtXT1JLRElSfS8ke1hPUkdfUE59LSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIG1rZm9udHNjYWxlLW5hdGl2ZSByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitFWFRSQV9PRU1BS0UgKz0gIkZDQ0FDSEU9L2Jpbi90cnVlIFVUSUxfRElSPSR7U1RBR0lOR19ESVJfVEFSR0VUfVwkXChNQVBGSUxFU19QQVRIXCkiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWZpbmQgJHtEfSR7bGliZGlyfS9YMTEvZm9udHMgLXR5cGUgZiAtbmFtZSBmb250cy5kaXIgfCB4YXJncyBybSAtZgorCWZpbmQgJHtEfSR7bGliZGlyfS9YMTEvZm9udHMgLXR5cGUgZiAtbmFtZSBmb250cy5zY2FsZSB8IHhhcmdzIHJtIC1mCisJZmluZCAke0R9JHtkYXRhZGlyfS9mb250cy9YMTEgLXR5cGUgZiAtbmFtZSBmb250cy5kaXIgfCB4YXJncyBybSAtZgorCWZpbmQgJHtEfSR7ZGF0YWRpcn0vZm9udHMvWDExIC10eXBlIGYgLW5hbWUgZm9udHMuc2NhbGUgfCB4YXJncyBybSAtZgkKK30KKworRklMRVNfJHtQTn0gKz0gIiAke2xpYmRpcn0vWDExL2ZvbnRzICR7ZGF0YWRpcn0iCisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisgICAgICAgIGZvciBmb250ZGlyIGluIGBmaW5kICREL3Vzci9saWIvWDExL2ZvbnRzIC10eXBlIGRgOyBkbworICAgICAgICAgICAgICAgIG1rZm9udGRpciAkZm9udGRpcgorICAgICAgICAgICAgICAgIG1rZm9udHNjYWxlICRmb250ZGlyCisgICAgICAgIGRvbmUKKyAgICAgICAgZm9yIGZvbnRkaXIgaW4gYGZpbmQgJEQvdXNyL3NoYXJlL2ZvbnRzL1gxMSAtdHlwZSBkYDsgZG8KKyAgICAgICAgICAgICAgICBta2ZvbnRkaXIgJGZvbnRkaXIKKyAgICAgICAgICAgICAgICBta2ZvbnRzY2FsZSAkZm9udGRpcgorICAgICAgICBkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmNkMWIyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIlhvcmcgbWluaW1hbCBmb250cyBkYXRhIgorREVTQ1JJUFRJT04gPSAiTWluaW1hbCBmb250cyByZXF1aXJlZCBieSBYLm9yZy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lngub3JnIgorCitTRUNUSU9OID0gIngxMS9mb250cyIKKworTElDRU5TRSA9ICJQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLy4uL21pc2MvZm9udHMuZGlyO21kNT04MmExNDNkOTRkNmE5NzRhYWZlOTcxMzJkMmQ1MTlhYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8uLi9taXNjL2N1cnNvci5wY2YuZ3o7bWQ1PTQwYmM4MTAwMWZlZjRjMjFjYTA4ZGY0MzA1MDE0YTJhIgorCitTUkNfVVJJID0gImZpbGU6Ly9taXNjIgorCitQRSA9ICIxIgorUFIgPSAicjIiCisKK2luaGVyaXQgYWxsYXJjaCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgZm9udC1hbGlhcyByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitTID0gIiR7V09SS0RJUn0vbWlzYyIKKworUEFDS0FHRVMgPSAiJHtQTn0iCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vWDExLyAke2RhdGFkaXJ9L2ZvbnRzL1gxMS8iCitSREVQRU5EU18ke1BOfSArPSAiZm9udC1hbGlhcyIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfS9mb250cy9YMTEvbWlzYworCWluc3RhbGwgLW0gMDY0NCAke1N9LyogJHtEfS8ke2RhdGFkaXJ9L2ZvbnRzL1gxMS9taXNjLworCWluc3RhbGwgLWQgJHtEfS8ke2xpYmRpcn0vWDExCisJbG4gLXNmICR7ZGF0YWRpcn0vZm9udHMvWDExLyAke0R9LyR7bGliZGlyfS9YMTEvZm9udHMgLXMKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMS5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTEucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYzg1NzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTEucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTAucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xMC5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZhODI5MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTAucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTEucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xMS5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIxYzVlMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTEucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTMucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xMy5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQyZmExYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTMucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTQucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xNC5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QxMTliNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTQucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTUucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xNS5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVmZTg0YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTUucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTYucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xNi5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM2MmM3MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTYucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMi5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTIucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NmE3NTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTIucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMy5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTMucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZmFmMWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTMucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktNC5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTQucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZGRkMTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTQucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktNS5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTUucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MWEyYWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTUucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktNy5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTcucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0OTg2ZjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTcucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktOC5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTgucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmODlhYmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTgucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktOS5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTkucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMmI1MzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTkucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUtPSTgtUi5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1LT0k4LVIucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZmNiODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1LT0k4LVIucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGY2MzU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTEucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMS5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI2M2M1ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTEucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTEwLnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTEwLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWE3ZDM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMTAucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTEzLnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTEzLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTQ4ZTk5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMTMucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTE0LnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTE0LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzkxYjhjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMTQucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTE1LnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTE1LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjA0NTA4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMTUucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTE2LnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTE2LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjhiMWYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMTYucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTIucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMi5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQxZTZjZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTIucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTMucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMy5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcyYjc1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTMucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTQucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktNC5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkwYTQzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTQucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTUucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktNS5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc1ZTdjMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTUucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTcucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktNy5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMxMmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTcucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTgucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktOC5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJiYmQ1MjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS04LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS05LnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTkucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MGQzMWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS05LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0IucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGMzMTg0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xLnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTEucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NGI1MTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xMC5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xMC5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JiMWE5ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTEwLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xMy5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xMy5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhjODU4MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTEzLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xNC5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xNC5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU5MGYzZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTE0LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xNS5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xNS5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQxMjczZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTE1LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xNi5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xNi5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEwMGI0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTE2LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0yLnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTIucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNWJiZWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0yLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0zLnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTMucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YzgzNWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0zLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS00LnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTQucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ODU0MWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS00LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS01LnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTUucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNTkzY2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS01LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS03LnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTcucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNWNmNWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS03LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS05LnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTkucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5OTQyM2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS05LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08ucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTU0NmRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvY3Vyc29yLnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy9jdXJzb3IucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZWI3MmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvY3Vyc29yLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvZm9udHMuZGlyIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjL2ZvbnRzLmRpcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTI3MThmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjL2ZvbnRzLmRpcgpAQCAtMCwwICsxLDQxMCBAQAorNDA5CisxMHgyMC1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktMQorMTB4MjAtSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS0xMAorMTB4MjAtSVNPODg1OS0xMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS0xMQorMTB4MjAtSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS0xMworMTB4MjAtSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS0xNAorMTB4MjAtSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS0xNQorMTB4MjAtSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS0xNgorMTB4MjAtSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1pc284ODU5LTIKKzEweDIwLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS0zCisxMHgyMC1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktNAorMTB4MjAtSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1pc284ODU5LTUKKzEweDIwLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS03CisxMHgyMC1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktOAorMTB4MjAtSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1pc284ODU5LTkKKzEweDIwLUtPSTgtUi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAta29pOC1yCisxMHgyMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvMTA2NDYtMQorMTJ4MTNqYS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLWphLTEzLTEyMC03NS03NS1jLTEyMC1pc28xMDY0Ni0xCisxMngyNC5wY2YuZ3ogLXNvbnktZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yNC0xNzAtMTAwLTEwMC1jLTEyMC1pc284ODU5LTEKKzEyeDI0cmsucGNmLmd6IC1zb255LWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjQtMTcwLTEwMC0xMDAtYy0xMjAtamlzeDAyMDEuMTk3Ni0wCisxOHgxOGphLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtamEtMTgtMTIwLTEwMC0xMDAtYy0xODAtaXNvMTA2NDYtMQorMTh4MThrby5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLWtvLTE4LTEyMC0xMDAtMTAwLWMtMTgwLWlzbzEwNjQ2LTEKKzR4Ni1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktMQorNHg2LUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktMTAKKzR4Ni1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTEzCis0eDYtSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvODg1OS0xNAorNHg2LUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktMTUKKzR4Ni1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTE2Cis0eDYtSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTIKKzR4Ni1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktMworNHg2LUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvODg1OS00Cis0eDYtSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTUKKzR4Ni1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktNworNHg2LUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvODg1OS04Cis0eDYtSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTkKKzR4Ni1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWtvaTgtcgorNHg2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc28xMDY0Ni0xCis1eDctSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTEKKzV4Ny1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTEwCis1eDctSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS0xMworNXg3LUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzg4NTktMTQKKzV4Ny1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTE1Cis1eDctSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS0xNgorNXg3LUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS0yCis1eDctSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTMKKzV4Ny1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzg4NTktNAorNXg3LUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS01Cis1eDctSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTcKKzV4Ny1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzg4NTktOAorNXg3LUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS05Cis1eDctS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1rb2k4LXIKKzV4Ny5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvMTA2NDYtMQorNXg4LUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS0xCis1eDgtSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS0xMAorNXg4LUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktMTMKKzV4OC1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc284ODU5LTE0Cis1eDgtSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS0xNQorNXg4LUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktMTYKKzV4OC1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktMgorNXg4LUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS0zCis1eDgtSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc284ODU5LTQKKzV4OC1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktNQorNXg4LUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS03Cis1eDgtSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc284ODU5LTgKKzV4OC1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktOQorNXg4LUtPSTgtUi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAta29pOC1yCis1eDgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzEwNjQ2LTEKKzZ4MTAtSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktMQorNngxMC1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktMTAKKzZ4MTAtSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTEzCis2eDEwLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvODg1OS0xNAorNngxMC1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktMTUKKzZ4MTAtSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTE2Cis2eDEwLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTIKKzZ4MTAtSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktMworNngxMC1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvODg1OS00Cis2eDEwLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTUKKzZ4MTAtSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktNworNngxMC1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvODg1OS04Cis2eDEwLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTkKKzZ4MTAtS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWtvaTgtcgorNngxMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc28xMDY0Ni0xCis2eDEyLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTItMTEwLTc1LTc1LWMtNjAtaXNvODg1OS0xCis2eDEyLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktMTAKKzZ4MTItSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTItMTEwLTc1LTc1LWMtNjAtaXNvODg1OS0xMworNngxMi1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1pc284ODU5LTE0Cis2eDEyLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktMTUKKzZ4MTItSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTItMTEwLTc1LTc1LWMtNjAtaXNvODg1OS0xNgorNngxMi1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktMgorNngxMi1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktMworNngxMi1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktNAorNngxMi1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktNQorNngxMi1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktNworNngxMi1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktOAorNngxMi1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktOQorNngxMi1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWtvaTgtcgorNngxMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTItMTEwLTc1LTc1LWMtNjAtaXNvMTA2NDYtMQorNngxMy1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMQorNngxMy1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTEwCis2eDEzLUlTTzg4NTktMTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTEKKzZ4MTMtSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xMworNngxMy1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTE0Cis2eDEzLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTUKKzZ4MTMtSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNgorNngxMy1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMgorNngxMy1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMworNngxMy1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNAorNngxMy1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNQorNngxMy1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNworNngxMy1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktOAorNngxMy1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktOQorNngxMy1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWtvaTgtcgorNngxMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvMTA2NDYtMQorNngxM0ItSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xCis2eDEzQi1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xMAorNngxM0ItSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTMKKzZ4MTNCLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTE0Cis2eDEzQi1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNQorNngxM0ItSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTYKKzZ4MTNCLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMgorNngxM0ItSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0zCis2eDEzQi1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTQKKzZ4MTNCLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNQorNngxM0ItSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS03Cis2eDEzQi1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTgKKzZ4MTNCLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktOQorNngxM0IucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc28xMDY0Ni0xCis2eDEzTy1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMQorNngxM08tSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xMAorNngxM08tSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xMworNngxM08tSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNAorNngxM08tSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNQorNngxM08tSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNgorNngxM08tSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTIKKzZ4MTNPLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0zCis2eDEzTy1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNAorNngxM08tSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTUKKzZ4MTNPLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS03Cis2eDEzTy1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktOQorNngxM08ucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzEwNjQ2LTEKKzZ4OS1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktMQorNng5LUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktMTAKKzZ4OS1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTEzCis2eDktSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvODg1OS0xNAorNng5LUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktMTUKKzZ4OS1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTE2Cis2eDktSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTIKKzZ4OS1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktMworNng5LUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvODg1OS00Cis2eDktSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTUKKzZ4OS1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktNworNng5LUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvODg1OS04Cis2eDktSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTkKKzZ4OS1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWtvaTgtcgorNng5LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc28xMDY0Ni0xCis3eDEzLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTEKKzd4MTMtSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTEwCis3eDEzLUlTTzg4NTktMTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xMQorN3gxMy1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTMKKzd4MTMtSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTE0Cis3eDEzLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xNQorN3gxMy1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTYKKzd4MTMtSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMgorN3gxMy1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0zCis3eDEzLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTQKKzd4MTMtSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktNQorN3gxMy1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS03Cis3eDEzLUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTgKKzd4MTMtSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktOQorN3gxMy1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAta29pOC1yCis3eDEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzEwNjQ2LTEKKzd4MTNCLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xCis3eDEzQi1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTEwCis3eDEzQi1JU084ODU5LTExLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTExCis3eDEzQi1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTEzCis3eDEzQi1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTE0Cis3eDEzQi1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTE1Cis3eDEzQi1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTE2Cis3eDEzQi1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMgorN3gxM0ItSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTMKKzd4MTNCLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS00Cis3eDEzQi1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktNQorN3gxM0ItSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTcKKzd4MTNCLUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS04Cis3eDEzQi1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktOQorN3gxM0IucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzEwNjQ2LTEKKzd4MTNPLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTEKKzd4MTNPLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xMAorN3gxM08tSVNPODg1OS0xMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTExCis3eDEzTy1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTMKKzd4MTNPLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xNAorN3gxM08tSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTE1Cis3eDEzTy1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTYKKzd4MTNPLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTIKKzd4MTNPLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTMKKzd4MTNPLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTQKKzd4MTNPLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTUKKzd4MTNPLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTcKKzd4MTNPLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTkKKzd4MTNPLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzEwNjQ2LTEKKzd4MTQtSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMQorN3gxNC1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMTAKKzd4MTQtSVNPODg1OS0xMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTExCis3eDE0LUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xMworN3gxNC1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMTQKKzd4MTQtSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTE1Cis3eDE0LUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xNgorN3gxNC1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0yCis3eDE0LUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTMKKzd4MTQtSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktNAorN3gxNC1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS01Cis3eDE0LUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTcKKzd4MTQtSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktOAorN3gxNC1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS05Cis3eDE0LUpJU1gwMjAxLjE5NzYtMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1qaXN4MDIwMS4xOTc2LTAKKzd4MTQtS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWtvaTgtcgorN3gxNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc28xMDY0Ni0xCis3eDE0Qi1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMQorN3gxNEItSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xMAorN3gxNEItSVNPODg1OS0xMS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xMQorN3gxNEItSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xMworN3gxNEItSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xNAorN3gxNEItSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xNQorN3gxNEItSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xNgorN3gxNEItSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTIKKzd4MTRCLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0zCis3eDE0Qi1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktNAorN3gxNEItSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTUKKzd4MTRCLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS03Cis3eDE0Qi1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktOAorN3gxNEItSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTkKKzd4MTRCLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc28xMDY0Ni0xCis4eDEzLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTEKKzh4MTMtSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTEwCis4eDEzLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xMworOHgxMy1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTQKKzh4MTMtSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTE1Cis4eDEzLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xNgorOHgxMy1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0yCis4eDEzLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTMKKzh4MTMtSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktNAorOHgxMy1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS01Cis4eDEzLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTcKKzh4MTMtSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktOAorOHgxMy1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS05Cis4eDEzLUtPSTgtUi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1rb2k4LXIKKzh4MTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvMTA2NDYtMQorOHgxM0ItSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTEKKzh4MTNCLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTAKKzh4MTNCLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTMKKzh4MTNCLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTQKKzh4MTNCLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTUKKzh4MTNCLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTYKKzh4MTNCLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0yCis4eDEzQi1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMworOHgxM0ItSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTQKKzh4MTNCLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS01Cis4eDEzQi1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktNworOHgxM0ItSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTgKKzh4MTNCLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS05Cis4eDEzQi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvMTA2NDYtMQorOHgxM08tSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMQorOHgxM08tSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTEwCis4eDEzTy1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTMKKzh4MTNPLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xNAorOHgxM08tSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTE1Cis4eDEzTy1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTYKKzh4MTNPLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTIKKzh4MTNPLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTMKKzh4MTNPLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTQKKzh4MTNPLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTUKKzh4MTNPLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTcKKzh4MTNPLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTkKKzh4MTNPLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzEwNjQ2LTEKKzh4MTYucGNmLmd6IC1zb255LWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTYtMTIwLTEwMC0xMDAtYy04MC1pc284ODU5LTEKKzh4MTZyay5wY2YuZ3ogLXNvbnktZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNi0xMjAtMTAwLTEwMC1jLTgwLWppc3gwMjAxLjE5NzYtMAorOXgxNS1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xCis5eDE1LUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xMAorOXgxNS1JU084ODU5LTExLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMTEKKzl4MTUtSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTEzCis5eDE1LUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xNAorOXgxNS1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMTUKKzl4MTUtSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTE2Cis5eDE1LUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTIKKzl4MTUtSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMworOXgxNS1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS00Cis5eDE1LUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTUKKzl4MTUtSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktNworOXgxNS1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS04Cis5eDE1LUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTkKKzl4MTUtS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWtvaTgtcgorOXgxNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc28xMDY0Ni0xCis5eDE1Qi1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMQorOXgxNUItSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xMAorOXgxNUItSVNPODg1OS0xMS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xMQorOXgxNUItSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xMworOXgxNUItSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xNAorOXgxNUItSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xNQorOXgxNUItSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xNgorOXgxNUItSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTIKKzl4MTVCLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0zCis5eDE1Qi1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktNAorOXgxNUItSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTUKKzl4MTVCLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS03Cis5eDE1Qi1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktOAorOXgxNUItSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTkKKzl4MTVCLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc28xMDY0Ni0xCis5eDE4LUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMQorOXgxOC1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xMAorOXgxOC1JU084ODU5LTExLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xMQorOXgxOC1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xMworOXgxOC1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xNAorOXgxOC1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xNQorOXgxOC1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xNgorOXgxOC1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTIKKzl4MTgtSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0zCis5eDE4LUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktNAorOXgxOC1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTUKKzl4MTgtSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS03Cis5eDE4LUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktOAorOXgxOC1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTkKKzl4MTgtS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAta29pOC1yCis5eDE4LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvMTA2NDYtMQorOXgxOEItSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMQorOXgxOEItSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTEwCis5eDE4Qi1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMTMKKzl4MThCLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xNAorOXgxOEItSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTE1Cis5eDE4Qi1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMTYKKzl4MThCLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTIKKzl4MThCLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTMKKzl4MThCLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTQKKzl4MThCLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTUKKzl4MThCLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTcKKzl4MThCLUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTgKKzl4MThCLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTkKKzl4MThCLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzEwNjQ2LTEKK2FyYWJpYzI0LnBjZi5neiAtYXJhYmljLW5ld3NwYXBlci1tZWRpdW0tci1ub3JtYWwtLTMyLTI0Ni0xMDAtMTAwLXAtMTM3LWlzbzEwNjQ2LTEKK2NsQjZ4MTAucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLWJvbGQtci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzY0Ni4xOTkxLWlydgorY2xCNngxMi5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tYm9sZC1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvNjQ2LjE5OTEtaXJ2CitjbEI4eDEwLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1ib2xkLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsQjh4MTIucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLWJvbGQtci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xCOHgxMy5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tYm9sZC1yLW5vcm1hbC0tMTMtMTMwLTc1LTc1LWMtODAtaXNvNjQ2LjE5OTEtaXJ2CitjbEI4eDE0LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1ib2xkLXItbm9ybWFsLS0xNC0xNDAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsQjh4MTYucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLWJvbGQtci1ub3JtYWwtLTE2LTE2MC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xCOHg4LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1ib2xkLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtODAtaXNvNjQ2LjE5OTEtaXJ2CitjbEI5eDE1LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1ib2xkLXItbm9ybWFsLS0xNS0xNTAtNzUtNzUtYy05MC1pc282NDYuMTk5MS1pcnYKK2NsSTZ4MTIucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1pLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvNjQ2LjE5OTEtaXJ2CitjbEk4eDgucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1pLW5vcm1hbC0tOC04MC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xSNHg2LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc282NDYuMTk5MS1pcnYKK2NsUjV4MTAucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNTAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI1eDYucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTUwLWlzbzY0Ni4xOTkxLWlydgorY2xSNXg4LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc282NDYuMTk5MS1pcnYKK2NsUjZ4MTAucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI2eDEyLUlTTzg4NTktMS5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTEKK2NsUjZ4MTItSVNPODg1OS0xMC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTEwCitjbFI2eDEyLUlTTzg4NTktMTMucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xMworY2xSNngxMi1JU084ODU5LTE0LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTQKK2NsUjZ4MTItSVNPODg1OS0xNS5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTE1CitjbFI2eDEyLUlTTzg4NTktMTYucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNgorY2xSNngxMi1JU084ODU5LTIucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0yCitjbFI2eDEyLUlTTzg4NTktMy5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTMKK2NsUjZ4MTItSVNPODg1OS00LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNAorY2xSNngxMi1JU084ODU5LTUucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS01CitjbFI2eDEyLUlTTzg4NTktNy5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTcKK2NsUjZ4MTItSVNPODg1OS04LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzg4NTktOAorY2xSNngxMi1JU084ODU5LTkucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS05CitjbFI2eDEyLUtPSTgtUi5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1rb2k4LXIKK2NsUjZ4MTIucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvMTA2NDYtMQorY2xSNngxMy5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMy0xMzAtNzUtNzUtYy02MC1pc282NDYuMTk5MS1pcnYKK2NsUjZ4Ni5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNjAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI2eDgucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTYwLWlzbzY0Ni4xOTkxLWlydgorY2xSN3gxMC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy03MC1pc282NDYuMTk5MS1pcnYKK2NsUjd4MTIucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNzAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI3eDE0LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTE0LTE0MC03NS03NS1jLTcwLWlzbzY0Ni4xOTkxLWlydgorY2xSN3g4LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy03MC1pc282NDYuMTk5MS1pcnYKK2NsUjh4MTAucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtODAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI4eDEyLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xSOHgxMy5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMy0xMzAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsUjh4MTQucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTQwLTc1LTc1LWMtODAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI4eDE2LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTE2LTE2MC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xSOHg4LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsUjl4MTUucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTUwLTc1LTc1LWMtOTAtaXNvNjQ2LjE5OTEtaXJ2CitjdS1hbHQxMi5wY2YuZ3ogLW11dHQtY2xlYXJseXUgYWx0ZXJuYXRlIGdseXBocy1tZWRpdW0tci1ub3JtYWwtLTE3LTEyMC0xMDAtMTAwLXAtMTIyLWlzbzEwNjQ2LTEKK2N1LWFyYWJpYzEyLnBjZi5neiAtbXV0dC1jbGVhcmx5dSBhcmFiaWMgZXh0cmEtbWVkaXVtLXItbm9ybWFsLS0xNy0xMjAtMTAwLTEwMC1wLTEwMS1mb250c3BlY2lmaWMtMAorY3UtZGV2bmFnMTIucGNmLmd6IC1tdXR0LWNsZWFybHl1IGRldmFuZ2FyaSBleHRyYS1tZWRpdW0tci1ub3JtYWwtLTE3LTEyMC0xMDAtMTAwLXAtMTA1LWZvbnRzcGVjaWZpYy0wCitjdS1saWcxMi5wY2YuZ3ogLW11dHQtY2xlYXJseXUgbGlnYXR1cmUtbWVkaXVtLXItbm9ybWFsLS0xNy0xMjAtMTAwLTEwMC1wLTE0MS1mb250c3BlY2lmaWMtMAorY3UtcHVhMTIucGNmLmd6IC1tdXR0LWNsZWFybHl1IHB1YS1tZWRpdW0tci1ub3JtYWwtLTE3LTEyMC0xMDAtMTAwLXAtMTEwLWlzbzEwNjQ2LTEKK2N1MTIucGNmLmd6IC1tdXR0LWNsZWFybHl1LW1lZGl1bS1yLW5vcm1hbC0tMTctMTIwLTEwMC0xMDAtcC0xMjMtaXNvMTA2NDYtMQorY3VhcmFiaWMxMi5wY2YuZ3ogLW11dHQtY2xlYXJseXUgYXJhYmljLW1lZGl1bS1yLW5vcm1hbC0tMTctMTIwLTEwMC0xMDAtcC05My1pc28xMDY0Ni0xCitjdWRldm5hZzEyLnBjZi5neiAtbXV0dC1jbGVhcmx5dSBkZXZhbmFnYXJpLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTIwLTkwLTkwLXAtMTA0LWZvbnRzcGVjaWZpYy0wCitjdXJzb3IucGNmLmd6IGN1cnNvcgorZGVjY3Vycy5wY2YuZ3ogZGVjdyRjdXJzb3IKK2RlY3Nlc3MucGNmLmd6IGRlY3ckc2Vzc2lvbgorZ2IxNmZzLnBjZi5neiAtaXNhcy1mYW5nc29uZyB0aS1tZWRpdW0tci1ub3JtYWwtLTE2LTE2MC03Mi03Mi1jLTE2MC1nYjIzMTIuMTk4MC0wCitnYjE2c3QucGNmLmd6IC1pc2FzLXNvbmcgdGktbWVkaXVtLXItbm9ybWFsLS0xNi0xNjAtNzItNzItYy0xNjAtZ2IyMzEyLjE5ODAtMAorZ2IyNHN0LnBjZi5neiAtaXNhcy1zb25nIHRpLW1lZGl1bS1yLW5vcm1hbC0tMjQtMjQwLTcyLTcyLWMtMjQwLWdiMjMxMi4xOTgwLTAKK2hhbmdsZzE2LnBjZi5neiAtZGFld29vLWdvdGhpYy1tZWRpdW0tci1ub3JtYWwtLTE2LTEyMC0xMDAtMTAwLWMtMTYwLWtzYzU2MDEuMTk4Ny0wCitoYW5nbG0xNi5wY2YuZ3ogLWRhZXdvby1taW5jaG8tbWVkaXVtLXItbm9ybWFsLS0xNi0xMjAtMTAwLTEwMC1jLTE2MC1rc2M1NjAxLjE5ODctMAoraGFuZ2xtMjQucGNmLmd6IC1kYWV3b28tbWluY2hvLW1lZGl1bS1yLW5vcm1hbC0tMjQtMTcwLTEwMC0xMDAtYy0yNDAta3NjNTYwMS4xOTg3LTAKK2ppc2thbjE2LnBjZi5neiAtamlzLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTYtMTUwLTc1LTc1LWMtMTYwLWppc3gwMjA4LjE5ODMtMAoramlza2FuMjQucGNmLmd6IC1qaXMtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yNC0yMzAtNzUtNzUtYy0yNDAtamlzeDAyMDguMTk4My0wCitrMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtMTQwLWppc3gwMjA4LjE5ODMtMAorbWljcm8ucGNmLmd6IG1pY3JvCituaWwyLnBjZi5neiAtbWlzYy1uaWwtbWVkaXVtLXItbm9ybWFsLS0yLTIwLTc1LTc1LWMtMTAtbWlzYy1mb250c3BlY2lmaWMKK29sY3Vyc29yLnBjZi5neiAtc3VuLW9wZW4gbG9vayBjdXJzb3ItLS0tLTEyLTEyMC03NS03NS1wLTE2MC1zdW5vbGN1cnNvci0xCitvbGdsMTAucGNmLmd6IC1zdW4tb3BlbiBsb29rIGdseXBoLS0tLS0xMC0xMDAtNzUtNzUtcC0xMDEtc3Vub2xnbHlwaC0xCitvbGdsMTIucGNmLmd6IC1zdW4tb3BlbiBsb29rIGdseXBoLS0tLS0xMi0xMjAtNzUtNzUtcC0xMTMtc3Vub2xnbHlwaC0xCitvbGdsMTQucGNmLmd6IC1zdW4tb3BlbiBsb29rIGdseXBoLS0tLS0xNC0xNDAtNzUtNzUtcC0xMjgtc3Vub2xnbHlwaC0xCitvbGdsMTkucGNmLmd6IC1zdW4tb3BlbiBsb29rIGdseXBoLS0tLS0xOS0xOTAtNzUtNzUtcC0xNTQtc3Vub2xnbHlwaC0xCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJkbXhfMS4xLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJkbXhfMS4xLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYyM2NlZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYmRteF8xLjEuMy5iYgpAQCAtMCwwICsxLDIwIEBACityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJETVg6IERpc3RyaWJ1dGVkIE11bHRpaGVhZCBYIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGUgRE1YIGV4dGVuc2lvbiBwcm92aWRlcyBzdXBwb3J0IGZvciBjb21tdW5pY2F0aW9uIHdpdGggXAorYW5kIGNvbnRyb2wgb2YgWGRteCgxKSBzZXJ2ZXIuIEF0dHJpYnV0ZXMgb2YgdGhlIFhkbXgoMSkgc2VydmVyIGFuZCBvZiBcCit0aGUgYmFjay1lbmQgc2NyZWVucyBhdHRhY2hlZCB0byB0aGUgc2VydmVyIGNhbiBiZSBxdWVyaWVkIGFuZCBtb2RpZmllZCBcCit2aWEgdGhpcyBwcm90b2NvbC4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTNjMzQ5OTIzMWE4MDM1ZWZkMGUwMDRjZmJkM2I3MmEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2RteC5jO2VuZGxpbmU9MzM7bWQ1PWM0M2YxOWFmMDNjN2M4NjE5Y2FkYzk3MjRlZDlhZmUxIgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IGRteHByb3RvIgorCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYmE5ODNlYmE1YTlmMDVkMTUyYTA3MjViOGU4NjMxNTEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzk3ZGEzNmQyZTU2YTJkN2I2ZTRmODk2MjQxNzg1YWNjOTVlOTdlYjk1NTc0NjVmZDY2YmEyYTE1NWE3YjIwMSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGliZm9udGVuY18xLjEuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYmZvbnRlbmNfMS4xLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE4MWYwNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYmZvbnRlbmNfMS4xLjMuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJYIGZvbnQgZW5jb2RpbmcgbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAibGliZm9udGVuYyBpcyBhIGxpYnJhcnkgd2hpY2ggaGVscHMgZm9udCBsaWJyYXJpZXMgXAorcG9ydGFibHkgZGV0ZXJtaW5lIGFuZCBkZWFsIHdpdGggZGlmZmVyZW50IGVuY29kaW5ncyBvZiBmb250cy4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk2MjU0YzIwYWI4MWM2M2U2NWIyNmYwZGJjZDRhMWMxIgorCitERVBFTkRTICs9ICJ6bGliIHhwcm90byBmb250LXV0aWwiCitQRSA9ICIxIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworU1JDX1VSSVttZDVzdW1dID0gIjA5MjA5MjRjM2E5ZWJjMTI2NTUxN2JkZDJmOWZkZTUwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcwNTg4OTMwZTZmYzk1NDJmZjM4ZTA4ODQ3NzhmYmM2ZTZmZWJmMjFhZGJhYjkyZmQ4ZjUyNGZlNjBhZWZkMjEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJpY2VfMS4wLjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJpY2VfMS4wLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA0OWI3ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYmljZV8xLjAuOS5iYgpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIklDRTogSW50ZXItQ2xpZW50IEV4Y2hhbmdlIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBJbnRlci1DbGllbnQgRXhjaGFuZ2UgKElDRSkgcHJvdG9jb2wgcHJvdmlkZXMgYSBcCitnZW5lcmljIGZyYW1ld29yayBmb3IgYnVpbGRpbmcgcHJvdG9jb2xzIG9uIHRvcCBvZiByZWxpYWJsZSwgYnl0ZS1zdHJlYW0gXAordHJhbnNwb3J0IGNvbm5lY3Rpb25zLiBJdCBwcm92aWRlcyBiYXNpYyBtZWNoYW5pc21zIGZvciBzZXR0aW5nIHVwIGFuZCBcCitzaHV0dGluZyBkb3duIGNvbm5lY3Rpb25zLCBmb3IgcGVyZm9ybWluZyBhdXRoZW50aWNhdGlvbiwgZm9yIFwKK25lZ290aWF0aW5nIHZlcnNpb25zLCBhbmQgZm9yIHJlcG9ydGluZyBlcnJvcnMuICIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDE2MmIxYjNjNmZhODEyZGE5ZDgwNGRjZjg1ODRhOTMiCisKK0RFUEVORFMgKz0gInhwcm90byB4dHJhbnMiCitQUk9WSURFUyA9ICJpY2UiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliSUNFIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworU1JDX1VSSVttZDVzdW1dID0gImFkZGZiMWU4OTdjYTgwNzk1MzE2NjljN2M3NzExNzI2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhmNzAzMmYyYzFjNjQzNTJiNTQyM2Y2YjQ4YThlYmRjMzM5Y2M2MzA2NGFmMzRkNjZhNmM5YWE3OTc1OWUyMDIiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2FyYzRdID0gImFjX2N2X2xpYl9ic2RfYXJjNHJhbmRvbV9idWY9eWVzLGFjX2N2X2xpYl9ic2RfYXJjNHJhbmRvbV9idWY9bm8sbGliYnNkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDEtSW5jbHVkZS1jb25maWcuaC1iZWZvcmUtYW55dGhpbmctZWxzZS1pbi0uYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDAxLUluY2x1ZGUtY29uZmlnLmgtYmVmb3JlLWFueXRoaW5nLWVsc2UtaW4tLmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkyZmMwZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDAxLUluY2x1ZGUtY29uZmlnLmgtYmVmb3JlLWFueXRoaW5nLWVsc2UtaW4tLmMucGF0Y2gKQEAgLTAsMCArMSwxODcgQEAKK0Zyb20gYjE0Njk2YTU1Nzk2ZTczOTYyNGJiZGE0Zjc3MjQyNzAzMmVmZmYyYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1bGllbiBDcmlzdGF1IDxqY3Jpc3RhdUBkZWJpYW4ub3JnPgorRGF0ZTogU3VuLCAyNiBBcHIgMjAxNSAxNToyMDo1NyArMDIwMAorU3ViamVjdDogW1BBVENIIDEvNF0gSW5jbHVkZSBjb25maWcuaCBiZWZvcmUgYW55dGhpbmcgZWxzZSBpbiAqLmMKKworRGViaWFuIGJ1ZyM3NDkwMDggPGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc0OTAwOD4KKworUmVwb3J0ZWQtYnk6IE1pY2hhZWwgVGF1dHNjaG5pZyA8bXRAZGViaWFuLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEp1bGllbiBDcmlzdGF1IDxqY3Jpc3RhdUBkZWJpYW4ub3JnPgorUmV2aWV3ZWQtYnk6IEFsYW4gQ29vcGVyc21pdGggPGFsYW4uY29vcGVyc21pdGhAb3JhY2xlLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisgc3JjL2NvbW1vbl9jYXBhYmlsaXR5LmMgIHwgMyArKysKKyBzcmMvY29tbW9uX2luaXQuYyAgICAgICAgfCAzICsrKworIHNyYy9jb21tb25faW50ZXJmYWNlLmMgICB8IDMgKysrCisgc3JjL2NvbW1vbl9pby5jICAgICAgICAgIHwgMyArKysKKyBzcmMvY29tbW9uX2l0ZXJhdG9yLmMgICAgfCAzICsrKworIHNyYy9jb21tb25fbWFwLmMgICAgICAgICB8IDMgKysrCisgc3JjL2NvbW1vbl92Z2FhcmJfc3R1Yi5jIHwgMyArKysKKyBzcmMvbGludXhfZGV2bWVtLmMgICAgICAgfCA1ICsrKy0tCisgc3JjL29wZW5ic2RfcGNpLmMgICAgICAgIHwgMyArKysKKyBzcmMvc29seF9kZXZmcy5jICAgICAgICAgfCAzICsrKworIHNyYy94ODZfcGNpLmMgICAgICAgICAgICB8IDQgKysrLQorIDExIGZpbGVzIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uX2NhcGFiaWxpdHkuYyBiL3NyYy9jb21tb25fY2FwYWJpbGl0eS5jCitpbmRleCA0ODg3NDNkLi4xNWQzOTVkIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbl9jYXBhYmlsaXR5LmMKKysrKyBiL3NyYy9jb21tb25fY2FwYWJpbGl0eS5jCitAQCAtMzEsNiArMzEsOSBAQAorICAqCisgICogXGF1dGhvciBJYW4gUm9tYW5pY2sgPGlkckB1cy5pYm0uY29tPgorICAqLworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorIAorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uX2luaXQuYyBiL3NyYy9jb21tb25faW5pdC5jCitpbmRleCBiMWMwYzNlLi5mN2I1OWJkIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbl9pbml0LmMKKysrKyBiL3NyYy9jb21tb25faW5pdC5jCitAQCAtMjgsNiArMjgsOSBAQAorICAqCisgICogXGF1dGhvciBJYW4gUm9tYW5pY2sgPGlkckB1cy5pYm0uY29tPgorICAqLworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorIAorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uX2ludGVyZmFjZS5jIGIvc3JjL2NvbW1vbl9pbnRlcmZhY2UuYworaW5kZXggNTk3NzhjZi4uY2I5NWU5MCAxMDA2NDQKKy0tLSBhL3NyYy9jb21tb25faW50ZXJmYWNlLmMKKysrKyBiL3NyYy9jb21tb25faW50ZXJmYWNlLmMKK0BAIC0yOCw2ICsyOCw5IEBACisgICoKKyAgKiBcYXV0aG9yIElhbiBSb21hbmljayA8aWRyQHVzLmlibS5jb20+CisgICovCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgCisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uX2lvLmMgYi9zcmMvY29tbW9uX2lvLmMKK2luZGV4IGY1YzllNDUuLmU5NTg2YWQgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uX2lvLmMKKysrKyBiL3NyYy9jb21tb25faW8uYworQEAgLTIyLDYgKzIyLDkgQEAKKyAgKiBBdXRob3I6CisgICoJQWRhbSBKYWNrc29uIDxhamF4QHJlZGhhdC5jb20+CisgICovCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgCisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uX2l0ZXJhdG9yLmMgYi9zcmMvY29tbW9uX2l0ZXJhdG9yLmMKK2luZGV4IGNjZjY1NmQuLjJiZWIxODAgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uX2l0ZXJhdG9yLmMKKysrKyBiL3NyYy9jb21tb25faXRlcmF0b3IuYworQEAgLTI4LDYgKzI4LDkgQEAKKyAgKgorICAqIFxhdXRob3IgSWFuIFJvbWFuaWNrIDxpZHJAdXMuaWJtLmNvbT4KKyAgKi8KKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorZGlmZiAtLWdpdCBhL3NyYy9jb21tb25fbWFwLmMgYi9zcmMvY29tbW9uX21hcC5jCitpbmRleCA4NzU3MTUxLi5mMTg1NGJiIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbl9tYXAuYworKysrIGIvc3JjL2NvbW1vbl9tYXAuYworQEAgLTIxLDYgKzIxLDkgQEAKKyAgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAqLworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorIAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL21tYW4uaD4KK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uX3ZnYWFyYl9zdHViLmMgYi9zcmMvY29tbW9uX3ZnYWFyYl9zdHViLmMKK2luZGV4IDkzOTQyNzMuLmMxNzA4ZjYgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uX3ZnYWFyYl9zdHViLmMKKysrKyBiL3NyYy9jb21tb25fdmdhYXJiX3N0dWIuYworQEAgLTIzLDYgKzIzLDkgQEAKKyAgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgICoKKyAgKi8KKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSAicGNpYWNjZXNzLmgiCitkaWZmIC0tZ2l0IGEvc3JjL2xpbnV4X2Rldm1lbS5jIGIvc3JjL2xpbnV4X2Rldm1lbS5jCitpbmRleCAxMGUzYmRlLi4wZDA1NjdjIDEwMDY0NAorLS0tIGEvc3JjL2xpbnV4X2Rldm1lbS5jCisrKysgYi9zcmMvbGludXhfZGV2bWVtLmMKK0BAIC0zMiw4ICszMiw5IEBACisgICoKKyAgKiBcYXV0aG9yIElhbiBSb21hbmljayA8aWRyQHVzLmlibS5jb20+CisgICovCistCistI2RlZmluZSBfR05VX1NPVVJDRQorKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorIAorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CitkaWZmIC0tZ2l0IGEvc3JjL29wZW5ic2RfcGNpLmMgYi9zcmMvb3BlbmJzZF9wY2kuYworaW5kZXggNGQxYjVjZC4uYjhjZTMxOCAxMDA2NDQKKy0tLSBhL3NyYy9vcGVuYnNkX3BjaS5jCisrKysgYi9zcmMvb3BlbmJzZF9wY2kuYworQEAgLTEzLDYgKzEzLDkgQEAKKyAgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgICovCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgCisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KK2RpZmYgLS1naXQgYS9zcmMvc29seF9kZXZmcy5jIGIvc3JjL3NvbHhfZGV2ZnMuYworaW5kZXggZjU3MjM5My4uY2Y5NjQ2NyAxMDA2NDQKKy0tLSBhL3NyYy9zb2x4X2RldmZzLmMKKysrKyBiL3NyYy9zb2x4X2RldmZzLmMKK0BAIC0yNSw2ICsyNSw5IEBACisgLyoKKyAgKiBTb2xhcmlzIGRldmZzIGludGVyZmFjZXMKKyAgKi8KKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZ3MuaD4KK2RpZmYgLS1naXQgYS9zcmMveDg2X3BjaS5jIGIvc3JjL3g4Nl9wY2kuYworaW5kZXggNDljMWNhYi4uMzJkYWEwNCAxMDA2NDQKKy0tLSBhL3NyYy94ODZfcGNpLmMKKysrKyBiL3NyYy94ODZfcGNpLmMKK0BAIC0xOCw4ICsxOCwxMCBAQAorICAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAgKi8KKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKy0jZGVmaW5lIF9HTlVfU09VUkNFCisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDItRml4LXF1b3RpbmctaXNzdWUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3MvMDAwMi1GaXgtcXVvdGluZy1pc3N1ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmQ2OWE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDItRml4LXF1b3RpbmctaXNzdWUucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSA3NjVlMGEzOGNiOGM0MGY4ODY1YWY1Y2IzNTZmZmU2MDM5ZmZiMDhmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGhvbWFzIEtsYXVzbmVyIDx3aXpATmV0QlNELm9yZz4KK0RhdGU6IFN1biwgMjIgTWFyIDIwMTUgMjE6Mzg6MjMgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzRdIEZpeCBxdW90aW5nIGlzc3VlLgorCittNCBoYXMgJ1tdJyBhcyBxdW90aW5nIGNoYXJhY3RlcnMsIHNvIGlmIHdlIHdhbnQgJ1tdJyB0bworZW5kIHVwIGluIHRoZSBjb25maWd1cmUgc2NyaXB0LCB3ZSBuZWVkIHRvIHF1b3RlIHRoZW0gYWdhaW4uCisKK1JlcG9ydGVkIGJ5IEdyZWcgVHJveGVsIDxnZHRAaXIuYmJuLmNvbT4uCisKK1NpZ25lZC1vZmYtYnk6IFRob21hcyBLbGF1c25lciA8d2l6QE5ldEJTRC5vcmc+CitSZXZpZXdlZC1ieTogQWxhbiBDb29wZXJzbWl0aCA8YWxhbi5jb29wZXJzbWl0aEBvcmFjbGUuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKyBjb25maWd1cmUuYWMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGU2N2U5ZTEuLjg4ODMzMGIgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTc2LDcgKzc2LDcgQEAgY2FzZSAkaG9zdF9vcyBpbgorIAkJOzsKKyAJKm5ldGJzZCopCisgCQljYXNlICRob3N0IGluCistCQkqaVszLTldODYqKQorKwkJKmlbWzMtOV1dODYqKQorIAkJCVBDSUFDQ0VTU19MSUJTPSIkUENJQUNDRVNTX0xJQlMgLWxpMzg2IgorIAkJCTs7CisgCQkqeDg2XzY0KnwqYW1kNjQqKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3MvMDAwMy1saW51eF9zeXNmcy5jLUluY2x1ZGUtbGltaXRzLmgtZm9yLVBBVEhfTUFYLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDMtbGludXhfc3lzZnMuYy1JbmNsdWRlLWxpbWl0cy5oLWZvci1QQVRIX01BWC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTEzYzhlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDMtbGludXhfc3lzZnMuYy1JbmNsdWRlLWxpbWl0cy5oLWZvci1QQVRIX01BWC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDZiZDJmN2Y5MmVhZTcxMzY2M2Y0ZTEzZjZlMmNiMjM1MjY2MDdiOGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGZWxpeCBKYW5kYSA8ZmVsaXguamFuZGFAcG9zdGVvLmRlPgorRGF0ZTogRnJpLCAxIE1heSAyMDE1IDE2OjM2OjUwICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMy80XSBsaW51eF9zeXNmcy5jOiBJbmNsdWRlIDxsaW1pdHMuaD4gZm9yIFBBVEhfTUFYCisKK0ZpeGVzIGNvbXBpbGF0aW9uIHdpdGggbXVzbCBsaWJjLgorCitUZXN0ZWQtYnk6IEJlcm5kIEt1aGxzIDxiZXJuZC5rdWhsc0B0LW9ubGluZS5kZT4KK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEphbmRhIDxmZWxpeC5qYW5kYUBwb3N0ZW8uZGU+CitSZXZpZXdlZC1ieTogQWxhbiBDb29wZXJzbWl0aCA8YWxhbi5jb29wZXJzbWl0aEBvcmFjbGUuY29tPgorU2lnbmVkLW9mZi1ieTogQWxhbiBDb29wZXJzbWl0aCA8YWxhbi5jb29wZXJzbWl0aEBvcmFjbGUuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKyBzcmMvbGludXhfc3lzZnMuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2xpbnV4X3N5c2ZzLmMgYi9zcmMvbGludXhfc3lzZnMuYworaW5kZXggNTBkOTRjZi4uM2Y5NWU1MyAxMDA2NDQKKy0tLSBhL3NyYy9saW51eF9zeXNmcy5jCisrKysgYi9zcmMvbGludXhfc3lzZnMuYworQEAgLTQ1LDYgKzQ1LDcgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisrI2luY2x1ZGUgPGxpbWl0cy5oPgorICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorICNpbmNsdWRlIDxkaXJlbnQuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDQtRG9uLXQtaW5jbHVkZS1zeXMtaW8uaC1vbi1hcm0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3MvMDAwNC1Eb24tdC1pbmNsdWRlLXN5cy1pby5oLW9uLWFybS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTMyODU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDQtRG9uLXQtaW5jbHVkZS1zeXMtaW8uaC1vbi1hcm0ucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSBiNmRmNTIwMjMwNmJkNzExNThiNDgyZjI1Y2EyZTY5MTk2NDVkNGRkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgNCBKdW4gMjAxNSAyMDo1NTowNiAtMDcwMAorU3ViamVjdDogW1BBVENIIDQvNF0gRG9uJ3QgaW5jbHVkZSBzeXMvaW8uaCBvbiBhcm0KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBzcmMvbGludXhfc3lzZnMuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9saW51eF9zeXNmcy5jIGIvc3JjL2xpbnV4X3N5c2ZzLmMKK2luZGV4IDNmOTVlNTMuLjFlM2FhZDMgMTAwNjQ0CistLS0gYS9zcmMvbGludXhfc3lzZnMuYworKysrIGIvc3JjL2xpbnV4X3N5c2ZzLmMKK0BAIC01MCw3ICs1MCw3IEBACisgI2luY2x1ZGUgPGRpcmVudC5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorIAorLSNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hcm1fXykKKysjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorICNpbmNsdWRlIDxzeXMvaW8uaD4KKyAjZWxzZQorICNkZWZpbmUgaW5iKHgpIC0xCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzc18wLjEzLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3NfMC4xMy40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYTZhNjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3NfMC4xMy40LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiR2VuZXJpYyBQQ0kgYWNjZXNzIGxpYnJhcnkgZm9yIFgiCisKK0RFU0NSSVBUSU9OID0gImxpYnBjaWFjY2VzcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IGZvciBYIHRvIGFjY2VzcyB0aGUgXAorUENJIGJ1cyBhbmQgZGV2aWNlcyBpbiBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHdheS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitTUkNfVVJJICs9ICJcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1JbmNsdWRlLWNvbmZpZy5oLWJlZm9yZS1hbnl0aGluZy1lbHNlLWluLS5jLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAyLUZpeC1xdW90aW5nLWlzc3VlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAzLWxpbnV4X3N5c2ZzLmMtSW5jbHVkZS1saW1pdHMuaC1mb3ItUEFUSF9NQVgucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDQtRG9uLXQtaW5jbHVkZS1zeXMtaW8uaC1vbi1hcm0ucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYWNlNzhhZWM3OTliMWNmNmRmYWVhNTVkMzg3OWVkOWYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDdmODY0NjU0NTYxZTRhYzg2MjlhMGVmOWM4ZjA3ZmJjMWY4NTkyZDFiNmM0MTg0MzE1OTNlOWJhMmNmMmZjZiIKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yNzdhYWRhNTIyMmI5YTIyZmJmMzQ3MWZmMzY4NzA2OCIKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnB0aHJlYWQtc3R1YnNfMC4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicHRocmVhZC1zdHVic18wLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUxNGM3ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnB0aHJlYWQtc3R1YnNfMC4zLmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSB0aGF0IHByb3ZpZGVzIHdlYWsgYWxpYXNlcyBmb3IgcHRocmVhZCBmdW5jdGlvbnMiCitERVNDUklQVElPTiA9ICJUaGlzIGxpYnJhcnkgcHJvdmlkZXMgd2VhayBhbGlhc2VzIGZvciBwdGhyZWFkIGZ1bmN0aW9ucyBcCitub3QgcHJvdmlkZWQgaW4gbGliYyBvciBvdGhlcndpc2UgYXZhaWxhYmxlIGJ5IGRlZmF1bHQuIgorSE9NRVBBR0UgPSAiaHR0cDovL3hjYi5mcmVlZGVza3RvcC5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9idWdsaXN0LmNnaT9wcm9kdWN0PVhDQiIKK1NFQ1RJT04gPSAieDExL2xpYnMiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTZlZGMxZmVhMDNkOTU5ZjBjMmQ3NDNmZTVjYTc0NmFkIgorCisjREVQRU5EUyA9ICJ4Y2ItcHJvdG8geHByb3RvIGxpYnhhdSBsaWJ4c2x0LW5hdGl2ZSIKKyMgREVQRU5EUyArPSAieHNsdHByb2MtbmF0aXZlIGdwZXJmLW5hdGl2ZSIKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworU1JDX1VSSSA9ICJodHRwOi8veGNiLmZyZWVkZXNrdG9wLm9yZy9kaXN0L2xpYnB0aHJlYWQtc3R1YnMtJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gImU4ZmEzMWI0MmUxM2Y4N2U4ZjVhN2EyYjczMWRiN2VlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjM1YjZkNTRlM2NjNmYzYmEyODA2MWRhODFhZjY0YjlhOTJiN2I3NTczMTkwOTgxNzI0ODhhNjYwZTNkODcyOTkiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorUlJFQ09NTUVORFNfJHtQTn0tZGJnID0gIiR7UE59LWRldiAoPSAke0VYVEVORFBLR1Z9KSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlic21fMS4yLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJzbV8xLjIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTI1MTM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlic21fMS4yLjIuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJTTTogU2Vzc2lvbiBNYW5hZ2VtZW50IGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBTZXNzaW9uIE1hbmFnZW1lbnQgTGlicmFyeSAoU01saWIpIGlzIGEgbG93LWxldmVsIFwiQ1wiIFwKK2xhbmd1YWdlIGludGVyZmFjZSB0byBYU01QLiAgVGhlIHB1cnBvc2Ugb2YgdGhlIFggU2Vzc2lvbiBNYW5hZ2VtZW50IFwKK1Byb3RvY29sIChYU01QKSBpcyB0byBwcm92aWRlIGEgdW5pZm9ybSBtZWNoYW5pc20gZm9yIHVzZXJzIHRvIHNhdmUgYW5kIFwKK3Jlc3RvcmUgdGhlaXIgc2Vzc2lvbnMuICBBIHNlc3Npb24gaXMgYSBncm91cCBvZiBjbGllbnRzLCBlYWNoIG9mIHdoaWNoIFwKK2hhcyBhIHBhcnRpY3VsYXIgc3RhdGUuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jMGZiMzdmNDRlMDJiZGJkZTgwNTQ2MDI0NDAwNzI4ZCIKKworREVQRU5EUyArPSAibGliaWNlIHhwcm90byB4dHJhbnMiCisKKyMgbGliU00gY2FuIHdvcmsgd2l0aG91dCBsaWJ1dWlkLCB3ZSBleHBsaWNpdGx5IGRpc2FibGUgaXQgdG8gYnJlYWsgdGhlIGZvbGxvd2luZyBjaXJjdWxhciBkZXBlbmRlbmN5CisjIHdoZW4gRElTVFJPX0ZFQVRVUkVTIGNvbnRhaW5zICdzeXN0ZW1kJyBhbmQgJ3gxMScuCisjIHN5c3RlbWQgLT4gZGJ1cyAtPiBsaWJzbSAtPiB1dGlsLWxpbnV4IC0+IHN5c3RlbWQKK0VYVFJBX09FQ09ORiArPSAiLS13aXRob3V0LWxpYnV1aWQiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliU00iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDk5YTc3NzNjNjVhYmE1MTM2MDlmZTY1MTg1M2M1ZjMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGJhY2E4YzlmNWQ5MzQ0NTBhNzA4OTZjNGFkMzhkMDY0NzU1MjEyNTVjYTYzYjcxN2E2NTEwZmRiNmUyODdiZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS1kaWV0XzEuNi4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExLWRpZXRfMS42LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBkMDE0OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS1kaWV0XzEuNi4zLmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgbGlieDExLmluYworCitERVNDUklQVElPTiArPSAiIFN1cHBvcnQgZm9yIFhDTVMgYW5kIFhMT0NBTEUgaXMgZGlzYWJsZWQgaW4gXAordGhpcyB2ZXJzaW9uLiIKKworU1JDX1VSSSArPSAiZmlsZTovL1gxOE5DTVNzdHVicy5kaWZmIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtZGlzYWJsZS14bG9jYWxlLmRpZmYgXAorICAgICAgICAgICAgZmlsZTovL2ZpeC11dGY4LXdyb25nLWRlZmluZS5wYXRjaCBcCisgICAgICAgICAgICIKKworUlBST1ZJREVTXyR7UE59LWRldiA9ICJsaWJ4MTEtZGV2IgorUlBST1ZJREVTXyR7UE59LWxvY2FsZSA9ICJsaWJ4MTEtbG9jYWxlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmUzNmI3M2Y4YTQyMTQzMTQyZGRhODEyOWYwMmU0ZTAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2YzMWE3YzM5ZjJmNTJlOGViZDBkYjk1NjQwMzg0ZTYzNDUxZjliMDE0ZWVkMmJiN2Y1ZGUwM2U4YWRjODExMSIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUteGxvY2FsZSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNGVhZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEuaW5jCkBAIC0wLDAgKzEsNDEgQEAKK1NVTU1BUlkgPSAiWGxpYjogQyBMYW5ndWFnZSBYIEludGVyZmFjZSBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgYSBjbGllbnQgaW50ZXJmYWNlIHRvIHRoZSBYIFdpbmRvdyBcCitTeXN0ZW0sIG90aGVyd2lzZSBrbm93biBhcyAnWGxpYicuICBJdCBwcm92aWRlcyBhIGNvbXBsZXRlIEFQSSBmb3IgdGhlIFwKK2Jhc2ljIGZ1bmN0aW9ucyBvZiB0aGUgd2luZG93IHN5c3RlbS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitpbmhlcml0IHNpdGVpbmZvCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L2xpYngxMToiCisKK1BFID0gIjEiCisKK1BST1ZJREVTID0gInZpcnR1YWwvbGlieDExIgorCitYT1JHX1BOID0gImxpYlgxMSIKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlICYgQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTcyMjU1ZGVlNjZiYjAxNTE0MzViMmQ1ZDcwOWZjZjciCisKK0RFUEVORFMgKz0gInhwcm90byB4ZXh0cHJvdG8geHRyYW5zIGxpYnhjYiBrYnByb3RvIGlucHV0cHJvdG8iCitERVBFTkRTICs9ICJ4cHJvdG8tbmF0aXZlIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC1rZXlzeW1kZWZkaXI9JHtTVEFHSU5HX0lOQ0RJUn0vWDExLyAtLWRpc2FibGUteGY4NmJpZ2ZvbnQiCitFWFRSQV9PRU1BS0UgKz0gJ0NXQVJORkxBR1M9IiInCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ4Y21zIgorUEFDS0FHRUNPTkZJR1t4Y21zXSA9ICItLWVuYWJsZS14Y21zLC0tZGlzYWJsZS14Y21zIgorCisjIHNyYy91dGlsL21ha2VrZXlzIGlzIGJ1aWx0IG5hdGl2ZWx5IGJ1dCBuZWVkcyAtRF9HTlVfU09VUkNFIGRlZmluZWQuCitDUFBGTEFHU19GT1JfQlVJTEQgKz0gIi1EX0dOVV9TT1VSQ0UiCisKK1BBQ0tBR0VTID0rICIke1BOfS14Y2IiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L1gxMS9YS2V5c3ltREIgJHtkYXRhZGlyfS9YMTEvWEVycm9yREIgJHtkYXRhZGlyfS9YMTEvWGNtcy50eHQiCitGSUxFU18ke1BOfS14Y2IgKz0gIiR7bGliZGlyfS9saWJYMTEteGNiLnNvLioiCitGSUxFU18ke1BOfS1sb2NhbGUgKz0gIiR7ZGF0YWRpcn0vWDExL2xvY2FsZSAke2xpYmRpcn0vWDExL2xvY2FsZSIKKworIyBNdWx0aXBsZSBsaWJ4MTEgZGVyaXZhdGl2ZXMgZnJvbSBmcm9tIHRoaXMgZmlsZSBhbmQgYXJlIHNlbGVjdGVkIGJ5IHZpcnR1YWwvbGlieDExCisjIEEgd29ybGQgYnVpbGQgc2hvdWxkIG9ubHkgYnVpbGQgdGhlIGNvcnJlY3QgdmVyc2lvbiwgbm90IGFsbCBvZiB0aGVtLgorRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvWDE4TkNNU3N0dWJzLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvWDE4TkNNU3N0dWJzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ0Y2VkYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9YMThOQ01Tc3R1YnMuZGlmZgpAQCAtMCwwICsxLDUyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KK0luZGV4OiBsaWJYMTEtMS4zL3NyYy9pbUNvbnYuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYlgxMS0xLjMub3JpZy9zcmMvaW1Db252LmMKKysrKyBsaWJYMTEtMS4zL3NyYy9pbUNvbnYuYworQEAgLTgzLDYgKzgzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBTdWJzdFJlYyBTdWJzdFRhYmxlWworICAqIGZyb20gVUNTIGNoYXIgdG8gc3BlY2lmaWVkIGNoYXJzZXQgY2hhci4KKyAgKiBUaGlzIGNvbnZlcnRlciBpcyBuZWVkZWQgZm9yIF9YaW1HZXRDaGFyQ29kZSBzdWJyb3V0aW5lLgorICAqLworKyNpZmRlZiBYTE9DQUxFCisgWFBvaW50ZXIKKyBfWGltR2V0TG9jYWxlQ29kZSAoCisgICAgIF9YY29uc3QgY2hhcioJZW5jb2RpbmdfbmFtZSkKK0BAIC05Niw2ICs5Nyw3IEBAIF9YaW1HZXRMb2NhbGVDb2RlICgKKyAgICAgfQorICAgICByZXR1cm4gY3Z0OworIH0KKysjZW5kaWYKKyAKKyAvKgorICAqIFJldHVybnMgdGhlIGxvY2FsZSBkZXBlbmRlbnQgcmVwcmVzZW50YXRpb24gb2YgYSBrZXlzeW0uCitAQCAtMTA2LDYgKzEwOCw3IEBAIF9YaW1HZXRMb2NhbGVDb2RlICgKKyAgKiB0ZXJtaW5hdGluZyBOVUwgYnl0ZS4gUmV0dXJuIDAgaWYgdGhlIGtleXN5bSBpcyBub3QgcmVwcmVzZW50YWJsZSBpbiB0aGUKKyAgKiBsb2NhbGUKKyAgKi8KKysjaWZkZWYgWExPQ0FMRQorIC8qQVJHU1VTRUQqLworIGludAorIF9YaW1HZXRDaGFyQ29kZSAoCitAQCAtMTM1LDYgKzEzOCw3IEBAIF9YaW1HZXRDaGFyQ29kZSAoCisgICAgICAgICBidWZbY291bnRdPSAnXDAnOworICAgICByZXR1cm4gY291bnQ7CisgfQorKyNlbmRpZgorIAorICNpZmRlZiBYS0IKKyBzdGF0aWMgaW50IGxvb2t1cF9zdHJpbmcoCitJbmRleDogbGliWDExLTEuMy9zcmMvWDE4TkNNU3N0dWJzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBsaWJYMTEtMS4zL3NyYy9YMThOQ01Tc3R1YnMuYworQEAgLTAsMCArMSw0MjggQEAKKysvKgorKyAqIFgxOE5DTVNzdHVicy5jCisrICogLSBQcm92aWRlcyBzdHVicyBhbmQgZHVtbXkgZnVuY3MgbmVlZGVkIHdoZW4gWGNtcyBhbmQgWExvY2FsZSBzdHVmZiByZW1vdmVkCisrICoKKysgKiBDb3B5cmlnaHQgqSAyMDAzIE1hdHRoZXcgQWxsdW0KKysgKgorKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cworKyAqIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0CisrICogdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0CisrICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE1hdHRoZXcgQWxsdW0gbm90IGJlIHVzZWQgaW4KKysgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQKKysgKiBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgS2VpdGggUGFja2FyZCBhbmQgQ29tcGFxIG1ha2VzIG5vCisrICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0CisrICogaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKysgKgorKyAqIE1BVFRIRVcgQUxMVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgCisrICogU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgCisrICogSU4gTk8gRVZFTlQgU0hBTEwgS0VJVEggUEFDS0FSRCBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUgorKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLAorKyAqIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKKysgKiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCisrICogUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKysgKi8KKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgIlhsaWJpbnQuaCIKKysjaW5jbHVkZSAiWGxjaW50LmgiCisrI2luY2x1ZGUgPFgxMS9YbG9jYWxlLmg+CisrI2luY2x1ZGUgPFgxMS9Yb3MuaD4KKysjaWZkZWYgV0lOMzIKKysjdW5kZWYgY2xvc2UKKysjZW5kaWYKKysjaW5jbHVkZSA8WDExL1h1dGlsLmg+CisrI2luY2x1ZGUgIlhsY1B1YkkuaCIKKysKKysjaW5jbHVkZSAiWGNtc2ludC5oIiAJCS8qIGZvciBYY21zQ0NDIHR5cGUgICovCisrI2luY2x1ZGUgIlhsY1B1YkkuaCIgICAgICAgICAgICAvKiBmb3IgWExDZCB0eXBlICovCisrI2luY2x1ZGUgImNvbmZpZy5oIgorKworKyNpZiAhIFhMT0NBTEUKKysKKytCb29sCisrWFN1cHBvcnRzTG9jYWxlKCkKKyt7CisrICByZXR1cm4gRmFsc2U7IAkJCisrfQorKworK2NoYXIgKgorK1hTZXRMb2NhbGVNb2RpZmllcnMoCisrICAgIGNvbnN0IGNoYXIgKm1vZGlmaWVycykKKyt7CisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrWExDZAorK19YT3BlbkxDKAorKyAgICBjaGFyICpuYW1lKQorK3sKKysgIHJldHVybiBOVUxMOworK30KKysKKytYTENkCisrX1hsY0N1cnJlbnRMQygpCisreworKyAgcmV0dXJuIE5VTEw7CisrfQorKworK3ZvaWQKKytfWGxjVmFUb0FyZ0xpc3QoCisrICAgIHZhX2xpc3QgdmFyLAorKyAgICBpbnQgY291bnQsCisrICAgIFhsY0FyZ0xpc3QgKmFyZ3NfcmV0KQorK3sKKysgIHJldHVybjsKKyt9CisrCisrdm9pZAorK19YbGNDb3VudFZhTGlzdCgKKysgICAgdmFfbGlzdCB2YXIsCisrICAgIGludCAqY291bnRfcmV0KQorK3sKKysgIHJldHVybjsKKyt9CisrCisrdm9pZAorK19YQ2xvc2VMQygKKysgICAgWExDZCBsY2QpCisreworKyAgcmV0dXJuOworK30KKysKKytpbnQKKytfWGxjQ29udmVydCgKKysgICAgWGxjQ29udiBjb252LAorKyAgICBYUG9pbnRlciAqZnJvbSwKKysgICAgaW50ICpmcm9tX2xlZnQsCisrICAgIFhQb2ludGVyICp0bywKKysgICAgaW50ICp0b19sZWZ0LAorKyAgICBYUG9pbnRlciAqYXJncywKKysgICAgaW50IG51bV9hcmdzKQorK3sKKysgIHJldHVybiAwOworK30KKysKKysvKiBYSU0gU3R1YnMgKi8KKysKKytYUG9pbnRlcgorK19YaW1HZXRMb2NhbGVDb2RlICggX1hjb25zdCBjaGFyKiBlbmNvZGluZ19uYW1lICkKKyt7CisrICByZXR1cm4gTlVMTDsKKyt9CisrCisraW50CisrX1hpbUdldENoYXJDb2RlICgKKysgICAgWFBvaW50ZXIgICAgICAgICAgICB1Y3NfY29udiwKKysgICAgS2V5U3ltICAgICAgICAgICAgICBrZXlzeW0sCisrICAgIHVuc2lnbmVkIGNoYXIqICAgICAgYnVmLAorKyAgICBpbnQgICAgICAgICAgICAgICAgIG5ieXRlcykKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrLyogWHJtIFN0dWJzICovCisrCisrWHJtTWV0aG9kcworK19Ycm1Jbml0UGFyc2VJbmZvKAorKyAgICBYUG9pbnRlciAqc3RhdGUpCisreworKyAgICByZXR1cm4gKFhybU1ldGhvZHMpIE5VTEw7CisrfQorKworKy8qIFh3YyBTdHVicyAqLworKworK2ludAorK1h3Y1RleHRFeHRlbnRzKAorKyAgICBYRm9udFNldCAgICAgICAgICAgIGZvbnRfc2V0LAorKyAgICBfWGNvbnN0IHdjaGFyX3QgICAgKnRleHQsCisrICAgIGludCAgICAgICAgICAgICAgICAgdGV4dF9sZW4sCisrICAgIFhSZWN0YW5nbGUgICAgICAgICAqb3ZlcmFsbF9pbmtfZXh0ZW50cywKKysgICAgWFJlY3RhbmdsZSAgICAgICAgICpvdmVyYWxsX2xvZ2ljYWxfZXh0ZW50cykKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrdm9pZCAKKytYd2NEcmF3U3RyaW5nKERpc3BsYXkgKmRpc3BsYXksCisrCSAgICAgIERyYXdhYmxlIGQsCisrCSAgICAgIFhGb250U2V0IGZvbnRfc2V0LAorKwkgICAgICBHQyBnYywKKysJICAgICAgaW50IHgsIGludCB5LAorKwkgICAgICBfWGNvbnN0IHdjaGFyX3QgKnN0cmluZywKKysJICAgICAgaW50IG51bV93Y2hhcnMpCisreworKyAgOworK30KKysKKyt2b2lkCisrWHdjRHJhd1RleHQoCisrICAgIERpc3BsYXkgICAgICAgICAgICAqZHB5LAorKyAgICBEcmF3YWJsZSAgICAgICAgICAgIGQsCisrICAgIEdDICAgICAgICAgICAgICAgICAgZ2MsCisrICAgIGludCAgICAgICAgICAgICAgICAgeCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB5LAorKyAgICBYd2NUZXh0SXRlbSAgICAgICAgKnRleHRfaXRlbXMsCisrICAgIGludCAgICAgICAgICAgICAgICAgbml0ZW1zKQorK3sKKysgIDsKKyt9CisrCisrdm9pZAorK1h3Y0RyYXdJbWFnZVN0cmluZygKKysgICAgRGlzcGxheSAgICAgICAgICAgICpkcHksCisrICAgIERyYXdhYmxlICAgICAgICAgICAgZCwKKysgICAgWEZvbnRTZXQgICAgICAgICAgICBmb250X3NldCwKKysgICAgR0MgICAgICAgICAgICAgICAgICBnYywKKysgICAgaW50ICAgICAgICAgICAgICAgICB4LAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHksCisrICAgIF9YY29uc3Qgd2NoYXJfdCAgICAqdGV4dCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB0ZXh0X2xlbikKKyt7CisrICA7CisrfQorKworK2ludAorK1h3Y1RleHRFc2NhcGVtZW50KAorKyAgICBYRm9udFNldCAgICAgICAgICAgIGZvbnRfc2V0LAorKyAgICBfWGNvbnN0IHdjaGFyX3QgICAgKnRleHQsCisrICAgIGludCAgICAgICAgICAgICAgICAgdGV4dF9sZW4pCisreworKyAgcmV0dXJuIDA7CisrfQorKworK1N0YXR1cworK1h3Y1RleHRQZXJDaGFyRXh0ZW50cygKKysgICAgWEZvbnRTZXQgICAgICAgICAgICBmb250X3NldCwKKysgICAgX1hjb25zdCB3Y2hhcl90ICAgICp0ZXh0LAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHRleHRfbGVuLAorKyAgICBYUmVjdGFuZ2xlICAgICAgICAgKmlua19leHRlbnRzX2J1ZmZlciwKKysgICAgWFJlY3RhbmdsZSAgICAgICAgICpsb2dpY2FsX2V4dGVudHNfYnVmZmVyLAorKyAgICBpbnQgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zaXplLAorKyAgICBpbnQgICAgICAgICAgICAgICAgKm51bV9jaGFycywKKysgICAgWFJlY3RhbmdsZSAgICAgICAgICptYXhfaW5rX2V4dGVudHMsCisrICAgIFhSZWN0YW5nbGUgICAgICAgICAqbWF4X2xvZ2ljYWxfZXh0ZW50cykKKyt7CisrICByZXR1cm4oWGNtc0ZhaWx1cmUpOworK30KKysKKytpbnQKKytYd2NUZXh0UHJvcGVydHlUb1RleHRMaXN0KAorKyAgICBEaXNwbGF5ICpkcHksCisrICAgIGNvbnN0IFhUZXh0UHJvcGVydHkgKnRleHRfcHJvcCwKKysgICAgd2NoYXJfdCAqKipsaXN0X3JldCwKKysgICAgaW50ICpjb3VudF9yZXQpCisreworKyAgcmV0dXJuIDA7CisrfQorKworK2ludAorK1h3Y1RleHRMaXN0VG9UZXh0UHJvcGVydHkoCisrICAgIERpc3BsYXkgKmRweSwKKysgICAgd2NoYXJfdCAqKmxpc3QsCisrICAgIGludCBjb3VudCwKKysgICAgWElDQ0VuY29kaW5nU3R5bGUgc3R5bGUsCisrICAgIFhUZXh0UHJvcGVydHkgKnRleHRfcHJvcCkKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrdm9pZAorK1h3Y0ZyZWVTdHJpbmdMaXN0KHdjaGFyX3QgKipsaXN0KQorK3sKKysgIHJldHVybjsKKyt9CisrCisrCisrdm9pZCBYbWJTZXRXTVByb3BlcnRpZXMgKCAgICAgICAgLyogQWN0dWFsbHkgZnJvbSBtYldNUHJvcHMuYyAqLworKyAgICBEaXNwbGF5ICpkcHksCisrICAgIFdpbmRvdyB3LAorKyAgICBfWGNvbnN0IGNoYXIgKndpbmRvd05hbWUsCisrICAgIF9YY29uc3QgY2hhciAqaWNvbk5hbWUsCisrICAgIGNoYXIgKiphcmd2LAorKyAgICBpbnQgYXJnYywKKysgICAgWFNpemVIaW50cyAqc2l6ZUhpbnRzLAorKyAgICBYV01IaW50cyAqd21IaW50cywKKysgICAgWENsYXNzSGludCAqY2xhc3NIaW50cykKKyt7CisrICByZXR1cm47CisrfQorKworK2ludAorK1htYlRleHRQcm9wZXJ0eVRvVGV4dExpc3QoCisrICAgIERpc3BsYXkgKmRweSwKKysgICAgY29uc3QgWFRleHRQcm9wZXJ0eSAqdGV4dF9wcm9wLAorKyAgICBjaGFyICoqKmxpc3RfcmV0LAorKyAgICBpbnQgKmNvdW50X3JldCkKKyt7CisrICByZXR1cm4gWExvY2FsZU5vdFN1cHBvcnRlZDsKKyt9CisrCisraW50CisrWG1iVGV4dExpc3RUb1RleHRQcm9wZXJ0eSgKKysgICAgRGlzcGxheSAqZHB5LAorKyAgICBjaGFyICoqbGlzdCwKKysgICAgaW50IGNvdW50LAorKyAgICBYSUNDRW5jb2RpbmdTdHlsZSBzdHlsZSwKKysgICAgWFRleHRQcm9wZXJ0eSAqdGV4dF9wcm9wKQorK3sKKysgIHJldHVybiBYTG9jYWxlTm90U3VwcG9ydGVkOworK30KKysKKytpbnQKKytYbWJUZXh0RXh0ZW50cygKKysgICAgWEZvbnRTZXQgICAgICAgIGZvbnRfc2V0LAorKyAgICBfWGNvbnN0IGNoYXIgICAqdGV4dCwKKysgICAgaW50ICAgICAgICAgICAgIHRleHRfbGVuLAorKyAgICBYUmVjdGFuZ2xlICAgICAqb3ZlcmFsbF9pbmtfZXh0ZW50cywKKysgICAgWFJlY3RhbmdsZSAgICAgKm92ZXJhbGxfbG9naWNhbF9leHRlbnRzKQorK3sKKysgIHJldHVybiAwOworK30KKysKKyt2b2lkCisrWG1iRHJhd1RleHQoCisrICAgIERpc3BsYXkgICAgICAgICAgICAqZHB5LAorKyAgICBEcmF3YWJsZSAgICAgICAgICAgIGQsCisrICAgIEdDICAgICAgICAgICAgICAgICAgZ2MsCisrICAgIGludCAgICAgICAgICAgICAgICAgeCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB5LAorKyAgICBYbWJUZXh0SXRlbSAgICAgICAgKnRleHRfaXRlbXMsCisrICAgIGludCAgICAgICAgICAgICAgICAgbml0ZW1zKQorK3sKKysgIDsKKyt9CisrCisrdm9pZAorK1htYkRyYXdTdHJpbmcoCisrICAgIERpc3BsYXkgICAgICAgICAgICAqZHB5LAorKyAgICBEcmF3YWJsZSAgICAgICAgICAgIGQsCisrICAgIFhGb250U2V0ICAgICAgICAgICAgZm9udF9zZXQsCisrICAgIEdDICAgICAgICAgICAgICAgICAgZ2MsCisrICAgIGludCAgICAgICAgICAgICAgICAgeCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB5LAorKyAgICBfWGNvbnN0IGNoYXIgICAgICAgKnRleHQsCisrICAgIGludCAgICAgICAgICAgICAgICAgdGV4dF9sZW4pCisreworKyAgOworK30KKysKKyt2b2lkCisrWG1iRHJhd0ltYWdlU3RyaW5nKAorKyAgICBEaXNwbGF5ICAgICAgICAgICAgKmRweSwKKysgICAgRHJhd2FibGUgICAgICAgICAgICBkLAorKyAgICBYRm9udFNldCAgICAgICAgICAgIGZvbnRfc2V0LAorKyAgICBHQyAgICAgICAgICAgICAgICAgIGdjLAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHgsCisrICAgIGludCAgICAgICAgICAgICAgICAgeSwKKysgICAgX1hjb25zdCBjaGFyICAgICAgICp0ZXh0LAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHRleHRfbGVuKQorK3sKKysgIDsKKyt9CisrCisraW50CisrWG1iVGV4dEVzY2FwZW1lbnQoCisrICAgIFhGb250U2V0ICAgICAgICBmb250X3NldCwKKysgICAgX1hjb25zdCBjaGFyICAgKnRleHQsCisrICAgIGludCAgICAgICAgICAgICB0ZXh0X2xlbikKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrU3RhdHVzCisrWG1iVGV4dFBlckNoYXJFeHRlbnRzKAorKyAgICBYRm9udFNldCAgICAgICAgZm9udF9zZXQsCisrICAgIF9YY29uc3QgY2hhciAgICp0ZXh0LAorKyAgICBpbnQgICAgICAgICAgICAgdGV4dF9sZW4sCisrICAgIFhSZWN0YW5nbGUgICAgICppbmtfZXh0ZW50c19idWZmZXIsCisrICAgIFhSZWN0YW5nbGUgICAgICpsb2dpY2FsX2V4dGVudHNfYnVmZmVyLAorKyAgICBpbnQgICAgICAgICAgICAgYnVmZmVyX3NpemUsCisrICAgIGludCAgICAgICAgICAgICpudW1fY2hhcnMsCisrICAgIFhSZWN0YW5nbGUgICAgICptYXhfaW5rX2V4dGVudHMsCisrICAgIFhSZWN0YW5nbGUgICAgICptYXhfbG9naWNhbF9leHRlbnRzKQorK3sKKysgIHJldHVybiAwOworK30KKysKKyt1bnNpZ25lZCBpbnQKKytLZXlTeW1Ub1VjczQoS2V5U3ltIGtleXN5bSkKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrI2VuZGlmIAorKworKyNpZiAhIFhDTVMKKysKKytYY21zQ0NDIAorK1hjbXNDQ0NPZkNvbG9ybWFwKGRweSwgY21hcCkKKysgICAgRGlzcGxheSAqZHB5OworKyAgICBDb2xvcm1hcCBjbWFwOworK3sKKysgIHJldHVybiBOVUxMOworK30KKysKKytTdGF0dXMKKytfWGNtc1Jlc29sdmVDb2xvclN0cmluZyAoCisrICAgIFhjbXNDQ0MgY2NjLAorKyAgICBjb25zdCBjaGFyICoqY29sb3Jfc3RyaW5nLAorKyAgICBYY21zQ29sb3IgKnBDb2xvcl9leGFjdF9yZXR1cm4sCisrICAgIFhjbXNDb2xvckZvcm1hdCByZXN1bHRfZm9ybWF0KQorK3sKKysgIHJldHVybihYY21zRmFpbHVyZSk7CisrfQorKworK3ZvaWQKKytfWGNtc1VucmVzb2x2ZUNvbG9yKAorKyAgICBYY21zQ0NDIGNjYywKKysgICAgWGNtc0NvbG9yICpwQ29sb3IpCisreworKyAgcmV0dXJuOworK30KKysKKyt2b2lkCisrX1hVbnJlc29sdmVDb2xvcigKKysgICAgWGNtc0NDQyBjY2MsCisrICAgIFhDb2xvciAqcFhDb2xvcikKKyt7CisrICByZXR1cm47CisrfQorKworK1hjbXNDbWFwUmVjICoKKytfWGNtc0FkZENtYXBSZWMoZHB5LCBjbWFwLCB3aW5kb3dJRCwgdmlzdWFsKQorKyAgICBEaXNwbGF5ICpkcHk7CisrICAgIENvbG9ybWFwIGNtYXA7CisrICAgIFdpbmRvdyB3aW5kb3dJRDsKKysgICAgVmlzdWFsICp2aXN1YWw7CisreworKyAgcmV0dXJuIE5VTEw7CisrfQorKworK3ZvaWQKKytfWGNtc1JHQl90b19YQ29sb3IoCisrICAgIFhjbXNDb2xvciAqcENvbG9ycywKKysgICAgWENvbG9yICpwWENvbG9ycywKKysgICAgdW5zaWduZWQgaW50IG5Db2xvcnMpCisreworKyAgcmV0dXJuOworK30KKysKKytYY21zQ21hcFJlYyAqCisrX1hjbXNDb3B5Q21hcFJlY0FuZEZyZWUoCisrICAgIERpc3BsYXkgKmRweSwKKysgICAgQ29sb3JtYXAgc3JjX2NtYXAsCisrICAgIENvbG9ybWFwIGNvcHlfY21hcCkKKyt7CisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrdm9pZAorK19YY21zRGVsZXRlQ21hcFJlYygKKysgICAgRGlzcGxheSAqZHB5LAorKyAgICBDb2xvcm1hcCBjbWFwKQorK3sKKysgIHJldHVybjsKKyt9CisrCisrI2VuZGlmCitJbmRleDogbGliWDExLTEuMy9zcmMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJYMTEtMS4zLm9yaWcvc3JjL01ha2VmaWxlLmFtCisrKysgbGliWDExLTEuMy9zcmMvTWFrZWZpbGUuYW0KK0BAIC0zMzUsNiArMzM1LDggQEAgaWYgVEhSU1RVQlMKKyBsaWJYMTFfbGFfU09VUkNFUys9VUlUaHJTdHVicy5jCisgZW5kaWYKKyAKKytsaWJYMTFfbGFfU09VUkNFUys9WDE4TkNNU3N0dWJzLmMKKysKKyB4MTFkYXRhZGlyID0gQFgxMV9EQVRBRElSQAorIHgxMWRhdGFfREFUQSA9IFhLZXlzeW1EQiBYRXJyb3JEQgorIAorQEAgLTM0Miw2ICszNDQsNyBAQCBFWFRSQV9ESVNUID0gXAorIAkkKHgxMWRhdGFfREFUQSkgXAorIAlvczJTdHVicy5jIFwKKy0JVUlUaHJTdHVicy5jIAorKwlVSVRoclN0dWJzLmMgXAorKwlYMThOQ01Tc3R1YnMuYworIAorIGlmIFhDQgorIGxpYlgxMV9sYV9TT1VSQ0VTICs9IFwKK0luZGV4OiBsaWJYMTEtMS4zL3NyYy9sb2NraW5nLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJYMTEtMS4zLm9yaWcvc3JjL2xvY2tpbmcuYworKysrIGxpYlgxMS0xLjMvc3JjL2xvY2tpbmcuYworQEAgLTY2LDcgKzY2LDkgQEAgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYQorICNkZWZpbmUgTlVNX0ZSRUVfQ1ZMUyA0CisgCisgLyogaW4gbGNXcmFwLmMgKi8KKysjaWZkZWYgWExPQ0FMRQorIGV4dGVybiBMb2NrSW5mb1B0ciBfWGkxOG5fbG9jazsKKysjZW5kaWYKKyAKKyAjaWZkZWYgV0lOMzIKKyBzdGF0aWMgRFdPUkQgX1hfVGxzSW5kZXggPSAoRFdPUkQpLTE7CitAQCAtNTk0LDkgKzU5NiwxMSBAQCBTdGF0dXMgWEluaXRUaHJlYWRzKHZvaWQpCisgICAgIF9YZ2xvYmFsX2xvY2sgPSAmZ2xvYmFsX2xvY2s7CisgICAgIHhtdXRleF9pbml0KF9YZ2xvYmFsX2xvY2stPmxvY2spOworICAgICB4bXV0ZXhfc2V0X25hbWUoX1hnbG9iYWxfbG9jay0+bG9jaywgIlhsaWIgZ2xvYmFsIik7CisrI2lmZGVmIFhMT0NBTEUKKyAgICAgX1hpMThuX2xvY2sgPSAmaTE4bl9sb2NrOworICAgICB4bXV0ZXhfaW5pdChfWGkxOG5fbG9jay0+bG9jayk7CisgICAgIHhtdXRleF9zZXRfbmFtZShfWGkxOG5fbG9jay0+bG9jaywgIlhsaWIgaTE4biIpOworKyNlbmRpZgorICAgICBfWExvY2tNdXRleF9mbiA9IF9YTG9ja011dGV4OworICAgICBfWFVubG9ja011dGV4X2ZuID0gX1hVbmxvY2tNdXRleDsKKyAgICAgX1hDcmVhdGVNdXRleF9mbiA9IF9YQ3JlYXRlTXV0ZXg7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvZGlzYWJsZV90ZXN0cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9kaXNhYmxlX3Rlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYjZjZGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvZGlzYWJsZV90ZXN0cy5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KKworVXBkYXRlIGZvciAxLjYuMQorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtTnVyZCBsaWJYMTEtMS41LjAvbmxzL01ha2VmaWxlLmFtIGxpYlgxMS0xLjUuMC9ubHMvTWFrZWZpbGUuYW0KKy0tLSBsaWJYMTEtMS41LjAvbmxzL01ha2VmaWxlLmFtCTIwMTItMDYtMDIgMDk6Mzc6MTguMDAwMDAwMDAwICswMzAwCisrKysgbGliWDExLTEuNS4wL25scy9NYWtlZmlsZS5hbQkyMDEzLTAxLTAyIDE2OjEwOjI0Ljk2MDE1NjEzMSArMDIwMAorQEAgLTM2LDExICszNiw2IEBACisgICAgICAgICA8IGxvY2FsZS5kaXIubDEgPiBsb2NhbGUuZGlyLmwyCisJY2F0IGxvY2FsZS5kaXIubDIgbG9jYWxlLmRpci5sMSA+IGxvY2FsZS5kaXIKKworLWlmIEhBVkVfUEVSTAorLUxPR19DT01QSUxFUiA9ICQoUEVSTCkKKy1URVNUUyA9IGNvbXBvc2UtY2hlY2sucGwKKy1lbmRpZiBIQVZFX1BFUkwKKy0KKworICMgUGVyLWxvY2FsZSBkYXRhIGZpbGVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvZml4LWRpc2FibGUteGxvY2FsZS5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL2ZpeC1kaXNhYmxlLXhsb2NhbGUuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2MzOTg0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL2ZpeC1kaXNhYmxlLXhsb2NhbGUuZGlmZgpAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWGlhb2ZlbmcgWWFuIDx4aWFvZmVuZy55YW5Ad2luZHJpdmVyLmNvbT4KKy0tLSBsaWJYMTEtWDExUjcuMC0xLjAuMC9zcmMvRm9udC5jLm9yaWcJMjAwNi0wMy0xMiAxODozNTo0Mi4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJYMTEtWDExUjcuMC0xLjAuMC9zcmMvRm9udC5jCTIwMDYtMDMtMTIgMTg6NDA6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtNzAxLDcgKzcwMSwxMSBAQAorICAgICB9CisgICAgIGlmIChsIC0gMiAtIChwIC0gY2hhcnNldCkgPCAwKQorIAlyZXR1cm4gMDsKKysjaWZkZWYgWExPQ0FMRQorICAgICBpZiAoX1hsY05Db21wYXJlSVNPTGF0aW4xKG5hbWUgKyBsIC0gMiAtIChwIC0gY2hhcnNldCksIGNoYXJzZXQsIHAgLSBjaGFyc2V0KSkKKysjZWxzZQorKyAgICBpZiAoc3RybmNhc2VjbXAobmFtZSArIGwgLSAyIC0gKHAgLSBjaGFyc2V0KSwgY2hhcnNldCwgcCAtIGNoYXJzZXQpKQorKyNlbmRpZgorIAlyZXR1cm4gMDsKKyAgICAgaWYgKHN0cmxlbihwICsgMSkgKyBsIC0gMSA+PSBzaXplb2YoYnVmKSAtIDEpCisgCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL2ZpeC11dGY4LXdyb25nLWRlZmluZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9maXgtdXRmOC13cm9uZy1kZWZpbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYzNDdmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9maXgtdXRmOC13cm9uZy1kZWZpbmUucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFhpYW9mZW5nIFlhbiA8eGlhb2ZlbmcueWFuQHdpbmRyaXZlci5jb20+CisKKyMKKyMgUGF0Y2ggbWFuYWdlZCBieSBodHRwOi8vd3d3LmhvbGdlcnNjaHVyaWcuZGUvcGF0Y2hlci5odG1sCisjCisKKy0tLSBsaWJYMTEtWDExUjcuMC0xLjAuMC9pbmNsdWRlL1gxMS9YbGliLmh+Zml4LXV0Zjgtd3JvbmctZGVmaW5lCisrKysgbGliWDExLVgxMVI3LjAtMS4wLjAvaW5jbHVkZS9YMTEvWGxpYi5oCitAQCAtMTAzLDcgKzEwMyw3IEBACisgCisgLyogQVBJIG1lbnRpb25pbmcgIlVURjgiIG9yICJ1dGY4IiBpcyBhbiBYRnJlZTg2IGV4dGVuc2lvbiwgaW50cm9kdWNlZCBpbgorICAgIE5vdmVtYmVyIDIwMDAuIEl0cyBwcmVzZW5jZSBpcyBpbmRpY2F0ZWQgdGhyb3VnaCB0aGUgZm9sbG93aW5nIG1hY3JvLiAqLworLSNkZWZpbmUgWF9IQVZFX1VURjhfU1RSSU5HIDEKKysjdW5kZWYgWF9IQVZFX1VURjhfU1RSSU5HCisgCisgdHlwZWRlZiBjaGFyICpYUG9pbnRlcjsKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9saWJYMTEtQWRkLW1pc3NpbmctTlVMTC1jaGVjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9saWJYMTEtQWRkLW1pc3NpbmctTlVMTC1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmFiZjdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL2xpYlgxMS1BZGQtbWlzc2luZy1OVUxMLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsNzIgQEAKK0Zyb20gNGQ4NWQ1ZjNiZDhhZmFjODkzNzM4ZmQ4OGUxOWQ4Y2I1Y2Y5OThmZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERyZXcgTW9zZWxleSA8ZHJld19tb3NlbGV5QG1lbnRvci5jb20+CitEYXRlOiBTdW4sIDI3IEp1bCAyMDE0IDEzOjEwOjA3IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGxpYlgxMTogQWRkIG1pc3NpbmcgTlVMTCBjaGVjayBvbiBpbSBhbmQgaW0tPm1ldGhvZHMKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCAoYzgyN2VkY2QxYzRhN2Y5MjBhYTI1MjA4MDgzYjViNThkNjBkMmI0NCkKK1NpZ25lZC1vZmYtYnk6IERyZXcgTW9zZWxleSA8ZHJld19tb3NlbGV5QG1lbnRvci5jb20+CisKKy0tLQorIHNyYy94bGliaTE4bi9JQ1dyYXAuYyB8IDUgKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC1ydSBsaWJYMTEtMS42LjItb3JpZy9zcmMveGxpYmkxOG4vSUNXcmFwLmMgbGliWDExLTEuNi4yL3NyYy94bGliaTE4bi9JQ1dyYXAuYworLS0tIGxpYlgxMS0xLjYuMi1vcmlnL3NyYy94bGliaTE4bi9JQ1dyYXAuYwkyMDE0LTA3LTI3IDEzOjM4OjI5LjU4NjY2NjQ0OSAtMDQwMAorKysrIGxpYlgxMS0xLjYuMi9zcmMveGxpYmkxOG4vSUNXcmFwLmMJMjAxNC0wNy0yNyAxMzo0MTozOS42NzE2MDkwMzAgLTA0MDAKK0BAIC0xNjksNyArMTY5LDcgQEAKKyAgICAgdmFfbGlzdCB2YXI7CisgICAgIGludCAgICAgdG90YWxfY291bnQ7CisgICAgIFhJTUFyZyAqYXJnczsKKy0gICAgY2hhciAgICpyZXQ7CisrICAgIGNoYXIgICAqcmV0ID0gTlVMTDsKKyAKKyAgICAgLyoKKyAgICAgICogc28gY291bnQgdGhlIHN0dWZmIGRhbmdsaW5nIGhlcmUKK0BAIC0xODUsNyArMTg1LDggQEAKKyAgICAgX1hJTVZhVG9OZXN0ZWRMaXN0KHZhciwgdG90YWxfY291bnQsICZhcmdzKTsKKyAgICAgdmFfZW5kKHZhcik7CisgCistICAgIHJldCA9ICgqaW0tPm1ldGhvZHMtPnNldF92YWx1ZXMpIChpbSwgYXJncyk7CisrICAgIGlmIChpbSAmJiBpbS0+bWV0aG9kcykKKysJcmV0ID0gKCppbS0+bWV0aG9kcy0+c2V0X3ZhbHVlcykgKGltLCBhcmdzKTsKKyAgICAgWGZyZWUoYXJncyk7CisgICAgIHJldHVybiByZXQ7CisgfQorQEAgLTE5Niw3ICsxOTcsNyBAQAorICAgICB2YV9saXN0IHZhcjsKKyAgICAgaW50ICAgICB0b3RhbF9jb3VudDsKKyAgICAgWElNQXJnICphcmdzOworLSAgICBjaGFyICAgKnJldDsKKysgICAgY2hhciAgICpyZXQgPSBOVUxMOworIAorICAgICAvKgorICAgICAgKiBzbyBjb3VudCB0aGUgc3R1ZmYgZGFuZ2xpbmcgaGVyZQorQEAgLTIxMiw3ICsyMTMsOCBAQAorICAgICBfWElNVmFUb05lc3RlZExpc3QodmFyLCB0b3RhbF9jb3VudCwgJmFyZ3MpOworICAgICB2YV9lbmQodmFyKTsKKyAKKy0gICAgcmV0ID0gKCppbS0+bWV0aG9kcy0+Z2V0X3ZhbHVlcykgKGltLCBhcmdzKTsKKysgICAgaWYgKGltICYmIGltLT5tZXRob2RzKQorKwlyZXQgPSAoKmltLT5tZXRob2RzLT5nZXRfdmFsdWVzKSAoaW0sIGFyZ3MpOworICAgICBYZnJlZShhcmdzKTsKKyAgICAgcmV0dXJuIHJldDsKKyB9CitAQCAtMjI4LDcgKzIzMCw3IEBACisgICAgIHZhX2xpc3QgdmFyOworICAgICBpbnQgICAgIHRvdGFsX2NvdW50OworICAgICBYSU1BcmcgKmFyZ3M7CistICAgIFhJQyAgICAgaWM7CisrICAgIFhJQyAgICAgaWMgPSBOVUxMOworIAorICAgICAvKgorICAgICAgKiBzbyBjb3VudCB0aGUgc3R1ZmYgZGFuZ2xpbmcgaGVyZQorQEAgLTI0NCw3ICsyNDYsOCBAQAorICAgICBfWElNVmFUb05lc3RlZExpc3QodmFyLCB0b3RhbF9jb3VudCwgJmFyZ3MpOworICAgICB2YV9lbmQodmFyKTsKKyAKKy0gICAgaWMgPSAoWElDKSAoKmltLT5tZXRob2RzLT5jcmVhdGVfaWMpIChpbSwgYXJncyk7CisrICAgIGlmIChpbSAmJiBpbS0+bWV0aG9kcykKKysJaWMgPSAoWElDKSAoKmltLT5tZXRob2RzLT5jcmVhdGVfaWMpIChpbSwgYXJncyk7CisgICAgIFhmcmVlKGFyZ3MpOworICAgICBpZiAoaWMpIHsKKyAJaWMtPmNvcmUubmV4dCA9IGltLT5jb3JlLmljX2NoYWluOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExXzEuNi4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExXzEuNi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNTMxYzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTFfMS42LjMuYmIKQEAgLTAsMCArMSwxMSBAQAorcmVxdWlyZSBsaWJ4MTEuaW5jCitpbmhlcml0IGdldHRleHQKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJICs9ICJmaWxlOi8vZGlzYWJsZV90ZXN0cy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vbGliWDExLUFkZC1taXNzaW5nLU5VTEwtY2hlY2sucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyZTM2YjczZjhhNDIxNDMxNDJkZGE4MTI5ZjAyZTRlMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjZjMxYTdjMzlmMmY1MmU4ZWJkMGRiOTU2NDAzODRlNjM0NTFmOWIwMTRlZWQyYmI3ZjVkZTAzZThhZGM4MTExIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGF1XzEuMC44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGF1XzEuMC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZjhiZmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4YXVfMS4wLjguYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJYYXU6IFggQXV0aG9yaXR5IERhdGFiYXNlIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYnhhdSBwcm92aWRlcyB0aGUgbWFpbiBpbnRlcmZhY2VzIHRvIHRoZSBYMTEgXAorYXV0aG9yaXNhdGlvbiBoYW5kbGluZywgd2hpY2ggY29udHJvbHMgYXV0aG9yaXNhdGlvbiBmb3IgWCBjb25uZWN0aW9ucywgXAorYm90aCBjbGllbnQtc2lkZSBhbmQgc2VydmVyLXNpZGUuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworaW5oZXJpdCBnZXR0ZXh0CisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzkwOGUzNDI0OTExOTg0MDEzMjFjZWMxOTU2ODA3ZWMiCisKK0RFUEVORFMgKz0gIiB4cHJvdG8iCitQUk9WSURFUyA9ICJ4YXUiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWGF1IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2ODVmOGFiYmZmYTZkMTQ1YzBmOTMwZjAwNzAzYjIxYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZGQ0NzczMjBhZWI1Y2RkNjcyNzI4Mzg3MjJkNmI3ZDU0NDg4N2RmZTdkZTQ2ZTFlN2NjMGMyN2MyYmVhNGYyIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNhbGlicmF0ZS9maXgteGNiLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNhbGlicmF0ZS9maXgteGNiLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MTQ4ODMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2FsaWJyYXRlL2ZpeC14Y2IucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoZXJlIGlzIG5vIGV4dHJhIHJlcGx5IGRhdGEgYW5kIGlmIHdlIHNheSBub3QgdG8gZGlzZ2FyZCBpdCwgeGNiCit0aHJvd3MgZmF0YWwgYXNzZXJ0cy4KKworUlAgLSAyNi8xMS8wOQorCitJbmRleDogZ2l0L3hjYWxpYnJhdGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3hjYWxpYnJhdGUuYwkyMDA5LTExLTI2IDA4OjExOjQ4LjAwMDAwMDAwMCArMDAwMAorKysrIGdpdC94Y2FsaWJyYXRlLmMJMjAwOS0xMS0yNiAwODowOTo1NS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yMTYsNyArMjE2LDcgQEAKKyAgIHJlcS0+cmVxVHlwZSA9IGluZm8tPmNvZGVzLT5tYWpvcl9vcGNvZGU7CisgICByZXEtPnhDYWxpYnJhdGVSZXFUeXBlID0gWF9YQ2FsaWJyYXRlUmF3TW9kZTsKKyAgIHJlcS0+b24gPSBlbmFibGU7CistICBpZiAoIV9YUmVwbHkgKGRweSwgKHhSZXBseSAqKSAmcmVwLCAwLCB4RmFsc2UpKSAKKysgIGlmICghX1hSZXBseSAoZHB5LCAoeFJlcGx5ICopICZyZXAsIDAsIHhUcnVlKSkgCisgICAgIHsKKyAgICAgICBVbmxvY2tEaXNwbGF5IChkcHkpOworICAgICAgIFN5bmNIYW5kbGUgKCk7CitAQCAtMjQwLDcgKzI0MCw3IEBACisgICByZXEtPnhDYWxpYnJhdGVSZXFUeXBlID0gWF9YQ2FsaWJyYXRlU2NyZWVuVG9Db29yZDsKKyAgIHJlcS0+eCA9ICp4OworICAgcmVxLT55ID0gKnk7CistICBpZiAoIV9YUmVwbHkgKGRweSwgKHhSZXBseSAqKSAmcmVwLCAwLCB4RmFsc2UpKSAKKysgIGlmICghX1hSZXBseSAoZHB5LCAoeFJlcGx5ICopICZyZXAsIDAsIHhUcnVlKSkgCisgICAgIHsKKyAgICAgICBVbmxvY2tEaXNwbGF5IChkcHkpOworICAgICAgIFN5bmNIYW5kbGUgKCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2FsaWJyYXRlX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYWxpYnJhdGVfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NWU4NjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2FsaWJyYXRlX2dpdC5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIlhDYWxpYnJhdGU6IFRvdWNoc2NyZWVuIGNhbGlicmF0aW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYlhDYWxpYnJhdGUgaXMgYSBsaWJyYXJ5IGZvciBwZXJmb3JtaW5nIHRvdWNoc2NyZWVuIFwKK2NhbGlicmF0aW9uIHdpdGggdGhlIGtkcml2ZSB0c2xpYiB0b3VjaHNjcmVlbiBkcml2ZXIuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly94Y2FsaWJyYXRlLmg7ZW5kbGluZT0yMTttZDU9ZmE1NzJkZjY0MzlmMGYyMzVmMjYxMmYzNzBmMTUzZDcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8veGNhbGlicmF0ZS5jO2VuZGxpbmU9MjE7bWQ1PWZhNTcyZGY2NDM5ZjBmMjM1ZjI2MTJmMzcwZjE1M2Q3IgorCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIGNhbGlicmF0ZXByb3RvIGxpYnhleHQiCisKK1NSQ1JFViA9ICIyMDlkODNhZjYxZWQzOGEwMDJjODA5NjM3N2RlYWMyOTJiM2UzOTZjIgorUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94b3JnL2xpYi9saWJYQ2FsaWJyYXRlIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC14Y2IucGF0Y2giCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0ZJTEVTXyR7UE59LWxvY2FsZSArPSAiJHtkYXRhZGlyfS9YMTEvbG9jYWxlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUzMWYyMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYi5pbmMKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJYQ0I6IFRoZSBYIHByb3RvY29sIEMgYmluZGluZyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiVGhlIFggcHJvdG9jb2wgQy1sYW5ndWFnZSBCaW5kaW5nIChYQ0IpIGlzIGEgcmVwbGFjZW1lbnQgXAorZm9yIFhsaWIgZmVhdHVyaW5nIGEgc21hbGwgZm9vdHByaW50LCBsYXRlbmN5IGhpZGluZywgZGlyZWN0IGFjY2VzcyB0byBcCit0aGUgcHJvdG9jb2wsIGltcHJvdmVkIHRocmVhZGluZyBzdXBwb3J0LCBhbmQgZXh0ZW5zaWJpbGl0eS4iCitIT01FUEFHRSA9ICJodHRwOi8veGNiLmZyZWVkZXNrdG9wLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9WENCIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCitMSUNFTlNFID0gIk1JVC1YIgorCitERVBFTkRTID0gInhjYi1wcm90byB4cHJvdG8gbGlieGF1IHhjYi1wcm90by1uYXRpdmUgbGlicHRocmVhZC1zdHVicyIKKworU1JDX1VSSSA9ICJodHRwOi8veGNiLmZyZWVkZXNrdG9wLm9yZy9kaXN0L2xpYnhjYi0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3hjYmluY2x1ZGVkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZS1jaGVjay5wYXRjaCIKKworUEFDS0FHRVNfRFlOQU1JQyA9ICJebGlieGNiLS4qIgorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGlieGNiLnNvLioiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBweXRob25uYXRpdmUgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIGxpYnhhdSBhbmQgb3RoZXJzIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCAnJHtsaWJkaXJ9JywgJ15saWJ4Y2ItKC4qKVwuc29cLi4qJCcsICdsaWJ4Y2ItJXMnLCAnWENCIGxpYnJhcnkgbW9kdWxlIGZvciAlcycsIGFsbG93X2xpbmtzPVRydWUpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2IvZGlzYWJsZS1jaGVjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYi9kaXNhYmxlLWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NDFjMGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2IvZGlzYWJsZS1jaGVjay5wYXRjaApAQCAtMCwwICsxLDI1IEBACitUaGUgImNoZWNrIiBwYWNrYWdlIGlzIGNoZWNrZWQgZm9yIHdpdGhvdXQgYW4gZXhwbGljaXQgZW5hYmxlL2Rpc2FibGUgb3B0aW9uLAord2hpY2ggY2FuIGxlYWQgdG8gbm9uLWRldGVybWluaXN0aWMgYnVpbGQgaXNzdWVzIHdpdGggYm90aCBjaGVjayBhbmQgbGlieHNsdC4KKworQXMgdGhlIHVuaXQgdGVzdCBzdWl0ZSBpcyBtaW5pbWFsIGF0IHByZXNlbnQsIHNpbXBseSBkaXNhYmxlIHRoZSB0ZXN0IHN1aXRlLiAgSW4KK3RoZSBmdXR1cmUgaWYgdGhlIHRlc3Qgc3VpdGUgaXMgZXhwYW5kZWQgdGhpcyBjYW4gYmUgbWFkZSBjb25kaXRpb25hbCBvbiB0aGUKK3B0ZXN0IERJU1RST19GRUFUVVJFLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNmQ3YzlhNS4uMjJjY2ViOSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjEsNyArMjEsOCBAQCBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyAKKyBBTV9QQVRIX1BZVEhPTihbMi42XSkKKyAKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhDSEVDSywgW2NoZWNrID49IDAuOS40XSwgW0hBVkVfQ0hFQ0s9eWVzXSwgW0hBVkVfQ0hFQ0s9bm9dKQorK2RubCBQS0dfQ0hFQ0tfTU9EVUxFUyhDSEVDSywgW2NoZWNrID49IDAuOS40XSwgW0hBVkVfQ0hFQ0s9eWVzXSwgW0hBVkVfQ0hFQ0s9bm9dKQorK0hBVkVfQ0hFQ0s9bm8KKyBBTV9DT05ESVRJT05BTChIQVZFX0NIRUNLLCB0ZXN0IHgkSEFWRV9DSEVDSyA9IHh5ZXMpCisgCisgQUNfQ09ORklHX0hFQURFUlMoW3NyYy9jb25maWcuaF0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2IveGNiaW5jbHVkZWRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYi94Y2JpbmNsdWRlZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2Mjk3YzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2IveGNiaW5jbHVkZWRpci5wYXRjaApAQCAtMCwwICsxLDI4IEBACitBcyBwa2ctY29uZmlnIC0tdmFyaWFibGUgZG9lc24ndCByZXNwZWN0IHRoZSBzeXNyb290LCBhZGQgdGhlIHBrZy1jb25maWcgc3lzcm9vdAordG8gdGhlIGJlZ2lubmluZyBvZiB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBsYXRlciBvbiB0aGUgaG9zdC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA5NGRhNGY3Li5kMjljZDZhIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02NCw3ICs2NCw3IEBAIEFDX1NVQlNUKE5FRURFRCkKKyAKKyAjIEZpbmQgdGhlIHhjYi1wcm90byBwcm90b2NvbCBkZXNjcmlwdGlvbnMKKyBBQ19NU0dfQ0hFQ0tJTkcoWENCUFJPVE9fWENCSU5DTFVERURJUikKKy1YQ0JQUk9UT19YQ0JJTkNMVURFRElSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXhjYmluY2x1ZGVkaXIgeGNiLXByb3RvYAorK1hDQlBST1RPX1hDQklOQ0xVREVESVI9JFBLR19DT05GSUdfU1lTUk9PVF9ESVIvYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9eGNiaW5jbHVkZWRpciB4Y2ItcHJvdG9gCisgQUNfTVNHX1JFU1VMVCgkWENCUFJPVE9fWENCSU5DTFVERURJUikKKyBBQ19TVUJTVChYQ0JQUk9UT19YQ0JJTkNMVURFRElSKQorIAorQEAgLTc0LDcgKzc0LDcgQEAgQUNfU1VCU1QoWENCUFJPVE9fVkVSU0lPTikKKyAKKyAjIEZpbmQgdGhlIHhjYmdlbiBQeXRob24gcGFja2FnZQorIEFDX01TR19DSEVDS0lORyhYQ0JQUk9UT19YQ0JQWVRIT05ESVIpCistWENCUFJPVE9fWENCUFlUSE9ORElSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXB5dGhvbmRpciB4Y2ItcHJvdG9gCisrWENCUFJPVE9fWENCUFlUSE9ORElSPSRQS0dfQ09ORklHX1NZU1JPT1RfRElSL2AkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXB5dGhvbmRpciB4Y2ItcHJvdG9gCisgQUNfTVNHX1JFU1VMVCgkWENCUFJPVE9fWENCUFlUSE9ORElSKQorIEFDX1NVQlNUKFhDQlBST1RPX1hDQlBZVEhPTkRJUikKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYl8xLjExLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiXzEuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE2MjcwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYl8xLjExLmJiCkBAIC0wLDAgKzEsMTAgQEAKK2luY2x1ZGUgbGlieGNiLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ3NjNiMDgxY2IxMGMyMjM0MzViMDFlMDBkYzBhYmE3IgorCisKK0RFUEVORFMgKz0gImxpYnhkbWNwIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNWE4NzNlYmQzODNkMWE2MDYxMmRkNmVjNmI0MmM3ODEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDM2MzVkNzAwNDViOWVkZTkwNzc4ZTY3NTE2MTM1ODI4YTU3ZGU4N2FjNTA4Zjk4NzAyNGY0M2MwMzYyMGZmNyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYl9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2JfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NjYzNmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2JfZ2l0LmJiCkBAIC0wLDAgKzEsMTAgQEAKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworaW5jbHVkZSBsaWJ4Y2IuaW5jCisKK1NSQ1JFViA9ICI2MjVlZDU5NmNhZTZkZDgxNzVhZWI2Y2I2ZjI2Nzg0OTI4MDQyZjIyIgorUFYgPSAiMS4xLjkwLjErZ2l0ciR7U1JDUFZ9IgorUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hjYi9saWJ4Y2IiCitTID0gIiR7V09SS0RJUn0vZ2l0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNvbXBvc2l0ZS9jaGFuZ2UtaW5jbHVkZS1vcmRlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjb21wb3NpdGUvY2hhbmdlLWluY2x1ZGUtb3JkZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAzMzFmNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjb21wb3NpdGUvY2hhbmdlLWluY2x1ZGUtb3JkZXIucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitUaGlzIHBhdGNoIG1ha2VzIHRoZSBidWlsZCB1c2UgaXRzIG93biBYY29tcG9zaXRlLmggb3ZlciByYXRoZXIgdGhhbiBhbgorb2xkZXIgWGNvbXBvc2l0ZS5oIHRoYXQgbWlnaHQgYWxyZWFkeSBiZSBpbnN0YWxsZWQgaW4gdGhlIHN0YWdpbmcgZGlyLgorCitJbmRleDogbGliWGNvbXBvc2l0ZS0wLjQuMy9zcmMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJYY29tcG9zaXRlLTAuNC4zLm9yaWcvc3JjL01ha2VmaWxlLmFtCTIwMTAtMDYtMzAgMjI6NDI6NTMuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliWGNvbXBvc2l0ZS0wLjQuMy9zcmMvTWFrZWZpbGUuYW0JMjAxMC0xMS0yMyAyMzowOTozNC41NDQzMjI5MzAgLTA4MDAKK0BAIC0xOSw3ICsxOSw3IEBACisgIyAgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgorICMgIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgCistQU1fQ0ZMQUdTID0gJChDV0FSTkZMQUdTKSAkKFhDT01QT1NJVEVfQ0ZMQUdTKSAkKFhGSVhFU19DRkxBR1MpCisrQU1fQ0ZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgJChDV0FSTkZMQUdTKSAkKFhDT01QT1NJVEVfQ0ZMQUdTKSAkKFhGSVhFU19DRkxBR1MpCisgQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZQorIAorIGxpYl9MVExJQlJBUklFUyA9IGxpYlhjb21wb3NpdGUubGEKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjb21wb3NpdGVfMC40LjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y29tcG9zaXRlXzAuNC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMjU3MTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y29tcG9zaXRlXzAuNC40LmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiWGNvbXBvc2l0ZTogWCBDb21wb3NpdGUgZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBjb21wb3NpdGUgZXh0ZW5zaW9uIHByb3ZpZGVzIHRocmVlIHJlbGF0ZWQgXAorbWVjaGFuaXNtczogcGVyLWhpZXJhcmNoeSBzdG9yYWdlLCBhdXRvbWF0aWMgc2hhZG93IHVwZGF0ZSwgYW5kIGV4dGVybmFsIFwKK3BhcmVudC4gIEluIHBlci1oaWVyYXJjaHkgc3RvcmFnZSwgdGhlIHJlbmRlcmluZyBvZiBhbiBlbnRpcmUgaGllcmFyY2h5IFwKK29mIHdpbmRvd3MgaXMgcmVkaXJlY3RlZCB0byBvZmYtc2NyZWVuIHN0b3JhZ2UuICBJbiBhdXRvbWF0aWMgc2hhZG93IFwKK3VwZGF0ZSwgd2hlbiBhIGhpZXJhcmNoeSBpcyByZW5kZXJlZCBvZmYtc2NyZWVuLCB0aGUgWCBzZXJ2ZXIgcHJvdmlkZXMgXAorYW4gYXV0b21hdGljIG1lY2hhbmlzbSBmb3IgcHJlc2VudGluZyB0aG9zZSBjb250ZW50cyB3aXRoaW4gdGhlIHBhcmVudCBcCit3aW5kb3cuICBJbiBleHRlcm5hbCBwYXJlbnQsIGEgbWVjaGFuaXNtIGZvciBwcm92aWRpbmcgcmVkaXJlY3Rpb24gb2YgXAorY29tcG9zaXRpbmcgdHJhbnNmb3JtYXRpb25zIHRocm91Z2ggYSBjbGllbnQuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zZjI5MDdhYWQ1NDFmNmYyMjZmYmM1OGNjMWIzY2RmMSIKKworREVQRU5EUyArPSAiIGNvbXBvc2l0ZXByb3RvIHZpcnR1YWwvbGlieDExIGxpYnhmaXhlcyBsaWJ4ZXh0IgorUFJPVklERVMgPSAieGNvbXBvc2l0ZSIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhjb21wb3NpdGUiCisKK1NSQ19VUkkgKz0gIiBmaWxlOi8vY2hhbmdlLWluY2x1ZGUtb3JkZXIucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmN2EyMThkY2JmNmYwODQ4NTk5YzZjMzZmYzY1YzUxYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlZGUyNTBjZDIwN2Q4YmVlNGEzMzgyNjVjMzAwN2Q3YTY4ZDVhY2E3OTFiNmFjNDFhZjE4ZTlhMmFlYjM0MTc4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGN1cnNvcl8xLjEuMTQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y3Vyc29yXzEuMS4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGU0ZjI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGN1cnNvcl8xLjEuMTQuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJYY3Vyc29yOiBYIEN1cnNvciBtYW5hZ2VtZW50IGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlhjdXJzb3IgaXMgYSBzaW1wbGUgbGlicmFyeSBkZXNpZ25lZCB0byBoZWxwIGxvY2F0ZSBhbmQgXAorbG9hZCBjdXJzb3JzLiBDdXJzb3JzIGNhbiBiZSBsb2FkZWQgZnJvbSBmaWxlcyBvciBtZW1vcnkuIEEgbGlicmFyeSBvZiBcCitjb21tb24gY3Vyc29ycyBleGlzdHMgd2hpY2ggbWFwIHRvIHRoZSBzdGFuZGFyZCBYIGN1cnNvciBuYW1lcy4gQ3Vyc29ycyBcCitjYW4gZXhpc3QgaW4gc2V2ZXJhbCBzaXplcyBhbmQgdGhlIGxpYnJhcnkgYXV0b21hdGljYWxseSBwaWNrcyB0aGUgYmVzdCBcCitzaXplLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODkwMmU2NjQzZjdiY2Q3NzkzYjIzZGNkNWQ4MDMxYTQiCisKK0RFUEVORFMgKz0gImxpYnhyZW5kZXIgbGlieGZpeGVzIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWGN1cnNvciIKKworU1JDX1VSSVttZDVzdW1dID0gIjFlN2MxN2FmYmJjZTgzZTIyMTU5MTcwNDdjNTdkMWIzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjliYzZhY2IyMWNhMTRkYTUxYmRhNWJjOTEyYzg5NTViYzZlNWU0MzNmMGFiMDBjNWU4YmVmODQyNTk2YzMzZGYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZGFtYWdlXzEuMS40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGRhbWFnZV8xLjEuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2Q3MDA0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGRhbWFnZV8xLjEuNC5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIlhkYW1hZ2U6IFggRGFtYWdlIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICInRGFtYWdlJyBpcyBhIHRlcm0gdGhhdCBkZXNjcmliZXMgY2hhbmdlcyBtYWtlIHRvIHBpeGVsIFwKK2NvbnRlbnRzIG9mIHdpbmRvd3MgYW5kIHBpeG1hcHMuICBEYW1hZ2UgYWNjdW11bGF0ZXMgYXMgZHJhd2luZyBvY2N1cnMgXAoraW4gdGhlIGRyYXdhYmxlLiAgRWFjaCBkcmF3aW5nIG9wZXJhdGlvbiAnZGFtYWdlcycgb25lIG9yIG1vcmUgXAorcmVjdGFuZ3VsYXIgYXJlYXMgd2l0aGluIHRoZSBkcmF3YWJsZS4gIFRoZSByZWN0YW5nbGVzIGFyZSBndWFyYW50ZWVkIHRvIFwKK2luY2x1ZGUgdGhlIHNldCBvZiBwaXhlbHMgbW9kaWZpZWQgYnkgZWFjaCBvcGVyYXRpb24sIGJ1dCBtYXkgaW5jbHVkZSBcCitzaWduaWZpY2FudGx5IG1vcmUgdGhhbiBqdXN0IHRob3NlIHBpeGVscy4gIFRoZSBEQU1BR0UgZXh0ZW5zaW9uIGFsbG93cyBcCithcHBsaWNhdGlvbnMgdG8gZWl0aGVyIHJlY2VpdmUgdGhlIHJhdyByZWN0YW5nbGVzIGFzIGEgc3RyZWFtIG9mIGV2ZW50cywgXAorb3IgdG8gaGF2ZSB0aGVtIHBhcnRpYWxseSBwcm9jZXNzZWQgd2l0aGluIHRoZSBYIHNlcnZlciB0byByZWR1Y2UgdGhlIFwKK2Ftb3VudCBvZiBkYXRhIHRyYW5zbWl0dGVkIGFzIHdlbGwgYXMgcmVkdWNlIHRoZSBwcm9jZXNzaW5nIGxhdGVuY3kgb25jZSBcCit0aGUgcmVwYWludCBvcGVyYXRpb24gaGFzIHN0YXJ0ZWQuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05ZmUxMDFmMzBkZDI0MTM0Y2Y0MzE0Njg2MzI0MTg2OCIKKworREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEgZGFtYWdlcHJvdG8gbGlieGZpeGVzIgorUFJPVklERVMgPSAieGRhbWFnZSIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhkYW1hZ2UiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwY2YyOTJkZTJhOWZhMmU5YTkzOWFlZmRlNjhmZDM0ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3YzNmZTdjNjU3ZTgzNTQ3ZjQ4MjJiZmRlMzBhOTBkODQ1MjRlZmI1NjM2NTQ0ODc2ODQwOWI3N2YwNTM1NWFkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGRtY3BfMS4xLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZG1jcF8xLjEuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGUzMGQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGRtY3BfMS4xLjIuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJYRE1DUDogWCBEaXNwbGF5IE1hbmFnZXIgQ29udHJvbCBQcm90b2NvbCBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGUgcHVycG9zZSBvZiB0aGUgWCBEaXNwbGF5IE1hbmFnZXIgQ29udHJvbCBQcm90b2NvbCBcCisoWERNQ1ApIGlzIHRvIHByb3ZpZGUgYSB1bmlmb3JtIG1lY2hhbmlzbSBmb3IgYW4gYXV0b25vbW91cyBkaXNwbGF5IHRvIFwKK3JlcXVlc3QgbG9naW4gc2VydmljZSBmcm9tIGEgcmVtb3RlIGhvc3QuIEFuIFggdGVybWluYWwgKHNjcmVlbiwgXAora2V5Ym9hcmQsIG1vdXNlLCBwcm9jZXNzb3IsIG5ldHdvcmsgaW50ZXJmYWNlKSBpcyBhIHByaW1lIGV4YW1wbGUgb2YgYW4gXAorYXV0b25vbW91cyBkaXNwbGF5LiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK2luaGVyaXQgZ2V0dGV4dAorCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ1NTlmYjI2ZTEyOTYyNjAyMmUwNTJhNWU2ZTBlMTIzIgorCitERVBFTkRTICs9ICJ4cHJvdG8iCitQUk9WSURFUyA9ICJ4ZG1jcCIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYZG1jcCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMThhYTVjMTI3OWIwMWY5ZDE4ZTMyOTk5Njk2NjViMmUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODFmZTA5ODY3OTE4ZmZmMjU4Mjk2ZTFlMWUxNTlmMGRjNjM5Y2IzMGQyMDFjNTM1MTlmMjVhYjczYWY0ZTRlMiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbYXJjNF0gPSAiYWNfY3ZfbGliX2JzZF9hcmM0cmFuZG9tX2J1Zj15ZXMsYWNfY3ZfbGliX2JzZF9hcmM0cmFuZG9tX2J1Zj1ubyxsaWJic2QiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZXh0XzEuMy4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGV4dF8xLjMuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmE4YjY1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGV4dF8xLjMuMy5iYgpAQCAtMCwwICsxLDI2IEBACitTVU1NQVJZID0gIlhFeHQ6IFggRXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYlhleHQgcHJvdmlkZXMgYW4gWCBXaW5kb3cgU3lzdGVtIGNsaWVudCBpbnRlcmZhY2UgdG8gXAorc2V2ZXJhbCBleHRlbnNpb25zIHRvIHRoZSBYIHByb3RvY29sLiAgVGhlIHN1cHBvcnRlZCBwcm90b2NvbCBleHRlbnNpb25zIFwKK2FyZSBET1VCTEUtQlVGRkVSLCBEUE1TLCBFeHRlbmRlZC1WaXN1YWwtSW5mb3JtYXRpb24sIExCWCwgTUlUX1NITSwgXAorTUlUX1NVTkRSWS1OT05TVEFOREFSRCwgTXVsdGktQnVmZmVyaW5nLCBTRUNVUklUWSwgU0hBUEUsIFNZTkMsIFRPRy1DVVAsIFwKK1hDLUFQUEdST1VQLCBYQy1NSVNDLCBYVEVTVC4gIGxpYlhleHQgYWxzbyBwcm92aWRlcyBhIHNtYWxsIHNldCBvZiBcCit1dGlsaXR5IGZ1bmN0aW9ucyB0byBhaWQgYXV0aG9ycyBvZiBjbGllbnQgQVBJcyBmb3IgWCBwcm90b2NvbCBcCitleHRlbnNpb25zLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODc5Y2UyNjY3ODU0MTRiZDFjYmMzYmMyZjRkOWQ3YzgiCisKK0RFUEVORFMgKz0gInhwcm90byB2aXJ0dWFsL2xpYngxMSB4ZXh0cHJvdG8gbGlieGF1IGxpYnhkbWNwIgorUFJPVklERVMgPSAieGV4dCIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYZXh0IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MmRmN2M0YzFmMGJhZGQ5ZjgyYWIxMjRmYjMyZWI5NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNTE4ZDRkMzMyMjMxZjMxMzM3MWZkZWZhYzU5ZTM3NzZmNGYwODIzYmNiMjNjZjdjNzMwNWJmYjU3YjE2ZTM1IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGV4dF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZXh0X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzk5MTg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGV4dF9naXQuYmIKQEAgLTAsMCArMSwyNCBAQAorcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEV4dDogWCBFeHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAibGliWGV4dCBwcm92aWRlcyBhbiBYIFdpbmRvdyBTeXN0ZW0gY2xpZW50IGludGVyZmFjZSB0byBcCitzZXZlcmFsIGV4dGVuc2lvbnMgdG8gdGhlIFggcHJvdG9jb2wuICBUaGUgc3VwcG9ydGVkIHByb3RvY29sIGV4dGVuc2lvbnMgXAorYXJlIERPVUJMRS1CVUZGRVIsIERQTVMsIEV4dGVuZGVkLVZpc3VhbC1JbmZvcm1hdGlvbiwgTEJYLCBNSVRfU0hNLCBcCitNSVRfU1VORFJZLU5PTlNUQU5EQVJELCBNdWx0aS1CdWZmZXJpbmcsIFNFQ1VSSVRZLCBTSEFQRSwgU1lOQywgVE9HLUNVUCwgXAorWEMtQVBQR1JPVVAsIFhDLU1JU0MsIFhURVNULiAgbGliWGV4dCBhbHNvIHByb3ZpZGVzIGEgc21hbGwgc2V0IG9mIFwKK3V0aWxpdHkgZnVuY3Rpb25zIHRvIGFpZCBhdXRob3JzIG9mIGNsaWVudCBBUElzIGZvciBYIHByb3RvY29sIFwKK2V4dGVuc2lvbnMuIgorCitERVBFTkRTICs9ICJ4cHJvdG8gdmlydHVhbC9saWJ4MTEgeGV4dHByb3RvIGxpYnhhdSBsaWJ4ZG1jcCIKK1BST1ZJREVTID0gInhleHQiCitTUkNSRVYgPSAiZDFmM2JjNzdhNDhjOGU0Mjc3MTU3OWUzZmRmMzM3MGIzNWQzMjA5ZCIKK1BFID0gIjEiCitQViA9ICIxLjAuOTkuMStnaXRyJHtTUkNQVn0iCisKK1hPUkdfUE4gPSAibGliWGV4dCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveG9yZy9saWIvJHtYT1JHX1BOfSIKK1MgPSAiJHtXT1JLRElSfS9naXQvIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmaXhlc181LjAuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmaXhlc181LjAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTI3NDBjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGZpeGVzXzUuMC4xLmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiWEZpeGVzOiBYIEZpeGVzIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJYIGFwcGxpY2F0aW9ucyBoYXZlIG9mdGVuIG5lZWRlZCB0byB3b3JrIGFyb3VuZCB2YXJpb3VzIFwKK3Nob3J0Y29taW5ncyBpbiB0aGUgY29yZSBYIHdpbmRvdyBzeXN0ZW0uICBUaGlzIGV4dGVuc2lvbiBpcyBkZXNpZ25lZCB0byBcCitwcm92aWRlIHRoZSBtaW5pbWFsIHNlcnZlci1zaWRlIHN1cHBvcnQgbmVjZXNzYXJ5IHRvIGVsaW1pbmF0ZSBwcm9ibGVtcyBcCitjYXVzZWQgYnkgdGhlc2Ugd29ya2Fyb3VuZHMuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYzFjZTQyYzMzNGE2ZjVjY2NiMDI3NzU1NmEwNTNlMCIKKworREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEgeHByb3RvIGZpeGVzcHJvdG8geGV4dHByb3RvIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhmaXhlcyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjk4NWI4NWY4YjkzODZjODVkZGNmZTEwNzM5MDZiNGQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjNiZWMwODUwODRmYTNjYWFlZTUxODA0OTBkZDg3MWYxZWIyMDIwYmE5ZTliMzlhMzBmOTM2OTNmZmMzNDc2NyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmb250XzEuNS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGZvbnRfMS41LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI2ZTMzYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmb250XzEuNS4xLmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiWEZvbnQ6IFggRm9udCByYXN0ZXJpc2F0aW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYlhmb250IHByb3ZpZGVzIHZhcmlvdXMgc2VydmljZXMgZm9yIFggc2VydmVycywgbW9zdCBcCitub3RhYmx5IGZvbnQgc2VsZWN0aW9uIGFuZCByYXN0ZXJpc2F0aW9uICh0aHJvdWdoIGV4dGVybmFsIGxpYnJhcmllcyBcCitzdWNoIGFzIGZyZWV0eXBlKS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSAmIEJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE0NmM4MDQwZjJmNzM3YmNkMGM0MzVmZWIyYWIxYzJjIgorCitERVBFTkRTICs9ICJmcmVldHlwZSB4dHJhbnMgZm9udHNwcm90byBsaWJmb250ZW5jIHpsaWIiCitQUk9WSURFUyA9ICJ4Zm9udCIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYZm9udCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5NmY3NmJhOTRiNGM5MDkyMzBiYWMxZTJkY2Q1NTFjNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNzA4OTg1MjdjNzNmOTc1OGY1NTFiYmFiNjEyYWY2MTFiOGEwOTYyMjAyODI5NTY4ZDk0ZjNlZGY0ZDg2MDk4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGZ0XzIuMy4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGZ0XzIuMy4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NjdjZGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZnRfMi4zLjIuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJYRnQ6IFggRnJlZVR5cGUgbGliYXJ5IgorCitERVNDUklQVElPTiA9ICJYZnQgd2FzIGRlc2lnbmVkIHRvIHByb3ZpZGUgZ29vZCBzdXBwb3J0IGZvciBzY2FsYWJsZSBcCitmb250cywgYW5kIHRvIGRvIHNvIGVmZmljaWVudGx5LiAgVW5saWtlIHRoZSBjb3JlIGZvbnRzIHN5c3RlbSwgaXQgXAorc3VwcG9ydHMgZmVhdHVyZXMgc3VjaCBhcyBhbnRpLWFsaWFzaW5nIGFuZCBzdWItcGl4ZWwgcmFzdGVyaXNhdGlvbi4gXAorUGVyaGFwcyBtb3JlIGltcG9ydGFudGx5LCBpdCBnaXZlcyBhcHBsaWNhdGlvbnMgZnVsbCBjb250cm9sIG92ZXIgdGhlIFwKK3dheSBnbHlwaHMgYXJlIHJlbmRlcmVkLCBtYWtpbmcgZmluZSB0eXBlc2V0dGluZyBhbmQgV1lTSVdJRyBkaXNwbGF5IFwKK3Bvc3NpYmxlLiBGaW5hbGx5LCBpdCBhbGxvd3MgYXBwbGljYXRpb25zIHRvIHVzZSBmb250cyB0aGF0IGFyZSBub3QgXAoraW5zdGFsbGVkIHN5c3RlbS13aWRlIGZvciBkaXNwbGF5aW5nIGRvY3VtZW50cyB3aXRoIGVtYmVkZGVkIGZvbnRzLiAgWGZ0IFwKK2lzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIGNvcmUgZm9udHMgc3lzdGVtOiB1c2FnZSBvZiBYZnQgcmVxdWlyZXMgXAorZmFpcmx5IGV4dGVuc2l2ZSBjaGFuZ2VzIHRvIHRvb2xraXRzICh1c2VyLWludGVyZmFjZSBsaWJyYXJpZXMpLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTBiOTBiNjBlYjMwZjY1ZmM5YzI2NzNkN2NmNTllMjQiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIGxpYnhyZW5kZXIgZnJlZXR5cGUgZm9udGNvbmZpZyIKK1BST1ZJREVTID0gInhmdCIKKworUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjMzMWIzYTJhM2ExYTc4YjViNDRjZmJkNDNmODZmY2ZlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY1YTNjODI0NzYxZGYzNTFjYTkxODI3YWMyMjEwOTA5NDNlZjI4YjI0ODU3MzQ4NjA1MGRlODlmNGJmY2RjNGMiCisKK1hPUkdfUE4gPSAibGliWGZ0IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworcHl0aG9uICgpIHsKKyAgICAgICAgaWYgZC5nZXRWYXIoJ0RFQklBTl9OQU1FUycsIFRydWUpOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1BLR18ke1BOfScsICcke01MUFJFRklYfWxpYnhmdDInKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGlfMS43LjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4aV8xLjcuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzAzM2EzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGlfMS43LjQuYmIKQEAgLTAsMCArMSwyMSBAQAorcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEk6IFggSW5wdXQgZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYnhpIGlzIGFuIGV4dGVuc2lvbiB0byB0aGUgWDExIHByb3RvY29sIHRvIHN1cHBvcnQgXAoraW5wdXQgZGV2aWNlcyBvdGhlciB0aGFuIHRoZSBjb3JlIFgga2V5Ym9hcmQgYW5kIHBvaW50ZXIuICBJdCBhbGxvd3MgXAorY2xpZW50IHByb2dyYW1zIHRvIHNlbGVjdCBpbnB1dCBmcm9tIHRoZXNlIGRldmljZXMgaW5kZXBlbmRlbnRseSBmcm9tIFwKK2VhY2ggb3RoZXIgYW5kIGluZGVwZW5kZW50bHkgZnJvbSB0aGUgY29yZSBkZXZpY2VzLiIKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xN2IwNjQ3ODlmYWI5MzZhMWM1OGM0ZTEzZDk2NWIwZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvWElHZXREZXZGb2N1cy5jO2VuZGxpbmU9MjM7bWQ1PWNkZmIwZDQzNWEzM2VjNTdlYTBkMWU4ZTM5NWI3MjlmIgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IGlucHV0cHJvdG8gbGlieGZpeGVzIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhpIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOWM0YTY5YzM0YjE5ZWMxZTQyMTJlODQ5NTQ5NTQ0Y2IiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMmNmZmMyNjg2NjE4ZGMxODAzNzI1NjM2Y2Q5MmIzNjM0MmM1MTJkYzYwYTdhMzVjYmEzNGJmNzE5MmE0MjI0NCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhpbmVyYW1hXzEuMS4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGluZXJhbWFfMS4xLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI3YzgwNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhpbmVyYW1hXzEuMS4zLmJiCkBAIC0wLDAgKzEsMjAgQEAKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitTVU1NQVJZID0gIlhpbmVyYW1hOiBYaW5lcmFtYSBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiWGluZXJhbWEgaXMgYSBzaW1wbGUgbGlicmFyeSBkZXNpZ25lZCB0byBpbnRlcmZhY2UgdGhlIFwKK1hpbmVyYW1hIEV4dGVuc2lvbiBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiBhYm91dCBwaHlzaWNhbCBvdXRwdXQgXAorZGV2aWNlcyB3aGljaCBtYXkgYmUgY29tYmluZWQgaW50byBhIHNpbmdsZSBsb2dpY2FsIFggc2NyZWVuLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02ZjRmNjM0ZDE2NDNhMmU2MzhiYmEzZmNkMTljMjUzNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvWGluZXJhbWEuYztiZWdpbmxpbmU9MjtlbmRsaW5lPTI1O21kNT1mY2VmMjczYmZiNjYzMzkyNTY0MTFkZDA2ZWE3OWMwMiIKKworREVQRU5EUyArPSAibGlieGV4dCB4aW5lcmFtYXByb3RvIgorUFJPVklERVMgPSAieGluZXJhbWEiCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhpbmVyYW1hIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTMzNmRjNDZhZTNiZjVmODFjMjQ3ZjcxMzE0NjFlZmQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2E0NTY5OWYxNzczMDk1YTNmODIxZTQ5MWNiZDVlMTBjODg3YzVhNWZjZTVkOGQzZmNlZDE1YzJmZjc2OThlMiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhrYmNvbW1vbl8wLjUuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhrYmNvbW1vbl8wLjUuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTY2YjU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGtiY29tbW9uXzAuNS4wLmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiR2VuZXJpYyBYS0Iga2V5bWFwIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJsaWJ4a2Jjb21tb24gaXMgYSBrZXltYXAgY29tcGlsZXIgYW5kIHN1cHBvcnQgbGlicmFyeSB3aGljaCBcCitwcm9jZXNzZXMgYSByZWR1Y2VkIHN1YnNldCBvZiBrZXltYXBzIGFzIGRlZmluZWQgYnkgdGhlIFhLQiBzcGVjaWZpY2F0aW9uLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueGtiY29tbW9uLm9yZyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA5NDU3YjE1NmUzMTU1OTcyYWJlYmNhYWFhMGNiNDM0IgorTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCisKK0RFUEVORFMgPSAidXRpbC1tYWNyb3MgZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly94a2Jjb21tb24ub3JnL2Rvd25sb2FkLyR7QlBOfS0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyZTFmYWVhZmNjNjA5YzMwYWYzYTU2MWE5MWU4NDE1OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5MGJkNzgyNDc0MmI5YTZmNTJhNmNmODBlMmNhZGQ2ZjUzNDljZjYwMGEzNThkMDgyNjA3NzI2MTViODlkMTljIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1kb2NzIgorCitQQUNLQUdFQ09ORklHID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0tZW5hYmxlLXgxMSwtLWRpc2FibGUteDExLGxpYnhjYiB4a2V5Ym9hcmQtY29uZmlnLCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhrYmZpbGVfMS4wLjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4a2JmaWxlXzEuMC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YTM0NGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4a2JmaWxlXzEuMC45LmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiWEtCOiBYIEtleWJvYXJkIEZpbGUgbWFuaXB1bGF0aW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYnhrYmZpbGUgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIHJlYWQgYW5kIG1hbmlwdWxhdGUgXAorZGVzY3JpcHRpb24gZmlsZXMgZm9yIFhLQiwgdGhlIFgxMSBrZXlib2FyZCBjb25maWd1cmF0aW9uIGV4dGVuc2lvbi4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PThiZTczNjdmN2U1ZDYwNWE0MjZmNzZiYjM3ZDRkNjFmIgorCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSBrYnByb3RvIgorCitQRSA9ICIxIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworU1JDX1VSSVttZDVzdW1dID0gIjRhNGNmZWFmMjRkYWIxYjk5MTkwMzQ1NWQ2ZDdkNDA0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUxODE3ZTA1MzA5NjE5NzVkOTUxM2I3NzM5NjBiNGVkZDI3NWY3ZDVjNzIyOTNkNWExNTFlZDRmNDJhZWIxNmEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4bXVfMS4xLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4bXVfMS4xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAzYmFlYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhtdV8xLjEuMi5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIlhtdSBhbmQgWG11dTogWCBNaXNjZWxsYW5lb3VzIFV0aWxpdHkgbGlicmFyaWVzIgorCitERVNDUklQVElPTiA9ICJUaGUgWG11IExpYnJhcnkgaXMgYSBjb2xsZWN0aW9uIG9mIG1pc2NlbGxhbmVvdXMgKHNvbWUgXAorbWlnaHQgc2F5IHJhbmRvbSkgdXRpbGl0eSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdXNlZnVsIGluIGJ1aWxkaW5nIFwKK3ZhcmlvdXMgYXBwbGljYXRpb25zIGFuZCB3aWRnZXRzLiBUaGlzIGxpYnJhcnkgaXMgcmVxdWlyZWQgYnkgdGhlIEF0aGVuYSBcCitXaWRnZXRzLiBBIHN1YnNldCBvZiB0aGUgZnVuY3Rpb25zIHRoYXQgZG8gbm90IHJlbHkgb24gdGhlIEF0aGVuYSBcCitXaWRnZXRzIChsaWJYYXcpIG9yIFggVG9vbGtpdCBJbnN0cmluc2ljcyAobGliWHQpIGFyZSBwcm92aWRlZCBpbiBhIFwKK3NlY29uZCBsaWJyYXJ5LCBsaWJYbXV1LiIKKworCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kZWYzZDhlNGU5YzQyMDA0ZjE5NDFmYTIyZjAxZGMxOCIKKworREVQRU5EUyArPSAibGlieHQgbGlieGV4dCIKK1BST1ZJREVTID0gInhtdSIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYbXUiCisKK0xFQURfU09OQU1FID0gImxpYlhtdSIKKworUEFDS0FHRVMgPSsgImxpYnhtdXUiCisKK0ZJTEVTX2xpYnhtdXUgPSAiJHtsaWJkaXJ9L2xpYlhtdXUuc28uKiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0MWQ5MmFiNjI3ZGZhMDY1NjgwNzYwNDNmM2UwODllNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3NTZlZGM3YzM4MzI1NGVlZjhiNGUxYjczM2MzYmYxZGMwNjFiNTIzYzlmOTgzM2FjNzA1ODM3OGI4MzQ5ZDBiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHBtXzMuNS4xMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhwbV8zLjUuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1ODc0YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhwbV8zLjUuMTEuYmIKQEAgLTAsMCArMSwyNyBAQAorcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKKyMgbGlieHBtIHJlcXVpcmVzIHhnZXR0ZXh0IHRvIGJ1aWxkCitpbmhlcml0IGdldHRleHQKKworU1VNTUFSWSA9ICJYcG06IFggUGl4bWFwIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJYcG0gcHJvdmlkZXMgc3VwcG9ydCBhbmQgY29tbW9uIG9wZXJhdGlvbiBmb3IgdGhlIFhQTSBcCitwaXhtYXAgZm9ybWF0LCB3aGljaCBpcyBjb21tb25seSB1c2VkIGluIGxlZ2FjeSBYIGFwcGxpY2F0aW9ucy4gIFhQTSBpcyBcCithbiBleHRlbnNpb24gb2YgdGhlIG1vbm9jaHJvbWUgWEJNIGJpdG1hcCBzcGVjaWZpY2llZCBpbiB0aGUgWCBcCitwcm90b2NvbC4iCisKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTFmNDI3MGIwMTJlY2Q0YWIxYTE2NGY1ZjRlZDZjZjciCitERVBFTkRTICs9ICJsaWJ4ZXh0IGxpYnNtIGxpYnh0IgorUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYcG0iCisKK1BBQ0tBR0VTID0rICJzeHBtIGN4cG0iCitGSUxFU19jeHBtID0gIiR7YmluZGlyfS9jeHBtIgorRklMRVNfc3hwbSA9ICIke2JpbmRpcn0vc3hwbSIKKworU1JDX1VSSVttZDVzdW1dID0gIjc2OWVlMTJhNDM2MTFjZGViZDM4MDk0ZWFmODNmM2YwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM1YmRhZmE1MWQxYWUzMDA4NmZhYzAxYWI4M2JlOGQ0N2ZlMTE3YjIzOGQzNDM3ZjhlOTY1NDM0MDkwZTA0MWMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHJhbmRyXzEuNS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHJhbmRyXzEuNS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYmJhZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4cmFuZHJfMS41LjAuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJYUmFuZFI6IFggUmVzaXplLCBSb3RhdGUgYW5kIFJlZmxlY3QgZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBYIFJlc2l6ZSwgUm90YXRlIGFuZCBSZWZsZWN0IEV4dGVuc2lvbiwgY2FsbGVkIFJhbmRSIFwKK2ZvciBzaG9ydCwgYnJpbmdzIHRoZSBhYmlsaXR5IHRvIHJlc2l6ZSwgcm90YXRlIGFuZCByZWZsZWN0IHRoZSByb290IFwKK3dpbmRvdyBvZiBhIHNjcmVlbi4gSXQgaXMgYmFzZWQgb24gdGhlIFggUmVzaXplIGFuZCBSb3RhdGUgRXh0ZW5zaW9uIGFzIFwKK3NwZWNpZmllZCBpbiB0aGUgUHJvY2VlZGluZ3Mgb2YgdGhlIDIwMDEgVXNlbml4IFRlY2huaWNhbCBDb25mZXJlbmNlIFwKK1tSQU5EUl0uIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jOWQxYTIxMThhNmNkNTcyNzUyMWRiOGU3YTJmZWU2OSIKKworREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEgcmFuZHJwcm90byBsaWJ4cmVuZGVyIGxpYnhleHQiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWHJhbmRyIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzMDk3NjI4NjdlNDFjNmZkODEzZGE4ODBkOGExYmM5MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2Zjg2NDk1OWI3ZmMzNWRiMTE3NTRiMjcwZDcxMTA2ZWY1YjVjZjM2MzQyNmFhNTg1ODljYjhhYzgyNjZkZTU4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHJlbmRlcl8wLjkuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhyZW5kZXJfMC45LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkZTA0MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhyZW5kZXJfMC45LjkuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJYUmVuZGVyOiBYIFJlbmRlcmluZyBFeHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiVGhlIFggUmVuZGVyaW5nIEV4dGVuc2lvbiAoUmVuZGVyKSBpbnRyb2R1Y2VzIGRpZ2l0YWwgXAoraW1hZ2UgY29tcG9zaXRpb24gYXMgdGhlIGZvdW5kYXRpb24gb2YgYSBuZXcgcmVuZGVyaW5nIG1vZGVsIHdpdGhpbiB0aGUgXAorWCBXaW5kb3cgU3lzdGVtLiBSZW5kZXJpbmcgZ2VvbWV0cmljIGZpZ3VyZXMgaXMgYWNjb21wbGlzaGVkIGJ5IFwKK2NsaWVudC1zaWRlIHRlc3NlbGxhdGlvbiBpbnRvIGVpdGhlciB0cmlhbmdsZXMgb3IgdHJhcGV6b2lkcy4gIFRleHQgaXMgXAorZHJhd24gYnkgbG9hZGluZyBnbHlwaHMgaW50byB0aGUgc2VydmVyIGFuZCByZW5kZXJpbmcgc2V0cyBvZiB0aGVtLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDhiYzcxOTg2ZDNiOWIzNjM5ZjZkZmQ2ZmFjOGYxOTYiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIHJlbmRlcnByb3RvIHhwcm90byB4ZG1jcCIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYcmVuZGVyIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1ZGI5Mjk2MmIxMjRjYTNhODE0N2RhYWU0YWRiZDYyMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmYzJmZTU3OTgwYTE0MDkyNDI2ZGZmY2QxZjJkOWRlMDk4N2I5ZDQwYWRlYTY2M2JkNzBkNjM0MmMwZTliZTFhIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHJlc18xLjAuNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhyZXNfMS4wLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMwNGM0NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhyZXNfMS4wLjcuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJYUmVzOiBYIFJlc291cmNlIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJYUmVzIHByb3ZpZGVzIGFuIFggV2luZG93IFN5c3RlbSBjbGllbnQgaW50ZXJmYWNlIHRvIFwKK3RoZSBSZXNvdXJjZSBleHRlbnNpb24gdG8gdGhlIFggcHJvdG9jb2wuICBUaGUgUmVzb3VyY2UgZXh0ZW5zaW9uIGFsbG93cyBcCitmb3IgWCBjbGllbnRzIHRvIHNlZSBhbmQgbW9uaXRvciB0aGUgWCByZXNvdXJjZSB1c2FnZSBvZiB2YXJpb3VzIGNsaWVudHMgXAorKHBpeG1hcHMsIGV0IGFsKS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PThjODk0NDFhOGRmMjYxYmRjNTY1ODc0NjVlMTNjN2ZhIgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IHJlc291cmNlcHJvdG8iCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWHJlcyIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ1ZWYyOTIwNmE2YjU4MjU0YzgxYmVhMjhlYzZjOTVmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI2ODk5MDU0YWE4N2Y4MWIxN2JlY2M2OGU4NjQ1YjI0MGYxNDA0NjRjZjkwYzQyNjE2ZWJiMjYzZWM1ZmEwZTUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4c2NybnNhdmVyXzEuMi4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHNjcm5zYXZlcl8xLjIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTRlNWRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHNjcm5zYXZlcl8xLjIuMi5iYgpAQCAtMCwwICsxLDIzIEBACityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYc2NybnNhdmVyOiBYIFNjcmVlbiBTYXZlciBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiVGhlIFggV2luZG93IFN5c3RlbSBwcm92aWRlcyBzdXBwb3J0IGZvciBjaGFuZ2luZyB0aGUgXAoraW1hZ2Ugb24gYSBkaXNwbGF5IHNjcmVlbiBhZnRlciBhIHVzZXItc2V0dGFibGUgcGVyaW9kIG9mIGluYWN0aXZpdHkgdG8gXAorYXZvaWQgYnVybmluZyB0aGUgY2F0aG9kZSByYXkgdHViZSBwaG9zcGhvcnMuIEhvd2V2ZXIsIG5vIGludGVyZmFjZXMgYXJlIFwKK3Byb3ZpZGVkIGZvciB0aGUgdXNlciB0byBjb250cm9sIHRoZSBpbWFnZSB0aGF0IGlzIGRyYXduLiBUaGlzIGV4dGVuc2lvbiBcCithbGxvd3MgYW4gZXh0ZXJuYWwgXCJzY3JlZW4gc2F2ZXJcIiBjbGllbnQgdG8gZGV0ZWN0IHdoZW4gdGhlIGFsdGVybmF0ZSBcCitpbWFnZSBpcyB0byBiZSBkaXNwbGF5ZWQgYW5kIHRvIHByb3ZpZGUgdGhlIGdyYXBoaWNzLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yMWZkMTU0ZWU3NTc4MTM2MzJhZGE4NzFhMzQxMTNmYiIKKworREVQRU5EUyArPSAibGlieGV4dCBzY3Juc2F2ZXJwcm90byIKK1BST1ZJREVTID0gImxpYnhzcyIKK1JSRVBMQUNFU18ke1BOfSA9ICJsaWJ4c3MiCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhTY3JuU2F2ZXIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3YTc3M2IxNjE2NWUzOWU5Mzg2NTBiY2M5MDI3YzFkNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZmYxZWZhNzM0MWM3ZjM0YmNmOWIxN2M4OTY0OGQ2MzI1ZGRhYWUyMmUzOTA0ZTA5MTc5NGUwYjQ0MjZjZTFkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHNobWZlbmNlXzEuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhzaG1mZW5jZV8xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUzNGIxZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhzaG1mZW5jZV8xLjIuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJTaGFyZWQgbWVtb3J5ICdTeW5jRmVuY2UnIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgbGlicmFyeSBvZmZlcnMgYSBDUFUtYmFzZWQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZSBjb21wYXRpYmxlIFwKK3dpdGggdGhlIFggU3luY0ZlbmNlIG9iamVjdHMgdGhhdCBjYW4gYmUgc2hhcmVkIGJldHdlZW4gcHJvY2Vzc2VzIFwKK3VzaW5nIGZpbGUgZGVzY3JpcHRvciBwYXNzaW5nLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDdlNTA4Y2EyODBmZGU5NzkwNmVhY2I3Nzg5MmMzYWMiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2NjY2MmU3Njg5OTExMmMwZjk5ZTIyZjJmYzc3NWE3ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkMjFiMmQxZmQ3OGMxZWZiZTFmMmMxNmRhZTFjYjIzZjhmZDIzMWRjZjg5MTQ2NWI4ZGViZTYzNmE5MDU0YjBjIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHQvbGlieHRfZml4X2Zvcl94MzIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dC9saWJ4dF9maXhfZm9yX3gzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTZjNzU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHQvbGlieHRfZml4X2Zvcl94MzIucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoaXMgZml4ZXMgY29tcGlsYXRpb24gd2l0aCB4MzIgdG9vbGNoYWluLgorCitSZWNlaXZlZCB0aGlzIHBhdGNoIGZyb20gSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMTIvMQorCisKKy0tLSBsaWJYdC0xLjEuMS9pbmNsdWRlL1gxMS9YdG9zLmgueDMyCTIwMTEtMDItMDggMDc6NTY6NDAuMDAwMDAwMDAwIC0wODAwCisrKysgbGliWHQtMS4xLjEvaW5jbHVkZS9YMTEvWHRvcy5oCTIwMTEtMTEtMzAgMTc6MTk6MjcuNDczMzQ5NzcwIC0wODAwCitAQCAtNjIsNyArNjIsNyBAQCBTT0ZUV0FSRS4KKyAgICAgZGVmaW5lZChfX3NwYXJjNjRfXykgfHwgXAorICAgICBkZWZpbmVkKF9fczM5MHhfXykgfHwgXAorICAgICAoZGVmaW5lZChfX2hwcGFfXykgJiYgZGVmaW5lZChfX0xQNjRfXykpIHx8IFwKKy0gICAgZGVmaW5lZChfX2FtZDY0X18pIHx8IGRlZmluZWQoYW1kNjQpIHx8IFwKKysgICAgKChkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5lZChhbWQ2NCkpICYmIGRlZmluZWQoX19MUDY0X18pKSB8fCBcCisgICAgIGRlZmluZWQoX19wb3dlcnBjNjRfXykgfHwgXAorICAgICAoZGVmaW5lZChzZ2kpICYmIChfTUlQU19TWkxPTkcgPT0gNjQpKQorICNkZWZpbmUgTE9ORzY0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dF8xLjEuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh0XzEuMS41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZWQwYmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dF8xLjEuNS5iYgpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gIlh0OiBYIFRvb2xraXQgSW50cmluc2ljcyBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGUgSW50cmluc2ljcyBhcmUgYSBwcm9ncmFtbWluZyBsaWJyYXJ5IHRhaWxvcmVkIHRvIHRoZSBcCitzcGVjaWFsIHJlcXVpcmVtZW50cyBvZiB1c2VyIGludGVyZmFjZSBjb25zdHJ1Y3Rpb24gd2l0aGluIGEgbmV0d29yayBcCit3aW5kb3cgc3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIFggV2luZG93IFN5c3RlbS4gVGhlIEludHJpbnNpY3MgYW5kIGEgXAord2lkZ2V0IHNldCBtYWtlIHVwIGFuIFggVG9vbGtpdC4gVGhlIEludHJpbnNpY3MgcHJvdmlkZSB0aGUgYmFzZSBcCittZWNoYW5pc20gbmVjZXNzYXJ5IHRvIGJ1aWxkIGEgd2lkZSB2YXJpZXR5IG9mIGludGVyb3BlcmF0aW5nIHdpZGdldCBcCitzZXRzIGFuZCBhcHBsaWNhdGlvbiBlbnZpcm9ubWVudHMuIFRoZSBJbnRyaW5zaWNzIGFyZSBhIGxheWVyIG9uIHRvcCBvZiBcCitYbGliLCB0aGUgQyBMaWJyYXJ5IFggSW50ZXJmYWNlLiBUaGV5IGV4dGVuZCB0aGUgZnVuZGFtZW50YWwgXAorYWJzdHJhY3Rpb25zIHByb3ZpZGVkIGJ5IHRoZSBYIFdpbmRvdyBTeXN0ZW0gd2hpbGUgc3RpbGwgcmVtYWluaW5nIFwKK2luZGVwZW5kZW50IG9mIGFueSBwYXJ0aWN1bGFyIHVzZXIgaW50ZXJmYWNlIHBvbGljeSBvciBzdHlsZS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTY1NjViMWUwMDk0ZWExY2FhZTA5NzFjYzQwMzVmMzQzIgorCisKK0RFUEVORFMgKz0gInV0aWwtbGludXggbGlieGNiIGxpYnNtIHZpcnR1YWwvbGlieDExIGticHJvdG8gbGlieGRtY3AiCitQUk9WSURFUyA9ICJ4dCIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYdCIKKworU1JDX1VSSSArPSAgImZpbGU6Ly9saWJ4dF9maXhfZm9yX3gzMi5wYXRjaCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLXhrYiIKKworU1JDX1VSSVttZDVzdW1dID0gIjhmNWI1NTc2ZmJhYmJhMjlhMDVmM2NhMjIyNmY3NGQzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ2ZWViNmJlNzgwMjExZmRkOThjNTEwOTI4NjYxOGY2NzA3NzEyMjM1ZmRkMTlkZjRjZTFlNjk1NGYzNDlmMWEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dHN0XzEuMi4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHRzdF8xLjIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjBiY2YzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHRzdF8xLjIuMi5iYgpAQCAtMCwwICsxLDIwIEBACityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYVGVzdDogWCBUZXN0IGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGlzIGV4dGVuc2lvbiBpcyBhIG1pbmltYWwgc2V0IG9mIGNsaWVudCBhbmQgc2VydmVyIFwKK2V4dGVuc2lvbnMgcmVxdWlyZWQgdG8gY29tcGxldGVseSB0ZXN0IHRoZSBYMTEgc2VydmVyIHdpdGggbm8gdXNlciBcCitpbnRlcnZlbnRpb24uIgorCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWJiNGY4OTk3MmMzODY5ZjYxN2Y2MWMxYTc5YWQxOTUyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9YVGVzdC5jO2JlZ2lubGluZT0yO2VuZGxpbmU9MzI7bWQ1PWIxYzhjOWRmZjg0MmI0ZDViODljYTVmYTMyYzQwZTk5IgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IHJlY29yZHByb3RvIGlucHV0cHJvdG8gbGlieGkiCitQUk9WSURFUyA9ICJ4dHN0IgorUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYdHN0IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjVjNmIzNjZhYzNkYzdhMTJjNWQ3OTgxNmNlOTZhNTkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWYwYTdmZmQ1NzdlNWYxYTI1YjE2NjNiMzc1Njc5NTI5NjYzYTE4ODAxNTFiZWFhNzNlOTE4NmM4MzA5ZjZkOSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh2XzEuMC4xMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh2XzEuMC4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDJiOGI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHZfMS4wLjEwLmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiWHY6IFggVmlkZW8gZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYlh2IHByb3ZpZGVzIGFuIFggV2luZG93IFN5c3RlbSBjbGllbnQgaW50ZXJmYWNlIHRvIHRoZSBcCitYIFZpZGVvIGV4dGVuc2lvbiB0byB0aGUgWCBwcm90b2NvbC4gVGhlIFggVmlkZW8gZXh0ZW5zaW9uIGFsbG93cyBmb3IgXAorYWNjZWxlcmF0ZWQgZHJhd2luZyBvZiB2aWRlb3MuICBIYXJkd2FyZSBhZGFwdG9ycyBhcmUgZXhwb3NlZCB0byBcCitjbGllbnRzLCB3aGljaCBtYXkgZHJhdyBpbiBhIG51bWJlciBvZiBjb2xvdXJzcGFjZXMsIGluY2x1ZGluZyBZVVYuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04MjdkYTlhZmFiMWY3MjdmMmE2NjU3NDYyOWUwZjM5YyIKKworREVQRU5EUyArPSAibGlieGV4dCB2aWRlb3Byb3RvIgorCitYT1JHX1BOID0gImxpYlh2IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTBhZjQ5ZDdkNzU4Yjk5MGU2ZmVmNjI5NzIyZDRhY2EiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTVmZTkyZjg2ODZjZTg2MTJlMmMxYmZhZjU4YzA1NzcxNTUzNDQxOWRhNzAwYmRhOGQ1MTdiMWQ5NzkxNDUyNSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh2bWNfMS4wLjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dm1jXzEuMC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZTg0OTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dm1jXzEuMC45LmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiWHZNQzogWCBWaWRlbyBNb3Rpb24gQ29tcGVuc2F0aW9uIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJYdk1DIGV4dGVuZHMgdGhlIFggVmlkZW8gZXh0ZW5zaW9uIChYdikgYW5kIGVuYWJsZXMgXAoraGFyZHdhcmUgcmVuZGVyZWQgbW90aW9uIGNvbXBlbnNhdGlvbiBzdXBwb3J0LiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MGEyMDdmMDhkNDk2MTQ4OWM1NTA0NmM5YTVlNTAwZGEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vd3JhcHBlci9Ydk1DV3JhcHBlci5jO2VuZGxpbmU9MjY7bWQ1PTUxNTFkYWE4MTcyYTNmMWJiMGNiMGUwZmYxNTdkOWRlIgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IGxpYnh2IHZpZGVvcHJvdG8iCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWHZNQyIKKworU1JDX1VSSVttZDVzdW1dID0gImViYTZiNzM4ZWQ1ZmRjZDhmNDIwM2Q3YzhhNDcwYzc5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA3MDNkN2RmZjZmZmMxODRmMTczNWNhNWQ0ZWI5ZGJiNDAyYjUyMmUwOGUwMDhmMmY5NmFlZTE2YzQwYTU3NTYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4eGY4NmRnYV8xLjEuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh4Zjg2ZGdhXzEuMS40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NWEzOTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4eGY4NmRnYV8xLjEuNC5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYRnJlZTg2LURHQTogWEZyZWU4NiBEaXJlY3QgR3JhcGhpY3MgQWNjZXNzIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJYeGY4NmRnYSBwcm92aWRlcyB0aGUgWEZyZWU4Ni1ER0EgZXh0ZW5zaW9uLCB3aGljaCBcCithbGxvd3MgZGlyZWN0IGdyYXBoaWNzIGFjY2VzcyB0byBhIGZyYW1lYnVmZmVyLWxpa2UgcmVnaW9uLCBhbmQgYWxzbyBcCithbGxvd3MgcmVsYXRpdmUgbW91c2UgcmVwb3J0aW5nLCBldCBhbC4gIEl0IGlzIG1haW5seSB1c2VkIGJ5IGdhbWVzIGFuZCBcCitlbXVsYXRvcnMgZm9yIGdhbWVzLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YWJiOTlhYzEyNWY4NGY0MjRhNDI3ODE1Mzk4OGUzMmYiCisKK0RFUEVORFMgKz0gImxpYnhleHQgeGY4NmRnYXByb3RvIgorCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDdkZDliOWRmMzM2YjdkZDQwMjhiNmI1NjU0MmZmMmMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGVlY2Q0YjZjMWRmOWEzNzA0YzA0NzMzYzJmNGZhOTNlZjQ2OWI1NTAyOGFmNTUxMGIyNTgxOGUyNDU2Yzc3ZSIKKworWE9SR19QTiA9ICJsaWJYeGY4NmRnYSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh4Zjg2bWlzY18xLjAuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh4Zjg2bWlzY18xLjAuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjZmMWY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHhmODZtaXNjXzEuMC4zLmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiWEZyZWU4Ni1NaXNjOiBYRnJlZTg2IG1pc2NlbGxhbmVvdXMgZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBYRnJlZTg2LU1pc2MgZXh0ZW5zaW9uLCBwcm92aWRlcyBhIG1lYW5zIHRvIGFjY2VzcyBcCitpbnB1dCBkZXZpY2UgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBzcGVjaWZpYyB0byB0aGUgWEZyZWU4Ni9Yb3JnIEREWC4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI3YzkxZWNjNDM1YmQzZDJiZmFkODY4OTE0Yzk0YjQ1IgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IHhmODZtaXNjcHJvdG8iCitQUk9WSURFUyA9ICJ4eGY4Nm1pc2MiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWHhmODZtaXNjIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNmJjMGJmNzg5MDlmZDcxMDIxYzQ2NmM3OTNkNDM4NWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTYzZjQyMDA4NjJlZmQzMzM0YzMzYTY2OWUwYTBhYWU1YmFiMzFmMzk5OGRiNzViODdhOTlhNjk3Y2MyNmI1YiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHhmODZ2bV8xLjEuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh4Zjg2dm1fMS4xLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVmODdkMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh4Zjg2dm1fMS4xLjQuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJYRnJlZTg2LVZNOiBYRnJlZTg2IHZpZGVvIG1vZGUgZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYlh4Zjg2dm0gcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIHRoZSBcCitYRnJlZTg2LVZpZE1vZGVFeHRlbnNpb24gZXh0ZW5zaW9uLCB3aGljaCBhbGxvd3MgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBcCitnZXQgYW5kIHNldCB2aWRlbyBtb2RlIHRpbWluZ3MgaW4gZXh0ZW5zaXZlIGRldGFpbC4gIEl0IGlzIHVzZWQgYnkgdGhlIFwKK3h2aWR0dW5lIHByb2dyYW0gaW4gcGFydGljdWxhci4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWZhMGI5YzQ2MmQ4ZjJmMTNlYmEyNjQ5MmQ0MmVhNjNkIgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IHhmODZ2aWRtb2RlcHJvdG8iCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWHhmODZ2bSIKKworU1JDX1VSSVttZDVzdW1dID0gIjI5OGI4ZmZmODJkZjE3MzA0ZGZkYjVmZTQwNjZmZTNhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFmZWUyN2Y5M2M1ZjMxYzBhZDU4Mjg1MmMwZmIzNmQ1MGU0ZGU3Y2Q1ODVmY2Y2NTVlMjc4YTYzM2Q4NWNkNTciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW4vMDAwMS1BUk0tcWVtdS1yZWxhdGVkLXdvcmthcm91bmRzLWluLWNwdS1mZWF0dXJlcy1kZXRlY3RpLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuLzAwMDEtQVJNLXFlbXUtcmVsYXRlZC13b3JrYXJvdW5kcy1pbi1jcHUtZmVhdHVyZXMtZGV0ZWN0aS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTY5ZGNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuLzAwMDEtQVJNLXFlbXUtcmVsYXRlZC13b3JrYXJvdW5kcy1pbi1jcHUtZmVhdHVyZXMtZGV0ZWN0aS5wYXRjaApAQCAtMCwwICsxLDE0NCBAQAorRnJvbSBhMGY1M2UxZGJiMzg1MWJiMGYwZWZjZmRiZDU2NWIwNWU0YmU5Y2FjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuZHJlYXM9MjBNPUMzPUJDbGxlcj89IDxzY2huaXR6ZWx0b255QGdvb2dsZW1haWwuY29tPgorRGF0ZTogVGh1LCAyMyBBdWcgMjAxMiAxODoxMDo1NyArMDIwMAorU3ViamVjdDogW1BBVENIIDEvMl0gQVJNOiBxZW11IHJlbGF0ZWQgd29ya2Fyb3VuZHMgaW4gY3B1IGZlYXR1cmVzIGRldGVjdGlvbgorIGNvZGUKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworVGhpcyB3YXMgcG9ydGVkIGZyb20gbWV0YS1vZSdzIHBhdGNoIFsxXS4gVGhlIG9yaWdpbmFsIHBpeG1hbiBwYXRjaCBpcyBmb3VuZAorYXQgWzJdLgorCitbMV0gaHR0cDovL2NnaXQub3BlbmVtYmVkZGVkLm9yZy9tZXRhLW9wZW5lbWJlZGRlZC90cmVlL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW4tMC4yNi4yLzAwMDEtQVJNLXFlbXUtcmVsYXRlZC13b3JrYXJvdW5kcy1pbi1jcHUtZmVhdHVyZXMtZGV0ZWN0aS5wYXRjaAorWzJdIGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvYXJjaGl2ZXMvcGl4bWFuLzIwMTEtSmFudWFyeS8wMDA5MDYuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXSBxZW11IGZpeAorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIE3DvGxsZXIgPHNjaG5pdHplbHRvbnlAZ29vZ2xlbWFpbC5jb20+CistLS0KKyBwaXhtYW4vcGl4bWFuLWFybS5jIHwgICA4MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgNjUgaW5zZXJ0aW9ucygrKSwgMTcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9waXhtYW4vcGl4bWFuLWFybS5jIGIvcGl4bWFuL3BpeG1hbi1hcm0uYworaW5kZXggMjMzNzRlNC4uZDk4YmRhNiAxMDA2NDQKKy0tLSBhL3BpeG1hbi9waXhtYW4tYXJtLmMKKysrKyBiL3BpeG1hbi9waXhtYW4tYXJtLmMKK0BAIC0xMjksMTYgKzEyOSwzNSBAQCBkZXRlY3RfY3B1X2ZlYXR1cmVzICh2b2lkKQorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKysjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPGVsZi5oPgorIAorKy8qCisrICogVGhlIHdob2xlIENQVSBjYXBhYmlsaXRpZXMgZGV0ZWN0aW9uIGlzIGEgYml0IHVnbHk6IHdoZW4gcnVubmluZyBpbgorKyAqIHVzZXJzcGFjZSBxZW11LCB3ZSBzZWUgL3Byb2Mvc2VsZi9hdXh2IGZyb20gdGhlIGhvc3Qgc3lzdGVtLiBUbyBtYWtlCisrICogZXZlcnl0aGluZyBldmVuIHdvcnNlLCB0aGUgc2l6ZSBvZiBlYWNoIHZhbHVlIGlzIDY0LWJpdCB3aGVuIHJ1bm5pbmcKKysgKiBvbiBhIDY0LWJpdCBob3N0IHN5c3RlbS4gU28gdGhlIGRhdGEgaXMgdG90YWxseSBib2d1cyBiZWNhdXNlIHdlIGV4cGVjdAorKyAqIDMyLWJpdCB2YWx1ZXMuIEFzIEFUX1BMQVRGT1JNIHZhbHVlIGlzIHVzZWQgYXMgYSBwb2ludGVyLCBpdCBtYXkgY2F1c2UKKysgKiBzZWdmYXVsdCAobnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIG9uIHg4Ni02NCBob3N0KS4gU28gaW4gb3JkZXIgdG8gYmUKKysgKiBvbiBhIHNhZmUgc2lkZSwgd2UgcmVxdWlyZSB0aGF0IEFUX1BMQVRGT1JNIHZhbHVlIGlzIGZvdW5kIG9ubHkgb25jZSwKKysgKiBhbmQgaXQgaGFzIG5vbi16ZXJvIHZhbHVlICh0aGlzIGlzIHN0aWxsIG5vdCB0b3RhbGx5IHJlbGlhYmxlIGZvciBhIGJpZworKyAqIGVuZGlhbiA2NC1iaXQgaG9zdCBzeXN0ZW0gcnVubmluZyBxZW11IGFuZCBtYXkgdGhlb3JldGljYWxseSBmYWlsKS4KKysgKi8KKysjZGVmaW5lIEFSTV9IV0NBUF9WRlAgNjQKKysjZGVmaW5lIEFSTV9IV0NBUF9JV01NWFQgNTEyCisrI2RlZmluZSBBUk1fSFdDQVBfTkVPTiA0MDk2CisrCisgc3RhdGljIGFybV9jcHVfZmVhdHVyZXNfdAorIGRldGVjdF9jcHVfZmVhdHVyZXMgKHZvaWQpCisgeworICAgICBhcm1fY3B1X2ZlYXR1cmVzX3QgZmVhdHVyZXMgPSAwOworICAgICBFbGYzMl9hdXh2X3QgYXV4OworICAgICBpbnQgZmQ7CisrICAgIHVpbnQzMl90IGh3Y2FwID0gMDsKKysgICAgY29uc3QgY2hhciAqcGxhdCA9IE5VTEw7CisrICAgIGludCBwbGF0X2NudCA9IDA7CisgCisgICAgIGZkID0gb3BlbiAoIi9wcm9jL3NlbGYvYXV4diIsIE9fUkRPTkxZKTsKKyAgICAgaWYgKGZkID49IDApCitAQCAtMTQ3LDMyICsxNjYsNjEgQEAgZGV0ZWN0X2NwdV9mZWF0dXJlcyAodm9pZCkKKyAJeworIAkgICAgaWYgKGF1eC5hX3R5cGUgPT0gQVRfSFdDQVApCisgCSAgICB7CistCQl1aW50MzJfdCBod2NhcCA9IGF1eC5hX3VuLmFfdmFsOworLQorLQkJLyogaGFyZGNvZGUgdGhlc2UgdmFsdWVzIHRvIGF2b2lkIGRlcGVuZGluZyBvbiBzcGVjaWZpYworLQkJICogdmVyc2lvbnMgb2YgdGhlIGh3Y2FwIGhlYWRlciwgZS5nLiBIV0NBUF9ORU9OCistCQkgKi8KKy0JCWlmICgoaHdjYXAgJiA2NCkgIT0gMCkKKy0JCSAgICBmZWF0dXJlcyB8PSBBUk1fVkZQOworLQkJaWYgKChod2NhcCAmIDUxMikgIT0gMCkKKy0JCSAgICBmZWF0dXJlcyB8PSBBUk1fSVdNTVhUOworLQkJLyogdGhpcyBmbGFnIGlzIG9ubHkgcHJlc2VudCBvbiBrZXJuZWwgMi42LjI5ICovCistCQlpZiAoKGh3Y2FwICYgNDA5NikgIT0gMCkKKy0JCSAgICBmZWF0dXJlcyB8PSBBUk1fTkVPTjsKKysJCWh3Y2FwID0gYXV4LmFfdW4uYV92YWw7CisgCSAgICB9CisgCSAgICBlbHNlIGlmIChhdXguYV90eXBlID09IEFUX1BMQVRGT1JNKQorIAkgICAgeworLQkJY29uc3QgY2hhciAqcGxhdCA9IChjb25zdCBjaGFyKikgYXV4LmFfdW4uYV92YWw7CistCistCQlpZiAoc3RybmNtcCAocGxhdCwgInY3bCIsIDMpID09IDApCisrCQlwbGF0ID0gKGNvbnN0IGNoYXIqKSBhdXguYV91bi5hX3ZhbDsKKysJCXBsYXRfY250Kys7CisrCSAgICB9CisrCX0KKysJY2xvc2UgKGZkKTsKKysJaWYgKHBsYXQgPT0gTlVMTCB8fCBwbGF0X2NudCAhPSAxIHx8ICpwbGF0ICE9ICd2JykKKysJeworKwkgICAgLyoKKysJICAgICAqIFNvbWV0aGluZyBzZWVtcyB0byBiZSByZWFsbHkgd3JvbmcsIG1vc3QgbGlrZWx5IHdlIGFyZQorKwkgICAgICogcnVubmluZyB1bmRlciBxZW11LiBMZXQncyB1c2UgbWFjaGluZSB0eXBlIGZyb20gInVuYW1lIiBmb3IKKysJICAgICAqIENQVSBjYXBhYmlsaXRpZXMgZGV0ZWN0aW9uOgorKwkgICAgICogaHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL3FlbXUtZGV2ZWwgYXQgbm9uZ251Lm9yZy9tc2cyMjIxMi5odG1sCisrCSAgICAgKi8KKysJICAgIHN0cnVjdCB1dHNuYW1lIHU7CisrCSAgICBod2NhcCA9IDA7IC8qIGNsZWFyIGh3Y2FwLCBiZWNhdXNlIGl0IGlzIGJvZ3VzICovCisrCSAgICBpZiAodW5hbWUgKCZ1KSA9PSAwKQorKwkgICAgeworKwkJaWYgKHN0cmNtcCAodS5tYWNoaW5lLCAiYXJtdjdsIikgPT0gMCkKKysJCXsKKyAJCSAgICBmZWF0dXJlcyB8PSAoQVJNX1Y3IHwgQVJNX1Y2KTsKKy0JCWVsc2UgaWYgKHN0cm5jbXAgKHBsYXQsICJ2NmwiLCAzKSA9PSAwKQorKwkJICAgIGh3Y2FwIHw9IEFSTV9IV0NBUF9WRlA7ICAvKiBxZW11IGlzIHN1cHBvc2VkIHRvIGVtdWxhdGUgdmZwICovCisrCQkgICAgaHdjYXAgfD0gQVJNX0hXQ0FQX05FT047IC8qIHFlbXUgaXMgc3VwcG9zZWQgdG8gZW11bGF0ZSBuZW9uICovCisrCQl9CisrCQllbHNlIGlmIChzdHJjbXAgKHUubWFjaGluZSwgImFybXY2bCIpID09IDApCisrCQl7CisgCQkgICAgZmVhdHVyZXMgfD0gQVJNX1Y2OworKwkJICAgIGh3Y2FwIHw9IEFSTV9IV0NBUF9WRlA7ICAvKiBxZW11IGlzIHN1cHBvc2VkIHRvIGVtdWxhdGUgdmZwICovCisrCQl9CisgCSAgICB9CisgCX0KKy0JY2xvc2UgKGZkKTsKKysJZWxzZSBpZiAoc3RybmNtcCAocGxhdCwgInY3bCIsIDMpID09IDApCisrCXsKKysJICAgIGZlYXR1cmVzIHw9IChBUk1fVjcgfCBBUk1fVjYpOworKwl9CisrCWVsc2UgaWYgKHN0cm5jbXAgKHBsYXQsICJ2NmwiLCAzKSA9PSAwKQorKwl7CisrCSAgICBmZWF0dXJlcyB8PSBBUk1fVjY7CisrCX0KKyAgICAgfQorIAorKyAgICAvKiBoYXJkY29kZSB0aGVzZSB2YWx1ZXMgdG8gYXZvaWQgZGVwZW5kaW5nIG9uIHNwZWNpZmljCisrICAgICAqIHZlcnNpb25zIG9mIHRoZSBod2NhcCBoZWFkZXIsIGUuZy4gSFdDQVBfTkVPTgorKyAgICAgKi8KKysgICAgaWYgKChod2NhcCAmIEFSTV9IV0NBUF9WRlApICE9IDApCisrICAgICAgICBmZWF0dXJlcyB8PSBBUk1fVkZQOworKyAgICBpZiAoKGh3Y2FwICYgQVJNX0hXQ0FQX0lXTU1YVCkgIT0gMCkKKysgICAgICAgIGZlYXR1cmVzIHw9IEFSTV9JV01NWFQ7CisrICAgIC8qIHRoaXMgZmxhZyBpcyBvbmx5IHByZXNlbnQgb24ga2VybmVsIDIuNi4yOSAqLworKyAgICBpZiAoKGh3Y2FwICYgQVJNX0hXQ0FQX05FT04pICE9IDApCisrICAgICAgICBmZWF0dXJlcyB8PSBBUk1fTkVPTjsKKysKKyAgICAgcmV0dXJuIGZlYXR1cmVzOworIH0KKyAKKy0tIAorMS43LjYuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW4vYXNtX2luY2x1ZGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW4vYXNtX2luY2x1ZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUyYTU3MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbi9hc21faW5jbHVkZS5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGaXhlcyBlcnJvcnMgbGlrZQorCitBc3NlbWJsZXIgbWVzc2FnZXM6CitGYXRhbCBlcnJvcjogY2FuJ3QgY3JlYXRlIC5saWJzL3BpeG1hbi1taXBzLWRzcHIyLWFzbS5vOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK2l0IHdvcmtzIHdpdGggZ2xpYmMgYmVjYXVzZSBpdCB1c2VzIGdjYyBmaXhlZC1oZWFkZXJzIGJ1dCB0aGF0cyBub3QgcmlnaHQuCisKK1dlIG1vdmUgdGhlIGluY2x1ZGUgdW5kZXIgQyBibG9jaworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitJbmRleDogcGl4bWFuLTAuMzIuNi9waXhtYW4vcGl4bWFuLXByaXZhdGUuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBpeG1hbi0wLjMyLjYub3JpZy9waXhtYW4vcGl4bWFuLXByaXZhdGUuaAorKysrIHBpeG1hbi0wLjMyLjYvcGl4bWFuL3BpeG1hbi1wcml2YXRlLmgKK0BAIC0xLDQgKzEsMyBAQAorLSNpbmNsdWRlIDxmbG9hdC5oPgorIAorICNpZm5kZWYgUElYTUFOX1BSSVZBVEVfSAorICNkZWZpbmUgUElYTUFOX1BSSVZBVEVfSAorQEAgLTE3LDYgKzE2LDggQEAKKyAKKyAjaWZuZGVmIF9fQVNTRU1CTEVSX18KKyAKKysjaW5jbHVkZSA8ZmxvYXQuaD4KKysKKyAjaWZuZGVmIFBBQ0tBR0UKKyAjICBlcnJvciBjb25maWcuaCBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSBwaXhtYW4tcHJpdmF0ZS5oCisgI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW4vbWlwcy1leHBvcnQtcmV2ZXJ0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuL21pcHMtZXhwb3J0LXJldmVydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGE1ZmQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuL21pcHMtZXhwb3J0LXJldmVydC5wYXRjaApAQCAtMCwwICsxLDIyIEBACitSZXZlcnQgYSBjb21taXQgaW4gcGl4bWFuIDAuMzIuNiB3aGljaCBicmVha3MgY29tcGxpYXRpb24gb24gTUlQUyBtYWNoaW5lcyB3aXRoCitlcnJvcnMgc3VjaCBhczoKKworcGl4bWFuLTAuMzIuNi9waXhtYW4vcGl4bWFuLW1pcHMtZHNwcjItYXNtLlM6NDI2NzoKK0Vycm9yOiBpbnZhbGlkIG9wZXJhbmRzIGBtZmxvICQxNCwkYWMzJworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKKy0tLSBiL3BpeG1hbi9waXhtYW4tbWlwcy1kc3ByMi1hc20uaAorKysrIGEvcGl4bWFuL3BpeG1hbi1taXBzLWRzcHIyLWFzbS5oCitAQCAtNzIsMTAgKzcyLDcgQEAKKyAjZGVmaW5lIExFQUZfTUlQUzMyUjIoc3ltYm9sKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgLmdsb2JsICBzeW1ib2w7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgLmFsaWduICAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0jaWZkZWYgX19FTEZfXworLSAgICAgICAgICAgICAgICAuaGlkZGVuIHN5bWJvbDsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAudHlwZSAgIHN5bWJvbCwgQGZ1bmN0aW9uOyAgICAgICAgICAgICAgXAorLSNlbmRpZgorICAgICAgICAgICAgICAgICAuZW50ICAgIHN5bWJvbCwgMDsgICAgICAgICAgICAgICAgICAgICAgXAorIHN5bWJvbDogICAgICAgICAuZnJhbWUgIHNwLCAwLCByYTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAuc2V0ICAgIHB1c2g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuXzAuMzIuNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbl8wLjMyLjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFlNTliNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbl8wLjMyLjYuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJQaXhtYW46IFBpeGVsIE1hbmlwdWxhdGlvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJQaXhtYW4gcHJvdmlkZXMgYSBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgcGl4ZWwgcmVnaW9ucyBcCistLSBhIHNldCBvZiBZLVggYmFuZGVkIHJlY3RhbmdsZXMsIGltYWdlIGNvbXBvc2l0aW5nIHVzaW5nIHRoZSBcCitQb3J0ZXIvRHVmZiBtb2RlbCBhbmQgaW1wbGljaXQgbWFzayBnZW5lcmF0aW9uIGZvciBnZW9tZXRyaWMgcHJpbWl0aXZlcyBcCitpbmNsdWRpbmcgdHJhcGV6b2lkcywgdHJpYW5nbGVzLCBhbmQgcmVjdGFuZ2xlcy4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSAmIFBEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTQwOTZjNzY5YWUwY2JiNWZjYjk0ZWM0NjhiZTExYjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcGl4bWFuL3BpeG1hbi1tYXRyaXguYztlbmRsaW5lPTI1O21kNT1iYTZlODc2OWJmYWFlZTJjNDE2OTg3NTVhZjA0YzRiZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9waXhtYW4vcGl4bWFuLWFybS1uZW9uLWFzbS5oO2VuZGxpbmU9MjQ7bWQ1PTlhOWNjMWU1MWFiYmYxZGE1OGY0ZDk1MjhlYzlkNDliIFwKKyAgICAgICAgICAgICAgICAgICAiCitERVBFTkRTICs9ICJ6bGliIGxpYnBuZyIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworUEUgPSAiMSIKKworSVdNTVhUID0gIi0tZGlzYWJsZS1hcm0taXdtbXh0IgorTE9PTkdTT05fTU1JID0gIi0tZGlzYWJsZS1sb29uZ3Nvbi1tbWkiCitORU9OID0gIiAtLWRpc2FibGUtYXJtLW5lb24gIgorTkVPTl9jbGFzcy1uYXRpdmVzZGsgPSAiIC0tZGlzYWJsZS1hcm0tbmVvbiAiCitORU9OX2FybXY3YSA9ICIgIgorTkVPTl9hcm12N2EtdmZwLW5lb24gPSAiICIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1ndGsgJHtJV01NWFR9ICR7TE9PTkdTT05fTU1JfSAke05FT059IgorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLWRpc2FibGUtZ3RrIgorCitTUkNfVVJJICs9ICJcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1BUk0tcWVtdS1yZWxhdGVkLXdvcmthcm91bmRzLWluLWNwdS1mZWF0dXJlcy1kZXRlY3RpLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9taXBzLWV4cG9ydC1yZXZlcnQucGF0Y2ggXAorCSAgICBmaWxlOi8vYXNtX2luY2x1ZGUucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOGE5ZThmMTQ3NDNhMzljZjMwMzgwM2YzNjljMWYzNDQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjAxZmMwZDdkNmJjMDAxNzQ5NmYyYmQyN2IzY2ExNDIyNGFlYTBkZjZiNjI0YzVlZTJkYzAzMDdhNGZmMTRhNCIKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLWltYWdlXzAuNC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwtaW1hZ2VfMC40LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE0NjRiNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLWltYWdlXzAuNC4wLmJiCkBAIC0wLDAgKzEsMTAgQEAKK3JlcXVpcmUgeGNiLXV0aWwuaW5jCisKK0RFUEVORFMgKz0gInhjYi11dGlsIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2ltYWdlL3hjYl9pbWFnZS5jO2VuZGxpbmU9MjQ7bWQ1PWVhZmRmOTY1Y2ZiODk5NTVmZGVkZjc1MDU0MjIzZmI0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2ltYWdlL3hjYl9pbWFnZS5oO2JlZ2lubGluZT00O2VuZGxpbmU9Mjc7bWQ1PTQ4Y2QyNWFlNTVlN2RlNTI1ZmUxZTFhM2E3NjcyZTFjIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDhmZThmZmVjYzhkNGUzN2MwYWRlNzkwNmIzZjRjODciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMmRiOTZhMzdkNzg4MzFkNjQzNTM4ZGQxYjU5NWQ3ZDcxMmUwNGJkY2NmODg5NmE1ZTE4Y2UwZjM5OGVhMmZmYyIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC1rZXlzeW1zXzAuNC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwta2V5c3ltc18wLjQuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2E2NGVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwta2V5c3ltc18wLjQuMC5iYgpAQCAtMCwwICsxLDkgQEAKK3JlcXVpcmUgeGNiLXV0aWwuaW5jCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8va2V5c3ltcy9rZXlzeW1zLmM7ZW5kbGluZT0zMDttZDU9MmY4ZGUwMjNlZDgyM2JiOTJmMGI0NzkwMDU3NGVhOWUgXAorCQkJCQkiCitTUkNfVVJJW21kNXN1bV0gPSAiMTAyMjI5MzA4M2VlYzllNjJkNTY1OTI2MWMyOWUzNjciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGVmODQ5MGZmMWRlZGU1MmI3ZGU1MzMxNTg1NDdmOGI0NTRiMjQxYWEzZTRkY2NhMzY5NTA3ZjY2ZjIxNmRkOSIKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC1yZW5kZXJ1dGlsXzAuMy45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwtcmVuZGVydXRpbF8wLjMuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWMyMmU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwtcmVuZGVydXRpbF8wLjMuOS5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIHhjYi11dGlsLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3JlbmRlcnV0aWwvZ2x5cGguYztlbmRsaW5lPTI0O21kNT1jNTE3YzQ4M2I4ZDcyNjIzNGVjOTRmOTE2OTIzNjY2MSBcCisJCQkJCWZpbGU6Ly9yZW5kZXJ1dGlsL3V0aWwuYztlbmRsaW5lPTIwO21kNT02ZTBiZmM0NGZiMTMyOThjMGY0Njk0ZWI3MGRjODBkNCBcCisJCQkJCWZpbGU6Ly9yZW5kZXJ1dGlsL3hjYl9yZW5kZXJ1dGlsLmg7ZW5kbGluZT0yNDttZDU9ZDBkZGFiMzA1MmRkNDk0OWM5M2NmY2IwODkxYzk2ZGYgXAorCQkJCQkiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0NjhiMTE5Yzk0ZGE5MTBlMTI5MWYzZmZhYjkxMDE5YSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjNmU5N2U0OGZiMTI4NmQ2Mzk0ZGRkYjFjMTczMmYwMDIyN2M3MGJkMWJlZGI3ZDFhY2FiZWZkZDM0MGJlYTViIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwtd21fMC40LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC13bV8wLjQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWYxMzgzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwtd21fMC40LjEuYmIKQEAgLTAsMCArMSwxMSBAQAorcmVxdWlyZSB4Y2ItdXRpbC5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9ld21oL2V3bWguYy5tNDtlbmRsaW5lPTI3O21kNT02M2ZkODA1NTJkN2RjODg2ZjRlYjI2NzYxMGQ1YmI5ZCBcCisJCQkJCWZpbGU6Ly9ld21oL3hjYl9ld21oLmgubTQ7YmVnaW5saW5lPTQ7ZW5kbGluZT0zMDttZDU9NzNiNTg5ZjkwZWY5MGI0YTQzOTk4OTU1ZGFhZDVjZDggXAorCQkJCQlmaWxlOi8vaWNjY20vaWNjY20uYztlbmRsaW5lPTI4O21kNT1lMmIzMjQwYTBjMTk3ZTg5NzdhZGRlMmE1Y2YxOGQ1MCBcCisJCQkJCWZpbGU6Ly9pY2NjbS94Y2JfaWNjY20uaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTMxO21kNT0zOTM3NzJiN2IwN2I5ODY4ZDQ3OWQ1MzgyMzhjMWQ4YSBcCisJCQkJCSIKKworU1JDX1VSSVttZDVzdW1dID0gIjg3YjE5YTFjZDdiZmNiNjVhMjRlMzZjMzAwZTAzMTI5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI4YmY4MTc5NjQwZWFhODkyNzZkMmIwZjFjZTQyODUxMDNkMTM2YmU2Yzk4MjYyYjYxNTFhYWVlMWQzYzJhM2YiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlkMDRmOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLmluYwpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIlhDQjogVGhlIFggcHJvdG9jb2wgQyBiaW5kaW5nIHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIlRoZSB4Y2ItdXRpbCBtb2R1bGUgcHJvdmlkZXMgYSBudW1iZXIgb2YgbGlicmFyaWVzIHdoaWNoIFwKK3NpdCBvbiB0b3Agb2YgbGlieGNiLCB0aGUgY29yZSBYIHByb3RvY29sIGxpYnJhcnksIGFuZCBzb21lIG9mIHRoZSBcCitleHRlbnNpb24gbGlicmFyaWVzLiBUaGVzZSBleHBlcmltZW50YWwgbGlicmFyaWVzIHByb3ZpZGUgY29udmVuaWVuY2UgXAorZnVuY3Rpb25zIGFuZCBpbnRlcmZhY2VzIHdoaWNoIG1ha2UgdGhlIHJhdyBYIHByb3RvY29sIG1vcmUgdXNhYmxlLiBTb21lIFwKK29mIHRoZSBsaWJyYXJpZXMgYWxzbyBwcm92aWRlIGNsaWVudC1zaWRlIGNvZGUgd2hpY2ggaXMgbm90IHN0cmljdGx5IFwKK3BhcnQgb2YgdGhlIFggcHJvdG9jb2wgYnV0IHdoaWNoIGhhdmUgdHJhZGl0aW9uYWxseSBiZWVuIHByb3ZpZGVkIGJ5IFwKK1hsaWIuIgorSE9NRVBBR0UgPSAiaHR0cDovL3hjYi5mcmVlZGVza3RvcC5vcmcvWGNiVXRpbC8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PVhDQiIKKworTElDRU5TRSA9ICJNSVQiCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCisKK0RFUEVORFMgPSAibGlieGNiIgorREVQRU5EUyArPSAiZ3BlcmYtbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly94Y2IuZnJlZWRlc2t0b3Aub3JnL2Rpc3QvJHtCUE59LSR7UFZ9LnRhci5iejIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsXzAuNC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWxfMC40LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA2ZjA3YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsXzAuNC4wLmJiCkBAIC0wLDAgKzEsOCBAQAorcmVxdWlyZSB4Y2ItdXRpbC5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zcmMveGNiX2F1eC5jO2VuZGxpbmU9MzA7bWQ1PWFlMzA1YjljMmEzOGY5YmEyNzA2MDE5MTA0NmE2NDYwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy94Y2JfZXZlbnQuaDtlbmRsaW5lPTI3O21kNT02MjdiZTM1NWFlZTU5ZTFiOGFkZTgwZDViZDkwZmFkOSIKKworU1JDX1VSSVttZDVzdW1dID0gIjJlOTdmZWVkODE5MTk0NjVhMDRjY2M3MWU0MDczMzEzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ2ZTQ5NDY5Y2IzYjU5NGFmMWQzMzE3NmNkNzU2NWRlZjJiZTNmYThiZTQzNzFkNjIyNzFmYWJiNWVhZTUwZTkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94a2V5Ym9hcmQtY29uZmlnXzIuMTUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94a2V5Ym9hcmQtY29uZmlnXzIuMTUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQxNjk5MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hrZXlib2FyZC1jb25maWdfMi4xNS5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIktleWJvYXJkIGNvbmZpZ3VyYXRpb24gZGF0YWJhc2UgZm9yIFggV2luZG93IgorCitERVNDUklQVElPTiA9ICJUaGUgbm9uLWFyY2gga2V5Ym9hcmQgY29uZmlndXJhdGlvbiBkYXRhYmFzZSBmb3IgWCBcCitXaW5kb3cuICBUaGUgZ29hbCBpcyB0byBwcm92aWRlIHRoZSBjb25zaXN0ZW50LCB3ZWxsLXN0cnVjdHVyZWQsIFwKK2ZyZXF1ZW50bHkgcmVsZWFzZWQgb3BlbiBzb3VyY2Ugb2YgWCBrZXlib2FyZCBjb25maWd1cmF0aW9uIGRhdGEgZm9yIFggXAorV2luZG93IFN5c3RlbSBpbXBsZW1lbnRhdGlvbnMuICBUaGUgcHJvamVjdCBpcyB0YXJnZXRlZCB0byBYS0ItYmFzZWQgXAorc3lzdGVtcy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9YS2V5Ym9hcmRDb25maWciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PXhrZXlib2FyZC1jb25maWciCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MGU3ZjIxY2E3ZGI5NzVjNjM0NjdkMmU3NjI0YTEyZjkiCisKK1NSQ19VUkkgPSAiJHtYT1JHX01JUlJPUn0vaW5kaXZpZHVhbC9kYXRhL3hrZXlib2FyZC1jb25maWcvJHtCUE59LSR7UFZ9LnRhci5iejIiCitTUkNfVVJJW21kNXN1bV0gPSAiNGFmMWRlZWI3YzVmNGNhZDYyZTY1OTU3ZDk4ZDY3NTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGU0NDNjZjdjYTJmMGI0MDg0NjQ3MmMwMjk2NDdhMDU5MzNmYzcwNWQ2MTFlMTQ3OGM0ZGI4YTQ4YTZmMzhiZiIKKworU0VDVElPTiA9ICJ4MTEvbGlicyIKK0RFUEVORFMgPSAiaW50bHRvb2wtbmF0aXZlIHZpcnR1YWwvZ2V0dGV4dCB1dGlsLW1hY3JvcyBsaWJ4c2x0LW5hdGl2ZSIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC14a2ItcnVsZXMtc3ltbGluaz14b3JnIC0tZGlzYWJsZS1ydW50aW1lLWRlcHMiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L1gxMS94a2IiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L1gxMS94a2IvY29tcGlsZWQKKyAgICBjZCAke0R9JHtkYXRhZGlyfS9YMTEveGtiL3J1bGVzICYmIGxuIC1zZiBiYXNlIHhvcmcKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hvcmctbGliLWNvbW1vbi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94b3JnLWxpYi1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZGYwMTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94b3JnLWxpYi1jb21tb24uaW5jCkBAIC0wLDAgKzEsMjYgQEAKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PXhvcmciCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCitMSUNFTlNFID0gIk1JVC1YIgorREVQRU5EUyA9ICJ1dGlsLW1hY3JvcyIKKworWE9SR19QTiA9ICIke0JQTn0iCisKK1NSQ19VUkkgPSAiJHtYT1JHX01JUlJPUn0vaW5kaXZpZHVhbC9saWIvJHtYT1JHX1BOfS0ke1BWfS50YXIuYnoyIgorCitTID0gIiR7V09SS0RJUn0vJHtYT1JHX1BOfS0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXNwZWNzIC0td2l0aG91dC1ncm9mZiAtLXdpdGhvdXQtcHMycGRmIC0td2l0aG91dC1mb3AiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW3htbHRvXSA9ICItLXdpdGgteG1sdG8sIC0td2l0aG91dC14bWx0bywgeG1sdG8tbmF0aXZlIGRvY2Jvb2steG1sLWR0ZDQtbmF0aXZlIGRvY2Jvb2steHNsLXN0eWxlc2hlZXRzLW5hdGl2ZSIKKworVU5LTk9XTl9DT05GSUdVUkVfV0hJVEVMSVNUICs9ICItLWVuYWJsZS1tYWxsb2MwcmV0dXJuc251bGwgLS1kaXNhYmxlLW1hbGxvYzByZXR1cm5zbnVsbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1zcGVjcyAtLXdpdGhvdXQtZ3JvZmYgLS13aXRob3V0LXBzMnBkZiAtLXdpdGhvdXQtZm9wIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRob3V0LXhtbHRvIC0td2l0aC14bWx0byBcCisiCisKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA/PSAieDExIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveHRyYW5zXzEuMy41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveHRyYW5zXzEuMy41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YjdmMWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94dHJhbnNfMS4zLjUuYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJYVHJhbnM6IFggVHJhbnNwb3J0IGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBYIFRyYW5zcG9ydCBJbnRlcmZhY2UgaXMgaW50ZW5kZWQgdG8gY29tYmluZSBhbGwgXAorc3lzdGVtIGFuZCB0cmFuc3BvcnQgc3BlY2lmaWMgY29kZSBpbnRvIGEgc2luZ2xlIHBsYWNlLiAgVGhpcyBBUEkgc2hvdWxkIFwKK2JlIHVzZWQgYnkgYWxsIGxpYnJhcmllcywgY2xpZW50cyBhbmQgc2VydmVycyBvZiB0aGUgWCBXaW5kb3cgU3lzdGVtLiBcCitVc2Ugb2YgdGhpcyBBUEkgc2hvdWxkIGFsbG93IHRoZSBhZGRpdGlvbiBvZiBuZXcgdHlwZXMgb2YgdHJhbnNwb3J0cyBhbmQgXAorc3VwcG9ydCBmb3IgbmV3IHBsYXRmb3JtcyB3aXRob3V0IG1ha2luZyBhbnkgY2hhbmdlcyB0byB0aGUgc291cmNlIFwKK2V4Y2VwdCBpbiB0aGUgWCBUcmFuc3BvcnQgSW50ZXJmYWNlIGNvZGUuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00OTM0NzkyMWQ0ZDUyNjgwMjFhOTk5ZjI1MGVkYzljYSIKKworUEUgPSAiMSIKKworUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKKworaW5oZXJpdCBnZXR0ZXh0CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gImM1YmE0MzJkZDE1MTRkODU4MDUzZmZlOWY0NzM3ZGQ4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFkYmQzYjM2OTMyY2U0YzA2MmNkMTBmNTdkNzhhMTU2YmE5OGQ2MThiZGI2ZjUwNjY0ZGEzMjc1MDJiYzgzMDEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2JpZ3JlcXNwcm90b18xLjEuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vYmlncmVxc3Byb3RvXzEuMS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OThhNDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2JpZ3JlcXNwcm90b18xLjEuMi5iYgpAQCAtMCwwICsxLDE2IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitQRSA9ICIxIgorCitTVU1NQVJZID0gIkJpZ1JlcXM6IFggQmlnIFJlcXVlc3RzIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBcCitCSUctUkVRVUVTVFMgZXh0ZW5zaW9uLCB1c2VkIHRvIHNlbmQgbGFyZ2VyIHJlcXVlc3RzIHRoYXQgdXN1YWwgaW4gb3JkZXIgXAordG8gYXZvaWQgZnJhZ21lbnRhdGlvbi4iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjEyNzE1NjMwZGE2ZjI2OGQwZDM3MTJlZTFhNTA0ZjQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxYTA1ZmIwMWZhMWQ1MTk4ODk0YzkzMWNmOTI1YzAyNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0NjIxMTZhYjQ0ZTQxZDgxMjFiZmRlOTQ3MzIxOTUwMzcwYjI4NWE1MzE2NjEyYjhmY2U4MzM0ZDUwNzUxYjFlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9jYWxpYnJhdGVwcm90by9maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2NhbGlicmF0ZXByb3RvL2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjhjYjI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9jYWxpYnJhdGVwcm90by9maXgucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0FkZCBtaXNzaW5nIGxlbmd0aCBmaWVsZHMgdG8gdGhlIHJlcGxpZXMuIFdpdGhvdXQgdGhlc2UsIHNhbml0eSBjaGVja2luZyBpbiByZWNlbnQgWAorYnJlYWtzIHRoaW5ncy4KKworUlAgMTEvMi8xMAorCisKK0luZGV4OiBnaXQveGNhbGlicmF0ZXByb3RvLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy94Y2FsaWJyYXRlcHJvdG8uaAkyMDEwLTAyLTExIDExOjQ3OjQ1LjcxMTk4NTkzMiArMDAwMAorKysrIGdpdC94Y2FsaWJyYXRlcHJvdG8uaAkyMDEwLTAyLTExIDExOjQwOjIxLjAwMDAwMDAwMCArMDAwMAorQEAgLTY3LDEzICs2NywxMyBAQAorICAgICBCWVRFICAgIHR5cGU7ICAgLyogWF9SZXBseSAqLworICAgICBCWVRFICAgIHBhZDE7CisgICAgIENBUkQxNiAgc2VxdWVuY2VOdW1iZXIgQjE2OworKyAgICBDQVJEMzIgIGxlbmd0aDsKKyAgICAgQ0FSRDMyICBzdGF0dXM7CisgICAgIENBUkQzMiAgcGFkMiBCMzI7CisgICAgIENBUkQzMiAgcGFkMyBCMzI7CisgICAgIENBUkQzMiAgcGFkNCBCMzI7CisgICAgIENBUkQzMiAgcGFkNSBCMzI7CisgICAgIENBUkQzMiAgcGFkNiBCMzI7CistICAgIENBUkQzMiAgcGFkNyBCMzI7CisgfSB4WENhbGlicmF0ZVJhd01vZGVSZXBseTsKKyAKKyAjZGVmaW5lIHN6X3hYQ2FsaWJyYXRlUmF3TW9kZVJlcGx5CTMyCitAQCAtOTIsMTMgKzkyLDEzIEBACisgICAgIEJZVEUgICAgdHlwZTsgICAvKiBYX1JlcGx5ICovCisgICAgIEJZVEUgICAgcGFkMTsKKyAgICAgQ0FSRDE2ICBzZXF1ZW5jZU51bWJlciBCMTY7CisrICAgIENBUkQzMiAgbGVuZ3RoOworICAgICBDQVJEMzIgIHg7CisgICAgIENBUkQzMiAgeTsKKyAgICAgQ0FSRDMyICBwYWQyIEIzMjsKKyAgICAgQ0FSRDMyICBwYWQzIEIzMjsKKyAgICAgQ0FSRDMyICBwYWQ0IEIzMjsKKyAgICAgQ0FSRDMyICBwYWQ1IEIzMjsKKy0gICAgQ0FSRDMyICBwYWQ2IEIzMjsKKyB9IHhYQ2FsaWJyYXRlU2NyZWVuVG9Db29yZFJlcGx5OworIAorICNkZWZpbmUgc3pfeFhDYWxpYnJhdGVTY3JlZW5Ub0Nvb3JkUmVwbHkJMzIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vY2FsaWJyYXRlcHJvdG9fZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9jYWxpYnJhdGVwcm90b19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4ZDE1NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vY2FsaWJyYXRlcHJvdG9fZ2l0LmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWENhbGlicmF0ZTogVG91Y2hzY3JlZW4gY2FsaWJyYXRpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgXAorVG91Y2hzY3JlZW4gY2FsaWJyYXRpb24gZXh0ZW5zaW9uLiIKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly94Y2FsaWJyYXRld2lyZS5oO2VuZGxpbmU9MjM7bWQ1PTdmODZlZjdiMDNjY2U2YzRjOWViZDU5ZDIwY2E0ODVmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3hjYWxpYnJhdGVwcm90by5oO2VuZGxpbmU9MjM7bWQ1PWU0NDkwNDkxZWRjYzE3MWNhMjRmOTg1NjllZTU4MGRiIgorCitTUkNSRVYgPSAiMWRhNmZkMWUyYzdhNDk2NDgyNDVjOTg0ODFmYWJlYThiOTY5MGE4YyIKKworUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hvcmcvcHJvdG8vY2FsaWJyYXRlcHJvdG8gXAorICAgICAgICAgICBmaWxlOi8vZml4LnBhdGNoO2FwcGx5PXllcyIKK1MgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2NvbXBvc2l0ZXByb3RvXzAuNC4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9jb21wb3NpdGVwcm90b18wLjQuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGZlZTI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9jb21wb3NpdGVwcm90b18wLjQuMi5iYgpAQCAtMCwwICsxLDIxIEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhjb21wb3NpdGU6IFggY29tcG9zaXRlIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIFwKK2NvbXBvc2l0ZSBleHRlbnNpb24uICBUaGUgWCBjb21wb3NpdGUgZXh0ZW5zaW9uIHByb3ZpZGVzIHRocmVlIHJlbGF0ZWQgXAorbWVjaGFuaXNtcyBmb3IgY29tcG9zaXRpbmcgYW5kIG9mZi1zY3JlZW4gc3RvcmFnZS4iCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MmM0YmZlMTM2ZjRhNDQxOGVhMmYyYTk2YjdjOGYzYzUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY29tcG9zaXRlLmg7ZW5kbGluZT00MzttZDU9Y2JkNDRkNDA3OTA1M2FhNzU5MzBlZDJmMDJiOTI5MjYiCisKK1JDT05GTElDVFNfJHtQTn0gPSAiY29tcG9zaXRlZXh0IgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1BSID0gInIxIgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjk4NDgyZjY1YmExZTc0YTA4YmY1YjA1NmE0MDMxZWYwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA0OTM1OWYwYmUwYjJiOTg0YTgxNDljOTY2ZGQwNGU4YzU4ZTZlYWRlMmE0YTMwOWNmMTEyNjYzNWNjZDBjZmMiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZGFtYWdlcHJvdG9fMS4yLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RhbWFnZXByb3RvXzEuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZDAyNjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RhbWFnZXByb3RvXzEuMi4xLmJiCkBAIC0wLDAgKzEsMjAgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWGRhbWFnZTogWCBEYW1hZ2UgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIERBTUFHRSBcCitleHRlbnNpb24uICBUaGUgREFNQUdFIGV4dGVuc2lvbiBhbGxvd3MgYXBwbGljYXRpb25zIHRvIHJlY2VpdmUgXAoraW5mb3JtYXRpb24gYWJvdXQgY2hhbmdlcyBtYWRlIHRvIHBpeGVsIGNvbnRlbnRzIG9mIHdpbmRvd3MgYW5kIFwKK3BpeG1hcHMuIgorCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ1ZjVhMmRlNjVjM2E4NGNiZGU3NjlmMDdhNzY5NjA4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RhbWFnZXdpcmUuaDtlbmRsaW5lPTIzO21kNT00YTQ1MDFhNTkyZGJjN2RlNWNlODkyNTVlNTBkMDI5NiIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJkYW1hZ2VleHQiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKK1BSID0gInIxIgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjk5OGU1OTA0NzY0YjgyNjQyY2M2M2Q5N2I0YmE5ZTk1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVjN2MxMTJlOWI5ZWE4YTlkNWIwMTllNWYxN2Q0ODFhZTIwZjc2NmNiN2E0NjQ4MzYwZTdjMWI0NmZjOWZjNWIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RteHByb3RvXzIuMy4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kbXhwcm90b18yLjMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTYwZTVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kbXhwcm90b18yLjMuMS5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIkRNWDogRGlzdHJpYnV0ZWQgTXVsdGloZWFkIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBETVggXAorZXh0ZW5zaW9uLiAgVGhlIERNWCBleHRlbnNpb24gcHJvdmlkZXMgc3VwcG9ydCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIFwKK2FuZCBjb250cm9sIG9mIFhkbXggc2VydmVyLiAgQXR0cmlidXRlcyBvZiB0aGUgWGRteCBzZXJ2ZXIgYW5kIG9mIHRoZSBcCitiYWNrLWVuZCBzY3JlZW5zIGF0dGFjaGVkIHRvIHRoZSBzZXJ2ZXIgY2FuIGJlIHF1ZXJpZWQgYW5kIG1vZGlmaWVkIHZpYSBcCit0aGlzIHByb3RvY29sLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hM2MzNDk5MjMxYTgwMzVlZmQwZTAwNGNmYmQzYjcyYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kbXhwcm90by5oO2VuZGxpbmU9MzI7bWQ1PWFiODUwOTk1NWMzZGQ0YzY1ZmFjNzI4ZTFiMzY3YmM0IgorCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGVlMTc1YmJkNDRkMDVjMzRkNDNiYjEyOWJlNTA5OGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTcyMDUxZTZhM2UwNmIyMzZkMTllZWQ1NjM2ODExN2I3NDVjYTFlMWEyN2JkYzUwZmQ1MWFhMzc1YmVhNjUwOSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZHJpMnByb3RvXzIuOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZHJpMnByb3RvXzIuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGM0MGM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kcmkycHJvdG9fMi44LmJiCkBAIC0wLDAgKzEsMTUgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiRFJJMjogRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZSAyIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIERpcmVjdCBcCitSZW5kZXJpbmcgSWZucmFzdHJ1Y3R1cmUgMi4gIERJUiBpcyByZXF1aXJlZCBmb3IgbWF5IGhhcmR3YXJlIFwKK2FjY2VsZXJhdGVkIE9wZW5HTCBkcml2ZXJzLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yZTM5NmZhOTE4MzRmODc4NjAzMmNhZDJkYTU2MzhmMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kcmkycHJvdG8uaDtlbmRsaW5lPTMxO21kNT0yMmYyOGJmNjhkMDFiNTMzZjI2MTk1ZTk0YjNlZDhjYSIKKworCitTUkNfVVJJW21kNXN1bV0gPSAiYjI3MjFkNWQyNGMwNGQ5OTgwYTBjNjU0MGNiNTM5NmEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjliNTU0NzZkZWY0NGZjN2M0NTliMjUzN2QxN2RiYzczMWUzNmVkNWQ0MTZhZjdjYTBiMWUyZTY3NmY4YWEwNCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZHJpMnByb3RvX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZHJpMnByb3RvX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDc0ZjQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kcmkycHJvdG9fZ2l0LmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiRFJJMjogRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZSAyIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIERpcmVjdCBcCitSZW5kZXJpbmcgSWZucmFzdHJ1Y3R1cmUgMi4gIERJUiBpcyByZXF1aXJlZCBmb3IgbWF5IGhhcmR3YXJlIFwKK2FjY2VsZXJhdGVkIE9wZW5HTCBkcml2ZXJzLiIKKworU1JDUkVWID0gIjY2YzU2YWIxMGQ5MTdlM2Y0N2Y5MzE3OGQ3ZWFjNjQzMDk3MGQzYzQiCitQViA9ICIxLjk5LjMrZ2l0JHtTUkNQVn0iCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveG9yZy9wcm90by9kcmkycHJvdG8iCisKK0xJQ19GSUxFU19DSEtTVU09ImZpbGU6Ly9DT1BZSU5HO21kNT0yZTM5NmZhOTE4MzRmODc4NjAzMmNhZDJkYTU2MzhmMyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kcmkzcHJvdG9fMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kcmkzcHJvdG9fMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZDk3YjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RyaTNwcm90b18xLjAuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJEaXJlY3QgUmVuZGVyaW5nIEluZnJhc3RydWN0dXJlIDMgRXh0ZW5zaW9uIgorCitERVNDUklQVElPTiA9ICJUaGUgRFJJMyBleHRlbnNpb24gcHJvdmlkZXMgbWVjaGFuaXNtcyB0byB0cmFuc2xhdGUgYmV0d2VlbiBkaXJlY3QgXAorcmVuZGVyZWQgYnVmZmVycyBhbmQgWCBwaXhtYXBzLiBXaGVuIGNvbWJpbmVkIHdpdGggdGhlIFByZXNlbnQgZXh0ZW5zaW9uLCBcCithIGNvbXBsZXRlIGRpcmVjdCByZW5kZXJpbmcgc29sdXRpb24gZm9yIE9wZW5HTCBpcyBwcm92aWRlZC4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZHJpM3Byb3RvLmg7ZW5kbGluZT0yMTttZDU9YWM5MGQxZDQxNmJlM2NiMTNlMWQzYzg4Y2Q1MTY2YmYiCisKKworU1JDX1VSSVttZDVzdW1dID0gImEzZDJjYmU2MGE5Y2ExYmYzYWVhNmM5M2M4MTdmZWUzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAxYmU0OWQ3MDIwMDUxOGI5YTZiMjk3MTMxZjZjYzcxZjRlYTJkZTE3NDM2ODk2YWYxNTMyMjZhNzc0ZmMwNzQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2ZpeGVzcHJvdG9fNS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9maXhlc3Byb3RvXzUuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWZiODhkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9maXhlc3Byb3RvXzUuMC5iYgpAQCAtMCwwICsxLDIyIEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhGaXhlczogWCBGaXhlcyBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWCBGaXhlcyBcCitleHRlbnNpb24uICBUaGlzIGV4dGVuc2lvbiBpcyBkZXNpZ25lZCB0byBwcm92aWRlIHNlcnZlci1zaWRlIHN1cHBvcnQgXAorZm9yIGFwcGxpY2F0aW9uIHdvcmsgYXJvdW5kcyB0byBzaG9ydGNvbWluZ3MgaW4gdGhlIGNvcmUgWCB3aW5kb3cgXAorc3lzdGVtLiIKKworCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI2MmE3YTg3ZGE1NmU2NmRkNjM5YmY3MzM0YTExMGM2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3hmaXhlc3Byb3RvLmg7ZW5kbGluZT00MzttZDU9YzNhOWVlNmRiMzUzMmVkMGQ0NGRlYTI2NmNmYzk3ZjQiCisKK1JDT05GTElDVFNfJHtQTn0gPSAiZml4ZXNleHQiCitQUiA9ICJyMSIKK1BFID0gIjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gImU3NDMxYWI4NGQzN2IyNjc4YWY3MWUyOTM1NWUxMDFkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJhMmYzZjMxMjQ2YmRkM2YyYTBhY2Y4YmQzYjA5YmE5OWNhYjk2NWM3ZmIyYzJjOTJiN2RjNzI4NzBlNDI0Y2UiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2ZvbnRzcHJvdG9fMi4xLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2ZvbnRzcHJvdG9fMi4xLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdmYzI4MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZm9udHNwcm90b18yLjEuMy5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhGb250OiBYIEZvbnQgcmFzdGVyaXNhdGlvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIEZvbnQgXAorcmFzdGVyaXNhdGlvbiBleHRlbnNpb25zLiAgVGhlc2UgZXh0ZW5zaW9ucyBhcmUgdXNlZCB0byBjb250cm9sIFwKK3NlcnZlci1zaWRlIGZvbnQgY29uZmlndXJhdGlvbnMuIgorCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWMzZTQ4YWE5Y2U4NjhjOGU5MGYwNDAxZGI0MWMxMWEyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0ZTcHJvdG8uaDtlbmRsaW5lPTQ0O21kNT1kMmU1OGUyNzA5NWU1ZWE3ZDRhZDQ1NmNjYjkxOTg2YyIKKworUEUgPSAiMSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzNjkzNGQwMGIwMDU1NWVhYWNkZTlmMDkxZjM5MmY5NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyNTkwNDZiMGRkOTEzMDgyNWM0YTRjNDc5YmEzNTkxZDZkMGYxN2EzM2Y1NGUyOTRiNTY0Nzg3MjlhNmU1YWI4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9nbHByb3RvXzEuNC4xNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZ2xwcm90b18xLjQuMTcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIwM2QzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZ2xwcm90b18xLjQuMTcuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJPcGVuR0w6IFggT3BlbkdMIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBcCitPcGVuR0wtcmVsYXRlZCBleHRlbnNpb25zLCB1c2VkIHRvIGVuYWJsZSB0aGUgcmVuZGVyaW5nIG9mIGFwcGxpY2F0aW9ucyBcCit1c2luZyBPcGVuR0wuIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ0NGVkMDE0Njk5Nzg1NjMwNGRmYmI1MTJhNTlhOGRlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dseHByb3RvLmg7YmVnaW5saW5lPTQ7ZW5kbGluZT0zMjttZDU9NmI3OWM1NzBmNjQ0MzYzYjM1NjQ1NmU3ZDQ0NDcxZDkiCisKK1BFID0gIjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTU2NWYxYjBmYWNmNGE1OWMyNzc4MjI5YzFmNzBkMTAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWRhYTk0YmRlZDMxMGEyYmZjYmI5ZGViNGQ3NTFkOTY1ZmNmZTZmYjNhMmY2ZDI0MmUyZGYyZDY1ODlkYmU0MCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vaW5wdXRwcm90b18yLjMuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vaW5wdXRwcm90b18yLjMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZThlMGMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9pbnB1dHByb3RvXzIuMy4xLmJiCkBAIC0wLDAgKzEsMjAgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEk6IFggSW5wdXQgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggSW5wdXQgXAorZXh0ZW5zaW9uLiAgVGhlIGV4dGVuc2lvbiBzdXBwb3J0cyBpbnB1dCBkZXZpY2VzIG90aGVyIHRoZW4gdGhlIGNvcmUgWCBcCitrZXlib2FyZCBhbmQgcG9pbnRlci4iCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTU2MmNjMGY2NTg3Yjk2MWYwMzIyMTFkODE2MGYzMWUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vWEkycHJvdG8uaDtlbmRsaW5lPTQ4O21kNT0xYWMxNTgxZTYxMTg4ZGEyODg1Y2MxNGZmNDliMjBiZSIKKworUEUgPSAiMSIKKworaW5oZXJpdCBnZXR0ZXh0CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjZjYWViZWFkNGI3NzliYTAzMTcyN2Y2NmE3ZmZhMzU4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVhNDdlZTYyMDUzYTZhY2VmM2E4M2Y1MDYzMTI0OTRiZTE0NjEwNjhkMGI5MjY5ZDgxODgzOTcwM2I5NWMxZDEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2lucHV0cHJvdG9fZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9pbnB1dHByb3RvX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTIwZjNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9pbnB1dHByb3RvX2dpdC5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhJOiBYIElucHV0IGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIElucHV0IFwKK2V4dGVuc2lvbi4gIFRoZSBleHRlbnNpb24gc3VwcG9ydHMgaW5wdXQgZGV2aWNlcyBvdGhlciB0aGVuIHRoZSBjb3JlIFggXAora2V5Ym9hcmQgYW5kIHBvaW50ZXIuIgorCitQUiA9ICJyMSIKK1BFID0gIjEiCitTUkNSRVYgPSAiNzIwMzAzNjUyMmJhOWQ0YjIyNGQyODJkNmFmYzJkMGI5NDc3MTFlZSIKK1BWID0gIjEuOS45OS4xMitnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveG9yZy9wcm90by9pbnB1dHByb3RvIgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBnZXR0ZXh0CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8va2Jwcm90b18xLjAuNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8va2Jwcm90b18xLjAuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmY1YzkyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9rYnByb3RvXzEuMC43LmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEtCOiBYIEtleWJvYXJkIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIFwKK0tleWJvYXJkIGV4dGVuc2lvbi4gIFRoaXMgZXh0ZW5zaW9uIGlzIHVzZWQgdG8gY29udHJvbCBvcHRpb25zIHJlbGF0ZWQgXAordG8ga2V5Ym9hcmQgaGFuZGxpbmcgYW5kIGxheW91dC4iCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2RkNmVhOTllMmE4M2E1NTJjMDJjODA5NjM2MjNjMzggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vWEtCcHJvdG8uaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTI1O21kNT01NzQ0ZWVmZjQwN2FlYjZlN2ExMzQ2ZWViYWI0ODZhMiIKKworUEUgPSAiMSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTRhZmM5MGMxZjdiZWY0YTI3ZmRkNTllY2UzOWM4NzgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjg4MjIxMGI3NjM3NmUzZmEwMDZiMTFkYmQ4OTBlNTZlYzA5NDJiYzU2ZTY1ZDEyNDlmZjRhZjg2ZjkwYjg1NyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcHJlc2VudHByb3RvX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcHJlc2VudHByb3RvX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmI2ZjMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9wcmVzZW50cHJvdG9fZ2l0LmJiCkBAIC0wLDAgKzEsMjQgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSBiYXNpYyBoZWFkZXJzIGZvciB0aGUgWCBXaW5kb3cgU3lzdGVtIgorREVTQ1JJUFRJT04gPSAiVGhlIFByZXNlbnQgZXh0ZW5zaW9uIHByb3ZpZGVzIGEgd2F5IGZvciBhcHBsaWNhdGlvbnMgdG8gdXBkYXRlIHRoZWlyIFwKKyAgICAgICAgICAgICAgIHdpbmRvdyBjb250ZW50cyBmcm9tIGEgcGl4bWFwIGluIGEgd2VsbCBkZWZpbmVkIGZhc2hpb24sIHN5bmNocm9uaXppbmcgXAorICAgICAgICAgICAgICAgd2l0aCB0aGUgZGlzcGxheSByZWZyZXNoIGFuZCBwb3RlbnRpYWxseSB1c2luZyBhIG1vcmUgZWZmaWNpZW50IFwKKyAgICAgICAgICAgICAgIG1lY2hhbmlzbSB0aGFuIGNvcHlpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBzb3VyY2UgcGl4bWFwLlwKKyAgICAgICAgICAgICAgIgorCitMSUNFTlNFID0gIkdQTHYyIgorCitTUkNSRVYgPSAiMjRmM2E1NmU1NDFiMGE5ZTZjNmVlNzYwODFmNDQxMjIxYTEyMGVmOSIKK1BWID0gIjEuMCtnaXQke1NSQ1BWfSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDdlNTA4Y2EyODBmZGU5NzkwNmVhY2I3Nzg5MmMzYWMiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hvcmcvcHJvdG8vcHJlc2VudHByb3RvIgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworUFIgPSAicjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yYW5kcnByb3RvXzEuNS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yYW5kcnByb3RvXzEuNS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1OWU1MjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3JhbmRycHJvdG9fMS41LjAuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYUmFuZFI6IFggUmVzaXplLCBSb3RhdGUgYW5kIFJlZmxlY3QgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggUmVzaXplLCBcCitSb3RhdGUgYW5kIFJlZmxlY3QgZXh0ZW5zaW9uLiAgVGhpcyBleHRlbnNpb24gcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gXAorcmVzaXplLCByb3RhdGUgYW5kIHJlZmxlY3QgdGhlIHJvb3Qgd2luZG93IG9mIGEgc2NyZWVuLiIKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wMDQyNmQ0MWJkM2Q5MjY3Y2Y5YmJiMmRmOTMyM2E1ZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9yYW5kcnByb3RvLmg7ZW5kbGluZT0zMDttZDU9Mzg4NTk1N2M2MDQ4ZmRmMzMxMGFjOGJhNTRjYTJjM2YiCisKK1JDT05GTElDVFNfJHtQTn0gPSAicmFuZHJleHQiCitQRSA9ICIxIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhNDY3NjVjOGRjYWNiNzExNGM4MjFiYWYwZGYxZTc5NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0YzY3NTUzM2U3OWNkNzMwOTk3ZDIzMmM4ODk0YjY2OTIxNzRkY2U1OGQzZTIwNzAyMWI4Zjg2MGJlNDk4NDY4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yZWNvcmRwcm90b18xLjE0LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3JlY29yZHByb3RvXzEuMTQuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDIzMTdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yZWNvcmRwcm90b18xLjE0LjIuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYUmVjb3JkOiBYIFJlY29yZCBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWCBSZWNvcmQgXAorZXh0ZW5zaW9uLiAgVGhpcyBleHRlbnNpb24gaXMgdXNlZCB0byByZWNvcmQgYW5kIHBsYXkgYmFjayBldmVudCBcCitzZXF1ZW5jZXMuIgorCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU3NTgyN2EwZjU1NGJiZWQzMzI1NDI5NzZkNWYzZDQwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3JlY29yZHByb3RvLmg7ZW5kbGluZT0xOTttZDU9MWNiYjBkZDQ1YTBiMDYwZmY4MzM5MDE2MjBhM2U3MzgiCisKK1JDT05GTElDVFNfJHtQTn0gPSAicmVjb3JkZXh0IgorUFIgPSAicjEiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWI0ZTVkZWRlNWVhNTE5MDZmMTUzMGNhMWUyMWQyMTYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTc3NzU0OGQyZTkyYWEyNTlmMTUyOGRlM2M0YTM2ZDE1ZTA3YTQ2NTBkMDk3NjU3M2E4ZTJmZjU0MzdlNzM3MCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmVuZGVycHJvdG9fMC4xMS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yZW5kZXJwcm90b18wLjExLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY4MDBlYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmVuZGVycHJvdG9fMC4xMS4xLmJiCkBAIC0wLDAgKzEsMjEgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWFJlbmRlcjogWCByZW5kZXJpbmcgRXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggXAorUmVuZGVyaW5nIGV4dGVuc2lvbi4gIFRoaXMgaXMgdGhlIGJhc2lzIHRoZSBpbWFnZSBjb21wb3NpdGlvbiB3aXRoaW4gdGhlIFwKK1ggd2luZG93IHN5c3RlbS4iCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjgyNmQ5OTc2NTE5NjM1MmU2MTIyYTQwNmNmMGQwMjQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcmVuZGVycHJvdG8uaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTI0O21kNT0zZTVlMjg1MWRhZDI0MGIwYTNhMjdjNDc3NmI0ZmQxZiIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJyZW5kZXJleHQiCitQUiA9ICJyMSIKK1BFID0gIjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gImE5MTRjY2MxZGU2NmRkZWI0YjYxMWM2YjA2ODZlMjc0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA2NzM1YTViOTJiMjA3NTkyMDRlNDc1MWVjZDYwNjRhMmFkOGE2MjQ2YmI2NWIzMDc4Yjg2MmEwMGRlZjI1MzciCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmVzb3VyY2Vwcm90b18xLjIuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmVzb3VyY2Vwcm90b18xLjIuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGI2MTBhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yZXNvdXJjZXByb3RvXzEuMi4wLmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWFJlczogWCBSZXNvdXJjZSBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWCBcCitSZXNvdXJjZSBleHRlbnNpb24uICBYUmVzIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0aGF0IGFsbG93cyBYIGNsaWVudHMgdG8gXAorc2VlIGFuZCBtb25pdG9yIFggcmVzb3VyY2UgdXNhZ2Ugb2YgdmFyaW91cyBjbGllbnRzLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02MDQ4NTkzMDVlNjYyNTAzMDc3MjQwZmVlOGM3N2Q5NyIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJyZXNvdXJjZWV4dCIKKworUFIgPSAicjEiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiY2ZkYjU3ZGFlMjIxYjcxYjI3MDNmOGUyOTgwZWFhZjQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2M2NjAwM2E2YmRlYjBmNzA5MzJhOWVkM2NmNTdjYzU1NDIzNDE1NDM3OGQzMDFlMGM1Y2ZhMTg5ZDhmNjgxOCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9zY3Juc2F2ZXJwcm90b18xLjIuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vc2NybnNhdmVycHJvdG9fMS4yLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIwN2Y1MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vc2NybnNhdmVycHJvdG9fMS4yLjIuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYc2NybnNhdmVyOiBYIFNjcmVlbiBTYXZlciBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWCBTY3JlZW4gXAorU2F2ZXIgZXh0ZW5zaW9uLiAgVGhpcyBleHRlbnNpb24gYWxsb3dzIGFuIGV4dGVybmFsIFwic2NyZWVuIHNhdmVyXCIgXAorY2xpZW50IHRvIGRldGVjdCB3aGVuIHRoZSBhbHRlcm5hdGl2ZSBpbWFnZSBpcyB0byBiZSBkaXNwbGF5ZWQgYW5kIHRvIFwKK3Byb3ZpZGUgdGhlIGdyYXBoaWNzLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lZWQ0OWI3OGIxNWI0MzZjOTMzYjZiOGIwNTRlMzkwMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zYXZlcnByb3RvLmg7ZW5kbGluZT0yNjttZDU9YTg0YzA2MzczMDUxNTlmM2MwYWIxNzNhYWVlZGU0OGQiCisKK1BFID0gIjEiCisKK0VYVFJBX09FQ09ORl9hcHBlbmQgPSAiIC0tZW5hYmxlLXNwZWNzPW5vIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZWRkOGE3Mzc3NWU4ZWNlMWQ2OTUxNWRkMTc3NjdiZmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGJiNzBhOGRhMTY0OTMwY2NlYWViNGM3NDE4MDI5MTY2MDUzM2FkM2NjNDUzNzdiMzBhNzk1ZDFiODViY2Q2NSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vdmlkZW9wcm90b18yLjMuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vdmlkZW9wcm90b18yLjMuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2FhNzU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by92aWRlb3Byb3RvXzIuMy4yLmJiCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWHY6IFggVmlkZW8gZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggVmlkZW8gXAorZXh0ZW5zaW9uLiAgVGhpcyBleHRlbnNpb24gYWxvd3MgZm9yIGFjY2VybGF0ZWQgZHJhd2luZyBvZiB2aWRlb3MuIgorCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWNlMzQ3MmExMTlhODY0MDg1ZmE0MTU1Y2IwOTc5YTdiIgorCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTY1ODY0MTU5NTMyN2QzOTkwZWFiNzBmZGI1NWNhOGIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGRhZTE2OGNiODIwZmNkMzJmNTY0ODc5YWZiM2YyNGQyN2MxNzYzMDBkOWFmNjY4MTlhMTgyNjU1MzliZDRiNiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTFiNTdiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG8uaW5jCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiWENCOiBUaGUgWCBwcm90b2NvbCBDIGJpbmRpbmcgaGVhZGVycyIKK0RFU0NSSVBUSU9OID0gIkZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHRoZSBYIHByb3RvY29sIEMtbGFuZ3VhZ2UgQmluZGluZyBcCisoWENCKS4gIFhDQiBpcyBhIHJlcGxhY2VtZW50IGZvciBYbGliIGZlYXR1cmluZyBhIHNtYWxsIGZvb3RwcmludCwgXAorbGF0ZW5jeSBoaWRpbmcsIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIHByb3RvY29sLCBpbXByb3ZlZCB0aHJlYWRpbmcgXAorc3VwcG9ydCwgYW5kIGV4dGVuc2liaWxpdHkuIgorSE9NRVBBR0UgPSAiaHR0cDovL3hjYi5mcmVlZGVza3RvcC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PVhDQiIKKworU0VDVElPTiA9ICJ4MTEvbGlicyIKK0xJQ0VOU0UgPSAiTUlULVgiCisKK1NSQ19VUkkgPSAiaHR0cDovL3hjYi5mcmVlZGVza3RvcC5vcmcvZGlzdC94Y2ItcHJvdG8tJHtQVn0udGFyLmJ6MiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHB5dGhvbm5hdGl2ZQorCitQQUNLQUdFUyArPSAicHl0aG9uLXhjYmdlbiIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9L3hjYi8qLnhtbCAke2RhdGFkaXJ9L3hjYi8qLnhzZCIKK0ZJTEVTX3B5dGhvbi14Y2JnZW4gPSAiJHtsaWJkaXJ9L3B5dGhvbioiCisKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCitSUkVDT01NRU5EU18ke1BOfS1kYmcgPSAiJHtQTn0tZGV2ICg9ICR7RVhURU5EUEtHVn0pIgorCitERVBFTkRTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIHB5dGhvbi1uYXRpdmUiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90b18xLjExLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG9fMS4xMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmM1YTExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG9fMS4xMS5iYgpAQCAtMCwwICsxLDkgQEAKK2luY2x1ZGUgeGNiLXByb3RvLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ3NjNiMDgxY2IxMGMyMjM0MzViMDFlMDBkYzBhYmE3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9kcmkyLnhtbDtiZWdpbmxpbmU9MjtlbmRsaW5lPTI4O21kNT1mODc2M2IxM2ZmNDMyZTg1OTdlMGQ2MTBjZjU5OGU2NSIKKworCitTUkNfVVJJW21kNXN1bV0gPSAiNmJmMjc5NzQ0NWRjNmQ0M2U5ZTQ3MDdjMDgyZWZmOWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjRhY2VlZTY1MDJhMGNlNDVmYzM5YjMzYzU0MWEyZGY0NzE1ZDAwYjcyZTY2MGViZThjNWJiNDQ0NzcxZTMyZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWE0ZDA0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG9fZ2l0LmJiCkBAIC0wLDAgKzEsOSBAQAorREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCitpbmNsdWRlIHhjYi1wcm90by5pbmMKK1NSQ1JFViA9ICJkODFjYTIzM2U5OGJlOGZhNTllOGM5MGQyNjJjMDUxNjk0NGM1YTY2IgorUFYgPSAiMS4yK2dpdHIke1NSQ1BWfSIKK1BSID0gInI0IgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94Y2IvcHJvdG8iCitTID0gIiR7V09SS0RJUn0vZ2l0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y21pc2Nwcm90b18xLjIuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNtaXNjcHJvdG9fMS4yLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc1MWI5NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNtaXNjcHJvdG9fMS4yLjIuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYQy1NSVNDOiBYIFhDLU1pc2NlbGxhbmVvdXMgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFhDLU1JU0MgXAorZXh0ZW5zaW9uLCB3aGljaCBpcyB1c2VkIHRvIGdldCBkZXRhaWxzIG9mIFhJRCBhbGxvY2F0aW9ucyB3aXRoaW4gdGhlIFwKK3NlcnZlci4iCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDlkODMwNDdjMTU5OTRlMDVkYjI5YjQyM2VkNjY2MmUiCisKK1BFID0gIjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjVmNDg0N2M3OGU0MWI4MDE5ODJjOGE1ZTA2MzY1YjI0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImIxMzIzNjg2OTM3MjI1NmMzNmRiNzlhZTM5ZDU0MjE0MTcyNjc3ZmI3OWU5Y2RjNTU1ZGNlZWM4MGJkOWQyZGYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hleHRwcm90b183LjMuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGV4dHByb3RvXzcuMy4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMGJkOTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hleHRwcm90b183LjMuMC5iYgpAQCAtMCwwICsxLDI0IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhFeHQ6IFggRXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3Igc2V2ZXJhbCBYIFwKK2V4dGVuc2lvbnMuICBUaGVzZSBwcm90b2NvbCBleHRlbnNpb25zIGluY2x1ZGUgRE9VQkxFLUJVRkZFUiwgRFBNUywgXAorRXh0ZW5kZWQtVmlzdWFsLUluZm9ybWF0aW9uLCBMQlgsIE1JVF9TSE0sIE1JVF9TVU5EUlktTk9OU1RBTkRBUkQsIFwKK011bHRpLUJ1ZmZlcmluZywgU0VDVVJJVFksIFNIQVBFLCBTWU5DLCBUT0ctQ1VQLCBYQy1BUFBHUk9VUCwgWEMtTUlTQywgXAorWFRFU1QuICBJbiBhZGRpdGlvbiBhIHNtYWxsIHNldCBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBhcmUgYWxzbyBcCithdmFpbGFibGUuIgorCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTg2ZjI3MzI5MTc1OWQwYmEyYTIyNTg1Y2QxYzA2YzUzIgorCitQRSA9ICIxIgorCitpbmhlcml0IGdldHRleHQKKworRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgLS1lbmFibGUtc3BlY3M9bm8iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjcwYzkwZjMxM2I0YjA4NTE3NThlZjc3Yjk1MDE5NTg0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImYzZjRiMjNhYzhkYjljM2E5ZTBkOGVkYjU5MTcxM2YzZDcwZWY5YzNiMTc1OTcwZGQ4ODIzZGZjOTJhYTViYjAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZkZ2Fwcm90b18yLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZkZ2Fwcm90b18yLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZmM2NlMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGY4NmRnYXByb3RvXzIuMS5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhGcmVlODYtREdBOiBYRnJlZTg2IERpcmVjdCBHcmFwaGljcyBBY2Nlc3MgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFhGcmVlODYgXAorRGlyZWN0IEdyYXBoaWNzIEFjY2VzcyBleHRlbnNpb24uIFRoaXMgZXh0ZW5zaW9uIGFsbG93cyBkaXJlY3QgZ3JhcGhpY3MgXAorYWNjZXNzIHRvIGEgZnJhbWVidWZmZXItbGlrZSByZWdpb24sIGFzIHdlbGwgYXMgcmVsYXRpdmUgbW91c2UgXAorcmVwb3J0aW5nLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lMDFlNjZlNGIzMTcwODhjZjg2OWJjOThlNmFmNGZiNiIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJ4eGY4NmRnYWV4dCIKK1BSID0gInIyIgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gImEwMzZkYzJmY2JmMDUyZWMxMDYyMWZkNDhiNjhkYmIxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFjNWVmNjUxMDhlMWYyMTQ2Mjg2ZTUzMDgwOTc1NjgzZGFlNDlmYzk0NjgwMDQyZTA0YmQxZTIwMTBlOTkwNTAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZkcmlwcm90b18yLjEuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGY4NmRyaXByb3RvXzIuMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZjkyMTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZkcmlwcm90b18yLjEuMS5iYgpAQCAtMCwwICsxLDE3IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhGcmVlODYtRFJJOiBYRnJlZTg2IERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFhGcmVlODYgXAorRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZSBleHRlbnNpb24uICBUaGUgWEZyZWU4Ni1EUkkgZXh0ZW5zaW9uIGlzIFwKK3VzZWQgdG8gb3JnYW5pemUgZGlyZWN0IHJlbmRlcmluZyBzdXBwb3J0IG9yIDNEIGNsaWVudHMgYW5kIGhlbHAgXAorYXJiaXRyYXRlIHJlcXVlc3RzLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lZjEwM2I5ZDk1MWUzOWZmN2UyM2QzODZlMjAxMWZhMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly94Zjg2ZHJpcHJvdG8uaDtlbmRsaW5lPTM1O21kNT00MmJlM2Q4ZTZkNDI5YWI3OTE3MjU3MmJiMGNmZjU0NCIKKworUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjFkNzE2ZDBkYWMzYjY2NGU1ZWUyMGM2OWQzNGJjMTBlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjljNGI4ZDcyMjFjYjZkYzQzMDkyNjljY2MwMDhhMjI3NTM2OThhZTkyNDVhMzk4YTU5ZGYzNWYxNDA0ZDY2MWYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZtaXNjcHJvdG9fMC45LjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZtaXNjcHJvdG9fMC45LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ2NjNlYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGY4Nm1pc2Nwcm90b18wLjkuMy5iYgpAQCAtMCwwICsxLDE3IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhGcmVlODYtTWlzYzogWEZyZWU4NiBtaXNjZWxsYW5lb3VzIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYRnJlZSBcCittaXNjZWxsYW5lb3VzIGV4dGVuc2lvbi4gIFRoZSBYRnJlZTg2LU1pc2MgZXh0ZW5zaW9uIHByb3ZpZGVzIGEgbWVhbnMgdG8gXAorYWNjZXNzIGlucHV0IGRldmljZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIHNwZWNpZmljIHRvIHRoZSBYRnJlZTg2L1hvcmcgXAorRERYLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lMDFlNjZlNGIzMTcwODhjZjg2OWJjOThlNmFmNGZiNiIKKworUFIgPSAicjEiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiY2E2M2JiYjMxY2Y1YjdmMzdiMjIzN2U5MjNmZjI1N2EiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDViOGVjNmE0YThjYTIxMDY2ZGNlMTE3ZTA5ZGNjODg1Mzk4NjJlNjE2ZTYwZmIzOTFkZTA1YjM2ZjYzYjA5NSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGY4NnZpZG1vZGVwcm90b18yLjMuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGY4NnZpZG1vZGVwcm90b18yLjMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjMxOTAwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Zjg2dmlkbW9kZXByb3RvXzIuMy4xLmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEZyZWU4Ni1WTTogWEZyZWU4NiB2aWRlbyBtb2RlIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYRnJlZTg2IFwKK3ZpZGVvIG1vZGUgZXh0ZW5zaW9uLiAgVGhpcyBleHRlbnNpb24gYWxsb3dzIGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gZ2V0IFwKK2FuZCBzZXQgdmlkZW8gbW9kZSB0aW1pbmdzLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00OTliZTJmZjM4N2E0MmY4NDYyOGMzNWYzMTFmMTUwMiIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJ4eGY4NnZtZXh0IgorCitQUiA9ICJyMSIKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlNzkzZWNlZmVhZWNmZWFiZDFhZWQ2YTAxMDk1MTc0ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0NWQ5NDk5YWE3YjczMjAzZmQ2YjM1MDViMDI1OTYyNGFmZWQ1YzE2Yjk0MWJkMDRmY2YxMjNlNWRlNjk4NzcwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94aW5lcmFtYXByb3RvXzEuMi4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94aW5lcmFtYXByb3RvXzEuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMDc3NGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hpbmVyYW1hcHJvdG9fMS4yLjEuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYaW5lcmFtYTogWGluZXJhbWEgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFhpbmVyYW1hIFwKK2V4dGVuc2lvbi4gIFRoaXMgZXh0ZW5zaW9uIGlzIHVzZWQgZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gYWJvdXQgXAorcGh5c2ljYWwgb3V0cHV0IGRldmljZXMgd2hpY2ggbWF5IGJlIGNvbWJpbmVkIGludG8gYSBzaW5nbGUgbG9naWNhbCBYIFwKK3NjcmVlbi4iCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2UzOTdhNTMyNmM4M2Q1ZDBlYmY1YjNmODcxNjNhYzYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcGFub3JhbWlYcHJvdG8uaDtlbmRsaW5lPTI0O21kNT0wOThlMGJjMDg5MzY4YTk4ODA5MmIzY2JkYTYxN2E1NyIKKworUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjk5NTlmZTBiZmIyMmEwZTcyNjA0MzNiOGQxOTk1OTBhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk3NzU3NGJiM2RjMTkyZWNkOWM1NWY1OWY5OTFlYzFkZmYzNDBiZTNlMzEzOTJjOTVkZWZmNDIzZGE1MjQ4NWIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hvcmctcHJvdG8tY29tbW9uLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veG9yZy1wcm90by1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNDE3YzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hvcmctcHJvdG8tY29tbW9uLmluYwpAQCAtMCwwICsxLDI2IEBACitTVU1NQVJZID0gIlggcHJvdG9jb2wgaGVhZGVyczogJHtYT1JHX1BOfSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PXhvcmciCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCitMSUNFTlNFID0gIk1JVC1YIgorCitYT1JHX1BOID0gIiR7QlBOfSIKKworU1JDX1VSSSA9ICIke1hPUkdfTUlSUk9SfS9pbmRpdmlkdWFsL3Byb3RvLyR7WE9SR19QTn0tJHtQVn0udGFyLmJ6MiIKKworUyA9ICIke1dPUktESVJ9LyR7WE9SR19QTn0tJHtQVn0iCisKK0RFUEVORFMgPSAidXRpbC1tYWNyb3MiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1mb3AiCisKK1VOS05PV05fQ09ORklHVVJFX1dISVRFTElTVCArPSAiLS13aXRob3V0LWZvcCAtLXdpdGhvdXQteG1sdG8gLS13aXRoLXhtbHRvIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1t4bWx0b10gPSAiLS13aXRoLXhtbHRvLCAtLXdpdGhvdXQteG1sdG8sIHhtbHRvLW5hdGl2ZSBkb2Nib29rLXhtbC1kdGQ0LW5hdGl2ZSBkb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uYXRpdmUiCisKKyMgJHtQTn0gaXMgZW1wdHkgc28gd2UgbmVlZCB0byB0d2VhayAtZGV2IGFuZCAtZGJnIHBhY2thZ2UgZGVwZW5kZW5jaWVzCitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorUlJFQ09NTUVORFNfJHtQTn0tZGJnID0gIiR7UE59LWRldiAoPSAke0VYVEVORFBLR1Z9KSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veHByb3RvL3hwcm90b19maXhfZm9yX3gzMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veHByb3RvL3hwcm90b19maXhfZm9yX3gzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDBhZDI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94cHJvdG8veHByb3RvX2ZpeF9mb3JfeDMyLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitEb24ndCBhbHdheXMgZGVmaW5lIExPTkc2NCBmb3IgQU1ENjQKKyAgICAKK1gzMiBkZWZpbmVzIF9fYW1kNjRfXy9hbWQ2NCB3aXRoIDMyYml0IGxvbmcuICBXZSBzaG91bGQgc2ltcGx5IGNoZWNrCitfX0xQNjRfXyBiZWZvcmUgZGVmaW5pbmcgTE9ORzY0IHdpdGhvdXQgY2hlY2tpbmcgX19hbWQ2NF9fL2FtZDY0LgorCitUaGlzIGZpeGVzIGNvbXBpbGF0aW9uIHdpdGggeDMyIHRvb2xjaGFpbi4KKworUmVjZWl2ZWQgdGhpcyBwYXRjaCBmcm9tIEguSi4gTHUgPGhqbC50b29sc0BnbWFpbC5jb20+CitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzEyLzEKKworLS0tIHhwcm90by03LjAuMjIvWG1kLmgueDMyCTIwMDktMDctMTEgMDQ6MTk6NTAuMDAwMDAwMDAwIC0wNzAwCisrKysgeHByb3RvLTcuMC4yMi9YbWQuaAkyMDExLTExLTMwIDE3OjE0OjE5LjI5MDM5NTg5MyAtMDgwMAorQEAgLTYyLDcgKzYyLDYgQEAgU09GVFdBUkUuCisgICAgICBkZWZpbmVkKF9faWE2NF9fKSB8fCBkZWZpbmVkKGlhNjQpIHx8IFwKKyAgICAgIGRlZmluZWQoX19zcGFyYzY0X18pIHx8IFwKKyAgICAgIGRlZmluZWQoX19zMzkweF9fKSB8fCBcCistICAgICBkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5lZChhbWQ2NCkgfHwgXAorICAgICAgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQorICMgIGRlZmluZSBMT05HNjQJCQkJLyogMzIvNjQtYml0IGFyY2hpdGVjdHVyZSAqLworICMgZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veHByb3RvXzcuMC4yOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veHByb3RvXzcuMC4yOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDI3YTdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94cHJvdG9fNy4wLjI4LmJiCkBAIC0wLDAgKzEsMjAgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWGxpYjogQyBMYW5ndWFnZSBYIGludGVyZmFjZSBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIGJhc2ljIGhlYWRlcnMgZm9yIHRoZSBYIFdpbmRvdyBcCitTeXN0ZW0uIgorCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWI5ZTA1MTEwN2Q1NjI4OTY2NzM5YTBiMmU5YjMyNjc2IgorCitQRSA9ICIxIgorCitTUkNfVVJJICs9ICJmaWxlOi8veHByb3RvX2ZpeF9mb3JfeDMyLnBhdGNoIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kID0gIiAtLWVuYWJsZS1zcGVjcz1ubyIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjNjZTJmMjMwYzVkOGZhOTI5ZjMyNmFkMWYwZmE0MGE4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI5ZTg1NTY4ZDFmNjhjZWVmOGEyYzA4MWRhZDliYzBlNTUwMGE1M2NmZmZkZTI0YjU2NGRjNDNkNDZkZGY2Y2EiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC9nY2NtYWtlZGVwXzEuMC4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy11dGlsL2djY21ha2VkZXBfMS4wLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NmMmY0YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC9nY2NtYWtlZGVwXzEuMC4zLmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiUHJvZ3JhbSB0byBjcmVhdGUgZGVwZW5kZW5jaWVzIGluIG1ha2VmaWxlcyIKKworREVTQ1JJUFRJT04gPSAiVGhlIGdjY21ha2VkZXAgcHJvZ3JhbSBjYWxscyAnZ2NjIC1NJyB0byBvdXRwdXQgbWFrZWZpbGUgXAorcnVsZXMgZGVzY3JpYmluZyB0aGUgZGVwZW5kZW5jaWVzIG9mIGVhY2ggc291cmNlZmlsZSwgc28gdGhhdCBtYWtlIGtub3dzIFwKK3doaWNoIG9iamVjdCBmaWxlcyBtdXN0IGJlIHJlY29tcGlsZWQgd2hlbiBhIGRlcGVuZGVuY3kgaGFzIGNoYW5nZWQuIgorCityZXF1aXJlIHhvcmctdXRpbC1jb21tb24uaW5jCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9NYWtlZmlsZS5hbTtlbmRsaW5lPTIwO21kNT0yM2MyNzczOTZkNjkwNDEzMjQ1ZWJiODliMThjNWQ0ZCIKK0RFU0NSSVBUSU9OID0gImNyZWF0ZSBkZXBlbmRlbmNpZXMgaW4gbWFrZWZpbGVzIHVzaW5nICdnY2MgLU0nIgorREVQRU5EUyA9ICJ1dGlsLW1hY3JvcyIKK1JERVBFTkRTXyR7UE59ID0gImdjYyIKKworUFIgPSAicjMiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTI3ZGRiNjEzMWViNGE1NmZkZjY2NDRhNjNhZGU3ODgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjllMmU3YTU5MGUyN2Y4NGI2NzA4YWI3YTgxZTU0NjM5OWI5NDliZjY1MmZiOWI5NTE5M2UwZTU0M2U2YTU0OCIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwvbWFrZWRlcGVuZF8xLjAuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC9tYWtlZGVwZW5kXzEuMC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YTk2N2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwvbWFrZWRlcGVuZF8xLjAuNS5iYgpAQCAtMCwwICsxLDIxIEBACityZXF1aXJlIHhvcmctdXRpbC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiY3JlYXRlIGRlcGVuZGVuY2llcyBpbiBtYWtlZmlsZXMiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBtYWtlZGVwZW5kIHByb2dyYW0gcmVhZHMgZWFjaCBzb3VyY2VmaWxlIGluIHNlcXVlbmNlIFwKK2FuZCBwYXJzZXMgaXQgbGlrZSBhIEMtcHJlcHJvY2Vzc29yLCBwcm9jZXNzaW5nIFwKK2FsbCAjaW5jbHVkZSwgI2RlZmluZSwgICN1bmRlZiwgI2lmZGVmLCAjaWZuZGVmLCAjZW5kaWYsICNpZiwgI2VsaWYgXAorYW5kICNlbHNlIGRpcmVjdGl2ZXMgc28gdGhhdCBpdCBjYW4gY29ycmVjdGx5IHRlbGwgd2hpY2ggI2luY2x1ZGUsIFwKK2RpcmVjdGl2ZXMgd291bGQgYmUgdXNlZCBpbiBhIGNvbXBpbGF0aW9uLiBBbnkgI2luY2x1ZGUsIGRpcmVjdGl2ZXMgXAorY2FuIHJlZmVyZW5jZSBmaWxlcyBoYXZpbmcgb3RoZXIgI2luY2x1ZGUgZGlyZWN0aXZlcywgYW5kIHBhcnNpbmcgd2lsbCBcCitvY2N1ciBpbiB0aGVzZSBmaWxlcyBhcyB3ZWxsLiIKKworREVQRU5EUyA9ICJ4cHJvdG8gdXRpbC1tYWNyb3MiCitQRSA9ICIxIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDNhNmVkYTM0YjQ4ZWU4MjFiM2I2NmY0Zjc1M2NlNGYiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlZmIyZDdjN2UyMjg0MDk0Nzg2M2VmYWVkYzE3NTc0NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1MDM5MDNkNDFmYjViYWRiNzNjYjcwZDdiMzc0MGM4YjMwZmUxY2M2OGM1MDRkM2I2YTg1ZTY2NDRjNGU1MDA0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy11dGlsL3V0aWwtbWFjcm9zXzEuMTkuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC91dGlsLW1hY3Jvc18xLjE5LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjZjUwZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC91dGlsLW1hY3Jvc18xLjE5LjAuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJYIGF1dG90b29scyBtYWNyb3MiCisKK0RFU0NSSVBUSU9OID0gIk00IGF1dG90b29scyBtYWNyb3MgdXNlZCBieSB2YXJpb3VzIFgub3JnIHByb2dyYW1zLiIKKworcmVxdWlyZSB4b3JnLXV0aWwtY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE5NzA1MTFmZGRkNDM5YjA3YTZiYTc4OWQyOGZmNjYyIgorCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDBlMWNhYTQ5YTcxYTI2ZTBhYTY4ZGRkMDAyMDM3MTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGQ0ZGY1MWIyOTAyM2RhZjJmNjNhZWJmM2ViYzYzOGVhODhlZmVkZmQ1NjBhYjU4NjY3NDFhYjNmOTJhY2FhMSIKKworIyAke1BOfSBpcyBlbXB0eSBzbyB3ZSBuZWVkIHRvIHR3ZWFrIC1kZXYgYW5kIC1kYmcgcGFja2FnZSBkZXBlbmRlbmNpZXMKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCitSUkVDT01NRU5EU18ke1BOfS1kYmcgPSAiJHtQTn0tZGV2ICg9ICR7RVhURU5EUEtHVn0pIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwveG9yZy11dGlsLWNvbW1vbi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwveG9yZy11dGlsLWNvbW1vbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThkMDIyYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC94b3JnLXV0aWwtY29tbW9uLmluYwpAQCAtMCwwICsxLDEzIEBACitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lngub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD14b3JnIgorCitTRUNUSU9OID0gIngxMS91dGlscyIKK0xJQ0VOU0UgPSAiTUlULVgiCisKK1hPUkdfUE4gPSAiJHtCUE59IgorCitTUkNfVVJJID0gIiR7WE9SR19NSVJST1J9L2luZGl2aWR1YWwvdXRpbC8ke1hPUkdfUE59LSR7UFZ9LnRhci5neiIKKworUyA9ICIke1dPUktESVJ9LyR7WE9SR19QTn0tJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvMTAtcHJlbG9hZC1tb2R1bGVzLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy8xMC1wcmVsb2FkLW1vZHVsZXMuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2ViNmZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvMTAtcHJlbG9hZC1tb2R1bGVzLmNvbmYKQEAgLTAsMCArMSw5IEBACitTZWN0aW9uICJNb2R1bGUiCisgICAgTG9hZCAiZmJkZXZodyIKKyAgICBMb2FkICJmYiIKKyAgICBMb2FkICJzaGFkb3ciCisgICAgTG9hZCAic2hhZG93ZmIiCisgICAgTG9hZCAidmJlIgorICAgIExvYWQgInZnYWh3IgorRW5kU2VjdGlvbgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11YXJtL3hvcmcuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVhcm0veG9yZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOWFlMjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11YXJtL3hvcmcuY29uZgpAQCAtMCwwICsxLDY5IEBACisKK1NlY3Rpb24gIkZpbGVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVLZXlib2FyZCIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgIi9kZXYvaW5wdXQvYnktcGF0aC9wbGF0Zm9ybS1pODA0Mi1zZXJpby0wLWV2ZW50LWtiZCIKKyAgICBPcHRpb24gICAgICAgICJYa2JSdWxlcyIgICAgInhvcmciCisgICAgT3B0aW9uICAgICAgICAiWGtiTW9kZWwiICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJYa2JMYXlvdXQiICAgICJ1cyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBEcml2ZXIgICAgICAgICJtb3VzZSIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC9taWNlIgorICAgIE9wdGlvbiAgICAgICAgIlByb3RvY29sIiAgICAgICAgIkltUFMvMiIKKyAgICBPcHRpb24gICAgICAgICJaQXhpc01hcHBpbmciICAgICAgICAiNCA1IgorICAgIE9wdGlvbiAgICAgICAgIkVtdWxhdGUzQnV0dG9ucyIgICAgInRydWUiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIlFlbXUgVGFibGV0IgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L3RvdWNoc2NyZWVuMCIKKyAgICBPcHRpb24gICAgICAgICJVU0IiICAgICAgICAgICAib24iCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIkRldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIERyaXZlciAgICAgICAgImZiZGV2IgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJNb25pdG9yIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBPcHRpb24gICAgICAgICJEUE1TIgorICAgICMgMTAyNHg2MDAgNTkuODUgSHogKENWVCkgaHN5bmM6IDM3LjM1IGtIejsgcGNsazogNDkuMDAgTUh6CisgICAgTW9kZWxpbmUgIjEwMjR4NjAwXzYwLjAwIiAgIDQ5LjAwICAxMDI0IDEwNzIgMTE2OCAxMzEyICA2MDAgNjAzIDYxMyA2MjQgLWhzeW5jICt2c3luYworICAgICMgNjQweDQ4MCBAIDYwSHogKEluZHVzdHJ5IHN0YW5kYXJkKSBoc3luYzogMzEuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAyNS4yICA2NDAgIDY1NiAgNzUyICA4MDAgICAgNDgwICA0OTAgIDQ5MiAgNTI1IC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3Mkh6IChWRVNBKSBoc3luYzogMzcuOWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY2NCAgNzA0ICA4MzIgICAgNDgwICA0ODkgIDQ5MSAgNTIwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3NUh6IChWRVNBKSBoc3luYzogMzcuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY1NiAgNzIwICA4NDAgICAgNDgwICA0ODEgIDQ4NCAgNTAwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA4NUh6IChWRVNBKSBoc3luYzogNDMuM2tIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzNi4wICA2NDAgIDY5NiAgNzUyICA4MzIgICAgNDgwICA0ODEgIDQ4NCAgNTA5IC1oc3luYyAtdnN5bmMKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2NyZWVuIgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIERldmljZSAgICAgICAgIkdyYXBoaWNzIENvbnRyb2xsZXIiCisgICAgTW9uaXRvciAgICAgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBTdWJTZWN0aW9uICJEaXNwbGF5IgorICAgICAgICBNb2RlcyAgICAgIjY0MHg0ODAiCisgICAgRW5kU3ViU2VjdGlvbgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJTZXJ2ZXJMYXlvdXQiCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBMYXlvdXQiCisgICAgU2NyZWVuICAgICAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgSW5wdXREZXZpY2UgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgIyBJbnB1dERldmljZSAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBJbnB1dERldmljZSAgICAiUUVNVSBUYWJsZXQiCisgICAgT3B0aW9uICAgICAgICAgIkFsbG93RW1wdHlJbnB1dCIgIm5vIgorRW5kU2VjdGlvbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdW1pcHMveG9yZy5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdW1pcHMveG9yZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YzhiNTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11bWlwcy94b3JnLmNvbmYKQEAgLTAsMCArMSw3MCBAQAorCitTZWN0aW9uICJGaWxlcyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlS2V5Ym9hcmQiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICIvZGV2L2lucHV0L2J5LXBhdGgvcGxhdGZvcm0taTgwNDItc2VyaW8tMC1ldmVudC1rYmQiCisgICAgT3B0aW9uICAgICAgICAiWGtiUnVsZXMiICAgICJ4b3JnIgorICAgIE9wdGlvbiAgICAgICAgIlhrYk1vZGVsIiAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiWGtiTGF5b3V0IiAgICAidXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgRHJpdmVyICAgICAgICAibW91c2UiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvbWljZSIKKyAgICBPcHRpb24gICAgICAgICJQcm90b2NvbCIgICAgICAgICJJbVBTLzIiCisgICAgT3B0aW9uICAgICAgICAiWkF4aXNNYXBwaW5nIiAgICAgICAgIjQgNSIKKyAgICBPcHRpb24gICAgICAgICJFbXVsYXRlM0J1dHRvbnMiICAgICJ0cnVlIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJRZW11IFRhYmxldCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAiCisgICAgT3B0aW9uICAgICAgICAiVVNCIiAgICAgICAgICAgIm9uIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJEZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR3JhcGhpY3MgQ29udHJvbGxlciIKKyAgICBEcml2ZXIgICAgICAgICJmYmRldiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiTW9uaXRvciIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgT3B0aW9uICAgICAgICAiRFBNUyIKKyAgICAjIDEwMjR4NjAwIDU5Ljg1IEh6IChDVlQpIGhzeW5jOiAzNy4zNSBrSHo7IHBjbGs6IDQ5LjAwIE1IegorICAgIE1vZGVsaW5lICIxMDI0eDYwMF82MC4wMCIgICA0OS4wMCAgMTAyNCAxMDcyIDExNjggMTMxMiAgNjAwIDYwMyA2MTMgNjI0IC1oc3luYyArdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA2MEh6IChJbmR1c3RyeSBzdGFuZGFyZCkgaHN5bmM6IDMxLjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMjUuMiAgNjQwICA2NTYgIDc1MiAgODAwICAgIDQ4MCAgNDkwICA0OTIgIDUyNSAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzJIeiAoVkVTQSkgaHN5bmM6IDM3LjlrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NjQgIDcwNCAgODMyICAgIDQ4MCAgNDg5ICA0OTEgIDUyMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzVIeiAoVkVTQSkgaHN5bmM6IDM3LjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NTYgIDcyMCAgODQwICAgIDQ4MCAgNDgxICA0ODQgIDUwMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgODVIeiAoVkVTQSkgaHN5bmM6IDQzLjNrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzYuMCAgNjQwICA2OTYgIDc1MiAgODMyICAgIDQ4MCAgNDgxICA0ODQgIDUwOSAtaHN5bmMgLXZzeW5jCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNjcmVlbiIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBEZXZpY2UgICAgICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIE1vbml0b3IgICAgICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgRGVmYXVsdERlcHRoICAxNgorICAgIFN1YlNlY3Rpb24gIkRpc3BsYXkiCisgICAgICAgIE1vZGVzICAgICAiNjQweDQ4MCIKKyAgICBFbmRTdWJTZWN0aW9uCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNlcnZlckxheW91dCIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IExheW91dCIKKyAgICBTY3JlZW4gICAgICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBJbnB1dERldmljZSAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICAjIElucHV0RGV2aWNlICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIElucHV0RGV2aWNlICAgICJRRU1VIFRhYmxldCIKKyAgICBPcHRpb24gICAgICAgICAiQWxsb3dFbXB0eUlucHV0IiAibm8iCitFbmRTZWN0aW9uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11bWlwczY0L3hvcmcuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVtaXBzNjQveG9yZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOWFlMjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11bWlwczY0L3hvcmcuY29uZgpAQCAtMCwwICsxLDY5IEBACisKK1NlY3Rpb24gIkZpbGVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVLZXlib2FyZCIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgIi9kZXYvaW5wdXQvYnktcGF0aC9wbGF0Zm9ybS1pODA0Mi1zZXJpby0wLWV2ZW50LWtiZCIKKyAgICBPcHRpb24gICAgICAgICJYa2JSdWxlcyIgICAgInhvcmciCisgICAgT3B0aW9uICAgICAgICAiWGtiTW9kZWwiICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJYa2JMYXlvdXQiICAgICJ1cyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBEcml2ZXIgICAgICAgICJtb3VzZSIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC9taWNlIgorICAgIE9wdGlvbiAgICAgICAgIlByb3RvY29sIiAgICAgICAgIkltUFMvMiIKKyAgICBPcHRpb24gICAgICAgICJaQXhpc01hcHBpbmciICAgICAgICAiNCA1IgorICAgIE9wdGlvbiAgICAgICAgIkVtdWxhdGUzQnV0dG9ucyIgICAgInRydWUiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIlFlbXUgVGFibGV0IgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L3RvdWNoc2NyZWVuMCIKKyAgICBPcHRpb24gICAgICAgICJVU0IiICAgICAgICAgICAib24iCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIkRldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIERyaXZlciAgICAgICAgImZiZGV2IgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJNb25pdG9yIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBPcHRpb24gICAgICAgICJEUE1TIgorICAgICMgMTAyNHg2MDAgNTkuODUgSHogKENWVCkgaHN5bmM6IDM3LjM1IGtIejsgcGNsazogNDkuMDAgTUh6CisgICAgTW9kZWxpbmUgIjEwMjR4NjAwXzYwLjAwIiAgIDQ5LjAwICAxMDI0IDEwNzIgMTE2OCAxMzEyICA2MDAgNjAzIDYxMyA2MjQgLWhzeW5jICt2c3luYworICAgICMgNjQweDQ4MCBAIDYwSHogKEluZHVzdHJ5IHN0YW5kYXJkKSBoc3luYzogMzEuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAyNS4yICA2NDAgIDY1NiAgNzUyICA4MDAgICAgNDgwICA0OTAgIDQ5MiAgNTI1IC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3Mkh6IChWRVNBKSBoc3luYzogMzcuOWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY2NCAgNzA0ICA4MzIgICAgNDgwICA0ODkgIDQ5MSAgNTIwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3NUh6IChWRVNBKSBoc3luYzogMzcuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY1NiAgNzIwICA4NDAgICAgNDgwICA0ODEgIDQ4NCAgNTAwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA4NUh6IChWRVNBKSBoc3luYzogNDMuM2tIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzNi4wICA2NDAgIDY5NiAgNzUyICA4MzIgICAgNDgwICA0ODEgIDQ4NCAgNTA5IC1oc3luYyAtdnN5bmMKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2NyZWVuIgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIERldmljZSAgICAgICAgIkdyYXBoaWNzIENvbnRyb2xsZXIiCisgICAgTW9uaXRvciAgICAgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBTdWJTZWN0aW9uICJEaXNwbGF5IgorICAgICAgICBNb2RlcyAgICAgIjY0MHg0ODAiCisgICAgRW5kU3ViU2VjdGlvbgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJTZXJ2ZXJMYXlvdXQiCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBMYXlvdXQiCisgICAgU2NyZWVuICAgICAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgSW5wdXREZXZpY2UgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgIyBJbnB1dERldmljZSAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBJbnB1dERldmljZSAgICAiUUVNVSBUYWJsZXQiCisgICAgT3B0aW9uICAgICAgICAgIkFsbG93RW1wdHlJbnB1dCIgIm5vIgorRW5kU2VjdGlvbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdXBwYy94b3JnLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11cHBjL3hvcmcuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjlhZTIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdXBwYy94b3JnLmNvbmYKQEAgLTAsMCArMSw2OSBAQAorCitTZWN0aW9uICJGaWxlcyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlS2V5Ym9hcmQiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICIvZGV2L2lucHV0L2J5LXBhdGgvcGxhdGZvcm0taTgwNDItc2VyaW8tMC1ldmVudC1rYmQiCisgICAgT3B0aW9uICAgICAgICAiWGtiUnVsZXMiICAgICJ4b3JnIgorICAgIE9wdGlvbiAgICAgICAgIlhrYk1vZGVsIiAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiWGtiTGF5b3V0IiAgICAidXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgRHJpdmVyICAgICAgICAibW91c2UiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvbWljZSIKKyAgICBPcHRpb24gICAgICAgICJQcm90b2NvbCIgICAgICAgICJJbVBTLzIiCisgICAgT3B0aW9uICAgICAgICAiWkF4aXNNYXBwaW5nIiAgICAgICAgIjQgNSIKKyAgICBPcHRpb24gICAgICAgICJFbXVsYXRlM0J1dHRvbnMiICAgICJ0cnVlIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJRZW11IFRhYmxldCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAiCisgICAgT3B0aW9uICAgICAgICAiVVNCIiAgICAgICAgICAgIm9uIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJEZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR3JhcGhpY3MgQ29udHJvbGxlciIKKyAgICBEcml2ZXIgICAgICAgICJmYmRldiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiTW9uaXRvciIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgT3B0aW9uICAgICAgICAiRFBNUyIKKyAgICAjIDEwMjR4NjAwIDU5Ljg1IEh6IChDVlQpIGhzeW5jOiAzNy4zNSBrSHo7IHBjbGs6IDQ5LjAwIE1IegorICAgIE1vZGVsaW5lICIxMDI0eDYwMF82MC4wMCIgICA0OS4wMCAgMTAyNCAxMDcyIDExNjggMTMxMiAgNjAwIDYwMyA2MTMgNjI0IC1oc3luYyArdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA2MEh6IChJbmR1c3RyeSBzdGFuZGFyZCkgaHN5bmM6IDMxLjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMjUuMiAgNjQwICA2NTYgIDc1MiAgODAwICAgIDQ4MCAgNDkwICA0OTIgIDUyNSAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzJIeiAoVkVTQSkgaHN5bmM6IDM3LjlrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NjQgIDcwNCAgODMyICAgIDQ4MCAgNDg5ICA0OTEgIDUyMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzVIeiAoVkVTQSkgaHN5bmM6IDM3LjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NTYgIDcyMCAgODQwICAgIDQ4MCAgNDgxICA0ODQgIDUwMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgODVIeiAoVkVTQSkgaHN5bmM6IDQzLjNrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzYuMCAgNjQwICA2OTYgIDc1MiAgODMyICAgIDQ4MCAgNDgxICA0ODQgIDUwOSAtaHN5bmMgLXZzeW5jCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNjcmVlbiIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBEZXZpY2UgICAgICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIE1vbml0b3IgICAgICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgU3ViU2VjdGlvbiAiRGlzcGxheSIKKyAgICAgICAgTW9kZXMgICAgICI2NDB4NDgwIgorICAgIEVuZFN1YlNlY3Rpb24KK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2VydmVyTGF5b3V0IgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgTGF5b3V0IgorICAgIFNjcmVlbiAgICAgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIElucHV0RGV2aWNlICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgICMgSW5wdXREZXZpY2UgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgSW5wdXREZXZpY2UgICAgIlFFTVUgVGFibGV0IgorICAgIE9wdGlvbiAgICAgICAgICJBbGxvd0VtcHR5SW5wdXQiICJubyIKK0VuZFNlY3Rpb24KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVzaDQveG9yZy5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdXNoNC94b3JnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI5YWUyMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVzaDQveG9yZy5jb25mCkBAIC0wLDAgKzEsNjkgQEAKKworU2VjdGlvbiAiRmlsZXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZUtleWJvYXJkIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAiL2Rldi9pbnB1dC9ieS1wYXRoL3BsYXRmb3JtLWk4MDQyLXNlcmlvLTAtZXZlbnQta2JkIgorICAgIE9wdGlvbiAgICAgICAgIlhrYlJ1bGVzIiAgICAieG9yZyIKKyAgICBPcHRpb24gICAgICAgICJYa2JNb2RlbCIgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIlhrYkxheW91dCIgICAgInVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIERyaXZlciAgICAgICAgIm1vdXNlIgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L21pY2UiCisgICAgT3B0aW9uICAgICAgICAiUHJvdG9jb2wiICAgICAgICAiSW1QUy8yIgorICAgIE9wdGlvbiAgICAgICAgIlpBeGlzTWFwcGluZyIgICAgICAgICI0IDUiCisgICAgT3B0aW9uICAgICAgICAiRW11bGF0ZTNCdXR0b25zIiAgICAidHJ1ZSIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiUWVtdSBUYWJsZXQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wIgorICAgIE9wdGlvbiAgICAgICAgIlVTQiIgICAgICAgICAgICJvbiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiRGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkdyYXBoaWNzIENvbnRyb2xsZXIiCisgICAgRHJpdmVyICAgICAgICAiZmJkZXYiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIk1vbml0b3IiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIE9wdGlvbiAgICAgICAgIkRQTVMiCisgICAgIyAxMDI0eDYwMCA1OS44NSBIeiAoQ1ZUKSBoc3luYzogMzcuMzUga0h6OyBwY2xrOiA0OS4wMCBNSHoKKyAgICBNb2RlbGluZSAiMTAyNHg2MDBfNjAuMDAiICAgNDkuMDAgIDEwMjQgMTA3MiAxMTY4IDEzMTIgIDYwMCA2MDMgNjEzIDYyNCAtaHN5bmMgK3ZzeW5jCisgICAgIyA2NDB4NDgwIEAgNjBIeiAoSW5kdXN0cnkgc3RhbmRhcmQpIGhzeW5jOiAzMS41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDI1LjIgIDY0MCAgNjU2ICA3NTIgIDgwMCAgICA0ODAgIDQ5MCAgNDkyICA1MjUgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDcySHogKFZFU0EpIGhzeW5jOiAzNy45a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjY0ICA3MDQgIDgzMiAgICA0ODAgIDQ4OSAgNDkxICA1MjAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDc1SHogKFZFU0EpIGhzeW5jOiAzNy41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjU2ICA3MjAgIDg0MCAgICA0ODAgIDQ4MSAgNDg0ICA1MDAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDg1SHogKFZFU0EpIGhzeW5jOiA0My4za0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDM2LjAgIDY0MCAgNjk2ICA3NTIgIDgzMiAgICA0ODAgIDQ4MSAgNDg0ICA1MDkgLWhzeW5jIC12c3luYworRW5kU2VjdGlvbgorCitTZWN0aW9uICJTY3JlZW4iCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgRGV2aWNlICAgICAgICAiR3JhcGhpY3MgQ29udHJvbGxlciIKKyAgICBNb25pdG9yICAgICAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIFN1YlNlY3Rpb24gIkRpc3BsYXkiCisgICAgICAgIE1vZGVzICAgICAiNjQweDQ4MCIKKyAgICBFbmRTdWJTZWN0aW9uCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNlcnZlckxheW91dCIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IExheW91dCIKKyAgICBTY3JlZW4gICAgICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBJbnB1dERldmljZSAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICAjIElucHV0RGV2aWNlICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIElucHV0RGV2aWNlICAgICJRRU1VIFRhYmxldCIKKyAgICBPcHRpb24gICAgICAgICAiQWxsb3dFbXB0eUlucHV0IiAibm8iCitFbmRTZWN0aW9uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11eDg2LTY0L3hvcmcuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXV4ODYtNjQveG9yZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZGE5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11eDg2LTY0L3hvcmcuY29uZgpAQCAtMCwwICsxLDY0IEBACisKK1NlY3Rpb24gIkZpbGVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVLZXlib2FyZCIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgIi9kZXYvaW5wdXQvYnktcGF0aC9wbGF0Zm9ybS1pODA0Mi1zZXJpby0wLWV2ZW50LWtiZCIKKyAgICBPcHRpb24gICAgICAgICJYa2JSdWxlcyIgICAgInhvcmciCisgICAgT3B0aW9uICAgICAgICAiWGtiTW9kZWwiICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJYa2JMYXlvdXQiICAgICJ1cyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBEcml2ZXIgICAgICAgICJ2bW1vdXNlIgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L21pY2UiCisgICAgT3B0aW9uICAgICAgICAiUHJvdG9jb2wiICAgICAgICAiSW1QUy8yIgorICAgIE9wdGlvbiAgICAgICAgIlpBeGlzTWFwcGluZyIgICAgICAgICI0IDUiCisgICAgT3B0aW9uICAgICAgICAiRW11bGF0ZTNCdXR0b25zIiAgICAidHJ1ZSIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiUWVtdSBUYWJsZXQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wIgorICAgIE9wdGlvbiAgICAgICAgIlVTQiIgICAgICAgICAgICJvbiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiTW9uaXRvciIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgT3B0aW9uICAgICAgICAiRFBNUyIKKyAgICAjIDEwMjR4NjAwIDU5Ljg1IEh6IChDVlQpIGhzeW5jOiAzNy4zNSBrSHo7IHBjbGs6IDQ5LjAwIE1IegorICAgIE1vZGVsaW5lICIxMDI0eDYwMF82MC4wMCIgICA0OS4wMCAgMTAyNCAxMDcyIDExNjggMTMxMiAgNjAwIDYwMyA2MTMgNjI0IC1oc3luYyArdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA2MEh6IChJbmR1c3RyeSBzdGFuZGFyZCkgaHN5bmM6IDMxLjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMjUuMiAgNjQwICA2NTYgIDc1MiAgODAwICAgIDQ4MCAgNDkwICA0OTIgIDUyNSAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzJIeiAoVkVTQSkgaHN5bmM6IDM3LjlrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NjQgIDcwNCAgODMyICAgIDQ4MCAgNDg5ICA0OTEgIDUyMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzVIeiAoVkVTQSkgaHN5bmM6IDM3LjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NTYgIDcyMCAgODQwICAgIDQ4MCAgNDgxICA0ODQgIDUwMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgODVIeiAoVkVTQSkgaHN5bmM6IDQzLjNrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzYuMCAgNjQwICA2OTYgIDc1MiAgODMyICAgIDQ4MCAgNDgxICA0ODQgIDUwOSAtaHN5bmMgLXZzeW5jCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNjcmVlbiIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBEZXZpY2UgICAgICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIE1vbml0b3IgICAgICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgU3ViU2VjdGlvbiAiRGlzcGxheSIKKyAgICAgICAgTW9kZXMgICAgICI2NDB4NDgwIgorICAgIEVuZFN1YlNlY3Rpb24KK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2VydmVyTGF5b3V0IgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgTGF5b3V0IgorICAgIFNjcmVlbiAgICAgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIElucHV0RGV2aWNlICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgICMgSW5wdXREZXZpY2UgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgSW5wdXREZXZpY2UgICAgIlFFTVUgVGFibGV0IgorICAgIE9wdGlvbiAgICAgICAgICJBbGxvd0VtcHR5SW5wdXQiICJubyIKK0VuZFNlY3Rpb24KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXV4ODYveG9yZy5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdXg4Ni94b3JnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJkYTllYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXV4ODYveG9yZy5jb25mCkBAIC0wLDAgKzEsNjQgQEAKKworU2VjdGlvbiAiRmlsZXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZUtleWJvYXJkIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAiL2Rldi9pbnB1dC9ieS1wYXRoL3BsYXRmb3JtLWk4MDQyLXNlcmlvLTAtZXZlbnQta2JkIgorICAgIE9wdGlvbiAgICAgICAgIlhrYlJ1bGVzIiAgICAieG9yZyIKKyAgICBPcHRpb24gICAgICAgICJYa2JNb2RlbCIgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIlhrYkxheW91dCIgICAgInVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIERyaXZlciAgICAgICAgInZtbW91c2UiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvbWljZSIKKyAgICBPcHRpb24gICAgICAgICJQcm90b2NvbCIgICAgICAgICJJbVBTLzIiCisgICAgT3B0aW9uICAgICAgICAiWkF4aXNNYXBwaW5nIiAgICAgICAgIjQgNSIKKyAgICBPcHRpb24gICAgICAgICJFbXVsYXRlM0J1dHRvbnMiICAgICJ0cnVlIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJRZW11IFRhYmxldCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAiCisgICAgT3B0aW9uICAgICAgICAiVVNCIiAgICAgICAgICAgIm9uIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJNb25pdG9yIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBPcHRpb24gICAgICAgICJEUE1TIgorICAgICMgMTAyNHg2MDAgNTkuODUgSHogKENWVCkgaHN5bmM6IDM3LjM1IGtIejsgcGNsazogNDkuMDAgTUh6CisgICAgTW9kZWxpbmUgIjEwMjR4NjAwXzYwLjAwIiAgIDQ5LjAwICAxMDI0IDEwNzIgMTE2OCAxMzEyICA2MDAgNjAzIDYxMyA2MjQgLWhzeW5jICt2c3luYworICAgICMgNjQweDQ4MCBAIDYwSHogKEluZHVzdHJ5IHN0YW5kYXJkKSBoc3luYzogMzEuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAyNS4yICA2NDAgIDY1NiAgNzUyICA4MDAgICAgNDgwICA0OTAgIDQ5MiAgNTI1IC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3Mkh6IChWRVNBKSBoc3luYzogMzcuOWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY2NCAgNzA0ICA4MzIgICAgNDgwICA0ODkgIDQ5MSAgNTIwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3NUh6IChWRVNBKSBoc3luYzogMzcuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY1NiAgNzIwICA4NDAgICAgNDgwICA0ODEgIDQ4NCAgNTAwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA4NUh6IChWRVNBKSBoc3luYzogNDMuM2tIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzNi4wICA2NDAgIDY5NiAgNzUyICA4MzIgICAgNDgwICA0ODEgIDQ4NCAgNTA5IC1oc3luYyAtdnN5bmMKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2NyZWVuIgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIERldmljZSAgICAgICAgIkdyYXBoaWNzIENvbnRyb2xsZXIiCisgICAgTW9uaXRvciAgICAgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBTdWJTZWN0aW9uICJEaXNwbGF5IgorICAgICAgICBNb2RlcyAgICAgIjY0MHg0ODAiCisgICAgRW5kU3ViU2VjdGlvbgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJTZXJ2ZXJMYXlvdXQiCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBMYXlvdXQiCisgICAgU2NyZWVuICAgICAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgSW5wdXREZXZpY2UgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgIyBJbnB1dERldmljZSAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBJbnB1dERldmljZSAgICAiUUVNVSBUYWJsZXQiCisgICAgT3B0aW9uICAgICAgICAgIkFsbG93RW1wdHlJbnB1dCIgIm5vIgorRW5kU2VjdGlvbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcveG9yZy5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcveG9yZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy94b3JnLmNvbmYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDdjMjA0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgY29uZmlndXJhdGlvbiBmaWxlIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy54Lm9yZyIKK1NFQ1RJT04gPSAieDExL2Jhc2UiCitMSUNFTlNFID0gIk1JVC1YIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitQUiA9ICJyMzMiCisKK1NSQ19VUkkgPSAiZmlsZTovL3hvcmcuY29uZiIKKworU1JDX1VSSV9hcHBlbmRfbGliYy1tdXNsID0gIlwKKyAgICAgICAgICBmaWxlOi8vMTAtcHJlbG9hZC1tb2R1bGVzLmNvbmYgXAorIgorCitTID0gIiR7V09SS0RJUn0iCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L1gxMS94b3JnLmNvbmYiCitDT05GRklMRVNfJHtQTn1fYXBwZW5kX2xpYmMtbXVzbCA9ICIgJHtzeXNjb25mZGlyfS9YMTEveG9yZy5jb25mLmQvMTAtcHJlbG9hZC1tb2R1bGVzLmNvbmYiCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorCitkb19pbnN0YWxsICgpIHsKKwlpZiB0ZXN0IC1zICR7V09SS0RJUn0veG9yZy5jb25mOyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L1gxMQorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS94b3JnLmNvbmYgJHtEfS8ke3N5c2NvbmZkaXJ9L1gxMS8KKwlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9saWJjLW11c2wgKCkgeworCWluc3RhbGwgLURtIDA2NDQgJHtXT1JLRElSfS8xMC1wcmVsb2FkLW1vZHVsZXMuY29uZiAke0R9LyR7c3lzY29uZmRpcn0vWDExL3hvcmcuY29uZi5kLzEwLXByZWxvYWQtbW9kdWxlcy5jb25mCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMWMwMmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnLmluYwpAQCAtMCwwICsxLDE3MCBAQAorU1VNTUFSWSA9ICJUaGUgWC5PcmcgWCBzZXJ2ZXIiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lngub3JnIgorU0VDVElPTiA9ICJ4MTEvYmFzZSIKK0xJQ0VOU0UgPSAiTUlULVgiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZGY4Nzk1MGFmNTFhYzJjNTgyMjA5NDU1M2VhMTg4MCIKKworIyB4Zjg2LSotKiBwYWNrYWdlcyBkZXBlbmQgb24gYW4gWCBzZXJ2ZXIgYnVpbHQgd2l0aCB0aGUgeGZyZWU4NiBERFgKKyMgc28gd2UgaGF2ZSBhIHZpcnR1YWwgdG8gcmVwcmVzZW50IHRoYXQ6CisjIGRlcHJlY2F0ZWQsIHdlIHNob3VsZCB1c2UgdmlydHVhbC94c2VydmVyIGluc3RlYWQKK1BST1ZJREVTID0gInZpcnR1YWwveHNlcnZlci14Zjg2IgorCisjIE90aGVyIHBhY2thZ2VzIHRlbmQgdG8ganVzdCBjYXJlIHRoYXQgdGhlcmUgaXMgKmFuKiBYIHNlcnZlcjoKK1BST1ZJREVTICs9ICJ2aXJ0dWFsL3hzZXJ2ZXIiCisKK1BFID0gIjIiCitJTkNfUFIgPSAicjgiCisKK1hPUkdfUE4gPSAieG9yZy1zZXJ2ZXIiCitTUkNfVVJJID0gIiR7WE9SR19NSVJST1J9L2luZGl2aWR1YWwveHNlcnZlci8ke1hPUkdfUE59LSR7UFZ9LnRhci5iejIiCitTUkNfVVJJICs9ICJmaWxlOi8vbWFjcm9fdHdlYWsucGF0Y2giCisKK1MgPSAiJHtXT1JLRElSfS8ke1hPUkdfUE59LSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworUFJPVE9fREVQUyA9ICJyYW5kcnByb3RvIHJlbmRlcnByb3RvIGZpeGVzcHJvdG8gZGFtYWdlcHJvdG8geGV4dHByb3RvIHhwcm90byB4Zjg2ZGdhcHJvdG8geGY4Nm1pc2Nwcm90byB4Zjg2dmlkbW9kZXByb3RvIGNvbXBvc2l0ZXByb3RvIHJlY29yZHByb3RvIHJlc291cmNlcHJvdG8gdmlkZW9wcm90byBzY3Juc2F2ZXJwcm90byAgeGluZXJhbWFwcm90byBmb250c3Byb3RvIGticHJvdG8gaW5wdXRwcm90byBiaWdyZXFzcHJvdG8geGNtaXNjcHJvdG8gcHJlc2VudHByb3RvIgorTElCX0RFUFMgPSAicGl4bWFuIGxpYnhmb250IHh0cmFucyBsaWJ4YXUgbGlieGV4dCBsaWJ4ZG1jcCBsaWJkcm0gbGlieGtiZmlsZSBsaWJwY2lhY2Nlc3Mgb3BlbnNzbCBsaWJnY3J5cHQiCitERVBFTkRTID0gIiR7UFJPVE9fREVQU30gJHtMSUJfREVQU30gZm9udC11dGlsIgorCisjIFNwbGl0IG91dCBzb21lIG1vZHVsZXMgYW5kIGV4dGVuc2lvbnMgZnJvbSB0aGUgbWFpbiBwYWNrYWdlCisjIFRoZXNlIGFyZW4ndCBuZWVkZWQgZm9yIGJhc2ljIG9wZXJhdGlvbnMgYW5kIG9ubHkgdGFrZSB1cCBzcGFjZToKKyMgIDMyLjBrICAgbGliZHJpLnNvCisjICA5MS4wayAgIGxpYmV4YS5zbworIyAgMzM2LjBrICBsaWJnbHguc28KKyMgIDEzNjBrICAgbGliaW50MTAuc28KKyMgIDE4MC4wayAgbGlid2ZiLnNvCisjICAzMjAuMGsgIGxpYnhhYS5zbworIyAgMTI0LjBrICBsaWJ4ZjFicHAuc28KKyMgIDg0LjBrICAgbGlieGY0YnBwLnNvCisjICAgICAgICAgIGxpYnJlY29yZC5zbworIyAgICAgICAgICBsaWJleHRtb2Quc28KKyMgICAgICAgICAgbGliZGJlLnNvCisKK1BBQ0tBR0VTID0rICIke1BOfS1zZWN1cml0eS1wb2xpY3kgXAorICAgICAgICAgICAgICR7UE59LXNkbCBcCisgICAgICAgICAgICAgJHtQTn0tZmJkZXYgXAorICAgICAgICAgICAgICR7UE59LXh2ZmIgXAorICAgICAgICAgICAgICR7UE59LXV0aWxzIFwKKyAgICAgICAgICAgICAke1BOfS14ZXBoeXIgXAorICAgICAgICAgICAgICR7UE59LXh3YXlsYW5kIFwKKyAgICAgICAgICAgICAke1BOfS1tdWx0aW1lZGlhLW1vZHVsZXMgXAorICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kcmkgXAorICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kcmkyIFwKKyAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZ2x4IFwKKyAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tcmVjb3JkIFwKKyAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZXh0bW9kIFwKKyAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZGJlIFwKKyAgICAgICAgICAgICAke1BOfS1tb2R1bGUtbGliaW50MTAgXAorICAgICAgICAgICAgICR7UE59LW1vZHVsZS1saWJhZmIgXAorICAgICAgICAgICAgICR7UE59LW1vZHVsZS1saWJ3ZmIgIFwKKyAgICAgICAgICAgICAke1BOfS1tb2R1bGUtbGlibWZiIFwKKyAgICAgICAgICAgICAke1BOfS1tb2R1bGUtbGliY2ZiIFwKKyAgICAgICAgICAgICAke1BOfS1tb2R1bGUtZXhhIFwKKyAgICAgICAgICAgICAke1BOfS1tb2R1bGUteGFhIFwKKyAgICAgICAgICAgICAke1BOfS1tb2R1bGUtbGlieGYxYnBwIFwKKyAgICAgICAgICAgICAke1BOfS1tb2R1bGUtbGlieGY0YnBwIFwKKyAgICAgICAgICAgICB4Zjg2LXZpZGVvLW1vZGVzZXR0aW5nIgorCitTVU1NQVJZX3hmODYtdmlkZW8tbW9kZXNldHRpbmcgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gbW9kZXNldHRpbmcgZGlzcGxheSBkcml2ZXIiCitJTlNBTkVfU0tJUF94Zjg2LXZpZGVvLW1vZGVzZXR0aW5nID0gInhvcmctZHJpdmVyLWFiaSIKKworUlJFQ09NTUVORFNfJHtQTn0gKz0gIiR7UE59LXNlY3VyaXR5LXBvbGljeSB4a2V5Ym9hcmQtY29uZmlnIHJnYiB4c2VydmVyLXhmODYtY29uZmlnIHhrYmNvbXAiCitSREVQRU5EU18ke1BOfS14dmZiICs9ICJ4a2V5Ym9hcmQtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4YSA9ICIke1BOfSAoPSAke0VYVEVORFBLR1Z9KSIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9ICR7bGliZGlyfS9YMTEvT3B0aW9ucyAke2xpYmRpcn0vWDExL0NhcmRzICR7bGliZGlyfS9YMTEvZ2V0Y29uZmlnICR7bGliZGlyfS9YMTEvZXRjICR7bGliZGlyfS9tb2R1bGVzLyouc28gJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy8qLnNvIC9ldGMvWDExICR7bGliZGlyfS94b3JnL3Byb3RvY29sLnR4dCAke2RhdGFkaXJ9L1gxMS94b3JnLmNvbmYuZCIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy8qLmxhICR7bGliZGlyfS94b3JnL21vZHVsZXMvKi8qLmxhIgorRklMRVNfJHtQTn0tZG9jICs9ICIke2xpYmRpcn0vWDExL2RvYyAke2RhdGFkaXJ9L1gxMS94a2IvY29tcGlsZWQvUkVBRE1FLmNvbXBpbGVkICR7bG9jYWxzdGF0ZWRpcn0vbGliL3hrYi9SRUFETUUuY29tcGlsZWQiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS94b3JnL21vZHVsZXMvKi8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICIKK0ZJTEVTXyR7UE59LXNlY3VyaXR5LXBvbGljeSArPSAiJHtsaWJkaXJ9L3hzZXJ2ZXIvU2VjdXJpdHlQb2xpY3kiCitGSUxFU18ke1BOfS1zZGwgPSAiJHtiaW5kaXJ9L1hzZGwiCitGSUxFU18ke1BOfS1mYmRldiA9ICIke2JpbmRpcn0vWGZiZGV2IgorRklMRVNfJHtQTn0teHZmYiA9ICIke2JpbmRpcn0vWHZmYiIKK0ZJTEVTXyR7UE59LXV0aWxzID0gIiR7YmluZGlyfS9zY2FucGNpICR7YmluZGlyfS9wY2l0d2VhayAke2JpbmRpcn0vaW9wb3J0ICR7YmluZGlyfS9pbltid2xdICR7YmluZGlyfS9vdXRbYndsXSAke2JpbmRpcn0vbW1hcFtyd10gJHtiaW5kaXJ9L2d0ZiAke2JpbmRpcn0vZ2V0Y29uZmlnICR7YmluZGlyfS9nZXRjb25maWcucGwiCitGSUxFU18ke1BOfS14ZXBoeXIgPSAiJHtiaW5kaXJ9L1hlcGh5ciIKK0ZJTEVTXyR7UE59LXh3YXlsYW5kID0gIiR7YmluZGlyfS9Yd2F5bGFuZCIKK0ZJTEVTXyR7UE59LW11bHRpbWVkaWEtbW9kdWxlcyA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL211bHRpbWVkaWEvKmRydioiCitGSUxFU18ke1BOfS1leHRlbnNpb24tZHJpID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvZXh0ZW5zaW9ucy9saWJkcmkuc28iCitGSUxFU18ke1BOfS1leHRlbnNpb24tZHJpMiA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2V4dGVuc2lvbnMvbGliZHJpMi5zbyIKK0ZJTEVTXyR7UE59LWV4dGVuc2lvbi1nbHggPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9leHRlbnNpb25zL2xpYmdseC5zbyIKK0ZJTEVTXyR7UE59LWV4dGVuc2lvbi1yZWNvcmQgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9leHRlbnNpb25zL2xpYnJlY29yZC5zbyIKK0ZJTEVTXyR7UE59LWV4dGVuc2lvbi1leHRtb2QgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9leHRlbnNpb25zL2xpYmV4dG1vZC5zbyIKK0ZJTEVTXyR7UE59LWV4dGVuc2lvbi1kYmUgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9leHRlbnNpb25zL2xpYmRiZS5zbyIKK0ZJTEVTXyR7UE59LW1vZHVsZS1saWJpbnQxMCA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2xpYmludDEwLnNvIgorRklMRVNfJHtQTn0tbW9kdWxlLWxpYmFmYiA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2xpYmFmYi5zbyIKK0ZJTEVTXyR7UE59LW1vZHVsZS1saWJ3ZmIgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9saWJ3ZmIuc28iCitGSUxFU18ke1BOfS1tb2R1bGUtbGlibWZiID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvbGlibWZiLnNvIgorRklMRVNfJHtQTn0tbW9kdWxlLWxpYmNmYiA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2xpYmNmYi5zbyIKK0ZJTEVTXyR7UE59LW1vZHVsZS1leGEgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9saWJleGEuc28iCitGSUxFU18ke1BOfS1tb2R1bGUteGFhID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvbGlieGFhLnNvIgorRklMRVNfJHtQTn0tbW9kdWxlLWxpYnhmMWJwcCA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2xpYnhmMWJwcC5zbyIKK0ZJTEVTXyR7UE59LW1vZHVsZS1saWJ4ZjRicHAgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9saWJ4ZjRicHAuc28iCitGSUxFU194Zjg2LXZpZGVvLW1vZGVzZXR0aW5nID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvZHJpdmVycy9tb2Rlc2V0dGluZ19kcnYuc28iCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLWZvcD1ubyBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1waWMgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtc3RhdGljIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXJlY29yZCBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1kbXggXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUteG5lc3QgXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS14dmZiIFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtY29tcG9zaXRlIFwKKyAgICAgICAgICAgICAgICAgLS13aXRob3V0LWR0cmFjZSBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1pbnQxMD14ODZlbXUgXAorICAgICAgICAgICAgICAgICAtLXN5c2NvbmZkaXI9L2V0Yy9YMTEgXAorICAgICAgICAgICAgICAgICAtLWxvY2Fsc3RhdGVkaXI9L3ZhciBcCisgICAgICAgICAgICAgICAgIC0td2l0aC14a2Itb3V0cHV0PS92YXIvbGliL3hrYiBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1zaGExPWxpYmNyeXB0byBcCisiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJkcmkyIHVkZXYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnZHJpIGdseCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAid2F5bGFuZCIsICJ4d2F5bGFuZCIsICIiLCBkKX0gXAorIgorCitQQUNLQUdFQ09ORklHW3VkZXZdID0gIi0tZW5hYmxlLWNvbmZpZy11ZGV2LC0tZGlzYWJsZS1jb25maWctdWRldix1ZGV2IgorUEFDS0FHRUNPTkZJR1tkcmldID0gIi0tZW5hYmxlLWRyaSwtLWRpc2FibGUtZHJpLGdscHJvdG8gdmlydHVhbC9tZXNhIHhmODZkcmlwcm90byIKK1BBQ0tBR0VDT05GSUdbZHJpMl0gPSAiLS1lbmFibGUtZHJpMiwtLWRpc2FibGUtZHJpMixkcmkycHJvdG8iCisjIERSSTMgcmVxdWlyZXMgeHNobWZlbmNlIHRvIGFsc28gYmUgZW5hYmxlZAorUEFDS0FHRUNPTkZJR1tkcmkzXSA9ICItLWVuYWJsZS1kcmkzLC0tZGlzYWJsZS1kcmkzLGRyaTNwcm90byIKK1BBQ0tBR0VDT05GSUdbZ2x4XSA9ICItLWVuYWJsZS1nbHggLS1lbmFibGUtZ2x4LXRscywtLWRpc2FibGUtZ2x4LGdscHJvdG8gdmlydHVhbC9saWJnbCB2aXJ0dWFsL2xpYngxMSIKK1BBQ0tBR0VDT05GSUdbdW53aW5kXSA9ICItLWVuYWJsZS1saWJ1bndpbmQsLS1kaXNhYmxlLWxpYnVud2luZCxsaWJ1bndpbmQiCitQQUNLQUdFQ09ORklHW3hzaG1mZW5jZV0gPSAiLS1lbmFibGUteHNobWZlbmNlLC0tZGlzYWJsZS14c2htZmVuY2UsbGlieHNobWZlbmNlIgorUEFDS0FHRUNPTkZJR1t4bWx0b10gPSAiLS13aXRoLXhtbHRvLCAtLXdpdGhvdXQteG1sdG8sIHhtbHRvLW5hdGl2ZSBkb2Nib29rLXhtbC1kdGQ0LW5hdGl2ZSBkb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uYXRpdmUiCitQQUNLQUdFQ09ORklHW3N5c3RlbWQtbG9naW5kXSA9ICItLWVuYWJsZS1zeXN0ZW1kLWxvZ2luZD15ZXMsLS1lbmFibGUtc3lzdGVtZC1sb2dpbmQ9bm8sZGJ1cywiCitQQUNLQUdFQ09ORklHW3hpbmVyYW1hXSA9ICItLWVuYWJsZS14aW5lcmFtYSwtLWRpc2FibGUteGluZXJhbWEseGluZXJhbWFwcm90byIKK1BBQ0tBR0VDT05GSUdbeHdheWxhbmRdID0gIi0tZW5hYmxlLXh3YXlsYW5kLC0tZGlzYWJsZS14d2F5bGFuZCx3YXlsYW5kIGxpYmVwb3h5IgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJIyBJdHMgYXNzdW1lZCBiYXNlLWZpbGVzIGNyZWF0ZXMgdGhpcyBmb3IgdXMKKwlybWRpciAke0R9JHtsb2NhbHN0YXRlZGlyfS9sb2cvCit9CisKKyMgQWRkIHJ1bnRpbWUgcHJvdmlkZXMgZm9yIHRoZSBBQkkgdmVyc2lvbnMgb2YgdGhlIHZpZGVvIGFuZCBpbnB1dCBzdWJzeXN0ZW1zLAorIyBzbyB0aGF0IGRyaXZlcnMgY2FuIGRlcGVuZCBvbiB0aGUgcmVsZXZhbnQgdmVyc2lvbi4KK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICAjIFNldCBQS0dfQ09ORklHX1BBVEggc28gcGtnLWNvbmZpZyBsb29rcyBhdCB0aGUgLnBjIGZpbGVzIHRoYXQgYXJlIGdvaW5nCisgICAgIyBpbnRvIHRoZSBuZXcgcGFja2FnZSwgbm90IHRoZSBzdGFnZWQgb25lcy4KKyAgICBuZXdlbnYgPSBkaWN0KG9zLmVudmlyb24pCisgICAgbmV3ZW52WyJQS0dfQ09ORklHX1BBVEgiXSA9IGQuZXhwYW5kKCIke1BLR0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8iKQorCisgICAgZGVmIGdldF9hYmkobmFtZSk6CisgICAgICAgIGFiaXMgPSB7CisgICAgICAgICAgInZpZGVvIjogImFiaV92aWRlb2RydiIsCisgICAgICAgICAgImlucHV0IjogImFiaV94aW5wdXQiCisgICAgICAgIH0KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oYXJncz0icGtnLWNvbmZpZyAtLXZhcmlhYmxlPSVzIHhvcmctc2VydmVyIiAlIGFiaXNbbmFtZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsPVRydWUsIGVudj1uZXdlbnYsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIG91dHB1dCA9IHAuY29tbXVuaWNhdGUoKVswXQorICAgICAgICBtbHByZWZpeCA9IGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpIG9yICcnCisgICAgICAgIHJldHVybiAiJXN4b3JnLWFiaS0lcy0lcyIgJSAobWxwcmVmaXgsIG5hbWUsIG91dHB1dC5zcGxpdCgiLiIpWzBdKQorCisgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgIGQuYXBwZW5kVmFyKCJSUFJPVklERVNfIiArIHBuLCAiICIgKyBnZXRfYWJpKCJpbnB1dCIpKQorICAgIGQuYXBwZW5kVmFyKCJSUFJPVklERVNfIiArIHBuLCAiICIgKyBnZXRfYWJpKCJ2aWRlbyIpKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZy8wMDAxLXVzZS1fX0dMSUJDX18tZ3VhcmQtZm9yLWdsaWJjLXNwZWNpZmljLWNvZGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnLzAwMDEtdXNlLV9fR0xJQkNfXy1ndWFyZC1mb3ItZ2xpYmMtc3BlY2lmaWMtY29kZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWU0ZWQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZy8wMDAxLXVzZS1fX0dMSUJDX18tZ3VhcmQtZm9yLWdsaWJjLXNwZWNpZmljLWNvZGUucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSBmMjQyNzQwZjY0ODhhMjVlNmNhODQ5NjhiMGUyMzE5YTlhMzk3NWI0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNiBBcHIgMjAxNSAyMDo1Mjo1MCAtMDcwMAorU3ViamVjdDogW1BBVENIXSB1c2UgX19HTElCQ19fIGd1YXJkIGZvciBnbGliYyBzcGVjaWZpYyBjb2RlCisKK1VzaW5nIF9fbGludXhfXyBpcyBhIHRhZCBiaXQgd3JvbmcgYXNzdW1wdGlvbiBzaW5jZQorbGludXggIT0gZ2xpYmMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBody94ZnJlZTg2L29zLXN1cHBvcnQveGY4Nl9PU2xpYi5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvaHcveGZyZWU4Ni9vcy1zdXBwb3J0L3hmODZfT1NsaWIuaCBiL2h3L3hmcmVlODYvb3Mtc3VwcG9ydC94Zjg2X09TbGliLmgKK2luZGV4IGViMGEzMzguLmMzNjZmZmMgMTAwNjQ0CistLS0gYS9ody94ZnJlZTg2L29zLXN1cHBvcnQveGY4Nl9PU2xpYi5oCisrKysgYi9ody94ZnJlZTg2L29zLXN1cHBvcnQveGY4Nl9PU2xpYi5oCitAQCAtMTc4LDcgKzE3OCw3IEBACisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAKKy0jaWZkZWYgX19saW51eF9fCisrI2lmZGVmIF9fR0xJQkNfXworICNpbmNsdWRlIDx0ZXJtaW8uaD4KKyAjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fR0xJQkNfXyAqLworICNpbmNsdWRlIDx0ZXJtaW9zLmg+CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmcvbWFjcm9fdHdlYWsucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnL21hY3JvX3R3ZWFrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMGVlYTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnL21hY3JvX3R3ZWFrLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1RoaXMgaXMgdGhlIHJldmlzZWQgdmVyc2lvbiBvZiBmaWxlcy9tYWNyb190d2Vhay5wYXRjaCBmb3IKK3hvcmctc2VydmVyIDEuOC45OS45MDQgYW5kIG5ld2VyLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWXUgS2UgPGtlLnl1QGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3hvcmctc2VydmVyLm00IGIveG9yZy1zZXJ2ZXIubTQKK2luZGV4IGJkZWNmNjIuLjA0MGZkYjggMTAwNjQ0CistLS0gYS94b3JnLXNlcnZlci5tNAorKysrIGIveG9yZy1zZXJ2ZXIubTQKK0BAIC0yOCwxMCArMjgsMTIgQEAgZG5sCisgIyBDaGVja3MgZm9yIHRoZSAkMSBkZWZpbmUgaW4geG9yZy1zZXJ2ZXIuaCAoZnJvbSB0aGUgc2RrKS4gIElmIGl0CisgIyBpcyBkZWZpbmVkLCB0aGVuIGFkZCAkMSB0byAkUkVRVUlSRURfTU9EVUxFUy4KKyAKKyttNF9wYXR0ZXJuX2FsbG93KFBLR19DT05GSUdfU1lTUk9PVF9ESVIpCisrCisgQUNfREVGVU4oW1hPUkdfRFJJVkVSX0NIRUNLX0VYVF0sWworIAlBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSkKKyAJU0FWRV9DRkxBR1M9IiRDRkxBR1MiCistCUNGTEFHUz0iJENGTEFHUyAtSWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXNka2RpciB4b3JnLXNlcnZlcmAiCisrCUNGTEFHUz0iJENGTEFHUyAtSSRQS0dfQ09ORklHX1NZU1JPT1RfRElSYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9c2RrZGlyIHhvcmctc2VydmVyYCIKKyAJQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworICNpbmNsdWRlICJ4b3JnLXNlcnZlci5oIgorICNpZiAhZGVmaW5lZCAkMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZ18xLjE3LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnXzEuMTcuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDM5ZDMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZ18xLjE3LjIuYmIKQEAgLTAsMCArMSwyOCBAQAorcmVxdWlyZSB4c2VydmVyLXhvcmcuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLXVzZS1fX0dMSUJDX18tZ3VhcmQtZm9yLWdsaWJjLXNwZWNpZmljLWNvZGUucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiMzk3ZTQwNTU2NjY1MTE1MDQ5MGZmNDkzZTQ2M2YxYWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjYxMTIwNjEyNzI4ZjJjNTAzNDY3MWQwY2EzZTIyNzM0MzhjNjBhYmE5M2IzZGRhNGE4YWE0MGU2YTI1Nzk5MyIKKworIyBUaGVzZSBleHRlbnNpb25zIGFyZSBub3cgaW50ZWdyYXRlZCBpbnRvIHRoZSBzZXJ2ZXIsIHNvIGRlY2xhcmUgdGhlIG1pZ3JhdGlvbgorIyBwYXRoIGZvciBpbi1wbGFjZSB1cGdyYWRlcy4KKworUlJFUExBQ0VTXyR7UE59ID0gICIke1BOfS1leHRlbnNpb24tZHJpIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRyaTIgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tcmVjb3JkIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWV4dG1vZCBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kYmUgXAorICAgICAgICAgICAgICAgICAgICIKK1JQUk9WSURFU18ke1BOfSA9ICAiJHtQTn0tZXh0ZW5zaW9uLWRyaSBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kcmkyIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLXJlY29yZCBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1leHRtb2QgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZGJlIFwKKyAgICAgICAgICAgICAgICAgICAiCitSQ09ORkxJQ1RTXyR7UE59ID0gIiR7UE59LWV4dGVuc2lvbi1kcmkgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZHJpMiBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1yZWNvcmQgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZXh0bW9kIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRiZSBcCisgICAgICAgICAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHJlc3RvcC94cmVzdG9wXzAuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hyZXN0b3AveHJlc3RvcF8wLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1ZGYwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hyZXN0b3AveHJlc3RvcF8wLjQuYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJYUmVzOiBBIHRvcC1saWtlIHJlc291cmNlIHVzYWdlIHRvb2wgZm9yIFgiCisKK0RFU0NSSVBUSU9OID0gInRvcC1saWtlIHN0YXRpc3RpY3Mgb2YgWDExIHNlcnZlciByZXNvdXJjZSB1c2FnZSBieSBjbGllbnRzIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL3hyZXN0b3AiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3hyZXN0b3AuYztlbmRsaW5lPTE4O21kNT03MzA4NzZjMzBmMGQ4YTkyODY3NmJjZDEyNDJhM2IzNSIKKworU0VDVElPTiA9ICJ4MTEvdXRpbHMiCitQUiA9ICJyMyIKKworREVQRU5EUyA9ICJsaWJ4cmVzIGxpYnhleHQgdmlydHVhbC9saWJ4MTEgbmN1cnNlcyIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMveHJlc3RvcC94cmVzdG9wLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gImQ4YTU0NTk2Y2JhZjAzN2U2MmI4MGM0NTg1YTNjYTliIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY3YzJmYzk0YTdlY2VkYmFhZTBkMTgzN2U4MmU5M2QxZDk4ZjRhNmQ3NTk4Mjg4NjBlNTUyMTE5YWYzY2UyNTciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvMzB4VHNfQ2FsaWJyYXRlLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC8zMHhUc19DYWxpYnJhdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE0MzYxNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvMzB4VHNfQ2FsaWJyYXRlLnNoCkBAIC0wLDAgKzEsMTMgQEAKKyMhL2Jpbi9zaAorCisuIC9ldGMvZm9ybWZhY3Rvci9jb25maWcKKworaWYgWyAiJEhBVkVfVE9VQ0hTQ1JFRU4iID0gIjEiIF07IHRoZW4KKwluPTEKKwl3aGlsZSBbICEgLXogJFRTTElCX1RTREVWSUNFIF0gJiYgWyAhIC1mIC9ldGMvcG9pbnRlcmNhbCBdICYmIFsgJG4gLWxlIDUgXQorCWRvCisJICAgL3Vzci9iaW4veHRzY2FsCisJICAgc2xlZXAgMQorCSAgIG49JCgoJG4rMSkpCisJZG9uZQorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvY2hhbmdlLWNyb3NzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC9jaGFuZ2UtY3Jvc3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRhNzcxNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvY2hhbmdlLWNyb3NzLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gdG1wL21haW4uYy5vcmlnCTIwMDctMDEtMDIgMTU6Mzk6NTQuMDAwMDAwMDAwICswMDAwCisrKysgdG1wL21haW4uYwkyMDA3LTAxLTAyIDE1OjM5OjU0LjAwMDAwMDAwMCArMDAwMAorQEAgLTEzMSw5ICsxMzEsMTAgQEAKKyB7CisgICBYUmVuZGVyRmlsbFJlY3RhbmdsZXMgKGRweSwgUGljdE9wU3JjLCBwaWN0LCAmcmVjdF9jb2xvciwgcmVjdGFuZ2xlcywgMik7CisgCistICBYRmlsbEFyYyAoZHB5LCBjcm9zc2hhaXJfdywgY3Jvc3NoYWlyX2djLCAoQ1JPU1NIQUlSX1NJWkUgLyAyKSAtIChXSURUSCAvIDIpIC0gMSwgCistCSAgICAoQ1JPU1NIQUlSX1NJWkUgLyAyKSAtIChXSURUSCAvIDIpIC0gMSwKKy0JICAgIFdJRFRIICsgMSwgV0lEVEggKyAxLCAwLCAzNjAgKiA2NCk7CisrICBYRmlsbFJlY3RhbmdsZSAoZHB5LCBjcm9zc2hhaXJfdywgY3Jvc3NoYWlyX2djLAorKwkJICAoQ1JPU1NIQUlSX1NJWkUgLyAyKSAtIChXSURUSCAvIDIpLAorKwkJICAoQ1JPU1NIQUlSX1NJWkUgLyAyKSAtIChXSURUSCAvIDIpLAorKwkJICBXSURUSCwgV0lEVEgpOworIH0KKyAKKyB2b2lkCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsL2NsZWFudXAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsL2NsZWFudXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdiMDg1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvY2xlYW51cC5wYXRjaApAQCAtMCwwICsxLDYyMSBAQAorLS0tCisgTWFrZWZpbGUuYW0gIHwgICAgOSAtLQorIGNvbmZpZ3VyZS5hYyB8ICAgIDMgCisgZ3BlLWRpc3QuYW0gIHwgICAxMiAtLS0KKyBoMzYwMF90cy5oICAgfCAgMjE2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgbWFpbi5jICAgICAgIHwgIDIxMCArKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB4dHNjYWwuaW4gICAgfCAgIDE5IC0tLS0tCisgNiBmaWxlcyBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCA0NTUgZGVsZXRpb25zKC0pCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogeHRzY2FsLTAuNi4zL3h0c2NhbC5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHh0c2NhbC0wLjYuMy5vcmlnL3h0c2NhbC5pbgkyMDA0LTA5LTEwIDIwOjEwOjM2LjAwMDAwMDAwMCArMDEwMAorKysrIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsMTkgKzAsMCBAQAorLSMhL2Jpbi9zaAorLQorLW1vZHVsZV9pZCgpIHsKKy0gICAgIyBHZXQgbW9kZWwgbmFtZQorLSAgICBlY2hvIGBncmVwICJeSGFyZHdhcmUiIC9wcm9jL2NwdWluZm8gfCBzZWQgLWUgInMvLio6ICovLyIgfCB0ciBhLXogQS1aYAorLX0KKy0KKy1jYXNlIGBtb2R1bGVfaWRgIGluCistCSJIUCBJUEFRIEgzMTAwIiB8ICJIUCBJUEFRIEgzODAwIiApCistCQlBUkdTPSItcm90YXRlIDkwIiA7OworLQkiSFAgSVBBUSBIMzYwMCIgfCAiSFAgSVBBUSBIMzcwMCIgfCAiSFAgSVBBUSBIMzkwMCIgfCAqQ09MTElFIHwgKlBPT0RMRSkKKy0JCUFSR1M9Ii1yb3RhdGUgMjcwIiA7OworLQkjIEgyMjAwOiB3b3JrcyB3aXRob3V0IHJvdGF0aW9uCistZXNhYworLQorLSMgdGhlIHRoaW5ncyB3ZSBkbyBmb3IgYXV0b2NvbmYKKy1wcmVmaXg9QHByZWZpeEAKKy1leGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACistZXhlYyBAbGliZXhlY2RpckAveHRzY2FsLmJpbiAkQVJHUyAkKgorSW5kZXg6IHh0c2NhbC0wLjYuMy9tYWluLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4dHNjYWwtMC42LjMub3JpZy9tYWluLmMJMjAwNy0wNy0wMSAwMToxMjo1Mi4wMDAwMDAwMDAgKzAxMDAKKysrKyB4dHNjYWwtMC42LjMvbWFpbi5jCTIwMDctMDctMDEgMDE6MTI6NTUuMDAwMDAwMDAwICswMTAwCitAQCAtMjIsMTIgKzIyLDEwIEBACisgI2luY2x1ZGUgPFgxMS9YbGliLmg+CisgCisgI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hyZW5kZXIuaD4KKy0jaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWHJhbmRyLmg+CisgI2luY2x1ZGUgPFgxMS9YZnQvWGZ0Lmg+CisgI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL3hjYWxpYnJhdGUuaD4KKyAjaW5jbHVkZSA8WDExL2tleXN5bS5oPgorIAorLSNpbmNsdWRlICJoMzYwMF90cy5oIgorICNpbmNsdWRlICJjYWxpYnJhdGUuaCIKKyAKKyBEaXNwbGF5ICpkcHk7CitAQCAtNDUsMTUgKzQzLDExIEBAIFhmdENvbG9yIHhmdGNvbDsKKyBYZnREcmF3ICp4ZnRkcmF3OworIFhmdEZvbnQgKnhmdGZvbnQ7CisgaW50IHNjcmVlbl94LCBzY3JlZW5feTsKKy1pbnQgdHNfZmQ7CisgaW50IHNhbXBsZXM7CisgUGl4bWFwIGJnX3BpeG1hcDsKKyBpbnQgZmxhZ19kZWJ1ZzsKKy1pbnQgcm90YXRpb24gPSAwOworIGludCBlcnJvcl9iYXNlLCBldmVudF9iYXNlOworIAorLWludCB1c2luZ194Y2FsaWJyYXRlOworLQorIGludCBtb3Zpbmc7CisgCisgI2RlZmluZSBDUk9TU0hBSVJfU0laRQkyNQorQEAgLTYzLDcgKzU3LDYgQEAgaW50IG1vdmluZzsKKyAjZGVmaW5lIEVOT1VHSCA1CisgI2RlZmluZSBNQVhfU0FNUExFUyA0MAorIAorLSNkZWZpbmUgUkFXX0RFVklDRSAiL2Rldi9oMzYwMF90c3JhdyIKKyAjZGVmaW5lIEZPTlROQU1FICJzYW5zLTEwIgorIAorIHN0cnVjdCBwb2ludCAKK0BAIC0yODcsMTIgKzI4MCw4IEBAIHNvcnRfYnlfeSAoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCAqYikKKyB2b2lkCisgc2V0X2NhbGlicmF0aW9uIChjYWxpYnJhdGlvbiAqY2FsKQorIHsKKy0gIFRTX0NBTCB0YzsKKy0gIGludCB4dHJhbnMsIHl0cmFucywgeHNjYWxlLCB5c2NhbGUsIHh5c2NhbGUsIHl4c2NhbGU7CisgICBjYWxpYnJhdGlvbiBvY2FsID0gKmNhbDsKKyAKKy0gIGlmICh1c2luZ194Y2FsaWJyYXRlKQorLSAgICB7CisgICAgICAgRklMRSAqZnA7CisgICAgICAgaWYgKGZsYWdfZGVidWcpCisgCXByaW50ZiAoImNvbnN0YW50cyBhcmU6ICVkICVkICVkICVkICVkICVkICVkXG4iLCBjYWwtPmFbMV0sIGNhbC0+YVsyXSwgY2FsLT5hWzBdLCBjYWwtPmFbNF0sIGNhbC0+YVs1XSwgY2FsLT5hWzNdLCBjYWwtPmFbNl0pOworQEAgLTMwNCwyOSArMjkzLDYgQEAgc2V0X2NhbGlicmF0aW9uIChjYWxpYnJhdGlvbiAqY2FsKQorIAl9CisgICAgICAgZnByaW50ZiAoZnAsICIlZCAlZCAlZCAlZCAlZCAlZCAlZFxuIiwgY2FsLT5hWzFdLCBjYWwtPmFbMl0sIGNhbC0+YVswXSwgY2FsLT5hWzRdLCBjYWwtPmFbNV0sIGNhbC0+YVszXSwgY2FsLT5hWzZdKTsKKyAgICAgICBmY2xvc2UgKGZwKTsgCistICAgICAgcmV0dXJuOworLSAgICB9CistCistICB4dHJhbnMgPSBjYWwtPmFbMF0gLyBjYWwtPmFbNl07CistICB5dHJhbnMgPSBjYWwtPmFbM10gLyBjYWwtPmFbNl07CistICB4c2NhbGUgPSBjYWwtPmFbMV0gKiAyNTYgLyBjYWwtPmFbNl07CistICB5c2NhbGUgPSBjYWwtPmFbNV0gKiAyNTYgLyBjYWwtPmFbNl07CistICB4eXNjYWxlID0gY2FsLT5hWzJdICogMjU2IC8gY2FsLT5hWzZdOworLSAgeXhzY2FsZSA9IGNhbC0+YVs0XSAqIDI1NiAvIGNhbC0+YVs2XTsKKy0gIAorLSAgdGMueHRyYW5zID0geHRyYW5zOworLSAgdGMueXRyYW5zID0geXRyYW5zOworLSAgdGMueHNjYWxlID0geHNjYWxlOworLSAgdGMueXNjYWxlID0geXNjYWxlOworLSAgdGMueHlzd2FwID0gMDsKKy0KKy0gIHByaW50ZiAoIiVkICVkICVkICVkICVkXG4iLCB0Yy54c2NhbGUsIHRjLnh0cmFucywgdGMueXNjYWxlLCB0Yy55dHJhbnMsIHRjLnh5c3dhcCk7CistCistICBpZiAoaW9jdGwgKHRzX2ZkLCBUU19TRVRfQ0FMLCAodm9pZCAqKSZ0YykgIT0gMCkKKy0gICAgeworLSAgICAgIHBlcnJvciAoIlRTX1NFVF9DQUwiKTsKKy0gICAgICBleGl0ICgxKTsKKy0gICAgfQorIH0KKyAKKyB2b2lkCitAQCAtMzk4LDgwICszNjQsMTMgQEAgaGFuZGxlX3RzX2V2ZW50IChpbnQgeCwgaW50IHksIGludCBwcmVzcworIH0KKyAKKyB2b2lkCistcmVhZF90cyAodm9pZCkKKy17CistICBUU19FVkVOVCB0c19ldjsKKy0gIGludCByOworLQorLSAgciA9IHJlYWQgKHRzX2ZkLCAmdHNfZXYsIHNpemVvZiAodHNfZXYpKTsKKy0gIGlmIChyID09IHNpemVvZiAodHNfZXYpKQorLSAgICBoYW5kbGVfdHNfZXZlbnQgKHRzX2V2LngsIHRzX2V2LnksIHRzX2V2LnByZXNzdXJlKTsKKy19CistCistdm9pZAorLWRvX2NhbCAoY2hhciAqKmFyZ3MpCisteworLSAgVFNfQ0FMIHRjOworLQorLSAgdGMueHNjYWxlID0gYXRvaSAoYXJnc1swXSk7CistICB0Yy54dHJhbnMgPSBhdG9pIChhcmdzWzFdKTsKKy0gIHRjLnlzY2FsZSA9IGF0b2kgKGFyZ3NbMl0pOworLSAgdGMueXRyYW5zID0gYXRvaSAoYXJnc1szXSk7CistICB0Yy54eXN3YXAgPSBhdG9pIChhcmdzWzRdKTsKKy0KKy0gIGlmIChmbGFnX2RlYnVnKQorLSAgICBmcHJpbnRmIChzdGRlcnIsICJzZXR0aW5nOiAlZCAlZCAlZCAlZCAlZFxuIiwgCistCSAgICAgdGMueHRyYW5zLCB0Yy55dHJhbnMsIHRjLnhzY2FsZSwgdGMueXNjYWxlLCB0Yy54eXN3YXApOworLSAgICAKKy0gIGlmIChpb2N0bCAodHNfZmQsIFRTX1NFVF9DQUwsICh2b2lkICopJnRjKSAhPSAwKQorLSAgICB7CistICAgICAgcGVycm9yICgiVFNfU0VUX0NBTCIpOworLSAgICAgIGV4aXQgKDEpOworLSAgICB9CistICAKKy0gIGV4aXQgKDApOworLX0KKy0KKy12b2lkCistc2hvd19jYWwgKHZvaWQpCisteworLSAgVFNfQ0FMIHRjOworLQorLSAgaWYgKGlvY3RsICh0c19mZCwgVFNfR0VUX0NBTCwgKHZvaWQgKikmdGMpICE9IDApCistICAgIHsKKy0gICAgICBwZXJyb3IgKCJUU19HRVRfQ0FMIik7CistICAgICAgZXhpdCAoMSk7CistICAgIH0KKy0KKy0gIHByaW50ZiAoIiVkICVkICVkICVkICVkXG4iLCB0Yy54c2NhbGUsIHRjLnh0cmFucywgdGMueXNjYWxlLCB0Yy55dHJhbnMsIHRjLnh5c3dhcCk7CistfQorLQorLXZvaWQKKyB1c2FnZSAoY29uc3QgY2hhciAqbmFtZSkKKyB7CistICBmcHJpbnRmIChzdGRlcnIsICJ1c2FnZTogJXMgLXZpZXdcbiIsIG5hbWUpOworLSAgZnByaW50ZiAoc3RkZXJyLCAiICAgICAgICVzIFstcm90YXRlIDwwIHwgOTAgfCAxODAgfCAyNzA+XVxuIiwgbmFtZSk7CistICBmcHJpbnRmIChzdGRlcnIsICIgICAgICAgJXMgLWNhbCA8eHM+IDx4dD4gPHlzPiA8eXQ+IDx4eXN3YXA+XG4iLCBuYW1lKTsKKy0KKysgIGZwcmludGYgKHN0ZGVyciwgInVzYWdlOiAlcyBbLWRlYnVnXVxuIiwgbmFtZSk7CisgICBleGl0ICgxKTsKKyB9CisgCisgaW50CisteHJyX3N1cHBvcnRlZCAodm9pZCkKKy17CistICBpbnQgeHJyX2V2ZW50X2Jhc2UsIHhycl9lcnJvcl9iYXNlOworLSAgaW50IHhycl9tYWpvciwgeHJyX21pbm9yOworLQorLSAgaWYgKFhSUlF1ZXJ5RXh0ZW5zaW9uIChkcHksICZ4cnJfZXZlbnRfYmFzZSwgJnhycl9lcnJvcl9iYXNlKSA9PSBGYWxzZQorLSAgICAgIHx8IFhSUlF1ZXJ5VmVyc2lvbiAoZHB5LCAmeHJyX21ham9yLCAmeHJyX21pbm9yKSA9PSAwCistICAgICAgfHwgeHJyX21ham9yICE9IDEKKy0gICAgICB8fCB4cnJfbWlub3IgPCAxKQorLSAgICByZXR1cm4gMDsKKy0KKy0gIHJldHVybiAxOworLX0KKy0KKy1pbnQKKyBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIHsKKyAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7CitAQCAtNDgwLDMxICszNzksMTEgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgIGludCBtYXhfZmQ7CisgICBHQyBiZ19nYzsKKyAgIGludCBpOworLSAgaW50IGhhdmVfeHJhbmRyOworIAorICAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKyAgICAgeworLSAgICAgIGlmICghc3RyY21wIChhcmd2W2ldLCAiLXZpZXciKSkKKy0JeworLQkgIHNob3dfY2FsICgpOworLQkgIGV4aXQgKDApOworLQl9CistICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoYXJndltpXSwgIi1kZWJ1ZyIpKQorKyAgICAgIGlmICghc3RyY21wIChhcmd2W2ldLCAiLWRlYnVnIikpCisgCWZsYWdfZGVidWcgPSAxOworLSAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKGFyZ3ZbaV0sICItY2FsIikpCistCXsKKy0JICBpZiAoYXJnYyA+IChpICsgNSkpCistCSAgICBkb19jYWwgKGFyZ3YgKyBpICsgMSk7CistCSAgZWxzZQorLQkgICAgdXNhZ2UgKGFyZ3ZbMF0pOworLQl9CistICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoYXJndltpXSwgIi1yb3RhdGUiKSkKKy0JeworLQkgIGlmIChhcmdjID4gKGkgKyAxKSkKKy0JICAgIHJvdGF0aW9uID0gYXRvaSAoYXJndlsrK2ldKTsKKy0JICBlbHNlCistCSAgICB1c2FnZSAoYXJndlswXSk7CistCX0KKyAgICAgICBlbHNlCisgCXVzYWdlIChhcmd2WzBdKTsKKyAgICAgfQorQEAgLTUzMSw0OCArNDEwLDExIEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCSAgZnByaW50ZiAoc3RkZXJyLCAiZmFpbGVkIHRvIHNldCByYXcgbW9kZTogZXJyb3IgJWRcbiIsIHIpOworIAkgIGV4aXQgKDEpOworIAl9CistCistICAgICAgdXNpbmdfeGNhbGlicmF0ZSA9IDE7CistICAgIH0KKy0KKy0gIGhhdmVfeHJhbmRyID0geHJyX3N1cHBvcnRlZCAoKTsKKy0gIGlmIChoYXZlX3hyYW5kcikKKy0gICAgeworLSAgICAgIFhSUlNjcmVlbkNvbmZpZ3VyYXRpb24gKnJyX3NjcmVlbjsKKy0gICAgICBSb3RhdGlvbiBjdXJyZW50X3JvdGF0aW9uOworLQorLSAgICAgIGlmIChmbGFnX2RlYnVnKQorLQlmcHJpbnRmIChzdGRlcnIsICJYUkFORFIgaXMgc3VwcG9ydGVkXG4iKTsKKy0KKy0gICAgICBycl9zY3JlZW4gPSBYUlJHZXRTY3JlZW5JbmZvIChkcHksIFJvb3RXaW5kb3cgKGRweSwgc2NyZWVuKSk7CistCistICAgICAgWFJSUm90YXRpb25zIChkcHksIHNjcmVlbiwgJmN1cnJlbnRfcm90YXRpb24pOworLQorLSAgICAgIFhSUkZyZWVTY3JlZW5Db25maWdJbmZvIChycl9zY3JlZW4pOworLQorLSAgICAgIGlmIChmbGFnX2RlYnVnKQorLQlmcHJpbnRmIChzdGRlcnIsICJDdXJyZW50IFJBTkRSIHJvdGF0aW9uIGlzICVkXG4iLCBjdXJyZW50X3JvdGF0aW9uKTsKKy0KKy0gICAgICBzd2l0Y2ggKGN1cnJlbnRfcm90YXRpb24pCistCXsKKy0JY2FzZSBSUl9Sb3RhdGVfMjcwOgorLQkgIHJvdGF0aW9uICs9IDkwOworLQljYXNlIFJSX1JvdGF0ZV8xODA6CistCSAgcm90YXRpb24gKz0gOTA7CistCWNhc2UgUlJfUm90YXRlXzkwOgorLQkgIHJvdGF0aW9uICs9IDkwOworLQkgIHJvdGF0aW9uICU9IDM2MDsKKy0JY2FzZSBSUl9Sb3RhdGVfMDoKKy0JICBicmVhazsKKy0JZGVmYXVsdDoKKy0JICBmcHJpbnRmIChzdGRlcnIsICJVbmtub3duIFJBTkRSIHJvdGF0aW9uOiAlZFxuIiwgY3VycmVudF9yb3RhdGlvbik7CistCSAgYnJlYWs7CistCX0KKyAgICAgfQorICAgZWxzZQorICAgICB7CistICAgICAgaWYgKGZsYWdfZGVidWcpCistCWZwcmludGYgKHN0ZGVyciwgIlhSQU5EUiBub3Qgc3VwcG9ydGVkXG4iKTsKKysgICAgICBwZXJyb3IgKCJYQ0FMSUJSQVRFIGV4dGVuc2lvbiBtaXNzaW5nIik7CisrICAgICAgZXhpdCAoMSk7CisgICAgIH0KKyAKKyAgIGF0dHJpYnV0ZXMub3ZlcnJpZGVfcmVkaXJlY3QgPSBmbGFnX2RlYnVnID8gRmFsc2UgOiBUcnVlOworQEAgLTY2Niw0NSArNTA4LDE3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCisgICBmb3IgKGkgPSAwOyBpIDwgTlJfUE9JTlRTOyBpKyspCisgICAgIHsKKy0gICAgICBzd2l0Y2ggKHJvdGF0aW9uKQorLQl7CistCWNhc2UgMDoKKy0JICBjYWwueGZiW2ldID0gY2FsLnhzY3JbaV07CistCSAgY2FsLnlmYltpXSA9IGNhbC55c2NyW2ldOworLQkgIGJyZWFrOworLQljYXNlIDkwOgorLQkgIGNhbC54ZmJbaV0gPSBjYWwueXNjcltpXTsKKy0JICBjYWwueWZiW2ldID0gc2NyZWVuX3ggLSBjYWwueHNjcltpXTsKKy0JICBicmVhazsKKy0JY2FzZSAxODA6CistCSAgY2FsLnhmYltpXSA9IHNjcmVlbl94IC0gY2FsLnhzY3JbaV07CistCSAgY2FsLnlmYltpXSA9IHNjcmVlbl95IC0gY2FsLnlzY3JbaV07CistCSAgYnJlYWs7CistCWNhc2UgMjcwOgorLQkgIGNhbC54ZmJbaV0gPSBzY3JlZW5feSAtIGNhbC55c2NyW2ldOworLQkgIGNhbC55ZmJbaV0gPSBjYWwueHNjcltpXTsKKy0JICBicmVhazsKKy0JfQorKyAgICAgIGNhbC54ZmJbaV0gPSBjYWwueHNjcltpXTsKKysgICAgICBjYWwueWZiW2ldID0gY2FsLnlzY3JbaV07CisrICAgICAgWENhbGlicmF0ZVNjcmVlblRvQ29vcmQgKGRweSwgJmNhbC54ZmJbaV0sICZjYWwueWZiW2ldKTsKKyAKKyAgICAgICBpZiAoZmxhZ19kZWJ1ZykKKy0JcHJpbnRmICgicm90YXRpb24gJWQ6ICglZCwlZCkgLT4gKCVkLCVkKVxuIiwgcm90YXRpb24sIAorKwlwcmludGYgKCJyb3RhdGlvbiBjb252ZXJzaW9uOiAoJWQsJWQpIC0+ICglZCwlZClcbiIsCisgCQljYWwueHNjcltpXSwgY2FsLnlzY3JbaV0sIGNhbC54ZmJbaV0sIGNhbC55ZmJbaV0pOworICAgICB9CisgCisgICBuZXh0X2V2ZW50ICgpOworIAorLSAgaWYgKCF1c2luZ194Y2FsaWJyYXRlKQorLSAgICB7CistICAgICAgdHNfZmQgPSBvcGVuIChSQVdfREVWSUNFLCBPX1JET05MWSk7CistICAgICAgaWYgKHRzX2ZkIDwgMCkKKy0JeworLQkgIHBlcnJvciAoUkFXX0RFVklDRSk7CistCSAgZXhpdCAoMSk7CistCX0KKy0gICAgfQorLQorLSAgbWF4X2ZkID0gKHhmZCA+IHRzX2ZkKSA/IHhmZCA6IHRzX2ZkOworLQorICAgZm9yICg7OykKKyAgICAgeworICAgICAgIGZkX3NldCBmZHM7CitAQCAtNzEzLDEyICs1MjcsOCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAorICAgICAgIEZEX1pFUk8gKCZmZHMpOworICAgICAgIEZEX1NFVCAoeGZkLCAmZmRzKTsKKy0gICAgICBpZiAodHNfZmQgIT0gLTEpCistCUZEX1NFVCAodHNfZmQsICZmZHMpOworIAorLSAgICAgIHNlbGVjdCAobWF4X2ZkICsgMSwgJmZkcywgTlVMTCwgTlVMTCwgTlVMTCk7CistICAgICAgCistICAgICAgaWYgKHRzX2ZkICE9IC0xICYmIEZEX0lTU0VUICh0c19mZCwgJmZkcykpCistCXJlYWRfdHMgKCk7CisrICAgICAgc2VsZWN0ICh4ZmQgKyAxLCAmZmRzLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICAgfQorIH0KKysKK0luZGV4OiB4dHNjYWwtMC42LjMvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0geHRzY2FsLTAuNi4zLm9yaWcvY29uZmlndXJlLmFjCTIwMDQtMDktMTAgMjA6MTE6MTIuMDAwMDAwMDAwICswMTAwCisrKysgeHRzY2FsLTAuNi4zL2NvbmZpZ3VyZS5hYwkyMDA3LTA3LTAxIDAxOjEyOjU1LjAwMDAwMDAwMCArMDEwMAorQEAgLTksOCArOSw3IEBAIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ24gZGlzdC1iemlwMl0pCisgIyBDaGVja3MgZm9yIHByb2dyYW1zLgorIEFDX1BST0dfQ0MKKyAKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhYVFNDQUwsIHgxMSB4ZnQgeGV4dCB4cmFuZHIgeGNhbGlicmF0ZSkKKytQS0dfQ0hFQ0tfTU9EVUxFUyhYVFNDQUwsIHgxMSB4ZnQgeGV4dCB4Y2FsaWJyYXRlKQorIAorIEFDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGVdKQorLUFDX0NPTkZJR19GSUxFUyhbeHRzY2FsXSkKKyBBQ19PVVRQVVQKK0luZGV4OiB4dHNjYWwtMC42LjMvZ3BlLWRpc3QuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4dHNjYWwtMC42LjMub3JpZy9ncGUtZGlzdC5hbQkyMDA0LTA2LTAyIDIzOjA3OjEzLjAwMDAwMDAwMCArMDEwMAorKysrIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsMTIgKzAsMCBAQAorLUNWU1RBRyA6PSAkKHNoZWxsIGVjaG8gJChQQUNLQUdFKS0kKFZFUlNJT04pIHwgdHIgW2Etei5dIFtBLVpfXSkKKy0KKy1kaXN0LXVwbG9hZDogZGlzdAorLQlzY3AgJChQQUNLQUdFKS0kKFZFUlNJT04pLnRhci5iejIgJChVU0VSKUBoYW5kaGVsZHMub3JnOi9ob21lL2Z0cC9wdWIvcHJvamVjdHMvZ3BlL3NvdXJjZS8KKy0KKy10YWc6CistCWN2cyB0YWcgJChDVlNUQUcpCistCistcmV0YWc6CistCWN2cyB0YWcgLUYgJChDVlNUQUcpCistCistc291cmNlOiB0YWcgZGlzdC11cGxvYWQKK0luZGV4OiB4dHNjYWwtMC42LjMvaDM2MDBfdHMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHh0c2NhbC0wLjYuMy5vcmlnL2gzNjAwX3RzLmgJMjAwMy0wNy0wNSAxNzoyNzoxMC4wMDAwMDAwMDAgKzAxMDAKKysrKyAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDIxNiArMCwwIEBACistLyoKKy0qCistKiBEcml2ZXIgZm9yIHRoZSBIMzYwMCBUb3VjaCBTY3JlZW4gYW5kIG90aGVyIEF0bWVsIGNvbnRyb2xsZWQgZGV2aWNlcy4KKy0qCistKiBDb3B5cmlnaHQgMjAwMCBDb21wYXEgQ29tcHV0ZXIgQ29ycG9yYXRpb24uCistKgorLSogVXNlIGNvbnNpc3RlbnQgd2l0aCB0aGUgR05VIEdQTCBpcyBwZXJtaXR0ZWQsCistKiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcworLSogcHJlc2VydmVkIGluIGl0cyBlbnRpcmV0eSBpbiBhbGwgY29waWVzIGFuZCBkZXJpdmVkIHdvcmtzLgorLSoKKy0qIENPTVBBUSBDT01QVVRFUiBDT1JQT1JBVElPTiBNQUtFUyBOTyBXQVJSQU5USUVTLCBFWFBSRVNTRUQgT1IgSU1QTElFRCwKKy0qIEFTIFRPIFRIRSBVU0VGVUxORVNTIE9SIENPUlJFQ1RORVNTIE9GIFRISVMgQ09ERSBPUiBJVFMKKy0qIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UuCistKgorLSogQXV0aG9yOiBDaGFybGVzIEZseW5uLgorLSoKKy0qLworLQorLQorLSNpZm5kZWYgX19IMzYwMF9UU19IX18KKy0jZGVmaW5lIF9fSDM2MDBfVFNfSF9fCistCistI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CistCistZW51bSBoMzYwMF90c19taW5vcl9kZXZpY2VzIHsKKy0JVFNfTUlOT1IgICAgPSAwLAorLQlUU1JBV19NSU5PUiA9IDEsCistCUtFWV9NSU5PUiAgID0gMgorLX07CistCistdHlwZWRlZiBzdHJ1Y3QgaDM2MDBfdHNfY2FsaWJyYXRpb24geworLSAgICAgICAgaW50IHhzY2FsZTsKKy0gICAgICAgIGludCB4dHJhbnM7CistICAgICAgICBpbnQgeXNjYWxlOworLSAgICAgICAgaW50IHl0cmFuczsKKy0gICAgICAgIGludCB4eXN3YXA7CistfSBUU19DQUw7CistCistdHlwZWRlZiBzdHJ1Y3QgaDM2MDBfdHNfZXZlbnQgeworLSAgICAgICAgdW5zaWduZWQgc2hvcnQgcHJlc3N1cmU7CistICAgICAgICB1bnNpZ25lZCBzaG9ydCB4OworLSAgICAgICAgdW5zaWduZWQgc2hvcnQgeTsKKy0gICAgICAgIHVuc2lnbmVkIHNob3J0IHBhZDsKKy19IFRTX0VWRU5UOworLQorLS8qIERlcHJlY2F0ZWQgLSBkbyBub3QgdXNlICovCistdHlwZWRlZiBzdHJ1Y3QgaDM2MDBfdHNfcmV0dXJuIHsKKy0gICAgICAgIHVuc2lnbmVkIHNob3J0IHByZXNzdXJlOworLSAgICAgICAgdW5zaWduZWQgc2hvcnQgeDsKKy0gICAgICAgIHVuc2lnbmVkIHNob3J0IHk7CistICAgICAgICB1bnNpZ25lZCBzaG9ydCBwYWQ7CistfSBUU19SRVQ7CistCistZW51bSBwb3dlcl9idXR0b25fbW9kZSB7CistICAgUEJNX1NVU1BFTkQgICAgICAgICAgID0gMCwKKy0gICBQQk1fR0VORVJBVEVfS0VZUFJFU1MgPSAxCistfTsKKy0KKy0KKy0vKiArKysrKysrKysrKysrKyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrICovCistCistdHlwZWRlZiBzdHJ1Y3QgdGhlcm1fZGV2IHsKKy0Jc2hvcnQgZGF0YTsKKy19IFRIRVJNX0RFVjsKKy0KKy0jZGVmaW5lIEgzNjAwX0JBVFRfQ0hFTV9BTEtBTElORSAgICAgICAgMHgwMQorLSNkZWZpbmUgSDM2MDBfQkFUVF9DSEVNX05JQ0QgICAgICAgICAgICAweDAyCistI2RlZmluZSBIMzYwMF9CQVRUX0NIRU1fTklNSCAgICAgICAgICAgIDB4MDMKKy0jZGVmaW5lIEgzNjAwX0JBVFRfQ0hFTV9MSU9OICAgICAgICAgICAgMHgwNAorLSNkZWZpbmUgSDM2MDBfQkFUVF9DSEVNX0xJUE9MWSAgICAgICAgICAweDA1CistI2RlZmluZSBIMzYwMF9CQVRUX0NIRU1fTk9UX0lOU1RBTExFRCAgIDB4MDYKKy0jZGVmaW5lIEgzNjAwX0JBVFRfQ0hFTV9VTktOT1dOICAgICAgICAgMHhmZgorLQorLS8qIFRoZXNlIHNob3VsZCBtYXRjaCB0aGUgYXBtX2Jpb3MuaCBkZWZpbml0aW9ucyAqLworLSNkZWZpbmUgSDM2MDBfQUNfU1RBVFVTX0FDX09GRkxJTkUJMHgwMAorLSNkZWZpbmUgSDM2MDBfQUNfU1RBVFVTX0FDX09OTElORQkweDAxCistI2RlZmluZSBIMzYwMF9BQ19TVEFUVVNfQUNfQkFDS1VQCTB4MDIgICAvKiBXaGF0IGRvZXMgdGhpcyBtZWFuPyAqLworLSNkZWZpbmUgSDM2MDBfQUNfU1RBVFVTX0FDX1VOS05PV04JMHhmZgorLQorLS8qIFRoZXNlIGJpdGZpZWxkcyBhcmUgcmFyZWx5ICJvcidkIiB0b2dldGhlciAqLworLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfSElHSAkJMHgwMQorLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfTE9XCQkweDAyCistI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19DUklUSUNBTAkweDA0CistI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19DSEFSR0lORwkweDA4CistI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19DSEFSR0VfTUFJTiAgIDB4MTAKKy0jZGVmaW5lIEgzNjAwX0JBVFRfU1RBVFVTX0RFQUQgICAgICAgICAgMHgyMCAgIC8qIEJhdHRlcnkgd2lsbCBub3QgY2hhcmdlICovCistI2RlZmluZSBIMzYwMF9CQVRUX05PVF9JTlNUQUxMRUQgICAgICAgIDB4MjAgICAvKiBGb3IgZXhwYW5zaW9uIHBhY2sgYmF0dGVyaWVzICovCistI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19GVUxMICAgICAgICAgIDB4NDAgICAvKiBCYXR0ZXJ5IGZ1bGx5IGNoYXJnZWQgKGFuZCBjb25uZWN0ZWQgdG8gQUMpICovCistI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19OT0JBVFQJMHg4MAorLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfVU5LTk9XTgkweGZmCistCistc3RydWN0IGJhdHRlcnlfZGF0YSB7CistCXVuc2lnbmVkIGNoYXIgIGNoZW1pc3RyeTsKKy0JdW5zaWduZWQgY2hhciAgc3RhdHVzOworLQl1bnNpZ25lZCBzaG9ydCB2b2x0YWdlOyAgICAvKiBWb2x0YWdlIGZvciBiYXR0ZXJ5ICMwOyB1bmtub3duIGZvciBiYXR0ZXJ5ICMxICovCistCXVuc2lnbmVkIHNob3J0IHBlcmNlbnRhZ2U7IC8qIFBlcmNlbnRhZ2Ugb2YgZnVsbCBjaGFyZ2UgKi8KKy0JdW5zaWduZWQgc2hvcnQgbGlmZTsgICAgICAgLyogTGlmZSByZW1haW5pbmcgaW4gbWludXRlcyAqLworLX07CistCistc3RydWN0IGgzNjAwX2JhdHRlcnkgeworLSAgICAgICAgdW5zaWduZWQgY2hhciAgICAgICBhY19zdGF0dXM7CistCXVuc2lnbmVkIGNoYXIgICAgICAgYmF0dGVyeV9jb3VudDsgIC8qIEhvdyBtYW55IGJhdHRlcmllcyB3ZSBoYXZlICovCistCXN0cnVjdCBiYXR0ZXJ5X2RhdGEgYmF0dGVyeVsyXTsKKy19OworLQorLS8qIC0tLS0tLS0tIEVFUFJPTSBhbmQgU1BJIEludGVyZmFjZXMgLS0tLS0tLS0tLS0tLS0tKi8KKy0KKy0jZGVmaW5lIEVFUFJPTV9SRF9CVUZTSVogNgkvKiBFRVBST00gcmVhZHMgYXJlIDE2IGJpdHMgKi8KKy0jZGVmaW5lIEVFUFJPTV9XUl9CVUZTSVogNQkvKiBBbGxvdyByb29tIGZvciA4Yml0ICdhZGRyJyBmaWVsZCBpbiBidWZmZXIqLyAKKy0jZGVmaW5lIFNQSV9SRF9CVUZTSVoJIDE2CS8qIFNQSSByZWFkcyBhcmUgOCBiaXRzICovCistI2RlZmluZSBTUElfV1JfQlVGU0laCSA3CistCistLyogVGhlIEVFUFJPTSBpcyB3aGVyZSBpbnRlcm5hbCBwcm9ncmFtcyBhcmUgc3RvcmVkIG9uIHRoZSBBbXRlbC4KKy0gICBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byByZWFkIG9yIHdyaXRlIHRoZXNlIHZhbHVlcyAqLworLQorLXR5cGVkZWYgc3RydWN0IGgzNjAwX2VlcHJvbV9yZWFkX3JlcXVlc3QgeworLQl1bnNpZ25lZCBjaGFyIGFkZHI7ICAgIC8qIDhiaXQgQWRkcmVzcyBPZmZzZXQgMC0yNTUgKi8KKy0JdW5zaWduZWQgY2hhciBsZW47ICAgICAvKiBOdW1iZXIgb2YgMTZiaXQgd29yZHMgdG8gcmVhZCAwLTEyOCAgKi8KKy0JdW5zaWduZWQgc2hvcnQgYnVmZltFRVBST01fUkRfQlVGU0laXTsKKy19IEVFUFJPTV9SRUFEOworLQorLXR5cGVkZWYgc3RydWN0IGgzNjAwX2VlcHJvbV93cml0ZV9yZXF1ZXN0IHsKKy0JdW5zaWduZWQgY2hhciBsZW47CS8qIHVzZWQgb25seSB0byBjb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gc2VuZCAqLworLQl1bnNpZ25lZCBjaGFyIGFkZHI7ICAgIC8qIDAtMTI4ICAqLworLQl1bnNpZ25lZCBzaG9ydCBidWZmW0VFUFJPTV9XUl9CVUZTSVpdOworLX0gRUVQUk9NX1dSSVRFOworLQorLS8qIFRoZSBTUEkgYnVzIGNvbm5lY3RzIHRvIEVFUFJPTXMgbG9jYXRlZCBvbiBzbGVldmVzIHBsdWdnZWQgaW50bworLSAgIHRoZSBpUEFRLiAgWW91IG1heSB3YW50IHRvIHJlYWQgdGhlc2UgdmFsdWVzICAqLworLQorLXR5cGVkZWYgc3RydWN0IGgzNjAwX3NwaV9yZWFkX3JlcXVlc3QgeworLQl1bnNpZ25lZCBzaG9ydCBhZGRyOyAgICAvKiAxNmJpdCBBZGRyZXNzIE9mZnNldCAwLTEyOCAqLworLQl1bnNpZ25lZCBjaGFyIGxlbjsgICAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCAqLworLQl1bnNpZ25lZCBjaGFyIGJ1ZmZbU1BJX1JEX0JVRlNJWl07CistfSBTUElfUkVBRDsKKy0KKy0jZGVmaW5lIFNQSV9SRUFEX1NUQVRVU19CWVRFICAweGZmZmYgICAvKiBVc2UgdGhpcyBhZGRyZXNzIHRvIHJlYWQgdGhlIHN0YXR1cyBieXRlICovCistCistdHlwZWRlZiBzdHJ1Y3QgaDM2MDBfc3BpX3dyaXRlX3JlcXVlc3QgeworLQl1bnNpZ25lZCBzaG9ydCBsZW47CS8qIHVzZWQgb25seSB0byBjb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gc2VuZCAqLworLQl1bnNpZ25lZCBzaG9ydCBhZGRyOwkvKiB0aGlzIDE2Yml0IGFkZHJlc3MgYWNjZXNzZXMgYSBzaW5nbGUgYnl0ZSAqLworLQl1bnNpZ25lZCBjaGFyICBidWZmW1NQSV9XUl9CVUZTSVpdOworLX0gU1BJX1dSSVRFOworLQorLQorLS8qIC0tLS0tLS0tIGVuZCBvZiBFRVBST00gYW5kIFNQSSBJbnRlcmZhY2VzIC0tLS0tLS0tLS0tLS0tLSovCistCistLyogVXNlciBzcGFjZSBzdHJ1Y3R1cmVzIGZvciBJT0NUTCBjYWxscyAqLworLQorLXR5cGVkZWYgc3RydWN0IGgzNjAwX3RzX3ZlcnNpb24geworLQl1bnNpZ25lZCBjaGFyIGhvc3RfdmVyc2lvbls4XTsJLyogYXNjaWkgIngueXkiICovCistCXVuc2lnbmVkIGNoYXIgcGFja192ZXJzaW9uWzhdOwkvKiBhc2NpaSAieC55eSIgKi8KKy0JdW5zaWduZWQgY2hhciBib290X3R5cGU7CQkvKiBUT0RPID8/ICovCistfSBWRVJfUkVUOworLQorLXR5cGVkZWYgc3RydWN0IGgzNjAwX3RzX2xlZCB7CistICAgICAgICB1bnNpZ25lZCBjaGFyIE9mZk9uQmxpbms7ICAgICAgIC8qIDA9b2ZmIDE9b24gMj1CbGluayAqLworLSAgICAgICAgdW5zaWduZWQgY2hhciBUb3RhbFRpbWU7ICAgICAgICAvKiBVbml0cyBvZiA1IHNlY29uZHMgKi8KKy0gICAgICAgIHVuc2lnbmVkIGNoYXIgT25UaW1lOyAgICAgICAgICAgLyogdW5pdHMgb2YgMTAwbS9zICovCistICAgICAgICB1bnNpZ25lZCBjaGFyIE9mZlRpbWU7ICAgICAgICAgIC8qIHVuaXRzIG9mIDEwMG0vcyAqLworLX0gTEVEX0lOOworLQorLWVudW0gZmxpdGVfbW9kZSB7CistICAgICAgICBGTElURV9NT0RFMSA9IDEsCistCUZMSVRFX0FVVE9fTU9ERSAgID0gMSwgICAgIC8qIGZvciByZWZlcmVuY2Ugb25seSAqLworLQlGTElURV9NQU5VQUxfTU9ERSA9IDIsICAgICAvKiBVc2UgdGhpcyBub3JtYWxseT8gKi8KKy0JRkxJVEVfR0VUX0xJR0hUX1NFTlNPUiA9IDMgLyogUmV0dXJucyBsaWdodCByZWFkaW5nIGluICJicmlnaHRuZXNzIiBmaWVsZCAqLworLX07CistZW51bSBmbGl0ZV9wd3IgeworLSAgICAgICAgRkxJVEVfUFdSX09GRiA9IDAsCistICAgICAgICBGTElURV9QV1JfT04gID0gMQorLX07CistCistdHlwZWRlZiBzdHJ1Y3QgaDM2MDBfdHNfZmxpdGUgeworLSAgICAgICAgdW5zaWduZWQgY2hhciBtb2RlOworLSAgICAgICAgdW5zaWduZWQgY2hhciBwd3I7CistICAgICAgICB1bnNpZ25lZCBjaGFyIGJyaWdodG5lc3M7CistfSBGTElURV9JTjsKKy0KKy0vKioqKioqKioqKioqKioqKioqKioqKioqKioqIFVwZGF0ZWQgInVuaXZlcnNhbCIgc3RydWN0dXJlcyAqKioqKioqKioqKioqKioqKioqLworLQorLS8qIFNldHMgYmFja2xpZ2h0IGZvciBib3RoIEgzMTAwIGFuZCBIMzYwMCBtb2RlbHMgLSB0ZWNobmljYWxseSAiZnJvbnRsaWdodCIgZm9yIEgzNjAwICovCistc3RydWN0IGgzNjAwX3RzX2JhY2tsaWdodCB7CistCWVudW0gZmxpdGVfcHdyIHBvd2VyOyAgICAgICAgICAvKiAwID0gb2ZmLCAxID0gb24gKi8KKy0JdW5zaWduZWQgY2hhciAgYnJpZ2h0bmVzczsgICAgIC8qIDAgLSAyNTUgICAgICAgICAqLworLX07CistCistc3RydWN0IGgzNjAwX3RzX2NvbnRyYXN0IHsgICAgICAgICAgICAvKiBPbmx5IHVzZWZ1bCBvbiBIMzEwMCBtb2RlbCAqLworLQl1bnNpZ25lZCBjaGFyIGNvbnRyYXN0OyAgICAgICAvKiAwIC0gMjU1ICovCistfTsKKy0KKy0vKiBJT0NUTCBjbWRzICB1c2VyIG9yIGtlcm5lbCBzcGFjZSAqLworLQorLS8qIFVzZSAnZicgYXMgbWFnaWMgbnVtYmVyICovCistI2RlZmluZSBJT0NfSDM2MDBfVFNfTUFHSUMgICdmJworLQorLS8qIFRPRE86IFNvbWUgb2YgdGhlc2UgSU9XUiB2YWx1ZXMgYXJlIGp1c3QgcGxhaW4gd3JvbmcgKi8KKy0jZGVmaW5lIEdFVF9WRVJTSU9OCQlfSU9SKElPQ19IMzYwMF9UU19NQUdJQywgIDEsIHN0cnVjdCBoMzYwMF90c192ZXJzaW9uICkKKy0jZGVmaW5lIFJFQURfRUVQUk9NCQlfSU9XUihJT0NfSDM2MDBfVFNfTUFHSUMsIDIsIHN0cnVjdCBoMzYwMF9lZXByb21fcmVhZF9yZXF1ZXN0KQorLSNkZWZpbmUgV1JJVEVfRUVQUk9NCQlfSU9XUihJT0NfSDM2MDBfVFNfTUFHSUMsIDMsIHN0cnVjdCBoMzYwMF9lZXByb21fd3JpdGVfcmVxdWVzdCkKKy0jZGVmaW5lIEdFVF9USEVSTUFMCQlfSU9SKElPQ19IMzYwMF9UU19NQUdJQywgIDQsIHN0cnVjdCB0aGVybV9kZXYpCistI2RlZmluZSBMRURfT04JCQlfSU9XKElPQ19IMzYwMF9UU19NQUdJQywgIDUsIHN0cnVjdCBoMzYwMF90c19sZWQpCistI2RlZmluZSBHRVRfQkFUVEVSWV9TVEFUVVMJX0lPUihJT0NfSDM2MDBfVFNfTUFHSUMsICA2LCBzdHJ1Y3QgaDM2MDBfYmF0dGVyeSkKKy0jZGVmaW5lIEZMSVRFX09OCQlfSU9XKElPQ19IMzYwMF9UU19NQUdJQywgIDcsIHN0cnVjdCBoMzYwMF90c19mbGl0ZSkKKy0jZGVmaW5lIFJFQURfU1BJCQlfSU9XUihJT0NfSDM2MDBfVFNfTUFHSUMsIDgsIHN0cnVjdCBoMzYwMF9zcGlfcmVhZF9yZXF1ZXN0KQorLSNkZWZpbmUgV1JJVEVfU1BJCQlfSU9XUihJT0NfSDM2MDBfVFNfTUFHSUMsIDksIHN0cnVjdCBoMzYwMF9zcGlfd3JpdGVfcmVxdWVzdCkKKy0jZGVmaW5lIFRTX0dFVF9DQUwJCV9JT1IoSU9DX0gzNjAwX1RTX01BR0lDLCAxMCwgc3RydWN0IGgzNjAwX3RzX2NhbGlicmF0aW9uKQorLSNkZWZpbmUgVFNfU0VUX0NBTAkJX0lPVyhJT0NfSDM2MDBfVFNfTUFHSUMsIDExLCBzdHJ1Y3QgaDM2MDBfdHNfY2FsaWJyYXRpb24pCistCistLyogTmV3IElPQ1RMIGludGVyZmFjZXMgLSBkZWZpbmVkIHRvIGJlIG1vcmUgdXNlciBmcmllbmRseSAqLworLSNkZWZpbmUgVFNfR0VUX0JBQ0tMSUdIVCAgICAgICAgX0lPUihJT0NfSDM2MDBfVFNfTUFHSUMsIDIwLCBzdHJ1Y3QgaDM2MDBfdHNfYmFja2xpZ2h0KQorLSNkZWZpbmUgVFNfU0VUX0JBQ0tMSUdIVCAgICAgICAgX0lPVyhJT0NfSDM2MDBfVFNfTUFHSUMsIDIwLCBzdHJ1Y3QgaDM2MDBfdHNfYmFja2xpZ2h0KQorLSNkZWZpbmUgVFNfR0VUX0NPTlRSQVNUICAgICAgICAgX0lPUihJT0NfSDM2MDBfVFNfTUFHSUMsIDIxLCBzdHJ1Y3QgaDM2MDBfdHNfY29udHJhc3QpCistI2RlZmluZSBUU19TRVRfQ09OVFJBU1QgICAgICAgICBfSU9XKElPQ19IMzYwMF9UU19NQUdJQywgMjEsIHN0cnVjdCBoMzYwMF90c19jb250cmFzdCkKKy0KKy0jZW5kaWYKK0luZGV4OiB4dHNjYWwtMC42LjMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4dHNjYWwtMC42LjMub3JpZy9NYWtlZmlsZS5hbQkyMDA0LTA2LTAyIDIzOjA3OjEzLjAwMDAwMDAwMCArMDEwMAorKysrIHh0c2NhbC0wLjYuMy9NYWtlZmlsZS5hbQkyMDA3LTA3LTAyIDEyOjUxOjAyLjAwMDAwMDAwMCArMDEwMAorQEAgLTEsMTEgKzEsOCBAQAorLWxpYmV4ZWNfUFJPR1JBTVMgPSB4dHNjYWwuYmluCistYmluX1NDUklQVFMgPSB4dHNjYWwKKytiaW5fUFJPR1JBTVMgPSB4dHNjYWwKKyAKKy14dHNjYWxfYmluX1NPVVJDRVMgPSBtYWluLmMgY2FsaWJyYXRlLmMgY2FsaWJyYXRlLmggaDM2MDBfdHMuaAorK3h0c2NhbF9TT1VSQ0VTID0gbWFpbi5jIGNhbGlicmF0ZS5jIGNhbGlicmF0ZS5oCisgCisteHRzY2FsX2Jpbl9MREFERCA9IEBYVFNDQUxfTElCU0AKKyt4dHNjYWxfTERBREQgPSBAWFRTQ0FMX0xJQlNACisgCisgSU5DTFVERVMgPSBAWFRTQ0FMX0NGTEFHU0AgLUROUl9QT0lOVFM9NQorIAorLWluY2x1ZGUgZ3BlLWRpc3QuYW0KKy0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvZHNvX2xpbmtpbmdfY2hhbmdlX2J1aWxkX2ZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvZHNvX2xpbmtpbmdfY2hhbmdlX2J1aWxkX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTQ1MzNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC9kc29fbGlua2luZ19jaGFuZ2VfYnVpbGRfZml4LnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK2FmdGVyIGdjYyBsaW5raW5nIGhhcyBjaGFuZ2VkLCBhbGwgdGhlIGxpYnJhcmllcyBtdXN0IGJlIGV4cGxpY2l0ZWx5IHNwZWNpZmllZCAKK1RoaXMgcGF0Y2ggYXZvaWRzIHRoaXMgbGlua2luZyBlcnJvcjoKKworfCBjY2FjaGUgaTU4Ni1wb2t5LWxpbnV4LWdjYyAtbWFyY2g9aTU4NiAtLXN5c3Jvb3Q9L2Rpc2swL3Bva3lidWlsZC9idWlsZDEvdG1wL3N5c3Jvb3RzL2k1ODYtcG9reS1saW51eCAgLWZleHBlbnNpdmUtb3B0aW1pemF0aW9ucyAtZm9taXQtZnJhbWUtcG9pbnRlciAtZnJlbmFtZS1yZWdpc3RlcnMgLU8yIC1nZ2RiIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAgLVdsLC1PMSAtV2wsLS1oYXNoLXN0eWxlPWdudSAtV2wsLS1hcy1uZWVkZWQgLW8geHRzY2FsIG1haW4ubyBjYWxpYnJhdGUubyAtbFgxMSAtbFhmdCAtbFhleHQgLWxYY2FsaWJyYXRlXk0KK3wgL2Rpc2swL3Bva3lidWlsZC9idWlsZDEvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliZXhlYy9pNTg2LXBva3ktbGludXgvZ2NjL2k1ODYtcG9reS1saW51eC80LjUuMS9sZDogXj86IGludmFsaWQgRFNPIGZvciBzeW1ib2wgYFhSZW5kZXJDaGFuZ2VQaWN0dXJlJyBkZWZpbml0aW9uXk0KK3wgL2Rpc2swL3Bva3lidWlsZC9idWlsZDEvdG1wL3N5c3Jvb3RzL2k1ODYtcG9reS1saW51eC91c3IvbGliL2xpYlhyZW5kZXIuc28uMTogY291bGQgbm90IHJlYWQgc3ltYm9sczogQmFkIHZhbHVlXk0KK3wgY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXNeTQorfCBtYWtlOiAqKiogW3h0c2NhbF0gRXJyb3IgMQorCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorRGF0ZTogMjAxMS8wMS8xMQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHh0c2NhbC0wLjYuMy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4dHNjYWwtMC42LjMub3JpZy9jb25maWd1cmUuYWMKKysrKyB4dHNjYWwtMC42LjMvY29uZmlndXJlLmFjCitAQCAtOSw3ICs5LDcgQEAgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbiBkaXN0LWJ6aXAyXSkKKyAjIENoZWNrcyBmb3IgcHJvZ3JhbXMuCisgQUNfUFJPR19DQworIAorLVBLR19DSEVDS19NT0RVTEVTKFhUU0NBTCwgeDExIHhmdCB4ZXh0IHhjYWxpYnJhdGUpCisrUEtHX0NIRUNLX01PRFVMRVMoWFRTQ0FMLCB4MTEgeGZ0IHhleHQgeGNhbGlicmF0ZSB4cmVuZGVyKQorIAorIEFDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGVdKQorIEFDX09VVFBVVApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbF8wLjYuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWxfMC42LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJmZGRmMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWxfMC42LjMuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJUb3VjaHNjcmVlbiBjYWxpYnJhdGlvbiB1dGlsaXR5IgorCitERVNDUklQVElPTiA9ICJCYXNpYyB0b3VjaHNjcmVlbiBjYWxpYnJhdGlvbiB1dGlsaXR5IgorCitIT01FUEFHRSA9ICJodHRwOi8vZ3BlLmxpbnV4dG9nby5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWdzLmxpbnV4dG9nby5vcmciCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWFpbi5jO2VuZGxpbmU9MTA7bWQ1PTg3MjFiY2IwOGFlOWYyNGU1ZmU0YzgyOTQxODczYzg3IgorCitTRUNUSU9OID0gIngxMS9iYXNlIgorCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIGxpYnhmdCBsaWJ4Y2FsaWJyYXRlIgorCitQUiA9ICJyMTMiCisKK1NSQ19VUkkgPSAiJHtHUEVfTUlSUk9SfS94dHNjYWwtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9jaGFuZ2UtY3Jvc3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2xlYW51cC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kc29fbGlua2luZ19jaGFuZ2VfYnVpbGRfZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzMweFRzX0NhbGlicmF0ZS5zaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjliY2FiODBiNDc0ZDU0NTQ0NzdkMWNhMTY2YTY4YzM0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI3YjlkYzIyMDNkZTliMTcwNmNhMzlmYTZjYTgwZWNhYjg4MDc5MDllYzkwMWM0YTM0NWI4ZTQxMTc4ODAwYTEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9YMTEvWHNlc3Npb24uZC8KKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS8zMHhUc19DYWxpYnJhdGUuc2ggJHtEfSR7c3lzY29uZmRpcn0vWDExL1hzZXNzaW9uLmQvCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dmlkZW8tdGVzdHMveHZpZGVvLXRlc3RzX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h2aWRlby10ZXN0cy94dmlkZW8tdGVzdHNfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliM2M5ZTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dmlkZW8tdGVzdHMveHZpZGVvLXRlc3RzX2dpdC5iYgpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIlNpbXBsZSBYVmlkZW8gdGVzdCBhcHBsaWNhdGlvbiIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3Rlc3QteHZpZGVvLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9NmFlM2I0YzNjMmZmOWU1MWRiYmMzNWJiMjM3YWZhMDAiCitERVBFTkRTID0gImxpYnh2IgorCitTUkNSRVYgPSAiZjhmMzIwZDAyNTRjMDljZTQ4M2ZjMWQ4ZWU5OWVjZjViYzk0MDk2NSIKK1BWID0gIjAuMStnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy90ZXN0LXh2aWRlbyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIGxpYnh2IHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvYmxrdHJhY2UvYmxrdHJhY2UvbGRmbGFncy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9ibGt0cmFjZS9ibGt0cmFjZS9sZGZsYWdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzN2QxNjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvYmxrdHJhY2UvYmxrdHJhY2UvbGRmbGFncy5wYXRjaApAQCAtMCwwICsxLDkzIEBACitibGt0cmFjZTogb2JleSBMREZMQUdTCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorCit0aGUgcGF0Y2ggd2FzIGltcG9ydGVkIGZyb20gbWV0YS1tZW50b3IgbGF5ZXIgb24geW9jdG9wcm9qZWN0IGdpdCBzZXJ2ZXIKK2h0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL21ldGEtbWVudG9yIGFzIG9mIGNvbW1pdCBpZAorYWVkNDYzNDE0ZTJlMmJmOGNhNDRiYTU0ZWU1OTczZTdlZDU5OWU1NworCitTaWduZWQtb2ZmLWJ5OiBGYWhhZCBVc21hbiA8ZmFoYWRfdXNtYW5AbWVudG9yLmNvbT4KKy0tLQorIE1ha2VmaWxlICAgICAgICAgIHwgICAxMSArKysrKystLS0tLQorIGJ0cmVwbGF5L01ha2VmaWxlIHwgICAgMyArKy0KKyBidHQvTWFrZWZpbGUgICAgICB8ICAgIDMgKystCisgMyBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCistLS0gZ2l0Lm9yaWcvTWFrZWZpbGUKKysrKyBnaXQvTWFrZWZpbGUKK0BAIC0xLDUgKzEsNiBAQAorIENDCT0gZ2NjCisgQ0ZMQUdTCT0gLVdhbGwgLU8yIC1nIC1XCisrTERGTEFHUyA9CisgQUxMX0NGTEFHUyA9ICQoQ0ZMQUdTKSAtRF9HTlVfU09VUkNFIC1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NAorIFBST0dTCT0gYmxrcGFyc2UgYmxrdHJhY2UgdmVyaWZ5X2Jsa3BhcnNlIGJsa3Jhd3ZlcmlmeSBibGtpb21vbgorIExJQlMJPSAtbHB0aHJlYWQKK0BAIC0yMywxOSArMjQsMTkgQEAgYnRyZXBsYXkvYnRyZXBsYXk6CisgCSQoQ0MpIC1vICQqLm8gLWMgJChBTExfQ0ZMQUdTKSAkPAorIAorIGJsa3BhcnNlOiBibGtwYXJzZS5vIGJsa3BhcnNlX2ZtdC5vIHJidHJlZS5vIGFjdF9tYXNrLm8KKy0JJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pCisrCSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKSAkKExERkxBR1MpCisgCisgYmxrdHJhY2U6IGJsa3RyYWNlLm8gYWN0X21hc2subworLQkkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMSUJTKQorKwkkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMSUJTKSAkKExERkxBR1MpCisgCisgdmVyaWZ5X2Jsa3BhcnNlOiB2ZXJpZnlfYmxrcGFyc2UubworLQkkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikKKysJJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pICQoTERGTEFHUykKKyAKKyBibGtyYXd2ZXJpZnk6IGJsa3Jhd3ZlcmlmeS5vCistCSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKQorKwkkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMREZMQUdTKQorIAorIGJsa2lvbW9uOiBibGtpb21vbi5vIHJidHJlZS5vCistCSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKSAkKExJQlMpIC1scnQKKysJJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pICQoTElCUykgLWxydCAkKExERkxBR1MpCisgCisgJChQUk9HUyk6IHwgZGVwZW5kCisgCistLS0gZ2l0Lm9yaWcvYnRyZXBsYXkvTWFrZWZpbGUKKysrKyBnaXQvYnRyZXBsYXkvTWFrZWZpbGUKK0BAIC03LDYgKzcsNyBAQAorIAorIENDCT0gZ2NjCisgQ0ZMQUdTCT0gLVdhbGwgLVcgLU8yIC1nCisrTERGTEFHUyA9CisgSU5DUwk9IC1JLiAtSS4uIC1JLi4vYnR0CisgT0NGTEFHUwk9IC1VQ09VTlRfSU9TIC1VREVCVUcgLUROREVCVUcKKyBYQ0ZMQUdTCT0gLURfR05VX1NPVVJDRSAtRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQKK0BAIC0zMiwxMCArMzMsMTAgQEAgY2xlYW46IGRvY3NjbGVhbgorCSQoQ0MpICQoQ0ZMQUdTKSAtYyAtbyAkKi5vICQ8CisKKyBidHJlY29yZDogYnRyZWNvcmQubworLQkkKENDKSAkKENGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKQorKwkkKENDKSAkKENGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKSAkKExERkxBR1MpCisgCisgYnRyZXBsYXk6IGJ0cmVwbGF5Lm8KKy0JJChDQykgJChDRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMSUJTKQorKwkkKENDKSAkKENGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKSAkKExJQlMpICQoTERGTEFHUykKKyAKKyBkZXBlbmQ6CisgCUAkKENDKSAtTU0gJChDRkxBR1MpICouYyAxPiAuZGVwZW5kCistLS0gZ2l0Lm9yaWcvYnR0L01ha2VmaWxlCisrKysgZ2l0L2J0dC9NYWtlZmlsZQorQEAgLTcsNiArNyw3IEBACisgCisgQ0MJPSBnY2MKKyBDRkxBR1MJPSAtV2FsbCAtVyAtTzIgLWcKKytMREZMQUdTID0KKyBJTkNTCT0gLUkuIC1JLi4KKyBYQ0ZMQUdTCT0gLURfR05VX1NPVVJDRSAtRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQKKyBvdmVycmlkZSBDRkxBR1MgKz0gJChJTkNTKSAkKFhDRkxBR1MpCitAQCAtMzgsNyArMzksNyBAQCBjbGVhbjogZG9jc2NsZWFuCisgCSQoQ0MpICQoQ0ZMQUdTKSAtYyAtbyAkKi5vICQ8CisgCisgYnR0OiAkKE9CSlMpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pICQoTElCUykKKysJJChDQykgJChDRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMSUJTKSAkKExERkxBR1MpCisgCisgaWZuZXEgKCQod2lsZGNhcmQgLmRlcGVuZCksKQorIGluY2x1ZGUgLmRlcGVuZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2Jsa3RyYWNlL2Jsa3RyYWNlX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9ibGt0cmFjZS9ibGt0cmFjZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIwYmU0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9ibGt0cmFjZS9ibGt0cmFjZV9naXQuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJHZW5lcmF0ZXMgdHJhY2VzIG9mIEkvTyB0cmFmZmljIG9uIGJsb2NrIGRldmljZXMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MzkzYTVjYTQ0NWY2OTY1ODczZWNhMDI1OWExN2Y4MzMiCisKK0RFUEVORFMgPSAibGliYWlvIgorCitTUkNSRVYgPSAiNDNmYzg3MGNlMDRlOTYzZGVmNDVkZmMwZDFlZDRlYTIxZWYxMGQ0YiIKKworUFYgPSAiMS4xLjArZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5kay9ibGt0cmFjZS5naXQgXAorICAgICAgICAgICBmaWxlOi8vbGRmbGFncy5wYXRjaCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRVhUUkFfT0VNQUtFID0gIlwKKyAgICAnQ0M9JHtDQ30nIFwKKyAgICAnQ0ZMQUdTPSR7Q0ZMQUdTfScgXAorICAgICdMREZMQUdTPSR7TERGTEFHU30nIFwKKyIKKworIyBUaGVyZSBhcmUgYSBmZXcgcGFyYWxsZWwgaXNzdWVzOgorIyAxKSAuLi9yYnRyZWUubzogZXJyb3IgYWRkaW5nIHN5bWJvbHM6IEludmFsaWQgb3BlcmF0aW9uCisjIGNvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworIyBNYWtlZmlsZTo0MjogcmVjaXBlIGZvciB0YXJnZXQgJ2J0dCcgZmFpbGVkCisjIDIpIGdpdC9ibGtpb21vbi5jOjIxNjogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgcmJfaW5zZXJ0X2NvbG9yJworIyBjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKyMgTWFrZWZpbGU6Mjc6IHJlY2lwZSBmb3IgdGFyZ2V0ICdibGtwYXJzZScgZmFpbGVkCisjIDMpIGxkOiByYnRyZWUubzogaW52YWxpZCBzdHJpbmcgb2Zmc2V0IDEyOCA+PSAxMjUgZm9yIHNlY3Rpb24gYC5zdHJ0YWInCisjIDQpIGJ0cmVwbGF5Lm86IGZpbGUgbm90IHJlY29nbml6ZWQ6IEZpbGUgdHJ1bmNhdGVkCisjIGNvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworIyBidHJlcGxheS9idHJlcGxheS5jOjQ3OjE4OiBmYXRhbCBlcnJvcjogbGlzdC5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CitQQVJBTExFTF9NQUtFID0gIiIKKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIEFSQ0g9IiR7QVJDSH0iIHByZWZpeD0ke3ByZWZpeH0gXAorCQltYW5kaXI9JHttYW5kaXJ9IERFU1RESVI9JHtEfSBpbnN0YWxsCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LWxpbnV4XzEuNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LWxpbnV4XzEuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzM4NDFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYtbGludXhfMS43LmJiCkBAIC0wLDAgKzEsMTMgQEAKK3JlcXVpcmUgY3J5cHRvZGV2XyR7UFZ9LmluYworCitTVU1NQVJZID0gIkEgL2Rldi9jcnlwdG8gZGV2aWNlIGRyaXZlciBoZWFkZXIgZmlsZSIKKworZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCisKKyMgSnVzdCBpbnN0YWxsIGNyeXB0b2Rldi5oIHdoaWNoIGlzIHRoZSBvbmx5IGhlYWRlciBmaWxlIG5lZWRlZCB0byBiZSBleHBvcnRlZAorZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1EICR7U30vY3J5cHRvL2NyeXB0b2Rldi5oICR7RH0ke2luY2x1ZGVkaXJ9L2NyeXB0by9jcnlwdG9kZXYuaAorfQorCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYtbW9kdWxlXzEuNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LW1vZHVsZV8xLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNkNTJlYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LW1vZHVsZV8xLjcuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSBjcnlwdG9kZXZfJHtQVn0uaW5jCisKK1NVTU1BUlkgPSAiQSAvZGV2L2NyeXB0byBkZXZpY2UgZHJpdmVyIGtlcm5lbCBtb2R1bGUiCisKK2luaGVyaXQgbW9kdWxlCisKKyMgSGVhZGVyIGZpbGUgcHJvdmlkZWQgYnkgYSBzZXBhcmF0ZSBwYWNrYWdlCitERVBFTkRTICs9ICJjcnlwdG9kZXYtbGludXgiCisKK1NSQ19VUkkgKz0gIiBcCitmaWxlOi8vMDAwMS1EaXNhYmxlLWluc3RhbGxpbmctaGVhZGVyLWZpbGUtcHJvdmlkZWQtYnktYW5vdGhlci1wLnBhdGNoIFwKK2ZpbGU6Ly8wMDAxLWlvY3RsLmMtRml4LWJ1aWxkLW9uLTMuMTkucGF0Y2ggXAorIgorCitFWFRSQV9PRU1BS0U9J0tFUk5FTF9ESVI9IiR7U1RBR0lOR19LRVJORUxfRElSfSIgUFJFRklYPSIke0R9IicKKworUkNPTkZMSUNUU18ke1BOfSA9ICJvY2YtbGludXgiCitSUkVQTEFDRVNfJHtQTn0gPSAib2NmLWxpbnV4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYtdGVzdHNfMS43LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYtdGVzdHNfMS43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYzQxYWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldi10ZXN0c18xLjcuYmIKQEAgLTAsMCArMSwyMyBAQAorcmVxdWlyZSBjcnlwdG9kZXZfJHtQVn0uaW5jCisKK1NVTU1BUlkgPSAiQSB0ZXN0IHN1aXRlIGZvciAvZGV2L2NyeXB0byBkZXZpY2UgZHJpdmVyIgorCitERVBFTkRTICs9ICJvcGVuc3NsIgorCitTUkNfVVJJICs9ICIgXAorZmlsZTovLzAwMDEtQWRkLXRoZS1jb21waWxlLWFuZC1pbnN0YWxsLXJ1bGVzLWZvci1jcnlwdG9kZXYtdGVzdC5wYXRjaCBcCitmaWxlOi8vMDAwMi1GaXgtdGVzdHMtTWFrZWZpbGUtdXNhZ2Utb2YtTERMSUJTLXZzLi1MREZMQUdTLnBhdGNoIFwKKyIKKworRVhUUkFfT0VNQUtFPSdLRVJORUxfRElSPSIke1NUQUdJTkdfS0VSTkVMX0RJUn0iIFBSRUZJWD0iJHtEfSInCisKK2RvX2NvbXBpbGUoKSB7CisJb2VfcnVubWFrZSB0ZXN0cHJvZ3MKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGxfdGVzdHMKK30KKworRklMRVNfJHtQTn0tZGJnICs9ICIke2JpbmRpcn0vdGVzdHNfY3J5cHRvZGV2Ly5kZWJ1ZyIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS90ZXN0c19jcnlwdG9kZXYvKiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2XzEuNy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldl8xLjcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYTY5MjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldl8xLjcuaW5jCkBAIC0wLDAgKzEsMTMgQEAKK0hPTUVQQUdFID0gImh0dHA6Ly9jcnlwdG9kZXYtbGludXgub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZC5nbmEub3JnL2NyeXB0b2Rldi1saW51eC9jcnlwdG9kZXYtbGludXgtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMGI2M2IzNDgxY2YyYzkwMzg2YjM1ZjA1NzQ4MWQzNmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDE4ODA1MzNiNTNkZTRkN2IzZjA1NGUyMzBmNTc2OTg4ZGFmYjhlZWQ3YmVmNWViY2Y2NDIyYmIyZTNhM2IyNSIKKworUyA9ICIke1dPUktESVJ9L2NyeXB0b2Rldi1saW51eC0ke1BWfSIKKworQ0xFQU5CUk9LRU4gPSAiMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMS1BZGQtdGhlLWNvbXBpbGUtYW5kLWluc3RhbGwtcnVsZXMtZm9yLWNyeXB0b2Rldi10ZXN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wMDAxLUFkZC10aGUtY29tcGlsZS1hbmQtaW5zdGFsbC1ydWxlcy1mb3ItY3J5cHRvZGV2LXRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YwMjk4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMS1BZGQtdGhlLWNvbXBpbGUtYW5kLWluc3RhbGwtcnVsZXMtZm9yLWNyeXB0b2Rldi10ZXN0LnBhdGNoCkBAIC0wLDAgKzEsNjYgQEAKK0Zyb20gMTk4MGE4ZjQ3NzlhOTU1ZTczMjg1ZTdhMGQ4NjU0OWI2OWJlYTVjOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFl1IFpvbmdjaHVuIDxiNDA1MjdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFN1biwgMjggQXByIDIwMTMgMTQ6Mzk6MjIgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIHRoZSBjb21waWxlIGFuZCBpbnN0YWxsIHJ1bGVzIGZvciBjcnlwdG9kZXYgdGVzdHMgZm9sZGVyCisKK1RoaXMgaXMgcmVxdWlyZWQgdG8gaW5zdGFsbCB0aGUgY3J5cHRvZGV2IHRlc3RzIGZvbGRlciB0byByb290ZnMKKworU2lnbmVkLW9mZi1ieTogWXUgWm9uZ2NodW4gPGI0MDUyN0BmcmVlc2NhbGUuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tCisgTWFrZWZpbGUgICAgICAgfCAgICA2ICsrKysrKworIHRlc3RzL01ha2VmaWxlIHwgICAgOCArKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IDMxYzRiM2YuLjJlY2YyYTkgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0zNCw2ICszNCw5IEBAIG1vZHVsZXNfaW5zdGFsbDoKKyAJQGVjaG8gIkluc3RhbGxpbmcgY3J5cHRvZGV2LmggaW4gJChQUkVGSVgpL3Vzci9pbmNsdWRlL2NyeXB0byAuLi4iCisgCUBpbnN0YWxsIC1EIGNyeXB0by9jcnlwdG9kZXYuaCAkKFBSRUZJWCkvdXNyL2luY2x1ZGUvY3J5cHRvL2NyeXB0b2Rldi5oCisgCisraW5zdGFsbF90ZXN0czoKKysJbWFrZSAtQyB0ZXN0cyBpbnN0YWxsIERFU1RESVI9JChQUkVGSVgpCisrCisgY2xlYW46CisgCW1ha2UgLUMgJChLRVJORUxfRElSKSBTVUJESVJTPWBwd2RgIGNsZWFuCisgCXJtIC1mICQoaG9zdHByb2dzKSAqfgorQEAgLTQyLDYgKzQ1LDkgQEAgY2xlYW46CisgY2hlY2s6CisgCUNGTEFHUz0kKENSWVBUT0RFVl9DRkxBR1MpIEtFUk5FTF9ESVI9JChLRVJORUxfRElSKSBtYWtlIC1DIHRlc3RzIGNoZWNrCisgCisrdGVzdHByb2dzOgorKwlLRVJORUxfRElSPSQoS0VSTkVMX0RJUikgbWFrZSAtQyB0ZXN0cyB0ZXN0cHJvZ3MKKysKKyBDUE9QVFMgPQorIGlmbmVxICgke1NIT1dfVFlQRVN9LCkKKyBDUE9QVFMgKz0gLS1zaG93LXR5cGVzCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUgYi90ZXN0cy9NYWtlZmlsZQoraW5kZXggYzlmMDRlOC4uY2QyMDJhZiAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlCisrKysgYi90ZXN0cy9NYWtlZmlsZQorQEAgLTE5LDYgKzE5LDEyIEBAIGV4YW1wbGUtYXN5bmMtaG1hYy1vYmpzIDo9IGFzeW5jX2htYWMubworIGV4YW1wbGUtYXN5bmMtc3BlZWQtb2JqcyA6PSBhc3luY19zcGVlZC5vCisgZXhhbXBsZS1oYXNoY3J5cHQtc3BlZWQtb2JqcyA6PSBoYXNoY3J5cHRfc3BlZWQuYworIAorK2luc3RhbGw6CisrCWluc3RhbGwgLWQgICQoREVTVERJUikvdXNyL2Jpbi90ZXN0c19jcnlwdG9kZXYKKysJZm9yIGJpbiBpbiAkKGhvc3Rwcm9ncyk7IGRvIFwKKysJCWluc3RhbGwgLW0gNzU1ICQke2Jpbn0gJChERVNURElSKS91c3IvYmluL3Rlc3RzX2NyeXB0b2Rldi87IFwKKysJZG9uZQorKworIGNoZWNrOiAkKGhvc3Rwcm9ncykKKyAJLi9jaXBoZXIKKyAJLi9obWFjCitAQCAtMjgsNiArMzQsOCBAQCBjaGVjazogJChob3N0cHJvZ3MpCisgCS4vY2lwaGVyLWdjbQorIAkuL2NpcGhlci1hZWFkCisgCisrdGVzdHByb2dzOiAkKGhvc3Rwcm9ncykKKysKKyBjbGVhbjoKKyAJcm0gLWYgKi5vICp+ICQoaG9zdHByb2dzKQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wMDAxLURpc2FibGUtaW5zdGFsbGluZy1oZWFkZXItZmlsZS1wcm92aWRlZC1ieS1hbm90aGVyLXAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDEtRGlzYWJsZS1pbnN0YWxsaW5nLWhlYWRlci1maWxlLXByb3ZpZGVkLWJ5LWFub3RoZXItcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTgwZmM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wMDAxLURpc2FibGUtaW5zdGFsbGluZy1oZWFkZXItZmlsZS1wcm92aWRlZC1ieS1hbm90aGVyLXAucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSA4YTg4NGY1NWJkMTUyN2JhYTgyZmFiNjhjMTg2YmE1NDYyNzM4NjBjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRGVueXMgRG15dHJpeWVua28gPGRlbnlzQHRpLmNvbT4KK0RhdGU6IFN1biwgNiBBcHIgMjAxNCAxOTo1MTozOSAtMDQwMAorU3ViamVjdDogW1BBVENIXSBEaXNhYmxlIGluc3RhbGxpbmcgaGVhZGVyIGZpbGUgcHJvdmlkZWQgYnkgYW5vdGhlciBwYWNrYWdlCisKK1NpZ25lZC1vZmYtYnk6IERlbnlzIERteXRyaXllbmtvIDxkZW55c0B0aS5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbIE9FIHNwZWNpZmljIF0KKy0tLQorIE1ha2VmaWxlIHwgMiAtLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggZDY2ZWYyNi4uOGU5N2M2YSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTIzLDggKzIzLDYgQEAgaW5zdGFsbDogbW9kdWxlc19pbnN0YWxsCisgCisgbW9kdWxlc19pbnN0YWxsOgorIAltYWtlIC1DICQoS0VSTkVMX0RJUikgU1VCRElSUz1gcHdkYCBtb2R1bGVzX2luc3RhbGwKKy0JQGVjaG8gIkluc3RhbGxpbmcgY3J5cHRvZGV2LmggaW4gJChQUkVGSVgpL3Vzci9pbmNsdWRlL2NyeXB0byAuLi4iCistCUBpbnN0YWxsIC1EIGNyeXB0by9jcnlwdG9kZXYuaCAkKFBSRUZJWCkvdXNyL2luY2x1ZGUvY3J5cHRvL2NyeXB0b2Rldi5oCisgCisgY2xlYW46CisgCW1ha2UgLUMgJChLRVJORUxfRElSKSBTVUJESVJTPWBwd2RgIGNsZWFuCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMS1pb2N0bC5jLUZpeC1idWlsZC1vbi0zLjE5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wMDAxLWlvY3RsLmMtRml4LWJ1aWxkLW9uLTMuMTkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRjODk3MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMS1pb2N0bC5jLUZpeC1idWlsZC1vbi0zLjE5LnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gN2Q3MTEyNDk5MTAzMGY5OTk2NWU2ZTZhYWVkNDIxMTE1ZjE4NWFkYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJpY2FyZG8gUmliYWxkYSBEZWxnYWRvIDxyaWNhcmRvLnJpYmFsZGFAZ21haWwuY29tPgorRGF0ZTogTW9uLCA5IEZlYiAyMDE1IDEzOjUxOjU2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGlvY3RsLmM6IEZpeCBidWlsZCBvbiAzLjE5CisKK2dldF91bnVzZWRfZmQoKSBNQUNSTyBoYXMgYmVlbiByZW1vdmVkIG9uIGtlcm5lbCAzLjE5LiBSZXBsYWNlIGJ5IHRoZQorYWN0dWFsIG91dHB1dCBvZiB0aGUgbWFjcm8uCisKK1NpZ25lZC1vZmYtYnk6IFJpY2FyZG8gUmliYWxkYSBEZWxnYWRvIDxyaWNhcmRvLnJpYmFsZGFAZ21haWwuY29tPgorLS0tCisgaW9jdGwuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2lvY3RsLmMgYi9pb2N0bC5jCitpbmRleCBmMjZjZjkzLi5jZjhjYzE3IDEwMDY0NAorLS0tIGEvaW9jdGwuYworKysrIGIvaW9jdGwuYworQEAgLTUyOSw3ICs1MjksNyBAQCBzdGF0aWMgaW50CisgY2xvbmVmZChzdHJ1Y3QgZmlsZSAqZmlscCkKKyB7CisgCWludCByZXQ7CistCXJldCA9IGdldF91bnVzZWRfZmQoKTsKKysJcmV0ID0gZ2V0X3VudXNlZF9mZF9mbGFncygwKTsKKyAJaWYgKHJldCA+PSAwKSB7CisgCQkJZ2V0X2ZpbGUoZmlscCk7CisgCQkJZmRfaW5zdGFsbChyZXQsIGZpbHApOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDItRml4LXRlc3RzLU1ha2VmaWxlLXVzYWdlLW9mLUxETElCUy12cy4tTERGTEFHUy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMi1GaXgtdGVzdHMtTWFrZWZpbGUtdXNhZ2Utb2YtTERMSUJTLXZzLi1MREZMQUdTLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YWI4YjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDItRml4LXRlc3RzLU1ha2VmaWxlLXVzYWdlLW9mLUxETElCUy12cy4tTERGTEFHUy5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDQ3ZmYxZWI5YmI0Zjg3MmMxZDczMWI5M2QzMzRlZTU4NjViZjM0MzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEZW55cyBEbXl0cml5ZW5rbyA8ZGVueXNAdGkuY29tPgorRGF0ZTogU3VuLCA2IEFwciAyMDE0IDIyOjE2OjMwIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCB0ZXN0cyBNYWtlZmlsZSB1c2FnZSBvZiBMRExJQlMgdnMuIExERkxBR1MKKworTGlicmFyaWVzIG11c3QgY29tZSBhZnRlciBvYmplY3RzLCBhcyBsaW5rIG9yZGVyIG1hdHRlcnMsIGVzcGVjaWFsbHkKK3doZW4gdXNpbmcgbGlua2VyIGZsYWdzIGxpa2UgLVdsLC0tYXMtbmVlZGVkLgorCitTaWduZWQtb2ZmLWJ5OiBEZW55cyBEbXl0cml5ZW5rbyA8ZGVueXNAdGkuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIHRlc3RzL01ha2VmaWxlIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUgYi90ZXN0cy9NYWtlZmlsZQoraW5kZXggY2QyMDJhZi4uNjdjM2M4MyAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlCisrKysgYi90ZXN0cy9NYWtlZmlsZQorQEAgLTM5LDUgKzM5LDUgQEAgdGVzdHByb2dzOiAkKGhvc3Rwcm9ncykKKyBjbGVhbjoKKyAJcm0gLWYgKi5vICp+ICQoaG9zdHByb2dzKQorIAorLSR7Y29tcF9wcm9nc306IExERkxBR1MgKz0gLWxzc2wgLWxjcnlwdG8KKyske2NvbXBfcHJvZ3N9OiBMRExJQlMgKz0gLWxzc2wgLWxjcnlwdG8KKyAke2NvbXBfcHJvZ3N9OiAlOiAlLm8gb3BlbnNzbF93cmFwcGVyLm8KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2R0Yy9kdGMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2R0Yy9kdGMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNDA5YjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvZHRjL2R0Yy5pbmMKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJEZXZpY2UgVHJlZSBDb21waWxlciIKK0RFU0NSSVBUSU9OID0gIlRoZSBEZXZpY2UgVHJlZSBDb21waWxlciBpcyBhIHRvb2wgdXNlZCB0byBtYW5pcHVsYXRlIHRoZSBPcGVuLUZpcm13YXJlLWxpa2UgZGV2aWNlIHRyZWUgdXNlZCBieSBQb3dlclBDIGtlcm5lbHMuIgorU0VDVElPTiA9ICJib290bG9hZGVyIgorTElDRU5TRSA9ICJHUEx2MiB8IEJTRCIKK0RFUEVORFMgPSAiZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIgorCitTUkNfVVJJID0gImdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vdXRpbHMvZHRjL2R0Yy5naXQgXAorICAgICAgICAgICBmaWxlOi8vbWFrZV9pbnN0YWxsLnBhdGNoIFwKKwkgICIKKworRVhUUkFfT0VNQUtFPSdQUkVGSVg9IiR7cHJlZml4fSIgTElCRElSPSIke2xpYmRpcn0iIERFU1RESVI9IiR7RH0iJworCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGwKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LW1pc2MiCitGSUxFU18ke1BOfS1taXNjID0gIiR7YmluZGlyfS9jb252ZXJ0LWR0c3YwICR7YmluZGlyfS9mdGR1bXAgJHtiaW5kaXJ9L2R0ZGlmZiIKKworUkRFUEVORFNfJHtQTn0tbWlzYyArPSAiYmFzaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9kdGMvZHRjL21ha2VfaW5zdGFsbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9kdGMvZHRjL21ha2VfaW5zdGFsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTIwNjE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2R0Yy9kdGMvbWFrZV9pbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGdpdC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL01ha2VmaWxlCTIwMTEtMTEtMDIgMTQ6NTI6MTcuMjQzMTA0Nzc5IC0wNzAwCisrKysgZ2l0L01ha2VmaWxlCTIwMTEtMTEtMDIgMTU6MDY6MDEuNTU1MTA0OTgyIC0wNzAwCitAQCAtMTYxLDggKzE2MSw4IEBACisgCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQoQklORElSKQorIAkkKElOU1RBTEwpICQoQklOKSAkKFNDUklQVFMpICQoREVTVERJUikkKEJJTkRJUikKKyAJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJChMSUJESVIpCistCSQoSU5TVEFMTCkgJChMSUJGRFRfbGliKSAkKERFU1RESVIpJChMSUJESVIpCistCWxuIC1zZiAkKG5vdGRpciAkKExJQkZEVF9saWIpKSAkKERFU1RESVIpJChMSUJESVIpLyQoTElCRkRUX3NvbmFtZSkKKysJJChJTlNUQUxMKSAkKExJQkZEVF9saWIpICQoREVTVERJUikkKExJQkRJUikvJChMSUJGRFRfc29uYW1lKQorKwlsbiAtc2YgJChMSUJGRFRfc29uYW1lKSAkKERFU1RESVIpJChMSUJESVIpLyQobm90ZGlyICQoTElCRkRUX2xpYikpCisgCWxuIC1zZiAkKExJQkZEVF9zb25hbWUpICQoREVTVERJUikkKExJQkRJUikvbGliZmR0LiQoU0hBUkVETElCX0VYVCkKKyAJJChJTlNUQUxMKSAtbSA2NDQgJChMSUJGRFRfYXJjaGl2ZSkgJChERVNURElSKSQoTElCRElSKQorIAkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKElOQ0xVREVESVIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvZHRjL2R0Y19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvZHRjL2R0Y19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ0NjE0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9kdGMvZHRjX2dpdC5iYgpAQCAtMCwwICsxLDExIEBACityZXF1aXJlIGR0Yy5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vR1BMO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisJCSAgICBmaWxlOi8vbGliZmR0L2xpYmZkdC5oO2JlZ2lubGluZT0zO2VuZGxpbmU9NTI7bWQ1PWZiMzYwOTYzMTUxZjhlYzJkNmMwNmIwNTViY2JiNjhjIgorCitTUkNSRVYgPSAiMzAyZmNhOWY0YzI4M2UxOTk0Y2YwYTVhOWNlMWNmNDNjYTE1ZTZkMiIKK1BWID0gIjEuNC4xK2dpdCR7U1JDUFZ9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2Vybi10b29scy9rZXJuLXRvb2xzLW5hdGl2ZV9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2Vybi10b29scy9rZXJuLXRvb2xzLW5hdGl2ZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc1MzA5NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXJuLXRvb2xzL2tlcm4tdG9vbHMtbmF0aXZlX2dpdC5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIlRvb2xzIGZvciBtYW5hZ2luZyBZb2N0byBQcm9qZWN0IHN0eWxlIGJyYW5jaGVkIGtlcm5lbHMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZ2l0L3Rvb2xzL2tnaXQ7YmVnaW5saW5lPTU7ZW5kbGluZT05O21kNT1kOGQxZDcyOWE3MGNkNWY1Mjk3MmY4ODg0YjgwNzQzZCIKKworREVQRU5EUyA9ICJnaXQtbmF0aXZlIgorCitTUkNSRVYgPSAiYmQxNDRkNDNjYTViMWVhZjllNzI3YmNlZDRjZTNiNjFiNjQyMjk3YyIKK1BSID0gInIxMiIKK1BWID0gIjAuMitnaXQke1NSQ1BWfSIKKworaW5oZXJpdCBuYXRpdmUKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtdG9vbHMuZ2l0IgorUyA9ICIke1dPUktESVJ9IgorCitkb19jb21waWxlKCkgeyAKKwk6Cit9CisKK2RvX2luc3RhbGwoKSB7CisJY2QgJHtTfS9naXQKKwltYWtlIERFU1RESVI9JHtEfSR7YmluZGlyfSBpbnN0YWxsCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Nzk3YTI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzLmluYwpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIktleGVjIGZhc3QgcmVib290IHRvb2xzIgorREVTQ1JJUFRJT04gPSAiS2V4ZWMgaXMgYSBmYXN0IHJlYm9vdCBmZWF0dXJlIHRoYXQgbGV0cyB5b3UgcmVib290IHRvIGEgbmV3IExpbnV4IGtlcm5lbCIKK0FVVEhPUiA9ICJFcmljIEJpZWRlcm1hbiIKK0hPTUVQQUdFID0gImh0dHA6Ly9rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9rZXJuZWwva2V4ZWMvIgorU0VDVElPTiA9ICJrZXJuZWwvdXNlcmxhbmQiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWE1YmVkMmY2MGQzNTc2MThjYTE2MWFkNTM5ZjdjMGEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8va2V4ZWMva2V4ZWMuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT1hZjEwZjZhZTRhODcxNTk2NWU2NDhhYTY4N2FkM2UwOSIKK0RFUEVORFMgPSAiemxpYiB4eiIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzL2tlcm5lbC9rZXhlYy9rZXhlYy10b29scy0ke1BWfS50YXIuZ3oiCisKK1BSID0gInIxIgorCitpbmhlcml0IGF1dG90b29scworCitDT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NC4qfGkuODYuKnxhcm0uKnxhYXJjaDY0Lip8cG93ZXJwYy4qfG1pcHMuKiktKGxpbnV4fGZyZWVic2QuKiknCisKK0lOU0FORV9TS0lQXyR7UE59ID0gImFyY2giCisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKyAgICAjIFJlbW92ZSB0aGUgJyouZCcgZmlsZSB0byBtYWtlIHN1cmUgdGhlIHJlY29tcGlsZSBpcyBPSworICAgIGZvciBkZXAgaW4gYGZpbmQgJHtCfSAtdHlwZSBmIC1uYW1lICcqLmQnYDsgZG8KKyAgICAgICAgZGVwX25vX2Q9ImBlY2hvICRkZXAgfCBzZWQgJ3MjLmQkIyMnYCIKKyAgICAgICAgIyBSZW1vdmUgZmlsZS5kIHdoZW4gdGhlcmUgaXMgYSBmaWxlLm8KKyAgICAgICAgaWYgWyAtZiAiJGRlcF9ub19kLm8iIF07IHRoZW4KKyAgICAgICAgICAgIHJtIC1mICRkZXAKKyAgICAgICAgZmkKKyAgICBkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMvMDAwMS1wdXJnYXRvcnktUGFzcy1yLWRpcmVjdGx5LXRvLWxpbmtlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy8wMDAxLXB1cmdhdG9yeS1QYXNzLXItZGlyZWN0bHktdG8tbGlua2VyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZDA3N2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMvMDAwMS1wdXJnYXRvcnktUGFzcy1yLWRpcmVjdGx5LXRvLWxpbmtlci5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIGExMTM1YjMxNzA5NjNiYTk1NmYyMzY0YzEyODM4NjRjMzU1NDEyOTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCA3IFNlcCAyMDE1IDA3OjU5OjQ1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIHB1cmdhdG9yeTogUGFzcyAtciBkaXJlY3RseSB0byBsaW5rZXIKKworVGhpcyBoZWxwcyBjb21waWxpbmcgd2l0aCBjbGFuZyBzaW5jZSAtciBpcyBub3QgYSBrbm93biBvcHRpb24gZm9yIGNsYW5nCit3aGVyZSBhcyBnY2Mga25vd3MgaG93IHRvIGRlYWwgd2l0aCBpdCBhbmQgcGFzc2VzIGl0IGRvd24gdG8gbGlua2VyCit1bmZpbHRlcmVkCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgcHVyZ2F0b3J5L01ha2VmaWxlIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvcHVyZ2F0b3J5L01ha2VmaWxlIGIvcHVyZ2F0b3J5L01ha2VmaWxlCitpbmRleCAyYjVjMDYxLi5iMjUxMzUzIDEwMDY0NAorLS0tIGEvcHVyZ2F0b3J5L01ha2VmaWxlCisrKysgYi9wdXJnYXRvcnkvTWFrZWZpbGUKK0BAIC02MSw3ICs2MSw3IEBAICQoUFVSR0FUT1JZKTogQ1BQRkxBR1M9JCgkKEFSQ0gpX1BVUkdBVE9SWV9FWFRSQV9DRkxBR1MpIFwKKyAJCQktSSQoc2hlbGwgJChDQykgLXByaW50LWZpbGUtbmFtZT1pbmNsdWRlKQorICQoUFVSR0FUT1JZKTogTERGTEFHUz0kKCQoQVJDSClfUFVSR0FUT1JZX0VYVFJBX0NGTEFHUylcCisgCQkJLVdsLC0tbm8tdW5kZWZpbmVkIC1ub3N0YXJ0ZmlsZXMgLW5vc3RkbGliIFwKKy0JCQktbm9kZWZhdWx0bGlicyAtZSBwdXJnYXRvcnlfc3RhcnQgLXIgXAorKwkJCS1ub2RlZmF1bHRsaWJzIC1lIHB1cmdhdG9yeV9zdGFydCAtV2wsLXIgXAorIAkJCS1XbCwtTWFwPSQoUFVSR0FUT1JZX01BUCkKKyAKKyAkKFBVUkdBVE9SWSk6ICQoUFVSR0FUT1JZX09CSlMpCistLSAKKzIuNS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy8wMDAyLXBvd2VycGMtY2hhbmdlLXRoZS1tZW1vcnktc2l6ZS1saW1pdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy8wMDAyLXBvd2VycGMtY2hhbmdlLXRoZS1tZW1vcnktc2l6ZS1saW1pdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzk3ZDkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzLzAwMDItcG93ZXJwYy1jaGFuZ2UtdGhlLW1lbW9yeS1zaXplLWxpbWl0LnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gYjE5YjY4ZWFiNTY3YWE1MzRjZjhkZWM3OWZlMThlM2RjMGUxNDA0MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFF1YW55YW5nIFdhbmcgPHF1YW55YW5nLndhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTYgSnVuIDIwMTUgMTI6NTk6NTcgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gcG93ZXJwYzogY2hhbmdlIHRoZSBtZW1vcnkgc2l6ZSBsaW1pdAorCitXaGVuIHJ1biAia2V4ZWMiIGluIHBvd2VycGMgYm9hcmQsIHRoZSBrZXhlYyBoYXMgYSBsaW1pdCB0aGF0Cit0aGUga2VybmVsIHRleHQgYW5kIGJzcyBzaXplIG11c3QgYmUgbGVzcyB0aGFuIDI0TS4gQnV0IG5vdworc29tZSBrZXJuZWwgc2l6ZSBleGNlZWQgdGhlIGxpbWl0LiBTbyB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgbGltaXQsCitlbHNlIHdpbGwgZ2V0IHRoZSBlcnJvciBsb2cgYXMgYmVsb3c6CisKK215X2xvYWQ6NjY5OiBkbworQ291bGQgbm90IGZpbmQgYSBmcmVlIGFyZWEgb2YgbWVtb3J5IG9mIDB4MTI0MDAgYnl0ZXMuLi4KK0NvdWxkIG5vdCBmaW5kIGEgZnJlZSBhcmVhIG9mIG1lbW9yeSBvZiAweDEzMDAwIGJ5dGVzLi4uCitsb2NhdGVfaG9sZSBmYWlsZWQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFF1YW55YW5nIFdhbmcgPHF1YW55YW5nLndhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGtleGVjL2FyY2gvcHBjL2tleGVjLXBwYy5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvcHBjL2tleGVjLXBwYy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ga2V4ZWMtdG9vbHMtMi4wLjEwLm9yaWcva2V4ZWMvYXJjaC9wcGMva2V4ZWMtcHBjLmgKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9wcGMva2V4ZWMtcHBjLmgKK0BAIC00Miw3ICs0Miw3IEBAIHZvaWQgZG9sX3BwY191c2FnZSh2b2lkKTsKKyAgKiBEdXJpbmcgaW5pdGFsIHNldHVwIHRoZSBrZXJuZWwgZG9lcyBub3QgbWFwIHRoZSB3aG9sZSBtZW1vcnkgYnV0IGEgcGFydCBvZgorICAqIGl0LiBPbiBCb29rLUUgdGhhdCBpcyA2NE1pQiwgNjAxIDI0TWlCIG9yIDI1Nk1pQiAoaWYgcG9zc2libGUpLgorICAqLworLSNkZWZpbmUgS0VSTkVMX0FDQ0VTU19UT1AgKDI0ICogMTAyNCAqIDEwMjQpCisrI2RlZmluZSBLRVJORUxfQUNDRVNTX1RPUCAoMzYgKiAxMDI0ICogMTAyNCkKKyAKKyAvKiBib290IGJsb2NrIHZlcnNpb24gMTcgYXMgZGVmaW5lZCBieSB0aGUgbGludXgga2VybmVsICovCisgc3RydWN0IGJvb3RibG9jayB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2V4ZWMtYWFyY2g2NC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZXhlYy1hYXJjaDY0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwM2Y1ODIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2V4ZWMtYWFyY2g2NC5wYXRjaApAQCAtMCwwICsxLDgwMSBAQAorRnJvbTogR2VvZmYgTGV2YW5kIDxnZW9mZkBpbmZyYWRlYWQub3JnPgorRGF0ZTogTW9uLCAxNSBKdWwgMjAxMyAyMzozMjozNiArMDAwMCAoLTA3MDApCitTdWJqZWN0OiBBZGQgYXJtNjQgc3VwcG9ydAorWC1HaXQtVXJsOiBodHRwczovL2dpdC5saW5hcm8ub3JnL2dpdHdlYj9wPXBlb3BsZSUyRmdlb2ZmJTJGa2V4ZWMtdG9vbHMuZ2l0O2E9Y29tbWl0ZGlmZl9wbGFpbjtoPWZiZjVhYzZjMmM3MGVjMGY2ZGEyYjlmZjU2M2U1NzM5OTk3NTJjMDEKKworQWRkIGFybTY0IHN1cHBvcnQKKworU2lnbmVkLW9mZi1ieTogR2VvZmYgTGV2YW5kIDxnZW9mZkBpbmZyYWRlYWQub3JnPgorCitHZXQgcGF0Y2ggZnJvbToKK2h0dHBzOi8vZmVkb3JhcGVvcGxlLm9yZy9+aHJ3L2FhcmNoNjQvZm9yLWZlZG9yYS9rZXhlYy1hYXJjaDY0LnBhdGNoCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorCistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzIAorIGtleGVjL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgCisga2V4ZWMvYXJjaC9hcm02NC9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICAxMyArCisga2V4ZWMvYXJjaC9hcm02NC9jcmFzaGR1bXAtYXJtNjQuYyAgICAgIHwgIDMwNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGtleGVjL2FyY2gvYXJtNjQvaW5jbHVkZS9hcmNoL29wdGlvbnMuaCB8ICAgMjYgKysKKyBrZXhlYy9hcmNoL2FybTY0L2tleGVjLWFybTY0LmMgICAgICAgICAgfCAgMTc3ICsrKysrKysrKysrKysrKysrKworIGtleGVjL2FyY2gvYXJtNjQva2V4ZWMtYXJtNjQuaCAgICAgICAgICB8ICAgMjAgKysKKyBrZXhlYy9hcmNoL2FybTY0L2tleGVjLWVsZi1hcm02NC5jICAgICAgfCAgMTE0ICsrKysrKysrKysrCisga2V4ZWMva2V4ZWMtc3lzY2FsbC5oICAgICAgICAgICAgICAgICAgIHwgICAgOSAKKyBrZXhlYy9rZXhlYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyIAorIHB1cmdhdG9yeS9hcmNoL2FybTY0L01ha2VmaWxlICAgICAgICAgICB8ICAgIDcgCisgMTEgZmlsZXMgY2hhbmdlZCwgNjc1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ga2V4ZWMtdG9vbHMtMi4wLjEwLm9yaWcvY29uZmlndXJlLmFjCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2NvbmZpZ3VyZS5hYworQEAgLTM2LDYgKzM2LDkgQEAgY2FzZSAkdGFyZ2V0X2NwdSBpbgorIAkJQVJDSD0icHBjNjQiCisgCQlTVUJBUkNIPSJMRSIKKyAJCTs7CisrCWFhcmNoNjQqICkKKysJCUFSQ0g9ImFybTY0IgorKwkJOzsKKyAJYXJtKiApCisgCQlBUkNIPSJhcm0iCisgCQk7OworSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGtleGVjLXRvb2xzLTIuMC4xMC5vcmlnL2tleGVjL01ha2VmaWxlCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL01ha2VmaWxlCitAQCAtNzEsNiArNzEsNyBAQCBLRVhFQ19TUkNTCQkJKz0gJCgkKEFSQ0gpX0ZTMkRUKQorIAorIGluY2x1ZGUgJChzcmNkaXIpL2tleGVjL2FyY2gvYWxwaGEvTWFrZWZpbGUKKyBpbmNsdWRlICQoc3JjZGlyKS9rZXhlYy9hcmNoL2FybS9NYWtlZmlsZQorK2luY2x1ZGUgJChzcmNkaXIpL2tleGVjL2FyY2gvYXJtNjQvTWFrZWZpbGUKKyBpbmNsdWRlICQoc3JjZGlyKS9rZXhlYy9hcmNoL2kzODYvTWFrZWZpbGUKKyBpbmNsdWRlICQoc3JjZGlyKS9rZXhlYy9hcmNoL2lhNjQvTWFrZWZpbGUKKyBpbmNsdWRlICQoc3JjZGlyKS9rZXhlYy9hcmNoL202OGsvTWFrZWZpbGUKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9hcm02NC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L01ha2VmaWxlCitAQCAtMCwwICsxLDEzIEBACisrCisrYXJtNjRfS0VYRUNfU1JDUyArPSBcCisrCWtleGVjL2FyY2gvYXJtNjQva2V4ZWMtYXJtNjQuYyBcCisrCWtleGVjL2FyY2gvYXJtNjQva2V4ZWMtZWxmLWFybTY0LmMgXAorKwlrZXhlYy9hcmNoL2FybTY0L2NyYXNoZHVtcC1hcm02NC5jCisrCisrYXJtNjRfQVJDSF9SRVVTRV9JTklUUkQgPQorK2FybTY0X0FERF9TRUdNRU5UID0KKythcm02NF9WSVJUX1RPX1BIWVMgPQorKworK2Rpc3QgKz0gJChhcm02NF9LRVhFQ19TUkNTKSBcCisrCWtleGVjL2FyY2gvYXJtNjQvTWFrZWZpbGUgXAorKwlrZXhlYy9hcmNoL2FybTY0L2tleGVjLWFybTY0LmgKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9hcm02NC9jcmFzaGR1bXAtYXJtNjQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L2NyYXNoZHVtcC1hcm02NC5jCitAQCAtMCwwICsxLDMwNSBAQAorKy8qCisrICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gKHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSkuCisrICovCisrCisrI2luY2x1ZGUgIi4uLy4uL2tleGVjLmgiCisrI2luY2x1ZGUgIi4uLy4uL2tleGVjLWVsZi5oIgorKyNpbmNsdWRlICIuLi8uLi9jcmFzaGR1bXAuaCIKKysKKytpbnQgaXNfY3Jhc2hrZXJuZWxfbWVtX3Jlc2VydmVkKHZvaWQpCisreworKwlyZXR1cm4gMDsKKyt9CisrCisrI2lmIDAKKysvKgorKyAqIFVzZWQgdG8gc2F2ZSB2YXJpb3VzIG1lbW9yeSByYW5nZXMvcmVnaW9ucyBuZWVkZWQgZm9yIHRoZSBjYXB0dXJlZAorKyAqIGtlcm5lbCB0byBib290LiAobGltZSBtZW1tYXA9IG9wdGlvbiBpbiBvdGhlciBhcmNocykKKysgKi8KKytzdGF0aWMgc3RydWN0IG1lbW9yeV9yYW5nZSBjcmFzaF9tZW1vcnlfcmFuZ2VzW0NSQVNIX01BWF9NRU1PUllfUkFOR0VTXTsKKytzdHJ1Y3QgbWVtb3J5X3JhbmdlcyB1c2FibGVtZW1fcmducyA9IHsKKysgICAgLnNpemUgPSAwLAorKyAgICAucmFuZ2VzID0gY3Jhc2hfbWVtb3J5X3JhbmdlcywKKyt9OworKworKy8qIG1lbW9yeSByYW5nZSByZXNlcnZlZCBmb3IgY3Jhc2hrZXJuZWwgKi8KKytzdGF0aWMgc3RydWN0IG1lbW9yeV9yYW5nZSBjcmFzaF9yZXNlcnZlZF9tZW07CisrCisrc3RhdGljIHN0cnVjdCBjcmFzaF9lbGZfaW5mbyBlbGZfaW5mbyA9IHsKKysJLmNsYXNzCQk9IEVMRkNMQVNTMzIsCisrCS5kYXRhCQk9IEVMRkRBVEEyTFNCLAorKwkubWFjaGluZQk9IEVNX0FSTSwKKysJLnBhZ2Vfb2Zmc2V0CT0gUEFHRV9PRkZTRVQsCisrfTsKKysKKyt1bnNpZ25lZCBsb25nIHBoeXNfb2Zmc2V0OworKworKy8qKgorKyAqIGNyYXNoX3JhbmdlX2NhbGxiYWNrKCkgLSBjYWxsYmFjayBjYWxsZWQgZm9yIGVhY2ggaW9tZW0gcmVnaW9uCisrICogQGRhdGE6IG5vdCB1c2VkCisrICogQG5yOiBub3QgdXNlZAorKyAqIEBzdHI6IG5hbWUgb2YgdGhlIG1lbW9yeSByZWdpb24KKysgKiBAYmFzZTogc3RhcnQgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbgorKyAqIEBsZW5ndGg6IHNpemUgb2YgdGhlIG1lbW9yeSByZWdpb24KKysgKgorKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgZm9yIGVhY2ggbWVtb3J5IHJlZ2lvbiBmb3VuZCBpbiAvcHJvYy9pb21lbS4gSXQKKysgKiBsb2NhdGVzIHN5c3RlbSBSQU0gYW5kIGNyYXNoa2VybmVsIHJlc2VydmVkIG1lbW9yeSBhbmQgcGxhY2VzIHRoZXNlIHRvCisrICogdmFyaWFibGVzOiBAY3Jhc2hfbWVtb3J5X3JhbmdlcyBhbmQgQGNyYXNoX3Jlc2VydmVkX21lbS4gTnVtYmVyIG9mIG1lbW9yeQorKyAqIHJlZ2lvbnMgaXMgcGxhY2VkIGluIEBjcmFzaF9tZW1vcnlfbnJfcmFuZ2VzLgorKyAqLworK3N0YXRpYyBpbnQgY3Jhc2hfcmFuZ2VfY2FsbGJhY2sodm9pZCAqVU5VU0VEKGRhdGEpLCBpbnQgVU5VU0VEKG5yKSwKKysJCQkJY2hhciAqc3RyLCB1bnNpZ25lZCBsb25nIGJhc2UsCisrCQkJCXVuc2lnbmVkIGxvbmcgbGVuZ3RoKQorK3sKKysJc3RydWN0IG1lbW9yeV9yYW5nZSAqcmFuZ2U7CisrCisrCWlmICh1c2FibGVtZW1fcmducy5zaXplID49IENSQVNIX01BWF9NRU1PUllfUkFOR0VTKQorKwkJcmV0dXJuIDE7CisrCisrCXJhbmdlID0gdXNhYmxlbWVtX3JnbnMucmFuZ2VzICsgdXNhYmxlbWVtX3JnbnMuc2l6ZTsKKysKKysJaWYgKHN0cm5jbXAoc3RyLCAiU3lzdGVtIFJBTVxuIiwgMTEpID09IDApIHsKKysJCXJhbmdlLT5zdGFydCA9IGJhc2U7CisrCQlyYW5nZS0+ZW5kID0gYmFzZSArIGxlbmd0aCAtIDE7CisrCQlyYW5nZS0+dHlwZSA9IFJBTkdFX1JBTTsKKysJCXVzYWJsZW1lbV9yZ25zLnNpemUrKzsKKysJfSBlbHNlIGlmIChzdHJuY21wKHN0ciwgIkNyYXNoIGtlcm5lbFxuIiwgMTMpID09IDApIHsKKysJCWNyYXNoX3Jlc2VydmVkX21lbS5zdGFydCA9IGJhc2U7CisrCQljcmFzaF9yZXNlcnZlZF9tZW0uZW5kID0gYmFzZSArIGxlbmd0aCAtIDE7CisrCQljcmFzaF9yZXNlcnZlZF9tZW0udHlwZSA9IFJBTkdFX1JBTTsKKysJfQorKworKwlyZXR1cm4gMDsKKyt9CisrCisrLyoqCisrICogY3Jhc2hfZXhjbHVkZV9yYW5nZSgpIC0gZXhjbHVkZXMgbWVtb3J5IHJlZ2lvbiByZXNlcnZlZCBmb3IgY3Jhc2hrZXJuZWwKKysgKgorKyAqIEZ1bmN0aW9uIGxvY2F0ZXMgd2hlcmUgY3Jhc2hrZXJuZWwgcmVzZXJ2ZWQgbWVtb3J5IGlzIGFuZCByZW1vdmVzIHRoYXQgcmVnaW9uCisrICogZnJvbSB0aGUgYXZhaWxhYmxlIG1lbW9yeSByZWdpb25zLgorKyAqLworK3N0YXRpYyB2b2lkIGNyYXNoX2V4Y2x1ZGVfcmFuZ2Uodm9pZCkKKyt7CisrCWNvbnN0IHN0cnVjdCBtZW1vcnlfcmFuZ2UgKnJhbmdlID0gJmNyYXNoX3Jlc2VydmVkX21lbTsKKysJaW50IGk7CisrCisrCWZvciAoaSA9IDA7IGkgPCB1c2FibGVtZW1fcmducy5zaXplOyBpKyspIHsKKysJCXN0cnVjdCBtZW1vcnlfcmFuZ2UgKnIgPSB1c2FibGVtZW1fcmducy5yYW5nZXMgKyBpOworKworKwkJLyoKKysJCSAqIFdlIGFzc3VtZSB0aGF0IGNyYXNoIGFyZWEgaXMgZnVsbHkgY29udGFpbmVkIGluCisrCQkgKiBzb21lIGxhcmdlciBtZW1vcnkgYXJlYS4KKysJCSAqLworKwkJaWYgKHItPnN0YXJ0IDw9IHJhbmdlLT5zdGFydCAmJiByLT5lbmQgPj0gcmFuZ2UtPmVuZCkgeworKwkJCXN0cnVjdCBtZW1vcnlfcmFuZ2UgKm5ldzsKKysJCQkvKgorKwkJCSAqIExldCdzIHNwbGl0IHRoaXMgYXJlYSBpbnRvIDIgc21hbGxlciBvbmVzIGFuZAorKwkJCSAqIHJlbW92ZSBleGNsdWRlZCByYW5nZSBmcm9tIGJldHdlZW4uIEZpcnN0IGNyZWF0ZQorKwkJCSAqIG5ldyBlbnRyeSBmb3IgdGhlIHJlbWFpbmluZyBhcmVhLgorKwkJCSAqLworKwkJCW5ldyA9IHVzYWJsZW1lbV9yZ25zLnJhbmdlcyArIHVzYWJsZW1lbV9yZ25zLnNpemU7CisrCQkJbmV3LT5zdGFydCA9IHJhbmdlLT5lbmQgKyAxOworKwkJCW5ldy0+ZW5kID0gci0+ZW5kOworKwkJCXVzYWJsZW1lbV9yZ25zLnNpemUrKzsKKysJCQkvKgorKwkJCSAqIE5leHQgdXBkYXRlIHRoaXMgYXJlYSB0byBlbmQgYmVmb3JlIGV4Y2x1ZGVkIHJhbmdlLgorKwkJCSAqLworKwkJCXItPmVuZCA9IHJhbmdlLT5zdGFydCAtIDE7CisrCQkJYnJlYWs7CisrCQl9CisrCX0KKyt9CisrCisrc3RhdGljIGludCByYW5nZV9jbXAoY29uc3Qgdm9pZCAqYTEsIGNvbnN0IHZvaWQgKmEyKQorK3sKKysJY29uc3Qgc3RydWN0IG1lbW9yeV9yYW5nZSAqcjEgPSBhMTsKKysJY29uc3Qgc3RydWN0IG1lbW9yeV9yYW5nZSAqcjIgPSBhMjsKKysKKysJaWYgKHIxLT5zdGFydCA+IHIyLT5zdGFydCkKKysJCXJldHVybiAxOworKwlpZiAocjEtPnN0YXJ0IDwgcjItPnN0YXJ0KQorKwkJcmV0dXJuIC0xOworKworKwlyZXR1cm4gMDsKKyt9CisrCisrLyoqCisrICogY3Jhc2hfZ2V0X21lbW9yeV9yYW5nZXMoKSAtIHJlYWQgc3lzdGVtIHBoeXNpY2FsIG1lbW9yeQorKyAqCisrICogRnVuY3Rpb24gcmVhZHMgdGhyb3VnaCBzeXN0ZW0gcGh5c2ljYWwgbWVtb3J5IGFuZCBzdG9yZXMgZm91bmQgbWVtb3J5IHJlZ2lvbnMKKysgKiBpbiBAY3Jhc2hfbWVtb3J5X3Jhbmdlcy4gTnVtYmVyIG9mIG1lbW9yeSByZWdpb25zIGZvdW5kIGlzIHBsYWNlZCBpbgorKyAqIEBjcmFzaF9tZW1vcnlfbnJfcmFuZ2VzLiBSZWdpb25zIGFyZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyLgorKyAqCisrICogUmV0dXJucyAlMCBpbiBjYXNlIG9mIHN1Y2Nlc3MgYW5kICUtMSBvdGhlcndpc2UgKGVycm5vIGlzIHNldCkuCisrICovCisrc3RhdGljIGludCBjcmFzaF9nZXRfbWVtb3J5X3Jhbmdlcyh2b2lkKQorK3sKKysJLyoKKysJICogRmlyc3QgcmVhZCBhbGwgbWVtb3J5IHJlZ2lvbnMgdGhhdCBjYW4gYmUgY29uc2lkZXJlZCBhcworKwkgKiBzeXN0ZW0gbWVtb3J5IGluY2x1ZGluZyB0aGUgY3Jhc2ggYXJlYS4KKysJICovCisrCWtleGVjX2lvbWVtX2Zvcl9lYWNoX2xpbmUoTlVMTCwgY3Jhc2hfcmFuZ2VfY2FsbGJhY2ssIE5VTEwpOworKworKwlpZiAodXNhYmxlbWVtX3JnbnMuc2l6ZSA8IDEpIHsKKysJCWVycm5vID0gRUlOVkFMOworKwkJcmV0dXJuIC0xOworKwl9CisrCisrCS8qCisrCSAqIEV4Y2x1ZGUgbWVtb3J5IHJlc2VydmVkIGZvciBjcmFzaGtlcm5lbCAodGhpcyBtYXkgcmVzdWx0IGEgc3BsaXQgbWVtb3J5CisrCSAqIHJlZ2lvbikuCisrCSAqLworKwljcmFzaF9leGNsdWRlX3JhbmdlKCk7CisrCisrCS8qCisrCSAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBtZW1vcnkgcmVnaW9ucyBhcmUgc29ydGVkLgorKwkgKi8KKysJcXNvcnQodXNhYmxlbWVtX3JnbnMucmFuZ2VzLCB1c2FibGVtZW1fcmducy5zaXplLAorKwkgICAgICBzaXplb2YoKnVzYWJsZW1lbV9yZ25zLnJhbmdlcyksIHJhbmdlX2NtcCk7CisrCisrCXJldHVybiAwOworK30KKysKKysvKioKKysgKiBjbWRsaW5lX2FkZF9lbGZjb3JlaGRyKCkgLSBhZGRzIGVsZmNvcmVoZHI9IHRvIEBjbWRsaW5lCisrICogQGNtZGxpbmU6IGJ1ZmZlciB3aGVyZSBwYXJhbWV0ZXIgaXMgcGxhY2VkCisrICogQGVsZmNvcmVoZHI6IHBoeXNpY2FsIGFkZHJlc3Mgb2YgZWxmY29yZWhkcgorKyAqCisrICogRnVuY3Rpb24gYXBwZW5kcyAnZWxmY29yZWhkcj1zdGFydCcgYXQgdGhlIGVuZCBvZiB0aGUgY29tbWFuZCBsaW5lIGdpdmVuIGluCisrICogQGNtZGxpbmUuIE5vdGUgdGhhdCBAY21kbGluZSBtdXN0IGJlIGF0IGxlYXN0ICVDT01NQU5EX0xJTkVfU0laRSBieXRlcyBsb25nCisrICogKGluY2x1bmRpbmcgJU5VTCkuCisrICovCisrc3RhdGljIHZvaWQgY21kbGluZV9hZGRfZWxmY29yZWhkcihjaGFyICpjbWRsaW5lLCB1bnNpZ25lZCBsb25nIGVsZmNvcmVoZHIpCisreworKwljaGFyIGJ1ZltDT01NQU5EX0xJTkVfU0laRV07CisrCWludCBidWZsZW47CisrCisrCWJ1ZmxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyBlbGZjb3JlaGRyPSUjbHgiLAorKwkJCSAgY21kbGluZSwgZWxmY29yZWhkcik7CisrCWlmIChidWZsZW4gPCAwKQorKwkJZGllKCJGYWlsZWQgdG8gY29uc3RydWN0IGVsZmNvcmVoZHI9IGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJcbiIpOworKwlpZiAoYnVmbGVuID49IHNpemVvZihidWYpKQorKwkJZGllKCJDb21tYW5kIGxpbmUgb3ZlcmZsb3dcbiIpOworKworKwkodm9pZCkgc3RybmNweShjbWRsaW5lLCBidWYsIENPTU1BTkRfTElORV9TSVpFKTsKKysJY21kbGluZVtDT01NQU5EX0xJTkVfU0laRSAtIDFdID0gJ1wwJzsKKyt9CisrCisrLyoqCisrICogY21kbGluZV9hZGRfbWVtKCkgLSBhZGRzIG1lbT0gcGFyYW1ldGVyIHRvIGtlcm5lbCBjb21tYW5kIGxpbmUKKysgKiBAY21kbGluZTogYnVmZmVyIHdoZXJlIHBhcmFtZXRlciBpcyBwbGFjZWQKKysgKiBAc2l6ZTogc2l6ZSBvZiB0aGUga2VybmVsIHJlc2VydmVkIG1lbW9yeSAoaW4gYnl0ZXMpCisrICoKKysgKiBUaGlzIGZ1bmN0aW9uIGFwcGVuZHMgJ21lbT1zaXplJyBhdCB0aGUgZW5kIG9mIHRoZSBjb21tYW5kIGxpbmUgZ2l2ZW4gaW4KKysgKiBAY21kbGluZS4gTm90ZSB0aGF0IEBjbWRsaW5lIG11c3QgYmUgYXQgbGVhc3QgJUNPTU1BTkRfTElORV9TSVpFIGJ5dGVzIGxvbmcKKysgKiAoaW5jbHVkaW5nICVOVUwpLgorKyAqLworK3N0YXRpYyB2b2lkIGNtZGxpbmVfYWRkX21lbShjaGFyICpjbWRsaW5lLCB1bnNpZ25lZCBsb25nIHNpemUpCisreworKwljaGFyIGJ1ZltDT01NQU5EX0xJTkVfU0laRV07CisrCWludCBidWZsZW47CisrCisrCWJ1ZmxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyBtZW09JWxkSyIsIGNtZGxpbmUsIHNpemUgPj4gMTApOworKwlpZiAoYnVmbGVuIDwgMCkKKysJCWRpZSgiRmFpbGVkIHRvIGNvbnN0cnVjdCBtZW09IGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJcbiIpOworKwlpZiAoYnVmbGVuID49IHNpemVvZihidWYpKQorKwkJZGllKCJDb21tYW5kIGxpbmUgb3ZlcmZsb3dcbiIpOworKworKwkodm9pZCkgc3RybmNweShjbWRsaW5lLCBidWYsIENPTU1BTkRfTElORV9TSVpFKTsKKysJY21kbGluZVtDT01NQU5EX0xJTkVfU0laRSAtIDFdID0gJ1wwJzsKKyt9CisrCisrc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyByYW5nZV9zaXplKGNvbnN0IHN0cnVjdCBtZW1vcnlfcmFuZ2UgKnIpCisreworKwlyZXR1cm4gci0+ZW5kIC0gci0+c3RhcnQgKyAxOworK30KKysKKytzdGF0aWMgdm9pZCBkdW1wX21lbW9yeV9yYW5nZXModm9pZCkKKyt7CisrCWludCBpOworKworKwlpZiAoIWtleGVjX2RlYnVnKQorKwkJcmV0dXJuOworKworKwlkYmdwcmludGYoImNyYXNoa2VybmVsOiBbJSNsbHggLSAlI2xseF0gKCVsZE0pXG4iLAorKwkJICBjcmFzaF9yZXNlcnZlZF9tZW0uc3RhcnQsIGNyYXNoX3Jlc2VydmVkX21lbS5lbmQsCisrCQkgICh1bnNpZ25lZCBsb25nKXJhbmdlX3NpemUoJmNyYXNoX3Jlc2VydmVkX21lbSkgPj4gMjApOworKworKwlmb3IgKGkgPSAwOyBpIDwgdXNhYmxlbWVtX3JnbnMuc2l6ZTsgaSsrKSB7CisrCQlzdHJ1Y3QgbWVtb3J5X3JhbmdlICpyID0gdXNhYmxlbWVtX3JnbnMucmFuZ2VzICsgaTsKKysJCWRiZ3ByaW50ZigibWVtb3J5IHJhbmdlOiBbJSNsbHggLSAlI2xseF0gKCVsZE0pXG4iLAorKwkJCSAgci0+c3RhcnQsIHItPmVuZCwgKHVuc2lnbmVkIGxvbmcpcmFuZ2Vfc2l6ZShyKSA+PiAyMCk7CisrCX0KKyt9CisrCisrLyoqCisrICogbG9hZF9jcmFzaGR1bXBfc2VnbWVudHMoKSAtIGxvYWRzIGFkZGl0aW9uYWwgc2VnbWVudHMgbmVlZGVkIGZvciBrZHVtcAorKyAqIEBpbmZvOiBrZXhlYyBpbmZvIHN0cnVjdHVyZQorKyAqIEBtb2RfY21kbGluZToga2VybmVsIGNvbW1hbmQgbGluZQorKyAqCisrICogVGhpcyBmdW5jdGlvbiBsb2FkcyBhZGRpdGlvbmFsIHNlZ21lbnRzIHdoaWNoIGFyZSBuZWVkZWQgZm9yIHRoZSBkdW1wIGNhcHR1cmUKKysgKiBrZXJuZWwuIEl0IGFsc28gdXBkYXRlcyBrZXJuZWwgY29tbWFuZCBsaW5lIHBhc3NlZCBpbiBAbW9kX2NtZGxpbmUgdG8gaGF2ZQorKyAqIHJpZ2h0IHBhcmFtZXRlcnMgZm9yIHRoZSBkdW1wIGNhcHR1cmUga2VybmVsLgorKyAqCisrICogUmV0dXJuICUwIGluIGNhc2Ugb2Ygc3VjY2VzcyBhbmQgJS0xIGluIGNhc2Ugb2YgZXJyb3IuCisrICovCisraW50IGxvYWRfY3Jhc2hkdW1wX3NlZ21lbnRzKHN0cnVjdCBrZXhlY19pbmZvICppbmZvLCBjaGFyICptb2RfY21kbGluZSkKKyt7CisrCXVuc2lnbmVkIGxvbmcgZWxmY29yZWhkcjsKKysJdW5zaWduZWQgbG9uZyBidWZzejsKKysJdm9pZCAqYnVmOworKwlpbnQgZXJyOworKworKwkvKgorKwkgKiBGaXJzdCBmZXRjaCBhbGwgdGhlIG1lbW9yeSAoUkFNKSByYW5nZXMgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gcGFzcyB0bworKwkgKiB0aGUgY3Jhc2hkdW1wIGtlcm5lbCBkdXJpbmcgcGFuaWMuCisrCSAqLworKwllcnIgPSBjcmFzaF9nZXRfbWVtb3J5X3JhbmdlcygpOworKwlpZiAoZXJyKQorKwkJcmV0dXJuIGVycjsKKysKKysJLyoKKysJICogTm93IHRoYXQgd2UgaGF2ZSBtZW1vcnkgcmVnaW9ucyBzb3J0ZWQsIHdlIGNhbiB1c2UgZmlyc3QgbWVtb3J5CisrCSAqIHJlZ2lvbiBhcyBQSFlTX09GRlNFVC4KKysJICovCisrCXBoeXNfb2Zmc2V0ID0gdXNhYmxlbWVtX3JnbnMucmFuZ2VzLT5zdGFydDsKKysJZGJncHJpbnRmKCJwaHlzX29mZnNldDogJSNseFxuIiwgcGh5c19vZmZzZXQpOworKworKwllcnIgPSBjcmFzaF9jcmVhdGVfZWxmMzJfaGVhZGVycyhpbmZvLCAmZWxmX2luZm8sCisrCQkJCQkgdXNhYmxlbWVtX3JnbnMucmFuZ2VzLAorKwkJCQkJIHVzYWJsZW1lbV9yZ25zLnNpemUsICZidWYsICZidWZzeiwKKysJCQkJCSBFTEZfQ09SRV9IRUFERVJfQUxJR04pOworKwlpZiAoZXJyKQorKwkJcmV0dXJuIGVycjsKKysKKysJLyoKKysJICogV2UgYWxsb2NhdGUgRUxGIGNvcmUgaGVhZGVyIGZyb20gdGhlIGVuZCBvZiB0aGUgbWVtb3J5IGFyZWEgcmVzZXJ2ZWQKKysJICogZm9yIHRoZSBjcmFzaGtlcm5lbC4gV2UgYWxpZ24gdGhlIGhlYWRlciB0byBTRUNUSU9OX1NJWkUgKHdoaWNoIGlzCisrCSAqIDFNQikgc28gdGhhdCBhdmFpbGFibGUgbWVtb3J5IHBhc3NlZCBpbiBrZXJuZWwgY29tbWFuZCBsaW5lIHdpbGwgYmUKKysJICogYWxpZ25lZCB0byAxTUIuIFRoaXMgaXMgYmVjYXVzZSBrZXJuZWwgY3JlYXRlX21hcHBpbmcoKSB3YW50cyBtZW1vcnkKKysJICogcmVnaW9ucyB0byBiZSBhbGlnbmVkIHRvIFNFQ1RJT05fU0laRS4KKysJICovCisrCWVsZmNvcmVoZHIgPSBhZGRfYnVmZmVyX3BoeXNfdmlydChpbmZvLCBidWYsIGJ1ZnN6LCBidWZzeiwgMSA8PCAyMCwKKysJCQkJCSAgY3Jhc2hfcmVzZXJ2ZWRfbWVtLnN0YXJ0LAorKwkJCQkJICBjcmFzaF9yZXNlcnZlZF9tZW0uZW5kLCAtMSwgMCk7CisrCisrCWRiZ3ByaW50ZigiZWxmY29yZWhkcjogJSNseFxuIiwgZWxmY29yZWhkcik7CisrCWNtZGxpbmVfYWRkX2VsZmNvcmVoZHIobW9kX2NtZGxpbmUsIGVsZmNvcmVoZHIpOworKworKwkvKgorKwkgKiBBZGQgJ21lbT1zaXplJyBwYXJhbWV0ZXIgdG8gZHVtcCBjYXB0dXJlIGtlcm5lbCBjb21tYW5kIGxpbmUuIFRoaXMKKysJICogcHJldmVudHMgdGhlIGR1bXAgY2FwdHVyZSBrZXJuZWwgZnJvbSB1c2luZyBhbnkgb3RoZXIgbWVtb3J5IHJlZ2lvbnMKKysJICogd2hpY2ggYmVsb25nIHRvIHRoZSBwcmltYXJ5IGtlcm5lbC4KKysJICovCisrCWNtZGxpbmVfYWRkX21lbShtb2RfY21kbGluZSwgZWxmY29yZWhkciAtIGNyYXNoX3Jlc2VydmVkX21lbS5zdGFydCk7CisrCisrCWR1bXBfbWVtb3J5X3JhbmdlcygpOworKwlkYmdwcmludGYoImtlcm5lbCBjb21tYW5kIGxpbmU6IFwiJXNcIlxuIiwgbW9kX2NtZGxpbmUpOworKworKwlyZXR1cm4gMDsKKyt9CisrCisrI2VuZGlmCisrCitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvYXJtNjQvaW5jbHVkZS9hcmNoL29wdGlvbnMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L2luY2x1ZGUvYXJjaC9vcHRpb25zLmgKK0BAIC0wLDAgKzEsMjYgQEAKKysjaWZuZGVmIEtFWEVDX0FSQ0hfQVJNNjRfT1BUSU9OU19ICisrI2RlZmluZSBLRVhFQ19BUkNIX0FSTTY0X09QVElPTlNfSAorKworKy8vI2RlZmluZSBPUFRfQVJDSF9NQVgJKChPUFRfTUFYKSswKQorKworKyNkZWZpbmUgT1BUX0FQUEVORAkoKE9QVF9NQVgpKzApCisrI2RlZmluZSBPUFRfUkFNRElTSwkoKE9QVF9NQVgpKzEpCisrI2RlZmluZSBPUFRfRFRCCQkoKE9QVF9NQVgpKzIpCisrCisrI2RlZmluZSBPUFRfQVJDSF9NQVgJKChPUFRfTUFYKSszKQorKworKworKyNkZWZpbmUgS0VYRUNfQVJDSF9PUFRJT05TIFwKKysJS0VYRUNfT1BUSU9OUyBcCisrCXsgImFwcGVuZCIsICAgICAgIDEsIE5VTEwsIE9QVF9BUFBFTkQgfSwgXAorKwl7ICJjb21tYW5kLWxpbmUiLCAxLCBOVUxMLCBPUFRfQVBQRU5EIH0sIFwKKysJeyAiZHRiIiwgICAgICAgICAgMSwgTlVMTCwgT1BUX0RUQiB9LCBcCisrCXsgImluaXRyZCIsICAgICAgIDEsIE5VTEwsIE9QVF9SQU1ESVNLIH0sIFwKKysJeyAicmFtZGlzayIsICAgICAgMSwgTlVMTCwgT1BUX1JBTURJU0sgfSwgXAorKworKyNkZWZpbmUgS0VYRUNfQVJDSF9PUFRfU1RSIEtFWEVDX09QVF9TVFIgLyogT25seSBhY2NlcHQgbG9uZyBhcmNoIG9wdGlvbnMuICovCisrCisrI2RlZmluZSBLRVhFQ19BTExfT1BUSU9OUyBLRVhFQ19BUkNIX09QVElPTlMKKysjZGVmaW5lIEtFWEVDX0FMTF9PUFRfU1RSIEtFWEVDX0FSQ0hfT1BUX1NUUgorKworKyNlbmRpZiAvKiBLRVhFQ19BUkNIX0FSTTY0X09QVElPTlNfSCAqLworSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L2tleGVjLWFybTY0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9hcm02NC9rZXhlYy1hcm02NC5jCitAQCAtMCwwICsxLDE3NyBAQAorKy8qCisrICogQVJNNjQga2V4ZWMgc3VwcG9ydC4KKysgKi8KKysKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKworKy8vI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CisrCisrI2luY2x1ZGUgIi4uLy4uL2tleGVjLmgiCisrI2luY2x1ZGUgIi4uLy4uL2tleGVjLXN5c2NhbGwuaCIKKysjaW5jbHVkZSAia2V4ZWMtYXJtNjQuaCIKKysKKysKKyt2b2lkIGFyY2hfdXNhZ2Uodm9pZCkKKyt7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IC0+XG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworKworKwlwcmludGYoCisrIiAgICAgLS1hcHBlbmQ9U1RSSU5HICAgICAgIFNldCB0aGUga2VybmVsIGNvbW1hbmQgbGluZSB0byBTVFJJTkcuXG4iCisrIiAgICAgLS1jb21tYW5kLWxpbmU9U1RSSU5HIFNldCB0aGUga2VybmVsIGNvbW1hbmQgbGluZSB0byBTVFJJTkcuXG4iCisrIiAgICAgLS1kdGI9RklMRSAgICAgICAgICAgIFVzZSBGSUxFIGFzIHRoZSBkZXZpY2UgdHJlZSBibG9iLlxuIgorKyIgICAgIC0taW5pdHJkPUZJTEUgICAgICAgICBVc2UgRklMRSBhcyB0aGUga2VybmVsIGluaXRpYWwgcmFtZGlzay5cbiIKKysiICAgICAtLXJhbWRpc2s9RklMRSAgICAgICAgVXNlIEZJTEUgYXMgdGhlIGtlcm5lbCBpbml0aWFsIHJhbWRpc2suXG4iKTsKKysKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogPC1cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrfQorKworK2ludCBhcmNoX3Byb2Nlc3Nfb3B0aW9ucyhpbnQgVU5VU0VEKGFyZ2MpLCBjaGFyICoqVU5VU0VEKGFyZ3YpKQorK3sKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogZG9cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrCXJldHVybiAwOworK30KKysKKytjb25zdCBzdHJ1Y3QgYXJjaF9tYXBfZW50cnkgYXJjaGVzW10gPSB7CisrCXsgImFhcmNoNjQiLCBLRVhFQ19BUkNIX0FSTTY0IH0sCisrCXsgTlVMTCwgMCB9LAorK307CisrCisrdm9pZCBhcmNoX3VwZGF0ZV9wdXJnYXRvcnkoc3RydWN0IGtleGVjX2luZm8gKlVOVVNFRChpbmZvKSkKKyt7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGRvXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworK30KKysKKyt1bnNpZ25lZCBsb25nIHZpcnRfdG9fcGh5cyh1bnNpZ25lZCBsb25nIGFkZHIpCisreworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAlMDE2bHggLT4gJTAxNmx4XG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIGFkZHIsCisrCQlhZGRyICsgMHgwODAwMDAwMDBVTCk7CisrCXJldHVybiBhZGRyICsgMHgwODAwMDAwMDBVTDsKKyt9CisrCisrdm9pZCBhZGRfc2VnbWVudChzdHJ1Y3Qga2V4ZWNfaW5mbyAqaW5mbywgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgYnVmc3osCisrCXVuc2lnbmVkIGxvbmcgYmFzZSwgc2l6ZV90IG1lbXN6KQorK3sKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogLT5cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrCWFkZF9zZWdtZW50X3BoeXNfdmlydChpbmZvLCBidWYsIGJ1ZnN6LCBiYXNlLCBtZW1zeiwgMSk7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IDwtXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworK30KKysKKytzdGF0aWMgaW50IGdldF9tZW1vcnlfcmFuZ2VzXzEoc3RydWN0IG1lbW9yeV9yYW5nZSAqKnJhbmdlLCBpbnQgKnJhbmdlcywKKysJCQl1bnNpZ25lZCBsb25nIGtleGVjX2ZsYWdzKQorK3sKKysJc3RhdGljIHN0cnVjdCBtZW1vcnlfcmFuZ2UgbWVtb3J5X3JhbmdlW0tFWEVDX1NFR01FTlRfTUFYXTsKKysJY29uc3QgY2hhciAqaW9tZW07CisrCWludCByYW5nZV9jb3VudCA9IDA7CisrCWNoYXIgbGluZVtNQVhfTElORV07CisrCUZJTEUgKmZwOworKworKwlpb21lbSA9IHByb2NfaW9tZW0oKTsKKysJZnAgPSBmb3Blbihpb21lbSwgInIiKTsKKysKKysJaWYgKCFmcCkgeworKwkJZnByaW50ZihzdGRlcnIsICJDYW5ub3Qgb3BlbiAlczogJXNcbiIsCisrCQkJaW9tZW0sIHN0cmVycm9yKGVycm5vKSk7CisrCQlyZXR1cm4gLTE7CisrCX0KKysKKysJZGJncHJpbnRmKCJtZW1vcnkgcmFuZ2VzOlxuIik7CisrCisrCXdoaWxlKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApICE9IDApIHsKKysJCXN0cnVjdCBtZW1vcnlfcmFuZ2UgcjsKKysJCWNoYXIgKnN0cjsKKysJCWludCBjb25zdW1lZDsKKysKKysJCWlmIChyYW5nZV9jb3VudCA+PSBLRVhFQ19TRUdNRU5UX01BWCkKKysJCQlicmVhazsKKysKKysJCWlmIChzc2NhbmYobGluZSwgIiVMeC0lTHggOiAlbiIsICZyLnN0YXJ0LCAmci5lbmQsICZjb25zdW1lZCkKKysJCQkhPSAyKQorKwkJCWNvbnRpbnVlOworKworKwkJc3RyID0gbGluZSArIGNvbnN1bWVkOworKwkJci5lbmQrKzsKKysKKysJCWlmIChtZW1jbXAoc3RyLCAiU3lzdGVtIFJBTVxuIiwgMTEpKSB7CisrCQkJZGJncHJpbnRmKCIgU2tpcDogJTAxNkx4IC0gJTAxNkx4IDogJXMiLCByLnN0YXJ0LCByLmVuZCwKKysJCQkJc3RyKTsKKysJCQljb250aW51ZTsKKysJCX0KKysKKysJCXIudHlwZSA9IFJBTkdFX1JBTTsKKysJCW1lbW9yeV9yYW5nZVtyYW5nZV9jb3VudF0gPSByOworKwkJcmFuZ2VfY291bnQrKzsKKysKKysJCWRiZ3ByaW50ZigiIEFkZDogICUwMTZMeCAtICUwMTZMeCA6ICVzIiwgci5zdGFydCwgci5lbmQsIHN0cik7CisrCX0KKysKKysJZmNsb3NlKGZwKTsKKysJKnJhbmdlID0gbWVtb3J5X3JhbmdlOworKwkqcmFuZ2VzID0gcmFuZ2VfY291bnQ7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IGdldF9tZW1vcnlfcmFuZ2VzXzIoc3RydWN0IG1lbW9yeV9yYW5nZSAqKnJhbmdlLCBpbnQgKnJhbmdlcywKKysJCSAgICAgIHVuc2lnbmVkIGxvbmcgVU5VU0VEKGtleGVjX2ZsYWdzKSkKKyt7CisrCXN0YXRpYyBzdHJ1Y3QgbWVtb3J5X3JhbmdlIG1lbW9yeV9yYW5nZVsyXTsKKysKKysJbWVtb3J5X3JhbmdlWzBdLnN0YXJ0ID0gMHgwODAwMDAwMDA7CisrCW1lbW9yeV9yYW5nZVswXS5lbmQgICA9IDB4MTAwMDAwMDAwOworKwltZW1vcnlfcmFuZ2VbMF0udHlwZSA9IFJBTkdFX1JBTTsKKysKKysJbWVtb3J5X3JhbmdlWzFdLnN0YXJ0ID0gMHg5MDAwMDAwMDA7CisrCW1lbW9yeV9yYW5nZVsxXS5lbmQgICA9IDB4ODgwMDAwMDAwOworKwltZW1vcnlfcmFuZ2VbMV0udHlwZSA9IFJBTkdFX1JBTTsKKysKKysJKnJhbmdlID0gbWVtb3J5X3JhbmdlOworKwkqcmFuZ2VzID0gc2l6ZW9mKG1lbW9yeV9yYW5nZSkgLyBzaXplb2YobWVtb3J5X3JhbmdlWzBdKTsKKysKKysJcmV0dXJuIDA7CisrfQorKworK2ludCBnZXRfbWVtb3J5X3JhbmdlcyhzdHJ1Y3QgbWVtb3J5X3JhbmdlICoqcmFuZ2UsIGludCAqcmFuZ2VzLAorKwkJCXVuc2lnbmVkIGxvbmcga2V4ZWNfZmxhZ3MpCisreworKwkvKiBGSVhNRTogU2hvdWxkIGdldCB0aGlzIGluZm8gZnJvbSBkZXZpY2UgdHJlZS4gKi8KKysJCisrCXJldHVybiBnZXRfbWVtb3J5X3Jhbmdlc18xKHJhbmdlLCByYW5nZXMsIGtleGVjX2ZsYWdzKTsKKyt9CisrCisrc3RydWN0IGZpbGVfdHlwZSBmaWxlX3R5cGVbXSA9IHsKKysJeyAiZWxmLWFybTY0IiwgZWxmX2FybTY0X3Byb2JlLCBlbGZfYXJtNjRfbG9hZCwgZWxmX2FybTY0X3VzYWdlIH0sCisrfTsKKysKKytpbnQgZmlsZV90eXBlcyA9IHNpemVvZihmaWxlX3R5cGUpIC8gc2l6ZW9mKGZpbGVfdHlwZVswXSk7CisrCisraW50IGFyY2hfY29tcGF0X3RyYW1wb2xpbmUoc3RydWN0IGtleGVjX2luZm8gKmluZm8pCisreworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBkb1xuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKysJcmV0dXJuIDA7CisrfQorKworK3ZvaWQgYXJjaF9yZXVzZV9pbml0cmQodm9pZCkKKyt7CisrfQorKworK2ludCBtYWNoaW5lX3ZlcmlmeV9lbGZfcmVsKHN0cnVjdCBtZW1fZWhkciAqZWhkcikKKyt7CisrCSh2b2lkKWVoZHI7CisrCisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGRvXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworKwlyZXR1cm4gMDsKKyt9CisrCisrdm9pZCBtYWNoaW5lX2FwcGx5X2VsZl9yZWwoc3RydWN0IG1lbV9laGRyICplaGRyLCB1bnNpZ25lZCBsb25nIHJfdHlwZSwKKysJdm9pZCAqbG9jYXRpb24sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyB2YWx1ZSkKKyt7CisrCSh2b2lkKWVoZHI7CisrCSh2b2lkKXJfdHlwZTsKKysJKHZvaWQpbG9jYXRpb247CisrCSh2b2lkKWFkZHJlc3M7CisrCSh2b2lkKXZhbHVlOworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBkb1xuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKyt9CitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvYXJtNjQva2V4ZWMtYXJtNjQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L2tleGVjLWFybTY0LmgKK0BAIC0wLDAgKzEsMjAgQEAKKysvKgorKyAqIEFSTTY0IGtleGVjIHN1cHBvcnQuCisrICovCisrCisrI2lmICFkZWZpbmVkKEtFWEVDX0FSTTY0X0gpCisrI2RlZmluZSBLRVhFQ19BUk02NF9ICisrCisrLyogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+IEZJWE1FOiB0aGlzIGlzIGJyb2tlbiAqLworKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysKKysjaW5jbHVkZSAiLi4vLi4va2V4ZWMuaCIKKysKKysjZGVmaW5lIEtFWEVDX1NFR01FTlRfTUFYIDE2IC8qIEZJWE1FOiB0aGlzIHNob3VsZCBjb21lIGZyb20gPGxpbnV4L2tleGVjLmg+ICovCisrCisraW50IGVsZl9hcm02NF9wcm9iZShjb25zdCBjaGFyICpidWYsIG9mZl90IGxlbik7CisraW50IGVsZl9hcm02NF9sb2FkKGludCBhcmdjLCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqYnVmLCBvZmZfdCBsZW4sCisrCXN0cnVjdCBrZXhlY19pbmZvICppbmZvKTsKKyt2b2lkIGVsZl9hcm02NF91c2FnZSh2b2lkKTsKKysKKysjZW5kaWYKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L2tleGVjLWVsZi1hcm02NC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvYXJtNjQva2V4ZWMtZWxmLWFybTY0LmMKK0BAIC0wLDAgKzEsMTE0IEBACisrLyoKKysgKiBBUk02NCBrZXhlYyBzdXBwb3J0LgorKyAqLworKworKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysKKysjaW5jbHVkZSA8ZWxmLmg+CisrI2luY2x1ZGUgPGdldG9wdC5oPgorKworKyNpbmNsdWRlICIuLi8uLi9rZXhlYy1zeXNjYWxsLmgiCisrCisrI2luY2x1ZGUgImtleGVjLWFybTY0LmgiCisrI2luY2x1ZGUgImFyY2gvb3B0aW9ucy5oIgorKworKyNpZiAhZGVmaW5lZChFTV9BQVJDSDY0KQorKyMgZGVmaW5lIEVNX0FBUkNINjQgMTgzCisrI2VuZGlmCisrCisraW50IGVsZl9hcm02NF9wcm9iZShjb25zdCBjaGFyICpidWYsIG9mZl90IGxlbikKKyt7CisrCWludCByZXN1bHQ7CisrCXN0cnVjdCBtZW1fZWhkciBlaGRyOworKworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAtPlxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKysJCisrCXJlc3VsdCA9IGJ1aWxkX2VsZl9leGVjX2luZm8oYnVmLCBsZW4sICZlaGRyLCAwKTsKKysKKysJaWYgKHJlc3VsdCA8IDApIHsKKysJCWRiZ3ByaW50ZigiTm90IGFuIEVMRiBleGVjdXRhYmxlXG4iKTsKKysJCWdvdG8gb3V0OworKwl9CisrCisrCWlmIChlaGRyLmVfbWFjaGluZSAhPSBFTV9BQVJDSDY0KSB7CisrCQlkYmdwcmludGYoIk5vdCBhbiBBQVJDSDY0IGV4ZWN1dGFibGVcbiIpOworKwkJcmVzdWx0ID0gLTE7CisrCQlnb3RvIG91dDsKKysJfQorKworKwlyZXN1bHQgPSAwOworKworK291dDoKKysJZnJlZV9lbGZfaW5mbygmZWhkcik7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IDwtXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworKwlyZXR1cm4gcmVzdWx0OworK30KKysKKytpbnQgZWxmX2FybTY0X2xvYWQoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpidWYsIG9mZl90IGxlbiwKKysJCQlzdHJ1Y3Qga2V4ZWNfaW5mbyAqaW5mbykKKyt7CisrCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKysJCUtFWEVDX0FSQ0hfT1BUSU9OUworKwkJeyAwIH0KKysJfTsKKysJc3RhdGljIGNvbnN0IGNoYXIgc2hvcnRfb3B0aW9uc1tdID0gS0VYRUNfT1BUX1NUUiAiIjsKKysJY29uc3QgY2hhciAqY29tbWFuZF9saW5lID0gTlVMTDsKKysJdW5zaWduZWQgaW50IGNvbW1hbmRfbGluZV9sZW4gPSAwOworKwljb25zdCBjaGFyICpyYW1kaXNrID0gTlVMTDsKKysJY29uc3QgY2hhciAqZHRiID0gTlVMTDsKKysJaW50IG9wdDsKKysJc3RydWN0IG1lbV9laGRyIGVoZHI7CisrCWludCByZXN1bHQ7CisrCisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IC0+XG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworKworKwl3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIHNob3J0X29wdGlvbnMsIG9wdGlvbnMsIDApKQorKwkJIT0gLTEpIHsKKysJCXN3aXRjaCAob3B0KSB7CisrCQlkZWZhdWx0OgorKwkJCWlmIChvcHQgPCBPUFRfTUFYKSAvKiBJZ25vcmUgY29yZSBvcHRpb25zICovCisrCQkJCWJyZWFrOworKwkJY2FzZSBPUFRfQVBQRU5EOgorKwkJCWNvbW1hbmRfbGluZSA9IG9wdGFyZzsKKysJCQljb21tYW5kX2xpbmVfbGVuID0gc3RybGVuKGNvbW1hbmRfbGluZSkgKyAxOworKwkJCWJyZWFrOworKwkJY2FzZSBPUFRfUkFNRElTSzoKKysJCQlyYW1kaXNrID0gb3B0YXJnOworKwkJCWJyZWFrOworKwkJY2FzZSBPUFRfRFRCOgorKwkJCWR0YiA9IG9wdGFyZzsKKysJCQlicmVhazsKKysJCX0KKysJfQorKworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBjb21tYW5kX2xpbmU6ICVzXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIGNvbW1hbmRfbGluZSk7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IHJhbWRpc2s6ICVzXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIHJhbWRpc2spOworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBkdGI6ICVzXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIGR0Yik7CisrCisrCWlmIChpbmZvLT5rZXhlY19mbGFncyAmIEtFWEVDX09OX0NSQVNIKSB7CisrCQlmcHJpbnRmKHN0ZGVyciwgImtleGVjOiBrZHVtcCBub3QgeWV0IHN1cHBvcnRlZCBvbiBhcm02NFxuIik7CisrCQlyZXR1cm4gLTE7CisrCX0KKysKKysJcmVzdWx0ID0gYnVpbGRfZWxmX2V4ZWNfaW5mbyhidWYsIGxlbiwgJmVoZHIsIDApOworKworKwlpZiAocmVzdWx0IDwgMCkgeworKwkJZnJlZV9lbGZfaW5mbygmZWhkcik7CisrCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBmcmVlX2VsZl9pbmZvIGZhaWxlZFxuIiwgX19mdW5jX18sCisrCQkJX19MSU5FX18pOworKwkJcmV0dXJuIHJlc3VsdDsKKysJfQorKworKwllbGZfZXhlY19idWlsZF9sb2FkKGluZm8sICZlaGRyLCBidWYsIGxlbiwgMCk7CisrCisrCWluZm8tPmVudHJ5ID0gKHZvaWQqKTB4ODAwODAwMDBVTDsgIC8vIEZJWE1FCisrCisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IDwtXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworKwlyZXR1cm4gMDsKKyt9CisrCisrdm9pZCBlbGZfYXJtNjRfdXNhZ2Uodm9pZCkKKyt7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IC0+XG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiA8LVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKyt9CitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2tleGVjLXN5c2NhbGwuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGtleGVjLXRvb2xzLTIuMC4xMC5vcmlnL2tleGVjL2tleGVjLXN5c2NhbGwuaAorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9rZXhlYy1zeXNjYWxsLmgKK0BAIC0zOSw4ICszOSw4IEBACisgI2lmZGVmIF9fczM5MF9fCisgI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTI3NworICNlbmRpZgorLSNpZmRlZiBfX2FybV9fCistI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCV9fTlJfU1lTQ0FMTF9CQVNFICsgMzQ3ICAKKysjaWYgZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fYXJtNjRfXykKKysjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJX19OUl9TWVNDQUxMX0JBU0UgKyAzNDcKKyAjZW5kaWYKKyAjaWYgZGVmaW5lZChfX21pcHNfXykKKyAjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZCAgICAgICAgICAgICAgICA0MzExCitAQCAtMTA4LDYgKzEwOCw4IEBAIHN0YXRpYyBpbmxpbmUgbG9uZyBrZXhlY19maWxlX2xvYWQoaW50IGsKKyAjZGVmaW5lIEtFWEVDX0FSQ0hfUFBDNjQgICAoMjEgPDwgMTYpCisgI2RlZmluZSBLRVhFQ19BUkNIX0lBXzY0ICAgKDUwIDw8IDE2KQorICNkZWZpbmUgS0VYRUNfQVJDSF9BUk0gICAgICg0MCA8PCAxNikKKysjZGVmaW5lIEtFWEVDX0FSQ0hfQVJNNjQgICAoMTgzIDw8IDE2KQorKy8qICNkZWZpbmUgS0VYRUNfQVJDSF9BQVJDSDY0ICgxODMgPDwgMTYpICovCisgI2RlZmluZSBLRVhFQ19BUkNIX1MzOTAgICAgKDIyIDw8IDE2KQorICNkZWZpbmUgS0VYRUNfQVJDSF9TSCAgICAgICg0MiA8PCAxNikKKyAjZGVmaW5lIEtFWEVDX0FSQ0hfTUlQU19MRSAoMTAgPDwgMTYpCitAQCAtMTUzLDUgKzE1NSw4IEBAIHN0YXRpYyBpbmxpbmUgbG9uZyBrZXhlY19maWxlX2xvYWQoaW50IGsKKyAjaWZkZWYgX19tNjhrX18KKyAjZGVmaW5lIEtFWEVDX0FSQ0hfTkFUSVZFCUtFWEVDX0FSQ0hfNjhLCisgI2VuZGlmCisrI2lmIGRlZmluZWQoX19hcm02NF9fKQorKyNkZWZpbmUgS0VYRUNfQVJDSF9OQVRJVkUJS0VYRUNfQVJDSF9BUk02NAorKyNlbmRpZgorIAorICNlbmRpZiAvKiBLRVhFQ19TWVNDQUxMX0ggKi8KK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMva2V4ZWMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGtleGVjLXRvb2xzLTIuMC4xMC5vcmlnL2tleGVjL2tleGVjLmMKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMva2V4ZWMuYworQEAgLTY2NCw2ICs2NjQsOCBAQCBzdGF0aWMgaW50IG15X2xvYWQoY29uc3QgY2hhciAqdHlwZSwgaW50CisgCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKKyAJaW5mby5rZXhlY19mbGFncyA9IGtleGVjX2ZsYWdzOworIAorKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBkb1xuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKysKKyAJcmVzdWx0ID0gMDsKKyAJaWYgKGFyZ2MgLSBmaWxlaW5kIDw9IDApIHsKKyAJCWZwcmludGYoc3RkZXJyLCAiTm8ga2VybmVsIHNwZWNpZmllZFxuIik7CitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL3B1cmdhdG9yeS9hcmNoL2FybTY0L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL3B1cmdhdG9yeS9hcmNoL2FybTY0L01ha2VmaWxlCitAQCAtMCwwICsxLDcgQEAKKysjCisrIyBQdXJnYXRvcnkgYXJtNjQKKysjCisrCisrYXJtNjRfUFVSR0FUT1JZX1NSQ1MgPQorKworK2Rpc3QgKz0gcHVyZ2F0b3J5L2FyY2gvYXJtNjQvTWFrZWZpbGUgJChhcm02NF9QVVJHQVRPUllfU1JDUykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZXhlYy10b29scy1SZWZpbmUta2R1bXAtZGV2aWNlX3RyZWUtc29ydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZXhlYy10b29scy1SZWZpbmUta2R1bXAtZGV2aWNlX3RyZWUtc29ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTk4ZWI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzL2tleGVjLXRvb2xzLVJlZmluZS1rZHVtcC1kZXZpY2VfdHJlZS1zb3J0LnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK2tleGVjLXRvb2xzOiBSZWZpbmUga2R1bXAgZGV2aWNlX3RyZWUgc29ydAorCitUaGUgY29tbWl0IGIwMmQ3MzViZiB3YXMgdG8gcmVhcnJhbmdlIHRoZSBkZXZpY2UtdHJlZSBlbnRyaWVzLCBhbmQKK2Fzc3VtZWQgdGhhdCB0aGVzZSBlbnRyaWVzIGFyZSBzb3J0ZWQgaW4gdGhlIGFzY2VuZGluZyBvcmRlci4gYnV0CithY2N0dWFsbHkgd2hlbiBJIHdhcyB2YWxpZGF0aW5nIGtleGVjIGFuZCBrZHVtcCwgdGhlIG9yZGVyIG9mCitzZXJpYWwgbm9kZSBzdGlsbCBpcyBjaGFuZ2VkLiBTbyB0aGUgcGF0Y2ggaXMgdG8gc29ydCB0aGVzZSBlbnRyaWVzCitieSB0aGUgZGlyZWN0b3J5IG5hbWUgaW4gYXNjZW5kaW5nIG9yZGVyLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWWFuZyBXZWkgPFdlaS5ZYW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGtleGVjL2FyY2gvcHBjL2ZzMmR0LmMgfCAgIDEzICsrKysrKysrKystLS0KKyBrZXhlYy9mczJkdC5jICAgICAgICAgIHwgICAxMyArKysrKysrKysrLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvcHBjL2ZzMmR0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBrZXhlYy10b29scy0yLjAuMTAub3JpZy9rZXhlYy9hcmNoL3BwYy9mczJkdC5jCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvcHBjL2ZzMmR0LmMKK0BAIC0yOTYsNiArMjk2LDkgQEAgc3RhdGljIGludCBjb21wYXJlZnVuYyhjb25zdCB2b2lkICpkZW50cgorIHsKKyAJY2hhciAqc3RyMSA9ICgqKHN0cnVjdCBkaXJlbnQgKiopZGVudHJ5MSktPmRfbmFtZTsKKyAJY2hhciAqc3RyMiA9ICgqKHN0cnVjdCBkaXJlbnQgKiopZGVudHJ5MiktPmRfbmFtZTsKKysJY2hhciogcHRyMSA9IHN0cmNocihzdHIxLCAnQCcpOworKwljaGFyKiBwdHIyID0gc3RyY2hyKHN0cjIsICdAJyk7CisrCWludCBsZW4xLCBsZW4yOworIAorIAkvKgorIAkgKiBzdHJjbXAgc2NhbnMgZnJvbSBsZWZ0IHRvIHJpZ2h0IGFuZCBmYWlscyB0byBpZGV0aWZ5IGZvciBzb21lCitAQCAtMzAzLDkgKzMwNiwxMyBAQCBzdGF0aWMgaW50IGNvbXBhcmVmdW5jKGNvbnN0IHZvaWQgKmRlbnRyCisgCSAqIFRoZXJlZm9yZSwgd2UgZ2V0IHRoZSB3cm9uZyBzb3J0ZWQgb3JkZXIgbGlrZSBtZW1vcnlAMTAwMDAwMDAgYW5kCisgCSAqIG1lbW9yeUBmMDAwMDAwLgorIAkgKi8KKy0JaWYgKHN0cmNocihzdHIxLCAnQCcpICYmIHN0cmNocihzdHIyLCAnQCcpICYmCistCQkoc3RybGVuKHN0cjEpID4gc3RybGVuKHN0cjIpKSkKKy0JCXJldHVybiAxOworKwlpZiAocHRyMSAmJiBwdHIyKSB7CisrCQlsZW4xID0gcHRyMSAtIHN0cjE7CisrCQlsZW4yID0gcHRyMiAtIHN0cjI7CisrCQlpZiAoIXN0cm5jbXAoc3RyMSwgc3RyMiwgbGVuMSA+bGVuMiA/IGxlbjE6IGxlbjIpICYmCisrCQkJCQkoc3RybGVuKHN0cjEpID4gc3RybGVuKHN0cjIpKSkKKysJCQkJcmV0dXJuIDE7CisrCX0KKyAKKyAJcmV0dXJuIHN0cmNtcChzdHIxLCBzdHIyKTsKKyB9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2V4ZWMteDMyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzL2tleGVjLXgzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmQxOGViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzL2tleGVjLXgzMi5wYXRjaApAQCAtMCwwICsxLDg4IEBACit4ODZfNjQ6IEFkZCBzdXBwb3J0IHRvIGJ1aWxkIGtleGVjLXRvb2xzIHdpdGggeDMyIEFCSQorCitTdW1tYXJ5IG9mIGNoYW5nZXMsCisKK2NvbmZpZ3VyZS5hYzogQWRkIHRlc3QgZm9yIGRldGVjdCB4MzIgQUJJLgorcHVyZ2F0b3J5L2FyY2gveDg2XzY0L01ha2VmaWxlOiBOb3QgdXNlIG1jbW9kZWwgbGFyZ2Ugd2hlbgorCXgzMiBBQkkgaXMgc2V0Lgora2V4ZWMvYXJjaC94ODZfNjQva2V4ZWMtZWxmLXJlbC14ODZfNjQuYzogV2hlbiB4MzIgQUJJIGlzIHNldAorCXVzZSBFTEZDTEFTUzMyIGluc3RlYWQgb2YgRUxGQ0xBU1M2NC4KK2tleGVjL2tleGVjLXN5c2NhbGwuaDogQWRkIGNvcnJlY3Qgc3lzY2FsbCBudW1iZXIgZm9yIHgzMiBBQkkuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IEFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTWFyaWFubyBMb3BleiA8bWFyaWFuby5sb3BlekBsaW51eC5pbnRlbC5jb20+CisKKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5ICsrKysrKysrKworIGtleGVjL2FyY2gveDg2XzY0L2tleGVjLWVsZi1yZWwteDg2XzY0LmMgfCA0ICsrKysKKyBrZXhlYy9rZXhlYy1zeXNjYWxsLmggICAgICAgICAgICAgICAgICAgIHwgNCArKysrCisgcHVyZ2F0b3J5L2FyY2gveDg2XzY0L01ha2VmaWxlICAgICAgICAgICB8IDQgKysrLQorIDQgZmlsZXMgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGtleGVjLXRvb2xzLTIuMC4xMC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGtleGVjLXRvb2xzLTIuMC4xMC9jb25maWd1cmUuYWMKK0BAIC01Niw2ICs1NiwxNSBAQCBjYXNlICR0YXJnZXRfY3B1IGluCisgCQk7OworIAlpYTY0fHg4Nl82NHxhbHBoYXxtNjhrICkKKyAJCUFSQ0g9IiR0YXJnZXRfY3B1IgorKworKwkJZG5sIC0tLVRlc3QgZm9yIHgzMiBBQkkgaW4geDg2XzY0CisrCQlpZiB0ZXN0ICJ4JEFSQ0giID0gInh4ODZfNjQiIDsgdGhlbgorKwkJCUFDX0VHUkVQX0NQUCh4MzJfdGVzdCwKKysJCQlbI2lmIGRlZmluZWQoX194ODZfNjRfXykgJiYgZGVmaW5lZCAoX19JTFAzMl9fKQorKwkJCQl4MzJfdGVzdAorKwkJCSNlbmRpZgorKwkJCV0sIFNVQkFSQ0g9J3gzMicsIFNVQkFSQ0g9JzY0JykKKysJCWZpCisgCQk7OworIAkqICkKKyAJCUFDX01TR19FUlJPUihbdW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlICR0YXJnZXRfY3B1XSkKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC94ODZfNjQva2V4ZWMtZWxmLXJlbC14ODZfNjQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGtleGVjLXRvb2xzLTIuMC4xMC5vcmlnL2tleGVjL2FyY2gveDg2XzY0L2tleGVjLWVsZi1yZWwteDg2XzY0LmMKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC94ODZfNjQva2V4ZWMtZWxmLXJlbC14ODZfNjQuYworQEAgLTgsNyArOCwxMSBAQCBpbnQgbWFjaGluZV92ZXJpZnlfZWxmX3JlbChzdHJ1Y3QgbWVtX2VoCisgCWlmIChlaGRyLT5laV9kYXRhICE9IEVMRkRBVEEyTFNCKSB7CisgCQlyZXR1cm4gMDsKKyAJfQorKyNpZmRlZiBfX0lMUDMyX18KKysJaWYgKGVoZHItPmVpX2NsYXNzICE9IEVMRkNMQVNTMzIpIHsKKysjZWxzZQorIAlpZiAoZWhkci0+ZWlfY2xhc3MgIT0gRUxGQ0xBU1M2NCkgeworKyNlbmRpZgorIAkJcmV0dXJuIDA7CisgCX0KKyAJaWYgKGVoZHItPmVfbWFjaGluZSAhPSBFTV9YODZfNjQpIHsKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMva2V4ZWMtc3lzY2FsbC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ga2V4ZWMtdG9vbHMtMi4wLjEwLm9yaWcva2V4ZWMva2V4ZWMtc3lzY2FsbC5oCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2tleGVjLXN5c2NhbGwuaAorQEAgLTMxLDggKzMxLDEyIEBACisgI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTI2OAorICNlbmRpZgorICNpZmRlZiBfX3g4Nl82NF9fCisrI2lmZGVmIF9fSUxQMzJfXworKyNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQk1MjgKKysjZWxzZQorICNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQkyNDYKKyAjZW5kaWYKKysjZW5kaWYKKyAjaWZkZWYgX19zMzkweF9fCisgI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTI3NworICNlbmRpZgorSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9wdXJnYXRvcnkvYXJjaC94ODZfNjQvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBrZXhlYy10b29scy0yLjAuMTAub3JpZy9wdXJnYXRvcnkvYXJjaC94ODZfNjQvTWFrZWZpbGUKKysrKyBrZXhlYy10b29scy0yLjAuMTAvcHVyZ2F0b3J5L2FyY2gveDg2XzY0L01ha2VmaWxlCitAQCAtMjMsNCArMjMsNiBAQCB4ODZfNjRfUFVSR0FUT1JZX1NSQ1MgKz0gcHVyZ2F0b3J5L2FyY2gvCisgeDg2XzY0X1BVUkdBVE9SWV9TUkNTICs9IHB1cmdhdG9yeS9hcmNoL2kzODYvdmdhLmMKKyB4ODZfNjRfUFVSR0FUT1JZX1NSQ1MgKz0gcHVyZ2F0b3J5L2FyY2gvaTM4Ni9waWMuYworIAorLXg4Nl82NF9QVVJHQVRPUllfRVhUUkFfQ0ZMQUdTID0gLW1jbW9kZWw9bGFyZ2UKKytpZmVxICgkKFNVQkFSQ0gpLDY0KQorKyAgICAgICAgeDg2XzY0X1BVUkdBVE9SWV9FWFRSQV9DRkxBR1MgPSAtbWNtb2RlbD1sYXJnZQorK2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHNfMi4wLjEwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzXzIuMC4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmRiOTgzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzXzIuMC4xMC5iYgpAQCAtMCwwICsxLDIyIEBACityZXF1aXJlIGtleGVjLXRvb2xzLmluYworZXhwb3J0IExERkxBR1MgPSAiLUwke1NUQUdJTkdfTElCRElSfSIKK0VYVFJBX09FQ09ORiA9ICIgLS13aXRoLXpsaWI9eWVzIgorCitTUkNfVVJJICs9ICJmaWxlOi8va2V4ZWMtdG9vbHMtUmVmaW5lLWtkdW1wLWRldmljZV90cmVlLXNvcnQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2tleGVjLWFhcmNoNjQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2tleGVjLXgzMi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMi1wb3dlcnBjLWNoYW5nZS10aGUtbWVtb3J5LXNpemUtbGltaXQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtcHVyZ2F0b3J5LVBhc3Mtci1kaXJlY3RseS10by1saW5rZXIucGF0Y2ggXAorICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNmNiNGQyMmJjZWM3MWI2ZTA3MGFhOGU5ZDk5MGE1ZTYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzMxYmI4M2RlZWY5NTQ3YTI4ZThjZmMxZjA5MTZlNzBmOGU2YjkyYTZiZDJlZjcwNzdlMTJlMzMzODIzOWFmMyIKKworUEFDS0FHRVMgPSsgImtleGVjIGtkdW1wIHZtY29yZS1kbWVzZyIKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKK1JSRUNPTU1FTkRTXyR7UE59ID0gImtleGVjIGtkdW1wIHZtY29yZS1kbWVzZyIKKworRklMRVNfa2V4ZWMgPSAiJHtzYmluZGlyfS9rZXhlYyIKK0ZJTEVTX2tkdW1wID0gIiR7c2JpbmRpcn0va2R1bXAiCitGSUxFU192bWNvcmUtZG1lc2cgPSAiJHtzYmluZGlyfS92bWNvcmUtZG1lc2ciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9kZXBtb2R3cmFwcGVyLWNyb3NzXzEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2RlcG1vZHdyYXBwZXItY3Jvc3NfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhY2IzYTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9kZXBtb2R3cmFwcGVyLWNyb3NzXzEuMC5iYgpAQCAtMCwwICsxLDQ4IEBACitTVU1NQVJZID0gIldyYXBwZXIgc2NyaXB0IGZvciB0aGUgTGludXgga2VybmVsIG1vZHVsZSBkZXBlbmRlbmN5IGluZGV4ZXIiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitTID0gIiR7V09SS0RJUn0iCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisjIFRoZSBrZXJuZWwgYW5kIHRoZSBzdGFnaW5nIGRpciBmb3IgaXQgaXMgbWFjaGluZSBzcGVjaWZpYworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgZm9yIHRoZSBzc3RhdGUgY29kZSB0byBwcm9jZXNzIHRoZSB3cmFwcGVyCitTU1RBVEVfU0NBTl9GSUxFUyArPSAiZGVwbW9kd3JhcHBlciIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworCisJY2F0ID4gJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vZGVwbW9kd3JhcHBlciA8PCBFT0YKKyMhL2Jpbi9zaAorIyBFeHBlY3RlZCB0byBiZSBjYWxsZWQgYXM6IGRlcG1vZHdyYXBwZXIgLWEgS0VSTkVMX1ZFUlNJT04KK2lmIFsgIlwkMSIgIT0gIi1hIiAtbyAiXCQyIiAhPSAiLWIiIF07IHRoZW4KKyAgICBlY2hvICJVc2FnZTogZGVwbW9kd3JhcHBlciAtYSAtYiByb290ZnMgS0VSTkVMX1ZFUlNJT04iID4mMgorICAgIGV4aXQgMQorZmkKK2lmIFsgISAtciAke1BLR0RBVEFfRElSfS9rZXJuZWwtZGVwbW9kL2tlcm5lbC1hYml2ZXJzaW9uIF07IHRoZW4KKyAgICBlY2hvICJVbmFibGUgdG8gcmVhZDogJHtQS0dEQVRBX0RJUn0va2VybmVsLWRlcG1vZC9rZXJuZWwtYWJpdmVyc2lvbiIgPiYyCitlbHNlCisgICAga2VybmVsYWJpPVwkKGNhdCAke1BLR0RBVEFfRElSfS9rZXJuZWwtZGVwbW9kL2tlcm5lbC1hYml2ZXJzaW9uKQorICAgIGlmIFsgIlwka2VybmVsYWJpIiAhPSAiXCQ0IiBdOyB0aGVuCisgICAgICAgIGVjaG8gIkVycm9yOiBLZXJuZWwgdmVyc2lvbiBcJDQgZG9lcyBub3QgbWF0Y2gga2VybmVsLWFiaXZlcnNpb24gKFwka2VybmVsYWJpKSIgPiYyCisgICAgICAgIGV4aXQgMQorICAgIGZpCitmaQorCitpZiBbICEgLXIgJHtQS0dEQVRBX0RJUn0va2VybmVsLWRlcG1vZC9TeXN0ZW0ubWFwLVwkNCBdOyB0aGVuCisgICAgZWNobyAiVW5hYmxlIHRvIHJlYWQ6ICR7UEtHREFUQV9ESVJ9L2tlcm5lbC1kZXBtb2QvU3lzdGVtLm1hcC1cJDQiID4mMgorICAgIGV4ZWMgZW52IGRlcG1vZCAiXCQxIiAiXCQyIiAiXCQzIiAiXCQ0IgorZWxzZQorICAgIGV4ZWMgZW52IGRlcG1vZCAiXCQxIiAiXCQyIiAiXCQzIiAtRiAiJHtQS0dEQVRBX0RJUn0va2VybmVsLWRlcG1vZC9TeXN0ZW0ubWFwLVwkNCIgIlwkNCIKK2ZpCitFT0YKKwljaG1vZCAreCAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9kZXBtb2R3cmFwcGVyCit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiZGVwbW9kd3JhcHBlcl9zeXNyb290X3ByZXByb2Nlc3MiCisKK2RlcG1vZHdyYXBwZXJfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKwlzeXNyb290X3N0YWdlX2RpciAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfSAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kLW5hdGl2ZV9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kLW5hdGl2ZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBlMjc0ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QtbmF0aXZlX2dpdC5iYgpAQCAtMCwwICsxLDE4IEBACisjIENvcHlyaWdodCAoQykgMjAxMiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCBmb3IgdGhlIHRlcm1zKQorCityZXF1aXJlIGttb2QuaW5jCisKK0RFUEVORFMgKz0gInpsaWItbmF0aXZlIgorCitpbmhlcml0IG5hdGl2ZQorCitTUkNfVVJJICs9ICJmaWxlOi8vQ2hhbmdlLXRvLWNhbGxpbmctYnN3YXBfLWluc3RlYWQtb2YtaHRvYmUtYW5kLWJlLXRvaC5wYXRjaCBcCisgICAgICAgICAgICIKKworZG9faW5zdGFsbF9hcHBlbmQgKCl7CisJZm9yIHRvb2wgaW4gZGVwbW9kIGluc21vZCBsc21vZCBtb2RpbmZvIG1vZHByb2JlIHJtbW9kCisJZG8KKwkJbG4gLXMga21vZCAke0R9JHtiaW5kaXJ9LyR0b29sCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWFhNjdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC5pbmMKQEAgLTAsMCArMSw0MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTIgS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQgZm9yIHRoZSB0ZXJtcykKKworU1VNTUFSWSA9ICJUb29scyBmb3IgbWFuYWdpbmcgTGludXgga2VybmVsIG1vZHVsZXMiCitERVNDUklQVElPTiA9ICJrbW9kIGlzIGEgc2V0IG9mIHRvb2xzIHRvIGhhbmRsZSBjb21tb24gdGFza3Mgd2l0aCBMaW51eCBrZXJuZWwgbW9kdWxlcyBsaWtlIFwKKyAgICAgICAgICAgICAgIGluc2VydCwgcmVtb3ZlLCBsaXN0LCBjaGVjayBwcm9wZXJ0aWVzLCByZXNvbHZlIGRlcGVuZGVuY2llcyBhbmQgYWxpYXNlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vcGFja2FnZXMucHJvZnVzaW9uLm1vYmkva21vZC8iCitMSUNFTlNFID0gIkdQTC0yLjArICYgTEdQTC0yLjErIgorTElDRU5TRV9saWJrbW9kID0gIkxHUEwtMi4xKyIKK1NFQ1RJT04gPSAiYmFzZSIKKworREVQRU5EUyArPSAicGtnY29uZmlnLW5hdGl2ZSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlia21vZC9DT1BZSU5HO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCisgICAgICAgICAgICAgICAgICAgIgoraW5oZXJpdCBhdXRvdG9vbHMgZ3RrLWRvYworCitTUkNSRVYgPSAiMGQ4MzM3MTVlYWE2NTYzNmRkYTI3MDViODkzNTlhMWUwMTU0ZGM1OCIKKyMgTG9va291dCBmb3IgUFYgYnVtcCB0b28gd2hlbiBTUkNSRVYgaXMgY2hhbmdlZAorUFYgPSAiMjErZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS91dGlscy9rZXJuZWwva21vZC9rbW9kLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9kZXBtb2Qtc2VhcmNoLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vYXZvaWRfcGFyYWxsZWxfdGVzdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LU9fQ0xPRVhFQy5wYXRjaCBcCisgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitFWFRSQV9BVVRPUkVDT05GICs9ICItLWluc3RhbGwgLS1zeW1saW5rIgorRVhUUkFfT0VDT05GICs9IiAtLWVuYWJsZS10b29scyAtLWRpc2FibGUtbWFucGFnZXMgLS13aXRoLXpsaWIiCisKK1BBQ0tBR0VDT05GSUdbZGVidWddID0gIi0tZW5hYmxlLWRlYnVnLC0tZGlzYWJsZS1kZWJ1ZyIKK1BBQ0tBR0VDT05GSUdbbG9nZ2luZ10gPSAiIC0tZW5hYmxlLWxvZ2dpbmcsLS1kaXNhYmxlLWxvZ2dpbmciCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgICAgICAgZ3RrZG9jaXplIC0tZG9jZGlyICR7U30vbGlia21vZC9kb2NzIHx8IHRvdWNoICR7U30vbGlia21vZC9kb2NzL2d0ay1kb2MubWFrZQorfQorCitkb19jb25maWd1cmVfYXBwZW5kICgpIHsKKwlzZWQgLWkgJ3MjfWxpYnRvb2wjfSR7VEFSR0VUX1NZU30tbGlidG9vbCMnICR7Qn0vZG9sdGxpYnRvb2wKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvQ2hhbmdlLXRvLWNhbGxpbmctYnN3YXBfLWluc3RlYWQtb2YtaHRvYmUtYW5kLWJlLXRvaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvQ2hhbmdlLXRvLWNhbGxpbmctYnN3YXBfLWluc3RlYWQtb2YtaHRvYmUtYW5kLWJlLXRvaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzIyMTgzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9DaGFuZ2UtdG8tY2FsbGluZy1ic3dhcF8taW5zdGVhZC1vZi1odG9iZS1hbmQtYmUtdG9oLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1N1YmplY3Q6IENoYW5nZSB0byBjYWxsaW5nIGJzd2FwXyogaW5zdGVhZCBvZiBodG9iZSogYW5kIGJlKnRvaAorCitXZSBjYW4ndCB1c2UgaHRvYmUqIGFuZCBiZSp0b2ggZnVuY3Rpb25zIGJlY2F1c2UgdGhleSBhcmUgbm90CithdmFpbGFibGUgb24gb2xkZXIgdmVyc2lvbnMgb2YgZ2xpYmMsIEZvciBleGFtcGxlLCBzaGlwcGVkIG9uIENlbnRvcyA1LjUuCisKK0NoYW5nZSB0byBkaXJlY3RseSBjYWxsaW5nIGJzd2FwXyogYXMgZGVmaW5lZCBpbitieXRlc3dhcC5oLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogVGluZyBMaXUgPGIyODQ5NUBmcmVlc2NhbGUuY29tPgorU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgbGlia21vZC9saWJrbW9kLXNpZ25hdHVyZS5jIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWJrbW9kL2xpYmttb2Qtc2lnbmF0dXJlLmMgYi9saWJrbW9kL2xpYmttb2Qtc2lnbmF0dXJlLmMKK2luZGV4IDZmYzA2ZmMuLjkxMjE4NWEgMTAwNjQ0CistLS0gYS9saWJrbW9kL2xpYmttb2Qtc2lnbmF0dXJlLmMKKysrKyBiL2xpYmttb2QvbGlia21vZC1zaWduYXR1cmUuYworQEAgLTE4LDYgKzE4LDcgQEAKKyAgKi8KKyAKKyAjaW5jbHVkZSA8ZW5kaWFuLmg+CisrI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CisgI2luY2x1ZGUgPGludHR5cGVzLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorQEAgLTEyNyw3ICsxMjgsNyBAQCBib29sIGttb2RfbW9kdWxlX3NpZ25hdHVyZV9pbmZvKGNvbnN0IHN0cnVjdCBrbW9kX2ZpbGUgKmZpbGUsIHN0cnVjdCBrbW9kX3NpZ25hdAorIAkJCW1vZHNpZy0+aGFzaCA+PSBQS0VZX0hBU0hfX0xBU1QgfHwKKyAJCQltb2RzaWctPmlkX3R5cGUgPj0gUEtFWV9JRF9UWVBFX19MQVNUKQorIAkJcmV0dXJuIGZhbHNlOworLQlzaWdfbGVuID0gYmUzMnRvaChnZXRfdW5hbGlnbmVkKCZtb2RzaWctPnNpZ19sZW4pKTsKKysJc2lnX2xlbiA9IGJzd2FwXzMyKGdldF91bmFsaWduZWQoJm1vZHNpZy0+c2lnX2xlbikpOworIAlpZiAoc2lnX2xlbiA9PSAwIHx8CisgCSAgICBzaXplIDwgKGludDY0X3QpKG1vZHNpZy0+c2lnbmVyX2xlbiArIG1vZHNpZy0+a2V5X2lkX2xlbiArIHNpZ19sZW4pKQorIAkJcmV0dXJuIGZhbHNlOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL2F2b2lkX3BhcmFsbGVsX3Rlc3RzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9hdm9pZF9wYXJhbGxlbF90ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWFmY2I5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9hdm9pZF9wYXJhbGxlbF90ZXN0cy5wYXRjaApAQCAtMCwwICsxLDI5IEBACitBdm9pZCBwYXJhbGxlbC10ZXN0cyBhcyBpdCByZW1vdmUKK2J1aWxkdGVzdC1URVNUUyBhbmQgcnVudGVzdC1URVNUUyB0YXJnZXRzIHJlcXVpcmVkIGJ5IHB0ZXN0LgorSW4gYXV0b21ha2UgMS4xMy40IHBhcmFsbGVsLXRlc3RzIGlzIGFzc3VtZWQgYnkgZGVmYXVscy4KK0luIG9yZGVyIHRvIGhhdmUgYnVpbGR0ZXN0LVRFU1RTIGFuZCBydW50ZXN0LVRFU1RTIHRhcmdldHMKK3NlcmlhbC10ZXN0cyBpcyBub3cgcmVxdWlyZWQKKworU2lnbmVkLW9mZi1ieTogVHVkb3IgRmxvcmVhIDx0dWRvci5mbG9yZWFAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgKGRpc2FibGUgZmVhdHVyZSBpbmNvbXBhdGlibGUgd2l0aCBwdGVzdCkgCisKKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZWIwZjlkMS4uYTUzOTk2OCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTQsNyArMTQsNyBAQCBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyBBQ19TWVNfTEFSR0VGSUxFCisgQUNfUFJFRklYX0RFRkFVTFQoWy91c3JdKQorIEFNX01BSU5UQUlORVJfTU9ERShbZW5hYmxlXSkKKy1BTV9JTklUX0FVVE9NQUtFKFtjaGVjay1uZXdzIGZvcmVpZ24gMS4xMSBzaWxlbnQtcnVsZXMgdGFyLXBheCBuby1kaXN0LWd6aXAgZGlzdC14eiBzdWJkaXItb2JqZWN0cyBjb2xvci10ZXN0cyBwYXJhbGxlbC10ZXN0c10pCisrQU1fSU5JVF9BVVRPTUFLRShbY2hlY2stbmV3cyBmb3JlaWduIDEuMTEgc2lsZW50LXJ1bGVzIHRhci1wYXggbm8tZGlzdC1nemlwIGRpc3QteHogc3ViZGlyLW9iamVjdHMgY29sb3ItdGVzdHMgc2VyaWFsLXRlc3RzXSkKKyBBTV9TSUxFTlRfUlVMRVMoW3llc10pCisgTFRfSU5JVChbZGlzYWJsZS1zdGF0aWMgcGljLW9ubHldKQorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL2RlcG1vZC1zZWFyY2guY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvZGVwbW9kLXNlYXJjaC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyN2MwYmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL2RlcG1vZC1zZWFyY2guY29uZgpAQCAtMCwwICsxLDYgQEAKKyMKKyMgL2V0Yy9kZXBtb2QuZC9kZXBtb2QuY29uZgorIworCitzZWFyY2ggdXBkYXRlcyBleHRyYW1vZHVsZXMgYnVpbHQtaW4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9maXgtT19DTE9FWEVDLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9maXgtT19DTE9FWEVDLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNjFkNjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL2ZpeC1PX0NMT0VYRUMucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSBiZDQzMzY3ZWVlODY4MDU5NzcwMTg4ZmQ5ZTlkYjM4NTIwZGM2ZmZmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDIyIEphbiAyMDE0IDAxOjA2OjQwIC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGxpYmttb2QvbGlia21vZC1pbnRlcm5hbC5oOiBjaGVjayB3aGV0aGVyIE9fQ0xPRVhFQyBpcworIGRlZmluZWQgb3Igbm90CisKK09fQ0xPRVhFQyBpcyBpbnRyb2R1Y2VkIGZyb20gTGludXggMi42LjIzLCBzbyBvbGQga2VybmVsIGRvZXNuJ3QgaGF2ZQoraXQsIHdlIG5lZWQgY2hlY2sgYmVmb3JlIHVzZS4KKworVGhpcyBwYXRjaCBpcyBtdWNoIG1vcmUgbGlrZSBhIHdvcmthcm91bmQsIHNpbmNlIGl0IG1heSBuZWVkIGZjbnRsKCkgdXNlCitGRF9DTE9FWEVDIHRvIHJlcGxhY2UuCisKK1RoaXMgcHJvYmxlbSB3YXMgcmVwb3J0ZWQgYnkgIlRpbmcgTGl1IDxiMjg0OTVAZnJlZXNjYWxlLmNvbT4iCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJrbW9kL2xpYmttb2QtaW50ZXJuYWwuaCB8ICAgIDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYmttb2QvbGlia21vZC1pbnRlcm5hbC5oIGIvbGlia21vZC9saWJrbW9kLWludGVybmFsLmgKK2luZGV4IDAxODAxMjQuLjEwMGI0MGYgMTAwNjQ0CistLS0gYS9saWJrbW9kL2xpYmttb2QtaW50ZXJuYWwuaAorKysrIGIvbGlia21vZC9saWJrbW9kLWludGVybmFsLmgKK0BAIC05LDYgKzksMTAgQEAKKyAjaW5jbHVkZSAibWFjcm8uaCIKKyAjaW5jbHVkZSAibGlia21vZC5oIgorIAorKyNpZm5kZWYgT19DTE9FWEVDCisrI2RlZmluZSBPX0NMT0VYRUMgMAorKyNlbmRpZgorKworIHN0YXRpYyBfYWx3YXlzX2lubGluZV8gX3ByaW50Zl9mb3JtYXRfKDIsIDMpIHZvaWQKKyAJa21vZF9sb2dfbnVsbChzdHJ1Y3Qga21vZF9jdHggKmN0eCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pIHt9CisgCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvcHRlc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL3B0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMWRiY2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL3B0ZXN0LnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK0FkZCAnaW5zdGFsbC1wdGVzdCcgcnVsZS4KKworU2lnbmVkLW9mZi1ieTogVHVkb3IgRmxvcmVhIDx0dWRvci5mbG9yZWFAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtcnVOIGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQorLS0tIGEvTWFrZWZpbGUuYW0JMjAxMy0wNy0xMiAxNzoxMTowNS4yNzgzMzE1NTcgKzAyMDAKKysrKyBiL01ha2VmaWxlLmFtCTIwMTMtMDctMTIgMTc6MTQ6MjcuMDMzNzg4MDE2ICswMjAwCitAQCAtMjA0LDYgKzIwNCwxNiBAQAorIAorIGRpc3RjbGVhbi1sb2NhbDogJChESVNUQ0xFQU5fTE9DQUxfSE9PS1MpCisgCisraW5zdGFsbC1wdGVzdDoKKysJQCQoTUtESVJfUCkgJChERVNURElSKS90ZXN0c3VpdGUKKysJQGZvciBmaWxlIGluICQoVEVTVFNVSVRFKTsgZG8gXAorKwkJaW5zdGFsbCAkJGZpbGUgJChERVNURElSKS90ZXN0c3VpdGU7IFwKKysJZG9uZTsKKysJQHNlZCAtZSAncy9eTWFrZWZpbGUvX01ha2VmaWxlLycgPCBNYWtlZmlsZSA+ICQoREVTVERJUikvTWFrZWZpbGUKKysJQCQoTUtESVJfUCkgJChERVNURElSKS90b29scworKwlAY3AgJChub2luc3RfU0NSSVBUUykgJChub2luc3RfUFJPR1JBTVMpICQoREVTVERJUikvdG9vbHMKKysJQGNwIC1yIHRlc3RzdWl0ZS9yb290ZnMgdGVzdHN1aXRlLy5saWJzICQoREVTVERJUikvdGVzdHN1aXRlCisrCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIGN1c3RvbSByZWxlYXNlIGhlbHBlcnMKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41OThkZDJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9ydW4tcHRlc3QKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKK3RvdWNoIHRlc3RzdWl0ZS9zdGFtcC1yb290ZnMKK3RhciB4ZiB0ZXN0bW9kdWxlLnRhcgorbWFrZSAtayBydW50ZXN0LVRFU1RTIDI+L2Rldi9udWxsfCBncmVwIC1lIF5QQVNTIC1lIF5GQUlMCitmaW5kIHRlc3RzdWl0ZSAtbmFtZSAqLmtvIC1leGVjIHJtIC1mIHt9IFw7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2RfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNGQ4NWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kX2dpdC5iYgpAQCAtMCwwICsxLDYzIEBACisjIENvcHlyaWdodCAoQykgMjAxMiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCBmb3IgdGhlIHRlcm1zKQorCityZXF1aXJlIGttb2QuaW5jCisKK0RFUEVORFMgKz0gInpsaWIiCitQUk9WSURFUyArPSAibW9kdWxlLWluaXQtdG9vbHMtaW5zbW9kLXN0YXRpYyBtb2R1bGUtaW5pdC10b29scy1kZXBtb2QgbW9kdWxlLWluaXQtdG9vbHMiCitSUFJPVklERVNfJHtQTn0gKz0gIm1vZHVsZS1pbml0LXRvb2xzLWluc21vZC1zdGF0aWMgbW9kdWxlLWluaXQtdG9vbHMtZGVwbW9kIG1vZHVsZS1pbml0LXRvb2xzIgorUkNPTkZMSUNUU18ke1BOfSArPSAibW9kdWxlLWluaXQtdG9vbHMtaW5zbW9kLXN0YXRpYyBtb2R1bGUtaW5pdC10b29scy1kZXBtb2QgbW9kdWxlLWluaXQtdG9vbHMiCitSUkVQTEFDRVNfJHtQTn0gKz0gIm1vZHVsZS1pbml0LXRvb2xzLWluc21vZC1zdGF0aWMgbW9kdWxlLWluaXQtdG9vbHMtZGVwbW9kIG1vZHVsZS1pbml0LXRvb2xzIgorCisjIHRvIGZvcmNlIHVzZXIgdG8gcmVtb3ZlIG9sZCBtb2R1bGUtaW5pdC10b29scyBhbmQgcmVwbGFjZSB0aGVtIHdpdGgga21vZCB2YXJpYW50cworUkNPTkZMSUNUU19saWJrbW9kMiArPSAibW9kdWxlLWluaXQtdG9vbHMtaW5zbW9kLXN0YXRpYyBtb2R1bGUtaW5pdC10b29scy1kZXBtb2QgbW9kdWxlLWluaXQtdG9vbHMiCisKKyMgYXV0b3Rvb2xzIHNldCBwcmVmaXggdG8gL3VzciwgaG93ZXZlciB3ZSB3YW50IHRoZW0gaW4gL2JpbiBhbmQgL3NiaW4KK2JpbmRpciA9ICIke2Jhc2VfYmluZGlyfSIKK3NiaW5kaXIgPSAiJHtiYXNlX3NiaW5kaXJ9IgorIyBsaWJkaXIgPSAiJHtiYXNlX2xpYmRpcn0iCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICAgICAgaW5zdGFsbCAtZG03NTUgJHtEfSR7YmFzZV9iaW5kaXJ9CisgICAgICAgIGluc3RhbGwgLWRtNzU1ICR7RH0ke2Jhc2Vfc2JpbmRpcn0KKyAgICAgICAgIyBhZGQgc3ltbGlua3MgdG8ga21vZAorICAgICAgICBsbiAtcyAuLiR7YmFzZV9iaW5kaXJ9L2ttb2QgJHtEfSR7YmFzZV9iaW5kaXJ9L2xzbW9kCisgICAgICAgIGZvciB0b29sIGluIGluc21vZCBybW1vZCBkZXBtb2QgbW9kaW5mbyBtb2Rwcm9iZTsgZG8KKyAgICAgICAgICAgICAgICBsbiAtcyAuLiR7YmFzZV9iaW5kaXJ9L2ttb2QgJHtEfSR7YmFzZV9zYmluZGlyfS8ke3Rvb2x9CisgICAgICAgIGRvbmUKKyAgICAgICAgIyBjb25maWd1cmF0aW9uIGRpcmVjdG9yaWVzCisgICAgICAgIGluc3RhbGwgLWRtNzU1ICR7RH0ke2Jhc2VfbGliZGlyfS9kZXBtb2QuZAorICAgICAgICBpbnN0YWxsIC1kbTc1NSAke0R9JHtiYXNlX2xpYmRpcn0vbW9kcHJvYmUuZAorICAgICAgICBpbnN0YWxsIC1kbTc1NSAke0R9JHtzeXNjb25mZGlyfS9kZXBtb2QuZAorICAgICAgICBpbnN0YWxsIC1kbTc1NSAke0R9JHtzeXNjb25mZGlyfS9tb2Rwcm9iZS5kCisKKyAgICAgICAgIyBpbnN0YWxsIGRlcG1vZC5kIGZpbGUgZm9yIHNlYXJjaC8gZGlyCisgICAgICAgIGluc3RhbGwgLURtNjQ0ICIke1dPUktESVJ9L2RlcG1vZC1zZWFyY2guY29uZiIgIiR7RH0ke2Jhc2VfbGliZGlyfS9kZXBtb2QuZC9zZWFyY2guY29uZiIKK30KKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgICAgICAgICAgc2VkIC1pICdzL2FjX3B3ZD0vI2FjX3B3ZD0vJyBjb25maWcuc3RhdHVzIDsgc2VkIC1pICIvI2FjX3B3ZD0vYVxhY19wd2Q9Jy4nIiBjb25maWcuc3RhdHVzCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICI2MCIKKworQUxURVJOQVRJVkVfa21vZCA9ICJpbnNtb2QgbW9kcHJvYmUgcm1tb2QgbW9kaW5mbyBiaW4tbHNtb2QgbHNtb2QgZGVwbW9kIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaW5zbW9kXSA9ICIke2Jhc2Vfc2JpbmRpcn0vaW5zbW9kIgorQUxURVJOQVRJVkVfTElOS19OQU1FW21vZHByb2JlXSA9ICIke2Jhc2Vfc2JpbmRpcn0vbW9kcHJvYmUiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcm1tb2RdID0gIiR7YmFzZV9zYmluZGlyfS9ybW1vZCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVttb2RpbmZvXSA9ICIke2Jhc2Vfc2JpbmRpcn0vbW9kaW5mbyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtiaW4tbHNtb2RdID0gIiR7YmFzZV9iaW5kaXJ9L2xzbW9kIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbHNtb2RdID0gIiR7YmFzZV9zYmluZGlyfS9sc21vZCIKK0FMVEVSTkFUSVZFX1RBUkdFVFtsc21vZF0gPSAiJHtiYXNlX2JpbmRpcn0vbHNtb2QuJHtCUE59IgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZGVwbW9kXSA9ICIke2Jhc2Vfc2JpbmRpcn0vZGVwbW9kIgorCitQQUNLQUdFUyA9KyAibGlia21vZCAke1BOfS1iYXNoLWNvbXBsZXRpb24iCisKK0ZJTEVTX2xpYmttb2QgPSAiJHtiYXNlX2xpYmRpcn0vbGlia21vZCoke1NPTElCU30gJHtsaWJkaXJ9L2xpYmttb2QqJHtTT0xJQlN9IgorRklMRVNfJHtQTn0gKz0gIiR7YmFzZV9saWJkaXJ9L2RlcG1vZC5kICR7YmFzZV9saWJkaXJ9L21vZHByb2JlLmQiCitGSUxFU18ke1BOfS1iYXNoLWNvbXBsZXRpb24gPSAiJHtkYXRhZGlyfS9iYXNoLWNvbXBsZXRpb24iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLTAuNS8wMDAxLVJlY3RpZnktdGhlLWZ1bmN0aW9uLXNpZ25hdHVyZXMtdG8tZml4LXByb3RvdHlwZS1taXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLTAuNS8wMDAxLVJlY3RpZnktdGhlLWZ1bmN0aW9uLXNpZ25hdHVyZXMtdG8tZml4LXByb3RvdHlwZS1taXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI0ODEzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sYXRlbmN5dG9wL2xhdGVuY3l0b3AtMC41LzAwMDEtUmVjdGlmeS10aGUtZnVuY3Rpb24tc2lnbmF0dXJlcy10by1maXgtcHJvdG90eXBlLW1pcy5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tIGRiMTEyNzM5ZGM0ZjYwOGE5NjhiODEwNGIzODI5NTVkYzNkOTZjYTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCA3IFNlcCAyMDE1IDA3OjQwOjEwICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIFJlY3RpZnkgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgdG8gZml4IHByb3RvdHlwZSBtaXNtYXRjaGVzCisKK2NsYW5nIGlzIGxlc3MgZm9yZ2l2aW5nIHdoZW4gaXQgY29tZXMgdG8gY29kaW5nIHN0YW5kYXJkcywgY29ycmVjdCB0aGUKK2Z1bmN0aW9uIHNpZ25hdHVyZXMgdG8gcmVmbGVjdCB0aGUgZnVuY3Rpb24gbG9naWMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBmc3luYy5jICAgICAgfCA3ICsrKystLS0KKyBsYXRlbmN5dG9wLmggfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9mc3luYy5jIGIvZnN5bmMuYworaW5kZXggODJkZmYwZS4uNWNlZmJhOSAxMDA2NDQKKy0tLSBhL2ZzeW5jLmMKKysrKyBiL2ZzeW5jLmMKK0BAIC01MSw3ICs1MSw3IEBAIHN0cnVjdCBmc3luY19maWxlcyB7Cisgc3RhdGljIEdMaXN0ICpmc3luY19kYXRhOworIAorIAorLXN0YXRpYyBjaGFpbl9maWxlKHN0cnVjdCBmc3luY19wcm9jZXNzICpwcm9jLCBjaGFyICpmaWxlbmFtZSkKKytzdGF0aWMgdm9pZCBjaGFpbl9maWxlKHN0cnVjdCBmc3luY19wcm9jZXNzICpwcm9jLCBjaGFyICpmaWxlbmFtZSkKKyB7CisgCXN0cnVjdCBmc3luY19maWxlcyAqZmlsZTsKKyAJR0xpc3QgKml0ZW07CitAQCAtNzUsNyArNzUsNyBAQCBzdGF0aWMgY2hhaW5fZmlsZShzdHJ1Y3QgZnN5bmNfcHJvY2VzcyAqcHJvYywgY2hhciAqZmlsZW5hbWUpCisgCXByb2MtPmZpbGVzID0gZ19saXN0X2FwcGVuZChwcm9jLT5maWxlcywgZmlsZSk7CisgfQorIAorLXN0YXRpYyByZXBvcnRfZmlsZShjaGFyICpwcm9jZXNzLCBjaGFyICpmaWxlKQorK3N0YXRpYyB2b2lkIHJlcG9ydF9maWxlKGNoYXIgKnByb2Nlc3MsIGNoYXIgKmZpbGUpCisgeworIAlzdHJ1Y3QgZnN5bmNfcHJvY2VzcyAqcHJvYzsKKyAJR0xpc3QgKml0ZW07CitAQCAtMTU3LDkgKzE1NywxMCBAQCBpbnQgZW5hYmxlX2ZzeW5jX3RyYWNlcih2b2lkKQorIAl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2N1cnJlbnRfdHJhY2VyIiwgImZzeW5jIik7CQorIAl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2l0ZXJfY3RybCIsICJmdHJhY2VfcHJpbnRrIik7CQorIAl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfb24iLCAiMSIpOworKwlyZXR1cm4gcmV0OworIH0KKyAKKy1pbnQgZGlzYWJsZV9mc3luY190cmFjZXIodm9pZCkKKyt2b2lkIGRpc2FibGVfZnN5bmNfdHJhY2VyKHZvaWQpCisgeworIAl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfb24iLCAiMCIpOworIH0KK2RpZmYgLS1naXQgYS9sYXRlbmN5dG9wLmggYi9sYXRlbmN5dG9wLmgKK2luZGV4IDUzOTRkNzMuLjlkMTA3YTggMTAwNjQ0CistLS0gYS9sYXRlbmN5dG9wLmgKKysrKyBiL2xhdGVuY3l0b3AuaAorQEAgLTU0LDUgKzU0LDUgQEAgZXh0ZXJuIGNoYXIgKnRyYW5zbGF0ZShjaGFyICpsaW5lKTsKKyBleHRlcm4gdm9pZCBpbml0X3RyYW5zbGF0aW9ucyhjaGFyICpmaWxlbmFtZSk7CisgZXh0ZXJuIGludCBmc3luY19kaXNwbGF5KGludCBkdXJhdGlvbik7CisgZXh0ZXJuIGludCBlbmFibGVfZnN5bmNfdHJhY2VyKHZvaWQpOworLWV4dGVybiBpbnQgZGlzYWJsZV9mc3luY190cmFjZXIodm9pZCk7CisrZXh0ZXJuIHZvaWQgZGlzYWJsZV9mc3luY190cmFjZXIodm9pZCk7CisgZXh0ZXJuIHZvaWQgdXBkYXRlX2xpc3Qodm9pZCk7CistLSAKKzIuNS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sYXRlbmN5dG9wL2xhdGVuY3l0b3AtMC41L2xhdGVuY3l0b3AtZnN5bmMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLTAuNS9sYXRlbmN5dG9wLWZzeW5jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NDhjY2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLTAuNS9sYXRlbmN5dG9wLWZzeW5jLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK2xpbnV4OiBzeXNmczogdXNlIHRyYWNpbmdfb24gYXMgdHJhY2luZ19lbmFibGVkIGlzIGRlcHJlY2F0ZWQKKwordHJhY2luZ19lbmFibGVkIHVzZSBpbiB0aGUga2VybmVsIGlzIGJlaW5nIGRlcHJlY2F0ZWQgYXMgcGVyIGNvbW1pdAorNjc1MmFiNGE5YzMwIFt0cmFjaW5nOiBEZXByZWNhdGUgdHJhY2luZ19lbmFibGVkIGZvciB0cmFjaW5nX29uXSBpbgordGhlIGxpbnV4IG1haW5saW5lIGtlcm5lbC4gdHJhY2luZ19lbmFibGVkIHVzZSB3aWxsIGdlbmVyYXRlIGEgd2FybmluZworYW5kIG1heSBubyBsb25nZXIgZnVuY3Rpb24gYXMgZXhwZWN0ZWQsIHRoZXJlZm9yZSBtb3ZlIHRvIHVzZSB0cmFjaW5nX29uLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRGVubmlzIEhhbGwgPGRlbm5pcy5oYWxsQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBsYXRlbmN5dG9wLTAuNS9mc3luYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGF0ZW5jeXRvcC0wLjUub3JpZy9mc3luYy5jCTIwMTItMDgtMDMgMTA6NDU6NDkuMDAwMDAwMDAwIC0wNDAwCisrKysgbGF0ZW5jeXRvcC0wLjUvZnN5bmMuYwkyMDEyLTA4LTAzIDEwOjQ4OjM5LjAwMDAwMDAwMCAtMDQwMAorQEAgLTE0OSwxOSArMTQ5LDE5IEBACisgICogY2QgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZworICAqIGVjaG8gZnN5bmMgPiBjdXJyZW50X3RyYWNlcgorICAqIGVjaG8gZnRyYWNlX3ByaW50ayA+IGl0ZXJfY3RybCAKKy0gKiBlY2hvIDEgPiB0cmFjaW5nX2VuYWJsZWQKKysgKiBlY2hvIDEgPiB0cmFjaW5nX29uCisgICovCisgCXJldCA9IHN5c3RlbSgiL2Jpbi9tb3VudCAtdCBkZWJ1Z2ZzIG5vbmUgL3N5cy9rZXJuZWwvZGVidWcvIik7CisgCWlmICghcmV0KSAKKyAJCXJldHVybiAtMTsKKyAJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9jdXJyZW50X3RyYWNlciIsICJmc3luYyIpOwkKKyAJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9pdGVyX2N0cmwiLCAiZnRyYWNlX3ByaW50ayIpOwkKKy0Jd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjaW5nX2VuYWJsZWQiLCAiMSIpOworKwl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfb24iLCAiMSIpOworIH0KKyAKKyBpbnQgZGlzYWJsZV9mc3luY190cmFjZXIodm9pZCkKKyB7CistCXdyaXRlX3RvX2ZpbGUoIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2luZ19lbmFibGVkIiwgIjAiKTsKKysJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjaW5nX29uIiwgIjAiKTsKKyB9CisgCisgCitAQCAtMzM5LDggKzMzOSw4IEBACisgCQlpZiAoY3VyZHVyYXRpb24gPiA1KQorIAkJCWN1cmR1cmF0aW9uID0gNTsKKyAJCS8qIGNsZWFyIHRoZSBmdHJhY2UgYnVmZmVyICovCistCQl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfZW5hYmxlZCIsICIwIik7CistCQl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfZW5hYmxlZCIsICIxIik7CisrCQl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfb24iLCAiMCIpOworKwkJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjaW5nX29uIiwgIjEiKTsKKyAJCWtleSA9IHNlbGVjdCgxLCAmcmZkcywgTlVMTCwgTlVMTCwgJmVuZCk7CisgCQlwYXJzZV9mdHJhY2UoKTsKKyAJCXByaW50X2dsb2JhbF9saXN0KCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLTAuNS9sYXRlbmN5dG9wLW1ha2VmaWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC0wLjUvbGF0ZW5jeXRvcC1tYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2YyMTdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC0wLjUvbGF0ZW5jeXRvcC1tYWtlZmlsZS5wYXRjaApAQCAtMCwwICsxLDM5IEBACitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUub3JpZyBiL01ha2VmaWxlCitpbmRleCAxNmEyMzY5Li5mYTc5N2EyIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUub3JpZworKysrIGIvTWFrZWZpbGUKK0BAIC0xLDEwICsxLDExIEBACistIyBGSVhNRTogVXNlIGF1dG9jb25mID8KKy1IQVNfR1RLX0dVSSA9IDEKKysjIFVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKysjIFNpZ25lZC1vZmYtYnk6IEphY2sgTWl0Y2hlbGwgPGphY2subWl0Y2hlbGxAZGJicm9hZGNhc3QuY28udWs+CisgCisgREVTVERJUiA9CisgU0JJTkRJUiA9IC91c3Ivc2JpbgorIFhDRkxBR1MgPSAtVyAgLWcgYHBrZy1jb25maWcgLS1jZmxhZ3MgZ2xpYi0yLjBgIC1EX0ZPUlRJRllfU09VUkNFPTIgLVduby1zaWduLWNvbXBhcmUKKy1MREYgPSAtV2wsLS1hcy1uZWVkZWQgYHBrZy1jb25maWcgLS1saWJzIGdsaWItMi4wYCAgIC1sbmN1cnNlc3cgCisrTERGID0gLVdsLC0tYXMtbmVlZGVkIGBwa2ctY29uZmlnIC0tbGlicyBnbGliLTIuMGAgICAtbG5jdXJzZXMKKytDQyA/PSBnY2MKKyAKKyBPQkpTPSBsYXRlbmN5dG9wLm8gdGV4dF9kaXNwbGF5Lm8gdHJhbnNsYXRlLm8gZnN5bmMubworIAorQEAgLTI2LDE2ICsyNywxNyBAQCBlbmRpZgorIAorICMgV2Ugd3JpdGUgZXhwbGljaXR5IHRoaXMgImltcGxpY2l0IHJ1bGUiCisgJS5vIDogJS5jCistCWdjYyAtYyAkKENGTEFHUykgJChYQ0ZMQUdTKSAkPCAtbyAkQAorKwkkKENDKSAtYyAkKENGTEFHUykgJChYQ0ZMQUdTKSAkPCAtbyAkQAorIAorIGxhdGVuY3l0b3A6ICAkKE9CSlMpIGxhdGVuY3l0b3AuaCBNYWtlZmlsZQorLQlnY2MgJChDRkxBR1MpICQoT0JKUykgJChMREYpIC1vIGxhdGVuY3l0b3AgCisrCSQoQ0MpICQoQ0ZMQUdTKSAkKE9CSlMpICQoTERGKSAtbyBsYXRlbmN5dG9wCisgCisgY2xlYW46CisgCXJtIC1mICp+IGxhdGVuY3l0b3AgREVBREpPRSAqLm8KKyAKKyBpbnN0YWxsOiBsYXRlbmN5dG9wCisgCW1rZGlyIC1wICQoREVTVERJUikvdXNyL3NoYXJlL2xhdGVuY3l0b3AKKysJbWtkaXIgLXAgJChERVNURElSKS8kKFNCSU5ESVIpCisgCWluc3RhbGwgLW0gMDY0NCBsYXRlbmN5dG9wLnRyYW5zICQoREVTVERJUikvdXNyL3NoYXJlL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC50cmFucworIAlpbnN0YWxsIC1tIDA2NDQgKi5wbmcgJChERVNURElSKS91c3Ivc2hhcmUvbGF0ZW5jeXRvcC8KKyAJaW5zdGFsbCAtbSAwNzU1IGxhdGVuY3l0b3AgJChERVNURElSKSQoU0JJTkRJUikvCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wXzAuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sYXRlbmN5dG9wL2xhdGVuY3l0b3BfMC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMWYxYmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wXzAuNS5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkxpbnV4IHRvb2wgZm9yIG1lYXN1cmluZyBhbmQgZml4aW5nIGxhdGVuY3kiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxhdGVuY3l0b3Aub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2xhdGVuY3l0b3AuYztlbmRsaW5lPTIzO21kNT1lZTllYTliMTQxNTM1NmU1NzM0YWRhZDRhODdkYzdmYSIKKworREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYmludGwgbmN1cnNlcyBnbGliLTIuMCIKKworUFIgPSAicjMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3BrZ3MuZmVkb3JhcHJvamVjdC5vcmcvcmVwby9wa2dzLyR7QlBOfS8ke0JQfS50YXIuZ3ovNzNiYjMzNzFjNmVlMGIwZTY4ZTI1Mjg5MDI3ZTg2NWMvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgIGZpbGU6Ly9sYXRlbmN5dG9wLW1ha2VmaWxlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9sYXRlbmN5dG9wLWZzeW5jLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLVJlY3RpZnktdGhlLWZ1bmN0aW9uLXNpZ25hdHVyZXMtdG8tZml4LXByb3RvdHlwZS1taXMucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzNiYjMzNzFjNmVlMGIwZTY4ZTI1Mjg5MDI3ZTg2NWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWU3ZjcyZmJlYTdiZDkxOGU3MTIxMmExZWFiYWFkODQ4OGQyYzYwMjIwNWQyZTNjOTVkNjJjZDU3ZTkyMDNlZiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICIsLGd0aysiCisKK0VYVFJBX09FTUFLRV9YID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3gxMScsICdIQVNfR1RLX0dVST0xJywgJycsIGQpfSIKKworI0NGTEFHUyArPSAiJHtMREZMQUdTfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9ICR7RVhUUkFfT0VNQUtFX1h9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGlicGZtL2ZpbGVzLzAwMDEtTWFrZWZpbGUtQWRkLUxERkxBR1MtdmFyaWFibGUtdG8tU0xERkxBR1MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGlicGZtL2ZpbGVzLzAwMDEtTWFrZWZpbGUtQWRkLUxERkxBR1MtdmFyaWFibGUtdG8tU0xERkxBR1MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU5YTdmNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saWJwZm0vZmlsZXMvMDAwMS1NYWtlZmlsZS1BZGQtTERGTEFHUy12YXJpYWJsZS10by1TTERGTEFHUy5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDI3MmE4YTA2OWE4ZjVmMDZhMWU1ZGZhMGVmMTJmNWY5Mjk4NDcyOGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOb29yIDxub29yX2Foc2FuQG1lbnRvci5jb20+CitEYXRlOiBXZWQsIDEyIEF1ZyAyMDE1IDIwOjU0OjAwICswNTAwCitTdWJqZWN0OiBbUEFUQ0hdIE1ha2VmaWxlOiBBZGQgTERGTEFHUyB2YXJpYWJsZSB0byBTTERGTEFHUy4KKworKiBBZGQgTERGTEFHUyB2YXJpYWJsZSB0byBTTERGTEFHUyBzbyB0aGF0IGV4dHJhIGxpbmtlcgorICBmbGFncyBjYW4gYmUgc2VudCB2aWEgdGhpcyB2YXJpYWJsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW3BlcmZtb24yLWxpYnBmbTQtY29tbWl0c0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXRdCisKK1NpZ25lZC1vZmYtYnk6IE5vb3IgQWhzYW4gPG5vb3JfYWhzYW5AbWVudG9yLmNvbT4KKy0tLQorIGxpYi9NYWtlZmlsZSB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQoraW5kZXggMWNjODc2NS4uNGJkOTJlZiAxMDA2NDQKKy0tLSBhL2xpYi9NYWtlZmlsZQorKysrIGIvbGliL01ha2VmaWxlCitAQCAtMTg3LDcgKzE4Nyw3IEBAIENGTEFHUyArPSAtRENPTkZJR19QRk1MSUJfQ0VMTAorIGVuZGlmCisgCisgaWZlcSAoJChTWVMpLExpbnV4KQorLVNMREZMQUdTPS1zaGFyZWQgLVdsLC1zb25hbWUgLVdsLCQoVkxJQlBGTSkKKytTTERGTEFHUz0kKExERkxBR1MpIC1zaGFyZWQgLVdsLC1zb25hbWUgLVdsLCQoVkxJQlBGTSkKKyBTTElCUEZNPWxpYnBmbS5zby4kKFZFUlNJT04pLiQoUkVWSVNJT04pLiQoQUdFKQorIFZMSUJQRk09bGlicGZtLnNvLiQoVkVSU0lPTikKKyBTT0xJQkVYVD1zbworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saWJwZm0vbGlicGZtNF80LjYuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saWJwZm0vbGlicGZtNF80LjYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGZkYTkwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpYnBmbS9saWJwZm00XzQuNi4wLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiTW9uaXRvcmluZyB0b29scyBleHBsb2l0aW5nIHRoZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIGV2ZW50cyIKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyBhIGxpYnJhcnksIGNhbGxlZCBsaWJwZm00IHdoaWNoIGlzIHVzZWQgdG8gZGV2ZWxvcCBcCittb25pdG9yaW5nIHRvb2xzIGV4cGxvaXRpbmcgdGhlIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgZXZlbnRzIHN1Y2ggYXMgdGhvc2UgXAorcHJvdmlkZWQgYnkgdGhlIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCAoUE1VKSBvZiBtb2Rlcm4gcHJvY2Vzc29ycy4iCitIT01FUEFHRSA9ICJodHRwOi8vcGVyZm1vbjIuc291cmNlZm9yZ2UubmV0LyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0xNDQ4MjImYXRpZD03NTk5NTMmc291cmNlPW5hdmJhciIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wZGU0ODhmM2JkNDQyNGUzMDhlMmUzOTljYjk5Yzc4OCIKKworU0VDVElPTiA9ICJkZXZlbCIKKworQ09NUEFUSUJMRV9IT1NUID0gInBvd2VycGM2NCIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3BlcmZtb24yLyR7QlBOfS9saWJwZm0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtTWFrZWZpbGUtQWRkLUxERkxBR1MtdmFyaWFibGUtdG8tU0xERkxBR1MucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjUwNzdiOTAyMjQ0MGU0OTUxZDk2ZjJkMGU3M2JkNDg3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVhYjFlNWIwNDcyNTUwZjkwMzdhODgwMDgzNGY2YmMzYjkyNzY5MDA3MGY2OWZhYzBiNjcyODRiNGIwNWZkNWYiCisKK0VYVFJBX09FTUFLRSA9ICJERVNURElSPVwiJHtEfVwiIFBSRUZJWD1cIiR7cHJlZml4fVwiIExJQkRJUj1cIiR7bGliZGlyfVwiIExEQ09ORklHPVwidHJ1ZVwiIgorRVhUUkFfT0VNQUtFX2FwcGVuZF9wb3dlcnBjID0gIiBBUkNIPVwicG93ZXJwY1wiIgorRVhUUkFfT0VNQUtFX2FwcGVuZF9wb3dlcnBjNjQgPSAiIEFSQ0g9XCJwb3dlcnBjXCIgQklUTU9ERT1cIjY0XCIiCisKK1MgPSAiJHtXT1JLRElSfS9saWJwZm0tJHtQVn0iCisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWZpcm13YXJlL2xpbnV4LWZpcm13YXJlX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1maXJtd2FyZS9saW51eC1maXJtd2FyZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY4MTE3YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1maXJtd2FyZS9saW51eC1maXJtd2FyZV9naXQuYmIKQEAgLTAsMCArMSw0MzMgQEAKK1NVTU1BUlkgPSAiRmlybXdhcmUgZmlsZXMgZm9yIHVzZSB3aXRoIExpbnV4IGtlcm5lbCIKK1NFQ1RJT04gPSAia2VybmVsIgorCitMSUNFTlNFID0gIlwKKyAgICBGaXJtd2FyZS1BYmlsaXMgXAorICAgICYgRmlybXdhcmUtYWdlcmUgXAorICAgICYgRmlybXdhcmUtYW1kLXVjb2RlIFwKKyAgICAmIEZpcm13YXJlLWF0aGVyb3NfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtYnJvYWRjb21fYmNtNDN4eCBcCisgICAgJiBGaXJtd2FyZS1jYTAxMzIgXAorICAgICYgRmlybXdhcmUtY2hlbHNpb19maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS1jdzEyMDAgXAorICAgICYgRmlybXdhcmUtZGliMDcwMCBcCisgICAgJiBGaXJtd2FyZS1lbmVfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtZndfc3N0XzBmMjggXAorICAgICYgRmlybXdhcmUtZ283MDA3IFwKKyAgICAmIEZpcm13YXJlLWkyNDAwbSBcCisgICAgJiBGaXJtd2FyZS1pYnRfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtaXQ5MTN4IFwKKyAgICAmIEZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtSW50Y1NTVDIgXAorICAgICYgRmlybXdhcmUtTWFydmVsbCBcCisgICAgJiBGaXJtd2FyZS1td2w4MzM1IFwKKyAgICAmIEZpcm13YXJlLW15cmkxMGdlX2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLU9MUEMgXAorICAgICYgRmlybXdhcmUtcGhhbmZ3IFwKKyAgICAmIEZpcm13YXJlLXFhdF9kaDg5NXhjY19maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS1xbGEyeHh4IFwKKyAgICAmIEZpcm13YXJlLXI4YTc3OXhfdXNiMyBcCisgICAgJiBGaXJtd2FyZS1yYWRlb24gXAorICAgICYgRmlybXdhcmUtcmFsaW5rX2FfbWVkaWF0ZWtfY29tcGFueV9maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS1yYWxpbmstZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtcnRsd2lmaV9maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS10ZGE3NzA2LWZpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLXRpLWNvbm5lY3Rpdml0eSBcCisgICAgJiBGaXJtd2FyZS11ZWFnbGUtYXRtNC1maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS12aWFfdnQ2NjU2IFwKKyAgICAmIEZpcm13YXJlLXdsMTI1MSBcCisgICAgJiBGaXJtd2FyZS14YzQwMDAgXAorICAgICYgRmlybXdhcmUteGM1MDAwIFwKKyAgICAmIEZpcm13YXJlLXhjNTAwMGMgXAorICAgICYgRmlybXdhcmUtc2lhbm8gXAorIgorCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICBmaWxlOi8vTElDRU5DRS5BYmlsaXM7bWQ1PWI1ZWUzZjQxMDc4MGU1NjcxMWFkNDhlYWRjMjJiOGJjIFwKKyAgICBmaWxlOi8vTElDRU5DRS5hZ2VyZTttZDU9YWYwMTMzZGU2YjRhOWIyNTIyZGVmZDVmMTg4YWZkMzEgXAorICAgIGZpbGU6Ly9MSUNFTkNFLmF0aGVyb3NfZmlybXdhcmU7bWQ1PTMwYTE0Yzc4MjNiZWVkYWM5ZmEzOWM2NGZkZDAxYTEzIFwKKyAgICBmaWxlOi8vTElDRU5DRS5icm9hZGNvbV9iY200M3h4O21kNT0zMTYwYzE0ZGY3MjI4ODkxYjg2ODA2MGUxOTUxZGZiYyBcCisgICAgZmlsZTovL0xJQ0VOQ0UuY2EwMTMyO21kNT0yMDliMzNlNjZlZTViZTA0NjFmMTNkMzFkYTM5MjE5OCBcCisgICAgZmlsZTovL0xJQ0VOQ0UuY2hlbHNpb19maXJtd2FyZTttZDU9ODE5YWE4YzNmYTQ1M2YxYjI1OGVkOGQxNjhhOWQ5MDMgXAorICAgIGZpbGU6Ly9MSUNFTkNFLmN3MTIwMDttZDU9ZjBmNzcwODY0ZTdhODQ0NGE1YzVhYTlkMTJhM2E3ZWQgXAorICAgIGZpbGU6Ly9MSUNFTkNFLmVuZV9maXJtd2FyZTttZDU9ZWQ2N2YwZjYyZjhmNzk4MTMwYzI5NjcyMGI3ZDM5MjEgXAorICAgIGZpbGU6Ly9MSUNFTkNFLmZ3X3NzdF8wZjI4O21kNT02MzUzOTMxYzk4OGFkNTI4MThhZTczM2FjNjFjZDI5MyBcCisgICAgZmlsZTovL0xJQ0VOQ0UuZ283MDA3O21kNT1jMGJiOWY2YWFhYmE1NWIwNTI5ZWU5YjMwYWE2NmJlYiBcCisgICAgZmlsZTovL0xJQ0VOQ0UuaTI0MDBtO21kNT0xNGI5MDE5NjllMjNjNDE4ODEzMjdjMGQ5ZTRiN2QzNiBcCisgICAgZmlsZTovL0xJQ0VOQ0UuaWJ0X2Zpcm13YXJlO21kNT1mZGJlZTFkZGZlMGZiN2FiMGIyZmNkNmI0NTRhMzY2YiBcCisgICAgZmlsZTovL0xJQ0VOQ0UuaXQ5MTN4O21kNT0xZmJmNzI3YmZiNmE5NDk4MTBjNGRiZmE3ZTZjZTRmOCBcCisgICAgZmlsZTovL0xJQ0VOQ0UuaXdsd2lmaV9maXJtd2FyZTttZDU9M2ZkODQyOTExZWE5M2MyOWNkMzI2NzlhYTIzZTFjODggXAorICAgIGZpbGU6Ly9MSUNFTkNFLkludGNTU1QyO21kNT05ZTdkOGJlYTc3NjEyZDdjYzdkOWU5YjU0YjYyMzA2MiBcCisgICAgZmlsZTovL0xJQ0VOQ0UuTWFydmVsbDttZDU9OWRkZWExNzM0YTRiYWYzYzc4ZDg0NTE1MWY0MmEzN2EgXAorICAgIGZpbGU6Ly9MSUNFTkNFLm13bDgzMzU7bWQ1PTlhNjI3MWVlMGU2NDQ0MDRiMmZmM2M2MWZkMDcwOTgzIFwKKyAgICBmaWxlOi8vTElDRU5DRS5teXJpMTBnZV9maXJtd2FyZTttZDU9NDJlMzJmYjg5ZjZiOTU5Y2EyMjJlMjVhYzhkZjhmZWQgXAorICAgIGZpbGU6Ly9MSUNFTkNFLk9MUEM7bWQ1PTViOTE3ZjlkOGMwNjE5OTFiZTRmNmY1ZjEwODcxOWNkIFwKKyAgICBmaWxlOi8vTElDRU5DRS5waGFuZnc7bWQ1PTk1NGRjZWMwZTA1MWY5NDA5ODEyYjU2MWVhNzQzYmZhIFwKKyAgICBmaWxlOi8vTElDRU5DRS5xYXRfZGg4OTV4Y2NfZmlybXdhcmU7bWQ1PTllN2Q4YmVhNzc2MTJkN2NjN2Q5ZTliNTRiNjIzMDYyIFwKKyAgICBmaWxlOi8vTElDRU5DRS5xbGEyeHh4O21kNT1mNWNlODUyOWVjNWMxN2NiN2Y5MTFkMjcyMWQ5MGU5MSBcCisgICAgZmlsZTovL0xJQ0VOQ0UucjhhNzc5eF91c2IzO21kNT00YzE2NzE2NTYxNTMwMjVkNzA3NjEwNWE1ZGE3ZTQ5OCBcCisgICAgZmlsZTovL0xJQ0VOQ0UucmFsaW5rX2FfbWVkaWF0ZWtfY29tcGFueV9maXJtd2FyZTttZDU9NzI4ZjFhODVmZDUzZmQ2N2ZhOGQ3YWZiMDgwYmM0MzUgXAorICAgIGZpbGU6Ly9MSUNFTkNFLnJhbGluay1maXJtd2FyZS50eHQ7bWQ1PWFiMmMyNjkyNzdjNDU0NzZmYjQ0OTY3MzkxMWEyZGZkIFwKKyAgICBmaWxlOi8vTElDRU5DRS5ydGx3aWZpX2Zpcm13YXJlLnR4dDttZDU9MDBkMDZjZmQzZWRkZDVhMjY5ODk0OGVhZDJhZDU0YTUgXAorICAgIGZpbGU6Ly9MSUNFTkNFLnRkYTc3MDYtZmlybXdhcmUudHh0O21kNT04MzU5OTdjZjVlM2MxMzFkMGRkZGQ2OTVjN2Q5MTAzZSBcCisgICAgZmlsZTovL0xJQ0VOQ0UudGktY29ubmVjdGl2aXR5O21kNT0xODZlN2E0M2NmNmMyNzQyODNhZDgxMjcyY2EyMThlYSBcCisgICAgZmlsZTovL0xJQ0VOQ0UudWVhZ2xlLWF0bTQtZmlybXdhcmU7bWQ1PTRlZDdlYTZiNTA3Y2NjNTgzYjlkNTk0NDE3NzE0MTE4IFwKKyAgICBmaWxlOi8vTElDRU5DRS52aWFfdnQ2NjU2O21kNT1lNDE1OTY5NGNiYTQyZDQzNzdhOTEyZTc4YTZlODUwZiBcCisgICAgZmlsZTovL0xJQ0VOQ0Uud2wxMjUxO21kNT1hZDNmODE5MjJiYjllMTk3MDE0YmIxODcyODlkM2I1YiBcCisgICAgZmlsZTovL0xJQ0VOQ0UueGM0MDAwO21kNT0wZmY1MWQyZGM0OWZjZTA0ODE0YzkxNTUwODEwOTJmMCBcCisgICAgZmlsZTovL0xJQ0VOQ0UueGM1MDAwO21kNT0xZTE3MGMxMzE3NTMyM2MzMmM3ZjRkMDk5OGQ1M2Y2NiBcCisgICAgZmlsZTovL0xJQ0VOQ0UueGM1MDAwYzttZDU9MTJiMDJlZmEzMDQ5ZGI2NWQ1MjRhZWI0MThkZDg3Y2EgXAorICAgIGZpbGU6Ly9MSUNFTlNFLmFtZC11Y29kZTttZDU9M2EwZGU0NTEyNTNjYzFlZGJmMzBhM2M2MjFlZmZlZTMgXAorICAgIGZpbGU6Ly9MSUNFTlNFLmRpYjA3MDA7bWQ1PWY3NDExODI1YzhhNTU1YTFhM2U1ZWFiOWNhNzczNDMxIFwKKyAgICBmaWxlOi8vTElDRU5TRS5yYWRlb247bWQ1PTZjN2Y5N2M2YzYyYmRkOTU5NmQwMjM4YmIyMDUxMThjIFwKKyAgICBmaWxlOi8vTElDRU5DRS5zaWFubzttZDU9NjAyYzc5YWUzZjk4ZjFlNzNkODgwZmQ5Zjk0MGE0MTggXAorIgorCisjIFRoZXNlIGFyZSBub3QgY29tbW9uIGxpY2Vuc2VzLCBzZXQgTk9fR0VORVJJQ19MSUNFTlNFIGZvciB0aGVtCisjIHNvIHRoYXQgdGhlIGxpY2Vuc2UgZmlsZXMgd2lsbCBiZSBjb3BpZWQgZnJvbSBmZXRjaGVkIHNvdXJjZQorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLUFiaWxpc10gPSAiTElDRU5DRS5BYmlsaXMiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtYWdlcmVdID0gIkxJQ0VOQ0UuYWdlcmUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtYXRoZXJvc19maXJtd2FyZV0gPSAiTElDRU5DRS5hdGhlcm9zX2Zpcm13YXJlIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWJyb2FkY29tX2JjbTQzeHhdID0gIkxJQ0VOQ0UuYnJvYWRjb21fYmNtNDN4eCIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1jYTAxMzJdID0gIkxJQ0VOQ0UuY2EwMTMyIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWNoZWxzaW9fZmlybXdhcmVdID0gIkxJQ0VOQ0UuY2hlbHNpb19maXJtd2FyZSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1jdzEyMDBdID0gIkxJQ0VOQ0UuY3cxMjAwIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWVuZV9maXJtd2FyZV0gPSAiTElDRU5DRS5lbmVfZmlybXdhcmUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtZndfc3N0XzBmMjhdID0gIkxJQ0VOQ0UuZndfc3N0XzBmMjgiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtZ283MDA3XSA9ICJMSUNFTkNFLmdvNzAwNyIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1pMjQwMG1dID0gIkxJQ0VOQ0UuaTI0MDBtIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWlidF9maXJtd2FyZV0gPSAiTElDRU5DRS5pYnRfZmlybXdhcmUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtaXQ5MTN4XSA9ICJMSUNFTkNFLml0OTEzeCIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlXSA9ICJMSUNFTkNFLml3bHdpZmlfZmlybXdhcmUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtSW50Y1NTVDJdID0gIkxJQ0VOQ0UuSW50Y1NTVDIiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtTWFydmVsbF0gPSAiTElDRU5DRS5NYXJ2ZWxsIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLW13bDgzMzVdID0gIkxJQ0VOQ0UubXdsODMzNSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1teXJpMTBnZV9maXJtd2FyZV0gPSAiTElDRU5DRS5teXJpMTBnZV9maXJtd2FyZSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1PTFBDXSA9ICJMSUNFTkNFLk9MUEMiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtcGhhbmZ3XSA9ICJMSUNFTkNFLnBoYW5mdyIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1xYXRfZGg4OTV4Y2NfZmlybXdhcmVdID0gIkxJQ0VOQ0UucWF0X2RoODk1eGNjX2Zpcm13YXJlIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXFsYTJ4eHhdID0gIkxJQ0VOQ0UucWxhMnh4eCIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1yOGE3Nzl4X3VzYjNdID0gIkxJQ0VOQ0UucjhhNzc5eF91c2IzIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXJhbGlua19hX21lZGlhdGVrX2NvbXBhbnlfZmlybXdhcmVdID0gIkxJQ0VOQ0UucmFsaW5rX2FfbWVkaWF0ZWtfY29tcGFueV9maXJtd2FyZSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1yYWxpbmstZmlybXdhcmVdID0gIkxJQ0VOQ0UucmFsaW5rLWZpcm13YXJlLnR4dCIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1ydGx3aWZpX2Zpcm13YXJlXSA9ICJMSUNFTkNFLnJ0bHdpZmlfZmlybXdhcmUudHh0IgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXRkYTc3MDYtZmlybXdhcmVdID0gIkxJQ0VOQ0UudGRhNzcwNi1maXJtd2FyZS50eHQiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtdGktY29ubmVjdGl2aXR5XSA9ICJMSUNFTkNFLnRpLWNvbm5lY3Rpdml0eSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS11ZWFnbGUtYXRtNC1maXJtd2FyZV0gPSAiTElDRU5DRS51ZWFnbGUtYXRtNC1maXJtd2FyZSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS12aWFfdnQ2NjU2XSA9ICJMSUNFTkNFLnZpYV92dDY2NTYiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtd2wxMjUxXSA9ICJMSUNFTkNFLndsMTI1MSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS14YzQwMDBdID0gIkxJQ0VOQ0UueGM0MDAwIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXhjNTAwMF0gPSAiTElDRU5DRS54YzUwMDAiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUteGM1MDAwY10gPSAiTElDRU5DRS54YzUwMDBjIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWFtZC11Y29kZV0gPSAiTElDRU5TRS5hbWQtdWNvZGUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtZGliMDcwMF0gPSAiTElDRU5TRS5kaWIwNzAwIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXJhZGVvbl0gPSAiTElDRU5TRS5yYWRlb24iCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtc2lhbm9dID0gIkxJQ0VOQ0Uuc2lhbm8iCisKK1NSQ1JFViA9ICI3NWNjM2VmOGJhNjcxMmZkNzJjMDczYjE3YTc5MDI4MjEzNmNjNzQzIgorUEUgPSAiMSIKK1BWID0gIjAuMCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZmlybXdhcmUvbGludXgtZmlybXdhcmUuZ2l0IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGFsbGFyY2ggdXBkYXRlLWFsdGVybmF0aXZlcworCitDTEVBTkJST0tFTiA9ICIxIgorCitkb19jb21waWxlKCkgeworCToKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICAke0R9L2xpYi9maXJtd2FyZS8KKwljcCAtciAqICR7RH0vbGliL2Zpcm13YXJlLworCisJIyBBdm9pZCBNYWtlZmlsZSB0byBiZSBkZXBsb3llZAorCXJtICR7RH0vbGliL2Zpcm13YXJlL01ha2VmaWxlCisKKwkjIFJlbW92ZSB1bmJ1aWxkIGZpcm13YXJlIHdoaWNoIG5lZWRzIGNtYWtlIGFuZCBiYXNoCisJcm0gJHtEfS9saWIvZmlybXdhcmUvY2FybDkxNzBmdyAtcmYKKworCSMgUmVtb3ZlIHBvaW50bGVzcyBiYXNoIHNjcmlwdAorCXJtICR7RH0vbGliL2Zpcm13YXJlL2NvbmZpZ3VyZQorCisJIyBMaWJlcnRhcyBzZDg2ODYKKwlsbiAtc2YgbGliZXJ0YXMvc2Q4Njg2X3Y5LmJpbiAke0R9L2xpYi9maXJtd2FyZS9zZDg2ODYuYmluCisJbG4gLXNmIGxpYmVydGFzL3NkODY4Nl92OV9oZWxwZXIuYmluICR7RH0vbGliL2Zpcm13YXJlL3NkODY4Nl9oZWxwZXIuYmluCisKKwkjIGZpeHVwIHdsMTJ4eCBsb2NhdGlvbiwgYWZ0ZXIgMi42LjM3IHRoZSBrZXJuZWwgc2VhcmNoZXMgYSBkaWZmZXJlbnQgbG9jYXRpb24gZm9yIGl0CisJKCBjZCAke0R9L2xpYi9maXJtd2FyZSA7IGxuIC1zZiB0aS1jb25uZWN0aXZpdHkvKiAuICkKK30KKworCitQQUNLQUdFUyA9KyAiJHtQTn0tcmFsaW5rLWxpY2Vuc2UgJHtQTn0tcmFsaW5rIFwKKyAgICAgICAgICAgICAke1BOfS1yYWRlb24tbGljZW5zZSAke1BOfS1yYWRlb24gXAorICAgICAgICAgICAgICR7UE59LW1hcnZlbGwtbGljZW5zZSAke1BOfS1zZDg2ODYgJHtQTn0tc2Q4Nzg3ICR7UE59LXNkODc5NyBcCisgICAgICAgICAgICAgJHtQTn0tdGktY29ubmVjdGl2aXR5LWxpY2Vuc2UgJHtQTn0td2wxMnh4ICR7UE59LXdsMTh4eCBcCisgICAgICAgICAgICAgJHtQTn0tdnQ2NjU2LWxpY2Vuc2UgJHtQTn0tdnQ2NjU2IFwKKyAgICAgICAgICAgICAke1BOfS1ydGwtbGljZW5zZSAke1BOfS1ydGw4MTkyY3UgJHtQTn0tcnRsODE5MmNlICR7UE59LXJ0bDgxOTJzdSBcCisgICAgICAgICAgICAgJHtQTn0tYnJvYWRjb20tbGljZW5zZSAke1BOfS1iY200MzI5ICR7UE59LWJjbTQzMzAgJHtQTn0tYmNtNDMzNCBcCisgICAgICAgICAgICAgJHtQTn0tYXRoZXJvcy1saWNlbnNlICR7UE59LWFyOTE3MCAke1BOfS1hcjNrICR7UE59LWF0aDZrICR7UE59LWF0aDlrIFwKKyAgICAgICAgICAgICBcCisgICAgICAgICAgICAgJHtQTn0taXdsd2lmaS1saWNlbnNlICR7UE59LWl3bHdpZmktMTM1LTYgXAorICAgICAgICAgICAgICR7UE59LWl3bHdpZmktMzE2MC03ICR7UE59LWl3bHdpZmktMzE2MC04ICR7UE59LWl3bHdpZmktMzE2MC05IFwKKyAgICAgICAgICAgICAke1BOfS1pd2x3aWZpLTYwMDAtNCAke1BOfS1pd2x3aWZpLTYwMDBnMmEtNSAke1BOfS1pd2x3aWZpLTYwMDBnMmEtNiBcCisgICAgICAgICAgICAgJHtQTn0taXdsd2lmaS02MDAwZzJiLTUgJHtQTn0taXdsd2lmaS02MDAwZzJiLTYgXAorICAgICAgICAgICAgICR7UE59LWl3bHdpZmktNjA1MC00ICR7UE59LWl3bHdpZmktNjA1MC01IFwKKyAgICAgICAgICAgICAke1BOfS1pd2x3aWZpLTcyNjAtNyAke1BOfS1pd2x3aWZpLTcyNjAtOCAke1BOfS1pd2x3aWZpLTcyNjAtOSBcCisgICAgICAgICAgICAgJHtQTn0taXdsd2lmaS03MjY1LTggJHtQTn0taXdsd2lmaS03MjY1LTkgXAorICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAke1BOfS1saWNlbnNlIFwKKyAgICAgICAgICAgICAiCisKKyMgRm9yIGF0aGVyb3MKK0xJQ0VOU0VfJHtQTn0tYXI5MTcwID0gIkZpcm13YXJlLWF0aGVyb3NfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LWFyM2sgPSAiRmlybXdhcmUtYXRoZXJvc19maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0tYXRoNmsgPSAiRmlybXdhcmUtYXRoZXJvc19maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0tYXRoOWsgPSAiRmlybXdhcmUtYXRoZXJvc19maXJtd2FyZSIKKworRklMRVNfJHtQTn0tYXRoZXJvcy1saWNlbnNlID0gIi9saWIvZmlybXdhcmUvTElDRU5DRS5hdGhlcm9zX2Zpcm13YXJlIgorRklMRVNfJHtQTn0tYXI5MTcwID0gIiBcCisgIC9saWIvZmlybXdhcmUvYXI5MTcwKi5mdyBcCisiCitGSUxFU18ke1BOfS1hcjNrID0gIiBcCisgIC9saWIvZmlybXdhcmUvYXIzayBcCisiCitGSUxFU18ke1BOfS1hdGg2ayA9ICIgXAorICAvbGliL2Zpcm13YXJlL2F0aDZrIFwKKyIKK0ZJTEVTXyR7UE59LWF0aDlrID0gIiBcCisgIC9saWIvZmlybXdhcmUvYXI5MjcxLmZ3IFwKKyAgL2xpYi9maXJtd2FyZS9hcjcwMTAqLmZ3IFwKKyAgL2xpYi9maXJtd2FyZS9odGNfOTI3MS5mdyBcCisgIC9saWIvZmlybXdhcmUvaHRjXzcwMTAuZncgXAorIgorCitSREVQRU5EU18ke1BOfS1hcjkxNzAgKz0gIiR7UE59LWF0aGVyb3MtbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWFyM2sgKz0gIiR7UE59LWF0aGVyb3MtbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWF0aDZrICs9ICIke1BOfS1hdGhlcm9zLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1hdGg5ayArPSAiJHtQTn0tYXRoZXJvcy1saWNlbnNlIgorCisjIEZvciByYWxpbmsKK0xJQ0VOU0VfJHtQTn0tcmFsaW5rID0gIkZpcm13YXJlLXJhbGluay1maXJtd2FyZSIKKworRklMRVNfJHtQTn0tcmFsaW5rLWxpY2Vuc2UgPSAiL2xpYi9maXJtd2FyZS9MSUNFTkNFLnJhbGluay1maXJtd2FyZS50eHQiCitGSUxFU18ke1BOfS1yYWxpbmsgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9ydCouYmluIFwKKyIKKworUkRFUEVORFNfJHtQTn0tcmFsaW5rICs9ICIke1BOfS1yYWxpbmstbGljZW5zZSIKKworIyBGb3IgcmFkZW9uCitMSUNFTlNFXyR7UE59LXJhZGVvbiA9ICJGaXJtd2FyZS1yYWRlb24iCisKK0ZJTEVTXyR7UE59LXJhZGVvbi1saWNlbnNlID0gIi9saWIvZmlybXdhcmUvTElDRU5TRS5yYWRlb24iCitGSUxFU18ke1BOfS1yYWRlb24gPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9yYWRlb24gXAorIgorCitSREVQRU5EU18ke1BOfS1yYWRlb24gKz0gIiR7UE59LXJhZGVvbi1saWNlbnNlIgorCisjIEZvciBtYXJ2ZWxsCitMSUNFTlNFXyR7UE59LXNkODY4NiA9ICJGaXJtd2FyZS1NYXJ2ZWxsIgorTElDRU5TRV8ke1BOfS1zZDg3ODcgPSAiRmlybXdhcmUtTWFydmVsbCIKK0xJQ0VOU0VfJHtQTn0tc2Q4Nzk3ID0gIkZpcm13YXJlLU1hcnZlbGwiCisKK0ZJTEVTXyR7UE59LW1hcnZlbGwtbGljZW5zZSA9ICIvbGliL2Zpcm13YXJlL0xJQ0VOQ0UuTWFydmVsbCIKK0ZJTEVTXyR7UE59LXNkODY4NiA9ICIgXAorICAvbGliL2Zpcm13YXJlL2xpYmVydGFzL3NkODY4Nl92OSogXAorICAvbGliL2Zpcm13YXJlL3NkODY4NiogXAorIgorRklMRVNfJHtQTn0tc2Q4Nzg3ID0gIiBcCisgIC9saWIvZmlybXdhcmUvbXJ2bC9zZDg3ODdfdWFwc3RhLmJpbiBcCisiCitGSUxFU18ke1BOfS1zZDg3OTcgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9tcnZsL3NkODc5N191YXBzdGEuYmluIFwKKyIKKworUkRFUEVORFNfJHtQTn0tc2Q4Njg2ICs9ICIke1BOfS1tYXJ2ZWxsLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1zZDg3ODcgKz0gIiR7UE59LW1hcnZlbGwtbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LXNkODc5NyArPSAiJHtQTn0tbWFydmVsbC1saWNlbnNlIgorCisjIEZvciBydGwKK0xJQ0VOU0VfJHtQTn0tcnRsODE5MmN1ID0gIkZpcm13YXJlLXJ0bHdpZmlfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LXJ0bDgxOTJjZSA9ICJGaXJtd2FyZS1ydGx3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1ydGw4MTkyc3UgPSAiRmlybXdhcmUtcnRsd2lmaV9maXJtd2FyZSIKKworRklMRVNfJHtQTn0tcnRsLWxpY2Vuc2UgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9MSUNFTkNFLnJ0bHdpZmlfZmlybXdhcmUudHh0IFwKKyIKK0ZJTEVTXyR7UE59LXJ0bDgxOTJjdSA9ICIgXAorICAvbGliL2Zpcm13YXJlL3J0bHdpZmkvcnRsODE5MmN1ZncuYmluIFwKKyIKK0ZJTEVTXyR7UE59LXJ0bDgxOTJjZSA9ICIgXAorICAvbGliL2Zpcm13YXJlL3J0bHdpZmkvcnRsODE5MmNmdy5iaW4gXAorIgorRklMRVNfJHtQTn0tcnRsODE5MnN1ID0gIiBcCisgIC9saWIvZmlybXdhcmUvcnRsd2lmaS9ydGw4NzEydS5iaW4gXAorIgorCitSREVQRU5EU18ke1BOfS1ydGw4MTkyY2UgKz0gIiR7UE59LXJ0bC1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0tcnRsODE5MmN1ICs9ICIke1BOfS1ydGwtbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LXJ0bDgxOTJzdSA9ICIke1BOfS1ydGwtbGljZW5zZSIKKworIyBGb3IgdGktY29ubmVjdGl2aXR5CitMSUNFTlNFXyR7UE59LXdsMTJ4eCA9ICJGaXJtd2FyZS10aS1jb25uZWN0aXZpdHkiCitMSUNFTlNFXyR7UE59LXdsMTh4eCA9ICJGaXJtd2FyZS10aS1jb25uZWN0aXZpdHkiCisKK0ZJTEVTXyR7UE59LXRpLWNvbm5lY3Rpdml0eS1saWNlbnNlID0gIi9saWIvZmlybXdhcmUvTElDRU5DRS50aS1jb25uZWN0aXZpdHkiCitGSUxFU18ke1BOfS13bDEyeHggPSAiIFwKKyAgL2xpYi9maXJtd2FyZS93bDEyKiBcCisgIC9saWIvZmlybXdhcmUvVEkqIFwKKyAgL2xpYi9maXJtd2FyZS90aS1jb25uZWN0aXZpdHkgXAorIgorRklMRVNfJHtQTn0td2wxOHh4ID0gIiBcCisgIC9saWIvZmlybXdhcmUvd2wxOCogXAorICAvbGliL2Zpcm13YXJlL1RJKiBcCisgIC9saWIvZmlybXdhcmUvdGktY29ubmVjdGl2aXR5IFwKKyIKKworUkRFUEVORFNfJHtQTn0td2wxMnh4ID0gIiR7UE59LXRpLWNvbm5lY3Rpdml0eS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0td2wxOHh4ID0gIiR7UE59LXRpLWNvbm5lY3Rpdml0eS1saWNlbnNlIgorCisjIEZvciB2dDY2NTYKK0xJQ0VOU0VfJHtQTn0tdnQ2NjU2ID0gIkZpcm13YXJlLXZpYV92dDY2NTYiCisKK0ZJTEVTXyR7UE59LXZ0NjY1Ni1saWNlbnNlID0gIi9saWIvZmlybXdhcmUvTElDRU5DRS52aWFfdnQ2NjU2IgorRklMRVNfJHtQTn0tdnQ2NjU2ID0gIiBcCisgIC9saWIvZmlybXdhcmUvdm50d3VzYi5mdyBcCisiCisKK1JERVBFTkRTXyR7UE59LXZ0NjY1NiA9ICIke1BOfS12dDY2NTYtbGljZW5zZSIKKworIyBGb3IgYnJvYWRjb20KKyMKKyMgV0FSTklORzogVGhlIEFMVEVSTkFUSVZFXyogdmFyaWFibGVzIGFyZSBub3QgdXNpbmcgJHtQTn0gYmVjYXVzZSBvZgorIyBhIGJ1ZyBpbiBiaXRiYWtlOyB3aGVuIHRoaXMgaXMgZml4ZWQgYW5kIGJpdGJha2UgbGVhcm5zIGhvdyB0byBwcm9wZXIKKyMgcGFzcyB2YXJpYWJsZSBmbGFncyB3aXRoIGV4cGFuc2lvbiB3ZSBjYW4gcmV3b3JrIHRoaXMgcGF0Y2guCisKK0xJQ0VOU0VfJHtQTn0tYmNtNDMyOSA9ICJGaXJtd2FyZS1icm9hZGNvbV9iY200M3h4IgorTElDRU5TRV8ke1BOfS1iY200MzMwID0gIkZpcm13YXJlLWJyb2FkY29tX2JjbTQzeHgiCitMSUNFTlNFXyR7UE59LWJjbTQzMzQgPSAiRmlybXdhcmUtYnJvYWRjb21fYmNtNDN4eCIKKworRklMRVNfJHtQTn0tYnJvYWRjb20tbGljZW5zZSA9ICIgXAorICAvbGliL2Zpcm13YXJlL0xJQ0VOQ0UuYnJvYWRjb21fYmNtNDN4eCBcCisiCitGSUxFU18ke1BOfS1iY200MzI5ID0gIiBcCisgIC9saWIvZmlybXdhcmUvYnJjbS9icmNtZm1hYzQzMjktc2Rpby5iaW4gXAorIgorRklMRVNfJHtQTn0tYmNtNDMzMCA9ICIgXAorICAvbGliL2Zpcm13YXJlL2JyY20vYnJjbWZtYWM0MzMwLXNkaW8uYmluIFwKKyIKK0ZJTEVTXyR7UE59LWJjbTQzMzQgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9icmNtL2JyY21mbWFjNDMzNC1zZGlvLmJpbiBcCisiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVticmNtZm1hYy1zZGlvLmJpbl0gPSAiL2xpYi9maXJtd2FyZS9icmNtL2JyY21mbWFjLXNkaW8uYmluIgorCitBTFRFUk5BVElWRV9saW51eC1maXJtd2FyZS1iY200MzM0ID0gImJyY21mbWFjLXNkaW8uYmluIgorQUxURVJOQVRJVkVfVEFSR0VUX2xpbnV4LWZpcm13YXJlLWJjbTQzMzRbYnJjbWZtYWMtc2Rpby5iaW5dID0gIi9saWIvZmlybXdhcmUvYnJjbS9icmNtZm1hYzQzMzQtc2Rpby5iaW4iCitBTFRFUk5BVElWRV9saW51eC1maXJtd2FyZS1iY200MzI5ID0gImJyY21mbWFjLXNkaW8uYmluIgorQUxURVJOQVRJVkVfVEFSR0VUX2xpbnV4LWZpcm13YXJlLWJjbTQzMjlbYnJjbWZtYWMtc2Rpby5iaW5dID0gIi9saWIvZmlybXdhcmUvYnJjbS9icmNtZm1hYzQzMjktc2Rpby5iaW4iCitBTFRFUk5BVElWRV9saW51eC1maXJtd2FyZS1iY200MzMwID0gImJyY21mbWFjLXNkaW8uYmluIgorQUxURVJOQVRJVkVfVEFSR0VUX2xpbnV4LWZpcm13YXJlLWJjbTQzMzBbYnJjbWZtYWMtc2Rpby5iaW5dID0gIi9saWIvZmlybXdhcmUvYnJjbS9icmNtZm1hYzQzMzAtc2Rpby5iaW4iCisKK1JERVBFTkRTXyR7UE59LWJjbTQzMjkgKz0gIiR7UE59LWJyb2FkY29tLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1iY200MzMwICs9ICIke1BOfS1icm9hZGNvbS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0tYmNtNDMzNCArPSAiJHtQTn0tYnJvYWRjb20tbGljZW5zZSIKKworIyBGb3IgaXdsd2lmaQorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTEzNS02ICAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTMxNjAtNyAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTMxNjAtOCAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTMxNjAtOSAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTYwMDAtNCAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTYwMDBnMmEtNSA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTYwMDBnMmEtNiA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTYwMDBnMmEtNSA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTYwMDBnMmItNiA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTYwNTAtNCAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTYwNTAtNSAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTcyNjAtNyAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTcyNjAtOCAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTcyNjAtOSAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTcyNjUtOCAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTcyNjUtOSAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorCitGSUxFU18ke1BOfS1pd2x3aWZpLWxpY2Vuc2UgPSAiL2xpYi9maXJtd2FyZS9MSUNFTkNFLml3bHdpZmlfZmlybXdhcmUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTEzNS02ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS0xMzUtNi51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktMzE2MC03ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS0zMTYwLTcudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTMxNjAtOCA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktMzE2MC04LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS0zMTYwLTkgPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTMxNjAtOS51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktNjAwMC00ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS02MDAwLTQudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTYwMDBnMmEtNSA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktNjAwMGcyYS01LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS02MDAwZzJhLTYgPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTYwMDBnMmEtNi51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktNjAwMGcyYi01ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS02MDAwZzJiLTUudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTYwMDBnMmItNiA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktNjAwMGcyYi02LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS02MDUwLTQgPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTYwNTAtNC51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktNjA1MC01ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS02MDUwLTUudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTcyNjAtNyA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktNzI2MC03LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS03MjYwLTggPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTcyNjAtOC51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktNzI2MC05ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS03MjYwLTkudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTcyNjUtOCA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktNzI2NS04LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS03MjY1LTkgPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTcyNjUtOS51Y29kZSIKKworUkRFUEVORFNfJHtQTn0taXdsd2lmaS0xMzUtNiAgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS0zMTYwLTcgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS0zMTYwLTggICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS0zMTYwLTkgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS02MDAwLTQgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS02MDAwZzJhLTUgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS02MDAwZzJhLTYgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS02MDAwZzJhLTUgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS02MDAwZzJiLTYgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS02MDUwLTQgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS02MDUwLTUgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS03MjYwLTcgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS03MjYwLTggICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS03MjYwLTkgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS03MjY1LTggICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS03MjY1LTkgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorCisjIEZvciBvdGhlciBmaXJtd2FyZXMKKyMgTWF5YmUgc3BsaXQgb3V0IHRvIHNlcGFyYXRlIHBhY2thZ2VzIHdoZW4gbmVlZGVkLgorTElDRU5TRV8ke1BOfSA9ICJcCisgICAgRmlybXdhcmUtQWJpbGlzIFwKKyAgICAmIEZpcm13YXJlLWFnZXJlIFwKKyAgICAmIEZpcm13YXJlLWFtZC11Y29kZSBcCisgICAgJiBGaXJtd2FyZS1jYTAxMzIgXAorICAgICYgRmlybXdhcmUtY2hlbHNpb19maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS1jdzEyMDAgXAorICAgICYgRmlybXdhcmUtZGliMDcwMCBcCisgICAgJiBGaXJtd2FyZS1lbmVfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtZndfc3N0XzBmMjggXAorICAgICYgRmlybXdhcmUtZ283MDA3IFwKKyAgICAmIEZpcm13YXJlLWkyNDAwbSBcCisgICAgJiBGaXJtd2FyZS1pYnRfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtaXQ5MTN4IFwKKyAgICAmIEZpcm13YXJlLW13bDgzMzUgXAorICAgICYgRmlybXdhcmUtbXlyaTEwZ2VfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtT0xQQyBcCisgICAgJiBGaXJtd2FyZS1waGFuZncgXAorICAgICYgRmlybXdhcmUtcWF0X2RoODk1eGNjX2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLXFsYTJ4eHggXAorICAgICYgRmlybXdhcmUtcjhhNzc5eF91c2IzIFwKKyAgICAmIEZpcm13YXJlLXJhbGlua19hX21lZGlhdGVrX2NvbXBhbnlfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtdGRhNzcwNi1maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS11ZWFnbGUtYXRtNC1maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS13bDEyNTEgXAorICAgICYgRmlybXdhcmUteGM0MDAwIFwKKyAgICAmIEZpcm13YXJlLXhjNTAwMCBcCisgICAgJiBGaXJtd2FyZS14YzUwMDBjIFwKKyIKK0ZJTEVTXyR7UE59LWxpY2Vuc2UgKz0gIi9saWIvZmlybXdhcmUvTElDRU4qIgorRklMRVNfJHtQTn0gKz0gIi9saWIvZmlybXdhcmUvKiIKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1saWNlbnNlIgorCisjIE1ha2UgbGludXgtZmlybXdhcmUgZGVwZW5kIG9uIGFsbCBvZiB0aGUgc3BsaXQtb3V0IHBhY2thZ2VzLgorcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGZpcm13YXJlX3BrZ3MgPSBvZS51dGlscy5wYWNrYWdlc19maWx0ZXJfb3V0X3N5c3RlbShkKQorICAgIGQuYXBwZW5kVmFyKCdSREVQRU5EU19saW51eC1maXJtd2FyZScsICcgJyArICcgJy5qb2luKGZpcm13YXJlX3BrZ3MpKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NmJjMWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVycy5pbmMKQEAgLTAsMCArMSw3NSBAQAorU1VNTUFSWSA9ICJTYW5pdGl6ZWQgc2V0IG9mIGtlcm5lbCBoZWFkZXJzIGZvciB0aGUgQyBsaWJyYXJ5J3MgdXNlIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMgICAgICAgICAgICAgICAgICAgICAgICBQTEVBU0UgUkVBRCAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgWW91J3JlIHByb2JhYmx5IGxvb2tpbmcgaGVyZSB0aGlua2luZyB5b3UgbmVlZCB0byBjcmVhdGUgc29tZSBuZXcgY29weQorIyBvZiBsaW51eC1saWJjLWhlYWRlcnMgc2luY2UgeW91IGhhdmUgeW91ciBvd24gY3VzdG9tIGtlcm5lbC4gVG8gcHV0IAorIyB0aGlzIHNpbXBseSwgeW91IERPIE5PVC4KKyMKKyMgV2h5PyBUaGVzZSBoZWFkZXJzIGFyZSB1c2VkIHRvIGJ1aWxkIHRoZSBsaWJjLiBJZiB5b3UgY3VzdG9taXNlIHRoZSAKKyMgaGVhZGVycyB5b3UgYXJlIGN1c3RvbWlzaW5nIHRoZSBsaWJjIGFuZCB0aGUgbGliYyBiZWNvbWVzIG1hY2hpbmUKKyMgc3BlY2lmaWMuIE1vc3QgcGVvcGxlIGRvIG5vdCBhZGQgY3VzdG9tIGxpYmMgZXh0ZW5zaW9ucyB0byB0aGUga2VybmVsCisjIGFuZCBoYXZlIGEgbWFjaGluZSBzcGVjaWZpYyBsaWJjLgorIworIyBCdXQgeW91IGhhdmUgc29tZSBrZXJuZWwgaGVhZGVycyB5b3UgbmVlZCBmb3Igc29tZSBkcml2ZXI/IFRoYXQgaXMgZmluZQorIyBidXQgZ2V0IHRoZW0gZnJvbSBTVEFHSU5HX0tFUk5FTF9ESVIgd2hlcmUgdGhlIGtlcm5lbCBpbnN0YWxscyBpdHNlbGYuCisjIFRoaXMgd2lsbCBtYWtlIHRoZSBwYWNrYWdlIHVzaW5nIHRoZW0gbWFjaGluZSBzcGVjaWZpYyBidXQgdGhpcyBpcyBtdWNoCisjIGJldHRlciB0aGFuIGhhdmluZyBhIG1hY2hpbmUgc3BlY2lmaWMgQyBsaWJyYXJ5LiBUaGlzIGRvZXMgbWVhbiB5b3VyIAorIyByZWNpcGUgbmVlZHMgYSBERVBFTkRTICs9ICJ2aXJ0dWFsL2tlcm5lbCIgYnV0IGFnYWluLCB0aGF0IGlzIGZpbmUgYW5kCisjIG1ha2VzIHRvdGFsIHNlbnNlLgorIworIyBUaGVyZSBjYW4gYWxzbyBiZSBhIGNhc2Ugd2hlcmUgeW91ciBrZXJuZWwgZXh0cmVtZWx5IG9sZCBhbmQgeW91IHdhbnQKKyMgYW4gb2xkZXIgbGliYyBBQkkgZm9yIHRoYXQgb2xkIGtlcm5lbC4gVGhlIGhlYWRlcnMgaW5zdGFsbGVkIGJ5IHRoaXMKKyMgcmVjaXBlIHNob3VsZCBzdGlsbCBiZSBhIHN0YW5kYXJkIG1haW5saW5lIGtlcm5lbCwgbm90IHlvdXIgb3duIGN1c3RvbSAKKyMgb25lLgorIworIyAtLSBSUAorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kNzgxMGZhYjc0ODdmYjBhYWQzMjdiNzZmMWJlN2NkNyIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBtYWpvciA9IGQuZ2V0VmFyKCJQViIsVHJ1ZSkuc3BsaXQoJy4nKVswXQorICAgIGlmIG1ham9yID09ICIzIjoKKyAgICAgICAgZC5zZXRWYXIoIkhFQURFUl9GRVRDSF9WRVIiLCAiMy4wIikKKyAgICBlbGlmIG1ham9yID09ICI0IjoKKyAgICAgICAgZC5zZXRWYXIoIkhFQURFUl9GRVRDSF9WRVIiLCAiNC54IikKKyAgICBlbHNlOgorICAgICAgICBkLnNldFZhcigiSEVBREVSX0ZFVENIX1ZFUiIsICIyLjYiKQorfQorCitpbmhlcml0IGtlcm5lbC1hcmNoCisKK0tPUkdfQVJDSElWRV9DT01QUkVTU0lPTiA/PSAiYnoyIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgva2VybmVsL3Yke0hFQURFUl9GRVRDSF9WRVJ9L2xpbnV4LSR7UFZ9LnRhci4ke0tPUkdfQVJDSElWRV9DT01QUkVTU0lPTn0iCisKK1MgPSAiJHtXT1JLRElSfS9saW51eC0ke1BWfSIKKworZG9fY29uZmlndXJlKCkgeworCW9lX3J1bm1ha2UgYWxsbm9jb25maWcKK30KKworZG9fY29tcGlsZSAoKSB7Cit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBoZWFkZXJzX2luc3RhbGwgSU5TVEFMTF9IRFJfUEFUSD0ke0R9JHtleGVjX3ByZWZpeH0KKwkjIEtlcm5lbCBzaG91bGQgbm90IGJlIGV4cG9ydGluZyB0aGlzIGhlYWRlcgorCXJtIC1mICR7RH0ke2V4ZWNfcHJlZml4fS9pbmNsdWRlL3Njc2kvc2NzaS5oCisKKwkjIFRoZSAuLmluc3RhbGwuY21kIGNvbmZsaWN0cyBiZXR3ZWVuIHZhcmlvdXMgY29uZmlndXJlIHJ1bnMKKwlmaW5kICR7RH0ke2luY2x1ZGVkaXJ9IC1uYW1lIC4uaW5zdGFsbC5jbWQgfCB4YXJncyBybSAtZgorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKKworI0RFUEVORFMgPSAiY3Jvc3MtbGlua2FnZSIKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCitSUkVDT01NRU5EU18ke1BOfS1kYmcgPSAiJHtQTn0tZGV2ICg9ICR7RVhURU5EUEtHVn0pIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorREVQRU5EUyArPSAidW5pZmRlZi1uYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVyc180LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVyc180LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgxNmU1ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzXzQuMS5iYgpAQCAtMCwwICsxLDcgQEAKK0tPUkdfQVJDSElWRV9DT01QUkVTU0lPTiA9ICJ4eiIKKworcmVxdWlyZSBsaW51eC1saWJjLWhlYWRlcnMuaW5jCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmZTlkYzBmNjcyOWYzNjQwMGVhODFhYTQxZDYxNGMzNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjYWY1MWYwODVhYWMxZTFjZWE0ZDAwZGJiZjMwOTNlYWQwN2I1NTFmYzA3YjMxYjJhOTg5YzA1ZjhlYTcyZDlmIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWRldnNyYy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtZGV2c3JjLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NmM4YzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWRldnNyYy5iYgpAQCAtMCwwICsxLDc2IEBACitTVU1NQVJZID0gIkxpbnV4IGtlcm5lbCBEZXZlbG9wbWVudCBTb3VyY2UiCitERVNDUklQVElPTiA9ICJEZXZlbG9wbWVudCBzb3VyY2UgbGludXgga2VybmVsLiBXaGVuIGJ1aWx0LCB0aGlzIHJlY2lwZSBwYWNrYWdlcyB0aGUgXAorc291cmNlIG9mIHRoZSBwcmVmZXJyZWQgdmlydHVhbC9rZXJuZWwgcHJvdmlkZXIgYW5kIG1ha2VzIGl0IGF2YWlsYWJsZSBmb3IgZnVsbCBrZXJuZWwgXAorZGV2ZWxvcG1lbnQgb3IgZXh0ZXJuYWwgbW9kdWxlIGJ1aWxkcyIKKworU0VDVElPTiA9ICJrZXJuZWwiCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vR1BMLTIuMDttZDU9ODAxZjgwOTgwZDE3MWRkNjQyNTYxMDgzM2EyMmRiZTYiCisKK2luaGVyaXQgbGludXgta2VybmVsLWJhc2UKKworIyBXaGlsc3Qgbm90IGEgbW9kdWxlLCB0aGlzIGVuc3VyZXMgd2UgZG9uJ3QgZ2V0IG11bHRpbGliIGV4dGVuZGVkICh3aGljaCB3b3VsZCBtYWtlIG5vIHNlbnNlKQoraW5oZXJpdCBtb2R1bGUtYmFzZQorCisjIFdlIG5lZWQgdGhlIGtlcm5lbCB0byBiZSBzdGFnZWQgKHVucGFja2VkLCBwYXRjaGVkIGFuZCBjb25maWd1cmVkKSBiZWZvcmUKKyMgd2UgY2FuIGdyYWIgdGhlIHNvdXJjZSBhbmQgbWFrZSB0aGUgc291cmNlIHBhY2thZ2UuIFdlIGFsc28gbmVlZCB0aGUgYml0cyBmcm9tCisjICR7Qn0gbm90IHRvIGNoYW5nZSB3aGlsZSB3ZSBpbnN0YWxsLCBzbyB2aXJ0dWFsL2tlcm5lbCBtdXN0IGZpbmlzaCBkb19jb21waWxlLgorZG9faW5zdGFsbFtkZXBlbmRzXSArPSAidmlydHVhbC9rZXJuZWw6ZG9fc2hhcmVkX3dvcmtkaXIiCisjIE5lZWQgdGhlIHNvdXJjZSwgbm90IGp1c3QgdGhlIG91dHB1dCBvZiBwb3B1bGF0ZV9zeXNyb290Citkb19pbnN0YWxsW2RlcGVuZHNdICs9ICJ2aXJ0dWFsL2tlcm5lbDpkb19pbnN0YWxsIgorCisjIFRoZXJlJ3Mgbm90aGluZyB0byBkbyBoZXJlLCBleGNlcHQgaW5zdGFsbCB0aGUgc291cmNlIHdoZXJlIHdlIGNhbiBwYWNrYWdlIGl0Citkb19mZXRjaFtub2V4ZWNdID0gIjEiCitkb191bnBhY2tbbm9leGVjXSA9ICIxIgorZG9fcGF0Y2hbbm9leGVjXSA9ICIxIgorZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorZG9fcG9wdWxhdGVfc3lzcm9vdFtub2V4ZWNdID0gIjEiCisKKyMgRGVmaW5lIHdoZXJlIHRoZSBrZXJuZWwgaGVhZGVycyBhcmUgaW5zdGFsbGVkIG9uIHRoZSB0YXJnZXQgYXMgd2VsbCBhcyB3aGVyZQorIyB0aGV5IGFyZSBzdGFnZWQuCitLRVJORUxfU1JDX1BBVEggPSAiL3Vzci9zcmMva2VybmVsIgorUyA9ICIke1NUQUdJTkdfS0VSTkVMX0RJUn0iCitCID0gIiR7U1RBR0lOR19LRVJORUxfQlVJTERESVJ9IgorCitLRVJORUxfVkVSU0lPTiA9ICIke0BnZXRfa2VybmVsdmVyc2lvbl9oZWFkZXJzKCcke1N9Jyl9IgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitkb19pbnN0YWxsKCkgeworICAgICAgICBrZXJuZWxkaXI9JHtEfSR7S0VSTkVMX1NSQ19QQVRIfQorICAgICAgICBpbnN0YWxsIC1kICRrZXJuZWxkaXIKKworICAgICAgICAjCisgICAgICAgICMgQ29weSB0aGUgc3RhZ2luZyBkaXIgc291cmNlIChhbmQgbW9kdWxlIGJ1aWxkIHN1cHBvcnQpIGludG8gdGhlIGRldnNyYyBzdHJ1Y3R1cmUuCisgICAgICAgICMgV2UgY2FuIGtlZXAgdGhpcyBjb3B5IHNpbXBsZSBhbmQgdGFrZSBldmVyeXRoaW5nLCBzaW5jZSBhIHdlJ2xsIGNsZWFuIHVwIGFueSBidWlsZAorICAgICAgICAjIGFydGlmYWN0cyBhZnRlcndhcmRzLCBhbmQgdGhlIGV4dHJhIGkvbyBpcyBub3Qgc2lnbmlmaWNhbnQKKyAgICAgICAgIworICAgICAgICBjZCAke0J9CisgICAgICAgIGZpbmQgLiAtdHlwZSBkIC1uYW1lICcuZ2l0KicgLXBydW5lIC1vIC1wYXRoICcuZGVidWcnIC1wcnVuZSAtbyAtdHlwZSBmIC1wcmludDAgfCBjcGlvIC0tbnVsbCAtcGRsdSAka2VybmVsZGlyCisgICAgICAgIGNkICR7U30KKyAgICAgICAgZmluZCAuIC10eXBlIGQgLW5hbWUgJy5naXQqJyAtcHJ1bmUgLW8gLXR5cGUgZiAtcHJpbnQwIHwgY3BpbyAtLW51bGwgLXBkbHUgJGtlcm5lbGRpcgorCisgICAgICAgICMgRXhwbGljaXRseSBzZXQgS0JVSUxEX09VVFBVVCB0byBlbnN1cmUgdGhhdCB0aGUgaW1hZ2UgZGlyZWN0b3J5IGlzIGNsZWFuZWQgYW5kIG5vdAorICAgICAgICAjIFRoZSBtYWluIGJ1aWxkIGFydGlmYWN0cy4gV2UgY2xlYW4gdGhlIGRpcmVjdG9yeSB0byBhdm9pZCBRQSBlcnJvcnMgb24gbWlzbWF0Y2hlZAorICAgICAgICAjIGFyY2hpdGVjdHVyZSAoc2luY2Ugc2NyaXB0cyBhbmQgaGVscGVycyBhcmUgbmF0aXZlIGZvcm1hdCkuCisgICAgICAgIEtCVUlMRF9PVVRQVVQ9IiRrZXJuZWxkaXIiCisgICAgICAgIG9lX3J1bm1ha2UgLUMgJGtlcm5lbGRpciBDQz0iJHtLRVJORUxfQ0N9IiBMRD0iJHtLRVJORUxfTER9IiBjbGVhbiBfbXJwcm9wZXJfc2NyaXB0cworCisgICAgICAgICMgQXMgb2YgTGludXgga2VybmVsIHZlcnNpb24gMy4wLjEsIHRoZSBjbGVhbiB0YXJnZXQgcmVtb3ZlcworICAgICAgICAjIGFyY2gvcG93ZXJwYy9saWIvY3J0c2F2cmVzLm8gd2hpY2ggaXMgcHJlc2VudCBpbgorICAgICAgICAjIEtCVUlMRF9MREZMQUdTX01PRFVMRSwgbWFraW5nIGl0IHJlcXVpcmVkIHRvIGJ1aWxkIGV4dGVybmFsIG1vZHVsZXMuCisgICAgICAgIGlmIFsgJHtBUkNIfSA9ICJwb3dlcnBjIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgbWtkaXIgLXAgJGtlcm5lbGRpci9hcmNoL3Bvd2VycGMvbGliLworICAgICAgICAgICAgICAgIGNwICR7Qn0vYXJjaC9wb3dlcnBjL2xpYi9jcnRzYXZyZXMubyAka2VybmVsZGlyL2FyY2gvcG93ZXJwYy9saWIvY3J0c2F2cmVzLm8KKyAgICAgICAgZmkKKworICAgICAgICBjaG93biAtUiByb290OnJvb3QgJHtEfQorfQorIyBFbnN1cmUgd2UgZG9uJ3QgcmFjZSBhZ2FpbnN0ICJtYWtlIHNjcmlwdHMiIGR1cmluZyBjcGlvCitkb19pbnN0YWxsW2xvY2tmaWxlc10gPSAiJHtUTVBESVJ9L2tlcm5lbC1zY3JpcHRzLmxvY2siCisKK1BBQ0tBR0VTID0gImtlcm5lbC1kZXZzcmMiCitGSUxFU18ke1BOfSA9ICIke0tFUk5FTF9TUkNfUEFUSH0iCitSREVQRU5EU18ke1BOfSA9ICJiYyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdGIuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR0Yi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUzYTVlMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdGIuaW5jCkBAIC0wLDAgKzEsNzkgQEAKKyMgU3VwcG9ydCBmb3IgZGV2aWNlIHRyZWUgZ2VuZXJhdGlvbgorRklMRVNfa2VybmVsLWRldmljZXRyZWUgPSAiLyR7S0VSTkVMX0lNQUdFREVTVH0vZGV2aWNldHJlZSoiCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgZC5hcHBlbmRWYXIoIlBBQ0tBR0VTIiwgIiBrZXJuZWwtZGV2aWNldHJlZSIpCit9CisKK2RvX2NvbXBpbGVfYXBwZW5kKCkgeworCWlmIHRlc3QgLW4gIiR7S0VSTkVMX0RFVklDRVRSRUV9IjsgdGhlbgorCQlmb3IgRFRCIGluICR7S0VSTkVMX0RFVklDRVRSRUV9OyBkbworCQkJaWYgZWNobyAke0RUQn0gfCBncmVwIC1xICcvZHRzLyc7IHRoZW4KKwkJCQliYndhcm4gIiR7RFRCfSBjb250YWlucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSB0aGUgZHRzIGZpbGUsIGJ1dCBvbmx5IHRoZSBkdGIgbmFtZSBzaG91bGQgYmUgdXNlZC4iCisJCQkJRFRCPWBiYXNlbmFtZSAke0RUQn0gfCBzZWQgJ3MsXC5kdHMkLC5kdGIsZydgCisJCQlmaQorCQkJb2VfcnVubWFrZSAke0RUQn0KKwkJZG9uZQorCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWlmIHRlc3QgLW4gIiR7S0VSTkVMX0RFVklDRVRSRUV9IjsgdGhlbgorCQlmb3IgRFRCIGluICR7S0VSTkVMX0RFVklDRVRSRUV9OyBkbworCQkJaWYgZWNobyAke0RUQn0gfCBncmVwIC1xICcvZHRzLyc7IHRoZW4KKwkJCQliYndhcm4gIiR7RFRCfSBjb250YWlucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSB0aGUgZHRzIGZpbGUsIGJ1dCBvbmx5IHRoZSBkdGIgbmFtZSBzaG91bGQgYmUgdXNlZC4iCisJCQkJRFRCPWBiYXNlbmFtZSAke0RUQn0gfCBzZWQgJ3MsXC5kdHMkLC5kdGIsZydgCisJCQlmaQorCQkJRFRCX0JBU0VfTkFNRT1gYmFzZW5hbWUgJHtEVEJ9IC5kdGJgCisJCQlEVEJfU1lNTElOS19OQU1FPWBlY2hvICR7S0VSTkVMX0lNQUdFX1NZTUxJTktfTkFNRX0gfCBzZWQgInMvJHtNQUNISU5FfS8ke0RUQl9CQVNFX05BTUV9L2ciYAorCQkJRFRCX1BBVEg9IiR7Qn0vYXJjaC8ke0FSQ0h9L2Jvb3QvZHRzLyR7RFRCfSIKKwkJCWlmIFsgISAtZSAiJHtEVEJfUEFUSH0iIF07IHRoZW4KKwkJCQlEVEJfUEFUSD0iJHtCfS9hcmNoLyR7QVJDSH0vYm9vdC8ke0RUQn0iCisJCQlmaQorCQkJaW5zdGFsbCAtbSAwNjQ0ICR7RFRCX1BBVEh9ICR7RH0vJHtLRVJORUxfSU1BR0VERVNUfS9kZXZpY2V0cmVlLSR7RFRCX1NZTUxJTktfTkFNRX0uZHRiCisJCWRvbmUKKwlmaQorfQorCitkb19kZXBsb3lfYXBwZW5kKCkgeworCWlmIHRlc3QgLW4gIiR7S0VSTkVMX0RFVklDRVRSRUV9IjsgdGhlbgorCQlmb3IgRFRCIGluICR7S0VSTkVMX0RFVklDRVRSRUV9OyBkbworCQkJaWYgZWNobyAke0RUQn0gfCBncmVwIC1xICcvZHRzLyc7IHRoZW4KKwkJCQliYndhcm4gIiR7RFRCfSBjb250YWlucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSB0aGUgZHRzIGZpbGUsIGJ1dCBvbmx5IHRoZSBkdGIgbmFtZSBzaG91bGQgYmUgdXNlZC4iCisJCQkJRFRCPWBiYXNlbmFtZSAke0RUQn0gfCBzZWQgJ3MsXC5kdHMkLC5kdGIsZydgCisJCQlmaQorCQkJRFRCX0JBU0VfTkFNRT1gYmFzZW5hbWUgJHtEVEJ9IC5kdGJgCisJCQlEVEJfTkFNRT1gZWNobyAke0tFUk5FTF9JTUFHRV9CQVNFX05BTUV9IHwgc2VkICJzLyR7TUFDSElORX0vJHtEVEJfQkFTRV9OQU1FfS9nImAKKwkJCURUQl9TWU1MSU5LX05BTUU9YGVjaG8gJHtLRVJORUxfSU1BR0VfU1lNTElOS19OQU1FfSB8IHNlZCAicy8ke01BQ0hJTkV9LyR7RFRCX0JBU0VfTkFNRX0vZyJgCisJCQlEVEJfUEFUSD0iJHtCfS9hcmNoLyR7QVJDSH0vYm9vdC9kdHMvJHtEVEJ9IgorCQkJaWYgWyAhIC1lICIke0RUQl9QQVRIfSIgXTsgdGhlbgorCQkJCURUQl9QQVRIPSIke0J9L2FyY2gvJHtBUkNIfS9ib290LyR7RFRCfSIKKwkJCWZpCisJCQlpbnN0YWxsIC1kICR7REVQTE9ZRElSfQorCQkJaW5zdGFsbCAtbSAwNjQ0ICR7RFRCX1BBVEh9ICR7REVQTE9ZRElSfS8ke0RUQl9OQU1FfS5kdGIKKwkJCWNkICR7REVQTE9ZRElSfQorCQkJbG4gLXNmICR7RFRCX05BTUV9LmR0YiAke0RUQl9TWU1MSU5LX05BTUV9LmR0YgorCQkJY2QgLQorCQlkb25lCisJZmkKK30KKworcGtnX3Bvc3RpbnN0X2tlcm5lbC1kZXZpY2V0cmVlICgpIHsKKwljZCAvJHtLRVJORUxfSU1BR0VERVNUfQorCWZvciBEVEJfRklMRSBpbiAke0tFUk5FTF9ERVZJQ0VUUkVFfQorCWRvCisJCURUQl9CQVNFX05BTUU9YGJhc2VuYW1lICR7RFRCX0ZJTEV9IHwgYXdrIC1GICIuIiAne3ByaW50ICQxfSdgCisJCURUQl9TWU1MSU5LX05BTUU9YGVjaG8gJHtLRVJORUxfSU1BR0VfU1lNTElOS19OQU1FfSB8IHNlZCAicy8ke01BQ0hJTkV9LyR7RFRCX0JBU0VfTkFNRX0vZyJgCisJCXVwZGF0ZS1hbHRlcm5hdGl2ZXMgLS1pbnN0YWxsIC8ke0tFUk5FTF9JTUFHRURFU1R9LyR7RFRCX0JBU0VfTkFNRX0uZHRiICR7RFRCX0JBU0VfTkFNRX0uZHRiIGRldmljZXRyZWUtJHtEVEJfU1lNTElOS19OQU1FfS5kdGIgJHtLRVJORUxfUFJJT1JJVFl9IHx8IHRydWUKKwlkb25lCit9CisKK3BrZ19wb3N0cm1fa2VybmVsLWRldmljZXRyZWUgKCkgeworCWNkIC8ke0tFUk5FTF9JTUFHRURFU1R9CisJZm9yIERUQl9GSUxFIGluICR7S0VSTkVMX0RFVklDRVRSRUV9CisJZG8KKwkJRFRCX0JBU0VfTkFNRT1gYmFzZW5hbWUgJHtEVEJfRklMRX0gfCBhd2sgLUYgIi4iICd7cHJpbnQgJDF9J2AKKwkJRFRCX1NZTUxJTktfTkFNRT1gZWNobyAke0tFUk5FTF9JTUFHRV9TWU1MSU5LX05BTUV9IHwgc2VkICJzLyR7TUFDSElORX0vJHtEVEJfQkFTRV9OQU1FfS9nImAKKwkJdXBkYXRlLWFsdGVybmF0aXZlcyAtLXJlbW92ZSAke0RUQl9CQVNFX05BTUV9LmR0YiBkZXZpY2V0cmVlLSR7RFRCX1NZTUxJTktfTkFNRX0uZHRiICR7S0VSTkVMX1BSSU9SSVRZfSB8fCB0cnVlCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR1bW15LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR1bW15LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMGU0ZTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtZHVtbXkuYmIKQEAgLTAsMCArMSw1NCBAQAorU1VNTUFSWSA9ICJEdW1teSBMaW51eCBrZXJuZWwiCitERVNDUklQVElPTiA9ICJEdW1teSBMaW51eCBrZXJuZWwsIHRvIGJlIHNlbGVjdGVkIGFzIHRoZSBwcmVmZXJyZWQgXAorcHJvdmlkZXIgZm9yIHZpcnR1YWwva2VybmVsIHRvIHNhdGlzZnkgZGVwZW5kZW5jaWVzIGZvciBzaXR1YXRpb25zIFwKK3doZXJlIHlvdSB3aXNoIHRvIGJ1aWxkIHRoZSBrZXJuZWwgZXh0ZXJuYWxseSBmcm9tIHRoZSBidWlsZCBzeXN0ZW0uIgorU0VDVElPTiA9ICJrZXJuZWwiCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke1dPUktESVJ9L0NPUFlJTkcuR1BMO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKKworUFJPVklERVMgKz0gInZpcnR1YWwva2VybmVsIgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJea2VybmVsLW1vZHVsZS0uKiIKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5rZXJuZWwtaW1hZ2UtLioiCitQQUNLQUdFU19EWU5BTUlDICs9ICJea2VybmVsLWZpcm13YXJlLS4qIgorCitQQUNLQUdFUyArPSAia2VybmVsLW1vZHVsZXMiCitGSUxFU19rZXJuZWwtbW9kdWxlcyA9ICIiCitBTExPV19FTVBUWV9rZXJuZWwtbW9kdWxlcyA9ICIxIgorREVTQ1JJUFRJT05fa2VybmVsLW1vZHVsZXMgPSAiS2VybmVsIG1vZHVsZXMgbWV0YSBwYWNrYWdlIgorCisjQ09NUEFUSUJMRV9NQUNISU5FID0gInlvdXJfbWFjaGluZSIKKworUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiZmlsZTovL0NPUFlJTkcuR1BMIgorUyA9ICIke1dPUktESVJ9IgorCitkb19jb25maWd1cmUoKSB7CisJOgorfQorCitkb19jb21waWxlICgpIHsKKwk6Cit9CisKK2RvX3NoYXJlZF93b3JrZGlyICgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwoKSB7CisJOgorfQorCitkb19idW5kbGVfaW5pdHJhbWZzKCkgeworCToKK30KKworZG9fZGVwbG95KCkgeworCToKK30KKworYWRkdGFzayBidW5kbGVfaW5pdHJhbWZzIGFmdGVyIGRvX2luc3RhbGwgYmVmb3JlIGRvX2RlcGxveQorYWRkdGFzayBkZXBsb3kgYWZ0ZXIgZG9faW5zdGFsbAorYWRkdGFzayBzaGFyZWRfd29ya2RpciBhZnRlciBkb19jb21waWxlIGJlZm9yZSBkb19pbnN0YWxsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtZHVtbXkvQ09QWUlORy5HUEwgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtZHVtbXkvQ09QWUlORy5HUEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxMTkwNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdW1teS9DT1BZSU5HLkdQTApAQCAtMCwwICsxLDMzOSBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmU0ODJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYgpAQCAtMCwwICsxLDUxIEBACisjIFRoaXMgcmVjaXBlIHRyYWNrcyB0aGUgbGludXgteW9jdG8tZGV2IHJlcG9zaXRvcnkgYXMgaXRzIHVwc3RyZWFtIHNvdXJjZS4KKyMgU2luY2UgdGhpcyB0cmVlIGlzIGZyZXF1ZW50bHkgdXBkYXRlZCwgYW5kIHBlcmlvZGljYWxseSByZWJ1aWx0LCBBVVRPUkVWIGlzCisjIHVzZWQgdG8gdHJhY2sgaXRzIGNvbnRlbnRzLgorIworIyBUaGlzIHJlY2lwZSBpcyBqdXN0IGxpa2Ugb3RoZXIgbGludXgteW9jdG8gdmFyaWFudHMsIHdpdGggdGhlIG9ubHkgZGlmZmVyZW5jZQorIyBiZWluZyB0aGF0IHRvIGF2b2lkIG5ldHdvcmsgYWNjZXNzIGR1cmluZyBpbml0aWFsIHBhcnNpbmcsIHN0YXRpYyBTUkNSRVZzIGFyZQorIyBwcm92aWRlZCBhbmQgb3ZlcnJpZGRlbiBpZiB0aGUgcHJlZmVycmVkIGtlcm5lbCBwcm92aWRlciBpcyBsaW51eC15b2N0by1kZXYuCisjCisjIFRvIGVuYWJsZSB0aGlzIHJlY2lwZSwgc2V0IFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA9ICJsaW51eC15b2N0by1kZXYiCisKK2luaGVyaXQga2VybmVsCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCisjIHByb3ZpZGUgdGhpcyAuaW5jIHRvIHNldCBzcGVjaWZpYyByZXZpc2lvbnMKK2luY2x1ZGUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LXJldmlzaW9ucy5pbmMKKworIyBTa2lwIHByb2Nlc3Npbmcgb2YgdGhpcyByZWNpcGUgaWYgaXQgaXMgbm90IGV4cGxpY2l0bHkgc3BlY2lmaWVkIGFzIHRoZQorIyBQUkVGRVJSRURfUFJPVklERVIgZm9yIHZpcnR1YWwva2VybmVsLiBUaGlzIGF2b2lkcyBuZXR3b3JrIGFjY2VzcyByZXF1aXJlZAorIyBieSB0aGUgdXNlIG9mIEFVVE9SRVYgU1JDUkVWcywgd2hpY2ggYXJlIHRoZSBkZWZhdWx0IGZvciB0aGlzIHJlY2lwZS4KK3B5dGhvbiAoKSB7CisgICAgaWYgZC5nZXRWYXIoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCIsIFRydWUpICE9ICJsaW51eC15b2N0by1kZXYiOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiU2V0IFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCB0byBsaW51eC15b2N0by1kZXYgdG8gZW5hYmxlIGl0IikKK30KKworS0JSQU5DSCA9ICJzdGFuZGFyZC9iYXNlIgorS01FVEEgPSAia2VybmVsLW1ldGEiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tZGV2LmdpdDticmFuY2g9JHtLQlJBTkNIfTtuYW1lPW1hY2hpbmUgXAorICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPW1hc3RlcjtkZXN0c3VmZml4PSR7S01FVEF9IgorCisjIFNldCBkZWZhdWx0IFNSQ1JFVnMuIEJvdGggdGhlIG1hY2hpbmUgYW5kIG1ldGEgU1JDUkVWcyBhcmUgc3RhdGljYWxseSBzZXQKKyMgdG8gdGhlIGtvcmcgdjMuNyB0YWcsIGFuZCBoZW5jZSBwcmV2ZW50IG5ldHdvcmsgYWNjZXNzIGR1cmluZyBwYXJzaW5nLiBJZgorIyBsaW51eC15b2N0by1kZXYgaXMgdGhlIHByZWZlcnJlZCBwcm92aWRlciwgdGhleSB3aWxsIGJlIG92ZXJyaWRkZW4gdG8KKyMgQVVUT1JFViBpbiBmb2xsb3dpbmcgYW5vbnltb3VzIHB5dGhvbiByb3V0aW5lIGFuZCByZXNvbHZlZCB3aGVuIHRoZQorIyB2YXJpYWJsZXMgYXJlIGZpbmFsaXplZC4KK1NSQ1JFVl9tYWNoaW5lID89ICcke0BvZS51dGlscy5jb25kaXRpb25hbCgiUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsIiwgImxpbnV4LXlvY3RvLWRldiIsICIke0FVVE9SRVZ9IiwgIjI5NTk0NDA0ZDdmZTczY2Q4MGVhYTRlZThjNDNkY2M1Mzk3MGM2MGUiLCBkKX0nCitTUkNSRVZfbWV0YSA/PSAnJHtAb2UudXRpbHMuY29uZGl0aW9uYWwoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCIsICJsaW51eC15b2N0by1kZXYiLCAiJHtBVVRPUkVWfSIsICIyOTU5NDQwNGQ3ZmU3M2NkODBlYWE0ZWU4YzQzZGNjNTM5NzBjNjBlIiwgZCl9JworCitMSU5VWF9WRVJTSU9OID89ICI0LjItcmMrIgorTElOVVhfVkVSU0lPTl9FWFRFTlNJT04gPz0gIi15b2N0b2Rldi0ke0xJTlVYX0tFUk5FTF9UWVBFfSIKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK0NPTVBBVElCTEVfTUFDSElORSA9ICIocWVtdWFybXxxZW11eDg2fHFlbXVwcGN8cWVtdW1pcHN8cWVtdW1pcHM2NHxxZW11eDg2LTY0KSIKKworIyBGdW5jdGlvbmFsaXR5IGZsYWdzCitLRVJORUxfRVhUUkFfRkVBVFVSRVMgPz0gImZlYXR1cmVzL25ldGZpbHRlci9uZXRmaWx0ZXIuc2NjIGZlYXR1cmVzL3Rhc2tzdGF0cy90YXNrc3RhdHMuc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZCA9ICIgJHtLRVJORUxfRVhUUkFfRkVBVFVSRVN9IgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Ni02ND0iIGNmZy9zb3VuZC5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIiBjZmcveDMyLnNjYyIsICIiICxkKX0iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQzZDVjOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiCkBAIC0wLDAgKzEsMjggQEAKK0tCUkFOQ0ggPz0gInN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIKK0tCUkFOQ0hfcWVtdXBwYyA/PSAic3RhbmRhcmQvcHJlZW1wdC1ydC9xZW11cHBjIgorCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCitTUkNSRVZfbWFjaGluZSA/PSAiODI4MTkxNTUyN2JhOGQ3OWU1OTkwNmMwMmYyOGU3YWExMTQyNDcyMyIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVwcGMgPz0gIjVlN2QzNzJlYmMzMjdmMjg2NTZmYzk3MmZhYjU1NjA1ZWVhOGFlYzMiCitTUkNSRVZfbWV0YSA/PSAiM2EwOWIzOGE5ZjUwMTVjNTZkOTlkMTdhYTdjMmYyMDBjNTY2MjQ5YiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by0zLjE0LmdpdDticmFuY2g9JHtLQlJBTkNIfTtuYW1lPW1hY2hpbmUgXAorICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTMuMTQ7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKKworTElOVVhfVkVSU0lPTiA/PSAiMy4xNC4zNiIKKworUFYgPSAiJHtMSU5VWF9WRVJTSU9OfStnaXQke1NSQ1BWfSIKKworS01FVEEgPSAia2VybmVsLW1ldGEiCitLQ09ORl9CU1BfQVVESVRfTEVWRUwgPSAiMiIKKworTElOVVhfS0VSTkVMX1RZUEUgPSAicHJlZW1wdC1ydCIKKworQ09NUEFUSUJMRV9NQUNISU5FID0gIihxZW11eDg2fHFlbXV4ODYtNjR8cWVtdWFybXxxZW11cHBjfHFlbXVtaXBzKSIKKworIyBGdW5jdGlvbmFsaXR5IGZsYWdzCitLRVJORUxfRVhUUkFfRkVBVFVSRVMgPz0gImZlYXR1cmVzL25ldGZpbHRlci9uZXRmaWx0ZXIuc2NjIGZlYXR1cmVzL3Rhc2tzdGF0cy90YXNrc3RhdHMuc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZCA9ICIgJHtLRVJORUxfRVhUUkFfRkVBVFVSRVN9IgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Ni02ND0iIGNmZy9zb3VuZC5zY2MiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfNC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjQ4M2MzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzQuMS5iYgpAQCAtMCwwICsxLDI2IEBACitLQlJBTkNIID89ICJzdGFuZGFyZC9wcmVlbXB0LXJ0IgorCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCitTUkNSRVZfbWFjaGluZSA/PSAiNTliOGM0ZjVlOGRkYjljMzNjNjJmZmYyMjIwNGZlMmIwZDhjNzAzZSIKK1NSQ1JFVl9tZXRhID89ICI0MjlmOWUyZmYwNjQ5YjhjOTM0MTM0NTYyMjU0NWQ4NzRkNWUzMDNhIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTQuMS5naXQ7YnJhbmNoPSR7S0JSQU5DSH07bmFtZT1tYWNoaW5lIFwKKyAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by00LjE7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKKworTElOVVhfVkVSU0lPTiA/PSAiNC4xLjYiCisKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK0tNRVRBID0gImtlcm5lbC1tZXRhIgorS0NPTkZfQlNQX0FVRElUX0xFVkVMID0gIjIiCisKK0xJTlVYX0tFUk5FTF9UWVBFID0gInByZWVtcHQtcnQiCisKK0NPTVBBVElCTEVfTUFDSElORSA9ICIocWVtdXg4NnxxZW11eDg2LTY0fHFlbXVhcm18cWVtdXBwY3xxZW11bWlwcykiCisKKyMgRnVuY3Rpb25hbGl0eSBmbGFncworS0VSTkVMX0VYVFJBX0ZFQVRVUkVTID89ICJmZWF0dXJlcy9uZXRmaWx0ZXIvbmV0ZmlsdGVyLnNjYyBmZWF0dXJlcy90YXNrc3RhdHMvdGFza3N0YXRzLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7S0VSTkVMX0VYVFJBX0ZFQVRVUkVTfSIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Nj0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODYtNjQ9IiBjZmcvc291bmQuc2NjIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEyYzgxNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmIKQEAgLTAsMCArMSwyMyBAQAorS0JSQU5DSCA/PSAic3RhbmRhcmQvdGlueS9iYXNlIgorTElOVVhfS0VSTkVMX1RZUEUgPSAidGlueSIKK0tDT05GSUdfTU9ERSA9ICItLWFsbG5vY29uZmlnIgorCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCitMSU5VWF9WRVJTSU9OID89ICIzLjE0LjM2IgorCitLTUVUQSA9ICJrZXJuZWwtbWV0YSIKK0tDT05GX0JTUF9BVURJVF9MRVZFTCA9ICIyIgorCitTUkNSRVZfbWFjaGluZSA/PSAiNTc4NjAyYTcyMmRiZmIyNjA4MDFmM2IzN2M2ZWFmZDJhYmIyMzQwZCIKK1NSQ1JFVl9tZXRhID89ICIzYTA5YjM4YTlmNTAxNWM1NmQ5OWQxN2FhN2MyZjIwMGM1NjYyNDliIgorCitQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTMuMTQuZ2l0O2JyYW5jaD0ke0tCUkFOQ0h9O25hbWU9bWFjaGluZTsgXAorICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTMuMTQ7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKKworQ09NUEFUSUJMRV9NQUNISU5FID0gIihxZW11eDg2KSIKKworIyBGdW5jdGlvbmFsaXR5IGZsYWdzCitLRVJORUxfRkVBVFVSRVMgPSAiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZhNThhMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmIKQEAgLTAsMCArMSwyMyBAQAorS0JSQU5DSCA/PSAic3RhbmRhcmQvdGlueS9iYXNlIgorTElOVVhfS0VSTkVMX1RZUEUgPSAidGlueSIKK0tDT05GSUdfTU9ERSA9ICItLWFsbG5vY29uZmlnIgorCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCitMSU5VWF9WRVJTSU9OID89ICIzLjE5LjUiCisKK0tNRVRBID0gImtlcm5lbC1tZXRhIgorS0NPTkZfQlNQX0FVRElUX0xFVkVMID0gIjIiCisKK1NSQ1JFVl9tYWNoaW5lID89ICJlMTUyMzQ5ZGU1OWI0M2IyYTc1ZjJjMzMyYjQ0MTcxZGY0NjFkNWEwIgorU1JDUkVWX21ldGEgPz0gIjEwMTY3MTQ4NjgyNDlkNjRmYzE2NjkyZmQ3Njc5NjcyYjFlZmExN2IiCisKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy4xOS5naXQ7YnJhbmNoPSR7S0JSQU5DSH07bmFtZT1tYWNoaW5lIFwKKyAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by0zLjE5O2Rlc3RzdWZmaXg9JHtLTUVUQX0iCisKK0NPTVBBVElCTEVfTUFDSElORSA9ICIocWVtdXg4NikiCisKKyMgRnVuY3Rpb25hbGl0eSBmbGFncworS0VSTkVMX0ZFQVRVUkVTID0gIiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjEyMDVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xLmJiCkBAIC0wLDAgKzEsMjMgQEAKK0tCUkFOQ0ggPz0gInN0YW5kYXJkL3RpbnkvYmFzZSIKK0xJTlVYX0tFUk5FTF9UWVBFID0gInRpbnkiCitLQ09ORklHX01PREUgPSAiLS1hbGxub2NvbmZpZyIKKworcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKKworTElOVVhfVkVSU0lPTiA/PSAiNC4xLjYiCisKK0tNRVRBID0gImtlcm5lbC1tZXRhIgorS0NPTkZfQlNQX0FVRElUX0xFVkVMID0gIjIiCisKK1NSQ1JFVl9tYWNoaW5lID89ICI1OWI4YzRmNWU4ZGRiOWMzM2M2MmZmZjIyMjA0ZmUyYjBkOGM3MDNlIgorU1JDUkVWX21ldGEgPz0gIjQyOWY5ZTJmZjA2NDliOGM5MzQxMzQ1NjIyNTQ1ZDg3NGQ1ZTMwM2EiCisKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tNC4xLmdpdDticmFuY2g9JHtLQlJBTkNIfTtuYW1lPW1hY2hpbmUgXAorICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTQuMTtkZXN0c3VmZml4PSR7S01FVEF9IgorCitDT01QQVRJQkxFX01BQ0hJTkUgPSAiKHFlbXV4ODYpIgorCisjIEZ1bmN0aW9uYWxpdHkgZmxhZ3MKK0tFUk5FTF9GRUFUVVJFUyA9ICIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjQxYTYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYwpAQCAtMCwwICsxLDUxIEBACitERVNDUklQVElPTiA9ICJZb2N0byBLZXJuZWwiCitTRUNUSU9OID0gImtlcm5lbCIKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ3ODEwZmFiNzQ4N2ZiMGFhZDMyN2I3NmYxYmU3Y2Q3IgorCitJTkNfUFIgPSAicjQiCisKK0RFUEVORFMgKz0gInh6LW5hdGl2ZSBiYy1uYXRpdmUiCitERVBFTkRTX2FwcGVuZF9hYXJjaDY0ID0gIiBsaWJnY2MiCitLRVJORUxfQ0NfYXBwZW5kX2FhcmNoNjQgPSAiICR7VE9PTENIQUlOX09QVElPTlN9IgorS0VSTkVMX0xEX2FwcGVuZF9hYXJjaDY0ID0gIiAke1RPT0xDSEFJTl9PUFRJT05TfSIKKworIyBBIEtNQUNISU5FIGlzIHRoZSBtYXBwaW5nIG9mIGEgeW9jdG8gJE1BQ0hJTkUgdG8gd2hhdCBpcyBidWlsdAorIyBieSB0aGUga2VybmVsLiBUaGlzIGlzIHR5cGljYWxseSB0aGUgYnJhbmNoIHRoYXQgc2hvdWxkIGJlIGJ1aWx0LAorIyBhbmQgaXQgY2FuIGJlIHNwZWNpZmljIHRvIHRoZSBtYWNoaW5lIG9yIHNoYXJlZAorIyBLTUFDSElORSA9ICJVTkRFRklORUQiCisKK0xJTlVYX0tFUk5FTF9UWVBFID89ICJzdGFuZGFyZCIKKworIyBLTUVUQSA/PSAiIgorS0JSQU5DSCA/PSAibWFzdGVyIgorS01BQ0hJTkUgPz0gIiR7TUFDSElORX0iCitTUkNSRVZfRk9STUFUID89ICJtZXRhX21hY2hpbmUiIAorCisjIExFVkVMUzoKKyMgICAwOiBubyByZXBvcnRpbmcKKyMgICAxOiByZXBvcnQgb3B0aW9ucyB0aGF0IGFyZSBzcGVjaWZpZWQsIGJ1dCBub3QgaW4gdGhlIGZpbmFsIGNvbmZpZworIyAgIDI6IHJlcG9ydCBvcHRpb25zIHRoYXQgYXJlIG5vdCBoYXJkd2FyZSByZWxhdGVkLCBidXQgc2V0IGJ5IGEgQlNQCitLQ09ORl9BVURJVF9MRVZFTCA/PSAiMSIKK0tDT05GX0JTUF9BVURJVF9MRVZFTCA/PSAiMCIKKworTElOVVhfVkVSU0lPTl9FWFRFTlNJT04gPz0gIi15b2N0by0ke0xJTlVYX0tFUk5FTF9UWVBFfSIKKworIyBQaWNrIHVwIHNoYXJlZCBmdW5jdGlvbnMKK2luaGVyaXQga2VybmVsCitpbmhlcml0IGtlcm5lbC15b2N0bworcmVxdWlyZSBsaW51eC1kdGIuaW5jCisKK0IgPSAiJHtXT1JLRElSfS9saW51eC0ke1BBQ0tBR0VfQVJDSH0tJHtMSU5VWF9LRVJORUxfVFlQRX0tYnVpbGQiCisKK2RvX2luc3RhbGxfYXBwZW5kKCl7CisJaWYgWyAtbiAiJHtLTUVUQX0iIF07IHRoZW4KKwkJcm0gLXJmICR7U1RBR0lOR19LRVJORUxfRElSfS8ke0tNRVRBfQorCWZpCit9CisKKyMgZXh0cmEgdGFza3MKK2FkZHRhc2sga2VybmVsX2xpbmtfdm1saW51eCBhZnRlciBkb19jb21waWxlIGJlZm9yZSBkb19pbnN0YWxsCithZGR0YXNrIHZhbGlkYXRlX2JyYW5jaGVzIGJlZm9yZSBkb19wYXRjaCBhZnRlciBkb19rZXJuZWxfY2hlY2tvdXQKK2FkZHRhc2sga2VybmVsX2NvbmZpZ2NoZWNrIGFmdGVyIGRvX2NvbmZpZ3VyZSBiZWZvcmUgZG9fY29tcGlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmIyZTVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmIKQEAgLTAsMCArMSw0MSBAQAorS0JSQU5DSCA/PSAic3RhbmRhcmQvYmFzZSIKKworcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKKworIyBib2FyZCBzcGVjaWZpYyBicmFuY2hlcworS0JSQU5DSF9xZW11YXJtICA/PSAic3RhbmRhcmQvYXJtLXZlcnNhdGlsZS05MjZlanMiCitLQlJBTkNIX3FlbXVhcm02NCA/PSAic3RhbmRhcmQvcWVtdWFybTY0IgorS0JSQU5DSF9xZW11bWlwcyA/PSAic3RhbmRhcmQvbXRpLW1hbHRhMzIiCitLQlJBTkNIX3FlbXVwcGMgID89ICJzdGFuZGFyZC9xZW11cHBjIgorS0JSQU5DSF9xZW11eDg2ICA/PSAic3RhbmRhcmQvY29tbW9uLXBjL2Jhc2UiCitLQlJBTkNIX3FlbXV4ODYtNjQgPz0gInN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIgorS0JSQU5DSF9xZW11bWlwczY0ID89ICJzdGFuZGFyZC9tdGktbWFsdGE2NCIKKworU1JDUkVWX21hY2hpbmVfcWVtdWFybSA/PSAiNDgxNzc0NzkxMmI1YzUwY2U1YzMxZWYyNTY1ODM0MGNhNjE1ZTFiNCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVhcm02NCA/PSAiNTc4NjAyYTcyMmRiZmIyNjA4MDFmM2IzN2M2ZWFmZDJhYmIyMzQwZCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVtaXBzID89ICI2ZWQ3NmVjMjZiMTIwZjY1Zjg1NDdjODYxMmI3MzM0YmQyNzQ1ZWM5IgorU1JDUkVWX21hY2hpbmVfcWVtdXBwYyA/PSAiYTg2YWRlODRiMmUxNDJjMGZkNzUzNmQ5NjQ3NzEwN2I2ZDA3ZGI1YyIKK1NSQ1JFVl9tYWNoaW5lX3FlbXV4ODYgPz0gImFmMWY3ZjU4NmJkMzJkMzljMDU3ZjE3NjA2OTkxYjg4N2VhZGIzODkiCitTUkNSRVZfbWFjaGluZV9xZW11eDg2LTY0ID89ICI1Nzg2MDJhNzIyZGJmYjI2MDgwMWYzYjM3YzZlYWZkMmFiYjIzNDBkIgorU1JDUkVWX21hY2hpbmVfcWVtdW1pcHM2NCA/PSAiYTYzZDQwYjg2MGE2ZDI1NTAwNWE1NDE4OTRkNTM3MjkwOTBiNDBlYSIKK1NSQ1JFVl9tYWNoaW5lID89ICI1Nzg2MDJhNzIyZGJmYjI2MDgwMWYzYjM3YzZlYWZkMmFiYjIzNDBkIgorU1JDUkVWX21ldGEgPz0gIjNhMDliMzhhOWY1MDE1YzU2ZDk5ZDE3YWE3YzJmMjAwYzU2NjI0OWIiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy4xNC5naXQ7YnJhbmNoPSR7S0JSQU5DSH07bmFtZT1tYWNoaW5lOyBcCisgICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC1jYWNoZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9eW9jdG8tMy4xNDtkZXN0c3VmZml4PSR7S01FVEF9IgorCitMSU5VWF9WRVJTSU9OID89ICIzLjE0LjM2IgorCitQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgorCitLTUVUQSA9ICJrZXJuZWwtbWV0YSIKK0tDT05GX0JTUF9BVURJVF9MRVZFTCA9ICIyIgorCitDT01QQVRJQkxFX01BQ0hJTkUgPSAicWVtdWFybXxxZW11YXJtNjR8cWVtdXg4NnxxZW11cHBjfHFlbXVtaXBzfHFlbXVtaXBzNjR8cWVtdXg4Ni02NCIKKworIyBGdW5jdGlvbmFsaXR5IGZsYWdzCitLRVJORUxfRVhUUkFfRkVBVFVSRVMgPz0gImZlYXR1cmVzL25ldGZpbHRlci9uZXRmaWx0ZXIuc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZCA9ICIgJHtLRVJORUxfRVhUUkFfRkVBVFVSRVN9IgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Ni02ND0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIiBjZmcveDMyLnNjYyIsICIiICxkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YzE2NDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYgpAQCAtMCwwICsxLDQxIEBACitLQlJBTkNIID89ICJzdGFuZGFyZC9iYXNlIgorCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCisjIGJvYXJkIHNwZWNpZmljIGJyYW5jaGVzCitLQlJBTkNIX3FlbXVhcm0gID89ICJzdGFuZGFyZC9hcm0tdmVyc2F0aWxlLTkyNmVqcyIKK0tCUkFOQ0hfcWVtdWFybTY0ID89ICJzdGFuZGFyZC9xZW11YXJtNjQiCitLQlJBTkNIX3FlbXVtaXBzID89ICJzdGFuZGFyZC9tdGktbWFsdGEzMiIKK0tCUkFOQ0hfcWVtdXBwYyAgPz0gInN0YW5kYXJkL3FlbXVwcGMiCitLQlJBTkNIX3FlbXV4ODYgID89ICJzdGFuZGFyZC9jb21tb24tcGMiCitLQlJBTkNIX3FlbXV4ODYtNjQgPz0gInN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIgorS0JSQU5DSF9xZW11bWlwczY0ID89ICJzdGFuZGFyZC9tdGktbWFsdGE2NCIKKworU1JDUkVWX21hY2hpbmVfcWVtdWFybSA/PSAiOTYzYjRkZjY2M2RiYTI1ODRhYzg2NGUwYzAxNjgyNWRlMDA0NjU1OCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVhcm02NCA/PSAiZTE1MjM0OWRlNTliNDNiMmE3NWYyYzMzMmI0NDE3MWRmNDYxZDVhMCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVtaXBzID89ICJjZWRiYmM3YjVlNzJkZjJlODIwYmI5ZTc4ODVmMTIxMzJjNWUyZmZmIgorU1JDUkVWX21hY2hpbmVfcWVtdXBwYyA/PSAiMjNhODMzODZlMTA5ODZhNjNlNmNlZjcxMmEwNDU0NDU0OTlkMDAyYiIKK1NSQ1JFVl9tYWNoaW5lX3FlbXV4ODYgPz0gImUxNTIzNDlkZTU5YjQzYjJhNzVmMmMzMzJiNDQxNzFkZjQ2MWQ1YTAiCitTUkNSRVZfbWFjaGluZV9xZW11eDg2LTY0ID89ICJlMTUyMzQ5ZGU1OWI0M2IyYTc1ZjJjMzMyYjQ0MTcxZGY0NjFkNWEwIgorU1JDUkVWX21hY2hpbmVfcWVtdW1pcHM2NCA/PSAiM2ViNzBjZWEzNTMyZTIyYWIxYjZkYTk4NjQ0NDY2MjEyMjllNjYxNiIKK1NSQ1JFVl9tYWNoaW5lID89ICJlMTUyMzQ5ZGU1OWI0M2IyYTc1ZjJjMzMyYjQ0MTcxZGY0NjFkNWEwIgorU1JDUkVWX21ldGEgPz0gIjEwMTY3MTQ4NjgyNDlkNjRmYzE2NjkyZmQ3Njc5NjcyYjFlZmExN2IiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy4xOS5naXQ7bmFtZT1tYWNoaW5lO2JyYW5jaD0ke0tCUkFOQ0h9OyBcCisgICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC1jYWNoZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9eW9jdG8tMy4xOTtkZXN0c3VmZml4PSR7S01FVEF9IgorCitMSU5VWF9WRVJTSU9OID89ICIzLjE5LjUiCisKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK0tNRVRBID0gImtlcm5lbC1tZXRhIgorS0NPTkZfQlNQX0FVRElUX0xFVkVMID0gIjIiCisKK0NPTVBBVElCTEVfTUFDSElORSA9ICJxZW11YXJtfHFlbXVhcm02NHxxZW11eDg2fHFlbXVwcGN8cWVtdW1pcHN8cWVtdW1pcHM2NHxxZW11eDg2LTY0IgorCisjIEZ1bmN0aW9uYWxpdHkgZmxhZ3MKK0tFUk5FTF9FWFRSQV9GRUFUVVJFUyA/PSAiZmVhdHVyZXMvbmV0ZmlsdGVyL25ldGZpbHRlci5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0tFUk5FTF9FWFRSQV9GRUFUVVJFU30iCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODY9IiBjZmcvc291bmQuc2NjIGNmZy9wYXJhdmlydF9rdm0uc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2LTY0PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm14MzIiLCAiIGNmZy94MzIuc2NjIiwgIiIgLGQpfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZDQ2MTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xLmJiCkBAIC0wLDAgKzEsNDEgQEAKK0tCUkFOQ0ggPz0gInN0YW5kYXJkL2Jhc2UiCisKK3JlcXVpcmUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCisKKyMgYm9hcmQgc3BlY2lmaWMgYnJhbmNoZXMKK0tCUkFOQ0hfcWVtdWFybSAgPz0gInN0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIgorS0JSQU5DSF9xZW11YXJtNjQgPz0gInN0YW5kYXJkL3FlbXVhcm02NCIKK0tCUkFOQ0hfcWVtdW1pcHMgPz0gInN0YW5kYXJkL210aS1tYWx0YTMyIgorS0JSQU5DSF9xZW11cHBjICA/PSAic3RhbmRhcmQvcWVtdXBwYyIKK0tCUkFOQ0hfcWVtdXg4NiAgPz0gInN0YW5kYXJkL2Jhc2UiCitLQlJBTkNIX3FlbXV4ODYtNjQgPz0gInN0YW5kYXJkL2Jhc2UiCitLQlJBTkNIX3FlbXVtaXBzNjQgPz0gInN0YW5kYXJkL210aS1tYWx0YTY0IgorCitTUkNSRVZfbWFjaGluZV9xZW11YXJtID89ICIzYzEyNDVkMTYyY2NiNTVkZTFhZjQyYmNmM2RiZjY5MDQ1N2JmOWU0IgorU1JDUkVWX21hY2hpbmVfcWVtdWFybTY0ID89ICI1OWI4YzRmNWU4ZGRiOWMzM2M2MmZmZjIyMjA0ZmUyYjBkOGM3MDNlIgorU1JDUkVWX21hY2hpbmVfcWVtdW1pcHMgPz0gIjQxMzJhNjkxZDA5MDhkMTBiOGYwN2NlN2VjZTAyZTZkYzk0ZTE3YmMiCitTUkNSRVZfbWFjaGluZV9xZW11cHBjID89ICI1OWI4YzRmNWU4ZGRiOWMzM2M2MmZmZjIyMjA0ZmUyYjBkOGM3MDNlIgorU1JDUkVWX21hY2hpbmVfcWVtdXg4NiA/PSAiNTliOGM0ZjVlOGRkYjljMzNjNjJmZmYyMjIwNGZlMmIwZDhjNzAzZSIKK1NSQ1JFVl9tYWNoaW5lX3FlbXV4ODYtNjQgPz0gIjU5YjhjNGY1ZThkZGI5YzMzYzYyZmZmMjIyMDRmZTJiMGQ4YzcwM2UiCitTUkNSRVZfbWFjaGluZV9xZW11bWlwczY0ID89ICIwMzNlMWFhNjMzNDY1NDQ5ZWRmNTQ0ZWI4MWFkZGEwY2FmMTZlYzYwIgorU1JDUkVWX21hY2hpbmUgPz0gIjU5YjhjNGY1ZThkZGI5YzMzYzYyZmZmMjIyMDRmZTJiMGQ4YzcwM2UiCitTUkNSRVZfbWV0YSA/PSAiNDI5ZjllMmZmMDY0OWI4YzkzNDEzNDU2MjI1NDVkODc0ZDVlMzAzYSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by00LjEuZ2l0O25hbWU9bWFjaGluZTticmFuY2g9JHtLQlJBTkNIfTsgXAorICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTQuMTtkZXN0c3VmZml4PSR7S01FVEF9IgorCitMSU5VWF9WRVJTSU9OID89ICI0LjEuNiIKKworUFYgPSAiJHtMSU5VWF9WRVJTSU9OfStnaXQke1NSQ1BWfSIKKworS01FVEEgPSAia2VybmVsLW1ldGEiCitLQ09ORl9CU1BfQVVESVRfTEVWRUwgPSAiMiIKKworQ09NUEFUSUJMRV9NQUNISU5FID0gInFlbXVhcm18cWVtdWFybTY0fHFlbXV4ODZ8cWVtdXBwY3xxZW11bWlwc3xxZW11bWlwczY0fHFlbXV4ODYtNjQiCisKKyMgRnVuY3Rpb25hbGl0eSBmbGFncworS0VSTkVMX0VYVFJBX0ZFQVRVUkVTID89ICJmZWF0dXJlcy9uZXRmaWx0ZXIvbmV0ZmlsdGVyLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7S0VSTkVMX0VYVFJBX0ZFQVRVUkVTfSIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Nj0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODYtNjQ9IiBjZmcvc291bmQuc2NjIGNmZy9wYXJhdmlydF9rdm0uc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibXgzMiIsICIgY2ZnL3gzMi5zY2MiLCAiIiAsZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2UvMDAwMS1GaXgtaW52YWxpZC1wb2ludGVyLWZyZWUtd2l0aC10cmFjZS1jb2xsZWN0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2UvMDAwMS1GaXgtaW52YWxpZC1wb2ludGVyLWZyZWUtd2l0aC10cmFjZS1jb2xsZWN0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMmM0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvYmFiZWx0cmFjZS8wMDAxLUZpeC1pbnZhbGlkLXBvaW50ZXItZnJlZS13aXRoLXRyYWNlLWNvbGxlY3Rpb24ucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorRnJvbSBlNGNhZDkwMDk5NGNmMjg2ZDk3MTc5NmE5NDdmZWE3ODJkZmM2NjUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRnJhbmNpcyBHaXJhbGRlYXUgPGZyYW5jaXMuZ2lyYWxkZWF1QGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTUgSnVuIDIwMTUgMTE6NDM6MDIgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IGludmFsaWQgcG9pbnRlciBmcmVlIHdpdGggdHJhY2UgY29sbGVjdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitQYXRjaCBwcm9wb3NlZCBieSBMaSBSb25nUWluZyByZWxhdGVkIHRvIGJ1ZyMgNzkwCisKK1NpZ25lZC1vZmYtYnk6IE1pa2FlbCBCZWNraXVzIDxtaWthZWwuYmVja2l1c0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogRnJhbmNpcyBHaXJhbGRlYXUgPGZyYW5jaXMuZ2lyYWxkZWF1QGdtYWlsLmNvbT4KKy0tLQorIGxpYi9jb250ZXh0LmMgfCA4ICsrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9jb250ZXh0LmMgYi9saWIvY29udGV4dC5jCitpbmRleCA0NWFhYjM0Li44ZDM3NzBmIDEwMDY0NAorLS0tIGEvbGliL2NvbnRleHQuYworKysrIGIvbGliL2NvbnRleHQuYworQEAgLTc5LDcgKzc5LDcgQEAgaW50IGJ0X2NvbnRleHRfYWRkX3RyYWNlKHN0cnVjdCBidF9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKnBhdGgsCisgCXN0cnVjdCBidF90cmFjZV9kZXNjcmlwdG9yICp0ZDsKKyAJc3RydWN0IGJ0X2Zvcm1hdCAqZm10OworIAlzdHJ1Y3QgYnRfdHJhY2VfaGFuZGxlICpoYW5kbGU7CistCWludCByZXQsIGNsb3NlcmV0OworKwlpbnQgcmV0OworIAorIAlpZiAoIWN0eCB8fCAhZm9ybWF0X25hbWUgfHwgKCFwYXRoICYmICFzdHJlYW1fbGlzdCkpCisgCQlyZXR1cm4gLUVJTlZBTDsKK0BAIC0xNTksMTAgKzE1OSw4IEBAIGludCBidF9jb250ZXh0X2FkZF90cmFjZShzdHJ1Y3QgYnRfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpwYXRoLAorIAlyZXR1cm4gaGFuZGxlLT5pZDsKKyAKKyBlcnJvcjoKKy0JY2xvc2VyZXQgPSBmbXQtPmNsb3NlX3RyYWNlKHRkKTsKKy0JaWYgKGNsb3NlcmV0KSB7CistCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGluIGNsb3NlX3RyYWNlIGNhbGxiYWNrXG4iKTsKKy0JfQorKwlpZiAoaGFuZGxlKQorKwkJYnRfY29udGV4dF9yZW1vdmVfdHJhY2UoY3R4LCBoYW5kbGUtPmlkKTsKKyBlbmQ6CisgCXJldHVybiByZXQ7CisgfQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvYmFiZWx0cmFjZV8xLjIuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9iYWJlbHRyYWNlXzEuMi40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNmJlNDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvYmFiZWx0cmFjZV8xLjIuNC5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIkJhYmVsdHJhY2UgLSBUcmFjZSBGb3JtYXQgQmFiZWwgVG93ZXIiCitERVNDUklQVElPTiA9ICJCYWJlbHRyYWNlIHByb3ZpZGVzIHRyYWNlIHJlYWQgYW5kIHdyaXRlIGxpYnJhcmllcyBpbiBob3N0IHNpZGUsIGFzIHdlbGwgYXMgYSB0cmFjZSBjb252ZXJ0ZXIsIHdoaWNoIHVzZWQgdG8gY29udmVydCBMVFRuZyAyLjAgdHJhY2VzIGludG8gaHVtYW4tcmVhZGFibGUgbG9nLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZWZmaWNpb3MuY29tL2JhYmVsdHJhY2UvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MubHR0bmcub3JnL3Byb2plY3RzL2JhYmVsdHJhY2UiCisKK0xJQ0VOU0UgPSAiTUlUICYgR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT03NmJhMTVkZDc2YTI0OGUxZGQ1MjZiY2EwZTIxMjVmYSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgdXRpbC1saW51eCBwb3B0IGJpc29uLW5hdGl2ZSBmbGV4LW5hdGl2ZSIKKworU1JDUkVWID0gIjkwMzk1ODI0ZWZjMDA3ZGU4ODc4N2E2YjhlNDAwYTA3Yzk4MGJlMWMiCitQViA9ICIxLjIuNCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQuZWZmaWNpb3MuY29tL2JhYmVsdHJhY2UuZ2l0O2JyYW5jaD1zdGFibGUtMS4yIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWludmFsaWQtcG9pbnRlci1mcmVlLXdpdGgtdHJhY2UtY29sbGVjdGlvbi5wYXRjaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkoIGNkICR7U307ICR7U30vYm9vdHN0cmFwICkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy1tb2R1bGVzX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy1tb2R1bGVzX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDU0NGZlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLW1vZHVsZXNfZ2l0LmJiCkBAIC0wLDAgKzEsMzMgQEAKK1NFQ1RJT04gPSAiZGV2ZWwiCitTVU1NQVJZID0gIkxpbnV4IFRyYWNlIFRvb2xraXQgS0VSTkVMIE1PRFVMRSIKK0RFU0NSSVBUSU9OID0gIlRoZSBsdHRuZy1tb2R1bGVzIDIuMCBwYWNrYWdlIGNvbnRhaW5zIHRoZSBrZXJuZWwgdHJhY2VyIG1vZHVsZXMiCitMSUNFTlNFID0gIkxHUEx2Mi4xICYgR1BMdjIgJiBNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0xNDEyY2FmNWExYWE5MGQ2YTQ4NTg4YTQ3OTRjMGVhYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9ncGwtMi4wLnR4dDttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGdwbC0yLjEudHh0O21kNT0yNDNiNzI1ZDcxYmI1ZGY0YTFlNTkyMGIzNDRiODZhZCIKKworaW5oZXJpdCBtb2R1bGUKKworU1JDUkVWID0gIjdhODhmOGI1MDY5NmRkNzFlODBjMDg2NjExNTljYWY4ZTExOWJmNTEiCitQViA9ICIyLjYuMitnaXQke1NSQ1BWfSIKKworQ09NUEFUSUJMRV9IT1NUID0gJyh4ODZfNjR8aS44Nnxwb3dlcnBjfGFhcmNoNjR8bWlwc3xhcm0pLiotbGludXgnCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmx0dG5nLm9yZy9sdHRuZy1tb2R1bGVzLmdpdDticmFuY2g9c3RhYmxlLTIuNiIKKworZXhwb3J0IElOU1RBTExfTU9EX0RJUj0ia2VybmVsL2x0dG5nLW1vZHVsZXMiCisKK0VYVFJBX09FTUFLRSArPSAiS0VSTkVMRElSPScke1NUQUdJTkdfS0VSTkVMX0RJUn0nIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIERlbGV0ZSBlbXB0eSBkaXJlY3RvcmllcyB0byBhdm9pZCBRQSBmYWlsdXJlcyBpZiBubyBtb2R1bGVzIHdlcmUgYnVpbHQKKwlmaW5kICR7RH0vbGliIC1kZXB0aCAtdHlwZSBkIC1lbXB0eSAtZXhlYyBybWRpciB7fSBcOworfQorCitweXRob24gZG9fcGFja2FnZV9wcmVwZW5kKCkgeworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0QnLCBUcnVlKSwgJ2xpYi9tb2R1bGVzJykpOgorICAgICAgICBiYi53YXJuKCIlczogbm8gbW9kdWxlcyB3ZXJlIGNyZWF0ZWQ7IHRoaXMgbWF5IGJlIGR1ZSB0byBDT05GSUdfVFJBQ0VQT0lOVFMgbm90IGJlaW5nIGVuYWJsZWQgaW4geW91ciBrZXJuZWwuIiAlIGQuZ2V0VmFyKCdQTicsIFRydWUpKQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvZXh0ZXJuLWRlY2xzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL2V4dGVybi1kZWNscy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTllZjU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL2V4dGVybi1kZWNscy5wYXRjaApAQCAtMCwwICsxLDQ0MiBAQAorVGhpcyBtYWtlIHRoZSBkZWNsYXJhdGlvbnMgdG8gYmUgZXh0ZXJuIHNvIHRoZXkgZG9udCBlbmQgdXAKK2luIGR1cGxpY2F0ZXMgaW4gZGF0YS5yZWwucm8gc2VjdGlvbnMKKworYXZvaWQgZXJyb3JzIGxpa2UKKworfCAuLi8uLi8uLi9zcmMvY29tbW9uLy5saWJzL2xpYmNvbW1vbi5hKG1pLWx0dG5nLm8pOiguZGF0YS5yZWwucm8ubG9jYWwrMHgwKTogbXVsdGlwbGUgZGVmaW5pdGlvbiBvZiBgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdHMnCit8IGNvbW1hbmRzL2VuYWJsZV9ldmVudHMubzooLmJzcysweDQ4KTogZmlyc3QgZGVmaW5lZCBoZXJlCit8IGNvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworfCBNYWtlZmlsZTo1MDI6IHJlY2lwZSBmb3IgdGFyZ2V0ICdsdHRuZycgZmFpbGVkCit8IG1ha2VbM106ICoqKiBbbHR0bmddIEVycm9yIDEKKworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBnaXQvc3JjL2NvbW1vbi9jb25maWcvY29uZmlnLXNlc3Npb24tYWJpLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zcmMvY29tbW9uL2NvbmZpZy9jb25maWctc2Vzc2lvbi1hYmkuaAorKysrIGdpdC9zcmMvY29tbW9uL2NvbmZpZy9jb25maWctc2Vzc2lvbi1hYmkuaAorQEAgLTE4LDk1ICsxOCw5NSBAQAorICNpZm5kZWYgQ09ORklHX1NFU1NJT05fSU5URVJOQUxfSAorICNkZWZpbmUgQ09ORklHX1NFU1NJT05fSU5URVJOQUxfSAorIAorLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jaGFubmVsOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jaGFubmVsczsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZG9tYWluOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9kb21haW5zOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9ldmVudDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZXZlbnRzOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jb250ZXh0OworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jb250ZXh0czsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfYXR0cmlidXRlczsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZXhjbHVzaW9uOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9leGNsdXNpb25zOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9mdW5jdGlvbl9hdHRyaWJ1dGVzOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9wcm9iZV9hdHRyaWJ1dGVzOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zeW1ib2xfbmFtZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfYWRkcmVzczsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfb2Zmc2V0OworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9uYW1lOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9lbmFibGVkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9vdmVyd3JpdGVfbW9kZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc3ViYnVmX3NpemU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X251bV9zdWJidWY7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3N3aXRjaF90aW1lcl9pbnRlcnZhbDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfcmVhZF90aW1lcl9pbnRlcnZhbDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfb3V0cHV0OworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9vdXRwdXRfdHlwZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfdHJhY2VmaWxlX3NpemU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3RyYWNlZmlsZV9jb3VudDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfbGl2ZV90aW1lcl9pbnRlcnZhbDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfdHlwZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfYnVmZmVyX3R5cGU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3Nlc3Npb247CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3Nlc3Npb25zOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9wZXJmOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jb25maWc7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3N0YXJ0ZWQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3NuYXBzaG90X21vZGU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2xvZ2xldmVsOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9sb2dsZXZlbF90eXBlOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9maWx0ZXI7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3NuYXBzaG90X291dHB1dHM7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NvbnN1bWVyX291dHB1dDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZGVzdGluYXRpb247CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3BhdGg7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X25ldF9vdXRwdXQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NvbnRyb2xfdXJpOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9kYXRhX3VyaTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfbWF4X3NpemU7CistCistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19kb21haW5fdHlwZV9rZXJuZWw7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19kb21haW5fdHlwZV91c3Q7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19kb21haW5fdHlwZV9qdWw7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19kb21haW5fdHlwZV9sb2c0ajsKKy0KKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2J1ZmZlcl90eXBlX3Blcl9waWQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19idWZmZXJfdHlwZV9wZXJfdWlkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfYnVmZmVyX3R5cGVfZ2xvYmFsOworLQorLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfb3ZlcndyaXRlX21vZGVfZGlzY2FyZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX292ZXJ3cml0ZV9tb2RlX292ZXJ3cml0ZTsKKy0KKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX291dHB1dF90eXBlX3NwbGljZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX291dHB1dF90eXBlX21tYXA7CistCistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19sb2dsZXZlbF90eXBlX2FsbDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2xvZ2xldmVsX3R5cGVfcmFuZ2U7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19sb2dsZXZlbF90eXBlX3NpbmdsZTsKKy0KKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfYWxsOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV90cmFjZXBvaW50OworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9wcm9iZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfZnVuY3Rpb247CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX2Z1bmN0aW9uX2VudHJ5OworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9ub29wOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9zeXNjYWxsOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9rcHJvYmU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX2tyZXRwcm9iZTsKKy0KKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfcGlkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9wcm9jbmFtZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfcHJpbzsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfbmljZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfdnBpZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfdGlkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF92dGlkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9wcGlkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF92cHBpZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfcHRocmVhZF9pZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfaG9zdG5hbWU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X2lwOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9wZXJmX3RocmVhZF9jb3VudGVyOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY2hhbm5lbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NoYW5uZWxzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZG9tYWluOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZG9tYWluczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2V2ZW50OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZXZlbnRzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY29udGV4dDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NvbnRleHRzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfYXR0cmlidXRlczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2V4Y2x1c2lvbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2V4Y2x1c2lvbnM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9mdW5jdGlvbl9hdHRyaWJ1dGVzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfcHJvYmVfYXR0cmlidXRlczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3N5bWJvbF9uYW1lOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfYWRkcmVzczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X29mZnNldDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X25hbWU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9lbmFibGVkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfb3ZlcndyaXRlX21vZGU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zdWJidWZfc2l6ZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X251bV9zdWJidWY7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zd2l0Y2hfdGltZXJfaW50ZXJ2YWw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9yZWFkX3RpbWVyX2ludGVydmFsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfb3V0cHV0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfb3V0cHV0X3R5cGU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF90cmFjZWZpbGVfc2l6ZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3RyYWNlZmlsZV9jb3VudDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2xpdmVfdGltZXJfaW50ZXJ2YWw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF90eXBlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfYnVmZmVyX3R5cGU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zZXNzaW9uOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc2Vzc2lvbnM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9wZXJmOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY29uZmlnOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc3RhcnRlZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3NuYXBzaG90X21vZGU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9sb2dsZXZlbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2xvZ2xldmVsX3R5cGU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9maWx0ZXI7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zbmFwc2hvdF9vdXRwdXRzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY29uc3VtZXJfb3V0cHV0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZGVzdGluYXRpb247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9wYXRoOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfbmV0X291dHB1dDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NvbnRyb2xfdXJpOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZGF0YV91cmk7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9tYXhfc2l6ZTsKKysKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19kb21haW5fdHlwZV9rZXJuZWw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZG9tYWluX3R5cGVfdXN0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2RvbWFpbl90eXBlX2p1bDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19kb21haW5fdHlwZV9sb2c0ajsKKysKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19idWZmZXJfdHlwZV9wZXJfcGlkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2J1ZmZlcl90eXBlX3Blcl91aWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfYnVmZmVyX3R5cGVfZ2xvYmFsOworKworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX292ZXJ3cml0ZV9tb2RlX2Rpc2NhcmQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfb3ZlcndyaXRlX21vZGVfb3ZlcndyaXRlOworKworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX291dHB1dF90eXBlX3NwbGljZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19vdXRwdXRfdHlwZV9tbWFwOworKworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2xvZ2xldmVsX3R5cGVfYWxsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2xvZ2xldmVsX3R5cGVfcmFuZ2U7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfbG9nbGV2ZWxfdHlwZV9zaW5nbGU7CisrCisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9hbGw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV90cmFjZXBvaW50OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfcHJvYmU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9mdW5jdGlvbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX2Z1bmN0aW9uX2VudHJ5OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfbm9vcDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX3N5c2NhbGw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9rcHJvYmU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9rcmV0cHJvYmU7CisrCisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9waWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9wcm9jbmFtZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3ByaW87CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9uaWNlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfdnBpZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3RpZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3Z0aWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9wcGlkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfdnBwaWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9wdGhyZWFkX2lkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfaG9zdG5hbWU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9pcDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3BlcmZfdGhyZWFkX2NvdW50ZXI7CisgCisgI2VuZGlmIC8qIENPTkZJR19TRVNTSU9OX0lOVEVSTkFMX0ggKi8KK0luZGV4OiBnaXQvc3JjL2NvbW1vbi9taS1sdHRuZy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3JjL2NvbW1vbi9taS1sdHRuZy5oCisrKysgZ2l0L3NyYy9jb21tb24vbWktbHR0bmcuaAorQEAgLTQ5LDEzMyArNDksMTMzIEBAIHN0cnVjdCBtaV9sdHRuZ192ZXJzaW9uIHsKKyB9OworIAorIC8qIFN0cmluZ3MgcmVsYXRlZCB0byBjb21tYW5kICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2FjdGlvbjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2FkZF9jb250ZXh0OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfY2FsaWJyYXRlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfY3JlYXRlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfZGVzdHJveTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2Rpc2FibGVfY2hhbm5lbDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2Rpc2FibGVfZXZlbnQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9lbmFibGVfY2hhbm5lbHM7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9lbmFibGVfZXZlbnQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9saXN0OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfbG9hZDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX25hbWU7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9vdXRwdXQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zYXZlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc2V0X3Nlc3Npb247CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zbmFwc2hvdDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NuYXBzaG90X2FkZDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NuYXBzaG90X2RlbDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NuYXBzaG90X2xpc3Q7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zbmFwc2hvdF9yZWNvcmQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zdGFydDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3N0b3A7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zdWNjZXNzOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfdmVyc2lvbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9hY3Rpb247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfYWRkX2NvbnRleHQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfY2FsaWJyYXRlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2NyZWF0ZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9kZXN0cm95OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2Rpc2FibGVfY2hhbm5lbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9kaXNhYmxlX2V2ZW50OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2VuYWJsZV9jaGFubmVsczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9lbmFibGVfZXZlbnQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfbGlzdDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9sb2FkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX25hbWU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfb3V0cHV0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NhdmU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc2V0X3Nlc3Npb247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc25hcHNob3Q7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc25hcHNob3RfYWRkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NuYXBzaG90X2RlbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zbmFwc2hvdF9saXN0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NuYXBzaG90X3JlY29yZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zdGFydDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zdG9wOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3N1Y2Nlc3M7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfdmVyc2lvbjsKKyAKKyAvKiBTdHJpbmdzIHJlbGF0ZWQgdG8gdmVyc2lvbiBjb21tYW5kICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX2NvbW1pdDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX2Rlc2NyaXB0aW9uOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fbGljZW5zZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX21ham9yOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fbWlub3I7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9wYXRjaF9sZXZlbDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX3N0cjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX3dlYjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9jb21taXQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fZGVzY3JpcHRpb247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fbGljZW5zZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9tYWpvcjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9taW5vcjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9wYXRjaF9sZXZlbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9zdHI7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fd2ViOworIAorIC8qIFN0cmluZyByZWxhdGVkIHRvIGEgbHR0bmdfZXZlbnRfZmllbGQgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9ldmVudF9maWVsZDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9ldmVudF9maWVsZHM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2V2ZW50X2ZpZWxkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9ldmVudF9maWVsZHM7CisgCisgLyogU3RyaW5nIHJlbGF0ZWQgdG8gbHR0bmdfZXZlbnRfY29udGV4dCAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19jb250ZXh0X3R5cGVfcGVyZl9jb3VudGVyOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19jb250ZXh0X3R5cGVfcGVyZl9jcHVfY291bnRlcjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfY29udGV4dF90eXBlX3BlcmZfdGhyZWFkX2NvdW50ZXI7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19jb250ZXh0X3R5cGVfcGVyZl9jb3VudGVyOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfY29udGV4dF90eXBlX3BlcmZfY3B1X2NvdW50ZXI7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19jb250ZXh0X3R5cGVfcGVyZl90aHJlYWRfY291bnRlcjsKKyAKKyAvKiBTdHJpbmcgcmVsYXRlZCB0byBsdHRuZ19ldmVudF9wZXJmX2NvdW50ZXJfY3R4ICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfcGVyZl9jb3VudGVyX2NvbnRleHQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3BlcmZfY291bnRlcl9jb250ZXh0OworIAorIC8qIFN0cmluZ3MgcmVsYXRlZCB0byBwaWQgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9waWRzOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3BpZDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9waWRfaWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3BpZHM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3BpZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfcGlkX2lkOworIAorIC8qIFN0cmluZ3MgcmVsYXRlZCB0byBzYXZlIGNvbW1hbmQgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zYXZlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zYXZlOworIAorIC8qIFN0cmluZ3MgcmVsYXRlZCB0byBsb2FkIGNvbW1hbmQgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9sb2FkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9sb2FkOworIAorIC8qIEdlbmVyYWwgZWxlbWVudCBvZiBtaV9sdHRuZyAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2VtcHR5OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2lkOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X25vd3JpdGU7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc3VjY2VzczsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF90eXBlX2VudW07CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdHlwZV9mbG9hdDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF90eXBlX2ludGVnZXI7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdHlwZV9vdGhlcjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF90eXBlX3N0cmluZzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfZW1wdHk7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2lkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9ub3dyaXRlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zdWNjZXNzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF90eXBlX2VudW07CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3R5cGVfZmxvYXQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3R5cGVfaW50ZWdlcjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdHlwZV9vdGhlcjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdHlwZV9zdHJpbmc7CisgCisgLyogU3RyaW5nIHJlbGF0ZWQgdG8gbG9nbGV2ZWwgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2FsZXJ0OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfY3JpdDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfZnVuY3Rpb247CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z19saW5lOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfbW9kdWxlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfcHJvY2VzczsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX3Byb2dyYW07CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z19zeXN0ZW07CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z191bml0OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZW1lcmc7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9lcnI7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9pbmZvOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbm90aWNlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfdW5rbm93bjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX3dhcm5pbmc7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfYWxlcnQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfY3JpdDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1ZzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z19mdW5jdGlvbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z19saW5lOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX21vZHVsZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z19wcm9jZXNzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX3Byb2dyYW07CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfc3lzdGVtOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX3VuaXQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZW1lcmc7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZXJyOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2luZm87CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbm90aWNlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX3Vua25vd247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfd2FybmluZzsKKyAKKyAvKiBTdHJpbmcgcmVsYXRlZCB0byBsb2dsZXZlbCBKVUwgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9hbGw7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfY29uZmlnOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2ZpbmU7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfZmluZXI7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfZmluZXN0OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2luZm87CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfb2ZmOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX3NldmVyZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF93YXJuaW5nOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9hbGw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2NvbmZpZzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfZmluZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfZmluZXI7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2ZpbmVzdDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfaW5mbzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfb2ZmOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9zZXZlcmU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX3dhcm5pbmc7CisgCisgLyogU3RyaW5nIHJlbGF0ZWQgdG8gbG9nbGV2ZWwgTG9nNGogKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX29mZjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX2ZhdGFsOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfZXJyb3I7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al93YXJuOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfaW5mbzsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX2RlYnVnOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfdHJhY2U7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al9hbGw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfb2ZmOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX2ZhdGFsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX2Vycm9yOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX3dhcm47CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfaW5mbzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al9kZWJ1ZzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al90cmFjZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al9hbGw7CisgCisgLyogU3RyaW5nIHJlbGF0ZWQgdG8gbG9nbGV2ZWwgdHlwZSAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF90eXBlX2FsbDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfdHlwZV9yYW5nZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfdHlwZV9zaW5nbGU7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3R5cGVfdW5rbm93bjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3R5cGVfYWxsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfdHlwZV9yYW5nZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3R5cGVfc2luZ2xlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfdHlwZV91bmtub3duOworIAorIC8qIFN0aW5nIHJlbGF0ZWQgdG8gbHR0bmdfY2FsaWJyYXRlICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY2FsaWJyYXRlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NhbGlicmF0ZV9mdW5jdGlvbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY2FsaWJyYXRlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jYWxpYnJhdGVfZnVuY3Rpb247CisgCisgLyogU3RyaW5nIHJlbGF0ZWQgdG8gYSBsdHRuZ19zbmFwc2hvdCAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90X2N0cmxfdXJsOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90X2RhdGFfdXJsOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90X21heF9zaXplOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90X25fcHRyOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90X3Nlc3Npb25fbmFtZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdHM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90X2N0cmxfdXJsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdF9kYXRhX3VybDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc25hcHNob3RfbWF4X3NpemU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90X25fcHRyOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdF9zZXNzaW9uX25hbWU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90czsKKyAKKyAvKiBVdGlsaXR5IHN0cmluZyBmdW5jdGlvbiAgKi8KKyBjb25zdCBjaGFyICptaV9sdHRuZ19sb2dsZXZlbF9zdHJpbmcoaW50IHZhbHVlLCBlbnVtIGx0dG5nX2RvbWFpbl90eXBlIGRvbWFpbik7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvbHR0bmctdG9vbHMtRml4LWxpdmUtdGltZXItY2FsY3VsYXRpb24tZXJyb3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvbHR0bmctdG9vbHMtRml4LWxpdmUtdGltZXItY2FsY3VsYXRpb24tZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcxOWQ5NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9sdHRuZy10b29scy1GaXgtbGl2ZS10aW1lci1jYWxjdWxhdGlvbi1lcnJvci5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDE2MTQ5NmZiZTE0NjU4MTdhNzdhNTBhMTE3MjczNGRhZTgxYTEzZWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaWthZWwgQmVja2l1cyA8bWlrYWVsLmJlY2tpdXNAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTIgTWF5IDIwMTUgMTE6MTE6NDggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gbHR0bmctdG9vbHM6IEZpeCBsaXZlIHRpbWVyIGNhbGN1bGF0aW9uIGVycm9yCisKK1RoZXJlIGlzIGFuIGNhbGN1bGF0aW9uIGVycm9yIGZvciBsaXZlIHRpbWVyLiBWYXJpYWJsZSBzd2l0Y2hfdGltZXJfaW50ZXJ2YWwgaXMKK2Jhc2VkIG9uIG1pY3Jvc2Vjb25kLCBhbmQgaXQgaXMgbm90IHJpZ2h0IHRvIGFzc2lnbiBzd2l0Y2hfdGltZXJfaW50ZXJ2YWwgbW9kCisxMDAwMDAwIHRvIHZhciB0dl9uc2VjIHdoaWNoIGlzIGJhc2VkIG9uIG5hbm9zZWNvbmQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNaWthZWwgQmVja2l1cyA8bWlrYWVsLmJlY2tpdXNAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEppYW5jaHVhbiBXYW5nIDxqaWFuY2h1YW4ud2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL2NvbW1vbi9jb25zdW1lci10aW1lci5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vY29uc3VtZXItdGltZXIuYyBiL3NyYy9jb21tb24vY29uc3VtZXItdGltZXIuYworaW5kZXggMTQwODA1Mi4uYzYyMDJiYSAxMDA2NDQKKy0tLSBhL3NyYy9jb21tb24vY29uc3VtZXItdGltZXIuYworKysrIGIvc3JjL2NvbW1vbi9jb25zdW1lci10aW1lci5jCitAQCAtMzY4LDcgKzM2OCw3IEBAIHZvaWQgY29uc3VtZXJfdGltZXJfc3dpdGNoX3N0YXJ0KHN0cnVjdCBsdHRuZ19jb25zdW1lcl9jaGFubmVsICpjaGFubmVsLAorIAljaGFubmVsLT5zd2l0Y2hfdGltZXJfZW5hYmxlZCA9IDE7CisgCisgCWl0cy5pdF92YWx1ZS50dl9zZWMgPSBzd2l0Y2hfdGltZXJfaW50ZXJ2YWwgLyAxMDAwMDAwOworLQlpdHMuaXRfdmFsdWUudHZfbnNlYyA9IHN3aXRjaF90aW1lcl9pbnRlcnZhbCAlIDEwMDAwMDA7CisrCWl0cy5pdF92YWx1ZS50dl9uc2VjID0gKHN3aXRjaF90aW1lcl9pbnRlcnZhbCAlIDEwMDAwMDApICogMTAwMDsKKyAJaXRzLml0X2ludGVydmFsLnR2X3NlYyA9IGl0cy5pdF92YWx1ZS50dl9zZWM7CisgCWl0cy5pdF9pbnRlcnZhbC50dl9uc2VjID0gaXRzLml0X3ZhbHVlLnR2X25zZWM7CisgCitAQCAtNDI1LDcgKzQyNSw3IEBAIHZvaWQgY29uc3VtZXJfdGltZXJfbGl2ZV9zdGFydChzdHJ1Y3QgbHR0bmdfY29uc3VtZXJfY2hhbm5lbCAqY2hhbm5lbCwKKyAJY2hhbm5lbC0+bGl2ZV90aW1lcl9lbmFibGVkID0gMTsKKyAKKyAJaXRzLml0X3ZhbHVlLnR2X3NlYyA9IGxpdmVfdGltZXJfaW50ZXJ2YWwgLyAxMDAwMDAwOworLQlpdHMuaXRfdmFsdWUudHZfbnNlYyA9IGxpdmVfdGltZXJfaW50ZXJ2YWwgJSAxMDAwMDAwOworKwlpdHMuaXRfdmFsdWUudHZfbnNlYyA9IChsaXZlX3RpbWVyX2ludGVydmFsICUgMTAwMDAwMCkgKiAxMDAwOworIAlpdHMuaXRfaW50ZXJ2YWwudHZfc2VjID0gaXRzLml0X3ZhbHVlLnR2X3NlYzsKKyAJaXRzLml0X2ludGVydmFsLnR2X25zZWMgPSBpdHMuaXRfdmFsdWUudHZfbnNlYzsKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTc1ODgxNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW4tcHRlc3QKQEAgLTAsMCArMSw0IEBACisjIS9iaW4vc2gKKworbWFrZSAtQyB0ZXN0cyBpbnN0YWxsY2hlY2sKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL3J1bnRlc3QtMi40LjAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvcnVudGVzdC0yLjQuMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NThiY2U0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL3J1bnRlc3QtMi40LjAucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IDU4NGY1OWIuLmMyYmNhYmQgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0xMiwzICsxMiw5IEBAIGRpc3RfZG9jX0RBVEEgPSBMSUNFTlNFIFwKKyBkaXN0X25vaW5zdF9EQVRBID0gQ29kaW5nU3R5bGUKKyAKKyBFWFRSQV9ESVNUID0gZXh0cmFzL2x0dG5nLWJhc2hfY29tcGxldGlvbiBncGwtMi4wLnR4dCBsZ3BsLTIuMS50eHQKKysKKytpbnN0YWxsLXB0ZXN0OgorKwljcCAtciAkKHNyY2RpcikvdGVzdHMgJChERVNURElSKQorKwlmb3IgbSBpbiAkJChmaW5kICQoREVTVERJUikvdGVzdHMgLW5hbWUgTWFrZWZpbGUpOyBkbyBcCisrICAgICAgICAgIHNlZCAtaSAtZSAnc3xeTWFrZWZpbGU6fF9NYWtlZmlsZTp8JyAkJG07IFwKKysgICAgICAgIGRvbmUKK2RpZmYgLS1naXQgYS90ZXN0cy9ydW4uc2ggYi90ZXN0cy9ydW4uc2gKK2luZGV4IGM2YzUwZmQuLjY0NTUzNTkgMTAwNzU1CistLS0gYS90ZXN0cy9ydW4uc2gKKysrKyBiL3Rlc3RzL3J1bi5zaAorQEAgLTE5LDQgKzE5LDcgQEAKKyAKKyBbIC16ICIkMSIgXSAmJiBlY2hvICJFcnJvcjogTm8gdGVzdGxpc3QuIFBsZWFzZSBzcGVjaWZ5IGEgdGVzdGxpc3QgdG8gcnVuLiIgJiYgZXhpdCAxCisgCistcHJvdmUgLS1tZXJnZSAtLWV4ZWMgJycgLSA8ICQxCisrcHJvdmUgLS1tZXJnZSAtdiAtLWV4ZWMgJycgLSA8ICQxIHwgc2VkIFwKKysgIC1lICdzfF5vayBcKC4qXCl8UEFTUzogXDF8JyBcCisrICAtZSAnc3xebm90IG9rIFwoLipcKXxGQUlMOiBcMXwnIFwKKysgIHwgZWdyZXAgLWggJ1BBU1N8RkFJTCcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW50ZXN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL3J1bnRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1YTVkYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW50ZXN0LnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCA1ODRmNTliLi5jMmJjYWJkIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMTIsMyArMTIsOSBAQCBkaXN0X2RvY19EQVRBID0gTElDRU5TRSBcCisgZGlzdF9ub2luc3RfREFUQSA9IENvZGluZ1N0eWxlCisgCisgRVhUUkFfRElTVCA9IGV4dHJhcy9sdHRuZy1iYXNoX2NvbXBsZXRpb24gZ3BsLTIuMC50eHQgbGdwbC0yLjEudHh0CisrCisraW5zdGFsbC1wdGVzdDoKKysJY3AgLXIgJChzcmNkaXIpL3Rlc3RzICQoREVTVERJUikKKysJZm9yIG0gaW4gJCQoZmluZCAkKERFU1RESVIpL3Rlc3RzIC1uYW1lIE1ha2VmaWxlKTsgZG8gXAorKyAgICAgICAgICBzZWQgLWkgLWUgJ3N8Xk1ha2VmaWxlOnxfTWFrZWZpbGU6fCcgJCRtOyBcCisrICAgICAgICBkb25lCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggNmQ1YjAwZC4uMzc3NGY5ZCAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTEsMTQgKzEsMTcgQEAKKyBTVUJESVJTID0gdXRpbHMgcmVncmVzc2lvbiB1bml0IHN0cmVzcworIAorLWlmIFVTRV9QWVRIT04KKy1jaGVjay1hbToKKytpbnN0YWxsY2hlY2stYW06CisgCS4vcnVuLnNoIHVuaXRfdGVzdHMKKyAJLi9ydW4uc2ggZmFzdF9yZWdyZXNzaW9uCisraWYgVVNFX1BZVEhPTgorIAkuL3J1bi5zaCB3aXRoX2JpbmRpbmdzX3JlZ3Jlc3Npb24KKy1lbHNlCisrZW5kaWYKKysKKyBjaGVjay1hbToKKyAJLi9ydW4uc2ggdW5pdF90ZXN0cworIAkuL3J1bi5zaCBmYXN0X3JlZ3Jlc3Npb24KKytpZiBVU0VfUFlUSE9OCisrCS4vcnVuLnNoIHdpdGhfYmluZGluZ3NfcmVncmVzc2lvbgorIGVuZGlmCisgCisgZGlzdF9ub2luc3RfU0NSSVBUUyA9IHJ1bi5zaCB1bml0X3Rlc3RzIGZhc3RfcmVncmVzc2lvbiBsb25nX3JlZ3Jlc3Npb24gcm9vdF9yZWdyZXNzaW9uIHdpdGhfYmluZGluZ3NfcmVncmVzc2lvbgorZGlmZiAtLWdpdCBhL3Rlc3RzL3J1bi5zaCBiL3Rlc3RzL3J1bi5zaAoraW5kZXggYzZjNTBmZC4uNjQ1NTM1OSAxMDA3NTUKKy0tLSBhL3Rlc3RzL3J1bi5zaAorKysrIGIvdGVzdHMvcnVuLnNoCitAQCAtMTksNCArMTksNyBAQAorIAorIFsgLXogIiQxIiBdICYmIGVjaG8gIkVycm9yOiBObyB0ZXN0bGlzdC4gUGxlYXNlIHNwZWNpZnkgYSB0ZXN0bGlzdCB0byBydW4uIiAmJiBleGl0IDEKKyAKKy1wcm92ZSAtLW1lcmdlIC0tZXhlYyAnJyAtIDwgJDEKKytwcm92ZSAtLW1lcmdlIC12IC0tZXhlYyAnJyAtIDwgJDEgfCBzZWQgXAorKyAgLWUgJ3N8Xm9rIFwoLipcKXxQQVNTOiBcMXwnIFwKKysgIC1lICdzfF5ub3Qgb2sgXCguKlwpfEZBSUw6IFwxfCcgXAorKyAgfCBlZ3JlcCAtaCAnUEFTU3xGQUlMJwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzXzIuNi4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzXzIuNi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzOTdhOTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHNfMi42LjAuYmIKQEAgLTAsMCArMSw4MiBAQAorU0VDVElPTiA9ICJkZXZlbCIKK1NVTU1BUlkgPSAiTGludXggVHJhY2UgVG9vbGtpdCBDb250cm9sIgorREVTQ1JJUFRJT04gPSAiVGhlIExpbnV4IHRyYWNlIHRvb2xraXQgaXMgYSBzdWl0ZSBvZiB0b29scyBkZXNpZ25lZCBcCit0byBleHRyYWN0IHByb2dyYW0gZXhlY3V0aW9uIGRldGFpbHMgZnJvbSB0aGUgTGludXggb3BlcmF0aW5nIHN5c3RlbSBcCithbmQgaW50ZXJwcmV0IHRoZW0uIgorCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0wMWQ3ZmM0NDk2YWFjZjM3ZDkwZGY5MGI5MGIwY2FjMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9ncGwtMi4wLnR4dDttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGdwbC0yLjEudHh0O21kNT0wZjBkNzE1MDBlNmE1N2ZkMjRkODI1ZjMzMjQyYjljYSIKKworREVQRU5EUyA9ICJsaWJ1cmN1IHBvcHQgbHR0bmctdXN0IGxpYnhtbDIiCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibWFrZSBwZXJsIGJhc2giCisKK1NSQ1JFViA9ICJkNTIyYzFmMTQyODVlMmU4YjEwYjdjMGNkMDExODQ3Njk2ZmZlNzc5IgorCitQWVRIT05fT1BUSU9OID0gImFtX2N2X3B5dGhvbl9weWV4ZWNkaXI9JyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vc2l0ZS1wYWNrYWdlcycgXAorICAgICAgICAgICAgICAgICBhbV9jdl9weXRob25fcHl0aG9uZGlyPScke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L3NpdGUtcGFja2FnZXMnIFwKKyAgICAgICAgICAgICAgICAgUFlUSE9OX0lOQ0xVREU9Jy1JJHtTVEFHSU5HX0lOQ0RJUn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059JyBcCisiCitQQUNLQUdFQ09ORklHID8/PSAibHR0bmctdXN0IgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIi0tZW5hYmxlLXB5dGhvbi1iaW5kaW5ncyAke1BZVEhPTl9PUFRJT059LCxweXRob24gc3dpZy1uYXRpdmUiCitQQUNLQUdFQ09ORklHW2x0dG5nLXVzdF0gPSAiLS1lbmFibGUtbHR0bmctdXN0LCAtLWRpc2FibGUtbHR0bmctdXN0LCBsdHRuZy11c3QiCitQQUNLQUdFQ09ORklHW2ttb2RdID0gIi0tZW5hYmxlLWttb2QsIC0tZGlzYWJsZS1rbW9kLCBrbW9kIgorCitTUkNfVVJJID0gImdpdDovL2dpdC5sdHRuZy5vcmcvbHR0bmctdG9vbHMuZ2l0O2JyYW5jaD1zdGFibGUtMi42IFwKKyAgICAgICAgICAgZmlsZTovL3J1bnRlc3QtMi40LjAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZXh0ZXJuLWRlY2xzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9sdHRuZy10b29scy1GaXgtbGl2ZS10aW1lci1jYWxjdWxhdGlvbi1lcnJvci5wYXRjaCBcCisJICAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwdGVzdCBwa2djb25maWcgdXNlcmFkZAorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorR1JPVVBBRERfUEFSQU1fJHtQTn0gPSAidHJhY2luZyIKKworZXhwb3J0IEtFUk5FTERJUj0iJHtTVEFHSU5HX0tFUk5FTF9ESVJ9IgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2x0dG5nL2xpYmV4ZWMvKiAke2RhdGFkaXJ9L3htbC9sdHRuZyBcCisgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfS9zaXRlLXBhY2thZ2VzLyoiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9sdHRuZy9saWJleGVjLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy8uZGVidWciCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vc2l0ZS1wYWNrYWdlcy8qLmEiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vc2l0ZS1wYWNrYWdlcy8qLmxhIgorCisjIFNpbmNlIGZpbGVzIGFyZSBpbnN0YWxsZWQgaW50byAke2xpYmRpcn0vbHR0bmcvbGliZXhlYyB3ZSBtYXRjaCAKKyMgdGhlIGxpYmV4ZWMgaW5zYW5lIHRlc3Qgc28gc2tpcCBpdC4KKyMgUHl0aG9uIG1vZHVsZSBuZWVkcyB0byBrZWVwIF9sdHRuZy5zbworSU5TQU5FX1NLSVBfJHtQTn0gPSAibGliZXhlYyBkZXYtc28iCitJTlNBTkVfU0tJUF8ke1BOfS1kYmcgPSAibGliZXhlYyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgRGVsZXRlIGEgc2hpcHBlZCBtNCBmaWxlIHRoYXQgb3ZlcnJpZGVzIG91ciBwYXRjaGVkIG9uZQorCXJtIC1mICR7U30vY29uZmlnL2xpYnhtbC5tNAorfQorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKwljaG1vZCAreCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy91dGlscy91dGlscy5zaAorCWZvciBpIGluIGBmaW5kICR7RH0ke1BURVNUX1BBVEh9IC1wZXJtIC91K3ggLXR5cGUgZmA7IGRvCisJCXNlZCAtZSAiczpcJFRFU1RESVIuKi9zcmMvYmluL2x0dG5nL1wkTFRUTkdfQklOOlwkTFRUTkdfQklOOmciIFwKKwkJICAtZSAiczpcJFRFU1RESVIvLi4vc3JjL2Jpbi9sdHRuZy1zZXNzaW9uZC9cJFNFU1NJT05EX0JJTjpcJFNFU1NJT05EX0JJTjpnIiBcCisJCSAgLWUgInM6XCRESVIvLi4vc3JjL2Jpbi9sdHRuZy1zZXNzaW9uZC9cJFNFU1NJT05EX0JJTjpcJFNFU1NJT05EX0JJTjpnIiBcCisJCSAgLWUgInM6XCRURVNURElSLy4uL3NyYy9iaW4vbHR0bmctY29uc3VtZXJkLzoke2xpYmRpcn0vbHR0bmcvbGliZXhlYy86ZyIgXAorCQkgIC1lICJzOlwkRElSLy4uL3NyYy9iaW4vbHR0bmctY29uc3VtZXJkLzoke2xpYmRpcn0vbHR0bmcvbGliZXhlYy86ZyIgXAorCQkgIC1lICJzOlwkVEVTVERJUi8uLi9zcmMvYmluL2x0dG5nLXJlbGF5ZC9cJFJFTEFZRF9CSU46XCRSRUxBWURfQklOOmciIFwKKwkJICAtZSAiczpcJERJUi8uLi9zcmMvYmluL2x0dG5nLXNlc3Npb25kL2x0dG5nLXNlc3Npb25kOlwkU0VTU0lPTkRfQklOOmciIFwKKwkJICAtZSAiczpcJERJUi8uLi9zcmMvYmluL2x0dG5nLXJlbGF5ZC9cJFJFTEFZRF9CSU46XCRSRUxBWURfQklOOmciIFwKKwkJICAtZSAiczpcJERJUi8uLi9iaW4vbHR0bmctcmVsYXlkL1wkUkVMQVlEX0JJTjpcJFJFTEFZRF9CSU46ZyIgXAorCQkgIC1pICRpCisJZG9uZQorCisJc2VkIC1lICJzOnNyYy9iaW4vbHR0bmctc2Vzc2lvbmQ6JGJpbmRpcjpnIiBcCisJICAgIC1lICJzOnNyYy9iaW4vbHR0bmctY29uc3VtZXJkOiR7bGliZXhlY2Rpcn0vbGliZXhlYy86ZyIgXAorCS1pICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL3JlZ3Jlc3Npb24vcnVuLXJlcG9ydC5weQorCXNlZCAtZSAiczpzcmMvYmluOmJpbjpnIiAtZSAiczpsdC06OmciIFwKKwktaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy91dGlscy91dGlscy5zaAorCXNlZCAtZSAiczppbmlfY29uZmlnOlwubGlic1wvaW5pX2NvbmZpZzoiIFwKKwktaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy91bml0L2luaV9jb25maWcvdGVzdF9pbmlfY29uZmlnCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0L2x0dG5nLXVzdC1GaXgtbGl2ZS10aW1lci1jYWxjdWxhdGlvbi1lcnJvci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy11c3QvbHR0bmctdXN0LUZpeC1saXZlLXRpbWVyLWNhbGN1bGF0aW9uLWVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMTIwZmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0L2x0dG5nLXVzdC1GaXgtbGl2ZS10aW1lci1jYWxjdWxhdGlvbi1lcnJvci5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDZkMDJhNmMxYWViMWQwNTBmZmU3YzY2MjRiYWI5YWNmYTc2ZmMwNWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaWthZWwgQmVja2l1cyA8bWlrYWVsLmJlY2tpdXNAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTIgTWF5IDIwMTUgMTE6MDQ6MzQgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gbHR0bmctdXN0OkZpeCBsaXZlIHRpbWVyIGNhbGN1bGF0aW9uIGVycm9yCisKK1RoZXJlIGlzIGFuIGNhbGN1bGF0aW9uIGVycm9yIGZvciBsaXZlIHRpbWVyLiBWYXJpYWJsZSBjaGFuLT5zd2l0Y2hfdGltZXJfaW50ZXJ2YWwgaXMKK2Jhc2VkIG9uIG1pY3Jvc2Vjb25kLCBhbmQgaXQgaXMgbm90IHJpZ2h0IHRvIGFzc2lnbiBjaGFuLT5zd2l0Y2hfdGltZXJfaW50ZXJ2YWwgbW9kCisxMDAwMDAwIHRvIHZhciB0dl9uc2VjIHdoaWNoIGlzIGJhc2VkIG9uIG5hbm9zZWNvbmQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNaWthZWwgQmVja2l1cyA8bWlrYWVsLmJlY2tpdXNAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEppYW5jaHVhbiBXYW5nIDxqaWFuY2h1YW4ud2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbGlicmluZ2J1ZmZlci9yaW5nX2J1ZmZlcl9mcm9udGVuZC5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnJpbmdidWZmZXIvcmluZ19idWZmZXJfZnJvbnRlbmQuYyBiL2xpYnJpbmdidWZmZXIvcmluZ19idWZmZXJfZnJvbnRlbmQuYworaW5kZXggZWI0ZTQ4Ni4uZTAzNzdhMyAxMDA2NDQKKy0tLSBhL2xpYnJpbmdidWZmZXIvcmluZ19idWZmZXJfZnJvbnRlbmQuYworKysrIGIvbGlicmluZ2J1ZmZlci9yaW5nX2J1ZmZlcl9mcm9udGVuZC5jCitAQCAtNTI4LDcgKzUyOCw3IEBAIHZvaWQgbGliX3JpbmdfYnVmZmVyX2NoYW5uZWxfc3dpdGNoX3RpbWVyX3N0YXJ0KHN0cnVjdCBjaGFubmVsICpjaGFuKQorIAl9CisgCisgCWl0cy5pdF92YWx1ZS50dl9zZWMgPSBjaGFuLT5zd2l0Y2hfdGltZXJfaW50ZXJ2YWwgLyAxMDAwMDAwOworLQlpdHMuaXRfdmFsdWUudHZfbnNlYyA9IGNoYW4tPnN3aXRjaF90aW1lcl9pbnRlcnZhbCAlIDEwMDAwMDA7CisrCWl0cy5pdF92YWx1ZS50dl9uc2VjID0gKGNoYW4tPnN3aXRjaF90aW1lcl9pbnRlcnZhbCAlIDEwMDAwMDApICogMTAwMDsKKyAJaXRzLml0X2ludGVydmFsLnR2X3NlYyA9IGl0cy5pdF92YWx1ZS50dl9zZWM7CisgCWl0cy5pdF9pbnRlcnZhbC50dl9uc2VjID0gaXRzLml0X3ZhbHVlLnR2X25zZWM7CisgCitAQCAtNTgyLDcgKzU4Miw3IEBAIHZvaWQgbGliX3JpbmdfYnVmZmVyX2NoYW5uZWxfcmVhZF90aW1lcl9zdGFydChzdHJ1Y3QgY2hhbm5lbCAqY2hhbikKKyAJfQorIAorIAlpdHMuaXRfdmFsdWUudHZfc2VjID0gY2hhbi0+cmVhZF90aW1lcl9pbnRlcnZhbCAvIDEwMDAwMDA7CistCWl0cy5pdF92YWx1ZS50dl9uc2VjID0gY2hhbi0+cmVhZF90aW1lcl9pbnRlcnZhbCAlIDEwMDAwMDA7CisrCWl0cy5pdF92YWx1ZS50dl9uc2VjID0gKGNoYW4tPnJlYWRfdGltZXJfaW50ZXJ2YWwgJSAxMDAwMDAwKSAqIDEwMDA7CisgCWl0cy5pdF9pbnRlcnZhbC50dl9zZWMgPSBpdHMuaXRfdmFsdWUudHZfc2VjOworIAlpdHMuaXRfaW50ZXJ2YWwudHZfbnNlYyA9IGl0cy5pdF92YWx1ZS50dl9uc2VjOworIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0L2x0dG5nLXVzdC1kb2MtZXhhbXBsZXMtZGlzYWJsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy11c3QvbHR0bmctdXN0LWRvYy1leGFtcGxlcy1kaXNhYmxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2OGE5ODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0L2x0dG5nLXVzdC1kb2MtZXhhbXBsZXMtZGlzYWJsZS5wYXRjaApAQCAtMCwwICsxLDE4IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitEb24ndCBidWlsZCB0aGUgZG9jIGV4YW1wbGVzIC0gd2UgZG9uJ3QgbmVlZCB0aGVtIGFuZCBpbiBmYWN0IHRoZXkKK25ldmVyIHN1Y2Nlc3NmdWxseSBidWlsdCBpbiBwcmV2aW91cyBpdGVyYXRpb25zIG9mIHRoZSBsdHRuZy11c3QKK3JlY2lwZSBhbnl3YXkuCisKK1NpZ25lZC1vZmYtYnk6IFRvbSBaYW51c3NpIDx0b20uemFudXNzaUBpbnRlbC5jb20+CisKK0luZGV4OiBkb2MvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL2RvYy9NYWtlZmlsZS5hbQorKysrIGIvZG9jL01ha2VmaWxlLmFtCitAQCAtMSw0ICsxLDQgQEAKKy1TVUJESVJTID0gLiBleGFtcGxlcworK1NVQkRJUlMgPSAuCisgCisgZGlzdF9tYW5fTUFOUyA9IG1hbi9sdHRuZy1nZW4tdHAuMSBcCisgCW1hbi9sdHRuZy11c3QuMyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0X2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy11c3RfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNGFmZDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0X2dpdC5iYgpAQCAtMCwwICsxLDM0IEBACitTVU1NQVJZID0gIkxpbnV4IFRyYWNlIFRvb2xraXQgVXNlcnNwYWNlIFRyYWNlciAyLngiCitERVNDUklQVElPTiA9ICJUaGUgTFRUbmcgVVNUIDIueCBwYWNrYWdlIGNvbnRhaW5zIHRoZSB1c2Vyc3BhY2UgdHJhY2VyIGxpYnJhcnkgdG8gdHJhY2UgdXNlcnNwYWNlIGNvZGVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9sdHRuZy5vcmcvdXN0IgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MubHR0bmcub3JnL3Byb2plY3RzL2x0dG5nLXVzdCIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsgJiBNSVQgJiBHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWM5NjNlYjM2NmI3ODEyNTJiMGJmMGZkZjE2MjRkOWU5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NucHJpbnRmL3NucHJpbnRmLmM7ZW5kbGluZT0zMjttZDU9ZDNkNTQ0OTU5ZDhhMzc4MmIyZTA3NDUxYmUwYTkwM2MgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc25wcmludGYvdmFyaW91cy5oO2VuZGxpbmU9MzE7bWQ1PTg5ZjI1MDliNmI0NjgyYzRmYzk1MjU1ZWVjNGFiZTQ0IgorCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZQorCitERVBFTkRTID0gImxpYnVyY3UgdXRpbC1saW51eCIKK1JERVBFTkRTXyR7UE59LWJpbiA9ICJweXRob24tY29yZSIKKworIyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYWZ0ZXIgcmVuYW1lCitSUFJPVklERVNfJHtQTn0gPSAibHR0bmcyLXVzdCIKK1JSRVBMQUNFU18ke1BOfSA9ICJsdHRuZzItdXN0IgorUkNPTkZMSUNUU18ke1BOfSA9ICJsdHRuZzItdXN0IgorCitTUkNSRVYgPSAiYzQ5ZWU5MDQwYWRhNjk4NGM4ODA3NTY2MTRlOGE2ZjdmZDY0NWJkNiIKK1BFID0gIjIiCitQViA9ICIyLjYuMitnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQubHR0bmcub3JnL2x0dG5nLXVzdC5naXQ7YnJhbmNoPXN0YWJsZS0yLjYgXAorICAgICAgICAgICBmaWxlOi8vbHR0bmctdXN0LWRvYy1leGFtcGxlcy1kaXNhYmxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2x0dG5nLXVzdC1GaXgtbGl2ZS10aW1lci1jYWxjdWxhdGlvbi1lcnJvci5wYXRjaCBcCisgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSggY2QgJHtTfTsgJHtTfS9ib290c3RyYXAgKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL21vZHV0aWxzLWluaXRzY3JpcHRzL2ZpbGVzL1BELnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL21vZHV0aWxzLWluaXRzY3JpcHRzL2ZpbGVzL1BELnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYWM0OWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbW9kdXRpbHMtaW5pdHNjcmlwdHMvZmlsZXMvUEQucGF0Y2gKQEAgLTAsMCArMSw4IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworSW5kZXg6IG1vZHV0aWxzLWluaXRzY3JpcHRzLTEuMC9MSUNFTlNFCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgbW9kdXRpbHMtaW5pdHNjcmlwdHMtMS4wL0xJQ0VOU0UJMjAxMC0xMi0wNiAxNDoyNjowMy41NzAzMzkwMDIgLTA4MDAKK0BAIC0wLDAgKzEgQEAKKytQdWJsaWMgRG9tYWluCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbW9kdXRpbHMtaW5pdHNjcmlwdHMvZmlsZXMvbW9kdXRpbHMuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbW9kdXRpbHMtaW5pdHNjcmlwdHMvZmlsZXMvbW9kdXRpbHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTc4YWRmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9tb2R1dGlscy1pbml0c2NyaXB0cy9maWxlcy9tb2R1dGlscy5zaApAQCAtMCwwICsxLDUyIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIG1vZHVsZS1pbml0LXRvb2xzCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAKKyMgUmVxdWlyZWQtU3RvcDogICAgIAorIyBTaG91bGQtU3RhcnQ6ICAgICAgY2hlY2tyb290CisjIFNob3VsZC1zdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBQcm9jZXNzIC9ldGMvbW9kdWxlcy4KKyMgRGVzY3JpcHRpb246ICAgICAgIExvYWQgdGhlIG1vZHVsZXMgbGlzdGVkIGluIC9ldGMvbW9kdWxlcy4KKyMjIyBFTkQgSU5JVCBJTkZPCisKK0xPQURfTU9EVUxFPW1vZHByb2JlCitbIC1mIC9wcm9jL21vZHVsZXMgXSB8fCBleGl0IDAKK1sgLWYgL2V0Yy9tb2R1bGVzIF0gfHwgWyAtZCAvZXRjL21vZHVsZXMtbG9hZC5kIF0gfHwgZXhpdCAwCitbIC1lIC9zYmluL21vZHByb2JlIF0gfHwgTE9BRF9NT0RVTEU9aW5zbW9kCisKK2lmIFsgISAtZiAvbGliL21vZHVsZXMvYHVuYW1lIC1yYC9tb2R1bGVzLmRlcCBdOyB0aGVuCisJWyAiJFZFUkJPU0UiICE9IG5vIF0gJiYgZWNobyAiQ2FsY3VsYXRpbmcgbW9kdWxlIGRlcGVuZGVuY2llcyAuLi4iCisJZGVwbW9kIC1BZQorZmkKKworbG9hZGVkX21vZHVsZXM9IiAiCisKK3Byb2Nlc3NfZmlsZSgpIHsKKwlmaWxlPSQxCisKKwkoY2F0ICRmaWxlOyBlY2hvOyApIHwKKwl3aGlsZSByZWFkIG1vZHVsZSBhcmdzCisJZG8KKwkJY2FzZSAiJG1vZHVsZSIgaW4KKwkJCVwjKnwiIikgY29udGludWUgOzsKKwkJZXNhYworCQlbIC1uICIkKGVjaG8gJGxvYWRlZF9tb2R1bGVzIHwgZ3JlcCAiICRtb2R1bGUgIikiIF0gJiYgY29udGludWUKKwkJWyAiJFZFUkJPU0UiICE9IG5vIF0gJiYgZWNobyAtbiAiJG1vZHVsZSAiCisJCWV2YWwgIiRMT0FEX01PRFVMRSAkbW9kdWxlICRhcmdzID4vZGV2L251bGwgMj4mMSIKKwkJbG9hZGVkX21vZHVsZXM9IiR7bG9hZGVkX21vZHVsZXN9JHttb2R1bGV9ICIKKwlkb25lCit9CisKK1sgIiRWRVJCT1NFIiAhPSBubyBdICYmIGVjaG8gLW4gIkxvYWRpbmcgbW9kdWxlczogIgorWyAtZiAvZXRjL21vZHVsZXMgXSAmJiBwcm9jZXNzX2ZpbGUgL2V0Yy9tb2R1bGVzCisKK1sgLWQgL2V0Yy9tb2R1bGVzLWxvYWQuZCBdIHx8IGV4aXQgMAorCitmb3IgZiBpbiAvZXRjL21vZHVsZXMtbG9hZC5kLyouY29uZjsgZG8KKwlwcm9jZXNzX2ZpbGUgJGYKK2RvbmUKK1sgIiRWRVJCT1NFIiAhPSBubyBdICYmIGVjaG8KKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbW9kdXRpbHMtaW5pdHNjcmlwdHMvbW9kdXRpbHMtaW5pdHNjcmlwdHMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbW9kdXRpbHMtaW5pdHNjcmlwdHMvbW9kdXRpbHMtaW5pdHNjcmlwdHMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2NzBjZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9tb2R1dGlscy1pbml0c2NyaXB0cy9tb2R1dGlscy1pbml0c2NyaXB0cy5iYgpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gIkluaXRzY3JpcHQgZm9yIGF1dG8tbG9hZGluZyBrZXJuZWwgbW9kdWxlcyBvbiBib290IgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTdiZjg3ZmMzNzk3NmU5M2VjNjZhZDg0ZmFjNThjMDk4IgorU1JDX1VSSSA9ICJmaWxlOi8vbW9kdXRpbHMuc2ggXAorCSAgIGZpbGU6Ly9QRC5wYXRjaCIKKworUFIgPSAicjciCisKK1MgPSAiJHtXT1JLRElSfSIKKworSU5JVFNDUklQVF9OQU1FID0gIm1vZHV0aWxzLnNoIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgMDUgUyAuIgorCitpbmhlcml0IHVwZGF0ZS1yYy5kCisKK2RvX2NvbXBpbGUgKCkgeworfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9tb2R1dGlscy5zaCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCit9CisKK0RFUEVORFNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3N5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZScsJycsZCl9IgorcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCQlPUFRTPSItLXJvb3Q9JEQiCisJCWZpCisJCXN5c3RlbWN0bCAkT1BUUyBtYXNrIG1vZHV0aWxzLnNlcnZpY2UKKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVjNTZlNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS5pbmMKQEAgLTAsMCArMSw1OCBAQAorU1VNTUFSWSA9ICJTeXN0ZW0tV2lkZSBQcm9maWxlciIKK0RFU0NSSVBUSU9OID0gIk9Qcm9maWxlIGlzIGEgc3lzdGVtLXdpZGUgcHJvZmlsZXIgZm9yIExpbnV4IHN5c3RlbXMsIGNhcGFibGUgXAorb2YgcHJvZmlsaW5nIGFsbCBydW5uaW5nIGNvZGUgYXQgbG93IG92ZXJoZWFkLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9vcHJvZmlsZS5zb3VyY2Vmb3JnZS5uZXQvbmV3cy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MTYxOTEmYXRpZD0xMTYxOTEiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErICYgR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJvcGFnZW50L29wYWdlbnQuaDtiZWdpbmxpbmU9NTtlbmRsaW5lPTI2O21kNT00ZjE2ZjcyYzdhNDkzZDhhNDcwNGFhMThkMDNkMTVjNiBcCisgICAgICAgICAgICAgICAgICAgIgorU0VDVElPTiA9ICJkZXZlbCIKKworREVQRU5EUyA9ICJwb3B0IGJpbnV0aWxzIgorUkRFUEVORFNfJHtQTn0gPSAiYmludXRpbHMtc3ltbGlua3MiCitSUkVDT01NRU5EU18ke1BOfSA9ICJrZXJuZWwtdm1saW51eCIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9ICR7bGliZGlyfS8ke0JQTn0vbGliKiR7U09MSUJTfSAke2RhdGFkaXJ9LyR7QlBOfSIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS9saWIqJHtTT0xJQlNERVZ9ICR7bGliZGlyfS8ke0JQTn0vbGliKi5sYSIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS9saWIqLmEiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2FjaW5jbHVkZS5tNCBcCisgICAgICAgICAgIGZpbGU6Ly9hdXRvbWFrZS1mb3JlaWduLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL29wcm9maWxlLWNyb3NzLWNvbXBpbGUtdGVzdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL3Jvb3QtaG9tZS1kaXIucGF0Y2giCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBwdGVzdAorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWtlcm5lbD0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9IC0td2l0aG91dC14IGFjX2N2X3Byb2dfWFNMVFBST0M9IgorZG9fY29uZmlndXJlICgpIHsKKwljcCAke1dPUktESVJ9L2FjaW5jbHVkZS5tNCAke1N9LworCWF1dG90b29sc19kb19jb25maWd1cmUKK30KKworRVhUUkFfT0VNQUtFID0gIlNSQ0RJUj0ke1BURVNUX1BBVEh9L2xpYnV0aWwrKy90ZXN0cyIKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJb2VfcnVubWFrZSBjaGVjaworfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCXN1YmRpcnM9ImxpYmRiL3Rlc3RzIGxpYnV0aWwrKy90ZXN0cyBsaWJyZWdleC90ZXN0cyBsaWJ1dGlsL3Rlc3RzIGxpYm9wL3Rlc3RzIGxpYmRiL3Rlc3RzICIKKwlmb3IgdG9vbHRlc3QgaW4gJHtzdWJkaXJzfQorCWRvCisJCWZpbmQgJHt0b29sdGVzdH0gLXBlcm0gL3U9eCAtdHlwZSBmfCBjcGlvIC1wdmR1ICR7RH0ke1BURVNUX1BBVEh9CisJZG9uZQorCisJIyBuZWVkZWQgYnkgc29tZSBsaWJvcCB0ZXN0cworCWNwIC1yIGV2ZW50cyAke0R9JHtQVEVTVF9QQVRIfQorCisJIyBuZWVkZWQgYnkgbGlicmVnZXggcmVnZXhfdGVzdAorCWNwIGxpYnJlZ2V4L3N0bC5wYXQgJHtEfSR7UFRFU1RfUEFUSH0vbGlicmVnZXgKKwljcCBsaWJyZWdleC90ZXN0cy9tYW5nbGVkLW5hbWUgJHtEfSR7UFRFU1RfUEFUSH0vbGlicmVnZXgvdGVzdHMKKworCSMgbmVlZGVkIGJ5IGxpdHV0aWwrKyBmaWxlX21hbmlwX3Rlc3RzCisJY3AgJHtTfS9saWJ1dGlsKysvdGVzdHMvZmlsZV9tYW5pcF90ZXN0cy5jcHAgXAorCQlsaWJ1dGlsKysvdGVzdHMvZmlsZV9tYW5pcF90ZXN0cy5vICR7RH0ke1BURVNUX1BBVEh9L2xpYnV0aWwrKy90ZXN0cworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL2FjaW5jbHVkZS5tNCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9hY2luY2x1ZGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVlY2Q5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9hY2luY2x1ZGUubTQKQEAgLTAsMCArMSw1ODEgQEAKK2RubCBBWF9LRVJORUxfT1BUSU9OKG9wdGlvbiwgYWN0aW9uLWlmLWZvdW5kLCBhY3Rpb24taWYtbm90LWZvdW5kKQorZG5sIHNlZSBpZiBhdXRvY29uZi5oIGRlZmluZXMgdGhlIG9wdGlvbgorQUNfREVGVU4oW0FYX0tFUk5FTF9PUFRJT05dLCBbCitTQVZFX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9Ii1JJEtJTkMgLU8yIC1EX19LRVJORUxfXyIKK0FDX1RSWV9DT01QSUxFKCBbI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPl0sCitbCisjaWZuZGVmICQxCiticmVha19tZV9oYXJkKFxcXCk7CisjZW5kaWYKK10sWyQyXSxbJDNdLCkKK0NGTEFHUz0kU0FWRV9DRkxBR1MKK10pCisKK2RubCBIYW5kbGUgdGhlIDIuNCBtb2R1bGUgaW5zaWRlIG1vZHVsZS8KK0FDX0RFRlVOKFtBWF9DT05GSUdfTU9EVUxFXSwKK1sKK2lmIHRlc3QgISAtZiAkS0lOQy9saW51eC9hdXRvY29uZi5oOyB0aGVuCisJQUNfTVNHX0VSUk9SKFtubyBzdWl0YWJseSBjb25maWd1cmVkIGtlcm5lbCBpbmNsdWRlIHRyZWUgZm91bmRdKQorZmkKKworZG5sICAtLS0gR2V0IExpbnV4IGtlcm5lbCB2ZXJzaW9uIGFuZCBjb21waWxlIHBhcmFtZXRlcnMgLS0tCisKK0FDX1NVQlNUKEtWRVJTKQorQUNfTVNHX0NIRUNLSU5HKFtmb3Iga2VybmVsIHZlcnNpb25dKQorZG5sIGl0J3MgbGlrZSB0aGlzIHRvIGhhbmRsZSBtYW5kcmFrZSdzIGZ1YmFyIHZlcnNpb24uaCAtIGJ1ZyAjNDcxNDQ4CitldmFsIEtWRVJTPWBnY2MgLUkkS0lOQyAtRSAtZE0gJEtJTkMvbGludXgvdmVyc2lvbi5oIHwgZ3JlcCAtdyBVVFNfUkVMRUFTRSB8IGF3ayAne3ByaW50ICRbXTN9J2AKK0FDX01TR19SRVNVTFQoWyRLVkVSU10pCitjYXNlICIkS1ZFUlMiIGluCisyLjIuKnwyLjQuKikgOzsKKyopIEFDX01TR19FUlJPUihbVW5zdXBwb3J0ZWQga2VybmVsIHZlcnNpb25dKQorZXNhYworCitkbmwgQ2hlY2sgZm9yIHRoZSBtaW5pbWFsIGtlcm5lbCB2ZXJzaW9uIHN1cHBvcnRlZAorQUNfTVNHX0NIRUNLSU5HKFtrZXJuZWwgdmVyc2lvbl0pCitBWF9LRVJORUxfVkVSU0lPTigyLCAyLCAxMCwgPD0sIEFDX01TR19SRVNVTFQoW29rXSksIEFDX01TR19FUlJPUihbY2hlY2sgaHRtbCBkb2N1bWVudGF0aW9uIGluc3RhbGwgc2VjdGlvbl0pKQorCitkbmwgbGludXgvc3BpbmxvY2suaCBhZGRlZCBhdCBzb21lIHBvaW50IGluIHBhc3QKK0FDX01TR19DSEVDS0lORyhbZm9yICRLSU5DL2xpbnV4L3NwaW5sb2NrLmhdKQoraWYgdGVzdCAtZiAkS0lOQy9saW51eC9zcGlubG9jay5oOyB0aGVuCisJRVhUUkFfQ0ZMQUdTX01PRFVMRT0iJEVYVFJBX0NGTEFHU19NT0RVTEUgLURIQVZFX0xJTlVYX1NQSU5MT0NLX0hFQURFUiIKKwlBQ19NU0dfUkVTVUxUKFt5ZXNdKQorZWxzZQorCUFDX01TR19SRVNVTFQoW25vXSkKK2ZpCisKK0FDX01TR19DSEVDS0lORyhbZm9yIHJ0Y19sb2NrXSkKK2djYyAtSSRLSU5DIC1FICRLSU5DL2xpbnV4L21jMTQ2ODE4cnRjLmggfCBncmVwIHJ0Y19sb2NrID4vZGV2L251bGwKK2lmIHRlc3QgIiQ/IiAtZXEgMDsgdGhlbgorCUVYVFJBX0NGTEFHU19NT0RVTEU9IiRFWFRSQV9DRkxBR1NfTU9EVUxFIC1EUlRDX0xPQ0siCisJQUNfTVNHX1JFU1VMVChbeWVzXSkKK2Vsc2UKKwlBQ19NU0dfUkVTVUxUKFtub10pCitmaQorCSAKK2FyY2g9InVua25vd24iCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIHg4Ni02NCBhcmNoaXRlY3R1cmUpCitBWF9LRVJORUxfT1BUSU9OKENPTkZJR19YODZfNjQsIHg4NjY0PTEsIHg4NjY0PTApCitBWF9NU0dfUkVTVUxUX1lOKCR4ODY2NCkKK0JVSUxEX0hBTU1FUj1ubworaWYgdGVzdCAiJHg4NjY0IiAtZXEgMTsgdGhlbgorCWFyY2g9Ing4NiIKKwlCVUlMRF9IQU1NRVI9eWVzCitlbHNlCisJQUNfTVNHX0NIRUNLSU5HKGZvciB4ODYgYXJjaGl0ZWN0dXJlKQorCUFYX0tFUk5FTF9PUFRJT04oQ09ORklHX1g4NiwgeDg2PTEsIHg4Nj0wKQorCUFYX0tFUk5FTF9PUFRJT04oQ09ORklHX1g4Nl9XUF9XT1JLU19PSywgeDg2PTEsIHg4Nj0keDg2KQorCUFYX01TR19SRVNVTFRfWU4oJHg4NikKKwl0ZXN0ICIkeDg2IiA9IDEgJiYgYXJjaD0ieDg2IgorCQorCWlmIHRlc3QgIiRhcmNoIiA9ICJ1bmtub3duIjsgdGhlbgorICAJCUFDX01TR19DSEVDS0lORyhmb3IgaWE2NCBhcmNoaXRlY3R1cmUpCisgIAkJQVhfS0VSTkVMX09QVElPTihDT05GSUdfSUE2NCwgaWE2ND0xLCBpYTY0PTApCisgIAkJQVhfTVNHX1JFU1VMVF9ZTigkaWE2NCkKKyAgCQl0ZXN0ICIkaWE2NCIgPSAxICYmIGFyY2g9ImlhNjQiCisJZmkKKworZmkKK0FDX1NVQlNUKEJVSUxEX0hBTU1FUikKKwordGVzdCAiJGFyY2giID0gInVua25vd24iICYmIEFDX01TR19FUlJPUihVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUpCisKK2RubCBjaGVjayB0byBzZWUgaWYga2VybmVsIHZlcmlvbiBhcHByb3ByaWF0ZSBmb3IgYXJjaAorQUNfTVNHX0NIRUNLSU5HKGFyY2gva2VybmVsIHZlcnNpb24gY29tYmluYXRpb24pCitjYXNlICIkYXJjaCIgaW4KK2lhNjQpCisJQVhfS0VSTkVMX1ZFUlNJT04oMiwgNCwgMTgsIDwsIEFDX01TR19SRVNVTFQoW29rXSksCisJCUFDX01TR19FUlJPUihbdW5zdXBwb3J0ZWQgYXJjaC9rZXJuZWxdKSkgOzsKKyopIEFDX01TR19SRVNVTFQoW29rXSkKK2VzYWMKKworZG5sIGZvciBub3cgd2UgZG8gbm90IHN1cHBvcnQgUFJFRU1QVCBwYXRjaAorQUNfTVNHX0NIRUNLSU5HKFtmb3IgcHJlZW1wdCBwYXRjaF0pCitBWF9LRVJORUxfT1BUSU9OKENPTkZJR19QUkVFTVBULHByZWVtcHQ9MSxwcmVlbXB0PTApCitBWF9NU0dfUkVTVUxUX1lOKFskcHJlZW1wdF0pCit0ZXN0ICIkcHJlZW1wdCIgPSAwIHx8IEFDX01TR19FUlJPUihbdW5zdXBwb3J0ZWQga2VybmVsIGNvbmZpZ3VyYXRpb24gOiBDT05GSUdfUFJFRU1QVF0pCisKK0FDX1NVQlNUKEtJTkMpCisKK01PRElOU1RBTExESVI9L2xpYi9tb2R1bGVzLyRLVkVSUworIAorT1BST0ZJTEVfTU9EVUxFX0FSQ0g9JGFyY2gKK0FDX1NVQlNUKE9QUk9GSUxFX01PRFVMRV9BUkNIKQorXQorKQorCitkbmwgQVhfTVNHX1JFU1VMVF9ZTihhKQorZG5sIHJlc3VsdHMgInllcyIgaWZmIGE9PTEsICJubyIgZWxzZQorQUNfREVGVU4oW0FYX01TR19SRVNVTFRfWU5dLCBbeD1ubwordGVzdCAieCQxIiA9ICJ4MSIgJiYgeD15ZXMKK0FDX01TR19SRVNVTFQoJHgpXSkKKworZG5sIEFYX01BTExPQ19BVFRSSUJVVEUgLSBzZWUgaWYgZ2NjIHdpbGwgdGFrZSBfX2F0dHJpYnV0ZV9fKChtYWxsb2MpKQorQUNfREVGVU4oW0FYX01BTExPQ19BVFRSSUJVVEVdLAorWworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIG1hbGxvYyBhdHRyaWJ1dGUgaXMgdW5kZXJzdG9vZF0pCitTQVZFX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9Ii1XZXJyb3IgJENGTEFHUyIKK0FDX1RSWV9DT01QSUxFKCxbCit2b2lkIG1vbmtleSgpIF9fYXR0cmlidXRlX18oKG1hbGxvYykpOworXSxBQ19NU0dfUkVTVUxUKFt5ZXNdKTsgQUNfREVGSU5FKE1BTExPQ19BVFRSSUJVVEVfT0ssIDEsIFt3aGV0aGVyIG1hbGxvYyBhdHRyaWJ1dGUgaXMgdW5kZXJzdG9vZF0pLCBBQ19NU0dfUkVTVUxUKFtub10pKQorQ0ZMQUdTPSRTQVZFX0NGTEFHUyAKK10KKykKKworZG5sIGJ1aWx0aW5fZXhwZWN0IGlzIHVzZWQgaW4gbW9kdWxlIHdlIGNhbid0IGFkZCB0aGF0IGluIGNvbmZpZy5oCitBQ19ERUZVTihbQVhfQlVJTFRJTl9FWFBFQ1RdLAorWworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIF9fYnVpbHRpbl9leHBlY3QgaXMgdW5kZXJzdG9vZF0pCitTQVZFX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9Ii1XZXJyb3IgJENGTEFHUyIKK0FDX1RSWV9MSU5LKCxbCitpbnQgaTsKK2lmIChfX2J1aWx0aW5fZXhwZWN0KGksIDApKSB7IH0KK10sCitBQ19NU0dfUkVTVUxUKFt5ZXNdKTsgRVhUUkFfQ0ZMQUdTX01PRFVMRT0iJEVYVFJBX0NGTEFHU19NT0RVTEUgLURFWFBFQ1RfT0siLAorQUNfTVNHX1JFU1VMVChbbm9dKTspCitDRkxBR1M9JFNBVkVfQ0ZMQUdTIAorXQorKSAKKworZG5sIEFYX0VYVFJBX0RJUlMgLSBMZXQgdXNlciBzcGVjaWZ5IGV4dHJhIGRpcnMgZm9yIGluY2x1ZGUvbGlicworQUNfREVGVU4oW0FYX0VYVFJBX0RJUlNdLAorWworQUNfQVJHX1dJVEgoZXh0cmEtaW5jbHVkZXMsCitbICAtLXdpdGgtZXh0cmEtaW5jbHVkZXM9RElSICAgIGFkZCBleHRyYSBpbmNsdWRlIHBhdGhzXSwKKyAgdXNlX2V4dHJhX2luY2x1ZGVzPSIkd2l0aHZhbCIsCisgIHVzZV9leHRyYV9pbmNsdWRlcz1OTworKQoraWYgdGVzdCAtbiAiJHVzZV9leHRyYV9pbmNsdWRlcyIgJiYgXAorICAgICAgICB0ZXN0ICIkdXNlX2V4dHJhX2luY2x1ZGVzIiAhPSAiTk8iOyB0aGVuCisgIGFjX3NhdmVfaWZzPSRJRlMKKyAgSUZTPSc6JworICBmb3IgZGlyIGluICR1c2VfZXh0cmFfaW5jbHVkZXM7IGRvCisgICAgZXh0cmFfaW5jbHVkZXM9IiRleHRyYV9pbmNsdWRlcyAtSSRkaXIiCisgIGRvbmUKKyAgSUZTPSRhY19zYXZlX2lmcworICBDUFBGTEFHUz0iJENQUEZMQUdTICRleHRyYV9pbmNsdWRlcyIKK2ZpCisKK0FDX0FSR19XSVRIKGV4dHJhLWxpYnMsCitbICAtLXdpdGgtZXh0cmEtbGlicz1ESVIgICAgICAgIGFkZCBleHRyYSBsaWJyYXJ5IHBhdGhzXSwKKyAgdXNlX2V4dHJhX2xpYnM9JHdpdGh2YWwsCisgIHVzZV9leHRyYV9saWJzPU5PCispCitpZiB0ZXN0IC1uICIkdXNlX2V4dHJhX2xpYnMiICYmIFwKKyAgICAgICAgdGVzdCAiJHVzZV9leHRyYV9saWJzIiAhPSAiTk8iOyB0aGVuCisgICBhY19zYXZlX2lmcz0kSUZTCisgICBJRlM9JzonCisgICBmb3IgZGlyIGluICR1c2VfZXh0cmFfbGliczsgZG8KKyAgICAgZXh0cmFfbGlicmFyaWVzPSIkZXh0cmFfbGlicmFyaWVzIC1MJGRpciIKKyAgIGRvbmUKKyAgIElGUz0kYWNfc2F2ZV9pZnMKKyAgIExERkxBR1M9IiRMREZMQUdTICRleHRyYV9saWJyYXJpZXMiCitmaQorXQorKQorCitkbmwgQVhfUE9QVF9DT05TVCAtIGNoZWNrIHBvcHQgcHJvdG90eXBlCitBQ19ERUZVTihbQVhfUE9QVF9DT05TVF0sCitbCitBQ19NU0dfQ0hFQ0tJTkcoW3BvcHQgcHJvdG90eXBlXSkKK1NBVkVfQ1hYRkxBR1M9JENYWEZMQUdTCitDWFhGTEFHUz0iLVdlcnJvciAkQ1hYRkxBR1MiCitBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHBvcHQuaD5dLAorWworaW50IGM7IGNoYXIgKip2OworcG9wdEdldENvbnRleHQoMCwgYywgdiwgMCwgMCk7CitdLAorQUNfTVNHX1JFU1VMVChbdGFrZXMgY2hhciAqKl0pOywKK0FDX01TR19SRVNVTFQoW3Rha2VzIGNvbnN0IGNoYXIgKipdKTsgQUNfREVGSU5FKENPTlNUX1BPUFQsIDEsIFt3aGV0aGVyIHBvcHQgcHJvdG90eXBlIHRha2VzIGEgY29uc3QgY2hhciAqKl0pKQorQ1hYRkxBR1M9IiRTQVZFX0NYWEZMQUdTIgorXQorKQorCitkbmwgQVhfQ0hFQ0tfU1NUUkVBTSAtIGNoZWNrIGlmIGxvY2FsIHNzdHJlYW0gaXMgbmVlZGVkIHRvIGNvbXBpbGUgT0sKK0FDX0RFRlVOKFtBWF9DSEVDS19TU1RSRUFNXSwKK1sKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byB1c2UgaW5jbHVkZWQgc3N0cmVhbV0pCitBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHNzdHJlYW0+XSwgW10sIAorQUNfTVNHX1JFU1VMVChbbm9dKTssCitBQ19NU0dfUkVTVUxUKFt5ZXNdKTsgT1BfQ1hYRkxBR1M9IiRPUF9DWFhGTEFHUyAtSVwke3RvcF9zcmNkaXJ9L2luY2x1ZGUiKQorXQorKQorCitkbmwgQVhfQ0hFQ0tfVFlQRURFRih0eXBlZGVmX25hbWUsIHR5cGUsIGFjdGlvbi1pZi10cnVlLCBhY3Rpb24taWYtZmFsc2UpCitkbmwgZXhlYyBhY3Rpb24taWYtdHJ1ZSBpZiB0eXBlZGVmX25hbWUgaXMgYSB0eXBlZGVmIHRvIHR5cGUgZWxzZSBleGVjIAorZG5sIGFjdGlvbi1pZi1mYWxzZQorZG5sIGN1cnJlbnRseSB3b3JrIG9ubHkgd2l0aCB0eXBlIHR5cGVkZWYnZWQgaW4gc3RkZGVmLmgKK0FDX0RFRlVOKFtBWF9DSEVDS19UWVBFREVGXSwgWworZG5sIEFDX0xBTkdfUFVTSChDKSBub3QgaW4gYXV0b2NvbmYgMi4xMworQUNfTEFOR19TQVZFCitBQ19MQU5HX0MKK1NBVkVfQ0ZMQUdTPSRDRkxBR1MKK0NGTEFHUz0iLVdlcnJvciAkQ0ZMQUdTIgorCitBQ19UUllfQ09NUElMRSgKKyAgWworICAjaW5jbHVkZSA8c3RkZGVmLmg+CisgIF0sCisgIFsKKyAgdHlwZWRlZiB2b2lkICgqZmN0MSkoJDEpOworICB0eXBlZGVmIHZvaWQgKCpmY3QyKSgkMik7CisgIGZjdDEgZjEgPSAwOworICBmY3QyIGYyID0gMDsKKyAgaWYgKGYxID09IGYyKSB7fQorICBdLAorWyQzXSxbJDRdKQorCitDRkxBR1M9JFNBVkVfQ0ZMQUdTCitBQ19MQU5HX1JFU1RPUkUKK10pCisKKworZG5sIEFYX1RZUEVERUZFRF9OQU1FKHR5cGVkZWZfbmFtZSwgY2FuZGlkYXRlX2xpc3QsIHZhcl9uYW1lKQorZG5sIHNldCB2YXJfbmFtZSB0byB0aGUgdHlwZWRlZiBuYW1lIG9mICQxIHdoaWNoIG11c3QgYmUgaW4gY2FuZGl0YXRlX2xpc3QKK2RubCBlbHNlIHByb2R1Y2UgYSBmYXRhbCBlcnJvcgorQUNfREVGVU4oW0FYX1RZUEVERUZFRF9OQU1FXSwgWworCUFDX01TR19DSEVDS0lORyhbdHlwZSBvZiAkMV0pCisJZm9yIGYgaW4gJDI7IGRvCisJCUFYX0NIRUNLX1RZUEVERUYoJDEsICRmLCAkMz0iJGYiLCAkMz0iIikKKwkJaWYgdGVzdCAtbiAiJHskM30iOyB0aGVuCisJCQlicmVhaworCQlmaQorCWRvbmUKKwlpZiB0ZXN0IC1uICIkeyQzfSI7IHRoZW4KKwkJQUNfTVNHX1JFU1VMVChbJHskM31dKQorCWVsc2UKKwkJQUNfTVNHX0VSUk9SKFtub3QgZm91bmRdKQorCWZpCitdKQorCitkbmwgZmluZCBhIGJpbmFyeSBpbiB0aGUgcGF0aAorQUNfREVGVU4oW1FUX0ZJTkRfUEFUSF0sCitbCisJQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDFdKQorCUFDX0NBQ0hFX1ZBTChxdF9jdl9wYXRoXyQxLAorCVsKKwkJcXRfY3ZfcGF0aF8kMT0iTk9ORSIKKwkJaWYgdGVzdCAtbiAiJCQyIjsgdGhlbgorCQkJcXRfY3ZfcGF0aF8kMT0iJCQyIjsKKwkJZWxzZQorCQkJZGlycz0iJDMiCisJCQlxdF9zYXZlX0lGUz0kSUZTCisJCQlJRlM9JzonCisJCQlmb3IgZGlyIGluICRQQVRIOyBkbworCQkJCWRpcnM9IiRkaXJzICRkaXIiCisJCQlkb25lCisJCQlJRlM9JHF0X3NhdmVfSUZTCisgCisJCQlmb3IgZGlyIGluICRkaXJzOyBkbworCQkJCWlmIHRlc3QgLXggIiRkaXIvJDEiOyB0aGVuCisJCQkJCWlmIHRlc3QgLW4gIiQ1IjsgdGhlbgorCQkJCQkJZXZhbHN0cj0iJGRpci8kMSAkNSAyPiYxICIKKwkJCQkJCWlmIGV2YWwgJGV2YWxzdHI7IHRoZW4KKwkJCQkJCQlxdF9jdl9wYXRoXyQxPSIkZGlyLyQxIgorCQkJCQkJCWJyZWFrCisJCQkJCQlmaQorCQkJCQllbHNlCisJCQkJCQlxdF9jdl9wYXRoXyQxPSIkZGlyLyQxIgorCQkJCQkJYnJlYWsKKwkJCQkJZmkKKwkJCQlmaQorCQkJZG9uZQorCQlmaQorCV0pCisgCisJaWYgdGVzdCAteiAiJHF0X2N2X3BhdGhfJDEiIHx8IHRlc3QgIiRxdF9jdl9wYXRoXyQxIiA9ICJOT05FIjsgdGhlbgorCQlBQ19NU0dfUkVTVUxUKG5vdCBmb3VuZCkKKwkJJDQKKwllbHNlCisJCUFDX01TR19SRVNVTFQoJHF0X2N2X3BhdGhfJDEpCisJCSQyPSRxdF9jdl9wYXRoXyQxCisJZmkKK10pCisKK2RubCBGaW5kIHRoZSB1aWMgY29tcGlsZXIgb24gdGhlIHBhdGggb3IgaW4gcXRfY3ZfZGlyCitBQ19ERUZVTihbUVRfRklORF9VSUNdLAorWworCVFUX0ZJTkRfUEFUSCh1aWMsIGFjX3VpYywgJHF0X2N2X2Rpci9iaW4pCisJaWYgdGVzdCAteiAiJGFjX3VpYyIgLWEgIiRGQVRBTCIgPSAxOyB0aGVuCisJCUFDX01TR19FUlJPUihbdWljIGJpbmFyeSBub3QgZm91bmQgaW4gXCRQQVRIIG9yICRxdF9jdl9kaXIvYmluICFdKQorCWZpCitdKQorIAorZG5sIEZpbmQgdGhlIHJpZ2h0IG1vYyBpbiBwYXRoL3F0X2N2X2RpcgorQUNfREVGVU4oW1FUX0ZJTkRfTU9DXSwKK1sKKwlRVF9GSU5EX1BBVEgobW9jMiwgYWNfbW9jMiwgJHF0X2N2X2Rpci9iaW4pCisJUVRfRklORF9QQVRIKG1vYywgYWNfbW9jMSwgJHF0X2N2X2Rpci9iaW4pCisKKwlpZiB0ZXN0IC1uICIkYWNfbW9jMSIgLWEgLW4gIiRhY19tb2MyIjsgdGhlbgorCQlkbmwgZm91bmQgYm90aC4gUHJlZmVyIFF0MydzIGlmIGl0IGV4aXN0cyBlbHNlIG1vYzIKKwkJJGFjX21vYzEgLXYgMj4mMSB8IGdyZXAgIlF0IDMiID4vZGV2L251bGwKKwkJaWYgdGVzdCAiJD8iID0gMDsgdGhlbgorCQkJYWNfbW9jPSRhY19tb2MxOworCQllbHNlCisJCQlhY19tb2M9JGFjX21vYzI7CisJCWZpCisJZWxzZQorCQlpZiB0ZXN0IC1uICIkYWNfbW9jMSI7IHRoZW4KKwkJCWFjX21vYz0kYWNfbW9jMTsKKwkJZWxzZQorCQkJYWNfbW9jPSRhY19tb2MyOworCQlmaQorCWZpCisKKwlpZiB0ZXN0IC16ICIkYWNfbW9jIiAgLWEgIiRGQVRBTCIgPSAxOyB0aGVuCisJCUFDX01TR19FUlJPUihbbW9jIGJpbmFyeSBub3QgZm91bmQgaW4gXCRQQVRIIG9yICRxdF9jdl9kaXIvYmluICFdKQorCWZpCitdKQorCitkbmwgY2hlY2sgYSBwYXJ0aWN1bGFyIGxpYm5hbWUKK0FDX0RFRlVOKFtRVF9UUllfTElOS10sCitbCisJU0FWRV9MSUJTPSIkTElCUyIKKwlMSUJTPSIkTElCUyAkMSIKKwlBQ19UUllfTElOSyhbCisJI2luY2x1ZGUgPHFnbG9iYWwuaD4KKwkjaW5jbHVkZSA8cXN0cmluZy5oPgorCQldLAorCVsKKwlRU3RyaW5nIHMoIm1hbmdsZV9mYWlsdXJlIik7CisJI2lmIChRVF9WRVJTSU9OIDwgMjIxKQorCWJyZWFrX21lXyhcXFwpOworCSNlbmRpZgorCV0sCisJcXRfY3ZfbGlibmFtZT0kMSwKKwkpCisJTElCUz0iJFNBVkVfTElCUyIKK10pCisgCitkbmwgY2hlY2sgd2UgY2FuIGRvIGEgY29tcGlsZQorQUNfREVGVU4oW1FUX0NIRUNLX0NPTVBJTEVdLAorWworCUFDX01TR19DSEVDS0lORyhbZm9yIFF0IGxpYnJhcnkgbmFtZV0pCisgCisJQUNfQ0FDSEVfVkFMKHF0X2N2X2xpYm5hbWUsCisJWworCQlBQ19MQU5HX0NQTFVTUExVUworCQlTQVZFX0NYWEZMQUdTPSRDWFhGTEFHUworCQlDWFhGTEFHUz0iJENYWEZMQUdTICRRVF9JTkNMVURFUyAkUVRfTERGTEFHUyIgCisKKwkJZm9yIGxpYm5hbWUgaW4gLWxxdC1tdCAtbHF0MyAtbHF0MiAtbHF0OworCQlkbworCQkJUVRfVFJZX0xJTksoJGxpYm5hbWUpCisJCQlpZiB0ZXN0IC1uICIkcXRfY3ZfbGlibmFtZSI7IHRoZW4KKwkJCQlicmVhazsKKwkJCWZpCisJCWRvbmUKKworCQlDWFhGTEFHUz0kU0FWRV9DWFhGTEFHUworCV0pCisKKwlpZiB0ZXN0IC16ICIkcXRfY3ZfbGlibmFtZSI7IHRoZW4KKwkJQUNfTVNHX1JFU1VMVChbZmFpbGVkXSkgCisJCWlmIHRlc3QgIiRGQVRBTCIgPSAxIDsgdGhlbgorCQkJQUNfTVNHX0VSUk9SKFtDYW5ub3QgY29tcGlsZSBhIHNpbXBsZSBRdCBleGVjdXRhYmxlLiBDaGVjayB5b3UgaGF2ZSB0aGUgcmlnaHQgXCRRVERJUiAhXSkKKwkJZmkKKwllbHNlCisJCUFDX01TR19SRVNVTFQoWyRxdF9jdl9saWJuYW1lXSkKKwlmaQorXSkKKworZG5sIGdldCBRdCB2ZXJzaW9uIHdlJ3JlIHVzaW5nCitBQ19ERUZVTihbUVRfR0VUX1ZFUlNJT05dLAorWworCUFDX0NBQ0hFX0NIRUNLKFtRdCB2ZXJzaW9uXSxseXhfY3ZfcXR2ZXJzaW9uLAorCVsKKwkJQUNfTEFOR19DUExVU1BMVVMKKwkJU0FWRV9DUFBGTEFHUz0kQ1BQRkxBR1MKKwkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAkUVRfSU5DTFVERVMiCisKKwkJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgX19vbGluZV9fICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxxZ2xvYmFsLmg+CisiJSUlIlFUX1ZFUlNJT05fU1RSIiUlJSIKK0VPRgorCQlseXhfY3ZfcXR2ZXJzaW9uPWAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8IFwKKwkJCWdyZXAgJ14iJSUlIicgIDI+L2Rldi9udWxsIHwgXAorCQkJc2VkIC1lICdzLyIlJSUiLy9nJyAtZSAncy8iLy9nJ2AKKwkJcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorCQlDUFBGTEFHUz0kU0FWRV9DUFBGTEFHUworCV0pCisgCisJUVRfVkVSU0lPTj0kbHl4X2N2X3F0dmVyc2lvbgorCUFDX1NVQlNUKFFUX1ZFUlNJT04pCitdKQorIAorZG5sIHN0YXJ0IGhlcmUgCitBQ19ERUZVTihbUVRfRE9fSVRfQUxMXSwKK1sKKwlkbmwgUGxlYXNlIGxlYXZlIHRoaXMgYWxvbmUuIEkgdXNlIHRoaXMgZmlsZSBpbgorCWRubCBvcHJvZmlsZS4KKwlGQVRBTD0wCisKKwlBQ19BUkdfV0lUSChxdC1kaXIsIFsgIC0td2l0aC1xdC1kaXIgICAgICAgICAgIHdoZXJlIHRoZSByb290IG9mIFF0IGlzIGluc3RhbGxlZCBdLAorCQlbIHF0X2N2X2Rpcj1gZXZhbCBlY2hvICIkd2l0aHZhbCIvYCBdKQorCSAKKwlBQ19BUkdfV0lUSChxdC1pbmNsdWRlcywgWyAgLS13aXRoLXF0LWluY2x1ZGVzICAgICAgd2hlcmUgdGhlIFF0IGluY2x1ZGVzIGFyZS4gXSwKKwkJWyBxdF9jdl9pbmNsdWRlcz1gZXZhbCBlY2hvICIkd2l0aHZhbCJgIF0pCisgCisJQUNfQVJHX1dJVEgocXQtbGlicmFyaWVzLCBbICAtLXdpdGgtcXQtbGlicmFyaWVzICAgICB3aGVyZSB0aGUgUXQgbGlicmFyeSBpcyBpbnN0YWxsZWQuXSwKKwkJWyAgcXRfY3ZfbGlicmFyaWVzPWBldmFsIGVjaG8gIiR3aXRodmFsImAgXSkKKworCWRubCBwYXkgYXR0ZW50aW9uIHRvICRRVERJUiB1bmxlc3Mgb3ZlcnJpZGRlbgorCWlmIHRlc3QgLXogIiRxdF9jdl9kaXIiOyB0aGVuCisJCXF0X2N2X2Rpcj0kUVRESVIKKwlmaQorIAorCWRubCBkZXJpdmUgaW5jL2xpYiBpZiBuZWVkZWQKKwlpZiB0ZXN0IC1uICIkcXRfY3ZfZGlyIjsgdGhlbgorCQlpZiB0ZXN0IC16ICIkcXRfY3ZfaW5jbHVkZXMiOyB0aGVuCisJCQlxdF9jdl9pbmNsdWRlcz0kcXRfY3ZfZGlyL2luY2x1ZGUKKwkJZmkKKwkJaWYgdGVzdCAteiAiJHF0X2N2X2xpYnJhcmllcyI7IHRoZW4KKwkJCXF0X2N2X2xpYnJhcmllcz0kcXRfY3ZfZGlyL2xpYgorCQlmaQorCWZpCisKKwlkbmwgZmxhZ3MgZm9yIGNvbXBpbGF0aW9uCisJUVRfSU5DTFVERVM9CisJUVRfTERGTEFHUz0KKwlpZiB0ZXN0IC1uICIkcXRfY3ZfaW5jbHVkZXMiOyB0aGVuCisJCVFUX0lOQ0xVREVTPSItSSRxdF9jdl9pbmNsdWRlcyIKKwlmaQorCWlmIHRlc3QgLW4gIiRxdF9jdl9saWJyYXJpZXMiOyB0aGVuCisJCVFUX0xERkxBR1M9Ii1MJHF0X2N2X2xpYnJhcmllcyIKKwlmaQorCUFDX1NVQlNUKFFUX0lOQ0xVREVTKQorCUFDX1NVQlNUKFFUX0xERkxBR1MpCisgCisJUVRfRklORF9NT0MKKwlNT0M9JGFjX21vYworCUFDX1NVQlNUKE1PQykKKwlRVF9GSU5EX1VJQworCVVJQz0kYWNfdWljCisJQUNfU1VCU1QoVUlDKQorCisJUVRfQ0hFQ0tfQ09NUElMRQorIAorCVFUX0xJQj0kcXRfY3ZfbGlibmFtZTsKKwlBQ19TVUJTVChRVF9MSUIpCisKKwlpZiB0ZXN0IC1uICIkcXRfY3ZfbGlibmFtZSI7IHRoZW4KKwkJUVRfR0VUX1ZFUlNJT04KKwlmaQorXSkKKworZG5sIEFYX0NYWEZMQUdTX09QVElPTlModmFyLW5hbWUsIG9wdGlvbikKK2RubCBhZGQgb3B0aW9uIHRvIHZhci1uYW1lIGlmICRDWFggc3VwcG9ydCBpdC4KK0FDX0RFRlVOKFtBWF9DSEVDS19QUkVDT01QSUxFRF9IRUFERVJdLCBbCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgJHtDWFh9IHN1cHBvcnQgcHJlY29tcGlsZWQgaGVhZGVyXSkKK0FDX0xBTkdfU0FWRQorQUNfTEFOR19DUExVU1BMVVMKK1NBVkVfQ1hYRkxBR1M9JENYWEZMQUdTCitkbmwgd2UgY29uc2lkZXIgdGhhbiBpZiAtV2ludmFsaWQtcGNoIGlzIGFjY2VwdGVkIHBjaCB3aWxsIHdvcmtzIC4uLgorQ1hYRkxBR1M9LVdpbnZhbGlkLXBjaAorZG5sIGJ1dCB3ZSBkb24ndCB3YW50IC1XaW52YWxpZC1wY2ggZWxzZSBjb21waWxhdGlvbiB3aWxsIGZhaWwgZHVlIC1XZXJyb3IgYW5kCitkbmwgdGhlIGZhY3QgdGhhbiBzb21lIHBjaCB3aWxsIGJlIGludmFsaWQgZm9yIHRoZSBnaXZlbiBjb21waWxhdGlvbiBvcHRpb24KK0FDX1RSWV9DT01QSUxFKCxbO10sQUNfTVNHX1JFU1VMVChbeWVzXSk7ICQxPSIkeyQxfSAtaW5jbHVkZSBiaXRzL3N0ZGMrKy5oIiwgQUNfTVNHX1JFU1VMVChbbm9dKSkKK0NYWEZMQUdTPSRTQVZFX0NYWEZMQUdTCitBQ19MQU5HX1JFU1RPUkUKK10pCisKK2RubCBBWF9DSEVDS19ET0NCT09LCitBQ19ERUZVTihbQVhfQ0hFQ0tfRE9DQk9PS10sIFsKKyMgSXQncyBqdXN0IHJ1ZGUgdG8gZ28gb3ZlciB0aGUgbmV0IHRvIGJ1aWxkCitYU0xUUFJPQ19GTEFHUz0tLW5vbmV0CitET0NCT09LX1JPT1Q9CitpZiB0ZXN0ICEgLWYgL2V0Yy94bWwvY2F0YWxvZzsgdGhlbgorCWZvciBpIGluIC91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3N0eWxlc2hlZXQveHNsL253YWxzaCAvdXNyL3NoYXJlL3NnbWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMvOworCWRvCisJCWlmIHRlc3QgLWQgIiRpIjsgdGhlbgorCQkJRE9DQk9PS19ST09UPSRpCisJCWZpCisJZG9uZQorCisJIyBMYXN0IHJlc29ydCAtIHRyeSBuZXQKKwlpZiB0ZXN0IC16ICIkRE9DQk9PS19ST09UIjsgdGhlbgorCQlYU0xUUFJPQ19GTEFHUz0KKwlmaQorZWxzZQorCVhNTF9DQVRBTE9HPS9ldGMveG1sL2NhdGFsb2cKKwlDQVRfRU5UUllfU1RBUlQ9JzwhLS0nCisJQ0FUX0VOVFJZX0VORD0nLS0+JworZmkKKworQUNfQ0hFQ0tfUFJPRyhYU0xUUFJPQyx4c2x0cHJvYyx4c2x0cHJvYywpCitYU0xUUFJPQ19XT1JLUz1ubworaWYgdGVzdCAtbiAiJFhTTFRQUk9DIjsgdGhlbgorCUFDX01TR19DSEVDS0lORyhbd2hldGhlciB4c2x0cHJvYyB3b3Jrc10pCisKKwlpZiB0ZXN0IC1uICIkWE1MX0NBVEFMT0ciOyB0aGVuCisJCURCX0ZJTEU9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC9jdXJyZW50L3hodG1sL2RvY2Jvb2sueHNsIgorCWVsc2UKKwkJREJfRklMRT0iJERPQ0JPT0tfUk9PVC9kb2Nib29rLnhzbCIKKwlmaQorCisJJFhTTFRQUk9DICRYU0xUUFJPQ19GTEFHUyAkREJfRklMRSA+L2Rldi9udWxsIDI+JjEgPDwgRU5ECis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSdJU08tODg1OS0xJz8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIj4KKzxib29rIGlkPSJ0ZXN0Ij4KKzwvYm9vaz4KK0VORAorCWlmIHRlc3QgIiQ/IiA9IDA7IHRoZW4KKwkJWFNMVFBST0NfV09SS1M9eWVzCisJZmkKKwlBQ19NU0dfUkVTVUxUKCRYU0xUUFJPQ19XT1JLUykKK2ZpCitBTV9DT05ESVRJT05BTChoYXZlX3hzbHRwcm9jLCB0ZXN0ICIkWFNMVFBST0NfV09SS1MiID0gInllcyIpCisKK0FDX1NVQlNUKFhNTF9DQVRBTE9HKQorQUNfU1VCU1QoWFNMVFBST0NfRkxBR1MpCitBQ19TVUJTVChET0NCT09LX1JPT1QpCitBQ19TVUJTVChDQVRfRU5UUllfU1RBUlQpCitBQ19TVUJTVChDQVRfRU5UUllfRU5EKQorXSkKKworZG5sIEFYX0NGTEFHU19PUFRJT05TKHZhci1uYW1lLCBvcHRpb24pCitkbmwgYWRkIG9wdGlvbiB0byB2YXItbmFtZSBpZiAkQ0Mgc3VwcG9ydCBpdC4KK0FDX0RFRlVOKFtBWF9DRkxBR1NfT1BUSU9OXSwgWworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyICR7Q0N9ICQyIGlzIHVuZGVyc3Rvb2RdKQorQUNfTEFOR19TQVZFCitBQ19MQU5HX0MKK1NBVkVfQ0ZMQUdTPSRDRkxBR1MKK0NGTEFHUz0kMgorQUNfVFJZX0NPTVBJTEUoLFs7XSxBQ19NU0dfUkVTVUxUKFt5ZXNdKTsgJDE9IiR7JDF9ICQyIixBQ19NU0dfUkVTVUxUKFtub10pKQorQ0ZMQUdTPSRTQVZFX0NGTEFHUworQUNfTEFOR19SRVNUT1JFCitdKQorCisKK2RubCBBWF9DWFhGTEFHU19PUFRJT05TKHZhci1uYW1lLCBvcHRpb24pCitkbmwgYWRkIG9wdGlvbiB0byB2YXItbmFtZSBpZiAkQ1hYIHN1cHBvcnQgaXQuCitBQ19ERUZVTihbQVhfQ1hYRkxBR1NfT1BUSU9OXSwgWworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyICR7Q1hYfSAkMiBpcyB1bmRlcnN0b29kXSkKK0FDX0xBTkdfU0FWRQorQUNfTEFOR19DUExVU1BMVVMKK1NBVkVfQ1hYRkxBR1M9JENYWEZMQUdTCitDWFhGTEFHUz0kMgorQUNfVFJZX0NPTVBJTEUoLFs7XSxBQ19NU0dfUkVTVUxUKFt5ZXNdKTsgJDE9IiR7JDF9ICQyIixBQ19NU0dfUkVTVUxUKFtub10pKQorQ1hYRkxBR1M9JFNBVkVfQ1hYRkxBR1MKK0FDX0xBTkdfUkVTVE9SRQorXSkKKworZG5sIEFYX0NPUFlfSUZfQ0hBTkdFKHNvdXJjZSwgZGVzdCkKK2RubCBjb3B5IHNvdXJjZSB0byBkZXN0IGlmIHRoZXkgZG9uJ3QgY29tcGFyZSBlcXVhbGx5IG9yIGlmIGRlc3QgZG9lc24ndCBleGlzdAorQUNfREVGVU4oW0FYX0NPUFlfSUZfQ0hBTkdFXSwgWworaWYgdGVzdCAtciAkMjsgdGhlbgorCWlmIGNtcCAkMSAkMiA+IC9kZXYvbnVsbDsgdGhlbgorCQllY2hvICQyIGlzIHVuY2hhbmdlZAorCWVsc2UKKwkJY3AgLWYgJDEgJDIKKwlmaQorZWxzZQorCWNwIC1mICQxICQyCitmaQorXSkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvYXV0b21ha2UtZm9yZWlnbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWJiNmM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorb3Byb2ZpbGUgZG9lc24ndCB3YW50IEdOVS1sZXZlbHMgb2YgYXV0b21ha2Ugc3RyaWN0bmVzcyBzbyB0ZWxsIGl0IHRvIGJlICJmb3JlaWduIi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA1NzQwNTg1Li5jZjZjMzE2IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xNiArMTYgQEAgQUNfQ09ORklHX1NSQ0RJUihbbGlib3Avb3BfY29uZmlnLmhdKQorLUFNX0lOSVRfQVVUT01BS0UKKytBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9vcHJvZmlsZS1jcm9zcy1jb21waWxlLXRlc3RzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL29wcm9maWxlLWNyb3NzLWNvbXBpbGUtdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVmYTk1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9vcHJvZmlsZS1jcm9zcy1jb21waWxlLXRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsOTggQEAKK1ByZXZlbnQgcnVubmluZyBjaGVjayB0ZXN0cyBvbiBob3N0IGlmIGNyb3NzIGNvbXBpbGluZworCitUaGlzIHBhdGNoIGVuYWJsZXMgcnVubmluZyB0aGUgJ21ha2UgY2hlY2snIHRlc3RzIG9uIHRoZSB0YXJnZXQKK2luIGEgY3Jvc3MtY29tcGlsZWQgZW52aXJvbm1lbnQuIElmIG5vdCBjcm9zcy1jb21waWxpbmcsIHRoZW4gJ21ha2UKKyBjaGVjaycgYnVpbGRzIGFuZCBleGVjdXRlcyB0aGUgdGVzdHM7IG5vIGNoYW5nZSBmcm9tIHRoaXMgcGF0Y2guCitJbiBhIGNyb3NzLWNvbXBpbGluZyBlbnZpcm9ubWVudCwgdGhlIG1ha2UgdmFyaWFibGUgQ1JPU1NfQ09NUElMRSBpcworc2V0IHdoaWNoIGJ5cGFzc2VzIGFzc2lnaW5nIHRlc3RzIHRvIHRoZSBtYWtla2ZpbGUgdmFyaWFibGUgVEVTVFMuCitTaW5jZSBURVNUUyBpcyBlbXB0eSwgdGhlICdtYWtlIGNoZWNrJyBwcm9jZXNzIG5ldmVyIHRyaWVzIHRvIHJ1biB0aGUKK3Rlc3RzIG9uIHRoZSBob3N0cy4gIE9uIHRoZSB0YXJnZXQsIHRoZSB0ZXN0cyBtdXN0IGJlIHJ1biBtYW51YWxseS4KKworQWxzbywgaW4gdGhlIGxpYnV0aWwrKyB0ZXN0cywgYSBtYWtlZmlsZSB2YXJpYWJsZSBTUkNESVIgaXMgcGFzc2VkIGludG8KK3RoZSBjb21waWxhdGlvbiBwaGFzZSwgcG9pbnRpbmcgdG8gdGhlIHJ1bnRpbWUgbG9jYXRpb24gb2YgdGhlIHRlc3QKKydmaWxlLW1hbmlwLXRlc3RzJy4gIFRoZSBtZWNoYW5pc20gdXNlZCBmb3IgYSBob3N0IHRlc3QsIGJhc2VkIG9uCisndG9wZGlyJyBkb2Vzbid0IHdvcmsuICBJbnN0ZWFkLCBpZiBDUk9TU19DT01QSUxFIGlzIHNldCwgdGhlCittYWtlZmlsZSB0YWtlcyB0aGUgcGF0aCBvZiBTUkNESVIgZnJvbSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgYW5kIG5vdAorZnJvbSBhbiBleHByZXNzaW9uIGJhc2VkIG9uIHRoZSBob3N0IHBhdGggJ3RvcGRpcicuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBEYXZlIExlcm5lciA8ZGF2ZS5sZXJuZXJAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNDFlY2U2NC4uY2U1YTE2ZiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzkyLDYgKzM5Miw3IEBAIEFDX0FSR19FTkFCTEUoYWNjb3VudC1jaGVjaywKKyAJZW5hYmxlX2FjY291bnRfY2hlY2s9JGVuYWJsZXZhbCwgZW5hYmxlX2FjY291bnRfY2hlY2s9eWVzKQorIAorIEFNX0NPTkRJVElPTkFMKENIRUNLX0FDQ09VTlQsIHRlc3QgIngkZW5hYmxlX2FjY291bnRfY2hlY2siID0gInh5ZXMiKQorK0FNX0NPTkRJVElPTkFMKENST1NTX0NPTVBJTEUsIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiA9ICJ4eWVzIikKKyAKKyBBQ19TVUJTVChPUF9DRkxBR1MpCisgQUNfU1VCU1QoT1BfQ1hYRkxBR1MpCitkaWZmIC0tZ2l0IGEvbGliZGIvdGVzdHMvTWFrZWZpbGUuYW0gYi9saWJkYi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggOGE2OTAwMy4uZDgyMDA5MCAxMDA2NDQKKy0tLSBhL2xpYmRiL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi9saWJkYi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTEzLDQgKzEzLDYgQEAgY2hlY2tfUFJPR1JBTVMgPSBkYl90ZXN0CisgZGJfdGVzdF9TT1VSQ0VTID0gZGJfdGVzdC5jCisgZGJfdGVzdF9MREFERCA9IC4uL2xpYm9kYi5hIC4uLy4uL2xpYnV0aWwvbGlidXRpbC5hCisgCisraWYgISBDUk9TU19DT01QSUxFCisgVEVTVFMgPSAke2NoZWNrX1BST0dSQU1TfQorK2VuZGlmCitkaWZmIC0tZ2l0IGEvbGlib3AvdGVzdHMvTWFrZWZpbGUuYW0gYi9saWJvcC90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggOGE3OWViNS4uNmQ0MTdjNCAxMDA2NDQKKy0tLSBhL2xpYm9wL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi9saWJvcC90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTMzLDQgKzMzLDYgQEAgbG9hZF9ldmVudHNfZmlsZXNfdGVzdHNfTERBREQgPSAke0NPTU1PTl9MSUJTfQorIG1hbmdsZV90ZXN0c19TT1VSQ0VTID0gbWFuZ2xlX3Rlc3RzLmMKKyBtYW5nbGVfdGVzdHNfTERBREQgPSAke0NPTU1PTl9MSUJTfQorIAorK2lmICEgQ1JPU1NfQ09NUElMRQorIFRFU1RTID0gJHtjaGVja19QUk9HUkFNU30gdXRmOF9jaGVja2VyLnNoCisrZW5kaWYKK2RpZmYgLS1naXQgYS9saWJyZWdleC90ZXN0cy9NYWtlZmlsZS5hbSBiL2xpYnJlZ2V4L3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCA2ZjE5ODM4Li4xZDE3NmY5IDEwMDY0NAorLS0tIGEvbGlicmVnZXgvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL2xpYnJlZ2V4L3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMTgsNCArMTgsNiBAQCBqYXZhX3Rlc3RfTERBREQgPSBcCisgCisgRVhUUkFfRElTVCA9IG1hbmdsZWQtbmFtZS5pbgorIAorK2lmICEgQ1JPU1NfQ09NUElMRQorIFRFU1RTID0gJHtjaGVja19QUk9HUkFNU30KKytlbmRpZgorZGlmZiAtLWdpdCBhL2xpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5hbSBiL2xpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggNTFhZjAzMS4uYTAxZWEyZCAxMDA2NDQKKy0tLSBhL2xpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvbGlidXRpbCsrL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMSw3ICsxLDkgQEAKKyAKKyBSRUFMUEFUSD0gcmVhZGxpbmsgLWYKKyAKKytpZiAhIENST1NTX0NPTVBJTEUKKyBTUkNESVIgOj0gJChzaGVsbCAkKFJFQUxQQVRIKSAkKHRvcGRpcikvbGlidXRpbCsrL3Rlc3RzLyApCisrZW5kaWYKKyAKKyBBTV9DUFBGTEFHUyA9IFwKKyAJLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsKysgLUQgU1JDRElSPSJcIiQoU1JDRElSKS9cIiIgQE9QX0NQUEZMQUdTQAorQEAgLTQ2LDQgKzQ4LDYgQEAgY2FjaGVkX3ZhbHVlX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KKyB1dGlsaXR5X3Rlc3RzX1NPVVJDRVMgPSB1dGlsaXR5X3Rlc3RzLmNwcAorIHV0aWxpdHlfdGVzdHNfTERBREQgPSAke0NPTU1PTl9MSUJTfQorIAorK2lmICEgQ1JPU1NfQ09NUElMRQorIFRFU1RTID0gJHtjaGVja19QUk9HUkFNU30KKytlbmRpZgorZGlmZiAtLWdpdCBhL2xpYnV0aWwvdGVzdHMvTWFrZWZpbGUuYW0gYi9saWJ1dGlsL3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCBkZmNkNmVjLi5lODgzMWI1IDEwMDY0NAorLS0tIGEvbGlidXRpbC90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvbGlidXRpbC90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTEyLDQgKzEyLDYgQEAgZmlsZV90ZXN0c19MREFERCA9IC4uL2xpYnV0aWwuYQorIHN0cmluZ190ZXN0c19TT1VSQ0VTID0gc3RyaW5nX3Rlc3RzLmMKKyBzdHJpbmdfdGVzdHNfTERBREQgPSAuLi9saWJ1dGlsLmEKKyAKKytpZiAhIENST1NTX0NPTVBJTEUKKyBURVNUUyA9ICR7Y2hlY2tfUFJPR1JBTVN9CisrZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9yb290LWhvbWUtZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL3Jvb3QtaG9tZS1kaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmYzVlNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9yb290LWhvbWUtZGlyLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK29wcm9maWxlOiBEZXRlcm1pbmUgdGhlIHJvb3QgaG9tZSBkaXJlY3RvcnkgZHluYW1pY2FsbHkKKworVGhpcyBjb21taXQgZGV0ZWN0cyB0aGUgcm9vdCBob21lIGRpcmVjdG9yeSBkeW5hbWljYWxseSB3aXRoIGNoYW5nZXMgdG8KK3RoZSBvcHJvZmlsZSBndWkgYXBwIHNvdXJjZS4KKworVGhlIGNvbW1pdCByZXBsYWNlcyBhbiBlYXJsaWVyIGZpeCB0aGF0IGRldGVjdGVkIGFuZCBhZGp1c3RlZCBhCisnbm9uLXN0YW5kYXJkJyByb290IGhvbWUgZGlyZWN0b3J5IGF0IGJ1aWxkIHRpbWUuICBUaGUgYWR2YW50YWdlIG9mIHRoaXMKK3BhdGNoIGlzIHRoYXQgdGhlIG9wcm9maWxlIHRvb2xzIGFyZSBhZGp1c3RlZCB0byB0aGUgY3VycmVudCBydW4tdGltZQorcGF0aCB0byB+cm9vdCwgbm90IHRoZSBidWlsZCB0aW1lIHBhdGguCisKK1Vwc3RyZWFtLVN0YXR1czogaW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IERhdmUgTGVybmVyIDxkYXZlLmxlcm5lckB3aW5kcml2ZXIuY29tPgorCitJbmRleDogb3Byb2ZpbGUtMS4wLjAvZG9jL29wcm9maWxlLmh0bWwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcHJvZmlsZS0xLjAuMC5vcmlnL2RvYy9vcHJvZmlsZS5odG1sCTIwMTQtMTEtMDMgMTc6NTU6MzEuNTExMDM0ODU3ICswMDAwCisrKysgb3Byb2ZpbGUtMS4wLjAvZG9jL29wcm9maWxlLmh0bWwJMjAxNC0xMS0wMyAxNzo1NzoyNi40MTUwMzc5ODggKzAwMDAKK0BAIC0xNTYzLDggKzE1NjMsOCBAQAorIAkJPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+bXVzdDwvZW0+PC9zcGFuPiBzdG9wIGl0IGluIGEgY29udHJvbGxlZCBtYW5uZXIgaW4gb3JkZXIgdG8gcHJvY2VzcworIAkJdGhlIHByb2ZpbGUgZGF0YSBpdCBoYXMgY29sbGVjdGVkLiAgVXNlIDxjb2RlIGNsYXNzPSJjb2RlIj5raWxsIC1TSUdJTlQgJmx0O29wZXJmLVBJRCZndDs8L2NvZGU+CisgCQlmb3IgdGhpcyBwdXJwb3NlLiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHdoZW4gcnVubmluZyA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcGVyZjwvc3Ryb25nPjwvc3Bhbj4KKy0JCXdpdGggdGhpcyBvcHRpb24sIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBzaG91bGQgYmUgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4vcm9vdDwvY29kZT4gb3IgYSBzdWJkaXJlY3RvcnkKKy0JCW9mIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L3Jvb3Q8L2NvZGU+IHRvIGF2b2lkIHN0b3Jpbmcgc2FtcGxlIGRhdGEgZmlsZXMgaW4gbG9jYXRpb25zIGFjY2Vzc2libGUgYnkgcmVndWxhciB1c2Vycy4KKysJCXdpdGggdGhpcyBvcHRpb24sIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBzaG91bGQgYmUgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5+cm9vdDwvY29kZT4gb3IgYSBzdWJkaXJlY3RvcnkKKysJCW9mIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+fnJvb3Q8L2NvZGU+IHRvIGF2b2lkIHN0b3Jpbmcgc2FtcGxlIGRhdGEgZmlsZXMgaW4gbG9jYXRpb25zIGFjY2Vzc2libGUgYnkgcmVndWxhciB1c2Vycy4KKyAJCTwvcD4KKyAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICA8ZHQ+CitJbmRleDogb3Byb2ZpbGUtMS4wLjAvZG9jL29wcm9maWxlLnhtbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wcm9maWxlLTEuMC4wLm9yaWcvZG9jL29wcm9maWxlLnhtbAkyMDE0LTExLTAzIDE3OjU1OjMxLjUxNTAzNDg1NyArMDAwMAorKysrIG9wcm9maWxlLTEuMC4wL2RvYy9vcHJvZmlsZS54bWwJMjAxNC0xMS0wMyAxNzo1ODowMy43MTkwMzkwMDUgKzAwMDAKK0BAIC02NTQsOCArNjU0LDggQEAKKyAJCTxlbXBoYXNpcz5tdXN0PC9lbXBoYXNpcz4gc3RvcCBpdCBpbiBhIGNvbnRyb2xsZWQgbWFubmVyIGluIG9yZGVyIHRvIHByb2Nlc3MKKyAJCXRoZSBwcm9maWxlIGRhdGEgaXQgaGFzIGNvbGxlY3RlZC4gIFVzZSA8Y29kZT5raWxsIC1TSUdJTlQgJmx0O29wZXJmLVBJRCZndDs8L2NvZGU+CisgCQlmb3IgdGhpcyBwdXJwb3NlLiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHdoZW4gcnVubmluZyA8Y29tbWFuZD5vcGVyZjwvY29tbWFuZD4KKy0JCXdpdGggdGhpcyBvcHRpb24sIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBzaG91bGQgYmUgPGZpbGVuYW1lPi9yb290PC9maWxlbmFtZT4gb3IgYSBzdWJkaXJlY3RvcnkKKy0JCW9mIDxmaWxlbmFtZT4vcm9vdDwvZmlsZW5hbWU+IHRvIGF2b2lkIHN0b3Jpbmcgc2FtcGxlIGRhdGEgZmlsZXMgaW4gbG9jYXRpb25zIGFjY2Vzc2libGUgYnkgcmVndWxhciB1c2Vycy4KKysJCXdpdGggdGhpcyBvcHRpb24sIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBzaG91bGQgYmUgPGZpbGVuYW1lPn5yb290PC9maWxlbmFtZT4gb3IgYSBzdWJkaXJlY3RvcnkKKysJCW9mIDxmaWxlbmFtZT5+cm9vdDwvZmlsZW5hbWU+IHRvIGF2b2lkIHN0b3Jpbmcgc2FtcGxlIGRhdGEgZmlsZXMgaW4gbG9jYXRpb25zIGFjY2Vzc2libGUgYnkgcmVndWxhciB1c2Vycy4KKyAJCTwvcGFyYT48L2xpc3RpdGVtPgorIAk8L3Zhcmxpc3RlbnRyeT4KKyAJPHZhcmxpc3RlbnRyeT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MTRiZTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMTkgQEAKKyMhL2Jpbi9zaAorCitzYXZlZF9kaXI9JFBXRAorZm9yIGRpciBpbiAqL3Rlc3RzIDsgZG8KKwljZCAkZGlyCisJZm9yIGF0ZXN0IGluICogOyBkbworCQlpZiBbIFwoIC14ICRhdGVzdCBcKSAtYSBcKCAtZiAkYXRlc3QgXCkgXSA7IHRoZW4KKwkJCS4vJGF0ZXN0ID4gJHthdGVzdH0uc3Rkb3V0IDI+ICR7YXRlc3R9LnN0ZGVycgorCQkJaWYgWyAkPyA9IDAgXSA7IHRoZW4KKwkJCQllY2hvICJQQVNTOiAkZGlyICRhdGVzdCIKKwkJCQlybSAke2F0ZXN0fS5zdGRvdXQgJHthdGVzdH0uc3RkZXJyCisJCQllbHNlCisJCQkJZWNobyAiRkFJTDogJHtkaXJ9LyR7YXRlc3R9IgorCQkJZmkKKwkJZmkKKwlkb25lCisJY2QgJHNhdmVkX2RpcgorZG9uZQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGVfMS4xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGVfMS4xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJhOTRhZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZV8xLjEuMC5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIG9wcm9maWxlLmluYworCitERVBFTkRTICs9ICJ2aXJ0dWFsL2tlcm5lbCIKK0RFUEVORFNfYXBwZW5kX3Bvd2VycGM2NCA9ICIgbGlicGZtNCIKKworU1JDX1VSSVttZDVzdW1dID0gIjI0OGM0YzA2OWY5NDc2ZjQyN2ZhNzE5NTU2M2Y5ODY3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNmNzU5YTZkZTFhNjAzM2Q1ZGZjOTNiZGExMjlhOWYyZTEyOGFlY2M0MjM4Y2M2NTdmZWIwODAxZDFiMDM2NmMiCisKK1MgPSAiJHtXT1JLRElSfS9vcHJvZmlsZS0ke1BWfSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWktc2VydmVyL2luaXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXIvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNTQ0ZWE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWktc2VydmVyL2luaXQKQEAgLTAsMCArMSwzNyBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBvcHJvZmlsZS1zZXJ2ZXIKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRuZXR3b3JrCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbmV0d29yaworIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IE9Qcm9maWxlVUkgc2VydmVyCisjIERlc2NyaXB0aW9uOiAgICAgICAKKyMjIyBFTkQgSU5JVCBJTkZPCisKKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKyAgICAgICAgZWNobyAiU3RhcnRpbmcgT1Byb2ZpbGVVSSBzZXJ2ZXIiCisJLiAvZXRjL3Byb2ZpbGUKKwkvdXNyL2Jpbi9vcHJvZmlsZS1zZXJ2ZXIgJgorICA7OworCisgIHN0b3ApCisgICAgICAgIGVjaG8gIlN0b3BwaW5nIE9Qcm9maWxlVUkgc2VydmVyIgorICAgICAgICBraWxscHJvYyBvcHJvZmlsZS1zZXJ2ZXIKKyAgOzsKKworICByZXN0YXJ0KQorCSQwIHN0b3AKKyAgICAgICAgc2xlZXAgMQorICAgICAgICAkMCBzdGFydAorICA7OworCisgICopCisgICAgICAgIGVjaG8gInVzYWdlOiAkMCB7IHN0YXJ0IHwgc3RvcCB8IHJlc3RhcnQgfSIKKyAgOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXIvb3Byb2ZpbGV1aS1zZXJ2ZXIuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLXNlcnZlci9vcHJvZmlsZXVpLXNlcnZlci5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMmNiZTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXIvb3Byb2ZpbGV1aS1zZXJ2ZXIuc2VydmljZQpAQCAtMCwwICsxLDYgQEAKK1tVbml0XQorRGVzY3JpcHRpb249T1Byb2ZpbGVVSSBTZXJ2ZXIKK0FmdGVyPW5ldHdvcmsudGFyZ2V0CisKK1tTZXJ2aWNlXQorRXhlY1N0YXJ0PS9iaW4vc2ggLWMgIi4gQFNZU0NPTkZESVJAL3Byb2ZpbGU7IEBCSU5ESVJAL29wcm9maWxlLXNlcnZlciIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLXNlcnZlcl9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXJfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViM2I3OGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXJfZ2l0LmJiCkBAIC0wLDAgKzEsMzQgQEAKK3JlcXVpcmUgb3Byb2ZpbGV1aS5pbmMKKworU1JDUkVWID0gIjM4OWUxODc1YWY0NzIxZDUyYzdlNjVjZjljZmZmYjY5YjBlZDZhNTkiCitQViA9ICIwLjArZ2l0JHtTUkNQVn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvb3Byb2ZpbGV1aSBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IFwKKyAgICAgICAgICAgZmlsZTovL29wcm9maWxldWktc2VydmVyLnNlcnZpY2UgIgorCitERVBFTkRTICs9ICJpbnRsdG9vbC1uYXRpdmUiCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWNsaWVudCAtLWVuYWJsZS1zZXJ2ZXIiCisKK1JERVBFTkRTXyR7UE59ID0gIm9wcm9maWxlIGF2YWhpLWRhZW1vbiIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9vcHJvZmlsZXVpLXNlcnZlcgorCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L29wcm9maWxldWktc2VydmVyLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJc2VkIC1pIC1lICdzLEBTWVNDT05GRElSQCwke3N5c2NvbmZkaXJ9LGcnIFwKKwkJLWUgJ3MsQEJJTkRJUkAsJHtiaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL29wcm9maWxldWktc2VydmVyLnNlcnZpY2UKK30KKworaW5oZXJpdCB1cGRhdGUtcmMuZCBzeXN0ZW1kCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJvcHJvZmlsZXVpLXNlcnZlciIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDk5IDUgMiAuIHN0b3AgMjAgMCAxIDYgLiIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIm9wcm9maWxldWktc2VydmVyLnNlcnZpY2UiCitTWVNURU1EX0FVVE9fRU5BQkxFID0gImRpc2FibGUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZjZjAxNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLmluYwpAQCAtMCwwICsxLDE2IEBACitTVU1NQVJZID0gIlVzZXIgSW50ZXJmYWNlIGZvciB0aGUgU3lzdGVtLVdpZGUgUHJvZmlsZXIiCitERVNDUklQVElPTiA9ICJVc2VyIGludGVyZmFjZSBmb3IgdGhlIE9Qcm9maWxlIHRvb2wiCitIT01FUEFHRSA9ICJodHRwOi8vbGFicy5vLWhhbmQuY29tL29wcm9maWxldWkvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK1NFQ1RJT04gPSAieDExIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgYXZhaGkgaW50bHRvb2wtbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dAorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWF2YWhpIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aV9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI2OWQ1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpX2dpdC5iYgpAQCAtMCwwICsxLDE3IEBACityZXF1aXJlIG9wcm9maWxldWkuaW5jCisKK0RFUEVORFMgKz0gImd0aysgbGliZ2xhZGUgbGlieG1sMiBhdmFoaS11aSBnY29uZiIKKworU1JDUkVWID0gIjM4OWUxODc1YWY0NzIxZDUyYzdlNjVjZjljZmZmYjY5YjBlZDZhNTkiCitQViA9ICIwLjArZ2l0JHtTUkNQVn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvb3Byb2ZpbGV1aSIKKworRVhUUkFfT0VDT05GICs9ICItLWVuYWJsZS1jbGllbnQgLS1kaXNhYmxlLXNlcnZlciIKKworUEFDS0FHRVMgPSsgIm9wcm9maWxldWktdmlld2VyIgorCitGSUxFU19vcHJvZmlsZXVpLXZpZXdlciA9ICIke2JpbmRpcn0vb3BhcmNoY29udiAke2JpbmRpcn0vb3Byb2ZpbGUtdmlld2VyICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyAke2RhdGFkaXJ9L29wcm9maWxldWkvICR7ZGF0YWRpcn0vaWNvbnMiCitSREVQRU5EU19vcHJvZmlsZXVpLXZpZXdlciA9ICJvcHJvZmlsZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9wZXJmL3BlcmYtZmVhdHVyZXMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3BlcmYvcGVyZi1mZWF0dXJlcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4NTlhYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9wZXJmL3BlcmYtZmVhdHVyZXMuaW5jCkBAIC0wLDAgKzEsMjIgQEAKK1BFUkZfRkVBVFVSRVNfRU5BQkxFID89ICJwZXJmLXNjcmlwdGluZyBwZXJmLXR1aSIKKworZGVmIHBlcmZfZmVhdHVyZV9lbmFibGVkKGZlYXR1cmUsIHRydWV2YWwsIGZhbHNldmFsLCBkKToKKyAgICAiIiIKKyAgICBDaGVjayB3aGljaCBwZXJmIGZlYXR1cmVzIGFyZSBlbmFibGVkLgorCisgICAgVGhlIFBFUkZfRkVBVFVSRVNfRU5BQkxFIHZhcmlhYmxlIGxpc3RzIHRoZSBwZXJmIGZlYXR1cmVzIHRvCisgICAgZW5hYmxlLiAgT3ZlcnJpZGUgaXQgaWYgeW91IHdhbnQgc29tZXRoaW5nIGRpZmZlcmVudCBmcm9tIHdoYXQncworICAgIGxpc3RlZCBhYm92ZSwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuICBJZiBlbXB0eSwgdGhlIGJ1aWxkIHdvbid0CisgICAgZW5hYmxlIGFueSBmZWF0dXJlcyAod2hpY2ggbWF5IGJlIGV4YWN0bHkgd2hhdCB5b3Ugd2FudCwganVzdCBhCisgICAgYmFyZWJvbmVzIHBlcmYgd2l0aG91dCBhbnkgZXh0cmEgYmFnZ2FnZSwgd2hhdCB5b3UgZ2V0IGlmIHlvdQorICAgIHNwZWNpZnkgYW4gZW1wdHkgZmVhdHVyZSBsaXN0KS4KKworICAgIEF2YWlsYWJsZSBwZXJmIGZlYXR1cmVzOgorICAgICAgcGVyZi1zY3JpcHRpbmc6IGVuYWJsZSBzdXBwb3J0IGZvciBQZXJsIGFuZCBQeXRob24gYmluZGluZ3MKKyAgICAgIHBlcmYtdHVpOiBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIHBlcmYgVFVJICh2aWEgbGlibmV3dCkKKworICAgICIiIgorICAgIGVuYWJsZWRfZmVhdHVyZXMgPSBkLmdldFZhcigiUEVSRl9GRUFUVVJFU19FTkFCTEUiLCBUcnVlKSBvciAiIgorICAgIGlmIGZlYXR1cmUgaW4gZW5hYmxlZF9mZWF0dXJlczoKKyAgICAgICAgcmV0dXJuIHRydWV2YWwKKyAgICByZXR1cm4gZmFsc2V2YWwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9wZXJmL3BlcmYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvcGVyZi9wZXJmLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYjNhMmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvcGVyZi9wZXJmLmJiCkBAIC0wLDAgKzEsMjEwIEBACitTVU1NQVJZID0gIlBlcmZvcm1hbmNlIGFuYWx5c2lzIHRvb2xzIGZvciBMaW51eCIKK0RFU0NSSVBUSU9OID0gIlBlcmZvcm1hbmNlIGNvdW50ZXJzIGZvciBMaW51eCBhcmUgYSBuZXcga2VybmVsLWJhc2VkIFwKK3N1YnN5c3RlbSB0aGF0IHByb3ZpZGUgYSBmcmFtZXdvcmsgZm9yIGFsbCB0aGluZ3MgXAorcGVyZm9ybWFuY2UgYW5hbHlzaXMuIEl0IGNvdmVycyBoYXJkd2FyZSBsZXZlbCBcCisoQ1BVL1BNVSwgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0KSBmZWF0dXJlcyBcCithbmQgc29mdHdhcmUgZmVhdHVyZXMgKHNvZnR3YXJlIGNvdW50ZXJzLCB0cmFjZXBvaW50cykgXAorYXMgd2VsbC4iCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kNzgxMGZhYjc0ODdmYjBhYWQzMjdiNzZmMWJlN2NkNyIKKworUFIgPSAicjkiCisKK3JlcXVpcmUgcGVyZi1mZWF0dXJlcy5pbmMKKworQlVJTERQRVJGX2xpYmMtdWNsaWJjID0gIm5vIgorCisjIGd1aSBzdXBwb3J0IHdhcyBhZGRlZCB3aXRoIGtlcm5lbCAzLjYuMzUKKyMgc2luY2UgMy4xMCBsaWJuZXd0IHdhcyByZXBsYWNlZCBieSBzbGFuZworIyB0byBjb3ZlciBhIHdpZGUgcmFuZ2Ugb2Yga2VybmVsIHdlIGFkZCBib3RoIGRlcGVuZGVuY2llcworVFVJX0RFUEVORFMgPSAiJHtAcGVyZl9mZWF0dXJlX2VuYWJsZWQoJ3BlcmYtdHVpJywgJ2xpYm5ld3Qgc2xhbmcnLCAnJyxkKX0iCitTQ1JJUFRJTkdfREVQRU5EUyA9ICIke0BwZXJmX2ZlYXR1cmVfZW5hYmxlZCgncGVyZi1zY3JpcHRpbmcnLCAncGVybCBweXRob24nLCAnJyxkKX0iCitMSUJVTldJTkRfREVQRU5EUyA9ICIke0BwZXJmX2ZlYXR1cmVfZW5hYmxlZCgncGVyZi1saWJ1bndpbmQnLCAnbGlidW53aW5kJywgJycsZCl9IgorCitERVBFTkRTID0gIiBcCisgICAgdmlydHVhbC8ke01MUFJFRklYfWxpYmMgXAorICAgICR7TUxQUkVGSVh9ZWxmdXRpbHMgXAorICAgICR7TUxQUkVGSVh9YmludXRpbHMgXAorICAgICR7VFVJX0RFUEVORFN9IFwKKyAgICAke1NDUklQVElOR19ERVBFTkRTfSBcCisgICAgJHtMSUJVTldJTkRfREVQRU5EU30gXAorICAgIGJpc29uIGZsZXggeHogXAorIgorCitkb19jb25maWd1cmVbZGVwZW5kc10gKz0gInZpcnR1YWwva2VybmVsOmRvX3NoYXJlZF93b3JrZGlyIgorCitQUk9WSURFUyA9ICJ2aXJ0dWFsL3BlcmYiCisKK2luaGVyaXQgbGludXgta2VybmVsLWJhc2Uga2VybmVsLWFyY2ggcHl0aG9ubmF0aXZlCisKKyMgbmVlZGVkIGZvciBidWlsZGluZyB0aGUgdG9vbHMvcGVyZiBQeXRob24gYmluZGluZ3MKK2luaGVyaXQgcHl0aG9uLWRpcgorZXhwb3J0IFNUQUdJTkdfSU5DRElSCitleHBvcnQgU1RBR0lOR19MSUJESVIKK2V4cG9ydCBCVUlMRF9TWVMKK2V4cG9ydCBIT1NUX1NZUworZXhwb3J0IFBZVEhPTl9TSVRFUEFDS0FHRVNfRElSCisKKyNrZXJuZWwgMy4xKyBzdXBwb3J0cyBXRVJST1IgdG8gZGlzYWJsZSB3YXJuaW5ncyBhcyBlcnJvcnMKK2V4cG9ydCBXRVJST1IgPSAiMCIKKworZG9fcG9wdWxhdGVfbGljW2RlcGVuZHNdICs9ICJ2aXJ0dWFsL2tlcm5lbDpkb19wYXRjaCIKKworIyBuZWVkZWQgZm9yIGJ1aWxkaW5nIHRoZSB0b29scy9wZXJmIFBlcmwgYmluZGluZworaW5oZXJpdCBwZXJsbmF0aXZlIGNwYW4tYmFzZQorIyBFbnYgdmFyIHdoaWNoIHRlbGxzIHBlcmwgaWYgaXQgc2hvdWxkIHVzZSBob3N0IChubykgb3IgdGFyZ2V0ICh5ZXMpIHNldHRpbmdzCitleHBvcnQgUEVSTENPTkZJR1RBUkdFVCA9ICIke0Bpc190YXJnZXQoZCl9IgorZXhwb3J0IFBFUkxfSU5DID0gIiR7U1RBR0lOR19MSUJESVJ9JHtQRVJMX09XTl9ESVJ9L3BlcmwvJHtAZ2V0X3BlcmxfdmVyc2lvbihkKX0vQ09SRSIKK2V4cG9ydCBQRVJMX0xJQiA9ICIke1NUQUdJTkdfTElCRElSfSR7UEVSTF9PV05fRElSfS9wZXJsLyR7QGdldF9wZXJsX3ZlcnNpb24oZCl9IgorZXhwb3J0IFBFUkxfQVJDSExJQiA9ICIke1NUQUdJTkdfTElCRElSfSR7UEVSTF9PV05fRElSfS9wZXJsLyR7QGdldF9wZXJsX3ZlcnNpb24oZCl9IgorCitpbmhlcml0IGtlcm5lbHNyYworCitCID0gIiR7V09SS0RJUn0vJHtCUE59LSR7UFZ9IgorU1BEWF9TID0gIiR7U30vdG9vbHMvcGVyZiIKKworU0NSSVBUSU5HX0RFRklORVMgPSAiJHtAcGVyZl9mZWF0dXJlX2VuYWJsZWQoJ3BlcmYtc2NyaXB0aW5nJywgJycsICdOT19MSUJQRVJMPTEgTk9fTElCUFlUSE9OPTEnLGQpfSIKK1RVSV9ERUZJTkVTID0gIiR7QHBlcmZfZmVhdHVyZV9lbmFibGVkKCdwZXJmLXR1aScsICcnLCAnTk9fTkVXVD0xJyxkKX0iCitMSUJVTldJTkRfREVGSU5FUyA9ICIke0BwZXJmX2ZlYXR1cmVfZW5hYmxlZCgncGVyZi1saWJ1bndpbmQnLCAnJywgJ05PX0xJQlVOV0lORD0xIE5PX0xJQkRXX0RXQVJGX1VOV0lORD0xJyxkKX0iCitMSUJOVU1BX0RFRklORVMgPSAiJHtAcGVyZl9mZWF0dXJlX2VuYWJsZWQoJ3BlcmYtbGlibnVtYScsICcnLCAnTk9fTElCTlVNQT0xJyxkKX0iCisKKyMgVGhlIExERkxBR1MgaXMgcmVxdWlyZWQgb3Igc29tZSBvbGQga2VybmVscyBmYWlscyBkdWUgbWlzc2luZworIyBzeW1ib2xzIGFuZCB0aGlzIGlzIHByZWZlcnJlZCB0aGFuIHJlcXVpcmluZyBwYXRjaGVzIHRvIGV2ZXJ5IG9sZAorIyBzdXBwb3J0ZWQga2VybmVsLgorTERGTEFHUz0iLWxkbCAtbHV0aWwiCisKK0VYVFJBX09FTUFLRSA9ICdcCisgICAgLUMgJHtTfS90b29scy9wZXJmIFwKKyAgICBPPSR7Qn0gXAorICAgIENST1NTX0NPTVBJTEU9JHtUQVJHRVRfUFJFRklYfSBcCisgICAgQVJDSD0ke0FSQ0h9IFwKKyAgICBDQz0iJHtDQ30iIFwKKyAgICBBUj0iJHtBUn0iIFwKKyAgICBFWFRSQV9DRkxBR1M9Ii1sZHciIFwKKyAgICBwZXJmZXhlY2Rpcj0ke2xpYmV4ZWNkaXJ9IFwKKyAgICBOT19HVEsyPTEgJHtUVUlfREVGSU5FU30gTk9fRFdBUkY9MSAke0xJQlVOV0lORF9ERUZJTkVTfSBcCisgICAgJHtTQ1JJUFRJTkdfREVGSU5FU30gJHtMSUJOVU1BX0RFRklORVN9IFwKKycKKworRVhUUkFfT0VNQUtFICs9ICJcCisgICAgJ3ByZWZpeD0ke3ByZWZpeH0nIFwKKyAgICAnYmluZGlyPSR7YmluZGlyfScgXAorICAgICdzaGFyZWRpcj0ke2RhdGFkaXJ9JyBcCisgICAgJ3N5c2NvbmZkaXI9JHtzeXNjb25mZGlyfScgXAorICAgICdwZXJmZXhlY2Rpcj0ke2xpYmV4ZWNkaXJ9L3BlcmYtY29yZScgXAorICAgIFwKKyAgICAnRVRDX1BFUkZDT05GSUc9JHtAb3MucGF0aC5yZWxwYXRoKHN5c2NvbmZkaXIsIHByZWZpeCl9JyBcCisgICAgJ3NoYXJlZGlyPSR7QG9zLnBhdGgucmVscGF0aChkYXRhZGlyLCBwcmVmaXgpfScgXAorICAgICdtYW5kaXI9JHtAb3MucGF0aC5yZWxwYXRoKG1hbmRpciwgcHJlZml4KX0nIFwKKyAgICAnaW5mb2Rpcj0ke0Bvcy5wYXRoLnJlbHBhdGgoaW5mb2RpciwgcHJlZml4KX0nIFwKKyIKKworCitkb19jb21waWxlKCkgeworCSMgTGludXgga2VybmVsIGJ1aWxkIHN5c3RlbSBpcyBleHBlY3RlZCB0byBkbyB0aGUgcmlnaHQgdGhpbmcKKwl1bnNldCBDRkxBR1MKKwlvZV9ydW5tYWtlIGFsbAorfQorCitkb19pbnN0YWxsKCkgeworCSMgTGludXgga2VybmVsIGJ1aWxkIHN5c3RlbSBpcyBleHBlY3RlZCB0byBkbyB0aGUgcmlnaHQgdGhpbmcKKwl1bnNldCBDRkxBR1MKKwlvZV9ydW5tYWtlIERFU1RESVI9JHtEfSBpbnN0YWxsCisJIyB3ZSBhcmUgY2hlY2tpbmcgZm9yIHRoaXMgbWFrZSB0YXJnZXQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIG9sZGVyIHBlcmYgdmVyc2lvbnMKKwlpZiBbICIke0BwZXJmX2ZlYXR1cmVfZW5hYmxlZCgncGVyZi1zY3JpcHRpbmcnLCAxLCAwLCBkKX0iID0gIjEiIF0gJiYgZ3JlcCAtcSBpbnN0YWxsLXB5dGhvbl9leHQgJHtTfS90b29scy9wZXJmL01ha2VmaWxlKjsgdGhlbgorCQlvZV9ydW5tYWtlIERFU1RESVI9JHtEfSBpbnN0YWxsLXB5dGhvbl9leHQKKwlmaQorfQorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisgICAgIyBGaXggZm9yIHJlYnVpbGRpbmcKKyAgICBybSAtcmYgJHtCfS8KKyAgICBta2RpciAke0J9LworCisgICAgIyBJZiBidWlsZGluZyBhIG11bHRsaWIgYmFzZWQgcGVyZiwgdGhlIGluY29ycmVjdCBsaWJyYXJ5IHBhdGggd2lsbCBiZQorICAgICMgZGV0ZWN0ZWQgYnkgcGVyZiwgc2luY2UgaXQgdHJpZ2dlcnMgdmlhOiBpZmVxICgkKEFSQ0gpLHg4Nl82NCkuIEluIGEgMzIgYml0CisgICAgIyBidWlsZCwgd2l0aCBhIDY0IGJpdCBtdWx0aWxpYiwgdGhlIGFyY2ggd29uJ3QgbWF0Y2ggYW5kIHRoZSBkZXRlY3Rpb24gb2YgYSAKKyAgICAjIDY0IGJpdCBidWlsZCAoYW5kIGxpYnJhcnkpIGFyZSBub3QgZXhlY3RlZC4gVG8gZW5zdXJlIHRoYXQgbGlicmFyaWVzIGFyZQorICAgICMgaW5zdGFsbGVkIHRvIHRoZSBjb3JyZWN0IGxvY2F0aW9uLCB3ZSBjYW4gdXNlIHRoZSB3ZWFrIGFzc2lnbm1lbnQgaW4gdGhlCisgICAgIyBjb25maWcvTWFrZWZpbGUuCisgICAgIworICAgICMgQWxzbyBuZWVkIHRvIHJlbG9jYXRlIC5jb25maWctZGV0ZWN0ZWQgdG8gJChPVVRQVVQpL2NvbmZpZy1kZXRlY3RlZAorICAgICMgZm9yIGtlcm5lbCBzb3VyY2VzIHRoYXQgZG8gbm90IGFscmVhZHkgZG8gdGhpcworICAgICMgYXMgdHdvIGJ1aWxkcyAoZS5nLiBwZXJmIGFuZCBsaWIzMi1wZXJmIGZyb20gbXV0bGlsaWIgY2FuIGNvbmZsaWN0CisgICAgIyB3aXRoIGVhY2ggb3RoZXIgaWYgaXRzIGluIHRoZSBzaGFyZWQgc291cmNlIGRpcmVjdG9yeQorICAgICMKKyAgICBpZiBbIC1lICIke1N9L3Rvb2xzL3BlcmYvY29uZmlnL01ha2VmaWxlIiBdOyB0aGVuCisgICAgICAgICMgTWF0Y2ggJChwcmVmaXgpLyQobGliKSBhbmQgJChwcmVmaXgpL2xpYgorICAgICAgICBzZWQgLWkgLWUgJ3MsXmxpYmRpciA9IFwoJChwcmVmaXgpLy4qbGliXCksbGliZGlyID89IFwxLCcgXAorICAgICAgICAgICAgICAgLWUgJ3MsXnBlcmZleGVjZGlyID0gXCguKlwpLHBlcmZleGVjZGlyID89IFwxLCcgXAorICAgICAgICAgICAgICAgLWUgJ3MsXCAuY29uZmlnLWRldGVjdGVkLCAkKE9VVFBVVCkvY29uZmlnLWRldGVjdGVkLGcnIFwKKyAgICAgICAgICAgICR7U30vdG9vbHMvcGVyZi9jb25maWcvTWFrZWZpbGUKKyAgICBmaQorICAgIGlmIFsgLWUgIiR7U30vdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmIiBdOyB0aGVuCisgICAgICAgIHNlZCAtaSAtZSAncyxcIC5jb25maWctZGV0ZWN0ZWQsICQoT1VUUFVUKS9jb25maWctZGV0ZWN0ZWQsZycgXAorICAgICAgICAgICAgJHtTfS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYKKyAgICAgICAgc2VkIC1pIC1lICJzLHByZWZpeD0nXCQoREVTVERJUl9TUSkvdXNyJyQscHJlZml4PSdcJChERVNURElSX1NRKS91c3InIC0taW5zdGFsbC1saWI9J1wkKERFU1RESVIpXCQoUFlUSE9OX1NJVEVQQUNLQUdFU19ESVIpJyxnIiBcCisgICAgICAgICAgICAke1N9L3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZgorICAgIGZpCisgICAgc2VkIC1pIC1lICJzLC0tcm9vdD0nL1wkKERFU1RESVJfU1EpJywtLXByZWZpeD0nXCQoREVTVERJUl9TUSkvdXNyJyAtLWluc3RhbGwtbGliPSdcJChERVNURElSKVwkKFBZVEhPTl9TSVRFUEFDS0FHRVNfRElSKScsZyIgXAorICAgICAgICAke1N9L3Rvb2xzL3BlcmYvTWFrZWZpbGUKKworICAgIGlmIFsgLWUgIiR7U30vdG9vbHMvYnVpbGQvTWFrZWZpbGUuYnVpbGQiIF07IHRoZW4KKyAgICAgICAgc2VkIC1pIC1lICdzLFwgLmNvbmZpZy1kZXRlY3RlZCwgJChPVVRQVVQpL2NvbmZpZy1kZXRlY3RlZCxnJyBcCisgICAgICAgICAgICAke1N9L3Rvb2xzL2J1aWxkL01ha2VmaWxlLmJ1aWxkCisgICAgZmkKKworICAgICMgV2UgbmVlZCB0byBlbnN1cmUgdGhlIC0tc3lzcm9vdCBvcHRpb24gaW4gQ0MgaXMgcHJlc2VydmVkCisgICAgaWYgWyAtZSAiJHtTfS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYiIF07IHRoZW4KKyAgICAgICAgc2VkIC1pICdzLENDID0gJChDUk9TU19DT01QSUxFKWdjYywjQ0MsJyAke1N9L3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZgorICAgICAgICBzZWQgLWkgJ3MsQVIgPSAkKENST1NTX0NPTVBJTEUpYXIsI0FSLCcgJHtTfS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYKKyAgICBmaQorICAgIGlmIFsgLWUgIiR7U30vdG9vbHMvbGliL2FwaS9NYWtlZmlsZSIgXTsgdGhlbgorICAgICAgICBzZWQgLWkgJ3MsQ0MgPSAkKENST1NTX0NPTVBJTEUpZ2NjLCNDQywnICR7U30vdG9vbHMvbGliL2FwaS9NYWtlZmlsZQorICAgICAgICBzZWQgLWkgJ3MsQVIgPSAkKENST1NTX0NPTVBJTEUpYXIsI0FSLCcgJHtTfS90b29scy9saWIvYXBpL01ha2VmaWxlCisgICAgZmkKKyAgICBpZiBbIC1lICIke1N9L3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL01ha2VmaWxlIiBdOyB0aGVuCisgICAgICAgIHNlZCAtaSAncyxDQyA6PSAkKENST1NTX0NPTVBJTEUpZ2NjIC1NRCxDQyArPSAtTUQsJyAke1N9L3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL01ha2VmaWxlCisgICAgZmkKKyAgICBpZiBbIC1lICIke1N9L3Rvb2xzL2J1aWxkL01ha2VmaWxlLmZlYXR1cmUiIF07IHRoZW4KKyAgICAgICAgc2VkIC1pICdzLENGTEFHUz0sQ0M9IlwkKENDKSIgQ0ZMQUdTPSwnICR7U30vdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZQorICAgIGZpCisKKyAgICAjIDMuMTctcmMxKyBoYXMgYSBpbmNsdWRlIGlzc3VlIGZvciBhcm0vcG93ZXJwYy4gVGVtcG9yYXJpbHkgc2VkIGluIHRoZSBhcHByb3ByaWF0ZSBpbmNsdWRlCisgICAgaWYgWyAtZSAiJHtTfS90b29scy9wZXJmL2FyY2gvJEFSQ0gvdXRpbC9za2lwLWNhbGxjaGFpbi1pZHguYyIgXTsgdGhlbgorICAgICAgICBzZWQgLWkgJ3MsI2luY2x1ZGUgInV0aWwvY2FsbGNoYWluLmgiLCNpbmNsdWRlICJ1dGlsL2NhbGxjaGFpbi5oIlxuI2luY2x1ZGUgInV0aWwvZGVidWcuaCIsJyAke1N9L3Rvb2xzL3BlcmYvYXJjaC8kQVJDSC91dGlsL3NraXAtY2FsbGNoYWluLWlkeC5jCisgICAgZmkKKyAgICBpZiBbIC1lICIke1N9L3Rvb2xzL3BlcmYvYXJjaC9hcm0vdXRpbC91bndpbmQtbGlidW53aW5kLmMiIF0gJiYgWyAtZSAiJHtTfS90b29scy9wZXJmL2FyY2gvYXJtL3Rlc3RzL2R3YXJmLXVud2luZC5jIiBdOyB0aGVuCisgICAgICAgIHNlZCAtaSAncywjaW5jbHVkZSAidGVzdHMvdGVzdHMuaCIsI2luY2x1ZGUgInRlc3RzL3Rlc3RzLmgiXG4jaW5jbHVkZSAidXRpbC9kZWJ1Zy5oIiwnICR7U30vdG9vbHMvcGVyZi9hcmNoL2FybS90ZXN0cy9kd2FyZi11bndpbmQuYworICAgICAgICBzZWQgLWkgJ3MsI2luY2x1ZGUgInBlcmZfcmVncy5oIiwjaW5jbHVkZSAicGVyZl9yZWdzLmgiXG4jaW5jbHVkZSAidXRpbC9kZWJ1Zy5oIiwnICR7U30vdG9vbHMvcGVyZi9hcmNoL2FybS91dGlsL3Vud2luZC1saWJ1bndpbmQuYworICAgIGZpCit9CisKK3B5dGhvbiBkb19wYWNrYWdlX3ByZXBlbmQoKSB7CisgICAgZC5zZXRWYXIoJ1BLR1YnLCBkLmdldFZhcigiS0VSTkVMX1ZFUlNJT04iLCBUcnVlKS5zcGxpdCgiLSIpWzBdKQorfQorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCisKK1BBQ0tBR0VTID0rICIke1BOfS1hcmNoaXZlICR7UE59LXRlc3RzICR7UE59LXBlcmwgJHtQTn0tcHl0aG9uIgorCitSREVQRU5EU18ke1BOfSArPSAiZWxmdXRpbHMgYmFzaCIKK1JERVBFTkRTXyR7UE59LWFyY2hpdmUgPSsgImJhc2giCitSREVQRU5EU18ke1BOfS1weXRob24gPSsgImJhc2ggcHl0aG9uIgorUkRFUEVORFNfJHtQTn0tcGVybCA9KyAiYmFzaCBwZXJsIHBlcmwtbW9kdWxlcyIKK1JERVBFTkRTXyR7UE59LXRlc3RzID0rICJweXRob24iCisKK1JTVUdHRVNUU19TQ1JJUFRJTkcgPSAiJHtAcGVyZl9mZWF0dXJlX2VuYWJsZWQoJ3BlcmYtc2NyaXB0aW5nJywgJyR7UE59LXBlcmwgJHtQTn0tcHl0aG9uJywgJycsZCl9IgorUlNVR0dFU1RTXyR7UE59ICs9ICIke1BOfS1hcmNoaXZlICR7UE59LXRlc3RzICR7UlNVR0dFU1RTX1NDUklQVElOR30iCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmV4ZWNkaXJ9L3BlcmYtY29yZSAke2V4ZWNfcHJlZml4fS9saWJleGVjL3BlcmYtY29yZSAke2xpYmRpcn0vdHJhY2VldmVudCIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy8uZGVidWciCitGSUxFU18ke1BOfS1hcmNoaXZlID0gIiR7bGliZGlyfS9wZXJmL3BlcmYtY29yZS9wZXJmLWFyY2hpdmUiCitGSUxFU18ke1BOfS10ZXN0cyA9ICIke2xpYmRpcn0vcGVyZi9wZXJmLWNvcmUvdGVzdHMiCitGSUxFU18ke1BOfS1weXRob24gPSAiJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcyAke2xpYmRpcn0vcGVyZi9wZXJmLWNvcmUvc2NyaXB0cy9weXRob24iCitGSUxFU18ke1BOfS1wZXJsID0gIiR7bGliZGlyfS9wZXJmL3BlcmYtY29yZS9zY3JpcHRzL3BlcmwiCisKKworSU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUPSIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3Bvd2VydG9wL3Bvd2VydG9wXzIuNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9wb3dlcnRvcC9wb3dlcnRvcF8yLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJhMDdlOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9wb3dlcnRvcC9wb3dlcnRvcF8yLjcuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJQb3dlciB1c2FnZSB0b29sIgorREVTQ1JJUFRJT04gPSAiTGludXggdG9vbCB0byBkaWFnbm9zZSBpc3N1ZXMgd2l0aCBwb3dlciBjb25zdW1wdGlvbiBhbmQgcG93ZXIgbWFuYWdlbWVudC4iCitIT01FUEFHRSA9ICJodHRwOi8vMDEub3JnL3Bvd2VydG9wLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLmxlc3N3YXR0cy5vcmcvIgorREVQRU5EUyA9ICJuY3Vyc2VzIGxpYm5sIHBjaXV0aWxzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTEyZjg4NGQyYWUxZmY4N2MwOWU1YjdjY2MyYzRjYTdlIgorCitTUkNfVVJJID0gImh0dHA6Ly8wMS5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9kb3dubG9hZHMvcG93ZXJ0b3AvcG93ZXJ0b3AtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTBkNjg2ZTQ3ZGFhZjdlOWQ4OTAzMWY3NzYzNDMyZWYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGQ0YjE0OTBlMmJhYWQ0NDY3YzBkZWQzYzQyM2RiNDQ3MmRjYmY3YjJkZDhmOGYyYTkyOGY1NDA0N2M2NzhjYSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKKworIyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayB3aXRoIGxpYmludGwgaW4gdUNsaWJjIHN5c3RlbXMKK0VYVFJBX0xERkxBR1MgPz0gIiIKK0VYVFJBX0xERkxBR1NfbGliYy11Y2xpYmMgPSAiLWxpbnRsIgorTERGTEFHUyArPSAiJHtFWFRSQV9MREZMQUdTfSIKKworIyB3ZSBkbyBub3Qgd2FudCBsaWJuY3Vyc2VzdyBpZiB3ZSBjYW4KK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICMgY29uZmlndXJlLmFjIGNoZWNrcyBmb3IgZGVsd2luKCkgaW4gIm5jdXJzZXN3IG5jdXJzZXMiIHNvIGxldCdzIGRyb3AgZmlyc3Qgb25lCisgICAgc2VkIC1pIC1lICJzL25jdXJzZXN3Ly9nIiAke1N9L2NvbmZpZ3VyZS5hYworICAgIG1rZGlyIC1wICR7Qn0vc3JjL3R1bmluZy8KK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCitBTFRFUk5BVElWRV8ke1BOfSA9ICJwb3dlcnRvcCIKK0FMVEVSTkFUSVZFX1RBUkdFVFtwb3dlcnRvcF0gPSAiJHtzYmluZGlyfS9wb3dlcnRvcCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtwb3dlcnRvcF0gPSAiJHtzYmluZGlyfS9wb3dlcnRvcCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL2ZpbGVzL2RlZmluZS1OVF9HTlVfQlVJTERfSUQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9kZWZpbmUtTlRfR05VX0JVSUxEX0lELnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYzJjYmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9kZWZpbmUtTlRfR05VX0JVSUxEX0lELnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK09uIHVjbGliYyBlbGYuaCBkb2VzIG5vdCBoYXZlIEdOVSBleHRlbnRpb25zIGJ1dCB3ZSBuZWVkIHRoaXMgZGVmaW5lCitzbyB3ZSBkZWZpbmUgaXQgbG9jYWxseSBpZiBpdHMgbm90IGdldHRpbmcgaXQgZnJvbSBlbGYuaAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGdpdC9lbGZwYXJzZXIuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2VsZnBhcnNlci5oCTIwMTEtMDctMTYgMTg6NTc6NDEuMDAwMDAwMDAwIC0wNzAwCisrKysgZ2l0L2VsZnBhcnNlci5oCTIwMTEtMDctMTYgMjA6Mjg6NTQuNzMzODI5ODk1IC0wNzAwCitAQCAtMTcsNiArMTcsMTAgQEAKKyAgKi8KKyAjaW5jbHVkZSA8Z2xpYi5oPgorIAorKyNpZm5kZWYgTlRfR05VX0JVSUxEX0lECisrI2RlZmluZSBOVF9HTlVfQlVJTERfSUQgMworKyNlbmRpZgorKworIHR5cGVkZWYgc3RydWN0IEVsZlN5bSBFbGZTeW07CisgdHlwZWRlZiBzdHJ1Y3QgRWxmUGFyc2VyIEVsZlBhcnNlcjsKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL2ZpbGVzL3JtYi1hcm0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9ybWItYXJtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1M2FjNjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9ybWItYXJtLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnaXQvdXRpbC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvdXRpbC5oCTIwMTAtMTItMDcgMjI6NDE6NTcuMTU2MjQzMDAxIC0wNjAwCisrKysgZ2l0L3V0aWwuaAkyMDEwLTEyLTA3IDIyOjQzOjQ3LjYxNjI0MzAwMiAtMDYwMAorQEAgLTM3LDQgKzM3LDEzIEBACisgI2RlZmluZSBjcHVfcmVsYXgoKSAgICAgYXNtIHZvbGF0aWxlKCIiIDo6OiAibWVtb3J5Iik7CisgI2VuZGlmCisgCisrI2lmZGVmIF9fYXJtX18KKysvKgorKyAqIFVzZSB0aGUgX19rdXNlcl9tZW1vcnlfYmFycmllciBoZWxwZXIgaW4gdGhlIENQVSBoZWxwZXIgcGFnZS4gU2VlCisrICogYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUyBpbiB0aGUga2VybmVsIHNvdXJjZSBmb3IgZGV0YWlscy4KKysgKi8KKysjZGVmaW5lIHJtYigpCQkoKHZvaWQoKikodm9pZCkpMHhmZmZmMGZhMCkoKQorKyNkZWZpbmUgY3B1X3JlbGF4KCkJYXNtIHZvbGF0aWxlKCIiOjo6Im1lbW9yeSIpCisrI2VuZGlmCisrCisgI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9ybWItbWlwcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL2ZpbGVzL3JtYi1taXBzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNTViOGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9ybWItbWlwcy5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGdpdC91dGlsLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy91dGlsLmgJMjAxMC0xMi0wOCAwMToyMjo0NC40ODYyNDMwMDEgLTA2MDAKKysrKyBnaXQvdXRpbC5oCTIwMTAtMTItMDggMDE6MjM6MjcuODM2MjQzMDAxIC0wNjAwCitAQCAtMzcsNCArMzcsMTUgQEAKKyAjZGVmaW5lIGNwdV9yZWxheCgpICAgICBhc20gdm9sYXRpbGUoIiIgOjo6ICJtZW1vcnkiKTsKKyAjZW5kaWYKKyAKKysjaWZkZWYgX19taXBzX18KKysjZGVmaW5lIHJtYigpCQlhc20gdm9sYXRpbGUoCQkJCQlcCisrCQkJCSIuc2V0CW1pcHMyXG5cdCIJCQlcCisrCQkJCSJzeW5jXG5cdCIJCQkJXAorKwkJCQkiLnNldAltaXBzMCIJCQkJXAorKwkJCQk6IC8qIG5vIG91dHB1dCAqLwkJCVwKKysJCQkJOiAvKiBubyBpbnB1dCAqLwkJCVwKKysJCQkJOiAibWVtb3J5IikKKysjZGVmaW5lIGNwdV9yZWxheCgpCWFzbSB2b2xhdGlsZSgiIiA6OjogIm1lbW9yeSIpCisrI2VuZGlmCisrCisgI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9zeXNwcm9mX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL3N5c3Byb2ZfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YzNlMTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9zeXNwcm9mX2dpdC5iYgpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIlN5c3RlbS13aWRlIFBlcmZvcm1hbmNlIFByb2ZpbGVyIGZvciBMaW51eCIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworREVQRU5EUyA9ICJndGsrIGxpYmdsYWRlIgorCitTUkNSRVYgPSAiY2Q0NGVlNjY0NGMzNjQxNTA3ZmI1M2I4YTJhNjkxMzdmMjk3MTIxOSIKK1BWID0gIjEuMi4wK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5nbm9tZS5vcmcvc3lzcHJvZiBcCisgICAgICAgICAgIGZpbGU6Ly9kZWZpbmUtTlRfR05VX0JVSUxEX0lELnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklfYXBwZW5kX2FybSAgPSAiIGZpbGU6Ly9ybWItYXJtLnBhdGNoIgorU1JDX1VSSV9hcHBlbmRfYXJtZWIgID0gIiBmaWxlOi8vcm1iLWFybS5wYXRjaCIKK1NSQ19VUklfYXBwZW5kX21pcHMgPSAiIGZpbGU6Ly9ybWItbWlwcy5wYXRjaCIKK1NSQ19VUklfYXBwZW5kX21pcHM2NCA9ICIgZmlsZTovL3JtYi1taXBzLnBhdGNoIgorU1JDX1VSSV9hcHBlbmRfbWlwczY0bjMyID0gIiBmaWxlOi8vcm1iLW1pcHMucGF0Y2giCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCisjIFdlIGRvIG5vdCB5ZXQgd29yayBmb3IgYWFyY2g2NC4KKyMKK0NPTVBBVElCTEVfSE9TVCA9ICJeKD8hYWFyY2g2NCkuKiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAtdXByb2Jlc19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC11cHJvYmVzX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTg5MDhiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAtdXByb2Jlc19naXQuYmIKQEAgLTAsMCArMSw0NCBAQAorU1VNTUFSWSA9ICJVUHJvYmVzIGtlcm5lbCBtb2R1bGUgZm9yIFN5c3RlbVRhcCIKKworcmVxdWlyZSBzeXN0ZW10YXBfZ2l0LmluYworCitERVBFTkRTID0gInN5c3RlbXRhcCB2aXJ0dWFsL2tlcm5lbCIKKworUFIgPSAicjEiCisKKyMgT24gc3lzdGVtcyB3aXRob3V0IENPTkZJR19VVFJBQ0UsIHRoaXMgcGFja2FnZSBpcyBlbXB0eS4KK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKK2luaGVyaXQgbW9kdWxlLWJhc2UgZ2V0dGV4dAorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9zeXN0ZW10YXA6IgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9zeXN0ZW10YXAvcnVudGltZS91cHJvYmVzIgorCitFWFRSQV9PRU1BS0UgPSAiIgorCisjIENvbXBpbGUgYW5kIGluc3RhbGwgdGhlIHVwcm9iZXMga2VybmVsIG1vZHVsZSBvbiBtYWNoaW5lcyB3aXRoIHV0cmFjZQorIyBzdXBwb3J0LiAgTm90ZSB0aGF0IHN0YXBydW4gZXhwZWN0cyBpdCBpbiB0aGUgc3lzdGVtdGFwL3J1bnRpbWUgZGlyZWN0b3J5LAorIyBub3QgaW4gL2xpYi9tb2R1bGVzLgorZG9fY29tcGlsZSgpIHsKKwlpZiBncmVwIC1xICJDT05GSUdfVVRSQUNFPXkiICR7U1RBR0lOR19LRVJORUxfQlVJTERESVJ9Ly5jb25maWcKKwl0aGVuCisJCXVuc2V0IENGTEFHUyBDUFBGTEFHUyBDWFhGTEFHUyBMREZMQUdTIENDIExEIENQUAorCQlvZV9ydW5tYWtlIENDPSIke0tFUk5FTF9DQ30iIExEPSIke0tFUk5FTF9MRH0iIFwKKwkJCSAgIEFSPSIke0tFUk5FTF9BUn0iIFwKKwkJCSAgIC1DICR7U1RBR0lOR19LRVJORUxfRElSfSBzY3JpcHRzCisJCW9lX3J1bm1ha2UgS0RJUj0ke1NUQUdJTkdfS0VSTkVMX0RJUn0gICBcCisJCQkgICBNPSIke1N9L3J1bnRpbWUvdXByb2Jlcy8iIFwKKwkJCSAgIENDPSIke0tFUk5FTF9DQ30iIExEPSIke0tFUk5FTF9MRH0iIFwKKwkJCSAgIEFSPSIke0tFUk5FTF9BUn0iIFwKKwkJCSAgIC1DICIke1N9L3J1bnRpbWUvdXByb2Jlcy8iCisJZmkKK30KKworZG9faW5zdGFsbCgpIHsKKwlpZiBbIC1lICIke1N9L3J1bnRpbWUvdXByb2Jlcy91cHJvYmVzLmtvIiBdCisJdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L3N5c3RlbXRhcC9ydW50aW1lL3Vwcm9iZXMvCisJCWluc3RhbGwgLW0gMDY0NCAke1N9L3J1bnRpbWUvdXByb2Jlcy91cHJvYmVzLmtvICR7RH0ke2RhdGFkaXJ9L3N5c3RlbXRhcC9ydW50aW1lL3Vwcm9iZXMvCisJZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL2NvbmZpZ3VyZS1hbGxvdy10by1kaXNhYmxlLWxpYnZpcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9jb25maWd1cmUtYWxsb3ctdG8tZGlzYWJsZS1saWJ2aXJ0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZjJmYmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9jb25maWd1cmUtYWxsb3ctdG8tZGlzYWJsZS1saWJ2aXJ0LnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gNWViMTBkOTBhZjkxNzhlZGI2NWU2MDkxYWU5MzlkMWI1YjE5YmI3OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAyMyBTZXAgMjAxNCAwNDo0NzoxMCAtMDQwMAorU3ViamVjdDogW1BBVENIXSBzeXN0ZW10YXA6IGFsbG93IHRvIGRpc2FibGUgbGlidmlydAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAgIDEzICsrKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBhNjMxYWU3Li5jYjQ4ODViIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC01MjUsMTAgKzUyNSwxNSBAQCBkbmwgQ2hlY2sgZm9yIHRoZSBsaWJ2aXJ0IGFuZCBsaWJ4bWwyIGRldmVsIHBhY2thZ2VzCisgCisgZG5sIFdlIHJlcXVpcmUgbGlidmlydCA+PSAxLjAuMiBiZWNhdXNlIHN0YXB2aXJ0IHJlbGllcyBvbiB0aGUKKyBkbmwgdmlyRG9tYWluT3BlbkNoYW5uZWwgZnVuY3Rpb24sIHdoaWNoIHdhcyBpbXBsZW1lbnRlZCBpbiAxLjAuMi4KKy1QS0dfQ0hFQ0tfTU9EVUxFUyhbbGlidmlydF0sIFtsaWJ2aXJ0ID49IDEuMC4yXSwgWworLSAgIGhhdmVfbGlidmlydD15ZXMKKy0gICBBQ19ERUZJTkUoW0hBVkVfTElCVklSVF0sWzFdLFtEZWZpbmUgdG8gMSBpZiBsaWJ2aXJ0IGRldmVsb3BtZW50IGxpYnJhcmllcyBhcmUgaW5zdGFsbGVkXSkKKy0gICBdLCBbaGF2ZV9saWJ2aXJ0PW5vXSkKKytBQ19BUkdfRU5BQkxFKFtsaWJ2aXJ0XSwKKysgIEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbGlidmlydF0sIFtEbyBub3QgdXNlIGxpYnZpcnQgZXZlbiBpZiBwcmVzZW50XSkpCisrCisraWYgdGVzdCAiJGVuYWJsZV9saWJ2aXJ0IiAhPSBubzsgdGhlbgorKyAgUEtHX0NIRUNLX01PRFVMRVMoW2xpYnZpcnRdLCBbbGlidmlydCA+PSAxLjAuMl0sIFsKKysgICAgIGhhdmVfbGlidmlydD15ZXMKKysgICAgIEFDX0RFRklORShbSEFWRV9MSUJWSVJUXSxbMV0sW0RlZmluZSB0byAxIGlmIGxpYnZpcnQgZGV2ZWxvcG1lbnQgbGlicmFyaWVzIGFyZSBpbnN0YWxsZWRdKQorKyAgICAgXSwgW2hhdmVfbGlidmlydD1ub10pCisrZmkKKyBBTV9DT05ESVRJT05BTChbSEFWRV9MSUJWSVJUXSwgW3Rlc3QgIiR7aGF2ZV9saWJ2aXJ0fSIgPSAieWVzIl0pCisgUEtHX0NIRUNLX01PRFVMRVMoW2xpYnhtbDJdLCBbbGlieG1sLTIuMF0sIFsKKyAgICBoYXZlX2xpYnhtbDI9eWVzCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvZG9jcHJvYy1idWlsZC1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9kb2Nwcm9jLWJ1aWxkLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2E4OTk0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvZG9jcHJvYy1idWlsZC1maXgucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBUb20gWmFudXNzaSA8dG9tLnphbnVzc2lAaW50ZWwuY29tPgorCitJbmRleDogZ2l0L2RvYy9TeXN0ZW1UYXBfVGFwc2V0X1JlZmVyZW5jZS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2RvYy9TeXN0ZW1UYXBfVGFwc2V0X1JlZmVyZW5jZS9NYWtlZmlsZS5hbQkyMDEyLTA0LTEzIDA4OjQzOjQ2LjI2MzMzOTAwMyAtMDUwMAorKysrIGdpdC9kb2MvU3lzdGVtVGFwX1RhcHNldF9SZWZlcmVuY2UvTWFrZWZpbGUuYW0JMjAxMi0wNC0xMyAwOTozMToyMi40NzAwODM5MTUgLTA1MDAKK0BAIC0yNyw2ICsyNywxMCBAQAorIG5vaW5zdF9QUk9HUkFNUyA9IGRvY3Byb2MKKyBTUkNUUkVFPSQoYWJzX3RvcF9zcmNkaXIpLworIERPQ1BST0M9JChhYnNfYnVpbGRkaXIpL2RvY3Byb2MKKytkb2Nwcm9jX0xJTksgPSAkKENDX0ZPUl9CVUlMRCkgJChMREZMQUdTX0ZPUl9CVUlMRCkgLW8gJEAKKysKKytkb2Nwcm9jLm86ICQoc3JjZGlyKS9kb2Nwcm9jLmMKKysJJChDQ19GT1JfQlVJTEQpIC1jICQoQ0ZMQUdTX0ZPUl9CVUlMRCkgLW8gJEAgJChzcmNkaXIpL2RvY3Byb2MuYworIAorIGFsbDogJChQREZET0NTKSBzdGFtcC1odG1sZG9jcyBzdGFtcC1tYW5kb2NzCisgdGFwc2V0cy54bWw6IGRvY3Byb2MgJChzaGVsbCBmaW5kICQoU1JDVFJFRSkvdGFwc2V0IC1uYW1lICcqLnN0cCcpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg4Y2RhNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK0luZGV4OiBnaXQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgZ2l0L2NvbmZpZ3VyZS5hYworQEAgLTE5LDcgKzE5LDYgQEAgQUNfUFJPR19MTl9TCisgQUNfUFJPR19DQworIEFDX1BST0dfQ1hYCisgQUNfUFJPR19DUFAKKy1BTV9QUk9HX0NDX1NUREMKKyBBTV9QUk9HX0NDX0NfTworIEFDX1BST0dfUkFOTElCCisgQUNfT0JKRVhUCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9zeXN0ZW1fbWFwX2xvY2F0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvc3lzdGVtX21hcF9sb2NhdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTNhZjVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvc3lzdGVtX21hcF9sb2NhdGlvbi5wYXRjaApAQCAtMCwwICsxLDIzIEBACitzeXN0ZW10YXA6IENyb3NzIGNvbXBpbGF0aW9uIGZpeAorCitUaGlzIGlzIGEgY3Jvc3MgY29tcGlsYXRpb24gZml4LiBJdCBhbGxvd3Mgc3lzdGVtdGFwIHRvIGZpbmQKK3RoZSBrZXJuZWwgbWFwIGZpbGUgaW4gdGhlIHJpZ2h0IHBsYWNlLCBpLmUuIGluIHRoZSBrZXJuZWwgYnVpbGQgdHJlZS4KK1dpdGhvdXQgdGhpcyBmaXggaXQgdGFrZXMgYSBtYXAgZmlsZSBmcm9tIHRoZSBidWlsZCBob3N0LCBpZiBhdmFpbGFibGUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNaWtoYWlsIER1cm5ldiA8bWlraGFpbF9kdXJuZXZAbWVudG9yLmNvbT4KKworSW5kZXg6IGdpdC9zZXNzaW9uLmN4eAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3Nlc3Npb24uY3h4CisrKysgZ2l0L3Nlc3Npb24uY3h4CitAQCAtMTYzNCw3ICsxNjM0LDcgQEAgc3lzdGVtdGFwX3Nlc3Npb246OnBhcnNlX2tlcm5lbF9mdW5jdGlvbgorIAljbG9nIDw8IF9GKCJLZXJuZWwgc3ltYm9sIHRhYmxlICVzIHVuYXZhaWxhYmxlLCAoJXMpIiwKKyAJCSAgIHN5c3RlbV9tYXBfcGF0aC5jX3N0cigpLCBzdHJlcnJvcihlcnJubykpIDw8IGVuZGw7CisgCistICAgICAgc3lzdGVtX21hcF9wYXRoID0gIi9ib290L1N5c3RlbS5tYXAtIiArIGtlcm5lbF9yZWxlYXNlOworKyAgICAgIHN5c3RlbV9tYXBfcGF0aCA9IGtlcm5lbF9idWlsZF90cmVlICsgIi9TeXN0ZW0ubWFwLSIgKyBrZXJuZWxfcmVsZWFzZTsKKyAgICAgICBzeXN0ZW1fbWFwLmNsZWFyKCk7CisgICAgICAgc3lzdGVtX21hcC5vcGVuKHN5c3RlbV9tYXBfcGF0aC5jX3N0cigpLCBpZnN0cmVhbTo6aW4pOworICAgICAgIGlmICghIHN5c3RlbV9tYXAuaXNfb3BlbigpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAveDMyX2FiaV90aW1lLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAveDMyX2FiaV90aW1lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YTdlYWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC94MzJfYWJpX3RpbWUucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRml4IHRpbWVfdCBwcmludCBiZWNhdXNlIGluIHgzMiBBQkkgaXMgbG9uZyBsb25nIGludCBpbnN0ZWFkIG9mIGxvbmcgaW50LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9jYWNoZS5jeHggYi9jYWNoZS5jeHgKK2luZGV4IDM1NDZiMzAuLjE5Yzc3Y2EgMTAwNjQ0CistLS0gYS9jYWNoZS5jeHgKKysrKyBiL2NhY2hlLmN4eAorQEAgLTI5NCw3ICsyOTQsMTEgQEAgY2xlYW5fY2FjaGUoc3lzdGVtdGFwX3Nlc3Npb24mIHMpCisgICAgICAgICB7CisgICAgICAgICAgIC8vaW50ZXJ2YWwgbm90IHBhc3NlZCwgZG9uJ3QgY29udGludWUKKyAgICAgICAgICAgaWYgKHMudmVyYm9zZSA+IDEpCisrI2lmIGRlZmluZWQoX194ODZfNjRfXykgJiYgZGVmaW5lZCAoX19JTFAzMl9fKQorKyAgICAgICAgICAgIGNsb2cgPDwgX0YoIkNhY2hlIGNsZWFuaW5nIHNraXBwZWQsIGludGVydmFsIG5vdCByZWFjaGVkICVsbGQgcyAvICVsdSBzLiIsCisrI2Vsc2UKKyAgICAgICAgICAgICBjbG9nIDw8IF9GKCJDYWNoZSBjbGVhbmluZyBza2lwcGVkLCBpbnRlcnZhbCBub3QgcmVhY2hlZCAlbHUgcyAvICVsdSBzLiIsCisrI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAoY3VycmVudF90aW1lLnR2X3NlYy1zYi5zdF9tdGltZSksIGNhY2hlX2NsZWFuX2ludGVydmFsKSAgPDwgZW5kbDsKKyAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgfQorQEAgLTMwMiw3ICszMDYsMTEgQEAgY2xlYW5fY2FjaGUoc3lzdGVtdGFwX3Nlc3Npb24mIHMpCisgICAgICAgICB7CisgICAgICAgICAgIC8vaW50ZXJ2YWwgcmVhY2hlZCwgY29udGludWUKKyAgICAgICAgICAgaWYgKHMudmVyYm9zZSA+IDEpCisrI2lmIGRlZmluZWQoX194ODZfNjRfXykgJiYgZGVmaW5lZCAoX19JTFAzMl9fKQorKyAgICAgICAgICAgIGNsb2cgPDwgX0YoIkNsZWFuaW5nIGNhY2hlLCBpbnRlcnZhbCByZWFjaGVkICVsbGQgcyA+ICVsdSBzLiIsCisrI2Vsc2UKKyAgICAgICAgICAgICBjbG9nIDw8IF9GKCJDbGVhbmluZyBjYWNoZSwgaW50ZXJ2YWwgcmVhY2hlZCAlbHUgcyA+ICVsdSBzLiIsCisrI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAoY3VycmVudF90aW1lLnR2X3NlYy1zYi5zdF9tdGltZSksIGNhY2hlX2NsZWFuX2ludGVydmFsKSAgPDwgZW5kbDsKKyAgICAgICAgIH0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGRkNDJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXBfZ2l0LmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiU2NyaXB0LWRpcmVjdGVkIGR5bmFtaWMgdHJhY2luZyBhbmQgcGVyZm9ybWFuY2UgYW5hbHlzaXMgdG9vbCBmb3IgTGludXgiCisKK3JlcXVpcmUgc3lzdGVtdGFwX2dpdC5pbmMKKworREVQRU5EUyA9ICJlbGZ1dGlscyBzcWxpdGUzIHN5c3RlbXRhcC1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJlbGZ1dGlscy1uYXRpdmUgc3FsaXRlMy1uYXRpdmUgZ2V0dGV4dC1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICJuYXRpdmVzZGstZWxmdXRpbHMgbmF0aXZlc2RrLXNxbGl0ZTMgbmF0aXZlc2RrLWdldHRleHQiCisKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24gYmFzaCIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSArPSAicHl0aG9uLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZXNkayArPSAicHl0aG9uLW5hdGl2ZSIKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtbGliZWxmPSR7U1RBR0lOR19ESVJfVEFSR0VUfSAtLXdpdGhvdXQtcnBtIFwKKyAgICAgICAgICAgIC0td2l0aG91dC1uc3MgLS13aXRob3V0LWF2YWhpIC0td2l0aG91dC1keW5pbnN0IFwKKyAgICAgICAgICAgIC0tZGlzYWJsZS1zZXJ2ZXIgLS1kaXNhYmxlLWdyYXBoZXIgLS1lbmFibGUtcHJvbG9ndWVzIFwKKyAgICAgICAgICAgIGFjX2N2X3Byb2dfaGF2ZV9qYXZhYz1ubyBcCisgICAgICAgICAgICBhY19jdl9wcm9nX2hhdmVfamFyPW5vICIKKworU1RBUF9ET0NTID89ICItLWRpc2FibGUtZG9jcyAtLWRpc2FibGUtcHVibGljYW4gLS1kaXNhYmxlLXJlZmRvY3MiCisKK0VYVFJBX09FQ09ORiArPSAiJHtTVEFQX0RPQ1N9ICIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbbGlidmlydF0gPSAiLS1lbmFibGUtbGlidmlydCwtLWRpc2FibGUtbGlidmlydCxsaWJ2aXJ0IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS9zeXN0ZW10YXAvLmRlYnVnIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXBfZ2l0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwX2dpdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlhNTc4ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwX2dpdC5pbmMKQEAgLTAsMCArMSwyOCBAQAorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgorU1JDUkVWID0gImJmMTYyNjY3ODJlMWYyNTg4YjUxOWE1MGQ5Njg0Mjc5ZDRlMjEwMzYiCitQViA9ICIyLjcrZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vc291cmNld2FyZS5vcmcvZ2l0L3N5c3RlbXRhcC5naXQgXAorICAgICAgICAgICBmaWxlOi8vZG9jcHJvYy1idWlsZC1maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3N5c3RlbV9tYXBfbG9jYXRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLWFsbG93LXRvLWRpc2FibGUtbGlidmlydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly94MzJfYWJpX3RpbWUucGF0Y2ggXAorICAgICAgICAgICIKKworIyBzeXN0ZW10YXAgZG9lc24ndCBzdXBwb3J0IG1pcHMKK0NPTVBBVElCTEVfSE9TVCA9ICcoeDg2XzY0fGkuODZ8cG93ZXJwY3xhcm18YWFyY2g2NCkuKi1saW51eCcKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworIyBzeXN0ZW10YXAgY2FuJ3QgYmUgYnVpbHQgd2l0aG91dCBvcHRpbWl6YXRpb24sIGlmIHNvbWVvbmUgdHJpZXMgdG8gY29tcGlsZSBhbgorIyBlbnRpcmUgaW1hZ2UgYXMgLU8wLCB3ZSBvdmVycmlkZSBpdCB3aXRoIC1PMiBoZXJlIGFuZCBnaXZlIGEgbm90ZSBhYm91dCBpdC4KK2RlZiBnZXRfb3B0aW1pemF0aW9uKGQpOgorICAgIHNlbGVjdGVkX29wdGltaXphdGlvbiA9IGQuZ2V0VmFyKCJTRUxFQ1RFRF9PUFRJTUlaQVRJT04iLCBUcnVlKQorICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zKCJTRUxFQ1RFRF9PUFRJTUlaQVRJT04iLCAiLU8wIiwgIngiLCAiIiwgZCkgPT0gIngiOgorICAgICAgICBiYi5ub3RlKCJzeXN0ZW10YXAgY2FuJ3QgYmUgYnVpbHQgd2l0aCAtTzAsIC1PMiB3aWxsIGJlIHVzZWQgaW5zdGVhZC4iKQorICAgICAgICByZXR1cm4gc2VsZWN0ZWRfb3B0aW1pemF0aW9uLnJlcGxhY2UoIi1PMCIsICItTzIiKQorICAgIHJldHVybiBzZWxlY3RlZF9vcHRpbWl6YXRpb24KKworU0VMRUNURURfT1BUSU1JWkFUSU9OIDo9ICIke0BnZXRfb3B0aW1pemF0aW9uKGQpfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQva2VybmVsc2hhcmtfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3RyYWNlLWNtZC9rZXJuZWxzaGFya19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlY2NhZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQva2VybmVsc2hhcmtfZ2l0LmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiR3JhcGhpY2FsIHRyYWNlIHZpZXdlciBmb3IgRnRyYWNlIgorTElDRU5TRSA9ICJHUEx2MiIKKworcmVxdWlyZSB0cmFjZS1jbWQuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2tlcm5lbC1zaGFyay5jO2JlZ2lubGluZT02O2VuZGxpbmU9ODttZDU9MmMyMmM5NjVhNjQ5ZGRkNzk3M2Q3OTEzYzU2MzRhNWUiCisKK0RFUEVORFMgPSAiZ3RrKyBsaWJ4bWwyIgorUkRFUEVORFNfJHtQTn0gPSAidHJhY2UtY21kIgorCitFWFRSQV9PRU1BS0UgPSAiXAorICAgICdwcmVmaXg9JHtwcmVmaXh9JyBcCisgICAgJ2JpbmRpcl9yZWxhdGl2ZT0ke0BvZS5wYXRoLnJlbGF0aXZlKHByZWZpeCwgYmluZGlyKX0nIFwKKyAgICAnbGliZGlyPSR7QG9lLnBhdGgucmVsYXRpdmUocHJlZml4LCBsaWJkaXIpfScgXAorICAgIE5PX1BZVEhPTj0xIFwKKyAgICBndWkgXAorIgorZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgIyBNYWtlIHN1cmUgdGhlIHJlY29tcGlsZSBpcyBPSworICAgIHJtIC1mICR7Qn0vLiouZAorfQorCitkb19pbnN0YWxsKCkgeworICAgIG9lX3J1bm1ha2UgREVTVERJUj0iJHtEfSIgaW5zdGFsbF9ndWkKKyAgICBybSAke0R9JHtiaW5kaXJ9L3RyYWNlLWNtZAorICAgIHJtIC1yZiAke0R9JHtsaWJkaXJ9L3RyYWNlLWNtZAorICAgIHJtZGlyICR7RH0ke2xpYmRpcn0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQvdHJhY2UtY21kLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQvdHJhY2UtY21kLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2U0YTljCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3RyYWNlLWNtZC90cmFjZS1jbWQuaW5jCkBAIC0wLDAgKzEsMTIgQEAKK1NSQ1JFViA9ICIwODEzMzM1ZDJlNDkyOTFlN2FiNmE0MzY1Y2VjMmJhYTA1ODEzZWRhIgorUFYgPSAiMi41LjMrZ2l0JHtTUkNQVn0iCisKK2luaGVyaXQgcGtnY29uZmlnCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L3RyYWNlLWNtZDoiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3Jvc3RlZHQvdHJhY2UtY21kLmdpdDticmFuY2g9dHJhY2UtY21kLXN0YWJsZS12Mi41IFwKKyAgICAgICAgICAgZmlsZTovL2Jsa3RyYWNlLWFwaS1jb21wYXRpYmlsaXR5LnBhdGNoIFwKKyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQvdHJhY2UtY21kL2Jsa3RyYWNlLWFwaS1jb21wYXRpYmlsaXR5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3RyYWNlLWNtZC90cmFjZS1jbWQvYmxrdHJhY2UtYXBpLWNvbXBhdGliaWxpdHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIwZGI2YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQvdHJhY2UtY21kL2Jsa3RyYWNlLWFwaS1jb21wYXRpYmlsaXR5LnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK3RyYWNlLWNtZDogQWRkIGJsa3RyYWNlX2FwaSBjb21wYXRpYmlsaXR5IGZvciBUQ19CQVJSSUVSCisKK05ld2VyIGtlcm5lbHMgcmVwbGFjZSBUQ19CQVJSSUVSIHdpdGggVENfRkxVU0guIEVuc3VyZSB0cmFjZS1jbWQKK2NhbiBidWlsZCByZWdhcmRsZXNzIG9mIHRoZSBsaW51eC1rZXJuZWwtaGVhZGVycyB2ZXJzaW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW1N0b3AgZ2FwXQorCitTaWduZWQtb2ZmLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3BsdWdpbl9ibGsuYyBiL3BsdWdpbl9ibGsuYworaW5kZXggOTMyN2IxNy4uYzhlNWUxYyAxMDA2NDQKKy0tLSBhL3BsdWdpbl9ibGsuYworKysrIGIvcGx1Z2luX2Jsay5jCitAQCAtNDQsNiArNDQsMTUgQEAgc3RydWN0IGJsa19kYXRhIHsKKyAJdW5zaWduZWQgc2hvcnQJCXBkdV9sZW47CisgfTsKKyAKKysvKgorKyAqIE5ld2VyIGtlcm5lbHMgZG9uJ3QgZGVmaW5lIEJMS19UQ19CQVJSSUVSIGFuZCBoYXZlIHJlcGxhY2VkIGl0IHdpdGgKKysgKiBCTEtfVENfRkxVU0guIEluIHRoaXMgY2FzZSwgZGVmaW5lIGl0IGhlcmUgYW5kIHJlcG9ydCBGTFVTSEVTIGFzIEJBUlJJRVJTIGFzCisrICogYSB3b3JrYXJvdW5kLCBhcyBkZXNjcmliZWQgaW46CisrICogaHR0cDovL2dpdC5rZXJuZWwub3JnLz9wPWxpbnV4L2tlcm5lbC9naXQvdG9ydmFsZHMvbGludXguZ2l0O2E9Y29tbWl0O2g9YzA5YzQ3Y2FlZGM5ODU0ZDU5Mzc4ZDZlMzRjOTg5ZTUxY2ZkZDJiNAorKyAqLworKyNpZm5kZWYgQkxLX1RDX0JBUlJJRVIKKysjZGVmaW5lIEJMS19UQ19CQVJSSUVSIDE8PDIKKysjZW5kaWYKKyBzdGF0aWMgdm9pZCBmaWxsX3J3YnMoY2hhciAqcndicywgaW50IGFjdGlvbiwgdW5zaWduZWQgaW50IGJ5dGVzKQorIHsKKyAJaW50IGkgPSAwOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3RyYWNlLWNtZC90cmFjZS1jbWRfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3RyYWNlLWNtZC90cmFjZS1jbWRfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYWM3ODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL3RyYWNlLWNtZF9naXQuYmIKQEAgLTAsMCArMSwzNSBAQAorU1VNTUFSWSA9ICJVc2VyIGludGVyZmFjZSB0byBGdHJhY2UiCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCisKK3JlcXVpcmUgdHJhY2UtY21kLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90cmFjZS1jbWQuYztiZWdpbmxpbmU9NjtlbmRsaW5lPTg7bWQ1PTJjMjJjOTY1YTY0OWRkZDc5NzNkNzkxM2M1NjM0YTVlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT1iYmI0NjEyMTFhMzNiMTM0ZDQyZWQ1ZWU4MDJiMzdmZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90cmFjZS1pbnB1dC5jO2JlZ2lubGluZT01O2VuZGxpbmU9ODttZDU9M2VjODJmNDNiYmUwY2ZiNTk1MWZmNDE0ZWY0ZDQ0ZDAgXAorIgorCitFWFRSQV9PRU1BS0UgPSAiXAorICAgICdwcmVmaXg9JHtwcmVmaXh9JyBcCisgICAgJ2JpbmRpcj0ke2JpbmRpcn0nIFwKKyAgICAnbWFuX2Rpcj0ke21hbmRpcn0nIFwKKyAgICAnaHRtbF9pbnN0YWxsPSR7ZGF0YWRpcn0va2VybmVsc2hhcmsvaHRtbCcgXAorICAgICdpbWdfaW5zdGFsbD0ke2RhdGFkaXJ9L2tlcm5lbHNoYXJrL2h0bWwvaW1hZ2VzJyBcCisgICAgXAorICAgICdiaW5kaXJfcmVsYXRpdmU9JHtAb2UucGF0aC5yZWxhdGl2ZShwcmVmaXgsIGJpbmRpcil9JyBcCisgICAgJ2xpYmRpcj0ke0BvZS5wYXRoLnJlbGF0aXZlKHByZWZpeCwgbGliZGlyKX0nIFwKKyAgICBcCisgICAgTk9fUFlUSE9OPTEgXAorIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS90cmFjZS1jbWQvcGx1Z2lucy8uZGVidWciCisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKyAgICAjIE1ha2Ugc3VyZSB0aGUgcmVjb21waWxlIGlzIE9LCisgICAgcm0gLWYgJHtCfS8uKi5kCit9CisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgREVTVERJUj0iJHtEfSIgaW5zdGFsbAorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L2xpYnBuZy9saWJwbmcxMl8xLjIuNTMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L2xpYnBuZy9saWJwbmcxMl8xLjIuNTMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY4NjFhNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWxzYjQvbGlicG5nL2xpYnBuZzEyXzEuMi41My5iYgpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gIlBORyBpbWFnZSBmb3JtYXQgZGVjb2RpbmcgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGlicG5nLm9yZy8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxpYnBuZyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWJkMmE3YTEzMzU1ZmNjYTkyYWQ4M2JkZjdlMjk2MDExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3BuZy5oO2JlZ2lubGluZT0zMjI7ZW5kbGluZT00MzY7bWQ1PWNhZjllZTU0MTIzNGM2NjNhZWVjZGNmZWYyZjc5YWUxIgorREVQRU5EUyA9ICJ6bGliIgorCitQTiA9ICJsaWJwbmcxMiIKK1MgPSAiJHtXT1JLRElSfS9saWJwbmctJHtQVn0iCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3Byb2plY3QvbGlicG5nL2xpYnBuZzEyLyR7UFZ9L2xpYnBuZy0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3ZDE4YTc0ZTZmZDIwMjlhZWU3NmNjZDAwZTAwYTllNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNDVlNDlmNjg5ZTc0NTFiZDU3NjU2OWU2YTM0NGY3ZTBkMTFjMDJlY2JiNzk3ZjRkYTBlNDMxNTI2NzY1YzBhIgorCitCSU5DT05GSUdfR0xPQiA9ICIke1BOfS1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZyBwa2djb25maWcKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBUaGUgZm9sbG93IGxpbmsgZmlsZXMgbGluayB0byBjb3JyZXNwb25kaW5nIHBuZzEyKi5oIGFuZCBsaWJwbmcxMiogZmlsZXMKKwkjIFRoZXkgY29uZmxpY3Qgd2l0aCBoaWdoZXIgdmVyaXNvbiwgc28gZHJvcCB0aGVtCisJdW5saW5rICR7RH0vJHtpbmNsdWRlZGlyfS9wbmcuaAorCXVubGluayAke0R9LyR7aW5jbHVkZWRpcn0vcG5nY29uZi5oCisKKwl1bmxpbmsgJHtEfS8ke2xpYmRpcn0vbGlicG5nLmxhCisJdW5saW5rICR7RH0vJHtsaWJkaXJ9L2xpYnBuZy5zbworCXVubGluayAke0R9LyR7bGliZGlyfS9saWJwbmcuYQorCXVubGluayAke0R9LyR7bGliZGlyfS9wa2djb25maWcvbGlicG5nLnBjCisKKwl1bmxpbmsgJHtEfS8ke2JpbmRpcn0vbGlicG5nLWNvbmZpZworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmNsYXNzLWlzYS1wZXJsXzAuMzYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliY2xhc3MtaXNhLXBlcmxfMC4zNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTM4NDFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmNsYXNzLWlzYS1wZXJsXzAuMzYuYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJQZXJsIG1vZHVsZSBmb3IgcmVwb3J0aW5nIHRoZSBzZWFyY2ggcGF0aCBmb3IgYSBjbGFzcydzIElTQSB0cmVlIgorREVTQ1JJUFRJT04gPSAiU3VwcG9zZSB5b3UgaGF2ZSBhIGNsYXNzIChsaWtlIEZvb2Q6OkZpc2g6OkZpc2hzdGljaykgdGhhdCBpcyBkZXJpdmVkLCBcCit2aWEgaXRzIEBJU0EsIGZyb20gb25lIG9yIG1vcmUgc3VwZXJjbGFzc2VzIChhcyBGb29kOjpGaXNoOjpGaXNoc3RpY2sgaXMgZnJvbSBGb29kOjpGaXNoLFwKK0xpZmU6OkZ1bmd1cywgYW5kIENoZW1pY2FscyksIGFuZCBzb21lIG9mIHRob3NlIHN1cGVyY2xhc3NlcyBtYXkgdGhlbXNlbHZlcyBlYWNoIGJlXAorZGVyaXZlZCwgdmlhIGl0cyBASVNBLCBmcm9tIG9uZSBvciBtb3JlIHN1cGVyY2xhc3NlcyAoYXMgYWJvdmUpLlwKK1wKK1doZW4sIHRoZW4sIHlvdSBjYWxsIGEgbWV0aG9kIGluIHRoYXQgY2xhc3MgKCRmaXNoc3RpY2stPmNhbG9yaWVzKSwgUGVybCBmaXJzdCBzZWFyY2hlc1wKK3RoZXJlIGZvciB0aGF0IG1ldGhvZCwgYnV0IGlmIGl0J3Mgbm90IHRoZXJlLCBpdCBnb2VzIHNlYXJjaGluZyBpbiBpdHMgc3VwZXJjbGFzc2VzLCBhbmRcCitzbyBvbiwgaW4gYSBkZXB0aC1maXJzdCAob3IgbWF5YmUgImhlaWdodC1maXJzdCIgaXMgdGhlIHdvcmQpIHNlYXJjaC4gSW4gdGhlIGFib3ZlIGV4YW1wbGUsXAoraXQnZCBmaXJzdCBsb29rIGluIEZvb2Q6OkZpc2gsIHRoZW4gRm9vZCwgdGhlbiBNYXR0ZXIsIHRoZW4gTGlmZTo6RnVuZ3VzLCB0aGVuIExpZmUsIHRoZW5cCitDaGVtaWNhbHMuXAorXAorVGhpcyBsaWJyYXJ5LCBDbGFzczo6SVNBLCBwcm92aWRlcyBmdW5jdGlvbnMgdGhhdCByZXR1cm4gdGhhdCBsaXN0IC0tIHRoZSBsaXN0XAorKGluIG9yZGVyKSBvZiBuYW1lcyBvZiBjbGFzc2VzIFBlcmwgd291bGQgc2VhcmNoIHRvIGZpbmQgYSBtZXRob2QsIHdpdGggbm8gZHVwbGljYXRlcy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvZGlzdC9DbGFzcy1JU0EvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0xMDc7ZW5kbGluZT0xMTE7bWQ1PTZhNWM2ODQyYTYzY2ZlNGRhYjFmNjZlMjM1MGU0ZDI1IgorCitTUkNfVVJJID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi9hdXRob3JzL2lkL1MvU00vU01VRUxMRVIvQ2xhc3MtSVNBLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjNhMmFkMjAzYzhkYzg3ZDZjOWRlMTYyMTVkMDBhZjQ3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg4MTZmMzRlOWEzOGU4NDlhMTBkZjc1NjAzMGRjY2Y5ZmUwNjFhMTk2YzExYWMzZmFhZmQ3MTEzYzkyOWI5NjQiCisKK1MgPSAiJHtXT1JLRElSfS9DbGFzcy1JU0EtJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJkdW1wdmFsdWUtcGVybF8xLjE3LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmR1bXB2YWx1ZS1wZXJsXzEuMTcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE3NDYxNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJkdW1wdmFsdWUtcGVybF8xLjE3LmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiUGVybCBtb2R1bGUgZm9yIHByb3ZpZGVzIHNjcmVlbiBkdW1wIG9mIFBlcmwgZGF0YSIKKworSE9NRVBBR0UgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9+ZmxvcmEvRHVtcHZhbHVlLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWY3MzZiZWM1YWRhMWZjNWUzOWIyYThlN2UwNmJiY2JiIgorCitTUkNfVVJJID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi9hdXRob3JzL2lkL0YvRkwvRkxPUkEvRHVtcHZhbHVlLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjZlZGU5ZjY5M2Q0YTljNDU1NTU0MWNiMWExY2MyMDA2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjllYTc0NjA2YjU0NWY3NjlhNzg3ZWMyYWUyMjk1NDlhMmFkMGE4ZTNjZDRiMTRlZmYyY2UzODQxODM2YjNiZGIiCisKK1MgPSAiJHtXT1JLRElSfS9EdW1wdmFsdWUtJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJlbnYtcGVybF8xLjA0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmVudi1wZXJsXzEuMDQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ4ZTExNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJlbnYtcGVybF8xLjA0LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiUGVybCBtb2R1bGUgdGhhdCBpbXBvcnRzIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcyBzY2FsYXJzIG9yIGFycmF5cyIKK0RFU0NSSVBUSU9OID0gIlBlcmwgbWFpbnRhaW5zIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBhIHNwZWNpYWwgaGFzaCBuYW1lZCAlRU5WLiBcCitGb3Igd2hlbiB0aGlzIGFjY2VzcyBtZXRob2QgaXMgaW5jb252ZW5pZW50LCB0aGUgUGVybCBtb2R1bGUgRW52IGFsbG93cyBlbnZpcm9ubWVudCBcCit2YXJpYWJsZXMgdG8gYmUgdHJlYXRlZCBhcyBzY2FsYXIgb3IgYXJyYXkgdmFyaWFibGVzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9+ZmxvcmEvRW52LyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTc2YzFjYmYxOGRiNTZiMzM0MGQ5MWNiOTQ3OTQzYmQzIgorCitTUkNfVVJJID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi9hdXRob3JzL2lkL0YvRkwvRkxPUkEvRW52LSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gImZkYmE1YzA2OTBlNjY5NzJjOTZmZWUxMTJjZjVmMjVjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQ5NGEzZDQxMmRmMjQ2YWZkYzMxYTIxOTljYmQ4YWU5MTUxNjdhM2Y0Njg0ZjdiNzAxNGNlMTIwMDI1MWViYjAiCisKK1MgPSAiJHtXT1JLRElSfS9FbnYtJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJmaWxlLWNoZWNrdHJlZS1wZXJsXzQuNDEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliZmlsZS1jaGVja3RyZWUtcGVybF80LjQxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMzdjNzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliZmlsZS1jaGVja3RyZWUtcGVybF80LjQxLmJiCkBAIC0wLDAgKzEsMzIgQEAKK1NVTU1BUlkgPSAiUGVybCBtb2R1bGUgdGhhdCBydW4gbWFueSBmaWxldGVzdCBjaGVja3Mgb24gYSB0cmVlIgorREVTQ1JJUFRJT04gPSAiVGhlIHZhbGlkYXRlKCkgcm91dGluZSB0YWtlcyBhIHNpbmdsZSBtdWx0aWxpbmUgc3RyaW5nIGNvbnNpc3RpbmcgXAorb2YgZGlyZWN0aXZlcywgZWFjaCBjb250YWluaW5nIGEgZmlsZW5hbWUgcGx1cyBhIGZpbGUgdGVzdCB0byB0cnkgb24gaXQuIChUaGUgZmlsZSBcCit0ZXN0IG1heSBhbHNvIGJlIGEgImNkIiwgY2F1c2luZyBzdWJzZXF1ZW50IHJlbGF0aXZlIGZpbGVuYW1lcyB0byBiZSBpbnRlcnByZXRlZCBcCityZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS4pIEFmdGVyIHRoZSBmaWxlIHRlc3QgeW91IG1heSBwdXQgfHwgZGllIHRvIG1ha2UgaXQgYSBcCitmYXRhbCBlcnJvciBpZiB0aGUgZmlsZSB0ZXN0IGZhaWxzLiBUaGUgZGVmYXVsdCBpcyB8fCB3YXJuLiBUaGUgZmlsZSB0ZXN0IG1heSBcCitvcHRpb25hbGx5IGhhdmUgYSAiIScgcHJlcGVuZGVkIHRvIHRlc3QgZm9yIHRoZSBvcHBvc2l0ZSBjb25kaXRpb24uIElmIHlvdSBkbyBhIFwKK2NkIGFuZCB0aGVuIGxpc3Qgc29tZSByZWxhdGl2ZSBmaWxlbmFtZXMsIHlvdSBtYXkgd2FudCB0byBpbmRlbnQgdGhlbSBzbGlnaHRseSBmb3IgXAorcmVhZGFiaWxpdHkuIElmIHlvdSBzdXBwbHkgeW91ciBvd24gZGllKCkgb3Igd2FybigpIG1lc3NhZ2UsIHlvdSBjYW4gdXNlICRmaWxlIHRvIFwKK2ludGVycG9sYXRlIHRoZSBmaWxlbmFtZS4gXAorXAorRmlsZXRlc3RzIG1heSBiZSBidW5jaGVkOiAiLXJ3eCIgdGVzdHMgZm9yIGFsbCBvZiAtciwgLXcsIGFuZCAteC4gT25seSB0aGUgZmlyc3QgZmFpbGVkIFwKK3Rlc3Qgb2YgdGhlIGJ1bmNoIHdpbGwgcHJvZHVjZSBhIHdhcm5pbmcuIFwKK1wKK1RoZSByb3V0aW5lIHJldHVybnMgdGhlIG51bWJlciBvZiB3YXJuaW5ncyBpc3N1ZWQuIgorCitIT01FUEFHRSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL35mbG9yYS9GaWxlLUNoZWNrVHJlZS8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1jNmZjYWNjNWRmODBlMDM3MDYwMzAwYTdmNGI5M2JmOSIKKworU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9GL0ZML0ZMT1JBL0ZpbGUtQ2hlY2tUcmVlLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjUxOWM4MmFhN2U1YjdmNzUyYjRkYTE0YTZjOGFkNzQwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZjOTlhYjZiYjVhZjQ2NjQ4MzI3MTU5NzRiNWExOWUzMjgwNzFkYzkyMDJhYjcyZTVkNWE1OTRlYmQ0NmE3MjkiCisKK1MgPSAiJHtXT1JLRElSfS9GaWxlLUNoZWNrVHJlZS0ke1BWfSIKKworaW5oZXJpdCBjcGFuCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmkxOG4tY29sbGF0ZS1wZXJsXzEuMDIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliaTE4bi1jb2xsYXRlLXBlcmxfMS4wMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTgzOWUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmkxOG4tY29sbGF0ZS1wZXJsXzEuMDIuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJQZXJsIG1vZHVsZSB0aGF0IGNvbXBhcmUgOC1iaXQgc2NhbGFyIGRhdGEgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGxvY2FsZSIKK0RFU0NSSVBUSU9OID0gIlRoaXMgbW9kdWxlIHByb3ZpZGVzIHlvdSB3aXRoIG9iamVjdHMgdGhhdCB3aWxsIGNvbGxhdGUgYWNjb3JkaW5nIHRvIFwKK3lvdXIgbmF0aW9uYWwgY2hhcmFjdGVyIHNldCwgcHJvdmlkZWQgdGhhdCB0aGUgUE9TSVggc2V0bG9jYWxlKCkgZnVuY3Rpb24gaXMgc3VwcG9ydGVkIFwKK29uIHlvdXIgc3lzdGVtLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9+ZmxvcmEvSTE4Ti1Db2xsYXRlLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWZmNmQ2MjkxNDRhNmVjMWVhOGMzMDBmNzU3NjAxODRmIgorCitTUkNfVVJJID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi9hdXRob3JzL2lkL0YvRkwvRkxPUkEvSTE4Ti1Db2xsYXRlLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjcyZGRiNmQxYzU5Y2ZkZjMxYWEzYjA0Nzk5Yjg2YWYwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjkxNzQ1MDZiYzkwM2VkYTg5NjkwMzk0ZTNmNDU1NThhYjdlMDEzMTE0MjI3ODk2ZDg1NjlkNjE2NDY0OGZlMzciCisKK1MgPSAiJHtXT1JLRElSfS9JMThOLUNvbGxhdGUtJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJwb2QtcGxhaW5lci1wZXJsXzEuMDQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGlicG9kLXBsYWluZXItcGVybF8xLjA0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZTU4ZjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGlicG9kLXBsYWluZXItcGVybF8xLjA0LmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiUGVybCBleHRlbnNpb24gZm9yIGNvbnZlcnRpbmcgUG9kIHRvIG9sZC1zdHlsZSBQb2QiCitERVNDUklQVElPTiA9ICJQb2Q6OlBsYWluZXIgdXNlcyBQb2Q6OlBhcnNlciB3aGljaCB0YWtlcyBQb2Qgd2l0aCB0aGUgKG5ldykgJ0M8PCAuLiA+PicgXAorY29uc3RydWN0cyBhbmQgcmV0dXJucyB0aGUgb2xkKGVyKSBzdHlsZSB3aXRoIGp1c3QgJ0M8Pic7ICc8JyBhbmQgJz4nIGFyZSByZXBsYWNlZCBieSBcCisnRTxsdD4nIGFuZCAnRTxndD4nLiBcCitcCitUaGlzIGNhbiBiZSB1c2VkIHRvIHByZS1wcm9jZXNzIFBvZCBiZWZvcmUgdXNpbmcgdG9vbHMgd2hpY2ggZG8gbm90IHJlY29nbmlzZSB0aGUgbmV3IHN0eWxlIFBvZHMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL2Rpc3QvUG9kLVBsYWluZXIvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0yNzttZDU9MjI3Y2Y4Mzk3MGZjNjEyNjQ4NDU4MjVkOWQyYmY2ZjgiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOL2F1dGhvcnMvaWQvUi9STS9STUJBUktFUi9Qb2QtUGxhaW5lci0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmNTAyZWFjZDFhNDA4OTRiOWRmZWE1NWZjMmNkNWU3ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxYmJmYmY3ZDFkNDg3MWU1YTgzYmFiMjEzN2UyMmQwODkwNzgyMDY4MTUxOTBlYjFkNWMxMjYwYTM0OTk0NTZmIgorCitTID0gIiR7V09SS0RJUn0vUG9kLVBsYWluZXItJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWZwdS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1mcHUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNDAyMzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1mcHUuaW5jCkBAIC0wLDAgKzEsNiBAQAorCitkZWYgZ2V0X2Fsc2FfZnB1X3NldHRpbmcoYmIsIGQpOgorCWlmIGQuZ2V0VmFyKCdUQVJHRVRfRlBVJywgVHJ1ZSkgaW4gWyAnc29mdCcgXToKKwkJcmV0dXJuICItLXdpdGgtc29mdGZsb2F0IgorCXJldHVybiAiIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWIvMDAwMS1idWlsZC1Eby1ub3QtdHJ5LXRvLWRldGVjdC1jcm9zcy1jb21waWxlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYi8wMDAxLWJ1aWxkLURvLW5vdC10cnktdG8tZGV0ZWN0LWNyb3NzLWNvbXBpbGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4M2JjM2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWIvMDAwMS1idWlsZC1Eby1ub3QtdHJ5LXRvLWRldGVjdC1jcm9zcy1jb21waWxlci5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitGcm9tIDE3YWViMzU2NWY0MTFlNzc5NmNhYmU0MDNmOTJkMTU5NDhhOGNhOTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMSBBdWcgMjAxNSAxNDo0Mjo0NSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBidWlsZDogRG8gbm90IHRyeSB0byBkZXRlY3QgY3Jvc3MtY29tcGlsZXIKKworY3Jvc3MgY29tcGlsZXJzIGFyZSBwYXNzZWQgdmlhIHBhdGggbWF5IG5vdCBiZSBhIGdjYyBiYXNlZCBjcm9zcworY29tcGlsZXIgaW4gc3VjaCBjYXNlcyB0aGlzIGNoZWNrIGZhaWxzIGFuZCB0cnkncyB0byBmb3JjZSBnY2MgYmFzZWQKK2Nyb3NzIGNvbXBpbGVyIGRldGVjdGlvbiwgVGhpcyBjb2RlIGlzIGEgY29udmVuaWVuY2UgdGhhdCBsaW1pdHMgdGhlCitidWlsZCBzeXN0ZW0KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBjb25maWd1cmUuYWMgfCAxNCAtLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMzAyMmNmOC4uOWQ3NzQ0MCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjcsMjAgKzI3LDYgQEAgQUNfUFJFRklYX0RFRkFVTFQoL3VzcikKKyAKKyBkbmwgQ2hlY2tzIGZvciBwcm9ncmFtcy4KKyAKKy1kbmwgdHJ5IHRvIGd1ZXMgY3Jvc3MtY29tcGlsZXIgaWYgbm90IHNldAorLWlmIHRlc3QgIngkaG9zdCIgIT0gIngkYnVpbGQiIC1hIC16ICJgZWNobyAkQ0MgfCBncmVwIC1lICctZ2NjJ2AiOworLXRoZW4KKy0gIEFDX01TR19DSEVDS0lORyhmb3IgY3Jvc3MtY29tcGlsZXIpCistCistICB3aGljaCAke3Byb2dyYW1fcHJlZml4fWdjYyA+L2Rldi9udWxsIDI+JjEgJiYgQ0M9JHtwcm9ncmFtX3ByZWZpeH1nY2MKKy0gIHdoaWNoICR7aG9zdF9jcHV9LSR7aG9zdF9vc30tZ2NjID4vZGV2L251bGwgMj4mMSBcCistICAmJiBDQz0ke2hvc3RfY3B1fS0ke2hvc3Rfb3N9LWdjYworLSAgd2hpY2ggJHtob3N0X2NwdX0tJHtob3N0X3ZlbmRvcn0tJHtob3N0X29zfS1nY2MgPi9kZXYvbnVsbCAyPiYxIFwKKy0gICYmIENDPSR7aG9zdF9jcHV9LSR7aG9zdF92ZW5kb3J9LSR7aG9zdF9vc30tZ2NjCistCistICBBQ19NU0dfUkVTVUxUKCRDQykKKy1maQorLQkgICAgCisgQ0ZMQUdTPSIkQ0ZMQUdTIC1EX0dOVV9TT1VSQ0UiCisgCisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYi9DaGVjay1pZi13b3JkZXhwLWZ1bmN0aW9uLWlzLXN1cHBvcnRlZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYi9DaGVjay1pZi13b3JkZXhwLWZ1bmN0aW9uLWlzLXN1cHBvcnRlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWE2ZWI4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliL0NoZWNrLWlmLXdvcmRleHAtZnVuY3Rpb24taXMtc3VwcG9ydGVkLnBhdGNoCkBAIC0wLDAgKzEsNTEgQEAKK0Zyb20gZTMzMzU3YjU5YTEwZDQ0ZTliZWM1ZDI0MTAwY2UyM2NhMzAwY2M3OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJIb25nIEguIFBoYW0iIDxob25nLnBoYW1Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMjkgQXVnIDIwMTQgMTc6MTM6NTUgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gQ2hlY2sgaWYgd29yZGV4cCBmdW5jdGlvbiBpcyBzdXBwb3J0ZWQKKworZWdsaWJjIGNvdWxkIGJlIGNvbmZpZ3VyZWQgdG8gYnVpbGQgd2l0aG91dCB3b3JkZXhwLCBzbyBpdCBpcyBub3QgZW5vdWdoCit0byBjaGVjayBpZiB3b3JkZXhwLmggZXhpc3RzICh0aGUgaGVhZGVyIGZpbGUgY291bGQgYmUgaW5zdGFsbGVkLCBidXQgaXQncworcG9zc2libGUgdGhhdCB0aGUgd29yZGV4cCgpIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQpLiAgQW4gYWRkaXRpb25hbAorY2hlY2sgaWYgd29yZGV4cCgpIGlzIHN1cHBvcnRlZCBieSB0aGUgc3lzdGVtIEMgbGlicmFyeSBpcyBuZWVkZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogSG9uZyBILiBQaGFtIDxob25nLnBoYW1Ad2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgICB8IDUgKysrKy0KKyBzcmMvdXNlcmZpbGUuYyB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYjgzNTNhMC4uNzczYjcyZiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzExLDcgKzMxMSwxMCBAQCBmaQorIEFDX1NVQlNUKEFMU0FfREVQTElCUykKKyAKKyBkbmwgQ2hlY2sgZm9yIGhlYWRlcnMKKy1BQ19DSEVDS19IRUFERVJTKFt3b3JkZXhwLmggZW5kaWFuLmggc3lzL2VuZGlhbi5oXSkKKytBQ19DSEVDS19IRUFERVJTKFt3b3JkZXhwLmggZW5kaWFuLmggc3lzL2VuZGlhbi5oXSwKKysgIGRubCBNYWtlIHN1cmUgd29yZGV4cCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEMgbGlicmFyeQorKyAgQUNfQ0hFQ0tfRlVOQ1MoW3dvcmRleHBdKQorKykKKyAKKyBkbmwgQ2hlY2sgZm9yIHJlc21nciBzdXBwb3J0Li4uCisgQUNfTVNHX0NIRUNLSU5HKGZvciByZXNtZ3Igc3VwcG9ydCkKK2RpZmYgLS1naXQgYS9zcmMvdXNlcmZpbGUuYyBiL3NyYy91c2VyZmlsZS5jCitpbmRleCAzYTczODM2Li5iOGNlODA5IDEwMDY0NAorLS0tIGEvc3JjL3VzZXJmaWxlLmMKKysrKyBiL3NyYy91c2VyZmlsZS5jCitAQCAtMzIsNyArMzIsNyBAQAorICAqIHN0b3JlcyB0aGUgZmlyc3QgbWF0Y2hpbmUgb25lLiAgVGhlIHJldHVybmVkIHN0cmluZyBpcyBzdHJkdXAnZWQuCisgICovCisgCistI2lmZGVmIEhBVkVfV09SREVYUF9ICisrI2lmIChkZWZpbmVkKEhBVkVfV09SREVYUF9IKSAmJiBkZWZpbmVkKEhBVkVfV09SREVYUCkpCisgI2luY2x1ZGUgPHdvcmRleHAuaD4KKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgaW50IHNuZF91c2VyX2ZpbGUoY29uc3QgY2hhciAqZmlsZSwgY2hhciAqKnJlc3VsdCkKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliXzEuMC4yOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYl8xLjAuMjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMwZjQyNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYl8xLjAuMjkuYmIKQEAgLTAsMCArMSw1MSBAQAorU1VNTUFSWSA9ICJBTFNBIHNvdW5kIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmFsc2EtcHJvamVjdC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVndHJhY2suYWxzYS1wcm9qZWN0Lm9yZy9hbHNhLWJ1Zy9sb2dpbl9wYWdlLnBocCIKK1NFQ1RJT04gPSAibGlicy9tdWx0aW1lZGlhIgorTElDRU5TRSA9ICJMR1BMdjIuMSAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9zb2NrZXQuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTI2O21kNT0xMWZmODlhOGE3YTRhNjkwYTVjNzhlZmZlODE1OTU0NSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCisjIGNvbmZpZ3VyZS5pbiBzZXRzIC1EX19hcm1fXyBvbiB0aGUgY29tbWFuZCBsaW5lIGZvciBhbnkgYXJtIHN5c3RlbQorIyAobm90IGp1c3QgdGhvc2Ugd2l0aCB0aGUgQVJNIGluc3RydWN0aW9uIHNldCksIHRoaXMgc2hvdWxkIGJlIHJlbW92ZWQsCisjIChvciByZXBsYWNlZCBieSBhIHBlcm1pdHRlZCAjZGVmaW5lKS4KKyNGSVhNRTogcmVtb3ZlIHRoZSBmb2xsb3dpbmcKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5hbHNhLXByb2plY3Qub3JnL3B1Yi9saWIvJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9DaGVjay1pZi13b3JkZXhwLWZ1bmN0aW9uLWlzLXN1cHBvcnRlZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWJ1aWxkLURvLW5vdC10cnktdG8tZGV0ZWN0LWNyb3NzLWNvbXBpbGVyLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJkZTY3ZTBlY2E3MjQ3NGQ2YjExMjEwMzdkYWZlMTAyNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3MzA0M2MzNWViOTYzNmJlMGY0YWY2YTI0MDIzNWMyMTNmMTJhMjVmZWIxZjA0YWVlYWM4Y2I3ZTMwZmNiZGQwIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworcmVxdWlyZSBhbHNhLWZwdS5pbmMKK0VYVFJBX09FQ09ORiArPSAiJHtAZ2V0X2Fsc2FfZnB1X3NldHRpbmcoYmIsIGQpfSAiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtcHl0aG9uIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLXdpdGgtdmVyc2lvbmVkPW5vICIKKworUEFDS0FHRVMgPSsgImFsc2Etc2VydmVyIGxpYmFzb3VuZCBhbHNhLWNvbmYtYmFzZSBhbHNhLWNvbmYgYWxzYS1kb2MiCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyR7QlBOfS9zbWl4ZXIvKi5zbyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9LyR7QlBOfS9zbWl4ZXIvLmRlYnVnIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vJHtCUE59L3NtaXhlci8qLmxhIgorRklMRVNfbGliYXNvdW5kID0gIiR7bGliZGlyfS9saWJhc291bmQuc28uKiIKK0ZJTEVTX2Fsc2Etc2VydmVyID0gIiR7YmluZGlyfS8qIgorRklMRVNfYWxzYS1jb25mID0gIiR7ZGF0YWRpcn0vYWxzYS8iCitGSUxFU19hbHNhLWNvbmYtYmFzZSA9ICJcCiske2RhdGFkaXJ9L2Fsc2EvYWxzYS5jb25mIFwKKyR7ZGF0YWRpcn0vYWxzYS9jYXJkcy9hbGlhc2VzLmNvbmYgXAorJHtkYXRhZGlyfS9hbHNhL3BjbS9kZWZhdWx0LmNvbmYgXAorJHtkYXRhZGlyfS9hbHNhL3BjbS9kbWl4LmNvbmYgXAorJHtkYXRhZGlyfS9hbHNhL3BjbS9kc25vb3AuY29uZiIKKworUkRFUEVORFNfbGliYXNvdW5kID0gImFsc2EtY29uZi1iYXNlIGFsc2EtY29uZiIKKyMgdXBncmFkZSBwYXRoCitSUFJPVklERVNfJHtQTn0tZGV2ID0gImFsc2EtZGV2IgorUlJFUExBQ0VTXyR7UE59LWRldiA9ICJhbHNhLWRldiIKK1JDT05GTElDVFNfJHtQTn0tZGV2ID0gImFsc2EtZGV2IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2lucy8wMDAxLWFyY2FtLWF2LUluY2x1ZGUtc3lzLXNlbGVjdC5oLWZvci1mZF9zZXQtZGVmaW5pdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXBsdWdpbnMvMDAwMS1hcmNhbS1hdi1JbmNsdWRlLXN5cy1zZWxlY3QuaC1mb3ItZmRfc2V0LWRlZmluaXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcwYzcyYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXBsdWdpbnMvMDAwMS1hcmNhbS1hdi1JbmNsdWRlLXN5cy1zZWxlY3QuaC1mb3ItZmRfc2V0LWRlZmluaXRpb24ucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSBkMjhjNjU1YmUzYWM0ZmNiODAyNDU1NTk4Mzg4NGY4MzJlZTE4Nzg3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWF5IDIwMTUgMTU6MTc6MzAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gYXJjYW0tYXY6IEluY2x1ZGUgc3lzL3NlbGVjdC5oIGZvciBmZF9zZXQgZGVmaW5pdGlvbgorCitmaXhlcyBidWlsZCBlcnJvcnMgb24gbm9uLWdsaWJjIGJhc2VkIHN5c3RlbXMKKworYXJjYW0tYXYvYXJjYW1fYXYuYzozODk6MjogZXJyb3I6IHVua25vd24gdHlwZSBuYW1lICdmZF9zZXQnCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKKyBhcmNhbS1hdi9hcmNhbV9hdi5jIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9hcmNhbS1hdi9hcmNhbV9hdi5jIGIvYXJjYW0tYXYvYXJjYW1fYXYuYworaW5kZXggMDQ5MWZjNi4uZmZmOTZmOSAxMDA2NDQKKy0tLSBhL2FyY2FtLWF2L2FyY2FtX2F2LmMKKysrKyBiL2FyY2FtLWF2L2FyY2FtX2F2LmMKK0BAIC0zMSw2ICszMSw3IEBACisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorIAorICNpbmNsdWRlIDxzeXMvaXBjLmg+CisrI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyAjaW5jbHVkZSA8c3lzL3NobS5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1wbHVnaW5zLzAwMDEtaW5jbHVkZS1zcGVleGRzcF90eXBlcy5oLW5vdC1zcGVleF90eXBlcy5oLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2lucy8wMDAxLWluY2x1ZGUtc3BlZXhkc3BfdHlwZXMuaC1ub3Qtc3BlZXhfdHlwZXMuaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTE5OWZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2lucy8wMDAxLWluY2x1ZGUtc3BlZXhkc3BfdHlwZXMuaC1ub3Qtc3BlZXhfdHlwZXMuaC5wYXRjaApAQCAtMCwwICsxLDcxIEBACitGcm9tIGNhNDFlOTZhNDlhNTY4MTI4MzU0ZjY1ZjkwYTc2OWRlYmY1NDM1ZjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFRodSwgOSBKdWwgMjAxNSAxMTo1ODoxMiArMDMwMAorU3ViamVjdDogW1BBVENIXSBpbmNsdWRlIHNwZWV4ZHNwX3R5cGVzLmgsIG5vdCBzcGVleF90eXBlcy5oCisKK1NwZWV4ZHNwIHdhcyBzZXBhcmF0ZWQgZnJvbSBzcGVleCBpbiAxLjJyYzIuIHNwZWV4X3R5cGVzLmggaXMgbm90CitzaGlwcGVkIGJ5IHNwZWV4ZHNwLCBzbyBhbHNhLXBsdWdpbnMgc2hvdWxkbid0IHVzZSB0aGF0IGZpbGUuIHNwZWV4ZHNwCitoYXMgc3BlZXhkc3BfdHlwZXMuaCwgd2hpY2ggaGFzIHRoZSBzYW1lIGNvbnRlbnRzIGFzIHNwZWV4X3R5cGVzLmguCisKK3NwZWV4ZHNwX3R5cGVzLmggaXMgYSBuZXcgZmlsZSBpbnRyb2R1Y2VkIGluIDEuMnJjMiwgc28gdGhpcyBjaGFuZ2UKK2J1bXBzIHRoZSBtaW5pbXVtIHN1cHBvcnRlZCBzcGVleGRzcCB2ZXJzaW9uLiBUaGUgdmVyc2lvbiBjaGVjayBpbgorY29uZmlndXJlLmFjIHdpbGwgYWN0dWFsbHkgYnJlYWsgaWYgc3BlZXhkc3AgMS4yIGV2ZXIgZ2V0cyByZWxlYXNlZCwKK2JlY2F1c2UgcGtnLWNvbmZpZyB0aGlua3MgdGhhdCAiMS4yIiA8ICIxLjJyYzIiLCBidXQgSSB0aGluayBpdCdzCit1c2VmdWwgdG8gZmFpbCBpZiB0aGUgaW5zdGFsbGVkIHNwZWV4ZHNwIHZlcnNpb24gaXMgMS4ycmMxICh3aGljaCBJCitiZWxpZXZlIGlzIHZlcnkgY29tbW9uIG9uIGN1cnJlbnQgZGlzdHJpYnV0aW9ucykuIElmIGEgbm9uLXJjIHZlcnNpb24KK29mIHNwZWV4ZHNwIHdpbGwgZXZlciBnZXQgcmVsZWFzZWQsIEkgaG9wZSB2ZXJzaW9uIG51bWJlciAxLjIgd2lsbCBiZQorc2tpcHBlZCBmb3IgdGhpcyByZWFzb24uIChBIG5vbi1yYyB2ZXJzaW9uIHNlZW1zIHVubGlrZWx5LCBzaW5jZQorMS4ycmMxIHdhcyByZWxlYXNlZCB5ZWFycyBhZ28sIHNvIGl0J3MgcHJldHR5IGxpa2VseSB0aGF0IHRoZSBwcm9qZWN0CitpcyBzdHVjayBvbiBzbyBjYWxsZWQgInJlbGVhc2UgY2FuZGlkYXRlcyIgZm9yZXZlci4uLikKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgKGh0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmxpbnV4LmFsc2EuZGV2ZWwvMTQxMTQ5KQorCitTaWduZWQtb2ZmLWJ5OiBUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgICB8IDIgKy0KKyBwcGgvYXJjaC5oICAgICAgICAgICAgfCAyICstCisgcHBoL3NwZWV4X3Jlc2FtcGxlci5oIHwgMiArLQorIDMgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA5MDJhNmQ3Li5jNTU0ZDIyIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMDgsNyArMTA4LDcgQEAgQUNfU1VCU1QoQVZDT0RFQ19DRkxBR1MpCisgQUNfU1VCU1QoQVZDT0RFQ19MSUJTKQorIEFDX1NVQlNUKEFWQ09ERUNfSEVBREVSKQorIAorLVBLR19DSEVDS19NT0RVTEVTKHNwZWV4ZHNwLCBbc3BlZXhkc3AgPj0gMS4yXSwgW0hBVkVfU1BFRVhEU1A9InllcyJdLCBbSEFWRV9TUEVFWERTUD0iIl0pCisrUEtHX0NIRUNLX01PRFVMRVMoc3BlZXhkc3AsIFtzcGVleGRzcCA+PSAxLjJyYzJdLCBbSEFWRV9TUEVFWERTUD0ieWVzIl0sIFtIQVZFX1NQRUVYRFNQPSIiXSkKKyBBTV9DT05ESVRJT05BTChIQVZFX1NQRUVYRFNQLCB0ZXN0ICIkSEFWRV9TUEVFWERTUCIgPSAieWVzIikKKyAKKyBBQ19BUkdfV0lUSChbc3BlZXhdLAorZGlmZiAtLWdpdCBhL3BwaC9hcmNoLmggYi9wcGgvYXJjaC5oCitpbmRleCBlMmQ3MzFhLi5hMDdkMGQ5IDEwMDY0NAorLS0tIGEvcHBoL2FyY2guaAorKysrIGIvcHBoL2FyY2guaAorQEAgLTM2LDcgKzM2LDcgQEAKKyAjZGVmaW5lIEFSQ0hfSAorIAorICNpZm5kZWYgT1VUU0lERV9TUEVFWAorLSNpbmNsdWRlICJzcGVleC9zcGVleF90eXBlcy5oIgorKyNpbmNsdWRlICJzcGVleC9zcGVleGRzcF90eXBlcy5oIgorICNlbmRpZgorIAorICNkZWZpbmUgQUJTKHgpICgoeCkgPCAwID8gKC0oeCkpIDogKHgpKSAgICAgIC8qKjwgQWJzb2x1dGUgaW50ZWdlciB2YWx1ZS4gKi8KK2RpZmYgLS1naXQgYS9wcGgvc3BlZXhfcmVzYW1wbGVyLmggYi9wcGgvc3BlZXhfcmVzYW1wbGVyLmgKK2luZGV4IGM0NGZiY2QuLmFhODVhYmIgMTAwNjQ0CistLS0gYS9wcGgvc3BlZXhfcmVzYW1wbGVyLmgKKysrKyBiL3BwaC9zcGVleF9yZXNhbXBsZXIuaAorQEAgLTgyLDcgKzgyLDcgQEAKKyAgICAgICAKKyAjZWxzZSAvKiBPVVRTSURFX1NQRUVYICovCisgCistI2luY2x1ZGUgInNwZWV4L3NwZWV4X3R5cGVzLmgiCisrI2luY2x1ZGUgInNwZWV4L3NwZWV4ZHNwX3R5cGVzLmgiCisgCisgI2VuZGlmIC8qIE9VVFNJREVfU1BFRVggKi8KKyAKKy0tIAorMS45LjMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2luc18xLjAuMjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1wbHVnaW5zXzEuMC4yOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTI4NjE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2luc18xLjAuMjkuYmIKQEAgLTAsMCArMSwxMDUgQEAKK0RFU0NSSVBUSU9OID0gIkFMU0EgUGx1Z2lucyIKK0hPTUVQQUdFID0gImh0dHA6Ly9hbHNhLXByb2plY3Qub3JnIgorU0VDVElPTiA9ICJtdWx0aW1lZGlhIgorCisjIFRoZSBwcmltYXJ5IGxpY2Vuc2Ugb2YgYWxzYS1wbHVnaW5zIGlzIExHUEx2Mi4xLgorIworIyBtNC9hdHRyaWJ1dGVzLm00IGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyKy4gbTQvYXR0cmlidXRlcy5tNCBpcyBwYXJ0IG9mIHRoZQorIyBidWlsZCBzeXN0ZW0sIGFuZCBkb2Vzbid0IGFmZmVjdCB0aGUgbGljZW5zaW5nIG9mIHRoZSBidWlsZCByZXN1bHQuCisjCisjIFRoZSBzYW1wbGVyYXRlIHBsdWdpbiBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciBHUEx2MisgdG8gYmUgY29uc2lzdGVudAorIyB3aXRoIHRoZSBsaWJzYW1wbGVyYXRlIGxpY2Vuc2UuCitMSUNFTlNFID0gIkxHUEx2Mi4xICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJcCisgICAgICAgIGZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCBcCisgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkdQTDttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICBmaWxlOi8vbTQvYXR0cmlidXRlcy5tNDtlbmRsaW5lPTMzO21kNT1iMjU5NThkYTQ0YzAyMjMxZTM2NDFmMWJjY2VmNTNlYiBcCisgICAgICAgIGZpbGU6Ly9yYXRlL3JhdGVfc2FtcGxlcmF0ZS5jO2VuZGxpbmU9MTk7bWQ1PWYzZDNjZTBiMTg5ODQ2YTQ4NjUxN2Q5N2E4NTRiMjc2IFwKKyIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuYWxzYS1wcm9qZWN0Lm9yZy9wdWIvcGx1Z2lucy8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtYXJjYW0tYXYtSW5jbHVkZS1zeXMtc2VsZWN0LmgtZm9yLWZkX3NldC1kZWZpbml0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaW5jbHVkZS1zcGVleGRzcF90eXBlcy5oLW5vdC1zcGVleF90eXBlcy5oLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJhNjY3OTdiNDQ3MWUzY2JlOTY1NzUyMDdiZmJlMjUyYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzMjVkODVjYWMyODVmNjMyYjgzZTAxOTFhZTNmMzQ4YmFkMDNjMWYwMDdiOTM3MDQyZjE2NGFiYjgxZWE2NTMyIgorCitERVBFTkRTICs9ICJhbHNhLWxpYiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BBQ0tBR0VDT05GSUcgPz89ICJcCisgICAgICAgIHNhbXBsZXJhdGUgXAorICAgICAgICBzcGVleGRzcCBcCisgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHVsc2VhdWRpbycsICdwdWxzZWF1ZGlvJywgJycsIGQpfSBcCisiCitQQUNLQUdFQ09ORklHW2F2Y29kZWNdID0gIi0tZW5hYmxlLWF2Y29kZWMsLS1kaXNhYmxlLWF2Y29kZWMsbGliYXYiCitQQUNLQUdFQ09ORklHW2phY2tdID0gIi0tZW5hYmxlLWphY2ssLS1kaXNhYmxlLWphY2ssamFjayIKK1BBQ0tBR0VDT05GSUdbbWFlbW8tcGx1Z2luXSA9ICItLWVuYWJsZS1tYWVtby1wbHVnaW4sLS1kaXNhYmxlLW1hZW1vLXBsdWdpbiIKK1BBQ0tBR0VDT05GSUdbbWFlbW8tcmVzb3VyY2UtbWFuYWdlcl0gPSAiLS1lbmFibGUtbWFlbW8tcmVzb3VyY2UtbWFuYWdlciwtLWRpc2FibGUtbWFlbW8tcmVzb3VyY2UtbWFuYWdlcixkYnVzIgorUEFDS0FHRUNPTkZJR1twdWxzZWF1ZGlvXSA9ICItLWVuYWJsZS1wdWxzZWF1ZGlvLC0tZGlzYWJsZS1wdWxzZWF1ZGlvLHB1bHNlYXVkaW8iCitQQUNLQUdFQ09ORklHW3NhbXBsZXJhdGVdID0gIi0tZW5hYmxlLXNhbXBsZXJhdGUsLS1kaXNhYmxlLXNhbXBsZXJhdGUsbGlic2FtcGxlcmF0ZTAiCitQQUNLQUdFQ09ORklHW3NwZWV4ZHNwXSA9ICItLXdpdGgtc3BlZXg9bGliLC0td2l0aC1zcGVleD1ubyxzcGVleGRzcCIKKworUEFDS0FHRVMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3B1bHNlYXVkaW8nLCAnYWxzYS1wbHVnaW5zLXB1bHNlYXVkaW8tY29uZicsICcnLCBkKX0iCisKK1BBQ0tBR0VTX0RZTkFNSUMgPSAiXmxpYmFzb3VuZC1tb2R1bGUtLioiCisKKyMgVGhlIGFsc2EtcGx1Z2lucyBwYWNrYWdlIGRvZXNuJ3QgaXRzZWxmIGNvbnRhaW4gYW55dGhpbmcsIGl0IGp1c3QgZGVwZW5kcyBvbgorIyBhbGwgYnVpbHQgcGx1Z2lucy4KK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtICR7RH0ke2xpYmRpcn0vYWxzYS1saWIvKi5sYQorCisJIyBXZSB1c2UgdGhlIGV4YW1wbGUgYXMgaXMsIHNvIGp1c3QgZHJvcCB0aGUgLmV4YW1wbGUgc3VmZml4LgorCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3B1bHNlYXVkaW8nLCAneWVzJywgJ25vJywgZCl9IiA9ICJ5ZXMiIF07IHRoZW4KKwkJbXYgJHtEfSR7ZGF0YWRpcn0vYWxzYS9hbHNhLmNvbmYuZC85OS1wdWxzZWF1ZGlvLWRlZmF1bHQuY29uZi5leGFtcGxlICR7RH0ke2RhdGFkaXJ9L2Fsc2EvYWxzYS5jb25mLmQvOTktcHVsc2VhdWRpby1kZWZhdWx0LmNvbmYKKwlmaQorfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCgpIHsKKyAgICBwbHVnaW5kaXIgPSBiYi5kYXRhLmV4cGFuZCgnJHtsaWJkaXJ9L2Fsc2EtbGliLycsIGQpCisgICAgcGFja2FnZXMgPSAiICIuam9pbihkb19zcGxpdF9wYWNrYWdlcyhkLCBwbHVnaW5kaXIsICdebGliYXNvdW5kX21vZHVsZV8oLiopXC5zbyQnLCAnbGliYXNvdW5kLW1vZHVsZS0lcycsICdBbHNhIHBsdWdpbiBmb3IgJXMnLCBleHRyYV9kZXBlbmRzPScnKSkKKyAgICBkLnNldFZhcigiUkRFUEVORFNfYWxzYS1wbHVnaW5zIiwgcGFja2FnZXMpCit9CisKKyMgVGhlIHJhdGUgcGx1Z2lucyBjcmVhdGUgc29tZSBzeW1saW5rcy4gRm9yIGV4YW1wbGUsIHRoZSBzYW1wbGVyYXRlIHBsdWdpbgorIyBjcmVhdGVzIHRoZXNlIGxpbmtzIHRvIHRoZSBtYWluIHBsdWdpbiBmaWxlOgorIworIyAgIGxpYmFzb3VuZF9tb2R1bGVfcmF0ZV9zYW1wbGVyYXRlX2Jlc3Quc28KKyMgICBsaWJhc291bmRfbW9kdWxlX3JhdGVfc2FtcGxlcmF0ZV9saW5lYXIuc28KKyMgICBsaWJhc291bmRfbW9kdWxlX3JhdGVfc2FtcGxlcmF0ZV9tZWRpdW0uc28KKyMgICBsaWJhc291bmRfbW9kdWxlX3JhdGVfc2FtcGxlcmF0ZV9vcmRlci5zbworIworIyBUaGUgb3RoZXIgcmF0ZSBwbHVnaW5zIGNyZWF0ZSBzaW1pbGFyIGxpbmtzLiBXZSBoYXZlIHRvIGFkZCB0aGUgbGlua3MgdG8KKyMgRklMRVMgbWFudWFsbHksIGJlY2F1c2UgZG9fc3BsaXRfcGFja2FnZXMoKSBza2lwcyB0aGUgbGlua3MgKHdoaWNoIGlzIGdvb2QsCisjIGJlY2F1c2Ugd2Ugd291bGRuJ3Qgd2FudCBkb19zcGxpdF9wYWNrYWdlcygpIHRvIGNyZWF0ZSBzZXBhcmF0ZSBwYWNrYWdlcyBmb3IKKyMgdGhlIHN5bWxpbmtzKS4KKyMKKyMgVGhlIHN5bWxpbmtzIGNhdXNlIFFBIGVycm9ycywgYmVjYXVzZSB1c3VhbGx5IGl0J3MgYSBidWcgaWYgYSBub24KKyMgLWRldi8tZGJnLy1uYXRpdmVzZGsgcGFja2FnZSBjb250YWlucyBsaW5rcyB0byAuc28gZmlsZXMsIGJ1dCBpbiB0aGlzIGNhc2UKKyMgdGhlIGVycm9ycyBhcmUgZmFsc2UgcG9zaXRpdmVzLCBzbyB3ZSBkaXNhYmxlIHRoZSBRQSBjaGVja3MuCitGSUxFU18ke01MUFJFRklYfWxpYmFzb3VuZC1tb2R1bGUtcmF0ZS1sYXZjcmF0ZSArPSAiJHtsaWJkaXJ9L2Fsc2EtbGliLypyYXRlX2xhdmNyYXRlXyouc28iCitGSUxFU18ke01MUFJFRklYfWxpYmFzb3VuZC1tb2R1bGUtcmF0ZS1zYW1wbGVyYXRlICs9ICIke2xpYmRpcn0vYWxzYS1saWIvKnJhdGVfc2FtcGxlcmF0ZV8qLnNvIgorRklMRVNfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtc3BlZXhyYXRlICs9ICIke2xpYmRpcn0vYWxzYS1saWIvKnJhdGVfc3BlZXhyYXRlXyouc28iCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmFzb3VuZC1tb2R1bGUtcmF0ZS1sYXZjcmF0ZSA9ICJkZXYtc28iCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmFzb3VuZC1tb2R1bGUtcmF0ZS1zYW1wbGVyYXRlID0gImRldi1zbyIKK0lOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliYXNvdW5kLW1vZHVsZS1yYXRlLXNwZWV4cmF0ZSA9ICJkZXYtc28iCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2Fsc2EtbGliLy5kZWJ1ZyIKKworIyA1MC1wdWxzZWF1ZGlvLmNvbmYgZGVmaW5lcyBhIGRldmljZSBuYW1lZCAicHVsc2UiIHRoYXQgYXBwbGljYXRpb25zIGNhbiB1c2UKKyMgaWYgdGhleSBleHBsaWNpdGx5IHdhbnQgdG8gdXNlIHRoZSBQdWxzZUF1ZGlvIHBsdWdpbi4KKyMgOTktcHVsc2VhdWRpby1kZWZhdWx0LmNvbmYgY29uZmlndXJlcyB0aGUgImRlZmF1bHQiIGRldmljZSB0byB1c2UgdGhlCisjIFB1bHNlQXVkaW8gcGx1Z2luLgorRklMRVNfJHtQTn0tcHVsc2VhdWRpby1jb25mICs9ICJcCisgICAgICAgICR7ZGF0YWRpcn0vYWxzYS9hbHNhLmNvbmYuZC81MC1wdWxzZWF1ZGlvLmNvbmYgXAorICAgICAgICAke2RhdGFkaXJ9L2Fsc2EvYWxzYS5jb25mLmQvOTktcHVsc2VhdWRpby1kZWZhdWx0LmNvbmYgXAorIgorCitSREVQRU5EU18ke1BOfS1wdWxzZWF1ZGlvLWNvbmYgKz0gIlwKKyAgICAgICAgbGliYXNvdW5kLW1vZHVsZS1jb25mLXB1bHNlIFwKKyAgICAgICAgbGliYXNvdW5kLW1vZHVsZS1jdGwtcHVsc2UgXAorICAgICAgICBsaWJhc291bmQtbW9kdWxlLXBjbS1wdWxzZSBcCisiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy8wMDAxLWFzMTBrMS1NYWtlLW91dHB1dF90cmFtX2xpbmUtc3RhdGljLWlubGluZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzLzAwMDEtYXMxMGsxLU1ha2Utb3V0cHV0X3RyYW1fbGluZS1zdGF0aWMtaW5saW5lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNDlhMzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy8wMDAxLWFzMTBrMS1NYWtlLW91dHB1dF90cmFtX2xpbmUtc3RhdGljLWlubGluZS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDFlNTkyNmRmNzRhMzVmZTJjZDkwYmM1OWY1MjY0YTg3MTVjOTQwNDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCA3IFNlcCAyMDE1IDA4OjE2OjU5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGFzMTBrMTogTWFrZSBvdXRwdXRfdHJhbV9saW5lKCkgc3RhdGljIGlubGluZQorCitUaGUgZnVuY3Rpb24gaXMgbm90IHVzZWQgaW4gYW55IG90aGVyIGZpbGUsIGl0cyBiZXR0ZXIgdG8gbWFrZSBpdCBzdGF0aWMKK2lubGluZSBzbyBjb21waWxlciBoYXMgYSBiZXR0ZXIgY2hhbmNlIG9mIG9wdGltaXppbmcgaGVyZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIGFzMTBrMS9hczEwazEuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2FzMTBrMS9hczEwazEuYyBiL2FzMTBrMS9hczEwazEuYworaW5kZXggOTZhZjBjMy4uZDA3NjZmZCAxMDA2NDQKKy0tLSBhL2FzMTBrMS9hczEwazEuYworKysrIGIvYXMxMGsxL2FzMTBrMS5jCitAQCAtMzY2LDcgKzM2Niw3IEBAIHZvaWQgYXNfZXhpdChjb25zdCBjaGFyICptZXNzYWdlKQorIAlleGl0KDEpOworIH0KKyAKKy1pbmxpbmUgdm9pZCBvdXRwdXRfdHJhbV9saW5lKCBzdHJ1Y3QgbGlzdF9oZWFkICpsaW5lX2hlYWQsIGludCB0eXBlKXsKKytzdGF0aWMgaW5saW5lIHZvaWQgb3V0cHV0X3RyYW1fbGluZSggc3RydWN0IGxpc3RfaGVhZCAqbGluZV9oZWFkLCBpbnQgdHlwZSl7CisgICAgICAgICAKKyAgICAgICAgIHN0cnVjdCB0cmFtICp0cmFtX3N5bTsKKyAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OworLS0gCisyLjUuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy9hdXRvdG9vbHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy9hdXRvdG9vbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzOTFkNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzL2F1dG90b29scy5wYXRjaApAQCAtMCwwICsxLDMyIEBACitBZGQgcGFyYW1ldGVycyB0byBhdXRvcmVjb25mIHRvIHN1cHBvcnQgY3Jvc3MgY29tcGlsZS4KK1JlbW92ZSBzb21lIHN1Yi1jb21wb25lbnRzIHdoaWNoIG5lZWRzIGZ1cnRoZXIgcmVjaXBlIHN1cHBvcnQuCisKK1NpZ25lZC1vZmYtYnk6IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworZGlmZiAtcnVOIGFsc2EtdG9vbHMtMS4wLjI0LjEtb3JpZy8vbGQxMGsxL2dpdGNvbXBpbGUgYWxzYS10b29scy0xLjAuMjQuMS9sZDEwazEvZ2l0Y29tcGlsZQorLS0tIGFsc2EtdG9vbHMtMS4wLjI0LjEtb3JpZy8vbGQxMGsxL2dpdGNvbXBpbGUJMjAxMS0wNy0wNiAxMToyNzo0MC4yMjc2NjUwMDIgKzA4MDAKKysrKyBhbHNhLXRvb2xzLTEuMC4yNC4xL2xkMTBrMS9naXRjb21waWxlCTIwMTEtMDctMTQgMTM6MjY6MTguMDE3NjY1MDA0ICswODAwCitAQCAtMSw2ICsxLDYgQEAKKyAjIS9iaW4vYmFzaAorIAorLWF1dG9yZWNvbmYgLWZpIHx8IGV4aXQgMQorK2F1dG9yZWNvbmYgJEFDTE9DQUxfRkxBR1MgLWZpIHx8IGV4aXQgMQorIGV4cG9ydCBDRkxBR1M9Jy1PMiAtV2FsbCAtcGlwZSAtZycKKyBlY2hvICJDRkxBR1M9JENGTEFHUyIKKyBlY2hvICIuL2NvbmZpZ3VyZSAkQCIKK2RpZmYgLXJ1TiBhbHNhLXRvb2xzLTEuMC4yNC4xLW9yaWcvL01ha2VmaWxlIGFsc2EtdG9vbHMtMS4wLjI0LjEvTWFrZWZpbGUKKy0tLSBhbHNhLXRvb2xzLTEuMC4yNC4xLW9yaWcvL01ha2VmaWxlCTIwMTEtMDctMDYgMTE6Mjc6NDAuMjA3NjY1MDAwICswODAwCisrKysgYWxzYS10b29scy0xLjAuMjQuMS9NYWtlZmlsZQkyMDExLTA3LTE0IDE1OjA4OjA4Ljg3NzY2NTAwOSArMDgwMAorQEAgLTEsOCArMSw4IEBACisgVkVSU0lPTiA9IDEuMC4yOQorIFRPUCA9IC4KKy1TVUJESVJTID0gYXMxMGsxIGVudnkyNGNvbnRyb2wgaGRzcGxvYWRlciBoZHNwY29uZiBoZHNwbWl4ZXIgXAorK1NVQkRJUlMgPSBhczEwazEgZW52eTI0Y29udHJvbCBcCisgCSAgbWl4YXJ0bG9hZGVyIHBjeGhybG9hZGVyIHJtZWRpZ2ljb250cm9sIHNiMTZfY3NwIHNlcSBzc2NhcGVfY3RsIFwKKy0JICB1czQyOGNvbnRyb2wgdXN4Mnlsb2FkZXIgdnhsb2FkZXIgZWNob21peGVyIGxkMTBrMSBxbG8xMGsxIFwKKysJICB1czQyOGNvbnRyb2wgdXN4Mnlsb2FkZXIgdnhsb2FkZXIgZWNob21peGVyIFwKKyAJICBod21peHZvbHVtZSBoZGFqYWNrcmV0YXNrIGhkYS12ZXJiIGhkYWphY2tzZW5zZXRlc3QKKyAKKyBhbGw6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy9naXRjb21waWxlX2hkYWphY2tzZW5zZXRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy9naXRjb21waWxlX2hkYWphY2tzZW5zZXRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTgzMjhiZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzL2dpdGNvbXBpbGVfaGRhamFja3NlbnNldGVzdApAQCAtMCwwICsxLDEzIEBACisjIS9iaW4vYmFzaAorCithY2xvY2FsICRBQ0xPQ0FMX0ZMQUdTIHx8IGV4aXQgMQorYXV0b21ha2UgLS1mb3JlaWduIC0tYWRkLW1pc3NpbmcgfHwgZXhpdCAxCithdXRvY29uZiB8fCBleGl0IDEKK2V4cG9ydCBDRkxBR1M9Jy1PMiAtV2FsbCAtcGlwZSAtZycKK2VjaG8gIkNGTEFHUz0kQ0ZMQUdTIgorZWNobyAiLi9jb25maWd1cmUgJEAiCisuL2NvbmZpZ3VyZSAkQCB8fCBleGl0IDEKK3Vuc2V0IENGTEFHUworaWYgWyAteiAiJEdJVENPTVBJTEVfTk9fTUFLRSIgXTsgdGhlbgorICBtYWtlIHx8IGV4aXQgMQorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzL21ha2VmaWxlX25vX2d0ay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzL21ha2VmaWxlX25vX2d0ay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTU3NjA5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvbWFrZWZpbGVfbm9fZ3RrLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK1JlbW92ZSBzb21lIHN1Yi1jb21wb25lbnRzIHdoaWNoIG5lZWQgZ3RrKy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBSb2dlcmlvIE51bmVzIDxyb251bmVzQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CisKK1VwZGF0ZSBwYXRjaCBmb3IgYWxzYS10b29scyAxLjAuMjkKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCAyNDU3YTFjLi43MjM0NmQ5IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMSw5ICsxLDkgQEAKKyBWRVJTSU9OID0gMS4wLjI5CisgVE9QID0gLgorLVNVQkRJUlMgPSBhczEwazEgZW52eTI0Y29udHJvbCBcCistCSAgbWl4YXJ0bG9hZGVyIHBjeGhybG9hZGVyIHJtZWRpZ2ljb250cm9sIHNiMTZfY3NwIHNlcSBzc2NhcGVfY3RsIFwKKy0JICB1czQyOGNvbnRyb2wgdXN4Mnlsb2FkZXIgdnhsb2FkZXIgZWNob21peGVyIFwKKy0JICBod21peHZvbHVtZSBoZGFqYWNrcmV0YXNrIGhkYS12ZXJiIGhkYWphY2tzZW5zZXRlc3QKKytTVUJESVJTID0gYXMxMGsxIFwKKysJICBtaXhhcnRsb2FkZXIgcGN4aHJsb2FkZXIgc2IxNl9jc3Agc2VxIHNzY2FwZV9jdGwgXAorKwkgIHVzNDI4Y29udHJvbCB1c3gyeWxvYWRlciB2eGxvYWRlciBcCisrCSAgaHdtaXh2b2x1bWUgaGRhLXZlcmIgaGRhamFja3NlbnNldGVzdAorIAorIGFsbDoKKyAJQGZvciBpIGluICQoU1VCRElSUyk7IGRvIFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzXzEuMC4yOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzXzEuMC4yOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGYzOTZlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHNfMS4wLjI5LmJiCkBAIC0wLDAgKzEsNDIgQEAKK1NVTU1BUlkgPSAiQWR2YW5jZWQgdG9vbHMgZm9yIGNlcnRhaW4gQUxTQSBzb3VuZCBjYXJkIGRyaXZlcnMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmFsc2EtcHJvamVjdC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVndHJhY2suYWxzYS1wcm9qZWN0Lm9yZy9hbHNhLWJ1Zy9sb2dpbl9wYWdlLnBocCIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIrIgorREVQRU5EUyA9ICJhbHNhLWxpYiBuY3Vyc2VzIGdsaWItMi4wIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9oZHNwbG9hZGVyL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xkMTBrMS9DT1BZSU5HLkxJQjttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmFsc2EtcHJvamVjdC5vcmcvcHViL3Rvb2xzLyR7QlB9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vYXV0b3Rvb2xzLnBhdGNoIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnJywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZTovL21ha2VmaWxlX25vX2d0ay5wYXRjaCcsIGQpfSBcCisgICAgICAgICAgIGZpbGU6Ly9naXRjb21waWxlX2hkYWphY2tzZW5zZXRlc3QgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1hczEwazEtTWFrZS1vdXRwdXRfdHJhbV9saW5lLXN0YXRpYy1pbmxpbmUucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImYzMzlhM2NkMjRmNzQ4YzlkMDA3YmRmZjBlOTg3NzViIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk0YWJmMGFiNWE3M2YwNzEwYzcwZDRmYjNkYzEwMDNhZjViYWUyZDJlZDcyMWQ1OWQyNDViNDFhZDBmMmZiZDEiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwa2djb25maWcKKworQ0xFQU5CUk9LRU4gPSAiMSIKKworRVhUUkFfT0VNQUtFICs9ICJHSVRDT01QSUxFX0FSR1M9Jy0taG9zdD0ke0hPU1RfU1lTfSAtLWJ1aWxkPSR7QlVJTERfU1lTfSAtLXRhcmdldD0ke1RBUkdFVF9TWVN9IC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9IT1NUfSAtLXByZWZpeD0ke3ByZWZpeH0nIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnZ3RrKycsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW2d0aytdID0gIiwsZ3RrKyBndGsrMywiCisKKyMgY29uZmlndXJlLmFjLy5pbiBkb2Vzbid0IGV4aXN0IHNvIGZvcmNlIGNvcHkKK0FVVE9UT09MU19DT1BZQUNMT0NBTCA9ICIxIgorCitkb19jb21waWxlX3ByZXBlbmQgKCkgeworICAgICNBdXRvbWFrZSBkaXIgaXMgbm90IGNvcnJlY3RseSBkZXRlY3RlZCBpbiBjcm9zcyBjb21waWxhdGlvbiBjYXNlCisgICAgZXhwb3J0IEFVVE9NQUtFX0RJUj0iJChhdXRvbWFrZSAtLXByaW50LWxpYmRpcikiCisgICAgZXhwb3J0IEFDTE9DQUxfRkxBR1M9Ii0tc3lzdGVtLWFjZGlyPSR7QUNMT0NBTERJUn0vIgorCisgICAgY3AgJHtXT1JLRElSfS9naXRjb21waWxlX2hkYWphY2tzZW5zZXRlc3QgJHtTfS9oZGFqYWNrc2Vuc2V0ZXN0L2dpdGNvbXBpbGUKK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vbGQxMGsxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMtc2NyaXB0c18xLjAuMjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy1zY3JpcHRzXzEuMC4yOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOThmOWI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMtc2NyaXB0c18xLjAuMjkuYmIKQEAgLTAsMCArMSwyMSBAQAorcmVxdWlyZSBhbHNhLXV0aWxzXyR7UFZ9LmJiCisKK1NVTU1BUlkgPSAiU2hlbGwgc2NyaXB0cyB0aGF0IHNob3cgaGVscCBpbmZvIGFuZCBjcmVhdGUgQUxTQSBjb25maWd1cmF0aW9uIGZpbGVzIgorUFJPVklERVMgPSAiYWxzYS11dGlscy1hbHNhY29uZiIKKworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vYWxzYS11dGlsczoiCisKK1BBQ0tBR0VTID0gIiR7UE59IgorUkRFUEVORFNfJHtQTn0gKz0gImJhc2giCisKK0ZJTEVTXyR7UE59ID0gIiR7c2JpbmRpcn0vYWxzYWNvbmYgXAorICAgICAgICAgICAgICAgJHtzYmluZGlyfS9hbHNhLWluZm8uc2ggXAorICAgICAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfS9hbHNhLXV0aWxzLSR7UFZ9IgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtCfS9hbHNhY29uZi9hbHNhY29uZiAke0R9JHtzYmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9hbHNhLWluZm8vYWxzYS1pbmZvLnNoICR7RH0ke3NiaW5kaXJ9LworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMvMDAwMS1hbHNhY3RsLWRvbi10LWxldC1zeXN0ZW1kLXVuaXQtcmVzdG9yZS10aGUtdm9sdW1lLXdoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMvMDAwMS1hbHNhY3RsLWRvbi10LWxldC1zeXN0ZW1kLXVuaXQtcmVzdG9yZS10aGUtdm9sdW1lLXdoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5OWRkNTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy8wMDAxLWFsc2FjdGwtZG9uLXQtbGV0LXN5c3RlbWQtdW5pdC1yZXN0b3JlLXRoZS12b2x1bWUtd2gucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorRnJvbSA0M2E1NmZhMzZhMTJmMDljY2Q3OGIzY2Y1ZTZhZTE5N2ZjYWI1MDFmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK0RhdGU6IEZyaSwgMjkgQXVnIDIwMTQgMTg6NTg6NTYgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gYWxzYWN0bDogZG9uJ3QgbGV0IHN5c3RlbWQgdW5pdCByZXN0b3JlIHRoZSB2b2x1bWUgd2hlbgorIGFzb3VuZC5zdGF0ZSBpcyBtaXNzaW5nCisKK1RoaXMgYXZvaWRzIGFuIGVycm9yIG9uIGJvb3R1cAorCitGaWxlZCBhcyBodHRwczovL2J1Z3RyYWNrLmFsc2EtcHJvamVjdC5vcmcvYWxzYS1idWcvdmlldy5waHA/aWQ9NTQ1OQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK1NpZ25lZC1vZmYtYnk6IENyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+CistLS0KKyBhbHNhY3RsL01ha2VmaWxlLmFtICAgICAgICAgICAgIHwgNyArKysrLS0tCisgYWxzYWN0bC9hbHNhLXJlc3RvcmUuc2VydmljZS5pbiB8IDEgKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYWxzYWN0bC9NYWtlZmlsZS5hbSBiL2Fsc2FjdGwvTWFrZWZpbGUuYW0KK2luZGV4IDQ3ZjA2ZTkuLmI3MjhjMDYgMTAwNjQ0CistLS0gYS9hbHNhY3RsL01ha2VmaWxlLmFtCisrKysgYi9hbHNhY3RsL01ha2VmaWxlLmFtCitAQCAtNDMsOSArNDMsMTAgQEAgaW5zdGFsbC1kYXRhLWhvb2s6CisgZW5kaWYKKyAKKyBlZGl0ID0gXAorLQkkKFNFRCkgLXIgLWUgJ3MsQHNiaW5kaXJcQCwkKHNiaW5kaXIpLGcnIFwKKy0JCSAgLWUgJ3MsQG15ZGF0YWRpclxALCQobXlkYXRhZGlyKSxnJyBcCistCQkgIC1lICdzLEBkYWVtb25zd2l0Y2hcQCwkKEFMU0FDVExfREFFTU9OU1dJVENIKSxnJyBcCisrCSQoU0VEKSAtZSAncyxAbG9jYWxzdGF0ZWRpclxALCQobG9jYWxzdGF0ZWRpciksZycgXAorKwkgICAgICAgLWUgJ3MsQHNiaW5kaXJcQCwkKHNiaW5kaXIpLGcnIFwKKysJICAgICAgIC1lICdzLEBteWRhdGFkaXJcQCwkKG15ZGF0YWRpciksZycgXAorKwkgICAgICAgLWUgJ3MsQGRhZW1vbnN3aXRjaFxALCQoQUxTQUNUTF9EQUVNT05TV0lUQ0gpLGcnIFwKKyAJCQkJCQkJPCAkPCA+ICRAIHx8IHJtICRACisgCisgYWxzYS1zdGF0ZS5zZXJ2aWNlOiBhbHNhLXN0YXRlLnNlcnZpY2UuaW4KK2RpZmYgLS1naXQgYS9hbHNhY3RsL2Fsc2EtcmVzdG9yZS5zZXJ2aWNlLmluIGIvYWxzYWN0bC9hbHNhLXJlc3RvcmUuc2VydmljZS5pbgoraW5kZXggMjQ1YTQzOS4uYjAxNzg1NCAxMDA2NDQKKy0tLSBhL2Fsc2FjdGwvYWxzYS1yZXN0b3JlLnNlcnZpY2UuaW4KKysrKyBiL2Fsc2FjdGwvYWxzYS1yZXN0b3JlLnNlcnZpY2UuaW4KK0BAIC0xMCw2ICsxMCw3IEBAIERlZmF1bHREZXBlbmRlbmNpZXM9bm8KKyBBZnRlcj1hbHNhLXN0YXRlLnNlcnZpY2UKKyBCZWZvcmU9c2h1dGRvd24udGFyZ2V0CisgQ29uZmxpY3RzPXNodXRkb3duLnRhcmdldAorK0NvbmRpdGlvblBhdGhFeGlzdHM9QGxvY2Fsc3RhdGVkaXJAL2xpYi9hbHNhL2Fzb3VuZC5zdGF0ZQorIAorIFtTZXJ2aWNlXQorIFR5cGU9b25lc2hvdAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy9hbHNhLXV0aWxzLWFwbGF5LWludGVycnVwdC1zaWduYWwtaGFuZGxpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy9hbHNhLXV0aWxzLWFwbGF5LWludGVycnVwdC1zaWduYWwtaGFuZGxpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRmMDA0YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzL2Fsc2EtdXRpbHMtYXBsYXktaW50ZXJydXB0LXNpZ25hbC1oYW5kbGluZy5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworYXBsYXkvYXJlY29yZCAoYWxzYS11dGlscyB2MS4wLjI4KSBjYW5ub3QgaW50ZXJydXB0IHN0cmVhbWluZwordmlhIENUUkwtQy4gRml4ZWQgdGhlIGlzc3VlIGJ5IHJldmVydGluZyBidWdneSBwYXRjaGVzIGFuZAorcHJvcGVybHkgaGFuZGxpbmcgJ2luX2Fib3J0aW5nJyBmbGFnIGluIGFwcHJvcHJpYXRlIGZ1bmN0aW9ucy4KKworU2lnbmVkLW9mZi1ieTogQW5hbnQgQWdyYXdhbCA8QW5hbnRfQWdyYXdhbEBtZW50b3IuY29tPgorU2lnbmVkLW9mZi1ieTogTWlraGFpbCBEdXJuZXYgPG1pa2hhaWxfZHVybmV2QG1lbnRvci5jb20+CisKKy0tLSBhL2FwbGF5L2FwbGF5LmMJMjAxNC0wNS0xOSAxNjoyNToxNC4wMDAwMDAwMDAgKzA1MzAKKysrKyBiL2FwbGF5L2FwbGF5LmMJMjAxNC0wNS0yMCAxNToxNzoxNC4zNjQ4MjMwMDcgKzA1MzAKK0BAIC0zOTIsMTQgKzM5MiwyMiBAQAorIAkJcHV0Y2hhcignXG4nKTsKKyAJaWYgKCFxdWlldF9tb2RlKQorIAkJZnByaW50ZihzdGRlcnIsIF8oIkFib3J0ZWQgYnkgc2lnbmFsICVzLi4uXG4iKSwgc3Ryc2lnbmFsKHNpZykpOworLQlpZiAoaGFuZGxlKQorKwlpZiAoc3RyZWFtID09IFNORF9QQ01fU1RSRUFNX0NBUFRVUkUpIHsKKysJCWlmIChmbXRfcmVjX3RhYmxlW2ZpbGVfdHlwZV0uZW5kKSB7CisrCQkJZm10X3JlY190YWJsZVtmaWxlX3R5cGVdLmVuZChmZCk7CisrCQkJZmQgPSAtMTsKKysJCX0KKysJCXN0cmVhbSA9IC0xOworKwl9CisrCWlmIChmZCA+IDEpIHsKKysJCWNsb3NlKGZkKTsKKysJCWZkID0gLTE7CisrCX0KKysJaWYgKGhhbmRsZSAmJiBzaWcgIT0gU0lHQUJSVCkgeworIAkJc25kX3BjbV9hYm9ydChoYW5kbGUpOworLQlpZiAoc2lnID09IFNJR0FCUlQpIHsKKy0JCS8qIGRvIG5vdCBjYWxsIHNuZF9wY21fY2xvc2UoKSBhbmQgYWJvcnQgaW1tZWRpYXRlbHkgKi8KKyAJCWhhbmRsZSA9IE5VTEw7CistCQlwcmdfZXhpdChFWElUX0ZBSUxVUkUpOworIAl9CistCXNpZ25hbChzaWcsIHNpZ25hbF9oYW5kbGVyKTsKKysJcHJnX2V4aXQoRVhJVF9GQUlMVVJFKTsKKyB9CisgCisgLyogY2FsbCBvbiBTSUdVU1IxIHNpZ25hbC4gKi8KK0BAIC0yMDk2LDcgKzIxMDQsNyBAQAorIAlzc2l6ZV90IHJlc3VsdCA9IGNvdW50LCByOworIAlzaXplX3Qgc2l6ZTsKKyAKKy0Jd2hpbGUgKGNvdW50ID4gMCkgeworKwl3aGlsZSAoY291bnQgPiAwICYmICFpbl9hYm9ydGluZykgeworIAkJc2l6ZSA9IGNvdW50OworIAkJaWYgKHNpemUgPiBjaHVua19ieXRlcyAtIGJ1ZmZlcl9wb3MpCisgCQkJc2l6ZSA9IGNodW5rX2J5dGVzIC0gYnVmZmVyX3BvczsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzL2Fzc3VtZS1zdG9yaW5nLWlzLXN1Y2Nlc3MtaWYtbm90LXNvdW5kLWNhcmQtZGV2aWNlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMvYXNzdW1lLXN0b3JpbmctaXMtc3VjY2Vzcy1pZi1ub3Qtc291bmQtY2FyZC1kZXZpY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY3MjgzZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzL2Fzc3VtZS1zdG9yaW5nLWlzLXN1Y2Nlc3MtaWYtbm90LXNvdW5kLWNhcmQtZGV2aWNlLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK1tQQVRDSF0gYXNzdW1lIHN0b3JpbmcgaXMgc3VjY2VzcyBpZiBub3Qgc291bmQgY2FyZCBkZXZpY2UKKworVXBzdHJlYW0tU3RhdHVlOiBQZW5kaW5nCisKK1N5c3RlbWQgd2lsbCByZXBvcnQgZmFpbHVyZSB3aGVuIHJ1biBhbHNhLSosIGlmIHRoZSBtYWNoaW5lIGhhcyBub3QgdGhlCitzb3VuZCBjYXJkLiBUbyB2b2lkIHRoaXMgYW5ub3llZCBtZXNzYWdlLCBhbHNhLXJlc3RvcmUvYWxzYS1zdGF0ZSBpZ25vcmUKK2FsbCB0aGUgZXhpdCBjb2RlcyBieSBwcmVmaXhpbmcgIi0iIGluIEV4ZWNTdGFydCwgbGlrZToKKworICAgYWxzYS11dGlscy0xLjAuMjkkIGdyZXAgIj0tIiAuLyAtcnxncmVwIHNlcnZpY2UuaW4KKyAgIC4vYWxzYWN0bC9hbHNhLXJlc3RvcmUuc2VydmljZS5pbjpFeGVjU3RhcnQ9LUBzYmluZGlyQC9hbHNhY3RsIHJlc3RvcmUKKyAgIC4vYWxzYWN0bC9hbHNhLXN0YXRlLnNlcnZpY2UuaW46RXhlY1N0YXJ0PS1Ac2JpbmRpckAvYWxzYWN0bCAtcyAtbiAxOSAtYyByZGFlbW9uCisgICAuL2Fsc2FjdGwvYWxzYS1zdGF0ZS5zZXJ2aWNlLmluOkV4ZWNTdG9wPS1Ac2JpbmRpckAvYWxzYWN0bCAtcyBraWxsIHNhdmVfYW5kX3F1aXQKKyAgIGxzYS11dGlscy0xLjAuMjkkCisKK0J1dCBhbHNhLXN0b3JlLnNlcnZpY2UuaW4gaXMgbWlzc2luZywgYW5kIGJldHRlciBzb2x1dGlvbiBpcyB0byBpZ25vcmUKK3RoZSBleGl0IGNvZGUgMTkgd2hpY2ggbWVhbnMgbm90IHNvdW5kIGNhcmQgZGV2aWNlLCBub3QgYWxsIGV4aXQgY29kZQorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBhbHNhY3RsL2Fsc2Etc3RvcmUuc2VydmljZS5pbiB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvYWxzYWN0bC9hbHNhLXN0b3JlLnNlcnZpY2UuaW4gYi9hbHNhY3RsL2Fsc2Etc3RvcmUuc2VydmljZS5pbgoraW5kZXggZjFhNTZiYi4uNjhjYTUyOSAxMDA2NDQKKy0tLSBhL2Fsc2FjdGwvYWxzYS1zdG9yZS5zZXJ2aWNlLmluCisrKysgYi9hbHNhY3RsL2Fsc2Etc3RvcmUuc2VydmljZS5pbgorQEAgLTEzLDMgKzEzLDQgQEAgQmVmb3JlPXNodXRkb3duLnRhcmdldAorIFR5cGU9b25lc2hvdAorIEV4ZWNTdGFydD1Ac2JpbmRpckAvYWxzYWN0bCBzdG9yZQorIFN0YW5kYXJkT3V0cHV0PXN5c2xvZworK1N1Y2Nlc3NFeGl0U3RhdHVzPTAgMTkKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHNfMS4wLjI5LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHNfMS4wLjI5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZmU0YjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlsc18xLjAuMjkuYmIKQEAgLTAsMCArMSw5NyBAQAorU1VNTUFSWSA9ICJBTFNBIHNvdW5kIHV0aWxpdGllcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuYWxzYS1wcm9qZWN0Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd0cmFjay5hbHNhLXByb2plY3Qub3JnL2Fsc2EtYnVnL2xvZ2luX3BhZ2UucGhwIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hbHNhY3RsL3V0aWxzLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9ZmU5NTI2YjA1NWUyNDZiNTU1ODgwOWE1YWUyNWMwYjkiCitERVBFTkRTID0gImFsc2EtbGliIG5jdXJzZXMgbGlic2FtcGxlcmF0ZTAiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ1ZGV2IgorUEFDS0FHRUNPTkZJR1t1ZGV2XSA9ICItLXdpdGgtdWRldi1ydWxlcy1kaXI9YHBrZy1jb25maWcgLS12YXJpYWJsZT11ZGV2ZGlyIHVkZXZgL3J1bGVzLmQsLHVkZXYiCitQQUNLQUdFQ09ORklHW3htbHRvXSA9ICItLWVuYWJsZS14bWx0bywgLS1kaXNhYmxlLXhtbHRvLCB4bWx0by1uYXRpdmUgZG9jYm9vay14bWwtZHRkNC1uYXRpdmUgZG9jYm9vay14c2wtc3R5bGVzaGVldHMtbmF0aXZlIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5hbHNhLXByb2plY3Qub3JnL3B1Yi91dGlscy9hbHNhLXV0aWxzLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1hbHNhY3RsLWRvbi10LWxldC1zeXN0ZW1kLXVuaXQtcmVzdG9yZS10aGUtdm9sdW1lLXdoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Fsc2EtdXRpbHMtYXBsYXktaW50ZXJydXB0LXNpZ25hbC1oYW5kbGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hc3N1bWUtc3RvcmluZy1pcy1zdWNjZXNzLWlmLW5vdC1zb3VuZC1jYXJkLWRldmljZS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNmIyODliZjg3NGM0YzlhNjNmNGIzOTczMDkzZGQ0MDQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTE2MDA1OGYzZTE0NDgzY2VkNWRlOTE5ZGQ0NzNmOTM5MzIwNTk0NTQ1MzBhOWI3ZWY5N2RjYWJkNjgzM2U5YiIKKworIyBsYXp5IGhhY2suIG5lZWRzIHByb3BlciBmaXhpbmcgaW4gZ2V0dGV4dC5tNCwgc2VlCisjIGh0dHA6Ly9idWdzLm9wZW5lbWJlZGRlZC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDgKKyMgcGxlYXNlIGNsb3NlIGJ1ZyBhbmQgcmVtb3ZlIHRoaXMgY29tbWVudCB3aGVuIHByb3Blcmx5IGZpeGVkCisjCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLWRpc2FibGUtbmxzIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZworCisjIFRoaXMgYXJlIGFsbCBwYWNrYWdlcyB0aGF0IHdlIG5lZWQgdG8gbWFrZS4gQWxzbywgdGhlIG5vdyBlbXB0eSBhbHNhLXV0aWxzCisjIGlwayBkZXBlbmRzIG9uIHRoZW0uCisKK0FMU0FfVVRJTFNfUEtHUyA9ICJcCisgICAgICAgICAgICAgYWxzYS11dGlscy1hbHNhbWl4ZXIgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtbWlkaSBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1hcGxheSBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1hbWl4ZXIgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYWNvbm5lY3QgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtaWVjc2V0IFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLXNwZWFrZXJ0ZXN0IFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFzZXFuZXQgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYXNlcWR1bXAgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYWxzYWN0bCBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1hbHNhbG9vcCBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1hbHNhdWNtIFwKKyAgICAgICAgICAgICIKKworUEFDS0FHRVMgKz0gIiR7QUxTQV9VVElMU19QS0dTfSIKK1JERVBFTkRTXyR7UE59ICs9ICIke0FMU0FfVVRJTFNfUEtHU30iCisKK0ZJTEVTXyR7UE59ID0gIiIKK0ZJTEVTX2Fsc2EtdXRpbHMtYXBsYXkgICAgICAgPSAiJHtiaW5kaXJ9L2FwbGF5ICR7YmluZGlyfS9hcmVjb3JkIgorRklMRVNfYWxzYS11dGlscy1hbWl4ZXIgICAgICA9ICIke2JpbmRpcn0vYW1peGVyIgorRklMRVNfYWxzYS11dGlscy1hbHNhbWl4ZXIgICA9ICIke2JpbmRpcn0vYWxzYW1peGVyIgorRklMRVNfYWxzYS11dGlscy1zcGVha2VydGVzdCA9ICIke2JpbmRpcn0vc3BlYWtlci10ZXN0ICR7ZGF0YWRpcn0vc291bmRzL2Fsc2EvICR7ZGF0YWRpcn0vYWxzYS9zcGVha2VyLXRlc3QvIgorRklMRVNfYWxzYS11dGlscy1taWRpICAgICAgICA9ICIke2JpbmRpcn0vYXBsYXltaWRpICR7YmluZGlyfS9hcmVjb3JkbWlkaSAke2JpbmRpcn0vYW1pZGkiCitGSUxFU19hbHNhLXV0aWxzLWFjb25uZWN0ICAgID0gIiR7YmluZGlyfS9hY29ubmVjdCIKK0ZJTEVTX2Fsc2EtdXRpbHMtYXNlcW5ldCAgICAgPSAiJHtiaW5kaXJ9L2FzZXFuZXQiCitGSUxFU19hbHNhLXV0aWxzLWllY3NldCAgICAgID0gIiR7YmluZGlyfS9pZWNzZXQiCitGSUxFU19hbHNhLXV0aWxzLWFsc2FjdGwgICAgID0gIiR7c2JpbmRpcn0vYWxzYWN0bCAqL3VkZXYvcnVsZXMuZCAqLyovdWRldi9ydWxlcy5kICR7c3lzdGVtZF91bml0ZGlyfSAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9hbHNhICR7ZGF0YWRpcn0vYWxzYS9pbml0LyIKK0ZJTEVTX2Fsc2EtdXRpbHMtYXNlcWR1bXAgICAgPSAiJHtiaW5kaXJ9L2FzZXFkdW1wIgorRklMRVNfYWxzYS11dGlscy1hbHNhbG9vcCAgICA9ICIke2JpbmRpcn0vYWxzYWxvb3AiCitGSUxFU19hbHNhLXV0aWxzLWFsc2F1Y20gICAgID0gIiR7YmluZGlyfS9hbHNhdWNtIgorCisKK1NVTU1BUllfYWxzYS11dGlscy1hcGxheSAgICAgICAgPSAiUGxheSAoYW5kIHJlY29yZCkgc291bmQgZmlsZXMgdXNpbmcgQUxTQSIKK1NVTU1BUllfYWxzYS11dGlscy1hbWl4ZXIgICAgICAgPSAiQ29tbWFuZC1saW5lIGNvbnRyb2wgZm9yIEFMU0EgbWl4ZXIgYW5kIHNldHRpbmdzIgorU1VNTUFSWV9hbHNhLXV0aWxzLWFsc2FtaXhlciAgICA9ICJuY3Vyc2VzLWJhc2VkIGNvbnRyb2wgZm9yIEFMU0EgbWl4ZXIgYW5kIHNldHRpbmdzIgorU1VNTUFSWV9hbHNhLXV0aWxzLXNwZWFrZXJ0ZXN0ICA9ICJBTFNBIHN1cnJvdW5kIHNwZWFrZXIgdGVzdCB1dGlsaXR5IgorU1VNTUFSWV9hbHNhLXV0aWxzLW1pZGkgICAgICAgICA9ICJNaXNjZWxsYW5lb3VzIE1JREkgdXRpbGl0aWVzIGZvciBBTFNBIgorU1VNTUFSWV9hbHNhLXV0aWxzLWFjb25uZWN0ICAgICA9ICJBTFNBIHNlcXVlbmNlciBjb25uZWN0aW9uIG1hbmFnZXIiCitTVU1NQVJZX2Fsc2EtdXRpbHMtYXNlcW5ldCAgICAgID0gIk5ldHdvcmsgY2xpZW50L3NlcnZlciBmb3IgQUxTQSBzZXF1ZW5jZXIiCitTVU1NQVJZX2Fsc2EtdXRpbHMtaWVjc2V0ICAgICAgID0gIkFMU0EgdXRpbGl0eSBmb3Igc2V0dGluZy9zaG93aW5nIElFQzk1OCAoUy9QRElGKSBzdGF0dXMgYml0cyIKK1NVTU1BUllfYWxzYS11dGlscy1hbHNhY3RsICAgICAgPSAiU2F2ZXMvcmVzdG9yZXMgQUxTQS1zZXR0aW5ncyBpbiAvZXRjL2Fzb3VuZC5zdGF0ZSIKK1NVTU1BUllfYWxzYS11dGlscy1hc2VxZHVtcCAgICAgPSAiU2hvd3MgdGhlIGV2ZW50cyByZWNlaXZlZCBhdCBhbiBBTFNBIHNlcXVlbmNlciBwb3J0IgorU1VNTUFSWV9hbHNhLXV0aWxzLWFsc2Fsb29wICAgICA9ICJBTFNBIFBDTSBsb29wYmFjayB1dGlsaXR5IgorU1VNTUFSWV9hbHNhLXV0aWxzLWFsc2F1Y20gICAgICA9ICJBTFNBIFVzZSBDYXNlIE1hbmFnZXIiCisKK1JSRUNPTU1FTkRTX2Fsc2EtdXRpbHMtYWxzYWN0bCA9ICJhbHNhLXN0YXRlcyIKKworQUxMT1dfRU1QVFlfYWxzYS11dGlscyA9ICIxIgorCitkb19pbnN0YWxsKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwkjIFdlIGRvbid0IHNoaXAgdGhpcyBoZXJlIGJlY2F1c2UgaXQgcmVxdWlyZXMgYSBkZXBlbmRlbmN5IG9uIGJhc2guCisJIyBTZWUgYWxzYS11dGlscy1zY3JpcHRzXyR7UFZ9LmJiCisJcm0gJHtEfSR7c2JpbmRpcn0vYWxzYWNvbmYKKwlybSAke0R9JHtzYmluZGlyfS9hbHNhLWluZm8uc2gKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3VkZXYnLCAnZmFsc2UnLCAndHJ1ZScsIGQpfTsgdGhlbgorCSAgICMgVGhpcyBpcyB3aGVyZSBhbHNhLXV0aWxzIHdpbGwgaW5zdGFsbCBpdHMgcnVsZXMgaWYgd2UgZG9uJ3QgdGVsbCBpdCBhbnl0aGluZyBlbHNlLgorCSAgIHJtIC1yZiAke0R9L2xpYi91ZGV2CisJICAgcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJHtEfS9saWIKKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mbGFjL2ZsYWNfMS4zLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2ZsYWMvZmxhY18xLjMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjUyNzFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mbGFjL2ZsYWNfMS4zLjEuYmIKQEAgLTAsMCArMSw0MiBAQAorU1VNTUFSWSA9ICJGcmVlIExvc3NsZXNzIEF1ZGlvIENvZGVjIgorREVTQ1JJUFRJT04gPSAiRkxBQyBzdGFuZHMgZm9yIEZyZWUgTG9zc2xlc3MgQXVkaW8gQ29kZWMsIGEgbG9zc2xlc3MgYXVkaW8gY29tcHJlc3Npb24gZm9ybWF0LiIKK0hPTUVQQUdFID0gImh0dHBzOi8veGlwaC5vcmcvZmxhYy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9mbGFjL2J1Z3MvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHRkRMLTEuMiAmIEdQTHYyKyAmIExHUEx2Mi4xKyAmIEJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuRkRMO21kNT1hZDE0MTllY2M1NmUwNjBlY2NmODE4NGE4N2M0Mjg1ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvTWFrZWZpbGUuYW07YmVnaW5saW5lPTE7ZW5kbGluZT0xNzttZDU9MGE4NTNiODFkOWQ0M2Q4YWFkM2I1M2IwNWNmY2MzN2UgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5HUEw7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9mbGFjL21haW4uYztiZWdpbmxpbmU9MTtlbmRsaW5lPTE4O21kNT1kMDNhNzY2NTU4ZDIzM2Y5Y2MzYWM1ZGZhZmQ0OWRlYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxHUEw7bWQ1PWZiYzA5MzkwMTg1N2ZjZDExOGYwNjVmOTAwOTgyYzI0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9wbHVnaW5fY29tbW9uL2FsbC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MTg7bWQ1PTdjOGEzYjllMWU2NmVkMGFiYTc2NWJjNmYzNWRhODVkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuWGlwaDttZDU9YTJjNGI3MWMwMTk4NjgyMzc2ZDQ4M2ViNWJjYzkxOTcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9GTEFDL2FsbC5oO2JlZ2lubGluZT02NTtlbmRsaW5lPTcwO21kNT02NDQ3NGYyYjIyZTllNzdiMjhkOGI4YjI1Yzk4M2E0OCIKK0RFUEVORFMgPSAibGlib2dnIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueGlwaC5vcmcvcmVsZWFzZXMvZmxhYy8ke0JQfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiOTkyMmM5YTAzNzhjODhkM2U5MDFiMjM0Zjg1MjY5OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0NzczYzAwOTlkYmE3NjdkOTYzZmQ5MjE0MzI2M2JlMzM4YzQ4NzAyMTcyZTg3NTRiOWJjNTEwM2VmZTFjNTZjIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtb2dndGVzdCBcCisgICAgICAgICAgICAgICAgLS13aXRoLW9nZy1saWJyYXJpZXM9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgICAgICAgIC0td2l0aC1vZ2ctaW5jbHVkZXM9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS14bW1zLXBsdWdpbiBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LWxpYmljb252LXByZWZpeCBcCisgICAgICAgICAgICAgICAgYWNfY3ZfcHJvZ19OQVNNPSIiIFwKKyAgICAgICAgICAgICAgICAiCisKK0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYWx0aXZlYyIsICIgLS1lbmFibGUtYWx0aXZlYyIsICIgLS1kaXNhYmxlLWFsdGl2ZWMiLCBkKX0iCitFWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImNvcmUyIiwgIiAtLWVuYWJsZS1zc2UiLCAiIiwgZCl9IgorRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3JlaTciLCAiIC0tZW5hYmxlLXNzZSIsICIiLCBkKX0iCisKK1BBQ0tBR0VTICs9ICJsaWJmbGFjIGxpYmZsYWMrKyBsaWJvZ2dmbGFjIGxpYm9nZ2ZsYWMrKyIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS8qIgorRklMRVNfbGliZmxhYyA9ICIke2xpYmRpcn0vbGliRkxBQy5zby4qIgorRklMRVNfbGliZmxhYysrID0gIiR7bGliZGlyfS9saWJGTEFDKysuc28uKiIKK0ZJTEVTX2xpYm9nZ2ZsYWMgPSAiJHtsaWJkaXJ9L2xpYk9nZ0ZMQUMuc28uKiIKK0ZJTEVTX2xpYm9nZ2ZsYWMrKyA9ICIke2xpYmRpcn0vbGliT2dnRkxBQysrLnNvLioiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvQWRkLWVycm9yLXNpZ25hbC1lbWlzc2lvbi1mb3ItbWlzc2luZy1wbHVnaW5zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9BZGQtZXJyb3Itc2lnbmFsLWVtaXNzaW9uLWZvci1taXNzaW5nLXBsdWdpbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEyZDQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvQWRkLWVycm9yLXNpZ25hbC1lbWlzc2lvbi1mb3ItbWlzc2luZy1wbHVnaW5zLnBhdGNoCkBAIC0wLDAgKzEsMjUyIEBACitGcm9tIGQ2NGM3ZWRiNjZmNGE2NGZmNDljNDMwNmNmNzdmZDI2OWI3MDc5YWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogTW9uLCAxNiBNYXIgMjAxNSAxMzo0NTozMCArMDIwMAorU3ViamVjdDogW1BBVENIXSBBZGQgZXJyb3Igc2lnbmFsIGVtaXNzaW9uIGZvciBtaXNzaW5nIHBsdWdpbnMKKworQWRkIGEgbWlzc2luZyBwbHVnaW5zIGVycm9yIHNpZ25hbCB0byBnc3QtcGxheWVyLiBOb3RlIHRoYXQgdGhpcyBlcnJvcgorZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGUgcGxheWJhY2sgaGFzIGNvbXBsZXRlbHkgZmFpbGVkLCBidXQgaW4KK3ByYWN0aWNlIHRoZSB1c2VyIGV4cGVyaWVuY2Ugd2lsbCBiZSBiYWQgKHRoaW5rLCBlLmcuIG9mIGEgbXA0IGZpbGUKK3doZXJlIEguMjY0IGNvZGVjIGlzIG1pc3Npbmc6IEFBQyBwbGF5YmFjayBzdGlsbCB3b3Jrcy4uLikuCisKK1VzZSB0aGUgc2lnbmFsIGluIGd0ay1wbGF5IHRvIHNob3cgYSBpbmZvYmFyIGlmIHBsdWdpbnMgYXJlIG1pc3NpbmcuCisKK1N1Ym1pdHRlZCB1cHN0cmVhbSBhdCBodHRwczovL2dpdGh1Yi5jb20vc2Ryb2VnZS9nc3QtcGxheWVyL3B1bGwvMTEKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICB8ICAyICstCisgZ3RrL2d0ay1wbGF5LmMgICAgICAgICAgICAgfCA1NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCisgbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmMgfCAyMiArKysrKysrKysrKysrKysrKysrCisgbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmggfCAgMyArKy0KKyA0IGZpbGVzIGNoYW5nZWQsIDc4IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDkwYWI3NGMuLjZjZGI0ZWIgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTUzLDcgKzUzLDcgQEAgQUNfU1VCU1QoTFRfQUdFKQorIFBLR19QUk9HX1BLR19DT05GSUcKKyAKKyBQS0dfQ0hFQ0tfTU9EVUxFUyhHTElCLCBbZ2xpYi0yLjAgZ29iamVjdC0yLjBdKQorLVBLR19DSEVDS19NT0RVTEVTKEdTVFJFQU1FUiwgW2dzdHJlYW1lci0xLjAgPj0gMS40IGdzdHJlYW1lci12aWRlby0xLjAgPj0gMS40XSkKKytQS0dfQ0hFQ0tfTU9EVUxFUyhHU1RSRUFNRVIsIFtnc3RyZWFtZXItMS4wID49IDEuNCBnc3RyZWFtZXItdmlkZW8tMS4wID49IDEuNCBnc3RyZWFtZXItcGJ1dGlscy0xLjBdKQorIAorIEdMSUJfUFJFRklYPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1wcmVmaXggZ2xpYi0yLjBgIgorIEFDX1NVQlNUKEdMSUJfUFJFRklYKQorZGlmZiAtLWdpdCBhL2d0ay9ndGstcGxheS5jIGIvZ3RrL2d0ay1wbGF5LmMKK2luZGV4IGI5Mjc3M2IuLmUyYjYwNWEgMTAwNjQ0CistLS0gYS9ndGsvZ3RrLXBsYXkuYworKysrIGIvZ3RrL2d0ay1wbGF5LmMKK0BAIC0zMCw2ICszMCw4IEBAIHR5cGVkZWYgc3RydWN0CisgICBHdGtXaWRnZXQgKnByZXZfYnV0dG9uLCAqbmV4dF9idXR0b247CisgICBHdGtXaWRnZXQgKnNlZWtiYXI7CisgICBHdGtXaWRnZXQgKnZpZGVvX2FyZWE7CisrICBHdGtXaWRnZXQgKmluZm9fbGFiZWw7CisrICBHdGtXaWRnZXQgKmluZm9fYmFyOworICAgR3RrV2lkZ2V0ICp2b2x1bWVfYnV0dG9uOworICAgZ3Vsb25nIHNlZWtiYXJfdmFsdWVfY2hhbmdlZF9zaWduYWxfaWQ7CisgICBnYm9vbGVhbiBwbGF5aW5nOworQEAgLTE0MSw2ICsxNDMsMTMgQEAgcGxheV9wYXVzZV9jbGlja2VkX2NiIChHdGtCdXR0b24gKiBidXR0b24sIEd0a1BsYXkgKiBwbGF5KQorIH0KKyAKKyBzdGF0aWMgdm9pZAorK2NsZWFyX21pc3NpbmdfcGx1Z2lucyAoR3RrUGxheSAqIHBsYXkpCisreworKyAgZ3RrX2xhYmVsX3NldF90ZXh0IChHVEtfTEFCRUwgKHBsYXktPmluZm9fbGFiZWwpLCAiIik7CisrICBndGtfd2lkZ2V0X2hpZGUgKHBsYXktPmluZm9fYmFyKTsKKyt9CisrCisrc3RhdGljIHZvaWQKKyBza2lwX3ByZXZfY2xpY2tlZF9jYiAoR3RrQnV0dG9uICogYnV0dG9uLCBHdGtQbGF5ICogcGxheSkKKyB7CisgICBHTGlzdCAqcHJldjsKK0BAIC0xNTUsNiArMTY0LDcgQEAgc2tpcF9wcmV2X2NsaWNrZWRfY2IgKEd0a0J1dHRvbiAqIGJ1dHRvbiwgR3RrUGxheSAqIHBsYXkpCisgCisgICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUgKHBsYXktPm5leHRfYnV0dG9uLCBUUlVFKTsKKyAgIGdzdF9wbGF5ZXJfc2V0X3VyaSAocGxheS0+cGxheWVyLCBwcmV2LT5kYXRhKTsKKysgIGNsZWFyX21pc3NpbmdfcGx1Z2lucyAocGxheSk7CisgICBnc3RfcGxheWVyX3BsYXkgKHBsYXktPnBsYXllcik7CisgICBzZXRfdGl0bGUgKHBsYXksIHByZXYtPmRhdGEpOworICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlIChwbGF5LT5wcmV2X2J1dHRvbiwgZ19saXN0X3ByZXZpb3VzIChwcmV2KSAhPSBOVUxMKTsKK0BAIC0xNzUsNiArMTg1LDcgQEAgc2tpcF9uZXh0X2NsaWNrZWRfY2IgKEd0a0J1dHRvbiAqIGJ1dHRvbiwgR3RrUGxheSAqIHBsYXkpCisgCisgICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUgKHBsYXktPnByZXZfYnV0dG9uLCBUUlVFKTsKKyAgIGdzdF9wbGF5ZXJfc2V0X3VyaSAocGxheS0+cGxheWVyLCBuZXh0LT5kYXRhKTsKKysgIGNsZWFyX21pc3NpbmdfcGx1Z2lucyAocGxheSk7CisgICBnc3RfcGxheWVyX3BsYXkgKHBsYXktPnBsYXllcik7CisgICBzZXRfdGl0bGUgKHBsYXksIG5leHQtPmRhdGEpOworICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlIChwbGF5LT5uZXh0X2J1dHRvbiwgZ19saXN0X25leHQgKG5leHQpICE9IE5VTEwpOworQEAgLTE5MywxMCArMjA0LDE2IEBAIHZvbHVtZV9jaGFuZ2VkX2NiIChHdGtTY2FsZUJ1dHRvbiAqIGJ1dHRvbiwgZ2RvdWJsZSB2YWx1ZSwgR3RrUGxheSAqIHBsYXkpCisgICBnc3RfcGxheWVyX3NldF92b2x1bWUgKHBsYXktPnBsYXllciwgdmFsdWUpOworIH0KKyAKKyt2b2lkCisraW5mb19iYXJfcmVzcG9uc2VfY2IgKEd0a0luZm9CYXIgKiBiYXIsIGdpbnQgcmVzcG9uc2UsIEd0a1BsYXkgKiBwbGF5KQorK3sKKysgIGd0a193aWRnZXRfaGlkZSAoR1RLX1dJREdFVCAoYmFyKSk7CisrfQorKworIHN0YXRpYyB2b2lkCisgY3JlYXRlX3VpIChHdGtQbGF5ICogcGxheSkKKyB7CistICBHdGtXaWRnZXQgKmNvbnRyb2xzLCAqbWFpbl9oYm94LCAqbWFpbl92Ym94OworKyAgR3RrV2lkZ2V0ICpjb250cm9scywgKm1haW5faGJveCwgKm1haW5fdmJveCwgKmluZm9fYmFyLCAqY29udGVudF9hcmVhOworIAorICAgcGxheS0+d2luZG93ID0gZ3RrX3dpbmRvd19uZXcgKEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHBsYXktPndpbmRvdyksICJkZWxldGUtZXZlbnQiLAorQEAgLTIwOCw2ICsyMjUsMjAgQEAgY3JlYXRlX3VpIChHdGtQbGF5ICogcGxheSkKKyAgIGdfc2lnbmFsX2Nvbm5lY3QgKHBsYXktPnZpZGVvX2FyZWEsICJyZWFsaXplIiwKKyAgICAgICBHX0NBTExCQUNLICh2aWRlb19hcmVhX3JlYWxpemVfY2IpLCBwbGF5KTsKKyAKKysgIHBsYXktPmluZm9fYmFyID0gZ3RrX2luZm9fYmFyX25ldyAoKTsKKysgIGd0a19pbmZvX2Jhcl9zZXRfbWVzc2FnZV90eXBlIChHVEtfSU5GT19CQVIgKHBsYXktPmluZm9fYmFyKSwKKysgICAgICBHVEtfTUVTU0FHRV9XQVJOSU5HKTsKKysgIC8vZ3RrX2luZm9fYmFyX3NldF9zaG93X2Nsb3NlX2J1dHRvbiAoR1RLX0lORk9fQkFSIChwbGF5LT5pbmZvX2JhciksCisrICAvLyAgICBUUlVFKTsKKysgIGd0a193aWRnZXRfc2V0X25vX3Nob3dfYWxsIChwbGF5LT5pbmZvX2JhciwgVFJVRSk7CisrICBnX3NpZ25hbF9jb25uZWN0IChwbGF5LT5pbmZvX2JhciwgInJlc3BvbnNlIiwKKysgICAgICBHX0NBTExCQUNLIChpbmZvX2Jhcl9yZXNwb25zZV9jYiksIHBsYXkpOworKworKyAgY29udGVudF9hcmVhID0gZ3RrX2luZm9fYmFyX2dldF9jb250ZW50X2FyZWEgKEdUS19JTkZPX0JBUiAocGxheS0+aW5mb19iYXIpKTsKKysgIHBsYXktPmluZm9fbGFiZWwgPSBndGtfbGFiZWxfbmV3ICgiIik7CisrICBndGtfY29udGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAoY29udGVudF9hcmVhKSwgcGxheS0+aW5mb19sYWJlbCk7CisrICBndGtfd2lkZ2V0X3Nob3cgKHBsYXktPmluZm9fbGFiZWwpOworKworICAgLyogVW5pZmllZCBwbGF5L3BhdXNlIGJ1dHRvbiAqLworICAgcGxheS0+cGxheV9wYXVzZV9idXR0b24gPQorICAgICAgIGd0a19idXR0b25fbmV3X2Zyb21faWNvbl9uYW1lICgibWVkaWEtcGxheWJhY2stcGF1c2UiLAorQEAgLTI1OCw2ICsyODksNyBAQCBjcmVhdGVfdWkgKEd0a1BsYXkgKiBwbGF5KQorIAorICAgbWFpbl92Ym94ID0gZ3RrX2JveF9uZXcgKEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgMCk7CisgICBndGtfYm94X3BhY2tfc3RhcnQgKEdUS19CT1ggKG1haW5fdmJveCksIG1haW5faGJveCwgVFJVRSwgVFJVRSwgMCk7CisrICBndGtfYm94X3BhY2tfc3RhcnQgKEdUS19CT1ggKG1haW5fdmJveCksIHBsYXktPmluZm9fYmFyLCBGQUxTRSwgRkFMU0UsIDApOworICAgZ3RrX2JveF9wYWNrX3N0YXJ0IChHVEtfQk9YIChtYWluX3Zib3gpLCBjb250cm9scywgRkFMU0UsIEZBTFNFLCAwKTsKKyAgIGd0a19jb250YWluZXJfYWRkIChHVEtfQ09OVEFJTkVSIChwbGF5LT53aW5kb3cpLCBtYWluX3Zib3gpOworIAorQEAgLTMyMiw2ICszNTQsNyBAQCBlb3NfY2IgKEdzdFBsYXllciAqIHVudXNlZCwgR3RrUGxheSAqIHBsYXkpCisgICAgICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlIChwbGF5LT5uZXh0X2J1dHRvbiwgZ19saXN0X25leHQgKG5leHQpICE9IE5VTEwpOworIAorICAgICAgIGdzdF9wbGF5ZXJfc2V0X3VyaSAocGxheS0+cGxheWVyLCBuZXh0LT5kYXRhKTsKKysgICAgICBjbGVhcl9taXNzaW5nX3BsdWdpbnMgKHBsYXkpOworICAgICAgIGdzdF9wbGF5ZXJfcGxheSAocGxheS0+cGxheWVyKTsKKyAgICAgICBzZXRfdGl0bGUgKHBsYXksIG5leHQtPmRhdGEpOworICAgICB9IGVsc2UgeworQEAgLTMzMCw2ICszNjMsMjQgQEAgZW9zX2NiIChHc3RQbGF5ZXIgKiB1bnVzZWQsIEd0a1BsYXkgKiBwbGF5KQorICAgfQorIH0KKyAKKytzdGF0aWMgdm9pZAorK2Vycm9yX2NiIChHc3RQbGF5ZXIgKiBwbGF5ZXIsIEdFcnJvciAqIGVyciwgR3RrUGxheSAqIHBsYXkpCisreworKyAgY2hhciAqbWVzc2FnZTsKKysKKysgIGlmIChnX2Vycm9yX21hdGNoZXMgKGVyciwgZ3N0X3BsYXllcl9lcnJvcl9xdWFyayAoKSwKKysgICAgICBHU1RfUExBWUVSX0VSUk9SX01JU1NJTkdfUExVR0lOKSkgeworKyAgICAvLyBhZGQgbWVzc2FnZSB0byBlbmQgb2YgYW55IGV4aXN0aW5nIG1lc3NhZ2U6IHRoZXJlIG1heSBiZQorKyAgICAvLyBtdWx0aXBsZSBtaXNzaW5nIHBsdWdpbnMuCisrICAgIG1lc3NhZ2UgPSBnX3N0cmR1cF9wcmludGYgKCIlcyVzLiAiLAorKyAgICAgICAgZ3RrX2xhYmVsX2dldF90ZXh0IChHVEtfTEFCRUwgKHBsYXktPmluZm9fbGFiZWwpKSwgZXJyLT5tZXNzYWdlKTsKKysgICAgZ3RrX2xhYmVsX3NldF90ZXh0IChHVEtfTEFCRUwgKHBsYXktPmluZm9fbGFiZWwpLCBtZXNzYWdlKTsKKysgICAgZ19mcmVlIChtZXNzYWdlKTsKKysKKysgICAgZ3RrX3dpZGdldF9zaG93IChwbGF5LT5pbmZvX2Jhcik7CisrICB9CisrfQorKworIGludAorIG1haW4gKGdpbnQgYXJnYywgZ2NoYXIgKiogYXJndikKKyB7CitAQCAtNDIyLDYgKzQ3Myw3IEBAIG1haW4gKGdpbnQgYXJnYywgZ2NoYXIgKiogYXJndikKKyAgIGdfc2lnbmFsX2Nvbm5lY3QgKHBsYXkucGxheWVyLCAidmlkZW8tZGltZW5zaW9ucy1jaGFuZ2VkIiwKKyAgICAgICBHX0NBTExCQUNLICh2aWRlb19kaW1lbnNpb25zX2NoYW5nZWRfY2IpLCAmcGxheSk7CisgICBnX3NpZ25hbF9jb25uZWN0IChwbGF5LnBsYXllciwgImVuZC1vZi1zdHJlYW0iLCBHX0NBTExCQUNLIChlb3NfY2IpLCAmcGxheSk7CisrICBnX3NpZ25hbF9jb25uZWN0IChwbGF5LnBsYXllciwgImVycm9yIiwgR19DQUxMQkFDSyAoZXJyb3JfY2IpLCAmcGxheSk7CisgCisgICAvKiBXZSBoYXZlIGZpbGUocykgdGhhdCBuZWVkIHBsYXlpbmcuICovCisgICBzZXRfdGl0bGUgKCZwbGF5LCBnX2xpc3RfZmlyc3QgKHBsYXkudXJpcyktPmRhdGEpOworZGlmZiAtLWdpdCBhL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jIGIvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmMKK2luZGV4IGJkNjgyZDkuLjc4ZTdiYTEgMTAwNjQ0CistLS0gYS9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuYworKysrIGIvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmMKK0BAIC00Nyw2ICs0Nyw3IEBACisgCisgI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyAjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisrI2luY2x1ZGUgPGdzdC9wYnV0aWxzL21pc3NpbmctcGx1Z2lucy5oPgorIAorIEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9wbGF5ZXJfZGVidWcpOworICNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9wbGF5ZXJfZGVidWcKK0BAIC0yMzgsNiArMjM5LDcgQEAgZ3N0X3BsYXllcl9jbGFzc19pbml0IChHc3RQbGF5ZXJDbGFzcyAqIGtsYXNzKQorICAgICAgIGdfc2lnbmFsX25ldyAoInZpZGVvLWRpbWVuc2lvbnMtY2hhbmdlZCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCisgICAgICAgR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9OT19SRUNVUlNFIHwgR19TSUdOQUxfTk9fSE9PS1MsIDAsIE5VTEwsCisgICAgICAgTlVMTCwgTlVMTCwgR19UWVBFX05PTkUsIDIsIEdfVFlQRV9JTlQsIEdfVFlQRV9JTlQpOworKworIH0KKyAKKyBzdGF0aWMgdm9pZAorQEAgLTYxOSw2ICs2MjEsMjEgQEAgZXJyb3JfY2IgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1zZywgZ3BvaW50ZXIgdXNlcl9kYXRhKQorICAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5wcml2LT5sb2NrKTsKKyB9CisgCisrc3RhdGljIHZvaWQKKytlbGVtZW50X2NiIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtc2csIGdwb2ludGVyIHVzZXJfZGF0YSkKKyt7CisrICBHc3RQbGF5ZXIgKnNlbGYgPSBHU1RfUExBWUVSICh1c2VyX2RhdGEpOworKworKyAgaWYgKGdzdF9pc19taXNzaW5nX3BsdWdpbl9tZXNzYWdlIChtc2cpKSB7CisrICAgIGdjaGFyICpkZXNjOworKworKyAgICBkZXNjID0gZ3N0X21pc3NpbmdfcGx1Z2luX21lc3NhZ2VfZ2V0X2Rlc2NyaXB0aW9uIChtc2cpOworKyAgICBlbWl0X2Vycm9yIChzZWxmLCBnX2Vycm9yX25ldyAoR1NUX1BMQVlFUl9FUlJPUiwKKysgICAgICAgIEdTVF9QTEFZRVJfRVJST1JfTUlTU0lOR19QTFVHSU4sICJNaXNzaW5nIHBsdWdpbiAnJXMnIiwgZGVzYykpOworKyAgICBnX2ZyZWUgKGRlc2MpOworKyAgfQorK30KKysKKyBzdGF0aWMgZ2Jvb2xlYW4KKyBlb3NfZGlzcGF0Y2ggKGdwb2ludGVyIHVzZXJfZGF0YSkKKyB7CitAQCAtMTA1OSw2ICsxMDc2LDggQEAgZ3N0X3BsYXllcl9tYWluIChncG9pbnRlciBkYXRhKQorICAgICAgIE5VTEwsIE5VTEwpOworICAgZ19zb3VyY2VfYXR0YWNoIChidXNfc291cmNlLCBzZWxmLT5wcml2LT5jb250ZXh0KTsKKyAKKysgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChidXMpLCAibWVzc2FnZTo6ZWxlbWVudCIsCisrICAgICAgR19DQUxMQkFDSyAoZWxlbWVudF9jYiksIHNlbGYpOworICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKGJ1cyksICJtZXNzYWdlOjplcnJvciIsIEdfQ0FMTEJBQ0sgKGVycm9yX2NiKSwKKyAgICAgICBzZWxmKTsKKyAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChidXMpLCAibWVzc2FnZTo6ZW9zIiwgR19DQUxMQkFDSyAoZW9zX2NiKSwgc2VsZik7CitAQCAtMTU2MCw2ICsxNTc5LDcgQEAgZ3N0X3BsYXllcl9lcnJvcl9nZXRfdHlwZSAodm9pZCkKKyAgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICAge0NfRU5VTSAoR1NUX1BMQVlFUl9FUlJPUl9GQUlMRUQpLCAiR1NUX1BMQVlFUl9FUlJPUl9GQUlMRUQiLCAiZmFpbGVkIn0sCisrICAgIHtDX0VOVU0gKEdTVF9QTEFZRVJfRVJST1JfTUlTU0lOR19QTFVHSU4pLCAiR1NUX1BMQVlFUl9FUlJPUl9NSVNTSU5HX1BMVUdJTiIsICJtaXNzaW5nLXBsdWdpbiJ9LAorICAgICB7MCwgTlVMTCwgTlVMTH0KKyAgIH07CisgCitAQCAtMTU3Nyw2ICsxNTk3LDggQEAgZ3N0X3BsYXllcl9lcnJvcl9nZXRfbmFtZSAoR3N0UGxheWVyRXJyb3IgZXJyb3IpCisgICBzd2l0Y2ggKGVycm9yKSB7CisgICAgIGNhc2UgR1NUX1BMQVlFUl9FUlJPUl9GQUlMRUQ6CisgICAgICAgcmV0dXJuICJmYWlsZWQiOworKyAgICBjYXNlIEdTVF9QTEFZRVJfRVJST1JfTUlTU0lOR19QTFVHSU46CisrICAgICAgcmV0dXJuICJtaXNzaW5nLXBsdWdpbiI7CisgICB9CisgCisgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKK2RpZmYgLS1naXQgYS9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuaCBiL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5oCitpbmRleCBjNDM4NTEzLi4zNWZiNWJiIDEwMDY0NAorLS0tIGEvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmgKKysrKyBiL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5oCitAQCAtNDQsNyArNDQsOCBAQCBHVHlwZSAgICAgICAgZ3N0X3BsYXllcl9lcnJvcl9nZXRfdHlwZSAgICAgICAgICAgICAgICAodm9pZCk7CisgI2RlZmluZSAgICAgIEdTVF9UWVBFX1BMQVlFUl9FUlJPUiAgICAgICAgICAgICAgICAgICAgKGdzdF9wbGF5ZXJfZXJyb3JfZ2V0X3R5cGUgKCkpCisgCisgdHlwZWRlZiBlbnVtIHsKKy0gIEdTVF9QTEFZRVJfRVJST1JfRkFJTEVEID0gMAorKyAgR1NUX1BMQVlFUl9FUlJPUl9GQUlMRUQgPSAwLAorKyAgR1NUX1BMQVlFUl9FUlJPUl9NSVNTSU5HX1BMVUdJTgorIH0gR3N0UGxheWVyRXJyb3I7CisgCisgY29uc3QgZ2NoYXIgKmdzdF9wbGF5ZXJfZXJyb3JfZ2V0X25hbWUgICAgICAgICAgICAgICAgKEdzdFBsYXllckVycm9yIGVycm9yKTsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9GaXgtcGF1c2UtcGxheS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvRml4LXBhdXNlLXBsYXkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgzYzQyYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvRml4LXBhdXNlLXBsYXkucGF0Y2gKQEAgLTAsMCArMSwxMDcgQEAKK0ZpeCBwYXVzZS9wbGF5CisKK1RoZSBjdXJyZW50IHBsYXllciBzdGF0ZSBpcyBub3cgbm90aWZpZWQgdmlhIHRoZSBzdGF0ZS1jaGFuZ2VkIHNpZ25hbCwKK2FuZCBpbiB0aGUgR1RLIFVJIGl0IHdhcyBvbmx5IHVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgZGVzaXJlZCBzdGF0ZS4KKworVGhpcyBpcyBhIGJhY2twb3J0IG9mIHVwc3RyZWFtIGNvbW1pdCA3Mzg0NzljN2EwLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorCistLS0KKyBndGsvZ3RrLXBsYXkuYyAgICAgICAgICAgICB8ICA4ICsrKysrKy0tCisgbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmMgfCAxMiAtLS0tLS0tLS0tLS0KKyBsaWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuaCB8ICAyIC0tCisgMyBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3RrL2d0ay1wbGF5LmMgYi9ndGsvZ3RrLXBsYXkuYworaW5kZXggNmU3YTA5OC4uZTJiNjA1YSAxMDA2NDQKKy0tLSBhL2d0ay9ndGstcGxheS5jCisrKysgYi9ndGsvZ3RrLXBsYXkuYworQEAgLTM0LDYgKzM0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QKKyAgIEd0a1dpZGdldCAqaW5mb19iYXI7CisgICBHdGtXaWRnZXQgKnZvbHVtZV9idXR0b247CisgICBndWxvbmcgc2Vla2Jhcl92YWx1ZV9jaGFuZ2VkX3NpZ25hbF9pZDsKKysgIGdib29sZWFuIHBsYXlpbmc7CisgfSBHdGtQbGF5OworIAorIC8qIENvbXBhdCBzdHVicyAqLworQEAgLTExOCwxMiArMTE5LDEzIEBAIHBsYXlfcGF1c2VfY2xpY2tlZF9jYiAoR3RrQnV0dG9uICogYnV0dG9uLCBHdGtQbGF5ICogcGxheSkKKyB7CisgICBHdGtXaWRnZXQgKmltYWdlOworIAorLSAgaWYgKGdzdF9wbGF5ZXJfaXNfcGxheWluZyAocGxheS0+cGxheWVyKSkgeworKyAgaWYgKHBsYXktPnBsYXlpbmcpIHsKKyAgICAgZ3N0X3BsYXllcl9wYXVzZSAocGxheS0+cGxheWVyKTsKKyAgICAgaW1hZ2UgPQorICAgICAgICAgZ3RrX2ltYWdlX25ld19mcm9tX2ljb25fbmFtZSAoIm1lZGlhLXBsYXliYWNrLXN0YXJ0IiwKKyAgICAgICAgIEdUS19JQ09OX1NJWkVfQlVUVE9OKTsKKyAgICAgZ3RrX2J1dHRvbl9zZXRfaW1hZ2UgKEdUS19CVVRUT04gKHBsYXktPnBsYXlfcGF1c2VfYnV0dG9uKSwgaW1hZ2UpOworKyAgICBwbGF5LT5wbGF5aW5nID0gRkFMU0U7CisgICB9IGVsc2UgeworICAgICBnY2hhciAqdGl0bGU7CisgCitAQCAtMTM2LDYgKzEzOCw3IEBAIHBsYXlfcGF1c2VfY2xpY2tlZF9jYiAoR3RrQnV0dG9uICogYnV0dG9uLCBHdGtQbGF5ICogcGxheSkKKyAgICAgdGl0bGUgPSBnc3RfcGxheWVyX2dldF91cmkgKHBsYXktPnBsYXllcik7CisgICAgIHNldF90aXRsZSAocGxheSwgdGl0bGUpOworICAgICBnX2ZyZWUgKHRpdGxlKTsKKysgICAgcGxheS0+cGxheWluZyA9IFRSVUU7CisgICB9CisgfQorIAorQEAgLTMzNSw3ICszMzgsNyBAQCB2aWRlb19kaW1lbnNpb25zX2NoYW5nZWRfY2IgKEdzdFBsYXllciAqIHVudXNlZCwgZ2ludCB3aWR0aCwgZ2ludCBoZWlnaHQsCisgc3RhdGljIHZvaWQKKyBlb3NfY2IgKEdzdFBsYXllciAqIHVudXNlZCwgR3RrUGxheSAqIHBsYXkpCisgeworLSAgaWYgKGdzdF9wbGF5ZXJfaXNfcGxheWluZyAocGxheS0+cGxheWVyKSkgeworKyAgaWYgKHBsYXktPnBsYXlpbmcpIHsKKyAgICAgR0xpc3QgKm5leHQgPSBOVUxMOworICAgICBnY2hhciAqdXJpOworIAorQEAgLTQ1Miw2ICs0NTUsNyBAQCBtYWluIChnaW50IGFyZ2MsIGdjaGFyICoqIGFyZ3YpCisgICB9CisgCisgICBwbGF5LnBsYXllciA9IGdzdF9wbGF5ZXJfbmV3ICgpOworKyAgcGxheS5wbGF5aW5nID0gVFJVRTsKKyAKKyAgIGdfb2JqZWN0X3NldCAocGxheS5wbGF5ZXIsICJkaXNwYXRjaC10by1tYWluLWNvbnRleHQiLCBUUlVFLCBOVUxMKTsKKyAKK2RpZmYgLS1naXQgYS9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuYyBiL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jCitpbmRleCAwNjliMjg0Li43OGU3YmExIDEwMDY0NAorLS0tIGEvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmMKKysrKyBiL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jCitAQCAtMTQyMiwxOCArMTQyMiw2IEBAIGdzdF9wbGF5ZXJfc2V0X3VyaSAoR3N0UGxheWVyICogc2VsZiwgY29uc3QgZ2NoYXIgKiB2YWwpCisgICBnX29iamVjdF9zZXQgKHNlbGYsICJ1cmkiLCB2YWwsIE5VTEwpOworIH0KKyAKKy1nYm9vbGVhbgorLWdzdF9wbGF5ZXJfaXNfcGxheWluZyAoR3N0UGxheWVyICogc2VsZikKKy17CistICBnYm9vbGVhbiB2YWw7CistCistICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BMQVlFUiAoc2VsZiksIEZBTFNFKTsKKy0KKy0gIGdfb2JqZWN0X2dldCAoc2VsZiwgImlzLXBsYXlpbmciLCAmdmFsLCBOVUxMKTsKKy0KKy0gIHJldHVybiB2YWw7CistfQorLQorIEdzdENsb2NrVGltZQorIGdzdF9wbGF5ZXJfZ2V0X3Bvc2l0aW9uIChHc3RQbGF5ZXIgKiBzZWxmKQorIHsKK2RpZmYgLS1naXQgYS9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuaCBiL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5oCitpbmRleCA2OTMzZGQ3Li4zNWZiNWJiIDEwMDY0NAorLS0tIGEvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmgKKysrKyBiL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5oCitAQCAtOTMsOCArOTMsNiBAQCBnY2hhciAqICAgICAgZ3N0X3BsYXllcl9nZXRfdXJpICAgICAgICAgICAgICAgICAgICAgICAoR3N0UGxheWVyICAgICogcGxheWVyKTsKKyB2b2lkICAgICAgICAgZ3N0X3BsYXllcl9zZXRfdXJpICAgICAgICAgICAgICAgICAgICAgICAoR3N0UGxheWVyICAgICogcGxheWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgKiB1cmkpOworIAorLWdib29sZWFuICAgICBnc3RfcGxheWVyX2lzX3BsYXlpbmcgICAgICAgICAgICAgICAgICAgIChHc3RQbGF5ZXIgICAgKiBwbGF5ZXIpOworLQorIEdzdENsb2NrVGltZSBnc3RfcGxheWVyX2dldF9wb3NpdGlvbiAgICAgICAgICAgICAgICAgIChHc3RQbGF5ZXIgICAgKiBwbGF5ZXIpOworIEdzdENsb2NrVGltZSBnc3RfcGxheWVyX2dldF9kdXJhdGlvbiAgICAgICAgICAgICAgICAgIChHc3RQbGF5ZXIgICAgKiBwbGF5ZXIpOworIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL2ZpbGVjaG9vc2VyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9maWxlY2hvb3Nlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmYxYjAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9maWxlY2hvb3Nlci5wYXRjaApAQCAtMCwwICsxLDU0IEBACitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRnJvbSA0M2Q0YjE5YWI2MTFkODQ0MTU2ZTI2YzQ4NDBjYzU0ZGRiNzNhZTAzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK0RhdGU6IFRodSwgMjYgRmViIDIwMTUgMTc6MTc6MDUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gZ3RrLXBsYXk6IHNob3cgYSBmaWxlIGNob29zZXIgaWYgbm8gVVJJcyB3ZXJlIHBhc3NlZAorCistLS0KKyBndGsvZ3RrLXBsYXkuYyB8ICAgMjggKysrKysrKysrKysrKysrKysrKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3RrL2d0ay1wbGF5LmMgYi9ndGsvZ3RrLXBsYXkuYworaW5kZXggZjAxNTA3Ny4uOTc2NmE3MiAxMDA2NDQKKy0tLSBhL2d0ay9ndGstcGxheS5jCisrKysgYi9ndGsvZ3RrLXBsYXkuYworQEAgLTMxOSw4ICszMTksMzIgQEAgbWFpbiAoZ2ludCBhcmdjLCBnY2hhciAqKiBhcmd2KQorICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBwbGF5bGlzdHMgYW5kIHN0dWZmCisgICAvKiBQYXJzZSB0aGUgbGlzdCBvZiB0aGUgZmlsZSBuYW1lcyB3ZSBoYXZlIHRvIHBsYXkuICovCisgICBpZiAoIWZpbGVfbmFtZXMpIHsKKy0gICAgZ19wcmludCAoIlVzYWdlOiAlcyBGSUxFKHMpfFVSSShzKVxuIiwgQVBQX05BTUUpOworLSAgICByZXR1cm4gMTsKKysgICAgR3RrV2lkZ2V0ICpjaG9vc2VyOworKyAgICBpbnQgcmVzOworKworKyAgICBjaG9vc2VyID0gZ3RrX2ZpbGVfY2hvb3Nlcl9kaWFsb2dfbmV3ICgiU2VsZWN0IGZpbGVzIHRvIHBsYXkiLCBOVUxMLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19GSUxFX0NIT09TRVJfQUNUSU9OX09QRU4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9DYW5jZWwiLCBHVEtfUkVTUE9OU0VfQ0FOQ0VMLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfT3BlbiIsIEdUS19SRVNQT05TRV9BQ0NFUFQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisrICAgIGdfb2JqZWN0X3NldCAoY2hvb3NlciwKKysgICAgICAgICAgICAgICAgICAibG9jYWwtb25seSIsIEZBTFNFLAorKyAgICAgICAgICAgICAgICAgICJzZWxlY3QtbXVsdGlwbGUiLCBUUlVFLAorKyAgICAgICAgICAgICAgICAgIE5VTEwpOworKworKyAgICByZXMgPSBndGtfZGlhbG9nX3J1biAoR1RLX0RJQUxPRyAoY2hvb3NlcikpOworKyAgICBpZiAocmVzID09IEdUS19SRVNQT05TRV9BQ0NFUFQpIHsKKysgICAgICBHU0xpc3QgKmw7CisrCisrICAgICAgbCA9IGd0a19maWxlX2Nob29zZXJfZ2V0X3VyaXMgKEdUS19GSUxFX0NIT09TRVIgKGNob29zZXIpKTsKKysgICAgICB3aGlsZSAobCkgeworKyAgICAgICAgcGxheS51cmlzID0gZ19saXN0X2FwcGVuZCAocGxheS51cmlzLCBsLT5kYXRhKTsKKysgICAgICAgIGwgPSBnX3NsaXN0X2RlbGV0ZV9saW5rIChsLCBsKTsKKysgICAgICB9CisrICAgIH0gZWxzZSB7CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysgICAgZ3RrX3dpZGdldF9kZXN0cm95IChjaG9vc2VyKTsKKyAgIH0gZWxzZSB7CisgICAgIGd1aW50IGk7CisgCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZ3N0LXBsYXllci5kZXNrdG9wIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9nc3QtcGxheWVyLmRlc2t0b3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkMjA3YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZ3N0LXBsYXllci5kZXNrdG9wCkBAIC0wLDAgKzEsMTAgQEAKK1tEZXNrdG9wIEVudHJ5XQorTmFtZT1NZWRpYSBQbGF5ZXIKK0NvbW1lbnQ9QmFzaWMgbWVkaWEgcGxheWVyCitJY29uPWF1ZGlvLXBsYXllcgorVHJ5RXhlYz1ndGstcGxheQorRXhlYz1ndGstcGxheQorU3RhcnR1cE5vdGlmeT10cnVlCitUZXJtaW5hbD1mYWxzZQorVHlwZT1BcHBsaWNhdGlvbgorQ2F0ZWdvcmllcz1HVEs7QXVkaW9WaWRlbzsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZ3RrMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZ3RrMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2QxOGJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9ndGsyLnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK0FzIHRoZSByZXN0IG9mIFNhdG8gaXMgR1RLKyAyLCBwYXRjaCBndGstcGxheSB0byB1c2UgR1RLKyAyLiAgV2hlbiB0aGUgcmVzdCBvZgorU2F0byBoYXMgYmVlbiBwb3J0ZWQgdG8gR1RLKyAzIHRoaXMgcGF0Y2ggY2FuIGJlIGRyb3BwZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiOGFmMTNiLi45MGFiNzRjIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02MCw3ICs2MCw3IEBAIEFDX1NVQlNUKEdMSUJfUFJFRklYKQorIEdTVF9QUkVGSVg9ImAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXByZWZpeCBnc3RyZWFtZXItMS4wYCIKKyBBQ19TVUJTVChHU1RfUFJFRklYKQorIAorLVBLR19DSEVDS19NT0RVTEVTKEdUSywgW2d0aystMy4wXSwgW2hhdmVfZ3RrPSJ5ZXMiXSwgW2hhdmVfZ3RrPSJubyJdKQorK1BLR19DSEVDS19NT0RVTEVTKEdUSywgW2d0aystMi4wXSwgW2hhdmVfZ3RrPSJ5ZXMiXSwgW2hhdmVfZ3RrPSJubyJdKQorIEFNX0NPTkRJVElPTkFMKEhBVkVfR1RLLCB0ZXN0ICJ4JGhhdmVfZ3RrIiAhPSAieG5vIikKKyAKKyBHT0JKRUNUX0lOVFJPU1BFQ1RJT05fQ0hFQ0soWzEuMzEuMV0pCitkaWZmIC0tZ2l0IGEvZ3RrL2d0ay1wbGF5LmMgYi9ndGsvZ3RrLXBsYXkuYworaW5kZXggZjAxNTA3Ny4uOTU0ZDZmYiAxMDA2NDQKKy0tLSBhL2d0ay9ndGstcGxheS5jCisrKysgYi9ndGsvZ3RrLXBsYXkuYworQEAgLTM0LDYgKzM0LDQ2IEBAIHR5cGVkZWYgc3RydWN0CisgICBndWxvbmcgc2Vla2Jhcl92YWx1ZV9jaGFuZ2VkX3NpZ25hbF9pZDsKKyB9IEd0a1BsYXk7CisgCisrLyogQ29tcGF0IHN0dWJzICovCisrR3RrV2lkZ2V0ICoKKytndGtfYm94X25ldyAoR3RrT3JpZW50YXRpb24gb3JpZW50YXRpb24sCisrICAgICAgICAgICAgIGdpbnQgc3BhY2luZykKKyt7CisrICBzd2l0Y2ggKG9yaWVudGF0aW9uKSB7CisrICBjYXNlIEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMOgorKyAgICByZXR1cm4gZ3RrX2hib3hfbmV3IChGQUxTRSwgc3BhY2luZyk7CisrICBjYXNlIEdUS19PUklFTlRBVElPTl9WRVJUSUNBTDoKKysgICAgcmV0dXJuIGd0a192Ym94X25ldyAoRkFMU0UsIHNwYWNpbmcpOworKyAgfQorK30KKysKKytHdGtXaWRnZXQqCisrZ3RrX2J1dHRvbl9uZXdfZnJvbV9pY29uX25hbWUgKGNvbnN0IGdjaGFyICppY29uX25hbWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEd0a0ljb25TaXplICBzaXplKQorK3sKKysgIEd0a1dpZGdldCAqYnV0dG9uOworKyAgR3RrV2lkZ2V0ICppbWFnZTsKKysKKysgIGltYWdlID0gZ3RrX2ltYWdlX25ld19mcm9tX2ljb25fbmFtZSAoaWNvbl9uYW1lLCBzaXplKTsKKysgIGJ1dHRvbiA9ICBnX29iamVjdF9uZXcgKEdUS19UWVBFX0JVVFRPTiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgImltYWdlIiwgaW1hZ2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworKyAgcmV0dXJuIGJ1dHRvbjsKKyt9CisrCisrR3RrV2lkZ2V0ICoKKytndGtfc2NhbGVfbmV3X3dpdGhfcmFuZ2UgKEd0a09yaWVudGF0aW9uIG9yaWVudGF0aW9uLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSBtaW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICBnZG91YmxlIG1heCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGdkb3VibGUgc3RlcCkKKyt7CisrICBzd2l0Y2ggKG9yaWVudGF0aW9uKSB7CisrICBjYXNlIEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMOgorKyAgICByZXR1cm4gZ3RrX2hzY2FsZV9uZXdfd2l0aF9yYW5nZSAobWluLCBtYXgsIHN0ZXApOworKyAgY2FzZSBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUw6CisrICAgIHJldHVybiBndGtfdnNjYWxlX25ld193aXRoX3JhbmdlIChtaW4sIG1heCwgc3RlcCk7CisrICB9CisrfQorIAorIHN0YXRpYyB2b2lkCisgc2V0X3RpdGxlIChHdGtQbGF5ICogcGxheSwgY29uc3QgZ2NoYXIgKiB0aXRsZSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXJfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllcl9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRjZmJiYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXJfZ2l0LmJiCkBAIC0wLDAgKzEsMzggQEAKK1NVTU1BUlk9IkdTdHJlYW1lciBwbGF5YmFjayBoZWxwZXIgbGlicmFyeSBhbmQgZXhhbXBsZXMiCisKK0xJQ0VOU0UgPSAiTEdQTC0yLjArIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xOTttZDU9MDNhZWNhOWQ4Mjk1ZjgxMTgxNzkwOTA3NWExNWZmNjUiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgZ3N0cmVhbWVyMS4wIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgZ3RrKyIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3Nkcm9lZ2UvZ3N0LXBsYXllci5naXQgXAorICAgICAgICAgICBmaWxlOi8vZmlsZWNob29zZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3RrMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9GaXgtcGF1c2UtcGxheS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9BZGQtZXJyb3Itc2lnbmFsLWVtaXNzaW9uLWZvci1taXNzaW5nLXBsdWdpbnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3N0LXBsYXllci5kZXNrdG9wIgorCitTUkNSRVYgPSAiNTM4NmM1Yjk4NGQ0MGVmNTQzNDY3M2VkNjIyMDRlNjlhYWY1MjY0NSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ3RrLWRvYyBsaWJfcGFja2FnZSBwa2djb25maWcKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJdG91Y2ggJHtTfS9DaGFuZ2VMb2cKK30KKworRVhUUkFfT0VDT05GICs9ICJhY19jdl9wYXRoX1ZBTEdSSU5EPW5vIGFjX2N2X3BhdGhfR0RCPW5vIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1tIDA2NDQgLUQgJHtXT1JLRElSfS9nc3QtcGxheWVyLmRlc2t0b3AgJHtEfSR7ZGF0YWRpcn0vYXBwbGljYXRpb25zL2dzdC1wbGF5ZXIuZGVza3RvcAorfQorCitGSUxFU18ke1BOfS1iaW4gKz0gIiR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyouZGVza3RvcCIKKworUkRFUEVORFNfJHtQTn0tYmluID0gImdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtcGxheWJhY2siCitSUkVDT01NRU5EU18ke1BOfS1iaW4gPSAiZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS1tZXRhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLW1ldGEgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC1tZXRhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTElDRU5TRV9GTEFHU19XSElURUxJU1QiLCAiY29tbWVyY2lhbCIsICJnc3RyZWFtZXIxLjAtbGliYXYiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTElDRU5TRV9GTEFHU19XSElURUxJU1QiLCAiY29tbWVyY2lhbCIsICJnc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5LW1ldGEiLCAiIiwgZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtcGFja2FnZS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1wYWNrYWdlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjFiZTA2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtcGFja2FnZS5pbmMKQEAgLTAsMCArMSw1OCBAQAorUEFDS0FHRVNQTElURlVOQ1NfcHJlcGVuZCA9ICIgc3BsaXRfZ3N0cmVhbWVyMTBfcGFja2FnZXMgIgorUEFDS0FHRVNQTElURlVOQ1NfYXBwZW5kID0gIiBzZXRfbWV0YXBrZ19yZGVwZW5kcyAiCisKK3B5dGhvbiBzcGxpdF9nc3RyZWFtZXIxMF9wYWNrYWdlcyAoKSB7CisgICAgZ3N0X2xpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vZ3N0cmVhbWVyLSR7TElCVn0nKQorICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BsdWdpbl9wb3N0aW5zdCcsIFRydWUpCisgICAgZ2xpYmRpciA9IGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKQorCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgZ2xpYmRpciwgJ15saWIoLiopXC5zb1wuKicsICdsaWIlcycsICdnc3RyZWFtZXIgJXMgbGlicmFyeScsIGV4dHJhX2RlcGVuZHM9JycsIGFsbG93X2xpbmtzPVRydWUpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgZ3N0X2xpYmRpciwgJ2xpYmdzdCguKilcLnNvJCcsIGQuZXhwYW5kKCcke1BOfS0lcycpLCAnR1N0cmVhbWVyIHBsdWdpbiBmb3IgJXMnLCBwb3N0aW5zdD1wb3N0aW5zdCwgZXh0cmFfZGVwZW5kcz0nJykKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBnc3RfbGliZGlyLCAnbGliZ3N0KC4qKVwubGEkJywgZC5leHBhbmQoJyR7UE59LSVzLWRldicpLCAnR1N0cmVhbWVyIHBsdWdpbiBmb3IgJXMgKGRldmVsb3BtZW50IGZpbGVzKScsIGV4dHJhX2RlcGVuZHM9ZC5leHBhbmQoJyR7UE59LWRldicpKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGdzdF9saWJkaXIsICdsaWJnc3QoLiopXC5hJCcsIGQuZXhwYW5kKCcke1BOfS0lcy1zdGF0aWNkZXYnKSwgJ0dTdHJlYW1lciBwbHVnaW4gZm9yICVzIChzdGF0aWMgZGV2ZWxvcG1lbnQgZmlsZXMpJywgZXh0cmFfZGVwZW5kcz1kLmV4cGFuZCgnJHtQTn0tc3RhdGljZGV2JykpCit9CisKK3B5dGhvbiBzZXRfbWV0YXBrZ19yZGVwZW5kcyAoKSB7CisgICAgaW1wb3J0IG9zCisKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgbWV0YXBrZyA9ICBwbiArICctbWV0YScKKyAgICBkLnNldFZhcignQUxMT1dfRU1QVFlfJyArIG1ldGFwa2csICIxIikKKyAgICBkLnNldFZhcignRklMRVNfJyArIG1ldGFwa2csICIiKQorICAgIGJsYWNrbGlzdCA9IFsgcG4sIHBuICsgJy1sb2NhbGUnLCBwbiArICctZGV2JywgcG4gKyAnLWRiZycsIHBuICsgJy1kb2MnLCBwbiArICctbWV0YScgXQorICAgIG1ldGFwa2dfcmRlcGVuZHMgPSBbXQorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlc1sxOl06CisgICAgICAgIGlmIG5vdCBwa2cgaW4gYmxhY2tsaXN0IGFuZCBub3QgcGtnIGluIG1ldGFwa2dfcmRlcGVuZHMgYW5kIG5vdCBwa2cuZW5kc3dpdGgoJy1kZXYnKSBhbmQgbm90IHBrZy5lbmRzd2l0aCgnLWRiZycpIGFuZCBub3QgcGtnLmNvdW50KCdsb2NhbGUnKSBhbmQgbm90IHBrZy5jb3VudCgnLXN0YXRpY2RldicpOgorICAgICAgICAgICAgIyBTZWUgaWYgdGhlIHBhY2thZ2UgaXMgZW1wdHkgYnkgbG9va2luZyBhdCB0aGUgY29udGVudHMgb2YgaXRzIFBLR0RFU1Qgc3ViZGlyZWN0b3J5LiAKKyAgICAgICAgICAgICMgSWYgdGhpcyBzdWJkaXJlY3RvcnkgaXMgZW1wdHksIHRoZW4gdGhlIHBhY2thZ2UgaXMuCisgICAgICAgICAgICAjIEVtcHR5IHBhY2thZ2VzIGRvIG5vdCBnZXQgYWRkZWQgdG8gdGhlIG1ldGEgcGFja2FnZSdzIFJERVBFTkRTCisgICAgICAgICAgICBwa2dkaXIgPSBvcy5wYXRoLmpvaW4ocGtnZGVzdCwgcGtnKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGtnZGlyKToKKyAgICAgICAgICAgICAgICBkaXJfY29udGVudHMgPSBvcy5saXN0ZGlyKHBrZ2Rpcikgb3IgW10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGlyX2NvbnRlbnRzID0gW10KKyAgICAgICAgICAgIGlzX2VtcHR5ID0gbGVuKGRpcl9jb250ZW50cykgPT0gMAorICAgICAgICAgICAgaWYgbm90IGlzX2VtcHR5OgorICAgICAgICAgICAgICAgIG1ldGFwa2dfcmRlcGVuZHMuYXBwZW5kKHBrZykKKyAgICBkLnNldFZhcignUkRFUEVORFNfJyArIG1ldGFwa2csICcgJy5qb2luKG1ldGFwa2dfcmRlcGVuZHMpKQorICAgIGQuc2V0VmFyKCdERVNDUklQVElPTl8nICsgbWV0YXBrZywgcG4gKyAnIG1ldGEgcGFja2FnZScpCit9CisKKyMgZWFjaCBwbHVnaW4tZGV2IGRlcGVuZHMgb24gUE4tZGV2LCBwbHVnaW4tc3RhdGljZGV2IG9uIFBOLXN0YXRpY2RldgorIyBzbyB3ZSBuZWVkIHRoZW0gZXZlbiB3aGVuIGVtcHR5IChsaWtlIGluIGdzdC1wbHVnaW5zLWdvb2QgY2FzZSkKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCitBTExPV19FTVBUWV8ke1BOfS1kZXYgPSAiMSIKK0FMTE9XX0VNUFRZXyR7UE59LXN0YXRpY2RldiA9ICIxIgorCitQQUNLQUdFUyArPSAiJHtQTn0tYXBwcyAke1BOfS1tZXRhICR7UE59LWdsaWIiCitGSUxFU18ke1BOfS1hcHBzID0gIiR7YmluZGlyfSIKKworUkRFUEVORFNfJHtQTn0tYXBwcyArPSAicGVybCIKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICIke1BOfS1tZXRhIgorCitGSUxFU18ke1BOfSA9ICIiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItJHtMSUJWfS8uZGVidWciCitGSUxFU18ke1BOfS1nbGliID0gIiR7ZGF0YWRpcn0vZ2xpYi0yLjAiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZTZlOTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYuaW5jCkBAIC0wLDAgKzEsMzIgQEAKK1NVTU1BUlkgPSAiTGliYXYtYmFzZWQgR1N0cmVhbWVyIDEueCBwbHVnaW4iCitTRUNUSU9OID0gIm11bHRpbWVkaWEiCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2MisgJiAoIChHUEx2MisgJiBMR1BMdjIuMSspIHwgKEdQTHYzKyAmIExHUEx2MyspICkiCitMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdzdHJlYW1lci5uZXQvIgorREVQRU5EUyA9ICJnc3RyZWFtZXIxLjAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSB6bGliIGJ6aXAyIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworIyBDQVVUSU9OOiBVc2luZyB0aGUgc3lzdGVtIGxpYmF2IGlzIG5vdCByZWNvbW1lbmRlZC4gU2luY2UgdGhlIGxpYmF2IEFQSSBpcyBjaGFuZ2luZyBhbGwgdGhlIHRpbWUsCisjIGNvbXBpbGF0aW9uIGVycm9ycyAoYW5kIG90aGVyLCBtb3JlIHN1YnRsZSBidWdzKSBjYW4gaGFwcGVuLiBJdCBpcyB1c3VhbGx5IGJldHRlciB0byByZWx5IG9uIHRoZQorIyBsaWJhdiBjb3B5IGluY2x1ZGVkIGluIHRoZSBnc3QtbGliYXYgcGFja2FnZS4KK1BBQ0tBR0VDT05GSUcgPz89ICIgb3JjIHlhc20gIgorUEFDS0FHRUNPTkZJR1tsaWJhdl0gPSAiLS13aXRoLXN5c3RlbS1saWJhdiwsbGliYXYiCitQQUNLQUdFQ09ORklHW2xncGxdICA9ICItLWVuYWJsZS1sZ3BsLCwiCitQQUNLQUdFQ09ORklHW3lhc21dICA9ICItLWVuYWJsZS15YXNtLC0tZGlzYWJsZS15YXNtLHlhc20tbmF0aXZlIgorUEFDS0FHRUNPTkZJR1tvcmNdICA9ICItLWVuYWJsZS1vcmMsLS1kaXNhYmxlLW9yYyxvcmMiCisKKworR1NUUkVBTUVSXzFfMF9ERUJVRyA/PSAiLS1kaXNhYmxlLWRlYnVnIgorCitMSUJBVl9FWFRSQV9DT05GSUdVUkUgPSAiLS13aXRoLWxpYmF2LWV4dHJhLWNvbmZpZ3VyZSIKK0xJQkFWX0VYVFJBX0NPTkZJR1VSRV9DT01NT04gPSBcCisnJHtMSUJBVl9FWFRSQV9DT05GSUdVUkV9PSIke0xJQkFWX0VYVFJBX0NPTkZJR1VSRV9DT01NT05fQVJHfSInCisKK0VYVFJBX09FQ09ORiA9ICIke0xJQkFWX0VYVFJBX0NPTkZJR1VSRV9DT01NT059IgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvKi5zbyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvLmRlYnVnIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8qLmxhIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8qLmEiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdi8wMDAxLURpc2FibGUteWFzbS1mb3ItbGliYXYtd2hlbi1kaXNhYmxlLXlhc20ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYvMDAwMS1EaXNhYmxlLXlhc20tZm9yLWxpYmF2LXdoZW4tZGlzYWJsZS15YXNtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkOTlhZDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYvMDAwMS1EaXNhYmxlLXlhc20tZm9yLWxpYmF2LXdoZW4tZGlzYWJsZS15YXNtLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gNTRiYmEyMjhlYTUyZDAxZmQ4NDk0MWQ5N2JlMjNjMDNmOTg2MmI2NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KK0RhdGU6IFNhdCwgNiBBcHIgMjAxMyAwMToyMjoyMiArMDIwMAorU3ViamVjdDogW1BBVENIXSBEaXNhYmxlIHlhc20gZm9yIGxpYmF2IHdoZW4gLS1kaXNhYmxlLXlhc20KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMjJlZGU4OC4uZWYzYzA1MCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzA1LDYgKzMwNSwxMiBAQCBlbHNlCisgICAgIGVtYmxpYmF2X2NvbmZpZ3VyZV9hcmdzPSIkZW1ibGliYXZfY29uZmlndXJlX2FyZ3MgLS1lbmFibGUtZ3BsIgorICAgZmkKKworKyAgQUNfQVJHX0VOQUJMRSh5YXNtLAorKyAgICAgICAgICAgICAgW0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUteWFzbV0sIFtkaXNhYmxlIHVzZSBvZiB5YXNtIGFzc2VtYmxlcl0pXSkKKysgIGlmIHRlc3QgIngkZW5hYmxlX3lhc20iID0gInhubyI7IHRoZW4KKysgICAgZW1ibGliYXZfY29uZmlndXJlX2FyZ3M9IiRlbWJsaWJhdl9jb25maWd1cmVfYXJncyAtLWRpc2FibGUteWFzbSIKKysgIGZpCisrCisgICAjIGlmIHdlIGFyZSBjcm9zcy1jb21waWxpbmcsIHRlbGwgbGliYXYgc28KKyAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICAqYW5kcm9pZCopCistLSAKKzEuOC4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdi93b3JrYXJvdW5kLXRvLWJ1aWxkLWdzdC1saWJhdi1mb3ItaTU4Ni13aXRoLWdjYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdi93b3JrYXJvdW5kLXRvLWJ1aWxkLWdzdC1saWJhdi1mb3ItaTU4Ni13aXRoLWdjYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2FkZWE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2L3dvcmthcm91bmQtdG8tYnVpbGQtZ3N0LWxpYmF2LWZvci1pNTg2LXdpdGgtZ2NjLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK0Rlc2NyaXB0aW9uOiBXb3JrYXJvdW5kIHRvIGJ1aWxkIGxpYmF2IGZvciBpNTg2IHdpdGggZ2NjIDQuOS4yIGJ5IGF2b2lkaW5nIG1lbXNldAorQXV0aG9yOiBCZXJuaGFyZCDcYmVsYWNrZXIgPGJlcm5oYXJkdUB2ci13ZWIuZGU+CisKKy0tLQorQnVnLURlYmlhbjogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvNzgzMDgyCitMYXN0LVVwZGF0ZTogMjAxNS0wNC0yOAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtkZWJpYW5dCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCistLS0gZ3N0LWxpYmF2LTEuNC41Lm9yaWcvZ3N0LWxpYnMvZXh0L2xpYmF2L2xpYmF2Y29kZWMvaDI2NF9jYWJhYy5jCisrKysgZ3N0LWxpYmF2LTEuNC41L2dzdC1saWJzL2V4dC9saWJhdi9saWJhdmNvZGVjL2gyNjRfY2FiYWMuYworQEAgLTIwMjAsNyArMjAyMCwxMSBAQCBkZWNvZGVfaW50cmFfbWI6CisgICAgICAgICAvLyBJbiBkZWJsb2NraW5nLCB0aGUgcXVhbnRpemVyIGlzIDAKKyAgICAgICAgIGgtPmN1cl9waWMucXNjYWxlX3RhYmxlW21iX3h5XSA9IDA7CisgICAgICAgICAvLyBBbGwgY29lZmZzIGFyZSBwcmVzZW50CistICAgICAgICBtZW1zZXQoaC0+bm9uX3plcm9fY291bnRbbWJfeHldLCAxNiwgNDgpOworKyAgICAgICAgLyptZW1zZXQoaC0+bm9uX3plcm9fY291bnRbbWJfeHldLCAxNiwgNDgpOyovCisrICAgICAgICAgICAgLyogYXZvaWRpbmcgdGhpcyBtZW1zZXQgYmVjYXVzZSBpdCBsZWFkcyBhdCBsZWFzdCB3aXRoIGdjYzQuOS4yIHRvIGVycm9yOiAnYXNtJyBvcGVyYW5kIGhhcyBpbXBvc3NpYmxlIGNvbnN0cmFpbnRzICovCisrICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ4OyBpKyspIHsKKysgICAgICAgICAgICAoICh1bnNpZ25lZCBjaGFyKikoaC0+bm9uX3plcm9fY291bnRbbWJfeHldKSApIFtpXSA9IDE2OworKyAgICAgICAgfQorICAgICAgICAgaC0+Y3VyX3BpYy5tYl90eXBlW21iX3h5XSA9IG1iX3R5cGU7CisgICAgICAgICBoLT5sYXN0X3FzY2FsZV9kaWZmID0gMDsKKyAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2XzEuNC41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2XzEuNC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZmM3ZWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXZfMS40LjUuYmIKQEAgLTAsMCArMSwyNyBAQAoraW5jbHVkZSBnc3RyZWFtZXIxLjAtbGliYXYuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT02NzYyZWQ0NDJiMzgyMjM4N2E1MWM5MmQ5MjhlYWQwZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9leHQvbGliYXYvZ3N0YXYuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTE4O21kNT1hNzUyYzM1MjY3ZDgyNzZmZDljYTNkYjY5OTRmY2E5YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvTElDRU5TRTttZDU9ZWE2NmU5N2E3YWMxZGI5NzhjZjM1MjkwNjhhOGM5NDggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0NPUFlJTkcuR1BMdjI7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9DT1BZSU5HLkdQTHYzO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvQ09QWUlORy5MR1BMdjIuMTttZDU9YmQ3YTQ0MzMyMGFmOGM4MTJlNGMxOGQxYjc5ZGYwMDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0NPUFlJTkcuTEdQTHYzO21kNT1lNmE2MDBmZDVlMWQ5Y2JkZTJkOTgzNjgwMjMzYWQwMiIKKworU1JDX1VSSSA9ICIgXAorICAgIGh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtbGliYXYvZ3N0LWxpYmF2LSR7UFZ9LnRhci54eiBcCisgICAgZmlsZTovLzAwMDEtRGlzYWJsZS15YXNtLWZvci1saWJhdi13aGVuLWRpc2FibGUteWFzbS5wYXRjaCBcCisgICAgZmlsZTovL3dvcmthcm91bmQtdG8tYnVpbGQtZ3N0LWxpYmF2LWZvci1pNTg2LXdpdGgtZ2NjLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJmNDkyMmE0NmFkYmNiZTdiZDAxMzMxZmY1ZGM3OTc5ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MDVjNjI2MjQ2MDRmM2JiNWM4NzA4NDRjYzFmMjcxMTc3OWNjNTMzYjAwNGMyYWExZDhjMGQ1ODU1N2FmYmJjIgorCitMSUJBVl9FWFRSQV9DT05GSUdVUkVfQ09NTU9OX0FSRyA9ICItLXRhcmdldC1vcz1saW51eCBcCisgIC0tY2M9JyR7Q0N9JyAtLWFzPScke0NDfScgLS1sZD0nJHtDQ30nIC0tbm09JyR7Tk19JyAtLWFyPScke0FSfScgXAorICAtLXJhbmxpYj0nJHtSQU5MSUJ9JyBcCisgICR7R1NUUkVBTUVSXzFfMF9ERUJVR30gXAorICAtLWNyb3NzLXByZWZpeD0nJHtIT1NUX1BSRUZJWH0nIgorCitTID0gIiR7V09SS0RJUn0vZ3N0LWxpYmF2LSR7UFZ9IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXZfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjFiODdlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2X2dpdC5iYgpAQCAtMCwwICsxLDI5IEBACitERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCisKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLWxpYmF2LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9Njc2MmVkNDQyYjM4MjIzODdhNTFjOTJkOTI4ZWFkMGQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZXh0L2xpYmF2L2dzdGF2Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xODttZDU9YTc1MmMzNTI2N2Q4Mjc2ZmQ5Y2EzZGI2OTk0ZmNhOWMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0xJQ0VOU0U7bWQ1PTIzYTU0ZjU5YjgyNTcyYzIwM2E1NTkzNDZlODllZDU3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9DT1BZSU5HLkdQTHYyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvQ09QWUlORy5HUEx2MzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0NPUFlJTkcuTEdQTHYyLjE7bWQ1PWJkN2E0NDMzMjBhZjhjODEyZTRjMThkMWI3OWRmMDA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9DT1BZSU5HLkxHUEx2MzttZDU9ZTZhNjAwZmQ1ZTFkOWNiZGUyZDk4MzY4MDIzM2FkMDIiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1saWJhdjticmFuY2g9bWFzdGVyIgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDUkVWID0gIjEyNzIwMmQ2ZjY1NTg0ODkxZGFiZjkyYmUwMzFmMGQxNzBiMGU3ZjEiCisKK0xJQkFWX0VYVFJBX0NPTkZJR1VSRV9DT01NT05fQVJHID0gIi0tdGFyZ2V0LW9zPWxpbnV4IFwKKyAgLS1jYz0nJHtDQ30nIC0tYXM9JyR7Q0N9JyAtLWxkPScke0NDfScgLS1ubT0nJHtOTX0nIC0tYXI9JyR7QVJ9JyBcCisgICR7R1NUUkVBTUVSXzFfMF9ERUJVR30gXAorICAtLWNyb3NzLXByZWZpeD0nJHtIT1NUX1BSRUZJWH0nIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwljZCAke1N9CisJLi9hdXRvZ2VuLnNoIC0tbm9jb25maWd1cmUKKwljZCAke0J9Cit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1tZXRhLWJhc2UuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbWV0YS1iYXNlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZjEwYzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbWV0YS1iYXNlLmJiCkBAIC0wLDAgKzEsNjUgQEAKK0RFU0NSSVBUSU9OID0gIkdzdHJlYW1lcjEuMCBwYWNrYWdlIGdyb3VwcyIKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitDT01NRVJDSUFMX1BMVUdJTlMgPSAiJHtDT01NRVJDSUFMX0FVRElPX1BMVUdJTlN9ICR7Q09NTUVSQ0lBTF9WSURFT19QTFVHSU5TfSIKK0RFUEVORFNfVUdMWT0iJHtAJ2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHknIGlmICd1Z2x5JyBpbiBDT01NRVJDSUFMX1BMVUdJTlMuc3BsaXQoJy0nKSBlbHNlICcnfSIKK0RFUEVORFNfQkFEPSIke0AnZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkJyBpZiAnYmFkJyBpbiBDT01NRVJDSUFMX1BMVUdJTlMuc3BsaXQoJy0nKSBlbHNlICcnfSIKK0RFUEVORFMgPSAiZ3N0cmVhbWVyMS4wIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZCAke0RFUEVORFNfVUdMWX0gJHtERVBFTkRTX0JBRH0iCisKK1BBQ0tBR0VTID0gIlwKKyAgICBnc3RyZWFtZXIxLjAtbWV0YS1iYXNlIFwKKyAgICBnc3RyZWFtZXIxLjAtbWV0YS14MTEtYmFzZSBcCisgICAgZ3N0cmVhbWVyMS4wLW1ldGEtYXVkaW8gXAorICAgIGdzdHJlYW1lcjEuMC1tZXRhLWRlYnVnIFwKKyAgICBnc3RyZWFtZXIxLjAtbWV0YS12aWRlbyIKKworQUxMT1dfRU1QVFlfZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZSA9ICIxIgorQUxMT1dfRU1QVFlfZ3N0cmVhbWVyMS4wLW1ldGEteDExLWJhc2UgPSAiMSIKK0FMTE9XX0VNUFRZX2dzdHJlYW1lcjEuMC1tZXRhLWF1ZGlvID0gIjEiCitBTExPV19FTVBUWV9nc3RyZWFtZXIxLjAtbWV0YS1kZWJ1ZyA9ICIxIgorQUxMT1dfRU1QVFlfZ3N0cmVhbWVyMS4wLW1ldGEtdmlkZW8gPSAiMSIKKworUkRFUEVORFNfZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZSA9ICJcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnZ3N0cmVhbWVyMS4wLW1ldGEteDExLWJhc2UnLCAnJywgZCl9IFwKKyAgICBnc3RyZWFtZXIxLjAgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtcGxheWJhY2sgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtZ2lvIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLWFsc2EgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2Utdm9sdW1lIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLWF1ZGlvY29udmVydCBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS1hdWRpb3Jlc2FtcGxlIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXR5cGVmaW5kZnVuY3Rpb25zIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXZpZGVvc2NhbGUgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtdmlkZW9jb252ZXJ0IFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLWF1dG9kZXRlY3QgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2Qtc291cGh0dHBzcmMiCisKK1JSRUNPTU1FTkRTX2dzdHJlYW1lcjEuMC1tZXRhLXgxMS1iYXNlID0gIlwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXhpbWFnZXNpbmsgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UteHZpbWFnZXNpbmsiCisKK1JERVBFTkRTX2dzdHJlYW1lcjEuMC1tZXRhLWF1ZGlvID0gIlwKKyAgICBnc3RyZWFtZXIxLjAtbWV0YS1iYXNlIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXZvcmJpcyBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS1vZ2cgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2Qtd2F2cGFyc2UgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QtZmxhYyBcCisgICAgJHtDT01NRVJDSUFMX0FVRElPX1BMVUdJTlN9IgorCitSREVQRU5EU19nc3RyZWFtZXIxLjAtbWV0YS1kZWJ1ZyA9ICJcCisgICAgZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZSBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC1kZWJ1ZyBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS1hdWRpb3Rlc3RzcmMgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtdmlkZW90ZXN0c3JjIgorCitSREVQRU5EU19nc3RyZWFtZXIxLjAtbWV0YS12aWRlbyA9ICJcCisgICAgZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZSBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC1hdmkgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QtbWF0cm9za2EgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtdGhlb3JhIFwKKyAgICAke0NPTU1FUkNJQUxfVklERU9fUExVR0lOU30iCisKK1JSRUNPTU1FTkRTX2dzdHJlYW1lcjEuMC1tZXRhLXZpZGVvID0gIlwKKyAgICBnc3RyZWFtZXIxLjAtbWV0YS1hdWRpbyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXguaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY5ODkwNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXguaW5jCkBAIC0wLDAgKzEsNDIgQEAKK1NVTU1BUlkgPSAiT3Blbk1BWCBJTCBwbHVnaW5zIGZvciBHU3RyZWFtZXIiCitTRUNUSU9OID0gIm11bHRpbWVkaWEiCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nc3RyZWFtZXIubmV0LyIKK0RFUEVORFMgPSAiZ3N0cmVhbWVyMS4wIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkIgorUkRFUEVORFNfJHtQTn0gPSAibGlib214aWwiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0CisKK2FjcGF0aHMgPSAiLUkgJHtTfS9jb21tb24vbTQgLUkgJHtTfS9tNCIKKworUFIgPSAicjEiCisKK0dTVFJFQU1FUl8xXzBfT01YX1RBUkdFVCA/PSAiYmVsbGFnaW8iCitHU1RSRUFNRVJfMV8wX09NWF9DT1JFX05BTUUgPz0gIiR7bGliZGlyfS9saWJvbXhpbC1iZWxsYWdpby5zby4wIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS12YWxncmluZCAtLXdpdGgtb214LXRhcmdldD0ke0dTVFJFQU1FUl8xXzBfT01YX1RBUkdFVH0iCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgb214X3RhcmdldCA9IGQuZ2V0VmFyKCJHU1RSRUFNRVJfMV8wX09NWF9UQVJHRVQiLCBUcnVlKQorICAgIGlmIG9teF90YXJnZXQgaW4gWydnZW5lcmljJywgJ2JlbGxhZ2lvJ106CisgICAgICAgIHNyY2RpciA9IGQuZ2V0VmFyKCJTIiwgVHJ1ZSkKKyAgICAgICAgIyBCZWxsYWdpbyBoZWFkZXJzIGFyZSBpbmNvbXBsZXRlICh0aGV5IGFyZSBtaXNzaW5nIHRoZSBPTVhfVkVSU0lPTl9NQUpPUiwjCisgICAgICAgICMgT01YX1ZFUlNJT05fTUlOT1IsIE9NWF9WRVJTSU9OX1JFVklTSU9OLCBhbmQgT01YX1ZFUlNJT05fU1RFUCBtYWNyb3MpOworICAgICAgICAjIGFwcGVuZGluZyBhIGRpcmVjdG9yeSBwYXRoIHRvIGdzdC1vbXgnIGludGVybmFsIE9wZW5NQVggSUwgaGVhZGVycyBmaXhlcyB0aGlzCisgICAgICAgIGQuYXBwZW5kVmFyKCJDRkxBR1MiLCAiIC1JJXMvb214L29wZW5tYXgiICUgc3JjZGlyKQorICAgIGVsaWYgb214X3RhcmdldCA9PSAicnBpIjoKKyAgICAgICAgIyBEZWRpY2F0ZWQgUmFzcGJlcnJ5IFBpIE9wZW5NQVggSUwgc3VwcG9ydCBtYWtlcyB0aGlzIHBhY2thZ2UgbWFjaGluZSBzcGVjaWZpYworICAgICAgICBkLnNldFZhcigiUEFDS0FHRV9BUkNIIiwgZC5nZXRWYXIoIk1BQ0hJTkVfQVJDSCIsIFRydWUpKQorfQorCitzZXRfb214X2NvcmVfbmFtZSgpIHsKKwlzZWQgLWkgLWUgInM7XmNvcmUtbmFtZT0uKjtjb3JlLW5hbWU9JHtHU1RSRUFNRVJfMV8wX09NWF9DT1JFX05BTUV9OyIgIiR7RH0ke3N5c2NvbmZkaXJ9L3hkZy9nc3RvbXguY29uZiIKK30KK2RvX2luc3RhbGxbcG9zdGZ1bmNzXSArPSAiIHNldF9vbXhfY29yZV9uYW1lICIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wLyouc28iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wLy5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvKi5sYSIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvKi5hIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214LzAwMDEtb214LWZpeGVkLXR5cGUtZXJyb3ItaW4tcHJpbnRmLWNhbGwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214LzAwMDEtb214LWZpeGVkLXR5cGUtZXJyb3ItaW4tcHJpbnRmLWNhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQyOGFjOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXgvMDAwMS1vbXgtZml4ZWQtdHlwZS1lcnJvci1pbi1wcmludGYtY2FsbC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIGY2MjllMDQxZTlmNjc4ZmNkODZhZDc2NGExNTExN2RmZjYzYzI3MWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+CitEYXRlOiBTYXQsIDI3IEFwciAyMDEzIDAyOjUwOjI1ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIG9teDogZml4ZWQgdHlwZSBlcnJvciBpbiBwcmludGYgY2FsbAorCislenUgZXhwZWN0cyBzaXplX3QKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTkwMDhdCisKK1NpZ25lZC1vZmYtYnk6IENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KKy0tLQorIG9teC9nc3RvbXguYyB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL29teC9nc3RvbXguYyBiL29teC9nc3RvbXguYworaW5kZXggYTI5NDVlZC4uMWVjYTdjYyAxMDA2NDQKKy0tLSBhL29teC9nc3RvbXguYworKysrIGIvb214L2dzdG9teC5jCitAQCAtMTYzMCw3ICsxNjMwLDcgQEAgZ3N0X29teF9wb3J0X2FsbG9jYXRlX2J1ZmZlcnNfdW5sb2NrZWQgKEdzdE9NWFBvcnQgKiBwb3J0LAorIAorICAgR1NUX0lORk9fT0JKRUNUIChjb21wLT5wYXJlbnQsCisgICAgICAgIkFsbG9jYXRpbmcgJWQgYnVmZmVycyBvZiBzaXplICV6dSBmb3IgJXMgcG9ydCAldSIsIG4sCistICAgICAgcG9ydC0+cG9ydF9kZWYubkJ1ZmZlclNpemUsIGNvbXAtPm5hbWUsIChndWludCkgcG9ydC0+aW5kZXgpOworKyAgICAgIChzaXplX3QpIChwb3J0LT5wb3J0X2RlZi5uQnVmZmVyU2l6ZSksIGNvbXAtPm5hbWUsIChndWludCkgcG9ydC0+aW5kZXgpOworIAorICAgaWYgKCFwb3J0LT5idWZmZXJzKQorICAgICBwb3J0LT5idWZmZXJzID0gZ19wdHJfYXJyYXlfc2l6ZWRfbmV3IChuKTsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214XzEuMi4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teF8xLjIuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTdjOTFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teF8xLjIuMC5iYgpAQCAtMCwwICsxLDEyIEBACitpbmNsdWRlIGdzdHJlYW1lcjEuMC1vbXguaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL29teC9nc3RvbXguaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTIxO21kNT01YzhlMWZjYTMyNzA0NDg4ZTc2ZDJiYTlkZGZhOTM1ZiIKKworU1JDX1VSSSA9ICJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LW9teC9nc3Qtb214LSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gImQyNGU4YzAxNTNjMzVkZmVmZWUzZTI2YjFjMmMzNWY4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBiNDg3NDk2MWU2NDg4YWQ5ZTU4MDgxMTRiZDQ4NmVhOTgxYzU0MDkwNzI2MmNhYWIxNDE5MzU1ZmQ4MmQ3NDUiCisKK1MgPSAiJHtXT1JLRElSfS9nc3Qtb214LSR7UFZ9IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214X2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXhfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5Yzg0NjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214X2dpdC5iYgpAQCAtMCwwICsxLDI2IEBACitERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCisKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLW9teC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vb214L2dzdG9teC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjE7bWQ1PTVjOGUxZmNhMzI3MDQ0ODhlNzZkMmJhOWRkZmE5MzVmIgorCitTUkNfVVJJID0gIiBcCisgICAgZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1vbXg7YnJhbmNoPW1hc3RlcjtuYW1lPWdzdC1vbXggXAorICAgIGdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9jb21tb247ZGVzdHN1ZmZpeD1naXQvY29tbW9uO2JyYW5jaD1tYXN0ZXI7bmFtZT1jb21tb24gXAorICAgIGZpbGU6Ly8wMDAxLW9teC1maXhlZC10eXBlLWVycm9yLWluLXByaW50Zi1jYWxsLnBhdGNoIFwKKyAgICAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ1JFVl9nc3Qtb214ID0gImEyZGI3NmIwNDhkYjI3OGVmMGFhNzk4ZTEwNmI3NTk0MjY0ZTA2YzAiCitTUkNSRVZfY29tbW9uID0gIjVlZGNkODU3YjIxMDdjZDhiNzhjMTYyMzJkZDEwODc3NTEzZWMxNTciCisKK1NSQ1JFVl9GT1JNQVQgPSAiZ3N0LW9teCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJY2QgJHtTfQorCS4vYXV0b2dlbi5zaCAtLW5vY29uZmlndXJlCisJY2QgJHtCfQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGVkYjYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLmluYwpAQCAtMCwwICsxLDEzNSBAQAorcmVxdWlyZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy5pbmMKKworTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIrICYgTEdQTHYyLjErICIKKworREVQRU5EUyArPSAiZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSBsaWJwbmcganBlZyIKKworUyA9ICIke1dPUktESVJ9L2dzdC1wbHVnaW5zLWJhZC0ke1BWfSIKKworU1JDX1VSSSArPSAiZmlsZTovL2NvbmZpZ3VyZS1hbGxvdy10by1kaXNhYmxlLWxpYnNzaDIucGF0Y2ggXAorICAgICAgICAgICAiCisKK2luaGVyaXQgZ2V0dGV4dCBibHVldG9vdGgKKworIyBvcGVuZ2wgcGFja2FnZWNvbmZpZyBmYWN0b3JlZCBvdXQgdG8gbWFrZSBpdCBlYXN5IGZvciBkaXN0cm9zCisjIGFuZCBCU1AgbGF5ZXJzIHRvIHBpY2sgZWl0aGVyIChkZXNrdG9wKSBvcGVuZ2wsIGdsZXMyLCBvciBubyBHTAorUEFDS0FHRUNPTkZJR19HTCA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnZ2xlczInLCAnJywgZCl9IgorCitQQUNLQUdFQ09ORklHID8/PSAiIFwKKyAgICAke1BBQ0tBR0VDT05GSUdfR0x9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dheWxhbmQnLCAnd2F5bGFuZCcsICcnLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXRvb3RoJywgJ2JsdWV6JywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdkaXJlY3RmYicsICdkaXJlY3RmYicsICcnLCBkKX0gXAorICAgIG9yYyBjdXJsIHV2Y2gyNjQgbmVvbiBzbmRmaWxlIFwKKyAgICBobHMgc2JjIGRhc2ggYnoyIHNtb290aHN0cmVhbWluZyBcCisgICAgIgorCisjIGRhc2ggPSBEeW5hbWljIEFkYXB0aXZlIFN0cmVhbWluZyBvdmVyIEhUVFAKK1BBQ0tBR0VDT05GSUdbYXNzcmVuZGVyXSAgICAgICA9ICItLWVuYWJsZS1hc3NyZW5kZXIsLS1kaXNhYmxlLWFzc3JlbmRlcixsaWJhc3MiCitQQUNLQUdFQ09ORklHW2N1cmxdICAgICAgICAgICAgPSAiLS1lbmFibGUtY3VybCwtLWRpc2FibGUtY3VybCxjdXJsIgorUEFDS0FHRUNPTkZJR1tnbGVzMl0gICAgICAgICAgID0gIi0tZW5hYmxlLWdsZXMyLC0tZGlzYWJsZS1nbGVzMix2aXJ0dWFsL2xpYmdsZXMyIgorUEFDS0FHRUNPTkZJR1tvcGVuZ2xdICAgICAgICAgID0gIi0tZW5hYmxlLW9wZW5nbCwtLWRpc2FibGUtb3BlbmdsLHZpcnR1YWwvbGliZ2wgbGliZ2x1IgorUEFDS0FHRUNPTkZJR1tmYWFjXSAgICAgICAgICAgID0gIi0tZW5hYmxlLWZhYWMsLS1kaXNhYmxlLWZhYWMsZmFhYyIKK1BBQ0tBR0VDT05GSUdbZmFhZF0gICAgICAgICAgICA9ICItLWVuYWJsZS1mYWFkLC0tZGlzYWJsZS1mYWFkLGZhYWQyIgorUEFDS0FHRUNPTkZJR1tsaWJtbXNdICAgICAgICAgID0gIi0tZW5hYmxlLWxpYm1tcywtLWRpc2FibGUtbGlibW1zLGxpYm1tcyIKK1BBQ0tBR0VDT05GSUdbbW9kcGx1Z10gICAgICAgICA9ICItLWVuYWJsZS1tb2RwbHVnLC0tZGlzYWJsZS1tb2RwbHVnLGxpYm1vZHBsdWciCitQQUNLQUdFQ09ORklHW21wZzEyM10gICAgICAgICAgPSAiLS1lbmFibGUtbXBnMTIzLC0tZGlzYWJsZS1tcGcxMjMsbXBnMTIzIgorUEFDS0FHRUNPTkZJR1tvcHVzXSAgICAgICAgICAgID0gIi0tZW5hYmxlLW9wdXMsLS1kaXNhYmxlLW9wdXMsbGlib3B1cyIKK1BBQ0tBR0VDT05GSUdbZmxpdGVdICAgICAgICAgICA9ICItLWVuYWJsZS1mbGl0ZSwtLWRpc2FibGUtZmxpdGUsZmxpdGUtYWxzYSIKK1BBQ0tBR0VDT05GSUdbb3BlbmN2XSAgICAgICAgICA9ICItLWVuYWJsZS1vcGVuY3YsLS1kaXNhYmxlLW9wZW5jdixvcGVuY3YiCitQQUNLQUdFQ09ORklHW3dheWxhbmRdICAgICAgICAgPSAiLS1lbmFibGUtd2F5bGFuZCAtLWVuYWJsZS1lZ2wsLS1kaXNhYmxlLXdheWxhbmQgLS1kaXNhYmxlLWVnbCx3YXlsYW5kIHZpcnR1YWwvZWdsIgorUEFDS0FHRUNPTkZJR1t1dmNoMjY0XSAgICAgICAgID0gIi0tZW5hYmxlLXV2Y2gyNjQsLS1kaXNhYmxlLXV2Y2gyNjQsbGlidXNiMSB1ZGV2IgorUEFDS0FHRUNPTkZJR1tkaXJlY3RmYl0gICAgICAgID0gIi0tZW5hYmxlLWRpcmVjdGZiLC0tZGlzYWJsZS1kaXJlY3RmYixkaXJlY3RmYiIKK1BBQ0tBR0VDT05GSUdbbmVvbl0gICAgICAgICAgICA9ICItLWVuYWJsZS1uZW9uLC0tZGlzYWJsZS1uZW9uLG5lb24iCitQQUNLQUdFQ09ORklHW29wZW5hbF0gICAgICAgICAgPSAiLS1lbmFibGUtb3BlbmFsLC0tZGlzYWJsZS1vcGVuYWwsb3BlbmFsLXNvZnQiCitQQUNLQUdFQ09ORklHW2hsc10gICAgICAgICAgICAgPSAiLS1lbmFibGUtaGxzLC0tZGlzYWJsZS1obHMsZ251dGxzIgorUEFDS0FHRUNPTkZJR1tzYmNdICAgICAgICAgICAgID0gIi0tZW5hYmxlLXNiYywtLWRpc2FibGUtc2JjLHNiYyIKK1BBQ0tBR0VDT05GSUdbZGFzaF0gICAgICAgICAgICA9ICItLWVuYWJsZS1kYXNoLC0tZGlzYWJsZS1kYXNoLGxpYnhtbDIiCitQQUNLQUdFQ09ORklHW2J6Ml0gICAgICAgICAgICAgPSAiLS1lbmFibGUtYnoyLC0tZGlzYWJsZS1iejIsYnppcDIiCitQQUNLQUdFQ09ORklHW2ZsdWlkc3ludGhdICAgICAgPSAiLS1lbmFibGUtZmx1aWRzeW50aCwtLWRpc2FibGUtZmx1aWRzeW50aCxmbHVpZHN5bnRoIgorUEFDS0FHRUNPTkZJR1tzY2hyb2VkaW5nZXJdICAgID0gIi0tZW5hYmxlLXNjaHJvLC0tZGlzYWJsZS1zY2hybyxzY2hyb2VkaW5nZXIiCitQQUNLQUdFQ09ORklHW3Ntb290aHN0cmVhbWluZ10gPSAiLS1lbmFibGUtc21vb3Roc3RyZWFtaW5nLC0tZGlzYWJsZS1zbW9vdGhzdHJlYW1pbmcsbGlieG1sMiIKK1BBQ0tBR0VDT05GSUdbYmx1ZXpdICAgICAgICAgICA9ICItLWVuYWJsZS1ibHVleiwtLWRpc2FibGUtYmx1ZXosJHtCTFVFWn0iCitQQUNLQUdFQ09ORklHW3JzdmddICAgICAgICAgICAgPSAiLS1lbmFibGUtcnN2ZywtLWRpc2FibGUtcnN2ZyxsaWJyc3ZnIgorUEFDS0FHRUNPTkZJR1tzbmRmaWxlXSAgICAgICAgID0gIi0tZW5hYmxlLXNuZGZpbGUsLS1kaXNhYmxlLXNuZGZpbGUsbGlic25kZmlsZTEiCitQQUNLQUdFQ09ORklHW3dlYnBdICAgICAgICAgICAgPSAiLS1lbmFibGUtd2VicCwtLWRpc2FibGUtd2VicCxsaWJ3ZWJwIgorUEFDS0FHRUNPTkZJR1tydG1wXSAgICAgICAgICAgID0gIi0tZW5hYmxlLXJ0bXAsLS1kaXNhYmxlLXJ0bXAscnRtcGR1bXAiCitQQUNLQUdFQ09ORklHW2xpYnNzaDJdICAgICAgICAgPSAiLS1lbmFibGUtbGlic3NoMiwtLWRpc2FibGUtbGlic3NoMixsaWJzc2gyIgorCisjIHRoZXNlIHBsdWdpbnMgaGF2ZSBub3QgYmVlbiBwb3J0ZWQgdG8gMS4wICh5ZXQpOgorIyAgIGRpcmVjdGRyYXcgdmNkIGFwZXhzaW5rIGRjMTM5NCBsdjIgbGluc3lzIG11c2VwYWNrIG15dGh0dgorIyAgIG5hcyB0aW1pZGl0eSB0ZWxldGV4dGRlYyBzZGwgeHZpZCB3aW5pbmV0IGFjbSBnc2V0dGluZ3MKKyMgICBzbmRpbyBxdHdyYXBwZXIgY2R4YXBhcnNlIGRjY3AgZmFjZW92ZXJsYXkgaGR2cGFyc2UgdHRhCisjICAgbXZlIG51dmRlbXV4IG9zeF92aWRlbyBwYXRjaGRldGVjdCBxdWlja3RpbWUgcmVhbCBzZGkKKyMgICB2aWRlb21lYXN1cmUgZ3NldHRpbmdzCisKKyMgdGhlc2UgcGx1Z2lucyBoYXZlIG5vIGNvcnJlc3BvbmRpbmcgbGlicmFyeSBpbiBPRS1jb3JlIG9yIG1ldGEtb3BlbmVtYmVkZGVkOgorIyAgIG9wZW5uaTIgd2lua3MgZGlyZWN0M2QgZGlyZWN0ZHJhdyBkaXJlY3Rzb3VuZCB3aW5zY3JlZW5jYXAgb3N4X3ZpZGVvCisjICAgYXBwbGVfbWVkaWEgYW5kcm9pZF9tZWRpYSBhdmMgY2hyb21hcHJpbnQgZGFhbGEgZHRzIGdtZSBnc20ga2F0ZSBsYWRzcGEgbWltaWMKKyMgICBtcGVnMmVuYyBtcGxleCBvZmEgb3BlbmpwZWcgb3BlbnNsZXMgcHZyIHJlc2luZHZkIHJ0bXAgc291bmR0b3VjaCBzcGFuZHNwIHNwYworIyAgIHNydHAgdmRwYXUgdm9hYWNlbmMgdm9hbXJ3YmVuYyB3YXNhcGkgemJhcgorCitFWFRSQV9PRUNPTkYgKz0gIiBcCisgICAgLS1lbmFibGUtZHZiIFwKKyAgICAtLWVuYWJsZS1zaG0gXAorICAgIC0tZW5hYmxlLWZiZGV2IFwKKyAgICAtLWVuYWJsZS1kZWNrbGluayBcCisgICAgLS1kaXNhYmxlLWFjbSBcCisgICAgLS1kaXNhYmxlLWFuZHJvaWRfbWVkaWEgXAorICAgIC0tZGlzYWJsZS1hcGV4c2luayBcCisgICAgLS1kaXNhYmxlLWFwcGxlX21lZGlhIFwKKyAgICAtLWRpc2FibGUtYXZjIFwKKyAgICAtLWRpc2FibGUtY2hyb21hcHJpbnQgXAorICAgIC0tZGlzYWJsZS1jb2NvYSBcCisgICAgLS1kaXNhYmxlLWRhYWxhIFwKKyAgICAtLWRpc2FibGUtZGMxMzk0IFwKKyAgICAtLWRpc2FibGUtZGlyZWN0M2QgXAorICAgIC0tZGlzYWJsZS1kaXJlY3RkcmF3IFwKKyAgICAtLWRpc2FibGUtZGlyZWN0c291bmQgXAorICAgIC0tZGlzYWJsZS1kdHMgXAorICAgIC0tZGlzYWJsZS1nbWUgXAorICAgIC0tZGlzYWJsZS1nc2V0dGluZ3MgXAorICAgIC0tZGlzYWJsZS1nc20gXAorICAgIC0tZGlzYWJsZS1rYXRlIFwKKyAgICAtLWRpc2FibGUtbGFkc3BhIFwKKyAgICAtLWRpc2FibGUtbGluc3lzIFwKKyAgICAtLWRpc2FibGUtbHYyIFwKKyAgICAtLWRpc2FibGUtbWltaWMgXAorICAgIC0tZGlzYWJsZS1tcGVnMmVuYyBcCisgICAgLS1kaXNhYmxlLW1wbGV4IFwKKyAgICAtLWRpc2FibGUtbXVzZXBhY2sgXAorICAgIC0tZGlzYWJsZS1teXRodHYgXAorICAgIC0tZGlzYWJsZS1uYXMgXAorICAgIC0tZGlzYWJsZS1vZmEgXAorICAgIC0tZGlzYWJsZS1vcGVuanBlZyBcCisgICAgLS1kaXNhYmxlLW9wZW5zbGVzIFwKKyAgICAtLWRpc2FibGUtb3N4X3ZpZGVvIFwKKyAgICAtLWRpc2FibGUtcHZyIFwKKyAgICAtLWRpc2FibGUtcXVpY2t0aW1lIFwKKyAgICAtLWRpc2FibGUtcmVzaW5kdmQgXAorICAgIC0tZGlzYWJsZS1zZGwgXAorICAgIC0tZGlzYWJsZS1zZGx0ZXN0IFwKKyAgICAtLWRpc2FibGUtc25kaW8gXAorICAgIC0tZGlzYWJsZS1zb3VuZHRvdWNoIFwKKyAgICAtLWRpc2FibGUtc3BhbmRzcCBcCisgICAgLS1kaXNhYmxlLXNwYyBcCisgICAgLS1kaXNhYmxlLXNydHAgXAorICAgIC0tZGlzYWJsZS10ZWxldGV4dGRlYyBcCisgICAgLS1kaXNhYmxlLXRpbWlkaXR5IFwKKyAgICAtLWRpc2FibGUtdmNkIFwKKyAgICAtLWRpc2FibGUtdmRwYXUgXAorICAgIC0tZGlzYWJsZS12b2FhY2VuYyBcCisgICAgLS1kaXNhYmxlLXZvYW1yd2JlbmMgXAorICAgIC0tZGlzYWJsZS13YXNhcGkgXAorICAgIC0tZGlzYWJsZS13aWxkbWlkaSBcCisgICAgLS1kaXNhYmxlLXdpbmluZXQgXAorICAgIC0tZGlzYWJsZS13aW5zY3JlZW5jYXAgXAorICAgIC0tZGlzYWJsZS14dmlkIFwKKyAgICAtLWRpc2FibGUtemJhciBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibXgzMiIsICItLWRpc2FibGUteWFkaWYiLCAiIiwgZCl9IFwKKyAgICAiCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCitGSUxFU19nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQtb3BlbmN2ICs9ICIke2RhdGFkaXJ9L2dzdC1wbHVnaW5zLWJhZC8xLjAvb3BlbmN2KiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDEtZ2wtZG8tbm90LWNoZWNrLWZvci1HTC1HTFUtRUdMLUdMRVMyLWxpYnMtaWYtZGlzYWJsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDAxLWdsLWRvLW5vdC1jaGVjay1mb3ItR0wtR0xVLUVHTC1HTEVTMi1saWJzLWlmLWRpc2FibGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyYTMyYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDAxLWdsLWRvLW5vdC1jaGVjay1mb3ItR0wtR0xVLUVHTC1HTEVTMi1saWJzLWlmLWRpc2FibGUucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbSBkZWJhMGRhNDVlYzgyMTIwOWE3ZWQxNDhhNDUyMWQ1NjJlNjUxMmNkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2FybG9zIFJhZmFlbCBHaWFuaSA8ZHZAcHNldWRvdGVybWluYWwub3JnPgorRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAxNDo0NzoyNSArMDIwMAorU3ViamVjdDogW1BBVENIXSBnbDogZG8gbm90IGNoZWNrIGZvciBHTC9HTFUvRUdML0dMRVMyIGxpYnMgaWYgZGlzYWJsZWQgaW4KKyBjb25maWd1cmF0aW9uCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM1NTIyXQorCitTaWduZWQtb2ZmLWJ5OiBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+CistLS0KKyBjb25maWd1cmUuYWMgfCAxNCArKysrKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAxYTQ2YWZiLi5lODVkNGJhIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02NjEsMTAgKzY2MSwxNiBAQCBjYXNlICRob3N0IGluCisgICAgIGZpCisgICA7OworICAgKikKKy0gICAgQUdfR1NUX0NIRUNLX0xJQkhFQURFUihHTCwgR0wsIGdsVGV4SW1hZ2UyRCwsIEdML2dsLmgpCistICAgIEFHX0dTVF9DSEVDS19MSUJIRUFERVIoR0xVLCBHTFUsIGdsdVNwaGVyZSwsIEdML2dsdS5oKQorLSAgICBBR19HU1RfQ0hFQ0tfTElCSEVBREVSKEdMRVMyLCBHTEVTdjIsIGdsVGV4SW1hZ2UyRCwsIEdMRVMyL2dsMi5oKQorLSAgICBBR19HU1RfQ0hFQ0tfTElCSEVBREVSKEVHTCwgRUdMLCBlZ2xHZXRFcnJvciwsIEVHTC9lZ2wuaCkKKysgICAgaWYgdGVzdCAieCRORUVEX0dMIiAhPSAieG5vIjsgdGhlbgorKyAgICAgIEFHX0dTVF9DSEVDS19MSUJIRUFERVIoR0wsIEdMLCBnbFRleEltYWdlMkQsLCBHTC9nbC5oKQorKyAgICAgIEFHX0dTVF9DSEVDS19MSUJIRUFERVIoR0xVLCBHTFUsIGdsdVNwaGVyZSwsIEdML2dsdS5oKQorKyAgICBmaQorKyAgICBpZiB0ZXN0ICJ4JE5FRURfR0xFUzIiICE9ICJ4bm8iOyB0aGVuCisrICAgICAgQUdfR1NUX0NIRUNLX0xJQkhFQURFUihHTEVTMiwgR0xFU3YyLCBnbFRleEltYWdlMkQsLCBHTEVTMi9nbDIuaCkKKysgICAgZmkKKysgICAgaWYgdGVzdCAieCRORUVEX0VHTCIgIT0gInhubyI7IHRoZW4KKysgICAgICBBR19HU1RfQ0hFQ0tfTElCSEVBREVSKEVHTCwgRUdMLCBlZ2xHZXRFcnJvciwsIEVHTC9lZ2wuaCkKKysgICAgZmkKKyAKKyAgICAgb2xkX0xJQlM9JExJQlMKKyAgICAgb2xkX0NGTEFHUz0kQ0ZMQUdTCistLSAKKzEuOC4zLjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkL2NvbmZpZ3VyZS1hbGxvdy10by1kaXNhYmxlLWxpYnNzaDIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvY29uZmlndXJlLWFsbG93LXRvLWRpc2FibGUtbGlic3NoMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTJhZmQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkL2NvbmZpZ3VyZS1hbGxvdy10by1kaXNhYmxlLWxpYnNzaDIucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSBmNTljNTI2OWY5MmQ1OWE1Mjk2Y2JmZWViNjgyZDQyMDk1Y2Q4OGFkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CitEYXRlOiBUaHUsIDE4IFNlcCAyMDE0IDAyOjI0OjA3IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZDogYWxsb3cgdG8gZGlzYWJsZSBsaWJzc2gyCisKK2xpYnNzaDIgaXMgYXV0b21hdGljYWxseSBsaW5rZWQgdG8gaWYgcHJlc2VudCwgdGhpcyB1bmRldGVybWluZWQKK2RlcGVuZGVuY3kgbWF5IGNhdXNlIGJ1aWxkIGVycm9ycyBsaWtlOgorCisgIC4uLi94ODZfNjQtcG9reS1saW51eC80LjkuMC9sZDogY2Fubm90IGZpbmQgLWxzc2gyCisKK2xpYnNzaDIgaXNuJ3QgYW4gb2UtY29yZSByZWNpcGUsIHNvIGFsbG93IHRvIGRpc2FibGUgaXQgZnJvbQorY29uZmlndXJlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAgIDIzICsrKysrKysrKysrKysrKysrLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE3IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDBlOTVjNWMuLjEyMTUzYjQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE5MDEsNiArMTkwMSwxNSBAQCBBR19HU1RfQ0hFQ0tfRkVBVFVSRShDSFJPTUFQUklOVCwgW2Nocm9tYXByaW50XSwgY2hyb21hcHJpbnQsIFsKKyBdKQorIAorIGRubCAqKiogQ3VybCAqKioKKytBQ19BUkdfRU5BQkxFKFtsaWJzc2gyXSwKKysgICAgIFsgIC0tZW5hYmxlLWxpYnNzaDIJCWVuYWJsZSBMSUJTU0gyIHN1cHBvcnQgQDw6QGRlZmF1bHQ9YXV0b0A6PkBdLAorKyAgICAgW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgICAgICAgeWVzKSAgTkVFRF9TU0gyPXllcyA7OworKyAgICAgICBubykgICBORUVEX1NTSDI9bm8gOzsKKysgICAgICAgYXV0bykgTkVFRF9TU0gyPWF1dG8gOzsKKysgICAgICAgKikgQUNfTVNHX0VSUk9SKFtiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1saWJzc2gyXSkgOzsKKysgICAgIGVzYWNdLFtORUVEX1NTSDI9YXV0b10pCisrCisgdHJhbnNsaXQoZG5tLCBtLCBsKSBBTV9DT05ESVRJT05BTChVU0VfQ1VSTCwgdHJ1ZSkKKyBBR19HU1RfQ0hFQ0tfRkVBVFVSRShDVVJMLCBbQ3VybCBwbHVnaW5dLCBjdXJsLCBbCisgICBQS0dfQ0hFQ0tfTU9EVUxFUyhDVVJMLCBsaWJjdXJsID49IDcuMjEuMCwgWworQEAgLTE5MTUsMTIgKzE5MjQsMTQgQEAgQUdfR1NUX0NIRUNLX0ZFQVRVUkUoQ1VSTCwgW0N1cmwgcGx1Z2luXSwgY3VybCwgWworICAgXSkKKyAgIEFDX1NVQlNUKENVUkxfQ0ZMQUdTKQorICAgQUNfU1VCU1QoQ1VSTF9MSUJTKQorLSAgUEtHX0NIRUNLX01PRFVMRVMoU1NIMiwgbGlic3NoMiA+PSAxLjQuMywgWworLSAgICBIQVZFX1NTSDI9InllcyIKKy0gICAgQUNfREVGSU5FKEhBVkVfU1NIMiwgMSwgW0RlZmluZSBpZiBsaWJzc2gyIGlzIGF2YWlsYWJsZV0pCistICBdLCBbCistICAgIEhBVkVfU1NIMj0ibm8iCistICBdKQorKyAgaWYgdGVzdCAieCRORUVEX1NTSDIiICE9ICJ4bm8iOyB0aGVuCisrICAgIFBLR19DSEVDS19NT0RVTEVTKFNTSDIsIGxpYnNzaDIgPj0gMS40LjMsIFsKKysgICAgICBIQVZFX1NTSDI9InllcyIKKysgICAgICBBQ19ERUZJTkUoSEFWRV9TU0gyLCAxLCBbRGVmaW5lIGlmIGxpYnNzaDIgaXMgYXZhaWxhYmxlXSkKKysgICAgXSwgWworKyAgICAgIEhBVkVfU1NIMj0ibm8iCisrICAgIF0pCisrICBmaQorICAgQU1fQ09ORElUSU9OQUwoVVNFX1NTSDIsIHRlc3QgIngkSEFWRV9TU0gyIiA9ICJ4eWVzIikKKyAgIEFDX1NVQlNUKFNTSDJfQ0ZMQUdTKQorICAgQUNfU1VCU1QoU1NIMl9MSUJTKQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZF8xLjQuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZF8xLjQuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTA2NWRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkXzEuNC41LmJiCkBAIC0wLDAgKzEsMTQgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03M2E1ODU1YTgxMTlkZWIwMTdmNWYxM2NmMzI3MDk1ZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvdHRhL2ZpbHRlcnMuaDtiZWdpbmxpbmU9MTI7ZW5kbGluZT0yOTttZDU9OGEwODI3MDY1NmYyZjhhZDdiYjM2NTViODMxMzhlNWEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTIxNjgyZTRlOGZlYTUyNDEzZmQyNmM2MGFjYjkwN2U1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC90dGEvY3JjMzIuaDtiZWdpbmxpbmU9MTI7ZW5kbGluZT0yOTttZDU9MjdkYjI2OWM1NzVkMWU1MzE3ZmZmY2EyZDMzYjNiNTAiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLWdsLWRvLW5vdC1jaGVjay1mb3ItR0wtR0xVLUVHTC1HTEVTMi1saWJzLWlmLWRpc2FibGUucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlMGJiMzk0MTJjZjRhNDhmZTAzOTdiY2YzYTdjZDQ1MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxNTJmYWQ3MjUwNjgzZDcyZjlkZWIzNmM1Njg1NDI4MzM4MzY1ZmU0YTRjODdmZmUxNWUzODc4M2IxNGY5ODNjIgorCitTID0gIiR7V09SS0RJUn0vZ3N0LXBsdWdpbnMtYmFkLSR7UFZ9IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWRfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDk1MDVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkX2dpdC5iYgpAQCAtMCwwICsxLDI2IEBACitERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCisKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03M2E1ODU1YTgxMTlkZWIwMTdmNWYxM2NmMzI3MDk1ZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvdHRhL2ZpbHRlcnMuaDtiZWdpbmxpbmU9MTI7ZW5kbGluZT0yOTttZDU9OGEwODI3MDY1NmYyZjhhZDdiYjM2NTViODMxMzhlNWEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTIxNjgyZTRlOGZlYTUyNDEzZmQyNmM2MGFjYjkwN2U1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC90dGEvY3JjMzIuaDtiZWdpbmxpbmU9MTI7ZW5kbGluZT0yOTttZDU9MjdkYjI2OWM1NzVkMWU1MzE3ZmZmY2EyZDMzYjNiNTAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ1JFViA9ICI2ZTVkYjU3ZDI0NDZhNzUzYWFhNzZiZWUyNjhlMWY5NTYwMGIxNGNlIgorCitQQUNLQUdFQ09ORklHW3NiY10gPSAiLS1lbmFibGUtc2JjLC0tZGlzYWJsZS1zYmMsc2JjIgorUEFDS0FHRUNPTkZJR1tobHNdID0gIi0tZW5hYmxlLWhscywtLWRpc2FibGUtaGxzLGdudXRscyIKKworRVhUUkFfT0VDT05GICs9ICIgXAorICAgIC1kaXNhYmxlLW9wZW5qcGVnIFwKKyAgICAiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWNkICR7U30KKwkuL2F1dG9nZW4uc2ggLS1ub2NvbmZpZ3VyZQorCWNkICR7Qn0KK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2YzZjQwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS5pbmMKQEAgLTAsMCArMSwzOSBAQAorcmVxdWlyZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy5pbmMKKworTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIrIgorCitERVBFTkRTICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd2aXJ0dWFsL2xpYngxMSBsaWJ4dicsICcnLCBkKX0iCitERVBFTkRTICs9ICJmcmVldHlwZSBsaWJvaWwgdXRpbC1saW51eCIKKworaW5oZXJpdCBnZXR0ZXh0CisKK1BBQ0tBR0VTX0RZTkFNSUMgPSsgIl5saWJnc3QuKiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdhbHNhJywgJ2Fsc2EnLCAnJywgZCl9IFwKKyAgICBvcmMgaXZvcmJpcyBvZ2cgdGhlb3JhIHZvcmJpcyBwYW5nbyBcCisgICAgIgorCitYMTFERVBFTkRTID0gInZpcnR1YWwvbGlieDExIGxpYnNtIGxpYnhyZW5kZXIiCitYMTFFTkFCTEVPUFRTID0gIi0tZW5hYmxlLXggLS1lbmFibGUteHZpZGVvIC0tZW5hYmxlLXhzaG0iCitYMTFESVNBQkxFT1BUUyA9ICItLWRpc2FibGUteCAtLWRpc2FibGUteHZpZGVvIC0tZGlzYWJsZS14c2htIgorUEFDS0FHRUNPTkZJR1t4MTFdICAgICA9ICIke1gxMUVOQUJMRU9QVFN9LCR7WDExRElTQUJMRU9QVFN9LCR7WDExREVQRU5EU30iCitQQUNLQUdFQ09ORklHW2Fsc2FdICAgID0gIi0tZW5hYmxlLWFsc2EsLS1kaXNhYmxlLWFsc2EsYWxzYS1saWIiCitQQUNLQUdFQ09ORklHW2l2b3JiaXNdID0gIi0tZW5hYmxlLWl2b3JiaXMsLS1kaXNhYmxlLWl2b3JiaXMsdHJlbW9yIgorUEFDS0FHRUNPTkZJR1tvZ2ddICAgICA9ICItLWVuYWJsZS1vZ2csLS1kaXNhYmxlLW9nZyxsaWJvZ2ciCitQQUNLQUdFQ09ORklHW3RoZW9yYV0gID0gIi0tZW5hYmxlLXRoZW9yYSwtLWRpc2FibGUtdGhlb3JhLGxpYnRoZW9yYSIKK1BBQ0tBR0VDT05GSUdbdm9yYmlzXSAgPSAiLS1lbmFibGUtdm9yYmlzLC0tZGlzYWJsZS12b3JiaXMsbGlidm9yYmlzIgorUEFDS0FHRUNPTkZJR1twYW5nb10gICA9ICItLWVuYWJsZS1wYW5nbywtLWRpc2FibGUtcGFuZ28scGFuZ28iCisKKworIyBjZHBhcmFub2lhIGFuZCBsaWJ2aXN1YWwgZG8gbm90IHNlZW0gdG8gZXhpc3QgYW55d2hlcmUgaW4gT0UKK0VYVFJBX09FQ09ORiArPSAiIFwKKyAgICAtLWRpc2FibGUtZnJlZXR5cGV0ZXN0IFwKKyAgICAtLWRpc2FibGUtY2RwYXJhbm9pYSBcCisgICAgLS1kaXNhYmxlLWxpYnZpc3VhbCBcCisiCisKK0ZJTEVTXyR7TUxQUkVGSVh9bGliZ3N0dGFnLTEuMCArPSAiJHtkYXRhZGlyfS9nc3QtcGx1Z2lucy1iYXNlLzEuMC9saWNlbnNlLXRyYW5zbGF0aW9ucy5kaWN0IgorCitDQUNIRURfQ09ORklHVVJFVkFSU19hcHBlbmRfeDg2ID0gIiBhY19jdl9oZWFkZXJfZW1taW50cmluX2g9bm8gYWNfY3ZfaGVhZGVyX3htbWludHJpbl9oPW5vIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAxLWJhc2V0ZXh0b3ZlcmxheS1tYWtlLW1lbW9yeS1jb3B5LXdoZW4tdmlkZW8tYnVmZmVyLXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDEtYmFzZXRleHRvdmVybGF5LW1ha2UtbWVtb3J5LWNvcHktd2hlbi12aWRlby1idWZmZXItcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2RjYTk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAxLWJhc2V0ZXh0b3ZlcmxheS1tYWtlLW1lbW9yeS1jb3B5LXdoZW4tdmlkZW8tYnVmZmVyLXMucGF0Y2gKQEAgLTAsMCArMSwxMjkgQEAKK0Zyb20gMzc4MWQ0MDk0MGQ0NmQ3ZTZhNTAyMDkyZDI0YWFjNzk5N2Y2ZGE1YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1pbmdrZSBXYW5nIDxtaW5na2Uud2FuZ0BmcmVlc2NhbGUuY29tPgorRGF0ZTogVGh1LCA1IE1hciAyMDE1IDEyOjA2OjIzICswODAwCitTdWJqZWN0OiBbUEFUQ0ggMS80XSBiYXNldGV4dG92ZXJsYXk6IG1ha2UgbWVtb3J5IGNvcHkgd2hlbiB2aWRlbyBidWZmZXIncworIG1lbW9yeSBpcyByZWFkeSBvbmx5CisKKzEuIHNpbmNlIGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSBqdXN0IGxvb2t1cCB0aGUgcmVmY291bnQgdG8gZGV0ZXJtaW5lIGlmCisgICBhIGJ1ZmZlciBpcyB3cml0YWJsZSwgYW5kIGl0IHdpbGwgdXNlIF9nc3RfYnVmZmVyX2NvcHkoKSB3aGljaCBkb24ndAorICAgcGVyZm9ybSBhIGRlZXAgbWVtb3J5IGNvcHkgZXZlbiBpZiB0aGUgZmxhZyBvZiBhIG1lbW9yeSBpcyBzZXQgdG8KKyAgIEdTVF9NRU1PUllfRkxBR19SRUFET05MWS4gU28sIHdlIGRldGVjdCB0aGUgbWVtb3J5IGZsYWcgYW5kIHVzZQorICAgZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiB3aXRoIEdTVF9CVUZGRVJfQ09QWV9ERUVQIHBhcmFtZXRlciB0byBwZXJmb3JtCisgICBkZWVwIG1lbW9yeSBjb3B5LiBpZiB0aGUgYWxsb2NhdG9yIG9mIGEgbWVtb3J5IGRvbid0IHN1cHBvcnQgbWVtX2NvcHkKKyAgIGludGVyZmFjZSwgdGhlIGl0IHdpbGwgcmV0dXJuIE5VTEwsIGlmIHRoaXMgY2FzZSwgd2UgY2FuIHVzZQorICAgZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlKCkgdG8gZ2V0IGEgc2hhcmVkIG1lbW9yeSBidWZmZXIgb3IgdGhlIG9yaWduYWwKKyAgIGJ1ZmZlciBpZiB0aGUgYnVmZmVyJ3MgcmVmY291bnQgaXMgMS4KKzIuICBuZXcgZmVhdHVyZSBpcyBubyBhZGRlZCBpZiBjYXBzIGhhcyBubyBmZWF0dXJlIGR1cmluZyBjYXBzIG5lZ290aWF0aW9uCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ3NDk1XQorCitTaWduZWQtb2ZmLWJ5OiBNaW5na2UgV2FuZyA8bWluZ2tlLndhbmdAZnJlZXNjYWxlLmNvbT4KKworZGlmZiAtLWdpdCBhL2V4dC9wYW5nby9nc3RiYXNldGV4dG92ZXJsYXkuYyBiL2V4dC9wYW5nby9nc3RiYXNldGV4dG92ZXJsYXkuYworaW5kZXggYzkxOTg2MS4uM2MwYTFkNyAxMDA3NTUKKy0tLSBhL2V4dC9wYW5nby9nc3RiYXNldGV4dG92ZXJsYXkuYworKysrIGIvZXh0L3BhbmdvL2dzdGJhc2V0ZXh0b3ZlcmxheS5jCitAQCAtNzQ3LDYgKzc0Nyw3IEBAIGdzdF9iYXNlX3RleHRfb3ZlcmxheV9uZWdvdGlhdGUgKEdzdEJhc2VUZXh0T3ZlcmxheSAqIG92ZXJsYXksIEdzdENhcHMgKiBjYXBzKQorICAgICBpZiAoZiA9PSBOVUxMKSB7CisgICAgICAgZiA9IGdzdF9jYXBzX2ZlYXR1cmVzX25ldworICAgICAgICAgICAoR1NUX0NBUFNfRkVBVFVSRV9NRVRBX0dTVF9WSURFT19PVkVSTEFZX0NPTVBPU0lUSU9OLCBOVUxMKTsKKysgICAgICBnc3RfY2Fwc19zZXRfZmVhdHVyZXMob3ZlcmxheV9jYXBzLCAwLCBmKTsKKyAgICAgfSBlbHNlIHsKKyAgICAgICBnc3RfY2Fwc19mZWF0dXJlc19hZGQgKGYsCisgICAgICAgICAgIEdTVF9DQVBTX0ZFQVRVUkVfTUVUQV9HU1RfVklERU9fT1ZFUkxBWV9DT01QT1NJVElPTik7CitAQCAtMTg5MCwxNiArMTg5MSw3MSBAQCBnc3RfYmFzZV90ZXh0X292ZXJsYXlfcHVzaF9mcmFtZSAoR3N0QmFzZVRleHRPdmVybGF5ICogb3ZlcmxheSwKKyAgIGlmIChnc3RfcGFkX2NoZWNrX3JlY29uZmlndXJlIChvdmVybGF5LT5zcmNwYWQpKQorICAgICBnc3RfYmFzZV90ZXh0X292ZXJsYXlfbmVnb3RpYXRlIChvdmVybGF5LCBOVUxMKTsKKyAKKy0gIHZpZGVvX2ZyYW1lID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlICh2aWRlb19mcmFtZSk7CistCisgICBpZiAob3ZlcmxheS0+YXR0YWNoX2NvbXBvX3RvX2J1ZmZlcikgeworICAgICBHU1RfREVCVUdfT0JKRUNUIChvdmVybGF5LCAiQXR0YWNoaW5nIHRleHQgb3ZlcmxheSBpbWFnZSB0byB2aWRlbyBidWZmZXIiKTsKKysgICAgdmlkZW9fZnJhbWUgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKHZpZGVvX2ZyYW1lKTsKKyAgICAgZ3N0X2J1ZmZlcl9hZGRfdmlkZW9fb3ZlcmxheV9jb21wb3NpdGlvbl9tZXRhICh2aWRlb19mcmFtZSwKKyAgICAgICAgIG92ZXJsYXktPmNvbXBvc2l0aW9uKTsKKyAgICAgLyogRklYTUU6IGVtdWxhdGUgc2hhZGVkIGJhY2tncm91bmQgYm94IGlmIHdhbnRfc2hhZGluZz10cnVlICovCisgICAgIGdvdG8gZG9uZTsKKyAgIH0KKyAKKysgIGdpbnQgbSA9IGdzdF9idWZmZXJfbl9tZW1vcnkodmlkZW9fZnJhbWUpOworKyAgZ2Jvb2xlYW4gbWVtX3Jkb25seSA9IEZBTFNFOworKyAgR3N0TWVtb3J5ICptZW07CisrICBHc3RCdWZmZXIgKm9yaWcgPSB2aWRlb19mcmFtZTsKKysKKysgIHdoaWxlICgtLW0+PTApIHsKKysgICAgbWVtID0gZ3N0X2J1ZmZlcl9nZXRfbWVtb3J5KHZpZGVvX2ZyYW1lLCBtKTsKKysgICAgaWYgKEdTVF9NRU1PUllfSVNfUkVBRE9OTFkobWVtKSkgeworKyAgICAgIG1lbV9yZG9ubHkgPSBUUlVFOworKyAgICAgIGdzdF9tZW1vcnlfdW5yZWYgKG1lbSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgZ3N0X21lbW9yeV91bnJlZiAobWVtKTsKKysgIH0KKysKKysgIGlmIChtZW1fcmRvbmx5KSB7CisrICAgIC8vIHNpbmNlIGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSBqdXN0IGxvb2t1cCB0aGUgcmVmY291bnQgdG8gZGV0ZXJtaW5lIGlmCisrICAgIC8vIGEgYnVmZmVyIGlzIHdyaXRhYmxlLCBhbmQgaXQgd2lsbCB1c2UgX2dzdF9idWZmZXJfY29weSgpIHdoaWNoIGRvbid0CisrICAgIC8vIHBlcmZvcm0gYSBkZWVwIG1lbW9yeSBjb3B5IGV2ZW4gaWYgdGhlIGZsYWcgb2YgYSBtZW1vcnkgaXMgc2V0IHRvCisrICAgIC8vIEdTVF9NRU1PUllfRkxBR19SRUFET05MWS4gU28sIHdlIGRldGVjdCB0aGUgbWVtb3J5IGZsYWcgYW5kIHVzZQorKyAgICAvLyBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIHdpdGggR1NUX0JVRkZFUl9DT1BZX0RFRVAgcGFyYW1ldGVyIHRvIHBlcmZvcm0KKysgICAgLy8gZGVlcCBtZW1vcnkgY29weS4gaWYgdGhlIGFsbG9jYXRvciBvZiBhIG1lbW9yeSBkb24ndCBzdXBwb3J0IG1lbV9jb3B5CisrICAgIC8vIGludGVyZmFjZSwgdGhlIGl0IHdpbGwgcmV0dXJuIE5VTEwsIGlmIHRoaXMgY2FzZSwgd2UgY2FuIHVzZQorKyAgICAvLyBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUoKSB0byBnZXQgYSBzaGFyZWQgbWVtb3J5IGJ1ZmZlciBvciB0aGUgb3JpZ25hbAorKyAgICAvLyBidWZmZXIgaWYgdGhlIGJ1ZmZlcidzIHJlZmNvdW50IGlzIDEuCisrICAgIEdzdEJ1ZmZlciAqbmV3X2J1ZiA9IGdzdF9idWZmZXJfY29weV9yZWdpb24gKHZpZGVvX2ZyYW1lLAorKyAgICAgICAgR1NUX0JVRkZFUl9DT1BZX0FMTCB8IEdTVF9CVUZGRVJfQ09QWV9ERUVQLCAwLCAtMSk7CisrCisrICAgIEdTVF9ERUJVR19PQkpFQ1QgKG92ZXJsYXksICJjb3B5ICVzIHZpZGVvIGZyYW1lIGJ1ZmZlciAlcCAtPiAlcCIsCisrICAgICAgICBnX3R5cGVfbmFtZSAoR1NUX01JTklfT0JKRUNUX1RZUEUgKHZpZGVvX2ZyYW1lKSksIHZpZGVvX2ZyYW1lLCBuZXdfYnVmKTsKKysKKysgICAgaWYgKCFuZXdfYnVmKSB7CisrICAgICAgLy9tYXliZSB0aGUgYWxsb2NhdG9yIGRvbid0IHN1cHBvcnQgbWVtX2NvcHkgaW50ZXJmYWNlLCB0aGUgd2UganVzdCB1c2UKKysgICAgICAvL2dzdF9idWZmZXJfbWFrZV93cml0YWJsZSgpIHRvIGdldCBhIHdyaXRhYmxlIGJ1ZmZlci4KKysgICAgICB2aWRlb19mcmFtZSA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAodmlkZW9fZnJhbWUpOworKyAgICB9IGVsc2UgeworKyAgICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAodmlkZW9fZnJhbWUpOworKyAgICAgIEdTVF9CVUZGRVJfRkxBR19VTlNFVCAobmV3X2J1ZiwgR1NUX0JVRkZFUl9GTEFHX1RBR19NRU1PUlkpOworKyAgICAgIHZpZGVvX2ZyYW1lID0gbmV3X2J1ZjsKKysgICAgfQorKworKyAgICBpZiAoIXZpZGVvX2ZyYW1lKSB7CisrICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChvdmVybGF5LCAibWFrZSB3cml0YWJsZSBidWZmZXIgZmFpbGVkIik7CisrICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworKyAgICB9CisrCisrICAgIG0gPSBnc3RfYnVmZmVyX25fbWVtb3J5KHZpZGVvX2ZyYW1lKTsKKysgICAgd2hpbGUgKC0tbT49MCkgeworKyAgICAgIG1lbSA9IGdzdF9idWZmZXJfZ2V0X21lbW9yeSh2aWRlb19mcmFtZSwgbSk7CisrICAgICAgR1NUX01FTU9SWV9GTEFHX1VOU0VUIChtZW0sIEdTVF9NRU1PUllfRkxBR19SRUFET05MWSk7CisrICAgICAgZ3N0X21lbW9yeV91bnJlZiAobWVtKTsKKysgICAgfQorKyAgfSBlbHNlIHsKKysgICAgdmlkZW9fZnJhbWUgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKHZpZGVvX2ZyYW1lKTsKKysgIH0KKysKKyAgIGlmICghZ3N0X3ZpZGVvX2ZyYW1lX21hcCAoJmZyYW1lLCAmb3ZlcmxheS0+aW5mbywgdmlkZW9fZnJhbWUsCisgICAgICAgICAgIEdTVF9NQVBfUkVBRFdSSVRFKSkKKyAgICAgZ290byBpbnZhbGlkX2ZyYW1lOworQEAgLTE5MTgsNiArMTk3NCwxOCBAQCBnc3RfYmFzZV90ZXh0X292ZXJsYXlfcHVzaF9mcmFtZSAoR3N0QmFzZVRleHRPdmVybGF5ICogb3ZlcmxheSwKKyAKKyAgIGdzdF92aWRlb19mcmFtZV91bm1hcCAoJmZyYW1lKTsKKyAKKysgIGlmIChtZW1fcmRvbmx5ICYmIG9yaWcgPT0gdmlkZW9fZnJhbWUpIHsKKysgICAgLy9pZiB3ZSB1c2VkIHRoZSBvcmlnaW5hbCBidWZmZXIgYW5kIGl0J3MgbWVtIGlzIHNldCB0byByZWFkIG9ubHksCisrICAgIC8vcmVjb3ZlciB0aGUgbWVtb3J5IHJlYWR5IG9ubHkgZmxhZyBzaW5jZSB3ZSB1bnNldCBpdCBiZWZvcmUKKysgICAgLy8gZ3N0X3ZpZGVvX2ZyYW1lX21hcCAoKQorKyAgICBtID0gZ3N0X2J1ZmZlcl9uX21lbW9yeSh2aWRlb19mcmFtZSk7CisrICAgIHdoaWxlICgtLW0+PTApIHsKKysgICAgICBtZW0gPSBnc3RfYnVmZmVyX2dldF9tZW1vcnkodmlkZW9fZnJhbWUsIG0pOworKyAgICAgIEdTVF9NRU1PUllfRkxBR1MobWVtKSB8PSAoR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZKTsKKysgICAgICBnc3RfbWVtb3J5X3VucmVmIChtZW0pOworKyAgICB9CisrICB9CisrCisgZG9uZToKKyAKKyAgIHJldHVybiBnc3RfcGFkX3B1c2ggKG92ZXJsYXktPnNyY3BhZCwgdmlkZW9fZnJhbWUpOworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMS12aWRlby1mcmFtZS1Eb24tdC1yZWYtYnVmZmVycy10d2ljZS13aGVuLW1hcHBpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDEtdmlkZW8tZnJhbWUtRG9uLXQtcmVmLWJ1ZmZlcnMtdHdpY2Utd2hlbi1tYXBwaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYjQ3MjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDEtdmlkZW8tZnJhbWUtRG9uLXQtcmVmLWJ1ZmZlcnMtdHdpY2Utd2hlbi1tYXBwaW5nLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK0Zyb20gMjY5ZjY0MmM0NWQ4NWNmZDYzMGVkNDkwNDc4ZTZiZDZiNzFhNzY3ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9TZWJhc3RpYW49MjBEcj1DMz1CNmdlPz0gPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+CitEYXRlOiBUdWUsIDE2IFNlcCAyMDE0IDAxOjA3OjE4ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIHZpZGVvLWZyYW1lOiBEb24ndCByZWYgYnVmZmVycyB0d2ljZSB3aGVuIG1hcHBpbmcKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbMS41LjFdCistLS0KKyBnc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuYyB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5jIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmMKK2luZGV4IDAxZjIzYzAuLjhhOWFlOTYgMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuYworKysrIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmMKK0BAIC0xMDUsNyArMTA1LDcgQEAgZ3N0X3ZpZGVvX2ZyYW1lX21hcF9pZCAoR3N0VmlkZW9GcmFtZSAqIGZyYW1lLCBHc3RWaWRlb0luZm8gKiBpbmZvLAorICAgICAgIGZyYW1lLT5kYXRhW2ldID0gZnJhbWUtPm1hcFswXS5kYXRhICsgaW5mby0+b2Zmc2V0W2ldOworICAgICB9CisgICB9CistICBmcmFtZS0+YnVmZmVyID0gZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcik7CisrICBmcmFtZS0+YnVmZmVyID0gYnVmZmVyOworICAgaWYgKChmbGFncyAmIEdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYpID09IDApCisgICAgIGdzdF9idWZmZXJfcmVmIChmcmFtZS0+YnVmZmVyKTsKKyAKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDItZ3N0cGxheXNpbmstZG9uLXQtc2V0LWFzeW5jLW9mLWN1c3RvbS10ZXh0LXNpbmstdG8tZi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMi1nc3RwbGF5c2luay1kb24tdC1zZXQtYXN5bmMtb2YtY3VzdG9tLXRleHQtc2luay10by1mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YzE0NmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDItZ3N0cGxheXNpbmstZG9uLXQtc2V0LWFzeW5jLW9mLWN1c3RvbS10ZXh0LXNpbmstdG8tZi5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDBhNzg1NTVlYTZjOGMyZjFlZTI3ZWU0NzA3ZThkN2FhMDBhYjdhNjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaW5na2UgV2FuZyA8bWluZ2tlLndhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFRodSwgMTkgTWFyIDIwMTUgMTQ6MTU6MjUgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAyLzRdIGdzdHBsYXlzaW5rOiBkb24ndCBzZXQgYXN5bmMgb2YgY3VzdG9tIHRleHQtc2luayB0bworIGZhbHNlCisKK3NldCBhc3luYyB0byBmYWxzZSBsZWFkIHRvIEEvViBzeW5jIHByb2JsZW0gd2hlbiBzZWVraW5nLgordGhlIHByZXJvbGwgbmVlZCB1c2UgR0FQIGV2ZW50IGluc3RlYWQgb2Ygc2V0IGFzeW5jIHRvIGZhbHNlLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzQ5OV0KKworU2lnbmVkLW9mZi1ieTogTWluZ2tlIFdhbmcgPG1pbmdrZS53YW5nQGZyZWVzY2FsZS5jb20+CisKK2RpZmYgLS1naXQgYS9nc3QvcGxheWJhY2svZ3N0cGxheXNpbmsuYyBiL2dzdC9wbGF5YmFjay9nc3RwbGF5c2luay5jCitvbGQgbW9kZSAxMDA2NDQKK25ldyBtb2RlIDEwMDc1NQoraW5kZXggZjVhMmQ0Mi4uZmJhMDE3MgorLS0tIGEvZ3N0L3BsYXliYWNrL2dzdHBsYXlzaW5rLmMKKysrKyBiL2dzdC9wbGF5YmFjay9nc3RwbGF5c2luay5jCitAQCAtMjQwOCw3ICsyNDA4LDcgQEAgZ2VuX3RleHRfY2hhaW4gKEdzdFBsYXlTaW5rICogcGxheXNpbmspCisgICAgICAgICAgIEdfVFlQRV9CT09MRUFOKTsKKyAgICAgICBpZiAoZWxlbSkgeworICAgICAgICAgLyogbWFrZSBzdXJlIHRoZSBzcGFyc2Ugc3VidGl0bGVzIGRvbid0IHBhcnRpY2lwYXRlIGluIHRoZSBwcmVyb2xsICovCistICAgICAgICBnX29iamVjdF9zZXQgKGVsZW0sICJhc3luYyIsIEZBTFNFLCBOVUxMKTsKKysgICAgICAgIC8vZ19vYmplY3Rfc2V0IChlbGVtLCAiYXN5bmMiLCBGQUxTRSwgTlVMTCk7CisgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwbGF5c2luaywgImFkZGluZyBjdXN0b20gdGV4dCBzaW5rIik7CisgICAgICAgICBnc3RfYmluX2FkZCAoYmluLCBjaGFpbi0+c2luayk7CisgICAgICAgICAvKiBOT1RFIHN0cmVhbXN5bmNocm9uaXplciBuZWVkcyBzdHJlYW1zIGRlY291cGxlZCAqLworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMi12aWRlby1mcmFtZS1BZGQtR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMi12aWRlby1mcmFtZS1BZGQtR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDY1YjVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAyLXZpZGVvLWZyYW1lLUFkZC1HU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGLnBhdGNoCkBAIC0wLDAgKzEsODcgQEAKK0Zyb20gNDBhMjkzZDQ0ZDFhZWNjZjVlYjhlODZmMjNhMGIxMzY2NjExMWM1YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9TZWJhc3RpYW49MjBEcj1DMz1CNmdlPz0gPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+CitEYXRlOiBGcmksIDEyIFNlcCAyMDE0IDE0OjM5OjE2ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMi8zXSB2aWRlby1mcmFtZTogQWRkIEdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYKKworVGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlIGJ1ZmZlciBpcyBub3QgcmVmZmVkIGFub3RoZXIgdGltZSB3aGVuCitzdG9yaW5nIGl0IGluIHRoZSBHc3RWaWRlb0ZyYW1lLCBrZWVwaW5nIGl0IHdyaXRhYmxlIGlmIGl0IHdhcword3JpdGFibGUuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgWzEuNS4xXQoraHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNjExOAorLS0tCisgZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmMgfCAgICA5ICsrKysrKysrLQorIGdzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5oIHwgICAxOCArKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDI2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5jIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmMKK2luZGV4IDUzN2NmNzAuLjAxZjIzYzAgMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuYworKysrIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmMKK0BAIC0xMDYsNiArMTA2LDkgQEAgZ3N0X3ZpZGVvX2ZyYW1lX21hcF9pZCAoR3N0VmlkZW9GcmFtZSAqIGZyYW1lLCBHc3RWaWRlb0luZm8gKiBpbmZvLAorICAgICB9CisgICB9CisgICBmcmFtZS0+YnVmZmVyID0gZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcik7CisrICBpZiAoKGZsYWdzICYgR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRikgPT0gMCkKKysgICAgZ3N0X2J1ZmZlcl9yZWYgKGZyYW1lLT5idWZmZXIpOworKworICAgZnJhbWUtPm1ldGEgPSBtZXRhOworIAorICAgLyogYnVmZmVyIGZsYWdzIGVuaGFuY2UgdGhlIGZyYW1lIGZsYWdzICovCitAQCAtMTg5LDExICsxOTIsMTMgQEAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwIChHc3RWaWRlb0ZyYW1lICogZnJhbWUpCisgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKKyAgIEdzdFZpZGVvTWV0YSAqbWV0YTsKKyAgIGdpbnQgaTsKKysgIEdzdE1hcEZsYWdzIGZsYWdzOworIAorICAgZ19yZXR1cm5faWZfZmFpbCAoZnJhbWUgIT0gTlVMTCk7CisgCisgICBidWZmZXIgPSBmcmFtZS0+YnVmZmVyOworICAgbWV0YSA9IGZyYW1lLT5tZXRhOworKyAgZmxhZ3MgPSBmcmFtZS0+bWFwWzBdLmZsYWdzOworIAorICAgaWYgKG1ldGEpIHsKKyAgICAgZm9yIChpID0gMDsgaSA8IGZyYW1lLT5pbmZvLmZpbmZvLT5uX3BsYW5lczsgaSsrKSB7CitAQCAtMjAyLDcgKzIwNyw5IEBAIGdzdF92aWRlb19mcmFtZV91bm1hcCAoR3N0VmlkZW9GcmFtZSAqIGZyYW1lKQorICAgfSBlbHNlIHsKKyAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmZnJhbWUtPm1hcFswXSk7CisgICB9CistICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworKworKyAgaWYgKChmbGFncyAmIEdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYpID09IDApCisrICAgIGdzdF9idWZmZXJfdW5yZWYgKGZyYW1lLT5idWZmZXIpOworIH0KKyAKKyAvKioKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuaCBiL2dzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5oCitpbmRleCA2MjdmYWIwLi5mOGU2MzA0IDEwMDY0NAorLS0tIGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmgKKysrKyBiL2dzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5oCitAQCAtMTQ5LDYgKzE0OSwyNCBAQCB0eXBlZGVmIGVudW0geworICAgR1NUX1ZJREVPX0JVRkZFUl9GTEFHX0xBU1QgICAgICAgID0gKEdTVF9CVUZGRVJfRkxBR19MQVNUIDw8IDgpCisgfSBHc3RWaWRlb0J1ZmZlckZsYWdzOworIAorKy8qKgorKyAqIEdzdFZpZGVvQnVmZmVyRmxhZ3M6CisrICogQEdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUY6ICBEb24ndCB0YWtlIGFub3RoZXIgcmVmZXJlbmNlIG9mIHRoZSBidWZmZXIgYW5kIHN0b3JlIGl0IGluCisrICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgR3N0VmlkZW9GcmFtZS4gVGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlIGJ1ZmZlciBzdGF5cworKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGFibGUgd2hpbGUgdGhlIGZyYW1lIGlzIG1hcHBlZCwgYnV0IHJlcXVpcmVzIHRoYXQgdGhlCisrICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgcmVmZXJlbmNlIHN0YXlzIHZhbGlkIHVudGlsIHRoZSBmcmFtZSBpcyB1bm1hcHBlZCBhZ2Fpbi4KKysgKiBAR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX0xBU1Q6ICAgIE9mZnNldCB0byBkZWZpbmUgbW9yZSBmbGFncworKyAqCisrICogQWRkaXRpb25hbCBtYXBwaW5nIGZsYWdzIGZvciBnc3RfdmlkZW9fZnJhbWVfbWFwKCkuCisrICoKKysgKiBTaW5jZTogMS42CisrICovCisrdHlwZWRlZiBlbnVtIHsKKysgIEdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYgICA9IChHU1RfTUFQX0ZMQUdfTEFTVCA8PCAwKSwKKysgIEdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19MQVNUICAgICA9IChHU1RfTUFQX0ZMQUdfTEFTVCA8PCA4KQorKyAgLyogOCBtb3JlIGZsYWdzIHBvc3NpYmxlIGFmdGVyd2FyZHMgKi8KKyt9IEdzdFZpZGVvRnJhbWVNYXBGbGFnczsKKysKKyBHX0VORF9ERUNMUworIAorICNlbmRpZiAvKiBfX0dTVF9WSURFT19GUkFNRV9IX18gKi8KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDMtc3NhcGFyc2UtZW5oYW5jZS1TU0EtdGV4dC1saW5lcy1wYXJzaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAzLXNzYXBhcnNlLWVuaGFuY2UtU1NBLXRleHQtbGluZXMtcGFyc2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmJlYmQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAzLXNzYXBhcnNlLWVuaGFuY2UtU1NBLXRleHQtbGluZXMtcGFyc2luZy5wYXRjaApAQCAtMCwwICsxLDIyNSBAQAorRnJvbSBiZTYxNjNjZmEzYTI1NTQ5M2Y5ZDc1YmFkOTU0MWNiZmUxNzIzZmVlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWluZ2tlIFdhbmcgPG1pbmdrZS53YW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiBUaHUsIDE5IE1hciAyMDE1IDE0OjE3OjEwICswODAwCitTdWJqZWN0OiBbUEFUQ0ggMy80XSBzc2FwYXJzZTogZW5oYW5jZSBTU0EgdGV4dCBsaW5lcyBwYXJzaW5nLgorCitzb21lIHBhcnNlciB3aWxsIHBhc3MgaW4gdGhlIG9yaWdpbmFsIHNzYSB0ZXh0IGxpbmUgd2hpY2ggc3RhcnRzIHdpdGggIkRpYWxvZzoiCithbmQgdGhlcmUncyBhcmUgbWF5YmUgbXVsdGlwbGUgRGlhbG9nIGxpbmVzIGluIG9uZSBpbnB1dCBidWZmZXIuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ3NDk2XQorCitTaWduZWQtb2ZmLWJ5OiBNaW5na2UgV2FuZyA8bWluZ2tlLndhbmdAZnJlZXNjYWxlLmNvbT4KKworZGlmZiAtLWdpdCBhL2dzdC9zdWJwYXJzZS9nc3Rzc2FwYXJzZS5jIGIvZ3N0L3N1YnBhcnNlL2dzdHNzYXBhcnNlLmMKK29sZCBtb2RlIDEwMDY0NAorbmV3IG1vZGUgMTAwNzU1CitpbmRleCAwNmVjZWY5Li4wYWI1ZGNlCistLS0gYS9nc3Qvc3VicGFyc2UvZ3N0c3NhcGFyc2UuYworKysrIGIvZ3N0L3N1YnBhcnNlL2dzdHNzYXBhcnNlLmMKK0BAIC0yNjAsNiArMjYwLDcgQEAgZ3N0X3NzYV9wYXJzZV9yZW1vdmVfb3ZlcnJpZGVfY29kZXMgKEdzdFNzYVBhcnNlICogcGFyc2UsIGdjaGFyICogdHh0KQorICAqIGdzdF9zc2FfcGFyc2VfcHVzaF9saW5lOgorICAqIEBwYXJzZTogY2FsbGVyIGVsZW1lbnQKKyAgKiBAdHh0OiB0ZXh0IHRvIHB1c2gKKysgKiBAc2l6ZTogdGV4dCBzaXplIG5lZWQgdG8gYmUgcGFyc2UKKyAgKiBAc3RhcnQ6IHRpbWVzdGFtcCBmb3IgdGhlIGJ1ZmZlcgorICAqIEBkdXJhdGlvbjogZHVyYXRpb24gZm9yIHRoZSBidWZmZXIKKyAgKgorQEAgLTI2OSwyNyArMjcwLDEzMyBAQCBnc3Rfc3NhX3BhcnNlX3JlbW92ZV9vdmVycmlkZV9jb2RlcyAoR3N0U3NhUGFyc2UgKiBwYXJzZSwgZ2NoYXIgKiB0eHQpCisgICogUmV0dXJuczogcmVzdWx0IG9mIHRoZSBwdXNoIG9mIHRoZSBjcmVhdGVkIGJ1ZmZlcgorICAqLworIHN0YXRpYyBHc3RGbG93UmV0dXJuCistZ3N0X3NzYV9wYXJzZV9wdXNoX2xpbmUgKEdzdFNzYVBhcnNlICogcGFyc2UsIGdjaGFyICogdHh0LAorK2dzdF9zc2FfcGFyc2VfcHVzaF9saW5lIChHc3RTc2FQYXJzZSAqIHBhcnNlLCBnY2hhciAqIHR4dCwgZ2ludCBzaXplLAorICAgICBHc3RDbG9ja1RpbWUgc3RhcnQsIEdzdENsb2NrVGltZSBkdXJhdGlvbikKKyB7CisgICBHc3RGbG93UmV0dXJuIHJldDsKKyAgIEdzdEJ1ZmZlciAqYnVmOworLSAgZ2NoYXIgKnQsICplc2NhcGVkOworKyAgZ2NoYXIgKnQsICp0ZXh0LCAqcCwgKmVzY2FwZWQsICpwX3N0YXJ0LCAqcF9lbmQ7CisgICBnaW50IG51bSwgaSwgbGVuOworKyAgR3N0Q2xvY2tUaW1lIHN0YXJ0X3RpbWUgPSBHX01BWFVJTlQ2NCwgZW5kX3RpbWUgPSAwOworIAorLSAgbnVtID0gYXRvaSAodHh0KTsKKy0gIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgIlBhcnNpbmcgbGluZSAjJWQgYXQgJSIgR1NUX1RJTUVfRk9STUFULAorLSAgICAgIG51bSwgR1NUX1RJTUVfQVJHUyAoc3RhcnQpKTsKKy0KKy0gIC8qIHNraXAgYWxsIG5vbi10ZXh0IGZpZWxkcyBiZWZvcmUgdGhlIGFjdHVhbCB0ZXh0ICovCisrICBwID0gdGV4dCA9IGdfbWFsbG9jKHNpemUgKyAxKTsKKysgICpwID0gJ1wwJzsKKyAgIHQgPSB0eHQ7CistICBmb3IgKGkgPSAwOyBpIDwgODsgKytpKSB7CistICAgIHQgPSBzdHJjaHIgKHQsICcsJyk7CisrCisrICAvKiB0aGVyZSBhcmUgbWF5IGhhdmUgbXVsdGlwbGUgZGlhbG9ndWUgbGluZXMgYXQgYSB0aW1lICovCisrICB3aGlsZSAoKnQpIHsKKysgICAgLyogaWdub3JlIGxlYWRpbmcgd2hpdGUgc3BhY2UgY2hhcmFjdGVycyAqLworKyAgICB3aGlsZSAoaXNzcGFjZSgqdCkpCisrICAgICAgdCsrOworKworKyAgICAvKiBpZ25vcmUgRm9ybWF0OiBhbmQgU3R5bGU6IGxpbmVzICovCisrICAgIGlmIChzdHJuY21wKHQsICJGb3JtYXQ6IiwgNykgPT0gMCB8fCBzdHJuY21wKHQsICJTdHlsZToiLCA2KSA9PSAwKSB7CisrICAgICAgd2hpbGUgKCp0ICE9ICdcMCcgJiYgKnQgIT0gJ1xuJykgeworKyAgICAgICAgdCsrOworKyAgICAgIH0KKysgICAgfQorKworKyAgICBpZiAoKnQgPT0gJ1wwJykKKysgICAgICBicmVhazsKKysKKysgICAgLyogY29udGludWUgd2l0aCBuZXh0IGxpbmUgKi8KKysgICAgaWYgKCp0ID09ICdcbicpIHsKKysgICAgICB0Kys7CisrICAgICAgY29udGludWU7CisrICAgIH0KKysKKysgICAgaWYoc3RybmNtcCh0LCAiRGlhbG9ndWU6IiwgOSkgIT0gMCkgeworKyAgICAgIC8qIG5vdCBzdGFydGVkIHdpdGggIkRpYWxvZ3VlOiIsIGl0IG11c3QgYmUgYSBsaW5lIHRyaW1tZWQgYnkgZGVtdXhlciAqLworKyAgICAgIG51bSA9IGF0b2kgKHQpOworKyAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgIlBhcnNpbmcgbGluZSAjJWQgYXQgJSIgR1NUX1RJTUVfRk9STUFULAorKyAgICAgICAgICBudW0sIEdTVF9USU1FX0FSR1MgKHN0YXJ0KSk7CisrCisrICAgICAgLyogc2tpcCBhbGwgbm9uLXRleHQgZmllbGRzIGJlZm9yZSB0aGUgYWN0dWFsIHRleHQgKi8KKysgICAgICBmb3IgKGkgPSAwOyBpIDwgODsgKytpKSB7CisrICAgICAgICB0ID0gc3RyY2hyICh0LCAnLCcpOworKyAgICAgICAgaWYgKHQgPT0gTlVMTCkKKysgICAgICAgICAgYnJlYWs7CisrICAgICAgICArK3Q7CisrICAgICAgfQorKyAgICB9IGVsc2UgeworKyAgICAgIC8qIHN0YXJ0ZWQgd2l0aCAiRGlhbG9ndWU6IiwgdXBkYXRlIHRpbWVzdGFtcCBhbmQgZHVyYXRpb24gKi8KKysgICAgICAvKiB0aW1lIGZvcm1hdCBhcmUgbGlrZSBEaWFsb2c6TWFyaywwOjAwOjAxLjAyLDA6MDA6MDMuMDQseHgseHh4LC4uLiAqLworKyAgICAgIGd1aW50IGhvdXIsIG1pbiwgc2VjLCBtc2VjLCBsZW47CisrICAgICAgR3N0Q2xvY2tUaW1lIHRtcDsKKysgICAgICBnY2hhciB0X3N0clsxMl0gPSB7MH07CisrCisrICAgICAgLyogZmluZCB0aGUgZmlyc3QgJywnICovCisrICAgICAgcF9zdGFydCA9IHN0cmNociAodCwgJywnKTsKKysgICAgICBpZiAocF9zdGFydCkKKysgICAgICAgIHBfZW5kID0gc3RyY2hyICgrK3Bfc3RhcnQsICcsJyk7CisrCisrICAgICAgaWYgKHBfc3RhcnQgJiYgcF9lbmQpIHsKKysgICAgICAgIC8qIGNvcHkgdGV4dCBiZXR3ZWVuIGZpcnN0ICcsJyBhbmQgc2Vjb25kICcsJyAqLworKyAgICAgICAgc3RybmNweSh0X3N0ciwgcF9zdGFydCwgcF9lbmQgLSBwX3N0YXJ0KTsKKysgICAgICAgIGlmIChzc2NhbmYgKHRfc3RyLCAiJXU6JXU6JXUuJXUiLCAmaG91ciwgJm1pbiwgJnNlYywgJm1zZWMpID09IDQpIHsKKysgICAgICAgICAgdG1wID0gKChob3VyKjM2MDApICsgKG1pbio2MCkgKyBzZWMpICogR1NUX1NFQ09ORCArIG1zZWMqR1NUX01TRUNPTkQ7CisrICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiR2V0IHN0YXJ0IHRpbWU6JTAyZDolMDJkOiUwMmQ6JTAzZFxuIiwKKysgICAgICAgICAgICAgIGhvdXIsIG1pbiwgc2VjLCBtc2VjKTsKKysgICAgICAgICAgaWYgKHN0YXJ0X3RpbWUgPiB0bXApCisrICAgICAgICAgICAgc3RhcnRfdGltZSA9IHRtcDsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocGFyc2UsCisrICAgICAgICAgICAgICAiZmFpbGVkIHRvIHBhcnNlIHNzYSBzdGFydCB0aW1lc3RhbXAgc3RyaW5nIDolcyIsIHRfc3RyKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHBfc3RhcnQgPSBwX2VuZDsKKysgICAgICAgIHBfZW5kID0gc3RyY2hyICgrK3Bfc3RhcnQsICcsJyk7CisrICAgICAgICBpZiAocF9lbmQpIHsKKysgICAgICAgICAgLyogY29weSB0ZXh0IGJldHdlZW4gc2Vjb25kICcsJyBhbmQgdGhpcmQgJywnICovCisrICAgICAgICAgIHN0cm5jcHkodF9zdHIsIHBfc3RhcnQsIHBfZW5kIC0gcF9zdGFydCk7CisrICAgICAgICAgIGlmIChzc2NhbmYgKHRfc3RyLCAiJXU6JXU6JXUuJXUiLCAmaG91ciwgJm1pbiwgJnNlYywgJm1zZWMpID09IDQpIHsKKysgICAgICAgICAgICB0bXAgPSAoKGhvdXIqMzYwMCkgKyAobWluKjYwKSArIHNlYykqR1NUX1NFQ09ORCArIG1zZWMqR1NUX01TRUNPTkQ7CisrICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwYXJzZSwgIkdldCBlbmQgdGltZTolMDJkOiUwMmQ6JTAyZDolMDNkXG4iLAorKyAgICAgICAgICAgICAgICBob3VyLCBtaW4sIHNlYywgbXNlYyk7CisrICAgICAgICAgICAgaWYgKGVuZF90aW1lIDwgdG1wKQorKyAgICAgICAgICAgICAgZW5kX3RpbWUgPSB0bXA7CisrICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYXJzZSwKKysgICAgICAgICAgICAgICAgImZhaWxlZCB0byBwYXJzZSBzc2EgZW5kIHRpbWVzdGFtcCBzdHJpbmcgOiVzIiwgdF9zdHIpOworKyAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgfQorKworKyAgICAgIC8qIG5vdyBza2lwIGFsbCBub24tdGV4dCBmaWVsZHMgYmVmb3JlIHRoZSBhY3R1YWwgdGV4dCAqLworKyAgICAgIGZvciAoaSA9IDA7IGkgPD0gODsgKytpKSB7CisrICAgICAgICB0ID0gc3RyY2hyICh0LCAnLCcpOworKyAgICAgICAgaWYgKHQgPT0gTlVMTCkKKysgICAgICAgICAgYnJlYWs7CisrICAgICAgICArK3Q7CisrICAgICAgfQorKyAgICB9CisrCisrICAgIC8qIGxpbmUgZW5kIGJlZm9yZSBleHBlY3RlZCBudW1iZXIgb2YgJywnLCBub3QgYSBEaWFsb2d1ZSBsaW5lICovCisgICAgIGlmICh0ID09IE5VTEwpCistICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOworLSAgICArK3Q7CisrICAgICAgYnJlYWs7CisrCisrICAgIC8qIGlmIG5vdCB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBsYXN0IGNoYXJhY3RlciBvZiBwcmV2aW91cyBsaW5lIGlzICdcMCcsCisrICAgICAqIHRoZW4gcmVwbGFjZSBpdCB3aXRoICdcTicgKi8KKysgICAgaWYgKHAgIT0gdGV4dCAmJiAqcCA9PSAnXDAnKSB7CisrICAgICAgKnArKyA9ICdcXCc7CisrICAgICAgKnArKyA9ICdOJzsKKysgICAgfQorKworKyAgICAvKiBjb3B5IGFsbCBhY3R1YWwgdGV4dCBvZiB0aGlzIGxpbmUgKi8KKysgICAgd2hpbGUgKCgqdCAhPSAnXDAnKSAmJiAoKnQgIT0gJ1xuJykpCisrICAgICAgKnArKyA9ICp0Kys7CisrCisrICAgIC8qIGFkZCBhIHRlcm1pbmF0b3IgYXQgdGhlIGVuZCAqLworKyAgICAqcCA9ICdcMCc7CisrICB9CisrCisrICAvKiBub3QgdmFsaWQgdGV4dCBmb3VuZCBpbiB0aGlzIGJ1ZmZlciByZXR1cm4gT0sgdG8gbGV0IGNhbGxlciB1bnJlZiBidWZmZXIgKi8KKysgIGlmIChzdHJsZW4odGV4dCkgPD0gMCkgeworKyAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhcnNlLCAiTm90IHZhbGlkIHRleHQgZm91bmQgaW4gdGhpcyBidWZmZXJcbiIpOworKyAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7CisgICB9CisgCisrICB0ID0gdGV4dDsKKyAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgIlRleHQgOiAlcyIsIHQpOworIAorICAgaWYgKGdzdF9zc2FfcGFyc2VfcmVtb3ZlX292ZXJyaWRlX2NvZGVzIChwYXJzZSwgdCkpIHsKK0BAIC0zMDcsMTMgKzQxNCwyMiBAQCBnc3Rfc3NhX3BhcnNlX3B1c2hfbGluZSAoR3N0U3NhUGFyc2UgKiBwYXJzZSwgZ2NoYXIgKiB0eHQsCisgICBnc3RfYnVmZmVyX2ZpbGwgKGJ1ZiwgMCwgZXNjYXBlZCwgbGVuICsgMSk7CisgICBnc3RfYnVmZmVyX3NldF9zaXplIChidWYsIGxlbik7CisgICBnX2ZyZWUgKGVzY2FwZWQpOworKyAgZ19mcmVlKHQpOworKworKyAgaWYgKHN0YXJ0X3RpbWUgIT0gR19NQVhVSU5UNjQpCisrICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpID0gc3RhcnRfdGltZTsKKysgIGVsc2UKKysgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZikgPSBzdGFydDsKKyAKKy0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpID0gc3RhcnQ7CistICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpID0gZHVyYXRpb247CisrICBpZiAoZW5kX3RpbWUgPiBzdGFydF90aW1lKQorKyAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpID0gZW5kX3RpbWUgLSBzdGFydF90aW1lOworKyAgZWxzZQorKyAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpID0gZHVyYXRpb247CisgCisgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJQdXNoaW5nIGJ1ZmZlciB3aXRoIHRpbWVzdGFtcCAlIiBHU1RfVElNRV9GT1JNQVQKKy0gICAgICAiIGFuZCBkdXJhdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHN0YXJ0KSwKKy0gICAgICBHU1RfVElNRV9BUkdTIChkdXJhdGlvbikpOworKyAgICAgICIgYW5kIGR1cmF0aW9uICUiIEdTVF9USU1FX0ZPUk1BVCwKKysgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSksCisrICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSkpOworIAorICAgcmV0ID0gZ3N0X3BhZF9wdXNoIChwYXJzZS0+c3JjcGFkLCBidWYpOworIAorQEAgLTMzMyw2ICs0NDksNyBAQCBnc3Rfc3NhX3BhcnNlX2NoYWluIChHc3RQYWQgKiBzaW5rcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZikKKyAgIEdzdENsb2NrVGltZSB0czsKKyAgIGdjaGFyICp0eHQ7CisgICBHc3RNYXBJbmZvIG1hcDsKKysgIGdpbnQgc2l6ZTsKKyAKKyAgIGlmIChHX1VOTElLRUxZICghcGFyc2UtPmZyYW1lZCkpCisgICAgIGdvdG8gbm90X2ZyYW1lZDsKK0BAIC0zNTAsMTMgKzQ2NywxNCBAQCBnc3Rfc3NhX3BhcnNlX2NoYWluIChHc3RQYWQgKiBzaW5rcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZikKKyAgIC8qIG1ha2UgZG91YmxlLXN1cmUgaXQncyAwLXRlcm1pbmF0ZWQgYW5kIGFsbCAqLworICAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKKyAgIHR4dCA9IGdfc3RybmR1cCAoKGdjaGFyICopIG1hcC5kYXRhLCBtYXAuc2l6ZSk7CisrICBzaXplID0gbWFwLnNpemU7CisgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOworIAorICAgaWYgKHR4dCA9PSBOVUxMKQorICAgICBnb3RvIGVtcHR5X3RleHQ7CisgCisgICB0cyA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpOworLSAgcmV0ID0gZ3N0X3NzYV9wYXJzZV9wdXNoX2xpbmUgKHBhcnNlLCB0eHQsIHRzLCBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpKTsKKysgIHJldCA9IGdzdF9zc2FfcGFyc2VfcHVzaF9saW5lIChwYXJzZSwgdHh0LCBzaXplLCB0cywgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSk7CisgCisgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LICYmIEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0cykpIHsKKyAgICAgR3N0U2VnbWVudCBzZWdtZW50OworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMy12aWRlb2ZpbHRlci1Vc2UtbmV3LUdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDMtdmlkZW9maWx0ZXItVXNlLW5ldy1HU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMmJmMDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDMtdmlkZW9maWx0ZXItVXNlLW5ldy1HU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGLnBhdGNoCkBAIC0wLDAgKzEsNjkgQEAKK0Zyb20gM2E3Y2RjZGZjOWM1YjBkMjAzOTRmZTUxYjNiOGNkYTIzOTMxY2E2ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9TZWJhc3RpYW49MjBEcj1DMz1CNmdlPz0gPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+CitEYXRlOiBGcmksIDEyIFNlcCAyMDE0IDE0OjQxOjAxICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMy8zXSB2aWRlb2ZpbHRlcjogVXNlIG5ldyBHU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgWzEuNS4xXQoraHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNjExOAorLS0tCisgZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZmlsdGVyLmMgfCAgIDIzICsrKystLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9maWx0ZXIuYyBiL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2ZpbHRlci5jCitpbmRleCBlMWZhMmMxLi44NzRiMmU4IDEwMDY0NAorLS0tIGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZmlsdGVyLmMKKysrKyBiL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2ZpbHRlci5jCitAQCAtMjYwLDIzICsyNjAsMTUgQEAgZ3N0X3ZpZGVvX2ZpbHRlcl90cmFuc2Zvcm0gKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0QnVmZmVyICogaW5idWYsCisgICBpZiAoZmNsYXNzLT50cmFuc2Zvcm1fZnJhbWUpIHsKKyAgICAgR3N0VmlkZW9GcmFtZSBpbl9mcmFtZSwgb3V0X2ZyYW1lOworIAorLSAgICBpZiAoIWdzdF92aWRlb19mcmFtZV9tYXAgKCZpbl9mcmFtZSwgJmZpbHRlci0+aW5faW5mbywgaW5idWYsIEdTVF9NQVBfUkVBRCkpCisrICAgIGlmICghZ3N0X3ZpZGVvX2ZyYW1lX21hcCAoJmluX2ZyYW1lLCAmZmlsdGVyLT5pbl9pbmZvLCBpbmJ1ZiwKKysgICAgICAgICAgICBHU1RfTUFQX1JFQUQgfCBHU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGKSkKKyAgICAgICBnb3RvIGludmFsaWRfYnVmZmVyOworIAorICAgICBpZiAoIWdzdF92aWRlb19mcmFtZV9tYXAgKCZvdXRfZnJhbWUsICZmaWx0ZXItPm91dF9pbmZvLCBvdXRidWYsCistICAgICAgICAgICAgR1NUX01BUF9XUklURSkpCisrICAgICAgICAgICAgR1NUX01BUF9XUklURSB8IEdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYpKQorICAgICAgIGdvdG8gaW52YWxpZF9idWZmZXI7CisgCistICAgIC8qIEdzdFZpZGVvRnJhbWUgaGFzIGFub3RoZXIgcmVmZXJlbmNlLCBzbyB0aGUgYnVmZmVyIGxvb2tzIHVud3JpdGVhYmxlLAorLSAgICAgKiBtZWFuaW5nIHRoYXQgd2UgY2FuJ3QgYXR0YWNoIGFueSBtZXRhcyBvciBhbnl0aGluZyB0byBpdC4gT3RoZXIKKy0gICAgICogbWFwKCkgZnVuY3Rpb25zIGxpa2UgZ3N0X2J1ZmZlcl9tYXAoKSBkb24ndCBnZXQgYW5vdGhlciByZWZlcmVuY2UKKy0gICAgICogb2YgdGhlIGJ1ZmZlciBhbmQgZXhwZWN0IHRoZSBidWZmZXIgcmVmZXJlbmNlIHRvIGJlIGtlcHQgdW50aWwKKy0gICAgICogdGhlIGJ1ZmZlciBpcyB1bm1hcHBlZCBhZ2Fpbi4gKi8KKy0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoaW5idWYpOworLSAgICBnc3RfYnVmZmVyX3VucmVmIChvdXRidWYpOworICAgICByZXMgPSBmY2xhc3MtPnRyYW5zZm9ybV9mcmFtZSAoZmlsdGVyLCAmaW5fZnJhbWUsICZvdXRfZnJhbWUpOworLSAgICBnc3RfYnVmZmVyX3JlZiAoaW5idWYpOworLSAgICBnc3RfYnVmZmVyX3JlZiAob3V0YnVmKTsKKyAKKyAgICAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwICgmb3V0X2ZyYW1lKTsKKyAgICAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwICgmaW5fZnJhbWUpOworQEAgLTMxNyw3ICszMDksNyBAQCBnc3RfdmlkZW9fZmlsdGVyX3RyYW5zZm9ybV9pcCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RCdWZmZXIgKiBidWYpCisgICAgIEdzdFZpZGVvRnJhbWUgZnJhbWU7CisgICAgIEdzdE1hcEZsYWdzIGZsYWdzOworIAorLSAgICBmbGFncyA9IEdTVF9NQVBfUkVBRDsKKysgICAgZmxhZ3MgPSBHU1RfTUFQX1JFQUQgfCBHU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGOworIAorICAgICBpZiAoIWdzdF9iYXNlX3RyYW5zZm9ybV9pc19wYXNzdGhyb3VnaCAodHJhbnMpKQorICAgICAgIGZsYWdzIHw9IEdTVF9NQVBfV1JJVEU7CitAQCAtMzI1LDE0ICszMTcsNyBAQCBnc3RfdmlkZW9fZmlsdGVyX3RyYW5zZm9ybV9pcCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RCdWZmZXIgKiBidWYpCisgICAgIGlmICghZ3N0X3ZpZGVvX2ZyYW1lX21hcCAoJmZyYW1lLCAmZmlsdGVyLT5pbl9pbmZvLCBidWYsIGZsYWdzKSkKKyAgICAgICBnb3RvIGludmFsaWRfYnVmZmVyOworIAorLSAgICAvKiBHc3RWaWRlb0ZyYW1lIGhhcyBhbm90aGVyIHJlZmVyZW5jZSwgc28gdGhlIGJ1ZmZlciBsb29rcyB1bndyaXRlYWJsZSwKKy0gICAgICogbWVhbmluZyB0aGF0IHdlIGNhbid0IGF0dGFjaCBhbnkgbWV0YXMgb3IgYW55dGhpbmcgdG8gaXQuIE90aGVyCistICAgICAqIG1hcCgpIGZ1bmN0aW9ucyBsaWtlIGdzdF9idWZmZXJfbWFwKCkgZG9uJ3QgZ2V0IGFub3RoZXIgcmVmZXJlbmNlCistICAgICAqIG9mIHRoZSBidWZmZXIgYW5kIGV4cGVjdCB0aGUgYnVmZmVyIHJlZmVyZW5jZSB0byBiZSBrZXB0IHVudGlsCistICAgICAqIHRoZSBidWZmZXIgaXMgdW5tYXBwZWQgYWdhaW4uICovCistICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7CisgICAgIHJlcyA9IGZjbGFzcy0+dHJhbnNmb3JtX2ZyYW1lX2lwIChmaWx0ZXIsICZmcmFtZSk7CistICAgIGdzdF9idWZmZXJfcmVmIChidWYpOworIAorICAgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXAgKCZmcmFtZSk7CisgICB9IGVsc2UgeworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwNC1zdWJwYXJzZS1zZXQtbmVlZF9zZWdtZW50LWFmdGVyLXNpbmstcGFkLXJlY2VpdmVkLUdTLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDA0LXN1YnBhcnNlLXNldC1uZWVkX3NlZ21lbnQtYWZ0ZXItc2luay1wYWQtcmVjZWl2ZWQtR1MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgxMzkxNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwNC1zdWJwYXJzZS1zZXQtbmVlZF9zZWdtZW50LWFmdGVyLXNpbmstcGFkLXJlY2VpdmVkLUdTLnBhdGNoCkBAIC0wLDAgKzEsNjkgQEAKK0Zyb20gZWQwOWM4ZmQyYzljMmI1Mzg0YjcyY2M3MGFmMzcyOGJlNjY5NGU2NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1pbmdrZSBXYW5nIDxtaW5na2Uud2FuZ0BmcmVlc2NhbGUuY29tPgorRGF0ZTogVGh1LCAxOSBNYXIgMjAxNSAxNDoyMDoyNiArMDgwMAorU3ViamVjdDogW1BBVENIIDQvNF0gc3VicGFyc2U6IHNldCBuZWVkX3NlZ21lbnQgYWZ0ZXIgc2luayBwYWQgcmVjZWl2ZWQKKyBHU1RfRVZFTlRfU0VHTUVOVAorCitzdWJwYXJzZSB3b3JrcyBpbiBwdXNoIG1vZGUsIGNoYWluIGZ1bmNpdG9uIHdpbGwgYmUgY2FsbGVkIG9uY2UKK3VwIHN0cmVhbSBlbGVtZW50IGZpbmlzaGVkIHRoZSBzZWVraW5nIGFuZCBmbHVzaGluZy4KK2lmIHNldCBuZWVkX3NlZ21lbnQgZmxhZyBpbiBzcmMgcGFkIGV2ZW50IGhhbmRsZXIsIHRoZSBzZWdtZW50CitldmVudCB3aWxsIGJlIHB1c2hlZCBlYXJsaWVyLCByZXN1bHQgaW4gdGhlIHN1YnRpdGxlIHRleHQgd2lsbAorYmUgc2VuZCBvdXQgdG8gZG93biBzdHJlYW0gZnJvbSB0aGUgYmVnaW5uaW5nLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzQ5OF0KKworU2lnbmVkLW9mZi1ieTogTWluZ2tlIFdhbmcgPG1pbmdrZS53YW5nQGZyZWVzY2FsZS5jb20+CisKK2RpZmYgLS1naXQgYS9nc3Qvc3VicGFyc2UvZ3N0c3VicGFyc2UuYyBiL2dzdC9zdWJwYXJzZS9nc3RzdWJwYXJzZS5jCitvbGQgbW9kZSAxMDA2NDQKK25ldyBtb2RlIDEwMDc1NQoraW5kZXggYjU2NWU5My4uNzc0MWNjYworLS0tIGEvZ3N0L3N1YnBhcnNlL2dzdHN1YnBhcnNlLmMKKysrKyBiL2dzdC9zdWJwYXJzZS9nc3RzdWJwYXJzZS5jCitAQCAtMjY2LDIyICsyNjYsMjAgQEAgZ3N0X3N1Yl9wYXJzZV9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQorICAgICAgICAgZ290byBiZWFjaDsKKyAgICAgICB9CisgCisrICAgICAgLyogQXBwbHkgdGhlIHNlZWsgdG8gb3VyIHNlZ21lbnQgKi8KKysgICAgICBnc3Rfc2VnbWVudF9kb19zZWVrICgmc2VsZi0+c2VnbWVudCwgcmF0ZSwgZm9ybWF0LCBmbGFncywKKysgICAgICAgICAgc3RhcnRfdHlwZSwgc3RhcnQsIHN0b3BfdHlwZSwgc3RvcCwgJnVwZGF0ZSk7CisrCisrICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgInNlZ21lbnQgYWZ0ZXIgc2VlazogJSIgR1NUX1NFR01FTlRfRk9STUFULAorKyAgICAgICAgICAmc2VsZi0+c2VnbWVudCk7CisrCisgICAgICAgLyogQ29udmVydCB0aGF0IHNlZWsgdG8gYSBzZWVraW5nIGluIGJ5dGVzIGF0IHBvc2l0aW9uIDAsCisgICAgICAgICAgRklYTUU6IGNvdWxkIHVzZSBhbiBpbmRleCAqLworICAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc2VsZi0+c2lua3BhZCwKKyAgICAgICAgICAgZ3N0X2V2ZW50X25ld19zZWVrIChyYXRlLCBHU1RfRk9STUFUX0JZVEVTLCBmbGFncywKKyAgICAgICAgICAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCAwLCBHU1RfU0VFS19UWVBFX05PTkUsIDApKTsKKyAKKy0gICAgICBpZiAocmV0KSB7CistICAgICAgICAvKiBBcHBseSB0aGUgc2VlayB0byBvdXIgc2VnbWVudCAqLworLSAgICAgICAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlbGYtPnNlZ21lbnQsIHJhdGUsIGZvcm1hdCwgZmxhZ3MsCistICAgICAgICAgICAgc3RhcnRfdHlwZSwgc3RhcnQsIHN0b3BfdHlwZSwgc3RvcCwgJnVwZGF0ZSk7CistCistICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAic2VnbWVudCBhZnRlciBzZWVrOiAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsCistICAgICAgICAgICAgJnNlbGYtPnNlZ21lbnQpOworLQorLSAgICAgICAgc2VsZi0+bmVlZF9zZWdtZW50ID0gVFJVRTsKKy0gICAgICB9IGVsc2UgeworKyAgICAgIGlmICghcmV0KSB7CisgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNlbGYsICJzZWVrIHRvIDAgYnl0ZXMgZmFpbGVkIik7CisgICAgICAgfQorIAorQEAgLTE2MzIsOCArMTYzMCwxMCBAQCBnc3Rfc3ViX3BhcnNlX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQorICAgICAgIGdzdF9ldmVudF9wYXJzZV9zZWdtZW50IChldmVudCwgJnMpOworICAgICAgIGlmIChzLT5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKQorICAgICAgICAgZ3N0X2V2ZW50X2NvcHlfc2VnbWVudCAoZXZlbnQsICZzZWxmLT5zZWdtZW50KTsKKy0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAibmV3c2VnbWVudCAoJXMpIiwKKy0gICAgICAgICAgZ3N0X2Zvcm1hdF9nZXRfbmFtZSAoc2VsZi0+c2VnbWVudC5mb3JtYXQpKTsKKysgICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAibmV3c2VnbWVudCAoJXMpICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwKKysgICAgICAgICAgZ3N0X2Zvcm1hdF9nZXRfbmFtZSAoc2VsZi0+c2VnbWVudC5mb3JtYXQpLCAmc2VsZi0+c2VnbWVudCk7CisrCisrICAgICAgc2VsZi0+bmVlZF9zZWdtZW50ID0gVFJVRTsKKyAKKyAgICAgICAvKiBpZiBub3QgdGltZSBmb3JtYXQsIHdlJ2xsIGVpdGhlciBzdGFydCB3aXRoIGEgMCB0aW1lc3RhbXAgYW55d2F5IG9yCisgICAgICAgICogaXQncyBmb2xsb3dpbmcgYSBzZWVrIGluIHdoaWNoIGNhc2Ugd2UnbGwgaGF2ZSBzYXZlZCB0aGUgcmVxdWVzdGVkCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9kby1ub3QtY2hhbmdlLWVvcy1ldmVudC10by1nYXAtZXZlbnQtaWYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudC1pZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTU1ZGUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9kby1ub3QtY2hhbmdlLWVvcy1ldmVudC10by1nYXAtZXZlbnQtaWYucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRnJvbSBiNjA4ZDAyN2ZmZjZlZmMyZDE5ODhlYmYxNjljYmUzYjJiNDRhNjFiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogemhvdW1pbmcgPGI0MjU4NkBmcmVlc2NhbGUuY29tPgorRGF0ZTogVGh1LCA4IE1heSAyMDE0IDEyOjAxOjE3ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIEVOR1IwMDMxMjAzNDogZG8gbm90IGNoYW5nZSBlb3MgZXZlbnQgdG8gZ2FwIGV2ZW50IGlmIG5vCisgZGF0YSBoYXMgcGFzc2VkIHRvIHN0cmVhbXN5bmNocm9uaXplci4KKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNzA3NAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogemhvdW1pbmcgPGI0MjU4NkBmcmVlc2NhbGUuY29tPgorLS0tCisgZ3N0L3BsYXliYWNrL2dzdHN0cmVhbXN5bmNocm9uaXplci5jIHwgICAgNSArKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nc3QvcGxheWJhY2svZ3N0c3RyZWFtc3luY2hyb25pemVyLmMgYi9nc3QvcGxheWJhY2svZ3N0c3RyZWFtc3luY2hyb25pemVyLmMKK2luZGV4IDM5OTdkMWIuLjNlMTdjNTUgMTAwNjQ0CistLS0gYS9nc3QvcGxheWJhY2svZ3N0c3RyZWFtc3luY2hyb25pemVyLmMKKysrKyBiL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYworQEAgLTQ4OCwxMiArNDg4LDExIEBAIGdzdF9zdHJlYW1fc3luY2hyb25pemVyX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAorICAgICAgICAgfQorICAgICAgICAgZ19zbGlzdF9mcmVlIChwYWRzKTsKKyAgICAgICB9IGVsc2UgeworLSAgICAgICAgLyogaWYgRU9TLCBidXQgbm8gZGF0YSBoYXMgcGFzc2VkLCB0aGVuIHNlbmQgc29tZXRoaW5nIHRvIHJlcGxhY2UgRU9TCistICAgICAgICAgKiBmb3IgcHJlcm9sbCBwdXJwb3NlcyAqLworKyAgICAgICAgLyogaWYgRU9TLCBidXQgbm8gZGF0YSBoYXMgcGFzc2VkLCB0aGVuIHNlbmQgRU9TIGV2ZW50ICovCisgICAgICAgICBpZiAoIXNlZW5fZGF0YSkgeworICAgICAgICAgICBHc3RFdmVudCAqZ2FwX2V2ZW50OworIAorLSAgICAgICAgICBnYXBfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2dhcCAodGltZXN0YW1wLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKysgICAgICAgICAgZ2FwX2V2ZW50ID0gZ3N0X2V2ZW50X25ld19lb3MgKCk7CisgICAgICAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLCBnYXBfZXZlbnQpOworICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgR3N0RXZlbnQgKmdhcF9ldmVudDsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudDIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudDIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjI0YmM3YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZG8tbm90LWNoYW5nZS1lb3MtZXZlbnQtdG8tZ2FwLWV2ZW50Mi5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitjb21taXQgZjk1MzY1NDRmNWFkMTgyYjRmNzhkMDE0M2QxZGFhNDVkZDY0ZTYyNAorQXV0aG9yOiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUaHUgT2N0IDkgMTc6Mzc6NDMgMjAxNCArMDgwMAorCitbZ3N0c3RyZWFtc3luY2hyb25pemVyXSBzZW5kIEVPUyBldmVudCBpbnN0ZXJkIG9mIEdBUCBldmVudCBhcyBHQVAKK2V2ZW50IGhhcyBpc3N1ZSB3aGVuIEEvViBoYXZlIGRpZmZlcmVudCBkdXJhdGlvbi4KKyAgICAKK3NlbmQgRU9TIGV2ZW50IGluc3RlcmQgb2YgR0FQIGV2ZW50IGFzIEdBUCBldmVudCBoYXMgaXNzdWUgd2hlbiBBL1YgaGF2ZSBkaWZmZXJlbnQgZHVyYXRpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2NjU1XQorCitTaWduZWQtb2ZmLWJ5OiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorCitkaWZmIC0tZ2l0IGEvZ3N0L3BsYXliYWNrL2dzdHN0cmVhbXN5bmNocm9uaXplci5jIGIvZ3N0L3BsYXliYWNrL2dzdHN0cmVhbXN5bmNocm9uaXplci5jCitpbmRleCAzZTE3YzU1Li5mZjQyZDcyIDEwMDY0NAorLS0tIGEvZ3N0L3BsYXliYWNrL2dzdHN0cmVhbXN5bmNocm9uaXplci5jCisrKysgYi9nc3QvcGxheWJhY2svZ3N0c3RyZWFtc3luY2hyb25pemVyLmMKK0BAIC00ODgsMTkgKzQ4OCwyNCBAQCBnc3Rfc3RyZWFtX3N5bmNocm9uaXplcl9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKKyAgICAgICAgIH0KKyAgICAgICAgIGdfc2xpc3RfZnJlZSAocGFkcyk7CisgICAgICAgfSBlbHNlIHsKKy0gICAgICAgIC8qIGlmIEVPUywgYnV0IG5vIGRhdGEgaGFzIHBhc3NlZCwgdGhlbiBzZW5kIEVPUyBldmVudCAqLworKyAgICAgICAgLyogaWYgRU9TLCBidXQgbm8gZGF0YSBoYXMgcGFzc2VkLCB0aGVuIHNlbmQgc29tZXRoaW5nIHRvIHJlcGxhY2UgRU9TCisrICAgICAgICAgKiBmb3IgcHJlcm9sbCBwdXJwb3NlcyAqLworICAgICAgICAgaWYgKCFzZWVuX2RhdGEpIHsKKy0gICAgICAgICAgR3N0RXZlbnQgKmdhcF9ldmVudDsKKysgICAgICAgICAgR3N0RXZlbnQgKmVvc19ldmVudDsKKyAKKy0gICAgICAgICAgZ2FwX2V2ZW50ID0gZ3N0X2V2ZW50X25ld19lb3MgKCk7CistICAgICAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLCBnYXBfZXZlbnQpOworKyAgICAgICAgICAvKiBGSVhNRTogY2hhbmdlIHRvIEVPUyBldmVudCBhcyBHQVAgZXZlbnQgaGFzIGlzc3VlIHdoZW4gQS9WIGhhdmUKKysgICAgICAgICAgICogZGlmZmVyZW50IGR1cmF0aW9uICovCisrICAgICAgICAgIGVvc19ldmVudCA9IGdzdF9ldmVudF9uZXdfZW9zICgpOworKyAgICAgICAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZW9zX2V2ZW50KTsKKyAgICAgICAgIH0gZWxzZSB7CistICAgICAgICAgIEdzdEV2ZW50ICpnYXBfZXZlbnQ7CisrICAgICAgICAgIEdzdEV2ZW50ICplb3NfZXZlbnQ7CisgCisgICAgICAgICAgIC8qIEZJWE1FOiBBbHNvIHNlbmQgYSBHQVAgZXZlbnQgdG8gbGV0IGF1ZGlvIHNpbmtzIHN0YXJ0IHRoZWlyCisgICAgICAgICAgICAqIGNsb2NrIGluIGNhc2UgdGhleSBkaWQgbm90IGhhdmUgZW5vdWdoIGRhdGEgeWV0ICovCistICAgICAgICAgIGdhcF9ldmVudCA9IGdzdF9ldmVudF9uZXdfZ2FwICh0aW1lc3RhbXAsIEdTVF9DTE9DS19USU1FX05PTkUpOworLSAgICAgICAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZ2FwX2V2ZW50KTsKKysgICAgICAgICAgLyogRklYTUU6IGNoYW5nZSB0byBFT1MgZXZlbnQgYXMgR0FQIGV2ZW50IGhhcyBpc3N1ZSB3aGVuIEEvViBoYXZlCisrICAgICAgICAgICAqIGRpZmZlcmVudCBkdXJhdGlvbiAqLworKyAgICAgICAgICBlb3NfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2VvcyAoKTsKKysgICAgICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsIGVvc19ldmVudCk7CisgICAgICAgICB9CisgICAgICAgfQorICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudDMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudDMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzMxYmU2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZG8tbm90LWNoYW5nZS1lb3MtZXZlbnQtdG8tZ2FwLWV2ZW50My5wYXRjaApAQCAtMCwwICsxLDMxIEBACitjb21taXQgM2Y3MDUyYWFjNWUwMTE4YTlhOWUwOWZmZjJmNjUwOTFiZTQ0ODk3MgorQXV0aG9yOiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUaHUgT2N0IDIzIDEzOjM1OjEzIDIwMTQgKzA4MDAKKworW3N0cmVhbXN5bmNocm9uaXplcl0gT25lIHN0cmVhbSBjYW4gZmluaXNoIHBsYXliYWNrLgorICAKK0FzIGNoYW5nZWQgR0FQIGV2ZW50IEVPUyBldmVudCwgc28gRU9TIHdpbGwgc2VuZCBtb3JlIHRpbWVzLCB3aGljaCB3aWxsCitjYXVzZSBzZW5kIGZ1bmN0aW9uIHJldHVybiBlcnJvci4KK1N0cmVhbXN5bmNocm9uaXplciB3aWxsIGRvbuKAmXQgc2VuZCBzZWNvbmQgdHJhY2sgRU9TIGV2ZW50IGlmIHNlbmQgdGhlCitmaXJzdCB0cmFjayBFT1MgcmV0dXJuIGZhaWwuIEZpeGVkIGJ5IGlnbm9yZSB0aGUgcmV0dXJuIGVycm9yLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNjY1NV0KKworU2lnbmVkLW9mZi1ieTogU29uZyBCaW5nIGIwNjQ5OEBmcmVlc2NhbGUuY29tCisKK2RpZmYgLS1naXQgYS9nc3QvcGxheWJhY2svZ3N0c3RyZWFtc3luY2hyb25pemVyLmMgYi9nc3QvcGxheWJhY2svZ3N0c3RyZWFtc3luY2hyb25pemVyLmMKK2luZGV4IGZmNDJkNzIuLmQxNzMyYzMgMTAwNjQ0CistLS0gYS9nc3QvcGxheWJhY2svZ3N0c3RyZWFtc3luY2hyb25pemVyLmMKKysrKyBiL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYworQEAgLTQ4Miw3ICs0ODIsMTAgQEAgZ3N0X3N0cmVhbV9zeW5jaHJvbml6ZXJfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCisgICAgICAgICB3aGlsZSAoZXBhZCkgeworICAgICAgICAgICBwYWQgPSBlcGFkLT5kYXRhOworICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJQdXNoaW5nIEVPUyIpOworLSAgICAgICAgICByZXQgPSByZXQgJiYgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKKysgICAgICAgICAgLyogRklYTUU6IHJlbW92ZSBlcnJvciBjaGVjayBhcyBHQVAgY2hhbmdlZCB0byBFT1Mgd2lsbCBzZW5kIEVPUworKyAgICAgICAgICAgKiBtb3JlIHRpbWVzLCB3aGljaCB3aWxsIGNhdXNlIHJldHVybiBlcnJvciBhbmQgdGhlbiBkb24ndCBzZW5kCisrICAgICAgICAgICAqIEVPUyBldmVudCB0byBmb2xsb3dpbmcgdHJhY2tzLiAqLworKyAgICAgICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpOworICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOworICAgICAgICAgICBlcGFkID0gZ19zbGlzdF9uZXh0IChlcGFkKTsKKyAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZW5jb2RlYmluLU5lZWQtbW9yZS1idWZmZXJzLWluLW91dHB1dC1xdWV1ZS1mb3ItYmV0dC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZW5jb2RlYmluLU5lZWQtbW9yZS1idWZmZXJzLWluLW91dHB1dC1xdWV1ZS1mb3ItYmV0dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjU2NzE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9lbmNvZGViaW4tTmVlZC1tb3JlLWJ1ZmZlcnMtaW4tb3V0cHV0LXF1ZXVlLWZvci1iZXR0LnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gNTQwZTAyYzkyYzc1ZTA4YjkwMzI2ODYzZGM3ODdmYTVjYWRmOWRhNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CitEYXRlOiBGcmksIDEzIE1hciAyMDE1IDE4OjA0OjMxICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGVuY29kZWJpbjogTmVlZCBtb3JlIGJ1ZmZlcnMgaW4gb3V0cHV0IHF1ZXVlIGZvciBiZXR0ZXIKKyBwZXJmb3JtYW5jZQorCitOZWVkIG1vcmUgYnVmZmVycyBpbiBvdXRwdXQgcXVldWUgZm9yIGJldHRlciBwZXJmb3JtYW5jZQorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NDE5MV0KKworU2lnbmVkLW9mZi1ieTogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KKy0tLQorIGdzdC9lbmNvZGluZy9nc3RlbmNvZGViaW4uYyB8ICAgIDMgKy0tCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3N0L2VuY29kaW5nL2dzdGVuY29kZWJpbi5jIGIvZ3N0L2VuY29kaW5nL2dzdGVuY29kZWJpbi5jCitpbmRleCA2NzI4ZTU4Li4zMmRhYWU0IDEwMDY0NAorLS0tIGEvZ3N0L2VuY29kaW5nL2dzdGVuY29kZWJpbi5jCisrKysgYi9nc3QvZW5jb2RpbmcvZ3N0ZW5jb2RlYmluLmMKK0BAIC0xMTM4LDggKzExMzgsNyBAQCBfY3JlYXRlX3N0cmVhbV9ncm91cCAoR3N0RW5jb2RlQmluICogZWJpbiwgR3N0RW5jb2RpbmdQcm9maWxlICogc3Byb2YsCisgICAgKiBXZSBvbmx5IHVzZSBhIDFidWZmZXIgbG9uZyBxdWV1ZSBoZXJlLCB0aGUgYWN0dWFsIHF1ZXVlaW5nIHdpbGwgYmUgZG9uZQorICAgICogaW4gdGhlIGlucHV0IHF1ZXVlICovCisgICBsYXN0ID0gc2dyb3VwLT5vdXRxdWV1ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInF1ZXVlIiwgTlVMTCk7CistICBnX29iamVjdF9zZXQgKHNncm91cC0+b3V0cXVldWUsICJtYXgtc2l6ZS1idWZmZXJzIiwgKGd1aW50MzIpIDEsCistICAgICAgIm1heC1zaXplLWJ5dGVzIiwgKGd1aW50MzIpIDAsICJtYXgtc2l6ZS10aW1lIiwgKGd1aW50NjQpIDAsCisrICBnX29iamVjdF9zZXQgKHNncm91cC0+b3V0cXVldWUsICJtYXgtc2l6ZS10aW1lIiwgKGd1aW50NjQpIDAsCisgICAgICAgInNpbGVudCIsIFRSVUUsIE5VTEwpOworIAorICAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGViaW4pLCBzZ3JvdXAtPm91dHF1ZXVlKTsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2ZpeC1pZDNkZW11eC11dGYxNi10by11dGY4LWlzc3VlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9maXgtaWQzZGVtdXgtdXRmMTYtdG8tdXRmOC1pc3N1ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZjNmNzVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9maXgtaWQzZGVtdXgtdXRmMTYtdG8tdXRmOC1pc3N1ZS5wYXRjaApAQCAtMCwwICsxLDU0IEBACitBdXRob3I6IEx5b24gV2FuZyA8YjEyNjk2QGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFRodSBPY3QgOSAxNzozNzo0MyAyMDE0ICswODAwCisKK1tpZDN2MmZyYW1lc10gQnVnIGZpeCBmb3IgaWQzZGVtdXggaXNzdWUKKworRml4IHRoZSBpc3N1ZSB0aGF0IGlkMyB0YWdzIHV0ZjE2IGNoYXJhdGVycyBjYW5ub3QgYmUgZXh0cmVhY3RlZCBpbiBpZDNkZW11eAord2hlbiBJIHRyaWVkIHRvIGdldCB0aGUgaWQzdjIgdGFnIHN1Y2ggYXMgVElUMiwgVEFMQiBldGMuIGl0IHdpbGwgcmV0dXJuIGV4dHJhYworZmFpbGVkLgorCitDaGVja2VkIGluIGlkM3YyZnJhbWUuYywgIFdoZW4gcGFyc2UgdGhlIFVURi0xNiBzdHJlYW1zLCBpdCB1c2VkIGdfY29udmVydCgpIHRvCitjb252ZXJ0IHRoZSBidWZmZXIgZnJvbSBVVEYtMTYgdG8gVVRGLTgsIGhvd2V2ZXIgaXQgd2lsbCByZXR1cm4gZXJyIHRoYXQgdGhpcworY29udmVyc2lvbiBpcyBub3Qgc3VwcG9ydGVkIHdoaWNoIGNhdXNlIHRoZSBleHRyYWN0aW9uIGZhaWxlZCB3aXRoIHRoZXNlIFVURi0xNgorY2hhcmFjdGVycy4KKworSW4gdGhlIHBhdGNoLCB1c2UgZ191dGYxNl90b191dGY4KCkgaW5zdGVhZCBvZiBnX2NvbnZlcnQsIHdoaWNoIGNhbiBjb252ZXJ0IHRoZQorY2hhcmFjdGVyIGZvcm1hdCBzdWNjZXNzZnVsbHkuCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDExNDQKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbMS41LjFdCisKK1NpZ25lZC1vZmYtYnk6IEx5b24gV2FuZyA8YjEyNjk2QGZyZWVzY2FsZS5jb20+CisKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvdGFnL2lkM3YyZnJhbWVzLmMgYi9nc3QtbGlicy9nc3QvdGFnL2lkM3YyZnJhbWVzLmMKK29sZCBtb2RlIDEwMDY0NAorbmV3IG1vZGUgMTAwNzU1CitpbmRleCAzNzg1YzJhLi43YjlkOGFjCistLS0gYS9nc3QtbGlicy9nc3QvdGFnL2lkM3YyZnJhbWVzLmMKKysrKyBiL2dzdC1saWJzL2dzdC90YWcvaWQzdjJmcmFtZXMuYworQEAgLTEwNTcsMTQgKzEwNTcsMTcgQEAgcGFyc2VfaW5zZXJ0X3N0cmluZ19maWVsZCAoZ3VpbnQ4IGVuY29kaW5nLCBnY2hhciAqIGRhdGEsIGdpbnQgZGF0YV9zaXplLAorICAgICAgICAgZGF0YV9zaXplIC09IDI7CisgICAgICAgfQorIAorLSAgICAgIGZpZWxkID0gZ19jb252ZXJ0IChkYXRhLCBkYXRhX3NpemUsICJVVEYtOCIsIGluX2VuY29kZSwgTlVMTCwgTlVMTCwgTlVMTCk7CistCistICAgICAgaWYgKGZpZWxkID09IE5VTEwgfHwgZ191dGY4X3ZhbGlkYXRlIChmaWVsZCwgLTEsIE5VTEwpID09IEZBTFNFKSB7CistICAgICAgICAvKiBBcyBhIGZhbGxiYWNrLCB0cnkgaW50ZXJwcmV0aW5nIFVURi0xNiBpbiB0aGUgb3RoZXIgZW5kaWFubmVzcyAqLworLSAgICAgICAgaWYgKGluX2VuY29kZSA9PSB1dGYxNmJlZW5jKQorLSAgICAgICAgICBmaWVsZCA9IGdfY29udmVydCAoZGF0YSwgZGF0YV9zaXplLCAiVVRGLTgiLCB1dGYxNmxlZW5jLAorLSAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCk7CisrICAgICAgaWYgKGluX2VuY29kZSA9PSB1dGYxNmJlZW5jKSB7CisrICAgICAgICAgICBndW5pY2hhcjIgKmRhdGFfdXRmMTY7CisrICAgICAgICAgICBndWludCBpOworKyAgICAgICAgICAgZGF0YV91dGYxNiA9ICAoZ3VuaWNoYXIyICopIGRhdGE7CisrICAgICAgICAgIGZvciAoaT0wOyBpPChkYXRhX3NpemU+PjEpOyBpKyspIHsKKysgICAgICAgICAgICBkYXRhX3V0ZjE2W2ldID0gR1VJTlQxNl9UT19MRSAoZGF0YV91dGYxNltpXSk7CisrICAgICAgICAgIH0KKyAgICAgICB9CisrICAgICAgLy9maWVsZCA9IGdfY29udmVydCAoZGF0YSwgZGF0YV9zaXplLCAiVVRGLTgiLCBpbl9lbmNvZGUsIE5VTEwsIE5VTEwsIE5VTEwpOworKyAgICAgICBmaWVsZCA9IGdfdXRmMTZfdG9fdXRmOCgoZ3VuaWNoYXIyICopZGF0YSwgKGdsb25nKShkYXRhX3NpemU+PjEpLCBOVUxMLCBOVUxMLCBOVUxMKTsKKysKKyAgICAgfQorIAorICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9nZXQtY2Fwcy1mcm9tLXNyYy1wYWQtd2hlbi1xdWVyeS1jYXBzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9nZXQtY2Fwcy1mcm9tLXNyYy1wYWQtd2hlbi1xdWVyeS1jYXBzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NGFiYmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2dldC1jYXBzLWZyb20tc3JjLXBhZC13aGVuLXF1ZXJ5LWNhcHMucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorRnJvbSBhZjBkYWMyNmY2MmFhY2ViNGJmMjY2NzIwOTExOTUzNzkzZTBmYzVkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogemhvdW1pbmcgPGI0MjU4NkBmcmVlc2NhbGUuY29tPgorRGF0ZTogV2VkLCAxNCBNYXkgMjAxNCAxMDoxNjoyMCArMDgwMAorU3ViamVjdDogW1BBVENIXSBFTkdSMDAzMTI1MTU6IGdldCBjYXBzIGZyb20gc3JjIHBhZCB3aGVuIHF1ZXJ5IGNhcHMKKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyODMxMgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogemhvdW1pbmcgPGI0MjU4NkBmcmVlc2NhbGUuY29tPgorLS0tCisgZ3N0LWxpYnMvZ3N0L3RhZy9nc3R0YWdkZW11eC5jIHwgICAxMyArKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKykKKyBtb2RlIGNoYW5nZSAxMDA2NDQgPT4gMTAwNzU1IGdzdC1saWJzL2dzdC90YWcvZ3N0dGFnZGVtdXguYworCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L3RhZy9nc3R0YWdkZW11eC5jIGIvZ3N0LWxpYnMvZ3N0L3RhZy9nc3R0YWdkZW11eC5jCitvbGQgbW9kZSAxMDA2NDQKK25ldyBtb2RlIDEwMDc1NQoraW5kZXggOWI2YzQ3OC4uYWUyMjk0YQorLS0tIGEvZ3N0LWxpYnMvZ3N0L3RhZy9nc3R0YWdkZW11eC5jCisrKysgYi9nc3QtbGlicy9nc3QvdGFnL2dzdHRhZ2RlbXV4LmMKK0BAIC0xNzA4LDYgKzE3MDgsMTkgQEAgZ3N0X3RhZ19kZW11eF9wYWRfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KQorICAgICAgIH0KKyAgICAgICBicmVhazsKKyAgICAgfQorKyAgICBjYXNlIEdTVF9RVUVSWV9DQVBTOgorKyAgICB7CisrCisrICAgICAgLyogV2UgY2FuIGhpamFjayBjYXBzIHF1ZXJ5IGlmIHdlIHR5cGVmaW5kIGFscmVhZHkgKi8KKysgICAgICBpZiAoZGVtdXgtPnByaXYtPnNyY19jYXBzKSB7CisrICAgICAgICBnc3RfcXVlcnlfc2V0X2NhcHNfcmVzdWx0IChxdWVyeSwgZGVtdXgtPnByaXYtPnNyY19jYXBzKTsKKysgICAgICAgIHJlcyA9IFRSVUU7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBwYXJlbnQsIHF1ZXJ5KTsKKysgICAgICB9CisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKyAgICAgZGVmYXVsdDoKKyAgICAgICByZXMgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBxdWVyeSk7CisgICAgICAgYnJlYWs7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9oYW5kbGUtYXVkaW8tdmlkZW8tZGVjb2Rlci1lcnJvci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvaGFuZGxlLWF1ZGlvLXZpZGVvLWRlY29kZXItZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODMzY2U3MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvaGFuZGxlLWF1ZGlvLXZpZGVvLWRlY29kZXItZXJyb3IucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSBiY2IyYjhiNmY0OWU3YzY2MTI0YTRmNWUwN2RlYTgyOWQ1ZWJmZTU5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTHlvbiBXYW5nIDxseW9uLndhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IE1vbiwgMTUgRGVjIDIwMTQgMTY6NTI6MDcgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gaGFuZGxlIGF1ZGlvL3ZpZGVvIGRlY29kZXIgZXJyb3IKKworV2hlbiB0aGVyZSBpcyBpbnB1dCBkYXRhIGFuZCBubyBvdXRwdXQgZGF0YSB0byB0aGUgZW5kIG9mIHRoZSBzdHJlYW0sIGl0IHdpbGwKK3NlbmQgR1NUX0VMRU1FTlRfRVJST1IsIFNvIHRoZSBjbGlwcyBwbGF5aW5nIHdpbGwgcXVpdC4KK0hvd2V2ZXIsIGlmIG9ubHkgb25lIG9mIHRoZSB0cmFja3MgaXMgY29ycnVwdCwgdGhlcmUgaXMgbm8gbmVlZCB0byBxdWl0IG90aGVyCit0cmFja3MgcGxheWluZy4KKworVGhlIHBhdGNoIGNvbW1lbnRzIHRoZSBHU1RfRUxFTUVOVF9FUlJPUigpIGFuZCBqdXN0IGFkZCBHU1RfRVJST1JfT0JKRUNUKCkKK2luZm9ybWF0aW9uIGluc3RlYWQuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQxNTQyXQorCitTaWduZWQtb2ZmLWJ5OiBMeW9uIFdhbmcgPGx5b24ud2FuZ0BmcmVlc2NhbGUuY29tPgorLS0tCisgZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGF1ZGlvZGVjb2Rlci5jIHwgICAgNSArKystLQorIGdzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2RlY29kZXIuYyB8ICAgIDUgKysrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKyBtb2RlIGNoYW5nZSAxMDA2NDQgPT4gMTAwNzU1IGdzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2RlY29kZXIuYworIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZGVjb2Rlci5jCisKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9kZWNvZGVyLmMgYi9nc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9kZWNvZGVyLmMKK29sZCBtb2RlIDEwMDY0NAorbmV3IG1vZGUgMTAwNzU1CitpbmRleCBjMmU3YTI4Li44OTFkZjBhCistLS0gYS9nc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9kZWNvZGVyLmMKKysrKyBiL2dzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2RlY29kZXIuYworQEAgLTIxMjMsOSArMjEyMywxMCBAQCBnc3RfYXVkaW9fZGVjb2Rlcl9zaW5rX2V2ZW50ZnVuYyAoR3N0QXVkaW9EZWNvZGVyICogZGVjLCBHc3RFdmVudCAqIGV2ZW50KQorICAgICAgIEdTVF9BVURJT19ERUNPREVSX1NUUkVBTV9VTkxPQ0sgKGRlYyk7CisgCisgICAgICAgaWYgKGRlYy0+cHJpdi0+Y3R4LmhhZF9pbnB1dF9kYXRhICYmICFkZWMtPnByaXYtPmN0eC5oYWRfb3V0cHV0X2RhdGEpIHsKKy0gICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChkZWMsIFNUUkVBTSwgREVDT0RFLAorKyAgICAgICAgLyogR1NUX0VMRU1FTlRfRVJST1IgKGRlYywgU1RSRUFNLCBERUNPREUsCisgICAgICAgICAgICAgKCJObyB2YWxpZCBmcmFtZXMgZGVjb2RlZCBiZWZvcmUgZW5kIG9mIHN0cmVhbSIpLAorLSAgICAgICAgICAgICgibm8gdmFsaWQgZnJhbWVzIGZvdW5kIikpOworKyAgICAgICAgICAgICgibm8gdmFsaWQgZnJhbWVzIGZvdW5kIikpOyAqLworKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChkZWMsICJObyB2YWxpZCBmcmFtZXMgZGVjb2RlZCBiZWZvcmUgZW5kIG9mIHN0cmVhbSIpOworICAgICAgIH0KKyAKKyAgICAgICAvKiBzZW5kIHRhZ2xpc3QgaWYgbm8gdmFsaWQgZnJhbWUgaXMgZGVjb2RlZCB1dGlsIEVPUyAqLworZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2RlY29kZXIuYyBiL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2RlY29kZXIuYworb2xkIG1vZGUgMTAwNjQ0CituZXcgbW9kZSAxMDA3NTUKK2luZGV4IGFjNTgxZTEuLjQyNzhiY2QKKy0tLSBhL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2RlY29kZXIuYworKysrIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZGVjb2Rlci5jCitAQCAtMTA2OCw5ICsxMDY4LDEwIEBAIGdzdF92aWRlb19kZWNvZGVyX3NpbmtfZXZlbnRfZGVmYXVsdCAoR3N0VmlkZW9EZWNvZGVyICogZGVjb2RlciwKKyAKKyAgICAgICAvKiBFcnJvciBvdXQgZXZlbiBpZiBFT1Mgd2FzIG9rIHdoZW4gd2UgaGFkIGlucHV0LCBidXQgbm8gb3V0cHV0ICovCisgICAgICAgaWYgKHJldCAmJiBwcml2LT5oYWRfaW5wdXRfZGF0YSAmJiAhcHJpdi0+aGFkX291dHB1dF9kYXRhKSB7CistICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZGVjb2RlciwgU1RSRUFNLCBERUNPREUsCisrICAgICAgICAvKiBHU1RfRUxFTUVOVF9FUlJPUiAoZGVjb2RlciwgU1RSRUFNLCBERUNPREUsCisgICAgICAgICAgICAgKCJObyB2YWxpZCBmcmFtZXMgZGVjb2RlZCBiZWZvcmUgZW5kIG9mIHN0cmVhbSIpLAorLSAgICAgICAgICAgICgibm8gdmFsaWQgZnJhbWVzIGZvdW5kIikpOworKyAgICAgICAgICAgICgibm8gdmFsaWQgZnJhbWVzIGZvdW5kIikpOyAqLworKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChkZWNvZGVyLCAiTm8gdmFsaWQgZnJhbWVzIGRlY29kZWQgYmVmb3JlIGVuZCBvZiBzdHJlYW0iKTsKKyAgICAgICB9CisgCisgICAgICAgLyogRm9yd2FyZCBFT1MgaW1tZWRpYXRlbHkuIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBubworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvdGFnbGlzdC1ub3Qtc2VuZC10by1kb3duLXN0cmVhbS1pZi1hbGwtdGhlLWZyYW1lLWNvci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvdGFnbGlzdC1ub3Qtc2VuZC10by1kb3duLXN0cmVhbS1pZi1hbGwtdGhlLWZyYW1lLWNvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmE1MmIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS90YWdsaXN0LW5vdC1zZW5kLXRvLWRvd24tc3RyZWFtLWlmLWFsbC10aGUtZnJhbWUtY29yLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0Zyb20gNjhmYTFiMTQyNWFkMmM1ZjdjNTAxM2QwOTQzMTUzYThhNmQwOTM0ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEppYW4gTGkgPGxqLnFmeS5zaEBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDI0IFNlcCAyMDE0IDE3OjIxOjAyICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHRhZ2xpc3Qgbm90IHNlbmQgdG8gZG93biBzdHJlYW0gaWYgYWxsIHRoZSBmcmFtZSBjb3JydXB0ZWQKKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNzI0NgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSmlhbiBMaSA8bGoucWZ5LnNoQGdtYWlsLmNvbT4KKy0tLQorIGdzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2RlY29kZXIuYyB8ICAgIDkgKysrKysrKysrCisgZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZGVjb2Rlci5jIHwgICAgOCArKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGF1ZGlvZGVjb2Rlci5jIGIvZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGF1ZGlvZGVjb2Rlci5jCitpbmRleCAzNTA0Njc4Li4zZDY5ZWZlIDEwMDY0NAorLS0tIGEvZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGF1ZGlvZGVjb2Rlci5jCisrKysgYi9nc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9kZWNvZGVyLmMKK0BAIC0yMDgzLDYgKzIwODMsMTUgQEAgZ3N0X2F1ZGlvX2RlY29kZXJfc2lua19ldmVudGZ1bmMgKEdzdEF1ZGlvRGVjb2RlciAqIGRlYywgR3N0RXZlbnQgKiBldmVudCkKKyAgICAgICBnc3RfYXVkaW9fZGVjb2Rlcl9kcmFpbiAoZGVjKTsKKyAgICAgICBHU1RfQVVESU9fREVDT0RFUl9TVFJFQU1fVU5MT0NLIChkZWMpOworIAorKyAgICAgIC8qIHNlbmQgdGFnbGlzdCBpZiBubyB2YWxpZCBmcmFtZSBpcyBkZWNvZGVkIHV0aWwgRU9TICovCisrICAgICAgaWYgKGRlYy0+cHJpdi0+dGFnbGlzdCAmJiBkZWMtPnByaXYtPnRhZ2xpc3RfY2hhbmdlZCkgeworKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVjLCAiY29kZWMgdGFnICUiIEdTVF9QVFJfRk9STUFULCBkZWMtPnByaXYtPnRhZ2xpc3QpOworKyAgICAgICAgaWYgKCFnc3RfdGFnX2xpc3RfaXNfZW1wdHkgKGRlYy0+cHJpdi0+dGFnbGlzdCkpCisrICAgICAgICAgIGdzdF9hdWRpb19kZWNvZGVyX3B1c2hfZXZlbnQgKGRlYywKKysgICAgICAgICAgICAgIGdzdF9ldmVudF9uZXdfdGFnIChnc3RfdGFnX2xpc3RfcmVmIChkZWMtPnByaXYtPnRhZ2xpc3QpKSk7CisrICAgICAgICBkZWMtPnByaXYtPnRhZ2xpc3RfY2hhbmdlZCA9IEZBTFNFOworKyAgICAgIH0KKysKKyAgICAgICAvKiBGb3J3YXJkIEVPUyBiZWNhdXNlIG5vIGJ1ZmZlciBvciBzZXJpYWxpemVkIGV2ZW50IHdpbGwgY29tZSBhZnRlcgorICAgICAgICAqIEVPUyBhbmQgbm90aGluZyBjb3VsZCB0cmlnZ2VyIGFub3RoZXIgX2ZpbmlzaF9mcmFtZSgpIGNhbGwuICovCisgICAgICAgcmV0ID0gZ3N0X2F1ZGlvX2RlY29kZXJfcHVzaF9ldmVudCAoZGVjLCBldmVudCk7CitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZGVjb2Rlci5jIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZGVjb2Rlci5jCitpbmRleCBkZDhhYmUzLi5kOWJmZTRkIDEwMDY0NAorLS0tIGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZGVjb2Rlci5jCisrKysgYi9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMKK0BAIC0xMDI0LDYgKzEwMjQsMTQgQEAgZ3N0X3ZpZGVvX2RlY29kZXJfc2lua19ldmVudF9kZWZhdWx0IChHc3RWaWRlb0RlY29kZXIgKiBkZWNvZGVyLAorICAgICAgICAqIHBhcmVudCBjbGFzcycgOjpzaW5rX2V2ZW50KCkgdW50aWwgYSBsYXRlciB0aW1lLgorICAgICAgICAqLworICAgICAgIGZvcndhcmRfaW1tZWRpYXRlID0gVFJVRTsKKysKKysgICAgICAvKiBzZW5kIHRhZ2xpc3QgaWYgbm8gdmFsaWQgZnJhbWUgaXMgZGVjb2RlZCB1dGlsIEVPUyAqLworKyAgICAgIGlmIChkZWNvZGVyLT5wcml2LT50YWdzICYmIGRlY29kZXItPnByaXYtPnRhZ3NfY2hhbmdlZCkgeworKyAgICAgICAgZ3N0X3ZpZGVvX2RlY29kZXJfcHVzaF9ldmVudCAoZGVjb2RlciwKKysgICAgICAgICAgICBnc3RfZXZlbnRfbmV3X3RhZyAoZ3N0X3RhZ19saXN0X3JlZiAoZGVjb2Rlci0+cHJpdi0+dGFncykpKTsKKysgICAgICAgIGRlY29kZXItPnByaXYtPnRhZ3NfY2hhbmdlZCA9IEZBTFNFOworKyAgICAgIH0KKysKKyAgICAgICBicmVhazsKKyAgICAgfQorICAgICBjYXNlIEdTVF9FVkVOVF9HQVA6CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS92aWRlb2J1ZmZlcl91cGRhdGFfYWxpZ25tZW50X3VwZGF0ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvdmlkZW9idWZmZXJfdXBkYXRhX2FsaWdubWVudF91cGRhdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGNmZGE5NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvdmlkZW9idWZmZXJfdXBkYXRhX2FsaWdubWVudF91cGRhdGUucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorY29tbWl0IDg4ZDI1M2VhMjNiMDYyODlkZjQwNDAxMTYwYjYwNjMyM2YxNmM5MTAKK0F1dGhvcjogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgTW9uIERlYyAxNSAwOTozNDozNSAyMDE0ICswODAwCisKK3ZpZGVvcG9vbDogdXBkYXRlIHZpZGVvIGFsaWdubWVudCBhZnRlciB2aWRlbyBhbGlnbm1lbnQKKworVmlkZW8gYnVmZmVyIHBvb2wgd2lsbCB1cGRhdGUgdmlkZW8gYWxpZ25tZW50IHRvIHJlc3BlY3Qgc3RyaWRlIGFsaWdubWVudAorcmVxdWlyZW1lbnQuIEJ1dCBoYXZlbid0IHVwZGF0ZSBpdCB0byB2aWRlbyBhbGlnbm1lbnQgaW4gY29uZmlndXJlLgorV2hpY2ggd2lsbCBjYXVzZSB1c2VyIGdldCB3cm9uZyB2aWRlbyBhbGlnbm1lbnQuCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDE1MDEKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbMS41LjFdCisKK1NpZ25lZC1vZmYtYnk6IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvcG9vbC5jIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvcG9vbC5jCitpbmRleCA0NDc1ZjQ1Li5hY2VmNTk0IDEwMDY0NAorLS0tIGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvcG9vbC5jCisrKysgYi9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9wb29sLmMKK0BAIC0xNjcsNiArMTY3LDcgQEAgdmlkZW9fYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZyAoR3N0QnVmZmVyUG9vbCAqIHBvb2wsIEdzdFN0cnVjdHVyZSAqIGNvbmZpZykKKyAgICAgLyogZ2V0IGFuIGFwcGx5IHRoZSBhbGlnbm1lbnQgdG8gdGhlIGluZm8gKi8KKyAgICAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19nZXRfdmlkZW9fYWxpZ25tZW50IChjb25maWcsICZwcml2LT52aWRlb19hbGlnbik7CisgICAgIGdzdF92aWRlb19pbmZvX2FsaWduICgmaW5mbywgJnByaXYtPnZpZGVvX2FsaWduKTsKKysgICAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfdmlkZW9fYWxpZ25tZW50IChjb25maWcsICZwcml2LT52aWRlb19hbGlnbik7CisgICB9CisgICBwcml2LT5pbmZvID0gaW5mbzsKKworZGlmZiAtLWdpdCBhL3N5cy94aW1hZ2UveGltYWdlcG9vbC5jIGIvc3lzL3hpbWFnZS94aW1hZ2Vwb29sLmMKK2luZGV4IDZjYzJjZmEuLjZhMWNiYzkgMTAwNjQ0CistLS0gYS9zeXMveGltYWdlL3hpbWFnZXBvb2wuYworKysrIGIvc3lzL3hpbWFnZS94aW1hZ2Vwb29sLmMKK0BAIC01OTcsNiArNTk3LDggQEAgeGltYWdlX2J1ZmZlcl9wb29sX3NldF9jb25maWcgKEdzdEJ1ZmZlclBvb2wgKiBwb29sLCBHc3RTdHJ1Y3R1cmUgKiBjb25maWcpCisgICAgIC8qIGRvIHBhZGRpbmcgYW5kIGFsaWdubWVudCAqLworICAgICBnc3RfdmlkZW9faW5mb19hbGlnbiAoJmluZm8sICZwcml2LT5hbGlnbik7CisKKysgICAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfdmlkZW9fYWxpZ25tZW50IChjb25maWcsICZwcml2LT5hbGlnbik7CisrCisgICAgIC8qIHdlIG5lZWQgdGhlIHZpZGVvIG1ldGFkYXRhIHRvbyBub3cgKi8KKyAgICAgcHJpdi0+YWRkX21ldGF2aWRlbyA9IFRSVUU7CisgICB9IGVsc2UgeworZGlmZiAtLWdpdCBhL3N5cy94dmltYWdlL3h2aW1hZ2Vwb29sLmMgYi9zeXMveHZpbWFnZS94dmltYWdlcG9vbC5jCitpbmRleCAyNDRhNTFhLi4zNGIxYWIyIDEwMDY0NAorLS0tIGEvc3lzL3h2aW1hZ2UveHZpbWFnZXBvb2wuYworKysrIGIvc3lzL3h2aW1hZ2UveHZpbWFnZXBvb2wuYworQEAgLTEyNCw2ICsxMjQsOCBAQCB4dmltYWdlX2J1ZmZlcl9wb29sX3NldF9jb25maWcgKEdzdEJ1ZmZlclBvb2wgKiBwb29sLCBHc3RTdHJ1Y3R1cmUgKiBjb25maWcpCisgICAgIC8qIGRvIHBhZGRpbmcgYW5kIGFsaWdubWVudCAqLworICAgICBnc3RfdmlkZW9faW5mb19hbGlnbiAoJmluZm8sICZwcml2LT5hbGlnbik7CisKKysgICAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfdmlkZW9fYWxpZ25tZW50IChjb25maWcsICZwcml2LT5hbGlnbik7CisrCisgICAgIC8qIHdlIG5lZWQgdGhlIHZpZGVvIG1ldGFkYXRhIHRvbyBub3cgKi8KKyAgICAgcHJpdi0+YWRkX21ldGF2aWRlbyA9IFRSVUU7CisgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS92aWRlb2VuY29kZXItS2VlcC1zdGlja3ktZXZlbnRzLWFyb3VuZC13aGVuLWRvaW5nLWEtc29mdC0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL3ZpZGVvZW5jb2Rlci1LZWVwLXN0aWNreS1ldmVudHMtYXJvdW5kLXdoZW4tZG9pbmctYS1zb2Z0LS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDc2OTY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS92aWRlb2VuY29kZXItS2VlcC1zdGlja3ktZXZlbnRzLWFyb3VuZC13aGVuLWRvaW5nLWEtc29mdC0ucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSBjM2Y3ZDM2Yjk5MmEzY2JjZWUzMzg2ZGVhODU3MjBmM2NiMDRlMWZmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IEZyaSwgMjcgTWFyIDIwMTUgMTM6Mzk6NDMgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gdmlkZW9lbmNvZGVyOiBLZWVwIHN0aWNreSBldmVudHMgYXJvdW5kIHdoZW4gZG9pbmcgYSBzb2Z0CisgcmVzZXQKKworVGhlIGN1cnJlbnQgY29kZSB3aWxsIGZpcnN0IGRpc2NhcmQgYWxsIGZyYW1lcywgYW5kIHRoZW4gdHJpZXMgdG8gY29weQorYWxsIHN0aWNreSBldmVudHMgZnJvbSB0aGUgKG5vdyBkaXNjYXJkZWQpIGZyYW1lcy4gTGV0J3MgY2hhbmdlIHRoZSBvcmRlci4KKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0Njg2NQorCitVcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkIAorCistLS0KKyBnc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9lbmNvZGVyLmMgfCAgICA4ICsrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2VuY29kZXIuYyBiL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2VuY29kZXIuYworaW5kZXggNjE0YmEyZC4uNGM1YjExMSAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2VuY29kZXIuYworKysrIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZW5jb2Rlci5jCitAQCAtMzQwLDEwICszNDAsNiBAQCBnc3RfdmlkZW9fZW5jb2Rlcl9yZXNldCAoR3N0VmlkZW9FbmNvZGVyICogZW5jb2RlciwgZ2Jvb2xlYW4gaGFyZCkKKyAKKyAgIHByaXYtPmRyYWluZWQgPSBUUlVFOworIAorLSAgZ19saXN0X2ZvcmVhY2ggKHByaXYtPmZyYW1lcywgKEdGdW5jKSBnc3RfdmlkZW9fY29kZWNfZnJhbWVfdW5yZWYsIE5VTEwpOworLSAgZ19saXN0X2ZyZWUgKHByaXYtPmZyYW1lcyk7CistICBwcml2LT5mcmFtZXMgPSBOVUxMOworLQorICAgcHJpdi0+Ynl0ZXMgPSAwOworICAgcHJpdi0+dGltZSA9IDA7CisgCitAQCAtMzkyLDYgKzM4OCwxMCBAQCBnc3RfdmlkZW9fZW5jb2Rlcl9yZXNldCAoR3N0VmlkZW9FbmNvZGVyICogZW5jb2RlciwgZ2Jvb2xlYW4gaGFyZCkKKyAgICAgICAgIGVuY29kZXItPnByaXYtPmN1cnJlbnRfZnJhbWVfZXZlbnRzKTsKKyAgIH0KKyAKKysgIGdfbGlzdF9mb3JlYWNoIChwcml2LT5mcmFtZXMsIChHRnVuYykgZ3N0X3ZpZGVvX2NvZGVjX2ZyYW1lX3VucmVmLCBOVUxMKTsKKysgIGdfbGlzdF9mcmVlIChwcml2LT5mcmFtZXMpOworKyAgcHJpdi0+ZnJhbWVzID0gTlVMTDsKKysKKyAgIEdTVF9WSURFT19FTkNPREVSX1NUUkVBTV9VTkxPQ0sgKGVuY29kZXIpOworIAorICAgcmV0dXJuIHJldDsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlXzEuNC41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZV8xLjQuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDljMmNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZV8xLjQuNS5iYgpAQCAtMCwwICsxLDMwIEBACitpbmNsdWRlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWM1NGNlOTM0NTcyNzE3NWZmNjZkMTdiNjdmZjUxZjU4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQucGw7YmVnaW5saW5lPTI7ZW5kbGluZT0xNzttZDU9YTRlMTgzMGZjZTA3ODAyOGM4ZjA5NzQxNjEyNzI2MDcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTY3NjJlZDQ0MmIzODIyMzg3YTUxYzkyZDkyOGVhZDBkIFwKKyAgICAgICAgICAgICAgICAgICAiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kby1ub3QtY2hhbmdlLWVvcy1ldmVudC10by1nYXAtZXZlbnQtaWYucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2dldC1jYXBzLWZyb20tc3JjLXBhZC13aGVuLXF1ZXJ5LWNhcHMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3RhZ2xpc3Qtbm90LXNlbmQtdG8tZG93bi1zdHJlYW0taWYtYWxsLXRoZS1mcmFtZS1jb3IucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2ZpeC1pZDNkZW11eC11dGYxNi10by11dGY4LWlzc3VlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9oYW5kbGUtYXVkaW8tdmlkZW8tZGVjb2Rlci1lcnJvci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdmlkZW9idWZmZXJfdXBkYXRhX2FsaWdubWVudF91cGRhdGUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDItdmlkZW8tZnJhbWUtQWRkLUdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtdmlkZW8tZnJhbWUtRG9uLXQtcmVmLWJ1ZmZlcnMtdHdpY2Utd2hlbi1tYXBwaW5nLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAzLXZpZGVvZmlsdGVyLVVzZS1uZXctR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdmlkZW9lbmNvZGVyLUtlZXAtc3RpY2t5LWV2ZW50cy1hcm91bmQtd2hlbi1kb2luZy1hLXNvZnQtLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kby1ub3QtY2hhbmdlLWVvcy1ldmVudC10by1nYXAtZXZlbnQyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kby1ub3QtY2hhbmdlLWVvcy1ldmVudC10by1nYXAtZXZlbnQzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWJhc2V0ZXh0b3ZlcmxheS1tYWtlLW1lbW9yeS1jb3B5LXdoZW4tdmlkZW8tYnVmZmVyLXMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDItZ3N0cGxheXNpbmstZG9uLXQtc2V0LWFzeW5jLW9mLWN1c3RvbS10ZXh0LXNpbmstdG8tZi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMy1zc2FwYXJzZS1lbmhhbmNlLVNTQS10ZXh0LWxpbmVzLXBhcnNpbmcucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDQtc3VicGFyc2Utc2V0LW5lZWRfc2VnbWVudC1hZnRlci1zaW5rLXBhZC1yZWNlaXZlZC1HUy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZW5jb2RlYmluLU5lZWQtbW9yZS1idWZmZXJzLWluLW91dHB1dC1xdWV1ZS1mb3ItYmV0dC5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzNTcxNjVhZjYyNWMwY2EzNTNhYjQ3YzVkODQzOTIwZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3N2JkODE5OWU3YTMxMmQzZDcxZGU5YjdkZGY3NjFhM2I3ODU2MGEyYzJhODA4MjlkMDgxNWNhMzljYmQ1NTFkIgorCitTID0gIiR7V09SS0RJUn0vZ3N0LXBsdWdpbnMtYmFzZS0ke1BWfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2VfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJlM2E0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2VfZ2l0LmJiCkBAIC0wLDAgKzEsMTkgQEAKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworaW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jNTRjZTkzNDU3MjcxNzVmZjY2ZDE3YjY3ZmY1MWY1OCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jb21tb24vY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LnBsO2JlZ2lubGluZT0yO2VuZGxpbmU9MTc7bWQ1PWE0ZTE4MzBmY2UwNzgwMjhjOGYwOTc0MTYxMjcyNjA3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT02NzYyZWQ0NDJiMzgyMjM4N2E1MWM5MmQ5MjhlYWQwZCBcCisgICAgICAgICAgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNSRVYgPSAiOGQ0Y2I2NGE0YjlkODRiMTAwNzZiZjM1MGY4MGEwZDZlYTY4ZWMyZCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJY2QgJHtTfQorCS4vYXV0b2dlbi5zaCAtLW5vY29uZmlndXJlCisJY2QgJHtCfQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMzE2ZGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLmluYwpAQCAtMCwwICsxLDU3IEBACityZXF1aXJlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLmluYworCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xKyIKKworIyBsaWJpZDN0YWcKK0RFUEVORFMgKz0gImdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgemxpYiBiemlwMiBsaWJjYXAiCisKK2luaGVyaXQgZ2V0dGV4dAorCisKK1BBQ0tBR0VDT05GSUcgPz89ICIgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHVsc2VhdWRpbycsICdwdWxzZWF1ZGlvJywgJycsIGQpfSBcCisgICAgb3JjIGNhaXJvIGZsYWMgZ2RrLXBpeGJ1ZiBndWRldiBqcGVnIGxpYnBuZyBzb3VwIHNwZWV4IHRhZ2xpYiBcCisgICAgIgorCitYMTFERVBFTkRTID0gInZpcnR1YWwvbGlieDExIGxpYnNtIGxpYnhyZW5kZXIgbGlieGZpeGVzIGxpYnhkYW1hZ2UiCitYMTFFTkFCTEVPUFRTID0gIi0tZW5hYmxlLXggLS1lbmFibGUteHNobSIKK1gxMURJU0FCTEVPUFRTID0gIi0tZGlzYWJsZS14IC0tZGlzYWJsZS14c2htIgorUEFDS0FHRUNPTkZJR1t4MTFdICAgICAgICA9ICIke1gxMUVOQUJMRU9QVFN9LCR7WDExRElTQUJMRU9QVFN9LCR7WDExREVQRU5EU30iCitQQUNLQUdFQ09ORklHW3B1bHNlYXVkaW9dID0gIi0tZW5hYmxlLXB1bHNlLC0tZGlzYWJsZS1wdWxzZSxwdWxzZWF1ZGlvIgorUEFDS0FHRUNPTkZJR1tjYWlyb10gICAgICA9ICItLWVuYWJsZS1jYWlybywtLWRpc2FibGUtY2Fpcm8sY2Fpcm8iCitQQUNLQUdFQ09ORklHW2ZsYWNdICAgICAgID0gIi0tZW5hYmxlLWZsYWMsLS1kaXNhYmxlLWZsYWMsZmxhYyIKK1BBQ0tBR0VDT05GSUdbZ2RrLXBpeGJ1Zl0gPSAiLS1lbmFibGUtZ2RrX3BpeGJ1ZiwtLWRpc2FibGUtZ2RrX3BpeGJ1ZixnZGstcGl4YnVmIgorUEFDS0FHRUNPTkZJR1tndWRldl0gICAgICA9ICItLXdpdGgtZ3VkZXYsLS13aXRob3V0LWd1ZGV2LHVkZXYiCitQQUNLQUdFQ09ORklHW2phY2tdICAgICAgID0gIi0tZW5hYmxlLWphY2ssLS1kaXNhYmxlLWphY2ssamFjayIKK1BBQ0tBR0VDT05GSUdbanBlZ10gICAgICAgPSAiLS1lbmFibGUtanBlZywtLWRpc2FibGUtanBlZyxqcGVnIgorUEFDS0FHRUNPTkZJR1tsaWJwbmddICAgICA9ICItLWVuYWJsZS1saWJwbmcsLS1kaXNhYmxlLWxpYnBuZyxsaWJwbmciCitQQUNLQUdFQ09ORklHW3NvdXBdICAgICAgID0gIi0tZW5hYmxlLXNvdXAsLS1kaXNhYmxlLXNvdXAsbGlic291cC0yLjQiCitQQUNLQUdFQ09ORklHW3NwZWV4XSAgICAgID0gIi0tZW5hYmxlLXNwZWV4LC0tZGlzYWJsZS1zcGVleCxzcGVleCIKK1BBQ0tBR0VDT05GSUdbdGFnbGliXSAgICAgPSAiLS1lbmFibGUtdGFnbGliLC0tZGlzYWJsZS10YWdsaWIsdGFnbGliIgorUEFDS0FHRUNPTkZJR1t2cHhdICAgICAgICA9ICItLWVuYWJsZS12cHgsLS1kaXNhYmxlLXZweCxsaWJ2cHgiCitQQUNLQUdFQ09ORklHW3dhdnBhY2tdICAgID0gIi0tZW5hYmxlLXdhdnBhY2ssLS1kaXNhYmxlLXdhdnBhY2ssd2F2cGFjayIKKworIyB0aGUgMTM5NCBwbHVnaW5zIHJlcXVpcmUgYm90aCBsaWJyYXcxMzk0IGFuZCBsaWJpZWM2MTg4MworIyB0aGUgZm9ybWVyIGlzIGluY2x1ZGVkIGluIG1ldGEtb2UsIHRoZSBsYXR0ZXIgaXNuJ3QKKyMgLT4gZGlzYWJsZWQKKworRVhUUkFfT0VDT05GICs9ICIgXAorICAgIC0tZW5hYmxlLW9zcyBcCisgICAgLS1lbmFibGUtZ3N0X3Y0bDIgXAorICAgIC0td2l0aG91dC1saWJ2NGwyIFwKKyAgICAtLWRpc2FibGUtZGlyZWN0c291bmQgXAorICAgIC0tZGlzYWJsZS13YXZlZm9ybSBcCisgICAgLS1kaXNhYmxlLW9zczQgXAorICAgIC0tZGlzYWJsZS1zdW5hdWRpbyBcCisgICAgLS1kaXNhYmxlLW9zeF9hdWRpbyBcCisgICAgLS1kaXNhYmxlLW9zeF92aWRlbyBcCisgICAgLS1kaXNhYmxlLWFhbGliIFwKKyAgICAtLWRpc2FibGUtbGliY2FjYSBcCisgICAgLS1kaXNhYmxlLWxpYmR2IFwKKyAgICAtLWRpc2FibGUtc2hvdXQyIFwKKyAgICAtLWRpc2FibGUtZXhhbXBsZXMgXAorICAgIC0tZGlzYWJsZS1kdjEzOTQgXAorIgorCitGSUxFU18ke1BOfS1lcXVhbGl6ZXIgKz0gIiR7ZGF0YWRpcn0vZ3N0cmVhbWVyLTEuMC9wcmVzZXRzLyoucHJzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC8wMDAxLWdzdHJ0cG1wNGdwYXktc2V0LWRhZmF1bHQtdmFsdWUtZm9yLU1QRUc0LXdpdGhvdXQtY28ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLzAwMDEtZ3N0cnRwbXA0Z3BheS1zZXQtZGFmYXVsdC12YWx1ZS1mb3ItTVBFRzQtd2l0aG91dC1jby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMTk3M2Q0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC8wMDAxLWdzdHJ0cG1wNGdwYXktc2V0LWRhZmF1bHQtdmFsdWUtZm9yLU1QRUc0LXdpdGhvdXQtY28ucGF0Y2gKQEAgLTAsMCArMSw2MiBAQAorRnJvbSBjNzgyYTMwNDgyOTA4YTRiNGRkOWNkNGFiZmY5ZjliYzQwMTY2OThmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFR1ZSwgNSBBdWcgMjAxNCAxNDo0MDo0NiArMDgwMAorU3ViamVjdDogW1BBVENIXSBnc3RydHBtcDRncGF5OiBzZXQgZGFmYXVsdCB2YWx1ZSBmb3IgTVBFRzQgd2l0aG91dCBjb2RlYworIGRhdGEgaW4gY2Fwcy4KKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNDI2MworCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorLS0tCisgZ3N0L3J0cC9nc3RydHBtcDRncGF5LmMgfCAgIDE5ICsrKysrKysrKysrKysrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBtcDRncGF5LmMgYi9nc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYworaW5kZXggNzkxM2Q5YS4uMTc0OWQzOSAxMDA2NDQKKy0tLSBhL2dzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jCisrKysgYi9nc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYworQEAgLTM5MCw2ICszOTAsNyBAQCBnc3RfcnRwX21wNGdfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCisgICBjb25zdCBHVmFsdWUgKmNvZGVjX2RhdGE7CisgICBjb25zdCBnY2hhciAqbWVkaWFfdHlwZSA9IE5VTEw7CisgICBnYm9vbGVhbiByZXM7CisrICBjb25zdCBnY2hhciAqbmFtZTsKKyAKKyAgIHJ0cG1wNGdwYXkgPSBHU1RfUlRQX01QNEdfUEFZIChwYXlsb2FkKTsKKyAKK0BAIC00MDAsNyArNDAxLDYgQEAgZ3N0X3J0cF9tcDRnX3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQorICAgICBHU1RfTE9HX09CSkVDVCAocnRwbXA0Z3BheSwgImdvdCBjb2RlY19kYXRhIik7CisgICAgIGlmIChHX1ZBTFVFX1RZUEUgKGNvZGVjX2RhdGEpID09IEdTVF9UWVBFX0JVRkZFUikgeworICAgICAgIEdzdEJ1ZmZlciAqYnVmZmVyOworLSAgICAgIGNvbnN0IGdjaGFyICpuYW1lOworIAorICAgICAgIGJ1ZmZlciA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyIChjb2RlY19kYXRhKTsKKyAgICAgICBHU1RfTE9HX09CSkVDVCAocnRwbXA0Z3BheSwgImNvbmZpZ3VyaW5nIGNvZGVjX2RhdGEiKTsKK0BAIC00MjYsNiArNDI2LDIzIEBAIGdzdF9ydHBfbXA0Z19wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKKyAKKyAgICAgICBydHBtcDRncGF5LT5jb25maWcgPSBnc3RfYnVmZmVyX2NvcHkgKGJ1ZmZlcik7CisgICAgIH0KKysgIH0gZWxzZSB7CisrICAgIG5hbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzdHJ1Y3R1cmUpOworKworKyAgICBpZiAoIXN0cmNtcCAobmFtZSwgInZpZGVvL21wZWciKSkgeworKyAgICAgIHJ0cG1wNGdwYXktPnByb2ZpbGUgPSBnX3N0cmR1cCAoIjEiKTsKKysKKysgICAgICAvKiBmaXhlZCByYXRlICovCisrICAgICAgcnRwbXA0Z3BheS0+cmF0ZSA9IDkwMDAwOworKyAgICAgIC8qIHZpZGVvIHN0cmVhbSB0eXBlICovCisrICAgICAgcnRwbXA0Z3BheS0+c3RyZWFtdHlwZSA9ICI0IjsKKysgICAgICAvKiBubyBwYXJhbXMgZm9yIHZpZGVvICovCisrICAgICAgcnRwbXA0Z3BheS0+cGFyYW1zID0gTlVMTDsKKysgICAgICAvKiBtb2RlICovCisrICAgICAgcnRwbXA0Z3BheS0+bW9kZSA9ICJnZW5lcmljIjsKKysKKysgICAgICBtZWRpYV90eXBlID0gInZpZGVvIjsKKysgICAgfQorICAgfQorICAgaWYgKG1lZGlhX3R5cGUgPT0gTlVMTCkKKyAgICAgZ290byBjb25maWdfZmFpbGVkOworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QvZGVjcmVhc2VfYXN0ZXJpc2toMjYzX3JhbmsucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kL2RlY3JlYXNlX2FzdGVyaXNraDI2M19yYW5rLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI4ODYzMWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kL2RlY3JlYXNlX2FzdGVyaXNraDI2M19yYW5rLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK2NvbW1pdCBkNzFkNzRkYWFjOGVkNTQxNTZlZDEwMzk1OGFiNDU1YzYzYzcyYjBlCitBdXRob3I6IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIE1vbiBOb3YgMTAgMTE6MjU6NDcgMjAxNCArMDgwMAorCitbYXN0ZXJpc2toMjYzXSBkZWNyZWFzZSB0aGUgcmFuayBhcyB3ZSBoYXZuJ3QgdGhpcyBraW5kIG9mIGRlY29kZXIuCisKK0RlY3JlYXNlIHRoZSByYW5rIGFzIHdlIGhhdm4ndCB0aGlzIGtpbmQgb2YgZGVjb2Rlci4KKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczOTkzNQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KKworZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmMgYi9nc3QvcnRwL2dzdGFzdGVyaXNraDI2My5jCitpbmRleCBhMDFmYmM4Li44ZmEzMTk0IDEwMDY0NAorLS0tIGEvZ3N0L3J0cC9nc3Rhc3Rlcmlza2gyNjMuYworKysrIGIvZ3N0L3J0cC9nc3Rhc3Rlcmlza2gyNjMuYworQEAgLTIyNiw1ICsyMjYsNSBAQCBnYm9vbGVhbgorIGdzdF9hc3Rlcmlza2gyNjNfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKKyB7CisgICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImFzdGVyaXNraDI2MyIsCistICAgICAgR1NUX1JBTktfU0VDT05EQVJZLCBHU1RfVFlQRV9BU1RFUklTS19IMjYzKTsKKysgICAgICBHU1RfUkFOS19TRUNPTkRBUlkgLSAxLCBHU1RfVFlQRV9BU1RFUklTS19IMjYzKTsKKyB9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kXzEuNC41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZF8xLjQuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDNhYjYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZF8xLjQuNS5iYgpAQCAtMCwwICsxLDEzIEBACitpbmNsdWRlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQucGw7YmVnaW5saW5lPTI7ZW5kbGluZT0xNzttZDU9YTRlMTgzMGZjZTA3ODAyOGM4ZjA5NzQxNjEyNzI2MDcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0L3JlcGxheWdhaW4vcmdhbmFseXNpcy5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjM7bWQ1PWI2MGViZWZkNWIyZjVhOGUwY2FiNmJmZWUzOTFhNWZlIgorCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1nc3RydHBtcDRncGF5LXNldC1kYWZhdWx0LXZhbHVlLWZvci1NUEVHNC13aXRob3V0LWNvLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWNyZWFzZV9hc3Rlcmlza2gyNjNfcmFuay5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiZWFmMWE2ZGFmNzM3NDliYzQyM2ZlYWMzMDFkNjAwMzgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzliMWI1ZjNmN2JjYWE4YTYxNTIwMmViNWUxNzYxMjFlZWI4MzM2OTYwZjcwNjg3ZTUzNmFkNzhkYmM3ZTY0MSIKKworUyA9ICIke1dPUktESVJ9L2dzdC1wbHVnaW5zLWdvb2QtJHtQVn0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2RfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMGUwZWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kX2dpdC5iYgpAQCAtMCwwICsxLDE4IEBACitERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCisKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY29tbW9uL2NvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC5wbDtiZWdpbmxpbmU9MjtlbmRsaW5lPTE3O21kNT1hNGUxODMwZmNlMDc4MDI4YzhmMDk3NDE2MTI3MjYwNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvcmVwbGF5Z2Fpbi9yZ2FuYWx5c2lzLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMzttZDU9YjYwZWJlZmQ1YjJmNWE4ZTBjYWI2YmZlZTM5MWE1ZmUiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ1JFViA9ICJmZDAxMjM4MDBjOGMxY2YxNDY4YzBmYTVkNTkyYWQwZDBkOGI0MTQwIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwljZCAke1N9CisJLi9hdXRvZ2VuLnNoIC0tbm9jb25maWd1cmUKKwljZCAke0J9Cit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHkuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNiYTMxNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHkuaW5jCkBAIC0wLDAgKzEsMzAgQEAKK3JlcXVpcmUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjErICYgTEdQTHYyKyIKK0xJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKKworREVQRU5EUyArPSAiZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSBsaWJpZDN0YWciCisKK2luaGVyaXQgZ2V0dGV4dAorCisKK1BBQ0tBR0VDT05GSUcgPz89ICIgXAorICAgIG9yYyBhNTJkZWMgbGFtZSBtYWQgbXBlZzJkZWMgXAorICAgICIKKworUEFDS0FHRUNPTkZJR1thNTJkZWNdICAgPSAiLS1lbmFibGUtYTUyZGVjLC0tZGlzYWJsZS1hNTJkZWMsbGliYTUyIgorUEFDS0FHRUNPTkZJR1tjZGlvXSAgICAgPSAiLS1lbmFibGUtY2RpbywtLWRpc2FibGUtY2RpbyxsaWJjZGlvIgorUEFDS0FHRUNPTkZJR1tkdmRyZWFkXSAgPSAiLS1lbmFibGUtZHZkcmVhZCwtLWRpc2FibGUtZHZkcmVhZCxsaWJkdmRyZWFkIgorUEFDS0FHRUNPTkZJR1tsYW1lXSAgICAgPSAiLS1lbmFibGUtbGFtZSwtLWRpc2FibGUtbGFtZSxsYW1lIgorUEFDS0FHRUNPTkZJR1ttYWRdICAgICAgPSAiLS1lbmFibGUtbWFkLC0tZGlzYWJsZS1tYWQsbGlibWFkIgorUEFDS0FHRUNPTkZJR1ttcGVnMmRlY10gPSAiLS1lbmFibGUtbXBlZzJkZWMsLS1kaXNhYmxlLW1wZWcyZGVjLG1wZWcyZGVjIgorUEFDS0FHRUNPTkZJR1t4MjY0XSAgICAgPSAiLS1lbmFibGUteDI2NCwtLWRpc2FibGUteDI2NCx4MjY0IgorCisKK0VYVFJBX09FQ09ORiArPSAiIFwKKyAgICAtLWRpc2FibGUtYW1ybmIgXAorICAgIC0tZGlzYWJsZS1hbXJ3YiBcCisgICAgLS1kaXNhYmxlLXNpZHBsYXkgXAorICAgIC0tZGlzYWJsZS10d29sYW1lIFwKKyAgICAiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfMS40LjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5XzEuNC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1Y2IyOGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5XzEuNC41LmJiCkBAIC0wLDAgKzEsMTAgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseS5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvY2hlY2svZWxlbWVudHMveGluZ211eC5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjE7bWQ1PTRjNzcxYjhhZjE4ODcyNDg1NWNiOTljYWRkMzkwMDY4ICIKKworU1JDX1VSSVttZDVzdW1dID0gIjY5NTRiZWVkN2JiOWE5M2U0MjZkZWU1NDNmZjQ2MzkzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVjZDVlODFjZjYxODk0NGY0ZGM5MzVmMTY2OWIyMTI1ZThiYjJmZTljYzdkYzhkYzE1YjcyMjM3YWNhNDkwNjciCisKK1MgPSAiJHtXT1JLRElSfS9nc3QtcGx1Z2lucy11Z2x5LSR7UFZ9IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5X2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZjVmZmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5X2dpdC5iYgpAQCAtMCwwICsxLDE3IEBACitERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCisKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseS5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvY2hlY2svZWxlbWVudHMveGluZ211eC5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjE7bWQ1PTRjNzcxYjhhZjE4ODcyNDg1NWNiOTljYWRkMzkwMDY4ICIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDUkVWID0gIjA2YjhhYzEwY2VlODVjNWMzMDRjYTMyMDk5N2FhOGY0NDI5NWE2NmYiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWNkICR7U30KKwkuL2F1dG9nZW4uc2ggLS1ub2NvbmZpZ3VyZQorCWNkICR7Qn0KK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNzgzYjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy5pbmMKQEAgLTAsMCArMSw1OSBAQAorU1VNTUFSWSA9ICJQbHVnaW5zIGZvciB0aGUgR1N0cmVhbWVyIG11bHRpbWVkaWEgZnJhbWV3b3JrIDEueCIKK0hPTUVQQUdFID0gImh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PUdzdHJlYW1lciIKK1NFQ1RJT04gPSAibXVsdGltZWRpYSIKK0RFUEVORFMgPSAiZ3N0cmVhbWVyMS4wIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworR1NUUkVBTUVSXzFfMF9ERUJVRyA/PSAiLS1kaXNhYmxlLWRlYnVnIgorR1NUUkVBTUVSXzFfMF9HSVRfQlJBTkNIID89ICJtYXN0ZXIiCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXZhbGdyaW5kICR7R1NUUkVBTUVSXzFfMF9ERUJVR30gLS1kaXNhYmxlLWV4YW1wbGVzICIKKworYWNwYXRocyA9ICItSSAke1N9L2NvbW1vbi9tNCAtSSAke1N9L200IgorCitMSUJWID0gIjEuMCIKK3JlcXVpcmUgZ3N0LXBsdWdpbnMtcGFja2FnZS5pbmMKKworUEFDS0FHRUNPTkZJR1tvcmNdID0gIi0tZW5hYmxlLW9yYywtLWRpc2FibGUtb3JjLG9yYyBvcmMtbmF0aXZlIgorCitleHBvcnQgT1JDQyA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcn0vb3JjYyIKKworUEFDS0FHRVNfRFlOQU1JQyA9ICJeJHtQTn0tLioiCisKKyMgYXBwbHkgZ3N0cmVhbWVyIGhhY2sgYWZ0ZXIgTWFrZWZpbGUuaW4uaW4gaW4gc291cmNlIGlzIHJlcGxhY2VkIGJ5IG91ciB2ZXJzaW9uIGZyb20KKyMgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9nZXR0ZXh0L3BvL01ha2VmaWxlLmluLmluLCBidXQgYmVmb3JlIGNvbmZpZ3VyZSBpcyBleGVjdXRlZCAKKyMgaHR0cDovL2xpc3RzLmxpbnV4dG9nby5vcmcvcGlwZXJtYWlsL29wZW5lbWJlZGRlZC1jb3JlLzIwMTItTm92ZW1iZXIvMDMyMjMzLmh0bWwKK29lX3J1bmNvbmZfcHJlcGVuZCgpIHsKKwlpZiBbIC1lICR7U30vcG8vTWFrZWZpbGUuaW4uaW4gXTsgdGhlbgorCQlzZWQgLWkgLWUgIjFhXFwiIC1lICdHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQCcgJHtTfS9wby9NYWtlZmlsZS5pbi5pbgorCWZpCit9CisKK1NSQ19VUkkgPSAiJHtAZ2V0X2dzdF9zcmN1cmkoZCl9IgorCitkZWYgZ2V0X2dzdF9zcmN1cmkoZCk6CisgICAgIyBjaGVjayBpZiBleHBlY3RlZCBwcmVmaXggaXMgcHJlc2VudAorICAgIHByZWZpeCA9ICJnc3RyZWFtZXIxLjAtIgorICAgIGJwbiA9IGQuZ2V0VmFyKCJCUE4iLCBUcnVlKQorICAgIGlmIG5vdCBicG4uc3RhcnRzd2l0aChwcmVmaXgpOgorICAgICAgICBiYi5mYXRhbCgnSW52YWxpZCBHU3RyZWFtZXIgMS4wIHBsdWdpbiBwYWNrYWdlIG5hbWUgIiVzIiA6IG11c3Qgc3RhcnQgd2l0aCAiJXMiJyAlIChicG4sIHByZWZpeCkpCisKKyAgICAjIHJlcGxhY2VkIHByZWZpeCB3aXRoICJnc3QtIiwgd2hpY2ggaXMgd2hhdCBpcyB1c2VkIGZvciB0aGUgdGFyYmFsbCBhbmQgcmVwb3NpdG9yeSBmaWxlbmFtZXMKKyAgICBnc3Rwa2dfYmFzZW5hbWUgPSAiZ3N0LSIgKyBicG5bbGVuKHByZWZpeCk6XQorICAgIHB2ID0gZC5nZXRWYXIoIlBWIiwgVHJ1ZSkKKyAgICBicmFuY2ggPSBkLmdldFZhcigiR1NUUkVBTUVSXzFfMF9HSVRfQlJBTkNIIiwgVHJ1ZSkKKworICAgIGlmIHB2ID09ICJnaXQiOgorICAgICAgICBzID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci8lczticmFuY2g9JXMiICUgKGdzdHBrZ19iYXNlbmFtZSwgYnJhbmNoKQorICAgIGVsc2U6CisgICAgICAgIHMgPSAiaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjLyVzLyVzLSVzLnRhci54eiIgJSAoZ3N0cGtnX2Jhc2VuYW1lLCBnc3Rwa2dfYmFzZW5hbWUsIHB2KQorICAgIHJldHVybiBzCisKK2RlbGV0ZV9saWJsaW5rX200X2ZpbGUoKSB7CisJIyBUaGlzIG00IGZpbGUgY29udGFpbnMgbmFzdGluZXNzIHdoaWNoIGNvbmZsaWN0cyB3aXRoIGxpYnRvb2wgMi4yLjIKKwlybSAiJHtTfS9tNC9saWItbGluay5tNCIgfHwgdHJ1ZQorfQorCitkb19jb25maWd1cmVbcHJlZnVuY3NdICs9ICIgZGVsZXRlX2xpYmxpbmtfbTRfZmlsZSAiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1ydHNwLXNlcnZlci5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YTk0MjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXIuaW5jCkBAIC0wLDAgKzEsMTQgQEAKK1NVTU1BUlkgPSAiQSBsaWJyYXJ5IG9uIHRvcCBvZiBHU3RyZWFtZXIgZm9yIGJ1aWxkaW5nIGFuIFJUU1Agc2VydmVyIgorU0VDVElPTiA9ICJtdWx0aW1lZGlhIgorTElDRU5TRSA9ICJMR1BMdjIiCitIT01FUEFHRSA9ICJodHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1ydHNwLXNlcnZlci8iCitERVBFTkRTID0gImdzdHJlYW1lcjEuMCBsaWJjZ3JvdXAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSIKKworUE5SRUFMID0gImdzdC1ydHNwLXNlcnZlciIKKworU1JDX1VSSSA9ICJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvJHtQTlJFQUx9LyR7UE5SRUFMfS0ke1BWfS50YXIueHoiCisKK1MgPSAiJHtXT1JLRElSfS8ke1BOUkVBTH0tJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyXzEuNC41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyXzEuNC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiOWI0MmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXJfMS40LjUuYmIKQEAgLTAsMCArMSw2IEBACitpbmNsdWRlIGdzdHJlYW1lcjEuMC1ydHNwLXNlcnZlci5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Njc2MmVkNDQyYjM4MjIzODdhNTFjOTJkOTI4ZWFkMGQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhOWY5Yjg4OTllYzdhYjMzNjYzY2RhNzYyN2RiNDBkMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzMDg5MjU0YmQzMWI3YzFmMWNmMmMwMzRhM2IzNTUxZjkyODc4ZjllM2NhYjY1Y2VmM2E5MDFhMDRjMGYxZDM3IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU4YWE4ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC5pbmMKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJHU3RyZWFtZXIgMS4wIG11bHRpbWVkaWEgZnJhbWV3b3JrIgorREVTQ1JJUFRJT04gPSAiR1N0cmVhbWVyIGlzIGEgbXVsdGltZWRpYSBmcmFtZXdvcmsgZm9yIGVuY29kaW5nIGFuZCBkZWNvZGluZyB2aWRlbyBhbmQgc291bmQuIFwKK0l0IHN1cHBvcnRzIGEgd2lkZSByYW5nZSBvZiBmb3JtYXRzIGluY2x1ZGluZyBtcDMsIG9nZywgYXZpLCBtcGVnIGFuZCBxdWlja3RpbWUuIgorSE9NRVBBR0UgPSAiaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9R3N0cmVhbWVyIgorU0VDVElPTiA9ICJtdWx0aW1lZGlhIgorTElDRU5TRSA9ICJMR1BMdjIrIgorREVQRU5EUyA9ICJnbGliLTIuMCBsaWJ4bWwyIGJpc29uLW5hdGl2ZSBmbGV4LW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQKKworUEFDS0FHRUNPTkZJR1tkZWJ1Z10gPSAiLS1lbmFibGUtZGVidWcsLS1kaXNhYmxlLWRlYnVnIgorUEFDS0FHRUNPTkZJR1tjaGVja10gPSAiLS1lbmFibGUtY2hlY2ssLS1kaXNhYmxlLWNoZWNrIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWRvY2Jvb2sgLS1kaXNhYmxlLWd0ay1kb2MgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtZXhhbXBsZXMgLS1kaXNhYmxlLXRlc3RzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtdmFsZ3JpbmQgXAorICAgICAgICAgICAgICAgICIKKworUlJFQ09NTUVORFNfJHtQTn1fcWVtdXg4NiAgICArPSAia2VybmVsLW1vZHVsZS1zbmQtZW5zMTM3MCBrZXJuZWwtbW9kdWxlLXNuZC1yYXdtaWRpIgorUlJFQ09NTUVORFNfJHtQTn1fcWVtdXg4Ni02NCArPSAia2VybmVsLW1vZHVsZS1zbmQtZW5zMTM3MCBrZXJuZWwtbW9kdWxlLXNuZC1yYXdtaWRpIgorCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfaGVhZGVyX3ZhbGdyaW5kX3ZhbGdyaW5kX2g9bm8iCisKK0ZJTEVTXyR7UE59ICs9ICIgJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvKi5zbyIKK0ZJTEVTXyR7UE59LWRldiArPSAiICR7bGliZGlyfS9nc3RyZWFtZXItMS4wLyoubGEgJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvKi5hIgorRklMRVNfJHtQTn0tZGJnICs9ICIgJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvLmRlYnVnLyAke2xpYmV4ZWNkaXJ9L2dzdHJlYW1lci0xLjAvLmRlYnVnLyIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLzAwMDEtRml4LWNyYXNoLXdpdGgtZ3N0LWluc3BlY3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMS1GaXgtY3Jhc2gtd2l0aC1nc3QtaW5zcGVjdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGY1Y2M1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLzAwMDEtRml4LWNyYXNoLXdpdGgtZ3N0LWluc3BlY3QucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSA2YjI2ZjNkYmY5YmY1NzdkNzE1MzRhYjc0MTBkZTY2ZDA2ZTQ2YmEyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2FybG9zIFJhZmFlbCBHaWFuaSA8ZHZAcHNldWRvdGVybWluYWwub3JnPgorRGF0ZTogU2F0LCA2IEFwciAyMDEzIDIzOjUyOjExICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBjcmFzaCB3aXRoIGdzdC1pbnNwZWN0IENocmlzIExvcmQgPGNocmlzQG9wZW5lZGhhbmQuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQ2FybG9zIFJhZmFlbCBHaWFuaSA8ZHZAcHNldWRvdGVybWluYWwub3JnPgorLS0tCisgdG9vbHMvZ3N0LWluc3BlY3QuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3Rvb2xzL2dzdC1pbnNwZWN0LmMgYi90b29scy9nc3QtaW5zcGVjdC5jCitpbmRleCAyM2I3YzQ0Li5iNzliMDJlIDEwMDY0NAorLS0tIGEvdG9vbHMvZ3N0LWluc3BlY3QuYworKysrIGIvdG9vbHMvZ3N0LWluc3BlY3QuYworQEAgLTE1NTYsNyArMTU1Niw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICBnX29wdGlvbl9jb250ZXh0X2FkZF9tYWluX2VudHJpZXMgKGN0eCwgb3B0aW9ucywgR0VUVEVYVF9QQUNLQUdFKTsKKyAgIGdfb3B0aW9uX2NvbnRleHRfYWRkX2dyb3VwIChjdHgsIGdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXAgKCkpOworICAgaWYgKCFnX29wdGlvbl9jb250ZXh0X3BhcnNlIChjdHgsICZhcmdjLCAmYXJndiwgJmVycikpIHsKKy0gICAgZ19wcmludGVyciAoIkVycm9yIGluaXRpYWxpemluZzogJXNcbiIsIGVyci0+bWVzc2FnZSk7CisrICAgIGdfcHJpbnRlcnIgKCJFcnJvciBpbml0aWFsaXppbmc6ICVzXG4iLCBlcnIgPyBlcnItPm1lc3NhZ2UgOiAiKG51bGwpIik7CisgICAgIHJldHVybiAtMTsKKyAgIH0KKyAgIGdfb3B0aW9uX2NvbnRleHRfZnJlZSAoY3R4KTsKKy0tIAorMS44LjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLzAwMDEtZ3N0aW5mby1TaG9ydGVuLV9fRklMRV9fLW9uLWFsbC1wbGF0Zm9ybXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMS1nc3RpbmZvLVNob3J0ZW4tX19GSUxFX18tb24tYWxsLXBsYXRmb3Jtcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjEzYzRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLzAwMDEtZ3N0aW5mby1TaG9ydGVuLV9fRklMRV9fLW9uLWFsbC1wbGF0Zm9ybXMucGF0Y2gKQEAgLTAsMCArMSw1NSBAQAorRnJvbSA4MWZlY2QzNjdiMDE2ZTVhYzRmYjBjMDRiODRkYTVjNDc0ZjMwZGE2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGV0ZXIgVXJiYW5lYyA8Z2l0LnVzZXJAdXJiYW5lYy5uZXQ+CitEYXRlOiBGcmksIDI3IEZlYiAyMDE1IDAxOjE2OjU4ICsxMTAwCitTdWJqZWN0OiBbUEFUQ0ggMS8xXSBnc3RpbmZvOiBTaG9ydGVuIF9fRklMRV9fIG9uIGFsbCBwbGF0Zm9ybXMuCisKK1RoaXMgaXMgdXNlZnVsIG5vdCBvbmx5IGZvciBNU1ZDLCBidXQgYWxzbyB3aXRoIGdjYy9MaW51eCB3aGVuIGRvaW5nCitjcm9zcy1jb21waWxhdGlvbiBidWlsZHMgYW5kIG91dC1vZi10cmVlIGJ1aWxkcy4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDUyMTNdCisKK1NpZ25lZC1vZmYtYnk6IFBldGVyIFVyYmFuZWMgPGdpdC51c2VyQHVyYmFuZWMubmV0PgorLS0tCisgZ3N0L2dzdGluZm8uYyB8IDExICsrKystLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dzdC9nc3RpbmZvLmMgYi9nc3QvZ3N0aW5mby5jCitpbmRleCBiMmEzMDA1Li44YjYxZDA5IDEwMDY0NAorLS0tIGEvZ3N0L2dzdGluZm8uYworKysrIGIvZ3N0L2dzdGluZm8uYworQEAgLTQ0NCw3ICs0NDQsNiBAQCBnc3RfZGVidWdfbG9nIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnksIEdzdERlYnVnTGV2ZWwgbGV2ZWwsCisgICB2YV9lbmQgKHZhcl9hcmdzKTsKKyB9CisgCistI2lmZGVmIEdfT1NfV0lOMzIKKyAvKiBiYXNlZCBvbiBnX2Jhc2VuYW1lKCksIHdoaWNoIHdlIGNhbid0IHVzZSBiZWNhdXNlIGl0IHdhcyBkZXByZWNhdGVkICovCisgc3RhdGljIGlubGluZSBjb25zdCBnY2hhciAqCisgZ3N0X3BhdGhfYmFzZW5hbWUgKGNvbnN0IGdjaGFyICogZmlsZV9uYW1lKQorQEAgLTQ2Nyw3ICs0NjYsNiBAQCBnc3RfcGF0aF9iYXNlbmFtZSAoY29uc3QgZ2NoYXIgKiBmaWxlX25hbWUpCisgCisgICByZXR1cm4gZmlsZV9uYW1lOworIH0KKy0jZW5kaWYKKyAKKyAvKioKKyAgKiBnc3RfZGVidWdfbG9nX3ZhbGlzdDoKK0BAIC00OTcsMTIgKzQ5NSwxMSBAQCBnc3RfZGVidWdfbG9nX3ZhbGlzdCAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdGVnb3J5LCBHc3REZWJ1Z0xldmVsIGxldmVsLAorICAgZ19yZXR1cm5faWZfZmFpbCAoZnVuY3Rpb24gIT0gTlVMTCk7CisgICBnX3JldHVybl9pZl9mYWlsIChmb3JtYXQgIT0gTlVMTCk7CisgCistICAvKiBUaGUgcHJlZGVmaW5lZCBtYWNybyBfX0ZJTEVfXyBpcyBhbHdheXMgdGhlIGV4YWN0IHBhdGggZ2l2ZW4gdG8gdGhlCistICAgKiBjb21waWxlciB3aXRoIE1TVkMsIHdoaWNoIG1heSBvciBtYXkgbm90IGJlIHRoZSBiYXNlbmFtZS4gIFdlIHdvcmsKKy0gICAqIGFyb3VuZCBpdCBhdCBydW50aW1lIHRvIGltcHJvdmUgdGhlIHJlYWRhYmlsaXR5LiAqLworLSNpZmRlZiBHX09TX1dJTjMyCisrICAvKiBUaGUgcHJlZGVmaW5lZCBtYWNybyBfX0ZJTEVfXyBjYW4gYmUgYW4gYWJzb2x1dGUgcGF0aCBpbiBzb21lIGJ1aWxkCisrICAgKiBlbnZpcm9ubWVudHMsIHN1Y2ggYXMgTVNWQyBvciBvdXQtb2YtdHJlZSBjcm9zcy1jb21waWxlcy4gVGhpcyBtYXkKKysgICAqIGJlIHNpZ25pZmljYW50bHkgbG9uZ2VyIHRoYW4gdGhlIGZpbGVuYW1lLiAgV2Ugd29yayBhcm91bmQgaXQgYXQKKysgICAqIHJ1bnRpbWUgdG8gaW1wcm92ZSB0aGUgcmVhZGFiaWxpdHkuICovCisgICBmaWxlID0gZ3N0X3BhdGhfYmFzZW5hbWUgKGZpbGUpOworLSNlbmRpZgorIAorICAgbWVzc2FnZS5tZXNzYWdlID0gTlVMTDsKKyAgIG1lc3NhZ2UuZm9ybWF0ID0gZm9ybWF0OworLS0gCisyLjMuMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMi1iYXNlc2luay1GaXgtUW9TLWxhdGVuZXNzLWNoZWNraW5nLWlmLXN1YmNsYXNzLWltcGxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLzAwMDItYmFzZXNpbmstRml4LVFvUy1sYXRlbmVzcy1jaGVja2luZy1pZi1zdWJjbGFzcy1pbXBsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTA1Y2JlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLzAwMDItYmFzZXNpbmstRml4LVFvUy1sYXRlbmVzcy1jaGVja2luZy1pZi1zdWJjbGFzcy1pbXBsZS5wYXRjaApAQCAtMCwwICsxLDcwIEBACitGcm9tIDY5MTQ1NjZlZDZhODljOTY5NzNhNTc4YWE1ZWNkMDFlZTY4Y2RjZmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKaWFuIDxKaWFuLkxpQGZyZWVzY2FsZS5jb20+CitEYXRlOiBUaHUsIDE0IE1heSAyMDE1IDE1OjQ5OjQzICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGJhc2VzaW5rOiBGaXggUW9TL2xhdGVuZXNzIGNoZWNraW5nIGlmIHN1YmNsYXNzIGltcGxlbWVudHMKKyBwcmVwYXJlL3ByZXBhcmVfbGlzdCB2ZnVuY3MKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworSW4gYmFzZXNpbmsgZnVuY3Rpb25zIGdzdF9iYXNlX3NpbmtfY2hhaW5fdW5sb2NrZWQoKSwgYmVsb3cgY29kZSBpcyB1c2VkIHRvCitjaGVja2luZyBpZiBidWZmZXIgaXMgbGF0ZSBiZWZvcmUgZG9pbmcgcHJlcGFyZSBjYWxsIHRvIHNhdmUgc29tZSBlZmZvcnQ6CisgICAgaWYgKHN5bmNhYmxlICYmIGRvX3N5bmMpCisgICAgICBsYXRlID0KKyAgICAgICAgICBnc3RfYmFzZV9zaW5rX2lzX3Rvb19sYXRlIChiYXNlc2luaywgb2JqLCByc3RhcnQsIHJzdG9wLAorICAgICAgICAgIEdTVF9DTE9DS19FQVJMWSwgMCwgRkFMU0UpOworCisgICAgaWYgKEdfVU5MSUtFTFkgKGxhdGUpKQorICAgICAgZ290byBkcm9wcGVkOworCitCdXQgdGhpcyBjb2RlIGhhcyBwcm9ibGVtLCBpdCBzaG91bGQgY2FsY3VsYXRlIGppdHRlciBiYXNlZCBvbiBjdXJyZW50IG1lZGlhCitjbG9jaywgcmF0aGVyIHRoYW4ganVzdCBwYXNzaW5nIDAuIEkgZm91bmQgaXQgd2lsbCBkcm9wIGFsbCB0aGUgZnJhbWVzIHdoZW4KK3Jld2luZCBpbiBzbG93IHNwZWVkLCBzdWNoIGFzIC0yWC4KKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0OTI1OAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFsxLjUuMV0KKy0tLQorIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYyB8ICAgMjYgKysrKysrKysrKysrKysrKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjIgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYworaW5kZXggYTUwNTY5NS4uNWZiMmQ2YSAxMDA2NDQKKy0tLSBhL2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYworKysrIGIvbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jCitAQCAtMzM2OSwxMCArMzM2OSwyOCBAQCBnc3RfYmFzZV9zaW5rX2NoYWluX3VubG9ja2VkIChHc3RCYXNlU2luayAqIGJhc2VzaW5rLCBHc3RQYWQgKiBwYWQsCisgICAgIGlmIChHX1VOTElLRUxZIChzdGVwcGVkKSkKKyAgICAgICBnb3RvIGRyb3BwZWQ7CisgCistICAgIGlmIChzeW5jYWJsZSAmJiBkb19zeW5jKQorLSAgICAgIGxhdGUgPQorLSAgICAgICAgICBnc3RfYmFzZV9zaW5rX2lzX3Rvb19sYXRlIChiYXNlc2luaywgb2JqLCByc3RhcnQsIHJzdG9wLAorLSAgICAgICAgICBHU1RfQ0xPQ0tfRUFSTFksIDAsIEZBTFNFKTsKKysgICAgaWYgKHN5bmNhYmxlICYmIGRvX3N5bmMpIHsKKysgICAgICBHc3RDbG9jayAqY2xvY2s7CisrCisrICAgICAgR1NUX09CSkVDVF9MT0NLIChiYXNlc2luayk7CisrICAgICAgY2xvY2sgPSBHU1RfRUxFTUVOVF9DTE9DSyAoYmFzZXNpbmspOworKyAgICAgIGlmIChjbG9jayAmJiBHU1RfU1RBVEUgKGJhc2VzaW5rKSA9PSBHU1RfU1RBVEVfUExBWUlORykgeworKyAgICAgICAgR3N0Q2xvY2tUaW1lIGJhc2VfdGltZTsKKysgICAgICAgIEdzdENsb2NrVGltZSBzdGltZTsKKysgICAgICAgIEdzdENsb2NrVGltZSBub3c7CisrCisrICAgICAgICBiYXNlX3RpbWUgPSBHU1RfRUxFTUVOVF9DQVNUIChiYXNlc2luayktPmJhc2VfdGltZTsKKysgICAgICAgIHN0aW1lID0gYmFzZV90aW1lICsgZ3N0X2Jhc2Vfc2lua19hZGp1c3RfdGltZSAoYmFzZXNpbmssIHJzdGFydCk7CisrICAgICAgICBub3cgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKTsKKysgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiYXNlc2luayk7CisrCisrICAgICAgICBsYXRlID0KKysgICAgICAgICAgICBnc3RfYmFzZV9zaW5rX2lzX3Rvb19sYXRlIChiYXNlc2luaywgb2JqLCByc3RhcnQsIHJzdG9wLAorKyAgICAgICAgICAgIEdTVF9DTE9DS19FQVJMWSwgR1NUX0NMT0NLX0RJRkYgKHN0aW1lLCBub3cpLCBGQUxTRSk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiYXNlc2luayk7CisrICAgICAgfQorKyAgICB9CisgCisgICAgIGlmIChHX1VOTElLRUxZIChsYXRlKSkKKyAgICAgICBnb3RvIGRyb3BwZWQ7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wL2lucHV0c2VsZWN0b3Itc3RpY2t5LWV2ZW50cy1oYXZlbi10LXNlbmQtb3V0LXdoZW4tYWMtMS00LTEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvaW5wdXRzZWxlY3Rvci1zdGlja3ktZXZlbnRzLWhhdmVuLXQtc2VuZC1vdXQtd2hlbi1hYy0xLTQtMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNTBjZTZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wL2lucHV0c2VsZWN0b3Itc3RpY2t5LWV2ZW50cy1oYXZlbi10LXNlbmQtb3V0LXdoZW4tYWMtMS00LTEucGF0Y2gKQEAgLTAsMCArMSwxNjcgQEAKK0Zyb20gODNiZWQ5MGMzMDZlZDMxODVkNDhmZWJmNjQ0MTE3N2Q2MzhmNzM0MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CitEYXRlOiBXZWQsIDI0IERlYyAyMDE0IDEwOjEzOjUxICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGlucHV0c2VsZWN0b3I6IHN0aWNreSBldmVudHMgaGF2ZW4ndCBzZW5kIG91dCB3aGVuIGFjdGl2ZQorIHRyYWNrIHJlYWNoIEVPUworCitFT1MgZXZlbnQgaGFzbid0IGJlZW4gc2VuZCB0byBkb3duLWVsZW1lbnQuIFRoZSByZXNvbHV0aW9uIGlzIGJsb2NrIEVPUyBldmVudAorb2YgaW5hY3RpdmUgcGFkLCBzZW5kIHRoZSBldmVudCBhZnRlciB0aGUgcGFkIGFjdGl2ZWQuCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDA5NDkKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbMS41LjFdCisKK1NpZ25lZC1vZmYtYnk6IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CistLS0KKyBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYyB8ICAgNTggKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KKyBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuaCB8ICAgIDEgKworIDIgZmlsZXMgY2hhbmdlZCwgNDUgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jCitpbmRleCBmYjUwODAyLi40NDYxZjdjIDEwMDY0NAorLS0tIGEvcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmMKKysrKyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jCitAQCAtNDQwLDYgKzQ0MCwxNyBAQCBnc3Rfc2VsZWN0b3JfcGFkX2l0ZXJhdGVfbGlua2VkX3BhZHMgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50KQorIH0KKyAKKyBzdGF0aWMgZ2Jvb2xlYW4KKytnc3RfaW5wdXRfc2VsZWN0b3JfZW9zX3dhaXQgKEdzdElucHV0U2VsZWN0b3IgKiBzZWxmLCBHc3RTZWxlY3RvclBhZCAqIHBhZCkKKyt7CisrICB3aGlsZSAoIXNlbGYtPmVvcyAmJiAhc2VsZi0+Zmx1c2hpbmcgJiYgIXBhZC0+Zmx1c2hpbmcpIHsKKysgICAgLyogd2UgY2FuIGJlIHVubG9ja2VkIGhlcmUgd2hlbiB3ZSBhcmUgc2h1dHRpbmcgZG93biAoZmx1c2hpbmcpIG9yIHdoZW4gd2UKKysgICAgICogZ2V0IHVuYmxvY2tlZCAqLworKyAgICBHU1RfSU5QVVRfU0VMRUNUT1JfV0FJVCAoc2VsZik7CisrICB9CisrICByZXR1cm4gc2VsZi0+Zmx1c2hpbmc7CisrfQorKworK3N0YXRpYyBnYm9vbGVhbgorIGdzdF9zZWxlY3Rvcl9wYWRfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQorIHsKKyAgIGdib29sZWFuIHJlcyA9IFRSVUU7CitAQCAtNDg2LDYgKzQ5Nyw3IEBAIGdzdF9zZWxlY3Rvcl9wYWRfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQorICAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVEFSVDoKKyAgICAgICAvKiBVbmJsb2NrIHRoZSBwYWQgaWYgaXQncyB3YWl0aW5nICovCisgICAgICAgc2VscGFkLT5mbHVzaGluZyA9IFRSVUU7CisrICAgICAgc2VsLT5lb3MgPSBGQUxTRTsKKyAgICAgICBHU1RfSU5QVVRfU0VMRUNUT1JfQlJPQURDQVNUIChzZWwpOworICAgICAgIGJyZWFrOworICAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVE9QOgorQEAgLTUyMywyMSArNTM1LDEyIEBAIGdzdF9zZWxlY3Rvcl9wYWRfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQorICAgICBjYXNlIEdTVF9FVkVOVF9FT1M6CisgICAgICAgc2VscGFkLT5lb3MgPSBUUlVFOworIAorLSAgICAgIGlmIChmb3J3YXJkKSB7CistICAgICAgICBzZWxwYWQtPmVvc19zZW50ID0gVFJVRTsKKy0gICAgICB9IGVsc2UgeworLSAgICAgICAgR3N0U2VsZWN0b3JQYWQgKmFjdGl2ZV9zZWxwYWQ7CistCistICAgICAgICAvKiBJZiB0aGUgYWN0aXZlIHNpbmtwYWQgaXMgaW4gRU9TIHN0YXRlIGJ1dCBFT1MKKy0gICAgICAgICAqIHdhcyBub3Qgc2VudCBkb3duc3RyZWFtIHRoaXMgbWVhbnMgdGhhdCB0aGUgcGFkCistICAgICAgICAgKiBnb3QgRU9TIGJlZm9yZSBpdCB3YXMgc2V0IGFzIGFjdGl2ZSBwYWQgYW5kIHRoYXQKKy0gICAgICAgICAqIHRoZSBwcmV2aW91c2x5IGFjdGl2ZSBwYWQgZ290IEVPUyBhZnRlciBpdCB3YXMKKy0gICAgICAgICAqIGFjdGl2ZQorLSAgICAgICAgICovCistICAgICAgICBhY3RpdmVfc2VscGFkID0gR1NUX1NFTEVDVE9SX1BBRCAoYWN0aXZlX3NpbmtwYWQpOworLSAgICAgICAgZm9yd2FyZCA9IChhY3RpdmVfc2VscGFkLT5lb3MgJiYgIWFjdGl2ZV9zZWxwYWQtPmVvc19zZW50KTsKKy0gICAgICAgIGFjdGl2ZV9zZWxwYWQtPmVvc19zZW50ID0gVFJVRTsKKysgICAgICBpZiAoIWZvcndhcmQpIHsKKysgICAgICAgIC8qIGJsb2NrZWQgdW50aWwgYWN0aXZlIHRoZSBzaW5kIHBhZCBvciBmbHVzaCAqLworKyAgICAgICAgZ3N0X2lucHV0X3NlbGVjdG9yX2Vvc193YWl0IChzZWwsIHNlbHBhZCk7CisrICAgICAgICBmb3J3YXJkID0gVFJVRTsKKyAgICAgICB9CisrICAgICAgc2VscGFkLT5lb3Nfc2VudCA9IFRSVUU7CisgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAicmVjZWl2ZWQgRU9TIik7CisgICAgICAgYnJlYWs7CisgICAgIGNhc2UgR1NUX0VWRU5UX0dBUDp7CitAQCAtNjc2LDYgKzY3OSwxMiBAQCBnc3RfaW5wdXRfc2VsZWN0b3Jfd2FpdF9ydW5uaW5nX3RpbWUgKEdzdElucHV0U2VsZWN0b3IgKiBzZWwsCisgICAgICAgICBnc3RfaW5wdXRfc2VsZWN0b3JfYWN0aXZhdGVfc2lua3BhZCAoc2VsLCBHU1RfUEFEX0NBU1QgKHNlbHBhZCkpOworICAgICBhY3RpdmVfc2VscGFkID0gR1NUX1NFTEVDVE9SX1BBRF9DQVNUIChhY3RpdmVfc2lua3BhZCk7CisgCisrICAgIGlmIChzZWwtPmVvcykgeworKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbCwgIk5vdCB3YWl0aW5nIGJlY2F1c2UgaW5wdXRzZWxlY3RvciByZWFjaCBFT1MuIik7CisrICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsKTsKKysgICAgICByZXR1cm4gRkFMU0U7CisrICAgIH0KKysKKyAgICAgaWYgKHNlZy0+Zm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSkgeworICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbHBhZCwKKyAgICAgICAgICAgIk5vdCB3YWl0aW5nIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhIFRJTUUgc2VnbWVudCIpOworQEAgLTk3MSw2ICs5ODAsMTIgQEAgZ3N0X3NlbGVjdG9yX3BhZF9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZikKKyAgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSkpOworIAorICAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKHNlbCk7CisrICBpZiAoc2VsLT5lb3MpIHsKKysgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiaW5wdXRzZWxlY3RvciBlb3MuIik7CisrICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKHNlbCk7CisrICAgIGdvdG8gZW9zOworKyAgfQorKworICAgLyogd2FpdCBvciBjaGVjayBmb3IgZmx1c2hpbmcgKi8KKyAgIGlmIChnc3RfaW5wdXRfc2VsZWN0b3Jfd2FpdCAoc2VsLCBzZWxwYWQpKSB7CisgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKHNlbCk7CitAQCAtMTE1MSw2ICsxMTY2LDEzIEBAIGZsdXNoaW5nOgorICAgICByZXMgPSBHU1RfRkxPV19GTFVTSElORzsKKyAgICAgZ290byBkb25lOworICAgfQorK2VvczoKKysgIHsKKysgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiV2UgYXJlIGVvcywgZGlzY2FyZCBidWZmZXIgJXAiLCBidWYpOworKyAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOworKyAgICByZXMgPSBHU1RfRkxPV19FT1M7CisrICAgIGdvdG8gZG9uZTsKKysgIH0KKyB9CisgCisgc3RhdGljIHZvaWQgZ3N0X2lucHV0X3NlbGVjdG9yX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOworQEAgLTEzMDksNiArMTMzMSw3IEBAIGdzdF9pbnB1dF9zZWxlY3Rvcl9pbml0IChHc3RJbnB1dFNlbGVjdG9yICogc2VsKQorICAgZ19tdXRleF9pbml0ICgmc2VsLT5sb2NrKTsKKyAgIGdfY29uZF9pbml0ICgmc2VsLT5jb25kKTsKKyAgIHNlbC0+YmxvY2tlZCA9IEZBTFNFOworKyAgc2VsLT5lb3MgPSBGQUxTRTsKKyAKKyAgIC8qIGxldHMgZ2l2ZSBhIGNoYW5nZSBmb3IgZG93bnN0cmVhbSB0byBkbyBzb21ldGhpbmcgb24KKyAgICAqIGFjdGl2ZS1wYWQgY2hhbmdlIGJlZm9yZSB3ZSBzdGFydCBwdXNoaW5nIG5ldyBidWZmZXJzICovCitAQCAtMTM3Nyw2ICsxNDAwLDExIEBAIGdzdF9pbnB1dF9zZWxlY3Rvcl9zZXRfYWN0aXZlX3BhZCAoR3N0SW5wdXRTZWxlY3RvciAqIHNlbGYsIEdzdFBhZCAqIHBhZCkKKyAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJOZXcgYWN0aXZlIHBhZCBpcyAlIiBHU1RfUFRSX0ZPUk1BVCwKKyAgICAgICBzZWxmLT5hY3RpdmVfc2lua3BhZCk7CisgCisrICBpZiAob2xkICE9IG5ldyAmJiBuZXctPmVvcyAmJiAhbmV3LT5lb3Nfc2VudCkgeworKyAgICBzZWxmLT5lb3MgPSBUUlVFOworKyAgICBHU1RfSU5QVVRfU0VMRUNUT1JfQlJPQURDQVNUIChzZWxmKTsKKysgIH0KKysKKyAgIHJldHVybiBUUlVFOworIH0KKyAKK0BAIC0xNzcxLDYgKzE3OTksNyBAQCBnc3RfaW5wdXRfc2VsZWN0b3JfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKKyAgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgorICAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9MT0NLIChzZWxmKTsKKysgICAgICBzZWxmLT5lb3MgPSBGQUxTRTsKKyAgICAgICBzZWxmLT5ibG9ja2VkID0gRkFMU0U7CisgICAgICAgc2VsZi0+Zmx1c2hpbmcgPSBGQUxTRTsKKyAgICAgICBHU1RfSU5QVVRfU0VMRUNUT1JfVU5MT0NLIChzZWxmKTsKK0BAIC0xNzc5LDYgKzE4MDgsNyBAQCBnc3RfaW5wdXRfc2VsZWN0b3JfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKKyAgICAgICAvKiBmaXJzdCB1bmxvY2sgYmVmb3JlIHdlIGNhbGwgdGhlIHBhcmVudCBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24sIHdoaWNoCisgICAgICAgICogdHJpZXMgdG8gYWNxdWlyZSB0aGUgc3RyZWFtIGxvY2sgd2hlbiBnb2luZyB0byByZWFkeS4gKi8KKyAgICAgICBHU1RfSU5QVVRfU0VMRUNUT1JfTE9DSyAoc2VsZik7CisrICAgICAgc2VsZi0+ZW9zID0gVFJVRTsKKyAgICAgICBzZWxmLT5ibG9ja2VkID0gRkFMU0U7CisgICAgICAgc2VsZi0+Zmx1c2hpbmcgPSBUUlVFOworICAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9CUk9BRENBU1QgKHNlbGYpOworZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmgKK2luZGV4IDk2YzY4MGYuLjliZjkyNGYgMTAwNjQ0CistLS0gYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuaAorKysrIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmgKK0BAIC03Nyw2ICs3Nyw3IEBAIHN0cnVjdCBfR3N0SW5wdXRTZWxlY3RvciB7CisgICBHTXV0ZXggbG9jazsKKyAgIEdDb25kIGNvbmQ7CisgICBnYm9vbGVhbiBibG9ja2VkOworKyAgZ2Jvb2xlYW4gZW9zOworICAgZ2Jvb2xlYW4gZmx1c2hpbmc7CisgfTsKKyAKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjBfMS40LjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjBfMS40LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI1ODc1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMF8xLjQuNS5iYgpAQCAtMCwwICsxLDE3IEBACitpbmNsdWRlIGdzdHJlYW1lcjEuMC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Njc2MmVkNDQyYjM4MjIzODdhNTFjOTJkOTI4ZWFkMGQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0L2dzdC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjE7bWQ1PWUwNTkxMzg0ODEyMDVlZTJjNmZjMWMwNzljMDE2ZDBkIgorCitTUkNfVVJJID0gIiBcCisgICAgaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItJHtQVn0udGFyLnh6IFwKKyAgICBmaWxlOi8vMDAwMS1GaXgtY3Jhc2gtd2l0aC1nc3QtaW5zcGVjdC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDEtZ3N0aW5mby1TaG9ydGVuLV9fRklMRV9fLW9uLWFsbC1wbGF0Zm9ybXMucGF0Y2ggXAorICAgIGZpbGU6Ly9pbnB1dHNlbGVjdG9yLXN0aWNreS1ldmVudHMtaGF2ZW4tdC1zZW5kLW91dC13aGVuLWFjLTEtNC0xLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMi1iYXNlc2luay1GaXgtUW9TLWxhdGVuZXNzLWNoZWNraW5nLWlmLXN1YmNsYXNzLWltcGxlLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICI4OGE5Mjg5YzY0YTQ5NTBlYmI0ZjU0NDk4MDIzNDI4OSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0MDgwMWFhN2Y5NzkwMjQ1MjYyNThhMGU5NDcwN2JhNDJiOGFiNmY3ZDIyMDZlNTZhZGJjNDQzMzE1NWNiMGFlIgorCitTID0gIiR7V09SS0RJUn0vZ3N0cmVhbWVyLSR7UFZ9IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjBfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjAwZDMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wX2dpdC5iYgpAQCAtMCwwICsxLDE4IEBACitERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCisKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02NzYyZWQ0NDJiMzgyMjM4N2E1MWM5MmQ5MjhlYWQwZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvZ3N0Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMTttZDU9ZTA1OTEzODQ4MTIwNWVlMmM2ZmMxYzA3OWMwMTZkMGQiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdHJlYW1lcjticmFuY2g9bWFzdGVyIgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDUkVWID0gIjNiODE4MWE4YzU1MGU3NGFjYWJhNGU4YzU1YmRjNjQ5ZmE1NTFkYzkiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWNkICR7U30KKwkuL2F1dG9nZW4uc2ggLS1ub2NvbmZpZ3VyZQorCWNkICR7Qn0KK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9sYW1lL2xhbWUvbGFtZS0zLjk5LjVfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLngucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZS9sYW1lLTMuOTkuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIueC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzFhMWQwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9sYW1lL2xhbWUvbGFtZS0zLjk5LjVfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLngucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0ZpeCB0aGlzIGtpbmQgb2YgZXJyb3JzIHdpdGggYXV0b21ha2UgMS4xMi54OgorfCBkb2MvbWFuL01ha2VmaWxlLmFtOjM6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKK3wgYXV0b3JlY29uZjogYXV0b21ha2UgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXM6IDEKKworU2lnbmVkLU9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDcvMTMKKworSW5kZXg6IGxhbWUtMy45OS41L2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxhbWUtMy45OS41Lm9yaWcvY29uZmlndXJlLmluCisrKysgbGFtZS0zLjk5LjUvY29uZmlndXJlLmluCitAQCAtNzcsOSArNzcsNiBAQCBpZiB0ZXN0ICIke0dDQ30iID0gInllcyI7IHRoZW4KKyAJQUNfTVNHX1JFU1VMVCgke0dDQ192ZXJzaW9ufSkKKyBmaQorIAorLWRubCBtb3JlIGF1dG9tYWtlIHN0dWZmCistQU1fQ19QUk9UT1RZUEVTCistCisgQUNfQ0hFQ0tfSEVBREVSKGRtYWxsb2MuaCkKKyBpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9kbWFsbG9jX2h9IiA9ICJ5ZXMiOyB0aGVuCisgCUFNX1dJVEhfRE1BTExPQworSW5kZXg6IGxhbWUtMy45OS41L2RvYy9odG1sL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGFtZS0zLjk5LjUub3JpZy9kb2MvaHRtbC9NYWtlZmlsZS5hbQorKysrIGxhbWUtMy45OS41L2RvYy9odG1sL01ha2VmaWxlLmFtCitAQCAtMSw2ICsxLDYgQEAKKyAjIyAkSWQ6IE1ha2VmaWxlLmFtLHYgMS43IDIwMTAvMDkvMzAgMjA6NTg6NDAgamF6MDAxIEV4cCAkCisgCistQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24gYW5zaTJrbnIKKytBVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbgorIAorIGRvY2RpciA9ICQoZGF0YWRpcikvZG9jCisgcGtnZG9jZGlyID0gJChkb2NkaXIpLyQoUEFDS0FHRSkKK0luZGV4OiBsYW1lLTMuOTkuNS9saWJtcDNsYW1lL2kzODYvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsYW1lLTMuOTkuNS5vcmlnL2xpYm1wM2xhbWUvaTM4Ni9NYWtlZmlsZS5hbQorKysrIGxhbWUtMy45OS41L2xpYm1wM2xhbWUvaTM4Ni9NYWtlZmlsZS5hbQorQEAgLTEsNiArMSw2IEBACisgIyMgJElkOiBNYWtlZmlsZS5hbSx2IDEuMjYgMjAxMS8wNC8wNCAwOTo0MjozNCBhbGVpZGluZ2VyIEV4cCAkCisgCistQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24gJCh0b3Bfc3JjZGlyKS9hbnNpMmtucgorK0FVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduCisgCisgREVGUyA9IEBERUZTQCBAQ09ORklHX0RFRlNACisgCitJbmRleDogbGFtZS0zLjk5LjUvZG9jL21hbi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxhbWUtMy45OS41Lm9yaWcvZG9jL21hbi9NYWtlZmlsZS5hbQorKysrIGxhbWUtMy45OS41L2RvYy9tYW4vTWFrZWZpbGUuYW0KK0BAIC0xLDYgKzEsNiBAQAorICMjICRJZDogTWFrZWZpbGUuYW0sdiAxLjEgMjAwMC8xMC8yMiAxMTozOTo0NCBhbGVpZGluZ2VyIEV4cCAkCisgCistQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24gYW5zaTJrbnIKKytBVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbgorIAorIG1hbl9NQU5TID0gbGFtZS4xCisgRVhUUkFfRElTVCA9ICR7bWFuX01BTlN9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZS9uby1ndGsxLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9sYW1lL2xhbWUvbm8tZ3RrMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODhkN2YxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9sYW1lL2xhbWUvbm8tZ3RrMS5wYXRjaApAQCAtMCwwICsxLDIwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKyMgQWNxdWlyZWQgZnJvbSBPcGVuRW1iZWRkZWQKKworLS0tIGxhbWUtMy45Ni4xL2NvbmZpZ3VyZS5pbn5uby1ndGsxLnBhdGNoCTIwMDQtMDctMjUgMTU6NTI6MTIuMDAwMDAwMDAwICswMTAwCisrKysgbGFtZS0zLjk2LjEvY29uZmlndXJlLmluCTIwMDQtMDktMTAgMTU6NTQ6MzkuMDAwMDAwMDAwICswMTAwCitAQCAtMzYzLDcgKzM2MywxMiBAQAorIAorIGRubCBjb25maWd1cmUgdXNlIG9mIGZlYXR1cmVzCisgCistQU1fUEFUSF9HVEsoMS4yLjAsIEhBVkVfR1RLPSJ5ZXMiLCBIQVZFX0dUSz0ibm8iKQorKyNBTV9QQVRIX0dUSygxLjIuMCwgSEFWRV9HVEs9InllcyIsIEhBVkVfR1RLPSJubyIpCisrSEFWRV9HVEs9Im5vIgorK0dUS19DRkxBR1M9IiIKKytHVEtfTElCUz0iIgorK0FDX1NVQlNUKEdUS19DRkxBR1MpCisrQUNfU1VCU1QoR1RLX0xJQlMpCisKKyBkbmwgRWxlY3RyaWNGZW5jZSBtYWxsb2MgZGVidWdnaW5nCisgQUNfTVNHX0NIRUNLSU5HKHVzZSBvZiBFbGVjdHJpY0ZlbmNlIG1hbGxvYyBkZWJ1Z2dpbmcpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZV8zLjk5LjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZV8zLjk5LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ3NzYxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGFtZS9sYW1lXzMuOTkuNS5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkhpZ2ggcXVhbGl0eSBNUDMgYXVkaW8gZW5jb2RlciIKK0hPTUVQQUdFID0gImh0dHA6Ly9sYW1lLnNvdXJjZWZvcmdlLm5ldC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MjkwJmF0aWQ9MTAwMjkwIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJMR1BMdjIrIgorTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorCitERVBFTkRTID0gIm5jdXJzZXMgZ2V0dGV4dC1uYXRpdmUiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWM0NmJkYTAwZmZiYjBiYTFkYWMyMmY4ZDA4N2Y1NGQ5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvbGFtZS5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PWEyMjU4MTgyYzU5M2MzOThkMTVhNDgyNjIxMzBhOTJiIFwKKyIKK1BSID0gInIxIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9sYW1lL2xhbWUtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL25vLWd0azEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGFtZS0zLjk5LjVfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLngucGF0Y2ggIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODQ4MzViMzEzZDRhOGI2OGY1MzQ5ODE2ZDMzZTA3Y2UiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjQzNDZiNDE1OGU0YWYzYmQ5ZjJlMTk0YmIyM2ViNDczYzc1ZmI3Mzc3MDExNTIzMzUzMTk2YjE5YjlhMjNmZiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BBQ0tBR0VTICs9ICJsaWJtcDNsYW1lIGxpYm1wM2xhbWUtZGV2IgorRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L2xhbWUiCitGSUxFU19saWJtcDNsYW1lID0gIiR7bGliZGlyfS9saWJtcDNsYW1lLnNvLioiCitGSUxFU19saWJtcDNsYW1lLWRldiA9ICIke2luY2x1ZGVkaXJ9ICR7bGliZGlyfS8qIgorRklMRVNfJHtQTn0tZGV2ID0gIiIKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlNfYXBwZW5kX3g4NiA9ICIgYWNfY3ZfaGVhZGVyX2VtbWludHJpbl9oPW5vIGFjX2N2X2hlYWRlcl94bW1pbnRyaW5faD1ubyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYTUyL2xpYmE1Mi9idWlsZGNsZWFudXAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmE1Mi9saWJhNTIvYnVpbGRjbGVhbnVwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNjgxMDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmE1Mi9saWJhNTIvYnVpbGRjbGVhbnVwLnBhdGNoCkBAIC0wLDAgKzEsODkgQEAKK0l0IG1ha2VzIG11Y2ggbW9yZSBzZW5zZSB0byBjb250cm9sIG91ciBvd24gQ0ZMQUdTIGFuZCBhdm9pZGluZyBmUElDIGJyZWFrcworc29tZSBhcmNoZXMgdG9vLiBBc3N1bWUgd2Uga25vdyB3aGF0IHdlJ3JlIGRvaW5nIGFuZCByZW1vdmUgYWxsIHRoZSBtZXNzaW5nIAorYXJvdW5kLgorCitSUCAyMy8yLzEwCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGE1MmRlYy0wLjcuNC9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhNTJkZWMtMC43LjQub3JpZy9jb25maWd1cmUuaW4JMjAxMC0wMi0yMyAxNDo1MTo1MC4wMDAwMDAwMDAgKzAwMDAKKysrKyBhNTJkZWMtMC43LjQvY29uZmlndXJlLmluCTIwMTAtMDItMjMgMTQ6NTI6MzYuMDAwMDAwMDAwICswMDAwCitAQCAtMTQsNjIgKzE0LDYgQEAKKyBBQ19QUk9HX0NDCisgQUNfUFJPR19HQ0NfVFJBRElUSU9OQUwKKyAKKy1pZiB0ZXN0IHgiJEdDQyIgPSB4InllcyI7IHRoZW4KKy0KKy0gICAgZG5sIEdDQy1zcGVjaWZpYyBmbGFncyAtIHRyeSB0byBvcHRpbWl6ZSB0aGVtIHNvbWV0aW1lCistICAgIGRubCAtV2FsbCAtV2Vycm9yIG1vdmVkIHRvIHRoZSBlbmQgdG8gbm90IGRpc3R1cmIgdGhlIGNvbmZpZ3VyZSBzY3JpcHQKKy0KKy0gICAgZG5sIC1PMworLSAgICBjaGFuZ2VxdW90ZSg8PCw+PikKKy0gICAgT1BUX0NGTEFHUz1gZWNobyAiJENGTEFHUyJ8c2VkICJzLy1PWzAtOV0qLy9nImAKKy0gICAgY2hhbmdlcXVvdGUoWyxdKQorLSAgICBPUFRfQ0ZMQUdTPSIkT1BUX0NGTEFHUyAtTzMiCistICAgIEFDX1RSWV9DRkxBR1MoWyRPUFRfQ0ZMQUdTXSxbQ0ZMQUdTPSRPUFRfQ0ZMQUdTXSkKKy0KKy0gICAgZG5sIC1mb21pdC1mcmFtZS1wb2ludGVyCistICAgIE9QVF9DRkxBR1M9IiRDRkxBR1MgLWZvbWl0LWZyYW1lLXBvaW50ZXIiCistICAgIEFDX1RSWV9DRkxBR1MoWyRPUFRfQ0ZMQUdTXSxbQ0ZMQUdTPSRPUFRfQ0ZMQUdTXSkKKy0KKy0gICAgZG5sIGFyY2gtc3BlY2lmaWMgZmxhZ3MKKy0gICAgY2FzZSAiJGhvc3QiIGluCistICAgIGk/ODYtKiB8IGs/LSopCistCWNhc2UgIiRob3N0IiBpbgorLQlpMzg2LSopIE9QVF9DRkxBR1M9IiRDRkxBR1MgLW1jcHU9aTM4NiI7OworLQlpNDg2LSopIE9QVF9DRkxBR1M9IiRDRkxBR1MgLW1jcHU9aTQ4NiI7OworLQlpNTg2LSopIE9QVF9DRkxBR1M9IiRDRkxBR1MgLW1jcHU9cGVudGl1bSI7OworLQlpNjg2LSopIE9QVF9DRkxBR1M9IiRDRkxBR1MgLW1jcHU9cGVudGl1bXBybyI7OworLQlrNi0qKSAgIE9QVF9DRkxBR1M9IiRDRkxBR1MgLW1jcHU9azYiOzsKKy0JZXNhYworLQlBQ19UUllfQ0ZMQUdTKFskT1BUX0NGTEFHU10sW0NGTEFHUz0kT1BUX0NGTEFHU10pOzsKKy0gICAgc3BhcmMtKiB8IHNwYXJjNjQtKikKKy0JT1BUX0NGTEFHUz0iJENGTEFHUyAtbXR1bmU9dWx0cmFzcGFyYyIKKy0JQUNfVFJZX0NGTEFHUyhbJE9QVF9DRkxBR1NdLFtDRkxBR1M9JE9QVF9DRkxBR1NdKTs7CistICAgIG1pcHMtc2dpLWlyaXg2LiopCWRubCBkbyB3ZSBuZWVkIHRvIGJlIHRoYXQgc3BlY2lmaWMgPworLQlPUFRfQ0ZMQUdTPSIkQ0ZMQUdTIC1tYWJpPTY0IgorLQlBQ19UUllfQ0ZMQUdTKFskT1BUX0NGTEFHU10sW0NGTEFHUz0kT1BUX0NGTEFHU10pOzsKKy0gICAgZXNhYworLWVsaWYgdGVzdCB4IiRDQyIgPSB4InRjYyIgLWEgeCJgJENDIC12ZXJzaW9uIDI+JjEgfCBncmVwIFRlbkRSQWAiICE9IHgiIjsgdGhlbgorLSAgICBkbmwgVGVuRFJBIHBvcnRhYmlsaXR5IGNoZWNraW5nIGNvbXBpbGVyCistICAgIFRFTkRSQT15ZXMKKy0gICAgQ0ZMQUdTPSItWHAgLVlhbnNpIC1mYHB3ZGAvaW5jbHVkZS90ZW5kcmEuaCAtREVMSURFX0NPREUiCistICAgIGVuYWJsZV9tbGliPW5vCistICAgIGVuYWJsZV9vc3M9bm8KKy0gICAgZW5hYmxlX3NvbGFyaXNfYXVkaW89bm8KKy1lbGlmIHRlc3QgeCIkQ0MiID0geCJpY2MiIC1hIHgiYCRDQyAtViAyPiYxIHwgZ3JlcCBJbnRlbGAiICE9IHgiIjsgdGhlbgorLSAgICBkbmwgSW50ZWwgQysrIGNvbXBpbGVyCistICAgIENGTEFHUz0iLWcgLU8zIC11bnJvbGwgLWlwIgorLWVsc2UKKy0gICAgZG5sIG5vbi1nY2MgZmxhZ3MgLSB3ZSBwcm9iYWJseSBuZWVkIGV4YWN0IGNvbmZpZ3VyYXRpb24gdHJpcGxldHMgaGVyZS4KKy0gICAgY2FzZSAiJGhvc3QiIGluCistICAgIG1pcHMtc2dpLWlyaXg2LiopCistCU9QVF9DRkxBR1M9IiRDRkxBR1MgLTY0IgorLQlBQ19UUllfQ0ZMQUdTKFskT1BUX0NGTEFHU10sW0NGTEFHUz0kT1BUX0NGTEFHU10pOzsKKy0gICAgc3BhcmMtc3VuLXNvbGFyaXMqKQorLQlPUFRfQ0ZMQUdTPSIkQ0ZMQUdTIC14Q0MgLWZhc3QgLXhPNSIKKy0JQUNfVFJZX0NGTEFHUyhbJE9QVF9DRkxBR1NdLFtDRkxBR1M9JE9QVF9DRkxBR1NdKTs7CistICAgIGVzYWMKKy1maQorLQorIGRubCBDaGVja3MgZm9yIGxpYnRvb2wgLSB0aGlzIG11c3QgYmUgZG9uZSBhZnRlciB3ZSBzZXQgY2ZsYWdzCisgQUNfRElTQUJMRV9TSEFSRUQKKyBBQ19MSUJUT09MX1dJTjMyX0RMTAorSW5kZXg6IGE1MmRlYy0wLjcuNC9saWJhNTIvY29uZmlndXJlLmluY2wKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhNTJkZWMtMC43LjQub3JpZy9saWJhNTIvY29uZmlndXJlLmluY2wJMjAxMC0wMi0yMyAxNDo1MTo0NC4wMDAwMDAwMDAgKzAwMDAKKysrKyBhNTJkZWMtMC43LjQvbGliYTUyL2NvbmZpZ3VyZS5pbmNsCTIwMTAtMDItMjMgMTQ6NTE6NTkuMDAwMDAwMDAwICswMDAwCitAQCAtMSw5ICsxLDYgQEAKKyBBQ19TVUJTVChbTElCQTUyX0NGTEFHU10pCisgQUNfU1VCU1QoW0xJQkE1Ml9MSUJTXSkKKyAKKy1kbmwgYXZvaWQgLWZQSUMgd2hlbiBwb3NzaWJsZQorLUxJQkE1Ml9DRkxBR1M9IiRMSUJBNTJfQ0ZMQUdTIC1wcmVmZXItbm9uLXBpYyIKKy0KKyBBQ19BUkdfRU5BQkxFKFtkb3VibGVdLAorICAgICBbICAtLWVuYWJsZS1kb3VibGUgICAgICAgICB1c2UgZG91YmxlLXByZWNpc2lvbiBzYW1wbGVzXSkKKyBpZiB0ZXN0IHgiJGVuYWJsZV9kb3VibGUiID0geCJ5ZXMiOyB0aGVuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmE1Mi9saWJhNTJfMC43LjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmE1Mi9saWJhNTJfMC43LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRiNjZiMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYTUyL2xpYmE1Ml8wLjcuNC5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIkFUU0MgQS81MiBzdXJyb3VuZCBzb3VuZCBzdHJlYW0gZGVjb2RlciIKK0hPTUVQQUdFID0gImh0dHA6Ly9saWJhNTIuc291cmNlZm9yZ2UubmV0LyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjMgXAorCQkJZmlsZTovL2luY2x1ZGUvYTUyLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xMjttZDU9ODExNTJjZWIzNTYyYmYyMGE2MGQxYjYwMTgxNzVkZDEiCitTRUNUSU9OID0gImxpYnMiCitQUiA9ICJyNCIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworU1JDX1VSSSA9ICJodHRwOi8vbGliYTUyLnNvdXJjZWZvcmdlLm5ldC9maWxlcy9hNTJkZWMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2J1aWxkY2xlYW51cC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImNhYTlmNWJjNDQyMzJkYzhhZWVhNzczZmVhNTZiZTgwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImEyMWQ3MjRhYjNiMzkzMzMzMDE5NDM1MzY4N2RmODJjNDc1YjVkZmI5OTc1MTNlZWY0YzI1ZGU2Yzg2NWVjMzMiCitTID0gIiR7V09SS0RJUn0vYTUyZGVjLSR7UFZ9IgorCitFWFRSQV9PRUNPTkYgPSAiIC0tZW5hYmxlLXNoYXJlZCAiCisKK1BBQ0tBR0VTID0rICJhNTJkZWMgYTUyZGVjLWRvYyIKKworRklMRVNfYTUyZGVjID0gIiAke2JpbmRpcn0vKiAiCitGSUxFU19hNTJkZWMtZG9jID0gIiAke21hbmRpcn0vbWFuMS8qICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYXYvbGliYXYuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJhdi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNmNGIxYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYXYvbGliYXYuaW5jCkBAIC0wLDAgKzEsMTQ2IEBACitTVU1NQVJZID0gIk9wZW4gc291cmNlIGF1ZGlvIGFuZCB2aWRlbyBwcm9jZXNzaW5nIHRvb2xzIGFuZCBsaWJyYWlyaWVzIgorREVTQ1JJUFRJT04gPSAiTGliYXYgaXMgYSBmcmllbmRseSBhbmQgY29tbXVuaXR5LWRyaXZlbiBlZmZvcnQgdG8gcHJvdmlkZSBpdHMgdXNlcnMgXAorICAgICAgICAgICAgICAgd2l0aCBhIHNldCBvZiBwb3J0YWJsZSwgZnVuY3Rpb25hbCBhbmQgaGlnaC1wZXJmb3JtYW5jZSBsaWJyYXJpZXMgZm9yIFwKKyAgICAgICAgICAgICAgIGRlYWxpbmcgd2l0aCBtdWx0aW1lZGlhIGZvcm1hdHMgb2YgYWxsIHNvcnRzLiBJdCBvcmlnaW5hdGVzIGZyb20gdGhlIFwKKyAgICAgICAgICAgICAgIEZGbXBlZyBjb2RlYmFzZSwgYnV0IGdvZXMgaXRzIG93biB3YXkgdGhlc2UgZGF5cywgcHJvdmlkaW5nIGl0cyB1c2VycyBcCisgICAgICAgICAgICAgICB3aXRoIHJlbGlhYmxlIHJlbGVhc2VzIGFuZCBhIGNsZWFyIHZpc2lvbiBob3cgdG8gZ28gZm9yd2FyZC4iCitIT01FUEFHRSA9ICJodHRwOi8vbGliYXYub3JnLyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuR1BMdjI7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuR1BMdjM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEdQTHYyLjE7bWQ1PWJkN2E0NDMzMjBhZjhjODEyZTRjMThkMWI3OWRmMDA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEdQTHYzO21kNT1lNmE2MDBmZDVlMWQ5Y2JkZTJkOTgzNjgwMjMzYWQwMiIKKworU1JDX1VSSSA9ICJodHRwOi8vbGliYXYub3JnL3JlbGVhc2VzLyR7QlB9LnRhci54eiIKKworIyBQcm92aWRlcyBmZm1wZWcgY29tcGF0LCBzZWUgaHR0cDovL2xpYmF2Lm9yZy9hYm91dC5odG1sCitQUk9WSURFUyA9ICJmZm1wZWciCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCitERVBFTkRTID0gImFsc2EtbGliIHpsaWIgbGlib2dnIHlhc20tbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworQiA9ICIke1N9L2J1aWxkLiR7SE9TVF9TWVN9LiR7VEFSR0VUX1NZU30iCisKK0ZVTExfT1BUSU1JWkFUSU9OX2FybXY3YSA9ICItZmV4cGVuc2l2ZS1vcHRpbWl6YXRpb25zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PNCAtZmZhc3QtbWF0aCIKK0JVSUxEX09QVElNSVpBVElPTiA9ICIke0ZVTExfT1BUSU1JWkFUSU9OfSIKKworRVhUUkFfRkZDT05GX2FybXY3YSA9ICItLWNwdT1jb3J0ZXgtYTgiCitFWFRSQV9GRkNPTkYgPz0gIiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gImJ6aXAyIHgyNjQgdGhlb3JhICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW2J6aXAyXSA9ICItLWVuYWJsZS1iemxpYiwtLWRpc2FibGUtYnpsaWIsYnppcDIiCitQQUNLQUdFQ09ORklHW2ZhYWNdID0gIi0tZW5hYmxlLWxpYmZhYWMsLS1kaXNhYmxlLWxpYmZhYWMsZmFhYyIKK1BBQ0tBR0VDT05GSUdbZ3NtXSA9ICItLWVuYWJsZS1saWJnc20sLS1kaXNhYmxlLWxpYmdzbSxsaWJnc20iCitQQUNLQUdFQ09ORklHW2phY2tdID0gIi0tZW5hYmxlLWluZGV2PWphY2ssLS1kaXNhYmxlLWluZGV2PWphY2ssamFjayIKK1BBQ0tBR0VDT05GSUdbbGlidm9yYmlzXSA9ICItLWVuYWJsZS1saWJ2b3JiaXMsLS1kaXNhYmxlLWxpYnZvcmJpcyxsaWJ2b3JiaXMiCitQQUNLQUdFQ09ORklHW21wM2xhbWVdID0gIi0tZW5hYmxlLWxpYm1wM2xhbWUsLS1kaXNhYmxlLWxpYm1wM2xhbWUsbGFtZSIKK1BBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLS1lbmFibGUtb3BlbnNzbCwtLWRpc2FibGUtb3BlbnNzbCxvcGVuc3NsIgorUEFDS0FHRUNPTkZJR1tzY2hyb2VkaW5nZXJdID0gIi0tZW5hYmxlLWxpYnNjaHJvZWRpbmdlciwtLWRpc2FibGUtbGlic2Nocm9lZGluZ2VyLHNjaHJvZWRpbmdlciIKK1BBQ0tBR0VDT05GSUdbc3BlZXhdID0gIi0tZW5hYmxlLWxpYnNwZWV4LC0tZGlzYWJsZS1saWJzcGVleCxzcGVleCIKK1BBQ0tBR0VDT05GSUdbdGhlb3JhXSA9ICItLWVuYWJsZS1saWJ0aGVvcmEsLS1kaXNhYmxlLWxpYnRoZW9yYSxsaWJ0aGVvcmEiCitQQUNLQUdFQ09ORklHW3ZhYXBpXSA9ICItLWVuYWJsZS12YWFwaSwtLWRpc2FibGUtdmFhcGksbGlidmEiCitQQUNLQUdFQ09ORklHW3ZweF0gPSAiLS1lbmFibGUtbGlidnB4LC0tZGlzYWJsZS1saWJ2cHgsbGlidnB4IgorUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0tZW5hYmxlLXgxMWdyYWIsLS1kaXNhYmxlLXgxMWdyYWIsdmlydHVhbC9saWJ4MTEgbGlieGZpeGVzIGxpYnhleHQgeHByb3RvIHZpcnR1YWwvbGlic2RsIgorUEFDS0FHRUNPTkZJR1t4MjY0XSA9ICItLWVuYWJsZS1saWJ4MjY0LC0tZGlzYWJsZS1saWJ4MjY0LHgyNjQiCisKKyMgQ2hlY2sgY29kZWNzIHRoYXQgcmVxdWlyZSAtLWVuYWJsZS1ub25mcmVlCitVU0VfTk9ORlJFRSA9ICIke0BiYi51dGlscy5jb250YWluc19hbnkoJ1BBQ0tBR0VDT05GSUcnLCBbICdmYWFjJywgJ29wZW5zc2wnIF0sICd5ZXMnLCAnJywgZCl9IgorCitFWFRSQV9PRUNPTkYgPSAiIFwKKyAgICAtLWVuYWJsZS1zaGFyZWQgXAorICAgIC0tZW5hYmxlLXB0aHJlYWRzIFwKKyAgICAtLWVuYWJsZS1ncGwgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdVU0VfTk9ORlJFRScsICd5ZXMnLCAnLS1lbmFibGUtbm9uZnJlZScsICcnLCBkKX0gXAorICAgIC0tZW5hYmxlLWF2ZmlsdGVyIFwKKyAgICBcCisgICAgLS1jcm9zcy1wcmVmaXg9JHtUQVJHRVRfUFJFRklYfSBcCisgICAgLS1wcmVmaXg9JHtwcmVmaXh9IFwKKyAgICBcCisgICAgLS1lbmFibGUtYXZzZXJ2ZXIgXAorICAgIC0tZW5hYmxlLWF2cGxheSBcCisgICAgLS1sZD0iJHtDQ0xEfSIgXAorICAgIC0tYXJjaD0ke1RBUkdFVF9BUkNIfSBcCisgICAgLS10YXJnZXQtb3M9ImxpbnV4IiBcCisgICAgLS1lbmFibGUtY3Jvc3MtY29tcGlsZSBcCisgICAgLS1leHRyYS1jZmxhZ3M9IiR7VEFSR0VUX0NGTEFHU30gJHtIT1NUX0NDX0FSQ0h9JHtUT09MQ0hBSU5fT1BUSU9OU30iIFwKKyAgICAtLWV4dHJhLWxkZmxhZ3M9IiR7VEFSR0VUX0xERkxBR1N9IiBcCisgICAgLS1zeXNyb290PSIke1NUQUdJTkdfRElSX1RBUkdFVH0iIFwKKyAgICAtLWVuYWJsZS1oYXJkY29kZWQtdGFibGVzIFwKKyAgICAke0VYVFJBX0ZGQ09ORn0gXAorICAgIC0tbGliZGlyPSR7bGliZGlyfSBcCisgICAgLS1zaGxpYmRpcj0ke2xpYmRpcn0gXAorIgorCitkb19jb25maWd1cmUoKSB7CisgICAgIyBXZSBkb24ndCBoYXZlIFRBUkdFVF9QUkVGSVgtcGtnY29uZmlnCisgICAgc2VkIC1pICcvcGtnX2NvbmZpZ19kZWZhdWx0PSIke2Nyb3NzX3ByZWZpeH0ke3BrZ19jb25maWdfZGVmYXVsdH0iL2QnICR7U30vY29uZmlndXJlCisgICAgbWtkaXIgLXAgJHtCfQorICAgIGNkICR7Qn0KKyAgICAke1N9L2NvbmZpZ3VyZSAke0VYVFJBX09FQ09ORn0KKyAgICBzZWQgLWkgLWUgczpPczpPNDpnICR7Qn0vY29uZmlnLmgKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7U30vbGliYXZmaWx0ZXIvKi5oICR7RH0ke2luY2x1ZGVkaXJ9L2xpYmF2ZmlsdGVyLworfQorCitQQUNLQUdFUyArPSAiJHtQTn0tdmhvb2stZGJnICR7UE59LXZob29rIGZmbXBlZy14MjY0LXByZXNldHMiCitQQUNLQUdFU19EWU5BTUlDICs9ICJebGliKGF2KGNvZGVjfGRldmljZXxmaWx0ZXJ8Zm9ybWF0fHV0aWwpfHN3c2NhbGUpLioiCisKK1JTVUdHRVNUU18ke1BOfSA9ICJtcGxheWVyIgorRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9IgorRklMRVNfJHtQTn0tZGV2ID0gIiR7aW5jbHVkZWRpcn0vJHtQTn0iCisKK0ZJTEVTXyR7UE59LXZob29rID0gIiR7bGliZGlyfS92aG9vayIKK0ZJTEVTXyR7UE59LXZob29rLWRiZyArPSAiJHtsaWJkaXJ9L3Zob29rLy5kZWJ1ZyIKKworRklMRVNfZmZtcGVnLXgyNjQtcHJlc2V0cyA9ICIke2RhdGFkaXJ9LyouYXZwcmVzZXQiCisKK0xFQURfU09OQU1FID0gImxpYmF2Y29kZWMuc28iCisKK0ZJTEVTXyR7UE59LWRldiA9ICIke2luY2x1ZGVkaXJ9IgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCgpIHsKKyAgICBhdl9saWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9JykKKyAgICBhdl9wa2djb25maWcgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L3BrZ2NvbmZpZycpCisKKyAgICAjIFJ1bnRpbWUgcGFja2FnZQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGF2X2xpYmRpciwgJ15saWIoLiopXC5zb1wuLionLAorICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9wYXR0ZXJuPSdsaWIlcycsCisgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J2xpYmF2ICVzIGxpYnJhcnknLAorICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2RlcGVuZHM9JycsCisgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgIGFsbG93X2xpbmtzPVRydWUpCisKKyAgICAjIERldmVsb3BtZW50IHBhY2thZ2VzICgtZGV2LCAtc3RhdGljZGV2KQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGF2X2xpYmRpciwgJ15saWIoLiopXC5zbyQnLAorICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9wYXR0ZXJuPSdsaWIlcy1kZXYnLAorICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdsaWJhdiAlcyBkZXZlbG9wbWVudCBwYWNrYWdlJywKKyAgICAgICAgICAgICAgICAgICAgICBleHRyYV9kZXBlbmRzPScke1BOfS1kZXYnLAorICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICBhbGxvd19saW5rcz1UcnVlKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGF2X3BrZ2NvbmZpZywgJ15saWIoLiopXC5wYyQnLAorICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9wYXR0ZXJuPSdsaWIlcy1kZXYnLAorICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdsaWJhdiAlcyBkZXZlbG9wbWVudCBwYWNrYWdlJywKKyAgICAgICAgICAgICAgICAgICAgICBleHRyYV9kZXBlbmRzPScke1BOfS1kZXYnLAorICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQ9VHJ1ZSkKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBhdl9saWJkaXIsICdebGliKC4qKVwuYSQnLAorICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9wYXR0ZXJuPSdsaWIlcy1zdGF0aWNkZXYnLAorICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdsaWJhdiAlcyBkZXZlbG9wbWVudCBwYWNrYWdlIC0gc3RhdGljIGxpYnJhcnknLAorICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2RlcGVuZHM9JyR7UE59LWRldicsCisgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgIGFsbG93X2xpbmtzPVRydWUpCisKKyAgICBpZiBkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKSBpbiBbICdpNTg2JywgJ2k2ODYnIF06CisgICAgICAgICMgbGliYXYgY2FuJ3QgYmUgYnVpbGQgd2l0aCAtZlBJQyBmb3IgMzItYml0IHg4NgorICAgICAgICBwa2dzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgICAgICBmb3IgcGtnIGluIHBrZ3M6CisgICAgICAgICAgICBkLmFwcGVuZFZhcignSU5TQU5FX1NLSVBfJXMnICUgcGtnLCAnIHRleHRyZWwnKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJhdi9saWJhdi1maXgtQ1ZFLTIwMTQtOTY3Ni5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYXYvbGliYXYvbGliYXYtZml4LUNWRS0yMDE0LTk2NzYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUzMWNhYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYXYvbGliYXYvbGliYXYtZml4LUNWRS0yMDE0LTk2NzYucGF0Y2gKQEAgLTAsMCArMSw5OCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitCYWNrcG9ydCBwYXRjaCB0byBmaXggQ1ZFLTIwMTQtOTY3Ni4KKworaHR0cHM6Ly9zZWN1cml0eS10cmFja2VyLmRlYmlhbi5vcmcvdHJhY2tlci9DVkUtMjAxNC05Njc2CitodHRwczovL2dpdC5saWJhdi5vcmcvP3A9bGliYXYuZ2l0O2E9Y29tbWl0O2g9YjNmMDQ2NTczNjhhMzJhOTkwMzQwNjM5NWY4NjVlMjMwYjFkZTM0OAorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorRnJvbSBiM2YwNDY1NzM2OGEzMmE5OTAzNDA2Mzk1Zjg2NWUyMzBiMWRlMzQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTHVjYSBCYXJiYXRvIDxsdV96ZXJvQGdlbnRvby5vcmc+CitEYXRlOiBNb24sIDUgSmFuIDIwMTUgMTA6NDA6NDEgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gc2VnbWVudDogRml4IHRoZSBmYWlsdXJlIHBhdGhzCisKK0EgZmFpbHVyZSBpbiBzZWdtZW50X2VuZCgpIG9yIHNlZ21lbnRfc3RhcnQoKSB3b3VsZCBsZWFkIHRvIGZyZWVpbmcKK2EgZGFuZ2xpbmcgcG9pbnRlciBhbmQgaW4gZ2VuZXJhbCBmdXJ0aGVyIGNhbGxzIHRvIHNlZ193cml0ZV9wYWNrZXQoKQorb3IgdG8gc2VnX3dyaXRlX3RyYWlsZXIoKSB3b3VsZCBoYXZlIHRoZSBzYW1lIGZhdWx0eSBiZWhhdmlvdXIuCisKK0NDOiBsaWJhdi1zdGFibGVAbGliYXYub3JnCitSZXBvcnRlZC1CeTogbHVvZGFsb25nZGVAZ21haWwuY29tCistLS0KKyBsaWJhdmZvcm1hdC9zZWdtZW50LmMgfCAzMiArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3NlZ21lbnQuYyBiL2xpYmF2Zm9ybWF0L3NlZ21lbnQuYworaW5kZXggNTJkYTZiOS4uYmNmZDFmOSAxMDA2NDQKKy0tLSBhL2xpYmF2Zm9ybWF0L3NlZ21lbnQuYworKysrIGIvbGliYXZmb3JtYXQvc2VnbWVudC5jCitAQCAtMTg0LDYgKzE4NCwxMyBAQCBzdGF0aWMgdm9pZCBjbG9zZV9udWxsX2N0eChBVklPQ29udGV4dCAqcGIpCisgICAgIGF2X2ZyZWUocGIpOworIH0KKyAKKytzdGF0aWMgdm9pZCBzZWdfZnJlZV9jb250ZXh0KFNlZ21lbnRDb250ZXh0ICpzZWcpCisreworKyAgICBhdmlvX2Nsb3NlcCgmc2VnLT5wYik7CisrICAgIGF2Zm9ybWF0X2ZyZWVfY29udGV4dChzZWctPmF2Zik7CisrICAgIHNlZy0+YXZmID0gTlVMTDsKKyt9CisrCisgc3RhdGljIGludCBzZWdfd3JpdGVfaGVhZGVyKEFWRm9ybWF0Q29udGV4dCAqcykKKyB7CisgICAgIFNlZ21lbnRDb250ZXh0ICpzZWcgPSBzLT5wcml2X2RhdGE7CitAQCAtMjY1LDEyICsyNzIsOSBAQCBzdGF0aWMgaW50IHNlZ193cml0ZV9oZWFkZXIoQVZGb3JtYXRDb250ZXh0ICpzKQorICAgICB9CisgCisgZmFpbDoKKy0gICAgaWYgKHJldCkgeworLSAgICAgICAgaWYgKHNlZy0+bGlzdCkKKy0gICAgICAgICAgICBhdmlvX2Nsb3NlKHNlZy0+cGIpOworLSAgICAgICAgaWYgKHNlZy0+YXZmKQorLSAgICAgICAgICAgIGF2Zm9ybWF0X2ZyZWVfY29udGV4dChzZWctPmF2Zik7CistICAgIH0KKysgICAgaWYgKHJldCA8IDApCisrICAgICAgICBzZWdfZnJlZV9jb250ZXh0KHNlZyk7CisrCisgICAgIHJldHVybiByZXQ7CisgfQorIAorQEAgLTI4Miw2ICsyODYsOSBAQCBzdGF0aWMgaW50IHNlZ193cml0ZV9wYWNrZXQoQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tldCAqcGt0KQorICAgICBpbnQ2NF90IGVuZF9wdHMgPSBzZWctPnJlY29yZGluZ190aW1lICogc2VnLT5udW1iZXI7CisgICAgIGludCByZXQsIGNhbl9zcGxpdCA9IDE7CisgCisrICAgIGlmICghb2MpCisrICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworKworICAgICBpZiAoc2VnLT5oYXNfdmlkZW8pIHsKKyAgICAgICAgIGNhbl9zcGxpdCA9IHN0LT5jb2RlYy0+Y29kZWNfdHlwZSA9PSBBVk1FRElBX1RZUEVfVklERU8gJiYKKyAgICAgICAgICAgICAgICAgICAgIHBrdC0+ZmxhZ3MgJiBBVl9QS1RfRkxBR19LRVk7CitAQCAtMzIyLDExICszMjksOCBAQCBzdGF0aWMgaW50IHNlZ193cml0ZV9wYWNrZXQoQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tldCAqcGt0KQorICAgICByZXQgPSBmZl93cml0ZV9jaGFpbmVkKG9jLCBwa3QtPnN0cmVhbV9pbmRleCwgcGt0LCBzKTsKKyAKKyBmYWlsOgorLSAgICBpZiAocmV0IDwgMCkgeworLSAgICAgICAgaWYgKHNlZy0+bGlzdCkKKy0gICAgICAgICAgICBhdmlvX2Nsb3NlKHNlZy0+cGIpOworLSAgICAgICAgYXZmb3JtYXRfZnJlZV9jb250ZXh0KG9jKTsKKy0gICAgfQorKyAgICBpZiAocmV0IDwgMCkKKysgICAgICAgIHNlZ19mcmVlX2NvbnRleHQoc2VnKTsKKyAKKyAgICAgcmV0dXJuIHJldDsKKyB9CitAQCAtMzM1LDcgKzMzOSwxMSBAQCBzdGF0aWMgaW50IHNlZ193cml0ZV90cmFpbGVyKHN0cnVjdCBBVkZvcm1hdENvbnRleHQgKnMpCisgeworICAgICBTZWdtZW50Q29udGV4dCAqc2VnID0gcy0+cHJpdl9kYXRhOworICAgICBBVkZvcm1hdENvbnRleHQgKm9jID0gc2VnLT5hdmY7CistICAgIGludCByZXQ7CisrICAgIGludCByZXQgPSAwOworKworKyAgICBpZiAoIW9jKQorKyAgICAgICAgZ290byBmYWlsOworKworICAgICBpZiAoIXNlZy0+d3JpdGVfaGVhZGVyX3RyYWlsZXIpIHsKKyAgICAgICAgIGlmICgocmV0ID0gc2VnbWVudF9lbmQob2MsIDApKSA8IDApCisgICAgICAgICAgICAgZ290byBmYWlsOworLS0gCisyLjQuMS4zMTQuZzk1MzJlYWQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJhdl85LjE4LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJhdl85LjE4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMGE2NDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYmF2XzkuMTguYmIKQEAgLTAsMCArMSw2IEBACityZXF1aXJlIGxpYmF2LmluYworCitTUkNfVVJJW21kNXN1bV0gPSAiNzVlODM4MDY4YTc1ZmI4OGUxYjRlYTA1NDZiYzE2ZjAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDg3NWU4MzVkYTY4M2VlZjFhN2JhYzc1ZTE4ODQ2MzQxOTQxNDlkNzQ3OWQxNTM4YmE5ZmJlMTYxNGQwNjZkNyIKKworU1JDX1VSSSArPSAiZmlsZTovL2xpYmF2LWZpeC1DVkUtMjAxNC05Njc2LnBhdGNoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJwb3N0cHJvY19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYnBvc3Rwcm9jX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWFhNTBmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJwb3N0cHJvY19naXQuYmIKQEAgLTAsMCArMSw0NyBAQAorU1VNTUFSWSA9ICJGRm1wZWcgZGVyaXZlZCBwb3N0cHJvY2Vzc2luZyBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdC52aWRlb2xhbi5vcmcvP3A9bGlicG9zdHByb2MuZ2l0O2E9c3VtbWFyeSIKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAibGliYXYiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgorCisjIGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBsaWJhdiB3aGljaCBoYXMgY29tbWVyY2lhbCBmbGFnCitMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCisKK1BWID0gIjUyLjMuMCtnaXQke1NSQ1BWfSIKKworU1JDUkVWID0gIjgxMWRiM2I5NTdkZmRlMjRhZWYyZDBmODJlMjk3ZTViZjU1MmQ4NzMiCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vbHUtemVyby9wb3N0cHJvYztwcm90b2NvbD1odHRwcyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgbGliX3BhY2thZ2UgcGtnY29uZmlnCisKK0ZVTExfT1BUSU1JWkFUSU9OX2FybXY3YSA9ICItZmV4cGVuc2l2ZS1vcHRpbWl6YXRpb25zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PNCAtZmZhc3QtbWF0aCIKK0JVSUxEX09QVElNSVpBVElPTiA9ICIke0ZVTExfT1BUSU1JWkFUSU9OfSIKKworRVhUUkFfRkZDT05GX2FybXY3YSA9ICItLWNwdT1jb3J0ZXgtYTgiCitFWFRSQV9GRkNPTkYgPz0gIiIKKworRVhUUkFfT0VDT05GID0gIiBcCisgICAgLS1lbmFibGUtc2hhcmVkIFwKKyAgICAtLWVuYWJsZS1wdGhyZWFkcyBcCisgICAgLS1lbmFibGUtZ3BsIFwKKyAgICAtLWVuYWJsZS1wb3N0cHJvYyBcCisgICAgXAorICAgIC0tY3Jvc3MtcHJlZml4PSR7VEFSR0VUX1BSRUZJWH0gXAorICAgIC0tcHJlZml4PSR7cHJlZml4fSBcCisgICAgXAorICAgIC0tYXJjaD0ke1RBUkdFVF9BUkNIfSBcCisgICAgLS10YXJnZXQtb3M9ImxpbnV4IiBcCisgICAgLS1lbmFibGUtY3Jvc3MtY29tcGlsZSBcCisgICAgLS1leHRyYS1jZmxhZ3M9IiR7VEFSR0VUX0NGTEFHU30gJHtIT1NUX0NDX0FSQ0h9JHtUT09MQ0hBSU5fT1BUSU9OU30iIFwKKyAgICAtLWV4dHJhLWxkZmxhZ3M9IiR7VEFSR0VUX0xERkxBR1N9IiBcCisgICAgLS1zeXNyb290PSIke1NUQUdJTkdfRElSX1RBUkdFVH0iIFwKKyAgICAtLXNobGliZGlyPSIke2xpYmRpcn0iIFwKKyAgICAke0VYVFJBX0ZGQ09ORn0gXAorIgorCitkb19jb25maWd1cmUoKSB7CisgICAgJHtTfS9jb25maWd1cmUgJHtFWFRSQV9PRUNPTkZ9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmlkM3RhZy9saWJpZDN0YWcvYWRkcGtnY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJpZDN0YWcvbGliaWQzdGFnL2FkZHBrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGQ0MGMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJpZDN0YWcvbGliaWQzdGFnL2FkZHBrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDQzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBsaWJpZDN0YWctMC4xNS4xYi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmlkM3RhZy0wLjE1LjFiLm9yaWcvTWFrZWZpbGUuYW0JMjAwOS0wNy0yOSAwOToyOToyMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJpZDN0YWctMC4xNS4xYi9NYWtlZmlsZS5hbQkyMDA5LTA3LTI5IDA5OjI5OjQ3LjAwMDAwMDAwMCArMDEwMAorQEAgLTI3LDYgKzI3LDkgQEAKKyBsaWJfTFRMSUJSQVJJRVMgPQlsaWJpZDN0YWcubGEKKyBpbmNsdWRlX0hFQURFUlMgPQlpZDN0YWcuaAorIAorK3BrZ2NvbmZpZ2RpciA9ICQobGliZGlyKS9wa2djb25maWcKKytwa2djb25maWdfREFUQSA9IGlkM3RhZy5wYworKworICMjIEZyb20gdGhlIGxpYnRvb2wgZG9jdW1lbnRhdGlvbiBvbiBsaWJyYXJ5IHZlcnNpb25pbmc6CisgIyMKKyAjIyBDVVJSRU5UCitJbmRleDogbGliaWQzdGFnLTAuMTUuMWIvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliaWQzdGFnLTAuMTUuMWIub3JpZy9jb25maWd1cmUuYWMJMjAwOS0wNy0yOSAwOToyNzoxNS4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJpZDN0YWctMC4xNS4xYi9jb25maWd1cmUuYWMJMjAwOS0wNy0yOSAwOToyNzo0NS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMDEsNSArMjAxLDUgQEAKKyBkbmwgQUNfU1VCU1QoTFRMSUJPQkpTKQorIAorIEFDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGUgbXN2YysrL01ha2VmaWxlICBcCistCWxpYmlkM3RhZy5saXN0XSkKKysJbGliaWQzdGFnLmxpc3QgaWQzdGFnLnBjXSkKKyBBQ19PVVRQVVQKK0luZGV4OiBsaWJpZDN0YWctMC4xNS4xYi9pZDN0YWcucGMuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBsaWJpZDN0YWctMC4xNS4xYi9pZDN0YWcucGMuaW4JMjAwOS0wNy0yOSAwOToyOToxMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMTEgQEAKKytwcmVmaXg9QHByZWZpeEAKKytleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACisrbGliZGlyPUBsaWJkaXJACisraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKysKKytOYW1lOiBpZDN0YWcKKytEZXNjcmlwdGlvbjogSUQzIHRhZyByZWFkaW5nIGxpYnJhcnkKKytSZXF1aXJlczoKKytWZXJzaW9uOiBAVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbGlkM3RhZyAtbHoKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJpZDN0YWcvbGliaWQzdGFnL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliaWQzdGFnL2xpYmlkM3RhZy9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg0NWZiMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliaWQzdGFnL2xpYmlkM3RhZy9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2Z1bmM9ZGV0YWlsJmFpZD0zNTk5MjgwJmdyb3VwX2lkPTEyMzQ5JmF0aWQ9MTEyMzQ5XQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBsaWJpZDN0YWctMC4xNS4xYi9jb25maWd1cmUuYWMgbGliaWQzdGFnLTAuMTUuMWIvY29uZmlndXJlLmFjCistLS0gbGliaWQzdGFnLTAuMTUuMWIvY29uZmlndXJlLmFjCTIwMDQtMDEtMjQgMDE6MjI6NDYuMDAwMDAwMDAwICswMjAwCisrKysgbGliaWQzdGFnLTAuMTUuMWIvY29uZmlndXJlLmFjCTIwMTMtMDEtMDMgMDY6NDE6MDIuNzM0ODM1MDE0ICswMjAwCitAQCAtMjgsNyArMjgsNyBAQAorCistQU1fSU5JVF9BVVRPTUFLRQorK0FNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ25dKQorCistQU1fQ09ORklHX0hFQURFUihbY29uZmlnLmhdKQorK0FDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaF0pCisKKyBkbmwgU3lzdGVtIHR5cGUuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmlkM3RhZy9saWJpZDN0YWdfMC4xNS4xYi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliaWQzdGFnL2xpYmlkM3RhZ18wLjE1LjFiLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YThhNDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmlkM3RhZy9saWJpZDN0YWdfMC4xNS4xYi5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIGludGVyYWN0aW5nIHdpdGggSUQzIHRhZ3MgaW4gTVAzIGZpbGVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9tYWQvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTEyMzQ5JmF0aWQ9MTEyMzQ5IgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisJCQlmaWxlOi8vQ09QWVJJR0hUO21kNT01ZTYyNzllZmI4N2MyNmM2ZTVlN2E2ODMxN2E2YTg3YSBcCisJCQlmaWxlOi8vdmVyc2lvbi5oO2JlZ2lubGluZT0xO2VuZGxpbmU9ODttZDU9ODZhYzY4YjY3ZjA1NGI3YWZkZTllMTQ5YmJjM2ZlNjMiCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gInpsaWIgZ3BlcmYtbmF0aXZlIgorUFIgPSAicjciCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLm1hcnMub3JnL3B1Yi9tcGVnL2xpYmlkM3RhZy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYWRkcGtnY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlNTgwOGFkOTk3YmEzMmM0OTg4MDM4MjIwNzg3NDhjMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2M2RhNGY2ZTc5OTcyNzhmOGEzZmVmNGM2YTM3MmQzNDJmNzA1MDUxZDFlZWI2YTQ2YTg2YjAzNjEwZTI2MTUxIgorCitTID0gIiR7V09SS0RJUn0vbGliaWQzdGFnLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9hZGQtcGtnY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2FkZC1wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ5ZGM4YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9hZGQtcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK0hlcmUgaXMgYSBwYXRjaCBmb3IgYWRkaW5nIHBrZy1jb25maWcgc3VwcG9ydCB0byBsaWJtYWQuCitJdCB3b3VsZCBtYWtlIGxpZmUgYSBiaXQgZWFzaWVyIGZvciBkaXN0cm8gbWFpbnRhaW5lcnMgaWYgdGhpcyB3YXMgYXBwbGllZC4KK0luIGNhc2UgeW91IGRpZG4ndCBrbm93LCBwa2ctY29uZmlnIGlzIGEgdG9vbCBmb3IgcHJvdmlkaW5nIExERkxBR1MgYW5kCitDRkxBR1MgZm9yIHBhY2thZ2VzIHVzaW5nIHNoYXJlZCBsaWJyYXJpZXMuIEl0J3Mgb24gZnJlZWRlc2t0b3Aub3JnLgorRGViaWFuIGhhcyBhbHJlYWR5IGJlZW4gZGlzdHJpYnV0aW5nIHRoZSBwa2ctY29uZmlnIGZpbGUgbWFkLnBjIHdpdGgKK2xpYm1hZCBmb3Igc29tZSB0aW1lLCBhbmQgcGVvcGxlIGRldmVsb3Bpbmcgb24gZGViaWFuIChub3RhYmx5IHhtbXMyIAorZGV2ZWxvcGVycykgaGF2ZSBzdGFydGVkIHJlbHlpbmcgb24gdGhpcyBzdXBwb3J0IGJlaW5nIHByZXNlbnQsIGNhdXNpbmcKK3NvbWUgY29uZnVzaW9uIGZvciBwZW9wbGUgaW5zdGFsbGluZyBmcm9tIHNvdXJjZSBhbmQgb24gc29tZSBCU0RzIHdoaWNoCitkbyBub3QgcHJvdmlkZSBtYWQucGMgKGdvb2dsZTogcGtnY29uZmlnIGxpYm1hZCkuCisKK0VNSAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKy0taDMxZ3paRXROTFRxT2psRgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXVzLWFzY2lpCitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0mcXVvdDtsaWJtYWQtMC4xNS4xYi1wa2djb25maWcucGF0Y2gmcXVvdDsKKworZGlmZiAtTmF1ciBsaWJtYWQtMC4xNS4xYi5vbGQvY29uZmlndXJlLmFjIGxpYm1hZC0wLjE1LjFiL2NvbmZpZ3VyZS5hYworLS0tIGxpYm1hZC0wLjE1LjFiLm9sZC9jb25maWd1cmUuYWMJMjAwNC0wMS0yMyAxMDo0MTozMi4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJtYWQtMC4xNS4xYi9jb25maWd1cmUuYWMJMjAwNC0wOC0wNyAwMjoyNToyNC42MzM0NjIxNjggKzAyMDAKK0BAIC00MjksNSArNDI5LDUgQEAKKyBkbmwgQUNfU1VCU1QoTFRMSUJPQkpTKQorIAorIEFDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGUgbXN2YysrL01ha2VmaWxlICBcCistCWxpYm1hZC5saXN0XSkKKysJbGlibWFkLmxpc3QgbWFkLnBjXSkKKyBBQ19PVVRQVVQKK2RpZmYgLU5hdXIgbGlibWFkLTAuMTUuMWIub2xkL21hZC5wYy5pbiBsaWJtYWQtMC4xNS4xYi9tYWQucGMuaW4KKy0tLSBsaWJtYWQtMC4xNS4xYi5vbGQvbWFkLnBjLmluCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgbGlibWFkLTAuMTUuMWIvbWFkLnBjLmluCTIwMDQtMDgtMDcgMDI6MDQ6NTkuNjE3NjkyODcyICswMjAwCitAQCAtMCwwICsxLDE0IEBACisrIyBsaWJtYWQgcGtnLWNvbmZpZyBzb3VyY2UgZmlsZQorKworK3ByZWZpeD1AcHJlZml4QAorK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKytpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorKworK05hbWU6IG1hZAorK0Rlc2NyaXB0aW9uOiBNUEVHIEF1ZGlvIERlY29kZXIKKytWZXJzaW9uOiBAVkVSU0lPTkAKKytSZXF1aXJlczoKKytDb25mbGljdHM6CisrTGliczogLUwke2xpYmRpcn0gLWxtYWQgLWxtCisrQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KK2RpZmYgLU5hdXIgbGlibWFkLTAuMTUuMWIub2xkL01ha2VmaWxlLmFtIGxpYm1hZC0wLjE1LjFiL01ha2VmaWxlLmFtCistLS0gbGlibWFkLTAuMTUuMWIub2xkL01ha2VmaWxlLmFtCTIwMDQtMDItMTcgMDM6MDI6MDMuMDAwMDAwMDAwICswMTAwCisrKysgbGlibWFkLTAuMTUuMWIvTWFrZWZpbGUuYW0JMjAwNC0wOC0wNyAwMjowMzoxOS44NTk4NTgzNjggKzAyMDAKK0BAIC0yNCw2ICsyNCw5IEBACisgU1VCRElSUyA9CQkKKyBESVNUX1NVQkRJUlMgPQkJbXN2YysrCisgCisrcGtnY29uZmlnZGlyID0JCSQobGliZGlyKS9wa2djb25maWcKKytwa2djb25maWdfREFUQSA9CW1hZC5wYworKworIGxpYl9MVExJQlJBUklFUyA9CWxpYm1hZC5sYQorIGluY2x1ZGVfSEVBREVSUyA9CW1hZC5oCisgCitAQCAtMzQsNyArMzcsOCBAQAorIG1pbmltYWRfTERBREQgPQkJbGlibWFkLmxhCisgCisgRVhUUkFfRElTVCA9CQltYWQuaC5zZWQgIFwKKy0JCQlDSEFOR0VTIENPUFlSSUdIVCBDUkVESVRTIFJFQURNRSBUT0RPIFZFUlNJT04KKysJCQlDSEFOR0VTIENPUFlSSUdIVCBDUkVESVRTIFJFQURNRSBUT0RPIFZFUlNJT04gXAorKwkJCW1hZC5wYy5pbgorIAorIGV4cG9ydGVkX2hlYWRlcnMgPQl2ZXJzaW9uLmggZml4ZWQuaCBiaXQuaCB0aW1lci5oIHN0cmVhbS5oIGZyYW1lLmggIFwKKyAJCQlzeW50aC5oIGRlY29kZXIuaAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvYXV0b21ha2UtZm9yZWlnbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9hdXRvbWFrZS1mb3JlaWduLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNTQ0MjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvYXV0b21ha2UtZm9yZWlnbi5wYXRjaApAQCAtMCwwICsxLDEyIEBACitQYXNzIGZvcmVpZ24gdG8gQU1fSU5JVF9BVVRPTUFLRSBzbyBpdCBkb2Vzbid0IGVuZm9yY2UgR05VIHN0cmljdG5lc3MuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZTYwMmZkMy4uZTA3NWI4NiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjkgKzI5IEBAIEFDX0NPTkZJR19TUkNESVIoW2RlY29kZXIuaF0pCistQU1fSU5JVF9BVVRPTUFLRQorK0FNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ25dKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2ZpeF9mb3JfbWlwc193aXRoX2djYy00LjUuMC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9maXhfZm9yX21pcHNfd2l0aF9nY2MtNC41LjAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFjN2FhMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9maXhfZm9yX21pcHNfd2l0aF9nY2MtNC41LjAucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorZ2NjIDQuNCBkaWQgdGhpczogVGhlIE1JUFMgcG9ydCBubyBsb25nZXIgcmVjb2duaXplcyB0aGUgaCAgYXNtIGNvbnN0cmFpbnQuIEl0IHdhcyBuZWNlc3NhcnkgdG8gcmVtb3ZlIHRoaXMgY29uc3RyYWludCBpbiBvcmRlciB0byBhdm9pZCBnZW5lcmF0aW5nIHVucHJlZGljdGFibGUgY29kZSBzZXF1ZW5jZXMuIAorCitzbyB0aGUgbGlibWFkIGJ1aWxkIHdpdGggZ2NjLTQuNS4wIHdhcyBmYWlsaW5nLgorCitGb3VuZCBhIHNvbHV0aW9uIGhlcmU6CisKK2h0dHA6Ly91cy5nZW5lcmF0aW9uLW50LmNvbS9hbnN3ZXIvYnVnLTU2ODQxOC1saWJtYWQwLWRldi1tcGczMjEtY29tcGlsYXRpb24tZXJyb3JzLW1pcHMtbWlwc2VsLWFyY2hpdGVjdHVyZXMtaGVscC0xNjkwMzM0NTEuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworMjAxMC8wNy8yOQorTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworSW5kZXg6IGxpYm1hZC0wLjE1LjFiL2ZpeGVkLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJtYWQtMC4xNS4xYi5vcmlnL2ZpeGVkLmgKKysrKyBsaWJtYWQtMC4xNS4xYi9maXhlZC5oCitAQCAtMjk3LDYgKzI5NywxNSBAQCBtYWRfZml4ZWRfdCBtYWRfZl9tdWxfaW5saW5lKG1hZF9maXhlZF90CisgCisgLyogLS0tIE1JUFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworIAorKyMgZWxpZiBkZWZpbmVkKEZQTV9NSVBTKSAmJiAoX19HTlVDX18gPiA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDQpKQorKyAgICB0eXBlZGVmIHVuc2lnbmVkIGludCB1NjRfZGlfdCBfX2F0dHJpYnV0ZV9fICgobW9kZSAoREkpKSk7CisrIyAgIGRlZmluZSBNQURfRl9NTFgoaGksIGxvLCB4LCB5KSBcCisrICAgIGRvIHsgXAorKyAgICAgICAgdTY0X2RpX3QgX19sbCA9ICh1NjRfZGlfdCkgKHgpICogKHkpOyBcCisrICAgICAgICBoaSA9IF9fbGwgPj4gMzI7IFwKKysgICAgICAgIGxvID0gX19sbDsgXAorKyAgICAgfSB3aGlsZSAoMCkKKysKKyAjIGVsaWYgZGVmaW5lZChGUE1fTUlQUykKKyAKKyAvKgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL25vLWZvcmNlLW1lbS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9uby1mb3JjZS1tZW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVlNmQyMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9uby1mb3JjZS1tZW0ucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorVGhpcyBvcHRpb24gbm8gbG9uZ2VyIGV4aXN0cyBpbiBnY2MgMy40LjEKKworUlAgLSAxOC8wNy8yMDA4CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGxpYm1hZC0wLjE1LjFiL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYm1hZC0wLjE1LjFiLm9yaWcvY29uZmlndXJlLmFjCTIwMDgtMDctMTggMTU6NDU6MzAuMDAwMDAwMDAwICswMTAwCisrKysgbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjCTIwMDgtMDctMTggMTU6NDU6MzcuMDAwMDAwMDAwICswMTAwCitAQCAtMTQwLDcgKzE0MCw2IEBACisgICAgIGNhc2UgIiRvcHRpbWl6ZSIgaW4KKyAJLU98Ii1PICIqKQorIAkgICAgb3B0aW1pemU9Ii1PIgorLQkgICAgb3B0aW1pemU9IiRvcHRpbWl6ZSAtZmZvcmNlLW1lbSIKKyAJICAgIG9wdGltaXplPSIkb3B0aW1pemUgLWZmb3JjZS1hZGRyIgorIAkgICAgOiAjeCBvcHRpbWl6ZT0iJG9wdGltaXplIC1maW5saW5lLWZ1bmN0aW9ucyIKKyAJICAgIDogIy0gb3B0aW1pemU9IiRvcHRpbWl6ZSAtZnN0cmVuZ3RoLXJlZHVjZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjODdkMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0xMjM0OSZhdGlkPTExMjM0OV0KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmQgbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjIGxpYm1hZC0wLjE1LjFiL2NvbmZpZ3VyZS5hYworLS0tIGxpYm1hZC0wLjE1LjFiL2NvbmZpZ3VyZS5hYwkyMDA0LTAxLTIzIDExOjQxOjMyLjAwMDAwMDAwMCArMDIwMAorKysrIGxpYm1hZC0wLjE1LjFiL2NvbmZpZ3VyZS5hYwkyMDEzLTAxLTAzIDA4OjI4OjIzLjcxODY5MzY5NyArMDIwMAorQEAgLTI4LDcgKzI4LDcgQEAKKworIEFNX0lOSVRfQVVUT01BS0UKKworLUFNX0NPTkZJR19IRUFERVIoW2NvbmZpZy5oXSkKKytBQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmhdKQorCisgZG5sIFN5c3RlbSB0eXBlLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkXzAuMTUuMWIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWRfMC4xNS4xYi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTA4YjE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkXzAuMTUuMWIuYmIKQEAgLTAsMCArMSwzOCBAQAorU1VNTUFSWSA9ICJNUEVHIEF1ZGlvIERlY29kZXIgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbWFkLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0xMjM0OSZhdGlkPTExMjM0OSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorCQkJZmlsZTovL0NPUFlSSUdIVDttZDU9OGU1NWViMTQ4OTRlNzgyYjg0NDg4ZDVhMjM5YmMyM2QgXAorCQkJZmlsZTovL3ZlcnNpb24uaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTg7bWQ1PWFhMDczMTFkZDM5Mjg4ZDQzNDlmMjhlMWRlNTE2NDU0IgorU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJsaWJpZDN0YWciCitQUiA9ICJyMyIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAubWFycy5vcmcvcHViL21wZWcvbGlibWFkLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9uby1mb3JjZS1tZW0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWRkLXBrZ2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfZm9yX21pcHNfd2l0aF9nY2MtNC41LjAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWJlNTQzYmMzMGM1NmZiNmJlYTFkN2JmNmE2NGU2NmMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmJmYWMzZWQ2YmZiYzI4MjNkMzc3NWViYjkzMTA4NzM3MWUxNDJiYjBlOWJiMWJlZTUxYTc2YTZlMDA3ODY5MCIgCisKK1MgPSAiJHtXT1JLRElSfS9saWJtYWQtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLWVuYWJsZS1zcGVlZCAtLWVuYWJsZS1zaGFyZWQiCisjIFRoZSBBU08ncyBkb24ndCB0YWtlIGFueSBhY2NvdW50IG9mIHRodW1iLi4uCitFWFRSQV9PRUNPTkZfYXBwZW5kX3RodW1iID0gIiAtLWRpc2FibGUtYXNvIC0tZW5hYmxlLWZwbT1kZWZhdWx0IgorRVhUUkFfT0VDT05GX2FwcGVuZF9hcm0gPSAiIC0tZW5hYmxlLWZwbT1hcm0iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyMJZGFtbiBwaWNreSBhdXRvbWFrZS4uLgorCXRvdWNoIE5FV1MgQVVUSE9SUyBDaGFuZ2VMb2cKK30KKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9nZy9saWJvZ2dfMS4zLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9nZy9saWJvZ2dfMS4zLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE0MmUwZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib2dnL2xpYm9nZ18xLjMuMi5iYgpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIk9nZyBiaXRzdHJlYW0gYW5kIGZyYW1pbmcgbGliYXJ5IgorREVTQ1JJUFRJT04gPSAibGlib2dnIGlzIHRoZSBiaXRzdHJlYW0gYW5kIGZyYW1pbmcgbGlicmFyeSBcCitmb3IgdGhlIE9nZyBwcm9qZWN0LiBJdCBwcm92aWRlcyBmdW5jdGlvbnMgd2hpY2ggYXJlIFwKK25lY2Vzc2FyeSB0byBjb2RlYyBsaWJyYXJpZXMgbGlrZSBsaWJ2b3JiaXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3hpcGgub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly90cmFjLnhpcGgub3JnL25ld3RpY2tldCIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZGIxYjdhNjY4YjJhNmY0N2IyYWY4OGZiMDA4YWQ1NTUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9vZ2cvb2dnLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xMTttZDU9ZWRhODEyODU2ZjEzYTNiMTMyNmViOGYwMjBjYzNiMGIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy54aXBoLm9yZy9yZWxlYXNlcy9vZ2cvJHtCUH0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNWMzYTM0MzA5ZDhiOTg2NDA4MjdlNWQwOTkxYTQwMTUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2Y2ODdjY2RkNWFjOGI1MmQ3NjMyOGZiYmZlYmM3MGM0NTlhNDBlYTg5MWRiZjNkY2NiNzRhMjEwODI2ZTc5YiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL2NvbmZpZ3VyZS1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL2NvbmZpZ3VyZS1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc2ZTgwZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvY29uZmlndXJlLWZpeC5wYXRjaApAQCAtMCwwICsxLDU4IEBACitUbyBlbmFibGUgLS1kaXNhYmxlLVdlcnJvciBmb3IgbGlib214aWwgdG8gYXZvaWQgc29tZSBjb21waWxlcnMgd2hpY2ggY2hlY2sgY29kZSBzdHJpY3RseS4KKworRm9yIGV4YW1wbGUsIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgZXJyb3JzIGhhcHBlbmVkIHRvIHNvbWUgY29tcGlsZXJzOgorCisxKSBPTVhfSU5ERVhUWVBFIGluIGluY2x1ZGUvT01YX0luZGV4LmggSVMgTk9UIE9NWF9JTkRFWFZFTkRPUlRZUEUgaW4gc3JjL2Jhc2Uvb214X2Jhc2VfY29tcG9uZW50LmgKK3wgaTU4Ni1wb2t5LWxpbnV4LWxpYnRvb2w6IGNvbXBpbGU6ICBpNTg2LXBva3ktbGludXgtZ2NjIC1tMzIgLW1hcmNoPWk1ODYgLS1zeXNyb290PS9ob21lL3lvY3RvLWJ1aWxkNS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy9xZW11eDg2IC1ESEFWRV9DbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzIC1XYWxsIC1XZXJyb3IgLURDT05GSUdfREVCVUdfTEVWRUw9MCAtYyBPTVhDb21wb25lbnRSTUV4dC5jICAtZlBJQyAtRFBJQyAtbyAubGlicy9saWJvbXhiYXNlX2xhLU9NWENvbXBvbmVudFJNRXh0Lm8KK3wgb214X2Jhc2VfY29tcG9uZW50LmM6IEluIGZ1bmN0aW9uICdvbXhfYmFzZV9jb21wb25lbnRfR2V0UGFyYW1ldGVyJzoKK3wgb214X2Jhc2VfY29tcG9uZW50LmM6OTkxOjM6IGVycm9yOiBjYXNlIHZhbHVlICcyMTMwNzA2NDM1JyBub3QgaW4gZW51bWVyYXRlZCB0eXBlICdPTVhfSU5ERVhUWVBFJyBbLVdlcnJvcj1zd2l0Y2hdCit8IG9teF9iYXNlX2NvbXBvbmVudC5jOjkxODozOiBlcnJvcjogY2FzZSB2YWx1ZSAnMjEzMDcwNjQzNicgbm90IGluIGVudW1lcmF0ZWQgdHlwZSAnT01YX0lOREVYVFlQRScgWy1XZXJyb3I9c3dpdGNoXQorCisyKQorfCBpNTg2LXBva3ktbGludXgtZ2NjICAtbTMyICAgLW1hcmNoPWk1ODYgLS1zeXNyb290PS9ob21lL3lvY3RvLWJ1aWxkNS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy9xZW11eDg2IC1ESEFWRV9DT05GSUdfSCAtSS4gLUkuLiAgICAtRE9NWElMQ09NUE9taW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzIC1XYWxsIC1XZXJyb3IgLURDT05GSUdfREVCVUdfTEVWRUw9MCAtYyAtbyBvbXhyZWdpc3Rlcl9iZWxsYWdpby1vbXhyZWdpc3Rlci5vIGB0ZXN0IC1mICdvbXhyZWdpc3Rlci5jJyB8fCBlY2hvICcuLydgbworfCBvbXhyZWdpc3Rlci5jOiBJbiBmdW5jdGlvbiAnYnVpbGRDb21wb25lbnRzTGlzdCc6Cit8IG9teHJlZ2lzdGVyLmM6MTc1Ojc6IGVycm9yOiB2YXJpYWJsZSAnZXJyJyBzZXQgYnV0IG5vdCB1c2VkIFstV2Vycm9yPXVudXNlZC1idXQtc2V0LXZhcmlhYmxlXQorfCBjYzE6IGFsbCB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorCitkaWZmIC1yIDgyZDc0MmQzZWE5MCBjb25maWd1cmUuYWMKKy0tLSBhL2NvbmZpZ3VyZS5hYwlUdWUgRGVjIDI3IDE1OjMwOjM1IDIwMTEgKzA4MDAKKysrKyBiL2NvbmZpZ3VyZS5hYwlUdWUgRGVjIDI3IDE2OjI2OjAzIDIwMTEgKzA4MDAKK0BAIC01LDcgKzUsNyBAQAorIEFDX1BSRVJFUShbMi41OV0pCisgCisgQUNfQ09ORklHX0hFQURFUlMoW2NvbmZpZy5oXSkKKy1DRkxBR1M9IiR7Q0ZMQUdTfSAtV2FsbCAtV2Vycm9yIgorK0NGTEFHUz0iJHtDRkxBR1N9IC1XYWxsIgorIAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgIyBTZXQgdGhlIHNoYXJlZCB2ZXJzaW9uaW5nIGluZm8sIGFjY29yZGluZyB0byBzZWN0aW9uIDYuMyBvZiB0aGUgbGlidG9vbCBpbmZvICMKK0BAIC0xMjIsNiArMTIyLDE0IEBACisgICAgIFt3aXRoX2FuZHJvaWQ9JGVuYWJsZXZhbF0sCisgICAgIFt3aXRoX2FuZHJvaWQ9bm9dKQorIAorK0FDX0FSR19FTkFCTEUoCisrICAgIFtXZXJyb3JdLAorKyAgICBbQUNfSEVMUF9TVFJJTkcoCisrICAgICAgICBbLS1kaXNhYmxlLVdlcnJvcl0sCisrICAgICAgICBbd2hldGhlciB0byBkaWFibGUgdHJlYXRpbmcgZ2NjIHdhcm5pbmdzIGFzIGVycm9yc10pXSwKKysgICAgW3dpdGhfV2Vycm9yPSRlbmFibGV2YWxdLAorKyAgICBbd2l0aF9XZXJyb3I9eWVzXSkKKysKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICMgQ2hlY2sgZm9yIHByb2dyYW1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0BAIC0xOTMsNiArMjAxLDEwIEBACisgIENGR19ERUJVR19MRVZFTD0yNTUKKyBmaQorIAorK2lmIHRlc3QgIngkd2l0aF9XZXJyb3IiID0gInh5ZXMiOyB0aGVuCisrIENGTEFHUz0iJHtDRkxBR1N9IC1XZXJyb3IiCisrZmkKKysKKyBBQ19TVUJTVChDRkdfREVCVUdfTEVWRUwpCisgQ0ZMQUdTPSIke0NGTEFHU30gLURDT05GSUdfREVCVUdfTEVWRUw9JENGR19ERUJVR19MRVZFTCIKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvZGlzYWJsZS1zby12ZXJzaW9uaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9kaXNhYmxlLXNvLXZlcnNpb25pbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQwOGU0YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvZGlzYWJsZS1zby12ZXJzaW9uaW5nLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0Rpc2FibGUgc28gdmVyc2lvbmluZyBzaW5jZSB0aGV5IGFyZSByZWFsbHkgbm90IGEgdmVyc2lvbmVkIHNoYXJlZCBsaWIuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIEAgaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9vbXhpbC9idWdzLzU5LworCitTaWduZWQtb2ZmLWJ5OiBEcmV3IE1vc2VsZXkgPGRyZXdfbW9zZWxleUBtZW50b3IuY29tPgorCitkaWZmIC1ydWIgbGlib214aWwtYmVsbGFnaW8tMC45LjMtb3JpZy9zcmMvY29tcG9uZW50cy9hdWRpb19lZmZlY3RzL01ha2VmaWxlLmFtIGxpYm9teGlsLWJlbGxhZ2lvLTAuOS4zL3NyYy9jb21wb25lbnRzL2F1ZGlvX2VmZmVjdHMvTWFrZWZpbGUuYW0KKy0tLSBsaWJvbXhpbC1iZWxsYWdpby0wLjkuMy1vcmlnL3NyYy9jb21wb25lbnRzL2F1ZGlvX2VmZmVjdHMvTWFrZWZpbGUuYW0JMjAxNC0wNy0yMCAxNToyMjowMC44NTg0MjUyMzQgLTA0MDAKKysrKyBsaWJvbXhpbC1iZWxsYWdpby0wLjkuMy9zcmMvY29tcG9uZW50cy9hdWRpb19lZmZlY3RzL01ha2VmaWxlLmFtCTIwMTQtMDctMjAgMTU6MjU6NDIuNjg3NTI1MjI1IC0wNDAwCitAQCAtMTAsNCArMTAsNSBAQAorIGxpYm9teGF1ZGlvX2VmZmVjdHNfbGFfQ0ZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgXAorIAkJCQktSSQodG9wX3NyY2Rpcikvc3JjIFwKKyAJCQkJLUkkKHRvcF9zcmNkaXIpL3NyYy9iYXNlCisrbGlib214YXVkaW9fZWZmZWN0c19sYV9MREZMQUdTID0gLWF2b2lkLXZlcnNpb24KKyAKK2RpZmYgLXJ1YiBsaWJvbXhpbC1iZWxsYWdpby0wLjkuMy1vcmlnL3NyYy9jb21wb25lbnRzL2Nsb2Nrc3JjL01ha2VmaWxlLmFtIGxpYm9teGlsLWJlbGxhZ2lvLTAuOS4zL3NyYy9jb21wb25lbnRzL2Nsb2Nrc3JjL01ha2VmaWxlLmFtCistLS0gbGlib214aWwtYmVsbGFnaW8tMC45LjMtb3JpZy9zcmMvY29tcG9uZW50cy9jbG9ja3NyYy9NYWtlZmlsZS5hbQkyMDE0LTA3LTIwIDE1OjIyOjAwLjg1ODQyNTIzNCAtMDQwMAorKysrIGxpYm9teGlsLWJlbGxhZ2lvLTAuOS4zL3NyYy9jb21wb25lbnRzL2Nsb2Nrc3JjL01ha2VmaWxlLmFtCTIwMTQtMDctMjAgMTU6MjQ6NDkuMTUxMjU5NzUzIC0wNDAwCitAQCAtMTAsNCArMTAsNCBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL3NyYyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSSQodG9wX3NyY2Rpcikvc3JjL2Jhc2UKKy0KKytsaWJvbXhjbG9ja3NyY19sYV9MREZMQUdTID0gLWF2b2lkLXZlcnNpb24KK2RpZmYgLXJ1YiBsaWJvbXhpbC1iZWxsYWdpby0wLjkuMy1vcmlnL3NyYy9jb21wb25lbnRzL3ZpZGVvc2NoZWR1bGVyL01ha2VmaWxlLmFtIGxpYm9teGlsLWJlbGxhZ2lvLTAuOS4zL3NyYy9jb21wb25lbnRzL3ZpZGVvc2NoZWR1bGVyL01ha2VmaWxlLmFtCistLS0gbGlib214aWwtYmVsbGFnaW8tMC45LjMtb3JpZy9zcmMvY29tcG9uZW50cy92aWRlb3NjaGVkdWxlci9NYWtlZmlsZS5hbQkyMDE0LTA3LTIwIDE1OjIyOjAwLjg2MjQyNTI1NCAtMDQwMAorKysrIGxpYm9teGlsLWJlbGxhZ2lvLTAuOS4zL3NyYy9jb21wb25lbnRzL3ZpZGVvc2NoZWR1bGVyL01ha2VmaWxlLmFtCTIwMTQtMDctMjAgMTU6MjI6MzYuNDYyNjAxNzg2IC0wNDAwCitAQCAtNiw3ICs2LDcgQEAKKyAJCQkJCQkJCWxpYnJhcnlfZW50cnlfcG9pbnQuYworIAorIGxpYm9teHZpZGVvc2NoZWRfbGFfTElCQUREID0gJCh0b3BfYnVpbGRkaXIpL3NyYy9saWJvbXhpbC1iZWxsYWdpby5sYQorLWxpYm9teHZpZGVvc2NoZWRfbGFfTERGTEFHUyA9IAorK2xpYm9teHZpZGVvc2NoZWRfbGFfTERGTEFHUyA9IC1hdm9pZC12ZXJzaW9uCisgbGlib214dmlkZW9zY2hlZF9sYV9DRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSBcCisgCQkJLUkkKHRvcF9zcmNkaXIpL3NyYyBcCisgCQkJLUkkKHRvcF9zcmNkaXIpL3NyYy9iYXNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL2R5bmFtaWNsb2FkZXItbGlua2luZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvZHluYW1pY2xvYWRlci1saW5raW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Nzk1M2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL2R5bmFtaWNsb2FkZXItbGlua2luZy5wYXRjaApAQCAtMCwwICsxLDIwIEBACitUaGlzIHBhdGNoIGZpeGVzIGxpbmsgaXNzdWUgd2hlbiBsaWJvbXhkeW5hbWljbG9hZGVyLnNvIGlzIGxvYWRlZCA6CitNaXNzaW5nIHN5bWJvbCBSTV9EZWluaXQuCisKK1RoaXMgcGF0Y2ggY29tZXMgZnJvbSAiaHR0cDovL3BrZ3MuZmVkb3JhcHJvamVjdC5vcmcvY2dpdC9saWJvbXhpbC1iZWxsYWdpby5naXQvY29tbWl0Lz9oPWYxNyZpZD00OTk2YTk1ODI4OTQzZDM0NWU1MWRlZDY4NzZjMzEwMzY1M2VlY2Y4IgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU8OpYmFzdGllbiBNZW5uZXRyaWVyIDxzLm1lbm5ldHJpZXJAaW5ub3Rpcy5vcmc+CisKKy0tLSBhL3NyYy9keW5hbWljX2xvYWRlci9NYWtlZmlsZS5hbQkyMDE0LTAyLTI1IDE1OjI5OjEwLjEyODU0OTYzNiArMDEwMAorKysrIGIvc3JjL2R5bmFtaWNfbG9hZGVyL01ha2VmaWxlLmFtCTIwMTQtMDItMjUgMTU6MzA6MTUuNzU2NTQ4ODA4ICswMTAwCitAQCAtMyw3ICszLDcgQEAKKyBvbXhkeW5hbWljbG9hZGVyX0xUTElCUkFSSUVTID0gbGlib214ZHluYW1pY2xvYWRlci5sYQorIGxpYm9teGR5bmFtaWNsb2FkZXJfbGFfU09VUkNFUyA9IHN0ZV9keW5hbWljX2NvbXBvbmVudF9sb2FkZXIuYyBzdGVfZHluYW1pY19jb21wb25lbnRfbG9hZGVyLmgKKyAKKy1saWJvbXhkeW5hbWljbG9hZGVyX2xhX0xERkxBR1MgPQorK2xpYm9teGR5bmFtaWNsb2FkZXJfbGFfTERGTEFHUyA9IC1sb214aWwtYmVsbGFnaW8gLUwkKHRvcF9idWlsZGRpcikvc3JjLy5saWJzCisgbGlib214ZHluYW1pY2xvYWRlcl9sYV9DRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSBcCisgCQkJLUkkKHRvcF9zcmNkaXIpL3NyYyBcCisgCQkJLUkkKHRvcF9zcmNkaXIpL3NyYy9iYXNlIFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvbWFrZWZpbGUtZG9jZGlyLWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvbWFrZWZpbGUtZG9jZGlyLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmU4YzQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9tYWtlZmlsZS1kb2NkaXItZml4LnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1RoaXMgcGF0Y2ggaXMgdG8gcmVtb3ZlIERFU1RESVIgaW4gZG9jZGlyLgorT3RoZXJ3aXNlLCB3aGVuIHVzZXJzIGluc3RhbGwgYnkgcnVubmluZyBgbWFrZSBpbnN0YWxsIERFU1RESVI9L2FsdGVybmF0ZS9kaXJlY3RvcnknIHNwZWNpZmllZCBpbiB0aGUgZmlsZSBJTlNUQUxMLCB0aGUgZG9jIHdpbGwgZ28gaW50byAvYWx0ZXJuYXRlL2RpcmVjdG9yeS9hbHRlcm5hdGUvZGlyZWN0b3J5LCB3aGljaCBpcyBub3QgZXhwZWN0ZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKworZGlmZiAtciAzMGI1OTdlNGU3MGQgTWFrZWZpbGUuYW0KKy0tLSBhL01ha2VmaWxlLmFtCVdlZCBEZWMgMjggMTU6Mzg6MzUgMjAxMSArMDgwMAorKysrIGIvTWFrZWZpbGUuYW0JV2VkIERlYyAyOCAxNTozOToyNSAyMDExICswODAwCitAQCAtNyw3ICs3LDcgQEAKKyBwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisgcGtnY29uZmlnX0RBVEEgPSBsaWJvbXhpbC1iZWxsYWdpby5wYworIAorLWRvY2RpciA9ICQoREVTVERJUikkKHByZWZpeCkvc2hhcmUvZG9jL0BQQUNLQUdFQAorK2RvY2RpciA9ICQocHJlZml4KS9zaGFyZS9kb2MvQFBBQ0tBR0VACisgZG9jX0RBVEEgPSBSRUFETUUgXAorIAkgICBDaGFuZ2VMb2cgXAorIAkgICBUT0RPCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL3BhcmFsbGVsLW1ha2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL3BhcmFsbGVsLW1ha2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgzY2ExMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvcGFyYWxsZWwtbWFrZS5wYXRjaApAQCAtMCwwICsxLDE4IEBACitUaGlzIHBhdGNoIGlzIHRvIG1ha2UgbGlib214aWwgTWFrZWZpbGUgc3VwcG9ydCAibWFrZSAtak4iLgorVGhlIG9teHJlZ2lzdGVyX2JlbGxhZ2lvIHN0dWZmcyBkZXBlbmQgb24gbGlib214aWxfYmVsbGFnaW8gbGlicmFyeS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorCitkaWZmIC1yIGY1OWQwNzdkM2RkNSBNYWtlZmlsZS5hbQorLS0tIGEvc3JjL01ha2VmaWxlLmFtCVdlZCBEZWMgMjggMTA6NTQ6MzYgMjAxMSArMDgwMAorKysrIGIvc3JjL01ha2VmaWxlLmFtCVdlZCBEZWMgMjggMTA6NTU6NDYgMjAxMSArMDgwMAorQEAgLTcsNiArNyw3IEBACisgb214cmVnaXN0ZXJfYmVsbGFnaW9fU09VUkNFUyA9IG9teHJlZ2lzdGVyLmMgY29tbW9uLmMgY29tbW9uLmgKKyBvbXhyZWdpc3Rlcl9iZWxsYWdpb19DRkxBR1MgPSAtRE9NWElMQ09NUE9ORU5UU1BBVEg9XCIkKHBsdWdpbmRpcikvXCIgXAorIAkJCSAgICAgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlCisrb214cmVnaXN0ZXJfYmVsbGFnaW9fTERBREQgPSAkKGxpYl9MVExJQlJBUklFUykKKyBvbXhyZWdpc3Rlcl9iZWxsYWdpb19MREZMQUdTID0gLWxvbXhpbC1iZWxsYWdpbyAtTCQoYnVpbGRkaXIpCisgCisgbGliX0xUTElCUkFSSUVTID0gbGlib214aWwtYmVsbGFnaW8ubGEKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWxfMC45LjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsXzAuOS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZDZkZjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsXzAuOS4zLmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiQmVsbGFnaW8gT3Blbk1BWCBJbnRlZ3JhdGlvbiBMYXllciAoSUwpIgorREVTQ1JJUFRJT04gPSAiQmVsbGFnaW8gaXMgYW4gb3BlbnNvdXJjZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgS2hyb25vcyBPcGVuTUFYIFwKKyAgICAgICAgICAgICAgIEludGVncmF0aW9uIExheWVyIEFQSSB0byBhY2Nlc3MgbXVsdGltZWRpYSBjb21wb25lbnRzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9vbXhpbC5zb3VyY2Vmb3JnZS5uZXQvIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK0xJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWFlNmYwZjRkYmM3YWMxOTNiNTBmMzIzYTZhZTE5MWNiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9vbXhjb3JlLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yNzttZDU9ODA2YjFlNTU2NmMwNjQ4NmZlOGU0MmI0NjFlMDNhOTAiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L29teGlsL2xpYm9teGlsLWJlbGxhZ2lvLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUtZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BhcmFsbGVsLW1ha2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFrZWZpbGUtZG9jZGlyLWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9keW5hbWljbG9hZGVyLWxpbmtpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZS1zby12ZXJzaW9uaW5nLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTFkZTgyN2ZkYjc1YzAyYzg0ZTU1Zjc0MGNhMjdjYjgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTkzYzA3MjljOGVmOGMxNDY3YjNiZmVmY2YzNTVlYzE5YTQ2ZGQ5MmUzMWJmYzI4MGUxN2Q5NmIwOTM0ZDc0YyIKKworUyA9ICIke1dPUktESVJ9LyR7QlBOfS1iZWxsYWdpby0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtZG9jIC0tZGlzYWJsZS1XZXJyb3IiCisKKyMKKyMgVGhlIC5zbyBmaWxlcyB1bmRlciAke2xpYmRpcn0vYmVsbGFnaW8gYXJlIG5vdCBpbnRlbmRlZCB0byBiZSB2ZXJzaW9uZWQgYW5kIHN5bWxpbmtlZC4KKyMgTWFrZSBzdXJlIHRoZXkgZ2V0IHBhY2thZ2VkIGluIHRoZSBtYWluIHBhY2thZ2UuCisjCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2JlbGxhZ2lvLyouc28gXAorICAgICAgICAgICAgICAgICR7bGliZGlyfS9vbXhsb2FkZXJzLyoke1NPTElCU30iCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9iZWxsYWdpby8qLmEgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vb214bG9hZGVycy8qLmEiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9iZWxsYWdpby8qLmxhIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L29teGxvYWRlcnMvKi5sYSBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9vbXhsb2FkZXJzLyoke1NPTElCU0RFVn0iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9iZWxsYWdpby8uZGVidWcvIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L29teGxvYWRlcnMvLmRlYnVnLyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlicG5nL2xpYnBuZ18xLjYuMTcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnBuZy9saWJwbmdfMS42LjE3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZTU4MDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnBuZy9saWJwbmdfMS42LjE3LmJiCkBAIC0wLDAgKzEsMjcgQEAKK1NVTU1BUlkgPSAiUE5HIGltYWdlIGZvcm1hdCBkZWNvZGluZyBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5saWJwbmcub3JnLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTGlicG5nIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9YjliNzUzOTliNzJlNGE4NjU2Y2YzYTZkZGZjODZkOWEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcG5nLmg7ZW5kbGluZT0xNjttZDU9Y2M5YzJkMWVhZmRhMTdlMTI3N2E2Zjk5YTlmYzI5YzQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcG5nLmg7YmVnaW5saW5lPTI0MjtlbmRsaW5lPTM1NjttZDU9NTk5MzE2ODE5ZDUyNWRkZTJiZmRmMjhmZTNmMzIzYWYiCitERVBFTkRTID0gInpsaWIiCitMSUJWID0gIjE2IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wcm9qZWN0L2xpYnBuZy9saWJwbmcke0xJQlZ9LyR7UFZ9L2xpYnBuZy0ke1BWfS50YXIueHogXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI0MzBhOWI3NmI3ODUzMzIzNWNkNGI5YjI2Y2U3NWM3ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ODUwN2I1NWZiZTVjZDQzYzUxOTgxZjI5MjRlNDY3MWZkODFmZTM1ZDUyZGM1MzM1N2UyMGYyYzc3ZmE1ZGZkIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2xpYnBuZy1jb25maWcgJHtiaW5kaXJ9L2xpYnBuZzE2LWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZworCisjIFdvcmsgYXJvdW5kIG1pc3Npbmcgc3ltYm9scworRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm5lb24iLCAiLS1lbmFibGUtYXJtLW5lb249b24iLCAiLS1lbmFibGUtYXJtLW5lb249b2ZmIiAsZCl9IgorCitQQUNLQUdFUyA9KyAiJHtQTn0tdG9vbHMiCisKK0ZJTEVTXyR7UE59LXRvb2xzID0gIiR7YmluZGlyfS9wbmctZml4LWl0eHQgJHtiaW5kaXJ9L3BuZ2ZpeCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzYW1wbGVyYXRlL2xpYnNhbXBsZXJhdGUwXzAuMS44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzYW1wbGVyYXRlL2xpYnNhbXBsZXJhdGUwXzAuMS44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNjkzNWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNhbXBsZXJhdGUvbGlic2FtcGxlcmF0ZTBfMC4xLjguYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJBdWRpbyBTYW1wbGUgUmF0ZSBDb252ZXJzaW9uIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1lZ2EtbmVyZC5jb20vU1JDLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3NhbXBsZXJhdGUuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTE3O21kNT1kMDgwN2MzNWZjOTA2NDY2ZDI0YTUwNDYzNTM0ODE1YSIKK0RFUEVORFMgPSAiZmxhYyBsaWJzbmRmaWxlMSIKK1BSID0gInIxIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubWVnYS1uZXJkLmNvbS9TUkMvbGlic2FtcGxlcmF0ZS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxYzdmYjI1MTkxYjRlNmUzNjI4ZDE5OGE2NmE4NGY0NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5M2I1NGJkZjQ2ZDVlNmQyMzU0YjcwMzQzOTVmZTMyOWMyMjJhOTY2NzkwZGUzNDUyMDcwMmJiOTY0MmYxYzA2IgorUyA9ICIke1dPUktESVJ9L2xpYnNhbXBsZXJhdGUtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHW2ZmdHddID0gIiwtLWRpc2FibGUtZmZ0dyxmZnR3IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzbmRmaWxlL2ZpbGVzLzAwMDEtc3JjLXNkMi5jLUZpeC1zZWdmYXVsdC1pbi1TRDItUlNSQy1wYXJzZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvZmlsZXMvMDAwMS1zcmMtc2QyLmMtRml4LXNlZ2ZhdWx0LWluLVNEMi1SU1JDLXBhcnNlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDQ4NzEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzbmRmaWxlL2ZpbGVzLzAwMDEtc3JjLXNkMi5jLUZpeC1zZWdmYXVsdC1pbi1TRDItUlNSQy1wYXJzZXIucGF0Y2gKQEAgLTAsMCArMSwyMTEgQEAKK0Zyb20gOTM0MWU5YzZlNzBjZDNhZDc2YzkwMWMzY2YwNTJkNGNiNTJmZDgyNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEVyaWsgZGUgQ2FzdHJvIExvcG8gPGVyaWtkQG1lZ2EtbmVyZC5jb20+CitEYXRlOiBUaHUsIDI3IEp1biAyMDEzIDE4OjA0OjAzICsxMDAwCitTdWJqZWN0OiBbUEFUQ0hdIHNyYy9zZDIuYyA6IEZpeCBzZWdmYXVsdCBpbiBTRDIgUlNSQyBwYXJzZXIuCisKKyhVcHN0cmVhbSBjb21taXQgOTM0MWU5YzZlNzBjZDNhZDc2YzkwMWMzY2YwNTJkNGNiNTJmZDgyNykKKworQSBzcGVjaWFsbHkgY3JhZnRlZCByZXNvdXJjZSBmb3JrIGZvciBhbiBTRDIgZmlsZSBjYW4gY2F1c2UKK3RoZSBTRDIgUlNSQyBwYXJzZXIgdG8gcmVhZCBkYXRhIGZyb20gb3V0c2lkZSBhIGR5bmFtaWNhbGx5CitkZWZpbmVkIGJ1ZmZlci4gVGhlIGRhdGEgdGhhdCBpcyByZWFkIGlzIGNvbnZlcnRlZCBpbnRvIGEKK3Nob3J0IG9yIGludCBhbmQgdXNlZCBkdXJpbmcgZnVydGhlciBwcm9jZXNzaW5nLgorCitTaW5jZSBubyB3cml0ZSBvY2N1cnMsIHRoaXMgaXMgdW5saWtlbHkgdG8gYmUgZXhwbG9pdGFibGUuCisKK0J1ZyByZXBvcnRlZCBieSBUaGUgTWF5aGVtIFRlYW0gZnJvbSBDeWxhYiwgQ2FybmVnaWUgTWVsbG9uCitVbml2ZXJpc3R5LiBQYXBlciBpczoKK2h0dHA6Ly91c2Vycy5lY2UuY211LmVkdS9+YXJlYmVydC9wYXBlcnMvbWF5aGVtLW9ha2xhbmQtMTIucGRmCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogWXVlIFRhbyA8eXVlLnRhb0B3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL3NkMi5jIHwgICA5MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDU1IGluc2VydGlvbnMoKyksIDM4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3NkMi5jIGIvc3JjL3NkMi5jCitpbmRleCAzNWNlMzZiLi42YmUxNTBjIDEwMDY0NAorLS0tIGEvc3JjL3NkMi5jCisrKysgYi9zcmMvc2QyLmMKK0BAIC0xLDUgKzEsNSBAQAorIC8qCistKiogQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgRXJpayBkZSBDYXN0cm8gTG9wbyA8ZXJpa2RAbWVnYS1uZXJkLmNvbT4KKysqKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBFcmlrIGRlIENhc3RybyBMb3BvIDxlcmlrZEBtZWdhLW5lcmQuY29tPgorICoqIENvcHlyaWdodCAoQykgMjAwNCBQYWF2byBKdW1wcGFuZW4KKyAqKgorICoqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitAQCAtMzcxLDQ0ICszNzEsNjEgQEAgc2QyX3dyaXRlX3JzcmNfZm9yayAoU0ZfUFJJVkFURSAqcHNmLCBpbnQgVU5VU0VEIChjYWxjX2xlbmd0aCkpCisgKi8KKyAKKyBzdGF0aWMgaW5saW5lIGludAorLXJlYWRfY2hhciAoY29uc3QgdW5zaWduZWQgY2hhciAqIGRhdGEsIGludCBvZmZzZXQpCistewlyZXR1cm4gZGF0YSBbb2Zmc2V0XSA7CistfSAvKiByZWFkX2NoYXIgKi8KKytyZWFkX3JzcmNfY2hhciAoY29uc3QgU0QyX1JTUkMgKnByc3JjLCBpbnQgb2Zmc2V0KQorK3sJY29uc3QgdW5zaWduZWQgY2hhciAqIGRhdGEgPSBwcnNyYy0+cnNyY19kYXRhIDsKKysJaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID49IHByc3JjLT5yc3JjX2xlbikKKysJCXJldHVybiAwIDsKKysJcmV0dXJuIGRhdGEgW29mZnNldF0gOworK30gLyogcmVhZF9yc3JjX2NoYXIgKi8KKyAKKyBzdGF0aWMgaW5saW5lIGludAorLXJlYWRfc2hvcnQgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBkYXRhLCBpbnQgb2Zmc2V0KQorLXsJcmV0dXJuIChkYXRhIFtvZmZzZXRdIDw8IDgpICsgZGF0YSBbb2Zmc2V0ICsgMV0gOworLX0gLyogcmVhZF9zaG9ydCAqLworK3JlYWRfcnNyY19zaG9ydCAoY29uc3QgU0QyX1JTUkMgKnByc3JjLCBpbnQgb2Zmc2V0KQorK3sJY29uc3QgdW5zaWduZWQgY2hhciAqIGRhdGEgPSBwcnNyYy0+cnNyY19kYXRhIDsKKysJaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ICsgMSA+PSBwcnNyYy0+cnNyY19sZW4pCisrCQlyZXR1cm4gMCA7CisrCXJldHVybiAoZGF0YSBbb2Zmc2V0XSA8PCA4KSArIGRhdGEgW29mZnNldCArIDFdIDsKKyt9IC8qIHJlYWRfcnNyY19zaG9ydCAqLworIAorIHN0YXRpYyBpbmxpbmUgaW50CistcmVhZF9pbnQgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBkYXRhLCBpbnQgb2Zmc2V0KQorLXsJcmV0dXJuIChkYXRhIFtvZmZzZXRdIDw8IDI0KSArIChkYXRhIFtvZmZzZXQgKyAxXSA8PCAxNikgKyAoZGF0YSBbb2Zmc2V0ICsgMl0gPDwgOCkgKyBkYXRhIFtvZmZzZXQgKyAzXSA7CistfSAvKiByZWFkX2ludCAqLworK3JlYWRfcnNyY19pbnQgKGNvbnN0IFNEMl9SU1JDICpwcnNyYywgaW50IG9mZnNldCkKKyt7CWNvbnN0IHVuc2lnbmVkIGNoYXIgKiBkYXRhID0gcHJzcmMtPnJzcmNfZGF0YSA7CisrCWlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCArIDMgPj0gcHJzcmMtPnJzcmNfbGVuKQorKwkJcmV0dXJuIDAgOworKwlyZXR1cm4gKGRhdGEgW29mZnNldF0gPDwgMjQpICsgKGRhdGEgW29mZnNldCArIDFdIDw8IDE2KSArIChkYXRhIFtvZmZzZXQgKyAyXSA8PCA4KSArIGRhdGEgW29mZnNldCArIDNdIDsKKyt9IC8qIHJlYWRfcnNyY19pbnQgKi8KKyAKKyBzdGF0aWMgaW5saW5lIGludAorLXJlYWRfbWFya2VyIChjb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSwgaW50IG9mZnNldCkKKy17CisrcmVhZF9yc3JjX21hcmtlciAoY29uc3QgU0QyX1JTUkMgKnByc3JjLCBpbnQgb2Zmc2V0KQorK3sJY29uc3QgdW5zaWduZWQgY2hhciAqIGRhdGEgPSBwcnNyYy0+cnNyY19kYXRhIDsKKysKKysJaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ICsgMyA+PSBwcnNyYy0+cnNyY19sZW4pCisrCQlyZXR1cm4gMCA7CisrCisgCWlmIChDUFVfSVNfQklHX0VORElBTikKKyAJCXJldHVybiAoZGF0YSBbb2Zmc2V0XSA8PCAyNCkgKyAoZGF0YSBbb2Zmc2V0ICsgMV0gPDwgMTYpICsgKGRhdGEgW29mZnNldCArIDJdIDw8IDgpICsgZGF0YSBbb2Zmc2V0ICsgM10gOworLQllbHNlIGlmIChDUFVfSVNfTElUVExFX0VORElBTikKKysJaWYgKENQVV9JU19MSVRUTEVfRU5ESUFOKQorIAkJcmV0dXJuIGRhdGEgW29mZnNldF0gKyAoZGF0YSBbb2Zmc2V0ICsgMV0gPDwgOCkgKyAoZGF0YSBbb2Zmc2V0ICsgMl0gPDwgMTYpICsgKGRhdGEgW29mZnNldCArIDNdIDw8IDI0KSA7CistCWVsc2UKKy0JCXJldHVybiAweDY2NiA7CistfSAvKiByZWFkX21hcmtlciAqLworKworKwlyZXR1cm4gMCA7CisrfSAvKiByZWFkX3JzcmNfbWFya2VyICovCisgCisgc3RhdGljIHZvaWQKKy1yZWFkX3N0ciAoY29uc3QgdW5zaWduZWQgY2hhciAqIGRhdGEsIGludCBvZmZzZXQsIGNoYXIgKiBidWZmZXIsIGludCBidWZmZXJfbGVuKQorLXsJaW50IGsgOworK3JlYWRfcnNyY19zdHIgKGNvbnN0IFNEMl9SU1JDICpwcnNyYywgaW50IG9mZnNldCwgY2hhciAqIGJ1ZmZlciwgaW50IGJ1ZmZlcl9sZW4pCisrewljb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSA9IHByc3JjLT5yc3JjX2RhdGEgOworKwlpbnQgayA7CisgCisgCW1lbXNldCAoYnVmZmVyLCAwLCBidWZmZXJfbGVuKSA7CisgCisrCWlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCArIGJ1ZmZlcl9sZW4gPj0gcHJzcmMtPnJzcmNfbGVuKQorKwkJcmV0dXJuIDsKKysKKyAJZm9yIChrID0gMCA7IGsgPCBidWZmZXJfbGVuIC0gMSA7IGsrKykKKyAJewlpZiAocHNmX2lzcHJpbnQgKGRhdGEgW29mZnNldCArIGtdKSA9PSAwKQorIAkJCXJldHVybiA7CisgCQlidWZmZXIgW2tdID0gZGF0YSBbb2Zmc2V0ICsga10gOworIAkJfSA7CisgCXJldHVybiA7CistfSAvKiByZWFkX3N0ciAqLworK30gLyogcmVhZF9yc3JjX3N0ciAqLworIAorIHN0YXRpYyBpbnQKKyBzZDJfcGFyc2VfcnNyY19mb3JrIChTRl9QUklWQVRFICpwc2YpCitAQCAtNDM1LDE3ICs0NTIsMTcgQEAgc2QyX3BhcnNlX3JzcmNfZm9yayAoU0ZfUFJJVkFURSAqcHNmKQorIAkvKiBSZXNldCB0aGUgaGVhZGVyIHN0b3JhZ2UgYmVjYXVzZSB3ZSBoYXZlIGNoYW5nZWQgdG8gdGhlIHJzcmNkZXMuICovCisgCXBzZi0+aGVhZGluZGV4ID0gcHNmLT5oZWFkZW5kID0gcnNyYy5yc3JjX2xlbiA7CisgCistCXJzcmMuZGF0YV9vZmZzZXQgPSByZWFkX2ludCAocnNyYy5yc3JjX2RhdGEsIDApIDsKKy0JcnNyYy5tYXBfb2Zmc2V0ID0gcmVhZF9pbnQgKHJzcmMucnNyY19kYXRhLCA0KSA7CistCXJzcmMuZGF0YV9sZW5ndGggPSByZWFkX2ludCAocnNyYy5yc3JjX2RhdGEsIDgpIDsKKy0JcnNyYy5tYXBfbGVuZ3RoID0gcmVhZF9pbnQgKHJzcmMucnNyY19kYXRhLCAxMikgOworKwlyc3JjLmRhdGFfb2Zmc2V0ID0gcmVhZF9yc3JjX2ludCAoJnJzcmMsIDApIDsKKysJcnNyYy5tYXBfb2Zmc2V0ID0gcmVhZF9yc3JjX2ludCAoJnJzcmMsIDQpIDsKKysJcnNyYy5kYXRhX2xlbmd0aCA9IHJlYWRfcnNyY19pbnQgKCZyc3JjLCA4KSA7CisrCXJzcmMubWFwX2xlbmd0aCA9IHJlYWRfcnNyY19pbnQgKCZyc3JjLCAxMikgOworIAorIAlpZiAocnNyYy5kYXRhX29mZnNldCA9PSAweDUxNjA3ICYmIHJzcmMubWFwX29mZnNldCA9PSAweDIwMDAwKQorIAl7CXBzZl9sb2dfcHJpbnRmIChwc2YsICJUcnlpbmcgb2Zmc2V0IG9mIDB4NTIgYnl0ZXMuXG4iKSA7CistCQlyc3JjLmRhdGFfb2Zmc2V0ID0gcmVhZF9pbnQgKHJzcmMucnNyY19kYXRhLCAweDUyICsgMCkgKyAweDUyIDsKKy0JCXJzcmMubWFwX29mZnNldCA9IHJlYWRfaW50IChyc3JjLnJzcmNfZGF0YSwgMHg1MiArIDQpICsgMHg1MiA7CistCQlyc3JjLmRhdGFfbGVuZ3RoID0gcmVhZF9pbnQgKHJzcmMucnNyY19kYXRhLCAweDUyICsgOCkgOworLQkJcnNyYy5tYXBfbGVuZ3RoID0gcmVhZF9pbnQgKHJzcmMucnNyY19kYXRhLCAweDUyICsgMTIpIDsKKysJCXJzcmMuZGF0YV9vZmZzZXQgPSByZWFkX3JzcmNfaW50ICgmcnNyYywgMHg1MiArIDApICsgMHg1MiA7CisrCQlyc3JjLm1hcF9vZmZzZXQgPSByZWFkX3JzcmNfaW50ICgmcnNyYywgMHg1MiArIDQpICsgMHg1MiA7CisrCQlyc3JjLmRhdGFfbGVuZ3RoID0gcmVhZF9yc3JjX2ludCAoJnJzcmMsIDB4NTIgKyA4KSA7CisrCQlyc3JjLm1hcF9sZW5ndGggPSByZWFkX3JzcmNfaW50ICgmcnNyYywgMHg1MiArIDEyKSA7CisgCQl9IDsKKyAKKyAJcHNmX2xvZ19wcmludGYgKHBzZiwgIiAgZGF0YSBvZmZzZXQgOiAweCUwNFhcbiAgbWFwICBvZmZzZXQgOiAweCUwNFhcbiIKK0BAIC00ODgsNyArNTA1LDcgQEAgc2QyX3BhcnNlX3JzcmNfZm9yayAoU0ZfUFJJVkFURSAqcHNmKQorIAkJZ290byBwYXJzZV9yc3JjX2ZvcmtfY2xlYW51cCA7CisgCQl9IDsKKyAKKy0JcnNyYy5zdHJpbmdfb2Zmc2V0ID0gcnNyYy5tYXBfb2Zmc2V0ICsgcmVhZF9zaG9ydCAocnNyYy5yc3JjX2RhdGEsIHJzcmMubWFwX29mZnNldCArIDI2KSA7CisrCXJzcmMuc3RyaW5nX29mZnNldCA9IHJzcmMubWFwX29mZnNldCArIHJlYWRfcnNyY19zaG9ydCAoJnJzcmMsIHJzcmMubWFwX29mZnNldCArIDI2KSA7CisgCWlmIChyc3JjLnN0cmluZ19vZmZzZXQgPiByc3JjLnJzcmNfbGVuKQorIAl7CXBzZl9sb2dfcHJpbnRmIChwc2YsICJCYWQgc3RyaW5nIG9mZnNldCAoJWQpLlxuIiwgcnNyYy5zdHJpbmdfb2Zmc2V0KSA7CisgCQllcnJvciA9IFNGRV9TRDJfQkFEX1JTUkMgOworQEAgLTQ5Nyw3ICs1MTQsNyBAQCBzZDJfcGFyc2VfcnNyY19mb3JrIChTRl9QUklWQVRFICpwc2YpCisgCisgCXJzcmMudHlwZV9vZmZzZXQgPSByc3JjLm1hcF9vZmZzZXQgKyAzMCA7CisgCistCXJzcmMudHlwZV9jb3VudCA9IHJlYWRfc2hvcnQgKHJzcmMucnNyY19kYXRhLCByc3JjLm1hcF9vZmZzZXQgKyAyOCkgKyAxIDsKKysJcnNyYy50eXBlX2NvdW50ID0gcmVhZF9yc3JjX3Nob3J0ICgmcnNyYywgcnNyYy5tYXBfb2Zmc2V0ICsgMjgpICsgMSA7CisgCWlmIChyc3JjLnR5cGVfY291bnQgPCAxKQorIAl7CXBzZl9sb2dfcHJpbnRmIChwc2YsICJCYWQgdHlwZSBjb3VudC5cbiIpIDsKKyAJCWVycm9yID0gU0ZFX1NEMl9CQURfUlNSQyA7CitAQCAtNTEzLDExICs1MzAsMTEgQEAgc2QyX3BhcnNlX3JzcmNfZm9yayAoU0ZfUFJJVkFURSAqcHNmKQorIAorIAlyc3JjLnN0cl9pbmRleCA9IC0xIDsKKyAJZm9yIChrID0gMCA7IGsgPCByc3JjLnR5cGVfY291bnQgOyBrICsrKQorLQl7CW1hcmtlciA9IHJlYWRfbWFya2VyIChyc3JjLnJzcmNfZGF0YSwgcnNyYy50eXBlX29mZnNldCArIGsgKiA4KSA7CisrCXsJbWFya2VyID0gcmVhZF9yc3JjX21hcmtlciAoJnJzcmMsIHJzcmMudHlwZV9vZmZzZXQgKyBrICogOCkgOworIAorIAkJaWYgKG1hcmtlciA9PSBTVFJfTUFSS0VSKQorIAkJewlyc3JjLnN0cl9pbmRleCA9IGsgOworLQkJCXJzcmMuc3RyX2NvdW50ID0gcmVhZF9zaG9ydCAocnNyYy5yc3JjX2RhdGEsIHJzcmMudHlwZV9vZmZzZXQgKyBrICogOCArIDQpICsgMSA7CisrCQkJcnNyYy5zdHJfY291bnQgPSByZWFkX3JzcmNfc2hvcnQgKCZyc3JjLCByc3JjLnR5cGVfb2Zmc2V0ICsgayAqIDggKyA0KSArIDEgOworIAkJCWVycm9yID0gcGFyc2Vfc3RyX3JzcmMgKHBzZiwgJnJzcmMpIDsKKyAJCQlnb3RvIHBhcnNlX3JzcmNfZm9ya19jbGVhbnVwIDsKKyAJCQl9IDsKK0BAIC01NDksMjYgKzU2NiwyNiBAQCBwYXJzZV9zdHJfcnNyYyAoU0ZfUFJJVkFURSAqcHNmLCBTRDJfUlNSQyAqIHJzcmMpCisgCWZvciAoayA9IDAgOyBkYXRhX29mZnNldCArIGRhdGFfbGVuIDwgcnNyYy0+cnNyY19sZW4gOyBrKyspCisgCXsJaW50IHNsZW4gOworIAorLQkJc2xlbiA9IHJlYWRfY2hhciAocnNyYy0+cnNyY19kYXRhLCBzdHJfb2Zmc2V0KSA7CistCQlyZWFkX3N0ciAocnNyYy0+cnNyY19kYXRhLCBzdHJfb2Zmc2V0ICsgMSwgbmFtZSwgU0ZfTUlOIChTSUdORURfU0laRU9GIChuYW1lKSwgc2xlbiArIDEpKSA7CisrCQlzbGVuID0gcmVhZF9yc3JjX2NoYXIgKHJzcmMsIHN0cl9vZmZzZXQpIDsKKysJCXJlYWRfcnNyY19zdHIgKHJzcmMsIHN0cl9vZmZzZXQgKyAxLCBuYW1lLCBTRl9NSU4gKFNJR05FRF9TSVpFT0YgKG5hbWUpLCBzbGVuICsgMSkpIDsKKyAJCXN0cl9vZmZzZXQgKz0gc2xlbiArIDEgOworIAorLQkJcnNyY19pZCA9IHJlYWRfc2hvcnQgKHJzcmMtPnJzcmNfZGF0YSwgcnNyYy0+aXRlbV9vZmZzZXQgKyBrICogMTIpIDsKKysJCXJzcmNfaWQgPSByZWFkX3JzcmNfc2hvcnQgKHJzcmMsIHJzcmMtPml0ZW1fb2Zmc2V0ICsgayAqIDEyKSA7CisgCistCQlkYXRhX29mZnNldCA9IHJzcmMtPmRhdGFfb2Zmc2V0ICsgcmVhZF9pbnQgKHJzcmMtPnJzcmNfZGF0YSwgcnNyYy0+aXRlbV9vZmZzZXQgKyBrICogMTIgKyA0KSA7CisrCQlkYXRhX29mZnNldCA9IHJzcmMtPmRhdGFfb2Zmc2V0ICsgcmVhZF9yc3JjX2ludCAocnNyYywgcnNyYy0+aXRlbV9vZmZzZXQgKyBrICogMTIgKyA0KSA7CisgCQlpZiAoZGF0YV9vZmZzZXQgPCAwIHx8IGRhdGFfb2Zmc2V0ID4gcnNyYy0+cnNyY19sZW4pCisgCQl7CXBzZl9sb2dfcHJpbnRmIChwc2YsICJFeGl0aW5nIHBhcnNlciBvbiBkYXRhIG9mZnNldCBvZiAlZC5cbiIsIGRhdGFfb2Zmc2V0KSA7CisgCQkJYnJlYWsgOworIAkJCX0gOworIAorLQkJZGF0YV9sZW4gPSByZWFkX2ludCAocnNyYy0+cnNyY19kYXRhLCBkYXRhX29mZnNldCkgOworKwkJZGF0YV9sZW4gPSByZWFkX3JzcmNfaW50IChyc3JjLCBkYXRhX29mZnNldCkgOworIAkJaWYgKGRhdGFfbGVuIDwgMCB8fCBkYXRhX2xlbiA+IHJzcmMtPnJzcmNfbGVuKQorIAkJewlwc2ZfbG9nX3ByaW50ZiAocHNmLCAiRXhpdGluZyBwYXJzZXIgb24gZGF0YSBsZW5ndGggb2YgJWQuXG4iLCBkYXRhX2xlbikgOworIAkJCWJyZWFrIDsKKyAJCQl9IDsKKyAKKy0JCXNsZW4gPSByZWFkX2NoYXIgKHJzcmMtPnJzcmNfZGF0YSwgZGF0YV9vZmZzZXQgKyA0KSA7CistCQlyZWFkX3N0ciAocnNyYy0+cnNyY19kYXRhLCBkYXRhX29mZnNldCArIDUsIHZhbHVlLCBTRl9NSU4gKFNJR05FRF9TSVpFT0YgKHZhbHVlKSwgc2xlbiArIDEpKSA7CisrCQlzbGVuID0gcmVhZF9yc3JjX2NoYXIgKHJzcmMsIGRhdGFfb2Zmc2V0ICsgNCkgOworKwkJcmVhZF9yc3JjX3N0ciAocnNyYywgZGF0YV9vZmZzZXQgKyA1LCB2YWx1ZSwgU0ZfTUlOIChTSUdORURfU0laRU9GICh2YWx1ZSksIHNsZW4gKyAxKSkgOworIAorIAkJcHNmX2xvZ19wcmludGYgKHBzZiwgIiAgMHglMDR4ICAgICAlNGQgICAgICU0ZCAgICAgJTNkICAgICclcydcbiIsIGRhdGFfb2Zmc2V0LCByc3JjX2lkLCBkYXRhX2xlbiwgc2xlbiwgdmFsdWUpIDsKKyAKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvZmlsZXMvMDAwMS1zcmMtc2QyLmMtRml4LXR3by1wb3RlbnRpYWwtYnVmZmVyLXJlYWQtb3ZlcmZsb3dzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzbmRmaWxlL2ZpbGVzLzAwMDEtc3JjLXNkMi5jLUZpeC10d28tcG90ZW50aWFsLWJ1ZmZlci1yZWFkLW92ZXJmbG93cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTY0NzNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzbmRmaWxlL2ZpbGVzLzAwMDEtc3JjLXNkMi5jLUZpeC10d28tcG90ZW50aWFsLWJ1ZmZlci1yZWFkLW92ZXJmbG93cy5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitGcm9tIGRiZTE0ZjAwMDMwYWY1ZDM1NzdmNGNhYmJmOTg2MWRiNTllOWMzNzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBFcmlrIGRlIENhc3RybyBMb3BvIDxlcmlrZEBtZWdhLW5lcmQuY29tPgorRGF0ZTogVGh1LCAyNSBEZWMgMjAxNCAxOToyMzoxMiArMTEwMAorU3ViamVjdDogW1BBVENIXSBzcmMvc2QyLmMgOiBGaXggdHdvIHBvdGVudGlhbCBidWZmZXIgcmVhZCBvdmVyZmxvd3MuCisKKyhVcHN0cmVhbSBjb21taXQgZGJlMTRmMDAwMzBhZjVkMzU3N2Y0Y2FiYmY5ODYxZGI1OWU5YzM3OCkKKworQ2xvc2VzOiBodHRwczovL2dpdGh1Yi5jb20vZXJpa2QvbGlic25kZmlsZS9pc3N1ZXMvOTMKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBZdWUgVGFvIDx5dWUudGFvQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvc2QyLmMgfCAgIDEyICsrKysrKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCAxMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvc2QyLmMgYi9zcmMvc2QyLmMKK2luZGV4IDBiNGU1YWYuLmE3MGExZjEgMTAwNjQ0CistLS0gYS9zcmMvc2QyLmMKKysrKyBiL3NyYy9zZDIuYworQEAgLTUxNyw2ICs1MTcsMTEgQEAgc2QyX3BhcnNlX3JzcmNfZm9yayAoU0ZfUFJJVkFURSAqcHNmKQorIAorIAlyc3JjLnR5cGVfb2Zmc2V0ID0gcnNyYy5tYXBfb2Zmc2V0ICsgMzAgOworIAorKwlpZiAocnNyYy5tYXBfb2Zmc2V0ICsgMjggPiByc3JjLnJzcmNfbGVuKQorKwl7CXBzZl9sb2dfcHJpbnRmIChwc2YsICJCYWQgbWFwIG9mZnNldC5cbiIpIDsKKysJCWdvdG8gcGFyc2VfcnNyY19mb3JrX2NsZWFudXAgOworKwkJfSA7CisrCisgCXJzcmMudHlwZV9jb3VudCA9IHJlYWRfcnNyY19zaG9ydCAoJnJzcmMsIHJzcmMubWFwX29mZnNldCArIDI4KSArIDEgOworIAlpZiAocnNyYy50eXBlX2NvdW50IDwgMSkKKyAJewlwc2ZfbG9nX3ByaW50ZiAocHNmLCAiQmFkIHR5cGUgY291bnQuXG4iKSA7CitAQCAtNTMzLDcgKzUzOCwxMiBAQCBzZDJfcGFyc2VfcnNyY19mb3JrIChTRl9QUklWQVRFICpwc2YpCisgCisgCXJzcmMuc3RyX2luZGV4ID0gLTEgOworIAlmb3IgKGsgPSAwIDsgayA8IHJzcmMudHlwZV9jb3VudCA7IGsgKyspCistCXsJbWFya2VyID0gcmVhZF9yc3JjX21hcmtlciAoJnJzcmMsIHJzcmMudHlwZV9vZmZzZXQgKyBrICogOCkgOworKwl7CWlmIChyc3JjLnR5cGVfb2Zmc2V0ICsgayAqIDggPiByc3JjLnJzcmNfbGVuKQorKwkJewlwc2ZfbG9nX3ByaW50ZiAocHNmLCAiQmFkIHJzcmMgbWFya2VyLlxuIikgOworKwkJCWdvdG8gcGFyc2VfcnNyY19mb3JrX2NsZWFudXAgOworKwkJCX0gOworKworKwkJbWFya2VyID0gcmVhZF9yc3JjX21hcmtlciAoJnJzcmMsIHJzcmMudHlwZV9vZmZzZXQgKyBrICogOCkgOworIAorIAkJaWYgKG1hcmtlciA9PSBTVFJfTUFSS0VSKQorIAkJewlyc3JjLnN0cl9pbmRleCA9IGsgOworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic25kZmlsZS9saWJzbmRmaWxlMV8xLjAuMjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvbGlic25kZmlsZTFfMS4wLjI1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMDJmNGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvbGlic25kZmlsZTFfMS4wLjI1LmJiCkBAIC0wLDAgKzEsMzMgQEAKK1NVTU1BUlkgPSAiQXVkaW8gZm9ybWF0IENvbnZlcnNpb24gbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubWVnYS1uZXJkLmNvbS9saWJzbmRmaWxlIgorQVVUSE9SID0gIkVyaWsgZGUgQ2FzdHJvIExvcG8iCitERVBFTkRTID0gInNxbGl0ZTMiCitTRUNUSU9OID0gImxpYnMvbXVsdGltZWRpYSIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm1lZ2EtbmVyZC5jb20vbGlic25kZmlsZS9maWxlcy9saWJzbmRmaWxlLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXNyYy1zZDIuYy1GaXgtc2VnZmF1bHQtaW4tU0QyLVJTUkMtcGFyc2VyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtc3JjLXNkMi5jLUZpeC10d28tcG90ZW50aWFsLWJ1ZmZlci1yZWFkLW92ZXJmbG93cy5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlMmI3YmI2MzdlMDEwMjJjN2QyMGY5NWY5YzM5OTBhMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1OTAxNmRiZDMyNmFiZTdlMjM2NmRlZDVjMzQ0Yzg1MzgyOWJlYmZkMTcwMmVmMjZhMDdlZjY2MmQ2YWE0ODgyIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lNzdmZTkzMjAyNzM2YjQ3YzA3MDM1OTEwZjQ3OTc0YSIKKworUyA9ICIke1dPUktESVJ9L2xpYnNuZGZpbGUtJHtQVn0iCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2Fsc2EnLCAnYWxzYScsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW2Fsc2FdID0gIi0tZW5hYmxlLWFsc2EsLS1kaXNhYmxlLWFsc2EsYWxzYS1saWIiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZXh0ZXJuYWwtbGlicyIKKworaW5oZXJpdCBhdXRvdG9vbHMgbGliX3BhY2thZ2UgcGtnY29uZmlnCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kX2FybSgpIHsKKwlleHBvcnQgYWNfY3Zfc3lzX2xhcmdlZmlsZV9zb3VyY2U9MQorCWV4cG9ydCBhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cz02NAorCWFjX2N2X3NpemVvZl9vZmZfdD04Cit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGhlb3JhL2xpYnRoZW9yYS0xLjEuMS9uby1kb2NzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aGVvcmEvbGlidGhlb3JhLTEuMS4xL25vLWRvY3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU5ZjNkMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGhlb3JhL2xpYnRoZW9yYS0xLjEuMS9uby1kb2NzLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGxpYnRoZW9yYS0xLjEuMS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnRoZW9yYS0xLjEuMS5vcmlnL01ha2VmaWxlLmFtCTIwMDktMTEtMjUgMjI6MDE6NTMuNTkzNzc1OTI2ICswMTAwCisrKysgbGlidGhlb3JhLTEuMS4xL01ha2VmaWxlLmFtCTIwMDktMTEtMjUgMjI6MDI6MDAuNzc3NTI0MDE3ICswMTAwCitAQCAtOCw3ICs4LDcgQEAKKyBFWEFNUExFU19ESVIgPQorIGVuZGlmCisgCistU1VCRElSUyA9IGxpYiBpbmNsdWRlIGRvYyB0ZXN0cyBtNCAkKEVYQU1QTEVTX0RJUikKKytTVUJESVJTID0gbGliIGluY2x1ZGUgdGVzdHMgbTQgJChFWEFNUExFU19ESVIpCisgCisgCisgIyB3ZSBpbmNsdWRlIHRoZSB3aG9sZSBkZWJpYW4vIGRpciBpbiBFWFRSQV9ESVNUIGJlY2F1c2UgdGhlcmUncyBhIHByb2JsZW0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGhlb3JhL2xpYnRoZW9yYV8xLjEuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGhlb3JhL2xpYnRoZW9yYV8xLjEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGNiMTY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aGVvcmEvbGlidGhlb3JhXzEuMS4xLmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiVGhlb3JhIFZpZGVvIENvZGVjIgorREVTQ1JJUFRJT04gPSAiVGhlIGxpYnRoZW9yYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gcHJvdmlkZXMgdGhlIHN0YW5kYXJkIGVuY29kZXIgYW5kIGRlY29kZXIgdW5kZXIgYSBCU0QgbGljZW5zZS4iCitIT01FUEFHRSA9ICJodHRwOi8veGlwaC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL3RyYWMueGlwaC5vcmcvbmV3dGlja2V0IgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jZjkxNzE4ZjU5ZWI2YTgzZDA2ZGM3YmNhZjQxMTEzMiIKK0RFUEVORFMgPSAibGlib2dnIgorCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnhpcGgub3JnL3JlbGVhc2VzL3RoZW9yYS9saWJ0aGVvcmEtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9uby1kb2NzLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjkyYWI2NWNlZGQ1MDIxZDZiN2RkZDExN2UwN2NkOGUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjZhZTFlZTJmYTNkNDJhYzQ4OTI4N2QzZWMzNGM1ODg1NzMwYjEyOTZmMDgwMWFlNTc3YTM1MTkzZDNhZmZiYyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZXhhbXBsZXMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvbGlidG9vbDIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvbGlidG9vbDIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU3MjAyZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9saWJ0b29sMi5wYXRjaApAQCAtMCwwICsxLDE5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IHRpZmYtMy45LjUvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGlmZi0zLjkuNS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHRpZmYtMy45LjUvY29uZmlndXJlLmFjCitAQCAtMjcsNyArMjcsNyBAQCBkbmwgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwCisgQUNfUFJFUkVRKDIuNjQpCisgQUNfSU5JVChbTGliVElGRiBTb2Z0d2FyZV0sWzMuOS41XSxbdGlmZkBsaXN0cy5tYXB0b29scy5vcmddLFt0aWZmXSkKKyBBQ19DT05GSUdfQVVYX0RJUihjb25maWcpCistQUNfQ09ORklHX01BQ1JPX0RJUihtNCkKKytkbmwgQUNfQ09ORklHX01BQ1JPX0RJUihtNCkKKyBBQ19MQU5HKEMpCisgCisgZG5sIENvbXB1dGUgdGhlIGNhbm9uaWNhbCBob3N0IChydW4tdGltZSkgc3lzdGVtIHR5cGUgdmFyaWFibGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi90aWZmXzQuMC40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL3RpZmZfNC4wLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YzYTVmMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi90aWZmXzQuMC40LmJiCkBAIC0wLDAgKzEsNDQgQEAKK1NVTU1BUlkgPSAiUHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIFRhZyBJbWFnZSBGaWxlIEZvcm1hdCAoVElGRikiCitMSUNFTlNFID0gIkJTRC0yLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlSSUdIVDttZDU9MzRkYTNkYjQ2ZmFiNzUwMTk5MmY5NjE1ZDdlMTU4Y2YiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnJlbW90ZXNlbnNpbmcub3JnL2xpYnRpZmYvIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5yZW1vdGVzZW5zaW5nLm9yZy9wdWIvbGlidGlmZi90aWZmLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9saWJ0b29sMi5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOWFlZTcxMDc0MDhhMTI4YzBjN2IyNDI4NmMwZGI5MDAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGNiMWQ5MGM5NmY2MWNkZmMwYmNmMDM2YWNjMjUxYzlkYmU2MzIwMzM0ZGE5NDFjN2E4M2NmZTE1NzZlZjg5MCIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgPSAiYXhfY3ZfY2hlY2tfZ2xfbGliZ2w9bm8iCisKK1BBQ0tBR0VDT05GSUcgPz0gImN4eCBqcGVnIHpsaWIgbHptYSBcCisgICAgICAgICAgICAgICAgICBzdHJpcC1jaG9wcGluZyBleHRyYXNhbXBsZS1hcy1hbHBoYSBjaGVjay15Y2Jjci1zdWJzYW1wbGluZyIKKworUEFDS0FHRUNPTkZJR1tjeHhdID0gIi0tZW5hYmxlLWN4eCwtLWRpc2FibGUtY3h4LCwiCitQQUNLQUdFQ09ORklHW2pwZWddID0gIi0tZW5hYmxlLWpwZWcsLS1kaXNhYmxlLWpwZWcsanBlZywiCitQQUNLQUdFQ09ORklHW3psaWJdID0gIi0tZW5hYmxlLXpsaWIsLS1kaXNhYmxlLXpsaWIsemxpYiwiCitQQUNLQUdFQ09ORklHW2x6bWFdID0gIi0tZW5hYmxlLWx6bWEsLS1kaXNhYmxlLWx6bWEseHosIgorCisjIENvbnZlcnQgc2luZ2xlLXN0cmlwIHVuY29tcHJlc3NlZCBpbWFnZXMgdG8gbXVsdGlwbGUgc3RyaXBzIG9mIHNwZWNpZmllZAorIyBzaXplIChkZWZhdWx0OiA4MTkyKSB0byByZWR1Y2UgbWVtb3J5IHVzYWdlCitQQUNLQUdFQ09ORklHW3N0cmlwLWNob3BwaW5nXSA9ICItLWVuYWJsZS1zdHJpcC1jaG9wcGluZywtLWRpc2FibGUtc3RyaXAtY2hvcHBpbmcsLCIKKworIyBUcmVhdCBhIGZvdXJ0aCBzYW1wbGUgd2l0aCBubyBFWFRSQVNBTVBMRV8gdmFsdWUgYXMgYmVpbmcgQVNTT0NBTFBIQQorUEFDS0FHRUNPTkZJR1tleHRyYXNhbXBsZS1hcy1hbHBoYV0gPSAiLS1lbmFibGUtZXh0cmFzYW1wbGUtYXMtYWxwaGEsLS1kaXNhYmxlLWV4dHJhc2FtcGxlLWFzLWFscGhhLCwiCisKKyMgQ29udHJvbCBwaWNraW5nIHVwIFlDYkNyIHN1YnNhbXBsZSBpbmZvLiBEaXNhYmxlIHRvIHN1cHBvcnQgZmlsZXMgbGFja2luZworIyB0aGUgdGFnCitQQUNLQUdFQ09ORklHW2NoZWNrLXljYmNyLXN1YnNhbXBsaW5nXSA9ICItLWVuYWJsZS1jaGVjay15Y2Jjci1zdWJzYW1wbGluZywtLWRpc2FibGUtY2hlY2steWNiY3Itc3Vic2FtcGxpbmcsLCIKKworIyBTdXBwb3J0IGEgbWVjaGFuaXNtIGFsbG93aW5nIHJlYWRpbmcgbGFyZ2Ugc3RyaXBzICh1c3VhbGx5IG9uZSBzdHJpcCBmaWxlcykKKyMgaW4gY2h1bmtzIHdoZW4gdXNpbmcgVElGRlJlYWRTY2FubGluZS4gRXhwZXJpbWVudGFsIDQuMCsgZmVhdHVyZQorUEFDS0FHRUNPTkZJR1tjaHVua3ktc3RyaXAtcmVhZF0gPSAiLS1lbmFibGUtY2h1bmt5LXN0cmlwLXJlYWQsLS1kaXNhYmxlLWNodW5reS1zdHJpcC1yZWFkLCwiCisKK1BBQ0tBR0VTID0rICJ0aWZmeHggdGlmZi11dGlscyIKK0ZJTEVTX3RpZmZ4eCA9ICIke2xpYmRpcn0vbGlidGlmZnh4LnNvLioiCitGSUxFU190aWZmLXV0aWxzID0gIiR7YmluZGlyfS8qIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidm9yYmlzL2xpYnZvcmJpc18xLjMuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidm9yYmlzL2xpYnZvcmJpc18xLjMuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzZlMGYzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ2b3JiaXMvbGlidm9yYmlzXzEuMy41LmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiT2dnIFZvcmJpcyBBdWRpbyBDb2RlYyIKK0RFU0NSSVBUSU9OID0gIk9nZyBWb3JiaXMgaXMgYSBoaWdoLXF1YWxpdHkgbG9zc3kgYXVkaW8gY29kZWMgXAordGhhdCBpcyBmcmVlIG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByZXN0cmljdGlvbnMuIGxpYnZvcmJpcyBcCitpcyB0aGUgbWFpbiB2b3JiaXMgY29kZWMgbGlicmFyeS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnZvcmJpcy5jb20vIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL3RyYWMueGlwaC5vcmciCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdkMmM0ODdkMmZjN2RkM2UzYzdjNDY1YTViN2Y2MjE3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvdm9yYmlzL3ZvcmJpc2VuYy5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MTE7bWQ1PWQxYzFkMTM4ODYzZDYzMTUxMzExOTNkNDA0NmQ4MWNiIgorREVQRU5EUyA9ICJsaWJvZ2ciCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy54aXBoLm9yZy9yZWxlYXNlcy92b3JiaXMvJHtCUH0udGFyLnh6IgorU1JDX1VSSVttZDVzdW1dID0gIjI4Y2IyODA5N2MwN2E3MzVkNmFmNTZlNTk4ZTFjOTBmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU0Zjk0YTk1MjdmZjBhODg0NzdiZTBhNzFjMGJhYjA5YTRjM2ZlYmUwZWQ4NzhiMjQ4MjQ5MDZjZDRiMGUxZDEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9tcGVnMmRlYy9tcGVnMmRlYy0wLjQuMS9hbHRpdmVjX2hfbmVlZGVkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9tcGVnMmRlYy9tcGVnMmRlYy0wLjQuMS9hbHRpdmVjX2hfbmVlZGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYzU2NDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL21wZWcyZGVjL21wZWcyZGVjLTAuNC4xL2FsdGl2ZWNfaF9uZWVkZWQucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorQWRkIG5ldyBtZXRob2QgdG8ganVkZ2Ugd2hldGhlciA8YWx0aXZlYy5oPiBpcyBuZWVkZWQKKworVGhlIG9yaWdpbmFsIGxvZ2ljIHdpbGwgdXNlICJ0eXBlZGVmIHZlY3RvciBpbnQgdDsiIHRvIGp1ZGdlCit3aGV0aGVyIDxhbHRpdmVjLmg+IGlzIG5lZWRlZC4gYWx0aXZlYy5oIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcKK3N0YXRlbWVudDoKKworICNpZiAhZGVmaW5lZChfX0FQUExFX0FMVElWRUNfXykKKyAjZGVmaW5lIHZlY3RvciBfX3ZlY3RvcgorICNkZWZpbmUgcGl4ZWwgX19waXhlbAorICNkZWZpbmUgYm9vbCAKKyAjZW5kaWYKKworSW4gZ2NjLTQuMy4zLCBfX0FQUExFX0FMVElWRUNfXyBpcyBub3QgZGVmaW5lZCBieSBjb21waWxlciwgbmVpdGhlcgorYXMgdmVjdG9yLCBwaXhlbCwgYW5kIGJvb2wuIEluIG9yZGVyIHRvIG1ha2UgInR5cGVkZWYgdmVjdG9yIGludCB0OyIKK3Bhc3MgdGhlIGNvbXBpbGF0aW9uLCB3ZSBuZWVkIHRvIGluY2x1ZGUgYWx0aXZlYy5oLgorCitIb3dldmVyIGluIGdjYy00LjUuMCwgX19BUFBMRV9BTFRJVkVDX18gaXMgZGVmaW5lZCBieSBjb21waWxlciwKK3NvIGFzIHZlY3RvciwgcGl4ZWwsIGFuZCBib29sLiBXZSBjb3VsZCBub3QganVkZ2Ugd2hldGhlcgorYWx0aXZlYy5oIGlzIG5lZWRlZCBieSAidHlwZWRlZiB2ZWN0b3IgaW50IHQ7Ii4KK0hlcmUgd2UgaW5jbHVkZSBhbm90aGVyIHN0YXRlbWVudCAiaW50IHRtcCA9IF9fQ1I2X0VROyIsIGluCit3aGljaCBfX0NSNl9FUSBpcyBkZWZpbmVkIGluIGFsdGl2ZWMuaC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisKK2RpZmYgLXJ1TiBtcGVnMmRlYy0wLjQuMS1vcmlnL2NvbmZpZ3VyZS5pbiBtcGVnMmRlYy0wLjQuMS9jb25maWd1cmUuaW4KKy0tLSBtcGVnMmRlYy0wLjQuMS1vcmlnL2NvbmZpZ3VyZS5pbgkyMDEwLTA5LTE0IDIwOjU1OjQyLjM5OTY4NzY2MyArMDgwMAorKysrIG1wZWcyZGVjLTAuNC4xL2NvbmZpZ3VyZS5pbgkyMDEwLTA5LTE0IDIwOjU2OjQzLjQwMzIwNDY0OCArMDgwMAorQEAgLTc1LDExICs3NSwxMSBAQAorIAkJIENGTEFHUz0iJE9QVF9DRkxBR1MgJFRSWV9DRkxBR1MgJENGTEFHUyIKKyAJCSBBQ19NU0dfQ0hFQ0tJTkcoW2lmIDxhbHRpdmVjLmg+IGlzIG5lZWRlZF0pCisgCQkgQUNfVFJZX0NPTVBJTEUoW10sCistCQkgICAgW3R5cGVkZWYgdmVjdG9yIGludCB0OworKwkJICAgIFt0eXBlZGVmIHZlY3RvciBpbnQgdDsgaW50IHRtcCA9IF9fQ1I2X0VROworIAkJICAgICB2ZWNfbGQoMCwgKHVuc2lnbmVkIGNoYXIgKikwKTtdLAorIAkJICAgIFtoYXZlX2FsdGl2ZWM9eWVzOyBBQ19NU0dfUkVTVUxUKG5vKV0sCisgCQkgICAgW0FDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8YWx0aXZlYy5oPl0sCistCQkJW3R5cGVkZWYgdmVjdG9yIGludCB0OyB2ZWNfbGQoMCwgKHVuc2lnbmVkIGNoYXIgKikwKTtdLAorKwkJCVt0eXBlZGVmIHZlY3RvciBpbnQgdDsgaW50IHRtcCA9IF9fQ1I2X0VROyB2ZWNfbGQoMCwgKHVuc2lnbmVkIGNoYXIgKikwKTtdLAorIAkJCVtBQ19ERUZJTkUoW0hBVkVfQUxUSVZFQ19IXSwsCisgCQkJICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFsdGl2ZWMuaD4gaGVhZGVyLl0pCisgCQkJIGhhdmVfYWx0aXZlYz15ZXM7IEFDX01TR19SRVNVTFQoeWVzKV0sCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL21wZWcyZGVjL21wZWcyZGVjXzAuNC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9tcGVnMmRlYy9tcGVnMmRlY18wLjQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWRlMmJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9tcGVnMmRlYy9tcGVnMmRlY18wLjQuMS5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIkxpYnJhcnkgYW5kIHRlc3QgcHJvZ3JhbSBmb3IgZGVjb2RpbmcgTVBFRy0yIGFuZCBNUEVHLTEgdmlkZW8gc3RyZWFtcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9saWJtcGVnMi5zb3VyY2Vmb3JnZS5uZXQvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL21wZWcyLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMjttZDU9ZWFkNjI2MDJkNDYzODMyOWQzYjViODZhNTU4MDMxNTQiCisKK1BSID0gInIyIgorCitTUkNfVVJJID0gImh0dHA6Ly9saWJtcGVnMi5zb3VyY2Vmb3JnZS5uZXQvZmlsZXMvbXBlZzJkZWMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2FsdGl2ZWNfaF9uZWVkZWQucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3NjMxYjBhNGJjZmRkMGQ3OGMwYmIwMDgzMDgwYjBkYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjNzRhNzYwNjhmOGVjMzZkNGJiNTlhMDNiZjExNTdiZTQ0MTE4Y2EwMjI1MjE4MGU4YjM1OGIwYjVlM2VkZWVlIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNoYXJlZCAtLWRpc2FibGUtc2RsIgorCitQQUNLQUdFQ09ORklHID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0td2l0aC14LC0td2l0aG91dC14LHZpcnR1YWwvbGlieDExIGxpYnhleHQgbGlieHYiCisKK1BBQ0tBR0VTID0gIm1wZWcyZGVjLWRiZyBtcGVnMmRlYyBtcGVnMmRlYy1kb2MgbGlibXBlZzIgbGlibXBlZzItZGV2IGxpYm1wZWcyY29udmVydCBsaWJtcGVnMmNvbnZlcnQtZGV2IGxpYm1wZWcyLXN0YXRpY2RldiBsaWJtcGVnMmNvbnZlcnQtc3RhdGljZGV2IgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vKiIKK0ZJTEVTX2xpYm1wZWcyID0gIiR7bGliZGlyfS9saWJtcGVnMi5zby4qIgorRklMRVNfbGlibXBlZzJjb252ZXJ0ID0gIiR7bGliZGlyfS9saWJtcGVnMmNvbnZlcnQuc28uKiIKK0ZJTEVTX2xpYm1wZWcyLWRldiA9ICIke2xpYmRpcn0vbGlibXBlZzIuc28gXAorICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJtcGVnMi5sYSBcCisgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BrZ2NvbmZpZy9saWJtcGVnMi5wYyBcCisgICAgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS9tcGVnMmRlYy9tcGVnMi5oIgorRklMRVNfbGlibXBlZzItc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWJtcGVnMi5hIgorRklMRVNfbGlibXBlZzJjb252ZXJ0LWRldiA9ICIke2xpYmRpcn0vbGlibXBlZzJjb252ZXJ0LnNvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYm1wZWcyY29udmVydC5sYSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wa2djb25maWcvbGlibXBlZzJjb252ZXJ0LnBjIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS9tcGVnMmRlYy9tcGVnMmNvbnZlcnQuaCIKK0ZJTEVTX2xpYm1wZWcyY29udmVydC1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYm1wZWcyY29udmVydC5hIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8uaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViODA2ZDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby5pbmMKQEAgLTAsMCArMSwxOTcgQEAKK1NVTU1BUlkgPSAiU291bmQgc2VydmVyIGZvciBMaW51eCBhbmQgVW5peC1saWtlIG9wZXJhdGluZyBzeXN0ZW1zIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5wdWxzZWF1ZGlvLm9yZyIKK0FVVEhPUiA9ICJMZW5uYXJ0IFBvZXR0ZXJpbmciCitTRUNUSU9OID0gImxpYnMvbXVsdGltZWRpYSIKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9HUEw7bWQ1PTQzMjVhZmQzOTZmZWJjYjY1OWMzNmI0OTUzMzEzNWQ0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0xHUEw7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9wdWxzZWNvcmUvcmVzYW1wbGVyLmg7YmVnaW5saW5lPTQ7ZW5kbGluZT0yMTttZDU9MDk3OTQwMTJhZTE2OTEyYzAyNzBmMzI4MGNjOGZmODQiCisKK0RFUEVORFMgPSAibGliYXRvbWljLW9wcyBsaWJvaWwgbGlic25kZmlsZTEgbGlidG9vbCIKKyMgb3B0aW9uYWwKK0RFUEVORFMgKz0gInVkZXYgYWxzYS1saWIgZ2xpYi0yLjAgZ2NvbmYiCitERVBFTkRTICs9ICJqc29uLWMgZ2RibSBzcGVleGRzcCBsaWJ4bWwtcGFyc2VyLXBlcmwtbmF0aXZlIGxpYmNhcCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVzZXJhZGQgZ2V0dGV4dCBwZXJsbmF0aXZlIGJsdWV0b290aCBzeXN0ZW1kCisKKyMgKi5kZXNrdG9wIHJ1bGVzIHdvbnQgYmUgZ2VuZXJhdGVkIGR1cmluZyBjb25maWd1cmUgYW5kIGJ1aWxkIHdpbGwgZmFpbAorIyBpZiB1c2luZyAtLWRpc2FibGUtbmxzCitVU0VfTkxTID0gInllcyIKKworRVhUUkFfT0VDT05GID0gIlwKKwkJLS1kaXNhYmxlLWhhbC1jb21wYXQgXAorCQktLWRpc2FibGUtb3JjIFwKKwkJLS1lbmFibGUtdGNwd3JhcD1ubyBcCisJCS0td2l0aC1hY2Nlc3MtZ3JvdXA9YXVkaW8gXAorCQktLWRpc2FibGUtb3BlbnNzbCBcCisJCS0tZGlzYWJsZS14ZW4gXAorCQktLXdpdGgtZGF0YWJhc2U9c2ltcGxlIFwKKwkJLS13aXRob3V0LWZmdHcgXAorCQktLXdpdGhvdXQtenNoLWNvbXBsZXRpb24tZGlyIFwKKwkJLS13aXRoLXVkZXYtcnVsZXMtZGlyPWBwa2ctY29uZmlnIC0tdmFyaWFibGU9dWRldmRpciB1ZGV2YC9ydWxlcy5kIFwKKyAgICAgICAgICAgICAgICBhY19jdl9oZWFkZXJfdmFsZ3JpbmRfbWVtY2hlY2tfaD1ubyBcCisiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsICcke0JMVUVafScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnemVyb2NvbmYnLCAnYXZhaGknLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJzNnJywgJ29mb25vJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3N5c3RlbWQnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICBkYnVzIFwKKyAgICAgICAgICAgICAgICAgICAiCisKK1BBQ0tBR0VDT05GSUdbZGJ1c10gPSAiLS1lbmFibGUtZGJ1cywtLWRpc2FibGUtZGJ1cyxkYnVzIgorUEFDS0FHRUNPTkZJR1tibHVlejRdID0gIi0tZW5hYmxlLWJsdWV6NCwtLWRpc2FibGUtYmx1ZXo0LGJsdWV6NCBzYmMiCitQQUNLQUdFQ09ORklHW2JsdWV6NV0gPSAiLS1lbmFibGUtYmx1ZXo1LC0tZGlzYWJsZS1ibHVlejUsYmx1ZXo1IHNiYyIKK1BBQ0tBR0VDT05GSUdbb2Zvbm9dID0gIi0tZW5hYmxlLWJsdWV6NS1vZm9uby1oZWFkc2V0LC0tZGlzYWJsZS1ibHVlejUtb2Zvbm8taGVhZHNldCxvZm9ubyIKK1BBQ0tBR0VDT05GSUdbZ3RrXSA9ICItLWVuYWJsZS1ndGszLC0tZGlzYWJsZS1ndGszLGd0ayszIgorUEFDS0FHRUNPTkZJR1tzeXN0ZW1kXSA9ICItLWVuYWJsZS1zeXN0ZW1kLWRhZW1vbiAtLWVuYWJsZS1zeXN0ZW1kLWxvZ2luIC0tZW5hYmxlLXN5c3RlbWQtam91cm5hbCAtLXdpdGgtc3lzdGVtZHVzZXJ1bml0ZGlyPSR7c3lzdGVtZF91c2VyX3VuaXRkaXJ9LC0tZGlzYWJsZS1zeXN0ZW1kLWRhZW1vbiAtLWRpc2FibGUtc3lzdGVtZC1sb2dpbiAtLWRpc2FibGUtc3lzdGVtZC1qb3VybmFsLHN5c3RlbWQiCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUteDExLC0tZGlzYWJsZS14MTEsdmlydHVhbC9saWJ4MTEgbGlieHRzdCBsaWJpY2UgbGlic20gbGlieGNiIgorUEFDS0FHRUNPTkZJR1thdmFoaV0gPSAiLS1lbmFibGUtYXZhaGksLS1kaXNhYmxlLWF2YWhpLGF2YWhpIgorUEFDS0FHRUNPTkZJR1tqYWNrXSA9ICItLWVuYWJsZS1qYWNrLC0tZGlzYWJsZS1qYWNrLGphY2siCisjIFNpbmNlIG1hbnkgZW1iZWRkZWQgc3lzdGVtcyBkb24ndCBoYXZlIG5vbi1yb290IHVzZXJzLCBpdCdzIHVzZWZ1bCB0byBiZQorIyBhYmxlIHRvIHVzZSBwdWxzZWF1ZGlvIGF1dG9zcGF3biBmb3Igcm9vdCBhcyB3ZWxsLgorUEFDS0FHRUNPTkZJR1thdXRvc3Bhd24tZm9yLXJvb3RdID0gIiwsLCIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9hcm0gPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibmVvbiIsICIiLCAiIC0tZW5hYmxlLW5lb24tb3B0PW5vIiwgZCl9IgorRVhUUkFfT0VDT05GX2FwcGVuZF9hcm1lYiA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuZW9uIiwgIiIsICIgLS1lbmFibGUtbmVvbi1vcHQ9bm8iLCBkKX0iCisKKworZXhwb3J0IFRBUkdFVF9QRlBVID0gIiR7VEFSR0VUX0ZQVX0iCisKKyMgVE9ETzogVXNlIG1vcmUgZmluZSBncmFudWxhciB2ZXJzaW9uCisjT0VfTFRfUlBBVEhfQUxMT1c9Ijoke2xpYmRpcn0vcHVsc2UtMC45OiIKK09FX0xUX1JQQVRIX0FMTE9XID0gImFueSIKK09FX0xUX1JQQVRIX0FMTE9XW2V4cG9ydF09IjEiCisKK3NldF9jZmdfdmFsdWUgKCkgeworCXNlZCAtaSAtZSAicy9cKDsgKlwpXD8kMiA9LiovJDIgPSAkMy8iICIkMSIKKwlpZiAhIGdyZXAgLXEgIl4kMiA9ICQzXCQiICIkMSI7IHRoZW4KKwkJZGllICJVc2Ugb2Ygc2VkIHRvIHNldCAnJDInIHRvICckMycgaW4gJyQxJyBmYWlsZWQiCisJZmkKK30KKworZG9fY29tcGlsZV9hcHBlbmQgKCkgeworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2F1dG9zcGF3bi1mb3Itcm9vdCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisJCXNldF9jZmdfdmFsdWUgc3JjL2NsaWVudC5jb25mIGFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdCB5ZXMKKwlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdm9sYXRpbGVzLjA0X3B1bHNlICAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcy92b2xhdGlsZXMuMDRfcHVsc2UKK30KKworVVNFUkFERF9QQUNLQUdFUyA9ICJwdWxzZWF1ZGlvLXNlcnZlciIKK0dST1VQQUREX1BBUkFNX3B1bHNlYXVkaW8tc2VydmVyID0gInB1bHNlIgorVVNFUkFERF9QQVJBTV9wdWxzZWF1ZGlvLXNlcnZlciA9ICItLXN5c3RlbSAtLWhvbWUgL3Zhci9ydW4vcHVsc2UgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1uby1jcmVhdGUtaG9tZSAtLXNoZWxsIC9iaW4vZmFsc2UgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1ncm91cHMgYXVkaW8scHVsc2UgLS1naWQgcHVsc2UgcHVsc2UiCisKKyMgVGhlIGNvbnNvbGUta2l0IG1vZHVsZSBpcyBpbmNsdWRlZCBoZXJlIGV4cGxpY2l0bHkgc28gYml0YmFrZSBjYW4gbWFwIHRvIHRoZQorIyBSREVQRU5EUyB3ZSBkZWZpbmUgZm9yIGl0IGluIHRoaXMgcmVjaXBlLCBhbmQgdGhlcmVieSBlbnN1cmUgdGhhdCB3aGVuCisjIGFkZGluZyB0aGUgY29uc29sZS1raXQgbW9kdWxlIHRvIGFuIGltYWdlLCB3ZSBhbHNvIGdldCB0aGUgbmVjZXNzYXJ5CisjIGNvbnNvbGVraXQgcGFja2FnZSBwcm9kdWNlZC4KK1BBQ0tBR0VTID0rICJsaWJwdWxzZWNvcmUgbGlicHVsc2Vjb21tb24gbGlicHVsc2UgbGlicHVsc2Utc2ltcGxlIGxpYnB1bHNlLW1haW5sb29wLWdsaWIgXAorICAgICAgICAgICAgIHB1bHNlYXVkaW8tc2VydmVyIHB1bHNlYXVkaW8tbWlzYyAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdkYnVzJywgJ3B1bHNlYXVkaW8tbW9kdWxlLWNvbnNvbGUta2l0JywgJycsIGQpfSIKKworI3VwZ3JhZGUgcGF0aDoKK1JSRVBMQUNFU19wdWxzZWF1ZGlvLXNlcnZlciA9ICJsaWJwdWxzZS1iaW4gbGlicHVsc2UtY29uZiIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXnB1bHNlYXVkaW8tbGliLS4qIF5wdWxzZWF1ZGlvLW1vZHVsZS0uKiIKKworRklMRVNfbGlicHVsc2Vjb3JlID0gIiR7bGliZGlyfS9saWJwdWxzZWNvcmUqLnNvIgorRklMRVNfbGlicHVsc2Vjb21tb24gPSAiJHtsaWJkaXJ9L3B1bHNlYXVkaW8vbGlicHVsc2Vjb21tb24qLnNvIgorCisjIGNsaWVudC5jb25mIGNvbmZpZ3VyZXMgdGhlIGJlaGF2aW91ciBvZiBsaWJwdWxzZSwgc28gaXQgYmVsb25ncyBpbiB0aGUgc2FtZQorIyBwYWNrYWdlLgorRklMRVNfbGlicHVsc2UgPSAiJHtsaWJkaXJ9L2xpYnB1bHNlLnNvLiogJHtzeXNjb25mZGlyfS9wdWxzZS9jbGllbnQuY29uZiIKKworRklMRVNfbGlicHVsc2Utc2ltcGxlID0gIiR7bGliZGlyfS9saWJwdWxzZS1zaW1wbGUuc28uKiIKK0ZJTEVTX2xpYnB1bHNlLW1haW5sb29wLWdsaWIgPSAiJHtsaWJkaXJ9L2xpYnB1bHNlLW1haW5sb29wLWdsaWIuc28uKiIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmV4ZWNkaXJ9L3B1bHNlLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wdWxzZS0ke1BWfS9tb2R1bGVzLy5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3B1bHNlLSR7UFZ9L21vZHVsZXMvKi5sYSAke2RhdGFkaXJ9L3ZhbGEgJHtsaWJkaXJ9L2NtYWtlIiAgIAorRklMRVNfJHtQTn0tY29uZiA9ICIke3N5c2NvbmZkaXJ9IgorRklMRVNfJHtQTn0tYmluICs9ICIke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzL3ZvbGF0aWxlcy4wNF9wdWxzZSIKK0ZJTEVTXyR7UE59LXNlcnZlciA9ICIke2JpbmRpcn0vcHVsc2VhdWRpbyAke2JpbmRpcn0vc3RhcnQtKiAke3N5c2NvbmZkaXJ9ICR7YmluZGlyfS9wYWN0bCAqL3VkZXYvcnVsZXMuZC8qLnJ1bGVzICovKi91ZGV2L3J1bGVzLmQvKi5ydWxlcyAke3N5c3RlbWRfdXNlcl91bml0ZGlyfS8qIgorCisjU1lTVEVNRF9QQUNLQUdFUyA9ICIke1BOfS1zZXJ2ZXIiCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tc2VydmVyID0gInB1bHNlYXVkaW8uc2VydmljZSIKKworRklMRVNfJHtQTn0tbWlzYyA9ICIke2JpbmRpcn0vKiAke2xpYmRpcn0vcHVsc2VhdWRpby9saWJwdWxzZWRzcC5zbyIKKworIyBBbGxvdyB0aGUgcHVsc2VhdWRpbyBwYWNrYWdlIHRvIGJlIGNyZWF0ZWQgZW1wdHkgYXMgYSBwbGFjZWhvbGRlciAoLWRiZyBhbmQgLWRldiBkZXBlbmQgb24gaXQpCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorCitDT05GRklMRVNfbGlicHVsc2UgPSAiJHtzeXNjb25mZGlyfS9wdWxzZS9jbGllbnQuY29uZiIKKworQ09ORkZJTEVTX3B1bHNlYXVkaW8tc2VydmVyID0gIlwgCisgICR7c3lzY29uZmRpcn0vcHVsc2UvZGVmYXVsdC5wYSBcCisgICR7c3lzY29uZmRpcn0vcHVsc2UvZGFlbW9uLmNvbmYgXAorICAke3N5c2NvbmZkaXJ9L3B1bHNlL3N5c3RlbS5wYSBcCisgICIKKworcGtnX3Bvc3RpbnN0XyR7UE59LXNlcnZlcigpIHsKKyAgICAgICAgaWYgWyAteiAiJEQiIF0gJiYgWyAtZSAke3N5c2NvbmZkaXJ9L2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCBdIDsgdGhlbgorICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9pbml0LmQvcG9wdWxhdGUtdm9sYXRpbGUuc2ggdXBkYXRlCisgICAgICAgIGZpCit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgICNkLnNldFZhcignUEtHX3B1bHNlYXVkaW8nLCAncHVsc2VhdWRpbycpCisKKyAgICBwbHVnaW5kaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L3B1bHNlLSR7UFZ9L21vZHVsZXMvJykKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBwbHVnaW5kaXIsICdebW9kdWxlLSguKilcLnNvJCcsICdwdWxzZWF1ZGlvLW1vZHVsZS0lcycsICdQdWxzZUF1ZGlvIG1vZHVsZSBmb3IgJXMnLCBleHRyYV9kZXBlbmRzPScnLCBwcmVwZW5kPVRydWUpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcGx1Z2luZGlyLCAnXmxpYiguKilcLnNvJCcsICdwdWxzZWF1ZGlvLWxpYi0lcycsICdQdWxzZUF1ZGlvIGxpYnJhcnkgZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJywgcHJlcGVuZD1UcnVlKQorfQorCitSREVQRU5EU19wdWxzZWF1ZGlvLXNlcnZlciA9ICIgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLWZpbHRlci1hcHBseSBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtZmlsdGVyLWhldXJpc3RpY3MgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLXVkZXYtZGV0ZWN0IFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1udWxsLXNpbmsgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLWRldmljZS1yZXN0b3JlIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1zdHJlYW0tcmVzdG9yZSBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtY2FyZC1yZXN0b3JlIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1hdWdtZW50LXByb3BlcnRpZXMgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLWRldGVjdCBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtYWxzYS1zaW5rIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1hbHNhLXNvdXJjZSBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtYWxzYS1jYXJkIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1uYXRpdmUtcHJvdG9jb2wtdW5peCBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtZGVmYXVsdC1kZXZpY2UtcmVzdG9yZSBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtaW50ZW5kZWQtcm9sZXMgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLXJlc2N1ZS1zdHJlYW1zIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1hbHdheXMtc2luayBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtc3VzcGVuZC1vbi1pZGxlIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1wb3NpdGlvbi1ldmVudC1zb3VuZHMgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLXJvbGUtY29yayBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtc3dpdGNoLW9uLXBvcnQtYXZhaWxhYmxlIgorCisjIElmIHRoZSBzZXJ2ZXIgaXMgaW5zdGFsbGVkLCBpdCdzIHVzdWFsbHkgZGVzaXJhYmxlIHRvIG1ha2UgQUxTQSBhcHBsaWNhdGlvbnMKKyMgdXNlIFB1bHNlQXVkaW8uIGFsc2EtcGx1Z2lucy1wdWxzZWF1ZGlvLWNvbmYgd2lsbCBpbnN0YWxsIHRoZSBjb25maWd1cmF0aW9uCisjIHRoYXQgbWFrZXMgdGhlIFB1bHNlQXVkaW8gcGx1Z2luIHRoZSBkZWZhdWx0IEFMU0EgZGV2aWNlLgorUkRFUEVORFNfcHVsc2VhdWRpby1zZXJ2ZXIgKz0gImFsc2EtcGx1Z2lucy1wdWxzZWF1ZGlvLWNvbmYiCisKKyMgcHVsc2VhdWRpby1tb2R1bGUtY29uc29sZS1raXQgaXMgYnVpbHQgd2hlbmV2ZXIgZGJ1cyBpcyBlbmFibGVkIGJ5IFBBQ0tBR0VDT05GSUcKKyMgYnV0IGNvbnNvbGVraXQgZGVwZW5kcyBvbiBsaWJ4MTEgYW5kIGlzIGF2YWlsYWJsZSBvbmx5IGZvciBESVNUUk8gd2l0aCB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSREVQRU5EU19wdWxzZWF1ZGlvLW1vZHVsZS1jb25zb2xlLWtpdCA9KyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnY29uc29sZWtpdCcsICcnLCBkKX0iCitSREVQRU5EU19wdWxzZWF1ZGlvLW1pc2MgKz0gInB1bHNlYXVkaW8tbW9kdWxlLWNsaS1wcm90b2NvbC11bml4IgorCitGSUxFU19wdWxzZWF1ZGlvLW1vZHVsZS1nY29uZiArPSAiJHtsaWJleGVjZGlyfS9wdWxzZS9nY29uZi1oZWxwZXIiCitGSUxFU19wdWxzZWF1ZGlvLW1vZHVsZS1hbHNhLWNhcmQgKz0gIiR7ZGF0YWRpcn0vcHVsc2VhdWRpby9hbHNhLW1peGVyIgorCisjIFRoZSBjb25zb2xlLWtpdCBtb2R1bGUgaXMgZ29vZCB0byBoYXZlIG9uIFgxMSBzeXN0ZW1zIChpdCBrZWVwcyBQdWxzZUF1ZGlvCisjIHJ1bm5pbmcgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgdXNlciBsb2dpbiBzZXNzaW9uKS4gVGhlIGRldmljZS1tYW5hZ2VyIGFuZAorIyB4MTEtKiBtb2R1bGVzIGFyZSByZWZlcmVuY2VkIGZyb20gdGhlIHN0YXJ0LXB1bHNlYXVkaW8teDExIHNjcmlwdCwgc28gdGhvc2UKKyMgbW9kdWxlcyBtdXN0IGJlIGluc3RhbGxlZCB3aGVuIFgxMSBpcyBlbmFibGVkLgorUkRFUEVORFNfcHVsc2VhdWRpby1zZXJ2ZXIgKz0gIlwKKyAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnXAorICAgICAgICAgICAgICAgIHB1bHNlYXVkaW8tbW9kdWxlLWNvbnNvbGUta2l0IFwKKyAgICAgICAgICAgICAgICBwdWxzZWF1ZGlvLW1vZHVsZS1kZXZpY2UtbWFuYWdlciBcCisgICAgICAgICAgICAgICAgcHVsc2VhdWRpby1tb2R1bGUteDExLWNvcmstcmVxdWVzdCBcCisgICAgICAgICAgICAgICAgcHVsc2VhdWRpby1tb2R1bGUteDExLXB1Ymxpc2ggXAorICAgICAgICAgICAgICAgIHB1bHNlYXVkaW8tbW9kdWxlLXgxMS14c21wIFwKKyAgICAgICAgJywgJycsIGQpfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDEtY2xpZW50LWNvbmYtQWRkLWFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDEtY2xpZW50LWNvbmYtQWRkLWFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTllYjdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1jbGllbnQtY29uZi1BZGQtYWxsb3ctYXV0b3NwYXduLWZvci1yb290LnBhdGNoCkBAIC0wLDAgKzEsOTIgQEAKK0Zyb20gMWNiNTY0N2Y3NmRjOGNkN2JhY2JjZTJhNjRmYWM5ZTZjMmRjM2IxNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPgorRGF0ZTogVHVlLCAyOCBBcHIgMjAxNSAxNDozMjo0MyArMDMwMAorU3ViamVjdDogW1BBVENIXSBjbGllbnQtY29uZjogQWRkIGFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdAorCitVc3VhbGx5IGF1dG9zcGF3bmluZyBmb3Igcm9vdCBpcyBhIGJhZCBpZGVhLCBzaW5jZSBpdCBjYW4gZWFzaWx5CitpbnRlcmZlcmUgd2l0aCBvdGhlciB1c2VycycgUHVsc2VBdWRpbyBpbnN0YW5jZXMsIGJ1dCBpbiBlbWJlZGRlZAorZW52aXJvbm1lbnRzIHdoZXJlIG9ubHkgcm9vdCBleGlzdHMsIGF1dG9zcGF3bmluZyBpcyBmaW5lLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUuY29tcC5hdWRpby5wdWxzZWF1ZGlvLmdlbmVyYWwvMjM1NDldCisKK1NpZ25lZC1vZmYtYnk6IFRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPgorLS0tCisgbWFuL3B1bHNlLWNsaWVudC5jb25mLjUueG1sLmluIHwgOSArKysrKysrKysKKyBzcmMvcHVsc2UvY2xpZW50LWNvbmYuYyAgICAgICAgfCAxICsKKyBzcmMvcHVsc2UvY2xpZW50LWNvbmYuaCAgICAgICAgfCAxICsKKyBzcmMvcHVsc2UvY2xpZW50LmNvbmYuaW4gICAgICAgfCAxICsKKyBzcmMvcHVsc2UvY29udGV4dC5jICAgICAgICAgICAgfCAyICstCisgNSBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9tYW4vcHVsc2UtY2xpZW50LmNvbmYuNS54bWwuaW4gYi9tYW4vcHVsc2UtY2xpZW50LmNvbmYuNS54bWwuaW4KK2luZGV4IDEwMDJkYmUuLjAwNTg0OTAgMTAwNjQ0CistLS0gYS9tYW4vcHVsc2UtY2xpZW50LmNvbmYuNS54bWwuaW4KKysrKyBiL21hbi9wdWxzZS1jbGllbnQuY29uZi41LnhtbC5pbgorQEAgLTcxLDYgKzcxLDE1IEBAIExpY2Vuc2UgYWxvbmcgd2l0aCBQdWxzZUF1ZGlvOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgICAgIDwvb3B0aW9uPgorIAorICAgICA8b3B0aW9uPgorKyAgICAgIDxwPjxvcHQ+YWxsb3ctYXV0b3NwYXduLWZvci1yb290PTwvb3B0PiBBbGxvdyBhdXRvc3Bhd25pbmcgYWxzbyBmb3Igcm9vdC4KKysgICAgICBUYWtlcyBhIGJvb2xlYW4gdmFsdWUsIGRlZmF1bHRzIHRvIDxvcHQ+bm88L29wdD4uIElmIHRoZSA8b3B0PmF1dG9zcGF3bgorKyAgICAgIDwvb3B0PiBvcHRpb24gaXMgZGlzYWJsZWQsIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QuIEF1dG9zcGF3bmluZyBmb3IKKysgICAgICByb290IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGJlY2F1c2UgcnVubmluZyBQdWxzZUF1ZGlvIGFzIHJvb3Qgd2lsbAorKyAgICAgIGludGVyZmVyZSB3aXRoIHJlZ3VsYXIgdXNlcnMnIFB1bHNlQXVkaW8gaW5zdGFuY2VzLiBUaGlzIG9wdGlvbiBzaG91bGQgYmUKKysgICAgICBlbmFibGVkIG9ubHkgaW4gZW52aXJvbm1lbnRzIHdoZXJlIHRoZXJlIGFyZSBubyByZWd1bGFyIHVzZXJzIGF0IGFsbC48L3A+CisrICAgIDwvb3B0aW9uPgorKworKyAgICA8b3B0aW9uPgorICAgICAgIDxwPjxvcHQ+ZGFlbW9uLWJpbmFyeT08L29wdD4gUGF0aCB0byB0aGUgUHVsc2VBdWRpbyBkYWVtb24gdG8KKyAgICAgICBydW4gd2hlbiBhdXRvc3Bhd25pbmcuIERlZmF1bHRzIHRvIGEgcGF0aCBjb25maWd1cmVkIGF0IGNvbXBpbGUKKyAgICAgICB0aW1lLjwvcD4KK2RpZmYgLS1naXQgYS9zcmMvcHVsc2UvY2xpZW50LWNvbmYuYyBiL3NyYy9wdWxzZS9jbGllbnQtY29uZi5jCitpbmRleCA4MzMzMWY4Li4wNDc0NTgzIDEwMDY0NAorLS0tIGEvc3JjL3B1bHNlL2NsaWVudC1jb25mLmMKKysrKyBiL3NyYy9wdWxzZS9jbGllbnQtY29uZi5jCitAQCAtMTM4LDYgKzEzOCw3IEBAIHZvaWQgcGFfY2xpZW50X2NvbmZfbG9hZChwYV9jbGllbnRfY29uZiAqYywgYm9vbCBsb2FkX2Zyb21feDExLCBib29sIGxvYWRfZnJvbV9lCisgICAgICAgICB7ICJkZWZhdWx0LXNlcnZlciIsICAgICAgICAgcGFfY29uZmlnX3BhcnNlX3N0cmluZywgICAmYy0+ZGVmYXVsdF9zZXJ2ZXIsIE5VTEwgfSwKKyAgICAgICAgIHsgImRlZmF1bHQtZGJ1cy1zZXJ2ZXIiLCAgICBwYV9jb25maWdfcGFyc2Vfc3RyaW5nLCAgICZjLT5kZWZhdWx0X2RidXNfc2VydmVyLCBOVUxMIH0sCisgICAgICAgICB7ICJhdXRvc3Bhd24iLCAgICAgICAgICAgICAgcGFfY29uZmlnX3BhcnNlX2Jvb2wsICAgICAmYy0+YXV0b3NwYXduLCBOVUxMIH0sCisrICAgICAgICB7ICJhbGxvdy1hdXRvc3Bhd24tZm9yLXJvb3QiLCBwYV9jb25maWdfcGFyc2VfYm9vbCwgICAmYy0+YWxsb3dfYXV0b3NwYXduX2Zvcl9yb290LCBOVUxMIH0sCisgICAgICAgICB7ICJjb29raWUtZmlsZSIsICAgICAgICAgICAgcGFfY29uZmlnX3BhcnNlX3N0cmluZywgICAmYy0+Y29va2llX2ZpbGVfZnJvbV9jbGllbnRfY29uZiwgTlVMTCB9LAorICAgICAgICAgeyAiZGlzYWJsZS1zaG0iLCAgICAgICAgICAgIHBhX2NvbmZpZ19wYXJzZV9ib29sLCAgICAgJmMtPmRpc2FibGVfc2htLCBOVUxMIH0sCisgICAgICAgICB7ICJlbmFibGUtc2htIiwgICAgICAgICAgICAgcGFfY29uZmlnX3BhcnNlX25vdF9ib29sLCAmYy0+ZGlzYWJsZV9zaG0sIE5VTEwgfSwKK2RpZmYgLS1naXQgYS9zcmMvcHVsc2UvY2xpZW50LWNvbmYuaCBiL3NyYy9wdWxzZS9jbGllbnQtY29uZi5oCitpbmRleCBlYWM3MDVhLi4xMzEzOTNhIDEwMDY0NAorLS0tIGEvc3JjL3B1bHNlL2NsaWVudC1jb25mLmgKKysrKyBiL3NyYy9wdWxzZS9jbGllbnQtY29uZi5oCitAQCAtMzgsNiArMzgsNyBAQCB0eXBlZGVmIHN0cnVjdCBwYV9jbGllbnRfY29uZiB7CisgICAgIGNoYXIgKmNvb2tpZV9maWxlX2Zyb21fYXBwbGljYXRpb247CisgICAgIGNoYXIgKmNvb2tpZV9maWxlX2Zyb21fY2xpZW50X2NvbmY7CisgICAgIGJvb2wgYXV0b3NwYXduLCBkaXNhYmxlX3NobSwgYXV0b19jb25uZWN0X2xvY2FsaG9zdCwgYXV0b19jb25uZWN0X2Rpc3BsYXk7CisrICAgIGJvb2wgYWxsb3dfYXV0b3NwYXduX2Zvcl9yb290OworICAgICBzaXplX3Qgc2htX3NpemU7CisgfSBwYV9jbGllbnRfY29uZjsKKyAKK2RpZmYgLS1naXQgYS9zcmMvcHVsc2UvY2xpZW50LmNvbmYuaW4gYi9zcmMvcHVsc2UvY2xpZW50LmNvbmYuaW4KK2luZGV4IDI2Yjc3OTAuLjY5ODMwZWYgMTAwNjQ0CistLS0gYS9zcmMvcHVsc2UvY2xpZW50LmNvbmYuaW4KKysrKyBiL3NyYy9wdWxzZS9jbGllbnQuY29uZi5pbgorQEAgLTIzLDYgKzIzLDcgQEAKKyA7IGRlZmF1bHQtZGJ1cy1zZXJ2ZXIgPQorIAorIDsgYXV0b3NwYXduID0geWVzCisrOyBhbGxvdy1hdXRvc3Bhd24tZm9yLXJvb3QgPSBubworIDsgZGFlbW9uLWJpbmFyeSA9IEBQQV9CSU5BUllACisgOyBleHRyYS1hcmd1bWVudHMgPSAtLWxvZy10YXJnZXQ9c3lzbG9nCisgCitkaWZmIC0tZ2l0IGEvc3JjL3B1bHNlL2NvbnRleHQuYyBiL3NyYy9wdWxzZS9jb250ZXh0LmMKK2luZGV4IDRiYzQ0NWYuLmQ2YzNmNmQgMTAwNjQ0CistLS0gYS9zcmMvcHVsc2UvY29udGV4dC5jCisrKysgYi9zcmMvcHVsc2UvY29udGV4dC5jCitAQCAtOTc2LDcgKzk3Niw3IEBAIGludCBwYV9jb250ZXh0X2Nvbm5lY3QoCisgICAgIGlmICghKGZsYWdzICYgUEFfQ09OVEVYVF9OT0FVVE9TUEFXTikgJiYgYy0+Y29uZi0+YXV0b3NwYXduKSB7CisgCisgI2lmZGVmIEhBVkVfR0VUVUlECistICAgICAgICBpZiAoZ2V0dWlkKCkgPT0gMCkKKysgICAgICAgIGlmICghYy0+Y29uZi0+YWxsb3dfYXV0b3NwYXduX2Zvcl9yb290ICYmIGdldHVpZCgpID09IDApCisgICAgICAgICAgICAgcGFfbG9nX2RlYnVnKCJOb3QgZG9pbmcgYXV0b3NwYXduIHNpbmNlIHdlIGFyZSByb290LiIpOworICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgYy0+ZG9fYXV0b3NwYXduID0gdHJ1ZTsKKy0tIAorMS45LjMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1jb25mLXBhcnNlci1hZGQtc3VwcG9ydC1mb3ItLmQtZGlyZWN0b3JpZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLWNvbmYtcGFyc2VyLWFkZC1zdXBwb3J0LWZvci0uZC1kaXJlY3Rvcmllcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWYxYjJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1jb25mLXBhcnNlci1hZGQtc3VwcG9ydC1mb3ItLmQtZGlyZWN0b3JpZXMucGF0Y2gKQEAgLTAsMCArMSwxOTYgQEAKK0Zyb20gOGNiNjQzYmJmMGEyODdkNjc3OTRlNjgwZDI2ZjQ5YzUwM2YzMTA1MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPgorRGF0ZTogVGh1LCAyMSBNYXkgMjAxNSAyMTowMDo1OSArMDMwMAorU3ViamVjdDogW1BBVENIXSBjb25mLXBhcnNlcjogYWRkIHN1cHBvcnQgZm9yIC5kIGRpcmVjdG9yaWVzCisKK1RoaXMgYWxsb3dzIGEgY29uZmlndXJhdGlvbiBzY2hlbWUgd2hlcmUgcHJpb3IgdG8gbG9hZGluZworY29uZmlndXJhdGlvbiBmcm9tICJzb21lZmlsZSIsIHRoZSBwYXJzZXIgZmlyc3QgbG9hZHMgY29uZmlndXJhdGlvbgorZnJvbSBmaWxlcyBpbiBkaXJlY3RvcnkgInNvbWVmaWxlLmQiLiBUaGlzIGZlYXR1cmUgaXMgY3VycmVudGx5CitlbmFibGVkIG9ubHkgZm9yIGNsaWVudC5jb25mIGFuZCBkYWVtb24uY29uZi4KKworVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gY3JlYXRlIGNvbmZpZ3VyYXRpb24gcGFja2FnZXMgaW4gZGlzdHJpYnV0aW9ucword2hlbiB0aGVyZSdzIG5lZWQgdG8gaGF2ZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBpbiBkaWZmZXJlbnQgc2V0dXBzLgorRm9yIGV4YW1wbGUsIHRoZSBncmFwaGljYWwgU2F0byBlbnZpcm9ubWVudCBpbiBPcGVuRW1iZWRkZWQtY29yZSBuZWVkcwordG8gc2V0IGFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdD10cnVlIGluIGNsaWVudC5jb25mLCBidXQgdGhlIGRlZmF1bHQKK2NvbmZpZ3VyYXRpb24gaW4gT3BlbkVtYmVkZGVkLWNvcmUgc2hvdWxkIG5vdCBzZXQgdGhhdCBvcHRpb24uIFdpdGgKK3RoaXMgcGF0Y2gsIEkgY2FuIGNyZWF0ZSBhIFNhdG8tc3BlY2lmaWMgcGFja2FnZSB0aGF0IHNpbXBseSBpbnN0YWxscworNTAtc2F0by5jb25mIGluIC9ldGMvcHVsc2UvY2xpZW50LmNvbmYuZCB3aXRob3V0IGNvbmZsaWN0aW5nIHdpdGggdGhlCittYWluIGNsaWVudC5jb25mIGZpbGUgY29taW5nIGZyb20gYSBkaWZmZXJlbnQgcGFja2FnZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmNvbXAuYXVkaW8ucHVsc2VhdWRpby5nZW5lcmFsLzIzNTkyXQorCitTaWduZWQtb2ZmLWJ5OiBUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIHNyYy9kYWVtb24vZGFlbW9uLWNvbmYuYyAgICAgICAgICAgICAgICB8ICAyICstCisgc3JjL21vZHVsZXMvYWxzYS9hbHNhLW1peGVyLmMgICAgICAgICAgIHwgIDQgKystLQorIHNyYy9tb2R1bGVzL21vZHVsZS1hdWdtZW50LXByb3BlcnRpZXMuYyB8ICAyICstCisgc3JjL3B1bHNlL2NsaWVudC1jb25mLmMgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvcHVsc2Vjb3JlL2NvbmYtcGFyc2VyLmMgICAgICAgICAgICAgfCA0MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KKyBzcmMvcHVsc2Vjb3JlL2NvbmYtcGFyc2VyLmggICAgICAgICAgICAgfCAgOCArKysrKystCisgNiBmaWxlcyBjaGFuZ2VkLCA1MiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2RhZW1vbi9kYWVtb24tY29uZi5jIGIvc3JjL2RhZW1vbi9kYWVtb24tY29uZi5jCitpbmRleCAyMWE4ZWRiLi4xMzMyZmM2IDEwMDY0NAorLS0tIGEvc3JjL2RhZW1vbi9kYWVtb24tY29uZi5jCisrKysgYi9zcmMvZGFlbW9uL2RhZW1vbi1jb25mLmMKK0BAIC02MTcsNyArNjE3LDcgQEAgaW50IHBhX2RhZW1vbl9jb25mX2xvYWQocGFfZGFlbW9uX2NvbmYgKmMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKSB7CisgICAgIGNpLmRlZmF1bHRfY2hhbm5lbF9tYXBfc2V0ID0gY2kuZGVmYXVsdF9zYW1wbGVfc3BlY19zZXQgPSBmYWxzZTsKKyAgICAgY2kuY29uZiA9IGM7CisgCistICAgIHIgPSBmID8gcGFfY29uZmlnX3BhcnNlKGMtPmNvbmZpZ19maWxlLCBmLCB0YWJsZSwgTlVMTCwgTlVMTCkgOiAwOworKyAgICByID0gZiA/IHBhX2NvbmZpZ19wYXJzZShjLT5jb25maWdfZmlsZSwgZiwgdGFibGUsIE5VTEwsIHRydWUsIE5VTEwpIDogMDsKKyAKKyAgICAgaWYgKHIgPj0gMCkgeworIAorZGlmZiAtLWdpdCBhL3NyYy9tb2R1bGVzL2Fsc2EvYWxzYS1taXhlci5jIGIvc3JjL21vZHVsZXMvYWxzYS9hbHNhLW1peGVyLmMKK2luZGV4IDIzMTQ2MTIuLjk4OGI0ZmUgMTAwNjQ0CistLS0gYS9zcmMvbW9kdWxlcy9hbHNhL2Fsc2EtbWl4ZXIuYworKysrIGIvc3JjL21vZHVsZXMvYWxzYS9hbHNhLW1peGVyLmMKK0BAIC0yNDgzLDcgKzI0ODMsNyBAQCBwYV9hbHNhX3BhdGgqIHBhX2Fsc2FfcGF0aF9uZXcoY29uc3QgY2hhciAqcGF0aHNfZGlyLCBjb25zdCBjaGFyICpmbmFtZSwgcGFfYWxzYQorIAorICAgICBmbiA9IHBhX21heWJlX3ByZWZpeF9wYXRoKGZuYW1lLCBwYXRoc19kaXIpOworIAorLSAgICByID0gcGFfY29uZmlnX3BhcnNlKGZuLCBOVUxMLCBpdGVtcywgcC0+cHJvcGxpc3QsIHApOworKyAgICByID0gcGFfY29uZmlnX3BhcnNlKGZuLCBOVUxMLCBpdGVtcywgcC0+cHJvcGxpc3QsIGZhbHNlLCBwKTsKKyAgICAgcGFfeGZyZWUoZm4pOworIAorICAgICBpZiAociA8IDApCitAQCAtNDI4OCw3ICs0Mjg4LDcgQEAgcGFfYWxzYV9wcm9maWxlX3NldCogcGFfYWxzYV9wcm9maWxlX3NldF9uZXcoY29uc3QgY2hhciAqZm5hbWUsIGNvbnN0IHBhX2NoYW5uZWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYV9ydW5fZnJvbV9idWlsZF90cmVlKCkgPyBQQV9TUkNESVIgIi9tb2R1bGVzL2Fsc2EvbWl4ZXIvcHJvZmlsZS1zZXRzLyIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBX0FMU0FfUFJPRklMRV9TRVRTX0RJUik7CisgCistICAgIHIgPSBwYV9jb25maWdfcGFyc2UoZm4sIE5VTEwsIGl0ZW1zLCBOVUxMLCBwcyk7CisrICAgIHIgPSBwYV9jb25maWdfcGFyc2UoZm4sIE5VTEwsIGl0ZW1zLCBOVUxMLCBmYWxzZSwgcHMpOworICAgICBwYV94ZnJlZShmbik7CisgCisgICAgIGlmIChyIDwgMCkKK2RpZmYgLS1naXQgYS9zcmMvbW9kdWxlcy9tb2R1bGUtYXVnbWVudC1wcm9wZXJ0aWVzLmMgYi9zcmMvbW9kdWxlcy9tb2R1bGUtYXVnbWVudC1wcm9wZXJ0aWVzLmMKK2luZGV4IDQyYjZmZDkuLjU0MWYwZTcgMTAwNjQ0CistLS0gYS9zcmMvbW9kdWxlcy9tb2R1bGUtYXVnbWVudC1wcm9wZXJ0aWVzLmMKKysrKyBiL3NyYy9tb2R1bGVzL21vZHVsZS1hdWdtZW50LXByb3BlcnRpZXMuYworQEAgLTIwNCw3ICsyMDQsNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfcnVsZShzdHJ1Y3QgcnVsZSAqcikgeworICAgICB0YWJsZVswXS5kYXRhID0gJnItPmFwcGxpY2F0aW9uX25hbWU7CisgICAgIHRhYmxlWzFdLmRhdGEgPSAmci0+aWNvbl9uYW1lOworIAorLSAgICBpZiAocGFfY29uZmlnX3BhcnNlKGZuLCBOVUxMLCB0YWJsZSwgTlVMTCwgcikgPCAwKQorKyAgICBpZiAocGFfY29uZmlnX3BhcnNlKGZuLCBOVUxMLCB0YWJsZSwgTlVMTCwgZmFsc2UsIHIpIDwgMCkKKyAgICAgICAgIHBhX2xvZ193YXJuKCJGYWlsZWQgdG8gcGFyc2UgLmRlc2t0b3AgZmlsZSAlcy4iLCBmbik7CisgCisgICAgIHBhX3hmcmVlKGZuKTsKK2RpZmYgLS1naXQgYS9zcmMvcHVsc2UvY2xpZW50LWNvbmYuYyBiL3NyYy9wdWxzZS9jbGllbnQtY29uZi5jCitpbmRleCA4MzMzMWY4Li4zYzMzODRkIDEwMDY0NAorLS0tIGEvc3JjL3B1bHNlL2NsaWVudC1jb25mLmMKKysrKyBiL3NyYy9wdWxzZS9jbGllbnQtY29uZi5jCitAQCAtMTQ5LDcgKzE0OSw3IEBAIHZvaWQgcGFfY2xpZW50X2NvbmZfbG9hZChwYV9jbGllbnRfY29uZiAqYywgYm9vbCBsb2FkX2Zyb21feDExLCBib29sIGxvYWRfZnJvbV9lCisgCisgICAgIGYgPSBwYV9vcGVuX2NvbmZpZ19maWxlKERFRkFVTFRfQ0xJRU5UX0NPTkZJR19GSUxFLCBERUZBVUxUX0NMSUVOVF9DT05GSUdfRklMRV9VU0VSLCBFTlZfQ0xJRU5UX0NPTkZJR19GSUxFLCAmZm4pOworICAgICBpZiAoZikgeworLSAgICAgICAgcGFfY29uZmlnX3BhcnNlKGZuLCBmLCB0YWJsZSwgTlVMTCwgTlVMTCk7CisrICAgICAgICBwYV9jb25maWdfcGFyc2UoZm4sIGYsIHRhYmxlLCBOVUxMLCB0cnVlLCBOVUxMKTsKKyAgICAgICAgIHBhX3hmcmVlKGZuKTsKKyAgICAgICAgIGZjbG9zZShmKTsKKyAgICAgfQorZGlmZiAtLWdpdCBhL3NyYy9wdWxzZWNvcmUvY29uZi1wYXJzZXIuYyBiL3NyYy9wdWxzZWNvcmUvY29uZi1wYXJzZXIuYworaW5kZXggMmRjZDQ1YS4uZDQ3MzIzMiAxMDA2NDQKKy0tLSBhL3NyYy9wdWxzZWNvcmUvY29uZi1wYXJzZXIuYworKysrIGIvc3JjL3B1bHNlY29yZS9jb25mLXBhcnNlci5jCitAQCAtMjEsNiArMjEsNyBAQAorICNpbmNsdWRlIDxjb25maWcuaD4KKyAjZW5kaWYKKyAKKysjaW5jbHVkZSA8ZGlyZW50Lmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorQEAgLTEwMyw3ICsxMDQsNyBAQCBzdGF0aWMgaW50IHBhcnNlX2xpbmUocGFfY29uZmlnX3BhcnNlcl9zdGF0ZSAqc3RhdGUpIHsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgCistICAgICAgICByID0gcGFfY29uZmlnX3BhcnNlKGZuLCBOVUxMLCBzdGF0ZS0+aXRlbV90YWJsZSwgc3RhdGUtPnByb3BsaXN0LCBzdGF0ZS0+dXNlcmRhdGEpOworKyAgICAgICAgciA9IHBhX2NvbmZpZ19wYXJzZShmbiwgTlVMTCwgc3RhdGUtPml0ZW1fdGFibGUsIHN0YXRlLT5wcm9wbGlzdCwgZmFsc2UsIHN0YXRlLT51c2VyZGF0YSk7CisgICAgICAgICBwYV94ZnJlZShwYXRoKTsKKyAgICAgICAgIHJldHVybiByOworICAgICB9CitAQCAtMTUyLDggKzE1MywxMyBAQCBzdGF0aWMgaW50IHBhcnNlX2xpbmUocGFfY29uZmlnX3BhcnNlcl9zdGF0ZSAqc3RhdGUpIHsKKyAgICAgICAgIHJldHVybiBub3JtYWxfYXNzaWdubWVudChzdGF0ZSk7CisgfQorIAorK3N0YXRpYyBpbnQgY29uZl9maWx0ZXIoY29uc3Qgc3RydWN0IGRpcmVudCAqZW50cnkpIHsKKysgICAgcmV0dXJuIHBhX2VuZHN3aXRoKGVudHJ5LT5kX25hbWUsICIuY29uZiIpOworK30KKysKKyAvKiBHbyB0aHJvdWdoIHRoZSBmaWxlIGFuZCBwYXJzZSBlYWNoIGxpbmUgKi8KKy1pbnQgcGFfY29uZmlnX3BhcnNlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBGSUxFICpmLCBjb25zdCBwYV9jb25maWdfaXRlbSAqdCwgcGFfcHJvcGxpc3QgKnByb3BsaXN0LCB2b2lkICp1c2VyZGF0YSkgeworK2ludCBwYV9jb25maWdfcGFyc2UoY29uc3QgY2hhciAqZmlsZW5hbWUsIEZJTEUgKmYsIGNvbnN0IHBhX2NvbmZpZ19pdGVtICp0LCBwYV9wcm9wbGlzdCAqcHJvcGxpc3QsIGJvb2wgdXNlX2RvdF9kLAorKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICAgaW50IHIgPSAtMTsKKyAgICAgYm9vbCBkb19jbG9zZSA9ICFmOworICAgICBwYV9jb25maWdfcGFyc2VyX3N0YXRlIHN0YXRlOworQEAgLTE2Myw2ICsxNjksMzggQEAgaW50IHBhX2NvbmZpZ19wYXJzZShjb25zdCBjaGFyICpmaWxlbmFtZSwgRklMRSAqZiwgY29uc3QgcGFfY29uZmlnX2l0ZW0gKnQsIHBhX3AKKyAKKyAgICAgcGFfemVybyhzdGF0ZSk7CisgCisrICAgIGlmICh1c2VfZG90X2QpIHsKKysgICAgICAgIGNoYXIgKmRpcl9uYW1lOworKyAgICAgICAgaW50IG47CisrICAgICAgICBzdHJ1Y3QgZGlyZW50ICoqZW50cmllcyA9IE5VTEw7CisrCisrICAgICAgICBkaXJfbmFtZSA9IHBhX3NwcmludGZfbWFsbG9jKCIlcy5kIiwgZmlsZW5hbWUpOworKworKyAgICAgICAgbiA9IHNjYW5kaXIoZGlyX25hbWUsICZlbnRyaWVzLCBjb25mX2ZpbHRlciwgYWxwaGFzb3J0KTsKKysgICAgICAgIGlmIChuID49IDApIHsKKysgICAgICAgICAgICBpbnQgaTsKKysKKysgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisrICAgICAgICAgICAgICAgIGNoYXIgKmZpbGVuYW1lMjsKKysKKysgICAgICAgICAgICAgICAgZmlsZW5hbWUyID0gcGFfc3ByaW50Zl9tYWxsb2MoIiVzIiBQQV9QQVRIX1NFUCAiJXMiLCBkaXJfbmFtZSwgZW50cmllc1tpXS0+ZF9uYW1lKTsKKysgICAgICAgICAgICAgICAgcGFfY29uZmlnX3BhcnNlKGZpbGVuYW1lMiwgTlVMTCwgdCwgcHJvcGxpc3QsIGZhbHNlLCB1c2VyZGF0YSk7CisrICAgICAgICAgICAgICAgIHBhX3hmcmVlKGZpbGVuYW1lMik7CisrCisrICAgICAgICAgICAgICAgIGZyZWUoZW50cmllc1tpXSk7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIGZyZWUoZW50cmllcyk7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9FTlQpCisrICAgICAgICAgICAgICAgIHBhX2xvZ19kZWJ1Zygic2NhbmRpcihcIiVzXCIpIGZhaWxlZDogJXMiLCBkaXJfbmFtZSwgcGFfY3N0cmVycm9yKGVycm5vKSk7CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICBwYV9sb2dfd2Fybigic2NhbmRpcihcIiVzXCIpIGZhaWxlZDogJXMiLCBkaXJfbmFtZSwgcGFfY3N0cmVycm9yKGVycm5vKSk7CisrICAgICAgICB9CisrCisrICAgICAgICBwYV94ZnJlZShkaXJfbmFtZSk7CisrICAgIH0KKysKKyAgICAgaWYgKCFmICYmICEoZiA9IHBhX2ZvcGVuX2Nsb2V4ZWMoZmlsZW5hbWUsICJyIikpKSB7CisgICAgICAgICBpZiAoZXJybm8gPT0gRU5PRU5UKSB7CisgICAgICAgICAgICAgcGFfbG9nX2RlYnVnKCJGYWlsZWQgdG8gb3BlbiBjb25maWd1cmF0aW9uIGZpbGUgJyVzJzogJXMiLCBmaWxlbmFtZSwgcGFfY3N0cmVycm9yKGVycm5vKSk7CitkaWZmIC0tZ2l0IGEvc3JjL3B1bHNlY29yZS9jb25mLXBhcnNlci5oIGIvc3JjL3B1bHNlY29yZS9jb25mLXBhcnNlci5oCitpbmRleCBkYmI2ZjVjLi5jYzIwZDdkIDEwMDY0NAorLS0tIGEvc3JjL3B1bHNlY29yZS9jb25mLXBhcnNlci5oCisrKysgYi9zcmMvcHVsc2Vjb3JlL2NvbmYtcGFyc2VyLmgKK0BAIC01OSw2ICs1OSwxMSBAQCBzdHJ1Y3QgcGFfY29uZmlnX3BhcnNlcl9zdGF0ZSB7CisgICogcGFfY29uZmlnX2l0ZW1zIGluICp0IHRoYXQgaXMgdGVybWluYXRlZCBieSBhbiBpdGVtIHdoZXJlIGx2YWx1ZSBpcworICAqIE5VTEwuCisgICoKKysgKiBJZiB1c2VfZG90X2QgaXMgdHJ1ZSwgdGhlbiBiZWZvcmUgcGFyc2luZyB0aGUgZmlsZSBuYW1lZCBieSB0aGUgZmlsZW5hbWUKKysgKiBhcmd1bWVudCwgdGhlIGZ1bmN0aW9uIHdpbGwgcGFyc2UgYWxsIGZpbGVzIGVuZGluZyB3aXRoICIuY29uZiIgaW4KKysgKiBhbHBoYWJldGljYWwgb3JkZXIgZnJvbSBhIGRpcmVjdG9yeSB3aG9zZSBuYW1lIGlzIGZpbGVuYW1lICsgIi5kIiwgaWYgc3VjaAorKyAqIGRpcmVjdG9yeSBleGlzdHMuCisrICoKKyAgKiBTb21lIGNvbmZpZ3VyYXRpb24gZmlsZXMgbWF5IGNvbnRhaW4gYSBQcm9wZXJ0aWVzIHNlY3Rpb24sIHdoaWNoCisgICogaXMgYSBiaXQgc3BlY2lhbC4gTm9ybWFsbHkgYWxsIGFjY2VwdGVkIGx2YWx1ZXMgbXVzdCBiZSBwcmVkZWZpbmVkCisgICogaW4gdGhlIHBhX2NvbmZpZ19pdGVtIHRhYmxlLCBidXQgaW4gdGhlIFByb3BlcnRpZXMgc2VjdGlvbiB0aGUKK0BAIC02OCw3ICs3Myw4IEBAIHN0cnVjdCBwYV9jb25maWdfcGFyc2VyX3N0YXRlIHsKKyAgKiBwcm9wZXJ0aWVzLCBhbmQgdGhvc2UgcHJvcGVydGllcyB3aWxsIGJlIG1lcmdlZCBpbnRvIHRoZSBnaXZlbgorICAqIHByb3BsaXN0LiBJZiBwcm9wbGlzdCBpcyBOVUxMLCB0aGVuIHNlY3Rpb25zIG5hbWVkICJQcm9wZXJ0aWVzIgorICAqIGFyZSBub3QgYWxsb3dlZCBhdCBhbGwgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4gKi8KKy1pbnQgcGFfY29uZmlnX3BhcnNlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBGSUxFICpmLCBjb25zdCBwYV9jb25maWdfaXRlbSAqdCwgcGFfcHJvcGxpc3QgKnByb3BsaXN0LCB2b2lkICp1c2VyZGF0YSk7CisraW50IHBhX2NvbmZpZ19wYXJzZShjb25zdCBjaGFyICpmaWxlbmFtZSwgRklMRSAqZiwgY29uc3QgcGFfY29uZmlnX2l0ZW0gKnQsIHBhX3Byb3BsaXN0ICpwcm9wbGlzdCwgYm9vbCB1c2VfZG90X2QsCisrICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyZGF0YSk7CisgCisgLyogR2VuZXJpYyBwYXJzZXJzIGZvciBpbnRlZ2Vycywgc2l6ZV90LCBib29sZWFucyBhbmQgc3RyaW5ncyAqLworIGludCBwYV9jb25maWdfcGFyc2VfaW50KHBhX2NvbmZpZ19wYXJzZXJfc3RhdGUgKnN0YXRlKTsKKy0tIAorMS45LjMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1wYWRzcC1NYWtlLWl0LWNvbXBpbGUtb24tbXVzbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDEtcGFkc3AtTWFrZS1pdC1jb21waWxlLW9uLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU1NTk5NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDEtcGFkc3AtTWFrZS1pdC1jb21waWxlLW9uLW11c2wucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorRnJvbSBmNmFiM2MzYWE3YTE4NDFjOGFkZDA0ODI4MDI5MzU2ZDJhOGM4OGU3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNiBBcHIgMjAxNSAyMTo1NjozMSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBwYWRzcDogTWFrZSBpdCBjb21waWxlIG9uIG11c2wKKworYnJlYWsgYXNzdW1wdGlvbnMgb24gZ2xpYmMgYW5kIHRoZXJlIGlzIG5vIHN0YXQ2NCBvbiBub24KK2dsaWJjIEMgbGlicmFyaWVzCisKK1NlZSBwdWxzZWF1ZGlvIGJ1ZworCitodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD04NTMxOQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvdXRpbHMvcGFkc3AuYyB8IDE1ICsrKysrKysrKy0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvdXRpbHMvcGFkc3AuYyBiL3NyYy91dGlscy9wYWRzcC5jCitpbmRleCBlNjEzNzNjLi42ODQ3MjFhIDEwMDY0NAorLS0tIGEvc3JjL3V0aWxzL3BhZHNwLmMKKysrKyBiL3NyYy91dGlscy9wYWRzcC5jCitAQCAtMjM2OCw3ICsyMzY4LDcgQEAgZmFpbDoKKyAgICAgcmV0dXJuIHJldDsKKyB9CisgCistI2lmZGVmIHN1bgorKyNpZm5kZWYgX19HTElCQ19fCisgaW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QsIC4uLikgeworICNlbHNlCisgaW50IGlvY3RsKGludCBmZCwgdW5zaWduZWQgbG9uZyByZXF1ZXN0LCAuLi4pIHsKK0BAIC0yNTA4LDEwICsyNTA4LDEzIEBAIGludCBzdGF0KGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBzdHJ1Y3Qgc3RhdCAqYnVmKSB7CisgCisgICAgIHJldHVybiAwOworIH0KKy0KKyAjaWZkZWYgSEFWRV9PUEVONjQKKy0KKysjdW5kZWYgc3RhdDY0CisrI2lmZGVmIF9fR0xJQkNfXworIGludCBzdGF0NjQoY29uc3QgY2hhciAqcGF0aG5hbWUsIHN0cnVjdCBzdGF0NjQgKmJ1ZikgeworKyNlbHNlCisraW50IHN0YXQ2NChjb25zdCBjaGFyICpwYXRobmFtZSwgc3RydWN0IHN0YXQgKmJ1ZikgeworKyNlbmRpZgorICAgICBzdHJ1Y3Qgc3RhdCBvbGRidWY7CisgICAgIGludCByZXQ7CisgCitAQCAtMjU0NCw3ICsyNTQ3LDcgQEAgaW50IHN0YXQ2NChjb25zdCBjaGFyICpwYXRobmFtZSwgc3RydWN0IHN0YXQ2NCAqYnVmKSB7CisgCisgICAgIHJldHVybiAwOworIH0KKy0KKysjdW5kZWYgb3BlbjY0CisgaW50IG9wZW42NChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pIHsKKyAgICAgdmFfbGlzdCBhcmdzOworICAgICBtb2RlX3QgbW9kZSA9IDA7CitAQCAtMjY3MCw4ICsyNjczLDggQEAgRklMRSogZm9wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpIHsKKyB9CisgCisgI2lmZGVmIEhBVkVfT1BFTjY0CistCistRklMRSAqZm9wZW42NChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSkgeworKyN1bmRlZiBmb3BlbjY0CisrRklMRSAqZm9wZW42NChjb25zdCBjaGFyICpfX3Jlc3RyaWN0IGZpbGVuYW1lLCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0IG1vZGUpIHsKKyAKKyAgICAgZGVidWcoREVCVUdfTEVWRUxfVkVSQk9TRSwgX19GSUxFX18iOiBmb3BlbjY0KCVzKVxuIiwgZmlsZW5hbWU/ZmlsZW5hbWU6Ik5VTEwiKTsKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vZml4LWdpdC12ZXJzaW9uLWdlbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvL2ZpeC1naXQtdmVyc2lvbi1nZW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ5NDI1MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvL2ZpeC1naXQtdmVyc2lvbi1nZW4ucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorZ2l0LXZlcnNpb24tZ2VuIGdldHMgY29uZnVzZWQgaWYgYSB0YXJiYWxsIGlzIGJlaW5nIGJ1aWx0IGluc2lkZSBhIGdpdCBkaXJlY3RvcnkKKyhpZSB5b3VyIGJ1aWxkIGRpcmVjdG9yeSBpcyBhIHN1YmRpcmVjdG9yeSBvZiBhIHBva3kgY2xvbmUpLCBhbmQgZW5kcyB1cCBjYWxsaW5nCit0aGUgcmVsZWFzZSA2LjAtZGlydHkuICBBZGQgYSBzaG9ydGN1dCBleGl0IHNvIGlmIGEgdGFyYmFsbCBpcyBkZXRlY3RlZCBpdAorZG9lc24ndCBhdHRlbXB0IHRvIGxvb2sgYXQgdGhlIGdpdCBzdGF0dXMuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIChodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD05MDkzNikKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9naXQtdmVyc2lvbi1nZW4gYi9naXQtdmVyc2lvbi1nZW4KK2luZGV4IDc1NDY4ODQuLjA3OWI5M2UgMTAwNzU1CistLS0gYS9naXQtdmVyc2lvbi1nZW4KKysrKyBiL2dpdC12ZXJzaW9uLWdlbgorQEAgLTg0LDcgKzg0LDEwIEBAIHRoZW4KKyAgICAgdj1gY2F0ICR0YXJiYWxsX3ZlcnNpb25fZmlsZWAgfHwgZXhpdCAxCisgICAgIGNhc2UgJHYgaW4KKyAJKiRubCopIHY9IDs7ICMgcmVqZWN0IG11bHRpLWxpbmUgb3V0cHV0CistCVswLTldKikgOzsKKysJWzAtOV0qKQorKwkJZWNobyAiJHYiIHwgdHIgLWQgJ1wwMTInCisrCQlleGl0IDAKKysJCTs7CisgCSopIHY9IDs7CisgICAgIGVzYWMKKyAgICAgdGVzdCAteiAiJHYiIFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvL3ZvbGF0aWxlcy4wNF9wdWxzZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvL3ZvbGF0aWxlcy4wNF9wdWxzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjE5OTgwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vdm9sYXRpbGVzLjA0X3B1bHNlCkBAIC0wLDAgKzEsMiBAQAorIyA8dHlwZT4gPG93bmVyPiA8Z3JvdXA+IDxtb2RlPiA8cGF0aD4gPGxpbmtzb3VyY2U+CitkIHB1bHNlIHB1bHNlIDA3NTUgL3Zhci9ydW4vcHVsc2Ugbm9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW9fNi4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW9fNi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZTkwOTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpb182LjAuYmIKQEAgLTAsMCArMSwxNiBAQAorcmVxdWlyZSBwdWxzZWF1ZGlvLmluYworCitTUkNfVVJJID0gImh0dHA6Ly9mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvcHVsc2VhdWRpby9yZWxlYXNlcy8ke0JQfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1wYWRzcC1NYWtlLWl0LWNvbXBpbGUtb24tbXVzbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNsaWVudC1jb25mLUFkZC1hbGxvdy1hdXRvc3Bhd24tZm9yLXJvb3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25mLXBhcnNlci1hZGQtc3VwcG9ydC1mb3ItLmQtZGlyZWN0b3JpZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWdpdC12ZXJzaW9uLWdlbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly92b2xhdGlsZXMuMDRfcHVsc2UgXAorIgorU1JDX1VSSVttZDVzdW1dID0gImI2OTFlODNiNzQzNGM2NzhkZmZhY2ZhM2EwMjc3NTBlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI1MDY0MGUwYjgwYjE2MDc2MDBhY2NmYWQyZTQ1YWFiYjc5ZDM3OWJmNjM1NGM5NjcxZWZhMjA2NTQ3N2Y2ZjYiCisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKyAgICBta2RpciAtcCAke1N9L2xpYmx0ZGwKKyAgICBjcCAke1NUQUdJTkdfTElCRElSfS9saWJsdGRsKiAke1N9L2xpYmx0ZGwKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc2JjL3NiY18xLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3NiYy9zYmNfMS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkN2YzMWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3NiYy9zYmNfMS4zLmJiCkBAIC0wLDAgKzEsMTYgQEAKK1NVTU1BUlkgPSAiU0JDIEF1ZGlvIENvZGVjIgorREVTQ1JJUFRJT04gPSAiQmx1ZXRvb3RoIGxvdy1jb21wbGV4aXR5LCBzdWJiYW5kIGNvZGVjIChTQkMpIGxpYnJhcnkuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93d3cuYmx1ZXoub3JnIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTEyZjg4NGQyYWUxZmY4N2MwOWU1YjdjY2MyYzRjYTdlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NiYy9zYmMuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTI2O21kNT0wZjU3ZDBkZjIyYjBkNDA3NDZiZGQyOTgwNWE0MzYxYiIKKworREVQRU5EUyA9ICJsaWJzbmRmaWxlMSIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L2JsdWV0b290aC8ke0JQfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyZDhiNzg0MWYyYzExYWIyODc3MThkNTYyZjJiOTgxYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlNjEwMjJjZjU3NmYxNDE5MDI0MWU3MDcxNzUzZmRhY2RjZTVkMWRlYTg5ZmZkNzA0MTEwZmM1MGJlNjg5MzA5IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc3BlZXgvc3BlZXhfMS4ycmMyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zcGVleC9zcGVleF8xLjJyYzIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdkMjNkYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc3BlZXgvc3BlZXhfMS4ycmMyLmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiU3BlZWNoIEF1ZGlvIENvZGVjIgorREVTQ1JJUFRJT04gPSAiU3BlZXggaXMgYW4gT3BlbiBTb3VyY2UvRnJlZSBTb2Z0d2FyZSBwYXRlbnQtZnJlZSBhdWRpbyBjb21wcmVzc2lvbiBmb3JtYXQgZGVzaWduZWQgZm9yIHNwZWVjaC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnNwZWV4Lm9yZyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MzE0NjQ5ZDhiYTlkZDcwNDVkZmI2NjgzZjI5OGQwYTggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9zcGVleC9zcGVleC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MzQ7bWQ1PWVmOGM4ZWE0ZjcxOThkNzFjZjM1MDljNmVkMDVlYTUwIgorREVQRU5EUyA9ICJsaWJvZ2cgc3BlZXhkc3AiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy51cy54aXBoLm9yZy9yZWxlYXNlcy9zcGVleC9zcGVleC0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2YWU3ZGIzYmFiMDFlMWQ0Yjg2YmFjZmE4Y2EzM2U4MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjYWEyN2M3MjQ3ZmYxNWM4NTIxYzJhZTBlYTIxOTg3YzllOTcxMGE4ZjJkMzQ0OGU4Yjc5ZGE5ODA2YmNlODkxIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgbGliX3BhY2thZ2UKKworRVhUUkFfT0VDT05GID0gIlwKKyAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1RBUkdFVF9GUFUnLCAnc29mdCcsICctLWVuYWJsZS1maXhlZC1wb2ludCAtLWRpc2FibGUtZmxvYXQtYXBpIC0tZGlzYWJsZS12YnInLCAnJywgZCl9IFwKKyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc3BlZXgvc3BlZXhkc3AvMDAwMS1Eb24tdC1yZWx5LW9uLUhBVkVfU1RESU5UX0gtZXQtYWwuLWJlaW5nLWRlZmluZWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3NwZWV4L3NwZWV4ZHNwLzAwMDEtRG9uLXQtcmVseS1vbi1IQVZFX1NURElOVF9ILWV0LWFsLi1iZWluZy1kZWZpbmVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MDY3ZGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3NwZWV4L3NwZWV4ZHNwLzAwMDEtRG9uLXQtcmVseS1vbi1IQVZFX1NURElOVF9ILWV0LWFsLi1iZWluZy1kZWZpbmVkLnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK0Zyb20gYzczMzcwY2VhZmQxMzhiZWNlZThjYTNjNjg4YmE3NTc1NjgzMGJmZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPgorRGF0ZTogU3VuLCA1IEp1bCAyMDE1IDE3OjQ4OjE2ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIERvbid0IHJlbHkgb24gSEFWRV9TVERJTlRfSCBldCBhbC4gYmVpbmcgZGVmaW5lZAorCitOb3QgZXZlcnlvbmUgd2hvIGluY2x1ZGVzIHNwZWV4ZHNwX2NvbmZpZ190eXBlcy5oIHdpbGwgaGF2ZSBhIHRlc3QKK3doaWNoIGRlZmluZXMgdGhvc2UsIGFuZCBpZiB3ZSd2ZSBjaG9zZW4gdG8gdXNlIHRoZSBzdGRpbnQgdHlwZXMgYXQKK2NvbmZpZ3VyZSB0aW1lIHRoZW4gd2Uga25vdyBleGFjdGx5IHdoaWNoIGhlYWRlcihzKSBhcmUgYXZhaWxhYmxlLCBzbworanVzdCBjaG9vc2UgdGhlIGJlc3Qgb25lIHRoZW4gYW5kIGdlbmVyYXRlIHRoZSBoZWFkZXIgdG8gdXNlIGl0LgorCitUaGlzIHBhdGNoLCBpbmNsdWRpbmcgdGhlIGFib3ZlIHRleHQsIGlzIGNvcGllZCBmcm9tIGEgY29tbWl0IGluIHRoZQorc3BlZXggcmVwb3NpdG9yeVsxXS4gVGhlIG9yaWdpbmFsIGNvbW1pdCBmb3Igc3BlZXggd2FzIG1hZGUgYnkgUm9uCis8cm9uQGRlYmlhbi5vcmc+LgorCitbMV0gaHR0cHM6Ly9naXQueGlwaC5vcmcvP3A9c3BlZXguZ2l0O2E9Y29tbWl0ZGlmZjtoPTc3NGM4N2Q2Y2I3ZGQ4ZGFiZGQxNzY3N2ZjNmRhNzUzZWNmNGFhODcKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2ICsrKysrKworIGluY2x1ZGUvc3BlZXgvc3BlZXhkc3BfY29uZmlnX3R5cGVzLmguaW4gfCA4ICstLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDJjZDJkMWUuLjFkZTBjMjMgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTMzNCw2ICszMzQsMTIgQEAgQUNfU1VCU1QoW1VTSVpFMTZdKQorIEFDX1NVQlNUKFtTSVpFMzJdKQorIEFDX1NVQlNUKFtVU0laRTMyXSkKKyAKKytBU19JRihbdGVzdCAiJGFjX2N2X2hlYWRlcl9zdGRpbnRfaCIgPSAieWVzIl0sICAgIFtJTkNMVURFX1NURElOVD0iI2luY2x1ZGUgPHN0ZGludC5oPiJdLAorKyAgICAgIFt0ZXN0ICIkYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2giID0gInllcyJdLCAgW0lOQ0xVREVfU1RESU5UPSIjaW5jbHVkZSA8aW50dHlwZXMuaD4iXSwKKysgICAgICBbdGVzdCAiJGFjX2N2X2hlYWRlcl9zeXNfdHlwZXNfaCIgPSAieWVzIl0sIFtJTkNMVURFX1NURElOVD0iI2luY2x1ZGUgPHN5cy90eXBlcy5oPiJdKQorKworK0FDX1NVQlNUKFtJTkNMVURFX1NURElOVF0pCisrCisgQUNfQ09ORklHX0ZJTEVTKFsKKyAgICAgICAgICAgIE1ha2VmaWxlIGxpYnNwZWV4ZHNwL01ha2VmaWxlIGRvYy9NYWtlZmlsZSBTcGVleERTUC5zcGVjCisgICAgICAgICAgICBpbmNsdWRlL01ha2VmaWxlIGluY2x1ZGUvc3BlZXgvTWFrZWZpbGUgc3BlZXhkc3AucGMKK2RpZmYgLS1naXQgYS9pbmNsdWRlL3NwZWV4L3NwZWV4ZHNwX2NvbmZpZ190eXBlcy5oLmluIGIvaW5jbHVkZS9zcGVleC9zcGVleGRzcF9jb25maWdfdHlwZXMuaC5pbgoraW5kZXggMDJiODJmZC4uNWVhN2I1NSAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvc3BlZXgvc3BlZXhkc3BfY29uZmlnX3R5cGVzLmguaW4KKysrKyBiL2luY2x1ZGUvc3BlZXgvc3BlZXhkc3BfY29uZmlnX3R5cGVzLmguaW4KK0BAIC0xLDEzICsxLDcgQEAKKyAjaWZuZGVmIF9fU1BFRVhfVFlQRVNfSF9fCisgI2RlZmluZSBfX1NQRUVYX1RZUEVTX0hfXworIAorLSNpZiBkZWZpbmVkIEhBVkVfU1RESU5UX0gKKy0jICBpbmNsdWRlIDxzdGRpbnQuaD4KKy0jZWxpZiBkZWZpbmVkIEhBVkVfSU5UVFlQRVNfSAorLSMgIGluY2x1ZGUgPGludHR5cGVzLmg+CistI2VsaWYgZGVmaW5lZCBIQVZFX1NZU19UWVBFU19ICistIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2VuZGlmCisrQElOQ0xVREVfU1RESU5UQAorIAorIHR5cGVkZWYgQFNJWkUxNkAgc3B4X2ludDE2X3Q7CisgdHlwZWRlZiBAVVNJWkUxNkAgc3B4X3VpbnQxNl90OworLS0gCisxLjkuMworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3NwZWV4L3NwZWV4ZHNwXzEuMnJjMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc3BlZXgvc3BlZXhkc3BfMS4ycmMzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMWFjZWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3NwZWV4L3NwZWV4ZHNwXzEuMnJjMy5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIkEgcGF0ZW50LWZyZWUgRFNQIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJTcGVleERTUCBpcyBhIHBhdGVudC1mcmVlLCBPcGVuIFNvdXJjZS9GcmVlIFNvZnR3YXJlIERTUCBsaWJyYXJ5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuc3BlZXgub3JnIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zMTQ2NDlkOGJhOWRkNzA0NWRmYjY2ODNmMjk4ZDBhOCIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnhpcGgub3JnL3JlbGVhc2VzL3NwZWV4L3NwZWV4ZHNwLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLURvbi10LXJlbHktb24tSEFWRV9TVERJTlRfSC1ldC1hbC4tYmVpbmctZGVmaW5lZC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjcwZDlkMzExODRmN2ViNzYxMTkyZmQxZWYwYjczMzMzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjRhZTY4ODYwMDAzOWY1ZDIyNGJkZjJlMjIyZDJmYmRlNjU2MDg0NDdlNGMyZjY4MTU4NWU0ZGNhNmRmNjkyZjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiXAorICAgICAgICAtLWRpc2FibGUtZXhhbXBsZXMgXAorICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnVEFSR0VUX0ZQVScsICdzb2Z0JywgJy0tZW5hYmxlLWZpeGVkLXBvaW50IC0tZGlzYWJsZS1mbG9hdC1hcGknLCAnJywgZCl9IFwKKyIKKworIyBXb3JrYXJvdW5kIGZvciBhIGJ1aWxkIGZhaWx1cmUgd2hlbiBidWlsZGluZyB3aXRoIE1BQ0hJTkU9cWVtdWFybTY0LiBJIHRoaW5rCisjIGFhcmNoNjQgaXMgc3VwcG9zZWQgdG8gc3VwcG9ydCBORU9OIGp1c3QgZmluZSwgYnV0IGJ1aWxkaW5nIGZvciBxZW11YXJtNjQKKyMgZmFpbHMgaW4gTkVPTiBjb2RlOgorIworIyAuLi4vc3BlZXhkc3AtMS4ycmMzL2xpYnNwZWV4ZHNwL3Jlc2FtcGxlX25lb24uaDoxNDg6NTogZXJyb3I6IGltcG9zc2libGUgY29uc3RyYWludCBpbiAnYXNtJworIyAgICAgIGFzbSB2b2xhdGlsZSAoIiAgY21wICVbbGVuXSwgIzBcbiIKKyMgICAgICBeCisjCisjIEkgc2VudCBhbiBlbWFpbCBhYm91dCB0aGUgaXNzdWUgdG8gc3BlZXgtZGV2LiBBdCB0aGUgdGltZSBvZiB3cml0aW5nIHRoZXJlCisjIGFyZSBubyByZXNwb25zZXMgeWV0OgorIyBodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLmF1ZGlvLmNvbXByZXNzaW9uLnNwZWV4LmRldmVsLzczNjAKK0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnYWFyY2g2NCcsICctLWRpc2FibGUtbmVvbicsICcnLCBkKX0iCisKKyMgc3BlZXhkc3Agd2FzIHNwbGl0IG9mZiBmcm9tIHNwZWV4IGluIDEuMnJjMi4gT2xkZXIgdmVyc2lvbnMgb2Ygc3BlZXggY2FuJ3QKKyMgYmUgaW5zdGFsbGVkIHRvZ2V0aGVyIHdpdGggc3BlZXhkc3AsIHNpbmNlIHRoZXkgY29udGFpbiBvdmVybGFwcGluZyBmaWxlcy4KK1JDT05GTElDVFNfJHtQTn0gPSAic3BlZXggKDwgMS4ycmMyKSIKK1JDT05GTElDVFNfJHtQTn0tZGJnID0gInNwZWV4LWRiZyAoPCAxLjJyYzIpIgorUkNPTkZMSUNUU18ke1BOfS1kZXYgPSAic3BlZXgtZGV2ICg8IDEuMnJjMikiCitSQ09ORkxJQ1RTXyR7UE59LXN0YXRpY2RldiA9ICJzcGVleC1zdGF0aWNkZXYgKDwgMS4ycmMyKSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvdHJlbW9yL3RyZW1vci9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3RyZW1vci90cmVtb3Ivb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNTEwMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3RyZW1vci90cmVtb3Ivb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL3RyYWMueGlwaC5vcmcvdGlja2V0LzE5MjJdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitJbmRleDogY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY29uZmlndXJlLmluCShyZXZpc2lvbiAxODc2NCkKKysrKyBjb25maWd1cmUuaW4JKHdvcmtpbmcgY29weSkKK0BAIC05LDcgKzksNyBAQAorIEFDX0NBTk9OSUNBTF9IT1NUCisgQUNfQ0FOT05JQ0FMX1RBUkdFVAorCistQU1fQ09ORklHX0hFQURFUihbY29uZmlnLmhdKQorK0FDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaF0pCisKKyBBTV9JTklUX0FVVE9NQUtFKGxpYnZvcmJpc2lkZWMsMS4yLjEpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3RyZW1vci90cmVtb3IvdHJlbW9yLWFybS10aHVtYjIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3RyZW1vci90cmVtb3IvdHJlbW9yLWFybS10aHVtYjIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA0OTU0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvdHJlbW9yL3RyZW1vci90cmVtb3ItYXJtLXRodW1iMi5wYXRjaApAQCAtMCwwICsxLDEwNCBAQAorRnJvbTogWGluIE91eWFuZyA8WGluLk91eWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAxNiBKdWwgMjAxMiAxMzoyOTozNCArMDgwMAorU3ViamVjdDogW1BBVENIXSB0cmVtb3I6IGFkZCBJVCBpbnN0cnVjdGlvbnMgZm9yIGFybSB0aHVtYjIgdHVuZSBmbGFncy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luIFRodW1iLTIsIG1vc3QgaW5zdHJ1Y3Rpb25zIGRvIG5vdCBoYXZlIGEgYnVpbHQgaW4gY29uZGl0aW9uIGNvZGUgKGV4Y2VwdCBmb3IgCitjb25kaXRpb25hbCBicmFuY2hlcykuIEluc3RlYWQsIHNob3J0IHNlcXVlbmNlcyBvZiBpbnN0cnVjdGlvbnMgd2hpY2ggYXJlIHRvIGJlIAorZXhlY3V0ZWQgY29uZGl0aW9uYWxseSBjYW4gYmUgcHJlY2VkZWQgYnkgYSBzcGVjaWFsICJJVCBpbnN0cnVjdGlvbiIgd2hpY2ggCitkZXNjcmliZXMgdGhlIGNvbmRpdGlvbiBhbmQgd2hpY2ggb2YgdGhlIGZvbGxvd2luZyBpbnN0cnVjdGlvbnMgc2hvdWxkIGJlIAorZXhlY3V0ZWQgaWYgdGhlIGNvbmRpdGlvbiBpcyBmYWxzZSByZXNwZWN0aXZlbHkuIAorCitGb3IgdGhlIEFSTS9UaHVtYiBJVChJZi1UaGVuKSBpbnN0cnVjdGlvbjoKK2h0dHA6Ly9pbmZvY2VudGVyLmFybS5jb20vaGVscC9pbmRleC5qc3A/dG9waWM9L2NvbS5hcm0uZG9jLmR1aTA0ODljL0NqYWJpY2NpLmh0bWwKKworU2lnbmVkLW9mZi1ieTogWGluIE91eWFuZyA8WGluLk91eWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgYXNtX2FybS5oIHwgICAxNCArKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9hc21fYXJtLmggYi9hc21fYXJtLmgKK2luZGV4IGMzYmRhMDAuLjgyM2M1NGYgMTAwNzU1CistLS0gYS9hc21fYXJtLmgKKysrKyBiL2FzbV9hcm0uaAorQEAgLTEwOCw5ICsxMDgsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIFhOUFJPRDMxKG9nZ19pbnQzMl90ICBhLCBvZ2dfaW50MzJfdCAgYiwKKyBzdGF0aWMgaW5saW5lIG9nZ19pbnQzMl90IENMSVBfVE9fMTUob2dnX2ludDMyX3QgeCkgeworICAgaW50IHRtcDsKKyAgIGFzbSB2b2xhdGlsZSgic3VicwklMSwgJTAsICMzMjc2OFxuXHQiCisrCSAgICAgICAiaXR0ICAgICBwbFxuXHQiCisgCSAgICAgICAibW92cGwJJTAsICMweDdmMDBcblx0IgorIAkgICAgICAgIm9ycnBsCSUwLCAlMCwgIzB4ZmZcbiIKKyAJICAgICAgICJhZGRzCSUxLCAlMCwgIzMyNzY4XG5cdCIKKysJICAgICAgICJpdCAgICAgIG1pXG5cdCIKKyAJICAgICAgICJtb3ZtaQklMCwgIzB4ODAwMCIKKyAJICAgICAgIDogIityIih4KSwiPXIiKHRtcCkKKyAJICAgICAgIDoKK0BAIC0xMzksMTAgKzE0MSwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbHNwX2xvb3BfYXNtKG9nZ191aW50MzJfdCAqcWlwLG9nZ191aW50MzJfdCAqcGlwLAorICAgICAgIAorICAgICAgICJsZG1kYiAgIHIwISx7cjEscjN9OyIKKyAgICAgICAic3VicyAgICByMSxyMSwlNDsiICAgICAgICAgIC8vaWxzcFtqXS13aQorKyAgICAgICJpdCAgICAgIG1pOyIKKyAgICAgICAicnNibWkgICByMSxyMSwjMDsiICAgICAgICAgIC8vbGFicyhpbHNwW2pdLXdpKQorICAgICAgICJ1bXVsbCAgICUwLHIyLHIxLCUwOyIgICAgICAgLy9xaSo9bGFicyhpbHNwW2pdLXdpKQorICAgICAgIAorICAgICAgICJzdWJzICAgIHIxLHIzLCU0OyIgICAgICAgICAgLy9pbHNwW2orMV0td2kKKysgICAgICAiaXQgICAgICBtaTsiCisgICAgICAgInJzYm1pICAgcjEscjEsIzA7IiAgICAgICAgICAvL2xhYnMoaWxzcFtqKzFdLXdpKQorICAgICAgICJ1bXVsbCAgICUxLHIzLHIxLCUxOyIgICAgICAgLy9waSo9bGFicyhpbHNwW2orMV0td2kpCisgICAgICAgCitAQCAtMTY3LDYgKzE3MSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBsc3BfbG9vcF9hc20ob2dnX3VpbnQzMl90ICpxaXAsb2dnX3VpbnQzMl90ICpwaXAsCisgICAgICAgIm1vdiAgICAgcjAsIzB4NDAwMDtcbiIKKyAgICAgICAKKyAgICAgICAic3VicyAgICByMSxyMSwlNDtcbiIgICAgICAgICAgLy9pbHNwW2pdLXdpCisrICAgICAgIml0ICAgICAgbWk7XG4iCisgICAgICAgInJzYm1pICAgcjEscjEsIzA7XG4iICAgICAgICAgIC8vbGFicyhpbHNwW2pdLXdpKQorICAgICAgICJ1bXVsbCAgICUwLHIyLHIxLCUwO1xuIiAgICAgICAvL3FpKj1sYWJzKGlsc3Bbal0td2kpCisgICAgICAgInVtdWxsICAgJTEscjMscjAsJTE7XG4iICAgICAgIC8vcGkqPWxhYnMoaWxzcFtqKzFdLXdpKQorQEAgLTE5MCwxOCArMTk1LDIzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBsc3BfbG9vcF9hc20ob2dnX3VpbnQzMl90ICpxaXAsb2dnX3VpbnQzMl90ICpwaXAsCisgICAgICAgIm1vdiAgICAgcjIsIzA7IgorICAgICAgICJvcnIgICAgIHIxLCUwLCUxOyIKKyAgICAgICAidHN0ICAgICByMSwjMHhmZjAwMDAwMDsiCisrICAgICAgIml0dCAgICAgbmU7IgorICAgICAgICJhZGRuZSAgIHIyLHIyLCM4OyIKKyAgICAgICAibW92bmUgICByMSxyMSxsc3IgIzg7IgorICAgICAgICJ0c3QgICAgIHIxLCMweDAwZjAwMDAwOyIKKysgICAgICAiaXR0ICAgICBuZTsiCisgICAgICAgImFkZG5lICAgcjIscjIsIzQ7IgorICAgICAgICJtb3ZuZSAgIHIxLHIxLGxzciAjNDsiCisgICAgICAgInRzdCAgICAgcjEsIzB4MDAwYzAwMDA7IgorKyAgICAgICJpdHQgICAgIG5lOyIKKyAgICAgICAiYWRkbmUgICByMixyMiwjMjsiCisgICAgICAgIm1vdm5lICAgcjEscjEsbHNyICMyOyIKKyAgICAgICAidHN0ICAgICByMSwjMHgwMDAyMDAwMDsiCisrICAgICAgIml0dCAgICAgbmU7IgorICAgICAgICJhZGRuZSAgIHIyLHIyLCMxOyIKKyAgICAgICAibW92bmUgICByMSxyMSxsc3IgIzE7IgorICAgICAgICJ0c3QgICAgIHIxLCMweDAwMDEwMDAwOyIKKysgICAgICAiaXQgICAgICBuZTsiCisgICAgICAgImFkZG5lICAgcjIscjIsIzE7IgorICAgICAgICJtb3YgICAgICUwLCUwLGxzciByMjsiCisgICAgICAgIm1vdiAgICAgJTEsJTEsbHNyIHIyOyIKK0BAIC0yMjIsMTUgKzIzMiwxOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbHNwX25vcm1fYXNtKG9nZ191aW50MzJfdCAqcWlwLG9nZ19pbnQzMl90ICpxZXhwcCl7CisgICBvZ2dfaW50MzJfdCBxZXhwPSpxZXhwcDsKKyAKKyAgIGFzbSgidHN0ICAgICAlMCwjMHgwMDAwZmYwMDsiCisrICAgICAgIml0dCAgICAgZXE7IgorICAgICAgICJtb3ZlcSAgICUwLCUwLGxzbCAjODsiCisgICAgICAgInN1YmVxICAgJTEsJTEsIzg7IgorICAgICAgICJ0c3QgICAgICUwLCMweDAwMDBmMDAwOyIKKysgICAgICAiaXR0ICAgICBlcTsiCisgICAgICAgIm1vdmVxICAgJTAsJTAsbHNsICM0OyIKKyAgICAgICAic3ViZXEgICAlMSwlMSwjNDsiCisgICAgICAgInRzdCAgICAgJTAsIzB4MDAwMGMwMDA7IgorKyAgICAgICJpdHQgICAgIGVxOyIKKyAgICAgICAibW92ZXEgICAlMCwlMCxsc2wgIzI7IgorICAgICAgICJzdWJlcSAgICUxLCUxLCMyOyIKKyAgICAgICAidHN0ICAgICAlMCwjMHgwMDAwODAwMDsiCisrICAgICAgIml0dCAgICAgZXE7IgorICAgICAgICJtb3ZlcSAgICUwLCUwLGxzbCAjMTsiCisgICAgICAgInN1YmVxICAgJTEsJTEsIzE7IgorICAgICAgIDogIityIihxaSksIityIihxZXhwKQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvdHJlbW9yL3RyZW1vcl8yMDE1MDEwNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvdHJlbW9yL3RyZW1vcl8yMDE1MDEwNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mzc4OTRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS90cmVtb3IvdHJlbW9yXzIwMTUwMTA3LmJiCkBAIC0wLDAgKzEsMjcgQEAKK1NVTU1BUlkgPSAiRml4ZWQtcG9pbnQgZGVjb2RlciIKK0RFU0NSSVBUSU9OID0gInRyZW1vciBpcyBhIGZpeGVkIHBvaW50IGltcGxlbWVudGF0aW9uIG9mIHRoZSB2b3JiaXMgY29kZWMuIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kYjFiN2E2NjhiMmE2ZjQ3YjJhZjg4ZmIwMDhhZDU1NSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9vcy5oO2JlZ2lubGluZT0zO2VuZGxpbmU9MTQ7bWQ1PTVjMGFmNWUxYmVkZWYzY2U4MTc4Yzg5ZjQ4Y2Q2ZjFmIgorREVQRU5EUyA9ICJsaWJvZ2ciCitTUkNEQVRFID0gIiR7UFZ9IgorUFIgPSAicjEiCisKKyMgU1ZOIHN1cHBvcnQgZm9yIHVwc3RyZWFtIHZlcnNpb24gY2hlY2sgaXNuJ3QgaW1wbGVtZW50ZWQgeWV0CitSRUNJUEVfVVBTVFJFQU1fVkVSU0lPTiA9ICIyMDE1MDEwNyIKK1JFQ0lQRV9VUFNUUkVBTV9EQVRFID0gIkphbiAwNywgMjAxNSIKK0NIRUNLX0RBVEUgPSAiQXVnIDEyLCAyMDE1IgorCitTUkNfVVJJID0gInN2bjovL3N2bi54aXBoLm9yZy90cnVuazttb2R1bGU9VHJlbW9yO3Jldj0xOTQyNztwcm90b2NvbD1odHRwIFwKKyAgICAgICAgICAgZmlsZTovL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaDtzdHJpcGxldmVsPTAgXAorICAgICAgICAgICBmaWxlOi8vdHJlbW9yLWFybS10aHVtYjIucGF0Y2ggXAorIgorCitTID0gIiR7V09SS0RJUn0vVHJlbW9yIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNoYXJlZCIKKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3dlYnAvbGlid2VicF8wLjQuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvd2VicC9saWJ3ZWJwXzAuNC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YjgwZjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3dlYnAvbGlid2VicF8wLjQuMy5iYgpAQCAtMCwwICsxLDQ3IEBACitTVU1NQVJZID0gIldlYlAgaXMgYW4gaW1hZ2UgZm9ybWF0IGRlc2lnbmVkIGZvciB0aGUgV2ViIgorREVTQ1JJUFRJT04gPSAiV2ViUCBpcyBhIG1ldGhvZCBvZiBsb3NzeSBhbmQgbG9zc2xlc3MgY29tcHJlc3Npb24gdGhhdCBjYW4gYmUgXAorICAgICAgICAgICAgICAgdXNlZCBvbiBhIGxhcmdlIHZhcmlldHkgb2YgcGhvdG9ncmFwaGljLCB0cmFuc2x1Y2VudCBhbmQgXAorICAgICAgICAgICAgICAgZ3JhcGhpY2FsIGltYWdlcyBmb3VuZCBvbiB0aGUgd2ViLiBUaGUgZGVncmVlIG9mIGxvc3N5IFwKKyAgICAgICAgICAgICAgIGNvbXByZXNzaW9uIGlzIGFkanVzdGFibGUgc28gYSB1c2VyIGNhbiBjaG9vc2UgdGhlIHRyYWRlLW9mZiBcCisgICAgICAgICAgICAgICBiZXR3ZWVuIGZpbGUgc2l6ZSBhbmQgaW1hZ2UgcXVhbGl0eS4gV2ViUCB0eXBpY2FsbHkgYWNoaWV2ZXMgXAorICAgICAgICAgICAgICAgYW4gYXZlcmFnZSBvZiAzMCUgbW9yZSBjb21wcmVzc2lvbiB0aGFuIEpQRUcgYW5kIEpQRUcgMjAwMCwgXAorICAgICAgICAgICAgICAgd2l0aG91dCBsb3NzIG9mIGltYWdlIHF1YWxpdHkuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vc3BlZWQvd2VicC8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NmU4ZGVlOTMyYzI2ZjJkYWI1MDNhYmY3MGM5NmQ4YmIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vUEFURU5UUzttZDU9YWQyNTgwYWVlMzU0Njg2NzVjNDRkN2JlYmJhNjVjYTgiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy53ZWJtcHJvamVjdC5vcmcvcmVsZWFzZXMvd2VicC8ke0JQfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiMDg4MTM1MjVlZWVmZmU3ZTMwNWI0Y2JmYWRlOGFlOWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWZiZTBkNThmZGE5MzZmMmVkOTlkMGI4MzdlZDcwODdkMDY0ZDY4Mzg5MzFmMjgyYzQ2MThkMmEzZjczOTBjNCIKKworRVhUUkFfT0VDT05GID0gIiBcCisgICAgLS1kaXNhYmxlLWV4cGVyaW1lbnRhbCBcCisgICAgLS1kaXNhYmxlLXdpYyBcCisgICAgLS1lbmFibGUtbGlid2VicG11eCBcCisgICAgLS1lbmFibGUtbGlid2VicGRlbXV4IFwKKyAgICAtLWVuYWJsZS10aHJlYWRpbmcgXAorIgorCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZQorCitQQUNLQUdFQ09ORklHID8/PSAiIgorCisjIGxpYndlYnBkZWNvZGVyIGlzIGEgc3Vic2V0IG9mIGxpYndlYnAsIGRvbid0IGJ1aWxkIGl0IHVubGVzcyByZXF1ZXN0ZWQKK1BBQ0tBR0VDT05GSUdbZGVjb2Rlcl0gPSAiLS1lbmFibGUtbGlid2VicGRlY29kZXIsLS1kaXNhYmxlLWxpYndlYnBkZWNvZGVyIgorCisjIEFwcGx5IGZvciBleGFtcGxlcyBwcm9ncmFtczogY3dlYnAgYW5kIGR3ZWJwCitQQUNLQUdFQ09ORklHW2dpZl0gPSAiLS1lbmFibGUtZ2lmLC0tZGlzYWJsZS1naWYsZ2lmbGliIgorUEFDS0FHRUNPTkZJR1tqcGVnXSA9ICItLWVuYWJsZS1qcGVnLC0tZGlzYWJsZS1qcGVnLGpwZWciCitQQUNLQUdFQ09ORklHW3BuZ10gPSAiLS1lbmFibGUtcG5nLC0tZGlzYWJsZS1wbmcsLGxpYnBuZyIKK1BBQ0tBR0VDT05GSUdbdGlmZl0gPSAiLS1lbmFibGUtdGlmZiwtLWRpc2FibGUtdGlmZix0aWZmIgorCisjIEFwcGx5IG9ubHkgZm9yIGV4YW1wbGUgcHJvZ3JhbSB2d2VicAorUEFDS0FHRUNPTkZJR1tnbF0gPSAiLS1lbmFibGUtZ2wsLS1kaXNhYmxlLWdsLG1lc2EtZ2x1dCIKKworUEFDS0FHRVMgPSsgIiR7UE59LWdpZjJ3ZWJwIgorCitERVNDUklQVElPTl8ke1BOfS1naWYyd2VicCA9ICJTaW1wbGUgdG9vbCB0byBjb252ZXJ0IGFuaW1hdGVkIEdJRnMgdG8gV2ViUCIKK0ZJTEVTXyR7UE59LWdpZjJ3ZWJwID0gIiR7YmluZGlyfS9naWYyd2VicCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEveDI2NC94MjY0L2Rvbi10LWRlZmF1bHQtdG8tY29ydGV4LWE5LXdpdGgtbmVvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEveDI2NC94MjY0L2Rvbi10LWRlZmF1bHQtdG8tY29ydGV4LWE5LXdpdGgtbmVvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjcyZmNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS94MjY0L3gyNjQvZG9uLXQtZGVmYXVsdC10by1jb3J0ZXgtYTktd2l0aC1uZW9uLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKKy1tYXJjaCBmbGFnIGlzIG5vdCBpbiBDRkxBR1Mgc28gdGhpcyB3aWxsIGFsd2F5cyBkZWZhdWx0IHRvIC1tY3B1PWNvcnRleC1hOAorLW1mcHU9bmVvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDI5MTYwMzYuLmY0ZWNlNDAgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTc3Myw5ICs3NzMsNiBAQCBpZiBbICRhc20gPSBhdXRvIC1hIFwoICRBUkNIID0gWDg2IC1vICRBUkNIID0gWDg2XzY0IFwpIF0gOyB0aGVuCisgZmkKKyAKKyBpZiBbICRhc20gPSBhdXRvIC1hICRBUkNIID0gQVJNIF0gOyB0aGVuCistICAgICMgc2V0IGZsYWdzIHNvIG5lb24gaXMgYnVpbHQgYnkgZGVmYXVsdAorLSAgICBlY2hvICRDRkxBR1MgfCBncmVwIC1FcSAnKC1tY3B1fC1tYXJjaHwtbWZwdSknIHx8IENGTEFHUz0iJENGTEFHUyAtbWNwdT1jb3J0ZXgtYTggLW1mcHU9bmVvbiIKKy0KKyAgICAgaWYgIGNjX2NoZWNrICcnICcnICdfX2FzbV9fKCJyZXYgaXAsIGlwIik7JyA7IHRoZW4gICAgICBkZWZpbmUgSEFWRV9BUk1WNgorICAgICAgICAgY2NfY2hlY2sgJycgJycgJ19fYXNtX18oIm1vdnQgcjAsICMwIik7JyAgICAgICAgICYmIGRlZmluZSBIQVZFX0FSTVY2VDIKKyAgICAgICAgIGNjX2NoZWNrICcnICcnICdfX2FzbV9fKCJ2YWRkLmkxNiBxMCwgcTAsIHEwIik7JyAmJiBkZWZpbmUgSEFWRV9ORU9OCitAQCAtNzg4LDggKzc4NSw2IEBAIGlmIFsgJGFzbSA9IGF1dG8gLWEgJEFSQ0ggPSBBUk0gXSA7IHRoZW4KKyBmaQorIAorIGlmIFsgJGFzbSA9IGF1dG8gLWEgJEFSQ0ggPSBBQVJDSDY0IF0gOyB0aGVuCistICAgICMgc2V0IGZsYWdzIHNvIG5lb24gaXMgYnVpbHQgYnkgZGVmYXVsdAorLSAgICBlY2hvICRDRkxBR1MgfCBncmVwIC1FcSAnKC1tY3B1fC1tYXJjaHwtbWZwdXwtYXJjaCknIHx8IENGTEFHUz0iJENGTEFHUyAtYXJjaCBhcm02NCAtbWZwdT1uZW9uIgorIAorICAgICBpZiAgY2NfY2hlY2sgJycgJycgJ19fYXNtX18oImNtZXEgdjAuOGgsIHYwLjhoLCAjMCIpOycgOyB0aGVuIGRlZmluZSBIQVZFX05FT04KKyAgICAgICAgIEFTRkxBR1M9IiRBU0ZMQUdTIC1jIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS94MjY0L3gyNjRfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS94MjY0L3gyNjRfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNjk5MDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3gyNjQveDI2NF9naXQuYmIKQEAgLTAsMCArMSw1NSBAQAorU1VNTUFSWSA9ICJILjI2NC9NUEVHLTQgQVZDIHZpZGVvIGVuY29kZXIiCitERVNDUklQVElPTiA9ICJBIGZyZWUgc29mdHdhcmUgbGlicmFyeSBhbmQgYXBwbGljYXRpb24gZm9yIGVuY29kaW5nIHZpZGVvIHN0cmVhbXMgaW50byB0aGUgSC4yNjQvTVBFRy00IEFWQyBmb3JtYXQuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy52aWRlb2xhbi5vcmcvZGV2ZWxvcGVycy94MjY0Lmh0bWwiCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworREVQRU5EUyA9ICJ5YXNtLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQudmlkZW9sYW4ub3JnL3gyNjQuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2Rvbi10LWRlZmF1bHQtdG8tY29ydGV4LWE5LXdpdGgtbmVvbi5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDUkVWID0gImM4YTc3M2ViZmNhMTQ4ZWYwNGY1YTYwZDQyY2JkNzMzNmFmMGJhZjYiCisKK1BWID0gInIyNDkxK2dpdCR7U1JDUFZ9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGxpYl9wYWNrYWdlIHBrZ2NvbmZpZyBwZXJsbmF0aXZlCisKK1gyNjRfRElTQUJMRV9BU00gPSAiIgorWDI2NF9ESVNBQkxFX0FTTV9hcm12NCA9ICItLWRpc2FibGUtYXNtIgorWDI2NF9ESVNBQkxFX0FTTV9hcm12NSA9ICItLWRpc2FibGUtYXNtIgorWDI2NF9ESVNBQkxFX0FTTV9wb3dlcnBjID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInNwZSIsICItLWRpc2FibGUtYXNtIiwgIiIsIGQpfSIKKworRVhUUkFfT0VDT05GID0gJy0tcHJlZml4PSR7cHJlZml4fSBcCisgICAgICAgICAgICAgICAgLS1ob3N0PSR7SE9TVF9TWVN9IFwKKyAgICAgICAgICAgICAgICAtLWxpYmRpcj0ke2xpYmRpcn0gXAorICAgICAgICAgICAgICAgIC0tY3Jvc3MtcHJlZml4PSR7VEFSR0VUX1BSRUZJWH0gXAorICAgICAgICAgICAgICAgIC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLXNoYXJlZCBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtc3RhdGljIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtbGF2ZiBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXN3c2NhbGUgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLXBpYyBcCisgICAgICAgICAgICAgICAgJHtYMjY0X0RJU0FCTEVfQVNNfSBcCisgICAgICAgICAgICAgICAnCisKK2RvX2NvbmZpZ3VyZSgpIHsKKyAgICAuL2NvbmZpZ3VyZSAke0VYVFJBX09FQ09ORn0KK30KKworIyBHZXQgcmlkIG9mIC1lCitFWFRSQV9PRU1BS0UgPSAiIgorQVMgPSAiJHtUQVJHRVRfUFJFRklYfWdjYyIKKworZG9faW5zdGFsbCgpIHsKKyAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9Cit9CisKKyMgUElDIGNhbid0IGJlIGVuYWJsZWQgZm9yIDMyLWJpdCB4ODYKK0lOU0FORV9TS0lQXyR7UE59X2FwcGVuZF94ODYgPSAiIHRleHRyZWwiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L2ltYWdlcy9xdDRlLWRlbW8taW1hZ2UuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9pbWFnZXMvcXQ0ZS1kZW1vLWltYWdlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NTE4NDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9pbWFnZXMvcXQ0ZS1kZW1vLWltYWdlLmJiCkBAIC0wLDAgKzEsMTQgQEAKK0RFU0NSSVBUSU9OID0gIkFuIGltYWdlIHRoYXQgd2lsbCBsYXVuY2ggaW50byB0aGUgZGVtbyBhcHBsaWNhdGlvbiBmb3IgdGhlIGVtYmVkZGVkIChub3QgYmFzZWQgb24gWDExKSB2ZXJzaW9uIG9mIFF0LiIKK0xJQ0VOU0UgPSAiTUlUIgorUFIgPSAicjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitJTUFHRV9JTlNUQUxMICs9ICJcCisJJHtDT1JFX0lNQUdFX0JBU0VfSU5TVEFMTH0gXAorCXBhY2thZ2Vncm91cC1jb3JlLXF0NGUgXAorIgorCitpbmhlcml0IGNvcmUtaW1hZ2UKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvbWV0YS9tZXRhLXRvb2xjaGFpbi1xdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L21ldGEvbWV0YS10b29sY2hhaW4tcXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEwMTAzYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L21ldGEvbWV0YS10b29sY2hhaW4tcXQuYmIKQEAgLTAsMCArMSw1IEBACisjIFF0IHRvb2xjaGFpbgorUVROQU1FID0gInF0IgorUVRfRElSX05BTUUgPSAicXQ0IgorCityZXF1aXJlIG1ldGEtdG9vbGNoYWluLXF0LmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvbWV0YS9tZXRhLXRvb2xjaGFpbi1xdC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9tZXRhL21ldGEtdG9vbGNoYWluLXF0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTc1ZDkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvbWV0YS9tZXRhLXRvb2xjaGFpbi1xdC5pbmMKQEAgLTAsMCArMSwzNSBAQAorVE9PTENIQUlOX0hPU1RfVEFTSyA9ICJuYXRpdmVzZGstcGFja2FnZWdyb3VwLSR7UVROQU1FfS10b29sY2hhaW4taG9zdCBwYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4tJHtNQUNISU5FfSIKK1RPT0xDSEFJTl9UQVJHRVRfVEFTSyA9ICJwYWNrYWdlZ3JvdXAtJHtRVE5BTUV9LXRvb2xjaGFpbi10YXJnZXQiCitUT09MQ0hBSU5fT1VUUFVUTkFNRSA9ICIke1NES19OQU1FfS10b29sY2hhaW4tJHtRVE5BTUV9LSR7RElTVFJPX1ZFUlNJT059IgorCityZXF1aXJlIHJlY2lwZXMtY29yZS9tZXRhL21ldGEtdG9vbGNoYWluLmJiCisKK1FUX1RPT0xTX1BSRUZJWCA9ICIkT0VDT1JFX05BVElWRV9TWVNST09UJHtiaW5kaXJfbmF0aXZlc2RrfSIKKworY3JlYXRlX3Nka19maWxlc19hcHBlbmQoKSB7CisgICAgbWtkaXIgLXAgJHtTREtfT1VUUFVUfSR7U0RLUEFUSE5BVElWRX0vZW52aXJvbm1lbnQtc2V0dXAuZC8KKyAgICBzY3JpcHQ9JHtTREtfT1VUUFVUfSR7U0RLUEFUSE5BVElWRX0vZW52aXJvbm1lbnQtc2V0dXAuZC8ke1FUX0RJUl9OQU1FfS5zaAorCisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX0NGTEFHUz0iJENGTEFHUyInID4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9DWFhGTEFHUz0iJENYWEZMQUdTIicgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9MREZMQUdTPSIkTERGTEFHUyInID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfQ0M9JENDJyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX0NYWD0kQ1hYJyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX0xJTks9JENYWCcgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9BUj0kQVInID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfTElCRElSX1FUPSRPRUNPUkVfVEFSR0VUX1NZU1JPT1Qke2xpYmRpcn0nID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfSU5DRElSX1FUPSRPRUNPUkVfVEFSR0VUX1NZU1JPT1Qke2luY2x1ZGVkaXJ9LyR7UVRfRElSX05BTUV9JyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX01PQz0ke1FUX1RPT0xTX1BSRUZJWH0vbW9jNCcgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9VSUM9JHtRVF9UT09MU19QUkVGSVh9L3VpYzQnID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfVUlDMz0ke1FUX1RPT0xTX1BSRUZJWH0vdWljMzQnID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfUkNDPSR7UVRfVE9PTFNfUFJFRklYfS9yY2M0JyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX1FEQlVTQ1BQMlhNTD0ke1FUX1RPT0xTX1BSRUZJWH0vcWRidXNjcHAyeG1sNCcgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9RREJVU1hNTDJDUFA9JHtRVF9UT09MU19QUkVGSVh9L3FkYnVzeG1sMmNwcDQnID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfUVRfQ09ORklHPSRPRUNPUkVfVEFSR0VUX1NZU1JPT1Qke2RhdGFkaXJ9LyR7UVRfRElSX05BTUV9L21rc3BlY3MvcWNvbmZpZy5wcmknID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgUU1BS0VTUEVDPSRPRUNPUkVfVEFSR0VUX1NZU1JPT1Qke2RhdGFkaXJ9LyR7UVRfRElSX05BTUV9L21rc3BlY3MvbGludXgtZysrJyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IFFUX0NPTkZfUEFUSD0kT0VDT1JFX05BVElWRV9TWVNST09UJHtzeXNjb25mZGlyfS9xdC5jb25mJyA+PiAkc2NyaXB0CisKKyAgICAjIG1ha2UgYSBzeW1ib2xpYyBsaW5rIHRvIG1rc3BlY3MgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBRdCBTREsKKyAgICAjIGFuZCBRdCBDcmVhdG9yCisgICAgKGNkICR7U0RLX09VVFBVVH0vJHtTREtQQVRITkFUSVZFfSR7YmluZGlyX25hdGl2ZXNka30vLi47IGxuIC1zICR7U0RLVEFSR0VUU1lTUk9PVH0vdXNyL3NoYXJlLyR7UVRfRElSX05BTUV9L21rc3BlY3MgbWtzcGVjczspCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9tZXRhL21ldGEtdG9vbGNoYWluLXF0ZS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L21ldGEvbWV0YS10b29sY2hhaW4tcXRlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMTNmNDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9tZXRhL21ldGEtdG9vbGNoYWluLXF0ZS5iYgpAQCAtMCwwICsxLDYgQEAKKyMgUXQgRW1iZWRkZWQgdG9vbGNoYWluCitQUiA9ICJyNiIKK1FUTkFNRSA9ICJxdGUiCitRVF9ESVJfTkFNRSA9ICJxdG9waWEiCisKK3JlcXVpcmUgbWV0YS10b29sY2hhaW4tcXQuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLWhvc3QuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLWhvc3QuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk1Y2M1ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1xdC10b29sY2hhaW4taG9zdC5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1xdC10b29sY2hhaW4taG9zdC5pbmMKKworU1VNTUFSWSA9ICJIb3N0IHBhY2thZ2VzIGZvciBRdCBTREsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLWhvc3QuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9uYXRpdmVzZGstcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi1ob3N0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2MyNzVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9uYXRpdmVzZGstcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi1ob3N0LmluYwpAQCAtMCwwICsxLDYgQEAKK3JlcXVpcmUgcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1zZGstaG9zdC5iYgorCitERVNDUklQVElPTiA9ICJIb3N0IHBhY2thZ2VzIGZvciBRdCBFbWJlZGRlZCBTREsiCitMSUNFTlNFID0gIk1JVCIKKworUkRFUEVORFNfJHtQTn0gKz0gIm5hdGl2ZXNkay1xdDQtdG9vbHMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtcXRlLXRvb2xjaGFpbi1ob3N0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9uYXRpdmVzZGstcGFja2FnZWdyb3VwLXF0ZS10b29sY2hhaW4taG9zdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTZlNGI4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9uYXRpdmVzZGstcGFja2FnZWdyb3VwLXF0ZS10b29sY2hhaW4taG9zdC5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1xdC10b29sY2hhaW4taG9zdC5pbmMKKworU1VNTUFSWSA9ICJIb3N0IHBhY2thZ2VzIGZvciBRdCBFbWJlZGRlZCBTREsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXF0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1xdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODFmOGEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1xdC5iYgpAQCAtMCwwICsxLDIyIEBACisjCisjIENvcHlyaWdodCAoQykgMjAxMCAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyMKKworU1VNTUFSWSA9ICJRdCBwYWNrYWdlIGdyb3VwcyIKK0xJQ0VOU0UgPSAiTUlUIgorUFIgPSAicjQiCisKKyMgUXQ0IGNvdWxkIE5PVCBiZSBidWlsdCBvbiBNSVBTNjQgd2l0aCA2NCBiaXRzIHVzZXJzcGFjZQorQ09NUEFUSUJMRV9IT1NUX21pcHM2NCA9ICJudWxsIgorCitpbmhlcml0IHBhY2thZ2Vncm91cCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgcXVpY2t5IGFuZCBmb3Rvd2FsbCByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitQQUNLQUdFUyA9ICIke1BOfS1kZW1vYXBwcyIKKworUVRERU1PUyA/PSAicXVpY2t5ICR7Q09NTUVSQ0lBTF9RVH0gZm90b3dhbGwiCisKK1NVTU1BUllfJHtQTn0tZGVtb2FwcHMgPSAiUXQgZGVtbyBhcHBsaWNhdGlvbnMiCitSREVQRU5EU18ke1BOfS1kZW1vYXBwcyA9ICIke1FUREVNT1N9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1xdDRlLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1xdDRlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNWZhMWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXF0NGUuYmIKQEAgLTAsMCArMSw1MiBAQAorU1VNTUFSWSA9ICJRdCBmb3IgRW1iZWRkZWQgTGludXggKFF0IHdpdGhvdXQgWDExKSIKK1BSID0gInIyIgorTElDRU5TRSA9ICJNSVQiCisKKyMgUXQ0IGNvdWxkIE5PVCBiZSBidWlsdCBvbiBNSVBTNjQgd2l0aCA2NCBiaXRzIHVzZXJzcGFjZQorQ09NUEFUSUJMRV9IT1NUX21pcHM2NCA9ICJudWxsIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitUT1VDSCA9ICcgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAidG91Y2hzY3JlZW4iLCAidHNsaWIgdHNsaWItY2FsaWJyYXRlIHRzbGliLXRlc3RzIiwgIiIsZCl9JworCitSREVQRU5EU18ke1BOfSA9ICIgXAorCXF0NC1lbWJlZGRlZCBcCisJbGlicXQtZW1iZWRkZWQzc3VwcG9ydDQgXAorCWxpYnF0LWVtYmVkZGVkY2x1Y2VuZTQgXAorCWxpYnF0LWVtYmVkZGVkY29yZTQgXAorCWxpYnF0LWVtYmVkZGVkZGJ1czQgXAorCWxpYnF0LWVtYmVkZGVkZ3VpNCBcCisJbGlicXQtZW1iZWRkZWRoZWxwNCBcCisJbGlicXQtZW1iZWRkZWRtdWx0aW1lZGlhNCBcCisJbGlicXQtZW1iZWRkZWRuZXR3b3JrNCBcCisJbGlicXQtZW1iZWRkZWRzY3JpcHQ0IFwKKwlsaWJxdC1lbWJlZGRlZHNjcmlwdHRvb2xzNCBcCisJbGlicXQtZW1iZWRkZWRzcWw0IFwKKwlsaWJxdC1lbWJlZGRlZHN2ZzQgXAorCWxpYnF0LWVtYmVkZGVkdGVzdDQgXAorCWxpYnF0LWVtYmVkZGVkd2Via2l0NCBcCisJbGlicXQtZW1iZWRkZWR4bWw0IFwKKwlxdDQtZW1iZWRkZWQtZm9udHMtdHRmLWRlamF2dSBcCisJcXQ0LWVtYmVkZGVkLWZvbnRzLXR0Zi12ZXJhIFwKKwlxdDQtZW1iZWRkZWQtcGx1Z2luLWljb25lbmdpbmUtc3ZnaWNvbiBcCisJcXQ0LWVtYmVkZGVkLXBsdWdpbi1pbWFnZWZvcm1hdC1naWYgXAorCXF0NC1lbWJlZGRlZC1wbHVnaW4taW1hZ2Vmb3JtYXQtaWNvIFwKKwlxdDQtZW1iZWRkZWQtcGx1Z2luLWltYWdlZm9ybWF0LWpwZWcgXAorCXF0NC1lbWJlZGRlZC1wbHVnaW4taW1hZ2Vmb3JtYXQtbW5nIFwKKwlxdDQtZW1iZWRkZWQtcGx1Z2luLWltYWdlZm9ybWF0LXN2ZyBcCisJcXQ0LWVtYmVkZGVkLXBsdWdpbi1pbWFnZWZvcm1hdC10aWZmIFwKKwlxdDQtZW1iZWRkZWQtcGx1Z2luLW1vdXNlZHJpdmVyLXRzbGliIFwKKwlxdDQtZW1iZWRkZWQtcGx1Z2luLXNjcmlwdC1kYnVzIFwKKwlxdDQtZW1iZWRkZWQtcGx1Z2luLXNxbGRyaXZlci1zcWxpdGUgXAorCSR7VE9VQ0h9IFwKKyAgICAgICAgcXQ0LWVtYmVkZGVkLWRlbW9zIFwKKyAgICAgICAgcXQ0LWVtYmVkZGVkLWV4YW1wbGVzIFwKKyAgICAgICAgcXQtZGVtby1pbml0IFwKKyAgICAgICAgcXQ0LWVtYmVkZGVkLWFzc2lzdGFudCBcCisiCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gIiBcCisJbGlicXQtZW1iZWRkZWR4bWxwYXR0ZXJuczQgXAorCXF0NC1lbWJlZGRlZC1wbHVnaW4tcGhvbm9uLWJhY2tlbmQtZ3N0cmVhbWVyIFwKKyIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLXRhcmdldC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi10YXJnZXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcyYzE1MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi10YXJnZXQuYmIKQEAgLTAsMCArMSwxNSBAQAorU1VNTUFSWSA9ICJUYXJnZXQgcGFja2FnZXMgZm9yIFF0IFNESyIKKworUVRMSUJQUkVGSVggPSAiIgorCityZXF1aXJlIHBhY2thZ2Vncm91cC1xdC10b29sY2hhaW4tdGFyZ2V0LmluYworCitpbmhlcml0IGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHF0NC14MTEtZnJlZQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworUkRFUEVORFNfJHtQTn0gKz0gIiBcCisgICAgICAgIHF0NC14MTEtZnJlZS1kZXYgXAorICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICdsaWJxdG9wZW5nbDQtZGV2JywgJycsIGQpfSBcCisgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbnZnJywgJ2xpYnF0b3BlbnZnNC1kZXYnLCAnJywgZCl9IFwKKyAgICAgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLXRhcmdldC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1xdC10b29sY2hhaW4tdGFyZ2V0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDk3ODJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLXRhcmdldC5pbmMKQEAgLTAsMCArMSwzOSBAQAorTElDRU5TRSA9ICJNSVQiCisKKyMgUXQ0IGNvdWxkIE5PVCBiZSBidWlsdCBvbiBNSVBTNjQgd2l0aCA2NCBiaXRzIHVzZXJzcGFjZQorQ09NUEFUSUJMRV9IT1NUX21pcHM2NCA9ICJudWxsIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitQQUNLQUdFR1JPVVBfRElTQUJMRV9DT01QTEVNRU5UQVJZID0gIjEiCisKK1JERVBFTkRTXyR7UE59ICs9ICIgXAorICAgICAgICBwYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQgXAorICAgICAgICBxdDQke1FUTElCUFJFRklYfS1ta3NwZWNzIFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfW11bHRpbWVkaWE0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH0zc3VwcG9ydDQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfWNsdWNlbmU0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1jb3JlNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9ZGJ1czQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfWRlc2lnbmVyY29tcG9uZW50czQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfWRlc2lnbmVyNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9dWl0b29sczQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfWd1aTQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfWhlbHA0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1uZXR3b3JrNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9c2NyaXB0NC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9c2NyaXB0dG9vbHM0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1zcWw0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1zdmc0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH10ZXN0NC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9d2Via2l0NC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9eG1sNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9ZGVjbGFyYXRpdmU0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH14bWxwYXR0ZXJuczQtZGV2IFwKKyAgICAgICAgbGlic3FsaXRlMy1kZXYgXAorICAgICAgICBleHBhdC1kZXYgXAorICAgICAgICAiCisKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICIgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9cGhvbm9uNC1kZXYgXAorICAgICAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1xdGUtdG9vbGNoYWluLXRhcmdldC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXF0ZS10b29sY2hhaW4tdGFyZ2V0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZWQyMzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1xdGUtdG9vbGNoYWluLXRhcmdldC5iYgpAQCAtMCwwICsxLDcgQEAKK1NVTU1BUlkgPSAiVGFyZ2V0IHBhY2thZ2VzIGZvciBRdCBFbWJlZGRlZCBTREsiCisKK1BSID0gInI3IgorCitRVExJQlBSRUZJWCA9ICItZW1iZWRkZWQiCisKK3JlcXVpcmUgcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi10YXJnZXQuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL2ZvdG93YWxsL0V4cG9ydFdpemFyZC1kZXBlbmRzLW9uLXVpX3dpemFyZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvZm90b3dhbGwvRXhwb3J0V2l6YXJkLWRlcGVuZHMtb24tdWlfd2l6YXJkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YjJiMjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL2ZvdG93YWxsL0V4cG9ydFdpemFyZC1kZXBlbmRzLW9uLXVpX3dpemFyZC5wYXRjaApAQCAtMCwwICsxLDE4IEBACitBcHAvRXhwb3J0V2l6YXJkLmNwcCBkZXBlbmRzIG9uIHdpemFyZC5oIHdoaWNoIGRlcGVuZHMgb24gdWlfd2l6YXJkLiBUaGUgbGFzdCBvbmUKK3Nob3VsZCBiZSBhbHJlYWR5IGdlbmVyYXRlZCBiZWZvcmUgY29tcGlsaW5nIEV4cG9ydFdpemFyZC5jcHAuCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogRm90b3dhbGwtMC45L0FwcC9FeHBvcnRXaXphcmQuY3BwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gRm90b3dhbGwtMC45Lm9yaWcvQXBwL0V4cG9ydFdpemFyZC5jcHAJMjAwOS0xMS0zMCAxMzoyMTozMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBGb3Rvd2FsbC0wLjkvQXBwL0V4cG9ydFdpemFyZC5jcHAJMjAxMi0wNS0xMCAxNzoxMjowNi43NjUyMzA4MzAgKzAzMDAKK0BAIC0yMyw2ICsyMyw3IEBACisgI2luY2x1ZGUgImltYWdlbG9hZGVycXQuaCIKKyAjaW5jbHVkZSAicG9zdGVyYXpvcmNvcmUuaCIKKyAjaW5jbHVkZSAid2l6YXJkLmgiCisrI2luY2x1ZGUgInVpX3dpemFyZC5oIgorIAorICNpbmNsdWRlIDxRRGVza3RvcFNlcnZpY2VzPgorICNpbmNsdWRlIDxRRGVza3RvcFdpZGdldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvZm90b3dhbGxfMC45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9mb3Rvd2FsbF8wLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FmMDI2NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvZm90b3dhbGxfMC45LmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiQ3JlYXRpdmUgcGhvdG8gZGlzcGxheSBhcHBsaWNhdGlvbiIKK0RFU0NSSVBUSU9OID0gIkZvdG93YWxsIGlzIGEgY3JlYXRpdmUgdG9vbCB0aGF0IGFsbG93cyB5b3UgdG8gbGF5b3V0IHlvdXIgcGhvdG9zIG9yIHBpY3R1cmVzIFwKK2luIGEgcGVyc29uYWwgd2F5LiBZb3UgY2FuIGFkZCBwaWN0dXJlcywgdGhlbiByZXNpemUsIG1vdmUsIGNoYW5nZSBjb2xvcnMsIHRleHQsIHNoYWRvd3MsIGV0Yy4uIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmVucmljb3Jvcy5jb20vb3BlbnNvdXJjZS9mb3Rvd2FsbCIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vR1BMX1YyO21kNT03OTgwODM5N2MzMzU1ZjE2M2MwMTI2MTYxMjVjOWUyNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9tYWluLmNwcDtiZWdpbmxpbmU9NjtlbmRsaW5lPTExO21kNT1iNTY5YWNjMmJmODk3NGEzMDgyYjU4ZmM1M2I5ZDhkYyIKK1NFQ1RJT04gPSAieDExL2FwcHMiCisKK1BSID0gInI0IgorCitTUkNSRVYgPSAiMDZkNWE0MTQyYzU5OTYwNGQ5YTlmZDY0NzI3YjY5NDVlYjhjZDNkYSIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9lbnJpY29yb3MvZm90b3dhbGwuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL0V4cG9ydFdpemFyZC1kZXBlbmRzLW9uLXVpX3dpemFyZC5wYXRjaCBcCisgICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBxdDR4MTEKKworRVhUUkFfUU1BS0VWQVJTX1BSRSA9ICJDT05GSUcrPW5vLXdlYmNhbSIKKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIElOU1RBTExfUk9PVD0ke0R9IGluc3RhbGwKK30KKworIyBFbnN1cmUgd2UgaGF2ZSBzb21lIHBsdWdpbnMgZm9yIHNvbWUgdXNlZnVsIGltYWdlIGZvcm1hdHMKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICJxdDQtcGx1Z2luLWltYWdlZm9ybWF0LWdpZiBxdDQtcGx1Z2luLWltYWdlZm9ybWF0LWpwZWcgcXQ0LXBsdWdpbi1pbWFnZWZvcm1hdC10aWZmIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9xbW1wL25vLWhvc3QtcGF0aHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL3FtbXAvbm8taG9zdC1wYXRocy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmI1YmIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9xbW1wL25vLWhvc3QtcGF0aHMucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorRG8gbm90IGluY2x1ZGUgL3Vzci9pbmNsdWRlIGhvc3QgcGF0aHMKKworVGhlc2Ugd2VyZSBhZGRlZCB1cHN0cmVhbSBhcHBhcmVudGx5IGZvciBmcmVlYnNkIHN1cHBvcnQsIGJ1dCB0cmlnZ2VyCitjb21waWxlciB3YXJuaW5ncyBkdXJpbmcgdGhlIGJ1aWxkIGFuZCBjb3VsZCBiZSBkYW5nZXJvdXMsIHNvIHJlbW92ZQordGhlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjcm9zc10KKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKK1VwZGF0ZSBwYXRjaCBmb3IgdmVyc2lvbiAwLjcuNC4KKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKKy0tLSBxbW1wLTAuNy40L0NNYWtlTGlzdHMudHh0CTIwMTQtMDEtMTAgMDk6NTk6NDQuOTcxODM3NzQ2ICswODAwCisrKysgcW1tcC0wLjcuNC9DTWFrZUxpc3RzLnR4dC5uZXcJMjAxNC0wMS0xMCAxMDoyNDo1MS44NTU4Mzc1NjYgKzA4MDAKK0BAIC0xLDkgKzEsNSBAQAorIGNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjYuMCkKKyAKKy0jZnJlZWJzZCBzdXBwb3J0CistaW5jbHVkZV9kaXJlY3RvcmllcyhTWVNURU0gL3Vzci9sb2NhbC9pbmNsdWRlKQorLVNFVChDTUFLRV9SRVFVSVJFRF9JTkNMVURFUyAke0NNQUtFX1JFUVVJUkVEX0lOQ0xVREVTfSAvdXNyL2xvY2FsL2luY2x1ZGUpCistCisgI2V4dHJhY3QgdmVyc2lvbiBmcm9tIHFtbXAuaAorIEZJTEUoU1RSSU5HUyAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3NyYy9xbW1wL3FtbXAuaCIKKyAgICAgIFFNTVBfVkVSU0lPTl9EQVRBIFJFR0VYICJeI2RlZmluZVsgXHRdK1FNTVBfVkVSU0lPTl9bQS1aXStbIFx0XStbMC05XSsuKiQiKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9xbW1wXzAuOC42LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9xbW1wXzAuOC42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OGFkMGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL3FtbXBfMC44LjYuYmIKQEAgLTAsMCArMSw3NiBAQAorU1VNTUFSWSA9ICJRdC1iYXNlZCBNdWx0aW1lZGlhIFBsYXllciIKK0RFU0NSSVBUSU9OID0gIlFtbXAgaXMgYW4gYXVkaW8gcGxheWVyLCB3cml0dGVuIHdpdGggdGhlIGhlbHAgb2YgdGhlIFF0IGxpYnJhcnkuIFRoZSB1c2VyIGludGVyZmFjZSBpcyBzaW1pbGFyIHRvIFdpbmFtcCBvciBYTU1TLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9xbW1wLnlsc29mdHdhcmUuY29tIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgorU0VDVElPTiA9ICJtdWx0aW1lZGlhIgorCitERVBFTkRTID0gInRhZ2xpYiBsaWJtYWQgbGlidm9yYmlzIGxpYm9nZyBhbHNhLWxpYiBsaWJzbmRmaWxlMSBsaWJzYW1wbGVyYXRlMCBjdXJsIgorCitTUkNfVVJJID0gImh0dHA6Ly9xbW1wLnlsc29mdHdhcmUuY29tL2ZpbGVzLyR7QlB9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vbm8taG9zdC1wYXRocy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjdlOTZlODljNjFiNzQzMmU1YTEyZjU1NWRiNzAyYjEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGRhZWEzZjBhMGRmN2IzNDA4OTUxM2MyYzU3NDEzYzgyODE2YWI4ODkyYmRkYWJmNDljMThhNzk1NjI1NTQ0OSIKK2luaGVyaXQgY21ha2UgcXQ0eDExCisKK1FNTVBfUExVR0lOX09QVElPTlMgPz89ICJcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFVTRV9NTVM6Qk9PTD1GQUxTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFVTRV9NUEM6Qk9PTD1GQUxTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFVTRV9NT0RQTFVHOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfV0FWUEFDSzpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX0ZGTVBFRzpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX0FBQzpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX0NEQTpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX01JREk6Qk9PTD1GQUxTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFVTRV9HTUU6Qk9PTD1GQUxTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFVTRV9PU1M0OkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfSkFDSzpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX0JTMkI6Qk9PTD1GQUxTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFVTRV9QUk9KRUNUTTpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX0VOQ0E6Qk9PTD1GQUxTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAiCisKK2V4cG9ydCBFWFRSQV9PRUNNQUtFID0gIi1EUVRfUU1BS0VfRVhFQ1VUQUJMRT0ke09FX1FNQUtFX1FNQUtFfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFFUX0xSRUxFQVNFX0VYRUNVVEFCTEU9JHtPRV9RTUFLRV9MUkVMRUFTRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgLURRVF9NT0NfRVhFQ1VUQUJMRT0ke09FX1FNQUtFX01PQ30gXAorICAgICAgICAgICAgICAgICAgICAgICAgLURRVF9VSUNfRVhFQ1VUQUJMRT0ke09FX1FNQUtFX1VJQ30gXAorICAgICAgICAgICAgICAgICAgICAgICAgLURRVF9SQ0NfRVhFQ1VUQUJMRT0ke09FX1FNQUtFX1JDQ30gXAorICAgICAgICAgICAgICAgICAgICAgICAgLURRVF9MSUJSQVJZX0RJUj0ke09FX1FNQUtFX0xJQkRJUl9RVH0gXAorICAgICAgICAgICAgICAgICAgICAgICAgLURRVF9IRUFERVJTX0RJUj0ke09FX1FNQUtFX0lOQ0RJUl9RVH0gXAorICAgICAgICAgICAgICAgICAgICAgICAgLURRVF9RVENPUkVfSU5DTFVERV9ESVI9JHtPRV9RTUFLRV9JTkNESVJfUVR9L1F0Q29yZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAke1FNTVBfUExVR0lOX09QVElPTlN9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICIKKworZG9fY29uZmlndXJlKCkgeworCSMgRW5zdXJlIHdlIGdldCB0aGUgY21ha2UgY29uZmlndXJlIGFuZCBub3QgcW1ha2UKKwljbWFrZV9kb19jb25maWd1cmUKK30KKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXnFtbXAtcGx1Z2luLS4qICIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIHFtbXBfbGliZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfS9xbW1wJykKKyAgICBnZCA9IGQuZXhwYW5kKCcke0R9LyR7bGliZGlyfS9xbW1wJykKKyAgICBwbHVnX2RpcnMgPSBvcy5saXN0ZGlyKGdkKQorCisgICAgZm9yIHBsdWdfZGlyIGluIHBsdWdfZGlyczoKKyAgICAgICAgZ19wbHVnX2RpciA9IG9zLnBhdGguam9pbihxbW1wX2xpYmRpcixwbHVnX2RpcikKKyAgICAgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgZ19wbHVnX2RpciwgJ15saWIoLiopXC5zbyQnLCAncW1tcC1wbHVnaW4tJyArIHBsdWdfZGlyLmxvd2VyKCkgKyAnLSVzJywgJ1FtbXAgJyArIHBsdWdfZGlyICArICcgcGx1Z2luIGZvciAlcycpCit9CisKK0ZJTEVTXyR7UE59ID0gIlwKKyAgICAgICAgICAgICAgICAke2JpbmRpcn0vcW1tcCBcCisgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYioke1NPTElCU30gXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vaWNvbnMvKiBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9xbW1wL2ltYWdlcy8qIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8qIFwKKyAgICAgICAgICAgICAgICAiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiXAorICAgICAgICAgICAgICAgICR7bGliZGlyfS9xbW1wLyovLmRlYnVnLyogXAorICAgICAgICAgICAgICAgIgorCitSREVQRU5EU18ke1BOfSArPSAidGFnbGliIGFsc2EtbGliIGxpYm1hZCBjdXJsIGxpYmljdWkxOG4iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL3F1aWNreV8wLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL3F1aWNreV8wLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNhYTU2MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvcXVpY2t5XzAuNC5iYgpAQCAtMCwwICsxLDE5IEBACitTVU1NQVJZID0gIkEgc2ltcGxlIG5vdGUtdGFraW5nIGFwcGxpY2F0aW9uIHdpdGggV2lraS1zdHlsZSBzeW50YXggYW5kIGJlaGF2aW91ciIKK0hPTUVQQUdFID0gImh0dHA6Ly9xdC1hcHBzLm9yZy9jb250ZW50L3Nob3cucGhwL1F1aWNreT9jb250ZW50PTgwMzI1IgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly92ZXJzaW9uLmg7ZW5kbGluZT0xOTttZDU9ODc4YmRhZmY0MzhkYWI4NjI5ODMwMWZkMWEyMTBlMTQiCitTRUNUSU9OID0gIngxMS9hcHBzIgorCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJodHRwOi8vcXQtYXBwcy5vcmcvQ09OVEVOVC9jb250ZW50LWZpbGVzLzgwMzI1LXF1aWNreS0wLjQudGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiODI0ZDllNDc3ZWU5YzQ5OTRmNzNhM2NiMjE1MTYxZDkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWM2NjM3NmUwMDM1ZDQ0NTQ3NjEyYmY2Mjk4OTA3NjlhNjE3OGMzZTdlYWZiY2Y5NWYxYzYyMDdhYzBmMzUyYSIKKworaW5oZXJpdCBxdDR4MTEKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS8ke0JQTn0gJHtEfSR7YmluZGlyfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQtZGVtby9xdC1kZW1vLWluaXQvcXRkZW1vLWluaXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdC1kZW1vL3F0LWRlbW8taW5pdC9xdGRlbW8taW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWYwMjczCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQtZGVtby9xdC1kZW1vLWluaXQvcXRkZW1vLWluaXQKQEAgLTAsMCArMSw1NSBAQAorIyEvYmluL3NoCisKK3NldCAtZQorCitpZiBbIC14IC91c3IvYmluL3F0ZGVtbyBdOyB0aGVuCisJUVRERU1PPSJxdGRlbW8iCitlbHNlCisJUVRERU1PPSJxdGRlbW9FIC1xd3MiCitmaQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisJZWNobyAiU3RhcnRpbmcgcXRkZW1vIgorCWlmIFsgLWYgL2V0Yy9wcm9maWxlLmQvdHNsaWIuc2ggXTsgdGhlbgorCQkuIC9ldGMvcHJvZmlsZS5kL3RzbGliLnNoCisJZmkKKwlpZiBbIC1lICIkVFNMSUJfVFNERVZJQ0UiIF07IHRoZW4KKwkJaWYgWyAhIC1mIC9ldGMvcG9pbnRlcmNhbCBdOyB0aGVuCisJCQkvdXNyL2Jpbi90c19jYWxpYnJhdGUKKwkJZmkKKwkJaWYgWyAiJFFUREVNTyIgPSAicXRkZW1vIiBdOyB0aGVuCisJCQlYb3JnICYKKwkJCWV4cG9ydCBESVNQTEFZPTowCisJCQkkUVRERU1PICYKKwkJZWxzZQorCQkJUVdTX01PVVNFX1BST1RPPXRzbGliOiRUU0xJQl9UU0RFVklDRSAkUVRERU1PICYKKwkJZmkKKwllbHNlCisJCWlmIFsgIiRRVERFTU8iID0gInF0ZGVtbyIgXTsgdGhlbgorCQkJWG9yZyAmCisJCQlleHBvcnQgRElTUExBWT06MAorCQlmaQorCQkkUVRERU1PICYKKwlmaQorCTs7CisgIHN0b3ApCisJZWNobyAiU3RvcHBpbmcgcXRkZW1vIgorCWlmIFsgIiRRVERFTU8iID0gInF0ZGVtbyIgXTsgdGhlbgorCQlraWxsYWxsIFhvcmcKKwkJa2lsbGFsbCBxdGRlbW8KKwllbHNlCisJCWtpbGxhbGwgcXRkZW1vRQorCWZpCisJOzsKKyAgcmVzdGFydCkKKwkkMCBzdG9wCisJJDAgc3RhcnQKKwk7OworICAqKQorCWVjaG8gInVzYWdlOiAkMCB7IHN0YXJ0IHwgc3RvcCB8IHJlc3RhcnQgfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdC1kZW1vL3F0LWRlbW8taW5pdF8wLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdC1kZW1vL3F0LWRlbW8taW5pdF8wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWExYjBiNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0LWRlbW8vcXQtZGVtby1pbml0XzAuMS5iYgpAQCAtMCwwICsxLDE5IEBACitTVU1NQVJZID0gIkluaXQgc2NyaXB0IGZvciBxdGRlbW8iCitMSUNFTlNFID0gIk1JVCIKK1NSQ19VUkkgPSAiZmlsZTovL3F0ZGVtby1pbml0IgorUFIgPSAicjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcXRkZW1vLWluaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3F0ZGVtbworfQorCitpbmhlcml0IHVwZGF0ZS1yYy5kIGFsbGFyY2gKKworSU5JVFNDUklQVF9OQU1FID0gInF0ZGVtbyIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDk5IDUgMiAuIHN0b3AgMTkgMCAxIDYgLiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC1ncmFwaGljcy1zeXN0ZW0vcXQ0LWdyYXBoaWNzLXN5c3RlbV8xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQtZ3JhcGhpY3Mtc3lzdGVtL3F0NC1ncmFwaGljcy1zeXN0ZW1fMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmM2YzZGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQtZ3JhcGhpY3Mtc3lzdGVtL3F0NC1ncmFwaGljcy1zeXN0ZW1fMS4wLmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiU2V0cyBkZWZhdWx0IFF0NCBHcmFwaGljcyBTeXN0ZW0gdG8gJHtRVF9HUkFQSElDU19TWVNURU19IgorU0VDVElPTiA9ICJ4MTEvYmFzZSIKK0xJQ0VOU0UgPSAiTUlULVgiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworUFIgPSAicjEiCisKK1FUX0dSQVBISUNTX1NZU1RFTSA/PSAicmFzdGVyIgorCitkZWYgX2dldF9leHRyYV9yZGVwZW5kcyhkKToKKyAgICBncyA9IGQuZ2V0VmFyKCdRVF9HUkFQSElDU19TWVNURU0nLCBUcnVlKQorICAgIGlmIGdzID09ICJvcGVuZ2wiOgorICAgICAgICByZXR1cm4gInF0NC1wbHVnaW4tZ3JhcGhpY3NzeXN0ZW1zLWdsZ3JhcGhpY3NzeXN0ZW0iCisKKyAgICByZXR1cm4gIiIKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vcHJvZmlsZS5kLworCWNmZ19maWxlPSR7RH0vJHtzeXNjb25mZGlyfS9wcm9maWxlLmQvcXQtZ3JhcGhpY3NzeXN0ZW0KKwllY2hvICJleHBvcnQgUVRfR1JBUEhJQ1NTWVNURU09JHtRVF9HUkFQSElDU19TWVNURU19IiA+ICRjZmdfZmlsZQorfQorCitSREVQRU5EU18ke1BOfSA9ICIke0BfZ2V0X2V4dHJhX3JkZXBlbmRzKGQpfSIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9uYXRpdmVzZGstcXQ0LXRvb2xzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9uYXRpdmVzZGstcXQ0LXRvb2xzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzcwMDhiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L25hdGl2ZXNkay1xdDQtdG9vbHMuaW5jCkBAIC0wLDAgKzEsMTI1IEBACitTVU1NQVJZID0gIlNESyB0b29scyBmb3IgUXQgdmVyc2lvbiA0LngiCitERVBFTkRTID0gIm5hdGl2ZXNkay16bGliIG5hdGl2ZXNkay1kYnVzIHF0NC1uYXRpdmUgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAndmlydHVhbC9uYXRpdmVzZGstbGlieDExJywgJycsIGQpfSIKK1NFQ1RJT04gPSAibGlicyIKK0hPTUVQQUdFID0gImh0dHA6Ly9xdC1wcm9qZWN0Lm9yZy8iCitMSUNFTlNFID0gIkxHUEx2Mi4xIHwgR1BMdjMiCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L3F0NC0ke1BWfToiCisKK2luaGVyaXQgbmF0aXZlc2RrIHFtYWtlMgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZC5xdC1wcm9qZWN0Lm9yZy9vZmZpY2lhbF9yZWxlYXNlcy9xdC80LjgvJHtQVn0vcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1xbGlicmFyeWluZm8tYWxsb3ctdG8tc2V0LXF0LmNvbmYtZnJvbS10aGUtb3V0c2lkZS11LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtY29uZmlndXJlLXFtYWtlLWlzLWFscmVhZHktYnVpbHQtaW4tcXQ0LXRvb2xzLW5hdGl2ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA1LWNvbmZpZ3VyZS1zZXQtTEZMQUdTLXRvLXBpY2stdXAtemxpYi1mcm9tLXN0YWdpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNi1jb25maWd1cmUtVXNlLU9FX1FNQUtFXy12YWx1ZXMtdG8tc3BlY2lmeS1RdC11dGlsaXR5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDctZGJ1cy1SZW1vdmUtY29uc3QtdXNhZ2UtdGhhdC1jYXVzZXMtY29tcGlsZS1mYWlsdXJlLS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA4LXFtYWtlLnByby1BbGxvdy1idWlsZGluZy1hLXNlcGFyYXRlLXFtYWtlLWZvci10aGUtdGEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZysrLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vbGludXguY29uZiIKKworUyA9ICIke1dPUktESVJ9L3F0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtJHtQVn0iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UuTEdQTDttZDU9ZmJjMDkzOTAxODU3ZmNkMTE4ZjA2NWY5MDA5ODJjMjQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRS5HUEwzO21kNT02ZTE2OTRlZTMzOGRiNDEwNDE3NTE3ODg0OTE4ZDRkMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9MR1BMX0VYQ0VQVElPTi50eHQ7bWQ1PTAxNDVjNGQxYjZmOTZhNjYxYzJjMTM5ZGZiMjY4ZmI2IgorCityZXF1aXJlIHF0NF9hcmNoLmluYworCisjIEZJWE1FOiBtYWtlIGl0IHdvcmsgd2l0aCAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3BrZy1jb25maWcgLS1jZmxhZ3MgZGJ1cy0xIgorRVhUUkFfT0VDT05GID0gIi1wcmVmaXggJHtwcmVmaXh9IFwKKyAgICAgICAgICAgICAgICAtcXQtbGlianBlZyAtc3lzdGVtLXpsaWIgXAorICAgICAgICAgICAgICAgIC1uby1saWJqcGVnIC1uby1saWJwbmcgLW5vLWxpYm1uZyAtbm8tbGlidGlmZiBcCisgICAgICAgICAgICAgICAgLW5vLWFjY2Vzc2liaWxpdHkgXAorICAgICAgICAgICAgICAgIC1uby1jdXBzIFwKKyAgICAgICAgICAgICAgICAtbm8tZXhjZXB0aW9ucyAgXAorICAgICAgICAgICAgICAgIC1uby1uYXMtc291bmQgXAorICAgICAgICAgICAgICAgIC1uby1uaXMgLW5vLW9wZW5zc2wgXAorICAgICAgICAgICAgICAgIC12ZXJib3NlIC1yZWxlYXNlIC1mYXN0IC1zdGF0aWMgXAorICAgICAgICAgICAgICAgIC1wbGF0Zm9ybSAke1RBUkdFVF9PU30tb2UtZysrIFwKKyAgICAgICAgICAgICAgICAteHBsYXRmb3JtICR7VEFSR0VUX09TfS1vZS1nKysgXAorICAgICAgICAgICAgICAgIC1hcmNoICR7UVRfQVJDSH0gXAorICAgICAgICAgICAgICAgIC1lbWJlZGRlZCAtbm8tZnJlZXR5cGUgLW5vLWdsaWIgLW5vLWljb252IFwKKyAgICAgICAgICAgICAgICAtcXQzc3VwcG9ydCBcCisgICAgICAgICAgICAgICAgLUkke1NUQUdJTkdfRElSX0hPU1R9JHtTREtQQVRITkFUSVZFfS91c3IvaW5jbHVkZS9kYnVzLTEuMCBcCisgICAgICAgICAgICAgICAgLUkke1NUQUdJTkdfRElSX0hPU1R9JHtTREtQQVRITkFUSVZFfS91c3IvbGliL2RidXMtMS4wL2luY2x1ZGUiCisKKyMgeWFuayBkZWZhdWx0IC1lLCBvdGhlcndpc2Ugd2UgZ2V0IHRoZSBmb2xsb3dpbmcgZXJyb3I6CisjIG1vY19xYnVmZmVyLmNwcDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorRVhUUkFfT0VNQUtFID0gIiAiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKyAgICAjIEF2b2lkIHByb2JsZW1zIHdpdGggUXQgNC44LjAgY29uZmlndXJlIHNldHRpbmcgUU1BS0VfTElOSyBmcm9tIExEIChzaW5jZSB3ZSB3YW50IHRoZSBsaW5rZXIgdG8gYmUgZysrKQorICAgIHVuc2V0IExECisKKyAgICBpZiBbICEgLWUgbWtzcGVjcy8ke1RBUkdFVF9PU30tb2UtZysrIF07IHRoZW4KKyAgICAgICAgbG4gLXNmIGxpbnV4LWcrKyBta3NwZWNzLyR7VEFSR0VUX09TfS1vZS1nKysKKyAgICBmaQorCisgICAgY3AgLi4vZysrLmNvbmYgbWtzcGVjcy9jb21tb24KKyAgICBjcCAuLi9saW51eC5jb25mIG1rc3BlY3MvY29tbW9uCisKKyAgICBpZiBbIC1mIG1rc3BlY3MvY29tbW9uL2crKy1iYXNlLmNvbmYgXSA7IHRoZW4KKyAgICAgICAgIyBkb24ndCB1c2UgaG9zdCBnKysgZXZlbiBkdXJpbmcgY29uZmlndXJlICg0LjguMCspCisgICAgICAgIHNlZCAtaSAtZSAicyM9IGcrKyM9ICR7Q1hYfSMiIG1rc3BlY3MvY29tbW9uL2crKy1iYXNlLmNvbmYKKyAgICAgICAgc2VkIC1pIC1lICJzIz0gZ2NjIz0gJHtDQ30jIiBta3NwZWNzL2NvbW1vbi9nKystYmFzZS5jb25mCisgICAgZmkKKworICAgICMgVXNlIHFtYWtlIGZyb20gcXQ0LW5hdGl2ZSBmb3IgYnVpbGRpbmcKKyAgICBpZiBbICEgLWUgYmluL3FtYWtlIF07IHRoZW4KKyAgICAgICAgbG4gLXNmICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9xbWFrZTIgYmluL3FtYWtlCisgICAgZmkKKyAgICBzZXRfYXJjaAorICAgIChlY2hvIG87IGVjaG8geWVzKSB8IENDPSIke0NDfSIgQ1hYPSIke0NYWH0iIC4vY29uZmlndXJlICR7RVhUUkFfT0VDT05GfSB8fCBkaWUgIkNvbmZpZ3VyaW5nIHF0IGZhaWxlZC4gRVhUUkFfT0VDT05GIHdhcyAke0VYVFJBX09FQ09ORn0iCit9CisKK1RPQlVJTEQgPSAiXAorICBzcmMvdG9vbHMvYm9vdHN0cmFwIFwKKyAgc3JjL3Rvb2xzL21vYyBcCisgIHNyYy9jb3JlbGliIFwKKyAgc3JjL3NxbCBcCisgIHNyYy9kYnVzIFwKKyAgc3JjL3F0M3N1cHBvcnQgXAorICBzcmMveG1sIFwKKyAgc3JjL3Rvb2xzL3VpYyBcCisgIHNyYy90b29scy9yY2MgXAorICBzcmMvbmV0d29yayBcCisgIHNyYy9ndWkgXAorICBzcmMvdG9vbHMvdWljMyBcCisgIHRvb2xzL2xpbmd1aXN0L2xyZWxlYXNlIFwKKyAgdG9vbHMvbGluZ3Vpc3QvbHVwZGF0ZSBcCisgIHRvb2xzL3FkYnVzIFwKKyIKKworZG9fY29tcGlsZSgpIHsKKyAgICBmb3IgaSBpbiAke1RPQlVJTER9OyBkbworICAgICAgICBjZCAke1N9LyRpICYmIG9lX3J1bm1ha2UgQ0M9IiR7Q0N9IiBDWFg9IiR7Q1hYfSIKKyAgICBkb25lCisKKyAgICAjIEJ1aWxkIG5hdGl2ZXNkayBxbWFrZQorICAgIGV4cG9ydCBRTUFLRVNQRUM9IiR7U30vbWtzcGVjcy8ke1RBUkdFVF9PU30tb2UtZysrIgorICAgIGNkICR7U30vcW1ha2UKKyAgICAke09FX1FNQUtFX1FNQUtFfQorICAgIG9lX3J1bm1ha2UgQ0M9IiR7Q0N9IiBDWFg9IiR7Q1hYfSIKKyAgICBjZCAke1N9Cit9CisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSAwNzU1IGJpbi9xbWFrZTIgJHtEfSR7YmluZGlyfS9xbWFrZTIKKyAgICBmb3IgaSBpbiBtb2MgdWljIHVpYzMgcmNjIGxyZWxlYXNlIGx1cGRhdGUgcWRidXNjcHAyeG1sIHFkYnVzeG1sMmNwcDsgZG8KKyAgICAgICAgaW5zdGFsbCAtbSAwNzU1IGJpbi8ke2l9ICR7RH0ke2JpbmRpcn0vJHtpfTQKKyAgICBkb25lCisKKyAgICAoY2QgJHtEfSR7YmluZGlyfTsgXAorICAgIGxuIC1zIHFtYWtlMiBxbWFrZTsgXAorICAgIGZvciBpIGluIG1vYyB1aWMgdWljMyByY2MgbHJlbGVhc2UgbHVwZGF0ZSBxZGJ1c2NwcDJ4bWwgcWRidXN4bWwyY3BwOyBkbyBcCisgICAgICAgIGxuIC1zICR7aX00ICR7aX07IFwKKyAgICBkb25lKQorCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorICAgIGNhdCA+JHtEfSR7c3lzY29uZmRpcn0vcXQuY29uZiA8PEVPRgorW1BhdGhzXQorUHJlZml4ID0gJHtwcmVmaXh9CitFT0YKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9uYXRpdmVzZGstcXQ0LXRvb2xzXzQuOC43LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L25hdGl2ZXNkay1xdDQtdG9vbHNfNC44LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBiYTA3YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9uYXRpdmVzZGstcXQ0LXRvb2xzXzQuOC43LmJiCkBAIC0wLDAgKzEsNiBAQAorcmVxdWlyZSBuYXRpdmVzZGstcXQ0LXRvb2xzLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwOS1xbWFrZS1maXgtc291cmNlLWZpbGUtcmVmZXJlbmNlcy1pbi1xbWFrZS5wcmkucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkOTkwZWU2NmJmN2FiMGM3ODU1ODk3NzZmMzViYTZhZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlMjg4MjI5NTA5N2U0N2ZlMDg5ZjhhYzc0MWE5NWZlZjQ3ZTBhNzNhM2YzY2RmMjFiNTY5OTA2MzhmNjI2ZWEwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjU3ZTc2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy5pbmMKQEAgLTAsMCArMSw2OCBAQAorTElDRU5TRSA9ICJMR1BMdjIuMSB8IEdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS5MR1BMO21kNT1mYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9MSUNFTlNFLkdQTDM7bWQ1PTZlMTY5NGVlMzM4ZGI0MTA0MTc1MTc4ODQ5MThkNGQyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0xHUExfRVhDRVBUSU9OLnR4dDttZDU9MDE0NWM0ZDFiNmY5NmE2NjFjMmMxMzlkZmIyNjhmYjYiCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L3F0NC0ke1BWfToiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLnF0LXByb2plY3Qub3JnL29mZmljaWFsX3JlbGVhc2VzL3F0LzQuOC8ke1BWfS9xdC1ldmVyeXdoZXJlLW9wZW5zb3VyY2Utc3JjLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLXdlYmtpdDItc2V0LU9VVFBVVF9ESVItdmFsdWUtaWYtZW1wdHkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC1jb25maWd1cmUtcW1ha2UtaXMtYWxyZWFkeS1idWlsdC1pbi1xdDQtdG9vbHMtbmF0aXZlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDgtcW1ha2UucHJvLUFsbG93LWJ1aWxkaW5nLWEtc2VwYXJhdGUtcW1ha2UtZm9yLXRoZS10YS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA5LXFtYWtlLWZpeC1zb3VyY2UtZmlsZS1yZWZlcmVuY2VzLWluLXFtYWtlLnByaS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEwLWNvbmZpZ3VyZS1IYWNrLXRvLW5vdC11c2UtdGhlLXBnX2NvbmZpZy1vZi10aGUtaG9zdC0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMS1mcmVldHlwZS1ob3N0LWluY2x1ZGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTItQWRkLTJicHAtc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEzLWNvbmZpZ3VyZS1hZGQtY3Jvc3NhcmNoLW9wdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE0LXRyYW5zbGF0aW9ucy1maXgtcGhvbnktdHJhbnNsYXRpb24tbGlua2luZy1lcnJvci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE1LWNvbmZpZ3VyZS1hZGQtbm9zdHJpcC1mb3ItZGVidWctcGFja2FnZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNi1jb25maWd1cmUtZXZhbC1RTUFLRV9DWFgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNy1jb25maWd1cmUtZW5zdXJlLXdlLWlkZW50aWZ5LXRoZS1jb21waWxlci1hcy1nLWluLWNvLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTgtY29uZmlndXJlLW1ha2UtcHVsc2VhdWRpby1hLWNvbmZpZ3VyYWJsZS1vcHRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxOS1GaXhlcy1mb3ItZ2NjLTQuNy4wLXBhcnRpY3VsYXJseS1vbi1xZW11eDg2LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjctdG9vbHMucHJvLWRpc2FibGUtcW1lZWdvZ3JhcGhpY3NzeXN0ZW1oZWxwZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyOC1Eb24tdC1jcmFzaC1vbi1icm9rZW4tR0lGLWltYWdlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDMwLWFhcmNoNjRfYXJtNjRfcWF0b21pY19zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzEtYWFyY2g2NF9hcm02NF9ta3NwZWNzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzItYWFyY2g2NF9hZGRfaGVhZGVyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0ZpeC1RV1NMb2NrLWludmFsaWQtYXJndW1lbnQtbG9ncy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hZGRfY2hlY2tfZm9yX2FhcmNoNjRfMzIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZysrLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vbGludXguY29uZiBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImQ5OTBlZTY2YmY3YWIwYzc4NTU4OTc3NmYzNWJhNmFkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUyODgyMjk1MDk3ZTQ3ZmUwODlmOGFjNzQxYTk1ZmVmNDdlMGE3M2EzZjNjZGYyMWI1Njk5MDYzOGY2MjZlYTAiCisKK1MgPSAiJHtXT1JLRElSfS9xdC1ldmVyeXdoZXJlLW9wZW5zb3VyY2Utc3JjLSR7UFZ9IgorCisjIGRpc2FibGUgd2Via2l0IGZvciBtaXBzNjQgbjMyIHRlbXBvcmFyaWx5IHRoYXQgZmFpbHMgdG8gY29tcGlsZSwKKyMgcXQgdXBzdHJlYW0gZGVmZWN0OgorIyBodHRwczovL2J1Z3JlcG9ydHMucXQtcHJvamVjdC5vcmcvYnJvd3NlL1FUQlVHLTM5MjI0CitRVF9DT05GSUdfRkxBR1NfYXBwZW5kX21pcHM2NG4zMiA9ICIgLW5vLXdlYmtpdCIKKworIyBkaXNhYmxlIHdlYmtpdCBmb3IgYWFyY2g2NCB0ZW1wb3JhcmlseSB0aGF0IGZhaWxzIHRvIGNvbXBpbGUKK1FUX0NPTkZJR19GTEFHU19hcHBlbmRfYWFyY2g2NCA9ICIgLW5vLXdlYmtpdCIKKworRklMRVNfJHtRVF9CQVNFX05BTUV9LXRvb2xzX2FwcGVuZCAgICAgPSAiICR7YmluZGlyfS9xbWwgJHtiaW5kaXJ9L3FtbHBsdWdpbmR1bXAiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tdG9vbHMtZGJnX2FwcGVuZCA9ICIgJHtiaW5kaXJ9Ly5kZWJ1Zy9xbWwgJHtiaW5kaXJ9Ly5kZWJ1Zy9xbWxwbHVnaW5kdW1wIgorCitQQUNLQUdFU19hcHBlbmQgPSAiICR7UVRfQkFTRV9OQU1FfS10ZXN0cy1kYmcgJHtRVF9CQVNFX05BTUV9LXRlc3RzIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXRlc3RzLWRiZyAgICAgICAgPSAiJHtwcmVmaXh9L3Rlc3RzL3F0NC8qLy5kZWJ1ZyIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS10ZXN0cyAgICAgICAgICAgID0gIiR7cHJlZml4fS90ZXN0cy9xdDQvKiIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgc2VkIC1pICdzOnF0UHJlcGFyZVRvb2woTFJFTEVBU0UsIGxyZWxlYXNlKTpMUkVMRUFTRSA9ICR7T0VfUU1BS0VfTFJFTEVBU0V9OmcnIFwKKyAgICAgICAgJHtTfS90cmFuc2xhdGlvbnMvdHJhbnNsYXRpb25zLnBybworCisgICAgc2VkIC1pIFwKKyAgICAtZSAvUU1BS0VfTU9DXCAvZCBcCisgICAgLWUgL1FNQUtFX1VJQ1wgL2QgXAorICAgIC1lIC9RTUFLRV9VSUMzXCAvZCBcCisgICAgLWUgL1FNQUtFX1JDQ1wgL2QgXAorICAgICR7U30vY29uZmlndXJlCisKKyAgICAjIEF2b2lkIHByb2JsZW1zIHdpdGggUXQgNC44LjAgY29uZmlndXJlIHNldHRpbmcgUU1BS0VfTElOSyBmcm9tIExEIChzaW5jZSB3ZSB3YW50IHRoZSBsaW5rZXIgdG8gYmUgZysrKQorICAgIHVuc2V0IExECit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwMS1xbGlicmFyeWluZm8tYWxsb3ctdG8tc2V0LXF0LmNvbmYtZnJvbS10aGUtb3V0c2lkZS11LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAxLXFsaWJyYXJ5aW5mby1hbGxvdy10by1zZXQtcXQuY29uZi1mcm9tLXRoZS1vdXRzaWRlLXUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhiMGEwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwMS1xbGlicmFyeWluZm8tYWxsb3ctdG8tc2V0LXF0LmNvbmYtZnJvbS10aGUtb3V0c2lkZS11LnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0Zyb20gNTUwOTdkMjdlOGI3NDZiM2Q1ZmY0Mzc5MzljYWYxZmE0M2MwZDYyYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEhvbGdlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDE3OjIyOjMwICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMDEvMjFdIHFsaWJyYXJ5aW5mbzogYWxsb3cgdG8gc2V0IHF0LmNvbmYgZnJvbSB0aGUgb3V0c2lkZQorIHVzaW5nIHRoZSBlbnZpcm9ubWVudAorCitBbGxvdyB0byBzZXQgYSBxdC5jb25mIGZyb20gdGhlIG91dHNpZGUgdXNpbmcgdGhlIGVudmlyb25tZW50LiBUaGlzIGFsbG93cwordG8gaW5qZWN0IG5ldyBwcmVmaXhlcyBhbmQgb3RoZXIgcGF0aHMgaW50byBxbWFrZS4gVGhpcyBpcyBuZWVkZWQgd2hlbiB1c2luZwordGhlIHNhbWUgcW1ha2UgYmluYXJ5IHRvIGJ1aWxkIHF0L3gxMSBhbmQgcXQvZW1iZWRkZWQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9jb3JlbGliL2dsb2JhbC9xbGlicmFyeWluZm8uY3BwIHwgNSArKysrKworIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9jb3JlbGliL2dsb2JhbC9xbGlicmFyeWluZm8uY3BwIGIvc3JjL2NvcmVsaWIvZ2xvYmFsL3FsaWJyYXJ5aW5mby5jcHAKK2luZGV4IDE4MGRjMzkuLjRhZGFkMzUgMTAwNjQ0CistLS0gYS9zcmMvY29yZWxpYi9nbG9iYWwvcWxpYnJhcnlpbmZvLmNwcAorKysrIGIvc3JjL2NvcmVsaWIvZ2xvYmFsL3FsaWJyYXJ5aW5mby5jcHAKK0BAIC01NCw2ICs1NCw3IEBACisgUVRfQkVHSU5fTkFNRVNQQUNFCisgZXh0ZXJuIFFTdHJpbmcgcW1ha2VfbGlicmFyeUluZm9GaWxlKCk7CisgUVRfRU5EX05BTUVTUEFDRQorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjZWxzZQorICMgaW5jbHVkZSAicWNvcmVhcHBsaWNhdGlvbi5oIgorICNlbmRpZgorQEAgLTExMiw2ICsxMTMsMTAgQEAgUVNldHRpbmdzICpRTGlicmFyeUluZm9Qcml2YXRlOjpmaW5kQ29uZmlndXJhdGlvbigpCisgI2lmZGVmIEJPT1RTVFJBUFBJTkcKKyAgICAgaWYoIVFGaWxlOjpleGlzdHMocXRjb25maWcpKQorICAgICAgICAgcXRjb25maWcgPSBxbWFrZV9saWJyYXJ5SW5mb0ZpbGUoKTsKKysgICAgaWYgKCFRRmlsZTo6ZXhpc3RzKHF0Y29uZmlnKSkgeworKyAgICAgICAgUUJ5dGVBcnJheSBjb25maWcgPSBnZXRlbnYoIlFUX0NPTkZfUEFUSCIpOworKyAgICAgICAgcXRjb25maWcgPSBRRmlsZTo6ZGVjb2RlTmFtZShjb25maWcpOworKyAgICB9CisgI2Vsc2UKKyAgICAgaWYgKCFRRmlsZTo6ZXhpc3RzKHF0Y29uZmlnKSAmJiBRQ29yZUFwcGxpY2F0aW9uOjppbnN0YW5jZSgpKSB7CisgI2lmZGVmIFFfT1NfTUFDCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwMi1xa2JkdHR5X3F3cy1maXgtYnVpbGQtd2l0aC1vbGQta2VybmVsLWhlYWRlcnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDItcWtiZHR0eV9xd3MtZml4LWJ1aWxkLXdpdGgtb2xkLWtlcm5lbC1oZWFkZXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZmM4ODcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDItcWtiZHR0eV9xd3MtZml4LWJ1aWxkLXdpdGgtb2xkLWtlcm5lbC1oZWFkZXJzLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0Zyb20gNWU2YjEwNTFhZmEzMDk5YTAyYTc1OGIwNTk2MjM2NzU5ZDcwNjcwZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDoxODowOCArMDIwMAorU3ViamVjdDogW1BBVENIIDAyLzIxXSBxa2JkdHR5X3F3czogZml4IGJ1aWxkIHdpdGggb2xkIGtlcm5lbCBoZWFkZXJzCisKK1RoaXMgaXNzdWUgaXMgdGhhdCB3aXRoIEMrKyBjb21waWxlciBwcm9jZXNzIGFuIG9sZCB2ZXJzaW9uIG9mIGtlcm5lbAoraGVhZGVyIGZpbGUsIGNvaW5jaWRlbnRseSB0aGF0IGZpbGUgaGFzIGEgdmFyaWFibGUgbmFtZWQgJ25ldyc6CisKKyogJ2VtYmVkZGVkL3FrYmR0dHlfcXdzLmNwcCcgaW5jbHVkZSAnbGludXgvdnQuaCc7CisqICcvdXNyL2luY2x1ZGUvbGludXgvdnQuaCcgaGFzIGJlbG93IGNvZGUgb24gU0xFRC0xMS54OgorICAgICsgdW5zaWduZWQgaW50IG5ldzsKKworT24gbW9zdGx5IGhvc3RzIGl0IGhhcyBiZWVuIGNoYW5nZWQgdG86IG5ldyAtPiBuZXdldi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL2d1aS9lbWJlZGRlZC9xa2JkdHR5X3F3cy5jcHAgfCAxMiArKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2d1aS9lbWJlZGRlZC9xa2JkdHR5X3F3cy5jcHAgYi9zcmMvZ3VpL2VtYmVkZGVkL3FrYmR0dHlfcXdzLmNwcAoraW5kZXggYTQ2ODExYi4uNzYyMTM4ZiAxMDA2NDQKKy0tLSBhL3NyYy9ndWkvZW1iZWRkZWQvcWtiZHR0eV9xd3MuY3BwCisrKysgYi9zcmMvZ3VpL2VtYmVkZGVkL3FrYmR0dHlfcXdzLmNwcAorQEAgLTU0LDggKzU0LDIwIEBACisgCisgI2lmIGRlZmluZWQgUV9PU19MSU5VWAorICMgIGluY2x1ZGUgPGxpbnV4L2tkLmg+CisrCisrLyogV29ya2Fyb3VuZCBrZXJuZWwgaGVhZGVycyB1c2luZyAibmV3IiBhcyB2YXJpYWJsZSBuYW1lLiBUaGUgcHJvYmxlbQorKyBpcyBzcGVjaWZpYyB0byBTTEVELTExLCBvdGhlciBkaXN0cm9zIHVzZSAibmV3ZXYiIHJhdGhlciB0aGFuICJuZXciICovCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrI3dhcm5pbmcgIndvcmthcm91bmQga2VybmVsIGhlYWRlcnMgdXNpbmcgbmV3IGFzIHZhcmlhYmxlIG5hbWUgb24gU0xFRCAxMSIKKysjZGVmaW5lIG5ldyBuZXdldgorKyNlbmRpZgorKworICMgIGluY2x1ZGUgPGxpbnV4L3Z0Lmg+IC8vVE9ETzogbW92ZSB2dCBoYW5kbGluZyBzb21ld2hlcmUgZWxzZSAoUUxpbnV4RmJTY3JlZW4/KQorIAorKyNpZmRlZiBfX2NwbHVzcGx1cworKyN1bmRlZiBuZXcKKysjZW5kaWYKKysKKyAjICBpbmNsdWRlICJxc2NyZWVuX3F3cy5oIgorICMgIGluY2x1ZGUgInF3aW5kb3dzeXN0ZW1fcXdzLmgiCisgIyAgaW5jbHVkZSAicWFwcGxpY2F0aW9uLmgiCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwMy13ZWJraXQyLXNldC1PVVRQVVRfRElSLXZhbHVlLWlmLWVtcHR5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAzLXdlYmtpdDItc2V0LU9VVFBVVF9ESVItdmFsdWUtaWYtZW1wdHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNhZWE1MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwMy13ZWJraXQyLXNldC1PVVRQVVRfRElSLXZhbHVlLWlmLWVtcHR5LnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gYjY4MDVlODgzYzA3OGY3NjQ3ZDkyMzRhY2E0ZTM1MTNlYmQxYzliZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMSBNYXkgMjAxMiAwNzo0ODoxNSArMDIwMAorU3ViamVjdDogW1BBVENIIDAzLzIxXSB3ZWJraXQyOiBzZXQgT1VUUFVUX0RJUiB2YWx1ZSBpZiBlbXB0eQorCitXaXRob3V0IHRoaXMgZG9fY29uZmlndXJlIHdhcyB0cnlpbmcgdG8gY3JlYXRlIC9pbmNsdWRlL1dlYkNvcmUvbGliZHVtbXkucHJsIGluIHJvb3Qgb2YgYnVpbGQgaG9zdCBmaWxlc3lzdGVtCitub3cgaXQncyBpbiBwcm9wZXIgcGxhY2UgJHtXT1JLRElSfS9xdC1ldmVyeXdoZXJlLW9wZW5zb3VyY2Utc3JjLTQuOC4xL3NyYy8zcmRwYXJ0eS93ZWJraXQvaW5jbHVkZS9XZWJDb3JlL2xpYmR1bW15LnBybAorCitGaXJzdCByZXBvcnRlZCBoZXJlOgoraHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL29wZW5lbWJlZGRlZC1kZXZlbEBsaXN0cy5vcGVuZW1iZWRkZWQub3JnL21zZzI0NDM2Lmh0bWwKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJvIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJvIGIvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcm8KK2luZGV4IDAwNmE4OGMuLjVlMTcxOTMgMTAwNjQ0CistLS0gYS9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnBybworKysrIGIvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcm8KK0BAIC0zLDYgKzMsOCBAQCBUQVJHRVQgPSBkdW1teQorIAorIENPTkZJRyAtPSBkZWJ1Z19hbmRfcmVsZWFzZQorIAorK2lzRW1wdHkoT1VUUFVUX0RJUik6IE9VVFBVVF9ESVIgPSAuLi8uLgorKworIENPTkZJRyhzdGFuZGFsb25lX3BhY2thZ2UpIHsKKyAgICAgaXNFbXB0eShXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUik6V0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIgPSAkJFBXRC9nZW5lcmF0ZWQKKyAgICAgaXNFbXB0eShXQ19HRU5FUkFURURfU09VUkNFU19ESVIpOldDX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUiA9ICQkUFdELy4uL1dlYkNvcmUvZ2VuZXJhdGVkCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwNC1jb25maWd1cmUtcW1ha2UtaXMtYWxyZWFkeS1idWlsdC1pbi1xdDQtdG9vbHMtbmF0aXZlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA0LWNvbmZpZ3VyZS1xbWFrZS1pcy1hbHJlYWR5LWJ1aWx0LWluLXF0NC10b29scy1uYXRpdmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWViOGE1OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwNC1jb25maWd1cmUtcW1ha2UtaXMtYWxyZWFkeS1idWlsdC1pbi1xdDQtdG9vbHMtbmF0aXZlLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gYWY2OTljNmU4Y2Y5ZmIyOGQ2ZjhiNzg5YmYzM2Q1M2I0N2VkYWVjNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1pY2hhZWwgS3JlbGluIDxoYWNrZXJAa2xldmVyLm5ldD4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6MjQ6MjAgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAwNC8yMV0gY29uZmlndXJlOiBxbWFrZSBpcyBhbHJlYWR5IGJ1aWx0IGluIHF0NC10b29scy1uYXRpdmUsCisgc28gZGlzYWJsZSBpdAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggZTNkNDY0Yi4uY2MwNGIyNyAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNDg5OSw3ICs0ODk5LDcgQEAgc2V0Qm9vdHN0cmFwVmFyaWFibGUoKQorIH0KKyAKKyAjIGJ1aWxkIHFtYWtlCistaWYgdHJ1ZTsgdGhlbiAjIyNbICchJyAtZiAiJG91dHBhdGgvYmluL3FtYWtlIiBdOworK2lmIGZhbHNlOyB0aGVuICMjI1sgJyEnIC1mICIkb3V0cGF0aC9iaW4vcW1ha2UiIF07CisgICAgIGVjaG8gIkNyZWF0aW5nIHFtYWtlLiBQbGVhc2Ugd2FpdC4uLiIKKyAKKyAgICAgT0xEX1FDT05GSUdfSD0KKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA1LWNvbmZpZ3VyZS1zZXQtTEZMQUdTLXRvLXBpY2stdXAtemxpYi1mcm9tLXN0YWdpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDUtY29uZmlndXJlLXNldC1MRkxBR1MtdG8tcGljay11cC16bGliLWZyb20tc3RhZ2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYThmMmI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA1LWNvbmZpZ3VyZS1zZXQtTEZMQUdTLXRvLXBpY2stdXAtemxpYi1mcm9tLXN0YWdpbmcucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSBhYzkzMjM3YmM5MGVhNzc3M2MwZWY1Mjc1OTYyYmFiYTAxZDRhOWM3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0plcmVteT0yMExhaW49QzM9QTk/PSA8amVyZW15LmxhaW5lQG00eC5vcmc+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjI3OjQ0ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMDUvMjFdIGNvbmZpZ3VyZTogc2V0IExGTEFHUyB0byBwaWNrIHVwIHpsaWIgZnJvbSBzdGFnaW5nCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IGNjMDRiMjcuLjVhN2M0ZWUgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTY5MCw3ICs2OTAsNyBAQCBmaQorICMgaW5pdGFsaXplIHZhcmlhYmxlcworICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCistU1lTVEVNX1ZBUklBQkxFUz0iUkFOTElCIFNUUklQIE9CSkRVTVAgTEQgQ0MgQ1hYIENGTEFHUyBDWFhGTEFHUyBMREZMQUdTIgorK1NZU1RFTV9WQVJJQUJMRVM9IlJBTkxJQiBTVFJJUCBPQkpEVU1QIExEIENDIENYWCBDRkxBR1MgQ1hYRkxBR1MgTERGTEFHUyBMRkxBR1MiCisgZm9yIHZhcm5hbWUgaW4gJFNZU1RFTV9WQVJJQUJMRVM7IGRvCisgICAgIHFtYWtldmFybmFtZT0iJHt2YXJuYW1lfSIKKyAgICAgIyB1c2UgTERGTEFHUyBmb3IgYXV0b2NvbmYgY29tcGF0LCBidXQgcW1ha2UgdXNlcyBRTUFLRV9MRkxBR1MKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA2LWNvbmZpZ3VyZS1Vc2UtT0VfUU1BS0VfLXZhbHVlcy10by1zcGVjaWZ5LVF0LXV0aWxpdHkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDYtY29uZmlndXJlLVVzZS1PRV9RTUFLRV8tdmFsdWVzLXRvLXNwZWNpZnktUXQtdXRpbGl0eS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGViZjc1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA2LWNvbmZpZ3VyZS1Vc2UtT0VfUU1BS0VfLXZhbHVlcy10by1zcGVjaWZ5LVF0LXV0aWxpdHkucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSAwYmMwZGI4MzgxMmI1OTAwZGM0ZTZmZmE5NmJkZWFiNDZiNmFkY2FlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjI5OjA5ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMDYvMjFdIGNvbmZpZ3VyZTogVXNlIE9FX1FNQUtFXyogdmFsdWVzIHRvIHNwZWNpZnkgUXQgdXRpbGl0eQorIHBhdGhzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUgfCAxMCArKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggNWE3YzRlZS4uZGI0ZDA0NCAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtODY4MywxMSArODY4MywxMSBAQCBRTUFLRV9BQlNPTFVURV9TT1VSQ0VfUk9PVCA9IFwkXCRRVF9TT1VSQ0VfVFJFRQorIFFNQUtFX01PQ19TUkMgICAgPSBcJFwkUVRfQlVJTERfVFJFRS9zcmMvbW9jCisgCisgI2xvY2FsIHBhdGhzIHRoYXQgY2Fubm90IGJlIHF1ZXJpZWQgZnJvbSB0aGUgUVRfSU5TVEFMTF8qIHByb3BlcnRpZXMgd2hpbGUgYnVpbGRpbmcgUVRESVIKKy1RTUFLRV9NT0MgICAgICAgID0gXCRcJFFUX0JVSUxEX1RSRUUvYmluL21vYworLVFNQUtFX1VJQyAgICAgICAgPSBcJFwkUVRfQlVJTERfVFJFRS9iaW4vdWljCistUU1BS0VfVUlDMyAgICAgICA9IFwkXCRRVF9CVUlMRF9UUkVFL2Jpbi91aWMzCistUU1BS0VfUkNDICAgICAgICA9IFwkXCRRVF9CVUlMRF9UUkVFL2Jpbi9yY2MKKy1RTUFLRV9RREJVU1hNTDJDUFAgPSBcJFwkUVRfQlVJTERfVFJFRS9iaW4vcWRidXN4bWwyY3BwCisrUU1BS0VfTU9DICAgICAgICA9IFwke09FX1FNQUtFX01PQ30KKytRTUFLRV9VSUMgICAgICAgID0gXCR7T0VfUU1BS0VfVUlDfQorK1FNQUtFX1VJQzMgICAgICAgPSBcJHtPRV9RTUFLRV9VSUMzfQorK1FNQUtFX1JDQyAgICAgICAgPSBcJHtPRV9RTUFLRV9SQ0N9CisrUU1BS0VfUURCVVNYTUwyQ1BQID0gXCR7T0VfUU1BS0VfUURCVVNYTUwyQ1BQfQorIFFNQUtFX0lOQ0RJUl9RVCAgPSBcJFwkUVRfQlVJTERfVFJFRS9pbmNsdWRlCisgUU1BS0VfTElCRElSX1FUICA9IFwkXCRRVF9CVUlMRF9UUkVFL2xpYgorIAorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDctZGJ1cy1SZW1vdmUtY29uc3QtdXNhZ2UtdGhhdC1jYXVzZXMtY29tcGlsZS1mYWlsdXJlLS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwNy1kYnVzLVJlbW92ZS1jb25zdC11c2FnZS10aGF0LWNhdXNlcy1jb21waWxlLWZhaWx1cmUtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMjNjOTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDctZGJ1cy1SZW1vdmUtY29uc3QtdXNhZ2UtdGhhdC1jYXVzZXMtY29tcGlsZS1mYWlsdXJlLS5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIDIwMTFiYjgwMjk0ODBhZjFkMTI2NmYyNThlNWE1ZjVjZWY3MzkyZDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXZlbCBIZWltbGljaCA8dHJvcGlraGFqbWFAZ21haWwuY29tPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDozMToxMCArMDIwMAorU3ViamVjdDogW1BBVENIIDA3LzIxXSBkYnVzOiBSZW1vdmUgImNvbnN0IiB1c2FnZSB0aGF0IGNhdXNlcyBjb21waWxlIGZhaWx1cmUKKyBidWlsZGluZyBuYXRpdmVzZGstcXQ0LXRvb2xzCisKK1BhdGNoIGhhcyBhcHBhcmVudGx5IGJlZW4gcmVqZWN0ZWQgdXBzdHJlYW0sIG5vdCBiZWNhdXNlIGl0IGlzIGludmFsaWQKK2J1dCBiZWNhdXNlIHRoZSBzdWJtaXR0ZXIgZGlkIG5vdCBzdWJtaXQgYSBtZXJnZSByZXF1ZXN0IGZvciBpdCwgc28gdGhlCit2YWxpZGl0eSBvZiB0aGUgcGF0Y2ggdXBzdHJlYW0gaXMgdW5jZXJ0YWluLiBGb3IgZnVydGhlciBkZXRhaWxzIHNlZToKK2h0dHBzOi8vYnVncmVwb3J0cy5xdC1wcm9qZWN0Lm9yZy9icm93c2UvUVRCVUctMTc5NjIKKworVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQgW3Bvc3NpYmxlIHJldHJ5XQorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBzcmMvZGJ1cy9xZGJ1c2ludGVncmF0b3IuY3BwIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2RidXMvcWRidXNpbnRlZ3JhdG9yLmNwcCBiL3NyYy9kYnVzL3FkYnVzaW50ZWdyYXRvci5jcHAKK2luZGV4IDBmMGI2NDcuLmFhNGNiYWIgMTAwNjQ0CistLS0gYS9zcmMvZGJ1cy9xZGJ1c2ludGVncmF0b3IuY3BwCisrKysgYi9zcmMvZGJ1cy9xZGJ1c2ludGVncmF0b3IuY3BwCitAQCAtNzMsNyArNzMsNyBAQCBRVF9CRUdJTl9OQU1FU1BBQ0UKKyBzdGF0aWMgYm9vbCBpc0RlYnVnZ2luZzsKKyAjZGVmaW5lIHFEQnVzRGVidWcgICAgICAgICAgICAgIGlmICghOjppc0RlYnVnZ2luZyk7IGVsc2UgcURlYnVnCisgCistUV9HTE9CQUxfU1RBVElDX1dJVEhfQVJHUyhjb25zdCBRU3RyaW5nLCBvcmdGcmVlZGVza3RvcERCdXNTdHJpbmcsIChRTGF0aW4xU3RyaW5nKERCVVNfU0VSVklDRV9EQlVTKSkpCisrUV9HTE9CQUxfU1RBVElDX1dJVEhfQVJHUyhRU3RyaW5nLCBvcmdGcmVlZGVza3RvcERCdXNTdHJpbmcsIChRTGF0aW4xU3RyaW5nKERCVVNfU0VSVklDRV9EQlVTKSkpCisgCisgc3RhdGljIGlubGluZSBRU3RyaW5nIGRidXNTZXJ2aWNlU3RyaW5nKCkKKyB7IHJldHVybiAqb3JnRnJlZWRlc2t0b3BEQnVzU3RyaW5nKCk7IH0KKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA4LXFtYWtlLnByby1BbGxvdy1idWlsZGluZy1hLXNlcGFyYXRlLXFtYWtlLWZvci10aGUtdGEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDgtcW1ha2UucHJvLUFsbG93LWJ1aWxkaW5nLWEtc2VwYXJhdGUtcW1ha2UtZm9yLXRoZS10YS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzA3ZjQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA4LXFtYWtlLnByby1BbGxvdy1idWlsZGluZy1hLXNlcGFyYXRlLXFtYWtlLWZvci10aGUtdGEucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSA2NGNlNWQwZTdjMTk0MzZiOTI4YTJhMGQ5ZDE5MmY1NmJlM2M5YmIyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjMyOjQxICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMDgvMjFdIHFtYWtlLnBybzogQWxsb3cgYnVpbGRpbmcgYSBzZXBhcmF0ZSBxbWFrZSBmb3IgdGhlCisgdGFyZ2V0CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlnXQorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHFtYWtlL3FtYWtlLnBybyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvcW1ha2UvcW1ha2UucHJvIGIvcW1ha2UvcW1ha2UucHJvCitpbmRleCAzOGUwZmNlLi41M2IxZmZiIDEwMDY0NAorLS0tIGEvcW1ha2UvcW1ha2UucHJvCisrKysgYi9xbWFrZS9xbWFrZS5wcm8KK0BAIC03LDYgKzcsNyBAQCBDT05GSUcgKz0gY29uc29sZSBib290c3RyYXAKKyBDT05GSUcgLT0gcXQgc2hhcmVkIGFwcF9idW5kbGUgdWljCisgREVGSU5FUyArPSBRVF9CVUlMRF9RTUFLRSBRVF9CT09UU1RSQVBQRUQKKyBERVNURElSID0gLi4vYmluLworK1RBUkdFVCA9IHFtYWtlMgorIAorIE9CSkVDVFNfRElSID0gLgorIE1PQ19ESVIgPSAuCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwOS1xbWFrZS1maXgtc291cmNlLWZpbGUtcmVmZXJlbmNlcy1pbi1xbWFrZS5wcmkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDktcW1ha2UtZml4LXNvdXJjZS1maWxlLXJlZmVyZW5jZXMtaW4tcW1ha2UucHJpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YjhjMTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDktcW1ha2UtZml4LXNvdXJjZS1maWxlLXJlZmVyZW5jZXMtaW4tcW1ha2UucHJpLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK0Zyb20gZTEyOWRjMGQ2Y2RlNjlkZDE1ZDE4MzZjNDExMWUwNTI2ZmMyOTE2MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDozMzo0OSArMDIwMAorU3ViamVjdDogW1BBVENIIDA5LzIxXSBxbWFrZTogZml4IHNvdXJjZSBmaWxlIHJlZmVyZW5jZXMgaW4gcW1ha2UucHJpCisKK0ZpeCBkdXBsaWNhdGUgZW50cmllcyBpbiBTT1VSQ0VTIGFuZCBIRUFERVJTLCBhbmQgZml4IHRoZSBzb3VyY2UgZmlsZQorbGlzdCBmb3IgdGhlIHNwbGl0IG9mIHFsb2NhbGUuY3BwLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBxbWFrZS9xbWFrZS5wcmkgfCA4ICsrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3FtYWtlL3FtYWtlLnByaSBiL3FtYWtlL3FtYWtlLnByaQoraW5kZXggMzFmNjdmNC4uOTA4MTY2OSAxMDA2NDQKKy0tLSBhL3FtYWtlL3FtYWtlLnByaQorKysrIGIvcW1ha2UvcW1ha2UucHJpCitAQCAtMjIsOCArMjIsNyBAQCBTT1VSQ0VTICs9IHByb2plY3QuY3BwIHByb3BlcnR5LmNwcCBtYWluLmNwcCBnZW5lcmF0b3JzL21ha2VmaWxlLmNwcCBcCisgICAgICAgICAgICBnZW5lcmF0b3JzL3N5bWJpYW4vaW5pdHByb2plY3RkZXBsb3lfc3ltYmlhbi5jcHAgXAorICAgICAgICAgICAgZ2VuZXJhdG9ycy9pbnRlZ3JpdHkvZ2J1aWxkLmNwcCBcCisgICAgICAgICAgICB3aW5kb3dzL3JlZ2lzdHJ5LmNwcCBcCistICAgICAgICAgICBzeW1iaWFuL2Vwb2Nyb290LmNwcCBcCistICAgICAgICAgICBnZW5lcmF0b3JzL2ludGVncml0eS9nYnVpbGQuY3BwCisrICAgICAgICAgICBzeW1iaWFuL2Vwb2Nyb290LmNwcAorIAorIEhFQURFUlMgKz0gcHJvamVjdC5oIHByb3BlcnR5LmggZ2VuZXJhdG9ycy9tYWtlZmlsZS5oIFwKKyAgICAgICAgICAgIGdlbmVyYXRvcnMvdW5peC91bml4bWFrZS5oIG1ldGEuaCBvcHRpb24uaCBjYWNoZWtleXMuaCBcCitAQCAtNDAsOCArMzksNyBAQCBIRUFERVJTICs9IHByb2plY3QuaCBwcm9wZXJ0eS5oIGdlbmVyYXRvcnMvbWFrZWZpbGUuaCBcCisgICAgICAgICAgICBnZW5lcmF0b3JzL3N5bWJpYW4vaW5pdHByb2plY3RkZXBsb3lfc3ltYmlhbi5oIFwKKyAgICAgICAgICAgIGdlbmVyYXRvcnMvaW50ZWdyaXR5L2didWlsZC5oIFwKKyAgICAgICAgICAgIHdpbmRvd3MvcmVnaXN0cnlfcC5oIFwKKy0gICAgICAgICAgIHN5bWJpYW4vZXBvY3Jvb3RfcC5oIFwKKy0gICAgICAgICAgIGdlbmVyYXRvcnMvaW50ZWdyaXR5L2didWlsZC5oCisrICAgICAgICAgICBzeW1iaWFuL2Vwb2Nyb290X3AuaAorIAorIGNvbnRhaW5zKFFUX0VESVRJT04sIE9wZW5Tb3VyY2UpIHsKKyAgICBERUZJTkVTICs9IFFNQUtFX09QRU5TT1VSQ0VfRURJVElPTgorQEAgLTcyLDYgKzcwLDggQEAgYm9vdHN0cmFwIHsgI1F0IGNvZGUKKyAgICAgICAgIHFsaXN0LmNwcCBcCisgICAgICAgICBxbGlua2VkbGlzdC5jcHAgXAorICAgICAgICAgcWxvY2FsZS5jcHAgXAorKyAgICAgICAgcWxvY2FsZV90b29scy5jcHAgXAorKyAgICAgICAgcWxvY2FsZV91bml4LmNwcCBcCisgICAgICAgICBxbWFsbG9jLmNwcCBcCisgICAgICAgICBxbWFwLmNwcCBcCisgICAgICAgICBxbWV0YXR5cGUuY3BwIFwKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDEwLWNvbmZpZ3VyZS1IYWNrLXRvLW5vdC11c2UtdGhlLXBnX2NvbmZpZy1vZi10aGUtaG9zdC0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTAtY29uZmlndXJlLUhhY2stdG8tbm90LXVzZS10aGUtcGdfY29uZmlnLW9mLXRoZS1ob3N0LS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTZhMGI4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDEwLWNvbmZpZ3VyZS1IYWNrLXRvLW5vdC11c2UtdGhlLXBnX2NvbmZpZy1vZi10aGUtaG9zdC0ucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSA0ODg4NzkxZDE4OTlmNzgxYWY3MTBkZDg4MTM4ODdkZWE1MmZkYTU5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9sZ2VyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6MzY6MzggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxMC8yMV0gY29uZmlndXJlOiBIYWNrIHRvIG5vdCB1c2UgdGhlIHBnX2NvbmZpZyBvZiB0aGUgaG9zdAorIHN5c3RlbSB3aGljaCB3aWxsIGFkZCAvdXNyL2luY2x1ZGUKKworcGdfY29uZmlnIGlzIGEgbmF0aXZlIGJpbmFyeSBzbyB1c2luZyB0aGF0IHdoZW4gY3Jvc3MgY29tcGlsaW5nCit3aWxsIGFsd2F5cyBmYWlsLiAgVGhlIGNvbW1lbnRlZCBvdXQgZml4IHdvdWxkIGRvLCBidXQgZm9yIE9FCitvdXIgLXBsYXRmb3JtIGFuZCAteHBsYXRmb3JtIGlzIHRoZSBzYW1lIHNvIHdlIGFyZSBhY3R1YWxseSBub3QKK3JlYWxseSBjcm9zcyBjb21waWxpbmcuIEp1c3QgY29tbWVudCBvdXQgdGhlIHRlc3QsIHdlIGFyZSBwYXNzaW5nCit0aGUgbG9jYXRpb24gdG8gdGhlIHBvc3RncmVzIGhlYWRlcnMgYW5kIGlmIHRoZXkgYXJlIG9rYXkgd2UKK3dpbGwgcGFkLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworVXBkYXRlIGZvciBxdCA0LjguNy4KKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUgfCA4ICsrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggZGI0ZDA0NC4uMzVhOGZlNyAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNTU3NCwxMCArNTU3NCwxMCBAQAorICAgICAgICAgICAgIGlmIFsgIiRDRkdfU1FMX3BzcWwiICE9ICJubyIgXTsgdGhlbgorICAgICAgICAgICAgICAgICBbIC16ICIkQ0ZHX1BTUUxfQ09ORklHIiBdICYmIENGR19QU1FMX0NPTkZJRz1gIiRXSElDSCIgcGdfY29uZmlnYAorICAgICAgICAgICAgICAgICAjIEJlIGNhcmVmdWwgbm90IHRvIHVzZSBuYXRpdmUgcGdfY29uZmlnIHdoZW4gY3Jvc3MgYnVpbGRpbmcuCistICAgICAgICAgICAgICAgIGlmIFsgIiRYUExBVEZPUk1fTUlOR1ciICE9ICJ5ZXMiIF0gJiYgWyAteCAiJENGR19QU1FMX0NPTkZJRyIgXTsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgUVRfQ0ZMQUdTX1BTUUw9YCRDRkdfUFNRTF9DT05GSUcgLS1pbmNsdWRlZGlyIDI+L2Rldi9udWxsYAorLSAgICAgICAgICAgICAgICAgICAgUVRfTEZMQUdTX1BTUUw9YCRDRkdfUFNRTF9DT05GSUcgLS1saWJkaXIgMj4vZGV2L251bGxgCistICAgICAgICAgICAgICAgIGZpCisrIyAgICAgICAgICAgICAgICBpZiBbICIkWFBMQVRGT1JNX01JTkdXIiAhPSAieWVzIiBdICYmIFsgLXggIiRDRkdfUFNRTF9DT05GSUciIF07IHRoZW4KKysjICAgICAgICAgICAgICAgICAgICBRVF9DRkxBR1NfUFNRTD1gJENGR19QU1FMX0NPTkZJRyAtLWluY2x1ZGVkaXIgMj4vZGV2L251bGxgCisrIyAgICAgICAgICAgICAgICAgICAgUVRfTEZMQUdTX1BTUUw9YCRDRkdfUFNRTF9DT05GSUcgLS1saWJkaXIgMj4vZGV2L251bGxgCisrIyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICBbIC16ICIkUVRfQ0ZMQUdTX1BTUUwiIF0gfHwgUVRfQ0ZMQUdTX1BTUUw9Ii1JJFFUX0NGTEFHU19QU1FMIgorICAgICAgICAgICAgICAgICBbIC16ICIkUVRfTEZMQUdTX1BTUUwiIF0gfHwgUVRfTEZMQUdTX1BTUUw9Ii1MJFFUX0xGTEFHU19QU1FMIgorICAgICAgICAgICAgICAgICAjIEJ1dCwgcmVzcGVjdCBQU1FMX0xJQlMgaWYgc2V0CistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxMS1mcmVldHlwZS1ob3N0LWluY2x1ZGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDExLWZyZWV0eXBlLWhvc3QtaW5jbHVkZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA4NzljNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxMS1mcmVldHlwZS1ob3N0LWluY2x1ZGVzLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gM2ZjZmZhNzllNmE1ZjA0NDhjYmZlMmJiMzNmZTEyMThmNWRhZTYxZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1pY2hhZWwgS3JlbGluIDxoYWNrZXJAa2xldmVyLm5ldD4KK0RhdGU6IE1vbiwgNCBKdW4gMjAwNyAxNDo0ODo1MCArMDIwMAorU3ViamVjdDogW1BBVENIIDExLzIxXSBmcmVldHlwZSBob3N0IGluY2x1ZGVzCisKK0hvc3QgaW5jbHVkZSBwYXRoIHNob3VsZCBub3QgYmUgdXNlZCBpbiBjcm9zcyBjb21waWxpbmcgY2FzZS4KKworUG9ydGVkIGZyb20gT0UgYnk6IFl1IEtlIDxrZS55dUBpbnRlbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgY29uZmlnLnRlc3RzL3VuaXgvZnJlZXR5cGUvZnJlZXR5cGUucHJpIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlnLnRlc3RzL3VuaXgvZnJlZXR5cGUvZnJlZXR5cGUucHJpIGIvY29uZmlnLnRlc3RzL3VuaXgvZnJlZXR5cGUvZnJlZXR5cGUucHJpCitpbmRleCA3ZWYxY2Y5Li5iMzYyZmNkIDEwMDY0NAorLS0tIGEvY29uZmlnLnRlc3RzL3VuaXgvZnJlZXR5cGUvZnJlZXR5cGUucHJpCisrKysgYi9jb25maWcudGVzdHMvdW5peC9mcmVldHlwZS9mcmVldHlwZS5wcmkKK0BAIC0xLDUgKzEsNSBAQAorICFjcm9zc19jb21waWxlIHsKKy0gICAgVFJZX0lOQ0xVREVQQVRIUyA9IC9pbmNsdWRlIC91c3IvaW5jbHVkZSAkJFFNQUtFX0lOQ0RJUiAkJFFNQUtFX0lOQ0RJUl9YMTEgJCRJTkNMVURFUEFUSAorKyAgICBUUllfSU5DTFVERVBBVEhTID0gJCRRTUFLRV9JTkNESVIgJCRRTUFLRV9JTkNESVJfWDExICQkSU5DTFVERVBBVEgKKyAgICAgIyBMU0IgZG9lc24ndCBhbGxvdyB1c2luZyBoZWFkZXJzIGZyb20gL2luY2x1ZGUgb3IgL3Vzci9pbmNsdWRlCisgICAgIGxpbnV4LWxzYi1nKys6VFJZX0lOQ0xVREVQQVRIUyA9ICQkUU1BS0VfSU5DRElSICQkUU1BS0VfSU5DRElSX1gxMSAkJElOQ0xVREVQQVRICisgICAgIGZvcihwLCBUUllfSU5DTFVERVBBVEhTKSB7CistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxMi1BZGQtMmJwcC1zdXBwb3J0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDEyLUFkZC0yYnBwLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU0MTFmMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxMi1BZGQtMmJwcC1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMzE4IEBACitGcm9tIDg3NDQyNzNmYzQ1MmViNTRiYmVlYjdkMTU4MjMwMDljZTkyNmM2ZmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/SmVyZW15PTIwTGFpbj1DMz1BOT89IDxqZXJlbXkubGFpbmVAbTR4Lm9yZz4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6Mzk6MjEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxMi8yMV0gQWRkIDJicHAgc3VwcG9ydAorCitTdWJtaXR0ZWQgdXBzdHJlYW0gYnV0IHJlamVjdGVkIGFzIGJlaW5nICJvdXQgb2Ygc2NvcGUiOgoraHR0cHM6Ly9idWdyZXBvcnRzLnF0LXByb2plY3Qub3JnL2Jyb3dzZS9RVEJVRy0zNDY4CisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNSArLQorIHNyYy9ndWkvZW1iZWRkZWQvcXNjcmVlbl9xd3MuY3BwICAgICAgICB8IDIxMSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIHNyYy9ndWkvZW1iZWRkZWQvcXNjcmVlbmxpbnV4ZmJfcXdzLmNwcCB8ICAgNCArLQorIDMgZmlsZXMgY2hhbmdlZCwgMjE2IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDM1YThmZTcuLjc5YzFjN2IgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTcwNjMsNiArNzA2Myw3IEBAIGlmIFsgIiRDRkdfUVdTX0RFUFRIUyIgPSAicHJvbXB0ZWQiIC1hICIkUFJPTVBUX0ZPUl9ERVBUSFMiID0gInllcyIgXTsgdGhlbgorICAgICBlY2hvICJDaG9vc2UgcGl4ZWwtZGVwdGhzIHRvIHN1cHBvcnQ6IgorICAgICBlY2hvCisgICAgIGVjaG8gIiAgIDEuIDFicHAsIGJsYWNrL3doaXRlIgorKyAgICBlY2hvICIgICAyLiAyYnBwLCBncmF5c2NhbGUiCisgICAgIGVjaG8gIiAgIDQuIDRicHAsIGdyYXlzY2FsZSIKKyAgICAgZWNobyAiICAgOC4gOGJwcCwgcGFsZXR0ZWQiCisgICAgIGVjaG8gIiAgMTIuIDEyYnBwLCByZ2IgNC00LTQiCitAQCAtNzA4MSwxMSArNzA4MiwxMSBAQCBpZiBbICIkQ0ZHX1FXU19ERVBUSFMiID0gInByb21wdGVkIiAtYSAiJFBST01QVF9GT1JfREVQVEhTIiA9ICJ5ZXMiIF07IHRoZW4KKyBmaQorIGlmIFsgLW4gIiRDRkdfUVdTX0RFUFRIUyIgLWEgIiRQTEFURk9STV9RV1MiID0gInllcyIgXTsgdGhlbgorICAgICBpZiBbICIkQ0ZHX1FXU19ERVBUSFMiID0gImFsbCIgXTsgdGhlbgorLSAgICAgICAgQ0ZHX1FXU19ERVBUSFM9IjEgNCA4IDEyIDE1IDE2IDE4IDI0IDMyIGdlbmVyaWMiCisrICAgICAgICBDRkdfUVdTX0RFUFRIUz0iMSAyIDQgOCAxMiAxNSAxNiAxOCAyNCAzMiBnZW5lcmljIgorICAgICBmaQorICAgICBmb3IgRCBpbiBgZWNobyAiJENGR19RV1NfREVQVEhTIiB8IHNlZCAtZSAncy8sLyAvZydgOyBkbworIAljYXNlICREIGluCistCSAgICAxfDR8OHwxMnwxNXwxNnwxOHwyNHwzMikgUUNPTkZJR19GTEFHUz0iJFFDT05GSUdfRkxBR1MgUVRfUVdTX0RFUFRIXyREIjs7CisrCSAgICAxfDJ8NHw4fDEyfDE1fDE2fDE4fDI0fDMyKSBRQ09ORklHX0ZMQUdTPSIkUUNPTkZJR19GTEFHUyBRVF9RV1NfREVQVEhfJEQiOzsKKyAJICAgIGdlbmVyaWMpIFFDT05GSUdfRkxBR1M9IiRRQ09ORklHX0ZMQUdTIFFUX1FXU19ERVBUSF9HRU5FUklDIjs7CisgCWVzYWMKKyAgICAgZG9uZQorZGlmZiAtLWdpdCBhL3NyYy9ndWkvZW1iZWRkZWQvcXNjcmVlbl9xd3MuY3BwIGIvc3JjL2d1aS9lbWJlZGRlZC9xc2NyZWVuX3F3cy5jcHAKK2luZGV4IGIzMDdiZjIuLjg4OTUwYjMgMTAwNjQ0CistLS0gYS9zcmMvZ3VpL2VtYmVkZGVkL3FzY3JlZW5fcXdzLmNwcAorKysrIGIvc3JjL2d1aS9lbWJlZGRlZC9xc2NyZWVuX3F3cy5jcHAKK0BAIC00NjksNiArNDY5LDU4IEBAIHN0YXRpYyB2b2lkIHNvbGlkRmlsbF9ncmF5NChRU2NyZWVuICpzY3JlZW4sIGNvbnN0IFFDb2xvciAmY29sb3IsCisgfQorICNlbmRpZiAvLyBRVF9RV1NfREVQVEhfNAorIAorKyNpZmRlZiBRVF9RV1NfREVQVEhfMgorK3N0YXRpYyBpbmxpbmUgdm9pZCBxdF9yZWN0ZmlsbF9ncmF5MihxdWludDggKmRlc3QsIHF1aW50OCB2YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdHJpZGUpCisreworKyAgICBjb25zdCBpbnQgcGl4ZWxzUGVyQnl0ZSA9IDQ7CisrICAgIGNvbnN0IGludCBhbGlnbldpZHRoID0gcU1pbih3aWR0aCwgKDQgLSAoeCAmIDMpKSAmIDMpOworKyAgICBjb25zdCBpbnQgZG9BbGlnbiA9IChhbGlnbldpZHRoID4gMCA/IDEgOiAwKTsKKysgICAgY29uc3QgaW50IGFsaWduU3RhcnQgPSBwaXhlbHNQZXJCeXRlIC0gMSAtICh4ICYgMyk7CisrICAgIGNvbnN0IGludCBhbGlnblN0b3AgPSBhbGlnblN0YXJ0IC0gKGFsaWduV2lkdGggLSAxKTsKKysgICAgY29uc3QgcXVpbnQ4IGFsaWduTWFzayA9ICgoMSA8PCAoMiAqIGFsaWduV2lkdGgpKSAtIDEpIDw8ICgyICogYWxpZ25TdG9wKTsKKysgICAgY29uc3QgaW50IHRhaWxXaWR0aCA9ICh3aWR0aCAtIGFsaWduV2lkdGgpICYgMzsKKysgICAgY29uc3QgaW50IGRvVGFpbCA9ICh0YWlsV2lkdGggPiAwID8gMSA6IDApOworKyAgICBjb25zdCBxdWludDggdGFpbE1hc2sgPSAoMSA8PCAoMiAqIChwaXhlbHNQZXJCeXRlIC0gdGFpbFdpZHRoKSkpIC0gMTsKKysgICAgY29uc3QgaW50IHdpZHRoOCA9ICh3aWR0aCAtIGFsaWduV2lkdGgpIC8gcGl4ZWxzUGVyQnl0ZTsKKysKKysgICAgZGVzdCArPSB5ICogc3RyaWRlICsgeCAvIHBpeGVsc1BlckJ5dGU7CisrICAgIHN0cmlkZSAtPSAoZG9BbGlnbiArIHdpZHRoOCk7CisrCisrICAgIGZvciAoaW50IGogPSAwOyBqIDwgaGVpZ2h0OyArK2opIHsKKysgICAgICAgIGlmIChkb0FsaWduKSB7CisrICAgICAgICAgICAgKmRlc3QgPSAoKmRlc3QgJiB+YWxpZ25NYXNrKSB8ICh2YWx1ZSAmIGFsaWduTWFzayk7CisrICAgICAgICAgICAgKytkZXN0OworKyAgICAgICAgfQorKyAgICAgICAgaWYgKHdpZHRoOCkgeworKyAgICAgICAgICAgIHF0X21lbWZpbGw8cXVpbnQ4PihkZXN0LCB2YWx1ZSwgd2lkdGg4KTsKKysgICAgICAgICAgICBkZXN0ICs9IHdpZHRoODsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChkb1RhaWwpCisrICAgICAgICAgICAgKmRlc3QgPSAoKmRlc3QgJiB0YWlsTWFzaykgfCAodmFsdWUgJiB+dGFpbE1hc2spOworKyAgICAgICAgZGVzdCArPSBzdHJpZGU7CisrICAgIH0KKyt9CisrCisrc3RhdGljIHZvaWQgc29saWRGaWxsX2dyYXkyKFFTY3JlZW4gKnNjcmVlbiwgY29uc3QgUUNvbG9yICZjb2xvciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVJlZ2lvbiAmcmVnaW9uKQorK3sKKysgICAgcXVpbnQ4ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxxdWludDgqPihzY3JlZW4tPmJhc2UoKSk7CisrICAgIGNvbnN0IHF1aW50OCBjID0gcUdyYXkoY29sb3IucmdiYSgpKSA+PiA2OworKyAgICBjb25zdCBxdWludDggYzggPSAoYyA8PCA2KSB8IChjIDw8IDQpIHwgKGMgPDwgMikgfCBjOworKworKyAgICBjb25zdCBpbnQgc3RyaWRlID0gc2NyZWVuLT5saW5lc3RlcCgpOworKyAgICBjb25zdCBRVmVjdG9yPFFSZWN0PiByZWN0cyA9IHJlZ2lvbi5yZWN0cygpOworKworKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3RzLnNpemUoKTsgKytpKSB7CisrICAgICAgICBjb25zdCBRUmVjdCByID0gcmVjdHMuYXQoaSk7CisrICAgICAgICBxdF9yZWN0ZmlsbF9ncmF5MihkZXN0LCBjOCwgci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpZGUpOworKyAgICB9CisrfQorKyNlbmRpZiAvLyBRVF9RV1NfREVQVEhfMgorKworICNpZmRlZiBRVF9RV1NfREVQVEhfMQorIHN0YXRpYyBpbmxpbmUgdm9pZCBxdF9yZWN0ZmlsbF9tb25vKHF1aW50OCAqZGVzdCwgcXVpbnQ4IHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorQEAgLTU3Niw2ICs2MjgsMTEgQEAgdm9pZCBxdF9zb2xpZEZpbGxfc2V0dXAoUVNjcmVlbiAqc2NyZWVuLCBjb25zdCBRQ29sb3IgJmNvbG9yLAorICAgICAgICAgc2NyZWVuLT5kX3B0ci0+c29saWRGaWxsID0gc29saWRGaWxsX2dyYXk0OworICAgICAgICAgYnJlYWs7CisgI2VuZGlmCisrI2lmZGVmIFFUX1FXU19ERVBUSF8yCisrICAgIGNhc2UgMjoKKysgICAgICAgIHNjcmVlbi0+ZF9wdHItPnNvbGlkRmlsbCA9IHNvbGlkRmlsbF9ncmF5MjsKKysgICAgICAgIGJyZWFrOworKyNlbmRpZgorICNpZmRlZiBRVF9RV1NfREVQVEhfMQorICAgICBjYXNlIDE6CisgICAgICAgICBzY3JlZW4tPmRfcHRyLT5zb2xpZEZpbGwgPSBzb2xpZEZpbGxfbW9ubzsKK0BAIC0xMDA2LDYgKzEwNjMsMTQ5IEBAIHN0YXRpYyB2b2lkIGJsaXRfNChRU2NyZWVuICpzY3JlZW4sIGNvbnN0IFFJbWFnZSAmaW1hZ2UsCisgfQorICNlbmRpZiAvLyBRVF9RV1NfREVQVEhfNAorIAorKyNpZmRlZiBRVF9RV1NfREVQVEhfMgorKworK3N0cnVjdCBxZ3JheTIgeyBxdWludDggZHVtbXk7IH0gUV9QQUNLRUQ7CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFNSQz4KKytzdGF0aWMgaW5saW5lIHF1aW50OCBxdF9jb252ZXJ0VG9HcmF5MihTUkMgY29sb3IpOworKworK3RlbXBsYXRlIDw+CisraW5saW5lIHF1aW50OCBxdF9jb252ZXJ0VG9HcmF5MihxdWludDMyIGNvbG9yKQorK3sKKysgICAgcmV0dXJuIHFHcmF5KGNvbG9yKSA+PiA2OworK30KKysKKyt0ZW1wbGF0ZSA8PgorK2lubGluZSBxdWludDggcXRfY29udmVydFRvR3JheTIocXVpbnQxNiBjb2xvcikKKyt7CisrICAgIGNvbnN0IGludCByID0gKGNvbG9yICYgMHhmODAwKSA+PiAxMTsKKysgICAgY29uc3QgaW50IGcgPSAoY29sb3IgJiAweDA3ZTApID4+IDY7IC8vIG9ubHkga2VlcCA1IGJpdAorKyAgICBjb25zdCBpbnQgYiA9IChjb2xvciAmIDB4MDAxZik7CisrICAgIHJldHVybiAociAqIDExICsgZyAqIDE2ICsgYiAqIDUpID4+IDg7CisrfQorKworK3RlbXBsYXRlIDw+CisraW5saW5lIHF1aW50OCBxdF9jb252ZXJ0VG9HcmF5MihxcmdiNDQ0IGNvbG9yKQorK3sKKysgICAgcmV0dXJuIHF0X2NvbnZlcnRUb0dyYXkyKHF1aW50MzIoY29sb3IpKTsKKyt9CisrCisrdGVtcGxhdGUgPD4KKytpbmxpbmUgcXVpbnQ4IHF0X2NvbnZlcnRUb0dyYXkyKHFhcmdiNDQ0NCBjb2xvcikKKyt7CisrICAgIHJldHVybiBxdF9jb252ZXJ0VG9HcmF5MihxdWludDMyKGNvbG9yKSk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBTUkM+Cisrc3RhdGljIGlubGluZSB2b2lkIHF0X3JlY3Rjb252ZXJ0X2dyYXkyKHFncmF5MiAqZGVzdDIsIGNvbnN0IFNSQyAqc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRzdFN0cmlkZSwgaW50IHNyY1N0cmlkZSkKKyt7CisrICAgIGNvbnN0IGludCBwaXhlbHNQZXJCeXRlID0gNDsKKysgICAgcXVpbnQ4ICpkZXN0OCA9IHJlaW50ZXJwcmV0X2Nhc3Q8cXVpbnQ4Kj4oZGVzdDIpCisrICAgICAgICAgICAgICAgICAgICArIHkgKiBkc3RTdHJpZGUgKyB4IC8gcGl4ZWxzUGVyQnl0ZTsKKysgICAgY29uc3QgaW50IGFsaWduV2lkdGggPSBxTWluKHdpZHRoLCAoNCAtICh4ICYgMykpICYgMyk7CisrICAgIGNvbnN0IGludCBkb0FsaWduID0gKGFsaWduV2lkdGggPiAwID8gMSA6IDApOworKyAgICBjb25zdCBpbnQgYWxpZ25TdGFydCA9IHBpeGVsc1BlckJ5dGUgLSAxIC0gKHggJiAzKTsKKysgICAgY29uc3QgaW50IGFsaWduU3RvcCA9IGFsaWduU3RhcnQgLSAoYWxpZ25XaWR0aCAtIDEpOworKyAgICBjb25zdCBxdWludDggYWxpZ25NYXNrID0gKCgxIDw8ICgyICogYWxpZ25XaWR0aCkpIC0gMSkgPDwgKDIgKiBhbGlnblN0b3ApOworKyAgICBjb25zdCBpbnQgdGFpbFdpZHRoID0gKHdpZHRoIC0gYWxpZ25XaWR0aCkgJiAzOworKyAgICBjb25zdCBpbnQgZG9UYWlsID0gKHRhaWxXaWR0aCA+IDAgPyAxIDogMCk7CisrICAgIGNvbnN0IHF1aW50OCB0YWlsTWFzayA9ICgxIDw8ICgyICogKHBpeGVsc1BlckJ5dGUgLSB0YWlsV2lkdGgpKSkgLSAxOworKyAgICBjb25zdCBpbnQgd2lkdGg4ID0gKHdpZHRoIC0gYWxpZ25XaWR0aCkgLyBwaXhlbHNQZXJCeXRlOworKworKyAgICBzcmNTdHJpZGUgPSBzcmNTdHJpZGUgLyBzaXplb2YoU1JDKSAtICh3aWR0aDggKiBwaXhlbHNQZXJCeXRlICsgYWxpZ25XaWR0aCk7CisrICAgIGRzdFN0cmlkZSAtPSAod2lkdGg4ICsgZG9BbGlnbik7CisrCisrICAgIGZvciAoaW50IGogPSAwOyAgaiA8IGhlaWdodDsgKytqKSB7CisrICAgICAgICBpZiAoZG9BbGlnbikgeworKyAgICAgICAgICAgIHF1aW50OCBkID0gKmRlc3Q4ICYgfmFsaWduTWFzazsKKysgICAgICAgICAgICBmb3IgKGludCBpID0gYWxpZ25TdGFydDsgaSA+PSBhbGlnblN0b3A7IC0taSkKKysgICAgICAgICAgICAgICAgZCB8PSBxdF9jb252ZXJ0VG9HcmF5MjxTUkM+KCpzcmMrKykgPDwgKDIgKiBpKTsKKysgICAgICAgICAgICAqZGVzdDgrKyA9IGQ7CisrICAgICAgICB9CisrICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdpZHRoODsgKytpKSB7CisrICAgICAgICAgICAgKmRlc3Q4ID0gKHF0X2NvbnZlcnRUb0dyYXkyPFNSQz4oc3JjWzBdKSA8PCA2KQorKyAgICAgICAgICAgICAgICAgICAgIHwgKHF0X2NvbnZlcnRUb0dyYXkyPFNSQz4oc3JjWzFdKSA8PCA0KQorKyAgICAgICAgICAgICAgICAgICAgIHwgKHF0X2NvbnZlcnRUb0dyYXkyPFNSQz4oc3JjWzJdKSA8PCAyKQorKyAgICAgICAgICAgICAgICAgICAgIHwgKHF0X2NvbnZlcnRUb0dyYXkyPFNSQz4oc3JjWzNdKSk7CisrICAgICAgICAgICAgc3JjICs9IDQ7CisrICAgICAgICAgICAgKytkZXN0ODsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChkb1RhaWwpIHsKKysgICAgICAgICAgICBxdWludDggZCA9ICpkZXN0OCAmIHRhaWxNYXNrOworKyAgICAgICAgICAgIHN3aXRjaCAodGFpbFdpZHRoKSB7CisrICAgICAgICAgICAgY2FzZSAzOiBkIHw9IHF0X2NvbnZlcnRUb0dyYXkyPFNSQz4oc3JjWzJdKSA8PCAyOworKyAgICAgICAgICAgIGNhc2UgMjogZCB8PSBxdF9jb252ZXJ0VG9HcmF5MjxTUkM+KHNyY1sxXSkgPDwgNDsKKysgICAgICAgICAgICBjYXNlIDE6IGQgfD0gcXRfY29udmVydFRvR3JheTI8U1JDPihzcmNbMF0pIDw8IDY7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgICpkZXN0OCA9IGQ7CisrICAgICAgICB9CisrCisrICAgICAgICBkZXN0OCArPSBkc3RTdHJpZGU7CisrICAgICAgICBzcmMgKz0gc3JjU3RyaWRlOworKyAgICB9CisrfQorKworK3RlbXBsYXRlIDw+Cisrdm9pZCBxdF9yZWN0Y29udmVydChxZ3JheTIgKmRlc3QsIGNvbnN0IHF1aW50MzIgKnNyYywKKysgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAgaW50IGRzdFN0cmlkZSwgaW50IHNyY1N0cmlkZSkKKyt7CisrICAgIHF0X3JlY3Rjb252ZXJ0X2dyYXkyPHF1aW50MzI+KGRlc3QsIHNyYywgeCwgeSwgd2lkdGgsIGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0U3RyaWRlLCBzcmNTdHJpZGUpOworK30KKysKKyt0ZW1wbGF0ZSA8PgorK3ZvaWQgcXRfcmVjdGNvbnZlcnQocWdyYXkyICpkZXN0LCBjb25zdCBxdWludDE2ICpzcmMsCisrICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgIGludCBkc3RTdHJpZGUsIGludCBzcmNTdHJpZGUpCisreworKyAgICBxdF9yZWN0Y29udmVydF9ncmF5MjxxdWludDE2PihkZXN0LCBzcmMsIHgsIHksIHdpZHRoLCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFN0cmlkZSwgc3JjU3RyaWRlKTsKKyt9CisrCisrdGVtcGxhdGUgPD4KKyt2b2lkIHF0X3JlY3Rjb252ZXJ0KHFncmF5MiAqZGVzdCwgY29uc3QgcXJnYjQ0NCAqc3JjLAorKyAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICBpbnQgZHN0U3RyaWRlLCBpbnQgc3JjU3RyaWRlKQorK3sKKysgICAgcXRfcmVjdGNvbnZlcnRfZ3JheTI8cXJnYjQ0ND4oZGVzdCwgc3JjLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RTdHJpZGUsIHNyY1N0cmlkZSk7CisrfQorKworK3RlbXBsYXRlIDw+Cisrdm9pZCBxdF9yZWN0Y29udmVydChxZ3JheTIgKmRlc3QsIGNvbnN0IHFhcmdiNDQ0NCAqc3JjLAorKyAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICBpbnQgZHN0U3RyaWRlLCBpbnQgc3JjU3RyaWRlKQorK3sKKysgICAgcXRfcmVjdGNvbnZlcnRfZ3JheTI8cWFyZ2I0NDQ0PihkZXN0LCBzcmMsIHgsIHksIHdpZHRoLCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0U3RyaWRlLCBzcmNTdHJpZGUpOworK30KKysKKytzdGF0aWMgdm9pZCBibGl0XzIoUVNjcmVlbiAqc2NyZWVuLCBjb25zdCBRSW1hZ2UgJmltYWdlLAorKyAgICAgICAgICAgICAgICAgICBjb25zdCBRUG9pbnQgJnRvcExlZnQsIGNvbnN0IFFSZWdpb24gJnJlZ2lvbikKKyt7CisrICAgIHN3aXRjaCAoaW1hZ2UuZm9ybWF0KCkpIHsKKysgICAgY2FzZSBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZDoKKysgICAgICAgIGJsaXRfdGVtcGxhdGU8cWdyYXkyLCBxdWludDMyPihzY3JlZW4sIGltYWdlLCB0b3BMZWZ0LCByZWdpb24pOworKyAgICAgICAgcmV0dXJuOworKyAgICBjYXNlIFFJbWFnZTo6Rm9ybWF0X1JHQjE2OgorKyAgICAgICAgYmxpdF90ZW1wbGF0ZTxxZ3JheTIsIHF1aW50MTY+KHNjcmVlbiwgaW1hZ2UsIHRvcExlZnQsIHJlZ2lvbik7CisrICAgICAgICByZXR1cm47CisrICAgIGNhc2UgUUltYWdlOjpGb3JtYXRfUkdCNDQ0OgorKyAgICAgICAgYmxpdF90ZW1wbGF0ZTxxZ3JheTIsIHFyZ2I0NDQ+KHNjcmVlbiwgaW1hZ2UsIHRvcExlZnQsIHJlZ2lvbik7CisrICAgICAgICByZXR1cm47CisrICAgIGNhc2UgUUltYWdlOjpGb3JtYXRfQVJHQjQ0NDRfUHJlbXVsdGlwbGllZDoKKysgICAgICAgIGJsaXRfdGVtcGxhdGU8cWdyYXkyLCBxYXJnYjQ0NDQ+KHNjcmVlbiwgaW1hZ2UsIHRvcExlZnQsIHJlZ2lvbik7CisrICAgICAgICByZXR1cm47CisrICAgIGRlZmF1bHQ6CisrICAgICAgICBxQ3JpdGljYWwoImJsaXRfMigpOiBJbWFnZSBmb3JtYXQgJWQgbm90IHN1cHBvcnRlZCEiLCBpbWFnZS5mb3JtYXQoKSk7CisrICAgIH0KKyt9CisrI2VuZGlmIC8vIFFUX1FXU19ERVBUSF8yCisrCisgI2lmZGVmIFFUX1FXU19ERVBUSF8xCisgCisgc3RydWN0IHFtb25vIHsgcXVpbnQ4IGR1bW15OyB9IFFfUEFDS0VEOworQEAgLTEyNTksNiArMTQ1OSwxMSBAQCB2b2lkIHF0X2JsaXRfc2V0dXAoUVNjcmVlbiAqc2NyZWVuLCBjb25zdCBRSW1hZ2UgJmltYWdlLAorICAgICAgICAgc2NyZWVuLT5kX3B0ci0+YmxpdCA9IGJsaXRfNDsKKyAgICAgICAgIGJyZWFrOworICNlbmRpZgorKyNpZmRlZiBRVF9RV1NfREVQVEhfMgorKyAgICBjYXNlIDI6CisrICAgICAgICBzY3JlZW4tPmRfcHRyLT5ibGl0ID0gYmxpdF8yOworKyAgICAgICAgYnJlYWs7CisrI2VuZGlmCisgI2lmZGVmIFFUX1FXU19ERVBUSF8xCisgICAgIGNhc2UgMToKKyAgICAgICAgIHNjcmVlbi0+ZF9wdHItPmJsaXQgPSBibGl0XzE7CitAQCAtMjE0Niw2ICsyMzUxLDggQEAgaW50IFFTY3JlZW46OmFsbG9jKHVuc2lnbmVkIGludCByLHVuc2lnbmVkIGludCBnLHVuc2lnbmVkIGludCBiKQorICAgICAgICAgfQorICAgICB9IGVsc2UgaWYgKGQgPT0gNCkgeworICAgICAgICAgcmV0ID0gcUdyYXkociwgZywgYikgPj4gNDsKKysgICAgfSBlbHNlIGlmIChkID09IDIpIHsKKysgICAgICAgIHJldCA9IHFHcmF5KHIsIGcsIGIpID4+IDY7CisgICAgIH0gZWxzZSBpZiAoZCA9PSAxKSB7CisgICAgICAgICByZXQgPSBxR3JheShyLCBnLCBiKSA+PSAxMjg7CisgICAgIH0gZWxzZSB7CitAQCAtMjIxNiw2ICsyNDIzLDEwIEBAIGJvb2wgUVNjcmVlbjo6c3VwcG9ydHNEZXB0aChpbnQgZCkgY29uc3QKKyAgICAgfSBlbHNlIGlmKGQ9PTEpIHsKKyAgICAgICAgIHJldHVybiB0cnVlOworICNlbmRpZgorKyNpZmRlZiBRVF9RV1NfREVQVEhfMgorKyAgICB9IGVsc2UgaWYoZD09MikgeworKyAgICAgICAgcmV0dXJuIHRydWU7CisrI2VuZGlmCisgI2lmZGVmIFFUX1FXU19ERVBUSF80CisgICAgIH0gZWxzZSBpZihkPT00KSB7CisgICAgICAgICByZXR1cm4gdHJ1ZTsKK2RpZmYgLS1naXQgYS9zcmMvZ3VpL2VtYmVkZGVkL3FzY3JlZW5saW51eGZiX3F3cy5jcHAgYi9zcmMvZ3VpL2VtYmVkZGVkL3FzY3JlZW5saW51eGZiX3F3cy5jcHAKK2luZGV4IDZmM2NhYWQuLjE0MTU5ZWUgMTAwNjQ0CistLS0gYS9zcmMvZ3VpL2VtYmVkZGVkL3FzY3JlZW5saW51eGZiX3F3cy5jcHAKKysrKyBiL3NyYy9ndWkvZW1iZWRkZWQvcXNjcmVlbmxpbnV4ZmJfcXdzLmNwcAorQEAgLTQ2Niw4ICs0NjYsOCBAQCBib29sIFFMaW51eEZiU2NyZWVuOjpjb25uZWN0KGNvbnN0IFFTdHJpbmcgJmRpc3BsYXlTcGVjKQorICAgICAgICAgc2V0dXBPZmZTY3JlZW4oKTsKKyAKKyAgICAgLy8gTm93IHJlYWQgaW4gcGFsZXR0ZQorLSAgICBpZigodmluZm8uYml0c19wZXJfcGl4ZWw9PTgpIHx8ICh2aW5mby5iaXRzX3Blcl9waXhlbD09NCkpIHsKKy0gICAgICAgIHNjcmVlbmNvbHM9ICh2aW5mby5iaXRzX3Blcl9waXhlbD09OCkgPyAyNTYgOiAxNjsKKysgICAgaWYoKHZpbmZvLmJpdHNfcGVyX3BpeGVsPT04KSB8fCAodmluZm8uYml0c19wZXJfcGl4ZWw9PTQpIHx8ICh2aW5mby5iaXRzX3Blcl9waXhlbD09MikpIHsKKysgICAgICAgIHNjcmVlbmNvbHM9IDEgPDwgdmluZm8uYml0c19wZXJfcGl4ZWw7CisgICAgICAgICBpbnQgbG9vcGM7CisgICAgICAgICA6OmZiX2NtYXAgc3RhcnRjbWFwOworICAgICAgICAgc3RhcnRjbWFwLnN0YXJ0PTA7CistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxMy1jb25maWd1cmUtYWRkLWNyb3NzYXJjaC1vcHRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTMtY29uZmlndXJlLWFkZC1jcm9zc2FyY2gtb3B0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MmNkYWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTMtY29uZmlndXJlLWFkZC1jcm9zc2FyY2gtb3B0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNTEgQEAKK0Zyb20gNTQ5MzQyZmEzODBlZDJhOWFkNDFiZTNkMDRlZTJmMDU4NWY2YTQ2NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1pY2hhZWwgTGF1ZXIgPG1pY2tleUB2YW5pbGxlLW1lZGlhLmRlPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDo0MTozMiArMDIwMAorU3ViamVjdDogW1BBVENIIDEzLzIxXSBjb25maWd1cmU6IGFkZCAiLWNyb3NzYXJjaCIgb3B0aW9uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CisKK1VwZGF0ZSBmb3IgcXQgNC44LjcKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUgfCA3ICsrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDRlYjRhM2QuLmE0ZGFjZWMgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTExNjAsNyArMTE2MCw3IEBAIHdoaWxlIFsgIiQjIiAtZ3QgMCBdOyBkbworICAgICAgICAgc2hpZnQKKyAgICAgICAgIFZBTD0kMQorICAgICAgICAgOzsKKy0gICAgLXByZWZpeHwtZG9jZGlyfC1oZWFkZXJkaXJ8LXBsdWdpbmRpcnwtaW1wb3J0ZGlyfC1kYXRhZGlyfC1saWJkaXJ8LWJpbmRpcnwtdHJhbnNsYXRpb25kaXJ8LXN5c2NvbmZkaXJ8LWV4YW1wbGVzZGlyfC1kZW1vc2RpcnwtZGVwdGhzfC1tYWtlfC1ub21ha2V8LXBsYXRmb3JtfC14cGxhdGZvcm18LWRldmljZS1vcHRpb258LWJ1aWxka2V5fC1zZGt8LWFyY2h8LWhvc3QtYXJjaHwtbXlzcWxfY29uZmlnfC1wc3FsX2NvbmZpZ3wtc3lzcm9vdCkKKysgICAgLXByZWZpeHwtZG9jZGlyfC1oZWFkZXJkaXJ8LXBsdWdpbmRpcnwtaW1wb3J0ZGlyfC1kYXRhZGlyfC1saWJkaXJ8LWJpbmRpcnwtdHJhbnNsYXRpb25kaXJ8LXN5c2NvbmZkaXJ8LWV4YW1wbGVzZGlyfC1kZW1vc2RpcnwtZGVwdGhzfC1tYWtlfC1ub21ha2V8LXBsYXRmb3JtfC14cGxhdGZvcm18LWRldmljZS1vcHRpb258LWJ1aWxka2V5fC1zZGt8LWFyY2h8LWhvc3QtYXJjaHwtbXlzcWxfY29uZmlnfC1wc3FsX2NvbmZpZ3wtc3lzcm9vdHwtY3Jvc3NhcmNoKQorICAgICAgICAgVkFSPWBlY2hvICQxIHwgc2VkICJzLF4tXCguKlwpLFwxLCJgCisgICAgICAgICBzaGlmdAorICAgICAgICAgVkFMPSIkMSIKK0BAIC0xNzE5LDYgKzE3MTksOSBAQCB3aGlsZSBbICIkIyIgLWd0IDAgXTsgZG8KKyAgICAgICAgIERFVl9WQUw9YGVjaG8gJFZBTCB8IHNlZCAicyxeLio9XCguKlwpLFwxLCJgCisgICAgICAgICBEZXZpY2VWYXIgc2V0ICRERVZfVkFSICRERVZfVkFMCisgICAgICAgICA7OworKyAgICBjcm9zc2FyY2gpCisrICAgICAgICBDUk9TU0FSQ0g9IiRWQUwiCisrICAgICAgICA7OworICAgICBkZWJ1Zy1hbmQtcmVsZWFzZSkKKyAgICAgICAgIGlmIFsgIiRWQUwiID0gInllcyIgXSB8fCBbICIkVkFMIiA9ICJubyIgXTsgdGhlbgorICAgICAgICAgICAgIENGR19ERUJVR19SRUxFQVNFPSIkVkFMIgorQEAgLTMzMzMsNiArMzMzNiw4IEBAIGFybSopCisgICAgIDs7CisgZXNhYworIAorK0NGR19BUkNIPSIkQ1JPU1NBUkNIIgorKworIGlmIFsgLWQgIiRyZWxwYXRoL3NyYy9jb3JlbGliL2FyY2gvJENGR19BUkNIIiBdOyB0aGVuCisgICAgIGlmIFsgIiRPUFRfVkVSQk9TRSIgPSAieWVzIiBdOyB0aGVuCisgICAgICAgICBlY2hvICIgICAgJyRDRkdfQVJDSCcgaXMgc3VwcG9ydGVkIgorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTQtdHJhbnNsYXRpb25zLWZpeC1waG9ueS10cmFuc2xhdGlvbi1saW5raW5nLWVycm9yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE0LXRyYW5zbGF0aW9ucy1maXgtcGhvbnktdHJhbnNsYXRpb24tbGlua2luZy1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjcyNGE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE0LXRyYW5zbGF0aW9ucy1maXgtcGhvbnktdHJhbnNsYXRpb24tbGlua2luZy1lcnJvci5wYXRjaApAQCAtMCwwICsxLDQxIEBACitGcm9tIDIxYWY4ZjZkMjFiMjhhNTMwNDFhZmZiMTFiNThkNjMxNjAyM2ZhOTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDo0NToxMCArMDIwMAorU3ViamVjdDogW1BBVENIIDE0LzIxXSB0cmFuc2xhdGlvbnM6IGZpeCBwaG9ueSB0cmFuc2xhdGlvbiBsaW5raW5nIGVycm9yCisKKyAgfCAuLi4vdXNyL2xpYi9jcnQxLm86IEluIGZ1bmN0aW9uIGBfc3RhcnQnOgorICB8IC4uLi8uLi9zeXNkZXBzL2kzODYvZWxmL3N0YXJ0LlM6MTE1OiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBtYWluJworICB8IGNvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyB0cmFuc2xhdGlvbnMvdHJhbnNsYXRpb25zLnBybyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90cmFuc2xhdGlvbnMvdHJhbnNsYXRpb25zLnBybyBiL3RyYW5zbGF0aW9ucy90cmFuc2xhdGlvbnMucHJvCitpbmRleCBkYzk5YmViLi4wZDk4ODI5IDEwMDY0NAorLS0tIGEvdHJhbnNsYXRpb25zL3RyYW5zbGF0aW9ucy5wcm8KKysrKyBiL3RyYW5zbGF0aW9ucy90cmFuc2xhdGlvbnMucHJvCitAQCAtMTAxLDcgKzEwMSw3IEBAIHVwZGF0ZXFtLm5hbWUgPSBMUkVMRUFTRSAke1FNQUtFX0ZJTEVfSU59CisgdXBkYXRlcW0uQ09ORklHICs9IG5vX2xpbmsKKyBRTUFLRV9FWFRSQV9DT01QSUxFUlMgKz0gdXBkYXRlcW0KKyAKKy1pc0VtcHR5KHZjcHJvaikgeworKyFpc0VtcHR5KHZjcHJvaikgeworICAgICBRTUFLRV9MSU5LID0gQDogSUdOT1JFIFRISVMgTElORQorICAgICBPQkpFQ1RTX0RJUiA9CisgICAgIHdpbjMyOkNPTkZJRyAtPSBlbWJlZF9tYW5pZmVzdF9leGUKK0BAIC0xMTEsNyArMTExLDcgQEAgaXNFbXB0eSh2Y3Byb2opIHsKKyAgICAgcGhvbnlfc3JjLmlucHV0ID0gUEhPTllfREVQUworICAgICBwaG9ueV9zcmMub3V0cHV0ID0gcGhvbnkuYworICAgICBwaG9ueV9zcmMudmFyaWFibGVfb3V0ID0gR0VORVJBVEVEX1NPVVJDRVMKKy0gICAgcGhvbnlfc3JjLmNvbW1hbmRzID0gZWNobyBpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0gPiBwaG9ueS5jCisrICAgIHBob255X3NyYy5jb21tYW5kcyA9IGVjaG8gXCJpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH1cIiA+IHBob255LmMKKyAgICAgcGhvbnlfc3JjLm5hbWUgPSBDUkVBVEUgcGhvbnkuYworICAgICBwaG9ueV9zcmMuQ09ORklHICs9IGNvbWJpbmUKKyAgICAgUU1BS0VfRVhUUkFfQ09NUElMRVJTICs9IHBob255X3NyYworLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTUtY29uZmlndXJlLWFkZC1ub3N0cmlwLWZvci1kZWJ1Zy1wYWNrYWdlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxNS1jb25maWd1cmUtYWRkLW5vc3RyaXAtZm9yLWRlYnVnLXBhY2thZ2VzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZGI0OTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTUtY29uZmlndXJlLWFkZC1ub3N0cmlwLWZvci1kZWJ1Zy1wYWNrYWdlcy5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDkyNTBmZWQwODZhNGE4YTY0NWE5NzI3NjRhOWJmMzRlNDU2NmVjMmUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGYXRoaSBCb3VkcmEgPGZhYm9AZGViaWFuLm9yZz4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6NDY6MTQgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxNS8yMV0gY29uZmlndXJlOiBhZGQgbm9zdHJpcCBmb3IgZGVidWcgcGFja2FnZXMKKworUXQgaXMgYnVpbHQgaW4gcmVsZWFzZSBtb2RlIGFuZCBzdHJpcCBmaWxlcyBieSBkZWZhdWx0LgorU2V0IENPTkZJRys9bm9zdHJpcCB0byBhdm9pZCB0aGUgc3RyaXBwaW5nIGFuZAorbGV0IGRoX3N0cmlwIGRvIGl0IHRvIGdlbmVyYXRlIGRlYnVnIHBhY2thZ2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW0NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDc5ODNjM2QuLmQwMjgyNGIgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTcxMCw2ICs3MTAsOCBAQCBta2RpciAtcCAiJG91dHBhdGgvY29uZmlnLnRlc3RzIgorIHJtIC1mICIkb3V0cGF0aC9jb25maWcudGVzdHMvLnFtYWtlLmNhY2hlIgorIGNwICIkUU1BS0VfVkFSU19GSUxFIiAiJG91dHBhdGgvY29uZmlnLnRlc3RzLy5xbWFrZS5jYWNoZSIKKyAKKytRTWFrZVZhciBhZGQgQ09ORklHIG5vc3RyaXAKKysKKyBRTWFrZVZhciBhZGQgc3R5bGVzICJjZGUgbWFjIG1vdGlmIHBsYXN0aXF1ZSBjbGVhbmxvb2tzIHdpbmRvd3MiCisgUU1ha2VWYXIgYWRkIGRlY29yYXRpb25zICJkZWZhdWx0IHdpbmRvd3Mgc3R5bGVkIgorIFFNYWtlVmFyIGFkZCBtb3VzZS1kcml2ZXJzICJwYyIKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE2LWNvbmZpZ3VyZS1ldmFsLVFNQUtFX0NYWC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxNi1jb25maWd1cmUtZXZhbC1RTUFLRV9DWFgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMzZGU0NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxNi1jb25maWd1cmUtZXZhbC1RTUFLRV9DWFgucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRnJvbSA4NDAzNjM0YTcxZjA2N2VlYzUxNGI2ZDIxOTNjZjQxZTI4MWRmZjhlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjQ3OjA4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMTYvMjFdIGNvbmZpZ3VyZTogZXZhbCBRTUFLRV9DWFgKKworQWxsb3cgZXhwYW5zaW9uIG9mICQoLi4uKSByZWZlcmVuY2VzIGluIFFNQUtFX0NYWCAoY3VycmVudGx5IGl0cyB2YWx1ZQoraXMgJChPRV9RTUFLRV9DWFgpKSBpbiBvcmRlciB0byBhbGxvdyBjb21waWxlciB2ZXJzaW9uIGNoZWNrIHRvIHN1Y2NlZWQKK3doaWNoIGFsbG93cyBXZWJLaXQgdG8gYmUgZW5hYmxlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCitDb25mbGljdHM6CisJY29uZmlndXJlCistLS0KKyBjb25maWd1cmUgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggZDAyODI0Yi4uODkxZDZlNyAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtMzQwOSw3ICszNDA5LDggQEAgZWxzZQorICAgICBDRkdfRlJBTUVXT1JLPW5vCisgZmkKKyAKKy1RTUFLRV9DT05GX0NPTVBJTEVSPWBnZXRYUU1ha2VDb25mIFFNQUtFX0NYWGAKKytRTUFLRV9DT05GX0NPTVBJTEVSPWBnZXRYUU1ha2VDb25mIFFNQUtFX0NYWCB8IHNlZCAtbiAncy8kWyhdXChbMC05YS16QS1aX10qXClbKV0vJFwxL3BnJ2AKKytRTUFLRV9DT05GX0NPTVBJTEVSPWBldmFsICJlY2hvICRRTUFLRV9DT05GX0NPTVBJTEVSImAKKyBURVNUX0NPTVBJTEVSPSIkQ1hYIgorIAorIFsgLXogIiRURVNUX0NPTVBJTEVSIiBdICYmIFRFU1RfQ09NUElMRVI9JFFNQUtFX0NPTkZfQ09NUElMRVIKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE3LWNvbmZpZ3VyZS1lbnN1cmUtd2UtaWRlbnRpZnktdGhlLWNvbXBpbGVyLWFzLWctaW4tY28ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTctY29uZmlndXJlLWVuc3VyZS13ZS1pZGVudGlmeS10aGUtY29tcGlsZXItYXMtZy1pbi1jby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDcxOTY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE3LWNvbmZpZ3VyZS1lbnN1cmUtd2UtaWRlbnRpZnktdGhlLWNvbXBpbGVyLWFzLWctaW4tY28ucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSBkMmJiNzAxYjU1MTQwMmYwYmVmZGRkMGU5MDY0MjM1OTZiZGMwZGY3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjQ4OjM3ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMTcvMjFdIGNvbmZpZ3VyZTogZW5zdXJlIHdlIGlkZW50aWZ5IHRoZSBjb21waWxlciBhcyBnKysgaW4KKyBjb25maWd1cmUKKworT3VyIFBMQVRGT1JNIGluIE9FIGlzICR7VEFSR0VUX09TfS1vZS1nKyssIGFuZCBwcmV2aW91c2x5IHRoZSBjb25maWd1cmUKK3NjcmlwdCB3YXMgaW50ZXJwcmV0aW5nIGZyb20gdGhpcyB0aGF0IHRoZSBjb21waWxlciB3YXMgIm9lLWcrKyIgYW5kCit0aHVzCitnKysgc3BlY2lmaWMgY2hlY2tzIHdlcmUgbm90IGJlaW5nIHJ1biBzaW5jZSB0aGlzIHN0cmluZyBkaWQgbm90IG1hdGNoOworYW1vbmcgb3RoZXIgdGhpbmdzIHRoaXMgcmVzdWx0ZWQgaW4gYSBjb21waWxlciB2ZXJzaW9uIGNoZWNrIGluIHRoZQorUXRXZWJLaXQgYnVpbGQgY29kZSBub3Qgd29ya2luZywgYW5kIGhlbmNlIHRoZSBmb2xsb3dpbmcgZXJyb3IgYXQgYnVpbGQKK3RpbWU6CisKKy4vd3RmL051bGxQdHIuaDo0ODoxOiBlcnJvcjogaWRlbnRpZmllciAnbnVsbHB0cicgd2lsbCBiZWNvbWUgYSBrZXl3b3JkCitpbiBDKysweCBbLVdlcnJvcj1jKysweC1jb21wYXRdCisKK1RoZSBlYXNpZXN0IHRoaW5nIHNpbmNlIG91ciBQTEFURk9STSBpcyBlbnRpcmVseSBhcnRpZmljaWFsIGlzIHRvIGp1c3QKK2ZvcmNlIENPTVBJTEVSIHRvICJnKysiIGluIHRoZSBjb25maWd1cmUgc2NyaXB0IGlmIGl0IGlzIGRldGVjdGVkIGFzCisib2UtZysrIi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA4OTFkNmU3Li43MDMxODk4IDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC03NTkyLDYgKzc1OTIsOSBAQCBlbGlmIFsgIiRYUExBVEZPUk0iICE9ICIkUExBVEZPUk0iIF07IHRoZW4KKyBlbHNlCisgICAgIENPTVBJTEVSPWBlY2hvICRQTEFURk9STSB8IGN1dCAtZiAyLSAtZC1gCisgZmkKKytjYXNlICRDT01QSUxFUiBpbgorKyAgICAqb2UtZysrKSBDT01QSUxFUj0iZysrIiA7OworK2VzYWMKKyBpZiBbICIkQ0ZHX0VYQ0VQVElPTlMiID0gInVuc3BlY2lmaWVkIiAtYSAiJFBMQVRGT1JNX1FXUyIgPSAieWVzIiBdOyB0aGVuCisgICAgIENGR19FWENFUFRJT05TPW5vCisgZmkKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE4LWNvbmZpZ3VyZS1tYWtlLXB1bHNlYXVkaW8tYS1jb25maWd1cmFibGUtb3B0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE4LWNvbmZpZ3VyZS1tYWtlLXB1bHNlYXVkaW8tYS1jb25maWd1cmFibGUtb3B0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5Y2RkNGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTgtY29uZmlndXJlLW1ha2UtcHVsc2VhdWRpby1hLWNvbmZpZ3VyYWJsZS1vcHRpb24ucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSBkNmRjMWE3ZDY1OTRkN2UzOTUzNDc3MzJhM2U1NTNmYzgyY2NhYjNkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUdWUsIDI4IEZlYiAyMDEyIDE1OjEwOjI0ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTgvMjFdIGNvbmZpZ3VyZTogbWFrZSBwdWxzZWF1ZGlvIGEgY29uZmlndXJhYmxlIG9wdGlvbgorCitBbGxvd3MgZGlzYWJsaW5nIHB1bHNlYXVkaW8gc3VwcG9ydCB3aXRoaW4gcGhvbm9uIGF0IGNvbmZpZ3VyZSB0aW1lLgorKFRoaXMgaXMgdGhlIFF0IDQuOC4wIHZlcnNpb24uKQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUgfCA5ICsrKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggNzAzMTg5OC4uYTRhNDJmMSAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtMTEzOSw3ICsxMTM5LDcgQEAgd2hpbGUgWyAiJCMiIC1ndCAwIF07IGRvCisgICAgICAgICBWQUw9bm8KKyAgICAgICAgIDs7CisgICAgICNRdCBzdHlsZSB5ZXMgb3B0aW9ucworLSAgICAtaW5jcmVtZW50YWx8LXF2ZmJ8LXByb2ZpbGV8LXNoYXJlZHwtc3RhdGljfC1zbXwteGluZXJhbWF8LXhzaGFwZXwteHN5bmN8LXhpbnB1dHwtZWdsfC1yZWR1Y2UtZXhwb3J0c3wtcGNofC1zZXBhcmF0ZS1kZWJ1Zy1pbmZvfC1zdGx8LWZyZWV0eXBlfC14Y3Vyc29yfC14Zml4ZXN8LXhyYW5kcnwteHJlbmRlcnwtbWl0c2htfC1mb250Y29uZmlnfC14a2J8LW5pc3wtcWRidXN8LWRidXN8LWRidXMtbGlua2VkfC1nbGlifC1nc3RyZWFtZXJ8LWd0a3N0eWxlfC1jdXBzfC1pY29udnwtbGFyZ2VmaWxlfC1ofC1oZWxwfC12fC12ZXJib3NlfC1kZWJ1Z3wtcmVsZWFzZXwtZmFzdHwtYWNjZXNzaWJpbGl0eXwtY29uZmlybS1saWNlbnNlfC1nbnVtYWtlfC1mcmFtZXdvcmt8LXF0M3N1cHBvcnR8LWRlYnVnLWFuZC1yZWxlYXNlfC1leGNlcHRpb25zfC1jb2NvYXwtY2FyYm9ufC11bml2ZXJzYWx8LWhhcmZidXp6fC1wcmVmaXgtaW5zdGFsbHwtc2lsZW50fC1hcm1mcGF8LW9wdGltaXplZC1xbWFrZXwtZHdhcmYyfC1yZWR1Y2UtcmVsb2NhdGlvbnN8LXNzZXwtb3BlbnNzbHwtb3BlbnNzbC1saW5rZWR8LXB0bWFsbG9jfC14bWxwYXR0ZXJuc3wtcGhvbm9ufC1waG9ub24tYmFja2VuZHwtbXVsdGltZWRpYXwtYXVkaW8tYmFja2VuZHwtc3ZnfC1kZWNsYXJhdGl2ZXwtZGVjbGFyYXRpdmUtZGVidWd8LWphdmFzY3JpcHQtaml0fC1zY3JpcHR8LXNjcmlwdHRvb2xzfC1ycGF0aHwtZm9yY2UtcGtnLWNvbmZpZ3wtczYwfC11c2VkZWZmaWxlc3wtaWN1KQorKyAgICAtaW5jcmVtZW50YWx8LXF2ZmJ8LXByb2ZpbGV8LXNoYXJlZHwtc3RhdGljfC1zbXwteGluZXJhbWF8LXhzaGFwZXwteHN5bmN8LXhpbnB1dHwtZWdsfC1yZWR1Y2UtZXhwb3J0c3wtcGNofC1zZXBhcmF0ZS1kZWJ1Zy1pbmZvfC1zdGx8LWZyZWV0eXBlfC14Y3Vyc29yfC14Zml4ZXN8LXhyYW5kcnwteHJlbmRlcnwtbWl0c2htfC1mb250Y29uZmlnfC14a2J8LW5pc3wtcWRidXN8LWRidXN8LWRidXMtbGlua2VkfC1nbGlifC1nc3RyZWFtZXJ8LXB1bHNlYXVkaW98LWd0a3N0eWxlfC1jdXBzfC1pY29udnwtbGFyZ2VmaWxlfC1ofC1oZWxwfC12fC12ZXJib3NlfC1kZWJ1Z3wtcmVsZWFzZXwtZmFzdHwtYWNjZXNzaWJpbGl0eXwtY29uZmlybS1saWNlbnNlfC1nbnVtYWtlfC1mcmFtZXdvcmt8LXF0M3N1cHBvcnR8LWRlYnVnLWFuZC1yZWxlYXNlfC1leGNlcHRpb25zfC1jb2NvYXwtY2FyYm9ufC11bml2ZXJzYWx8LWhhcmZidXp6fC1wcmVmaXgtaW5zdGFsbHwtc2lsZW50fC1hcm1mcGF8LW9wdGltaXplZC1xbWFrZXwtZHdhcmYyfC1yZWR1Y2UtcmVsb2NhdGlvbnN8LXNzZXwtb3BlbnNzbHwtb3BlbnNzbC1saW5rZWR8LXB0bWFsbG9jfC14bWxwYXR0ZXJuc3wtcGhvbm9ufC1waG9ub24tYmFja2VuZHwtbXVsdGltZWRpYXwtYXVkaW8tYmFja2VuZHwtc3ZnfC1kZWNsYXJhdGl2ZXwtZGVjbGFyYXRpdmUtZGVidWd8LWphdmFzY3JpcHQtaml0fC1zY3JpcHR8LXNjcmlwdHRvb2xzfC1ycGF0aHwtZm9yY2UtcGtnLWNvbmZpZ3wtczYwfC11c2VkZWZmaWxlc3wtaWN1KQorICAgICAgICAgVkFSPWBlY2hvICQxIHwgc2VkICJzLF4tXCguKlwpLFwxLCJgCisgICAgICAgICBWQUw9eWVzCisgICAgICAgICA7OworQEAgLTIxMjAsNiArMjEyMCwxMyBAQCB3aGlsZSBbICIkIyIgLWd0IDAgXTsgZG8KKyAgICAgICAgICAgICBVTktOT1dOX09QVD15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICA7OworKyAgICBwdWxzZWF1ZGlvKQorKyAgICAgICAgaWYgWyAiJFZBTCIgPSAieWVzIiBdIHx8IFsgIiRWQUwiID0gIm5vIiBdOyB0aGVuCisrICAgICAgICAgICAgQ0ZHX1BVTFNFQVVESU89IiRWQUwiCisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgVU5LTk9XTl9PUFQ9eWVzCisrICAgICAgICBmaQorKyAgICAgICAgOzsKKyAgICAgZ3Rrc3R5bGUpCisgICAgICAgICBpZiBbICIkVkFMIiA9ICJ5ZXMiIF0gfHwgWyAiJFZBTCIgPSAibm8iIF07IHRoZW4KKyAgICAgICAgICAgICBDRkdfUUdUS1NUWUxFPSIkVkFMIgorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTktRml4ZXMtZm9yLWdjYy00LjcuMC1wYXJ0aWN1bGFybHktb24tcWVtdXg4Ni5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxOS1GaXhlcy1mb3ItZ2NjLTQuNy4wLXBhcnRpY3VsYXJseS1vbi1xZW11eDg2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4M2QyNDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTktRml4ZXMtZm9yLWdjYy00LjcuMC1wYXJ0aWN1bGFybHktb24tcWVtdXg4Ni5wYXRjaApAQCAtMCwwICsxLDYzIEBACitGcm9tIDFmMWRhMmYyNGQzMDI4YjI1MGRiYzJlOThlMmI3ZTM3ODYyYjM3NzEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6NTQ6MzggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxOS8yMV0gRml4ZXMgZm9yIGdjYyA0LjcuMCwgcGFydGljdWxhcmx5IG9uIHFlbXV4ODYKKworT3JpZ2luOiB1cHN0cmVhbSwgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvOTM2MzEKK09yaWdpbjogdXBzdHJlYW0sIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzExMzg0OAorCitCdWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjE2OAorQnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODM1ODQKKworUlAgMjAxMi8wNC8zMAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwICAgICAgICAgICAgICAgICAgICAgIHwgMiArLQorIHNyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcCAgICAgICAgICAgIHwgMiArLQorIC4uLi93ZWJraXQvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaCAgIHwgMSArCisgMyBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCitpbmRleCAzMmU0N2NhLi5iOGU3Mzg5IDEwMDY0NAorLS0tIGEvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrKyBiL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCitAQCAtMTA4MCw3ICsxMDgwLDcgQEAgdm9pZCBFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaGFuZ2UpCisgeworICAgICAvLyBSZWYgY3VycmVudFN0eWxlIGluIGNhc2UgaXQgd291bGQgb3RoZXJ3aXNlIGJlIGRlbGV0ZWQgd2hlbiBzZXRSZW5kZXJTdHlsZSgpIGlzIGNhbGxlZC4KKyAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBjdXJyZW50U3R5bGUocmVuZGVyU3R5bGUoKSk7CistICAgIGJvb2wgaGFzUGFyZW50U3R5bGUgPSBwYXJlbnROb2RlRm9yUmVuZGVyaW5nQW5kU3R5bGUoKSA/IHBhcmVudE5vZGVGb3JSZW5kZXJpbmdBbmRTdHlsZSgpLT5yZW5kZXJTdHlsZSgpIDogZmFsc2U7CisrICAgIGJvb2wgaGFzUGFyZW50U3R5bGUgPSBwYXJlbnROb2RlRm9yUmVuZGVyaW5nQW5kU3R5bGUoKSA/IHN0YXRpY19jYXN0PGJvb2w+KHBhcmVudE5vZGVGb3JSZW5kZXJpbmdBbmRTdHlsZSgpLT5yZW5kZXJTdHlsZSgpKSA6IGZhbHNlOworICAgICBib29sIGhhc0RpcmVjdEFkamFjZW50UnVsZXMgPSBjdXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLT5jaGlsZHJlbkFmZmVjdGVkQnlEaXJlY3RBZGphY2VudFJ1bGVzKCk7CisgICAgIGJvb2wgaGFzSW5kaXJlY3RBZGphY2VudFJ1bGVzID0gY3VycmVudFN0eWxlICYmIGN1cnJlbnRTdHlsZS0+Y2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpOworIAorZGlmZiAtLWdpdCBhL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcCBiL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAoraW5kZXggZDY2MDc1ZS4uYWI4ZjExMSAxMDA2NDQKKy0tLSBhL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAorKysrIGIvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCitAQCAtNzQsNyArNzQsNyBAQCBQYXNzUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+IEhUTUxJbWFnZUVsZW1lbnQ6OmNyZWF0ZUZvckpTQ29uc3RydWN0b3IoRG9jdW1lbnQqCisgICAgIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBpbWFnZSA9IGFkb3B0UmVmKG5ldyBIVE1MSW1hZ2VFbGVtZW50KGltZ1RhZywgZG9jdW1lbnQpKTsKKyAgICAgaWYgKG9wdGlvbmFsV2lkdGgpCisgICAgICAgICBpbWFnZS0+c2V0V2lkdGgoKm9wdGlvbmFsV2lkdGgpOworLSAgICBpZiAob3B0aW9uYWxIZWlnaHQgPiAwKQorKyAgICBpZiAob3B0aW9uYWxIZWlnaHQpCisgICAgICAgICBpbWFnZS0+c2V0SGVpZ2h0KCpvcHRpb25hbEhlaWdodCk7CisgICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7CisgfQorZGlmZiAtLWdpdCBhL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaCBiL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaAoraW5kZXggNjA4N2VjMy4uNmQ3NDhmNiAxMDA2NDQKKy0tLSBhL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaAorKysrIGIvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oCitAQCAtMjUsNiArMjUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CisgI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorIGNsYXNzIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50IHsKKyBwdWJsaWM6CisrICAgIHZpcnR1YWwgflRpbGVkQmFja2luZ1N0b3JlQ2xpZW50KCkgeyB9CisgICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKSA9IDA7CisgICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKSA9IDA7CisgICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcGFpbnRlZEFyZWEpID0gMDsKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDIxLWNvbmZpZ3VyZS1tYWtlLXF0NC1uYXRpdmUtd29yay13aXRoLWxvbmctYnVpbGRpbmctcGEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMjEtY29uZmlndXJlLW1ha2UtcXQ0LW5hdGl2ZS13b3JrLXdpdGgtbG9uZy1idWlsZGluZy1wYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmM5MDIyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDIxLWNvbmZpZ3VyZS1tYWtlLXF0NC1uYXRpdmUtd29yay13aXRoLWxvbmctYnVpbGRpbmctcGEucGF0Y2gKQEAgLTAsMCArMSw5NSBAQAorRnJvbSA2NzQyYWM3ZWE2ZmQxZTljODJlY2I1MzA1Zjg0ZTcyMTI0MmY4NTdkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCA1IERlYyAyMDEyIDA3OjQ4OjE1ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMjEvMjFdIGNvbmZpZ3VyZTogbWFrZSBxdDQtbmF0aXZlIHdvcmsgd2l0aCBsb25nIGJ1aWxkaW5nCisgcGF0aC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworUmVmZXJlbmNlOiBodHRwczovL2J1Z3JlcG9ydHMucXQtcHJvamVjdC5vcmcvYnJvd3NlL1FUQlVHLTI4MjkyCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDUyICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKSwgMjYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IGE0YTQyZjEuLjIzNTg1NjMgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTQ3NzksOCArNDc3OSw4IEBAIERFTU9TX1BBVEhfU1RSPWAiJHJlbHBhdGgvY29uZmlnLnRlc3RzL3VuaXgvcGFkc3RyaW5nIiAyNjggInF0X2RlbW9wYXRoPSRRVF9JTlNUCisgVE9EQVk9YGRhdGUgKyVZLSVtLSVkYAorIGNhdCA+ICIkb3V0cGF0aC9zcmMvY29yZWxpYi9nbG9iYWwvcWNvbmZpZy5jcHAubmV3IiA8PEVPRgorIC8qIExpY2Vuc2UgSW5mbyAqLworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9saWNlbnNlZV9zdHIgICAgICAgICAgWzI1NiArIDEyXSA9ICIkTElDRU5TRV9VU0VSX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2xpY2Vuc2VkX3Byb2R1Y3RzX3N0ciBbMjU2ICsgMTJdID0gIiRMSUNFTlNFX1BST0RVQ1RTX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2xpY2Vuc2VlX3N0ciAgICAgICAgICBbNTEyICsgMTJdID0gIiRMSUNFTlNFX1VTRVJfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfbGljZW5zZWRfcHJvZHVjdHNfc3RyIFs1MTIgKyAxMl0gPSAiJExJQ0VOU0VfUFJPRFVDVFNfU1RSIjsKKyAKKyAvKiBJbnN0YWxsYXRpb24gZGF0ZSAqLworIHN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9pbnN0YWxsYXRpb24gICAgICAgICAgWzEyKzExXSAgICA9ICJxdF9pbnN0ZGF0ZT0kVE9EQVkiOworQEAgLTQ4MDUsMzYgKzQ4MDUsMzYgQEAgaWYgWyAhIC16ICIkUVRfSE9TVF9QUkVGSVgiIF07IHRoZW4KKyAKKyAjaWYgZGVmaW5lZChRVF9CT09UU1RSQVBQRUQpIHx8IGRlZmluZWQoUVRfQlVJTERfUU1BS0UpCisgLyogSW5zdGFsbGF0aW9uIEluZm8gKi8KKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfcHJlZml4X3BhdGhfc3RyICAgICAgIFsyNTYgKyAxMl0gPSAiJEhPU1RQUkVGSVhfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9kb2N1bWVudGF0aW9uX3BhdGhfc3RyWzI1NiArIDEyXSA9ICIkSE9TVERPQ1VNRU5UQVRJT05fUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9oZWFkZXJzX3BhdGhfc3RyICAgICAgWzI1NiArIDEyXSA9ICIkSE9TVEhFQURFUlNfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9saWJyYXJpZXNfcGF0aF9zdHIgICAgWzI1NiArIDEyXSA9ICIkSE9TVExJQlJBUklFU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2JpbmFyaWVzX3BhdGhfc3RyICAgICBbMjU2ICsgMTJdID0gIiRIT1NUQklOQVJJRVNfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9wbHVnaW5zX3BhdGhfc3RyICAgICAgWzI1NiArIDEyXSA9ICIkSE9TVFBMVUdJTlNfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9pbXBvcnRzX3BhdGhfc3RyICAgICAgWzI1NiArIDEyXSA9ICIkSE9TVElNUE9SVFNfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9kYXRhX3BhdGhfc3RyICAgICAgICAgWzI1NiArIDEyXSA9ICIkSE9TVERBVEFfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV90cmFuc2xhdGlvbnNfcGF0aF9zdHIgWzI1NiArIDEyXSA9ICIkSE9TVFRSQU5TTEFUSU9OU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3NldHRpbmdzX3BhdGhfc3RyICAgICBbMjU2ICsgMTJdID0gIiRIT1NUU0VUVElOR1NfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9leGFtcGxlc19wYXRoX3N0ciAgICAgWzI1NiArIDEyXSA9ICIkSE9TVEVYQU1QTEVTX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfZGVtb3NfcGF0aF9zdHIgICAgICAgIFsyNTYgKyAxMl0gPSAiJEhPU1RERU1PU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3ByZWZpeF9wYXRoX3N0ciAgICAgICBbNTEyICsgMTJdID0gIiRIT1NUUFJFRklYX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfZG9jdW1lbnRhdGlvbl9wYXRoX3N0cls1MTIgKyAxMl0gPSAiJEhPU1RET0NVTUVOVEFUSU9OX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfaGVhZGVyc19wYXRoX3N0ciAgICAgIFs1MTIgKyAxMl0gPSAiJEhPU1RIRUFERVJTX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfbGlicmFyaWVzX3BhdGhfc3RyICAgIFs1MTIgKyAxMl0gPSAiJEhPU1RMSUJSQVJJRVNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9iaW5hcmllc19wYXRoX3N0ciAgICAgWzUxMiArIDEyXSA9ICIkSE9TVEJJTkFSSUVTX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfcGx1Z2luc19wYXRoX3N0ciAgICAgIFs1MTIgKyAxMl0gPSAiJEhPU1RQTFVHSU5TX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfaW1wb3J0c19wYXRoX3N0ciAgICAgIFs1MTIgKyAxMl0gPSAiJEhPU1RJTVBPUlRTX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfZGF0YV9wYXRoX3N0ciAgICAgICAgIFs1MTIgKyAxMl0gPSAiJEhPU1REQVRBX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfdHJhbnNsYXRpb25zX3BhdGhfc3RyIFs1MTIgKyAxMl0gPSAiJEhPU1RUUkFOU0xBVElPTlNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9zZXR0aW5nc19wYXRoX3N0ciAgICAgWzUxMiArIDEyXSA9ICIkSE9TVFNFVFRJTkdTX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfZXhhbXBsZXNfcGF0aF9zdHIgICAgIFs1MTIgKyAxMl0gPSAiJEhPU1RFWEFNUExFU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RlbW9zX3BhdGhfc3RyICAgICAgICBbNTEyICsgMTJdID0gIiRIT1NUREVNT1NfUEFUSF9TVFIiOworICNlbHNlIC8vIFFUX0JPT1RTVFJBUFBFRAorIEVPRgorIGZpCisgCisgY2F0ID4+ICIkb3V0cGF0aC9zcmMvY29yZWxpYi9nbG9iYWwvcWNvbmZpZy5jcHAubmV3IiA8PEVPRgorIC8qIEluc3RhbGxhdGlvbiBJbmZvICovCistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3ByZWZpeF9wYXRoX3N0ciAgICAgICBbMjU2ICsgMTJdID0gIiRQUkVGSVhfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9kb2N1bWVudGF0aW9uX3BhdGhfc3RyWzI1NiArIDEyXSA9ICIkRE9DVU1FTlRBVElPTl9QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2hlYWRlcnNfcGF0aF9zdHIgICAgICBbMjU2ICsgMTJdID0gIiRIRUFERVJTX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfbGlicmFyaWVzX3BhdGhfc3RyICAgIFsyNTYgKyAxMl0gPSAiJExJQlJBUklFU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2JpbmFyaWVzX3BhdGhfc3RyICAgICBbMjU2ICsgMTJdID0gIiRCSU5BUklFU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3BsdWdpbnNfcGF0aF9zdHIgICAgICBbMjU2ICsgMTJdID0gIiRQTFVHSU5TX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfaW1wb3J0c19wYXRoX3N0ciAgICAgIFsyNTYgKyAxMl0gPSAiJElNUE9SVFNfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9kYXRhX3BhdGhfc3RyICAgICAgICAgWzI1NiArIDEyXSA9ICIkREFUQV9QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3RyYW5zbGF0aW9uc19wYXRoX3N0ciBbMjU2ICsgMTJdID0gIiRUUkFOU0xBVElPTlNfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9zZXR0aW5nc19wYXRoX3N0ciAgICAgWzI1NiArIDEyXSA9ICIkU0VUVElOR1NfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9leGFtcGxlc19wYXRoX3N0ciAgICAgWzI1NiArIDEyXSA9ICIkRVhBTVBMRVNfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9kZW1vc19wYXRoX3N0ciAgICAgICAgWzI1NiArIDEyXSA9ICIkREVNT1NfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9wcmVmaXhfcGF0aF9zdHIgICAgICAgWzUxMiArIDEyXSA9ICIkUFJFRklYX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfZG9jdW1lbnRhdGlvbl9wYXRoX3N0cls1MTIgKyAxMl0gPSAiJERPQ1VNRU5UQVRJT05fUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9oZWFkZXJzX3BhdGhfc3RyICAgICAgWzUxMiArIDEyXSA9ICIkSEVBREVSU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2xpYnJhcmllc19wYXRoX3N0ciAgICBbNTEyICsgMTJdID0gIiRMSUJSQVJJRVNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9iaW5hcmllc19wYXRoX3N0ciAgICAgWzUxMiArIDEyXSA9ICIkQklOQVJJRVNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9wbHVnaW5zX3BhdGhfc3RyICAgICAgWzUxMiArIDEyXSA9ICIkUExVR0lOU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2ltcG9ydHNfcGF0aF9zdHIgICAgICBbNTEyICsgMTJdID0gIiRJTVBPUlRTX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfZGF0YV9wYXRoX3N0ciAgICAgICAgIFs1MTIgKyAxMl0gPSAiJERBVEFfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV90cmFuc2xhdGlvbnNfcGF0aF9zdHIgWzUxMiArIDEyXSA9ICIkVFJBTlNMQVRJT05TX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfc2V0dGluZ3NfcGF0aF9zdHIgICAgIFs1MTIgKyAxMl0gPSAiJFNFVFRJTkdTX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfZXhhbXBsZXNfcGF0aF9zdHIgICAgIFs1MTIgKyAxMl0gPSAiJEVYQU1QTEVTX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfZGVtb3NfcGF0aF9zdHIgICAgICAgIFs1MTIgKyAxMl0gPSAiJERFTU9TX1BBVEhfU1RSIjsKKyBFT0YKKyAKKyBpZiBbICEgLXogIiRRVF9IT1NUX1BSRUZJWCIgXTsgdGhlbgorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMjctdG9vbHMucHJvLWRpc2FibGUtcW1lZWdvZ3JhcGhpY3NzeXN0ZW1oZWxwZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMjctdG9vbHMucHJvLWRpc2FibGUtcW1lZWdvZ3JhcGhpY3NzeXN0ZW1oZWxwZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUzMGFlZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAyNy10b29scy5wcm8tZGlzYWJsZS1xbWVlZ29ncmFwaGljc3N5c3RlbWhlbHBlci5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDA0NjBlMmE1ZjEzYWFmMDA4MWMzYzlmZWM4OTI4MDA0Njg0MmRkYmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFdlZCwgMyBKdWwgMjAxMyAxNzo0ODozMCArMDEwMAorU3ViamVjdDogW1BBVENIXSB0b29scy5wcm86IGRpc2FibGUgcW1lZWdvZ3JhcGhpY3NzeXN0ZW1oZWxwZXIKKworV2UgZG9uJ3Qgd2FudCB0aGlzIGVuYWJsZWQganVzdCBiZWNhdXNlIHdlIGhhdmUgRUdMIGFuZCBPcGVuR0wgRVMgMi4wCitlbmFibGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ10KKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyB0b29scy90b29scy5wcm8gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS90b29scy90b29scy5wcm8gYi90b29scy90b29scy5wcm8KK2luZGV4IDBlMjcwNTMuLjJkM2YzNmQgMTAwNjQ0CistLS0gYS90b29scy90b29scy5wcm8KKysrKyBiL3Rvb2xzL3Rvb2xzLnBybworQEAgLTQ5LDQgKzQ5LDQgQEAgUVRESVJfYnVpbGQ6UkVRVUlSRVMgPSAiY29udGFpbnMoUVRfQ09ORklHLCBmdWxsLWNvbmZpZykiCisgCisgIXdpbjMyOiFlbWJlZGRlZDohbWFjOiFzeW1iaWFuOkNPTkZJRyArPSB4MTEKKyAKKy14MTE6Y29udGFpbnMoUVRfQ09ORklHLCBvcGVuZ2xlczIpOmNvbnRhaW5zKFFUX0NPTkZJRywgZWdsKTpTVUJESVJTICs9IHFtZWVnb2dyYXBoaWNzc3lzdGVtaGVscGVyCisrI3gxMTpjb250YWlucyhRVF9DT05GSUcsIG9wZW5nbGVzMik6Y29udGFpbnMoUVRfQ09ORklHLCBlZ2wpOlNVQkRJUlMgKz0gcW1lZWdvZ3JhcGhpY3NzeXN0ZW1oZWxwZXIKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMjgtRG9uLXQtY3Jhc2gtb24tYnJva2VuLUdJRi1pbWFnZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMjgtRG9uLXQtY3Jhc2gtb24tYnJva2VuLUdJRi1pbWFnZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2ZTJmZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAyOC1Eb24tdC1jcmFzaC1vbi1icm9rZW4tR0lGLWltYWdlcy5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitGcm9tIGYxYjc2YzEyNmM0NzZjMTU1YWY4YzQwNGI5N2M0MmNkMWE3MDkzMzMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMYXJzIEtub2xsIDxsYXJzLmtub2xsQGRpZ2lhLmNvbT4KK0RhdGU6IFRodSwgMjQgQXByIDIwMTQgMTU6MzM6MjcgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gRG9uJ3QgY3Jhc2ggb24gYnJva2VuIEdJRiBpbWFnZXMKKworQnJva2VuIEdJRiBpbWFnZXMgY291bGQgc2V0IGludmFsaWQgd2lkdGggYW5kIGhlaWdodAordmFsdWVzIGluc2lkZSB0aGUgaW1hZ2UsIGxlYWRpbmcgdG8gUXQgY3JlYXRpbmcgYSBudWxsCitRSW1hZ2UgZm9yIGl0LiBJbiB0aGF0IGNhc2Ugd2UgbmVlZCB0byBhYm9ydCBkZWNvZGluZwordGhlIGltYWdlIGFuZCByZXR1cm4gYW4gZXJyb3IuCisKK0luaXRpYWwgcGF0Y2ggYnkgUmljaCBNb29yZS4KKworQmFja3BvcnQgb2YgSWQ4MmE0MDM2ZjQ3OGJkNmU0OWM0MDJkNjU5OGY1N2U3ZTViYjVlMWUgZnJvbSBRdCA1CisKK1Rhc2stbnVtYmVyOiBRVEJVRy0zODM2NworQ2hhbmdlLUlkOiBJMDY4MDc0MDAxOGFhYTgzNTZkMjY3YjdhZjNmMDFmYWMzNjk3MzEyYQorU2VjdXJpdHktYWR2aXNvcnk6IENWRS0yMDE0LTAxOTAKK1Jldmlld2VkLWJ5OiBSaWNoYXJkIEouIE1vb3JlIDxyaWNoQGtkZS5vcmc+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorCistLS0KKyBzcmMvZ3VpL2ltYWdlL3FnaWZoYW5kbGVyLmNwcCB8IDcgKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9ndWkvaW1hZ2UvcWdpZmhhbmRsZXIuY3BwIGIvc3JjL2d1aS9pbWFnZS9xZ2lmaGFuZGxlci5jcHAKK2luZGV4IDMzMjRmMDQuLjUxOTlkZDMgMTAwNjQ0CistLS0gYS9zcmMvZ3VpL2ltYWdlL3FnaWZoYW5kbGVyLmNwcAorKysrIGIvc3JjL2d1aS9pbWFnZS9xZ2lmaGFuZGxlci5jcHAKK0BAIC0zNTksNiArMzU5LDEzIEBAIGludCBRR0lGRm9ybWF0OjpkZWNvZGUoUUltYWdlICppbWFnZSwgY29uc3QgdWNoYXIgKmJ1ZmZlciwgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgIG1lbXNldChiaXRzLCAwLCBpbWFnZS0+Ynl0ZUNvdW50KCkpOworICAgICAgICAgICAgICAgICB9CisgCisrICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBwcmV2aW91cyBhdHRlbXB0IHRvIGNyZWF0ZSB0aGUgaW1hZ2UgZmFpbGVkLiBJZiBpdAorKyAgICAgICAgICAgICAgICAvLyBkaWQgdGhlbiB0aGUgaW1hZ2UgaXMgYnJva2VuIGFuZCB3ZSBzaG91bGQgZ2l2ZSB1cC4KKysgICAgICAgICAgICAgICAgaWYgKGltYWdlLT5pc051bGwoKSkgeworKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBFcnJvcjsKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKysgICAgICAgICAgICAgICAgfQorKworICAgICAgICAgICAgICAgICBkaXNwb3NlUHJldmlvdXMoaW1hZ2UpOworICAgICAgICAgICAgICAgICBkaXNwb3NlZCA9IGZhbHNlOworIAorLS0gCisxLjkuMworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMzAtYWFyY2g2NF9hcm02NF9xYXRvbWljX3N1cHBvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMzAtYWFyY2g2NF9hcm02NF9xYXRvbWljX3N1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE0YzJhNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAzMC1hYXJjaDY0X2FybTY0X3FhdG9taWNfc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDQ5MSBAQAorRnJvbSAyOTQwMTBiNTYyYzk4NDZiYjJiYzRlZTljNjNmZjc4YWRjN2MxZjRmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0xpc2FuZHJvPTIwRGFtaT1DMz1BMW49MjBOaWNhbm9yPTIwUD1DMz1BOXJlej0yME1leWVyPz0KKyA8cGVyZXptZXllckBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDE1IE1hciAyMDE0IDE1OjQwOjQ5IC0wMzAwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZCBxYXRvbWljIHN1cHBvcnQgZm9yIEFBcmNoNjQgKGFrYSBhcm02NCkuCisKK1BhdGNoIGJ5IE1hcmsgU2FsdGVyIDxtc2FsdGVyQHJlZGhhdC5jb20+CitsaWNlbnNlZCB1bmRlciBCU0Q6CisKKzxodHRwczovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmluL2J1Z3JlcG9ydC5jZ2k/YnVnPTczNTQ4OCMxOTU+CisKK1RoaXMgcGF0Y2ggaXMga25vd24gdG8gbm90IGJlIHRoZSBtb3N0IGNvcnJlY3Qgd2F5Cit0byBpbXBsZW1lbnQgdGhlbSwgYXMgaXQgc2VlbXMgdG8gYmUgcG9zc2libGUgdG8gZG8gaXQgaW4gYSBmYXN0ZXIgd2F5LAorYnV0IHNob3VsZCB3b3JrIG5vbiB0aGUgbGVzcyB1bnRpbCB3ZSBjYW4gcHJvdmlkZSBzb21ldGhpbmcgYmV0dGVyLgorCitDaGFuZ2UtSWQ6IEliMzkyYjI3ZGM1NDY5MWZkNGMyZWE5ODk2MjQwYWQ3MWZiODEyOGNjCisKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorCistLS0KKyBzcmMvY29yZWxpYi9hcmNoL2FhcmNoNjQvYXJjaC5wcmkgICAgICAgICAgICB8ICAgNCArCisgc3JjL2NvcmVsaWIvYXJjaC9hYXJjaDY0L3FhdG9taWNfYWFyY2g2NC5jcHAgfCAgNzAgKysrKysrCisgc3JjL2NvcmVsaWIvYXJjaC9hcmNoLnByaSAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KKyBzcmMvY29yZWxpYi9hcmNoL3FhdG9taWNfYWFyY2g2NC5oICAgICAgICAgICB8IDMzNSArKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBzcmMvY29yZWxpYi9hcmNoL3FhdG9taWNfYXJjaC5oICAgICAgICAgICAgICB8ICAgMiArCisgNSBmaWxlcyBjaGFuZ2VkLCA0MTQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvY29yZWxpYi9hcmNoL2FhcmNoNjQvYXJjaC5wcmkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2NvcmVsaWIvYXJjaC9hYXJjaDY0L3FhdG9taWNfYWFyY2g2NC5jcHAKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FhcmNoNjQuaAorCitkaWZmIC0tZ2l0IGEvc3JjL2NvcmVsaWIvYXJjaC9hYXJjaDY0L2FyY2gucHJpIGIvc3JjL2NvcmVsaWIvYXJjaC9hYXJjaDY0L2FyY2gucHJpCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNjM1MjNkOQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvcmVsaWIvYXJjaC9hYXJjaDY0L2FyY2gucHJpCitAQCAtMCwwICsxLDQgQEAKKysjCisrIyBBQXJjaDY0IGFyY2hpdGVjdHVyZQorKyMKKytTT1VSQ0VTICs9ICQkUVRfQVJDSF9DUFAvcWF0b21pY19hYXJjaDY0LmNwcAorZGlmZiAtLWdpdCBhL3NyYy9jb3JlbGliL2FyY2gvYWFyY2g2NC9xYXRvbWljX2FhcmNoNjQuY3BwIGIvc3JjL2NvcmVsaWIvYXJjaC9hYXJjaDY0L3FhdG9taWNfYWFyY2g2NC5jcHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mYzg1MWI5CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29yZWxpYi9hcmNoL2FhcmNoNjQvcWF0b21pY19hYXJjaDY0LmNwcAorQEAgLTAsMCArMSw3MCBAQAorKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisrKioKKysqKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKysqKiBDb250YWN0OiBodHRwOi8vd3d3LnF0LXByb2plY3Qub3JnL2xlZ2FsCisrKioKKysqKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUXRDb3JlIG1vZHVsZSBvZiB0aGUgUXQgVG9vbGtpdC4KKysqKgorKyoqICRRVF9CRUdJTl9MSUNFTlNFOkxHUEwkCisrKiogQ29tbWVyY2lhbCBMaWNlbnNlIFVzYWdlCisrKiogTGljZW5zZWVzIGhvbGRpbmcgdmFsaWQgY29tbWVyY2lhbCBRdCBsaWNlbnNlcyBtYXkgdXNlIHRoaXMgZmlsZSBpbgorKyoqIGFjY29yZGFuY2Ugd2l0aCB0aGUgY29tbWVyY2lhbCBsaWNlbnNlIGFncmVlbWVudCBwcm92aWRlZCB3aXRoIHRoZQorKyoqIFNvZnR3YXJlIG9yLCBhbHRlcm5hdGl2ZWx5LCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGNvbnRhaW5lZCBpbgorKyoqIGEgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiB5b3UgYW5kIERpZ2lhLiAgRm9yIGxpY2Vuc2luZyB0ZXJtcyBhbmQKKysqKiBjb25kaXRpb25zIHNlZSBodHRwOi8vcXQuZGlnaWEuY29tL2xpY2Vuc2luZy4gIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uCisrKiogdXNlIHRoZSBjb250YWN0IGZvcm0gYXQgaHR0cDovL3F0LmRpZ2lhLmNvbS9jb250YWN0LXVzLgorKyoqCisrKiogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFVzYWdlCisrKiogQWx0ZXJuYXRpdmVseSwgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlcgorKyoqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrKiogRm91bmRhdGlvbiBhbmQgYXBwZWFyaW5nIGluIHRoZSBmaWxlIExJQ0VOU0UuTEdQTCBpbmNsdWRlZCBpbiB0aGUKKysqKiBwYWNrYWdpbmcgb2YgdGhpcyBmaWxlLiAgUGxlYXNlIHJldmlldyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIHRvCisrKiogZW5zdXJlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEgcmVxdWlyZW1lbnRzCisrKiogd2lsbCBiZSBtZXQ6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvbGdwbC0yLjEuaHRtbC4KKysqKgorKyoqIEluIGFkZGl0aW9uLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBEaWdpYSBnaXZlcyB5b3UgY2VydGFpbiBhZGRpdGlvbmFsCisrKiogcmlnaHRzLiAgVGhlc2UgcmlnaHRzIGFyZSBkZXNjcmliZWQgaW4gdGhlIERpZ2lhIFF0IExHUEwgRXhjZXB0aW9uCisrKiogdmVyc2lvbiAxLjEsIGluY2x1ZGVkIGluIHRoZSBmaWxlIExHUExfRVhDRVBUSU9OLnR4dCBpbiB0aGlzIHBhY2thZ2UuCisrKioKKysqKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBVc2FnZQorKyoqIEFsdGVybmF0aXZlbHksIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorKyoqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLjAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrKiogRm91bmRhdGlvbiBhbmQgYXBwZWFyaW5nIGluIHRoZSBmaWxlIExJQ0VOU0UuR1BMIGluY2x1ZGVkIGluIHRoZQorKyoqIHBhY2thZ2luZyBvZiB0aGlzIGZpbGUuICBQbGVhc2UgcmV2aWV3IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gdG8KKysqKiBlbnN1cmUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMy4wIHJlcXVpcmVtZW50cyB3aWxsIGJlCisrKiogbWV0OiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwuCisrKioKKysqKgorKyoqICRRVF9FTkRfTElDRU5TRSQKKysqKgorKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrI2luY2x1ZGUgPFF0Q29yZS9xZ2xvYmFsLmg+CisrCisrI2luY2x1ZGUgPHVuaXN0ZC5oPgorKyNpZmRlZiBfUE9TSVhfUFJJT1JJVFlfU0NIRURVTElORworKyMgaW5jbHVkZSA8c2NoZWQuaD4KKysjZW5kaWYKKysjaW5jbHVkZSA8dGltZS5oPgorKworK1FUX0JFR0lOX05BTUVTUEFDRQorKworK1FUX1VTRV9OQU1FU1BBQ0UKKysKKytRX0NPUkVfRVhQT1JUIHZvaWQgcXRfYXRvbWljX3lpZWxkKGludCAqY291bnQpCisreworKyNpZmRlZiBfUE9TSVhfUFJJT1JJVFlfU0NIRURVTElORworKyAgICBpZiAoKCpjb3VudCkrKyA8IDUwKSB7CisrICAgICAgICBzY2hlZF95aWVsZCgpOworKyAgICB9IGVsc2UKKysjZW5kaWYKKysgICAgeworKyAgICAgICAgc3RydWN0IHRpbWVzcGVjIHRtOworKyAgICAgICAgdG0udHZfc2VjID0gMDsKKysgICAgICAgIHRtLnR2X25zZWMgPSAyMDAwMDAxOworKyAgICAgICAgbmFub3NsZWVwKCZ0bSwgTlVMTCk7CisrICAgICAgICAqY291bnQgPSAwOworKyAgICB9CisrfQorKworK1FUX0VORF9OQU1FU1BBQ0UKK2RpZmYgLS1naXQgYS9zcmMvY29yZWxpYi9hcmNoL2FyY2gucHJpIGIvc3JjL2NvcmVsaWIvYXJjaC9hcmNoLnByaQoraW5kZXggY2QyM2U1ZS4uZjUwZmNhNyAxMDA2NDQKKy0tLSBhL3NyYy9jb3JlbGliL2FyY2gvYXJjaC5wcmkKKysrKyBiL3NyYy9jb3JlbGliL2FyY2gvYXJjaC5wcmkKK0BAIC0zMSw3ICszMSw5IEBAIGludGVncml0eTpIRUFERVJTICs9IGFyY2gvcWF0b21pY19pbnRlZ3JpdHkuaAorICAgICAgICAgICAgICAgICAgICAgICAgYXJjaC9xYXRvbWljX3MzOTAuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICBhcmNoL3FhdG9taWNfeDg2XzY0LmggXAorICAgICAgICAgICAgICAgICAgICAgICAgYXJjaC9xYXRvbWljX3NoLmggXAorLSAgICAgICAgICAgICAgICAgICAgICAgYXJjaC9xYXRvbWljX3NoNGEuaAorKyAgICAgICAgICAgICAgICAgICAgICAgYXJjaC9xYXRvbWljX3NoNGEuaCBcCisrICAgICAgICAgICAgICAgICAgICAgICBhcmNoL3FhdG9taWNfYWFyY2g2NC5oIFwKKysKKyAKKyBRVF9BUkNIX0NQUCA9ICQkUVRfU09VUkNFX1RSRUUvc3JjL2NvcmVsaWIvYXJjaC8kJFFUX0FSQ0gKKyBERVBFTkRQQVRIICs9ICQkUVRfQVJDSF9DUFAKK2RpZmYgLS1naXQgYS9zcmMvY29yZWxpYi9hcmNoL3FhdG9taWNfYWFyY2g2NC5oIGIvc3JjL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FhcmNoNjQuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmRlNjFjYTgKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb3JlbGliL2FyY2gvcWF0b21pY19hYXJjaDY0LmgKK0BAIC0wLDAgKzEsMzM1IEBACisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysqKgorKyoqIENvcHlyaWdodCAoQykgMjAxMiBEaWdpYSBQbGMgYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorKyoqIENvbnRhY3Q6IGh0dHA6Ly93d3cucXQtcHJvamVjdC5vcmcvbGVnYWwKKysqKgorKyoqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBRdENvcmUgbW9kdWxlIG9mIHRoZSBRdCBUb29sa2l0LgorKyoqCisrKiogJFFUX0JFR0lOX0xJQ0VOU0U6TEdQTCQKKysqKiBDb21tZXJjaWFsIExpY2Vuc2UgVXNhZ2UKKysqKiBMaWNlbnNlZXMgaG9sZGluZyB2YWxpZCBjb21tZXJjaWFsIFF0IGxpY2Vuc2VzIG1heSB1c2UgdGhpcyBmaWxlIGluCisrKiogYWNjb3JkYW5jZSB3aXRoIHRoZSBjb21tZXJjaWFsIGxpY2Vuc2UgYWdyZWVtZW50IHByb3ZpZGVkIHdpdGggdGhlCisrKiogU29mdHdhcmUgb3IsIGFsdGVybmF0aXZlbHksIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgY29udGFpbmVkIGluCisrKiogYSB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIHlvdSBhbmQgRGlnaWEuICBGb3IgbGljZW5zaW5nIHRlcm1zIGFuZAorKyoqIGNvbmRpdGlvbnMgc2VlIGh0dHA6Ly9xdC5kaWdpYS5jb20vbGljZW5zaW5nLiAgRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24KKysqKiB1c2UgdGhlIGNvbnRhY3QgZm9ybSBhdCBodHRwOi8vcXQuZGlnaWEuY29tL2NvbnRhY3QtdXMuCisrKioKKysqKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVXNhZ2UKKysqKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyCisrKiogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKysqKiBGb3VuZGF0aW9uIGFuZCBhcHBlYXJpbmcgaW4gdGhlIGZpbGUgTElDRU5TRS5MR1BMIGluY2x1ZGVkIGluIHRoZQorKyoqIHBhY2thZ2luZyBvZiB0aGlzIGZpbGUuICBQbGVhc2UgcmV2aWV3IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gdG8KKysqKiBlbnN1cmUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSByZXF1aXJlbWVudHMKKysqKiB3aWxsIGJlIG1ldDogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9sZ3BsLTIuMS5odG1sLgorKyoqCisrKiogSW4gYWRkaXRpb24sIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sIERpZ2lhIGdpdmVzIHlvdSBjZXJ0YWluIGFkZGl0aW9uYWwKKysqKiByaWdodHMuICBUaGVzZSByaWdodHMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgRGlnaWEgUXQgTEdQTCBFeGNlcHRpb24KKysqKiB2ZXJzaW9uIDEuMSwgaW5jbHVkZWQgaW4gdGhlIGZpbGUgTEdQTF9FWENFUFRJT04udHh0IGluIHRoaXMgcGFja2FnZS4KKysqKgorKyoqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFVzYWdlCisrKiogQWx0ZXJuYXRpdmVseSwgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrKiogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMuMCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKysqKiBGb3VuZGF0aW9uIGFuZCBhcHBlYXJpbmcgaW4gdGhlIGZpbGUgTElDRU5TRS5HUEwgaW5jbHVkZWQgaW4gdGhlCisrKiogcGFja2FnaW5nIG9mIHRoaXMgZmlsZS4gIFBsZWFzZSByZXZpZXcgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiB0bworKyoqIGVuc3VyZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLjAgcmVxdWlyZW1lbnRzIHdpbGwgYmUKKysqKiBtZXQ6IGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbC4KKysqKgorKyoqCisrKiogJFFUX0VORF9MSUNFTlNFJAorKyoqCisrKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysjaWZuZGVmIFFBVE9NSUNfQUFSQ0g2NF9ICisrI2RlZmluZSBRQVRPTUlDX0FBUkNINjRfSAorKworK1FUX0JFR0lOX0hFQURFUgorKworK1FUX0JFR0lOX05BTUVTUEFDRQorKworKyNkZWZpbmUgUV9BVE9NSUNfSU5UX1JFRkVSRU5DRV9DT1VOVElOR19JU19BTFdBWVNfTkFUSVZFCisrCisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50Ojppc1JlZmVyZW5jZUNvdW50aW5nTmF0aXZlKCkKKyt7IHJldHVybiB0cnVlOyB9CisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50Ojppc1JlZmVyZW5jZUNvdW50aW5nV2FpdEZyZWUoKQorK3sgcmV0dXJuIGZhbHNlOyB9CisrCisrI2RlZmluZSBRX0FUT01JQ19JTlRfVEVTVF9BTkRfU0VUX0lTX0FMV0FZU19OQVRJVkUKKysKKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OmlzVGVzdEFuZFNldE5hdGl2ZSgpCisreyByZXR1cm4gdHJ1ZTsgfQorK2lubGluZSBib29sIFFCYXNpY0F0b21pY0ludDo6aXNUZXN0QW5kU2V0V2FpdEZyZWUoKQorK3sgcmV0dXJuIGZhbHNlOyB9CisrCisrI2RlZmluZSBRX0FUT01JQ19JTlRfRkVUQ0hfQU5EX1NUT1JFX0lTX0FMV0FZU19OQVRJVkUKKysKKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OmlzRmV0Y2hBbmRTdG9yZU5hdGl2ZSgpCisreyByZXR1cm4gdHJ1ZTsgfQorK2lubGluZSBib29sIFFCYXNpY0F0b21pY0ludDo6aXNGZXRjaEFuZFN0b3JlV2FpdEZyZWUoKQorK3sgcmV0dXJuIGZhbHNlOyB9CisrCisrI2RlZmluZSBRX0FUT01JQ19JTlRfRkVUQ0hfQU5EX0FERF9JU19BTFdBWVNfTkFUSVZFCisrCisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50Ojppc0ZldGNoQW5kQWRkTmF0aXZlKCkKKyt7IHJldHVybiB0cnVlOyB9CisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50Ojppc0ZldGNoQW5kQWRkV2FpdEZyZWUoKQorK3sgcmV0dXJuIGZhbHNlOyB9CisrCisrI2RlZmluZSBRX0FUT01JQ19QT0lOVEVSX1RFU1RfQU5EX1NFVF9JU19BTFdBWVNfTkFUSVZFCisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgYm9vbCBRQmFzaWNBdG9taWNQb2ludGVyPFQ+Ojppc1Rlc3RBbmRTZXROYXRpdmUoKQorK3sgcmV0dXJuIHRydWU7IH0KKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBib29sIFFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmlzVGVzdEFuZFNldFdhaXRGcmVlKCkKKyt7IHJldHVybiBmYWxzZTsgfQorKworKyNkZWZpbmUgUV9BVE9NSUNfUE9JTlRFUl9GRVRDSF9BTkRfU1RPUkVfSVNfQUxXQVlTX05BVElWRQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIGJvb2wgUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6aXNGZXRjaEFuZFN0b3JlTmF0aXZlKCkKKyt7IHJldHVybiB0cnVlOyB9CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgYm9vbCBRQmFzaWNBdG9taWNQb2ludGVyPFQ+Ojppc0ZldGNoQW5kU3RvcmVXYWl0RnJlZSgpCisreyByZXR1cm4gZmFsc2U7IH0KKysKKysjZGVmaW5lIFFfQVRPTUlDX1BPSU5URVJfRkVUQ0hfQU5EX0FERF9JU19BTFdBWVNfTkFUSVZFCisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgYm9vbCBRQmFzaWNBdG9taWNQb2ludGVyPFQ+Ojppc0ZldGNoQW5kQWRkTmF0aXZlKCkKKyt7IHJldHVybiB0cnVlOyB9CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgYm9vbCBRQmFzaWNBdG9taWNQb2ludGVyPFQ+Ojppc0ZldGNoQW5kQWRkV2FpdEZyZWUoKQorK3sgcmV0dXJuIGZhbHNlOyB9CisrCisrI2lmbmRlZiBRX0RBVEFfTUVNT1JZX0JBUlJJRVIKKysjIGRlZmluZSBRX0RBVEFfTUVNT1JZX0JBUlJJRVIgYXNtIHZvbGF0aWxlKCJkbWIgc3lcbiI6OjoibWVtb3J5IikKKysjZW5kaWYKKysjaWZuZGVmIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVIKKysjIGRlZmluZSBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSIGFzbSB2b2xhdGlsZSgiIjo6OiJtZW1vcnkiKQorKyNlbmRpZgorKworK2lubGluZSBib29sIFFCYXNpY0F0b21pY0ludDo6cmVmKCkKKyt7CisrICAgIGludCBuZXdWYWx1ZTsKKysKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgbmV3VmFsdWUgPSBfX2F0b21pY19hZGRfZmV0Y2goJl9xX3ZhbHVlLCAxLCBfX0FUT01JQ19BQ1FfUkVMKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysKKysgICAgcmV0dXJuIG5ld1ZhbHVlICE9IDA7CisrfQorKworK2lubGluZSBib29sIFFCYXNpY0F0b21pY0ludDo6ZGVyZWYoKQorK3sKKysgICAgaW50IG5ld1ZhbHVlOworKworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICBuZXdWYWx1ZSA9IF9fYXRvbWljX3N1Yl9mZXRjaCgmX3FfdmFsdWUsIDEsIF9fQVRPTUlDX0FDUV9SRUwpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKworKyAgICByZXR1cm4gbmV3VmFsdWUgIT0gMDsKKyt9CisrCisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50Ojp0ZXN0QW5kU2V0UmVsYXhlZChpbnQgZXhwZWN0ZWRWYWx1ZSwgaW50IG5ld1ZhbHVlKQorK3sKKysgICAgYm9vbCB2YWw7CisrCisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHZhbCA9ICBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX24gKCZfcV92YWx1ZSwgJmV4cGVjdGVkVmFsdWUsIG5ld1ZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgX19BVE9NSUNfUkVMQVhFRCwgX19BVE9NSUNfUkVMQVhFRCk7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiB2YWw7CisrfQorKworK2lubGluZSBpbnQgUUJhc2ljQXRvbWljSW50OjpmZXRjaEFuZFN0b3JlUmVsYXhlZChpbnQgbmV3VmFsdWUpCisreworKyAgICBpbnQgdmFsOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICB2YWwgPSBfX2F0b21pY19leGNoYW5nZV9uKCZfcV92YWx1ZSwgbmV3VmFsdWUsIF9fQVRPTUlDX1JFTEFYRUQpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gdmFsOworK30KKysKKytpbmxpbmUgaW50IFFCYXNpY0F0b21pY0ludDo6ZmV0Y2hBbmRBZGRSZWxheGVkKGludCB2YWx1ZVRvQWRkKQorK3sKKysgICAgaW50IHZhbDsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgdmFsID0gX19hdG9taWNfZmV0Y2hfYWRkKCZfcV92YWx1ZSwgdmFsdWVUb0FkZCwgX19BVE9NSUNfUkVMQVhFRCk7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiB2YWw7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIGJvb2wgUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6dGVzdEFuZFNldFJlbGF4ZWQoVCAqZXhwZWN0ZWRWYWx1ZSwgVCAqbmV3VmFsdWUpCisreworKyAgICBib29sIHZhbDsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgdmFsID0gIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbiAoJl9xX3ZhbHVlLCAmZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBfX0FUT01JQ19SRUxBWEVELCBfX0FUT01JQ19SRUxBWEVEKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHZhbDsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgVCAqUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6ZmV0Y2hBbmRTdG9yZVJlbGF4ZWQoVCAqbmV3VmFsdWUpCisreworKyAgICBUICp2YWw7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHZhbCA9IF9fYXRvbWljX2V4Y2hhbmdlX24oJl9xX3ZhbHVlLCBuZXdWYWx1ZSwgX19BVE9NSUNfUkVMQVhFRCk7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiB2YWw7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIFQgKlFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmZldGNoQW5kQWRkUmVsYXhlZChxcHRyZGlmZiB2YWx1ZVRvQWRkKQorK3sKKysgICAgVCAqdmFsOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICB2YWwgPSBfX2F0b21pY19mZXRjaF9hZGQoJl9xX3ZhbHVlLCB2YWx1ZVRvQWRkLCBfX0FUT01JQ19SRUxBWEVEKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHZhbDsKKyt9CisrCisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50Ojp0ZXN0QW5kU2V0QWNxdWlyZShpbnQgZXhwZWN0ZWRWYWx1ZSwgaW50IG5ld1ZhbHVlKQorK3sKKysgICAgYm9vbCByZXR1cm5WYWx1ZSA9IHRlc3RBbmRTZXRSZWxheGVkKGV4cGVjdGVkVmFsdWUsIG5ld1ZhbHVlKTsKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisrfQorKworK2lubGluZSBib29sIFFCYXNpY0F0b21pY0ludDo6dGVzdEFuZFNldFJlbGVhc2UoaW50IGV4cGVjdGVkVmFsdWUsIGludCBuZXdWYWx1ZSkKKyt7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHRlc3RBbmRTZXRSZWxheGVkKGV4cGVjdGVkVmFsdWUsIG5ld1ZhbHVlKTsKKyt9CisrCisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50Ojp0ZXN0QW5kU2V0T3JkZXJlZChpbnQgZXhwZWN0ZWRWYWx1ZSwgaW50IG5ld1ZhbHVlKQorK3sKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICBib29sIHJldHVyblZhbHVlID0gdGVzdEFuZFNldFJlbGF4ZWQoZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisrfQorKworK2lubGluZSBpbnQgUUJhc2ljQXRvbWljSW50OjpmZXRjaEFuZFN0b3JlQWNxdWlyZShpbnQgbmV3VmFsdWUpCisreworKyAgICBpbnQgcmV0dXJuVmFsdWUgPSBmZXRjaEFuZFN0b3JlUmVsYXhlZChuZXdWYWx1ZSk7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKytpbmxpbmUgaW50IFFCYXNpY0F0b21pY0ludDo6ZmV0Y2hBbmRTdG9yZVJlbGVhc2UoaW50IG5ld1ZhbHVlKQorK3sKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gZmV0Y2hBbmRTdG9yZVJlbGF4ZWQobmV3VmFsdWUpOworK30KKysKKytpbmxpbmUgaW50IFFCYXNpY0F0b21pY0ludDo6ZmV0Y2hBbmRTdG9yZU9yZGVyZWQoaW50IG5ld1ZhbHVlKQorK3sKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICBpbnQgcmV0dXJuVmFsdWUgPSBmZXRjaEFuZFN0b3JlUmVsYXhlZChuZXdWYWx1ZSk7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisraW5saW5lIGludCBRQmFzaWNBdG9taWNJbnQ6OmZldGNoQW5kQWRkQWNxdWlyZShpbnQgdmFsdWVUb0FkZCkKKyt7CisrICAgIGludCByZXR1cm5WYWx1ZSA9IGZldGNoQW5kQWRkUmVsYXhlZCh2YWx1ZVRvQWRkKTsKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisrfQorKworK2lubGluZSBpbnQgUUJhc2ljQXRvbWljSW50OjpmZXRjaEFuZEFkZFJlbGVhc2UoaW50IHZhbHVlVG9BZGQpCisreworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiBmZXRjaEFuZEFkZFJlbGF4ZWQodmFsdWVUb0FkZCk7CisrfQorKworK2lubGluZSBpbnQgUUJhc2ljQXRvbWljSW50OjpmZXRjaEFuZEFkZE9yZGVyZWQoaW50IHZhbHVlVG9BZGQpCisreworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIGludCByZXR1cm5WYWx1ZSA9IGZldGNoQW5kQWRkUmVsYXhlZCh2YWx1ZVRvQWRkKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBib29sIFFCYXNpY0F0b21pY1BvaW50ZXI8VD46OnRlc3RBbmRTZXRBY3F1aXJlKFQgKmV4cGVjdGVkVmFsdWUsIFQgKm5ld1ZhbHVlKQorK3sKKysgICAgYm9vbCByZXR1cm5WYWx1ZSA9IHRlc3RBbmRTZXRSZWxheGVkKGV4cGVjdGVkVmFsdWUsIG5ld1ZhbHVlKTsKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIGJvb2wgUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6dGVzdEFuZFNldFJlbGVhc2UoVCAqZXhwZWN0ZWRWYWx1ZSwgVCAqbmV3VmFsdWUpCisreworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiB0ZXN0QW5kU2V0UmVsYXhlZChleHBlY3RlZFZhbHVlLCBuZXdWYWx1ZSk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIGJvb2wgUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6dGVzdEFuZFNldE9yZGVyZWQoVCAqZXhwZWN0ZWRWYWx1ZSwgVCAqbmV3VmFsdWUpCisreworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIGJvb2wgcmV0dXJuVmFsdWUgPSB0ZXN0QW5kU2V0QWNxdWlyZShleHBlY3RlZFZhbHVlLCBuZXdWYWx1ZSk7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgVCAqUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6ZmV0Y2hBbmRTdG9yZUFjcXVpcmUoVCAqbmV3VmFsdWUpCisreworKyAgICBUICpyZXR1cm5WYWx1ZSA9IGZldGNoQW5kU3RvcmVSZWxheGVkKG5ld1ZhbHVlKTsKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIFQgKlFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmZldGNoQW5kU3RvcmVSZWxlYXNlKFQgKm5ld1ZhbHVlKQorK3sKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gZmV0Y2hBbmRTdG9yZVJlbGF4ZWQobmV3VmFsdWUpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBUICpRQmFzaWNBdG9taWNQb2ludGVyPFQ+OjpmZXRjaEFuZFN0b3JlT3JkZXJlZChUICpuZXdWYWx1ZSkKKyt7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgVCAqcmV0dXJuVmFsdWUgPSBmZXRjaEFuZFN0b3JlUmVsYXhlZChuZXdWYWx1ZSk7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgVCAqUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6ZmV0Y2hBbmRBZGRBY3F1aXJlKHFwdHJkaWZmIHZhbHVlVG9BZGQpCisreworKyAgICBUICpyZXR1cm5WYWx1ZSA9IGZldGNoQW5kQWRkUmVsYXhlZCh2YWx1ZVRvQWRkKTsKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIFQgKlFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmZldGNoQW5kQWRkUmVsZWFzZShxcHRyZGlmZiB2YWx1ZVRvQWRkKQorK3sKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gZmV0Y2hBbmRBZGRSZWxheGVkKHZhbHVlVG9BZGQpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBUICpRQmFzaWNBdG9taWNQb2ludGVyPFQ+OjpmZXRjaEFuZEFkZE9yZGVyZWQocXB0cmRpZmYgdmFsdWVUb0FkZCkKKyt7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgVCAqcmV0dXJuVmFsdWUgPSBmZXRjaEFuZEFkZFJlbGF4ZWQodmFsdWVUb0FkZCk7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisrI3VuZGVmIFFfREFUQV9NRU1PUllfQkFSUklFUgorKyN1bmRlZiBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSCisrCisrUVRfRU5EX05BTUVTUEFDRQorKworK1FUX0VORF9IRUFERVIKKysKKysjZW5kaWYgLy8gUUFUT01JQ19BQVJDSDY0X0gKK2RpZmYgLS1naXQgYS9zcmMvY29yZWxpYi9hcmNoL3FhdG9taWNfYXJjaC5oIGIvc3JjL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FyY2guaAoraW5kZXggMTQxNzI2Yy4uM2U5NjkyNiAxMDA2NDQKKy0tLSBhL3NyYy9jb3JlbGliL2FyY2gvcWF0b21pY19hcmNoLmgKKysrKyBiL3NyYy9jb3JlbGliL2FyY2gvcWF0b21pY19hcmNoLmgKK0BAIC05NCw2ICs5NCw4IEBAIFFUX0JFR0lOX0hFQURFUgorICMgIGluY2x1ZGUgIlF0Q29yZS9xYXRvbWljX3NoNGEuaCIKKyAjZWxpZiBkZWZpbmVkKFFUX0FSQ0hfTkFDTCkKKyAjICBpbmNsdWRlICJRdENvcmUvcWF0b21pY19nZW5lcmljLmgiCisrI2VsaWYgZGVmaW5lZChRVF9BUkNIX0FBUkNINjQpCisrIyAgaW5jbHVkZSAiUXRDb3JlL3FhdG9taWNfYWFyY2g2NC5oIgorICNlbHNlCisgIyAgZXJyb3IgIlF0IGhhcyBub3QgYmVlbiBwb3J0ZWQgdG8gdGhpcyBhcmNoaXRlY3R1cmUiCisgI2VuZGlmCistLSAKKzIuMS4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAzMS1hYXJjaDY0X2FybTY0X21rc3BlY3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMzEtYWFyY2g2NF9hcm02NF9ta3NwZWNzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMWU3YWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMzEtYWFyY2g2NF9hcm02NF9ta3NwZWNzLnBhdGNoCkBAIC0wLDAgKzEsMTI0IEBACitGcm9tIDcwOTBmYzgwZmY2MzA3MTJhOTBkZTkyNDAzMTkwZjY0N2RkMzhhMzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/TGlzYW5kcm89MjBEYW1pPUMzPUExbj0yME5pY2Fub3I9MjBQPUMzPUE5cmV6PTIwTWV5ZXI/PQorIDxwZXJlem1leWVyQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMTUgTWFyIDIwMTQgMTU6MzU6MDAgLTAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gbWtzcGVjcyBmb3IgQUFyY2g2NCAoYWthIGFybTY0KS4KKworUGF0Y2ggYnkgTWFyY2luIEp1c3praWV3aWN6IDxtYXJjaW5AanVzemtpZXdpY3ouY29tLnBsPgorbGljZW5zZWQgdW5kZXIgZWl0aGVyIFB1YmxpYyBEb21haW4gb3IgQlNEOgorCis8aHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvY2dpLWJpbi9idWdyZXBvcnQuY2dpP2J1Zz03MzU0ODgjMTc5PgorCitDaGFuZ2UtSWQ6IEkyMWYxNzk1MzIzNGNmYjE3NmJhYzAyM2U1MmVjZGM5MjdmYzVjMWE5CisKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorCistLS0KKyBjb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzICsrKworIG1rc3BlY3MvbGludXgtZysrLWFhcmNoNjQvcW1ha2UuY29uZiAgICAgIHwgMjcgKysrKysrKysrKysrKysrKysrKysKKyBta3NwZWNzL2xpbnV4LWcrKy1hYXJjaDY0L3FwbGF0Zm9ybWRlZnMuaCB8IDQyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDcyIGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbWtzcGVjcy9saW51eC1nKystYWFyY2g2NC9xbWFrZS5jb25mCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG1rc3BlY3MvbGludXgtZysrLWFhcmNoNjQvcXBsYXRmb3JtZGVmcy5oCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IGE5YmE3YzguLmU1N2QwNTMgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTI4MDgsNiArMjgwOCw5IEBAIGlmIFsgIiRDRkdfRU1CRURERUQiICE9ICJubyIgXTsgdGhlbgorICAgICAgICAgICAgICo4Nl82NCkKKyAgICAgICAgICAgICAgICAgUExBVEZPUk09cXdzL2xpbnV4LXg4Nl82NC1nKysKKyAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICBhYXJjaDY0KQorKyAgICAgICAgICAgICAgICBQTEFURk9STT1saW51eC1hYXJjaDY0LWcrKworKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgIFBMQVRGT1JNPXF3cy9saW51eC1nZW5lcmljLWcrKworICAgICAgICAgICAgICAgICA7OworZGlmZiAtLWdpdCBhL21rc3BlY3MvbGludXgtZysrLWFhcmNoNjQvcW1ha2UuY29uZiBiL21rc3BlY3MvbGludXgtZysrLWFhcmNoNjQvcW1ha2UuY29uZgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmViYzBhOTIKKy0tLSAvZGV2L251bGwKKysrKyBiL21rc3BlY3MvbGludXgtZysrLWFhcmNoNjQvcW1ha2UuY29uZgorQEAgLTAsMCArMSwyNyBAQAorKyMKKysjIHFtYWtlIGNvbmZpZ3VyYXRpb24gZm9yIGxpbnV4LWcrKworKyMKKysjIFdyaXR0ZW4gZm9yIEdOVS9MaW51eCBwbGF0Zm9ybXMgdGhhdCBoYXZlIGJvdGggbGliIGFuZCBsaWI2NCBkaXJlY3RvcmllcywKKysjIGxpa2UgdGhlIEFNRCBPcHRlcm9uLgorKyMKKysKKytNQUtFRklMRV9HRU5FUkFUT1IgICAgPSBVTklYCisrVEFSR0VUX1BMQVRGT1JNICAgICAgID0gdW5peAorK1RFTVBMQVRFICAgICAgICAgICAgICA9IGFwcAorK0NPTkZJRyAgICAgICAgICAgICAgICs9IHF0IHdhcm5fb24gcmVsZWFzZSBpbmNyZW1lbnRhbCBsaW5rX3BybCBnZGJfZHdhcmZfaW5kZXgKKytRVCAgICAgICAgICAgICAgICAgICArPSBjb3JlIGd1aQorK1FNQUtFX0lOQ1JFTUVOVEFMX1NUWUxFID0gc3VibGliCisrCisrUU1BS0VfQ0ZMQUdTICAgICA9CisrUU1BS0VfTEZMQUdTICAgICA9CisrCisrUU1BS0VfQ0ZMQUdTX1JFTEVBU0UgICArPSAtTzIKKysKKytpbmNsdWRlKC4uL2NvbW1vbi9saW51eC5jb25mKQorK2luY2x1ZGUoLi4vY29tbW9uL2djYy1iYXNlLXVuaXguY29uZikKKytpbmNsdWRlKC4uL2NvbW1vbi9nKystdW5peC5jb25mKQorKworK1FNQUtFX0xJQkRJUl9YMTEgICAgICA9IC91c3IvWDExUjYvbGliNjQKKytRTUFLRV9MSUJESVJfT1BFTkdMICAgPSAvdXNyL1gxMVI2L2xpYjY0CisrCisrbG9hZChxdF9jb25maWcpCitkaWZmIC0tZ2l0IGEvbWtzcGVjcy9saW51eC1nKystYWFyY2g2NC9xcGxhdGZvcm1kZWZzLmggYi9ta3NwZWNzL2xpbnV4LWcrKy1hYXJjaDY0L3FwbGF0Zm9ybWRlZnMuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjU2MjEyOGIKKy0tLSAvZGV2L251bGwKKysrKyBiL21rc3BlY3MvbGludXgtZysrLWFhcmNoNjQvcXBsYXRmb3JtZGVmcy5oCitAQCAtMCwwICsxLDQyIEBACisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysqKgorKyoqIENvcHlyaWdodCAoQykgMjAxMiBEaWdpYSBQbGMgYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorKyoqIENvbnRhY3Q6IGh0dHA6Ly93d3cucXQtcHJvamVjdC5vcmcvbGVnYWwKKysqKgorKyoqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBxbWFrZSBzcGVjIG9mIHRoZSBRdCBUb29sa2l0LgorKyoqCisrKiogJFFUX0JFR0lOX0xJQ0VOU0U6TEdQTCQKKysqKiBDb21tZXJjaWFsIExpY2Vuc2UgVXNhZ2UKKysqKiBMaWNlbnNlZXMgaG9sZGluZyB2YWxpZCBjb21tZXJjaWFsIFF0IGxpY2Vuc2VzIG1heSB1c2UgdGhpcyBmaWxlIGluCisrKiogYWNjb3JkYW5jZSB3aXRoIHRoZSBjb21tZXJjaWFsIGxpY2Vuc2UgYWdyZWVtZW50IHByb3ZpZGVkIHdpdGggdGhlCisrKiogU29mdHdhcmUgb3IsIGFsdGVybmF0aXZlbHksIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgY29udGFpbmVkIGluCisrKiogYSB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIHlvdSBhbmQgRGlnaWEuICBGb3IgbGljZW5zaW5nIHRlcm1zIGFuZAorKyoqIGNvbmRpdGlvbnMgc2VlIGh0dHA6Ly9xdC5kaWdpYS5jb20vbGljZW5zaW5nLiAgRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24KKysqKiB1c2UgdGhlIGNvbnRhY3QgZm9ybSBhdCBodHRwOi8vcXQuZGlnaWEuY29tL2NvbnRhY3QtdXMuCisrKioKKysqKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVXNhZ2UKKysqKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyCisrKiogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKysqKiBGb3VuZGF0aW9uIGFuZCBhcHBlYXJpbmcgaW4gdGhlIGZpbGUgTElDRU5TRS5MR1BMIGluY2x1ZGVkIGluIHRoZQorKyoqIHBhY2thZ2luZyBvZiB0aGlzIGZpbGUuICBQbGVhc2UgcmV2aWV3IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gdG8KKysqKiBlbnN1cmUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSByZXF1aXJlbWVudHMKKysqKiB3aWxsIGJlIG1ldDogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9sZ3BsLTIuMS5odG1sLgorKyoqCisrKiogSW4gYWRkaXRpb24sIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sIERpZ2lhIGdpdmVzIHlvdSBjZXJ0YWluIGFkZGl0aW9uYWwKKysqKiByaWdodHMuICBUaGVzZSByaWdodHMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgRGlnaWEgUXQgTEdQTCBFeGNlcHRpb24KKysqKiB2ZXJzaW9uIDEuMSwgaW5jbHVkZWQgaW4gdGhlIGZpbGUgTEdQTF9FWENFUFRJT04udHh0IGluIHRoaXMgcGFja2FnZS4KKysqKgorKyoqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFVzYWdlCisrKiogQWx0ZXJuYXRpdmVseSwgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrKiogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMuMCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKysqKiBGb3VuZGF0aW9uIGFuZCBhcHBlYXJpbmcgaW4gdGhlIGZpbGUgTElDRU5TRS5HUEwgaW5jbHVkZWQgaW4gdGhlCisrKiogcGFja2FnaW5nIG9mIHRoaXMgZmlsZS4gIFBsZWFzZSByZXZpZXcgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiB0bworKyoqIGVuc3VyZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLjAgcmVxdWlyZW1lbnRzIHdpbGwgYmUKKysqKiBtZXQ6IGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbC4KKysqKgorKyoqCisrKiogJFFUX0VORF9MSUNFTlNFJAorKyoqCisrKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysjaW5jbHVkZSAiLi4vbGludXgtZysrL3FwbGF0Zm9ybWRlZnMuaCIKKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDMyLWFhcmNoNjRfYWRkX2hlYWRlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAzMi1hYXJjaDY0X2FkZF9oZWFkZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc4Zjc4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAzMi1hYXJjaDY0X2FkZF9oZWFkZXIucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorQWRkIG1pc3NpbmcgaGVhZGVyIGZvciBhYXJjaDY0LiBBbmQgaW5zdGFsbCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hYXJjaDY0LmguCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorZGlmZiAtTnJ1IHF0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtNC44LjYub3JpZy9pbmNsdWRlL1F0Q29yZS9xYXRvbWljX2FhcmNoNjQuaCBxdC1ldmVyeXdoZXJlLW9wZW5zb3VyY2Utc3JjLTQuOC42L2luY2x1ZGUvUXRDb3JlL3FhdG9taWNfYWFyY2g2NC5oCistLS0gcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy00LjguNi5vcmlnL2luY2x1ZGUvUXRDb3JlL3FhdG9taWNfYWFyY2g2NC5oCTE5NzAtMDEtMDEgMDg6MzA6MDAuMDAwMDAwMDAwICswODMwCisrKysgcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy00LjguNi9pbmNsdWRlL1F0Q29yZS9xYXRvbWljX2FhcmNoNjQuaAkyMDE0LTA5LTA5IDE3OjE4OjAzLjc2ODM1MjU1MSArMDgwMAorQEAgLTAsMCArMSBAQAorKyNpbmNsdWRlICIuLi8uLi9zcmMvY29yZWxpYi9hcmNoL3FhdG9taWNfYWFyY2g2NC5oIgorLS0tIHF0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtNC44LjYvaW5jbHVkZS9RdENvcmUvaGVhZGVycy5wcmkub3JpZwkyMDE0LTA5LTA5IDE4OjA1OjM3LjEwMDQzMDMxMSArMDgwMAorKysrIHF0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtNC44LjYvaW5jbHVkZS9RdENvcmUvaGVhZGVycy5wcmkJMjAxNC0wOS0wOSAxODowNTo1OS4xMTI0MzA5MTEgKzA4MDAKK0BAIC0xLDMgKzEsMyBAQAorLVNZTkNRVC5IRUFERVJfRklMRVMgPSAuLi9jb3JlbGliL2tlcm5lbC9xYWJzdHJhY3RldmVudGRpc3BhdGNoZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xYWJzdHJhY3RpdGVtbW9kZWwuaCAuLi9jb3JlbGliL2tlcm5lbC9xYmFzaWN0aW1lci5oIC4uL2NvcmVsaWIva2VybmVsL3Fjb3JlYXBwbGljYXRpb24uaCAuLi9jb3JlbGliL2tlcm5lbC9xY29yZWV2ZW50LmggLi4vY29yZWxpYi9rZXJuZWwvcWV2ZW50bG9vcC5oIC4uL2NvcmVsaWIva2VybmVsL3FmdW5jdGlvbnNfbmFjbC5oIC4uL2NvcmVsaWIva2VybmVsL3FmdW5jdGlvbnNfdnh3b3Jrcy5oIC4uL2NvcmVsaWIva2VybmVsL3FmdW5jdGlvbnNfd2luY2UuaCAuLi9jb3JlbGliL2tlcm5lbC9xbWF0aC5oIC4uL2NvcmVsaWIva2VybmVsL3FtZXRhb2JqZWN0LmggLi4vY29yZWxpYi9rZXJuZWwvcW1ldGF0eXBlLmggLi4vY29yZWxpYi9rZXJuZWwvcW1pbWVkYXRhLmggLi4vY29yZWxpYi9rZXJuZWwvcW9iamVjdC5oIC4uL2NvcmVsaWIva2VybmVsL3FvYmplY3RjbGVhbnVwaGFuZGxlci5oIC4uL2NvcmVsaWIva2VybmVsL3FvYmplY3RkZWZzLmggLi4vY29yZWxpYi9rZXJuZWwvcXBvaW50ZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xc2hhcmVkbWVtb3J5LmggLi4vY29yZWxpYi9rZXJuZWwvcXNpZ25hbG1hcHBlci5oIC4uL2NvcmVsaWIva2VybmVsL3Fzb2NrZXRub3RpZmllci5oIC4uL2NvcmVsaWIva2VybmVsL3FzeXN0ZW1zZW1hcGhvcmUuaCAuLi9jb3JlbGliL2tlcm5lbC9xdGltZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xdHJhbnNsYXRvci5oIC4uL2NvcmVsaWIva2VybmVsL3F2YXJpYW50LmggLi4vY29yZWxpYi9hbmltYXRpb24vcWFic3RyYWN0YW5pbWF0aW9uLmggLi4vY29yZWxpYi9hbmltYXRpb24vcWFuaW1hdGlvbmdyb3VwLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXBhcmFsbGVsYW5pbWF0aW9uZ3JvdXAuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xcGF1c2VhbmltYXRpb24uaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xcHJvcGVydHlhbmltYXRpb24uaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xc2VxdWVudGlhbGFuaW1hdGlvbmdyb3VwLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXZhcmlhbnRhbmltYXRpb24uaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hbHBoYS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FyY2guaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hcm0uaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hcm12NS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FybXY2LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYXJtdjcuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hdnIzMi5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2JmaW4uaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19ib290c3RyYXAuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19nZW5lcmljLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfaTM4Ni5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2lhNjQuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19pbnRlZ3JpdHkuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19tNjhrLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfbWFjb3N4LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfbWlwcy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3BhcmlzYy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3Bvd2VycGMuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19zMzkwLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfc2guaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19zaDRhLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfc3BhcmMuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19zeW1iaWFuLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfdnh3b3Jrcy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3dpbmRvd3MuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY193aW5kb3dzY2UuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY194ODZfNjQuaCAuLi9jb3JlbGliL3Rvb2xzL3FhbGdvcml0aG1zLmggLi4vY29yZWxpYi90b29scy9xYml0YXJyYXkuaCAuLi9jb3JlbGliL3Rvb2xzL3FieXRlYXJyYXkuaCAuLi9jb3JlbGliL3Rvb2xzL3FieXRlYXJyYXltYXRjaGVyLmggLi4vY29yZWxpYi90b29scy9xY2FjaGUuaCAuLi9jb3JlbGliL3Rvb2xzL3FjaGFyLmggLi4vY29yZWxpYi90b29scy9xY29udGFpbmVyZndkLmggLi4vY29yZWxpYi90b29scy9xY29udGlndW91c2NhY2hlLmggLi4vY29yZWxpYi90b29scy9xY3J5cHRvZ3JhcGhpY2hhc2guaCAuLi9jb3JlbGliL3Rvb2xzL3FkYXRldGltZS5oIC4uL2NvcmVsaWIvdG9vbHMvcWVhc2luZ2N1cnZlLmggLi4vY29yZWxpYi90b29scy9xZWxhcHNlZHRpbWVyLmggLi4vY29yZWxpYi90b29scy9xaGFzaC5oIC4uL2NvcmVsaWIvdG9vbHMvcWl0ZXJhdG9yLmggLi4vY29yZWxpYi90b29scy9xbGluZS5oIC4uL2NvcmVsaWIvdG9vbHMvcWxpbmtlZGxpc3QuaCAuLi9jb3JlbGliL3Rvb2xzL3FsaXN0LmggLi4vY29yZWxpYi90b29scy9xbG9jYWxlLmggLi4vY29yZWxpYi90b29scy9xbG9jYWxlX2JsYWNrYmVycnkuaCAuLi9jb3JlbGliL3Rvb2xzL3FtYXAuaCAuLi9jb3JlbGliL3Rvb2xzL3FtYXJnaW5zLmggLi4vY29yZWxpYi90b29scy9xcGFpci5oIC4uL2NvcmVsaWIvdG9vbHMvcXBvaW50LmggLi4vY29yZWxpYi90b29scy9xcXVldWUuaCAuLi9jb3JlbGliL3Rvb2xzL3FyZWN0LmggLi4vY29yZWxpYi90b29scy9xcmVnZXhwLmggLi4vY29yZWxpYi90b29scy9xc2NvcGVkcG9pbnRlci5oIC4uL2NvcmVsaWIvdG9vbHMvcXNjb3BlZHZhbHVlcm9sbGJhY2suaCAuLi9jb3JlbGliL3Rvb2xzL3FzZXQuaCAuLi9jb3JlbGliL3Rvb2xzL3FzaGFyZWRkYXRhLmggLi4vY29yZWxpYi90b29scy9xc2hhcmVkcG9pbnRlci5oIC4uL2NvcmVsaWIvdG9vbHMvcXNoYXJlZHBvaW50ZXJfaW1wbC5oIC4uL2NvcmVsaWIvdG9vbHMvcXNpemUuaCAuLi9jb3JlbGliL3Rvb2xzL3FzdGFjay5oIC4uL2NvcmVsaWIvdG9vbHMvcXN0cmluZy5oIC4uL2NvcmVsaWIvdG9vbHMvcXN0cmluZ2J1aWxkZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3FzdHJpbmdsaXN0LmggLi4vY29yZWxpYi90b29scy9xc3RyaW5nbWF0Y2hlci5oIC4uL2NvcmVsaWIvdG9vbHMvcXRleHRib3VuZGFyeWZpbmRlci5oIC4uL2NvcmVsaWIvdG9vbHMvcXRpbWVsaW5lLmggLi4vY29yZWxpYi90b29scy9xdmFybGVuZ3RoYXJyYXkuaCAuLi9jb3JlbGliL3Rvb2xzL3F2ZWN0b3IuaCAuLi9jb3JlbGliL3BsdWdpbi9xZmFjdG9yeWludGVyZmFjZS5oIC4uL2NvcmVsaWIvcGx1Z2luL3FsaWJyYXJ5LmggLi4vY29yZWxpYi9wbHVnaW4vcXBsdWdpbi5oIC4uL2NvcmVsaWIvcGx1Z2luL3FwbHVnaW5sb2FkZXIuaCAuLi9jb3JlbGliL3BsdWdpbi9xdXVpZC5oIC4uL2NvcmVsaWIveG1sL3F4bWxzdHJlYW0uaCAuLi9jb3JlbGliL3RocmVhZC9xYXRvbWljLmggLi4vY29yZWxpYi90aHJlYWQvcWJhc2ljYXRvbWljLmggLi4vY29yZWxpYi90aHJlYWQvcW11dGV4LmggLi4vY29yZWxpYi90aHJlYWQvcXJlYWR3cml0ZWxvY2suaCAuLi9jb3JlbGliL3RocmVhZC9xc2VtYXBob3JlLmggLi4vY29yZWxpYi90aHJlYWQvcXRocmVhZC5oIC4uL2NvcmVsaWIvdGhyZWFkL3F0aHJlYWRzdG9yYWdlLmggLi4vY29yZWxpYi90aHJlYWQvcXdhaXRjb25kaXRpb24uaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xYWJzdHJhY3RzdGF0ZS5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FhYnN0cmFjdHRyYW5zaXRpb24uaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xZXZlbnR0cmFuc2l0aW9uLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWZpbmFsc3RhdGUuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xaGlzdG9yeXN0YXRlLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcXNpZ25hbHRyYW5zaXRpb24uaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xc3RhdGUuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xc3RhdGVtYWNoaW5lLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3FmdXR1cmUuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcWZ1dHVyZWludGVyZmFjZS5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xZnV0dXJlc3luY2hyb25pemVyLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3FmdXR1cmV3YXRjaGVyLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3FydW5uYWJsZS5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRjb21waWxlcnRlc3QuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50ZXhjZXB0aW9uLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGZpbHRlci5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRmaWx0ZXJrZXJuZWwuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50ZnVuY3Rpb253cmFwcGVycy5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRpdGVyYXRla2VybmVsLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudG1hcC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRtYXBrZXJuZWwuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50bWVkaWFuLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHJlZHVjZWtlcm5lbC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRyZXN1bHRzdG9yZS5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRydW4uaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50cnVuYmFzZS5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRzdG9yZWRmdW5jdGlvbmNhbGwuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50dGhyZWFkZW5naW5lLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0aHJlYWRwb29sLmggLi4vY29yZWxpYi9pby9xYWJzdHJhY3RmaWxlZW5naW5lLmggLi4vY29yZWxpYi9pby9xYnVmZmVyLmggLi4vY29yZWxpYi9pby9xZGF0YXN0cmVhbS5oIC4uL2NvcmVsaWIvaW8vcWRlYnVnLmggLi4vY29yZWxpYi9pby9xZGlyLmggLi4vY29yZWxpYi9pby9xZGlyaXRlcmF0b3IuaCAuLi9jb3JlbGliL2lvL3FmaWxlLmggLi4vY29yZWxpYi9pby9xZmlsZWluZm8uaCAuLi9jb3JlbGliL2lvL3FmaWxlc3lzdGVtd2F0Y2hlci5oIC4uL2NvcmVsaWIvaW8vcWZzZmlsZWVuZ2luZS5oIC4uL2NvcmVsaWIvaW8vcWlvZGV2aWNlLmggLi4vY29yZWxpYi9pby9xcHJvY2Vzcy5oIC4uL2NvcmVsaWIvaW8vcXJlc291cmNlLmggLi4vY29yZWxpYi9pby9xc2V0dGluZ3MuaCAuLi9jb3JlbGliL2lvL3F0ZW1wb3JhcnlmaWxlLmggLi4vY29yZWxpYi9pby9xdGV4dHN0cmVhbS5oIC4uL2NvcmVsaWIvaW8vcXVybC5oIC4uL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWctZGlzdC5oIC4uL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWctbGFyZ2UuaCAuLi9jb3JlbGliL2dsb2JhbC9xY29uZmlnLW1lZGl1bS5oIC4uL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWctbWluaW1hbC5oIC4uL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWctbmFjbC5oIC4uL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWctc21hbGwuaCAuLi9jb3JlbGliL2dsb2JhbC9xZW5kaWFuLmggLi4vY29yZWxpYi9nbG9iYWwvcWZlYXR1cmVzLmggLi4vY29yZWxpYi9nbG9iYWwvcWdsb2JhbC5oIC4uL2NvcmVsaWIvZ2xvYmFsL3FsaWJyYXJ5aW5mby5oIC4uL2NvcmVsaWIvZ2xvYmFsL3FuYW1lc3BhY2UuaCAuLi9jb3JlbGliL2dsb2JhbC9xbnVtZXJpYy5oIC4uL2NvcmVsaWIvZ2xvYmFsL3F0X3dpbmRvd3MuaCAuLi9jb3JlbGliL2dsb2JhbC9xY29uZmlnLmggLi4vY29yZWxpYi9jb2RlY3MvcXRleHRjb2RlYy5oIC4uL2NvcmVsaWIvY29kZWNzL3F0ZXh0Y29kZWNwbHVnaW4uaCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdENvcmUgCisrU1lOQ1FULkhFQURFUl9GSUxFUyA9IC4uL2NvcmVsaWIva2VybmVsL3FhYnN0cmFjdGV2ZW50ZGlzcGF0Y2hlci5oIC4uL2NvcmVsaWIva2VybmVsL3FhYnN0cmFjdGl0ZW1tb2RlbC5oIC4uL2NvcmVsaWIva2VybmVsL3FiYXNpY3RpbWVyLmggLi4vY29yZWxpYi9rZXJuZWwvcWNvcmVhcHBsaWNhdGlvbi5oIC4uL2NvcmVsaWIva2VybmVsL3Fjb3JlZXZlbnQuaCAuLi9jb3JlbGliL2tlcm5lbC9xZXZlbnRsb29wLmggLi4vY29yZWxpYi9rZXJuZWwvcWZ1bmN0aW9uc19uYWNsLmggLi4vY29yZWxpYi9rZXJuZWwvcWZ1bmN0aW9uc192eHdvcmtzLmggLi4vY29yZWxpYi9rZXJuZWwvcWZ1bmN0aW9uc193aW5jZS5oIC4uL2NvcmVsaWIva2VybmVsL3FtYXRoLmggLi4vY29yZWxpYi9rZXJuZWwvcW1ldGFvYmplY3QuaCAuLi9jb3JlbGliL2tlcm5lbC9xbWV0YXR5cGUuaCAuLi9jb3JlbGliL2tlcm5lbC9xbWltZWRhdGEuaCAuLi9jb3JlbGliL2tlcm5lbC9xb2JqZWN0LmggLi4vY29yZWxpYi9rZXJuZWwvcW9iamVjdGNsZWFudXBoYW5kbGVyLmggLi4vY29yZWxpYi9rZXJuZWwvcW9iamVjdGRlZnMuaCAuLi9jb3JlbGliL2tlcm5lbC9xcG9pbnRlci5oIC4uL2NvcmVsaWIva2VybmVsL3FzaGFyZWRtZW1vcnkuaCAuLi9jb3JlbGliL2tlcm5lbC9xc2lnbmFsbWFwcGVyLmggLi4vY29yZWxpYi9rZXJuZWwvcXNvY2tldG5vdGlmaWVyLmggLi4vY29yZWxpYi9rZXJuZWwvcXN5c3RlbXNlbWFwaG9yZS5oIC4uL2NvcmVsaWIva2VybmVsL3F0aW1lci5oIC4uL2NvcmVsaWIva2VybmVsL3F0cmFuc2xhdG9yLmggLi4vY29yZWxpYi9rZXJuZWwvcXZhcmlhbnQuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xYWJzdHJhY3RhbmltYXRpb24uaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xYW5pbWF0aW9uZ3JvdXAuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xcGFyYWxsZWxhbmltYXRpb25ncm91cC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FwYXVzZWFuaW1hdGlvbi5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3Fwcm9wZXJ0eWFuaW1hdGlvbi5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FzZXF1ZW50aWFsYW5pbWF0aW9uZ3JvdXAuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xdmFyaWFudGFuaW1hdGlvbi5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FscGhhLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYXJjaC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FybS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FybXY1LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYXJtdjYuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hcm12Ny5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FhcmNoNjQuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hdnIzMi5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2JmaW4uaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19ib290c3RyYXAuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19nZW5lcmljLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfaTM4Ni5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2lhNjQuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19pbnRlZ3JpdHkuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19tNjhrLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfbWFjb3N4LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfbWlwcy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3BhcmlzYy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3Bvd2VycGMuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19zMzkwLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfc2guaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19zaDRhLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfc3BhcmMuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19zeW1iaWFuLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfdnh3b3Jrcy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3dpbmRvd3MuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY193aW5kb3dzY2UuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY194ODZfNjQuaCAuLi9jb3JlbGliL3Rvb2xzL3FhbGdvcml0aG1zLmggLi4vY29yZWxpYi90b29scy9xYml0YXJyYXkuaCAuLi9jb3JlbGliL3Rvb2xzL3FieXRlYXJyYXkuaCAuLi9jb3JlbGliL3Rvb2xzL3FieXRlYXJyYXltYXRjaGVyLmggLi4vY29yZWxpYi90b29scy9xY2FjaGUuaCAuLi9jb3JlbGliL3Rvb2xzL3FjaGFyLmggLi4vY29yZWxpYi90b29scy9xY29udGFpbmVyZndkLmggLi4vY29yZWxpYi90b29scy9xY29udGlndW91c2NhY2hlLmggLi4vY29yZWxpYi90b29scy9xY3J5cHRvZ3JhcGhpY2hhc2guaCAuLi9jb3JlbGliL3Rvb2xzL3FkYXRldGltZS5oIC4uL2NvcmVsaWIvdG9vbHMvcWVhc2luZ2N1cnZlLmggLi4vY29yZWxpYi90b29scy9xZWxhcHNlZHRpbWVyLmggLi4vY29yZWxpYi90b29scy9xaGFzaC5oIC4uL2NvcmVsaWIvdG9vbHMvcWl0ZXJhdG9yLmggLi4vY29yZWxpYi90b29scy9xbGluZS5oIC4uL2NvcmVsaWIvdG9vbHMvcWxpbmtlZGxpc3QuaCAuLi9jb3JlbGliL3Rvb2xzL3FsaXN0LmggLi4vY29yZWxpYi90b29scy9xbG9jYWxlLmggLi4vY29yZWxpYi90b29scy9xbG9jYWxlX2JsYWNrYmVycnkuaCAuLi9jb3JlbGliL3Rvb2xzL3FtYXAuaCAuLi9jb3JlbGliL3Rvb2xzL3FtYXJnaW5zLmggLi4vY29yZWxpYi90b29scy9xcGFpci5oIC4uL2NvcmVsaWIvdG9vbHMvcXBvaW50LmggLi4vY29yZWxpYi90b29scy9xcXVldWUuaCAuLi9jb3JlbGliL3Rvb2xzL3FyZWN0LmggLi4vY29yZWxpYi90b29scy9xcmVnZXhwLmggLi4vY29yZWxpYi90b29scy9xc2NvcGVkcG9pbnRlci5oIC4uL2NvcmVsaWIvdG9vbHMvcXNjb3BlZHZhbHVlcm9sbGJhY2suaCAuLi9jb3JlbGliL3Rvb2xzL3FzZXQuaCAuLi9jb3JlbGliL3Rvb2xzL3FzaGFyZWRkYXRhLmggLi4vY29yZWxpYi90b29scy9xc2hhcmVkcG9pbnRlci5oIC4uL2NvcmVsaWIvdG9vbHMvcXNoYXJlZHBvaW50ZXJfaW1wbC5oIC4uL2NvcmVsaWIvdG9vbHMvcXNpemUuaCAuLi9jb3JlbGliL3Rvb2xzL3FzdGFjay5oIC4uL2NvcmVsaWIvdG9vbHMvcXN0cmluZy5oIC4uL2NvcmVsaWIvdG9vbHMvcXN0cmluZ2J1aWxkZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3FzdHJpbmdsaXN0LmggLi4vY29yZWxpYi90b29scy9xc3RyaW5nbWF0Y2hlci5oIC4uL2NvcmVsaWIvdG9vbHMvcXRleHRib3VuZGFyeWZpbmRlci5oIC4uL2NvcmVsaWIvdG9vbHMvcXRpbWVsaW5lLmggLi4vY29yZWxpYi90b29scy9xdmFybGVuZ3RoYXJyYXkuaCAuLi9jb3JlbGliL3Rvb2xzL3F2ZWN0b3IuaCAuLi9jb3JlbGliL3BsdWdpbi9xZmFjdG9yeWludGVyZmFjZS5oIC4uL2NvcmVsaWIvcGx1Z2luL3FsaWJyYXJ5LmggLi4vY29yZWxpYi9wbHVnaW4vcXBsdWdpbi5oIC4uL2NvcmVsaWIvcGx1Z2luL3FwbHVnaW5sb2FkZXIuaCAuLi9jb3JlbGliL3BsdWdpbi9xdXVpZC5oIC4uL2NvcmVsaWIveG1sL3F4bWxzdHJlYW0uaCAuLi9jb3JlbGliL3RocmVhZC9xYXRvbWljLmggLi4vY29yZWxpYi90aHJlYWQvcWJhc2ljYXRvbWljLmggLi4vY29yZWxpYi90aHJlYWQvcW11dGV4LmggLi4vY29yZWxpYi90aHJlYWQvcXJlYWR3cml0ZWxvY2suaCAuLi9jb3JlbGliL3RocmVhZC9xc2VtYXBob3JlLmggLi4vY29yZWxpYi90aHJlYWQvcXRocmVhZC5oIC4uL2NvcmVsaWIvdGhyZWFkL3F0aHJlYWRzdG9yYWdlLmggLi4vY29yZWxpYi90aHJlYWQvcXdhaXRjb25kaXRpb24uaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xYWJzdHJhY3RzdGF0ZS5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FhYnN0cmFjdHRyYW5zaXRpb24uaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xZXZlbnR0cmFuc2l0aW9uLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWZpbmFsc3RhdGUuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xaGlzdG9yeXN0YXRlLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcXNpZ25hbHRyYW5zaXRpb24uaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xc3RhdGUuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xc3RhdGVtYWNoaW5lLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3FmdXR1cmUuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcWZ1dHVyZWludGVyZmFjZS5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xZnV0dXJlc3luY2hyb25pemVyLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3FmdXR1cmV3YXRjaGVyLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3FydW5uYWJsZS5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRjb21waWxlcnRlc3QuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50ZXhjZXB0aW9uLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGZpbHRlci5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRmaWx0ZXJrZXJuZWwuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50ZnVuY3Rpb253cmFwcGVycy5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRpdGVyYXRla2VybmVsLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudG1hcC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRtYXBrZXJuZWwuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50bWVkaWFuLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHJlZHVjZWtlcm5lbC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRyZXN1bHRzdG9yZS5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRydW4uaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50cnVuYmFzZS5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRzdG9yZWRmdW5jdGlvbmNhbGwuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50dGhyZWFkZW5naW5lLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0aHJlYWRwb29sLmggLi4vY29yZWxpYi9pby9xYWJzdHJhY3RmaWxlZW5naW5lLmggLi4vY29yZWxpYi9pby9xYnVmZmVyLmggLi4vY29yZWxpYi9pby9xZGF0YXN0cmVhbS5oIC4uL2NvcmVsaWIvaW8vcWRlYnVnLmggLi4vY29yZWxpYi9pby9xZGlyLmggLi4vY29yZWxpYi9pby9xZGlyaXRlcmF0b3IuaCAuLi9jb3JlbGliL2lvL3FmaWxlLmggLi4vY29yZWxpYi9pby9xZmlsZWluZm8uaCAuLi9jb3JlbGliL2lvL3FmaWxlc3lzdGVtd2F0Y2hlci5oIC4uL2NvcmVsaWIvaW8vcWZzZmlsZWVuZ2luZS5oIC4uL2NvcmVsaWIvaW8vcWlvZGV2aWNlLmggLi4vY29yZWxpYi9pby9xcHJvY2Vzcy5oIC4uL2NvcmVsaWIvaW8vcXJlc291cmNlLmggLi4vY29yZWxpYi9pby9xc2V0dGluZ3MuaCAuLi9jb3JlbGliL2lvL3F0ZW1wb3JhcnlmaWxlLmggLi4vY29yZWxpYi9pby9xdGV4dHN0cmVhbS5oIC4uL2NvcmVsaWIvaW8vcXVybC5oIC4uL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWctZGlzdC5oIC4uL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWctbGFyZ2UuaCAuLi9jb3JlbGliL2dsb2JhbC9xY29uZmlnLW1lZGl1bS5oIC4uL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWctbWluaW1hbC5oIC4uL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWctbmFjbC5oIC4uL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWctc21hbGwuaCAuLi9jb3JlbGliL2dsb2JhbC9xZW5kaWFuLmggLi4vY29yZWxpYi9nbG9iYWwvcWZlYXR1cmVzLmggLi4vY29yZWxpYi9nbG9iYWwvcWdsb2JhbC5oIC4uL2NvcmVsaWIvZ2xvYmFsL3FsaWJyYXJ5aW5mby5oIC4uL2NvcmVsaWIvZ2xvYmFsL3FuYW1lc3BhY2UuaCAuLi9jb3JlbGliL2dsb2JhbC9xbnVtZXJpYy5oIC4uL2NvcmVsaWIvZ2xvYmFsL3F0X3dpbmRvd3MuaCAuLi9jb3JlbGliL2dsb2JhbC9xY29uZmlnLmggLi4vY29yZWxpYi9jb2RlY3MvcXRleHRjb2RlYy5oIC4uL2NvcmVsaWIvY29kZWNzL3F0ZXh0Y29kZWNwbHVnaW4uaCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdENvcmUgCisgU1lOQ1FULkhFQURFUl9DTEFTU0VTID0gLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFic3RyYWN0RXZlbnREaXNwYXRjaGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNb2RlbEluZGV4IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQZXJzaXN0ZW50TW9kZWxJbmRleCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTW9kZWxJbmRleExpc3QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFic3RyYWN0SXRlbU1vZGVsIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBYnN0cmFjdFRhYmxlTW9kZWwgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFic3RyYWN0TGlzdE1vZGVsIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FCYXNpY1RpbWVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FDb3JlQXBwbGljYXRpb24gLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRDbGVhblVwRnVuY3Rpb24gLi4vLi4vaW5jbHVkZS9RdENvcmUvUUV2ZW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUaW1lckV2ZW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FDaGlsZEV2ZW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FDdXN0b21FdmVudCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRHluYW1pY1Byb3BlcnR5Q2hhbmdlRXZlbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUV2ZW50TG9vcCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWV0YU1ldGhvZCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWV0YUVudW0gLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1ldGFQcm9wZXJ0eSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWV0YUNsYXNzSW5mbyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWV0YVR5cGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1ldGFUeXBlSWQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1ldGFUeXBlSWQyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNaW1lRGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RT2JqZWN0TGlzdCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RT2JqZWN0RGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RT2JqZWN0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FPYmplY3RVc2VyRGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RT2JqZWN0Q2xlYW51cEhhbmRsZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUdlbmVyaWNBcmd1bWVudCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RR2VuZXJpY1JldHVybkFyZ3VtZW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBcmd1bWVudCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUmV0dXJuQXJndW1lbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1ldGFPYmplY3QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1ldGFPYmplY3RBY2Nlc3NvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWV0YU9iamVjdEV4dHJhRGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUG9pbnRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2hhcmVkTWVtb3J5IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTaWduYWxNYXBwZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNvY2tldE5vdGlmaWVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTeXN0ZW1TZW1hcGhvcmUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRpbWVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUcmFuc2xhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FWYXJpYW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FWYXJpYW50TGlzdCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVmFyaWFudE1hcCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVmFyaWFudEhhc2ggLi4vLi4vaW5jbHVkZS9RdENvcmUvUVZhcmlhbnRDb21wYXJpc29uSGVscGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBYnN0cmFjdEFuaW1hdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQW5pbWF0aW9uRHJpdmVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBbmltYXRpb25Hcm91cCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUGFyYWxsZWxBbmltYXRpb25Hcm91cCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUGF1c2VBbmltYXRpb24gLi4vLi4vaW5jbHVkZS9RdENvcmUvUVByb3BlcnR5QW5pbWF0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTZXF1ZW50aWFsQW5pbWF0aW9uR3JvdXAgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVZhcmlhbnRBbmltYXRpb24gLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRBbGdvcml0aG1zIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FCaXRBcnJheSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQml0UmVmIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FCeXRlQXJyYXkgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUJ5dGVSZWYgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUJ5dGVBcnJheU1hdGNoZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNhY2hlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMYXRpbjFDaGFyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FDaGFyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0Q29udGFpbmVyRndkIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FDb250aWd1b3VzQ2FjaGVEYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FDb250aWd1b3VzQ2FjaGVUeXBlZERhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNvbnRpZ3VvdXNDYWNoZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQ3J5cHRvZ3JhcGhpY0hhc2ggLi4vLi4vaW5jbHVkZS9RdENvcmUvUURhdGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRpbWUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUURhdGVUaW1lIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FFYXNpbmdDdXJ2ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRWxhcHNlZFRpbWVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FIYXNoRGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RSGFzaER1bW15VmFsdWUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUhhc2hEdW1teU5vZGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUhhc2hOb2RlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FIYXNoIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNdWx0aUhhc2ggLi4vLi4vaW5jbHVkZS9RdENvcmUvUUhhc2hJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXV0YWJsZUhhc2hJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTGluZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTGluZUYgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxpbmtlZExpc3REYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaW5rZWRMaXN0Tm9kZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTGlua2VkTGlzdCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTGlua2VkTGlzdEl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNdXRhYmxlTGlua2VkTGlzdEl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaXN0RGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTGlzdCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTGlzdEl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNdXRhYmxlTGlzdEl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTeXN0ZW1Mb2NhbGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxvY2FsZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQkJTeXN0ZW1Mb2NhbGVEYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNYXBEYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNYXBOb2RlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNYXBQYXlsb2FkTm9kZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWFwIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNdWx0aU1hcCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWFwSXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11dGFibGVNYXBJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWFyZ2lucyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUGFpciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUG9pbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVBvaW50RiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUXVldWUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVJlY3QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVJlY3RGIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FSZWdFeHAgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNjb3BlZFBvaW50ZXJEZWxldGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTY29wZWRQb2ludGVyQXJyYXlEZWxldGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTY29wZWRQb2ludGVyUG9kRGVsZXRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2NvcGVkUG9pbnRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2NvcGVkQXJyYXlQb2ludGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTY29wZWRWYWx1ZVJvbGxiYWNrIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTZXQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNldEl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNdXRhYmxlU2V0SXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNoYXJlZERhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNoYXJlZERhdGFQb2ludGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FFeHBsaWNpdGx5U2hhcmVkRGF0YVBvaW50ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNoYXJlZFBvaW50ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVdlYWtQb2ludGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTaXplIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTaXplRiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3RhY2sgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVN0ZFdTdHJpbmcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVN0cmluZyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTGF0aW4xU3RyaW5nIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FDaGFyUmVmIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FDb25zdFN0cmluZyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3RyaW5nUmVmIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMYXRpbjFMaXRlcmFsIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBYnN0cmFjdENvbmNhdGVuYWJsZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQ29uY2F0ZW5hYmxlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTdHJpbmdCdWlsZGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTdHJpbmdMaXN0SXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11dGFibGVTdHJpbmdMaXN0SXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVN0cmluZ0xpc3QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVN0cmluZ01hdGNoZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRleHRCb3VuZGFyeUZpbmRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGltZUxpbmUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVZhckxlbmd0aEFycmF5IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FWZWN0b3JEYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FWZWN0b3JUeXBlZERhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVZlY3RvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVmVjdG9ySXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11dGFibGVWZWN0b3JJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRmFjdG9yeUludGVyZmFjZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTGlicmFyeSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdFBsdWdpbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdFBsdWdpbkluc3RhbmNlRnVuY3Rpb24gLi4vLi4vaW5jbHVkZS9RdENvcmUvUVBsdWdpbkxvYWRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVXVpZCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RWG1sU3RyZWFtU3RyaW5nUmVmIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FYbWxTdHJlYW1BdHRyaWJ1dGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVhtbFN0cmVhbUF0dHJpYnV0ZXMgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVhtbFN0cmVhbU5hbWVzcGFjZURlY2xhcmF0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FYbWxTdHJlYW1OYW1lc3BhY2VEZWNsYXJhdGlvbnMgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVhtbFN0cmVhbU5vdGF0aW9uRGVjbGFyYXRpb24gLi4vLi4vaW5jbHVkZS9RdENvcmUvUVhtbFN0cmVhbU5vdGF0aW9uRGVjbGFyYXRpb25zIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FYbWxTdHJlYW1FbnRpdHlEZWNsYXJhdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RWG1sU3RyZWFtRW50aXR5RGVjbGFyYXRpb25zIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FYbWxTdHJlYW1FbnRpdHlSZXNvbHZlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RWG1sU3RyZWFtUmVhZGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FYbWxTdHJlYW1Xcml0ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUF0b21pY0ludCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQXRvbWljUG9pbnRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQmFzaWNBdG9taWNJbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUJhc2ljQXRvbWljUG9pbnRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXV0ZXggLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11dGV4TG9ja2VyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNdXRleERhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVJlYWRXcml0ZUxvY2sgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVJlYWRMb2NrZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVdyaXRlTG9ja2VyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTZW1hcGhvcmUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRocmVhZCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGhyZWFkU3RvcmFnZURhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRocmVhZFN0b3JhZ2UgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVdhaXRDb25kaXRpb24gLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFic3RyYWN0U3RhdGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFic3RyYWN0VHJhbnNpdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRXZlbnRUcmFuc2l0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGaW5hbFN0YXRlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FIaXN0b3J5U3RhdGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNpZ25hbFRyYW5zaXRpb24gLi4vLi4vaW5jbHVkZS9RdENvcmUvUVN0YXRlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTdGF0ZU1hY2hpbmUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZ1dHVyZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRnV0dXJlSXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11dGFibGVGdXR1cmVJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRnV0dXJlSW50ZXJmYWNlQmFzZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRnV0dXJlSW50ZXJmYWNlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGdXR1cmVTeW5jaHJvbml6ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZ1dHVyZVdhdGNoZXJCYXNlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGdXR1cmVXYXRjaGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FSdW5uYWJsZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdENvbmN1cnJlbnRGaWx0ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRDb25jdXJyZW50TWFwIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0Q29uY3VycmVudFJ1biAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGhyZWFkUG9vbCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RGaWxlRW5naW5lIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBYnN0cmFjdEZpbGVFbmdpbmVIYW5kbGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBYnN0cmFjdEZpbGVFbmdpbmVJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQnVmZmVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FEYXRhU3RyZWFtIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0RGVidWcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUURlYnVnIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FOb0RlYnVnIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FEaXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUURpckl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGaWxlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGaWxlSW5mbyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRmlsZUluZm9MaXN0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGaWxlSW5mb0xpc3RJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRmlsZVN5c3RlbVdhdGNoZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZTRmlsZUVuZ2luZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RSU9EZXZpY2UgLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9QSUQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVByb2Nlc3NFbnZpcm9ubWVudCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUHJvY2VzcyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUmVzb3VyY2UgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNldHRpbmdzIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUZW1wb3JhcnlGaWxlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUZXh0U3RyZWFtIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUZXh0U3RyZWFtRnVuY3Rpb24gLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRleHRTdHJlYW1NYW5pcHVsYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVFMgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRleHRJU3RyZWFtIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUZXh0T1N0cmVhbSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVXJsIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0RW5kaWFuIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0R2xvYmFsIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FJbnRlZ2VyRm9yU2l6ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTm9JbXBsaWNpdEJvb2xDYXN0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FfSU5UOCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX1VJTlQ4IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FfSU5UMTYgLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9VSU5UMTYgLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9JTlQzMiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX1VJTlQzMiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX0lOVDY0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FfVUlOVDY0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FfTExPTkcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9VTExPTkcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9MT05HIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FfVUxPTkcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVN5c0luZm8gLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRNc2dIYW5kbGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FHbG9iYWxTdGF0aWMgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUdsb2JhbFN0YXRpY0RlbGV0ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUJvb2wgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVR5cGVJbmZvIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGbGFnIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FJbmNvbXBhdGlibGVGbGFnIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGbGFncyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRm9yZWFjaENvbnRhaW5lciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRm9yZWFjaENvbnRhaW5lckJhc2UgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxpYnJhcnlJbmZvIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FJbnRlcm5hbCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQ09PUkQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRDb25maWcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRleHRDb2RlYyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dEVuY29kZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRleHREZWNvZGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUZXh0Q29kZWNGYWN0b3J5SW50ZXJmYWNlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUZXh0Q29kZWNQbHVnaW4gCisgU1lOQ1FULlBSSVZBVEVfSEVBREVSX0ZJTEVTID0gLi4vY29yZWxpYi9rZXJuZWwvcWFic3RyYWN0ZXZlbnRkaXNwYXRjaGVyX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xYWJzdHJhY3RpdGVtbW9kZWxfcC5oIC4uL2NvcmVsaWIva2VybmVsL3Fjb3JlX21hY19wLmggLi4vY29yZWxpYi9rZXJuZWwvcWNvcmVfc3ltYmlhbl9wLmggLi4vY29yZWxpYi9rZXJuZWwvcWNvcmVfdW5peF9wLmggLi4vY29yZWxpYi9rZXJuZWwvcWNvcmVhcHBsaWNhdGlvbl9wLmggLi4vY29yZWxpYi9rZXJuZWwvcWNvcmVjbWRsaW5lYXJnc19wLmggLi4vY29yZWxpYi9rZXJuZWwvcWNvcmVnbG9iYWxkYXRhX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xY3Jhc2hoYW5kbGVyX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xZXZlbnRkaXNwYXRjaGVyX2JsYWNrYmVycnlfcC5oIC4uL2NvcmVsaWIva2VybmVsL3FldmVudGRpc3BhdGNoZXJfZ2xpYl9wLmggLi4vY29yZWxpYi9rZXJuZWwvcWV2ZW50ZGlzcGF0Y2hlcl9zeW1iaWFuX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xZXZlbnRkaXNwYXRjaGVyX3VuaXhfcC5oIC4uL2NvcmVsaWIva2VybmVsL3FldmVudGRpc3BhdGNoZXJfd2luX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xZnVuY3Rpb25zX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xbWV0YW9iamVjdF9wLmggLi4vY29yZWxpYi9rZXJuZWwvcW9iamVjdF9wLmggLi4vY29yZWxpYi9rZXJuZWwvcXNoYXJlZG1lbW9yeV9wLmggLi4vY29yZWxpYi9rZXJuZWwvcXN5c3RlbWVycm9yX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xc3lzdGVtc2VtYXBob3JlX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xdHJhbnNsYXRvcl9wLmggLi4vY29yZWxpYi9rZXJuZWwvcXZhcmlhbnRfcC5oIC4uL2NvcmVsaWIva2VybmVsL3F3aW5ldmVudG5vdGlmaWVyX3AuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xYWJzdHJhY3RhbmltYXRpb25fcC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FhbmltYXRpb25ncm91cF9wLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXBhcmFsbGVsYW5pbWF0aW9uZ3JvdXBfcC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3Fwcm9wZXJ0eWFuaW1hdGlvbl9wLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXNlcXVlbnRpYWxhbmltYXRpb25ncm91cF9wLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXZhcmlhbnRhbmltYXRpb25fcC5oIC4uL2NvcmVsaWIvdG9vbHMvcWJ5dGVkYXRhX3AuaCAuLi9jb3JlbGliL3Rvb2xzL3FkYXRldGltZV9wLmggLi4vY29yZWxpYi90b29scy9xaGFyZmJ1enpfcC5oIC4uL2NvcmVsaWIvdG9vbHMvcWxvY2FsZV9kYXRhX3AuaCAuLi9jb3JlbGliL3Rvb2xzL3Fsb2NhbGVfcC5oIC4uL2NvcmVsaWIvdG9vbHMvcWxvY2FsZV90b29sc19wLmggLi4vY29yZWxpYi90b29scy9xcG9kbGlzdF9wLmggLi4vY29yZWxpYi90b29scy9xcmluZ2J1ZmZlcl9wLmggLi4vY29yZWxpYi90b29scy9xc2NvcGVkcG9pbnRlcl9wLmggLi4vY29yZWxpYi90b29scy9xc2ltZF9wLmggLi4vY29yZWxpYi90b29scy9xdG9vbHNfcC5oIC4uL2NvcmVsaWIvdG9vbHMvcXVuaWNvZGV0YWJsZXNfcC5oIC4uL2NvcmVsaWIvcGx1Z2luL3FlbGZwYXJzZXJfcC5oIC4uL2NvcmVsaWIvcGx1Z2luL3FmYWN0b3J5bG9hZGVyX3AuaCAuLi9jb3JlbGliL3BsdWdpbi9xbGlicmFyeV9wLmggLi4vY29yZWxpYi9wbHVnaW4vcXN5c3RlbWxpYnJhcnlfcC5oIC4uL2NvcmVsaWIveG1sL3F4bWxzdHJlYW1fcC5oIC4uL2NvcmVsaWIveG1sL3F4bWx1dGlsc19wLmggLi4vY29yZWxpYi90aHJlYWQvcW11dGV4X3AuaCAuLi9jb3JlbGliL3RocmVhZC9xbXV0ZXhwb29sX3AuaCAuLi9jb3JlbGliL3RocmVhZC9xb3JkZXJlZG11dGV4bG9ja2VyX3AuaCAuLi9jb3JlbGliL3RocmVhZC9xcmVhZHdyaXRlbG9ja19wLmggLi4vY29yZWxpYi90aHJlYWQvcXRocmVhZF9wLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWFic3RyYWN0c3RhdGVfcC5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FhYnN0cmFjdHRyYW5zaXRpb25fcC5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FldmVudHRyYW5zaXRpb25fcC5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FoaXN0b3J5c3RhdGVfcC5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FzaWduYWxldmVudGdlbmVyYXRvcl9wLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcXNpZ25hbHRyYW5zaXRpb25fcC5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FzdGF0ZV9wLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcXN0YXRlbWFjaGluZV9wLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3FmdXR1cmVpbnRlcmZhY2VfcC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xZnV0dXJld2F0Y2hlcl9wLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0aHJlYWRwb29sX3AuaCAuLi9jb3JlbGliL2lvL3FhYnN0cmFjdGZpbGVlbmdpbmVfcC5oIC4uL2NvcmVsaWIvaW8vcWRhdGFzdHJlYW1fcC5oIC4uL2NvcmVsaWIvaW8vcWRhdGF1cmxfcC5oIC4uL2NvcmVsaWIvaW8vcWRpcl9wLmggLi4vY29yZWxpYi9pby9xZmlsZV9wLmggLi4vY29yZWxpYi9pby9xZmlsZWluZm9fcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW1lbmdpbmVfcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW1lbnRyeV9wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbWl0ZXJhdG9yX3AuaCAuLi9jb3JlbGliL2lvL3FmaWxlc3lzdGVtbWV0YWRhdGFfcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW13YXRjaGVyX2Rub3RpZnlfcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW13YXRjaGVyX2ZzZXZlbnRzX3AuaCAuLi9jb3JlbGliL2lvL3FmaWxlc3lzdGVtd2F0Y2hlcl9pbm90aWZ5X3AuaCAuLi9jb3JlbGliL2lvL3FmaWxlc3lzdGVtd2F0Y2hlcl9rcXVldWVfcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW13YXRjaGVyX3AuaCAuLi9jb3JlbGliL2lvL3FmaWxlc3lzdGVtd2F0Y2hlcl9zeW1iaWFuX3AuaCAuLi9jb3JlbGliL2lvL3FmaWxlc3lzdGVtd2F0Y2hlcl93aW5fcC5oIC4uL2NvcmVsaWIvaW8vcWZzZmlsZWVuZ2luZV9pdGVyYXRvcl9wLmggLi4vY29yZWxpYi9pby9xZnNmaWxlZW5naW5lX3AuaCAuLi9jb3JlbGliL2lvL3Fpb2RldmljZV9wLmggLi4vY29yZWxpYi9pby9xbm9uY29udGlndW91c2J5dGVkZXZpY2VfcC5oIC4uL2NvcmVsaWIvaW8vcXByb2Nlc3NfcC5oIC4uL2NvcmVsaWIvaW8vcXJlc291cmNlX2l0ZXJhdG9yX3AuaCAuLi9jb3JlbGliL2lvL3FyZXNvdXJjZV9wLmggLi4vY29yZWxpYi9pby9xc2V0dGluZ3NfcC5oIC4uL2NvcmVsaWIvaW8vcXRsZHVybF9wLmggLi4vY29yZWxpYi9pby9xdXJsdGxkc19wLmggLi4vY29yZWxpYi9pby9xd2luZG93c3BpcGV3cml0ZXJfcC5oIC4uL2NvcmVsaWIvZ2xvYmFsL3FudW1lcmljX3AuaCAuLi9jb3JlbGliL2dsb2JhbC9xdF9wY2guaCAuLi9jb3JlbGliL2NvZGVjcy9xZm9udGxhb2NvZGVjX3AuaCAuLi9jb3JlbGliL2NvZGVjcy9xaWNvbnZjb2RlY19wLmggLi4vY29yZWxpYi9jb2RlY3MvcWlzY2lpY29kZWNfcC5oIC4uL2NvcmVsaWIvY29kZWNzL3FsYXRpbmNvZGVjX3AuaCAuLi9jb3JlbGliL2NvZGVjcy9xc2ltcGxlY29kZWNfcC5oIC4uL2NvcmVsaWIvY29kZWNzL3F0ZXh0Y29kZWNfcC5oIC4uL2NvcmVsaWIvY29kZWNzL3F0c2NpaWNvZGVjX3AuaCAuLi9jb3JlbGliL2NvZGVjcy9xdXRmY29kZWNfcC5oIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDMzLWNvbmZpZ3VyZS1zdXBwb3J0LWMtMHgtc3RhbmRhcmQtZm9yLWRpcmVjdGZkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDMzLWNvbmZpZ3VyZS1zdXBwb3J0LWMtMHgtc3RhbmRhcmQtZm9yLWRpcmVjdGZkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZmFjZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMzMtY29uZmlndXJlLXN1cHBvcnQtYy0weC1zdGFuZGFyZC1mb3ItZGlyZWN0ZmQucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorY29uZmlndXJlOiBzdXBwb3J0IGMrKzB4IHN0YW5kYXJkIGZvciBkaXJlY3RmZAorCitXaGlsZSBkaXJlY3RmZCB1cGdyYWRlIHRvIDEuNy42LCBpdCBhbHdheXMgaW5jbHVkZXMgZGlyZWN0ZmIrKyB1dGlscword2hlbiBDKysgaXMgdXNlZCBhbmQgc2V0IGMrKzB4IGFzIGMrKyBzdGFuZGFyZC4KKyhJbiBnaXQ6Ly9naXQuZGlyZWN0ZmIub3JnL2dpdC9kaXJlY3RmYi9jb3JlL0RpcmVjdEZCLmdpdAorY29tbWl0IGI0NDRiY2FlMzE5N2JlOWZhZjg4MzQ2MGRjYzIzOWVmNzU3ZDU5MjIsIGFuZCBjb21taXQKKzUyMmJlZWI3NmYyYThkMmRlZTMwZDkyOGQyYTU5NTViZDA2Y2YyNWMpCisKK1RoZSBkaXJlY3RmZCBpbiBxdDQgaXMgYysrLCBhbmQgdGhlcmUgd2FzIGEgYnVpbGQgZmFpbHVyZToKKy4uLgorfCBxZGlyZWN0ZmJ3aW5kb3dzdXJmYWNlLmNwcDozMzY6Njk6IGVycm9yOiBpbiBDKys5OCAncmVjdCcgbXVzdCBiZQoraW5pdGlhbGl6ZWQgYnkgY29uc3RydWN0b3IsIG5vdCBieSAney4uLn0nCit8ICAgICAgY29uc3QgREZCUmVjdGFuZ2xlIHJlY3QgPSB7IHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpIH07CisuLi4KKworVGhlIGcrKyB1c2VkIGMrKzk4IGFzIGRlZmF1bHQgYysrIHN0YW5kYXJkLCB3ZSBzaG91bGQKK2V4cGxpY2l0bHkgc2V0IGMrKzB4IGZvciBkaXJlY3RmZCBpbiBxdDQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggNTcyNGJkNi4uZWNjMmY4YiAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNjY1Niw2ICs2NjU2LDcgQEAgaWYgWyAiJFBMQVRGT1JNX1FXUyIgPSAieWVzIiBdOyB0aGVuCisgICAgICAgIGlmIFsgIiR7c2NyZWVufSIgPSAiZGlyZWN0ZmIiIF0gJiYgWyAiJHtDRkdfQ09ORklHVVJFX0VYSVRfT05fRVJST1J9IiA9ICJ5ZXMiIF07IHRoZW4KKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiAiJFBLR19DT05GSUciIC0tZXhpc3RzIGRpcmVjdGZiIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICAgICAgUVRfQ0ZMQUdTX0RJUkVDVEZCPWAkUEtHX0NPTkZJRyAtLWNmbGFncyBkaXJlY3RmYiAyPi9kZXYvbnVsbGAKKysgICAgICAgICAgICAgICBRVF9DRkxBR1NfRElSRUNURkI9IiRRVF9DRkxBR1NfRElSRUNURkIgLXN0ZD1jKysweCIKKyAgICAgICAgICAgICAgICBRVF9MSUJTX0RJUkVDVEZCPWAkUEtHX0NPTkZJRyAtLWxpYnMgZGlyZWN0ZmIgMj4vZGV2L251bGxgCisgICAgICAgICAgICBlbGlmIGRpcmVjdGZiLWNvbmZpZyAtLXZlcnNpb24gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgICAgICAgICAgUVRfQ0ZMQUdTX0RJUkVDVEZCPWBkaXJlY3RmYi1jb25maWcgLS1jZmxhZ3MgMj4vZGV2L251bGxgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvRml4LVFXU0xvY2staW52YWxpZC1hcmd1bWVudC1sb2dzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9GaXgtUVdTTG9jay1pbnZhbGlkLWFyZ3VtZW50LWxvZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY1ZjAwZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvRml4LVFXU0xvY2staW52YWxpZC1hcmd1bWVudC1sb2dzLnBhdGNoCkBAIC0wLDAgKzEsOTggQEAKK0Zyb20gNTJjMzQwMDFiYWQ4NWMzMDMyNjE4MDcwYjFkNmIyYTNjNjg4MDcxNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5laWwgSmVycmFtIDxuLi4uQG9zc2F1LmhvbWVsaW51eC5uZXQ+CitEYXRlOiBUaHUsIDggTm92IDIwMTIgMDg6MTg6MzIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IFFXU0xvY2sgImludmFsaWQgYXJndW1lbnQiIGxvZ3MKKworVGhlcmUgd2FzIG5vIGtub3duIGFjdHVhbCBwcm9ibGVtIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBsb2dzLCBidXQgdGhleQord2VyZSBzcGFtbWluZyB0aGUgbG9nLCBzbyBJIHRob3VnaHQgaXQgd29ydGggdHJ5aW5nIHRvIHVuZGVyc3RhbmQgYW5kCitmaXggdGhlbS4KKworVGhlIGNvbmZ1c2lvbiBpcyB0aGF0IHRoZXJlIGFyZSB0d28gZGlmZmVyZW50IHdheXMgb2YgY3JlYXRpbmcgUVdTTG9jaworb2JqZWN0cy4gICJRV1NMb2NrKCkiIGNyZWF0ZXMgYW4gb2JqZWN0IHRoYXQgY3JlYXRlcyBhIG5ldyBzZXQgb2YKK3NlbWFwaG9yZXMsIHdoZXJlYXMgIlFXU0xvY2soaWQpIiBjcmVhdGVzIGFuIG9iamVjdCB0aGF0IGFsaWFzZXMgdGhlCitleGlzdGluZyBzZXQgb2Ygc2VtYXBob3JlcyB3aXRoIElEIGlkLiAgV2hhdCBzZWVtcyB0byBoYXBwZW4gaXMgdGhhdAorZWFjaCBhcHBsaWNhdGlvbiBjcmVhdGVzIGEgc2VtYXBob3JlIHNldCBzY29wZWQgdG8gdGhhdAorYXBwbGljYXRpb24gKFFXU0Rpc3BsYXk6OkRhdGE6OmNsaWVudExvY2sgaW4gcWFwcGxpY2F0aW9uX3F3cy5jcHApLAordGhlbiB0aGlzIHNlbWFwaG9yZSBzZXQgaXMgcGFzc2VkIGJ5IGNvbXBsZXggbWVhbnMgdG8KK3BsYWNlcyAoUVdTQ2xpZW50UHJpdmF0ZSBhbmQgUVdTTWVtb3J5U3VyZmFjZSkgdGhhdCB1c2UgdGhlIHNlbWFwaG9yZXMKK2ZvciBhIHNob3J0IHBlcmlvZCBhbmQgdGhlbiBkZWxldGUgdGhlaXIgUVdTTG9jayBvYmplY3RzLgorCitUaGUgcHJvYmxlbSB3YXMgdGhhdCB0aGUgUVdTTG9jayBkZXN0cnVjdG9yIGFsd2F5cyBkZXN0cm95ZWQgdGhlCitzZW1hcGhvcmUgc2V0LCBldmVuIHdoZW4gdGhhdCBRV1NMb2NrIGhhZG4ndCBjcmVhdGUgdGhlIHNlbWFwaG9yZXMKK2l0c2VsZiwgaGVuY2UgbWFraW5nIHRoZSBzZW1hcGhvcmVzIGludmFsaWQgZm9yIG90aGVyIFFXU0xvY2sgb2JqZWN0cworc3RpbGwgcmVmZXJlbmNpbmcgdGhlIHNhbWUgc2V0LgorCitDbGVhcmx5IGEgUVdTTG9jayBvYmplY3Qgc2hvdWxkbid0IGRlc3Ryb3kgdGhlIHNlbWFwaG9yZSBzZXQgaWYgaXQKK2RpZG4ndCBjcmVhdGUgaXQgaXRzZWxmLCBhbmQgdGhhdCBpcyBjb25maXJtZWQgYnkgdGhlIGZhY3QgdGhhdCBvbmUgb2YKK3RoZSBpbXBsZW1lbnRhdGlvbnMgaW5zaWRlIFFXU0xvY2sgYWxyZWFkeSBpbXBsZW1lbnRzIHRoaXMgbG9naWMsIHdpdGgKK3RoZSAnb3duZWQnIGZsYWcuICBUaGUgZml4IGlzIHRvIGltcGxlbWVudCB0aGlzIGZvciB0aGUgI2lmbmRlZgorUVRfUE9TSVhfSVBDIGNhc2UgLSB3aGljaCBpcyB3aGF0IGlzIHVzZWQgaW4gUXRNb2tvIC0ganVzdCBhcyBpcworYWxyZWFkeSBpbXBsZW1lbnRlZCBmb3IgdGhlICNpZmRlZiBRVF9QT1NJWF9JUEMgY2FzZS4KKworT3JpZ2luYWwgcGF0Y2ggY2FuIGJlIGZvdW5kIGhlcmU6CisgaHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL2NvbW11bml0eUBsaXN0cy5vcGVubW9rby5vcmcvbXNnNjU1MTIuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBNaWtlIExvb2lqbWFucyA8bWlrZS5sb29pam1hbnNAdG9waWMubmw+CisgKFJlbW92ZWQgdGhlIGNvbW1lbnRlZC1vdXQgZGVidWcgc3RhdGVtZW50cyBmcm9tIHRoZSBvcmlnaW5hbCBwYXRjaC4pCisKKy0tLQorCitkaWZmIC0tZ2l0IGEvc3JjL2d1aS9lbWJlZGRlZC9xd3Nsb2NrLmNwcCBiL3NyYy9ndWkvZW1iZWRkZWQvcXdzbG9jay5jcHAKK2luZGV4IDk5MTRhMjQuLjEwNTU3ODUgMTAwNjQ0CistLS0gYS9zcmMvZ3VpL2VtYmVkZGVkL3F3c2xvY2suY3BwCisrKysgYi9zcmMvZ3VpL2VtYmVkZGVkL3F3c2xvY2suY3BwCitAQCAtODMsOSArODMsMTIgQEAgUVdTTG9jazo6UVdTTG9jayhpbnQgaWQpIDogc2VtSWQoaWQpCisgICAgIFFXU1NpZ25hbEhhbmRsZXI6Omluc3RhbmNlKCktPmFkZFdTTG9jayh0aGlzKTsKKyAjZW5kaWYKKyAKKysgICAgb3duZWQgPSBmYWxzZTsKKysKKyAjaWZuZGVmIFFUX1BPU0lYX0lQQworICAgICBpZiAoc2VtSWQgPT0gLTEpIHsKKyAgICAgICAgIHNlbUlkID0gc2VtZ2V0KElQQ19QUklWQVRFLCAzLCBJUENfQ1JFQVQgfCAwNjY2KTsKKysgICAgICAgIG93bmVkID0gdHJ1ZTsKKyAgICAgICAgIGlmIChzZW1JZCA9PSAtMSkgeworICAgICAgICAgICAgIHBlcnJvcigiUVdTTG9jazo6UVdTTG9jayIpOworICAgICAgICAgICAgIHFGYXRhbCgiVW5hYmxlIHRvIGNyZWF0ZSBzZW1hcGhvcmUiKTsKK0BAIC0xMDAsNyArMTA0LDYgQEAgUVdTTG9jazo6UVdTTG9jayhpbnQgaWQpIDogc2VtSWQoaWQpCisgICAgIH0KKyAjZWxzZQorICAgICBzZW1zWzBdID0gc2Vtc1sxXSA9IHNlbXNbMl0gPSBTRU1fRkFJTEVEOworLSAgICBvd25lZCA9IGZhbHNlOworIAorICAgICBpZiAoc2VtSWQgPT0gLTEpIHsKKyAgICAgICAgIC8vICMjIyBnZW5lcmF0ZSByZWFsbHkgdW5pcXVlIElEcworQEAgLTEzNCw5ICsxMzcsMTEgQEAgUVdTTG9jazo6flFXU0xvY2soKQorIAorICAgICBpZiAoc2VtSWQgIT0gLTEpIHsKKyAjaWZuZGVmIFFUX1BPU0lYX0lQQworLSAgICAgICAgcXRfc2VtdW4gc2VtdmFsOworLSAgICAgICAgc2VtdmFsLnZhbCA9IDA7CistICAgICAgICBzZW1jdGwoc2VtSWQsIDAsIElQQ19STUlELCBzZW12YWwpOworKwlpZiAob3duZWQpIHsKKysJICAgIHF0X3NlbXVuIHNlbXZhbDsKKysJICAgIHNlbXZhbC52YWwgPSAwOworKwkgICAgc2VtY3RsKHNlbUlkLCAwLCBJUENfUk1JRCwgc2VtdmFsKTsKKysJfQorICAgICAgICAgc2VtSWQgPSAtMTsKKyAjZWxzZQorICAgICAgICAgLy8gZW11bGF0ZSB0aGUgU0VNX1VORE8gYmVoYXZpb3IgZm9yIHRoZSBCYWNraW5nU3RvcmUgbG9jaworZGlmZiAtLWdpdCBhL3NyYy9ndWkvZW1iZWRkZWQvcXdzbG9ja19wLmggYi9zcmMvZ3VpL2VtYmVkZGVkL3F3c2xvY2tfcC5oCitpbmRleCBkMzI0ZTRmLi5kODY3ZDIwIDEwMDY0NAorLS0tIGEvc3JjL2d1aS9lbWJlZGRlZC9xd3Nsb2NrX3AuaAorKysrIGIvc3JjL2d1aS9lbWJlZGRlZC9xd3Nsb2NrX3AuaAorQEAgLTg2LDggKzg2LDggQEAgcHJpdmF0ZToKKyAgICAgaW50IGxvY2tDb3VudFsyXTsKKyAjaWZkZWYgUVRfUE9TSVhfSVBDCisgICAgIHNlbV90ICpzZW1zWzNdOworLSAgICBib29sIG93bmVkOworICNlbmRpZgorKyAgICBib29sIG93bmVkOworIH07CisgCisgUVRfRU5EX05BTUVTUEFDRQorIAorLS0gCisxLjcuMTAuNApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9hZGRfY2hlY2tfZm9yX2FhcmNoNjRfMzIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L2FkZF9jaGVja19mb3JfYWFyY2g2NF8zMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDUxMDNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9hZGRfY2hlY2tfZm9yX2FhcmNoNjRfMzIucGF0Y2gKQEAgLTAsMCArMSw1NSBAQAorQXV0aG9yOiBLcmlzaG5hbmphbmFwcGEsIEphZ2FkZWVzaCA8amFnYWRlZXNoLmtyaXNobmFuamFuYXBwYUBjYXZpdW1uZXR3b3Jrcy5jb20+CitEYXRlOiAgIFN1biBBcHIgMTIgMTk6Mjc6MTAgMjAxNSArMDUzMAorCitbUEFUQ0hdIGFkZCBjaGVja2luZyBmb3IgQUFyY2g2NCBpbHAzMgorCitDcm9zcy1jb21waWxpbmcgcXQ0LWVtYmVkZGVkIGFuZCBxdDQteDExLWZyZWUgYXBwbGljYXRpb25zIGZvciBBQXJjaDY0IGlscDMyCisoYm90aCBiaWcgYW5kIGxpdHRsZSBlbmRpYW4pIGZhaWxzIHdpdGggYmVsb3cgZXJyb3IsCisKKyhzbmlwKQorSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC4uLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmg6MzE6MCwKKyAgICAgICAgICAgICAgICAgZnJvbSAuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oOjMyLAorICAgICAgICAgICAgICAgICBmcm9tIC4uLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oOjI2LAorICAgICAgICAgICAgICAgICBmcm9tIC4uLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmg6MjYsCisgICAgICAgICAgICAgICAgIGZyb20gLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oOjI3LAorICAgICAgICAgICAgICAgICBmcm9tIC4uLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuaDozMCwKKyAgICAgICAgICAgICAgICAgZnJvbSAuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmNwcDoyNzoKKy4uLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL3d0Zi9TdGRMaWJFeHRyYXMuaDogSW4gaW5zdGFudGlhdGlvbiBvZiAnVE8gUVRXVEY6OmJpdHdpc2VfY2FzdChGUk9NKSBbdworLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbWVkaWF0ZS5oOjUyOjQ5OiByZXF1aXJlZCBmcm9tIGhlcmUKKy4uLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL3d0Zi9TdGRMaWJFeHRyYXMuaDo2MzoxOiBlcnJvcjogc2l6ZSBvZiBhcnJheSBpcyBuZWdhdGl2ZQorLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvd3RmL1N0ZExpYkV4dHJhcy5oOiBJbiBpbnN0YW50aWF0aW9uIG9mICdUTyBRVFdURjo6Yml0d2lzZV9jYXN0KEZST00pIFt3CisuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tZWRpYXRlLmg6NTc6NDc6IHJlcXVpcmVkIGZyb20gaGVyZQorLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvd3RmL1N0ZExpYkV4dHJhcy5oOjYzOjE6IGVycm9yOiBzaXplIG9mIGFycmF5IGlzIG5lZ2F0aXZlCittYWtlWzFdOiAqKiogW29iai9yZWxlYXNlL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5vXSBFcnJvciAxCistLSBDVVQgLS0KKwordGhlIGVycm9yIGlzIGJlY2F1c2Ugb2YgSlNWQUxVRTY0IGlzIGJlaW5nIGRlZmluZWQgd2hpbGUgY29tcGlsaW5nIHByb2dyYW1zCitmb3IgQUFyY2g2NCBpbHAzMi4gVGhpcyBtYWtlcyBlcXVhbCBjb25kaXRpb24gY2hlY2tpbmcgb2YgaW50cHRyX3QgYW5kIGRvdWJsZQorZGF0YXR5cGVzIGFzIGZhbHNlLCBhbmQgcmVzdWx0cyBpbiAtMSAobmVnYXRpdmUpIGFzIGFycmF5IHNpemUgaW4gYml0d2lzZV9jYXN0CitmdW5jdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtyaXNobmFuamFuYXBwYSwgSmFnYWRlZXNoIDxqYWdhZGVlc2gua3Jpc2huYW5qYW5hcHBhQGNhdml1bW5ldHdvcmtzLmNvbT4KKworLS0tIGEvc3JjLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCTIwMTQtMDQtMTEgMDA6MDc6MTIuMDAwMDAwMDAwICswNTMwCisrKysgYi9zcmMvM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJMjAxNS0wNC0xMCAyMjoxOTo1MS4wNjYyNzk0MjYgKzA1MzAKK0BAIC0yMTQsNiArMjE0LDkgQEAKKyAjZGVmaW5lIFdURl9DUFVfQUFSQ0g2NCAxCisgI2lmIGRlZmluZWQoX19BQVJDSDY0RUJfXykKKyAjZGVmaW5lIFdURl9DUFVfQklHX0VORElBTiAxCisrI2lmICFkZWZpbmVkKF9fTFA2NF9fKQorKyNkZWZpbmUgV1RGX0NQVV9BQVJDSDY0XzMyIDEKKysjZW5kaWYKKyAjZW5kaWYKKyAjZW5kaWYKKyAKK0BAIC05MDMsNyArOTA2LDcgQEAKKyAjZW5kaWYKKyAKKyAjaWYgIWRlZmluZWQoV1RGX1VTRV9KU1ZBTFVFNjQpICYmICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTMyKSAmJiAhZGVmaW5lZChXVEZfVVNFX0pTVkFMVUUzMl82NCkKKy0jaWYgKENQVShYODZfNjQpICYmIChPUyhVTklYKSB8fCBPUyhXSU5ET1dTKSB8fCBPUyhTT0xBUklTKSB8fCBPUyhIUFVYKSkpIHx8IChDUFUoSUE2NCkgJiYgIUNQVShJQTY0XzMyKSkgfHwgQ1BVKEFMUEhBKSB8fCBDUFUoQUlYNjQpIHx8IENQVShTUEFSQzY0KSB8fCBDUFUoTUlQUzY0KSB8fCBDUFUoQUFSQ0g2NCkKKysjaWYgKENQVShYODZfNjQpICYmIChPUyhVTklYKSB8fCBPUyhXSU5ET1dTKSB8fCBPUyhTT0xBUklTKSB8fCBPUyhIUFVYKSkpIHx8IChDUFUoSUE2NCkgJiYgIUNQVShJQTY0XzMyKSkgfHwgQ1BVKEFMUEhBKSB8fCBDUFUoQUlYNjQpIHx8IENQVShTUEFSQzY0KSB8fCBDUFUoTUlQUzY0KSB8fCAoQ1BVKEFBUkNINjQpICYmICFDUFUoQUFSQ0g2NF8zMikpCisgI2RlZmluZSBXVEZfVVNFX0pTVkFMVUU2NCAxCisgI2VsaWYgQ1BVKEFSTSkgfHwgQ1BVKFBQQzY0KQorICNkZWZpbmUgV1RGX1VTRV9KU1ZBTFVFMzIgMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9nKysuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvZysrLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU3OGMyNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvZysrLmNvbmYKQEAgLTAsMCArMSw0MCBAQAorIworIyBxbWFrZSBjb25maWd1cmF0aW9uIGZvciBjb21tb24gZ2NjCisjCisKK1FNQUtFX0NPTVBJTEVSID0gZ2NjCisKK1FNQUtFX0NDICAgICAgID0gJChPRV9RTUFLRV9DQykKK1FNQUtFX0NGTEFHUyAgICAgICArPSAkKE9FX1FNQUtFX0NGTEFHUykKK1FNQUtFX0NGTEFHU19SRUxFQVNFX1dJVEhfREVCVUdJTkZPICs9ICQoT0VfUU1BS0VfQ0ZMQUdTKQorUU1BS0VfQ0ZMQUdTX1BSRUNPTVBJTEUgKz0gLXggYy1oZWFkZXIgLWMgJHtRTUFLRV9QQ0hfSU5QVVR9IC1vICR7UU1BS0VfUENIX09VVFBVVH0KK1FNQUtFX0NGTEFHU19VU0VfUFJFQ09NUElMRSArPSAtaW5jbHVkZSAke1FNQUtFX1BDSF9PVVRQVVRfQkFTRX0KKworUU1BS0VfQ1hYICAgICAgPSAkKE9FX1FNQUtFX0NYWCkKK1FNQUtFX0NYWEZMQUdTICAgICArPSAkKE9FX1FNQUtFX0NYWEZMQUdTKQorUU1BS0VfQ1hYRkxBR1NfUkVMRUFTRV9XSVRIX0RFQlVHSU5GTyArPSAkJFFNQUtFX0NGTEFHU19SRUxFQVNFX1dJVEhfREVCVUdJTkZPCitRTUFLRV9DWFhGTEFHU19QUkVDT01QSUxFICs9IC14IGMrKy1oZWFkZXIgLWMgJHtRTUFLRV9QQ0hfSU5QVVR9IC1vICR7UU1BS0VfUENIX09VVFBVVH0KK1FNQUtFX0NYWEZMQUdTX1VTRV9QUkVDT01QSUxFID0gJCRRTUFLRV9DRkxBR1NfVVNFX1BSRUNPTVBJTEUKKworUU1BS0VfTElOSyAgICAgPSAkKE9FX1FNQUtFX0xJTkspCitRTUFLRV9MSU5LX1NITElCICAgPSAkKE9FX1FNQUtFX0xJTkspCitRTUFLRV9MSU5LX0MJCT0gJChPRV9RTUFLRV9MSU5LKQorUU1BS0VfTElOS19DX1NITElCCT0gJChPRV9RTUFLRV9MSU5LKQorUU1BS0VfTEZMQUdTICAgICAgICs9ICQoT0VfUU1BS0VfTERGTEFHUykKK1FNQUtFX0xGTEFHU19OT1VOREVGCSs9IC1XbCwtLW5vLXVuZGVmaW5lZAorUU1BS0VfTEZMQUdTX1JQQVRIICAgICAgICA9IC1XbCwtcnBhdGgtbGluaywKKworUU1BS0VfUENIX09VVFBVVF9FWFQgICAgPSAuZ2NoCisKKyMgLUJzeW1ib2xpYy1mdW5jdGlvbnMgKGxkKSBzdXBwb3J0CitRTUFLRV9MRkxBR1NfQlNZTUJPTElDX0ZVTkMgPSAtV2wsLUJzeW1ib2xpYy1mdW5jdGlvbnMKK1FNQUtFX0xGTEFHU19EWU5BTUlDX0xJU1QgPSAtV2wsLS1keW5hbWljLWxpc3QsCisKKyMgZG8gbm90IGRlcGVuZCBvbiBnZGIKK0NPTkZJRyAtPSBnZGJfZHdhcmZfaW5kZXgKKworIyBzb21lIGxpbmtpbmcgaGVscGVyLi4uCitDT05GSUcgKz0gcnBhdGhfbGliZGlycworCisjIGZvciB0aGUgU0RLCitpc0VtcHR5KFFNQUtFX1FUX0NPTkZJRyk6UU1BS0VfUVRfQ09ORklHID0gJChPRV9RTUFLRV9RVF9DT05GSUcpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L2xpbnV4LmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L2xpbnV4LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY3MDM4MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvbGludXguY29uZgpAQCAtMCwwICsxLDY2IEBACisjCisjIHFtYWtlIGNvbmZpZ3VyYXRpb24gZm9yIGNvbW1vbiBsaW51eAorIworCitRTUFLRV9DRkxBR1NfVEhSRUFECSs9IC1EX1JFRU5UUkFOVAorUU1BS0VfQ1hYRkxBR1NfVEhSRUFECSs9ICQkUU1BS0VfQ0ZMQUdTX1RIUkVBRAorCitRTUFLRV9JTkNESVIgICAgICAgICAgPQorUU1BS0VfTElCRElSICAgICAgICAgID0KK1FNQUtFX0lOQ0RJUl9YMTEgICAgICA9CitRTUFLRV9MSUJESVJfWDExICAgICAgPQorUU1BS0VfSU5DRElSX1FUICAgICAgID0gJChPRV9RTUFLRV9JTkNESVJfUVQpCitRTUFLRV9MSUJESVJfUVQgICAgICAgPSAkKE9FX1FNQUtFX0xJQkRJUl9RVCkKK1FNQUtFX0lOQ0RJUl9PUEVOR0wgICA9CitRTUFLRV9MSUJESVJfT1BFTkdMICAgPQorUU1BS0VfSU5DRElSX09QRU5HTF9FUzEgPSAkJFFNQUtFX0lOQ0RJUl9PUEVOR0wKK1FNQUtFX0xJQkRJUl9PUEVOR0xfRVMxID0gJCRRTUFLRV9MSUJESVJfT1BFTkdMCitRTUFLRV9JTkNESVJfT1BFTkdMX0VTMiA9ICQkUU1BS0VfSU5DRElSX09QRU5HTAorUU1BS0VfTElCRElSX09QRU5HTF9FUzIgPSAkJFFNQUtFX0xJQkRJUl9PUEVOR0wKK1FNQUtFX0lOQ0RJUl9FR0wgICAgICA9CitRTUFLRV9MSUJESVJfRUdMICAgICAgPQorUU1BS0VfSU5DRElSX09QRU5WRyAgID0KK1FNQUtFX0xJQkRJUl9PUEVOVkcgICA9CisKKworUU1BS0VfTElCUyAgICAgICAgICAgID0KK1FNQUtFX0xJQlNfRFlOTE9BRCAgICA9IC1sZGwKK1FNQUtFX0xJQlNfWDExICAgICAgICA9ICQoT0VfUU1BS0VfTElCU19YMTEpCitRTUFLRV9MSUJTX1gxMVNNICAgICAgPSAkKE9FX1FNQUtFX0xJQlNfWDExU00pCitRTUFLRV9MSUJTX05JUyAgICAgICAgPSAtbG5zbAorUU1BS0VfTElCU19FR0wgICAgICAgID0gLWxFR0wKK1FNQUtFX0xJQlNfT1BFTkdMICAgICA9IC1sR0wKK1FNQUtFX0xJQlNfT1BFTkdMX1FUICA9IC1sR0wKK1FNQUtFX0xJQlNfT1BFTkdMX0VTMSA9IC1sR0xFU19DTQorUU1BS0VfTElCU19PUEVOR0xfRVMyID0gLWxHTEVTdjIKK1FNQUtFX0xJQlNfT1BFTlZHICAgICA9IC1sT3BlblZHCitRTUFLRV9MSUJTX1RIUkVBRCAgICAgPSAtbHB0aHJlYWQKKworUU1BS0VfTU9DICAgICAgICAgICAgID0gJChPRV9RTUFLRV9NT0MpCitRTUFLRV9VSUMgICAgICAgICAgICAgPSAkKE9FX1FNQUtFX1VJQykKK1FNQUtFX1VJQzMgICAgICAgICAgICA9ICQoT0VfUU1BS0VfVUlDMykKK1FNQUtFX1JDQyAgICAgICAgICAgICA9ICQoT0VfUU1BS0VfUkNDKQorUU1BS0VfUURCVVNDUFAyWE1MICAgID0gJChPRV9RTUFLRV9RREJVU0NQUDJYTUwpCitRTUFLRV9RREJVU1hNTDJDUFAgICAgPSAkKE9FX1FNQUtFX1FEQlVTWE1MMkNQUCkKKworUU1BS0VfQVIgICAgICAgICAgICAgID0gJChPRV9RTUFLRV9BUikgY3FzCitRTUFLRV9PQkpDT1BZICAgICAgICAgPSBvYmpjb3B5CitRTUFLRV9SQU5MSUIgICAgICAgICAgPQorCitRTUFLRV9UQVIgICAgICAgICAgICAgPSB0YXIgLWNmCitRTUFLRV9HWklQICAgICAgICAgICAgPSBnemlwIC05ZgorCitRTUFLRV9DT1BZICAgICAgICAgICAgPSBjcCAtZgorUU1BS0VfQ09QWV9GSUxFICAgICAgID0gJChDT1BZKQorUU1BS0VfQ09QWV9ESVIgICAgICAgID0gJChDT1BZKSAtcgorUU1BS0VfTU9WRSAgICAgICAgICAgID0gbXYgLWYKK1FNQUtFX0RFTF9GSUxFICAgICAgICA9IHJtIC1mCitRTUFLRV9ERUxfRElSICAgICAgICAgPSBybWRpcgorUU1BS0VfU1RSSVAgICAgICAgICAgID0gJChPRV9RTUFLRV9TVFJJUCkKK1FNQUtFX1NUUklQRkxBR1NfTElCICs9IC0tc3RyaXAtdW5uZWVkZWQKK1FNQUtFX0NIS19ESVJfRVhJU1RTICA9IHRlc3QgLWQKK1FNQUtFX01LRElSICAgICAgICAgICA9IG1rZGlyIC1wCitRTUFLRV9JTlNUQUxMX0ZJTEUgICAgPSBpbnN0YWxsIC1tIDY0NCAtcAorUU1BS0VfSU5TVEFMTF9QUk9HUkFNID0gaW5zdGFsbCAtbSA3NTUgLXAKKworaW5jbHVkZSh1bml4LmNvbmYpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L3F0ZS5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvcXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZDZlY2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L3F0ZS5zaApAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9zaAorCitpZiBbIC1lIC9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wIF0KK3RoZW4KKyAgICBRV1NfTU9VU0VfUFJPVE89VHNsaWI6L2Rldi9pbnB1dC90b3VjaHNjcmVlbjAKKyAgICBleHBvcnQgUVdTX01PVVNFX1BST1RPCitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC1lbWJlZGRlZC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LWVtYmVkZGVkLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzY5MDY1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC1lbWJlZGRlZC5pbmMKQEAgLTAsMCArMSw3NCBAQAorU1VNTUFSWSA9ICJDcm9zcy1wbGF0Zm9ybSBVSSB0b29sa2l0IGFuZCBhcHBsaWNhdGlvbiBmcmFtZXdvcmsgKGZyYW1lYnVmZmVyIHZlcnNpb24pIgorREVTQ1JJUFRJT04gPSAiUXQgaXMgYSB2ZXJzYXRpbGUgY3Jvc3MtcGxhdGZvcm0gYXBwbGljYXRpb24gZnJhbWV3b3JrIC0tIHRoaXMgaXMgdGhlIGVtYmVkZGVkIChmcmFtZWJ1ZmZlcikgdmVyc2lvbi4iCitTRUNUSU9OID0gImxpYnMiCitIT01FUEFHRSA9ICJodHRwOi8vcXQtcHJvamVjdC5vcmcvIgorREVQRU5EUyArPSAiZGlyZWN0ZmIgdHNsaWIiCisKK1FUNEVERVBFTkRTID0gIiIKK1FUX0JBU0VfTElCICA/PSAibGlicXQtZW1iZWRkZWQiCisKKyMgU2V0IG5lY2Vzc2FyeSB2YXJpYWJsZXMgaW4gdGhlIHByb2ZpbGUKK1NSQ19VUkkgKz0gImZpbGU6Ly9xdGUuc2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMzMtY29uZmlndXJlLXN1cHBvcnQtYy0weC1zdGFuZGFyZC1mb3ItZGlyZWN0ZmQucGF0Y2ggXAorIgorCitRVF9FTUJFRERFRF9GTEFHUyA/PSAiIFwKKyAgICAtZW1iZWRkZWQgJFFUX0FSQ0ggXAorICAgIC1xdGxpYmluZml4ICR7UVRfTElCSU5GSVh9IFwKKyIKK1FUX0VNQkVEREVEX0VYVFJBX0ZMQUdTID89ICIgXAorICAgIC1wbHVnaW4tZ2Z4LXRyYW5zZm9ybWVkIC1wbHVnaW4tZ2Z4LXF2ZmIgLXBsdWdpbi1nZngtdm5jIC1wbHVnaW4tZ2Z4LWRpcmVjdGZiIFwKKyAgICAtcGx1Z2luLW1vdXNlLXRzbGliIC1xdC1tb3VzZS1wYyAtcXQtbW91c2UtcXZmYiAtcXQtbW91c2UtbGludXhpbnB1dCBcCisgICAgLXF0LWtiZC10dHkgLXF0LWtiZC1saW51eGlucHV0IFwKKyIKK1FUX0VNQkVEREVEX0tFWVBBRF9GTEFHUyA/PSAiIFwKKyAgICAtRFFUX0tFWVBBRF9OQVZJR0FUSU9OIFwKKyIKKworUVRfQ09ORklHX0ZMQUdTICs9ICIke1FUX0VNQkVEREVEX0ZMQUdTfSAke1FUX0VNQkVEREVEX0VYVFJBX0ZMQUdTfSAke1FUX0VNQkVEREVEX0tFWVBBRF9GTEFHU30iCisKK3JlcXVpcmUgcXQ0LmluYworCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0vJHtsaWJkaXJ9L2ZvbnRzCisgICAgdG91Y2ggJHtEfS8ke2xpYmRpcn0vZm9udHMvZm9udGRpcgorCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9wcm9maWxlLmQvCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcXRlLnNoICR7RH0ke3N5c2NvbmZkaXJ9L3Byb2ZpbGUuZC8KK30KKworIyBXZSBwdXQgdGhlIHF0ZSBwcm9maWxlIGludG8gaXQncyBvd24gcGFja2FnZSBhcyB3ZSBkb24ndCB3YW50IHRvIGluc3RhbGwgYWxsIHF0IHN0dWZmCisjIHdpdGggZGVwZW5kaW5nIG9uIHRoZSBnbG9iYWwgcGFja2FnZSBxdDQtZW1iZWRkZWQKK1BBQ0tBR0VTICs9ICIgJHtQTn0tY29uZiIKK0ZJTEVTXyR7UE59LWNvbmYgKz0gIiAke3N5c2NvbmZkaXJ9L3Byb2ZpbGUuZC9xdGUuc2giCitSUkVDT01NRU5EU18ke1BOfSArPSAiICR7UE59LWNvbmYiCisKK09USEVSX1BBQ0tBR0VTICs9ICJcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWZvbnRzIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZm9udHMtdHRmLXZlcmEgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy10dGYtZGVqYXZ1IFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZm9udHMtcGZhIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZm9udHMtcGZiIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZm9udHMtcXBmIgorCitSUkVDT01NRU5EU18ke1FUX0JBU0VfTkFNRX0tZm9udHMgPSAiIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZm9udHMtdHRmLXZlcmEgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy10dGYtZGVqYXZ1IFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZm9udHMtcGZhIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZm9udHMtcGZiIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZm9udHMtcXBmIgorUlJFQ09NTUVORFNfJHtRVF9CQVNFX05BTUV9LWRlbW9zICs9ICIgXAorICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWZvbnRzIgorCitBTExPV19FTVBUWV8ke1FUX0JBU0VfTkFNRX0tZm9udHMgPSAiMSIKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl4ke1FUX0JBU0VfTkFNRX0tZm9udHMtLioiCisKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1mb250cy10dGYtdmVyYSAgICAgICA9ICIke2xpYmRpcn0vZm9udHMvVmVyYSoudHRmIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWZvbnRzLXR0Zi1kZWphdnUgICAgID0gIiR7bGliZGlyfS9mb250cy9EZWphVnUqLnR0ZiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1mb250cy1wZmEgICAgICAgICAgICA9ICIke2xpYmRpcn0vZm9udHMvKi5wZmEiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZm9udHMtcGZiICAgICAgICAgICAgPSAiJHtsaWJkaXJ9L2ZvbnRzLyoucGZiIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWZvbnRzLXFwZiAgICAgICAgICAgID0gIiR7bGliZGlyfS9mb250cy8qLnFwZioiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZm9udHMgICAgICAgICAgICAgICAgPSAiJHtsaWJkaXJ9L2ZvbnRzL1JFQURNRSAke2xpYmRpcn0vZm9udHMvZm9udGRpciIKKworaW5oZXJpdCBxdDRlCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtZW1iZWRkZWRfNC44LjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LWVtYmVkZGVkXzQuOC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MzVkODUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LWVtYmVkZGVkXzQuOC43LmJiCkBAIC0wLDAgKzEsOSBAQAorcmVxdWlyZSBxdDQtJHtQVn0uaW5jCityZXF1aXJlIHF0NC1lbWJlZGRlZC5pbmMKKworUVRfQ09ORklHX0ZMQUdTX2FwcGVuZF9hcm0gPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibmVvbiIsICIiLCAiIC1uby1uZW9uIiAsZCl9IgorCitRVF9DT05GSUdfRkxBR1MgKz0gIiBcCisgLWV4Y2VwdGlvbnMgXAorIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LW5hdGl2ZS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LW5hdGl2ZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE0MWY4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtbmF0aXZlLmluYwpAQCAtMCwwICsxLDExMiBAQAorU1VNTUFSWSA9ICJRdCB2ZXJzaW9uIDQgdG9vbHMgYW5kIHN1cHBvcnQgZmlsZXMgZm9yIHRoZSBidWlsZCBob3N0IgorREVQRU5EUyA9ICJ6bGliLW5hdGl2ZSBkYnVzLW5hdGl2ZSIKK1NFQ1RJT04gPSAibGlicyIKK0hPTUVQQUdFID0gImh0dHA6Ly9xdC1wcm9qZWN0Lm9yZy8iCitQUk9WSURFUyA9ICJxdDQtdG9vbHMtbmF0aXZlIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xIHwgR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLkxHUEw7bWQ1PWZiYzA5MzkwMTg1N2ZjZDExOGYwNjVmOTAwOTgyYzI0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0xJQ0VOU0UuR1BMMzttZDU9NmUxNjk0ZWUzMzhkYjQxMDQxNzUxNzg4NDkxOGQ0ZDIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTEdQTF9FWENFUFRJT04udHh0O21kNT0wMTQ1YzRkMWI2Zjk2YTY2MWMyYzEzOWRmYjI2OGZiNiIKKworaW5oZXJpdCBuYXRpdmUKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQucXQtcHJvamVjdC5vcmcvb2ZmaWNpYWxfcmVsZWFzZXMvcXQvNC44LyR7UFZ9L3F0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcWxpYnJhcnlpbmZvLWFsbG93LXRvLXNldC1xdC5jb25mLWZyb20tdGhlLW91dHNpZGUtdS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLXFrYmR0dHlfcXdzLWZpeC1idWlsZC13aXRoLW9sZC1rZXJuZWwtaGVhZGVycy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLXdlYmtpdDItc2V0LU9VVFBVVF9ESVItdmFsdWUtaWYtZW1wdHkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMS1jb25maWd1cmUtbWFrZS1xdDQtbmF0aXZlLXdvcmstd2l0aC1sb25nLWJ1aWxkaW5nLXBhLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2crKy5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL2xpbnV4LmNvbmYgXAorCSIKK1MgPSAiJHtXT1JLRElSfS9xdC1ldmVyeXdoZXJlLW9wZW5zb3VyY2Utc3JjLSR7UFZ9IgorCitFWFRSQV9PRUNPTkYgPSAiLXByZWZpeCAke3ByZWZpeH0gXAorICAgICAgICAgICAgICAgIC1iaW5kaXIgJHtiaW5kaXJ9IFwKKyAgICAgICAgICAgICAgICAtbGliZGlyICR7bGliZGlyfSBcCisgICAgICAgICAgICAgICAgLWRhdGFkaXIgJHtkYXRhZGlyfS9xdDQgXAorICAgICAgICAgICAgICAgIC1zeXNjb25mZGlyICR7c3lzY29uZmRpcn0vcXQ0IFwKKyAgICAgICAgICAgICAgICAtZG9jZGlyICR7ZG9jZGlyfS9xdDQgXAorICAgICAgICAgICAgICAgIC1oZWFkZXJkaXIgJHtpbmNsdWRlZGlyfS9xdDQgXAorICAgICAgICAgICAgICAgIC1wbHVnaW5kaXIgJHtsaWJkaXJ9L3F0NC9wbHVnaW5zIFwKKyAgICAgICAgICAgICAgICAtaW1wb3J0ZGlyICR7bGliZGlyfS9xdDQvaW1wb3J0cyBcCisgICAgICAgICAgICAgICAgLXRyYW5zbGF0aW9uZGlyICR7ZGF0YWRpcn0vcXQ0L3RyYW5zbGF0aW9ucyBcCisgICAgICAgICAgICAgICAgLWV4YW1wbGVzZGlyICR7YmluZGlyfS9xdDQvZXhhbXBsZXMgXAorICAgICAgICAgICAgICAgIC1kZW1vc2RpciAke2JpbmRpcn0vcXQ0L2RlbW9zIFwKKyAgICAgICAgICAgICAgICAtTCAke1NUQUdJTkdfTElCRElSX05BVElWRX0gXAorICAgICAgICAgICAgICAgIC1JICR7U1RBR0lOR19JTkNESVJfTkFUSVZFfSBcCisgICAgICAgICAgICAgICAgLXF0LWxpYmpwZWcgLXN5c3RlbS16bGliIFwKKyAgICAgICAgICAgICAgICAtbm8tbGlianBlZyAtbm8tbGlicG5nIC1uby1saWJtbmcgLW5vLWxpYnRpZmYgXAorICAgICAgICAgICAgICAgIC1uby1hY2Nlc3NpYmlsaXR5IFwKKyAgICAgICAgICAgICAgICAtbm8tY3VwcyBcCisgICAgICAgICAgICAgICAgLW5vLW5hcy1zb3VuZCBcCisgICAgICAgICAgICAgICAgLW5vLW5pcyAtbm8tb3BlbnNzbCBcCisgICAgICAgICAgICAgICAgLXZlcmJvc2UgLXJlbGVhc2UgXAorICAgICAgICAgICAgICAgIC1lbWJlZGRlZCAtbm8tZnJlZXR5cGUgLW5vLWdsaWIgLW5vLWljb252IFwKKyAgICAgICAgICAgICAgICAtZXhjZXB0aW9ucyAteG1scGF0dGVybnMgXAorICAgICAgICAgICAgICAgIC1xdDNzdXBwb3J0IFwKKyAgICAgICAgICAgICAgICAtbm8tZmFzdCAtc2lsZW50IC1uby1ycGF0aCIKKworIyB5YW5rIGRlZmF1bHQgLWUsIG90aGVyd2lzZSB3ZSBnZXQgdGhlIGZvbGxvd2luZyBlcnJvcjoKKyMgbW9jX3FidWZmZXIuY3BwOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CitFWFRSQV9PRU1BS0UgPSAiICIKKworZG9fY29uZmlndXJlKCkgeworCSMgQXZvaWQgcHJvYmxlbXMgd2l0aCBRdCA0LjguMCBjb25maWd1cmUgc2V0dGluZyBRTUFLRV9MSU5LIGZyb20gTEQgKHNpbmNlIHdlIHdhbnQgdGhlIGxpbmtlciB0byBiZSBnKyspCisJdW5zZXQgTEQKKworCShlY2hvIG87IGVjaG8geWVzKSB8IC4vY29uZmlndXJlICR7RVhUUkFfT0VDT05GfSB8fCBkaWUgIkNvbmZpZ3VyaW5nIHF0IGZhaWxlZC4gRVhUUkFfT0VDT05GIHdhcyAke0VYVFJBX09FQ09ORn0iCit9CisKK1RPQlVJTEQgPSAiXAorICBzcmMvdG9vbHMvbW9jIFwKKyAgc3JjL2NvcmVsaWIgXAorICBzcmMvc3FsIFwKKyAgc3JjL3htbCBcCisgIHNyYy9uZXR3b3JrIFwKKyAgc3JjL3Rvb2xzL3VpYyBcCisgIHNyYy90b29scy9yY2MgXAorICBzcmMveG1scGF0dGVybnMgXAorICBzcmMvZGJ1cyBcCisgIHNyYy9ndWkgXAorICBzcmMvdGVzdGxpYiBcCisgIHNyYy9xdDNzdXBwb3J0IFwKKyAgc3JjL3Rvb2xzL3VpYzMgXAorICB0b29scy9saW5ndWlzdC9sY29udmVydCBcCisgIHRvb2xzL2xpbmd1aXN0L2xyZWxlYXNlIFwKKyAgdG9vbHMvbGluZ3Vpc3QvbHVwZGF0ZSBcCisgIHRvb2xzL3FkYnVzL3FkYnVzY3BwMnhtbCBcCisgIHRvb2xzL3FkYnVzL3FkYnVzeG1sMmNwcCBcCisgIHRvb2xzL3htbHBhdHRlcm5zIFwKKyIKKworZG9fY29tcGlsZSgpIHsKKwlmb3IgaSBpbiAke1RPQlVJTER9OyBkbworCQljZCAke1N9LyRpICYmIG9lX3J1bm1ha2UgQ0M9IiR7Q0N9IiBDWFg9IiR7Q1hYfSIKKwlkb25lCit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vcW1ha2UgJHtEfSR7YmluZGlyfS9xbWFrZTIKKwlmb3IgaSBpbiBtb2MgdWljIHVpYzMgcmNjIGxjb252ZXJ0IGxyZWxlYXNlIGx1cGRhdGUgcWRidXNjcHAyeG1sIHFkYnVzeG1sMmNwcCB4bWxwYXR0ZXJuczsgZG8KKwkJaW5zdGFsbCAtbSAwNzU1IGJpbi8ke2l9ICR7RH0ke2JpbmRpcn0vJHtpfTQKKwlkb25lCisgICAgCisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9xdDQvCisJY3AgLVBmUiBta3NwZWNzICR7RH0ke2RhdGFkaXJ9L3F0NC8KKwlsbiAtc2YgbGludXgtZysrICR7RH0ke2RhdGFkaXJ9L3F0NC9ta3NwZWNzLyR7QlVJTERfT1N9LW9lLWcrKworCWlmIFsgLWYgJHtEfSR7ZGF0YWRpcn0vcXQ0L21rc3BlY3MvY29tbW9uL2crKy11bml4LmNvbmYgXSA7IHRoZW4KKwkJIyBta3NwZWNzIHdlcmUgcmVmYWN0b3JlZCBmb3IgNC44LjAKKwkJY3AgLWYgJHtXT1JLRElSfS9nKysuY29uZiAke0R9JHtkYXRhZGlyfS9xdDQvbWtzcGVjcy9jb21tb24vZysrLXVuaXguY29uZgorCWVsc2UKKwkJY3AgLWYgJHtXT1JLRElSfS9nKysuY29uZiAke0R9JHtkYXRhZGlyfS9xdDQvbWtzcGVjcy9jb21tb24vZysrLmNvbmYKKwlmaQorCWNwIC1mICR7V09SS0RJUn0vbGludXguY29uZiAke0R9JHtkYXRhZGlyfS9xdDQvbWtzcGVjcy9jb21tb24vCisKKwlpbnN0YWxsIC1tIDA2NDQgdG9vbHMvcG9ydGluZy9zcmMvcTNwb3J0aW5nLnhtbCAke0R9JHtkYXRhZGlyfS9xdDQvCisKKwlmb3IgaSBpbiAke1RPQlVJTER9OyBkbworCQljZCAke1N9LyRpICYmIG9lX3J1bm1ha2UgaW5zdGFsbCBJTlNUQUxMX1JPT1Q9JHtEfQorCWRvbmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtbmF0aXZlXzQuOC43LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC1uYXRpdmVfNC44LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk0ZDY2MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtbmF0aXZlXzQuOC43LmJiCkBAIC0wLDAgKzEsNiBAQAorcmVxdWlyZSBxdDQtbmF0aXZlLmluYworCitUT0JVSUxEIDo9ICJzcmMvdG9vbHMvYm9vdHN0cmFwICR7VE9CVUlMRH0iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkOTkwZWU2NmJmN2FiMGM3ODU1ODk3NzZmMzViYTZhZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlMjg4MjI5NTA5N2U0N2ZlMDg5ZjhhYzc0MWE5NWZlZjQ3ZTBhNzNhM2YzY2RmMjFiNTY5OTA2MzhmNjI2ZWEwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC14MTEtZnJlZS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LXgxMS1mcmVlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmExNzM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC14MTEtZnJlZS5pbmMKQEAgLTAsMCArMSwzOCBAQAorcmVxdWlyZSBxdDQuaW5jCisKK1NVTU1BUlkgPSAiQ3Jvc3MtcGxhdGZvcm0gVUkgdG9vbGtpdCBhbmQgYXBwbGljYXRpb24gZnJhbWV3b3JrIChYMTEgdmVyc2lvbikiCitERVNDUklQVElPTiA9ICJRdCBpcyBhIHZlcnNhdGlsZSBjcm9zcy1wbGF0Zm9ybSBhcHBsaWNhdGlvbiBmcmFtZXdvcmsgLS0gdGhpcyBpcyB0aGUgWDExIHZlcnNpb24uIgorSE9NRVBBR0UgPSAiaHR0cDovL3F0LXByb2plY3Qub3JnLyIKK1NFQ1RJT04gPSAieDExL2xpYnMiCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSBmb250Y29uZmlnIGxpYnhmdCBsaWJ4ZXh0IGxpYnhyZW5kZXIgbGlieHJhbmRyIGxpYnhjdXJzb3IiCitERVBFTkRTICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICd2aXJ0dWFsL2xpYmdsJywgJycsIGQpfSIKK1BST1ZJREVTICs9ICJxdDQteDExIgorUVQ0REVQRU5EUyA9ICIiCisKK1FUX0dMRkxBR1MgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJy1vcGVuZ2wnLCAnLW5vLW9wZW5nbCcsIGQpfSAiCitRVF9HTEZMQUdTX3FlbXV4ODYgPSAiLW9wZW5nbCIKK1FUX0dMRkxBR1NfcWVtdXBwYyA9ICItb3BlbmdsIgorUVRfWDExX0ZMQUdTID89ICItbm8teGluZXJhbWEgLW5vLXhrYiAtbm8tZ3Rrc3R5bGUiCitRVF9DT05GSUdfRkxBR1MgKz0gIiR7UVRfWDExX0ZMQUdTfSIKK1FUX0JBU0VfTElCICA/PSAibGlicXQiCisKKyMgcmVxdWlyZWQgYnkga2RlbGliczQKK1FUX0tERV9GTEFHUyA/PSAiLWFjY2Vzc2liaWxpdHkgLXNtIgorUVRfRElTVFJPX0ZMQUdTID89ICIke1FUX0tERV9GTEFHU30iCisKK2luaGVyaXQgcXQ0eDExCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAjIGZpeCBwa2djb25maWcsIGxpYnRvb2wgYW5kIHBybCBmaWxlcworICBzZWQgLWkgLWUgJ3MjSS91c3IvaW5jbHVkZSNJaW5jbHVkZWRpcn0jZycgXCAKKyAgICAtZSAncyNJaW4jSSR7aW4jZycgXAorICAgICR7RH0ke2xpYmRpcn0vKi5sYSAke0R9JHtsaWJkaXJ9LyoucHJsICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnLyoucGMKKworICAjIFFUIGFidXNlcyAkaW5jbHVkZWRpciB0byBwb2ludCB0byBpdHMgaGVhZGVycywgd2hpY2ggYnJlYWtzIHBrZ2NvbmZpZyBzeXNyb290LCBzbworICAjIG1hbnVhbGx5IGZpeCBpdCB1cCBoZXJlOgorICBmb3IgcGMgaW4gJHtEfSR7bGliZGlyfS9wa2djb25maWcvKi5wYyA7IGRvCisgICAgc2VkIC1pIC1lICJzOnByZWZpeH1pbmNsdWRlLyR7UVRfQkFTRV9OQU1FfS8kKGJhc2VuYW1lICRwYyAucGMpOnByZWZpeH0vaW5jbHVkZToiIFwKKyAgICAgIC1lICJzLENmbGFnczogLENmbGFnczogLUlQe2luY2x1ZGVkaXJ9LyR7UVRfQkFTRV9OQU1FfS8kKGJhc2VuYW1lICRwYyAucGMpICwiIFwKKyAgICAgIC1lICdzOklQezpJJHs6ZycgJHBjCisgIGRvbmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQteDExLWZyZWVfNC44LjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LXgxMS1mcmVlXzQuOC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYjVlNjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LXgxMS1mcmVlXzQuOC43LmJiCkBAIC0wLDAgKzEsOSBAQAorcmVxdWlyZSBxdDQteDExLWZyZWUuaW5jCityZXF1aXJlIHF0NC0ke1BWfS5pbmMKKworUVRfQ09ORklHX0ZMQUdTX2FwcGVuZF9hcm0gPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibmVvbiIsICIiLCAiIC1uby1uZW9uIiAsZCl9IgorCitRVF9DT05GSUdfRkxBR1MgKz0gIiBcCisgLW5vLWVtYmVkZGVkIFwKKyAteHJhbmRyIFwKKyAteDExIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDU4ZTU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC5pbmMKQEAgLTAsMCArMSwzOTEgQEAKK2luaGVyaXQgcW1ha2VfYmFzZQorCitERVBFTkRTICs9ICJxdDQtdG9vbHMtbmF0aXZlIGZyZWV0eXBlIGpwZWcgbGlicG5nIHpsaWIgZGJ1cyBvcGVuc3NsIGdsaWItMi4wIHNxbGl0ZTMgdGlmZiBpY3UiCitERVBFTkRTICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B1bHNlYXVkaW8nLCAncHVsc2VhdWRpbycsICcnLCBkKX0iCisKK3JlcXVpcmUgcXQ0X2FyY2guaW5jCisKK1FUX0RJU1RST19GTEFHUyA/PSAiLW5vLWFjY2Vzc2liaWxpdHkgLW5vLXNtIgorUVRfRElTVFJPX0ZMQUdTX2xpbnV4c3RkYmFzZSA9ICItc20iCisKK1FUX1NRTF9EUklWRVJfRkxBR1MgPz0gIi1uby1zcWwtaWJhc2UgLW5vLXNxbC1teXNxbCAtbm8tc3FsLXBzcWwgLW5vLXNxbC1vZGJjIC1uby1zcWwtc3FsaXRlMiAtcGx1Z2luLXNxbC1zcWxpdGUgLXN5c3RlbS1zcWxpdGUiCisKK1FUX0dMRkxBR1MgPz0gIiIKKworICAKK1FUX1FUM1NVUFBPUlQgPz0gIi1xdDNzdXBwb3J0IgorUVRfWE1MID89ICIteG1scGF0dGVybnMiCitRVF9XRUJLSVQgPz0gIi13ZWJraXQiCitRVF9QSE9OT04gPz0gIi1uby1waG9ub24iCitRVF9EQlVTID89ICItcWRidXMiCitRVF9NVUxUSU1FRElBID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B1bHNlYXVkaW8nLCAnLXB1bHNlYXVkaW8nLCAnLW5vLXB1bHNlYXVkaW8nLCBkKX0iCisgCitRVF9DT05GSUdfRkxBR1MgKz0gIi1yZWxlYXNlIC1uby1jdXBzIC1yZWR1Y2UtcmVsb2NhdGlvbnMgXAorICAgICAgICAgICAgICAgICAgICAtc2hhcmVkIC1uby1uYXMtc291bmQgLW5vLW5pcyBcCisgICAgICAgICAgICAgICAgICAgIC1zeXN0ZW0tbGlianBlZyAtc3lzdGVtLWxpYnBuZyAtc3lzdGVtLWxpYnRpZmYgLXN5c3RlbS16bGliIFwKKyAgICAgICAgICAgICAgICAgICAgLW5vLXBjaCAtc3RsIC1nbGliIC1pY3UgXAorICAgICAgICAgICAgICAgICAgICAtbm8tcnBhdGggLXNpbGVudCBcCisJCSAgICAtRCBVU0VfUVRNVUxUSU1FRElBPTEgXAorICAgICAgICAgICAgICAgICAgICAke1FUX0RCVVN9IFwKKyAgICAgICAgICAgICAgICAgICAgJHtRVF9RVDNTVVBQT1JUfSBcCisgICAgICAgICAgICAgICAgICAgICR7UVRfV0VCS0lUfSBcCisgICAgICAgICAgICAgICAgICAgICR7UVRfUEhPTk9OfSBcCisgICAgICAgICAgICAgICAgICAgICR7UVRfWE1MfSBcCisgICAgICAgICAgICAgICAgICAgICR7UVRfTVVMVElNRURJQX0gXAorICAgICAgICAgICAgICAgICAgICAke1FUX1NRTF9EUklWRVJfRkxBR1N9IFwKKyAgICAgICAgICAgICAgICAgICAgJHtRVF9ESVNUUk9fRkxBR1N9IFwKKyAgICAgICAgICAgICAgICAgICAgJHtRVF9HTEZMQUdTfSIKKworRVhUUkFfT0VNQUtFID0gIi1lIgorCitFWFRSQV9FTlYgPSAnUU1BS0U9IiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9xbWFrZTIgLWFmdGVyIFwKKyAgICAgICAgICAgICBJTkNQQVRIKz0ke1NUQUdJTkdfSU5DRElSfS9mcmVldHlwZTIgTElCUys9LUwke1NUQUdJTkdfTElCRElSfSIgXAorICAgICAgICAgICAgIFFNQUtFU1BFQz0iJHtRTUFLRVNQRUN9IiBMSU5LPSIke0NYWH0gLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19MSUJESVJ9IiBcCisgICAgICAgICAgICAgQVI9IiR7VEFSR0VUX1BSRUZJWH1hciBjcXMiIFwKKyAgICAgICAgICAgICBNT0M9IiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9tb2M0IiBVSUM9IiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS91aWM0IiBNQUtFPSJtYWtlIC1lIicKKworZXhwb3J0IFFUX0NPTkZfUEFUSD0iJHtXT1JLRElSfS9xdC5jb25mIgorCisjIExpYnJhcnkgcGFja2FnZXMKK1FUX0xJQl9OQU1FUyA9ICJRdDNTdXBwb3J0IFF0QXNzaXN0YW50Q2xpZW50IFF0Q0x1Y2VuZSBRdENvcmUgUXREQnVzIFF0RGVzaWduZXIgUXREZXNpZ25lckNvbXBvbmVudHMgUXRHdWkgUXRIZWxwIFF0TmV0d29yayBRdE9wZW5HTCBRdFNjcmlwdCBRdFNjcmlwdFRvb2xzIFF0U3FsIFF0U3ZnIFF0VGVzdCBRdFVpVG9vbHMgUXRXZWJLaXQgUXRYbWwgUXRYbWxQYXR0ZXJucyBwaG9ub24gUXRNdWx0aW1lZGlhIFF0T3BlblZHIFF0TWVkaWFTZXJ2aWNlcyBRdERlY2xhcmF0aXZlIgorCitRVF9FWFRSQV9MSUJTID0gInB2clFXU1dTRUdMIgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIGxpYl9wYWNrYWdlcyA9IFtdCisgICAgZGV2X3BhY2thZ2VzID0gW10KKyAgICBkYmdfcGFja2FnZXMgPSBbXQorICAgIHN0YXRpY2Rldl9wYWNrYWdlcyA9IFtdCisgICAgZm9yIG5hbWUgaW4gZC5nZXRWYXIoIlFUX0xJQl9OQU1FUyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIHBrZyA9IGQuZ2V0VmFyKCJRVF9CQVNFX0xJQiIsIFRydWUpICsgbmFtZS5sb3dlcigpLnJlcGxhY2UoInF0IiwgIiIpLnJlcGxhY2UoIl8iLCAiLSIpICsgIjQiCisgICAgICAgICMgTk9URTogdGhlIGhlYWRlcnMgZm9yIFF0QXNzaXN0YW50Q2xpZW50IGFyZSBkaWZmZXJlbnQKKyAgICAgICAgaW5jbmFtZSA9IG5hbWUucmVwbGFjZSgiUXRBc3Npc3RhbnRDbGllbnQiLCAiUXRBc3Npc3RhbnQiKQorICAgICAgICBkLnNldFZhcigiRklMRVNfJXMiICUgcGtnLCAiJHtsaWJkaXJ9L2xpYiUobmFtZSlzJHtRVF9MSUJJTkZJWH0uc28uKiIgJSBsb2NhbHMoKSkKKyAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzLWRldiIgJSBwa2csICIiIiR7bGliZGlyfS9saWIlKG5hbWUpcyR7UVRfTElCSU5GSVh9LnBybAorICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYiUobmFtZSlzJHtRVF9MSUJJTkZJWH0ubGEKKyAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWIlKG5hbWUpcyR7UVRfTElCSU5GSVh9LnNvCisgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9LyR7UVRfRElSX05BTUV9LyUoaW5jbmFtZSlzCisgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGtnY29uZmlnLyUobmFtZSlzJHtRVF9MSUJJTkZJWH0ucGMiIiIgJSBsb2NhbHMoKSkKKyAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzLXN0YXRpY2RldiIgJSBwa2csICIke2xpYmRpcn0vbGliJShuYW1lKXMke1FUX0xJQklORklYfS5hIiAlIGxvY2FscygpKQorICAgICAgICBkLnNldFZhcigiRklMRVNfJXMtZGJnIiAlIHBrZywgIiR7bGliZGlyfS8uZGVidWcvbGliJShuYW1lKXMke1FUX0xJQklORklYfS5zbyoiICUgbG9jYWxzKCkpCisgICAgICAgIGQuc2V0VmFyKCJSUkVDT01NRU5EU18lcy1kYmciICUgcGtnLCAiJHtQTn0tZGJnIikKKyAgICAgICAgbGliX3BhY2thZ2VzLmFwcGVuZChwa2cpCisgICAgICAgIGRldl9wYWNrYWdlcy5hcHBlbmQoIiVzLWRldiIgJSBwa2cpCisgICAgICAgIGRiZ19wYWNrYWdlcy5hcHBlbmQoIiVzLWRiZyIgJSBwa2cpCisgICAgICAgIHN0YXRpY2Rldl9wYWNrYWdlcy5hcHBlbmQoIiVzLXN0YXRpY2RldiIgJSBwa2cpCisgICAgZm9yIG5hbWUgaW4gZC5nZXRWYXIoIk9USEVSX1BBQ0tBR0VTIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgZGJnX3BhY2thZ2VzLmFwcGVuZCgiJXMtZGJnIiAlIG5hbWUpCisgICAgICAgIHN0YXRpY2Rldl9wYWNrYWdlcy5hcHBlbmQoIiVzLXN0YXRpY2RldiIgJSBuYW1lKQorCisgICAgZm9yIG5hbWUgaW4gZC5nZXRWYXIoIlFUX0VYVFJBX0xJQlMiLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBwa2cgPSBkLmdldFZhcigiUVRfQkFTRV9MSUIiLCBUcnVlKSArIG5hbWUubG93ZXIoKS5yZXBsYWNlKCJxdCIsICIiKS5yZXBsYWNlKCJfIiwgIi0iKSArICI0IgorICAgICAgICBkLnNldFZhcigiRklMRVNfJXMiICUgcGtnLCAiJHtsaWJkaXJ9L2xpYiUobmFtZSlzLnNvLioiICUgbG9jYWxzKCkpCisgICAgICAgIGQuc2V0VmFyKCJGSUxFU18lcy1zdGF0aWNkZXYiICUgcGtnLCAiJHtsaWJkaXJ9L2xpYiUobmFtZSlzLmEiICUgbG9jYWxzKCkpCisgICAgICAgIGQuc2V0VmFyKCJGSUxFU18lcy1kZXYiICUgcGtnLCAiIiIke2xpYmRpcn0vbGliJShuYW1lKXMucHJsCisgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGliJShuYW1lKXMubGEKKyAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWIlKG5hbWUpcy5zbworICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS8ke1FUX0RJUl9OQU1FfS8lKGluY25hbWUpcworICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BrZ2NvbmZpZy8lKG5hbWUpcy5wYyIiIiAlIGxvY2FscygpKQorICAgICAgICBkLnNldFZhcigiRklMRVNfJXMtZGJnIiAlIHBrZywgIiR7bGliZGlyfS8uZGVidWcvbGliJShuYW1lKXMuc28qIiAlIGxvY2FscygpKQorICAgICAgICBkLnNldFZhcigiUlJFQ09NTUVORFNfJXMtZGJnIiAlIHBrZywgIiR7UE59LWRiZyIpCisgICAgICAgIGxpYl9wYWNrYWdlcy5hcHBlbmQocGtnKQorICAgICAgICBkZXZfcGFja2FnZXMuYXBwZW5kKCIlcy1kZXYiICUgcGtnKQorICAgICAgICBkYmdfcGFja2FnZXMuYXBwZW5kKCIlcy1kYmciICUgcGtnKQorICAgICAgICBzdGF0aWNkZXZfcGFja2FnZXMuYXBwZW5kKCIlcy1zdGF0aWNkZXYiICUgcGtnKQorCisgICAgZC5zZXRWYXIoIkxJQl9QQUNLQUdFUyIsICIgIi5qb2luKGxpYl9wYWNrYWdlcykpCisgICAgZC5zZXRWYXIoIkRFVl9QQUNLQUdFUyIsICIgIi5qb2luKGRldl9wYWNrYWdlcykpCisgICAgZC5zZXRWYXIoIkRCR19QQUNLQUdFUyIsICIgIi5qb2luKGRiZ19wYWNrYWdlcykpCisgICAgZC5zZXRWYXIoIlNUQVRJQ0RFVl9QQUNLQUdFUyIsICIgIi5qb2luKHN0YXRpY2Rldl9wYWNrYWdlcykpCit9CisKK09USEVSX1BBQ0tBR0VTID0gIlwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tdG9vbHMgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1hc3Npc3RhbnQgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1jb21tb24gXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1kYnVzIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZGVtb3MgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1kZXNpZ25lciBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWV4YW1wbGVzIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tbGluZ3Vpc3QgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1tYWtlcXBmIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tbWtzcGVjcyBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LXBpeGVsdG9vbCBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LXFtbHZpZXdlciBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LXhtbHBhdHRlcm5zIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tcXQzdG80IFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tcW1sLXBsdWdpbnMiCisKKyNXZSBwcmVwZW5kIHNvICR7UVRfQkFTRV9OQU1FfS1kZW1vcy1kb2MgY29tZXMgYmVmb3JlICR7UE59LWRvYyxzbyB0aGUgcGFja2FnaW5nIG9mIEZJTEVTXyBnZXQgZG9uZSBiZWZvcmUuCitQQUNLQUdFUyA9KyAiJHtRVF9CQVNFX05BTUV9LWRlbW9zLWRvYyIKK1BBQ0tBR0VTICs9ICIgXAorICAgICAgICAgICAgICR7TElCX1BBQ0tBR0VTfSBcCisgICAgICAgICAgICAgJHtERVZfUEFDS0FHRVN9IFwKKyAgICAgICAgICAgICAke0RCR19QQUNLQUdFU30gXAorICAgICAgICAgICAgICR7U1RBVElDREVWX1BBQ0tBR0VTfSBcCisgICAgICAgICAgICAgJHtPVEhFUl9QQUNLQUdFU30iCisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl4ke1FUX0JBU0VfTkFNRX0tcGx1Z2luLS4qIF4ke1FUX0JBU0VfTkFNRX0tdHJhbnNsYXRpb24tLiogXiR7UVRfQkFTRV9OQU1FfS1waHJhc2Vib29rLS4qIgorCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorRklMRVNfJHtQTn0gICAgID0gIiIKK0ZJTEVTXyR7UE59LWRldiA9ICIke2luY2x1ZGVkaXJ9LyR7UVRfRElSX05BTUV9L1F0LyoiCitGSUxFU18ke1BOfS1kYmcgPSAiL3Vzci9zcmMvZGVidWcvIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWRlbW9zLWRvYyA9ICIke2RvY2Rpcn0vJHtRVF9ESVJfTkFNRX0vcWNoL3F0LnFjaCIKK1JSRUNPTU1FTkRTXyR7UE59ID0gIiR7TElCX1BBQ0tBR0VTfSAke09USEVSX1BBQ0tBR0VTfSIKK1JSRUNPTU1FTkRTXyR7UE59LWRldiA9ICIke0RFVl9QQUNLQUdFU30iCitSUkVDT01NRU5EU18ke1BOfS1kYmcgPSAiJHtEQkdfUEFDS0FHRVN9IgorUlJFQ09NTUVORFNfJHtRVF9CQVNFX0xJQn1jb3JlNF9hcHBlbmRfbGliYy1nbGliYyA9ICIgZ2xpYmMtZ2NvbnYtdXRmLTE2IgorUlJFQ09NTUVORFNfJHtRVF9CQVNFX05BTUV9LWRlbW9zICs9ICIgXAorICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWV4YW1wbGVzIFwKKyAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1wbHVnaW4tc3FsZHJpdmVyLXNxbGl0ZSBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tcGx1Z2luLWltYWdlZm9ybWF0LWpwZWcgXAorICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LXFtbC1wbHVnaW5zIFwKKyAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1hc3Npc3RhbnQgXAorICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWRlbW9zLWRvYyIKK1JSRUNPTU1FTkRTXyR7UVRfQkFTRV9OQU1FfS1leGFtcGxlcyArPSAiIFwKKyAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1wbHVnaW4tc3FsZHJpdmVyLXNxbGl0ZSBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tcGx1Z2luLWltYWdlZm9ybWF0LWpwZWcgXAorICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LXFtbC1wbHVnaW5zIgorUlJFQ09NTUVORFNfJHtRVF9CQVNFX05BTUV9LXFtbHZpZXdlciArPSAiIFwKKyAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1xbWwtcGx1Z2lucyIKK1JSRUNPTU1FTkRTXyR7UVRfQkFTRV9OQU1FfS1kb2MgKz0gIiBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZGVtb3MtZG9jIgorCitSUFJPVklERVNfJHtRVF9CQVNFX05BTUV9LXRvb2xzICs9ICJxbWFrZTIiCitSUkVQTEFDRVNfJHtRVF9CQVNFX05BTUV9LXRvb2xzICs9ICJxbWFrZTIiCisKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS10b29scyAgICAgICAgICAgICAgICA9ICIke2JpbmRpcn0vcXR0cmFjZXJlcGxheSAke2JpbmRpcn0vcWRvYyogJHtiaW5kaXJ9L3FtYWtlICR7YmluZGlyfS9tb2MgJHtiaW5kaXJ9L3VpYyogJHtiaW5kaXJ9L3JjYyIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS10b29scy1kYmcgICAgICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnL3F0dHJhY2VyZXBsYXkgJHtiaW5kaXJ9Ly5kZWJ1Zy9xZG9jKiAke2JpbmRpcn0vLmRlYnVnL3FtYWtlICR7YmluZGlyfS8uZGVidWcvdWljKiAke2JpbmRpcn0vLmRlYnVnL21vYyAke2JpbmRpcn0vLmRlYnVnL3JjYyIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1hc3Npc3RhbnQgICAgICAgICAgICA9ICIke2JpbmRpcn0vKmFzc2lzdGFudCogJHtiaW5kaXJ9L3Fjb2xsZWN0aW9uZ2VuZXJhdG9yICR7YmluZGlyfS9xaGVscGNvbnZlcnRlciAke2JpbmRpcn0vcWhlbHBnZW5lcmF0b3IiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tYXNzaXN0YW50LWRiZyAgICAgICAgPSAiJHtiaW5kaXJ9Ly5kZWJ1Zy8qYXNzaXN0YW50KiAke2JpbmRpcn0vLmRlYnVnL3Fjb2xsZWN0aW9uZ2VuZXJhdG9yICR7YmluZGlyfS8uZGVidWcvcWhlbHBjb252ZXJ0ZXIgJHtiaW5kaXJ9Ly5kZWJ1Zy9xaGVscGdlbmVyYXRvciIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1jb21tb24gICAgICAgICAgICAgICA9ICIke2JpbmRpcn0vcXRjb25maWciCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tY29tbW9uLWRiZyAgICAgICAgICAgPSAiJHtiaW5kaXJ9Ly5kZWJ1Zy9xdGNvbmZpZyIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1kYnVzICAgICAgICAgICAgICAgICA9ICIke2JpbmRpcn0vcWRidXMgJHtiaW5kaXJ9L3FkYnVzeG1sMmNwcCAke2JpbmRpcn0vcWRidXNjcHAyeG1sICR7YmluZGlyfS9xZGJ1c3ZpZXdlciIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1kYnVzLWRiZyAgICAgICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnL3FkYnVzICR7YmluZGlyfS8uZGVidWcvcWRidXN4bWwyY3BwICR7YmluZGlyfS8uZGVidWcvcWRidXNjcHAyeG1sICR7YmluZGlyfS8uZGVidWcvcWRidXN2aWV3ZXIiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZGVtb3MgICAgICAgICAgICAgICAgPSAiJHtiaW5kaXJ9L3F0ZGVtbyogJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2RlbW9zLyoiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZGVtb3Mtc3RhdGljZGV2ICAgICAgPSAiJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2RlbW9zL3NoYXJlZC9saWJkZW1vX3NoYXJlZC5hIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWRlbW9zLWRiZyAgICAgICAgICAgID0gIiR7YmluZGlyfS8uZGVidWcvcXRkZW1vKiAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZGVtb3MvLmRlYnVnLyogICR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9kZW1vcy8qLy5kZWJ1ZyAgJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2RlbW9zLyovKi8uZGVidWcgICR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9kZW1vcy8qLyovKi8uZGVidWciCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZGVzaWduZXIgICAgICAgICAgICAgPSAiJHtiaW5kaXJ9LypkZXNpZ25lcioiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZGVzaWduZXItZGJnICAgICAgICAgPSAiJHtiaW5kaXJ9Ly5kZWJ1Zy8qZGVzaWduZXIqIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWV4YW1wbGVzICAgICAgICAgICAgID0gIiR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9leGFtcGxlcy8qIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWV4YW1wbGVzLXN0YXRpY2RldiAgID0gIiR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9leGFtcGxlcy90b29scy9wbHVnYW5kcGFpbnQvcGx1Z2lucy9saWJwbnBfYmFzaWN0b29scy5hIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWV4YW1wbGVzLWRiZyAgICAgICAgID0gIiR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9leGFtcGxlcy8uZGVidWcgJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2V4YW1wbGVzLyovLmRlYnVnICR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9leGFtcGxlcy8qLyovLmRlYnVnICR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9leGFtcGxlcy8qLyovKi8uZGVidWcgJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2V4YW1wbGVzLyovKi8qLyovLmRlYnVnICR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9leGFtcGxlcy9kZWNsYXJhdGl2ZS8qLyovKi8qLyovLmRlYnVnLyogJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2V4YW1wbGVzL2RlY2xhcmF0aXZlLyovKi8qLyovLmRlYnVnLyoiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tbGluZ3Vpc3QgICAgICAgICAgICAgPSAiJHtiaW5kaXJ9LypsaW5ndWlzdCogJHtiaW5kaXJ9L2xyZWxlYXNlICR7YmluZGlyfS9sdXBkYXRlICR7YmluZGlyfS9sY29udmVydCAke2JpbmRpcn0vcW0ydHMiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tbGluZ3Vpc3QtZGJnICAgICAgICAgPSAiJHtiaW5kaXJ9Ly5kZWJ1Zy8qbGluZ3Vpc3QqICR7YmluZGlyfS8uZGVidWcvbHJlbGVhc2UgJHtiaW5kaXJ9Ly5kZWJ1Zy9sdXBkYXRlICR7YmluZGlyfS8uZGVidWcvbGNvbnZlcnQgJHtiaW5kaXJ9Ly5kZWJ1Zy9xbTJ0cyIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1waXhlbHRvb2wgICAgICAgICAgICA9ICIke2JpbmRpcn0vcGl4ZWx0b29sIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXBpeGVsdG9vbC1kYmcgICAgICAgID0gIiR7YmluZGlyfS8uZGVidWcvcGl4ZWx0b29sIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXF0M3RvNCAgICAgICAgICAgICAgID0gIiR7YmluZGlyfS9xdDN0bzQgJHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS9xM3BvcnRpbmcueG1sIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXF0M3RvNC1kYmcgICAgICAgICAgID0gIiR7YmluZGlyfS8uZGVidWcvcXQzdG80IgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXFtbHZpZXdlciAgICAgICAgICAgID0gIiR7YmluZGlyfS9xbWx2aWV3ZXIiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tcW1sdmlld2VyLWRiZyAgICAgICAgPSAiJHtiaW5kaXJ9Ly5kZWJ1Zy9xbWx2aWV3ZXIiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tbWFrZXFwZiAgICAgICAgICAgICAgPSAiJHtiaW5kaXJ9L21ha2VxcGYiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tbWFrZXFwZi1kYmcgICAgICAgICAgPSAiJHtiaW5kaXJ9Ly5kZWJ1Zy9tYWtlcXBmIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LW1rc3BlY3MgICAgICAgICAgICAgID0gIiR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vbWtzcGVjcy8qICR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vZW52aXJvbm1lbnQtc2V0dXAiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0teG1scGF0dGVybnMgICAgICAgICAgPSAiJHtiaW5kaXJ9L3htbHBhdHRlcm5zKiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS14bWxwYXR0ZXJucy1kYmcgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnL3htbHBhdHRlcm5zKiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1xbWwtcGx1Z2lucyAgICAgICAgICA9ICIke2xpYmRpcn0vJHtRVF9ESVJfTkFNRX0vaW1wb3J0cy8qICR7bGliZGlyfS8ke1FUX0RJUl9OQU1FfS9wbHVnaW5zL3FtbHRvb2xpbmcvKiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1xbWwtcGx1Z2lucy1kYmcgICAgICA9ICIke2xpYmRpcn0vJHtRVF9ESVJfTkFNRX0vaW1wb3J0cy8qLyovKi8uZGVidWcvKiAke2xpYmRpcn0vJHtRVF9ESVJfTkFNRX0vaW1wb3J0cy8qLy5kZWJ1ZyAke2xpYmRpcn0vJHtRVF9ESVJfTkFNRX0vcGx1Z2lucy9xbWx0b29saW5nLy5kZWJ1ZyIKK0lOU0FORV9TS0lQXyR7TUxQUkVGSVh9JHtRVF9CQVNFX05BTUV9LWV4YW1wbGVzICAgICAgKz0gImxpYmRpciIKK0lOU0FORV9TS0lQXyR7TUxQUkVGSVh9JHtRVF9CQVNFX05BTUV9LWV4YW1wbGVzLWRiZyAgKz0gImxpYmRpciIKKworIyBMaWNlbnNlIG9wdGlvbnMsIHRvIGJlIHNldCBieSB0aGUgcmVjaXBlIGlmIGRpZmZlcmVudCB2YWx1ZXMgYXJlIG5lZWRlZAorUVRfTElDRU5TRV9GSUxFID89ICIiCitRVF9MSUNFTlNFX0ZMQUdTID89ICItb3BlbnNvdXJjZSIKKworZG9fY29uZmlndXJlKCkgeworCXVuc2V0IFFNQUtFU1BFQworCXVuc2V0IFFURElSCisKKwlzZXRfYXJjaAorCXNldF9lbmRpYW4KKworCWlmIFsgISAtZSBiaW4vcW1ha2UgXTsgdGhlbgorCQlsbiAtc2YgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3FtYWtlMiBiaW4vcW1ha2UKKwlmaQorCisJaWYgWyAhIC1lIG1rc3BlY3MvJHtUQVJHRVRfT1N9LW9lLWcrKyBdOyB0aGVuCisJCWxuIC1zZiBsaW51eC1nKysgbWtzcGVjcy8ke1RBUkdFVF9PU30tb2UtZysrCisJZmkKKworCWlmIFsgLWYgbWtzcGVjcy9jb21tb24vZysrLXVuaXguY29uZiBdIDsgdGhlbgorCQkjIG1rc3BlY3Mgd2VyZSByZWZhY3RvcmVkIGZvciA0LjguMAorCQljcCAtZiAke1dPUktESVJ9L2crKy5jb25mIG1rc3BlY3MvY29tbW9uL2crKy11bml4LmNvbmYKKwllbHNlCisJCWNwIC1mICR7V09SS0RJUn0vZysrLmNvbmYgbWtzcGVjcy9jb21tb24vZysrLmNvbmYKKwlmaQorCWNwIC1mICR7V09SS0RJUn0vbGludXguY29uZiBta3NwZWNzL2NvbW1vbi8KKworCWVjaG8gIltQYXRoc10iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiAkUVRfQ09ORl9QQVRICisJZWNobyAiUHJlZml4PSR7cHJlZml4fSIgICAgICAgICAgICAgICAgICAgICAgID4+ICRRVF9DT05GX1BBVEgKKwllY2hvICJEb2N1bWVudGF0aW9uPSR7ZG9jZGlyfS8ke1FUX0RJUl9OQU1FfSIgPj4gJFFUX0NPTkZfUEFUSAorCWVjaG8gIkhlYWRlcnM9JHtpbmNsdWRlZGlyfS8ke1FUX0RJUl9OQU1FfSIgICA+PiAkUVRfQ09ORl9QQVRICisJZWNobyAiTGlicmFyaWVzPSR7bGliZGlyfSIgICAgICAgICAgICAgICAgICAgID4+ICRRVF9DT05GX1BBVEgKKwllY2hvICJCaW5hcmllcz0ke2JpbmRpcn0iICAgICAgICAgICAgICAgICAgICAgPj4gJFFUX0NPTkZfUEFUSAorCWVjaG8gIlBsdWdpbnM9JHtsaWJkaXJ9LyR7UVRfRElSX05BTUV9L3BsdWdpbnMiID4+ICRRVF9DT05GX1BBVEgKKwllY2hvICJJbXBvcnRzPSR7bGliZGlyfS8ke1FUX0RJUl9OQU1FfS9pbXBvcnRzIiA+PiAkUVRfQ09ORl9QQVRICisJZWNobyAiRGF0YT0ke2RhdGFkaXJ9LyR7UVRfRElSX05BTUV9IiAgICAgICAgID4+ICRRVF9DT05GX1BBVEgKKwllY2hvICJUcmFuc2xhdGlvbnM9JHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS90cmFuc2xhdGlvbnMiID4+ICRRVF9DT05GX1BBVEgKKwllY2hvICJTZXR0aW5ncz0ke3N5c2NvbmZkaXJ9LyR7UVRfRElSX05BTUV9IiAgPj4gJFFUX0NPTkZfUEFUSAorCWVjaG8gIkV4YW1wbGVzPSR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9leGFtcGxlcyIgPj4gJFFUX0NPTkZfUEFUSAorCWVjaG8gIkRlbW9zPSR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9kZW1vcyIgICA+PiAkUVRfQ09ORl9QQVRICisKKwkke0VYVFJBX1FNQUtFX01VTkdFfXx8IHRydWUKKworCWVjaG8geWVzIHwgUVRfTElDRU5TRV9GSUxFPSIke1FUX0xJQ0VOU0VfRklMRX0iIC4vY29uZmlndXJlIC12IFwKKwkJCS1wcmVmaXggJHtwcmVmaXh9IFwKKwkJCS1iaW5kaXIgJHtiaW5kaXJ9IFwKKwkJCS1saWJkaXIgJHtsaWJkaXJ9IFwKKwkJCS1kYXRhZGlyICR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0gXAorCQkJLXN5c2NvbmZkaXIgJHtzeXNjb25mZGlyfS8ke1FUX0RJUl9OQU1FfSBcCisJCQktZG9jZGlyICR7ZG9jZGlyfS8ke1FUX0RJUl9OQU1FfSBcCisJCQktaGVhZGVyZGlyICR7aW5jbHVkZWRpcn0vJHtRVF9ESVJfTkFNRX0gXAorCQkJLXBsdWdpbmRpciAke2xpYmRpcn0vJHtRVF9ESVJfTkFNRX0vcGx1Z2lucyBcCisJCQktaW1wb3J0ZGlyICR7bGliZGlyfS8ke1FUX0RJUl9OQU1FfS9pbXBvcnRzIFwKKwkJCS10cmFuc2xhdGlvbmRpciAke2RhdGFkaXJ9LyR7UVRfRElSX05BTUV9L3RyYW5zbGF0aW9ucyBcCisJCQktZXhhbXBsZXNkaXIgJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2V4YW1wbGVzIFwKKwkJCS1kZW1vc2RpciAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZGVtb3MgXAorCQkJLXBsYXRmb3JtICR7VEFSR0VUX09TfS1vZS1nKysgXAorCQkJLXhwbGF0Zm9ybSAke1RBUkdFVF9PU30tb2UtZysrIFwKKwkJCSR7UVRfRU5ESUFOfSBcCisJCQktY3Jvc3NhcmNoICR7UVRfQVJDSH0gXAorCQkJJHtRVF9MSUNFTlNFX0ZMQUdTfSBcCisJCQkke1FUX0NPTkZJR19GTEFHU30gLW5vLWZhc3QgXAorCQkJLUwke1NUQUdJTkdfTElCRElSfSAtSSR7U1RBR0lOR19JTkNESVJ9IFwKKwkJCS1JJHtTVEFHSU5HX0lOQ0RJUn0vZnJlZXR5cGUyCit9CisKK2RvX2NvbXBpbGUoKSB7CisgICAgIyBGaXh1cCBtaXNzaW5nIHdzZWdsIGhlYWRlciBpbiBzb21lIFNHWCBTREtzCisgICAgaWYgISBbIC1lICR7U1RBR0lOR19JTkNESVJ9L3dzZWdsLmggXSA7IHRoZW4KKyAgICAgICAgY3Agc3JjLzNyZHBhcnR5L3Bvd2VydnIvd3NlZ2wuaCBzcmMvcGx1Z2lucy9nZnhkcml2ZXJzL3Bvd2VydnIvUVdTV1NFR0wvCisgICAgZmkKKworICAgIHVuc2V0IENGTEFHUyBDWFhGTEFHUworCisgICAgb2VfcnVubWFrZSAke0VYVFJBX0VOVn0KKworICAgICMgQnVpbGQgdGFyZ2V0IHFtYWtlCisgICAgZXhwb3J0IFFNQUtFU1BFQz0iJHtTfS9ta3NwZWNzLyR7VEFSR0VUX09TfS1vZS1nKysiCisgICAgY2QgJHtTfS9xbWFrZQorICAgICR7T0VfUU1BS0VfUU1BS0V9CisgICAgb2VfcnVubWFrZSBDQz0iJHtDQ30iIENYWD0iJHtDWFh9IgorICAgIGNkICR7U30KK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQoKSB7CisgICAgdHJhbnNsYXRpb25fZGlyID0gZC5leHBhbmQoJyR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vdHJhbnNsYXRpb25zLycpCisgICAgdHJhbnNsYXRpb25fbmFtZSA9IGQuZXhwYW5kKCcke1FUX0JBU0VfTkFNRX0tdHJhbnNsYXRpb24tJXMnKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHRyYW5zbGF0aW9uX2RpciwgJ14oYXNzaXN0YW50fGRlc2lnbmVyfGxpbmd1aXN0fHF0fHF0Y29uZmlnfHF2ZmJ8cXRzY3JpcHQpXyguKilcLnFtJCcsIHRyYW5zbGF0aW9uX25hbWUsICcke1BOfSB0cmFuc2xhdGlvbiBmb3IgJXMnLCBleHRyYV9kZXBlbmRzPScnICkKKyAKKyAgICBwaHJhc2Vib29rX2RpciA9IGQuZXhwYW5kKCcke2RhdGFkaXJ9LyR7UVRfRElSX05BTUV9L3BocmFzZWJvb2tzLycpCisgICAgcGhyYXNlYm9va19uYW1lID0gZC5leHBhbmQoJyR7UVRfQkFTRV9OQU1FfS1waHJhc2Vib29rLSVzJykKKworICAgIGlmIG9zLnBhdGguZXhpc3RzKCIlcyVzIiAlIChkLmV4cGFuZCgnJHtEfScpLCBwaHJhc2Vib29rX2RpcikpOgorICAgICAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBwaHJhc2Vib29rX2RpciwgJ14oLiopXC5xcGgkJywgcGhyYXNlYm9va19uYW1lLCAnJHtQTn0gcGhyYXNlYm9vayBmb3IgJXMnLCBleHRyYV9kZXBlbmRzPScnICkKKyAgICBlbHNlOgorICAgICAgICBiYi5ub3RlKCJUaGUgcGF0aCBkb2VzIG5vdCBleGlzdDoiLCBkLmV4cGFuZCgnJHtEfScpLCBwaHJhc2Vib29rX2RpcikKKyAKKyAgICAjIFBhY2thZ2UgYWxsIHRoZSBwbHVnaW5zIGFuZCB0aGVpciAtZGJnIHZlcnNpb24gYW5kIGNyZWF0ZSBhIG1ldGEgcGFja2FnZQorICAgIGRlZiBxdG9waWFfc3BsaXQocGF0aCwgbmFtZSwgZ2xvYik6CisgICAgICAgICIiIgorICAgICAgICBTcGxpdCB0aGUgcGFja2FnZSBpbnRvIGEgbm9ybWFsIGFuZCAtZGJnIHBhY2thZ2UgYW5kIHRoZW4gYWRkIHRoZQorICAgICAgICBuZXcgcGFja2FnZXMgdG8gdGhlIG1ldGEgcGFja2FnZS4KKyAgICAgICAgIiIiCisgICAgICAgIHBsdWdpbl9kaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9LyR7UVRfRElSX05BTUV9L3BsdWdpbnMvJXMvJyAlIHBhdGgpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cygiJXMlcyIgJSAoZC5leHBhbmQoJyR7RH0nKSwgcGx1Z2luX2RpcikpOgorICAgICAgICAgICAgYmIubm90ZSgiVGhlIHBhdGggZG9lcyBub3QgZXhpc3Q6IiwgZC5leHBhbmQoJyR7RH0nKSwgcGx1Z2luX2RpcikKKyAgICAgICAgICAgIHJldHVybgorIAorICAgICAgICBwbHVnaW5fbmFtZSA9IGQuZXhwYW5kKCcke1FUX0JBU0VfTkFNRX0tcGx1Z2luLSVzLSUlcycgJSBuYW1lKQorICAgICAgICBkZXZfcGFja2FnZXMgPSBbXQorICAgICAgICBkZXZfaG9vayA9IGxhbWJkYSBmaWxlLHBrZyxiLGMsZDpkZXZfcGFja2FnZXMuYXBwZW5kKChmaWxlLHBrZykpCisgICAgICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBsdWdpbl9kaXIsIGdsb2IsIHBsdWdpbl9uYW1lLCAnJHtQTn0gJXMgZm9yICUlcycgJSBuYW1lLCBleHRyYV9kZXBlbmRzPScnLCBob29rPWRldl9ob29rKQorICAgICAgICAjIENyZWF0ZSBhIC1kYmcgcGFja2FnZSBhcyB3ZWxsCisgICAgICAgIHBsdWdpbl9kaXJfZGJnID0gZC5leHBhbmQoJyR7bGliZGlyfS8ke1FUX0RJUl9OQU1FfS9wbHVnaW5zLyVzLy5kZWJ1ZycgJSBwYXRoKQorICAgICAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIEZhbHNlKQorICAgICAgICBmb3IgKGZpbGUscGFja2FnZSkgaW4gZGV2X3BhY2thZ2VzOgorICAgICAgICAgICAgcGFja2FnZXMgPSAiJXMgJXMtZGJnIiAlIChwYWNrYWdlcywgcGFja2FnZSkKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IG9zLnBhdGguam9pbihwbHVnaW5fZGlyX2RiZywgb3MucGF0aC5iYXNlbmFtZShmaWxlKSkKKyAgICAgICAgICAgIGQuc2V0VmFyKCJGSUxFU18lcy1kYmciICUgcGFja2FnZSwgZmlsZV9uYW1lKQorICAgICAgICAgICAgZC5zZXRWYXIoIkRFU0NSSVBUSU9OXyVzLWRiZyIgJSBwYWNrYWdlLCAiJHtQTn0gJXMgZm9yICVzIiAlIChuYW1lLCBwYWNrYWdlKSkKKworICAgICAgICBkLnNldFZhcignUEFDS0FHRVMnLCBwYWNrYWdlcykKKworICAgIHF0b3BpYV9zcGxpdCgnYWNjZXNzaWJsZScsICAgICdhY2Nlc3NpYmxlJywgICAgJ15saWJxKC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ2NvZGVjcycsICAgICAgICAnY29kZWMnLCAgICAgICAgICdebGlicSguKilcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdkZWNvcmF0aW9ucycsICAgJ2RlY29yYXRpb24nLCAgICAnXmxpYnFkZWNvcmF0aW9uKC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ2Rlc2lnbmVyJywgICAgICAnZGVzaWduZXInLCAgICAgICdebGliKC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ2dmeGRyaXZlcnMnLCAgICAnZ2Z4ZHJpdmVyJywgICAgICdebGlicSguKilcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdncmFwaGljc3N5c3RlbXMnLCdncmFwaGljc3N5c3RlbXMnLCAnXmxpYnEoLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgna2JkZHJpdmVycycsICAgICdrYmRkcml2ZXInLCAgICAgJ15saWJxKC4qKWtiZGRyaXZlclwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ21vdXNlZHJpdmVycycsICAnbW91c2Vkcml2ZXInLCAgICdebGlicSguKiltb3VzZWRyaXZlclwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ2ljb25lbmdpbmVzJywgICAnaWNvbmVuZ2luZScsICAgICdebGlicSguKilcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdpbWFnZWZvcm1hdHMnLCAgJ2ltYWdlZm9ybWF0JywgICAnXmxpYnEoLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnaW5wdXRtZXRob2RzJywgICdpbnB1dG1ldGhvZCcsICAgJ15saWJxKC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ3NxbGRyaXZlcnMnLCAgICAnc3FsZHJpdmVyJywgICAgICdebGlicSguKilcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdzY3JpcHQnLCAgICAgICAgJ3NjcmlwdCcsICAgICAgICAnXmxpYnF0c2NyaXB0KC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ3N0eWxlcycsICAgICAgICAnc3R5bGUnLCAgICAgICAgICdebGlicSguKilcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdwaG9ub25fYmFja2VuZCcsJ3Bob25vbi1iYWNrZW5kJywnXmxpYnBob25vbl8oLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnYmVhcmVyJywgICAgICAgICdiZWFyZXInLCAgICAgICAgJ15saWJxKC4qKWJlYXJlclwuc28kJykKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGwgSU5TVEFMTF9ST09UPSR7RH0KKworCSMgSW5zdGFsbCBhIHByb3BlciB0YXJnZXQgdmVyc2lvbiBvZiBxbWFrZQorCXJtICR7RH0vJHtiaW5kaXJ9L3FtYWtlCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9xbWFrZTIgJHtEfSR7YmluZGlyfS9xbWFrZQorCisJIyBmaXggcGtnY29uZmlnLCBsaWJ0b29sIGFuZCBwcmwgZmlsZXMKKwlzZWQgLWkgLWUgJ3MjLUwke1N9L2xpYi9cPyMjZycgXAorCQkJLWUgJ3MjLUwke1NUQUdJTkdfTElCRElSfS9cPyMjZycgXAorCQkJLWUgJ3MjU1RBR0lOR19MSUJESVJ9I2xpYmRpcn0nI2cgXAorCQkJLWUgJ3MjLUwke2xpYmRpcn0vXD8jI2cnIFwKKwkJCS1lIHMjJyQoT0VfUU1BS0VfTElCU19YMTEpJyMiJHtPRV9RTUFLRV9MSUJTX1gxMX0iI2cgXAorCQkJLWUgJ3MjIiAtV2wsLXJwYXRoLWxpbmssJHtTfS9saWIvXD8iIyNnJyBcCisJCQktZSAncyMiIC1XbCwtcnBhdGgtbGluaywke2xpYmRpcn0vXD8iIyNnJyBcCisJCQktZSAncyNJaW4jSSR7aW4jZycgXAorCQkJLWUgJ3MjLUxcLlwuL1wuXC4vV2ViQ29yZS9yZWxlYXNlXHNcKy1MXC5cLi9cLlwuL0phdmFTY3JpcHRDb3JlL3JlbGVhc2Vcc1wrLWx3ZWJjb3JlIyNnJyBcCisJCQktZSAncyMtbGpzY29yZSMjZycgXAorCQkJJHtEfSR7bGliZGlyfS8qLmxhICR7RH0ke2xpYmRpcn0vKi5wcmwgJHtEfSR7bGliZGlyfS9wa2djb25maWcvKi5wYworCisJIyBmaXggcGtnY29uZmlnIGZpbGVzCisJc2VkIC1pIC1lIHMjIm1vY19sb2NhdGlvbj0uKiQiIyJtb2NfbG9jYXRpb249JHtiaW5kaXJ9L21vYzQiIyBcCisJCQktZSBzIyJ1aWNfbG9jYXRpb249LiokIiMidWljX2xvY2F0aW9uPSR7YmluZGlyfS91aWM0IiMgXAorCQkJJHtEfSR7bGliZGlyfS9wa2djb25maWcvKi5wYworCWZvciBuYW1lIGluICR7UVRfTElCX05BTUVTfTsgZG8KKwkJc2VkIC1pIC1lIC9SZXF1aXJlcy9zIyIke25hbWV9IiMiJHtuYW1lfSR7UVRfTElCSU5GSVh9IiNnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnLyoucGMKKwlkb25lCisKKwkjIFFUIGFidXNlcyAkaW5jbHVkZWRpciB0byBwb2ludCB0byBpdHMgaGVhZGVycywgd2hpY2ggYnJlYWtzIHBrZ2NvbmZpZyBzeXNyb290LCBzbyBtYW51YWxseSBmaXggaXQgdXAgaGVyZToKKwlmb3IgcGMgaW4gJHtEfSR7bGliZGlyfS9wa2djb25maWcvKi5wYyA7IGRvCisJCXNlZCAtaSAtZSAiczpwcmVmaXh9L2luY2x1ZGUvJHtRVF9ESVJfTkFNRX0vJChiYXNlbmFtZSAkcGMgLnBjKTpwcmVmaXh9L2luY2x1ZGU6IiBcCisJCQkJLWUgJ3M6SVB7OkkkezpnJyAkcGMKKwlkb25lCisKKwkjQXBwZW5kIGFuIEUgdG8gdGhlIHF0ZGVtbyBmaWxlCisJaWYgWyAtbiAiJHtRVF9MSUJJTkZJWH0iIF0gOyB0aGVuCisJCVsgLWYgJHtEfSR7YmluZGlyfS9xdGRlbW8gXSAmJiBtdiAke0R9JHtiaW5kaXJ9L3F0ZGVtbyAke0R9JHtiaW5kaXJ9L3F0ZGVtbyR7UVRfTElCSU5GSVh9CisJZmkKKworCXNjcmlwdD0iJHtEfS8ke2RhdGFkaXJ9LyR7UVRfRElSX05BTUV9L2Vudmlyb25tZW50LXNldHVwIgorCXRvdWNoICRzY3JpcHQKKwllY2hvICdleHBvcnQgUVRfRElSX05BTUU9JHtRVF9ESVJfTkFNRX0nID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgUVRfTElCSU5GSVg9JHtRVF9MSUJJTkZJWH0nID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfQVI9YXInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfQ0M9Z2NjJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FX1FNQUtFX0NYWD1nKysnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfTElOSz1nKysnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfTElCRElSX1FUPSR7bGliZGlyfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9JTkNESVJfUVQ9JHtpbmNsdWRlZGlyfS8ke1FUX0RJUl9OQU1FfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9NT0M9JHtiaW5kaXJ9L21vYycgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9VSUM9JHtiaW5kaXJ9L3VpYycgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9VSUMzPSR7YmluZGlyfS91aWMzJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FX1FNQUtFX1JDQz0ke2JpbmRpcn0vcmNjJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FX1FNQUtFX1FEQlVTQ1BQMlhNTD0ke2JpbmRpcn0vcWRidXNjcHAyeG1sJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FX1FNQUtFX1FEQlVTWE1MMkNQUD0ke2JpbmRpcn0vcWRidXN4bWwyY3BwJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FX1FNQUtFX1FUX0NPTkZJRz0ke2RhdGFkaXJ9LyR7UVRfRElSX05BTUV9L21rc3BlY3MvcWNvbmZpZy5wcmknID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgUU1BS0VTUEVDPSR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vbWtzcGVjcy9saW51eC1nKysnID4+ICRzY3JpcHQKKwljaG1vZCAwNzU1ICRzY3JpcHQKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDRfYXJjaC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0X2FyY2guaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NGMyODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0X2FyY2guaW5jCkBAIC0wLDAgKzEsMjIgQEAKK2luaGVyaXQgc2l0ZWluZm8KKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKK3NldF9hcmNoKCkgeworICAgY2FzZSAke1RBUkdFVF9BUkNIfSBpbgorICAgICAgIGFhcmNoNjQqKSBRVF9BUkNIPWFhcmNoNjQgOzsKKyAgICAgICBhcm0qKSAgICAgUVRfQVJDSD1hcm0gOzsKKyAgICAgICBpKjg2KikgICAgUVRfQVJDSD1pMzg2IDs7CisgICAgICAgbWlwcyopICAgIFFUX0FSQ0g9bWlwcyA7OworICAgICAgIHBvd2VycGMqKSBRVF9BUkNIPXBvd2VycGMgOzsKKyAgICAgICB4ODZfNjQqKSAgUVRfQVJDSD14ODZfNjQgOzsKKyAgIGVzYWMKK30KKworc2V0X2VuZGlhbigpIHsKKyAgICBpZiBbICR7U0lURUlORk9fRU5ESUFOTkVTU30gPSAibGUiIF0gOyB0aGVuCisgICAgICAgIFFUX0VORElBTj0iLWxpdHRsZS1lbmRpYW4iCisgICAgZWxpZiBbICR7U0lURUlORk9fRU5ESUFOTkVTU30gPSAiYmUiIF0gOyB0aGVuCisgICAgICAgIFFUX0VORElBTj0iLWJpZy1lbmRpYW4iCisgICAgZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L1JFQURNRSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDc1NThkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvUkVBRE1FCkBAIC0wLDAgKzEsMTMgQEAKK1RoZSByZWNpcGVzLXJ0IHJlY2lwZXMgcHJvdmlkZSBwYWNrYWdlIGFuZCBpbWFnZSByZWNpcGVzIGZvciB1c2luZyBhbmQgdGVzdGluZwordGhlIFBSRUVNUFRfUlQga2VybmVsLiBUaGUgY29yZS1pbWFnZS1ydCouYmIgaW1hZ2VzIGFyZSBtaW5pbWFsIGltYWdlcyB3aXRoCithIGNvdXBsZSBleHRyYSBwYWNrYWdlcywgaW5jbHVkaW5nIHJ0LXRlc3RzLiBJbiBvcmRlciB0byBidWlsZCB0aGUgaW1hZ2Ugd2l0aAordGhlIGxpbnV4LXlvY3RvLXJ0IGtlcm5lbCwgYmUgc3VyZSB0byBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgbGluZSBpbiB5b3VyCitsb2NhbC5jb25mLCBiYmxheWVycy5jb25mLCBvciB5b3VyICRNQUNISU5FLmNvbmYuCisKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA9ICJsaW51eC15b2N0by1ydCIKKworSWYgeW91IGFyZSBjcmVhdGluZyBhIG5ldyBCU1Agd2hpY2ggc2hvdWxkIHVzZSBsaW51eC15b2N0by1ydCBieSBkZWZhdWx0LAordXNlIHRoZSBsaW5lIGFib3ZlIGluIHRoZSAkTUFDSElORS5jb25mIGluIHlvdXIgQlNQIGxheWVyLCBhbmQgc3BlY2lmeSB0aGUKK2ZvbGxvd2luZyBpbiBhIGxpbnV4LXlvY3RvLXJ0IGJiYXBwZW5kIHJlY2lwZToKKworQ09NUEFUSUJMRV9NQUNISU5FXyRNQUNISU5FID0gJE1BQ0hJTkUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L2ltYWdlcy9jb3JlLWltYWdlLXJ0LXNkay5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L2ltYWdlcy9jb3JlLWltYWdlLXJ0LXNkay5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjdkNTgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvaW1hZ2VzL2NvcmUtaW1hZ2UtcnQtc2RrLmJiCkBAIC0wLDAgKzEsMTIgQEAKK3JlcXVpcmUgcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwuYmIKKworREVTQ1JJUFRJT04gPSAiU21hbGwgaW1hZ2UgY2FwYWJsZSBvZiBib290aW5nIGEgZGV2aWNlIHdpdGggYSB0ZXN0IHN1aXRlIGFuZCBcCit0b29scyBmb3IgcmVhbC10aW1lIHVzZS4gSXQgaW5jbHVkZXMgdGhlIGZ1bGwgbWV0YS10b29sY2hhaW4sIGRldmVsb3BtZW50IFwKK2hlYWRlcnMgYW5kIGxpYnJhcmllcyB0byBmb3JtIGEgc3RhbmRhbG9uZSBTREsuIgorREVQRU5EUyA9ICJsaW51eC15b2N0by1ydCIKKworSU1BR0VfRkVBVFVSRVMgKz0gImRldi1wa2dzIHRvb2xzLXNkayB0b29scy1kZWJ1ZyBlY2xpcHNlLWRlYnVnIHRvb2xzLXByb2ZpbGUgdG9vbHMtdGVzdGFwcHMgZGVidWctdHdlYWtzIgorCitJTUFHRV9JTlNUQUxMICs9ICJydC10ZXN0cyBod2xhdGRldGVjdCBrZXJuZWwtZGV2IgorCitMSUNFTlNFID0gIk1JVCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L2ltYWdlcy9jb3JlLWltYWdlLXJ0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvaW1hZ2VzL2NvcmUtaW1hZ2UtcnQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FiNmY4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L2ltYWdlcy9jb3JlLWltYWdlLXJ0LmJiCkBAIC0wLDAgKzEsOSBAQAorcmVxdWlyZSByZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC5iYgorCitERVNDUklQVElPTiA9ICJBIHNtYWxsIGltYWdlIGp1c3QgY2FwYWJsZSBvZiBhbGxvd2luZyBhIGRldmljZSB0byBib290IHBsdXMgYSBcCityZWFsLXRpbWUgdGVzdCBzdWl0ZSBhbmQgdG9vbHMgYXBwcm9wcmlhdGUgZm9yIHJlYWwtdGltZSB1c2UuIgorREVQRU5EUyA9ICJsaW51eC15b2N0by1ydCIKKworSU1BR0VfSU5TVEFMTCArPSAicnQtdGVzdHMgaHdsYXRkZXRlY3QiCisKK0xJQ0VOU0UgPSAiTUlUIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvMDAwMS1ydC10ZXN0cy1BbGxvdy1mb3ItdXNlci1zcGVjaWZpZWQtUFlMSUIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy8wMDAxLXJ0LXRlc3RzLUFsbG93LWZvci11c2VyLXNwZWNpZmllZC1QWUxJQi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjQ5M2ViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvMDAwMS1ydC10ZXN0cy1BbGxvdy1mb3ItdXNlci1zcGVjaWZpZWQtUFlMSUIucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSA2Njc2NTUyMmI2MzQ5NTIzNDZmMWEzYWI3ZDAwYzcyMjJhMWY5MzYxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorTWVzc2FnZS1JZDogPDY2NzY1NTIyYjYzNDk1MjM0NmYxYTNhYjdkMDBjNzIyMmExZjkzNjEuMTM0NzQxOTU5Ny5naXQuZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KK0Zyb206IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorRGF0ZTogVHVlLCAxMSBTZXAgMjAxMiAxNToxOTozMCAtMDcwMAorU3ViamVjdDogW1BBVENIIDEvMl0gcnQtdGVzdHM6IEFsbG93IGZvciB1c2VyLXNwZWNpZmllZCBQWUxJQgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitBbGxvdyB1c2VycyAoYnVpbGQgc3lzdGVtcykgdG8gc3BlY2lmeSBQWUxJQi4gVGhpcyBhbGxvd3MgZm9yIGEKK2Nyb3NzLWJ1aWxkLXN5c3RlbSB0byBzcGVjaWZ5IHRoZSB0YXJnZXQgUFlMSUIgcmF0aGVyIHRoYW4gdGhlIGhvc3QKK1BZTElCLgorCitTaWduZWQtb2ZmLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KK0NDOiBDbGFyayBXaWxsaWFtcyA8d2lsbGlhbXNAcmVkaGF0LmNvbT4KK0NDOiBKb2huIEthY3VyIDxqa2FjdXJAcmVkaGF0LmNvbT4KKy0tLQorIE1ha2VmaWxlIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggM2E4MjQwNy4uNjFlMmY5ZiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTIzLDcgKzIzLDcgQEAgZW5kaWYKKyBDRkxBR1MgPz0gLURfR05VX1NPVVJDRSAtV2FsbCAtV25vLW5vbm51bGwgLUlzcmMvaW5jbHVkZQorIExERkxBR1MgPz0KKyAKKy1QWUxJQiAgOj0gJChzaGVsbCBweXRob24gLWMgJ2ltcG9ydCBkaXN0dXRpbHMuc3lzY29uZmlnOyAgcHJpbnQgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYigpJykKKytQWUxJQiAgPz0gJChzaGVsbCBweXRob24gLWMgJ2ltcG9ydCBkaXN0dXRpbHMuc3lzY29uZmlnOyAgcHJpbnQgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYigpJykKKyAKKyBpZm5kZWYgREVCVUcKKyAJQ0ZMQUdTCSs9IC1PMgorLS0gCisxLjcuMTEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy8wMDAyLXJ0LXRlc3RzLUJyZWFrLW91dC1pbnN0YWxsX2h3bGF0ZGV0ZWN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvMDAwMi1ydC10ZXN0cy1CcmVhay1vdXQtaW5zdGFsbF9od2xhdGRldGVjdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzYxMzZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvMDAwMi1ydC10ZXN0cy1CcmVhay1vdXQtaW5zdGFsbF9od2xhdGRldGVjdC5wYXRjaApAQCAtMCwwICsxLDY4IEBACitGcm9tIGFmOTNlNTgwZDAwNWEyYmJhNmVkMzY1MjgwMDNhZjRjZjYzMWFkYjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitNZXNzYWdlLUlkOiA8YWY5M2U1ODBkMDA1YTJiYmE2ZWQzNjUyODAwM2FmNGNmNjMxYWRiOC4xMzQ3NDE5NTk3LmdpdC5kdmhhcnRAbGludXguaW50ZWwuY29tPgorSW4tUmVwbHktVG86IDw2Njc2NTUyMmI2MzQ5NTIzNDZmMWEzYWI3ZDAwYzcyMjJhMWY5MzYxLjEzNDc0MTk1OTcuZ2l0LmR2aGFydEBsaW51eC5pbnRlbC5jb20+CitSZWZlcmVuY2VzOiA8NjY3NjU1MjJiNjM0OTUyMzQ2ZjFhM2FiN2QwMGM3MjIyYTFmOTM2MS4xMzQ3NDE5NTk3LmdpdC5kdmhhcnRAbGludXguaW50ZWwuY29tPgorRnJvbTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUdWUsIDExIFNlcCAyMDEyIDE0OjUxOjEwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBydC10ZXN0czogQnJlYWsgb3V0IGluc3RhbGxfaHdsYXRkZXRlY3QKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworQWxsb3cgaHdsYXRkZXRlY3QgdG8gYmUgaW5zdGFsbGVkIGluZGVwZW5kZW50bHkgb2YgdGhlIHJlc3Qgb2YgdGhlCit0ZXN0cy4gVGhpcyBpcyBjb252ZW5pZW50IGZvciBidWlsZCBzeXN0ZW1zIHRoYXQgcGFja2FnZSBpdCBzZXBhcmF0ZWx5CitkdWUgdG8gdGhlIHB5dGhvbiBkZXBlbmRlbmN5LgorCitTaWduZWQtb2ZmLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KK0NDOiBDbGFyayBXaWxsaWFtcyA8d2lsbGlhbXNAcmVkaGF0LmNvbT4KK0NDOiBKb2huIEthY3VyIDxqa2FjdXJAcmVkaGF0LmNvbT4KKy0tLQorIE1ha2VmaWxlIHwgMTggKysrKysrKysrKystLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCA2MWUyZjlmLi42MzZlNjNiIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMTE5LDIxICsxMTksMTUgQEAgY2hhbmdlbG9nOgorIAlnaXQgbG9nID5DaGFuZ2VMb2cKKyAKKyAuUEhPTlk6IGluc3RhbGwKKy1pbnN0YWxsOiBhbGwKKytpbnN0YWxsOiBhbGwgaW5zdGFsbF9od2xhdGRldGVjdAorIAlta2RpciAtcCAiJChERVNURElSKSQoYmluZGlyKSIgIiQoREVTVERJUikkKG1hbmRpcikvbWFuNCIKKyAJbWtkaXIgLXAgIiQoREVTVERJUikkKHNyY2RpcikiICIkKERFU1RESVIpJChtYW5kaXIpL21hbjgiCisgCWNwICQoVEFSR0VUUykgIiQoREVTVERJUikkKGJpbmRpcikiCistCWlmIHRlc3QgLW4gIiQoUFlMSUIpIiA7IHRoZW4gXAorLQkJaW5zdGFsbCAtRCAtbSA3NTUgc3JjL2h3bGF0ZGV0ZWN0L2h3bGF0ZGV0ZWN0LnB5ICQoREVTVERJUikkKFBZTElCKS9od2xhdGRldGVjdC5weSA7IFwKKy0JCXJtIC1mICIkKERFU1RESVIpJChiaW5kaXIpL2h3bGF0ZGV0ZWN0IiA7IFwKKy0JCWxuIC1zICQoUFlMSUIpL2h3bGF0ZGV0ZWN0LnB5ICIkKERFU1RESVIpJChiaW5kaXIpL2h3bGF0ZGV0ZWN0IiA7IFwKKy0JZmkKKyAJaW5zdGFsbCAtRCAtbSA2NDQgc3JjL2JhY2tmaXJlL2JhY2tmaXJlLmMgIiQoREVTVERJUikkKHNyY2RpcikvYmFja2ZpcmUvYmFja2ZpcmUuYyIKKyAJaW5zdGFsbCAtbSA2NDQgc3JjL2JhY2tmaXJlL01ha2VmaWxlICIkKERFU1RESVIpJChzcmNkaXIpL2JhY2tmaXJlL01ha2VmaWxlIgorIAlnemlwIHNyYy9iYWNrZmlyZS9iYWNrZmlyZS40IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW40L2JhY2tmaXJlLjQuZ3oiCisgCWd6aXAgc3JjL2N5Y2xpY3Rlc3QvY3ljbGljdGVzdC44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L2N5Y2xpY3Rlc3QuOC5neiIKKyAJZ3ppcCBzcmMvcGlfdGVzdHMvcGlfc3RyZXNzLjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvcGlfc3RyZXNzLjguZ3oiCistCWd6aXAgc3JjL2h3bGF0ZGV0ZWN0L2h3bGF0ZGV0ZWN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvaHdsYXRkZXRlY3QuOC5neiIKKyAJZ3ppcCBzcmMvcHRzZW1hdGVzdC9wdHNlbWF0ZXN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvcHRzZW1hdGVzdC44Lmd6IgorIAlnemlwIHNyYy9zaWd3YWl0dGVzdC9zaWd3YWl0dGVzdC44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3NpZ3dhaXR0ZXN0LjguZ3oiCisgCWd6aXAgc3JjL3N2c2VtYXRlc3Qvc3ZzZW1hdGVzdC44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3N2c2VtYXRlc3QuOC5neiIKK0BAIC0xNDEsNiArMTM1LDE2IEBAIGluc3RhbGw6IGFsbAorIAlnemlwIHNyYy9iYWNrZmlyZS9zZW5kbWUuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9zZW5kbWUuOC5neiIKKyAJZ3ppcCBzcmMvaGFja2JlbmNoL2hhY2tiZW5jaC44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L2hhY2tiZW5jaC44Lmd6IgorIAorKy5QSE9OWTogaW5zdGFsbF9od2xhdGRldGVjdAorK2luc3RhbGxfaHdsYXRkZXRlY3Q6IGh3bGF0ZGV0ZWN0CisrCWlmIHRlc3QgLW4gIiQoUFlMSUIpIiA7IHRoZW4gXAorKwkJbWtkaXIgLXAgIiQoREVTVERJUikkKGJpbmRpcikiICIkKERFU1RESVIpJChtYW5kaXIpL21hbjgiIDsgXAorKwkJaW5zdGFsbCAtRCAtbSA3NTUgc3JjL2h3bGF0ZGV0ZWN0L2h3bGF0ZGV0ZWN0LnB5ICQoREVTVERJUikkKFBZTElCKS9od2xhdGRldGVjdC5weSA7IFwKKysJCXJtIC1mICIkKERFU1RESVIpJChiaW5kaXIpL2h3bGF0ZGV0ZWN0IiA7IFwKKysJCWxuIC1zICQoUFlMSUIpL2h3bGF0ZGV0ZWN0LnB5ICIkKERFU1RESVIpJChiaW5kaXIpL2h3bGF0ZGV0ZWN0IiA7IFwKKysJCWd6aXAgc3JjL2h3bGF0ZGV0ZWN0L2h3bGF0ZGV0ZWN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvaHdsYXRkZXRlY3QuOC5neiIgOyBcCisrCWZpCisrCisgLlBIT05ZOiByZWxlYXNlCisgcmVsZWFzZTogY2xlYW4gY2hhbmdlbG9nCisgCW1rZGlyIC1wIHJlbGVhc2VzCistLSAKKzEuNy4xMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL01ha2VmaWxlLWZpeC1nemlwLWNvbW1hbmQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9NYWtlZmlsZS1maXgtZ3ppcC1jb21tYW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMzVkZGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9NYWtlZmlsZS1maXgtZ3ppcC1jb21tYW5kLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gMDdiNWVkNDJkNzA0MWNjYzA4NDg4OWVhYTk2ODE3YWEwOTdiZjQ2MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAzIEZlYiAyMDE1IDAzOjEwOjI1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIE1ha2VmaWxlOiBmaXggZ3ppcCBjb21tYW5kCisKK1RoZSAiLWMiIGRvZXNuJ3Qgd29yayBpbiBjb21tYW5kICJnemlwIGZpbGUgLWMiLCBuZWVkIHVzZSAiZ3ppcCAtYyBmaWxlIgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IDIxOWE1OTEuLmM3ZDE0N2EgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0xNDQsNyArMTQ0LDcgQEAgaW5zdGFsbF9od2xhdGRldGVjdDogaHdsYXRkZXRlY3QKKyAJCWluc3RhbGwgLUQgLW0gNzU1IHNyYy9od2xhdGRldGVjdC9od2xhdGRldGVjdC5weSAkKERFU1RESVIpJChQWUxJQikvaHdsYXRkZXRlY3QucHkgOyBcCisgCQlybSAtZiAiJChERVNURElSKSQoYmluZGlyKS9od2xhdGRldGVjdCIgOyBcCisgCQlsbiAtcyAkKFBZTElCKS9od2xhdGRldGVjdC5weSAiJChERVNURElSKSQoYmluZGlyKS9od2xhdGRldGVjdCIgOyBcCistCQlnemlwIHNyYy9od2xhdGRldGVjdC9od2xhdGRldGVjdC44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L2h3bGF0ZGV0ZWN0LjguZ3oiIDsgXAorKwkJZ3ppcCAtYyBzcmMvaHdsYXRkZXRlY3QvaHdsYXRkZXRlY3QuOCA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9od2xhdGRldGVjdC44Lmd6IiA7IFwKKyAJZmkKKyAKKyAuUEhPTlk6IHJlbGVhc2UKKy0tIAorMi4wLjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvZml4LXJlLWluc3RhbGwtZmFpbHVyZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL2ZpeC1yZS1pbnN0YWxsLWZhaWx1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM4ZWM5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL2ZpeC1yZS1pbnN0YWxsLWZhaWx1cmUucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorQ3VycmVudGx5IGd6aXAgb24gaG9zdCBpcyB1c2VkLiBJZiBob3N0IGd6aXAgaXMgcHJvdmlkZWQgYnkgcGlneiwgaXQgZmFpbHMgdG8KK3JlZG8gaW5zdGFsbCB0aGF0IHBpZ3ogY2FuJ3QgaGFuZGxlIHRoZSBvcHRpb24gYWZ0ZXIgZmlsZSBuYW1lLiBXaGVuIHJ1bjoKKworZ3ppcCBzcmMvYmFja2ZpcmUvYmFja2ZpcmUuNCAtYyA+IE9VVFBVVF9GSUxFCisKK0ZpbGUgc3JjL2JhY2tmaXJlL2JhY2tmaXJlLjQgaXMgemlwcGVkIGludG8gYmFja2ZpcmUuNC5neiBidXQgdGhlIE9VVFBVVF9GSUxFCitpcyBlbXB0eS4gV2hlbiByZXJ1biBkb19pbnN0YWxsLCBpdCBzaG93cyB3YXJuaW5nOgorCit8IGd6aXA6IHNyYy9iYWNrZmlyZS9iYWNrZmlyZS40IGRvZXMgbm90IGV4aXN0IC0tIHNraXBwaW5nCisKK2FuZCBlbXB0eSBtYW51YWwgZ3ppcCBmaWxlcyBhcmUgY3JlYXRlZDoKKworJCBmaWxlIGltYWdlL3Vzci9zaGFyZS9tYW4vbWFuNC9iYWNrZmlyZS40Lmd6CitpbWFnZS91c3Ivc2hhcmUvbWFuL21hbjQvYmFja2ZpcmUuNC5nejogZW1wdHkKKworRml4IGl0IGJ5IHB1dHRpbmcgb3B0aW9uICctYycgYmVmb3JlIHRoZSBmaWxlIG5hbWUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorLS0tIGdpdC9NYWtlZmlsZS5vcmlnCTIwMTQtMTEtMTQgMTU6NDc6MjYuNDA2NjM4NDE5ICswODAwCisrKysgZ2l0L01ha2VmaWxlCTIwMTQtMTEtMTQgMTU6NDY6NTMuODkwNjM3NTMzICswODAwCitAQCAtMTI3LDE1ICsxMjcsMTUgQEAKKyAJY3AgJChUQVJHRVRTKSAiJChERVNURElSKSQoYmluZGlyKSIKKyAJaW5zdGFsbCAtRCAtbSA2NDQgc3JjL2JhY2tmaXJlL2JhY2tmaXJlLmMgIiQoREVTVERJUikkKHNyY2RpcikvYmFja2ZpcmUvYmFja2ZpcmUuYyIKKyAJaW5zdGFsbCAtbSA2NDQgc3JjL2JhY2tmaXJlL01ha2VmaWxlICIkKERFU1RESVIpJChzcmNkaXIpL2JhY2tmaXJlL01ha2VmaWxlIgorLQlnemlwIHNyYy9iYWNrZmlyZS9iYWNrZmlyZS40IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW40L2JhY2tmaXJlLjQuZ3oiCistCWd6aXAgc3JjL2N5Y2xpY3Rlc3QvY3ljbGljdGVzdC44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L2N5Y2xpY3Rlc3QuOC5neiIKKy0JZ3ppcCBzcmMvcGlfdGVzdHMvcGlfc3RyZXNzLjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvcGlfc3RyZXNzLjguZ3oiCistCWd6aXAgc3JjL3B0c2VtYXRlc3QvcHRzZW1hdGVzdC44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3B0c2VtYXRlc3QuOC5neiIKKy0JZ3ppcCBzcmMvc2lnd2FpdHRlc3Qvc2lnd2FpdHRlc3QuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9zaWd3YWl0dGVzdC44Lmd6IgorLQlnemlwIHNyYy9zdnNlbWF0ZXN0L3N2c2VtYXRlc3QuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9zdnNlbWF0ZXN0LjguZ3oiCistCWd6aXAgc3JjL3BtcXRlc3QvcG1xdGVzdC44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3BtcXRlc3QuOC5neiIKKy0JZ3ppcCBzcmMvYmFja2ZpcmUvc2VuZG1lLjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvc2VuZG1lLjguZ3oiCistCWd6aXAgc3JjL2hhY2tiZW5jaC9oYWNrYmVuY2guOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9oYWNrYmVuY2guOC5neiIKKysJZ3ppcCAtYyBzcmMvYmFja2ZpcmUvYmFja2ZpcmUuNCA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuNC9iYWNrZmlyZS40Lmd6IgorKwlnemlwIC1jIHNyYy9jeWNsaWN0ZXN0L2N5Y2xpY3Rlc3QuOCA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9jeWNsaWN0ZXN0LjguZ3oiCisrCWd6aXAgLWMgc3JjL3BpX3Rlc3RzL3BpX3N0cmVzcy44ID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3BpX3N0cmVzcy44Lmd6IgorKwlnemlwIC1jIHNyYy9wdHNlbWF0ZXN0L3B0c2VtYXRlc3QuOCA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9wdHNlbWF0ZXN0LjguZ3oiCisrCWd6aXAgLWMgc3JjL3NpZ3dhaXR0ZXN0L3NpZ3dhaXR0ZXN0LjggPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvc2lnd2FpdHRlc3QuOC5neiIKKysJZ3ppcCAtYyBzcmMvc3ZzZW1hdGVzdC9zdnNlbWF0ZXN0LjggPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvc3ZzZW1hdGVzdC44Lmd6IgorKwlnemlwIC1jIHNyYy9wbXF0ZXN0L3BtcXRlc3QuOCA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9wbXF0ZXN0LjguZ3oiCisrCWd6aXAgLWMgc3JjL2JhY2tmaXJlL3NlbmRtZS44ID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3NlbmRtZS44Lmd6IgorKwlnemlwIC1jIHNyYy9oYWNrYmVuY2gvaGFja2JlbmNoLjggPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvaGFja2JlbmNoLjguZ3oiCisgCisgLlBIT05ZOiBpbnN0YWxsX2h3bGF0ZGV0ZWN0CisgaW5zdGFsbF9od2xhdGRldGVjdDogaHdsYXRkZXRlY3QKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL2hhY2tiZW5jaC1maXgtZXJyb3ItY2hlY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9oYWNrYmVuY2gtZml4LWVycm9yLWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxN2ZkZmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9oYWNrYmVuY2gtZml4LWVycm9yLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK2NoaWxkaW5mb190IGlzIGEgdW5pb24gdGhhdCBjb250YWlucyBib3RoIHNpZ25lZCAoZXJyb3IpIGFuZCB1bnNpZ25lZAorKHRocmVhZGlkKSBtZW1iZXJzLiBUaHVzIGEgbGFyZ2UgdGhyZWFkaWQgY291bGQgYXBwZWFyIGFzIGEgbmVnYXRpdmUgZXJyb3IKK3ZhbHVlLCB3aGljaCB3aWxsIGNhdXNlIHVuZXhwZWN0ZWQgZmFpbHVyZXMuCisKK2NoaWxkaW5mb190IHNob3VsZCBiZSBjaGFuZ2VkIHRvIGEgc3RydWN0LCBidXQgaXQgY291bGQgcG90ZW50aWFsbHkgYWZmZWN0IHRoZQorcGVyZm9ybWFuY2UuIFNvIHdlIGtlZXAgaXQgYXMgYSB1bmlvbiBidXQgb25seSBjaGVjayBlcnJvciBhZ2FpbnN0IC0xLiBUaGVyZSBpcworc3RpbGwgYSBjaGFuY2Ugb2YgZmFsc2UgYWxhcm0gYnV0IGl0J3Mgc21hbGwuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTb25nLkxpIDxTb25nLkxpQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBKZXNzZSBaaGFuZyA8c2VuLnpoYW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvaGFja2JlbmNoL2hhY2tiZW5jaC5jIHwgICAgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9oYWNrYmVuY2gvaGFja2JlbmNoLmMgYi9zcmMvaGFja2JlbmNoL2hhY2tiZW5jaC5jCitpbmRleCA4YmFlYjIzLi5kYzBkZThmIDEwMDY0NAorLS0tIGEvc3JjL2hhY2tiZW5jaC9oYWNrYmVuY2guYworKysrIGIvc3JjL2hhY2tiZW5jaC9oYWNrYmVuY2guYworQEAgLTMxNyw3ICszMTcsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGdyb3VwKGNoaWxkaW5mb190ICpjaGlsZCwKKyAJCWN0eC0+d2FrZWZkID0gd2FrZWZkOworIAorIAkJY2hpbGRbdGFiX29mZnNldCtpXSA9IGNyZWF0ZV93b3JrZXIoY3R4LCAodm9pZCAqKSh2b2lkICopcmVjZWl2ZXIpOworLQkJaWYoIGNoaWxkW3RhYl9vZmZzZXQraV0uZXJyb3IgPCAwICkgeworKwkJaWYoIGNoaWxkW3RhYl9vZmZzZXQraV0uZXJyb3IgPT0gLTEgKSB7CisgCQkJcmV0dXJuIChpID4gMCA/IGktMSA6IDApOworIAkJfQorIAkJc25kX2N0eC0+b3V0X2Zkc1tpXSA9IGZkc1sxXTsKK0BAIC0zMzIsNyArMzMyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBncm91cChjaGlsZGluZm9fdCAqY2hpbGQsCisgCQlzbmRfY3R4LT5udW1fZmRzID0gbnVtX2ZkczsKKyAKKyAJCWNoaWxkW3RhYl9vZmZzZXQrbnVtX2ZkcytpXSA9IGNyZWF0ZV93b3JrZXIoc25kX2N0eCwgKHZvaWQgKikodm9pZCAqKXNlbmRlcik7CistCQlpZiggY2hpbGRbdGFiX29mZnNldCtudW1fZmRzK2ldLmVycm9yIDwgMCApIHsKKysJCWlmKCBjaGlsZFt0YWJfb2Zmc2V0K251bV9mZHMraV0uZXJyb3IgPT0gLTEgKSB7CisgCQkJcmV0dXJuIChudW1fZmRzK2kpLTE7CisgCQl9CisgCX0KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9ydF9ibWFyay5weSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL3J0X2JtYXJrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUyMjgwZTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9ydF9ibWFyay5weQpAQCAtMCwwICsxLDQxMiBAQAorIyEvdXNyL2Jpbi9weXRob24KKyMgLSotIGNvZGluZzogdXRmLTggLSotCisKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6ICAgICBCU0QtMy1DbGF1c2UKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEVuZWEgU29mdHdhcmUgQUIKKyMgQXV0aG9yOiBUaG9tYXMgTHVuZHN0csO2bSA8dGhvbWFzLmx1bmRzdHJvbUBlbmVhLmNvbT4KKworIyBUaGUgc2NyaXB0IG1lYXN1cmVzIGludGVycnVwdCBsYXRlbmN5IHRvZ2V0aGVyIHdpdGggZGlmZmVyZW50IHR5cGVzIG9mCisjIHN5c3RlbSBsb2FkLiBUaGlzIGlzIGRvbmUgdXNpbmcgdGhlIHByb2dyYW1zIGN5Y2xpY3Rlc3QgYW5kIHN0cmVzcy4KKyMKKyMgVGhlIG1haW4gb3V0cHV0IGlzOgorIworIyAgIEJlc3QgY2FzZSAobWluKSBsYXRlbmN5CisjICAgICBUaGlzIGhhcyB2ZXJ5IGxpbWl0ZWQgdmFsdWUsIGJ1dCBpcyBwcmVzZW50ZWQgc2luY2UgaXQgY2FuIGJlIGRvbmUKKyMgICAgIGVhc2lseQorIworIyAgIEF2ZXJhZ2UgbGF0ZW5jeQorIyAgICAgVGhpcyB2YWx1ZSBpcyBvZiBpbnRlcnJlc3QgZm9yIHRocm91Z2hwdXQgb3JpZW50ZWQgc3lzdGVtcy4gTGltaXRlZAorIyAgICAgdmFsdWUgZm9yIGEgcmVhbC10aW1lIHN5c3RlbS4gQWxzbyBwcmVzZW50ZWQgYmVjYXVzZSBpdCBpcyBlYXN5IHRvIGRvLgorIworIyAgIFdvcnN0IGNhc2UgKG1heCkgbGF0ZW5jeQorIyAgICAgVGhpcyBpcyB0aGUgaW50ZXJlc3RpbmcgbnVtYmVyIGZvciBhIHJlYWwtdGltZSBzeXN0ZW0uIFRoZSBudW1iZXIKKyMgICAgIHByZXNlbnRlZCBpcyAob2YgY291cmNlKSB0aGUgbGFyZ2VzdCBudW1iZXIgb2JzZXJ2ZWQuIFRoZSBjaGFsbGVuZ2UKKyMgICAgIGlzIHRvIGtub3cgaG93IHRoZSBvYnNlcnZlZCB3b3JzdCBjYXNlIHJlbGF0ZXMgdG8gdGhlIGFjdHVhbCB3b3JzdCBjYXNlLgorIworIyAgICAgVG8gZ2V0IGFuIGluZGljYXRpb24gb2YgdGhlIGNvbmZpZGVuY2UsIHRoZSBmb2xsb3dpbmcgbWV0aG9kIGlzIHVzZWQ6CisjICAgICAxKSBJbnN0ZWFkIG9mIG9uZSBsb25nIHJ1biwgdGhlIG1lYXN1cmVtZW50IGlzIG1hZGUgYXMgYSBzZXQgb2Ygc2hvcnRlcgorIyAgICAgICAgcnVucy4gVGhlIG51bWJlciBvZiBydW5zIG11c3QgYmUgYSBwb3dlciBvZiAyIGZvciByZWFzb25zIHRoYXQgd2lsbAorIyAgICAgICAgc2hvcmx0eSBiZSBvYnZpb3VzCisjCisjICAgICAyKSBGaXJzdCwgYSBsaXN0IG9mIHRoZSBtYXggdmFsdWVzIGFyZSBjcmVhdGVkLgorIworIyAgICAgMykgVGhlIHNtYWxsZXN0IHZhbHVlIGluIHRoYXQgbGlzdCBpcyByZWNvcmRlZC4KKyMKKyMgICAgIDQpIFRoZW4gYSBuZXcgbGlzdCBpcyBjcmVhdGUgYnkgdGFraW5nIHRoZSBtYXggdmFsdWUgb2YgZWFjaCBwYWlyIG9mCisjICAgICAgICB2YWx1ZXMgaW4gdGhlIG9yaWdpbmFsIGxpc3QuIEluIHRoaXMgbGlzdCB0aGUgc21hbGxlc3QgdmFsdWUgaXMKKyMgICAgICAgIHJlY29yZGVkLgorIworIyAgICAgNSkgU3RlcCAzIGlzIHJlcGVhdGVkIHVudGlsIHRoZXJlIGlzIG9ubHkgb25lIHZhbHVlIGluIHRoZSBsaXN0LiBTZWUKKyMgICAgICAgIGV4YW1wbGUgYmVsb3c6CisjCisjICAgICAgICBTYW1wbGVzOgorIyAgICAgICAgICB8ICA0NCB8ICAgICB8ICAgICB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgIDc3IHwgIDc3IHwgICAgIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAxMTggfCAgICAgfCAgICAgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8IDExOSB8IDExOSB8IDExOSB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgMTM4IHwgICAgIHwgICAgIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAgNTcgfCAxMzggfCAgICAgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8IDE3NSB8ICAgICB8ICAgICB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgMTMwIHwgMTc1IHwgMTc1IHwgMTc1IHwgICAgIHwKKyMgICAgICAgICAgfCAgNTQgfCAgICAgfCAgICAgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8IDE1MCB8IDE1MCB8ICAgICB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgIDQ3IHwgICAgIHwgICAgIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAgNTkgfCAgNTkgfCAxNTAgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8IDE5OSB8ICAgICB8ICAgICB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgMTE1IHwgMTk5IHwgICAgIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAxNzcgfCAgICAgfCAgICAgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8IDEyOSB8IDE3NyB8IDE5OSB8IDE5OSB8IDE5OSB8CisjCisjICAgICAgICBTbWFsbGVzdCB2YWx1ZToKKyMgICAgICAgICAgfCAgNDQgfCAgNTkgfCAxMTkgfCAxNzUgfCAxOTkgfAorIworIyAgICAgNikgVGhlIGdlbmVyYXRlZCBsaXN0IG9mIHNtYWxsZXN0IHZhbHVlcyBpcyBhbmFseXplZC4gSW4gdGhpcyBjYXNlLCBpdAorIyAgICAgICAgY2FuIGJlIG9ic2VydmVkIHRoYXQgdGhlIHZhbHVlcyBhcmUgaW5jcmVhc2luZyBzaWduaWZpY2FudGx5IHRocm91Z2gKKyMgICAgICAgIHRoZSBlbnRpcmUgbGlzdCwgd2hpY2ggbGVhZHMgdG8gdGhlIGNvbmNsdXNpb24gdGhhdCB0aGUgbnVtYmVyIG9mCisjICAgICAgICBzYW1wbGVzIGlzIHRvbyBzbWFsbC4KKyMgICAgICAgIElmIGluc3RlYWQgdGhlIGxpc3QgaGFkIGJlZW4gKDE2NywgMTkxLCAxOTYsIDE5OSwgMTk5KSwgdGhlcmUgaGFkCisjICAgICAgICBiZWVuIGEgdmVyeSBzbWFsbCwgb3Igbm8sIGluY3JlYXNlIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QuIFdlIG1pZ2h0CisjICAgICAgICB0aGVuIHN1c3BlY3QgdGhhdCB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgaXMgcHJvYmFibHkgbGFyZ2UgZW5vdWdoLgorIyAgICAgICAgVGhlcmUgaXMgaG93ZXZlciBubyBndWFyYW50ZWUgZm9yIHRoYXQuCisjCisjICAgICBTdGVwcyAxLTIgYXJlIGRvbmUgaW4gcnVuX2N5Y2xpY3Rlc3Rfc3VpdGUKKyMgICAgIFN0ZXBzIDMtNSBhcmUgZG9uZSBpbiBnZW5fbWlubWF4X2xpc3QuCisjICAgICBTdGVwIDYgbmVlZHMgdG8gYmUgZG9uZSBtYW51YWxseSBzaW5jZSB0aGVyZSBpcyAoeWV0KSBubyB3ZWxsIGRlZmluZWQKKyMgICAgIEZBSUwgY3JpdGVyaW9uIGFuZCBhIHRoZW9yZXRpY2FsbHkgc29saWQgUEFTUyBjcml0ZXJpb24gbWF5IG5ldmVyIGJlCisjICAgICBhdmFpbGFibGUuCisKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRpbWUKK2ltcG9ydCB0cmFjZWJhY2sKKworIyBTZWUgY29tbWVudCBvbiB0aGUgZnVuY3Rpb24gc2V0X2h1bmdfdG1vCitoYXNfaHVuZ190YXNrX2RldGVjdGlvbiA9IFRydWUKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdEZhaWwoRXhjZXB0aW9uKToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZyk6CisgICAgICAgICAgICAgICAgc2VsZi5tc2cgPSBtc2cKKworICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIlRlc3QgZmFpbHVyZTogKCIgKyBzZWxmLm1zZyArICIpIgorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgdGNfbmFtZShzdWJfbmFtZSk6CisgICAgICAgIHJldHVybiAicnRfYm1hcmsuaW50bGF0LiIgKyBzdWJfbmFtZQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBsb2coKSBkb2VzIHRoZSBzYW1lIGpvYiBhcyBwcmludCBleGNlcHQgdGhhdCBhICcjJyBpcyBhZGRlZCBhdCB0aGUgYmVnaW5uaW5nCisjIG9mIGVhY2ggbGluZS4gVGhpcyBjYXVzZXMgVEVGRUwgdG8gaWdub3JlIGl0CisKK2RlZiBsb2coKm1zZyk6CisgICAgICAgIHRtcCA9ICIiLmpvaW4obWFwKHN0ciwgbXNnKSkgIyAnbWFwKHN0ciwgLi4uJyBhbGxvd3MgbnVtYmVycworICAgICAgICBmb3IgbGluZSBpbiB0bXAuc3BsaXQoIlxuIik6CisgICAgICAgICAgICAgICAgcHJpbnQgIiMiLCBsaW5lCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpa2UgbG9nKCksIGJ1dCB3aXRoIGEgdGltZXN0YW1wIGFkZGVkCisKK2RlZiBsb2dfdHMoKm1zZyk6CisgICAgICAgIHRzID0gdGltZS5sb2NhbHRpbWUoKQorICAgICAgICBzdGFtcCA9ICIlMmQ6JTAyZDolMDJkOiAiICUgKHRzLnRtX2hvdXIsIHRzLnRtX21pbiwgdHMudG1fc2VjKQorICAgICAgICBsb2coc3RhbXAsICptc2cpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBsb2dfdGVzdF9oZWFkZXIoc2VxX25vLCBucl9vZl90ZXN0cywgbmFtZSk6CisgICAgICAgIGxvZygiPSIgKiA3OCkKKyAgICAgICAgbG9nKCkKKyAgICAgICAgbG9nKCIgIFRlc3QgY2FzZSAoJWQvJWQpOiAlcyIgJSAoc2VxX25vLCBucl9vZl90ZXN0cywgdGNfbmFtZShuYW1lKSkpCisgICAgICAgIGxvZygpCisgICAgICAgIGxvZygiLiIgKiA3OCkKKyAgICAgICAgbG9nKCkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIHN0YXJ0X3N0cmVzcygqYXJncyk6CisgICAgICAgIHN0cmVzc19jbWQgICAgICAgICA9IFsgInN0cmVzcyIgXQorICAgICAgICBhZGRlZF9zdHJlc3NfdHlwZXMgPSBbXQorICAgICAgICByZXFfc3RyZXNzX3R5cGVzICAgPSBzZXQoYXJncykKKyAgICAgICAgY3B1X2NudCAgICAgICAgICAgID0gc3RyKG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKSkKKworICAgICAgICAjIFRoZSBmdW5jdGlvbiBjb25kX2FkZF9zdHJlc3MgYXBwZW5kcyB0aGUgb3B0aW9ucyB0byB0aGUgc3RyZXNzCisgICAgICAgICMgY29tbWFuZCBpZiB0aGUgc3RyZXNzIHR5cGUgaXMgaW4gdGhlIHNldCBvZiByZXF1ZXN0ZWQgc3RyZXNzIHR5cGVzCisKKyAgICAgICAgZGVmIGNvbmRfYWRkX3N0cmVzcyhzdHJlc3NfdHlwZSwgb3B0aW9ucyk6CisgICAgICAgICAgICAgICAgaWYgc3RyZXNzX3R5cGUgaW4gcmVxX3N0cmVzc190eXBlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9zdHJlc3NfdHlwZXMucmVtb3ZlKHN0cmVzc190eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWRfc3RyZXNzX3R5cGVzLmFwcGVuZChzdHJlc3NfdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVzc19jbWQuZXh0ZW5kKG9wdGlvbnMpCisKKyAgICAgICAgIy0tLS0tLS0tLS0KKworICAgICAgICBjb25kX2FkZF9zdHJlc3MoImlvIiwgIFsiLWkiLCBjcHVfY250XSkKKyAgICAgICAgY29uZF9hZGRfc3RyZXNzKCJjcHUiLCBbIi1jIiwgY3B1X2NudF0pCisgICAgICAgIGNvbmRfYWRkX3N0cmVzcygiaGRkIiwgWyItZCIsIGNwdV9jbnQsICItLWhkZC1ieXRlcyIsICIyME0iXSkKKyAgICAgICAgY29uZF9hZGRfc3RyZXNzKCJ2bSIsICBbIi1tIiwgY3B1X2NudCwgIi0tdm0tYnl0ZXMiLCAiMTBNIl0pCisKKyAgICAgICAgdW5rbm93biA9ICIsICIuam9pbihyZXFfc3RyZXNzX3R5cGVzKQorICAgICAgICBpZiB1bmtub3duICE9ICIiOgorICAgICAgICAgICAgcmFpc2UgVGVzdEZhaWwoIlVua25vd24gc3RyZXNzIHR5cGUocyk6ICVzIiAlIHVua25vd24pCisKKyAgICAgICAgaWYgbm90IGFkZGVkX3N0cmVzc190eXBlczoKKyAgICAgICAgICAgICAgICBsb2coIk5vIHN0cmVzcyByZXF1ZXN0ZWQiKQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgYWRkZWQgICAgICAgICAgPSAiKyIuam9pbihhZGRlZF9zdHJlc3NfdHlwZXMpCisgICAgICAgIHN0cmVzc19jbWRfc3RyID0gIiAiLmpvaW4oc3RyZXNzX2NtZCkKKworICAgICAgICBsb2coIlN0YXJ0aW5nIHN0cmVzcygiLCBhZGRlZCwgIikiKQorICAgICAgICBsb2coIiAgQ29tbWFuZDogJyIsIHN0cmVzc19jbWRfc3RyLCAiJyIpCisgICAgICAgIGxvZygpCisKKyAgICAgICAgIyBwcmVleGVjX2ZuPW9zLnNldHNpZCBjYXVzZXMgc3RyZXNzIHRvIGJlIGV4ZWN1dGVkIGluIGEgc2VwYXJhdGUKKyAgICAgICAgIyBzZXNzaW9uLCA9PiBpdCBnZXRzIGEgbmV3IHByb2Nlc3MgZ3JvdXAgKGluY2wuIGNoaWxkcmVuKS4gSXQKKyAgICAgICAgIyBjYW4gdGhlbiBiZSB0ZXJtaW5hdGVkIHVzaW5nIG9zLmtpbGxwZyBpbiBlbmRfc3RyZXNzIHdpdGhvdXQKKyAgICAgICAgIyB0ZXJtaW5hdGluZyB0aGlzIHNjcmlwdC4KKworICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihzdHJlc3NfY21kLCBwcmVleGVjX2ZuPW9zLnNldHNpZCkKKworICAgICAgICByZXR1cm4gcAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgZW5kX3N0cmVzcyhwKToKKyAgICAgICAgaWYgcCBpcyBOb25lOgorICAgICAgICAgICAgICAgICMgVGhlIHZhbHVlIE5vbmUgaW5kaWNhdGVzIHRoYXQgbm8gc3RyZXNzIHNjZW5hcmlvIHdhcyBzdGFydGVkCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgcC5wb2xsKCkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVGVzdEZhaWwoInN0cmVzcyBwcmVtYXR1cmVseSB0ZXJtaW5hdGVkLiIpCisKKyAgICAgICAgb3Mua2lsbHBnKG9zLmdldHBnaWQocC5waWQpLCBzaWduYWwuU0lHVEVSTSkKKyAgICAgICAgbG9nKCJUZXJtaW5hdGVkIHN0cmVzcyIpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiB1czJobXNfc3RyKHVzKToKKyAgICAgICAgcyA9ICh1cys1MDAwMDApIC8vIDEwMDAwMDAgIyBSb3VuZCBtaWNyb3NlY29uZHMgdG8gcworICAgICAgICBtID0gcy8vNjAKKyAgICAgICAgcyAtPSA2MCptOworICAgICAgICBoID0gbS8vNjAKKyAgICAgICAgbSAtPSA2MCpoCisKKyAgICAgICAgcmV0dXJuICIlZDolMDJkOiUwMmQiICUgKGgsIG0sIHMpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNvbWV0aW1lIHRoZSBodW5nIHRhc2sgc3VwZXJ2aXNpb24gaXMgdHJpZ2dlcmVkIGR1cmluZyBleGVjdXRpb24gb2YKKyMgY3ljbGljdGVzdCAoY3ljbGljdGVzdCBzdGFydmVzIHN0cmVzcykuIFRvIGF2b2lkIHRoYXQsIHRoZSBzdXBlcnZpc2lvbgorIyBpcyB0ZW1wb3JhcmlseSBkaXNhYmxlZAorCitkZWYgc2V0X2h1bmdfdG1vKG5ld190bW8pOgorICAgICAgICBnbG9iYWwgaGFzX2h1bmdfdGFza19kZXRlY3Rpb24KKworICAgICAgICB0bW9fZmlsZSA9ICIvcHJvYy9zeXMva2VybmVsL2h1bmdfdGFza190aW1lb3V0X3NlY3MiCisKKyAgICAgICAgaWYgbm90IGhhc19odW5nX3Rhc2tfZGV0ZWN0aW9uOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBvcy5hY2Nlc3ModG1vX2ZpbGUsIG9zLldfT0spOgorICAgICAgICAgICAgICAgIGxvZygiSHVuZyB0YXNrIGRldGVjdGlvbiBub3Qgc3VwcG9ydGVkIikKKyAgICAgICAgICAgICAgICBsb2coIiAgKEZpbGUgIiwgdG1vX2ZpbGUsICIgbm90IGZvdW5kKSIpCisgICAgICAgICAgICAgICAgaGFzX2h1bmdfdGFza19kZXRlY3Rpb24gPSBGYWxzZQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIG9yaWdfdG1vID0gaW50KHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsiY2F0IiwgdG1vX2ZpbGVdKS5zdHJpcCgpKQorICAgICAgICBpZiBuZXdfdG1vICE9IG9yaWdfdG1vOgorICAgICAgICAgICAgICAgIGNtZCA9ICggImVjaG8gIiArIHN0cihuZXdfdG1vKSArICIgPiAiICsgdG1vX2ZpbGUgKQorICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgICAgICBsb2coIkNoYW5nZWQgdGltZW91dCBmb3IgZGV0ZWN0aW9uIG9mIGh1bmcgdGFza3M6ICIsCisgICAgICAgICAgICAgICAgICAgIG9yaWdfdG1vLCAiIC0+ICIsIG5ld190bW8pCisKKyAgICAgICAgcmV0dXJuIG9yaWdfdG1vCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBnZW5fbWlubWF4X2xpc3QobWF4X2xpc3QpOgorICAgICAgICByZXMgPSBbbWluKG1heF9saXN0KV0KKworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHRtcCA9IG1heF9saXN0CisgICAgICAgICAgICAgICAgbWF4X2xpc3QgPSBbXQorICAgICAgICAgICAgICAgIHdoaWxlIHRtcDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saXN0LmFwcGVuZChtYXgodG1wLnBvcCgwKSwgdG1wLnBvcCgwKSkpCisKKyAgICAgICAgICAgICAgICByZXMuYXBwZW5kKG1pbihtYXhfbGlzdCkpCisKKyAgICAgICAgICAgICAgICBpZiBsZW4obWF4X2xpc3QpIDwgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXMKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGFyYW1ldGVycyBmb3IgY3ljbGljdGVzdDoKKyMKKyMgT24gdGhlIC1TIG9wdGlvbiAoZnJvbSBjeWNsaWN0ZXN0LmMpOgorIyAgLVMgaW1wbGllcyBvcHRpb25zIC1hIC10IC1uIGFuZCBzYW1lIHByaW9yaXR5IG9mIGFsbCB0aHJlYWRzCisjICAgIC1hOiBPbmUgdGhyZWFkIHBlciBjb3JlCisjICAgIC1uOiB1c2UgY2xvY2tfbmFub3NsZWVwIGluc3RlYWQgb2YgcG9zaXggaW50ZXJ2YWwgdGltZXJzCisjICAgIC10OiAod2l0aG91dCBhcmd1bWVudCkgU2V0IG51bWJlciBvZiB0aHJlYWRzIHRvIHRoZSBudW1iZXIKKyMgICAgICAgICBvZiBjcHVzCisKK2ludGVydmFsX2NvcmVfMCA9IDEwMCAgICAgIyBUaW1lciBpbnRlcnZhbCBvbiBjb3JlIDAgW3VzXQoraW50ZXJ2YWxfZGVsdGEgID0gMjAgICAgICAjIEludGVydmFsIGluY3JlbWVudCBmb3IgZWFjaCBjb3JlIFt1c10KK2xvb3BfY291bnQgICAgICA9IDMwMDAwICAgIyBOdW1iZXIgb2YgbG9vcHMgKG9uIGNvcmUgMCkuCisKK2NtZCA9ICgiY3ljbGljdGVzdCIsCisgICAgICAgIi1TIiwgICAgICAgICAgICAgIyBTdGFuZGFyZCBTTVAgdGVzdGluZy4gU2VlIGJlbG93CisgICAgICAgIi1wIiwgIjk5IiwgICAgICAgIyBSVCBwcmlvcml0eSA5OQorICAgICAgICItcSIsICAgICAgICAgICAgICMgUXVpZXQgbW9kZSwgaS5lLiBwcmludCBvbmx5IGEgc3VtbWFyeQorICAgICAgICItaSIsIHN0cihpbnRlcnZhbF9jb3JlXzApLAorICAgICAgICItZCIsIHN0cihpbnRlcnZhbF9kZWx0YSksCisgICAgICAgIi1sIiwgc3RyKGxvb3BfY291bnQpCisgICAgICAgKQorcmV4ID0gcmUuY29tcGlsZSgiQzpccyooXGQrKS4qTWluOlxzKihcZCspLipBdmc6XHMqKFxkKykuKk1heDpccyooXGQrKSIpCisKK2RlZiBydW5fY3ljbGljdGVzdF9vbmNlKCk6CisgICAgICAgIHJlcyA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCkKKworICAgICAgICAjIG1pbmxpc3QgYW5kIG1heGxpc3QgYXJlIGxpc3RzIHdpdGggdGhlIGV4dHJlbWVzIGZvciBlYWNoIGNvcmUKKyAgICAgICAgIyBhdmdfY250IGlzIHRoZSBzdW0gb2YgY3ljbGVzIGZvciBhbGwgY29yZXMKKyAgICAgICAgIyBhdmdfc3VtIGlzIHRoZSBzdW0gb2YgKGN5Y2xlIGNvdW50KmF2ZXJhZ2UpIGZvciBlYWNoIGNvcmUKKyAgICAgICAgIyAgICAgU2luY2UgY3ljbGljdGVzdCBydW5zIGRpZmZlcmVudCBudW1iZXIgb2YgY3ljbGVzIG9uCisgICAgICAgICMgICAgIGRpZmZlcmVudCBjb3JlcywgYXZnX3N1bS9hdmdfY250IGdpdmVzIGEgbW9yZSBhY2N1cmF0ZQorICAgICAgICAjICAgICB2YWx1ZSBvZiB0aGUgb3ZlcmFsbCBhdmVyYWdlIHRoYW4ganVzdCB0YWtpbmcgdGhlIGF2ZXJhZ2UKKyAgICAgICAgIyAgICAgb2YgZWFjaCBjb3JlJ3MgYXZlcmFnZXMKKworICAgICAgICBtaW5saXN0ID0gW10KKyAgICAgICAgbWF4bGlzdCA9IFtdCisgICAgICAgIGF2Z19zdW0gPSAwCisgICAgICAgIGF2Z19jbnQgPSAwCisKKyAgICAgICAgZm9yIGxpbmUgaW4gcmVzLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgICAgIG0gPSByZXguc2VhcmNoKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbmxpc3QuYXBwZW5kKGludChtLmdyb3VwKDIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heGxpc3QuYXBwZW5kKGludChtLmdyb3VwKDQpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBpbnQobS5ncm91cCgxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2Z19zdW0gKz0gbiAqIGludChtLmdyb3VwKDMpKQorICAgICAgICAgICAgICAgICAgICAgICAgYXZnX2NudCArPSBuCisKKyAgICAgICAgcmV0dXJuIG1pbihtaW5saXN0KSwgW2F2Z19zdW0sIGF2Z19jbnRdLCBtYXgobWF4bGlzdCkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQSBwcmVjb25kaXRpb24gZm9yIHRoZSB0cmFja2luZyBvZiBtaW4tbWF4IHZhbHVlcyBpcyB0aGF0CisjIHRoZSBzdWl0ZSBzaXplIG9zIGEgcG93ZXIgb2YgMi4KKworTiAgICAgICAgICA9IDUKK3N1aXRlX3NpemUgPSAyKipOCisKK2VzdF9leGVjX3RpbWVfb25jZSAgPSBpbnRlcnZhbF9jb3JlXzAgKiBsb29wX2NvdW50Citlc3RfZXhlY190aW1lX3N1aXRlID0gc3VpdGVfc2l6ZSAqIGVzdF9leGVjX3RpbWVfb25jZQorCitkZWYgcnVuX2N5Y2xpY3Rlc3Rfc3VpdGUoKToKKyAgICAgICAgbG9nKCJTdGFydGluZyBjeWNsaWN0ZXN0IikKKyAgICAgICAgbG9nKCIgIENvbW1hbmQgICAgICAgICAgOiAiLCAiICIuam9pbihjbWQpKQorICAgICAgICBsb2coIiAgTnVtYmVyIG9mIGN5Y2xlcyA6ICIsIGxvb3BfY291bnQqc3VpdGVfc2l6ZSwKKyAgICAgICAgICAgICIgKCIsIHN1aXRlX3NpemUsICIgc2V0cyBvZiAiLCBsb29wX2NvdW50LCAiIGN5Y2xlcykiKQorICAgICAgICBsb2coIiAgRXhlYy4gdGltZSAoZXN0KSA6ICIsIHVzMmhtc19zdHIoZXN0X2V4ZWNfdGltZV9zdWl0ZSkpCisgICAgICAgIGxvZygpCisKKyAgICAgICAgb3JpZ190bW8gPSBzZXRfaHVuZ190bW8oMCkgIyAwID0+IERpc2FibGUKKworICAgICAgICAjIGZsb2F0KCdpbmYnKSBlbXVsYXRlcyBpbmZpbml0eS4gQXQgbGVhc3QgaW4gdGhlIHNlbnNlIHRoYXQgaXQgaXMKKyAgICAgICAgIyBndWFyYW50ZWVkIHRvIGJlIGxhcmdlciB0aGFuIGFueSBhY3R1YWwgbnVtYmVyLgorICAgICAgICBhY2tfbWluID0gZmxvYXQoJ2luZicpCisgICAgICAgIGFja19hdmcgPSBbMCwgMF0KKworICAgICAgICBsb2coKQorICAgICAgICBsb2dfdHMoIlN0YXJ0IG9mIGV4ZWN1dGlvbiIpCisgICAgICAgIHQgPSB0aW1lLnRpbWUoKQorICAgICAgICBtYXhfbGlzdCA9IFtdCisKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDAsIHN1aXRlX3NpemUpOgorICAgICAgICAgICAgICAgIHRtcF9taW4sIHRtcF9hdmcsIHRtcF9tYXggPSBydW5fY3ljbGljdGVzdF9vbmNlKCkKKworICAgICAgICAgICAgICAgIG1zZyA9ICIlMmQvJTJkOiIgJSAoaSsxLCBzdWl0ZV9zaXplKQorICAgICAgICAgICAgICAgIG1zZyArPSAiIG1pbjogJTRkIiAlIHRtcF9taW4KKyAgICAgICAgICAgICAgICBtc2cgKz0gIiBhdmc6ICU1LjFmIiAlIChmbG9hdCh0bXBfYXZnWzBdKS90bXBfYXZnWzFdKQorICAgICAgICAgICAgICAgIG1zZyArPSAiIG1heDogJTRkIiAlIHRtcF9tYXgKKyAgICAgICAgICAgICAgICBsb2dfdHMobXNnKQorCisgICAgICAgICAgICAgICAgIyBUcmFjayBtaW5pbXVtIHZhbHVlCisgICAgICAgICAgICAgICAgaWYgdG1wX21pbiA8IGFja19taW46CisgICAgICAgICAgICAgICAgICAgICAgICBhY2tfbWluID0gdG1wX21pbgorCisgICAgICAgICAgICAgICAgIyBUcmFjayBzbWFsbGVzdCBtYXggdmFsdWUKKyAgICAgICAgICAgICAgICBtYXhfbGlzdC5hcHBlbmQodG1wX21heCkKKworICAgICAgICAgICAgICAgIGFja19hdmdbMF0gKz0gdG1wX2F2Z1swXQorICAgICAgICAgICAgICAgIGFja19hdmdbMV0gKz0gdG1wX2F2Z1sxXQorCisgICAgICAgIHQgPSB0aW1lLnRpbWUoKS10CisgICAgICAgIGxvZ190cygiQ3ljbGljdGVzdCBjb21wbGV0ZWQuIEFjdHVhbCBleGVjdXRpb24gdGltZToiLAorICAgICAgICAgICAgICAgdXMyaG1zX3N0cih0KjEwMDAwMDApKQorICAgICAgICBsb2coKQorICAgICAgICBzZXRfaHVuZ190bW8ob3JpZ190bW8pCisKKyAgICAgICAgcmV0dXJuIGFja19taW4sIGZsb2F0KGFja19hdmdbMF0pL2Fja19hdmdbMV0sIGdlbl9taW5tYXhfbGlzdChtYXhfbGlzdCkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgY3ljbGljdGVzdF9ydW5uZXI6CisgICAgICAgIGRlZiBydW5fdGVzdChzZWxmLCBzZXFfbm8sIG5yX29mX3Rlc3RzLCBuYW1lLCBzdHJlc3NwYXJhbXMpOgorCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nX3Rlc3RfaGVhZGVyKHNlcV9ubywgbnJfb2ZfdGVzdHMsIG5hbWUpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBzdGFydF9zdHJlc3MoKnN0cmVzc3BhcmFtcykKKworICAgICAgICAgICAgICAgICAgICAgICAgYm1fbWluLCBibV9hdmcsIGJtX21heF9saXN0ID0gcnVuX2N5Y2xpY3Rlc3Rfc3VpdGUoKQorCisgICAgICAgICAgICAgICAgICAgICAgICBlbmRfc3RyZXNzKHApCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGJtX21heCA9IGJtX21heF9saXN0Wy0xXQorCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJNaW46ICVkIHVzIiAlIGJtX21pbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiQXZnOiAlLjFmIHVzIiAlIGJtX2F2ZykKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiTWF4OiAlZCB1cyIgJSBibV9tYXgpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJNYXggbGlzdDogIiwgYm1fbWF4X2xpc3QpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJQQVNTIikKKworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50IHRjX25hbWUobmFtZSksICJbTWluL3VzLEF2Zy91cyxNYXgvdXNdOiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiJWQsJS4xZiwlZCIgJSAoYm1fbWluLGJtX2F2ZywgYm1fbWF4KQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlBBU1M6IiwgdGNfbmFtZShuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQKKworICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgICAgICBsb2coKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJFeGNlcHRpb24hIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coIlRyYWNlYmFjazoiLCB0cmFjZWJhY2suZm9ybWF0X2V4YygpKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiV0Q6ICIsIG9zLmdldGN3ZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiRkFJTCIpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludAorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkZBSUw6IiwgdGNfbmFtZShuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworcnVubmVyID0gY3ljbGljdGVzdF9ydW5uZXIoKQorCit0ZXN0cyA9ICgoIm5vX3N0cmVzcyIsIFtdKSwKKyAgICAgICAgICgiY3B1IiwgIFsiY3B1Il0pLAorICAgICAgICAgKCJoZGQiLCAgWyJoZGQiXSksCisgICAgICAgICAoImlvIiwgICBbImlvIl0pLAorICAgICAgICAgKCJ2bSIsICAgWyJ2bSJdKSwKKyAgICAgICAgICgiZnVsbCIsIFsiaW8iLCAiY3B1IiwgImhkZCIsICJ2bSJdKSwKKyAgICAgICAgICkKKworbnJfb2ZfdGVzdHMgPSBsZW4odGVzdHMpCitmb3Igc2VxX25vLCBwYXJhbXMgaW4gZW51bWVyYXRlKHRlc3RzLCBzdGFydD0xKToKKyAgICAgICAgcnVubmVyLnJ1bl90ZXN0KHNlcV9ubywgbnJfb2ZfdGVzdHMsICpwYXJhbXMpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU2ZDNlMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL3J1bi1wdGVzdApAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9zaAorCitweXRob24gLi9ydF9ibWFyay5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvaHdsYXRkZXRlY3RfMC45Mi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2h3bGF0ZGV0ZWN0XzAuOTIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMxOWViOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2h3bGF0ZGV0ZWN0XzAuOTIuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJIYXJkd2FyZSBsYXRlbmN5IGRldGVjdG9yIgorREVTQ1JJUFRJT04gPSAiUHl0aG9uIHV0aWxpdHkgZm9yIGNvbnRyb2xsaW5nIHRoZSBrZXJuZWwgaGFyZHdhcmUgbGF0ZW5jeSBkZXRlY3Rpb24gbW9kdWxlIChod2xhdF9kZXRlY3Rvci5rbykuIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdC5rZXJuZWwub3JnLz9wPWxpbnV4L2tlcm5lbC9naXQvY2xya3dsbG1zL3J0LXRlc3RzLmdpdCIKK1NFQ1RJT04gPSAidGVzdHMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCisKK3JlcXVpcmUgcnQtdGVzdHMuaW5jCisKK0VYVFJBX09FTUFLRSArPSAiUFlMSUI9JHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfS9kaXN0LXBhY2thZ2VzIgorCitkb19jb21waWxlKCkgeworCW9lX3J1bm1ha2UgaHdsYXRkZXRlY3QKK30KKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgb2VfcnVubWFrZSBpbnN0YWxsX2h3bGF0ZGV0ZWN0IERFU1RESVI9JHtEfSBTQklORElSPSR7c2JpbmRpcn0gXAorCSAgICAgICAgICAgTUFORElSPSR7bWFuZGlyfSBJTkNMVURFRElSPSR7aW5jbHVkZWRpcn0KK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vZGlzdC1wYWNrYWdlcy9od2xhdGRldGVjdC5weSIKK1JERVBFTkRTXyR7UE59ID0gInB5dGhvbiBweXRob24tc3VicHJvY2VzcyBweXRob24tdGV4dHV0aWxzIgorUlJFQ09NTUVORFNfJHtQTn0gPSAia2VybmVsLW1vZHVsZS1od2xhdC1kZXRlY3RvciIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL3J0LXRlc3RzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL3J0LXRlc3RzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzFkYjEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvcnQtdGVzdHMuaW5jCkBAIC0wLDAgKzEsMTkgQEAKKyMgVmVyc2lvbiB2MC45MgorUFYgPSAiMC45MiIKK1NSQ1JFViA9ICI1ZjlmMWUzZmUzMjc0NDBhOWQ0MDVmNGFmOGZlYjE2ZmY3YTkwOWViIgorCitTUkNfVVJJID0gImdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9jbHJrd2xsbXMvcnQtdGVzdHMuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcnQtdGVzdHMtQWxsb3ctZm9yLXVzZXItc3BlY2lmaWVkLVBZTElCLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItcnQtdGVzdHMtQnJlYWstb3V0LWluc3RhbGxfaHdsYXRkZXRlY3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaGFja2JlbmNoLWZpeC1lcnJvci1jaGVjay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS1maXgtZ3ppcC1jb21tYW5kLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1yZS1pbnN0YWxsLWZhaWx1cmUucGF0Y2ggXAorIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCisjIG5lZWQgdG8gYXBwZW5kIHJ0LXRlc3RzJyBkZWZhdWx0IENGTEFHUyB0byBvdXJzCitDRkxBR1MgKz0gIi1JJHtTfS9zcmMvaW5jbHVkZSAtRF9HTlVfU09VUkNFIC1XYWxsIC1Xbm8tbm9ubnVsbCIKKworIyBjYWxsaW5nICd1bmFtZSAtbScgaXMgYnJva2VuIG9uIGNyb3NzYnVpbGRzCitFWFRSQV9PRU1BS0UgPSAiTlVNQT0wIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvcnQtdGVzdHNfMC45Mi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL3J0LXRlc3RzXzAuOTIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJlMmY2NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL3J0LXRlc3RzXzAuOTIuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJSZWFsLVRpbWUgcHJlZW1wdGlvbiB0ZXN0Y2FzZXMiCitIT01FUEFHRSA9ICJodHRwczovL3J0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvQ3ljbGljdGVzdCIKK1NFQ1RJT04gPSAidGVzdHMiCitERVBFTkRTID0gImxpbnV4LWxpYmMtaGVhZGVycyB2aXJ0dWFsL2xpYmMiCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2N5Y2xpY3Rlc3QvY3ljbGljdGVzdC5jO2JlZ2lubGluZT03O2VuZGxpbmU9OTttZDU9ZTc2OGI4ZGE0NDU1NWZlNjNmNjVlNWM0OTc4NDRjYjUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3BpX3Rlc3RzL3BpX3N0cmVzcy5jO2JlZ2lubGluZT02O2VuZGxpbmU9MTk7bWQ1PWJkNDI2YTYzNGE0M2VjNjEyZTlmYmYxMjVkZmNjOTQ5IgorCityZXF1aXJlIHJ0LXRlc3RzLmluYworaW5oZXJpdCBwdGVzdAorCitTUkNfVVJJICs9ICJmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgIGZpbGU6Ly9ydF9ibWFyay5weSBcCisgICAgICAgICAgICIKKyMgRG8gbm90IGluc3RhbGwgaHdsYXRkZXRlY3QKK0VYVFJBX09FTUFLRSArPSAiUFlMSUI9JyciCisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0gU0JJTkRJUj0ke3NiaW5kaXJ9IE1BTkRJUj0ke21hbmRpcn0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5DTFVERURJUj0ke2luY2x1ZGVkaXJ9Cit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisgICAgICAgIGNwICR7V09SS0RJUn0vcnRfYm1hcmsucHkgJHtEfSR7UFRFU1RfUEFUSH0KK30KKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIiBzdHJlc3MgcHl0aG9uIHB5dGhvbi1zdWJwcm9jZXNzIHB5dGhvbi1tdWx0aXByb2Nlc3NpbmcgcHl0aG9uLWRhdGV0aW1lIHB5dGhvbi1yZSBweXRob24tbGFuZyIKKworRklMRVNfJHtQTn0gKz0gIiR7cHJlZml4fS9zcmMvYmFja2ZpcmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2d0ay1lbmdpbmVzL2d0ay1zYXRvLWVuZ2luZS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2d0ay1lbmdpbmVzL2d0ay1zYXRvLWVuZ2luZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUzN2ZmMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vZ3RrLWVuZ2luZXMvZ3RrLXNhdG8tZW5naW5lLmluYwpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIlNhdG8gdGhlbWUgZW5naW5lIGZvciBHVEsrIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vLWhhbmQuY29tIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgJiBMR1BMdjIrIgorCitTRUNUSU9OID0gIngxMS9iYXNlIgorREVQRU5EUyA9ICJndGsrIgorUkRFUEVORFNfZ3RrLXRoZW1lLXNhdG8gPSAiZ3RrLXNhdG8tZW5naW5lIgorCitQQUNLQUdFUyArPSAiZ3RrLXRoZW1lLXNhdG8iCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vZ3RrLTIuMC8qL2VuZ2luZXMvKi5zbyAiCitGSUxFU18ke1BOfS1kZXYgPSAiJHtsaWJkaXJ9L2d0ay0yLjAvKi9lbmdpbmVzLyoubGEiCitGSUxFU18ke1BOfS1kYmcgKz0gIiAke2xpYmRpcn0vZ3RrLTIuMC8qL2VuZ2luZXMvLmRlYnVnIgorRklMRVNfZ3RrLXRoZW1lLXNhdG8gPSAiJHtkYXRhZGlyfS9pY29ucyAke2RhdGFkaXJ9L3RoZW1lcyIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHBrZ2NvbmZpZworCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlmb3IgaSBpbiBgbHMgZ3RrLWNvbW1vbmA7IGRvCisJCWxuIC1zZiAuLi9ndGstY29tbW9uLyRpIGd0azItZW5naW5lLyRpCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9ndGstZW5naW5lcy9ndGstc2F0by1lbmdpbmVfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9ndGstZW5naW5lcy9ndGstc2F0by1lbmdpbmVfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNGQ5OGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2d0ay1lbmdpbmVzL2d0ay1zYXRvLWVuZ2luZV9naXQuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSBndGstc2F0by1lbmdpbmUuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvc2F0by11dGlscy5oO2VuZGxpbmU9MjQ7bWQ1PTcwOGYyOGNmZTdmZTAyOGQ0OTdhYWY0Mzg5YjgwYjYyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9zYXRvLW1haW4uYztlbmRsaW5lPTI0O21kNT1iNWU1ZGRkZWJjYTU3MDI3NWJlY2I1MWI1MjZlNGM1YSIKKworU1JDUkVWID0gIjQ3NDBhZDhkNTNhYmE0MzY4Y2UzZTAzYjA2Y2ZkYzY5ZWI4NmRjZGMiCitQViA9ICIwLjMuMytnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ01BQ0hJTkVfRkVBVFVSRVMnLCAncXZnYScsICctLXdpdGgtbW9kZT1xdmdhJywgJycsZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9pbWFnZXMvY29yZS1pbWFnZS1zYXRvLWRldi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vaW1hZ2VzL2NvcmUtaW1hZ2Utc2F0by1kZXYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZhNjlkMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vaW1hZ2VzL2NvcmUtaW1hZ2Utc2F0by1kZXYuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIGNvcmUtaW1hZ2Utc2F0by5iYgorCitERVNDUklQVElPTiA9ICJJbWFnZSB3aXRoIFNhdG8gZm9yIGRldmVsb3BtZW50IHdvcmsuIEl0IGluY2x1ZGVzIGV2ZXJ5dGhpbmcgXAord2l0aGluIGNvcmUtaW1hZ2Utc2F0byBwbHVzIGEgbmF0aXZlIHRvb2xjaGFpbiwgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgYW5kIFwKK3Rlc3RpbmcgbGlicmFyaWVzLCBwcm9maWxpbmcgYW5kIGRlYnVnIHN5bWJvbHMuIgorCitJTUFHRV9GRUFUVVJFUyArPSAiZGV2LXBrZ3MiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8tc2RrLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9pbWFnZXMvY29yZS1pbWFnZS1zYXRvLXNkay5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjgzNmY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9pbWFnZXMvY29yZS1pbWFnZS1zYXRvLXNkay5iYgpAQCAtMCwwICsxLDE1IEBACityZXF1aXJlIGNvcmUtaW1hZ2Utc2F0by5iYgorCitERVNDUklQVElPTiA9ICJJbWFnZSB3aXRoIFNhdG8gc3VwcG9ydCB0aGF0IGluY2x1ZGVzIGV2ZXJ5dGhpbmcgd2l0aGluIFwKK2NvcmUtaW1hZ2Utc2F0byBwbHVzIG1ldGEtdG9vbGNoYWluLCBkZXZlbG9wbWVudCBoZWFkZXJzIGFuZCBsaWJyYXJpZXMgdG8gXAorZm9ybSBhIHN0YW5kYWxvbmUgU0RLLiIKKworUVQ0UEtHID0gInF0NC1wa2dzIgorUVQ0UEtHX21pcHM2NCA9ICIiCitRVDRQS0dfbWlwczY0bjMyID0gIiIKKworSU1BR0VfRkVBVFVSRVMgKz0gImRldi1wa2dzIHRvb2xzLXNkayAke1FUNFBLR30gXAorCXRvb2xzLWRlYnVnIGVjbGlwc2UtZGVidWcgdG9vbHMtcHJvZmlsZSB0b29scy10ZXN0YXBwcyBkZWJ1Zy10d2Vha3Mgc3NoLXNlcnZlci1vcGVuc3NoIgorCitJTUFHRV9JTlNUQUxMICs9ICJrZXJuZWwtZGV2c3JjIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8uYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8uYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMyNDZkMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vaW1hZ2VzL2NvcmUtaW1hZ2Utc2F0by5iYgpAQCAtMCwwICsxLDExIEBACitERVNDUklQVElPTiA9ICJJbWFnZSB3aXRoIFNhdG8sIGEgbW9iaWxlIGVudmlyb25tZW50IGFuZCB2aXN1YWwgc3R5bGUgZm9yIFwKK21vYmlsZSBkZXZpY2VzLiBUaGUgaW1hZ2Ugc3VwcG9ydHMgWDExIHdpdGggYSBTYXRvIHRoZW1lLCBQaW1saWNvIFwKK2FwcGxpY2F0aW9ucywgYW5kIGNvbnRhaW5zIHRlcm1pbmFsLCBlZGl0b3IsIGFuZCBmaWxlIG1hbmFnZXIuIgorCitJTUFHRV9GRUFUVVJFUyArPSAic3BsYXNoIHBhY2thZ2UtbWFuYWdlbWVudCB4MTEtYmFzZSB4MTEtc2F0byBzc2gtc2VydmVyLWRyb3BiZWFyIGh3Y29kZWNzIgorCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBjb3JlLWltYWdlCisKK0lNQUdFX0lOU1RBTEwgKz0gInBhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvLWdhbWVzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9sZWFmcGFkL2ZpbGVzL2xlYWZwYWQuZGVza3RvcCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbGVhZnBhZC9maWxlcy9sZWFmcGFkLmRlc2t0b3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdlMmQ1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbGVhZnBhZC9maWxlcy9sZWFmcGFkLmRlc2t0b3AKQEAgLTAsMCArMSwxMCBAQAorW0Rlc2t0b3AgRW50cnldCitOYW1lPU5vdGVzCitFeGVjPS91c3IvYmluL2xlYWZwYWQKK0NvbW1lbnQ9VGV4dCBFZGl0b3IKK0ljb249YWNjZXNzb3JpZXMtdGV4dC1lZGl0b3IKK1Rlcm1pbmFsPWZhbHNlCitUeXBlPUFwcGxpY2F0aW9uCitDYXRlZ29yaWVzPUdUSztVdGlsaXR5O1RleHRFZGl0b3I7CitYLU1CLVNpbmdsZUluc3RhbmNlPXRydWUKK1N0YXJ0dXBOb3RpZnk9dHJ1ZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9sZWFmcGFkL2ZpbGVzL293bC1tZW51LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9sZWFmcGFkL2ZpbGVzL293bC1tZW51LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYmY3NGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvZmlsZXMvb3dsLW1lbnUucGF0Y2gKQEAgLTAsMCArMSw2MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbmFibGUgZmVhdHVyZV0KKworLS0tIHRtcC9zcmMvbWVudS5jLm9yaWcJMjAwNy0wNC0yMyAxMjowODo0MS4wMDAwMDAwMDAgKzAxMDAKKysrKyB0bXAvc3JjL21lbnUuYwkyMDA3LTA0LTIzIDEyOjA4OjQxLjAwMDAwMDAwMCArMDEwMAorQEAgLTE1Miw3ICsxNTIsNyBAQAorIAl9CisgCQorIAlhY2NlbF9ncm91cCA9IGd0a19hY2NlbF9ncm91cF9uZXcoKTsKKy0JaWZhY3RvcnkgPSBndGtfaXRlbV9mYWN0b3J5X25ldyhHVEtfVFlQRV9NRU5VX0JBUiwgIjxtYWluPiIsIGFjY2VsX2dyb3VwKTsKKysJaWZhY3RvcnkgPSBndGtfaXRlbV9mYWN0b3J5X25ldyhHVEtfVFlQRV9NRU5VLCAiPG1haW4+IiwgYWNjZWxfZ3JvdXApOworIAlndGtfaXRlbV9mYWN0b3J5X3NldF90cmFuc2xhdGVfZnVuYyhpZmFjdG9yeSwgbWVudV90cmFuc2xhdGUsIE5VTEwsIE5VTEwpOworIAlndGtfaXRlbV9mYWN0b3J5X2NyZWF0ZV9pdGVtcyhpZmFjdG9yeSwgbm1lbnVfaXRlbXMsIG1lbnVfaXRlbXMsIE5VTEwpOworIAlndGtfd2luZG93X2FkZF9hY2NlbF9ncm91cChHVEtfV0lORE9XKHdpbmRvdyksIGFjY2VsX2dyb3VwKTsKKworLS0tIHRtcC9zcmMvd2luZG93LmMub3JpZwkyMDA3LTA0LTIzIDEyOjE0OjA3LjAwMDAwMDAwMCArMDEwMAorKysrIHRtcC9zcmMvd2luZG93LmMJMjAwNy0wNC0yMyAxMjoxNDowNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xOCw2ICsxOCw4IEBACisgICovCisgCisgI2luY2x1ZGUgImxlYWZwYWQuaCIKKysjaW5jbHVkZSA8bGlib3dsL293bHdpbmRvd21lbnUuaD4KKysKKyAvKgorIHN0YXRpYyB2b2lkIGNiX3Njcm9sbF9ldmVudChHdGtBZGp1c3RtZW50ICphZGosIEd0a1dpZGdldCAqdmlldykKKyB7CitAQCAtNTIsNyArNTQsNiBAQAorIAlndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZib3gpOworIAkKKyAJbWVudWJhciA9IGNyZWF0ZV9tZW51X2Jhcih3aW5kb3cpOworLQlndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgbWVudWJhciwgRkFMU0UsIEZBTFNFLCAwKTsKKyAJCisgCXN3ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7CisgCWd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHN3KSwKKworLS0tIHRtcC9zcmMvbWFpbi5jLm9yaWcJMjAwNy0wNC0yMyAxMjoxNTowMy4wMDAwMDAwMDAgKzAxMDAKKysrKyB0bXAvc3JjL21haW4uYwkyMDA3LTA0LTIzIDEyOjE1OjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTI0NCw2ICsyNDQsNyBAQAorIAlDb25mICpjb25mOworIAlHdGtJdGVtRmFjdG9yeSAqaWZhY3Rvcnk7CisgCWdjaGFyICpzdGRpbl9kYXRhID0gTlVMTDsKKysJR3RrV2lkZ2V0ICptZW51OworIAkKKyAJYmluZHRleHRkb21haW4oUEFDS0FHRSwgTE9DQUxFRElSKTsKKyAJYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQoUEFDS0FHRSwgIlVURi04Iik7CitAQCAtMjkzLDcgKzI5NCwxMCBAQAorIAkJY29uZi0+YXV0b2luZGVudCk7CisgCQorIAlndGtfd2lkZ2V0X3Nob3dfYWxsKHB1Yi0+bXctPndpbmRvdyk7CisrCW93bF9zZXRfd2luZG93X21lbnUgKEdUS19XSU5ET1cocHViLT5tdy0+d2luZG93KSwKKysJCQkgICAgIEdUS19NRU5VKHB1Yi0+bXctPm1lbnViYXIpKTsKKysJCisgCWdfZnJlZShjb25mLT5mb250bmFtZSk7CisgCWdfZnJlZShjb25mKTsKKyAJCisKKy0tLSB0bXAvc3JjL01ha2VmaWxlLmFtLm9yaWcJMjAwNy0wNC0yMyAxMjoxNzo1NC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0bXAvc3JjL01ha2VmaWxlLmFtCTIwMDctMDQtMjMgMTI6MTc6NTQuMDAwMDAwMDAwICswMTAwCitAQCAtMjcsNCArMjcsNCBAQAorIAlpMThuLmgKKyAKKyBsZWFmcGFkX0NGTEFHUyAgPSAkKEdUS19DRkxBR1MpICQoR05PTUVQUklOVF9DRkxBR1MpCistbGVhZnBhZF9MREFERCAgID0gJChHVEtfTElCUykgJChJTlRMTElCUykgJChHTk9NRVBSSU5UX0xJQlMpCisrbGVhZnBhZF9MREFERCAgID0gJChHVEtfTElCUykgJChJTlRMTElCUykgJChHTk9NRVBSSU5UX0xJQlMpIC1sb3dsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvbGVhZnBhZF8wLjguMTguMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbGVhZnBhZC9sZWFmcGFkXzAuOC4xOC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MTUxNDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvbGVhZnBhZF8wLjguMTguMS5iYgpAQCAtMCwwICsxLDM1IEBACitTVU1NQVJZID0gIlNpbXBsZSBHVEsrIFRleHQgRWRpdG9yIgorSE9NRVBBR0UgPSAiaHR0cDovL3Rhcm90LmZyZWVzaGVsbC5vcmcvbGVhZnBhZC8iCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbGVhZnBhZC5oO2VuZGxpbmU9MjA7bWQ1PWQzZDZhODlmNWU2MWU4YjEzYmRlYTUzNzUxMWJhMWZhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy91dGlscy5jO2VuZGxpbmU9MjA7bWQ1PTBkMmNjNjU4NGJhMzIwMjQ0OGJiMjc0ZjYyNzM5NTcxIgorCitERVBFTkRTID0gImd0aysgaW50bHRvb2wtbmF0aXZlIGxpYm93bCIKKyMgVGhlIGxpYm93bCByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitTUkNfVVJJID0gIiR7U0FWQU5OQUhfTk9OR05VX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorCSAgIGZpbGU6Ly9sZWFmcGFkLmRlc2t0b3AiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyNTRhNzJmYzY3NTA1ZTNhYTUyODg0YzcyOWNkN2I5NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5NTlkMjJhZTA3ZjIyODAzYmM2NmZmNDBkMzczYTg1NDUzMmE2ZTQ3MzI2ODBiZjhhOTZhM2ZiY2I5ZjgwYTJjIgorUFIgPSAicjIiCisKK1NSQ19VUklfYXBwZW5kX3Bva3kgPSAiIGZpbGU6Ly9vd2wtbWVudS5wYXRjaDthcHBseT15ZXMgIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK0VYVFJBX09FQ09ORiA9ICIgLS1lbmFibGUtY2hvb3NlciAtLWRpc2FibGUtZW1hY3MgLS1kaXNhYmxlLXByaW50IgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtEfS8ke2RhdGFkaXJ9CisgICAgICAgIGluc3RhbGwgLWQgJHtEfS8ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucworICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9sZWFmcGFkLmRlc2t0b3AgJHtEfS8ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucworfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvbGVhZnBhZC5kZXNrdG9wIgorCitQQUNLQUdFUyArPSAibGVhZnBhZC1zdG9jay1pY29ucyIKK0ZJTEVTX2xlYWZwYWQtc3RvY2staWNvbnMgPSAiJHtkYXRhZGlyfS9pY29ucy9oaWNvbG9yLyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbGlib3dsL2xpYm93bF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2xpYm93bC9saWJvd2xfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYzQ3ZGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2xpYm93bC9saWJvd2xfZ2l0LmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiT3BlbmVkSGFuZCBXaWRnZXQgTGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuby1oYW5kLmNvbSIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYm93bC9vd2xwYW5lZC5oO2VuZGxpbmU9MjA7bWQ1PTdmZWY4NDRjNGNjMDFiMTA1NDFhN2FiNmFiNTk3MWFmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYm93bC9vd2x0cmVlbW9kZWxzbGljZS5oO2VuZGxpbmU9MjA7bWQ1PWE1NDIxZjJjZGFlOGRlYmU1ZTRjNDhjMDlhMDJiZWI5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYm93bC9vd2xjb2xvdXJzd2F0Y2guaDtlbmRsaW5lPTI0O21kNT0wNjNjNDE1YzU4NzE5ZDUzNjk5MGNhOGY2MDZiNTczMCIKKworU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJndGsrIgorU1JDUkVWID0gIjZlYmM4YWM4Zjg1NzUyNzhkZDQwYTUzNWNhZGVmYTI2Mzc0ZTQ0YjEiCitQViA9ICIwLjErZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgUmVxdWlyZXMgZ2RrL2dka3guaCB3aGljaCBpcyBwcm92aWRlZCBieSBndGsgd2hlbiB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1jb25maWctZ3RrL2ZpbGVzL25vLWhhbmRlZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtY29uZmlnLWd0ay9maWxlcy9uby1oYW5kZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI1Njk0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtY29uZmlnLWd0ay9maWxlcy9uby1oYW5kZWQucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogYXBwZWFyYW5jZS9tYi1hcHBlYXJhbmNlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcHBlYXJhbmNlL21iLWFwcGVhcmFuY2UuYwkocmV2aXNpb24gMTYxNCkKKysrKyBhcHBlYXJhbmNlL21iLWFwcGVhcmFuY2UuYwkod29ya2luZyBjb3B5KQorQEAgLTMwMCwxMSArMzAwLDEzIEBACisgICAgIGd0a19mb250X2J1dHRvbl9zZXRfZm9udF9uYW1lIChHVEtfRk9OVF9CVVRUT04gKGZvbnRfYnV0dG9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjb25mX3ZhbHVlX2dldF9zdHJpbmcgKHZhbHVlKSk7CisgICB9IGVsc2UgaWYgKHN0cmNtcCAoa2V5LCBIQU5ERURfS0VZKSA9PSAwKSB7CisrI2lmIDAKKyAgICAgR0VudW1WYWx1ZSAqZTsKKyAgICAgZSA9IGdfZW51bV9nZXRfdmFsdWVfYnlfbmFtZSAoZ190eXBlX2NsYXNzX3JlZiAoR1RLX1RZUEVfQ09STkVSX1RZUEUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY29uZl92YWx1ZV9nZXRfc3RyaW5nICh2YWx1ZSkpOworICAgICBndGtfdG9nZ2xlX2J1dHRvbl9zZXRfYWN0aXZlIChHVEtfVE9HR0xFX0JVVFRPTiAoaGFuZGVkX2NoZWNrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS0+dmFsdWUgPT0gR1RLX0NPUk5FUl9UT1BfUklHSFQpOworKyNlbmRpZgorICAgfQorIH0KKyAKK0BAIC0zOTUsMTIgKzM5NywxMyBAQAorICAgZ3RrX2NvbnRhaW5lcl9hZGQgKEdUS19DT05UQUlORVIgKGFsaWduKSwgZm9udF9idXR0b24pOworIAorICAgLyogTGVmdC9SaWdodCBIYW5kZWQgKi8KKy0gIAorKyNpZiAwCisgICBmcmFtZSA9IG5ld19mcmFtZSAoXygiT3JpZW50YXRpb24iKSwgJmFsaWduKTsKKyAgIGd0a19ib3hfcGFja19zdGFydCAoR1RLX0JPWCAoYm94KSwgZnJhbWUsIFRSVUUsIFRSVUUsIDApOworICAgaGFuZGVkX2NoZWNrID0gZ3RrX2NoZWNrX2J1dHRvbl9uZXdfd2l0aF9tbmVtb25pYyAoXygiX0xlZnQtaGFuZGVkIikpOworICAgZ19zaWduYWxfY29ubmVjdCAoaGFuZGVkX2NoZWNrLCAidG9nZ2xlZCIsIEdfQ0FMTEJBQ0sgKG9uX2hhbmRlZF9zZXQpLCBOVUxMKTsKKyAgIGd0a19jb250YWluZXJfYWRkIChHVEtfQ09OVEFJTkVSIChhbGlnbiksIGhhbmRlZF9jaGVjayk7CisrI2VuZGlmCisgCisgICBnY29uZl9jbGllbnRfYWRkX2RpciAoZ2NvbmYsIElOVEVSRkFDRV9ESVIsIEdDT05GX0NMSUVOVF9QUkVMT0FEX09ORUxFVkVMLCBOVUxMKTsKKyAgIGdfc2lnbmFsX2Nvbm5lY3QgKGdjb25mLCAidmFsdWUtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sgKG9uX2djb25mX3ZhbHVlX2NoYW5nZWQpLCBOVUxMKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtY29uZmlnLWd0ay9tYXRjaGJveC1jb25maWctZ3RrX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtY29uZmlnLWd0ay9tYXRjaGJveC1jb25maWctZ3RrX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjczYTRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1jb25maWctZ3RrL21hdGNoYm94LWNvbmZpZy1ndGtfZ2l0LmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiTWF0Y2hib3ggR1RLKyB0aGVtZSBjb25maWd1cmF0aW9uIGFwcGxpY2F0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXBwZWFyYW5jZS9tYi1hcHBlYXJhbmNlLmM7ZW5kbGluZT0yNTttZDU9ZWE5MjMzM2NmOGE2ODAyNjM5ZDYyZDg3NGMxMTRhMjgiCisKK0RFUEVORFMgPSAiZ2NvbmYgZ3RrKyIKK1JERVBFTkRTXyR7UE59ID0gInNldHRpbmdzLWRhZW1vbiIKKworU1JDUkVWID0gIjNlZDc0ZGZiN2M1N2JlMDg4YTVhYjM2ZTQ0NmMwY2NkZTlmYTEwMjgiCitQViA9ICIwLjArZ2l0JHtTUkNQVn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IFwKKyAgICAgICAgZmlsZTovL25vLWhhbmRlZC5wYXRjaDtzdHJpcGxldmVsPTAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgc2V0dGluZ3MtZGFlbW9uIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3Atc2F0by9tYXRjaGJveC1kZXNrdG9wLXNhdG9fZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wLXNhdG8vbWF0Y2hib3gtZGVza3RvcC1zYXRvX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTc5Y2JiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wLXNhdG8vbWF0Y2hib3gtZGVza3RvcC1zYXRvX2dpdC5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIk1hdGNoYm94IGRlc2t0b3AgZm9sZGVycyBmb3IgdGhlIFNhdG8gZW52aXJvbm1lbnQiCitIT01FUEFHRSA9ICJodHRwOi8vbWF0Y2hib3gtcHJvamVjdC5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIgorCitTRUNUSU9OID0gIngxMSIKK0RFUEVORFMgPSAiIgorUkNPTkZMSUNUU18ke1BOfSA9ICJtYXRjaGJveC1jb21tb24iCisKK1NSQ1JFViA9ICI4MTBiMGIwOGViNzllNDY4NTIwMmRhMmVjMzQ3Yjk5MGJiNDY3ZTA3IgorUFYgPSAiMC4xK2dpdCR7U1JDUFZ9IgorUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3AvbWF0Y2hib3gtZGVza3RvcF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3AvbWF0Y2hib3gtZGVza3RvcF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE4ZDJlMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9tYXRjaGJveC1kZXNrdG9wX2dpdC5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIk1hdGNoYm94IFdpbmRvdyBNYW5hZ2VyIERlc2t0b3AiCitIT01FUEFHRSA9ICJodHRwOi8vbWF0Y2hib3gtcHJvamVjdC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYnRha3UvZWdnc2VxdWVuY2UuaDtlbmRsaW5lPTIwO21kNT1iOTFmNjhmNzY0MmExNDU5ZmExZjRjOWRmOTRhOGYxNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZGVza3RvcC5jO2VuZGxpbmU9MjA7bWQ1PTM2YzliZjI5NWU2MDA3ZjM0MjMwOTVmNDA1YWY1YTJkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9tYWluLmM7ZW5kbGluZT0xOTttZDU9MjA0NDI0NGY5N2ExOTVjMjViN2RjNjAyYWM3ZTlhMDAiCisKK0RFUEVORFMgPSAiZ3RrKyBzdGFydHVwLW5vdGlmaWNhdGlvbiBkYnVzIgorU0VDVElPTiA9ICJ4MTEvd20iCitTUkNSRVYgPSAiNzFlM2U2ZTA0MjcxZTlkNWExNGYxYzIzMWVmMTAwYzdmMzIwMTM0ZCIKK1BWID0gIjIuMCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0tMiIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXN0YXJ0dXAtbm90aWZpY2F0aW9uIC0td2l0aC1kYnVzIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIHN0YXJ0dXAtbm90aWZpY2F0aW9uIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWtleWJvYXJkL2ZpbGVzLzgwbWF0Y2hib3hrZXlib2FyZC5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvZmlsZXMvODBtYXRjaGJveGtleWJvYXJkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZjE4OGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWtleWJvYXJkL2ZpbGVzLzgwbWF0Y2hib3hrZXlib2FyZC5zaApAQCAtMCwwICsxLDIxIEBACisjIS9iaW4vc2gKKworLiAvZXRjL2Zvcm1mYWN0b3IvY29uZmlnCisKK0NNRD0iIgorCitpZiBbICIkSEFWRV9LRVlCT0FSRCIgPSAiMCIgXTsgdGhlbgorICAgIENNRD0ibWF0Y2hib3gta2V5Ym9hcmQgLWQiCitlbGlmIFsgIiRESVNQTEFZX0NBTl9ST1RBVEUiID0gIjEiIF07IHRoZW4KKyAgICBpZiBbICIkSEFWRV9LRVlCT0FSRF9QT1JUUkFJVCIgPSAiMSIgLWEgIiRIQVZFX0tFWUJPQVJEX0xBTkRTQ0FQRSIgPSAiMCIgXTsgdGhlbgorICAgICAgICBDTUQ9Im1hdGNoYm94LWtleWJvYXJkIC1kIC1vIGxhbmRzY2FwZSIKKyAgICBlbGlmIFsgIiRIQVZFX0tFWUJPQVJEX0xBTkRTQ0FQRSIgPSAiMSIgLWEgIiRIQVZFX0tFWUJPQVJEX1BPUlRSQUlUIiA9ICIwIiBdOyB0aGVuCisgICAgICAgIENNRD0ibWF0Y2hib3gta2V5Ym9hcmQgLWQgLW8gcG9ydHJhaXQiCisgICAgZmkKK2ZpCisKK2lmIFsgIiRDTUQiIF07IHRoZW4KKyAgICAjIERlbGF5IHRvIG1ha2Ugc3VyZSB0aGUgd2luZG93IG1hbmFnZXIgaXMgYWN0aXZlCisgICAgIyBieSB3YWl0aW5nIGZvciB0aGUgZGVza3RvcCB0byBzYXkgaXRzIGZpbmlzaGVkIGxvYWRpbmcKKyAgICBkYnVzLXdhaXQgb3JnLm1hdGNoYm94X3Byb2plY3QuZGVza3RvcCBMb2FkZWQgJiYgJENNRCAmCitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1rZXlib2FyZC9maWxlcy9zaW5nbGUtaW5zdGFuY2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWtleWJvYXJkL2ZpbGVzL3NpbmdsZS1pbnN0YW5jZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGI2YzQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1rZXlib2FyZC9maWxlcy9zaW5nbGUtaW5zdGFuY2UucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorTXVsdGlwbGUgbWF0Y2hib3gta2V5Ym9hcmQgaW5zdGFuY2VzIHdvdWxkIG9jY3VweSB3aG9sZSBzY3JlZW4gYW5kIGNhdXNlIFgKK3dpbmRvdyBzZWdmYXVsdChCdWcgNTA5KS4gTWFraW5nIG1hdGNoYm94LWtleWJvYXJkIHNpbmdsZXRvbiBpcyBvbmUgd29yaworYXJvdW5kLgorCitUaGlzIHBhdGNoIGFsbG93IG9ubHkgb25lIGluc3RhbmNlIG9mIG1hdGNoYm94LWtleWJvYXJkIGJhc2VkIG9uIHNvbWUgbWVjaGFuaXNtCitpbiBtYXRjaGJveC1kZXNrdG9wLiBJbiBmdXR1cmUsIGFuIGFwcGxldCBhbmQgR1RLLUlNIG1vZHVsZXMgaW4KK21hdGNoYm94LWtleWJvYXJkIGNhbiBiZSB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgbWFwL3VubWFwIHRoZSB2aXJ0dWFsIGtleWJvYXJkCitvbiBkZW1hbmQuCisKK1NpZ25lZC1vZmYtYnk6IFpoYWkgRWR3aW4gPGVkd2luLnpoYWlAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBtYXRjaGJveC1rZXlib2FyZC9tYXRjaGJveC1rZXlib2FyZC5kZXNrdG9wCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWF0Y2hib3gta2V5Ym9hcmQub3JpZy9tYXRjaGJveC1rZXlib2FyZC5kZXNrdG9wCTIwMTAtMTItMjIgMjA6NDE6NDAuMDAwMDAwMDAwICswODAwCisrKysgbWF0Y2hib3gta2V5Ym9hcmQvbWF0Y2hib3gta2V5Ym9hcmQuZGVza3RvcAkyMDEwLTEyLTIyIDIwOjQyOjEyLjAwMDAwMDAwMCArMDgwMAorQEAgLTYsMyArNiw1IEBACisgSWNvbj1tYXRjaGJveC1rZXlib2FyZC5wbmcKKyBDYXRlZ29yaWVzPVBhbmVsO1V0aWxpdHk7TUIKKyBYLU1CLUlOUFVULU1FQ0hBTlNJTT1UcnVlCisrWC1NQi1TaW5nbGVJbnN0YW5jZT10cnVlCisrU3RhcnR1cE5vdGlmeT10cnVlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWtleWJvYXJkL21hdGNoYm94LWtleWJvYXJkX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvbWF0Y2hib3gta2V5Ym9hcmRfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMzIxZDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWtleWJvYXJkL21hdGNoYm94LWtleWJvYXJkX2dpdC5iYgpAQCAtMCwwICsxLDU2IEBACitTVU1NQVJZID0gIk1hdGNoYm94IHZpcnR1YWwga2V5Ym9hcmQgZm9yIFgxMSIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorU0VDVElPTiA9ICJ4MTEiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbWF0Y2hib3gta2V5Ym9hcmQuaDtlbmRsaW5lPTE3O21kNT05ZDY1ODZjNjllNGE5MjZmM2NiMGI0NDI1ZjI0YmEzYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hcHBsZXQvYXBwbGV0LmM7ZW5kbGluZT0xODttZDU9NGEwZjcyMTcyNDc0NmIxNGQ5NWI1MWRkZDQyYjk1ZTciCisKK0RFUEVORFMgPSAibGliZmFrZWtleSBleHBhdCBsaWJ4ZnQgZ3RrKyBtYXRjaGJveC1wYW5lbC0yIgorCitTUkNSRVYgPSAiMjE3ZjFiZmUxNGM0MWNmN2UyOTFkMDRhNjNhYTJkNzljYzEzZDA2MyIKK1BWID0gIjAuMCtnaXQke1NSQ1BWfSIKK1BSID0gInI0IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfTticmFuY2g9bWF0Y2hib3gta2V5Ym9hcmQtMC0xIFwKKyAgICAgICAgICAgZmlsZTovL3NpbmdsZS1pbnN0YW5jZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly84MG1hdGNoYm94a2V5Ym9hcmQuc2giCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0IGd0ay1pbW1vZHVsZXMtY2FjaGUgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIGxpYnhmdCwgbGliZmFrZWtleSBhbmQgbWF0Y2hib3gtcGFuZWwtMiByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWNhaXJvIC0tZW5hYmxlLWd0ay1pbSAtLWVuYWJsZS1hcHBsZXQiCisKK1BBQ0tBR0VTICs9ICIke1BOfS1pbSAke1BOfS1hcHBsZXQiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS8gXAorCSAgICAgICAke3N5c2NvbmZkaXJ9IFwKKwkgICAgICAgJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMgXAorCSAgICAgICAke2RhdGFkaXJ9L3BpeG1hcHMgXAorCSAgICAgICAke2RhdGFkaXJ9L21hdGNoYm94LWtleWJvYXJkIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9ndGstMi4wLyovaW1tb2R1bGVzLy5kZWJ1ZyIKKworRklMRVNfJHtQTn0taW0gPSAiJHtsaWJkaXJ9L2d0ay0yLjAvKi9pbW1vZHVsZXMvKi5zbyIKKworRklMRVNfJHtQTn0tYXBwbGV0ID0gIiR7bGliZGlyfS9tYXRjaGJveC1wYW5lbC8qLnNvIgorCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS9YMTEvWHNlc3Npb24uZC8KKwlpbnN0YWxsIC1tIDc1NSAke1dPUktESVJ9LzgwbWF0Y2hib3hrZXlib2FyZC5zaCAke0R9LyR7c3lzY29uZmRpcn0vWDExL1hzZXNzaW9uLmQvCisKKwlybSAtZiAke0R9JHtsaWJkaXJ9L2d0ay0yLjAvKi9pbW1vZHVsZXMvKi5sYQorCXJtIC1mICR7RH0ke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvKi5sYQorfQorCitHVEtJTU1PRFVMRVNfUEFDS0FHRVMgPSAiJHtQTn0taW0iCisKK1JERVBFTkRTXyR7UE59ID0gImZvcm1mYWN0b3IgZGJ1cy13YWl0IgorUlJFQ09NTUVORFNfJHtQTn0gPSAiJHtQTn0tYXBwbGV0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1wYW5lbC0yL2ZpbGVzL3NpbGVuY2Utd2FybmluZ3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXBhbmVsLTIvZmlsZXMvc2lsZW5jZS13YXJuaW5ncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWJhOWEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1wYW5lbC0yL2ZpbGVzL3NpbGVuY2Utd2FybmluZ3MucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRG9uJ3Qgd2FybiBpZiB0aGUgbWFjaGluZSBkb2Vzbid0IGFjdHVhbGx5IGhhdmUgYSBiYXR0ZXJ5LCBvciBpZiB0aGUgYXBwbGV0cworc3RyaW5nIGNvbnRhaW5zIGNvbnNlY3V0aXZlIHNlcGFyYXRvcnMuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9hcHBsZXRzL2JhdHRlcnkvYmF0dGVyeS1hY3BpLmMgYi9hcHBsZXRzL2JhdHRlcnkvYmF0dGVyeS1hY3BpLmMKK2luZGV4IDY1MTVjYjAuLmM0NGRkMTIgMTAwNjQ0CistLS0gYS9hcHBsZXRzL2JhdHRlcnkvYmF0dGVyeS1hY3BpLmMKKysrKyBiL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFjcGkuYworQEAgLTE0LDggKzE0LDYgQEAgaW50IGJhdHRfc3RhdGUsIGFjX3N0YXRlOworIGludCBwbV9zdXBwb3J0KHZvaWQpCisgeworIAlpZihjaGVja19hY3BpX3N1cHBvcnQoKSA9PSBOT1RfU1VQUE9SVEVEKXsKKy0JCWdfd2FybmluZygiTm8gQUNQSSBzdXBwb3J0XG4iKTsKKy0KKyAJCXJldHVybiAwOworIAl9CisgCitAQCAtMzIsOCArMzAsOSBAQCBjb25zdCBjaGFyKiBwbV9iYXR0ZXJ5X2ljb24odm9pZCkKKyAJY29uc3QgY2hhciAqaWNvbjsKKyAJYmF0dGVyeV90ICpiaW5mbzsKKyAKKysgICAgICAgIC8qIE5vIGJhdHRlcnkgYXZhaWxhYmxlIChub3QgcHJlc2VudCwgZGlzYWJsZWQsIG9yIHNvbWV0aGluZworKyAgICAgICAgICAgZWxzZS4gU2lsZW50bHkgZG8gbm90aGluZy4gKi8KKyAJaWYgKGJhdHRfc3RhdGUgIT0gU1VDQ0VTUykgeworLQkJZ193YXJuaW5nKCJDb3VsZG50IGluaXRpYWxpemUgQUNQSSBiYXR0ZXJ5XG4iKTsKKyAJCXJldHVybiBOVUxMOworIAl9CisgCitkaWZmIC0tZ2l0IGEvYXBwbGV0cy9iYXR0ZXJ5L2JhdHRlcnktYXBtLmMgYi9hcHBsZXRzL2JhdHRlcnkvYmF0dGVyeS1hcG0uYworaW5kZXggNTQ2NzQzOC4uMmYzOWNiNiAxMDA2NDQKKy0tLSBhL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFwbS5jCisrKysgYi9hcHBsZXRzL2JhdHRlcnkvYmF0dGVyeS1hcG0uYworQEAgLTEwLDggKzEwLDYgQEAKKyBpbnQgcG1fc3VwcG9ydCh2b2lkKQorIHsKKyAJaWYgKDEgPT0gYXBtX2V4aXN0cyAoKSkgeworLSAgICAgICAgICAgICAgICBnX3dhcm5pbmcgKCJObyBBUE0gc3VwcG9ydCIpOworLQorICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgIH0KKyAKK2RpZmYgLS1naXQgYS9tYXRjaGJveC1wYW5lbC9tYi1wYW5lbC5jIGIvbWF0Y2hib3gtcGFuZWwvbWItcGFuZWwuYworaW5kZXggMmQ4Y2FmZC4uODI4YTM2ZCAxMDA2NDQKKy0tLSBhL21hdGNoYm94LXBhbmVsL21iLXBhbmVsLmMKKysrKyBiL21hdGNoYm94LXBhbmVsL21iLXBhbmVsLmMKK0BAIC0xMTAsMTAgKzExMCwxNSBAQCBsb2FkX2FwcGxldHMgKGNvbnN0IGNoYXIgICAgKmFwcGxldHNfZGVzYywKKyAgICAgICAgIGFwcGxldHMgPSBnX3N0cnNwbGl0IChhcHBsZXRzX2Rlc2MsICIsIiwgLTEpOworIAorICAgICAgICAgZm9yIChpID0gMDsgYXBwbGV0c1tpXTsgaSsrKSB7CisrICAgICAgICAgICAgICAgIGNoYXIgKnM7CisgICAgICAgICAgICAgICAgIGNoYXIgKipiaXRzOworICAgICAgICAgICAgICAgICBHdGtXaWRnZXQgKmFwcGxldDsKKyAKKy0gICAgICAgICAgICAgICAgYml0cyA9IGdfc3Ryc3BsaXQgKGFwcGxldHNbaV0sICI6IiwgMik7CisrICAgICAgICAgICAgICAgIHMgPSBhcHBsZXRzW2ldOworKyAgICAgICAgICAgICAgICBpZiAocyA9PSBOVUxMIHx8IHNbMF0gPT0gJ1wwJykKKysgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKysKKysgICAgICAgICAgICAgICAgYml0cyA9IGdfc3Ryc3BsaXQgKHMsICI6IiwgMik7CisgCisgICAgICAgICAgICAgICAgIGFwcGxldCA9IGxvYWRfYXBwbGV0IChiaXRzWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c1sxXSwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtcGFuZWwtMi9tYXRjaGJveC1wYW5lbC0yX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtcGFuZWwtMi9tYXRjaGJveC1wYW5lbC0yX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWQ3MzY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1wYW5lbC0yL21hdGNoYm94LXBhbmVsLTJfZ2l0LmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiU2ltcGxlIEdUSysgYmFzZWQgcGFuZWwgZm9yIGhhbmRoZWxkIGRldmljZXMiCitIT01FUEFHRSA9ICJodHRwOi8vbWF0Y2hib3gtcHJvamVjdC5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9tYXRjaGJveC1wYW5lbC9tYi1wYW5lbC5oO2VuZGxpbmU9MTA7bWQ1PTBiN2RiMjhmNGI2ODYzZmI4NTNkMDQ2N2U1OTAwMTlhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2FwcGxldHMvc3RhcnR1cC9zdGFydHVwLmM7ZW5kbGluZT0yMjttZDU9YjBhNjRmYmVmMzA5N2Q3OWY4MjY0ZTY5MDdhOThmMDMiCisKK0RFUEVORFMgPSAiZ25vbWUtY29tbW9uIGd0aysgc3RhcnR1cC1ub3RpZmljYXRpb24gZGJ1cyBkYnVzLWdsaWIiCitERVBFTkRTICs9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiYWNwaSIsICJsaWJhY3BpIiwgIiIsZCl9IgorREVQRU5EUyArPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImFwbSIsICJhcG1kIiwgIiIsZCl9IgorCisjIFRoZSBzdGFydHVwLW5vdGlmaWNhdGlvbiByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitTUkNSRVYgPSAiMjZhM2E2N2I0MWM1MGUwYWUxNjNkOGZlODZjY2Y3YTBmMGE2NzFhZSIKK1BWID0gIjIuMCtnaXQke1NSQ1BWfSIKKworUlBST1ZJREVTXyR7UE59ID0gIm1hdGNoYm94LXBhbmVsIgorUlJFUExBQ0VTXyR7UE59ID0gIm1hdGNoYm94LXBhbmVsIgorUkNPTkZMSUNUU18ke1BOfSA9ICJtYXRjaGJveC1wYW5lbCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0gXAorICAgICAgICAgICBmaWxlOi8vc2lsZW5jZS13YXJuaW5ncy5wYXRjaCIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXN0YXJ0dXAtbm90aWZpY2F0aW9uIC0tZW5hYmxlLWRidXMiCitFWFRSQV9PRUNPTkYgKz0gIiAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJhY3BpIiwgIi0td2l0aC1iYXR0ZXJ5PWFjcGkiLCAiIixkKX0iCitFWFRSQV9PRUNPTkYgKz0gIiAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJhcG0iLCAiLS13aXRoLWJhdHRlcnk9YXBtIiwgIiIsZCl9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLyouc28gXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vbWF0Y2hib3gtcGFuZWwvYnJpZ2h0bmVzcy8qLnBuZyBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9tYXRjaGJveC1wYW5lbC9zdGFydHVwLyoucG5nICIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLy5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLyoubGEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtc2F0by9tYXRjaGJveC1zZXNzaW9uLXNhdG8vc2Vzc2lvbiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtc2F0by9tYXRjaGJveC1zZXNzaW9uLXNhdG8vc2Vzc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmNlNDgzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1zYXRvL21hdGNoYm94LXNlc3Npb24tc2F0by9zZXNzaW9uCkBAIC0wLDAgKzEsMzMgQEAKKyMhL2Jpbi9zaAorCisuIC9ldGMvZm9ybWZhY3Rvci9jb25maWcKKworaWYgWyAiJEhBVkVfVE9VQ0hTQ1JFRU4iID0gIjEiIF07IHRoZW4KKyAgICBTSE9XQ1VSU09SPSJubyIKK2Vsc2UKKyAgICBTSE9XQ1VSU09SPSJ5ZXMiCitmaQorCitpZiBbICIkSEFWRV9LRVlCT0FSRCIgPSAiMSIgXTsgdGhlbgorICAgIEtFWUJPQVJEX0FQUExFVD0iIgorZWxzZQorICAgIEtFWUJPQVJEX0FQUExFVD0ia2V5Ym9hcmQiCitmaQorCisjIFRlbGwgR1RLKzMgd2UgcmVhbGx5IHdhbnQgc2VydmVyIHNpZGUgZGVjb3JhdGlvbnMsIGV2ZW4gd2l0aAorIyBHdGtIZWFkZXJCYXIgdXNpbmcgYXBwbGljYXRpb25zOiBXaXRob3V0IHRoYXQgbWItcGFuZWwgd2lsbCByZW5kZXIKKyMgb24gdG9wIG9mIHRoZSBjbGllbnQgc2lkZSBkZWNvcmF0aW9ucy4KK2V4cG9ydCBHVEtfQ1NEPTAKKworbWF0Y2hib3gtZGVza3RvcCAmCisKKyMgTGluZXMgY29udGFpbmluZyBmZWF0dXJlLVtmb29dIGFyZSByZW1vdmVkIGF0IGJ1aWxkIHRpbWUgaWYgdGhlIG1hY2hpbmUKKyMgZG9lc24ndCBoYXZlIHRoZSBmZWF0dXJlICJmb28iLgorCitTVEFSVF9BUFBMRVRTPXNob3dkZXNrdG9wLHdpbmRvd3NlbGVjdG9yCitFTkRfQVBQTEVUUz1jbG9jayxiYXR0ZXJ5LCRLRVlCT0FSRF9BUFBMRVQsc3lzdHJheSxzdGFydHVwLW5vdGlmeSxub3RpZnkKK0VORF9BUFBMRVRTPW9wZW5tb2tvLXBhbmVsLWdzbSwkRU5EX0FQUExFVFMgIyBmZWF0dXJlLXBob25lCisKK21hdGNoYm94LXBhbmVsIC0tdGl0bGViYXIgLS1zdGFydC1hcHBsZXRzICRTVEFSVF9BUFBMRVRTIC0tZW5kLWFwcGxldHMgJEVORF9BUFBMRVRTICYKKworZXhlYyBtYXRjaGJveC13aW5kb3ctbWFuYWdlciAtdGhlbWUgU2F0byAtdXNlX2Rlc2t0b3BfbW9kZSBkZWNvcmF0ZWQgLXVzZV9jdXJzb3IgJFNIT1dDVVJTT1IgJEAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtc2F0by9tYXRjaGJveC1zZXNzaW9uLXNhdG9fMC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1zYXRvL21hdGNoYm94LXNlc3Npb24tc2F0b18wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZkZTE4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtc2F0by9tYXRjaGJveC1zZXNzaW9uLXNhdG9fMC4xLmJiCkBAIC0wLDAgKzEsNTEgQEAKK1NVTU1BUlkgPSAiQ3VzdG9tIE1hdGNoYm94IHNlc3Npb24gZmlsZXMgZm9yIHRoZSBTYXRvIGVudmlyb25tZW50IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tYXRjaGJveC1wcm9qZWN0Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2Mi4wKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3Nlc3Npb247ZW5kbGluZT0zO21kNT1mOGE1YzViOWMyNzllNTJkYzA5NGQxMGUxMWMyYmU2MyIKKworU0VDVElPTiA9ICJ4MTEiCitERVBFTkRTID0gImdjb25mLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gImZvcm1mYWN0b3IgZ3RrLXNhdG8tZW5naW5lIG1hdGNoYm94LXRoZW1lLXNhdG8gZ3RrLXRoZW1lLXNhdG8gbWF0Y2hib3gtcGFuZWwtMiBtYXRjaGJveC1kZXNrdG9wLXNhdG8gbWF0Y2hib3gtc2Vzc2lvbiBnY29uZiIKK1BSID0gInIzMCIKKworIyBUaGlzIHBhY2thZ2UgaXMgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGJlY2F1c2UgdGhlIHNlc3Npb24gc2NyaXB0IGlzIG1vZGlmaWVkCisjIGJhc2VkIG9uIHRoZSBtYWNoaW5lIGFyY2hpdGVjdHVyZS4KK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK2luaGVyaXQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIG1hdGNoYm94LXRoZW1lLXNhdG8gcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworU1JDX1VSSSA9ICJmaWxlOi8vc2Vzc2lvbiIKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKwkjIFRoaXMgaXMgdGhlIHNldCBvZiBtYWNoaW5lIGZlYXR1cmVzIHRoYXQgdGhlIHNjcmlwdCBoYXMgbWFya2VycyBmb3IKKwlGRUFUVVJFUz0icGhvbmUiCisJU0NSSVBUPSIke1N9L3NlZGRlciIKKwlybSAtZiAkU0NSSVBUCisJdG91Y2ggJFNDUklQVAorCWZvciBGRUFUIGluICRGRUFUVVJFUzsgZG8KKwkJaWYgZWNobyAke01BQ0hJTkVfRkVBVFVSRVN9IHwgYXdrICIvJEZFQVQvIHtleGl0IDF9IjsgdGhlbgorCQkJZWNobyAiL2ZlYXR1cmUtJEZFQVQvZCIgPj4gJFNDUklQVAorCQlmaQorCWRvbmUKKworCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L21hdGNoYm94CisJc2VkIC1mICIkU0NSSVBUIiAke1N9L3Nlc3Npb24gPiAke0R9LyR7c3lzY29uZmRpcn0vbWF0Y2hib3gvc2Vzc2lvbgorICAgICAgICBjaG1vZCAreCAke0R9LyR7c3lzY29uZmRpcn0vbWF0Y2hib3gvc2Vzc2lvbgorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCXNldF92YWx1ZSgpIHsKKwkJI3R5cGUsIG5hbWUsIHZhbHVlCisJCWdjb25mdG9vbC0yIC0tY29uZmlnLXNvdXJjZT14bWw6OiREJHtzeXNjb25mZGlyfS9nY29uZi9nY29uZi54bWwuZGVmYXVsdHMgLS1kaXJlY3QgLS10eXBlICQxIC0tc2V0IC9kZXNrdG9wL3Bva3kvaW50ZXJmYWNlLyQyICIkMyIKKwl9CisJc2V0X3ZhbHVlIHN0cmluZyB0aGVtZSBTYXRvCisJc2V0X3ZhbHVlIHN0cmluZyBpY29uX3RoZW1lIFNhdG8KKwlzZXRfdmFsdWUgYm9vbCB0b3VjaHNjcmVlbiB0cnVlCisJc2V0X3ZhbHVlIHN0cmluZyBmb250X25hbWUgIlNhbnMgOSIKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGVybWluYWwvbWF0Y2hib3gtdGVybWluYWxfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10ZXJtaW5hbC9tYXRjaGJveC10ZXJtaW5hbF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFmZDE1MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGVybWluYWwvbWF0Y2hib3gtdGVybWluYWxfZ2l0LmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiTGlnaHR3ZWlnaHQgR1RLKyB0ZXJtaW5hbCBhcHBsaWNhdGlvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubWF0Y2hib3gtcHJvamVjdC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWFpbi5jO2VuZGxpbmU9MjA7bWQ1PTk2ZTM5MTc2ZDllMzU1NjM5YTBiOGIxYzdhODQwODIwIgorCitERVBFTkRTID0gImd0aysgdnRlIgorU0VDVElPTiA9ICJ4MTEvdXRpbHMiCitTUkNSRVYgPSAiNDUyYmNhMjUzNDkyYTk3YTU4N2Y0NDAyODliOWFiMjdkMjE3MzUzZSIKK1BWID0gIjAuMCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8uaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NDdlMWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by5pbmMKQEAgLTAsMCArMSwxNiBAQAorU1VNTUFSWSA9ICJNYXRjaGJveCB3aW5kb3cgbWFuYWdlciBTYXRvIHRoZW1lcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubWF0Y2hib3gtcHJvamVjdC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiQ0MtQlktU0EtMy4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YWFlODZiYjM0YjBhODM3MTZjYTA5ZjRlNzgzZDZiYTQiCisKK0RFUEVORFMgPSAibWF0Y2hib3gtd20iCitTRUNUSU9OID0gIngxMS93bSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS90aGVtZXMiCisKKyMgVGhlIG1hdGNoYm94LXdtIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0b18wLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0b18wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY3ODZkZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvXzAuMS5iYgpAQCAtMCwwICsxLDggQEAKK3JlcXVpcmUgbWF0Y2hib3gtdGhlbWUtc2F0by5pbmMKKworUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiaHR0cDovL3Bva3lsaW51eC5vcmcvcmVsZWFzZXMvc2F0by9tYXRjaGJveC10aGVtZS1zYXRvLTAuMS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MmFlMjcyZWY3ODAzMTQxYTNkY2I2OWU2NzBjZmY5NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1YjU5Zjk2NDZlZGJmYjkwN2EzMDkzMzJkYjNiZDZmYTcwODBkYzFmZTI0ZGY1NDk0ODBjZmFlN2Q5NzRhM2ZiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG9fZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG9fZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMzU2OWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0b19naXQuYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSBtYXRjaGJveC10aGVtZS1zYXRvLmluYworCitTUkNSRVYgPSAiZjcyY2Y0ZWQ3ZDcxYWQ5ZTQ3YjBmMmQzZGJjNTkzYmMyZjNlNzZmOCIKK1BWID0gIjAuMitnaXQke1NSQ1BWfSIKKworREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL21hdGNoYm94LXNhdG8iCisKK0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ01BQ0hJTkVfRkVBVFVSRVMnLCAncXZnYScsICctLXdpdGgtbW9kZT1xdmdhJywgJycsZCl9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NzlkYjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8uYmIKQEAgLTAsMCArMSw2NiBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBPcGVuZWRIYW5kIEx0ZC4KKyMKKworU1VNTUFSWSA9ICJTYXRvIGRlc2t0b3AiCitMSUNFTlNFID0gIk1JVCIKK1BSID0gInIzMyIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIHJkZXBlbmRzIG9uIHgxMXZuYworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworUEFDS0FHRVMgPSAiJHtQTn0gJHtQTn0tYmFzZSAke1BOfS1hcHBzICR7UE59LWdhbWVzIgorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgJHtQTn0tYmFzZSBcCisgICAgJHtQTn0tYXBwcyBcCisgICAgJHtQTn0tZ2FtZXMgXAorICAgICIKKworTkVUV09SS19NQU5BR0VSID89ICJjb25ubWFuLWdub21lIgorTkVUV09SS19NQU5BR0VSX2xpYmMtdWNsaWJjID0gIiIKKworU1VNTUFSWV8ke1BOfS1iYXNlID0gIlNhdG8gZGVza3RvcCAtIGJhc2UgcGFja2FnZXMiCitSREVQRU5EU18ke1BOfS1iYXNlID0gIlwKKyAgICBtYXRjaGJveC1kZXNrdG9wIFwKKyAgICBtYXRjaGJveC1zZXNzaW9uLXNhdG8gXAorICAgIG1hdGNoYm94LWtleWJvYXJkIFwKKyAgICBtYXRjaGJveC1rZXlib2FyZC1hcHBsZXQgXAorICAgIG1hdGNoYm94LWtleWJvYXJkLWltIFwKKyAgICBtYXRjaGJveC1jb25maWctZ3RrIFwKKyAgICB4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lIFwKKyAgICBzYXRvLWljb24tdGhlbWUgXAorICAgIHNldHRpbmdzLWRhZW1vbiBcCisgICAgZ3RrLXNhdG8tZW5naW5lIFwKKyAgICBzaHV0ZG93bi1kZXNrdG9wIFwKKyAgICBsaWJzZGwgXAorICAgICR7TkVUV09SS19NQU5BR0VSfSBcCisgICAgdWRldi1leHRyYWNvbmYgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHVsc2VhdWRpbycsICdwdWxzZWF1ZGlvLXNlcnZlciBwdWxzZWF1ZGlvLWNsaWVudC1jb25mLXNhdG8nLCAnJywgZCl9IFwKKyAgICAiCisKKyMgcGNtYW5mbSBkb2Vzbid0IHdvcmsgb24gbWlwcworRklMRU1BTkFHRVIgPz0gInBjbWFuZm0iCitGSUxFTUFOQUdFUl9taXBzID89ICIiCisKK1dFQiA/PSAiIgorI1dFQiA9ICJlcGlwaGFueSIKKworU1VNTUFSWV8ke1BOfS1hcHBzID0gIlNhdG8gZGVza3RvcCAtIGFwcGxpY2F0aW9ucyIKK1JERVBFTkRTXyR7UE59LWFwcHMgPSAiXAorICAgIGxlYWZwYWQgXAorICAgIGdzdC1wbGF5ZXItYmluIFwKKyAgICB4MTF2bmMgXAorICAgIG1hdGNoYm94LXRlcm1pbmFsIFwKKyAgICBzYXRvLXNjcmVlbnNob3QgXAorICAgICR7RklMRU1BTkFHRVJ9IFwKKyAgICAke1dFQn0gXAorICAgICIKKworU1VNTUFSWV8ke1BOfS1nYW1lcyA9ICJTYXRvIGRlc2t0b3AgLSBnYW1lcyIKK1JERVBFTkRTXyR7UE59LWdhbWVzID0gIlwKKyAgICBvaC1wdXp6bGVzIFwKKyAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvZW1ibGVtLXN5bWJvbGljLWxpbmsucG5nIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL2ZpbGVzL2VtYmxlbS1zeW1ib2xpYy1saW5rLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGU1NTk0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL2ZpbGVzL2VtYmxlbS1zeW1ib2xpYy1saW5rLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvZ25vbWUtZnMtZGlyZWN0b3J5LnBuZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1mcy1kaXJlY3RvcnkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OTIxYTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvZ25vbWUtZnMtZGlyZWN0b3J5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvZ25vbWUtZnMtcmVndWxhci5wbmcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvZ25vbWUtZnMtcmVndWxhci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U3N2E4ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1mcy1yZWd1bGFyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvZ25vbWUtbWltZS10ZXh0LXBsYWluLnBuZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1taW1lLXRleHQtcGxhaW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZTRiYWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvZ25vbWUtbWltZS10ZXh0LXBsYWluLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvbm8tZGVza3RvcC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9uby1kZXNrdG9wLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwM2Q2ZDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvbm8tZGVza3RvcC5wYXRjaApAQCAtMCwwICsxLDE1IEBACitEaXNhYmxlIHRoZSBkZXNrdG9wIHByZWZlcmVuY2VzIGxhdW5jaGVyIGFzIHdlIGRvbid0IHVzZSB0aGUgcGNtYW5mbSBkZXNrdG9wIGluCitTYXRvLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9kYXRhL3BjbWFuZm0tZGVza3RvcC1wcmVmLmRlc2t0b3AgYi9kYXRhL3BjbWFuZm0tZGVza3RvcC1wcmVmLmRlc2t0b3AKK2luZGV4IGNjZjhhYmIuLjNmNmZjMWMgMTAwNjQ0CistLS0gYS9kYXRhL3BjbWFuZm0tZGVza3RvcC1wcmVmLmRlc2t0b3AuaW4KKysrKyBiL2RhdGEvcGNtYW5mbS1kZXNrdG9wLXByZWYuZGVza3RvcC5pbgorQEAgLTcsMyArNyw0IEBAIEV4ZWM9cGNtYW5mbSAtLWRlc2t0b3AtcHJlZgorIFN0YXJ0dXBOb3RpZnk9dHJ1ZQorIFRlcm1pbmFsPWZhbHNlCisgTm90U2hvd0luPUdOT01FO1hGQ0U7S0RFOworK05vRGlzcGxheT10cnVlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vcGNtYW5mbV8xLjIuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9wY21hbmZtXzEuMi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NjczMDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vcGNtYW5mbV8xLjIuMy5iYgpAQCAtMCwwICsxLDQwIEBACitTVU1NQVJZID0gIkZhc3QgbGlnaHR3ZWlnaHQgdGFiYmVkIGZpbGVtYW5hZ2VyIgorSE9NRVBBR0UgPSAiaHR0cDovL3BjbWFuZm0uc291cmNlZm9yZ2UubmV0LyIKKworTElDRU5TRSA9ICJHUEx2MiAmIEdQTHYyKyAmIExHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9wY21hbmZtLmg7ZW5kbGluZT0yMjttZDU9NDE3YjM4NTU3NzFhM2E4N2Y4YWQ3NTNkOTk0NDkxZjAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2dzZWFsLWd0ay1jb21wYXQuaDtlbmRsaW5lPTIxO21kNT00NjkyMmM4NjkxZjU4ZDEyNGY5NDIwZmUxNjE0OWNlMiIKKworU0VDVElPTiA9ICJ4MTEiCitERVBFTkRTID0gImd0aysgc3RhcnR1cC1ub3RpZmljYXRpb24gbGliZm0gaW50bHRvb2wtbmF0aXZlIgorREVQRU5EU19hcHBlbmRfcG9reSA9ICIgbGlib3dsIgorCisKK0NPTVBBVElCTEVfSE9TVCA9ICcoeDg2XzY0Lip8aS44Ni4qfGFhcmNoNjQuKnxhcm0uKnxtaXBzLip8cG93ZXJwYy4qfHNoLiopLShsaW51eHxmcmVlYnNkLiopJworCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wY21hbmZtL3BjbWFuZm0tJHtQVn0udGFyLnh6IFwKKwkgICBmaWxlOi8vZ25vbWUtZnMtZGlyZWN0b3J5LnBuZyBcCisJICAgZmlsZTovL2dub21lLWZzLXJlZ3VsYXIucG5nIFwKKwkgICBmaWxlOi8vZ25vbWUtbWltZS10ZXh0LXBsYWluLnBuZyBcCisJICAgZmlsZTovL2VtYmxlbS1zeW1ib2xpYy1saW5rLnBuZyBcCisJICAgZmlsZTovL25vLWRlc2t0b3AucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjOTkzNDAyZDQwN2IwYTNmYzA3NmY4NDJhYzFiYzVjOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjZmE4ZDgyZmM2M2JlMTQ3MDQ1MTc0YmVmMDc0ODA3ZTFlMzJjZThjNmJmNGRiZDhmYWQ0OWUyNjBiY2Y2MzgwIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIHN0YXJ0dXAtbm90aWZpY2F0aW9uIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfQorCWluc3RhbGwgLWQgJHtEfS8ke2RhdGFkaXJ9L3BpeG1hcHMvCisKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS8qLnBuZyAke0R9LyR7ZGF0YWRpcn0vcGl4bWFwcworfQorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L3BjbWFuZm0iCisKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICJhZHdhaXRhLWljb24tdGhlbWUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1bHNlYXVkaW8tc2F0by9wdWxzZWF1ZGlvLWNsaWVudC1jb25mLXNhdG8vNTAtc2F0by5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdWxzZWF1ZGlvLXNhdG8vcHVsc2VhdWRpby1jbGllbnQtY29uZi1zYXRvLzUwLXNhdG8uY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzQ5MmU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdWxzZWF1ZGlvLXNhdG8vcHVsc2VhdWRpby1jbGllbnQtY29uZi1zYXRvLzUwLXNhdG8uY29uZgpAQCAtMCwwICsxLDcgQEAKKyMgV2UgcmVseSBvbiBQdWxzZUF1ZGlvJ3MgYXV0b3NwYXduIGZlYXR1cmUgdG8gYXV0b21hdGljYWxseSBzdGFydCB0aGUgZGFlbW9uCisjIGluIFNhdG8uIFRoZSBncmFwaGljYWwgc2Vzc2lvbiBpbiBTYXRvIHJ1bnMgdW5kZXIgcm9vdCwgaG93ZXZlciwgYW5kCisjIFB1bHNlQXVkaW8gZGlzYWJsZXMgYXV0b3NwYXduaW5nIGZvciByb290IGJ5IGRlZmF1bHQuIEluIGEgbm9ybWFsIHNldHVwIGl0J3MKKyMgbm90IGRlc2lyYWJsZSB0byBhdXRvc3Bhd24gZm9yIHJvb3QsIGJlY2F1c2UgaXQgY2FuIGVhc2lseSBpbnRlcmZlcmUgd2l0aAorIyBvdGhlciB1c2VycycgUHVsc2VBdWRpbyBpbnN0YW5jZXMsIGJ1dCBpbiBTYXRvIHRoZXJlIGFyZSBubyBvdGhlciB1c2Vycywgc28KKyMgaXQncyBPSyB0byBlbmFibGUgdGhpcyBpbiBTYXRvLgorYWxsb3ctYXV0b3NwYXduLWZvci1yb290ID0geWVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1bHNlYXVkaW8tc2F0by9wdWxzZWF1ZGlvLWNsaWVudC1jb25mLXNhdG9fMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHVsc2VhdWRpby1zYXRvL3B1bHNlYXVkaW8tY2xpZW50LWNvbmYtc2F0b18xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNzMzOWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1bHNlYXVkaW8tc2F0by9wdWxzZWF1ZGlvLWNsaWVudC1jb25mLXNhdG9fMS5iYgpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIi9ldGMvcHVsc2UvY2xpZW50LmNvbmYgdGFpbG9yZWQgZm9yIFNhdG8iCitTRUNUSU9OID0gIm11bHRpbWVkaWEiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitTUkNfVVJJID0gImZpbGU6Ly81MC1zYXRvLmNvbmYiCitTID0gIiR7V09SS0RJUn0iCisKK2luaGVyaXQgYWxsYXJjaAorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcHVsc2UvY2xpZW50LmNvbmYuZAorCWluc3RhbGwgLW0gMDY0NCAke1N9LzUwLXNhdG8uY29uZiAke0R9JHtzeXNjb25mZGlyfS9wdWxzZS9jbGllbnQuY29uZi5kLzUwLXNhdG8uY29uZgorfQorCitGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L3B1bHNlL2NsaWVudC5jb25mLmQvNTAtc2F0by5jb25mIgorQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vcHVsc2UvY2xpZW50LmNvbmYuZC81MC1zYXRvLmNvbmYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvZmlsZXMvMDAwMS1Vc2UtbGFicy1pbnN0ZWFkLW9mLWFicy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9maWxlcy8wMDAxLVVzZS1sYWJzLWluc3RlYWQtb2YtYWJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0M2QxZGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvZmlsZXMvMDAwMS1Vc2UtbGFicy1pbnN0ZWFkLW9mLWFicy5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIDk4MDhkYzA5ZTA4OTM3YzliZmZkODU4ZDNkZWQ0MjgyMjVhNDMxMmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCA3IFNlcCAyMDE1IDA5OjAyOjM4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIFVzZSBsYWJzIGluc3RlYWQgb2YgYWJzCisKK2NsdWV2YWxzIGlzIGFycmF5IG9mIGxvbmdzIHNvIHdlIGhhdmUgdG8gdXNlIGxhYnMoKSBpbnN0ZWFkIG9mIGFicygpCitzaW5jZSBhYnMoKSByZXR1cm5zIGludAorCitGaXhlcworCitrZWVuLmM6MTQ1ODoxNzogZXJyb3I6IGFic29sdXRlIHZhbHVlIGZ1bmN0aW9uICdhYnMnIGdpdmVuIGFuIGFyZ3VtZW50CitvZiB0eXBlICdsb25nJyBidXQgaGFzIHBhcmFtZXRlciBvZiB0eXBlICdpbnQnIHdoaWNoIG1heSBjYXVzZQordHJ1bmNhdGlvbiBvZiB2YWx1ZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIGtlZW4uYyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9rZWVuLmMgYi9rZWVuLmMKK2luZGV4IGE2YTcyMzguLjE2MzE5OTIgMTAwNjQ0CistLS0gYS9rZWVuLmMKKysrKyBiL2tlZW4uYworQEAgLTEwNDMsNyArMTA0Myw3IEBAIGRvbmUKKyAJCSAgICBjbHVldmFsc1tqXSAqPSBncmlkW2ldOworIAkJICAgIGJyZWFrOworIAkJICBjYXNlIENfU1VCOgorLQkJICAgIGNsdWV2YWxzW2pdID0gYWJzKGNsdWV2YWxzW2pdIC0gZ3JpZFtpXSk7CisrCQkgICAgY2x1ZXZhbHNbal0gPSBsYWJzKGNsdWV2YWxzW2pdIC0gZ3JpZFtpXSk7CisgCQkgICAgYnJlYWs7CisgCQkgIGNhc2UgQ19ESVY6CisgCQkgICAgeworQEAgLTE0NTUsNyArMTQ1NSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfZXJyb3JzKGNvbnN0IGdhbWVfc3RhdGUgKnN0YXRlLCBsb25nICplcnJvcnMpCisgCQljbHVldmFsc1tqXSAqPSBzdGF0ZS0+Z3JpZFtpXTsKKyAJCWJyZWFrOworIAkgICAgICBjYXNlIENfU1VCOgorLQkJY2x1ZXZhbHNbal0gPSBhYnMoY2x1ZXZhbHNbal0gLSBzdGF0ZS0+Z3JpZFtpXSk7CisrCQljbHVldmFsc1tqXSA9IGxhYnMoY2x1ZXZhbHNbal0gLSBzdGF0ZS0+Z3JpZFtpXSk7CisgCQlicmVhazsKKyAJICAgICAgY2FzZSBDX0RJVjoKKyAJCXsKKy0tIAorMi41LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL2ZpbGVzL2ZpeC1jb21waWxpbmctZmFpbHVyZS13aXRoLW9wdGlvbi1nLU8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvZmlsZXMvZml4LWNvbXBpbGluZy1mYWlsdXJlLXdpdGgtb3B0aW9uLWctTy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjQ2ZmVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL2ZpbGVzL2ZpeC1jb21waWxpbmctZmFpbHVyZS13aXRoLW9wdGlvbi1nLU8ucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorZ3RrLmM6IGZpeCBjb21waWxpbmcgZmFpbHVyZSB3aXRoIG9wdGlvbiAtZyAtTworCitUaGVyZSB3ZXJlIGNvbXBpbGluZyBmYWlsdXJlIHdpdGggb3B0aW9uIC1nIC1PCisuLi4KKy4vLi9ndGsuYzogSW4gZnVuY3Rpb24gJ2NvbmZpZ3VyZV9hcmVhJzoKKy4vLi9ndGsuYzozOTc6MjogZXJyb3I6ICdjcicgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZCBpbiB0aGlzIGZ1bmN0aW9uIFstV2Vycm9yPW1heWJlLXVuaW5pdGlhbGl6ZWRdCisgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLAorICBeCisuLy4vZ3RrLmM6Mzg0OjE0OiBub3RlOiAnY3InIHdhcyBkZWNsYXJlZCBoZXJlCisgICAgIGNhaXJvX3QgKmNyOworICAgICAgICAgICAgICBeCisuLy4vZ3RrLmM6IEluIGZ1bmN0aW9uICdtYWluJzoKKy4vLi9ndGsuYzoyOTExOjY6IGVycm9yOiAnZXJyb3InIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaW4gdGhpcyBmdW5jdGlvbiBbLVdlcnJvcj1tYXliZS11bmluaXRpYWxpemVkXQorICAgICAgZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIsIHBuYW1lLCBlcnJvcik7CisgICAgICBeCitjYzE6IGFsbCB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycworLi4uCisKK0luaXRpYWxpemVkIHBvaW50ZXIgJ2NyJyBhbmQgJ2Vycm9yJyB3aXRoIE5VTEwKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGd0ay5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2d0ay5jIGIvZ3RrLmMKK2luZGV4IGEyZWJhMmMuLmM1NGJmNjMgMTAwNjQ0CistLS0gYS9ndGsuYworKysrIGIvZ3RrLmMKK0BAIC0zODEsNyArMzgxLDcgQEAgc3RhdGljIHZvaWQgY2xlYXJfYmFja2luZ19zdG9yZShmcm9udGVuZCAqZmUpCisgCisgc3RhdGljIHZvaWQgc2V0dXBfYmFja2luZ19zdG9yZShmcm9udGVuZCAqZmUpCisgeworLSAgICBjYWlyb190ICpjcjsKKysgICAgY2Fpcm9fdCAqY3IgPSBOVUxMOworICAgICBpbnQgaTsKKyAKKyAgICAgZmUtPnBpeG1hcCA9IGdka19waXhtYXBfbmV3KGZlLT5hcmVhLT53aW5kb3csIGZlLT5wdywgZmUtPnBoLCAtMSk7CitAQCAtMjQ4MSw3ICsyNDgxLDcgQEAgY2hhciAqZmdldGxpbmUoRklMRSAqZnApCisgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIHsKKyAgICAgY2hhciAqcG5hbWUgPSBhcmd2WzBdOworLSAgICBjaGFyICplcnJvcjsKKysgICAgY2hhciAqZXJyb3IgPSBOVUxMOworICAgICBpbnQgbmdlbmVyYXRlID0gMCwgcHJpbnQgPSBGQUxTRSwgcHggPSAxLCBweSA9IDE7CisgICAgIGludCB0aW1lX2dlbmVyYXRpb24gPSBGQUxTRSwgdGVzdF9zb2x2ZSA9IEZBTFNFLCBsaXN0X3ByZXNldHMgPSBGQUxTRTsKKyAgICAgaW50IHNvbG4gPSBGQUxTRSwgY29sb3VyID0gRkFMU0U7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9maWxlcy9vaC1wdXp6bGVzLW93bC1tZW51LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL2ZpbGVzL29oLXB1enpsZXMtb3dsLW1lbnUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UyYzNhYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9maWxlcy9vaC1wdXp6bGVzLW93bC1tZW51LnBhdGNoCkBAIC0wLDAgKzEsMjAzIEBACitUaGlzIHBhdGNoIGVuYWJsZSBvd2wgbWVudSwgd2hpY2ggaXMgaGlkZGVuIGluIHRoZSB0aXRsZSBiYXIgdG8gc2F2ZSBzcGFjZSBvbgorc21hbGwgc2NyZWVuLiBJdCBoYXMgbm90IGJlZW4gdXNlZCBmb3IgYSBsb25nIHRpbWUsIHJlYmFzZSBuZWVkZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW5hYmxlIGZlYXR1cmVdCisKK0luZGV4OiBzcmMvZ3RrLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzcmMvZ3RrLmMJKHJldmlzaW9uIDIyKQorKysrIHNyYy9ndGsuYwkod29ya2luZyBjb3B5KQorQEAgLTI4LDYgKzI4LDggQEAKKyAjaW5jbHVkZSA8Z2RrL2dka3guaD4KKyAjaW5jbHVkZSA8Z2RrLXBpeGJ1Zi9nZGstcGl4YnVmLmg+CisgCisrI2luY2x1ZGUgPGxpYm93bC9vd2x3aW5kb3dtZW51Lmg+CisrCisgI2luY2x1ZGUgPGxpYnJzdmcvcnN2Zy5oPgorIAorICNpbmNsdWRlIDxYMTEvWGxpYi5oPgorQEAgLTEyMzcsNiArMTIzOSw3IEBACisgICAgIH0KKyB9CisgCisrI2lmIDAKKyBzdGF0aWMgdm9pZAorIGFkZF93aWRnZXQgKEd0a1VJTWFuYWdlciAqbWVyZ2UsCisgCSAgICBHdGtXaWRnZXQgKndpZGdldCwKK0BAIC0xMjQ3LDEwICsxMjUwLDExIEBACisgICAgIGd0a19ib3hfcGFja19zdGFydCAoYm94LCB3aWRnZXQsIEZBTFNFLCBGQUxTRSwgMCk7CisgCisgICAgIHRvcGxldmVsID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwgKEdUS19XSURHRVQgKGJveCkpOworLSAgICBndGtfd2lkZ2V0X3Nob3dfYWxsICh0b3BsZXZlbCk7CisgfQorKyNlbmRpZgorIAorIHN0YXRpYyBHdGtBY3Rpb25FbnRyeSB0b3BsZXZlbF9hY3Rpb25zW10gPSB7CisrICAgIHsgIlRvcCIsIE5VTEwsICIiIH0sCisgICAgIHsgIkdhbWUiLCBOVUxMLCBOXygiR2FtZSIpIH0sCisgICAgIHsgIlNldHRpbmdzIiwgTlVMTCwgTl8oIlNldHRpbmdzIikgfSwKKyAgICAgeyAiSGVscCIsIE5VTEwsIE5fKCJIZWxwIikgfSwKK0BAIC0xMzAzLDExICsxMzA3LDEzIEBACisgCQkJZnJvbnRlbmQgKmZlKQorIHsKKyAgICAgR1N0cmluZyAqeG1sOworKyAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKyAgICAgZ2Jvb2xlYW4gcHJlc2V0cyA9IEZBTFNFOworICAgICBHU0xpc3QgKnJhZGlvX2dyb3VwID0gTlVMTDsKKyAgICAgaW50IGk7CisgCistICAgIHhtbCA9IGdfc3RyaW5nX25ldyAoIjx1aT48bWVudWJhcj48cGxhY2Vob2xkZXIgbmFtZT1cIlR5cGVQbGFjZWhvbGRlclwiPiIKKysgICAgeG1sID0gZ19zdHJpbmdfbmV3ICgiPHVpPjxtZW51YmFyPjxtZW51IG5hbWU9XCJUb3BNZW51XCIgYWN0aW9uPVwiVG9wXCI+IgorKwkJCSI8cGxhY2Vob2xkZXIgbmFtZT1cIlR5cGVQbGFjZWhvbGRlclwiPiIKKyAJCQkiPG1lbnUgbmFtZT1cIlNldHRpbmdzTWVudVwiIGFjdGlvbj1cIlNldHRpbmdzXCI+Iik7CisgCisgICAgIGZvciAoaSA9IDA7IGkgPCBtaWRlbmRfbnVtX3ByZXNldHMoZmUtPm1lKTsgaSsrKSB7CitAQCAtMTM1OSw4ICsxMzY1LDE0IEBACisgCQkJICI8bWVudWl0ZW0gbmFtZT1cIkN1c3RvbU1lbnVcIiBhY3Rpb249XCJDdXN0b21cIi8+Iik7CisgICAgIH0KKyAgICAgCistICAgIGdfc3RyaW5nX2FwcGVuZCAoeG1sLCAiPC9tZW51PjwvcGxhY2Vob2xkZXI+PC9tZW51YmFyPjwvdWk+Iik7CistICAgIGd0a191aV9tYW5hZ2VyX2FkZF91aV9mcm9tX3N0cmluZyAobWVyZ2UsIHhtbC0+c3RyLCAtMSwgTlVMTCk7CisrICAgIGdfc3RyaW5nX2FwcGVuZCAoeG1sLCAiPC9tZW51PjwvcGxhY2Vob2xkZXI+PC9tZW51PjwvbWVudWJhcj48L3VpPiIpOworKworKyAgICBndGtfdWlfbWFuYWdlcl9hZGRfdWlfZnJvbV9zdHJpbmcgKG1lcmdlLCB4bWwtPnN0ciwgLTEsICZlcnJvcik7CisrICAgIGlmIChlcnJvciAhPSBOVUxMKSB7CisrCWdfd2FybmluZyAoIkVycm9yIGFkZGluZyBjdXN0b206ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworKwlnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKysgICAgfQorKworICAgICBnX3N0cmluZ19mcmVlICh4bWwsIFRSVUUpOworIH0KKyAKK0BAIC0xNDM0LDYgKzE0NDYsNyBAQAorIG5ld193aW5kb3coY2hhciAqYXJnLCBjaGFyICoqZXJyb3IpCisgeworICAgICBmcm9udGVuZCAqZmU7CisrICAgIEdFcnJvciAqZXJyID0gTlVMTDsKKyAgICAgR3RrQm94ICp2Ym94OworICAgICBHdGtVSU1hbmFnZXIgKm1lcmdlOworICAgICBHdGtBY3Rpb25Hcm91cCAqYWN0aW9uczsKK0BAIC0xNDk2LDggKzE1MDksNiBAQAorICAgICBndGtfd2luZG93X2FkZF9hY2NlbF9ncm91cChHVEtfV0lORE9XKGZlLT53aW5kb3cpLCBmZS0+YWNjZWxncm91cCk7CisgCisgICAgIG1lcmdlID0gZ3RrX3VpX21hbmFnZXJfbmV3ICgpOworLSAgICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAobWVyZ2UpLCAiYWRkX3dpZGdldCIsCistCQkgICAgICBHX0NBTExCQUNLIChhZGRfd2lkZ2V0KSwgdmJveCk7CisgCisgICAgIGFjdGlvbnMgPSBndGtfYWN0aW9uX2dyb3VwX25ldyAoIlB1enpsZUFjdGlvbnMiKTsKKyAgICAgZ3RrX2FjdGlvbl9ncm91cF9hZGRfYWN0aW9ucyAoYWN0aW9ucywgdG9wbGV2ZWxfYWN0aW9ucywKK0BAIC0xNTA5LDIyICsxNTIwLDM5IEBACisgCisgICAgIGd0a191aV9tYW5hZ2VyX2luc2VydF9hY3Rpb25fZ3JvdXAgKG1lcmdlLCBhY3Rpb25zLCAwKTsKKyAgICAgCistICAgIGd0a191aV9tYW5hZ2VyX2FkZF91aV9mcm9tX2ZpbGUgKG1lcmdlLCBEQVRBRElSICIvb2gtcHV6emxlcy91aS9tZW51LnhtbCIsIE5VTEwpOworKyAgICBndGtfdWlfbWFuYWdlcl9hZGRfdWlfZnJvbV9maWxlIChtZXJnZSwgREFUQURJUiAiL29oLXB1enpsZXMvdWkvbWVudS54bWwiLCAKKysJCQkJICAgICAmZXJyKTsKKysgICAgaWYgKGVyciAhPSBOVUxMKSB7CisrCWdfd2FybmluZyAoIkVycm9yIG1ha2luZyBVSTogJXMiLCBlcnItPm1lc3NhZ2UpOworKwlnX2Vycm9yX2ZyZWUgKGVycik7CisrCWVyciA9IE5VTEw7CisrICAgIH0KKyAKKyAgICAgaWYgKHRoZWdhbWUuY2FuX3NvbHZlKSB7CistCSAgICBjaGFyICpzdHIgPSAiPHVpPjxtZW51YmFyPjxtZW51IG5hbWU9XCJHYW1lTWVudVwiIGFjdGlvbj1cIkdhbWVcIj4iCisrCWNoYXIgKnN0ciA9ICI8dWk+PG1lbnViYXI+PG1lbnUgbmFtZT1cIlRvcE1lbnVcIiBhY3Rpb249XCJUb3BcIj4iCisrCSAgICAiPG1lbnUgbmFtZT1cIkdhbWVNZW51XCIgYWN0aW9uPVwiR2FtZVwiPiIKKyAJICAgICI8cGxhY2Vob2xkZXIgbmFtZT1cIlNvbHZlUGxhY2Vob2xkZXJcIj4iCisgCSAgICAiPHNlcGFyYXRvciBuYW1lPVwiU29sdmVTZXBcIi8+IgorIAkgICAgIjxtZW51aXRlbSBuYW1lPVwiU29sdmVNZW51XCIgYWN0aW9uPVwiU29sdmVcIi8+IgorLQkgICAgIjwvcGxhY2Vob2xkZXI+PC9tZW51PjwvbWVudWJhcj48L3VpPiI7CisrCSAgICAiPC9wbGFjZWhvbGRlcj48L21lbnU+PC9tZW51PjwvbWVudWJhcj48L3VpPiI7CisgCistCWd0a191aV9tYW5hZ2VyX2FkZF91aV9mcm9tX3N0cmluZyAobWVyZ2UsIHN0ciwgLTEsIE5VTEwpOworKwlndGtfdWlfbWFuYWdlcl9hZGRfdWlfZnJvbV9zdHJpbmcgKG1lcmdlLCBzdHIsIC0xLCAmZXJyKTsKKysJaWYgKGVyciAhPSBOVUxMKSB7CisrCSAgICBnX3dhcm5pbmcgKCJFcnJvciBhZGRpbmcgc29sdmUuICVzIiwgZXJyLT5tZXNzYWdlKTsKKysJICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKKysJfQorICAgICB9CisgCisgICAgIGlmICgobiA9IG1pZGVuZF9udW1fcHJlc2V0cyhmZS0+bWUpKSA+IDAgfHwgdGhlZ2FtZS5jYW5fY29uZmlndXJlKSB7CisgCWdlbmVyYXRlX3NldHRpbmdzX21lbnUgKG1lcmdlLCBhY3Rpb25zLCBmZSk7CisgICAgIH0KKyAKKysgICAgLyogRG8gdGhpcyBzbyB0aGF0IHRoZSBtZW51IGlzIHBhY2tlZCBub3cgaW5zdGVhZCBvZiBpbiB0aGUgaWRsZSBsb29wICovCisrICAgIGd0a191aV9tYW5hZ2VyX2Vuc3VyZV91cGRhdGUgKG1lcmdlKTsKKysKKysgICAgb3dsX3NldF93aW5kb3dfbWVudV9pdGVtIChHVEtfV0lORE9XIChmZS0+d2luZG93KSwKKysJCQkgICAgICBHVEtfTUVOVV9JVEVNIChndGtfdWlfbWFuYWdlcl9nZXRfd2lkZ2V0IChtZXJnZSwgIi9tZW51YmFyL1RvcE1lbnUiKSkpOworKyAgICAKKyAgICAgc2V0dXBfY29sb3VycyAoZmUpOworICAgICBzZXR1cF9waXhidWZzIChmZSk7CisgCitAQCAtMTU3Miw3ICsxNjAwLDcgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdES19CVVRUT05fUkVMRUFTRV9NQVNLIHwKKyAJCQkgIEdES19CVVRUT05fTU9USU9OX01BU0spOworIAorLSAgICAvKiBUaGUgd2luZG93IGlzIHNob3duIG9uY2UgdGhlIG1lbnViYXIgaGFzIGJlZW4gYWRkZWQgKi8KKysgICAgZ3RrX3dpZGdldF9zaG93X2FsbCAoZmUtPndpbmRvdyk7CisgICAgIHJldHVybiBmZTsKKyB9CisgCitJbmRleDogc3JjL21lbnUueG1sCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3JjL21lbnUueG1sCShyZXZpc2lvbiAyMikKKysrKyBzcmMvbWVudS54bWwJKHdvcmtpbmcgY29weSkKK0BAIC0xLDI2ICsxLDI1IEBACisgPHVpPgorIDxtZW51YmFyPgorLTxtZW51IG5hbWU9IkdhbWVNZW51IiBhY3Rpb249IkdhbWUiPgorLQk8bWVudWl0ZW0gbmFtZT0iTmV3TWVudSIgYWN0aW9uPSJOZXciLz4KKy0JPG1lbnVpdGVtIG5hbWU9IlJlc3RhcnRNZW51IiBhY3Rpb249IlJlc3RhcnQiLz4KKy08IS0tCTxtZW51aXRlbSBuYW1lPSJTcGVjaWZpY01lbnUiIGFjdGlvbj0iU3BlY2lmaWMiLz4gLS0+CistCTxtZW51aXRlbSBuYW1lPSJSYW5kb21NZW51IiBhY3Rpb249IlJhbmRvbSIvPgorLQk8c2VwYXJhdG9yIG5hbWU9IkdhbWVTZXAxIi8+CistCTxtZW51aXRlbSBuYW1lPSJMb2FkTWVudSIgYWN0aW9uPSJMb2FkIi8+CistCTxtZW51aXRlbSBuYW1lPSJTYXZlTWVudSIgYWN0aW9uPSJTYXZlIi8+CistCTxzZXBhcmF0b3IgbmFtZT0iR2FtZVNlcDIiLz4KKy0JPG1lbnVpdGVtIG5hbWU9IlVuZG9NZW51IiBhY3Rpb249IlVuZG8iLz4KKy0JPG1lbnVpdGVtIG5hbWU9IlJlZG9NZW51IiBhY3Rpb249IlJlZG8iLz4KKy0JPHBsYWNlaG9sZGVyIG5hbWU9IkNvcHlQbGFjZWhvbGRlciIvPgorLQk8cGxhY2Vob2xkZXIgbmFtZT0iU29sdmVQbGFjZWhvbGRlciIvPgorLQk8c2VwYXJhdG9yIG5hbWU9IkdhbWVTZXAzIi8+CistCTxtZW51aXRlbSBuYW1lPSJRdWl0TWVudSIgYWN0aW9uPSJRdWl0Ii8+CistPC9tZW51PgorKzxtZW51IG5hbWU9IlRvcE1lbnUiIGFjdGlvbj0iVG9wIj4KKysJPG1lbnUgbmFtZT0iR2FtZU1lbnUiIGFjdGlvbj0iR2FtZSI+CisrCQk8bWVudWl0ZW0gbmFtZT0iTmV3TWVudSIgYWN0aW9uPSJOZXciLz4KKysJCTxtZW51aXRlbSBuYW1lPSJSZXN0YXJ0TWVudSIgYWN0aW9uPSJSZXN0YXJ0Ii8+CisrCTwhLS0JPG1lbnVpdGVtIG5hbWU9IlNwZWNpZmljTWVudSIgYWN0aW9uPSJTcGVjaWZpYyIvPiAtLT4KKysJCTxtZW51aXRlbSBuYW1lPSJSYW5kb21NZW51IiBhY3Rpb249IlJhbmRvbSIvPgorKwkJPHNlcGFyYXRvciBuYW1lPSJHYW1lU2VwMSIvPgorKwkJPG1lbnVpdGVtIG5hbWU9IkxvYWRNZW51IiBhY3Rpb249IkxvYWQiLz4KKysJCTxtZW51aXRlbSBuYW1lPSJTYXZlTWVudSIgYWN0aW9uPSJTYXZlIi8+CisrCQk8c2VwYXJhdG9yIG5hbWU9IkdhbWVTZXAyIi8+CisrCQk8bWVudWl0ZW0gbmFtZT0iVW5kb01lbnUiIGFjdGlvbj0iVW5kbyIvPgorKwkJPG1lbnVpdGVtIG5hbWU9IlJlZG9NZW51IiBhY3Rpb249IlJlZG8iLz4KKysJCTxwbGFjZWhvbGRlciBuYW1lPSJDb3B5UGxhY2Vob2xkZXIiLz4KKysJCTxwbGFjZWhvbGRlciBuYW1lPSJTb2x2ZVBsYWNlaG9sZGVyIi8+CisrCTwvbWVudT4KKyAKKy08cGxhY2Vob2xkZXIgbmFtZT0iVHlwZVBsYWNlaG9sZGVyIi8+CistCistPG1lbnUgbmFtZT0iSGVscE1lbnUiIGFjdGlvbj0iSGVscCI+CisrCTxwbGFjZWhvbGRlciBuYW1lPSJUeXBlUGxhY2Vob2xkZXIiLz4KKyAJPG1lbnVpdGVtIG5hbWU9IkFib3V0TWVudSIgYWN0aW9uPSJBYm91dCIvPgorKwk8bWVudWl0ZW0gbmFtZT0iUXVpdE1lbnUiIGFjdGlvbj0iUXVpdCIvPgorKworIDwvbWVudT4KKyA8L21lbnViYXI+CisgPC91aT4KK0luZGV4OiBzcmMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzcmMvTWFrZWZpbGUuYW0JKHJldmlzaW9uIDIyKQorKysrIHNyYy9NYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQorQEAgLTEwLDcgKzEwLDcgQEAKKyAJbGlnaHR1cCBsb29weSBtYXAgbWluZXMgbmV0IG5ldHNsaWRlIHBhdHRlcm4gcGVncyByZWN0IHNhbWVnYW1lIFwKKyAJc2l4dGVlbiBzbGFudCBzb2xvIHRlbnRzIHR3aWRkbGUgdW50YW5nbGUKKyAKKy1saWJwdXp6bGVzX2xhX0xJQkFERCA9ICQoUFVaWkxFU19MSUJTKQorK2xpYnB1enpsZXNfbGFfTElCQUREID0gJChQVVpaTEVTX0xJQlMpIC1sb3dsCisgbGlicHV6emxlc19sYV9TT1VSQ0VTID0gY29tYmkuYyBcCisgCQkJY29uZmlndXJhdGlvbi5jIFwKKyAJCQlkcmF3aW5nLmMgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL29oLXB1enpsZXNfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL29oLXB1enpsZXNfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2Y2QyY2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvb2gtcHV6emxlc19naXQuYmIKQEAgLTAsMCArMSw3NCBAQAorU1VNTUFSWSA9ICJQb3J0YWJsZSBQdXp6bGUgQ29sbGVjdGlvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly9vLWhhbmQuY29tLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOQ0U7bWQ1PWY1NmVjNjc3MmRkMWM3YzM2NzA2N2JiZWE4ZWExNjc1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy90cmVlMjM0Lmg7ZW5kbGluZT0yODttZDU9YTE4OGU2ZDI1MDQzMGNhMDk0YTU0YTgyZjQ4NDcyYTcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3RyZWUyMzQuYztlbmRsaW5lPTI4O21kNT1iNGZlYjE5NzZmZWViZjhmMTM3OTA5M2VkNTJmMjk0NSIKKworU0VDVElPTiA9ICJ4MTEiCitERVBFTkRTID0gImd0aysgZ2NvbmYgaW50bHRvb2wtbmF0aXZlIGxpYnJzdmciCisKKyMgbGlib3dsIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK0RFUEVORFNfYXBwZW5kX3Bva3kgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ2xpYm93bCcsICcnLCBkKX0iCisKKyMgUmVxdWlyZXMgZ2RrL2dka3guaCB3aGljaCBpcyBwcm92aWRlZCBieSBndGsgd2hlbiB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitTUkNSRVYgPSAiOTJmMWEyMGU0YjcyZWVkN2EzNWIwMDk4NGQ5NzkzYjUxZGMyZmIzYiIKK1BWID0gIjAuMitnaXQke1NSQ1BWfSIKK1BSID0gInIxMCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0iCitTUkNfVVJJX2FwcGVuZF9wb2t5ID0gIiBmaWxlOi8vb2gtcHV6emxlcy1vd2wtbWVudS5wYXRjaDtzdHJpcGxldmVsPTAgIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK2JpbmRpciA9ICIvdXNyL2dhbWVzIgorCitFWFRSQV9PRU1BS0UgKz0gIkdDT05GX0RJU0FCTEVfTUFLRUZJTEVfU0NIRU1BX0lOU1RBTEw9MSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfS8ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8KKworICAgIGNkICR7RH0vJHtwcmVmaXh9L2dhbWVzCisgICAgZm9yIHByb2cgaW4gKjsgZG8KKwlpZiBbIC14ICRwcm9nIF07IHRoZW4KKyAgICAgICAgICAgICMgQ29udmVydCBwcm9nIHRvIFRpdGxlIENhc2UKKyAgICAgICAgICAgIHRpdGxlPSQoZWNobyAkcHJvZyB8IHNlZCAncy9cKF5cfCBcKS4vXFUmL2cnKQorCSAgICBlY2hvICJtYWtpbmcgJHtEfS8ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8kcHJvZy5kZXNrdG9wIgorCSAgICBjYXQgPDxTVE9QID4gJHtEfS8ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8kcHJvZy5kZXNrdG9wCitbRGVza3RvcCBFbnRyeV0KK05hbWU9JHRpdGxlCitFeGVjPSR7cHJlZml4fS9nYW1lcy8kcHJvZworSWNvbj1hcHBsaWNhdGlvbnMtZ2FtZXMKK1Rlcm1pbmFsPWZhbHNlCitUeXBlPUFwcGxpY2F0aW9uCitDYXRlZ29yaWVzPUdhbWU7CitTdGFydHVwTm90aWZ5PXRydWUKK1gtTUItU2luZ2xlSW5zdGFuY2U9dHJ1ZQorQ29tbWVudD1QbGF5ICR0aXRsZS4KK1NUT1AKKyAgICAgICAgZmkKKyAgICBkb25lCit9CisKK1BBQ0tBR0VTICs9ICIke1BOfS1leHRyYSIKK1JERVBFTkRTXyR7UE59LWV4dHJhICs9ICJvaC1wdXp6bGVzIgorCitGSUxFU18ke1BOfSA9ICIvdXNyL3NoYXJlL3BpeG1hcHMgL3Vzci9zaGFyZS9vaC1wdXp6bGVzLyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiL3Vzci9nYW1lcy8uZGVidWcvKiIKK0ZJTEVTXyR7UE59LWV4dHJhID0gIi91c3IvZ2FtZXMvIC91c3Ivc2hhcmUvYXBwbGljYXRpb25zIC9ldGMvZ2NvbmYvc2NoZW1hcyIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICB2YXIgPSBiYi5kYXRhLmV4cGFuZCgiRklMRVNfJHtQTn0iLCBkLCAxKQorICAgIGRhdGEgPSBkLmdldFZhcih2YXIsIFRydWUpCisgICAgZm9yIG5hbWUgaW4gKCJicmlkZ2VzIiwgImZpZnRlZW4iLCAiaW5lcnRpYSIsICJtYXAiLCAic2FtZWdhbWUiLCAic2xhbnQiKToKKyAgICAgICAgZGF0YSA9IGRhdGEgKyAiIC91c3IvZ2FtZXMvJXMiICUgbmFtZQorICAgICAgICBkYXRhID0gZGF0YSArICIgL3Vzci9zaGFyZS9hcHBsaWNhdGlvbnMvJXMuZGVza3RvcCIgJSBuYW1lCisgICAgICAgIGRhdGEgPSBkYXRhICsgIiAvZXRjL2djb25mL3NjaGVtYXMvJXMuc2NoZW1hcyIgJSBuYW1lCisgICAgZC5zZXRWYXIodmFyLCBkYXRhKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL3B1enpsZXNfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL3B1enpsZXNfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ODI2YzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvcHV6emxlc19naXQuYmIKQEAgLTAsMCArMSw2MSBAQAorU1VNTUFSWSA9ICJTaW1vbiBUYXRoYW0ncyBQb3J0YWJsZSBQdXp6bGUgQ29sbGVjdGlvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vcHV6emxlcy8iCisKK0RFUEVORFMgPSAiZ3RrKyBsaWJ4dCIKKworIyBUaGUgbGlieHQgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTkNFO21kNT0zM2JjZDRiY2U4ZjNjMTk3ZjJhZWZiZGJkMmQyOTliYyIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQudGFydGFydXMub3JnL3NpbW9uL3B1enpsZXMuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1jb21waWxpbmctZmFpbHVyZS13aXRoLW9wdGlvbi1nLU8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1Vc2UtbGFicy1pbnN0ZWFkLW9mLWFicy5wYXRjaCBcCisiCitTUkNSRVYgPSAiYzI5NjMwMWEwNmNlNDliODdjOTU0YzlkMTU0NTI1MjFkZmVkZGYxYSIKK1BFID0gIjEiCitQViA9ICIwLjArZ2l0JHtTUkNQVn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworICAgIC4vbWtmaWxlcy5wbAorfQorCitGSUxFU18ke1BOfSA9ICIke3ByZWZpeH0vYmluLyogJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtwcmVmaXh9L2Jpbi8uZGVidWciCisKK2RvX2luc3RhbGwgKCkgeworICAgIHJtIC1yZiAke0R9LyoKKyAgICBleHBvcnQgcHJlZml4PSR7RH0KKyAgICBleHBvcnQgREVTVERJUj0ke0R9CisgICAgaW5zdGFsbCAtZCAke0R9LyR7cHJlZml4fS9iaW4vCisgICAgb2VfcnVubWFrZSBpbnN0YWxsCisKKworICAgIGluc3RhbGwgLWQgJHtEfS8ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8KKworICAgICMgQ3JlYXRlIGRlc2t0b3Agc2hvcnRjdXRzCisgICAgY2QgJHtEfS8ke3ByZWZpeH0vYmluCisgICAgZm9yIHByb2cgaW4gKjsgZG8KKwlpZiBbIC14ICRwcm9nIF07IHRoZW4KKyAgICAgICAgICAgICMgQ29udmVydCBwcm9nIHRvIFRpdGxlIENhc2UKKyAgICAgICAgICAgIHRpdGxlPSQoZWNobyAkcHJvZyB8IHNlZCAncy9cKF5cfCBcKS4vXFUmL2cnKQorCSAgICBlY2hvICJtYWtpbmcgJHtEfS8ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8kcHJvZy5kZXNrdG9wIgorCSAgICBjYXQgPDxTVE9QID4gJHtEfS8ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8kcHJvZy5kZXNrdG9wCitbRGVza3RvcCBFbnRyeV0KK05hbWU9JHRpdGxlCitFeGVjPSR7cHJlZml4fS9iaW4vJHByb2cKK0ljb249YXBwbGljYXRpb25zLWdhbWVzCitUZXJtaW5hbD1mYWxzZQorVHlwZT1BcHBsaWNhdGlvbgorQ2F0ZWdvcmllcz1HYW1lOworU3RhcnR1cE5vdGlmeT10cnVlCitYLU1CLVNpbmdsZUluc3RhbmNlPXRydWUKK1NUT1AKKyAgICAgICAgZmkKKyAgICBkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9yeHZ0LXVuaWNvZGUvcnh2dC11bmljb2RlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGE0M2MwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9yeHZ0LXVuaWNvZGUvcnh2dC11bmljb2RlLmluYwpAQCAtMCwwICsxLDU4IEBACitTRUNUSU9OID0gIngxMS91dGlscyIKK1NVTU1BUlkgPSAicnh2dCB0ZXJtaW5hbCBjbG9uZSBzdXBwb3J0aW5nIHVuaWNvZGUiCitERVNDUklQVElPTiA9ICJyeHZ0LXVuaWNvZGUgaXMgYSBjbG9uZSBvZiB0aGUgd2VsbCBrbm93biBcCit0ZXJtaW5hbCBlbXVsYXRvciByeHZ0LCBtb2RpZmllZCB0byBzdG9yZSB0ZXh0IGluIFVuaWNvZGUgXAorKGVpdGhlciBVQ1MtMiBvciBVQ1MtNCkgYW5kIHRvIHVzZSBsb2NhbGUtY29ycmVjdCBpbnB1dCBhbmQgXAorb3V0cHV0LiBJdCBhbHNvIHN1cHBvcnRzIG1peGluZyBtdWx0aXBsZSBmb250cyBhdCB0aGUgXAorc2FtZSB0aW1lLCBpbmNsdWRpbmcgWGZ0IGZvbnRzLiIKK0RFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlieHQgbGlieGZ0IGdkay1waXhidWYiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rpc3Quc2NobW9ycC5kZS9yeHZ0LXVuaWNvZGUvQXR0aWMvcnh2dC11bmljb2RlLSR7UFZ9LnRhci5iejIgXAorCSAgIGZpbGU6Ly94d2MucGF0Y2ggXAorCSAgIGZpbGU6Ly9yeHZ0LmRlc2t0b3AgXAorCSAgIGZpbGU6Ly9yeHZ0LnBuZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLWFsdGVybmF0aXZlcworCitQUk9WSURFUyA9ICJ2aXJ0dWFsL3gtdGVybWluYWwtZW11bGF0b3IiCitBTFRFUk5BVElWRV8ke1BOfSA9ICJ4LXRlcm1pbmFsLWVtdWxhdG9yIgorQUxURVJOQVRJVkVfVEFSR0VUW3gtdGVybWluYWwtZW11bGF0b3JdID0gIiR7YmluZGlyfS9yeHZ0IgorCitDRkxBR1NfYXBwZW5kID0gIiAtZnBlcm1pc3NpdmUiCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS14aW0gXAorCQktLWVuYWJsZS11dG1wIC0tZW5hYmxlLXd0bXAgLS1lbmFibGUtbGFzdGxvZyBcCisJCS0td2l0aC10ZXJtPXJ4dnQgLS1lbmFibGUta2VlcHNjcm9sbGluZyBcCisJCS0tZW5hYmxlLXhmdCAtLXdpdGgtbmFtZT1yeHZ0IC0tZW5hYmxlLWZyaWxscyBcCisJCS0tZW5hYmxlLXN3YXBzY3JlZW4gLS1lbmFibGUtdHJhbnNwYXJlbmN5IFwKKwkJLS13aXRoLWNvZGVzZXRzPWV1IC0tZW5hYmxlLXBvaW50ZXItYmxhbmsgXAorCQktLWVuYWJsZS10ZXh0LWJsaW5rIC0tZW5hYmxlLXJ4dnQtc2Nyb2xsIFwKKwkJLS1lbmFibGUtY29tYmluaW5nIC0tZGlzYWJsZS1wZXJsIFwKKwkJLS13aXRoLXg9JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbc3RhcnR1cF0gPSAiLS1lbmFibGUtc3RhcnR1cC1ub3RpZmljYXRpb24sLS1kaXNhYmxlLXN0YXJ0dXAtbm90aWZpY2F0aW9uLHN0YXJ0dXAtbm90aWZpY2F0aW9uLCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCWlmIFsgISAtZSAke1N9L2FjaW5jbHVkZS5tNCBdOyB0aGVuCisJCWNwICR7U30vYWNsb2NhbC5tNCAke1N9L2FjaW5jbHVkZS5tNAorCWZpCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZCAoKSB7CisJZWNobyAnI2RlZmluZSBVVE1QX0ZJTEUgIiR7bG9jYWxzdGF0ZWRpcn0vcnVuL3V0bXAiJyA+PiBjb25maWcuaAorCWVjaG8gJyNkZWZpbmUgV1RNUF9GSUxFICIke2xvY2Fsc3RhdGVkaXJ9L2xvZy93dG1wIicgPj4gY29uZmlnLmgKKwllY2hvICcjZGVmaW5lIExBU1RMT0dfRklMRSAiJHtsb2NhbHN0YXRlZGlyfS9sb2cvbGFzdGxvZyInID4+IGNvbmZpZy5oCisJZWNobyAnI2RlZmluZSBIQVZFX1hMT0NBTEUgMScgPj4gY29uZmlnLmgKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke2RhdGFkaXJ9CisJaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zCisJaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0vcGl4bWFwcy8KKworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3J4dnQucG5nICR7RH0vJHtkYXRhZGlyfS9waXhtYXBzCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcnh2dC5kZXNrdG9wICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMKK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vYXBwbGljYXRpb25zL3J4dnQuZGVza3RvcCAke2RhdGFkaXJ9L3BpeG1hcHMvcnh2dC5wbmciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUvcnh2dC5kZXNrdG9wIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9yeHZ0LXVuaWNvZGUvcnh2dC11bmljb2RlL3J4dnQuZGVza3RvcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODJlYTQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9yeHZ0LXVuaWNvZGUvcnh2dC11bmljb2RlL3J4dnQuZGVza3RvcApAQCAtMCwwICsxLDkgQEAKK1tEZXNrdG9wIEVudHJ5XQorVmVyc2lvbj0xLjAKK05hbWU9VGVybWluYWwKK0NvbW1lbnQ9QSB1bmljb2RlIGNhcGFibGUgcnh2dCBjbG9uZQorRXhlYz1yeHZ0CitJY29uPXRlcm1pbmFsCitUZXJtaW5hbD1mYWxzZQorVHlwZT1BcHBsaWNhdGlvbgorQ2F0ZWdvcmllcz1VdGlsaXR5O1Rlcm1pbmFsRW11bGF0b3I7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUvcnh2dC5wbmcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUvcnh2dC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU2ZmEyZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS9yeHZ0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUveHdjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9yeHZ0LXVuaWNvZGUvcnh2dC11bmljb2RlL3h3Yy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmVmZWVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9yeHZ0LXVuaWNvZGUvcnh2dC11bmljb2RlL3h3Yy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtcnVOIHJ4dnQtdW5pY29kZS05LjEwLW9yaWcvL3NyYy9zY3JlZW4uQyByeHZ0LXVuaWNvZGUtOS4xMC9zcmMvc2NyZWVuLkMKKy0tLSByeHZ0LXVuaWNvZGUtOS4xMC1vcmlnLy9zcmMvc2NyZWVuLkMJMjAxMS0wNC0xOSAxMzozNDowMS4zMjc2NjQ5ODQgKzA4MDAKKysrKyByeHZ0LXVuaWNvZGUtOS4xMC9zcmMvc2NyZWVuLkMJMjAxMS0wNC0xOSAxMzozNDo0Ny4wMzc2NjUwMDEgKzA4MDAKK0BAIC0zMTUyLDcgKzMxNTIsNyBAQAorICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgfQorIAorLSNpZiAwCisrI2lmIEhBVkVfWFdDCisgICBYVGV4dFByb3BlcnR5IGN0OworIAorICAgaWYgKFh3Y1RleHRMaXN0VG9UZXh0UHJvcGVydHkgKGRweSwgJnNlbGVjdGlvbi50ZXh0LCAxLCBYU3RyaW5nU3R5bGUsICZjdCkgPj0gMCkKK0BAIC0zNzM0LDkgKzM3MzQsMTEgQEAKKyAgICAgICAgIH0KKyAgICAgICBlbHNlCisgI2VuZGlmCisrI2lmZGVmIEhBVkVfWFdDCisgICAgICAgaWYgKFh3Y1RleHRMaXN0VG9UZXh0UHJvcGVydHkgKGRweSwgJmNsLCAxLCAoWElDQ0VuY29kaW5nU3R5bGUpIHN0eWxlLCAmY3QpID49IDApCisgICAgICAgICBmcmVlY3QgPSAxOworICAgICAgIGVsc2UKKysjZW5kaWYKKyAgICAgICAgIHsKKyAgICAgICAgICAgLyogaWYgd2UgZmFpbGVkIHRvIGNvbnZlcnQgdGhlbiBzZW5kIGl0IHJhdyAqLworICAgICAgICAgICBjdC52YWx1ZSA9ICh1bnNpZ25lZCBjaGFyICopY2w7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGVfOS4yMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZV85LjIwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ODBlYzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGVfOS4yMC5iYgpAQCAtMCwwICsxLDggQEAKK3JlcXVpcmUgcnh2dC11bmljb2RlLmluYworCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9tYWluLkM7YmVnaW5saW5lPTE7ZW5kbGluZT0zMTttZDU9Nzc1NDg1Mzk4YTA5ZmE3YWVlNmY5MDQ2NGFmODg0MzIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0YTViODIzZjA4ZDIxMDM2Zjk0YTZjNTFlOTRkMDI1YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlNzNlMTNmZTY0YjU5ZmQzYzhlNmUyMGMwMGYxNDlkMzg4NzQxZjE0MWI4MTU1ZTQ3MDBkM2VkNDBhYTk0YjRlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9yeHZ0LXVuaWNvZGUvcnh2dC11bmljb2RlXzkuMjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGVfOS4yMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDQ5NDk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9yeHZ0LXVuaWNvZGUvcnh2dC11bmljb2RlXzkuMjEuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlIHJ4dnQtdW5pY29kZS5pbmMKKworTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9tYWluLkM7YmVnaW5saW5lPTE7ZW5kbGluZT0zMTttZDU9N2RhYzAzOTU4MDY1NzA4NTZlMDM3Zjk4YWJhODUxM2IiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhOWEwNmM2MDgyNThjNWZkMjQ3YzM3MjVkOGY0NDU4MiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3NTI3MGVkNzJiYzU4OTVhNjRhMWQ3MzkyYmY0NWE2MjIyMDQxOTIzNzFjMzk2NWJkM2RkOTc4ZGMwODg5NTZiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLWljb24tdGhlbWUvc2F0by1pY29uLXRoZW1lLzAwMDEtSW5oZXJpdC10aGUtR05PTUUtaWNvbi10aGVtZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2F0by1pY29uLXRoZW1lL3NhdG8taWNvbi10aGVtZS8wMDAxLUluaGVyaXQtdGhlLUdOT01FLWljb24tdGhlbWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMxNzZlZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2F0by1pY29uLXRoZW1lL3NhdG8taWNvbi10aGVtZS8wMDAxLUluaGVyaXQtdGhlLUdOT01FLWljb24tdGhlbWUucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSBiOWYwMjk4OTMxMGEzYzkyMDU4OWYxYWE2NDZiY2JmMTZiMjU3MmEwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK0RhdGU6IFdlZCwgMTMgSnVuIDIwMTIgMTE6MDc6MzMgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gSW5oZXJpdCB0aGUgR05PTUUgaWNvbiB0aGVtZQorCitJZiB0aGUgR05PTUUgaWNvbiB0aGVtZSBpc24ndCBpbnN0YWxsZWQgdGhpcyBpcyBhIG5vLW9wLCBidXQgaWYgaXQgaXMgdGhlbgoreW91J2xsIGdldCBmYWxsYmFjayBmcm9tIFNhdG8gdG8gR05PTUUgZm9yIGljb25zIHRoYXQgYXJlIG5vdCBpbiBTYXRvLgorCitBcyBhcHBsaWNhdGlvbnMgdGhhdCB1c2UgdGhlIGZ1bGwgR05PTUUgaWNvbiB0aGVtZSBkZXBlbmQgb24gZ25vbWUtaWNvbi10aGVtZSwKK3RoaXMganVzdCB3b3Jrcy4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorLS0tCisgaW5kZXgudGhlbWUgfCAgICAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2luZGV4LnRoZW1lIGIvaW5kZXgudGhlbWUKK2luZGV4IGM0YjAzYTcuLjY4OGZiYmYgMTAwNjQ0CistLS0gYS9pbmRleC50aGVtZQorKysrIGIvaW5kZXgudGhlbWUKK0BAIC0xLDYgKzEsNyBAQAorIFtJY29uIFRoZW1lXQorIE5hbWU9U2F0bworIENvbW1lbnQ9U2F0byBpY29uIHRoZW1lCisrSW5oZXJpdHM9QWR3YWl0YQorIAorIERpcmVjdG9yaWVzPTE2eDE2L2FwcHMsMTZ4MTYvc3RhdHVzLDE2eDE2L3N0b2NrLDE2eDE2L3BsYWNlcywxNngxNi9taW1ldHlwZXMsMTZ4MTYvZGV2aWNlcywxNngxNi9hY3Rpb25zLDIyeDIyL2FwcHMsMjJ4MjIvc3RhdHVzLDIyeDIyL3N0b2NrLDIyeDIyL3BsYWNlcywyMngyMi9taW1ldHlwZXMsMjJ4MjIvZGV2aWNlcywyMngyMi9hY3Rpb25zLDMyeDMyL2FwcHMsMzJ4MzIvc3RhdHVzLDMyeDMyL3N0b2NrLDMyeDMyL3BsYWNlcywzMngzMi9taW1ldHlwZXMsMzJ4MzIvZGV2aWNlcywzMngzMi9hY3Rpb25zLDQ4eDQ4L2FwcHMsNDh4NDgvc3RhdHVzLDQ4eDQ4L3N0b2NrLDQ4eDQ4L3BsYWNlcyw0OHg0OC9taW1ldHlwZXMsNDh4NDgvZGV2aWNlcyw0OHg0OC9hY3Rpb25zLDY0eDY0L2FwcHMsNjR4NjQvc3RhdHVzLDY0eDY0L3N0b2NrLDY0eDY0L3BsYWNlcyw2NHg2NC9taW1ldHlwZXMsNjR4NjQvZGV2aWNlcyw2NHg2NC9hY3Rpb25zLAorIAorLS0gCisxLjcuMTAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLWljb24tdGhlbWUvc2F0by1pY29uLXRoZW1lXzAuNC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLWljb24tdGhlbWUvc2F0by1pY29uLXRoZW1lXzAuNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZDczNWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NhdG8taWNvbi10aGVtZS9zYXRvLWljb24tdGhlbWVfMC40LjEuYmIKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJTYXRvIGljb24gdGhlbWUiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm8taGFuZC5jb20iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJDQy1CWS1TQS0zLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01NmE4MzBiYmU2ZTQ2OTdmZTZjYmJhZTAxYmI3YzJiMiIKK1NFQ1RJT04gPSAieDExIgorCitQUiA9ICJyNiIKKworREVQRU5EUyA9ICJpY29uLW5hbWluZy11dGlscy1uYXRpdmUgbGlieG1sLXNpbXBsZS1wZXJsLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vcG9reWxpbnV4Lm9yZy9yZWxlYXNlcy9zYXRvLyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1Jbmhlcml0LXRoZS1HTk9NRS1pY29uLXRoZW1lLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODZhODQ3ZjMxMjhhNDNhOWNmMjNiNzAyOWE2NTZmNTAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGIwYTI4MDdhNmE5NjkxOGFjNzk5YTg2MDk0ZWMzZThlMmM4OTJiZTBmZDY3OWE0MjMyYzJhNzdmMmY2MTczMiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGFsbGFyY2ggZ3RrLWljb24tY2FjaGUgcGVybG5hdGl2ZQorCisjIFRoZSBjb25maWd1cmUgc2NyaXB0IHVzZXMgcGtnLWNvbmZpZyB0byBmaW5kIG5hdGl2ZSBiaW5hcmllcyB0byBleGVjdXRlLCBzbworIyB0ZWxsIGl0IHRvIHVzZSBvdXIgcGtnLWNvbmZpZy1uYXRpdmUgd3JhcHBlci4KK2V4cG9ydCBQS0dfQ09ORklHID0gInBrZy1jb25maWctbmF0aXZlIgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9pY29ucy9TYXRvIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlmaW5kICR7RH0ke2RhdGFkaXJ9L2ljb25zL1NhdG8vIC1tYXhkZXB0aCAxIC10eXBlIGQgLWV4ZWMgbG4gLXMgcHJlZmVyZW5jZXMtc3lzdGVtLnBuZyB7fS9hcHBzL3ByZWZlcmVuY2VzLWRlc2t0b3AucG5nIFw7CisJZmluZCAke0R9JHtkYXRhZGlyfS9pY29ucy9TYXRvLyAtbWF4ZGVwdGggMSAtdHlwZSBkIC1leGVjIGxuIC1zIGZpbGUtbWFuYWdlci5wbmcge30vYXBwcy9zeXN0ZW0tZmlsZS1tYW5hZ2VyLnBuZyBcOworCWZpbmQgJHtEfSR7ZGF0YWRpcn0vaWNvbnMvU2F0by8gLW1heGRlcHRoIDEgLXR5cGUgZCAtZXhlYyBsbiAtcyAuLi9hcHBzL3Rlcm1pbmFsLnBuZyB7fS9wbGFjZXMvY29tcHV0ZXIucG5nIFw7Cit9CisKKyMgRXhwbGljdGx5IHNldHRpbmcgIlNhdG8iIGFzIHRoZSBkZWZhdWx0IGljb24gdGhlbWUgdG8gYXZvaWQgZmxpY2tlcmluZyBmcm9tCisjIHRoZSBkZXNrdG9wIGFuZCBzZXR0aW5ncyBkYWVtb24gcmFjaW5nLiAgVGhpcyBzaG91bGRuJ3QgYmUgZG9uZSBoZXJlIGJ1dCBpbiB0aGUgc2F0byBpbWFnZQorcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKyAgICBta2RpciAtcCAkRC9ldGMvZ3RrLTIuMAorCisgICAgZ3JlcCAtcyAtcSAtZSBeZ3RrLWljb24tdGhlbWUtbmFtZS4qXCJTYXRvXCIgJEQvZXRjL2d0ay0yLjAvZ3RrcmMgfHwgXAorICAgICAgICBlY2hvICdndGstaWNvbi10aGVtZS1uYW1lID0gIlNhdG8iJyA+PiAkRC9ldGMvZ3RrLTIuMC9ndGtyYworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLXNjcmVlbnNob3Qvc2F0by1zY3JlZW5zaG90X2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2F0by1zY3JlZW5zaG90L3NhdG8tc2NyZWVuc2hvdF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc5NDAzMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2F0by1zY3JlZW5zaG90L3NhdG8tc2NyZWVuc2hvdF9naXQuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJVbHRyYS1zaW1wbGUgc2NyZWVuIGNhcHR1cmUgdXRpbGl0eSwgYWltZWQgYXQgaGFuZGhlbGQgZGV2aWNlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuby1oYW5kLmNvbSIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWFpbi5jO2VuZGxpbmU9OTttZDU9MDIzZTE0ZDY0MDRkMGE5NjFlYjk3Y2JkMDExZmMxNDEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2NyZWVuc2hvdC11aS5oO2VuZGxpbmU9OTttZDU9NjM4ZDlmZmE4M2U5MzI1YTM2ZGYyMjQxNjZlZDZhZDAiCisKK0RFUEVORFMgPSAibWF0Y2hib3gtcGFuZWwtMiIKK1NSQ1JFViA9ICIzYTk2ODhlOGEwMWI2M2E3OGY0MDJiNGU3YzBiOGIwMDVmY2RmYTI5IgorUFYgPSAiMC4xK2dpdCR7U1JDUFZ9IgorUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvc2NyZWVuc2hvdCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLyouc28iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9tYXRjaGJveC1wYW5lbC8uZGVidWciCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlybSAke0R9JHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLyoubGEKK30KKworIyBUaGUgbWF0Y2hib3gtcGFuZWwtMiByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vZmlsZXMvNzBzZXR0aW5ncy1kYWVtb24uc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9maWxlcy83MHNldHRpbmdzLWRhZW1vbi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTM3NDEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vZmlsZXMvNzBzZXR0aW5ncy1kYWVtb24uc2gKQEAgLTAsMCArMSBAQAorL3Vzci9iaW4vc2V0dGluZ3MtZGFlbW9uICYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL2ZpbGVzL2FkZHNvdW5ka2V5cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL2ZpbGVzL2FkZHNvdW5ka2V5cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWYwNmQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vZmlsZXMvYWRkc291bmRrZXlzLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogc2V0dGluZ3MtZGFlbW9uL3NldHRpbmdzLWRhZW1vbi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc2V0dGluZ3MtZGFlbW9uLm9yaWcvc2V0dGluZ3MtZGFlbW9uLmMJMjAwOS0wNS0yMiAxNDo1NzowNS4wMDAwMDAwMDAgKzAxMDAKKysrKyBzZXR0aW5ncy1kYWVtb24vc2V0dGluZ3MtZGFlbW9uLmMJMjAwOS0wNS0yMiAxNDo1ODoyMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xODcsNiArMTg3LDEwIEBACisgICAgIEdDT05GX1ZBTFVFX1NUUklORywgdHJhbnNsYXRlX3N0cmluZ19zdHJpbmcgfSwKKyAgIHsgIi9kZXNrdG9wL3Bva3kvaW50ZXJmYWNlL2d0a19jb2xvcl9zY2hlbWUiLCAiR3RrL0NvbG9yU2NoZW1lIiwKKyAgICAgR0NPTkZfVkFMVUVfU1RSSU5HLCB0cmFuc2xhdGVfc3RyaW5nX3N0cmluZyB9LAorKyAgeyAiL2Rlc2t0b3AvZ25vbWUvc291bmQvdGhlbWVfbmFtZSIsICJOZXQvU291bmRUaGVtZU5hbWUiLAorKyAgICBHQ09ORl9WQUxVRV9TVFJJTkcsICAgdHJhbnNsYXRlX3N0cmluZ19zdHJpbmcgfSwKKysgIHsgIi9kZXNrdG9wL2dub21lL3NvdW5kL2V2ZW50X3NvdW5kcyIsICJOZXQvRW5hYmxlRXZlbnRTb3VuZHMiICwKKysgICAgR0NPTkZfVkFMVUVfQk9PTCwgICAgIHRyYW5zbGF0ZV9ib29sX2ludCB9LAorIH07CisgCisgc3RhdGljIGNvbnN0IFRyYW5zbGF0aW9uRW50cnkqCitJbmRleDogc2V0dGluZ3MtZGFlbW9uL3NldHRpbmdzLWRhZW1vbi5zY2hlbWFzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc2V0dGluZ3MtZGFlbW9uLm9yaWcvc2V0dGluZ3MtZGFlbW9uLnNjaGVtYXMJMjAwOS0wNS0yMiAxNTo0OToxNy4wMDAwMDAwMDAgKzAxMDAKKysrKyBzZXR0aW5ncy1kYWVtb24vc2V0dGluZ3MtZGFlbW9uLnNjaGVtYXMJMjAwOS0wNS0yMiAxNTo1MTozMS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xOTYsNiArMTk2LDI3IEBACisgICAgIDwvbG9jYWxlPgorICAgPC9zY2hlbWE+CisgCisrICA8c2NoZW1hPgorKyAgICA8a2V5Pi9zY2hlbWFzL2Rlc2t0b3AvZ25vbWUvc291bmQvdGhlbWVfbmFtZTwva2V5PgorKyAgICA8YXBwbHl0bz4vZGVza3RvcC9nbm9tZS9zb3VuZC90aGVtZV9uYW1lPC9hcHBseXRvPgorKyAgICA8b3duZXI+Z25vbWU8L293bmVyPgorKyAgICA8dHlwZT5zdHJpbmc8L3R5cGU+CisrICAgIDxkZWZhdWx0PmZyZWVkZXNrdG9wPC9kZWZhdWx0PgorKyAgICA8bG9jYWxlIG5hbWU9IkMiPgorKyAgICAgIDxzaG9ydD5Tb3VuZCBUaGVtZSBOYW1lPC9zaG9ydD4KKysgICAgPC9sb2NhbGU+CisrICA8L3NjaGVtYT4KKysKKysgIDxzY2hlbWE+CisrICAgIDxrZXk+L3NjaGVtYXMvZGVza3RvcC9nbm9tZS9zb3VuZC9ldmVudF9zb3VuZHM8L2tleT4KKysgICAgPGFwcGx5dG8+L2Rlc2t0b3AvZ25vbWUvc291bmQvZXZlbnRfc291bmRzPC9hcHBseXRvPgorKyAgICA8b3duZXI+Z25vbWU8L293bmVyPgorKyAgICA8dHlwZT5ib29sPC90eXBlPgorKyAgICA8ZGVmYXVsdD50cnVlPC9kZWZhdWx0PgorKyAgICA8bG9jYWxlIG5hbWU9IkMiPgorKyAgICAgIDxzaG9ydD5FbmFibGUgU291bmQgRXZlbnRzPC9zaG9ydD4KKysgICAgPC9sb2NhbGU+CisrICA8L3NjaGVtYT4KKyAKKyA8L3NjaGVtYWxpc3Q+CisgPC9nY29uZnNjaGVtYWZpbGU+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9maWxlcy9kc29fbGlua2luZ19jaGFuZ2VfYnVpbGRfZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vZmlsZXMvZHNvX2xpbmtpbmdfY2hhbmdlX2J1aWxkX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTQzNzQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vZmlsZXMvZHNvX2xpbmtpbmdfY2hhbmdlX2J1aWxkX2ZpeC5wYXRjaApAQCAtMCwwICsxLDMxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK2FmdGVyIGdjYyBsaW5raW5nIGhhcyBjaGFuZ2VkLCBhbGwgdGhlIGxpYnJhcmllcyBtdXN0IGJlIGV4cGxpY2l0ZWx5IHNwZWNpZmllZCB0byBmb3IgbGlua2luZy4gCitUaGlzIHBhdGNoIGF2b2lkcyB0aGlzIGxpbmtpbmcgZXJyb3I6CisKK3wgbWFrZSAgYWxsLWFtXk0KK3wgbWFrZVsxXTogRW50ZXJpbmcgZGlyZWN0b3J5IGAvZGlzazAvcG9reWJ1aWxkL2J1aWxkMS90bXAvd29yay9pNTg2LXBva3ktbGludXgvc2V0dGluZ3MtZGFlbW9uLTAuMCtzdm5yMjA1OS1yMy9zZXR0aW5ncy1kYWVtb24nXk0KK3wgY2NhY2hlIGk1ODYtcG9reS1saW51eC1nY2MgLW1hcmNoPWk1ODYgLS1zeXNyb290PS9kaXNrMC9wb2t5YnVpbGQvYnVpbGQxL3RtcC9zeXNyb290cy9pNTg2LXBva3ktbGludXggLVdhbGwgLWZleHBlbnNpdmUtb3B0aW1pemF0aW9ucyAtZm9taXQtZnJhbWUtcG9pbnRlciAtZnJlbmFtZS1yZWdpc3RlcnMgLU8yIC1nZ2RiIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAgLVdsLC1PMSAtV2wsLS1oYXNoLXN0eWxlPWdudSAtV2wsLS1hcy1uZWVkZWQgLW8gc2V0dGluZ3MtZGFlbW9uIHNldHRpbmdzX2RhZW1vbi14c2V0dGluZ3MtY29tbW9uLm8gc2V0dGluZ3NfZGFlbW9uLXhzZXR0aW5ncy1tYW5hZ2VyLm8gc2V0dGluZ3NfZGFlbW9uLXNldHRpbmdzLWRhZW1vbi5vIC1wdGhyZWFkIC1sZ2NvbmYtMiAtbGRidXMtZ2xpYi0xIC1sZGJ1cy0xIC1scHRocmVhZCAtbGdkay14MTEtMi4wIC1sZ2RrX3BpeGJ1Zi0yLjAgLWxwYW5nb2NhaXJvLTEuMCAtbHBhbmdvLTEuMCAtbGNhaXJvIC1sZ29iamVjdC0yLjAgLWxnbW9kdWxlLTIuMCAtbGd0aHJlYWQtMi4wIC1scnQgLWxnbGliLTIuMF5NCit8IC9kaXNrMC9wb2t5YnVpbGQvYnVpbGQxL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYmV4ZWMvaTU4Ni1wb2t5LWxpbnV4L2djYy9pNTg2LXBva3ktbGludXgvNC41LjEvbGQ6ICpeQTogaW52YWxpZCBEU08gZm9yIHN5bWJvbCBgWENyZWF0ZVNpbXBsZVdpbmRvdycgZGVmaW5pdGlvbl5NCit8IC9kaXNrMC9wb2t5YnVpbGQvYnVpbGQxL3RtcC9zeXNyb290cy9pNTg2LXBva3ktbGludXgvdXNyL2xpYi9saWJYMTEuc28uNjogY291bGQgbm90IHJlYWQgc3ltYm9sczogQmFkIHZhbHVlXk0KK3wgY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXNeTQorfCBtYWtlWzFdOiAqKiogW3NldHRpbmdzLWRhZW1vbl0gRXJyb3IgMV5NCit8IG1ha2VbMV06IExlYXZpbmcgZGlyZWN0b3J5IGAvZGlzazAvcG9reWJ1aWxkL2J1aWxkMS90bXAvd29yay9pNTg2LXBva3ktbGludXgvc2V0dGluZ3MtZGFlbW9uLTAuMCtzdm5yMjA1OS1yMy9zZXR0aW5ncy1kYWVtb24nXk0KK3wgbWFrZTogKioqIFthbGxdIEVycm9yIDJeTQorCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorRGF0ZTogMjAxMS8wMS8xMQorCitJbmRleDogc2V0dGluZ3MtZGFlbW9uL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNldHRpbmdzLWRhZW1vbi5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHNldHRpbmdzLWRhZW1vbi9jb25maWd1cmUuYWMKK0BAIC0xNCw3ICsxNCw3IEBAIEFDX1BST0dfQ0MKKyAKKyAKKyBkbmwgVE9ETzogbWFrZSBnY29uZiBvcHRpb25hbAorLVBLR19DSEVDS19NT0RVTEVTKEFQUCwgW2djb25mLTIuMCBnZGsteDExLTIuMF0pCisrUEtHX0NIRUNLX01PRFVMRVMoQVBQLCBbZ2NvbmYtMi4wIGdkay14MTEtMi4wIHgxMV0pCisgCisgCisgQUNfU1VCU1QoQVBQX0NGTEFHUykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL3NldHRpbmdzLWRhZW1vbl9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9zZXR0aW5ncy1kYWVtb25fZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNjE1NTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9zZXR0aW5ncy1kYWVtb25fZ2l0LmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiUHJvdmlkZXMgYSBicmlkZ2UgYmV0d2VlbiBnY29uZiBhbmQgeHNldHRpbmdzIgorSE9NRVBBR0UgPSAiaHR0cDovL3N2bi5vLWhhbmQuY29tL3ZpZXcvbWF0Y2hib3gvdHJ1bmsvc2V0dGluZ3MtZGFlbW9uLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly94c2V0dGluZ3MtbWFuYWdlci5oO2VuZGxpbmU9MjI7bWQ1PTdjZmFjOWQyZDRkYzM2OTRjYzdlYjYwNWNmMzJhNjliIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3hzZXR0aW5ncy1jb21tb24uaDtlbmRsaW5lPTIyO21kNT03Y2ZhYzlkMmQ0ZGMzNjk0Y2M3ZWI2MDVjZjMyYTY5YiIKK0RFUEVORFMgPSAiZ2NvbmYgZ2xpYi0yLjAgZ3RrKyIKK1NFQ1RJT04gPSAieDExIgorU1JDUkVWID0gIjlhOTk1MjhiMDIyNTU0NTBkYjgxMTc2YWJkOWJiY2MxZGFiOWE0YzEiCitQViA9ICIwLjArZ2l0JHtTUkNQVn0iCisKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy94c2V0dGluZ3MtZGFlbW9uIFwKKyAgICAgICAgICAgZmlsZTovL2FkZHNvdW5ka2V5cy5wYXRjaDthcHBseT15ZXMgXAorICAgICAgICAgICBmaWxlOi8vNzBzZXR0aW5ncy1kYWVtb24uc2ggXAorICAgICAgICAgICBmaWxlOi8vZHNvX2xpbmtpbmdfY2hhbmdlX2J1aWxkX2ZpeC5wYXRjaCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdjb25mIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitGSUxFU18ke1BOfSA9IAkiJHtiaW5kaXJ9LyogJHtzeXNjb25mZGlyfSIKKworIyBSZXF1aXJlcyBnZGsteDExLTIuMCB3aGljaCBpcyBwcm92aWRlZCBieSBndGsgd2hlbiB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vWDExL1hzZXNzaW9uLmQKKwlpbnN0YWxsIC1tIDc1NSAke1dPUktESVJ9Lzcwc2V0dGluZ3MtZGFlbW9uLnNoICR7RH0vJHtzeXNjb25mZGlyfS9YMTEvWHNlc3Npb24uZC8KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2h1dGRvd24tZGVza3RvcC9zaHV0ZG93bi1kZXNrdG9wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zaHV0ZG93bi1kZXNrdG9wL3NodXRkb3duLWRlc2t0b3AuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJkZDZkMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2h1dGRvd24tZGVza3RvcC9zaHV0ZG93bi1kZXNrdG9wLmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiUHJvdmlkZXMgYW4gaWNvbiB0byBzaHV0IGRvd24gdGhlIHN5c3RlbSBjbGVhbmx5IgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworU1JDX1VSSSA9ICJmaWxlOi8vc2h1dGRvd24uZGVza3RvcCIKKworUFIgPSAicjEiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucworCWluc3RhbGwgLW0gMDY0NCBzaHV0ZG93bi5kZXNrdG9wICR7RH0ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8KKworCXNlZCAtaSAke0R9JHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvc2h1dGRvd24uZGVza3RvcCAtZSAncyNeRXhlYz1cKC4qXCkjRXhlYz0ke2Jhc2Vfc2JpbmRpcn0vXDEjJworfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworICAgIGdyZXAgLXEgcWVtdWFybSAkRCR7c3lzY29uZmRpcn0vaG9zdG5hbWUgJiYgXAorICAgICAgICBzZWQgLWkgJEQke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9zaHV0ZG93bi5kZXNrdG9wIC1lICdzI15FeGVjPVwoLipcKS9oYWx0I0V4ZWM9XDEvcmVib290IycgXAorICAgICAgICB8fCB0cnVlCit9CisKK2luaGVyaXQgYWxsYXJjaApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zaHV0ZG93bi1kZXNrdG9wL3NodXRkb3duLWRlc2t0b3Avc2h1dGRvd24uZGVza3RvcCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2h1dGRvd24tZGVza3RvcC9zaHV0ZG93bi1kZXNrdG9wL3NodXRkb3duLmRlc2t0b3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYyNjU5YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2h1dGRvd24tZGVza3RvcC9zaHV0ZG93bi1kZXNrdG9wL3NodXRkb3duLmRlc2t0b3AKQEAgLTAsMCArMSwxMCBAQAorW0Rlc2t0b3AgRW50cnldCitFbmNvZGluZz1VVEYtOAorVHlwZT1BcHBsaWNhdGlvbgorTmFtZT1TaHV0ZG93bgorQ29tbWVudD1DbG9zZSBkb3duIHRoZSBtYWNoaW5lIHNhZmVseQorRXhlYz1wb3dlcm9mZgorSWNvbj1zeXN0ZW0tc2h1dGRvd24KK1Rlcm1pbmFsPWZhbHNlCitDYXRlZ29yaWVzPVV0aWxpdHk7CitTdGFydHVwTm90aWZ5PXRydWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L2ZpbGVzLzAwMDEtVGhpcy1wYXRjaC1maXhlcy1hLWNvbW1hbmQtbGluZS10aGF0LWlzLXRvby1sb25nLW92ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L2ZpbGVzLzAwMDEtVGhpcy1wYXRjaC1maXhlcy1hLWNvbW1hbmQtbGluZS10aGF0LWlzLXRvby1sb25nLW92ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGIzNDIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvZmlsZXMvMDAwMS1UaGlzLXBhdGNoLWZpeGVzLWEtY29tbWFuZC1saW5lLXRoYXQtaXMtdG9vLWxvbmctb3ZlLnBhdGNoCkBAIC0wLDAgKzEsOTEgQEAKK0Zyb20gMjJkNTA2M2M1NTFkM2MwOGMwYTRhZDhiODBlMDhiNzkzZDUzMDkzZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogVGh1LCAxMCBTZXAgMjAxNSAxNjoyMzoyNyArMDMwMAorU3ViamVjdDogW1BBVENIXSBUaGlzIHBhdGNoIGZpeGVzIGEgY29tbWFuZCBsaW5lIHRoYXQgaXMgdG9vIGxvbmcgKG92ZXIgMTAwSyEpCisgYW5kIGlzIHJlamVjdGVkIGJ5IC9iaW4vc2guCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW3Nob3VsZCBhcHBlYXIgaW4gMi4xMCwgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTg0ODU2XQorU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CisKKy0tLQorIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlICAgICAgICAgICAgICAgICAgIHwgMTEgKysrKysrLS0tLS0KKyBUb29scy9ndGsvZ2VuZXJhdGUtaW5zcGVjdG9yLWdyZXNvdXJjZS1tYW5pZmVzdC5weSB8IDE2ICsrKysrKysrKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCitpbmRleCBhMTNhZjdjLi4wNThjMjQxIDEwMDY0NAorLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKKysrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCitAQCAtNDA4LDcgKzQwOCw3IEBAIHNldChXZWJLaXQyV2ViRXh0ZW5zaW9uX0lOU1RBTExFRF9IRUFERVJTCisgICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay93ZWJraXQtd2ViLWV4dGVuc2lvbi5oCisgKQorIAorLWZpbGUoR0xPQiBJbnNwZWN0b3JGaWxlcworK3NldChJbnNwZWN0b3JGaWxlcworICAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlLyouaHRtbAorICAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvKi5qcworICAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzLyouY3NzCitAQCAtNDIzLDEzICs0MjMsMTQgQEAgZmlsZShHTE9CIEluc3BlY3RvckZpbGVzCisgICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvKi5qcworICAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0ltYWdlcy9ndGsvKi5wbmcKKyAgICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9JbWFnZXMvZ3RrLyouc3ZnCistKQorLQorLWxpc3QoQVBQRU5EIEluc3BlY3RvckZpbGVzCisgICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYkluc3BlY3RvclVJL0xvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcworICAgICAke0RFUklWRURfU09VUkNFU19XRUJJTlNQRUNUT1JVSV9ESVJ9L1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisgKQorIAorK2ZpbGUoR0xPQiBJbnNwZWN0b3JGaWxlc0RlcGVuZGVuY2llcworKyAgICAke0luc3BlY3RvckZpbGVzfQorKykKKysKKyAjIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugb2YgYSBjb25mbGljdCBiZXR3ZWVuIHRoZSBHVEsrIEFQSSBXZWJLaXRWZXJzaW9uLmggYW5kIG9uZSBnZW5lcmF0ZWQgYnkgV2ViQ29yZS4KKyBsaXN0KElOU0VSVCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMgMAorICAgICAiJHtGT1JXQVJESU5HX0hFQURFUlNfV0VCS0lUMkdUS19ESVJ9IgorQEAgLTU2NCw3ICs1NjUsNyBAQCBhZGRfY3VzdG9tX2NvbW1hbmQoCisgCisgYWRkX2N1c3RvbV9jb21tYW5kKAorICAgICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfV0VCS0lUMkdUS19ESVJ9L0luc3BlY3RvckdSZXNvdXJjZUJ1bmRsZS54bWwKKy0gICAgREVQRU5EUyAke0luc3BlY3RvckZpbGVzfQorKyAgICBERVBFTkRTICR7SW5zcGVjdG9yRmlsZXNEZXBlbmRlbmNpZXN9CisgICAgICAgICAgICAgJHtUT09MU19ESVJ9L2d0ay9nZW5lcmF0ZS1pbnNwZWN0b3ItZ3Jlc291cmNlLW1hbmlmZXN0LnB5CisgICAgIENPTU1BTkQgJHtUT09MU19ESVJ9L2d0ay9nZW5lcmF0ZS1pbnNwZWN0b3ItZ3Jlc291cmNlLW1hbmlmZXN0LnB5IC0tb3V0cHV0PSR7REVSSVZFRF9TT1VSQ0VTX1dFQktJVDJHVEtfRElSfS9JbnNwZWN0b3JHUmVzb3VyY2VCdW5kbGUueG1sICR7SW5zcGVjdG9yRmlsZXN9CisgICAgIFZFUkJBVElNCitkaWZmIC0tZ2l0IGEvVG9vbHMvZ3RrL2dlbmVyYXRlLWluc3BlY3Rvci1ncmVzb3VyY2UtbWFuaWZlc3QucHkgYi9Ub29scy9ndGsvZ2VuZXJhdGUtaW5zcGVjdG9yLWdyZXNvdXJjZS1tYW5pZmVzdC5weQoraW5kZXggMDY4N2M0Yy4uMDMwNjBjZiAxMDA3NTUKKy0tLSBhL1Rvb2xzL2d0ay9nZW5lcmF0ZS1pbnNwZWN0b3ItZ3Jlc291cmNlLW1hbmlmZXN0LnB5CisrKysgYi9Ub29scy9ndGsvZ2VuZXJhdGUtaW5zcGVjdG9yLWdyZXNvdXJjZS1tYW5pZmVzdC5weQorQEAgLTE2LDYgKzE2LDcgQEAKKyAjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorIAorIGltcG9ydCBhcmdwYXJzZQorK2ltcG9ydCBnbG9iCisgaW1wb3J0IG9zCisgaW1wb3J0IHN5cworIAorQEAgLTI2LDEwICsyNywxNyBAQCBCQVNFX0RJUiA9ICdXZWJJbnNwZWN0b3JVSS8nCisgZGVmIGdldF9maWxlbmFtZXMoYXJncyk6CisgICAgIGZpbGVuYW1lcyA9IFtdCisgCistICAgIGZvciBmaWxlbmFtZSBpbiBhcmdzOgorLSAgICAgICAgYmFzZV9kaXJfaW5kZXggPSBmaWxlbmFtZS5yZmluZChCQVNFX0RJUikKKy0gICAgICAgIGlmIGJhc2VfZGlyX2luZGV4ICE9IC0xOgorLSAgICAgICAgICAgIGZpbGVuYW1lcy5hcHBlbmQoZmlsZW5hbWVbYmFzZV9kaXJfaW5kZXggKyBsZW4oQkFTRV9ESVIpOl0pCisrICAgIGZvciBwYXR0ZXJuIGluIGFyZ3M6CisrICAgICAgICBwYXRocyA9IGdsb2IuZ2xvYihwYXR0ZXJuKQorKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIHBhdGhzOgorKyAgICAgICAgICAgIGJhc2VfZGlyX2luZGV4ID0gZmlsZW5hbWUucmZpbmQoQkFTRV9ESVIpCisrICAgICAgICAgICAgaWYgYmFzZV9kaXJfaW5kZXggIT0gLTE6CisrICAgICAgICAgICAgICAgIG5hbWUgPSBmaWxlbmFtZVtiYXNlX2Rpcl9pbmRleCArIGxlbihCQVNFX0RJUik6XQorKyAgICAgICAgICAgICAgICAjIFRoZSByZXN1bHQgc2hvdWxkIHVzZSBmb3J3YXJkIHNsYXNoZXMsIHRodXMgbWFrZSBzdXJlIGFueSBvcy1zcGVjaWZpYworKyAgICAgICAgICAgICAgICAjIHNlcGFyYXRvciwgYWRkZWQgYnkgdGhlIGdsb2IuZ2xvYigpIGNhbGwsIGlzIHByb3Blcmx5IHJlcGxhY2VkCisrICAgICAgICAgICAgICAgIGlmIG9zLnNlcCAhPSAnLyc6CisrICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKG9zLnNlcCwgJy8nKQorKyAgICAgICAgICAgICAgICBmaWxlbmFtZXMuYXBwZW5kKG5hbWUpCisgICAgIHJldHVybiBmaWxlbmFtZXMKKyAKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvd2Via2l0Z3RrL2djYzUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGsvZ2NjNS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTUxYTgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvd2Via2l0Z3RrL2djYzUucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorSlNPYmplY3Q6IENyZWF0ZSBleHBsaWNpdCBpbnN0YW50aWF0aW9uIG9mIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRob3V0QXR0cmlidXRlcworCitSZWFzb24gZm9yIGNoYW5nZTogbmV3ZXIgZ2NjIG1pZ2h0IG9wdGltaXplIGF3YXkgdGhlIHRlbXBsYXRlcworYW5kIHRoZXkgd29udCBiZSBhdmFpbGFibGUgZm9yIG90aGVyIC5jcHAgZmlsZXMgdG8gdXNlIGFzIHRoZXNlCithcmUgdXNlZCBpbiBhIGRpZmZlcmVudCAuY3BwIHdlIG5lZWQgdG8gdGVsbCBjb21waWxlciB0byBleHBsaWNpdGx5CitpbnN0YW50aWF0ZSB0aGVtLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHdlYmtpdGd0ay0yLjguNS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3ZWJraXRndGstMi44LjUub3JpZy9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKKysrKyB3ZWJraXRndGstMi44LjUvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCitAQCAtMTk2NSw2ICsxOTY1LDEwIEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4KKyAgICAgfQorIH0KKyAKKyt0ZW1wbGF0ZSB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aG91dEF0dHJpYnV0ZXM8SW50MzJTaGFwZT4oRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKTsKKyt0ZW1wbGF0ZSB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aG91dEF0dHJpYnV0ZXM8RG91YmxlU2hhcGU+KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSk7CisrdGVtcGxhdGUgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhvdXRBdHRyaWJ1dGVzPENvbnRpZ3VvdXNTaGFwZT4oRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKTsKKysKKyB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKKyB7CisgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGtfMi44LjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGtfMi44LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJkNjcwZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L3dlYmtpdGd0a18yLjguNS5iYgpAQCAtMCwwICsxLDU4IEBACitTVU1NQVJZID0gIldlYktpdCB3ZWIgcmVuZGVyaW5nIGVuZ2luZSBmb3IgdGhlIEdUSysgcGxhdGZvcm0iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVncy53ZWJraXQub3JnLyIKKworTElDRU5TRSA9ICJCU0QgJiBMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vU291cmNlL0phdmFTY3JpcHRDb3JlL0NPUFlJTkcuTElCO21kNT1kMGM2ZDYzOTdhNWQ4NDI4NmRkYTc1OGRhNTdiZDY5MSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9Tb3VyY2UvV2ViS2l0L0xJQ0VOU0U7bWQ1PTQ2NDZmOTAwODJjNDBiY2YyOThjMjg1ZjhiYWIwYjEyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL1NvdXJjZS9XZWJDb3JlL0xJQ0VOU0UtQVBQTEU7bWQ1PTQ2NDZmOTAwODJjNDBiY2YyOThjMjg1ZjhiYWIwYjEyIFwKKwkJICAgIGZpbGU6Ly9Tb3VyY2UvV2ViQ29yZS9MSUNFTlNFLUxHUEwtMjttZDU9MzYzNTdmZmRlMmI2NGFlMTc3YjI0OTQ0NDViNzlkMjEgXAorCQkgICAgZmlsZTovL1NvdXJjZS9XZWJDb3JlL0xJQ0VOU0UtTEdQTC0yLjE7bWQ1PWE3NzhhMzNlZjMzOGFiYmFmOGI4YTdjMzZiNmVlYzgwIFwKKwkJICAgIgorCitTUkNfVVJJID0gIlwKKyAgaHR0cDovL3d3dy53ZWJraXRndGsub3JnL3JlbGVhc2VzLyR7QlBOfS0ke1BWfS50YXIueHogXAorICBmaWxlOi8vMDAwMS1UaGlzLXBhdGNoLWZpeGVzLWEtY29tbWFuZC1saW5lLXRoYXQtaXMtdG9vLWxvbmctb3ZlLnBhdGNoIFwKKyAgZmlsZTovL2djYzUucGF0Y2ggXAorICAiCitTUkNfVVJJW21kNXN1bV0gPSAiZGY3OTk5MTg0OGE1MDk2ZDNhNzUyODllYmNlNTQ3YWUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2QxZjBjNTM0OTM1ZjQzZmQ3NGRmOTBmMjY0OGZjZWU2NzJkNjBmMWY1N2EzMGZhNTU3YTc3ODkxYWUwNGQyMCIKKworaW5oZXJpdCBjbWFrZSBsaWJfcGFja2FnZSBwa2djb25maWcgcGVybG5hdGl2ZSBweXRob25uYXRpdmUKKworREVQRU5EUyA9ICJ6bGliIGVuY2hhbnQgbGlic291cC0yLjQgY3VybCBsaWJ4bWwyIGNhaXJvIGxpYnhzbHQgbGlieHQgbGliaWRuIGdudXRscyBcCisgICAgICAgICAgIGd0aysgZ3RrKzMgZ3N0cmVhbWVyMS4wIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgZmxleC1uYXRpdmUgZ3BlcmYtbmF0aXZlIHNxbGl0ZTMgXAorCSAgIHBhbmdvIGljdSBiaXNvbi1uYXRpdmUgZ25vbWUtY29tbW9uIGdhd2sgaW50bHRvb2wtbmF0aXZlIGxpYndlYnAgXAorCSAgIGF0ayB1ZGV2IGhhcmZidXp6IGpwZWcgbGlicG5nIHB1bHNlYXVkaW8gbGlicnN2ZyBsaWJ0aGVvcmEgbGlidm9yYmlzIGxpYnhjb21wb3NpdGUgbGlieHRzdCBcCisJICAgcnVieS1uYXRpdmUgbGlic2VjcmV0IGxpYm5vdGlmeSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQgXAorICAgICAgICAgICIKK0RFUEVORFMgKz0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICd2aXJ0dWFsL2xpYmdsJywgJycsIGQpfSIKKworRVhUUkFfT0VDTUFLRSA9ICIgXAorCQktRFBPUlQ9R1RLIFwKKwkJLURDTUFLRV9CVUlMRF9UWVBFPVJlbGVhc2UgXAorCQktREVOQUJMRV9JTlRST1NQRUNUSU9OPUZhbHNlIFwKKwkJLURFTkFCTEVfTUlOSUJST1dTRVI9VHJ1ZSBcCisJICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICctREVOQUJMRV9XRUJHTD1UcnVlJywgJy1ERU5BQkxFX1dFQkdMPUZhbHNlJywgZCl9IFwKKwkJIgorCisjIEphdmFzY3JpcHQgSklUIGlzIG5vdCBzdXBwb3J0ZWQgb24gcG93ZXJwYworRVhUUkFfT0VDTUFLRV9hcHBlbmRfcG93ZXJwYyA9ICIgLURFTkFCTEVfSklUPUZhbHNlICIKK0VYVFJBX09FQ01BS0VfYXBwZW5kX3Bvd2VycGM2NCA9ICIgLURFTkFCTEVfSklUPUZhbHNlICIKKworIyBBUk0gSklUIGNvZGUgZG9lcyBub3QgYnVpbGQgb24gQVJNdjUvNiBhbnltb3JlLCBhcHBhcmVudGx5IHRoZXkgdGVzdCBvbmx5IG9uIHY3IG9ud2FyZHMKK0VYVFJBX09FQ01BS0VfYXBwZW5kX2FybXY1ID0gIiAtREVOQUJMRV9KSVQ9RmFsc2UgIgorRVhUUkFfT0VDTUFLRV9hcHBlbmRfYXJtdjYgPSAiIC1ERU5BQkxFX0pJVD1GYWxzZSAiCisKKyMgYmludXRpbHMgMi4yNS4xIGhhcyBhIGJ1ZyBvbiBhYXJjaDY0OgorIyBodHRwczovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0xODQzMAorRVhUUkFfT0VDTUFLRV9hcHBlbmRfYWFyY2g2NCA9ICIgLURVU0VfTERfR09MRD1GYWxzZSAiCisKKyMgSklUIG5vdCBzdXBwb3J0ZWQgb24gTUlQUyBlaXRoZXIKK0VYVFJBX09FQ01BS0VfYXBwZW5kX21pcHMgPSAiIC1ERU5BQkxFX0pJVD1GYWxzZSAiCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9taXBzNjQgPSAiIC1ERU5BQkxFX0pJVD1GYWxzZSAiCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vd2Via2l0Mmd0ay00LjAvaW5qZWN0ZWQtYnVuZGxlL2xpYndlYmtpdDJndGtpbmplY3RlZGJ1bmRsZS5zbyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3dlYmtpdDJndGstNC4wL2luamVjdGVkLWJ1bmRsZS8uZGVidWcvbGlid2Via2l0Mmd0a2luamVjdGVkYnVuZGxlLnNvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vd2Via2l0Z3RrL3dlYmtpdDJndGstNC4wLy5kZWJ1Zy8qIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbC9jb25maWdmaXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbC9jb25maWdmaXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJiMTE0OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci11dGlsL2NvbmZpZ2ZpeC5wYXRjaApAQCAtMCwwICsxLDUxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBhcHItdXRpbC0xLjMuNC9hcHUtY29uZmlnLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXByLXV0aWwtMS4zLjQub3JpZy9hcHUtY29uZmlnLmluCTIwMDktMDEtMTIgMTc6MDg6MDYuMDAwMDAwMDAwICswMDAwCisrKysgYXByLXV0aWwtMS4zLjQvYXB1LWNvbmZpZy5pbgkyMDA5LTAxLTEyIDE3OjA5OjAwLjAwMDAwMDAwMCArMDAwMAorQEAgLTEzNCwxNCArMTM0LDcgQEAKKyAgICAgZXhpdCAwCisgICAgIDs7CisgICAgIC0taW5jbHVkZXMpCistICAgIGlmIHRlc3QgIiRsb2NhdGlvbiIgPSAiaW5zdGFsbGVkIjsgdGhlbgorICAgICAgICAgZmxhZ3M9IiRmbGFncyAtSSRpbmNsdWRlZGlyICRJTkNMVURFUyIKKy0gICAgZWxpZiB0ZXN0ICIkbG9jYXRpb24iID0gInNvdXJjZSI7IHRoZW4KKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgLUkkQVBVX1NPVVJDRV9ESVIvaW5jbHVkZSAkSU5DTFVERVMiCistICAgIGVsc2UKKy0gICAgICAgICMgdGhpcyBpcyBmb3IgVlBBVEggYnVpbGRzCistICAgICAgICBmbGFncz0iJGZsYWdzIC1JJEFQVV9CVUlMRF9ESVIvaW5jbHVkZSAtSSRBUFVfU09VUkNFX0RJUi9pbmNsdWRlICRJTkNMVURFUyIKKy0gICAgZmkKKyAgICAgOzsKKyAgICAgLS1sZGZsYWdzKQorICAgICBmbGFncz0iJGZsYWdzICRMREZMQUdTIgorQEAgLTE1NSwyOCArMTQ4LDEwIEBACisgICAgIGV4aXQgMAorICAgICA7OworICAgICAtLWxpbmstbGQpCistICAgIGlmIHRlc3QgIiRsb2NhdGlvbiIgPSAiaW5zdGFsbGVkIjsgdGhlbgorLSAgICAgICAgIyMjIGF2b2lkIHVzaW5nIC1MIGlmIGxpYmRpciBpcyBhICJzdGFuZGFyZCIgbG9jYXRpb24gbGlrZSAvdXNyL2xpYgorICAgICAgICAgZmxhZ3M9IiRmbGFncyAtTCRsaWJkaXIgLWwkQVBSVVRJTF9MSUJOQU1FIgorLSAgICBlbHNlCistICAgICAgICBmbGFncz0iJGZsYWdzIC1MJEFQVV9CVUlMRF9ESVIgLWwkQVBSVVRJTF9MSUJOQU1FIgorLSAgICBmaQorICAgICA7OworICAgICAtLWxpbmstbGlidG9vbCkKKy0gICAgIyBJZiB0aGUgTEFfRklMRSBleGlzdHMgd2hlcmUgd2UgdGhpbmsgaXQgc2hvdWxkIGJlLCB1c2UgaXQuICBJZiB3ZSdyZQorLSAgICAjIGluc3RhbGxlZCBhbmQgdGhlIExBX0ZJTEUgZG9lcyBub3QgZXhpc3QsIGFzc3VtZSB0byB1c2UgLUwvLWwKKy0gICAgIyAodGhlIExBX0ZJTEUgbWF5IG5vdCBoYXZlIGJlZW4gaW5zdGFsbGVkKS4gIElmIHdlJ3JlIGJ1aWxkaW5nIG91cnNlbHZlcywKKy0gICAgIyB3ZSdsbCBhc3N1bWUgdGhhdCBhdCBzb21lIHBvaW50IHRoZSAubGEgZmlsZSBiZSBjcmVhdGVkLgorLSAgICBpZiB0ZXN0IC1mICIkTEFfRklMRSI7IHRoZW4KKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgJExBX0ZJTEUiCistICAgIGVsaWYgdGVzdCAiJGxvY2F0aW9uIiA9ICJpbnN0YWxsZWQiOyB0aGVuCistICAgICAgICAjIyMgYXZvaWQgdXNpbmcgLUwgaWYgbGliZGlyIGlzIGEgInN0YW5kYXJkIiBsb2NhdGlvbiBsaWtlIC91c3IvbGliCistICAgICAgICAjIFNpbmNlIHRoZSB1c2VyIGlzIHNwZWNpZnlpbmcgdGhleSBhcmUgbGlua2luZyB3aXRoIGxpYnRvb2wsIHdlCistICAgICAgICAjICprbm93KiB0aGF0IC1SIHdpbGwgYmUgcmVjb2duaXplZCBieSBsaWJ0b29sLgorLSAgICAgICAgZmxhZ3M9IiRmbGFncyAtTCRsaWJkaXIgLVIkbGliZGlyIC1sJEFQUlVUSUxfTElCTkFNRSIKKy0gICAgZWxzZQorLSAgICAgICAgZmxhZ3M9IiRmbGFncyAkTEFfRklMRSIKKy0gICAgZmkKKysgICAgICAgIGZsYWdzPSIkZmxhZ3MgLWwkQVBSVVRJTF9MSUJOQU1FIgorICAgICA7OworICAgICAtLWFwdS1sYS1maWxlKQorICAgICBpZiB0ZXN0IC1mICIkTEFfRklMRSI7IHRoZW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci11dGlsL2NvbmZpZ3VyZV9maXhlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci11dGlsL2NvbmZpZ3VyZV9maXhlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWUyNDRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByLXV0aWwvY29uZmlndXJlX2ZpeGVzLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGFwci11dGlsLTEuNC4xL2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGFwci11dGlsLTEuNC4xLm9yaWcvY29uZmlndXJlLmluCTIwMDktMTItMTggMDM6MTU6MTkuMDAwMDAwMDAwICswODAwCisrKysgYXByLXV0aWwtMS40LjEvY29uZmlndXJlLmluCTIwMTEtMTItMzAgMTM6MzI6MDcuMDAwMDAwMDAwICswODAwCitAQCAtOCwxNSArOCwxNSBAQAorIEFDX0NPTkZJR19IRUFERVIoaW5jbHVkZS9wcml2YXRlL2FwdV9jb25maWcuaCkKKyBBQ19DT05GSUdfQVVYX0RJUihidWlsZCkKKyAKKy1zaW5jbHVkZShidWlsZC9hcHUtY29uZi5tNCkKKy1zaW5jbHVkZShidWlsZC9hcHUtaWNvbnYubTQpCistc2luY2x1ZGUoYnVpbGQvYXB1LWhpbnRzLm00KQorLXNpbmNsdWRlKGJ1aWxkL2Fwcl9jb21tb24ubTQpCistc2luY2x1ZGUoYnVpbGQvZmluZF9hcHIubTQpCistc2luY2x1ZGUoYnVpbGQvY3J5cHRvLm00KQorLXNpbmNsdWRlKGJ1aWxkL2RibS5tNCkKKy1zaW5jbHVkZShidWlsZC9kYmQubTQpCistc2luY2x1ZGUoYnVpbGQvZHNvLm00KQorKyNzaW5jbHVkZShidWlsZC9hcHUtY29uZi5tNCkKKysjc2luY2x1ZGUoYnVpbGQvYXB1LWljb252Lm00KQorKyNzaW5jbHVkZShidWlsZC9hcHUtaGludHMubTQpCisrI3NpbmNsdWRlKGJ1aWxkL2Fwcl9jb21tb24ubTQpCisrI3NpbmNsdWRlKGJ1aWxkL2ZpbmRfYXByLm00KQorKyNzaW5jbHVkZShidWlsZC9jcnlwdG8ubTQpCisrI3NpbmNsdWRlKGJ1aWxkL2RibS5tNCkKKysjc2luY2x1ZGUoYnVpbGQvZGJkLm00KQorKyNzaW5jbHVkZShidWlsZC9kc28ubTQpCisgCisgZG5sIEdlbmVyYXRlIC4vY29uZmlnLm5pY2UgZm9yIHJlcHJvZHVjaW5nIHJ1bnMgb2YgY29uZmlndXJlCisgZG5sIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByLXV0aWwvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByLXV0aWwvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMTlhMWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbC9ydW4tcHRlc3QKQEAgLTAsMCArMSw2IEBACisjIS9iaW4vc2gKKworY2QgdGVzdAorLi90ZXN0YWxsIHxzZWQgXAorICAtZSAnc3xcKC4qXCk6ICBTVUNDRVNTfFBBU1M6IFwxfCcgXAorICAtZSAnc3xcKC4qXCk6ICBGQUlMRUR8RkFJTDogXDF8JwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByLXV0aWxfMS41LjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbF8xLjUuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTE0ZDE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByLXV0aWxfMS41LjQuYmIKQEAgLTAsMCArMSw4MSBAQAorU1VNTUFSWSA9ICJBcGFjaGUgUG9ydGFibGUgUnVudGltZSAoQVBSKSBjb21wYW5pb24gbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly9hcHIuYXBhY2hlLm9yZy8iCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gImFwciBleHBhdCBnZGJtIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK0xJQ0VOU0UgPSAiQXBhY2hlLTIuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTUxOWUwYTE4ZTAzZjdjMDIzMDcwNTY4YzE0YjA3N2JiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvYXB1X3ZlcnNpb24uaDtlbmRsaW5lPTE3O21kNT04MDY2ODVhODRlNzFmMTBjODAxNDRjNDhlYjM1ZGY0MiIKKworU1JDX1VSSSA9ICIke0FQQUNIRV9NSVJST1J9L2Fwci8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmVfZml4ZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjg2NjgyNWMwNGRhODI3YzZlNWY1M2RhZmY1NTY5ZjQyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk3NmExMmE1OWJjMjg2ZDYzNGEyMWQ3YmUwODQxY2M3NDI4OWVhOTA3N2FhMWFmNDZiZTE5ZDFhNmU4NDRjMTkiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtYXByPSR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9L2Fwci0xLWNvbmZpZyBcIAorCQktLXdpdGhvdXQtb2RiYyBcCisJCS0td2l0aG91dC1wZ3NxbCBcCisJCS0td2l0aC1kYm09Z2RibSBcCisJCS0td2l0aC1nZGJtPSR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH0gXAorCQktLXdpdGhvdXQtc3FsaXRlMiBcCisJCS0td2l0aG91dC1zcWxpdGUzIFwKKwkJLS13aXRoLWV4cGF0PSR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH0iCisKKworaW5oZXJpdCBhdXRvdG9vbHMgbGliX3BhY2thZ2UgYmluY29uZmlnCisKK1BSID0gInIxIgorCitPRV9CSU5DT05GSUdfRVhUUkFfTUFOR0xFID0gIiAtZSAnczpsb2NhdGlvbj1zb3VyY2U6bG9jYXRpb249aW5zdGFsbGVkOiciCisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJaWYgWyAiJHtDTEFTU09WRVJSSURFfSIgPSAiY2xhc3MtdGFyZ2V0IiBdOyB0aGVuCisJCWNwICR7U1RBR0lOR19EQVRBRElSfS9hcHIvYXByX3J1bGVzLm1rICR7Qn0vYnVpbGQvcnVsZXMubWsKKwlmaQorfQorZG9fY29uZmlndXJlX3ByZXBlbmRfY2xhc3MtbmF0aXZlKCkgeworCW1rZGlyICR7Qn0vYnVpbGQKKwljcCAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2Fwci9hcHJfcnVsZXMubWsgJHtCfS9idWlsZC9ydWxlcy5taworfQorZG9fY29uZmlndXJlX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJc2VkIC1pICJzI0xJQlRPT0w9XCQoU0hFTEwpIFwkKGFwcl9idWlsZGRpcikjTElCVE9PTD1cJChTSEVMTCkgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9IyIgJHtCfS9idWlsZC9ydWxlcy5taworCSMgc29tZXRpbWVzIHRoZXJlIGlzbid0IFNIRUxMCisJc2VkIC1pICJzI0xJQlRPT0w9XCQoYXByX2J1aWxkZGlyKSNMSUJUT09MPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfSMiICR7Qn0vYnVpbGQvcnVsZXMubWsKK30KKworZG9fY29uZmlndXJlX3ByZXBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworCWNwICR7U1RBR0lOR19EQVRBRElSfS9hcHIvYXByX3J1bGVzLm1rICR7U30vYnVpbGQvcnVsZXMubWsKK30KKworZG9fY29uZmlndXJlX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisJc2VkIC1pICJzI1woYXByX2J1aWxkZGlyXCk9LiojXDE9JHtTVEFHSU5HX0RBVEFESVJ9L2J1aWxkLTEjIiAke1N9L2J1aWxkL3J1bGVzLm1rCisJc2VkIC1pICJzI1woYXByX2J1aWxkZXJzXCk9LiojXDE9JHtTVEFHSU5HX0RBVEFESVJ9L2J1aWxkLTEjIiAke1N9L2J1aWxkL3J1bGVzLm1rCisJc2VkIC1pICJzI1wodG9wX2J1aWxkZGlyXCk9LiojXDE9JHtTVEFHSU5HX0RBVEFESVJ9L2J1aWxkLTEjIiAke1N9L2J1aWxkL3J1bGVzLm1rCisJc2VkIC1pICJzI1woTElCVE9PTD1cJChhcHJfYnVpbGRkaXIpXCkuKiNcMS9saWJ0b29sIyIgJHtTfS9idWlsZC9ydWxlcy5taworfQorCitGSUxFU18ke1BOfSAgICAgKz0gIiR7bGliZGlyfS9hcHItdXRpbC0xL2Fwcl9kYm1fZ2RibS0xLnNvIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vYXBydXRpbC5leHAgJHtsaWJkaXJ9L2Fwci11dGlsLTEvYXByX2RibV9nZGJtLnNvKiAke2xpYmRpcn0vYXByLXV0aWwtMS9hcHJfZGJtX2dkYm0ubGEiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9hcHItdXRpbC0xLy5kZWJ1Zy8qIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vYXByLXV0aWwtMS9hcHJfZGJtX2dkYm0uYSIKKworaW5oZXJpdCBwdGVzdAorCitkb19jb21waWxlX3B0ZXN0KCkgeworCWNkICR7Qn0vdGVzdAorCW9lX3J1bm1ha2UKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwl0PSR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKKwlta2RpciAkdAorCWZvciBpIGluIHRlc3RhbGwgZGF0YTsgZG8gXAorCSAgY3AgLXIgJHtCfS90ZXN0LyRpICR0OyBcCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL0ZpeC1wYWNrZXQtZGlzY2FyZHMtSFRUUC1yZWRpcmVjdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9GaXgtcGFja2V0LWRpc2NhcmRzLUhUVFAtcmVkaXJlY3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgwNWI4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9GaXgtcGFja2V0LWRpc2NhcmRzLUhUVFAtcmVkaXJlY3QucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRml4IHBhY2tldCBkaXNjYXJkcyBIVFRQIHJlZGlyZWN0LgorCitEaXNjb25uZWN0IHRoZSBjb25uZWN0aW9uIGJ5IHBvbGwoKSB0aW1lb3V0LgorSWYgdGltZW91dD0wIGFuZCBhcHJfd2FpdF9mb3JfaW9fb3JfdGltZW91dCgpPUFQUl9USU1FVVAgdGhlbgorYXByX3NvY2tldF9yZWN2KCkgcmV0dXJucyBFQUdBSU4uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBOb3JpYWtpIFlvc2hpdGFuZSA8eW9zaGl0YW5lLm5yc0BjbnQubmNvcy5uZWMuY28uanA+CitTaWduZWQtb2ZmLWJ5OiBMaSBXYW5nIDxsaS53YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBuZXR3b3JrX2lvL3VuaXgvc2VuZHJlY3YuYyB8ICAgIDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL25ldHdvcmtfaW8vdW5peC9zZW5kcmVjdi5jIGIvbmV0d29ya19pby91bml4L3NlbmRyZWN2LmMKK2luZGV4IGMxMzNhMjYuLmU4ZmFmMTUgMTAwNjQ0CistLS0gYS9uZXR3b3JrX2lvL3VuaXgvc2VuZHJlY3YuYworKysrIGIvbmV0d29ya19pby91bml4L3NlbmRyZWN2LmMKK0BAIC04NSw2ICs4NSwxMCBAQCBhcHJfc3RhdHVzX3QgYXByX3NvY2tldF9yZWN2KGFwcl9zb2NrZXRfdCAqc29jaywgY2hhciAqYnVmLCBhcHJfc2l6ZV90ICpsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICYmIChzb2NrLT50aW1lb3V0ID4gMCkpIHsKKyBkb19zZWxlY3Q6CisgICAgICAgICBhcnYgPSBhcHJfd2FpdF9mb3JfaW9fb3JfdGltZW91dChOVUxMLCBzb2NrLCAxKTsKKysgICAgICAgIGlmICgoYXJ2ID09IEFQUl9USU1FVVApICYmIChzb2NrLT50aW1lb3V0ID09IDApKSB7CisrICAgICAgICAgICAgKmxlbiA9IDA7CisrICAgICAgICAgICAgcmV0dXJuIEVBR0FJTjsKKysgICAgICAgIH0KKyAgICAgICAgIGlmIChhcnYgIT0gQVBSX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAqbGVuID0gMDsKKyAgICAgICAgICAgICByZXR1cm4gYXJ2OworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9jbGVhbnVwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL2NsZWFudXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY3ODRlMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9jbGVhbnVwLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGFwci0xLjQuMi9idWlsZC9idWlsZGNoZWNrLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXByLTEuNC4yLm9yaWcvYnVpbGQvYnVpbGRjaGVjay5zaAkyMDA5LTExLTEzIDA4OjI3OjE2LjAwMDAwMDAwMCArMDgwMAorKysrIGFwci0xLjQuMi9idWlsZC9idWlsZGNoZWNrLnNoCTIwMTAtMTEtMjYgMTU6NDQ6MDAuMDAwMDAwMDAwICswODAwCitAQCAtMzIsMzUgKzMyLDQgQEAKKyBlY2hvICJidWlsZGNvbmY6IGF1dG9jb25mIHZlcnNpb24gJGFjX3ZlcnNpb24gKG9rKSIKKyBmaQorIAorLSMgU2FtcGxlIGxpYnRvb2wgLS12ZXJzaW9uIG91dHB1dHM6CistIyBsdG1haW4uc2ggKEdOVSBsaWJ0b29sKSAxLjMuMyAoMS4zODUuMi4xODEgMTk5OS8wNy8wMiAxNTo0OToxMSkKKy0jIGx0bWFpbi5zaCAoR05VIGxpYnRvb2wgMS4xMzYxIDIwMDQvMDEvMDIgMjM6MTA6NTIpIDEuNWEKKy0jIG91dHB1dCBpcyBtdWx0aWxpbmUgZnJvbSAxLjUgb253YXJkcworLQorLSMgUmVxdWlyZSBsaWJ0b29sIDEuNCBvciBuZXdlcgorLWxpYnRvb2w9YGJ1aWxkL1ByaW50UGF0aCBnbGlidG9vbDEgZ2xpYnRvb2wgbGlidG9vbCBsaWJ0b29sMTUgbGlidG9vbDE0YAorLWx0X3B2ZXJzaW9uPWAkbGlidG9vbCAtLXZlcnNpb24gMj4vZGV2L251bGx8c2VkIC1lICdzLyhbXildKikvL2c7cy9eW14wLTldKi8vO3MvWy0gXS4qLy9nO3EnYAorLWlmIHRlc3QgLXogIiRsdF9wdmVyc2lvbiI7IHRoZW4KKy1lY2hvICJidWlsZGNvbmY6IGxpYnRvb2wgbm90IGZvdW5kLiIKKy1lY2hvICIgICAgICAgICAgIFlvdSBuZWVkIGxpYnRvb2wgdmVyc2lvbiAxLjQgb3IgbmV3ZXIgaW5zdGFsbGVkIgorLWVjaG8gIiAgICAgICAgICAgdG8gYnVpbGQgQVBSIGZyb20gU1ZOLiIKKy1leGl0IDEKKy1maQorLWx0X3ZlcnNpb249YGVjaG8gJGx0X3B2ZXJzaW9ufHNlZCAtZSAncy9cKFthLXpdKlwpJC8uXDEvJ2AKKy1JRlM9Ljsgc2V0ICRsdF92ZXJzaW9uOyBJRlM9JyAnCistbHRfc3RhdHVzPSJnb29kIgorLWlmIHRlc3QgIiQxIiA9ICIxIjsgdGhlbgorLSAgIGlmIHRlc3QgIiQyIiAtbHQgIjQiOyB0aGVuCistICAgICAgbHRfc3RhdHVzPSJiYWQiCistICAgZmkKKy1maQorLWlmIHRlc3QgJGx0X3N0YXR1cyA9ICJnb29kIjsgdGhlbgorLSAgIGVjaG8gImJ1aWxkY29uZjogbGlidG9vbCB2ZXJzaW9uICRsdF9wdmVyc2lvbiAob2spIgorLSAgIGV4aXQgMAorLWZpCistCistZWNobyAiYnVpbGRjb25mOiBsaWJ0b29sIHZlcnNpb24gJGx0X3B2ZXJzaW9uIGZvdW5kLiIKKy1lY2hvICIgICAgICAgICAgIFlvdSBuZWVkIGxpYnRvb2wgdmVyc2lvbiAxLjQgb3IgbmV3ZXIgaW5zdGFsbGVkIgorLWVjaG8gIiAgICAgICAgICAgdG8gYnVpbGQgQVBSIGZyb20gU1ZOLiIKKy0KKy1leGl0IDEKKytleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9jb25maWdmaXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvY29uZmlnZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNWM0ZjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvY29uZmlnZml4LnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGFwci0xLjMuMy9hcHItY29uZmlnLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXByLTEuMy4zLm9yaWcvYXByLWNvbmZpZy5pbgkyMDA5LTAxLTEyIDE1OjE2OjMxLjAwMDAwMDAwMCArMDAwMAorKysrIGFwci0xLjMuMy9hcHItY29uZmlnLmluCTIwMDktMDEtMTIgMTU6MTk6MjUuMDAwMDAwMDAwICswMDAwCitAQCAtMTUyLDE0ICsxNTIsNyBAQAorICAgICBmbGFncz0iJGZsYWdzICRMREZMQUdTIgorICAgICA7OworICAgICAtLWluY2x1ZGVzKQorLSAgICBpZiB0ZXN0ICIkbG9jYXRpb24iID0gImluc3RhbGxlZCI7IHRoZW4KKyAgICAgICAgIGZsYWdzPSIkZmxhZ3MgLUkkaW5jbHVkZWRpciAkRVhUUkFfSU5DTFVERVMiCistICAgIGVsaWYgdGVzdCAiJGxvY2F0aW9uIiA9ICJzb3VyY2UiOyB0aGVuCistICAgICAgICBmbGFncz0iJGZsYWdzIC1JJEFQUl9TT1VSQ0VfRElSL2luY2x1ZGUgJEVYVFJBX0lOQ0xVREVTIgorLSAgICBlbHNlCistICAgICAgICAjIHRoaXMgaXMgZm9yIFZQQVRIIGJ1aWxkcworLSAgICAgICAgZmxhZ3M9IiRmbGFncyAtSSRBUFJfQlVJTERfRElSL2luY2x1ZGUgLUkkQVBSX1NPVVJDRV9ESVIvaW5jbHVkZSAkRVhUUkFfSU5DTFVERVMiCistICAgIGZpCisgICAgIDs7CisgICAgIC0tc3JjZGlyKQorICAgICBlY2hvICRBUFJfU09VUkNFX0RJUgorQEAgLTE4MSwyOSArMTY3LDE0IEBACisgICAgIGV4aXQgMAorICAgICA7OworICAgICAtLWxpbmstbGQpCistICAgIGlmIHRlc3QgIiRsb2NhdGlvbiIgPSAiaW5zdGFsbGVkIjsgdGhlbgorLSAgICAgICAgIyMjIGF2b2lkIHVzaW5nIC1MIGlmIGxpYmRpciBpcyBhICJzdGFuZGFyZCIgbG9jYXRpb24gbGlrZSAvdXNyL2xpYgorLSAgICAgICAgZmxhZ3M9IiRmbGFncyAtTCRsaWJkaXIgLWwke0FQUl9MSUJOQU1FfSIKKy0gICAgZWxzZQorLSAgICAgICAgIyMjIHRoaXMgc3VyZWx5IGNhbid0IHdvcmsgc2luY2UgdGhlIGxpYnJhcnkgaXMgaW4gLmxpYnM/CistICAgICAgICBmbGFncz0iJGZsYWdzIC1MJEFQUl9CVUlMRF9ESVIgLWwke0FQUl9MSUJOQU1FfSIKKy0gICAgZmkKKysgICAgICAgIGZsYWdzPSIkZmxhZ3MgLWwke0FQUl9MSUJOQU1FfSIKKyAgICAgOzsKKyAgICAgLS1saW5rLWxpYnRvb2wpCisgICAgICMgSWYgdGhlIExBX0ZJTEUgZXhpc3RzIHdoZXJlIHdlIHRoaW5rIGl0IHNob3VsZCBiZSwgdXNlIGl0LiAgSWYgd2UncmUKKyAgICAgIyBpbnN0YWxsZWQgYW5kIHRoZSBMQV9GSUxFIGRvZXMgbm90IGV4aXN0LCBhc3N1bWUgdG8gdXNlIC1MLy1sCisgICAgICMgKHRoZSBMQV9GSUxFIG1heSBub3QgaGF2ZSBiZWVuIGluc3RhbGxlZCkuICBJZiB3ZSdyZSBidWlsZGluZyBvdXJzZWx2ZXMsCisgICAgICMgd2UnbGwgYXNzdW1lIHRoYXQgYXQgc29tZSBwb2ludCB0aGUgLmxhIGZpbGUgYmUgY3JlYXRlZC4KKy0gICAgaWYgdGVzdCAtZiAiJExBX0ZJTEUiOyB0aGVuCistICAgICAgICBmbGFncz0iJGZsYWdzICRMQV9GSUxFIgorLSAgICBlbGlmIHRlc3QgIiRsb2NhdGlvbiIgPSAiaW5zdGFsbGVkIjsgdGhlbgorLSAgICAgICAgIyMjIGF2b2lkIHVzaW5nIC1MIGlmIGxpYmRpciBpcyBhICJzdGFuZGFyZCIgbG9jYXRpb24gbGlrZSAvdXNyL2xpYgorLSAgICAgICAgIyBTaW5jZSB0aGUgdXNlciBpcyBzcGVjaWZ5aW5nIHRoZXkgYXJlIGxpbmtpbmcgd2l0aCBsaWJ0b29sLCB3ZQorLSAgICAgICAgIyAqa25vdyogdGhhdCAtUiB3aWxsIGJlIHJlY29nbml6ZWQgYnkgbGlidG9vbC4KKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgLUwkbGliZGlyIC1SJGxpYmRpciAtbCR7QVBSX0xJQk5BTUV9IgorLSAgICBlbHNlCistICAgICAgICBmbGFncz0iJGZsYWdzICRMQV9GSUxFIgorLSAgICBmaQorKyAgICAgICAgZmxhZ3M9IiRmbGFncyAtbCR7QVBSX0xJQk5BTUV9IgorICAgICA7OworICAgICAtLXNobGliLXBhdGgtdmFyKQorICAgICBlY2hvICIkU0hMSUJQQVRIX1ZBUiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9jb25maWd1cmVfZml4ZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvY29uZmlndXJlX2ZpeGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MTQwMDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvY29uZmlndXJlX2ZpeGVzLnBhdGNoCkBAIC0wLDAgKzEsNjggQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGFwci0xLjMuMy9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcHItMS4zLjMub3JpZy9jb25maWd1cmUuaW4KKysrKyBhcHItMS4zLjMvY29uZmlndXJlLmluCitAQCAtNzk0LDM5ICs3OTQsNiBAQCBBQ19DSEVDS19GVU5DUyhbbW1hcCBtdW5tYXAgc2htX29wZW4gc2htCisgICAgICAgICAgICAgICAgIGNyZWF0ZV9hcmVhXSkKKyAKKyBBUFJfQ0hFQ0tfREVGSU5FKE1BUF9BTk9OLCBzeXMvbW1hbi5oKQorLUFDX0NIRUNLX0ZJTEUoL2Rldi96ZXJvKQorLQorLSMgTm90IGFsbCBzeXN0ZW1zIGNhbiBtbWFwIC9kZXYvemVybyAoc3VjaCBhcyBIUC1VWCkuICBDaGVjayBmb3IgdGhhdC4KKy1pZiB0ZXN0ICIkYWNfY3ZfZnVuY19tbWFwIiA9ICJ5ZXMiICYmCistICAgdGVzdCAiJGFjX2N2X2ZpbGVfX2Rldl96ZXJvIiA9ICJ5ZXMiOyB0aGVuCistICAgIEFDX01TR19DSEVDS0lORyhmb3IgbW1hcCB0aGF0IGNhbiBtYXAgL2Rldi96ZXJvKQorLSAgICBBQ19UUllfUlVOKFsKKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CistI2luY2x1ZGUgPGZjbnRsLmg+CistI2lmZGVmIEhBVkVfU1lTX01NQU5fSAorLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgorLSNlbmRpZgorLSAgICBpbnQgbWFpbigpCistICAgIHsKKy0gICAgICAgIGludCBmZDsKKy0gICAgICAgIHZvaWQgKm07CistICAgICAgICBmZCA9IG9wZW4oIi9kZXYvemVybyIsIE9fUkRXUik7CistICAgICAgICBpZiAoZmQgPCAwKSB7CistICAgICAgICAgICAgcmV0dXJuIDE7CistICAgICAgICB9CistICAgICAgICBtID0gbW1hcCgwLCBzaXplb2Yodm9pZCopLCBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQsIDApOworLSAgICAgICAgaWYgKG0gPT0gKHZvaWQgKiktMSkgeyAgLyogYWthIE1BUF9GQUlMRUQgKi8KKy0gICAgICAgICAgICByZXR1cm4gMjsKKy0gICAgICAgIH0KKy0gICAgICAgIGlmIChtdW5tYXAobSwgc2l6ZW9mKHZvaWQqKSkgPCAwKSB7CistICAgICAgICAgICAgcmV0dXJuIDM7CistICAgICAgICB9CistICAgICAgICByZXR1cm4gMDsKKy0gICAgfV0sIFtdLCBbYWNfY3ZfZmlsZV9fZGV2X3plcm89bm9dLCBbYWNfY3ZfZmlsZV9fZGV2X3plcm89bm9dKQorLQorLSAgICBBQ19NU0dfUkVTVUxUKCRhY19jdl9maWxlX19kZXZfemVybykKKy1maQorIAorICMgTm93IHdlIGRldGVybWluZSB3aGljaCBvbmUgaXMgb3VyIGFub255bW91cyBzaG1lbSBwcmVmZXJlbmNlLgorIGhhdmVzaG1nZXRhbm9uPSIwIgorQEAgLTE1MTgsMTMgKzE0ODUsMTQgQEAgZWxzZQorICAgICBiaWdlbmRpYW49MAorIGZpCisgCistQVBSX0NIRUNLX1NJWkVPRl9FWFRFTkRFRChbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNpbmNsdWRlIDxzeXMvdWlvLmg+XSxzdHJ1Y3QgaW92ZWMsMCkKKy1pZiB0ZXN0ICIkYWNfY3Zfc2l6ZW9mX3N0cnVjdF9pb3ZlYyIgPSAiMCI7IHRoZW4KKy0gICAgaGF2ZV9pb3ZlYz0wCistZWxzZQorLSAgICBoYXZlX2lvdmVjPTEKKy1maQorKyNBUFJfQ0hFQ0tfU0laRU9GX0VYVEVOREVEKFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrIyNpbmNsdWRlIDxzeXMvdWlvLmg+XSxzdHJ1Y3QgaW92ZWMsMCkKKysjaWYgdGVzdCAiJGFjX2N2X3NpemVvZl9zdHJ1Y3RfaW92ZWMiID0gIjAiOyB0aGVuCisrIyAgICBoYXZlX2lvdmVjPTAKKysjZWxzZQorKyMgICAgaGF2ZV9pb3ZlYz0xCisrI2ZpCisraGF2ZV9pb3ZlYz0xCisgCisgQUNfU1VCU1Qodm9pZHBfc2l6ZSkKKyBBQ19TVUJTVChzaG9ydF92YWx1ZSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMTlhMWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNiBAQAorIyEvYmluL3NoCisKK2NkIHRlc3QKKy4vdGVzdGFsbCB8c2VkIFwKKyAgLWUgJ3N8XCguKlwpOiAgU1VDQ0VTU3xQQVNTOiBcMXwnIFwKKyAgLWUgJ3N8XCguKlwpOiAgRkFJTEVEfEZBSUw6IFwxfCcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci91cGdyYWRlLWFuZC1maXgtMS41LjEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvdXBncmFkZS1hbmQtZml4LTEuNS4xLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1Njk2NDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvdXBncmFkZS1hbmQtZml4LTEuNS4xLnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK01ha2VmaWxlLmluOiBmaXggY3Jvc3MgY29tcGlsaW5nIGZhaWxlZAorCitUaGUgdG9vbHMvZ2VuX3Rlc3RfY2hhciB3YXMgaW52b2tlZCBhdCBidWlsZCB0aW1lLAorYW5kIGl0IGRpZG4ndCB3b3JrIGZvciB0aGUgY3Jvc3MgY29tcGlsaW5nLCBzbyB3ZQorY29tcGlsZSBpdCB3aXRoICRCVUlMRF9DQy4KKworUmVtb3ZlIHRoZSAndG9vbHMnIGRpciBjcmVhdGlvbiwgaXQgYWx3YXlzIGV4aXN0ZWQuCitBbmQgaXQgY2F1c2VkIGdlbl90ZXN0X2NoYXIgdW5leHBlY3RlZCByZWJ1aWx0IGF0Citkb19pbnN0YWxsIHRpbWUuCisKK1Vwc3RyZWFtLVN0YXR1czogaW5hcHByb3ByaWF0ZSBbb2Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluIHwgMTAgKystLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCBhMmE1MTk0Li41ZmUwMjhmIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNDYsNyArNDYsNiBAQCBMVF9WRVJTSU9OID0gQExUX1ZFUlNJT05ACisgCisgQ0xFQU5fVEFSR0VUUyA9IGFwci1jb25maWcub3V0IGFwci5leHAgZXhwb3J0cy5jIGV4cG9ydF92YXJzLmMgLm1ha2UuZGlycyBcCisgCWJ1aWxkL2Fwcl9ydWxlcy5vdXQgdG9vbHMvZ2VuX3Rlc3RfY2hhckBFWEVFWFRAIFwKKy0JdG9vbHMvZ2VuX3Rlc3RfY2hhci5vIHRvb2xzL2dlbl90ZXN0X2NoYXIubG8gXAorIAlpbmNsdWRlL3ByaXZhdGUvYXByX2VzY2FwZV90ZXN0X2NoYXIuaAorIERJU1RDTEVBTl9UQVJHRVRTID0gY29uZmlnLmNhY2hlIGNvbmZpZy5sb2cgY29uZmlnLnN0YXR1cyBcCisgCWluY2x1ZGUvYXByLmggaW5jbHVkZS9hcmNoL3VuaXgvYXByX3ByaXZhdGUuaCBcCitAQCAtMTI5LDEzICsxMjgsOCBAQCBjaGVjazogJChUQVJHRVRfTElCKQorIGV0YWdzOgorIAlldGFncyBgZmluZCAuIC1uYW1lICcqLltjaF0nYAorIAorLU9CSkVDVFNfZ2VuX3Rlc3RfY2hhciA9IHRvb2xzL2dlbl90ZXN0X2NoYXIubG8gJChMT0NBTF9MSUJTKQorLXRvb2xzL2dlbl90ZXN0X2NoYXIubG86IHRvb2xzL2dlbl90ZXN0X2NoYXIuYworLQkkKEFQUl9NS0RJUikgdG9vbHMKKy0JJChMVF9DT01QSUxFKQorLQorLXRvb2xzL2dlbl90ZXN0X2NoYXJARVhFRVhUQDogJChPQkpFQ1RTX2dlbl90ZXN0X2NoYXIpCistCSQoTElOS19QUk9HKSAkKE9CSkVDVFNfZ2VuX3Rlc3RfY2hhcikgJChBTExfTElCUykKKyt0b29scy9nZW5fdGVzdF9jaGFyQEVYRUVYVEA6IHRvb2xzL2dlbl90ZXN0X2NoYXIuYworKwkkKEJVSUxEX0NDKSAkKENGTEFHU19GT1JfQlVJTEQpICQ8IC1vICRACisgCisgaW5jbHVkZS9wcml2YXRlL2Fwcl9lc2NhcGVfdGVzdF9jaGFyLmg6IHRvb2xzL2dlbl90ZXN0X2NoYXJARVhFRVhUQAorIAkkKEFQUl9NS0RJUikgaW5jbHVkZS9wcml2YXRlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHJfMS41LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHJfMS41LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFmN2YzOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwcl8xLjUuMi5iYgpAQCAtMCwwICsxLDk2IEBACitTVU1NQVJZID0gIkFwYWNoZSBQb3J0YWJsZSBSdW50aW1lIChBUFIpIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vYXByLmFwYWNoZS5vcmcvIgorU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJ1dGlsLWxpbnV4IgorCitMSUNFTlNFID0gIkFwYWNoZS0yLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT00ZGZkNGNkMjE2ODI4YzhjYWU1ZGU1YTEyZjM4NDRjOCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL2Fwcl9saWIuaDtlbmRsaW5lPTE3O21kNT1lZTQyZmE3NTc1ZGM0MDU4MGE5ZTAxYzFiNzVmYWU5NiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJID0gIiR7QVBBQ0hFX01JUlJPUn0vYXByLyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZV9maXhlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jbGVhbnVwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vdXBncmFkZS1hbmQtZml4LTEuNS4xLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0ZpeC1wYWNrZXQtZGlzY2FyZHMtSFRUUC1yZWRpcmVjdC5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ZTk3NjlmMzM0OWZlMTFmYzBhNWUxYjIyNGMyMzZhYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3ZDAzZWQyOWMyMmE3MTUyYmU0NWI4ZTUwNDMxMDYzNzM2ZGY5ZTFkYWExZGRmOTNmNmE1NDdiYTdhMjhmNjdhIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgbGliX3BhY2thZ2UgYmluY29uZmlnIG11bHRpbGliX2hlYWRlciBwdGVzdAorCitPRV9CSU5DT05GSUdfRVhUUkFfTUFOR0xFID0gIiAtZSAnczpsb2NhdGlvbj1zb3VyY2U6bG9jYXRpb249aW5zdGFsbGVkOiciCisKKyMgQWRkZWQgdG8gZml4IHNvbWUgaXNzdWVzIHdpdGggY21ha2UuIFJlZmVyIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9ibXdjYXJpdC9tZXRhLXJvcy9pc3N1ZXMvNjgjaXNzdWVjb21tZW50LTE5ODk2OTI4CitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYXByX2N2X211dGV4X3JlY3Vyc2l2ZT15ZXMiCisKKyMgQWxzbyBzdXBwcmVzcyB0cnlpbmcgdG8gdXNlIHNjdHAuCisjCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF9oPW5vIGFjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfdWlvX2g9bm8iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCSMgQXZvaWQgYWJzb2x1dGUgcGF0aHMgZm9yIGdyZXAgc2luY2UgaXQgY2F1c2VzIGZhaWx1cmVzCisJIyB3aGVuIHVzaW5nIHNzdGF0ZSBiZXR3ZWVuIGRpZmZlcmVudCBob3N0cyB3aXRoIGRpZmZlcmVudAorCSMgaW5zdGFsbCBwYXRocyBmb3IgZ3JlcC4KKwlleHBvcnQgR1JFUD0iZ3JlcCIKKworCWNkICR7U30KKwkuL2J1aWxkY29uZgorfQorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9hcHIuZXhwICR7ZGF0YWRpcn0vYnVpbGQtMS8qIgorUkRFUEVORFNfJHtQTn0tZGV2ICs9ICJiYXNoIgorCisjZm9yIHNvbWUgcmVhc29uLCBidWlsZC9saWJ0b29sLm00IGhhbmRsZWQgYnkgYnVpbGRjb25mIHN0aWxsIGJlIG92ZXJ3cml0dGVuCisjd2hlbiBhdXRvY29uZiwgc28gaGFuZGxlIGl0IGFnYWluLgorZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKKwlzZWQgLWkgLWUgJ3MvTElCVE9PTD1cKC4qXCl0b3BfYnVpbGQvTElCVE9PTD1cMWFwcl9idWlsZC8nICR7U30vYnVpbGQvbGlidG9vbC5tNAorCXNlZCAtaSAtZSAncy9MSUJUT09MPVwoLipcKXRvcF9idWlsZC9MSUJUT09MPVwxYXByX2J1aWxkLycgJHtTfS9idWlsZC9hcHJfcnVsZXMubWsKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJb2VfbXVsdGlsaWJfaGVhZGVyIGFwci5oCisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9hcHIKKwljcCAke1N9LyR7SE9TVF9TWVN9LWxpYnRvb2wgJHtEfSR7ZGF0YWRpcn0vYnVpbGQtMS9saWJ0b29sCit9CisKK1NTVEFURV9TQ0FOX0ZJTEVTICs9ICJhcHJfcnVsZXMubWsgbGlidG9vbCIKKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJhcHJfc3lzcm9vdF9wcmVwcm9jZXNzIgorCithcHJfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKwlkPSR7U1lTUk9PVF9ERVNURElSfSR7ZGF0YWRpcn0vYXByCisJaW5zdGFsbCAtZCAkZC8KKwljcCAke1N9L2J1aWxkL2Fwcl9ydWxlcy5tayAkZC8KKwlzZWQgLWkgcyxhcHJfYnVpbGRkaXI9LiosYXByX2J1aWxkZGlyPSxnICRkL2Fwcl9ydWxlcy5taworCXNlZCAtaSBzLGFwcl9idWlsZGVycz0uKixhcHJfYnVpbGRlcnM9LGcgJGQvYXByX3J1bGVzLm1rCisJc2VkIC1pIHMsTElCVE9PTD0uKixMSUJUT09MPSR7SE9TVF9TWVN9LWxpYnRvb2wsZyAkZC9hcHJfcnVsZXMubWsKKwlzZWQgLWkgcyxcJFwoYXByX2J1aWxkZXJzXCksJHtTVEFHSU5HX0RBVEFESVJ9L2Fwci8sZyAkZC9hcHJfcnVsZXMubWsKKwljcCAke1N9L2J1aWxkL21rZGlyLnNoICRkLworCWNwICR7U30vYnVpbGQvbWFrZV9leHBvcnRzLmF3ayAkZC8KKwljcCAke1N9L2J1aWxkL21ha2VfdmFyX2V4cG9ydC5hd2sgJGQvCit9CisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJY2QgJHtTfS90ZXN0CisJb2VfcnVubWFrZQorfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCXQ9JHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorCW1rZGlyIC1wICR0Ly5saWJzCisJY3AgLXIgJHtTfS90ZXN0L2RhdGEgJHQvCisJY3AgLXIgJHtTfS90ZXN0Ly5saWJzLyouc28gJHQvLmxpYnMvCisJY3AgJHtTfS90ZXN0L3Byb2NfY2hpbGQgJHQvCisJY3AgJHtTfS90ZXN0L3JlYWRjaGlsZCAkdC8KKwljcCAke1N9L3Rlc3Qvc29ja2NoaWxkICR0LworCWNwICR7U30vdGVzdC9zb2NrcGVyZiAkdC8KKwljcCAke1N9L3Rlc3QvdGVzdGFsbCAkdC8KKwljcCAke1N9L3Rlc3QvdHJ5cmVhZCAkdC8KK30KKworZXhwb3J0IENPTkZJR19TSEVMTD0iL2Jpbi9iYXNoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hc3BlbGwvYXNwZWxsXzAuNjAuNi4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hc3BlbGwvYXNwZWxsXzAuNjAuNi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZjE3ZDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2FzcGVsbC9hc3BlbGxfMC42MC42LjEuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJHTlUgQXNwZWxsIHNwZWxsLWNoZWNrZXIiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKK0xJQ0VOU0UgPSAiTEdQTHYyIHwgTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCIKKworUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9hc3BlbGwvYXNwZWxsLSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICJlNjZhOWM5YWY2YTYwZGM0NjEzNGZkYWNmNmNlOTdkNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmNTI1ODNhODNhNjM2MzM3MDFjNWY3MWRiM2RjNDBhYWI4N2I3Zjc2YjI5NzIzYWViMjc5NDFlZmY0MmRmNmUxIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tjdXJzZXNdID0gIi0tZW5hYmxlLWN1cnNlcywtLWRpc2FibGUtY3Vyc2VzLG5jdXJzZXMiCisKK1BBQ0tBR0VTICs9ICJsaWJhc3BlbGwgbGlicHNwZWxsIGFzcGVsbC11dGlscyIKKworUkRFUEVORFNfJHtQTn0tdXRpbHMgKz0gInBlcmwiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2FzcGVsbC0wLjYwLy5kZWJ1KiIKK0ZJTEVTX2xpYmFzcGVsbCA9ICIke2xpYmRpcn0vbGliYXNwZWxsLnNvLiogJHtsaWJkaXJ9L2FzcGVsbCoiCitGSUxFU19hc3BlbGwtdXRpbHMgPSAiJHtiaW5kaXJ9L3dvcmQtbGlzdC1jb21wcmVzcyAke2JpbmRpcn0vYXNwZWxsLWltcG9ydCAke2JpbmRpcn0vcnVuLXdpdGgtYXNwZWxsICR7YmluZGlyfS9wcmUqIgorRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L2FzcGVsbCIKK0ZJTEVTX2xpYnBzcGVsbCA9ICIke2xpYmRpcn0vbGlicHNwZWxsLnNvLioiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9wc3BlbGwtY29uZmlnIgorCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBnZXR0ZXh0IHRleGluZm8gYmluY29uZmlnLWRpc2FibGVkCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vcHNwZWxsLWNvbmZpZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0LXNwaTItYXRrXzIuMTYuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0LXNwaTItYXRrXzIuMTYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDk1ZmRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1hdGtfMi4xNi4wLmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiQVQtU1BJIDIgVG9vbGtpdCBCcmlkZ2UiCitMSUNFTlNFID0gIkxHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWU5ZjI4OGJhOTgyZDYwNTE4ZjM3NWI1ODk4MjgzODg2IgorCitNQUpfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCisKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9LyR7QlBOfS8ke01BSl9WRVJ9LyR7QlBOfS0ke1BWfS50YXIueHoiCitTUkNfVVJJW21kNXN1bV0gPSAiODkzNjQ4OGM4Y2RjZTBlMTU4ZjgwYjJlMjQ3NTI3ZjkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzhlZmM0NWVjMzYzODNiZjc4NWY4NjM2ZTY0YThkODY2ZGVmZWIwMjBlMDBhMDhmOTI5NzhmMWZjMzc3MmZmOSIKKworREVQRU5EUyA9ICJkYnVzIGdsaWItMi4wIGF0ayBhdC1zcGkyLWNvcmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgYXQtc3BpMi1jb3JlIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1BBQ0tBR0VTID0rICIke1BOfS1nbm9tZSAke1BOfS1ndGsyIgorCitGSUxFU18ke1BOfS1nbm9tZSA9ICIke2xpYmRpcn0vZ25vbWUtc2V0dGluZ3MtZGFlbW9uLTMuMC9ndGstbW9kdWxlcyIKK0ZJTEVTXyR7UE59LWd0azIgPSAiJHtsaWJkaXJ9L2d0ay0yLjAvbW9kdWxlcy9saWJhdGstYnJpZGdlLioiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9ndGstMi4wL21vZHVsZXMvLmRlYnVnIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1jb3JlLzAwMDEtbmxzLm00LVRha2UtaXQtZnJvbS1nZXR0ZXh0LTAuMTUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmUvMDAwMS1ubHMubTQtVGFrZS1pdC1mcm9tLWdldHRleHQtMC4xNS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWE1MWQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1jb3JlLzAwMDEtbmxzLm00LVRha2UtaXQtZnJvbS1nZXR0ZXh0LTAuMTUucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSBjMzIwNzk5Yzk0MWQ0MmE5YjdlMzUxODA1MzU5Njk0ZWEzYjM2ZDJkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgNSBBcHIgMjAxNSAwOTowODozOCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBubHMubTQ6IFRha2UgaXQgZnJvbSBnZXR0ZXh0LTAuMTUKKworSXQgb3RoZXJ3aXNlIGV4cGVjdHMgZ2V0dGV4dCB0byBwcm92aWRlIGl0LiBMZXRzIGdvIGluZGVwZW5kZW50CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbTQvbmxzLm00IHwgMzAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDMwIGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbTQvbmxzLm00CisKK2RpZmYgLS1naXQgYS9tNC9ubHMubTQgYi9tNC9ubHMubTQKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yYzhmZTY5CistLS0gL2Rldi9udWxsCisrKysgYi9tNC9ubHMubTQKK0BAIC0wLDAgKzEsMzAgQEAKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMsIDIwMDUtMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKytkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKytkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorK2RubAorK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCisrZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKytkbmwgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorK2RubCBmdW5jdGlvbmFsaXR5LgorK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCisrZG5sIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQorK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKytkbmwgVGhleSBhcmUgbm90IGluIHRoZSBwdWJsaWMgZG9tYWluLgorKworK2RubCBBdXRob3JzOgorK2RubCBVbHJpY2ggRHJlcHBlciBkcmVwcGVyQGN5Z251cy5jb20sIDE5OTUtMjAwMC4KKytkbmwgQnJ1bm8gSGFpYmxlIGhhaWJsZUBjbGlzcC5jb25zLm9yZywgMjAwMC0yMDAzLgorKworK0FDX1BSRVJFUSgyLjUwKQorKworK0FDX0RFRlVOKFtBTV9OTFNdLAorK1sKKytBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgTkxTIGlzIHJlcXVlc3RlZF0pCisrZG5sIERlZmF1bHQgaXMgZW5hYmxlZCBOTFMKKytBQ19BUkdfRU5BQkxFKG5scywKKytbIC0tZGlzYWJsZS1ubHMgZG8gbm90IHVzZSBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydF0sCisrVVNFX05MUz0kZW5hYmxldmFsLCBVU0VfTkxTPXllcykKKytBQ19NU0dfUkVTVUxUKCRVU0VfTkxTKQorK0FDX1NVQlNUKFVTRV9OTFMpCisrXSkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1jb3JlXzIuMTYuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0LXNwaTItY29yZV8yLjE2LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMzY2JlNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0LXNwaTItY29yZV8yLjE2LjAuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJBc3Npc3RpdmUgVGVjaG5vbG9neSBTZXJ2aWNlIFByb3ZpZGVyIEludGVyZmFjZSAoZGJ1cyBjb3JlKSIKK0xJQ0VOU0UgPSAiTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTlmMjg4YmE5ODJkNjA1MThmMzc1YjU4OTgyODM4ODYiCisKK01BSl9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKKworU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vJHtCUE59LyR7TUFKX1ZFUn0vJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLW5scy5tNC1UYWtlLWl0LWZyb20tZ2V0dGV4dC0wLjE1LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiZTZlZWVhMzcwZjkxM2I3NjM5YjYwOTkxM2IyY2YwMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxYzBiNzdmYjhjZTgxYWJiZjFkODBjMGFmZWU5ODU4YjNmOTIyOWY2NzNiNzg4MTk5NWZlMGZjMTZiMWE3NGQwIgorCitERVBFTkRTID0gImRidXMgZ2xpYi0yLjAgdmlydHVhbC9saWJ4MTEgbGlieGkgbGlieHRzdCBpbnRsdG9vbC1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGd0ay1kb2MgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24gLS1kaXNhYmxlLXhldmllIC0td2l0aC1kYnVzLWRhZW1vbmRpcj0ke2JpbmRpcn0iCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2RidXMtMS9zZXJ2aWNlcy8qLnNlcnZpY2UgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL2FjY2Vzc2liaWxpdHktc2VydmljZXMvKi5zZXJ2aWNlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXRrXzIuMTYuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0a18yLjE2LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY4ZjliNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0a18yLjE2LjAuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJBY2Nlc3NpYmlsaXR5IHRvb2xraXQgZm9yIEdOT01FIgorSE9NRVBBR0UgPSAiaHR0cDovL2xpdmUuZ25vbWUub3JnL0dBUC8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKK1NFQ1RJT04gPSAieDExL2xpYnMiCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F0ay9hdGt1dGlsLmM7ZW5kbGluZT0xODttZDU9NmZkMzFjZDJmZGM5YjMwZjYxOWNhOGQ4MTliYzEyZDMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXRrL2F0ay5oO2VuZGxpbmU9MTg7bWQ1PWZjZDc3MTAxODdlMGVhZTQ4NWUzNTZjMzBkMWIwYzNiIgorCitERVBFTkRTID0gImdsaWItMi4wIgorCitpbmhlcml0IGdub21lYmFzZSBndGstZG9jCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImM3YzUwMDJiZDZlNThiNDcyM2ExNjVmMWJmMzEyMTE2IgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiMDk1Zjk4NjA2MGE2YTBiMjJlYjE1ZWVmODRhZTlmMTRhMWNmODA4MjQ4OGZhYTY4ODZkOTRjMzc0MzhhZTU2MiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZ2xpYnRlc3QgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmJjOGJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC5pbmMKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJVdGlsaXRpZXMgZm9yIG1hbmFnaW5nIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIgorSE9NRVBBR0UgPSAiaHR0cDovL3NhdmFubmFoLm5vbmdudS5vcmcvcHJvamVjdHMvYWNsLyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsgJiBHUEx2MisiCitMSUNFTlNFXyR7UE59ID0gIkdQTHYyKyIKK0xJQ0VOU0VfbGliJHtCUE59ID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RvYy9DT1BZSU5HO21kNT1jNzgxZDcwZWQyYjRkNDg5OTViNzkwNDAzMjE3YTI0OSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kb2MvQ09QWUlORy5MR1BMO21kNT05ZTlhMjA2OTE3ZjhhZjExMmRhNjM0Y2UzYWI0MTc2NCIKKworREVQRU5EUyA9ICJhdHRyIgorU1JDX1VSSSA9ICIke1NBVkFOTkFIX0dOVV9NSVJST1J9L2FjbC8ke0JQfS5zcmMudGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9hY2wtZml4LXRoZS1vcmRlci1vZi1leHBlY3RlZC1vdXRwdXQtb2YtZ2V0ZmFjbC5wYXRjaCBcCisiCisKK3JlcXVpcmUgZWEtYWNsLmluYworCisjIGF2b2lkIFJQQVRIIGhhcmRjb2RlIHRvIHN0YWdpbmcgZGlyCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCXNlZCAtaSAke1N9L2NvbmZpZy5zdGF0dXMgLWUgcyxeXFxcKGhhcmRjb2RlX2ludG9fbGlicz1cXFwpLiokLFxcMVwnbm9cJywKKwkke1N9L2NvbmZpZy5zdGF0dXMKK30KKworIyBsaWJkaXIgc2hvdWxkIHBvaW50IHRvIC5sYQorZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJc2VkIC1pICR7RH0ke2xpYmRpcn0vbGliYWNsLmxhIC1lIFwKKwkgICAgcyxebGliZGlyPVwnJHtiYXNlX2xpYmRpcn1cJyQsbGliZGlyPVwnJHtsaWJkaXJ9XCcsCit9CisKK2luaGVyaXQgcHRlc3QKKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwl0YXIgLWNmIC0gdGVzdC8gLS1leGNsdWRlIG5mcyB8ICggY2QgJHtEfSR7UFRFU1RfUEFUSH0gJiYgdGFyIC14ZiAtICkKKwlta2RpciAke0R9JHtQVEVTVF9QQVRIfS9pbmNsdWRlCisJY3AgJHtTfS9pbmNsdWRlL2J1aWxkZGVmcyAke1N9L2luY2x1ZGUvYnVpbGRtYWNyb3MgJHtTfS9pbmNsdWRlL2J1aWxkcnVsZXMgJHtEfSR7UFRFU1RfUEFUSH0vaW5jbHVkZS8KK30KKworUkRFUEVORFNfJHtQTn0tcHRlc3QgPSAiYWNsIGJhc2ggY29yZXV0aWxzIHBlcmwgcGVybC1tb2R1bGUtZmlsZWhhbmRsZSBwZXJsLW1vZHVsZS1nZXRvcHQtc3RkIHBlcmwtbW9kdWxlLXBvc2l4IHNoYWRvdyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wvYWNsLWZpeC10aGUtb3JkZXItb2YtZXhwZWN0ZWQtb3V0cHV0LW9mLWdldGZhY2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL2FjbC1maXgtdGhlLW9yZGVyLW9mLWV4cGVjdGVkLW91dHB1dC1vZi1nZXRmYWNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNzY1ZmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL2FjbC1maXgtdGhlLW9yZGVyLW9mLWV4cGVjdGVkLW91dHB1dC1vZi1nZXRmYWNsLnBhdGNoCkBAIC0wLDAgKzEsMTk4IEBACithY2w6IGZpeCB0aGUgb3JkZXIgb2YgZXhwZWN0ZWQgb3V0cHV0IG9mIGdldGZhY2wKKworVGhlIHJlc3VsdCBvZiBnZXRmYWNsIGlzIHNvcnRlZCBieSB1c2VyIGlkLgorSW4gQ2VudG9zIG9yIFJIRUwsIGJpbiB1c2VyIGlkIGlzIDEgYW5kIGRhZW1vbiB1c2VyIGlkIGlzIDIuCitCdXQgaW4gb3VyIGltYWdlLCBiaW4gdXNlciBpZCBpcyAyIGFuZCBkYWVtb24gdXNlciBpZCBpcyAxLgorVGhlIHBhdGNoIGZpeGVzIHRoaXMgaXNzdWUgdG8gbWFrZSBwdGVzdCBwYXNzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIHRlc3QvbWlzYy50ZXN0IHwgICAzOCArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3Rlc3QvbWlzYy50ZXN0IGIvdGVzdC9taXNjLnRlc3QKK2luZGV4IDZlOTgwNTMuLjUzYWU1YjAgMTAwNjQ0CistLS0gYS90ZXN0L21pc2MudGVzdAorKysrIGIvdGVzdC9taXNjLnRlc3QKK0BAIC03OSw4ICs3OSw4IEBAIE11bHRpcGxlIHVzZXJzCisgCisgCSQgZ2V0ZmFjbCAtLW9taXQtaGVhZGVyIGYKKyAJPiB1c2VyOjpydy0KKy0JPiB1c2VyOmJpbjpydy0KKyAJPiB1c2VyOmRhZW1vbjpyLS0KKysJPiB1c2VyOmJpbjpydy0KKyAJPiBncm91cDo6ci0tCisgCT4gbWFzazo6cnctCisgCT4gb3RoZXI6OnItLQorQEAgLTk0LDggKzk0LDggQEAgTXVsdGlwbGUgZ3JvdXBzCisgCisgCSQgZ2V0ZmFjbCAtLW9taXQtaGVhZGVyIGYKKyAJPiB1c2VyOjpydy0KKy0JPiB1c2VyOmJpbjpydy0KKyAJPiB1c2VyOmRhZW1vbjpyLS0KKysJPiB1c2VyOmJpbjpydy0KKyAJPiBncm91cDo6ci0tCisgCT4gZ3JvdXA6ZGFlbW9uOnItLQorIAk+IGdyb3VwOnVzZXJzOnJ3LQorQEAgLTExMSw4ICsxMTEsOCBAQCBSZW1vdmUgb25lIGdyb3VwCisgCisgCSQgZ2V0ZmFjbCAtLW9taXQtaGVhZGVyIGYKKyAJPiB1c2VyOjpydy0KKy0JPiB1c2VyOmJpbjpydy0KKyAJPiB1c2VyOmRhZW1vbjpyLS0KKysJPiB1c2VyOmJpbjpydy0KKyAJPiBncm91cDo6ci0tCisgCT4gZ3JvdXA6ZGFlbW9uOnItLQorIAk+IG1hc2s6OnJ3LQorQEAgLTE0Niw4ICsxNDYsOCBAQCBEZWZhdWx0IEFDTAorIAorIAkkIGdldGZhY2wgLS1vbWl0LWhlYWRlciBkCisgCT4gdXNlcjo6cnd4CistCT4gdXNlcjpiaW46cnd4CisgCT4gdXNlcjpkYWVtb246cnctCisrCT4gdXNlcjpiaW46cnd4CisgCT4gZ3JvdXA6OnIteAorIAk+IG1hc2s6OnJ3eAorIAk+IG90aGVyOjotLS0KK0BAIC0yMzYsMTYgKzIzNiwxNiBAQCBBZGQgc29tZSB1c2VycyBhbmQgZ3JvdXBzCisgCisgCSQgZ2V0ZmFjbCAtLW9taXQtaGVhZGVyIGQvZAorIAk+IHVzZXI6OnJ3eAorLQk+IHVzZXI6YmluOnJ3eAkjZWZmZWN0aXZlOnIteAorIAk+IHVzZXI6ZGFlbW9uOnIteAorKwk+IHVzZXI6YmluOnJ3eAkjZWZmZWN0aXZlOnIteAorIAk+IGdyb3VwOjpyLXgKKyAJPiBncm91cDpkYWVtb246cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gZ3JvdXA6dXNlcnM6ci14CisgCT4gbWFzazo6ci14CisgCT4gb3RoZXI6Oi0tLQorIAk+IGRlZmF1bHQ6dXNlcjo6cnd4CistCT4gZGVmYXVsdDp1c2VyOmJpbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBkZWZhdWx0OnVzZXI6ZGFlbW9uOnIteAorKwk+IGRlZmF1bHQ6dXNlcjpiaW46cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gZGVmYXVsdDpncm91cDo6ci14CisgCT4gZGVmYXVsdDptYXNrOjpyLXgKKyAJPiBkZWZhdWx0Om90aGVyOjotLS0KK0BAIC0yNjIsMTYgKzI2MiwxNiBAQCBTeW1saW5rIGluIGRpcmVjdG9yeSB3aXRoIGRlZmF1bHQgQUNMPworIAorIAkkIGdldGZhY2wgLS1vbWl0LWhlYWRlciBkL2wKKyAJPiB1c2VyOjpyd3gKKy0JPiB1c2VyOmJpbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiB1c2VyOmRhZW1vbjpyLXgKKysJPiB1c2VyOmJpbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBncm91cDo6ci14CisgCT4gZ3JvdXA6ZGFlbW9uOnJ3eAkjZWZmZWN0aXZlOnIteAorIAk+IGdyb3VwOnVzZXJzOnIteAorIAk+IG1hc2s6OnIteAorIAk+IG90aGVyOjotLS0KKyAJPiBkZWZhdWx0OnVzZXI6OnJ3eAorLQk+IGRlZmF1bHQ6dXNlcjpiaW46cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gZGVmYXVsdDp1c2VyOmRhZW1vbjpyLXgKKysJPiBkZWZhdWx0OnVzZXI6YmluOnJ3eAkjZWZmZWN0aXZlOnIteAorIAk+IGRlZmF1bHQ6Z3JvdXA6OnIteAorIAk+IGRlZmF1bHQ6bWFzazo6ci14CisgCT4gZGVmYXVsdDpvdGhlcjo6LS0tCitAQCAtMjg3LDE2ICsyODcsMTYgQEAgRG9lcyBtYXNrIG1hbmlwdWxhdGlvbiB3b3JrPworIAorIAkkIGdldGZhY2wgLS1vbWl0LWhlYWRlciBkL2QKKyAJPiB1c2VyOjpyd3gKKy0JPiB1c2VyOmJpbjpyLXgKKyAJPiB1c2VyOmRhZW1vbjpyLXgKKysJPiB1c2VyOmJpbjpyLXgKKyAJPiBncm91cDo6ci14CisgCT4gZ3JvdXA6ZGFlbW9uOnIteAorIAk+IGdyb3VwOnVzZXJzOnIteAorIAk+IG1hc2s6OnIteAorIAk+IG90aGVyOjotLS0KKyAJPiBkZWZhdWx0OnVzZXI6OnJ3eAorLQk+IGRlZmF1bHQ6dXNlcjpiaW46cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gZGVmYXVsdDp1c2VyOmRhZW1vbjpyLXgKKysJPiBkZWZhdWx0OnVzZXI6YmluOnJ3eAkjZWZmZWN0aXZlOnIteAorIAk+IGRlZmF1bHQ6Z3JvdXA6OnIteAorIAk+IGRlZmF1bHQ6bWFzazo6ci14CisgCT4gZGVmYXVsdDpvdGhlcjo6LS0tCitAQCAtMzA4LDE2ICszMDgsMTYgQEAgRG9lcyBtYXNrIG1hbmlwdWxhdGlvbiB3b3JrPworIAorIAkkIGdldGZhY2wgLS1vbWl0LWhlYWRlciBkL2QKKyAJPiB1c2VyOjpyd3gKKy0JPiB1c2VyOmJpbjpyLXgKKyAJPiB1c2VyOmRhZW1vbjpyLXgKKysJPiB1c2VyOmJpbjpyLXgKKyAJPiBncm91cDo6ci14CisgCT4gZ3JvdXA6ZGFlbW9uOnIteAorIAk+IGdyb3VwOnVzZXJzOnIteAorIAk+IG1hc2s6OnIteAorIAk+IG90aGVyOjotLS0KKyAJPiBkZWZhdWx0OnVzZXI6OnJ3eAorLQk+IGRlZmF1bHQ6dXNlcjpiaW46cnd4CisgCT4gZGVmYXVsdDp1c2VyOmRhZW1vbjpyLXgKKysJPiBkZWZhdWx0OnVzZXI6YmluOnJ3eAorIAk+IGRlZmF1bHQ6Z3JvdXA6OnIteAorIAk+IGRlZmF1bHQ6bWFzazo6cnd4CisgCT4gZGVmYXVsdDpvdGhlcjo6LS0tCitAQCAtMzMzLDggKzMzMyw4IEBAIFJlbW92ZSB0aGUgZGVmYXVsdCBBQ0wKKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZAorIAk+IHVzZXI6OnJ3eAorLQk+IHVzZXI6YmluOnJ3eAorIAk+IHVzZXI6ZGFlbW9uOnJ3LQorKwk+IHVzZXI6YmluOnJ3eAorIAk+IGdyb3VwOjpyLXgKKyAJPiBtYXNrOjpyd3gKKyAJPiBvdGhlcjo6LS0tCitAQCAtMzczLDE0ICszNzMsMTQgQEAgTm93LCBjaG1vZCBzaG91bGQgY2hhbmdlIHRoZSBncm91cF9vYmogZW50cnkKKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZAorIAk+IHVzZXI6OnJ3eAorLQk+IHVzZXI6YmluOnIteAorIAk+IHVzZXI6ZGFlbW9uOnJ3eAorKwk+IHVzZXI6YmluOnIteAorIAk+IGdyb3VwOjpyd3gKKyAJPiBtYXNrOjpyd3gKKyAJPiBvdGhlcjo6ci14CisgCT4gZGVmYXVsdDp1c2VyOjpyd3gKKy0JPiBkZWZhdWx0OnVzZXI6YmluOnIteAorIAk+IGRlZmF1bHQ6dXNlcjpkYWVtb246cnd4CisrCT4gZGVmYXVsdDp1c2VyOmJpbjpyLXgKKyAJPiBkZWZhdWx0Omdyb3VwOjpyd3gKKyAJPiBkZWZhdWx0Om1hc2s6OnJ3eAorIAk+IGRlZmF1bHQ6b3RoZXI6OnIteAorQEAgLTM5MiwxNCArMzkyLDE0IEBAIE5vdywgY2htb2Qgc2hvdWxkIGNoYW5nZSB0aGUgZ3JvdXBfb2JqIGVudHJ5CisgCisgCSQgZ2V0ZmFjbCAtLW9taXQtaGVhZGVyIGQKKyAJPiB1c2VyOjpyd3gKKy0JPiB1c2VyOmJpbjpyLXgKKyAJPiB1c2VyOmRhZW1vbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKysJPiB1c2VyOmJpbjpyLXgKKyAJPiBncm91cDo6cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gbWFzazo6ci14CisgCT4gb3RoZXI6Oi0tLQorIAk+IGRlZmF1bHQ6dXNlcjo6cnd4CistCT4gZGVmYXVsdDp1c2VyOmJpbjpyLXgKKyAJPiBkZWZhdWx0OnVzZXI6ZGFlbW9uOnJ3eAorKwk+IGRlZmF1bHQ6dXNlcjpiaW46ci14CisgCT4gZGVmYXVsdDpncm91cDo6cnd4CisgCT4gZGVmYXVsdDptYXNrOjpyd3gKKyAJPiBkZWZhdWx0Om90aGVyOjpyLXgKK0BAIC00MTEsMTQgKzQxMSwxNCBAQCBOb3csIGNobW9kIHNob3VsZCBjaGFuZ2UgdGhlIGdyb3VwX29iaiBlbnRyeQorIAorIAkkIGdldGZhY2wgLS1vbWl0LWhlYWRlciBkCisgCT4gdXNlcjo6cnd4CistCT4gdXNlcjpiaW46ci14CisgCT4gdXNlcjpkYWVtb246cnd4CSNlZmZlY3RpdmU6ci14CisrCT4gdXNlcjpiaW46ci14CisgCT4gZ3JvdXA6OnJ3eAkjZWZmZWN0aXZlOnIteAorIAk+IG1hc2s6OnIteAorIAk+IG90aGVyOjotLS0KKyAJPiBkZWZhdWx0OnVzZXI6OnJ3eAorLQk+IGRlZmF1bHQ6dXNlcjpiaW46ci14CisgCT4gZGVmYXVsdDp1c2VyOmRhZW1vbjpyd3gKKysJPiBkZWZhdWx0OnVzZXI6YmluOnIteAorIAk+IGRlZmF1bHQ6Z3JvdXA6OnJ3eAorIAk+IGRlZmF1bHQ6bWFzazo6cnd4CisgCT4gZGVmYXVsdDpvdGhlcjo6ci14CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC9hZGQtbWlzc2luZy1jb25maWd1cmUuYWMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL2FkZC1taXNzaW5nLWNvbmZpZ3VyZS5hYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjY5NzlmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC9hZGQtbWlzc2luZy1jb25maWd1cmUuYWMucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbY29uZmlndXJlLmFjIGlzIG1pc3NpbmcgZnJvbSB0YXJiYWxsXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBhY2wtMi4yLjUyL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGFjbC0yLjIuNTIvY29uZmlndXJlLmFjCitAQCAtMCwwICsxLDUwIEBACisrCisrIyBDb3B5cmlnaHQgKEMpIDIwMDkgIEFuZHJlYXMgR3J1ZW5iYWNoZXIgPGFncnVlbkBzdXNlLmRlPgorKyMKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisrIworK0FDX0lOSVQoaW5jbHVkZS9hY2wuaCkKKytBQ19DT05GSUdfQVVYX0RJUihbLl0pCisrQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQorK0FDX0NPTkZJR19IRUFERVIoaW5jbHVkZS9jb25maWcuaCkKKytBQ19QUkVGSVhfREVGQVVMVCgvdXNyKQorKworK0FDX1BST0dfTElCVE9PTAorKworK0FDX0FSR19FTkFCTEUoc2hhcmVkLAorK1sgLS1lbmFibGUtc2hhcmVkPVt5ZXMvbm9dIEVuYWJsZSB1c2Ugb2Ygc2hhcmVkIGxpYnJhcmllcyBbZGVmYXVsdD15ZXNdXSwsCisrCWVuYWJsZV9zaGFyZWQ9eWVzKQorK0FDX1NVQlNUKGVuYWJsZV9zaGFyZWQpCisrCisrQUNfQVJHX0VOQUJMRShnZXR0ZXh0LAorK1sgLS1lbmFibGUtZ2V0dGV4dD1beWVzL25vXSBFbmFibGUgYWx0ZXJuYXRlIGxhbmd1YWdlIHN1cHBvcnQgW2RlZmF1bHQ9eWVzXV0sLAorKwllbmFibGVfZ2V0dGV4dD15ZXMpCisrQUNfU1VCU1QoZW5hYmxlX2dldHRleHQpCisrCisrQUNfQVJHX0VOQUJMRShsaWI2NCwKKytbIC0tZW5hYmxlLWxpYjY0PVt5ZXMvbm9dIEVuYWJsZSBsaWI2NCBzdXBwb3J0IFtkZWZhdWx0PW5vXV0sLAorKwllbmFibGVfbGliNjQ9bm8pCisrQUNfU1VCU1QoZW5hYmxlX2xpYjY0KQorKworK0FDX1BBQ0tBR0VfR0xPQkFMUyhhY2wpCisrQUNfUEFDS0FHRV9VVElMSVRJRVMoYWNsKQorK0FDX1BBQ0tBR0VfTkVFRF9BVFRSX1hBVFRSX0gKKytBQ19QQUNLQUdFX05FRURfQVRUUl9FUlJPUl9ICisrQUNfTVVMVElMSUIoJGVuYWJsZV9saWI2NCkKKytBQ19QQUNLQUdFX05FRURfR0VUWEFUVFJfTElCQVRUUgorK0FDX01BTlVBTF9GT1JNQVQKKysKKytBQ19GVU5DX0dDQ19WSVNJQklMSVRZCisrCisrQUNfT1VUUFVUKGluY2x1ZGUvYnVpbGRkZWZzKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjMxY2M5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC9ydW4tcHRlc3QKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vc2gKKworZ3Bhc3N3ZCAtYSBkYWVtb24gYmluCittYWtlIC1DIHRlc3QgLWsgdGVzdHMgcm9vdC10ZXN0cyB8c2VkIFwKKyAtZSAnc3xeXFsuKlxdIFwoLipcKSAtLSBvayR8UEFTUzogXDF8JyBcCisgLWUgJ3N8XlxbLipcXSBcKC4qXCkgLS0gZmFpbGVkfEZBSUw6IFwxfCcKK2dwYXNzd2QgLWQgZGFlbW9uIGJpbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbF8yLjIuNTIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsXzIuMi41Mi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2RiZGI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbF8yLjIuNTIuYmIKQEAgLTAsMCArMSw5IEBACityZXF1aXJlIGFjbC5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL2FkZC1taXNzaW5nLWNvbmZpZ3VyZS5hYy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImE2MTQxNTMxMjQyNmU5YzIyMTJiZDdkYzc5MjlhYmRhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjE3OTA3NGJiMDU4MGMwNmM0YjQxMzdiZTRjNWE5MmE3MDE1ODMyNzc5NjdhY2RiNTU0NjA0M2M3ODc0ZTBkMjMiCisKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2F0dHIuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2F0dHIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4Yzc1MGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYXR0ci5pbmMKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJVdGlsaXRpZXMgZm9yIG1hbmlwdWxhdGluZyBmaWxlc3lzdGVtIGV4dGVuZGVkIGF0dHJpYnV0ZXMiCitIT01FUEFHRSA9ICJodHRwOi8vc2F2YW5uYWgubm9uZ251Lm9yZy9wcm9qZWN0cy9hdHRyLyIKK1NFQ1RJT04gPSAibGlicyIKKworREVQRU5EUyA9ICJuY3Vyc2VzIHZpcnR1YWwvbGliaW50bCIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsgJiBHUEx2MisiCitMSUNFTlNFXyR7UE59ID0gIkdQTHYyKyIKK0xJQ0VOU0VfbGliJHtCUE59ID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RvYy9DT1BZSU5HO21kNT0yZDBhYTE0YjNmY2U0Njk0ZTRmNjE1ZTMwMTg2MzM1ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdHRyL2F0dHIuYztlbmRsaW5lPTE3O21kNT1iZTA0MDMyNjFmMDg0N2U1ZjQzZWQ1YjA4ZDE5NTkzYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJhdHRyL2xpYmF0dHIuYztlbmRsaW5lPTE3O21kNT03OTcwZjc3MDQ5ZjhmYTExOTlmZmY2MmE3YWI3MjRmYiIKKworU1JDX1VSSSA9ICIke1NBVkFOTkFIX0dOVV9NSVJST1J9L2F0dHIvJHtCUH0uc3JjLnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorIgorCityZXF1aXJlIGVhLWFjbC5pbmMKKworIyBsaWJkaXIgc2hvdWxkIHBvaW50IHRvIC5sYQorZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJc2VkIC1pICR7RH0ke2xpYmRpcn0vbGliYXR0ci5sYSAtZSBcCisJICAgIHMsXmxpYmRpcj1cJyR7YmFzZV9saWJkaXJ9XCckLGxpYmRpcj1cJyR7bGliZGlyfVwnLAorfQorCitpbmhlcml0IHB0ZXN0CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJdGFyIC1jZiAtIHRlc3QvIC0tZXhjbHVkZSBleHQgfCAoIGNkICR7RH0ke1BURVNUX1BBVEh9ICYmIHRhciAteGYgLSApCisJbWtkaXIgJHtEfSR7UFRFU1RfUEFUSH0vaW5jbHVkZQorCWZvciBpIGluIGJ1aWxkZGVmcyBidWlsZG1hY3JvcyBidWlsZHJ1bGVzOyBcCisJICBkbyBjcCAke1N9L2luY2x1ZGUvJGkgJHtEfSR7UFRFU1RfUEFUSH0vaW5jbHVkZS87IFwKKwlkb25lCisJc2VkIC1lICdzfDsgQGVjaG98OyBlY2hvfCcgLWkgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdC9NYWtlZmlsZQorfQorCitSREVQRU5EU18ke1BOfS1wdGVzdCA9ICJjb3JldXRpbHMgcGVybC1tb2R1bGUtZmlsZWhhbmRsZSBwZXJsLW1vZHVsZS1nZXRvcHQtc3RkIHBlcmwtbW9kdWxlLXBvc2l4IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2F0dHJfMi40LjQ3LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2F0dHJfMi40LjQ3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNDBjOWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYXR0cl8yLjQuNDcuYmIKQEAgLTAsMCArMSwxMCBAQAorcmVxdWlyZSBhdHRyLmluYworCisjIGNvbmZpZ3VyZS5hYyB3YXMgbWlzc2luZyBmcm9tIHRoZSByZWxlYXNlIHRhcmJhbGwuIFRoaXMgc2hvdWxkIGJlIGZpeGVkIGluCisjIGZ1dHVyZSByZWxlYXNlcyBvZiBhdHRyLCByZW1vdmUgdGhpcyB3aGVuIHVwZGF0aW5nIHRoZSByZWNpcGUuCitTUkNfVVJJX2FwcGVuZCArPSAiZmlsZTovL2F0dHItTWlzc2luZy1jb25maWd1cmUuYWMucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NGY1OGRlYzAwYjYwZjJkYzhmZDFjOTcwOTI5MWNjNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyNTc3MmY2NTNhYzViMmUzY2VlYjg5ZGY1MGU0Njg4ODkxZTIxZjcyM2M0NjA2MzY1NDg5NzE2NTJhZjBhODU5IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZWEtYWNsLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9lYS1hY2wuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MGUxNmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZWEtYWNsLmluYwpAQCAtMCwwICsxLDUyIEBACisjIHRoaXMgYnVpbGQgc3lzdGVtIGlzIG1vc3RseSBzaGFyZWQgYnkgYXR0ciBhbmQgYWNsCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9yZWxhdGl2ZS1saWJkaXIucGF0Y2g7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgZ2V0dGV4dAorCisjIHRoZSBwYWNrYWdlIGNvbWVzIHdpdGggYSBjdXN0b20gY29uZmlnLmguaW4sIGl0IGNhbm5vdCBiZQorIyBvdmVyd3JpdHRlbiBieSBhdXRvaGVhZGVyCitFWFRSQV9BVVRPUkVDT05GICs9ICItLWV4Y2x1ZGU9YXV0b2hlYWRlciIKK0VYVFJBX09FQ09ORiA9ICJJTlNUQUxMX1VTRVI9cm9vdCBJTlNUQUxMX0dST1VQPXJvb3QiCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgLS1lbmFibGUtZ2V0dGV4dD1ubyIKKworRVhUUkFfT0VNQUtFID0gIlBLR19MSUJfRElSPSR7YmFzZV9saWJkaXJ9IFBLR19ERVZMSUJfRElSPSR7bGliZGlyfSIKKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsIGluc3RhbGwtbGliIGluc3RhbGwtZGV2IERJU1RfUk9PVD0iJHtEfSIKK30KKworUEFDS0FHRVMgPSsgImxpYiR7QlBOfSIKKworRklMRVNfbGliJHtCUE59ID0gIiR7YmFzZV9saWJkaXJ9L2xpYioke1NPTElCU30iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorIyBPbmx5IGFwcGVuZCBsZGZsYWdzIGZvciB0YXJnZXQgcmVjaXBlIGFuZCBpZiBVU0VfTkxTIGlzIGVuYWJsZWQKK0xERkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjX2NsYXNzLXRhcmdldCA9ICIke0BbJycsICcgLWxpbnRsICddWyhkLmdldFZhcignVVNFX05MUycsIFRydWUpID09ICd5ZXMnKV19IgorRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliY19jbGFzcy10YXJnZXQgPSAiJHtAWycnLCAnIC0tZGlzYWJsZS1nZXR0ZXh0ICddWyhkLmdldFZhcignVVNFX05MUycsIFRydWUpID09ICdubycpXX0iCisKK2ZpeF9zeW1saW5rICgpIHsKKwlpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgIT0gInBvcHVsYXRlX3N5c3Jvb3QiIC1hICIke0JCX0NVUlJFTlRUQVNLfSIgIT0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF0KKwl0aGVuCisJCXJldHVybgorCWZpCisKKwlpZiB0ZXN0ICIke2xpYmRpcn0iID0gIiR7YmFzZV9saWJkaXJ9IiA7IHRoZW4KKwkJcmV0dXJuCisJZmkKKwkjIFJlbW92ZSBiYWQgc3ltbGlua3MgJiBjcmVhdGUgdGhlIGNvcnJlY3Qgc3ltbGlua3MKKwlpZiB0ZXN0IC1MICR7bGliZGlyfS9saWIke0JQTn0uc28gOyB0aGVuCisJCXJtIC1yZiAke2xpYmRpcn0vbGliJHtCUE59LnNvCisJCWxuIC1zZiAke2Jhc2VfbGliZGlyfS9saWIke0JQTn0uc28gJHtsaWJkaXJ9L2xpYiR7QlBOfS5zbworCWZpCisJaWYgdGVzdCAtTCAke2Jhc2VfbGliZGlyfS9saWIke0JQTn0uYSA7IHRoZW4KKwkJcm0gLXJmICR7YmFzZV9saWJkaXJ9L2xpYiR7QlBOfS5hCisJCWxuIC1zZiAke2xpYmRpcn0vbGliJHtCUE59LmEgJHtiYXNlX2xpYmRpcn0vbGliJHtCUE59LmEKKwlmaQorCWlmIHRlc3QgLUwgICR7YmFzZV9saWJkaXJ9L2xpYiR7QlBOfS5sYSA7IHRoZW4KKwkJcm0gLXJmICR7YmFzZV9saWJkaXJ9L2xpYiR7QlBOfS5sYQorCQlsbiAtc2YgJHtsaWJkaXJ9L2xpYiR7QlBOfS5sYSAke2Jhc2VfbGliZGlyfS9saWIke0JQTn0ubGEKKwlmaQorfQorU1NUQVRFUE9TVElOU1RGVU5DU19jbGFzcy1uYXRpdmUgKz0gImZpeF9zeW1saW5rIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2ZpbGVzL2F0dHItTWlzc2luZy1jb25maWd1cmUuYWMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZmlsZXMvYXR0ci1NaXNzaW5nLWNvbmZpZ3VyZS5hYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGZjYzNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2ZpbGVzL2F0dHItTWlzc2luZy1jb25maWd1cmUuYWMucGF0Y2gKQEAgLTAsMCArMSw2MyBAQAorU3ViamVjdDogW1BBVENIXSBhdHRyOiBNaXNzaW5nIGNvbmZpZ3VyZS5hYworCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtVcHN0cmVhbSByZWxlYXNlZCB0YXJiYWxsIG1pc3NpbmcgdGhpcyBmaWxlXQorU2lnbmVkLW9mZi1ieTogTmF0aGFuIFJvc3NpIDxuYXRoYW4ucm9zc2lAeGlsaW54LmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgNDggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDQ4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgY29uZmlndXJlLmFjCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iOTY2ZDBlCistLS0gL2Rldi9udWxsCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0wLDAgKzEsNDggQEAKKysjIENvcHlyaWdodCAoQykgMjAwOSAgQW5kcmVhcyBHcnVlbmJhY2hlciA8YWdydWVuQHN1c2UuZGU+CisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyMKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKysjCisrQUNfSU5JVChpbmNsdWRlL2F0dHJpYnV0ZXMuaCkKKytBQ19DT05GSUdfQVVYX0RJUihbLl0pCisrQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQorK0FDX0NPTkZJR19IRUFERVIoaW5jbHVkZS9jb25maWcuaCkKKytBQ19QUkVGSVhfREVGQVVMVCgvdXNyKQorKworK0FDX1BST0dfTElCVE9PTAorKworK0FDX0FSR19FTkFCTEUoc2hhcmVkLAorK1sgLS1lbmFibGUtc2hhcmVkPVt5ZXMvbm9dIEVuYWJsZSB1c2Ugb2Ygc2hhcmVkIGxpYnJhcmllcyBbZGVmYXVsdD15ZXNdXSwsCisrCWVuYWJsZV9zaGFyZWQ9eWVzKQorK0FDX1NVQlNUKGVuYWJsZV9zaGFyZWQpCisrCisrQUNfQVJHX0VOQUJMRShnZXR0ZXh0LAorK1sgLS1lbmFibGUtZ2V0dGV4dD1beWVzL25vXSBFbmFibGUgYWx0ZXJuYXRlIGxhbmd1YWdlIHN1cHBvcnQgW2RlZmF1bHQ9eWVzXV0sLAorKwllbmFibGVfZ2V0dGV4dD15ZXMpCisrQUNfU1VCU1QoZW5hYmxlX2dldHRleHQpCisrCisrQUNfQVJHX0VOQUJMRShsaWI2NCwKKytbIC0tZW5hYmxlLWxpYjY0PVt5ZXMvbm9dIEVuYWJsZSBsaWI2NCBzdXBwb3J0IFtkZWZhdWx0PW5vXV0sLAorKwllbmFibGVfbGliNjQ9bm8pCisrQUNfU1VCU1QoZW5hYmxlX2xpYjY0KQorKworK0FDX1BBQ0tBR0VfR0xPQkFMUyhhdHRyKQorK0FDX1BBQ0tBR0VfVVRJTElUSUVTKGF0dHIpCisrQUNfTUFOVUFMX0ZPUk1BVAorK0FDX01VTFRJTElCKCRlbmFibGVfbGliNjQpCisrCisrQUNfQ19DT05TVAorK0FDX1RZUEVfTU9ERV9UCisrQUNfRlVOQ19BTExPQ0EKKysKKytBQ19PVVRQVVQoaW5jbHVkZS9idWlsZGRlZnMpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZmlsZXMvcmVsYXRpdmUtbGliZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2ZpbGVzL3JlbGF0aXZlLWxpYmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzJiZjE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2ZpbGVzL3JlbGF0aXZlLWxpYmRpci5wYXRjaApAQCAtMCwwICsxLDI1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKwordXNlIHJlbGF0aXZlIHBhdGggaW4gc3ltYm9saWMgbGlua3MsIG9yIGl0IGZhaWxzIGluIHN0YWdpbmcKK3NlZCBleHByZXNzaW9uIGZyb20gdWRldgorCis3LzI5LzIwMTAgLSBjcmVhdGVkIGJ5IFFpbmcgSGUgPHFpbmcuaGVAaW50ZWwuY29tPgorCitkaWZmIC11IGluY2x1ZGUub3JpZy9idWlsZG1hY3JvcyBpbmNsdWRlL2J1aWxkbWFjcm9zCistLS0gaW5jbHVkZS5vcmlnL2J1aWxkbWFjcm9zCTIwMTAtMDctMjkgMTc6Mzk6NDguMDAwMDAwMDAwICswODAwCisrKysgaW5jbHVkZS9idWlsZG1hY3JvcwkyMDEwLTA3LTI5IDE4OjIwOjM0LjAwMDAwMDAwMCArMDgwMAorQEAgLTg4LDkgKzg4LDExIEBACisgCS4uLyQoSU5TVEFMTCkgLW0gNzU1IC1kICQoUEtHX0xJQl9ESVIpOyBcCisgCS4uLyQoSU5TVEFMTCkgLVQgc29fYmFzZSAkKExJQk5BTUUpLmxhaSAkKFBLR19MSUJfRElSKTsgXAorIAlpZiB0ZXN0ICJ4JChQS0dfREVWTElCX0RJUikiICE9ICJ4JChQS0dfTElCX0RJUikiIDsgdGhlbiBcCistCS4uLyQoSU5TVEFMTCkgLVMgJChQS0dfREVWTElCX0RJUikvJChMSUJOQU1FKS5hICQoUEtHX0xJQl9ESVIpLyQoTElCTkFNRSkuYTsgXAorLQkuLi8kKElOU1RBTEwpIC1TICQoUEtHX0RFVkxJQl9ESVIpLyQoTElCTkFNRSkubGEgJChQS0dfTElCX0RJUikvJChMSUJOQU1FKS5sYTsgXAorLQkuLi8kKElOU1RBTEwpIC1TICQoUEtHX0xJQl9ESVIpLyQoTElCTkFNRSkuc28gJChQS0dfREVWTElCX0RJUikvJChMSUJOQU1FKS5zbzsgXAorKwlyZWxfbGliX3ByZWZpeD0kJChlY2hvICQoUEtHX0xJQl9ESVIpIHwgc2VkICdzLFwoXi9cfFwpW14vXVteL10qLC4uLGcnKTsgXAorKwkuLi8kKElOU1RBTEwpIC1TICQkcmVsX2xpYl9wcmVmaXgkKFBLR19ERVZMSUJfRElSKS8kKExJQk5BTUUpLmEgJChQS0dfTElCX0RJUikvJChMSUJOQU1FKS5hOyBcCisrCS4uLyQoSU5TVEFMTCkgLVMgJCRyZWxfbGliX3ByZWZpeCQoUEtHX0RFVkxJQl9ESVIpLyQoTElCTkFNRSkubGEgJChQS0dfTElCX0RJUikvJChMSUJOQU1FKS5sYTsgXAorKwlyZWxfZGV2bGliX3ByZWZpeD0kJChlY2hvICQoUEtHX0RFVkxJQl9ESVIpIHwgc2VkICdzLFwoXi9cfFwpW14vXVteL10qLC4uLGcnKTsgXAorKwkuLi8kKElOU1RBTEwpIC1TICQkcmVsX2RldmxpYl9wcmVmaXgkKFBLR19MSUJfRElSKS8kKExJQk5BTUUpLnNvICQoUEtHX0RFVkxJQl9ESVIpLyQoTElCTkFNRSkuc287IFwKKyAJZmkKKyBlbHNlCisgSU5TVEFMTF9MVExJQl9ERVYgPSAkKElOU1RBTExfTFRMSUJfU1RBVElDKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2ZpbGVzL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9maWxlcy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZjNjg2NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9maWxlcy9ydW4tcHRlc3QKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKKworbWFrZSAtQyB0ZXN0IC1rIHRlc3RzIHJvb3QtdGVzdHMgfHNlZCBcCisgLWUgJ3N8XlxbLipcXSBcKC4qXCkgLS0gb2skfFBBU1M6IFwxfCcgXAorIC1lICdzfF5cWy4qXF0gXCguKlwpIC0tIGZhaWxlZHxGQUlMOiBcMXwnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djLzAwMDEtZml4LWJ1aWxkLXdpdGgtbXVzbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2MvMDAwMS1maXgtYnVpbGQtd2l0aC1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiOTA3ZmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djLzAwMDEtZml4LWJ1aWxkLXdpdGgtbXVzbC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDgyOWE4OWU3ZjU3ODUyMzlhOTM4NGUzYWZkNDZjOTAwZjlkNzZhZGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAzMSBBdWcgMjAxNSAxOTo1NTozMiArMDAwMAorU3ViamVjdDogW1BBVENIXSBmaXggYnVpbGQgd2l0aCBtdXNsCisKK3NpZ25hbC5oIGFscmVhZHkgaW5jbHVkZXMgYml0cy9zaWdjb250ZXh0LmgKK0RvY3VtZW50YXRpb24gc2VlbXMgdG8gaW5kaWNhdGUgdGhhdCBpZiB5b3UgbmVlZCB0aGUgZGVmaW5pdGlvbnMgaW4KK3NpZ2NvbnRleHQuaCwgeW91IGFyZSBzdXBwb3NlZCB0byBpbmNsdWRlIHNpZ25hbC5oIGFuZCBub3Qgc2lnY29udGV4dC5oLgorCithIGdvb2QgZml4IHNob3VsZCBiZSB0byByZW1vdmUgZ2xpYmMKK3NwZWNpZmljIHVuZGVyc3RhbmRpbmcsIGluIHRob3NlIGlmZGVmJ3MKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBvc19kZXAuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL29zX2RlcC5jIGIvb3NfZGVwLmMKK2luZGV4IDA4YzUwMWQuLjVjYjc4NzMgMTAwNjQ0CistLS0gYS9vc19kZXAuYworKysrIGIvb3NfZGVwLmMKK0BAIC00MSw3ICs0MSw3IEBACisgIyAgIGVsc2UgLyogX19HTElCQ19fIDwgMiAqLworICAgICAgIC8qIGxpYmM1IGRvZXNuJ3QgaGF2ZSA8c2lnY29udGV4dC5oPjogZ28gZGlyZWN0bHkgd2l0aCB0aGUga2VybmVsICAgKi8KKyAgICAgICAvKiBvbmUuICBDaGVjayBMSU5VWF9WRVJTSU9OX0NPREUgdG8gc2VlIHdoaWNoIHdlIHNob3VsZCByZWZlcmVuY2UuICovCistIyAgICAgaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KKysjICAgICBpbmNsdWRlIDxzaWduYWwuaD4KKyAjICAgZW5kaWYgLyogX19HTElCQ19fIDwgMiAqLworICMgZW5kaWYKKyAjZW5kaWYgLyogTElOVVggJiYgIVBPV0VSUEMgKi8KKy0tIAorMi41LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnY183LjQuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2NfNy40LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVlMzU4ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2NfNy40LjIuYmIKQEAgLTAsMCArMSw0MyBAQAorU1VNTUFSWSA9ICJBIGdhcmJhZ2UgY29sbGVjdG9yIGZvciBDIGFuZCBDKysiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBCb2VobS1EZW1lcnMtV2Vpc2VyIGNvbnNlcnZhdGl2ZSBnYXJiYWdlIGNvbGxlY3RvciBjYW4gYmVcCisgdXNlZCBhcyBhIGdhcmJhZ2UgY29sbGVjdGluZyByZXBsYWNlbWVudCBmb3IgQyBtYWxsb2Mgb3IgQysrIG5ldy4gSXQgYWxsb3dzXAorIHlvdSB0byBhbGxvY2F0ZSBtZW1vcnkgYmFzaWNhbGx5IGFzIHlvdSBub3JtYWxseSB3b3VsZCwgd2l0aG91dCBleHBsaWNpdGx5XAorIGRlYWxsb2NhdGluZyBtZW1vcnkgdGhhdCBpcyBubyBsb25nZXIgdXNlZnVsLiBUaGUgY29sbGVjdG9yIGF1dG9tYXRpY2FsbHlcCisgcmVjeWNsZXMgbWVtb3J5IHdoZW4gaXQgZGV0ZXJtaW5lcyB0aGF0IGl0IGNhbiBubyBsb25nZXIgYmUgb3RoZXJ3aXNlXAorIGFjY2Vzc2VkLlwKKyAgVGhlIGNvbGxlY3RvciBpcyBhbHNvIHVzZWQgYnkgYSBudW1iZXIgb2YgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VcCisgaW1wbGVtZW50YXRpb25zIHRoYXQgZWl0aGVyIHVzZSBDIGFzIGludGVybWVkaWF0ZSBjb2RlLCB3YW50IHRvIGZhY2lsaXRhdGVcCisgZWFzaWVyIGludGVyb3BlcmF0aW9uIHdpdGggQyBsaWJyYXJpZXMsIG9yIGp1c3QgcHJlZmVyIHRoZSBzaW1wbGUgY29sbGVjdG9yXAorIGludGVyZmFjZS5cCisgIEFsdGVybmF0aXZlbHksIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBtYXkgYmUgdXNlZCBhcyBhIGxlYWsgZGV0ZWN0b3IgZm9yIENcCisgb3IgQysrIHByb2dyYW1zLCB0aG91Z2ggdGhhdCBpcyBub3QgaXRzIHByaW1hcnkgZ29hbC5cCisgIEVtcGlyaWNhbGx5LCB0aGlzIGNvbGxlY3RvciB3b3JrcyB3aXRoIG1vc3QgdW5tb2RpZmllZCBDIHByb2dyYW1zLCBzaW1wbHlcCisgYnkgcmVwbGFjaW5nIG1hbGxvYyB3aXRoIEdDX21hbGxvYyBjYWxscywgcmVwbGFjaW5nIHJlYWxsb2Mgd2l0aCBHQ19yZWFsbG9jXAorIGNhbGxzLCBhbmQgcmVtb3ZpbmcgZnJlZSBjYWxscy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuaGJvZWhtLmluZm8vZ2MvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FLlFVSUNLO21kNT01NWY1MDg4ZjkwYTk4MmZlZDdhZjlhNDg5NzA0N2VmNyIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lmhib2VobS5pbmZvL2djL2djX3NvdXJjZS9nYy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1maXgtYnVpbGQtd2l0aC1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxMmMwNWZkMjgxMWQ5ODkzNDFkOGM2ZDgxZjY2YWY4NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MzMyMGFkN2M0NTQ2MGU0YTQwZTAzZjVhYTRjNjg5Mzc4M2YyMWExNjQxNmMzMjgyYjk5NGY5MzMzMTJhZmEyIgorRklMRVNfJHtQTn0tZG9jID0gIi91c3Ivc2hhcmUiCisKK1JFQUxfUFYgPSAiJHtAW2QuZ2V0VmFyKCdQVicsMSlbOi0xXSwgZC5nZXRWYXIoJ1BWJywxKV1bKGQuZ2V0VmFyKCdQVicsMSlbLTFdKS5pc2RpZ2l0KCldfSIKK1MgPSAiJHtXT1JLRElSfS9nYy0ke1JFQUxfUFZ9IgorCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKKyMgYnkgZGVmYXVsdCB1c2UgZXh0ZXJuYWwgbGliYXRvbWljLW9wcworUEFDS0FHRUNPTkZJRyA/Pz0gImxpYmF0b21pYy1vcHMiCitQQUNLQUdFQ09ORklHW2xpYmF0b21pYy1vcHNdID0gIi0td2l0aC1saWJhdG9taWMtb3BzPXllcywtLXdpdGgtbGliYXRvbWljLW9wcz1ubyxsaWJhdG9taWMtb3BzIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L2FkZC1vcHRpb24tZGV2LWRzcC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvYWRkLW9wdGlvbi1kZXYtZHNwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMjk4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L2FkZC1vcHRpb24tZGV2LWRzcC5wYXRjaApAQCAtMCwwICsxLDM0IEBACitBZGQgY29uZmlnIG9wdGlvbiAtLXdpdGgtZGV2LWRzcC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFpoYW5nIFhpYW8gPHhpYW8uemhhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMDYsNiArMTA2LDE2IEBAIEFDX0FSR19XSVRIKHB5dGhvbixbICAtLXdpdGgtcHl0aG9uW1s9QVIKKyAgIGZpCisgICBdKQorIAorK0FDX0FSR19XSVRIKGRldi1kc3AsWyAgLS13aXRoLWRldi1kc3AgICAgICAgICAgZW5hYmxlcyBkZXYvZHNwIGZvciBlbnRyb3B5IHByb2R1Y2luZy4gYXV0byBmb3IgYXV0by1kZXRlY3RpbmcgZGV2L2RlcCBvbiBob3N0LiBbW2RlZmF1bHQ9bm9dXV0sWworKyAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShbSEFWRV9ERVZfRFNQXSwgMSkKKysgIGVsc2UKKysgICAgaWYgdGVzdCAiJHdpdGh2YWwiID0gYXV0bzsgIHRoZW4KKysgICAgICBhY19kZXRlY3RfZGV2X2RzcD15ZXMKKysgICAgZmkKKysgIGZpCisrICBdLFthY19kZXRlY3RfZGV2X2RzcD1ub10pCisrCisgIyBDaGVjayBmb3IgZXhwZXJ0IG1vZGUKKyBpZiB0ZXN0ICIkYWNfZW5hYmxlX2V4cGVydF9tb2RlIiA9IHllczsgdGhlbgorICAgQkVFX0VYUEVSVF9NT0RFCitAQCAtNDY0LDcgKzQ3NCw3IEBAIGxpbnV4KikKKyAgICAgICBhY19jdl9oYXZlX2Rldl9kc3A9bm8KKyAgICAgZmkKKyAgICAgXSkKKy0gIGlmIHRlc3QgIiRhY19jdl9oYXZlX2Rldl9kc3AiID0geWVzOyB0aGVuCisrICBpZiB0ZXN0ICIkYWNfY3ZfaGF2ZV9kZXZfZHNwIiA9IHllcyAmJiB0ZXN0ICIkYWNfZGV0ZWN0X2Rldl9kc3AiID0geWVzOyB0aGVuCisgICAgIEFDX0RFRklORShbSEFWRV9ERVZfRFNQXSwgMSkKKyAgIGZpCisgICA7OwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9iZWVjcnlwdC1lbmFibGUtcHRlc3Qtc3VwcG9ydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvYmVlY3J5cHQtZW5hYmxlLXB0ZXN0LXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U1NTEzZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvYmVlY3J5cHQtZW5hYmxlLXB0ZXN0LXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorYmVlY3J5cHQ6IGVuYWJsZSBwdGVzdCBzdXBwb3J0CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0FkZCBpbnN0YWxsLXB0ZXN0IHJ1bGVzLgorCitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmFtICAgICAgIHwgMyArKysKKyB0ZXN0cy9NYWtlZmlsZS5hbSB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IGI3ZTc4NjkuLjUwNzZmNTkgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC03MywzICs3Myw2IEBAIERJU1RDTEVBTkZJTEVTID0gbXBvcHQucyBibG93ZmlzaG9wdC5zIHNoYTFvcHQucworIAorIGJlbmNoOgorIAkoY2QgdGVzdHMgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYmVuY2gpCisrCisraW5zdGFsbC1wdGVzdDoKKysJKGNkIHRlc3RzICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrX1BST0dSQU1TKQorZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IDE2MDRlNWUuLmQ4ZGI4ZDggMTAwNjQ0CistLS0gYS90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0xMDEsMyArMTAxLDYgQEAgYmVuY2g6IGJlbmNobWUgYmVuY2hyc2EgYmVuY2hoZiBiZW5jaGJjCisgCS4vYmVuY2hiYyBBRVMgMTI4CisgCS4vYmVuY2hiYyBCbG93ZmlzaCAxMjgKKyAJLi9iZW5jaGJjIEJsb3dmaXNoIDEyOAorKworK2NoZWNrX1BST0dSQU1TOgorKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkKGNoZWNrX1BST0dSQU1TKQorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZGlzYWJsZS1pY3UtY2hlY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L2Rpc2FibGUtaWN1LWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYjFmYTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L2Rpc2FibGUtaWN1LWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK1dlIGFyZSB1bmFibGUgdG8gcnVuIGNvZGUgYXQgY29uZmlndXJlIHRpbWUgaW4gYSBjcm9zcyBlbnZpcm9uZW1udCwgYnV0IGFzIHdlCitjb250cm9sIHRoZSBidWlsZCB3ZSBjYW4gYmUgZmFpcmx5IGNlcnRhaW4gdGhpcyBkZXBlbmRlbmN5IGlzIG1ldC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworSkwgMDUvMDcvMTAKK0luZGV4OiBiZWVjcnlwdC00LjIuMS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBiZWVjcnlwdC00LjIuMS5vcmlnL2NvbmZpZ3VyZS5hYwkyMDEwLTExLTI2IDE3OjEyOjI1LjAwMDAwMDAwMCArMDgwMAorKysrIGJlZWNyeXB0LTQuMi4xL2NvbmZpZ3VyZS5hYwkyMDEwLTExLTI2IDE3OjEyOjMwLjAwMDAwMDAwMCArMDgwMAorQEAgLTI5MiwzMiArMjkyLDYgQEAKKyAjIFByZWRlZmluZXMgYW5kIGNoZWNrcyBmb3IgQysrIEFQSSBzdXBwb3J0CisgQUhfVEVNUExBVEUoW0NQUEdMVUVdLFtEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBpbmNsdWRlIHRoZSBDKysgY29kZV0pCisgCistaWYgdGVzdCAiJGFjX3dpdGhfY3BsdXNwbHVzIiA9IHllczsgdGhlbgorLSAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgSUJNJ3MgSUNVIGxpYnJhcnkgdmVyc2lvbiA+PSAyLjhdKQorLSAgQUNfTEFOR19QVVNIKEMpCistICBBQ19SVU5fSUZFTFNFKFsKKy0gICAgQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHVuaWNvZGUvdXZlcnNpb24uaD5dXSxbWworLSAgICAgICNpZiBVX0lDVV9WRVJTSU9OX01BSk9SX05VTSA8IDIKKy0gICAgICBleGl0KDEpOworLSAgICAgICNlbGlmIFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNID09IDIKKy0gICAgICAjIGlmIFVfSUNVX1ZFUlNJT05fTUlOT1JfTlVNIDwgOAorLSAgICAgIGV4aXQoMSk7CistICAgICAgIyBlbHNlCistICAgICAgZXhpdCgwKTsKKy0gICAgICAjIGVuZGlmCistICAgICAgI2Vsc2UKKy0gICAgICBleGl0KDApOworLSAgICAgICNlbmRpZgorLSAgICBdXSldLFsKKy0gICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKy0gICAgXSxbCistICAgIEFDX01TR19SRVNVTFQoW25vXSkKKy0gICAgQUNfTVNHX1dBUk4oW2Rpc2FibGluZyBjcGx1c3BsdXNdKQorLSAgICBhY193aXRoX2NwbHVzcGx1cz1ubworLSAgICBdKQorLSAgQUNfTEFOR19QT1AoQykKKy1maQorLQorIEFNX0NPTkRJVElPTkFMKFtXSVRIX0NQTFVTUExVU10sW3Rlc3QgIiRhY193aXRoX2NwbHVzcGx1cyIgPSB5ZXNdKQorIAorIGlmIHRlc3QgIiRhY193aXRoX2NwbHVzcGx1cyIgPSB5ZXMgOyB0aGVuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L2ZpeC1mb3ItZ2NjLTQuNy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZml4LWZvci1nY2MtNC43LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNDRlMzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L2ZpeC1mb3ItZ2NjLTQuNy5wYXRjaApAQCAtMCwwICsxLDM5IEBACisKK2djYy00Ljcgc2VlbXMgdG8gYmUgc3RyaWN0ZXIgYWJvdXQgc29tZSB0aGluZ3MsIHNvIGZvbGxvdwordGhlIHN1Z2dlc3Rpb24gZnJvbSB0aGUgZXJyb3Ivbm90ZSBpbmZvcm1hdGlvbi4KKworICAgIC4uLy4uL3g4Nl82NC1saW51eC1saWJ0b29sIC0tdGFnPUNYWCAgIC0tbW9kZT1jb21waWxlIGcrKyAtREhBVkVfQ09ORklHX0ggLUkuIC1JLi4vLi4gCisgICAgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGNvbXBpbGU6ICBnKysgLURIQVZFX0NPTkZJR19IIC1JLiAtSS4uLy4uIC1JLi4vLi4vaW5jbHVkZSAtaXN5c3QKKyAgICBJbiBmaWxlIGluY2x1ZGVkIGZyb20gLi4vLi4vaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9IYXNodGFibGUuaDo0MjowLAorICAgICAgICAgICAgICAgICAgICAgZnJvbSAuLi8uLi9pbmNsdWRlL2JlZWNyeXB0L2MrKy91dGlsL1Byb3BlcnRpZXMuaDozNiwKKyAgICAgICAgICAgICAgICAgICAgIGZyb20gUHJvcGVydGllcy5jeHg6MjU6CisgICAgLi4vLi4vaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9BYnN0cmFjdFNldC5oOiBJbiBpbnN0YW50aWF0aW9uIG9mICdib29sIGJlZWNyeXB0Ojp1dGkKKyAgICBQcm9wZXJ0aWVzLmN4eDoyMjg6MTogICByZXF1aXJlZCBmcm9tIGhlcmUKKyAgICAuLi8uLi9pbmNsdWRlL2JlZWNyeXB0L2MrKy91dGlsL0Fic3RyYWN0U2V0Lmg6NTk6Mjc6IGVycm9yOiAnY29udGFpbnNBbGwnIHdhcyBub3QgZGVjbAorICAgIC4uLy4uL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvQWJzdHJhY3RTZXQuaDo1OToyNzogbm90ZTogZGVjbGFyYXRpb25zIGluIGRlcGVuZGVudCBiCisgICAgLi4vLi4vaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9BYnN0cmFjdFNldC5oOjU5OjI3OiBub3RlOiB1c2UgJ3RoaXMtPmNvbnRhaW5zQWxsJyBpbnMKKyAgICAuLi8uLi9pbmNsdWRlL2JlZWNyeXB0L2MrKy91dGlsL0Fic3RyYWN0U2V0Lmg6IEluIGluc3RhbnRpYXRpb24gb2YgJ2Jvb2wgYmVlY3J5cHQ6OnV0aQorICAgIFByb3BlcnRpZXMuY3h4OjIyODoxOiAgIHJlcXVpcmVkIGZyb20gaGVyZQorICAgIC4uLy4uL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvQWJzdHJhY3RTZXQuaDo1OToyNzogZXJyb3I6ICdjb250YWluc0FsbCcgd2FzIG5vdCBkZWNsCisgICAgLi4vLi4vaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9BYnN0cmFjdFNldC5oOjU5OjI3OiBub3RlOiBkZWNsYXJhdGlvbnMgaW4gZGVwZW5kZW50IGIKKyAgICAuLi8uLi9pbmNsdWRlL2JlZWNyeXB0L2MrKy91dGlsL0Fic3RyYWN0U2V0Lmg6NTk6Mjc6IG5vdGU6IHVzZSAndGhpcy0+Y29udGFpbnNBbGwnIGlucworICAgIAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCisKK0luZGV4OiBiZWVjcnlwdC00LjIuMS9pbmNsdWRlL2JlZWNyeXB0L2MrKy91dGlsL0Fic3RyYWN0U2V0LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBiZWVjcnlwdC00LjIuMS5vcmlnL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvQWJzdHJhY3RTZXQuaAorKysrIGJlZWNyeXB0LTQuMi4xL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvQWJzdHJhY3RTZXQuaAorQEAgLTU2LDcgKzU2LDcgQEAgbmFtZXNwYWNlIGJlZWNyeXB0IHsKKyAJCQkJCWlmIChjLT5zaXplKCkgIT0gc2l6ZSgpKQorIAkJCQkJCXJldHVybiBmYWxzZTsKKyAKKy0JCQkJCXJldHVybiBjb250YWluc0FsbCgqYyk7CisrCQkJCQlyZXR1cm4gdGhpcy0+Y29udGFpbnNBbGwoKmMpOworIAkJCQl9CisgCQkJCXJldHVybiBmYWxzZTsKKyAJCQl9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L2ZpeC1zZWN1cml0eS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZml4LXNlY3VyaXR5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYjBjMDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L2ZpeC1zZWN1cml0eS5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitGaXggdmlzaWJpbGl0eSBvZiB2YXJpb3VzIEMrKyBmdW5jdGlvbnMsIGluc3BpcmVkIGJ5IGEgc2ltaWxhciBwYXRjaCBpbiB0aGUgRmluaworcHJvamVjdDogCitodHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vZmluay1jb21taXRzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldC9tc2c3NTc0Mi5odG1sCisKK0pMIDA1LzA3LzEwIAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGJlZWNyeXB0LTQuMi4xL2luY2x1ZGUvYmVlY3J5cHQvYysrL2JlZXlvbmQvQmVlQ2VydGlmaWNhdGUuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJlZWNyeXB0LTQuMi4xLm9yaWcvaW5jbHVkZS9iZWVjcnlwdC9jKysvYmVleW9uZC9CZWVDZXJ0aWZpY2F0ZS5oCTIwMTAtMTEtMjYgMTc6MjI6NTcuMDAwMDAwMDAwICswODAwCisrKysgYmVlY3J5cHQtNC4yLjEvaW5jbHVkZS9iZWVjcnlwdC9jKysvYmVleW9uZC9CZWVDZXJ0aWZpY2F0ZS5oCTIwMTAtMTEtMjYgMTc6MjM6MDEuMDAwMDAwMDAwICswODAwCitAQCAtMTQ3LDEzICsxNDcsMTMgQEAKKyAJCQltdXRhYmxlIGJ5dGVhcnJheSogZW5jOworIAorIAkJCUJlZUNlcnRpZmljYXRlKCk7CistCQkJQmVlQ2VydGlmaWNhdGUoSW5wdXRTdHJlYW0mIGluKSB0aHJvdyAoSU9FeGNlcHRpb24pOworIAorIAkJCXZvaWQgZW5jb2RlVEJTKERhdGFPdXRwdXRTdHJlYW0mIG91dCkgY29uc3QgdGhyb3cgKElPRXhjZXB0aW9uKTsKKyAKKyAJCQlieXRlYXJyYXkqIGVuY29kZVRCUygpIGNvbnN0IHRocm93IChDZXJ0aWZpY2F0ZUVuY29kaW5nRXhjZXB0aW9uKTsKKyAKKyAJCXB1YmxpYzoKKysJCQlCZWVDZXJ0aWZpY2F0ZShJbnB1dFN0cmVhbSYgaW4pIHRocm93IChJT0V4Y2VwdGlvbik7CisgCQkJQmVlQ2VydGlmaWNhdGUoY29uc3QgQmVlQ2VydGlmaWNhdGUmKSB0aHJvdyAoQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24pOworIAkJCXZpcnR1YWwgfkJlZUNlcnRpZmljYXRlKCk7CisgCitJbmRleDogYmVlY3J5cHQtNC4yLjEvaW5jbHVkZS9iZWVjcnlwdC9jKysvc2VjdXJpdHkvU2VjdXJpdHkuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJlZWNyeXB0LTQuMi4xLm9yaWcvaW5jbHVkZS9iZWVjcnlwdC9jKysvc2VjdXJpdHkvU2VjdXJpdHkuaAkyMDEwLTExLTI2IDE3OjIwOjU1LjAwMDAwMDAwMCArMDgwMAorKysrIGJlZWNyeXB0LTQuMi4xL2luY2x1ZGUvYmVlY3J5cHQvYysrL3NlY3VyaXR5L1NlY3VyaXR5LmgJMjAxMC0xMS0yNiAxNzoyMTozNi4wMDAwMDAwMDAgKzA4MDAKK0BAIC02MSw3ICs2MSw2IEBACisgCQkJZnJpZW5kIGNsYXNzIFNlY3VyZVJhbmRvbTsKKyAJCQlmcmllbmQgY2xhc3MgU2lnbmF0dXJlOworIAorLQkJcHJpdmF0ZToKKyAJCQlzdHJ1Y3Qgc3BpCisgCQkJeworIAkJCQlPYmplY3QqIGNzcGk7CitAQCAtNzYsNiArNzUsNyBAQAorIAkJCXN0YXRpYyBzcGkqIGdldFNwaShjb25zdCBTdHJpbmcmIGFsZ28sIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgUHJvdmlkZXImKSB0aHJvdyAoTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uKTsKKyAJCQlzdGF0aWMgc3BpKiBnZXRGaXJzdFNwaShjb25zdCBTdHJpbmcmIHR5cGUpOworIAorKwkJcHJpdmF0ZToKKyAJCQlzdGF0aWMgY29uc3QgU3RyaW5nJiBnZXRLZXlTdG9yZURlZmF1bHQoKTsKKyAKKyAJCQlzdGF0aWMgYm9vbCBfaW5pdDsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVlMjk0ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCisKK2NkIHRlc3RzCitmb3IgaSBpbiBgbHNgOyBkbyAuLyRpOyBpZiBbICQ/IC1lcSAwIF07IHRoZW4gZWNobyAiUEFTUzogJGkiOyBcCisgICAgZWxzZSBlY2hvICJGQUlMOiAkaSI7IGZpOyBkb25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0XzQuMi4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdF80LjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTYyNmYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdF80LjIuMS5iYgpAQCAtMCwwICsxLDQ4IEBACisjIEJlZWNyeXB0IE9FIGJ1aWxkIGZpbGUKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgcGFja2FnZXMvQ09QWUlORykKKworU1VNTUFSWSA9ICJBIGdlbmVyYWwtcHVycG9zZSBjcnlwdG9ncmFwaHkgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvYmVlY3J5cHQiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2JlZWNyeXB0L2JlZWNyeXB0LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLWljdS1jaGVjay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtc2VjdXJpdHkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWZvci1nY2MtNC43LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9iZWVjcnlwdC1lbmFibGUtcHRlc3Qtc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtb3B0aW9uLWRldi1kc3AucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjg0NDFjMDE0MTcwODIzZjJkZmY5N2UzM2RmNTVhZjFlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI4NmYxZjU2MDgwZDFhNmIxZDAyNDAwM2E1ZmEyMTU4ZjRmZjgyY2FlMGM2ODI5ZDNjNDc2YTRiNTg5OGM1NWQiCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk4OTQzNzBhZmQ1ZGZlN2QwMmI4ZDE0MzE5ZTcyOWExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT1kY2YzYzgyNTY1OWU4MjUzOTY0NWRhNDFhNzkwODU4OSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL2JlZWNyeXB0L2JlZWNyeXB0Lmg7ZW5kbGluZT0yMDttZDU9NDdhOTNlZWY1MzlhYWMyMzdlZWY4NjI5N2E0ZDcxYzEiCisKK1BSID0gInIzIgorCitpbmhlcml0IGF1dG90b29scyBtdWx0aWxpYl9oZWFkZXIgcHRlc3QKK2FjcGF0aHM9IiIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJb2VfbXVsdGlsaWJfaGVhZGVyIGJlZWNyeXB0L2dudS5oCit9CisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtcHl0aG9uIC0tZW5hYmxlLXNoYXJlZCAtLWVuYWJsZS1zdGF0aWMgLS1kaXNhYmxlLW9wZW5tcCAtLXdpdGgtamF2YT1ubyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbY3BsdXNwbHVzXSA9ICItLXdpdGgtY3BsdXNwbHVzLC0td2l0aG91dC1jcGx1c3BsdXMsaWN1IgorCitGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9ICR7bGliZGlyfS8qLnNvLiogJHtsaWJkaXJ9LyR7QlBOfS8qLnNvLioiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS8ke0JQTn0vKi5zbyAke2xpYmRpcn0vJHtCUE59LyoubGEiCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS8ke0JQTn0vKi5hIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworCW1rZGlyICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzCisJY3AgLXIgJHtCfS90ZXN0cy8ubGlicy90ZXN0KiAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9iamFtLW5hdGl2ZV8xLjU4LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2JqYW0tbmF0aXZlXzEuNTguMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjY0NmQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9iamFtLW5hdGl2ZV8xLjU4LjAuYmIKQEAgLTAsMCArMSwxOCBAQAoraW5jbHVkZSBib29zdC0ke1BWfS5pbmMKKworU1VNTUFSWSA9ICJQb3J0YWJsZSBCb29zdC5KYW0gYnVpbGQgdG9vbCBmb3IgYm9vc3QiCitTRUNUSU9OID0gImRldmVsIgorCitpbmhlcml0IG5hdGl2ZQorCitTUkNfVVJJICs9ICJmaWxlOi8vYmphbS1uYXRpdmUtYnVpbGQtYmphbS5kZWJ1Zy5wYXRjaCIKKworZG9fY29tcGlsZSgpIHsKKyAgICAuL2Jvb3RzdHJhcC5zaCAtLXdpdGgtdG9vbHNldD1nY2MKK30KKworZG9faW5zdGFsbCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vCisgICAgIyBpbnN0YWxsIHVuc3RyaXBwZWQgdmVyc2lvbiBmb3IgYmphbQorICAgIGluc3RhbGwgLWMgLW0gNzU1IGJqYW0uZGVidWcgJHtEfSR7YmluZGlyfS9iamFtCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LTEuNTguMC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LTEuNTguMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ3ZDA5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QtMS41OC4wLmluYwpAQCAtMCwwICsxLDIyIEBACisjIFRoZSBCb29zdCB3ZWIgc2l0ZSBwcm92aWRlcyBmcmVlIHBlZXItcmV2aWV3ZWQgcG9ydGFibGUKKyMgQysrIHNvdXJjZSBsaWJyYXJpZXMuIFRoZSBlbXBoYXNpcyBpcyBvbiBsaWJyYXJpZXMgd2hpY2gKKyMgd29yayB3ZWxsIHdpdGggdGhlIEMrKyBTdGFuZGFyZCBMaWJyYXJ5LiBUaGUgbGlicmFyaWVzIGFyZQorIyBpbnRlbmRlZCB0byBiZSB3aWRlbHkgdXNlZnVsLCBhbmQgYXJlIGluIHJlZ3VsYXIgdXNlIGJ5CisjIHRob3VzYW5kcyBvZiBwcm9ncmFtbWVycyBhY3Jvc3MgYSBicm9hZCBzcGVjdHJ1bSBvZiBhcHBsaWNhdGlvbnMuCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmJvb3N0Lm9yZy8iCitMSUNFTlNFID0gIkJTTC0xLjAgJiBNSVQgJiBQeXRob24tMi4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRV8xXzAudHh0O21kNT1lNDIyNGNjYWVjYjE0ZDk0MmM3MWQzMWJlZjIwZDc4YyIKKworQk9PU1RfVkVSID0gIiR7QCJfIi5qb2luKGQuZ2V0VmFyKCJQViIsMSkuc3BsaXQoIi4iKSl9IgorQk9PU1RfTUFKID0gIiR7QCJfIi5qb2luKGQuZ2V0VmFyKCJQViIsMSkuc3BsaXQoIi4iKVswOjJdKX0iCitCT09TVF9QID0gImJvb3N0XyR7Qk9PU1RfVkVSfSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vYm9vc3QvJHtCT09TVF9QfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbWlwczEtZml4LWFkZGVkLWdjYy5qYW0td2FzLXBhc3NpbmctdGhlLW9wdGlvbnMtbTMyLS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLURvbi10LXBhc3MtbTMyLW02NC13aGVyZS1pdC1zLW5vdC1zdXBwb3J0ZWQucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjg4Mzk2NTBlNjFlOWMxYzBhODlmMzcxZGQ0NzU1NDYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmRmYzIwNGZjMzNlYzc5Yzk5YjlhNzQ5NDRjM2U1NGJkNzhiZTRmN2YxNWUyNjBjMGUyNzAwYTM2ZGM3ZDNlNSIKKworUyA9ICIke1dPUktESVJ9LyR7Qk9PU1RfUH0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyODhlODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LmluYwpAQCAtMCwwICsxLDE5MiBAQAorU1VNTUFSWSA9ICJGcmVlIHBlZXItcmV2aWV3ZWQgcG9ydGFibGUgQysrIHNvdXJjZSBsaWJyYXJpZXMiCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gImJqYW0tbmF0aXZlIHpsaWIgYnppcDIiCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCitCT09TVF9MSUJTID0gIlwKKwlhdG9taWMgXAorCWNocm9ubyBcCisJZGF0ZV90aW1lIFwKKwlmaWxlc3lzdGVtIFwKKwlncmFwaCBcCisJaW9zdHJlYW1zIFwKKwlsb2cgXAorCXByb2dyYW1fb3B0aW9ucyBcCisJcmFuZG9tIFwKKwlyZWdleCBcCisJc2VyaWFsaXphdGlvbiBcCisJc2lnbmFscyBcCisJc3lzdGVtIFwKKwl0ZXN0IFwKKwl0aHJlYWQgXAorCSIKKworIyBvcHRpb25hbCBib29zdC1weXRob24gbGlicmFyeQorUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbcHl0aG9uXSA9ICIsLHB5dGhvbiBweXRob24zIgorQk9PU1RfTElCUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncHl0aG9uJywgJ3B5dGhvbiBweXRob24zJywgJycsIGQpfSIKK2luaGVyaXQgcHl0aG9uLWRpcgorUFlUSE9OX1JPT1QgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfS8ke3ByZWZpeH0iCisKKyMgTWFrZSBhIHBhY2thZ2UgZm9yIGVhY2ggbGlicmFyeSwgcGx1cyAtZGV2CitQQUNLQUdFUyA9ICIke1BOfS1kYmcgJHtCT09TVF9QQUNLQUdFU30iCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIHBhY2thZ2VzID0gW10KKyAgICBleHRyYXMgPSBbXQorICAgIGZvciBsaWIgaW4gZC5nZXRWYXIoJ0JPT1NUX0xJQlMnLCBUcnVlKS5zcGxpdCggKToKKyAgICAgICAgIyBCSkFNIGRvZXMgbm90IGtub3cgJy0td2l0aC1weXRob24zJyAob25seSAtLXdpdGgtcHl0aG9uKQorICAgICAgICBpZiBsaWIgIT0gInB5dGhvbjMiOgorICAgICAgICAgICAgZXh0cmFzLmFwcGVuZCgiLS13aXRoLSVzIiAlIGxpYikKKyAgICAgICAgcGtnID0gImJvb3N0LSVzIiAlIGxpYi5yZXBsYWNlKCJfIiwgIi0iKQorICAgICAgICBwYWNrYWdlcy5hcHBlbmQocGtnKQorICAgICAgICBpZiBsaWIgPT0gInB5dGhvbiI6CisgICAgICAgICAgICAjIHNwZWNpYWw6IHB5dGhvbiouc28gbWF0Y2hlcyBweXRob24zLnNvICEhCisgICAgICAgICAgICBpZiBub3QgZC5nZXRWYXIoIkZJTEVTXyVzIiAlIHBrZywgVHJ1ZSk6CisgICAgICAgICAgICAgICAgICAgIGQuc2V0VmFyKCJGSUxFU18lcyIgJSBwa2csICIke2xpYmRpcn0vbGliYm9vc3RfJXMuc28uKiIgJSBsaWIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBub3QgZC5nZXRWYXIoIkZJTEVTXyVzIiAlIHBrZywgVHJ1ZSk6CisgICAgICAgICAgICAgICAgICAgIGQuc2V0VmFyKCJGSUxFU18lcyIgJSBwa2csICIke2xpYmRpcn0vbGliYm9vc3RfJXMqLnNvLioiICUgbGliKQorICAgIGQuc2V0VmFyKCJCT09TVF9QQUNLQUdFUyIsICIgIi5qb2luKHBhY2thZ2VzKSkKKyAgICBkLnNldFZhcigiQkpBTV9FWFRSQSIsICIgIi5qb2luKGV4dHJhcykpCit9CisKKyMgT3ZlcnJpZGUgdGhlIGNvbnRlbnRzIG9mIHNwZWNpZmljIHBhY2thZ2VzCitGSUxFU19ib29zdC1zZXJpYWxpemF0aW9uID0gIiR7bGliZGlyfS9saWJib29zdF9zZXJpYWxpemF0aW9uKi5zby4qIFwKKwkke2xpYmRpcn0vbGliYm9vc3Rfd3NlcmlhbGl6YXRpb24qLnNvLioiCitGSUxFU19ib29zdC10ZXN0ID0gIiR7bGliZGlyfS9saWJib29zdF9wcmdfZXhlY19tb25pdG9yKi5zby4qIFwKKwkke2xpYmRpcn0vbGliYm9vc3RfdW5pdF90ZXN0X2ZyYW1ld29yayouc28uKiIKKworIyAtZGV2IGxhc3QgdG8gcGljayB1cCB0aGUgcmVtYWluaW5nIHN0dWZmCitQQUNLQUdFUyArPSAiJHtQTn0tZGV2ICR7UE59LXN0YXRpY2RldiIKK0ZJTEVTXyR7UE59LWRldiA9ICIke2luY2x1ZGVkaXJ9ICR7bGliZGlyfS9saWJib29zdF8qLnNvIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWJib29zdF8qLmEiCisKKyMgImJvb3N0IiBpcyBhIG1ldGFwYWNrYWdlIHdoaWNoIHB1bGxzIGluIGFsbCBib29zdCBsaWJyYWJyaWVzCitQQUNLQUdFUyArPSAiJHtQTn0iCitSUkVDT01NRU5EU18ke1BOfSArPSAiJHtCT09TVF9QQUNLQUdFU30iCitSUkVDT01NRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworIyB0byBhdm9pZCBHTlVfSEFTSCBRQSBlcnJvcnMgYWRkZWQgTERGTEFHUyB0byBBUkNIOyBhIGxpdHRsZSBiaXQgZGlydHkgYnV0IGF0IGxlYXN0IGl0IHdvcmtzCitUQVJHRVRfQ0NfQVJDSCArPSAiJHtMREZMQUdTfSIKKworIyBPaCB5aXBwZWUsIGEgbmV3IGJ1aWxkIHN5c3RlbSwgaXQncyBzb29vIGNvb29vbCBJIGNvdWxkIGVhdCBteSBvd24KKyMgZm9vdC4gIGlubGluaW5nPW9uIGxldHMgdGhlIGNvbXBpbGVyIGNob29zZSwgSSB0aGluay4gIEF0IGxlYXN0IHRoaXMKKyMgc3R1ZmYgaXMgZG9jdW1lbnRlZC4uLgorIyBOT1RFOiBpZiB5b3UgbGVhdmUgPGRlYnVnLXN5bWJvbHM+b24gdGhlbiBpbiBhIGRlYnVnIGJ1aWxkIHRoZSBidWlsZCBzeXMKKyMgb2JqY29weSB3aWxsIGJlIGludm9rZWQsIGFuZCB0aGF0IHdvbid0IHdvcmsuICBCdWlsZGluZyBkZWJ1ZyBhcHBhcmVudGx5CisjIHJlcXVpcmVzIGhhY2tpbmcgZ2NjLXRvb2xzLmphbQorIworIyBTb21ldGltZXMgSSB3YWtlIHVwIHNjcmVhbWluZy4gIEZhbW91cyBmaWd1cmVzIGFyZSBnYXRoZXJlZCBpbiB0aGUgbmlnaHRtYXJlLAorIyBTdGV2ZSBCb3VybmUsIExhcnJ5IFdhbGwsIHRoZSB3aG9sZSBvZiB0aGUgQU5TSSBDIGNvbW1pdHRlZS4gIFRoZXkncmUganVzdAorIyBzdGFuZGluZyB0aGVyZSwgd2FpdGluZywgYnV0IHRoZSB0cnVlbHkgdGVycmlmeWluZyB0aGluZyBpcyB3aGF0IHRoZXkgY2FycnkKKyMgaW4gdGhlaXIgaGFuZHMuICBBdCBmaXJzdCBzaWdodCBlYWNoIHNlZW1zIHRvIGJlYXIgdGhlIHNhbWUgdGhpbmcsIGJ1dCBpdCBpcworIyBub3Qgc28gZm9yIHRoZSBmb3JtcyBpbiB0aGVpciBncmFzcCBhcmUgZXZlciBzbyBzbGlnaHRseSBkaWZmZXJlbnQgb25lIGZyb20KKyMgdGhlIG90aGVyLiAgRWFjaCBpcyB0d2lzdGVkIGluIHNvbWUgZ3JvdGVzcXVlIHdheSBmcm9tIHRoZSBvdGhlciB0byBtYWtlIGVhY2gKKyMgYW4gdW5zcGVha2FibGUgcGVydmVyc2lvbiBpbXBvc3NpYmxlIHRvIHBlcmNlaXZlIHdpdGhvdXQgdGhlIG9uc2V0IG9mIG1hZG5lc3MuCisjIFRydWUgaW5zYW5pdHkgYXdhaXRzIGFueW9uZSB3aG8gcGVyY2VpdmVzIGFsbCBvZiB0aGVzZSBob3Jyb3JzIHRvZ2V0aGVyLgorIworIyBRdW90YXRpb24gbWFya3MsIHRoZXJlIG1pZ2h0IGJlIGFuIGVhc2llciB3YXkgdG8gZG8gdGhpcywgYnV0IEkgY2FuJ3QgZmluZAorIyBpdC4gIFRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIHVzZXIuaHBwIGNvbmZpZ3VyYXRpb24gZmlsZSBtdXN0IHJlY2VpdmUgYQorIyBwcmUtcHJvY2Vzc29yIG1hY3JvIGRlZmluZWQgYXMgdGhlIGFwcHJvcHJpYXRlIHN0cmluZyAtIGNvbXBsZXRlIHdpdGggIidzCisjIGFyb3VuZCBpdC4gICg8PiBpcyBhIHBvc3NpYmlsaXR5IGhlcmUgYnV0IHRoZSBkYW5nZXIgdG8gdGhhdCBpcyB0aGF0IHRoZQorIyBmYWlsdXJlIGNhc2UgaW50ZXJwcmV0cyB0aGUgPCBhbmQgPiBhcyBzaGVsbCByZWRpcmVjdGlvbnMsIGNyZWF0aW5nCisjIHJhbmRvbSBmaWxlcyBpbiB0aGUgc291cmNlIHRyZWUuKQorIworI2JqYW06ICctREJPT1NUX1BMQVRGT1JNX0NPTkZJRz1cImNvbmZpZ1wiJworI2RvX2NvbXBpbGU6ICctc0dDQz0uLi4gJyInLURCT09TVF9QTEFURk9STV9DT05GSUc9XCJjb25maWdcIiciCitTUUQgPSAnIicKK0VRRCA9ICdcIicKKyNib29zdC5iYjogICAiLi4uICAnLXNHQ0M9Li4uICcke1NRRH0nLURCT09TVF9QTEFURk9STV9DT05GSUc9JHtFUUR9Y29uZmlnJHtFUUR9JyR7U1FEfSAuLi4iCitCSkFNX0NPTkYgPSAiJHtTUUR9Jy1EQk9PU1RfUExBVEZPUk1fQ09ORklHPSR7RVFEfWJvb3N0L2NvbmZpZy9wbGF0Zm9ybS8ke1RBUkdFVF9PU30uaHBwJHtFUUR9JyR7U1FEfSIKKworQkpBTV9UT09MUyAgID0gIi0taWdub3JlLXNpdGUtY29uZmlnIFwKKwkJJy1zVE9PTFM9Z2NjJyBcCisJCSctc0dDQz0ke0NDfSAnJHtCSkFNX0NPTkZ9IFwKKwkJJy1zR1hYPSR7Q1hYfSAnJHtCSkFNX0NPTkZ9IFwKKwkJJy1zR0NDX0lOQ0xVREVfRElSRUNUT1JZPSR7U1RBR0lOR19JTkNESVJ9JyBcCisJCSctc0dDQ19TVERMSUJfRElSRUNUT1JZPSR7U1RBR0lOR19MSUJESVJ9JyBcCisJCSctc0JVSUxEPXJlbGVhc2UgPG9wdGltaXphdGlvbj5zcGFjZSA8dGhyZWFkaW5nPm11bHRpIDxpbmxpbmluZz5vbiA8ZGVidWctc3ltYm9scz5vZmYnIFwKKwkJJy1zUFlUSE9OX1JPT1Q9JHtQWVRIT05fUk9PVH0nIFwKKwkJJy0tbGF5b3V0PXN5c3RlbScgXAorCQkiCisKKyMgdXNlIFBBUkFMTEVMX01BS0UgdG8gc3BlZWQgdXAgdGhlIGJ1aWxkLCBidXQgbGltaXQgaXQgYnkgLWogNjQsIGdyZWF0ZXIgcGFyYWxlbGlzbSBjYXVzZXMgYmphbSB0byBzZWdmYXVsdCBvciB0byBpZ25vcmUgLWoKKyMgaHR0cHM6Ly9zdm4uYm9vc3Qub3JnL3RyYWMvYm9vc3QvdGlja2V0Lzc2MzQKK2RlZiBnZXRfYm9vc3RfcGFyYWxsZWxfbWFrZShiYiwgZCk6CisgICAgcG0gPSBkLmdldFZhcignUEFSQUxMRUxfTUFLRScsIFRydWUpCisgICAgaWYgcG06CisgICAgICAgICMgbG9vayBmb3IgJy1qJyBhbmQgdGhyb3cgb3RoZXIgb3B0aW9ucyAoZS5nLiAnLWwnKSBhd2F5CisgICAgICAgICMgYmVjYXVzZSB0aGV5IG1pZ2h0IGhhdmUgZGlmZmVyZW50IG1lYW5pbmcgaW4gYmphbQorICAgICAgICBwbSA9IHBtLnNwbGl0KCkKKyAgICAgICAgd2hpbGUgcG06CisgICAgICAgICAgICB2ID0gTm9uZQorICAgICAgICAgICAgb3B0ID0gcG0ucG9wKDApCisgICAgICAgICAgICBpZiBvcHQgPT0gJy1qJzoKKyAgICAgICAgICAgICAgICB2ID0gcG0ucG9wKDApCisgICAgICAgICAgICBlbGlmIG9wdC5zdGFydHN3aXRoKCctaicpOgorICAgICAgICAgICAgICAgIHYgPSBvcHRbMjpdLnN0cmlwKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdiA9IE5vbmUKKworICAgICAgICAgICAgaWYgdjoKKyAgICAgICAgICAgICAgICB2ID0gbWluKDY0LCBpbnQodikpCisgICAgICAgICAgICAgICAgcmV0dXJuICctaicgKyBzdHIodikKKworICAgIHJldHVybiAiIgorCitCT09TVF9QQVJBTExFTF9NQUtFID0gIiR7QGdldF9ib29zdF9wYXJhbGxlbF9tYWtlKGJiLCBkKX0iCitCSkFNX09QVFMgICAgPSAnJHtCT09TVF9QQVJBTExFTF9NQUtFfSBcCisJCSR7QkpBTV9UT09MU30gXAorCQktc0JPT1NUX0JVSUxEX1VTRVJfQ09ORklHPSR7U30vdG9vbHMvYnVpbGQvZXhhbXBsZS91c2VyLWNvbmZpZy5qYW0gXAorCQktLWJ1aWxkZGlyPSR7U30vJHtUQVJHRVRfU1lTfSBcCisJCS0tZGlzYWJsZS1pY3UgXAorCQkke0JKQU1fRVhUUkF9JworCisjIE5hdGl2ZSBjb21waWxhdGlvbiBvZiBiemlwMiBpc24ndCB3b3JraW5nCitCSkFNX09QVFNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICcgLXNOT19CWklQMj0xJworCitkb19ib29zdGNvbmZpZygpIHsKKwljcCAtZiBib29zdC9jb25maWcvcGxhdGZvcm0vbGludXguaHBwIGJvb3N0L2NvbmZpZy9wbGF0Zm9ybS9saW51eC1nbnVlYWJpLmhwcAorCisJIyBEMjE5NDpGaXhpbmcgdGhlIGZhaWx1cmUgb2YgImVycm9yOiBkdXBsaWNhdGUgaW5pdGlhbGl6YXRpb24gb2YgZ2NjIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIiBkdXJpbmcgY29tcGlsYXRpb24uCisJc2VkIC1pICIvXnVzaW5nIGdjYyA6IDQuMy4xL2QiICR7U30vdG9vbHMvYnVpbGQvZXhhbXBsZS91c2VyLWNvbmZpZy5qYW0KKwlzZWQgLWkgIi9edXNpbmcgcHl0aG9uIDogJHtQWVRIT05fQkFTRVZFUlNJT059Ii9kICR7U30vdG9vbHMvYnVpbGQvZXhhbXBsZS91c2VyLWNvbmZpZy5qYW0KKwllY2hvICd1c2luZyBnY2MgOiA0LjMuMSA6ICR7Q1hYfSA6IDxjZmxhZ3M+IiR7Q0ZMQUdTfSIgPGN4eGZsYWdzPiIke0NYWEZMQUdTfSIgPGxpbmtmbGFncz4iJHtMREZMQUdTfSIgOycgPj4gJHtTfS90b29scy9idWlsZC9leGFtcGxlL3VzZXItY29uZmlnLmphbQorCWVjaG8gInVzaW5nIHB5dGhvbiA6ICR7UFlUSE9OX0JBU0VWRVJTSU9OfSA6IDogJHtTVEFHSU5HX0lOQ0RJUn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059IDsiID4+ICR7U30vdG9vbHMvYnVpbGQvZXhhbXBsZS91c2VyLWNvbmZpZy5qYW0KKwllY2hvICJ1c2luZyBweXRob24gOiAzLjQgOiA6ICR7U1RBR0lOR19JTkNESVJ9L3B5dGhvbjMuNG0gOyIgPj4gJHtTfS90b29scy9idWlsZC9leGFtcGxlL3VzZXItY29uZmlnLmphbQorCisJQ0M9IiR7QlVJTERfQ0N9IiBDRkxBR1M9IiR7QlVJTERfQ0ZMQUdTfSIgLi9ib290c3RyYXAuc2ggLS13aXRoLWJqYW09YmphbSAtLXdpdGgtdG9vbHNldD1nY2MgLS13aXRoLXB5dGhvbi1yb290PSR7UFlUSE9OX1JPT1R9CisJc2VkIC1pICcvXnVzaW5nIHB5dGhvbi9kJyBwcm9qZWN0LWNvbmZpZy5qYW0KK30KKworZG9fYm9vc3Rjb25maWdbZGlyc10gPSAiJHtTfSIKK2FkZHRhc2sgZG9fYm9vc3Rjb25maWcgYWZ0ZXIgZG9fcGF0Y2ggYmVmb3JlIGRvX2NvbmZpZ3VyZQorCitkb19jb21waWxlKCkgeworCXNldCAtZXgKKwliamFtICR7QkpBTV9PUFRTfSAtLXByZWZpeD0ke3ByZWZpeH0gXAorCQktLWV4ZWMtcHJlZml4PSR7ZXhlY19wcmVmaXh9IFwKKwkJLS1saWJkaXI9JHtsaWJkaXJ9IFwKKwkJLS1pbmNsdWRlZGlyPSR7aW5jbHVkZWRpcn0KK30KKworZG9faW5zdGFsbCgpIHsKKwlzZXQgLWV4CisJYmphbSAke0JKQU1fT1BUU30gXAorCQktLWxpYmRpcj0ke0R9JHtsaWJkaXJ9IFwKKwkJLS1pbmNsdWRlZGlyPSR7RH0ke2luY2x1ZGVkaXJ9IFwKKwkJaW5zdGFsbAorCWZvciBsaWIgaW4gJHtCT09TVF9MSUJTfTsgZG8KKwkJaWYgWyAtZSAke0R9JHtsaWJkaXJ9L2xpYmJvb3N0XyR7bGlifS5hIF07IHRoZW4KKwkJCWxuIC1zIGxpYmJvb3N0XyR7bGlifS5hICR7RH0ke2xpYmRpcn0vbGliYm9vc3RfJHtsaWJ9LW10LmEKKwkJZmkKKwkJaWYgWyAtZSAke0R9JHtsaWJkaXJ9L2xpYmJvb3N0XyR7bGlifS5zbyBdOyB0aGVuCisJCQlsbiAtcyBsaWJib29zdF8ke2xpYn0uc28gJHtEfSR7bGliZGlyfS9saWJib29zdF8ke2xpYn0tbXQuc28KKwkJZmkKKwlkb25lCisKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC9hcm0taW50cmluc2ljcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QvYXJtLWludHJpbnNpY3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU4NWM2OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QvYXJtLWludHJpbnNpY3MucGF0Y2gKQEAgLTAsMCArMSw1NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCis4LzE3LzIwMTAgLSByZWJhc2VkIHRvIDEuNDQgYnkgUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9ib29zdC9zbWFydF9wdHIvZGV0YWlsL2F0b21pY19jb3VudF9zeW5jLmhwcCBiL2Jvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvYXRvbWljX2NvdW50X3N5bmMuaHBwCitpbmRleCBiNjM1OWI1Li43OGIxY2MyIDEwMDY0NAorLS0tIGEvYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9hdG9taWNfY291bnRfc3luYy5ocHAKKysrKyBiL2Jvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvYXRvbWljX2NvdW50X3N5bmMuaHBwCitAQCAtMzMsMTcgKzMzLDQ2IEBAIHB1YmxpYzoKKyAKKyAgICAgbG9uZyBvcGVyYXRvcisrKCkKKyAgICAgeworKyNpZmRlZiBfX0FSTV9BUkNIXzdBX18KKysgICAgICAgaW50IHYxLCB0bXA7CisrICAgICAgIGFzbSB2b2xhdGlsZSAoIjE6ICAgICAgICAgICAgICAgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICJsZHJleCAgICUwLCAlMSAgICAgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICAiYWRkICAgICAlMCAsJTAsICMxIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgInN0cmV4ICAgJTIsICUwLCAlMSBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICJjbXAgICAgICUyLCAjMCAgICAgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICAiYm5lICAgICAxYiAgICAgICAgIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgOiAiPSZyIiAodjEpLCAiK1EiKHZhbHVlXyksICI9JnIiKHRtcCkKKysgICAgICAgICAgICAgICAgICAgICk7CisrI2Vsc2UKKyAgICAgICAgIHJldHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaCggJnZhbHVlXywgMSApOworKyNlbmRpZgorICAgICB9CisgCisgICAgIGxvbmcgb3BlcmF0b3ItLSgpCisgICAgIHsKKysjaWZkZWYgX19BUk1fQVJDSF83QV9fCisrICAgICAgIGludCB2MSwgdG1wOworKyAgICAgICBhc20gdm9sYXRpbGUgKCIxOiAgICAgICAgICAgICAgICAgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICAibGRyZXggICAlMCwgJTEgICAgIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgInN1YiAgICAgJTAgLCUwLCAjMSBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICJzdHJleCAgICUyLCAlMCwgJTEgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICAiY21wICAgICAlMiwgIzAgICAgIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgImJuZSAgICAgMWIgICAgICAgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgIDogIj0mciIgKHYxKSwgIitRIih2YWx1ZV8pLCAiPSZyIih0bXApCisrICAgICAgICAgICAgICAgICAgICApOworKyAgICAgICByZXR1cm4gdmFsdWVfOworKyNlbHNlCisgICAgICAgICByZXR1cm4gX19zeW5jX2FkZF9hbmRfZmV0Y2goICZ2YWx1ZV8sIC0xICk7CisrI2VuZGlmCisgICAgIH0KKyAKKyAgICAgb3BlcmF0b3IgbG9uZygpIGNvbnN0CisgICAgIHsKKysjaWYgX19BUk1fQVJDSF83QV9fCisrICAgICAgICByZXR1cm4gdmFsdWVfOworKyNlbHNlCisgICAgICAgICByZXR1cm4gX19zeW5jX2ZldGNoX2FuZF9hZGQoICZ2YWx1ZV8sIDAgKTsKKysjZW5kaWYKKyAgICAgfQorIAorIHByaXZhdGU6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0XzEuNTguMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3RfMS41OC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwOWQ1ZjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0XzEuNTguMC5iYgpAQCAtMCwwICsxLDYgQEAKK2luY2x1ZGUgYm9vc3QtJHtQVn0uaW5jCitpbmNsdWRlIGJvb3N0LmluYworCitTUkNfVVJJICs9ICJcCisgICAgZmlsZTovL2FybS1pbnRyaW5zaWNzLnBhdGNoIFwKKyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvZmlsZXMvMDAwMS1taXBzMS1maXgtYWRkZWQtZ2NjLmphbS13YXMtcGFzc2luZy10aGUtb3B0aW9ucy1tMzItLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9maWxlcy8wMDAxLW1pcHMxLWZpeC1hZGRlZC1nY2MuamFtLXdhcy1wYXNzaW5nLXRoZS1vcHRpb25zLW0zMi0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI5YjRjMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvZmlsZXMvMDAwMS1taXBzMS1maXgtYWRkZWQtZ2NjLmphbS13YXMtcGFzc2luZy10aGUtb3B0aW9ucy1tMzItLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gODE3YWVkMGQ3NTViZjhjMGJhNGVmNmE3N2Q0MTUzOGU1MGI1NzFmZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IGNsYXltb3JlIDxjYXJsb3NtZi5wdEBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI0IEFwciAyMDE1IDAyOjI4OjQ3ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMS8yXSBtaXBzMSBmaXggYWRkZWQgZ2NjLmphbSB3YXMgcGFzc2luZyB0aGUgb3B0aW9ucyAtbTMyIGFuZAorIC1tNjQgdG8gbWlwcyBjcm9zcy1jb21waWxlcnMsIHdoZW4gdGhvc2UgZG8gbm90IHVzZQorIHN1Y2ggb3B0aW9ucyBUaGlzIG1vZGlmaWNhdGlvbiBzb2x2ZXMgaXQgYnkgYWRkaW5nIG1pcHMKKyBhcyBhbiBleGNlcHRpb24KKworU2lnbmVkLW9mZi1ieTogQ2FybG9zIE0uIEZlcnJlaXJhIGNhcmxvc21mLnB0QGdtYWlsLmNvbQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworLS0tCisgdG9vbHMvYnVpbGQvc3JjL3Rvb2xzL2djYy5qYW0gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS90b29scy9idWlsZC9zcmMvdG9vbHMvZ2NjLmphbSBiL3Rvb2xzL2J1aWxkL3NyYy90b29scy9nY2MuamFtCitpbmRleCBkYjA0NTM0Li5lZmY5NWFlIDEwMDY0NAorLS0tIGEvdG9vbHMvYnVpbGQvc3JjL3Rvb2xzL2djYy5qYW0KKysrKyBiL3Rvb2xzL2J1aWxkL3NyYy90b29scy9nY2MuamFtCitAQCAtNDUxLDcgKzQ1MSw3IEBAIHJ1bGUgc2V0dXAtYWRkcmVzcy1tb2RlbCAoIHRhcmdldHMgKiA6IHNvdXJjZXMgKiA6IHByb3BlcnRpZXMgKiApCisgICAgICAgICBlbHNlCisgICAgICAgICB7CisgICAgICAgICAgICAgbG9jYWwgYXJjaCA9IFsgZmVhdHVyZS5nZXQtdmFsdWVzIGFyY2hpdGVjdHVyZSA6ICQocHJvcGVydGllcykgXSA7CistICAgICAgICAgICAgaWYgJChhcmNoKSAhPSBhcm0KKysgICAgICAgICAgICBpZiAkKGFyY2gpICE9IGFybSAmJiAkKGFyY2gpICE9IG1pcHMxCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICBpZiAkKG1vZGVsKSA9IDMyCisgICAgICAgICAgICAgICAgIHsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2ZpbGVzLzAwMDItRG9uLXQtcGFzcy1tMzItbTY0LXdoZXJlLWl0LXMtbm90LXN1cHBvcnRlZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvZmlsZXMvMDAwMi1Eb24tdC1wYXNzLW0zMi1tNjQtd2hlcmUtaXQtcy1ub3Qtc3VwcG9ydGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZjdlNTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2ZpbGVzLzAwMDItRG9uLXQtcGFzcy1tMzItbTY0LXdoZXJlLWl0LXMtbm90LXN1cHBvcnRlZC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tIGY4MjU2MzRhNTZiMTE5ZGZhOWQ3MTIxMTlhNjYyNzljYzc2MzU5NzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/Sj1DMz1CNnJnPTIwS3JhdXNlPz0gPGpvZXJnLmtyYXVzZUBlbWJlZGRlZC5yb2Nrcz4KK0RhdGU6IFNhdCwgMiBNYXkgMjAxNSAxNDoyNDowMiArMDIwMAorU3ViamVjdDogW1BBVENIIDIvMl0gRG9uJ3QgcGFzcyAtbTMyLy1tNjQgd2hlcmUgaXQncyBub3Qgc3VwcG9ydGVkLgorCitPbmx5IFBvd2VyUEMsIFNQQVJDLCBhbmQgeDg2IGRvIHN1cHBvcnQgdGhlIC1tMzIgYW5kIC1tNjQgY29tcGlsZXIgb3B0aW9ucyBbMV0uCisKK1JhdGhlciB0aGVuIGV4Y2x1ZGluZyBhbGwgYXJjaGl0ZWN0dXJlcyBub3Qgc3VwcG9ydGluZyB0aGVzZSBvcHRpb25zIGFzIGl0IGlzCitkb25lIGluIGNvbW1pdCBjMDYzNDM0MWQ5ZWUyYzAyZDNhNTVjOTFkYWZiOTg4YWZjMDY2YzQ5IFsyXSwgaW5jbHVkZSBhbGwKK2FyY2hpdGVjdHVyZXMgdGhhdCBkbyBzdXBwb3J0IHRoZW0uCisKK1RoaXMgd2lsbCBmaXggYnVpbGRpbmcgQm9vc3QgZm9yIHRoZSBTdXBlckggYXJjaGl0ZWN0dXJlIHdpdGggQnVpbGRyb290IFszXS4KKworWzFdIGh0dHBzOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9nY2MvT3B0aW9uLVN1bW1hcnkuaHRtbAorWzJdIGh0dHBzOi8vZ2l0aHViLmNvbS9ib29zdG9yZy9idWlsZC9jb21taXQvYzA2MzQzNDFkOWVlMmMwMmQzYTU1YzkxZGFmYjk4OGFmYzA2NmM0OQorWzNdIGh0dHA6Ly9hdXRvYnVpbGQuYnVpbGRyb290Lm5ldC9yZXN1bHRzL2NjZC9jY2Q1YzgzOTYzMDMyYmE0OWIxNjI3YjFkZmYzOWUzNGE5NDg2OTQzL2J1aWxkLWVuZC5sb2cKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKKy0tLQorIHRvb2xzL2J1aWxkL3NyYy90b29scy9nY2MuamFtIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvc3JjL3Rvb2xzL2djYy5qYW0gYi90b29scy9idWlsZC9zcmMvdG9vbHMvZ2NjLmphbQoraW5kZXggZWZmOTVhZS4uMmY2YWY5MyAxMDA2NDQKKy0tLSBhL3Rvb2xzL2J1aWxkL3NyYy90b29scy9nY2MuamFtCisrKysgYi90b29scy9idWlsZC9zcmMvdG9vbHMvZ2NjLmphbQorQEAgLTQ1MSw3ICs0NTEsNyBAQCBydWxlIHNldHVwLWFkZHJlc3MtbW9kZWwgKCB0YXJnZXRzICogOiBzb3VyY2VzICogOiBwcm9wZXJ0aWVzICogKQorICAgICAgICAgZWxzZQorICAgICAgICAgeworICAgICAgICAgICAgIGxvY2FsIGFyY2ggPSBbIGZlYXR1cmUuZ2V0LXZhbHVlcyBhcmNoaXRlY3R1cmUgOiAkKHByb3BlcnRpZXMpIF0gOworLSAgICAgICAgICAgIGlmICQoYXJjaCkgIT0gYXJtICYmICQoYXJjaCkgIT0gbWlwczEKKysgICAgICAgICAgICBpZiAkKGFyY2gpID0gcG93ZXIgfHwgJChhcmNoKSA9IHNwYXJjIHx8ICQoYXJjaCkgPSB4ODYKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIGlmICQobW9kZWwpID0gMzIKKyAgICAgICAgICAgICAgICAgeworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvZmlsZXMvYmphbS1uYXRpdmUtYnVpbGQtYmphbS5kZWJ1Zy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvZmlsZXMvYmphbS1uYXRpdmUtYnVpbGQtYmphbS5kZWJ1Zy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjhiN2VhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9maWxlcy9iamFtLW5hdGl2ZS1idWlsZC1iamFtLmRlYnVnLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0Zyb20gNjE5YWRhMzE0YWIyNmMwYzljYmZlNTcwMmNkOWMwY2FhOGY2NDE1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAzIEF1ZyAyMDE1IDE3OjEyOjMzICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGJqYW0tbmF0aXZlOiBidWlsZCBiamFtLmRlYnVnCisKK2JqYW0gaXMgc3RyaXBwZWQgYnkgZGVmYXVsdCwgdGhpcyBjYXVzZXMgUUEgd2FybmluZyB3aGlsZSBzdHJpcHBpbmcgaXQKK2Zyb20gZG9fcG9wdWxhdGVfc3lzcm9vdCgpOgorCisgIFdBUk5JTkc6IEZpbGUgJy4uLi90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9iaW4vYmphbScgXAorICAgIGZyb20gYmphbS1uYXRpdmUgd2FzIGFscmVhZHkgc3RyaXBwZWQsIFwKKyAgICB0aGlzIHdpbGwgcHJldmVudCBmdXR1cmUgZGVidWdnaW5nIQorCitUaGUgSkFNIHNjcmlwdHMgYWxsb3cgdG8gYnVpbGQgdW5zdHJpcHBlZCB2ZXJzaW9uIHdpdGggJy0tZGVidWcnLiBKdXN0CitidWlsZCBhbmQgaW5zdGFsbCB0aGUgYmphbS5kZWJ1ZyB0byBzdG9wIGJqYW0gZnJvbSBiZWluZyBzdHJpcHBlZCBpbgorY29tcGlsZSBzdGVwLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorLS0tCisgYm9vdHN0cmFwLnNoICAgICAgICAgICAgICAgICAgICB8IDEgKworIHRvb2xzL2J1aWxkL3NyYy9lbmdpbmUvYnVpbGQuc2ggfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2Jvb3RzdHJhcC5zaCBiL2Jvb3RzdHJhcC5zaAoraW5kZXggOThjZjg4Yi4uNTQ2OTBhYSAxMDA3NTUKKy0tLSBhL2Jvb3RzdHJhcC5zaAorKysrIGIvYm9vdHN0cmFwLnNoCitAQCAtMjI4LDYgKzIyOCw3IEBAIGlmIHRlc3QgIngkQkpBTSIgPSB4OyB0aGVuCisgICBlY2hvICJ0b29scy9idWlsZC9zcmMvZW5naW5lLyRhcmNoL2IyIgorICAgY3AgIiRCSkFNIiAuCisgICBjcCAiJG15X2Rpci90b29scy9idWlsZC9zcmMvZW5naW5lLyRhcmNoL2JqYW0iIC4KKysgIGNwICIkbXlfZGlyL3Rvb2xzL2J1aWxkL3NyYy9lbmdpbmUvJHthcmNofS5kZWJ1Zy9iamFtIiBiamFtLmRlYnVnCisgCisgZmkKKyAKK2RpZmYgLS1naXQgYS90b29scy9idWlsZC9zcmMvZW5naW5lL2J1aWxkLnNoIGIvdG9vbHMvYnVpbGQvc3JjL2VuZ2luZS9idWlsZC5zaAoraW5kZXggNmRiYzcwNi4uYzY5ZmRjNyAxMDA3NTUKKy0tLSBhL3Rvb2xzL2J1aWxkL3NyYy9lbmdpbmUvYnVpbGQuc2gKKysrKyBiL3Rvb2xzL2J1aWxkL3NyYy9lbmdpbmUvYnVpbGQuc2gKK0BAIC0zMTIsNSArMzEyLDUgQEAgaWYgdGVzdCAteCAiLi9ib290c3RyYXAvamFtMCIgOyB0aGVuCisgICAgIGlmIHRlc3QgIiR7QkpBTV9VUERBVEV9IiAhPSAidXBkYXRlIiA7IHRoZW4KKyAgICAgICAgIGVjaG9fcnVuIC4vYm9vdHN0cmFwL2phbTAgLWYgYnVpbGQuamFtIC0tdG9vbHNldD0kQk9PU1RfSkFNX1RPT0xTRVQgIi0tdG9vbHNldC1yb290PSRCT09TVF9KQU1fVE9PTFNFVF9ST09UIiAiJEAiIGNsZWFuCisgICAgIGZpCistICAgIGVjaG9fcnVuIC4vYm9vdHN0cmFwL2phbTAgLWYgYnVpbGQuamFtIC0tdG9vbHNldD0kQk9PU1RfSkFNX1RPT0xTRVQgIi0tdG9vbHNldC1yb290PSRCT09TVF9KQU1fVE9PTFNFVF9ST09UIiAiJEAiCisrICAgIGVjaG9fcnVuIC4vYm9vdHN0cmFwL2phbTAgLWYgYnVpbGQuamFtIC0tdG9vbHNldD0kQk9PU1RfSkFNX1RPT0xTRVQgIi0tdG9vbHNldC1yb290PSRCT09TVF9KQU1fVE9PTFNFVF9ST09UIiAiJEAiIC0tZGVidWcKKyBmaQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvMDAwMS11cGRhdGUtY2EtY2VydGlmaWNhdGVzLWRvbi10LXVzZS1EZWJpYW5pc21zLWluLXJ1bi1wLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzLzAwMDEtdXBkYXRlLWNhLWNlcnRpZmljYXRlcy1kb24tdC11c2UtRGViaWFuaXNtcy1pbi1ydW4tcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjRiMjg3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzLzAwMDEtdXBkYXRlLWNhLWNlcnRpZmljYXRlcy1kb24tdC11c2UtRGViaWFuaXNtcy1pbi1ydW4tcC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitjYS1jZXJ0aWZpY2F0ZXMgaXMgYSBwYWNrYWdlIGZyb20gRGViaWFuLCBidXQgc29tZSBob3N0IGRpc3Ryb3Mgc3VjaCBhcyBGZWRvcmEKK2hhdmUgYSBsZWFuZXIgcnVuLXBhcnRzIHByb3ZpZGVkIGJ5IGNyb24gd2hpY2ggZG9lc24ndCBzdXBwb3J0IC0tdmVyYm9zZSBvciB0aGUKKyAtLSBzZXBhcmF0b3IgYmV0d2VlbiBhcmd1bWVudHMgYW5kIHBhdGhzLgorCitUaGlzIHNvbHZlcyBlcnJvcnMgc3VjaCBhcworCit8IFJ1bm5pbmcgaG9va3MgaW4gWy4uLl0vcm9vdGZzL2V0Yy9jYS1jZXJ0aWZpY2F0ZXMvdXBkYXRlLmQuLi4KK3wgWy4uLl0vdXNyL3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlczogbGluZSAxOTQ6IE5vdDogY29tbWFuZCBub3QgZm91bmQKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorLS0tCisgc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzIHwgNCArLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAzIGRlbGV0aW9ucygtKQorCitJbmRleDogZ2l0L3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworKysrIGdpdC9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKK0BAIC0xOTEsOSArMTkxLDcgQEAgaWYgWyAtZCAiJEhPT0tTRElSIiBdCisgdGhlbgorIAorICAgZWNobyAiUnVubmluZyBob29rcyBpbiAkSE9PS1NESVIuLi4iCistICBWRVJCT1NFX0FSRz0KKy0gIFsgIiR2ZXJib3NlIiA9IDAgXSB8fCBWRVJCT1NFX0FSRz0iLS12ZXJib3NlIgorLSAgZXZhbCBydW4tcGFydHMgIiRWRVJCT1NFX0FSRyIgLS10ZXN0IC0tICIkSE9PS1NESVIiIHwgd2hpbGUgcmVhZCBob29rCisrICBldmFsIHJ1bi1wYXJ0cyAtLXRlc3QgLS0gIiRIT09LU0RJUiIgfCB3aGlsZSByZWFkIGhvb2sKKyAgIGRvCisgICAgICggY2F0ICIkQURERUQiCisgICAgICAgY2F0ICIkUkVNT1ZFRCIgKSB8ICIkaG9vayIgfHwgZWNobyAiRTogJGhvb2sgZXhpdGVkIHdpdGggY29kZSAkPy4iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvMDAwMS11cGRhdGUtY2EtY2VydGlmaWNhdGVzLXJlbW92ZS1jLXJlaGFzaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtcmVtb3ZlLWMtcmVoYXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMDI3MjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvMDAwMS11cGRhdGUtY2EtY2VydGlmaWNhdGVzLXJlbW92ZS1jLXJlaGFzaC5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworRnJvbSAxMTFlOTA1ZmU5MzFkYTFhMzgwMGFjY2ZjNjc1Y2MwMWM4ZWUwODBjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVWxmIFNhbXVlbHNzb24gPHVsZkBlbWFnaWkuY29tPgorRGF0ZTogVHVlLCAyOCBGZWIgMjAxMiAwNjo0Mjo1OCArMDEwMAorU3ViamVjdDogW1BBVENIXSB1cGRhdGUtY2EtY2VydGlmaWNhdGVzOiByZW1vdmUgYyByZWhhc2gKKworVXBkYXRlZCBlYXJsaWVyIHBhdGNoIHRvIGFwcGx5IGNsZWFuIG9uIDIwMTItMDItMTIKK1NpZ25lZC1vZmYtYnk6IFVsZiBTYW11ZWxzc29uIDx1bGZAZW1hZ2lpLmNvbT4KKy0tLQorIHNiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcyB8ICAgMjAgKysrKysrKysrKy0tLS0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzIGIvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCitpbmRleCA1Mzc1OTUwLi5jNTY3ZTNkIDEwMDc1NQorLS0tIGEvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCisrKysgYi9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKK0BAIC0xMzIsMTYgKzEzMiwxNiBAQCBybSAtZiAiJENFUlRCVU5ETEUiCisgQURERURfQ05UPSQod2MgLWwgPCAiJEFEREVEIikKKyBSRU1PVkVEX0NOVD0kKHdjIC1sIDwgIiRSRU1PVkVEIikKKworLWlmIFsgIiRBRERFRF9DTlQiIC1ndCAwIF0gfHwgWyAiJFJFTU9WRURfQ05UIiAtZ3QgMCBdCistdGhlbgorLSAgIyBvbmx5IHJ1biBpZiBzZXQgb2YgZmlsZXMgaGFzIGNoYW5nZWQKKy0gIGlmIFsgIiR2ZXJib3NlIiA9IDAgXQorLSAgdGhlbgorLSAgICBjX3JlaGFzaCAuID4gL2Rldi9udWxsCistICBlbHNlCistICAgIGNfcmVoYXNoIC4KKy0gIGZpCistZmkKKysjaWYgWyAiJEFEREVEX0NOVCIgLWd0IDAgXSB8fCBbICIkUkVNT1ZFRF9DTlQiIC1ndCAwIF0KKysjdGhlbgorKyMgICMgb25seSBydW4gaWYgc2V0IG9mIGZpbGVzIGhhcyBjaGFuZ2VkCisrIyAgaWYgWyAiJHZlcmJvc2UiID0gMCBdCisrIyAgdGhlbgorKyMgICAgY19yZWhhc2ggLiA+IC9kZXYvbnVsbAorKyMgIGVsc2UKKysjICAgIGNfcmVoYXNoIC4KKysjICBmaQorKyNmaQorCisgY2htb2QgMDY0NCAiJFRFTVBCVU5ETEUiCisgbXYgLWYgIiRURU1QQlVORExFIiAiJENFUlRCVU5ETEUiCistLQorMS43LjQuMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzLzAwMDItdXBkYXRlLWNhLWNlcnRpZmljYXRlcy11c2UtU1lTUk9PVC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAyLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtdXNlLVNZU1JPT1QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkyYjQwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAyLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtdXNlLVNZU1JPT1QucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0Zyb20gNzI0Y2IxNTNjYTBmNjA3ZmIzOGIzYThkYjNlYmIyNzQyNjAxY2Q4MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuZHJlYXMgT2JlcnJpdHRlciA8b2JpQG9wZW5kcmVhbWJveC5vcmc+CitEYXRlOiBUdWUsIDE5IE1hciAyMDEzIDE3OjE0OjMzICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSB1cGRhdGUtY2EtY2VydGlmaWNhdGVzOiB1c2UgJFNZU1JPT1QKKworU2lnbmVkLW9mZi1ieTogQW5kcmVhcyBPYmVycml0dGVyIDxvYmlAb3BlbmRyZWFtYm94Lm9yZz4KKy0tLQorIHNiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcyB8ICAgMTQgKysrKysrKy0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitJbmRleDogZ2l0L3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworKysrIGdpdC9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKK0BAIC0yNCwxMiArMjQsMTIgQEAKKyB2ZXJib3NlPTAKKyBmcmVzaD0wCisgZGVmYXVsdD0wCistQ0VSVFNDT05GPS9ldGMvY2EtY2VydGlmaWNhdGVzLmNvbmYKKy1DRVJUU0RJUj0vdXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcworLUxPQ0FMQ0VSVFNESVI9L3Vzci9sb2NhbC9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMKKytDRVJUU0NPTkY9JFNZU1JPT1QvZXRjL2NhLWNlcnRpZmljYXRlcy5jb25mCisrQ0VSVFNESVI9JFNZU1JPT1QvdXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcworK0xPQ0FMQ0VSVFNESVI9JFNZU1JPT1QvdXNyL2xvY2FsL3NoYXJlL2NhLWNlcnRpZmljYXRlcworIENFUlRCVU5ETEU9Y2EtY2VydGlmaWNhdGVzLmNydAorLUVUQ0NFUlRTRElSPS9ldGMvc3NsL2NlcnRzCistSE9PS1NESVI9L2V0Yy9jYS1jZXJ0aWZpY2F0ZXMvdXBkYXRlLmQKKytFVENDRVJUU0RJUj0kU1lTUk9PVC9ldGMvc3NsL2NlcnRzCisrSE9PS1NESVI9JFNZU1JPT1QvZXRjL2NhLWNlcnRpZmljYXRlcy91cGRhdGUuZAorIAorIHdoaWxlIFsgJCMgLWd0IDAgXTsKKyBkbworQEAgLTkyLDkgKzkyLDkgQEAgYWRkKCkgeworICAgUEVNPSIkRVRDQ0VSVFNESVIvJChiYXNlbmFtZSAiJENFUlQiIC5jcnQgfCBzZWQgLWUgJ3MvIC9fL2cnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzL1soKV0vPS9nJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy8sL18vZycpLnBlbSIKKy0gIGlmICEgdGVzdCAtZSAiJFBFTSIgfHwgWyAiJChyZWFkbGluayAiJFBFTSIpIiAhPSAiJENFUlQiIF0KKysgIGlmICEgdGVzdCAtZSAiJFBFTSIgfHwgWyAiJChyZWFkbGluayAiJFBFTSIpIiAhPSAiJHtDRVJUIyMkU1lTUk9PVH0iIF0KKyAgIHRoZW4KKy0gICAgbG4gLXNmICIkQ0VSVCIgIiRQRU0iCisrICAgIGxuIC1zZiAiJHtDRVJUIyMkU1lTUk9PVH0iICIkUEVNIgorICAgICBlY2hvICIrJFBFTSIgPj4gIiRBRERFRCIKKyAgIGZpCisgICAjIEFkZCB0cmFpbGluZyBuZXdsaW5lIHRvIGNlcnRpZmljYXRlLCBpZiBpdCBpcyBtaXNzaW5nICgjNjM1NTcwKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzL2RlZmF1bHQtc3lzcm9vdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy9kZWZhdWx0LXN5c3Jvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhiMDc5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy9kZWZhdWx0LXN5c3Jvb3QucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXM6IGZpbmQgU1lTUk9PVCByZWxhdGl2ZSB0byBpdHMgb3duIGxvY2F0aW9uCisKK1RoaXMgbWFrZXMgdGhlIHNjcmlwdCByZWxvY2F0YWJsZS4KKworSW5kZXg6IGdpdC9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKKysrKyBnaXQvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCitAQCAtNjYsNiArNjYsMzkgQEAgZG8KKyAgIHNoaWZ0CisgZG9uZQorIAorK2lmIFsgLXogIiRTWVNST09UIiBdOyB0aGVuCisrICBsb2NhbF93aGljaCAoKSB7CisrICAgIGlmIFsgJCMgLWx0IDEgXTsgdGhlbgorKyAgICAgIHJldHVybiAxCisrICAgIGZpCisrCisrICAgICgKKysgICAgICBJRlM9OgorKyAgICAgIGZvciBlbnRyeSBpbiAkUEFUSDsgZG8KKysgICAgICAgIGlmIFsgLXggIiRlbnRyeS8kMSIgXTsgdGhlbgorKyAgICAgICAgICBlY2hvICIkZW50cnkvJDEiCisrICAgICAgICAgIGV4aXQgMAorKyAgICAgICAgZmkKKysgICAgICBkb25lCisrICAgICAgZXhpdCAxCisrICAgICkKKysgIH0KKysKKysgIGNhc2UgIiQwIiBpbgorKyAgICAqLyopCisrICAgICAgc2JpbmRpcj0kKGNkICR7MCUvKn0gJiYgcHdkKQorKyAgICAgIDs7CisrICAgICopCisrICAgICAgc2JpbmRpcj0kKGNkICQoZGlybmFtZSAkKGxvY2FsX3doaWNoICQwKSkgJiYgcHdkKQorKyAgICAgIDs7CisrICBlc2FjCisrICBwcmVmaXg9JHtzYmluZGlyJS8qfQorKyAgU1lTUk9PVD0ke3ByZWZpeCUvKn0KKysgIGlmIFsgISAtZCAiJFNZU1JPT1QvdXNyL3NoYXJlL2NhLWNlcnRpZmljYXRlcyIgXTsgdGhlbgorKyAgICBTWVNST09UPQorKyAgZmkKKytmaQorKworIGlmIFsgISAtcyAiJENFUlRTQ09ORiIgXQorIHRoZW4KKyAgIGZyZXNoPTEKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy9zYmluZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzL3NiaW5kaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTExM2ZhOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy9zYmluZGlyLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitMZXQgdXMgYWx0ZXIgdGhlIGluc3RhbGwgZGVzdGluYXRpb24gb2YgdGhlIHNjcmlwdCB2aWEgU0JJTkRJUgorCistLS0gY2EtY2VydGlmaWNhdGVzLTIwMTMwMTE5Lm9yaWcvc2Jpbi9NYWtlZmlsZQorKysrIGNhLWNlcnRpZmljYXRlcy0yMDEzMDExOS9zYmluL01ha2VmaWxlCitAQCAtMyw5ICszLDEyIEBACisgIworICMKKworK1NCSU5ESVIgPSAvdXNyL3NiaW4KKysKKyBhbGw6CisKKyBjbGVhbjoKKworIGluc3RhbGw6CistCWluc3RhbGwgLW03NTUgdXBkYXRlLWNhLWNlcnRpZmljYXRlcyAkKERFU1RESVIpL3Vzci9zYmluLworKwlpbnN0YWxsIC1kICQoREVTVERJUikkKFNCSU5ESVIpCisrCWluc3RhbGwgLW03NTUgdXBkYXRlLWNhLWNlcnRpZmljYXRlcyAkKERFU1RESVIpJChTQklORElSKS8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlc18yMDE1MDQyNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlc18yMDE1MDQyNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTZlM2RmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzXzIwMTUwNDI2LmJiCkBAIC0wLDAgKzEsODAgQEAKK1NVTU1BUlkgPSAiQ29tbW9uIENBIGNlcnRpZmljYXRlcyIKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBpbmNsdWRlcyBQRU0gZmlsZXMgb2YgQ0EgY2VydGlmaWNhdGVzIHRvIGFsbG93IFwKK1NTTC1iYXNlZCBhcHBsaWNhdGlvbnMgdG8gY2hlY2sgZm9yIHRoZSBhdXRoZW50aWNpdHkgb2YgU1NMIGNvbm5lY3Rpb25zLiBcCitUaGlzIGRlcml2ZWQgZnJvbSBEZWJpYW4ncyBDQSBDZXJ0aWZpY2F0ZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3BhY2thZ2VzLmRlYmlhbi5vcmcvc2lkL2NhLWNlcnRpZmljYXRlcyIKK1NFQ1RJT04gPSAibWlzYyIKK0xJQ0VOU0UgPSAiR1BMLTIuMCsgJiBNUEwtMi4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZGViaWFuL2NvcHlyaWdodDttZDU9NDhkMmJhZjk3OTg2OTk5ZTc3NmI0M2M4ZGQ5ZTBjNWEiCisKKyMgVGhpcyBpcyBuZWVkZWQgdG8gZW5zdXJlIHdlIGNhbiBydW4gdGhlIHBvc3RpbnN0IGF0IGltYWdlIGNyZWF0aW9uIHRpbWUKK0RFUEVORFMgPSAiY2EtY2VydGlmaWNhdGVzLW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKKworIyB0YWc6IGRlYmlhbi8yMDE1MDQyNiArIDIKK1NSQ1JFViA9ICJkNDc5MGQyODMyYWFhYzkxNTJmNDUwZTA2NjYxNTExMDY3NTkyMjI3IgorCitTUkNfVVJJID0gImdpdDovL2Fub25zY20uZGViaWFuLm9yZy9jb2xsYWItbWFpbnQvY2EtY2VydGlmaWNhdGVzLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtcmVtb3ZlLWMtcmVoYXNoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItdXBkYXRlLWNhLWNlcnRpZmljYXRlcy11c2UtU1lTUk9PVC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtZG9uLXQtdXNlLURlYmlhbmlzbXMtaW4tcnVuLXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGVmYXVsdC1zeXNyb290LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NiaW5kaXIucGF0Y2giCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYWxsYXJjaAorCitFWFRSQV9PRU1BS0UgPSAiXAorICAgICdDRVJUU0RJUj0ke2RhdGFkaXJ9L2NhLWNlcnRpZmljYXRlcycgXAorICAgICdTQklORElSPSR7c2JpbmRpcn0nIFwKKyIKKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgIG9lX3J1bm1ha2UgY2xlYW4KK30KKworZG9faW5zdGFsbCAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9jYS1jZXJ0aWZpY2F0ZXMgXAorICAgICAgICAgICAgICAgJHtEfSR7c3lzY29uZmRpcn0vc3NsL2NlcnRzIFwKKyAgICAgICAgICAgICAgICR7RH0ke3N5c2NvbmZkaXJ9L2NhLWNlcnRpZmljYXRlcy91cGRhdGUuZAorICAgIG9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorCisgICAgaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjgKKyAgICBpbnN0YWxsIC1tIDA2NDQgc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzLjggJHtEfSR7bWFuZGlyfS9tYW44LworCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorICAgIHsKKyAgICAgICAgZWNobyAiIyBMaW5lcyBzdGFydGluZyB3aXRoICMgd2lsbCBiZSBpZ25vcmVkIgorICAgICAgICBlY2hvICIjIExpbmVzIHN0YXJ0aW5nIHdpdGggISB3aWxsIHJlbW92ZSBjZXJ0aWZpY2F0ZSBvbiBuZXh0IHVwZGF0ZSIKKyAgICAgICAgZWNobyAiIyIKKyAgICAgICAgZmluZCAke0R9JHtkYXRhZGlyfS9jYS1jZXJ0aWZpY2F0ZXMgLXR5cGUgZiAtbmFtZSAnKi5jcnQnIHwgXAorICAgICAgICAgICAgc2VkICdzLF4ke0R9JHtkYXRhZGlyfS9jYS1jZXJ0aWZpY2F0ZXMvLCwnCisgICAgfSA+JHtEfSR7c3lzY29uZmRpcn0vY2EtY2VydGlmaWNhdGVzLmNvbmYKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0ICgpIHsKKyAgICBzZWQgLWkgLWUgJ3MsL2V0Yy8sJHtzeXNjb25mZGlyfS8sJyBcCisgICAgICAgICAgIC1lICdzLC91c3Ivc2hhcmUvLCR7ZGF0YWRpcn0vLCcgXAorICAgICAgICAgICAtZSAncywvdXNyL2xvY2FsLCR7cHJlZml4fS9sb2NhbCwnIFwKKyAgICAgICAgJHtEfSR7c2JpbmRpcn0vdXBkYXRlLWNhLWNlcnRpZmljYXRlcyBcCisgICAgICAgICR7RH0ke21hbmRpcn0vbWFuOC91cGRhdGUtY2EtY2VydGlmaWNhdGVzLjgKK30KKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKyAgICBTWVNST09UPSIkRCIgdXBkYXRlLWNhLWNlcnRpZmljYXRlcworfQorCitDT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vY2EtY2VydGlmaWNhdGVzLmNvbmYiCisKKyMgUG9zdGluc3RzIGRvbid0IHNlZW0gdG8gYmUgcnVuIGZvciBuYXRpdmVzZGsgcGFja2FnZXMgd2hlbiBwb3B1bGF0aW5nIFNES3MuCitDT05GRklMRVNfJHtQTn1fYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgJHtzeXNjb25mZGlyfS9zc2wvY2VydHMvY2EtY2VydGlmaWNhdGVzLmNydCIKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayAoKSB7CisgICAgU1lTUk9PVD0iJHtEfSR7U0RLUEFUSE5BVElWRX0iIHVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKyAgICBTWVNST09UPSIke0R9JHtiYXNlX3ByZWZpeH0iICR7RH0ke3NiaW5kaXJ9L3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKK30KKworQkJDTEFTU0VYVEVORCArPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY29uc29sZWtpdC9jb25zb2xla2l0L2FkZC1wb2xraXQtY29uZmlndXJlLWFyZ3VtZW50LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jb25zb2xla2l0L2NvbnNvbGVraXQvYWRkLXBvbGtpdC1jb25maWd1cmUtYXJndW1lbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ4NzlkNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY29uc29sZWtpdC9jb25zb2xla2l0L2FkZC1wb2xraXQtY29uZmlndXJlLWFyZ3VtZW50LnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gQ29uc29sZUtpdC0wLjQuNi5vcmlnL2NvbmZpZ3VyZS5hYworKysrIENvbnNvbGVLaXQtMC40LjYvY29uZmlndXJlLmFjCitAQCAtNTYsMTAgKzU2LDI0IEBAIFBLR19DSEVDS19NT0RVTEVTKENPTlNPTEVfS0lULAorICAgZ3RocmVhZC0yLjAgPj0gJEdMSUJfUkVRVUlSRURfVkVSU0lPTgorICkKKworLVBLR19DSEVDS19NT0RVTEVTKFBPTEtJVCwKKy0gIHBvbGtpdC1nb2JqZWN0LTEgPj0gJFBPTEtJVF9SRVFVSVJFRF9WRVJTSU9OLAorLSAgaGF2ZV9wb2xraXQ9eWVzLAorLSAgaGF2ZV9wb2xraXQ9bm8pCisrQUNfQVJHX1dJVEgoW3BvbGtpdF0sCisrICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1wb2xraXRdLAorKyAgICBbc3VwcG9ydCBQb2xpY3lLaXQgQDw6QGRlZmF1bHQ9Y2hlY2tAOj5AXSldLAorKyAgW10sCisrICBbd2l0aF9wb2xraXQ9Y2hlY2tdKQorKworK0FTX0lGKFt0ZXN0ICJ4JHdpdGhfcG9sa2l0IiAhPSB4bm9dLAorKyAgW1BLR19DSEVDS19NT0RVTEVTKFBPTEtJVCwKKysgICAgIHBvbGtpdC1nb2JqZWN0LTEgPj0gJFBPTEtJVF9SRVFVSVJFRF9WRVJTSU9OLAorKyAgICAgaGF2ZV9wb2xraXQ9eWVzLAorKyAgICAgW2lmIHRlc3QgIngkd2l0aF9wb2xraXQiICE9IHhjaGVjazsgdGhlbgorKyAgICAgICBBQ19NU0dfRkFJTFVSRSgKKysgICAgICAgICBbLS13aXRoLXBvbGtpdCB3YXMgZ2l2ZW4sIGJ1dCB0ZXN0IGZvciBwb2xraXQgZmFpbGVkXSkKKysgICAgICBlbHNlCisrICAgICAgICBoYXZlX3BvbGtpdD1ubworKyAgICAgIGZpCisrICAgICBdKV0pCisrCisgaWYgdGVzdCAieCRoYXZlX3BvbGtpdCIgPSAieHllcyIgOyB0aGVuCisgICAgICAgIEFDX0RFRklORShIQVZFX1BPTEtJVCwgW10sIFtEZWZpbmUgaWYgd2UgaGF2ZSBwb2xraXRdKQorIGZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NvbnNvbGVraXQvY29uc29sZWtpdC9zZXBidWlsZGZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY29uc29sZWtpdC9jb25zb2xla2l0L3NlcGJ1aWxkZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZjliOWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NvbnNvbGVraXQvY29uc29sZWtpdC9zZXBidWlsZGZpeC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitGaXggYnVpbGRzIGluIHRoZSBjYXNlIG9mIHNlcHJhdGUgc291cmNlIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKworUlAgMjAxMy80LzE3CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogcGFtLWNrLWNvbm5lY3Rvci9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNvbnNvbGVraXQvcGFtLWNrLWNvbm5lY3Rvci5vcmlnL01ha2VmaWxlLmFtCTIwMTAtMDktMDMgMTM6NTQ6MzEuMDAwMDAwMDAwICswMDAwCisrKysgY29uc29sZWtpdC9wYW0tY2stY29ubmVjdG9yL01ha2VmaWxlLmFtCTIwMTMtMDQtMTcgMDk6MDY6NDkuMDkzNTI0OTE4ICswMDAwCitAQCAtNCw3ICs0LDcgQEAKKyAKKyBJTkNMVURFUyA9IAkJCQkJXAorIAkkKExJQkRCVVNfQ0ZMQUdTKQkJCVwKKy0JLUkkKHRvcF9idWlsZGRpcikvbGliY2stY29ubmVjdG9yCVwKKysJLUkkKHRvcF9zcmNkaXIpL2xpYmNrLWNvbm5lY3RvcglcCisgCSQoTlVMTCkKKyAKKyBwYW1saWJkaXIgPSAkKFBBTV9NT0RVTEVfRElSKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jb25zb2xla2l0L2NvbnNvbGVraXRfMC40LjYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NvbnNvbGVraXQvY29uc29sZWtpdF8wLjQuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmE4OTJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jb25zb2xla2l0L2NvbnNvbGVraXRfMC40LjYuYmIKQEAgLTAsMCArMSw1MSBAQAorU1VNTUFSWSA9ICJGcmFtZXdvcmsgZm9yIGRlZmluaW5nIGFuZCB0cmFja2luZyB1c2VycywgbG9naW4gc2Vzc2lvbnMsIGFuZCBzZWF0cyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvQ29uc29sZUtpdCIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9idWdsaXN0LmNnaT9xdWVyeV9mb3JtYXQ9c3BlY2lmaWMmcHJvZHVjdD1Db25zb2xlS2l0IgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9tYWluLmM7ZW5kbGluZT0yMTttZDU9MGE5OTRlMDk3Njk3ODAyMjAxNjMyNTVkOGY5MDcxYzMiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgZ2xpYi0yLjAtbmF0aXZlIGRidXMgZGJ1cy1nbGliIHZpcnR1YWwvbGlieDExIgorUkRFUEVORFNfJHtQTn0gKz0gImJhc2UtZmlsZXMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9Db25zb2xlS2l0L2Rpc3QvQ29uc29sZUtpdC0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vc2VwYnVpbGRmaXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWRkLXBvbGtpdC1jb25maWd1cmUtYXJndW1lbnQucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjExNzkyYjRkNjE2MjUzYTViZGVjOTE3NWY4Yjc2NzgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjQxZDE3ZTA2ZjgwMDU5NTg5ZmJlZWZlOTZhZDA3YmNjNTY0YzQ5ZTY1NTE2ZGExY2FmOTc1MTQ2NDc1NTY1YyIKKworUyA9ICIke1dPUktESVJ9L0NvbnNvbGVLaXQtJHtQVn0iCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnc3lzdGVtZCcsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUdbcGFtXSA9ICItLWVuYWJsZS1wYW0tbW9kdWxlIC0td2l0aC1wYW0tbW9kdWxlLWRpcj0ke2Jhc2VfbGliZGlyfS9zZWN1cml0eSwtLWRpc2FibGUtcGFtLW1vZHVsZSxsaWJwYW0iCitQQUNLQUdFQ09ORklHW3BvbGljeWtpdF0gPSAiLS13aXRoLXBvbGtpdCwtLXdpdGhvdXQtcG9sa2l0LHBvbGtpdCIKK1BBQ0tBR0VDT05GSUdbc3lzdGVtZF0gPSAiLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vLC0td2l0aC1zeXN0ZW1kc3lzdGVtdW5pdGRpcj0iCisKK0ZJTEVTXyR7UE59ICs9ICIke2xvY2Fsc3RhdGVkaXJ9L2xvZy9Db25zb2xlS2l0ICR7ZXhlY19wcmVmaXh9L2xpYi9Db25zb2xlS2l0IFwKKyAgICAgICAgICAgICAgICAke2xpYmRpcn0vQ29uc29sZUtpdCAgJHtzeXN0ZW1kX3VuaXRkaXJ9ICR7YmFzZV9saWJkaXJ9IFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMSAke2RhdGFkaXJ9L1BvbGljeUtpdCAke2RhdGFkaXJ9L3BvbGtpdCoiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5Ly5kZWJ1ZyIKKworUEFDS0FHRVMgPSsgInBhbS1wbHVnaW4tY2stY29ubmVjdG9yIgorRklMRVNfcGFtLXBsdWdpbi1jay1jb25uZWN0b3IgKz0gIiR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5Lyouc28iCitSREVQRU5EU19wYW0tcGx1Z2luLWNrLWNvbm5lY3RvciArPSAiJHtQTn0iCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZAorCQllY2hvICJkICR7bG9jYWxzdGF0ZWRpcn0vbG9nL0NvbnNvbGVLaXQgLSAtIC0gLSIgXAorCQkJPiAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kL2NvbnNvbGVraXQuY29uZgorCWZpCisKKwkjIFJlbW92ZSAvdmFyL3J1biBmcm9tIHBhY2thZ2UgYXMgY29uc29sZS1raXQtZGFlbW9uIHdpbGwgcG9wdWxhdGUgaXQgb24gc3RhcnR1cAorCXJtIC1mciAiJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuIgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vY3JlYXRlcmVwby1kYnBhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9jcmVhdGVyZXBvLWRicGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mjc1NTk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vY3JlYXRlcmVwby1kYnBhdGgucGF0Y2gKQEAgLTAsMCArMSw2MSBAQAorY3JlYXRlcmVwbzogSW1wbGVtZW50IC0tZGJwYXRoIGNvbW1hbmQgbGluZSBvcHRpb24KKworLS1kYnBhdGggb3B0aW9uIGFsbG93cyB0byBzcGVjaWZ5IHBhdGggdG8gdGhlIGRpcmVjdG9yeQord2l0aCBycG0gZGF0YWJhc2UuIEJ5IGRlZmF1bHQgY3JlYXRlcmVwbyB1c2VzIG9yIGNyZWF0ZXMKK3JwbSBkYXRhYmFzZSBpbiAvdmFyL2xpYi9ycG0vCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBFZCBCYXJ0b3NoIDxlZC5iYXJ0b3NoQGxpbnV4LmludGVsLmNvbT4KKworLS0tIGNyZWF0ZXJlcG8tMC40LjExLm9yaWcvZ2VucGtnbWV0YWRhdGEucHkgMjAxNS0wMy0zMCAyMjoxODoxOS45MDQwMDAwMDAgKzAzMDAKKysrKyBjcmVhdGVyZXBvLTAuNC4xMS9nZW5wa2dtZXRhZGF0YS5weSAyMDE1LTAzLTMwIDIyOjI4OjQ5LjIwODAwMDAwMCArMDMwMAorQEAgLTY1LDYgKzY1LDcgQEAKKyAgICAgIC1wLCAtLXByZXR0eSA9IG91dHB1dCB4bWwgZmlsZXMgaW4gcHJldHR5IGZvcm1hdC4KKyAgICAgIC0tdXBkYXRlID0gdXBkYXRlIGV4aXN0aW5nIG1ldGFkYXRhIChpZiBwcmVzZW50KQorICAgICAgLWQsIC0tZGF0YWJhc2UgPSBnZW5lcmF0ZSB0aGUgc3FsaXRlIGRhdGFiYXNlcy4KKysgICAgIC0tZGJwYXRoIDxkaXI+ID0gc3BlY2lmeSBwYXRoIHRvIHJwbSBkYiBkaXJlY3RvcnkuCisgICAgICIiIikKKyAKKyAgICAgc3lzLmV4aXQocmV0dmFsKQorQEAgLTcyLDEwICs3MywxMyBAQAorIGNsYXNzIE1ldGFEYXRhR2VuZXJhdG9yOgorICAgICBkZWYgX19pbml0X18oc2VsZiwgY21kcyk6CisgICAgICAgICBzZWxmLmNtZHMgPSBjbWRzCistICAgICAgICBzZWxmLnRzID0gcnBtLlRyYW5zYWN0aW9uU2V0KCkKKyAgICAgICAgIHNlbGYucGtnY291bnQgPSAwCisgICAgICAgICBzZWxmLmZpbGVzID0gW10KKyAKKysgICAgICAgIGlmIHNlbGYuY21kc1snZGJwYXRoJ106CisrICAgICAgICAgICAgcnBtLmFkZE1hY3JvKCJfZGJwYXRoIiwgc2VsZi5jbWRzWydkYnBhdGgnXSkKKysgICAgICAgIHNlbGYudHMgPSBycG0uVHJhbnNhY3Rpb25TZXQoKQorKworICAgICBkZWYgX29zX3BhdGhfd2FsayhzZWxmLCB0b3AsIGZ1bmMsIGFyZyk6CisgICAgICAgICAiIiJEaXJlY3RvcnkgdHJlZSB3YWxrIHdpdGggY2FsbGJhY2sgZnVuY3Rpb24uCisgICAgICAgICAgY29weSBvZiBvcy5wYXRoLndhbGssIGZpeGVzIHRoZSBsaW5rL3N0YXRpbmcgcHJvYmxlbQorQEAgLTQzNSw2ICs0MzksNyBAQAorICAgICBjbWRzWydkaXItcGF0dGVybi1tYXRjaCddID0gWycuKmJpblwvLionLCAnXlwvZXRjXC8uKiddCisgICAgIGNtZHNbJ3NraXAtc3ltbGlua3MnXSA9IEZhbHNlCisgICAgIGNtZHNbJ3BrZ2xpc3QnXSA9IFtdCisrICAgIGNtZHNbJ2RicGF0aCddID0gTm9uZQorIAorICAgICB0cnk6CisgICAgICAgICBnb3B0cywgYXJnc2xlZnQgPSBnZXRvcHQuZ2V0b3B0KGFyZ3MsICdwaHFWdm5kZzpzOng6dTpjOm86Q1NpOicsIFsnaGVscCcsICdleGNsdWRlPScsCitAQCAtNDQyLDcgKzQ0Nyw3IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Jhc2V1cmw9JywgJ2dyb3VwZmlsZT0nLCAnY2hlY2tzdW09JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmVyc2lvbicsICdwcmV0dHknLCAnc3BsaXQnLCAnb3V0cHV0ZGlyPScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vZXBvY2gnLCAnY2hlY2t0cycsICdkYXRhYmFzZScsICd1cGRhdGUnLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdza2lwLXN5bWxpbmtzJywgJ3BrZ2xpc3Q9J10pCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NraXAtc3ltbGlua3MnLCAncGtnbGlzdD0nLCAnZGJwYXRoPSddKQorICAgICBleGNlcHQgZ2V0b3B0LmVycm9yLCBlOgorICAgICAgICAgZXJyb3JwcmludChfKCdPcHRpb25zIEVycm9yOiAlcy4nKSAlIGUpCisgICAgICAgICB1c2FnZSgpCitAQCAtNTE2LDYgKzUyMSw4IEBACisgICAgICAgICAgICAgICAgIGNtZHNbJ3NraXAtc3ltbGlua3MnXSA9IFRydWUKKyAgICAgICAgICAgICBlbGlmIGFyZyBpbiBbJy1pJywgJy0tcGtnbGlzdCddOgorICAgICAgICAgICAgICAgICBjbWRzWydwa2dsaXN0J10gPSBhCisrICAgICAgICAgICAgZWxpZiBhcmcgPT0gJy0tZGJwYXRoJzoKKysgICAgICAgICAgICAgICAgY21kc1snZGJwYXRoJ10gPSBvcy5wYXRoLnJlYWxwYXRoKGEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgICBlcnJvcnByaW50KF8oJ09wdGlvbnMgRXJyb3I6ICVzJykgJSBlKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vY3JlYXRlcmVwby1ycG01NDkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9jcmVhdGVyZXBvLXJwbTU0OS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzcyMDBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vY3JlYXRlcmVwby1ycG01NDkucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorZHVtcE1ldGFkYXRhLnB5OiBGaXggZm9yIFJQTTUgLSA1LjQuOSBpbnRlZ3JhdGlvbgorCitSUE01IG5vIGxvbmdlciBoYXMgYSBzd2l0Y2ggdG8gZGlzYWJsZSBzaWduYXR1cmUgdmFsaWRhdGlvbi4gIChEdWUgdG8gc2VjdXJpdHkKK3ZhbGlkYXRpb24gY29uY2VybnMuKQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXQorICBjcmVhdGVyZXBvIGRvZXMgbm90IHN1cHBvcnQgUlBNNSB1cHN0cmVhbQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLXUgY3JlYXRlcmVwby0wLjQuMTEub3JpZy9kdW1wTWV0YWRhdGEucHkgY3JlYXRlcmVwby0wLjQuMTEvZHVtcE1ldGFkYXRhLnB5CistLS0gY3JlYXRlcmVwby0wLjQuMTEub3JpZy9kdW1wTWV0YWRhdGEucHkJMjAxMi0wNi0wNSAxMDoxMjo1NS42ODc5NjQyMjIgLTA1MDAKKysrKyBjcmVhdGVyZXBvLTAuNC4xMS9kdW1wTWV0YWRhdGEucHkJMjAxMi0wNi0wNSAxMDo0MDowOC4xNTQwNjA2MDAgLTA1MDAKK0BAIC05Miw3ICs5Miw3IEBACisgICAgICAgICAgICAgZmRubyA9IHBhY2thZ2UgIyBsZXQncyBhc3N1bWUgdGhpcyBpcyBhbiBmZG5vIGFuZCBnbyB3aXRoIGl0IDopCisgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgcmFpc2UgTURFcnJvciwgIkVycm9yIG9wZW5pbmcgZmlsZSIKKy0gICAgdHMuc2V0VlNGbGFncygocnBtLl9SUE1WU0ZfTk9TSUdOQVRVUkVTfHJwbS5SUE1WU0ZfTk9NRDV8cnBtLlJQTVZTRl9ORUVEUEFZTE9BRCkpCisrICAgIHRzLnNldFZTRmxhZ3MoKHJwbS5SUE1WU0ZfTk9NRDV8cnBtLlJQTVZTRl9ORUVEUEFZTE9BRCkpCisgICAgIHRyeToKKyAgICAgICAgIGhkciA9IHRzLmhkckZyb21GZG5vKGZkbm8pCisgICAgIGV4Y2VwdCBycG0uZXJyb3I6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9kdW1wTWV0YWRhdGEtZGlzYWJsZS1zaWduYXR1cmUtdmFsaWRhdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL2R1bXBNZXRhZGF0YS1kaXNhYmxlLXNpZ25hdHVyZS12YWxpZGF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNTUzMWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9kdW1wTWV0YWRhdGEtZGlzYWJsZS1zaWduYXR1cmUtdmFsaWRhdGlvbi5wYXRjaApAQCAtMCwwICsxLDMxIEBACitkdW1wTWV0YWRhdGE6IGRpc2FibGUgc2lnbmF0dXJlIHZhbGlkYXRpb24KKworTWFrZXMgaXQgcG9zc2libGUgdG8gd29yayBvbiBSUE0gcmVwb3NpdG9yaWVzIHRoYXQgY29udGFpbiBzaWduZWQgcGFja2FnZXMKK3dpdGhvdXQgdGhlIG5lZWQgb2YgaW1wb3J0aW5nIHRoZSBwdWJsaWMgcGFydCBvZiB0aGUgc2lnbmluZyBrZXkgaW50byB0aGUgUlBNCitkYXRhYmFzZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmt1cyBMZWh0b25lbiA8bWFya3VzLmxlaHRvbmVuQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIGR1bXBNZXRhZGF0YS5weSB8IDQgKysrLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2R1bXBNZXRhZGF0YS5weSBiL2R1bXBNZXRhZGF0YS5weQoraW5kZXggZTQwZThhYy4uY2E2YTgyZCAxMDA2NDQKKy0tLSBhL2R1bXBNZXRhZGF0YS5weQorKysrIGIvZHVtcE1ldGFkYXRhLnB5CitAQCAtOTIsNyArOTIsOSBAQCBkZWYgcmV0dXJuSGRyKHRzLCBwYWNrYWdlKToKKyAgICAgICAgICAgICBmZG5vID0gcGFja2FnZSAjIGxldCdzIGFzc3VtZSB0aGlzIGlzIGFuIGZkbm8gYW5kIGdvIHdpdGggaXQgOikKKyAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICByYWlzZSBNREVycm9yLCAiRXJyb3Igb3BlbmluZyBmaWxlIgorLSAgICB0cy5zZXRWU0ZsYWdzKChycG0uUlBNVlNGX05PTUQ1fHJwbS5SUE1WU0ZfTkVFRFBBWUxPQUQpKQorKyAgICB0cy5zZXRWU0ZsYWdzKChycG0uUlBNVlNGX05PTUQ1fHJwbS5SUE1WU0ZfTkVFRFBBWUxPQUR8CisrICAgICAgICAgICAgICAgICAgIHJwbS5SUE1WU0ZfTk9EU0F8cnBtLlJQTVZTRl9OT1JTQXwKKysgICAgICAgICAgICAgICAgICAgcnBtLlJQTVZTRl9OT0RTQUhFQURFUnxycG0uUlBNVlNGX05PUlNBSEVBREVSKSkKKyAgICAgdHJ5OgorICAgICAgICAgaGRyID0gdHMuaGRyRnJvbUZkbm8oZmRubykKKyAgICAgZXhjZXB0IHJwbS5lcnJvcjoKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vZml4LW5hdGl2ZS1pbnN0YWxsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vZml4LW5hdGl2ZS1pbnN0YWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MjAyYTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9maXgtbmF0aXZlLWluc3RhbGwucGF0Y2gKQEAgLTAsMCArMSwxNjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworRGF0ZTogSmFuIDMxLCAyMDExCisKK1RoZXJlIGFyZSB0d28gZml4ZXM6CisgIDEuIC1uYXRpdmUgbmVlZHMgdG8gY3VzdG9taXplIHByZWZpeAorICAyLiBuZWVkcyB0byBjaGFuZ2UgcHl0aG9uIHJlZmVyZW5jZSBpbiBiaW5hcmllcworCitTaWduZWQtb2ZmLWJ5OiBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IGIyZDFhMzIuLjNjMzYzOWYgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0zLDIyICszLDIyIEBAIFZFUlNJT04gPSAwLjQuMTEKKyBTSEVMTCA9IC9iaW4vc2gKKyB0b3Bfc3JjZGlyID0gLgorIHNyY2RpciA9IC4KKy1wcmVmaXggPSAvdXNyCistZXhlY19wcmVmaXggPSAke3ByZWZpeH0KKy0KKy1iaW5kaXIgPSAke2V4ZWNfcHJlZml4fS9iaW4KKy1zYmluZGlyID0gJHtleGVjX3ByZWZpeH0vc2JpbgorLWxpYmV4ZWNkaXIgPSAke2V4ZWNfcHJlZml4fS9saWJleGVjCistZGF0YWRpciA9ICR7cHJlZml4fS9zaGFyZQorLXN5c2NvbmZkaXIgPSAke3ByZWZpeH0vZXRjCistc2hhcmVkc3RhdGVkaXIgPSAke3ByZWZpeH0vY29tCistbG9jYWxzdGF0ZWRpciA9ICR7cHJlZml4fS92YXIKKy1saWJkaXIgPSAke2V4ZWNfcHJlZml4fS9saWIKKy1pbmZvZGlyID0gJHtwcmVmaXh9L2luZm8KKytwcmVmaXggPz0gL3VzcgorK2V4ZWNfcHJlZml4ID89ICR7cHJlZml4fQorKworK2JpbmRpciA/PSAke2V4ZWNfcHJlZml4fS9iaW4KKytzYmluZGlyID89ICR7ZXhlY19wcmVmaXh9L3NiaW4KKytsaWJleGVjZGlyID89ICR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMKKytkYXRhZGlyID89ICR7cHJlZml4fS9zaGFyZQorK3N5c2NvbmZkaXIgPz0gJHtwcmVmaXh9L2V0YworK3NoYXJlZHN0YXRlZGlyID89ICR7cHJlZml4fS9jb20KKytsb2NhbHN0YXRlZGlyID89ICR7cHJlZml4fS92YXIKKytsaWJkaXIgPz0gJHtleGVjX3ByZWZpeH0vbGliCisraW5mb2RpciA/PSAke3ByZWZpeH0vaW5mbworIGRvY2RpciA9IAorLWluY2x1ZGVkaXIgPSAke3ByZWZpeH0vaW5jbHVkZQorK2luY2x1ZGVkaXIgPz0gJHtwcmVmaXh9L2luY2x1ZGUKKyBvbGRpbmNsdWRlZGlyID0gL3Vzci9pbmNsdWRlCistbWFuZGlyID0gJHtwcmVmaXh9L3NoYXJlL21hbgorK21hbmRpciA/PSAke3ByZWZpeH0vc2hhcmUvbWFuCisgCisgcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvJChQQUNLQUdFKQorIHBrZ2xpYmRpciA9ICQobGliZGlyKS8kKFBBQ0tBR0UpCitkaWZmIC0tZ2l0IGEvYmluL01ha2VmaWxlIGIvYmluL01ha2VmaWxlCitpbmRleCA1MmMxZjUwLi5lMzA2MTBlIDEwMDY0NAorLS0tIGEvYmluL01ha2VmaWxlCisrKysgYi9iaW4vTWFrZWZpbGUKK0BAIC0xLDIyICsxLDIyIEBACisgU0hFTEwgPSAvYmluL3NoCisgdG9wX3NyY2RpciA9IC4uCisgc3JjZGlyID0gLi4vYmluCistcHJlZml4ID0gL3VzcgorLWV4ZWNfcHJlZml4ID0gJHtwcmVmaXh9CistCistYmluZGlyID0gJHtleGVjX3ByZWZpeH0vYmluCistc2JpbmRpciA9ICR7ZXhlY19wcmVmaXh9L3NiaW4KKy1saWJleGVjZGlyID0gJHtleGVjX3ByZWZpeH0vbGliZXhlYworLWRhdGFkaXIgPSAke3ByZWZpeH0vc2hhcmUKKy1zeXNjb25mZGlyID0gJHtwcmVmaXh9L2V0YworLXNoYXJlZHN0YXRlZGlyID0gJHtwcmVmaXh9L2NvbQorLWxvY2Fsc3RhdGVkaXIgPSAke3ByZWZpeH0vdmFyCistbGliZGlyID0gJHtleGVjX3ByZWZpeH0vbGliCistaW5mb2RpciA9ICR7cHJlZml4fS9pbmZvCisrcHJlZml4ID89IC91c3IKKytleGVjX3ByZWZpeCA/PSAke3ByZWZpeH0KKysKKytiaW5kaXIgPz0gJHtleGVjX3ByZWZpeH0vYmluCisrc2JpbmRpciA/PSAke2V4ZWNfcHJlZml4fS9zYmluCisrbGliZXhlY2RpciA/PSAke2V4ZWNfcHJlZml4fS9saWJleGVjCisrZGF0YWRpciA/PSAke3ByZWZpeH0vc2hhcmUKKytzeXNjb25mZGlyID89ICR7cHJlZml4fS9ldGMKKytzaGFyZWRzdGF0ZWRpciA/PSAke3ByZWZpeH0vY29tCisrbG9jYWxzdGF0ZWRpciA/PSAke3ByZWZpeH0vdmFyCisrbGliZGlyID89ICR7ZXhlY19wcmVmaXh9L2xpYgorK2luZm9kaXIgPz0gJHtwcmVmaXh9L2luZm8KKyBkb2NkaXIgPSAKKy1pbmNsdWRlZGlyID0gJHtwcmVmaXh9L2luY2x1ZGUKKytpbmNsdWRlZGlyID89ICR7cHJlZml4fS9pbmNsdWRlCisgb2xkaW5jbHVkZWRpciA9IC91c3IvaW5jbHVkZQorLW1hbmRpciA9ICR7cHJlZml4fS9tYW4KKyttYW5kaXIgPz0gJHtwcmVmaXh9L21hbgorIAorIHBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpLyQoUEFDS0FHRSkKKyBwa2dsaWJkaXIgPSAkKGxpYmRpcikvJChQQUNLQUdFKQorQEAgLTQwLDggKzQwLDExIEBAIGFsbDogJChzcmNkaXIpLyQoUEFDS0FHRSkKKyAKKyAKKyBpbnN0YWxsOiBhbGwgaW5zdGFsbGRpcnMKKy0JJChJTlNUQUxMX0JJTikgJChzcmNkaXIpLyQoUEFDS0FHRSkgJChERVNURElSKSQoYmluZGlyKS8kKFBBQ0tBR0UpCistCSQoSU5TVEFMTF9CSU4pICQoc3JjZGlyKS9tb2RpZnlyZXBvICQoREVTVERJUikkKGJpbmRpcikvbW9kaWZ5cmVwbworKwlzZWQgLWUgInN8QERBVEFESVJAfCQoZGF0YWRpcil8IiAkKHNyY2RpcikvJChQQUNLQUdFKSA+ICQoc3JjZGlyKS8kKFBBQ0tBR0UpLnRtcAorKwlzZWQgLWUgInN8QERBVEFESVJAfCQoZGF0YWRpcil8IiAkKHNyY2RpcikvbW9kaWZ5cmVwbyA+ICQoc3JjZGlyKS9tb2RpZnlyZXBvLnRtcAorKwkkKElOU1RBTExfQklOKSAkKHNyY2RpcikvJChQQUNLQUdFKS50bXAgJChERVNURElSKSQoYmluZGlyKS8kKFBBQ0tBR0UpCisrCSQoSU5TVEFMTF9CSU4pICQoc3JjZGlyKS9tb2RpZnlyZXBvLnRtcCAkKERFU1RESVIpJChiaW5kaXIpL21vZGlmeXJlcG8KKysJcm0gLWYgJChzcmNkaXIpLyQoUEFDS0FHRSkudG1wICQoc3JjZGlyKS9tb2RpZnlyZXBvLnRtcAorIAorIAorIHVuaW5zdGFsbDoKK2RpZmYgLS1naXQgYS9iaW4vY3JlYXRlcmVwbyBiL2Jpbi9jcmVhdGVyZXBvCitpbmRleCBiMGRlNTE1Li5lYWFjYjM5IDEwMDc1NQorLS0tIGEvYmluL2NyZWF0ZXJlcG8KKysrKyBiL2Jpbi9jcmVhdGVyZXBvCitAQCAtMSwyICsxLDIgQEAKKyAjIS9iaW4vc2gKKy1leGVjIC91c3Ivc2hhcmUvY3JlYXRlcmVwby9nZW5wa2dtZXRhZGF0YS5weSAiJEAiCisrZXhlYyBAREFUQURJUkAvY3JlYXRlcmVwby9nZW5wa2dtZXRhZGF0YS5weSAiJEAiCitkaWZmIC0tZ2l0IGEvYmluL21vZGlmeXJlcG8gYi9iaW4vbW9kaWZ5cmVwbworaW5kZXggYzk3MzJkOC4uNmY3YzFkNCAxMDA3NTUKKy0tLSBhL2Jpbi9tb2RpZnlyZXBvCisrKysgYi9iaW4vbW9kaWZ5cmVwbworQEAgLTEsMiArMSwyIEBACisgIyEvYmluL3NoCistZXhlYyAvdXNyL3NoYXJlL2NyZWF0ZXJlcG8vbW9kaWZ5cmVwby5weSAiJEAiCisrZXhlYyBAREFUQURJUkAvY3JlYXRlcmVwby9tb2RpZnlyZXBvLnB5ICIkQCIKK2RpZmYgLS1naXQgYS9kb2NzL01ha2VmaWxlIGIvZG9jcy9NYWtlZmlsZQoraW5kZXggMGE0MTE3OS4uZTEyOGM4NSAxMDA2NDQKKy0tLSBhL2RvY3MvTWFrZWZpbGUKKysrKyBiL2RvY3MvTWFrZWZpbGUKK0BAIC0xLDIyICsxLDIyIEBACisgU0hFTEwgPSAvYmluL3NoCisgdG9wX3NyY2RpciA9IC4uCisgc3JjZGlyID0gLi4vZG9jcworLXByZWZpeCA9IC91c3IKKy1leGVjX3ByZWZpeCA9ICR7cHJlZml4fQorLQorLWJpbmRpciA9ICR7ZXhlY19wcmVmaXh9L2JpbgorLXNiaW5kaXIgPSAke2V4ZWNfcHJlZml4fS9zYmluCistbGliZXhlY2RpciA9ICR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMKKy1kYXRhZGlyID0gJHtwcmVmaXh9L3NoYXJlCistc3lzY29uZmRpciA9ICR7cHJlZml4fS9ldGMKKy1zaGFyZWRzdGF0ZWRpciA9ICR7cHJlZml4fS9jb20KKy1sb2NhbHN0YXRlZGlyID0gJHtwcmVmaXh9L3ZhcgorLWxpYmRpciA9ICR7ZXhlY19wcmVmaXh9L2xpYgorLWluZm9kaXIgPSAke3ByZWZpeH0vaW5mbworK3ByZWZpeCA/PSAvdXNyCisrZXhlY19wcmVmaXggPz0gJHtwcmVmaXh9CisrCisrYmluZGlyID89ICR7ZXhlY19wcmVmaXh9L2JpbgorK3NiaW5kaXIgPz0gJHtleGVjX3ByZWZpeH0vc2JpbgorK2xpYmV4ZWNkaXIgPz0gJHtleGVjX3ByZWZpeH0vbGliZXhlYworK2RhdGFkaXIgPz0gJHtwcmVmaXh9L3NoYXJlCisrc3lzY29uZmRpciA/PSAke3ByZWZpeH0vZXRjCisrc2hhcmVkc3RhdGVkaXIgPz0gJHtwcmVmaXh9L2NvbQorK2xvY2Fsc3RhdGVkaXIgPz0gJHtwcmVmaXh9L3ZhcgorK2xpYmRpciA/PSAke2V4ZWNfcHJlZml4fS9saWIKKytpbmZvZGlyID89ICR7cHJlZml4fS9pbmZvCisgZG9jZGlyID0gCistaW5jbHVkZWRpciA9ICR7cHJlZml4fS9pbmNsdWRlCisraW5jbHVkZWRpciA/PSAke3ByZWZpeH0vaW5jbHVkZQorIG9sZGluY2x1ZGVkaXIgPSAvdXNyL2luY2x1ZGUKKy1tYW5kaXIgPSAke2RhdGFkaXJ9L21hbgorK21hbmRpciA/PSAke2RhdGFkaXJ9L21hbgorIAorIHBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpLyQoUEFDS0FHRSkKKyBwa2dsaWJkaXIgPSAkKGxpYmRpcikvJChQQUNLQUdFKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vcHl0aG9uLXNjcmlwdHMtc2hvdWxkLXVzZS1pbnRlcnByZXRlci1mcm9tLWVudi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL3B5dGhvbi1zY3JpcHRzLXNob3VsZC11c2UtaW50ZXJwcmV0ZXItZnJvbS1lbnYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyMDVhMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL3B5dGhvbi1zY3JpcHRzLXNob3VsZC11c2UtaW50ZXJwcmV0ZXItZnJvbS1lbnYucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorQXV0aG9yOiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CisKK1B5dGhvbiBpbnRlcnByZXRlciBzaG91bGQgYmUgdXNlIGZyb20gUEFUSCAtIG5hdGl2ZSBweXRob24gLSBhbmQgbm90IHRoZSBvbmUgZnJvbQoraG9zdC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogY3JlYXRlcmVwby0wLjQuMTEvZ2VucGtnbWV0YWRhdGEucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjcmVhdGVyZXBvLTAuNC4xMS5vcmlnL2dlbnBrZ21ldGFkYXRhLnB5CTIwMTItMDQtMTAgMTc6MTQ6MDUuMjc4NjQ5Mzg0ICswMzAwCisrKysgY3JlYXRlcmVwby0wLjQuMTEvZ2VucGtnbWV0YWRhdGEucHkJMjAxMi0wNC0xMCAxNzoxNDoyMi4yOTA2NDg4ODYgKzAzMDAKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uIC10CisrIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorICMgcHJpbWFyeSBmdW5jdGlvbnMgYW5kIGdsdWUgZm9yIGdlbmVyYXRpbmcgdGhlIHJlcG9zaXRvcnkgbWV0YWRhdGEKKyAjCisgCitJbmRleDogY3JlYXRlcmVwby0wLjQuMTEvbW9kaWZ5cmVwby5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNyZWF0ZXJlcG8tMC40LjExLm9yaWcvbW9kaWZ5cmVwby5weQkyMDEyLTA0LTEwIDE3OjE0OjA5LjEwNjY0OTI3MiArMDMwMAorKysrIGNyZWF0ZXJlcG8tMC40LjExL21vZGlmeXJlcG8ucHkJMjAxMi0wNC0xMCAxNzoxNDoyNy44MTg2NDg3MjUgKzAzMDAKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorKyMhIC91c3IvYmluL2VudiBweXRob24KKyAjICRJZCQKKyAjCisgIyBUaGlzIHRvb2xzIGlzIHVzZWQgdG8gaW5zZXJ0IGFyYml0cmFyeSBtZXRhZGF0YSBpbnRvIGFuIFJQTSByZXBvc2l0b3J5LgorSW5kZXg6IGNyZWF0ZXJlcG8tMC40LjExL2R1bXBNZXRhZGF0YS5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNyZWF0ZXJlcG8tMC40LjExLm9yaWcvZHVtcE1ldGFkYXRhLnB5CTIwMTItMDQtMTAgMTc6MTk6MjMuODc0NjQwMDY4ICswMzAwCisrKysgY3JlYXRlcmVwby0wLjQuMTEvZHVtcE1ldGFkYXRhLnB5CTIwMTItMDQtMTAgMTc6MTk6MzQuNTAyNjM5NzU2ICswMzAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbiAtdAorKyMhIC91c3IvYmluL2VudiBweXRob24KKyAjIGJhc2UgY2xhc3NlcyBhbmQgZnVuY3Rpb25zIGZvciBkdW1waW5nIG91dCBwYWNrYWdlIE1ldGFkYXRhCisgIworICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK0luZGV4OiBjcmVhdGVyZXBvLTAuNC4xMS9yZWFkTWV0YWRhdGEucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjcmVhdGVyZXBvLTAuNC4xMS5vcmlnL3JlYWRNZXRhZGF0YS5weQkyMDEyLTA0LTEwIDE3OjE5OjE5LjYyNjY0MDE5MyArMDMwMAorKysrIGNyZWF0ZXJlcG8tMC40LjExL3JlYWRNZXRhZGF0YS5weQkyMDEyLTA0LTEwIDE3OjE5OjQwLjE5ODYzOTU5MCArMDMwMAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24gLXQKKysjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisgCisgIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL3JlY29tbWVuZHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9yZWNvbW1lbmRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNWRlMmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9yZWNvbW1lbmRzLnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK2NyZWF0ZXJlcG86IGltcGxlbWVudCByZWNvbW1lbmRzIHN1cHBvcnQKKworUmVjb3JkIGFnYWluc3QgdGhlIGNvcnJlc3BvbmRpbmcgcmVxdWlyZXMgZW50cnkgaW4gdGhlIG91dHB1dCBtZXRhZGF0YQoraWYgYSBkZXBlbmRlbmN5IHJlbGF0aW9uc2hpcCBpcyBtYXJrZWQgd2l0aCB0aGUgUlBNU0VOU0VfTUlTU0lOR09LIGZsYWcKKyhpbmRpY2F0aW5nIGl0IGlzIGEgcmVjb21tZW5kYXRpb24sIHJhdGhlciB0aGFuIGEgaGFyZCBkZXBlbmRlbmN5KS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvZHVtcE1ldGFkYXRhLnB5IGIvZHVtcE1ldGFkYXRhLnB5CitpbmRleCA3MGJiMmQ4Li5lNDBlOGFjIDEwMDY0NAorLS0tIGEvZHVtcE1ldGFkYXRhLnB5CisrKysgYi9kdW1wTWV0YWRhdGEucHkKK0BAIC0zMTksNiArMzE5LDIzIEBAIGNsYXNzIFJwbU1ldGFEYXRhOgorICAgICAgICAgICAgICAgICAgICAgcmVxcy5hcHBlbmQoMCkKKyAgICAgICAgIHJldHVybiByZXFzCisgCisrICAgIGRlZiBfY2hlY2tNaXNzaW5nT2soc2VsZiwgZmxhZ3MpOgorKyAgICAgICAgcmVxcz1bXQorKyAgICAgICAgaWYgZmxhZ3MgaXMgTm9uZToKKysgICAgICAgICAgICByZXR1cm4gcmVxcworKworKyAgICAgICAgaWYgdHlwZShmbGFncykgaXMgbm90IHR5cGVzLkxpc3RUeXBlOgorKyAgICAgICAgICAgIGZsYWdzID0gW2ZsYWdzXQorKyAgICAgICAgZm9yIGZsYWcgaW4gZmxhZ3M6CisrICAgICAgICAgICAgbmV3ZmxhZyA9IGZsYWcKKysgICAgICAgICAgICBpZiBmbGFnIGlzIG5vdCBOb25lOgorKyAgICAgICAgICAgICAgICBuZXdmbGFnID0gZmxhZyAmIHJwbS5SUE1TRU5TRV9NSVNTSU5HT0sKKysgICAgICAgICAgICAgICAgaWYgbmV3ZmxhZzoKKysgICAgICAgICAgICAgICAgICAgIHJlcXMuYXBwZW5kKDEpCisrICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICByZXFzLmFwcGVuZCgwKQorKyAgICAgICAgcmV0dXJuIHJlcXMKKysKKyAKKyAgICAgZGVmIF9jb3JyZWN0VmVyc2lvbihzZWxmLCB2ZXJzKToKKyAgICAgICAgIHJldHVybnZlcnMgPSBbXQorQEAgLTUzNyw5ICs1NTQsMTAgQEAgY2xhc3MgUnBtTWV0YURhdGE6CisgICAgICAgICB0bXBmbGFncyA9IHNlbGYuaGRyW3JwbS5SUE1UQUdfUkVRVUlSRUZMQUdTXQorICAgICAgICAgZmxhZ3MgPSBzZWxmLl9jb3JyZWN0RmxhZ3ModG1wZmxhZ3MpCisgICAgICAgICBwcmVyZXEgPSBzZWxmLl9jaGVja1ByZVJlcSh0bXBmbGFncykKKysgICAgICAgIG1pc3NpbmdvayA9IHNlbGYuX2NoZWNrTWlzc2luZ09rKHRtcGZsYWdzKQorICAgICAgICAgdmVyID0gc2VsZi5fY29ycmVjdFZlcnNpb24oc2VsZi5oZHJbcnBtLlJQTVRBR19SRVFVSVJFVkVSU0lPTl0pCisgICAgICAgICBpZiBuYW1lcyBpcyBub3QgTm9uZToKKy0gICAgICAgICAgICBsc3QgPSB6aXAobmFtZXMsIGZsYWdzLCB2ZXIsIHByZXJlcSkKKysgICAgICAgICAgICBsc3QgPSB6aXAobmFtZXMsIGZsYWdzLCB2ZXIsIHByZXJlcSwgbWlzc2luZ29rKQorICAgICAgICAgcmV0dXJuIHNlbGYuX3VuaXEobHN0KQorICAgICAgICAgCisgICAgIGRlZiBvYnNvbGV0ZXNMaXN0KHNlbGYpOgorQEAgLTY5Miw3ICs3MTAsNyBAQCBkZWYgZ2VuZXJhdGVYTUwoZG9jLCBub2RlLCBmb3JtYXRucywgcnBtT2JqLCBzdW10eXBlKToKKyAgICAgZGVwc0xpc3QgPSBycG1PYmouZGVwc0xpc3QoKQorICAgICBpZiBsZW4oZGVwc0xpc3QpID4gMDoKKyAgICAgICAgIHJwY29ub2RlID0gZm9ybWF0Lm5ld0NoaWxkKGZvcm1hdG5zLCAncmVxdWlyZXMnLCBOb25lKSAgICAKKy0gICAgICAgIGZvciAobmFtZSwgZmxhZ3MsIChlLHYsciksIHByZXJlcSkgaW4gZGVwc0xpc3Q6CisrICAgICAgICBmb3IgKG5hbWUsIGZsYWdzLCAoZSx2LHIpLCBwcmVyZXEsIG1pc3NpbmdvaykgaW4gZGVwc0xpc3Q6CisgICAgICAgICAgICAgZW50cnkgPSBycGNvbm9kZS5uZXdDaGlsZChmb3JtYXRucywgJ2VudHJ5JywgTm9uZSkKKyAgICAgICAgICAgICBlbnRyeS5uZXdQcm9wKCduYW1lJywgbmFtZSkKKyAgICAgICAgICAgICBpZiBmbGFncyAhPSAwOgorQEAgLTcxMSw2ICs3MjksOCBAQCBkZWYgZ2VuZXJhdGVYTUwoZG9jLCBub2RlLCBmb3JtYXRucywgcnBtT2JqLCBzdW10eXBlKToKKyAgICAgICAgICAgICAgICAgICAgIGVudHJ5Lm5ld1Byb3AoJ3JlbCcsIHN0cihyKSkKKyAgICAgICAgICAgICBpZiBwcmVyZXEgPT0gMToKKyAgICAgICAgICAgICAgICAgZW50cnkubmV3UHJvcCgncHJlJywgc3RyKHByZXJlcSkpCisrICAgICAgICAgICAgaWYgbWlzc2luZ29rOgorKyAgICAgICAgICAgICAgICBlbnRyeS5uZXdQcm9wKCdtaXNzaW5nb2snLCAnMScpCisgICAgICAgICAKKyAgICAgZm9yIGZpbGUgaW4gcnBtT2JqLnVzZWZ1bEZpbGVzKCk6CisgICAgICAgICBmaWxlcyA9IGZvcm1hdC5uZXdDaGlsZChOb25lLCAnZmlsZScsIE5vbmUpCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vcnBtLWNyZWF0ZXNvbHZlZGIucHkgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9ycG0tY3JlYXRlc29sdmVkYi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNWI2MWJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vcnBtLWNyZWF0ZXNvbHZlZGIucHkKQEAgLTAsMCArMSw2NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIFRoaXMgc2NyaXB0IGdlbmVyYXRlcyBhIHNvbHV0aW9uIGRhdGFiYXNlIGZvciBhIGRpcmVjdG9yeSBjb250YWluaW5nIHJwbSBwYWNrYWdlcworIyBidXQgdHJpZXMgdG8gYmUgZWZmaWNpZW50IGFib3V0IHRoaXMsIG9ubHkgZG9pbmcgc28gd2hlbiB0aGUgcGFja2FnZXMgaGF2ZSBjaGFuZ2VkCisjIGluIHNvbWUgd2F5LgorIworIyBJdCBpcyBhc3N1bWVkIHNvbWV0aGluZyBhbHJlYWR5IHdlbnQgdGhyb3VnaCBhbmQgcmVtb3ZlZCBhbGwgdGhlIHNvbHZlZGIuZG9uZSBzdGFtcCBmaWxlcworIyBpbiBhZHZhbmNlLgorIworIyBGaXJzdCBhcmd1bWVudCAtIHRoZSBycG0gYmluYXJ5IHRvIHVzZQorIyBTdWJzZXF1ZW50IGFyZ3VtZW50cyAtIHBhdGhzIHRvIHByb2Nlc3Mgc29sdXRpb24gZGF0YWJhc2VzIGZvcgorIworCitpbXBvcnQgc3lzLCBvcworaW1wb3J0IGhhc2hsaWIKK2ltcG9ydCBzdGF0CitpbXBvcnQgc3VicHJvY2VzcworCitpZiBsZW4oc3lzLmFyZ3YpIDwgMToKKyAgICBwcmludCgiRXJyb3IsIHJwbSBjb21tYW5kIG5vdCBzcGVjaWZpZWQiKQorICAgIHN5cy5leGl0KDEpCisKK2lmIGxlbihzeXMuYXJndikgPCAyOgorICAgIHByaW50KCJFcnJvciwgbm8gcGF0aHMgc3BlY2lmaWVkIikKKyAgICBzeXMuZXhpdCgxKQorCitwYXRocyA9IHN5cy5hcmd2WzI6XQorCitmb3IgcGF0aCBpbiBwYXRoczoKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoICsgIi9zb2x2ZWRiLmRvbmUiKToKKyAgICAgICAgY29udGludWUKKyAgICBkYXRhID0gIiIKKyAgICBtYW5pZmVzdCA9IFtdCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocGF0aCk6CisgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgZiA9IG9zLnBhdGguam9pbihyb290LCBmaWxlKQorICAgICAgICAgICAgaWYgZi5zdGFydHN3aXRoKHBhdGggKyAiLyIgKyAic29sdmVkYiIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBkYXRhID0gZGF0YSArIHN0cihvcy5zdGF0KGYpW3N0YXQuU1RfTVRJTUVdKQorICAgICAgICAgICAgbWFuaWZlc3QuYXBwZW5kKGYpCisgICAgY2hlY2tzdW0gPSBoYXNobGliLm1kNShkYXRhKS5oZXhkaWdlc3QoKQorCisgICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCArICIvc29sdmVkYi5jaGVja3N1bSIpIGFuZCBvcGVuKHBhdGggKyAiL3NvbHZlZGIuY2hlY2tzdW0iLCAiciIpLnJlYWQoKSA9PSBjaGVja3N1bToKKyAgICAgICAgb3BlbihwYXRoICsgIi9zb2x2ZWRiLmRvbmUiLCAidyIpCisgICAgICAgIGNvbnRpbnVlCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoICsgIi9zb2x2ZWRiIik6CisgICAgICAgIHN1YnByb2Nlc3MuY2FsbCgicm0gLXJmICVzIiAlIChwYXRoICsgIi9zb2x2ZWRiIiksIHNoZWxsPVRydWUpCisgICAgb3MubWtkaXIocGF0aCArICIvc29sdmVkYiIpCisgICAgbSA9IG9wZW4ocGF0aCArICIvc29sdmVkYi9tYW5pZmVzdCIsICJ3IikKKyAgICBtLndyaXRlKCIjIER5bmFtaWNhbGx5IGdlbmVyYXRlZCBzb2x2ZSBtYW5pZmVzdFxuIikKKyAgICBmb3IgZiBpbiBtYW5pZmVzdDoKKyAgICAgICAgbS53cml0ZShmICsgIlxuIikKKyAgICBtLmNsb3NlKCkKKworICAgIGNtZCA9IHN5cy5hcmd2WzFdICsgJyAtaSAtLXJlcGxhY2Vwa2dzIC0tcmVwbGFjZWZpbGVzIC0tb2xkcGFja2FnZSAtRCAiX2RicGF0aCAnICsgcGF0aCArICcvc29sdmVkYiIgLS1qdXN0ZGIgXAorCQkJLS1ub2FpZCAtLW5vZGVwcyAtLW5vb3JkZXIgLS1ub3NjcmlwdHMgLS1ub3RyaWdnZXJzIC0tbm9wYXJlbnRkaXJzIC0tbm9saW5rdG9zIC0tc3RhdHMgXAorCQkJLS1pZ25vcmVzaXplIC0tbm9zaWduYXR1cmUgLS1ub2RpZ2VzdCAtRCAiX19kYmlfdHhuIGNyZWF0ZSBub2ZzeW5jIiBcCisJCQknICsgcGF0aCArICcvc29sdmVkYi9tYW5pZmVzdCcKKyAgICBzdWJwcm9jZXNzLmNhbGwoY21kLCBzaGVsbD1UcnVlKQorCisgICAgb3BlbihwYXRoICsgIi9zb2x2ZWRiLmNoZWNrc3VtIiwgInciKS53cml0ZShjaGVja3N1bSkKKyAgICBvcGVuKHBhdGggKyAiL3NvbHZlZGIuZG9uZSIsICJ3IikKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG9fMC40LjExLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG9fMC40LjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmOWVjZjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwb18wLjQuMTEuYmIKQEAgLTAsMCArMSw1MCBAQAorU1VNTUFSWSA9ICJDcmVhdGVzIG1ldGFkYXRhIGluZGV4ZXMgZm9yIFJQTSBwYWNrYWdlIHJlcG9zaXRvcmllcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9jcmVhdGVyZXBvLmJhc2V1cmwub3JnLyIKKworUkVDSVBFX05PX1VQREFURV9SRUFTT04gPSAiVmVyc2lvbnMgYWZ0ZXIgMC45LiogdXNlIFlVTSwgc28gd2UgaG9sZCBhdCAwLjQuMTEiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTg4MTA2NjlmMTNiODczNDg0NTllNjExZDMxYWI3NjAiCisKK0RFUEVORFNfY2xhc3MtbmF0aXZlICs9ICJsaWJ4bWwyLW5hdGl2ZSBycG0tbmF0aXZlIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtdGFyZ2V0ID0gImxpYnhtbDItcHl0aG9uIgorCitQUiA9ICJyOSIKKworU1JDX1VSSSA9ICJodHRwOi8vY3JlYXRlcmVwby5iYXNldXJsLm9yZy9kb3dubG9hZC8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4LW5hdGl2ZS1pbnN0YWxsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3B5dGhvbi1zY3JpcHRzLXNob3VsZC11c2UtaW50ZXJwcmV0ZXItZnJvbS1lbnYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY3JlYXRlcmVwby1ycG01NDkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVjb21tZW5kcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jcmVhdGVyZXBvLWRicGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kdW1wTWV0YWRhdGEtZGlzYWJsZS1zaWduYXR1cmUtdmFsaWRhdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ycG0tY3JlYXRlc29sdmVkYi5weSBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjNlOWNjZjRhYmNmZmUzZjQ5YWYwNzhjODM2MTFlZGEyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImE3M2FlMTFhMGRjZGU4YmRlMzZkOTAwYmMzZjdmOGYxMDgzYmE3NTJjNzBhNWM2MWI3MmQxZTFlNzYwOGYyMWIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlIC1lICdERVNURElSPSR7RH0nIGluc3RhbGwKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9ycG0tY3JlYXRlc29sdmVkYi5weSAke0R9JHtiaW5kaXJ9LworfQorCisjIFdyYXAgdGhlIHB5dGhvbiBzY3JpcHQgc2luY2UgdGhlIG5hdGl2ZSBweXRob24gaXMKKyMgJHtiaW5kaXJ9L3B5dGhvbi1uYXRpdmUvcHl0aG9uLCBhbmQgdGhlICIjISAvdXNyL2Jpbi9lbnYgcHl0aG9uIiBjYW4ndAorIyBmaW5kIGl0IHNpbmNlIGl0IGlzIG5vdCBpbiBQQVRILgorZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKwkjIE5vdCBhbGwgdGhlIHB5dGhvbiBzY3JpcHRzIHNob3VsZCBiZSB3cmFwcGVkIHNpbmNlIHNvbWUgb2YKKwkjIHRoZW0gYXJlIG1vZHVsZXMgKGJlIGltcG9ydGVkKS4KKwlmb3IgaSBpbiAke0R9JHtkYXRhZGlyfS9jcmVhdGVyZXBvL2dlbnBrZ21ldGFkYXRhLnB5IFwKKwkJICR7RH0ke2RhdGFkaXJ9L2NyZWF0ZXJlcG8vbW9kaWZ5cmVwby5weSBcCisJCSAke0R9JHtiaW5kaXJ9L3JwbS1jcmVhdGVzb2x2ZWRiLnB5IDsgZG8KKwkJc2VkIC1pIC1lICdzfF4jIS4qL3Vzci9iaW4vZW52IHB5dGhvbnwjISAvdXNyL2Jpbi9lbnYgbmF0aXZlcHl0aG9ufCcgJGkKKwlkb25lCisKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9jcmVhdGVyZXBvIFwKKwkJCVJQTV9VU1JMSUJSUE09JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3JwbSBcCisJCQlSUE1fRVRDUlBNPSR7U1RBR0lOR19FVENESVJfTkFUSVZFfS9ycG0gXAorCQkJUlBNX0xPQ0FMRURJUlJQTT0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2xvY2FsZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmwvY29uZmlndXJlX2FjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmwvY29uZmlndXJlX2FjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YmQzMDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybC9jb25maWd1cmVfYWMucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorVXBzdHJlYW0tU3RhdHVzOiAgUGVuZGluZworCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI4MSw3ICsyODEsNyBAQCBkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgCisgQ1VSTF9DSEVDS19DT01QSUxFUgorIENVUkxfU0VUX0NPTVBJTEVSX0JBU0lDX09QVFMKKy1DVVJMX1NFVF9DT01QSUxFUl9ERUJVR19PUFRTCisrZG5sIENVUkxfU0VUX0NPTVBJTEVSX0RFQlVHX09QVFMKKyBDVVJMX1NFVF9DT01QSUxFUl9PUFRJTUlaRV9PUFRTCisgQ1VSTF9TRVRfQ09NUElMRVJfV0FSTklOR19PUFRTCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybC9wa2djb25maWdfZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmwvcGtnY29uZmlnX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDg3NjlkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmwvcGtnY29uZmlnX2ZpeC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3BhY2thZ2luZ10KKworZGlmZiAtTnVyZCBjdXJsLTcuMjkuMC9jb25maWd1cmUuYWMgY3VybC03LjI5LjAvY29uZmlndXJlLmFjCistLS0gY3VybC03LjI5LjAvY29uZmlndXJlLmFjCTIwMTMtMDItMDYgMTE6NDc6MTkuMDAwMDAwMDAwICswMjAwCisrKysgY3VybC03LjI5LjAvY29uZmlndXJlLmFjCTIwMTMtMDItMTYgMTI6MzI6MjIuMTMyMzI3NzY0ICswMjAwCitAQCAtMTg4Myw2ICsxODgzLDcgQEAKKyAgICAgICAgQUNfU1VCU1QoVVNFX0dOVVRMUywgWzFdKQorICAgICAgICBHTlVUTFNfRU5BQkxFRD0xCisgICAgICAgIFVTRV9HTlVUTFM9InllcyIKKysgICAgICAgR05VVExTX1JFUVVJUkVEPSJnbnV0bHMiCisgICAgICAgIGN1cmxfc3NsX21zZz0iZW5hYmxlZCAoR251VExTKSIKKyAgICAgICAgXSwKKyAgICAgICAgWworQEAgLTE5NTMsNiArMTk1NCw4IEBACisgICAgXSkKKyBmaQorIAorK0FDX1NVQlNUKEdOVVRMU19SRVFVSVJFRCkKKysKKyBkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGRubCBjaGVjayBmb3IgUG9sYXJTU0wKKyBkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGlmZiAtTnVyZCBjdXJsLTcuMjkuMC9saWJjdXJsLnBjLmluIGN1cmwtNy4yOS4wL2xpYmN1cmwucGMuaW4KKy0tLSBjdXJsLTcuMjkuMC9saWJjdXJsLnBjLmluCTIwMTItMTItMTIgMDA6MzI6MjIuMDAwMDAwMDAwICswMjAwCisrKysgY3VybC03LjI5LjAvbGliY3VybC5wYy5pbgkyMDEzLTAyLTE2IDEyOjMzOjI3LjA2Mzg0NDMzNyArMDIwMAorQEAgLTM1LDUgKzM1LDUgQEAKKyBEZXNjcmlwdGlvbjogTGlicmFyeSB0byB0cmFuc2ZlciBmaWxlcyB3aXRoIGZ0cCwgaHR0cCwgZXRjLgorIFZlcnNpb246IEBDVVJMVkVSU0lPTkAKKyBMaWJzOiAtTCR7bGliZGlyfSAtbGN1cmwKKy1MaWJzLnByaXZhdGU6IEBMSUJDVVJMX0xJQlNACisrTGlicy5wcml2YXRlOiAtbGRsIC1segorIENmbGFnczogLUkke2luY2x1ZGVkaXJ9IEBDUFBGTEFHX0NVUkxfU1RBVElDTElCQApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmxfNy40NC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmxfNy40NC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyOTMzMDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybF83LjQ0LjAuYmIKQEAgLTAsMCArMSw1MyBAQAorU1VNTUFSWSA9ICJDb21tYW5kIGxpbmUgdG9vbCBhbmQgbGlicmFyeSBmb3IgY2xpZW50LXNpZGUgVVJMIHRyYW5zZmVycyIKK0hPTUVQQUdFID0gImh0dHA6Ly9jdXJsLmhheHguc2UvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGlzdC5jZ2k/bGlzdD1jdXJsLXRyYWNrZXIiCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORztiZWdpbmxpbmU9NzttZDU9M2EzNDk0MmY0YWUzZmJmMWEzMDMxNjA3MTRlNjY0YWMiCisKK1NSQ19VUkkgPSAiaHR0cDovL2N1cmwuaGF4eC5zZS9kb3dubG9hZC9jdXJsLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnX2ZpeC5wYXRjaCBcCisgICAgICAgICAgIgorCisjIGN1cmwgbGlrZXMgdG8gc2V0IC1nMCBpbiBDRkxBR1MsIHNvIHdlIHN0b3AgaXQKKyMgZnJvbSBtdWNraW5nIGFyb3VuZCB3aXRoIGRlYnVnIG9wdGlvbnMKKyMKK1NSQ19VUkkgKz0gIiBmaWxlOi8vY29uZmlndXJlX2FjLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNmI5NTJjYTAwZTU0NzNiMTZhMTFmMDVmMDZhYThkYWUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWUyNTQxYmFlNjU4MmJiNjk3YzBmYmFlNDllMWQzZTZmYWQ1ZDA1ZDVhYTgwZGJkNmYwNzJlMGE0NDM0MTgxNCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGJpbmNvbmZpZyBtdWx0aWxpYl9oZWFkZXIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAiaXB2NiIsICJpcHY2IiwgIiIsIGQpfSBnbnV0bHMgemxpYiIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID0gImlwdjYgc3NsIHpsaWIiCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZXNkayA9ICJpcHY2IHNzbCB6bGliIgorCitQQUNLQUdFQ09ORklHW2lwdjZdID0gIi0tZW5hYmxlLWlwdjYsLS1kaXNhYmxlLWlwdjYsIgorUEFDS0FHRUNPTkZJR1tzc2xdID0gIi0td2l0aC1zc2wgLS13aXRoLXJhbmRvbT0vZGV2L3VyYW5kb20sLS13aXRob3V0LXNzbCxvcGVuc3NsIgorUEFDS0FHRUNPTkZJR1tnbnV0bHNdID0gIi0td2l0aC1nbnV0bHMsLS13aXRob3V0LWdudXRscyxnbnV0bHMiCitQQUNLQUdFQ09ORklHW3psaWJdID0gIi0td2l0aC16bGliPSR7U1RBR0lOR19MSUJESVJ9Ly4uLywtLXdpdGhvdXQtemxpYix6bGliIgorUEFDS0FHRUNPTkZJR1tydG1wZHVtcF0gPSAiLS13aXRoLWxpYnJ0bXAsLS13aXRob3V0LWxpYnJ0bXAscnRtcGR1bXAiCitQQUNLQUdFQ09ORklHW2xpYnNzaDJdID0gIi0td2l0aC1saWJzc2gyLC0td2l0aG91dC1saWJzc2gyLGxpYnNzaDIiCitQQUNLQUdFQ09ORklHW3NtYl0gPSAiLS1lbmFibGUtc21iLC0tZGlzYWJsZS1zbWIsIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LWxpYmlkbiBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtY3J5cHRvLWF1dGggXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1sZGFwIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtbGRhcHMgXAorICAgICAgICAgICAgICAgIC0td2l0aC1jYS1idW5kbGU9JHtzeXNjb25mZGlyfS9zc2wvY2VydHMvY2EtY2VydGlmaWNhdGVzLmNydCBcCisiCisjIHNlZSBodHRwczovL2xpc3RzLnlvY3RvcHJvamVjdC5vcmcvcGlwZXJtYWlsL3Bva3kvMjAxMy1EZWNlbWJlci8wMDk0MzUuaHRtbAorIyBXZSBzaG91bGQgaWRlYWxseSBkcm9wIGFjX2N2X3NpemVvZl9vZmZfdCBmcm9tIHNpdGUgZmlsZXMgYnV0IHVudGlsIHRoZW4KK0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCAnYWNfY3Zfc2l6ZW9mX29mZl90PTgnLCAnJywgZCl9IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlvZV9tdWx0aWxpYl9oZWFkZXIgY3VybC9jdXJsYnVpbGQuaAorfQorCitQQUNLQUdFUyA9KyAibGliJHtCUE59IgorCitGSUxFU19saWIke0JQTn0gPSAiJHtsaWJkaXJ9L2xpYiouc28uKiIKK1JSRUNPTU1FTkRTX2xpYiR7QlBOfSArPSAiY2EtY2VydGlmaWNhdGVzIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL01ha2VmaWxlLWxldC1saWJzb190YXJnZXQtZGVwZW5kLW9uLWJ0X3JlYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvTWFrZWZpbGUtbGV0LWxpYnNvX3RhcmdldC1kZXBlbmQtb24tYnRfcmVjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyOWJmZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL01ha2VmaWxlLWxldC1saWJzb190YXJnZXQtZGVwZW5kLW9uLWJ0X3JlYy5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIGM2NDBmZjkzNDBmMzU4YTAwODM1ODE2ZDBmZWEwM2QyN2E3YmU5NzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMzEgTWFyIDIwMTUgMDA6NTY6NDQgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gTWFrZWZpbGU6IGxldCBsaWJzb190YXJnZXQgZGVwZW5kIG9uIGJ0X3JlYworCitGaXhlZCBwYXJhbGxlbCBpc3N1ZToKK2xpYnRvb2w6IGxpbms6IGBidF9yZWMubG8nIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0CitNYWtlZmlsZTo4Njc6IHJlY2lwZSBmb3IgdGFyZ2V0ICdsaWJkYi02LjAubGEnIGZhaWxlZAorbWFrZTogKioqIFtsaWJkYi02LjAubGFdIEVycm9yIDEKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCBlNDUxZjcwLi4wYTQyMzc1IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtODYzLDcgKzg2Myw3IEBAICQobGliZGJfdmVyc2lvbik6ICQoQ19PQkpTKQorIAkkKExOKSAtcyAkKGxpYmRiX3ZlcnNpb24pICQobGliZGIpCisgCisgIyBTaGFyZWQgQyBsaWJyYXJ5LgorLSQobGlic29fdGFyZ2V0KTogJChDX09CSlMpCisrJChsaWJzb190YXJnZXQpOiAkKENfT0JKUykgYnRfcmVjQG9ACisgCSQoU09MSU5LKSAkKFNPRkxBR1MpICQoTERGTEFHUykgLW8gJEAgJChDX09CSlMpIFwKKyAJCSQoTElCQ1NPX0xJQlMpCisgCSQoUk0pICQobGliZGIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL2FybS10aHVtYi1tdXRleF9kYjUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL2FybS10aHVtYi1tdXRleF9kYjUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRlOGRiOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvYXJtLXRodW1iLW11dGV4X2RiNS5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitPcmlnaW5hbCBwYXRjaCBzdWJtaXR0ZWQgYnkgamJvd2xlckBuc2x1Mi1saW51eC5vcmcgb24gMjAwNS0xMS0xNzoKKworZGI6IGZpeCB0aHVtYiB1Y2xpYmMgb3BlcmF0aW9uIGluIDQuMy4yOQorICAtIHVjbGliYyB0aHVtYiBidWlsZHMgd2VyZSB1c2luZyBsaWJwdGhyZWFkIHRvIGltcGxlbWVudCBtdXRleGVzLCB0aGUKKyAgLSB1Y2xpYmMgdmVyc2lvbiBzZWVtcyB0byBiZSBhIHN0dWIgKGF0IGxlYXN0IG9uIHRodW1iKS4gIFRoaXMgY29tbWl0CisgIC0gZml4ZXMgdGhlIEFSTS9nY2MtYXNzZW1ibHkgbXV0ZXggaW1wbGVtZW50YXRpb24gc28gdGhhdCBpdCBoYXMgdGh1bWIKKyAgLSBzdXBwb3J0IGFuZCB0aGUgcmVzdWx0YW50IGRiNCB3b3JrcyAodGVzdGVkIG9uIExFIFRodW1iIHVjbGliYykKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworQXV0aG9yOiBqYm93bGVyQG5zbHUyLWxpbnV4Lm9yZworCistLS0gZGItNS4xLjE5L3NyYy9kYmluYy9tdXRleF9pbnQuaC5vcmlnCTIwMTEtMDEtMDUgMTk6MjE6NDIuMTgxODA1MzY2IC0wNjAwCisrKysgZGItNS4xLjE5L3NyYy9kYmluYy9tdXRleF9pbnQuaAkyMDExLTAxLTA1IDE5OjI0OjUzLjE0MTg1MzExNyAtMDYwMAorQEAgLTQ3NCw2ICs0NzQsMjUgQEAKKyAKKyAjaWZkZWYgTE9BRF9BQ1RVQUxfTVVURVhfQ09ERQorIC8qIGdjYy9hcm06IDAgaXMgY2xlYXIsIDEgaXMgc2V0LiAqLworKyNpZiBkZWZpbmVkIF9fdGh1bWJfXworKyNkZWZpbmUJTVVURVhfU0VUKHRzbCkgKHsJCQkJCQlcCisrCWludCBfX3IsIF9fcDsJCQkJCQkJXAorKwlfX2FzbV9fIHZvbGF0aWxlKAkJCQkJCVwKKysJCSIuYWxpZ24gMlxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJImJ4ICAgICBwY1xuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkibm9wXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSIuYXJtXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJInN3cGIgICAlMCwgJTIsIFslM11cblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkiZW9yICAgICUwLCAlMCwgIzFcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSJvcnIgICAgJTEsIHBjLCAjMVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJImJ4ICAgICAlMVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkiLmZvcmNlX3RodW1iIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJICAgIDogIj0mciIgKF9fciksICI9ciIgKF9fcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJICAgIDogInIiICgxKSwgInIiICh0c2wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJICAgICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJX19yICYgMTsJCQkJCQkJXAorK30pCisrI2Vsc2UKKyAjZGVmaW5lCU1VVEVYX1NFVCh0c2wpICh7CQkJCQkJXAorIAlpbnQgX19yOwkJCQkJCQlcCisgCV9fYXNtX18gdm9sYXRpbGUoCQkJCQkJXAorQEAgLTQ4NCw2ICs1MDMsNyBAQAorIAkgICAgKTsJCQkJCQkJCVwKKyAJX19yICYgMTsJCQkJCQkJXAorIH0pCisrI2VuZGlmCisgCisgI2RlZmluZQlNVVRFWF9VTlNFVCh0c2wpCSgqKHZvbGF0aWxlIHRzbF90ICopKHRzbCkgPSAwKQorICNkZWZpbmUJTVVURVhfSU5JVCh0c2wpICAgICAgICAgKE1VVEVYX1VOU0VUKHRzbCksIDApCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL2ZpeC1wYXJhbGxlbC1idWlsZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjN2YxZTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL2ZpeC1wYXJhbGxlbC1idWlsZC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitXaXRoIGhpZ2hlciBwYXJhbGVsaXNtIGl0IHNvbWV0aW1lcyBmYWlscyB3aXRoOgorbGlidG9vbDogbGluazogYHV0aWxfbG9nLmxvJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdAorbWFrZTogKioqIFtkYl9yZXBsaWNhdGVdIEVycm9yIDEKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworLS0tIGRpc3Qub3JpZy9NYWtlZmlsZS5pbgkyMDEyLTA1LTExIDE5OjU3OjQ4LjAwMDAwMDAwMCArMDIwMAorKysrIGRpc3QvTWFrZWZpbGUuaW4JMjAxMy0xMC0zMSAxODoxNzoxMS44NzU1MzI1MjIgKzAxMDAKK0BAIC0xMDM0LDcgKzEwMzQsNyBAQAorIAkgICAgZGJfcmVjb3ZlckBvQCB1dGlsX3NpZ0BvQCAkKERFRl9MSUIpICQoTElCUykKKyAJJChQT1NUTElOSykgJEAKKyAKKy1kYl9yZXBsaWNhdGU6IGRiX3JlcGxpY2F0ZUBvQCB1dGlsX3NpZ0BvQCAkKERFRl9MSUIpCisrZGJfcmVwbGljYXRlOiBkYl9yZXBsaWNhdGVAb0AgdXRpbF9sb2dAb0AgdXRpbF9zaWdAb0AgJChERUZfTElCKQorIAkkKENDTElOSykgLW8gJEAgJChMREZMQUdTKSBcCisgCSAgICBkYl9yZXBsaWNhdGVAb0AgdXRpbF9sb2dAb0AgdXRpbF9zaWdAb0AgJChERUZfTElCKSAkKExJQlMpCisgCSQoUE9TVExJTkspICRACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiXzUuMy4yOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGJfNS4zLjI4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YjgxNGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiXzUuMy4yOC5iYgpAQCAtMCwwICsxLDExNiBAQAorIyBWZXJzaW9uIDUgb2YgdGhlIEJlcmtlbGV5IERCIGZyb20gU2xlZXB5Y2F0CisjCisjIEF0IHByZXNlbnQgdGhpcyBwYWNrYWdlIG9ubHkgaW5zdGFsbHMgdGhlIERCIGNvZGUKKyMgaXRzZWxmIChzaGFyZWQgbGlicmFyaWVzLCAuYSBpbiB0aGUgZGV2IHBhY2thZ2UpLAorIyBkb2N1bWVudGF0aW9uIGFuZCBoZWFkZXJzLgorIworIyBUaGUgaGVhZGVycyBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRob3NlIGFzIHYzCisjIG9mIHRoZSBEQiwgb25seSBvbmUgdmVyc2lvbiBjYW4gYmUgdXNlZCAqZm9yIGRldioKKyMgYXQgb25jZSAtIERCMyBhbmQgREI1IGNhbiBib3RoIGJlIGluc3RhbGxlZCBvbiB0aGUKKyMgc2FtZSBzeXN0ZW0gYXQgdGhlIHNhbWUgdGltZSBpZiByZWFsbHkgbmVjZXNzYXJ5LgorU0VDVElPTiA9ICJsaWJzIgorU1VNTUFSWSA9ICJCZXJrZWxleSBEYXRhYmFzZSB2NSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cub3JhY2xlLmNvbS90ZWNobm9sb2d5L3Byb2R1Y3RzL2JlcmtlbGV5LWRiL2RiL2luZGV4Lmh0bWwiCitMSUNFTlNFID0gIlNsZWVweWNhdCIKK1ZJUlRVQUxfTkFNRSA/PSAidmlydHVhbC9kYiIKK1JDT05GTElDVFNfJHtQTn0gPSAiZGIzIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZC5vcmFjbGUuY29tL2JlcmtlbGV5LWRiL2RiLSR7UFZ9LnRhci5neiIKK1NSQ19VUkkgKz0gImZpbGU6Ly9hcm0tdGh1bWItbXV0ZXhfZGI1LnBhdGNoO3BhdGNoZGlyPS4uIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtcGFyYWxsZWwtYnVpbGQucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiOTk0NTQ1NjRkNWI0NDc5NzUwNTY3MDMxZDY2ZmUyNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlMGE5OTJkNzQwNzA5ODkyZTgxZjlkOTNmMDZkYWYzMDVjZjczZmI4MWI1NDVhZmU3MjQ3ODA0MzE3MmMzNjI4IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8uLi9MSUNFTlNFO21kNT1lZDExNThlMzE0MzdmNGY4N2NkZDRhYjJiODYxMzk1NSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworIyBQdXQgdmlydHVhbC9kYiBpbiBhbnkgYXBwcm9wcmlhdGUgcHJvdmlkZXIgb2YgYQorIyByZWxhdGlvbmFsIGRhdGFiYXNlLCB1c2UgaXQgYXMgYSBkZXBlbmRlbmN5IGluCisjIHBsYWNlIG9mIGEgc3BlY2lmaWMgZGIgYW5kIHVzZToKKyMKKyMgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZGIKKyMKKyMgdG8gc2VsZWN0IHRoZSBjb3JyZWN0IGRiIGluIHRoZSBidWlsZCAoZGlzdHJvKSAuY29uZgorUFJPVklERVMgKz0gIiR7VklSVFVBTF9OQU1FfSIKKworIyBiaXRiYWtlIGlzbid0IHF1aXRlIGNsZXZlciBlbm91Z2ggdG8gZGVhbCB3aXRoIHNsZWVweWNhdCwKKyMgdGhlIGRpc3RyaWJ1dGlvbiBzaXRzIGluIHRoZSBleHBlY3RlZCBkaXJlY3RvcnksIGJ1dCBhbGwKKyMgdGhlIGJ1aWxkcyBtdXN0IG9jY3VyIGZyb20gYSBzdWItZGlyZWN0b3J5LiAgVGhlIGZvbGxvd2luZworIyBwZXJzdWFkZXMgYml0YmFrZSB0byBnbyB0byB0aGUgcmlnaHQgcGxhY2UKK1MgPSAiJHtXT1JLRElSfS9kYi0ke1BWfS9kaXN0IgorQiA9ICIke1dPUktESVJ9L2RiLSR7UFZ9L2J1aWxkX3VuaXgiCitTUERYX1MgPSAiJHtXT1JLRElSfS9kYi0ke1BWfSIKKworIyBUaGUgZXhlY3V0YWJsZXMgZ28gaW4gYSBzZXBhcmF0ZSBwYWNrYWdlIC0gdHlwaWNhbGx5IHRoZXJlCisjIGlzIG5vIG5lZWQgdG8gaW5zdGFsbCB0aGVzZSB1bmxlc3MgZG9pbmcgcmVhbCBkYXRhYmFzZQorIyBtYW5hZ2VtZW50IG9uIHRoZSBzeXN0ZW0uCitpbmhlcml0IGxpYl9wYWNrYWdlCisKK1BBQ0tBR0VTID0rICIke1BOfS1jeHgiCitGSUxFU18ke1BOfS1jeHggPSAiJHtsaWJkaXJ9LypjeHgqc28iCisKKworIyBUaGUgZGV2IHBhY2thZ2UgaGFzIHRoZSAuc28gbGluayAoYXMgaW4gZGIzKSBhbmQgdGhlIC5hJ3MgLQorIyBpdCBpcyB0aGVyZWZvcmUgaW5jb21wYXRpYmxlIChjYW5ub3QgYmUgaW5zdGFsbGVkIGF0IHRoZQorIyBzYW1lIHRpbWUpIGFzIHRoZSBkYjMgcGFja2FnZQorIyBzb3J0IG91dCB0aGUgLnNvIHNpbmNlIHRoZXkgZG8gdmVyc2lvbiBwcmlvciB0byB0aGUgLnNvCitTT0xJQlMgPSAiLTUqLnNvIgorRklMRVNfU09MSUJTREVWID0gIiR7bGliZGlyfS9saWJkYi5zbyAke2xpYmRpcn0vbGliZGJfY3h4LnNvIgorCisjY29uZmlndXJhdGlvbiAtIHNldCBpbiBsb2NhbC5jb25mIHRvIG92ZXJyaWRlCisjIEFsbCB0aGUgLS1kaXNhYmxlLSogb3B0aW9ucyByZXBsYWNlIC0tZW5hYmxlLXNtYWxsYnVpbGQsIHdoaWNoIGJyZWFrcyBhIGJ1bmNoIG9mIHN0dWZmIChlZy4gcG9zdGZpeCkKK0RCNV9DT05GSUcgPz0gIi0tZW5hYmxlLW9fZGlyZWN0IC0tZGlzYWJsZS1jcnlwdG9ncmFwaHkgLS1kaXNhYmxlLXF1ZXVlIC0tZGlzYWJsZS1yZXBsaWNhdGlvbiAtLWRpc2FibGUtdmVyaWZ5IC0tZGlzYWJsZS1jb21wYXQxODUgLS1kaXNhYmxlLXNxbCIKKworRVhUUkFfT0VDT05GID0gIiR7REI1X0NPTkZJR30gLS1lbmFibGUtc2hhcmVkIC0tZW5hYmxlLWN4eCAtLXdpdGgtc3lzcm9vdCIKKworIyBPdmVycmlkZSB0aGUgTVVURVggc2V0dGluZyBoZXJlLCB0aGUgUE9TSVggbGlicmFyeSBpcworIyB0aGUgZGVmYXVsdCAtICJQT1NJWC9wdGhyZWFkcy9saWJyYXJ5Ii4KKyMgRG9uJ3QgaWdub3JlIHRoZSBuaWNlIFNXUCBpbnN0cnVjdGlvbiBvbiB0aGUgQVJNOgorIyBUaGVzZSBlbmFibGUgdGhlIEFSTSBhc3NlbWJsZXIgbXV0ZXggY29kZSwgdGhpcyB3b24ndAorIyB3b3JrIHdpdGggdGh1bWIgY29tcGlsYXRpb24uLi4KK0FSTV9NVVRFWCA9ICItLXdpdGgtbXV0ZXg9QVJNL2djYy1hc3NlbWJseSIKK01VVEVYID0gIiIKK01VVEVYX2FybSA9ICIke0FSTV9NVVRFWH0iCitNVVRFWF9hcm1lYiA9ICIke0FSTV9NVVRFWH0iCitFWFRSQV9PRUNPTkYgKz0gIiR7TVVURVh9IgorCisjIENhbmNlbCB0aGUgc2l0ZSBzdHVmZiAtIGl0J3Mgc2V0IGZvciBkYjMgYW5kIGRlc3Ryb3lzIHRoZQorIyBjb25maWd1cmUuCitDT05GSUdfU0lURSA9ICIiCitkb19jb25maWd1cmUoKSB7CisJZ251LWNvbmZpZ2l6ZSAtLWZvcmNlICR7U30KKwlleHBvcnQgU1RSSVA9InRydWUiCisJb2VfcnVuY29uZgorfQorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisJc2VkIC1pIC1lICdzfGhhcmRjb2RlX2ludG9fbGlicz15ZXN8aGFyZGNvZGVfaW50b19saWJzPW5vfCcgXAorCQkke0J9L2xpYnRvb2wKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJbWtkaXIgLXAgJHtEfS8ke2luY2x1ZGVkaXJ9L2RiNTEKKwltdiAke0R9LyR7aW5jbHVkZWRpcn0vZGIuaCAke0R9LyR7aW5jbHVkZWRpcn0vZGI1MS8uCisJbXYgJHtEfS8ke2luY2x1ZGVkaXJ9L2RiX2N4eC5oICR7RH0vJHtpbmNsdWRlZGlyfS9kYjUxLy4KKwlsbiAtcyBkYjUxL2RiLmggJHtEfS8ke2luY2x1ZGVkaXJ9L2RiLmgKKwlsbiAtcyBkYjUxL2RiX2N4eC5oICR7RH0vJHtpbmNsdWRlZGlyfS9kYl9jeHguaAorCisJIyBUaGUgZG9jcyBlbmQgdXAgaW4gL3Vzci9kb2NzIC0gbm90IHJpZ2h0LgorCWlmIHRlc3QgLWQgIiR7RH0vJHtwcmVmaXh9L2RvY3MiCisJdGhlbgorCQlta2RpciAtcCAiJHtEfS8ke2RhdGFkaXJ9IgorCQl0ZXN0ICEgLWQgIiR7RH0vJHtkb2NkaXJ9IiB8fCBybSAtcmYgIiR7RH0vJHtkb2NkaXJ9IgorCQltdiAiJHtEfS8ke3ByZWZpeH0vZG9jcyIgIiR7RH0vJHtkb2NkaXJ9IgorCWZpCisKKwljaG93biAtUiByb290OnJvb3QgJHtEfQorfQorCitJTlNBTkVfU0tJUF8ke1BOfSA9ICJkZXYtc28iCitJTlNBTkVfU0tJUF8ke1BOfS1jeHggPSAiZGV2LXNvIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGJfNi4wLjMwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYl82LjAuMzAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ5ZGY2MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGJfNi4wLjMwLmJiCkBAIC0wLDAgKzEsMTE4IEBACisjIFZlcnNpb24gNiBvZiB0aGUgQmVya2VsZXkgREIgZnJvbSBPcmFjbGUgKGZvcm1lcmx5IFNsZWVweWNhdCkKKyMKKyMgQXQgcHJlc2VudCB0aGlzIHBhY2thZ2Ugb25seSBpbnN0YWxscyB0aGUgREIgY29kZQorIyBpdHNlbGYgKHNoYXJlZCBsaWJyYXJpZXMsIC5hIGluIHRoZSBkZXYgcGFja2FnZSksCisjIGRvY3VtZW50YXRpb24gYW5kIGhlYWRlcnMuCisjCisjIFRoZSBoZWFkZXJzIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgdGhvc2UgYXMgdjMKKyMgb2YgdGhlIERCLCBvbmx5IG9uZSB2ZXJzaW9uIGNhbiBiZSB1c2VkICpmb3IgZGV2KgorIyBhdCBvbmNlIC0gREIzIGFuZCBEQjYgY2FuIGJvdGggYmUgaW5zdGFsbGVkIG9uIHRoZQorIyBzYW1lIHN5c3RlbSBhdCB0aGUgc2FtZSB0aW1lIGlmIHJlYWxseSBuZWNlc3NhcnkuCitTRUNUSU9OID0gImxpYnMiCitTVU1NQVJZID0gIkJlcmtlbGV5IERhdGFiYXNlIHY2IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vcmFjbGUuY29tL3RlY2hub2xvZ3kvcHJvZHVjdHMvYmVya2VsZXktZGIvZGIvaW5kZXguaHRtbCIKK0xJQ0VOU0UgPSAiQUdQTC0zLjAiCitWSVJUVUFMX05BTUUgPz0gInZpcnR1YWwvZGIiCitSQ09ORkxJQ1RTXyR7UE59ID0gImRiMyIKKworUkVDSVBFX05PX1VQREFURV9SRUFTT04gPSAiVXBkYXRpbmcgdG8gNi4xLnggcmVxdWlyZXMgYWxzbyB1cGRhdGluZyBycG0gdG8gNS40LjE1IgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZC5vcmFjbGUuY29tL2JlcmtlbGV5LWRiL2RiLSR7UFZ9LnRhci5neiIKK1NSQ19VUkkgKz0gImZpbGU6Ly9hcm0tdGh1bWItbXV0ZXhfZGI1LnBhdGNoO3BhdGNoZGlyPS4uIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtcGFyYWxsZWwtYnVpbGQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLWxldC1saWJzb190YXJnZXQtZGVwZW5kLW9uLWJ0X3JlYy5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImFkMjhlYjg2YWQzMjAzYjU0MjI4NDRkYjE3OWM1ODViIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYwOGU0YjFjZjM5MGU5YmY1NGMwZWYwMGM1YmQ5Y2E3NmQzNmUyMjYxYjlmNGQzM2Q1NDUxNmYzZjZhMjBmZDIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLy4uL0xJQ0VOU0U7bWQ1PTFlYzhiMGIxN2NjMzE1MTNmZTM1YWIxMDcxNmY4NDkwIgorCitpbmhlcml0IGF1dG90b29scworCisjIFB1dCB2aXJ0dWFsL2RiIGluIGFueSBhcHByb3ByaWF0ZSBwcm92aWRlciBvZiBhCisjIHJlbGF0aW9uYWwgZGF0YWJhc2UsIHVzZSBpdCBhcyBhIGRlcGVuZGVuY3kgaW4KKyMgcGxhY2Ugb2YgYSBzcGVjaWZpYyBkYiBhbmQgdXNlOgorIworIyBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9kYgorIworIyB0byBzZWxlY3QgdGhlIGNvcnJlY3QgZGIgaW4gdGhlIGJ1aWxkIChkaXN0cm8pIC5jb25mCitQUk9WSURFUyArPSAiJHtWSVJUVUFMX05BTUV9IgorCisjIGJpdGJha2UgaXNuJ3QgcXVpdGUgY2xldmVyIGVub3VnaCB0byBkZWFsIHdpdGggc2xlZXB5Y2F0LAorIyB0aGUgZGlzdHJpYnV0aW9uIHNpdHMgaW4gdGhlIGV4cGVjdGVkIGRpcmVjdG9yeSwgYnV0IGFsbAorIyB0aGUgYnVpbGRzIG11c3Qgb2NjdXIgZnJvbSBhIHN1Yi1kaXJlY3RvcnkuICBUaGUgZm9sbG93aW5nCisjIHBlcnN1YWRlcyBiaXRiYWtlIHRvIGdvIHRvIHRoZSByaWdodCBwbGFjZQorUyA9ICIke1dPUktESVJ9L2RiLSR7UFZ9L2Rpc3QiCitCID0gIiR7V09SS0RJUn0vZGItJHtQVn0vYnVpbGRfdW5peCIKK1NQRFhfUyA9ICIke1dPUktESVJ9L2RiLSR7UFZ9IgorCisjIFRoZSBleGVjdXRhYmxlcyBnbyBpbiBhIHNlcGFyYXRlIHBhY2thZ2UgLSB0eXBpY2FsbHkgdGhlcmUKKyMgaXMgbm8gbmVlZCB0byBpbnN0YWxsIHRoZXNlIHVubGVzcyBkb2luZyByZWFsIGRhdGFiYXNlCisjIG1hbmFnZW1lbnQgb24gdGhlIHN5c3RlbS4KK2luaGVyaXQgbGliX3BhY2thZ2UKKworUEFDS0FHRVMgPSsgIiR7UE59LWN4eCIKK0ZJTEVTXyR7UE59LWN4eCA9ICIke2xpYmRpcn0vKmN4eCpzbyIKKworCisjIFRoZSBkZXYgcGFja2FnZSBoYXMgdGhlIC5zbyBsaW5rIChhcyBpbiBkYjMpIGFuZCB0aGUgLmEncyAtCisjIGl0IGlzIHRoZXJlZm9yZSBpbmNvbXBhdGlibGUgKGNhbm5vdCBiZSBpbnN0YWxsZWQgYXQgdGhlCisjIHNhbWUgdGltZSkgYXMgdGhlIGRiMyBwYWNrYWdlCisjIHNvcnQgb3V0IHRoZSAuc28gc2luY2UgdGhleSBkbyB2ZXJzaW9uIHByaW9yIHRvIHRoZSAuc28KK1NPTElCUyA9ICItNiouc28iCitGSUxFU19TT0xJQlNERVYgPSAiJHtsaWJkaXJ9L2xpYmRiLnNvICR7bGliZGlyfS9saWJkYl9jeHguc28iCisKKyNjb25maWd1cmF0aW9uIC0gc2V0IGluIGxvY2FsLmNvbmYgdG8gb3ZlcnJpZGUKKyMgQWxsIHRoZSAtLWRpc2FibGUtKiBvcHRpb25zIHJlcGxhY2UgLS1lbmFibGUtc21hbGxidWlsZCwgd2hpY2ggYnJlYWtzIGEgYnVuY2ggb2Ygc3R1ZmYgKGVnLiBwb3N0Zml4KQorREI2X0NPTkZJRyA/PSAiLS1lbmFibGUtb19kaXJlY3QgLS1kaXNhYmxlLWNyeXB0b2dyYXBoeSAtLWRpc2FibGUtcXVldWUgLS1kaXNhYmxlLXJlcGxpY2F0aW9uIC0tZGlzYWJsZS12ZXJpZnkgLS1kaXNhYmxlLWNvbXBhdDE4NSAtLWRpc2FibGUtc3FsIgorCitFWFRSQV9PRUNPTkYgPSAiJHtEQjZfQ09ORklHfSAtLWVuYWJsZS1zaGFyZWQgLS1lbmFibGUtY3h4IC0td2l0aC1zeXNyb290IgorCisjIE92ZXJyaWRlIHRoZSBNVVRFWCBzZXR0aW5nIGhlcmUsIHRoZSBQT1NJWCBsaWJyYXJ5IGlzCisjIHRoZSBkZWZhdWx0IC0gIlBPU0lYL3B0aHJlYWRzL2xpYnJhcnkiLgorIyBEb24ndCBpZ25vcmUgdGhlIG5pY2UgU1dQIGluc3RydWN0aW9uIG9uIHRoZSBBUk06CisjIFRoZXNlIGVuYWJsZSB0aGUgQVJNIGFzc2VtYmxlciBtdXRleCBjb2RlCitBUk1fTVVURVggPSAiLS13aXRoLW11dGV4PUFSTS9nY2MtYXNzZW1ibHkiCitNVVRFWCA9ICIiCitNVVRFWF9hcm0gPSAiJHtBUk1fTVVURVh9IgorTVVURVhfYXJtZWIgPSAiJHtBUk1fTVVURVh9IgorRVhUUkFfT0VDT05GICs9ICIke01VVEVYfSIKKworIyBDYW5jZWwgdGhlIHNpdGUgc3R1ZmYgLSBpdCdzIHNldCBmb3IgZGIzIGFuZCBkZXN0cm95cyB0aGUKKyMgY29uZmlndXJlLgorQ09ORklHX1NJVEUgPSAiIgorZG9fY29uZmlndXJlKCkgeworCWdudS1jb25maWdpemUgLS1mb3JjZSAke1N9CisJZXhwb3J0IFNUUklQPSJ0cnVlIgorCW9lX3J1bmNvbmYKK30KKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworCXNlZCAtaSAtZSAnc3xoYXJkY29kZV9pbnRvX2xpYnM9eWVzfGhhcmRjb2RlX2ludG9fbGlicz1ub3wnIFwKKwkJJHtCfS9saWJ0b29sCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCW1rZGlyIC1wICR7RH0vJHtpbmNsdWRlZGlyfS9kYjYwCisJbXYgJHtEfS8ke2luY2x1ZGVkaXJ9L2RiLmggJHtEfS8ke2luY2x1ZGVkaXJ9L2RiNjAvLgorCW12ICR7RH0vJHtpbmNsdWRlZGlyfS9kYl9jeHguaCAke0R9LyR7aW5jbHVkZWRpcn0vZGI2MC8uCisJbG4gLXMgZGI2MC9kYi5oICR7RH0vJHtpbmNsdWRlZGlyfS9kYi5oCisJbG4gLXMgZGI2MC9kYl9jeHguaCAke0R9LyR7aW5jbHVkZWRpcn0vZGJfY3h4LmgKKworCSMgVGhlIGRvY3MgZW5kIHVwIGluIC91c3IvZG9jcyAtIG5vdCByaWdodC4KKwlpZiB0ZXN0IC1kICIke0R9LyR7cHJlZml4fS9kb2NzIgorCXRoZW4KKwkJbWtkaXIgLXAgIiR7RH0vJHtkYXRhZGlyfSIKKwkJdGVzdCAhIC1kICIke0R9LyR7ZG9jZGlyfSIgfHwgcm0gLXJmICIke0R9LyR7ZG9jZGlyfSIKKwkJbXYgIiR7RH0vJHtwcmVmaXh9L2RvY3MiICIke0R9LyR7ZG9jZGlyfSIKKwlmaQorCisJY2hvd24gLVIgcm9vdDpyb290ICR7RH0KK30KKworSU5TQU5FX1NLSVBfJHtQTn0gPSAiZGV2LXNvIgorSU5TQU5FX1NLSVBfJHtQTn0tY3h4ID0gImRldi1zbyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RlYmlhbnV0aWxzL2RlYmlhbnV0aWxzXzQuNS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kZWJpYW51dGlscy9kZWJpYW51dGlsc180LjUuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjY2NWZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kZWJpYW51dGlscy9kZWJpYW51dGlsc180LjUuMS5iYgpAQCAtMCwwICsxLDQ3IEBACitTVU1NQVJZID0gIk1pc2NlbGxhbmVvdXMgdXRpbGl0aWVzIHNwZWNpZmljIHRvIERlYmlhbiIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBTTUFJTF9HUEwiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kZWJpYW4vY29weXJpZ2h0O21kNT1mMDFhNTIwM2Q1MDUxMmZjNDgzMGI0MzMyYjY5NmE5ZiIKKworU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vZC8ke0JQTn0vJHtCUE59XyR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ4NzUyNDUxOGNkNTgzM2E2YTRmNzAwN2I1ZDFiZDViIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImE1MzFjMjNlMDEwNWZlMDFjZmE5Mjg0NTdhODM0M2ExZTk0N2UyNjIxYjNjZDRkMDVmNGU5NjU2MDIwYzYzYjciCisKK1MgPSAiJHtXT1JLRElSfS8ke0JQTn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgc2VkIC1pIC1lICdzOnRlbXBmaWxlLjEgd2hpY2guMTp3aGljaC4xOmcnICR7U30vTWFrZWZpbGUuYW0KK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgaWYgWyAiJHtiYXNlX2JpbmRpcn0iICE9ICIke2JpbmRpcn0iIF07IHRoZW4KKyAgICAgICAgIyBEZWJpYW4gcGxhY2VzIHNvbWUgdXRpbHMgaW50byAke2Jhc2VfYmluZGlyfSBhcyBkb2VzIGJ1c3lib3gKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKyAgICAgICAgZm9yIGFwcCBpbiBydW4tcGFydHMgdGVtcGZpbGU7IGRvCisgICAgICAgICAgICBtdiAke0R9JHtiaW5kaXJ9LyRhcHAgJHtEfSR7YmFzZV9iaW5kaXJ9LyRhcHAKKyAgICAgICAgZG9uZQorICAgIGZpCit9CisKKyMgTm90ZSB0aGF0IHdlIHBhY2thZ2UgdGhlIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgbmFtZS4KKyMKK1BBQ0tBR0VTID0rICIke1BOfS1ydW4tcGFydHMiCitGSUxFU18ke1BOfS1ydW4tcGFydHMgPSAiJHtiYXNlX2JpbmRpcn0vcnVuLXBhcnRzLmRlYmlhbnV0aWxzIgorCitSREVQRU5EU18ke1BOfSArPSAiJHtQTn0tcnVuLXBhcnRzIgorCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZPSIxMDAiCitBTFRFUk5BVElWRV8ke1BOfSA9ICJhZGQtc2hlbGwgaW5zdGFsbGtlcm5lbCByZW1vdmUtc2hlbGwgc2F2ZWxvZyB0ZW1wZmlsZSB3aGljaCIKK0FMVEVSTkFUSVZFXyR7UE59LXJ1bi1wYXJ0cyA9ICJydW4tcGFydHMiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVthZGQtc2hlbGxdPSIke3NiaW5kaXJ9L2FkZC1zaGVsbCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtpbnN0YWxsa2VybmVsXT0iJHtzYmluZGlyfS9pbnN0YWxsa2VybmVsIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3JlbW92ZS1zaGVsbF09IiR7c2JpbmRpcn0vcmVtb3ZlLXNoZWxsIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3J1bi1wYXJ0c109IiR7YmFzZV9iaW5kaXJ9L3J1bi1wYXJ0cyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzYXZlbG9nXT0iJHtiaW5kaXJ9L3NhdmVsb2ciCitBTFRFUk5BVElWRV9MSU5LX05BTUVbdGVtcGZpbGVdPSIke2Jhc2VfYmluZGlyfS90ZW1wZmlsZSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt3aGljaF09IiR7YmluZGlyfS93aGljaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZW5jaGFudC9lbmNoYW50XzEuNi4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9lbmNoYW50L2VuY2hhbnRfMS42LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdhNDc2MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZW5jaGFudC9lbmNoYW50XzEuNi4wLmJiCkBAIC0wLDAgKzEsMzIgQEAKK1NVTU1BUlkgPSAiRW5jaGFudCBTcGVsbCBjaGVja2VyIEFQSSBMaWJyYXJ5IgorU0VDVElPTiA9ICJsaWJzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5hYmlzb3VyY2UuY29tL3Byb2plY3RzL2VuY2hhbnQvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEuYWJpc291cmNlLmNvbS9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9RW5jaGFudCIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9ZGZjYmFiZjkxMzFkYzlhOTVmZWJlZjY3NTNhMjk1OGIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2VuY2hhbnQuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTI5O21kNT04ZDg4MWNhYTFkMzc1MjM1NjdlMWQ4ZjcyNjY3NWExOCIKKworREVQRU5EUyA9ICJhc3BlbGwgZ2xpYi0yLjAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitQUiA9ICJyMyIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmFiaXNvdXJjZS5jb20vZG93bmxvYWRzL2VuY2hhbnQvJHtQVn0vZW5jaGFudC0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkZTExMDExYWZmODAxZGM2MTA0MjgyODA0MWZiNTljNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyZmFjOWU3YmU3ZTk0MjRiMmM1NTcwZDhhZmZlNTY4ZGIzOWY3NTcyYzEwZWQ0OGQ0ZTEzY2RkZjAzZjcwOTdmIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWFzcGVsbC1wcmVmaXg9JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fSBcCisJCS0tZW5hYmxlLWFzcGVsbCBicl9jdl9iaW5yZWxvYz1ubyBcCisJCSIKKworZXhwb3J0IENYWEZMQUdTICs9ICIgLUwke1NUQUdJTkdfTElCRElSfSAtbHN0ZGMrKyAiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfSAke2xpYmRpcn0vKiR7U09MSUJTfSAke2RhdGFkaXJ9LyR7QlBOfSAke2xpYmRpcn0vJHtCUE59Lyouc28iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS8ke0JQTn0vKntTT0xJQlNERVZ9ICR7bGliZGlyfS8ke0JQTn0vKi5sYSIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS8qLmEiCisKK1JERVBFTkRTXyR7UE59ICs9ICJhc3BlbGwiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9maWxlcy9wdGVzdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9maWxlcy9wdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTIzNmZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2ZpbGVzL3B0ZXN0LnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0FkZCBpbnN0YWxsLXB0ZXN0IHJ1bGVzLgorCitTaWduZWQtb2ZmLWJ5OiBKb3NlcCBQdWlnZGVtb250IDxqb3NlcC5wdWlnZGVtb250QGVuZWEuY29tPgorU2lnbmVkLW9mZi1ieTogTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBlbmVhLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitkaWZmIC11ciBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KKy0tLSBhL01ha2VmaWxlLmFtCTIwMTEtMDgtMTYgMTA6MTM6MTAuMDAwMDAwMDAwICswMjAwCisrKysgYi9NYWtlZmlsZS5hbQkyMDEzLTA0LTEyIDE4OjAyOjE2LjQ3MzcxNTg3MyArMDIwMAorQEAgLTMxLDMgKzMxLDggQEAKKyAJZD1gZGF0ZSAnKyVkLyVtLyVZJ2A7IFwKKyAJc2VkICdzfC9cKkBESVNUX0RBVEVAXCovfCInIiQkZCInInwnICQoc3JjZGlyKS9zcmMvdmVyc2lvbi5jID4gXAorIAkJJChkaXN0ZGlyKS9zcmMvdmVyc2lvbi5jCisrCisraW5zdGFsbC1wdGVzdDoKKysJQGZvciBzdWJkaXIgaW4gJChTVUJESVJTKTsgZG8gXAorKwkJJChNQUtFKSAtQyAkJHN1YmRpciBERVNURElSPSQoREVTVERJUikvJCRzdWJkaXIgJEA7IFwKKysJZG9uZQorZGlmZiAtdXIgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxlLmFtCistLS0gYS90ZXN0cy9NYWtlZmlsZS5hbQkyMDExLTExLTExIDE5OjM5OjQyLjAwMDAwMDAwMCArMDEwMAorKysrIGIvdGVzdHMvTWFrZWZpbGUuYW0JMjAxMy0wNC0xMiAxODozMDo1Ny4wNjYzMDEwMzcgKzAyMDAKK0BAIC0xMzIsNCArMTMyLDE0IEBACisgZHRkZWxfTERBREQgPSAuLi9zcmMvbGliZ2RibS5sYSAuLi9jb21wYXQvbGliZ2RibV9jb21wYXQubGEKKyBkX2NyZWF0X2NlX0xEQUREID0gLi4vc3JjL2xpYmdkYm0ubGEgLi4vY29tcGF0L2xpYmdkYm1fY29tcGF0LmxhCisgCisrYnVpbGR0ZXN0czogJChjaGVja19QUk9HUkFNUykgJChURVNUU1VJVEUpCisgCisraW5zdGFsbC1wdGVzdDogJChjaGVja19QUk9HUkFNUykgJChURVNUU1VJVEUpCisrCUAkKElOU1RBTEwpIC1kICQoREVTVERJUikKKysJQGZvciBmaWxlIGluICReOyBkbyBcCisrCQlpZiBbIC14IC5saWJzLyQkZmlsZSBdOyB0aGVuIFwKKysJCQkkKElOU1RBTExfUFJPR1JBTSkgLmxpYnMvJCRmaWxlICQoREVTVERJUikvJCRmaWxlOyBcCisrCQllbHNlIFwKKysJCQkkKElOU1RBTExfUFJPR1JBTSkgJCRmaWxlICQoREVTVERJUikgOyBcCisrCQlmaSBcCisrCWRvbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9maWxlcy9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZmlsZXMvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYxNWRhODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZmlsZXMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL3NoCisjCisjIFRoaXMgc2NyaXB0IGlzIHVzZWQgdG8gcnVuIHRoZSBnbWRiIHRlc3Qgc3VpdGUKKworY2QgdGVzdHMKKworLi90ZXN0c3VpdGUgQVVUT1RFU1RfUEFUSD0kUFdEIGFic19idWlsZGRpcj0kUFdEIENPTVBBVD0xIHwgc2VkICdzL15bXjAtOV0qXChbMC05XVwrXCk6IFwoLipcKVwob2tcfHBhc3NcfHNraXBwZWRcfGZhaWxcfEZBSUxFRFwpXCguKlwpJC9cMzogXDIgXDQvO3MvIFwrLyAvZztzL15vay9QQVNTLztzL15za2lwcGVkL1NLSVAvO3MvXmZhaWwvRkFJTC87cy9eRkFJTEVEL0ZBSUwvJwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm0tMS44LjMvbGRmbGFncy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtLTEuOC4zL2xkZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNjYjQzYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtLTEuOC4zL2xkZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorT2JleSBMREZMQUdTCisKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29sZCB2ZXJzaW9uXQorCistLS0gZ2RibS0xLjguMy5vcmlnL01ha2VmaWxlLmluCisrKysgZ2RibS0xLjguMy9NYWtlZmlsZS5pbgorQEAgLTE1NiwxMiArMTU2LDEyIEBAIGluc3RhbGwtY29tcGF0OgorCisgbGliZ2RibS5sYTogJChMT0JKUykgZ2RibS5oCisJcm0gLWYgbGliZ2RibS5sYQorLQkkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpIC1vIGxpYmdkYm0ubGEgLXJwYXRoICQobGliZGlyKSBcCisrCSQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDQykgJChMREZMQUdTKSAtbyBsaWJnZGJtLmxhIC1ycGF0aCAkKGxpYmRpcikgXAorCQktdmVyc2lvbi1pbmZvICQoU0hMSUJfVkVSKSAkKExPQkpTKQorCisgbGliZ2RibV9jb21wYXQubGE6ICQoQ19MT0JKUykgZ2RibS5oCisJcm0gLWYgbGliZ2RibV9jb21wYXQubGEKKy0JJChMSUJUT09MKSAtLW1vZGU9bGluayAkKENDKSAtbyBsaWJnZGJtX2NvbXBhdC5sYSAtcnBhdGggJChsaWJkaXIpIFwKKysJJChMSUJUT09MKSAtLW1vZGU9bGluayAkKENDKSAkKExERkxBR1MpIC1vIGxpYmdkYm1fY29tcGF0LmxhIC1ycGF0aCAkKGxpYmRpcikgXAorCQktdmVyc2lvbi1pbmZvICQoU0hMSUJfVkVSKSAkKENfTE9CSlMpCisKKyBnZGJtLmg6CWdkYm0ucHJvdG8gZ2RibWVycm5vLmggZ2RibS5wcm90bzIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtLTEuOC4zL2xpYnRvb2wtbW9kZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtLTEuOC4zL2xpYnRvb2wtbW9kZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjlkMDRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm0tMS44LjMvbGlidG9vbC1tb2RlLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gZ2RibS0xLjguMy9NYWtlZmlsZS5pbi5vcmlnCTIwMDYtMDItMTYgMTU6MTc6MjUuMDAwMDAwMDAwICswMDAwCisrKysgZ2RibS0xLjguMy9NYWtlZmlsZS5pbgkyMDA2LTAyLTE2IDE1OjE4OjA4LjAwMDAwMDAwMCArMDAwMAorQEAgLTEzMSw3ICsxMzEsNyBAQAorIAkkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChsaWJkaXIpIFwKKyAJCSQoREVTVERJUikkKGluY2x1ZGVkaXIpICQoREVTVERJUikkKG1hbjNkaXIpIFwKKyAJCSQoREVTVERJUikkKGluZm9kaXIpCistCSQoTElCVE9PTCkgJChJTlNUQUxMKSAtYyBsaWJnZGJtLmxhICQoREVTVERJUikkKGxpYmRpcikvbGliZ2RibS5sYQorKwkkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgLWMgbGliZ2RibS5sYSAkKERFU1RESVIpJChsaWJkaXIpL2xpYmdkYm0ubGEKKyAJJChJTlNUQUxMX0RBVEEpIGdkYm0uaCBcCisgCQkkKERFU1RESVIpJChpbmNsdWRlZGlyKS9nZGJtLmgKKyAJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9nZGJtLjMgXAorQEAgLTE0Miw3ICsxNDIsNyBAQAorIGluc3RhbGwtY29tcGF0OgorIAkkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChsaWJkaXIpIFwKKyAJCSQoREVTVERJUikkKGluY2x1ZGVkaXIpCistCSQoTElCVE9PTCkgJChJTlNUQUxMKSAtYyBsaWJnZGJtX2NvbXBhdC5sYSBcCisrCSQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAtYyBsaWJnZGJtX2NvbXBhdC5sYSBcCisgCQkkKERFU1RESVIpJChsaWJkaXIpL2xpYmdkYm1fY29tcGF0LmxhCisgCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZGJtLmggXAorIAkJJChERVNURElSKSQoaW5jbHVkZWRpcikvZGJtLmgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtLTEuOC4zL21ha2VmaWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm0tMS44LjMvbWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY5MTQ1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtLTEuOC4zL21ha2VmaWxlLnBhdGNoCkBAIC0wLDAgKzEsNjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisjCisjIFBhdGNoIG1hbmFnZWQgYnkgaHR0cDovL3d3dy5tbi1sb2dpc3Rpay5kZS91bnN1cHBvcnRlZC9weGEyNTAvcGF0Y2hlcgorIworCistLS0gZ2RibS0xLjguMy9NYWtlZmlsZS5pbn5tYWtlZmlsZQorKysrIGdkYm0tMS44LjMvTWFrZWZpbGUuaW4KK0BAIC0yMiw2ICsyMiw3IEBACisgVEVYSTJEVkkgPSB0ZXhpMmR2aQorIAorIERFRlMgPQorK0RFU1RESVIgPQorIAorICMgV2hlcmUgdGhlIHN5c3RlbSBbbl1kYm0gcm91dGluZXMgYXJlLi4uCisgTElCUyA9IEBMSUJTQCAtbGMKK0BAIC0xMjcsMjYgKzEyOCwyNiBAQAorIHByb2dzOiAkKFBST0dTKQorIAorIGluc3RhbGw6IGxpYmdkYm0ubGEgZ2RibS5oIGdkYm0uaW5mbworLQkkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkKElOU1RBTExfUk9PVCkkKGxpYmRpcikgXAorLQkJJChJTlNUQUxMX1JPT1QpJChpbmNsdWRlZGlyKSAkKElOU1RBTExfUk9PVCkkKG1hbjNkaXIpIFwKKy0JCSQoSU5TVEFMTF9ST09UKSQoaW5mb2RpcikKKy0JJChMSUJUT09MKSAkKElOU1RBTEwpIC1jIGxpYmdkYm0ubGEgJChJTlNUQUxMX1JPT1QpJChsaWJkaXIpL2xpYmdkYm0ubGEKKy0JJChJTlNUQUxMX0RBVEEpIC1vICQoQklOT1dOKSAtZyAkKEJJTkdSUCkgZ2RibS5oIFwKKy0JCSQoSU5TVEFMTF9ST09UKSQoaW5jbHVkZWRpcikvZ2RibS5oCistCSQoSU5TVEFMTF9EQVRBKSAtbyAkKEJJTk9XTikgLWcgJChCSU5HUlApICQoc3JjZGlyKS9nZGJtLjMgXAorLQkJJChJTlNUQUxMX1JPT1QpJChtYW4zZGlyKS9nZGJtLjMKKy0JJChJTlNUQUxMX0RBVEEpIC1vICQoQklOT1dOKSAtZyAkKEJJTkdSUCkgJChzcmNkaXIpL2dkYm0uaW5mbyBcCistCQkkKElOU1RBTExfUk9PVCkkKGluZm9kaXIpL2dkYm0uaW5mbworKwkkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChsaWJkaXIpIFwKKysJCSQoREVTVERJUikkKGluY2x1ZGVkaXIpICQoREVTVERJUikkKG1hbjNkaXIpIFwKKysJCSQoREVTVERJUikkKGluZm9kaXIpCisrCSQoTElCVE9PTCkgJChJTlNUQUxMKSAtYyBsaWJnZGJtLmxhICQoREVTVERJUikkKGxpYmRpcikvbGliZ2RibS5sYQorKwkkKElOU1RBTExfREFUQSkgZ2RibS5oIFwKKysJCSQoREVTVERJUikkKGluY2x1ZGVkaXIpL2dkYm0uaAorKwkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2dkYm0uMyBcCisrCQkkKERFU1RESVIpJChtYW4zZGlyKS9nZGJtLjMKKysJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9nZGJtLmluZm8gXAorKwkJJChERVNURElSKSQoaW5mb2RpcikvZ2RibS5pbmZvCisgCisgaW5zdGFsbC1jb21wYXQ6CistCSQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoSU5TVEFMTF9ST09UKSQobGliZGlyKSBcCistCQkkKElOU1RBTExfUk9PVCkkKGluY2x1ZGVkaXIpCisrCSQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoREVTVERJUikkKGxpYmRpcikgXAorKwkJJChERVNURElSKSQoaW5jbHVkZWRpcikKKyAJJChMSUJUT09MKSAkKElOU1RBTEwpIC1jIGxpYmdkYm1fY29tcGF0LmxhIFwKKy0JCSQoSU5TVEFMTF9ST09UKSQobGliZGlyKS9saWJnZGJtX2NvbXBhdC5sYQorLQkkKElOU1RBTExfREFUQSkgLW8gJChCSU5PV04pIC1nICQoQklOR1JQKSAkKHNyY2RpcikvZGJtLmggXAorLQkJJChJTlNUQUxMX1JPT1QpJChpbmNsdWRlZGlyKS9kYm0uaAorLQkkKElOU1RBTExfREFUQSkgLW8gJChCSU5PV04pIC1nICQoQklOR1JQKSAkKHNyY2RpcikvbmRibS5oIFwKKy0JCSQoSU5TVEFMTF9ST09UKSQoaW5jbHVkZWRpcikvbmRibS5oCisrCQkkKERFU1RESVIpJChsaWJkaXIpL2xpYmdkYm1fY29tcGF0LmxhCisrCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZGJtLmggXAorKwkJJChERVNURElSKSQoaW5jbHVkZWRpcikvZGJtLmgKKysJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9uZGJtLmggXAorKwkJJChERVNURElSKSQoaW5jbHVkZWRpcikvbmRibS5oCisgCisgI2xpYmdkYm0uYTogJChPQkpTKSBnZGJtLmgKKyAjCXJtIC1mIGxpYmdkYm0uYQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm1fMS4xMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtXzEuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRmOGM1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtXzEuMTEuYmIKQEAgLTAsMCArMSw0MyBAQAorU1VNTUFSWSA9ICJLZXkvdmFsdWUgZGF0YWJhc2UgbGlicmFyeSB3aXRoIGV4dGVuc2libGUgaGFzaGluZyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nZGJtLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yNDFkYTFiOWZlNDJlNjQyY2JiMmMyNGQ1ZTBjNGQyNCIKKworCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ2RibS9nZGJtLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vcHRlc3QucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjcyYzgzMjY4MGNmMDk5OWNhZWRiZTViMjY1YzhjMWJkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhkOTEyZjQ0ZjA1ZDBiMTVhNGE1ZDk2YTc2Zjg1MmU5MDVkMDUxYmI4ODAyMmZjZGZkOThiNDNiZTA5M2UzYzMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbyBsaWJfcGFja2FnZSBwdGVzdAorCisjIE5lZWRlZCBmb3IgZGJtIHB5dGhvbiBtb2R1bGUKK0VYVFJBX09FQ09ORiA9ICItZW5hYmxlLWxpYmdkYm0tY29tcGF0IgorCisjIFN0b3AgcHJlc2VuY2Ugb2YgZGJtL25iZG0gb24gdGhlIGhvc3QgY29udGFtaW5hdGluZyBidWlsZHMKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9saWJfbmRibV9tYWluPW5vIGFjX2N2X2xpYl9kYm1fbWFpbj1ubyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgIyBDcmVhdGUgYSBzeW1saW5rIHRvIG5kYm0uaCBhbmQgZ2RibS5oIGluIGluY2x1ZGUvZ2RibSB0byBsZXQgb3RoZXIgcGFja2FnZXMgdG8gZmluZAorICAgICMgdGhlc2UgaGVhZGVycworICAgIGluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0vZ2RibQorICAgIGxuIC1zZiAuLi9uZGJtLmggJHtEfS8ke2luY2x1ZGVkaXJ9L2dkYm0vbmRibS5oCisgICAgbG4gLXNmIC4uL2dkYm0uaCAke0R9LyR7aW5jbHVkZWRpcn0vZ2RibS9nZGJtLmgKK30KKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gImRpZmZ1dGlscyIKKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKyAgICBvZV9ydW5tYWtlIC1DIHRlc3RzIGJ1aWxkdGVzdHMKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LWNvbXBhdCBcCisgICAgICAgICAgICAiCitGSUxFU18ke1BOfS1jb21wYXQgPSAiJHtsaWJkaXJ9L2xpYmdkYm1fY29tcGF0JHtTT0xJQlN9IFwKKyAgICAgICAgICAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtXzEuOC4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm1fMS44LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYwMWI2YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtXzEuOC4zLmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiS2V5L3ZhbHVlIGRhdGFiYXNlIGxpYnJhcnkgd2l0aCBleHRlbnNpYmxlIGhhc2hpbmciCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2RibS8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ4ZTIwZWVjZTIxNGRmOGVmOTUzZWQ1ODU3ODYyMTUwIgorCitQUiA9ICJyNCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2dkYm0vZ2RibS0ke1BWfS50YXIuZ3ogXAorCSAgIGZpbGU6Ly9tYWtlZmlsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWJ0b29sLW1vZGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGRmbGFncy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjFkMWIxZDVjMDI0NWIxYzAwYWZmOTJkYTc1MWU5YWExIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNjMzQwMzM4YTJlMjhiNDAwNThhYjllYjUzNTRhMjFkNTNmODhhMTU4MmVhMjFiYTBiYjE4NWMzN2EyODFkYzkiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfS9nZGJtCisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7U30vZGJtLmggJHtEfSR7aW5jbHVkZWRpcn0vCisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7U30vbmRibS5oICR7RH0ke2luY2x1ZGVkaXJ9LworICAgICMgQ3JlYXRlIGEgc3ltbGluayB0byBuZGJtLmggYW5kIGdkYm0uaCBpbiBpbmNsdWRlL2dkYm0gdG8gbGV0IG90aGVyIHBhY2thZ2VzIHRvIGZpbmQKKyAgICAjIHRoZXNlIGhlYWRlcnMKKyAgICBsbiAtc2YgLi4vbmRibS5oICR7RH0vJHtpbmNsdWRlZGlyfS9nZGJtL25kYm0uaAorICAgIGxuIC1zZiAuLi9nZGJtLmggJHtEfS8ke2luY2x1ZGVkaXJ9L2dkYm0vZ2RibS5oCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNC4yLjEvZGlzYWJsZS1zdGRjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTQuMi4xL2Rpc2FibGUtc3RkYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGVjYjFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTQuMi4xL2Rpc2FibGUtc3RkYy5wYXRjaApAQCAtMCwwICsxLDM5IEBACitUaGlzIHBhdGNoIHdhcyByZW1vdmVkIGluIGYxODFjNmNlOGIzIHdoZW4gZ21wIDQuMi4xIHdhcyBtaXN0YWtlbmx5Citkcm9wcGVkLgorCitVcHN0cmVhbSBpcyBub3QgaW50ZXJlc3RlZCBpbiBwYXRjaGVzIGZvciBhbmNpZW50IHZlcnNpb25zLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CisKKyMgImV4dGVybiBpbmxpbmUiIGluIHRyYWRpdGlvbmFsIGdjYyBtZWFucyB0aGF0IHRoZSBmdW5jdGlvbiBzaG91bGQgYmUgCisjIGlubGluZWQgd2hlcmV2ZXIgaXQncyBzZWVuLCB3aGlsZSBpbiBDOTksICJleHRlcm4gaW5saW5lIiBtZWFucyB0aGF0IGkKKyMgdGhlIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGlubGluZWQgd2hlcmUgdGhlIGlubGluZSBkZWZpbml0aW9uIGlzIAorIyBzZWVuIHdoaWxlIGluIG90aGVyIHBsYWNlcyBpdCdzIG5vdCBpbmxpbmVkOgorIyBodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLzIwMDYtMTEvbXNnMDAwMDYuaHRtbAorIworIyBnbXAgY2hlY2tzICItLXN0ZD1nbnU5OSIgdG8gdXNlIEM5OSBjb252ZW50aW9uIGhvd2V2ZXIgaXQgaW50ZXJuYWxseSAKKyMgZGVmaW5lcyBzb21lICJleHRlcm4gaW5saW5lIiBmdW5jdGlvbnMgaW4gZ21wLmgsIHdoaWNoIGlzIGluY2x1ZGVkCisjIGJ5IG1haW5seSAuYyBmaWxlcyBhbmQgZmluYWxseSBsZWFkIGEgZmxvb2Qgb2YgcmVkZWZpbml0aW9uIGZ1bmN0aW9uCisjIGVycm9ycyB3aGVuIGxpbmtpbmcgb2JqZWN0cyB0b2dldGhlci4KKyMKKyMgU28gZGlzYWJsZSBDOTkvQU5TSSBkZXRlY3Rpb24gdG8gc3RpY2sgdG8gdHJhbmRpdGlvbmFsIGdjYyBiZWhhdmlvcgorIworIyBieSBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4sIDIwMTAtMDgtMTMKKyMKKyMgKHRoaXMgcGF0Y2ggaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCitpbmRleCA0NTBjYzkyLi5hYWIwYjU5IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC0xODY5LDkgKzE4NjksNyBAQCBBQ19TVUJTVChERUZOX0xPTkdfTE9OR19MSU1CKQorIAorICMgVGhlIEMgY29tcGlsZXIgYW5kIHByZXByb2Nlc3NvciwgcHV0IGludG8gQU5TSSBtb2RlIGlmIHBvc3NpYmxlLgorIEFDX1BST0dfQ0MKKy1BQ19QUk9HX0NDX1NUREMKKyBBQ19QUk9HX0NQUAorLUdNUF9IX0FOU0kKKyAKKyAKKyAjIFRoZSBDIGNvbXBpbGVyIG9uIHRoZSBidWlsZCBzeXN0ZW0sIGFuZCBhc3NvY2lhdGVkIHRlc3RzLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTQuMi4xL2dtcF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNC4yLjEvZ21wX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2FlZDA1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTQuMi4xL2dtcF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorYXV0b21ha2UgMS4xMiBoYXMgZGVwcmljYXRlZCBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0CisKK3RoaXMgcGF0Y2ggYXZvaWRzIHRoZXNlIGtpbmRzIG9mIGVycm9yczoKKworfCBjb25maWd1cmUuaW46MjI0MDogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorfCBNYWtlZmlsZS5hbToyODogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNS8wMgorCisKK1RoaXMgcGF0Y2ggd2FzIHJlbW92ZWQgaW4gZjE4MWM2Y2U4YjMgd2hlbiBnbXAgNC4yLjEgd2FzIG1pc3Rha2VubHkKK2Ryb3BwZWQuCisKK1Vwc3RyZWFtIGlzIG5vdCBpbnRlcmVzdGVkIGluIHBhdGNoZXMgZm9yIGFuY2llbnQgdmVyc2lvbnMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKworCitJbmRleDogZ21wLTQuMi4xL2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdtcC00LjIuMS5vcmlnL2NvbmZpZ3VyZS5pbgorKysrIGdtcC00LjIuMS9jb25maWd1cmUuaW4KK0BAIC02Nyw3ICs2Nyw3IEBAIGRubAorIGRubCAgTm90ZSB0aGF0IHRoZXJlJ3MgYSBjb3B5IG9mIHRoZXNlIG9wdGlvbnMgaW4gdGhlIHRvcC1sZXZlbCBNYWtlZmlsZS5hbSwKKyBkbmwgIHNvIHVwZGF0ZSB0aGVyZSB0b28gaWYgY2hhbmdpbmcgYW55dGhpbmcuCisgZG5sCistQU1fSU5JVF9BVVRPTUFLRShbMS44IGdudSBuby1kZXBlbmRlbmNpZXMgJCh0b3BfYnVpbGRkaXIpL2Fuc2kya25yXSkKKytBTV9JTklUX0FVVE9NQUtFKFsxLjggZ251IG5vLWRlcGVuZGVuY2llc10pCisgQU1fQ09ORklHX0hFQURFUihjb25maWcuaDpjb25maWcuaW4pCisgQU1fTUFJTlRBSU5FUl9NT0RFCisgCitAQCAtMjAyMiw5ICsyMDIyLDYgQEAgZmkKKyBlY2hvICIgICAgICBNUE5fUEFUSD1cIiRwYXRoXCIiCisgCisgCistIyBBdXRvbWFrZSBhbnNpMmtuciBzdXBwb3J0LgorLUFNX0NfUFJPVE9UWVBFUworLQorIEdNUF9QUk9HX0FSCisgR01QX1BST0dfTk0KKyAKK0luZGV4OiBnbXAtNC4yLjEvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbXAtNC4yLjEub3JpZy9NYWtlZmlsZS5hbQorKysrIGdtcC00LjIuMS9NYWtlZmlsZS5hbQorQEAgLTI3LDcgKzI3LDcgQEAKKyAjIE1ha2VmaWxlcyBpbiBzdWJkaXJlY3RvcmllcywgYnV0IGhlcmUgd2UgbXVzdCBvbWl0IGl0IHNvIGF1dG9tYWtlIGdpdmVzCisgIyB0aGUgYWN0dWFsIGFuc2kya25yIGJ1aWxkIHJ1bGUsIG5vdCAiY2QgJCh0b3BfYnVpbGRkaXIpICYmIG1ha2UgYW5zaTJrbnIiLgorICMKKy1BVVRPTUFLRV9PUFRJT05TID0gMS44IGdudSBuby1kZXBlbmRlbmNpZXMgYW5zaTJrbnIKKytBVVRPTUFLRV9PUFRJT05TID0gMS44IGdudSBuby1kZXBlbmRlbmNpZXMKKyAKKyAKKyAjIExpYnRvb2wgLXZlcnNpb24taW5mbyBmb3IgbGliZ21wLmxhIGFuZCBsaWJtcC5sYS4gIFNlZSAiVmVyc2lvbmluZyIgaW4gdGhlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvYW1kNjQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvYW1kNjQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY0ZDEyZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9hbWQ2NC5wYXRjaApAQCAtMCwwICsxLDE4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGdtcC01LjAuMy9sb25nbG9uZy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ21wLTUuMC4zLm9yaWcvbG9uZ2xvbmcuaAorKysrIGdtcC01LjAuMy9sb25nbG9uZy5oCitAQCAtOTk0LDggKzk5NCwxMCBAQCBleHRlcm4gVVd0eXBlIF9fTVBOKHVkaXZfcXJubmQpIF9QUk9UTyAoCisgICAgY291bnQgaXMgb25seSBhbiBpbnQuICovCisgI2RlZmluZSBjb3VudF90cmFpbGluZ196ZXJvcyhjb3VudCwgeCkJCQkJCVwKKyAgIGRvIHsJCQkJCQkJCQlcCisrICAgIFVESXR5cGUgX19jYnRtcDsJCQkJCQkJXAorICAgICBBU1NFUlQgKCh4KSAhPSAwKTsJCQkJCQkJXAorLSAgICBfX2FzbV9fICgiYnNmcSAlMSwlcTAiIDogIj1yIiAoY291bnQpIDogInJtIiAoKFVESXR5cGUpKHgpKSk7CVwKKysgICAgX19hc21fXyAoImJzZnEgJTEsJTAiIDogIj1yIiAoX19jYnRtcCkgOiAicm0iICgoVURJdHlwZSkoeCkpKTsJXAorKyAgICAoY291bnQpID0gX19jYnRtcDsJCQkJCQkJXAorICAgfSB3aGlsZSAoMCkKKyAjZW5kaWYgLyogeDg2XzY0ICovCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvYXBwZW5kX3VzZXJfcHJvdmlkZWRfZmxhZ3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvYXBwZW5kX3VzZXJfcHJvdmlkZWRfZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUxMzg2YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9hcHBlbmRfdXNlcl9wcm92aWRlZF9mbGFncy5wYXRjaApAQCAtMCwwICsxLDUyIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworQXBwZW5kIHRoZSB1c2VyIHByb3ZpZGVkIGZsYWdzIHRvIHRoZSBhdXRvLWRldGVjdGVkIG9uZXMuCisKK1NpZ25lZC1vZmYtYnk6IExhdXJlbnRpdSBQYWxjdSA8bGF1cmVudGl1LnBhbGN1QGludGVsLmNvbT4KKworSW5kZXg6IGdtcC01LjEuMS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbXAtNS4xLjEub3JpZy9jb25maWd1cmUuYWMJMjAxNC0wMi0xMSAxNTowNTo0NC45MjUyMDI0MDMgKzAyMDAKKysrKyBnbXAtNS4xLjEvY29uZmlndXJlLmFjCTIwMTQtMDItMTEgMTU6MTk6MDMuOTE4NTExMzk4ICswMjAwCitAQCAtMTc0NSw4ICsxNzQ1LDEyIEBACisgRU9GCisgCisgCistdGVzdF9DRkxBR1M9JHtDRkxBR1Mrc2V0fQorLXRlc3RfQ1BQRkxBR1M9JHtDUFBGTEFHUytzZXR9CisrdGVzdF9DRkxBR1M9CisrdGVzdF9DUFBGTEFHUz0KKysKKyt1c2VyX0NGTEFHUz0kQ0ZMQUdTCisrdXNlcl9DUFBGTEFHUz0kQ1BQRkxBR1MKKyt1c2VyX0NYWEZMQUdTPSRDWFhGTEFHUworIAorIGZvciBhYmkgaW4gJGFiaWxpc3Q7IGRvCisgICBhYmlfbGFzdD0iJGFiaSIKK0BAIC0yMTc1LDcgKzIxNzksNyBAQAorIHdhbnRfY3h4PW5vCisgQUNfUFJPR19DWFgKKyBpZiB0ZXN0ICRlbmFibGVfY3h4ICE9IG5vOyB0aGVuCistICB0ZXN0X0NYWEZMQUdTPSR7Q1hYRkxBR1Mrc2V0fQorKyAgdGVzdF9DWFhGTEFHUz0KKyAKKyAgIGVjaG8gIkNYWEZMQUdTIGNob3NlbiBieSBhdXRvY29uZjogJENYWEZMQUdTIiA+JkFTX01FU1NBR0VfTE9HX0ZEKCkKKyAgIGN4eGZsYWdzX2FjX3Byb2dfY3h4PSRDWFhGTEFHUworQEAgLTIyMDIsNyArMjIwNiw3IEBACisgICAjIEF1dG9tYWtlIGluY2x1ZGVzICRDUFBGTEFHUyBpbiBhIEMrKyBjb21waWxlLCBzbyB3ZSBkbyB0aGUgc2FtZSBoZXJlLgorICAgIworICAgZm9yIGN4eGZsYWdzX2Nob2ljZSBpbiAkY3h4ZmxhZ3NfbGlzdDsgZG8KKy0gICAgZXZhbCBDWFhGTEFHUz1cIlwkY3h4ZmxhZ3NfJGN4eGZsYWdzX2Nob2ljZVwiCisrICAgIGV2YWwgQ1hYRkxBR1M9XCJcJGN4eGZsYWdzXyRjeHhmbGFnc19jaG9pY2UgJHVzZXJfQ1hYRkxBR1NcIgorICAgICBHTVBfUFJPR19DWFhfV09SS1MoJENYWCAkQ1BQRkxBR1MgJENYWEZMQUdTLAorICAgICAgIFt3YW50X2N4eD15ZXMKKyAgICAgICBicmVha10pCitAQCAtMjI5Miw2ICsyMjk2LDggQEAKKyAjICBkb25lCisgZmkKKyAKKytDRkxBR1M9IiRDRkxBR1MgJHVzZXJfQ0ZMQUdTIgorK0NQUEZMQUdTPSIkQ1BQRkxBR1MgJHVzZXJfQ1BQRkxBR1MiCisgCisgY2F0ID4mQVNfTUVTU0FHRV9MT0dfRkQoKSA8PEVPRgorIERlY2lkZWQ6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvY29uZmlndXJlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMC4wL2NvbmZpZ3VyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDlkYTNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMC4wL2NvbmZpZ3VyZS5wYXRjaApAQCAtMCwwICsxLDIyMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1VwZGF0ZWQgdG8gYXBwbHkgdG8gZ21wLTUuMS4wCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CisKKy0tLQorIGFjaW5jbHVkZS5tNCB8IDMyICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tCisgY29uZmlndXJlLmFjIHwgMjYgKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDI2IGluc2VydGlvbnMoKyksIDMyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYWNpbmNsdWRlLm00IGIvYWNpbmNsdWRlLm00CitpbmRleCAyMjc3MTJhLi4xOTlhYTZmIDEwMDY0NAorLS0tIGEvYWNpbmNsdWRlLm00CisrKysgYi9hY2luY2x1ZGUubTQKK0BAIC00MCwyOSArNDAsMjkgQEAgZG5sICAgIGFfb3V0LmV4ZSAtIE9wZW5WTVMgREVDIEMgY2FsbGVkIHZpYSBHTlYgd3JhcHBlciAoZ252LnNvdXJjZWZvcmdlLm5ldCkKKyBkbmwgICAgY29uZnRlc3QuZXhlIC0gdmFyaW91cyBET1MgY29tcGlsZXJzCisgCisgCistZGVmaW5lKElBNjRfUEFUVEVSTiwKKytkZWZpbmUoW0lBNjRfUEFUVEVSTl0sCisgW1tpYTY0Ki0qLSogfCBpdGFuaXVtLSotKiB8IGl0YW5pdW0yLSotKl1dKQorIAorIGRubCAgTmVlZCB0byBiZSBjYXJlZnVsIG5vdCB0byBtYXRjaCBtNjgxMSwgbTY4MTIsIG02OGhjMTEgYW5kIG02OGhjMTIsIGFsbAorIGRubCAgb2Ygd2hpY2ggY29uZmlnLnN1YiBhY2NlcHRzLiAgKFRob3VnaCBub25lIG9mIHdoaWNoIGFyZSBsaWtlbHkgdG8gd29yaworIGRubCAgd2l0aCBHTVAuKQorIGRubAorLWRlZmluZShNNjhLX1BBVFRFUk4sCisrZGVmaW5lKFtNNjhLX1BBVFRFUk5dLAorIFtbbTY4ay0qLSogfCBtNjhbMC05XVswLTldWzAtOV0tKi0qXV0pCisgCistZGVmaW5lKFBPV0VSUEM2NF9QQVRURVJOLAorK2RlZmluZShbUE9XRVJQQzY0X1BBVFRFUk5dLAorIFtbcG93ZXJwYzY0LSotKiB8IHBvd2VycGM2NGxlLSotKiB8IHBvd2VycGM2MjAtKi0qIHwgcG93ZXJwYzYzMC0qLSogfCBwb3dlcnBjOTcwLSotKiB8IHBvd2VyWzMtOV0tKi0qXV0pCisgCistZGVmaW5lKFMzOTBfUEFUVEVSTiwKKytkZWZpbmUoW1MzOTBfUEFUVEVSTl0sCisgW1tzMzkwLSotKiB8IHo5MDBlc2EtKi0qIHwgejk5MGVzYS0qLSogfCB6OWVzYS0qLSogfCB6MTBlc2EtKi0qIHwgejE5NmVzYS0qLSpdXSkKKyAKKy1kZWZpbmUoUzM5MFhfUEFUVEVSTiwKKytkZWZpbmUoW1MzOTBYX1BBVFRFUk5dLAorIFtbczM5MHgtKi0qIHwgejkwMC0qLSogfCB6OTkwLSotKiB8IHo5LSotKiB8IHoxMC0qLSogfCB6MTk2LSotKl1dKQorIAorLWRlZmluZShYODZfUEFUVEVSTiwKKytkZWZpbmUoW1g4Nl9QQVRURVJOXSwKKyBbW2k/ODYqLSotKiB8IGtbNS04XSotKi0qIHwgcGVudGl1bSotKi0qIHwgYXRobG9uLSotKiB8IHZpYWMzKi0qLSogfCBnZW9kZSotKi0qIHwgYXRvbS0qLSpdXSkKKyAKKy1kZWZpbmUoWDg2XzY0X1BBVFRFUk4sCisrZGVmaW5lKFtYODZfNjRfUEFUVEVSTl0sCisgW1thdGhsb242NC0qLSogfCBrOC0qLSogfCBrMTAtKi0qIHwgYm9iY2F0LSotKiB8IGphZ3Vhci0qLSogfCBidWxsZG96ZXItKi0qIHwgcGlsZWRyaXZlci0qLSogfCBzdGVhbXJvbGxlci0qLSogfCBleGNhdmF0b3ItKi0qIHwgcGVudGl1bTQtKi0qIHwgYXRvbS0qLSogfCBjb3JlMi0qLSogfCBjb3JlaSotKi0qIHwgeDg2XzY0LSotKiB8IG5hbm8tKi0qXV0pCisgCisgZG5sICBHTVBfRkFUX1NVRkZJWChEU1RWQVIsIERJUkVDVE9SWSkKK0BAIC04MCw3ICs4MCw3IEBAIGRubCAgICAgIHg4NiAgICAgICAgIC0+ICB4ODYKKyBkbmwgICAgICB4ODYvazYgICAgICAtPiAgazYKKyBkbmwgICAgICB4ODYvazYvbW14ICAtPiAgazZfbW14CisgCistZGVmaW5lKEdNUF9GQVRfU1VGRklYLAorK2RlZmluZShbR01QX0ZBVF9TVUZGSVhdLAorIFtbJDE9YGVjaG8gJDIgfCBzZWQgLWUgJy9cLy9zOl5bXi9dKi86OicgLWUgJ3M6W1xcL106XzpnJ2BdXSkKKyAKKyAKK0BAIC04OSw3ICs4OSw3IEBAIGRubCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGRubCAgRW1pdCBjb2RlIHRvIHJlbW92ZSBhbnkgb2NjdXJyZW5jZSBvZiBJVEVNIGZyb20gJExJU1RWQVIuICBJVEVNIGNhbiBiZSBhCisgZG5sICBzaGVsbCBleHByZXNzaW9uIGxpa2UgJGZvbyBpZiBkZXNpcmVkLgorIAorLWRlZmluZShHTVBfUkVNT1ZFX0ZST01fTElTVCwKKytkZWZpbmUoW0dNUF9SRU1PVkVfRlJPTV9MSVNUXSwKKyBbcmVtb3ZlX2Zyb21fbGlzdF90bXA9CisgZm9yIHJlbW92ZV9mcm9tX2xpc3RfaSBpbiAkW11bJDFdOyBkbworICAgaWYgdGVzdCAkcmVtb3ZlX2Zyb21fbGlzdF9pID0gWyQyXTsgdGhlbiA6OworQEAgLTEwNSwxMiArMTA1LDEyIEBAIGRubCAgR01QX1NUUklQX1BBVEgoc3ViZGlyKQorIGRubCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGRubCAgU3RyaXAgZW50cmllcyAqL3N1YmRpciBmcm9tICRwYXRoIGFuZCAkZmF0X3BhdGguCisgCistZGVmaW5lKEdNUF9TVFJJUF9QQVRILAorK2RlZmluZShbR01QX1NUUklQX1BBVEhdLAorIFtHTVBfU1RSSVBfUEFUSF9WQVIocGF0aCwgWyQxXSkKKyBHTVBfU1RSSVBfUEFUSF9WQVIoZmF0X3BhdGgsIFskMV0pCisgXSkKKyAKKy1kZWZpbmUoR01QX1NUUklQX1BBVEhfVkFSLAorK2RlZmluZShbR01QX1NUUklQX1BBVEhfVkFSXSwKKyBbdG1wX3BhdGg9CisgZm9yIGkgaW4gJFtdWyQxXTsgZG8KKyAgIGNhc2UgJGkgaW4KK0BAIC0xMzEsNyArMTMxLDcgQEAgZG5sCisgZG5sICBEdW1teSB2YWx1ZSBmb3IgR01QX0xJTUJfQklUUyBpcyBlbm91Z2gKKyBkbmwgIGZvciBhbGwgY3VycmVudCBjb25maWd1cmUtdGltZSB1c2VzIG9mIGdtcC5oLgorIAorLWRlZmluZShHTVBfSU5DTFVERV9HTVBfSCwKKytkZWZpbmUoW0dNUF9JTkNMVURFX0dNUF9IXSwKKyBbWyNkZWZpbmUgX19HTVBfV0lUSElOX0NPTkZJR1VSRSAxICAgLyogaWdub3JlIHRlbXBsYXRlIHN0dWZmICovCisgI2RlZmluZSBHTVBfTkFJTF9CSVRTICRHTVBfTkFJTF9CSVRTCisgI2RlZmluZSBHTVBfTElNQl9CSVRTIDEyMworQEAgLTE0Niw3ICsxNDYsNyBAQCBkbmwgIEV4cGFuZCBhdCBhdXRvY29uZiB0aW1lIHRvIHRoZSB2YWx1ZSBvZiBhICIjZGVmaW5lIE5BTUUiIGZyb20gdGhlIGdpdmVuCisgZG5sICBGSUxFLiAgVGhlIHJlZ2V4cHMgaGVyZSBhcmVuJ3QgdmVyeSBydWdnZWQsIGJ1dCBhcmUgZW5vdWdoIGZvciBnbXAuCisgZG5sICAvZGV2L251bGwgYXMgYSBwYXJhbWV0ZXIgcHJldmVudHMgYSBoYW5nIGlmICQyIGlzIGFjY2lkZW50YWxseSBvbWl0dGVkLgorIAorLWRlZmluZShHTVBfSEVBREVSX0dFVFZBTCwKKytkZWZpbmUoW0dNUF9IRUFERVJfR0VUVkFMXSwKKyBbcGF0c3Vic3QocGF0c3Vic3QoCisgZXN5c2NtZChbZ3JlcCAiXiNkZWZpbmUgJDEgIiAkMiAvZGV2L251bGwgMj4vZGV2L251bGxdKSwKKyBbXi4qJDFbIAldK10sW10pLAorQEAgLTE2MCw3ICsxNjAsNyBAQCBkbmwgIFRoZSBnbXAgdmVyc2lvbiBudW1iZXIsIGV4dHJhY3RlZCBmcm9tIHRoZSAjZGVmaW5lcyBpbiBnbXAtaC5pbiBhdAorIGRubCAgYXV0b2NvbmYgdGltZS4gIFR3byBkaWdpdHMgbGlrZSAzLjAgaWYgcGF0Y2hsZXZlbCA8PSAwLCBvciB0aHJlZSBkaWdpdHMKKyBkbmwgIGxpa2UgMy4wLjEgaWYgcGF0Y2hsZXZlbCA+IDAuCisgCistZGVmaW5lKEdNUF9WRVJTSU9OLAorK2RlZmluZShbR01QX1ZFUlNJT05dLAorIFtHTVBfSEVBREVSX0dFVFZBTChfX0dOVV9NUF9WRVJTSU9OLGdtcC1oLmluKVtdZG5sCisgLkdNUF9IRUFERVJfR0VUVkFMKF9fR05VX01QX1ZFUlNJT05fTUlOT1IsZ21wLWguaW4pW11kbmwKKyAuR01QX0hFQURFUl9HRVRWQUwoX19HTlVfTVBfVkVSU0lPTl9QQVRDSExFVkVMLGdtcC1oLmluKV0pCitAQCAtMTUyNCw3ICsxNTI0LDkgQEAgZXNhYworIGVjaG8gWyJkZWZpbmUoPENPTkZJR19UT1BfU1JDRElSPiw8XGAkdG1wJz4pIl0gPj4kZ21wX3RtcGNvbmZpZ200CisgCisgIyBBbGwgQ1BVcyB1c2UgYXNtLWRlZnMubTQKKy1lY2hvIFsiaW5jbHVkZV1bKENPTkZJR19UT1BfU1JDRElSXGAvbXBuL2FzbS1kZWZzLm00JykiXSA+PiRnbXBfdG1wY29uZmlnbTRpCisrZWNobyAtbiBbImluY2x1ZGUoIl0gPj4kZ21wX3RtcGNvbmZpZ200aQorK2VjaG8gLW4gWyJDT05GSUdfVE9QX1NSQ0RJUlxgL21wbi9hc20tZGVmcy5tNCciXSA+PiRnbXBfdG1wY29uZmlnbTRpCisrZWNobyBbIikiXSA+PiRnbXBfdG1wY29uZmlnbTRpCisgXSkKKyAKKyAKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDY0YjJjNTAuLmYwN2I4MjEgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTM5LDE0ICszOSw2IEBAIEFDX1JFVklTSU9OKCRSZXZpc2lvbiQpCisgQUNfUFJFUkVRKDIuNTkpCisgQUNfSU5JVChHTlUgTVAsIEdNUF9WRVJTSU9OLCBbZ21wLWJ1Z3NAZ21wbGliLm9yZywgc2VlIGh0dHBzOi8vZ21wbGliLm9yZy9tYW51YWwvUmVwb3J0aW5nLUJ1Z3MuaHRtbF0sIGdtcCkKKyBBQ19DT05GSUdfU1JDRElSKGdtcC1pbXBsLmgpCistbTRfcGF0dGVybl9mb3JiaWQoW15bIFx0XSpHTVBfXSkKKy1tNF9wYXR0ZXJuX2FsbG93KEdNUF9MREZMQUdTKQorLW00X3BhdHRlcm5fYWxsb3coR01QX0xJTUJfQklUUykKKy1tNF9wYXR0ZXJuX2FsbG93KEdNUF9NUEFSQU1fSF9TVUdHRVNUKQorLW00X3BhdHRlcm5fYWxsb3coR01QX05BSUxfQklUUykKKy1tNF9wYXR0ZXJuX2FsbG93KEdNUF9OVU1CX0JJVFMpCistbTRfcGF0dGVybl9hbGxvdyhHTVBfTk9OU1REX0FCSSkKKy1tNF9wYXR0ZXJuX2FsbG93KEdNUF9DUFVfVFlQRSkKKyAKKyAjIElmIC0tdGFyZ2V0IGlzIG5vdCB1c2VkIHRoZW4gJHRhcmdldF9hbGlhcyBpcyBlbXB0eSwgYnV0IGlmIHNheQorICMgIi4vY29uZmlndXJlIGF0aGxvbi1wYy1mcmVlYnNkMy41IiBpcyB1c2VkLCB0aGVuIGFsbCB0aHJlZSBvZgorQEAgLTM0OCw3ICszNDAsNyBAQCBBSF9WRVJCQVRJTShbSEFWRV9IT1NUX0NQVV8xXSwKKyAjIEFmdGVyIEdNUCBzcGVjaWZpYyBzZWFyY2hlcyBhbmQgdGVzdHMsIHRoZSBzdGFuZGFyZCBhdXRvY29uZiBBQ19QUk9HX0NDIGlzCisgIyBjYWxsZWQuICBVc2VyIHNlbGVjdGlvbnMgb2YgQ0MgZXRjIGFyZSByZXNwZWN0ZWQuCisgIworLSMgQ2FyZSBpcyB0YWtlbiBub3QgdG8gdXNlIG1hY3JvcyBsaWtlIEFDX1RSWV9DT01QSUxFIGR1cmluZyB0aGUgR01QCisrIyBDYXJlIGlzIHRha2VuIG5vdCB0byB1c2UgbWFjcm9zIGxpa2UgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbW11dKV0sW10sW10pIGR1cmluZyB0aGUgR01QCisgIyBwcmUtdGVzdGluZywgc2luY2UgdGhleSBvZiBjb3Vyc2UgZGVwZW5kIG9uIEFDX1BST0dfQ0MsIGFuZCBhbHNvIHNvbWUgb2YKKyAjIHRoZW0gY2FjaGUgdGhlaXIgcmVzdWx0cywgd2hpY2ggaXMgbm90IHdhbnRlZC4KKyAjCitAQCAtNDQwLDcgKzQzMiw3IEBAIGFiaWxpc3Q9InN0YW5kYXJkIgorICMgRklYTUU6IFdlJ2QgbGlrZSB0byBwcmVmZXIgYW4gQU5TSSBjb21waWxlciwgcGVyaGFwcyBieSBwcmVmZXJyaW5nCisgIyBjODkgb3ZlciBjYyBoZXJlLiAgQnV0IG5vdGUgdGhhdCBvbiBIUC1VWCBjODkgcHJvdmlkZXMgYSBjYXN0cmF0ZWQKKyAjIGVudmlyb25tZW50LCBhbmQgd291bGQgd2FudCB0byBiZSBleGNsdWRlZCBzb21laG93LiAgTWF5YmUKKy0jIEFDX1BST0dfQ0NfU1REQyBhbHJlYWR5IGRvZXMgZW5vdWdoIHRvIHN0aWNrIGNjIGludG8gQU5TSSBtb2RlIGFuZAorKyMgIGFscmVhZHkgZG9lcyBlbm91Z2ggdG8gc3RpY2sgY2MgaW50byBBTlNJIG1vZGUgYW5kCisgIyB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5LgorICMKKyBjY2xpc3Q9ImdjYyBjYyIKK0BAIC0xODQzLDcgKzE4MzUsNyBAQCBlc2FjCisgQ0ZMQUdTX29yX3Vuc2V0PSR7Q0ZMQUdTLScodW5zZXQpJ30KKyBDUFBGTEFHU19vcl91bnNldD0ke0NQUEZMQUdTLScodW5zZXQpJ30KKyAKKy1jYXQgPiZBQ19GRF9DQyA8PEVPRgorK2NhdCA+JkFTX01FU1NBR0VfTE9HX0ZEKCkgPDxFT0YKKyBVc2VyOgorIEFCST0kQUJJCisgQ0M9JENDCitAQCAtMjI2NCw3ICsyMjU2LDYgQEAgQUNfU1VCU1QoREVGTl9MT05HX0xPTkdfTElNQikKKyAKKyAjIFRoZSBDIGNvbXBpbGVyIGFuZCBwcmVwcm9jZXNzb3IsIHB1dCBpbnRvIEFOU0kgbW9kZSBpZiBwb3NzaWJsZS4KKyBBQ19QUk9HX0NDCistQUNfUFJPR19DQ19TVERDCisgQUNfUFJPR19DUFAKKyAKKyAKK0BAIC0yMjg2LDExICsyMjc3LDExIEBAIEFDX1NVQlNUKENDQVMpCisgCisgIyBUaGUgQysrIGNvbXBpbGVyLCBpZiBkZXNpcmVkLgorIHdhbnRfY3h4PW5vCisrQUNfUFJPR19DWFgKKyBpZiB0ZXN0ICRlbmFibGVfY3h4ICE9IG5vOyB0aGVuCisgICB0ZXN0X0NYWEZMQUdTPSR7Q1hYRkxBR1Mrc2V0fQorLSAgQUNfUFJPR19DWFgKKyAKKy0gIGVjaG8gIkNYWEZMQUdTIGNob3NlbiBieSBhdXRvY29uZjogJENYWEZMQUdTIiA+JkFDX0ZEX0NDCisrICBlY2hvICJDWFhGTEFHUyBjaG9zZW4gYnkgYXV0b2NvbmY6ICRDWFhGTEFHUyIgPiZBU19NRVNTQUdFX0xPR19GRCgpCisgICBjeHhmbGFnc19hY19wcm9nX2N4eD0kQ1hYRkxBR1MKKyAgIGN4eGZsYWdzX2xpc3Q9YWNfcHJvZ19jeHgKKyAKK0BAIC0yNDEyLDcgKzI0MDMsNyBAQCBpZiB0ZXN0ICIkZW5hYmxlX2Fzc2VtYmx5IiA9ICJubyI7IHRoZW4KKyBmaQorIAorIAorLWNhdCA+JkFDX0ZEX0NDIDw8RU9GCisrY2F0ID4mQVNfTUVTU0FHRV9MT0dfRkQoKSA8PEVPRgorIERlY2lkZWQ6CisgQUJJPSRBQkkKKyBDQz0kQ0MKK0BAIC0zNzgxLDcgKzM3NzIsNyBAQCBHTVBfRklOSVNICisgIyBGSVhNRTogVXBjb21pbmcgdmVyc2lvbiBvZiBhdXRvY29uZi9hdXRvbWFrZSBtYXkgbm90IGxpa2UgYnJva2VuIGxpbmVzLgorICMgICAgICAgIFJpZ2h0IG5vdyBhdXRvbWFrZSBpc24ndCBhY2NlcHRpbmcgdGhlIG5ldyBBQ19DT05GSUdfRklMRVMgc2NoZW1lLgorIAorLUFDX09VVFBVVChNYWtlZmlsZQkJCQkJCQlcCisrQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZQkJCQkJCQlcCisgICBtcGYvTWFrZWZpbGUgbXBuL01ha2VmaWxlIG1wcS9NYWtlZmlsZQkJCQlcCisgICBtcHovTWFrZWZpbGUgcHJpbnRmL01ha2VmaWxlIHNjYW5mL01ha2VmaWxlIHJhbmQvTWFrZWZpbGUgY3h4L01ha2VmaWxlIFwKKyAgIHRlc3RzL01ha2VmaWxlIHRlc3RzL2RldmVsL01ha2VmaWxlCQkJCQlcCitAQCAtMzc5MCw3ICszNzgxLDggQEAgQUNfT1VUUFVUKE1ha2VmaWxlCQkJCQkJCVwKKyAgIHRlc3RzL2N4eC9NYWtlZmlsZQkJCQkJCQlcCisgICBkb2MvTWFrZWZpbGUgdHVuZS9NYWtlZmlsZQkJCQkJCVwKKyAgIGRlbW9zL01ha2VmaWxlIGRlbW9zL2NhbGMvTWFrZWZpbGUgZGVtb3MvZXhwci9NYWtlZmlsZQkJXAorLSAgZ21wLmg6Z21wLWguaW4pCisrICBnbXAuaDpnbXAtaC5pbl0pCisrQUNfT1VUUFVUCisgCisgQUNfTVNHX05PVElDRShbc3VtbWFyeSBvZiBidWlsZCBvcHRpb25zOgorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvZ21wLTYuMC4wLXBwYzY0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMC4wL2dtcC02LjAuMC1wcGM2NC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTEzYjQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMC4wL2dtcC02LjAuMC1wcGM2NC5wYXRjaApAQCAtMCwwICsxLDI2IEBACisKK1NpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlcjgwOEBnbWFpbC5jb20+CisKK1RoaXMgcGF0Y2ggd2l0aCBwdWxsZWQgZnJvbSBnbXAuCitodHRwczovL2dtcGxpYi5vcmcvcmVwby9nbXAvcmV2LzRhNmQyNThiNDY3ZgorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisjIEhHIGNoYW5nZXNldCBwYXRjaAorIyBVc2VyIFRvcmJqb3JuIEdyYW5sdW5kIDx0ZWdlQGdtcGxpYi5vcmc+CisjIERhdGUgMTM5NTgzNTA2OCAtMzYwMAorIyBOb2RlIElEIDRhNmQyNThiNDY3ZjY2MWRhMDg5NGNjNjBlY2QwNjBmMmUzYzY3YzcKKyMgUGFyZW50ICAzMDFjZTI3ODg4MjZhMmQ0ZDI3MjViZDVjZjAxZTk5ODYzOGRiMzdhCitQcm92aWRlIGRlZmF1bHQgZm9yIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQuCisKK2RpZmYgLXIgMzAxY2UyNzg4ODI2IC1yIDRhNmQyNThiNDY3ZiBtcG4vcG93ZXJwYzY0L21vZGU2NC9nY2RfMS5hc20KKy0tLSBhL21wbi9wb3dlcnBjNjQvbW9kZTY0L2djZF8xLmFzbSAgICBUdWUgTWFyIDI1IDE1OjM0OjUyIDIwMTQgKzAxMDAKKysrKyBiL21wbi9wb3dlcnBjNjQvbW9kZTY0L2djZF8xLmFzbSAgICBXZWQgTWFyIDI2IDEyOjU3OjQ4IDIwMTQgKzAxMDAKK0BAIC00Myw2ICs0Myw5IEBACisgZGVmaW5lKGBuJywgICAgIGByNCcpCisgZGVmaW5lKGB2MCcsICAgIGByNScpCisKKytpZmRlZihgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCcsLAorKyAgYGRlZmluZShgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCcsMzApJykKKysKKyBFWFRFUk5fRlVOQyhtcG5fbW9kXzEpCisgRVhURVJOX0ZVTkMobXBuX21vZGV4YWN0XzFjX29kZCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC91c2UtaW5jbHVkZWRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC91c2UtaW5jbHVkZWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDkwNGEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMC4wL3VzZS1pbmNsdWRlZGlyLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ21wLTQuMi40L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ21wLTQuMi40Lm9yaWcvTWFrZWZpbGUuYW0JMjAwOC0wOS0xMCAxOTozMToyNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBnbXAtNC4yLjQvTWFrZWZpbGUuYW0JMjAwOS0wNy0wNiAyMDoxOToxOS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMDYsNyArMTA2LDcgQEAKKyAjIGJ1dCBhbnlvbmUga25vd2xlZGdhYmxlIGVub3VnaCB0byBiZSBwbGF5aW5nIHdpdGggZXhlY19wcmVmaXggd2lsbCBiZSBhYmxlCisgIyB0byBhZGRyZXNzIHRoYXQuCisgIworLWluY2x1ZGVleGVjZGlyID0gJChleGVjX3ByZWZpeCkvaW5jbHVkZQorK2luY2x1ZGVleGVjZGlyID0gJChpbmNsdWRlZGlyKQorIGluY2x1ZGVfSEVBREVSUyA9ICQoR01QWFhfSEVBREVSU19PUFRJT04pCisgbm9kaXN0X2luY2x1ZGVleGVjX0hFQURFUlMgPSBnbXAuaCAkKE1QQlNEX0hFQURFUlNfT1BUSU9OKQorIGxpYl9MVExJQlJBUklFUyA9IGxpYmdtcC5sYSAkKEdNUFhYX0xUTElCUkFSSUVTX09QVElPTikgJChNUEJTRF9MVExJQlJBUklFU19PUFRJT04pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzUyYTM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLmluYwpAQCAtMCwwICsxLDE2IEBACitTRUNUSU9OID0gImRldmVsIgorU1VNTUFSWSA9ICJHTlUgbXVsdGlwcmVjaXNpb24gYXJpdGhtZXRpYyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiR01QIGlzIGEgZnJlZSBsaWJyYXJ5IGZvciBhcmJpdHJhcnkgcHJlY2lzaW9uIGFyaXRobWV0aWMsIG9wZXJhdGluZyBvbiBzaWduZWQgaW50ZWdlcnMsIHJhdGlvbmFsIG51bWJlcnMsIGFuZCBmbG9hdGluZyBwb2ludCBudW1iZXJzIgorSE9NRVBBR0UgPSAiaHR0cDovL2dtcGxpYi5vcmcvIgorCitSRVZJU0lPTiA/PSAiIgorU1JDX1VSSSA9ICJodHRwczovL2dtcGxpYi5vcmcvZG93bmxvYWQvJHtCUE59LyR7QlB9JHtSRVZJU0lPTn0udGFyLmJ6MiIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tyZWFkbGluZV0gPSAiLS13aXRoLXJlYWRsaW5lPXllcywtLXdpdGgtcmVhZGxpbmU9bm8scmVhZGxpbmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXBfNC4yLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXBfNC4yLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI4YzAxYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcF80LjIuMS5iYgpAQCAtMCwwICsxLDE1IEBACityZXF1aXJlIGdtcC5pbmMKKworTElDRU5TRSA9ICJMR1BMdjIuMSsgJiBHUEx2MisiCitMSUNFTlNFXyR7UE59ID0gIkxHUEx2Mi4xKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODkyZjU2OWE1NTViYTljMDdhNTY4YTdjMGM0ZmE2M2EgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWZiYzA5MzkwMTg1N2ZjZDExOGYwNjVmOTAwOTgyYzI0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dtcC1oLmluO2JlZ2lubGluZT02O2VuZGxpbmU9MjE7bWQ1PWUwNTZmNzRhMTJjMzI3N2Q3MzBkYmNmYjg1ZDJjYTM0IgorCitTUkNfVVJJICs9ICJmaWxlOi8vZGlzYWJsZS1zdGRjLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9nbXBfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIFwKKyAgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjA5MWM1NmUwZTFjY2E2YjA5YjE3YjY5ZDQ3ZWYxOGUzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQwN2ZmY2IzN2VlY2VjMzVjNWVjNzI1MTZkMTBiMzVmZGY2ZTZmZWYxZmNmMWRjZDM3ZTMwYjhjYmY4YmY5NDEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXBfNi4wLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXBfNi4wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTliNjNlNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcF82LjAuMC5iYgpAQCAtMCwwICsxLDMzIEBACityZXF1aXJlIGdtcC5pbmMKKworTElDRU5TRT0iR1BMdjIrIHwgTEdQTHYzKyIKKworUkVWSVNJT049ImEiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MRVNTRVJ2MzttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjYgXAorICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HdjI7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyIKKworU1JDX1VSSSArPSAiZmlsZTovL2NvbmZpZ3VyZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYW1kNjQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3VzZS1pbmNsdWRlZGlyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hcHBlbmRfdXNlcl9wcm92aWRlZF9mbGFncy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZ21wLTYuMC4wLXBwYzY0LnBhdGNoIFwKKyAgICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJiN2ZmMmQ4OGNhZTdmODA4NWJkNTAwNjA5NmVlZDQ3MCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3ZjhlOWE4MDRiOWM2ZDA3MTY0Y2Y3NTQyMDdiZTgzOGVjZTEyMTk0MjVkNjRlMjhjZmEzZTcwZDVjNzU5YWFmIgorCithY3BhdGhzID0gIiIKKworRVhUUkFfT0VDT05GICs9ICIgLS1lbmFibGUtY3h4PWRldGVjdCIKKworUEFDS0FHRVMgPSsgImxpYmdtcHh4IgorRklMRVNfbGliZ21weHggPSAiJHtsaWJkaXJ9L2xpYmdtcHh4JHtTT0xJQlN9IgorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7CisgICAgICAgIHNlZCAtaSAic3wtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9IT1NUfXx8ZyIgJHtEfSR7aW5jbHVkZWRpcn0vZ21wLmgKK30KKworU1NUQVRFX1NDQU5fRklMRVMgKz0gImdtcC5oIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dub21lLWRlc2t0b3AtdGVzdGluZy9nbm9tZS1kZXNrdG9wLXRlc3RpbmcvMDAwMS1nc3lzdGVtLXN1YnByb2Nlc3MuYy1FbmFibGUtR05VLWV4dGVuc2lvbnMtaW4tc3lzdGVtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbm9tZS1kZXNrdG9wLXRlc3RpbmcvZ25vbWUtZGVza3RvcC10ZXN0aW5nLzAwMDEtZ3N5c3RlbS1zdWJwcm9jZXNzLmMtRW5hYmxlLUdOVS1leHRlbnNpb25zLWluLXN5c3RlbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDA2NjZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbm9tZS1kZXNrdG9wLXRlc3RpbmcvZ25vbWUtZGVza3RvcC10ZXN0aW5nLzAwMDEtZ3N5c3RlbS1zdWJwcm9jZXNzLmMtRW5hYmxlLUdOVS1leHRlbnNpb25zLWluLXN5c3RlbS5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIGIxZGUyYzYyOTBiYzA2NTFmZTg3YThjNGZiNTJlN2EwYTVmZTYzMjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCA1IE9jdCAyMDE0IDE2OjAxOjQ5IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGdzeXN0ZW0tc3VicHJvY2Vzcy5jOiBFbmFibGUgR05VIGV4dGVuc2lvbnMgaW4gc3lzdGVtICBDCisgbGlicmFyeQorCitUaGlzIHNob3VsZCBleHBvcnQgT19DTE9FWEVDIHdoZXJlIGl0IGlzIG9ubHkKK2F2YWlsYWJsZSB3aGVuIF9HTlVfU09VUkNFIGlzIGRlZmluZWQgLmUuZy4gdWNsaWJjIGJhc2VkIHN5c3RlbXMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLQorIHNyYy9saWJnc3lzdGVtL2dzeXN0ZW0tc3VicHJvY2Vzcy5jIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2xpYmdzeXN0ZW0vZ3N5c3RlbS1zdWJwcm9jZXNzLmMgYi9zcmMvbGliZ3N5c3RlbS9nc3lzdGVtLXN1YnByb2Nlc3MuYworaW5kZXggYTk2Nzg5Ni4uYTUyYTM2MiAxMDA2NDQKKy0tLSBhL3NyYy9saWJnc3lzdGVtL2dzeXN0ZW0tc3VicHJvY2Vzcy5jCisrKysgYi9zcmMvbGliZ3N5c3RlbS9nc3lzdGVtLXN1YnByb2Nlc3MuYworQEAgLTE4LDYgKzE4LDEwIEBACisgCisgI2luY2x1ZGUgImNvbmZpZy5oIgorIAorKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrI2VuZGlmCisrCisgI2RlZmluZSBfR1NZU1RFTV9OT19MT0NBTF9BTExPQworICNpbmNsdWRlICJsaWJnc3lzdGVtLmgiCisgCistLSAKKzIuMS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ25vbWUtZGVza3RvcC10ZXN0aW5nL2dub21lLWRlc2t0b3AtdGVzdGluZ18yMDE0LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dub21lLWRlc2t0b3AtdGVzdGluZy9nbm9tZS1kZXNrdG9wLXRlc3RpbmdfMjAxNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MmRlOTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dub21lLWRlc2t0b3AtdGVzdGluZy9nbm9tZS1kZXNrdG9wLXRlc3RpbmdfMjAxNC4xLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiVGVzdCBydW5uZXIgZm9yIEdOT01FLXN0eWxlIGluc3RhbGxlZCB0ZXN0cyIKK0hPTUVQQUdFID0gImh0dHBzOi8vd2lraS5nbm9tZS5vcmcvR25vbWVHb2Fscy9JbnN0YWxsZWRUZXN0cyIKK0xJQ0VOU0UgPSAiTEdQTHYyKyIKKworU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vJHtCUE59LyR7UFZ9LyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1nc3lzdGVtLXN1YnByb2Nlc3MuYy1FbmFibGUtR05VLWV4dGVuc2lvbnMtaW4tc3lzdGVtLnBhdGNoIFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiYTYwOGFkNzJhNzdlMjNhMWFlY2RmZDhkMDdhOTRiYWYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWEzZWVkNzM2NzhkZDIyZDA5ZDZhN2VjNGY4OTk1NTdkZjNlOGI0YTgwMmFmZmE3NmQwZjE2M2IzMTI4NjUzOSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2dub21lLWRlc2t0b3AtdGVzdGluZy1ydW5uZXIuYztlbmRsaW5lPTE5O21kNT02NzMxMWE2MDBiODNmZDAwNjhkZmM3ZTViODRmZmIzZiIKKworREVQRU5EUyA9ICJnbGliLTIuMCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BSID0gInIxIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tqb3VybmFsZF0gPSAiLS13aXRoLXN5c3RlbWQtam91cm5hbCwtLXdpdGhvdXQtc3lzdGVtZC1qb3VybmFsLHN5c3RlbWQsc3lzdGVtZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvQ1ZFLTIwMTMtNDI0Mi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvQ1ZFLTIwMTMtNDI0Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWFkZGNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9DVkUtMjAxMy00MjQyLnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKK0Zyb20gZTIyMDJmZjJiNzA0NjIzZWZjNjI3N2ZiNTI1NmU0ZTE1YmFjNTY3NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFdlcm5lciBLb2NoIDx3a0BnbnVwZy5vcmc+CitEYXRlOiBUaHUsIDI1IEp1bCAyMDEzIDExOjE3OjUyICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIE1pdGlnYXRlIGEgZmx1c2grcmVsb2FkIGNhY2hlIGF0dGFjayBvbiBSU0Egc2VjcmV0CisgZXhwb25lbnRzLgorCitjb21taXQgZTIyMDJmZjJiNzA0NjIzZWZjNjI3N2ZiNTI1NmU0ZTE1YmFjNTY3NiBmcm9tCitnaXQ6Ly9naXQuZ251cGcub3JnL2xpYmdjcnlwdC5naXQKKworKiBtcGkvbXBpLXBvdy5jIChnY3J5X21waV9wb3dtKTogQWx3YXlzIHBlcmZyb20gdGhlIG1waV9tdWwgZm9yCitleHBvbmVudHMgaW4gc2VjdXJlIG1lbW9yeS4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tCisKK1RoZSBhdHRhY2sgaXMgcHVibGlzaGVkIGFzIGh0dHA6Ly9lcHJpbnQuaWFjci5vcmcvMjAxMy80NDggOgorCitGbHVzaCtSZWxvYWQ6IGEgSGlnaCBSZXNvbHV0aW9uLCBMb3cgTm9pc2UsIEwzIENhY2hlIFNpZGUtQ2hhbm5lbAorQXR0YWNrIGJ5IFl1dmFsIFlhcm9tIGFuZCBLYXRyaW5hIEZhbGtuZXIuIDE4IEp1bHkgMjAxMy4KKworICBGbHVzaCtSZWxvYWQgaXMgYSBjYWNoZSBzaWRlLWNoYW5uZWwgYXR0YWNrIHRoYXQgbW9uaXRvcnMgYWNjZXNzIHRvCisgIGRhdGEgaW4gc2hhcmVkIHBhZ2VzLiBJbiB0aGlzIHBhcGVyIHdlIGRlbW9uc3RyYXRlIGhvdyB0byB1c2UgdGhlCisgIGF0dGFjayB0byBleHRyYWN0IHByaXZhdGUgZW5jcnlwdGlvbiBrZXlzIGZyb20gR251UEcuICBUaGUgaGlnaAorICByZXNvbHV0aW9uIGFuZCBsb3cgbm9pc2Ugb2YgdGhlIEZsdXNoK1JlbG9hZCBhdHRhY2sgZW5hYmxlcyBhIHNweQorICBwcm9ncmFtIHRvIHJlY292ZXIgb3ZlciA5OCUgb2YgdGhlIGJpdHMgb2YgdGhlIHByaXZhdGUga2V5IGluIGEKKyAgc2luZ2xlIGRlY3J5cHRpb24gb3Igc2lnbmluZyByb3VuZC4gVW5saWtlIHByZXZpb3VzIGF0dGFja3MsIHRoZQorICBhdHRhY2sgdGFyZ2V0cyB0aGUgbGFzdCBsZXZlbCBMMyBjYWNoZS4gQ29uc2VxdWVudGx5LCB0aGUgc3B5CisgIHByb2dyYW0gYW5kIHRoZSB2aWN0aW0gZG8gbm90IG5lZWQgdG8gc2hhcmUgdGhlIGV4ZWN1dGlvbiBjb3JlIG9mCisgIHRoZSBDUFUuIFRoZSBhdHRhY2sgaXMgbm90IGxpbWl0ZWQgdG8gYSB0cmFkaXRpb25hbCBPUyBhbmQgY2FuIGJlCisgIHVzZWQgaW4gYSB2aXJ0dWFsaXNlZCBlbnZpcm9ubWVudCwgd2hlcmUgaXQgY2FuIGF0dGFjayBwcm9ncmFtcworICBleGVjdXRpbmcgaW4gYSBkaWZmZXJlbnQgVk0uCisKK0luZGV4OiBnbnVwZy0xLjQuNy9tcGkvbXBpLXBvdy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMS40Ljcub3JpZy9tcGkvbXBpLXBvdy5jCisrKysgZ251cGctMS40LjcvbXBpL21waS1wb3cuYworQEAgLTIxMiw3ICsyMTIsMTMgQEAgbXBpX3Bvd20oIE1QSSByZXMsIE1QSSBiYXNlLCBNUEkgZXhwb25lbgorIAkJdHAgPSBycDsgcnAgPSB4cDsgeHAgPSB0cDsKKyAJCXJzaXplID0geHNpemU7CisgCistCQlpZiggKG1waV9saW1iX3NpZ25lZF90KWUgPCAwICkgeworKyAgICAgICAgICAgIC8qIFRvIG1pdGlnYXRlIHRoZSBZYXJvbS9GYWxrbmVyIGZsdXNoK3JlbG9hZCBjYWNoZQorKyAgICAgICAgICAgICAqIHNpZGUtY2hhbm5lbCBhdHRhY2sgb24gdGhlIFJTQSBzZWNyZXQgZXhwb25lbnQsIHdlIGRvCisrICAgICAgICAgICAgICogdGhlIG11bHRpcGxpY2F0aW9uIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIHRoZQorKyAgICAgICAgICAgICAqIGhpZ2gtYml0IG9mIEUuICBCdXQgdG8gYXZvaWQgdGhpcyBwZXJmb3JtYW5jZSBwZW5hbHR5CisrICAgICAgICAgICAgICogd2UgZG8gaXQgb25seSBpZiB0aGUgZXhwb25lbnQgaGFzIGJlZW4gc3RvcmVkIGluIHNlY3VyZQorKyAgICAgICAgICAgICAqIG1lbW9yeSBhbmQgd2UgY2FuIHRodXMgYXNzdW1lIGl0IGlzIGEgc2VjcmV0IGV4cG9uZW50LiAgKi8KKysJCWlmIChlc2VjIHx8IChtcGlfbGltYl9zaWduZWRfdCllIDwgMCkgeworIAkJICAgIC8qbXBpaGVscF9tdWwoIHhwLCBycCwgcnNpemUsIGJwLCBic2l6ZSApOyovCisgCQkgICAgaWYoIGJzaXplIDwgS0FSQVRTVUJBX1RIUkVTSE9MRCApIHsKKyAJCQltcGloZWxwX211bCggeHAsIHJwLCByc2l6ZSwgYnAsIGJzaXplICk7CitAQCAtMjI3LDYgKzIzMyw4IEBAIG1waV9wb3dtKCBNUEkgcmVzLCBNUEkgYmFzZSwgTVBJIGV4cG9uZW4KKyAJCQltcGloZWxwX2RpdnJlbSh4cCArIG1zaXplLCAwLCB4cCwgeHNpemUsIG1wLCBtc2l6ZSk7CisgCQkJeHNpemUgPSBtc2l6ZTsKKyAJCSAgICB9CisrCQl9CisrCQlpZiAoIChtcGlfbGltYl9zaWduZWRfdCllIDwgMCApIHsKKyAKKyAJCSAgICB0cCA9IHJwOyBycCA9IHhwOyB4cCA9IHRwOworIAkJICAgIHJzaXplID0geHNpemU7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L0NWRS0yMDEzLTQzNTEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L0NWRS0yMDEzLTQzNTEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI5ZWRlNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvQ1ZFLTIwMTMtNDM1MS5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiBnbnVwZy0xLjQuNy9nMTAvZ2V0a2V5LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuNy5vcmlnL2cxMC9nZXRrZXkuYwkyMDA3LTAzLTA1IDE2OjU0OjQxLjAwMDAwMDAwMCArMDgwMAorKysrIGdudXBnLTEuNC43L2cxMC9nZXRrZXkuYwkyMDEzLTExLTI4IDE0OjQxOjU5LjY0MDIxMjI0MCArMDgwMAorQEAgLTE0NTQsNyArMTQ1NCwxMSBAQAorIAorICAgICAgIGlmKGZsYWdzKQorIAlrZXlfdXNhZ2UgfD0gUFVCS0VZX1VTQUdFX1VOS05PV047CisrICAgICAgaWYgKCFrZXlfdXNhZ2UpCisrCWtleV91c2FnZSB8PSBQVUJLRVlfVVNBR0VfTk9ORTsKKyAgICAgfQorKyAgZWxzZSBpZiAocCkKKysgICAga2V5X3VzYWdlIHw9IFBVQktFWV9VU0FHRV9OT05FOworIAorICAgLyogV2Ugc2V0IFBVQktFWV9VU0FHRV9VTktOT1dOIHRvIGluZGljYXRlIHRoYXQgdGhpcyBrZXkgaGFzIGEKKyAgICAgIGNhcGFiaWxpdHkgdGhhdCB3ZSBkbyBub3QgaGFuZGxlLiAgVGhpcyBzZXJ2ZXMgdG8gZGlzdGluZ3Vpc2gKK0luZGV4OiBnbnVwZy0xLjQuNy9nMTAva2V5Z2VuLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuNy5vcmlnL2cxMC9rZXlnZW4uYwkyMDA3LTAyLTA1IDAwOjI3OjQwLjAwMDAwMDAwMCArMDgwMAorKysrIGdudXBnLTEuNC43L2cxMC9rZXlnZW4uYwkyMDEzLTExLTI4IDE0OjQzOjA1LjAxNjY3MDA5MiArMDgwMAorQEAgLTIwOSw5ICsyMDksNiBAQAorICAgICBpZiAodXNlICYgUFVCS0VZX1VTQUdFX0FVVEgpCisgICAgICAgICBidWZbMF0gfD0gMHgyMDsKKyAKKy0gICAgaWYgKCFidWZbMF0pIAorLSAgICAgICAgcmV0dXJuOworLQorICAgICBidWlsZF9zaWdfc3VicGt0IChzaWcsIFNJR1NVQlBLVF9LRVlfRkxBR1MsIGJ1ZiwgMSk7CisgfQorIAorSW5kZXg6IGdudXBnLTEuNC43L2luY2x1ZGUvY2lwaGVyLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuNy5vcmlnL2luY2x1ZGUvY2lwaGVyLmgJMjAwNi0wNC0yMSAyMDozOTo0OS4wMDAwMDAwMDAgKzA4MDAKKysrKyBnbnVwZy0xLjQuNy9pbmNsdWRlL2NpcGhlci5oCTIwMTMtMTEtMjggMTQ6NDk6MjQuMTU5MzIyNzQ0ICswODAwCitAQCAtNTIsNiArNTIsNyBAQAorICNkZWZpbmUgUFVCS0VZX1VTQUdFX0NFUlQgICAgNCAgICAgIC8qIGtleSBpcyBhbHNvIGdvb2QgdG8gY2VydGlmeSBvdGhlciBrZXlzKi8KKyAjZGVmaW5lIFBVQktFWV9VU0FHRV9BVVRIICAgIDggICAgICAvKiBrZXkgaXMgZ29vZCBmb3IgYXV0aGVudGljYXRpb24gKi8KKyAjZGVmaW5lIFBVQktFWV9VU0FHRV9VTktOT1dOIDEyOCAgICAvKiBrZXkgaGFzIGFuIHVua25vd24gdXNhZ2UgYml0ICovCisrI2RlZmluZSBQVUJLRVlfVVNBR0VfTk9ORSAgICAyNTYgICAgLyogTm8gdXNhZ2UgZ2l2ZW4uICovCisgCisgI2RlZmluZSBESUdFU1RfQUxHT19NRDUgICAgICAgMQorICNkZWZpbmUgRElHRVNUX0FMR09fU0hBMSAgICAgIDIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvQ1ZFLTIwMTMtNDU3Ni5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvQ1ZFLTIwMTMtNDU3Ni5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWEyMmY1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9DVkUtMjAxMy00NTc2LnBhdGNoCkBAIC0wLDAgKzEsMTUzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiBnbnVwZy0xLjQuNy9jaXBoZXIvZHNhLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuNy5vcmlnL2NpcGhlci9kc2EuYwkyMDA2LTEyLTEyIDAyOjI3OjIxLjAwMDAwMDAwMCArMDgwMAorKysrIGdudXBnLTEuNC43L2NpcGhlci9kc2EuYwkyMDE0LTAxLTIzIDExOjMwOjE3LjMwMDkxNTkxOSArMDgwMAorQEAgLTI4Nyw2ICsyODcsOCBAQAorICAgICBNUEkga2ludjsKKyAgICAgTVBJIHRtcDsKKyAKKysgICAgbXBpX25vcm1hbGl6ZSAoaGFzaCk7CisrCisgICAgIC8qIHNlbGVjdCBhIHJhbmRvbSBrIHdpdGggMCA8IGsgPCBxICovCisgICAgIGsgPSBnZW5fayggc2tleS0+cSApOworIAorSW5kZXg6IGdudXBnLTEuNC43L2NpcGhlci9lbGdhbWFsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuNy5vcmlnL2NpcGhlci9lbGdhbWFsLmMJMjAwNi0xMi0xMiAwMzowODowNS4wMDAwMDAwMDAgKzA4MDAKKysrKyBnbnVwZy0xLjQuNy9jaXBoZXIvZWxnYW1hbC5jCTIwMTQtMDEtMjMgMTE6MzA6MTcuMzAwOTE1OTE5ICswODAwCitAQCAtMzc2LDYgKzM3Niw5IEBACisgeworICAgICBNUEkgdDEgPSBtcGlfYWxsb2Nfc2VjdXJlKCBtcGlfZ2V0X25saW1icyggc2tleS0+cCApICk7CisgCisrICAgIG1waV9ub3JtYWxpemUgKGEpOworKyAgICBtcGlfbm9ybWFsaXplIChiKTsKKysKKyAgICAgLyogb3V0cHV0ID0gYi8oYV54KSBtb2QgcCAqLworICAgICBtcGlfcG93bSggdDEsIGEsIHNrZXktPngsIHNrZXktPnAgKTsKKyAgICAgbXBpX2ludm0oIHQxLCB0MSwgc2tleS0+cCApOworSW5kZXg6IGdudXBnLTEuNC43L2NpcGhlci9yYW5kb20uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcvY2lwaGVyL3JhbmRvbS5jCTIwMDYtMTEtMDMgMTg6MDk6MzkuMDAwMDAwMDAwICswODAwCisrKysgZ251cGctMS40LjcvY2lwaGVyL3JhbmRvbS5jCTIwMTQtMDEtMjMgMTE6MzE6NTMuOTkzNDk1NDYyICswODAwCitAQCAtMjczLDYgKzI3MywxOCBAQAorIH0KKyAKKyAKKysvKiBSYW5kb21pemUgdGhlIE1QSSAqLyAKKyt2b2lkCisrcmFuZG9taXplX21waSAoTVBJIG1waSwgc2l6ZV90IG5iaXRzLCBpbnQgbGV2ZWwpCisreworKyAgdW5zaWduZWQgY2hhciAqYnVmZmVyOworKworKyAgYnVmZmVyID0gZ2V0X3JhbmRvbV9iaXRzIChuYml0cywgbGV2ZWwsIG1waV9pc19zZWN1cmUgKG1waSkpOworKyAgbXBpX3NldF9idWZmZXIgKG1waSwgYnVmZmVyLCAobmJpdHMrNykvOCwgMCk7CisrICB4ZnJlZSAoYnVmZmVyKTsKKyt9CisrCisrCisgaW50CisgcmFuZG9tX2lzX2Zha2VkKCkKKyB7CitJbmRleDogZ251cGctMS40LjcvY2lwaGVyL3JhbmRvbS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMS40Ljcub3JpZy9jaXBoZXIvcmFuZG9tLmgJMjAwNi0wMi0wOSAxOToyOToyOS4wMDAwMDAwMDAgKzA4MDAKKysrKyBnbnVwZy0xLjQuNy9jaXBoZXIvcmFuZG9tLmgJMjAxNC0wMS0yMyAxMTozMDoxNy4zMDA5MTU5MTkgKzA4MDAKK0BAIC0zMiw2ICszMiw3IEBACisgaW50ICByYW5kb21faXNfZmFrZWQodm9pZCk7Cisgdm9pZCByYW5kb21fZGlzYWJsZV9sb2NraW5nICh2b2lkKTsKKyB2b2lkIHJhbmRvbWl6ZV9idWZmZXIoIGJ5dGUgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgaW50IGxldmVsICk7Cisrdm9pZCByYW5kb21pemVfbXBpIChNUEkgbXBpLCBzaXplX3QgbmJpdHMsIGludCBsZXZlbCk7CisgYnl0ZSAqZ2V0X3JhbmRvbV9iaXRzKCBzaXplX3QgbmJpdHMsIGludCBsZXZlbCwgaW50IHNlY3VyZSApOworIHZvaWQgZmFzdF9yYW5kb21fcG9sbCggdm9pZCApOworIAorSW5kZXg6IGdudXBnLTEuNC43L2NpcGhlci9yc2EuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcvY2lwaGVyL3JzYS5jCTIwMDYtMTItMTIgMDM6MDk6MDAuMDAwMDAwMDAwICswODAwCisrKysgZ251cGctMS40LjcvY2lwaGVyL3JzYS5jCTIwMTQtMDEtMjMgMTE6MzU6MDQuMzMwNjM5MTI1ICswODAwCitAQCAtMzAxLDkgKzMwMSwyNiBAQAorICNpZiAwCisgICAgIG1waV9wb3dtKCBvdXRwdXQsIGlucHV0LCBza2V5LT5kLCBza2V5LT5uICk7CisgI2Vsc2UKKy0gICAgTVBJIG0xICAgPSBtcGlfYWxsb2Nfc2VjdXJlKCBtcGlfZ2V0X25saW1icyhza2V5LT5uKSsxICk7CistICAgIE1QSSBtMiAgID0gbXBpX2FsbG9jX3NlY3VyZSggbXBpX2dldF9ubGltYnMoc2tleS0+bikrMSApOworLSAgICBNUEkgaCAgICA9IG1waV9hbGxvY19zZWN1cmUoIG1waV9nZXRfbmxpbWJzKHNrZXktPm4pKzEgKTsKKysgICAgaW50IG5saW1icyA9IG1waV9nZXRfbmxpbWJzIChza2V5LT5uKSsxOworKyAgICBNUEkgbTEgICA9IG1waV9hbGxvY19zZWN1cmUgKG5saW1icyk7CisrICAgIE1QSSBtMiAgID0gbXBpX2FsbG9jX3NlY3VyZSAobmxpbWJzKTsKKysgICAgTVBJIGggICAgPSBtcGlfYWxsb2Nfc2VjdXJlIChubGltYnMpOworKyMgaWYgMQorKyAgICBNUEkgYmRhdGE9IG1waV9hbGxvY19zZWN1cmUgKG5saW1icyk7CisrICAgIE1QSSByICAgID0gbXBpX2FsbG9jX3NlY3VyZSAobmxpbWJzKTsKKysjIGVuZGlmCisrCisrICAgIC8qIFJlbW92ZSBzdXBlcmZsdW91cyBsZWFkaW5nIHplcm9lcyBmcm9tIElOUFVULiAgKi8KKysgICAgbXBpX25vcm1hbGl6ZSAoaW5wdXQpOworKworKyMgaWYgMSAKKysgICAgLyogQmxpbmQ6ICBiZGF0YSA9IChkYXRhICogcl5lKSBtb2QgbiAgICovCisrICAgIHJhbmRvbWl6ZV9tcGkgKHIsIG1waV9nZXRfbmJpdHMgKHNrZXktPm4pLCAwKTsKKysgICAgbXBpX2ZkaXZfciAociwgciwgc2tleS0+bik7CisrICAgIG1waV9wb3dtIChiZGF0YSwgciwgc2tleS0+ZSwgc2tleS0+bik7CisrICAgIG1waV9tdWxtIChiZGF0YSwgYmRhdGEsIGlucHV0LCBza2V5LT5uKTsKKysgICAgaW5wdXQgPSBiZGF0YTsKKysjIGVuZGlmCisgCisgICAgIC8qIG0xID0gYyBeIChkIG1vZCAocC0xKSkgbW9kIHAgKi8KKyAgICAgbXBpX3N1Yl91aSggaCwgc2tleS0+cCwgMSAgKTsKK0BAIC0zMjEsOCArMzM4LDE1IEBACisgICAgIC8qIG0gPSBtMiArIGggKiBwICovCisgICAgIG1waV9tdWwgKCBoLCBoLCBza2V5LT5wICk7CisgICAgIG1waV9hZGQgKCBvdXRwdXQsIG0xLCBoICk7CistICAgIC8qIHJlYWR5ICovCistICAgIAorKworKyMgaWYgMQorKyAgICBtcGlfZnJlZSAoYmRhdGEpOworKyAgICAvKiBVbmJsaW5kOiBvdXRwdXQgPSAob3V0cHV0ICogcl4oLTEpKSBtb2QgbiAgKi8KKysgICAgbXBpX2ludm0gKHIsIHIsIHNrZXktPm4pOworKyAgICBtcGlfbXVsbSAob3V0cHV0LCBvdXRwdXQsIHIsIHNrZXktPm4pOworKyAgICBtcGlfZnJlZSAocik7CisrIyBlbmRpZgorKworICAgICBtcGlfZnJlZSAoIGggKTsKKyAgICAgbXBpX2ZyZWUgKCBtMSApOworICAgICBtcGlfZnJlZSAoIG0yICk7CitAQCAtMzk3LDYgKzQyMSw3IEBACisgcnNhX2RlY3J5cHQoIGludCBhbGdvLCBNUEkgKnJlc3VsdCwgTVBJICpkYXRhLCBNUEkgKnNrZXkgKQorIHsKKyAgICAgUlNBX3NlY3JldF9rZXkgc2s7CisrICAgIE1QSSBpbnB1dDsKKyAKKyAgICAgaWYoIGFsZ28gIT0gMSAmJiBhbGdvICE9IDIgKQorIAlyZXR1cm4gRzEwRVJSX1BVQktFWV9BTEdPOworQEAgLTQwNyw4ICs0MzIsMTQgQEAKKyAgICAgc2sucCA9IHNrZXlbM107CisgICAgIHNrLnEgPSBza2V5WzRdOworICAgICBzay51ID0gc2tleVs1XTsKKy0gICAgKnJlc3VsdCA9IG1waV9hbGxvY19zZWN1cmUoIG1waV9nZXRfbmxpbWJzKCBzay5uICkgKTsKKy0gICAgc2VjcmV0KCAqcmVzdWx0LCBkYXRhWzBdLCAmc2sgKTsKKysKKysgICAgLyogTWl0aWdhdGVzIHNpZGUtY2hhbm5lbCBhdHRhY2tzIChDVkUtMjAxMy00NTc2KS4gICovCisrICAgIGlucHV0ID0gbXBpX2FsbG9jICgwKTsKKysgICAgbXBpX25vcm1hbGl6ZSAoZGF0YVswXSk7CisrICAgIG1waV9mZGl2X3IgKGlucHV0LCBkYXRhWzBdLCBzay5uKTsKKysgICAgKnJlc3VsdCA9IG1waV9hbGxvY19zZWN1cmUgKG1waV9nZXRfbmxpbWJzIChzay5uKSk7CisrICAgIHNlY3JldCAoKnJlc3VsdCwgaW5wdXQsICZzayk7CisrICAgIG1waV9mcmVlIChpbnB1dCk7CisgICAgIHJldHVybiAwOworIH0KKyAKK0luZGV4OiBnbnVwZy0xLjQuNy9nMTAvZ3Bndi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMS40Ljcub3JpZy9nMTAvZ3Bndi5jCTIwMDYtMTItMTMgMTk6MjU6MDQuMDAwMDAwMDAwICswODAwCisrKysgZ251cGctMS40LjcvZzEwL2dwZ3YuYwkyMDE0LTAxLTIzIDExOjMwOjE3LjMwMDkxNTkxOSArMDgwMAorQEAgLTM5MCw2ICszOTAsNyBAQAorIHZvaWQgcmFuZG9tX2R1bXBfc3RhdHModm9pZCkge30KKyBpbnQgcXVpY2tfcmFuZG9tX2dlbiggaW50IG9ub2ZmICkgeyByZXR1cm4gLTE7fQorIHZvaWQgcmFuZG9taXplX2J1ZmZlciggYnl0ZSAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCBpbnQgbGV2ZWwgKSB7fQorK3ZvaWQgcmFuZG9taXplX21waSAoTVBJIG1waSwgc2l6ZV90IG5iaXRzLCBpbnQgbGV2ZWwpIHt9CisgaW50IHJhbmRvbV9pc19mYWtlZCgpIHsgcmV0dXJuIC0xO30KKyBieXRlICpnZXRfcmFuZG9tX2JpdHMoIHNpemVfdCBuYml0cywgaW50IGxldmVsLCBpbnQgc2VjdXJlICkgeyByZXR1cm4gTlVMTDt9Cisgdm9pZCBzZXRfcmFuZG9tX3NlZWRfZmlsZSggY29uc3QgY2hhciAqbmFtZSApIHt9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L0dudVBHMS1DVkUtMjAxMi02MDg1LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9HbnVQRzEtQ1ZFLTIwMTItNjA4NS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjVkOWExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9HbnVQRzEtQ1ZFLTIwMTItNjA4NS5wYXRjaApAQCAtMCwwICsxLDYzIEBACitjb21taXQgZjBiMzNiNmZiOGUwNTg2ZTk1ODRhN2E0MDlkY2MzMTI2Mzc3NmE2NworQXV0aG9yOiBXZXJuZXIgS29jaCA8d2tAZ251cGcub3JnPgorRGF0ZTogICBUaHUgRGVjIDIwIDA5OjQzOjQxIDIwMTIgKzAxMDAKKworICAgIGdwZzogSW1wb3J0IG9ubHkgcGFja2V0cyB3aGljaCBhcmUgYWxsb3dlZCBpbiBhIGtleWJsb2NrLgorICAgIAorICAgICogZzEwL2ltcG9ydC5jICh2YWxpZF9rZXlibG9ja19wYWNrZXQpOiBOZXcuCisgICAgKHJlYWRfYmxvY2spOiBTdG9yZSBvbmx5IHZhbGlkIHBhY2tldHMuCisgICAgLS0KKyAgICAKKyAgICBBIGNvcnJ1cHRlZCBrZXksIHdoaWNoIGZvciBleGFtcGxlIGluY2x1ZGVkIGEgbWFuZ2xlZCBwdWJsaWMga2V5CisgICAgZW5jcnlwdGVkIHBhY2tldCwgdXNlZCB0byBjb3JydXB0IHRoZSBrZXlyaW5nLiAgVGhpcyBjaGFuZ2Ugc2tpcHMgYWxsCisgICAgcGFja2V0cyB3aGljaCBhcmUgbm90IGFsbG93ZWQgaW4gYSBrZXlibG9jay4KKyAgICAKKyAgICBHbnVQRy1idWctaWQ6IDE0NTUKKyAgICAKKyAgICAoY2hlcnJ5LXBpY2tlZCBmcm9tIGNvbW1pdCBmNzk1YTBkNTllMTk3NDU1Zjg3MjNjMzAwZWViZjU5ZTA5ODUzZWZhKQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2cxMC9pbXBvcnQuYyBiL2cxMC9pbXBvcnQuYworaW5kZXggYmZlMDJlYi4uYTU3YjMyZSAxMDA2NDQKKy0tLSBhL2cxMC9pbXBvcnQuYworKysrIGIvZzEwL2ltcG9ydC5jCitAQCAtMzg0LDYgKzM4NCwyNyBAQCBpbXBvcnRfcHJpbnRfc3RhdHMgKHZvaWQgKmhkKQorIH0KKyAKKyAKKysvKiBSZXR1cm4gdHJ1ZSBpZiBQS1RUWVBFIGlzIHZhbGlkIGluIGEga2V5YmxvY2suICAqLworK3N0YXRpYyBpbnQKKyt2YWxpZF9rZXlibG9ja19wYWNrZXQgKGludCBwa3R0eXBlKQorK3sKKysgIHN3aXRjaCAocGt0dHlwZSkKKysgICAgeworKyAgICBjYXNlIFBLVF9QVUJMSUNfS0VZOgorKyAgICBjYXNlIFBLVF9QVUJMSUNfU1VCS0VZOgorKyAgICBjYXNlIFBLVF9TRUNSRVRfS0VZOgorKyAgICBjYXNlIFBLVF9TRUNSRVRfU1VCS0VZOgorKyAgICBjYXNlIFBLVF9TSUdOQVRVUkU6CisrICAgIGNhc2UgUEtUX1VTRVJfSUQ6CisrICAgIGNhc2UgUEtUX0FUVFJJQlVURToKKysgICAgY2FzZSBQS1RfUklOR19UUlVTVDoKKysgICAgICByZXR1cm4gMTsKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorK30KKysKKysKKyAvKioqKioqKioqKioqKioqKgorICAqIFJlYWQgdGhlIG5leHQga2V5YmxvY2sgZnJvbSBzdHJlYW0gQS4KKyAgKiBQRU5ESU5HX1BLVCBzaG91bGQgYmUgaW5pdGlhbHplZCB0byBOVUxMCitAQCAtNDYxLDcgKzQ4Miw3IEBAIHJlYWRfYmxvY2soIElPQlVGIGEsIFBBQ0tFVCAqKnBlbmRpbmdfcGt0LCBLQk5PREUgKnJldF9yb290ICkKKyAJICAgIH0KKyAJICAgIGluX2NlcnQgPSAxOworIAkgIGRlZmF1bHQ6CistCSAgICBpZiggaW5fY2VydCApIHsKKysJICAgIGlmIChpbl9jZXJ0ICYmIHZhbGlkX2tleWJsb2NrX3BhY2tldCAocGt0LT5wa3R0eXBlKSkgeworIAkJaWYoICFyb290ICkKKyAJCSAgICByb290ID0gbmV3X2tibm9kZSggcGt0ICk7CisgCQllbHNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L2NvbmZpZ3VyZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvY29uZmlndXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMDVhYzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L2NvbmZpZ3VyZS5wYXRjaApAQCAtMCwwICsxLDE3IEBACisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogZ251cGctMS40LjcvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMS40Ljcub3JpZy9jb25maWd1cmUuYWMKKysrKyBnbnVwZy0xLjQuNy9jb25maWd1cmUuYWMKK0BAIC04MjcsNyArODI3LDYgQEAgZWxzZQorICAgQUNfU1VCU1QoVVNFX05MUykKKyAgIEFDX1NVQlNUKFVTRV9JTkNMVURFRF9MSUJJTlRMKQorICAgQUNfU1VCU1QoQlVJTERfSU5DTFVERURfTElCSU5UTCkKKy0gIEFNX1BPX1NVQkRJUlMKKyBmaQorIAorIGlmIHRlc3QgIiR0cnlfZXh0ZW5zaW9ucyIgPSB5ZXMgfHwgdGVzdCB4IiRjYXJkX3N1cHBvcnQiID0geHllcyA7IHRoZW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvY3VybF90eXBlb2ZfZml4X2JhY2twb3J0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9jdXJsX3R5cGVvZl9maXhfYmFja3BvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVmYjI0YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvY3VybF90eXBlb2ZfZml4X2JhY2twb3J0LnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKKworVGhpcyBoYXMgYmVlbiBkaXNjdXNzZWQgaW4gYSBjb3VwbGUgb2YgZGlmZmVyZW50IGJ1ZyByZXBvcnRlZAordXBzdHJlYW06CisKK2h0dHA6Ly9idWdzLmRlYmlhbi5vcmcvY2dpLWJpbi9idWdyZXBvcnQuY2dpP2J1Zz00ODYyNTAKK2h0dHA6Ly9idWdzLnNvdXJjZW1hZ2Uub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ0NgorCitGaXg6CitodHRwOi8vbGlzdHMuZ251cGcub3JnL3BpcGVybWFpbC9nbnVwZy1kZXZlbC8yMDA4LUFwcmlsLzAyNDM0NC5odG1sCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW0RlYmlhbl0KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogZ251cGctMS40Ljcva2V5c2VydmVyL2dwZ2tleXNfY3VybC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMS40Ljcub3JpZy9rZXlzZXJ2ZXIvZ3Bna2V5c19jdXJsLmMKKysrKyBnbnVwZy0xLjQuNy9rZXlzZXJ2ZXIvZ3Bna2V5c19jdXJsLmMKK0BAIC0yODYsNyArMjg2LDcgQEAgbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pCisgICAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLENVUkxPUFRfVkVSQk9TRSwxKTsKKyAgICAgfQorIAorLSAgY3VybF9lYXN5X3NldG9wdChjdXJsLENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsb3B0LT5mbGFncy5jaGVja19jZXJ0KTsKKysgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCxDVVJMT1BUX1NTTF9WRVJJRllQRUVSLChsb25nKW9wdC0+ZmxhZ3MuY2hlY2tfY2VydCk7CisgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsQ1VSTE9QVF9DQUlORk8sb3B0LT5jYV9jZXJ0X2ZpbGUpOworIAorICAgaWYocHJveHkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L2xvbmctbG9uZy10aHVtYi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvbG9uZy1sb25nLXRodW1iLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NTVjYWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L2xvbmctbG9uZy10aHVtYi5wYXRjaApAQCAtMCwwICsxLDE5IEBACitPcmlnbmFsIFBhdGNoIGNhbWUgZnJvbSBPcGVuV3J0IHZpYSBPRS1DbGFzc2ljCitodHRwczovL2Rldi5vcGVud3J0Lm9yZy9icm93c2VyL3BhY2thZ2VzL3V0aWxzL2dudXBnL3BhdGNoZXMvMDAxLW1pcHNfZ2NjNC40Cit3aGljaCBpcyBubyBsb25nZXIgYSB2YWxpZCByZXZpc2lvbiEKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCisKKy0tLSBnbnVwZy9tcGkvbG9uZ2xvbmcuaH4gICAgICAyMDA2LTAyLTE0IDEwOjA5OjU1LjAwMDAwMDAwMCArMDAwMAorKysrIGdudXBnL21waS9sb25nbG9uZy5oICAgICAgIDIwMDgtMTAtMjcgMTM6MTE6MDkuMDAwMDAwMDAwICswMDAwCitAQCAtMTgxLDcgKzE4MSw3IEBACisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqKioqKioqKioqKioqKiAgQVJNICAqKioqKioqKioqKioqKioqKioKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLSNpZiBkZWZpbmVkIChfX2FybV9fKSAmJiBXX1RZUEVfU0laRSA9PSAzMgorKyNpZiBkZWZpbmVkIChfX2FybV9fKSAmJiBXX1RZUEVfU0laRSA9PSAzMiAmJiAhZGVmaW5lZChfX3RodW1iX18pCisgI2RlZmluZSBhZGRfc3NhYWFhKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpIFwKKyAgIF9fYXNtX18gKCJhZGRzICUxLCAlNCwgJTVcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgImFkYyAgJTAsICUyLCAlMyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9taXBzX2djYzQuNC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvbWlwc19nY2M0LjQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEwM2IyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvbWlwc19nY2M0LjQucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorCitGcm9tIE9wZW5lbWJlZGRlZC1DbGFzc2ljCisKKyAgICBnbnVwZy0xLjQuMTA6IFJlYWRkIHRoZSBBUk0gVGh1bWIgcGF0Y2ggYXMgZGViaWFuIGhhcyBubyB0aHVtYiBzdXBwb3J0CisKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZC1zcGVjaWZpY10KKworSW5kZXg6IGdudXBnLTEuNC4xMC9tcGkvbG9uZ2xvbmcuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC4xMC5vcmlnL21waS9sb25nbG9uZy5oCTIwMDgtMTItMTEgMTc6Mzk6NDMuMDAwMDAwMDAwICswMTAwCisrKysgZ251cGctMS40LjEwL21waS9sb25nbG9uZy5oCTIwMTAtMDMtMjcgMTQ6Mjc6NTMuMDAwMDAwMDAwICswMTAwCitAQCAtNzA2LDE4ICs3MDYsMzUgQEAKKyAjZW5kaWYgLyogX19tODgxMTBfXyAqLworICNlbmRpZiAvKiBfX204ODAwMF9fICovCisgCisrLyogVGVzdCBmb3IgZ2NjID49IG1hai5taW4sIGFzIHBlciBfX0dOVUNfUFJFUkVRIGluIGdsaWJjICovCisrI2lmIGRlZmluZWQgKF9fR05VQ19fKSAmJiBkZWZpbmVkIChfX0dOVUNfTUlOT1JfXykKKysjZGVmaW5lIF9fR05VQ19QUkVSRVEobWFqLCBtaW4pIFwKKysJKChfX0dOVUNfXyA8PCAxNikgKyBfX0dOVUNfTUlOT1JfXyA+PSAoKG1haikgPDwgMTYpICsgKG1pbikpCisrI2Vsc2UKKysjZGVmaW5lIF9fR05VQ19QUkVSRVEobWFqLCBtaW4pICAwCisrI2VuZGlmCisrCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqKioqKioqKioqKioqKiAgTUlQUyAgKioqKioqKioqKioqKioqKioKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICNpZiBkZWZpbmVkIChfX21pcHNfXykgJiYgV19UWVBFX1NJWkUgPT0gMzIKKy0jaWYgX19HTlVDX18gPiAyIHx8IF9fR05VQ19NSU5PUl9fID49IDcKKysjaWYgX19HTlVDX1BSRVJFUSAoNCw0KQorKyNkZWZpbmUgdW11bF9wcG1tKHcxLCB3MCwgdSwgdikgXAorKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwlVREl0eXBlIF9fbGwgPSAoVURJdHlwZSkodSkgKiAodik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwl3MSA9IF9fbGwgPj4gMzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwl3MCA9IF9fbGw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfSB3aGlsZSAoMCkKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgKHVtdWxfcHBtbSkgJiYgX19HTlVDX1BSRVJFUSAoMiw3KQorICNkZWZpbmUgdW11bF9wcG1tKHcxLCB3MCwgdSwgdikgXAorICAgX19hc21fXyAoIm11bHR1ICUyLCUzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJICAgOiAiPWwiICgoVVNJdHlwZSkodzApKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJICAgICAiPWgiICgoVVNJdHlwZSkodzEpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJICAgOiAiZCIgKChVU0l0eXBlKSh1KSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJICAgICAiZCIgKChVU0l0eXBlKSh2KSkpCistI2Vsc2UKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgKHVtdWxfcHBtbSkKKyAjZGVmaW5lIHVtdWxfcHBtbSh3MSwgdzAsIHUsIHYpIFwKKyAgIF9fYXNtX18gKCJtdWx0dSAlMiwlMyBcbiIgXAorIAkgICAibWZsbyAlMCBcbiIgICAgIFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGcvZGlybW5nci11c2VzLWxpYmdwZy1lcnJvci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGcvZGlybW5nci11c2VzLWxpYmdwZy1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWYxOTU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy9kaXJtbmdyLXVzZXMtbGliZ3BnLWVycm9yLnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorSW5kZXg6IGdudXBnLTIuMS4wL2Rpcm1uZ3IvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0yLjEuMC5vcmlnL2Rpcm1uZ3IvTWFrZWZpbGUuYW0KKysrKyBnbnVwZy0yLjEuMC9kaXJtbmdyL01ha2VmaWxlLmFtCitAQCAtNzgsNyArNzgsOCBAQCBlbmRpZgorIGRpcm1uZ3JfTERBREQgPSAkKGxpYmNvbW1vbnRsc25wdGgpICQobGliY29tbW9ucHRoKSBcCisgICAgICAgICAkKEROU0xJQlMpICQoTElCQVNTVUFOX0xJQlMpIFwKKyAJJChMSUJHQ1JZUFRfTElCUykgJChLU0JBX0xJQlMpICQoTlBUSF9MSUJTKSBcCistCSQoTlRCVExTX0xJQlMpICQoTElCR05VVExTX0xJQlMpICQoTElCSU5UTCkgJChMSUJJQ09OVikKKysJJChOVEJUTFNfTElCUykgJChMSUJHTlVUTFNfTElCUykgJChMSUJJTlRMKSAkKExJQklDT05WKSBcCisrCSQoR1BHX0VSUk9SX0xJQlMpCisgaWYgVVNFX0xEQVAKKyBkaXJtbmdyX0xEQUREICs9ICQobGRhcGxpYnMpCisgZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGcvcGtnY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy9wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk1ODYwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGcvcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsOTAgQEAKK1VzZSBwa2ctY29uZmlnIHRvIGZpbmQgcHRoIGluc3RlYWQgb2YgcHRoLWNvbmZpZy4KKworVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQKK1tub3Qgc3VibWl0dGVkIGJ1dCB0aGV5J3ZlIGJlZW4gY2xlYXIgdGhleSBkb24ndCB3YW50IGEgcGtnLWNvbmZpZyBkZXBlbmRlbmN5XQorCitSUCAyMDE0LzUvMjIKKworSW5kZXg6IGdudXBnLTIuMS4wL200L2dudXBnLXB0aC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTIuMS4wLm9yaWcvbTQvZ251cGctcHRoLm00CisrKysgZ251cGctMi4xLjAvbTQvZ251cGctcHRoLm00CitAQCAtMTcsMzMgKzE3LDkgQEAgZG5sIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIyBUYWtlbiBhbmQgbW9kaWZpZWQgZnJvbSB0aGUgbTQgbWFjcm9zIHdoaWNoIGNvbWUgd2l0aCBQdGguCisgQUNfREVGVU4oW0dOVVBHX1BUSF9WRVJTSU9OX0NIRUNLXSwKKyAgIFsKKy0gICAgX3B0aF92ZXJzaW9uPWAkUFRIX0NPTkZJRyAtLXZlcnNpb24gfCBhd2sgJ05SPT0xIHtwcmludCBbJF0zfSdgCisgICAgIF9yZXFfdmVyc2lvbj0iaWZlbHNlKFskMV0sLDEuMi4wLCQxKSIKKysgICAgUEtHX0NIRUNLX01PRFVMRVMoUFRILCBbcHRoID49ICRfcmVxX3ZlcnNpb25dLCBbaGF2ZV9wdGg9eWVzXSwgW2hhdmVfcHRoPW5vXSkKKyAKKy0gICAgQUNfTVNHX0NIRUNLSU5HKGZvciBQVEggLSB2ZXJzaW9uID49ICRfcmVxX3ZlcnNpb24pCistICAgIGZvciBfdmFyIGluIF9wdGhfdmVyc2lvbiBfcmVxX3ZlcnNpb247IGRvCistICAgICAgICBldmFsICJfdmFsPVwiXCQke192YXJ9XCIiCistICAgICAgICBfbWFqb3I9YGVjaG8gJF92YWwgfCBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcKFtbYWIuXV1cKVwoW1swLTldXSpcKS9cMS8nYAorLSAgICAgICAgX21pbm9yPWBlY2hvICRfdmFsIHwgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXChbW2FiLl1dXClcKFtbMC05XV0qXCkvXDIvJ2AKKy0gICAgICAgIF9ydHlwZT1gZWNobyAkX3ZhbCB8IHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwoW1thYi5dXVwpXChbWzAtOV1dKlwpL1wzLydgCistICAgICAgICBfbWljcm89YGVjaG8gJF92YWwgfCBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcKFtbYWIuXV1cKVwoW1swLTldXSpcKS9cNC8nYAorLSAgICAgICAgY2FzZSAkX3J0eXBlIGluCistICAgICAgICAgICAgImEiICkgX3J0eXBlPTAgOzsKKy0gICAgICAgICAgICAiYiIgKSBfcnR5cGU9MSA7OworLSAgICAgICAgICAgICIuIiApIF9ydHlwZT0yIDs7CistICAgICAgICBlc2FjCistICAgICAgICBfaGV4PWBlY2hvIGR1bW15IHwgYXdrICd7IHByaW50ZigiJWQlMDJkJTFkJTAyZCIsIG1ham9yLCBtaW5vciwgcnR5cGUsIG1pY3JvKTsgfScgXAorLSAgICAgICAgICAgICAgIm1ham9yPSRfbWFqb3IiICJtaW5vcj0kX21pbm9yIiAicnR5cGU9JF9ydHlwZSIgIm1pY3JvPSRfbWljcm8iYAorLSAgICAgICAgZXZhbCAiJHtfdmFyfV9oZXg9XCJcJF9oZXhcIiIKKy0gICAgZG9uZQorLSAgICBoYXZlX3B0aD1ubworLSAgICBpZiB0ZXN0ICIuJF9wdGhfdmVyc2lvbl9oZXgiICE9IC47IHRoZW4KKy0gICAgICAgIGlmIHRlc3QgIi4kX3JlcV92ZXJzaW9uX2hleCIgIT0gLjsgdGhlbgorLSAgICAgICAgICAgIGlmIHRlc3QgJF9wdGhfdmVyc2lvbl9oZXggLWdlICRfcmVxX3ZlcnNpb25faGV4OyB0aGVuCistICAgICAgICAgICAgICAgIGhhdmVfcHRoPXllcworLSAgICAgICAgICAgIGZpCistICAgICAgICBmaQorLSAgICBmaQorICAgICBpZiB0ZXN0ICRoYXZlX3B0aCA9IHllczsgdGhlbgorICAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIFBUSCBpbnN0YWxsYXRpb24gaXMgc2FuZV0pCitAQCAtNTEsOSArMjcsOSBAQCBBQ19ERUZVTihbR05VUEdfUFRIX1ZFUlNJT05fQ0hFQ0tdLAorICAgICAgICAgIF9nbnVwZ19wdGhfc2F2ZV9jZmxhZ3M9JENGTEFHUworICAgICAgICAgIF9nbnVwZ19wdGhfc2F2ZV9sZGZsYWdzPSRMREZMQUdTCisgICAgICAgICAgX2dudXBnX3B0aF9zYXZlX2xpYnM9JExJQlMKKy0gICAgICAgICBDRkxBR1M9IiRDRkxBR1MgYCRQVEhfQ09ORklHIC0tY2ZsYWdzYCIKKy0gICAgICAgICBMREZMQUdTPSIkTERGTEFHUyBgJFBUSF9DT05GSUcgLS1sZGZsYWdzYCIKKy0gICAgICAgICBMSUJTPSIkTElCUyBgJFBUSF9DT05GSUcgLS1saWJzIC0tYWxsYCIKKysgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSF9DRkxBR1MiCisrICAgICAgICAgTERGTEFHUz0iJExERkxBR1MgJFBUSF9MREZMQUdTIgorKyAgICAgICAgIExJQlM9IiRMSUJTICRQVEhfTElCUyIKKyAgICAgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFsjaW5jbHVkZSA8cHRoLmg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1sgcHRoX2luaXQgKCk7XV0pXSwKK0BAIC04MCwyNiArNTYsMTMgQEAgQUNfREVGVU4oW0dOVVBHX1BUSF9WRVJTSU9OX0NIRUNLXSwKKyAjIFBUSF9DTEZBR1MgYW5kIFBUSF9MSUJTIGFyZSBBU19TVUJTVC4KKyAjCisgQUNfREVGVU4oW0dOVVBHX1BBVEhfUFRIXSwKKy1bIEFDX0FSR19XSVRIKHB0aC1wcmVmaXgsCistICAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtcHRoLXByZWZpeD1QRlhdLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcmVmaXggd2hlcmUgR05VIFB0aCBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0pLAorLSAgICAgcHRoX2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIiwgcHRoX2NvbmZpZ19wcmVmaXg9IiIpCistICBpZiB0ZXN0IHgkcHRoX2NvbmZpZ19wcmVmaXggIT0geCA7IHRoZW4KKy0gICAgIFBUSF9DT05GSUc9IiRwdGhfY29uZmlnX3ByZWZpeC9iaW4vcHRoLWNvbmZpZyIKKy0gIGZpCistICBBQ19QQVRIX1BST0coUFRIX0NPTkZJRywgcHRoLWNvbmZpZywgbm8pCisrWworICAgdG1wPWlmZWxzZShbJDFdLCAsMS4zLjcsJDEpCistICBpZiB0ZXN0ICIkUFRIX0NPTkZJRyIgIT0gIm5vIjsgdGhlbgorLSAgICBHTlVQR19QVEhfVkVSU0lPTl9DSEVDSygkdG1wKQorLSAgICBpZiB0ZXN0ICRoYXZlX3B0aCA9IHllczsgdGhlbiAgICAgIAorLSAgICAgICBQVEhfQ0ZMQUdTPWAkUFRIX0NPTkZJRyAtLWNmbGFnc2AKKy0gICAgICAgUFRIX0xJQlM9YCRQVEhfQ09ORklHIC0tbGRmbGFnc2AKKy0gICAgICAgUFRIX0xJQlM9IiRQVEhfTElCUyBgJFBUSF9DT05GSUcgLS1saWJzIC0tYWxsYCIKKy0gICAgICAgQUNfREVGSU5FKEhBVkVfUFRILCAxLAorKyAgR05VUEdfUFRIX1ZFUlNJT05fQ0hFQ0soJHRtcCkKKysgIGlmIHRlc3QgJGhhdmVfcHRoID0geWVzOyB0aGVuCisrICAgICAgQUNfREVGSU5FKEhBVkVfUFRILCAxLAorICAgICAgICAgICAgICAgICBbRGVmaW5lZCBpZiB0aGUgR05VIFB0aCBpcyBhdmFpbGFibGVdKQorLSAgICBmaQorICAgZmkKKyAgIEFDX1NVQlNUKFBUSF9DRkxBR1MpCisgICBBQ19TVUJTVChQVEhfTElCUykKKyBdKQorLQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy91c2UtcGtnY29uZmlnLWluc3RlYWQtb2YtbnB0aC1jb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnL3VzZS1wa2djb25maWctaW5zdGVhZC1vZi1ucHRoLWNvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmRiZjFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy91c2UtcGtnY29uZmlnLWluc3RlYWQtb2YtbnB0aC1jb25maWcucGF0Y2gKQEAgLTAsMCArMSw3MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvcGVuZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworCitJbmRleDogZ251cGctMi4xLjAvbTQvbnB0aC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTIuMS4wLm9yaWcvbTQvbnB0aC5tNAorKysrIGdudXBnLTIuMS4wL200L25wdGgubTQKK0BAIC0xNywxMCArMTcsMTAgQEAgQUNfREVGVU4oW19BTV9QQVRIX05QVEhfQ09ORklHXSwKKyAgIGlmIHRlc3QgIngkbnB0aF9jb25maWdfcHJlZml4IiAhPSB4IDsgdGhlbgorICAgICAgIE5QVEhfQ09ORklHPSIkbnB0aF9jb25maWdfcHJlZml4L2Jpbi9ucHRoLWNvbmZpZyIKKyAgIGZpCistICBBQ19QQVRIX1BST0coTlBUSF9DT05GSUcsIG5wdGgtY29uZmlnLCBubykKKysgIEFDX1BBVEhfUFJPRyhQS0dDT05GSUcsIHBrZy1jb25maWcsIG5vKQorIAorLSAgaWYgdGVzdCAiJE5QVEhfQ09ORklHIiAhPSAibm8iIDsgdGhlbgorLSAgICBucHRoX3ZlcnNpb249YCROUFRIX0NPTkZJRyAtLXZlcnNpb25gCisrICBpZiB0ZXN0ICIkUEtHQ09ORklHIiAhPSAibm8iIDsgdGhlbgorKyAgICBucHRoX3ZlcnNpb249YCRQS0dDT05GSUcgLS1tb2R2ZXJzaW9uIG5wdGhgCisgICBmaQorICAgbnB0aF92ZXJzaW9uX21ham9yPWBlY2hvICRucHRoX3ZlcnNpb24gfCBcCisgICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDEvJ2AKK0BAIC00NSw3ICs0NSw3IEBAIEFDX0RFRlVOKFtBTV9QQVRIX05QVEhdLAorIAorICAgQUNfTVNHX0NIRUNLSU5HKGZvciBOUFRIIC0gdmVyc2lvbiA+PSAkbWluX25wdGhfdmVyc2lvbikKKyAgIG9rPW5vCistICBpZiB0ZXN0ICIkTlBUSF9DT05GSUciICE9ICJubyIgOyB0aGVuCisrICBpZiB0ZXN0ICIkUEtHQ09ORklHIiAhPSAibm8iIDsgdGhlbgorICAgICByZXFfbWFqb3I9YGVjaG8gJG1pbl9ucHRoX3ZlcnNpb24gfCBcCisgICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wxLydgCisgICAgIHJlcV9taW5vcj1gZWNobyAkbWluX25wdGhfdmVyc2lvbiB8IFwKK0BAIC02NiwyOCArNjYsOSBAQCBBQ19ERUZVTihbQU1fUEFUSF9OUFRIXSwKKyAgIGZpCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorICAgICBBQ19NU0dfUkVTVUxUKFt5ZXMgKCRucHRoX3ZlcnNpb24pXSkKKy0gIGVsc2UKKy0gICAgQUNfTVNHX1JFU1VMVChubykKKy0gIGZpCistICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorLSAgICAgIyBJZiB3ZSBoYXZlIGEgcmVjZW50IE5QVEgsIHdlIHNob3VsZCBhbHNvIGNoZWNrIHRoYXQgdGhlCistICAgICAjIEFQSSBpcyBjb21wYXRpYmxlLgorLSAgICAgaWYgdGVzdCAiJHJlcV9ucHRoX2FwaSIgLWd0IDAgOyB0aGVuCistICAgICAgICB0bXA9YCROUFRIX0NPTkZJRyAtLWFwaS12ZXJzaW9uIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKKy0gICAgICAgIGlmIHRlc3QgIiR0bXAiIC1ndCAwIDsgdGhlbgorLSAgICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtOUFRIIEFQSSB2ZXJzaW9uXSkKKy0gICAgICAgICAgIGlmIHRlc3QgIiRyZXFfbnB0aF9hcGkiIC1lcSAiJHRtcCIgOyB0aGVuCistICAgICAgICAgICAgIEFDX01TR19SRVNVTFQoW29rYXldKQorLSAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICBvaz1ubworLSAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKFtkb2VzIG5vdCBtYXRjaC4gd2FudD0kcmVxX25wdGhfYXBpIGdvdD0kdG1wXSkKKy0gICAgICAgICAgIGZpCistICAgICAgICBmaQorLSAgICAgZmkKKy0gIGZpCistICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorLSAgICBOUFRIX0NGTEFHUz1gJE5QVEhfQ09ORklHIC0tY2ZsYWdzYAorLSAgICBOUFRIX0xJQlM9YCROUFRIX0NPTkZJRyAtLWxpYnNgCisrICAgIE5QVEhfQ0ZMQUdTPWAkUEtHQ09ORklHIC0tY2ZsYWdzIG5wdGhgCisrICAgIE5QVEhfTElCUz1gJFBLR0NPTkZJRyAtLWxpYnMgbnB0aGAKKysgICAgQUNfTVNHX1dBUk4oW1tHT1QgSEVSRSAtICROUFRIX0xJQlMgXV0pCisgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCisgICAgIG5wdGhfY29uZmlnX2hvc3Q9YCROUFRIX0NPTkZJRyAtLWhvc3QgMj4vZGV2L251bGwgfHwgZWNobyBub25lYAorICAgICBpZiB0ZXN0IHgiJG5wdGhfY29uZmlnX2hvc3QiICE9IHhub25lIDsgdGhlbgorQEAgLTEwMyw2ICs4NCw3IEBAIEFDX0RFRlVOKFtBTV9QQVRIX05QVEhdLAorICAgICAgIGZpCisgICAgIGZpCisgICBlbHNlCisrICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgIE5QVEhfQ0ZMQUdTPSIiCisgICAgIE5QVEhfTElCUz0iIgorICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZ18xLjQuNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGdfMS40LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk5OWY4MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGdfMS40LjcuYmIKQEAgLTAsMCArMSwxMDUgQEAKK1NVTU1BUlkgPSAiR05VIFByaXZhY3kgR3VhcmQgLSBlbmNyeXB0aW9uIGFuZCBzaWduaW5nIHRvb2xzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnVwZy5vcmcvIgorREVQRU5EUyA9ICJ6bGliIGJ6aXAyIHJlYWRsaW5lIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkdQTHYyIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lYjcyM2I2MTUzOWZlZWYwMTNkZTQ3NmU2OGI1YzUwYSIKKworUFIgPSAicjkiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvZ251cGcvZ251cGctJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9sb25nLWxvbmctdGh1bWIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21pcHNfZ2NjNC40LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0dudVBHMS1DVkUtMjAxMi02MDg1LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2N1cmxfdHlwZW9mX2ZpeF9iYWNrcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxMy00MzUxLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0NWRS0yMDEzLTQ1NzYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTMtNDI0Mi5wYXRjaCBcCisJICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiMDZhMTQxY2NhNWNkMWE1NWJiZGQyNWFiODMzMzAzYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2OWQxOGI3ZDE5M2Y2MmNhMjdlZDRmZWJjYjRjOTA0NGFhMGM5NTMwNWQzMjU4ZmU5MDJlMmZhZTVmYzY0NjhkIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworIyAgIC0td2l0aC1lZ2Qtc29ja2V0PU5BTUUgIHVzZSBOQU1FIGZvciB0aGUgRUdEIHNvY2tldAorIyAgIC0td2l0aC1waG90by12aWV3ZXI9RklYRURfVklFV0VSICBzZXQgYSBmaXhlZCBwaG90byBJRCB2aWV3ZXIKKyMgICAtLXdpdGgtaW5jbHVkZWQtemxpYiAgICB1c2UgdGhlIHpsaWIgY29kZSBpbmNsdWRlZCBoZXJlCisjICAgLS13aXRoLWNhcGFiaWxpdGllcyAgICAgdXNlIGxpbnV4IGNhcGFiaWxpdGllcyBkZWZhdWx0PW5vCisjICAgLS13aXRoLW1haWxwcm9nPU5BTUUgICAgdXNlICJOQU1FIC10IiBmb3IgbWFpbCB0cmFuc3BvcnQKKyMgICAtLXdpdGgtbGliaWNvbnYtcHJlZml4Wz1ESVJdICBzZWFyY2ggZm9yIGxpYmljb252IGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCisjICAgLS13aXRob3V0LWxpYmljb252LXByZWZpeCAgICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWJpY29udiBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXIKKyMgICAtLXdpdGgtaW5jbHVkZWQtZ2V0dGV4dCB1c2UgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaW5jbHVkZWQgaGVyZQorIyAgIC0td2l0aC1saWJpbnRsLXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBsaWJpbnRsIGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCisjICAgLS13aXRob3V0LWxpYmludGwtcHJlZml4ICAgICBkb24ndCBzZWFyY2ggZm9yIGxpYmludGwgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyCisjICAgLS13aXRob3V0LXJlYWRsaW5lICAgICAgZG8gbm90IHN1cHBvcnQgZmFuY3kgY29tbWFuZCBsaW5lIGVkaXRpbmcKKyMgICAtLXdpdGgtaW5jbHVkZWQtcmVnZXggICB1c2UgdGhlIGluY2x1ZGVkIEdOVSByZWdleCBsaWJyYXJ5CisjICAgLS13aXRoLXpsaWI9RElSICAgICAgICAgdXNlIGxpYnogaW4gRElSCisjICAgLS13aXRoLWJ6aXAyPURJUiAgICAgICAgbG9vayBmb3IgYnppcDIgaW4gRElSCisjICAgLS1lbmFibGUtc3RhdGljLXJuZD1lZ2R8dW5peHxsaW51eHxhdXRvCisjICAgLS1kaXNhYmxlLWRldi1yYW5kb20gICAgZGlzYWJsZSB0aGUgdXNlIG9mIGRldiByYW5kb20KKyMgICAtLWRpc2FibGUtYXNtICAgICAgICAgICBkbyBub3QgdXNlIGFzc2VtYmxlciBtb2R1bGVzCisjICAgLS1lbmFibGUtbS1ndWFyZCAgICAgICAgZW5hYmxlIG1lbW9yeSBndWFyZCBmYWNpbGl0eQorIyAgIC0tZW5hYmxlLXNlbGludXgtc3VwcG9ydAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZSBTRUxpbnV4IHN1cHBvcnQKKyMgICAtLWRpc2FibGUtY2FyZC1zdXBwb3J0ICBkaXNhYmxlIE9wZW5QR1AgY2FyZCBzdXBwb3J0CisjICAgLS1kaXNhYmxlLWdudXBnLWljb252ICAgZGlzYWJsZSB0aGUgbmV3IGljb252IGNvZGUKKyMgICAtLWVuYWJsZS1iYWNrc2lncyAgICAgICBlbmFibGUgdGhlIGV4cGVyaW1lbnRhbCBiYWNrc2lncyBjb2RlCisjICAgLS1lbmFibGUtbWluaW1hbCAgICAgICAgYnVpbGQgdGhlIHNtYWxsZXN0IGdwZyBiaW5hcnkgcG9zc2libGUKKyMgICAtLWRpc2FibGUtcnNhICAgICAgICAgICBkaXNhYmxlIHRoZSBSU0EgcHVibGljIGtleSBhbGdvcml0aG0KKyMgICAtLWRpc2FibGUtaWRlYSAgICAgICAgICBkaXNhYmxlIHRoZSBJREVBIGNpcGhlcgorIyAgIC0tZGlzYWJsZS1jYXN0NSAgICAgICAgIGRpc2FibGUgdGhlIENBU1Q1IGNpcGhlcgorIyAgIC0tZGlzYWJsZS1ibG93ZmlzaCAgICAgIGRpc2FibGUgdGhlIEJMT1dGSVNIIGNpcGhlcgorIyAgIC0tZGlzYWJsZS1hZXMgICAgICAgICAgIGRpc2FibGUgdGhlIEFFUywgQUVTMTkyLCBhbmQgQUVTMjU2IGNpcGhlcnMKKyMgICAtLWRpc2FibGUtdHdvZmlzaCAgICAgICBkaXNhYmxlIHRoZSBUV09GSVNIIGNpcGhlcgorIyAgIC0tZGlzYWJsZS1zaGEyNTYgICAgICAgIGRpc2FibGUgdGhlIFNIQS0yNTYgZGlnZXN0CisjICAgLS1kaXNhYmxlLXNoYTUxMiAgICAgICAgZGlzYWJsZSB0aGUgU0hBLTM4NCBhbmQgU0hBLTUxMiBkaWdlc3RzCisjICAgLS1kaXNhYmxlLWJ6aXAyICAgICAgICAgZGlzYWJsZSB0aGUgQlpJUDIgY29tcHJlc3Npb24gYWxnb3JpdGhtCisjICAgLS1kaXNhYmxlLWV4ZWMgICAgICAgICAgZGlzYWJsZSBhbGwgZXh0ZXJuYWwgcHJvZ3JhbSBleGVjdXRpb24KKyMgICAtLWRpc2FibGUtcGhvdG8tdmlld2VycyBkaXNhYmxlIHBob3RvIElEIHZpZXdlcnMKKyMgICAtLWRpc2FibGUta2V5c2VydmVyLWhlbHBlcnMgIGRpc2FibGUgYWxsIGV4dGVybmFsIGtleXNlcnZlciBzdXBwb3J0CisjICAgLS1kaXNhYmxlLWxkYXAgICAgICAgICAgZGlzYWJsZSBMREFQIGtleXNlcnZlciBpbnRlcmZhY2UKKyMgICAtLWRpc2FibGUtaGtwICAgICAgICAgICBkaXNhYmxlIEhLUCBrZXlzZXJ2ZXIgaW50ZXJmYWNlCisjICAgLS1kaXNhYmxlLWh0dHAgICAgICAgICAgZGlzYWJsZSBIVFRQIGtleSBmZXRjaGluZyBpbnRlcmZhY2UKKyMgICAtLWRpc2FibGUtZmluZ2VyICAgICAgICBkaXNhYmxlIEZpbmdlciBrZXkgZmV0Y2hpbmcgaW50ZXJmYWNlCisjICAgLS1kaXNhYmxlLW1haWx0byAgICAgICAgZGlzYWJsZSBlbWFpbCBrZXlzZXJ2ZXIgaW50ZXJmYWNlCisjICAgLS1kaXNhYmxlLWtleXNlcnZlci1wYXRoIGRpc2FibGUgdGhlIGV4ZWMtcGF0aCBvcHRpb24gZm9yIGtleXNlcnZlciBoZWxwZXJzCisjICAgLS1lbmFibGUta2V5LWNhY2hlPVNJWkUgU2V0IGtleSBjYWNoZSB0byBTSVpFIChkZWZhdWx0IDQwOTYpCisjICAgLS1kaXNhYmxlLWxhcmdlZmlsZSAgICAgb21pdCBzdXBwb3J0IGZvciBsYXJnZSBmaWxlcworIyAgIC0tZGlzYWJsZS1kbnMtc3J2ICAgICAgIGRpc2FibGUgdGhlIHVzZSBvZiBETlMgU1JWIGluIEhLUCBhbmQgSFRUUAorIyAgIC0tZGlzYWJsZS1ubHMgICAgICAgICAgIGRvIG5vdCB1c2UgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMgICAtLWRpc2FibGUtcmVnZXggICAgICAgICBkbyBub3QgaGFuZGxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW4gdHJ1c3Qgc2lncworCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWxkYXAgXAorCQktLXdpdGgtemxpYj0ke1NUQUdJTkdfTElCRElSfS8uLiBcCisJCS0td2l0aC1iemlwMj0ke1NUQUdJTkdfTElCRElSfS8uLiBcCisJCS0tZGlzYWJsZS1zZWxpbnV4LXN1cHBvcnQgXAorICAgICAgICAgICAgICAgIC0td2l0aC1yZWFkbGluZT0ke1NUQUdJTkdfTElCRElSfS8uLiBcCisgICAgICAgICAgICAgICAgYWNfY3Zfc3lzX3N5bWJvbF91bmRlcnNjb3JlPW5vIFwKKwkJIgorCisjIEZvcmNlIGdjYydzIHRyYWRpdGlvbmFsIGhhbmRsaW5nIG9mIGlubGluZSB0byBhdm9pZCBpc3N1ZXMgd2l0aCBnY2MgNQorQ0ZMQUdTICs9ICItZmdudTg5LWlubGluZSIKKworZG9faW5zdGFsbCAoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0ke2RvY2Rpcn0vJHtCUE59CisJbXYgJHtEfSR7ZGF0YWRpcn0vJHtCUE59LyogJHtEfS8ke2RvY2Rpcn0vJHtCUE59LyB8fCA6CisJbXYgJHtEfSR7cHJlZml4fS9kb2MvKiAke0R9LyR7ZG9jZGlyfS8ke0JQTn0vIHx8IDoKK30KKworIyBzcGxpdCBvdXQgZ3BndiBmcm9tIG1haW4gcGFja2FnZQorUkRFUEVORFNfJHtQTn0gPSAiZ3BndiIKK1BBQ0tBR0VTID0rICJncGd2IgorRklMRVNfZ3BndiA9ICIke2JpbmRpcn0vZ3BndiIKKworIyBFeGNsdWRlIGRlYnVnIGZpbGVzIGZyb20gdGhlIG1haW4gcGFja2FnZXMKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS8qICR7ZGF0YWRpcn0vJHtCUE59ICR7bGliZXhlY2Rpcn0vJHtCUE59LyoiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZXhlY2Rpcn0vJHtCUE59Ly5kZWJ1ZyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbY3VybF0gPSAiLS13aXRoLWxpYmN1cmw9JHtTVEFHSU5HX0xJQkRJUn0sLS13aXRob3V0LWxpYmN1cmwsY3VybCIKK1BBQ0tBR0VDT05GSUdbbGlidXNiXSA9ICItLXdpdGgtbGlidXNiPSR7U1RBR0lOR19MSUJESVJ9LC0td2l0aG91dC1saWJ1c2IsbGlidXNiLWNvbXBhdCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGdfMi4xLjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnXzIuMS43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4YzdjOTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnXzIuMS43LmJiCkBAIC0wLDAgKzEsNDEgQEAKK1NVTU1BUlkgPSAiR05VIFByaXZhY3kgR3VhcmQgLSBlbmNyeXB0aW9uIGFuZCBzaWduaW5nIHRvb2xzICgyLngpIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnVwZy5vcmcvIgorTElDRU5TRSA9ICJHUEx2MyAmIExHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWYyN2RlZmUxZTk2YzJlMWVjZDRlMGM5YmU4OTY3OTQ5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiIKKworREVQRU5EUyA9ICJucHRoIGxpYmFzc3VhbiBsaWJrc2JhIHpsaWIgYnppcDIgcmVhZGxpbmUgbGliZ2NyeXB0IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8gcGtnY29uZmlnCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91c2UtcGtnY29uZmlnLWluc3RlYWQtb2YtbnB0aC1jb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlybW5nci11c2VzLWxpYmdwZy1lcnJvci5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZWJkZjkyYjE1YjhiY2Q4NTc5YjY0M2M3ZjQxYTMyMzgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzE4YTM3NzZkNDdmZWM5ODg5MmQ1MWQyOGI2NTc0ZWYxNmJmMGEyNWVhYmIwOTU2MjMxMDU4YWFmMmU3ODQ2ZSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1sZGFwIFwKKwkJLS1kaXNhYmxlLWNjaWQtZHJpdmVyIFwKKwkJLS13aXRoLXpsaWI9JHtTVEFHSU5HX0xJQkRJUn0vLi4gXAorCQktLXdpdGgtYnppcDI9JHtTVEFHSU5HX0xJQkRJUn0vLi4gXAorICAgICAgICAgICAgICAgIC0td2l0aC1yZWFkbGluZT0ke1NUQUdJTkdfTElCRElSfS8uLiBcCisgICAgICAgICAgICAgICAiCitSUkVDT01NRU5EU18ke1BOfSA9ICJwaW5lbnRyeSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgRWxzZSB0aGVzZSBjb3VsZCBiZSB1c2VkIGluIHByZWZlcm5jZSB0byB0aG9zZSBpbiBhY2xvY2FsLWNvcHkKKwlybSAtZiAke1N9L200L2dwZy1lcnJvci5tNAorCXJtIC1mICR7U30vbTQvbGliYXNzdWFuLm00CisJcm0gLWYgJHtTfS9tNC9rc2JhLm00CisJcm0gLWYgJHtTfS9tNC9saWJnY3J5cHQubTQKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJbG4gLXNmIGdwZzIgJHtEfSR7YmluZGlyfS9ncGcKKwlsbiAtc2YgZ3BndjIgJHtEfSR7YmluZGlyfS9ncGd2Cit9CisKK1JERVBFTkRTXyR7UE59ID0gImdudXRscyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YjEzOGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMuaW5jCkBAIC0wLDAgKzEsNDkgQEAKK1NVTU1BUlkgPSAiR05VIFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSBMaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dudXRscy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vc2F2YW5uYWguZ251Lm9yZy9zdXBwb3J0Lz9ncm91cD1nbnV0bHMiCitERVBFTkRTID0gIm5ldHRsZSIKKworTElDRU5TRSA9ICJHUEx2MysgJiBMR1BMdjIuMSsiCitMSUNFTlNFXyR7UE59ID0gIkxHUEx2Mi4xKyIKK0xJQ0VOU0VfJHtQTn0teHggPSAiTEdQTHYyLjErIgorTElDRU5TRV8ke1BOfS1iaW4gPSAiR1BMdjMrIgorTElDRU5TRV8ke1BOfS1vcGVuc3NsID0gIkdQTHYzKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MRVNTRVI7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIgorCisKK1NIUlRfVkVSID0gIiR7QGQuZ2V0VmFyKCdQVicsMSkuc3BsaXQoJy4nKVswXX0uJHtAZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLicpWzFdfSIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251dGxzLm9yZy9nY3J5cHQvZ251dGxzL3Yke1NIUlRfVkVSfS9nbnV0bHMtJHtQVn0udGFyLnh6IgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIGJpbmNvbmZpZyBwa2djb25maWcgZ2V0dGV4dCBsaWJfcGFja2FnZQorCitFWFRSQV9PRUNPTkY9Ii0tZGlzYWJsZS1ycGF0aCBcCisgICAgICAgICAgICAgIC0td2l0aC1pbmNsdWRlZC1saWJ0YXNuMSBcCisgICAgICAgICAgICAgIC0tZW5hYmxlLWxvY2FsLWxpYm9wdHMgXAorICAgICAgICAgICAgICAtLXdpdGgtbGlicHRocmVhZC1wcmVmaXg9JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fSBcCisgICAgICAgICAgICAgIC0tZGlzYWJsZS1ndWlsZSBcCisgICAgICAgICAgICAgIC0tZGlzYWJsZS1jcnl3cmFwIFwKKyAgICAgICAgICAgICAgLS13aXRob3V0LXAxMS1raXQgXAorICAgICAgICAgICAgICAiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWZvciBkaXIgaW4gLiBsaWI7IGRvCisJCXJtIC1mICR7ZGlyfS9hY2xvY2FsLm00ICR7ZGlyfS9tNC9saWJ0b29sLm00ICR7ZGlyfS9tNC9sdCoubTQKKwlkb25lCit9CisKK1BBQ0tBR0VDT05GSUcgPz89ICJ6bGliIgorUEFDS0FHRUNPTkZJR1t0cG1dID0gIi0td2l0aC10cG0sIC0td2l0aG91dC10cG0sIHRyb3VzZXJzIgorUEFDS0FHRUNPTkZJR1t6bGliXSA9ICItLXdpdGgtemxpYiwgLS13aXRob3V0LXpsaWIsIHpsaWIiCisKK1BBQ0tBR0VTID0rICIke1BOfS1vcGVuc3NsICR7UE59LXh4IgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9nbnV0bHMtY2xpLWRlYnVnIgorRklMRVNfJHtQTn0tb3BlbnNzbCA9ICIke2xpYmRpcn0vbGliZ251dGxzLW9wZW5zc2wuc28uKiIKK0ZJTEVTXyR7UE59LXh4ID0gIiR7bGliZGlyfS9saWJnbnV0bHN4eC5zby4qIgorCitMREZMQUdTX2FwcGVuZF9saWJjLXVjbGliYyArPSAiIC1wdGhyZWFkIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMvY29uZmlndXJlLmFjLWZpeC1zZWQtY29tbWFuZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy9jb25maWd1cmUuYWMtZml4LXNlZC1jb21tYW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YTk5MzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMvY29uZmlndXJlLmFjLWZpeC1zZWQtY29tbWFuZC5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIGViOTNhYTdiOTg2Yzg0ZGE2MGEzZGI0MGFmYjI5ZDFhNzBjNTAyMjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFNhdCwgMTcgSmFuIDIwMTUgMTc6MDI6MTUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlLmFjOiBmaXggc2VkIGNvbW1hbmQKKworVGhlICJzZWQgJ3MvLmJhay8vZyciIG1hdGNocyAiYml0YmFrZSIsIHdoaWNoIHdvdWxkIGNhdXNlIHN0cmFuZ2UgZXJyb3JzCit3aGVuIHRoZSBTIGNvbnRhaW5zICJiaXRiYWtlIiwgZml4IHRvICJzZWQgJ3MvXC5iYWskLy8nYCIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBjNjgxOGEwLi4xYzQ1ODJkIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC00NjYsNyArNDY2LDcgQEAgaWYgdGVzdCAiJE5FRURfTElCT1BUU19ESVIiID0gInRydWUiO3RoZW4KKyAJZG5sIHJlcGxhY2UgbGlib3B0cy1nZW5lcmF0ZWQgZmlsZXMgd2l0aCBkaXN0cmlidXRlZCBiYWNrdXBzLCBpZiBwcmVzZW50CisgCW1pc3NpbmdfYmFrcz0KKyAJZm9yIGkgaW4gJHtzcmNkaXJ9L3NyYy8qLWFyZ3MuYy5iYWsgJHtzcmNkaXJ9L3NyYy8qLWFyZ3MuaC5iYWs7IGRvCistCQluYW09YGVjaG8gJGl8c2VkICdzLy5iYWsvL2cnYAorKwkJbmFtPWBlY2hvICRpfHNlZCAncy9cLmJhayQvLydgCisgCQlpZiB0ZXN0IC1mICRpO3RoZW4KKyAJCQljcCAtZiAkaSAkbmFtCisgCQllbHNlCistLSAKKzIuMC4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy9jb3JyZWN0X3JwbF9nZXR0aW1lb2ZkYXlfc2lnbmF0dXJlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzL2NvcnJlY3RfcnBsX2dldHRpbWVvZmRheV9zaWduYXR1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU0NTJjNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy9jb3JyZWN0X3JwbF9nZXR0aW1lb2ZkYXlfc2lnbmF0dXJlLnBhdGNoCkBAIC0wLDAgKzEsNjcgQEAKK0Zyb20gYWUzMzcwNzg4ZWQzNDQ3YmJhMTY5NjlkOWViMWJmMWI5NjMxZTFiNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFZhbGVudGluIFBvcGEgPHZhbGVudGluLnBvcGFAaW50ZWwuY29tPgorRGF0ZTogRnJpLCAyNSBBcHIgMjAxNCAxMzo1ODo1NSArMDMwMAorU3ViamVjdDogW1BBVENIXSBDb3JyZWN0IHJwbF9nZXR0aW1lb2ZkYXkgc2lnbmF0dXJlCisKK0N1cnJlbnRseSB3ZSBmYWlsIG9uIHVjbGliYyBsaWtlIGJlbG93CisKK3wgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC9ob21lL2tyYWovd29yay9hbmdzdHJvbS9zb3VyY2VzL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC11Y2xpYmMvc3lzcm9vdHMvcWVtdWFybS91c3IvaW5jbHVkZS9zeXMvcHJvY2ZzLmg6MzI6MCwKK3wgICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL2tyYWovd29yay9hbmdzdHJvbS9zb3VyY2VzL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC11Y2xpYmMvc3lzcm9vdHMvcWVtdWFybS91c3IvaW5jbHVkZS9zeXMvdWNvbnRleHQuaDoyNiwKK3wgICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL2tyYWovd29yay9hbmdzdHJvbS9zb3VyY2VzL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC11Y2xpYmMvc3lzcm9vdHMvcWVtdWFybS91c3IvaW5jbHVkZS9zaWduYWwuaDozOTIsCit8ICAgICAgICAgICAgICAgICAgZnJvbSAuLi8uLi9nbC9zaWduYWwuaDo1MiwKK3wgICAgICAgICAgICAgICAgICBmcm9tIC4uLy4uL2dsL3N5cy9zZWxlY3QuaDo1OCwKK3wgICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL2tyYWovd29yay9hbmdzdHJvbS9zb3VyY2VzL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC11Y2xpYmMvc3lzcm9vdHMvcWVtdWFybS91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaDoyMjAsCit8ICAgICAgICAgICAgICAgICAgZnJvbSAuLi8uLi9nbC9zeXMvdHlwZXMuaDoyOCwKK3wgICAgICAgICAgICAgICAgICBmcm9tIC4uLy4uL2xpYi9pbmNsdWRlcy9nbnV0bHMvZ251dGxzLmg6NDYsCit8ICAgICAgICAgICAgICAgICAgZnJvbSBleC1jeHguY3BwOjM6Cit8IC4uLy4uL2dsL3N5cy90aW1lLmg6Mzk2OjY2OiBlcnJvcjogY29uZmxpY3RpbmcgZGVjbGFyYXRpb24gJ3ZvaWQqIHJlc3RyaWN0JworfCAuLi8uLi9nbC9zeXMvdGltZS5oOjM5Njo1MDogZXJyb3I6ICdyZXN0cmljdCcgaGFzIGEgcHJldmlvdXMgZGVjbGFyYXRpb24gYXMgJ3RpbWV2YWwqIHJlc3RyaWN0JworfCBtYWtlWzRdOiAqKiogW2V4LWN4eC5vXSBFcnJvciAxCit8IG1ha2VbNF06ICoqKiBXYWl0aW5nIGZvciB1bmZpbmlzaGVkIGpvYnMuLi4uCisKK0dDQyBkZXRlY3RzIHRoYXQgd2UgY2FsbCAncmVzdHJpY3QnIGFzIHBhcmFtIG5hbWUgaW4gZnVuY3Rpb24KK3NpZ25hdHVyZXMgYW5kIGNvbXBsYWlucyBzaW5jZSBib3RoIHBhcmFtcyBhcmUgY2FsbGVkICdyZXN0cmljdCcKK3RoZXJlZm9yZSB3ZSB1c2UgX19yZXN0cmljdCB0byBkZW5vdGUgdGhlIEM5OSBrZXl3b3JrCisKK1RoaXMgb25seSBoYXBwZW5zIG9mIHVjbGliYyBzaW5jZSB0aGlzIGNvZGUgaXMgbm90IGV4Y2VyY2lzZWQgd2l0aAorZWdsaWJjIG90aGVyd2lzZSB3ZSB3aWxsIGhhdmUgc2FtZSBpc3N1ZSB0aGVyZSB0b28KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnbC9zeXNfdGltZS5pbi5oIHwgOCArKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nbC9zeXNfdGltZS5pbi5oIGIvZ2wvc3lzX3RpbWUuaW4uaAoraW5kZXggODRhMTdjOS4uNmNlYWRjMyAxMDA2NDQKKy0tLSBhL2dsL3N5c190aW1lLmluLmgKKysrKyBiL2dsL3N5c190aW1lLmluLmgKK0BAIC05MywyMCArOTMsMjAgQEAgc3RydWN0IHRpbWV2YWwKKyAjICAgZGVmaW5lIGdldHRpbWVvZmRheSBycGxfZ2V0dGltZW9mZGF5CisgIyAgZW5kaWYKKyBfR0xfRlVOQ0RFQ0xfUlBMIChnZXR0aW1lb2ZkYXksIGludCwKKy0gICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKnJlc3RyaWN0LCB2b2lkICpyZXN0cmljdCkKKysgICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QsIHZvaWQgKl9fcmVzdHJpY3QpCisgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyBfR0xfQ1hYQUxJQVNfUlBMIChnZXR0aW1lb2ZkYXksIGludCwKKy0gICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKnJlc3RyaWN0LCB2b2lkICpyZXN0cmljdCkpOworKyAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCwgdm9pZCAqX19yZXN0cmljdCkpOworICMgZWxzZQorICMgIGlmICFASEFWRV9HRVRUSU1FT0ZEQVlACisgX0dMX0ZVTkNERUNMX1NZUyAoZ2V0dGltZW9mZGF5LCBpbnQsCistICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1ldmFsICpyZXN0cmljdCwgdm9pZCAqcmVzdHJpY3QpCisrICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0LCB2b2lkICpfX3Jlc3RyaWN0KQorICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisgIyAgZW5kaWYKKyAvKiBOZWVkIHRvIGNhc3QsIGJlY2F1c2Ugb24gZ2xpYmMgc3lzdGVtcywgYnkgZGVmYXVsdCwgdGhlIHNlY29uZCBhcmd1bWVudCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV6b25lICouICAqLworIF9HTF9DWFhBTElBU19TWVNfQ0FTVCAoZ2V0dGltZW9mZGF5LCBpbnQsCistICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKnJlc3RyaWN0LCB2b2lkICpyZXN0cmljdCkpOworKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0LCB2b2lkICpfX3Jlc3RyaWN0KSk7CisgIyBlbmRpZgorIF9HTF9DWFhBTElBU1dBUk4gKGdldHRpbWVvZmRheSk7CisgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMvdXNlLXBrZy1jb25maWctdG8tbG9jYXRlLXpsaWIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMvdXNlLXBrZy1jb25maWctdG8tbG9jYXRlLXpsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUxYjdjOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy91c2UtcGtnLWNvbmZpZy10by1sb2NhdGUtemxpYi5wYXRjaApAQCAtMCwwICsxLDY3IEBACitGcm9tIGNlZTgwYWYxZmU5M2Y1Yjc2NzY1YWZlZWJmY2MzYjkwMjc2OGY1ZDYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgorRGF0ZTogVHVlLCAyNiBNYXkgMjAxNSAyMTo0MToyNCAtMDcwMAorU3ViamVjdDogW1BBVENIXSB1c2UgcGtnLWNvbmZpZyB0byBsb2NhdGUgemxpYgorCitBQ19MSUJfSEFWRV9MSU5LRkxBR1MgY2FuIHNvbWV0aW1lcyBmaW5kIGhvc3QgbGlicyBhbmQgaXMgdGhlcmVmb3JlIG5vdAorcm9idXN0IHdoZW4gY3Jvc3MtY29tcGlsaW5nLiBSZW1vdmUgaXQgZm9yIHpsaWIgYW5kIHVzZSBQS0dfQ0hFQ0tfTU9EVUxFUworaW5zdGVhZC4KKworUmVtb3ZpbmcgQUNfTElCX0hBVkVfTElOS0ZMQUdTIGZvciB6bGliIGFsc28gcmVtb3ZlcyB0aGUgLS13aXRoLWxpYnotcHJlZml4Citjb25maWd1cmUgb3B0aW9uLiBJZiB6bGliIHN1cHBvcnQgaXMgZW5hYmxlZCwgdGhlbiBmYWlsdXJlIHRvIGZpbmQgemxpYiB2aWEKK3BrZy1jb25maWcgaXMgbm93IHRyZWF0ZWQgYXMgYSBmYXRhbCBlcnJvci4KKworQ2hhbmdlIGJhc2VkIG9uIENocm9tZU9TIGdudXRscyAyLjEyLjIzIGNyb3NzLWNvbXBpbGUgZml4ZXMgcGF0Y2g6CisKKyAgaHR0cHM6Ly9jaHJvbWl1bS1yZXZpZXcuZ29vZ2xlc291cmNlLmNvbS8jL2MvMjcxNjYxLworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlIE1jQ3VyZHkgPGFybWNjdXJkeUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAyNCArKysrKysrKysrLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDFiNTYxZDUuLjBjNzg3ZGMgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTUwOCwyNSArNTA4LDIxIEBAIEFDX0FSR19XSVRIKHpsaWIsIEFTX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtemxpYl0sCisgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGluY2x1ZGUgemxpYiBjb21wcmVzc2lvbiBzdXBwb3J0XSkKKyBpZiB0ZXN0IHgkYWNfemxpYiAhPSB4bm87IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCh5ZXMpCistIEFDX0xJQl9IQVZFX0xJTktGTEFHUyh6LCwgWyNpbmNsdWRlIDx6bGliLmg+XSwgW2NvbXByZXNzICgwLCAwLCAwLCAwKTtdKQorLSBpZiB0ZXN0IHgkYWNfY3ZfbGlieiAhPSB4eWVzOyB0aGVuCistICAgQUNfTVNHX1dBUk4oCistKioqIAorLSoqKiBaTElCIHdhcyBub3QgZm91bmQuIFlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIHVzZSBaTElCIGNvbXByZXNzaW9uLikKKy0gZmkKKyBlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCisgZmkKKyAKKy1QS0dfQ0hFQ0tfRVhJU1RTKHpsaWIsIFpMSUJfSEFTX1BLR0NPTkZJRz15LCBaTElCX0hBU19QS0dDT05GSUc9bikKKy0KKyBpZiB0ZXN0IHgkYWNfemxpYiAhPSB4bm87IHRoZW4KKy0gIGlmIHRlc3QgIiRaTElCX0hBU19QS0dDT05GSUciID0gInkiIDsgdGhlbgorLSAgICBpZiB0ZXN0ICJ4JEdOVVRMU19SRVFVSVJFU19QUklWQVRFIiA9IHg7IHRoZW4KKy0gICAgICBHTlVUTFNfUkVRVUlSRVNfUFJJVkFURT0iUmVxdWlyZXMucHJpdmF0ZTogemxpYiIKKy0gICAgZWxzZQorLSAgICAgIEdOVVRMU19SRVFVSVJFU19QUklWQVRFPSIkR05VVExTX1JFUVVJUkVTX1BSSVZBVEUsIHpsaWIiCistICAgIGZpCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhaTElCLCB6bGliKQorKyAgSEFWRV9MSUJaPXllcworKyAgQUNfREVGSU5FKFtIQVZFX0xJQlpdLCBbMV0sIFt6bGliIGlzIGVuYWJsZWRdKQorKyAgQUNfU1VCU1QoSEFWRV9MSUJaKQorKyAgTFRMSUJaPSRaTElCX0xJQlMKKysgIEFDX1NVQlNUKExUTElCWikKKysgIGlmIHRlc3QgIngkR05VVExTX1JFUVVJUkVTX1BSSVZBVEUiID0geDsgdGhlbgorKyAgICBHTlVUTFNfUkVRVUlSRVNfUFJJVkFURT0iUmVxdWlyZXMucHJpdmF0ZTogemxpYiIKKysgIGVsc2UKKysgICAgR05VVExTX1JFUVVJUkVTX1BSSVZBVEU9IiRHTlVUTFNfUkVRVUlSRVNfUFJJVkFURSwgemxpYiIKKyAgIGZpCisgZmkKKyBBQ19TVUJTVChHTlVUTFNfUkVRVUlSRVNfUFJJVkFURSkKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzXzMuMy4xNy4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzXzMuMy4xNy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxODU3OTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHNfMy4zLjE3LjEuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlIGdudXRscy5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL2NvcnJlY3RfcnBsX2dldHRpbWVvZmRheV9zaWduYXR1cmUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5hYy1maXgtc2VkLWNvbW1hbmQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3VzZS1wa2ctY29uZmlnLXRvLWxvY2F0ZS16bGliLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjhkMDFjN2U3ZjJjYmM1ODcxZmRjYTgzMmQyMjYwYjZiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI0MGYxNTgwMzBhOTJmNDUwYTA3YjIwMzAwYTM5OTY3MTBjYTE5ODAwODQ4ZDlmNmZkNjI0OTMxNzBjNWJiYjQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9saWJ0YXNuMS9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYzg5ZjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9saWJ0YXNuMS9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaApAQCAtMCwwICsxLDE0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmQgbGlidGFzbjEtMi4xNC9kb2MvTWFrZWZpbGUuYW0gbGlidGFzbjEtMi4xNC9kb2MvTWFrZWZpbGUuYW0KKy0tLSBsaWJ0YXNuMS0yLjE0L2RvYy9NYWtlZmlsZS5hbQkyMDEyLTA5LTI0IDE1OjA4OjQyLjAwMDAwMDAwMCArMDMwMAorKysrIGxpYnRhc24xLTIuMTQvZG9jL01ha2VmaWxlLmFtCTIwMTMtMDEtMDMgMDc6MzU6MjYuNzAyNzYzNDAzICswMjAwCitAQCAtMzEsNyArMzEsNyBAQAorIEFNX01BS0VJTkZPSFRNTEZMQUdTID0gJChBTV9NQUtFSU5GT0ZMQUdTKSBcCisJLS1uby1zcGxpdCAtLW51bWJlci1zZWN0aW9ucyAtLWNzcy1pbmNsdWRlPXRleGluZm8uY3NzCisKKy1kaXN0X21hbl9NQU5TID0gJChnZG9jX01BTlMpIGFzbjFQYXJzZXIuMSBhc24xQ29kaW5nLjEgYXNuMURlY29kaW5nLjEKKytkaXN0X21hbl9NQU5TID0gJChnZG9jX01BTlMpCisKKyBIRUxQMk1BTl9PUFRTID0gLS1pbmZvLXBhZ2UgbGlidGFzbjEKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xXzQuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xXzQuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODc0NTc0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvbGlidGFzbjFfNC41LmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgQVNOLjEgYW5kIERFUiBtYW5pcHVsYXRpb24iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGlidGFzbjEvIgorCitMSUNFTlNFID0gIkdQTHYzKyAmIExHUEx2Mi4xKyIKK0xJQ0VOU0VfJHtQTn0tYmluID0gIkdQTHYzKyIKK0xJQ0VOU0VfJHtQTn0gPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL1JFQURNRTtlbmRsaW5lPTg7bWQ1PWMzODAzYTNlOGNhNWFiNWViMWU1OTEyZmFhNDA1MzUxIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vbGlidGFzbjEvbGlidGFzbjEtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODFkMjcyNjk3NTQ1ZTgyZDM5ZjZiZDE0ODU0YjY4ZjAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODliM2I1ZGNlMTE5MjczNDMxNTQ0ZWNiMzA1MDgxZjM1MzA5MTEwMDFiYjEyZTVkNzY1ODg5MDdlZGI3MWJkYSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyBiaW5jb25maWcgbGliX3BhY2thZ2UKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lL2dwZ21lLnBjIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZS9ncGdtZS5wYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGE0ZDU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZS9ncGdtZS5wYwpAQCAtMCwwICsxLDEwIEBACitwcmVmaXg9L3VzcgorbGliZGlyPSR7cHJlZml4fS9saWIKK2luY2x1ZGVkaXI9JHtwcmVmaXh9L2luY2x1ZGUKKworTmFtZTogZ3BnbWUKK0Rlc2NyaXB0aW9uOiBHTlUgUHJpdmFjeSBHdWFyZCBNYWRlIEVhc3kKK1ZlcnNpb246IDEuNC4zCitSZXF1aXJlczoKK0xpYnM6IC1MJHtsaWJkaXJ9IC1sZ3BnbWUgLWxhc3N1YW4gLWxncGctZXJyb3IKK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lL3BrZ2NvbmZpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWUvcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZjFmNGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lL3BrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDI3OSBAQAorVXBkYXRlIGdwZ21lIHRvIHVzZSBwa2djb25maWcgaW5zdGVhZCBvZiAtY29uZmlnIGZpbGVzIHNpbmNlIGl0cworc2ltcGxlciBhbmQgbGVzcyBlcnJvciBwcm9uZSB3aGVuIGNyb3NzIGNvbXBpbGluZy4KKworVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQgW1Vwc3RyZWFtIG5vdCBpbnRlcmVzdGVkIGluIHBrZy1jb25maWcgc3VwcG9ydF0KK1JQIDIwMTUvNC8xNworCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAyOThhMjJiLi5jNzc4YjYxIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02MjIsNiArNjIyLDcgQEAgQUNfQ09ORklHX0ZJTEVTKE1ha2VmaWxlIHNyYy9NYWtlZmlsZQorICAgICAgICAgICAgICAgICBzcmMvdmVyc2lvbmluZm8ucmMKKyAgICAgICAgICAgICAgICAgc3JjL2dwZ21lLmgpCisgQUNfQ09ORklHX0ZJTEVTKHNyYy9ncGdtZS1jb25maWcsIGNobW9kICt4IHNyYy9ncGdtZS1jb25maWcpCisrQUNfQ09ORklHX0ZJTEVTKHNyYy9ncGdtZS5wYyBzcmMvZ3BnbWUtcHRocmVhZC5wYykKKyBBQ19DT05GSUdfRklMRVMoW2xhbmcvTWFrZWZpbGUgbGFuZy9jbC9NYWtlZmlsZSBsYW5nL2NsL2dwZ21lLmFzZF0pCisgQUNfT1VUUFVUCisgCitkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlLmFtIGIvc3JjL01ha2VmaWxlLmFtCitpbmRleCA1ODkyMmY5Li40MGQwZGNhIDEwMDY0NAorLS0tIGEvc3JjL01ha2VmaWxlLmFtCisrKysgYi9zcmMvTWFrZWZpbGUuYW0KK0BAIC0yMCwxMSArMjAsMTMgQEAKKyAKKyAjIE5vdGU6IG1vY19rZHBpcGVpb2RldmljZSBzaG91bGQgYWN0dWFsbHkgYmUgYSBkZXBlbmRlY3kgYmVsb3cuCisgRVhUUkFfRElTVCA9IGdwZ21lLWNvbmZpZy5pbiBncGdtZS5tNCBsaWJncGdtZS52ZXJzIENoYW5nZUxvZy0yMDExIFwKKy0JICAgICBncGdtZS5oLmluIHZlcnNpb25pbmZvLnJjLmluIGdwZ21lLmRlZiBtb2Nfa2RwaXBlaW9kZXZpY2UuY3BwCisrCSAgICAgZ3BnbWUuaC5pbiB2ZXJzaW9uaW5mby5yYy5pbiBncGdtZS5kZWYgbW9jX2tkcGlwZWlvZGV2aWNlLmNwcCBncGdtZS5wYy5pbiBncGdtZS1wdGhyZWFkLnBjLmluCisgCisgYmluX1NDUklQVFMgPSBncGdtZS1jb25maWcKKyBtNGRhdGFkaXIgPSAkKGRhdGFkaXIpL2FjbG9jYWwKKyBtNGRhdGFfREFUQSA9IGdwZ21lLm00CisrcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworK3BrZ2NvbmZpZ19EQVRBID0gZ3BnbWUucGMgZ3BnbWUtcHRocmVhZC5wYworIG5vZGlzdF9pbmNsdWRlX0hFQURFUlMgPSBncGdtZS5oCisgCisgYmluX1BST0dSQU1TID0gZ3BnbWUtdG9vbAorZGlmZiAtLWdpdCBhL3NyYy9ncGdtZS1wdGhyZWFkLnBjLmluIGIvc3JjL2dwZ21lLXB0aHJlYWQucGMuaW4KK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi45ODBhNDhlCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvZ3BnbWUtcHRocmVhZC5wYy5pbgorQEAgLTAsMCArMSwxNSBAQAorK3ByZWZpeD1AcHJlZml4QAorK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKytpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorKworKyMgQVBJIGluZm8KKythcGlfdmVyc2lvbj1AR1BHTUVfQ09ORklHX0FQSV9WRVJTSU9OQAorK2hvc3Q9QEdQR01FX0NPTkZJR19IT1NUQAorKworK05hbWU6IGdwZ21lCisrRGVzY3JpcHRpb246IEdudVBHIE1hZGUgRWFzeSAoR1BHTUUpIGlzIGEgQyBsYW5ndWFnZSBsaWJyYXJ5IHRoYXQgYWxsb3dzIHRvIGFkZHN1cHBvcnQgZm9yIGNyeXB0b2dyYXBoeSB0byBhIHByb2dyYW0gKHRocmVhZGVkIHZlcnNpb24pCisrVmVyc2lvbjogQFZFUlNJT05ACisrTGliczogLUwke2xpYmRpcn0gLWxncGdtZS1wdGhyZWFkIC1scHRocmVhZAorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CisrUmVxdWlyZXM6IGxpYmFzc3VhbiBncGctZXJyb3IKK2RpZmYgLS1naXQgYS9zcmMvZ3BnbWUubTQgYi9zcmMvZ3BnbWUubTQKK2luZGV4IDZjMmJlNDQuLmQ4YTc1Y2IgMTAwNjQ0CistLS0gYS9zcmMvZ3BnbWUubTQKKysrKyBiL3NyYy9ncGdtZS5tNAorQEAgLTc5LDcgKzc5LDcgQEAgZG5sIGNvbmZpZyBzY3JpcHQgZG9lcyBub3QgbWF0Y2ggdGhlIGhvc3Qgc3BlY2lmaWNhdGlvbiB0aGUgc2NyaXB0CisgZG5sIGlzIGFkZGVkIHRvIHRoZSBncGdfY29uZmlnX3NjcmlwdF93YXJuIHZhcmlhYmxlLgorIGRubAorIEFDX0RFRlVOKFtBTV9QQVRIX0dQR01FXSwKKy1bIEFDX1JFUVVJUkUoW19BTV9QQVRIX0dQR01FX0NPTkZJR10pZG5sCisrWworICAgdG1wPWlmZWxzZShbJDFdLCAsMTowLjQuMiwkMSkKKyAgIGlmIGVjaG8gIiR0bXAiIHwgZ3JlcCAnOicgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCA7IHRoZW4KKyAgICAgIHJlcV9ncGdtZV9hcGk9YGVjaG8gIiR0bXAiICAgICB8IHNlZCAncy9cKC4qXCk6XCguKlwpL1wxLydgCitAQCAtODksMzYgKzg5LDEyIEBAIEFDX0RFRlVOKFtBTV9QQVRIX0dQR01FXSwKKyAgICAgIG1pbl9ncGdtZV92ZXJzaW9uPSIkdG1wIgorICAgZmkKKyAKKy0gIEFDX01TR19DSEVDS0lORyhmb3IgR1BHTUUgLSB2ZXJzaW9uID49ICRtaW5fZ3BnbWVfdmVyc2lvbikKKy0gIG9rPW5vCistICBpZiB0ZXN0ICIkR1BHTUVfQ09ORklHIiAhPSAibm8iIDsgdGhlbgorLSAgICByZXFfbWFqb3I9YGVjaG8gJG1pbl9ncGdtZV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wxLydgCistICAgIHJlcV9taW5vcj1gZWNobyAkbWluX2dwZ21lX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDIvJ2AKKy0gICAgcmVxX21pY3JvPWBlY2hvICRtaW5fZ3BnbWVfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMy8nYAorLSAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9tYWpvciIgLWd0ICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgb2s9eWVzCistICAgIGVsc2UKKy0gICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21ham9yIiAtZXEgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWlub3IiIC1ndCAiJHJlcV9taW5vciI7IHRoZW4KKy0gICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWlub3IiIC1lcSAiJHJlcV9taW5vciI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWljcm8iIC1nZSAiJHJlcV9taWNybyI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgIGZpCistICAgICAgICBmaQorLSAgICBmaQorLSAgZmkKKysgIFBLR19DSEVDS19NT0RVTEVTKEdQR01FLCBbZ3BnbWUgPj0gJG1pbl9ncGdtZV92ZXJzaW9uXSwgW29rPXllc10sIFtvaz1ub10pCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorICAgICAgIyBJZiB3ZSBoYXZlIGEgcmVjZW50IEdQR01FLCB3ZSBzaG91bGQgYWxzbyBjaGVjayB0aGF0IHRoZQorICAgICAgIyBBUEkgaXMgY29tcGF0aWJsZS4KKyAgICAgIGlmIHRlc3QgIiRyZXFfZ3BnbWVfYXBpIiAtZ3QgMCA7IHRoZW4KKy0gICAgICAgIHRtcD1gJEdQR01FX0NPTkZJRyAtLWFwaS12ZXJzaW9uIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKKysgICAgICAgIHRtcD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1hcGlfdmVyc2lvbiBncGdtZSAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgCisgICAgICAgICBpZiB0ZXN0ICIkdG1wIiAtZ3QgMCA7IHRoZW4KKyAgICAgICAgICAgIGlmIHRlc3QgIiRyZXFfZ3BnbWVfYXBpIiAtbmUgIiR0bXAiIDsgdGhlbgorICAgICAgICAgICAgICBvaz1ubworQEAgLTEyNywxOSArMTAzLDExIEBAIEFDX0RFRlVOKFtBTV9QQVRIX0dQR01FXSwKKyAgICAgIGZpCisgICBmaQorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgR1BHTUVfQ0ZMQUdTPWAkR1BHTUVfQ09ORklHIC0tY2ZsYWdzYAorLSAgICBHUEdNRV9MSUJTPWAkR1BHTUVfQ09ORklHIC0tbGlic2AKKy0gICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCisgICAgIF9BTV9QQVRIX0dQR01FX0NPTkZJR19IT1NUX0NIRUNLCisgICBlbHNlCistICAgIEdQR01FX0NGTEFHUz0iIgorLSAgICBHUEdNRV9MSUJTPSIiCistICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCisgICBmaQorLSAgQUNfU1VCU1QoR1BHTUVfQ0ZMQUdTKQorLSAgQUNfU1VCU1QoR1BHTUVfTElCUykKKyBdKQorIAorIGRubCBBTV9QQVRIX0dQR01FX1BUSFJFQUQoW01JTklNVU0tVkVSU0lPTiwKK0BAIC0xNDgsNyArMTE2LDcgQEAgZG5sIFRlc3QgZm9yIGxpYmdwZ21lIGFuZCBkZWZpbmUgR1BHTUVfUFRIUkVBRF9DRkxBR1MKKyBkbmwgIGFuZCBHUEdNRV9QVEhSRUFEX0xJQlMuCisgZG5sCisgQUNfREVGVU4oW0FNX1BBVEhfR1BHTUVfUFRIUkVBRF0sCistWyBBQ19SRVFVSVJFKFtfQU1fUEFUSF9HUEdNRV9DT05GSUddKWRubAorK1sKKyAgIHRtcD1pZmVsc2UoWyQxXSwgLDE6MC40LjIsJDEpCisgICBpZiBlY2hvICIkdG1wIiB8IGdyZXAgJzonID4vZGV2L251bGwgMj4vZGV2L251bGwgOyB0aGVuCisgICAgICByZXFfZ3BnbWVfYXBpPWBlY2hvICIkdG1wIiAgICAgfCBzZWQgJ3MvXCguKlwpOlwoLipcKS9cMS8nYAorQEAgLTE1OCwzOCArMTI2LDEyIEBAIEFDX0RFRlVOKFtBTV9QQVRIX0dQR01FX1BUSFJFQURdLAorICAgICAgbWluX2dwZ21lX3ZlcnNpb249IiR0bXAiCisgICBmaQorIAorLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBHUEdNRSBwdGhyZWFkIC0gdmVyc2lvbiA+PSAkbWluX2dwZ21lX3ZlcnNpb24pCistICBvaz1ubworLSAgaWYgdGVzdCAiJEdQR01FX0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKy0gICAgaWYgYCRHUEdNRV9DT05GSUcgLS10aHJlYWQ9cHRocmVhZCAyPiAvZGV2L251bGxgIDsgdGhlbgorLSAgICAgIHJlcV9tYWpvcj1gZWNobyAkbWluX2dwZ21lX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDEvJ2AKKy0gICAgICByZXFfbWlub3I9YGVjaG8gJG1pbl9ncGdtZV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wyLydgCistICAgICAgcmVxX21pY3JvPWBlY2hvICRtaW5fZ3BnbWVfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMy8nYAorLSAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21ham9yIiAtZ3QgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICBvaz15ZXMKKy0gICAgICBlbHNlCistICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9tYWpvciIgLWVxICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9taW5vciIgLWd0ICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICBlbHNlCistICAgICAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWlub3IiIC1lcSAiJHJlcV9taW5vciI7IHRoZW4KKy0gICAgICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pY3JvIiAtZ2UgIiRyZXFfbWljcm8iOyB0aGVuCistICAgICAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICBmaQorLSAgICAgICAgICBmaQorLSAgICAgICAgZmkKKy0gICAgICBmaQorLSAgICBmaQorLSAgZmkKKysgIFBLR19DSEVDS19NT0RVTEVTKEdQR01FX1BUSFJFQUQsIFtncGdtZS1wdGhyZWFkID49ICRtaW5fZ3BnbWVfdmVyc2lvbl0sIFtvaz15ZXNdLCBbb2s9bm9dKQorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKyAgICAgICMgSWYgd2UgaGF2ZSBhIHJlY2VudCBHUEdNRSwgd2Ugc2hvdWxkIGFsc28gY2hlY2sgdGhhdCB0aGUKKyAgICAgICMgQVBJIGlzIGNvbXBhdGlibGUuCisgICAgICBpZiB0ZXN0ICIkcmVxX2dwZ21lX2FwaSIgLWd0IDAgOyB0aGVuCistICAgICAgICB0bXA9YCRHUEdNRV9DT05GSUcgLS1hcGktdmVyc2lvbiAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgCisrICAgICAgICB0bXA9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9YXBpX3ZlcnNpb24gZ3BnbWUtcHRocmVhZCAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgCisgICAgICAgICBpZiB0ZXN0ICIkdG1wIiAtZ3QgMCA7IHRoZW4KKyAgICAgICAgICAgIGlmIHRlc3QgIiRyZXFfZ3BnbWVfYXBpIiAtbmUgIiR0bXAiIDsgdGhlbgorICAgICAgICAgICAgICBvaz1ubworQEAgLTE5OCwxOSArMTQwLDExIEBAIEFDX0RFRlVOKFtBTV9QQVRIX0dQR01FX1BUSFJFQURdLAorICAgICAgZmkKKyAgIGZpCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorLSAgICBHUEdNRV9QVEhSRUFEX0NGTEFHUz1gJEdQR01FX0NPTkZJRyAtLXRocmVhZD1wdGhyZWFkIC0tY2ZsYWdzYAorLSAgICBHUEdNRV9QVEhSRUFEX0xJQlM9YCRHUEdNRV9DT05GSUcgLS10aHJlYWQ9cHRocmVhZCAtLWxpYnNgCistICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQorICAgICBfQU1fUEFUSF9HUEdNRV9DT05GSUdfSE9TVF9DSEVDSworICAgZWxzZQorLSAgICBHUEdNRV9QVEhSRUFEX0NGTEFHUz0iIgorLSAgICBHUEdNRV9QVEhSRUFEX0xJQlM9IiIKKy0gICAgQUNfTVNHX1JFU1VMVChubykKKyAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKKyAgIGZpCistICBBQ19TVUJTVChHUEdNRV9QVEhSRUFEX0NGTEFHUykKKy0gIEFDX1NVQlNUKEdQR01FX1BUSFJFQURfTElCUykKKyBdKQorIAorIAorQEAgLTIyOSwzNiArMTYzLDEyIEBAIEFDX0RFRlVOKFtBTV9QQVRIX0dQR01FX0dMSUJdLAorICAgICAgbWluX2dwZ21lX3ZlcnNpb249IiR0bXAiCisgICBmaQorIAorLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBHUEdNRSAtIHZlcnNpb24gPj0gJG1pbl9ncGdtZV92ZXJzaW9uKQorLSAgb2s9bm8KKy0gIGlmIHRlc3QgIiRHUEdNRV9DT05GSUciICE9ICJubyIgOyB0aGVuCistICAgIHJlcV9tYWpvcj1gZWNobyAkbWluX2dwZ21lX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDEvJ2AKKy0gICAgcmVxX21pbm9yPWBlY2hvICRtaW5fZ3BnbWVfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMi8nYAorLSAgICByZXFfbWljcm89YGVjaG8gJG1pbl9ncGdtZV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wzLydgCistICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21ham9yIiAtZ3QgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICBvaz15ZXMKKy0gICAgZWxzZQorLSAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWFqb3IiIC1lcSAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9taW5vciIgLWd0ICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9taW5vciIgLWVxICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9taWNybyIgLWdlICIkcmVxX21pY3JvIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgZmkKKy0gICAgICAgIGZpCistICAgIGZpCistICBmaQorKyAgUEtHX0NIRUNLX01PRFVMRVMoR1BHTUVfR0xJQiwgW2dwZ21lID49ICRtaW5fZ3BnbWVfdmVyc2lvbiBnbGliLTIuMF0sIFtvaz15ZXNdLCBbb2s9bm9dKSAgCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorICAgICAgIyBJZiB3ZSBoYXZlIGEgcmVjZW50IEdQR01FLCB3ZSBzaG91bGQgYWxzbyBjaGVjayB0aGF0IHRoZQorICAgICAgIyBBUEkgaXMgY29tcGF0aWJsZS4KKyAgICAgIGlmIHRlc3QgIiRyZXFfZ3BnbWVfYXBpIiAtZ3QgMCA7IHRoZW4KKy0gICAgICAgIHRtcD1gJEdQR01FX0NPTkZJRyAtLWFwaS12ZXJzaW9uIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKKysgICAgICAgIHRtcD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1hcGlfdmVyc2lvbiBncGdtZSAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgCisgICAgICAgICBpZiB0ZXN0ICIkdG1wIiAtZ3QgMCA7IHRoZW4KKyAgICAgICAgICAgIGlmIHRlc3QgIiRyZXFfZ3BnbWVfYXBpIiAtbmUgIiR0bXAiIDsgdGhlbgorICAgICAgICAgICAgICBvaz1ubworQEAgLTI2NywxNyArMTc3LDkgQEAgQUNfREVGVU4oW0FNX1BBVEhfR1BHTUVfR0xJQl0sCisgICAgICBmaQorICAgZmkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIEdQR01FX0dMSUJfQ0ZMQUdTPWAkR1BHTUVfQ09ORklHIC0tZ2xpYiAtLWNmbGFnc2AKKy0gICAgR1BHTUVfR0xJQl9MSUJTPWAkR1BHTUVfQ09ORklHIC0tZ2xpYiAtLWxpYnNgCistICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQorICAgICBfQU1fUEFUSF9HUEdNRV9DT05GSUdfSE9TVF9DSEVDSworICAgZWxzZQorLSAgICBHUEdNRV9HTElCX0NGTEFHUz0iIgorLSAgICBHUEdNRV9HTElCX0xJQlM9IiIKKy0gICAgQUNfTVNHX1JFU1VMVChubykKKyAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKKyAgIGZpCistICBBQ19TVUJTVChHUEdNRV9HTElCX0NGTEFHUykKKy0gIEFDX1NVQlNUKEdQR01FX0dMSUJfTElCUykKKyBdKQorZGlmZiAtLWdpdCBhL3NyYy9ncGdtZS5wYy5pbiBiL3NyYy9ncGdtZS5wYy5pbgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmI2OTUzOWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9ncGdtZS5wYy5pbgorQEAgLTAsMCArMSwxNSBAQAorK3ByZWZpeD1AcHJlZml4QAorK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKytpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorKworKyMgQVBJIGluZm8KKythcGlfdmVyc2lvbj1AR1BHTUVfQ09ORklHX0FQSV9WRVJTSU9OQAorK2hvc3Q9QEdQR01FX0NPTkZJR19IT1NUQAorKworK05hbWU6IGdwZ21lCisrRGVzY3JpcHRpb246IEdudVBHIE1hZGUgRWFzeSAoR1BHTUUpIGlzIGEgQyBsYW5ndWFnZSBsaWJyYXJ5IHRoYXQgYWxsb3dzIHRvIGFkZHN1cHBvcnQgZm9yIGNyeXB0b2dyYXBoeSB0byBhIHByb2dyYW0uCisrVmVyc2lvbjogQFZFUlNJT05ACisrTGliczogLUwke2xpYmRpcn0gLWxncGdtZQorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CisrUmVxdWlyZXM6IGxpYmFzc3VhbiBncGctZXJyb3IKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZV8xLjUuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWVfMS41LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU5ODM3NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWVfMS41LjQuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJIaWdoLWxldmVsIEdudVBHIGVuY3J5cHRpb24vc2lnbmluZyBBUEkiCitERVNDUklQVElPTiA9ICJHbnVQRyBNYWRlIEVhc3kgKEdQR01FKSBpcyBhIGxpYnJhcnkgZGVzaWduZWQgdG8gbWFrZSBhY2Nlc3MgdG8gR251UEcgZWFzaWVyIGZvciBhcHBsaWNhdGlvbnMuIEl0IHByb3ZpZGVzIGEgSGlnaC1MZXZlbCBDcnlwdG8gQVBJIGZvciBlbmNyeXB0aW9uLCBkZWNyeXB0aW9uLCBzaWduaW5nLCBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGFuZCBrZXkgbWFuYWdlbWVudCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251cGcub3JnL2dwZ21lLmh0bWwiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5nMTBjb2RlLmNvbS9nbnVwZy9pbmRleCIKKworTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUjttZDU9YmJiNDYxMjExYTMzYjEzNGQ0MmVkNWVlODAyYjM3ZmYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2dwZ21lLmguaW47ZW5kbGluZT0yMzttZDU9NzFiYTJhZThkNmNhMDM0ZWQxMGJkMDk5YThjZjQ3M2MgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2VuZ2luZS5oO2VuZGxpbmU9MjI7bWQ1PTRiNmQ4YmEzMTNkOWI1NjRjYzRkNGNmYjE2NDBhZjlkIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0L2dwZ21lLyR7QlB9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vZ3BnbWUucGMgXAorICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmZWFmYTAzZWEwNjRlMWQxZGMxMWJjMmI4ODQwNDYyMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiYjM4YzBlYzg4MTVjOWU5NGU2MDQ3YjQ4NDk4NDgwOGE4ZGFkOWQ2YmVjOGRmMzNkYzUzMzlmZDU1ZmZlYTZjIgorCitERVBFTkRTID0gImxpYmdwZy1lcnJvciBsaWJhc3N1YW4iCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vZ3BnbWUtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcKKworUEFDS0FHRVMgPSsgIiR7UE59LXB0aHJlYWQiCitGSUxFU18ke1BOfS1wdGhyZWFkID0gIiR7bGliZGlyfS9saWJncGdtZS1wdGhyZWFkLnNvLioiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vY29tbW9uLWxpc3Avc291cmNlL2dwZ21lLyoiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIEVsc2UgdGhlc2UgY291bGQgYmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIHRob3NlIGluIGFjbG9jYWwtY29weQorCXJtIC1mICR7U30vbTQvZ3BnLWVycm9yLm00CisJcm0gLWYgJHtTfS9tNC9saWJhc3N1YW4ubTQKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgICAgICBpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnCisgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2dwZ21lLnBjICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnLworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2ZjIyMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdS5pbmMKQEAgLTAsMCArMSw1MSBAQAorU1VNTUFSWSA9ICJJbnRlcm5hdGlvbmFsIENvbXBvbmVudCBmb3IgVW5pY29kZSBsaWJyYXJpZXMiCitERVNDUklQVElPTiA9ICJUaGUgSW50ZXJuYXRpb25hbCBDb21wb25lbnQgZm9yIFVuaWNvZGUgKElDVSkgaXMgYSBtYXR1cmUsIFwKK3BvcnRhYmxlIHNldCBvZiBDL0MrKyBhbmQgSmF2YSBsaWJyYXJpZXMgZm9yIFVuaWNvZGUgc3VwcG9ydCwgc29mdHdhcmUgXAoraW50ZXJuYXRpb25hbGl6YXRpb24gKEkxOE4pIGFuZCBnbG9iYWxpemF0aW9uIChHMTFOKSwgZ2l2aW5nIGFwcGxpY2F0aW9ucyB0aGUgXAorc2FtZSByZXN1bHRzIG9uIGFsbCBwbGF0Zm9ybXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3NpdGUuaWN1LXByb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJJQ1UiCitERVBFTkRTID0gImljdS1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCisKK1MgPSAiJHtXT1JLRElSfS9pY3Uvc291cmNlIgorU1BEWF9TID0gIiR7V09SS0RJUn0vaWN1IgorU1RBR0lOR19JQ1VfRElSX05BVElWRSA9ICIke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9LyR7QlBOfS8ke1BWfSIKKworQ1BQRkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtRFVfVElNRVpPTkU9MCIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9pY3UtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgYmluY29uZmlnCisKKyMgSUNVIG5lZWRzIHRoZSBuYXRpdmUgYnVpbGQgZGlyZWN0b3J5IGFzIGFuIGFyZ3VtZW50IHRvIGl0cyAtLXdpdGgtY3Jvc3MtYnVpbGQgb3B0aW9uIHdoZW4KKyMgY3Jvc3MtY29tcGlsaW5nLiBUYWtlbiB0aGUgc2l0dWF0aW9uIHRoYXQgZGlmZmVyZW50IGJ1aWxkcyBtYXkgc2hhcmUgYSBjb21tb24gc3N0YXRlLWNhY2hlCisjIGludG8gY29uc2lkZXJhdGlvbiwgdGhlIG5hdGl2ZSBidWlsZCBkaXJlY3RvcnkgbmVlZHMgdG8gYmUgc3RhZ2VkLgorRVhUUkFfT0VDT05GID0gIi0td2l0aC1jcm9zcy1idWlsZD0ke1NUQUdJTkdfSUNVX0RJUl9OQVRJVkV9IgorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICIiCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlc2RrID0gIi0td2l0aC1jcm9zcy1idWlsZD0ke1NUQUdJTkdfSUNVX0RJUl9OQVRJVkV9IgorCitQUkVQUk9DRVNTX1JFTE9DQVRFX0RJUlMgPSAiJHtkYXRhZGlyfS8ke0JQTn0vJHtQVn0iCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJbWtkaXIgLXAgJHtEfS8ke1NUQUdJTkdfSUNVX0RJUl9OQVRJVkV9L2NvbmZpZworCWNwIC1yICR7Qn0vY29uZmlnL2ljdWNyb3NzLm1rICR7RH0vJHtTVEFHSU5HX0lDVV9ESVJfTkFUSVZFfS9jb25maWcKKwljcCAtciAke0J9L2NvbmZpZy9pY3Vjcm9zcy5pbmMgJHtEfS8ke1NUQUdJTkdfSUNVX0RJUl9OQVRJVkV9L2NvbmZpZworCWNwIC1yICR7Qn0vbGliICR7RH0vJHtTVEFHSU5HX0lDVV9ESVJfTkFUSVZFfQorCWNwIC1yICR7Qn0vYmluICR7RH0vJHtTVEFHSU5HX0lDVV9ESVJfTkFUSVZFfQorCWNwIC1yICR7Qn0vdG9vbHMgJHtEfS8ke1NUQUdJTkdfSUNVX0RJUl9OQVRJVkV9Cit9CisKK1BBQ0tBR0VTID0rICJsaWJpY3VkYXRhIGxpYmljdXVjIGxpYmljdWkxOG4gbGliaWN1bGUgbGliaWN1bHggbGliaWN1dHUgbGliaWN1aW8iCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS8iCisKK0ZJTEVTX2xpYmljdWRhdGEgPSAiJHtsaWJkaXJ9L2xpYmljdWRhdGEuc28uKiIKK0ZJTEVTX2xpYmljdXVjID0gIiR7bGliZGlyfS9saWJpY3V1Yy5zby4qIgorRklMRVNfbGliaWN1aTE4biA9ICIke2xpYmRpcn0vbGliaWN1aTE4bi5zby4qIgorRklMRVNfbGliaWN1bGUgPSAiJHtsaWJkaXJ9L2xpYmljdWxlLnNvLioiCitGSUxFU19saWJpY3VseCA9ICIke2xpYmRpcn0vbGliaWN1bHguc28uKiIKK0ZJTEVTX2xpYmljdXR1ID0gIiR7bGliZGlyfS9saWJpY3V0dS5zby4qIgorRklMRVNfbGliaWN1aW8gPSAiJHtsaWJkaXJ9L2xpYmljdWlvLnNvLioiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdS8wMDAxLURpc2FibGUtTERGTEFHU0lDVURULWZvci1MaW51eC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdS8wMDAxLURpc2FibGUtTERGTEFHU0lDVURULWZvci1MaW51eC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTY4ZDU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1LzAwMDEtRGlzYWJsZS1MREZMQUdTSUNVRFQtZm9yLUxpbnV4LnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gMGM4MmQ2YWEwMmMwOGU0MWIxM2M4M2IxNDc4MmJkNzAyNGUyNWQ1OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDE1IEZlYiAyMDE0IDIxOjA2OjQyICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIERpc2FibGUgTERGTEFHU0lDVURUIGZvciBMaW51eAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgWyBPRSBDb25maWd1cmF0aW9uIF0KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHNvdXJjZS9jb25maWcvbWgtbGludXggfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWcvbWgtbGludXggYi9jb25maWcvbWgtbGludXgKK2luZGV4IDM2NmYwY2MuLjI2ODlhYWIgMTAwNjQ0CistLS0gYS9jb25maWcvbWgtbGludXgKKysrKyBiL2NvbmZpZy9taC1saW51eAorQEAgLTIxLDcgKzIxLDcgQEAgTERfUlBBVEg9IC1XbCwtem9yaWdpbiwtcnBhdGgsJyQkJ09SSUdJTgorIExEX1JQQVRIX1BSRSA9IC1XbCwtcnBhdGgsCisgCisgIyMgVGhlc2UgYXJlIHRoZSBsaWJyYXJ5IHNwZWNpZmljIExERkxBR1MKKy1MREZMQUdTSUNVRFQ9LW5vZGVmYXVsdGxpYnMgLW5vc3RkbGliCisrIyBMREZMQUdTSUNVRFQ9LW5vZGVmYXVsdGxpYnMgLW5vc3RkbGliCisgCisgIyMgQ29tcGlsZXIgc3dpdGNoIHRvIGVtYmVkIGEgbGlicmFyeSBuYW1lCisgIyBUaGUgaW5pdGlhbCB0YWIgaW4gdGhlIG5leHQgbGluZSBpcyB0byBwcmV2ZW50IGljdS1jb25maWcgZnJvbSByZWFkaW5nIGl0LgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3UvaWN1LXBrZ2RhdGEtbGFyZ2UtY21kLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1L2ljdS1wa2dkYXRhLWxhcmdlLWNtZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTQwNjU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1L2ljdS1wa2dkYXRhLWxhcmdlLWNtZC5wYXRjaApAQCAtMCwwICsxLDI5IEBACitwa2dkYXRhLmNwcDogdXNlIExBUkdFX0JVRkZFUl9NQVhfU0laRSBmb3IgY21kCisKK1VzZSBMQVJHRV9CVUZGRVJfTUFYX1NJWkUgZm9yIGNtZCByYXRoZXIgdGhhbiBTTUFMTF9CVUZGRVJfTUFYX1NJWkUsCitvdGhlcndpc2UgdGhlcmUgd2FzIGEgU2VnbWVudGF0aW9uIGZhdWx0IGVycm9yIHdoZW4gdGhlIGNvbW1hbmQgbGluZSBpcworbG9uZywgdGhpcyBzaG91bGQgYmUgYSBtaXNwbGF5IHNpbmNlIG90aGVyIGNtZCB1c2VzCitMQVJHRV9CVUZGRVJfTUFYX1NJWkUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHRvb2xzL3BrZ2RhdGEvcGtnZGF0YS5jcHAgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS90b29scy9wa2dkYXRhL3BrZ2RhdGEuY3BwIGIvdG9vbHMvcGtnZGF0YS9wa2dkYXRhLmNwcAorLS0tIGEvdG9vbHMvcGtnZGF0YS9wa2dkYXRhLmNwcAorKysrIGIvdG9vbHMvcGtnZGF0YS9wa2dkYXRhLmNwcAorQEAgLTEwMTksNyArMTAxOSw3IEBAIG5vcm1hbF9zeW1saW5rX21vZGU6CisgCisgc3RhdGljIGludDMyX3QgcGtnX2luc3RhbGxMaWJyYXJ5KGNvbnN0IGNoYXIgKmluc3RhbGxEaXIsIGNvbnN0IGNoYXIgKnRhcmdldERpciwgVUJvb2wgbm9WZXJzaW9uKSB7CisgICAgIGludDMyX3QgcmVzdWx0ID0gMDsKKy0gICAgY2hhciBjbWRbU01BTExfQlVGRkVSX01BWF9TSVpFXTsKKysgICAgY2hhciBjbWRbTEFSR0VfQlVGRkVSX01BWF9TSVpFXTsKKyAKKyAgICAgc3ByaW50ZihjbWQsICJjZCAlcyAmJiAlcyAlcyAlcyVzJXMiLAorICAgICAgICAgICAgIHRhcmdldERpciwKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1XzU1LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3VfNTUuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjNhOWJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1XzU1LjEuYmIKQEAgLTAsMCArMSwyMSBAQAorcmVxdWlyZSBpY3UuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLy4uL2xpY2Vuc2UuaHRtbDttZDU9NjRlZmY0YWFkZmY0ZDEwNGQ2ZDQzN2M0ZmRlMGU2ZDciCisKK2RlZiBpY3VfZG93bmxvYWRfdmVyc2lvbihkKToKKyAgICBwdnNwbGl0ID0gZC5nZXRWYXIoJ1BWJywgVHJ1ZSkuc3BsaXQoJy4nKQorICAgIHJldHVybiBwdnNwbGl0WzBdICsgIl8iICsgcHZzcGxpdFsxXQorCitJQ1VfUFYgPSAiJHtAaWN1X2Rvd25sb2FkX3ZlcnNpb24oZCl9IgorCitCQVNFX1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLmljdS1wcm9qZWN0Lm9yZy9maWxlcy9pY3U0Yy8ke1BWfS9pY3U0Yy0ke0lDVV9QVn0tc3JjLnRneiIKK1NSQ19VUkkgPSAiJHtCQVNFX1NSQ19VUkl9IFwKKyAgICAgICAgICAgZmlsZTovL2ljdS1wa2dkYXRhLWxhcmdlLWNtZC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1EaXNhYmxlLUxERkxBR1NJQ1VEVC1mb3ItTGludXgucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJlMmQ1MjNkZjc5ZDZjYjc4NTVjMmZiZTI4NGY0ZGIyOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlMTZiMjJjYmVmZGQzNTRiZWMxMTQ1NDFmNzg0OWExMmY4ZmMyMDE1MzIwY2E1MjgyZWU0ZmQ3ODc1NzE0NTdiIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2lzby1jb2Rlcy9pc28tY29kZXNfMy41OC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaXNvLWNvZGVzL2lzby1jb2Rlc18zLjU4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMTJlNDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2lzby1jb2Rlcy9pc28tY29kZXNfMy41OC5iYgpAQCAtMCwwICsxLDE1IEBACitTVU1NQVJZID0gIklTTyBsYW5ndWFnZSwgdGVycml0b3J5LCBjdXJyZW5jeSwgc2NyaXB0IGNvZGVzIGFuZCB0aGVpciB0cmFuc2xhdGlvbnMiCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZmJjMDkzOTAxODU3ZmNkMTE4ZjA2NWY5MDA5ODJjMjQiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9wa2ctaXNvY29kZXMuYWxpb3RoLmRlYmlhbi5vcmcvZG93bmxvYWRzL2lzby1jb2Rlcy0ke1BWfS50YXIueHoiCitTUkNfVVJJW21kNXN1bV0gPSAiMzQwOTdhMDA4NWYwOTc5ZTI4ZjlkYjY2ZWMyNzRjNWUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODZhZjU3MzVkY2U2ZTRlZmYyYjk4M2U1ZDhhYTlhM2RlYTFiOGRiNzAyMzMzZmYyMGJlODllNDVmN2YzNWE3MiIKKworIyBpbmhlcml0IGdldHRleHQgY2Fubm90IGJlIHVzZWQsIGJlY2F1c2UgaXQgYWRkcyBnZXR0ZXh0LW5hdGl2ZSB0byBCQVNFREVQRU5EUyB3aGljaAorIyBhcmUgaW5oaWJpdGVkIGJ5IGFsbGFyY2gKK0RFUEVORFMgPSAiZ2V0dGV4dC1uYXRpdmUiCisKK2luaGVyaXQgYWxsYXJjaCBhdXRvdG9vbHMKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0veG1sLyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYXNzdWFuL2xpYmFzc3Vhbi9saWJhc3N1YW4tYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhc3N1YW4vbGliYXNzdWFuL2xpYmFzc3Vhbi1hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZjY2RkYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYXNzdWFuL2xpYmFzc3Vhbi9saWJhc3N1YW4tYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMTU4IEBACitBZGQgcGtnY29uZmlnIHN1cHBvcnQgdG8gbGliYXNzdWFuLgorVGhpcyBwYXRjaCBpcyByZWplY3RlZCBieSB1cHN0cmVhbSBmb3IgdGhlIHJlYXNvbiBiZWxvdzoKK1RoZXkgdGhpbmsgcGtnY29uZmlnIGFkZHMgbm8gcG9ydGFiaWxpdHkgYW5kIG1haW50YWluaW5nIHRoZW0gaXMgbm90IHdvcnRod2hpbGUuCisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK0luZGV4OiBsaWJhc3N1YW4tMi4xLjIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhc3N1YW4tMi4xLjIub3JpZy9NYWtlZmlsZS5hbQorKysrIGxpYmFzc3Vhbi0yLjEuMi9NYWtlZmlsZS5hbQorQEAgLTI0LDEwICsyNCwxMyBAQCBBVVRPTUFLRV9PUFRJT05TID0gZGlzdC1iemlwMiBuby1kaXN0LWd6CisgIyAoQSBzdWl0YWJsZSBnaXRsb2ctdG8tY2hhbmdlbG9nIHNjcmlwdCBjYW4gYmUgZm91bmQgaW4gR251UEcgbWFzdGVyLikKKyBHSVRMT0dfVE9fQ0hBTkdFTE9HPWdpdGxvZy10by1jaGFuZ2Vsb2cKKyAKKytwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisrcGtnY29uZmlnX0RBVEEgPSBsaWJhc3N1YW4ucGMKKysKKyBFWFRSQV9ESVNUID0gYXV0b2dlbi5zaCBhdXRvZ2VuLnJjIFJFQURNRS5HSVQgICAgICAgICAJICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgQ2hhbmdlTG9nLTIwMTEgZG9jL0NoYW5nZUxvZy0yMDExIHNyYy9DaGFuZ2VMb2ctMjAxMSAJXAorICAgICAgICAgICAgICB0ZXN0cy9DaGFuZ2VMb2ctMjAxMSBjb250cmliL0NoYW5nZUxvZy0yMDExICAgICAJCVwKKy0gICAgICAgICAgICAgYnVpbGQtYXV4L2dpdC1sb2ctZm9vdGVyIGJ1aWxkLWF1eC9naXQtbG9nLWZpeAorKyAgICAgICAgICAgICBidWlsZC1hdXgvZ2l0LWxvZy1mb290ZXIgYnVpbGQtYXV4L2dpdC1sb2ctZml4IGxpYmFzc3Vhbi5wYy5pbgorIAorIFNVQkRJUlMgPSBtNCBzcmMgZG9jIHRlc3RzCisgCitJbmRleDogbGliYXNzdWFuLTIuMS4yL2xpYmFzc3Vhbi5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGxpYmFzc3Vhbi0yLjEuMi9saWJhc3N1YW4ucGMuaW4KK0BAIC0wLDAgKzEsMTQgQEAKKytwcmVmaXg9QHByZWZpeEAKKytleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACisrbGliZGlyPUBsaWJkaXJACisraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKythcGlfdmVyc2lvbj1ATElCQVNTVUFOX0NPTkZJR19BUElfVkVSU0lPTkAKKytob3N0PUBMSUJBU1NVQU5fQ09ORklHX0hPU1RACisrCisrTmFtZTogbGliYXNzdWFuCisrRGVzY3JpcHRpb246IElQQyBsaWJyYXJ5IHVzZWQgYnkgR251UEcgYW5kIEdQR01FCisrUmVxdWlyZXM6CisrVmVyc2lvbjogQFZFUlNJT05ACisrTGliczogLUwke2xpYmRpcn0gLWxhc3N1YW4KKytMaWJzLnByaXZhdGU6IC1sZ3BnLWVycm9yCisrQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KK0luZGV4OiBsaWJhc3N1YW4tMi4xLjIvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliYXNzdWFuLTIuMS4yLm9yaWcvY29uZmlndXJlLmFjCisrKysgbGliYXNzdWFuLTIuMS4yL2NvbmZpZ3VyZS5hYworQEAgLTQzOSw3ICs0MzksNyBAQCBBQ19DT05GSUdfRklMRVMoW2RvYy9NYWtlZmlsZV0pCisgQUNfQ09ORklHX0ZJTEVTKFt0ZXN0cy9NYWtlZmlsZV0pCisgQUNfQ09ORklHX0ZJTEVTKFtzcmMvbGliYXNzdWFuLWNvbmZpZ10sIFtjaG1vZCAreCBzcmMvbGliYXNzdWFuLWNvbmZpZ10pCisgQUNfQ09ORklHX0ZJTEVTKFtzcmMvdmVyc2lvbmluZm8ucmNdKQorLQorK0FDX0NPTkZJR19GSUxFUyhbbGliYXNzdWFuLnBjXSkKKyBBQ19PVVRQVVQKKyAKKyBlY2hvICIKK0luZGV4OiBsaWJhc3N1YW4tMi4xLjIvc3JjL2xpYmFzc3Vhbi5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmFzc3Vhbi0yLjEuMi5vcmlnL3NyYy9saWJhc3N1YW4ubTQKKysrKyBsaWJhc3N1YW4tMi4xLjIvc3JjL2xpYmFzc3Vhbi5tNAorQEAgLTE1LDE4ICsxNSw2IEBAIGRubCBSZXR1cm5zIG9rIHNldCB0byB5ZXMgb3Igbm8uCisgZG5sCisgQUNfREVGVU4oW19BTV9QQVRIX0xJQkFTU1VBTl9DT01NT05dLAorIFsgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorLSAgQUNfQVJHX1dJVEgobGliYXNzdWFuLXByZWZpeCwKKy0gICAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtbGliYXNzdWFuLXByZWZpeD1QRlhdLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByZWZpeCB3aGVyZSBMSUJBU1NVQU4gaXMgaW5zdGFsbGVkIChvcHRpb25hbCldKSwKKy0gICAgIGxpYmFzc3Vhbl9jb25maWdfcHJlZml4PSIkd2l0aHZhbCIsIGxpYmFzc3Vhbl9jb25maWdfcHJlZml4PSIiKQorLSAgaWYgdGVzdCB4JGxpYmFzc3Vhbl9jb25maWdfcHJlZml4ICE9IHggOyB0aGVuCistICAgIGxpYmFzc3Vhbl9jb25maWdfYXJncz0iJGxpYmFzc3Vhbl9jb25maWdfYXJncyAtLXByZWZpeD0kbGliYXNzdWFuX2NvbmZpZ19wcmVmaXgiCistICAgIGlmIHRlc3QgeCR7TElCQVNTVUFOX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCistICAgICAgTElCQVNTVUFOX0NPTkZJRz0kbGliYXNzdWFuX2NvbmZpZ19wcmVmaXgvYmluL2xpYmFzc3Vhbi1jb25maWcKKy0gICAgZmkKKy0gIGZpCistCistICBBQ19QQVRIX1RPT0woTElCQVNTVUFOX0NPTkZJRywgbGliYXNzdWFuLWNvbmZpZywgbm8pCisgCisgICB0bXA9aWZlbHNlKFskMV0sICwxOjAuOS4yLCQxKQorICAgaWYgZWNobyAiJHRtcCIgfCBncmVwICc6JyA+L2Rldi9udWxsIDI+L2Rldi9udWxsIDsgdGhlbgorQEAgLTM3LDUxICsyNSwxMiBAQCBBQ19ERUZVTihbX0FNX1BBVEhfTElCQVNTVUFOX0NPTU1PTl0sCisgICAgIG1pbl9saWJhc3N1YW5fdmVyc2lvbj0iJHRtcCIKKyAgIGZpCisgCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIExJQkFTU1VBTiAtIHZlcnNpb24gPj0gJG1pbl9saWJhc3N1YW5fdmVyc2lvbikKKy0gIG9rPW5vCistICBpZiB0ZXN0ICIkTElCQVNTVUFOX0NPTkZJRyIgIT0gIm5vIiBcCistICAgICAmJiB0ZXN0IC1mICIkTElCQVNTVUFOX0NPTkZJRyIgOyB0aGVuCistICAgIHJlcV9tYWpvcj1gZWNobyAkbWluX2xpYmFzc3Vhbl92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wxLydgCistICAgIHJlcV9taW5vcj1gZWNobyAkbWluX2xpYmFzc3Vhbl92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wyLydgCistICAgIHJlcV9taWNybz1gZWNobyAkbWluX2xpYmFzc3Vhbl92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wzLydgCistCistICAgIGxpYmFzc3Vhbl9jb25maWdfdmVyc2lvbj1gJExJQkFTU1VBTl9DT05GSUcgLS12ZXJzaW9uYAorLSAgICBtYWpvcj1gZWNobyAkbGliYXNzdWFuX2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDEvJ2AKKy0gICAgbWlub3I9YGVjaG8gJGxpYmFzc3Vhbl9jb25maWdfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wyLydgCistICAgIG1pY3JvPWBlY2hvICRsaWJhc3N1YW5fY29uZmlnX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMy8nYAorLQorLSAgICBpZiB0ZXN0ICIkbWFqb3IiIC1ndCAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgIG9rPXllcworLSAgICBlbHNlIAorLSAgICAgICAgaWYgdGVzdCAiJG1ham9yIiAtZXEgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICAgICAgaWYgdGVzdCAiJG1pbm9yIiAtZ3QgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgIGlmIHRlc3QgIiRtaW5vciIgLWVxICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkbWljcm8iIC1nZSAiJHJlcV9taWNybyI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgIGZpCistICAgICAgICBmaQorLSAgICBmaQorLSAgZmkKKy0KKy0gIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIEFDX01TR19SRVNVTFQoW3llcyAoJGxpYmFzc3Vhbl9jb25maWdfdmVyc2lvbildKQorLSAgZWxzZQorLSAgICBBQ19NU0dfUkVTVUxUKG5vKQorLSAgZmkKKysgIFBLR19DSEVDS19NT0RVTEVTKExJQkFTU1VBTiwgW2xpYmFzc3VhbiA+PSAkbWluX2xpYmFzc3Vhbl92ZXJzaW9uXSwgW29rPXllc10sIFtvaz1ub10pCisgCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorICAgICBpZiB0ZXN0ICIkcmVxX2xpYmFzc3Vhbl9hcGkiIC1ndCAwIDsgdGhlbgorICAgICAgIHRtcD1gJExJQkFTU1VBTl9DT05GSUcgLS1hcGktdmVyc2lvbiAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgCisrICAgICAgdG1wPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWFwaV92ZXJzaW9uIGxpYmFzc3VhbmAKKyAgICAgICBpZiB0ZXN0ICIkdG1wIiAtZ3QgMCA7IHRoZW4KKyAgICAgICAgIEFDX01TR19DSEVDS0lORyhbTElCQVNTVUFOIEFQSSB2ZXJzaW9uXSkKKyAgICAgICAgIGlmIHRlc3QgIiRyZXFfbGliYXNzdWFuX2FwaSIgLWVxICIkdG1wIiA7IHRoZW4KK0BAIC05Niw3ICs0NSw3IEBAIEFDX0RFRlVOKFtfQU1fUEFUSF9MSUJBU1NVQU5fQ09NTU9OXSwKKyAKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCisgICAgIGlmIHRlc3QgeCIkaG9zdCIgIT0geCA7IHRoZW4KKy0gICAgICBsaWJhc3N1YW5fY29uZmlnX2hvc3Q9YCRMSUJBU1NVQU5fQ09ORklHIC0taG9zdCAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vbmVgCisrICAgICAgbGliYXNzdWFuX2NvbmZpZ19ob3N0PWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWhvc3QgbGliYXNzdWFuYAorICAgICAgIGlmIHRlc3QgeCIkbGliYXNzdWFuX2NvbmZpZ19ob3N0IiAhPSB4bm9uZSA7IHRoZW4KKyAgICAgICAgIGlmIHRlc3QgeCIkbGliYXNzdWFuX2NvbmZpZ19ob3N0IiAhPSB4IiRob3N0IiA7IHRoZW4KKyAgIEFDX01TR19XQVJOKFtbCitAQCAtMTM3LDEyICs4Niw4IEBAIGRubAorIEFDX0RFRlVOKFtBTV9QQVRIX0xJQkFTU1VBTl0sCisgWyBfQU1fUEFUSF9MSUJBU1NVQU5fQ09NTU9OKCQxKQorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgTElCQVNTVUFOX0NGTEFHUz1gJExJQkFTU1VBTl9DT05GSUcgJGxpYmFzc3Vhbl9jb25maWdfYXJncyAtLWNmbGFnc2AKKy0gICAgTElCQVNTVUFOX0xJQlM9YCRMSUJBU1NVQU5fQ09ORklHICRsaWJhc3N1YW5fY29uZmlnX2FyZ3MgLS1saWJzYAorICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQorICAgZWxzZQorLSAgICBMSUJBU1NVQU5fQ0ZMQUdTPSIiCistICAgIExJQkFTU1VBTl9MSUJTPSIiCisgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCisgICBmaQorICAgQUNfU1VCU1QoTElCQVNTVUFOX0NGTEFHUykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYXNzdWFuL2xpYmFzc3Vhbl8yLjIuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYXNzdWFuL2xpYmFzc3Vhbl8yLjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWFlNDNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhc3N1YW4vbGliYXNzdWFuXzIuMi4xLmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiSVBDIGxpYnJhcnkgdXNlZCBieSBHbnVQRyBhbmQgR1BHTUUiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudXBnLm9yZy9yZWxhdGVkX3NvZnR3YXJlL2xpYmFzc3Vhbi8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5nMTBjb2RlLmNvbS9nbnVwZy9pbmRleCIKKworTElDRU5TRSA9ICJHUEx2MyAmIExHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWYyN2RlZmUxZTk2YzJlMWVjZDRlMGM5YmU4OTY3OTQ5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvYXNzdWFuLmM7ZW5kbGluZT0yMDttZDU9MGY0NjU1NDQxODM0MDUwNTVlYzE3OTg2OWZjNWI1YmEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2Fzc3Vhbi1kZWZzLmg7ZW5kbGluZT0yMDttZDU9MjBjZDU1NTM1MjYwY2ExNzc5ZWRhZTVjN2I4MGIyMWUiCisKK0RFUEVORFMgPSAibGliZ3BnLWVycm9yIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0L2xpYmFzc3Vhbi9saWJhc3N1YW4tJHtQVn0udGFyLmJ6MiBcCisJICAgZmlsZTovL2xpYmFzc3Vhbi1hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2MjkwZTc1MGVlODdiZTNiZmQ5NTc5ZmM0NGM2YTE4NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5NDkyODViYjc5MzQ1MzYyY2I3MmE0MGM3OThkZWZlZmMwMDcwMzFjNjBmMmYxMDI1MTcyMGJmNjBhOWRlMmRlIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2xpYmFzc3Vhbi1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZworCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyBFbHNlIHRoZXNlIGNvdWxkIGJlIHVzZWQgaW4gcHJlZmVybmNlIHRvIHRob3NlIGluIGFjbG9jYWwtY29weQorCXJtIC1mICR7U30vbTQvKi5tNAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYXRvbWljLW9wcy9saWJhdG9taWMtb3BzXzcuNC4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhdG9taWMtb3BzL2xpYmF0b21pYy1vcHNfNy40LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQwZTI5OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYXRvbWljLW9wcy9saWJhdG9taWMtb3BzXzcuNC4yLmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiQSBsaWJyYXJ5IGZvciBhdG9taWMgaW50ZWdlciBvcGVyYXRpb25zIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL2l2bWFpL2xpYmF0b21pY19vcHMvIgorU0VDVElPTiA9ICJvcHRpb25hbCIKK1BST1ZJREVTICs9ICJsaWJhdG9taWNzLW9wcyIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kb2MvTElDRU5TSU5HLnR4dDttZDU9ZTAwZGQ1YzhhYzAzYTE0YzVhZTUyMjVhNDUyNWZhMmQgXAorCQkgICAiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5pdm1haXNvZnQuY29tL19iaW4vYXRvbWljX29wcy9saWJhdG9taWNfb3BzLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjFkNjUzODYwNGIzMTRkMmZjY2RmODY5MTVlNWMwODU3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA0ZmE2MTVmNjI5OTI1NDdiY2JkYTU2MjI2MGUyOGI1MDRiYzRjMDZlMmY5ODVmMjY3ZjNhZGUzMDMwNGI1ZGQiCisKK1MgPSAiJHtXT1JLRElSfS9saWJhdG9taWNfb3BzLSR7UFZ9IgorCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgdGhvc2UgY29udGFpbiBvbmx5IGRvY3MsIG5vdCBuZWNlc3NhcnkgZm9yIG5vdy4KKwlpbnN0YWxsIC1tIDA3NTUgLWQgJHtEfSR7ZG9jZGlyfQorCW12ICR7RH0ke2RhdGFkaXJ9L2xpYmF0b21pY19vcHMgJHtEfSR7ZG9jZGlyfS8ke0JQTn0KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJic2QvbGliYnNkXzAuNy4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJic2QvbGliYnNkXzAuNy4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMjY2NmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmJzZC9saWJic2RfMC43LjAuYmIKQEAgLTAsMCArMSwyMSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTMgS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQgZm9yIHRoZSB0ZXJtcykKKworU1VNTUFSWSA9ICJMaWJyYXJ5IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGZyb20gQlNEIHN5c3RlbXMiCitERVNDUklQVElPTiA9ICJUaGlzIGxpYnJhcnkgcHJvdmlkZXMgdXNlZnVsIGZ1bmN0aW9ucyBjb21tb25seSBmb3VuZCBvbiBCU0Qgc3lzdGVtcywgXAorICAgICAgICAgICAgICAgYW5kIGxhY2tpbmcgb24gb3RoZXJzIGxpa2UgR05VIHN5c3RlbXMsIHRodXMgbWFraW5nIGl0IGVhc2llciB0byBwb3J0IFwKKyAgICAgICAgICAgICAgIHByb2plY3RzIHdpdGggc3Ryb25nIEJTRCBvcmlnaW5zLCB3aXRob3V0IG5lZWRpbmcgdG8gZW1iZWQgdGhlIHNhbWUgXAorICAgICAgICAgICAgICAgY29kZSBvdmVyIGFuZCBvdmVyIGFnYWluIG9uIGVhY2ggcHJvamVjdC4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9saWJic2QuZnJlZWRlc2t0b3Aub3JnL3dpa2kvIgorTElDRU5TRSA9ICJCU0QtNC1DbGF1c2UgJiBNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMTUzMGVhOTJhZWFhMWM1ZTI1NDdjZmQ0MzkwNWQ4YyIKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAiIgorCitTUkNfVVJJID0gImh0dHA6Ly9saWJic2QuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzLyR7QlBOfS0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmY2NlYjRlNjZmZDQ0OGNhNGVkNDJiYTIyYThiYWJiMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwZjNiMGUxN2U1YzM0YzAzODEyNmUwYTA0MzUxYjExZTIzYzYxMDFhN2QwY2UzYmVlYWIyOWJiNjQxNWMxMGJiIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2FwLW5nL2xpYmNhcC1uZy9weXRob24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC1uZy9saWJjYXAtbmcvcHl0aG9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NTkxZWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC1uZy9saWJjYXAtbmcvcHl0aG9uLnBhdGNoCkBAIC0wLDAgKzEsNTggQEAKK0Zyb20gYjAxYmIyNjk0ZjY2Y2Q5ODFlNmQ2MTUyMzQzM2RjM2ViNWVkMzJmMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IExpIHhpbiA8bGl4aW4uZm5zdEBjbi5mdWppdHN1LmNvbT4KK0RhdGU6IFNhdCwgMTggSnVsIDIwMTUgMjM6MDM6MzAgKzA5MDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlLmFjIC0gQXZvaWQgYW4gaW5jb3JyZWN0IGNoZWNrIGZvciBweXRob24uCisgTWFrZWZpbGUuYW0gLSBhdm9pZCBoYXJkIGNvZGVkIGhvc3QgaW5jbHVkZSBwYXRocy4KKworVXBzdHJlYW0tU3RhdHVzOiBwZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IExpIFhpbiA8bGl4aW4uZm5zdEBjbi5mdWppdHN1LmNvbT4KKy0tLQorIGJpbmRpbmdzL3B5dGhvbi9NYWtlZmlsZS5hbSB8ICAzICsrLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICB8IDE1ICsrLS0tLS0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2JpbmRpbmdzL3B5dGhvbi9NYWtlZmlsZS5hbSBiL2JpbmRpbmdzL3B5dGhvbi9NYWtlZmlsZS5hbQoraW5kZXggODJiOWJiOC4uZjlmZTdhOCAxMDA2NDQKKy0tLSBhL2JpbmRpbmdzL3B5dGhvbi9NYWtlZmlsZS5hbQorKysrIGIvYmluZGluZ3MvcHl0aG9uL01ha2VmaWxlLmFtCitAQCAtMjMsNyArMjMsOCBAQCBTVUJESVJTID0gdGVzdAorIENPTkZJR19DTEVBTl9GSUxFUyA9ICoubG9UICoucmVqICoub3JpZworIEFNX0NGTEFHUyA9IC1mUElDIC1EUElDCisgUFlMSUJWRVIgPz0gcHl0aG9uJChQWVRIT05fVkVSU0lPTikKKy1BTV9DUFBGTEFHUyA9IC1JLiAtSSQodG9wX2J1aWxkZGlyKSAtSUBQWUlOQ0xVREVESVJACisrUFlJTkMgPz0gL3Vzci9pbmNsdWRlLyQoUFlMSUJWRVIpCisrQU1fQ1BQRkxBR1MgPSAtSS4gLUkkKHRvcF9idWlsZGRpcikgLUkkKFBZSU5DKQorIExJQlMgPSAkKHRvcF9idWlsZGRpcikvc3JjL2xpYmNhcC1uZy5sYQorIFNXSUdfRkxBR1MgPSAtcHl0aG9uCisgU1dJR19JTkNMVURFUyA9ICR7QU1fQ1BQRkxBR1N9CitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAxZDc3N2Q1Li45ZDkwZjY0IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMjMsMTkgKzEyMyw4IEBAIGlmIHRlc3QgeCR1c2VfcHl0aG9uID0geG5vIDsgdGhlbgorIGVsc2UKKyBBQ19NU0dfUkVTVUxUKHRlc3RpbmcpCisgQU1fUEFUSF9QWVRIT04KKy1QWUlOQ0xVREVESVI9YHB5dGhvbiR7YW1fY3ZfcHl0aG9uX3ZlcnNpb259IC1jICJmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnOyBwcmludChzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0lOQ0xVREVQWScpKSJgCistaWYgdGVzdCAtZiAke1BZSU5DTFVERURJUn0vUHl0aG9uLmggOyB0aGVuCistCXB5dGhvbl9mb3VuZD0ieWVzIgorLQlBQ19TVUJTVChQWUlOQ0xVREVESVIpCistCUFDX01TR19OT1RJQ0UoUHl0aG9uIGJpbmRpbmdzIHdpbGwgYmUgYnVpbHQpCistZWxzZQorLQlweXRob25fZm91bmQ9Im5vIgorLQlpZiB0ZXN0IHgkdXNlX3B5dGhvbiA9IHh5ZXMgOyB0aGVuCistCQlBQ19NU0dfRVJST1IoW1B5dGhvbiBleHBsaWNpdGx5IHJlcXVpcmVkIGFuZCBweXRob24gaGVhZGVycyBmb3VuZF0pCistCWVsc2UKKy0JCUFDX01TR19XQVJOKCJQeXRob24gaGVhZGVycyBub3QgZm91bmQgLSBweXRob24gYmluZGluZ3Mgd2lsbCBub3QgYmUgbWFkZSIpCistCWZpCistZmkKKytweXRob25fZm91bmQ9InllcyIKKytBQ19NU0dfTk9USUNFKFB5dGhvbiBiaW5kaW5ncyB3aWxsIGJlIGJ1aWx0KQorIGZpCisgQU1fQ09ORElUSU9OQUwoSEFWRV9QWVRIT04sIHRlc3QgJHtweXRob25fZm91bmR9ID0gInllcyIpCisgCistLSAKKzEuOC40LjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAtbmcvbGliY2FwLW5nXzAuNy43LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAtbmcvbGliY2FwLW5nXzAuNy43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMWQ1ZGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC1uZy9saWJjYXAtbmdfMC43LjcuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJBbiBhbHRlcm5hdGUgcG9zaXggY2FwYWJpbGl0aWVzIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJUaGUgbGliY2FwLW5nIGxpYnJhcnkgaXMgaW50ZW5kZWQgdG8gbWFrZSBwcm9ncmFtbWluZyBcCit3aXRoIFBPU0lYIGNhcGFiaWxpdGllcyBtdWNoIGVhc2llciB0aGFuIHRoZSB0cmFkaXRpb25hbCBsaWJjYXAgbGlicmFyeS4iCitIT01FUEFHRSA9ICJodHRwOi8vZnJlZWNvZGUuY29tL3Byb2plY3RzL2xpYmNhcC1uZyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorCQkgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT1lM2VkYTAxZDk4MTVmOGQyNGFhZTJkYmQ4OWI2OGIwNiIKKworU1JDX1VSSSA9ICJodHRwOi8vcGVvcGxlLnJlZGhhdC5jb20vc2dydWJiL2xpYmNhcC1uZy9saWJjYXAtbmctJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3B5dGhvbi5wYXRjaCIKKworaW5oZXJpdCBsaWJfcGFja2FnZSBhdXRvdG9vbHMgcHl0aG9ubmF0aXZlCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzZDdkMTI2YjI5ZTI4NjlhMDI1N2MxN2M4YjBkOWIyZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MTU1NDljZTM5YjMzM2Y2Yjc4YmFlZTBjMGI0ZWYxOGJjNzI2YzZiZjFjY2ExMjNkZmQ4OWRkOTYzZjZkMDZiIgorCitERVBFTkRTICs9ICJzd2lnLW5hdGl2ZSBweXRob24iCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRob3V0LXB5dGhvbjMiCisKK0VYVFJBX09FTUFLRSArPSAiUFlMSUJWRVI9J3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfScgUFlJTkM9JyR7U1RBR0lOR19JTkNESVJ9LyR7UFlMSUJWRVJ9JyIKKworUEFDS0FHRVMgKz0gIiR7UE59LXB5dGhvbiIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059LyovLmRlYnVnIgorRklMRVNfJHtQTn0tcHl0aG9uID0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIE1vdmluZyBsaWJjYXAtbmcgdG8gYmFzZV9saWJkaXIKKwlpZiBbICEgJHtEfSR7bGliZGlyfSAtZWYgJHtEfSR7YmFzZV9saWJkaXJ9IF07IHRoZW4KKwkJbWtkaXIgLXAgJHtEfS8ke2Jhc2VfbGliZGlyfS8KKwkJbXYgLWYgJHtEfSR7bGliZGlyfS9saWJjYXAtbmcuc28uKiAke0R9JHtiYXNlX2xpYmRpcn0vCisJCXJlbHBhdGg9JHtAb3MucGF0aC5yZWxwYXRoKCIke2Jhc2VfbGliZGlyfSIsICIke2xpYmRpcn0iKX0KKwkJbG4gLXNmICR7cmVscGF0aH0vbGliY2FwLW5nLnNvLjAuMC4wICR7RH0ke2xpYmRpcn0vbGliY2FwLW5nLnNvCisJZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2FwL2xpYmNhcF8yLjI0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAvbGliY2FwXzIuMjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZiOTRlZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2FwL2xpYmNhcF8yLjI0LmJiCkBAIC0wLDAgKzEsNzcgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgZ2V0dGluZy9zZXR0aW5nIFBPU0lYLjFlIGNhcGFiaWxpdGllcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9zaXRlcy5nb29nbGUuY29tL3NpdGUvZnVsbHljYXBhYmxlLyIKKworIyBubyBzcGVjaWZpYyBHUEwgdmVyc2lvbiByZXF1aXJlZAorTElDRU5TRSA9ICJCU0QgfCBHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xpY2Vuc2U7bWQ1PTNmODRmZDZmMjlkNDUzYTU2NTE0Y2I3ZTRlYWQyNWYxIgorCitERVBFTkRTID0gInBlcmwtbmF0aXZlLXJ1bnRpbWUiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC9saWJzL3NlY3VyaXR5L2xpbnV4LXByaXZzLyR7QlBOfTIvJHtCUE59LSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gImQ0M2FiOWY2ODA0MzVhN2ZmZjM1YjRhY2U4ZDQ1YjgwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNlZTQ1NjhmNzhkYzg1MWQ3MjZmYzkzZjI1ZjRlZDkxY2MyMjNiMWZlODI1OWRhYTRhNzcxNThkMTc0ZTZjNjUiCisKK2luaGVyaXQgbGliX3BhY2thZ2UKKworIyBkbyBOT1QgcGFzcyB0YXJnZXQgY2ZsYWdzIHRvIGhvc3QgY29tcGlsYXRpb25zCisjCitkb19jb25maWd1cmUoKSB7CisJIyBsaWJjYXAgdXNlcyA6PSBmb3IgY29tcGlsZXJzLCBmb3J0dW5hdGVseSwgaXQgZ2l2ZXMgdXMgYSBoaW50CisJIyBvbiB3aGF0IHNob3VsZCBiZSByZXBsYWNlZCB3aXRoID89CisJc2VkIC1lICdzLDo9LD89LGcnIC1pIE1ha2UuUnVsZXMKKwlzZWQgLWUgJ3MsXkJVSUxEX0NGTEFHUyA/PSAkKC4qQ0ZMQUdTKSxCVUlMRF9DRkxBR1MgOj0gJChCVUlMRF9DRkxBR1MpLCcgLWkgTWFrZS5SdWxlcworCisJIyBkaXNhYmxlIGdwZXJmIGRldGVjdGlvbgorCXNlZCAtZSAnL3NoZWxsIGdwZXJmL2NpZmVxICgseWVzKScgLWkgbGliY2FwL01ha2VmaWxlCit9CisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3hhdHRyJywgJ2F0dHInLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPz89ICIiCisKK1BBQ0tBR0VDT05GSUdbYXR0cl0gPSAiTElCQVRUUj15ZXMsTElCQVRUUj1ubyxhdHRyIgorUEFDS0FHRUNPTkZJR1twYW1dID0gIlBBTV9DQVA9eWVzLFBBTV9DQVA9bm8sbGlicGFtIgorCitFWFRSQV9PRU1BS0UgPSAiIFwKKyAgSU5ERU5UPSAgXAorICBsaWI9JHtAb3MucGF0aC5iYXNlbmFtZSgnJHtsaWJkaXJ9Jyl9IFwKKyAgUkFJU0VfU0VURkNBUD1ubyBcCisgIERZTkFNSUM9eWVzIFwKKyIKKworRVhUUkFfT0VNQUtFX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIFNZU1RFTV9IRUFERVJTPSR7U1RBR0lOR19JTkNESVJ9IgorCisjIHRoZXNlIGFyZSBwcmVzZW50IGluIHRoZSBsaWJjYXAgZGVmYXVsdHMsIHNvIGluY2x1ZGUgaW4gb3VyIENGTEFHUyB0b28KK0NGTEFHUyArPSAiLURfTEFSR0VGSUxFNjRfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCisKK2RvX2NvbXBpbGUoKSB7CisJb2VfcnVubWFrZSAke0VYVFJBX09FQ09ORn0KK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGwgXAorCQkke0VYVFJBX09FQ09ORn0gXAorCQlERVNURElSPSIke0R9IiBcCisJCXByZWZpeD0iJHtwcmVmaXh9IiBcCisJCVNCSU5ESVI9IiR7RH0ke3NiaW5kaXJ9IgorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIE1vdmUgdGhlIGxpYnJhcnkgdG8gYmFzZV9saWJkaXIKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfbGliZGlyfQorCWlmIFsgISAke0R9JHtsaWJkaXJ9IC1lZiAke0R9JHtiYXNlX2xpYmRpcn0gXTsgdGhlbgorCQltdiAke0R9JHtsaWJkaXJ9L2xpYmNhcCogJHtEfSR7YmFzZV9saWJkaXJ9CisgICAgICAgICAgICAgICAgaWYgWyAtZCAke0R9JHtsaWJkaXJ9L3NlY3VyaXR5IF07IHRoZW4KKwkJCW12ICR7RH0ke2xpYmRpcn0vc2VjdXJpdHkgJHtEfSR7YmFzZV9saWJkaXJ9CisJCWZpCisJZmkKK30KKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2Jhc2VfbGliZGlyfS8qLnNvIgorCisjIHBhbSBmaWxlcworRklMRVNfJHtQTn0gKz0gIiR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5Lyouc28iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5Ly5kZWJ1Zy8qLnNvIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNoZWNrL2xpYmNoZWNrXzAuMTAuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2hlY2svbGliY2hlY2tfMC4xMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYjQ1OWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNoZWNrL2xpYmNoZWNrXzAuMTAuMC5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZICA9ICJDaGVjayAtIHVuaXQgdGVzdGluZyBmcmFtZXdvcmsgZm9yIEMgY29kZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9jaGVjay5zb3VyY2Vmb3JnZS5uZXQvIgorU0VDVElPTiA9ICJkZXZlbCIKKworTElDRU5TRSAgPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MRVNTRVI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9jaGVjay9jaGVjay0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjUzYzVlNWM3N2QwOTBlMTAzYTE3ZjNlZDdmZDdkOGI4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY1ZjUwNzY2YWE2ZjhmZTVhMmRmNzUyNjY2Y2EwMWE5NTBhZGQ0NTA3OWFhMDY0MTZiODM3NjViMWNmNzEwNTIiCisKK1MgPSAiJHtXT1JLRElSfS9jaGVjay0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHRleGluZm8KKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfQVdLX1BBVEg9JHtiaW5kaXJ9L2dhd2siCisKK1JSRVBMQUNFU18ke1BOfSA9ICJjaGVjayAoPD0gMC45LjUpIgorUkRFUEVORFNfJHtQTn0gKz0gImdhd2siCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY3JvY28vbGliY3JvY29fMC42LjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNyb2NvL2xpYmNyb2NvXzAuNi44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMWI5MTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNyb2NvL2xpYmNyb2NvXzAuNi44LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiQ2FzY2FkaW5nIFN0eWxlIFNoZWV0IChDU1MpIHBhcnNpbmcgYW5kIG1hbmlwdWxhdGlvbiB0b29sa2l0IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbm9tZS5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCisKK0xJQ0VOU0UgPSAiTEdQTHYyICYgTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01NWNhODE3Y2NiN2Q1YjViNjYzNTU2OTBlOWFiYzYwNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvY3ItcmdiLmM7ZW5kbGluZT0yMjttZDU9MzFkNWYwOTQ0ZDU1NmM4NTg5ZDA0ZWE2MDU1ZmNjNjYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvY3ItdGVzdC11dGlscy5jO2VuZGxpbmU9MjE7bWQ1PTIzODJjMjc5MzRjYWUxZDM3OTJmY2IxN2E2MTQyYzRlIgorCitTRUNUSU9OID0gIngxMS91dGlscyIKK0RFUEVORFMgPSAiZ2xpYi0yLjAgbGlieG1sMiB6bGliIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCitFWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLUJzeW1ib2xpYz1hdXRvIgorUFIgPSAicjIiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vY3JvY28tMC42LWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdub21lYmFzZSBndGstZG9jIGJpbmNvbmZpZy1kaXNhYmxlZAorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI3NjdlNzNjNDE3NGY3NWI5OTY5NWQ0NTMwZmQ5YmI4MCIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImVhNmUxYjg1OGM1NTIxOWNlZmQ3MTA5NzU2YmZmNWJjMWE3NzRiYTdhNTVmN2QzY2NkNzM0ZDZiODcxYjg1NzAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmRhZW1vbi9saWJkYWVtb24vZml4LWluY2x1ZGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJkYWVtb24vbGliZGFlbW9uL2ZpeC1pbmNsdWRlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDI3YWU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJkYWVtb24vbGliZGFlbW9uL2ZpeC1pbmNsdWRlcy5wYXRjaApAQCAtMCwwICsxLDIwIEBACittdXNsIGNvbXBsYWlucworZmF0YWwgZXJyb3I6IHN5cy91bmlzdGQuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorYW5kIHJpZ2h0bHkgc28KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gbGliZGFlbW9uLTAuMTQub3JpZy9leGFtcGxlcy90ZXN0ZC5jCisrKysgbGliZGFlbW9uLTAuMTQvZXhhbXBsZXMvdGVzdGQuYworQEAgLTIxLDkgKzIxLDkgQEAKKyAjaW5jbHVkZSA8c2lnbmFsLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy90aW1lLmg+CistI2luY2x1ZGUgPHN5cy91bmlzdGQuaD4KKyAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorIAorICNpbmNsdWRlIDxsaWJkYWVtb24vZGZvcmsuaD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZGFlbW9uL2xpYmRhZW1vbl8wLjE0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJkYWVtb24vbGliZGFlbW9uXzAuMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcwZWUxOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZGFlbW9uL2xpYmRhZW1vbl8wLjE0LmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiTGlnaHR3ZWlnaHQgQyBsaWJyYXJ5IHdoaWNoIGVhc2VzIHRoZSB3cml0aW5nIG9mIFVOSVggZGFlbW9ucyIKK1NFQ1RJT04gPSAibGlicyIKK0FVVEhPUiA9ICJMZW5uYXJ0IFBvZXR0ZXJpbmcgPGxlbm5hcnRAcG9ldHRlcmluZy5uZXQ+IgorSE9NRVBBR0UgPSAiaHR0cDovLzBwb2ludGVyLmRlL2xlbm5hcnQvcHJvamVjdHMvbGliZGFlbW9uLyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliZGFlbW9uL2RhZW1vbi5oO2JlZ2lubGluZT05O2VuZGxpbmU9MjE7bWQ1PWJkOWZiZTU3Y2Q5NmQxYTU4NDhhOGJhMTJkOWE2YmY0IgorCitTUkNfVVJJID0gImh0dHA6Ly8wcG9pbnRlci5kZS9sZW5uYXJ0L3Byb2plY3RzL2xpYmRhZW1vbi9saWJkYWVtb24tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1pbmNsdWRlcy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTA5ZGMyNzEwN2MyMWJjZDlmYmYyZjk1ZjU2Njk1NjMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmQyM2ViNWY2Zjk4NmRjYzdlNzA4MzA3MzU1YmEzMjg5YWJlMDNjYzM4MWZjNDdhODBiY2E0YTUwYWE2YjgzNCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtbHlueCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZkZXYvbGliZXZkZXZfMS40LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZGV2L2xpYmV2ZGV2XzEuNC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NTEzMDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZGV2L2xpYmV2ZGV2XzEuNC4yLmJiCkBAIC0wLDAgKzEsMTQgQEAKK1NVTU1BUlkgPSAiV3JhcHBlciBsaWJyYXJ5IGZvciBldmRldiBkZXZpY2VzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9saWJldmRldi8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTUlULVgiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NWFhZTBkMzhmZWVhNmZkYTk3Y2EzODFjYjkxMzJlYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJldmRldi9saWJldmRldi5oO2VuZGxpbmU9MjE7bWQ1PTdmZjRmMGI1MTEzMjUyYzJmMWE4MjhlMGJiYWQ5OGQxIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL2xpYmV2ZGV2LyR7QlB9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gImRlYmZjZDUxNTM1NThlYmEyNWE4ZTcxZWIyNTM0YWU4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdjNzdiMjEzZjA3NTcwNmQ0MjhhMmFmNTRiNjZiZjg2YjAzYTY4ZTlmYjM5MGU3ZWM0OGNmNTUwNjU5NzA2NDMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmVudC9saWJldmVudC9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZW50L2xpYmV2ZW50L3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTIxNjg4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmVudC9saWJldmVudC9ydW4tcHRlc3QKQEAgLTAsMCArMSwxOCBAQAorIyEvYmluL3NoCisKK2ZhaWw9MAorZm9yIHRlc3QgaW4gLi90ZXN0LyoKK2RvCisJJHRlc3QKKwlpZiBbICQ/IC1lcSAwIF0KKwl0aGVuCisJCWZhaWw9MQorCWZpCitkb25lCisKK2lmIFsgJGZhaWwgLWVxIDAgXQordGhlbgorCWVjaG8gIlBBU1M6IGxpYmV2ZW50IgorZWxzZQorCWVjaG8gIkZBSUw6IGxpYmV2ZW50IgorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZlbnQvbGliZXZlbnRfMi4wLjIyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmVudC9saWJldmVudF8yLjAuMjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThjMjYzYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZlbnQvbGliZXZlbnRfMi4wLjIyLmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiQW4gYXN5bmNocm9ub3VzIGV2ZW50IG5vdGlmaWNhdGlvbiBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL2xpYmV2ZW50Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9NTA4ODQmYXRpZD00NjEzMjIiCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NDVjNTMxNmZmNjg0YmNmZTJmOWY4NmQ4YjEyNzk1NTkiCisKK1NSQ19VUkkgPSAiIFwKKyAgICAke1NPVVJDRUZPUkdFX01JUlJPUn0vbGV2ZW50LyR7QlB9LXN0YWJsZS50YXIuZ3ogXAorICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYzRjNTZmOTg2YWE5ODU2NzdjYTFkYjg5NjMwYTJlMTEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzFjMmM0OWYwYWRhZGFjZmRiZTYzMzJhMzcyYzM4Y2Y5YzhiNzg5NWJiNzNkYWJlYWE1M2NkY2MxZDRlMWZhMyIKKworUyA9ICIke1dPUktESVJ9LyR7QlBOfS0ke1BWfS1zdGFibGUiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi0tZW5hYmxlLW9wZW5zc2wsLS1kaXNhYmxlLW9wZW5zc2wsb3BlbnNzbCIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworIyBOZWVkZWQgZm9yIERlYmlhbiBwYWNrYWdpbmcKK0xFQURfU09OQU1FID0gImxpYmV2ZW50LTIuMC5zbyIKKworaW5oZXJpdCBwdGVzdAorCitERVBFTkRTID0gInpsaWIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKKwlmb3IgZmlsZSBpbiAke0J9L3Rlc3QvLmxpYnMvcmVncmVzcyAke0J9L3Rlc3QvLmxpYnMvdGVzdCoKKwlkbworCQlpbnN0YWxsIC1tIDA3NTUgJGZpbGUgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorCWRvbmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXhpZi9saWJleGlmXzAuNi4yMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXhpZi9saWJleGlmXzAuNi4yMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmY0Y2FlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJleGlmL2xpYmV4aWZfMC42LjIxLmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgcmVhZGluZyBleHRlbmRlZCBpbWFnZSBpbmZvcm1hdGlvbiAoRVhJRikgZnJvbSBKUEVHIGZpbGVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saWJleGlmIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI0M2I3MjVkNzFiYjVkZjRhMWU1OTIwYjM0NGI4NmFkIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9saWJleGlmL2xpYmV4aWYtJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gIjI3MzM5Yjg5ODUwZjI4YzhmMWMyMzdmMjMzZTA1YjI3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjE2Y2RhZWI2MmViM2U2ZGZhYjI0MzVmN2Q3YmNjZDJmMzc0MzhkMjFjNTIxOGVjNGU1OGVmYTkxNTdkNGQ0MWEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKKwlzZWQgLWkgczpkb2NcIGJpbmFyeTpiaW5hcnk6ZyBNYWtlZmlsZQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZtL2xpYmZtLWV4dHJhLzAwMDEtbmxzLm00LVRha2UtaXQtZnJvbS1nZXR0ZXh0LTAuMTUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZtL2xpYmZtLWV4dHJhLzAwMDEtbmxzLm00LVRha2UtaXQtZnJvbS1nZXR0ZXh0LTAuMTUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlhNTFkNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm0tZXh0cmEvMDAwMS1ubHMubTQtVGFrZS1pdC1mcm9tLWdldHRleHQtMC4xNS5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIGMzMjA3OTljOTQxZDQyYTliN2UzNTE4MDUzNTk2OTRlYTNiMzZkMmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCA1IEFwciAyMDE1IDA5OjA4OjM4IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIG5scy5tNDogVGFrZSBpdCBmcm9tIGdldHRleHQtMC4xNQorCitJdCBvdGhlcndpc2UgZXhwZWN0cyBnZXR0ZXh0IHRvIHByb3ZpZGUgaXQuIExldHMgZ28gaW5kZXBlbmRlbnQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBtNC9ubHMubTQgfCAzMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMzAgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBtNC9ubHMubTQKKworZGlmZiAtLWdpdCBhL200L25scy5tNCBiL200L25scy5tNAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjJjOGZlNjkKKy0tLSAvZGV2L251bGwKKysrKyBiL200L25scy5tNAorQEAgLTAsMCArMSwzMCBAQAorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMywgMjAwNS0yMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisrZG5sCisrZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKKytkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CisrZG5sIGZ1bmN0aW9uYWxpdHkuCisrZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKytkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCisrZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorK2RubCBUaGV5IGFyZSBub3QgaW4gdGhlIHB1YmxpYyBkb21haW4uCisrCisrZG5sIEF1dGhvcnM6CisrZG5sIFVscmljaCBEcmVwcGVyIGRyZXBwZXJAY3lnbnVzLmNvbSwgMTk5NS0yMDAwLgorK2RubCBCcnVubyBIYWlibGUgaGFpYmxlQGNsaXNwLmNvbnMub3JnLCAyMDAwLTIwMDMuCisrCisrQUNfUFJFUkVRKDIuNTApCisrCisrQUNfREVGVU4oW0FNX05MU10sCisrWworK0FDX01TR19DSEVDS0lORyhbd2hldGhlciBOTFMgaXMgcmVxdWVzdGVkXSkKKytkbmwgRGVmYXVsdCBpcyBlbmFibGVkIE5MUworK0FDX0FSR19FTkFCTEUobmxzLAorK1sgLS1kaXNhYmxlLW5scyBkbyBub3QgdXNlIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0XSwKKytVU0VfTkxTPSRlbmFibGV2YWwsIFVTRV9OTFM9eWVzKQorK0FDX01TR19SRVNVTFQoJFVTRV9OTFMpCisrQUNfU1VCU1QoVVNFX05MUykKKytdKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZtL2xpYmZtLWV4dHJhXzEuMi4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJmbS9saWJmbS1leHRyYV8xLjIuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmQyZDYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJmbS9saWJmbS1leHRyYV8xLjIuMy5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIGZpbGUgbWFuYWdlbWVudCIKK0hPTUVQQUdFID0gImh0dHA6Ly9wY21hbmZtLnNvdXJjZWZvcmdlLm5ldC8iCisKK0xJQ0VOU0UgPSAiTEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NyYy9mbS1leHRyYS5oO2JlZ2lubGluZT04O2VuZGxpbmU9MjE7bWQ1PWVmMWY4NGRhNjRiM2MwMWNjYTQ0NzIxMmY3ZWY2MDA3IgorCitTRUNUSU9OID0gIngxMS9saWJzIgorREVQRU5EUyA9ICJnbGliLTIuMCBpbnRsdG9vbC1uYXRpdmUiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3BjbWFuZm0vbGliZm0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbmxzLm00LVRha2UtaXQtZnJvbS1nZXR0ZXh0LTAuMTUucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjNmZjM4MjAwNzAxNjU4ZjdlODBlMjVlZDM5NWQ5MmRkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM2OTJmMTYyNGE0Y2JjOGQxZGQ1NWYzYjNmMzM2OWZiZjVkMjZmNjNhOTE2ZTJjMjk1MjMwYjIzNDRlMWZiZjkiCisKK1MgPSAiJHtXT1JLRElSfS9saWJmbS0ke1BWfSIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1leHRyYS1vbmx5IC0td2l0aC1ndGs9bm8iCisKK1BSID0gInIxIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ3RrLWRvYworCitkb19jb25maWd1cmVbZGlyc10gPSsgIiR7U30vbTQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZtL2xpYmZtXzEuMi4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJmbS9saWJmbV8xLjIuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mjk1MDJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJmbS9saWJmbV8xLjIuMy5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIGZpbGUgbWFuYWdlbWVudCIKK0hPTUVQQUdFID0gImh0dHA6Ly9wY21hbmZtLnNvdXJjZWZvcmdlLm5ldC8iCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9mbS5oO2JlZ2lubGluZT04O2VuZGxpbmU9MjE7bWQ1PWVmMWY4NGRhNjRiM2MwMWNjYTQ0NzIxMmY3ZWY2MDA3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9iYXNlL2ZtLWNvbmZpZy5oO2JlZ2lubGluZT0xMDtlbmRsaW5lPTIzO21kNT1lZjFmODRkYTY0YjNjMDFjY2E0NDcyMTJmN2VmNjAwNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZm0tZ3RrLmg7YmVnaW5saW5lPTY7ZW5kbGluZT0xOTttZDU9NjQ2YmFhNDk1NWMwNGZlNzY4ZjJjYTI3YjkyYWM4ZGQiCisKKworU0VDVElPTiA9ICJ4MTEvbGlicyIKK0RFUEVORFMgPSAiZ2xpYi0yLjAgcGFuZ28gZ3RrKyBtZW51LWNhY2hlIGludGx0b29sLW5hdGl2ZSBsaWJleGlmIGxpYmZtLWV4dHJhIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wY21hbmZtL2xpYmZtLSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gIjNmZjM4MjAwNzAxNjU4ZjdlODBlMjVlZDM5NWQ5MmRkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM2OTJmMTYyNGE0Y2JjOGQxZGQ1NWYzYjNmMzM2OWZiZjVkMjZmNjNhOTE2ZTJjMjk1MjMwYjIzNDRlMWZiZjkiCisKK1BSID0gInIxIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ3RrLWRvYworCitkb19jb25maWd1cmVbZGlyc10gPSsgIiR7U30vbTQiCisKK1BBQ0tBR0VTICs9ICIke1BOfS1taW1lIgorRklMRVNfJHtQTn0tbWltZSA9ICIke2RhdGFkaXJ9L21pbWUvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vbGliZm0vbW9kdWxlcy8uZGVidWciCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICAjIHJlbW92ZSBmaWxlcyB3aGljaCBhcmUgcGFydCBvZiBsaWJmbS1leHRyYQorICAgIHJtIC1mICR7RH0ke2luY2x1ZGVkaXJ9L2xpYmZtLTEuMC9mbS14bWwtZmlsZS5oCisgICAgcm0gLWYgJHtEfSR7aW5jbHVkZWRpcn0vbGliZm0tMS4wL2ZtLXZlcnNpb24uaAorICAgIHJtIC1mICR7RH0ke2luY2x1ZGVkaXJ9L2xpYmZtLTEuMC9mbS1leHRyYS5oCisgICAgcm0gLWYgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbGliZm0tZXh0cmEucGMKKyAgICBybSAtZiAke0R9JHtsaWJkaXJ9L2xpYmZtLWV4dHJhLnNvKgorICAgIHJtIC1mICR7RH0ke2xpYmRpcn0vbGliZm0tZXh0cmEuYQorICAgIHJtIC1mICR7RH0ke2xpYmRpcn0vbGliZm0tZXh0cmEubGEKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2FkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2FkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2RkZmM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMTUxIEBACitBZGQgYW5kIHVzZSBwa2ctY29uZmlnIGZvciBsaWJnY3J5cHQgaW5zdGVhZCBvZiAtY29uZmlnIHNjcmlwdHMuCisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkIFt1cHN0cmVhbSBoYXZlIGluZGljYXRlZCB0aGV5IGRvbid0IHdhbnQgYSBwa2ctY29uZmlnIGRlcGVuZGVuY3ldCisKK1JQIDIwMTQvNS8yMgorCitJbmRleDogbGliZ2NyeXB0LTEuMi40L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmdjcnlwdC0xLjIuNC5vcmlnL2NvbmZpZ3VyZS5hYwkyMDA4LTAzLTE5IDIyOjE0OjUwLjAwMDAwMDAwMCArMDAwMAorKysrIGxpYmdjcnlwdC0xLjIuNC9jb25maWd1cmUuYWMJMjAwOC0wMy0xOSAyMjoxNDo1OC4wMDAwMDAwMDAgKzAwMDAKK0BAIC04MDcsNiArODA3LDcgQEAKKyBkb2MvTWFrZWZpbGUKKyBzcmMvTWFrZWZpbGUKKyBzcmMvZ2NyeXB0LmgKKytzcmMvbGliZ2NyeXB0LnBjCisgc3JjL2xpYmdjcnlwdC1jb25maWcKKyB0ZXN0cy9NYWtlZmlsZQorIHczMi1kbGwvTWFrZWZpbGUKK0luZGV4OiBsaWJnY3J5cHQtMS4yLjQvc3JjL2xpYmdjcnlwdC5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGxpYmdjcnlwdC0xLjIuNC9zcmMvbGliZ2NyeXB0LnBjLmluCTIwMDgtMDMtMTkgMjI6MTQ6NTguMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDMzIEBACisrIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBwa2ctY29uZmlnIG1ldGFkYXRhIGZpbGUuCisrIyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisrIyBBdXRob3I6IFNpbW9uIEpvc2Vmc3NvbgorKyMKKysjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRoZSBhdXRob3IgZ2l2ZXMKKysjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisrIworKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dCBldmVuIHRoZQorKyMgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisrCisrcHJlZml4PUBwcmVmaXhACisrZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisrCisrIyBBUEkgaW5mbworK2FwaV92ZXJzaW9uPUBMSUJHQ1JZUFRfQ09ORklHX0FQSV9WRVJTSU9OQAorK2hvc3Q9QExJQkdDUllQVF9DT05GSUdfSE9TVEAKKysKKysjIE1pc2MgaW5mb3JtYXRpb24uCisrc3ltbWV0cmljX2NpcGhlcnM9QExJQkdDUllQVF9DSVBIRVJTQAorK2FzeW1tZXRyaWNfY2lwaGVycz1ATElCR0NSWVBUX1BVQktFWV9DSVBIRVJTQAorK2RpZ2VzdHM9QExJQkdDUllQVF9ESUdFU1RTQAorKworK05hbWU6IGxpYmdjcnlwdAorK0Rlc2NyaXB0aW9uOiBHTlUgY3J5cHRvIGxpYnJhcnkKKytVUkw6IGh0dHA6Ly93d3cuZ251cGcub3JnCisrVmVyc2lvbjogQFZFUlNJT05ACisrTGliczogLUwke2xpYmRpcn0gLWxnY3J5cHQKKytMaWJzLnByaXZhdGU6IC1MJHtsaWJkaXJ9IC1sZ3BnLWVycm9yCisrQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0gCitJbmRleDogbGliZ2NyeXB0LTEuNi4xL3NyYy9saWJnY3J5cHQubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJnY3J5cHQtMS42LjEub3JpZy9zcmMvbGliZ2NyeXB0Lm00CTIwMTMtMTItMTYgMTc6NDQ6MzIuMDAwMDAwMDAwICswMDAwCisrKysgbGliZ2NyeXB0LTEuNi4xL3NyYy9saWJnY3J5cHQubTQJMjAxNC0wNS0xMyAyMToyNTozNy40NzgzODk4MzMgKzAwMDAKK0BAIC0yMiwxNyArMjIsNyBAQAorIGRubAorIEFDX0RFRlVOKFtBTV9QQVRIX0xJQkdDUllQVF0sCisgWyBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCistICBBQ19BUkdfV0lUSChsaWJnY3J5cHQtcHJlZml4LAorLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtbGliZ2NyeXB0LXByZWZpeD1QRlhdLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcmVmaXggd2hlcmUgTElCR0NSWVBUIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSksCistICAgICBsaWJnY3J5cHRfY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiLCBsaWJnY3J5cHRfY29uZmlnX3ByZWZpeD0iIikKKy0gIGlmIHRlc3QgeCRsaWJnY3J5cHRfY29uZmlnX3ByZWZpeCAhPSB4IDsgdGhlbgorLSAgICAgaWYgdGVzdCB4JHtMSUJHQ1JZUFRfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKy0gICAgICAgIExJQkdDUllQVF9DT05GSUc9JGxpYmdjcnlwdF9jb25maWdfcHJlZml4L2Jpbi9saWJnY3J5cHQtY29uZmlnCistICAgICBmaQorLSAgZmkKKyAKKy0gIEFDX1BBVEhfVE9PTChMSUJHQ1JZUFRfQ09ORklHLCBsaWJnY3J5cHQtY29uZmlnLCBubykKKyAgIHRtcD1pZmVsc2UoWyQxXSwgLDE6MS4yLjAsJDEpCisgICBpZiBlY2hvICIkdG1wIiB8IGdyZXAgJzonID4vZGV2L251bGwgMj4vZGV2L251bGwgOyB0aGVuCisgICAgICByZXFfbGliZ2NyeXB0X2FwaT1gZWNobyAiJHRtcCIgICAgIHwgc2VkICdzL1woLipcKTpcKC4qXCkvXDEvJ2AKK0BAIC00Miw0OCArMzIsMTMgQEAKKyAgICAgIG1pbl9saWJnY3J5cHRfdmVyc2lvbj0iJHRtcCIKKyAgIGZpCisgCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIExJQkdDUllQVCAtIHZlcnNpb24gPj0gJG1pbl9saWJnY3J5cHRfdmVyc2lvbikKKy0gIG9rPW5vCistICBpZiB0ZXN0ICIkTElCR0NSWVBUX0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKy0gICAgcmVxX21ham9yPWBlY2hvICRtaW5fbGliZ2NyeXB0X3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDEvJ2AKKy0gICAgcmVxX21pbm9yPWBlY2hvICRtaW5fbGliZ2NyeXB0X3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDIvJ2AKKy0gICAgcmVxX21pY3JvPWBlY2hvICRtaW5fbGliZ2NyeXB0X3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDMvJ2AKKy0gICAgbGliZ2NyeXB0X2NvbmZpZ192ZXJzaW9uPWAkTElCR0NSWVBUX0NPTkZJRyAtLXZlcnNpb25gCistICAgIG1ham9yPWBlY2hvICRsaWJnY3J5cHRfY29uZmlnX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMS8nYAorLSAgICBtaW5vcj1gZWNobyAkbGliZ2NyeXB0X2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDIvJ2AKKy0gICAgbWljcm89YGVjaG8gJGxpYmdjcnlwdF9jb25maWdfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wzLydgCistICAgIGlmIHRlc3QgIiRtYWpvciIgLWd0ICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgb2s9eWVzCistICAgIGVsc2UKKy0gICAgICAgIGlmIHRlc3QgIiRtYWpvciIgLWVxICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgICAgIGlmIHRlc3QgIiRtaW5vciIgLWd0ICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICBpZiB0ZXN0ICIkbWlub3IiIC1lcSAiJHJlcV9taW5vciI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJG1pY3JvIiAtZ2UgIiRyZXFfbWljcm8iOyB0aGVuCistICAgICAgICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICBmaQorLSAgICAgICAgZmkKKy0gICAgZmkKKy0gIGZpCistICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorLSAgICBBQ19NU0dfUkVTVUxUKFt5ZXMgKCRsaWJnY3J5cHRfY29uZmlnX3ZlcnNpb24pXSkKKy0gIGVsc2UKKy0gICAgQUNfTVNHX1JFU1VMVChubykKKy0gIGZpCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhMSUJHQ1JZUFQsIFtsaWJnY3J5cHQgPj0gJG1pbl9saWJnY3J5cHRfdmVyc2lvbl0sIFtvaz15ZXNdLCBbb2s9bm9dKQorKworICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKyAgICAgICMgSWYgd2UgaGF2ZSBhIHJlY2VudCBsaWJnY3J5cHQsIHdlIHNob3VsZCBhbHNvIGNoZWNrIHRoYXQgdGhlCisgICAgICAjIEFQSSBpcyBjb21wYXRpYmxlCisgICAgICBpZiB0ZXN0ICIkcmVxX2xpYmdjcnlwdF9hcGkiIC1ndCAwIDsgdGhlbgorLSAgICAgICAgdG1wPWAkTElCR0NSWVBUX0NPTkZJRyAtLWFwaS12ZXJzaW9uIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKKysgICAgICAgIHRtcD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1hcGlfdmVyc2lvbiBsaWJnY3J5cHRgCisgICAgICAgICBpZiB0ZXN0ICIkdG1wIiAtZ3QgMCA7IHRoZW4KKyAgICAgICAgICAgIEFDX01TR19DSEVDS0lORyhbTElCR0NSWVBUIEFQSSB2ZXJzaW9uXSkKKyAgICAgICAgICAgIGlmIHRlc3QgIiRyZXFfbGliZ2NyeXB0X2FwaSIgLWVxICIkdG1wIiA7IHRoZW4KK0BAIC05NiwxMCArNTEsOCBAQAorICAgICAgZmkKKyAgIGZpCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorLSAgICBMSUJHQ1JZUFRfQ0ZMQUdTPWAkTElCR0NSWVBUX0NPTkZJRyAtLWNmbGFnc2AKKy0gICAgTElCR0NSWVBUX0xJQlM9YCRMSUJHQ1JZUFRfQ09ORklHIC0tbGlic2AKKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKKy0gICAgbGliZ2NyeXB0X2NvbmZpZ19ob3N0PWAkTElCR0NSWVBUX0NPTkZJRyAtLWhvc3QgMj4vZGV2L251bGwgfHwgZWNobyBub25lYAorKyAgICBsaWJnY3J5cHRfY29uZmlnX2hvc3Q9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9aG9zdCBsaWJnY3J5cHRgCisgICAgIGlmIHRlc3QgeCIkbGliZ2NyeXB0X2NvbmZpZ19ob3N0IiAhPSB4bm9uZSA7IHRoZW4KKyAgICAgICBpZiB0ZXN0IHgiJGxpYmdjcnlwdF9jb25maWdfaG9zdCIgIT0geCIkaG9zdCIgOyB0aGVuCisgICBBQ19NU0dfV0FSTihbWworQEAgLTExMyw4ICs2Niw2IEBACisgICAgICAgZmkKKyAgICAgZmkKKyAgIGVsc2UKKy0gICAgTElCR0NSWVBUX0NGTEFHUz0iIgorLSAgICBMSUJHQ1JZUFRfTElCUz0iIgorICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorICAgZmkKKyAgIEFDX1NVQlNUKExJQkdDUllQVF9DRkxBR1MpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9maXgtSUNFLWZhaWx1cmUtb24tbWlwcy13aXRoLW9wdGlvbi1PLWFuZC1nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvZml4LUlDRS1mYWlsdXJlLW9uLW1pcHMtd2l0aC1vcHRpb24tTy1hbmQtZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODJlNjJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvZml4LUlDRS1mYWlsdXJlLW9uLW1pcHMtd2l0aC1vcHRpb24tTy1hbmQtZy5wYXRjaApAQCAtMCwwICsxLDcxIEBACit0ZXN0cy9iZW5jaC1zbG9wZS5jOiB3b3JrYXJvdW5kIElDRSBmYWlsdXJlIG9uIG1pcHMgd2l0aCAnLU8gLWcnCisKK0hpdCBhIElDRSBhbmQgY291bGQgcmVkdWNlIGl0IHRvIHRoZSBmb2xsb3dpbmcgbWluaW1hbCBleGFtcGxlOgorCisxLiBPbmx5IHRoZSBzaXplIG9mIGFycmF5IGFzc2lnbmVkIHdpdGggMiBjYXVzZWQgdGhlIGlzc3VlOgorJCBjYXQgPiBtaXBnY2MtdGVzdC5jIDw8IEVORAorCitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgICAgICBjaGFyICpwU3RyQXJyeVtBUlJBWV9TSVpFX01BWF0gPSB7ImhlbGxvIn07CisgICAgICAgIGludCBpID0gMDsKKworICAgICAgICB3aGlsZShwU3RyQXJyeVtpXSAmJiBpPEFSUkFZX1NJWkVfTUFYKQorICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIlc1xuIiwgcFN0ckFycnlbaV0pOworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAwOworfQorCitFTkQKKworMi4gT25seSAtTzEgYW5kIC1nIG9uIG1pcHMgY2F1c2VkIHRoZSBpc3N1ZToKKyQgbWlwcy1wb2t5LWxpbnV4LWdjYyAtTzEgLWcgLW8gbWlwZ2NjLXRlc3QgbWlwZ2NjLXRlc3QuYworbWlwZ2NjLXRlc3QuYzogSW4gZnVuY3Rpb24gJ21haW4nOgorbWlwZ2NjLXRlc3QuYzoxODoxOiBpbnRlcm5hbCBjb21waWxlciBlcnJvcjogaW4gZHdhcmYyb3V0X3Zhcl9sb2NhdGlvbiwgYXQgZHdhcmYyb3V0LmM6MjA4MTAKKyB9CisgXgorUGxlYXNlIHN1Ym1pdCBhIGZ1bGwgYnVnIHJlcG9ydCwKK3dpdGggcHJlcHJvY2Vzc2VkIHNvdXJjZSBpZiBhcHByb3ByaWF0ZS4KK1NlZSA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3MuaHRtbD4gZm9yIGluc3RydWN0aW9ucworCiszLiBUaGUgcXVpY2sgd29ya3JvdW5kIGlzIHRyeWluZyB0byBlbmxhcmdlIHRoZSBzaXplIG9mIGFycmF5IHdpdGggbGFyZ2VyCit0aGFuIDIuCisKKzQuIEZpbGUgYSBidWcgdG8gR05VLCBidXQgaXQgY291bGQgbm90IGJlIHJlcHJvZHVjZWQgb24gdGhlcmUgZW52aXJvbm1lbnQuCitodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTYwNjQzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIHRlc3RzL2JlbmNoLXNsb3BlLmMgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdGVzdHMvYmVuY2gtc2xvcGUuYyBiL3Rlc3RzL2JlbmNoLXNsb3BlLmMKK2luZGV4IGJkMDUwNjQuLjI4YzI0MzggMTAwNjQ0CistLS0gYS90ZXN0cy9iZW5jaC1zbG9wZS5jCisrKysgYi90ZXN0cy9iZW5jaC1zbG9wZS5jCitAQCAtMTE5Nyw3ICsxMTk3LDcgQEAgc3RhdGljIHN0cnVjdCBiZW5jaF9vcHMgaGFzaF9vcHMgPSB7CisgfTsKKyAKKyAKKy1zdGF0aWMgc3RydWN0IGJlbmNoX2hhc2hfbW9kZSBoYXNoX21vZGVzW10gPSB7Cisrc3RhdGljIHN0cnVjdCBiZW5jaF9oYXNoX21vZGUgaGFzaF9tb2Rlc1szXSA9IHsKKyAgIHsiIiwgJmhhc2hfb3BzfSwKKyAgIHswfSwKKyB9OworQEAgLTEzNDksNyArMTM0OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgYmVuY2hfb3BzIG1hY19vcHMgPSB7CisgfTsKKyAKKyAKKy1zdGF0aWMgc3RydWN0IGJlbmNoX21hY19tb2RlIG1hY19tb2Rlc1tdID0geworK3N0YXRpYyBzdHJ1Y3QgYmVuY2hfbWFjX21vZGUgbWFjX21vZGVzWzNdID0geworICAgeyIiLCAmbWFjX29wc30sCisgICB7MH0sCisgfTsKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9saWJnY3J5cHQtZml4LWJ1aWxkaW5nLWVycm9yLXdpdGgtTzItaW4tc3lzcm9vdC1wYXRoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvbGliZ2NyeXB0LWZpeC1idWlsZGluZy1lcnJvci13aXRoLU8yLWluLXN5c3Jvb3QtcGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2U1NDAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvbGliZ2NyeXB0LWZpeC1idWlsZGluZy1lcnJvci13aXRoLU8yLWluLXN5c3Jvb3QtcGF0aC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworbGliZ2NyeXB0OiBmaXggYnVpbGRpbmcgZXJyb3Igd2l0aCAnLU8yJyBpbiBzeXNyb290IHBhdGgKKworQ2hhcmFjdGVycyBsaWtlICctTzInIG9yICctT2Zhc3QnIHdpbGwgYmUgcmVwbGFjZWQgYnkgJy1PMScgd2hlbiBjb21waWxpbmcgY2lwaGVyLgorSWYgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyBsaWJnY3J5cHQgYW5kIHN5c3Jvb3QgY29udGFpbnMgc3VjaCBjaGFyYWN0ZXJzLCB3ZSB3b3VsZAorZ2V0IGNvbXBpbGUgZXJyb3JzIGJlY2F1c2UgdGhlIHN5c3Jvb3QgcGF0aCBoYXMgYmVlbiBtb2RpZmllZC4KKworRml4IHRoaXMgYnkgYWRkaW5nIGJsYW5rIHNwYWNlcyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvcmlnaW5hbCBtYXRjaGluZyBwYXR0ZXJuIGluIHRoZQorc2VkIGNvbW1hbmQuCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGNpcGhlci9NYWtlZmlsZS5hbSB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NpcGhlci9NYWtlZmlsZS5hbSBiL2NpcGhlci9NYWtlZmlsZS5hbQoraW5kZXggNzZjZGM5Ni4uOWE4OTc5MiAxMDA2NDQKKy0tLSBhL2NpcGhlci9NYWtlZmlsZS5hbQorKysrIGIvY2lwaGVyL01ha2VmaWxlLmFtCitAQCAtNjksNyArNjksNyBAQCByZmMyMjY4LmMgXAorIGNhbWVsbGlhLmMgY2FtZWxsaWEuaCBjYW1lbGxpYS1nbHVlLmMKKyAKKyBpZiBFTkFCTEVfT19GTEFHX01VTkdJTkcKKy1vX2ZsYWdfbXVuZ2luZyA9IHNlZCAtZSAncy8tT1woWzItOXNdWzItOXNdKlwpLy1PMS8nIC1lICdzLy1PZmFzdC8tTzEvZycKKytvX2ZsYWdfbXVuZ2luZyA9IHNlZCAtZSAncy8gLU9cKFsyLTlzXVsyLTlzXSpcKSAvIC1PMSAvJyAtZSAncy8gLU9mYXN0IC8gLU8xIC9nJworIGVsc2UKKyBvX2ZsYWdfbXVuZ2luZyA9IGNhdAorIGVuZGlmCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvbGliZ2NyeXB0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2xpYmdjcnlwdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgzYmU3OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2xpYmdjcnlwdC5pbmMKQEAgLTAsMCArMSw0OSBAQAorU1VNTUFSWSA9ICJHZW5lcmFsIHB1cnBvc2UgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IGJhc2VkIG9uIHRoZSBjb2RlIGZyb20gR251UEciCitIT01FUEFHRSA9ICJodHRwOi8vZGlyZWN0b3J5LmZzZi5vcmcvcHJvamVjdC9saWJnY3J5cHQvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZzEwY29kZS5jb20vZ251cGcvaW5kZXgiCitTRUNUSU9OID0gImxpYnMiCisKKyMgaGVscGVyIHByb2dyYW0gZ2NyeXB0cm5kIGFuZCBnZXRyYW5kb20gYXJlIHVuZGVyIEdQTCwgcmVzdCBMR1BMCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xKyAmIEdQTHYzKyIKK0xJQ0VOU0VfJHtQTn0gPSAiTEdQTHYyLjErIgorTElDRU5TRV8ke1BOfS1kZXYgPSAiR1BMdjIrICYgTEdQTHYyLjErIgorTElDRU5TRV9kdW1wc2V4cC1kZXYgPSAiR1BMdjMrIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9YmJiNDYxMjExYTMzYjEzNGQ0MmVkNWVlODAyYjM3ZmYiCisKK0RFUEVORFMgPSAibGliZ3BnLWVycm9yIGxpYmNhcCIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC9saWJnY3J5cHQvbGliZ2NyeXB0LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGliZ2NyeXB0LWZpeC1idWlsZGluZy1lcnJvci13aXRoLU8yLWluLXN5c3Jvb3QtcGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtSUNFLWZhaWx1cmUtb24tbWlwcy13aXRoLW9wdGlvbi1PLWFuZC1nLnBhdGNoIFwKKyIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9saWJnY3J5cHQtY29uZmlnIgorCitQUiA9ICJyMSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyBiaW5jb25maWctZGlzYWJsZWQgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtYXNtIC0td2l0aC1jYXBhYmlsaXRpZXMiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIEVsc2UgdGhpcyBjb3VsZCBiZSB1c2VkIGluIHByZWZlcmVuY2UgdG8gdGhlIG9uZSBpbiBhY2xvY2FsLWNvcHkKKwlybSAtZiAke1N9L200L2dwZy1lcnJvci5tNAorfQorCisjIGxpYmdjcnlwdC5wYyBpcyBhZGRlZCBsb2NhbGx5IGFuZCB0aHVzIGluc3RhbGxlZCBoZXJlCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0vJHtsaWJkaXJ9L3BrZ2NvbmZpZworCWluc3RhbGwgLW0gMDY0NCAke0J9L3NyYy9saWJnY3J5cHQucGMgJHtEfS8ke2xpYmRpcn0vcGtnY29uZmlnLworfQorCitQQUNLQUdFUyA9KyAiZHVtcHNleHAtZGV2IgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9obWFjMjU2IgorRklMRVNfZHVtcHNleHAtZGV2ICs9ICIke2JpbmRpcn0vZHVtcHNleHAiCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2xpYmdjcnlwdF8xLjYuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2xpYmdjcnlwdF8xLjYuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDA2Y2U3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvbGliZ2NyeXB0XzEuNi4zLmJiCkBAIC0wLDAgKzEsNCBAQAorcmVxdWlyZSBsaWJnY3J5cHQuaW5jCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkZTAzYjg2N2QwMmZkZjExNWExYmFjOGJiOGI1YzNhMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2OWU5NGUxYTcwODRkOTRlMWE2Y2EyNmQ0MzYwNjhjYjc0ODYyZDEwYTczNTNjZmFlNTc5YTJkODg2NzRmZjA5IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJncGctZXJyb3IvbGliZ3BnLWVycm9yL3BrZ2NvbmZpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ3BnLWVycm9yL2xpYmdwZy1lcnJvci9wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZmZWVkYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ3BnLWVycm9yL2xpYmdwZy1lcnJvci9wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwxNTAgQEAKKworIworIyBQYXRjaCBtYW5hZ2VkIGJ5IGh0dHA6Ly93d3cubW4tbG9naXN0aWsuZGUvdW5zdXBwb3J0ZWQvcHhhMjUwL3BhdGNoZXIKKyMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBsaWJncGctZXJyb3ItMS4xNy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJncGctZXJyb3ItMS4xNy5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGxpYmdwZy1lcnJvci0xLjE3L2NvbmZpZ3VyZS5hYworQEAgLTUyOSw2ICs1MjksNyBAQCBBQ19DT05GSUdfRklMRVMoW3NyYy9NYWtlZmlsZSB0ZXN0cy9NYWtlCisgQUNfQ09ORklHX0ZJTEVTKFtsYW5nL01ha2VmaWxlIGxhbmcvY2wvTWFrZWZpbGUgbGFuZy9jbC9ncGctZXJyb3IuYXNkXSkKKyBBQ19DT05GSUdfRklMRVMoW3NyYy92ZXJzaW9uaW5mby5yYyBzcmMvZ3BnLWVycm9yLnczMi1tYW5pZmVzdF0pCisgQUNfQ09ORklHX0ZJTEVTKFtzcmMvZ3BnLWVycm9yLWNvbmZpZ10sIFtjaG1vZCAreCBzcmMvZ3BnLWVycm9yLWNvbmZpZ10pCisrQUNfQ09ORklHX0ZJTEVTKFtzcmMvZ3BnLWVycm9yLnBjXSkKKyAKKyBBQ19PVVRQVVQKKyAKK0luZGV4OiBsaWJncGctZXJyb3ItMS4xNy9zcmMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJncGctZXJyb3ItMS4xNy5vcmlnL3NyYy9NYWtlZmlsZS5hbQorKysrIGxpYmdwZy1lcnJvci0xLjE3L3NyYy9NYWtlZmlsZS5hbQorQEAgLTc1LDYgKzc1LDggQEAgbm9kaXN0X2luY2x1ZGVfSEVBREVSUyA9IGdwZy1lcnJvci5oCisgYmluX1NDUklQVFMgPSBncGctZXJyb3ItY29uZmlnCisgbTRkYXRhZGlyID0gJChkYXRhZGlyKS9hY2xvY2FsCisgbTRkYXRhX0RBVEEgPSBncGctZXJyb3IubTQKKytwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisrcGtnY29uZmlnX0RBVEEgPSBncGctZXJyb3IucGMKKyAKKyBFWFRSQV9ESVNUID0gbWtzdHJ0YWJsZS5hd2sgZXJyLXNvdXJjZXMuaC5pbiBlcnItY29kZXMuaC5pbiBcCisgCW1rZXJybm9zLmF3ayBlcnJub3MuaW4gUkVBRE1FIFwKK0BAIC04Miw3ICs4NCw3IEBAIEVYVFJBX0RJU1QgPSBta3N0cnRhYmxlLmF3ayBlcnItc291cmNlcy4KKyAJbWtoZWFkZXIuYyBncGctZXJyb3IuaC5pbiBta3czMmVycm1hcC5jIHczMi1hZGQuaCB3MzJjZS1hZGQuaCBcCisgCWVyci1zb3VyY2VzLmggZXJyLWNvZGVzLmggZ3BnLWVycm9yLWNvbmZpZy5pbiBncGctZXJyb3IubTQgXAorIAlncGctZXJyb3IudmVycyBncGctZXJyb3IuZGVmLmluIFwKKy0gICAgICAgIHZlcnNpb25pbmZvLnJjLmluIGdwZy1lcnJvci53MzItbWFuaWZlc3QuaW4gXAorKyAgICAgICAgdmVyc2lvbmluZm8ucmMuaW4gZ3BnLWVycm9yLnczMi1tYW5pZmVzdC5pbiBncGctZXJyb3IucGMgXAorIAkkKGxvY2tfb2JqX3B1YikKKyAKKyBCVUlMVF9TT1VSQ0VTID0gZXJyLXNvdXJjZXMuaCBlcnItY29kZXMuaCBjb2RlLXRvLWVycm5vLmggY29kZS1mcm9tLWVycm5vLmggXAorSW5kZXg6IGxpYmdwZy1lcnJvci0xLjE3L3NyYy9ncGctZXJyb3IubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJncGctZXJyb3ItMS4xNy5vcmlnL3NyYy9ncGctZXJyb3IubTQKKysrKyBsaWJncGctZXJyb3ItMS4xNy9zcmMvZ3BnLWVycm9yLm00CitAQCAtMjYsNzMgKzI2LDEzIEBAIGRubCBpcyBhZGRlZCB0byB0aGUgZ3BnX2NvbmZpZ19zY3JpcHRfd2EKKyBkbmwKKyBBQ19ERUZVTihbQU1fUEFUSF9HUEdfRVJST1JdLAorIFsgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorLSAgZ3BnX2Vycm9yX2NvbmZpZ19wcmVmaXg9IiIKKy0gIGRubCAtLXdpdGgtbGliZ3BnLWVycm9yLXByZWZpeD1QRlggaXMgdGhlIHByZWZlcnJlZCBuYW1lIGZvciB0aGlzIG9wdGlvbiwKKy0gIGRubCBzaW5jZSB0aGF0IGlzIGNvbnNpc3RlbnQgd2l0aCBob3cgb3VyIHRocmVlIHNpYmxpbmdzIHVzZSB0aGUgZGlyZWN0b3J5LworLSAgZG5sIHBhY2thZ2UgbmFtZSBpbiAtLXdpdGgtJGRpcl9uYW1lLXByZWZpeD1QRlguCistICBBQ19BUkdfV0lUSChsaWJncGctZXJyb3ItcHJlZml4LAorLSAgICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1saWJncGctZXJyb3ItcHJlZml4PVBGWF0sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJlZml4IHdoZXJlIEdQRyBFcnJvciBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0pLAorLSAgICAgICAgICAgICAgW2dwZ19lcnJvcl9jb25maWdfcHJlZml4PSIkd2l0aHZhbCJdKQorLQorLSAgZG5sIEFjY2VwdCAtLXdpdGgtZ3BnLWVycm9yLXByZWZpeCBhbmQgbWFrZSBpdCB3b3JrIHRoZSBzYW1lIGFzCistICBkbmwgLS13aXRoLWxpYmdwZy1lcnJvci1wcmVmaXggYWJvdmUsIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwKKy0gIGRubCBidXQgZG8gbm90IGRvY3VtZW50IHRoaXMgb2xkLCBpbmNvbnNpc3RlbnRseS1uYW1lZCBvcHRpb24uCistICBBQ19BUkdfV0lUSChncGctZXJyb3ItcHJlZml4LCwKKy0gICAgICAgICAgICAgIFtncGdfZXJyb3JfY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiXSkKKysgIG1pbl9ncGdfZXJyb3JfdmVyc2lvbj1pZmVsc2UoWyQxXSwgLDAuMCwkMSkKKyAKKy0gIGlmIHRlc3QgeCIke0dQR19FUlJPUl9DT05GSUd9IiA9IHggOyB0aGVuCistICAgICBpZiB0ZXN0IHgiJHtncGdfZXJyb3JfY29uZmlnX3ByZWZpeH0iICE9IHggOyB0aGVuCistICAgICAgICBHUEdfRVJST1JfQ09ORklHPSIke2dwZ19lcnJvcl9jb25maWdfcHJlZml4fS9iaW4vZ3BnLWVycm9yLWNvbmZpZyIKKy0gICAgIGVsc2UKKy0gICAgICAgY2FzZSAiJHtTWVNST09UfSIgaW4KKy0gICAgICAgICAvKikKKy0gICAgICAgICAgIGlmIHRlc3QgLXggIiR7U1lTUk9PVH0vYmluL2dwZy1lcnJvci1jb25maWciIDsgdGhlbgorLSAgICAgICAgICAgICBHUEdfRVJST1JfQ09ORklHPSIke1NZU1JPT1R9L2Jpbi9ncGctZXJyb3ItY29uZmlnIgorLSAgICAgICAgICAgZmkKKy0gICAgICAgICAgIDs7CistICAgICAgICAgJycpCistICAgICAgICAgICA7OworLSAgICAgICAgICAqKQorLSAgICAgICAgICAgQUNfTVNHX1dBUk4oW0lnbm9yaW5nIFwkU1lTUk9PVCBhcyBpdCBpcyBub3QgYW4gYWJzb2x1dGUgcGF0aC5dKQorLSAgICAgICAgICAgOzsKKy0gICAgICAgZXNhYworLSAgICAgZmkKKy0gIGZpCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhHUEdfRVJST1IsIFtncGctZXJyb3IgPj0gJG1pbl9ncGdfZXJyb3JfdmVyc2lvbl0sIFtvaz15ZXNdLCBbb2s9bm9dKQorIAorLSAgQUNfUEFUSF9QUk9HKEdQR19FUlJPUl9DT05GSUcsIGdwZy1lcnJvci1jb25maWcsIG5vKQorLSAgbWluX2dwZ19lcnJvcl92ZXJzaW9uPWlmZWxzZShbJDFdLCAsMC4wLCQxKQorLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBHUEcgRXJyb3IgLSB2ZXJzaW9uID49ICRtaW5fZ3BnX2Vycm9yX3ZlcnNpb24pCistICBvaz1ubworLSAgaWYgdGVzdCAiJEdQR19FUlJPUl9DT05GSUciICE9ICJubyIgXAorLSAgICAgJiYgdGVzdCAtZiAiJEdQR19FUlJPUl9DT05GSUciIDsgdGhlbgorLSAgICByZXFfbWFqb3I9YGVjaG8gJG1pbl9ncGdfZXJyb3JfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDEvJ2AKKy0gICAgcmVxX21pbm9yPWBlY2hvICRtaW5fZ3BnX2Vycm9yX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wyLydgCistICAgIGdwZ19lcnJvcl9jb25maWdfdmVyc2lvbj1gJEdQR19FUlJPUl9DT05GSUcgJGdwZ19lcnJvcl9jb25maWdfYXJncyAtLXZlcnNpb25gCistICAgIG1ham9yPWBlY2hvICRncGdfZXJyb3JfY29uZmlnX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDEvJ2AKKy0gICAgbWlub3I9YGVjaG8gJGdwZ19lcnJvcl9jb25maWdfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMi8nYAorLSAgICBpZiB0ZXN0ICIkbWFqb3IiIC1ndCAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgIG9rPXllcworLSAgICBlbHNlCistICAgICAgICBpZiB0ZXN0ICIkbWFqb3IiIC1lcSAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgICAgICBpZiB0ZXN0ICIkbWlub3IiIC1nZSAiJHJlcV9taW5vciI7IHRoZW4KKy0gICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICBmaQorLSAgICAgICAgZmkKKy0gICAgZmkKKy0gIGZpCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorLSAgICBHUEdfRVJST1JfQ0ZMQUdTPWAkR1BHX0VSUk9SX0NPTkZJRyAkZ3BnX2Vycm9yX2NvbmZpZ19hcmdzIC0tY2ZsYWdzYAorLSAgICBHUEdfRVJST1JfTElCUz1gJEdQR19FUlJPUl9DT05GSUcgJGdwZ19lcnJvcl9jb25maWdfYXJncyAtLWxpYnNgCistICAgIEdQR19FUlJPUl9NVF9DRkxBR1M9YCRHUEdfRVJST1JfQ09ORklHICRncGdfZXJyb3JfY29uZmlnX2FyZ3MgLS1tdCAtLWNmbGFncyAyPi9kZXYvbnVsbGAKKy0gICAgR1BHX0VSUk9SX01UX0xJQlM9YCRHUEdfRVJST1JfQ09ORklHICRncGdfZXJyb3JfY29uZmlnX2FyZ3MgLS1tdCAtLWxpYnMgMj4vZGV2L251bGxgCistICAgIEFDX01TR19SRVNVTFQoW3llcyAoJGdwZ19lcnJvcl9jb25maWdfdmVyc2lvbildKQorICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQorLSAgICBncGdfZXJyb3JfY29uZmlnX2hvc3Q9YCRHUEdfRVJST1JfQ09ORklHICRncGdfZXJyb3JfY29uZmlnX2FyZ3MgLS1ob3N0IDI+L2Rldi9udWxsIHx8IGVjaG8gbm9uZWAKKysgICAgZ3BnX2Vycm9yX2NvbmZpZ19ob3N0PWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWhvc3QgZ3BnLWVycm9yYAorICAgICBpZiB0ZXN0IHgiJGdwZ19lcnJvcl9jb25maWdfaG9zdCIgIT0geG5vbmUgOyB0aGVuCisgICAgICAgaWYgdGVzdCB4IiRncGdfZXJyb3JfY29uZmlnX2hvc3QiICE9IHgiJGhvc3QiIDsgdGhlbgorICAgQUNfTVNHX1dBUk4oW1sKK0BAIC0xMDcsMTEgKzQ3LDYgQEAgQUNfREVGVU4oW0FNX1BBVEhfR1BHX0VSUk9SXSwKKyAgICAgICBmaQorICAgICBmaQorICAgZWxzZQorLSAgICBHUEdfRVJST1JfQ0ZMQUdTPSIiCistICAgIEdQR19FUlJPUl9MSUJTPSIiCistICAgIEdQR19FUlJPUl9NVF9DRkxBR1M9IiIKKy0gICAgR1BHX0VSUk9SX01UX0xJQlM9IiIKKy0gICAgQUNfTVNHX1JFU1VMVChubykKKyAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKKyAgIGZpCisgICBBQ19TVUJTVChHUEdfRVJST1JfQ0ZMQUdTKQorSW5kZXg6IGxpYmdwZy1lcnJvci0xLjE3L3NyYy9ncGctZXJyb3IucGMuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBsaWJncGctZXJyb3ItMS4xNy9zcmMvZ3BnLWVycm9yLnBjLmluCitAQCAtMCwwICsxLDExIEBACisrcHJlZml4PUBwcmVmaXhACisrZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisraG9zdD1AR1BHX0VSUk9SX0NPTkZJR19IT1NUQAorKworK05hbWU6IGdwZy1lcnJvcgorK0Rlc2NyaXB0aW9uOiBhIGxpYnJhcnkgdGhhdCBkZWZpbmVzIGNvbW1vbiBlcnJvciB2YWx1ZXMgZm9yIGFsbCBHbnVQRyBjb21wb25lbnRzCisrVmVyc2lvbjogQFZFUlNJT05ACisrTGliczogLUwke2xpYmRpcn0gLWxncGctZXJyb3IKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJncGctZXJyb3IvbGliZ3BnLWVycm9yXzEuMTkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3JfMS4xOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWRiYmNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJncGctZXJyb3IvbGliZ3BnLWVycm9yXzEuMTkuYmIKQEAgLTAsMCArMSw1MSBAQAorU1VNTUFSWSA9ICJTbWFsbCBsaWJyYXJ5IHRoYXQgZGVmaW5lcyBjb21tb24gZXJyb3IgdmFsdWVzIGZvciBhbGwgR251UEcgY29tcG9uZW50cyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251cGcub3JnL3JlbGF0ZWRfc29mdHdhcmUvbGliZ3BnLWVycm9yLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmcxMGNvZGUuY29tL2dudXBnL2luZGV4IgorCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZ3BnLWVycm9yLmguaW47ZW5kbGluZT0yMzttZDU9OGIyMDQ5MThmMGNhNzA3MTM2Mzk0ZDhiYjIwYzdlYmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2luaXQuYztlbmRsaW5lPTIwO21kNT04ZjVhOWI1OTYzNGY0YWViY2QwZWM5ZDNlYmQ1M2JmZSIKKworCitTRUNUSU9OID0gImxpYnMiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvbGliZ3BnLWVycm9yL2xpYmdwZy1lcnJvci0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCIKK1NSQ19VUklbbWQ1c3VtXSA9ICJjMDRjMTYyNDViOTI4MjkyODFmNDNiNWJlZjdkMTZkYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1MzEyMGUxMzMzZDVjNWQyOGQ4N2ZmMjg1NGU5ZTk4NzE5YzhlMjE0MTUyZjE3YWQ1MjkxNzA0ZDI1YzQ5NzhiIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2dwZy1lcnJvci1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcgZ2V0dGV4dAorQ1BQRkxBR1MgKz0gIi1QIgorZG9fY29tcGlsZV9wcmVwZW5kKCkgeworCVRBUkdFVF9GSUxFPWxpbnV4LWdudQorCWlmIFsgJHtUQVJHRVRfT1N9ICE9ICJsaW51eCIgXTsgdGhlbgorCQlUQVJHRVRfRklMRT0ke1RBUkdFVF9PU30KKwlmaQorCisJY2FzZSAke1RBUkdFVF9BUkNIfSBpbgorCSAgYWFyY2g2NF9iZSkgVFVQTEU9YWFyY2g2NC11bmtub3duLWxpbnV4LWdudSA7OworCSAgYXJtKQkgICAgICBUVVBMRT1hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpIDs7CisJICBhcm1lYikgICAgICBUVVBMRT1hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpIDs7CisJICBpNTg2fGk2ODYpICBUVVBMRT1pNjg2LXBjLWxpbnV4LWdudSA7OworCSAgbWlwczY0ZWwpICAgVFVQTEU9bWlwc2VsLXVua25vd24tbGludXgtZ251IDs7CisJICBtaXBzNjQpICAgICBUVVBMRT1taXBzLXVua25vd24tbGludXgtZ251IDs7CisJICB4ODZfNjQpICAgICBUVVBMRT14ODZfNjQtcGMtbGludXgtZ251IDs7CisJICAqKSAgICAgICAgICBUVVBMRT0ke1RBUkdFVF9BUkNIfS11bmtub3duLWxpbnV4LWdudSA7OyAKKwllc2FjCisKKwljcCAke1N9L3NyYy9zeXNjZmcvbG9jay1vYmotcHViLiRUVVBMRS5oIFwKKwkgICR7U30vc3JjL3N5c2NmZy9sb2NrLW9iai1wdWIuJFRBUkdFVF9GSUxFLmgKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyB3ZSBkb24ndCBoYXZlIGNvbW1vbiBsaXNwIGluIE9FCisJcm0gLXJmICIke0R9JHtkYXRhZGlyfS9jb21tb24tbGlzcC8iCit9CisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L2dwZy1lcnJvciIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljYWwvbGliaWNhbF8xLjAuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNhbC9saWJpY2FsXzEuMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNmI2MzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljYWwvbGliaWNhbF8xLjAuMC5iYgpAQCAtMCwwICsxLDEzIEBACitTVU1NQVJZID0gImlDYWwgYW5kIHNjaGVkdWxpbmcgKFJGQyAyNDQ1LCAyNDQ2LCAyNDQ3KSBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL2xpYmljYWwvbGliaWNhbCIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9naXRodWIuY29tL2xpYmljYWwvbGliaWNhbC9pc3N1ZXMiCitMSUNFTlNFID0gIkxHUEx2Mi4xIHwgTVBMLTEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kNGZjNTgzMDlkOGVkNDY1ODdhYzYzYmI0NDlkODJmOCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9MSUNFTlNFO21kNT1kMWEwODkxY2QzZTU4MmIzZTJlYzhmZTYzYmFkYmJiNiIKK1NFQ1RJT04gPSAibGlicyIKKworU1JDX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vJHtCUE59LyR7QlBOfS9hcmNoaXZlL3Yke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiZjRiOGUzM2FlNWVmYjJmMDI1ZWI0M2NlNjk2ODJhMzYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDA3MmU4MzgzNDA5MjMxNTc3MmU2NzE5Yjg1ZmM4YjExNTMwYjFmZjUzZjRkMTA4MzE1ZmIzOGNkZGJjZThjMiIKKworaW5oZXJpdCBhdXRvdG9vbHMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnYtMS4xMS4xL2F1dG9jb25mLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udi0xLjExLjEvYXV0b2NvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NiZjU0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnYtMS4xMS4xL2F1dG9jb25mLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0l0IGFkZHMgdGhlIHZhcmlhYmxlcyB0aGF0IGFyZSBuZWVkZWQKK2ZvciBhdXRvY29uZiAyLjY1IHRvIHJlY29uZmlndXJlIGxpYmljb252IGFuZCBkZWZpbmVzIHRoZSBtNCBtYWNyb3MgCitkaXJlY3RvcnkuIEl0cyBpbXBvcnRlZCBmcm9tIE9FLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IGxpYmljb252LTEuMTEuMS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJpY29udi0xLjExLjEub3JpZy9jb25maWd1cmUuYWMKKysrKyBsaWJpY29udi0xLjExLjEvY29uZmlndXJlLmFjCitAQCAtMjMsNyArMjMsNyBAQCBBQ19DT05GSUdfQVVYX0RJUihidWlsZC1hdXgpCisgQU1fSU5JVF9BVVRPTUFLRShsaWJpY29udiwgMS4xMSkKKyBBQ19DT05GSUdfSEVBREVSUyhjb25maWcuaCBsaWIvY29uZmlnLmgpCisgQUNfUFJPR19NQUtFX1NFVAorLQorK0FDX0NPTkZJR19NQUNST19ESVIoW200XSkKKyBkbmwgICAgICAgICAgIGNoZWNrcyBmb3IgYmFzaWMgcHJvZ3JhbXMKKyAKKyBBQ19QUk9HX0NDCitJbmRleDogbGliaWNvbnYtMS4xMS4xL2xpYmNoYXJzZXQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliaWNvbnYtMS4xMS4xLm9yaWcvbGliY2hhcnNldC9jb25maWd1cmUuYWMKKysrKyBsaWJpY29udi0xLjExLjEvbGliY2hhcnNldC9jb25maWd1cmUuYWMKK0BAIC0xNiwxNyArMTYsMTcgQEAgZG5sIGFsb25nIHdpdGggdGhlIEdOVSBDSEFSU0VUIExpYnJhcnk7CisgZG5sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwKKyBkbmwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorIAorLUFDX1BSRVJFUSgyLjEzKQorK0FDX1BSRVJFUSgyLjYxKQorK0FDX0lOSVQoW2xpYmNoYXJzZXRdLFsxLjRdICkKKytBQ19DT05GSUdfU1JDRElSKFtsaWIvbG9jYWxjaGFyc2V0LmNdKQorIAorLVBBQ0tBR0U9bGliY2hhcnNldAorLVZFUlNJT049MS40CistCistQUNfSU5JVChsaWIvbG9jYWxjaGFyc2V0LmMpCisgQUNfQ09ORklHX0FVWF9ESVIoYnVpbGQtYXV4KQorIEFDX0NPTkZJR19IRUFERVIoY29uZmlnLmgpCisgQUNfUFJPR19NQUtFX1NFVAorLUFDX1NVQlNUKFBBQ0tBR0UpCistQUNfU1VCU1QoVkVSU0lPTikKKytkbmwgQUNfU1VCU1QoUEFDS0FHRSkKKytkbmwgQUNfU1VCU1QoVkVSU0lPTikKKysKKytBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCisgCisgZG5sICAgICAgICAgICBjaGVja3MgZm9yIGJhc2ljIHByb2dyYW1zCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTEuMS9zaGFyZWRfcHJlbG9hZGFibGVfbGliaWNvbnZfbGludXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTEuMS9zaGFyZWRfcHJlbG9hZGFibGVfbGliaWNvbnZfbGludXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIwN2Y3MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnYtMS4xMS4xL3NoYXJlZF9wcmVsb2FkYWJsZV9saWJpY29udl9saW51eC5wYXRjaApAQCAtMCwwICsxLDI2IEBACitXaXRoIGxpYnRvb2wgZ2VuZXJhdGluZyBzaGFyZWQgYW5kIHN0YXRpYyB2ZXJzaW9uIG9mIGxpYnJhcmllcyBuZWVkcyAtZlBJQyBmbGFncword2l0aG91dCB0aGlzIGl0IHdpbGwgbm90IGdlbmVyYXRlIHRoZSBjb21tYW5kcyB0byBjcmVhdGUgc2hhcmVkIGxpbmtlZCBsaWJyYXJ5CitJdHMgbW9yZSBlbmZvcmNlZCBieSBsaWJ0b29sIDIuNC4gSSBoYXZlIG5vdCBjaGVja2VkIGl0IHdpdGggb2xkZXIgbGlidG9vbAorbGliaWNvbnYgMS4xMS54IGlzIHJlbGF0aXZlbHkgb2xkIHJlbGVhc2UgYW5kIGxpYnRvb2wgMi40IGRpZCBub3QgZXhpc3Qgd2hlbiBpdAord2FzIHJlbGVhc2VkIHRoZXNlIGtpbmQgb2YgcHJvYmxlbSBhcmUgbW9yZSBsaWtlbHkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBsaWJpY29udi0xLjExLjEvbGliL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliaWNvbnYtMS4xMS4xLm9yaWcvbGliL01ha2VmaWxlLmluCisrKysgbGliaWNvbnYtMS4xMS4xL2xpYi9NYWtlZmlsZS5pbgorQEAgLTcwLDkgKzcwLDkgQEAgcHJlbG9hZGFibGVfbGliaWNvbnYuc28gOiBwcmVsb2FkYWJsZV9saQorIAorIHByZWxvYWRhYmxlX2xpYmljb252X2xpbnV4LnNvIDogJChTT1VSQ0VTKQorIAlpZiB0ZXN0IC1uICJAR0NDQCI7IHRoZW4gXAorLQkgICQoTElCVE9PTF9MSU5LKSAkKENDKSAkKExERkxBR1MpICQoSU5DTFVERVMpICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAkKERFRlMpIC1mUElDIC1EUElDIC1ETElCSUNPTlZfUExVRyAkKFNPVVJDRVMpIC1zaGFyZWQgLW8gcHJlbG9hZGFibGVfbGliaWNvbnZfbGludXguc287IFwKKysJICAkKExJQlRPT0xfTElOSykgJChDQykgJChMREZMQUdTKSAkKElOQ0xVREVTKSAkKENGTEFHUykgJChDUFBGTEFHUykgJChERUZTKSAtZlBJQyAtRFBJQyAtRExJQklDT05WX1BMVUcgJChTT1VSQ0VTKSAtcnBhdGggJChsaWJkaXIpIC1vIGxpYnByZWxvYWRfaWNvbnYubGEgJiYgY3AgLmxpYnMvbGlicHJlbG9hZF9pY29udi5zbyBwcmVsb2FkYWJsZV9saWJpY29udl9saW51eC5zbzsgXAorIAllbHNlIFwKKy0JICAkKExJQlRPT0xfTElOSykgJChDQykgJChMREZMQUdTKSAkKElOQ0xVREVTKSAkKENGTEFHUykgJChDUFBGTEFHUykgJChERUZTKSAtS1BJQyAtRFBJQyAtRExJQklDT05WX1BMVUcgJChTT1VSQ0VTKSAtc2hhcmVkIC1vIHByZWxvYWRhYmxlX2xpYmljb252X2xpbnV4LnNvOyBcCisrCSAgJChMSUJUT09MX0xJTkspICQoQ0MpICQoTERGTEFHUykgJChJTkNMVURFUykgJChDRkxBR1MpICQoQ1BQRkxBR1MpICQoREVGUykgLUtQSUMgLURQSUMgLURMSUJJQ09OVl9QTFVHICQoU09VUkNFUykgLXJwYXRoICQobGliZGlyKSAtbyBsaWJwcmVsb2FkX2ljb252LmxhICYmIGNwIC5saWJzL2xpYnByZWxvYWRfaWNvbnYuc28gcHJlbG9hZGFibGVfbGliaWNvbnZfbGludXguc287IFwKKyAJZmkKKyAKKyBwcmVsb2FkYWJsZV9saWJpY29udl9zb2xhcmlzLnNvIDogJChTT1VSQ0VTKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udi0xLjE0L2FkZC1yZWxvY2F0YWJsZS1tb2R1bGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTQvYWRkLXJlbG9jYXRhYmxlLW1vZHVsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWYzNzdiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udi0xLjE0L2FkZC1yZWxvY2F0YWJsZS1tb2R1bGUucGF0Y2gKQEAgLTAsMCArMSw1MDA4IEBACitUaGlzIHBhdGNoIGlzIG5lZWRlZCB0byBzb2x2ZSBpc3N1ZXMgbGlrZQorfCBpY29udi5vOiBJbiBmdW5jdGlvbiBgbWFpbic6Cit8IC9ob21lL2phbWVzL3N0dWZmL2JlYWdsZS90bXAtZWdsaWJjL3dvcmsvYXJtdjdhLXZmcC1uZW9uLW9lLWxpbnV4LWdudWVhYmkvbGliaWNvbnYtMS4xNC1yMC9saWJpY29udi0xLjE0L3NyYy8uL2ljb252LmM6ODYxOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGByZWxvY2F0ZScKK3wgLi4vc3JjbGliL2xpYmljcnQuYShwcm9ncmVsb2Mubyk6IEluIGZ1bmN0aW9uIGBwcmVwYXJlX3JlbG9jYXRlJzoKK3wgL2hvbWUvamFtZXMvc3R1ZmYvYmVhZ2xlL3RtcC1lZ2xpYmMvd29yay9hcm12N2EtdmZwLW5lb24tb2UtbGludXgtZ251ZWFiaS9saWJpY29udi0xLjE0LXIwL2xpYmljb252LTEuMTQvc3JjbGliL3Byb2dyZWxvYy5jOjI5NzogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgY29tcHV0ZV9jdXJyX3ByZWZpeCcKK3wgL2hvbWUvamFtZXMvc3R1ZmYvYmVhZ2xlL3RtcC1lZ2xpYmMvd29yay9hcm12N2EtdmZwLW5lb24tb2UtbGludXgtZ251ZWFiaS9saWJpY29udi0xLjE0LXIwL2xpYmljb252LTEuMTQvc3JjbGliL3Byb2dyZWxvYy5jOjMwMjogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgc2V0X3JlbG9jYXRpb25fcHJlZml4JworfCBjb2xsZWN0MjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworfCBtYWtlWzFdOiAqKiogW2luc3RhbGxdIEVycm9yIDEKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBjb25maWcgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvYXJnLW5vbm51bGwuaCBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9hcmctbm9ubnVsbC5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9hcmctbm9ubnVsbC5oCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKysgbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvYXJnLW5vbm51bGwuaAkyMDEyLTAxLTA4IDAyOjA3OjM5LjkzMDQ4NDQzOCAtMDgwMAorQEAgLTAsMCArMSwyNiBAQAorKy8qIEEgQyBtYWNybyBmb3IgZGVjbGFyaW5nIHRoYXQgc3BlY2lmaWMgYXJndW1lbnRzIG11c3Qgbm90IGJlIE5VTEwuCisrICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworKworKy8qIF9HTF9BUkdfTk9OTlVMTCgobiwuLi4sbSkpIHRlbGxzIHRoZSBjb21waWxlciBhbmQgc3RhdGljIGFuYWx5emVyIHRvb2xzCisrICAgdGhhdCB0aGUgdmFsdWVzIHBhc3NlZCBhcyBhcmd1bWVudHMgbiwgLi4uLCBtIG11c3QgYmUgbm9uLU5VTEwgcG9pbnRlcnMuCisrICAgbiA9IDEgc3RhbmRzIGZvciB0aGUgZmlyc3QgYXJndW1lbnQsIG4gPSAyIGZvciB0aGUgc2Vjb25kIGFyZ3VtZW50IGV0Yy4gICovCisrI2lmbmRlZiBfR0xfQVJHX05PTk5VTEwKKysjIGlmIChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID49IDMpIHx8IF9fR05VQ19fID4gMworKyMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKSBfX2F0dHJpYnV0ZV9fICgoX19ub25udWxsX18gcGFyYW1zKSkKKysjIGVsc2UKKysjICBkZWZpbmUgX0dMX0FSR19OT05OVUxMKHBhcmFtcykKKysjIGVuZGlmCisrI2VuZGlmCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L2MrK2RlZnMuaCBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9jKytkZWZzLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L2MrK2RlZnMuaAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorKysrIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L2MrK2RlZnMuaAkyMDEyLTAxLTA4IDAyOjA3OjM5Ljk0MjQ4NDQzOCAtMDgwMAorQEAgLTAsMCArMSwyNzEgQEAKKysvKiBDKysgY29tcGF0aWJsZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBtYWNyb3MuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworKworKyNpZm5kZWYgX0dMX0NYWERFRlNfSAorKyNkZWZpbmUgX0dMX0NYWERFRlNfSAorKworKy8qIFRoZSB0aHJlZSBtb3N0IGZyZXF1ZW50IHVzZSBjYXNlcyBvZiB0aGVzZSBtYWNyb3MgYXJlOgorKworKyAgICogRm9yIHByb3ZpZGluZyBhIHN1YnN0aXR1dGUgZm9yIGEgZnVuY3Rpb24gdGhhdCBpcyBtaXNzaW5nIG9uIHNvbWUKKysgICAgIHBsYXRmb3JtcywgYnV0IGlzIGRlY2xhcmVkIGFuZCB3b3JrcyBmaW5lIG9uIHRoZSBwbGF0Zm9ybXMgb24gd2hpY2gKKysgICAgIGl0IGV4aXN0czoKKysKKysgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorKyAgICAgICAjIGlmICFASEFWRV9GT09ACisrICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKysgICAgICAgIyBlbmRpZgorKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisrICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisrICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKysgICAgICAgLi4uCisrICAgICAgICNlbmRpZgorKworKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIGFsbCBwbGF0Zm9ybXMsCisrICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBwbGF0Zm9ybXM6CisrCisrICAgICAgICNpZiBAR05VTElCX0ZPT0AKKysgICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACisrICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisrICAgICAgICMgICB1bmRlZiBmb28KKysgICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworKyAgICAgICAjICBlbmRpZgorKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisrICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKysgICAgICAgIyBlbHNlCisrICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKysgICAgICAgIyBlbmRpZgorKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisrICAgICAgIC4uLgorKyAgICAgICAjZW5kaWYKKysKKysgICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBzb21lIHBsYXRmb3JtcworKyAgICAgYnV0IGlzIGJyb2tlbi9pbnN1ZmZpY2llbnQgYW5kIG5lZWRzIHRvIGJlIHJlcGxhY2VkIG9uIHNvbWUgb2YgdGhlbSBhbmQKKysgICAgIGlzIGFkZGl0aW9uYWxseSBlaXRoZXIgbWlzc2luZyBvciB1bmRlY2xhcmVkIG9uIHNvbWUgb3RoZXIgcGxhdGZvcm1zOgorKworKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisrICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorKyAgICAgICAjICAgdW5kZWYgZm9vCisrICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKysgICAgICAgIyAgZW5kaWYKKysgICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOworKyAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CisrICAgICAgICMgZWxzZQorKyAgICAgICAjICBpZiAhQEhBVkVfRk9PQCAgIG9yICAgaWYgIUBIQVZFX0RFQ0xfRk9PQAorKyAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CisrICAgICAgICMgIGVuZGlmCisrICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKysgICAgICAgIyBlbmRpZgorKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisrICAgICAgIC4uLgorKyAgICAgICAjZW5kaWYKKysqLworKworKy8qIF9HTF9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKysgICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLworKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisrIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybiAiQyIKKysjZWxzZQorKyMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4KKysjZW5kaWYKKysKKysvKiBfR0xfRlVOQ0RFQ0xfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKysgICBkZWNsYXJlcyBhIHJlcGxhY2VtZW50IGZ1bmN0aW9uLCBuYW1lZCBycGxfZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorKyAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgorKyAgIEV4YW1wbGU6CisrICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisrICovCisrI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisrICBfR0xfRlVOQ0RFQ0xfUlBMXzEgKHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpCisrI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMXzEocnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisrICBfR0xfRVhURVJOX0MgcmV0dHlwZSBycGxfZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisrCisrLyogX0dMX0ZVTkNERUNMX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisrICAgZGVjbGFyZXMgdGhlIHN5c3RlbSBmdW5jdGlvbiwgbmFtZWQgZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorKyAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgorKyAgIEV4YW1wbGU6CisrICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisrICovCisrI2RlZmluZSBfR0xfRlVOQ0RFQ0xfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisrICBfR0xfRVhURVJOX0MgcmV0dHlwZSBmdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKysKKysvKiBfR0xfQ1hYQUxJQVNfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKysgICBkZWNsYXJlcyBhIEMrKyBhbGlhcyBjYWxsZWQgR05VTElCX05BTUVTUEFDRTo6ZnVuYworKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHJwbF9mdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFIGlzIGRlZmluZWQuCisrICAgRXhhbXBsZToKKysgICAgIF9HTF9DWFhBTElBU19SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworKyAqLworKyNkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorKyAgX0dMX0NYWEFMSUFTX1JQTF8xIChmdW5jLCBycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKQorKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpycGxfZnVuYzsgICAgICAgICAgXAorKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbHNlCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisrICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrI2VuZGlmCisrCisrLyogX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKysgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKysgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBycGxfZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudAorKyAgIGRlY2xhcmF0aW9uLiAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IKKysgICB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCisrI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKysgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6cnBsX2Z1bmMpOyAgICAgICAgXAorKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrI2Vsc2UKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbmRpZgorKworKy8qIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworKyAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCisrICAgdGhhdCByZWRpcmVjdHMgdG8gdGhlIHN5c3RlbSBwcm92aWRlZCBmdW5jdGlvbiBmdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFCisrICAgaXMgZGVmaW5lZC4KKysgICBFeGFtcGxlOgorKyAgICAgX0dMX0NYWEFMSUFTX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CisrICovCisrI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisrICAvKiBJZiB3ZSB3ZXJlIHRvIHdyaXRlCisrICAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOworKyAgICAgbGlrZSBhYm92ZSBpbiBfR0xfQ1hYQUxJQVNfUlBMXzEsIHRoZSBjb21waWxlciBjb3VsZCBvcHRpbWl6ZSBjYWxscworKyAgICAgYmV0dGVyIChyZW1vdmUgYW4gaW5kaXJlY3Rpb24gdGhyb3VnaCBhICdzdGF0aWMnIHBvaW50ZXIgdmFyaWFibGUpLAorKyAgICAgYnV0IHRoZW4gdGhlIF9HTF9DWFhBTElBU1dBUk4gbWFjcm8gYmVsb3cgd291bGQgY2F1c2UgYSB3YXJuaW5nIG5vdCBvbmx5CisrICAgICBmb3IgdXNlcyBvZiA6OmZ1bmMgYnV0IGFsc28gZm9yIHVzZXMgb2YgR05VTElCX05BTUVTUEFDRTo6ZnVuYy4gICovCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOyAgXAorKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKysjZWxzZQorKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKysgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKysjZW5kaWYKKysKKysvKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGZ1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgZGVjbGFyYXRpb24uCisrICAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IgdGhhdCB3b3VsZAorKyAgIG90aGVyd2lzZSBvY2N1ci4gICovCisrI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisrICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICBcCisrICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPig6OmZ1bmMpOyBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrI2Vsc2UKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKysgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKysjZW5kaWYKKysKKysvKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzLCByZXR0eXBlMiwgcGFyYW1ldGVyczIpOworKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGlzIHBpY2tlZCBhbW9uZyBhIHNldCBvZiBvdmVybG9hZGVkIGZ1bmN0aW9ucywKKysgICBuYW1lbHkgdGhlIG9uZSB3aXRoIHJldHR5cGUyIGFuZCBwYXJhbWV0ZXJzMi4gIFR3byBjb25zZWN1dGl2ZSBjYXN0cworKyAgIGFyZSB1c2VkIHRvIHNpbGVuY2UgdGhlICJjYW5ub3QgZmluZCBhIG1hdGNoIiBhbmQgImludmFsaWQgY29udmVyc2lvbiIKKysgICBlcnJvcnMgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorKyAgLyogVGhlIG91dGVyIGNhc3QgbXVzdCBiZSBhIHJlaW50ZXJwcmV0X2Nhc3QuCisrICAgICBUaGUgaW5uZXIgY2FzdDogV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNldCBvZiBvdmVybG9hZGVkCisrICAgICBmdW5jdGlvbnMsIGl0IHdvcmtzIGFzIGEgc3RhdGljX2Nhc3Q8PiwgY2hvb3NpbmcgdGhlIGRlc2lnbmF0ZWQgdmFyaWFudC4KKysgICAgIFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzaW5nbGUgdmFyaWFudCwgaXQgd29ya3MgYXMgYQorKyAgICAgcmVpbnRlcnByZXRfY2FzdDw+LiBUaGUgcGFyZW50aGVzaXplZCBjYXN0IHN5bnRheCB3b3JrcyBib3RoIHdheXMuICAqLworKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKysgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIChyZXR0eXBlMigqKXBhcmFtZXRlcnMyKSg6OmZ1bmMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKysjZWxzZQorKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKysgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKysjZW5kaWYKKysKKysvKiBfR0xfQ1hYQUxJQVNXQVJOIChmdW5jKTsKKysgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiA6OmZ1bmMgaXMgdXNlZCBidXQgbm90IHdoZW4KKysgICBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICBmdW5jIG11c3QgYmUgZGVmaW5lZCB3aXRob3V0IG92ZXJsb2FkZWQKKysgICB2YXJpYW50cy4gICovCisrI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisrICAgX0dMX0NYWEFMSUFTV0FSTl8xIChmdW5jLCBHTlVMSUJfTkFNRVNQQUNFKQorKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMShmdW5jLG5hbWVzcGFjZSkgXAorKyAgIF9HTF9DWFhBTElBU1dBUk5fMiAoZnVuYywgbmFtZXNwYWNlKQorKy8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAorKyAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworKyMgaWYgIV9fT1BUSU1JWkVfXworKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKysgICAgX0dMX1dBUk5fT05fVVNFIChmdW5jLCBcCisrICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorKyAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCisrIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKysgICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCisrIyBlbHNlCisrIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorKyAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKysjIGVuZGlmCisrI2Vsc2UKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKysgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKysjZW5kaWYKKysKKysvKiBfR0xfQ1hYQUxJQVNXQVJOMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisrICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gdGhlIGdpdmVuIG92ZXJsb2FkZWQgdmFyaWFudCBvZiA6OmZ1bmMKKysgICBpcyB1c2VkIGJ1dCBub3Qgd2hlbiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICAqLworKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisrICAgX0dMX0NYWEFMSUFTV0FSTjFfMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorKyAgICAgICAgICAgICAgICAgICAgICAgIEdOVUxJQl9OQU1FU1BBQ0UpCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKysgICBfR0xfQ1hYQUxJQVNXQVJOMV8yIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBuYW1lc3BhY2UpCisrLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisrICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCisrIyBpZiAhX19PUFRJTUlaRV9fCisrIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisrICAgIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKysjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKysgICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCisrIyBlbHNlCisrIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisrICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyMgZW5kaWYKKysjZWxzZQorKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCisrICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrI2VuZGlmCisrCisrI2VuZGlmIC8qIF9HTF9DWFhERUZTX0ggKi8KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51bGwuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oCTIwMTEtMDgtMDcgMDY6MjI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCitAQCAtMSwyNiArMCwwIEBACistLyogQSBDIG1hY3JvIGZvciBkZWNsYXJpbmcgdGhhdCBzcGVjaWZpYyBhcmd1bWVudHMgbXVzdCBub3QgYmUgTlVMTC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKy0gICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0gICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCistCistLyogX0dMX0FSR19OT05OVUxMKChuLC4uLixtKSkgdGVsbHMgdGhlIGNvbXBpbGVyIGFuZCBzdGF0aWMgYW5hbHl6ZXIgdG9vbHMKKy0gICB0aGF0IHRoZSB2YWx1ZXMgcGFzc2VkIGFzIGFyZ3VtZW50cyBuLCAuLi4sIG0gbXVzdCBiZSBub24tTlVMTCBwb2ludGVycy4KKy0gICBuID0gMSBzdGFuZHMgZm9yIHRoZSBmaXJzdCBhcmd1bWVudCwgbiA9IDIgZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgZXRjLiAgKi8KKy0jaWZuZGVmIF9HTF9BUkdfTk9OTlVMTAorLSMgaWYgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gMykgfHwgX19HTlVDX18gPiAzCistIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpIF9fYXR0cmlidXRlX18gKChfX25vbm51bGxfXyBwYXJhbXMpKQorLSMgZWxzZQorLSMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKQorLSMgZW5kaWYKKy0jZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmggbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L3NuaXBwZXQvYysrZGVmcy5oCTIwMTEtMDgtMDcgMDY6MjI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmgJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKK0BAIC0xLDI3MSArMCwwIEBACistLyogQysrIGNvbXBhdGlibGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gbWFjcm9zLgorLSAgIENvcHlyaWdodCAoQykgMjAxMC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorLSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKy0KKy0jaWZuZGVmIF9HTF9DWFhERUZTX0gKKy0jZGVmaW5lIF9HTF9DWFhERUZTX0gKKy0KKy0vKiBUaGUgdGhyZWUgbW9zdCBmcmVxdWVudCB1c2UgY2FzZXMgb2YgdGhlc2UgbWFjcm9zIGFyZToKKy0KKy0gICAqIEZvciBwcm92aWRpbmcgYSBzdWJzdGl0dXRlIGZvciBhIGZ1bmN0aW9uIHRoYXQgaXMgbWlzc2luZyBvbiBzb21lCistICAgICBwbGF0Zm9ybXMsIGJ1dCBpcyBkZWNsYXJlZCBhbmQgd29ya3MgZmluZSBvbiB0aGUgcGxhdGZvcm1zIG9uIHdoaWNoCistICAgICBpdCBleGlzdHM6CistCistICAgICAgICNpZiBAR05VTElCX0ZPT0AKKy0gICAgICAgIyBpZiAhQEhBVkVfRk9PQAorLSAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CistICAgICAgICMgZW5kaWYKKy0gICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworLSAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworLSAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCistICAgICAgIC4uLgorLSAgICAgICAjZW5kaWYKKy0KKy0gICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBhbGwgcGxhdGZvcm1zLAorLSAgICAgYnV0IGlzIGJyb2tlbi9pbnN1ZmZpY2llbnQgYW5kIG5lZWRzIHRvIGJlIHJlcGxhY2VkIG9uIHNvbWUgcGxhdGZvcm1zOgorLQorLSAgICAgICAjaWYgQEdOVUxJQl9GT09ACistICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorLSAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorLSAgICAgICAjICAgdW5kZWYgZm9vCistICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKy0gICAgICAgIyAgZW5kaWYKKy0gICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOworLSAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CistICAgICAgICMgZWxzZQorLSAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CistICAgICAgICMgZW5kaWYKKy0gICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKy0gICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLSAgICAgICAuLi4KKy0gICAgICAgI2VuZGlmCistCistICAgKiBGb3IgcHJvdmlkaW5nIGEgcmVwbGFjZW1lbnQgZm9yIGEgZnVuY3Rpb24gdGhhdCBleGlzdHMgb24gc29tZSBwbGF0Zm9ybXMKKy0gICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIG9mIHRoZW0gYW5kCistICAgICBpcyBhZGRpdGlvbmFsbHkgZWl0aGVyIG1pc3Npbmcgb3IgdW5kZWNsYXJlZCBvbiBzb21lIG90aGVyIHBsYXRmb3JtczoKKy0KKy0gICAgICAgI2lmIEBHTlVMSUJfRk9PQAorLSAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKy0gICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKy0gICAgICAgIyAgIHVuZGVmIGZvbworLSAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCistICAgICAgICMgIGVuZGlmCistICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKy0gICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworLSAgICAgICAjIGVsc2UKKy0gICAgICAgIyAgaWYgIUBIQVZFX0ZPT0AgICBvciAgIGlmICFASEFWRV9ERUNMX0ZPT0AKKy0gICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworLSAgICAgICAjICBlbmRpZgorLSAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CistICAgICAgICMgZW5kaWYKKy0gICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKy0gICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLSAgICAgICAuLi4KKy0gICAgICAgI2VuZGlmCistKi8KKy0KKy0vKiBfR0xfRVhURVJOX0MgZGVjbGFyYXRpb247CistICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKy0jaWYgZGVmaW5lZCBfX2NwbHVzcGx1cworLSMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4gIkMiCistI2Vsc2UKKy0jIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuCistI2VuZGlmCistCistLyogX0dMX0ZVTkNERUNMX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CistICAgZGVjbGFyZXMgYSByZXBsYWNlbWVudCBmdW5jdGlvbiwgbmFtZWQgcnBsX2Z1bmMsIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwKKy0gICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKy0gICBFeGFtcGxlOgorLSAgICAgX0dMX0ZVTkNERUNMX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworLSAqLworLSNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorLSAgX0dMX0ZVTkNERUNMX1JQTF8xIChycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKQorLSNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTF8xKHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorLSAgX0dMX0VYVEVSTl9DIHJldHR5cGUgcnBsX2Z1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworLQorLS8qIF9HTF9GVU5DREVDTF9TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworLSAgIGRlY2xhcmVzIHRoZSBzeXN0ZW0gZnVuY3Rpb24sIG5hbWVkIGZ1bmMsIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwKKy0gICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKy0gICBFeGFtcGxlOgorLSAgICAgX0dMX0ZVTkNERUNMX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworLSAqLworLSNkZWZpbmUgX0dMX0ZVTkNERUNMX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorLSAgX0dMX0VYVEVSTl9DIHJldHR5cGUgZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCistCistLyogX0dMX0NYWEFMSUFTX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CistICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKy0gICB0aGF0IHJlZGlyZWN0cyB0byBycGxfZnVuYywgaWYgR05VTElCX05BTUVTUEFDRSBpcyBkZWZpbmVkLgorLSAgIEV4YW1wbGU6CistICAgICBfR0xfQ1hYQUxJQVNfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKy0gKi8KKy0jZGVmaW5lIF9HTF9DWFhBTElBU19SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKy0gIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycykKKy0jaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKy0gICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6cnBsX2Z1bmM7ICAgICAgICAgIFwKKy0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZWxzZQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSNlbmRpZgorLQorLS8qIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CistICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1JQTF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CistICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gcnBsX2Z1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQKKy0gICBkZWNsYXJhdGlvbi4gIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yCistICAgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworLSNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCistICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPig6OnJwbF9mdW5jKTsgICAgICAgIFwKKy0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSNlbHNlCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZW5kaWYKKy0KKy0vKiBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKy0gICBkZWNsYXJlcyBhIEMrKyBhbGlhcyBjYWxsZWQgR05VTElCX05BTUVTUEFDRTo6ZnVuYworLSAgIHRoYXQgcmVkaXJlY3RzIHRvIHRoZSBzeXN0ZW0gcHJvdmlkZWQgZnVuY3Rpb24gZnVuYywgaWYgR05VTElCX05BTUVTUEFDRQorLSAgIGlzIGRlZmluZWQuCistICAgRXhhbXBsZToKKy0gICAgIF9HTF9DWFhBTElBU19TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworLSAqLworLSNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorLSAgLyogSWYgd2Ugd2VyZSB0byB3cml0ZQorLSAgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsKKy0gICAgIGxpa2UgYWJvdmUgaW4gX0dMX0NYWEFMSUFTX1JQTF8xLCB0aGUgY29tcGlsZXIgY291bGQgb3B0aW1pemUgY2FsbHMKKy0gICAgIGJldHRlciAocmVtb3ZlIGFuIGluZGlyZWN0aW9uIHRocm91Z2ggYSAnc3RhdGljJyBwb2ludGVyIHZhcmlhYmxlKSwKKy0gICAgIGJ1dCB0aGVuIHRoZSBfR0xfQ1hYQUxJQVNXQVJOIG1hY3JvIGJlbG93IHdvdWxkIGNhdXNlIGEgd2FybmluZyBub3Qgb25seQorLSAgICAgZm9yIHVzZXMgb2YgOjpmdW5jIGJ1dCBhbHNvIGZvciB1c2VzIG9mIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMuICAqLworLSMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKy0gICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICBcCistICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsgIFwKKy0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CistI2Vsc2UKKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCistICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CistI2VuZGlmCistCistLyogX0dMX0NYWEFMSUFTX1NZU19DQVNUIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKy0gICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKy0gICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBmdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGRlY2xhcmF0aW9uLgorLSAgIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yIHRoYXQgd291bGQKKy0gICBvdGhlcndpc2Ugb2NjdXIuICAqLworLSNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorLSAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgXAorLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpmdW5jKTsgXAorLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSNlbHNlCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCistICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CistI2VuZGlmCistCistLyogX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycywgcmV0dHlwZTIsIHBhcmFtZXRlcnMyKTsKKy0gICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKy0gICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBpcyBwaWNrZWQgYW1vbmcgYSBzZXQgb2Ygb3ZlcmxvYWRlZCBmdW5jdGlvbnMsCistICAgbmFtZWx5IHRoZSBvbmUgd2l0aCByZXR0eXBlMiBhbmQgcGFyYW1ldGVyczIuICBUd28gY29uc2VjdXRpdmUgY2FzdHMKKy0gICBhcmUgdXNlZCB0byBzaWxlbmNlIHRoZSAiY2Fubm90IGZpbmQgYSBtYXRjaCIgYW5kICJpbnZhbGlkIGNvbnZlcnNpb24iCistICAgZXJyb3JzIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKy0jaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKy0gIC8qIFRoZSBvdXRlciBjYXN0IG11c3QgYmUgYSByZWludGVycHJldF9jYXN0LgorLSAgICAgVGhlIGlubmVyIGNhc3Q6IFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzZXQgb2Ygb3ZlcmxvYWRlZAorLSAgICAgZnVuY3Rpb25zLCBpdCB3b3JrcyBhcyBhIHN0YXRpY19jYXN0PD4sIGNob29zaW5nIHRoZSBkZXNpZ25hdGVkIHZhcmlhbnQuCistICAgICBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2luZ2xlIHZhcmlhbnQsIGl0IHdvcmtzIGFzIGEKKy0gICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Pi4gVGhlIHBhcmVudGhlc2l6ZWQgY2FzdCBzeW50YXggd29ya3MgYm90aCB3YXlzLiAgKi8KKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzLHJldHR5cGUyLHBhcmFtZXRlcnMyKSBcCistICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAocmV0dHlwZTIoKilwYXJhbWV0ZXJzMikoOjpmdW5jKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CistI2Vsc2UKKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzLHJldHR5cGUyLHBhcmFtZXRlcnMyKSBcCistICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CistI2VuZGlmCistCistLyogX0dMX0NYWEFMSUFTV0FSTiAoZnVuYyk7CistICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gOjpmdW5jIGlzIHVzZWQgYnV0IG5vdCB3aGVuCistICAgR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgZnVuYyBtdXN0IGJlIGRlZmluZWQgd2l0aG91dCBvdmVybG9hZGVkCistICAgdmFyaWFudHMuICAqLworLSNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorLSAgIF9HTF9DWFhBTElBU1dBUk5fMSAoZnVuYywgR05VTElCX05BTUVTUEFDRSkKKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzEoZnVuYyxuYW1lc3BhY2UpIFwKKy0gICBfR0xfQ1hYQUxJQVNXQVJOXzIgKGZ1bmMsIG5hbWVzcGFjZSkKKy0vKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKy0gICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKy0jIGlmICFfX09QVElNSVpFX18KKy0jICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCistICAgIF9HTF9XQVJOX09OX1VTRSAoZnVuYywgXAorLSAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKy0gICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorLSMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKy0jICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCistICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworLSMgZWxzZQorLSMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKy0gICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CistIyBlbmRpZgorLSNlbHNlCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCistICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CistI2VuZGlmCistCistLyogX0dMX0NYWEFMSUFTV0FSTjEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworLSAgIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZCB3aGVuIHRoZSBnaXZlbiBvdmVybG9hZGVkIHZhcmlhbnQgb2YgOjpmdW5jCistICAgaXMgdXNlZCBidXQgbm90IHdoZW4gR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgKi8KKy0jaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorLSAgIF9HTF9DWFhBTElBU1dBUk4xXzEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICBHTlVMSUJfTkFNRVNQQUNFKQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCistICAgX0dMX0NYWEFMSUFTV0FSTjFfMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgbmFtZXNwYWNlKQorLS8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAorLSAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworLSMgaWYgIV9fT1BUSU1JWkVfXworLSMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorLSAgICBfR0xfV0FSTl9PTl9VU0VfQ1hYIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCistICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKy0jIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCistIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCistICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworLSMgZWxzZQorLSMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorLSAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jIGVuZGlmCistI2Vsc2UKKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSNlbmRpZgorLQorLSNlbmRpZiAvKiBfR0xfQ1hYREVGU19IICovCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L3NuaXBwZXQvX05vcmV0dXJuLmggbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvc25pcHBldC9fTm9yZXR1cm4uaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvc25pcHBldC9fTm9yZXR1cm4uaAkyMDExLTA4LTA3IDA2OjIyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L3NuaXBwZXQvX05vcmV0dXJuLmgJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKK0BAIC0xLDEwICswLDAgQEAKKy0jaWZuZGVmIF9Ob3JldHVybgorLSMgaWYgKDMgPD0gX19HTlVDX18gfHwgKF9fR05VQ19fID09IDIgJiYgOCA8PSBfX0dOVUNfTUlOT1JfXykgXAorLSAgICAgIHx8IDB4NTExMCA8PSBfX1NVTlBST19DKQorLSMgIGRlZmluZSBfTm9yZXR1cm4gX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpCistIyBlbGlmIDEyMDAgPD0gX01TQ19WRVIKKy0jICBkZWZpbmUgX05vcmV0dXJuIF9fZGVjbHNwZWMgKG5vcmV0dXJuKQorLSMgZWxzZQorLSMgIGRlZmluZSBfTm9yZXR1cm4KKy0jIGVuZGlmCistI2VuZGlmCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L3NuaXBwZXQvd2Fybi1vbi11c2UuaCBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9zbmlwcGV0L3dhcm4tb24tdXNlLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L3NuaXBwZXQvd2Fybi1vbi11c2UuaAkyMDExLTA4LTA3IDA2OjIyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L3NuaXBwZXQvd2Fybi1vbi11c2UuaAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorQEAgLTEsMTA5ICswLDAgQEAKKy0vKiBBIEMgbWFjcm8gZm9yIGVtaXR0aW5nIHdhcm5pbmdzIGlmIGEgZnVuY3Rpb24gaXMgdXNlZC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKy0gICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0gICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCistCistLyogX0dMX1dBUk5fT05fVVNFIChmdW5jdGlvbiwgImxpdGVyYWwgc3RyaW5nIikgaXNzdWVzIGEgZGVjbGFyYXRpb24KKy0gICBmb3IgRlVOQ1RJT04gd2hpY2ggd2lsbCB0aGVuIHRyaWdnZXIgYSBjb21waWxlciB3YXJuaW5nIGNvbnRhaW5pbmcKKy0gICB0aGUgdGV4dCBvZiAibGl0ZXJhbCBzdHJpbmciIGFueXdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkLCBpZgorLSAgIHN1cHBvcnRlZCBieSB0aGUgY29tcGlsZXIuICBJZiB0aGUgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzCistICAgZmVhdHVyZSwgdGhlIG1hY3JvIGV4cGFuZHMgdG8gYW4gdW51c2VkIGV4dGVybiBkZWNsYXJhdGlvbi4KKy0KKy0gICBUaGlzIG1hY3JvIGlzIHVzZWZ1bCBmb3IgbWFya2luZyBhIGZ1bmN0aW9uIGFzIGEgcG90ZW50aWFsCistICAgcG9ydGFiaWxpdHkgdHJhcCwgd2l0aCB0aGUgaW50ZW50IHRoYXQgImxpdGVyYWwgc3RyaW5nIiBpbmNsdWRlCistICAgaW5zdHJ1Y3Rpb25zIG9uIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSB1c2VkCistICAgaW5zdGVhZC4gIEhvd2V2ZXIsIG9uZSBvZiB0aGUgcmVhc29ucyB0aGF0IGEgZnVuY3Rpb24gaXMgYQorLSAgIHBvcnRhYmlsaXR5IHRyYXAgaXMgaWYgaXQgaGFzIHRoZSB3cm9uZyBzaWduYXR1cmUuICBEZWNsYXJpbmcKKy0gICBGVU5DVElPTiB3aXRoIGEgZGlmZmVyZW50IHNpZ25hdHVyZSBpbiBDIGlzIGEgY29tcGlsYXRpb24gZXJyb3IsIHNvCistICAgdGhpcyBtYWNybyBtdXN0IHVzZSB0aGUgc2FtZSB0eXBlIGFzIGFueSBleGlzdGluZyBkZWNsYXJhdGlvbiBzbworLSAgIHRoYXQgcHJvZ3JhbXMgdGhhdCBhdm9pZCB0aGUgcHJvYmxlbWF0aWMgRlVOQ1RJT04gZG8gbm90IGZhaWwgdG8KKy0gICBjb21waWxlIG1lcmVseSBiZWNhdXNlIHRoZXkgaW5jbHVkZWQgYSBoZWFkZXIgdGhhdCBwb2lzb25lZCB0aGUKKy0gICBmdW5jdGlvbi4gIEJ1dCB0aGlzIGltcGxpZXMgdGhhdCBfR0xfV0FSTl9PTl9VU0UgaXMgb25seSBzYWZlIHRvCistICAgdXNlIGlmIEZVTkNUSU9OIGlzIGtub3duIHRvIGFscmVhZHkgaGF2ZSBhIGRlY2xhcmF0aW9uLiAgVXNlIG9mCistICAgdGhpcyBtYWNybyBpbXBsaWVzIHRoYXQgdGhlcmUgbXVzdCBub3QgYmUgYW55IG90aGVyIG1hY3JvIGhpZGluZworLSAgIHRoZSBkZWNsYXJhdGlvbiBvZiBGVU5DVElPTjsgYnV0IHVuZGVmaW5pbmcgRlVOQ1RJT04gZmlyc3QgaXMgcGFydAorLSAgIG9mIHRoZSBwb2lzb25pbmcgcHJvY2VzcyBhbnl3YXkgKGFsdGhvdWdoIGZvciBzeW1ib2xzIHRoYXQgYXJlCistICAgcHJvdmlkZWQgb25seSB2aWEgYSBtYWNybywgdGhlIHJlc3VsdCBpcyBhIGNvbXBpbGF0aW9uIGVycm9yIHJhdGhlcgorLSAgIHRoYW4gYSB3YXJuaW5nIGNvbnRhaW5pbmcgImxpdGVyYWwgc3RyaW5nIikuICBBbHNvIG5vdGUgdGhhdCBpbgorLSAgIEMrKywgaXQgaXMgb25seSBzYWZlIHRvIHVzZSBpZiBGVU5DVElPTiBoYXMgbm8gb3ZlcmxvYWRzLgorLQorLSAgIEZvciBhbiBleGFtcGxlLCBpdCBpcyBwb3NzaWJsZSB0byBwb2lzb24gJ2dldGxpbmUnIGJ5OgorLSAgIC0gYWRkaW5nIGEgY2FsbCB0byBnbF9XQVJOX09OX1VTRV9QUkVQQVJFKFtbI2luY2x1ZGUgPHN0ZGlvLmg+XV0sCistICAgICBbZ2V0bGluZV0pIGluIGNvbmZpZ3VyZS5hYywgd2hpY2ggcG90ZW50aWFsbHkgZGVmaW5lcworLSAgICAgSEFWRV9SQVdfREVDTF9HRVRMSU5FCistICAgLSBhZGRpbmcgdGhpcyBjb2RlIHRvIGEgaGVhZGVyIHRoYXQgd3JhcHMgdGhlIHN5c3RlbSA8c3RkaW8uaD46CistICAgICAjdW5kZWYgZ2V0bGluZQorLSAgICAgI2lmIEhBVkVfUkFXX0RFQ0xfR0VUTElORQorLSAgICAgX0dMX1dBUk5fT05fVVNFIChnZXRsaW5lLCAiZ2V0bGluZSBpcyByZXF1aXJlZCBieSBQT1NJWCAyMDA4LCBidXQiCistICAgICAgICJub3QgdW5pdmVyc2FsbHkgcHJlc2VudDsgdXNlIHRoZSBnbnVsaWIgbW9kdWxlIGdldGxpbmUiKTsKKy0gICAgICNlbmRpZgorLQorLSAgIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBkaXJlY3RseSBwb2lzb24gZ2xvYmFsIHZhcmlhYmxlcy4gIEJ1dCBpdCBpcworLSAgIHBvc3NpYmxlIHRvIHdyaXRlIGEgd3JhcHBlciBhY2Nlc3NvciBmdW5jdGlvbiwgYW5kIHBvaXNvbiB0aGF0CistICAgKGxlc3MgY29tbW9uIHVzYWdlLCBsaWtlICZlbnZpcm9uLCB3aWxsIGNhdXNlIGEgY29tcGlsYXRpb24gZXJyb3IKKy0gICByYXRoZXIgdGhhbiBpc3N1ZSB0aGUgbmljZSB3YXJuaW5nLCBidXQgdGhlIGVuZCByZXN1bHQgb2YgaW5mb3JtaW5nCistICAgdGhlIGRldmVsb3BlciBhYm91dCB0aGVpciBwb3J0YWJpbGl0eSBwcm9ibGVtIGlzIHN0aWxsIGFjaGlldmVkKToKKy0gICAjaWYgSEFWRV9SQVdfREVDTF9FTlZJUk9OCistICAgc3RhdGljIGlubGluZSBjaGFyICoqKnJwbF9lbnZpcm9uICh2b2lkKSB7IHJldHVybiAmZW52aXJvbjsgfQorLSAgIF9HTF9XQVJOX09OX1VTRSAocnBsX2Vudmlyb24sICJlbnZpcm9uIGlzIG5vdCBhbHdheXMgcHJvcGVybHkgZGVjbGFyZWQiKTsKKy0gICAjIHVuZGVmIGVudmlyb24KKy0gICAjIGRlZmluZSBlbnZpcm9uICgqcnBsX2Vudmlyb24gKCkpCistICAgI2VuZGlmCistICAgKi8KKy0jaWZuZGVmIF9HTF9XQVJOX09OX1VTRQorLQorLSMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCistLyogQSBjb21waWxlciBhdHRyaWJ1dGUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyA0LjMuMCBhbmQgbGF0ZXIuICAqLworLSMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKKy1leHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobWVzc2FnZSkpKQorLSMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKy0vKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworLSMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKKy1leHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uCistIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKy0jICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCistX0dMX1dBUk5fRVhURVJOX0MgaW50IF9nbF93YXJuX29uX3VzZQorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0vKiBfR0xfV0FSTl9PTl9VU0VfQ1hYIChmdW5jdGlvbiwgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgInN0cmluZyIpCistICAgaXMgbGlrZSBfR0xfV0FSTl9PTl9VU0UgKGZ1bmN0aW9uLCAic3RyaW5nIiksIGV4Y2VwdCB0aGF0IHRoZSBmdW5jdGlvbiBpcworLSAgIGRlY2xhcmVkIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywKKy0gICBhbmQgYXR0cmlidXRlcy4KKy0gICBUaGlzIHZhcmlhbnQgaXMgdXNlZnVsIGZvciBvdmVybG9hZGVkIGZ1bmN0aW9ucyBpbiBDKysuIF9HTF9XQVJOX09OX1VTRSBkb2VzCistICAgbm90IHdvcmsgaW4gdGhpcyBjYXNlLiAgKi8KKy0jaWZuZGVmIF9HTF9XQVJOX09OX1VTRV9DWFgKKy0jIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorLSMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKKy1leHRlcm4gcmV0dHlwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzIFwKKy0gICAgIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobXNnKSkpCistIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLS8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCistIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorLWV4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKy0jIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLworLSMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKKy1fR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCistIyBlbmRpZgorLSNlbmRpZgorLQorLS8qIF9HTF9XQVJOX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworLSAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCistI2lmbmRlZiBfR0xfV0FSTl9FWFRFUk5fQworLSMgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cworLSMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4gIkMiCistIyBlbHNlCistIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybgorLSMgZW5kaWYKKy0jZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvd2Fybi1vbi11c2UuaCBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC93YXJuLW9uLXVzZS5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC93YXJuLW9uLXVzZS5oCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKysgbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvd2Fybi1vbi11c2UuaAkyMDEyLTAxLTA4IDAyOjA3OjM5Ljk1MDQ4NDQzOSAtMDgwMAorQEAgLTAsMCArMSwxMDkgQEAKKysvKiBBIEMgbWFjcm8gZm9yIGVtaXR0aW5nIHdhcm5pbmdzIGlmIGEgZnVuY3Rpb24gaXMgdXNlZC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisrCisrLyogX0dMX1dBUk5fT05fVVNFIChmdW5jdGlvbiwgImxpdGVyYWwgc3RyaW5nIikgaXNzdWVzIGEgZGVjbGFyYXRpb24KKysgICBmb3IgRlVOQ1RJT04gd2hpY2ggd2lsbCB0aGVuIHRyaWdnZXIgYSBjb21waWxlciB3YXJuaW5nIGNvbnRhaW5pbmcKKysgICB0aGUgdGV4dCBvZiAibGl0ZXJhbCBzdHJpbmciIGFueXdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkLCBpZgorKyAgIHN1cHBvcnRlZCBieSB0aGUgY29tcGlsZXIuICBJZiB0aGUgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzCisrICAgZmVhdHVyZSwgdGhlIG1hY3JvIGV4cGFuZHMgdG8gYW4gdW51c2VkIGV4dGVybiBkZWNsYXJhdGlvbi4KKysKKysgICBUaGlzIG1hY3JvIGlzIHVzZWZ1bCBmb3IgbWFya2luZyBhIGZ1bmN0aW9uIGFzIGEgcG90ZW50aWFsCisrICAgcG9ydGFiaWxpdHkgdHJhcCwgd2l0aCB0aGUgaW50ZW50IHRoYXQgImxpdGVyYWwgc3RyaW5nIiBpbmNsdWRlCisrICAgaW5zdHJ1Y3Rpb25zIG9uIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSB1c2VkCisrICAgaW5zdGVhZC4gIEhvd2V2ZXIsIG9uZSBvZiB0aGUgcmVhc29ucyB0aGF0IGEgZnVuY3Rpb24gaXMgYQorKyAgIHBvcnRhYmlsaXR5IHRyYXAgaXMgaWYgaXQgaGFzIHRoZSB3cm9uZyBzaWduYXR1cmUuICBEZWNsYXJpbmcKKysgICBGVU5DVElPTiB3aXRoIGEgZGlmZmVyZW50IHNpZ25hdHVyZSBpbiBDIGlzIGEgY29tcGlsYXRpb24gZXJyb3IsIHNvCisrICAgdGhpcyBtYWNybyBtdXN0IHVzZSB0aGUgc2FtZSB0eXBlIGFzIGFueSBleGlzdGluZyBkZWNsYXJhdGlvbiBzbworKyAgIHRoYXQgcHJvZ3JhbXMgdGhhdCBhdm9pZCB0aGUgcHJvYmxlbWF0aWMgRlVOQ1RJT04gZG8gbm90IGZhaWwgdG8KKysgICBjb21waWxlIG1lcmVseSBiZWNhdXNlIHRoZXkgaW5jbHVkZWQgYSBoZWFkZXIgdGhhdCBwb2lzb25lZCB0aGUKKysgICBmdW5jdGlvbi4gIEJ1dCB0aGlzIGltcGxpZXMgdGhhdCBfR0xfV0FSTl9PTl9VU0UgaXMgb25seSBzYWZlIHRvCisrICAgdXNlIGlmIEZVTkNUSU9OIGlzIGtub3duIHRvIGFscmVhZHkgaGF2ZSBhIGRlY2xhcmF0aW9uLiAgVXNlIG9mCisrICAgdGhpcyBtYWNybyBpbXBsaWVzIHRoYXQgdGhlcmUgbXVzdCBub3QgYmUgYW55IG90aGVyIG1hY3JvIGhpZGluZworKyAgIHRoZSBkZWNsYXJhdGlvbiBvZiBGVU5DVElPTjsgYnV0IHVuZGVmaW5pbmcgRlVOQ1RJT04gZmlyc3QgaXMgcGFydAorKyAgIG9mIHRoZSBwb2lzb25pbmcgcHJvY2VzcyBhbnl3YXkgKGFsdGhvdWdoIGZvciBzeW1ib2xzIHRoYXQgYXJlCisrICAgcHJvdmlkZWQgb25seSB2aWEgYSBtYWNybywgdGhlIHJlc3VsdCBpcyBhIGNvbXBpbGF0aW9uIGVycm9yIHJhdGhlcgorKyAgIHRoYW4gYSB3YXJuaW5nIGNvbnRhaW5pbmcgImxpdGVyYWwgc3RyaW5nIikuICBBbHNvIG5vdGUgdGhhdCBpbgorKyAgIEMrKywgaXQgaXMgb25seSBzYWZlIHRvIHVzZSBpZiBGVU5DVElPTiBoYXMgbm8gb3ZlcmxvYWRzLgorKworKyAgIEZvciBhbiBleGFtcGxlLCBpdCBpcyBwb3NzaWJsZSB0byBwb2lzb24gJ2dldGxpbmUnIGJ5OgorKyAgIC0gYWRkaW5nIGEgY2FsbCB0byBnbF9XQVJOX09OX1VTRV9QUkVQQVJFKFtbI2luY2x1ZGUgPHN0ZGlvLmg+XV0sCisrICAgICBbZ2V0bGluZV0pIGluIGNvbmZpZ3VyZS5hYywgd2hpY2ggcG90ZW50aWFsbHkgZGVmaW5lcworKyAgICAgSEFWRV9SQVdfREVDTF9HRVRMSU5FCisrICAgLSBhZGRpbmcgdGhpcyBjb2RlIHRvIGEgaGVhZGVyIHRoYXQgd3JhcHMgdGhlIHN5c3RlbSA8c3RkaW8uaD46CisrICAgICAjdW5kZWYgZ2V0bGluZQorKyAgICAgI2lmIEhBVkVfUkFXX0RFQ0xfR0VUTElORQorKyAgICAgX0dMX1dBUk5fT05fVVNFIChnZXRsaW5lLCAiZ2V0bGluZSBpcyByZXF1aXJlZCBieSBQT1NJWCAyMDA4LCBidXQiCisrICAgICAgICJub3QgdW5pdmVyc2FsbHkgcHJlc2VudDsgdXNlIHRoZSBnbnVsaWIgbW9kdWxlIGdldGxpbmUiKTsKKysgICAgICNlbmRpZgorKworKyAgIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBkaXJlY3RseSBwb2lzb24gZ2xvYmFsIHZhcmlhYmxlcy4gIEJ1dCBpdCBpcworKyAgIHBvc3NpYmxlIHRvIHdyaXRlIGEgd3JhcHBlciBhY2Nlc3NvciBmdW5jdGlvbiwgYW5kIHBvaXNvbiB0aGF0CisrICAgKGxlc3MgY29tbW9uIHVzYWdlLCBsaWtlICZlbnZpcm9uLCB3aWxsIGNhdXNlIGEgY29tcGlsYXRpb24gZXJyb3IKKysgICByYXRoZXIgdGhhbiBpc3N1ZSB0aGUgbmljZSB3YXJuaW5nLCBidXQgdGhlIGVuZCByZXN1bHQgb2YgaW5mb3JtaW5nCisrICAgdGhlIGRldmVsb3BlciBhYm91dCB0aGVpciBwb3J0YWJpbGl0eSBwcm9ibGVtIGlzIHN0aWxsIGFjaGlldmVkKToKKysgICAjaWYgSEFWRV9SQVdfREVDTF9FTlZJUk9OCisrICAgc3RhdGljIGlubGluZSBjaGFyICoqKnJwbF9lbnZpcm9uICh2b2lkKSB7IHJldHVybiAmZW52aXJvbjsgfQorKyAgIF9HTF9XQVJOX09OX1VTRSAocnBsX2Vudmlyb24sICJlbnZpcm9uIGlzIG5vdCBhbHdheXMgcHJvcGVybHkgZGVjbGFyZWQiKTsKKysgICAjIHVuZGVmIGVudmlyb24KKysgICAjIGRlZmluZSBlbnZpcm9uICgqcnBsX2Vudmlyb24gKCkpCisrICAgI2VuZGlmCisrICAgKi8KKysjaWZuZGVmIF9HTF9XQVJOX09OX1VTRQorKworKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisrLyogQSBjb21waWxlciBhdHRyaWJ1dGUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyA0LjMuMCBhbmQgbGF0ZXIuICAqLworKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKKytleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobWVzc2FnZSkpKQorKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKysvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKKytleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uCisrIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKysjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCisrX0dMX1dBUk5fRVhURVJOX0MgaW50IF9nbF93YXJuX29uX3VzZQorKyMgZW5kaWYKKysjZW5kaWYKKysKKysvKiBfR0xfV0FSTl9PTl9VU0VfQ1hYIChmdW5jdGlvbiwgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgInN0cmluZyIpCisrICAgaXMgbGlrZSBfR0xfV0FSTl9PTl9VU0UgKGZ1bmN0aW9uLCAic3RyaW5nIiksIGV4Y2VwdCB0aGF0IHRoZSBmdW5jdGlvbiBpcworKyAgIGRlY2xhcmVkIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywKKysgICBhbmQgYXR0cmlidXRlcy4KKysgICBUaGlzIHZhcmlhbnQgaXMgdXNlZnVsIGZvciBvdmVybG9hZGVkIGZ1bmN0aW9ucyBpbiBDKysuIF9HTF9XQVJOX09OX1VTRSBkb2VzCisrICAgbm90IHdvcmsgaW4gdGhpcyBjYXNlLiAgKi8KKysjaWZuZGVmIF9HTF9XQVJOX09OX1VTRV9DWFgKKysjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKKytleHRlcm4gcmV0dHlwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzIFwKKysgICAgIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobXNnKSkpCisrIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworKy8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCisrIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorK2V4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKysjIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLworKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKKytfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisrIyBlbmRpZgorKyNlbmRpZgorKworKy8qIF9HTF9XQVJOX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisrI2lmbmRlZiBfR0xfV0FSTl9FWFRFUk5fQworKyMgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cworKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4gIkMiCisrIyBlbHNlCisrIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybgorKyMgZW5kaWYKKysjZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvYWxsb2NhdG9yLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvYWxsb2NhdG9yLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2FsbG9jYXRvci5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvYWxsb2NhdG9yLmgJMjAxMi0wMS0wOCAwMjowNzo0MC4wNTA0ODQ0NDQgLTA4MDAKK0BAIC00NSwxMSArNDUsMTAgQEAgc3RydWN0IGFsbG9jYXRvcgorICAgLyogQ2FsbCBGUkVFIHRvIGZyZWUgbWVtb3J5LCBsaWtlICdmcmVlJy4gICovCisgICB2b2lkICgqZnJlZSkgKHZvaWQgKik7CisgCistICAvKiBJZiBub25udWxsLCBjYWxsIERJRSAoU0laRSkgaWYgTUFMTE9DIChTSVpFKSBvciBSRUFMTE9DICguLi4sCistICAgICBTSVpFKSBmYWlscy4gIERJRSBzaG91bGQgbm90IHJldHVybi4gIFNJWkUgc2hvdWxkIGVxdWFsIFNJWkVfTUFYCistICAgICBpZiBzaXplX3Qgb3ZlcmZsb3cgd2FzIGRldGVjdGVkIHdoaWxlIGNhbGN1bGF0aW5nIHNpemVzIHRvIGJlCistICAgICBwYXNzZWQgdG8gTUFMTE9DIG9yIFJFQUxMT0MuICAqLworLSAgdm9pZCAoKmRpZSkgKHNpemVfdCk7CisrICAvKiBJZiBub25udWxsLCBjYWxsIERJRSBpZiBNQUxMT0Mgb3IgUkVBTExPQyBmYWlscy4gIERJRSBzaG91bGQgbm90CisrICAgICByZXR1cm4uICBESUUgY2FuIGJlIHVzZWQgYnkgY29kZSB0aGF0IGRldGVjdHMgbWVtb3J5IG92ZXJmbG93CisrICAgICB3aGlsZSBjYWxjdWxhdGluZyBzaXplcyB0byBiZSBwYXNzZWQgdG8gTUFMTE9DIG9yIFJFQUxMT0MuICAqLworKyAgdm9pZCAoKmRpZSkgKHZvaWQpOworIH07CisgCisgLyogQW4gYWxsb2NhdG9yIHVzaW5nIHRoZSBzdGRsaWIgZnVuY3Rpb25zIGFuZCBhIG51bGwgRElFIGZ1bmN0aW9uLiAgKi8KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvY2Fub25pY2FsaXplLWxncGwuYyBsaWJpY29udi0xLjE0L3NyY2xpYi9jYW5vbmljYWxpemUtbGdwbC5jCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9jYW5vbmljYWxpemUtbGdwbC5jCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvY2Fub25pY2FsaXplLWxncGwuYwkyMDEyLTAxLTA4IDAyOjA3OjQwLjA5NDQ4NDQ0NiAtMDgwMAorQEAgLTEyNSw3ICsxMjUsNyBAQCBfX3JlYWxwYXRoIChjb25zdCBjaGFyICpuYW1lLCBjaGFyICpyZXNvCisgI2Vsc2UKKyAgIHBhdGhfbWF4ID0gcGF0aGNvbmYgKG5hbWUsIF9QQ19QQVRIX01BWCk7CisgICBpZiAocGF0aF9tYXggPD0gMCkKKy0gICAgcGF0aF9tYXggPSA4MTkyOworKyAgICBwYXRoX21heCA9IDEwMjQ7CisgI2VuZGlmCisgCisgICBpZiAocmVzb2x2ZWQgPT0gTlVMTCkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvY2FyZWFkbGlua2F0LmMgbGliaWNvbnYtMS4xNC9zcmNsaWIvY2FyZWFkbGlua2F0LmMKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2NhcmVhZGxpbmthdC5jCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvY2FyZWFkbGlua2F0LmMJMjAxMi0wMS0wOCAwMjowNzo0MC4xMDI0ODQ0NDUgLTA4MDAKK0BAIC0xMzMsNyArMTMzLDYgQEAgY2FyZWFkbGlua2F0IChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGVuYQorICAgICAgICAgICBpZiAoYnVmID09IHN0YWNrX2J1ZikKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBjaGFyICpiID0gKGNoYXIgKikgYWxsb2MtPmFsbG9jYXRlIChsaW5rX3NpemUpOworLSAgICAgICAgICAgICAgYnVmX3NpemUgPSBsaW5rX3NpemU7CisgICAgICAgICAgICAgICBpZiAoISBiKQorICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgIG1lbWNweSAoYiwgYnVmLCBsaW5rX3NpemUpOworQEAgLTE1NywxMSArMTU2LDYgQEAgY2FyZWFkbGlua2F0IChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGVuYQorICAgICAgICAgYnVmX3NpemUgKj0gMjsKKyAgICAgICBlbHNlIGlmIChidWZfc2l6ZSA8IGJ1Zl9zaXplX21heCkKKyAgICAgICAgIGJ1Zl9zaXplID0gYnVmX3NpemVfbWF4OworLSAgICAgIGVsc2UgaWYgKGJ1Zl9zaXplX21heCA8IFNJWkVfTUFYKQorLSAgICAgICAgeworLSAgICAgICAgICBlcnJubyA9IEVOQU1FVE9PTE9ORzsKKy0gICAgICAgICAgcmV0dXJuIE5VTEw7CistICAgICAgICB9CisgICAgICAgZWxzZQorICAgICAgICAgYnJlYWs7CisgICAgICAgYnVmID0gKGNoYXIgKikgYWxsb2MtPmFsbG9jYXRlIChidWZfc2l6ZSk7CitAQCAtMTY5LDcgKzE2Myw3IEBAIGNhcmVhZGxpbmthdCAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlbmEKKyAgIHdoaWxlIChidWYpOworIAorICAgaWYgKGFsbG9jLT5kaWUpCistICAgIGFsbG9jLT5kaWUgKGJ1Zl9zaXplKTsKKysgICAgYWxsb2MtPmRpZSAoKTsKKyAgIGVycm5vID0gRU5PTUVNOworICAgcmV0dXJuIE5VTEw7CisgfQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9lcnJuby5pbi5oIGxpYmljb252LTEuMTQvc3JjbGliL2Vycm5vLmluLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2Vycm5vLmluLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9lcnJuby5pbi5oCTIwMTItMDEtMDggMDI6MDc6NDAuMTIyNDg0NDQ2IC0wODAwCitAQCAtMTYsNyArMTYsNyBAQAorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX0VSUk5PX0gKKysjaWZuZGVmIF9HTF9FUlJOT19ICisgCisgI2lmIF9fR05VQ19fID49IDMKKyBAUFJBR01BX1NZU1RFTV9IRUFERVJACitAQCAtMjYsOCArMjYsOCBAQAorIC8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyAjQElOQ0xVREVfTkVYVEAgQE5FWFRfRVJSTk9fSEAKKyAKKy0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9FUlJOT19ICistI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfRVJSTk9fSAorKyNpZm5kZWYgX0dMX0VSUk5PX0gKKysjZGVmaW5lIF9HTF9FUlJOT19ICisgCisgCisgLyogT24gbmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zLCBtYW55IG1hY3JvcyBhcmUgbm90IGRlZmluZWQuICAqLworQEAgLTE0NywxNiArMTQ3LDYgQEAKKyAjICBkZWZpbmUgR05VTElCX2RlZmluZWRfRU5PVFNVUCAxCisgIyBlbmRpZgorIAorLSMgaWZuZGVmIEVORVRSRVNFVAorLSMgIGRlZmluZSBFTkVUUkVTRVQgMjAxMQorLSMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FTkVUUkVTRVQgMQorLSMgZW5kaWYKKy0KKy0jIGlmbmRlZiBFQ09OTkFCT1JURUQKKy0jICBkZWZpbmUgRUNPTk5BQk9SVEVEIDIwMTIKKy0jICBkZWZpbmUgR05VTElCX2RlZmluZWRfRUNPTk5BQk9SVEVEIDEKKy0jIGVuZGlmCistCisgIyBpZm5kZWYgRVNUQUxFCisgIyAgZGVmaW5lIEVTVEFMRSAgICAyMDA5CisgIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VTVEFMRSAxCitAQCAtMTczLDUgKzE2Myw1IEBACisgIyBlbmRpZgorIAorIAorLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfRVJSTk9fSCAqLworLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfRVJSTk9fSCAqLworKyNlbmRpZiAvKiBfR0xfRVJSTk9fSCAqLworKyNlbmRpZiAvKiBfR0xfRVJSTk9fSCAqLworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9lcnJvci5jIGxpYmljb252LTEuMTQvc3JjbGliL2Vycm9yLmMKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2Vycm9yLmMJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9lcnJvci5jCTIwMTItMDEtMDggMDI6MDc6NDAuMTM0NDg0NDQ4IC0wODAwCitAQCAtOTcsMTUgKzk3LDExIEBAIGV4dGVybiB2b2lkIF9fZXJyb3JfYXRfbGluZSAoaW50IHN0YXR1cywKKyAvKiBUaGUgZ251bGliIG92ZXJyaWRlIG9mIGZjbnRsIGlzIG5vdCBuZWVkZWQgaW4gdGhpcyBmaWxlLiAgKi8KKyAjIHVuZGVmIGZjbnRsCisgCistIyBpZiAhSEFWRV9ERUNMX1NUUkVSUk9SX1IKKysjIGlmICFIQVZFX0RFQ0xfU1RSRVJST1JfUiAmJiBTVFJFUlJPUl9SX0NIQVJfUAorICMgIGlmbmRlZiBIQVZFX0RFQ0xfU1RSRVJST1JfUgorICJ0aGlzIGNvbmZpZ3VyZS10aW1lIGRlY2xhcmF0aW9uIHRlc3Qgd2FzIG5vdCBydW4iCisgIyAgZW5kaWYKKy0jICBpZiBTVFJFUlJPUl9SX0NIQVJfUAorIGNoYXIgKnN0cmVycm9yX3IgKCk7CistIyAgZWxzZQorLWludCBzdHJlcnJvcl9yICgpOworLSMgIGVuZGlmCisgIyBlbmRpZgorIAorIC8qIFRoZSBjYWxsaW5nIHByb2dyYW0gc2hvdWxkIGRlZmluZSBwcm9ncmFtX25hbWUgYW5kIHNldCBpdCB0byB0aGUKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvZmNudGwuaW4uaCBsaWJpY29udi0xLjE0L3NyY2xpYi9mY250bC5pbi5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9mY250bC5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvZmNudGwuaW4uaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjE1NDQ4NDQ0OSAtMDgwMAorQEAgLTQwLDcgKzQwLDcgQEAKKyAjZWxzZQorIC8qIE5vcm1hbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24uICAqLworIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX0ZDTlRMX0gKKysjaWZuZGVmIF9HTF9GQ05UTF9ICisgCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIC8qIE9uIHNvbWUgc3lzdGVtcyBvdGhlciB0aGFuIGdsaWJjLCA8c3lzL3N0YXQuaD4gaXMgYSBwcmVyZXF1aXNpdGUgb2YKK0BAIC01NSw4ICs1NSw4IEBACisgLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworICNASU5DTFVERV9ORVhUQCBATkVYVF9GQ05UTF9IQAorIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX0ZDTlRMX0gKKy0jZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9GQ05UTF9ICisrI2lmbmRlZiBfR0xfRkNOVExfSAorKyNkZWZpbmUgX0dMX0ZDTlRMX0gKKyAKKyAjaWZuZGVmIF9fR0xJQkNfXyAvKiBBdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9uIG9uIGdsaWJjIHN5c3RlbXMuICAqLworICMgaW5jbHVkZSA8dW5pc3RkLmg+CitAQCAtMzIwLDYgKzMyMCw2IEBAIF9HTF9XQVJOX09OX1VTRSAob3BlbmF0LCAib3BlbmF0IGlzIG5vdAorICNlbmRpZgorIAorIAorLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfRkNOVExfSCAqLworLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfRkNOVExfSCAqLworKyNlbmRpZiAvKiBfR0xfRkNOVExfSCAqLworKyNlbmRpZiAvKiBfR0xfRkNOVExfSCAqLworICNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9pbnRwcm9wcy5oIGxpYmljb252LTEuMTQvc3JjbGliL2ludHByb3BzLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2ludHByb3BzLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9pbnRwcm9wcy5oCTIwMTItMDEtMDggMDI6MDc6NDAuMTc0NDg0NDUwIC0wODAwCitAQCAtMjIsMTMgKzIyLDE0IEBACisgCisgI2luY2x1ZGUgPGxpbWl0cy5oPgorIAorLS8qIFJldHVybiBhbiBpbnRlZ2VyIHZhbHVlLCBjb252ZXJ0ZWQgdG8gdGhlIHNhbWUgdHlwZSBhcyB0aGUgaW50ZWdlcgorLSAgIGV4cHJlc3Npb24gRSBhZnRlciBpbnRlZ2VyIHR5cGUgcHJvbW90aW9uLiAgViBpcyB0aGUgdW5jb252ZXJ0ZWQgdmFsdWUuICAqLworLSNkZWZpbmUgX0dMX0lOVF9DT05WRVJUKGUsIHYpICgwICogKGUpICsgKHYpKQorKy8qIFJldHVybiBhIGludGVnZXIgdmFsdWUsIGNvbnZlcnRlZCB0byB0aGUgc2FtZSB0eXBlIGFzIHRoZSBpbnRlZ2VyCisrICAgZXhwcmVzc2lvbiBFIGFmdGVyIGludGVnZXIgdHlwZSBwcm9tb3Rpb24uICBWIGlzIHRoZSB1bmNvbnZlcnRlZCB2YWx1ZS4KKysgICBFIHNob3VsZCBub3QgaGF2ZSBzaWRlIGVmZmVjdHMuICAqLworKyNkZWZpbmUgX0dMX0lOVF9DT05WRVJUKGUsIHYpICgoZSkgLSAoZSkgKyAodikpCisgCisgLyogQWN0IGxpa2UgX0dMX0lOVF9DT05WRVJUIChFLCAtVikgYnV0IHdvcmsgYXJvdW5kIGEgYnVnIGluIElSSVggNi41IGNjOyBzZWUKKyAgICA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1nbnVsaWIvMjAxMS0wNS9tc2cwMDQwNi5odG1sPi4gICovCistI2RlZmluZSBfR0xfSU5UX05FR0FURV9DT05WRVJUKGUsIHYpICgwICogKGUpIC0gKHYpKQorKyNkZWZpbmUgX0dMX0lOVF9ORUdBVEVfQ09OVkVSVChlLCB2KSAoKGUpIC0gKGUpIC0gKHYpKQorIAorIC8qIFRoZSBleHRyYSBjYXN0cyBpbiB0aGUgZm9sbG93aW5nIG1hY3JvcyB3b3JrIGFyb3VuZCBjb21waWxlciBidWdzLAorICAgIGUuZy4sIGluIENyYXkgQyA1LjAuMy4wLiAgKi8KK0BAIC01Miw3ICs1Myw3IEBACisgI2RlZmluZSBUWVBFX1NJR05FRCh0KSAoISAoKHQpIDAgPCAodCkgLTEpKQorIAorIC8qIFJldHVybiAxIGlmIHRoZSBpbnRlZ2VyIGV4cHJlc3Npb24gRSwgYWZ0ZXIgaW50ZWdlciBwcm9tb3Rpb24sIGhhcworLSAgIGEgc2lnbmVkIHR5cGUuICAqLworKyAgIGEgc2lnbmVkIHR5cGUuICBFIHNob3VsZCBub3QgaGF2ZSBzaWRlIGVmZmVjdHMuICAqLworICNkZWZpbmUgX0dMX0lOVF9TSUdORUQoZSkgKF9HTF9JTlRfTkVHQVRFX0NPTlZFUlQgKGUsIDEpIDwgMCkKKyAKKyAKK0BAIC0zMTAsMTAgKzMxMSwxMyBAQAorIC8qIFJldHVybiAxIGlmIHRoZSBleHByZXNzaW9uIEEgPG9wPiBCIHdvdWxkIG92ZXJmbG93LAorICAgIHdoZXJlIE9QX1JFU1VMVF9PVkVSRkxPVyAoQSwgQiwgTUlOLCBNQVgpIGRvZXMgdGhlIGFjdHVhbCB0ZXN0LAorICAgIGFzc3VtaW5nIE1JTiBhbmQgTUFYIGFyZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBmb3IgdGhlIHJlc3VsdCB0eXBlLgorLSAgIEFyZ3VtZW50cyBzaG91bGQgYmUgZnJlZSBvZiBzaWRlIGVmZmVjdHMuICAqLworKworKyAgIFRoaXMgbWFjcm8gYXNzdW1lcyB0aGF0IEEgfCBCIGlzIGEgdmFsaWQgaW50ZWdlciBpZiBib3RoIEEgYW5kIEIgYXJlLAorKyAgIHdoaWNoIGlzIHRydWUgb2YgYWxsIGtub3duIHByYWN0aWNhbCBob3N0cy4gIElmIHRoaXMgaXMgYSBwcm9ibGVtCisrICAgZm9yIHlvdSwgcGxlYXNlIGxldCB1cyBrbm93IGhvdyB0byBmaXggaXQgZm9yIHlvdXIgaG9zdC4gICovCisgI2RlZmluZSBfR0xfQklOQVJZX09QX09WRVJGTE9XKGEsIGIsIG9wX3Jlc3VsdF9vdmVyZmxvdykgICAgICAgIFwKKyAgIG9wX3Jlc3VsdF9vdmVyZmxvdyAoYSwgYiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICAgICBfR0xfSU5UX01JTklNVU0gKDAgKiAoYikgKyAoYSkpLCAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgICAgIF9HTF9JTlRfTUFYSU1VTSAoMCAqIChiKSArIChhKSkpCisrICAgICAgICAgICAgICAgICAgICAgIF9HTF9JTlRfTUlOSU1VTSAoKGEpIHwgKGIpKSwgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgX0dMX0lOVF9NQVhJTVVNICgoYSkgfCAoYikpKQorIAorICNlbmRpZiAvKiBfR0xfSU5UUFJPUFNfSCAqLworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9NYWtlZmlsZS5nbnVsaWIgbGliaWNvbnYtMS4xNC9zcmNsaWIvTWFrZWZpbGUuZ251bGliCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9NYWtlZmlsZS5nbnVsaWIJMjAxMi0wMS0wOCAwMjowNToxOC43NTQ0Nzc2MDYgLTA4MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9NYWtlZmlsZS5nbnVsaWIJMjAxMi0wMS0wOCAwMjowNzo0My4xMzg0ODQ1OTIgLTA4MDAKK0BAIC05LDcgKzksNyBAQAorICMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyAjCisgIyBHZW5lcmF0ZWQgYnkgZ251bGliLXRvb2wuCistIyBSZXByb2R1Y2UgYnk6IGdudWxpYi10b29sIC0taW1wb3J0IC0tZGlyPS4gLS1sb2NhbC1kaXI9Z251bGliLWxvY2FsIC0tbGliPWxpYmljcnQgLS1zb3VyY2UtYmFzZT1zcmNsaWIgLS1tNC1iYXNlPXNyY200IC0tZG9jLWJhc2U9ZG9jIC0tdGVzdHMtYmFzZT10ZXN0cyAtLWF1eC1kaXI9YnVpbGQtYXV4IC0tbWFrZWZpbGUtbmFtZT1NYWtlZmlsZS5nbnVsaWIgLS1uby1jb25kaXRpb25hbC1kZXBlbmRlbmNpZXMgLS1uby1saWJ0b29sIC0tbWFjcm8tcHJlZml4PWdsIC0tbm8tdmMtZmlsZXMgYmluYXJ5LWlvIGVycm9yIGdldHRleHQgZ2V0dGV4dC1oIGxpYmljb252LW1pc2MgbWJzdGF0ZSBtZW1tb3ZlIHByb2duYW1lIHJlbG9jYXRhYmxlLXByb2cgc2FmZS1yZWFkIHNpZ3BpcGUgc3RkaW8gc3RkbGliIHN0cmVycm9yIHVuaXN0ZCB1bml3aWR0aC93aWR0aCB1bmxvY2tlZC1pbyB4YWxsb2MKKysjIFJlcHJvZHVjZSBieTogZ251bGliLXRvb2wgLS1pbXBvcnQgLS1kaXI9LiAtLWxvY2FsLWRpcj1nbnVsaWItbG9jYWwgLS1saWI9bGliaWNydCAtLXNvdXJjZS1iYXNlPXNyY2xpYiAtLW00LWJhc2U9c3JjbTQgLS1kb2MtYmFzZT1kb2MgLS10ZXN0cy1iYXNlPXRlc3RzIC0tYXV4LWRpcj1idWlsZC1hdXggLS1tYWtlZmlsZS1uYW1lPU1ha2VmaWxlLmdudWxpYiAtLW5vLWxpYnRvb2wgLS1tYWNyby1wcmVmaXg9Z2wgLS1uby12Yy1maWxlcyBiaW5hcnktaW8gZXJyb3IgZ2V0dGV4dCBnZXR0ZXh0LWggbGliaWNvbnYtbWlzYyBtYnN0YXRlIG1lbW1vdmUgcHJvZ25hbWUgcmVsb2NhdGFibGUgcmVsb2NhdGFibGUtcHJvZyBzYWZlLXJlYWQgc2lncGlwZSBzdGRpbyBzdGRsaWIgc3RyZXJyb3IgdW5pc3RkIHVuaXdpZHRoL3dpZHRoIHVubG9ja2VkLWlvIHhhbGxvYworIAorIAorIE1PU1RMWUNMRUFORklMRVMgKz0gY29yZSAqLnN0YWNrZHVtcAorQEAgLTYwLDEyICs2MCw2MCBAQCBFWFRSQV9ESVNUICs9IGFyZWFkbGluay5oCisgCisgIyMgZW5kICAgZ251bGliIG1vZHVsZSBhcmVhZGxpbmsKKyAKKysjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGFyZy1ub25udWxsCisrCisrIyBUaGUgQlVJTFRfU09VUkNFUyBjcmVhdGVkIGJ5IHRoaXMgTWFrZWZpbGUgc25pcHBldCBhcmUgbm90IHVzZWQgdmlhICNpbmNsdWRlCisrIyBzdGF0ZW1lbnRzIGJ1dCB0aHJvdWdoIGRpcmVjdCBmaWxlIHJlZmVyZW5jZS4gVGhlcmVmb3JlIHRoaXMgc25pcHBldCBtdXN0IGJlCisrIyBwcmVzZW50IGluIGFsbCBNYWtlZmlsZS5hbSB0aGF0IG5lZWQgaXQuIFRoaXMgaXMgZW5zdXJlZCBieSB0aGUgYXBwbGljYWJpbGl0eQorKyMgJ2FsbCcgZGVmaW5lZCBhYm92ZS4KKysKKytCVUlMVF9TT1VSQ0VTICs9IGFyZy1ub25udWxsLmgKKysjIFRoZSBhcmctbm9ubnVsbC5oIHRoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIGdlbmVyYXRlZCAuaCBmaWxlcyBpcyB0aGUgc2FtZSBhcworKyMgYnVpbGQtYXV4L2FyZy1ub25udWxsLmgsIGV4Y2VwdCB0aGF0IGl0IGhhcyB0aGUgY29weXJpZ2h0IGhlYWRlciBjdXQgb2ZmLgorK2FyZy1ub25udWxsLmg6ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2FyZy1ub25udWxsLmgKKysJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKysJc2VkIC1uIC1lICcvR0xfQVJHX05PTk5VTEwvLCQkcCcgXAorKwkgIDwgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvYXJnLW5vbm51bGwuaCBcCisrCSAgPiAkQC10ICYmIFwKKysJbXYgJEAtdCAkQAorK01PU1RMWUNMRUFORklMRVMgKz0gYXJnLW5vbm51bGwuaCBhcmctbm9ubnVsbC5oLXQKKysKKytBUkdfTk9OTlVMTF9IPWFyZy1ub25udWxsLmgKKysKKytFWFRSQV9ESVNUICs9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2FyZy1ub25udWxsLmgKKysKKysjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGFyZy1ub25udWxsCisrCisgIyMgYmVnaW4gZ251bGliIG1vZHVsZSBiaW5hcnktaW8KKyAKKyBsaWJpY3J0X2FfU09VUkNFUyArPSBiaW5hcnktaW8uaAorIAorICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgYmluYXJ5LWlvCisgCisrIyMgYmVnaW4gZ251bGliIG1vZHVsZSBjKytkZWZzCisrCisrIyBUaGUgQlVJTFRfU09VUkNFUyBjcmVhdGVkIGJ5IHRoaXMgTWFrZWZpbGUgc25pcHBldCBhcmUgbm90IHVzZWQgdmlhICNpbmNsdWRlCisrIyBzdGF0ZW1lbnRzIGJ1dCB0aHJvdWdoIGRpcmVjdCBmaWxlIHJlZmVyZW5jZS4gVGhlcmVmb3JlIHRoaXMgc25pcHBldCBtdXN0IGJlCisrIyBwcmVzZW50IGluIGFsbCBNYWtlZmlsZS5hbSB0aGF0IG5lZWQgaXQuIFRoaXMgaXMgZW5zdXJlZCBieSB0aGUgYXBwbGljYWJpbGl0eQorKyMgJ2FsbCcgZGVmaW5lZCBhYm92ZS4KKysKKytCVUlMVF9TT1VSQ0VTICs9IGMrK2RlZnMuaAorKyMgVGhlIGMrK2RlZnMuaCB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byBnZW5lcmF0ZWQgLmggZmlsZXMgaXMgdGhlIHNhbWUgYXMKKysjIGJ1aWxkLWF1eC9jKytkZWZzLmgsIGV4Y2VwdCB0aGF0IGl0IGhhcyB0aGUgY29weXJpZ2h0IGhlYWRlciBjdXQgb2ZmLgorK2MrK2RlZnMuaDogJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvYysrZGVmcy5oCisrCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisrCXNlZCAtbiAtZSAnL19HTF9DWFhERUZTLywkJHAnIFwKKysJICA8ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2MrK2RlZnMuaCBcCisrCSAgPiAkQC10ICYmIFwKKysJbXYgJEAtdCAkQAorK01PU1RMWUNMRUFORklMRVMgKz0gYysrZGVmcy5oIGMrK2RlZnMuaC10CisrCisrQ1hYREVGU19IPWMrK2RlZnMuaAorKworK0VYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvYysrZGVmcy5oCisrCisrIyMgZW5kICAgZ251bGliIG1vZHVsZSBjKytkZWZzCisrCisgIyMgYmVnaW4gZ251bGliIG1vZHVsZSBjYW5vbmljYWxpemUtbGdwbAorIAorIAorQEAgLTEwMCw4ICsxNDgsNyBAQCBpZiBHTF9HRU5FUkFURV9FUlJOT19ICisgZXJybm8uaDogZXJybm8uaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKKy0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisrCSAgc2VkIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ05FWFRfRVJSTk9fSCcnQHwkKE5FWFRfRVJSTk9fSCl8ZycgXAorQEAgLTE0MiwxNSArMTg5LDE0IEBAIEJVSUxUX1NPVVJDRVMgKz0gZmNudGwuaAorIGZjbnRsLmg6IGZjbnRsLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCistCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCistCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorKwkgIHNlZCAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorIAkgICAgICAtZSAnc3xAJydORVhUX0ZDTlRMX0gnJ0B8JChORVhUX0ZDTlRMX0gpfGcnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZDTlRMJydALyQoR05VTElCX0ZDTlRMKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9OT05CTE9DS0lORycnQC8kKEdOVUxJQl9OT05CTE9DS0lORykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfT1BFTicnQC8kKEdOVUxJQl9PUEVOKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9PUEVOQVQnJ0AvJChHTlVMSUJfT1BFTkFUKS9nJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GQ05UTCcnQHwkKEdOVUxJQl9GQ05UTCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTk9OQkxPQ0tJTkcnJ0B8JChHTlVMSUJfTk9OQkxPQ0tJTkcpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX09QRU4nJ0B8JChHTlVMSUJfT1BFTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfT1BFTkFUJydAfCQoR05VTElCX09QRU5BVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX0ZDTlRMJydAfCQoSEFWRV9GQ05UTCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX09QRU5BVCcnQHwkKEhBVkVfT1BFTkFUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRkNOVEwnJ0B8JChSRVBMQUNFX0ZDTlRMKXxnJyBcCitAQCAtMjk3LDcgKzM0Myw3IEBAIEVYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvY28KKyAjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHJlbG9jYXRhYmxlLXByb2ctd3JhcHBlcgorIAorIAorLUVYVFJBX0RJU1QgKz0gYWxsb2NhdG9yLmMgYWxsb2NhdG9yLmggYXJlYWRsaW5rLmMgYXJlYWRsaW5rLmggYy1jdHlwZS5jIGMtY3R5cGUuaCBjYW5vbmljYWxpemUtbGdwbC5jIGNhcmVhZGxpbmthdC5jIGNhcmVhZGxpbmthdC5oIG1hbGxvY2EuYyBtYWxsb2NhLmggcHJvZ25hbWUuYyBwcm9nbmFtZS5oIHByb2dyZWxvYy5jIHJlYWRsaW5rLmMgcmVsb2NhdGFibGUuYyByZWxvY2F0YWJsZS5oIHJlbG9jd3JhcHBlci5jIHNldGVudi5jCisrRVhUUkFfRElTVCArPSBhbGxvY2F0b3IuYyBhbGxvY2F0b3IuaCBhcmVhZGxpbmsuYyBhcmVhZGxpbmsuaCBjLWN0eXBlLmMgYy1jdHlwZS5oIGNhbm9uaWNhbGl6ZS1sZ3BsLmMgY2FyZWFkbGlua2F0LmMgY2FyZWFkbGlua2F0LmggbWFsbG9jYS5jIG1hbGxvY2EuaCBwcm9nbmFtZS5jIHByb2duYW1lLmggcHJvZ3JlbG9jLmMgcmVhZGxpbmsuYyByZWxvY2F0YWJsZS5jIHJlbG9jYXRhYmxlLmggcmVsb2N3cmFwcGVyLmMgc2V0ZW52LmMgc3RyZXJyb3IuYworIAorIEVYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvaW5zdGFsbC1yZWxvYworIAorQEAgLTMwNSw5ICszNTEsMTAgQEAgRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9pbgorIAorICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc2FmZS1yZWFkCisgCistbGliaWNydF9hX1NPVVJDRVMgKz0gc2FmZS1yZWFkLmMKKyAKKy1FWFRSQV9ESVNUICs9IHNhZmUtcmVhZC5oCisrRVhUUkFfRElTVCArPSBzYWZlLXJlYWQuYyBzYWZlLXJlYWQuaAorKworK0VYVFJBX2xpYmljcnRfYV9TT1VSQ0VTICs9IHNhZmUtcmVhZC5jCisgCisgIyMgZW5kICAgZ251bGliIG1vZHVsZSBzYWZlLXJlYWQKKyAKK0BAIC0zMjAsMjQgKzM2NywyMCBAQCBCVUlMVF9TT1VSQ0VTICs9IHNpZ25hbC5oCisgc2lnbmFsLmg6IHNpZ25hbC5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19IKSAkKEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKKyAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKyAJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJyAmJiBcCistCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCistCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorKwkgIHNlZCAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorIAkgICAgICAtZSAnc3xAJydORVhUX1NJR05BTF9IJydAfCQoTkVYVF9TSUdOQUxfSCl8ZycgXAorLQkgICAgICAtZSAnc3xAJydHTlVMSUJfUFRIUkVBRF9TSUdNQVNLJydAfCQoR05VTElCX1BUSFJFQURfU0lHTUFTSyl8ZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU0lHTkFMX0hfU0lHUElQRScnQC8kKEdOVUxJQl9TSUdOQUxfSF9TSUdQSVBFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TSUdQUk9DTUFTSycnQC8kKEdOVUxJQl9TSUdQUk9DTUFTSykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU0lHQUNUSU9OJydALyQoR05VTElCX1NJR0FDVElPTikvZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU0lHTkFMX0hfU0lHUElQRScnQHwkKEdOVUxJQl9TSUdOQUxfSF9TSUdQSVBFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TSUdQUk9DTUFTSycnQHwkKEdOVUxJQl9TSUdQUk9DTUFTSyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU0lHQUNUSU9OJydAfCQoR05VTElCX1NJR0FDVElPTil8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HJydAfCQoSEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lORyl8ZycgXAorLQkgICAgICAtZSAnc3xAJydIQVZFX1BUSFJFQURfU0lHTUFTSycnQHwkKEhBVkVfUFRIUkVBRF9TSUdNQVNLKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfU0lHU0VUX1QnJ0B8JChIQVZFX1NJR1NFVF9UKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfU0lHSU5GT19UJydAfCQoSEFWRV9TSUdJTkZPX1QpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9TSUdBQ1RJT04nJ0B8JChIQVZFX1NJR0FDVElPTil8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX1NUUlVDVF9TSUdBQ1RJT05fU0FfU0lHQUNUSU9OJydAfCQoSEFWRV9TVFJVQ1RfU0lHQUNUSU9OX1NBX1NJR0FDVElPTil8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX1RZUEVfVk9MQVRJTEVfU0lHX0FUT01JQ19UJydAfCQoSEFWRV9UWVBFX1ZPTEFUSUxFX1NJR19BVE9NSUNfVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX1NJR0hBTkRMRVJfVCcnQHwkKEhBVkVfU0lHSEFORExFUl9UKXxnJyBcCistCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfUFRIUkVBRF9TSUdNQVNLJydAfCQoUkVQTEFDRV9QVEhSRUFEX1NJR01BU0spfGcnIFwKKyAJICAgICAgLWUgJy9kZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBML3IgJChDWFhERUZTX0gpJyBcCisgCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwvciAkKEFSR19OT05OVUxMX0gpJyBcCisgCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UvciAkKFdBUk5fT05fVVNFX0gpJyBcCitAQCAtMzY4LDg3ICs0MTEsNiBAQCBFWFRSQV9saWJpY3J0X2FfU09VUkNFUyArPSBzaWdwcm9jbWFzay5jCisgCisgIyMgZW5kICAgZ251bGliIG1vZHVsZSBzaWdwcm9jbWFzaworIAorLSMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc25pcHBldC9fTm9yZXR1cm4KKy0KKy0jIEJlY2F1c2UgdGhpcyBNYWtlZmlsZSBzbmlwcGV0IGRlZmluZXMgYSB2YXJpYWJsZSB1c2VkIGJ5IG90aGVyCistIyBnbnVsaWIgTWFrZWZpbGUgc25pcHBldHMsIGl0IG11c3QgYmUgcHJlc2VudCBpbiBhbGwgTWFrZWZpbGUuYW0gdGhhdAorLSMgbmVlZCBpdC4gVGhpcyBpcyBlbnN1cmVkIGJ5IHRoZSBhcHBsaWNhYmlsaXR5ICdhbGwnIGRlZmluZWQgYWJvdmUuCistCistX05PUkVUVVJOX0g9JCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC9fTm9yZXR1cm4uaAorLQorLUVYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC9fTm9yZXR1cm4uaAorLQorLSMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc25pcHBldC9fTm9yZXR1cm4KKy0KKy0jIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHNuaXBwZXQvYXJnLW5vbm51bGwKKy0KKy0jIFRoZSBCVUlMVF9TT1VSQ0VTIGNyZWF0ZWQgYnkgdGhpcyBNYWtlZmlsZSBzbmlwcGV0IGFyZSBub3QgdXNlZCB2aWEgI2luY2x1ZGUKKy0jIHN0YXRlbWVudHMgYnV0IHRocm91Z2ggZGlyZWN0IGZpbGUgcmVmZXJlbmNlLiBUaGVyZWZvcmUgdGhpcyBzbmlwcGV0IG11c3QgYmUKKy0jIHByZXNlbnQgaW4gYWxsIE1ha2VmaWxlLmFtIHRoYXQgbmVlZCBpdC4gVGhpcyBpcyBlbnN1cmVkIGJ5IHRoZSBhcHBsaWNhYmlsaXR5CistIyAnYWxsJyBkZWZpbmVkIGFib3ZlLgorLQorLUJVSUxUX1NPVVJDRVMgKz0gYXJnLW5vbm51bGwuaAorLSMgVGhlIGFyZy1ub25udWxsLmggdGhhdCBnZXRzIGluc2VydGVkIGludG8gZ2VuZXJhdGVkIC5oIGZpbGVzIGlzIHRoZSBzYW1lIGFzCistIyBidWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oLCBleGNlcHQgdGhhdCBpdCBoYXMgdGhlIGNvcHlyaWdodCBoZWFkZXIgY3V0CistIyBvZmYuCistYXJnLW5vbm51bGwuaDogJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oCistCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCistCXNlZCAtbiAtZSAnL0dMX0FSR19OT05OVUxMLywkJHAnIFwKKy0JICA8ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51bGwuaCBcCistCSAgPiAkQC10ICYmIFwKKy0JbXYgJEAtdCAkQAorLU1PU1RMWUNMRUFORklMRVMgKz0gYXJnLW5vbm51bGwuaCBhcmctbm9ubnVsbC5oLXQKKy0KKy1BUkdfTk9OTlVMTF9IPWFyZy1ub25udWxsLmgKKy0KKy1FWFRSQV9ESVNUICs9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51bGwuaAorLQorLSMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc25pcHBldC9hcmctbm9ubnVsbAorLQorLSMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc25pcHBldC9jKytkZWZzCistCistIyBUaGUgQlVJTFRfU09VUkNFUyBjcmVhdGVkIGJ5IHRoaXMgTWFrZWZpbGUgc25pcHBldCBhcmUgbm90IHVzZWQgdmlhICNpbmNsdWRlCistIyBzdGF0ZW1lbnRzIGJ1dCB0aHJvdWdoIGRpcmVjdCBmaWxlIHJlZmVyZW5jZS4gVGhlcmVmb3JlIHRoaXMgc25pcHBldCBtdXN0IGJlCistIyBwcmVzZW50IGluIGFsbCBNYWtlZmlsZS5hbSB0aGF0IG5lZWQgaXQuIFRoaXMgaXMgZW5zdXJlZCBieSB0aGUgYXBwbGljYWJpbGl0eQorLSMgJ2FsbCcgZGVmaW5lZCBhYm92ZS4KKy0KKy1CVUlMVF9TT1VSQ0VTICs9IGMrK2RlZnMuaAorLSMgVGhlIGMrK2RlZnMuaCB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byBnZW5lcmF0ZWQgLmggZmlsZXMgaXMgdGhlIHNhbWUgYXMKKy0jIGJ1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaCwgZXhjZXB0IHRoYXQgaXQgaGFzIHRoZSBjb3B5cmlnaHQgaGVhZGVyIGN1dCBvZmYuCistYysrZGVmcy5oOiAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaAorLQkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorLQlzZWQgLW4gLWUgJy9fR0xfQ1hYREVGUy8sJCRwJyBcCistCSAgPCAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaCBcCistCSAgPiAkQC10ICYmIFwKKy0JbXYgJEAtdCAkQAorLU1PU1RMWUNMRUFORklMRVMgKz0gYysrZGVmcy5oIGMrK2RlZnMuaC10CistCistQ1hYREVGU19IPWMrK2RlZnMuaAorLQorLUVYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmgKKy0KKy0jIyBlbmQgICBnbnVsaWIgbW9kdWxlIHNuaXBwZXQvYysrZGVmcworLQorLSMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc25pcHBldC93YXJuLW9uLXVzZQorLQorLUJVSUxUX1NPVVJDRVMgKz0gd2Fybi1vbi11c2UuaAorLSMgVGhlIHdhcm4tb24tdXNlLmggdGhhdCBnZXRzIGluc2VydGVkIGludG8gZ2VuZXJhdGVkIC5oIGZpbGVzIGlzIHRoZSBzYW1lIGFzCistIyBidWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oLCBleGNlcHQgdGhhdCBpdCBoYXMgdGhlIGNvcHlyaWdodCBoZWFkZXIgY3V0CistIyBvZmYuCistd2Fybi1vbi11c2UuaDogJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oCistCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCistCXNlZCAtbiAtZSAnL14uaWZuZGVmLywkJHAnIFwKKy0JICA8ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvd2Fybi1vbi11c2UuaCBcCistCSAgPiAkQC10ICYmIFwKKy0JbXYgJEAtdCAkQAorLU1PU1RMWUNMRUFORklMRVMgKz0gd2Fybi1vbi11c2UuaCB3YXJuLW9uLXVzZS5oLXQKKy0KKy1XQVJOX09OX1VTRV9IPXdhcm4tb24tdXNlLmgKKy0KKy1FWFRSQV9ESVNUICs9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvd2Fybi1vbi11c2UuaAorLQorLSMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc25pcHBldC93YXJuLW9uLXVzZQorLQorICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc3RhdAorIAorIAorQEAgLTQ5MSw4ICs0NTMsNyBAQCBpZiBHTF9HRU5FUkFURV9TVERERUZfSAorIHN0ZGRlZi5oOiBzdGRkZWYuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKKy0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisrCSAgc2VkIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ05FWFRfU1REREVGX0gnJ0B8JChORVhUX1NURERFRl9IKXxnJyBcCitAQCAtNTIxLDggKzQ4Miw3IEBAIGlmIEdMX0dFTkVSQVRFX1NURElOVF9ICisgc3RkaW50Lmg6IHN0ZGludC5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisgCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisgCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKy0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKy0JICAgICAgLWUgJ3MvQCcnSEFWRV9TVERJTlRfSCcnQC8kKEhBVkVfU1RESU5UX0gpL2cnIFwKKysJICBzZWQgLWUgJ3MvQCcnSEFWRV9TVERJTlRfSCcnQC8kKEhBVkVfU1RESU5UX0gpL2cnIFwKKyAJICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKK0BAIC01NzAsNjMgKzUzMCw2MiBAQCBCVUlMVF9TT1VSQ0VTICs9IHN0ZGlvLmgKKyBzdGRpby5oOiBzdGRpby5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19IKSAkKEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKKyAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKyAJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJyAmJiBcCistCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCistCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorKwkgIHNlZCAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorIAkgICAgICAtZSAnc3xAJydORVhUX1NURElPX0gnJ0B8JChORVhUX1NURElPX0gpfGcnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0RQUklOVEYnJ0AvJChHTlVMSUJfRFBSSU5URikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRkNMT1NFJydALyQoR05VTElCX0ZDTE9TRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRkZMVVNIJydALyQoR05VTElCX0ZGTFVTSCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRkdFVEMnJ0AvJChHTlVMSUJfRkdFVEMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZHRVRTJydALyQoR05VTElCX0ZHRVRTKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GT1BFTicnQC8kKEdOVUxJQl9GT1BFTikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlBSSU5URicnQC8kKEdOVUxJQl9GUFJJTlRGKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GUFJJTlRGX1BPU0lYJydALyQoR05VTElCX0ZQUklOVEZfUE9TSVgpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZQVVJHRScnQC8kKEdOVUxJQl9GUFVSR0UpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZQVVRDJydALyQoR05VTElCX0ZQVVRDKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GUFVUUycnQC8kKEdOVUxJQl9GUFVUUykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlJFQUQnJ0AvJChHTlVMSUJfRlJFQUQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZSRU9QRU4nJ0AvJChHTlVMSUJfRlJFT1BFTikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlNDQU5GJydALyQoR05VTElCX0ZTQ0FORikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlNFRUsnJ0AvJChHTlVMSUJfRlNFRUspL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZTRUVLTycnQC8kKEdOVUxJQl9GU0VFS08pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZURUxMJydALyQoR05VTElCX0ZURUxMKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GVEVMTE8nJ0AvJChHTlVMSUJfRlRFTExPKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GV1JJVEUnJ0AvJChHTlVMSUJfRldSSVRFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRDJydALyQoR05VTElCX0dFVEMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVENIQVInJ0AvJChHTlVMSUJfR0VUQ0hBUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUREVMSU0nJ0AvJChHTlVMSUJfR0VUREVMSU0pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVExJTkUnJ0AvJChHTlVMSUJfR0VUTElORSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUUycnQC8kKEdOVUxJQl9HRVRTKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9PQlNUQUNLX1BSSU5URicnQC8kKEdOVUxJQl9PQlNUQUNLX1BSSU5URikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVgnJ0AvJChHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVgpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BFUlJPUicnQC8kKEdOVUxJQl9QRVJST1IpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BPUEVOJydALyQoR05VTElCX1BPUEVOKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QUklOVEYnJ0AvJChHTlVMSUJfUFJJTlRGKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QUklOVEZfUE9TSVgnJ0AvJChHTlVMSUJfUFJJTlRGX1BPU0lYKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QVVRDJydALyQoR05VTElCX1BVVEMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BVVENIQVInJ0AvJChHTlVMSUJfUFVUQ0hBUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUFVUUycnQC8kKEdOVUxJQl9QVVRTKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRU1PVkUnJ0AvJChHTlVMSUJfUkVNT1ZFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRU5BTUUnJ0AvJChHTlVMSUJfUkVOQU1FKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRU5BTUVBVCcnQC8kKEdOVUxJQl9SRU5BTUVBVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU0NBTkYnJ0AvJChHTlVMSUJfU0NBTkYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NOUFJJTlRGJydALyQoR05VTElCX1NOUFJJTlRGKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TUFJJTlRGX1BPU0lYJydALyQoR05VTElCX1NQUklOVEZfUE9TSVgpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkcnJ0AvJChHTlVMSUJfU1RESU9fSF9OT05CTE9DS0lORykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RESU9fSF9TSUdQSVBFJydALyQoR05VTElCX1NURElPX0hfU0lHUElQRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVE1QRklMRScnQC8kKEdOVUxJQl9UTVBGSUxFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WQVNQUklOVEYnJ0AvJChHTlVMSUJfVkFTUFJJTlRGKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WRFBSSU5URicnQC8kKEdOVUxJQl9WRFBSSU5URikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVkZQUklOVEYnJ0AvJChHTlVMSUJfVkZQUklOVEYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1ZGUFJJTlRGX1BPU0lYJydALyQoR05VTElCX1ZGUFJJTlRGX1BPU0lYKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WRlNDQU5GJydALyQoR05VTElCX1ZGU0NBTkYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1ZTQ0FORicnQC8kKEdOVUxJQl9WU0NBTkYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1ZQUklOVEYnJ0AvJChHTlVMSUJfVlBSSU5URikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVlBSSU5URl9QT1NJWCcnQC8kKEdOVUxJQl9WUFJJTlRGX1BPU0lYKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WU05QUklOVEYnJ0AvJChHTlVMSUJfVlNOUFJJTlRGKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WU1BSSU5URl9QT1NJWCcnQC8kKEdOVUxJQl9WU1BSSU5URl9QT1NJWCkvZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRFBSSU5URicnQHwkKEdOVUxJQl9EUFJJTlRGKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GQ0xPU0UnJ0B8JChHTlVMSUJfRkNMT1NFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GRkxVU0gnJ0B8JChHTlVMSUJfRkZMVVNIKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GR0VUQycnQHwkKEdOVUxJQl9GR0VUQyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRkdFVFMnJ0B8JChHTlVMSUJfRkdFVFMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZPUEVOJydAfCQoR05VTElCX0ZPUEVOKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GUFJJTlRGJydAfCQoR05VTElCX0ZQUklOVEYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZQUklOVEZfUE9TSVgnJ0B8JChHTlVMSUJfRlBSSU5URl9QT1NJWCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlBVUkdFJydAfCQoR05VTElCX0ZQVVJHRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlBVVEMnJ0B8JChHTlVMSUJfRlBVVEMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZQVVRTJydAfCQoR05VTElCX0ZQVVRTKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GUkVBRCcnQHwkKEdOVUxJQl9GUkVBRCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlJFT1BFTicnQHwkKEdOVUxJQl9GUkVPUEVOKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GU0NBTkYnJ0B8JChHTlVMSUJfRlNDQU5GKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GU0VFSycnQHwkKEdOVUxJQl9GU0VFSyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlNFRUtPJydAfCQoR05VTElCX0ZTRUVLTyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlRFTEwnJ0B8JChHTlVMSUJfRlRFTEwpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZURUxMTycnQHwkKEdOVUxJQl9GVEVMTE8pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZXUklURScnQHwkKEdOVUxJQl9GV1JJVEUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVEMnJ0B8JChHTlVMSUJfR0VUQyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUQ0hBUicnQHwkKEdOVUxJQl9HRVRDSEFSKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRERUxJTScnQHwkKEdOVUxJQl9HRVRERUxJTSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUTElORScnQHwkKEdOVUxJQl9HRVRMSU5FKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRTJydAfCQoR05VTElCX0dFVFMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX09CU1RBQ0tfUFJJTlRGJydAfCQoR05VTElCX09CU1RBQ0tfUFJJTlRGKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWCcnQHwkKEdOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUEVSUk9SJydAfCQoR05VTElCX1BFUlJPUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUE9QRU4nJ0B8JChHTlVMSUJfUE9QRU4pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1BSSU5URicnQHwkKEdOVUxJQl9QUklOVEYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1BSSU5URl9QT1NJWCcnQHwkKEdOVUxJQl9QUklOVEZfUE9TSVgpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1BVVEMnJ0B8JChHTlVMSUJfUFVUQyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUFVUQ0hBUicnQHwkKEdOVUxJQl9QVVRDSEFSKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QVVRTJydAfCQoR05VTElCX1BVVFMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1JFTU9WRScnQHwkKEdOVUxJQl9SRU1PVkUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1JFTkFNRScnQHwkKEdOVUxJQl9SRU5BTUUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1JFTkFNRUFUJydAfCQoR05VTElCX1JFTkFNRUFUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TQ0FORicnQHwkKEdOVUxJQl9TQ0FORil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU05QUklOVEYnJ0B8JChHTlVMSUJfU05QUklOVEYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NQUklOVEZfUE9TSVgnJ0B8JChHTlVMSUJfU1BSSU5URl9QT1NJWCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RESU9fSF9OT05CTE9DS0lORycnQHwkKEdOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVERJT19IX1NJR1BJUEUnJ0B8JChHTlVMSUJfU1RESU9fSF9TSUdQSVBFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9UTVBGSUxFJydAfCQoR05VTElCX1RNUEZJTEUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1ZBU1BSSU5URicnQHwkKEdOVUxJQl9WQVNQUklOVEYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1ZEUFJJTlRGJydAfCQoR05VTElCX1ZEUFJJTlRGKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9WRlBSSU5URicnQHwkKEdOVUxJQl9WRlBSSU5URil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVkZQUklOVEZfUE9TSVgnJ0B8JChHTlVMSUJfVkZQUklOVEZfUE9TSVgpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1ZGU0NBTkYnJ0B8JChHTlVMSUJfVkZTQ0FORil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVlNDQU5GJydAfCQoR05VTElCX1ZTQ0FORil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVlBSSU5URicnQHwkKEdOVUxJQl9WUFJJTlRGKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9WUFJJTlRGX1BPU0lYJydAfCQoR05VTElCX1ZQUklOVEZfUE9TSVgpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1ZTTlBSSU5URicnQHwkKEdOVUxJQl9WU05QUklOVEYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1ZTUFJJTlRGX1BPU0lYJydAfCQoR05VTElCX1ZTUFJJTlRGX1BPU0lYKXxnJyBcCisgCSAgICAgIDwgJChzcmNkaXIpL3N0ZGlvLmluLmggfCBcCisgCSAgc2VkIC1lICdzfEAnJ0hBVkVfREVDTF9GUFVSR0UnJ0B8JChIQVZFX0RFQ0xfRlBVUkdFKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9GU0VFS08nJ0B8JChIQVZFX0RFQ0xfRlNFRUtPKXxnJyBcCitAQCAtNjkxLDQzICs2NTAsNDEgQEAgQlVJTFRfU09VUkNFUyArPSBzdGRsaWIuaAorIAorICMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8c3RkbGliLmg+IHdoZW4gdGhlIHN5c3RlbQorICMgZG9lc24ndCBoYXZlIG9uZSB0aGF0IHdvcmtzIHdpdGggdGhlIGdpdmVuIGNvbXBpbGVyLgorLXN0ZGxpYi5oOiBzdGRsaWIuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgXAorLSAgJChfTk9SRVRVUk5fSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCisrc3RkbGliLmg6IHN0ZGxpYi5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19IKSAkKEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKKyAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKyAJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJyAmJiBcCistCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCistCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorKwkgIHNlZCAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorIAkgICAgICAtZSAnc3xAJydORVhUX1NURExJQl9IJydAfCQoTkVYVF9TVERMSUJfSCl8ZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfX0VYSVQnJ0AvJChHTlVMSUJfX0VYSVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0FUT0xMJydALyQoR05VTElCX0FUT0xMKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9DQUxMT0NfUE9TSVgnJ0AvJChHTlVMSUJfQ0FMTE9DX1BPU0lYKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9DQU5PTklDQUxJWkVfRklMRV9OQU1FJydALyQoR05VTElCX0NBTk9OSUNBTElaRV9GSUxFX05BTUUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVExPQURBVkcnJ0AvJChHTlVMSUJfR0VUTE9BREFWRykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUU1VCT1BUJydALyQoR05VTElCX0dFVFNVQk9QVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR1JBTlRQVCcnQC8kKEdOVUxJQl9HUkFOVFBUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQUxMT0NfUE9TSVgnJ0AvJChHTlVMSUJfTUFMTE9DX1BPU0lYKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlRPV0MnJ0AvJChHTlVMSUJfTUJUT1dDKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS0RURU1QJydALyQoR05VTElCX01LRFRFTVApL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LT1NURU1QJydALyQoR05VTElCX01LT1NURU1QKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS09TVEVNUFMnJ0AvJChHTlVMSUJfTUtPU1RFTVBTKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS1NURU1QJydALyQoR05VTElCX01LU1RFTVApL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LU1RFTVBTJydALyQoR05VTElCX01LU1RFTVBTKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QVFNOQU1FJydALyQoR05VTElCX1BUU05BTUUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BVVEVOVicnQC8kKEdOVUxJQl9QVVRFTlYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JBTkRPTV9SJydALyQoR05VTElCX1JBTkRPTV9SKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRUFMTE9DX1BPU0lYJydALyQoR05VTElCX1JFQUxMT0NfUE9TSVgpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JFQUxQQVRIJydALyQoR05VTElCX1JFQUxQQVRIKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SUE1BVENIJydALyQoR05VTElCX1JQTUFUQ0gpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NFVEVOVicnQC8kKEdOVUxJQl9TRVRFTlYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlRPRCcnQC8kKEdOVUxJQl9TVFJUT0QpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlRPTEwnJ0AvJChHTlVMSUJfU1RSVE9MTCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSVE9VTEwnJ0AvJChHTlVMSUJfU1RSVE9VTEwpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NZU1RFTV9QT1NJWCcnQC8kKEdOVUxJQl9TWVNURU1fUE9TSVgpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1VOTE9DS1BUJydALyQoR05VTElCX1VOTE9DS1BUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9VTlNFVEVOVicnQC8kKEdOVUxJQl9VTlNFVEVOVikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfV0NUT01CJydALyQoR05VTElCX1dDVE9NQikvZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfX0VYSVQnJ0B8JChHTlVMSUJfX0VYSVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0FUT0xMJydAfCQoR05VTElCX0FUT0xMKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9DQUxMT0NfUE9TSVgnJ0B8JChHTlVMSUJfQ0FMTE9DX1BPU0lYKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9DQU5PTklDQUxJWkVfRklMRV9OQU1FJydAfCQoR05VTElCX0NBTk9OSUNBTElaRV9GSUxFX05BTUUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVExPQURBVkcnJ0B8JChHTlVMSUJfR0VUTE9BREFWRyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUU1VCT1BUJydAfCQoR05VTElCX0dFVFNVQk9QVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR1JBTlRQVCcnQHwkKEdOVUxJQl9HUkFOVFBUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQUxMT0NfUE9TSVgnJ0B8JChHTlVMSUJfTUFMTE9DX1BPU0lYKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlRPV0MnJ0B8JChHTlVMSUJfTUJUT1dDKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NS0RURU1QJydAfCQoR05VTElCX01LRFRFTVApfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01LT1NURU1QJydAfCQoR05VTElCX01LT1NURU1QKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NS09TVEVNUFMnJ0B8JChHTlVMSUJfTUtPU1RFTVBTKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NS1NURU1QJydAfCQoR05VTElCX01LU1RFTVApfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01LU1RFTVBTJydAfCQoR05VTElCX01LU1RFTVBTKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QVFNOQU1FJydAfCQoR05VTElCX1BUU05BTUUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1BVVEVOVicnQHwkKEdOVUxJQl9QVVRFTlYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1JBTkRPTV9SJydAfCQoR05VTElCX1JBTkRPTV9SKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SRUFMTE9DX1BPU0lYJydAfCQoR05VTElCX1JFQUxMT0NfUE9TSVgpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1JFQUxQQVRIJydAfCQoR05VTElCX1JFQUxQQVRIKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SUE1BVENIJydAfCQoR05VTElCX1JQTUFUQ0gpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NFVEVOVicnQHwkKEdOVUxJQl9TRVRFTlYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUlRPRCcnQHwkKEdOVUxJQl9TVFJUT0QpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUlRPTEwnJ0B8JChHTlVMSUJfU1RSVE9MTCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSVE9VTEwnJ0B8JChHTlVMSUJfU1RSVE9VTEwpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NZU1RFTV9QT1NJWCcnQHwkKEdOVUxJQl9TWVNURU1fUE9TSVgpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1VOTE9DS1BUJydAfCQoR05VTElCX1VOTE9DS1BUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9VTlNFVEVOVicnQHwkKEdOVUxJQl9VTlNFVEVOVil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfV0NUT01CJydAfCQoR05VTElCX1dDVE9NQil8ZycgXAorIAkgICAgICA8ICQoc3JjZGlyKS9zdGRsaWIuaW4uaCB8IFwKKyAJICBzZWQgLWUgJ3N8QCcnSEFWRV9fRVhJVCcnQHwkKEhBVkVfX0VYSVQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9BVE9MTCcnQHwkKEhBVkVfQVRPTEwpfGcnIFwKK0BAIC03NjYsNyArNzIzLDYgQEAgc3RkbGliLmg6IHN0ZGxpYi5pbi5oICQodG9wX2J1aWxkZGlyKS9jbworIAkgICAgICAtZSAnc3xAJydSRVBMQUNFX1VOU0VURU5WJydAfCQoUkVQTEFDRV9VTlNFVEVOVil8ZycgXAorIAkgICAgICAtZSAnc3xAJydSRVBMQUNFX1dDVE9NQicnQHwkKFJFUExBQ0VfV0NUT01CKXxnJyBcCisgCSAgICAgIC1lICcvZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTC9yICQoQ1hYREVGU19IKScgXAorLQkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX05vcmV0dXJuL3IgJChfTk9SRVRVUk5fSCknIFwKKyAJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTC9yICQoQVJHX05PTk5VTExfSCknIFwKKyAJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRS9yICQoV0FSTl9PTl9VU0VfSCknOyBcCisgCX0gPiAkQC10ICYmIFwKK0BAIC03OTMsMTUgKzc0OSw2IEBAIEVYVFJBX2xpYmljcnRfYV9TT1VSQ0VTICs9IHN0cmVycm9yLmMKKyAKKyAjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHN0cmVycm9yCisgCistIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzdHJlcnJvci1vdmVycmlkZQorLQorLQorLUVYVFJBX0RJU1QgKz0gc3RyZXJyb3Itb3ZlcnJpZGUuYyBzdHJlcnJvci1vdmVycmlkZS5oCistCistRVhUUkFfbGliaWNydF9hX1NPVVJDRVMgKz0gc3RyZXJyb3Itb3ZlcnJpZGUuYworLQorLSMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc3RyZXJyb3Itb3ZlcnJpZGUKKy0KKyAjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN0cmluZworIAorIEJVSUxUX1NPVVJDRVMgKz0gc3RyaW5nLmgKK0BAIC04MTEsNTIgKzc1OCw0NyBAQCBCVUlMVF9TT1VSQ0VTICs9IHN0cmluZy5oCisgc3RyaW5nLmg6IHN0cmluZy5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19IKSAkKEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKKyAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKyAJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJyAmJiBcCistCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCistCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorKwkgIHNlZCAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorIAkgICAgICAtZSAnc3xAJydORVhUX1NUUklOR19IJydAfCQoTkVYVF9TVFJJTkdfSCl8ZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRkZTTCcnQC8kKEdOVUxJQl9GRlNMKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GRlNMTCcnQC8kKEdOVUxJQl9GRlNMTCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTTEVOJydALyQoR05VTElCX01CU0xFTikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTTkxFTicnQC8kKEdOVUxJQl9NQlNOTEVOKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNDSFInJ0AvJChHTlVMSUJfTUJTQ0hSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNSQ0hSJydALyQoR05VTElCX01CU1JDSFIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU1NUUicnQC8kKEdOVUxJQl9NQlNTVFIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU0NBU0VDTVAnJ0AvJChHTlVMSUJfTUJTQ0FTRUNNUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTTkNBU0VDTVAnJ0AvJChHTlVMSUJfTUJTTkNBU0VDTVApL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU1BDQVNFQ01QJydALyQoR05VTElCX01CU1BDQVNFQ01QKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNDQVNFU1RSJydALyQoR05VTElCX01CU0NBU0VTVFIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU0NTUE4nJ0AvJChHTlVMSUJfTUJTQ1NQTikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTUEJSSycnQC8kKEdOVUxJQl9NQlNQQlJLKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNTUE4nJ0AvJChHTlVMSUJfTUJTU1BOKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNTRVAnJ0AvJChHTlVMSUJfTUJTU0VQKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNUT0tfUicnQC8kKEdOVUxJQl9NQlNUT0tfUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUVNQ0hSJydALyQoR05VTElCX01FTUNIUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUVNTUVNJydALyQoR05VTElCX01FTU1FTSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUVNUENQWScnQC8kKEdOVUxJQl9NRU1QQ1BZKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NRU1SQ0hSJydALyQoR05VTElCX01FTVJDSFIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JBV01FTUNIUicnQC8kKEdOVUxJQl9SQVdNRU1DSFIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUENQWScnQC8kKEdOVUxJQl9TVFBDUFkpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUE5DUFknJ0AvJChHTlVMSUJfU1RQTkNQWSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSQ0hSTlVMJydALyQoR05VTElCX1NUUkNIUk5VTCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSRFVQJydALyQoR05VTElCX1NUUkRVUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSTkNBVCcnQC8kKEdOVUxJQl9TVFJOQ0FUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJORFVQJydALyQoR05VTElCX1NUUk5EVVApL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUk5MRU4nJ0AvJChHTlVMSUJfU1RSTkxFTikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSUEJSSycnQC8kKEdOVUxJQl9TVFJQQlJLKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJTRVAnJ0AvJChHTlVMSUJfU1RSU0VQKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJTVFInJ0AvJChHTlVMSUJfU1RSU1RSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJDQVNFU1RSJydALyQoR05VTElCX1NUUkNBU0VTVFIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlRPS19SJydALyQoR05VTElCX1NUUlRPS19SKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJFUlJPUicnQC8kKEdOVUxJQl9TVFJFUlJPUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSRVJST1JfUicnQC8kKEdOVUxJQl9TVFJFUlJPUl9SKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJTSUdOQUwnJ0AvJChHTlVMSUJfU1RSU0lHTkFMKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJWRVJTQ01QJydALyQoR05VTElCX1NUUlZFUlNDTVApL2cnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU0xFTicnQHwkKEdOVUxJQl9NQlNMRU4pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU05MRU4nJ0B8JChHTlVMSUJfTUJTTkxFTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTQ0hSJydAfCQoR05VTElCX01CU0NIUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTUkNIUicnQHwkKEdOVUxJQl9NQlNSQ0hSKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNTVFInJ0B8JChHTlVMSUJfTUJTU1RSKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNDQVNFQ01QJydAfCQoR05VTElCX01CU0NBU0VDTVApfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU05DQVNFQ01QJydAfCQoR05VTElCX01CU05DQVNFQ01QKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNQQ0FTRUNNUCcnQHwkKEdOVUxJQl9NQlNQQ0FTRUNNUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTQ0FTRVNUUicnQHwkKEdOVUxJQl9NQlNDQVNFU1RSKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNDU1BOJydAfCQoR05VTElCX01CU0NTUE4pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU1BCUksnJ0B8JChHTlVMSUJfTUJTUEJSSyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTU1BOJydAfCQoR05VTElCX01CU1NQTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTU0VQJydAfCQoR05VTElCX01CU1NFUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTVE9LX1InJ0B8JChHTlVMSUJfTUJTVE9LX1IpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01FTUNIUicnQHwkKEdOVUxJQl9NRU1DSFIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01FTU1FTScnQHwkKEdOVUxJQl9NRU1NRU0pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01FTVBDUFknJ0B8JChHTlVMSUJfTUVNUENQWSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUVNUkNIUicnQHwkKEdOVUxJQl9NRU1SQ0hSKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SQVdNRU1DSFInJ0B8JChHTlVMSUJfUkFXTUVNQ0hSKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFBDUFknJ0B8JChHTlVMSUJfU1RQQ1BZKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFBOQ1BZJydAfCQoR05VTElCX1NUUE5DUFkpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUkNIUk5VTCcnQHwkKEdOVUxJQl9TVFJDSFJOVUwpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUkRVUCcnQHwkKEdOVUxJQl9TVFJEVVApfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUk5DQVQnJ0B8JChHTlVMSUJfU1RSTkNBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSTkRVUCcnQHwkKEdOVUxJQl9TVFJORFVQKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJOTEVOJydAfCQoR05VTElCX1NUUk5MRU4pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUlBCUksnJ0B8JChHTlVMSUJfU1RSUEJSSyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSU0VQJydAfCQoR05VTElCX1NUUlNFUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSU1RSJydAfCQoR05VTElCX1NUUlNUUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSQ0FTRVNUUicnQHwkKEdOVUxJQl9TVFJDQVNFU1RSKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJUT0tfUicnQHwkKEdOVUxJQl9TVFJUT0tfUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSRVJST1InJ0B8JChHTlVMSUJfU1RSRVJST1IpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUkVSUk9SX1InJ0B8JChHTlVMSUJfU1RSRVJST1JfUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSU0lHTkFMJydAfCQoR05VTElCX1NUUlNJR05BTCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSVkVSU0NNUCcnQHwkKEdOVUxJQl9TVFJWRVJTQ01QKXxnJyBcCisgCSAgICAgIDwgJChzcmNkaXIpL3N0cmluZy5pbi5oIHwgXAorLQkgIHNlZCAtZSAnc3xAJydIQVZFX0ZGU0wnJ0B8JChIQVZFX0ZGU0wpfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSEFWRV9GRlNMTCcnQHwkKEhBVkVfRkZTTEwpfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSEFWRV9NQlNMRU4nJ0B8JChIQVZFX01CU0xFTil8ZycgXAorKwkgIHNlZCAtZSAnc3xAJydIQVZFX01CU0xFTicnQHwkKEhBVkVfTUJTTEVOKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfTUVNQ0hSJydAfCQoSEFWRV9NRU1DSFIpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX01FTU1FTScnQHwkKEhBVkVfREVDTF9NRU1NRU0pfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9NRU1QQ1BZJydAfCQoSEFWRV9NRU1QQ1BZKXxnJyBcCitAQCAtOTEyLDIzICs4NTQsMjIgQEAgc3lzL3N0YXQuaDogc3lzX3N0YXQuaW4uaCAkKHRvcF9idWlsZGRpcgorIAkkKEFNX1ZfYXQpJChNS0RJUl9QKSBzeXMKKyAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKyAJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAorLQkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorLQkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKysJICBzZWQgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnTkVYVF9TWVNfU1RBVF9IJydAfCQoTkVYVF9TWVNfU1RBVF9IKXxnJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GQ0hNT0RBVCcnQC8kKEdOVUxJQl9GQ0hNT0RBVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlNUQVRBVCcnQC8kKEdOVUxJQl9GU1RBVEFUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GVVRJTUVOUycnQC8kKEdOVUxJQl9GVVRJTUVOUykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTENITU9EJydALyQoR05VTElCX0xDSE1PRCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTFNUQVQnJ0AvJChHTlVMSUJfTFNUQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LRElSQVQnJ0AvJChHTlVMSUJfTUtESVJBVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtGSUZPJydALyQoR05VTElCX01LRklGTykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtGSUZPQVQnJ0AvJChHTlVMSUJfTUtGSUZPQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LTk9EJydALyQoR05VTElCX01LTk9EKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS05PREFUJydALyQoR05VTElCX01LTk9EQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUQVQnJ0AvJChHTlVMSUJfU1RBVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVVRJTUVOU0FUJydALyQoR05VTElCX1VUSU1FTlNBVCkvZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRkNITU9EQVQnJ0B8JChHTlVMSUJfRkNITU9EQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZTVEFUQVQnJ0B8JChHTlVMSUJfRlNUQVRBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlVUSU1FTlMnJ0B8JChHTlVMSUJfRlVUSU1FTlMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0xDSE1PRCcnQHwkKEdOVUxJQl9MQ0hNT0QpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0xTVEFUJydAfCQoR05VTElCX0xTVEFUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NS0RJUkFUJydAfCQoR05VTElCX01LRElSQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01LRklGTycnQHwkKEdOVUxJQl9NS0ZJRk8pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01LRklGT0FUJydAfCQoR05VTElCX01LRklGT0FUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NS05PRCcnQHwkKEdOVUxJQl9NS05PRCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtOT0RBVCcnQHwkKEdOVUxJQl9NS05PREFUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVEFUJydAfCQoR05VTElCX1NUQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1VUSU1FTlNBVCcnQHwkKEdOVUxJQl9VVElNRU5TQVQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9GQ0hNT0RBVCcnQHwkKEhBVkVfRkNITU9EQVQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9GU1RBVEFUJydAfCQoSEFWRV9GU1RBVEFUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfRlVUSU1FTlMnJ0B8JChIQVZFX0ZVVElNRU5TKXxnJyBcCitAQCAtOTcxLDE2ICs5MTIsMTUgQEAgQlVJTFRfU09VUkNFUyArPSB0aW1lLmgKKyB0aW1lLmg6IHRpbWUuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCisgCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisgCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLycgJiYgXAorLQkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorLQkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKysJICBzZWQgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnTkVYVF9USU1FX0gnJ0B8JChORVhUX1RJTUVfSCl8ZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtUSU1FJydALyQoR05VTElCX01LVElNRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTkFOT1NMRUVQJydALyQoR05VTElCX05BTk9TTEVFUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSUFRJTUUnJ0AvJChHTlVMSUJfU1RSUFRJTUUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1RJTUVHTScnQC8kKEdOVUxJQl9USU1FR00pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1RJTUVfUicnQC8kKEdOVUxJQl9USU1FX1IpL2cnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01LVElNRScnQHwkKEdOVUxJQl9NS1RJTUUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX05BTk9TTEVFUCcnQHwkKEdOVUxJQl9OQU5PU0xFRVApfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUlBUSU1FJydAfCQoR05VTElCX1NUUlBUSU1FKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9USU1FR00nJ0B8JChHTlVMSUJfVElNRUdNKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9USU1FX1InJ0B8JChHTlVMSUJfVElNRV9SKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9MT0NBTFRJTUVfUicnQHwkKEhBVkVfREVDTF9MT0NBTFRJTUVfUil8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX05BTk9TTEVFUCcnQHwkKEhBVkVfTkFOT1NMRUVQKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RSUFRJTUUnJ0B8JChIQVZFX1NUUlBUSU1FKXxnJyBcCitAQCAtMTAxMyw1NiArOTUzLDU1IEBAIEJVSUxUX1NPVVJDRVMgKz0gdW5pc3RkLmgKKyB1bmlzdGQuaDogdW5pc3RkLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCistCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCistCSAgICAgIC1lICdzfEAnJ0hBVkVfVU5JU1REX0gnJ0B8JChIQVZFX1VOSVNURF9IKXxnJyBcCisrCSAgc2VkIC1lICdzfEAnJ0hBVkVfVU5JU1REX0gnJ0B8JChIQVZFX1VOSVNURF9IKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ05FWFRfVU5JU1REX0gnJ0B8JChORVhUX1VOSVNURF9IKXxnJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9DSE9XTicnQC8kKEdOVUxJQl9DSE9XTikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfQ0xPU0UnJ0AvJChHTlVMSUJfQ0xPU0UpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0RVUDInJ0AvJChHTlVMSUJfRFVQMikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRFVQMycnQC8kKEdOVUxJQl9EVVAzKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9FTlZJUk9OJydALyQoR05VTElCX0VOVklST04pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0VVSURBQ0NFU1MnJ0AvJChHTlVMSUJfRVVJREFDQ0VTUykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRkFDQ0VTU0FUJydALyQoR05VTElCX0ZBQ0NFU1NBVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRkNIRElSJydALyQoR05VTElCX0ZDSERJUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRkNIT1dOQVQnJ0AvJChHTlVMSUJfRkNIT1dOQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZTWU5DJydALyQoR05VTElCX0ZTWU5DKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GVFJVTkNBVEUnJ0AvJChHTlVMSUJfRlRSVU5DQVRFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRDV0QnJ0AvJChHTlVMSUJfR0VUQ1dEKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRET01BSU5OQU1FJydALyQoR05VTElCX0dFVERPTUFJTk5BTUUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVERUQUJMRVNJWkUnJ0AvJChHTlVMSUJfR0VURFRBQkxFU0laRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUR1JPVVBTJydALyQoR05VTElCX0dFVEdST1VQUykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUSE9TVE5BTUUnJ0AvJChHTlVMSUJfR0VUSE9TVE5BTUUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVExPR0lOJydALyQoR05VTElCX0dFVExPR0lOKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRMT0dJTl9SJydALyQoR05VTElCX0dFVExPR0lOX1IpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVFBBR0VTSVpFJydALyQoR05VTElCX0dFVFBBR0VTSVpFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRVU0VSU0hFTEwnJ0AvJChHTlVMSUJfR0VUVVNFUlNIRUxMKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HUk9VUF9NRU1CRVInJ0AvJChHTlVMSUJfR1JPVVBfTUVNQkVSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MQ0hPV04nJ0AvJChHTlVMSUJfTENIT1dOKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MSU5LJydALyQoR05VTElCX0xJTkspL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0xJTktBVCcnQC8kKEdOVUxJQl9MSU5LQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0xTRUVLJydALyQoR05VTElCX0xTRUVLKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QSVBFJydALyQoR05VTElCX1BJUEUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BJUEUyJydALyQoR05VTElCX1BJUEUyKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QUkVBRCcnQC8kKEdOVUxJQl9QUkVBRCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUFdSSVRFJydALyQoR05VTElCX1BXUklURSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUkVBRCcnQC8kKEdOVUxJQl9SRUFEKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRUFETElOSycnQC8kKEdOVUxJQl9SRUFETElOSykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUkVBRExJTktBVCcnQC8kKEdOVUxJQl9SRUFETElOS0FUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9STURJUicnQC8kKEdOVUxJQl9STURJUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU0xFRVAnJ0AvJChHTlVMSUJfU0xFRVApL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NZTUxJTksnJ0AvJChHTlVMSUJfU1lNTElOSykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1lNTElOS0FUJydALyQoR05VTElCX1NZTUxJTktBVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVFRZTkFNRV9SJydALyQoR05VTElCX1RUWU5BTUVfUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVU5JU1REX0hfR0VUT1BUJydALyQoR05VTElCX1VOSVNURF9IX0dFVE9QVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVU5JU1REX0hfTk9OQkxPQ0tJTkcnJ0AvJChHTlVMSUJfVU5JU1REX0hfTk9OQkxPQ0tJTkcpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1VOSVNURF9IX1NJR1BJUEUnJ0AvJChHTlVMSUJfVU5JU1REX0hfU0lHUElQRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVU5MSU5LJydALyQoR05VTElCX1VOTElOSykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVU5MSU5LQVQnJ0AvJChHTlVMSUJfVU5MSU5LQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1VTTEVFUCcnQC8kKEdOVUxJQl9VU0xFRVApL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1dSSVRFJydALyQoR05VTElCX1dSSVRFKS9nJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9DSE9XTicnQHwkKEdOVUxJQl9DSE9XTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfQ0xPU0UnJ0B8JChHTlVMSUJfQ0xPU0UpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0RVUDInJ0B8JChHTlVMSUJfRFVQMil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRFVQMycnQHwkKEdOVUxJQl9EVVAzKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9FTlZJUk9OJydAfCQoR05VTElCX0VOVklST04pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0VVSURBQ0NFU1MnJ0B8JChHTlVMSUJfRVVJREFDQ0VTUyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRkFDQ0VTU0FUJydAfCQoR05VTElCX0ZBQ0NFU1NBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRkNIRElSJydAfCQoR05VTElCX0ZDSERJUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRkNIT1dOQVQnJ0B8JChHTlVMSUJfRkNIT1dOQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZTWU5DJydAfCQoR05VTElCX0ZTWU5DKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GVFJVTkNBVEUnJ0B8JChHTlVMSUJfRlRSVU5DQVRFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRDV0QnJ0B8JChHTlVMSUJfR0VUQ1dEKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRET01BSU5OQU1FJydAfCQoR05VTElCX0dFVERPTUFJTk5BTUUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVERUQUJMRVNJWkUnJ0B8JChHTlVMSUJfR0VURFRBQkxFU0laRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUR1JPVVBTJydAfCQoR05VTElCX0dFVEdST1VQUyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUSE9TVE5BTUUnJ0B8JChHTlVMSUJfR0VUSE9TVE5BTUUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVExPR0lOJydAfCQoR05VTElCX0dFVExPR0lOKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRMT0dJTl9SJydAfCQoR05VTElCX0dFVExPR0lOX1IpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVFBBR0VTSVpFJydAfCQoR05VTElCX0dFVFBBR0VTSVpFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRVU0VSU0hFTEwnJ0B8JChHTlVMSUJfR0VUVVNFUlNIRUxMKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HUk9VUF9NRU1CRVInJ0B8JChHTlVMSUJfR1JPVVBfTUVNQkVSKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9MQ0hPV04nJ0B8JChHTlVMSUJfTENIT1dOKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9MSU5LJydAfCQoR05VTElCX0xJTkspfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0xJTktBVCcnQHwkKEdOVUxJQl9MSU5LQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0xTRUVLJydAfCQoR05VTElCX0xTRUVLKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QSVBFJydAfCQoR05VTElCX1BJUEUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1BJUEUyJydAfCQoR05VTElCX1BJUEUyKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QUkVBRCcnQHwkKEdOVUxJQl9QUkVBRCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUFdSSVRFJydAfCQoR05VTElCX1BXUklURSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUkVBRCcnQHwkKEdOVUxJQl9SRUFEKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SRUFETElOSycnQHwkKEdOVUxJQl9SRUFETElOSyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUkVBRExJTktBVCcnQHwkKEdOVUxJQl9SRUFETElOS0FUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9STURJUicnQHwkKEdOVUxJQl9STURJUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU0xFRVAnJ0B8JChHTlVMSUJfU0xFRVApfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NZTUxJTksnJ0B8JChHTlVMSUJfU1lNTElOSyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1lNTElOS0FUJydAfCQoR05VTElCX1NZTUxJTktBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVFRZTkFNRV9SJydAfCQoR05VTElCX1RUWU5BTUVfUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVU5JU1REX0hfR0VUT1BUJydAfCQoR05VTElCX1VOSVNURF9IX0dFVE9QVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVU5JU1REX0hfTk9OQkxPQ0tJTkcnJ0B8JChHTlVMSUJfVU5JU1REX0hfTk9OQkxPQ0tJTkcpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1VOSVNURF9IX1NJR1BJUEUnJ0B8JChHTlVMSUJfVU5JU1REX0hfU0lHUElQRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVU5MSU5LJydAfCQoR05VTElCX1VOTElOSyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVU5MSU5LQVQnJ0B8JChHTlVMSUJfVU5MSU5LQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1VTTEVFUCcnQHwkKEdOVUxJQl9VU0xFRVApfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1dSSVRFJydAfCQoR05VTElCX1dSSVRFKXxnJyBcCisgCSAgICAgIDwgJChzcmNkaXIpL3VuaXN0ZC5pbi5oIHwgXAorIAkgIHNlZCAtZSAnc3xAJydIQVZFX0NIT1dOJydAfCQoSEFWRV9DSE9XTil8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX0RVUDInJ0B8JChIQVZFX0RVUDIpfGcnIFwKK0BAIC0xMTk4LDYgKzExMzcsMjUgQEAgRVhUUkFfRElTVCArPSB2ZXJpZnkuaAorIAorICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgdmVyaWZ5CisgCisrIyMgYmVnaW4gZ251bGliIG1vZHVsZSB3YXJuLW9uLXVzZQorKworK0JVSUxUX1NPVVJDRVMgKz0gd2Fybi1vbi11c2UuaAorKyMgVGhlIHdhcm4tb24tdXNlLmggdGhhdCBnZXRzIGluc2VydGVkIGludG8gZ2VuZXJhdGVkIC5oIGZpbGVzIGlzIHRoZSBzYW1lIGFzCisrIyBidWlsZC1hdXgvd2Fybi1vbi11c2UuaCwgZXhjZXB0IHRoYXQgaXQgaGFzIHRoZSBjb3B5cmlnaHQgaGVhZGVyIGN1dCBvZmYuCisrd2Fybi1vbi11c2UuaDogJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvd2Fybi1vbi11c2UuaAorKwkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorKwlzZWQgLW4gLWUgJy9eLmlmbmRlZi8sJCRwJyBcCisrCSAgPCAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC93YXJuLW9uLXVzZS5oIFwKKysJICA+ICRALXQgJiYgXAorKwltdiAkQC10ICRACisrTU9TVExZQ0xFQU5GSUxFUyArPSB3YXJuLW9uLXVzZS5oIHdhcm4tb24tdXNlLmgtdAorKworK1dBUk5fT05fVVNFX0g9d2Fybi1vbi11c2UuaAorKworK0VYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvd2Fybi1vbi11c2UuaAorKworKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgd2Fybi1vbi11c2UKKysKKyAjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHhhbGxvYworIAorIGxpYmljcnRfYV9TT1VSQ0VTICs9IHhhbGxvYy5oIHhtYWxsb2MuYyB4c3RyZHVwLmMKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvcGF0aG1heC5oIGxpYmljb252LTEuMTQvc3JjbGliL3BhdGhtYXguaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvcGF0aG1heC5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvcGF0aG1heC5oCTIwMTItMDEtMDggMDI6MDc6NDAuMjE4NDg0NDUxIC0wODAwCitAQCAtMTksMjcgKzE5LDYgQEAKKyAjaWZuZGVmIF9QQVRITUFYX0gKKyAjIGRlZmluZSBfUEFUSE1BWF9ICisgCistLyogUE9TSVg6MjAwOCBkZWZpbmVzIFBBVEhfTUFYIHRvIGJlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiBhIGZpbGVuYW1lLAorLSAgIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgTlVMIGJ5dGUuCistICAgPGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Jhc2VkZWZzL2xpbWl0cy5oLmh0bWw+CistICAgUEFUSF9NQVggaXMgbm90IGRlZmluZWQgb24gc3lzdGVtcyB3aGljaCBoYXZlIG5vIGxpbWl0IG9uIGZpbGVuYW1lIGxlbmd0aCwKKy0gICBzdWNoIGFzIEdOVS9IdXJkLgorLQorLSAgIFRoaXMgZmlsZSBkb2VzICpub3QqIGRlZmluZSBQQVRIX01BWCBhbHdheXMuICBQcm9ncmFtcyB0aGF0IHVzZSB0aGlzIGZpbGUKKy0gICBjYW4gaGFuZGxlIHRoZSBHTlUvSHVyZCBjYXNlIGluIHNldmVyYWwgd2F5czoKKy0gICAgIC0gRWl0aGVyIHdpdGggYSBwYWNrYWdlLXdpZGUgaGFuZGxpbmcsIG9yIHdpdGggYSBwZXItZmlsZSBoYW5kbGluZywKKy0gICAgIC0gRWl0aGVyIHRocm91Z2ggYQorLSAgICAgICAgICNpZmRlZiBQQVRIX01BWAorLSAgICAgICBvciB0aHJvdWdoIGEgZmFsbGJhY2sgbGlrZQorLSAgICAgICAgICNpZm5kZWYgUEFUSF9NQVgKKy0gICAgICAgICAjIGRlZmluZSBQQVRIX01BWCA4MTkyCistICAgICAgICAgI2VuZGlmCistICAgICAgIG9yIHRocm91Z2ggYSBmYWxsYmFjayBsaWtlCistICAgICAgICAgI2lmbmRlZiBQQVRIX01BWAorLSAgICAgICAgICMgZGVmaW5lIFBBVEhfTUFYIHBhdGhjb25mICgiLyIsIF9QQ19QQVRIX01BWCkKKy0gICAgICAgICAjZW5kaWYKKy0gKi8KKy0KKyAjIGluY2x1ZGUgPHVuaXN0ZC5oPgorIAorICMgaW5jbHVkZSA8bGltaXRzLmg+CitAQCAtNDgsNiArMjcsMTEgQEAKKyAjICBkZWZpbmUgX1BPU0lYX1BBVEhfTUFYIDI1NgorICMgZW5kaWYKKyAKKysjIGlmICFkZWZpbmVkIFBBVEhfTUFYICYmIGRlZmluZWQgX1BDX1BBVEhfTUFYICYmIGRlZmluZWQgSEFWRV9QQVRIQ09ORgorKyMgIGRlZmluZSBQQVRIX01BWCAocGF0aGNvbmYgKCIvIiwgX1BDX1BBVEhfTUFYKSA8IDEgPyAxMDI0IFwKKysgICAgICAgICAgICAgICAgICAgIDogcGF0aGNvbmYgKCIvIiwgX1BDX1BBVEhfTUFYKSkKKysjIGVuZGlmCisrCisgLyogRG9uJ3QgaW5jbHVkZSBzeXMvcGFyYW0uaCBpZiBpdCBhbHJlYWR5IGhhcyBiZWVuLiAgKi8KKyAjIGlmIGRlZmluZWQgSEFWRV9TWVNfUEFSQU1fSCAmJiAhZGVmaW5lZCBQQVRIX01BWCAmJiAhZGVmaW5lZCBNQVhQQVRITEVOCisgIyAgaW5jbHVkZSA8c3lzL3BhcmFtLmg+CitAQCAtNTcsMTMgKzQxLDggQEAKKyAjICBkZWZpbmUgUEFUSF9NQVggTUFYUEFUSExFTgorICMgZW5kaWYKKyAKKy0jIGlmZGVmIF9faHB1eAorLS8qIE9uIEhQLVVYLCBQQVRIX01BWCBkZXNpZ25hdGVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiBhIGZpbGVuYW1lLAorLSAgICpub3QqIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgTlVMIGJ5dGUsIGFuZCBpcyBzZXQgdG8gMTAyMy4KKy0gICBBZGRpdGlvbmFsbHksIHdoZW4gX1hPUEVOX1NPVVJDRSBpcyBkZWZpbmVkIHRvIDUwMCBvciBtb3JlLCBQQVRIX01BWCBpcworLSAgIG5vdCBkZWZpbmVkIGF0IGFsbCBhbnkgbW9yZS4gICovCistIyAgdW5kZWYgUEFUSF9NQVgKKy0jICBkZWZpbmUgUEFUSF9NQVggMTAyNAorKyMgaWZuZGVmIFBBVEhfTUFYCisrIyAgZGVmaW5lIFBBVEhfTUFYIF9QT1NJWF9QQVRIX01BWAorICMgZW5kaWYKKyAKKyAjZW5kaWYgLyogX1BBVEhNQVhfSCAqLworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9yZWxvY3dyYXBwZXIuYyBsaWJpY29udi0xLjE0L3NyY2xpYi9yZWxvY3dyYXBwZXIuYworLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvcmVsb2N3cmFwcGVyLmMJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9yZWxvY3dyYXBwZXIuYwkyMDEyLTAxLTA4IDAyOjA3OjQwLjI4MjQ4NDQ1NSAtMDgwMAorQEAgLTI5LDYgKzI5LDcgQEAKKyAgICAgLT4gcmVsb2NhdGFibGUKKyAgICAgLT4gc2V0ZW52CisgICAgICAgIC0+IG1hbGxvY2EKKysgICAgLT4gc3RyZXJyb3IKKyAgICAgLT4gYy1jdHlwZQorIAorICAgIE1hY3JvcyB0aGF0IG5lZWQgdG8gYmUgc2V0IHdoaWxlIGNvbXBpbGluZyB0aGlzIGZpbGU6CitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3NhZmUtcmVhZC5oIGxpYmljb252LTEuMTQvc3JjbGliL3NhZmUtcmVhZC5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zYWZlLXJlYWQuaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3NhZmUtcmVhZC5oCTIwMTItMDEtMDggMDI6MDc6NDAuMjk4NDg0NDU1IC0wODAwCitAQCAtMTQsMTkgKzE0LDYgQEAKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKy0vKiBTb21lIHN5c3RlbSBjYWxscyBtYXkgYmUgaW50ZXJydXB0ZWQgYW5kIGZhaWwgd2l0aCBlcnJubyA9IEVJTlRSIGluIHRoZQorLSAgIGZvbGxvd2luZyBzaXR1YXRpb25zOgorLSAgICAgLSBUaGUgcHJvY2VzcyBpcyBzdG9wcGVkIGFuZCByZXN0YXJ0ZWQgKHNpZ25hbCBTSUdTVE9QIGFuZCBTSUdDT05ULCB1c2VyCistICAgICAgIHR5cGVzIEN0cmwtWikgb24gc29tZSBwbGF0Zm9ybXM6IE1hY09TIFguCistICAgICAtIFRoZSBwcm9jZXNzIHJlY2VpdmVzIGEgc2lnbmFsIGZvciB3aGljaCBhIHNpZ25hbCBoYW5kbGVyIHdhcyBpbnN0YWxsZWQKKy0gICAgICAgd2l0aCBzaWdhY3Rpb24oKSB3aXRoIGFuIHNhX2ZsYWdzIGZpZWxkIHRoYXQgZG9lcyBub3QgY29udGFpbgorLSAgICAgICBTQV9SRVNUQVJULgorLSAgICAgLSBUaGUgcHJvY2VzcyByZWNlaXZlcyBhIHNpZ25hbCBmb3Igd2hpY2ggYSBzaWduYWwgaGFuZGxlciB3YXMgaW5zdGFsbGVkCistICAgICAgIHdpdGggc2lnbmFsKCkgYW5kIGZvciB3aGljaCBubyBjYWxsIHRvIHNpZ2ludGVycnVwdChzaWcsMCkgd2FzIGRvbmUsCistICAgICAgIG9uIHNvbWUgcGxhdGZvcm1zOiBBSVgsIEhQLVVYLCBJUklYLCBPU0YvMSwgU29sYXJpcy4KKy0KKy0gICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIHdyYXBwZXIgYXJvdW5kIHJlYWQoKSB0aGF0IGhhbmRsZXMgRUlOVFIuICAqLworLQorICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAKKyAjaWZkZWYgX19jcGx1c3BsdXMKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc2lnbmFsLmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvc2lnbmFsLmluLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3NpZ25hbC5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc2lnbmFsLmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC4zMTQ0ODQ0NTYgLTA4MDAKK0BAIC0yMCw0OSArMjAsMjEgQEAKKyAjZW5kaWYKKyBAUFJBR01BX0NPTFVNTlNACisgCistI2lmIGRlZmluZWQgX19uZWVkX3NpZ19hdG9taWNfdCB8fCBkZWZpbmVkIF9fbmVlZF9zaWdzZXRfdCB8fCBkZWZpbmVkIF9HTF9BTFJFQURZX0lOQ0xVRElOR19TSUdOQUxfSCB8fCAoZGVmaW5lZCBfU0lHTkFMX0ggJiYgIWRlZmluZWQgX19TSVpFT0ZfUFRIUkVBRF9NVVRFWF9UKQorLS8qIFNwZWNpYWwgaW52b2NhdGlvbiBjb252ZW50aW9uOgorLSAgIC0gSW5zaWRlIGdsaWJjIGhlYWRlciBmaWxlcy4KKy0gICAtIE9uIGdsaWJjIHN5c3RlbXMgd2UgaGF2ZSBhIHNlcXVlbmNlIG9mIG5lc3RlZCBpbmNsdWRlcworLSAgICAgPHNpZ25hbC5oPiAtPiA8dWNvbnRleHQuaD4gLT4gPHNpZ25hbC5oPi4KKy0gICAgIEluIHRoaXMgc2l0dWF0aW9uLCB0aGUgZnVuY3Rpb25zIGFyZSBub3QgeWV0IGRlY2xhcmVkLCB0aGVyZWZvcmUgd2UgY2Fubm90CistICAgICBwcm92aWRlIHRoZSBDKysgYWxpYXNlcy4KKy0gICAtIE9uIGdsaWJjIHN5c3RlbXMgd2l0aCBHQ0MgNC4zIHdlIGhhdmUgYSBzZXF1ZW5jZSBvZiBuZXN0ZWQgaW5jbHVkZXMKKy0gICAgIDxjc2lnbmFsPiAtPiA8L3Vzci9pbmNsdWRlL3NpZ25hbC5oPiAtPiA8c3lzL3Vjb250ZXh0Lmg+IC0+IDxzaWduYWwuaD4uCistICAgICBJbiB0aGlzIHNpdHVhdGlvbiwgc29tZSBvZiB0aGUgZnVuY3Rpb25zIGFyZSBub3QgeWV0IGRlY2xhcmVkLCB0aGVyZWZvcmUKKy0gICAgIHdlIGNhbm5vdCBwcm92aWRlIHRoZSBDKysgYWxpYXNlcy4gICovCisrI2lmIGRlZmluZWQgX19uZWVkX3NpZ19hdG9taWNfdCB8fCBkZWZpbmVkIF9fbmVlZF9zaWdzZXRfdAorKy8qIFNwZWNpYWwgaW52b2NhdGlvbiBjb252ZW50aW9uIGluc2lkZSBnbGliYyBoZWFkZXIgZmlsZXMuICAqLworIAorICMgQElOQ0xVREVfTkVYVEAgQE5FWFRfU0lHTkFMX0hACisgCisgI2Vsc2UKKyAvKiBOb3JtYWwgaW52b2NhdGlvbiBjb252ZW50aW9uLiAgKi8KKyAKKy0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TSUdOQUxfSAorLQorLSNkZWZpbmUgX0dMX0FMUkVBRFlfSU5DTFVESU5HX1NJR05BTF9ICistCistLyogRGVmaW5lIHBpZF90LCB1aWRfdC4KKy0gICBBbHNvLCBtaW5ndyBkZWZpbmVzIHNpZ3NldF90IG5vdCBpbiA8c2lnbmFsLmg+LCBidXQgaW4gPHN5cy90eXBlcy5oPi4KKy0gICBPbiBTb2xhcmlzIDEwLCA8c2lnbmFsLmg+IGluY2x1ZGVzIDxzeXMvdHlwZXMuaD4sIHdoaWNoIGV2ZW50dWFsbHkgaW5jbHVkZXMKKy0gICB1czsgc28gaW5jbHVkZSA8c3lzL3R5cGVzLmg+IG5vdywgYmVmb3JlIHRoZSBzZWNvbmQgaW5jbHVzaW9uIGd1YXJkLiAgKi8KKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2lmbmRlZiBfR0xfU0lHTkFMX0gKKyAKKyAvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisgI0BJTkNMVURFX05FWFRAIEBORVhUX1NJR05BTF9IQAorIAorLSN1bmRlZiBfR0xfQUxSRUFEWV9JTkNMVURJTkdfU0lHTkFMX0gKKy0KKy0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TSUdOQUxfSAorLSNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX1NJR05BTF9ICistCistLyogTWFjT1MgWCAxMC4zLCBGcmVlQlNEIDYuNCwgT3BlbkJTRCAzLjgsIE9TRi8xIDQuMCwgU29sYXJpcyAyLjYgZGVjbGFyZQorLSAgIHB0aHJlYWRfc2lnbWFzayBpbiA8cHRocmVhZC5oPiwgbm90IGluIDxzaWduYWwuaD4uCistICAgQnV0IGF2b2lkIG5hbWVzcGFjZSBwb2xsdXRpb24gb24gZ2xpYmMgc3lzdGVtcy4qLworLSNpZiAoQEdOVUxJQl9QVEhSRUFEX1NJR01BU0tAIHx8IGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0spIFwKKy0gICAgJiYgKChkZWZpbmVkIF9fQVBQTEVfXyAmJiBkZWZpbmVkIF9fTUFDSF9fKSB8fCBkZWZpbmVkIF9fRnJlZUJTRF9fIHx8IGRlZmluZWQgX19PcGVuQlNEX18gfHwgZGVmaW5lZCBfX29zZl9fIHx8IGRlZmluZWQgX19zdW4pIFwKKy0gICAgJiYgISBkZWZpbmVkIF9fR0xJQkNfXworLSMgaW5jbHVkZSA8cHRocmVhZC5oPgorLSNlbmRpZgorKyNpZm5kZWYgX0dMX1NJR05BTF9ICisrI2RlZmluZSBfR0xfU0lHTkFMX0gKKyAKKyAvKiBUaGUgZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTCBldGMuIGFyZSBjb3BpZWQgaGVyZS4gICovCisgCitAQCAtNzAsNiArNDIsMTAgQEAKKyAKKyAvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UgaXMgY29waWVkIGhlcmUuICAqLworIAorKy8qIERlZmluZSBwaWRfdCwgdWlkX3QuCisrICAgQWxzbywgbWluZ3cgZGVmaW5lcyBzaWdzZXRfdCBub3QgaW4gPHNpZ25hbC5oPiwgYnV0IGluIDxzeXMvdHlwZXMuaD4uICAqLworKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysKKyAvKiBPbiBBSVgsIHNpZ19hdG9taWNfdCBhbHJlYWR5IGluY2x1ZGVzIHZvbGF0aWxlLiAgQzk5IHJlcXVpcmVzIHRoYXQKKyAgICAndm9sYXRpbGUgc2lnX2F0b21pY190JyBpZ25vcmUgdGhlIGV4dHJhIG1vZGlmaWVyLCBidXQgQzg5IGRpZCBub3QuCisgICAgSGVuY2UsIHJlZGVmaW5lIHRoaXMgdG8gYSBub24tdm9sYXRpbGUgdHlwZSBhcyBuZWVkZWQuICAqLworQEAgLTEyNCwzNCArMTAwLDYgQEAgdHlwZWRlZiB2b2lkICgqc2lnaGFuZGxlcl90KSAoaW50KTsKKyAjZW5kaWYKKyAKKyAKKy0jaWYgQEdOVUxJQl9QVEhSRUFEX1NJR01BU0tACistIyBpZiBAUkVQTEFDRV9QVEhSRUFEX1NJR01BU0tACistIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKy0jICAgdW5kZWYgcHRocmVhZF9zaWdtYXNrCistIyAgIGRlZmluZSBwdGhyZWFkX3NpZ21hc2sgcnBsX3B0aHJlYWRfc2lnbWFzaworLSMgIGVuZGlmCistX0dMX0ZVTkNERUNMX1JQTCAocHRocmVhZF9zaWdtYXNrLCBpbnQsCistICAgICAgICAgICAgICAgICAgKGludCBob3csIGNvbnN0IHNpZ3NldF90ICpuZXdfbWFzaywgc2lnc2V0X3QgKm9sZF9tYXNrKSk7CistX0dMX0NYWEFMSUFTX1JQTCAocHRocmVhZF9zaWdtYXNrLCBpbnQsCistICAgICAgICAgICAgICAgICAgKGludCBob3csIGNvbnN0IHNpZ3NldF90ICpuZXdfbWFzaywgc2lnc2V0X3QgKm9sZF9tYXNrKSk7CistIyBlbHNlCistIyAgaWYgIUBIQVZFX1BUSFJFQURfU0lHTUFTS0AKKy1fR0xfRlVOQ0RFQ0xfU1lTIChwdGhyZWFkX3NpZ21hc2ssIGludCwKKy0gICAgICAgICAgICAgICAgICAoaW50IGhvdywgY29uc3Qgc2lnc2V0X3QgKm5ld19tYXNrLCBzaWdzZXRfdCAqb2xkX21hc2spKTsKKy0jICBlbmRpZgorLV9HTF9DWFhBTElBU19TWVMgKHB0aHJlYWRfc2lnbWFzaywgaW50LAorLSAgICAgICAgICAgICAgICAgIChpbnQgaG93LCBjb25zdCBzaWdzZXRfdCAqbmV3X21hc2ssIHNpZ3NldF90ICpvbGRfbWFzaykpOworLSMgZW5kaWYKKy1fR0xfQ1hYQUxJQVNXQVJOIChwdGhyZWFkX3NpZ21hc2spOworLSNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy0jIHVuZGVmIHB0aHJlYWRfc2lnbWFzaworLSMgaWYgSEFWRV9SQVdfREVDTF9QVEhSRUFEX1NJR01BU0sKKy1fR0xfV0FSTl9PTl9VU0UgKHB0aHJlYWRfc2lnbWFzaywgInB0aHJlYWRfc2lnbWFzayBpcyBub3QgcG9ydGFibGUgLSAiCistICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcHRocmVhZF9zaWdtYXNrIGZvciBwb3J0YWJpbGl0eSIpOworLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0KKyAjaWYgQEdOVUxJQl9TSUdQUk9DTUFTS0AKKyAjIGlmICFASEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lOR0AKKyAKK0BAIC00MjMsNiArMzcxLDYgQEAgX0dMX1dBUk5fT05fVVNFIChzaWdhY3Rpb24sICJzaWdhY3Rpb24gaQorICNlbmRpZgorIAorIAorLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU0lHTkFMX0ggKi8KKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NJR05BTF9IICovCisrI2VuZGlmIC8qIF9HTF9TSUdOQUxfSCAqLworKyNlbmRpZiAvKiBfR0xfU0lHTkFMX0ggKi8KKyAjZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RhdC5jIGxpYmljb252LTEuMTQvc3JjbGliL3N0YXQuYworLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RhdC5jCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RhdC5jCTIwMTItMDEtMDggMDI6MDc6NDAuMzMwNDg0NDU3IC0wODAwCitAQCAtMzgsNyArMzgsNiBAQCBvcmlnX3N0YXQgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBzdHJ1Y3QKKyAjaW5jbHVkZSA8c3RkYm9vbC5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSAiZG9zbmFtZS5oIgorLSNpbmNsdWRlICJ2ZXJpZnkuaCIKKyAKKyAvKiBTdG9yZSBpbmZvcm1hdGlvbiBhYm91dCBOQU1FIGludG8gU1QuICBXb3JrIGFyb3VuZCBidWdzIHdpdGgKKyAgICB0cmFpbGluZyBzbGFzaGVzLiAgTWluZ3cgaGFzIG90aGVyIGJ1Z3MgKHN1Y2ggYXMgc3RfaW5vIGFsd2F5cworQEAgLTY0LDEyICs2Myw2IEBAIHJwbF9zdGF0IChjaGFyIGNvbnN0ICpuYW1lLCBzdHJ1Y3Qgc3RhdAorICAgICB9CisgI2VuZGlmIC8qIFJFUExBQ0VfRlVOQ19TVEFUX0ZJTEUgKi8KKyAjaWYgUkVQTEFDRV9GVU5DX1NUQVRfRElSCistICAvKiBUaGUgb25seSBrbm93biBzeXN0ZW1zIHdoZXJlIFJFUExBQ0VfRlVOQ19TVEFUX0RJUiBpcyBuZWVkZWQgYWxzbworLSAgICAgaGF2ZSBhIGNvbnN0YW50IFBBVEhfTUFYLiAgKi8KKy0jIGlmbmRlZiBQQVRIX01BWAorLSMgIGVycm9yICJQbGVhc2UgcG9ydCB0aGlzIHJlcGxhY2VtZW50IHRvIHlvdXIgcGxhdGZvcm0iCistIyBlbmRpZgorLQorICAgaWYgKHJlc3VsdCA9PSAtMSAmJiBlcnJubyA9PSBFTk9FTlQpCisgICAgIHsKKyAgICAgICAvKiBEdWUgdG8gbWluZ3cncyBvZGRpdGllcywgdGhlcmUgYXJlIHNvbWUgZGlyZWN0b3JpZXMgKGxpa2UKK0BAIC04NCw3ICs3Nyw2IEBAIHJwbF9zdGF0IChjaGFyIGNvbnN0ICpuYW1lLCBzdHJ1Y3Qgc3RhdAorICAgICAgIGNoYXIgZml4ZWRfbmFtZVtQQVRIX01BWCArIDFdID0gezB9OworICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKG5hbWUpOworICAgICAgIGJvb2wgY2hlY2tfZGlyID0gZmFsc2U7CistICAgICAgdmVyaWZ5IChQQVRIX01BWCA8PSA0MDk2KTsKKyAgICAgICBpZiAoUEFUSF9NQVggPD0gbGVuKQorICAgICAgICAgZXJybm8gPSBFTkFNRVRPT0xPTkc7CisgICAgICAgZWxzZSBpZiAobGVuKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdGRkZWYuaW4uaCBsaWJpY29udi0xLjE0L3NyY2xpYi9zdGRkZWYuaW4uaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RkZGVmLmluLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdGRkZWYuaW4uaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjM0NjQ4NDQ1OCAtMDgwMAorQEAgLTM4LDkgKzM4LDkgQEAKKyAgICByZW1lbWJlciBpZiBzcGVjaWFsIGludm9jYXRpb24gaGFzIGV2ZXIgYmVlbiB1c2VkIHRvIG9idGFpbiB3aW50X3QsCisgICAgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvIGNsZWFuIHVwIE5VTEwgeWV0IGFnYWluLiAgKi8KKyAKKy0jIGlmICEoZGVmaW5lZCBfQEdVQVJEX1BSRUZJWEBfU1REREVGX0ggJiYgZGVmaW5lZCBfR0xfU1REREVGX1dJTlRfVCkKKysjIGlmICEoZGVmaW5lZCBfR0xfU1REREVGX0ggJiYgZGVmaW5lZCBfR0xfU1REREVGX1dJTlRfVCkKKyAjICBpZmRlZiBfX25lZWRfd2ludF90CistIyAgIHVuZGVmIF9AR1VBUkRfUFJFRklYQF9TVERERUZfSAorKyMgICB1bmRlZiBfR0xfU1REREVGX0gKKyAjICAgZGVmaW5lIF9HTF9TVERERUZfV0lOVF9UCisgIyAgZW5kaWYKKyAjICBASU5DTFVERV9ORVhUQCBATkVYVF9TVERERUZfSEAKK0BAIC00OSwxNCArNDksMTQgQEAKKyAjZWxzZQorIC8qIE5vcm1hbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24uICAqLworIAorLSMgaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TVERERUZfSAorKyMgaWZuZGVmIF9HTF9TVERERUZfSAorIAorIC8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyAKKyAjICBASU5DTFVERV9ORVhUQCBATkVYVF9TVERERUZfSEAKKyAKKy0jICBpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NURERFRl9ICistIyAgIGRlZmluZSBfQEdVQVJEX1BSRUZJWEBfU1REREVGX0gKKysjICBpZm5kZWYgX0dMX1NURERFRl9ICisrIyAgIGRlZmluZSBfR0xfU1REREVGX0gKKyAKKyAvKiBPbiBOZXRCU0QgNS4wLCB0aGUgZGVmaW5pdGlvbiBvZiBOVUxMIGxhY2tzIHByb3BlciBwYXJlbnRoZXNlcy4gICovCisgI2lmIEBSRVBMQUNFX05VTExACitAQCAtODIsNiArODIsNiBAQAorICMgZGVmaW5lIHdjaGFyX3QgaW50CisgI2VuZGlmCisgCistIyAgZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NURERFRl9IICovCistIyBlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1REREVGX0ggKi8KKysjICBlbmRpZiAvKiBfR0xfU1REREVGX0ggKi8KKysjIGVuZGlmIC8qIF9HTF9TVERERUZfSCAqLworICNlbmRpZiAvKiBfX25lZWRfWFhYICovCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0ZGludC5pbi5oIGxpYmljb252LTEuMTQvc3JjbGliL3N0ZGludC5pbi5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdGRpbnQuaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3N0ZGludC5pbi5oCTIwMTItMDEtMDggMDI6MDc6NDAuMzU4NDg0NDU4IC0wODAwCitAQCAtMjEsNyArMjEsNyBAQAorICAqIDxodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjN4YmQvc3RkaW50LmguaHRtbD4KKyAgKi8KKyAKKy0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TVERJTlRfSAorKyNpZm5kZWYgX0dMX1NURElOVF9ICisgCisgI2lmIF9fR05VQ19fID49IDMKKyBAUFJBR01BX1NZU1RFTV9IRUFERVJACitAQCAtNTIsMTMgKzUyLDEzIEBACisgICAvKiBPdGhlciBzeXN0ZW1zIG1heSBoYXZlIGFuIGluY29tcGxldGUgb3IgYnVnZ3kgPHN0ZGludC5oPi4KKyAgICAgIEluY2x1ZGUgaXQgYmVmb3JlIDxpbnR0eXBlcy5oPiwgc2luY2UgYW55ICIjaW5jbHVkZSA8c3RkaW50Lmg+IgorICAgICAgaW4gPGludHR5cGVzLmg+IHdvdWxkIHJlaW5jbHVkZSB1cywgc2tpcHBpbmcgb3VyIGNvbnRlbnRzIGJlY2F1c2UKKy0gICAgIF9AR1VBUkRfUFJFRklYQF9TVERJTlRfSCBpcyBkZWZpbmVkLgorKyAgICAgX0dMX1NURElOVF9IIGlzIGRlZmluZWQuCisgICAgICBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisgIyBASU5DTFVERV9ORVhUQCBATkVYVF9TVERJTlRfSEAKKyAjZW5kaWYKKyAKKy0jaWYgISBkZWZpbmVkIF9AR1VBUkRfUFJFRklYQF9TVERJTlRfSCAmJiAhIGRlZmluZWQgX0dMX0pVU1RfSU5DTFVERV9TWVNURU1fU1RESU5UX0gKKy0jZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9TVERJTlRfSAorKyNpZiAhIGRlZmluZWQgX0dMX1NURElOVF9IICYmICEgZGVmaW5lZCBfR0xfSlVTVF9JTkNMVURFX1NZU1RFTV9TVERJTlRfSAorKyNkZWZpbmUgX0dMX1NURElOVF9ICisgCisgLyogPHN5cy90eXBlcy5oPiBkZWZpbmVzIHNvbWUgb2YgdGhlIHN0ZGludC5oIHR5cGVzIGFzIHdlbGwsIG9uIGdsaWJjLAorICAgIElSSVggNi41LCBhbmQgT3BlbkJTRCAzLjggKHZpYSA8bWFjaGluZS90eXBlcy5oPikuCitAQCAtMjcwLDM2ICsyNzAsMjYgQEAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBnbF91aW50cHRyX3Q7CisgLyogTm90ZTogVGhlc2UgdHlwZXMgYXJlIGNvbXBpbGVyIGRlcGVuZGVudC4gSXQgbWF5IGJlIHVud2lzZSB0byB1c2UgdGhlbSBpbgorICAgIHB1YmxpYyBoZWFkZXIgZmlsZXMuICovCisgCistLyogSWYgdGhlIHN5c3RlbSBkZWZpbmVzIElOVE1BWF9NQVgsIGFzc3VtZSB0aGF0IGludG1heF90IHdvcmtzLCBhbmQKKy0gICBzaW1pbGFybHkgZm9yIFVJTlRNQVhfTUFYIGFuZCB1aW50bWF4X3QuICBUaGlzIGF2b2lkcyBwcm9ibGVtcyB3aXRoCistICAgYXNzdW1pbmcgb25lIHR5cGUgd2hlcmUgYW5vdGhlciBpcyB1c2VkIGJ5IHRoZSBzeXN0ZW0uICAqLworLQorLSNpZm5kZWYgSU5UTUFYX01BWAorLSMgdW5kZWYgSU5UTUFYX0MKKy0jIHVuZGVmIGludG1heF90CistIyBpZiBASEFWRV9MT05HX0xPTkdfSU5UQCAmJiBMT05HX01BWCA+PiAzMCA9PSAxCisrI3VuZGVmIGludG1heF90CisrI2lmIEBIQVZFX0xPTkdfTE9OR19JTlRAICYmIExPTkdfTUFYID4+IDMwID09IDEKKyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgZ2xfaW50bWF4X3Q7CistIyAgZGVmaW5lIGludG1heF90IGdsX2ludG1heF90CistIyBlbGlmIGRlZmluZWQgR0xfSU5UNjRfVAorLSMgIGRlZmluZSBpbnRtYXhfdCBpbnQ2NF90CistIyBlbHNlCisrIyBkZWZpbmUgaW50bWF4X3QgZ2xfaW50bWF4X3QKKysjZWxpZiBkZWZpbmVkIEdMX0lOVDY0X1QKKysjIGRlZmluZSBpbnRtYXhfdCBpbnQ2NF90CisrI2Vsc2UKKyB0eXBlZGVmIGxvbmcgaW50IGdsX2ludG1heF90OworLSMgIGRlZmluZSBpbnRtYXhfdCBnbF9pbnRtYXhfdAorLSMgZW5kaWYKKysjIGRlZmluZSBpbnRtYXhfdCBnbF9pbnRtYXhfdAorICNlbmRpZgorIAorLSNpZm5kZWYgVUlOVE1BWF9NQVgKKy0jIHVuZGVmIFVJTlRNQVhfQworLSMgdW5kZWYgdWludG1heF90CistIyBpZiBASEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UQCAmJiBVTE9OR19NQVggPj4gMzEgPT0gMQorKyN1bmRlZiB1aW50bWF4X3QKKysjaWYgQEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVEAgJiYgVUxPTkdfTUFYID4+IDMxID09IDEKKyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgZ2xfdWludG1heF90OworLSMgIGRlZmluZSB1aW50bWF4X3QgZ2xfdWludG1heF90CistIyBlbGlmIGRlZmluZWQgR0xfVUlOVDY0X1QKKy0jICBkZWZpbmUgdWludG1heF90IHVpbnQ2NF90CistIyBlbHNlCisrIyBkZWZpbmUgdWludG1heF90IGdsX3VpbnRtYXhfdAorKyNlbGlmIGRlZmluZWQgR0xfVUlOVDY0X1QKKysjIGRlZmluZSB1aW50bWF4X3QgdWludDY0X3QKKysjZWxzZQorIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgZ2xfdWludG1heF90OworLSMgIGRlZmluZSB1aW50bWF4X3QgZ2xfdWludG1heF90CistIyBlbmRpZgorKyMgZGVmaW5lIHVpbnRtYXhfdCBnbF91aW50bWF4X3QKKyAjZW5kaWYKKyAKKyAvKiBWZXJpZnkgdGhhdCBpbnRtYXhfdCBhbmQgdWludG1heF90IGhhdmUgdGhlIHNhbWUgc2l6ZS4gIFRvbyBtdWNoIGNvZGUKK0BAIC00NDEsMjMgKzQzMSwyMSBAQCB0eXBlZGVmIGludCBfdmVyaWZ5X2ludG1heF9zaXplW3NpemVvZiAoCisgCisgLyogNy4xOC4yLjUuIExpbWl0cyBvZiBncmVhdGVzdC13aWR0aCBpbnRlZ2VyIHR5cGVzICovCisgCistI2lmbmRlZiBJTlRNQVhfTUFYCistIyB1bmRlZiBJTlRNQVhfTUlOCistIyBpZmRlZiBJTlQ2NF9NQVgKKy0jICBkZWZpbmUgSU5UTUFYX01JTiAgSU5UNjRfTUlOCistIyAgZGVmaW5lIElOVE1BWF9NQVggIElOVDY0X01BWAorLSMgZWxzZQorLSMgIGRlZmluZSBJTlRNQVhfTUlOICBJTlQzMl9NSU4KKy0jICBkZWZpbmUgSU5UTUFYX01BWCAgSU5UMzJfTUFYCistIyBlbmRpZgorKyN1bmRlZiBJTlRNQVhfTUlOCisrI3VuZGVmIElOVE1BWF9NQVgKKysjaWZkZWYgSU5UNjRfTUFYCisrIyBkZWZpbmUgSU5UTUFYX01JTiAgSU5UNjRfTUlOCisrIyBkZWZpbmUgSU5UTUFYX01BWCAgSU5UNjRfTUFYCisrI2Vsc2UKKysjIGRlZmluZSBJTlRNQVhfTUlOICBJTlQzMl9NSU4KKysjIGRlZmluZSBJTlRNQVhfTUFYICBJTlQzMl9NQVgKKyAjZW5kaWYKKyAKKy0jaWZuZGVmIFVJTlRNQVhfTUFYCistIyBpZmRlZiBVSU5UNjRfTUFYCistIyAgZGVmaW5lIFVJTlRNQVhfTUFYICBVSU5UNjRfTUFYCistIyBlbHNlCistIyAgZGVmaW5lIFVJTlRNQVhfTUFYICBVSU5UMzJfTUFYCistIyBlbmRpZgorKyN1bmRlZiBVSU5UTUFYX01BWAorKyNpZmRlZiBVSU5UNjRfTUFYCisrIyBkZWZpbmUgVUlOVE1BWF9NQVggIFVJTlQ2NF9NQVgKKysjZWxzZQorKyMgZGVmaW5lIFVJTlRNQVhfTUFYICBVSU5UMzJfTUFYCisgI2VuZGlmCisgCisgLyogNy4xOC4zLiBMaW1pdHMgb2Ygb3RoZXIgaW50ZWdlciB0eXBlcyAqLworQEAgLTU4MCwyNyArNTY4LDI1IEBAIHR5cGVkZWYgaW50IF92ZXJpZnlfaW50bWF4X3NpemVbc2l6ZW9mICgKKyAKKyAvKiA3LjE4LjQuMi4gTWFjcm9zIGZvciBncmVhdGVzdC13aWR0aCBpbnRlZ2VyIGNvbnN0YW50cyAqLworIAorLSNpZm5kZWYgSU5UTUFYX0MKKy0jIGlmIEBIQVZFX0xPTkdfTE9OR19JTlRAICYmIExPTkdfTUFYID4+IDMwID09IDEKKy0jICBkZWZpbmUgSU5UTUFYX0MoeCkgICB4IyNMTAorLSMgZWxpZiBkZWZpbmVkIEdMX0lOVDY0X1QKKy0jICBkZWZpbmUgSU5UTUFYX0MoeCkgICBJTlQ2NF9DKHgpCistIyBlbHNlCistIyAgZGVmaW5lIElOVE1BWF9DKHgpICAgeCMjTAorLSMgZW5kaWYKKysjdW5kZWYgSU5UTUFYX0MKKysjaWYgQEhBVkVfTE9OR19MT05HX0lOVEAgJiYgTE9OR19NQVggPj4gMzAgPT0gMQorKyMgZGVmaW5lIElOVE1BWF9DKHgpICAgeCMjTEwKKysjZWxpZiBkZWZpbmVkIEdMX0lOVDY0X1QKKysjIGRlZmluZSBJTlRNQVhfQyh4KSAgIElOVDY0X0MoeCkKKysjZWxzZQorKyMgZGVmaW5lIElOVE1BWF9DKHgpICAgeCMjTAorICNlbmRpZgorIAorLSNpZm5kZWYgVUlOVE1BWF9DCistIyBpZiBASEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UQCAmJiBVTE9OR19NQVggPj4gMzEgPT0gMQorLSMgIGRlZmluZSBVSU5UTUFYX0MoeCkgIHgjI1VMTAorLSMgZWxpZiBkZWZpbmVkIEdMX1VJTlQ2NF9UCistIyAgZGVmaW5lIFVJTlRNQVhfQyh4KSAgVUlOVDY0X0MoeCkKKy0jIGVsc2UKKy0jICBkZWZpbmUgVUlOVE1BWF9DKHgpICB4IyNVTAorLSMgZW5kaWYKKysjdW5kZWYgVUlOVE1BWF9DCisrI2lmIEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRAICYmIFVMT05HX01BWCA+PiAzMSA9PSAxCisrIyBkZWZpbmUgVUlOVE1BWF9DKHgpICB4IyNVTEwKKysjZWxpZiBkZWZpbmVkIEdMX1VJTlQ2NF9UCisrIyBkZWZpbmUgVUlOVE1BWF9DKHgpICBVSU5UNjRfQyh4KQorKyNlbHNlCisrIyBkZWZpbmUgVUlOVE1BWF9DKHgpICB4IyNVTAorICNlbmRpZgorIAorICNlbmRpZiAvKiAhZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9fU1REQ19DT05TVEFOVF9NQUNST1MgKi8KKyAKKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NURElOVF9IICovCistI2VuZGlmIC8qICFkZWZpbmVkIF9AR1VBUkRfUFJFRklYQF9TVERJTlRfSCAmJiAhZGVmaW5lZCBfR0xfSlVTVF9JTkNMVURFX1NZU1RFTV9TVERJTlRfSCAqLworKyNlbmRpZiAvKiBfR0xfU1RESU5UX0ggKi8KKysjZW5kaWYgLyogIWRlZmluZWQgX0dMX1NURElOVF9IICYmICFkZWZpbmVkIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVNX1NURElOVF9IICovCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0ZGlvLmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RkaW8uaW4uaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RkaW8uaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3N0ZGlvLmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC4zNzg0ODQ0NTkgLTA4MDAKK0BAIC0zNSw3ICszNSw3IEBACisgI2Vsc2UKKyAvKiBOb3JtYWwgaW52b2NhdGlvbiBjb252ZW50aW9uLiAgKi8KKyAKKy0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TVERJT19ICisrI2lmbmRlZiBfR0xfU1RESU9fSAorIAorICNkZWZpbmUgX0dMX0FMUkVBRFlfSU5DTFVESU5HX1NURElPX0gKKyAKK0BAIC00NCw4ICs0NCw4IEBACisgCisgI3VuZGVmIF9HTF9BTFJFQURZX0lOQ0xVRElOR19TVERJT19ICisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1RESU9fSAorLSNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX1NURElPX0gKKysjaWZuZGVmIF9HTF9TVERJT19ICisrI2RlZmluZSBfR0xfU1RESU9fSAorIAorIC8qIEdldCB2YV9saXN0LiAgTmVlZGVkIG9uIG1hbnkgc3lzdGVtcywgaW5jbHVkaW5nIGdsaWJjIDIuOC4gICovCisgI2luY2x1ZGUgPHN0ZGFyZy5oPgorQEAgLTQ2MSw2ICs0NjEsMjUgQEAgX0dMX0ZVTkNERUNMX1NZUyAoZnNlZWtvLCBpbnQsIChGSUxFICpmcAorIF9HTF9DWFhBTElBU19TWVMgKGZzZWVrbywgaW50LCAoRklMRSAqZnAsIG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSkpOworICMgZW5kaWYKKyBfR0xfQ1hYQUxJQVNXQVJOIChmc2Vla28pOworKyMgaWYgKEBSRVBMQUNFX0ZTRUVLT0AgfHwgIUBIQVZFX0ZTRUVLT0ApICYmICFAR05VTElCX0ZTRUVLQAorKyAgIC8qIFByb3ZpZGUgYW4gZnNlZWsgZnVuY3Rpb24gdGhhdCBpcyBjb25zaXN0ZW50IHdpdGggZnNlZWtvLiAgKi8KKysgICAvKiBJbiBvcmRlciB0byBhdm9pZCB0aGF0IGZzZWVrIGdldHMgZGVmaW5lZCBhcyBhIG1hY3JvIGhlcmUsIHRoZQorKyAgICAgIGRldmVsb3BlciBjYW4gcmVxdWVzdCB0aGUgJ2ZzZWVrJyBtb2R1bGUuICAqLworKyMgIGlmICFHTlVMSUJfZGVmaW5lZF9mc2Vla19mdW5jdGlvbgorKyMgICB1bmRlZiBmc2VlaworKyMgICBkZWZpbmUgZnNlZWsgcnBsX2ZzZWVrCisrc3RhdGljIGlubGluZSBpbnQgX0dMX0FSR19OT05OVUxMICgoMSkpCisrcnBsX2ZzZWVrIChGSUxFICpmcCwgbG9uZyBvZmZzZXQsIGludCB3aGVuY2UpCisreworKyMgICBpZiBAUkVQTEFDRV9GU0VFS09ACisrICByZXR1cm4gcnBsX2ZzZWVrbyAoZnAsIG9mZnNldCwgd2hlbmNlKTsKKysjICAgZWxzZQorKyAgcmV0dXJuIGZzZWVrbyAoZnAsIG9mZnNldCwgd2hlbmNlKTsKKysjICAgZW5kaWYKKyt9CisrIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9mc2Vla19mdW5jdGlvbiAxCisrIyAgZW5kaWYKKysjIGVuZGlmCisgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICMgZGVmaW5lIF9HTF9GU0VFS19XQVJOIC8qIENhdGVnb3J5IDEsIGFib3ZlLiAgKi8KKyAjIHVuZGVmIGZzZWVrCitAQCAtNTIwLDYgKzUzOSwyNSBAQCBfR0xfRlVOQ0RFQ0xfU1lTIChmdGVsbG8sIG9mZl90LCAoRklMRSAqCisgX0dMX0NYWEFMSUFTX1NZUyAoZnRlbGxvLCBvZmZfdCwgKEZJTEUgKmZwKSk7CisgIyBlbmRpZgorIF9HTF9DWFhBTElBU1dBUk4gKGZ0ZWxsbyk7CisrIyBpZiAoQFJFUExBQ0VfRlRFTExPQCB8fCAhQEhBVkVfRlRFTExPQCkgJiYgIUBHTlVMSUJfRlRFTExACisrICAgLyogUHJvdmlkZSBhbiBmdGVsbCBmdW5jdGlvbiB0aGF0IGlzIGNvbnNpc3RlbnQgd2l0aCBmdGVsbG8uICAqLworKyAgIC8qIEluIG9yZGVyIHRvIGF2b2lkIHRoYXQgZnRlbGwgZ2V0cyBkZWZpbmVkIGFzIGEgbWFjcm8gaGVyZSwgdGhlCisrICAgICAgZGV2ZWxvcGVyIGNhbiByZXF1ZXN0IHRoZSAnZnRlbGwnIG1vZHVsZS4gICovCisrIyAgaWYgIUdOVUxJQl9kZWZpbmVkX2Z0ZWxsX2Z1bmN0aW9uCisrIyAgIHVuZGVmIGZ0ZWxsCisrIyAgIGRlZmluZSBmdGVsbCBycGxfZnRlbGwKKytzdGF0aWMgaW5saW5lIGxvbmcgX0dMX0FSR19OT05OVUxMICgoMSkpCisrcnBsX2Z0ZWxsIChGSUxFICpmKQorK3sKKysjICAgaWYgQFJFUExBQ0VfRlRFTExPQAorKyAgcmV0dXJuIHJwbF9mdGVsbG8gKGYpOworKyMgICBlbHNlCisrICByZXR1cm4gZnRlbGxvIChmKTsKKysjICAgZW5kaWYKKyt9CisrIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9mdGVsbF9mdW5jdGlvbiAxCisrIyAgZW5kaWYKKysjIGVuZGlmCisgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworICMgZGVmaW5lIF9HTF9GVEVMTF9XQVJOIC8qIENhdGVnb3J5IDEsIGFib3ZlLiAgKi8KKyAjIHVuZGVmIGZ0ZWxsCitAQCAtMTMwNyw2ICsxMzQ1LDYgQEAgX0dMX1dBUk5fT05fVVNFICh2c3ByaW50ZiwgInZzcHJpbnRmIGlzCisgI2VuZGlmCisgCisgCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TVERJT19IICovCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TVERJT19IICovCisrI2VuZGlmIC8qIF9HTF9TVERJT19IICovCisrI2VuZGlmIC8qIF9HTF9TVERJT19IICovCisgI2VuZGlmCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0ZGxpYi5pbi5oIGxpYmljb252LTEuMTQvc3JjbGliL3N0ZGxpYi5pbi5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdGRsaWIuaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3N0ZGxpYi5pbi5oCTIwMTItMDEtMDggMDI6MDc6NDAuMzkwNDg0NDU5IC0wODAwCitAQCAtMjgsMTMgKzI4LDEzIEBACisgI2Vsc2UKKyAvKiBOb3JtYWwgaW52b2NhdGlvbiBjb252ZW50aW9uLiAgKi8KKyAKKy0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TVERMSUJfSAorKyNpZm5kZWYgX0dMX1NURExJQl9ICisgCisgLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworICNASU5DTFVERV9ORVhUQCBATkVYVF9TVERMSUJfSEAKKyAKKy0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TVERMSUJfSAorLSNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX1NURExJQl9ICisrI2lmbmRlZiBfR0xfU1RETElCX0gKKysjZGVmaW5lIF9HTF9TVERMSUJfSAorIAorIC8qIE5ldEJTRCA1LjAgbWlzLWRlZmluZXMgTlVMTC4gICovCisgI2luY2x1ZGUgPHN0ZGRlZi5oPgorQEAgLTg5LDcgKzg5LDExIEBAIHN0cnVjdCByYW5kb21fZGF0YQorICMgaW5jbHVkZSA8dW5pc3RkLmg+CisgI2VuZGlmCisgCistLyogVGhlIGRlZmluaXRpb24gb2YgX05vcmV0dXJuIGlzIGNvcGllZCBoZXJlLiAgKi8KKysjaWYgMyA8PSBfX0dOVUNfXyB8fCBfX0dOVUNfXyA9PSAyICYmIDggPD0gX19HTlVDX01JTk9SX18KKysjIGRlZmluZSBfR0xfQVRUUklCVVRFX05PUkVUVVJOIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKQorKyNlbHNlCisrIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9OT1JFVFVSTgorKyNlbmRpZgorIAorIC8qIFRoZSBkZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBMIGV0Yy4gYXJlIGNvcGllZCBoZXJlLiAgKi8KKyAKK0BAIC0xMTYsNyArMTIwLDcgQEAgc3RydWN0IHJhbmRvbV9kYXRhCisgLyogVGVybWluYXRlIHRoZSBjdXJyZW50IHByb2Nlc3Mgd2l0aCB0aGUgZ2l2ZW4gcmV0dXJuIGNvZGUsIHdpdGhvdXQgcnVubmluZworICAgIHRoZSAnYXRleGl0JyBoYW5kbGVycy4gICovCisgIyBpZiAhQEhBVkVfX0VYSVRACistX0dMX0ZVTkNERUNMX1NZUyAoX0V4aXQsIF9Ob3JldHVybiB2b2lkLCAoaW50IHN0YXR1cykpOworK19HTF9GVU5DREVDTF9TWVMgKF9FeGl0LCB2b2lkLCAoaW50IHN0YXR1cykgX0dMX0FUVFJJQlVURV9OT1JFVFVSTik7CisgIyBlbmRpZgorIF9HTF9DWFhBTElBU19TWVMgKF9FeGl0LCB2b2lkLCAoaW50IHN0YXR1cykpOworIF9HTF9DWFhBTElBU1dBUk4gKF9FeGl0KTsKK0BAIC03NTcsNiArNzYxLDYgQEAgX0dMX0NYWEFMSUFTV0FSTiAod2N0b21iKTsKKyAjZW5kaWYKKyAKKyAKKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NURExJQl9IICovCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TVERMSUJfSCAqLworKyNlbmRpZiAvKiBfR0xfU1RETElCX0ggKi8KKysjZW5kaWYgLyogX0dMX1NURExJQl9IICovCisgI2VuZGlmCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0cmVycm9yLmMgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RyZXJyb3IuYworLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RyZXJyb3IuYwkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3N0cmVycm9yLmMJMjAxMi0wMS0wOCAwMjowNzo0MC40MDY0ODQ0NjEgLTA4MDAKK0BAIC0xNyw1NCArMTcsMzQwIEBACisgCisgI2luY2x1ZGUgPGNvbmZpZy5oPgorIAorLS8qIFNwZWNpZmljYXRpb24uICAqLworICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKy0jaW5jbHVkZSA8ZXJybm8uaD4KKy0jaW5jbHVkZSA8c3RkaW8uaD4KKy0jaW5jbHVkZSA8c3RkbGliLmg+CistI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpZiBSRVBMQUNFX1NUUkVSUk9SCisrCisrIyBpbmNsdWRlIDxlcnJuby5oPgorKyMgaW5jbHVkZSA8c3RkaW8uaD4KKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VTT0NLIC8qIG5hdGl2ZSBXaW5kb3dzIHBsYXRmb3JtcyAqLworKyMgIGlmIEhBVkVfV0lOU09DSzJfSAorKyMgICBpbmNsdWRlIDx3aW5zb2NrMi5oPgorKyMgIGVuZGlmCisrIyBlbmRpZgorIAorLSNpbmNsdWRlICJpbnRwcm9wcy5oIgorLSNpbmNsdWRlICJzdHJlcnJvci1vdmVycmlkZS5oIgorLSNpbmNsdWRlICJ2ZXJpZnkuaCIKKysjIGluY2x1ZGUgImludHByb3BzLmgiCisgCisgLyogVXNlIHRoZSBzeXN0ZW0gZnVuY3Rpb25zLCBub3QgdGhlIGdudWxpYiBvdmVycmlkZXMgaW4gdGhpcyBmaWxlLiAgKi8KKy0jdW5kZWYgc3ByaW50ZgorKyMgdW5kZWYgc3ByaW50ZgorKworKyMgdW5kZWYgc3RyZXJyb3IKKysjIGlmICEgSEFWRV9ERUNMX1NUUkVSUk9SCisrIyAgZGVmaW5lIHN0cmVycm9yKG4pIE5VTEwKKysjIGVuZGlmCisgCisgY2hhciAqCistc3RyZXJyb3IgKGludCBuKQorLSN1bmRlZiBzdHJlcnJvcgorK3JwbF9zdHJlcnJvciAoaW50IG4pCisgeworLSAgc3RhdGljIGNoYXIgYnVmW1NUQUNLQlVGX0xFTl07CistICBzaXplX3QgbGVuOworKyAgY2hhciBjb25zdCAqbXNnID0gTlVMTDsKKysgIC8qIFRoZXNlIGVycm9yIG1lc3NhZ2VzIGFyZSB0YWtlbiBmcm9tIGdsaWJjL3N5c2RlcHMvZ251L2Vycmxpc3QuYy4gICovCisrICBzd2l0Y2ggKG4pCisrICAgIHsKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VUWFRCU1kKKysgICAgY2FzZSBFVFhUQlNZOgorKyAgICAgIG1zZyA9ICJUZXh0IGZpbGUgYnVzeSI7CisrICAgICAgYnJlYWs7CisrIyBlbmRpZgorKworKyMgaWYgR05VTElCX2RlZmluZWRfRVNPQ0sgLyogbmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zICovCisrICAgIC8qIEVXT1VMREJMT0NLIGlzIHRoZSBzYW1lIGFzIEVBR0FJTi4gICovCisrICAgIGNhc2UgRUlOUFJPR1JFU1M6CisrICAgICAgbXNnID0gIk9wZXJhdGlvbiBub3cgaW4gcHJvZ3Jlc3MiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVBTFJFQURZOgorKyAgICAgIG1zZyA9ICJPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcyI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU5PVFNPQ0s6CisrICAgICAgbXNnID0gIlNvY2tldCBvcGVyYXRpb24gb24gbm9uLXNvY2tldCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRURFU1RBRERSUkVROgorKyAgICAgIG1zZyA9ICJEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTVNHU0laRToKKysgICAgICBtc2cgPSAiTWVzc2FnZSB0b28gbG9uZyI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRVBST1RPVFlQRToKKysgICAgICBtc2cgPSAiUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0IjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTk9QUk9UT09QVDoKKysgICAgICBtc2cgPSAiUHJvdG9jb2wgbm90IGF2YWlsYWJsZSI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRVBST1RPTk9TVVBQT1JUOgorKyAgICAgIG1zZyA9ICJQcm90b2NvbCBub3Qgc3VwcG9ydGVkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFU09DS1ROT1NVUFBPUlQ6CisrICAgICAgbXNnID0gIlNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVPUE5PVFNVUFA6CisrICAgICAgbXNnID0gIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFUEZOT1NVUFBPUlQ6CisrICAgICAgbXNnID0gIlByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFQUZOT1NVUFBPUlQ6CisrICAgICAgbXNnID0gIkFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVBRERSSU5VU0U6CisrICAgICAgbXNnID0gIkFkZHJlc3MgYWxyZWFkeSBpbiB1c2UiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVBRERSTk9UQVZBSUw6CisrICAgICAgbXNnID0gIkNhbm5vdCBhc3NpZ24gcmVxdWVzdGVkIGFkZHJlc3MiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVORVRET1dOOgorKyAgICAgIG1zZyA9ICJOZXR3b3JrIGlzIGRvd24iOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVORVRVTlJFQUNIOgorKyAgICAgIG1zZyA9ICJOZXR3b3JrIGlzIHVucmVhY2hhYmxlIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTkVUUkVTRVQ6CisrICAgICAgbXNnID0gIk5ldHdvcmsgZHJvcHBlZCBjb25uZWN0aW9uIG9uIHJlc2V0IjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFQ09OTkFCT1JURUQ6CisrICAgICAgbXNnID0gIlNvZnR3YXJlIGNhdXNlZCBjb25uZWN0aW9uIGFib3J0IjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFQ09OTlJFU0VUOgorKyAgICAgIG1zZyA9ICJDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVOT0JVRlM6CisrICAgICAgbXNnID0gIk5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVJU0NPTk46CisrICAgICAgbXNnID0gIlRyYW5zcG9ydCBlbmRwb2ludCBpcyBhbHJlYWR5IGNvbm5lY3RlZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU5PVENPTk46CisrICAgICAgbXNnID0gIlRyYW5zcG9ydCBlbmRwb2ludCBpcyBub3QgY29ubmVjdGVkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFU0hVVERPV046CisrICAgICAgbXNnID0gIkNhbm5vdCBzZW5kIGFmdGVyIHRyYW5zcG9ydCBlbmRwb2ludCBzaHV0ZG93biI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRVRPT01BTllSRUZTOgorKyAgICAgIG1zZyA9ICJUb28gbWFueSByZWZlcmVuY2VzOiBjYW5ub3Qgc3BsaWNlIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFVElNRURPVVQ6CisrICAgICAgbXNnID0gIkNvbm5lY3Rpb24gdGltZWQgb3V0IjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFQ09OTlJFRlVTRUQ6CisrICAgICAgbXNnID0gIkNvbm5lY3Rpb24gcmVmdXNlZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRUxPT1A6CisrICAgICAgbXNnID0gIlRvbyBtYW55IGxldmVscyBvZiBzeW1ib2xpYyBsaW5rcyI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRUhPU1RET1dOOgorKyAgICAgIG1zZyA9ICJIb3N0IGlzIGRvd24iOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVIT1NUVU5SRUFDSDoKKysgICAgICBtc2cgPSAiTm8gcm91dGUgdG8gaG9zdCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRVBST0NMSU06CisrICAgICAgbXNnID0gIlRvbyBtYW55IHByb2Nlc3NlcyI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRVVTRVJTOgorKyAgICAgIG1zZyA9ICJUb28gbWFueSB1c2VycyI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRURRVU9UOgorKyAgICAgIG1zZyA9ICJEaXNrIHF1b3RhIGV4Y2VlZGVkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFU1RBTEU6CisrICAgICAgbXNnID0gIlN0YWxlIE5GUyBmaWxlIGhhbmRsZSI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRVJFTU9URToKKysgICAgICBtc2cgPSAiT2JqZWN0IGlzIHJlbW90ZSI7CisrICAgICAgYnJlYWs7CisrIyAgaWYgSEFWRV9XSU5TT0NLMl9ICisrICAgIC8qIFdTQV9JTlZBTElEX0hBTkRMRSBtYXBzIHRvIEVCQURGICovCisrICAgIC8qIFdTQV9OT1RfRU5PVUdIX01FTU9SWSBtYXBzIHRvIEVOT01FTSAqLworKyAgICAvKiBXU0FfSU5WQUxJRF9QQVJBTUVURVIgbWFwcyB0byBFSU5WQUwgKi8KKysgICAgY2FzZSBXU0FfT1BFUkFUSU9OX0FCT1JURUQ6CisrICAgICAgbXNnID0gIk92ZXJsYXBwZWQgb3BlcmF0aW9uIGFib3J0ZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQV9JT19JTkNPTVBMRVRFOgorKyAgICAgIG1zZyA9ICJPdmVybGFwcGVkIEkvTyBldmVudCBvYmplY3Qgbm90IGluIHNpZ25hbGVkIHN0YXRlIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FfSU9fUEVORElORzoKKysgICAgICBtc2cgPSAiT3ZlcmxhcHBlZCBvcGVyYXRpb25zIHdpbGwgY29tcGxldGUgbGF0ZXIiOworKyAgICAgIGJyZWFrOworKyAgICAvKiBXU0FFSU5UUiBtYXBzIHRvIEVJTlRSICovCisrICAgIC8qIFdTQUVCQURGIG1hcHMgdG8gRUJBREYgKi8KKysgICAgLyogV1NBRUFDQ0VTIG1hcHMgdG8gRUFDQ0VTICovCisrICAgIC8qIFdTQUVGQVVMVCBtYXBzIHRvIEVGQVVMVCAqLworKyAgICAvKiBXU0FFSU5WQUwgbWFwcyB0byBFSU5WQUwgKi8KKysgICAgLyogV1NBRU1GSUxFIG1hcHMgdG8gRU1GSUxFICovCisrICAgIC8qIFdTQUVXT1VMREJMT0NLIG1hcHMgdG8gRVdPVUxEQkxPQ0sgKi8KKysgICAgLyogV1NBRUlOUFJPR1JFU1MgaXMgRUlOUFJPR1JFU1MgKi8KKysgICAgLyogV1NBRUFMUkVBRFkgaXMgRUFMUkVBRFkgKi8KKysgICAgLyogV1NBRU5PVFNPQ0sgaXMgRU5PVFNPQ0sgKi8KKysgICAgLyogV1NBRURFU1RBRERSUkVRIGlzIEVERVNUQUREUlJFUSAqLworKyAgICAvKiBXU0FFTVNHU0laRSBpcyBFTVNHU0laRSAqLworKyAgICAvKiBXU0FFUFJPVE9UWVBFIGlzIEVQUk9UT1RZUEUgKi8KKysgICAgLyogV1NBRU5PUFJPVE9PUFQgaXMgRU5PUFJPVE9PUFQgKi8KKysgICAgLyogV1NBRVBST1RPTk9TVVBQT1JUIGlzIEVQUk9UT05PU1VQUE9SVCAqLworKyAgICAvKiBXU0FFU09DS1ROT1NVUFBPUlQgaXMgRVNPQ0tUTk9TVVBQT1JUICovCisrICAgIC8qIFdTQUVPUE5PVFNVUFAgaXMgRU9QTk9UU1VQUCAqLworKyAgICAvKiBXU0FFUEZOT1NVUFBPUlQgaXMgRVBGTk9TVVBQT1JUICovCisrICAgIC8qIFdTQUVBRk5PU1VQUE9SVCBpcyBFQUZOT1NVUFBPUlQgKi8KKysgICAgLyogV1NBRUFERFJJTlVTRSBpcyBFQUREUklOVVNFICovCisrICAgIC8qIFdTQUVBRERSTk9UQVZBSUwgaXMgRUFERFJOT1RBVkFJTCAqLworKyAgICAvKiBXU0FFTkVURE9XTiBpcyBFTkVURE9XTiAqLworKyAgICAvKiBXU0FFTkVUVU5SRUFDSCBpcyBFTkVUVU5SRUFDSCAqLworKyAgICAvKiBXU0FFTkVUUkVTRVQgaXMgRU5FVFJFU0VUICovCisrICAgIC8qIFdTQUVDT05OQUJPUlRFRCBpcyBFQ09OTkFCT1JURUQgKi8KKysgICAgLyogV1NBRUNPTk5SRVNFVCBpcyBFQ09OTlJFU0VUICovCisrICAgIC8qIFdTQUVOT0JVRlMgaXMgRU5PQlVGUyAqLworKyAgICAvKiBXU0FFSVNDT05OIGlzIEVJU0NPTk4gKi8KKysgICAgLyogV1NBRU5PVENPTk4gaXMgRU5PVENPTk4gKi8KKysgICAgLyogV1NBRVNIVVRET1dOIGlzIEVTSFVURE9XTiAqLworKyAgICAvKiBXU0FFVE9PTUFOWVJFRlMgaXMgRVRPT01BTllSRUZTICovCisrICAgIC8qIFdTQUVUSU1FRE9VVCBpcyBFVElNRURPVVQgKi8KKysgICAgLyogV1NBRUNPTk5SRUZVU0VEIGlzIEVDT05OUkVGVVNFRCAqLworKyAgICAvKiBXU0FFTE9PUCBpcyBFTE9PUCAqLworKyAgICAvKiBXU0FFTkFNRVRPT0xPTkcgbWFwcyB0byBFTkFNRVRPT0xPTkcgKi8KKysgICAgLyogV1NBRUhPU1RET1dOIGlzIEVIT1NURE9XTiAqLworKyAgICAvKiBXU0FFSE9TVFVOUkVBQ0ggaXMgRUhPU1RVTlJFQUNIICovCisrICAgIC8qIFdTQUVOT1RFTVBUWSBtYXBzIHRvIEVOT1RFTVBUWSAqLworKyAgICAvKiBXU0FFUFJPQ0xJTSBpcyBFUFJPQ0xJTSAqLworKyAgICAvKiBXU0FFVVNFUlMgaXMgRVVTRVJTICovCisrICAgIC8qIFdTQUVEUVVPVCBpcyBFRFFVT1QgKi8KKysgICAgLyogV1NBRVNUQUxFIGlzIEVTVEFMRSAqLworKyAgICAvKiBXU0FFUkVNT1RFIGlzIEVSRU1PVEUgKi8KKysgICAgY2FzZSBXU0FTWVNOT1RSRUFEWToKKysgICAgICBtc2cgPSAiTmV0d29yayBzdWJzeXN0ZW0gaXMgdW5hdmFpbGFibGUiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQVZFUk5PVFNVUFBPUlRFRDoKKysgICAgICBtc2cgPSAiV2luc29jay5kbGwgdmVyc2lvbiBvdXQgb2YgcmFuZ2UiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQU5PVElOSVRJQUxJU0VEOgorKyAgICAgIG1zZyA9ICJTdWNjZXNzZnVsIFdTQVN0YXJ0dXAgbm90IHlldCBwZXJmb3JtZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQUVESVNDT046CisrICAgICAgbXNnID0gIkdyYWNlZnVsIHNodXRkb3duIGluIHByb2dyZXNzIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FFTk9NT1JFOiBjYXNlIFdTQV9FX05PX01PUkU6CisrICAgICAgbXNnID0gIk5vIG1vcmUgcmVzdWx0cyI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBRUNBTkNFTExFRDogY2FzZSBXU0FfRV9DQU5DRUxMRUQ6CisrICAgICAgbXNnID0gIkNhbGwgd2FzIGNhbmNlbGVkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FFSU5WQUxJRFBST0NUQUJMRToKKysgICAgICBtc2cgPSAiUHJvY2VkdXJlIGNhbGwgdGFibGUgaXMgaW52YWxpZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBRUlOVkFMSURQUk9WSURFUjoKKysgICAgICBtc2cgPSAiU2VydmljZSBwcm92aWRlciBpcyBpbnZhbGlkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FFUFJPVklERVJGQUlMRURJTklUOgorKyAgICAgIG1zZyA9ICJTZXJ2aWNlIHByb3ZpZGVyIGZhaWxlZCB0byBpbml0aWFsaXplIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FTWVNDQUxMRkFJTFVSRToKKysgICAgICBtc2cgPSAiU3lzdGVtIGNhbGwgZmFpbHVyZSI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBU0VSVklDRV9OT1RfRk9VTkQ6CisrICAgICAgbXNnID0gIlNlcnZpY2Ugbm90IGZvdW5kIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FUWVBFX05PVF9GT1VORDoKKysgICAgICBtc2cgPSAiQ2xhc3MgdHlwZSBub3QgZm91bmQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQUVSRUZVU0VEOgorKyAgICAgIG1zZyA9ICJEYXRhYmFzZSBxdWVyeSB3YXMgcmVmdXNlZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBSE9TVF9OT1RfRk9VTkQ6CisrICAgICAgbXNnID0gIkhvc3Qgbm90IGZvdW5kIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FUUllfQUdBSU46CisrICAgICAgbXNnID0gIk5vbmF1dGhvcml0YXRpdmUgaG9zdCBub3QgZm91bmQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQU5PX1JFQ09WRVJZOgorKyAgICAgIG1zZyA9ICJOb25yZWNvdmVyYWJsZSBlcnJvciI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBTk9fREFUQToKKysgICAgICBtc2cgPSAiVmFsaWQgbmFtZSwgbm8gZGF0YSByZWNvcmQgb2YgcmVxdWVzdGVkIHR5cGUiOworKyAgICAgIGJyZWFrOworKyAgICAvKiBXU0FfUU9TXyogb21pdHRlZCAqLworKyMgIGVuZGlmCisrIyBlbmRpZgorKworKyMgaWYgR05VTElCX2RlZmluZWRfRU5PTVNHCisrICAgIGNhc2UgRU5PTVNHOgorKyAgICAgIG1zZyA9ICJObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZSI7CisrICAgICAgYnJlYWs7CisrIyBlbmRpZgorKworKyMgaWYgR05VTElCX2RlZmluZWRfRUlEUk0KKysgICAgY2FzZSBFSURSTToKKysgICAgICBtc2cgPSAiSWRlbnRpZmllciByZW1vdmVkIjsKKysgICAgICBicmVhazsKKysjIGVuZGlmCisrCisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FTk9MSU5LCisrICAgIGNhc2UgRU5PTElOSzoKKysgICAgICBtc2cgPSAiTGluayBoYXMgYmVlbiBzZXZlcmVkIjsKKysgICAgICBicmVhazsKKysjIGVuZGlmCisrCisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FUFJPVE8KKysgICAgY2FzZSBFUFJPVE86CisrICAgICAgbXNnID0gIlByb3RvY29sIGVycm9yIjsKKysgICAgICBicmVhazsKKysjIGVuZGlmCisrCisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FTVVMVElIT1AKKysgICAgY2FzZSBFTVVMVElIT1A6CisrICAgICAgbXNnID0gIk11bHRpaG9wIGF0dGVtcHRlZCI7CisrICAgICAgYnJlYWs7CisrIyBlbmRpZgorKworKyMgaWYgR05VTElCX2RlZmluZWRfRUJBRE1TRworKyAgICBjYXNlIEVCQURNU0c6CisrICAgICAgbXNnID0gIkJhZCBtZXNzYWdlIjsKKysgICAgICBicmVhazsKKysjIGVuZGlmCisrCisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FT1ZFUkZMT1cKKysgICAgY2FzZSBFT1ZFUkZMT1c6CisrICAgICAgbXNnID0gIlZhbHVlIHRvbyBsYXJnZSBmb3IgZGVmaW5lZCBkYXRhIHR5cGUiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VOT1RTVVAKKysgICAgY2FzZSBFTk9UU1VQOgorKyAgICAgIG1zZyA9ICJOb3Qgc3VwcG9ydGVkIjsKKysgICAgICBicmVhazsKKysjIGVuZGlmCisrCisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FU1RBTEUKKysgICAgY2FzZSBFU1RBTEU6CisrICAgICAgbXNnID0gIlN0YWxlIE5GUyBmaWxlIGhhbmRsZSI7CisrICAgICAgYnJlYWs7CisrIyBlbmRpZgorKworKyMgaWYgR05VTElCX2RlZmluZWRfRURRVU9UCisrICAgIGNhc2UgRURRVU9UOgorKyAgICAgIG1zZyA9ICJEaXNrIHF1b3RhIGV4Y2VlZGVkIjsKKysgICAgICBicmVhazsKKysjIGVuZGlmCisrCisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FQ0FOQ0VMRUQKKysgICAgY2FzZSBFQ0FOQ0VMRUQ6CisrICAgICAgbXNnID0gIk9wZXJhdGlvbiBjYW5jZWxlZCI7CisrICAgICAgYnJlYWs7CisrIyBlbmRpZgorKyAgICB9CisgCistICAvKiBDYXN0IGF3YXkgY29uc3QsIGR1ZSB0byB0aGUgaGlzdG9yaWNhbCBzaWduYXR1cmUgb2Ygc3RyZXJyb3I7CistICAgICBjYWxsZXJzIHNob3VsZCBub3QgYmUgbW9kaWZ5aW5nIHRoZSBzdHJpbmcuICAqLworLSAgY29uc3QgY2hhciAqbXNnID0gc3RyZXJyb3Jfb3ZlcnJpZGUgKG4pOworICAgaWYgKG1zZykKKyAgICAgcmV0dXJuIChjaGFyICopIG1zZzsKKyAKKy0gIG1zZyA9IHN0cmVycm9yIChuKTsKKysgIHsKKysgICAgY2hhciAqcmVzdWx0ID0gc3RyZXJyb3IgKG4pOworIAorLSAgLyogT3VyIHN0cmVycm9yX3IgaW1wbGVtZW50YXRpb24gbWlnaHQgdXNlIHRoZSBzeXN0ZW0ncyBzdHJlcnJvcgorLSAgICAgYnVmZmVyLCBzbyBhbGwgb3RoZXIgY2xpZW50cyBvZiBzdHJlcnJvciBoYXZlIHRvIHNlZSB0aGUgZXJyb3IKKy0gICAgIGNvcGllZCBpbnRvIGEgYnVmZmVyIHRoYXQgd2UgbWFuYWdlLiAgVGhpcyBpcyBub3QgdGhyZWFkLXNhZmUsCistICAgICBldmVuIGlmIHRoZSBzeXN0ZW0gc3RyZXJyb3IgaXMsIGJ1dCBwb3J0YWJsZSBwcm9ncmFtcyBzaG91bGRuJ3QKKy0gICAgIGJlIHVzaW5nIHN0cmVycm9yIGlmIHRoZXkgY2FyZSBhYm91dCB0aHJlYWQtc2FmZXR5LiAgKi8KKy0gIGlmICghbXNnIHx8ICEqbXNnKQorLSAgICB7CistICAgICAgc3RhdGljIGNoYXIgY29uc3QgZm10W10gPSAiVW5rbm93biBlcnJvciAlZCI7CistICAgICAgdmVyaWZ5IChzaXplb2YgYnVmID49IHNpemVvZiAoZm10KSArIElOVF9TVFJMRU5fQk9VTkQgKG4pKTsKKy0gICAgICBzcHJpbnRmIChidWYsIGZtdCwgbik7CistICAgICAgZXJybm8gPSBFSU5WQUw7CistICAgICAgcmV0dXJuIGJ1ZjsKKy0gICAgfQorKyAgICBpZiAocmVzdWx0ID09IE5VTEwgfHwgcmVzdWx0WzBdID09ICdcMCcpCisrICAgICAgeworKyAgICAgICAgc3RhdGljIGNoYXIgY29uc3QgZm10W10gPSAiVW5rbm93biBlcnJvciAoJWQpIjsKKysgICAgICAgIHN0YXRpYyBjaGFyIG1zZ19idWZbc2l6ZW9mIGZtdCArIElOVF9TVFJMRU5fQk9VTkQgKG4pXTsKKysgICAgICAgIHNwcmludGYgKG1zZ19idWYsIGZtdCwgbik7CisrICAgICAgICByZXR1cm4gbXNnX2J1ZjsKKysgICAgICB9CisgCistICAvKiBGaXggU1RBQ0tCVUZfTEVOIGlmIHRoaXMgZXZlciBhYm9ydHMuICAqLworLSAgbGVuID0gc3RybGVuIChtc2cpOworLSAgaWYgKHNpemVvZiBidWYgPD0gbGVuKQorLSAgICBhYm9ydCAoKTsKKy0KKy0gIHJldHVybiBtZW1jcHkgKGJ1ZiwgbXNnLCBsZW4gKyAxKTsKKysgICAgcmV0dXJuIHJlc3VsdDsKKysgIH0KKyB9CisrCisrI2VuZGlmCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0cmVycm9yLW92ZXJyaWRlLmMgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuYworLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuYwkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3N0cmVycm9yLW92ZXJyaWRlLmMJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKK0BAIC0xLDI3OSArMCwwIEBACistLyogc3RyZXJyb3Itb3ZlcnJpZGUuYyAtLS0gUE9TSVggY29tcGF0aWJsZSBzeXN0ZW0gZXJyb3Igcm91dGluZQorLQorLSAgIENvcHlyaWdodCAoQykgMjAxMC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorLSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKy0KKy0vKiBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPiwgMjAxMC4gICovCistCistI2luY2x1ZGUgPGNvbmZpZy5oPgorLQorLSNpbmNsdWRlICJzdHJlcnJvci1vdmVycmlkZS5oIgorLQorLSNpbmNsdWRlIDxlcnJuby5oPgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FU09DSyAvKiBuYXRpdmUgV2luZG93cyBwbGF0Zm9ybXMgKi8KKy0jIGlmIEhBVkVfV0lOU09DSzJfSAorLSMgIGluY2x1ZGUgPHdpbnNvY2syLmg+CistIyBlbmRpZgorLSNlbmRpZgorLQorLS8qIElmIEVSUk5VTSBtYXBzIHRvIGFuIGVycm5vIHZhbHVlIGRlZmluZWQgYnkgZ251bGliLCByZXR1cm4gYSBzdHJpbmcKKy0gICBkZXNjcmliaW5nIHRoZSBlcnJvci4gIE90aGVyd2lzZSByZXR1cm4gTlVMTC4gICovCistY29uc3QgY2hhciAqCistc3RyZXJyb3Jfb3ZlcnJpZGUgKGludCBlcnJudW0pCisteworLSAgLyogVGhlc2UgZXJyb3IgbWVzc2FnZXMgYXJlIHRha2VuIGZyb20gZ2xpYmMvc3lzZGVwcy9nbnUvZXJybGlzdC5jLiAgKi8KKy0gIHN3aXRjaCAoZXJybnVtKQorLSAgICB7CistI2lmIFJFUExBQ0VfU1RSRVJST1JfMAorLSAgICBjYXNlIDA6CistICAgICAgcmV0dXJuICJTdWNjZXNzIjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRVRYVEJTWQorLSAgICBjYXNlIEVUWFRCU1k6CistICAgICAgcmV0dXJuICJUZXh0IGZpbGUgYnVzeSI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VTT0NLIC8qIG5hdGl2ZSBXaW5kb3dzIHBsYXRmb3JtcyAqLworLSAgICAgIC8qIEVXT1VMREJMT0NLIGlzIHRoZSBzYW1lIGFzIEVBR0FJTi4gICovCistICAgIGNhc2UgRUlOUFJPR1JFU1M6CistICAgICAgcmV0dXJuICJPcGVyYXRpb24gbm93IGluIHByb2dyZXNzIjsKKy0gICAgY2FzZSBFQUxSRUFEWToKKy0gICAgICByZXR1cm4gIk9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzIjsKKy0gICAgY2FzZSBFTk9UU09DSzoKKy0gICAgICByZXR1cm4gIlNvY2tldCBvcGVyYXRpb24gb24gbm9uLXNvY2tldCI7CistICAgIGNhc2UgRURFU1RBRERSUkVROgorLSAgICAgIHJldHVybiAiRGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZCI7CistICAgIGNhc2UgRU1TR1NJWkU6CistICAgICAgcmV0dXJuICJNZXNzYWdlIHRvbyBsb25nIjsKKy0gICAgY2FzZSBFUFJPVE9UWVBFOgorLSAgICAgIHJldHVybiAiUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0IjsKKy0gICAgY2FzZSBFTk9QUk9UT09QVDoKKy0gICAgICByZXR1cm4gIlByb3RvY29sIG5vdCBhdmFpbGFibGUiOworLSAgICBjYXNlIEVQUk9UT05PU1VQUE9SVDoKKy0gICAgICByZXR1cm4gIlByb3RvY29sIG5vdCBzdXBwb3J0ZWQiOworLSAgICBjYXNlIEVTT0NLVE5PU1VQUE9SVDoKKy0gICAgICByZXR1cm4gIlNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQiOworLSAgICBjYXNlIEVPUE5PVFNVUFA6CistICAgICAgcmV0dXJuICJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCI7CistICAgIGNhc2UgRVBGTk9TVVBQT1JUOgorLSAgICAgIHJldHVybiAiUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQiOworLSAgICBjYXNlIEVBRk5PU1VQUE9SVDoKKy0gICAgICByZXR1cm4gIkFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiOworLSAgICBjYXNlIEVBRERSSU5VU0U6CistICAgICAgcmV0dXJuICJBZGRyZXNzIGFscmVhZHkgaW4gdXNlIjsKKy0gICAgY2FzZSBFQUREUk5PVEFWQUlMOgorLSAgICAgIHJldHVybiAiQ2Fubm90IGFzc2lnbiByZXF1ZXN0ZWQgYWRkcmVzcyI7CistICAgIGNhc2UgRU5FVERPV046CistICAgICAgcmV0dXJuICJOZXR3b3JrIGlzIGRvd24iOworLSAgICBjYXNlIEVORVRVTlJFQUNIOgorLSAgICAgIHJldHVybiAiTmV0d29yayBpcyB1bnJlYWNoYWJsZSI7CistICAgIGNhc2UgRU5FVFJFU0VUOgorLSAgICAgIHJldHVybiAiTmV0d29yayBkcm9wcGVkIGNvbm5lY3Rpb24gb24gcmVzZXQiOworLSAgICBjYXNlIEVDT05OQUJPUlRFRDoKKy0gICAgICByZXR1cm4gIlNvZnR3YXJlIGNhdXNlZCBjb25uZWN0aW9uIGFib3J0IjsKKy0gICAgY2FzZSBFQ09OTlJFU0VUOgorLSAgICAgIHJldHVybiAiQ29ubmVjdGlvbiByZXNldCBieSBwZWVyIjsKKy0gICAgY2FzZSBFTk9CVUZTOgorLSAgICAgIHJldHVybiAiTm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZSI7CistICAgIGNhc2UgRUlTQ09OTjoKKy0gICAgICByZXR1cm4gIlRyYW5zcG9ydCBlbmRwb2ludCBpcyBhbHJlYWR5IGNvbm5lY3RlZCI7CistICAgIGNhc2UgRU5PVENPTk46CistICAgICAgcmV0dXJuICJUcmFuc3BvcnQgZW5kcG9pbnQgaXMgbm90IGNvbm5lY3RlZCI7CistICAgIGNhc2UgRVNIVVRET1dOOgorLSAgICAgIHJldHVybiAiQ2Fubm90IHNlbmQgYWZ0ZXIgdHJhbnNwb3J0IGVuZHBvaW50IHNodXRkb3duIjsKKy0gICAgY2FzZSBFVE9PTUFOWVJFRlM6CistICAgICAgcmV0dXJuICJUb28gbWFueSByZWZlcmVuY2VzOiBjYW5ub3Qgc3BsaWNlIjsKKy0gICAgY2FzZSBFVElNRURPVVQ6CistICAgICAgcmV0dXJuICJDb25uZWN0aW9uIHRpbWVkIG91dCI7CistICAgIGNhc2UgRUNPTk5SRUZVU0VEOgorLSAgICAgIHJldHVybiAiQ29ubmVjdGlvbiByZWZ1c2VkIjsKKy0gICAgY2FzZSBFTE9PUDoKKy0gICAgICByZXR1cm4gIlRvbyBtYW55IGxldmVscyBvZiBzeW1ib2xpYyBsaW5rcyI7CistICAgIGNhc2UgRUhPU1RET1dOOgorLSAgICAgIHJldHVybiAiSG9zdCBpcyBkb3duIjsKKy0gICAgY2FzZSBFSE9TVFVOUkVBQ0g6CistICAgICAgcmV0dXJuICJObyByb3V0ZSB0byBob3N0IjsKKy0gICAgY2FzZSBFUFJPQ0xJTToKKy0gICAgICByZXR1cm4gIlRvbyBtYW55IHByb2Nlc3NlcyI7CistICAgIGNhc2UgRVVTRVJTOgorLSAgICAgIHJldHVybiAiVG9vIG1hbnkgdXNlcnMiOworLSAgICBjYXNlIEVEUVVPVDoKKy0gICAgICByZXR1cm4gIkRpc2sgcXVvdGEgZXhjZWVkZWQiOworLSAgICBjYXNlIEVTVEFMRToKKy0gICAgICByZXR1cm4gIlN0YWxlIE5GUyBmaWxlIGhhbmRsZSI7CistICAgIGNhc2UgRVJFTU9URToKKy0gICAgICByZXR1cm4gIk9iamVjdCBpcyByZW1vdGUiOworLSMgaWYgSEFWRV9XSU5TT0NLMl9ICistICAgICAgLyogV1NBX0lOVkFMSURfSEFORExFIG1hcHMgdG8gRUJBREYgKi8KKy0gICAgICAvKiBXU0FfTk9UX0VOT1VHSF9NRU1PUlkgbWFwcyB0byBFTk9NRU0gKi8KKy0gICAgICAvKiBXU0FfSU5WQUxJRF9QQVJBTUVURVIgbWFwcyB0byBFSU5WQUwgKi8KKy0gICAgY2FzZSBXU0FfT1BFUkFUSU9OX0FCT1JURUQ6CistICAgICAgcmV0dXJuICJPdmVybGFwcGVkIG9wZXJhdGlvbiBhYm9ydGVkIjsKKy0gICAgY2FzZSBXU0FfSU9fSU5DT01QTEVURToKKy0gICAgICByZXR1cm4gIk92ZXJsYXBwZWQgSS9PIGV2ZW50IG9iamVjdCBub3QgaW4gc2lnbmFsZWQgc3RhdGUiOworLSAgICBjYXNlIFdTQV9JT19QRU5ESU5HOgorLSAgICAgIHJldHVybiAiT3ZlcmxhcHBlZCBvcGVyYXRpb25zIHdpbGwgY29tcGxldGUgbGF0ZXIiOworLSAgICAgIC8qIFdTQUVJTlRSIG1hcHMgdG8gRUlOVFIgKi8KKy0gICAgICAvKiBXU0FFQkFERiBtYXBzIHRvIEVCQURGICovCistICAgICAgLyogV1NBRUFDQ0VTIG1hcHMgdG8gRUFDQ0VTICovCistICAgICAgLyogV1NBRUZBVUxUIG1hcHMgdG8gRUZBVUxUICovCistICAgICAgLyogV1NBRUlOVkFMIG1hcHMgdG8gRUlOVkFMICovCistICAgICAgLyogV1NBRU1GSUxFIG1hcHMgdG8gRU1GSUxFICovCistICAgICAgLyogV1NBRVdPVUxEQkxPQ0sgbWFwcyB0byBFV09VTERCTE9DSyAqLworLSAgICAgIC8qIFdTQUVJTlBST0dSRVNTIGlzIEVJTlBST0dSRVNTICovCistICAgICAgLyogV1NBRUFMUkVBRFkgaXMgRUFMUkVBRFkgKi8KKy0gICAgICAvKiBXU0FFTk9UU09DSyBpcyBFTk9UU09DSyAqLworLSAgICAgIC8qIFdTQUVERVNUQUREUlJFUSBpcyBFREVTVEFERFJSRVEgKi8KKy0gICAgICAvKiBXU0FFTVNHU0laRSBpcyBFTVNHU0laRSAqLworLSAgICAgIC8qIFdTQUVQUk9UT1RZUEUgaXMgRVBST1RPVFlQRSAqLworLSAgICAgIC8qIFdTQUVOT1BST1RPT1BUIGlzIEVOT1BST1RPT1BUICovCistICAgICAgLyogV1NBRVBST1RPTk9TVVBQT1JUIGlzIEVQUk9UT05PU1VQUE9SVCAqLworLSAgICAgIC8qIFdTQUVTT0NLVE5PU1VQUE9SVCBpcyBFU09DS1ROT1NVUFBPUlQgKi8KKy0gICAgICAvKiBXU0FFT1BOT1RTVVBQIGlzIEVPUE5PVFNVUFAgKi8KKy0gICAgICAvKiBXU0FFUEZOT1NVUFBPUlQgaXMgRVBGTk9TVVBQT1JUICovCistICAgICAgLyogV1NBRUFGTk9TVVBQT1JUIGlzIEVBRk5PU1VQUE9SVCAqLworLSAgICAgIC8qIFdTQUVBRERSSU5VU0UgaXMgRUFERFJJTlVTRSAqLworLSAgICAgIC8qIFdTQUVBRERSTk9UQVZBSUwgaXMgRUFERFJOT1RBVkFJTCAqLworLSAgICAgIC8qIFdTQUVORVRET1dOIGlzIEVORVRET1dOICovCistICAgICAgLyogV1NBRU5FVFVOUkVBQ0ggaXMgRU5FVFVOUkVBQ0ggKi8KKy0gICAgICAvKiBXU0FFTkVUUkVTRVQgaXMgRU5FVFJFU0VUICovCistICAgICAgLyogV1NBRUNPTk5BQk9SVEVEIGlzIEVDT05OQUJPUlRFRCAqLworLSAgICAgIC8qIFdTQUVDT05OUkVTRVQgaXMgRUNPTk5SRVNFVCAqLworLSAgICAgIC8qIFdTQUVOT0JVRlMgaXMgRU5PQlVGUyAqLworLSAgICAgIC8qIFdTQUVJU0NPTk4gaXMgRUlTQ09OTiAqLworLSAgICAgIC8qIFdTQUVOT1RDT05OIGlzIEVOT1RDT05OICovCistICAgICAgLyogV1NBRVNIVVRET1dOIGlzIEVTSFVURE9XTiAqLworLSAgICAgIC8qIFdTQUVUT09NQU5ZUkVGUyBpcyBFVE9PTUFOWVJFRlMgKi8KKy0gICAgICAvKiBXU0FFVElNRURPVVQgaXMgRVRJTUVET1VUICovCistICAgICAgLyogV1NBRUNPTk5SRUZVU0VEIGlzIEVDT05OUkVGVVNFRCAqLworLSAgICAgIC8qIFdTQUVMT09QIGlzIEVMT09QICovCistICAgICAgLyogV1NBRU5BTUVUT09MT05HIG1hcHMgdG8gRU5BTUVUT09MT05HICovCistICAgICAgLyogV1NBRUhPU1RET1dOIGlzIEVIT1NURE9XTiAqLworLSAgICAgIC8qIFdTQUVIT1NUVU5SRUFDSCBpcyBFSE9TVFVOUkVBQ0ggKi8KKy0gICAgICAvKiBXU0FFTk9URU1QVFkgbWFwcyB0byBFTk9URU1QVFkgKi8KKy0gICAgICAvKiBXU0FFUFJPQ0xJTSBpcyBFUFJPQ0xJTSAqLworLSAgICAgIC8qIFdTQUVVU0VSUyBpcyBFVVNFUlMgKi8KKy0gICAgICAvKiBXU0FFRFFVT1QgaXMgRURRVU9UICovCistICAgICAgLyogV1NBRVNUQUxFIGlzIEVTVEFMRSAqLworLSAgICAgIC8qIFdTQUVSRU1PVEUgaXMgRVJFTU9URSAqLworLSAgICBjYXNlIFdTQVNZU05PVFJFQURZOgorLSAgICAgIHJldHVybiAiTmV0d29yayBzdWJzeXN0ZW0gaXMgdW5hdmFpbGFibGUiOworLSAgICBjYXNlIFdTQVZFUk5PVFNVUFBPUlRFRDoKKy0gICAgICByZXR1cm4gIldpbnNvY2suZGxsIHZlcnNpb24gb3V0IG9mIHJhbmdlIjsKKy0gICAgY2FzZSBXU0FOT1RJTklUSUFMSVNFRDoKKy0gICAgICByZXR1cm4gIlN1Y2Nlc3NmdWwgV1NBU3RhcnR1cCBub3QgeWV0IHBlcmZvcm1lZCI7CistICAgIGNhc2UgV1NBRURJU0NPTjoKKy0gICAgICByZXR1cm4gIkdyYWNlZnVsIHNodXRkb3duIGluIHByb2dyZXNzIjsKKy0gICAgY2FzZSBXU0FFTk9NT1JFOiBjYXNlIFdTQV9FX05PX01PUkU6CistICAgICAgcmV0dXJuICJObyBtb3JlIHJlc3VsdHMiOworLSAgICBjYXNlIFdTQUVDQU5DRUxMRUQ6IGNhc2UgV1NBX0VfQ0FOQ0VMTEVEOgorLSAgICAgIHJldHVybiAiQ2FsbCB3YXMgY2FuY2VsZWQiOworLSAgICBjYXNlIFdTQUVJTlZBTElEUFJPQ1RBQkxFOgorLSAgICAgIHJldHVybiAiUHJvY2VkdXJlIGNhbGwgdGFibGUgaXMgaW52YWxpZCI7CistICAgIGNhc2UgV1NBRUlOVkFMSURQUk9WSURFUjoKKy0gICAgICByZXR1cm4gIlNlcnZpY2UgcHJvdmlkZXIgaXMgaW52YWxpZCI7CistICAgIGNhc2UgV1NBRVBST1ZJREVSRkFJTEVESU5JVDoKKy0gICAgICByZXR1cm4gIlNlcnZpY2UgcHJvdmlkZXIgZmFpbGVkIHRvIGluaXRpYWxpemUiOworLSAgICBjYXNlIFdTQVNZU0NBTExGQUlMVVJFOgorLSAgICAgIHJldHVybiAiU3lzdGVtIGNhbGwgZmFpbHVyZSI7CistICAgIGNhc2UgV1NBU0VSVklDRV9OT1RfRk9VTkQ6CistICAgICAgcmV0dXJuICJTZXJ2aWNlIG5vdCBmb3VuZCI7CistICAgIGNhc2UgV1NBVFlQRV9OT1RfRk9VTkQ6CistICAgICAgcmV0dXJuICJDbGFzcyB0eXBlIG5vdCBmb3VuZCI7CistICAgIGNhc2UgV1NBRVJFRlVTRUQ6CistICAgICAgcmV0dXJuICJEYXRhYmFzZSBxdWVyeSB3YXMgcmVmdXNlZCI7CistICAgIGNhc2UgV1NBSE9TVF9OT1RfRk9VTkQ6CistICAgICAgcmV0dXJuICJIb3N0IG5vdCBmb3VuZCI7CistICAgIGNhc2UgV1NBVFJZX0FHQUlOOgorLSAgICAgIHJldHVybiAiTm9uYXV0aG9yaXRhdGl2ZSBob3N0IG5vdCBmb3VuZCI7CistICAgIGNhc2UgV1NBTk9fUkVDT1ZFUlk6CistICAgICAgcmV0dXJuICJOb25yZWNvdmVyYWJsZSBlcnJvciI7CistICAgIGNhc2UgV1NBTk9fREFUQToKKy0gICAgICByZXR1cm4gIlZhbGlkIG5hbWUsIG5vIGRhdGEgcmVjb3JkIG9mIHJlcXVlc3RlZCB0eXBlIjsKKy0gICAgICAvKiBXU0FfUU9TXyogb21pdHRlZCAqLworLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRU5PTVNHCistICAgIGNhc2UgRU5PTVNHOgorLSAgICAgIHJldHVybiAiTm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FSURSTQorLSAgICBjYXNlIEVJRFJNOgorLSAgICAgIHJldHVybiAiSWRlbnRpZmllciByZW1vdmVkIjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRU5PTElOSworLSAgICBjYXNlIEVOT0xJTks6CistICAgICAgcmV0dXJuICJMaW5rIGhhcyBiZWVuIHNldmVyZWQiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FUFJPVE8KKy0gICAgY2FzZSBFUFJPVE86CistICAgICAgcmV0dXJuICJQcm90b2NvbCBlcnJvciI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VNVUxUSUhPUAorLSAgICBjYXNlIEVNVUxUSUhPUDoKKy0gICAgICByZXR1cm4gIk11bHRpaG9wIGF0dGVtcHRlZCI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VCQURNU0cKKy0gICAgY2FzZSBFQkFETVNHOgorLSAgICAgIHJldHVybiAiQmFkIG1lc3NhZ2UiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FT1ZFUkZMT1cKKy0gICAgY2FzZSBFT1ZFUkZMT1c6CistICAgICAgcmV0dXJuICJWYWx1ZSB0b28gbGFyZ2UgZm9yIGRlZmluZWQgZGF0YSB0eXBlIjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRU5PVFNVUAorLSAgICBjYXNlIEVOT1RTVVA6CistICAgICAgcmV0dXJuICJOb3Qgc3VwcG9ydGVkIjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRU5FVFJFU0VUCistICAgIGNhc2UgRU5FVFJFU0VUOgorLSAgICAgIHJldHVybiAiTmV0d29yayBkcm9wcGVkIGNvbm5lY3Rpb24gb24gcmVzZXQiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FQ09OTkFCT1JURUQKKy0gICAgY2FzZSBFQ09OTkFCT1JURUQ6CistICAgICAgcmV0dXJuICJTb2Z0d2FyZSBjYXVzZWQgY29ubmVjdGlvbiBhYm9ydCI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VTVEFMRQorLSAgICBjYXNlIEVTVEFMRToKKy0gICAgICByZXR1cm4gIlN0YWxlIE5GUyBmaWxlIGhhbmRsZSI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VEUVVPVAorLSAgICBjYXNlIEVEUVVPVDoKKy0gICAgICByZXR1cm4gIkRpc2sgcXVvdGEgZXhjZWVkZWQiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FQ0FOQ0VMRUQKKy0gICAgY2FzZSBFQ0FOQ0VMRUQ6CistICAgICAgcmV0dXJuICJPcGVyYXRpb24gY2FuY2VsZWQiOworLSNlbmRpZgorLQorLSAgICBkZWZhdWx0OgorLSAgICAgIHJldHVybiBOVUxMOworLSAgICB9CistfQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdHJlcnJvci1vdmVycmlkZS5oIGxpYmljb252LTEuMTQvc3JjbGliL3N0cmVycm9yLW92ZXJyaWRlLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0cmVycm9yLW92ZXJyaWRlLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdHJlcnJvci1vdmVycmlkZS5oCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCitAQCAtMSw1MiArMCwwIEBACistLyogc3RyZXJyb3Itb3ZlcnJpZGUuaCAtLS0gUE9TSVggY29tcGF0aWJsZSBzeXN0ZW0gZXJyb3Igcm91dGluZQorLQorLSAgIENvcHlyaWdodCAoQykgMjAxMC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorLSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKy0KKy0jaWZuZGVmIF9HTF9TVFJFUlJPUl9PVkVSUklERV9ICistIyBkZWZpbmUgX0dMX1NUUkVSUk9SX09WRVJSSURFX0gKKy0KKy0jIGluY2x1ZGUgPGVycm5vLmg+CistIyBpbmNsdWRlIDxzdGRkZWYuaD4KKy0KKy0vKiBSZWFzb25hYmxlIGJ1ZmZlciBzaXplIHRoYXQgc2hvdWxkIG5ldmVyIHRyaWdnZXIgRVJBTkdFOyBpZiB0aGlzCistICAgcHJvdmVzIHRvbyBzbWFsbCwgd2UgaW50ZW50aW9uYWxseSBhYm9ydCgpLCB0byByZW1pbmQgdXMgdG8gZml4CistICAgdGhpcyB2YWx1ZS4gICovCistIyBkZWZpbmUgU1RBQ0tCVUZfTEVOIDI1NgorLQorLS8qIElmIEVSUk5VTSBtYXBzIHRvIGFuIGVycm5vIHZhbHVlIGRlZmluZWQgYnkgZ251bGliLCByZXR1cm4gYSBzdHJpbmcKKy0gICBkZXNjcmliaW5nIHRoZSBlcnJvci4gIE90aGVyd2lzZSByZXR1cm4gTlVMTC4gICovCistIyBpZiBSRVBMQUNFX1NUUkVSUk9SXzAgXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRVRYVEJTWSBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FU09DSyBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FTk9NU0cgXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRUlEUk0gXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRU5PTElOSyBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FUFJPVE8gXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRU1VTFRJSE9QIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VCQURNU0cgXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRU9WRVJGTE9XIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VOT1RTVVAgXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRU5FVFJFU0VUIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VDT05OQUJPUlRFRCBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FU1RBTEUgXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRURRVU9UIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VDQU5DRUxFRAorLWV4dGVybiBjb25zdCBjaGFyICpzdHJlcnJvcl9vdmVycmlkZSAoaW50IGVycm51bSk7CistIyBlbHNlCistIyAgZGVmaW5lIHN0cmVycm9yX292ZXJyaWRlKGlnbm9yZWQpIE5VTEwKKy0jIGVuZGlmCistCistI2VuZGlmIC8qIF9HTF9TVFJFUlJPUl9PVkVSUklERV9IICovCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0cmluZy5pbi5oIGxpYmljb252LTEuMTQvc3JjbGliL3N0cmluZy5pbi5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdHJpbmcuaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3N0cmluZy5pbi5oCTIwMTItMDEtMDggMDI6MDc6NDAuNDE4NDg0NDYxIC0wODAwCitAQCAtMTYsNyArMTYsNyBAQAorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NUUklOR19ICisrI2lmbmRlZiBfR0xfU1RSSU5HX0gKKyAKKyAjaWYgX19HTlVDX18gPj0gMworIEBQUkFHTUFfU1lTVEVNX0hFQURFUkAKK0BAIC0yNiw4ICsyNiw4IEBACisgLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworICNASU5DTFVERV9ORVhUQCBATkVYVF9TVFJJTkdfSEAKKyAKKy0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TVFJJTkdfSAorLSNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX1NUUklOR19ICisrI2lmbmRlZiBfR0xfU1RSSU5HX0gKKysjZGVmaW5lIF9HTF9TVFJJTkdfSAorIAorIC8qIE5ldEJTRCA1LjAgbWlzLWRlZmluZXMgTlVMTC4gICovCisgI2luY2x1ZGUgPHN0ZGRlZi5oPgorQEAgLTU5LDM2ICs1OSw2IEBACisgLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKyAKKyAKKy0vKiBGaW5kIHRoZSBpbmRleCBvZiB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgc2V0IGJpdC4gICovCistI2lmIEBHTlVMSUJfRkZTTEAKKy0jIGlmICFASEFWRV9GRlNMQAorLV9HTF9GVU5DREVDTF9TWVMgKGZmc2wsIGludCwgKGxvbmcgaW50IGkpKTsKKy0jIGVuZGlmCistX0dMX0NYWEFMSUFTX1NZUyAoZmZzbCwgaW50LCAobG9uZyBpbnQgaSkpOworLV9HTF9DWFhBTElBU1dBUk4gKGZmc2wpOworLSNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy0jIHVuZGVmIGZmc2wKKy0jIGlmIEhBVkVfUkFXX0RFQ0xfRkZTTAorLV9HTF9XQVJOX09OX1VTRSAoZmZzbCwgImZmc2wgaXMgbm90IHBvcnRhYmxlIC0gdXNlIHRoZSBmZnNsIG1vZHVsZSIpOworLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0KKy0vKiBGaW5kIHRoZSBpbmRleCBvZiB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgc2V0IGJpdC4gICovCistI2lmIEBHTlVMSUJfRkZTTExACistIyBpZiAhQEhBVkVfRkZTTExACistX0dMX0ZVTkNERUNMX1NZUyAoZmZzbGwsIGludCwgKGxvbmcgbG9uZyBpbnQgaSkpOworLSMgZW5kaWYKKy1fR0xfQ1hYQUxJQVNfU1lTIChmZnNsbCwgaW50LCAobG9uZyBsb25nIGludCBpKSk7CistX0dMX0NYWEFMSUFTV0FSTiAoZmZzbGwpOworLSNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy0jIHVuZGVmIGZmc2xsCistIyBpZiBIQVZFX1JBV19ERUNMX0ZGU0xMCistX0dMX1dBUk5fT05fVVNFIChmZnNsbCwgImZmc2xsIGlzIG5vdCBwb3J0YWJsZSAtIHVzZSB0aGUgZmZzbGwgbW9kdWxlIik7CistIyBlbmRpZgorLSNlbmRpZgorLQorLQorIC8qIFJldHVybiB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgQyB3aXRoaW4gTiBieXRlcyBvZiBTLCBvciBOVUxMLiAgKi8KKyAjaWYgQEdOVUxJQl9NRU1DSFJACisgIyBpZiBAUkVQTEFDRV9NRU1DSFJACitAQCAtMTAwNyw1ICs5NzcsNSBAQCBfR0xfV0FSTl9PTl9VU0UgKHN0cnZlcnNjbXAsICJzdHJ2ZXJzY21wCisgI2VuZGlmCisgCisgCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TVFJJTkdfSCAqLworLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1RSSU5HX0ggKi8KKysjZW5kaWYgLyogX0dMX1NUUklOR19IICovCisrI2VuZGlmIC8qIF9HTF9TVFJJTkdfSCAqLworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zeXNfc3RhdC5pbi5oIGxpYmljb252LTEuMTQvc3JjbGliL3N5c19zdGF0LmluLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N5c19zdGF0LmluLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zeXNfc3RhdC5pbi5oCTIwMTItMDEtMDggMDI6MDc6NDAuNDMwNDg0NDYxIC0wODAwCitAQCAtMzQsNyArMzQsNyBAQAorICNlbHNlCisgLyogTm9ybWFsIGludm9jYXRpb24gY29udmVudGlvbi4gICovCisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1lTX1NUQVRfSAorKyNpZm5kZWYgX0dMX1NZU19TVEFUX0gKKyAKKyAvKiBHZXQgbmxpbmtfdC4gICovCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorQEAgLTQ1LDggKzQ1LDggQEAKKyAvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisgI0BJTkNMVURFX05FWFRAIEBORVhUX1NZU19TVEFUX0hACisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1lTX1NUQVRfSAorLSNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX1NZU19TVEFUX0gKKysjaWZuZGVmIF9HTF9TWVNfU1RBVF9ICisrI2RlZmluZSBfR0xfU1lTX1NUQVRfSAorIAorIC8qIFRoZSBkZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBMIGV0Yy4gYXJlIGNvcGllZCBoZXJlLiAgKi8KKyAKK0BAIC02NTMsNiArNjUzLDYgQEAgX0dMX1dBUk5fT05fVVNFICh1dGltZW5zYXQsICJ1dGltZW5zYXQgaQorICNlbmRpZgorIAorIAorLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1lTX1NUQVRfSCAqLworLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1lTX1NUQVRfSCAqLworKyNlbmRpZiAvKiBfR0xfU1lTX1NUQVRfSCAqLworKyNlbmRpZiAvKiBfR0xfU1lTX1NUQVRfSCAqLworICNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi90aW1lLmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvdGltZS5pbi5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi90aW1lLmluLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi90aW1lLmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC40Mzg0ODQ0NjIgLTA4MDAKK0BAIC0yOCwxMyArMjgsMTMgQEAKKyAgICB3aXRob3V0IGFkZGluZyBvdXIgb3duIGRlY2xhcmF0aW9ucy4gICovCisgI2lmIChkZWZpbmVkIF9fbmVlZF90aW1lX3QgfHwgZGVmaW5lZCBfX25lZWRfY2xvY2tfdCBcCisgICAgICB8fCBkZWZpbmVkIF9fbmVlZF90aW1lc3BlYyBcCistICAgICB8fCBkZWZpbmVkIF9AR1VBUkRfUFJFRklYQF9USU1FX0gpCisrICAgICB8fCBkZWZpbmVkIF9HTF9USU1FX0gpCisgCisgIyBASU5DTFVERV9ORVhUQCBATkVYVF9USU1FX0hACisgCisgI2Vsc2UKKyAKKy0jIGRlZmluZSBfQEdVQVJEX1BSRUZJWEBfVElNRV9ICisrIyBkZWZpbmUgX0dMX1RJTUVfSAorIAorICMgQElOQ0xVREVfTkVYVEAgQE5FWFRfVElNRV9IQAorIAorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi91bmlzdGQuaW4uaCBsaWJpY29udi0xLjE0L3NyY2xpYi91bmlzdGQuaW4uaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvdW5pc3RkLmluLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi91bmlzdGQuaW4uaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjQ1MDQ4NDQ2MiAtMDgwMAorQEAgLTM2LDcgKzM2LDcgQEAKKyAjIGRlZmluZSBfR0xfV0lOU09DSzJfSF9XSVRORVNTCisgCisgLyogTm9ybWFsIGludm9jYXRpb24uICAqLworLSNlbGlmICFkZWZpbmVkIF9AR1VBUkRfUFJFRklYQF9VTklTVERfSAorKyNlbGlmICFkZWZpbmVkIF9HTF9VTklTVERfSAorIAorIC8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyAjaWYgQEhBVkVfVU5JU1REX0hACitAQCAtNTEsOCArNTEsOCBAQAorICMgdW5kZWYgX0dMX0lOQ0xVRElOR19XSU5TT0NLMl9ICisgI2VuZGlmCisgCistI2lmICFkZWZpbmVkIF9AR1VBUkRfUFJFRklYQF9VTklTVERfSCAmJiAhZGVmaW5lZCBfR0xfSU5DTFVESU5HX1dJTlNPQ0syX0gKKy0jZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9VTklTVERfSAorKyNpZiAhZGVmaW5lZCBfR0xfVU5JU1REX0ggJiYgIWRlZmluZWQgX0dMX0lOQ0xVRElOR19XSU5TT0NLMl9ICisrI2RlZmluZSBfR0xfVU5JU1REX0gKKyAKKyAvKiBOZXRCU0QgNS4wIG1pcy1kZWZpbmVzIE5VTEwuICBBbHNvIGdldCBzaXplX3QuICAqLworICNpbmNsdWRlIDxzdGRkZWYuaD4KK0BAIC0xMTcsNzcgKzExNyw3OCBAQAorIC8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRSBpcyBjb3BpZWQgaGVyZS4gICovCisgCisgCistLyogSGlkZSBzb21lIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBmcm9tIDx3aW5zb2NrMi5oPi4gICovCistCistI2lmIEBHTlVMSUJfR0VUSE9TVE5BTUVAICYmIEBVTklTVERfSF9IQVZFX1dJTlNPQ0syX0hACistIyBpZiAhZGVmaW5lZCBfQEdVQVJEX1BSRUZJWEBfU1lTX1NPQ0tFVF9ICistIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKy0jICAgdW5kZWYgc29ja2V0CistIyAgIGRlZmluZSBzb2NrZXQgICAgICAgICAgICAgIHNvY2tldF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiBjb25uZWN0CistIyAgIGRlZmluZSBjb25uZWN0ICAgICAgICAgICAgIGNvbm5lY3RfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICAgdW5kZWYgYWNjZXB0CistIyAgIGRlZmluZSBhY2NlcHQgICAgICAgICAgICAgIGFjY2VwdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiBiaW5kCistIyAgIGRlZmluZSBiaW5kICAgICAgICAgICAgICAgIGJpbmRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICAgdW5kZWYgZ2V0cGVlcm5hbWUKKy0jICAgZGVmaW5lIGdldHBlZXJuYW1lICAgICAgICAgZ2V0cGVlcm5hbWVfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICAgdW5kZWYgZ2V0c29ja25hbWUKKy0jICAgZGVmaW5lIGdldHNvY2tuYW1lICAgICAgICAgZ2V0c29ja25hbWVfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICAgdW5kZWYgZ2V0c29ja29wdAorLSMgICBkZWZpbmUgZ2V0c29ja29wdCAgICAgICAgICBnZXRzb2Nrb3B0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIGxpc3RlbgorLSMgICBkZWZpbmUgbGlzdGVuICAgICAgICAgICAgICBsaXN0ZW5fdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICAgdW5kZWYgcmVjdgorLSMgICBkZWZpbmUgcmVjdiAgICAgICAgICAgICAgICByZWN2X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIHNlbmQKKy0jICAgZGVmaW5lIHNlbmQgICAgICAgICAgICAgICAgc2VuZF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiByZWN2ZnJvbQorLSMgICBkZWZpbmUgcmVjdmZyb20gICAgICAgICAgICByZWN2ZnJvbV91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiBzZW5kdG8KKy0jICAgZGVmaW5lIHNlbmR0byAgICAgICAgICAgICAgc2VuZHRvX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIHNldHNvY2tvcHQKKy0jICAgZGVmaW5lIHNldHNvY2tvcHQgICAgICAgICAgc2V0c29ja29wdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiBzaHV0ZG93bgorLSMgICBkZWZpbmUgc2h1dGRvd24gICAgICAgICAgICBzaHV0ZG93bl91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgIGVsc2UKKy0gICAgX0dMX1dBUk5fT05fVVNFIChzb2NrZXQsCistICAgICAgICAgICAgICAgICAgICAgInNvY2tldCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChjb25uZWN0LAorLSAgICAgICAgICAgICAgICAgICAgICJjb25uZWN0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworLSAgICBfR0xfV0FSTl9PTl9VU0UgKGFjY2VwdCwKKy0gICAgICAgICAgICAgICAgICAgICAiYWNjZXB0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworLSAgICBfR0xfV0FSTl9PTl9VU0UgKGJpbmQsCistICAgICAgICAgICAgICAgICAgICAgImJpbmQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAoZ2V0cGVlcm5hbWUsCistICAgICAgICAgICAgICAgICAgICAgImdldHBlZXJuYW1lKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworLSAgICBfR0xfV0FSTl9PTl9VU0UgKGdldHNvY2tuYW1lLAorLSAgICAgICAgICAgICAgICAgICAgICJnZXRzb2NrbmFtZSgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChnZXRzb2Nrb3B0LAorLSAgICAgICAgICAgICAgICAgICAgICJnZXRzb2Nrb3B0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworLSAgICBfR0xfV0FSTl9PTl9VU0UgKGxpc3RlbiwKKy0gICAgICAgICAgICAgICAgICAgICAibGlzdGVuKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworLSAgICBfR0xfV0FSTl9PTl9VU0UgKHJlY3YsCistICAgICAgICAgICAgICAgICAgICAgInJlY3YoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAoc2VuZCwKKy0gICAgICAgICAgICAgICAgICAgICAic2VuZCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChyZWN2ZnJvbSwKKy0gICAgICAgICAgICAgICAgICAgICAicmVjdmZyb20oKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAoc2VuZHRvLAorLSAgICAgICAgICAgICAgICAgICAgICJzZW5kdG8oKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAoc2V0c29ja29wdCwKKy0gICAgICAgICAgICAgICAgICAgICAic2V0c29ja29wdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChzaHV0ZG93biwKKy0gICAgICAgICAgICAgICAgICAgICAic2h1dGRvd24oKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrI2lmIEBHTlVMSUJfR0VUSE9TVE5BTUVACisrLyogR2V0IGFsbCBwb3NzaWJsZSBkZWNsYXJhdGlvbnMgb2YgZ2V0aG9zdG5hbWUoKS4gICovCisrIyBpZiBAVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IQAorKyMgIGlmICFkZWZpbmVkIF9HTF9TWVNfU09DS0VUX0gKKysjICAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKysjICAgIHVuZGVmIHNvY2tldAorKyMgICAgZGVmaW5lIHNvY2tldCAgICAgICAgICAgICAgc29ja2V0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisrIyAgICB1bmRlZiBjb25uZWN0CisrIyAgICBkZWZpbmUgY29ubmVjdCAgICAgICAgICAgICBjb25uZWN0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisrIyAgICB1bmRlZiBhY2NlcHQKKysjICAgIGRlZmluZSBhY2NlcHQgICAgICAgICAgICAgIGFjY2VwdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgYmluZAorKyMgICAgZGVmaW5lIGJpbmQgICAgICAgICAgICAgICAgYmluZF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgZ2V0cGVlcm5hbWUKKysjICAgIGRlZmluZSBnZXRwZWVybmFtZSAgICAgICAgIGdldHBlZXJuYW1lX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisrIyAgICB1bmRlZiBnZXRzb2NrbmFtZQorKyMgICAgZGVmaW5lIGdldHNvY2tuYW1lICAgICAgICAgZ2V0c29ja25hbWVfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIGdldHNvY2tvcHQKKysjICAgIGRlZmluZSBnZXRzb2Nrb3B0ICAgICAgICAgIGdldHNvY2tvcHRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIGxpc3RlbgorKyMgICAgZGVmaW5lIGxpc3RlbiAgICAgICAgICAgICAgbGlzdGVuX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisrIyAgICB1bmRlZiByZWN2CisrIyAgICBkZWZpbmUgcmVjdiAgICAgICAgICAgICAgICByZWN2X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisrIyAgICB1bmRlZiBzZW5kCisrIyAgICBkZWZpbmUgc2VuZCAgICAgICAgICAgICAgICBzZW5kX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisrIyAgICB1bmRlZiByZWN2ZnJvbQorKyMgICAgZGVmaW5lIHJlY3Zmcm9tICAgICAgICAgICAgcmVjdmZyb21fdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIHNlbmR0bworKyMgICAgZGVmaW5lIHNlbmR0byAgICAgICAgICAgICAgc2VuZHRvX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisrIyAgICB1bmRlZiBzZXRzb2Nrb3B0CisrIyAgICBkZWZpbmUgc2V0c29ja29wdCAgICAgICAgICBzZXRzb2Nrb3B0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisrIyAgICB1bmRlZiBzaHV0ZG93bgorKyMgICAgZGVmaW5lIHNodXRkb3duICAgICAgICAgICAgc2h1dGRvd25fdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgZWxzZQorKyAgICAgX0dMX1dBUk5fT05fVVNFIChzb2NrZXQsCisrICAgICAgICAgICAgICAgICAgICAgICJzb2NrZXQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKGNvbm5lY3QsCisrICAgICAgICAgICAgICAgICAgICAgICJjb25uZWN0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyAgICAgX0dMX1dBUk5fT05fVVNFIChhY2NlcHQsCisrICAgICAgICAgICAgICAgICAgICAgICJhY2NlcHQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKGJpbmQsCisrICAgICAgICAgICAgICAgICAgICAgICJiaW5kKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyAgICAgX0dMX1dBUk5fT05fVVNFIChnZXRwZWVybmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgImdldHBlZXJuYW1lKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyAgICAgX0dMX1dBUk5fT05fVVNFIChnZXRzb2NrbmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgImdldHNvY2tuYW1lKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyAgICAgX0dMX1dBUk5fT05fVVNFIChnZXRzb2Nrb3B0LAorKyAgICAgICAgICAgICAgICAgICAgICAiZ2V0c29ja29wdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAobGlzdGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAibGlzdGVuKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyAgICAgX0dMX1dBUk5fT05fVVNFIChyZWN2LAorKyAgICAgICAgICAgICAgICAgICAgICAicmVjdigpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoc2VuZCwKKysgICAgICAgICAgICAgICAgICAgICAgInNlbmQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKHJlY3Zmcm9tLAorKyAgICAgICAgICAgICAgICAgICAgICAicmVjdmZyb20oKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKHNlbmR0bywKKysgICAgICAgICAgICAgICAgICAgICAgInNlbmR0bygpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoc2V0c29ja29wdCwKKysgICAgICAgICAgICAgICAgICAgICAgInNldHNvY2tvcHQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKHNodXRkb3duLAorKyAgICAgICAgICAgICAgICAgICAgICAic2h1dGRvd24oKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrIyAgIGVuZGlmCisgIyAgZW5kaWYKKy0jIGVuZGlmCistIyBpZiAhZGVmaW5lZCBfQEdVQVJEX1BSRUZJWEBfU1lTX1NFTEVDVF9ICistIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKy0jICAgdW5kZWYgc2VsZWN0CistIyAgIGRlZmluZSBzZWxlY3QgICAgICAgICAgICAgIHNlbGVjdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zZWxlY3RfaAorLSMgIGVsc2UKKy0gICAgX0dMX1dBUk5fT05fVVNFIChzZWxlY3QsCistICAgICAgICAgICAgICAgICAgICAgInNlbGVjdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zZWxlY3QuaD4iKTsKKysjICBpZiAhZGVmaW5lZCBfR0xfU1lTX1NFTEVDVF9ICisrIyAgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisrIyAgICB1bmRlZiBzZWxlY3QKKysjICAgIGRlZmluZSBzZWxlY3QgICAgICAgICAgICAgIHNlbGVjdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zZWxlY3RfaAorKyMgICBlbHNlCisrICAgICBfR0xfV0FSTl9PTl9VU0UgKHNlbGVjdCwKKysgICAgICAgICAgICAgICAgICAgICAgInNlbGVjdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zZWxlY3QuaD4iKTsKKysjICAgZW5kaWYKKyAjICBlbmRpZgorICMgZW5kaWYKKyAjZW5kaWYKK0BAIC0xMDYxLDcgKzEwNjIsNiBAQCBfR0xfV0FSTl9PTl9VU0UgKHBpcGUyLCAicGlwZTIgaXMgdW5wb3J0CisgICAgc3BlY2lmaWNhdGlvbiA8aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzeHNoL3ByZWFkLmh0bWw+LiAgKi8KKyAjIGlmIEBSRVBMQUNFX1BSRUFEQAorICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCistIyAgIHVuZGVmIHByZWFkCisgIyAgIGRlZmluZSBwcmVhZCBycGxfcHJlYWQKKyAjICBlbmRpZgorIF9HTF9GVU5DREVDTF9SUEwgKHByZWFkLCBzc2l6ZV90LAorQEAgLTEwOTYsNyArMTA5Niw2IEBAIF9HTF9XQVJOX09OX1VTRSAocHJlYWQsICJwcmVhZCBpcyB1bnBvcnQKKyAgICA8aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzeHNoL3B3cml0ZS5odG1sPi4gICovCisgIyBpZiBAUkVQTEFDRV9QV1JJVEVACisgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKy0jICAgdW5kZWYgcHdyaXRlCisgIyAgIGRlZmluZSBwd3JpdGUgcnBsX3B3cml0ZQorICMgIGVuZGlmCisgX0dMX0ZVTkNERUNMX1JQTCAocHdyaXRlLCBzc2l6ZV90LAorQEAgLTE0MTcsNSArMTQxNiw1IEBAIF9HTF9DWFhBTElBU1dBUk4gKHdyaXRlKTsKKyAjZW5kaWYKKyAKKyAKKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1VOSVNURF9IICovCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9VTklTVERfSCAqLworKyNlbmRpZiAvKiBfR0xfVU5JU1REX0ggKi8KKysjZW5kaWYgLyogX0dMX1VOSVNURF9IICovCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3ZlcmlmeS5oIGxpYmljb252LTEuMTQvc3JjbGliL3ZlcmlmeS5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi92ZXJpZnkuaAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3ZlcmlmeS5oCTIwMTItMDEtMDggMDI6MDc6NDAuNDk0NDg0NDY0IC0wODAwCitAQCAtMTY0LDEzICsxNjQsMTAgQEAKKyAgICAgKCEhc2l6ZW9mIChfR0xfVkVSSUZZX1RZUEUgKFIsIERJQUdOT1NUSUMpKSkKKyAKKyAjIGlmZGVmIF9fY3BsdXNwbHVzCistIyAgaWYgIUdOVUxJQl9kZWZpbmVkX3N0cnVjdF9fZ2xfdmVyaWZ5X3R5cGUKKyB0ZW1wbGF0ZSA8aW50IHc+CisgICBzdHJ1Y3QgX2dsX3ZlcmlmeV90eXBlIHsKKyAgICAgdW5zaWduZWQgaW50IF9nbF92ZXJpZnlfZXJyb3JfaWZfbmVnYXRpdmU6IHc7CisgICB9OworLSMgICBkZWZpbmUgR05VTElCX2RlZmluZWRfc3RydWN0X19nbF92ZXJpZnlfdHlwZSAxCistIyAgZW5kaWYKKyAjICBkZWZpbmUgX0dMX1ZFUklGWV9UWVBFKFIsIERJQUdOT1NUSUMpIFwKKyAgICAgX2dsX3ZlcmlmeV90eXBlPChSKSA/IDEgOiAtMT4KKyAjIGVsaWYgZGVmaW5lZCBfR0xfSEFWRV9fU1RBVElDX0FTU0VSVAorQEAgLTIwOSw3ICsyMDYsNyBAQCB0ZW1wbGF0ZSA8aW50IHc+CisgIyAgZW5kaWYKKyAjIGVuZGlmCisgCistLyogQGFzc2VydC5oIG9taXQgc3RhcnRAICAqLworKyMgaWZkZWYgX0dMX1ZFUklGWV9ICisgCisgLyogRWFjaCBvZiB0aGVzZSBtYWNyb3MgdmVyaWZpZXMgdGhhdCBpdHMgYXJndW1lbnQgUiBpcyBub256ZXJvLiAgVG8KKyAgICBiZSBwb3J0YWJsZSwgUiBzaG91bGQgYmUgYW4gaW50ZWdlciBjb25zdGFudCBleHByZXNzaW9uLiAgVW5saWtlCitAQCAtMjIxLDIzICsyMTgsMTUgQEAgdGVtcGxhdGUgPGludCB3PgorICAgIGNvbnRleHRzLCBlLmcuLCB0aGUgdG9wIGxldmVsLiAgKi8KKyAKKyAvKiBWZXJpZnkgcmVxdWlyZW1lbnQgUiBhdCBjb21waWxlLXRpbWUsIGFzIGFuIGludGVnZXIgY29uc3RhbnQgZXhwcmVzc2lvbi4KKy0gICBSZXR1cm4gMS4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byB2ZXJpZnlfZXhwciAoUiwgMSkuCistCistICAgdmVyaWZ5X3RydWUgaXMgb2Jzb2xlc2NlbnQ7IHBsZWFzZSB1c2UgdmVyaWZ5X2V4cHIgaW5zdGVhZC4gICovCistCistIyBkZWZpbmUgdmVyaWZ5X3RydWUoUikgX0dMX1ZFUklGWV9UUlVFIChSLCAidmVyaWZ5X3RydWUgKCIgI1IgIikiKQorKyAgIFJldHVybiAxLiAgKi8KKyAKKy0vKiBWZXJpZnkgcmVxdWlyZW1lbnQgUiBhdCBjb21waWxlLXRpbWUuICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZQorLSAgIGV4cHJlc3Npb24gRS4gICovCistCistIyBkZWZpbmUgdmVyaWZ5X2V4cHIoUiwgRSkgXAorLSAgICAoX0dMX1ZFUklGWV9UUlVFIChSLCAidmVyaWZ5X2V4cHIgKCIgI1IgIiwgIiAjRSAiKSIpID8gKEUpIDogKEUpKQorKyMgIGRlZmluZSB2ZXJpZnlfdHJ1ZShSKSBfR0xfVkVSSUZZX1RSVUUgKFIsICJ2ZXJpZnlfdHJ1ZSAoIiAjUiAiKSIpCisgCisgLyogVmVyaWZ5IHJlcXVpcmVtZW50IFIgYXQgY29tcGlsZS10aW1lLCBhcyBhIGRlY2xhcmF0aW9uIHdpdGhvdXQgYQorICAgIHRyYWlsaW5nICc7Jy4gICovCisgCistIyBkZWZpbmUgdmVyaWZ5KFIpIF9HTF9WRVJJRlkgKFIsICJ2ZXJpZnkgKCIgI1IgIikiKQorKyMgIGRlZmluZSB2ZXJpZnkoUikgX0dMX1ZFUklGWSAoUiwgInZlcmlmeSAoIiAjUiAiKSIpCisgCistLyogQGFzc2VydC5oIG9taXQgZW5kQCAgKi8KKysjIGVuZGlmCisgCisgI2VuZGlmCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvY2Fub25pY2FsaXplLm00IGxpYmljb252LTEuMTQvc3JjbTQvY2Fub25pY2FsaXplLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2Nhbm9uaWNhbGl6ZS5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvY2Fub25pY2FsaXplLm00CTIwMTItMDEtMDggMDI6MDc6NDAuNTY2NDg0NDY5IC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIGNhbm9uaWNhbGl6ZS5tNCBzZXJpYWwgMjMKKysjIGNhbm9uaWNhbGl6ZS5tNCBzZXJpYWwgMjEKKyAKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDcsIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKK0BAIC0xMCw2ICsxMCw4IEBAIGRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG8KKyAjIG5vdCBwcm92aWRlIG9yIGZpeCByZWFscGF0aC4KKyBBQ19ERUZVTihbZ2xfRlVOQ19DQU5PTklDQUxJWkVfRklMRU5BTUVfTU9ERV0sCisgWworKyAgQUNfTElCT0JKKFtjYW5vbmljYWxpemVdKQorKworICAgQUNfUkVRVUlSRShbZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKKyAgIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW2Nhbm9uaWNhbGl6ZV9maWxlX25hbWVdKQorICAgQUNfUkVRVUlSRShbZ2xfRE9VQkxFX1NMQVNIX1JPT1RdKQorQEAgLTI4LDE0ICszMCwxNiBAQCBBQ19ERUZVTihbZ2xfQ0FOT05JQ0FMSVpFX0xHUExdLAorICAgQUNfUkVRVUlSRShbZ2xfQ0FOT05JQ0FMSVpFX0xHUExfU0VQQVJBVEVdKQorICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19jYW5vbmljYWxpemVfZmlsZV9uYW1lID0gbm87IHRoZW4KKyAgICAgSEFWRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FPTAKKysgICAgQUNfTElCT0JKKFtjYW5vbmljYWxpemUtbGdwbF0pCisgICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfcmVhbHBhdGggPSBubzsgdGhlbgorICAgICAgIEhBVkVfUkVBTFBBVEg9MAorICAgICBlbGlmIHRlc3QgIiRnbF9jdl9mdW5jX3JlYWxwYXRoX3dvcmtzIiAhPSB5ZXM7IHRoZW4KKyAgICAgICBSRVBMQUNFX1JFQUxQQVRIPTEKKyAgICAgZmkKKyAgIGVsaWYgdGVzdCAiJGdsX2N2X2Z1bmNfcmVhbHBhdGhfd29ya3MiICE9IHllczsgdGhlbgorLSAgICBSRVBMQUNFX0NBTk9OSUNBTElaRV9GSUxFX05BTUU9MQorKyAgICBBQ19MSUJPQkooW2Nhbm9uaWNhbGl6ZS1sZ3BsXSkKKyAgICAgUkVQTEFDRV9SRUFMUEFUSD0xCisrICAgIFJFUExBQ0VfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRT0xCisgICBmaQorIF0pCisgCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZXJybm9faC5tNCBsaWJpY29udi0xLjE0L3NyY200L2Vycm5vX2gubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZXJybm9faC5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvZXJybm9faC5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjU5MDQ4NDQ2OSAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBlcnJub19oLm00IHNlcmlhbCAxMAorKyMgZXJybm9faC5tNCBzZXJpYWwgOQorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDgtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC0zNCwxMiArMzQsNiBAQCBib29ib28KKyAjaWYgIWRlZmluZWQgRU5PVFNVUAorIGJvb2JvbworICNlbmRpZgorLSNpZiAhZGVmaW5lZCBFTkVUUkVTRVQKKy1ib29ib28KKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgRUNPTk5BQk9SVEVECistYm9vYm9vCistI2VuZGlmCisgI2lmICFkZWZpbmVkIEVTVEFMRQorIGJvb2JvbworICNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2Vycm9yLm00IGxpYmljb252LTEuMTQvc3JjbTQvZXJyb3IubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZXJyb3IubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L2Vycm9yLm00CTIwMTItMDEtMDggMDI6MDc6NDAuNTk4NDg0NDcwIC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jc2VyaWFsIDE0CisrI3NlcmlhbCAxMworIAorICMgQ29weXJpZ2h0IChDKSAxOTk2LTE5OTgsIDIwMDEtMjAwNCwgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICMKK0BAIC04LDggKzgsMTYgQEAKKyAKKyBBQ19ERUZVTihbZ2xfRVJST1JdLAorIFsKKy0gIGRubCBXZSBkb24ndCB1c2UgQUNfRlVOQ19FUlJPUl9BVF9MSU5FIGFueSBtb3JlLCBiZWNhdXNlIGl0IGlzIG5vIGxvbmdlcgorLSAgZG5sIG1haW50YWluZWQgaW4gQXV0b2NvbmYgYW5kIGJlY2F1c2UgaXQgaW52b2tlcyBBQ19MSUJPQkouCisrICBBQ19GVU5DX0VSUk9SX0FUX0xJTkUKKysgIGRubCBOb3RlOiBBQ19GVU5DX0VSUk9SX0FUX0xJTkUgZG9lcyBBQ19MSUJTT1VSQ0VTKFtlcnJvci5oLCBlcnJvci5jXSkuCisrICBnbF9QUkVSRVFfRVJST1IKKytdKQorKworKyMgUmVkZWZpbmUgQUNfRlVOQ19FUlJPUl9BVF9MSU5FLCBiZWNhdXNlIGl0IGlzIG5vIGxvbmdlciBtYWludGFpbmVkIGluCisrIyBBdXRvY29uZi4KKytBQ19ERUZVTihbQUNfRlVOQ19FUlJPUl9BVF9MSU5FXSwKKytbCisrICBBQ19MSUJTT1VSQ0VTKFtlcnJvci5oLCBlcnJvci5jXSlkbmwKKyAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgZXJyb3JfYXRfbGluZV0sIFthY19jdl9saWJfZXJyb3JfYXRfbGluZV0sCisgICAgIFtBQ19MSU5LX0lGRUxTRSgKKyAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKK0BAIC0xNyw2ICsyNSw5IEBAIEFDX0RFRlVOKFtnbF9FUlJPUl0sCisgICAgICAgICAgIFtbZXJyb3JfYXRfbGluZSAoMCwgMCwgIiIsIDAsICJhbiBlcnJvciBvY2N1cnJlZCIpO11dKV0sCisgICAgICAgIFthY19jdl9saWJfZXJyb3JfYXRfbGluZT15ZXNdLAorICAgICAgICBbYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmU9bm9dKV0pCisrICBpZiB0ZXN0ICRhY19jdl9saWJfZXJyb3JfYXRfbGluZSA9IG5vOyB0aGVuCisrICAgIEFDX0xJQk9CSihbZXJyb3JdKQorKyAgZmkKKyBdKQorIAorICMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvZXJyb3IuYy4KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9leHRlbnNpb25zLm00IGxpYmljb252LTEuMTQvc3JjbTQvZXh0ZW5zaW9ucy5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9leHRlbnNpb25zLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9leHRlbnNpb25zLm00CTIwMTItMDEtMDggMDI6MDc6NDAuNjA2NDg0NDcxIC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHNlcmlhbCAxMCAgLSotIEF1dG9jb25mIC0qLQorKyMgc2VyaWFsIDkgIC0qLSBBdXRvY29uZiAtKi0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0uCisgCisgIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0BAIC02NywxMCArNjcsNiBAQCBBQ19CRUZPUkUoWyQwXSwgW0FDX1JVTl9JRkVMU0VdKWRubAorICNpZm5kZWYgX0FMTF9TT1VSQ0UKKyAjIHVuZGVmIF9BTExfU09VUkNFCisgI2VuZGlmCistLyogRW5hYmxlIGdlbmVyYWwgZXh0ZW5zaW9ucyBvbiBNYWNPUyBYLiAgKi8KKy0jaWZuZGVmIF9EQVJXSU5fQ19TT1VSQ0UKKy0jIHVuZGVmIF9EQVJXSU5fQ19TT1VSQ0UKKy0jZW5kaWYKKyAvKiBFbmFibGUgR05VIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IGhhdmUgdGhlbS4gICovCisgI2lmbmRlZiBfR05VX1NPVVJDRQorICMgdW5kZWYgX0dOVV9TT1VSQ0UKK0BAIC05OSw3ICs5NSw2IEBAIEFDX0JFRk9SRShbJDBdLCBbQUNfUlVOX0lGRUxTRV0pZG5sCisgICB0ZXN0ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyA9IHllcyAmJgorICAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKKyAgIEFDX0RFRklORShbX0FMTF9TT1VSQ0VdKQorLSAgQUNfREVGSU5FKFtfREFSV0lOX0NfU09VUkNFXSkKKyAgIEFDX0RFRklORShbX0dOVV9TT1VSQ0VdKQorICAgQUNfREVGSU5FKFtfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1NdKQorICAgQUNfREVGSU5FKFtfVEFOREVNX1NPVVJDRV0pCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZ251bGliLWNhY2hlLm00IGxpYmljb252LTEuMTQvc3JjbTQvZ251bGliLWNhY2hlLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2dudWxpYi1jYWNoZS5tNAkyMDExLTA4LTA3IDA2OjQyOjExLjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvZ251bGliLWNhY2hlLm00CTIwMTItMDEtMDggMDI6MDc6NDMuMTU0NDg0NTkzIC0wODAwCitAQCAtMTUsNyArMTUsNyBAQAorIAorIAorICMgU3BlY2lmaWNhdGlvbiBpbiB0aGUgZm9ybSBvZiBhIGNvbW1hbmQtbGluZSBpbnZvY2F0aW9uOgorLSMgICBnbnVsaWItdG9vbCAtLWltcG9ydCAtLWRpcj0uIC0tbG9jYWwtZGlyPWdudWxpYi1sb2NhbCAtLWxpYj1saWJpY3J0IC0tc291cmNlLWJhc2U9c3JjbGliIC0tbTQtYmFzZT1zcmNtNCAtLWRvYy1iYXNlPWRvYyAtLXRlc3RzLWJhc2U9dGVzdHMgLS1hdXgtZGlyPWJ1aWxkLWF1eCAtLW1ha2VmaWxlLW5hbWU9TWFrZWZpbGUuZ251bGliIC0tbm8tY29uZGl0aW9uYWwtZGVwZW5kZW5jaWVzIC0tbm8tbGlidG9vbCAtLW1hY3JvLXByZWZpeD1nbCAtLW5vLXZjLWZpbGVzIGJpbmFyeS1pbyBlcnJvciBnZXR0ZXh0IGdldHRleHQtaCBsaWJpY29udi1taXNjIG1ic3RhdGUgbWVtbW92ZSBwcm9nbmFtZSByZWxvY2F0YWJsZS1wcm9nIHNhZmUtcmVhZCBzaWdwaXBlIHN0ZGlvIHN0ZGxpYiBzdHJlcnJvciB1bmlzdGQgdW5pd2lkdGgvd2lkdGggdW5sb2NrZWQtaW8geGFsbG9jCisrIyAgIGdudWxpYi10b29sIC0taW1wb3J0IC0tZGlyPS4gLS1sb2NhbC1kaXI9Z251bGliLWxvY2FsIC0tbGliPWxpYmljcnQgLS1zb3VyY2UtYmFzZT1zcmNsaWIgLS1tNC1iYXNlPXNyY200IC0tZG9jLWJhc2U9ZG9jIC0tdGVzdHMtYmFzZT10ZXN0cyAtLWF1eC1kaXI9YnVpbGQtYXV4IC0tbWFrZWZpbGUtbmFtZT1NYWtlZmlsZS5nbnVsaWIgLS1uby1saWJ0b29sIC0tbWFjcm8tcHJlZml4PWdsIC0tbm8tdmMtZmlsZXMgYmluYXJ5LWlvIGVycm9yIGdldHRleHQgZ2V0dGV4dC1oIGxpYmljb252LW1pc2MgbWJzdGF0ZSBtZW1tb3ZlIHByb2duYW1lIHJlbG9jYXRhYmxlIHJlbG9jYXRhYmxlLXByb2cgc2FmZS1yZWFkIHNpZ3BpcGUgc3RkaW8gc3RkbGliIHN0cmVycm9yIHVuaXN0ZCB1bml3aWR0aC93aWR0aCB1bmxvY2tlZC1pbyB4YWxsb2MKKyAKKyAjIFNwZWNpZmljYXRpb24gaW4gdGhlIGZvcm0gb2YgYSBmZXcgZ251bGliLXRvb2wubTQgbWFjcm8gaW52b2NhdGlvbnM6CisgZ2xfTE9DQUxfRElSKFtnbnVsaWItbG9jYWxdKQorQEAgLTI4LDYgKzI4LDcgQEAgZ2xfTU9EVUxFUyhbCisgICBtYnN0YXRlCisgICBtZW1tb3ZlCisgICBwcm9nbmFtZQorKyAgcmVsb2NhdGFibGUKKyAgIHJlbG9jYXRhYmxlLXByb2cKKyAgIHNhZmUtcmVhZAorICAgc2lncGlwZQorQEAgLTQ5LDUgKzUwLDQgQEAgZ2xfTElCKFtsaWJpY3J0XSkKKyBnbF9NQUtFRklMRV9OQU1FKFtNYWtlZmlsZS5nbnVsaWJdKQorIGdsX01BQ1JPX1BSRUZJWChbZ2xdKQorIGdsX1BPX0RPTUFJTihbXSkKKy1nbF9XSVRORVNTX0NfRE9NQUlOKFtdKQorIGdsX1ZDX0ZJTEVTKFtmYWxzZV0pCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZ251bGliLWNvbW1vbi5tNCBsaWJpY29udi0xLjE0L3NyY200L2dudWxpYi1jb21tb24ubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZ251bGliLWNvbW1vbi5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvZ251bGliLWNvbW1vbi5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjYzNDQ4NDQ3MSAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBnbnVsaWItY29tbW9uLm00IHNlcmlhbCAyOQorKyMgZ251bGliLWNvbW1vbi5tNCBzZXJpYWwgMjQKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtMTIsMTkgKzEyLDYgQEAgQUNfREVGVU4oW2dsX0NPTU1PTl0sIFsKKyAgIEFDX1JFUVVJUkUoW2dsX0NPTU1PTl9CT0RZXSkKKyBdKQorIEFDX0RFRlVOKFtnbF9DT01NT05fQk9EWV0sIFsKKy0gIEFIX1ZFUkJBVElNKFtfTm9yZXR1cm5dLAorLVsvKiBUaGUgX05vcmV0dXJuIGtleXdvcmQgb2YgZHJhZnQgQzFYLiAgKi8KKy0jaWZuZGVmIF9Ob3JldHVybgorLSMgaWYgKDMgPD0gX19HTlVDX18gfHwgKF9fR05VQ19fID09IDIgJiYgOCA8PSBfX0dOVUNfTUlOT1JfXykgXAorLSAgICAgIHx8IDB4NTExMCA8PSBfX1NVTlBST19DKQorLSMgIGRlZmluZSBfTm9yZXR1cm4gX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpCistIyBlbGlmIDEyMDAgPD0gX01TQ19WRVIKKy0jICBkZWZpbmUgX05vcmV0dXJuIF9fZGVjbHNwZWMgKG5vcmV0dXJuKQorLSMgZWxzZQorLSMgIGRlZmluZSBfTm9yZXR1cm4KKy0jIGVuZGlmCistI2VuZGlmCistXSkKKyAgIEFIX1ZFUkJBVElNKFtpc29jOTlfaW5saW5lXSwKKyBbLyogV29yayBhcm91bmQgYSBidWcgaW4gQXBwbGUgR0NDIDQuMC4xIGJ1aWxkIDU0NjU6IEluIEM5OSBtb2RlLCBpdCBzdXBwb3J0cworICAgIHRoZSBJU08gQyA5OSBzZW1hbnRpY3Mgb2YgJ2V4dGVybiBpbmxpbmUnICh1bmxpa2UgdGhlIEdOVSBDIHNlbWFudGljcyBvZgorQEAgLTQ3LDIwICszNCw2IEBAIEFDX0RFRlVOKFtnbF9DT01NT05fQk9EWV0sIFsKKyAvKiBUaGUgbmFtZSBfVU5VU0VEX1BBUkFNRVRFUl8gaXMgYW4gZWFybGllciBzcGVsbGluZywgYWx0aG91Z2ggdGhlIG5hbWUKKyAgICBpcyBhIG1pc25vbWVyIG91dHNpZGUgb2YgcGFyYW1ldGVyIGxpc3RzLiAgKi8KKyAjZGVmaW5lIF9VTlVTRURfUEFSQU1FVEVSXyBfR0xfVU5VU0VECistCistLyogVGhlIF9fcHVyZV9fIGF0dHJpYnV0ZSB3YXMgYWRkZWQgaW4gZ2NjIDIuOTYuICAqLworLSNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTYpCistIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9QVVJFIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpCistI2Vsc2UKKy0jIGRlZmluZSBfR0xfQVRUUklCVVRFX1BVUkUgLyogZW1wdHkgKi8KKy0jZW5kaWYKKy0KKy0vKiBUaGUgX19jb25zdF9fIGF0dHJpYnV0ZSB3YXMgYWRkZWQgaW4gZ2NjIDIuOTUuICAqLworLSNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTUpCistIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9DT05TVCBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSkKKy0jZWxzZQorLSMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfQ09OU1QgLyogZW1wdHkgKi8KKy0jZW5kaWYKKyBdKQorICAgZG5sIFByZXBhcmF0aW9uIGZvciBydW5uaW5nIHRlc3QgcHJvZ3JhbXM6CisgICBkbmwgVGVsbCBnbGliYyB0byB3cml0ZSBkaWFnbm9zdGljcyBmcm9tIC1EX0ZPUlRJRllfU09VUkNFPTIgdG8gc3RkZXJyLCBub3QKK0BAIC03NCw0OSArNDcsMTYgQEAgQUNfREVGVU4oW2dsX0NPTU1PTl9CT0RZXSwgWworICMgZXhwYW5kcyB0byBhIEMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gMSBvciAwLCBkZXBlbmRpbmcKKyAjIHdoZXRoZXIgYSBnbnVsaWIgbW9kdWxlIHRoYXQgaGFzIGJlZW4gcmVxdWVzdGVkIHNoYWxsIGJlIGNvbnNpZGVyZWQgcHJlc2VudAorICMgb3Igbm90LgorLW00X2RlZmluZShbZ2xfTU9EVUxFX0lORElDQVRPUl9DT05ESVRJT05dLCBbMV0pCisrQUNfREVGVU4oW2dsX01PRFVMRV9JTkRJQ0FUT1JfQ09ORElUSU9OXSwgWzFdKQorIAorICMgZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEUoW21vZHVsZW5hbWVdKQorICMgc2V0cyB0aGUgc2hlbGwgdmFyaWFibGUgdGhhdCBpbmRpY2F0ZXMgdGhlIHByZXNlbmNlIG9mIHRoZSBnaXZlbiBtb2R1bGUgdG8KKyAjIGEgQyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbiB0aGF0IHdpbGwgZXZhbHVhdGUgdG8gMS4KKyBBQ19ERUZVTihbZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEVdLAorIFsKKy0gIGdsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFX0FVWCgKKy0gICAgW0dOVUxJQl9bXW00X3RyYW5zbGl0KFtbJDFdXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCistICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0sCistICAgIFtnbF9NT0RVTEVfSU5ESUNBVE9SX0NPTkRJVElPTl0pCistXSkKKy0KKy0jIGdsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFX0FVWChbdmFyaWFibGVdKQorLSMgbW9kaWZpZXMgdGhlIHNoZWxsIHZhcmlhYmxlIHRvIGluY2x1ZGUgdGhlIGdsX01PRFVMRV9JTkRJQ0FUT1JfQ09ORElUSU9OLgorLSMgVGhlIHNoZWxsIHZhcmlhYmxlJ3MgdmFsdWUgaXMgYSBDIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzCistIyB0byAwIG9yIDEuCistQUNfREVGVU4oW2dsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFX0FVWF0sCistWworLSAgbTRfaWYobTRfZGVmbihbZ2xfTU9EVUxFX0lORElDQVRPUl9DT05ESVRJT05dKSwgWzFdLAorLSAgICBbCistICAgICBkbmwgU2ltcGxpZnkgdGhlIGV4cHJlc3Npb24gVkFMVUUgfHwgMSB0byAxLgorLSAgICAgJDE9MQorLSAgICBdLAorLSAgICBbZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEVfQVVYX09SKFskMV0sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dsX01PRFVMRV9JTkRJQ0FUT1JfQ09ORElUSU9OXSldKQorLV0pCistCistIyBnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRV9BVVhfT1IoW3ZhcmlhYmxlXSwgW2NvbmRpdGlvbl0pCistIyBtb2RpZmllcyB0aGUgc2hlbGwgdmFyaWFibGUgdG8gaW5jbHVkZSB0aGUgZ2l2ZW4gY29uZGl0aW9uLiAgVGhlIHNoZWxsCistIyB2YXJpYWJsZSdzIHZhbHVlIGlzIGEgQyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byAwIG9yIDEuCistQUNfREVGVU4oW2dsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFX0FVWF9PUl0sCistWworLSAgZG5sIFNpbXBsaWZ5IHRoZSBleHByZXNzaW9uIDEgfHwgQ09ORElUSU9OIHRvIDEuCistICBpZiB0ZXN0ICIkW10kMSIgIT0gMTsgdGhlbgorLSAgICBkbmwgU2ltcGxpZnkgdGhlIGV4cHJlc3Npb24gMCB8fCBDT05ESVRJT04gdG8gQ09ORElUSU9OLgorLSAgICBpZiB0ZXN0ICIkW10kMSIgPSAwOyB0aGVuCistICAgICAgJDE9JDIKKy0gICAgZWxzZQorLSAgICAgICQxPSIoJFtdJDEgfHwgJDIpIgorLSAgICBmaQorLSAgZmkKKysgIEdOVUxJQl9bXW00X3RyYW5zbGl0KFtbJDFdXSwKKysgICAgW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKKysgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSk9Z2xfTU9EVUxFX0lORElDQVRPUl9DT05ESVRJT04KKyBdKQorIAorICMgZ2xfTU9EVUxFX0lORElDQVRPUihbbW9kdWxlbmFtZV0pCitAQCAtMjExLDM1ICsxNTEsNiBAQCBtNF9pZm5kZWYoW0FTX1ZBUl9JRl0sCisgW200X2RlZmluZShbQVNfVkFSX0lGXSwKKyBbQVNfSUYoW3Rlc3QgeCJBU19WQVJfR0VUKFskMV0pIiA9IHgiIiQyXSwgWyQzXSwgWyQ0XSldKV0pCisgCistIyBnbF9QUk9HX0FSX1JBTkxJQgorLSMgRGV0ZXJtaW5lcyB0aGUgdmFsdWVzIGZvciBBUiwgQVJGTEFHUywgUkFOTElCIHRoYXQgZml0IHdpdGggdGhlIGNvbXBpbGVyLgorLUFDX0RFRlVOKFtnbF9QUk9HX0FSX1JBTkxJQl0sCistWworLSAgZG5sIE1pbml4IDMgY29tZXMgd2l0aCB0d28gdG9vbGNoYWluczogVGhlIEFtc3RlcmRhbSBDb21waWxlciBLaXQgY29tcGlsZXIKKy0gIGRubCBhcyAiY2MiLCBhbmQgR0NDIGFzICJnY2MiLiBUaGV5IGhhdmUgZGlmZmVyZW50IG9iamVjdCBmaWxlIGZvcm1hdHMgYW5kCistICBkbmwgbGlicmFyeSBmb3JtYXRzLiBJbiBwYXJ0aWN1bGFyLCB0aGUgR05VIGJpbnV0aWxzIHByb2dyYW1zIGFyLCByYW5saWIKKy0gIGRubCBwcm9kdWNlIGxpYnJhcmllcyB0aGF0IHdvcmsgb25seSB3aXRoIGdjYywgbm90IHdpdGggY2MuCistICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKy0gIEFDX0VHUkVQX0NQUChbQW1zdGVyZGFtXSwKKy0gICAgWworLSNpZmRlZiBfX0FDS19fCistQW1zdGVyZGFtCistI2VuZGlmCistICAgIF0sCistICAgIFtBUj0nY2MgLWMuYScKKy0gICAgIEFSRkxBR1M9Jy1vJworLSAgICAgUkFOTElCPSc6JworLSAgICBdLAorLSAgICBbZG5sIFVzZSB0aGUgQXV0b21ha2UtZG9jdW1lbnRlZCBkZWZhdWx0IHZhbHVlcyBmb3IgQVIgYW5kIEFSRkxBR1MuCistICAgICBBUj0nYXInCistICAgICBBUkZMQUdTPSdjcnUnCistICAgICBkbmwgVXNlIHRoZSByYW5saWIgcHJvZ3JhbSBpZiBpdCBpcyBhdmFpbGFibGUuCistICAgICBBQ19QUk9HX1JBTkxJQgorLSAgICBdKQorLSAgQUNfU1VCU1QoW0FSXSkKKy0gIEFDX1NVQlNUKFtBUkZMQUdTXSkKKy1dKQorLQorICMgQUNfUFJPR19NS0RJUl9QCisgIyBpcyBhIGJhY2twb3J0IG9mIGF1dG9jb25mLTIuNjAncyBBQ19QUk9HX01LRElSX1AsIHdpdGggYSBmaXgKKyAjIGZvciBpbnRlcm9wZXJhYmlsaXR5IHdpdGggYXV0b21ha2UtMS45LjYgZnJvbSBhdXRvY29uZi0yLjYyLgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2dudWxpYi1jb21wLm00IGxpYmljb252LTEuMTQvc3JjbTQvZ251bGliLWNvbXAubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZ251bGliLWNvbXAubTQJMjAxMS0wOC0wNyAwNjo0MjoxMi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L2dudWxpYi1jb21wLm00CTIwMTItMDEtMDggMDI6MDc6NDMuOTIyNDg0NjMwIC0wODAwCitAQCAtMjUsMTIgKzI1LDE0IEBAIEFDX0RFRlVOKFtnbF9FQVJMWV0sCisgICBtNF9wYXR0ZXJuX2FsbG93KFteZ2xfRVMkXSlkbmwgYSB2YWxpZCBsb2NhbGUgbmFtZQorICAgbTRfcGF0dGVybl9hbGxvdyhbXmdsX0xJQk9CSlMkXSlkbmwgYSB2YXJpYWJsZQorICAgbTRfcGF0dGVybl9hbGxvdyhbXmdsX0xUTElCT0JKUyRdKWRubCBhIHZhcmlhYmxlCistICBBQ19SRVFVSVJFKFtnbF9QUk9HX0FSX1JBTkxJQl0pCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX1JBTkxJQl0pCisgICBBQ19SRVFVSVJFKFtBTV9QUk9HX0NDX0NfT10pCisgICAjIENvZGUgZnJvbSBtb2R1bGUgYWxsb2NhLW9wdDoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBhbGxvY2F0b3I6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgYXJlYWRsaW5rOgorKyAgIyBDb2RlIGZyb20gbW9kdWxlIGFyZy1ub25udWxsOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIGJpbmFyeS1pbzoKKysgICMgQ29kZSBmcm9tIG1vZHVsZSBjKytkZWZzOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIGNhbm9uaWNhbGl6ZS1sZ3BsOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIGNhcmVhZGxpbmthdDoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBkb3NuYW1lOgorQEAgLTQ2LDcgKzQ4LDYgQEAgQUNfREVGVU4oW2dsX0VBUkxZXSwKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBoYXZlbGliOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIGluY2x1ZGVfbmV4dDoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBpbnRwcm9wczoKKy0gICMgQ29kZSBmcm9tIG1vZHVsZSBsYXJnZWZpbGU6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgbGliaWNvbnYtbWlzYzoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBsc3RhdDoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBtYWxsb2NhOgorQEAgLTY0LDEwICs2NSw2IEBAIEFDX0RFRlVOKFtnbF9FQVJMWV0sCisgICAjIENvZGUgZnJvbSBtb2R1bGUgc2lnbmFsOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHNpZ3BpcGU6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgc2lncHJvY21hc2s6CistICAjIENvZGUgZnJvbSBtb2R1bGUgc25pcHBldC9fTm9yZXR1cm46CistICAjIENvZGUgZnJvbSBtb2R1bGUgc25pcHBldC9hcmctbm9ubnVsbDoKKy0gICMgQ29kZSBmcm9tIG1vZHVsZSBzbmlwcGV0L2MrK2RlZnM6CistICAjIENvZGUgZnJvbSBtb2R1bGUgc25pcHBldC93YXJuLW9uLXVzZToKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBzc2l6ZV90OgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHN0YXQ6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgc3RkYm9vbDoKK0BAIC03Nyw3ICs3NCw2IEBAIEFDX0RFRlVOKFtnbF9FQVJMWV0sCisgICAjIENvZGUgZnJvbSBtb2R1bGUgc3RkbGliOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHN0cmVxOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHN0cmVycm9yOgorLSAgIyBDb2RlIGZyb20gbW9kdWxlIHN0cmVycm9yLW92ZXJyaWRlOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHN0cmluZzoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBzeXNfc3RhdDoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSB0aW1lOgorQEAgLTg3LDYgKzgzLDcgQEAgQUNfREVGVU4oW2dsX0VBUkxZXSwKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSB1bml3aWR0aC93aWR0aDoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSB1bmxvY2tlZC1pbzoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSB2ZXJpZnk6CisrICAjIENvZGUgZnJvbSBtb2R1bGUgd2Fybi1vbi11c2U6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgeGFsbG9jOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHhyZWFkbGluazoKKyBdKQorQEAgLTEwOSw5ICsxMDYsNiBAQCBBQ19ERUZVTihbZ2xfSU5JVF0sCisgICBnbF9zb3VyY2VfYmFzZT0nc3JjbGliJworIGdsX0ZVTkNfQUxMT0NBCisgZ2xfQ0FOT05JQ0FMSVpFX0xHUEwKKy1pZiB0ZXN0ICRIQVZFX0NBTk9OSUNBTElaRV9GSUxFX05BTUUgPSAwIHx8IHRlc3QgJFJFUExBQ0VfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRSA9IDE7IHRoZW4KKy0gIEFDX0xJQk9CSihbY2Fub25pY2FsaXplLWxncGxdKQorLWZpCisgZ2xfTU9EVUxFX0lORElDQVRPUihbY2Fub25pY2FsaXplLWxncGxdKQorIGdsX1NURExJQl9NT0RVTEVfSU5ESUNBVE9SKFtjYW5vbmljYWxpemVfZmlsZV9uYW1lXSkKKyBnbF9TVERMSUJfTU9EVUxFX0lORElDQVRPUihbcmVhbHBhdGhdKQorQEAgLTEyMSwxMCArMTE1LDYgQEAgZ2xfRU5WSVJPTgorIGdsX1VOSVNURF9NT0RVTEVfSU5ESUNBVE9SKFtlbnZpcm9uXSkKKyBnbF9IRUFERVJfRVJSTk9fSAorIGdsX0VSUk9SCistaWYgdGVzdCAkYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmUgPSBubzsgdGhlbgorLSAgQUNfTElCT0JKKFtlcnJvcl0pCistICBnbF9QUkVSRVFfRVJST1IKKy1maQorIG00X2lmZGVmKFtBTV9YR0VUVEVYVF9PUFRJT05dLAorICAgW0FNX11bWEdFVFRFWFRfT1BUSU9OKFstLWZsYWc9ZXJyb3I6MzpjLWZvcm1hdF0pCisgICAgQU1fXVtYR0VUVEVYVF9PUFRJT04oWy0tZmxhZz1lcnJvcl9hdF9saW5lOjU6Yy1mb3JtYXRdKV0pCitAQCAtMTM0LDQzICsxMjQsMjYgQEAgQU1fR05VX0dFVFRFWFRfVkVSU0lPTihbMC4xOC4xXSkKKyBBQ19TVUJTVChbTElCSU5UTF0pCisgQUNfU1VCU1QoW0xUTElCSU5UTF0pCisgZ2xfRlVOQ19MU1RBVAorLWlmIHRlc3QgJFJFUExBQ0VfTFNUQVQgPSAxOyB0aGVuCistICBBQ19MSUJPQkooW2xzdGF0XSkKKy0gIGdsX1BSRVJFUV9MU1RBVAorLWZpCisgZ2xfU1lTX1NUQVRfTU9EVUxFX0lORElDQVRPUihbbHN0YXRdKQorIGdsX01BTExPQ0EKKyBBQ19UWVBFX01CU1RBVEVfVAorIGdsX0ZVTkNfTUVNTU9WRQorLWlmIHRlc3QgJGFjX2N2X2Z1bmNfbWVtbW92ZSA9IG5vOyB0aGVuCistICBBQ19MSUJPQkooW21lbW1vdmVdKQorLSAgZ2xfUFJFUkVRX01FTU1PVkUKKy1maQorIGdsX01VTFRJQVJDSAorIGdsX1BBVEhNQVgKKyBBQ19DSEVDS19ERUNMUyhbcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWVdLCBbXSwgW10sIFsjaW5jbHVkZSA8ZXJybm8uaD5dKQorIEFDX0NIRUNLX0RFQ0xTKFtwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZV0sIFtdLCBbXSwgWyNpbmNsdWRlIDxlcnJuby5oPl0pCisgZ2xfRlVOQ19SRUFECistaWYgdGVzdCAkUkVQTEFDRV9SRUFEID0gMTsgdGhlbgorLSAgQUNfTElCT0JKKFtyZWFkXSkKKy1maQorIGdsX1VOSVNURF9NT0RVTEVfSU5ESUNBVE9SKFtyZWFkXSkKKyBnbF9GVU5DX1JFQURMSU5LCistaWYgdGVzdCAkSEFWRV9SRUFETElOSyA9IDAgfHwgdGVzdCAkUkVQTEFDRV9SRUFETElOSyA9IDE7IHRoZW4KKy0gIEFDX0xJQk9CSihbcmVhZGxpbmtdKQorLSAgZ2xfUFJFUkVRX1JFQURMSU5LCistZmkKKyBnbF9VTklTVERfTU9EVUxFX0lORElDQVRPUihbcmVhZGxpbmtdKQorIGdsX1JFTE9DQVRBQkxFKFskZ2xfc291cmNlX2Jhc2VdKQorLWlmIHRlc3QgJFJFTE9DQVRBQkxFID0geWVzOyB0aGVuCistICBBQ19MSUJPQkooW3Byb2dyZWxvY10pCistZmkKKyBnbF9GVU5DX1JFQURMSU5LX1NFUEFSQVRFCisgZ2xfQ0FOT05JQ0FMSVpFX0xHUExfU0VQQVJBVEUKKyBnbF9NQUxMT0NBCistZ2xfUkVMT0NBVEFCTEVfTElCUkFSWQorK2dsX1JFTE9DQVRBQkxFX0xJQlJBUllfU0VQQVJBVEUKKyBnbF9GVU5DX1NFVEVOVl9TRVBBUkFURQorLWdsX1BSRVJFUV9TQUZFX1JFQUQKKytnbF9GVU5DX1NUUkVSUk9SX1NFUEFSQVRFCisrZ2xfU0FGRV9SRUFECisgZ2xfU0lHTkFMX0gKKyBnbF9TSUdOQUxfU0lHUElQRQorIGRubCBEZWZpbmUgdGhlIEMgbWFjcm8gR05VTElCX1NJR1BJUEUgdG8gMS4KK0BAIC0xODYsMTcgKzE1OSw5IEBAIGRubCBEZWZpbmUgdGhlIHN1YnN0aXR1dGVkIHZhcmlhYmxlIEdOVUwKKyBBQ19SRVFVSVJFKFtnbF9VTklTVERfSF9ERUZBVUxUU10pCisgR05VTElCX1VOSVNURF9IX1NJR1BJUEU9MQorIGdsX1NJR05BTEJMT0NLSU5HCistaWYgdGVzdCAkSEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lORyA9IDA7IHRoZW4KKy0gIEFDX0xJQk9CSihbc2lncHJvY21hc2tdKQorLSAgZ2xfUFJFUkVRX1NJR1BST0NNQVNLCistZmkKKyBnbF9TSUdOQUxfTU9EVUxFX0lORElDQVRPUihbc2lncHJvY21hc2tdKQorIGd0X1RZUEVfU1NJWkVfVAorIGdsX0ZVTkNfU1RBVAorLWlmIHRlc3QgJFJFUExBQ0VfU1RBVCA9IDE7IHRoZW4KKy0gIEFDX0xJQk9CSihbc3RhdF0pCistICBnbF9QUkVSRVFfU1RBVAorLWZpCisgZ2xfU1lTX1NUQVRfTU9EVUxFX0lORElDQVRPUihbc3RhdF0pCisgQU1fU1REQk9PTF9ICisgZ2xfU1REREVGX0gKK0BAIC0yMDQsMTcgKzE2OSw3IEBAIGdsX1NURElOVF9ICisgZ2xfU1RESU9fSAorIGdsX1NURExJQl9ICisgZ2xfRlVOQ19TVFJFUlJPUgorLWlmIHRlc3QgJFJFUExBQ0VfU1RSRVJST1IgPSAxOyB0aGVuCistICBBQ19MSUJPQkooW3N0cmVycm9yXSkKKy1maQorLWdsX01PRFVMRV9JTkRJQ0FUT1IoW3N0cmVycm9yXSkKKyBnbF9TVFJJTkdfTU9EVUxFX0lORElDQVRPUihbc3RyZXJyb3JdKQorLUFDX1JFUVVJUkUoW2dsX0hFQURFUl9FUlJOT19IXSkKKy1BQ19SRVFVSVJFKFtnbF9GVU5DX1NUUkVSUk9SXzBdKQorLWlmIHRlc3QgLW4gIiRFUlJOT19IIiB8fCB0ZXN0ICRSRVBMQUNFX1NUUkVSUk9SXzAgPSAxOyB0aGVuCistICBBQ19MSUJPQkooW3N0cmVycm9yLW92ZXJyaWRlXSkKKy0gIGdsX1BSRVJFUV9TWVNfSF9XSU5TT0NLMgorLWZpCisgZ2xfSEVBREVSX1NUUklOR19ICisgZ2xfSEVBREVSX1NZU19TVEFUX0gKKyBBQ19QUk9HX01LRElSX1AKK0BAIC0zNjQsMTQgKzMxOSwxMyBAQCBBQ19ERUZVTihbZ2x0ZXN0c19MSUJTT1VSQ0VTXSwgWworICMgVGhpcyBtYWNybyByZWNvcmRzIHRoZSBsaXN0IG9mIGZpbGVzIHdoaWNoIGhhdmUgYmVlbiBpbnN0YWxsZWQgYnkKKyAjIGdudWxpYi10b29sIGFuZCBtYXkgYmUgcmVtb3ZlZCBieSBmdXR1cmUgZ251bGliLXRvb2wgaW52b2NhdGlvbnMuCisgQUNfREVGVU4oW2dsX0ZJTEVfTElTVF0sIFsKKysgIGJ1aWxkLWF1eC9hcmctbm9ubnVsbC5oCisrICBidWlsZC1hdXgvYysrZGVmcy5oCisgICBidWlsZC1hdXgvY29uZmlnLmxpYnBhdGgKKyAgIGJ1aWxkLWF1eC9jb25maWcucnBhdGgKKyAgIGJ1aWxkLWF1eC9pbnN0YWxsLXJlbG9jCisgICBidWlsZC1hdXgvcmVsb2MtbGRmbGFncworLSAgYnVpbGQtYXV4L3NuaXBwZXQvX05vcmV0dXJuLmgKKy0gIGJ1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmgKKy0gIGJ1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaAorLSAgYnVpbGQtYXV4L3NuaXBwZXQvd2Fybi1vbi11c2UuaAorKyAgYnVpbGQtYXV4L3dhcm4tb24tdXNlLmgKKyAgIGRvYy9yZWxvY2F0YWJsZS50ZXhpCisgICBsaWIvYWxsb2NhLmluLmgKKyAgIGxpYi9hbGxvY2F0b3IuYworQEAgLTQxOSw4ICszNzMsNiBAQCBBQ19ERUZVTihbZ2xfRklMRV9MSVNUXSwgWworICAgbGliL3N0ZGlvLmluLmgKKyAgIGxpYi9zdGRsaWIuaW4uaAorICAgbGliL3N0cmVxLmgKKy0gIGxpYi9zdHJlcnJvci1vdmVycmlkZS5jCistICBsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuaAorICAgbGliL3N0cmVycm9yLmMKKyAgIGxpYi9zdHJpbmcuaW4uaAorICAgbGliL3N5c19zdGF0LmluLmgKK0BAIC00NjMsNyArNDE1LDYgQEAgQUNfREVGVU4oW2dsX0ZJTEVfTElTVF0sIFsKKyAgIG00L2ludG1heC5tNAorICAgbTQvaW50dHlwZXMtcHJpLm00CisgICBtNC9pbnR0eXBlc19oLm00CistICBtNC9sYXJnZWZpbGUubTQKKyAgIG00L2xjbWVzc2FnZS5tNAorICAgbTQvbGliLWxkLm00CisgICBtNC9saWItbGluay5tNAorQEAgLTUwMiw3ICs0NTMsNiBAQCBBQ19ERUZVTihbZ2xfRklMRV9MSVNUXSwgWworICAgbTQvc3RkbGliX2gubTQKKyAgIG00L3N0cmVycm9yLm00CisgICBtNC9zdHJpbmdfaC5tNAorLSAgbTQvc3lzX3NvY2tldF9oLm00CisgICBtNC9zeXNfc3RhdF9oLm00CisgICBtNC90aHJlYWRsaWIubTQKKyAgIG00L3RpbWVfaC5tNAorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2luY2x1ZGVfbmV4dC5tNCBsaWJpY29udi0xLjE0L3NyY200L2luY2x1ZGVfbmV4dC5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9pbmNsdWRlX25leHQubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L2luY2x1ZGVfbmV4dC5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjY1MDQ4NDQ3MiAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBpbmNsdWRlX25leHQubTQgc2VyaWFsIDIwCisrIyBpbmNsdWRlX25leHQubTQgc2VyaWFsIDE4CisgZG5sIENvcHlyaWdodCAoQykgMjAwNi0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTE3NSwxMyArMTc1LDExIEBAIEFDX0RFRlVOKFtnbF9ORVhUX0hFQURFUlNfSU5URVJOQUxdLAorICAgICBbQUNfQ0hFQ0tfSEVBREVSU19PTkNFKFskMV0pCisgICAgIF0pCisgCistZG5sIEZJWE1FOiBnbF9uZXh0X2hlYWRlciBhbmQgZ2xfaGVhZGVyX2V4aXN0cyBtdXN0IGJlIHVzZWQgdW5xdW90ZWQKKy1kbmwgdW50aWwgd2UgY2FuIGFzc3VtZSBhdXRvY29uZiAyLjY0IG9yIG5ld2VyLgorICAgbTRfZm9yZWFjaF93KFtnbF9IRUFERVJfTkFNRV0sIFskMV0sCisgICAgIFtBU19WQVJfUFVTSERFRihbZ2xfbmV4dF9oZWFkZXJdLAorICAgICAgICAgICAgICAgICAgICAgW2dsX2N2X25leHRfXW00X2RlZm4oW2dsX0hFQURFUl9OQU1FXSkpCisgICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllczsgdGhlbgorLSAgICAgICBBU19WQVJfU0VUKGdsX25leHRfaGVhZGVyLCBbJzwnZ2xfSEVBREVSX05BTUUnPiddKQorKyAgICAgICBBU19WQVJfU0VUKFtnbF9uZXh0X2hlYWRlcl0sIFsnPCdnbF9IRUFERVJfTkFNRSc+J10pCisgICAgICBlbHNlCisgICAgICAgIEFDX0NBQ0hFX0NIRUNLKAorICAgICAgICAgIFthYnNvbHV0ZSBuYW1lIG9mIDxdbTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKVs+XSwKK0BAIC0yMTAsNyArMjA4LDcgQEAgZG5sIHVudGlsIHdlIGNhbiBhc3N1bWUgYXV0b2NvbmYgMi42NCBvcgorICAgICAgICAgICAgICAgIGRubCBldmFsIGlzIG5lY2Vzc2FyeSB0byBleHBhbmQgZ2xfYWJzbmFtZV9jcHAuCisgICAgICAgICAgICAgICAgZG5sIFVsdHJpeCBhbmQgUHlyYW1pZCBzaCByZWZ1c2UgdG8gcmVkaXJlY3Qgb3V0cHV0IG9mIGV2YWwsCisgICAgICAgICAgICAgICAgZG5sIHNvIHVzZSBzdWJzaGVsbC4KKy0gICAgICAgICAgICAgICBBU19WQVJfU0VUKGdsX25leHRfaGVhZGVyLAorKyAgICAgICAgICAgICAgIEFTX1ZBUl9TRVQoW2dsX25leHRfaGVhZGVyXSwKKyAgICAgICAgICAgICAgICAgIFsnIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mQVNfTUVTU0FHRV9MT0dfRkQgfAorICAgICAgICAgICAgICAgICAgIHNlZCAtbiAnXCMvXW00X2RlZm4oW2dsX0hFQURFUl9OQU1FXSlbI3sKKyAgICAgICAgICAgICAgICAgICAgIHMjLioiXCguKi9dbTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKVtcKSIuKiNcMSMKK0BAIC0yMjAsMjAgKzIxOCwyMCBAQCBkbmwgdW50aWwgd2UgY2FuIGFzc3VtZSBhdXRvY29uZiAyLjY0IG9yCisgICAgICAgICAgICAgICAgICAgfSdgJyInXSkKKyAgICAgICAgICAgbTRfaWYoWyQyXSwgW2NoZWNrXSwKKyAgICAgICAgICAgICBbZWxzZQorLSAgICAgICAgICAgICAgIEFTX1ZBUl9TRVQoZ2xfbmV4dF9oZWFkZXIsIFsnPCdnbF9IRUFERVJfTkFNRSc+J10pCisrICAgICAgICAgICAgICAgQVNfVkFSX1NFVChbZ2xfbmV4dF9oZWFkZXJdLCBbJzwnZ2xfSEVBREVSX05BTUUnPiddKQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIF0pCisgICAgICAgICAgXSkKKyAgICAgIGZpCisgICAgICBBQ19TVUJTVCgKKyAgICAgICAgQVNfVFJfQ1BQKFtORVhUX11tNF9kZWZuKFtnbF9IRUFERVJfTkFNRV0pKSwKKy0gICAgICAgW0FTX1ZBUl9HRVQoZ2xfbmV4dF9oZWFkZXIpXSkKKysgICAgICAgW0FTX1ZBUl9HRVQoW2dsX25leHRfaGVhZGVyXSldKQorICAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXMgfHwgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSBidWdneTsgdGhlbgorICAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGVfbmV4dCcKKyAgICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9JzwnZ2xfSEVBREVSX05BTUUnPicKKyAgICAgIGVsc2UKKyAgICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRlJworLSAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT1BU19WQVJfR0VUKGdsX25leHRfaGVhZGVyKQorKyAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT1BU19WQVJfR0VUKFtnbF9uZXh0X2hlYWRlcl0pCisgICAgICBmaQorICAgICAgQUNfU1VCU1QoCisgICAgICAgIEFTX1RSX0NQUChbTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfXW00X2RlZm4oW2dsX0hFQURFUl9OQU1FXSkpLAorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2xhcmdlZmlsZS5tNCBsaWJpY29udi0xLjE0L3NyY200L2xhcmdlZmlsZS5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9sYXJnZWZpbGUubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L2xhcmdlZmlsZS5tNAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorQEAgLTEsMTA0ICswLDAgQEAKKy0jIEVuYWJsZSBsYXJnZSBmaWxlcyBvbiBzeXN0ZW1zIHdoZXJlIHRoaXMgaXMgbm90IHRoZSBkZWZhdWx0LgorLQorLSMgQ29weXJpZ2h0IDE5OTItMTk5NiwgMTk5OC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKy0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCistIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCistCistIyBUaGUgZm9sbG93aW5nIGltcGxlbWVudGF0aW9uIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gYXV0b2NvbmYgPD0gMi42ODsKKy0jIEFDX1NZU19MQVJHRUZJTEUgZG9lcyBub3QgY29uZmlndXJlIGZvciBsYXJnZSBpbm9kZXMgb24gTWFjIE9TIFggMTAuNS4KKy1tNF92ZXJzaW9uX3ByZXJlcShbMi42OV0sIFtdICxbCistCistIyBfQUNfU1lTX0xBUkdFRklMRV9URVNUX0lOQ0xVREVTCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistbTRfZGVmaW5lKFtfQUNfU1lTX0xBUkdFRklMRV9URVNUX0lOQ0xVREVTXSwKKy1bQCU6QGluY2x1ZGUgPHN5cy90eXBlcy5oPgorLSAvKiBDaGVjayB0aGF0IG9mZl90IGNhbiByZXByZXNlbnQgMioqNjMgLSAxIGNvcnJlY3RseS4KKy0gICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAorLSAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCistICAgIGluY29ycmVjdGx5IHJlamVjdCA5MjIzMzcyMDM2ODU0Nzc1ODA3LiAgKi8KKy1AJTpAZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAoKG9mZl90KSAxIDw8IDYyKSkKKy0gIGludCBvZmZfdF9pc19sYXJnZVtbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKKy0JCSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKKy0JCSAgICAgID8gMSA6IC0xXV07W11kbmwKKy1dKQorLQorLQorLSMgX0FDX1NZU19MQVJHRUZJTEVfTUFDUk9fVkFMVUUoQy1NQUNSTywgVkFMVUUsCistIwkJCQlDQUNIRS1WQVIsCistIwkJCQlERVNDUklQVElPTiwKKy0jCQkJCVBST0xPR1VFLCBbRlVOQ1RJT04tQk9EWV0pCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLW00X2RlZmluZShbX0FDX1NZU19MQVJHRUZJTEVfTUFDUk9fVkFMVUVdLAorLVtBQ19DQUNIRV9DSEVDSyhbZm9yICQxIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXNdLCBbJDNdLAorLVt3aGlsZSA6OyBkbworLSAgbTRfaWZ2YWwoWyQ2XSwgW0FDX0xJTktfSUZFTFNFXSwgW0FDX0NPTVBJTEVfSUZFTFNFXSkoCistICAgIFtBQ19MQU5HX1BST0dSQU0oWyQ1XSwgWyQ2XSldLAorLSAgICBbJDM9bm87IGJyZWFrXSkKKy0gIG00X2lmdmFsKFskNl0sIFtBQ19MSU5LX0lGRUxTRV0sIFtBQ19DT01QSUxFX0lGRUxTRV0pKAorLSAgICBbQUNfTEFOR19QUk9HUkFNKFtAJTpAZGVmaW5lICQxICQyCistJDVdLCBbJDZdKV0sCistICAgIFskMz0kMjsgYnJlYWtdKQorLSAgJDM9dW5rbm93bgorLSAgYnJlYWsKKy1kb25lXSkKKy1jYXNlICQkMyBpbiAjKAorLSAgbm8gfCB1bmtub3duKSA7OworLSAgKikgQUNfREVGSU5FX1VOUVVPVEVEKFskMV0sIFskJDNdLCBbJDRdKTs7CistZXNhYworLXJtIC1yZiBjb25mdGVzdCpbXWRubAorLV0pIyBfQUNfU1lTX0xBUkdFRklMRV9NQUNST19WQUxVRQorLQorLQorLSMgQUNfU1lTX0xBUkdFRklMRQorLSMgLS0tLS0tLS0tLS0tLS0tLQorLSMgQnkgZGVmYXVsdCwgbWFueSBob3N0cyB3b24ndCBsZXQgcHJvZ3JhbXMgYWNjZXNzIGxhcmdlIGZpbGVzOworLSMgb25lIG11c3QgdXNlIHNwZWNpYWwgY29tcGlsZXIgb3B0aW9ucyB0byBnZXQgbGFyZ2UtZmlsZSBhY2Nlc3MgdG8gd29yay4KKy0jIEZvciBtb3JlIGRldGFpbHMgYWJvdXQgdGhpcyBicmFpbiBkYW1hZ2UgcGxlYXNlIHNlZToKKy0jIGh0dHA6Ly93d3cudW5peC1zeXN0ZW1zLm9yZy92ZXJzaW9uMi93aGF0c25ldy9sZnMyMG1hci5odG1sCistQUNfREVGVU4oW0FDX1NZU19MQVJHRUZJTEVdLAorLVtBQ19BUkdfRU5BQkxFKGxhcmdlZmlsZSwKKy0JICAgICAgIFsgIC0tZGlzYWJsZS1sYXJnZWZpbGUgICAgIG9taXQgc3VwcG9ydCBmb3IgbGFyZ2UgZmlsZXNdKQorLWlmIHRlc3QgIiRlbmFibGVfbGFyZ2VmaWxlIiAhPSBubzsgdGhlbgorLQorLSAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzcGVjaWFsIEMgY29tcGlsZXIgb3B0aW9ucyBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzXSwKKy0gICAgYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQywKKy0gICAgW2FjX2N2X3N5c19sYXJnZWZpbGVfQ0M9bm8KKy0gICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorLSAgICAgICBhY19zYXZlX0NDPSRDQworLSAgICAgICB3aGlsZSA6OyBkbworLQkgIyBJUklYIDYuMiBhbmQgbGF0ZXIgZG8gbm90IHN1cHBvcnQgbGFyZ2UgZmlsZXMgYnkgZGVmYXVsdCwKKy0JICMgc28gdXNlIHRoZSBDIGNvbXBpbGVyJ3MgLW4zMiBvcHRpb24gaWYgdGhhdCBoZWxwcy4KKy0JIEFDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfUFJPR1JBTShbX0FDX1NZU19MQVJHRUZJTEVfVEVTVF9JTkNMVURFU10pXSkKKy0JIEFDX0NPTVBJTEVfSUZFTFNFKFtdLCBbYnJlYWtdKQorLQkgQ0M9IiRDQyAtbjMyIgorLQkgQUNfQ09NUElMRV9JRkVMU0UoW10sIFthY19jdl9zeXNfbGFyZ2VmaWxlX0NDPScgLW4zMic7IGJyZWFrXSkKKy0JIGJyZWFrCistICAgICAgIGRvbmUKKy0gICAgICAgQ0M9JGFjX3NhdmVfQ0MKKy0gICAgICAgcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorLSAgICBmaV0pCistICBpZiB0ZXN0ICIkYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQyIgIT0gbm87IHRoZW4KKy0gICAgQ0M9JENDJGFjX2N2X3N5c19sYXJnZWZpbGVfQ0MKKy0gIGZpCistCistICBfQUNfU1lTX0xBUkdFRklMRV9NQUNST19WQUxVRShfRklMRV9PRkZTRVRfQklUUywgNjQsCistICAgIGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzLAorLSAgICBbTnVtYmVyIG9mIGJpdHMgaW4gYSBmaWxlIG9mZnNldCwgb24gaG9zdHMgd2hlcmUgdGhpcyBpcyBzZXR0YWJsZS5dLAorLSAgICBbX0FDX1NZU19MQVJHRUZJTEVfVEVTVF9JTkNMVURFU10pCistICBpZiB0ZXN0ICRhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cyA9IHVua25vd247IHRoZW4KKy0gICAgX0FDX1NZU19MQVJHRUZJTEVfTUFDUk9fVkFMVUUoX0xBUkdFX0ZJTEVTLCAxLAorLSAgICAgIGFjX2N2X3N5c19sYXJnZV9maWxlcywKKy0gICAgICBbRGVmaW5lIGZvciBsYXJnZSBmaWxlcywgb24gQUlYLXN0eWxlIGhvc3RzLl0sCistICAgICAgW19BQ19TWVNfTEFSR0VGSUxFX1RFU1RfSU5DTFVERVNdKQorLSAgZmkKKy0KKy0gIEFIX1ZFUkJBVElNKFtfREFSV0lOX1VTRV82NF9CSVRfSU5PREVdLAorLVsvKiBFbmFibGUgbGFyZ2UgaW5vZGUgbnVtYmVycyBvbiBNYWMgT1MgWC4gICovCistI2lmbmRlZiBfREFSV0lOX1VTRV82NF9CSVRfSU5PREUKKy0jIGRlZmluZSBfREFSV0lOX1VTRV82NF9CSVRfSU5PREUgMQorLSNlbmRpZl0pCistZmkKKy1dKSMgQUNfU1lTX0xBUkdFRklMRQorLQorLV0pIyBtNF92ZXJzaW9uX3ByZXJlcSAyLjY5CitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvbHN0YXQubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9sc3RhdC5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9sc3RhdC5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvbHN0YXQubTQJMjAxMi0wMS0wOCAwMjowNzo0MC43MjI0ODQ0NzYgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgc2VyaWFsIDIzCisrIyBzZXJpYWwgMjEKKyAKKyAjIENvcHlyaWdodCAoQykgMTk5Ny0yMDAxLCAyMDAzLTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIworQEAgLTE1LDI4ICsxNSwyNCBAQCBBQ19ERUZVTihbZ2xfRlVOQ19MU1RBVF0sCisgICBkbmwgIiNkZWZpbmUgbHN0YXQgc3RhdCIsIGFuZCBsc3RhdC5jIGlzIGEgbm8tb3AuCisgICBBQ19DSEVDS19GVU5DU19PTkNFKFtsc3RhdF0pCisgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2xzdGF0ID0geWVzOyB0aGVuCistICAgIEFDX1JFUVVJUkUoW2dsX0ZVTkNfTFNUQVRfRk9MTE9XU19TTEFTSEVEX1NZTUxJTktdKQorLSAgICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbmsgPSBubzsgdGhlbgorKyAgICBBQ19SRVFVSVJFKFtBQ19GVU5DX0xTVEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LXSkKKysgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rID0gbm87IHRoZW4KKysgICAgICBkbmwgTm90ZTogQUNfRlVOQ19MU1RBVF9GT0xMT1dTX1NMQVNIRURfU1lNTElOSyBkb2VzIEFDX0xJQk9CSihbbHN0YXRdKS4KKyAgICAgICBSRVBMQUNFX0xTVEFUPTEKKyAgICAgZmkKKysgICAgIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9sc3RhdC5jLgorKyAgICBBQ19SRVFVSVJFKFtBQ19DX0lOTElORV0pCisgICBlbHNlCisgICAgIEhBVkVfTFNUQVQ9MAorICAgZmkKKyBdKQorIAorLSMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvbHN0YXQuYy4KKy1BQ19ERUZVTihbZ2xfUFJFUkVRX0xTVEFUXSwKKysjIFJlZGVmaW5lIEFDX0ZVTkNfTFNUQVRfRk9MTE9XU19TTEFTSEVEX1NZTUxJTkssIGJlY2F1c2UgaXQgaXMgbm8gbG9uZ2VyCisrIyBtYWludGFpbmVkIGluIEF1dG9jb25mLgorK0FDX0RFRlVOKFtBQ19GVU5DX0xTVEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LXSwKKyBbCistICBBQ19SRVFVSVJFKFtBQ19DX0lOTElORV0pCistICA6CistXSkKKy0KKy1BQ19ERUZVTihbZ2xfRlVOQ19MU1RBVF9GT0xMT1dTX1NMQVNIRURfU1lNTElOS10sCistWworLSAgZG5sIFdlIGRvbid0IHVzZSBBQ19GVU5DX0xTVEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LIGFueSBtb3JlLCBiZWNhdXNlIGl0CistICBkbmwgaXMgbm8gbG9uZ2VyIG1haW50YWluZWQgaW4gQXV0b2NvbmYgYW5kIGJlY2F1c2UgaXQgaW52b2tlcyBBQ19MSUJPQkouCisgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBsc3RhdCBjb3JyZWN0bHkgaGFuZGxlcyB0cmFpbGluZyBzbGFzaF0sCistICAgIFtnbF9jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbmtdLAorKyAgICBbYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rXSwKKyAgICAgW3JtIC1mIGNvbmZ0ZXN0LnN5bSBjb25mdGVzdC5maWxlCisgICAgICBlY2hvID5jb25mdGVzdC5maWxlCisgICAgICBpZiB0ZXN0ICIkYXNfbG5fcyIgPSAibG4gLXMiICYmIGxuIC1zIGNvbmZ0ZXN0LmZpbGUgY29uZnRlc3Quc3ltOyB0aGVuCitAQCAtNDksMjIgKzQ1LDI1IEBAIEFDX0RFRlVOKFtnbF9GVU5DX0xTVEFUX0ZPTExPV1NfU0xBU0hFRF8KKyAgICAgICAgICAgICAgICAgIGhhdmUgdG8gY29tcGlsZSBhbmQgdXNlIHRoZSBsc3RhdCB3cmFwcGVyLiAgKi8KKyAgICAgICAgICAgICAgIHJldHVybiBsc3RhdCAoImNvbmZ0ZXN0LnN5bS8iLCAmc2J1ZikgPT0gMDsKKyAgICAgICAgICAgICBdXSldLAorLSAgICAgICAgIFtnbF9jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9eWVzXSwKKy0gICAgICAgICBbZ2xfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPW5vXSwKKysgICAgICAgICBbYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPXllc10sCisrICAgICAgICAgW2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz1ub10sCisgICAgICAgICAgWyMgV2hlbiBjcm9zcy1jb21waWxpbmcsIGJlIHBlc3NpbWlzdGljIHNvIHdlIHdpbGwgZW5kIHVwIHVzaW5nIHRoZQorICAgICAgICAgICAjIHJlcGxhY2VtZW50IHZlcnNpb24gb2YgbHN0YXQgdGhhdCBjaGVja3MgZm9yIHRyYWlsaW5nIHNsYXNoZXMgYW5kCisgICAgICAgICAgICMgY2FsbHMgbHN0YXQgYSBzZWNvbmQgdGltZSB3aGVuIG5lY2Vzc2FyeS4KKy0gICAgICAgICAgZ2xfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPW5vCisrICAgICAgICAgIGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz1ubworICAgICAgICAgIF0pCisgICAgICBlbHNlCisgICAgICAgICMgSWYgdGhlICdsbiAtcycgY29tbWFuZCBmYWlsZWQsIHRoZW4gd2UgcHJvYmFibHkgZG9uJ3QgZXZlbgorICAgICAgICAjIGhhdmUgYW4gbHN0YXQgZnVuY3Rpb24uCistICAgICAgIGdsX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz1ubworKyAgICAgICBhY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9bm8KKyAgICAgIGZpCisgICAgICBybSAtZiBjb25mdGVzdC5zeW0gY29uZnRlc3QuZmlsZQorICAgICBdKQorLSAgdGVzdCAkZ2xfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rID0geWVzICYmCisrICB0ZXN0ICRhY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbmsgPSB5ZXMgJiYKKyAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtMU1RBVF9GT0xMT1dTX1NMQVNIRURfU1lNTElOS10sIFsxXSwKKyAgICAgICBbRGVmaW5lIHRvIDEgaWYgYGxzdGF0JyBkZXJlZmVyZW5jZXMgYSBzeW1saW5rIHNwZWNpZmllZAorICAgICAgICB3aXRoIGEgdHJhaWxpbmcgc2xhc2guXSkKKysgIGlmIHRlc3QgIngkYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rIiA9IHhubzsgdGhlbgorKyAgICBBQ19MSUJPQkooW2xzdGF0XSkKKysgIGZpCisgXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9tZW1tb3ZlLm00IGxpYmljb252LTEuMTQvc3JjbTQvbWVtbW92ZS5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9tZW1tb3ZlLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9tZW1tb3ZlLm00CTIwMTItMDEtMDggMDI6MDc6NDAuNzM4NDg0NDc3IC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIG1lbW1vdmUubTQgc2VyaWFsIDQKKysjIG1lbW1vdmUubTQgc2VyaWFsIDMKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA5LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtNiw3ICs2LDEwIEBAIGRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG8KKyAKKyBBQ19ERUZVTihbZ2xfRlVOQ19NRU1NT1ZFXSwKKyBbCistICBBQ19DSEVDS19GVU5DUyhbbWVtbW92ZV0pCisrICBBQ19SRVBMQUNFX0ZVTkNTKFttZW1tb3ZlXSkKKysgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWVtbW92ZSA9IG5vOyB0aGVuCisrICAgIGdsX1BSRVJFUV9NRU1NT1ZFCisrICBmaQorIF0pCisgCisgIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9tZW1tb3ZlLmMuCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcGF0aG1heC5tNCBsaWJpY29udi0xLjE0L3NyY200L3BhdGhtYXgubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcGF0aG1heC5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvcGF0aG1heC5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjc1ODQ4NDQ3OCAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBwYXRobWF4Lm00IHNlcmlhbCA5CisrIyBwYXRobWF4Lm00IHNlcmlhbCA4CisgZG5sIENvcHlyaWdodCAoQykgMjAwMi0yMDAzLCAyMDA1LTIwMDYsIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgZG5sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK0BAIC04LDUgKzgsNiBAQCBkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvCisgQUNfREVGVU4oW2dsX1BBVEhNQVhdLAorIFsKKyAgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9wYXRobWF4LmguCisrICBBQ19DSEVDS19GVU5DU19PTkNFKFtwYXRoY29uZl0pCisgICBBQ19DSEVDS19IRUFERVJTX09OQ0UoW3N5cy9wYXJhbS5oXSkKKyBdKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3BvLm00IGxpYmljb252LTEuMTQvc3JjbTQvcG8ubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcG8ubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3BvLm00CTIwMTItMDEtMDggMDI6MDc6NDAuNzY2NDg0NDc3IC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHBvLm00IHNlcmlhbCAxN2EKKysjIHBvLm00IHNlcmlhbCAxNyAoZ2V0dGV4dC0wLjE4KQorIGRubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC0xMTgsOCArMTE4LDcgQEAgY2hhbmdlcXVvdGUoWyxdKWRubAorICAgICAgICAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL1BPVEZJTEVTLmluIjsgdGhlbgorICAgICAgICAgICBybSAtZiAiJGFjX2Rpci9QT1RGSUxFUyIKKyAgICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19kaXIvUE9URklMRVMiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvUE9URklMRVMiCistICAgICAgICAgIGd0X3RhYj1gcHJpbnRmICdcdCdgCistICAgICAgICAgIGNhdCAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL1BPVEZJTEVTLmluIiB8IHNlZCAtZSAiL14jL2QiIC1lICIvXlsgJHtndF90YWJ9XSpcJC9kIiAtZSAicywuKiwgICAgICR0b3Bfc3JjZGlyLyYgXFxcXCwiIHwgc2VkIC1lICJcJHMvXCguKlwpIFxcXFwvXDEvIiA+ICIkYWNfZGlyL1BPVEZJTEVTIgorKyAgICAgICAgICBjYXQgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9QT1RGSUxFUy5pbiIgfCBzZWQgLWUgIi9eIy9kIiAtZSAiL15bIAldKlwkL2QiIC1lICJzLC4qLCAgICAgJHRvcF9zcmNkaXIvJiBcXFxcLCIgfCBzZWQgLWUgIlwkcy9cKC4qXCkgXFxcXC9cMS8iID4gIiRhY19kaXIvUE9URklMRVMiCisgICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSJQT1RGSUxFUy5pbiIKKyAgICAgICAgICAgIyBBTExfTElOR1VBUywgUE9GSUxFUywgVVBEQVRFUE9GSUxFUywgRFVNTVlQT0ZJTEVTLCBHTU9GSUxFUyBkZXBlbmQKKyAgICAgICAgICAgIyBvbiAkYWNfZGlyIGJ1dCBkb24ndCBkZXBlbmQgb24gdXNlci1zcGVjaWZpZWQgY29uZmlndXJhdGlvbgorQEAgLTI1NSw3ICsyNTQsNiBAQCBFT1QKKyAgIGZpCisgCisgICAjIEEgc2VkIHNjcmlwdCB0aGF0IGV4dHJhY3RzIHRoZSB2YWx1ZSBvZiBWQVJJQUJMRSBmcm9tIGEgTWFrZWZpbGUuCistICB0YWI9YHByaW50ZiAnXHQnYAorICAgc2VkX3hfdmFyaWFibGU9JworICMgVGVzdCBpZiB0aGUgaG9sZCBzcGFjZSBpcyBlbXB0eS4KKyB4CitAQCAtMjYzLDkgKzI2MSw5IEBAIHMvUC9QLworIHgKKyB0YQorICMgWWVzIGl0IHdhcyBlbXB0eS4gTG9vayBpZiB3ZSBoYXZlIHRoZSBleHBlY3RlZCB2YXJpYWJsZSBkZWZpbml0aW9uLgorLS9eWyciJHt0YWJ9IicgXSpWQVJJQUJMRVsnIiR7dGFifSInIF0qPS97CisrL15bCSBdKlZBUklBQkxFWwkgXSo9L3sKKyAgICMgU2VlbiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgdmFyaWFibGUgZGVmaW5pdGlvbi4KKy0gIHMvXlsnIiR7dGFifSInIF0qVkFSSUFCTEVbJyIke3RhYn0iJyBdKj0vLworKyAgcy9eWwkgXSpWQVJJQUJMRVsJIF0qPS8vCisgICBiYQorIH0KKyBiZAorQEAgLTQwNywxNSArNDA1LDE0IEBAIGNoYW5nZXF1b3RlKFssXSlkbmwKKyAgIGZpCisgCisgICBzZWQgLWUgInN8QFBPVEZJTEVTX0RFUFNAfCRQT1RGSUxFU19ERVBTfGciIC1lICJzfEBQT0ZJTEVTQHwkUE9GSUxFU3xnIiAtZSAic3xAVVBEQVRFUE9GSUxFU0B8JFVQREFURVBPRklMRVN8ZyIgLWUgInN8QERVTU1ZUE9GSUxFU0B8JERVTU1ZUE9GSUxFU3xnIiAtZSAic3xAR01PRklMRVNAfCRHTU9GSUxFU3xnIiAtZSAic3xAUFJPUEVSVElFU0ZJTEVTQHwkUFJPUEVSVElFU0ZJTEVTfGciIC1lICJzfEBDTEFTU0ZJTEVTQHwkQ0xBU1NGSUxFU3xnIiAtZSAic3xAUU1GSUxFU0B8JFFNRklMRVN8ZyIgLWUgInN8QE1TR0ZJTEVTQHwkTVNHRklMRVN8ZyIgLWUgInN8QFJFU09VUkNFU0RMTEZJTEVTQHwkUkVTT1VSQ0VTRExMRklMRVN8ZyIgLWUgInN8QENBVEFMT0dTQHwkQ0FUQUxPR1N8ZyIgLWUgInN8QEpBVkFDQVRBTE9HU0B8JEpBVkFDQVRBTE9HU3xnIiAtZSAic3xAUVRDQVRBTE9HU0B8JFFUQ0FUQUxPR1N8ZyIgLWUgInN8QFRDTENBVEFMT0dTQHwkVENMQ0FUQUxPR1N8ZyIgLWUgInN8QENTSEFSUENBVEFMT0dTQHwkQ1NIQVJQQ0FUQUxPR1N8ZyIgLWUgJ3MsXiNkaXN0ZGlyOixkaXN0ZGlyOiwnIDwgIiRhY19maWxlIiA+ICIkYWNfZmlsZS50bXAiCistICB0YWI9YHByaW50ZiAnXHQnYAorICAgaWYgZ3JlcCAtbCAnQFRDTENBVEFMT0dTQCcgIiRhY19maWxlIiA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAjIEFkZCBkZXBlbmRlbmNpZXMgdGhhdCBjYW5ub3QgYmUgZm9ybXVsYXRlZCBhcyBhIHNpbXBsZSBzdWZmaXggcnVsZS4KKyAgICAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworICAgICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL1wuLiokLy8nIC1lICd5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LydgCisgICAgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCisgJGZyb2JiZWRsYW5nLm1zZzogJGxhbmcucG8KKy0ke3RhYn1AZWNobyAiXCQoTVNHRk1UKSAtYyAtLXRjbCAtZCBcJChzcmNkaXIpIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyI7IFwKKy0ke3RhYn1cJChNU0dGTVQpIC1jIC0tdGNsIC1kICJcJChzcmNkaXIpIiAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gfHwgeyBybSAtZiAiXCQoc3JjZGlyKS8kZnJvYmJlZGxhbmcubXNnIjsgZXhpdCAxOyB9CisrCUBlY2hvICJcJChNU0dGTVQpIC1jIC0tdGNsIC1kIFwkKHNyY2RpcikgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIjsgXAorKwlcJChNU0dGTVQpIC1jIC0tdGNsIC1kICJcJChzcmNkaXIpIiAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gfHwgeyBybSAtZiAiXCQoc3JjZGlyKS8kZnJvYmJlZGxhbmcubXNnIjsgZXhpdCAxOyB9CisgRU9GCisgICAgIGRvbmUKKyAgIGZpCitAQCAtNDI1LDggKzQyMiw4IEBAIEVPRgorICAgICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL18vLS9nJyAtZSAncy9ec3ItQ1Mvc3ItU1AvJyAtZSAncy9AbGF0aW4kLy1MYXRuLycgLWUgJ3MvQGN5cmlsbGljJC8tQ3lybC8nIC1lICdzL15zci1TUCQvc3ItU1AtTGF0bi8nIC1lICdzL151ei1VWiQvdXotVVotTGF0bi8nYAorICAgICAgIGNhdCA+PiAiJGFjX2ZpbGUudG1wIiA8PEVPRgorICRmcm9iYmVkbGFuZy9cJChET01BSU4pLnJlc291cmNlcy5kbGw6ICRsYW5nLnBvCistJHt0YWJ9QGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS1jc2hhcnAgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gLXIgXCQoRE9NQUlOKSI7IFwKKy0ke3RhYn1cJChNU0dGTVQpIC1jIC0tY3NoYXJwIC1kICJcJChzcmNkaXIpIiAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gLXIgIlwkKERPTUFJTikiIHx8IHsgcm0gLWYgIlwkKHNyY2RpcikvJGZyb2JiZWRsYW5nLm1zZyI7IGV4aXQgMTsgfQorKwlAZWNobyAiXCQoTVNHRk1UKSAtYyAtLWNzaGFycCAtZCBcJChzcmNkaXIpIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyAtciBcJChET01BSU4pIjsgXAorKwlcJChNU0dGTVQpIC1jIC0tY3NoYXJwIC1kICJcJChzcmNkaXIpIiAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gLXIgIlwkKERPTUFJTikiIHx8IHsgcm0gLWYgIlwkKHNyY2RpcikvJGZyb2JiZWRsYW5nLm1zZyI7IGV4aXQgMTsgfQorIEVPRgorICAgICBkb25lCisgICBmaQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3JlYWRsaW5rLm00IGxpYmljb252LTEuMTQvc3JjbTQvcmVhZGxpbmsubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcmVhZGxpbmsubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3JlYWRsaW5rLm00CTIwMTItMDEtMDggMDI6MDc6NDAuNzkwNDg0NDc5IC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHJlYWRsaW5rLm00IHNlcmlhbCAxMQorKyMgcmVhZGxpbmsubTQgc2VyaWFsIDEwCisgZG5sIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTEwLDYgKzEwLDggQEAgQUNfREVGVU4oW2dsX0ZVTkNfUkVBRExJTktdLAorICAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbcmVhZGxpbmtdKQorICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19yZWFkbGluayA9IG5vOyB0aGVuCisgICAgIEhBVkVfUkVBRExJTks9MAorKyAgICBBQ19MSUJPQkooW3JlYWRsaW5rXSkKKysgICAgZ2xfUFJFUkVRX1JFQURMSU5LCisgICBlbHNlCisgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHJlYWRsaW5rIHNpZ25hdHVyZSBpcyBjb3JyZWN0XSwKKyAgICAgICBbZ2xfY3ZfZGVjbF9yZWFkbGlua193b3Jrc10sCitAQCAtMzgsOCArNDAsMTAgQEAgQUNfREVGVU4oW2dsX0ZVTkNfUkVBRExJTktdLAorICAgICAgIEFDX0RFRklORShbUkVBRExJTktfVFJBSUxJTkdfU0xBU0hfQlVHXSwgWzFdLCBbRGVmaW5lIHRvIDEgaWYgcmVhZGxpbmsKKyAgICAgICAgIGZhaWxzIHRvIHJlY29nbml6ZSBhIHRyYWlsaW5nIHNsYXNoLl0pCisgICAgICAgUkVQTEFDRV9SRUFETElOSz0xCisrICAgICAgQUNfTElCT0JKKFtyZWFkbGlua10pCisgICAgIGVsaWYgdGVzdCAiJGdsX2N2X2RlY2xfcmVhZGxpbmtfd29ya3MiICE9IHllczsgdGhlbgorICAgICAgIFJFUExBQ0VfUkVBRExJTks9MQorKyAgICAgIEFDX0xJQk9CSihbcmVhZGxpbmtdKQorICAgICBmaQorICAgZmkKKyBdKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3JlYWQubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9yZWFkLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3JlYWQubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3JlYWQubTQJMjAxMi0wMS0wOCAwMjowNzo0MC43ODI0ODQ0NzggLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgcmVhZC5tNCBzZXJpYWwgMgorKyMgcmVhZC5tNCBzZXJpYWwgMQorIGRubCBDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtMTQsNiArMTQsNyBAQCBBQ19ERUZVTihbZ2xfRlVOQ19SRUFEXSwKKyAgICAgZ2xfTk9OQkxPQ0tJTkdfSU8KKyAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9ub25ibG9ja2luZyAhPSB5ZXM7IHRoZW4KKyAgICAgICBSRVBMQUNFX1JFQUQ9MQorKyAgICAgIEFDX0xJQk9CSihbcmVhZF0pCisgICAgIGZpCisgICBdKQorIF0pCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcmVsb2NhdGFibGUtbGliLm00IGxpYmljb252LTEuMTQvc3JjbTQvcmVsb2NhdGFibGUtbGliLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3JlbG9jYXRhYmxlLWxpYi5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvcmVsb2NhdGFibGUtbGliLm00CTIwMTItMDEtMDggMDI6MDc6NDAuNzk4NDg0NDgwIC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHJlbG9jYXRhYmxlLWxpYi5tNCBzZXJpYWwgNgorKyMgcmVsb2NhdGFibGUtbGliLm00IHNlcmlhbCA1CisgZG5sIENvcHlyaWdodCAoQykgMjAwMywgMjAwNS0yMDA3LCAyMDA5LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtMTAsNiArMTAsOSBAQCBkbmwgU3VwcG9ydCBmb3IgcmVsb2NhdGFibGUgbGlicmFyaWVzLgorIEFDX0RFRlVOKFtnbF9SRUxPQ0FUQUJMRV9MSUJSQVJZXSwKKyBbCisgICBBQ19SRVFVSVJFKFtnbF9SRUxPQ0FUQUJMRV9MSUJSQVJZX0JPRFldKQorKyAgaWYgdGVzdCAkUkVMT0NBVEFCTEUgPSB5ZXM7IHRoZW4KKysgICAgQUNfTElCT0JKKFtyZWxvY2F0YWJsZV0pCisrICBmaQorIF0pCisgQUNfREVGVU4oW2dsX1JFTE9DQVRBQkxFX0xJQlJBUllfQk9EWV0sCisgWworQEAgLTI5LDYgKzMyLDEzIEBAIEFDX0RFRlVOKFtnbF9SRUxPQ0FUQUJMRV9MSUJSQVJZX0JPRFldLAorICAgZmkKKyBdKQorIAorK2RubCBMaWtlIGdsX1JFTE9DQVRBQkxFX0xJQlJBUlksIGV4Y2VwdCBwcmVwYXJlIGZvciBzZXBhcmF0ZSBjb21waWxhdGlvbgorK2RubCAobm8gQUNfTElCT0JKKS4KKytBQ19ERUZVTihbZ2xfUkVMT0NBVEFCTEVfTElCUkFSWV9TRVBBUkFURV0sCisrWworKyAgQUNfUkVRVUlSRShbZ2xfUkVMT0NBVEFCTEVfTElCUkFSWV9CT0RZXSkKKytdKQorKworIGRubCBTdXBwb3J0IGZvciByZWxvY2F0YWJsZSBwYWNrYWdlcyBmb3Igd2hpY2ggaXQgaXMgYSBub3AuCisgQUNfREVGVU4oW2dsX1JFTE9DQVRBQkxFX05PUF0sCisgWworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3JlbG9jYXRhYmxlLm00IGxpYmljb252LTEuMTQvc3JjbTQvcmVsb2NhdGFibGUubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcmVsb2NhdGFibGUubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3JlbG9jYXRhYmxlLm00CTIwMTItMDEtMDggMDI6MDc6NDAuODAyNDg0NDc5IC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHJlbG9jYXRhYmxlLm00IHNlcmlhbCAxNworKyMgcmVsb2NhdGFibGUubTQgc2VyaWFsIDE2CisgZG5sIENvcHlyaWdodCAoQykgMjAwMywgMjAwNS0yMDA3LCAyMDA5LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtMTQsNiArMTQsOSBAQCBBQ19ERUZVTihbZ2xfUkVMT0NBVEFCTEVdLAorIFsKKyAgIEFDX1JFUVVJUkUoW2dsX1JFTE9DQVRBQkxFX0JPRFldKQorICAgZ2xfUkVMT0NBVEFCTEVfTElCUkFSWQorKyAgaWYgdGVzdCAkUkVMT0NBVEFCTEUgPSB5ZXM7IHRoZW4KKysgICAgQUNfTElCT0JKKFtwcm9ncmVsb2NdKQorKyAgZmkKKyAgIDogJHtSRUxPQ0FUQUJMRV9DT05GSUdfSF9ESVI9JyQodG9wX2J1aWxkZGlyKSd9CisgICBSRUxPQ0FUQUJMRV9TUkNfRElSPSJcJCh0b3Bfc3JjZGlyKS8kZ2xfc291cmNlX2Jhc2UiCisgICBSRUxPQ0FUQUJMRV9CVUlMRF9ESVI9IlwkKHRvcF9idWlsZGRpcikvJGdsX3NvdXJjZV9iYXNlIgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3NhZmUtcmVhZC5tNCBsaWJpY29udi0xLjE0L3NyY200L3NhZmUtcmVhZC5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zYWZlLXJlYWQubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3NhZmUtcmVhZC5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjgxMDQ4NDQ4MCAtMDgwMAorQEAgLTEsMTAgKzEsMTcgQEAKKy0jIHNhZmUtcmVhZC5tNCBzZXJpYWwgNgorKyMgc2FmZS1yZWFkLm00IHNlcmlhbCA1CisgZG5sIENvcHlyaWdodCAoQykgMjAwMi0yMDAzLCAyMDA1LTIwMDYsIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgZG5sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyBkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorIAorK0FDX0RFRlVOKFtnbF9TQUZFX1JFQURdLAorK1sKKysgIEFDX0xJQk9CSihbc2FmZS1yZWFkXSkKKysKKysgIGdsX1BSRVJFUV9TQUZFX1JFQUQKKytdKQorKworICMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc2FmZS1yZWFkLmMuCisgQUNfREVGVU4oW2dsX1BSRVJFUV9TQUZFX1JFQURdLAorIFsKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zZXRlbnYubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9zZXRlbnYubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc2V0ZW52Lm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9zZXRlbnYubTQJMjAxMi0wMS0wOCAwMjowNzo0MC44MTg0ODQ0ODEgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgc2V0ZW52Lm00IHNlcmlhbCAyNAorKyMgc2V0ZW52Lm00IHNlcmlhbCAyMgorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCwgMjAwNi0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTM4LDYgKzM4LDkgQEAgQUNfREVGVU4oW2dsX0ZVTkNfU0VURU5WXSwKKyAgICAgICBSRVBMQUNFX1NFVEVOVj0xCisgICAgIGZpCisgICBmaQorKyAgaWYgdGVzdCAkSEFWRV9TRVRFTlYkUkVQTEFDRV9TRVRFTlYgIT0gMTA7IHRoZW4KKysgICAgQUNfTElCT0JKKFtzZXRlbnZdKQorKyAgZmkKKyBdKQorIAorICMgTGlrZSBnbF9GVU5DX1NFVEVOViwgZXhjZXB0IHByZXBhcmUgZm9yIHNlcGFyYXRlIGNvbXBpbGF0aW9uCitAQCAtNjIsOSArNjUsOSBAQCBBQ19ERUZVTihbZ2xfRlVOQ19VTlNFVEVOVl0sCisgICBmaQorICAgQUNfQ0hFQ0tfRlVOQ1MoW3Vuc2V0ZW52XSkKKyAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfdW5zZXRlbnYgPSBubzsgdGhlbgorLSAgICBIQVZFX1VOU0VURU5WPTAKKysgICAgQUNfTElCT0JKKFt1bnNldGVudl0pCisrICAgIGdsX1BSRVJFUV9VTlNFVEVOVgorICAgZWxzZQorLSAgICBIQVZFX1VOU0VURU5WPTEKKyAgICAgZG5sIFNvbWUgQlNEcyByZXR1cm4gdm9pZCwgZmFpbGluZyB0byBkbyBlcnJvciBjaGVja2luZy4KKyAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB1bnNldGVudigpIHJldHVybiB0eXBlXSwgW2d0X2N2X2Z1bmNfdW5zZXRlbnZfcmV0XSwKKyAgICAgICBbQUNfQ09NUElMRV9JRkVMU0UoCitAQCAtOTAsNiArOTMsNyBAQCBpbnQgdW5zZXRlbnYoKTsKKyAgICAgICBBQ19ERUZJTkUoW1ZPSURfVU5TRVRFTlZdLCBbMV0sIFtEZWZpbmUgdG8gMSBpZiB1bnNldGVudiByZXR1cm5zIHZvaWQKKyAgICAgICAgaW5zdGVhZCBvZiBpbnQuXSkKKyAgICAgICBSRVBMQUNFX1VOU0VURU5WPTEKKysgICAgICBBQ19MSUJPQkooW3Vuc2V0ZW52XSkKKyAgICAgZmkKKyAKKyAgICAgZG5sIFNvbGFyaXMgMTAgdW5zZXRlbnYgZG9lcyBub3QgcmVtb3ZlIGFsbCBjb3BpZXMgb2YgYSBuYW1lLgorQEAgLTEyMiw2ICsxMjYsNyBAQCBpbnQgdW5zZXRlbnYoKTsKKyAgICAgICBbZ2xfY3ZfZnVuY191bnNldGVudl93b3Jrcz0iZ3Vlc3Npbmcgbm8iXSldKQorICAgICBpZiB0ZXN0ICIkZ2xfY3ZfZnVuY191bnNldGVudl93b3JrcyIgIT0geWVzOyB0aGVuCisgICAgICAgUkVQTEFDRV9VTlNFVEVOVj0xCisrICAgICAgQUNfTElCT0JKKFt1bnNldGVudl0pCisgICAgIGZpCisgICBmaQorIF0pCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc2lnbmFsYmxvY2tpbmcubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9zaWduYWxibG9ja2luZy5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zaWduYWxibG9ja2luZy5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvc2lnbmFsYmxvY2tpbmcubTQJMjAxMi0wMS0wOCAwMjowNzo0MC44MzQ0ODQ0ODIgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgc2lnbmFsYmxvY2tpbmcubTQgc2VyaWFsIDEyCisrIyBzaWduYWxibG9ja2luZy5tNCBzZXJpYWwgMTAKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIDIwMDYtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC0xMiwxNCArMTIsMzEgQEAgZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsbworIEFDX0RFRlVOKFtnbF9TSUdOQUxCTE9DS0lOR10sCisgWworICAgQUNfUkVRVUlSRShbZ2xfU0lHTkFMX0hfREVGQVVMVFNdKQorLSAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfVFlQRV9TSUdTRVRfVF0pCistICBpZiB0ZXN0ICRnbF9jdl90eXBlX3NpZ3NldF90ID0geWVzOyB0aGVuCisrICBzaWduYWxzX25vdF9wb3NpeD0KKysgIEFDX0VHUkVQX0hFQURFUihbc2lnc2V0X3RdLCBbc2lnbmFsLmhdLCAsIFtzaWduYWxzX25vdF9wb3NpeD0xXSkKKysgIGlmIHRlc3QgLXogIiRzaWduYWxzX25vdF9wb3NpeCI7IHRoZW4KKyAgICAgQUNfQ0hFQ0tfRlVOQyhbc2lncHJvY21hc2tdLCBbZ2xfY3ZfZnVuY19zaWdwcm9jbWFzaz0xXSkKKyAgIGZpCisgICBpZiB0ZXN0IC16ICIkZ2xfY3ZfZnVuY19zaWdwcm9jbWFzayI7IHRoZW4KKyAgICAgSEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lORz0wCisrICAgIEFDX0xJQk9CSihbc2lncHJvY21hc2tdKQorKyAgICBnbF9QUkVSRVFfU0lHUFJPQ01BU0sKKyAgIGZpCisgXSkKKyAKKy0jIFByZXJlcXVpc2l0ZXMgb2YgbGliL3NpZ3Byb2NtYXNrLmMuCistQUNfREVGVU4oW2dsX1BSRVJFUV9TSUdQUk9DTUFTS10sIFs6XSkKKysjIFByZXJlcXVpc2l0ZXMgb2YgdGhlIHBhcnQgb2YgbGliL3NpZ25hbC5pbi5oIGFuZCBvZiBsaWIvc2lncHJvY21hc2suYy4KKytBQ19ERUZVTihbZ2xfUFJFUkVRX1NJR1BST0NNQVNLXSwKKytbCisrICBBQ19SRVFVSVJFKFtnbF9TSUdOQUxfSF9ERUZBVUxUU10pCisrICBBQ19DSEVDS19UWVBFUyhbc2lnc2V0X3RdLAorKyAgICBbZ2xfY3ZfdHlwZV9zaWdzZXRfdD15ZXNdLCBbZ2xfY3ZfdHlwZV9zaWdzZXRfdD1ub10sCisrICAgIFsjaW5jbHVkZSA8c2lnbmFsLmg+CisrLyogTWluZ3cgZGVmaW5lcyBzaWdzZXRfdCBub3QgaW4gPHNpZ25hbC5oPiwgYnV0IGluIDxzeXMvdHlwZXMuaD4uICAqLworKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD5dKQorKyAgaWYgdGVzdCAkZ2xfY3ZfdHlwZV9zaWdzZXRfdCAhPSB5ZXM7IHRoZW4KKysgICAgSEFWRV9TSUdTRVRfVD0wCisrICBmaQorKyAgZG5sIEhBVkVfU0lHU0VUX1QgaXMgMSBpZiB0aGUgc3lzdGVtIGxhY2tzIHRoZSBzaWdwcm9jbWFzayBmdW5jdGlvbiBidXQgaGFzCisrICBkbmwgdGhlIHNpZ3NldF90IHR5cGUuCisrICBBQ19TVUJTVChbSEFWRV9TSUdTRVRfVF0pCisrXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zaWduYWxfaC5tNCBsaWJpY29udi0xLjE0L3NyY200L3NpZ25hbF9oLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3NpZ25hbF9oLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9zaWduYWxfaC5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjgyNjQ4NDQ4MCAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBzaWduYWxfaC5tNCBzZXJpYWwgMTYKKysjIHNpZ25hbF9oLm00IHNlcmlhbCAxMgorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC03LDcgKzcsNiBAQCBkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvCisgQUNfREVGVU4oW2dsX1NJR05BTF9IXSwKKyBbCisgICBBQ19SRVFVSVJFKFtnbF9TSUdOQUxfSF9ERUZBVUxUU10pCistICBBQ19SRVFVSVJFKFtnbF9DSEVDS19UWVBFX1NJR1NFVF9UXSkKKyAgIGdsX05FWFRfSEVBREVSUyhbc2lnbmFsLmhdKQorIAorICMgQUlYIGRlY2xhcmVzIHNpZ19hdG9taWNfdCB0byBhbHJlYWR5IGluY2x1ZGUgdm9sYXRpbGUsIGFuZCBDODkgY29tcGlsZXJzCitAQCAtMjgsMjUgKzI3LDEwIEBAIEFDX0RFRlVOKFtnbF9TSUdOQUxfSF0sCisgICBkbmwgQ2hlY2sgZm9yIGRlY2xhcmF0aW9ucyBvZiBhbnl0aGluZyB3ZSB3YW50IHRvIHBvaXNvbiBpZiB0aGUKKyAgIGRubCBjb3JyZXNwb25kaW5nIGdudWxpYiBtb2R1bGUgaXMgbm90IGluIHVzZS4KKyAgIGdsX1dBUk5fT05fVVNFX1BSRVBBUkUoW1sjaW5jbHVkZSA8c2lnbmFsLmg+CistICAgIF1dLCBbcHRocmVhZF9zaWdtYXNrIHNpZ2FjdGlvbgorLSAgICBzaWdhZGRzZXQgc2lnZGVsc2V0IHNpZ2VtcHR5c2V0IHNpZ2ZpbGxzZXQgc2lnaXNtZW1iZXIKKysgICAgXV0sIFtzaWdhY3Rpb24gc2lnYWRkc2V0IHNpZ2RlbHNldCBzaWdlbXB0eXNldCBzaWdmaWxsc2V0IHNpZ2lzbWVtYmVyCisgICAgIHNpZ3BlbmRpbmcgc2lncHJvY21hc2tdKQorIF0pCisgCistQUNfREVGVU4oW2dsX0NIRUNLX1RZUEVfU0lHU0VUX1RdLAorLVsKKy0gIEFDX0NIRUNLX1RZUEVTKFtzaWdzZXRfdF0sCistICAgIFtnbF9jdl90eXBlX3NpZ3NldF90PXllc10sIFtnbF9jdl90eXBlX3NpZ3NldF90PW5vXSwKKy0gICAgW1sKKy0gICAgICAjaW5jbHVkZSA8c2lnbmFsLmg+CistICAgICAgLyogTWluZ3cgZGVmaW5lcyBzaWdzZXRfdCBub3QgaW4gPHNpZ25hbC5oPiwgYnV0IGluIDxzeXMvdHlwZXMuaD4uICAqLworLSAgICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0gICAgXV0pCistICBpZiB0ZXN0ICRnbF9jdl90eXBlX3NpZ3NldF90ICE9IHllczsgdGhlbgorLSAgICBIQVZFX1NJR1NFVF9UPTAKKy0gIGZpCistXSkKKy0KKyBBQ19ERUZVTihbZ2xfU0lHTkFMX01PRFVMRV9JTkRJQ0FUT1JdLAorIFsKKyAgIGRubCBVc2UgQUNfUkVRVUlSRSBoZXJlLCBzbyB0aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGFyZSBleHBhbmRlZCBvbmNlIG9ubHkuCitAQCAtNTgsMTMgKzQyLDExIEBAIEFDX0RFRlVOKFtnbF9TSUdOQUxfTU9EVUxFX0lORElDQVRPUl0sCisgCisgQUNfREVGVU4oW2dsX1NJR05BTF9IX0RFRkFVTFRTXSwKKyBbCistICBHTlVMSUJfUFRIUkVBRF9TSUdNQVNLPTA7ICAgIEFDX1NVQlNUKFtHTlVMSUJfUFRIUkVBRF9TSUdNQVNLXSkKKyAgIEdOVUxJQl9TSUdOQUxfSF9TSUdQSVBFPTA7ICAgQUNfU1VCU1QoW0dOVUxJQl9TSUdOQUxfSF9TSUdQSVBFXSkKKyAgIEdOVUxJQl9TSUdQUk9DTUFTSz0wOyAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9TSUdQUk9DTUFTS10pCisgICBHTlVMSUJfU0lHQUNUSU9OPTA7ICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfU0lHQUNUSU9OXSkKKyAgIGRubCBBc3N1bWUgcHJvcGVyIEdOVSBiZWhhdmlvciB1bmxlc3MgYW5vdGhlciBtb2R1bGUgc2F5cyBvdGhlcndpc2UuCisgICBIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HPTE7IEFDX1NVQlNUKFtIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HXSkKKy0gIEhBVkVfUFRIUkVBRF9TSUdNQVNLPTE7ICAgICAgQUNfU1VCU1QoW0hBVkVfUFRIUkVBRF9TSUdNQVNLXSkKKyAgIEhBVkVfU0lHU0VUX1Q9MTsgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfU0lHU0VUX1RdKQorICAgSEFWRV9TSUdJTkZPX1Q9MTsgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9TSUdJTkZPX1RdKQorICAgSEFWRV9TSUdBQ1RJT049MTsgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9TSUdBQ1RJT05dKQorQEAgLTczLDUgKzU1LDQgQEAgQUNfREVGVU4oW2dsX1NJR05BTF9IX0RFRkFVTFRTXSwKKyAgIEhBVkVfVFlQRV9WT0xBVElMRV9TSUdfQVRPTUlDX1Q9MTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfVFlQRV9WT0xBVElMRV9TSUdfQVRPTUlDX1RdKQorICAgSEFWRV9TSUdIQU5ETEVSX1Q9MTsgICAgICAgICBBQ19TVUJTVChbSEFWRV9TSUdIQU5ETEVSX1RdKQorLSAgUkVQTEFDRV9QVEhSRUFEX1NJR01BU0s9MDsgICBBQ19TVUJTVChbUkVQTEFDRV9QVEhSRUFEX1NJR01BU0tdKQorIF0pCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc3RhdC5tNCBsaWJpY29udi0xLjE0L3NyY200L3N0YXQubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc3RhdC5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvc3RhdC5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjg1NDQ4NDQ4MyAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBzZXJpYWwgOAorKyMgc2VyaWFsIDcKKyAKKyAjIENvcHlyaWdodCAoQykgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICMKK0BAIC01OCwxMSArNTgsOSBAQCBBQ19ERUZVTihbZ2xfRlVOQ19TVEFUXSwKKyAgICAgICBBQ19ERUZJTkUoW1JFUExBQ0VfRlVOQ19TVEFUX0ZJTEVdLCBbMV0sIFtEZWZpbmUgdG8gMSBpZiBzdGF0IG5lZWRzCisgICAgICAgICBoZWxwIHdoZW4gcGFzc2VkIGEgZmlsZSBuYW1lIHdpdGggYSB0cmFpbGluZyBzbGFzaF0pOzsKKyAgIGVzYWMKKy1dKQorLQorLSMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc3RhdC5jLgorLUFDX0RFRlVOKFtnbF9QUkVSRVFfU1RBVF0sCistWworLSAgQUNfUkVRVUlSRShbQUNfQ19JTkxJTkVdKQorLSAgOgorKyAgaWYgdGVzdCAkUkVQTEFDRV9TVEFUID0gMTsgdGhlbgorKyAgICBBQ19MSUJPQkooW3N0YXRdKQorKyAgICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc3RhdC5jLgorKyAgICBBQ19SRVFVSVJFKFtBQ19DX0lOTElORV0pCisrICBmaQorIF0pCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc3RyZXJyb3IubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9zdHJlcnJvci5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zdHJlcnJvci5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvc3RyZXJyb3IubTQJMjAxMi0wMS0wOCAwMjowNzo0MC44OTA0ODQ0ODQgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgc3RyZXJyb3IubTQgc2VyaWFsIDE2CisrIyBzdHJlcnJvci5tNCBzZXJpYWwgOQorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDctMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC02LDczICs2LDYzIEBAIGRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG8KKyAKKyBBQ19ERUZVTihbZ2xfRlVOQ19TVFJFUlJPUl0sCisgWworKyAgQUNfUkVRVUlSRShbZ2xfRlVOQ19TVFJFUlJPUl9TRVBBUkFURV0pCisrICBpZiB0ZXN0ICRSRVBMQUNFX1NUUkVSUk9SID0gMTsgdGhlbgorKyAgICBBQ19MSUJPQkooW3N0cmVycm9yXSkKKysgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtSRVBMQUNFX1NUUkVSUk9SXSwgWyRSRVBMQUNFX1NUUkVSUk9SXSwKKysgICAgICBbRGVmaW5lIHRoaXMgdG8gMSBpZiBzdHJlcnJvciBpcyBicm9rZW4uXSkKKysgIGZpCisrXSkKKysKKysjIExpa2UgZ2xfRlVOQ19TVFJFUlJPUiwgZXhjZXB0IHByZXBhcmUgZm9yIHNlcGFyYXRlIGNvbXBpbGF0aW9uIChubyBBQ19MSUJPQkopLgorK0FDX0RFRlVOKFtnbF9GVU5DX1NUUkVSUk9SX1NFUEFSQVRFXSwKKytbCisgICBBQ19SRVFVSVJFKFtnbF9IRUFERVJfU1RSSU5HX0hfREVGQVVMVFNdKQorICAgQUNfUkVRVUlSRShbZ2xfSEVBREVSX0VSUk5PX0hdKQorLSAgQUNfUkVRVUlSRShbZ2xfRlVOQ19TVFJFUlJPUl8wXSkKKy0gIG00X2lmZGVmKFtnbF9GVU5DX1NUUkVSUk9SX1JfV09SS1NdLCBbCistICAgIEFDX1JFUVVJUkUoW2dsX0ZVTkNfU1RSRVJST1JfUl9XT1JLU10pCistICBdKQorLSAgaWYgdGVzdCAiJEVSUk5PX0g6JFJFUExBQ0VfU1RSRVJST1JfMCIgPSA6MDsgdGhlbgorKyAgaWYgdGVzdCAteiAiJEVSUk5PX0giOyB0aGVuCisgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igd29ya2luZyBzdHJlcnJvciBmdW5jdGlvbl0sCisgICAgICBbZ2xfY3ZfZnVuY193b3JraW5nX3N0cmVycm9yXSwKKyAgICAgIFtBQ19SVU5fSUZFTFNFKAorICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgIFtbI2luY2x1ZGUgPHN0cmluZy5oPgorICAgICAgICAgICAgXV0sCistICAgICAgICAgICBbW2lmICghKnN0cmVycm9yICgtMikpIHJldHVybiAxO11dKV0sCisrICAgICAgICAgICBbW3JldHVybiAhKnN0cmVycm9yICgtMik7XV0pXSwKKyAgICAgICAgIFtnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3I9eWVzXSwKKyAgICAgICAgIFtnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3I9bm9dLAorLSAgICAgICAgW2RubCBCZSBwZXNzaW1pc3RpYyBvbiBjcm9zcy1jb21waWxlcyBmb3Igbm93LgorLSAgICAgICAgIGdsX2N2X2Z1bmNfd29ya2luZ19zdHJlcnJvcj0iZ3Vlc3Npbmcgbm8iXSkKKysgICAgICAgIFtkbmwgQXNzdW1lIGNyb3NzYnVpbGQgd29ya3MgaWYgaXQgY29tcGlsZXMuCisrICAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoCisrICAgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorKyAgICAgICAgICAgICAgW1sjaW5jbHVkZSA8c3RyaW5nLmg+CisrICAgICAgICAgICAgICBdXSwKKysgICAgICAgICAgICAgIFtbcmV0dXJuICEqc3RyZXJyb3IgKC0yKTtdXSldLAorKyAgICAgICAgICAgW2dsX2N2X2Z1bmNfd29ya2luZ19zdHJlcnJvcj15ZXNdLAorKyAgICAgICAgICAgW2dsX2N2X2Z1bmNfd29ya2luZ19zdHJlcnJvcj1ub10pCisrICAgICAgXSkKKyAgICAgXSkKKy0gICAgaWYgdGVzdCAiJGdsX2N2X2Z1bmNfd29ya2luZ19zdHJlcnJvciIgIT0geWVzOyB0aGVuCisrICAgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfd29ya2luZ19zdHJlcnJvciA9IG5vOyB0aGVuCisgICAgICAgZG5sIFRoZSBzeXN0ZW0ncyBzdHJlcnJvcigpIGZhaWxzIHRvIHJldHVybiBhIHN0cmluZyBmb3Igb3V0LW9mLXJhbmdlCisgICAgICAgZG5sIGludGVnZXJzLiBSZXBsYWNlIGl0LgorICAgICAgIFJFUExBQ0VfU1RSRVJST1I9MQorICAgICBmaQorLSAgICBtNF9pZmRlZihbZ2xfRlVOQ19TVFJFUlJPUl9SX1dPUktTXSwgWworLSAgICAgIGRubCBJZiB0aGUgc3lzdGVtJ3Mgc3RyZXJyb3JfciBvciBfX3hwZ19zdHJlcnJvcl9yIGNsb2JiZXJzIHN0cmVycm9yJ3MKKy0gICAgICBkbmwgYnVmZmVyLCB3ZSBtdXN0IHJlcGxhY2Ugc3RyZXJyb3IuCistICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfc3RyZXJyb3Jfcl93b3JrcyIgaW4KKy0gICAgICAgICpubykgUkVQTEFDRV9TVFJFUlJPUj0xIDs7CistICAgICAgZXNhYworLSAgICBdKQorICAgZWxzZQorICAgICBkbmwgVGhlIHN5c3RlbSdzIHN0cmVycm9yKCkgY2Fubm90IGtub3cgYWJvdXQgdGhlIG5ldyBlcnJubyB2YWx1ZXMgd2UgYWRkCistICAgIGRubCB0byA8ZXJybm8uaD4sIG9yIGFueSBmaXggZm9yIHN0cmVycm9yKDApLiBSZXBsYWNlIGl0LgorKyAgICBkbmwgdG8gPGVycm5vLmg+LiBSZXBsYWNlIGl0LgorICAgICBSRVBMQUNFX1NUUkVSUk9SPTEKKyAgIGZpCisrICBpZiB0ZXN0ICRSRVBMQUNFX1NUUkVSUk9SID0gMTsgdGhlbgorKyAgICBnbF9QUkVSRVFfU1RSRVJST1IKKysgIGZpCisgXSkKKyAKKy1kbmwgRGV0ZWN0IGlmIHN0cmVycm9yKDApIHBhc3NlcyAodGhhdCBpcywgZG9lcyBub3Qgc2V0IGVycm5vLCBhbmQgZG9lcyBub3QKKy1kbmwgcmV0dXJuIGEgc3RyaW5nIHRoYXQgbWF0Y2hlcyBzdHJlcnJvcigtMSkpLgorLUFDX0RFRlVOKFtnbF9GVU5DX1NUUkVSUk9SXzBdLAorLVsKKy0gIFJFUExBQ0VfU1RSRVJST1JfMD0wCistICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBzdHJlcnJvcigwKSBzdWNjZWVkc10sCistICAgW2dsX2N2X2Z1bmNfc3RyZXJyb3JfMF93b3Jrc10sCistICAgW0FDX1JVTl9JRkVMU0UoCistICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKy0gICAgICAgICBbWyNpbmNsdWRlIDxzdHJpbmcuaD4KKy0gICAgICAgICAgICNpbmNsdWRlIDxlcnJuby5oPgorLSAgICAgICAgIF1dLAorLSAgICAgICAgIFtbaW50IHJlc3VsdCA9IDA7CistICAgICAgICAgICBjaGFyICpzdHI7CistICAgICAgICAgICBlcnJubyA9IDA7CistICAgICAgICAgICBzdHIgPSBzdHJlcnJvciAoMCk7CistICAgICAgICAgICBpZiAoISpzdHIpIHJlc3VsdCB8PSAxOworLSAgICAgICAgICAgaWYgKGVycm5vKSByZXN1bHQgfD0gMjsKKy0gICAgICAgICAgIGlmIChzdHJzdHIgKHN0ciwgIm5rbm93biIpIHx8IHN0cnN0ciAoc3RyLCAibmRlZmluZWQiKSkKKy0gICAgICAgICAgICAgcmVzdWx0IHw9IDQ7CistICAgICAgICAgICByZXR1cm4gcmVzdWx0O11dKV0sCistICAgICAgW2dsX2N2X2Z1bmNfc3RyZXJyb3JfMF93b3Jrcz15ZXNdLAorLSAgICAgIFtnbF9jdl9mdW5jX3N0cmVycm9yXzBfd29ya3M9bm9dLAorLSAgICAgIFtkbmwgQmUgcGVzc2ltaXN0aWMgb24gY3Jvc3MtY29tcGlsZXMgZm9yIG5vdy4KKy0gICAgICAgZ2xfY3ZfZnVuY19zdHJlcnJvcl8wX3dvcmtzPSJndWVzc2luZyBubyJdKQorLSAgXSkKKy0gIGlmIHRlc3QgIiRnbF9jdl9mdW5jX3N0cmVycm9yXzBfd29ya3MiICE9IHllczsgdGhlbgorLSAgICBSRVBMQUNFX1NUUkVSUk9SXzA9MQorLSAgICBBQ19ERUZJTkUoW1JFUExBQ0VfU1RSRVJST1JfMF0sIFsxXSwgW0RlZmluZSB0byAxIGlmIHN0cmVycm9yKDApCistICAgICAgZG9lcyBub3QgcmV0dXJuIGEgbWVzc2FnZSBpbXBseWluZyBzdWNjZXNzLl0pCisrIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9zdHJlcnJvci5jLgorK0FDX0RFRlVOKFtnbF9QUkVSRVFfU1RSRVJST1JdLCBbCisrICBBQ19DSEVDS19ERUNMUyhbc3RyZXJyb3JdKQorKyAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKFtzeXMvc29ja2V0LmhdKQorKyAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaCAhPSB5ZXM7IHRoZW4KKysgICAgZG5sIFdlIGNhbm5vdCB1c2UgQUNfQ0hFQ0tfSEVBREVSU19PTkNFIGhlcmUsIGJlY2F1c2UgdGhhdCB3b3VsZCBtYWtlCisrICAgIGRubCB0aGUgY2hlY2sgZm9yIHRob3NlIGhlYWRlcnMgdW5jb25kaXRpb25hbDsgeWV0IGN5Z3dpbiByZXBvcnRzCisrICAgIGRubCB0aGF0IHRoZSBoZWFkZXJzIGFyZSBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQgKHNpbmNlIG9uCisrICAgIGRubCBjeWd3aW4sIGFsbCBzb2NrZXQgaW5mb3JtYXRpb24gc2hvdWxkIGNvbWUgZnJvbSBzeXMvc29ja2V0LmgpLgorKyAgICBBQ19DSEVDS19IRUFERVJTKFt3aW5zb2NrMi5oXSkKKyAgIGZpCisgXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zdHJpbmdfaC5tNCBsaWJpY29udi0xLjE0L3NyY200L3N0cmluZ19oLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3N0cmluZ19oLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9zdHJpbmdfaC5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjg5NDQ4NDQ4NSAtMDgwMAorQEAgLTUsNyArNSw3IEBACisgIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorIAorLSMgc2VyaWFsIDIxCisrIyBzZXJpYWwgMjAKKyAKKyAjIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQuCisgCitAQCAtMjcsOSArMjcsOSBAQCBBQ19ERUZVTihbZ2xfSEVBREVSX1NUUklOR19IX0JPRFldLAorICAgZG5sIGd1YXJhbnRlZWQgYnkgQzg5LgorICAgZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRShbWyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAgICAgXV0sCistICAgIFtmZnNsIGZmc2xsIG1lbW1lbSBtZW1wY3B5IG1lbXJjaHIgcmF3bWVtY2hyIHN0cGNweSBzdHBuY3B5IHN0cmNocm51bAorLSAgICAgc3RyZHVwIHN0cm5jYXQgc3RybmR1cCBzdHJubGVuIHN0cnBicmsgc3Ryc2VwIHN0cmNhc2VzdHIgc3RydG9rX3IKKy0gICAgIHN0cmVycm9yX3Igc3Ryc2lnbmFsIHN0cnZlcnNjbXBdKQorKyAgICBbbWVtbWVtIG1lbXBjcHkgbWVtcmNociByYXdtZW1jaHIgc3RwY3B5IHN0cG5jcHkgc3RyY2hybnVsIHN0cmR1cAorKyAgICAgc3RybmNhdCBzdHJuZHVwIHN0cm5sZW4gc3RycGJyayBzdHJzZXAgc3RyY2FzZXN0ciBzdHJ0b2tfciBzdHJlcnJvcl9yCisrICAgICBzdHJzaWduYWwgc3RydmVyc2NtcF0pCisgXSkKKyAKKyBBQ19ERUZVTihbZ2xfU1RSSU5HX01PRFVMRV9JTkRJQ0FUT1JdLAorQEAgLTQzLDggKzQzLDYgQEAgQUNfREVGVU4oW2dsX1NUUklOR19NT0RVTEVfSU5ESUNBVE9SXSwKKyAKKyBBQ19ERUZVTihbZ2xfSEVBREVSX1NUUklOR19IX0RFRkFVTFRTXSwKKyBbCistICBHTlVMSUJfRkZTTD0wOyAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9GRlNMXSkKKy0gIEdOVUxJQl9GRlNMTD0wOyAgICAgICBBQ19TVUJTVChbR05VTElCX0ZGU0xMXSkKKyAgIEdOVUxJQl9NRU1DSFI9MDsgICAgICBBQ19TVUJTVChbR05VTElCX01FTUNIUl0pCisgICBHTlVMSUJfTUVNTUVNPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9NRU1NRU1dKQorICAgR05VTElCX01FTVBDUFk9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfTUVNUENQWV0pCitAQCAtODIsOCArODAsNiBAQCBBQ19ERUZVTihbZ2xfSEVBREVSX1NUUklOR19IX0RFRkFVTFRTXSwKKyAgIEdOVUxJQl9TVFJWRVJTQ01QPTA7ICBBQ19TVUJTVChbR05VTElCX1NUUlZFUlNDTVBdKQorICAgSEFWRV9NQlNMRU49MDsgICAgICAgIEFDX1NVQlNUKFtIQVZFX01CU0xFTl0pCisgICBkbmwgQXNzdW1lIHByb3BlciBHTlUgYmVoYXZpb3IgdW5sZXNzIGFub3RoZXIgbW9kdWxlIHNheXMgb3RoZXJ3aXNlLgorLSAgSEFWRV9GRlNMPTE7ICAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfRkZTTF0pCistICBIQVZFX0ZGU0xMPTE7ICAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9GRlNMTF0pCisgICBIQVZFX01FTUNIUj0xOyAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9NRU1DSFJdKQorICAgSEFWRV9ERUNMX01FTU1FTT0xOyAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9NRU1NRU1dKQorICAgSEFWRV9NRU1QQ1BZPTE7ICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfTUVNUENQWV0pCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc3lzX3NvY2tldF9oLm00IGxpYmljb252LTEuMTQvc3JjbTQvc3lzX3NvY2tldF9oLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3N5c19zb2NrZXRfaC5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvc3lzX3NvY2tldF9oLm00CTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCitAQCAtMSwxNzcgKzAsMCBAQAorLSMgc3lzX3NvY2tldF9oLm00IHNlcmlhbCAyMgorLWRubCBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKy1kbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKy1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorLQorLWRubCBGcm9tIFNpbW9uIEpvc2Vmc3Nvbi4KKy0KKy1BQ19ERUZVTihbZ2xfSEVBREVSX1NZU19TT0NLRVRdLAorLVsKKy0gIEFDX1JFUVVJUkUoW2dsX1NZU19TT0NLRVRfSF9ERUZBVUxUU10pCistICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCistICBBQ19SRVFVSVJFKFtBQ19DX0lOTElORV0pCistCistICBkbmwgT24gT1NGLzEsIHRoZSBmdW5jdGlvbnMgcmVjdigpLCBzZW5kKCksIHJlY3Zmcm9tKCksIHNlbmR0bygpIGhhdmUKKy0gIGRubCBvbGQtc3R5bGUgZGVjbGFyYXRpb25zICh3aXRoIHJldHVybiB0eXBlICdpbnQnIGluc3RlYWQgb2YgJ3NzaXplX3QnKQorLSAgZG5sIHVubGVzcyBfUE9TSVhfUElJX1NPQ0tFVCBpcyBkZWZpbmVkLgorLSAgY2FzZSAiJGhvc3Rfb3MiIGluCistICAgIG9zZiopCistICAgICAgQUNfREVGSU5FKFtfUE9TSVhfUElJX1NPQ0tFVF0sIFsxXSwKKy0gICAgICAgIFtEZWZpbmUgdG8gMSBpbiBvcmRlciB0byBnZXQgdGhlIFBPU0lYIGNvbXBhdGlibGUgZGVjbGFyYXRpb25zCistICAgICAgICAgb2Ygc29ja2V0IGZ1bmN0aW9ucy5dKQorLSAgICAgIDs7CistICBlc2FjCistCistICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciA8c3lzL3NvY2tldC5oPiBpcyBzZWxmLWNvbnRhaW5lZF0sCistICAgIFtnbF9jdl9oZWFkZXJfc3lzX3NvY2tldF9oX3NlbGZjb250YWluZWRdLAorLSAgICBbCistICAgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+XV0sIFtbXV0pXSwKKy0gICAgICAgIFtnbF9jdl9oZWFkZXJfc3lzX3NvY2tldF9oX3NlbGZjb250YWluZWQ9eWVzXSwKKy0gICAgICAgIFtnbF9jdl9oZWFkZXJfc3lzX3NvY2tldF9oX3NlbGZjb250YWluZWQ9bm9dKQorLSAgICBdKQorLSAgaWYgdGVzdCAkZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zZWxmY29udGFpbmVkID0geWVzOyB0aGVuCistICAgIGRubCBJZiB0aGUgc2h1dGRvd24gZnVuY3Rpb24gZXhpc3RzLCA8c3lzL3NvY2tldC5oPiBzaG91bGQgZGVmaW5lCistICAgIGRubCBTSFVUX1JELCBTSFVUX1dSLCBTSFVUX1JEV1IuCistICAgIEFDX0NIRUNLX0ZVTkNTKFtzaHV0ZG93bl0pCistICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfc2h1dGRvd24gPSB5ZXM7IHRoZW4KKy0gICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciA8c3lzL3NvY2tldC5oPiBkZWZpbmVzIHRoZSBTSFVUXyogbWFjcm9zXSwKKy0gICAgICAgIFtnbF9jdl9oZWFkZXJfc3lzX3NvY2tldF9oX3NodXRdLAorLSAgICAgICAgWworLSAgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKy0gICAgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD5dXSwKKy0gICAgICAgICAgICAgICBbW2ludCBhW10gPSB7IFNIVVRfUkQsIFNIVVRfV1IsIFNIVVRfUkRXUiB9O11dKV0sCistICAgICAgICAgICAgW2dsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2h1dD15ZXNdLAorLSAgICAgICAgICAgIFtnbF9jdl9oZWFkZXJfc3lzX3NvY2tldF9oX3NodXQ9bm9dKQorLSAgICAgICAgXSkKKy0gICAgICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfc3lzX3NvY2tldF9oX3NodXQgPSBubzsgdGhlbgorLSAgICAgICAgU1lTX1NPQ0tFVF9IPSdzeXMvc29ja2V0LmgnCistICAgICAgZmkKKy0gICAgZmkKKy0gIGZpCistICAjIFdlIG5lZWQgdG8gY2hlY2sgZm9yIHdzMnRjcGlwLmggbm93LgorLSAgZ2xfUFJFUkVRX1NZU19IX1NPQ0tFVAorLSAgQUNfQ0hFQ0tfVFlQRVMoW3N0cnVjdCBzb2NrYWRkcl9zdG9yYWdlLCBzYV9mYW1pbHlfdF0sLCxbCistICAvKiBzeXMvdHlwZXMuaCBpcyBub3QgbmVlZGVkIGFjY29yZGluZyB0byBQT1NJWCwgYnV0IHRoZQorLSAgICAgc3lzL3NvY2tldC5oIGluIGkzODYtdW5rbm93bi1mcmVlYnNkNC4xMCBhbmQKKy0gICAgIHBvd2VycGMtYXBwbGUtZGFyd2luNS41IHJlcXVpcmVkIGl0LiAqLworLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKy0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorLSNlbmRpZgorLSNpZmRlZiBIQVZFX1dTMlRDUElQX0gKKy0jaW5jbHVkZSA8d3MydGNwaXAuaD4KKy0jZW5kaWYKKy1dKQorLSAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZSA9IG5vOyB0aGVuCistICAgIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0U9MAorLSAgZmkKKy0gIGlmIHRlc3QgJGFjX2N2X3R5cGVfc2FfZmFtaWx5X3QgPSBubzsgdGhlbgorLSAgICBIQVZFX1NBX0ZBTUlMWV9UPTAKKy0gIGZpCistICBpZiB0ZXN0ICRhY19jdl90eXBlX3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlICE9IG5vOyB0aGVuCistICAgIEFDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBzb2NrYWRkcl9zdG9yYWdlLnNzX2ZhbWlseV0sCistICAgICAgW10sCistICAgICAgW0hBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfU1NfRkFNSUxZPTBdLAorLSAgICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistICAgICAgICNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorLSAgICAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorLSAgICAgICAjZW5kaWYKKy0gICAgICAgI2lmZGVmIEhBVkVfV1MyVENQSVBfSAorLSAgICAgICAjaW5jbHVkZSA8d3MydGNwaXAuaD4KKy0gICAgICAgI2VuZGlmCistICAgICAgXSkKKy0gIGZpCistICBpZiB0ZXN0ICRIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFID0gMCB8fCB0ZXN0ICRIQVZFX1NBX0ZBTUlMWV9UID0gMCBcCistICAgICB8fCB0ZXN0ICRIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFX1NTX0ZBTUlMWSA9IDA7IHRoZW4KKy0gICAgU1lTX1NPQ0tFVF9IPSdzeXMvc29ja2V0LmgnCistICBmaQorLSAgZ2xfUFJFUkVRX1NZU19IX1dJTlNPQ0syCistCistICBkbmwgQ2hlY2sgZm9yIGRlY2xhcmF0aW9ucyBvZiBhbnl0aGluZyB3ZSB3YW50IHRvIHBvaXNvbiBpZiB0aGUKKy0gIGRubCBjb3JyZXNwb25kaW5nIGdudWxpYiBtb2R1bGUgaXMgbm90IGluIHVzZS4KKy0gIGdsX1dBUk5fT05fVVNFX1BSRVBBUkUoW1sKKy0vKiBTb21lIHN5c3RlbXMgcmVxdWlyZSBwcmVyZXF1aXNpdGUgaGVhZGVycy4gICovCistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CistICAgIF1dLCBbc29ja2V0IGNvbm5lY3QgYWNjZXB0IGJpbmQgZ2V0cGVlcm5hbWUgZ2V0c29ja25hbWUgZ2V0c29ja29wdAorLSAgICBsaXN0ZW4gcmVjdiBzZW5kIHJlY3Zmcm9tIHNlbmR0byBzZXRzb2Nrb3B0IHNodXRkb3duIGFjY2VwdDRdKQorLV0pCistCistQUNfREVGVU4oW2dsX1BSRVJFUV9TWVNfSF9TT0NLRVRdLAorLVsKKy0gIGRubCBDaGVjayBwcmVyZXF1aXNpdGVzIG9mIHRoZSA8c3lzL3NvY2tldC5oPiByZXBsYWNlbWVudC4KKy0gIEFDX1JFUVVJUkUoW2dsX0NIRUNLX1NPQ0tFVF9IRUFERVJTXSkKKy0gIGdsX0NIRUNLX05FWFRfSEVBREVSUyhbc3lzL3NvY2tldC5oXSkKKy0gIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfc29ja2V0X2ggPSB5ZXM7IHRoZW4KKy0gICAgSEFWRV9TWVNfU09DS0VUX0g9MQorLSAgICBIQVZFX1dTMlRDUElQX0g9MAorLSAgZWxzZQorLSAgICBIQVZFX1NZU19TT0NLRVRfSD0wCistICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl93czJ0Y3BpcF9oID0geWVzOyB0aGVuCistICAgICAgSEFWRV9XUzJUQ1BJUF9IPTEKKy0gICAgZWxzZQorLSAgICAgIEhBVkVfV1MyVENQSVBfSD0wCistICAgIGZpCistICBmaQorLSAgQUNfU1VCU1QoW0hBVkVfU1lTX1NPQ0tFVF9IXSkKKy0gIEFDX1NVQlNUKFtIQVZFX1dTMlRDUElQX0hdKQorLV0pCistCistIyBDb21tb24gcHJlcmVxdWlzaXRlcyBvZiB0aGUgPHN5cy9zb2NrZXQuaD4gcmVwbGFjZW1lbnQgYW5kIG9mIHRoZQorLSMgPHN5cy9zZWxlY3QuaD4gcmVwbGFjZW1lbnQuCistIyBTZXRzIGFuZCBzdWJzdGl0dXRlcyBIQVZFX1dJTlNPQ0syX0guCistQUNfREVGVU4oW2dsX1BSRVJFUV9TWVNfSF9XSU5TT0NLMl0sCistWworLSAgbTRfaWZkZWYoW2dsX1VOSVNURF9IX0RFRkFVTFRTXSwgW0FDX1JFUVVJUkUoW2dsX1VOSVNURF9IX0RFRkFVTFRTXSldKQorLSAgbTRfaWZkZWYoW2dsX1NZU19JT0NUTF9IX0RFRkFVTFRTXSwgW0FDX1JFUVVJUkUoW2dsX1NZU19JT0NUTF9IX0RFRkFVTFRTXSldKQorLSAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKFtzeXMvc29ja2V0LmhdKQorLSAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaCAhPSB5ZXM7IHRoZW4KKy0gICAgZG5sIFdlIGNhbm5vdCB1c2UgQUNfQ0hFQ0tfSEVBREVSU19PTkNFIGhlcmUsIGJlY2F1c2UgdGhhdCB3b3VsZCBtYWtlCistICAgIGRubCB0aGUgY2hlY2sgZm9yIHRob3NlIGhlYWRlcnMgdW5jb25kaXRpb25hbDsgeWV0IGN5Z3dpbiByZXBvcnRzCistICAgIGRubCB0aGF0IHRoZSBoZWFkZXJzIGFyZSBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQgKHNpbmNlIG9uCistICAgIGRubCBjeWd3aW4sIGFsbCBzb2NrZXQgaW5mb3JtYXRpb24gc2hvdWxkIGNvbWUgZnJvbSBzeXMvc29ja2V0LmgpLgorLSAgICBBQ19DSEVDS19IRUFERVJTKFt3aW5zb2NrMi5oXSkKKy0gIGZpCistICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2giID0geWVzOyB0aGVuCistICAgIEhBVkVfV0lOU09DSzJfSD0xCistICAgIFVOSVNURF9IX0hBVkVfV0lOU09DSzJfSD0xCistICAgIFNZU19JT0NUTF9IX0hBVkVfV0lOU09DSzJfSD0xCistICBlbHNlCistICAgIEhBVkVfV0lOU09DSzJfSD0wCistICBmaQorLSAgQUNfU1VCU1QoW0hBVkVfV0lOU09DSzJfSF0pCistXSkKKy0KKy1BQ19ERUZVTihbZ2xfU1lTX1NPQ0tFVF9NT0RVTEVfSU5ESUNBVE9SXSwKKy1bCistICBkbmwgVXNlIEFDX1JFUVVJUkUgaGVyZSwgc28gdGhhdCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhcmUgZXhwYW5kZWQgb25jZSBvbmx5LgorLSAgQUNfUkVRVUlSRShbZ2xfU1lTX1NPQ0tFVF9IX0RFRkFVTFRTXSkKKy0gIGdsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFKFskMV0pCistICBkbmwgRGVmaW5lIGl0IGFsc28gYXMgYSBDIG1hY3JvLCBmb3IgdGhlIGJlbmVmaXQgb2YgdGhlIHVuaXQgdGVzdHMuCistICBnbF9NT0RVTEVfSU5ESUNBVE9SX0ZPUl9URVNUUyhbJDFdKQorLV0pCistCistQUNfREVGVU4oW2dsX1NZU19TT0NLRVRfSF9ERUZBVUxUU10sCistWworLSAgR05VTElCX1NPQ0tFVD0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfU09DS0VUXSkKKy0gIEdOVUxJQl9DT05ORUNUPTA7ICAgICBBQ19TVUJTVChbR05VTElCX0NPTk5FQ1RdKQorLSAgR05VTElCX0FDQ0VQVD0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfQUNDRVBUXSkKKy0gIEdOVUxJQl9CSU5EPTA7ICAgICAgICBBQ19TVUJTVChbR05VTElCX0JJTkRdKQorLSAgR05VTElCX0dFVFBFRVJOQU1FPTA7IEFDX1NVQlNUKFtHTlVMSUJfR0VUUEVFUk5BTUVdKQorLSAgR05VTElCX0dFVFNPQ0tOQU1FPTA7IEFDX1NVQlNUKFtHTlVMSUJfR0VUU09DS05BTUVdKQorLSAgR05VTElCX0dFVFNPQ0tPUFQ9MDsgIEFDX1NVQlNUKFtHTlVMSUJfR0VUU09DS09QVF0pCistICBHTlVMSUJfTElTVEVOPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9MSVNURU5dKQorLSAgR05VTElCX1JFQ1Y9MDsgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfUkVDVl0pCistICBHTlVMSUJfU0VORD0wOyAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9TRU5EXSkKKy0gIEdOVUxJQl9SRUNWRlJPTT0wOyAgICBBQ19TVUJTVChbR05VTElCX1JFQ1ZGUk9NXSkKKy0gIEdOVUxJQl9TRU5EVE89MDsgICAgICBBQ19TVUJTVChbR05VTElCX1NFTkRUT10pCistICBHTlVMSUJfU0VUU09DS09QVD0wOyAgQUNfU1VCU1QoW0dOVUxJQl9TRVRTT0NLT1BUXSkKKy0gIEdOVUxJQl9TSFVURE9XTj0wOyAgICBBQ19TVUJTVChbR05VTElCX1NIVVRET1dOXSkKKy0gIEdOVUxJQl9BQ0NFUFQ0PTA7ICAgICBBQ19TVUJTVChbR05VTElCX0FDQ0VQVDRdKQorLSAgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRT0xOyBBQ19TVUJTVChbSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRV0pCistICBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFX1NTX0ZBTUlMWT0xOworLSAgICAgICAgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFX1NTX0ZBTUlMWV0pCistICBIQVZFX1NBX0ZBTUlMWV9UPTE7ICAgQUNfU1VCU1QoW0hBVkVfU0FfRkFNSUxZX1RdKQorLSAgSEFWRV9BQ0NFUFQ0PTE7ICAgICAgIEFDX1NVQlNUKFtIQVZFX0FDQ0VQVDRdKQorLV0pCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvd2Fybi1vbi11c2UubTQgbGliaWNvbnYtMS4xNC9zcmNtNC93YXJuLW9uLXVzZS5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC93YXJuLW9uLXVzZS5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvd2Fybi1vbi11c2UubTQJMjAxMi0wMS0wOCAwMjowNzo0MC45MzQ0ODQ0ODcgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgd2Fybi1vbi11c2UubTQgc2VyaWFsIDQKKysjIHdhcm4tb24tdXNlLm00IHNlcmlhbCAyCisgZG5sIENvcHlyaWdodCAoQykgMjAxMC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTI3LDggKzI3LDYgQEAgQUNfREVGVU4oW2dsX1dBUk5fT05fVVNFX1BSRVBBUkVdLAorICAgICBbQUhfVEVNUExBVEUoW0hBVkVfUkFXX0RFQ0xfXUFTX1RSX0NQUChtNF9kZWZuKFtnbF9kZWNsXSkpLAorICAgICAgIFtEZWZpbmUgdG8gMSBpZiBdbTRfZGVmbihbZ2xfZGVjbF0pWyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyCisgICAgICAgIHVuZGVmaW5pbmcgbWFjcm9zLl0pXSlkbmwKKy1kbmwgRklYTUU6IGdsX1N5bWJvbCBtdXN0IGJlIHVzZWQgdW5xdW90ZWQgdW50aWwgd2UgY2FuIGFzc3VtZQorLWRubCBhdXRvY29uZiAyLjY0IG9yIG5ld2VyLgorICAgZm9yIGdsX2Z1bmMgaW4gbTRfZmxhdHRlbihbJDJdKTsgZG8KKyAgICAgQVNfVkFSX1BVU0hERUYoW2dsX1N5bWJvbF0sIFtnbF9jdl9oYXZlX3Jhd19kZWNsXyRnbF9mdW5jXSlkbmwKKyAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvXSwKK0BAIC0zNyw4ICszNSw4IEBAIGRubCBhdXRvY29uZiAyLjY0IG9yIG5ld2VyLgorIFtAJTpAdW5kZWYgJGdsX2Z1bmMKKyAgICh2b2lkKSAkZ2xfZnVuYztdKV0sCisgICAgICAgICBbQVNfVkFSX1NFVChnbF9TeW1ib2wsIFt5ZXNdKV0sIFtBU19WQVJfU0VUKGdsX1N5bWJvbCwgW25vXSldKV0pCistICAgIEFTX1ZBUl9JRihnbF9TeW1ib2wsIFt5ZXNdLAorLSAgICAgIFtBQ19ERUZJTkVfVU5RVU9URUQoQVNfVFJfQ1BQKFtIQVZFX1JBV19ERUNMXyRnbF9mdW5jXSksIFsxXSkKKysgICAgIEFTX1ZBUl9JRihnbF9TeW1ib2wsIFt5ZXNdLAorKyAgICAgICBbQUNfREVGSU5FX1VOUVVPVEVEKEFTX1RSX0NQUChbSEFWRV9SQVdfREVDTF8kZ2xfZnVuY10pLCBbMV0pCisgICAgICAgIGRubCBzaG9ydGN1dCAtIGlmIHRoZSByYXcgZGVjbGFyYXRpb24gZXhpc3RzLCB0aGVuIHNldCBhIGNhY2hlCisgICAgICAgIGRubCB2YXJpYWJsZSB0byBhbGxvdyBza2lwcGluZyBhbnkgbGF0ZXIgQUNfQ0hFQ0tfREVDTCBlZmZvcnRzCisgICAgICAgIGV2YWwgYWNfY3ZfaGF2ZV9kZWNsXyRnbF9mdW5jPXllc10pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTQvYXV0b2NvbmYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTQvYXV0b2NvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQzNGNlNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnYtMS4xNC9hdXRvY29uZi5wYXRjaApAQCAtMCwwICsxLDUwIEBACitJdCBhZGRzIHRoZSB2YXJpYWJsZXMgdGhhdCBhcmUgbmVlZGVkCitmb3IgYXV0b2NvbmYgMi42NSB0byByZWNvbmZpZ3VyZSBsaWJpY29udiBhbmQgZGVsZXRlIHRoZSBtNCBtYWNyb3MKK2RpcmVjdG9yeS4gSXRzIGltcG9ydGVkIGZyb20gT0UuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogbGliaWNvbnYtMS4xMy4xL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmljb252LTEuMTMuMS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGxpYmljb252LTEuMTMuMS9jb25maWd1cmUuYWMKK0BAIC0yMyw3ICsyMyw3IEBAIEFDX0NPTkZJR19BVVhfRElSKFtidWlsZC1hdXhdKQorIEFNX0lOSVRfQVVUT01BS0UoW2xpYmljb252XSwgWzEuMTMuMV0pCisgQUNfQ09ORklHX0hFQURFUlMoW2NvbmZpZy5oIGxpYi9jb25maWcuaF0pCisgQUNfUFJPR19NQUtFX1NFVAorLQorK0FDX0NPTkZJR19NQUNST19ESVIoW200XSkKKyBkbmwgICAgICAgICAgIGNoZWNrcyBmb3IgYmFzaWMgcHJvZ3JhbXMKKyAKKyBBQ19QUk9HX0NDCitJbmRleDogbGliaWNvbnYtMS4xMy4xL2xpYmNoYXJzZXQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliaWNvbnYtMS4xMy4xLm9yaWcvbGliY2hhcnNldC9jb25maWd1cmUuYWMKKysrKyBsaWJpY29udi0xLjEzLjEvbGliY2hhcnNldC9jb25maWd1cmUuYWMKK0BAIC0xNiwxNyArMTYsMTcgQEAgZG5sIGFsb25nIHdpdGggdGhlIEdOVSBDSEFSU0VUIExpYnJhcnk7CisgZG5sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwKKyBkbmwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorIAorLUFDX1BSRVJFUShbMi4xM10pCisrQUNfUFJFUkVRKDIuNjEpCisrQUNfSU5JVChbbGliY2hhcnNldF0sWzEuNF0gKQorK0FDX0NPTkZJR19TUkNESVIoW2xpYi9sb2NhbGNoYXJzZXQuY10pCisgCistUEFDS0FHRT1saWJjaGFyc2V0CistVkVSU0lPTj0xLjQKKy0KKy1BQ19JTklUKFtsaWIvbG9jYWxjaGFyc2V0LmNdKQorIEFDX0NPTkZJR19BVVhfRElSKFtidWlsZC1hdXhdKQorIEFDX0NPTkZJR19IRUFERVIoW2NvbmZpZy5oXSkKKyBBQ19QUk9HX01BS0VfU0VUCistQUNfU1VCU1QoW1BBQ0tBR0VdKQorLUFDX1NVQlNUKFtWRVJTSU9OXSkKKytkbmwgQUNfU1VCU1QoUEFDS0FHRSkKKytkbmwgQUNfU1VCU1QoVkVSU0lPTikKKysKKytBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCisgCisgZG5sICAgICAgICAgICBjaGVja3MgZm9yIGJhc2ljIHByb2dyYW1zCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252XzEuMTEuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnZfMS4xMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZTRiOTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252XzEuMTEuMS5iYgpAQCAtMCwwICsxLDQ3IEBACitTVU1NQVJZID0gIkNoYXJhY3RlciBlbmNvZGluZyBzdXBwb3J0IGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJHTlUgbGliaWNvbnYgLSBsaWJpY29udiBpcyBmb3IgeW91IGlmIHlvdXIgYXBwbGljYXRpb24gbmVlZHMgdG8gc3VwcG9ydCBcCittdWx0aXBsZSBjaGFyYWN0ZXIgZW5jb2RpbmdzLCBidXQgdGhhdCBzdXBwb3J0IGxhY2tzIGZyb20geW91ciBzeXN0ZW0uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmljb252IgorU0VDVElPTiA9ICJsaWJzIgorTk9URVMgPSAiTmVlZHMgdG8gYmUgc3RyaXBwZWQgZG93biB0bzogYXNjaWkgaXNvODg1OS0xIGV1Y2pwIGlzby0yMDIyanAgZ2IgdXRmOCIKK1BST1ZJREVTID0gInZpcnR1YWwvbGliaWNvbnYiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9OWY2MDRkOGE0ZjhlNzRmNGY1MTQwODQ1YTIxYjY2NzQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliY2hhcnNldC9DT1BZSU5HLkxJQjttZDU9OWY2MDRkOGE0ZjhlNzRmNGY1MTQwODQ1YTIxYjY2NzQiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9hdXRvY29uZi5wYXRjaCBcCisJICAgZmlsZTovL3NoYXJlZF9wcmVsb2FkYWJsZV9saWJpY29udl9saW51eC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDQyYjk3ZjZlZjVkZDBiYTQ0NjlkNTIwZWQ3MzJmZWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTc4YzM0N2ExYTBjYjE1ZjI2NDg1MTllOTc5OTE1MWY0YjRhOTM0YjYxYWQ5ZWU3NDI0NDc4ZWZlMmI4MjU3ZiIKKworUyA9ICIke1dPUktESVJ9L2xpYmljb252LSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dAorCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgaWYgZC5nZXRWYXIoIlRDTElCQyIsIFRydWUpID09ICJnbGliYyI6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJsaWJpY29udiBpcyBwcm92aWRlZCBmb3IgdXNlIHdpdGggdUNsaWJjIG9ubHkgLSBnbGliYyBhbHJlYWR5IHByb3ZpZGVzIGljb252IikKK30KKworRVhUUkFfT0VDT05GICs9ICItLWVuYWJsZS1zaGFyZWQgLS1lbmFibGUtc3RhdGljIC0tZW5hYmxlLXJlbG9jYXRhYmxlIgorCitMRUFEX1NPTkFNRSA9ICJsaWJpY29udi5zbyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXJtIC1mICR7U30vbTQvbGlidG9vbC5tNCAke1N9L200L2x0b3B0aW9ucy5tNCAke1N9L200L2x0c3VnYXIubTQgJHtTfS9tNC9sdHZlcnNpb24ubTQgJHtTfS9tNC9sdH5vYnNvbGV0ZS5tNCAke1N9L2xpYmNoYXJzZXQvbTQvbGlidG9vbC5tNCAke1N9L2xpYmNoYXJzZXQvbTQvbHRvcHRpb25zLm00ICR7U30vbGliY2hhcnNldC9tNC9sdHN1Z2FyLm00ICR7U30vbGliY2hhcnNldC9tNC9sdHZlcnNpb24ubTQgJHtTfS9saWJjaGFyc2V0L200L2x0fm9ic29sZXRlLm00Cit9CisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQgKCkgeworICAgICAgICAjIGZvcmNpYmx5IHJlbW92ZSBSUEFUSCBmcm9tIGxpYnRvb2wKKyAgICAgICAgc2VkIC1pICdzfF5oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPS4qfGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiJ8ZycgKmxpYnRvb2wKKyAgICAgICAgc2VkIC1pICdzfF5ydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSHxydW5wYXRoX3Zhcj1fTk9fUlBBVEhffGcnICpsaWJ0b29sCit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9wcmVsb2FkYWJsZV9saWJpY29udi5zbworCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2NoYXJzZXQuYWxpYXMKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnZfMS4xNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnZfMS4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjZmZTA5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udl8xLjE0LmJiCkBAIC0wLDAgKzEsNTEgQEAKK1NVTU1BUlkgPSAiQ2hhcmFjdGVyIGVuY29kaW5nIHN1cHBvcnQgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIkdOVSBsaWJpY29udiAtIGxpYmljb252IGlzIGZvciB5b3UgaWYgeW91ciBhcHBsaWNhdGlvbiBuZWVkcyB0byBzdXBwb3J0IFwKK211bHRpcGxlIGNoYXJhY3RlciBlbmNvZGluZ3MsIGJ1dCB0aGF0IHN1cHBvcnQgbGFja3MgZnJvbSB5b3VyIHN5c3RlbS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliaWNvbnYiCitTRUNUSU9OID0gImxpYnMiCitOT1RFUyA9ICJOZWVkcyB0byBiZSBzdHJpcHBlZCBkb3duIHRvOiBhc2NpaSBpc284ODU5LTEgZXVjanAgaXNvLTIwMjJqcCBnYiB1dGY4IgorUFJPVklERVMgPSAidmlydHVhbC9saWJpY29udiIKK1BSID0gInIxIgorTElDRU5TRSA9ICJMR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9OWY2MDRkOGE0ZjhlNzRmNGY1MTQwODQ1YTIxYjY2NzQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliY2hhcnNldC9DT1BZSU5HLkxJQjttZDU9OWY2MDRkOGE0ZjhlNzRmNGY1MTQwODQ1YTIxYjY2NzQiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9hdXRvY29uZi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtcmVsb2NhdGFibGUtbW9kdWxlLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlMzQ1MDliMTYyM2NlYzQ0OWRmZWI3M2Q3Y2U5YzZjNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3MmIyNGRlZDE3ZDY4NzE5M2MzMzY2ZDBlYmU3Y2RlMWU2YjE4ZjBkZjhjNTU0MzhhYzk1YmUzOWU4YTMwNjEzIgorCitTID0gIiR7V09SS0RJUn0vbGliaWNvbnYtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0CisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBkLmdldFZhcigiVEFSR0VUX09TIiwgVHJ1ZSkgIT0gImxpbnV4IjoKKyAgICAgICAgcmV0dXJuCisgICAgaWYgZC5nZXRWYXIoIlRDTElCQyIsIFRydWUpID09ICJnbGliYyI6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJsaWJpY29udiBpcyBwcm92aWRlZCBmb3IgdXNlIHdpdGggdUNsaWJjIG9ubHkgLSBnbGliYyBhbHJlYWR5IHByb3ZpZGVzIGljb252IikKK30KKworRVhUUkFfT0VDT05GICs9ICItLWVuYWJsZS1zaGFyZWQgLS1lbmFibGUtc3RhdGljIC0tZW5hYmxlLXJlbG9jYXRhYmxlIgorCitMRUFEX1NPTkFNRSA9ICJsaWJpY29udi5zbyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXJtIC1mICR7U30vbTQvbGlidG9vbC5tNCAke1N9L200L2x0b3B0aW9ucy5tNCAke1N9L200L2x0c3VnYXIubTQgJHtTfS9tNC9sdHZlcnNpb24ubTQgJHtTfS9tNC9sdH5vYnNvbGV0ZS5tNCAke1N9L2xpYmNoYXJzZXQvbTQvbGlidG9vbC5tNCAke1N9L2xpYmNoYXJzZXQvbTQvbHRvcHRpb25zLm00ICR7U30vbGliY2hhcnNldC9tNC9sdHN1Z2FyLm00ICR7U30vbGliY2hhcnNldC9tNC9sdHZlcnNpb24ubTQgJHtTfS9saWJjaGFyc2V0L200L2x0fm9ic29sZXRlLm00Cit9CisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQgKCkgeworICAgICAgICAjIGZvcmNpYmx5IHJlbW92ZSBSUEFUSCBmcm9tIGxpYnRvb2wKKyAgICAgICAgc2VkIC1pICdzfF5oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPS4qfGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiJ8ZycgKmxpYnRvb2wKKyAgICAgICAgc2VkIC1pICdzfF5ydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSHxydW5wYXRoX3Zhcj1fTk9fUlBBVEhffGcnICpsaWJ0b29sCit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9wcmVsb2FkYWJsZV9saWJpY29udi5zbworCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2NoYXJzZXQuYWxpYXMKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmtzYmEvbGlia3NiYS9rc2JhLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlia3NiYS9saWJrc2JhL2tzYmEtYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ODg2YzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmtzYmEvbGlia3NiYS9rc2JhLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDE1MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQKKworQWRkIHBrZ2NvbmZpZyBzdXBwb3J0IHRvIGxpYmtzYmEuCitUaGlzIHBhdGNoIGlzIHJlamVjdGVkIGJ5IHVwc3RyZWFtIGZvciB0aGUgcmVhc29uIGJlbG93OgorVGhleSB0aGluayBwa2djb25maWcgYWRkcyBubyBwb3J0YWJpbGl0eSBhbmQgbWFpbnRhaW5pbmcgdGhlbSBpcyBub3Qgd29ydGh3aGlsZS4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorCitJbmRleDogbGlia3NiYS0xLjMuMC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmtzYmEtMS4zLjAub3JpZy9NYWtlZmlsZS5hbQkyMDE0LTA1LTEzIDIxOjM5OjIyLjM5MDM4NTY0NiArMDAwMAorKysrIGxpYmtzYmEtMS4zLjAvTWFrZWZpbGUuYW0JMjAxNC0wNS0xMyAyMTozOToyMi40NjIzODU2NDYgKzAwMDAKK0BAIC0yMSw2ICsyMSw5IEBACisgQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQgLUkgZ2wvbTQKKyBBVVRPTUFLRV9PUFRJT05TID0gZGlzdC1iemlwMiBuby1kaXN0LWd6aXAKKyAKKytwa2djb25maWdkaXIgPSAke2xpYmRpcn0vcGtnY29uZmlnCisrcGtnY29uZmlnX0RBVEEgPSBrc2JhLnBjCisrCisgIyAoQSBzdWl0YWJsZSBnaXRsb2ctdG8tY2hhbmdlbG9nIHNjcmlwdCBjYW4gYmUgZm91bmQgaW4gR251UEcgbWFzdGVyLikKKyBHSVRMT0dfVE9fQ0hBTkdFTE9HPWdpdGxvZy10by1jaGFuZ2Vsb2cKKyAKK0luZGV4OiBsaWJrc2JhLTEuMy4wL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmtzYmEtMS4zLjAub3JpZy9jb25maWd1cmUuYWMJMjAxNC0wNS0xMyAyMTozOToyMi4zOTAzODU2NDYgKzAwMDAKKysrKyBsaWJrc2JhLTEuMy4wL2NvbmZpZ3VyZS5hYwkyMDE0LTA1LTEzIDIxOjM5OjIyLjQ2MjM4NTY0NiArMDAwMAorQEAgLTQwMCw2ICs0MDAsNyBAQAorIHNyYy9NYWtlZmlsZQorIHNyYy9rc2JhLWNvbmZpZworIHNyYy92ZXJzaW9uaW5mby5yYworK2tzYmEucGMKKyB0ZXN0cy9NYWtlZmlsZQorIGRvYy9NYWtlZmlsZQorIF0pCitJbmRleDogbGlia3NiYS0xLjMuMC9rc2JhLnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgbGlia3NiYS0xLjMuMC9rc2JhLnBjLmluCTIwMTQtMDUtMTMgMjE6Mzk6MjIuNDYyMzg1NjQ2ICswMDAwCitAQCAtMCwwICsxLDE3IEBACisrcHJlZml4PUBwcmVmaXhACisrZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisrCisrIyBBUEkgaW5mbworK2FwaV92ZXJzaW9uPUBLU0JBX0NPTkZJR19BUElfVkVSU0lPTkAKKytob3N0PUBLU0JBX0NPTkZJR19IT1NUQAorKworK05hbWU6IGtzYmEKKytEZXNjcmlwdGlvbjogTGlia3NiYSBwcm92aWRlcyBhbiBlYXN5IEFQSSB0byBjcmVhdGUgYW5kIHBhcnNlIFguNTA5IGFuZCBDTVMgcmVsYXRlZCBvYmplY3RzCisrUmVxdWlyZXM6CisrVmVyc2lvbjogQFZFUlNJT05ACisrTGliczogLUwke2xpYmRpcn0gLWxrc2JhCisrTGlicy5wcml2YXRlOiAtTHtsaWJkaXJ9IC1sZ3BnLWVycm9yCisrQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KKysKK0luZGV4OiBsaWJrc2JhLTEuMy4wL3NyYy9rc2JhLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlia3NiYS0xLjMuMC5vcmlnL3NyYy9rc2JhLm00CTIwMTQtMDUtMTMgMjE6Mzk6MjIuMzkwMzg1NjQ2ICswMDAwCisrKysgbGlia3NiYS0xLjMuMC9zcmMva3NiYS5tNAkyMDE0LTA1LTEzIDIxOjQ5OjAzLjY1MDM4MjY5NiArMDAwMAorQEAgLTIyLDE4ICsyMiw3IEBACisgZG5sCisgQUNfREVGVU4oW0FNX1BBVEhfS1NCQV0sCisgW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKy0gQUNfQVJHX1dJVEgoa3NiYS1wcmVmaXgsCistICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1rc2JhLXByZWZpeD1QRlhdLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcmVmaXggd2hlcmUgS1NCQSBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0pLAorLSAgICAga3NiYV9jb25maWdfcHJlZml4PSIkd2l0aHZhbCIsIGtzYmFfY29uZmlnX3ByZWZpeD0iIikKKy0gIGlmIHRlc3QgeCRrc2JhX2NvbmZpZ19wcmVmaXggIT0geCA7IHRoZW4KKy0gICAgIGtzYmFfY29uZmlnX2FyZ3M9IiRrc2JhX2NvbmZpZ19hcmdzIC0tcHJlZml4PSRrc2JhX2NvbmZpZ19wcmVmaXgiCistICAgICBpZiB0ZXN0IHgke0tTQkFfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKy0gICAgICAgIEtTQkFfQ09ORklHPSRrc2JhX2NvbmZpZ19wcmVmaXgvYmluL2tzYmEtY29uZmlnCistICAgICBmaQorLSAgZmkKKyAKKy0gIEFDX1BBVEhfUFJPRyhLU0JBX0NPTkZJRywga3NiYS1jb25maWcsIG5vKQorICAgdG1wPWlmZWxzZShbJDFdLCAsMToxLjAuMCwkMSkKKyAgIGlmIGVjaG8gIiR0bXAiIHwgZ3JlcCAnOicgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCA7IHRoZW4KKyAgICAgIHJlcV9rc2JhX2FwaT1gZWNobyAiJHRtcCIgICAgIHwgc2VkICdzL1woLipcKTpcKC4qXCkvXDEvJ2AKK0BAIC00Myw0OCArMzIsMTMgQEAKKyAgICAgIG1pbl9rc2JhX3ZlcnNpb249IiR0bXAiCisgICBmaQorIAorLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBLU0JBIC0gdmVyc2lvbiA+PSAkbWluX2tzYmFfdmVyc2lvbikKKy0gIG9rPW5vCistICBpZiB0ZXN0ICIkS1NCQV9DT05GSUciICE9ICJubyIgOyB0aGVuCistICAgIHJlcV9tYWpvcj1gZWNobyAkbWluX2tzYmFfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMS8nYAorLSAgICByZXFfbWlub3I9YGVjaG8gJG1pbl9rc2JhX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDIvJ2AKKy0gICAgcmVxX21pY3JvPWBlY2hvICRtaW5fa3NiYV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wzLydgCistICAgIGtzYmFfY29uZmlnX3ZlcnNpb249YCRLU0JBX0NPTkZJRyAka3NiYV9jb25maWdfYXJncyAtLXZlcnNpb25gCistICAgIG1ham9yPWBlY2hvICRrc2JhX2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDEvJ2AKKy0gICAgbWlub3I9YGVjaG8gJGtzYmFfY29uZmlnX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMi8nYAorLSAgICBtaWNybz1gZWNobyAka3NiYV9jb25maWdfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wzLydgCistICAgIGlmIHRlc3QgIiRtYWpvciIgLWd0ICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgb2s9eWVzCistICAgIGVsc2UKKy0gICAgICAgIGlmIHRlc3QgIiRtYWpvciIgLWVxICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgICAgIGlmIHRlc3QgIiRtaW5vciIgLWd0ICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICBpZiB0ZXN0ICIkbWlub3IiIC1lcSAiJHJlcV9taW5vciI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJG1pY3JvIiAtZ2UgIiRyZXFfbWljcm8iOyB0aGVuCistICAgICAgICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICBmaQorLSAgICAgICAgZmkKKy0gICAgZmkKKy0gIGZpCistICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorLSAgICBBQ19NU0dfUkVTVUxUKFt5ZXMgKCRrc2JhX2NvbmZpZ192ZXJzaW9uKV0pCistICBlbHNlCistICAgIEFDX01TR19SRVNVTFQobm8pCistICBmaQorKyAgUEtHX0NIRUNLX01PRFVMRVMoS1NCQSwgW2tzYmEgPj0gJG1pbl9rc2JhX3ZlcnNpb25dLCBbb2s9eWVzXSwgW29rPW5vXSkKKysKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCisgICAgICAjIEV2ZW4gaWYgd2UgaGF2ZSBhIHJlY2VudCBsaWJrc2JhLCB3ZSBzaG91bGQgY2hlY2sgdGhhdCB0aGUKKyAgICAgICMgQVBJIGlzIGNvbXBhdGlibGUuCisgICAgICBpZiB0ZXN0ICIkcmVxX2tzYmFfYXBpIiAtZ3QgMCA7IHRoZW4KKy0gICAgICAgIHRtcD1gJEtTQkFfQ09ORklHIC0tYXBpLXZlcnNpb24gMj4vZGV2L251bGwgfHwgZWNobyAwYAorKyAgICAgICAgdG1wPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWFwaV92ZXJzaW9uIGtzYmFgCisgICAgICAgICBpZiB0ZXN0ICIkdG1wIiAtZ3QgMCA7IHRoZW4KKyAgICAgICAgICAgIEFDX01TR19DSEVDS0lORyhbS1NCQSBBUEkgdmVyc2lvbl0pCisgICAgICAgICAgICBpZiB0ZXN0ICIkcmVxX2tzYmFfYXBpIiAtZXEgIiR0bXAiIDsgdGhlbgorQEAgLTk3LDEwICs1MSw4IEBACisgICAgICBmaQorICAgZmkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIEtTQkFfQ0ZMQUdTPWAkS1NCQV9DT05GSUcgJGtzYmFfY29uZmlnX2FyZ3MgLS1jZmxhZ3NgCistICAgIEtTQkFfTElCUz1gJEtTQkFfQ09ORklHICRrc2JhX2NvbmZpZ19hcmdzIC0tbGlic2AKKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKKy0gICAgbGlia3NiYV9jb25maWdfaG9zdD1gJExJQktTQkFfQ09ORklHICRrc2JhX2NvbmZpZ19hcmdzIC0taG9zdCAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vbmVgCisrICAgIGxpYmtzYmFfY29uZmlnX2hvc3Q9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9aG9zdCBrc2JhYAorICAgICBpZiB0ZXN0IHgiJGxpYmtzYmFfY29uZmlnX2hvc3QiICE9IHhub25lIDsgdGhlbgorICAgICAgIGlmIHRlc3QgeCIkbGlia3NiYV9jb25maWdfaG9zdCIgIT0geCIkaG9zdCIgOyB0aGVuCisgICBBQ19NU0dfV0FSTihbWworQEAgLTExNCw4ICs2Niw2IEBACisgICAgICAgZmkKKyAgICAgZmkKKyAgIGVsc2UKKy0gICAgS1NCQV9DRkxBR1M9IiIKKy0gICAgS1NCQV9MSUJTPSIiCisgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCisgICBmaQorICAgQUNfU1VCU1QoS1NCQV9DRkxBR1MpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmtzYmEvbGlia3NiYV8xLjMuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlia3NiYS9saWJrc2JhXzEuMy4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMjExNjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmtzYmEvbGlia3NiYV8xLjMuMy5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIkVhc3kgQVBJIHRvIGNyZWF0ZSBhbmQgcGFyc2UgWC41MDkgYW5kIENNUyByZWxhdGVkIG9iamVjdHMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudXBnLm9yZy9yZWxhdGVkX3NvZnR3YXJlL2xpYmtzYmEvIgorTElDRU5TRSA9ICJHUEx2MisgfCBMR1BMdjMrIHwgR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZmQ1NDFkODNmNzVkMDM4YzRlMDYxN2I2NzJlZDhiZGEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5HUEx2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5HUEx2MzttZDU9MmYzMWIyNjZkMzQ0MGRkN2VlNTBmOTJjZjY3ZDhlNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MR1BMdjM7bWQ1PWU2YTYwMGZkNWUxZDljYmRlMmQ5ODM2ODAyMzNhZDAyIFwKKyAgICAgICAgICAgICAgICAgICAiCisKK0RFUEVORFMgPSAibGliZ3BnLWVycm9yIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2tzYmEtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQgcGtnY29uZmlnIHRleGluZm8KKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8va3NiYS1hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhNWRkM2M1N2ZjYTI1NDkzNWY1Y2Y4ZGIyNmUzOTA2NSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwYzdmNWZmZTM0ZDA0MTRmNjk1MWQ5ODgwYTQ2ZmNjMjk4NWM0ODdmN2MzNjM2OWI5ZjExYWQ0MTEzMWM3Nzg2IgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyBFbHNlIHRoZXNlIGNvdWxkIGJlIHVzZWQgaW4gcHJlZmVyZW5jZSB0byB0aG9zZSBpbiBhY2xvY2FsLWNvcHkKKwlybSAtZiAke1N9L200L2dwZy1lcnJvci5tNAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJtcGMvbGlibXBjLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibXBjL2xpYm1wYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM3NDI1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibXBjL2xpYm1wYy5pbmMKQEAgLTAsMCArMSw3IEBACitTVU1NQVJZID0gIkMgbGlicmFyeSBmb3IgY29tcGxleCBudW1iZXIgYXJpdGhtZXRpYyB3aXRoIGFyYml0cmFyeSBwcmVjaXNpb24gYW5kIGNvcnJlY3Qgcm91bmRpbmciCitERVNDUklQVElPTiA9ICJNcGMgaXMgYSBDIGxpYnJhcnkgZm9yIHRoZSBhcml0aG1ldGljIG9mIGNvbXBsZXggbnVtYmVycyB3aXRoIGFyYml0cmFyaWx5IGhpZ2ggcHJlY2lzaW9uIGFuZCBjb3JyZWN0IHJvdW5kaW5nIG9mIHRoZSByZXN1bHQuIEl0IGlzIGJ1aWx0IHVwb24gYW5kIGZvbGxvd3MgdGhlIHNhbWUgcHJpbmNpcGxlcyBhcyBNcGZyIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tdWx0aXByZWNpc2lvbi5vcmcvIgorTElDRU5TRSA9ICJMR1BMdjMiCitTRUNUSU9OID0gImxpYnMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibXBjL2xpYm1wY18xLjAuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibXBjL2xpYm1wY18xLjAuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2U1YTE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJtcGMvbGlibXBjXzEuMC4zLmJiCkBAIC0wLDAgKzEsMTMgQEAKK3JlcXVpcmUgbGlibXBjLmluYworCitERVBFTkRTID0gImdtcCBtcGZyIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxFU1NFUjttZDU9ZTZhNjAwZmQ1ZTFkOWNiZGUyZDk4MzY4MDIzM2FkMDIiCitTUkNfVVJJID0gImh0dHA6Ly93d3cubXVsdGlwcmVjaXNpb24ub3JnL21wYy9kb3dubG9hZC9tcGMtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDZhMWQ1ZjhkZGVhM2FiZDJjYzNlOThmNTgzNTJkMjYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjE3ZGVjYzZlYTA5ODg5ZmIwOGVkZTMzMDkxN2EwMGIxNjgwOWI4ZGI4OGMyOWMzMWJmYmI0OWNiZjg4ZWNjMyIKKworUyA9ICIke1dPUktESVJ9L21wYy0ke1BWfSIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJubC9saWJubC9maXgtcGMtZmlsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmwvZml4LXBjLWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU4YjgzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmwvZml4LXBjLWZpbGUucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NvbWUgcGFja2FnZXMgYXJlIGFza2luZyBvbmx5IGZvciBsaWJubC0yLjAsIGJ1dCBleHBlY3RzIHRvIGdldCBhbHNvCitsaWJubC1nZW5sLCBsaWJubC1uZiBsaWJubC1yb3V0ZSwgZWFzaWVzdCB3YXkgdG8gZml4IHRoZW0gaXMgaGVyZS4KKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxtYXJ0aW4uamFuc2FAZ21haWwuY29tPgorSW5kZXg6IGxpYm5sLTMuMi4xNC9saWJubC0zLjAucGMuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJubC0zLjIuMTQub3JpZy9saWJubC0zLjAucGMuaW4KKysrKyBsaWJubC0zLjIuMTQvbGlibmwtMy4wLnBjLmluCitAQCAtNiw1ICs2LDUgQEAgaW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKyBOYW1lOiBsaWJubAorIERlc2NyaXB0aW9uOiBDb252ZW5pZW5jZSBsaWJyYXJ5IGZvciBuZXRsaW5rIHNvY2tldHMKKyBWZXJzaW9uOiBAUEFDS0FHRV9WRVJTSU9OQAorLUxpYnM6IC1MJHtsaWJkaXJ9IC1sbmwtQE1BSl9WRVJTSU9OQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1sbmwtQE1BSl9WRVJTSU9OQCAtbG5sLWdlbmwtQE1BSl9WRVJTSU9OQCAtbG5sLW5mLUBNQUpfVkVSU0lPTkAgLWxubC1yb3V0ZS1ATUFKX1ZFUlNJT05ACisgQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0vbGlibmxATUFKX1ZFUlNJT05ACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sL2ZpeC1wa3Rsb2Nfc3ludGF4X2gtcmFjZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmwvZml4LXBrdGxvY19zeW50YXhfaC1yYWNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YWEwYmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sL2ZpeC1wa3Rsb2Nfc3ludGF4X2gtcmFjZS5wYXRjaApAQCAtMCwwICsxLDM2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK2xpYm5sIGhhcyBwcm9ncmVzc2VkIHRvIDAuMy4yIGFuZCB0aGVyZSBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYW55CisibWFrZSAtaiIgaXNzdWVzIHdpdGggdGhpcyBidWlsZCBhZnRlciBteSBsaW1pdGVkIHRlc3Rpbmcgb24gdGhhdAorbmV3ZXIgdmVyc2lvbiBzbyB3ZSBjYW4gYXNzdW1lIHRoaXMgaXNzdWUgaXMgZml4ZWQgdXBzdHJlYW0KKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxtYXJ0aW4uamFuc2FAZ21haWwuY29tPgorCitJbmRleDogbGlibmwtMy4yLjI1L2xpYi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYm5sLTMuMi4yNS5vcmlnL2xpYi9NYWtlZmlsZS5hbQorKysrIGxpYm5sLTMuMi4yNS9saWIvTWFrZWZpbGUuYW0KK0BAIC00Niw5ICs0NiwxMiBAQCBDTEVBTkZJTEVTID0gXAorIAorICMgSGFjayB0byBhdm9pZCB1c2luZyB5bHdyYXAuIEl0IGRvZXMgbm90IGZ1bmN0aW9uIGNvcnJlY3RseSBpbiBjb21iaW5hdGlvbgorICMgd2l0aCAtLWhlYWRlci1maWxlPQorK3JvdXRlL3BrdGxvYy5sbzogcm91dGUvcGt0bG9jX3N5bnRheC5oIHJvdXRlL3BrdGxvY19ncmFtbWFyLmgKKytyb3V0ZS9wa3Rsb2NfZ3JhbW1hci5oOiByb3V0ZS9wa3Rsb2NfZ3JhbW1hci5jCisgcm91dGUvcGt0bG9jX2dyYW1tYXIuYzogcm91dGUvcGt0bG9jX2dyYW1tYXIubAorIAkkKEFNX1ZfR0VOKSAkKE1LRElSX1ApIHJvdXRlOyAkKEZMRVgpIC0taGVhZGVyLWZpbGU9cm91dGUvcGt0bG9jX2dyYW1tYXIuaCAkKExGTEFHUykgLW8gJEAgJF4KKyAKKytyb3V0ZS9wa3Rsb2Nfc3ludGF4Lmg6IHJvdXRlL3BrdGxvY19zeW50YXguYworIHJvdXRlL3BrdGxvY19zeW50YXguYzogcm91dGUvcGt0bG9jX3N5bnRheC55CisgCSQoQU1fVl9HRU4pICQoTUtESVJfUCkgcm91dGU7ICQoWUFDQykgLWQgJChZRkxBR1MpIC1vICRAICReCisgCitAQCAtMTAyLDcgKzEwNSw5IEBAIEJVSUxUX1NPVVJDRVMgPSBcCisgCXJvdXRlL2Nscy9lbWF0Y2hfZ3JhbW1hci5jIFwKKyAJcm91dGUvY2xzL2VtYXRjaF9zeW50YXguYyBcCisgCXJvdXRlL3BrdGxvY19ncmFtbWFyLmMgXAorLQlyb3V0ZS9wa3Rsb2Nfc3ludGF4LmMKKysgICByb3V0ZS9wa3Rsb2Nfc3ludGF4LmMgXAorKyAgIHJvdXRlL3BrdGxvY19zeW50YXguaCBcCisrICAgcm91dGUvcGt0bG9jX2dyYW1tYXIuaAorIAorIEVYVFJBX0RJU1QgPSBcCisgCXJvdXRlL3BrdGxvY19ncmFtbWFyLmwgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJubC9saWJubF8zLjIuMjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sXzMuMi4yNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzgxNGZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJubC9saWJubF8zLjIuMjUuYmIKQEAgLTAsMCArMSw0NCBAQAorU1VNTUFSWSA9ICJBIGxpYnJhcnkgZm9yIGFwcGxpY2F0aW9ucyBkZWFsaW5nIHdpdGggbmV0bGluayBzb2NrZXRzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5pbmZyYWRlYWQub3JnL350Z3IvbGlibmwvIgorU0VDVElPTiA9ICJsaWJzL25ldHdvcmsiCisKK1BFID0gIjEiCitQUiA9ICJyMSIKKworTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIgorCitERVBFTkRTID0gImZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmluZnJhZGVhZC5vcmcvfnRnci8ke0JQTn0vZmlsZXMvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1wa3Rsb2Nfc3ludGF4X2gtcmFjZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcGMtZmlsZS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDNmNzRkMGNkNTAzN2NhZGM4Y2RmYTMxM2JiZDE5NWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGJlYjc1OTA2NzQ5NTdiOTMxZGU2YjdmODFjNTMwYjg1ZGM3YzFhZDhmYmRhMDE1Mzk4YmMxZThkMWNlOGVjNSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9saWJubC0zLnNvLiogXAorICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYm5sLnNvLiogXAorICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfSIKK1JSRVBMQUNFU18ke1BOfSA9ICJsaWJubDIiCitSQ09ORkxJQ1RTXyR7UE59ID0gImxpYm5sMiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2xpYm5sL2NsaS8qLy5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2xpYm5sL2NsaS8qLyouc28gXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGlibmwvY2xpLyovKi5sYSIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2xpYm5sL2NsaS8qLyouYSIKKworUEFDS0FHRVMgKz0gIiR7UE59LWNsaSAke1BOfS1yb3V0ZSAke1BOfS1uZiAke1BOfS1nZW5sICR7UE59LWlkaWFnIgorRklMRVNfJHtQTn0tY2xpICAgPSAiJHtsaWJkaXJ9L2xpYm5sLWNsaS0zLnNvLiogXAorICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYm5sL2NsaS8qLyouc28uKiBcCisgICAgICAgICAgICAgICAgICAgICAke3NiaW5kaXJ9L25sLSoiCitGSUxFU18ke1BOfS1yb3V0ZSA9ICIke2xpYmRpcn0vbGlibmwtcm91dGUtMy5zby4qIgorRklMRVNfJHtQTn0taWRpYWcgPSAiJHtsaWJkaXJ9L2xpYm5sLWlkaWFnLTMuc28uKiIKK0ZJTEVTXyR7UE59LW5mICAgID0gIiR7bGliZGlyfS9saWJubC1uZi0zLnNvLioiCitGSUxFU18ke1BOfS1nZW5sICA9ICIke2xpYmRpcn0vbGlibmwtZ2VubC0zLnNvLiogXAorICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYm5sLWdlbmwuc28uKiBcCisgICAgICAgICAgICAgICAgICAgICAke3NiaW5kaXJ9L2dlbmwtY3RybC1saXN0IgorUlJFUExBQ0VTXyR7UE59LWdlbmwgPSAibGlibmwtZ2VubDIgbGlibmwtZ2VubC0zLTIwMCIKK1JDT05GTElDVFNfJHtQTn0tZ2VubCA9ICJsaWJubC1nZW5sMiBsaWJubC1nZW5sLTMtMjAwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsLTAuMy4xNy8wMDAxLUZpeC1lbmFibGUtdmZwLWZsYWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3LzAwMDEtRml4LWVuYWJsZS12ZnAtZmxhZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmYxY2IxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsLTAuMy4xNy8wMDAxLUZpeC1lbmFibGUtdmZwLWZsYWcucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitGcm9tIDE5MjE0OThiY2MwNjQwOGU4YjA1MWEzYTllOWNlNDE4Mjk5OGY3NDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KK0RhdGU6IEZyaSwgOCBBcHIgMjAxMSAxMDowNTo0OSAtMDcwMAorU3ViamVjdDogW1BBVENIIDEwLzEwXSBGaXggLS1lbmFibGUtdmZwIGZsYWcKKworUGF0Y2ggZnJvbSBDaHJpc3RvcGhlIEx5b24sIGZpeGVzICMzNjA4NC4KKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgfCAgICA0ICsrLS0KKyBsaWJvaWwvYXJtL01ha2VmaWxlLmFtIHwgICAgMSArCisgMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDk4YzgxZmIuLjQwN2Q4OGMgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE4OCw4ICsxODgsOCBAQCBmaQorIEFDX0FSR19FTkFCTEUodmZwLAorICAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZmcF0sW2NvbXBpbGUgd2l0aCBWZWN0b3IgRmxvYXRpbmctcG9pbnQgdW5pdCBzdXBwb3J0XSksCisgICBlbmFibGVfdmZwPSRlbmFibGV2YWwsZW5hYmxlX3ZmcD15ZXMpCistaWYgdGVzdCAieCRlbmFibGUtdmZwIiA9IHh5ZXMgLWEgeCRIQVZFX0dDQ19BU00gPSB4eWVzIC1hIHgkSEFWRV9BUk0gPSB4eWVzOyB0aGVuCistICBBU19DT01QSUxFUl9GTEFHKFsiLVdhLC1tZnB1PXZmcCJdLAorK2lmIHRlc3QgIngkZW5hYmxlX3ZmcCIgPSB4eWVzIC1hIHgkSEFWRV9HQ0NfQVNNID0geHllcyAtYSB4JEhBVkVfQVJNID0geHllczsgdGhlbgorKyAgQVNfQ09NUElMRVJfRkxBRyhbIi1tZnB1PXZmcCJdLAorICAgICBbVkZQX0NGTEFHUz0iJFZGUF9DRkxBR1MgLW1mcHU9dmZwIl0sCisgICAgIHRydWUpCisgICAjQVNfQ09NUElMRVJfRkxBRyhbIi1XYSwtbWZsb2F0LWFiaT1zb2Z0ZnAiXSwKK2RpZmYgLS1naXQgYS9saWJvaWwvYXJtL01ha2VmaWxlLmFtIGIvbGlib2lsL2FybS9NYWtlZmlsZS5hbQoraW5kZXggZWFkMDhlZC4uY2Q4ZDlmYSAxMDA2NDQKKy0tLSBhL2xpYm9pbC9hcm0vTWFrZWZpbGUuYW0KKysrKyBiL2xpYm9pbC9hcm0vTWFrZWZpbGUuYW0KK0BAIC02LDQgKzYsNSBAQCBsaWJhcm1fbGFfU09VUkNFUyA9IFwKKyAJbWF0aF92ZnBfYXNtLlMKKyAKKyBsaWJhcm1fbGFfQ0ZMQUdTID0gJChMSUJPSUxfQ0ZMQUdTKSAkKFZGUF9DRkxBR1MpCisrbGliYXJtX2xhX0NDQVNGTEFHUyA9ICQoTElCT0lMX0NGTEFHUykgJChWRlBfQ0ZMQUdTKQorIAorLS0gCisxLjcuNgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3L2ZpeC11bmFsaWduZWQtd2hpdGVsaXN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsLTAuMy4xNy9maXgtdW5hbGlnbmVkLXdoaXRlbGlzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGUzYzFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsLTAuMy4xNy9maXgtdW5hbGlnbmVkLXdoaXRlbGlzdC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitVcHN0cmVhbTogaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzEzNTgKKworY29uZmlndXJlOiBmaXggd2hpdGVsaXN0aW5nIG9mIHg4Nl82NCB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcworCitGaXggdHlwbyBpbiB3aGl0ZWxpc3Qgc28gY3Jvc3MtY29tcGlsZSB3b3JrcyBmb3IgeDg2XzY0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKy0tLSBsaWJvaWwtMC4zLjE3L200L2FzLXVuYWxpZ25lZC1hY2Nlc3MubTQub3JpZwkyMDA5LTAyLTI2IDE0OjQwOjA4LjAwMDAwMDAwMCAtMDUwMAorKysrIGxpYm9pbC0wLjMuMTcvbTQvYXMtdW5hbGlnbmVkLWFjY2Vzcy5tNAkyMDEwLTExLTAzIDEyOjE5OjU1LjAwMDAwMDAwMCAtMDQwMAorQEAgLTksNyArOSw3IEBACisgICAgICAgICBfQVNfRUNIT19OKFsoYmxhY2tsaXN0ZWQpIF0pCisgICAgICAgICBhc19jdl91bmFsaWduZWRfYWNjZXNzPW5vCisgCTs7CistICAgICAgaT84Nip8eDg2XzY0fGFtZDY0fHBvd2VycGMqfG02OGsqfGNyaXMqKQorKyAgICAgIGk/ODYqfHg4Nl82NCp8YW1kNjQqfHBvd2VycGMqfG02OGsqfGNyaXMqKQorICAgICAgICAgX0FTX0VDSE9fTihbKHdoaXRlbGlzdGVkKSBdKQorICAgICAgICAgYXNfY3ZfdW5hbGlnbmVkX2FjY2Vzcz15ZXMKKyAJOzsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbC0wLjMuMTcvbGlib2lsX2ZpeF9mb3JfeDMyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsLTAuMy4xNy9saWJvaWxfZml4X2Zvcl94MzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDczMzgwZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbC0wLjMuMTcvbGlib2lsX2ZpeF9mb3JfeDMyLnBhdGNoCkBAIC0wLDAgKzEsMjIyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworTWFrZSB0aGUgYXNzZW1ibHkgc3ludGF4IGNvbXBhdGlibGUgd2l0aCB4MzIgZ2NjLiBPdGhld2lzZSB4MzIgZ2NjIHRocm93cyBlcnJvcnMuCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDExLzEyLzAxCisKKworSW5kZXg6IGxpYm9pbC0wLjMuMTcvbGlib2lsL2FtZDY0L3dhdmVsZXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYm9pbC0wLjMuMTcub3JpZy9saWJvaWwvYW1kNjQvd2F2ZWxldC5jCisrKysgbGlib2lsLTAuMy4xNy9saWJvaWwvYW1kNjQvd2F2ZWxldC5jCitAQCAtMjEsMTQgKzIxLDE0IEBAIGRlaW50ZXJsZWF2ZTJfYXNtIChpbnQxNl90ICpkMSwgaW50MTZfdCAKKyAgIGFzbSB2b2xhdGlsZSAoIlxuIgorICAgICAgICIgIHN1YiAkMiwgJSVyY3hcbiIKKyAgICAgICAiMTpcbiIKKy0gICAgICAiICBtb3Z3ICglMSwlJXJjeCw0KSwgJSVheFxuIgorLSAgICAgICIgIG1vdncgJSVheCwgKCUwLCUlcmN4LDIpXG4iCistICAgICAgIiAgbW92dyAyKCUxLCUlcmN4LDQpLCAlJWF4XG4iCistICAgICAgIiAgbW92dyAlJWF4LCAoJTIsJSVyY3gsMilcbiIKKy0gICAgICAiICBtb3Z3IDQoJTEsJSVyY3gsNCksICUlYXhcbiIKKy0gICAgICAiICBtb3Z3ICUlYXgsIDIoJTAsJSVyY3gsMilcbiIKKy0gICAgICAiICBtb3Z3IDYoJTEsJSVyY3gsNCksICUlYXhcbiIKKy0gICAgICAiICBtb3Z3ICUlYXgsIDIoJTIsJSVyY3gsMilcbiIKKysgICAgICAiICBtb3Z3ICglcTEsJSVyY3gsNCksICUlYXhcbiIKKysgICAgICAiICBtb3Z3ICUlYXgsICglcTAsJSVyY3gsMilcbiIKKysgICAgICAiICBtb3Z3IDIoJXExLCUlcmN4LDQpLCAlJWF4XG4iCisrICAgICAgIiAgbW92dyAlJWF4LCAoJXEyLCUlcmN4LDIpXG4iCisrICAgICAgIiAgbW92dyA0KCVxMSwlJXJjeCw0KSwgJSVheFxuIgorKyAgICAgICIgIG1vdncgJSVheCwgMiglcTAsJSVyY3gsMilcbiIKKysgICAgICAiICBtb3Z3IDYoJXExLCUlcmN4LDQpLCAlJWF4XG4iCisrICAgICAgIiAgbW92dyAlJWF4LCAyKCVxMiwlJXJjeCwyKVxuIgorICAgICAgICIgIHN1YiAkMiwgJSVyY3hcbiIKKyAgICAgICAiICBqZ2UgMWJcbiIKKyAgICAgICA6ICIrciIgKGQxKSwgIityIiAoc18yeG4pLCAiK3IiIChkMiksICIrYyIgKG4pCitAQCAtNTMsMjAgKzUzLDIwIEBAIGRlaW50ZXJsZWF2ZTJfbW14IChpbnQxNl90ICpkMSwgaW50MTZfdCAKKyAgIGFzbSB2b2xhdGlsZSAoIlxuIgorICAgICAgICIgIHhvciAlJXJjeCwgJSVyY3hcbiIKKyAgICAgICAiMTpcbiIKKy0gICAgICAiICBtb3ZxICglMSwlJXJjeCw0KSwgJSVtbTBcbiIKKy0gICAgICAiICBtb3ZxIDgoJTEsJSVyY3gsNCksICUlbW0xXG4iCisrICAgICAgIiAgbW92cSAoJXExLCUlcmN4LDQpLCAlJW1tMFxuIgorKyAgICAgICIgIG1vdnEgOCglcTEsJSVyY3gsNCksICUlbW0xXG4iCisgICAgICAgIiAgcHNsbGQgJDE2LCAlJW1tMFxuIgorICAgICAgICIgIHBzbGxkICQxNiwgJSVtbTFcbiIKKyAgICAgICAiICBwc3JhZCAkMTYsICUlbW0wXG4iCisgICAgICAgIiAgcHNyYWQgJDE2LCAlJW1tMVxuIgorICAgICAgICIgIHBhY2tzc2R3ICUlbW0xLCAlJW1tMFxuIgorLSAgICAgICIgIG1vdnEgJSVtbTAsICglMCwlJXJjeCwyKVxuIgorLSAgICAgICIgIG1vdnEgKCUxLCUlcmN4LDQpLCAlJW1tMFxuIgorLSAgICAgICIgIG1vdnEgOCglMSwlJXJjeCw0KSwgJSVtbTFcbiIKKysgICAgICAiICBtb3ZxICUlbW0wLCAoJXEwLCUlcmN4LDIpXG4iCisrICAgICAgIiAgbW92cSAoJXExLCUlcmN4LDQpLCAlJW1tMFxuIgorKyAgICAgICIgIG1vdnEgOCglcTEsJSVyY3gsNCksICUlbW0xXG4iCisgICAgICAgIiAgcHNyYWQgJDE2LCAlJW1tMFxuIgorICAgICAgICIgIHBzcmFkICQxNiwgJSVtbTFcbiIKKyAgICAgICAiICBwYWNrc3NkdyAlJW1tMSwgJSVtbTBcbiIKKy0gICAgICAiICBtb3ZxICUlbW0wLCAoJTIsJSVyY3gsMilcbiIKKysgICAgICAiICBtb3ZxICUlbW0wLCAoJXEyLCUlcmN4LDIpXG4iCisgICAgICAgIiAgYWRkICQ0LCAlJXJjeFxuIgorICAgICAgICIgIGNtcCAlMywgJSVlY3hcbiIKKyAgICAgICAiICBqbCAxYlxuIgorQEAgLTkzLDEwICs5MywxMCBAQCBkZWludGVybGVhdmUyX21teF8yIChpbnQxNl90ICpkMSwgaW50MTZfCisgICBhc20gdm9sYXRpbGUgKCJcbiIKKyAgICAgICAiICB4b3IgJSVyY3gsICUlcmN4XG4iCisgICAgICAgIjE6XG4iCistICAgICAgIiAgcHNodWZ3ICQweGQ4LCAoJTEsJSVyY3gsNCksICUlbW0wXG4iCistICAgICAgIiAgbW92ZCAlJW1tMCwgKCUwLCUlcmN4LDIpXG4iCistICAgICAgIiAgcHNodWZ3ICQweDhkLCAoJTEsJSVyY3gsNCksICUlbW0wXG4iCistICAgICAgIiAgbW92ZCAlJW1tMCwgKCUyLCUlcmN4LDIpXG4iCisrICAgICAgIiAgcHNodWZ3ICQweGQ4LCAoJXExLCUlcmN4LDQpLCAlJW1tMFxuIgorKyAgICAgICIgIG1vdmQgJSVtbTAsICglcTAsJSVyY3gsMilcbiIKKysgICAgICAiICBwc2h1ZncgJDB4OGQsICglcTEsJSVyY3gsNCksICUlbW0wXG4iCisrICAgICAgIiAgbW92ZCAlJW1tMCwgKCVxMiwlJXJjeCwyKVxuIgorICAgICAgICIgIGFkZCAkMiwgJSVyY3hcbiIKKyAgICAgICAiICBjbXAgJTMsICUlZWN4XG4iCisgICAgICAgIiAgamwgMWJcbiIKK0BAIC0xMjMsMTYgKzEyMywxNiBAQCBkZWludGVybGVhdmUyX21teF8zIChpbnQxNl90ICpkMSwgaW50MTZfCisgICBhc20gdm9sYXRpbGUgKCJcbiIKKyAgICAgICAiICB4b3IgJSVyY3gsICUlcmN4XG4iCisgICAgICAgIjE6XG4iCistICAgICAgIiAgbW92cSAoJTEsJSVyY3gsNCksICUlbW0xXG4iCistICAgICAgIiAgbW92cSAoJTEsJSVyY3gsNCksICUlbW0yXG4iCistICAgICAgIiAgbW92cSA4KCUxLCUlcmN4LDQpLCAlJW1tMFxuIgorKyAgICAgICIgIG1vdnEgKCVxMSwlJXJjeCw0KSwgJSVtbTFcbiIKKysgICAgICAiICBtb3ZxICglcTEsJSVyY3gsNCksICUlbW0yXG4iCisrICAgICAgIiAgbW92cSA4KCVxMSwlJXJjeCw0KSwgJSVtbTBcbiIKKyAgICAgICAiICBwdW5wY2tsd2QgJSVtbTAsICUlbW0xXG4iCisgICAgICAgIiAgcHVucGNraHdkICUlbW0wLCAlJW1tMlxuIgorICAgICAgICIgIG1vdnEgJSVtbTEsICUlbW0wXG4iCisgICAgICAgIiAgcHVucGNrbHdkICUlbW0yLCAlJW1tMFxuIgorICAgICAgICIgIHB1bnBja2h3ZCAlJW1tMiwgJSVtbTFcbiIKKy0gICAgICAiICBtb3ZxICUlbW0wLCAoJTAsJSVyY3gsMilcbiIKKy0gICAgICAiICBtb3ZxICUlbW0xLCAoJTIsJSVyY3gsMilcbiIKKysgICAgICAiICBtb3ZxICUlbW0wLCAoJXEwLCUlcmN4LDIpXG4iCisrICAgICAgIiAgbW92cSAlJW1tMSwgKCVxMiwlJXJjeCwyKVxuIgorICAgICAgICIgIGFkZCAkNCwgJSVyY3hcbiIKKyAgICAgICAiICBjbXAgJTMsICUlZWN4XG4iCisgICAgICAgIiAgamwgMWJcbiIKK0BAIC0xNTksMjYgKzE1OSwyNiBAQCBkZWludGVybGVhdmUyX21teF80IChpbnQxNl90ICpkMSwgaW50MTZfCisgICBhc20gdm9sYXRpbGUgKCJcbiIKKyAgICAgICAiICB4b3IgJSVyY3gsICUlcmN4XG4iCisgICAgICAgIjE6XG4iCistICAgICAgIiAgbW92cSAoJTEsJSVyY3gsNCksICUlbW0xXG4iCisrICAgICAgIiAgbW92cSAoJXExLCUlcmN4LDQpLCAlJW1tMVxuIgorICAgICAgICIgIG1vdnEgJSVtbTEsICUlbW0yXG4iCistICAgICAgIiAgbW92cSA4KCUxLCUlcmN4LDQpLCAlJW1tMFxuIgorLSAgICAgICIgICBtb3ZxIDE2KCUxLCUlcmN4LDQpLCAlJW1tNVxuIgorKyAgICAgICIgIG1vdnEgOCglcTEsJSVyY3gsNCksICUlbW0wXG4iCisrICAgICAgIiAgIG1vdnEgMTYoJXExLCUlcmN4LDQpLCAlJW1tNVxuIgorICAgICAgICIgIHB1bnBja2x3ZCAlJW1tMCwgJSVtbTFcbiIKKyAgICAgICAiICAgbW92cSAlJW1tNSwgJSVtbTZcbiIKKyAgICAgICAiICBwdW5wY2tod2QgJSVtbTAsICUlbW0yXG4iCistICAgICAgIiAgIG1vdnEgMjQoJTEsJSVyY3gsNCksICUlbW00XG4iCisrICAgICAgIiAgIG1vdnEgMjQoJXExLCUlcmN4LDQpLCAlJW1tNFxuIgorICAgICAgICIgIG1vdnEgJSVtbTEsICUlbW0wXG4iCisgICAgICAgIiAgIHB1bnBja2x3ZCAlJW1tNCwgJSVtbTVcbiIKKyAgICAgICAiICBwdW5wY2tsd2QgJSVtbTIsICUlbW0wXG4iCisgICAgICAgIiAgIHB1bnBja2h3ZCAlJW1tNCwgJSVtbTZcbiIKKyAgICAgICAiICBwdW5wY2tod2QgJSVtbTIsICUlbW0xXG4iCisgICAgICAgIiAgIG1vdnEgJSVtbTUsICUlbW00XG4iCistICAgICAgIiAgbW92cSAlJW1tMCwgKCUwLCUlcmN4LDIpXG4iCisrICAgICAgIiAgbW92cSAlJW1tMCwgKCVxMCwlJXJjeCwyKVxuIgorICAgICAgICIgICBwdW5wY2tsd2QgJSVtbTYsICUlbW00XG4iCistICAgICAgIiAgbW92cSAlJW1tMSwgKCUyLCUlcmN4LDIpXG4iCisrICAgICAgIiAgbW92cSAlJW1tMSwgKCVxMiwlJXJjeCwyKVxuIgorICAgICAgICIgICBwdW5wY2tod2QgJSVtbTYsICUlbW01XG4iCistICAgICAgIiAgIG1vdnEgJSVtbTQsIDgoJTAsJSVyY3gsMilcbiIKKy0gICAgICAiICAgbW92cSAlJW1tNSwgOCglMiwlJXJjeCwyKVxuIgorKyAgICAgICIgICBtb3ZxICUlbW00LCA4KCVxMCwlJXJjeCwyKVxuIgorKyAgICAgICIgICBtb3ZxICUlbW01LCA4KCVxMiwlJXJjeCwyKVxuIgorICAgICAgICIgIGFkZCAkOCwgJSVyY3hcbiIKKyAgICAgICAiICBjbXAgJTMsICUlZWN4XG4iCisgICAgICAgIiAgamwgMWJcbiIKK0BAIC0yNTIsMTMgKzI1MiwxMyBAQCBpbnRlcmxlYXZlMl9tbXggKGludDE2X3QgKmRfMnhuLCBpbnQxNl90CisgICBhc20gdm9sYXRpbGUgKCJcbiIKKyAgICAgICAiICB4b3IgJSVyY3gsICUlcmN4XG4iCisgICAgICAgIjE6XG4iCistICAgICAgIiAgbW92cSAoJTEsJSVyY3gsMiksICUlbW0wXG4iCistICAgICAgIiAgbW92cSAoJTIsJSVyY3gsMiksICUlbW0xXG4iCisrICAgICAgIiAgbW92cSAoJXExLCUlcmN4LDIpLCAlJW1tMFxuIgorKyAgICAgICIgIG1vdnEgKCVxMiwlJXJjeCwyKSwgJSVtbTFcbiIKKyAgICAgICAiICBtb3ZxICUlbW0wLCAlJW1tMlxuIgorICAgICAgICIgIHB1bnBja2h3ZCAlJW1tMSwgJSVtbTBcbiIKKyAgICAgICAiICBwdW5wY2tsd2QgJSVtbTEsICUlbW0yXG4iCistICAgICAgIiAgbW92cSAlJW1tMiwgKCUwLCUlcmN4LDQpXG4iCistICAgICAgIiAgbW92cSAlJW1tMCwgOCglMCwlJXJjeCw0KVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTIsICglcTAsJSVyY3gsNClcbiIKKysgICAgICAiICBtb3ZxICUlbW0wLCA4KCVxMCwlJXJjeCw0KVxuIgorICAgICAgICIgIGFkZCAkNCwgJSVyY3hcbiIKKyAgICAgICAiICBjbXAgJTMsICUlZWN4XG4iCisgICAgICAgIiAgamwgMWJcbiIKK0BAIC0yODUsMTIgKzI4NSwxMiBAQCBsaWZ0X2FkZF9zaGlmdDFfbW14IChpbnQxNl90ICpkLCBpbnQxNl90CisgICBhc20gdm9sYXRpbGUgKCJcbiIKKyAgICAgICAiICB4b3IgJSVyY3gsICUlcmN4XG4iCisgICAgICAgIjE6XG4iCistICAgICAgIiAgbW92cSAoJTIsJSVyY3gsMiksICUlbW0xXG4iCistICAgICAgIiAgbW92cSAoJTMsJSVyY3gsMiksICUlbW0yXG4iCisrICAgICAgIiAgbW92cSAoJXEyLCUlcmN4LDIpLCAlJW1tMVxuIgorKyAgICAgICIgIG1vdnEgKCVxMywlJXJjeCwyKSwgJSVtbTJcbiIKKyAgICAgICAiICBwYWRkdyAlJW1tMiwgJSVtbTFcbiIKKyAgICAgICAiICBwc3JhdyAkMSwgJSVtbTFcbiIKKy0gICAgICAiICBwYWRkdyAoJTEsJSVyY3gsMiksICUlbW0xXG4iCistICAgICAgIiAgbW92cSAlJW1tMSwgKCUwLCUlcmN4LDIpXG4iCisrICAgICAgIiAgcGFkZHcgKCVxMSwlJXJjeCwyKSwgJSVtbTFcbiIKKysgICAgICAiICBtb3ZxICUlbW0xLCAoJXEwLCUlcmN4LDIpXG4iCisgICAgICAgIiAgYWRkICQ0LCAlJXJjeFxuIgorICAgICAgICIgIGNtcCAlNCwgJSVlY3hcbiIKKyAgICAgICAiICBqbCAxYlxuIgorQEAgLTMxNywxMyArMzE3LDEzIEBAIGxpZnRfc3ViX3NoaWZ0MV9tbXggKGludDE2X3QgKmQsIGludDE2X3QKKyAgIGFzbSB2b2xhdGlsZSAoIlxuIgorICAgICAgICIgIHhvciAlJXJjeCwgJSVyY3hcbiIKKyAgICAgICAiMTpcbiIKKy0gICAgICAiICBtb3ZxICglMiwlJXJjeCwyKSwgJSVtbTFcbiIKKy0gICAgICAiICBtb3ZxICglMywlJXJjeCwyKSwgJSVtbTJcbiIKKy0gICAgICAiICBtb3ZxICglMSwlJXJjeCwyKSwgJSVtbTBcbiIKKysgICAgICAiICBtb3ZxICglcTIsJSVyY3gsMiksICUlbW0xXG4iCisrICAgICAgIiAgbW92cSAoJXEzLCUlcmN4LDIpLCAlJW1tMlxuIgorKyAgICAgICIgIG1vdnEgKCVxMSwlJXJjeCwyKSwgJSVtbTBcbiIKKyAgICAgICAiICBwYWRkdyAlJW1tMiwgJSVtbTFcbiIKKyAgICAgICAiICBwc3JhdyAkMSwgJSVtbTFcbiIKKyAgICAgICAiICBwc3VidyAlJW1tMSwgJSVtbTBcbiIKKy0gICAgICAiICBtb3ZxICUlbW0wLCAoJTAsJSVyY3gsMilcbiIKKysgICAgICAiICBtb3ZxICUlbW0wLCAoJXEwLCUlcmN4LDIpXG4iCisgICAgICAgIiAgYWRkICQ0LCAlJXJjeFxuIgorICAgICAgICIgIGNtcCAlNCwgJSVlY3hcbiIKKyAgICAgICAiICBqbCAxYlxuIgorQEAgLTM1MCwxMiArMzUwLDEyIEBAIGxpZnRfYWRkX3NoaWZ0Ml9tbXggKGludDE2X3QgKmQsIGludDE2X3QKKyAgIGFzbSB2b2xhdGlsZSAoIlxuIgorICAgICAgICIgIHhvciAlJXJjeCwgJSVyY3hcbiIKKyAgICAgICAiMTpcbiIKKy0gICAgICAiICBtb3ZxICglMiwlJXJjeCwyKSwgJSVtbTFcbiIKKy0gICAgICAiICBtb3ZxICglMywlJXJjeCwyKSwgJSVtbTJcbiIKKysgICAgICAiICBtb3ZxICglcTIsJSVyY3gsMiksICUlbW0xXG4iCisrICAgICAgIiAgbW92cSAoJXEzLCUlcmN4LDIpLCAlJW1tMlxuIgorICAgICAgICIgIHBhZGR3ICUlbW0yLCAlJW1tMVxuIgorICAgICAgICIgIHBzcmF3ICQyLCAlJW1tMVxuIgorLSAgICAgICIgIHBhZGR3ICglMSwlJXJjeCwyKSwgJSVtbTFcbiIKKy0gICAgICAiICBtb3ZxICUlbW0xLCAoJTAsJSVyY3gsMilcbiIKKysgICAgICAiICBwYWRkdyAoJXExLCUlcmN4LDIpLCAlJW1tMVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTEsICglcTAsJSVyY3gsMilcbiIKKyAgICAgICAiICBhZGQgJDQsICUlcmN4XG4iCisgICAgICAgIiAgY21wICU0LCAlJWVjeFxuIgorICAgICAgICIgIGpsIDFiXG4iCitAQCAtMzgyLDEzICszODIsMTMgQEAgbGlmdF9zdWJfc2hpZnQyX21teCAoaW50MTZfdCAqZCwgaW50MTZfdAorICAgYXNtIHZvbGF0aWxlICgiXG4iCisgICAgICAgIiAgeG9yICUlcmN4LCAlJXJjeFxuIgorICAgICAgICIxOlxuIgorLSAgICAgICIgIG1vdnEgKCUyLCUlcmN4LDIpLCAlJW1tMVxuIgorLSAgICAgICIgIG1vdnEgKCUzLCUlcmN4LDIpLCAlJW1tMlxuIgorLSAgICAgICIgIG1vdnEgKCUxLCUlcmN4LDIpLCAlJW1tMFxuIgorKyAgICAgICIgIG1vdnEgKCVxMiwlJXJjeCwyKSwgJSVtbTFcbiIKKysgICAgICAiICBtb3ZxICglcTMsJSVyY3gsMiksICUlbW0yXG4iCisrICAgICAgIiAgbW92cSAoJXExLCUlcmN4LDIpLCAlJW1tMFxuIgorICAgICAgICIgIHBhZGR3ICUlbW0yLCAlJW1tMVxuIgorICAgICAgICIgIHBzcmF3ICQyLCAlJW1tMVxuIgorICAgICAgICIgIHBzdWJ3ICUlbW0xLCAlJW1tMFxuIgorLSAgICAgICIgIG1vdnEgJSVtbTAsICglMCwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTAsICglcTAsJSVyY3gsMilcbiIKKyAgICAgICAiICBhZGQgJDQsICUlcmN4XG4iCisgICAgICAgIiAgY21wICU0LCAlJWVjeFxuIgorICAgICAgICIgIGpsIDFiXG4iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3L25vLXRlc3RzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsLTAuMy4xNy9uby10ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTJkNDQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsLTAuMy4xNy9uby10ZXN0cy5wYXRjaApAQCAtMCwwICsxLDI0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworLS0tIGxpYm9pbC0wLjMuOS9saWJvaWwvbGlib2lsZnVuY3Rpb24uYy5vbGQJMjAwNi0wOS0xOCAxMzowMzoyMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJvaWwtMC4zLjkvbGlib2lsL2xpYm9pbGZ1bmN0aW9uLmMJMjAwNi0wOS0xOCAxMzowNDoxMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zNDUsNyArMzQ1LDkgQEAKKyAgICAgcmV0dXJuOworICAgfQorIAorLSAgdGVzdCA9IG9pbF90ZXN0X25ldyAoa2xhc3MpOworKyAga2xhc3MtPmNob3Nlbl9pbXBsID0ga2xhc3MtPnJlZmVyZW5jZV9pbXBsOworKyAga2xhc3MtPmZ1bmMgPSBrbGFzcy0+cmVmZXJlbmNlX2ltcGwtPmZ1bmM7CisrLyogIHRlc3QgPSBvaWxfdGVzdF9uZXcgKGtsYXNzKTsKKyAgIGlmICh0ZXN0ID09IE5VTEwpIHsKKyAgICAgT0lMX0VSUk9SICgiZmFpbGVkIHRvIHRlc3QgZnVuY3Rpb24gY2xhc3MgJXMiLCBrbGFzcy0+bmFtZSk7CisgICAgIHJldHVybjsKK0BAIC0zODUsNyArMzg3LDcgQEAKKyAgIGtsYXNzLT5jaG9zZW5faW1wbCA9IG1pbl9pbXBsOworICAga2xhc3MtPmZ1bmMgPSBtaW5faW1wbC0+ZnVuYzsKKyAKKy0gIG9pbF90ZXN0X2ZyZWUgKHRlc3QpOworKyAgb2lsX3Rlc3RfZnJlZSAodGVzdCk7Ki8KKyB9CisgCisgc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbF8wLjMuMTcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWxfMC4zLjE3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYjc3ODUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWxfMC4zLjE3LmJiCkBAIC0wLDAgKzEsMjcgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBvZiBzaW1wbGUgZnVuY3Rpb25zIG9wdGltaXplZCBmb3IgdmFyaW91cyBDUFVzIgorSE9NRVBBR0UgPSAiaHR0cDovL2xpYm9pbC5mcmVlZGVza3RvcC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnLyIKKworTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hZDgwNzgwZDljNTIwNWQ2MzQ4MWEwMTg0ZTE5OWExNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJvaWwvbGlib2lsLmg7ZW5kbGluZT0yODttZDU9OTVjNzk0YTY2Yjg4ODAwZDk0OWZlZDE3ZTQzN2Q5ZmIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlib2lsL2xpYm9pbGNwdS5jO2VuZGxpbmU9Mjg7bWQ1PTg5ZGE2OWE2MWQ4OGVlZGNiYTA2NmY0MjM1M2ZiNzVhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2V4YW1wbGVzL2V4YW1wbGUxLmM7ZW5kbGluZT0yOTttZDU9OWQ0ZGFkOWZjYmJkZjA0NDFlZTA2M2Y4YWY1MTcwYzkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHN1aXRlL3RyYW5zLmM7ZW5kbGluZT0yOTttZDU9MzgwZWNkNDMxMjFmZTNkY2MwZDhkN2U1OTg0ZjI4M2QiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAiCitQUiA9ICJyNSIKKworU1JDX1VSSSA9ICJodHRwOi8vbGlib2lsLmZyZWVkZXNrdG9wLm9yZy9kb3dubG9hZC8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL25vLXRlc3RzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC11bmFsaWduZWQtd2hpdGVsaXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWVuYWJsZS12ZnAtZmxhZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWJvaWxfZml4X2Zvcl94MzIucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ3ZGM3MzRmODJmYWViMjk2NGQ5Nzc3MWNmZDJlNzAxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjEwNWYwMjA3OWIwYjUwMDM0Yzc1OWRiMzRiNDczZWNiNTcwNGZmYTIwYTU0ODZiNjBhOGI3Njk4MTI4YmZjNjkiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL01ha2VmaWxlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA4ZDgwNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL01ha2VmaWxlCkBAIC0wLDAgKzEsMTgzIEBACitURVNUUyA9IHBjcmVfc3RyaW5ncGllY2VfdW5pdHRlc3QgUnVuVGVzdCBSdW5HcmVwVGVzdAorc3ViZGlyID0gLgorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fdHR5X2NvbG9yc19kdW1teSA9IFwKKyAgbWduPSByZWQ9IGdybj0gbGduPSBibHU9IGJyZz0gc3RkPTsgXAorICBhbV9fY29sb3JfdGVzdHM9bm8KK2FtX190dHlfY29sb3JzID0geyBcCisgICQoYW1fX3R0eV9jb2xvcnNfZHVtbXkpOyBcCisgIGlmIHRlc3QgIlgkKEFNX0NPTE9SX1RFU1RTKSIgPSBYbm87IHRoZW4gXAorICAgIGFtX19jb2xvcl90ZXN0cz1ubzsgXAorICBlbGlmIHRlc3QgIlgkKEFNX0NPTE9SX1RFU1RTKSIgPSBYYWx3YXlzOyB0aGVuIFwKKyAgICBhbV9fY29sb3JfdGVzdHM9eWVzOyBcCisgIGVsaWYgdGVzdCAiWCQkVEVSTSIgIT0gWGR1bWIgJiYgeyB0ZXN0IC10IDE7IH0gMj4vZGV2L251bGw7IHRoZW4gXAorICAgIGFtX19jb2xvcl90ZXN0cz15ZXM7IFwKKyAgZmk7IFwKKyAgaWYgdGVzdCAkJGFtX19jb2xvcl90ZXN0cyA9IHllczsgdGhlbiBcCisgICAgcmVkPScbWzA7MzFtJzsgXAorICAgIGdybj0nG1swOzMybSc7IFwKKyAgICBsZ249JxtbMTszMm0nOyBcCisgICAgYmx1PScbWzE7MzRtJzsgXAorICAgIG1nbj0nG1swOzM1bSc7IFwKKyAgICBicmc9JxtbMW0nOyBcCisgICAgc3RkPScbW20nOyBcCisgIGZpOyBcCit9CithbV9fcnN0X3RpdGxlID0geyBzZWQgJ3MvLiovICAgJiAgIC87aDtzLy4vPS9nO3A7eDtzLyAqJCQvLztwO2cnICYmIGVjaG87IH0KK2FtX19zaF9lX3NldHVwID0gY2FzZSAkJC0gaW4gKmUqKSBzZXQgK2U7OyBlc2FjCithbV9fY29tbW9uX2RyaXZlcl9mbGFncyA9IFwKKyAgLS1jb2xvci10ZXN0cyAiJCRhbV9fY29sb3JfdGVzdHMiIFwKKyAgLS1lbmFibGUtaGFyZC1lcnJvcnMgIiQkYW1fX2VuYWJsZV9oYXJkX2Vycm9ycyIgXAorICAtLWV4cGVjdC1mYWlsdXJlICIkJGFtX19leHBlY3RfZmFpbHVyZSIKK2FtX19jaGVja19wcmUgPSBcCiskKGFtX19zaF9lX3NldHVwKTsgXAorJChhbV9fdnBhdGhfYWRqX3NldHVwKSAkKGFtX192cGF0aF9hZGopIFwKKyQoYW1fX3R0eV9jb2xvcnMpOyBcCitzcmNkaXI9JChzcmNkaXIpOyBleHBvcnQgc3JjZGlyOyBcCitjYXNlICIkQCIgaW4gXAorICAqLyopIGFtX19vZGlyPWBlY2hvICIuLyRAIiB8IHNlZCAnc3wvW14vXSokJHx8J2A7OyBcCisgICAgKikgYW1fX29kaXI9Ljs7IFwKK2VzYWM7IFwKK3Rlc3QgIngkJGFtX19vZGlyIiA9IHgiLiIgfHwgdGVzdCAtZCAiJCRhbV9fb2RpciIgXAorICB8fCAkKE1LRElSX1ApICIkJGFtX19vZGlyIiB8fCBleGl0ICQkPzsgXAoraWYgdGVzdCAtZiAiLi8kJGYiOyB0aGVuIGRpcj0uLzsgXAorZWxpZiB0ZXN0IC1mICIkJGYiOyB0aGVuIGRpcj07IFwKK2Vsc2UgZGlyPSIkKHNyY2RpcikvIjsgZmk7IFwKK3RzdD0kJGRpciQkZjsgbG9nPSckQCc7IFwKK2lmIHRlc3QgLW4gJyQoRElTQUJMRV9IQVJEX0VSUk9SUyknOyB0aGVuIFwKKyAgYW1fX2VuYWJsZV9oYXJkX2Vycm9ycz1ubzsgXAorZWxzZSBcCisgIGFtX19lbmFibGVfaGFyZF9lcnJvcnM9eWVzOyBcCitmaTsKK2FtX19zZXRfVEVTVFNfYmFzZXMgPSBcCisgIGJhc2VzPSckKFRFU1RfTE9HUyknOyBcCisgIGJhc2VzPWBmb3IgaSBpbiAkJGJhc2VzOyBkbyBlY2hvICQkaTsgZG9uZSB8IHNlZCAncy9cLmxvZyQkLy8nYDsgXAorICBiYXNlcz1gZWNobyAkJGJhc2VzYAorUkVDSEVDS19MT0dTID0gJChURVNUX0xPR1MpCitURVNUX1NVSVRFX0xPRyA9IHRlc3Qtc3VpdGUubG9nCitURVNUX0VYVEVOU0lPTlMgPSAgLnRlc3QKK0xPR19EUklWRVIgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL3Rlc3QtZHJpdmVyCithbV9fdGVzdF9sb2dzMSA9ICQoVEVTVFM6PS5sb2cpCithbV9fdGVzdF9sb2dzMiA9ICQoYW1fX3Rlc3RfbG9nczE6LmxvZz0ubG9nKQorVEVTVF9MT0dTID0gJChhbV9fdGVzdF9sb2dzMjoudGVzdC5sb2c9LmxvZykKK01LRElSX1AgPSAvYmluL21rZGlyIC1wCitQQUNLQUdFX1NUUklORyA9IFBDUkUgOC4zNgorU0hFTEwgPSAvYmluL3NoCitzcmNkaXIgPSAuCit0b3Bfc3JjZGlyID0gLgorJChURVNUX1NVSVRFX0xPRyk6ICQoVEVTVF9MT0dTKQorCUAkKGFtX19zZXRfVEVTVFNfYmFzZXMpOyBcCisJYW1fX2Zfb2sgKCkgeyB0ZXN0IC1mICIkJDEiICYmIHRlc3QgLXIgIiQkMSI7IH07IFwKKwlyZWRvX2Jhc2VzPWBmb3IgaSBpbiAkJGJhc2VzOyBkbyBcCisJICAgICAgICAgICAgICBhbV9fZl9vayAkJGkudHJzICYmIGFtX19mX29rICQkaS5sb2cgfHwgZWNobyAkJGk7IFwKKwkgICAgICAgICAgICBkb25lYDsgXAorCXN0PTA7ICBcCisJZXJybXNnPSJmYXRhbDogbWFraW5nICQoVEVTVF9TVUlURV9MT0cpOiBmYWlsZWQgdG8gY3JlYXRlIjsgXAorCWZvciBpIGluICQkcmVkb19iYXNlczsgZG8gXAorCSAgdGVzdCAtZiAkJGkudHJzICYmIHRlc3QgLXIgJCRpLnRycyBcCisJICAgIHx8IHsgZWNobyAiJCRlcnJtc2cgJCRpLnRycyIgPiYyOyBzdD0xOyB9OyBcCisJICB0ZXN0IC1mICQkaS5sb2cgJiYgdGVzdCAtciAkJGkubG9nIFwKKwkgICAgfHwgeyBlY2hvICIkJGVycm1zZyAkJGkubG9nIiA+JjI7IHN0PTE7IH07IFwKKwlkb25lOyBcCisJdGVzdCAkJHN0IC1lcSAwIHx8IGV4aXQgMTsKKwlAJChhbV9fc2hfZV9zZXR1cCk7ICQoYW1fX3R0eV9jb2xvcnMpOyAkKGFtX19zZXRfVEVTVFNfYmFzZXMpOyBcCisJd3M9J1sgCV0nOyBcCisJcmVzdWx0cz1gZm9yIGIgaW4gJCRiYXNlczsgZG8gZWNobyAkJGIudHJzOyBkb25lYDsgXAorCXRlc3QgLW4gIiQkcmVzdWx0cyIgfHwgcmVzdWx0cz0vZGV2L251bGw7IFwKKwlhbGw9YCAgZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiIgICAgICAgICAgICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCXBhc3M9YCBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypQQVNTIiAgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJZmFpbD1gIGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKkZBSUwiICAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwlza2lwPWAgZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqU0tJUCIgICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCXhmYWlsPWBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypYRkFJTCIgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJeHBhc3M9YGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKlhQQVNTIiAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwllcnJvcj1gZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqRVJST1IiICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCWlmIHRlc3QgYGV4cHIgJCRmYWlsICsgJCR4cGFzcyArICQkZXJyb3JgIC1lcSAwOyB0aGVuIFwKKwkgIHN1Y2Nlc3M9dHJ1ZTsgXAorCWVsc2UgXAorCSAgc3VjY2Vzcz1mYWxzZTsgXAorCWZpOyBcCisJYnI9Jz09PT09PT09PT09PT09PT09PT0nOyBicj0kJGJyJCRiciQkYnIkJGJyOyBcCisJcmVzdWx0X2NvdW50ICgpIFwKKwl7IFwKKwkgICAgaWYgdGVzdCB4IiQkMSIgPSB4Ii0tbWF5YmUtY29sb3IiOyB0aGVuIFwKKwkgICAgICBtYXliZV9jb2xvcml6ZT15ZXM7IFwKKwkgICAgZWxpZiB0ZXN0IHgiJCQxIiA9IHgiLS1uby1jb2xvciI7IHRoZW4gXAorCSAgICAgIG1heWJlX2NvbG9yaXplPW5vOyBcCisJICAgIGVsc2UgXAorCSAgICAgIGVjaG8gIiRAOiBpbnZhbGlkICdyZXN1bHRfY291bnQnIHVzYWdlIiA+JjI7IGV4aXQgNDsgXAorCSAgICBmaTsgXAorCSAgICBzaGlmdDsgXAorCSAgICBkZXNjPSQkMSBjb3VudD0kJDI7IFwKKwkgICAgaWYgdGVzdCAkJG1heWJlX2NvbG9yaXplID0geWVzICYmIHRlc3QgJCRjb3VudCAtZ3QgMDsgdGhlbiBcCisJICAgICAgY29sb3Jfc3RhcnQ9JCQzIGNvbG9yX2VuZD0kJHN0ZDsgXAorCSAgICBlbHNlIFwKKwkgICAgICBjb2xvcl9zdGFydD0gY29sb3JfZW5kPTsgXAorCSAgICBmaTsgXAorCSAgICBlY2hvICIkJHtjb2xvcl9zdGFydH0jICQkZGVzYyAkJGNvdW50JCR7Y29sb3JfZW5kfSI7IFwKKwl9OyBcCisJY3JlYXRlX3Rlc3RzdWl0ZV9yZXBvcnQgKCkgXAorCXsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiVE9UQUw6IiAkJGFsbCAgICIkJGJyZyI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIlBBU1M6ICIgJCRwYXNzICAiJCRncm4iOyBcCisJICByZXN1bHRfY291bnQgJCQxICJTS0lQOiAiICQkc2tpcCAgIiQkYmx1IjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiWEZBSUw6IiAkJHhmYWlsICIkJGxnbiI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIkZBSUw6ICIgJCRmYWlsICAiJCRyZWQiOyBcCisJICByZXN1bHRfY291bnQgJCQxICJYUEFTUzoiICQkeHBhc3MgIiQkcmVkIjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiRVJST1I6IiAkJGVycm9yICIkJG1nbiI7IFwKKwl9OyBcCisJewkJCQkJCQkJXAorCSAgZWNobyAiJChQQUNLQUdFX1NUUklORyk6ICQoc3ViZGlyKS8kKFRFU1RfU1VJVEVfTE9HKSIgfAlcCisJICAgICQoYW1fX3JzdF90aXRsZSk7CQkJCQkJXAorCSAgY3JlYXRlX3Rlc3RzdWl0ZV9yZXBvcnQgLS1uby1jb2xvcjsJCQkJXAorCSAgZWNobzsJCQkJCQkJCVwKKwkgIGVjaG8gIi4uIGNvbnRlbnRzOjogOmRlcHRoOiAyIjsJCQkJXAorCSAgZWNobzsJCQkJCQkJCVwKKwkgIGZvciBiIGluICQkYmFzZXM7IGRvIGVjaG8gJCRiOyBkb25lOwkJCQlcCisJfSA+JChURVNUX1NVSVRFX0xPRykudG1wIHx8IGV4aXQgMTsJCQkJXAorCW12ICQoVEVTVF9TVUlURV9MT0cpLnRtcCAkKFRFU1RfU1VJVEVfTE9HKTsJCQlcCisJaWYgJCRzdWNjZXNzOyB0aGVuCQkJCQkJXAorCSAgY29sPSIkJGdybiI7CQkJCQkJCVwKKwkgZWxzZQkJCQkJCQkJXAorCSAgY29sPSIkJHJlZCI7CQkJCQkJCVwKKwkgIHRlc3QgeCIkJFZFUkJPU0UiID0geCB8fCBjYXQgJChURVNUX1NVSVRFX0xPRyk7CQlcCisJZmk7CQkJCQkJCQlcCisJZWNobyAiJCR7Y29sfSQkYnIkJHtzdGR9IjsgCQkJCQlcCisJZWNobyAiJCR7Y29sfVRlc3RzdWl0ZSBzdW1tYXJ5IGZvciAkKFBBQ0tBR0VfU1RSSU5HKSQke3N0ZH0iOwlcCisJZWNobyAiJCR7Y29sfSQkYnIkJHtzdGR9IjsgCQkJCQlcCisJY3JlYXRlX3Rlc3RzdWl0ZV9yZXBvcnQgLS1tYXliZS1jb2xvcjsJCQkJXAorCWVjaG8gIiQkY29sJCRiciQkc3RkIjsJCQkJCQlcCisJaWYgJCRzdWNjZXNzOyB0aGVuIDo7IGVsc2UJCQkJCVwKKwkgIGVjaG8gIiQke2NvbH1TZWUgJChzdWJkaXIpLyQoVEVTVF9TVUlURV9MT0cpJCR7c3RkfSI7CQlcCisJICBlY2hvICIkJGNvbCQkYnIkJHN0ZCI7CQkJCQlcCisJZmk7CQkJCQkJCQlcCisJJCRzdWNjZXNzIHx8IGV4aXQgMQorY2hlY2stVEVTVFM6CisJQGxpc3Q9JyQoUkVDSEVDS19MT0dTKSc7ICAgICAgICAgICB0ZXN0IC16ICIkJGxpc3QiIHx8IHJtIC1mICQkbGlzdAorCUB0ZXN0IC16ICIkKFRFU1RfU1VJVEVfTE9HKSIgfHwgcm0gLWYgJChURVNUX1NVSVRFX0xPRykKKwlAc2V0ICtlOyAkKGFtX19zZXRfVEVTVFNfYmFzZXMpOyBcCisJbG9nX2xpc3Q9YGZvciBpIGluICQkYmFzZXM7IGRvIGVjaG8gJCRpLmxvZzsgZG9uZWA7IFwKKwlsb2dfbGlzdD1gZWNobyAkJGxvZ19saXN0YDsgXAorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQoVEVTVF9TVUlURV9MT0cpIFRFU1RfTE9HUz0iJCRsb2dfbGlzdCI7IFwKKwlleGl0ICQkPzsKK3BjcmVfc3RyaW5ncGllY2VfdW5pdHRlc3QubG9nOiBwY3JlX3N0cmluZ3BpZWNlX3VuaXR0ZXN0JChFWEVFWFQpCisJQHA9J3BjcmVfc3RyaW5ncGllY2VfdW5pdHRlc3QkKEVYRUVYVCknOyBcCisJYj0ncGNyZV9zdHJpbmdwaWVjZV91bml0dGVzdCc7IFwKKwkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAorCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAorCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpIC0tICIkJHRzdCIKK1J1blRlc3QubG9nOiBSdW5UZXN0CisJQHA9J1J1blRlc3QnOyBcCisJYj0nUnVuVGVzdCc7IFwKKwkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAorCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAorCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpIC0tICIkJHRzdCIKK1J1bkdyZXBUZXN0LmxvZzogUnVuR3JlcFRlc3QKKwlAcD0nUnVuR3JlcFRlc3QnOyBcCisJYj0nUnVuR3JlcFRlc3QnOyBcCisJJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKKwktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKKwkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAtLSAiJCR0c3QiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZS9maXgtcGNyZS1uYW1lLWNvbGxpc2lvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL2ZpeC1wY3JlLW5hbWUtY29sbGlzaW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YjQ0ZjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZS9maXgtcGNyZS1uYW1lLWNvbGxpc2lvbi5wYXRjaApAQCAtMCwwICsxLDQxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2RlYmlhbiBwYXRjaF0KKworVGhpcyBwYXRjaCBhZGRyZXNzIGEgbmFtZXNwYWNlIGNvbGxpc2lvbiB3aXRoIGxpYmMuCisKK0FsdGhvdWdoIHRoZXJlIGlzIG5vICIjaW5jbHVkZSA8cmVnZXguaD4iIGluIHRoZSBzb3VyY2UgZmlsZSwgYXQKK3J1bnRpbWUsIGl0J3MgdW5pbnRlbnRpb25hbGx5IGxpbmtlZCB0byB0aGUgbGliYyB2ZXJzaW9uLCB0aGUgcmVnY29tcCBvZgorbGliYyBpcyBjYWxsZWQgaW5zdGVhZCB0aGUgcGNyZSBvbmUgdXNpbmcgcGNyZSdzIGRhdGEgc3RydWN0dXJlLi4uCit0aGF0IGxvb2tzIGxpa2UgYSBkaXNhc3Rlci4KKworQ2FuIHBhdGNoIGlzIGZyb20gRGViaWFuIChhbmQgVWJ1bnR1IDExLjA0YWxwaGEgaGFzIGl0IGFsc28pLgorCitbc2d3OiBhZGRlZCBwYXRjaCBjb21tZW50XQorU2lnbmVkLW9mZi1ieTogUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKKy0tLSBhL3BjcmVwb3NpeC5oCTIwMTAtMDUtMTcgMDA6MTc6MjMuMDAwMDAwMDAwICswODAwCisrKysgYi9wY3JlcG9zaXguaAkyMDA5LTAxLTE1IDA0OjMyOjE3LjAwMDAwMDAwMCArMDgwMAorQEAgLTEzMywxNCArMTMwLDE5IEBACisgCisgLyogVGhlIGZ1bmN0aW9ucyAqLworIAorLVBDUkVQT1NJWF9FWFBfREVDTCBpbnQgcmVnY29tcChyZWdleF90ICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKy1QQ1JFUE9TSVhfRVhQX0RFQ0wgaW50IHJlZ2V4ZWMoY29uc3QgcmVnZXhfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCwKKytQQ1JFUE9TSVhfRVhQX0RFQ0wgaW50IHBjcmVwb3NpeF9yZWdjb21wKHJlZ2V4X3QgKiwgY29uc3QgY2hhciAqLCBpbnQpOworK1BDUkVQT1NJWF9FWFBfREVDTCBpbnQgcGNyZXBvc2l4X3JlZ2V4ZWMoY29uc3QgcmVnZXhfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICAgICByZWdtYXRjaF90ICosIGludCk7CistUENSRVBPU0lYX0VYUF9ERUNMIHNpemVfdCByZWdlcnJvcihpbnQsIGNvbnN0IHJlZ2V4X3QgKiwgY2hhciAqLCBzaXplX3QpOworLVBDUkVQT1NJWF9FWFBfREVDTCB2b2lkIHJlZ2ZyZWUocmVnZXhfdCAqKTsKKytQQ1JFUE9TSVhfRVhQX0RFQ0wgc2l6ZV90IHBjcmVwb3NpeF9yZWdlcnJvcihpbnQsIGNvbnN0IHJlZ2V4X3QgKiwgY2hhciAqLCBzaXplX3QpOworK1BDUkVQT1NJWF9FWFBfREVDTCB2b2lkIHBjcmVwb3NpeF9yZWdmcmVlKHJlZ2V4X3QgKik7CisgCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgfSAgIC8qIGV4dGVybiAiQyIgKi8KKyAjZW5kaWYKKyAKKysjZGVmaW5lIHJlZ2NvbXAgcGNyZXBvc2l4X3JlZ2NvbXAKKysjZGVmaW5lIHJlZ2V4ZWMgcGNyZXBvc2l4X3JlZ2V4ZWMKKysjZGVmaW5lIHJlZ2Vycm9yIHBjcmVwb3NpeF9yZWdlcnJvcgorKyNkZWZpbmUgcmVnZnJlZSBwY3JlcG9zaXhfcmVnZnJlZQorKworICNlbmRpZiAvKiBFbmQgb2YgcGNyZXBvc2l4LmggKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL3BjcmUtY3Jvc3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZS9wY3JlLWNyb3NzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzODgwZjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZS9wY3JlLWNyb3NzLnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gcGNyZS04LjMyLm9yaWcvTWFrZWZpbGUuYW0KKysrKyBwY3JlLTguMzIvTWFrZWZpbGUuYW0KK0BAIC0xOTcsOCArMTk3LDE4IEBAIGJpbl9TQ1JJUFRTID0gcGNyZS1jb25maWcKKyAKKytDQ19GT1JfQlVJTEQgPSBAQ0NfRk9SX0JVSUxEQAorK0NGTEFHU19GT1JfQlVJTEQgPSBAQ0ZMQUdTX0ZPUl9CVUlMREAKKytDQ0xEX0ZPUl9CVUlMRCA9IEBDQ0xEX0ZPUl9CVUlMREAKKytMREZMQUdTX0ZPUl9CVUlMRCA9IEBMREZMQUdTX0ZPUl9CVUlMREAKKysKKyBpZiBXSVRIX1JFQlVJTERfQ0hBUlRBQkxFUworIAorIG5vaW5zdF9QUk9HUkFNUyArPSBkZnRhYmxlcworIGRmdGFibGVzX1NPVVJDRVMgPSBkZnRhYmxlcy5jCisrZGZ0YWJsZXNfTElOSyA9ICQoQ0NMRF9GT1JfQlVJTEQpIC1vICRACisrZGZ0YWJsZXNfTERGTEFHUyA9ICQoTERGTEFHU19GT1JfQlVJTEQpCisrCisrZGZ0YWJsZXMubzogJChzcmNkaXIpL2RmdGFibGVzLmMKKysJJChDQ19GT1JfQlVJTEQpIC1jICQoQ0ZMQUdTX0ZPUl9CVUlMRCkgLW8gJEAgJChzcmNkaXIpL2RmdGFibGVzLmMKKyAKKyBwY3JlX2NoYXJ0YWJsZXMuYzogZGZ0YWJsZXMkKEVYRUVYVCkKKyAJLi9kZnRhYmxlcyQoRVhFRVhUKSAkQAorLS0tIHBjcmUtOC4zMi5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHBjcmUtOC4zMi9jb25maWd1cmUuYWMKK0BAIC03Miw2ICs3MiwyMiBAQCB0aGVuCisgICBmaQorIGZpCisgCisraWYgdGVzdCB4IiRjcm9zc19jb21waWxpbmciID0geHllczsgdGhlbgorKyAgICBDQ19GT1JfQlVJTEQ9IiR7Q0NfRk9SX0JVSUxELWdjY30iCisrICAgIENDTERfRk9SX0JVSUxEPSIke0NDTERfRk9SX0JVSUxELWdjY30iCisrICAgIENGTEFHU19GT1JfQlVJTEQ9IiR7Q0ZMQUdTX0ZPUl9CVUlMRH0iCisrICAgIExERkxBR1NfRk9SX0JVSUxEPSIke0xERkxBR1NfRk9SX0JVSUxEfSIKKytlbHNlCisrICAgIENDX0ZPUl9CVUlMRD0iJHtDQ19GT1JfQlVJTEQtXCQoQ0MpfSIKKysgICAgQ0NMRF9GT1JfQlVJTEQ9IiR7Q0NMRF9GT1JfQlVJTEQtXCQoQ0NMRCl9IgorKyAgICBDRkxBR1NfRk9SX0JVSUxEPSIke0NGTEFHU19GT1JfQlVJTEQtXCQoQ0ZMQUdTKX0iCisrICAgIExERkxBR1NfRk9SX0JVSUxEPSIke0xERkxBR1NfRk9SX0JVSUxELVwkKExERkxBR1MpfSIKKytmaQorK0FDX0FSR19WQVIoQ0NfRk9SX0JVSUxELCBbYnVpbGQgc3lzdGVtIEMgY29tcGlsZXJdKQorK0FDX0FSR19WQVIoQ0NMRF9GT1JfQlVJTEQsIFtidWlsZCBzeXN0ZW0gQyBsaW5rZXIgZnJvbnRlbmRdKQorK0FDX0FSR19WQVIoQ0ZMQUdTX0ZPUl9CVUlMRCwgW2J1aWxkIHN5c3RlbSBDIGNvbXBpbGVyIGFyZ3VtZW50c10pCisrQUNfQVJHX1ZBUihMREZMQUdTX0ZPUl9CVUlMRCwgW2J1aWxkIHN5c3RlbSBDIGxpbmtlciBmcm9udGVuZCBhcmd1bWVudHNdKQorKworICMgQUNfUFJPR19DWFggd2lsbCByZXR1cm4gImcrKyIgZXZlbiBpZiBubyBjKysgY29tcGlsZXIgaXMgaW5zdGFsbGVkLgorICMgQ2hlY2sgZm9yIHRoYXQgY2FzZSwgYW5kIGp1c3QgZGlzYWJsZSBjKysgY29kZSBpZiBnKysgZG9lc24ndCBydW4uCisgQUNfTEFOR19QVVNIKEMrKykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTBkNGExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKK21ha2UgY2hlY2stVEVTVFMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlXzguMzcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZV84LjM3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZmM5ZTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZV84LjM3LmJiCkBAIC0wLDAgKzEsNzMgQEAKK0RFU0NSSVBUSU9OID0gIlRoZSBQQ1JFIGxpYnJhcnkgaXMgYSBzZXQgb2YgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHJlZ3VsYXIgXAorZXhwcmVzc2lvbiBwYXR0ZXJuIG1hdGNoaW5nIHVzaW5nIHRoZSBzYW1lIHN5bnRheCBhbmQgc2VtYW50aWNzIGFzIFBlcmwgNS4gUENSRSBcCitoYXMgaXRzIG93biBuYXRpdmUgQVBJLCBhcyB3ZWxsIGFzIGEgc2V0IG9mIHdyYXBwZXIgZnVuY3Rpb25zIHRoYXQgY29ycmVzcG9uZCBcCit0byB0aGUgUE9TSVggcmVndWxhciBleHByZXNzaW9uIEFQSS4iCitTVU1NQVJZID0gIlBlcmwgQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5wY3JlLm9yZyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOQ0U7bWQ1PTdlNDkzNzgxNGFlZTE0NzU4YzFjOTViNTljODBjNDRkIgorU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcHJvamVjdC9wY3JlL3BjcmUvJHtQVn0vcGNyZS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3BjcmUtY3Jvc3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LXBjcmUtbmFtZS1jb2xsaXNpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL01ha2VmaWxlIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImVkOTFiZTI5MmNiMDFkMjFiYzdlNTI2ODE2YzI2OTgxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUxNjc5ZWE4MDA2Y2UzMTM3OWZiMDg2MGU0NmRkODY2NjVkODY0YjUwMjBmYzljZDE5ZTcxMjYwZWVmNDc4OWQiCisKK1MgPSAiJHtXT1JLRElSfS9wY3JlLSR7UFZ9IgorCitQUk9WSURFUyArPSAicGNyZSIKK0RFUEVORFMgKz0gImJ6aXAyIHpsaWIiCisKK1BBQ0tBR0VDT05GSUdbcGNyZXRlc3QtcmVhZGxpbmVdID0gIi0tZW5hYmxlLXBjcmV0ZXN0LWxpYnJlYWRsaW5lLC0tZGlzYWJsZS1wY3JldGVzdC1saWJyZWFkbGluZSxyZWFkbGluZSwiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vcGNyZS1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBwdGVzdAorCitFWFRSQV9PRUNPTkYgPSAiXAorICAgIC0tZW5hYmxlLW5ld2xpbmUtaXMtbGYgXAorICAgIC0tZW5hYmxlLXJlYnVpbGQtY2hhcnRhYmxlcyBcCisgICAgLS1lbmFibGUtdXRmOCBcCisgICAgLS13aXRoLWxpbmstc2l6ZT0yIFwKKyAgICAtLXdpdGgtbWF0Y2gtbGltaXQ9MTAwMDAwMDAgXAorIgorCisjIFNldCBMSU5LX1NJWkUgaW4gQlVJTERfQ0ZMQUdTIGdpdmVuIHRoYXQgdGhlIGF1dG90b29scyBiYmNsYXNzIHVzZSBpdCB0bworIyBzZXQgQ0ZMQUdTX0ZPUl9CVUlMRCwgcmVxdWlyZWQgZm9yIHRoZSBsaWJwY3JlIGJ1aWxkLgorQlVJTERfQ0ZMQUdTID0rICItRExJTktfU0laRT0yIC1JJHtCfSIKK0NGTEFHUyArPSAiLURfUkVFTlRSQU5UIgorQ1hYRkxBR1NfYXBwZW5kX3Bvd2VycGMgPSAiIC1sc3RkYysrIgorCitQQUNLQUdFUyA9KyAibGlicGNyZWNwcCBsaWJwY3JlcG9zaXggcGNyZWdyZXAgcGNyZWdyZXAtZG9jIHBjcmV0ZXN0IHBjcmV0ZXN0LWRvYyIKKworU1VNTUFSWV9saWJwY3JlY3BwID0gIiR7U1VNTUFSWX0gLSBDKysgd3JhcHBlciBmdW5jdGlvbnMiCitTVU1NQVJZX2xpYnBjcmVwb3NpeCA9ICIke1NVTU1BUll9IC0gQyB3cmFwcGVyIGZ1bmN0aW9ucyBiYXNlZCBvbiB0aGUgUE9TSVggcmVnZXggQVBJIgorU1VNTUFSWV9wY3JlZ3JlcCA9ICJncmVwIHV0aWxpdHkgdGhhdCB1c2VzIHBlcmwgNSBjb21wYXRpYmxlIHJlZ2V4ZXMiCitTVU1NQVJZX3BjcmVncmVwLWRvYyA9ICJncmVwIHV0aWxpdHkgdGhhdCB1c2VzIHBlcmwgNSBjb21wYXRpYmxlIHJlZ2V4ZXMgLSBkb2NzIgorU1VNTUFSWV9wY3JldGVzdCA9ICJwcm9ncmFtIGZvciB0ZXN0aW5nIFBlcmwtY29tYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMiCitTVU1NQVJZX3BjcmV0ZXN0LWRvYyA9ICJwcm9ncmFtIGZvciB0ZXN0aW5nIFBlcmwtY29tYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgLSBkb2NzIgorCitGSUxFU19saWJwY3JlY3BwID0gIiR7bGliZGlyfS9saWJwY3JlY3BwLnNvLioiCitGSUxFU19saWJwY3JlcG9zaXggPSAiJHtsaWJkaXJ9L2xpYnBjcmVwb3NpeC5zby4qIgorRklMRVNfcGNyZWdyZXAgPSAiJHtiaW5kaXJ9L3BjcmVncmVwIgorRklMRVNfcGNyZWdyZXAtZG9jID0gIiR7bWFuZGlyfS9tYW4xL3BjcmVncmVwLjEiCitGSUxFU19wY3JldGVzdCA9ICIke2JpbmRpcn0vcGNyZXRlc3QiCitGSUxFU19wY3JldGVzdC1kb2MgPSAiJHttYW5kaXJ9L21hbjEvcGNyZXRlc3QuMSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCXQ9JHtEfSR7UFRFU1RfUEFUSH0KKwljcCAke1dPUktESVJ9L01ha2VmaWxlICR0CisJY3AgLXIgJHtTfS90ZXN0ZGF0YSAkdAorCWZvciBpIGluIHBjcmVfc3RyaW5ncGllY2VfdW5pdHRlc3QgcGNyZWdyZXAgcGNyZXRlc3Q7IFwKKwkgIGRvIGNwICR7Qn0vLmxpYnMvJGkgJHQ7IFwKKwlkb25lCisJZm9yIGkgaW4gUnVuVGVzdCBSdW5HcmVwVGVzdCB0ZXN0LWRyaXZlcjsgXAorCSAgZG8gY3AgJHtTfS8kaSAkdDsgXAorCWRvbmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicHJveHkvbGlicHJveHkvMDAwMS10ZXN0LUluY2x1ZGUtc3lzLXNlbGVjdC5oLWZvci1zZWxlY3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnByb3h5L2xpYnByb3h5LzAwMDEtdGVzdC1JbmNsdWRlLXN5cy1zZWxlY3QuaC1mb3Itc2VsZWN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZTUyZjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnByb3h5L2xpYnByb3h5LzAwMDEtdGVzdC1JbmNsdWRlLXN5cy1zZWxlY3QuaC1mb3Itc2VsZWN0LnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gZjVmMmMyMjg5ZWIzNWViODA0YzFjMzVlNDZjYTQxYjU4ZTRjYWUwMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDYgQXByIDIwMTUgMTQ6MTM6NDkgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gdGVzdDogSW5jbHVkZSA8c3lzL3NlbGVjdC5oPiBmb3Igc2VsZWN0KCkKKworQXMgcGVyIHBvc2l4IHdlIG5lZWQgdG8gaW5jbHVkZSB0aGlzIGZpbGUgb3RoZXJ3aXNlIHdlIGVuZCB1cCB3aXRoIGVycm9ycyBsaWtlCisKKy9ob21lL2tyYWovd29yay9ibGVlZGluZy9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtbXVzbC93b3JrL21pcHMzMnIyLW9lLWxpbnV4LW11c2wvbGlicHJveHkvMC40LjExLXIwL2xpYnByb3h5LTAuNC4xMS9saWJwcm94eS90ZXN0L2dldC1wYWMtdGVzdC5jcHA6IEluIG1lbWJlciBmdW5jdGlvbiAnYm9vbCBUZXN0U2VydmVyOjpsb29wKCknOgorL2hvbWUva3Jhai93b3JrL2JsZWVkaW5nL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1tdXNsL3dvcmsvbWlwczMycjItb2UtbGludXgtbXVzbC9saWJwcm94eS8wLjQuMTEtcjAvbGlicHJveHktMC40LjExL2xpYnByb3h5L3Rlc3QvZ2V0LXBhYy10ZXN0LmNwcDo4MDo0OiBlcnJvcjogJ2ZkX3NldCcgd2FzIG5vdCBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlCisgICAgZmRfc2V0IGZkczsKKyAgICBeCisvaG9tZS9rcmFqL3dvcmsvYmxlZWRpbmcvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLW11c2wvd29yay9taXBzMzJyMi1vZS1saW51eC1tdXNsL2xpYnByb3h5LzAuNC4xMS1yMC9saWJwcm94eS0wLjQuMTEvbGlicHJveHkvdGVzdC9nZXQtcGFjLXRlc3QuY3BwOjg5OjE0OiBlcnJvcjogJ2Zkcycgd2FzIG5vdCBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlCisgICAgRkRfWkVSTyAoJmZkcyk7Cis8SklSQSBUSUNLRVQgIzE+LCA8SklSQSBUSUNLRVQgIzI+LCA8SklSQSBUSUNLRVQgI24+IDogPG9uZSBsaW5lIHN1bW1hcnkgb2YgY2hhbmdlPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYnByb3h5L3Rlc3QvZ2V0LXBhYy10ZXN0LmNwcCB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvbGlicHJveHkvdGVzdC9nZXQtcGFjLXRlc3QuY3BwIGIvbGlicHJveHkvdGVzdC9nZXQtcGFjLXRlc3QuY3BwCitpbmRleCBhNjFmYzRiLi5iZGE0NjQ2IDEwMDY0NAorLS0tIGEvbGlicHJveHkvdGVzdC9nZXQtcGFjLXRlc3QuY3BwCisrKysgYi9saWJwcm94eS90ZXN0L2dldC1wYWMtdGVzdC5jcHAKK0BAIC0zLDYgKzMsNyBAQAorICNpbmNsdWRlIDxzc3RyZWFtPgorICNpbmNsdWRlIDxzdHJpbmc+CisgCisrI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisgI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnByb3h5L2xpYnByb3h5XzAuNC4xMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicHJveHkvbGlicHJveHlfMC40LjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZDBiOWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnByb3h5L2xpYnByb3h5XzAuNC4xMS5iYgpAQCAtMCwwICsxLDM1IEBACitTVU1NQVJZID0gIkxpYnJhcnkgcHJvdmlkaW5nIGF1dG9tYXRpYyBwcm94eSBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQiCitIT01FUEFHRSA9ICJodHRwOi8vY29kZS5nb29nbGUuY29tL3AvbGlicHJveHkvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vY29kZS5nb29nbGUuY29tL3AvbGlicHJveHkvaXNzdWVzL2xpc3QiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3V0aWxzL3Byb3h5LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xODttZDU9NTUxNTJhMTAwNmQ3ZGFmYmVmMzJiYWY5YzMwYTk5YzAiCisKK0RFUEVORFMgPSAiZ2NvbmYgZ2xpYi0yLjAiCisKK1NSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2xpYnAvJHtCUE59LyR7QlBOfV8ke1BWfS5vcmlnLnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXRlc3QtSW5jbHVkZS1zeXMtc2VsZWN0LmgtZm9yLXNlbGVjdC5wYXRjaCBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjNjZDFhZTJhNGFiZWNmNDRiM2YyNGQ2NjM5ZDJjZDg0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImRjM2YzM2RlNTQxNjM3MThmODJiM2U3YzQ5NmE3ZGU5N2Y4ODYyNTc4NDE0YjhlY2FhZDNjYmZlNDgyMTg2NGIiCisKK2luaGVyaXQgY21ha2UgcGtnY29uZmlnCisKK0VYVFJBX09FQ01BS0UgPSAiLURXSVRIX1dFQktJVD1ubyAtRFdJVEhfR05PTUU9eWVzIC1EV0lUSF9LREU0PW5vIFwKKwkgICAgICAtRFdJVEhfUFlUSE9OPW5vIC1EV0lUSF9QRVJMPW5vIC1EV0lUSF9NT1pKUz1ubyAtRFdJVEhfTk09bm8gLURMSUJfSU5TVEFMTF9ESVI9JHtsaWJkaXJ9IC1ETElCRVhFQ19JTlNUQUxMX0RJUj0ke2xpYmV4ZWNkaXJ9IgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyR7QlBOfS8ke1BWfS9tb2R1bGVzIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9L2NtYWtlIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vJHtCUE59LyR7UFZ9L3BsdWdpbnMvLmRlYnVnLyAke2xpYmRpcn0vJHtCUE59LyR7UFZ9L21vZHVsZXMvLmRlYnVnLyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJZXhwb3J0IEhPU1RfU1lTPSR7SE9TVF9TWVN9CisJZXhwb3J0IEJVSUxEX1NZUz0ke0JVSUxEX1NZU30KK30KKworcHl0aG9uKCkgeworICAgIGlmIGluY29tcGF0aWJsZV9saWNlbnNlX2NvbnRhaW5zKCJHUEx2MyIsICJ4IiwgIiIsIGQpID09ICJ4IiBvciBiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIngxMSIsICJ4IiwgIiIsIGQpID09ICIiOgorICAgICAgICBkLnNldFZhcigiRVhUUkFfT0VDTUFLRSIsIGQuZ2V0VmFyKCJFWFRSQV9PRUNNQUtFIiwgRmFsc2UpLnJlcGxhY2UoIi1EV0lUSF9HTk9NRT15ZXMiLCAiLURXSVRIX0dOT01FPW5vIikpCisgICAgICAgIGQuc2V0VmFyKCJERVBFTkRTIiwgIiAiLmpvaW4oaSBmb3IgaSBpbiBkLmdldFZhcigiREVQRU5EUyIsIEZhbHNlKS5zcGxpdCgpIGlmIGkgIT0gImdjb25mIikpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnNvdXAvbGlic291cC0yLjRfMi41MC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJzb3VwL2xpYnNvdXAtMi40XzIuNTAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDRkYjMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJzb3VwL2xpYnNvdXAtMi40XzIuNTAuMC5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIkFuIEhUVFAgbGlicmFyeSBpbXBsZW1lbnRhdGlvbiBpbiBDIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbm9tZS5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCisKK0xJQ0VOU0UgPSAiTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWYzMGYwNzE2ZGZkZDBkOTFlYjQzOWViZWM1MjJlYzIiCisKK1NFQ1RJT04gPSAieDExL2dub21lL2xpYnMiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgZ251dGxzIGxpYnhtbDIgc3FsaXRlMyBpbnRsdG9vbC1uYXRpdmUiCisKKyMgbGlic291cC1nbm9tZSBpcyBlbnRpcmVseSBkZXByZWNhdGVkIGFuZCBqdXN0IHN0dWJzIGluIDIuNDIgb253YXJkcy4gIEVuYWJsZQorIyBieSBkZWZhdWx0IGJ1dCBsZXQgaXQgYmUgZWFzaWx5IGRpc2FibGVkLgorUEFDS0FHRUNPTkZJRyA/Pz0gImdub21lIgorUEFDS0FHRUNPTkZJR1tnbm9tZV0gPSAiLS13aXRoLWdub21lLC0td2l0aG91dC1nbm9tZSIKKworU0hSVF9WRVIgPSAiJHtAYmIuZGF0YS5nZXRWYXIoJ1BWJyxkLDEpLnNwbGl0KCcuJylbMF19LiR7QGJiLmRhdGEuZ2V0VmFyKCdQVicsZCwxKS5zcGxpdCgnLicpWzFdfSIKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9L2xpYnNvdXAvJHtTSFJUX1ZFUn0vbGlic291cC0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5YTg0ZDY2ZTFiN2NjZDNiZDM0MDU3NGIxMWVjY2MxNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxZTAxMzY1YWM0YWYzODE3MTg3ZWE4NDdmOWQzNTg4YzI3ZWVlMDFmYzUxOWE1YTdjYjIxMmJiNzhiMGY2NjdiIgorCitTID0gIiR7V09SS0RJUn0vbGlic291cC0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKKworIyBnbGliLW5ldHdvcmtpbmcgaXMgbmVlZGVkIGZvciBTU0wsIHByb3hpZXMsIGV0Yy4KK1JSRUNPTU1FTkRTXyR7UE59ID0gImdsaWItbmV0d29ya2luZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW5pc3RyaW5nL2xpYnVuaXN0cmluZy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bmlzdHJpbmcvbGlidW5pc3RyaW5nLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFlYWNiOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW5pc3RyaW5nL2xpYnVuaXN0cmluZy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGxpYnVuaXN0cmluZy0wLjkuNC9saWIvTWFrZWZpbGUuZ251bGliCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlidW5pc3RyaW5nLTAuOS40Lm9yaWcvbGliL01ha2VmaWxlLmdudWxpYgorKysrIGxpYnVuaXN0cmluZy0wLjkuNC9saWIvTWFrZWZpbGUuZ251bGliCitAQCAtMzgwLDcgKzM4MCw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVuaXN0cmluZy9saWJ1bmlzdHJpbmcvaWNvbnYtbTQtcmVtb3ZlLXRoZS10ZXN0LXRvLWNvbnZlcnQtZXVjLWpwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bmlzdHJpbmcvbGlidW5pc3RyaW5nL2ljb252LW00LXJlbW92ZS10aGUtdGVzdC10by1jb252ZXJ0LWV1Yy1qcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDQ4OTE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bmlzdHJpbmcvbGlidW5pc3RyaW5nL2ljb252LW00LXJlbW92ZS10aGUtdGVzdC10by1jb252ZXJ0LWV1Yy1qcC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tIDhkOTlhMzY4NjE1NjU2YTgzNWY1NTAyMzI2YWZkMzFjZWMyY2ViZmUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAxNiBTZXAgMjAxMyAxODoxNjoxMiArMDgwMAorU3ViamVjdDogW1BBVENIXSByZW1vdmUgdGhlIHRlc3QgdG8gY29udmVydCBldWMtanAKKworUmVtb3ZlIHRoZSB0ZXN0ICJUZXN0IGFnYWluc3QgSFAtVVggMTEuMTEgYnVnOgorTm8gY29udmVydGVyIGZyb20gRVVDLUpQIHRvIFVURi04IGlzIHByb3ZpZGVkIgorc2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydCBIUC1VWCBhbmQgaWYgdGhlIGV1Yy1qcCBpcyBub3QKK2luc3RhbGxlZCBvbiB0aGUgaG9zdCwgbGlidW5pc3RyaW5nIHdpbGwgYmUgYnVpbHQgd2l0aG91dAoraWNvbnYgc3VwcG9ydCBhbmQgd2lsbCBjYXVzZSBndWlsZC1uYXRpdmUgY29uZmlndXJlIGZhaWwuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBnbnVsaWItbTQvaWNvbnYubTQgfCAgIDExIC0tLS0tLS0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAwIGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQorCitJbmRleDogbGlidW5pc3RyaW5nLTAuOS40L2dudWxpYi1tNC9pY29udi5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnVuaXN0cmluZy0wLjkuNC5vcmlnL2dudWxpYi1tNC9pY29udi5tNAkyMDE0LTExLTAzIDE3OjQxOjI5Ljc1NTAxMTkxNyArMDAwMAorKysrIGxpYnVuaXN0cmluZy0wLjkuNC9nbnVsaWItbTQvaWNvbnYubTQJMjAxNC0xMS0wMyAxNzo0MzowMy43OTUwMTQ0ODAgKzAwMDAKK0BAIC0xNTksMTcgKzE1OSw2IEBACisgICAgICAgfQorICAgfQorICNlbmRpZgorLSAgLyogVGVzdCBhZ2FpbnN0IEhQLVVYIDExLjExIGJ1ZzogTm8gY29udmVydGVyIGZyb20gRVVDLUpQIHRvIFVURi04IGlzCistICAgICBwcm92aWRlZC4gICovCistICBpZiAoLyogVHJ5IHN0YW5kYXJkaXplZCBuYW1lcy4gICovCistICAgICAgaWNvbnZfb3BlbiAoIlVURi04IiwgIkVVQy1KUCIpID09IChpY29udl90KSgtMSkKKy0gICAgICAvKiBUcnkgSVJJWCwgT1NGLzEgbmFtZXMuICAqLworLSAgICAgICYmIGljb252X29wZW4gKCJVVEYtOCIsICJldWNKUCIpID09IChpY29udl90KSgtMSkKKy0gICAgICAvKiBUcnkgQUlYIG5hbWVzLiAgKi8KKy0gICAgICAmJiBpY29udl9vcGVuICgiVVRGLTgiLCAiSUJNLWV1Y0pQIikgPT0gKGljb252X3QpKC0xKQorLSAgICAgIC8qIFRyeSBIUC1VWCBuYW1lcy4gICovCistICAgICAgJiYgaWNvbnZfb3BlbiAoInV0ZjgiLCAiZXVjSlAiKSA9PSAoaWNvbnZfdCkoLTEpKQorLSAgICByZXN1bHQgfD0gMTY7CisgICByZXR1cm4gcmVzdWx0OworIH1dXSldLAorICAgICAgICAgW2FtX2N2X2Z1bmNfaWNvbnZfd29ya3M9eWVzXSwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW5pc3RyaW5nL2xpYnVuaXN0cmluZ18wLjkuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW5pc3RyaW5nL2xpYnVuaXN0cmluZ18wLjkuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWNmNjMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bmlzdHJpbmcvbGlidW5pc3RyaW5nXzAuOS41LmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIEMgYW5kIFVuaWNvZGUgc3RyaW5ncyIKKworREVTQ1JJUFRJT04gPSAiVGV4dCBmaWxlcyBhcmUgbm93YWRheXMgdXN1YWxseSBlbmNvZGVkIGluIFVuaWNvZGUsIGFuZCBtYXlcCisgY29uc2lzdCBvZiB2ZXJ5IGRpZmZlcmVudCBzY3JpcHRzIGZyb20gTGF0aW4gbGV0dGVycyB0byBDaGluZXNlIEhhbnppXAorIHdpdGggbWFueSBraW5kcyBvZiBzcGVjaWFsIGNoYXJhY3RlcnMgYWNjZW50cywgcmlnaHQtdG8tbGVmdCB3cml0aW5nXAorIG1hcmtzLCBoeXBoZW5zLCBSb21hbiBudW1iZXJzLCBhbmQgbXVjaCBtb3JlLiBCdXQgdGhlIFBPU0lYIHBsYXRmb3JtXAorIEFQSXMgZm9yIHRleHQgZG8gbm90IGNvbnRhaW4gYWRlcXVhdGUgZnVuY3Rpb25zIGZvciBkZWFsaW5nIHdpdGhcCisgcGFydGljdWxhciBwcm9wZXJ0aWVzIG9mIG1hbnkgVW5pY29kZSBjaGFyYWN0ZXJzLiBJbiBmYWN0LCB0aGUgUE9TSVhcCisgQVBJcyBmb3IgdGV4dCBoYXZlIHNldmVyYWwgYXNzdW1wdGlvbnMgYXQgdGhlaXIgYmFzZSB3aGljaCBkb24ndCBob2xkXAorIGZvciBVbmljb2RlIHRleHQuICBUaGlzIGxpYnJhcnkgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmdcCisgVW5pY29kZSBzdHJpbmdzIGFuZCBmb3IgbWFuaXB1bGF0aW5nIEMgc3RyaW5ncyBhY2NvcmRpbmcgdG8gdGhlIFVuaWNvZGVcCisgc3RhbmRhcmQuICBUaGlzIHBhY2thZ2UgY29udGFpbnMgZG9jdW1lbnRhdGlvbi4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJ1bmlzdHJpbmcvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjMgJiBMR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjYiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9saWJ1bmlzdHJpbmcvbGlidW5pc3RyaW5nLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9pY29udi1tNC1yZW1vdmUtdGhlLXRlc3QtdG8tY29udmVydC1ldWMtanAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiMWE3MDViY2RjYjgzNzk5ZDU0NDEzNzYxN2IzNzdjZmQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWE4YzA3NzI0Njc4NTBiZWY3MTk3MzE4YTk1ZjQ0YWJiYjY3OGVhODNjYmYxMTlhMzUwMGNjNzg0ODI3NmExNyIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS8wMDAxLUludmFsaWQtZHdhcmYtb3Bjb2Rlcy1jYW4tY2F1c2UtcmVmZXJlbmNlcy1iZXlvbmQtdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xLzAwMDEtSW52YWxpZC1kd2FyZi1vcGNvZGVzLWNhbi1jYXVzZS1yZWZlcmVuY2VzLWJleW9uZC10aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjk3MmY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS8wMDAxLUludmFsaWQtZHdhcmYtb3Bjb2Rlcy1jYW4tY2F1c2UtcmVmZXJlbmNlcy1iZXlvbmQtdGgucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSAzOTZiNmM3YWI3MzdlMmJmZjI0NGQ2NDA2MDFjNDM2YTI2MjYwY2ExIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQXJ1biBTaGFybWEgPGFydW5Ac2hhcm1hLWhvbWUubmV0PgorRGF0ZTogRnJpLCAxOSBKdW4gMjAxNSAxOTo0NzoyMiAtMDcwMAorU3ViamVjdDogW1BBVENIXSBJbnZhbGlkIGR3YXJmIG9wY29kZXMgY2FuIGNhdXNlIHJlZmVyZW5jZXMgYmV5b25kIHRoZSBlbmQgb2YKKyB0aGUgYXJyYXkuCisKK1Vwc3RyZWFtLVN0YXR1czogYmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogTGkgWmhvdSA8bGkuemhvdUB3aW5kcml2ZXIuY29tPgorLS0tCisgaW5jbHVkZS9kd2FyZl9pLmggfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9pbmNsdWRlL2R3YXJmX2kuaCBiL2luY2x1ZGUvZHdhcmZfaS5oCitpbmRleCAxZTYyMzFlLi40YTAyYTdkIDEwMDY0NAorLS0tIGEvaW5jbHVkZS9kd2FyZl9pLmgKKysrKyBiL2luY2x1ZGUvZHdhcmZfaS5oCitAQCAtMjAsNyArMjAsNyBAQAorIGV4dGVybiBjb25zdCB1aW50OF90IGR3YXJmX3RvX3Vud19yZWdudW1fbWFwW0RXQVJGX1JFR05VTV9NQVBfTEVOR1RIXTsKKyAvKiBSRUcgaXMgZXZhbHVhdGVkIG11bHRpcGxlIHRpbWVzOyBpdCBiZXR0ZXIgYmUgc2lkZS1lZmZlY3RzIGZyZWUhICAqLworICMgZGVmaW5lIGR3YXJmX3RvX3Vud19yZWdudW0ocmVnKQkJCQkJICBcCistICAoKChyZWcpIDw9IERXQVJGX1JFR05VTV9NQVBfTEVOR1RIKSA/IGR3YXJmX3RvX3Vud19yZWdudW1fbWFwW3JlZ10gOiAwKQorKyAgKCgocmVnKSA8IERXQVJGX1JFR05VTV9NQVBfTEVOR1RIKSA/IGR3YXJmX3RvX3Vud19yZWdudW1fbWFwW3JlZ10gOiAwKQorICNlbmRpZgorIAorICNpZmRlZiBVTldfTE9DQUxfT05MWQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvQUFyY2g2NC1wb3J0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9BQXJjaDY0LXBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI4ZWMzMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvQUFyY2g2NC1wb3J0LnBhdGNoCkBAIC0wLDAgKzEsMjUyOSBAQAorRnJvbSBhYzZjMGE2NTM1OTc1ZjFkYzJkYTZlNGUyNzY2NjE0YmFhYzJhMTRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogWXZhbiBSb3V4IDx5dmFuLnJvdXhAbGluYXJvLm9yZz4KK0RhdGU6IFNhdCwgMTEgTWF5IDIwMTMgMDk6MTg6MjMgLTA2MDAKK1N1YmplY3Q6IFtQQVRDSF0gQUFyY2g2NCBwb3J0LgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKy0tLQorIE1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgCisgUkVBRE1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSAKKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2IAorIGluY2x1ZGUvbGlidW53aW5kLWFhcmNoNjQuaCAgICAgICAgICB8ICAxODcgKysrKysrKysrKysrKysrKysrKysrKworIGluY2x1ZGUvbGlidW53aW5kLmguaW4gICAgICAgICAgICAgICB8ICAgIDQgCisgaW5jbHVkZS90ZGVwLWFhcmNoNjQvZHdhcmYtY29uZmlnLmggIHwgICA1MiArKysrKysKKyBpbmNsdWRlL3RkZXAtYWFyY2g2NC9qbXBidWYuaCAgICAgICAgfCAgIDMzICsrKworIGluY2x1ZGUvdGRlcC1hYXJjaDY0L2xpYnVud2luZF9pLmggICB8ICAyOTQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBpbmNsdWRlL3RkZXAvZHdhcmYtY29uZmlnLmggICAgICAgICAgfCAgICA0IAorIGluY2x1ZGUvdGRlcC9qbXBidWYuaCAgICAgICAgICAgICAgICB8ICAgIDIgCisgaW5jbHVkZS90ZGVwL2xpYnVud2luZF9pLmguaW4gICAgICAgIHwgICAgNCAKKyBzcmMvTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgfCAgIDM5ICsrKysKKyBzcmMvYWFyY2g2NC9HY3JlYXRlX2FkZHJfc3BhY2UuYyAgICAgfCAgIDYwICsrKysrKysKKyBzcmMvYWFyY2g2NC9HZ2V0X3Byb2NfaW5mby5jICAgICAgICAgfCAgIDM5ICsrKysKKyBzcmMvYWFyY2g2NC9HZ2V0X3NhdmVfbG9jLmMgICAgICAgICAgfCAgMTAwICsrKysrKysrKysrCisgc3JjL2FhcmNoNjQvR2dsb2JhbC5jICAgICAgICAgICAgICAgIHwgICA1NyArKysrKysKKyBzcmMvYWFyY2g2NC9HaW5pdC5jICAgICAgICAgICAgICAgICAgfCAgMTg3ICsrKysrKysrKysrKysrKysrKysrKysKKyBzcmMvYWFyY2g2NC9HaW5pdF9sb2NhbC5jICAgICAgICAgICAgfCAgIDU1ICsrKysrKworIHNyYy9hYXJjaDY0L0dpbml0X3JlbW90ZS5jICAgICAgICAgICB8ICAgNDUgKysrKysKKyBzcmMvYWFyY2g2NC9HaXNfc2lnbmFsX2ZyYW1lLmMgICAgICAgfCAgIDY0ICsrKysrKysKKyBzcmMvYWFyY2g2NC9HcmVncy5jICAgICAgICAgICAgICAgICAgfCAgMTEzICsrKysrKysrKysrKysKKyBzcmMvYWFyY2g2NC9HcmVzdW1lLmMgICAgICAgICAgICAgICAgfCAgMTc3ICsrKysrKysrKysrKysrKysrKysrKworIHNyYy9hYXJjaDY0L0dzdGVwLmMgICAgICAgICAgICAgICAgICB8ICAxMjkgKysrKysrKysrKysrKysrCisgc3JjL2FhcmNoNjQvTGNyZWF0ZV9hZGRyX3NwYWNlLmMgICAgIHwgICAgNSAKKyBzcmMvYWFyY2g2NC9MZ2V0X3Byb2NfaW5mby5jICAgICAgICAgfCAgICA1IAorIHNyYy9hYXJjaDY0L0xnZXRfc2F2ZV9sb2MuYyAgICAgICAgICB8ICAgIDUgCisgc3JjL2FhcmNoNjQvTGdsb2JhbC5jICAgICAgICAgICAgICAgIHwgICAgNSAKKyBzcmMvYWFyY2g2NC9MaW5pdC5jICAgICAgICAgICAgICAgICAgfCAgICA1IAorIHNyYy9hYXJjaDY0L0xpbml0X2xvY2FsLmMgICAgICAgICAgICB8ICAgIDUgCisgc3JjL2FhcmNoNjQvTGluaXRfcmVtb3RlLmMgICAgICAgICAgIHwgICAgNSAKKyBzcmMvYWFyY2g2NC9MaXNfc2lnbmFsX2ZyYW1lLmMgICAgICAgfCAgICA1IAorIHNyYy9hYXJjaDY0L0xyZWdzLmMgICAgICAgICAgICAgICAgICB8ICAgIDUgCisgc3JjL2FhcmNoNjQvTHJlc3VtZS5jICAgICAgICAgICAgICAgIHwgICAgNSAKKyBzcmMvYWFyY2g2NC9Mc3RlcC5jICAgICAgICAgICAgICAgICAgfCAgICA1IAorIHNyYy9hYXJjaDY0L2dlbi1vZmZzZXRzLmMgICAgICAgICAgICB8ICAgNjggKysrKysrKysKKyBzcmMvYWFyY2g2NC9pbml0LmggICAgICAgICAgICAgICAgICAgfCAgMTI3ICsrKysrKysrKysrKysrKworIHNyYy9hYXJjaDY0L2lzX2ZwcmVnLmMgICAgICAgICAgICAgICB8ICAgMzIgKysrCisgc3JjL2FhcmNoNjQvb2Zmc2V0cy5oICAgICAgICAgICAgICAgIHwgICA0OSArKysrKworIHNyYy9hYXJjaDY0L3JlZ25hbWUuYyAgICAgICAgICAgICAgICB8ICAxMDYgKysrKysrKysrKysrCisgc3JjL2FhcmNoNjQvc2lnbG9uZ2ptcC5TICAgICAgICAgICAgIHwgICAxMiArCisgc3JjL2FhcmNoNjQvdW53aW5kX2kuaCAgICAgICAgICAgICAgIHwgICA0MyArKysrKworIHNyYy9jb3JlZHVtcC9fVUNEX2FjY2Vzc19yZWdfbGludXguYyB8ICAgIDUgCisgc3JjL3B0cmFjZS9fVVBUX3JlZ19vZmZzZXQuYyAgICAgICAgIHwgICAzNiArKysrCisgNDMgZmlsZXMgY2hhbmdlZCwgMjE4NCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpYnVud2luZC1hYXJjaDY0LmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS90ZGVwLWFhcmNoNjQvZHdhcmYtY29uZmlnLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS90ZGVwLWFhcmNoNjQvam1wYnVmLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS90ZGVwLWFhcmNoNjQvbGlidW53aW5kX2kuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9HY3JlYXRlX2FkZHJfc3BhY2UuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9HZ2V0X3Byb2NfaW5mby5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dnZXRfc2F2ZV9sb2MuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9HZ2xvYmFsLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR2luaXQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9HaW5pdF9sb2NhbC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dpbml0X3JlbW90ZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dpc19zaWduYWxfZnJhbWUuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9HcmVncy5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dyZXN1bWUuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9Hc3RlcC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0xjcmVhdGVfYWRkcl9zcGFjZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0xnZXRfcHJvY19pbmZvLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTGdldF9zYXZlX2xvYy5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0xnbG9iYWwuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9MaW5pdC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0xpbml0X2xvY2FsLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTGluaXRfcmVtb3RlLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTGlzX3NpZ25hbF9mcmFtZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0xyZWdzLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTHJlc3VtZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0xzdGVwLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvZ2VuLW9mZnNldHMuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9pbml0LmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvaXNfZnByZWcuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9vZmZzZXRzLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvcmVnbmFtZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L3NpZ2xvbmdqbXAuUworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC91bndpbmRfaS5oCisKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTIsNiArMiw5IEBAIGluY2x1ZGVfSEVBREVSUyA9IGluY2x1ZGUvbGlidW53aW5kLWR5bmEKKyAgICAgaW5jbHVkZS9saWJ1bndpbmQtcHRyYWNlLmggXAorICAgICBpbmNsdWRlL2xpYnVud2luZC1jb3JlZHVtcC5oCisgCisraWYgQVJDSF9BQVJDSDY0CisraW5jbHVkZV9IRUFERVJTICs9IGluY2x1ZGUvbGlidW53aW5kLWFhcmNoNjQuaAorK2VuZGlmCisgaWYgQVJDSF9BUk0KKyBpbmNsdWRlX0hFQURFUlMgKz0gaW5jbHVkZS9saWJ1bndpbmQtYXJtLmgKKyBlbmRpZgorQEAgLTQxLDYgKzQ0LDkgQEAgU1VCRElSUyA9IHNyYyB0ZXN0cyBkb2MKKyBub2luc3RfSEVBREVSUyA9IGluY2x1ZGUvZHdhcmYuaCBpbmNsdWRlL2R3YXJmX2kuaCBpbmNsdWRlL2R3YXJmLWVoLmgJXAorIAlpbmNsdWRlL2NvbXBpbGVyLmggaW5jbHVkZS9saWJ1bndpbmRfaS5oIGluY2x1ZGUvbWVtcG9vbC5oCVwKKyAJaW5jbHVkZS9yZW1vdGUuaAkJCQkJCVwKKysJaW5jbHVkZS90ZGVwLWFhcmNoNjQvZHdhcmYtY29uZmlnLmgJCQkJXAorKwlpbmNsdWRlL3RkZXAtYWFyY2g2NC9qbXBidWYuaAkJCQkJXAorKwlpbmNsdWRlL3RkZXAtYWFyY2g2NC9saWJ1bndpbmRfaS5oCQkJCVwKKyAJaW5jbHVkZS90ZGVwLWFybS9kd2FyZi1jb25maWcuaAlpbmNsdWRlL3RkZXAtYXJtL2V4X3RhYmxlcy5oCVwKKyAJaW5jbHVkZS90ZGVwLWFybS9qbXBidWYuaCBpbmNsdWRlL3RkZXAtYXJtL2xpYnVud2luZF9pLmgJXAorIAlpbmNsdWRlL3RkZXAtaWE2NC9qbXBidWYuaCBpbmNsdWRlL3RkZXAtaWE2NC9yc2UuaCAJCVwKKy0tLSBhL1JFQURNRQorKysrIGIvUkVBRE1FCitAQCAtOSw2ICs5LDcgQEAgc2V2ZXJhbCBhcmNoaXRlY3R1cmUvb3BlcmF0aW5nLXN5c3RlbSBjbworICBMaW51eC9JQS02NDoJRnVsbHkgdGVzdGVkIGFuZCBzdXBwb3J0ZWQuCisgIExpbnV4L1BBUklTQzoJV29ya3Mgd2VsbCwgYnV0IEMgbGlicmFyeSBtaXNzaW5nIHVud2luZC1pbmZvLgorICBIUC1VWC9JQS02NDoJTW9zdGx5IHdvcmtzIGJ1dCBrbm93biB0byBoYXZlIHNvbWUgc2VyaW91cyBsaW1pdGF0aW9ucy4KKysgTGludXgvQUFyY2g2NDoJTmV3bHkgYWRkZWQuCisgIExpbnV4L1BQQzY0OglOZXdseSBhZGRlZC4KKyAgTGludXgvU3VwZXJIOglOZXdseSBhZGRlZC4KKyAgRnJlZUJTRC9pMzg2OglOZXdseSBhZGRlZC4KKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTA0LDcgKzEwNCw3IEBAIFNFVF9BUkNIKFskdGFyZ2V0X2NwdV0sW3RhcmdldF9hcmNoXSkKKyAKKyBBQ19BUkdfRU5BQkxFKGNvcmVkdW1wLAorIAlBU19IRUxQX1NUUklORyhbLS1lbmFibGUtY29yZWR1bXBdLFtidWlsZGluZyBsaWJ1bndpbmQtY29yZWR1bXAgbGlicmFyeV0pLCwKKy0gICAgICAgIFtBU19DQVNFKFskaG9zdF9hcmNoXSwgW2FybSp8bWlwcyp8c2gqfHg4NipdLCBbZW5hYmxlX2NvcmVkdW1wPXllc10sIFtlbmFibGVfY29yZWR1bXA9bm9dKV0KKysgICAgICAgIFtBU19DQVNFKFskaG9zdF9hcmNoXSwgW2FhcmNoNjQqfGFybSp8bWlwcyp8c2gqfHg4NipdLCBbZW5hYmxlX2NvcmVkdW1wPXllc10sIFtlbmFibGVfY29yZWR1bXA9bm9dKV0KKyApCisgCisgQUNfTVNHX0NIRUNLSU5HKFtpZiB3ZSBzaG91bGQgYnVpbGQgbGlidW53aW5kLWNvcmVkdW1wXSkKK0BAIC0xMjEsNiArMTIxLDcgQEAgQUNfTVNHX1JFU1VMVChbJHRhcmdldF9vc10pCisgCisgQU1fQ09ORElUSU9OQUwoQlVJTERfQ09SRURVTVAsIHRlc3QgeCRlbmFibGVfY29yZWR1bXAgPSB4eWVzKQorIEFNX0NPTkRJVElPTkFMKFJFTU9URV9PTkxZLCB0ZXN0IHgkdGFyZ2V0X2FyY2ggIT0geCRob3N0X2FyY2gpCisrQU1fQ09ORElUSU9OQUwoQVJDSF9BQVJDSDY0LCB0ZXN0IHgkdGFyZ2V0X2FyY2ggPSB4YWFyY2g2NCkKKyBBTV9DT05ESVRJT05BTChBUkNIX0FSTSwgdGVzdCB4JHRhcmdldF9hcmNoID0geGFybSkKKyBBTV9DT05ESVRJT05BTChBUkNIX0lBNjQsIHRlc3QgeCR0YXJnZXRfYXJjaCA9IHhpYTY0KQorIEFNX0NPTkRJVElPTkFMKEFSQ0hfSFBQQSwgdGVzdCB4JHRhcmdldF9hcmNoID0geGhwcGEpCitAQCAtMTM3LDcgKzEzOCw3IEBAIEFNX0NPTkRJVElPTkFMKE9TX0ZSRUVCU0QsIGV4cHIgeCR0YXJnZXQKKyBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBFTEYgaGVscGVyIHdpZHRoXSkKKyBjYXNlICIke3RhcmdldF9hcmNofSIgaW4KKyAoYXJtfGhwcGF8cHBjMzJ8eDg2fHNoKSB1c2VfZWxmMzI9eWVzOyBBQ19NU0dfUkVTVUxUKFszMl0pOzsKKy0oaWE2NHxwcGM2NHx4ODZfNjQpICAgIHVzZV9lbGY2ND15ZXM7IEFDX01TR19SRVNVTFQoWzY0XSk7OworKyhhYXJjaDY0fGlhNjR8cHBjNjR8eDg2XzY0KSAgICB1c2VfZWxmNjQ9eWVzOyBBQ19NU0dfUkVTVUxUKFs2NF0pOzsKKyAobWlwcykgICAgICAgICAgICAgICAgIHVzZV9lbGZ4eD15ZXM7IEFDX01TR19SRVNVTFQoW3h4XSk7OworICopICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtVbmtub3duIEVMRiB0YXJnZXQ6ICR7dGFyZ2V0X2FyY2h9XSkKKyBlc2FjCitAQCAtMTg2LDYgKzE4Nyw3IEBAIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1jeHgtZXhjZXB0aW9uc10KKyAjIEMrKyBleGNlcHRpb24gaGFuZGxpbmcgZG9lc24ndCB3b3JrIHRvbyB3ZWxsIG9uIHg4NgorIGNhc2UgJHRhcmdldF9hcmNoIGluCisgICB4ODYqKSBlbmFibGVfY3h4X2V4Y2VwdGlvbnM9bm87OworKyAgYWFyY2g2NCopIGVuYWJsZV9jeHhfZXhjZXB0aW9ucz1ubzs7CisgICBhcm0qKSBlbmFibGVfY3h4X2V4Y2VwdGlvbnM9bm87OworICAgbWlwcyopIGVuYWJsZV9jeHhfZXhjZXB0aW9ucz1ubzs7CisgICAqKSBlbmFibGVfY3h4X2V4Y2VwdGlvbnM9eWVzOzsKKy0tLSAvZGV2L251bGwKKysrKyBiL2luY2x1ZGUvbGlidW53aW5kLWFhcmNoNjQuaAorQEAgLTAsMCArMSwxODcgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQgSGV3bGV0dC1QYWNrYXJkIENvCisrCUNvbnRyaWJ1dGVkIGJ5IERhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpZm5kZWYgTElCVU5XSU5EX0gKKysjZGVmaW5lIExJQlVOV0lORF9ICisrCisrI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpIHx8IGRlZmluZWQoY19wbHVzcGx1cykKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrI2luY2x1ZGUgPHVjb250ZXh0Lmg+CisrCisrI2RlZmluZSBVTldfVEFSR0VUCWFhcmNoNjQKKysjZGVmaW5lIFVOV19UQVJHRVRfQUFSQ0g2NAkxCisrCisrI2RlZmluZSBfVV9UREVQX1FQX1RSVUUJMAkvKiBzZWUgbGlidW53aW5kLWR5bmFtaWMuaCAgKi8KKysKKysvKiBUaGlzIG5lZWRzIHRvIGJlIGJpZyBlbm91Z2ggdG8gYWNjb21tb2RhdGUgInN0cnVjdCBjdXJzb3IiLCB3aGlsZQorKyAgIGxlYXZpbmcgc29tZSBzbGFjayBmb3IgZnV0dXJlIGV4cGFuc2lvbi4gIENoYW5naW5nIHRoaXMgdmFsdWUgd2lsbAorKyAgIHJlcXVpcmUgcmVjb21waWxpbmcgYWxsIHVzZXJzIG9mIHRoaXMgbGlicmFyeS4gIFN0YWNrIGFsbG9jYXRpb24gaXMKKysgICByZWxhdGl2ZWx5IGNoZWFwIGFuZCB1bndpbmQtc3RhdGUgY29weWluZyBpcyByZWxhdGl2ZWx5IHJhcmUsIHNvIHdlCisrICAgd2FudCB0byBlcnIgb24gbWFraW5nIGl0IHJhdGhlciB0b28gYmlnIHRoYW4gdG9vIHNtYWxsLiAgKi8KKysKKysjZGVmaW5lIFVOV19UREVQX0NVUlNPUl9MRU4JNDA5NgorKworK3R5cGVkZWYgdWludDY0X3QgdW53X3dvcmRfdDsKKyt0eXBlZGVmIGludDY0X3QgdW53X3N3b3JkX3Q7CisrCisrdHlwZWRlZiBsb25nIGRvdWJsZSB1bndfdGRlcF9mcHJlZ190OworKworK3R5cGVkZWYgc3RydWN0CisrICB7CisrICAgIC8qIG5vIGFhcmNoNjQtc3BlY2lmaWMgYXV4aWxpYXJ5IHByb2MtaW5mbyAqLworKyAgfQorK3Vud190ZGVwX3Byb2NfaW5mb190OworKworK3R5cGVkZWYgZW51bQorKyAgeworKyAgICAvKiA2NC1iaXQgZ2VuZXJhbCByZWdpc3RlcnMuICAqLworKyAgICBVTldfQUFSQ0g2NF9YMCwKKysgICAgVU5XX0FBUkNINjRfWDEsCisrICAgIFVOV19BQVJDSDY0X1gyLAorKyAgICBVTldfQUFSQ0g2NF9YMywKKysgICAgVU5XX0FBUkNINjRfWDQsCisrICAgIFVOV19BQVJDSDY0X1g1LAorKyAgICBVTldfQUFSQ0g2NF9YNiwKKysgICAgVU5XX0FBUkNINjRfWDcsCisrICAgIFVOV19BQVJDSDY0X1g4LAorKworKyAgICAvKiBUZW1wb3JhcnkgcmVnaXN0ZXJzLiAgKi8KKysgICAgVU5XX0FBUkNINjRfWDksCisrICAgIFVOV19BQVJDSDY0X1gxMCwKKysgICAgVU5XX0FBUkNINjRfWDExLAorKyAgICBVTldfQUFSQ0g2NF9YMTIsCisrICAgIFVOV19BQVJDSDY0X1gxMywKKysgICAgVU5XX0FBUkNINjRfWDE0LAorKyAgICBVTldfQUFSQ0g2NF9YMTUsCisrCisrICAgIC8qIEludHJhLXByb2NlZHVyZS1jYWxsIHRlbXBvcmFyeSByZWdpc3RlcnMuICAqLworKyAgICBVTldfQUFSQ0g2NF9YMTYsCisrICAgIFVOV19BQVJDSDY0X1gxNywKKysKKysgICAgLyogQ2FsbGVlLXNhdmVkIHJlZ2lzdGVycy4gICovCisrICAgIFVOV19BQVJDSDY0X1gxOCwKKysgICAgVU5XX0FBUkNINjRfWDE5LAorKyAgICBVTldfQUFSQ0g2NF9YMjAsCisrICAgIFVOV19BQVJDSDY0X1gyMSwKKysgICAgVU5XX0FBUkNINjRfWDIyLAorKyAgICBVTldfQUFSQ0g2NF9YMjMsCisrICAgIFVOV19BQVJDSDY0X1gyNCwKKysgICAgVU5XX0FBUkNINjRfWDI1LAorKyAgICBVTldfQUFSQ0g2NF9YMjYsCisrICAgIFVOV19BQVJDSDY0X1gyNywKKysgICAgVU5XX0FBUkNINjRfWDI4LAorKworKyAgICAvKiA2NC1iaXQgZnJhbWUgcG9pbnRlci4gICovCisrICAgIFVOV19BQVJDSDY0X1gyOSwKKysKKysgICAgLyogNjQtYml0IGxpbmsgcmVnaXN0ZXIuICAqLworKyAgICBVTldfQUFSQ0g2NF9YMzAsCisrCisrICAgIC8qIDY0LWJpdCBzdGFjayBwb2ludGVyLiAgKi8KKysgICAgVU5XX0FBUkNINjRfU1AgPSAgMzEsCisrICAgIFVOV19BQVJDSDY0X1BDLAorKyAgICBVTldfQUFSQ0g2NF9QU1RBVEUsCisrCisrICAgIC8qIDEyOC1iaXQgRlAvQWR2YW5jZWQgU0lNRCByZWdpc3RlcnMuICAqLworKyAgICBVTldfQUFSQ0g2NF9WMCA9IDY0LAorKyAgICBVTldfQUFSQ0g2NF9WMSwKKysgICAgVU5XX0FBUkNINjRfVjIsCisrICAgIFVOV19BQVJDSDY0X1YzLAorKyAgICBVTldfQUFSQ0g2NF9WNCwKKysgICAgVU5XX0FBUkNINjRfVjUsCisrICAgIFVOV19BQVJDSDY0X1Y2LAorKyAgICBVTldfQUFSQ0g2NF9WNywKKysgICAgVU5XX0FBUkNINjRfVjgsCisrICAgIFVOV19BQVJDSDY0X1Y5LAorKyAgICBVTldfQUFSQ0g2NF9WMTAsCisrICAgIFVOV19BQVJDSDY0X1YxMSwKKysgICAgVU5XX0FBUkNINjRfVjEyLAorKyAgICBVTldfQUFSQ0g2NF9WMTMsCisrICAgIFVOV19BQVJDSDY0X1YxNCwKKysgICAgVU5XX0FBUkNINjRfVjE1LAorKyAgICBVTldfQUFSQ0g2NF9WMTYsCisrICAgIFVOV19BQVJDSDY0X1YxNywKKysgICAgVU5XX0FBUkNINjRfVjE4LAorKyAgICBVTldfQUFSQ0g2NF9WMTksCisrICAgIFVOV19BQVJDSDY0X1YyMCwKKysgICAgVU5XX0FBUkNINjRfVjIxLAorKyAgICBVTldfQUFSQ0g2NF9WMjIsCisrICAgIFVOV19BQVJDSDY0X1YyMywKKysgICAgVU5XX0FBUkNINjRfVjI0LAorKyAgICBVTldfQUFSQ0g2NF9WMjUsCisrICAgIFVOV19BQVJDSDY0X1YyNiwKKysgICAgVU5XX0FBUkNINjRfVjI3LAorKyAgICBVTldfQUFSQ0g2NF9WMjgsCisrICAgIFVOV19BQVJDSDY0X1YyOSwKKysgICAgVU5XX0FBUkNINjRfVjMwLAorKyAgICBVTldfQUFSQ0g2NF9WMzEsCisrCisrICAgIFVOV19BQVJDSDY0X0ZQU1IsCisrICAgIFVOV19BQVJDSDY0X0ZQQ1IsCisrCisrICAgIC8qIEZvciBBQXJjaDY0LCB0aGUgQ0ZBIGlzIHRoZSB2YWx1ZSBvZiBTUCAoeDMxKSBhdCB0aGUgY2FsbCBzaXRlIG9mIHRoZQorKyAgICAgICBwcmV2aW91cyBmcmFtZS4gICovCisrICAgIFVOV19BQVJDSDY0X0NGQSA9IFVOV19BQVJDSDY0X1NQLAorKworKyAgICBVTldfVERFUF9MQVNUX1JFRyA9IFVOV19BQVJDSDY0X0ZQQ1IsCisrCisrICAgIFVOV19UREVQX0lQID0gVU5XX0FBUkNINjRfWDMwLAorKyAgICBVTldfVERFUF9TUCA9IFVOV19BQVJDSDY0X1NQLAorKyAgICBVTldfVERFUF9FSCA9IFVOV19BQVJDSDY0X1gwLAorKworKyAgfQorK2FhcmNoNjRfcmVnbnVtX3Q7CisrCisrLyogVXNlIFIwIHRocm91Z2ggUjMgdG8gcGFzcyBleGNlcHRpb24gaGFuZGxpbmcgaW5mb3JtYXRpb24uICAqLworKyNkZWZpbmUgVU5XX1RERVBfTlVNX0VIX1JFR1MJNAorKworK3R5cGVkZWYgc3RydWN0IHVud190ZGVwX3NhdmVfbG9jCisrICB7CisrICAgIC8qIEFkZGl0aW9uYWwgdGFyZ2V0LWRlcGVuZGVudCBpbmZvIG9uIGEgc2F2ZSBsb2NhdGlvbi4gICovCisrICB9CisrdW53X3RkZXBfc2F2ZV9sb2NfdDsKKysKKysKKysvKiBPbiBBQXJjaDY0LCB3ZSBjYW4gZGlyZWN0bHkgdXNlIHVjb250ZXh0X3QgYXMgdGhlIHVud2luZCBjb250ZXh0LiAgKi8KKyt0eXBlZGVmIHVjb250ZXh0X3QgdW53X3RkZXBfY29udGV4dF90OworKworKyNpbmNsdWRlICJsaWJ1bndpbmQtY29tbW9uLmgiCisrI2luY2x1ZGUgImxpYnVud2luZC1keW5hbWljLmgiCisrCisrI2RlZmluZSB1bndfdGRlcF9nZXRjb250ZXh0KHVjKSAgICAgICAgIChnZXRjb250ZXh0ICh1YyksIDApCisrI2RlZmluZSB1bndfdGRlcF9pc19mcHJlZwkJVU5XX0FSQ0hfT0JKKGlzX2ZwcmVnKQorKworK2V4dGVybiBpbnQgdW53X3RkZXBfaXNfZnByZWcgKGludCk7CisrCisrI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpIHx8IGRlZmluZWQoY19wbHVzcGx1cykKKyt9CisrI2VuZGlmCisrCisrI2VuZGlmIC8qIExJQlVOV0lORF9IICovCistLS0gYS9pbmNsdWRlL2xpYnVud2luZC5oLmluCisrKysgYi9pbmNsdWRlL2xpYnVud2luZC5oLmluCitAQCAtMyw3ICszLDkgQEAKKyAKKyAjaWZuZGVmIFVOV19SRU1PVEVfT05MWQorIAorLSNpZiBkZWZpbmVkIF9fYXJtX18KKysjaWYgZGVmaW5lZCBfX2FhcmNoNjRfXworKyNpbmNsdWRlICJsaWJ1bndpbmQtYWFyY2g2NC5oIgorKyNlbGlmIGRlZmluZWQgX19hcm1fXworICMgaW5jbHVkZSAibGlidW53aW5kLWFybS5oIgorICNlbGlmIGRlZmluZWQgX19ocHBhX18KKyAjIGluY2x1ZGUgImxpYnVud2luZC1ocHBhLmgiCistLS0gL2Rldi9udWxsCisrKysgYi9pbmNsdWRlL3RkZXAtYWFyY2g2NC9kd2FyZi1jb25maWcuaAorQEAgLTAsMCArMSw1MiBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2lmbmRlZiBkd2FyZl9jb25maWdfaAorKyNkZWZpbmUgZHdhcmZfY29uZmlnX2gKKysKKysvKiBUaGlzIG1hdGNoZXMgdGhlIHZhbHVlIHVkZXMgYnkgR0NDIChzZWUKKysgICBnY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5oOkRXQVJGX0ZSQU1FX1JFR0lTVEVSUy4gICovCisrI2RlZmluZSBEV0FSRl9OVU1fUFJFU0VSVkVEX1JFR1MJOTcKKysKKysvKiBSZXR1cm4gVFJVRSBpZiB0aGUgQUREUl9TUEFDRSB1c2VzIGJpZy1lbmRpYW4gYnl0ZS1vcmRlci4gICovCisrI2RlZmluZSBkd2FyZl9pc19iaWdfZW5kaWFuKGFkZHJfc3BhY2UpCTAKKysKKysjZGVmaW5lIGR3YXJmX3RvX3Vud19yZWdudW0ocmVnKSAoKChyZWcpIDw9IFVOV19BQVJDSDY0X1YzMSkgPyAocmVnKSA6IDApCisrCisrLyogQ29udmVydCBhIHBvaW50ZXIgdG8gYSBkd2FyZl9jdXJzb3Igc3RydWN0dXJlIHRvIGEgcG9pbnRlciB0bworKyAgIHVud19jdXJzb3JfdC4gICovCisrI2RlZmluZSBkd2FyZl90b19jdXJzb3IoYykJKCh1bndfY3Vyc29yX3QgKikgKGMpKQorKworK3R5cGVkZWYgc3RydWN0IGR3YXJmX2xvYworKyAgeworKyAgICB1bndfd29yZF90IHZhbDsKKysjaWZuZGVmIFVOV19MT0NBTF9PTkxZCisrICAgIHVud193b3JkX3QgdHlwZTsJCS8qIHNlZSBEV0FSRl9MT0NfVFlQRV8qIG1hY3Jvcy4gICovCisrI2VuZGlmCisrICB9CisrZHdhcmZfbG9jX3Q7CisrCisrI2VuZGlmIC8qIGR3YXJmX2NvbmZpZ19oICovCistLS0gL2Rldi9udWxsCisrKysgYi9pbmNsdWRlL3RkZXAtYWFyY2g2NC9qbXBidWYuaAorQEAgLTAsMCArMSwzMyBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysvKiBVc2UgZ2xpYmMncyBqdW1wLWJ1ZmZlciBpbmRpY2VzOyBOUFRMIHBlZWtzIGF0IFNQOiAqLworKworKy8qIEZJWE1FIGZvciBBQXJjaDY0ICAqLworKworKyNkZWZpbmUgSkJfU1AJCTEzCisrI2RlZmluZSBKQl9SUAkJMTQKKysjZGVmaW5lIEpCX01BU0tfU0FWRUQJMTUKKysjZGVmaW5lIEpCX01BU0sJCTE2CistLS0gL2Rldi9udWxsCisrKysgYi9pbmNsdWRlL3RkZXAtYWFyY2g2NC9saWJ1bndpbmRfaS5oCitAQCAtMCwwICsxLDI5NCBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNSBIZXdsZXR0LVBhY2thcmQgQ28KKysJQ29udHJpYnV0ZWQgYnkgRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2lmbmRlZiBBQVJDSDY0X0xJQlVOV0lORF9JX0gKKysjZGVmaW5lIEFBUkNINjRfTElCVU5XSU5EX0lfSAorKworKy8qIFRhcmdldC1kZXBlbmRlbnQgZGVmaW5pdGlvbnMgdGhhdCBhcmUgaW50ZXJuYWwgdG8gbGlidW53aW5kIGJ1dCBuZWVkCisrICAgdG8gYmUgc2hhcmVkIHdpdGggdGFyZ2V0LWluZGVwZW5kZW50IGNvZGUuICAqLworKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrCisrI2luY2x1ZGUgImVsZjY0LmgiCisrI2luY2x1ZGUgIm1lbXBvb2wuaCIKKysjaW5jbHVkZSAiZHdhcmYuaCIKKysKKyt0eXBlZGVmIHN0cnVjdAorKyAgeworKyAgICAvKiBubyBhYXJjaDY0LXNwZWNpZmljIGZhc3QgdHJhY2UgKi8KKysgIH0KKyt1bndfdGRlcF9mcmFtZV90OworKworKyNpZmRlZiBVTldfTE9DQUxfT05MWQorKworK3R5cGVkZWYgdW53X3dvcmRfdCBhYXJjaDY0X2xvY190OworKworKyNlbHNlIC8qICFVTldfTE9DQUxfT05MWSAqLworKworK3R5cGVkZWYgc3RydWN0IGFhcmNoNjRfbG9jCisrICB7CisrICAgIHVud193b3JkX3QgdzAsIHcxOworKyAgfQorK2FhcmNoNjRfbG9jX3Q7CisrCisrI2VuZGlmIC8qICFVTldfTE9DQUxfT05MWSAqLworKworK3N0cnVjdCB1bndfYWRkcl9zcGFjZQorKyAgeworKyAgICBzdHJ1Y3QgdW53X2FjY2Vzc29ycyBhY2M7CisrICAgIGludCBiaWdfZW5kaWFuOworKyAgICB1bndfY2FjaGluZ19wb2xpY3lfdCBjYWNoaW5nX3BvbGljeTsKKysjaWZkZWYgSEFWRV9BVE9NSUNfT1BTX0gKKysgICAgQU9fdCBjYWNoZV9nZW5lcmF0aW9uOworKyNlbHNlCisrICAgIHVpbnQzMl90IGNhY2hlX2dlbmVyYXRpb247CisrI2VuZGlmCisrICAgIHVud193b3JkX3QgZHluX2dlbmVyYXRpb247ICAgICAgICAgIC8qIHNlZSBkeW4tY29tbW9uLmggKi8KKysgICAgdW53X3dvcmRfdCBkeW5faW5mb19saXN0X2FkZHI7CS8qIChjYWNoZWQpIGR5bl9pbmZvX2xpc3RfYWRkciAqLworKyAgICBzdHJ1Y3QgZHdhcmZfcnNfY2FjaGUgZ2xvYmFsX2NhY2hlOworKyAgICBzdHJ1Y3QgdW53X2RlYnVnX2ZyYW1lX2xpc3QgKmRlYnVnX2ZyYW1lczsKKysgICB9OworKworK3N0cnVjdCBjdXJzb3IKKysgIHsKKysgICAgc3RydWN0IGR3YXJmX2N1cnNvciBkd2FyZjsgICAgICAgICAgLyogbXVzdCBiZSBmaXJzdCAqLworKyAgICBlbnVtCisrICAgICAgeworKyAgICAgICAgQUFSQ0g2NF9TQ0ZfTk9ORSwKKysgICAgICAgIEFBUkNINjRfU0NGX0xJTlVYX1JUX1NJR0ZSQU1FLAorKyAgICAgIH0KKysgICAgc2lnY29udGV4dF9mb3JtYXQ7CisrICAgIHVud193b3JkX3Qgc2lnY29udGV4dF9hZGRyOworKyAgICB1bndfd29yZF90IHNpZ2NvbnRleHRfc3A7CisrICAgIHVud193b3JkX3Qgc2lnY29udGV4dF9wYzsKKysgIH07CisrCisrI2RlZmluZSBEV0FSRl9HRVRfTE9DKGwpICAgICAgICAoKGwpLnZhbCkKKysKKysjaWZkZWYgVU5XX0xPQ0FMX09OTFkKKysjIGRlZmluZSBEV0FSRl9OVUxMX0xPQyAgICAgICAgIERXQVJGX0xPQyAoMCwgMCkKKysjIGRlZmluZSBEV0FSRl9JU19OVUxMX0xPQyhsKSAgIChEV0FSRl9HRVRfTE9DIChsKSA9PSAwKQorKyMgZGVmaW5lIERXQVJGX0xPQyhyLCB0KSAgICAgICAgKChkd2FyZl9sb2NfdCkgeyAudmFsID0gKHIpIH0pCisrIyBkZWZpbmUgRFdBUkZfSVNfUkVHX0xPQyhsKSAgICAwCisrIyBkZWZpbmUgRFdBUkZfUkVHX0xPQyhjLHIpICAgICAoRFdBUkZfTE9DKCh1bndfd29yZF90KSAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcF91Y19hZGRyKChjKS0+YXNfYXJnLCAocikpLCAwKSkKKysjIGRlZmluZSBEV0FSRl9NRU1fTE9DKGMsbSkgICAgIERXQVJGX0xPQyAoKG0pLCAwKQorKyMgZGVmaW5lIERXQVJGX0ZQUkVHX0xPQyhjLHIpICAgKERXQVJGX0xPQygodW53X3dvcmRfdCkgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXBfdWNfYWRkcigoYyktPmFzX2FyZywgKHIpKSwgMCkpCisrCisrc3RhdGljIGlubGluZSBpbnQKKytkd2FyZl9nZXRmcCAoc3RydWN0IGR3YXJmX2N1cnNvciAqYywgZHdhcmZfbG9jX3QgbG9jLCB1bndfZnByZWdfdCAqdmFsKQorK3sKKysgIGlmICghRFdBUkZfR0VUX0xPQyAobG9jKSkKKysgICAgcmV0dXJuIC0xOworKyAgKnZhbCA9ICoodW53X2ZwcmVnX3QgKikgRFdBUkZfR0VUX0xPQyAobG9jKTsKKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgaW5saW5lIGludAorK2R3YXJmX3B1dGZwIChzdHJ1Y3QgZHdhcmZfY3Vyc29yICpjLCBkd2FyZl9sb2NfdCBsb2MsIHVud19mcHJlZ190IHZhbCkKKyt7CisrICBpZiAoIURXQVJGX0dFVF9MT0MgKGxvYykpCisrICAgIHJldHVybiAtMTsKKysgICoodW53X2ZwcmVnX3QgKikgRFdBUkZfR0VUX0xPQyAobG9jKSA9IHZhbDsKKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgaW5saW5lIGludAorK2R3YXJmX2dldCAoc3RydWN0IGR3YXJmX2N1cnNvciAqYywgZHdhcmZfbG9jX3QgbG9jLCB1bndfd29yZF90ICp2YWwpCisreworKyAgaWYgKCFEV0FSRl9HRVRfTE9DIChsb2MpKQorKyAgICByZXR1cm4gLTE7CisrICAqdmFsID0gKih1bndfd29yZF90ICopIERXQVJGX0dFVF9MT0MgKGxvYyk7CisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGlubGluZSBpbnQKKytkd2FyZl9wdXQgKHN0cnVjdCBkd2FyZl9jdXJzb3IgKmMsIGR3YXJmX2xvY190IGxvYywgdW53X3dvcmRfdCB2YWwpCisreworKyAgaWYgKCFEV0FSRl9HRVRfTE9DIChsb2MpKQorKyAgICByZXR1cm4gLTE7CisrICAqKHVud193b3JkX3QgKikgRFdBUkZfR0VUX0xPQyAobG9jKSA9IHZhbDsKKysgIHJldHVybiAwOworK30KKysKKysjZWxzZSAvKiAhVU5XX0xPQ0FMX09OTFkgKi8KKysjIGRlZmluZSBEV0FSRl9MT0NfVFlQRV9GUCAgICAgICgxIDw8IDApCisrIyBkZWZpbmUgRFdBUkZfTE9DX1RZUEVfUkVHICAgICAoMSA8PCAxKQorKyMgZGVmaW5lIERXQVJGX05VTExfTE9DICAgICAgICAgRFdBUkZfTE9DICgwLCAwKQorKyMgZGVmaW5lIERXQVJGX0lTX05VTExfTE9DKGwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgKHsgZHdhcmZfbG9jX3QgX2wgPSAobCk7IF9sLnZhbCA9PSAwICYmIF9sLnR5cGUgPT0gMDsgfSkKKysjIGRlZmluZSBEV0FSRl9MT0MociwgdCkgICAgICAgICgoZHdhcmZfbG9jX3QpIHsgLnZhbCA9IChyKSwgLnR5cGUgPSAodCkgfSkKKysjIGRlZmluZSBEV0FSRl9JU19SRUdfTE9DKGwpICAgICgoKGwpLnR5cGUgJiBEV0FSRl9MT0NfVFlQRV9SRUcpICE9IDApCisrIyBkZWZpbmUgRFdBUkZfSVNfRlBfTE9DKGwpICAgICAoKChsKS50eXBlICYgRFdBUkZfTE9DX1RZUEVfRlApICE9IDApCisrIyBkZWZpbmUgRFdBUkZfUkVHX0xPQyhjLHIpICAgICBEV0FSRl9MT0MoKHIpLCBEV0FSRl9MT0NfVFlQRV9SRUcpCisrIyBkZWZpbmUgRFdBUkZfTUVNX0xPQyhjLG0pICAgICBEV0FSRl9MT0MgKChtKSwgMCkKKysjIGRlZmluZSBEV0FSRl9GUFJFR19MT0MoYyxyKSAgIERXQVJGX0xPQygociksIChEV0FSRl9MT0NfVFlQRV9SRUcgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEV0FSRl9MT0NfVFlQRV9GUCkpCisrCisrc3RhdGljIGlubGluZSBpbnQKKytkd2FyZl9nZXRmcCAoc3RydWN0IGR3YXJmX2N1cnNvciAqYywgZHdhcmZfbG9jX3QgbG9jLCB1bndfZnByZWdfdCAqdmFsKQorK3sKKysgIGNoYXIgKnZhbHAgPSAoY2hhciAqKSAmdmFsOworKyAgdW53X3dvcmRfdCBhZGRyOworKyAgaW50IHJldDsKKysKKysgIGlmIChEV0FSRl9JU19OVUxMX0xPQyAobG9jKSkKKysgICAgcmV0dXJuIC1VTldfRUJBRFJFRzsKKysKKysgIGlmIChEV0FSRl9JU19SRUdfTE9DIChsb2MpKQorKyAgICByZXR1cm4gKCpjLT5hcy0+YWNjLmFjY2Vzc19mcHJlZykgKGMtPmFzLCBEV0FSRl9HRVRfTE9DIChsb2MpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCwgMCwgYy0+YXNfYXJnKTsKKysKKysgIGFkZHIgPSBEV0FSRl9HRVRfTE9DIChsb2MpOworKyAgaWYgKChyZXQgPSAoKmMtPmFzLT5hY2MuYWNjZXNzX21lbSkgKGMtPmFzLCBhZGRyICsgMCwgKHVud193b3JkX3QgKikgdmFscCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBjLT5hc19hcmcpKSA8IDApCisrICAgIHJldHVybiByZXQ7CisrCisrICByZXR1cm4gKCpjLT5hcy0+YWNjLmFjY2Vzc19tZW0pIChjLT5hcywgYWRkciArIDQsICh1bndfd29yZF90ICopIHZhbHAgKyAxLCAwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+YXNfYXJnKTsKKyt9CisrCisrc3RhdGljIGlubGluZSBpbnQKKytkd2FyZl9wdXRmcCAoc3RydWN0IGR3YXJmX2N1cnNvciAqYywgZHdhcmZfbG9jX3QgbG9jLCB1bndfZnByZWdfdCB2YWwpCisreworKyAgY2hhciAqdmFscCA9IChjaGFyICopICZ2YWw7CisrICB1bndfd29yZF90IGFkZHI7CisrICBpbnQgcmV0OworKworKyAgaWYgKERXQVJGX0lTX05VTExfTE9DIChsb2MpKQorKyAgICByZXR1cm4gLVVOV19FQkFEUkVHOworKworKyAgaWYgKERXQVJGX0lTX1JFR19MT0MgKGxvYykpCisrICAgIHJldHVybiAoKmMtPmFzLT5hY2MuYWNjZXNzX2ZwcmVnKSAoYy0+YXMsIERXQVJGX0dFVF9MT0MgKGxvYyksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhbCwgMSwgYy0+YXNfYXJnKTsKKysKKysgIGFkZHIgPSBEV0FSRl9HRVRfTE9DIChsb2MpOworKyAgaWYgKChyZXQgPSAoKmMtPmFzLT5hY2MuYWNjZXNzX21lbSkgKGMtPmFzLCBhZGRyICsgMCwgKHVud193b3JkX3QgKikgdmFscCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBjLT5hc19hcmcpKSA8IDApCisrICAgIHJldHVybiByZXQ7CisrCisrICByZXR1cm4gKCpjLT5hcy0+YWNjLmFjY2Vzc19tZW0pIChjLT5hcywgYWRkciArIDQsICh1bndfd29yZF90ICopIHZhbHAgKyAxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgYy0+YXNfYXJnKTsKKyt9CisrCisrc3RhdGljIGlubGluZSBpbnQKKytkd2FyZl9nZXQgKHN0cnVjdCBkd2FyZl9jdXJzb3IgKmMsIGR3YXJmX2xvY190IGxvYywgdW53X3dvcmRfdCAqdmFsKQorK3sKKysgIGlmIChEV0FSRl9JU19OVUxMX0xPQyAobG9jKSkKKysgICAgcmV0dXJuIC1VTldfRUJBRFJFRzsKKysKKysgIC8qIElmIGEgY29kZS1nZW5lcmF0b3Igd2VyZSB0byBzYXZlIGEgdmFsdWUgb2YgdHlwZSB1bndfd29yZF90IGluIGEKKysgICAgIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyLCB3ZSB3b3VsZCBoYXZlIHRvIHN1cHBvcnQgdGhpcyBjYXNlLiAgSQorKyAgICAgc3VwcG9zZSBpdCBjb3VsZCBoYXBwZW4gd2l0aCBNTVggcmVnaXN0ZXJzLCBidXQgZG9lcyBpdCByZWFsbHkKKysgICAgIGhhcHBlbj8gICovCisrICBhc3NlcnQgKCFEV0FSRl9JU19GUF9MT0MgKGxvYykpOworKworKyAgaWYgKERXQVJGX0lTX1JFR19MT0MgKGxvYykpCisrICAgIHJldHVybiAoKmMtPmFzLT5hY2MuYWNjZXNzX3JlZykgKGMtPmFzLCBEV0FSRl9HRVRfTE9DIChsb2MpLCB2YWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGMtPmFzX2FyZyk7CisrICBlbHNlCisrICAgIHJldHVybiAoKmMtPmFzLT5hY2MuYWNjZXNzX21lbSkgKGMtPmFzLCBEV0FSRl9HRVRfTE9DIChsb2MpLCB2YWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGMtPmFzX2FyZyk7CisrfQorKworK3N0YXRpYyBpbmxpbmUgaW50CisrZHdhcmZfcHV0IChzdHJ1Y3QgZHdhcmZfY3Vyc29yICpjLCBkd2FyZl9sb2NfdCBsb2MsIHVud193b3JkX3QgdmFsKQorK3sKKysgIGlmIChEV0FSRl9JU19OVUxMX0xPQyAobG9jKSkKKysgICAgcmV0dXJuIC1VTldfRUJBRFJFRzsKKysKKysgIC8qIElmIGEgY29kZS1nZW5lcmF0b3Igd2VyZSB0byBzYXZlIGEgdmFsdWUgb2YgdHlwZSB1bndfd29yZF90IGluIGEKKysgICAgIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyLCB3ZSB3b3VsZCBoYXZlIHRvIHN1cHBvcnQgdGhpcyBjYXNlLiAgSQorKyAgICAgc3VwcG9zZSBpdCBjb3VsZCBoYXBwZW4gd2l0aCBNTVggcmVnaXN0ZXJzLCBidXQgZG9lcyBpdCByZWFsbHkKKysgICAgIGhhcHBlbj8gICovCisrICBhc3NlcnQgKCFEV0FSRl9JU19GUF9MT0MgKGxvYykpOworKworKyAgaWYgKERXQVJGX0lTX1JFR19MT0MgKGxvYykpCisrICAgIHJldHVybiAoKmMtPmFzLT5hY2MuYWNjZXNzX3JlZykgKGMtPmFzLCBEV0FSRl9HRVRfTE9DIChsb2MpLCAmdmFsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBjLT5hc19hcmcpOworKyAgZWxzZQorKyAgICByZXR1cm4gKCpjLT5hcy0+YWNjLmFjY2Vzc19tZW0pIChjLT5hcywgRFdBUkZfR0VUX0xPQyAobG9jKSwgJnZhbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgYy0+YXNfYXJnKTsKKyt9CisrCisrI2VuZGlmIC8qICFVTldfTE9DQUxfT05MWSAqLworKworKworKworKyNkZWZpbmUgdGRlcF9nZXRjb250ZXh0X3RyYWNlICAgICAgICAgICB1bndfZ2V0Y29udGV4dAorKyNkZWZpbmUgdGRlcF9pbml0X2RvbmUJCQlVTldfT0JKKGluaXRfZG9uZSkKKysjZGVmaW5lIHRkZXBfaW5pdAkJCVVOV19PQkooaW5pdCkKKysvKiBQbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IFVOV19JTkZPX0ZPUk1BVF9UQUJMRSBuZWVkIHRvIGRlZmluZQorKyAgIHRkZXBfc2VhcmNoX3Vud2luZF90YWJsZS4gICovCisrI2RlZmluZSB0ZGVwX3NlYXJjaF91bndpbmRfdGFibGUJZHdhcmZfc2VhcmNoX3Vud2luZF90YWJsZQorKyNkZWZpbmUgdGRlcF9maW5kX3Vud2luZF90YWJsZQkgICAgICAgIGR3YXJmX2ZpbmRfdW53aW5kX3RhYmxlCisrI2RlZmluZSB0ZGVwX3VjX2FkZHIJCQlVTldfT0JKKHVjX2FkZHIpCisrI2RlZmluZSB0ZGVwX2dldF9lbGZfaW1hZ2UJCVVOV19BUkNIX09CSihnZXRfZWxmX2ltYWdlKQorKyNkZWZpbmUgdGRlcF9hY2Nlc3NfcmVnCQkJVU5XX09CSihhY2Nlc3NfcmVnKQorKyNkZWZpbmUgdGRlcF9hY2Nlc3NfZnByZWcJCVVOV19PQkooYWNjZXNzX2ZwcmVnKQorKyNkZWZpbmUgdGRlcF9mZXRjaF9mcmFtZShjLGlwLG4pCWRvIHt9IHdoaWxlKDApCisrI2RlZmluZSB0ZGVwX2NhY2hlX2ZyYW1lKGMscnMpCQlkbyB7fSB3aGlsZSgwKQorKyNkZWZpbmUgdGRlcF9yZXVzZV9mcmFtZShjLHJzKQkJZG8ge30gd2hpbGUoMCkKKysjZGVmaW5lIHRkZXBfc3Rhc2hfZnJhbWUoYyxycykJCWRvIHt9IHdoaWxlKDApCisrI2RlZmluZSB0ZGVwX3RyYWNlKGN1cixhZGRyLG4pCQkoLVVOV19FTk9JTkZPKQorKworKyNpZmRlZiBVTldfTE9DQUxfT05MWQorKyMgZGVmaW5lIHRkZXBfZmluZF9wcm9jX2luZm8oYyxpcCxuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBkd2FyZl9maW5kX3Byb2NfaW5mbygoYyktPmFzLCAoaXApLCAmKGMpLT5waSwgKG4pLCAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYyktPmFzX2FyZykKKysjIGRlZmluZSB0ZGVwX3B1dF91bndpbmRfaW5mbyhhcyxwaSxhcmcpICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGR3YXJmX3B1dF91bndpbmRfaW5mbygoYXMpLCAocGkpLCAoYXJnKSkKKysjZWxzZQorKyMgZGVmaW5lIHRkZXBfZmluZF9wcm9jX2luZm8oYyxpcCxuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICgqKGMpLT5hcy0+YWNjLmZpbmRfcHJvY19pbmZvKSgoYyktPmFzLCAoaXApLCAmKGMpLT5waSwgKG4pLCAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGMpLT5hc19hcmcpCisrIyBkZWZpbmUgdGRlcF9wdXRfdW53aW5kX2luZm8oYXMscGksYXJnKSAgICAgICAgICAgICAgICBcCisrICAgICAgICAoKihhcyktPmFjYy5wdXRfdW53aW5kX2luZm8pKChhcyksIChwaSksIChhcmcpKQorKyNlbmRpZgorKworKyNkZWZpbmUgdGRlcF9nZXRfYXMoYykgICAgICAgICAgICAgICAgICAoKGMpLT5kd2FyZi5hcykKKysjZGVmaW5lIHRkZXBfZ2V0X2FzX2FyZyhjKSAgICAgICAgICAgICAgKChjKS0+ZHdhcmYuYXNfYXJnKQorKyNkZWZpbmUgdGRlcF9nZXRfaXAoYykgICAgICAgICAgICAgICAgICAoKGMpLT5kd2FyZi5pcCkKKysjZGVmaW5lIHRkZXBfYmlnX2VuZGlhbihhcykgICAgICAgICAgICAgKChhcyktPmJpZ19lbmRpYW4pCisrCisrZXh0ZXJuIGludCB0ZGVwX2luaXRfZG9uZTsKKysKKytleHRlcm4gdm9pZCB0ZGVwX2luaXQgKHZvaWQpOworK2V4dGVybiBpbnQgdGRlcF9zZWFyY2hfdW53aW5kX3RhYmxlICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfd29yZF90IGlwLAorKwkJCQkgICAgIHVud19keW5faW5mb190ICpkaSwgdW53X3Byb2NfaW5mb190ICpwaSwKKysJCQkJICAgICBpbnQgbmVlZF91bndpbmRfaW5mbywgdm9pZCAqYXJnKTsKKytleHRlcm4gdm9pZCAqdGRlcF91Y19hZGRyICh1bndfdGRlcF9jb250ZXh0X3QgKnVjLCBpbnQgcmVnKTsKKytleHRlcm4gaW50IHRkZXBfZ2V0X2VsZl9pbWFnZSAoc3RydWN0IGVsZl9pbWFnZSAqZWksIHBpZF90IHBpZCwgdW53X3dvcmRfdCBpcCwKKysJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqc2VnYmFzZSwgdW5zaWduZWQgbG9uZyAqbWFwb2ZmLAorKwkJCSAgICAgICBjaGFyICpwYXRoLCBzaXplX3QgcGF0aGxlbik7CisrZXh0ZXJuIGludCB0ZGVwX2FjY2Vzc19yZWcgKHN0cnVjdCBjdXJzb3IgKmMsIHVud19yZWdudW1fdCByZWcsCisrCQkJICAgIHVud193b3JkX3QgKnZhbHAsIGludCB3cml0ZSk7CisrZXh0ZXJuIGludCB0ZGVwX2FjY2Vzc19mcHJlZyAoc3RydWN0IGN1cnNvciAqYywgdW53X3JlZ251bV90IHJlZywKKysJCQkgICAgICB1bndfZnByZWdfdCAqdmFscCwgaW50IHdyaXRlKTsKKysKKysjZW5kaWYgLyogQUFSQ0g2NF9MSUJVTldJTkRfSV9IICovCistLS0gYS9pbmNsdWRlL3RkZXAvZHdhcmYtY29uZmlnLmgKKysrKyBiL2luY2x1ZGUvdGRlcC9kd2FyZi1jb25maWcuaAorQEAgLTEsNyArMSw5IEBACisgLyogUHJvdmlkZSBhIHJlYWwgZmlsZSAtIG5vdCBhIHN5bWxpbmsgLSBhcyBpdCB3b3VsZCBjYXVzZSBtdWx0aWFyY2ggY29uZmxpY3RzCisgICAgd2hlbiBtdWx0aXBsZSBkaWZmZXJlbnQgYXJjaCByZWxlYXNlcyBhcmUgaW5zdGFsbGVkIHNpbXVsdGFuZW91c2x5LiAgKi8KKyAKKy0jaWYgZGVmaW5lZCBfX2FybV9fCisrI2lmIGRlZmluZWQgX19hYXJjaDY0X18KKysjIGluY2x1ZGUgInRkZXAtYWFyY2g2NC9kd2FyZi1jb25maWcuaCIKKysjZWxpZiBkZWZpbmVkIF9fYXJtX18KKyAjIGluY2x1ZGUgInRkZXAtYXJtL2R3YXJmLWNvbmZpZy5oIgorICNlbGlmIGRlZmluZWQgX19ocHBhX18KKyAjIGluY2x1ZGUgInRkZXAtaHBwYS9kd2FyZi1jb25maWcuaCIKKy0tLSBhL2luY2x1ZGUvdGRlcC9qbXBidWYuaAorKysrIGIvaW5jbHVkZS90ZGVwL2ptcGJ1Zi5oCitAQCAtMyw2ICszLDggQEAKKyAKKyAjaWZuZGVmIFVOV19SRU1PVEVfT05MWQorIAorKyNpZiBkZWZpbmVkIF9fYWFyY2g2NF9fCisrIyBpbmNsdWRlICJ0ZGVwLWFhcmNoNjQvam1wYnVmLmgiCisgI2lmIGRlZmluZWQgX19hcm1fXworICMgaW5jbHVkZSAidGRlcC1hcm0vam1wYnVmLmgiCisgI2VsaWYgZGVmaW5lZCBfX2hwcGFfXworLS0tIGEvaW5jbHVkZS90ZGVwL2xpYnVud2luZF9pLmguaW4KKysrKyBiL2luY2x1ZGUvdGRlcC9saWJ1bndpbmRfaS5oLmluCitAQCAtMyw3ICszLDkgQEAKKyAKKyAjaWZuZGVmIFVOV19SRU1PVEVfT05MWQorIAorLSNpZiBkZWZpbmVkIF9fYXJtX18KKysjaWYgZGVmaW5lZCBfX2FhcmNoNjRfXworKyMgaW5jbHVkZSAidGRlcC1hYXJjaDY0L2xpYnVud2luZF9pLmgiCisrI2VsaWYgZGVmaW5lZCBfX2FybV9fCisgIyBpbmNsdWRlICJ0ZGVwLWFybS9saWJ1bndpbmRfaS5oIgorICNlbGlmIGRlZmluZWQgX19ocHBhX18KKyAjIGluY2x1ZGUgInRkZXAtaHBwYS9saWJ1bndpbmRfaS5oIgorLS0tIGEvc3JjL01ha2VmaWxlLmFtCisrKysgYi9zcmMvTWFrZWZpbGUuYW0KK0BAIC0xNzAsNiArMTcwLDI4IEBAIGxpYnVud2luZF9lbGZ4eF9sYV9TT1VSQ0VTID0gZWxmeHguYworIG5vaW5zdF9MVExJQlJBUklFUyArPSAkKExJQlVOV0lORF9FTEYpCisgbGlidW53aW5kX2xhX0xJQkFERCArPSAkKExJQlVOV0lORF9FTEYpCisgCisrIyBUaGUgbGlzdCBvZiBmaWxlcyB0aGF0IGdvIGludG8gbGlidW53aW5kIGFuZCBsaWJ1bndpbmQtYWFyY2g2NDoKKytub2luc3RfSEVBREVSUyArPSBhYXJjaDY0L2luaXQuaCBhYXJjaDY0L29mZnNldHMuaCBhYXJjaDY0L3Vud2luZF9pLmgKKytsaWJ1bndpbmRfbGFfU09VUkNFU19hYXJjaDY0X2NvbW1vbiA9ICQobGlidW53aW5kX2xhX1NPVVJDRVNfY29tbW9uKQkgICAgXAorKwlhYXJjaDY0L2lzX2ZwcmVnLmMgYWFyY2g2NC9yZWduYW1lLmMKKysKKysjIFRoZSBsaXN0IG9mIGZpbGVzIHRoYXQgZ28gaW50byBsaWJ1bndpbmQ6CisrbGlidW53aW5kX2xhX1NPVVJDRVNfYWFyY2g2NCA9ICQobGlidW53aW5kX2xhX1NPVVJDRVNfYWFyY2g2NF9jb21tb24pCSAgICBcCisrCSQobGlidW53aW5kX2xhX1NPVVJDRVNfbG9jYWwpCQkJCQkgICAgXAorKwlhYXJjaDY0L0xjcmVhdGVfYWRkcl9zcGFjZS5jIGFhcmNoNjQvTGdldF9wcm9jX2luZm8uYyAJCSAgICBcCisrCWFhcmNoNjQvTGdldF9zYXZlX2xvYy5jIGFhcmNoNjQvTGdsb2JhbC5jIGFhcmNoNjQvTGluaXQuYwkgICAgXAorKwlhYXJjaDY0L0xpbml0X2xvY2FsLmMgYWFyY2g2NC9MaW5pdF9yZW1vdGUuYyAJCQkgICAgXAorKwlhYXJjaDY0L0xpc19zaWduYWxfZnJhbWUuYyBhYXJjaDY0L0xyZWdzLmMgYWFyY2g2NC9McmVzdW1lLmMgCSAgICBcCisrCWFhcmNoNjQvTHN0ZXAuYworKworK2xpYnVud2luZF9hYXJjaDY0X2xhX1NPVVJDRVNfYWFyY2g2NCA9ICQobGlidW53aW5kX2xhX1NPVVJDRVNfYWFyY2g2NF9jb21tb24pIFwKKysJJChsaWJ1bndpbmRfbGFfU09VUkNFU19nZW5lcmljKQkJCQkJICAgICAgXAorKwlhYXJjaDY0L0djcmVhdGVfYWRkcl9zcGFjZS5jIGFhcmNoNjQvR2dldF9wcm9jX2luZm8uYyAJCSAgICAgIFwKKysJYWFyY2g2NC9HZ2V0X3NhdmVfbG9jLmMgYWFyY2g2NC9HZ2xvYmFsLmMgYWFyY2g2NC9HaW5pdC5jIAkgICAgICBcCisrCWFhcmNoNjQvR2luaXRfbG9jYWwuYyBhYXJjaDY0L0dpbml0X3JlbW90ZS5jCQkJICAgICAgXAorKwlhYXJjaDY0L0dpc19zaWduYWxfZnJhbWUuYyBhYXJjaDY0L0dyZWdzLmMgYWFyY2g2NC9HcmVzdW1lLmMJICAgICAgXAorKwlhYXJjaDY0L0dzdGVwLmMKKysKKyAjIFRoZSBsaXN0IG9mIGZpbGVzIHRoYXQgZ28gaW50byBsaWJ1bndpbmQgYW5kIGxpYnVud2luZC1hcm06Cisgbm9pbnN0X0hFQURFUlMgKz0gYXJtL2luaXQuaCBhcm0vb2Zmc2V0cy5oIGFybS91bndpbmRfaS5oCisgbGlidW53aW5kX2xhX1NPVVJDRVNfYXJtX2NvbW1vbiA9ICQobGlidW53aW5kX2xhX1NPVVJDRVNfY29tbW9uKQkgICAgXAorQEAgLTQxOCw2ICs0NDAsMTggQEAgaWYgT1NfRlJFRUJTRAorICBsaWJ1bndpbmRfY29yZWR1bXBfbGFfU09VUkNFUyArPSBjb3JlZHVtcC9fVUNEX2FjY2Vzc19yZWdfZnJlZWJzZC5jCisgZW5kaWYKKyAKKytpZiBBUkNIX0FBUkNINjQKKysgbGliX0xUTElCUkFSSUVTICs9IGxpYnVud2luZC1hYXJjaDY0LmxhCisrIGxpYnVud2luZF9sYV9TT1VSQ0VTID0gJChsaWJ1bndpbmRfbGFfU09VUkNFU19hYXJjaDY0KQorKyBsaWJ1bndpbmRfYWFyY2g2NF9sYV9TT1VSQ0VTID0gJChsaWJ1bndpbmRfYWFyY2g2NF9sYV9TT1VSQ0VTX2FhcmNoNjQpCisrIGxpYnVud2luZF9hYXJjaDY0X2xhX0xERkxBR1MgPSAkKENPTU1PTl9TT19MREZMQUdTKSAtdmVyc2lvbi1pbmZvICQoU09WRVJTSU9OKQorKyBsaWJ1bndpbmRfYWFyY2g2NF9sYV9MSUJBREQgPSBsaWJ1bndpbmQtZHdhcmYtZ2VuZXJpYy5sYQorKyBsaWJ1bndpbmRfYWFyY2g2NF9sYV9MSUJBREQgKz0gbGlidW53aW5kLWVsZjY0LmxhCisraWYgIVJFTU9URV9PTkxZCisrIGxpYnVud2luZF9hYXJjaDY0X2xhX0xJQkFERCArPSBsaWJ1bndpbmQubGEgLWxjCisrZW5kaWYKKysgbGlidW53aW5kX3NldGptcF9sYV9TT1VSQ0VTICs9IGFhcmNoNjQvc2lnbG9uZ2ptcC5TCisrZWxzZQorIGlmIEFSQ0hfQVJNCisgIGxpYl9MVExJQlJBUklFUyArPSBsaWJ1bndpbmQtYXJtLmxhCisgIGxpYnVud2luZF9sYV9TT1VSQ0VTID0gJChsaWJ1bndpbmRfbGFfU09VUkNFU19hcm0pCitAQCAtNTQ1LDYgKzU3OSw3IEBAIGVuZGlmICMgQVJDSF9NSVBTCisgZW5kaWYgIyBBUkNIX0hQUEEKKyBlbmRpZiAjIEFSQ0hfSUE2NAorIGVuZGlmICMgQVJDSF9BUk0KKytlbmRpZiAjIEFSQ0hfQUFSQ0g2NAorIAorICMgbGlidW53aW5kLXNldGptcCBkZXBlbmRzIG9uIGxpYnVud2luZC0kKGFyY2gpLiBUaGVyZWZvcmUgbXVzdCBiZSBhZGRlZAorICMgYXQgdGhlIGVuZC4KK0BAIC01NjcsNyArNjAyLDggQEAgQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAtSQorIEFNX0NDQVNGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpCisgbm9pbnN0X0hFQURFUlMgKz0gdW53aW5kL3Vud2luZC1pbnRlcm5hbC5oCisgCistRVhUUkFfRElTVCA9CSQobGlidW53aW5kX2xhX1NPVVJDRVNfYXJtKQkJCVwKKytFWFRSQV9ESVNUID0JJChsaWJ1bndpbmRfbGFfU09VUkNFU19hYXJjaDY0KQkJCVwKKysJCSQobGlidW53aW5kX2xhX1NPVVJDRVNfYXJtKQkJCVwKKyAJCSQobGlidW53aW5kX2xhX1NPVVJDRVNfaHBwYSkJCQlcCisgCQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2lhNjQpCQkJXAorIAkJJChsaWJ1bndpbmRfbGFfU09VUkNFU19taXBzKQkJCVwKK0BAIC01NzksNiArNjE1LDcgQEAgRVhUUkFfRElTVCA9CSQobGlidW53aW5kX2xhX1NPVVJDRVNfYXJtKQorIAkJJChsaWJ1bndpbmRfbGFfU09VUkNFU19jb21tb24pCQkJXAorIAkJJChsaWJ1bndpbmRfbGFfU09VUkNFU19sb2NhbCkJCQlcCisgCQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2dlbmVyaWMpCQkJXAorKwkJJChsaWJ1bndpbmRfYWFyY2g2NF9sYV9TT1VSQ0VTX2FhcmNoNjQpCQlcCisgCQkkKGxpYnVud2luZF9hcm1fbGFfU09VUkNFU19hcm0pCQkJXAorIAkJJChsaWJ1bndpbmRfaHBwYV9sYV9TT1VSQ0VTX2hwcGEpCQlcCisgCQkkKGxpYnVud2luZF9pYTY0X2xhX1NPVVJDRVNfaWE2NCkJCVwKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0djcmVhdGVfYWRkcl9zcGFjZS5jCitAQCAtMCwwICsxLDYwIEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrCisrUFJPVEVDVEVEIHVud19hZGRyX3NwYWNlX3QKKyt1bndfY3JlYXRlX2FkZHJfc3BhY2UgKHVud19hY2Nlc3NvcnNfdCAqYSwgaW50IGJ5dGVfb3JkZXIpCisreworKyNpZmRlZiBVTldfTE9DQUxfT05MWQorKyAgcmV0dXJuIE5VTEw7CisrI2Vsc2UKKysgIHVud19hZGRyX3NwYWNlX3QgYXM7CisrCisrICAvKiBBQXJjaDY0IHN1cHBvcnRzIGxpdHRsZS1lbmRpYW4gYW5kIGJpZy1lbmRpYW4uICovCisrICBpZiAoYnl0ZV9vcmRlciAhPSAwICYmIGJ5dGVfb3JkZXIgIT0gX19MSVRUTEVfRU5ESUFOCisrICAgICAgJiYgYnl0ZV9vcmRlciAhPSBfX0JJR19FTkRJQU4pCisrICAgIHJldHVybiBOVUxMOworKworKyAgYXMgPSBtYWxsb2MgKHNpemVvZiAoKmFzKSk7CisrICBpZiAoIWFzKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIG1lbXNldCAoYXMsIDAsIHNpemVvZiAoKmFzKSk7CisrCisrICBhcy0+YWNjID0gKmE7CisrCisrICAvKiBEZWZhdWx0IHRvIGxpdHRsZS1lbmRpYW4gZm9yIEFBcmNoNjQuICovCisrICBpZiAoYnl0ZV9vcmRlciA9PSAwIHx8IGJ5dGVfb3JkZXIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICBhcy0+YmlnX2VuZGlhbiA9IDA7CisrICBlbHNlCisrICAgIGFzLT5iaWdfZW5kaWFuID0gMTsKKysKKysgIHJldHVybiBhczsKKysjZW5kaWYKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9HZ2V0X3Byb2NfaW5mby5jCitAQCAtMCwwICsxLDM5IEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpbmNsdWRlICJ1bndpbmRfaS5oIgorKworK1BST1RFQ1RFRCBpbnQKKyt1bndfZ2V0X3Byb2NfaW5mbyAodW53X2N1cnNvcl90ICpjdXJzb3IsIHVud19wcm9jX2luZm9fdCAqcGkpCisreworKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKKysgIGludCByZXQ7CisrCisrICByZXQgPSBkd2FyZl9tYWtlX3Byb2NfaW5mbyAoJmMtPmR3YXJmKTsKKysgIGlmIChyZXQgPCAwKQorKyAgICByZXR1cm4gcmV0OworKworKyAgKnBpID0gYy0+ZHdhcmYucGk7CisrICByZXR1cm4gMDsKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9HZ2V0X3NhdmVfbG9jLmMKK0BAIC0wLDAgKzEsMTAwIEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysKKytQUk9URUNURUQgaW50CisrdW53X2dldF9zYXZlX2xvYyAodW53X2N1cnNvcl90ICpjdXJzb3IsIGludCByZWcsIHVud19zYXZlX2xvY190ICpzbG9jKQorK3sKKysgIHN0cnVjdCBjdXJzb3IgKmMgPSAoc3RydWN0IGN1cnNvciAqKSBjdXJzb3I7CisrICBkd2FyZl9sb2NfdCBsb2M7CisrCisrICBzd2l0Y2ggKHJlZykKKysgICAgeworKyAgICBjYXNlIFVOV19BQVJDSDY0X1gwOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gzOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1g0OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1g1OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1g2OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1g3OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1g4OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1g5OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxMDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTE6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDEyOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxMzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTQ6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE1OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxNjoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTc6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE4OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxOToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjA6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDIxOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyMjoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjM6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI0OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyNToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjY6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI3OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyODoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjk6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDMwOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1NQOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1BDOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1BTVEFURToKKysgICAgICBsb2MgPSBjLT5kd2FyZi5sb2NbcmVnXTsKKysgICAgICBicmVhazsKKysKKysgICAgZGVmYXVsdDoKKysgICAgICBsb2MgPSBEV0FSRl9OVUxMX0xPQzsJLyogZGVmYXVsdCB0byAibm90IHNhdmVkIiAqLworKyAgICAgIGJyZWFrOworKyAgICB9CisrCisrICBtZW1zZXQgKHNsb2MsIDAsIHNpemVvZiAoKnNsb2MpKTsKKysKKysgIGlmIChEV0FSRl9JU19OVUxMX0xPQyAobG9jKSkKKysgICAgeworKyAgICAgIHNsb2MtPnR5cGUgPSBVTldfU0xUX05PTkU7CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysjaWYgIWRlZmluZWQoVU5XX0xPQ0FMX09OTFkpCisrICBpZiAoRFdBUkZfSVNfUkVHX0xPQyAobG9jKSkKKysgICAgeworKyAgICAgIHNsb2MtPnR5cGUgPSBVTldfU0xUX1JFRzsKKysgICAgICBzbG9jLT51LnJlZ251bSA9IERXQVJGX0dFVF9MT0MgKGxvYyk7CisrICAgIH0KKysgIGVsc2UKKysjZW5kaWYKKysgICAgeworKyAgICAgIHNsb2MtPnR5cGUgPSBVTldfU0xUX01FTU9SWTsKKysgICAgICBzbG9jLT51LmFkZHIgPSBEV0FSRl9HRVRfTE9DIChsb2MpOworKyAgICB9CisrICByZXR1cm4gMDsKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9HZ2xvYmFsLmMKK0BAIC0wLDAgKzEsNTcgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpbmNsdWRlICJ1bndpbmRfaS5oIgorKyNpbmNsdWRlICJkd2FyZl9pLmgiCisrCisrSElEREVOIGRlZmluZV9sb2NrIChhYXJjaDY0X2xvY2spOworK0hJRERFTiBpbnQgdGRlcF9pbml0X2RvbmU7CisrCisrSElEREVOIHZvaWQKKyt0ZGVwX2luaXQgKHZvaWQpCisreworKyAgaW50cm1hc2tfdCBzYXZlZF9tYXNrOworKworKyAgc2lnZmlsbHNldCAoJnVud2lfZnVsbF9tYXNrKTsKKysKKysgIGxvY2tfYWNxdWlyZSAoJmFhcmNoNjRfbG9jaywgc2F2ZWRfbWFzayk7CisrICB7CisrICAgIGlmICh0ZGVwX2luaXRfZG9uZSkKKysgICAgICAvKiBhbm90aGVyIHRocmVhZCBlbHNlIGJlYXQgdXMgdG8gaXQuLi4gKi8KKysgICAgICBnb3RvIG91dDsKKysKKysgICAgbWlfaW5pdCAoKTsKKysKKysgICAgZHdhcmZfaW5pdCAoKTsKKysKKysjaWZuZGVmIFVOV19SRU1PVEVfT05MWQorKyAgICBhYXJjaDY0X2xvY2FsX2FkZHJfc3BhY2VfaW5pdCAoKTsKKysjZW5kaWYKKysgICAgdGRlcF9pbml0X2RvbmUgPSAxOwkvKiBzaWduYWwgdGhhdCB3ZSdyZSBpbml0aWFsaXplZC4uLiAqLworKyAgfQorKyBvdXQ6CisrICBsb2NrX3JlbGVhc2UgKCZhYXJjaDY0X2xvY2ssIHNhdmVkX21hc2spOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0dpbml0LmMKK0BAIC0wLDAgKzEsMTg3IEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworKyNpbmNsdWRlICJ1bndpbmRfaS5oIgorKworKyNpZmRlZiBVTldfUkVNT1RFX09OTFkKKysKKysvKiB1bndfbG9jYWxfYWRkcl9zcGFjZSBpcyBhIE5VTEwgcG9pbnRlciBpbiB0aGlzIGNhc2UuICAqLworK1BST1RFQ1RFRCB1bndfYWRkcl9zcGFjZV90IHVud19sb2NhbF9hZGRyX3NwYWNlOworKworKyNlbHNlIC8qICFVTldfUkVNT1RFX09OTFkgKi8KKysKKytzdGF0aWMgc3RydWN0IHVud19hZGRyX3NwYWNlIGxvY2FsX2FkZHJfc3BhY2U7CisrCisrUFJPVEVDVEVEIHVud19hZGRyX3NwYWNlX3QgdW53X2xvY2FsX2FkZHJfc3BhY2UgPSAmbG9jYWxfYWRkcl9zcGFjZTsKKysKKytzdGF0aWMgaW5saW5lIHZvaWQgKgorK3VjX2FkZHIgKHVjb250ZXh0X3QgKnVjLCBpbnQgcmVnKQorK3sKKysgIGlmIChyZWcgPj0gVU5XX0FBUkNINjRfWDAgJiYgcmVnIDw9IFVOV19BQVJDSDY0X1YzMSkKKysgICAgcmV0dXJuICZ1Yy0+dWNfbWNvbnRleHQucmVnc1tyZWddOworKyAgZWxzZQorKyAgICByZXR1cm4gTlVMTDsKKyt9CisrCisrIyBpZmRlZiBVTldfTE9DQUxfT05MWQorKworK0hJRERFTiB2b2lkICoKKyt0ZGVwX3VjX2FkZHIgKHVjb250ZXh0X3QgKnVjLCBpbnQgcmVnKQorK3sKKysgIHJldHVybiB1Y19hZGRyICh1YywgcmVnKTsKKyt9CisrCisrIyBlbmRpZiAvKiBVTldfTE9DQUxfT05MWSAqLworKworK0hJRERFTiB1bndfZHluX2luZm9fbGlzdF90IF9VX2R5bl9pbmZvX2xpc3Q7CisrCisrLyogWFhYIGZpeCBtZTogdGhlcmUgaXMgY3VycmVudGx5IG5vIHdheSB0byBsb2NhdGUgdGhlIGR5bi1pbmZvIGxpc3QKKysgICAgICAgYnkgYSByZW1vdGUgdW53aW5kZXIuICBPbiBpYTY0LCB0aGlzIGlzIGRvbmUgdmlhIGEgc3BlY2lhbAorKyAgICAgICB1bndpbmQtdGFibGUgZW50cnkuICBQZXJoYXBzIHNvbWV0aGluZyBzaW1pbGFyIGNhbiBiZSBkb25lIHdpdGgKKysgICAgICAgRFdBUkYyIHVud2luZCBpbmZvLiAgKi8KKysKKytzdGF0aWMgdm9pZAorK3B1dF91bndpbmRfaW5mbyAodW53X2FkZHJfc3BhY2VfdCBhcywgdW53X3Byb2NfaW5mb190ICpwcm9jX2luZm8sIHZvaWQgKmFyZykKKyt7CisrICAvKiBpdCdzIGEgbm8tb3AgKi8KKyt9CisrCisrc3RhdGljIGludAorK2dldF9keW5faW5mb19saXN0X2FkZHIgKHVud19hZGRyX3NwYWNlX3QgYXMsIHVud193b3JkX3QgKmR5bl9pbmZvX2xpc3RfYWRkciwKKysJCQl2b2lkICphcmcpCisreworKyAgKmR5bl9pbmZvX2xpc3RfYWRkciA9ICh1bndfd29yZF90KSAmX1VfZHluX2luZm9fbGlzdDsKKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50CisrYWNjZXNzX21lbSAodW53X2FkZHJfc3BhY2VfdCBhcywgdW53X3dvcmRfdCBhZGRyLCB1bndfd29yZF90ICp2YWwsIGludCB3cml0ZSwKKysJICAgIHZvaWQgKmFyZykKKyt7CisrICBpZiAod3JpdGUpCisrICAgIHsKKysgICAgICBEZWJ1ZyAoMTYsICJtZW1bJWx4XSA8LSAlbHhcbiIsIGFkZHIsICp2YWwpOworKyAgICAgICoodW53X3dvcmRfdCAqKSBhZGRyID0gKnZhbDsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgKnZhbCA9ICoodW53X3dvcmRfdCAqKSBhZGRyOworKyAgICAgIERlYnVnICgxNiwgIm1lbVslbHhdIC0+ICVseFxuIiwgYWRkciwgKnZhbCk7CisrICAgIH0KKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50CisrYWNjZXNzX3JlZyAodW53X2FkZHJfc3BhY2VfdCBhcywgdW53X3JlZ251bV90IHJlZywgdW53X3dvcmRfdCAqdmFsLCBpbnQgd3JpdGUsCisrCSAgICB2b2lkICphcmcpCisreworKyAgdW53X3dvcmRfdCAqYWRkcjsKKysgIHVjb250ZXh0X3QgKnVjID0gYXJnOworKworKyAgaWYgKHVud19pc19mcHJlZyAocmVnKSkKKysgICAgZ290byBiYWRyZWc7CisrCisrICBpZiAoIShhZGRyID0gdWNfYWRkciAodWMsIHJlZykpKQorKyAgICBnb3RvIGJhZHJlZzsKKysKKysgIGlmICh3cml0ZSkKKysgICAgeworKyAgICAgICoodW53X3dvcmRfdCAqKSBhZGRyID0gKnZhbDsKKysgICAgICBEZWJ1ZyAoMTIsICIlcyA8LSAlbHhcbiIsIHVud19yZWduYW1lIChyZWcpLCAqdmFsKTsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgKnZhbCA9ICoodW53X3dvcmRfdCAqKSBhZGRyOworKyAgICAgIERlYnVnICgxMiwgIiVzIC0+ICVseFxuIiwgdW53X3JlZ25hbWUgKHJlZyksICp2YWwpOworKyAgICB9CisrICByZXR1cm4gMDsKKysKKysgYmFkcmVnOgorKyAgRGVidWcgKDEsICJiYWQgcmVnaXN0ZXIgbnVtYmVyICV1XG4iLCByZWcpOworKyAgcmV0dXJuIC1VTldfRUJBRFJFRzsKKyt9CisrCisrc3RhdGljIGludAorK2FjY2Vzc19mcHJlZyAodW53X2FkZHJfc3BhY2VfdCBhcywgdW53X3JlZ251bV90IHJlZywgdW53X2ZwcmVnX3QgKnZhbCwKKysJICAgICAgaW50IHdyaXRlLCB2b2lkICphcmcpCisreworKyAgdWNvbnRleHRfdCAqdWMgPSBhcmc7CisrICB1bndfZnByZWdfdCAqYWRkcjsKKysKKysgIGlmICghdW53X2lzX2ZwcmVnIChyZWcpKQorKyAgICBnb3RvIGJhZHJlZzsKKysKKysgIGlmICghKGFkZHIgPSB1Y19hZGRyICh1YywgcmVnKSkpCisrICAgIGdvdG8gYmFkcmVnOworKworKyAgaWYgKHdyaXRlKQorKyAgICB7CisrICAgICAgRGVidWcgKDEyLCAiJXMgPC0gJTA4bHguJTA4bHguJTA4bHhcbiIsIHVud19yZWduYW1lIChyZWcpLAorKwkgICAgICgobG9uZyAqKXZhbClbMF0sICgobG9uZyAqKXZhbClbMV0sICgobG9uZyAqKXZhbClbMl0pOworKyAgICAgICoodW53X2ZwcmVnX3QgKikgYWRkciA9ICp2YWw7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgICp2YWwgPSAqKHVud19mcHJlZ190ICopIGFkZHI7CisrICAgICAgRGVidWcgKDEyLCAiJXMgLT4gJTA4bHguJTA4bHguJTA4bHhcbiIsIHVud19yZWduYW1lIChyZWcpLAorKwkgICAgICgobG9uZyAqKXZhbClbMF0sICgobG9uZyAqKXZhbClbMV0sICgobG9uZyAqKXZhbClbMl0pOworKyAgICB9CisrICByZXR1cm4gMDsKKysKKysgYmFkcmVnOgorKyAgRGVidWcgKDEsICJiYWQgcmVnaXN0ZXIgbnVtYmVyICV1XG4iLCByZWcpOworKyAgLyogYXR0ZW1wdCB0byBhY2Nlc3MgYSBub24tcHJlc2VydmVkIHJlZ2lzdGVyICovCisrICByZXR1cm4gLVVOV19FQkFEUkVHOworK30KKysKKytzdGF0aWMgaW50CisrZ2V0X3N0YXRpY19wcm9jX25hbWUgKHVud19hZGRyX3NwYWNlX3QgYXMsIHVud193b3JkX3QgaXAsCisrCQkgICAgICBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCB1bndfd29yZF90ICpvZmZwLAorKwkJICAgICAgdm9pZCAqYXJnKQorK3sKKysgIHJldHVybiBfVWVsZjY0X2dldF9wcm9jX25hbWUgKGFzLCBnZXRwaWQgKCksIGlwLCBidWYsIGJ1Zl9sZW4sIG9mZnApOworK30KKysKKytISURERU4gdm9pZAorK2FhcmNoNjRfbG9jYWxfYWRkcl9zcGFjZV9pbml0ICh2b2lkKQorK3sKKysgIG1lbXNldCAoJmxvY2FsX2FkZHJfc3BhY2UsIDAsIHNpemVvZiAobG9jYWxfYWRkcl9zcGFjZSkpOworKyAgbG9jYWxfYWRkcl9zcGFjZS5jYWNoaW5nX3BvbGljeSA9IFVOV19DQUNIRV9HTE9CQUw7CisrICBsb2NhbF9hZGRyX3NwYWNlLmFjYy5maW5kX3Byb2NfaW5mbyA9IGR3YXJmX2ZpbmRfcHJvY19pbmZvOworKyAgbG9jYWxfYWRkcl9zcGFjZS5hY2MucHV0X3Vud2luZF9pbmZvID0gcHV0X3Vud2luZF9pbmZvOworKyAgbG9jYWxfYWRkcl9zcGFjZS5hY2MuZ2V0X2R5bl9pbmZvX2xpc3RfYWRkciA9IGdldF9keW5faW5mb19saXN0X2FkZHI7CisrICBsb2NhbF9hZGRyX3NwYWNlLmFjYy5hY2Nlc3NfbWVtID0gYWNjZXNzX21lbTsKKysgIGxvY2FsX2FkZHJfc3BhY2UuYWNjLmFjY2Vzc19yZWcgPSBhY2Nlc3NfcmVnOworKyAgbG9jYWxfYWRkcl9zcGFjZS5hY2MuYWNjZXNzX2ZwcmVnID0gYWNjZXNzX2ZwcmVnOworKyAgbG9jYWxfYWRkcl9zcGFjZS5hY2MucmVzdW1lID0gYWFyY2g2NF9sb2NhbF9yZXN1bWU7CisrICBsb2NhbF9hZGRyX3NwYWNlLmFjYy5nZXRfcHJvY19uYW1lID0gZ2V0X3N0YXRpY19wcm9jX25hbWU7CisrICB1bndfZmx1c2hfY2FjaGUgKCZsb2NhbF9hZGRyX3NwYWNlLCAwLCAwKTsKKyt9CisrCisrI2VuZGlmIC8qICFVTldfUkVNT1RFX09OTFkgKi8KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0dpbml0X2xvY2FsLmMKK0BAIC0wLDAgKzEsNTUgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysjaW5jbHVkZSAiaW5pdC5oIgorKworKyNpZmRlZiBVTldfUkVNT1RFX09OTFkKKysKKytQUk9URUNURUQgaW50CisrdW53X2luaXRfbG9jYWwgKHVud19jdXJzb3JfdCAqY3Vyc29yLCB1bndfY29udGV4dF90ICp1YykKKyt7CisrICByZXR1cm4gLVVOV19FSU5WQUw7CisrfQorKworKyNlbHNlIC8qICFVTldfUkVNT1RFX09OTFkgKi8KKysKKytQUk9URUNURUQgaW50CisrdW53X2luaXRfbG9jYWwgKHVud19jdXJzb3JfdCAqY3Vyc29yLCB1bndfY29udGV4dF90ICp1YykKKyt7CisrICBzdHJ1Y3QgY3Vyc29yICpjID0gKHN0cnVjdCBjdXJzb3IgKikgY3Vyc29yOworKworKyAgaWYgKCF0ZGVwX2luaXRfZG9uZSkKKysgICAgdGRlcF9pbml0ICgpOworKworKyAgRGVidWcgKDEsICIoY3Vyc29yPSVwKVxuIiwgYyk7CisrCisrICBjLT5kd2FyZi5hcyA9IHVud19sb2NhbF9hZGRyX3NwYWNlOworKyAgYy0+ZHdhcmYuYXNfYXJnID0gdWM7CisrCisrICByZXR1cm4gY29tbW9uX2luaXQgKGMsIDEpOworK30KKysKKysjZW5kaWYgLyogIVVOV19SRU1PVEVfT05MWSAqLworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvR2luaXRfcmVtb3RlLmMKK0BAIC0wLDAgKzEsNDUgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgImluaXQuaCIKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysKKytQUk9URUNURUQgaW50CisrdW53X2luaXRfcmVtb3RlICh1bndfY3Vyc29yX3QgKmN1cnNvciwgdW53X2FkZHJfc3BhY2VfdCBhcywgdm9pZCAqYXNfYXJnKQorK3sKKysjaWZkZWYgVU5XX0xPQ0FMX09OTFkKKysgIHJldHVybiAtVU5XX0VJTlZBTDsKKysjZWxzZSAvKiAhVU5XX0xPQ0FMX09OTFkgKi8KKysgIHN0cnVjdCBjdXJzb3IgKmMgPSAoc3RydWN0IGN1cnNvciAqKSBjdXJzb3I7CisrCisrICBpZiAoIXRkZXBfaW5pdF9kb25lKQorKyAgICB0ZGVwX2luaXQgKCk7CisrCisrICBEZWJ1ZyAoMSwgIihjdXJzb3I9JXApXG4iLCBjKTsKKysKKysgIGMtPmR3YXJmLmFzID0gYXM7CisrICBjLT5kd2FyZi5hc19hcmcgPSBhc19hcmc7CisrICByZXR1cm4gY29tbW9uX2luaXQgKGMsIDApOworKyNlbmRpZiAvKiAhVU5XX0xPQ0FMX09OTFkgKi8KKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9HaXNfc2lnbmFsX2ZyYW1lLmMKK0BAIC0wLDAgKzEsNjQgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrCisrLyogVGhlIHJlc3RvcmVyIHN0dWIgd2lsbCBhbHdheXMgaGF2ZSB0aGUgZm9ybToKKysKKysgICBkMjgwMTE2OCAgICAgICAgbW92eiAgICB4OCwgIzB4OGIKKysgICBkNDAwMDAwMSAgICAgICAgc3ZjICAgICAjMHgwCisrKi8KKysKKytQUk9URUNURUQgaW50CisrdW53X2lzX3NpZ25hbF9mcmFtZSAodW53X2N1cnNvcl90ICpjdXJzb3IpCisreworKyNpZmRlZiBfX2xpbnV4X18KKysgIHN0cnVjdCBjdXJzb3IgKmMgPSAoc3RydWN0IGN1cnNvciAqKSBjdXJzb3I7CisrICB1bndfd29yZF90IHcwLCBpcDsKKysgIHVud19hZGRyX3NwYWNlX3QgYXM7CisrICB1bndfYWNjZXNzb3JzX3QgKmE7CisrICB2b2lkICphcmc7CisrICBpbnQgcmV0OworKworKyAgYXMgPSBjLT5kd2FyZi5hczsKKysgIGEgPSB1bndfZ2V0X2FjY2Vzc29ycyAoYXMpOworKyAgYXJnID0gYy0+ZHdhcmYuYXNfYXJnOworKworKyAgaXAgPSBjLT5kd2FyZi5pcDsKKysKKysgIHJldCA9ICgqYS0+YWNjZXNzX21lbSkgKGFzLCBpcCwgJncwLCAwLCBhcmcpOworKyAgaWYgKHJldCA8IDApCisrICAgIHJldHVybiByZXQ7CisrCisrICAvKiBGSVhNRTogZGlzdGluZ3Vpc2ggMzJiaXQgaW5zbiB2cyA2NGJpdCByZWdpc3RlcnMuICAqLworKyAgaWYgKHcwICE9IDB4ZDQwMDAwMDFkMjgwMTE2OCkKKysgICAgcmV0dXJuIDA7CisrCisrICByZXR1cm4gMTsKKysKKysjZWxzZQorKyAgcmV0dXJuIC1VTldfRU5PSU5GTzsKKysjZW5kaWYKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9HcmVncy5jCitAQCAtMCwwICsxLDExMyBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrCisrSElEREVOIGludAorK3RkZXBfYWNjZXNzX3JlZyAoc3RydWN0IGN1cnNvciAqYywgdW53X3JlZ251bV90IHJlZywgdW53X3dvcmRfdCAqdmFscCwKKysJCSBpbnQgd3JpdGUpCisreworKyAgZHdhcmZfbG9jX3QgbG9jID0gRFdBUkZfTlVMTF9MT0M7CisrICB1bnNpZ25lZCBpbnQgbWFzazsKKysKKysgIHN3aXRjaCAocmVnKQorKyAgICB7CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDA6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDM6CisrICAgICAgbWFzayA9IDEgPDwgcmVnOworKyAgICAgIGlmICh3cml0ZSkKKysgICAgICAgIHsKKysgICAgICAgICAgYy0+ZHdhcmYuZWhfYXJnc1tyZWddID0gKnZhbHA7CisrICAgICAgICAgIGMtPmR3YXJmLmVoX3ZhbGlkX21hc2sgfD0gbWFzazsKKysgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICB9CisrICAgICAgZWxzZSBpZiAoKGMtPmR3YXJmLmVoX3ZhbGlkX21hc2sgJiBtYXNrKSAhPSAwKQorKyAgICAgICAgeworKyAgICAgICAgICAqdmFscCA9IGMtPmR3YXJmLmVoX2FyZ3NbcmVnXTsKKysgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAgbG9jID0gYy0+ZHdhcmYubG9jW3JlZ107CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDQ6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDU6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDY6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDc6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDg6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDk6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDEwOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxMToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTI6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDEzOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxNDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTU6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE2OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxNzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTg6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE5OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyMDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjE6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDIyOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyMzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjQ6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI1OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyNjoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjc6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI4OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyOToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMzA6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfUEM6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfUFNUQVRFOgorKyAgICAgIGxvYyA9IGMtPmR3YXJmLmxvY1tyZWddOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIFVOV19BQVJDSDY0X1NQOgorKyAgICAgIGlmICh3cml0ZSkKKysgICAgICAgIHJldHVybiAtVU5XX0VSRUFET05MWVJFRzsKKysgICAgICAqdmFscCA9IGMtPmR3YXJmLmNmYTsKKysgICAgICByZXR1cm4gMDsKKysKKysgICAgZGVmYXVsdDoKKysgICAgICBEZWJ1ZyAoMSwgImJhZCByZWdpc3RlciBudW1iZXIgJXVcbiIsIHJlZyk7CisrICAgICAgcmV0dXJuIC1VTldfRUJBRFJFRzsKKysgICAgfQorKworKyAgaWYgKHdyaXRlKQorKyAgICByZXR1cm4gZHdhcmZfcHV0ICgmYy0+ZHdhcmYsIGxvYywgKnZhbHApOworKyAgZWxzZQorKyAgICByZXR1cm4gZHdhcmZfZ2V0ICgmYy0+ZHdhcmYsIGxvYywgdmFscCk7CisrfQorKworK0hJRERFTiBpbnQKKyt0ZGVwX2FjY2Vzc19mcHJlZyAoc3RydWN0IGN1cnNvciAqYywgdW53X3JlZ251bV90IHJlZywgdW53X2ZwcmVnX3QgKnZhbHAsCisrCQkgICBpbnQgd3JpdGUpCisreworKyAgRGVidWcgKDEsICJiYWQgcmVnaXN0ZXIgbnVtYmVyICV1XG4iLCByZWcpOworKyAgcmV0dXJuIC1VTldfRUJBRFJFRzsKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9HcmVzdW1lLmMKK0BAIC0wLDAgKzEsMTc3IEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBMaW5hcm8gTGltaXRlZAorKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpbmNsdWRlICJ1bndpbmRfaS5oIgorKyNpbmNsdWRlICJvZmZzZXRzLmgiCisrCisrI2lmbmRlZiBVTldfUkVNT1RFX09OTFkKKysKKytISURERU4gaW5saW5lIGludAorK2FhcmNoNjRfbG9jYWxfcmVzdW1lICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfY3Vyc29yX3QgKmN1cnNvciwgdm9pZCAqYXJnKQorK3sKKysjaWZkZWYgX19saW51eF9fCisrICBzdHJ1Y3QgY3Vyc29yICpjID0gKHN0cnVjdCBjdXJzb3IgKikgY3Vyc29yOworKyAgdW53X3RkZXBfY29udGV4dF90ICp1YyA9IGMtPmR3YXJmLmFzX2FyZzsKKysKKysgIGlmIChjLT5zaWdjb250ZXh0X2Zvcm1hdCA9PSBBQVJDSDY0X1NDRl9OT05FKQorKyAgICB7CisrICAgICAgLyogU2luY2UgdGhlcmUgYXJlIG5vIHNpZ25hbHMgaW52b2x2ZWQgaGVyZSB3ZSByZXN0b3JlIHRoZSBub24gc2NyYXRjaAorKwkgcmVnaXN0ZXJzIG9ubHkuICAqLworKyAgICAgIHVuc2lnbmVkIGxvbmcgcmVnc1sxMV07CisrICAgICAgcmVnc1swXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzE5XTsKKysgICAgICByZWdzWzFdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjBdOworKyAgICAgIHJlZ3NbMl0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syMV07CisrICAgICAgcmVnc1szXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzIyXTsKKysgICAgICByZWdzWzRdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjNdOworKyAgICAgIHJlZ3NbNV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syNF07CisrICAgICAgcmVnc1s2XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI1XTsKKysgICAgICByZWdzWzddID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjZdOworKyAgICAgIHJlZ3NbOF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syN107CisrICAgICAgcmVnc1s5XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI4XTsKKysgICAgICByZWdzWzEwXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzMwXTsgLyogTFIgKi8KKysgICAgICB1bnNpZ25lZCBsb25nIHNwID0gdWMtPnVjX21jb250ZXh0LnNwOworKworKyAgICAgIHN0cnVjdCByZWdzX292ZXJsYXkgeworKyAgICAgICAgY2hhciB4W3NpemVvZihyZWdzKV07CisrICAgICAgfTsKKysKKysgICAgICBhc20gdm9sYXRpbGUgKAorKyAgICAgICAgImxkcCB4MTksIHgyMCwgWyUwXVxuIgorKyAgICAgICAgImxkcCB4MjEsIHgyMiwgWyUwLDE2XVxuIgorKyAgICAgICAgImxkcCB4MjMsIHgyNCwgWyUwLDMyXVxuIgorKyAgICAgICAgImxkcCB4MjUsIHgyNiwgWyUwLDQ4XVxuIgorKyAgICAgICAgImxkcCB4MjcsIHgyOCwgWyUwLDY0XVxuIgorKyAgICAgICAgImxkciB4MzAsIFslMCw4MF1cbiIKKysgICAgICAgICJtb3Ygc3AsICUxXG4iCisrICAgICAgICAicmV0IFxuIgorKyAgICAgICAgOgorKyAgICAgICAgOiAiciIgKHJlZ3MpLAorKyAgICAgICAgICAiciIgKHNwKSwKKysgICAgICAgICAgIm0iICgqKHN0cnVjdCByZWdzX292ZXJsYXkgKilyZWdzKQorKyAgICAgICk7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIHN0cnVjdCBzaWdjb250ZXh0ICpzYyA9IChzdHJ1Y3Qgc2lnY29udGV4dCAqKSBjLT5zaWdjb250ZXh0X2FkZHI7CisrCisrICAgICAgaWYgKGMtPmR3YXJmLmVoX3ZhbGlkX21hc2sgJiAweDEpIHNjLT5yZWdzWzBdID0gYy0+ZHdhcmYuZWhfYXJnc1swXTsKKysgICAgICBpZiAoYy0+ZHdhcmYuZWhfdmFsaWRfbWFzayAmIDB4Mikgc2MtPnJlZ3NbMV0gPSBjLT5kd2FyZi5laF9hcmdzWzFdOworKyAgICAgIGlmIChjLT5kd2FyZi5laF92YWxpZF9tYXNrICYgMHg0KSBzYy0+cmVnc1syXSA9IGMtPmR3YXJmLmVoX2FyZ3NbMl07CisrICAgICAgaWYgKGMtPmR3YXJmLmVoX3ZhbGlkX21hc2sgJiAweDgpIHNjLT5yZWdzWzNdID0gYy0+ZHdhcmYuZWhfYXJnc1szXTsKKysKKysgICAgICBzYy0+cmVnc1s0XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzRdOworKyAgICAgIHNjLT5yZWdzWzVdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbNV07CisrICAgICAgc2MtPnJlZ3NbNl0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1s2XTsKKysgICAgICBzYy0+cmVnc1s3XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzddOworKyAgICAgIHNjLT5yZWdzWzhdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbOF07CisrICAgICAgc2MtPnJlZ3NbOV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1s5XTsKKysgICAgICBzYy0+cmVnc1sxMF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxMF07CisrICAgICAgc2MtPnJlZ3NbMTFdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTFdOworKyAgICAgIHNjLT5yZWdzWzEyXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzEyXTsKKysgICAgICBzYy0+cmVnc1sxM10gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxM107CisrICAgICAgc2MtPnJlZ3NbMTRdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTRdOworKyAgICAgIHNjLT5yZWdzWzE1XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzE1XTsKKysgICAgICBzYy0+cmVnc1sxNl0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxNl07CisrICAgICAgc2MtPnJlZ3NbMTddID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTddOworKyAgICAgIHNjLT5yZWdzWzE4XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzE4XTsKKysgICAgICBzYy0+cmVnc1sxOV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxOV07CisrICAgICAgc2MtPnJlZ3NbMjBdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjBdOworKyAgICAgIHNjLT5yZWdzWzIxXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzIxXTsKKysgICAgICBzYy0+cmVnc1syMl0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syMl07CisrICAgICAgc2MtPnJlZ3NbMjNdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjNdOworKyAgICAgIHNjLT5yZWdzWzI0XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI0XTsKKysgICAgICBzYy0+cmVnc1syNV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syNV07CisrICAgICAgc2MtPnJlZ3NbMjZdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjZdOworKyAgICAgIHNjLT5yZWdzWzI3XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI3XTsKKysgICAgICBzYy0+cmVnc1syOF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syOF07CisrICAgICAgc2MtPnJlZ3NbMjldID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjldOworKyAgICAgIHNjLT5yZWdzWzMwXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzMwXTsKKysgICAgICBzYy0+c3AgPSB1Yy0+dWNfbWNvbnRleHQuc3A7CisrICAgICAgc2MtPnBjID0gdWMtPnVjX21jb250ZXh0LnBjOworKyAgICAgIHNjLT5wc3RhdGUgPSB1Yy0+dWNfbWNvbnRleHQucHN0YXRlOworKworKyAgICAgIGFzbSB2b2xhdGlsZSAoCisrICAgICAgICAibW92IHNwLCAlMFxuIgorKyAgICAgICAgInJldCAlMVxuIgorKyAgICAgICAgOiA6ICJyIiAoYy0+c2lnY29udGV4dF9zcCksICJyIiAoYy0+c2lnY29udGV4dF9wYykKKysgICAgICApOworKyAgIH0KKysgIHVucmVhY2hhYmxlKCk7CisrI2Vsc2UKKysgIHByaW50ZiAoIiVzOiBpbXBsZW1lbnQgbWVcbiIsIF9fRlVOQ1RJT05fXyk7CisrI2VuZGlmCisrICByZXR1cm4gLVVOV19FSU5WQUw7CisrfQorKworKyNlbmRpZiAvKiAhVU5XX1JFTU9URV9PTkxZICovCisrCisrc3RhdGljIGlubGluZSB2b2lkCisrZXN0YWJsaXNoX21hY2hpbmVfc3RhdGUgKHN0cnVjdCBjdXJzb3IgKmMpCisreworKyAgdW53X2FkZHJfc3BhY2VfdCBhcyA9IGMtPmR3YXJmLmFzOworKyAgdm9pZCAqYXJnID0gYy0+ZHdhcmYuYXNfYXJnOworKyAgdW53X2ZwcmVnX3QgZnB2YWw7CisrICB1bndfd29yZF90IHZhbDsKKysgIGludCByZWc7CisrCisrICBEZWJ1ZyAoOCwgImNvcHlpbmcgb3V0IGN1cnNvciBzdGF0ZVxuIik7CisrCisrICBmb3IgKHJlZyA9IDA7IHJlZyA8PSBVTldfQUFSQ0g2NF9QU1RBVEU7ICsrcmVnKQorKyAgICB7CisrICAgICAgRGVidWcgKDE2LCAiY29weWluZyAlcyAlZFxuIiwgdW53X3JlZ25hbWUgKHJlZyksIHJlZyk7CisrICAgICAgaWYgKHVud19pc19mcHJlZyAocmVnKSkKKysJeworKwkgIGlmICh0ZGVwX2FjY2Vzc19mcHJlZyAoYywgcmVnLCAmZnB2YWwsIDApID49IDApCisrCSAgICBhcy0+YWNjLmFjY2Vzc19mcHJlZyAoYXMsIHJlZywgJmZwdmFsLCAxLCBhcmcpOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgaWYgKHRkZXBfYWNjZXNzX3JlZyAoYywgcmVnLCAmdmFsLCAwKSA+PSAwKQorKwkgICAgYXMtPmFjYy5hY2Nlc3NfcmVnIChhcywgcmVnLCAmdmFsLCAxLCBhcmcpOworKwl9CisrICAgIH0KKyt9CisrCisrUFJPVEVDVEVEIGludAorK3Vud19yZXN1bWUgKHVud19jdXJzb3JfdCAqY3Vyc29yKQorK3sKKysgIHN0cnVjdCBjdXJzb3IgKmMgPSAoc3RydWN0IGN1cnNvciAqKSBjdXJzb3I7CisrCisrICBEZWJ1ZyAoMSwgIihjdXJzb3I9JXApXG4iLCBjKTsKKysKKysgIGlmICghYy0+ZHdhcmYuaXApCisrICAgIHsKKysgICAgICAvKiBUaGlzIGNhbiBoYXBwZW4gZWFzaWx5IHdoZW4gdGhlIGZyYW1lLWNoYWluIGdldHMgdHJ1bmNhdGVkCisrCSBkdWUgdG8gYmFkIG9yIG1pc3NpbmcgdW53aW5kLWluZm8uICAqLworKyAgICAgIERlYnVnICgxLCAicmVmdXNpbmcgdG8gcmVzdW1lIGV4ZWN1dGlvbiBhdCBhZGRyZXNzIDBcbiIpOworKyAgICAgIHJldHVybiAtVU5XX0VJTlZBTDsKKysgICAgfQorKworKyAgZXN0YWJsaXNoX21hY2hpbmVfc3RhdGUgKGMpOworKworKyAgcmV0dXJuICgqYy0+ZHdhcmYuYXMtPmFjYy5yZXN1bWUpIChjLT5kd2FyZi5hcywgKHVud19jdXJzb3JfdCAqKSBjLAorKwkJCQkgICAgIGMtPmR3YXJmLmFzX2FyZyk7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvR3N0ZXAuYworQEAgLTAsMCArMSwxMjkgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIExpbmFybyBMaW1pdGVkCisrICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrI2luY2x1ZGUgIm9mZnNldHMuaCIKKysKKytQUk9URUNURUQgaW50CisrdW53X2hhbmRsZV9zaWduYWxfZnJhbWUgKHVud19jdXJzb3JfdCAqY3Vyc29yKQorK3sKKysgIHN0cnVjdCBjdXJzb3IgKmMgPSAoc3RydWN0IGN1cnNvciAqKSBjdXJzb3I7CisrICBpbnQgcmV0OworKyAgdW53X3dvcmRfdCBzY19hZGRyLCBzcCwgc3BfYWRkciA9IGMtPmR3YXJmLmNmYTsKKysgIHN0cnVjdCBkd2FyZl9sb2Mgc3BfbG9jID0gRFdBUkZfTE9DIChzcF9hZGRyLCAwKTsKKysKKysgIGlmICgocmV0ID0gZHdhcmZfZ2V0ICgmYy0+ZHdhcmYsIHNwX2xvYywgJnNwKSkgPCAwKQorKyAgICByZXR1cm4gLVVOV19FVU5TUEVDOworKworKyAgcmV0ID0gdW53X2lzX3NpZ25hbF9mcmFtZSAoY3Vyc29yKTsKKysgIERlYnVnKDEsICJ1bndfaXNfc2lnbmFsX2ZyYW1lKCk9JWRcbiIsIHJldCk7CisrCisrICAvKiBTYXZlIHRoZSBTUCBhbmQgUEMgdG8gYmUgYWJsZSB0byByZXR1cm4gZXhlY3V0aW9uIGF0IHRoaXMgcG9pbnQKKysgICAgIGxhdGVyIGluIHRpbWUgKHVud19yZXN1bWUpLiAgKi8KKysgIGMtPnNpZ2NvbnRleHRfc3AgPSBjLT5kd2FyZi5jZmE7CisrICBjLT5zaWdjb250ZXh0X3BjID0gYy0+ZHdhcmYuaXA7CisrCisrICBpZiAocmV0KQorKyAgICB7CisrICAgICAgYy0+c2lnY29udGV4dF9mb3JtYXQgPSBBQVJDSDY0X1NDRl9MSU5VWF9SVF9TSUdGUkFNRTsKKysgICAgICBzY19hZGRyID0gc3BfYWRkciArIHNpemVvZiAoc2lnaW5mb190KSArIExJTlVYX1VDX01DT05URVhUX09GRjsKKysgICAgfQorKyAgZWxzZQorKyAgICByZXR1cm4gLVVOV19FVU5TUEVDOworKworKyAgYy0+c2lnY29udGV4dF9hZGRyID0gc2NfYWRkcjsKKysKKysgIC8qIFVwZGF0ZSB0aGUgZHdhcmYgY3Vyc29yLgorKyAgICAgU2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgcmVnaXN0ZXJzIHRvIHRoZSBjb3JyZXNwb25kaW5nIGFkZHJlc3NlcyBvZiB0aGUKKysgICAgIHVjX21jb250ZXh0IC8gc2lnY29udGV4dCBzdHJ1Y3R1cmUgY29udGVudHMuICAqLworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gwXSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMF9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxXSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMV9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyXSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMl9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gzXSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YM19PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g0XSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YNF9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g1XSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YNV9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g2XSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YNl9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g3XSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YN19PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g4XSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YOF9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g5XSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YOV9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxMF0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMTBfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTFdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDExX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDEyXSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxMl9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxM10gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMTNfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTRdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDE0X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE1XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxNV9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxNl0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMTZfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTddID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDE3X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE4XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxOF9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxOV0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMTlfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjBdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDIwX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDIxXSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyMV9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyMl0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjJfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjNdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDIzX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI0XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyNF9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyNV0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjVfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjZdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDI2X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI3XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyN19PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyOF0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjhfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjldID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDI5X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDMwXSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gzMF9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1NQXSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19TUF9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1BDXSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19QQ19PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1BTVEFURV0gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfUFNUQVRFX09GRiwgMCk7CisrCisrICAvKiBTZXQgU1AvQ0ZBIGFuZCBQQy9JUC4gICovCisrICBkd2FyZl9nZXQgKCZjLT5kd2FyZiwgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1NQXSwgJmMtPmR3YXJmLmNmYSk7CisrICBkd2FyZl9nZXQgKCZjLT5kd2FyZiwgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1BDXSwgJmMtPmR3YXJmLmlwKTsKKysKKysgIGMtPmR3YXJmLnBpX3ZhbGlkID0gMDsKKysKKysgIHJldHVybiAxOworK30KKysKKytQUk9URUNURUQgaW50CisrdW53X3N0ZXAgKHVud19jdXJzb3JfdCAqY3Vyc29yKQorK3sKKysgIHN0cnVjdCBjdXJzb3IgKmMgPSAoc3RydWN0IGN1cnNvciAqKSBjdXJzb3I7CisrICBpbnQgcmV0OworKworKyAgRGVidWcgKDEsICIoY3Vyc29yPSVwLCBpcD0weCUwMTZseCwgY2ZhPTB4JTAxNmx4KSlcbiIsCisrCSBjLCBjLT5kd2FyZi5pcCwgYy0+ZHdhcmYuY2ZhKTsKKysKKysgIC8qIENoZWNrIGlmIHRoaXMgaXMgYSBzaWduYWwgZnJhbWUuICovCisrICBpZiAodW53X2lzX3NpZ25hbF9mcmFtZSAoY3Vyc29yKSkKKysgICAgcmV0dXJuIHVud19oYW5kbGVfc2lnbmFsX2ZyYW1lIChjdXJzb3IpOworKworKyAgcmV0ID0gZHdhcmZfc3RlcCAoJmMtPmR3YXJmKTsKKysgIERlYnVnKDEsICJkd2FyZl9zdGVwKCk9JWRcbiIsIHJldCk7CisrCisrICBpZiAodW5saWtlbHkgKHJldCA9PSAtVU5XX0VTVE9QVU5XSU5EKSkKKysgICAgcmV0dXJuIHJldDsKKysKKysgIGlmICh1bmxpa2VseSAocmV0IDwgMCkpCisrICAgIHJldHVybiAwOworKworKyAgcmV0dXJuIChjLT5kd2FyZi5pcCA9PSAwKSA/IDAgOiAxOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0xjcmVhdGVfYWRkcl9zcGFjZS5jCitAQCAtMCwwICsxLDUgQEAKKysjZGVmaW5lIFVOV19MT0NBTF9PTkxZCisrI2luY2x1ZGUgPGxpYnVud2luZC5oPgorKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCisrI2luY2x1ZGUgIkdjcmVhdGVfYWRkcl9zcGFjZS5jIgorKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvTGdldF9wcm9jX2luZm8uYworQEAgLTAsMCArMSw1IEBACisrI2RlZmluZSBVTldfTE9DQUxfT05MWQorKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KKysjaWYgZGVmaW5lZChVTldfTE9DQUxfT05MWSkgJiYgIWRlZmluZWQoVU5XX1JFTU9URV9PTkxZKQorKyNpbmNsdWRlICJHZ2V0X3Byb2NfaW5mby5jIgorKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvTGdldF9zYXZlX2xvYy5jCitAQCAtMCwwICsxLDUgQEAKKysjZGVmaW5lIFVOV19MT0NBTF9PTkxZCisrI2luY2x1ZGUgPGxpYnVud2luZC5oPgorKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCisrI2luY2x1ZGUgIkdnZXRfc2F2ZV9sb2MuYyIKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0xnbG9iYWwuYworQEAgLTAsMCArMSw1IEBACisrI2RlZmluZSBVTldfTE9DQUxfT05MWQorKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KKysjaWYgZGVmaW5lZChVTldfTE9DQUxfT05MWSkgJiYgIWRlZmluZWQoVU5XX1JFTU9URV9PTkxZKQorKyNpbmNsdWRlICJHZ2xvYmFsLmMiCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9MaW5pdC5jCitAQCAtMCwwICsxLDUgQEAKKysjZGVmaW5lIFVOV19MT0NBTF9PTkxZCisrI2luY2x1ZGUgPGxpYnVud2luZC5oPgorKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCisrI2luY2x1ZGUgIkdpbml0LmMiCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9MaW5pdF9sb2NhbC5jCitAQCAtMCwwICsxLDUgQEAKKysjZGVmaW5lIFVOV19MT0NBTF9PTkxZCisrI2luY2x1ZGUgPGxpYnVud2luZC5oPgorKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCisrI2luY2x1ZGUgIkdpbml0X2xvY2FsLmMiCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9MaW5pdF9yZW1vdGUuYworQEAgLTAsMCArMSw1IEBACisrI2RlZmluZSBVTldfTE9DQUxfT05MWQorKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KKysjaWYgZGVmaW5lZChVTldfTE9DQUxfT05MWSkgJiYgIWRlZmluZWQoVU5XX1JFTU9URV9PTkxZKQorKyNpbmNsdWRlICJHaW5pdF9yZW1vdGUuYyIKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0xpc19zaWduYWxfZnJhbWUuYworQEAgLTAsMCArMSw1IEBACisrI2RlZmluZSBVTldfTE9DQUxfT05MWQorKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KKysjaWYgZGVmaW5lZChVTldfTE9DQUxfT05MWSkgJiYgIWRlZmluZWQoVU5XX1JFTU9URV9PTkxZKQorKyNpbmNsdWRlICJHaXNfc2lnbmFsX2ZyYW1lLmMiCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9McmVncy5jCitAQCAtMCwwICsxLDUgQEAKKysjZGVmaW5lIFVOV19MT0NBTF9PTkxZCisrI2luY2x1ZGUgPGxpYnVud2luZC5oPgorKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCisrI2luY2x1ZGUgIkdyZWdzLmMiCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9McmVzdW1lLmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR3Jlc3VtZS5jIgorKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvTHN0ZXAuYworQEAgLTAsMCArMSw1IEBACisrI2RlZmluZSBVTldfTE9DQUxfT05MWQorKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KKysjaWYgZGVmaW5lZChVTldfTE9DQUxfT05MWSkgJiYgIWRlZmluZWQoVU5XX1JFTU9URV9PTkxZKQorKyNpbmNsdWRlICJHc3RlcC5jIgorKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvZ2VuLW9mZnNldHMuYworQEAgLTAsMCArMSw2OCBAQAorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysjaW5jbHVkZSA8dWNvbnRleHQuaD4KKysjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KKysKKysjZGVmaW5lIFVDKE4sWCkgXAorKyAgcHJpbnRmICgiI2RlZmluZSBMSU5VWF9VQ18iIE4gIl9PRkZcdDB4JVhcbiIsIG9mZnNldG9mICh1Y29udGV4dF90LCBYKSkKKysKKysjZGVmaW5lIFNDKE4sWCkgXAorKyAgcHJpbnRmICgiI2RlZmluZSBMSU5VWF9TQ18iIE4gIl9PRkZcdDB4JVhcbiIsIG9mZnNldG9mIChzdHJ1Y3Qgc2lnY29udGV4dCwgWCkpCisrCisraW50CisrbWFpbiAodm9pZCkKKyt7CisrICBwcmludGYgKAorKyIvKiBMaW51eC1zcGVjaWZpYyBkZWZpbml0aW9uczogKi9cblxuIgorKworKyIvKiBEZWZpbmUgdmFyaW91cyBzdHJ1Y3R1cmUgb2Zmc2V0cyB0byBzaW1wbGlmeSBjcm9zcy1jb21waWxhdGlvbi4gICovXG5cbiIKKysKKysiLyogT2Zmc2V0cyBmb3IgQUFyY2g2NCBMaW51eCBcInVjb250ZXh0X3RcIjogICovXG5cbiIpOworKworKyAgVUMgKCJGTEFHUyIsIHVjX2ZsYWdzKTsKKysgIFVDICgiTElOSyIsIHVjX2xpbmspOworKyAgVUMgKCJTVEFDSyIsIHVjX3N0YWNrKTsKKysgIFVDICgiTUNPTlRFWFQiLCB1Y19tY29udGV4dCk7CisrICBVQyAoIlNJR01BU0siLCB1Y19zaWdtYXNrKTsKKysKKysgIHByaW50ZiAoIlxuLyogT2Zmc2V0cyBmb3IgQUFyY2g2NCBMaW51eCBcInN0cnVjdCBzaWdjb250ZXh0XCI6ICAqL1xuXG4iKTsKKysKKysgIFNDICgiUjAiLCAgcmVnc1swXSk7CisrICBTQyAoIlIxIiwgIHJlZ3NbMV0pOworKyAgU0MgKCJSMiIsICByZWdzWzJdKTsKKysgIFNDICgiUjMiLCAgcmVnc1szXSk7CisrICBTQyAoIlI0IiwgIHJlZ3NbNF0pOworKyAgU0MgKCJSNSIsICByZWdzWzVdKTsKKysgIFNDICgiUjYiLCAgcmVnc1s2XSk7CisrICBTQyAoIlI3IiwgIHJlZ3NbN10pOworKyAgU0MgKCJSOCIsICByZWdzWzhdKTsKKysgIFNDICgiUjkiLCAgcmVnc1s5XSk7CisrICBTQyAoIlIxMCIsIHJlZ3NbMTBdKTsKKysgIFNDICgiUjExIiwgcmVnc1sxMV0pOworKyAgU0MgKCJSMTIiLCByZWdzWzEyXSk7CisrICBTQyAoIlIxMyIsIHJlZ3NbMTNdKTsKKysgIFNDICgiUjE0IiwgcmVnc1sxNF0pOworKyAgU0MgKCJSMTUiLCByZWdzWzE1XSk7CisrICBTQyAoIlIxNiIsIHJlZ3NbMTZdKTsKKysgIFNDICgiUjE3IiwgcmVnc1sxN10pOworKyAgU0MgKCJSMTgiLCByZWdzWzE4XSk7CisrICBTQyAoIlIxOSIsIHJlZ3NbMTldKTsKKysgIFNDICgiUjIwIiwgcmVnc1syMF0pOworKyAgU0MgKCJSMjEiLCByZWdzWzIxXSk7CisrICBTQyAoIlIyMiIsIHJlZ3NbMjJdKTsKKysgIFNDICgiUjIzIiwgcmVnc1syM10pOworKyAgU0MgKCJSMjQiLCByZWdzWzI0XSk7CisrICBTQyAoIlIyNSIsIHJlZ3NbMjVdKTsKKysgIFNDICgiUjI2IiwgcmVnc1syNl0pOworKyAgU0MgKCJSMjciLCByZWdzWzI3XSk7CisrICBTQyAoIlIyOCIsIHJlZ3NbMjhdKTsKKysgIFNDICgiUjI5IiwgcmVnc1syOV0pOworKyAgU0MgKCJSMzAiLCByZWdzWzMwXSk7CisrICBTQyAoIlIzMSIsIHJlZ3NbMzFdKTsKKysKKysgIFNDICgiUEMiLCBwYyk7CisrICBTQyAoIlNQIiwgc3ApOworKyAgU0MgKCJGYXVsdCIsIGZhdWx0X2FkZHJlc3MpOworKyAgU0MgKCJzdGF0ZSIsIHBzdGF0ZSk7CisrICByZXR1cm4gMDsKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9pbml0LmgKK0BAIC0wLDAgKzEsMTI3IEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpbmNsdWRlICJ1bndpbmRfaS5oIgorKworK3N0YXRpYyBpbmxpbmUgaW50CisrY29tbW9uX2luaXQgKHN0cnVjdCBjdXJzb3IgKmMsIHVuc2lnbmVkIHVzZV9wcmV2X2luc3RyKQorK3sKKysgIGludCByZXQsIGk7CisrCisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDBdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMl0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMik7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDNdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDMpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g0XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1g0KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YNV0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YNSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDZdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDYpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g3XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1g3KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YOF0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YOCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDldICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDkpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxMF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDExXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDExKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTJdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTIpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxM10gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxMyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE0XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDE0KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTVdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTUpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxNl0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxNik7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE3XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDE3KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMThdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTgpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxOV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxOSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDIwXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDIwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjFdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjEpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyMl0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyMik7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDIzXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDIzKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjRdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjQpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyNV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyNSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI2XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDI2KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjddID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjcpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyOF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyOCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI5XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDI5KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMzBdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMzApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1NQXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1NQKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9QQ10gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9QQyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfUFNUQVRFXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5XX0FBUkNINjRfUFNUQVRFKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMF0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjFdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjEpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WM10gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjRdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjQpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1Y1XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1Y1KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WNl0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WNik7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjddICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjcpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1Y4XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1Y4KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WOV0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WOSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjEwXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjEwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTFdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTEpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxMl0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxMik7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjEzXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjEzKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTRdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTQpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxNV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxNSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjE2XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjE2KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTddID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTcpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxOF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxOCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjE5XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjE5KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjBdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyMV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyMSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjIyXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjIyKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjNdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjMpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyNF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyNCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjI1XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjI1KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjZdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjYpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyN10gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyNyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjI4XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjI4KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjldID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjkpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YzMF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YzMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjMxXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjMxKTsKKysKKysgIGZvciAoaSA9IFVOV19BQVJDSDY0X1BTVEFURSArIDE7IGkgPCBVTldfQUFSQ0g2NF9WMDsgKytpKQorKyAgICBjLT5kd2FyZi5sb2NbaV0gPSBEV0FSRl9OVUxMX0xPQzsKKysKKysgIHJldCA9IGR3YXJmX2dldCAoJmMtPmR3YXJmLCBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfUENdLCAmYy0+ZHdhcmYuaXApOworKyAgaWYgKHJldCA8IDApCisrICAgIHJldHVybiByZXQ7CisrCisrICByZXQgPSBkd2FyZl9nZXQgKCZjLT5kd2FyZiwgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1NQXSwgJmMtPmR3YXJmLmNmYSk7CisrICBpZiAocmV0IDwgMCkKKysgICAgcmV0dXJuIHJldDsKKysKKysgIGMtPnNpZ2NvbnRleHRfZm9ybWF0ID0gQUFSQ0g2NF9TQ0ZfTk9ORTsKKysgIGMtPnNpZ2NvbnRleHRfYWRkciA9IDA7CisrICBjLT5zaWdjb250ZXh0X3NwID0gMDsKKysgIGMtPnNpZ2NvbnRleHRfcGMgPSAwOworKworKyAgYy0+ZHdhcmYuYXJnc19zaXplID0gMDsKKysgIGMtPmR3YXJmLnJldF9hZGRyX2NvbHVtbiA9IDA7CisrICBjLT5kd2FyZi5zdGFzaF9mcmFtZXMgPSAwOworKyAgYy0+ZHdhcmYudXNlX3ByZXZfaW5zdHIgPSB1c2VfcHJldl9pbnN0cjsKKysgIGMtPmR3YXJmLnBpX3ZhbGlkID0gMDsKKysgIGMtPmR3YXJmLnBpX2lzX2R5bmFtaWMgPSAwOworKyAgYy0+ZHdhcmYuaGludCA9IDA7CisrICBjLT5kd2FyZi5wcmV2X3JzID0gMDsKKysKKysgIHJldHVybiAwOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L2lzX2ZwcmVnLmMKK0BAIC0wLDAgKzEsMzIgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgImxpYnVud2luZF9pLmgiCisrCisrUFJPVEVDVEVEIGludAorK3Vud19pc19mcHJlZyAoaW50IHJlZ251bSkKKyt7CisrICByZXR1cm4gKHJlZ251bSA+PSBVTldfQUFSQ0g2NF9WMCAmJiByZWdudW0gPD0gVU5XX0FBUkNINjRfVjMxKTsKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9vZmZzZXRzLmgKK0BAIC0wLDAgKzEsNDkgQEAKKysvKiBMaW51eC1zcGVjaWZpYyBkZWZpbml0aW9uczogKi8KKysKKysvKiBEZWZpbmUgdmFyaW91cyBzdHJ1Y3R1cmUgb2Zmc2V0cyB0byBzaW1wbGlmeSBjcm9zcy1jb21waWxhdGlvbi4gICovCisrCisrLyogT2Zmc2V0cyBmb3IgQUFyY2g2NCBMaW51eCAidWNvbnRleHRfdCI6ICAqLworKworKyNkZWZpbmUgTElOVVhfVUNfRkxBR1NfT0ZGCTB4MAorKyNkZWZpbmUgTElOVVhfVUNfTElOS19PRkYJMHg4CisrI2RlZmluZSBMSU5VWF9VQ19TVEFDS19PRkYJMHgxMAorKyNkZWZpbmUgTElOVVhfVUNfU0lHTUFTS19PRkYJMHgyOAorKyNkZWZpbmUgTElOVVhfVUNfTUNPTlRFWFRfT0ZGCTB4YjAKKysKKysvKiBPZmZzZXRzIGZvciBBQXJjaDY0IExpbnV4ICJzdHJ1Y3Qgc2lnY29udGV4dCI6ICAqLworKworKyNkZWZpbmUgTElOVVhfU0NfRkFVTFRBRERSRVNTX09GRgkweDAwCisrI2RlZmluZSBMSU5VWF9TQ19YMF9PRkYJCTB4MDA4CisrI2RlZmluZSBMSU5VWF9TQ19YMV9PRkYJCTB4MDEwCisrI2RlZmluZSBMSU5VWF9TQ19YMl9PRkYJCTB4MDE4CisrI2RlZmluZSBMSU5VWF9TQ19YM19PRkYJCTB4MDIwCisrI2RlZmluZSBMSU5VWF9TQ19YNF9PRkYJCTB4MDI4CisrI2RlZmluZSBMSU5VWF9TQ19YNV9PRkYJCTB4MDMwCisrI2RlZmluZSBMSU5VWF9TQ19YNl9PRkYJCTB4MDM4CisrI2RlZmluZSBMSU5VWF9TQ19YN19PRkYJCTB4MDQwCisrI2RlZmluZSBMSU5VWF9TQ19YOF9PRkYJCTB4MDQ4CisrI2RlZmluZSBMSU5VWF9TQ19YOV9PRkYJCTB4MDUwCisrI2RlZmluZSBMSU5VWF9TQ19YMTBfT0ZGCTB4MDU4CisrI2RlZmluZSBMSU5VWF9TQ19YMTFfT0ZGCTB4MDYwCisrI2RlZmluZSBMSU5VWF9TQ19YMTJfT0ZGCTB4MDY4CisrI2RlZmluZSBMSU5VWF9TQ19YMTNfT0ZGCTB4MDcwCisrI2RlZmluZSBMSU5VWF9TQ19YMTRfT0ZGCTB4MDc4CisrI2RlZmluZSBMSU5VWF9TQ19YMTVfT0ZGCTB4MDgwCisrI2RlZmluZSBMSU5VWF9TQ19YMTZfT0ZGCTB4MDg4CisrI2RlZmluZSBMSU5VWF9TQ19YMTdfT0ZGCTB4MDkwCisrI2RlZmluZSBMSU5VWF9TQ19YMThfT0ZGCTB4MDk4CisrI2RlZmluZSBMSU5VWF9TQ19YMTlfT0ZGCTB4MGEwCisrI2RlZmluZSBMSU5VWF9TQ19YMjBfT0ZGCTB4MGE4CisrI2RlZmluZSBMSU5VWF9TQ19YMjFfT0ZGCTB4MGIwCisrI2RlZmluZSBMSU5VWF9TQ19YMjJfT0ZGCTB4MGI4CisrI2RlZmluZSBMSU5VWF9TQ19YMjNfT0ZGCTB4MGMwCisrI2RlZmluZSBMSU5VWF9TQ19YMjRfT0ZGCTB4MGM4CisrI2RlZmluZSBMSU5VWF9TQ19YMjVfT0ZGCTB4MGQwCisrI2RlZmluZSBMSU5VWF9TQ19YMjZfT0ZGCTB4MGQ4CisrI2RlZmluZSBMSU5VWF9TQ19YMjdfT0ZGCTB4MGUwCisrI2RlZmluZSBMSU5VWF9TQ19YMjhfT0ZGCTB4MGU4CisrI2RlZmluZSBMSU5VWF9TQ19YMjlfT0ZGCTB4MGYwCisrI2RlZmluZSBMSU5VWF9TQ19YMzBfT0ZGCTB4MGY4CisrI2RlZmluZSBMSU5VWF9TQ19TUF9PRkYJCTB4MTAwCisrI2RlZmluZSBMSU5VWF9TQ19QQ19PRkYJCTB4MTA4CisrI2RlZmluZSBMSU5VWF9TQ19QU1RBVEVfT0ZGCTB4MTEwCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9yZWduYW1lLmMKK0BAIC0wLDAgKzEsMTA2IEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpbmNsdWRlICJ1bndpbmRfaS5oIgorKworK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCByZWduYW1lW10gPQorKyAgeworKyAgICBbVU5XX0FBUkNINjRfWDBdID0gIngwIiwKKysgICAgW1VOV19BQVJDSDY0X1gxXSA9ICJ4MSIsCisrICAgIFtVTldfQUFSQ0g2NF9YMl0gPSAieDIiLAorKyAgICBbVU5XX0FBUkNINjRfWDNdID0gIngzIiwKKysgICAgW1VOV19BQVJDSDY0X1g0XSA9ICJ4NCIsCisrICAgIFtVTldfQUFSQ0g2NF9YNV0gPSAieDUiLAorKyAgICBbVU5XX0FBUkNINjRfWDZdID0gIng2IiwKKysgICAgW1VOV19BQVJDSDY0X1g3XSA9ICJ4NyIsCisrICAgIFtVTldfQUFSQ0g2NF9YOF0gPSAieDgiLAorKyAgICBbVU5XX0FBUkNINjRfWDldID0gIng5IiwKKysgICAgW1VOV19BQVJDSDY0X1gxMF0gPSAieDEwIiwKKysgICAgW1VOV19BQVJDSDY0X1gxMV0gPSAieDExIiwKKysgICAgW1VOV19BQVJDSDY0X1gxMl0gPSAieDEyIiwKKysgICAgW1VOV19BQVJDSDY0X1gxM10gPSAieDEzIiwKKysgICAgW1VOV19BQVJDSDY0X1gxNF0gPSAieDE0IiwKKysgICAgW1VOV19BQVJDSDY0X1gxNV0gPSAieDE1IiwKKysgICAgW1VOV19BQVJDSDY0X1gxNl0gPSAiaXAwIiwKKysgICAgW1VOV19BQVJDSDY0X1gxN10gPSAiaXAxIiwKKysgICAgW1VOV19BQVJDSDY0X1gxOF0gPSAieDE4IiwKKysgICAgW1VOV19BQVJDSDY0X1gxOV0gPSAieDE5IiwKKysgICAgW1VOV19BQVJDSDY0X1gyMF0gPSAieDIwIiwKKysgICAgW1VOV19BQVJDSDY0X1gyMV0gPSAieDIxIiwKKysgICAgW1VOV19BQVJDSDY0X1gyMl0gPSAieDIyIiwKKysgICAgW1VOV19BQVJDSDY0X1gyM10gPSAieDIzIiwKKysgICAgW1VOV19BQVJDSDY0X1gyNF0gPSAieDI0IiwKKysgICAgW1VOV19BQVJDSDY0X1gyNV0gPSAieDI1IiwKKysgICAgW1VOV19BQVJDSDY0X1gyNl0gPSAieDI2IiwKKysgICAgW1VOV19BQVJDSDY0X1gyN10gPSAieDI3IiwKKysgICAgW1VOV19BQVJDSDY0X1gyOF0gPSAieDI4IiwKKysgICAgW1VOV19BQVJDSDY0X1gyOV0gPSAiZnAiLAorKyAgICBbVU5XX0FBUkNINjRfWDMwXSA9ICJsciIsCisrICAgIFtVTldfQUFSQ0g2NF9TUF0gPSAic3AiLAorKyAgICBbVU5XX0FBUkNINjRfUENdID0gInBjIiwKKysgICAgW1VOV19BQVJDSDY0X1YwXSA9ICJ2MCIsCisrICAgIFtVTldfQUFSQ0g2NF9WMV0gPSAidjEiLAorKyAgICBbVU5XX0FBUkNINjRfVjJdID0gInYyIiwKKysgICAgW1VOV19BQVJDSDY0X1YzXSA9ICJ2MyIsCisrICAgIFtVTldfQUFSQ0g2NF9WNF0gPSAidjQiLAorKyAgICBbVU5XX0FBUkNINjRfVjVdID0gInY1IiwKKysgICAgW1VOV19BQVJDSDY0X1Y2XSA9ICJ2NiIsCisrICAgIFtVTldfQUFSQ0g2NF9WN10gPSAidjciLAorKyAgICBbVU5XX0FBUkNINjRfVjhdID0gInY4IiwKKysgICAgW1VOV19BQVJDSDY0X1Y5XSA9ICJ2OSIsCisrICAgIFtVTldfQUFSQ0g2NF9WMTBdID0gInYxMCIsCisrICAgIFtVTldfQUFSQ0g2NF9WMTFdID0gInYxMSIsCisrICAgIFtVTldfQUFSQ0g2NF9WMTJdID0gInYxMiIsCisrICAgIFtVTldfQUFSQ0g2NF9WMTNdID0gInYxMyIsCisrICAgIFtVTldfQUFSQ0g2NF9WMTRdID0gInYxNCIsCisrICAgIFtVTldfQUFSQ0g2NF9WMTVdID0gInYxNSIsCisrICAgIFtVTldfQUFSQ0g2NF9WMTZdID0gInYxNiIsCisrICAgIFtVTldfQUFSQ0g2NF9WMTddID0gInYxNyIsCisrICAgIFtVTldfQUFSQ0g2NF9WMThdID0gInYxOCIsCisrICAgIFtVTldfQUFSQ0g2NF9WMTldID0gInYxOSIsCisrICAgIFtVTldfQUFSQ0g2NF9WMjBdID0gInYyMCIsCisrICAgIFtVTldfQUFSQ0g2NF9WMjFdID0gInYyMSIsCisrICAgIFtVTldfQUFSQ0g2NF9WMjJdID0gInYyMiIsCisrICAgIFtVTldfQUFSQ0g2NF9WMjNdID0gInYyMyIsCisrICAgIFtVTldfQUFSQ0g2NF9WMjRdID0gInYyNCIsCisrICAgIFtVTldfQUFSQ0g2NF9WMjVdID0gInYyNSIsCisrICAgIFtVTldfQUFSQ0g2NF9WMjZdID0gInYyNiIsCisrICAgIFtVTldfQUFSQ0g2NF9WMjddID0gInYyNyIsCisrICAgIFtVTldfQUFSQ0g2NF9WMjhdID0gInYyOCIsCisrICAgIFtVTldfQUFSQ0g2NF9WMjldID0gInYyOSIsCisrICAgIFtVTldfQUFSQ0g2NF9WMzBdID0gInYzMCIsCisrICAgIFtVTldfQUFSQ0g2NF9WMzFdID0gInYzMSIsCisrICAgIFtVTldfQUFSQ0g2NF9GUFNSXSA9ICJmcHNyIiwKKysgICAgW1VOV19BQVJDSDY0X0ZQQ1JdID0gImZwY3IiLAorKyAgfTsKKysKKytQUk9URUNURUQgY29uc3QgY2hhciAqCisrdW53X3JlZ25hbWUgKHVud19yZWdudW1fdCByZWcpCisreworKyAgaWYgKHJlZyA8ICh1bndfcmVnbnVtX3QpIEFSUkFZX1NJWkUgKHJlZ25hbWUpICYmIHJlZ25hbWVbcmVnXSAhPSBOVUxMKQorKyAgICByZXR1cm4gcmVnbmFtZVtyZWddOworKyAgZWxzZQorKyAgICByZXR1cm4gIj8/PyI7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvc2lnbG9uZ2ptcC5TCitAQCAtMCwwICsxLDEyIEBACisrCS8qIER1bW15IGltcGxlbWVudGF0aW9uIGZvciBub3cuICAqLworKworKwkuZ2xvYmFsIF9VSV9zaWdsb25nam1wX2NvbnQKKysJLmdsb2JhbCBfVUlfbG9uZ2ptcF9jb250CisrCisrX1VJX3NpZ2xvbmdqbXBfY29udDoKKytfVUlfbG9uZ2ptcF9jb250OgorKwlyZXQKKysjaWZkZWYgX19saW51eF9fCisrIC8qIFdlIGRvIG5vdCBuZWVkIGV4ZWN1dGFibGUgc3RhY2suICAqLworKyAuc2VjdGlvbiAgLm5vdGUuR05VLXN0YWNrLCIiLCVwcm9nYml0cworKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvdW53aW5kX2kuaAorQEAgLTAsMCArMSw0MyBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaWZuZGVmIHVud2luZF9pX2gKKysjZGVmaW5lIHVud2luZF9pX2gKKysKKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrCisrI2luY2x1ZGUgPGxpYnVud2luZC1hYXJjaDY0Lmg+CisrCisrI2luY2x1ZGUgImxpYnVud2luZF9pLmgiCisrCisrI2RlZmluZSBhYXJjaDY0X2xvY2sJCQlVTldfT0JKKGxvY2spCisrI2RlZmluZSBhYXJjaDY0X2xvY2FsX3Jlc3VtZQkJVU5XX09CSihsb2NhbF9yZXN1bWUpCisrI2RlZmluZSBhYXJjaDY0X2xvY2FsX2FkZHJfc3BhY2VfaW5pdAlVTldfT0JKKGxvY2FsX2FkZHJfc3BhY2VfaW5pdCkKKysKKytleHRlcm4gdm9pZCBhYXJjaDY0X2xvY2FsX2FkZHJfc3BhY2VfaW5pdCAodm9pZCk7CisrZXh0ZXJuIGludCBhYXJjaDY0X2xvY2FsX3Jlc3VtZSAodW53X2FkZHJfc3BhY2VfdCBhcywgdW53X2N1cnNvcl90ICpjdXJzb3IsCisrCQkJICAgICB2b2lkICphcmcpOworKworKyNlbmRpZiAvKiB1bndpbmRfaV9oICovCistLS0gYS9zcmMvY29yZWR1bXAvX1VDRF9hY2Nlc3NfcmVnX2xpbnV4LmMKKysrKyBiL3NyYy9jb3JlZHVtcC9fVUNEX2FjY2Vzc19yZWdfbGludXguYworQEAgLTM5LDcgKzM5LDEwIEBAIF9VQ0RfYWNjZXNzX3JlZyAodW53X2FkZHJfc3BhY2VfdCBhcywKKyAgICAgICByZXR1cm4gLVVOV19FSU5WQUw7CisgICAgIH0KKyAKKy0jaWYgZGVmaW5lZChVTldfVEFSR0VUX0FSTSkKKysjaWYgZGVmaW5lZChVTldfVEFSR0VUX0FBUkNINjQpCisrICBpZiAocmVnbnVtIDwgMCB8fCByZWdudW0gPj0gVU5XX0FBUkNINjRfRlBDUikKKysgICAgZ290byBiYWRyZWc7CisrI2VsaWYgZGVmaW5lZChVTldfVEFSR0VUX0FSTSkKKyAgIGlmIChyZWdudW0gPCAwIHx8IHJlZ251bSA+PSAxNikKKyAgICAgZ290byBiYWRyZWc7CisgI2VsaWYgZGVmaW5lZChVTldfVEFSR0VUX1NIKQorLS0tIGEvc3JjL3B0cmFjZS9fVVBUX3JlZ19vZmZzZXQuYworKysrIGIvc3JjL3B0cmFjZS9fVVBUX3JlZ19vZmZzZXQuYworQEAgLTEsNiArMSw3IEBACisgLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorICAgIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IEhld2xldHQtUGFja2FyZCBDbworIAlDb250cmlidXRlZCBieSBEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisgCisgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorIAorQEAgLTUwMSw2ICs1MDIsNDEgQEAgY29uc3QgaW50IF9VUFRfcmVnX29mZnNldFtVTldfUkVHX0xBU1QgKworICAgICBbVU5XX0FSTV9SMTVdICAgICAgPSAweDNjLAorICNlbGlmIGRlZmluZWQoVU5XX1RBUkdFVF9NSVBTKQorICNlbGlmIGRlZmluZWQoVU5XX1RBUkdFVF9TSCkKKysjZWxpZiBkZWZpbmVkKFVOV19UQVJHRVRfQUFSQ0g2NCkKKysgICAgW1VOV19BQVJDSDY0X1gwXSAgICAgICA9IDB4MDAsCisrICAgIFtVTldfQUFSQ0g2NF9YMV0gICAgICAgPSAweDA4LAorKyAgICBbVU5XX0FBUkNINjRfWDJdICAgICAgID0gMHgxMCwKKysgICAgW1VOV19BQVJDSDY0X1gzXSAgICAgICA9IDB4MTgsCisrICAgIFtVTldfQUFSQ0g2NF9YNF0gICAgICAgPSAweDIwLAorKyAgICBbVU5XX0FBUkNINjRfWDVdICAgICAgID0gMHgyOCwKKysgICAgW1VOV19BQVJDSDY0X1g2XSAgICAgICA9IDB4MzAsCisrICAgIFtVTldfQUFSQ0g2NF9YN10gICAgICAgPSAweDM4LAorKyAgICBbVU5XX0FBUkNINjRfWDhdICAgICAgID0gMHg0MCwKKysgICAgW1VOV19BQVJDSDY0X1g5XSAgICAgICA9IDB4NDgsCisrICAgIFtVTldfQUFSQ0g2NF9YMTBdICAgICAgPSAweDUwLAorKyAgICBbVU5XX0FBUkNINjRfWDExXSAgICAgID0gMHg1OCwKKysgICAgW1VOV19BQVJDSDY0X1gxMl0gICAgICA9IDB4NjAsCisrICAgIFtVTldfQUFSQ0g2NF9YMTNdICAgICAgPSAweDY4LAorKyAgICBbVU5XX0FBUkNINjRfWDE0XSAgICAgID0gMHg3MCwKKysgICAgW1VOV19BQVJDSDY0X1gxNV0gICAgICA9IDB4NzgsCisrICAgIFtVTldfQUFSQ0g2NF9YMTZdICAgICAgPSAweDgwLAorKyAgICBbVU5XX0FBUkNINjRfWDE3XSAgICAgID0gMHg4OCwKKysgICAgW1VOV19BQVJDSDY0X1gxOF0gICAgICA9IDB4OTAsCisrICAgIFtVTldfQUFSQ0g2NF9YMTldICAgICAgPSAweDk4LAorKyAgICBbVU5XX0FBUkNINjRfWDIwXSAgICAgID0gMHhhMCwKKysgICAgW1VOV19BQVJDSDY0X1gyMV0gICAgICA9IDB4YTgsCisrICAgIFtVTldfQUFSQ0g2NF9YMjJdICAgICAgPSAweGIwLAorKyAgICBbVU5XX0FBUkNINjRfWDIzXSAgICAgID0gMHhiOCwKKysgICAgW1VOV19BQVJDSDY0X1gyNF0gICAgICA9IDB4YzAsCisrICAgIFtVTldfQUFSQ0g2NF9YMjVdICAgICAgPSAweGM4LAorKyAgICBbVU5XX0FBUkNINjRfWDI2XSAgICAgID0gMHhkMCwKKysgICAgW1VOV19BQVJDSDY0X1gyN10gICAgICA9IDB4ZDgsCisrICAgIFtVTldfQUFSQ0g2NF9YMjhdICAgICAgPSAweGUwLAorKyAgICBbVU5XX0FBUkNINjRfWDI5XSAgICAgID0gMHhlOCwKKysgICAgW1VOV19BQVJDSDY0X1gzMF0gICAgICA9IDB4ZjAsCisrICAgIFtVTldfQUFSQ0g2NF9TUF0gICAgICAgPSAweGY4LAorKyAgICBbVU5XX0FBUkNINjRfUENdICAgICAgID0gMHgxMDAsCisrICAgIFtVTldfQUFSQ0g2NF9QU1RBVEVdICAgPSAweDEwOAorICNlbHNlCisgIyBlcnJvciBGaXggbWUuCisgI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL0ZpeC10ZXN0LWNhc2UtbGluay1mYWlsdXJlLW9uLVBvd2VyUEMtc3lzdGVtcy13aXRoLUFsdGl2ZWMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL0ZpeC10ZXN0LWNhc2UtbGluay1mYWlsdXJlLW9uLVBvd2VyUEMtc3lzdGVtcy13aXRoLUFsdGl2ZWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMwZjVjMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvRml4LXRlc3QtY2FzZS1saW5rLWZhaWx1cmUtb24tUG93ZXJQQy1zeXN0ZW1zLXdpdGgtQWx0aXZlYy5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGaXggdGVzdCBjYXNlIGxpbmsgZmFpbHVyZSBvbiBQb3dlclBDIHN5c3RlbXMgd2l0aCBBbHRpdmVjCisKK1Vwc3RyZWFtLVN0YXR1czpiYWNrcG9ydAorCitPbiBzeXN0ZW1zIHdoZXJlIHRoZSBzeXN0ZW0gY29tcGlsZXIgc3VwcG9ydHMgQWx0aXZlYyBieSBkZWZhdWx0LAordGhlIGxpYnVud2luZCBNYWtlZmlsZSB3aWxsIGF0dGVtcHQgdG8gYnVpbGQgYW4gZXh0cmEgdGVzdCBjYXNlCitwcGM2NC10ZXN0LWFsdGl2ZWMuICBVbmZvcnR1bmF0ZWx5LCB0aGUgbGluayBzdGVwIHdpbGwgZmFpbCBzaW5jZQordGhlIE1ha2VmaWxlIGRvZXMgbm90IGFjdHVhbGx5IGxpbmsgYWdhaW5zdCB0aGUgbGlidW53aW5kIGxpYnJhcnkuCisKK0ZpeGVkIGJ5IGFkZGluZyB0aGUgYXBwcm9wcmlhdGUgTERBREQgbWFjcm8uCisKK1NpZ25lZC1vZmYtYnk6IFVscmljaCBXZWlnYW5kIDxhZGRyZXNzQGhpZGRlbj4KKy0tLQorIHRlc3RzL01ha2VmaWxlLmFtIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCAwZTMwNTM2Li45Yzc2NjI4IDEwMDY0NAorLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMjAxLDMgKzIwMSw0IEBAIExpYTY0X3Rlc3RfcmJzX0xEQUREID0gJChMSUJVTldJTkRfbG9jYWwpCisgTGlhNjRfdGVzdF9yZWFkb25seV9MREFERCA9ICQoTElCVU5XSU5EX2xvY2FsKQorIGlhNjRfdGVzdF9keW4xX0xEQUREID0gJChMSUJVTldJTkQpCisgaWE2NF90ZXN0X3NpZ19MREFERCA9ICQoTElCVU5XSU5EKQorK3BwYzY0X3Rlc3RfYWx0aXZlY19MREFERCA9ICQoTElCVU5XSU5EKQorLS0gCisxLjguNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL0xpbmstbGlidW53aW5kLXRvLWxpYmdjY19zLXJhdGhlci10aGFuLWxpYmdjYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvTGluay1saWJ1bndpbmQtdG8tbGliZ2NjX3MtcmF0aGVyLXRoYW4tbGliZ2NjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNTVjOTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL0xpbmstbGlidW53aW5kLXRvLWxpYmdjY19zLXJhdGhlci10aGFuLWxpYmdjYy5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDUwOGNhMTdhN2JlMDFkMWNjOTYwZDlhMDdkMGFmNDUxMzk0OGZiOGQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUaGllcnJ5IFJlZGluZyA8dHJlZGluZ0BudmlkaWEuY29tPgorRGF0ZTogRnJpLCAyNyBKdW4gMjAxNCAwODo0MDozMyArMDIwMAorU3ViamVjdDogW1BBVENIXSBMaW5rIGxpYnVud2luZCB0byBsaWJnY2NfcyByYXRoZXIgdGhhbiBsaWJnY2MKKworRm9yIHNvbWUgYXJjaGl0ZWN0dXJlcywgLWxnY2MgYW5kIC1sZ2NjX3MgYXJlIG5vdCBlcXVpdmFsZW50LiBPbiBBUk0gZm9yCitleGFtcGxlLCBsaWJnY2Nfcy5zby4xIGNvbnRhaW5zIHNvbWUgc3ltYm9scyBuZWVkZWQgYnkgbGlidW53aW5kIHdoaWNoCithcmUgbm90IHByZXNlbnQgaW4gbGliZ2NjLgorCitUaGlzIGNhdXNlcyB0aGUgZm9sbG93aW5nIGxpbmsgZXJyb3Igd2hlbiBidWlsZGluZyB0aGUgWC5PcmcgWCBzZXJ2ZXIKK3dpdGggbGlidW53aW5kIHN1cHBvcnQ6CisKKwkgIENDTEQgICAgIFhvcmcKKwkvdXNyL2xpYi9saWJ1bndpbmQuc286IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fYWVhYmlfdW53aW5kX2NwcF9wcjAnCisJL3Vzci9saWIvbGlidW53aW5kLnNvOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX2FlYWJpX3Vud2luZF9jcHBfcHIxJworCitMaW5raW5nIGFnYWluc3QgbGliZ2NjX3MgZXhwbGljaXRseSBzb2x2ZXMgdGhpcyBwcm9ibGVtLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFRoaWVycnkgUmVkaW5nIDx0cmVkaW5nQG52aWRpYS5jb20+CitTaWduZWQtb2ZmLWJ5OiBKb25hdGhhbiBMaXUgPG5ldDE0N0BnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGNmZmUxOWIuLjNiZWI1ZjIgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI1OCw3ICsyNTgsNyBAQCBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbXV0sIFtbI2lmbmRlZiBfX0lOVEVMX0NPTVBJTEVSCisgCisgaWYgdGVzdCB4JEdDQyA9IHh5ZXMgLWEgeCRpbnRlbF9jb21waWxlciAhPSB4eWVzOyB0aGVuCisgICBDRkxBR1M9IiR7Q0ZMQUdTfSAtZmV4Y2VwdGlvbnMgLVdhbGwgLVdzaWduLWNvbXBhcmUiCistICBMSUJDUlRTPSItbGdjYyIKKysgIExJQkNSVFM9Ii1sZ2NjX3MiCisgZmkKKyBBQ19NU0dfUkVTVUxUKFskaW50ZWxfY29tcGlsZXJdKQorIAorLS0gCisyLjMuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL1N1cHBvcnQtYnVpbGRpbmctd2l0aC1vbGRlci1jb21waWxlcnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL1N1cHBvcnQtYnVpbGRpbmctd2l0aC1vbGRlci1jb21waWxlcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY4YjcwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvU3VwcG9ydC1idWlsZGluZy13aXRoLW9sZGVyLWNvbXBpbGVycy5wYXRjaApAQCAtMCwwICsxLDcyIEBACitGcm9tIDEwYjA2NGZmZTkwMmQ1YWYzMWJiNDliZDhlNGYwM2M1NDVmOGQ0NjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMYWRpc2xhdiBNaWNobCA8bGFkaXNAbGludXgtbWlwcy5vcmc+CitEYXRlOiBUdWUsIDEzIE5vdiAyMDEyIDExOjE5OjQ3ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIFN1cHBvcnQgYnVpbGRpbmcgd2l0aCBvbGRlciBjb21waWxlcnMuCisKK0FkZCBhIGNoZWNrIGZvciBfX2J1aWx0aW5fdW5yZWFjaGFibGUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgY29uZmlndXJlLmFjICAgICAgICAgIHwgICAxMSArKysrKysrKysrKworIGluY2x1ZGUvbGlidW53aW5kX2kuaCB8ICAgIDYgKysrKysrCisgc3JjL2FybS9HcmVzdW1lLmMgICAgIHwgICAgMiArLQorIHNyYy9zaC9HcmVzdW1lLmMgICAgICB8ICAgIDIgKy0KKyA0IGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjg1LDYgKzI4NSwxNyBAQCBpZiB0ZXN0IHgkaGF2ZV9fYnVpbHRpbl9fX2NsZWFyX2NhY2hlID0KKyBmaQorIEFDX01TR19SRVNVTFQoWyRoYXZlX19idWlsdGluX19fY2xlYXJfY2FjaGVdKQorIAorK0FDX01TR19DSEVDS0lORyhbZm9yIF9fYnVpbHRpbl91bnJlYWNoYWJsZV0pCisrQUNfTElOS19JRkVMU0UoCisrICBbQUNfTEFOR19QUk9HUkFNKFtbXV0sIFtbX19idWlsdGluX3VucmVhY2hhYmxlKCldXSldLAorKyAgW2hhdmVfX2J1aWx0aW5fdW5yZWFjaGFibGU9eWVzXSwKKysgIFtoYXZlX19idWlsdGluX3VucmVhY2hhYmxlPW5vXSkKKytpZiB0ZXN0IHgkaGF2ZV9fYnVpbHRpbl91bnJlYWNoYWJsZSA9IHh5ZXM7IHRoZW4KKysgIEFDX0RFRklORShbSEFWRV9fQlVJTFRJTl9VTlJFQUNIQUJMRV0sIFsxXSwKKysgICAgICAgICAgICBbRGVmaW5lZCBpZiBfX2J1aWx0aW5fdW5yZWFjaGFibGUoKSBpcyBhdmFpbGFibGVdKQorK2ZpCisrQUNfTVNHX1JFU1VMVChbJGhhdmVfX2J1aWx0aW5fdW5yZWFjaGFibGVdKQorKworIEFDX01TR19DSEVDS0lORyhbZm9yIF9fc3luYyBhdG9taWNzXSkKKyBBQ19MSU5LX0lGRUxTRSgKKyAgIFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1sKKy0tLSBhL2luY2x1ZGUvbGlidW53aW5kX2kuaAorKysrIGIvaW5jbHVkZS9saWJ1bndpbmRfaS5oCitAQCAtNzIsNiArNzIsMTIgQEAgV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERQorICMgZW5kaWYKKyAjZW5kaWYKKyAKKysjaWYgZGVmaW5lZChIQVZFX19CVUlMVElOX1VOUkVBQ0hBQkxFKQorKyMgZGVmaW5lIHVucmVhY2hhYmxlKCkgX19idWlsdGluX3VucmVhY2hhYmxlKCkKKysjZWxzZQorKyMgZGVmaW5lIHVucmVhY2hhYmxlKCkgZG8geyB9IHdoaWxlICgxKQorKyNlbmRpZgorKworICNpZmRlZiBERUJVRworICMgZGVmaW5lIFVOV19ERUJVRwkxCisgI2Vsc2UKKy0tLSBhL3NyYy9hcm0vR3Jlc3VtZS5jCisrKysgYi9zcmMvYXJtL0dyZXN1bWUuYworQEAgLTk2LDcgKzk2LDcgQEAgYXJtX2xvY2FsX3Jlc3VtZSAodW53X2FkZHJfc3BhY2VfdCBhcywgdQorIAk6IDogInIiIChjLT5zaWdjb250ZXh0X3NwKSwgInIiIChjLT5zaWdjb250ZXh0X3BjKQorICAgICAgICk7CisgICAgfQorLSAgX19idWlsdGluX3VucmVhY2hhYmxlKCk7CisrICB1bnJlYWNoYWJsZSgpOworICNlbHNlCisgICBwcmludGYgKCIlczogaW1wbGVtZW50IG1lXG4iLCBfX0ZVTkNUSU9OX18pOworICNlbmRpZgorLS0tIGEvc3JjL3NoL0dyZXN1bWUuYworKysrIGIvc3JjL3NoL0dyZXN1bWUuYworQEAgLTEwOSw3ICsxMDksNyBAQCBzaF9sb2NhbF9yZXN1bWUgKHVud19hZGRyX3NwYWNlX3QgYXMsIHVuCisgCSAgInIiIChjLT5zaWdjb250ZXh0X3BjKQorICAgICAgICk7CisgICAgfQorLSAgX19idWlsdGluX3VucmVhY2hhYmxlKCk7CisrICB1bnJlYWNoYWJsZSgpOworICNlbmRpZgorICAgcmV0dXJuIC1VTldfRUlOVkFMOworIH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NjBhZjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQuaW5jCkBAIC0wLDAgKzEsMzEgQEAKK0RFU0NSSVBUSU9OID0gImEgcG9ydGFibGUgYW5kIGVmZmljaWVudCBDIHByb2dyYW1taW5nIGludGVyZmFjZSAoQVBJKSB0byBkZXRlcm1pbmUgdGhlIGNhbGwtY2hhaW4gb2YgYSBwcm9ncmFtIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ub25nbnUub3JnL2xpYnVud2luZCIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9M2ZjZWQxMWQ2ZGY3MTliNDc1MDU4MzdhNTFjMTZhZTUiCitERVBFTkRTICs9ICJsaWJhdG9taWMtb3BzIgorCitTUkNfVVJJID0gIiR7U0FWQU5OQUhfTk9OR05VX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3oiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2x6bWFdID0gIi0tZW5hYmxlLW1pbmlkZWJ1Z2luZm8sLS1kaXNhYmxlLW1pbmlkZWJ1Z2luZm8seHoiCisKK0VYVFJBX09FQ09ORl9hcm0gPSAiLS1lbmFibGUtZGVidWctZnJhbWUiCitFWFRSQV9PRUNPTkZfYWFyY2g2NCA9ICItLWVuYWJsZS1kZWJ1Zy1mcmFtZSIKKworQ0ZMQUdTICs9ICIke0FUT01JQ09QU30iCitBVE9NSUNPUFNfYXJtdjUgPSAiLURBT19VU0VfUFRIUkVBRF9ERUZTPTEiCitBVE9NSUNPUFNfYXJtdjQgPSAiLURBT19VU0VfUFRIUkVBRF9ERUZTPTEiCitBVE9NSUNPUFMgPz0gIiIKKworTERGTEFHU19hcHBlbmRfeDg2ID0gIiAtZnVzZS1sZD1nb2xkIgorTERGTEFHU19hcHBlbmRfeDg2LTY0ID0gIiAtZnVzZS1sZD1nb2xkIgorCitMREZMQUdTX2FwcGVuZF9hcm0gPSAiIC1mdXNlLWxkPWdvbGQiCitMREZMQUdTX2FwcGVuZF9hYXJjaDY0ID0gIiAtZnVzZS1sZD1nb2xkIgorCitMREZMQUdTX2FwcGVuZF9wb3dlcnBjID0gIiAtZnVzZS1sZD1nb2xkIgorTERGTEFHU19hcHBlbmRfcG93ZXJwYzY0ID0gIiAtZnVzZS1sZD1nb2xkIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZF8xLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmRfMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyODJjMWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmRfMS4xLmJiCkBAIC0wLDAgKzEsMTIgQEAKK3JlcXVpcmUgbGlidW53aW5kLmluYworCitTUkNfVVJJICs9ICJcCisgICAgZmlsZTovL1N1cHBvcnQtYnVpbGRpbmctd2l0aC1vbGRlci1jb21waWxlcnMucGF0Y2ggXAorICAgIGZpbGU6Ly9BQXJjaDY0LXBvcnQucGF0Y2ggXAorICAgIGZpbGU6Ly9GaXgtdGVzdC1jYXNlLWxpbmstZmFpbHVyZS1vbi1Qb3dlclBDLXN5c3RlbXMtd2l0aC1BbHRpdmVjLnBhdGNoIFwKKyAgICBmaWxlOi8vTGluay1saWJ1bndpbmQtdG8tbGliZ2NjX3MtcmF0aGVyLXRoYW4tbGliZ2NjLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMS1JbnZhbGlkLWR3YXJmLW9wY29kZXMtY2FuLWNhdXNlLXJlZmVyZW5jZXMtYmV5b25kLXRoLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImZiNGVhMmY2ZmJiZTQ1YmYwMzJjZDM2ZTU4Njg4M2NlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlkZmUwZmNhZTJhODY2ZGU5ZDM5NDJjNjY5OTVlNGI0NjAyMzA0NDY4ODdkYmRhYjMwMmQ0MWE4YWVlOGQwOWEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdS8wMDAxLXVhdG9taWMtU3BlY2lmeS1jb21wbGV0ZS10eXBlcy1mb3ItYXRvbWljLWZ1bmN0aW9uLWMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdS8wMDAxLXVhdG9taWMtU3BlY2lmeS1jb21wbGV0ZS10eXBlcy1mb3ItYXRvbWljLWZ1bmN0aW9uLWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFkMGJiZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1LzAwMDEtdWF0b21pYy1TcGVjaWZ5LWNvbXBsZXRlLXR5cGVzLWZvci1hdG9taWMtZnVuY3Rpb24tYy5wYXRjaApAQCAtMCwwICsxLDE1OCBAQAorRnJvbSA2YWY3OTA4MThkMDc0YzEwM2M0Nzk3ZjFjZTc2NDg5NmYxODNlMDI4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMjIgQXVnIDIwMTUgMjE6MzU6MDMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gdWF0b21pYzogU3BlY2lmeSBjb21wbGV0ZSB0eXBlcyBmb3IgYXRvbWljIGZ1bmN0aW9uIGNhbGxzCisKK1RoaXMgd2FzIHVuZWFydGhlZCBieSBjbGFuZyBjb21waWxlciB3aGVyZSBpdCBjb21wbGFpbmVkIGFib3V0IHBhcmFtZXRlcgorbWlzbWF0Y2gsIGdjYyBkb2VzbnQgbm90aWNlIHRoaXMKKwordXJjdS91YXRvbWljL2dlbmVyaWMuaDoxOTA6MTA6IGVycm9yOiBhZGRyZXNzIGFyZ3VtZW50IHRvIGF0b21pYyBidWlsdGluCittdXN0IGJlIGEgcG9pbnRlciB0byBpbnRlZ2VyIG9yIHBvaW50ZXIgKCd2b2lkIConIGludmFsaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuIF9fc3luY19hZGRfYW5kX2ZldGNoXzQoYWRkciwgdmFsKTsKKworRml4ZWQgYWxsIGluc3RhbmNlcyB0aHVzbHkKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworIHVyY3UvdWF0b21pYy9nZW5lcmljLmggfCA0MCArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDIwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdXJjdS91YXRvbWljL2dlbmVyaWMuaCBiL3VyY3UvdWF0b21pYy9nZW5lcmljLmgKK2luZGV4IDM3ZjU5Y2MuLjAwNDZmZmQgMTAwNjQ0CistLS0gYS91cmN1L3VhdG9taWMvZ2VuZXJpYy5oCisrKysgYi91cmN1L3VhdG9taWMvZ2VuZXJpYy5oCitAQCAtNjUsMTcgKzY1LDE3IEBAIHVuc2lnbmVkIGxvbmcgX3VhdG9taWNfY21weGNoZyh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG9sZCwKKyAJc3dpdGNoIChsZW4pIHsKKyAjaWZkZWYgVUFUT01JQ19IQVNfQVRPTUlDX0JZVEUKKyAJY2FzZSAxOgorLQkJcmV0dXJuIF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcF8xKGFkZHIsIG9sZCwgX25ldyk7CisrCQlyZXR1cm4gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwXzEoKHVuc2lnbmVkIGNoYXIgKilhZGRyLCBvbGQsIF9uZXcpOworICNlbmRpZgorICNpZmRlZiBVQVRPTUlDX0hBU19BVE9NSUNfU0hPUlQKKyAJY2FzZSAyOgorLQkJcmV0dXJuIF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcF8yKGFkZHIsIG9sZCwgX25ldyk7CisrCQlyZXR1cm4gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwXzIoKHVuc2lnbmVkIHNob3J0IGludCAqKWFkZHIsIG9sZCwgX25ldyk7CisgI2VuZGlmCisgCWNhc2UgNDoKKy0JCXJldHVybiBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXBfNChhZGRyLCBvbGQsIF9uZXcpOworKwkJcmV0dXJuIF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcF80KCh1bnNpZ25lZCBpbnQgKilhZGRyLCBvbGQsIF9uZXcpOworICNpZiAoQ0FBX0JJVFNfUEVSX0xPTkcgPT0gNjQpCisgCWNhc2UgODoKKy0JCXJldHVybiBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXBfOChhZGRyLCBvbGQsIF9uZXcpOworKwkJcmV0dXJuIF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcF84KCh1bnNpZ25lZCBsb25nICopYWRkciwgb2xkLCBfbmV3KTsKKyAjZW5kaWYKKyAJfQorIAlfdWF0b21pY19saW5rX2Vycm9yKCk7CitAQCAtMTAwLDIwICsxMDAsMjAgQEAgdm9pZCBfdWF0b21pY19hbmQodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyB2YWwsCisgCXN3aXRjaCAobGVuKSB7CisgI2lmZGVmIFVBVE9NSUNfSEFTX0FUT01JQ19CWVRFCisgCWNhc2UgMToKKy0JCV9fc3luY19hbmRfYW5kX2ZldGNoXzEoYWRkciwgdmFsKTsKKysJCV9fc3luY19hbmRfYW5kX2ZldGNoXzEoKHVuc2lnbmVkIGNoYXIgKilhZGRyLCB2YWwpOworIAkJcmV0dXJuOworICNlbmRpZgorICNpZmRlZiBVQVRPTUlDX0hBU19BVE9NSUNfU0hPUlQKKyAJY2FzZSAyOgorLQkJX19zeW5jX2FuZF9hbmRfZmV0Y2hfMihhZGRyLCB2YWwpOworKwkJX19zeW5jX2FuZF9hbmRfZmV0Y2hfMigodW5zaWduZWQgc2hvcnQgaW50ICopYWRkciwgdmFsKTsKKyAJCXJldHVybjsKKyAjZW5kaWYKKyAJY2FzZSA0OgorLQkJX19zeW5jX2FuZF9hbmRfZmV0Y2hfNChhZGRyLCB2YWwpOworKwkJX19zeW5jX2FuZF9hbmRfZmV0Y2hfNCgodW5zaWduZWQgaW50ICopYWRkciwgdmFsKTsKKyAJCXJldHVybjsKKyAjaWYgKENBQV9CSVRTX1BFUl9MT05HID09IDY0KQorIAljYXNlIDg6CistCQlfX3N5bmNfYW5kX2FuZF9mZXRjaF84KGFkZHIsIHZhbCk7CisrCQlfX3N5bmNfYW5kX2FuZF9mZXRjaF84KCh1bnNpZ25lZCBsb25nICopYWRkciwgdmFsKTsKKyAJCXJldHVybjsKKyAjZW5kaWYKKyAJfQorQEAgLTEzOSwyMCArMTM5LDIwIEBAIHZvaWQgX3VhdG9taWNfb3Iodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyB2YWwsCisgCXN3aXRjaCAobGVuKSB7CisgI2lmZGVmIFVBVE9NSUNfSEFTX0FUT01JQ19CWVRFCisgCWNhc2UgMToKKy0JCV9fc3luY19vcl9hbmRfZmV0Y2hfMShhZGRyLCB2YWwpOworKwkJX19zeW5jX29yX2FuZF9mZXRjaF8xKCh1bnNpZ25lZCBjaGFyICopYWRkciwgdmFsKTsKKyAJCXJldHVybjsKKyAjZW5kaWYKKyAjaWZkZWYgVUFUT01JQ19IQVNfQVRPTUlDX1NIT1JUCisgCWNhc2UgMjoKKy0JCV9fc3luY19vcl9hbmRfZmV0Y2hfMihhZGRyLCB2YWwpOworKwkJX19zeW5jX29yX2FuZF9mZXRjaF8yKCh1bnNpZ25lZCBzaG9ydCBpbnQgKilhZGRyLCB2YWwpOworIAkJcmV0dXJuOworICNlbmRpZgorIAljYXNlIDQ6CistCQlfX3N5bmNfb3JfYW5kX2ZldGNoXzQoYWRkciwgdmFsKTsKKysJCV9fc3luY19vcl9hbmRfZmV0Y2hfNCgodW5zaWduZWQgaW50ICopYWRkciwgdmFsKTsKKyAJCXJldHVybjsKKyAjaWYgKENBQV9CSVRTX1BFUl9MT05HID09IDY0KQorIAljYXNlIDg6CistCQlfX3N5bmNfb3JfYW5kX2ZldGNoXzgoYWRkciwgdmFsKTsKKysJCV9fc3luY19vcl9hbmRfZmV0Y2hfOCgodW5zaWduZWQgbG9uZyAqKWFkZHIsIHZhbCk7CisgCQlyZXR1cm47CisgI2VuZGlmCisgCX0KK0BAIC0xODAsMTcgKzE4MCwxNyBAQCB1bnNpZ25lZCBsb25nIF91YXRvbWljX2FkZF9yZXR1cm4odm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyB2YWwsCisgCXN3aXRjaCAobGVuKSB7CisgI2lmZGVmIFVBVE9NSUNfSEFTX0FUT01JQ19CWVRFCisgCWNhc2UgMToKKy0JCXJldHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaF8xKGFkZHIsIHZhbCk7CisrCQlyZXR1cm4gX19zeW5jX2FkZF9hbmRfZmV0Y2hfMSgodW5zaWduZWQgY2hhciAqKWFkZHIsIHZhbCk7CisgI2VuZGlmCisgI2lmZGVmIFVBVE9NSUNfSEFTX0FUT01JQ19TSE9SVAorIAljYXNlIDI6CistCQlyZXR1cm4gX19zeW5jX2FkZF9hbmRfZmV0Y2hfMihhZGRyLCB2YWwpOworKwkJcmV0dXJuIF9fc3luY19hZGRfYW5kX2ZldGNoXzIoKHVuc2lnbmVkIHNob3J0IGludCAqKWFkZHIsIHZhbCk7CisgI2VuZGlmCisgCWNhc2UgNDoKKy0JCXJldHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaF80KGFkZHIsIHZhbCk7CisrCQlyZXR1cm4gX19zeW5jX2FkZF9hbmRfZmV0Y2hfNCgodW5zaWduZWQgaW50ICopYWRkciwgdmFsKTsKKyAjaWYgKENBQV9CSVRTX1BFUl9MT05HID09IDY0KQorIAljYXNlIDg6CistCQlyZXR1cm4gX19zeW5jX2FkZF9hbmRfZmV0Y2hfOChhZGRyLCB2YWwpOworKwkJcmV0dXJuIF9fc3luY19hZGRfYW5kX2ZldGNoXzgoKHVuc2lnbmVkIGxvbmcgKilhZGRyLCB2YWwpOworICNlbmRpZgorIAl9CisgCV91YXRvbWljX2xpbmtfZXJyb3IoKTsKK0BAIC0yMTgsNyArMjE4LDcgQEAgdW5zaWduZWQgbG9uZyBfdWF0b21pY19leGNoYW5nZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCwgaW50IGxlbikKKyAKKyAJCWRvIHsKKyAJCQlvbGQgPSB1YXRvbWljX3JlYWQoKHVuc2lnbmVkIGNoYXIgKilhZGRyKTsKKy0JCX0gd2hpbGUgKCFfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwXzEoYWRkciwgb2xkLCB2YWwpKTsKKysJCX0gd2hpbGUgKCFfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwXzEoKHVuc2lnbmVkIGNoYXIgKilhZGRyLCBvbGQsIHZhbCkpOworIAorIAkJcmV0dXJuIG9sZDsKKyAJfQorQEAgLTIzMCw3ICsyMzAsNyBAQCB1bnNpZ25lZCBsb25nIF91YXRvbWljX2V4Y2hhbmdlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsLCBpbnQgbGVuKQorIAorIAkJZG8geworIAkJCW9sZCA9IHVhdG9taWNfcmVhZCgodW5zaWduZWQgc2hvcnQgKilhZGRyKTsKKy0JCX0gd2hpbGUgKCFfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwXzIoYWRkciwgb2xkLCB2YWwpKTsKKysJCX0gd2hpbGUgKCFfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwXzIoKHVuc2lnbmVkIHNob3J0IGludCAqKWFkZHIsIG9sZCwgdmFsKSk7CisgCisgCQlyZXR1cm4gb2xkOworIAl9CitAQCAtMjQxLDcgKzI0MSw3IEBAIHVuc2lnbmVkIGxvbmcgX3VhdG9taWNfZXhjaGFuZ2Uodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyB2YWwsIGludCBsZW4pCisgCisgCQlkbyB7CisgCQkJb2xkID0gdWF0b21pY19yZWFkKCh1bnNpZ25lZCBpbnQgKilhZGRyKTsKKy0JCX0gd2hpbGUgKCFfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwXzQoYWRkciwgb2xkLCB2YWwpKTsKKysJCX0gd2hpbGUgKCFfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwXzQoKHVuc2lnbmVkIGludCAqKWFkZHIsIG9sZCwgdmFsKSk7CisgCisgCQlyZXR1cm4gb2xkOworIAl9CitAQCAtMjUyLDcgKzI1Miw3IEBAIHVuc2lnbmVkIGxvbmcgX3VhdG9taWNfZXhjaGFuZ2Uodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyB2YWwsIGludCBsZW4pCisgCisgCQlkbyB7CisgCQkJb2xkID0gdWF0b21pY19yZWFkKCh1bnNpZ25lZCBsb25nICopYWRkcik7CistCQl9IHdoaWxlICghX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcF84KGFkZHIsIG9sZCwgdmFsKSk7CisrCQl9IHdoaWxlICghX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcF84KCh1bnNpZ25lZCBsb25nICopYWRkciwgb2xkLCB2YWwpKTsKKyAKKyAJCXJldHVybiBvbGQ7CisgCX0KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3UvUmV2ZXJ0LUJsYWNrbGlzdC1BUk0tZ2NjLTQuOC4wLTQuOC4xLTQuOC4yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3UvUmV2ZXJ0LUJsYWNrbGlzdC1BUk0tZ2NjLTQuOC4wLTQuOC4xLTQuOC4yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNWE3MzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdS9SZXZlcnQtQmxhY2tsaXN0LUFSTS1nY2MtNC44LjAtNC44LjEtNC44LjIucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorRnJvbSA3YjNkZjEwMDM0NjEyOGQ3ODBmMjE4Yjg4MWQ1NjNkMWZkMTJlMzEwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgorRGF0ZTogTW9uLCAyMCBPY3QgMjAxNCAxMzo0NjoxMCArMTEwMAorU3ViamVjdDogW1BBVENIXSBSZXZlcnQgIkJsYWNrbGlzdCBBUk0gZ2NjIDQuOC4wLCA0LjguMSwgNC44LjIiCisKK1RoaXMgcmV2ZXJ0cyBjb21taXQgNGI3OTMxMGFhM2Q0MDhiYTMwZmVlMDJjYzQ5N2E2ODA3MmQzOGE5OS4KK09FLUNvcmUgaXMgdXNpbmcgYSBwYXRjaGVkIEdDQyA0LjguMiB3aGljaCBpcyBhYmxlIHRvIGNvbXBpbGUgbGlidXJjdQorcHJvcGVybHkuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KKy0tLQorIHVyY3UvY29tcGlsZXIuaCB8IDE5IC0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS91cmN1L2NvbXBpbGVyLmggYi91cmN1L2NvbXBpbGVyLmgKK2luZGV4IDFlMzA5MDMuLjE5NTM0ZjAgMTAwNjQ0CistLS0gYS91cmN1L2NvbXBpbGVyLmgKKysrKyBiL3VyY3UvY29tcGlsZXIuaAorQEAgLTEwOCwyMyArMTA4LDQgQEAKKyAKKyAjZGVmaW5lIENBQV9BUlJBWV9TSVpFKHgpCShzaXplb2YoeCkgLyBzaXplb2YoKHgpWzBdKSkKKyAKKy0vKgorLSAqIERvbid0IGFsbG93IGNvbXBpbGluZyB3aXRoIGJ1Z2d5IGNvbXBpbGVyLgorLSAqLworLQorLSNpZmRlZiBfX0dOVUNfXworLSMgZGVmaW5lIFVSQ1VfR0NDX1ZFUlNJT04JKF9fR05VQ19fICogMTAwMDAgXAorLQkJCQkrIF9fR05VQ19NSU5PUl9fICogMTAwIFwKKy0JCQkJKyBfX0dOVUNfUEFUQ0hMRVZFTF9fKQorLQorLS8qCistICogaHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01ODg1NAorLSAqLworLSMgaWZkZWYgX19BUk1FTF9fCistIyAgaWYgVVJDVV9HQ0NfVkVSU0lPTiA+PSA0MDgwMCAmJiBVUkNVX0dDQ19WRVJTSU9OIDw9IDQwODAyCistIyAgIGVycm9yIFlvdXIgZ2NjIHZlcnNpb24gcHJvZHVjZXMgY2xvYmJlcmVkIGZyYW1lIGFjY2Vzc2VzCistIyAgZW5kaWYKKy0jIGVuZGlmCistI2VuZGlmCistCisgI2VuZGlmIC8qIF9VUkNVX0NPTVBJTEVSX0ggKi8KKy0tIAorMi4xLjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3UvYWFyY2g2NC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1L2FhcmNoNjQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZjYzhjMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1L2FhcmNoNjQucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorbGlidWNydTogcmVjb2duaXplIGFhcmNoNjQKKworTWFrZSB0aGUgc2FtZSBhcyAiYXJtIiBpbnRlcm5hbGx5LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogam9lLnNsYXRlckB3aW5kcml2ZXIuY29tCisKKworLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC03Nyw2ICs3Nyw3IEBAIEFTX0NBU0UoWyRob3N0X2NwdV0sCisgCVthbHBoYSpdLCBbQVJDSFRZUEU9ImFscGhhIl0sCisgCVtpYTY0XSwgW0FSQ0hUWVBFPSJnY2MiXSwKKyAJW2FybSpdLCBbQVJDSFRZUEU9ImFybSJdLAorKwlbYWFyY2g2NF0sIFtBUkNIVFlQRT0iYXJtIl0sCisgCVttaXBzKl0sIFtBUkNIVFlQRT0ibWlwcyJdLAorIAlbdGlsZSpdLCBbQVJDSFRZUEU9ImdjYyJdLAorIAlbQVJDSFRZUEU9InVua25vd24iXQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3VfMC44LjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdV8wLjguNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2Y0ZjUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3VfMC44LjcuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJVc2Vyc3BhY2UgUkNVIChyZWFkLWNvcHktdXBkYXRlKSBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL2x0dG5nLm9yZy91cmN1IgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vbHR0bmcub3JnL3Byb2plY3QvaXNzdWVzIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTBmMDYwYzMwYTI3OTIyY2U5YzBkNTU3YTYzOWI0ZmEzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3VyY3UuaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTMyO21kNT00ZGUwZDY4ZDNhOTk3NjQzNzE1MDM2ZDIyMDlhZTFkOSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly91cmN1L3VhdG9taWMveDg2Lmg7YmVnaW5saW5lPTQ7ZW5kbGluZT0yMTttZDU9MjIwNTUyZjcyYzU1YjEwMmYyZWUzNTkyOTczNGVmNDIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2x0dG5nLm9yZy9maWxlcy91cmN1L3VzZXJzcGFjZS1yY3UtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9SZXZlcnQtQmxhY2tsaXN0LUFSTS1nY2MtNC44LjAtNC44LjEtNC44LjIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWFyY2g2NC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXVhdG9taWMtU3BlY2lmeS1jb21wbGV0ZS10eXBlcy1mb3ItYXRvbWljLWZ1bmN0aW9uLWMucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjdhNmVlMTc4NzFkMzEyMjZkYjNmNjE4ZTI4MzUxZDIyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI1MjNmMjJjNDcyNmNhNmJiNzdhNzdkMjU4ZTc2ZDhjMzNjODk3MjQ0MzNiZDY1MzEzMDI0Yjk4ZTU1YzQyOTUiCisKK1MgPSAiJHtXT1JLRElSfS91c2Vyc3BhY2UtcmN1LSR7UFZ9IgorQ0ZMQUdTX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLURfR05VX1NPVVJDRSIKK2luaGVyaXQgYXV0b3Rvb2xzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVzYi9saWJ1c2ItY29tcGF0LzAwMDEtdXNiLmgtSW5jbHVkZS1zeXMtdHlwZXMuaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXNiL2xpYnVzYi1jb21wYXQvMDAwMS11c2IuaC1JbmNsdWRlLXN5cy10eXBlcy5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ODQ0MGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVzYi9saWJ1c2ItY29tcGF0LzAwMDEtdXNiLmgtSW5jbHVkZS1zeXMtdHlwZXMuaC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDM0MGY5MTFmOWUzZjRmZjZiMDE2ODJjNTM0MWM5NTkwNjA3ODJhZjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVGh1LCAyIEFwciAyMDE1IDE5OjE4OjQ1IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHVzYi5oOiBJbmNsdWRlIHN5cy90eXBlcy5oCisKK1dlIG5lZWQgdGhlIGRlZmluaXRpb25zIGZvciB0aGluZ3MgbGlrZSB1X2ludFhfdAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYnVzYi91c2IuaCB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWJ1c2IvdXNiLmggYi9saWJ1c2IvdXNiLmgKK2luZGV4IDg0ZTczMGYuLmNhZmZhZTIgMTAwNjQ0CistLS0gYS9saWJ1c2IvdXNiLmgKKysrKyBiL2xpYnVzYi91c2IuaAorQEAgLTMxLDYgKzMxLDggQEAKKyAKKyAjaW5jbHVkZSA8ZGlyZW50Lmg+CisgCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKworIC8qCisgICogVVNCIHNwZWMgaW5mb3JtYXRpb24KKyAgKgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVzYi9saWJ1c2ItY29tcGF0XzAuMS41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1c2IvbGlidXNiLWNvbXBhdF8wLjEuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDY4NzJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1c2IvbGlidXNiLWNvbXBhdF8wLjEuNS5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gImxpYnVzYi0wLjEgY29tcGF0aWJpbGl0eSBsYXllciBmb3IgbGlidXNiMSIKK0RFU0NSSVBUSU9OID0gImxpYnVzYi0wLjEgY29tcGF0aWJsZSBsYXllciBmb3IgbGlidXNiMSwgYSBkcm9wLWluIHJlcGxhY2VtZW50IFwKK3RoYXQgYWltcyB0byBsb29rLCBmZWVsIGFuZCBiZWhhdmUgZXhhY3RseSBsaWtlIGxpYnVzYi0wLjEiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpYnVzYi5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vd3d3LmxpYnVzYi5vcmcvcmVwb3J0IgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWYyYWM1ZjNhYzQ4MzVlOGY5MTMyNGEyNmE1OTBhNDIzIgorREVQRU5EUyA9ICJsaWJ1c2IxIgorCisjIEZldyBwYWNrYWdlcyBhcmUga25vd24gbm90IHRvIHdvcmsgd2l0aCBsaWJ1c2ItY29tcGF0IChlLmcuIGxpYm10cC0xLjAuMCksCisjIHNvIGhlcmUgbGlidXNiLTAuMSBpcyByZW1vdmVkIGNvbXBsZXRlbHkgaW5zdGVhZCBvZiBhZGRpbmcgdmlydHVhbC9saWJ1c2IwLgorIyBCZXNpZGVzLCBsaWJ1c2ItMC4xIHVzZXMgYSBwZXIgMW1zIHBvbGxpbmcgdGhhdCBodXJ0cyBhIGxvdCB0byBwb3dlcgorIyBjb25zdW1wdGlvbi4KK1BST1ZJREVTID0gImxpYnVzYiB2aXJ0dWFsL2xpYnVzYjAiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1BFID0gIjEiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2xpYnVzYi9saWJ1c2ItY29tcGF0LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS11c2IuaC1JbmNsdWRlLXN5cy10eXBlcy5oLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyNzgwYjZhNzU4YTFlMmMyOTQzYmRiZjdmYWY3NDBlNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0MDRlZjRiNmIzMjRiZTc5YWMxYmZiM2Q4MzllYWM4NjBmYmM5MjllNmFjYjFlZjg4NzkzYTZlYTMyOGJjNTVhIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2xpYnVzYi1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBiaW5jb25maWctZGlzYWJsZWQgbGliX3BhY2thZ2UKKworRVhUUkFfT0VDT05GID0gIi0tbGliZGlyPSR7YmFzZV9saWJkaXJ9IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0KKwlpZiBbICEgJHtEfSR7bGliZGlyfSAtZWYgJHtEfSR7YmFzZV9saWJkaXJ9IF07IHRoZW4KKwkJbXYgJHtEfSR7YmFzZV9saWJkaXJ9L3BrZ2NvbmZpZyAke0R9JHtsaWJkaXJ9CisJZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXNiL2xpYnVzYjFfMS4wLjE5LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1c2IvbGlidXNiMV8xLjAuMTkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIwZTFmYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXNiL2xpYnVzYjFfMS4wLjE5LmJiCkBAIC0wLDAgKzEsMzQgQEAKK1NVTU1BUlkgPSAiVXNlcnNwYWNlIGxpYnJhcnkgdG8gYWNjZXNzIFVTQiAodmVyc2lvbiAxLjApIgorSE9NRVBBR0UgPSAiaHR0cDovL2xpYnVzYi5zZi5uZXQiCitCVUdUUkFDS0VSID0gImh0dHA6Ly93d3cubGlidXNiLm9yZy9yZXBvcnQiCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZmJjMDkzOTAxODU3ZmNkMTE4ZjA2NWY5MDA5ODJjMjQiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vbGlidXNiL2xpYnVzYi0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmOWUyYmI1ODc5OTY4NDY3ZTVjYTc1NmNiNGUxZmE3ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2YzUwMmM4MTYwMDJmOTBkNGY3NjA1MGE2NDI5YzNhN2UwZDg0MjA0MjIyY2JmZjJkY2U5NWRkNzczYmE2ODQwIgorCitTID0gIiR7V09SS0RJUn0vbGlidXNiLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworIyBEb24ndCBjb25maWd1cmUgdWRldiBieSBkZWZhdWx0IHNpbmNlIGl0IHdpbGwgY2F1c2UgYSBjaXJjdWxhcgorIyBkZXBlbmRlY3kgd2l0aCB1ZGV2IHBhY2thZ2UsIHdoaWNoIGRlcGVuZHMgb24gbGlidXNiCitFWFRSQV9PRUNPTkYgPSAiLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0gLS1kaXNhYmxlLXVkZXYiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfQorCWlmIFsgISAke0R9JHtsaWJkaXJ9IC1lZiAke0R9JHtiYXNlX2xpYmRpcn0gXTsgdGhlbgorCQltdiAke0R9JHtiYXNlX2xpYmRpcn0vcGtnY29uZmlnICR7RH0ke2xpYmRpcn0KKwlmaQorfQorCitGSUxFU18ke1BOfSArPSAiJHtiYXNlX2xpYmRpcn0vKi5zby4qIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmFzZV9saWJkaXJ9Lyouc28gJHtiYXNlX2xpYmRpcn0vKi5sYSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0L3BrZ2NvbmZpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0L3BrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWQxNGM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHQvcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMTE4IEBACitVc2UgcGtnLWNvbmZpZyB0byBmaW5kIGdjcnlwdCBhbmQgbGlieG1sMi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nIFtsaWJ4bWwyIGlzIHVwc3RyZWFtYWJsZV0KKworUlAgMjAxNC81LzIyCisKK0luZGV4OiBsaWJ4c2x0LTEuMS4yOC9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ4c2x0LTEuMS4yOC5vcmlnL2NvbmZpZ3VyZS5pbgkyMDE0LTA1LTEzIDE2OjQ2OjAyLjI3ODQ3NDk2NyArMDAwMAorKysrIGxpYnhzbHQtMS4xLjI4L2NvbmZpZ3VyZS5pbgkyMDE0LTA1LTEzIDE2OjUzOjU2LjUxMDQ3MjU2MSArMDAwMAorQEAgLTM3Niw2ICszNzYsOCBAQAorIEFDX1NVQlNUKFBZVEhPTl9TVUJESVIpCisgQUNfU1VCU1QoUFlUSE9OX0xJQlMpCisgCisrUEtHX1BST0dfUEtHX0NPTkZJRworKworIEFDX0FSR19XSVRIKGNyeXB0bywgWyAgLS13aXRoLWNyeXB0byAgICAgICAgICAgQWRkIGNyeXB0byBzdXBwb3J0IHRvIGV4c2x0IChvbildKQorIFdJVEhfQ1JZUFRPPTAKKyBpZiB0ZXN0ICIkd2l0aF9jcnlwdG8iID0gIm5vIiA7IHRoZW4KK0BAIC0zOTEsMjYgKzM5MywxMyBAQAorICAgICBXSVRIX0NSWVBUTz0xCisgICAgIDs7CisgICAqKQorLSAgICBBQ19QQVRIX1BST0coTElCR0NSWVBUX0NPTkZJRywgbGliZ2NyeXB0LWNvbmZpZywgbm8pCistICAgIGlmIHRlc3QgIiRMSUJHQ1JZUFRfQ09ORklHIiAhPSAibm8iIDsgdGhlbgorLSAgICAgIExJQkdDUllQVF9WRVJTSU9OPWAkTElCR0NSWVBUX0NPTkZJRyAtLXZlcnNpb25gCistICAgICAgaWYgdGVzdCBWRVJTSU9OX1RPX05VTUJFUihlY2hvICRMSUJHQ1JZUFRfVkVSU0lPTikgLWx0IFZFUlNJT05fVE9fTlVNQkVSKGVjaG8gIjEuMS40MiIpCistICAgICAgdGhlbgorLSAgICAgICAgTElCR0NSWVBUX0NGTEFHUz0iIgorLSAgICAgICAgTElCR0NSWVBUX0xJQlM9IiIKKy0gICAgICAgIGVjaG8gJ2djcnlwdCBsaWJyYXJ5IHZlcnNpb24gPCAxLjEuNDIgLSBDcnlwdG8gZXh0ZW5zaW9ucyB3aWxsIG5vdCBiZSBhdmFpbGFibGUuJworLSAgICAgIGVsc2UKKy0gICAgICAgIExJQkdDUllQVF9DRkxBR1M9YCRMSUJHQ1JZUFRfQ09ORklHICRsaWJnY3J5cHRfY29uZmlnX2FyZ3MgLS1jZmxhZ3NgCistICAgICAgICBMSUJHQ1JZUFRfTElCUz1gJExJQkdDUllQVF9DT05GSUcgJGxpYmdjcnlwdF9jb25maWdfYXJncyAtLWxpYnNgCistICAgICAgICBBQ19ERUZJTkUoSEFWRV9HQ1JZUFQsIDEsIFtEZWZpbmUgaWYgZ2NyeXB0IGxpYnJhcnkgaXMgYXZhaWxhYmxlLl0pCistICAgICAgICBlY2hvICdDcnlwdG8gZXh0ZW5zaW9ucyB3aWxsIGJlIGF2YWlsYWJsZS4nCisrICAgIFBLR19DSEVDS19NT0RVTEVTKExJQkdDUllQVCwgW2xpYmdjcnlwdCA+PSAxLjEuNDJdLCBbCisrICAgICAgICAgIEFDX0RFRklORShIQVZFX0dDUllQVCwgMSwgW0RlZmluZSBpZiBnY3J5cHQgbGlicmFyeSBpcyBhdmFpbGFibGUuXSkKKysgICAgICAgICAgZWNobyAnQ3J5cHRvIGV4dGVuc2lvbnMgd2lsbCBiZSBhdmFpbGFibGUuJworIAkJV0lUSF9DUllQVE89MQorLSAgICAgIGZpCistICAgIGVsc2UKKy0gICAgICBMSUJHQ1JZUFRfQ0ZMQUdTPSIiCistICAgICAgTElCR0NSWVBUX0xJQlM9IiIKKy0gICAgICBlY2hvICdDcnlwdG8gZXh0ZW5zaW9ucyB3aWxsIG5vdCBiZSBhdmFpbGFibGUuIEluc3RhbGwgbGliZ2NyeXB0IGFuZCByZWNvbmZpZ3VyZSB0byBtYWtlIGF2YWlsYWJsZS4nCistICAgIGZpCisrCV0sIFsKKysgICAgICAgICAgZWNobyAnQ3J5cHRvIGV4dGVuc2lvbnMgd2lsbCBub3QgYmUgYXZhaWxhYmxlLiBJbnN0YWxsIGxpYmdjcnlwdCA+PSAxLjEuNDIgYW5kIHJlY29uZmlndXJlIHRvIG1ha2UgYXZhaWxhYmxlLicKKysgICAgICAgIF0pCisgZXNhYworIGZpCisgQUNfU1VCU1QoV0lUSF9DUllQVE8pCitAQCAtNDcxLDI0ICs0NjAsOCBAQAorIGRubCBzb21lIHR3ZWFraW5nIC0gRGF2aWQgSMOkcmRlbWFuIDMwLzEwLzIwMDEKKyBkbmwKKyAKKy1MSUJYTUxfQ09ORklHX1BSRUZJWD0iIgorIExJQlhNTF9TUkM9IiIKKyAKKy1BQ19BUkdfV0lUSChsaWJ4bWwtcHJlZml4LAorLSAgICAgICAgWyAgLS13aXRoLWxpYnhtbC1wcmVmaXg9W1BGWF0JCVNwZWNpZnkgbG9jYXRpb24gb2YgbGlieG1sIGNvbmZpZ10sCistCUxJQlhNTF9DT05GSUdfUFJFRklYPSR3aXRodmFsCistKQorLSAgICAgICAgCistQUNfQVJHX1dJVEgobGlieG1sLWluY2x1ZGUtcHJlZml4LAorLSAgICAgICAgWyAgLS13aXRoLWxpYnhtbC1pbmNsdWRlLXByZWZpeD1bUEZYXQlTcGVjaWZ5IGxvY2F0aW9uIG9mIGxpYnhtbCBoZWFkZXJzXSwKKy0gICAgICAgIExJQlhNTF9DRkxBR1M9Ii1JJHdpdGh2YWwiCistKQorLQorLUFDX0FSR19XSVRIKGxpYnhtbC1saWJzLXByZWZpeCwKKy0gICAgICAgIFsgIC0td2l0aC1saWJ4bWwtbGlicy1wcmVmaXg9W1BGWF0JU3BlY2lmeSBsb2NhdGlvbiBvZiBsaWJ4bWwgbGlic10sCistICAgICAgICBMSUJYTUxfTElCUz0iLUwkd2l0aHZhbCIKKy0pCistCisgQUNfQVJHX1dJVEgobGlieG1sLXNyYywKKyAJWyAgLS13aXRoLWxpYnhtbC1zcmM9W0RJUl0gICAgICAgICAgICAgIEZvciBsaWJ4bWwgdGhhdHMgbm90IGluc3RhbGxlZCB5ZXQgKHNldHMgYWxsIHRocmVlIGFib3ZlKV0sCisgCUxJQlhNTF9TUkM9IiR3aXRodmFsIgorQEAgLTU1MSwyOCArNTI0LDkgQEAKKyAJZmkKKyBmaQorIAorLWRubAorLWRubCBtYWtlIHN1cmUgeG1sMi1jb25maWcgaXMgZXhlY3V0YWJsZSwKKy1kbmwgdGVzdCB2ZXJzaW9uIGFuZCBpbml0IG91ciB2YXJpYWJsZXMKKy1kbmwKKy0KKy1pZiAke1hNTF9DT05GSUd9IC0tbGlicyBwcmludCA+IC9kZXYvbnVsbCAyPiYxCistdGhlbgorLQlYTUxWRVJTPWAkWE1MX0NPTkZJRyAtLXZlcnNpb25gCistCWlmIHRlc3QgVkVSU0lPTl9UT19OVU1CRVIoZWNobyAkWE1MVkVSUykgLWdlIFZFUlNJT05fVE9fTlVNQkVSKGVjaG8gJExJQlhNTF9SRVFVSVJFRF9WRVJTSU9OKQorLQl0aGVuCistCQlBQ19NU0dfUkVTVUxUKCRYTUxWRVJTIGZvdW5kKQorLQllbHNlCistCQlBQ19NU0dfRVJST1IoVmVyc2lvbiAkWE1MVkVSUyBmb3VuZC4gWW91IG5lZWQgYXQgbGVhc3QgbGlieG1sMiAkTElCWE1MX1JFUVVJUkVEX1ZFUlNJT04gZm9yIHRoaXMgdmVyc2lvbiBvZiBsaWJ4c2x0KQorLQlmaQorLQlMSUJYTUxfTElCUz0iJExJQlhNTF9MSUJTIGAkWE1MX0NPTkZJRyAtLWxpYnNgIgorLQlpZiB0ZXN0ICJ4JExJQlhNTF9TUkMiID0gIngiOyB0aGVuCistCQlMSUJYTUxfQ0ZMQUdTPSIkTElCWE1MX0NGTEFHUyBgJFhNTF9DT05GSUcgLS1jZmxhZ3NgIgorLQlmaQorLWVsc2UKKy0JQUNfTVNHX0VSUk9SKFtDb3VsZCBub3QgZmluZCBsaWJ4bWwyIGFueXdoZXJlLCBjaGVjayBmdHA6Ly94bWxzb2Z0Lm9yZy8uXSkKKy1maQorLQorK1BLR19DSEVDS19NT0RVTEVTKExJQlhNTCwgW2xpYnhtbC0yLjAgPj0gJExJQlhNTF9SRVFVSVJFRF9WRVJTSU9OXSwsCisrICAgIFtBQ19NU0dfRVJST1IoW0NvdWxkIG5vdCBmaW5kIGxpYnhtbC0yLjAgPj0gJExJQlhNTF9SRVFVSVJFRF9WRVJTSU9OIGFueXdoZXJlLCBjaGVjayBmdHA6Ly94bWxzb2Z0Lm9yZy8uXSldCisrKQorIAorIEFDX1NVQlNUKENGTEFHUykKKyBBQ19TVUJTVChDUFBGTEFHUykKK0BAIC01OTcsNyArNTUxLDcgQEAKKyAKKyBpZiB0ZXN0ICIkd2l0aF9wbHVnaW5zIiA9ICJ5ZXMiIDsgdGhlbgorICAgQUNfTVNHX0NIRUNLSU5HKFtsaWJ4bWwyIG1vZHVsZSBzdXBwb3J0XSkKKy0gIFdJVEhfTU9EVUxFUz0iYCRYTUxfQ09ORklHIC0tbW9kdWxlc2AiCisrICBXSVRIX01PRFVMRVM9ImAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPW1vZHVsZXMgbGlieG1sLTIuMGAiCisgICBpZiB0ZXN0ICIke1dJVEhfTU9EVUxFU30iID0gIjEiOyB0aGVuCisgICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgZWxzZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHQvcGtnY29uZmlnX2ZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0L3BrZ2NvbmZpZ19maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZhODAxMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0L3BrZ2NvbmZpZ19maXgucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogbGlieHNsdC0xLjEuMjcvbGliZXhzbHQucGMuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ4c2x0LTEuMS4yNy5vcmlnL2xpYmV4c2x0LnBjLmluCisrKysgbGlieHNsdC0xLjEuMjcvbGliZXhzbHQucGMuaW4KK0BAIC04LDUgKzgsNSBAQCBOYW1lOiBsaWJleHNsdAorIFZlcnNpb246IEBMSUJFWFNMVF9WRVJTSU9OQAorIERlc2NyaXB0aW9uOiBFWFNMVCBFeHRlbnNpb24gbGlicmFyeQorIFJlcXVpcmVzOiBsaWJ4bWwtMi4wCistTGliczogQEVYU0xUX0xJQkRJUkAgQEVYU0xUX0xJQlNACisrTGliczogLWxleHNsdCBARVhTTFRfTElCRElSQCBARVhTTFRfTElCU0AKKyBDZmxhZ3M6IEBFWFNMVF9JTkNMVURFRElSQAorSW5kZXg6IGxpYnhzbHQtMS4xLjI3L2xpYnhzbHQucGMuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ4c2x0LTEuMS4yNy5vcmlnL2xpYnhzbHQucGMuaW4KKysrKyBsaWJ4c2x0LTEuMS4yNy9saWJ4c2x0LnBjLmluCitAQCAtOCw1ICs4LDUgQEAgTmFtZTogbGlieHNsdAorIFZlcnNpb246IEBWRVJTSU9OQAorIERlc2NyaXB0aW9uOiBYU0xUIGxpYnJhcnkgdmVyc2lvbiAyLgorIFJlcXVpcmVzOiBsaWJ4bWwtMi4wCistTGliczogQFhTTFRfTElCRElSQCBAWFNMVF9MSUJTQCBARVhUUkFfTElCU0AKKytMaWJzOiAtbHhzbHQgQFhTTFRfTElCRElSQCBAWFNMVF9MSUJTQCBARVhUUkFfTElCU0AKKyBDZmxhZ3M6IEBYU0xUX0lOQ0xVREVESVJACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdF8xLjEuMjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdF8xLjEuMjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY2YmNkOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0XzEuMS4yOC5iYgpAQCAtMCwwICsxLDQ2IEBACitTVU1NQVJZID0gIkdOT01FIFhTTFQgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly94bWxzb2Z0Lm9yZy9YU0xULyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NvcHlyaWdodDttZDU9MGNkOWEwN2FmYmViMjQwMjZjOWIwM2FlY2ZlYmE0NTgiCisKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAibGlieG1sMiIKKworU1JDX1VSSSA9ICJmdHA6Ly94bWxzb2Z0Lm9yZy9saWJ4c2x0Ly9saWJ4c2x0LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWdfZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjk2NjdiZjZmOTMxMGI5NTcyNTRmZGNmNjU5NjYwMGI3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVmYzcxNTFhNTdiODljMDNkN2I4MjVkZjVhMGZhZTBhOGQ1ZjA1Njc0YzBlN2NmMjkzN2VjZWM0ZDU0YTAyOGMiCitTID0gIiR7V09SS0RJUn0vbGlieHNsdC0ke1BWfSIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS94c2x0LWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGJpbmNvbmZpZy1kaXNhYmxlZCBsaWJfcGFja2FnZQorCisjIFdlIGRvbid0IERFUEVORCBvbiBiaW51dGlscyBmb3IgYW5zaWRlY2wuaCBzbyBlbnN1cmUgd2UgZG9uJ3QgdXNlIHRoZSBoZWFkZXIKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlzZWQgLWkgLWUgJ3MvYW5zaWRlY2wuaC8vJyAke1N9L2NvbmZpZ3VyZS5pbgorCisJIyBUaGUgdGltZXN0YW1wcyBpbiB0aGUgMS4xLjI4IHRhcmJhbGwgYXJlIG1lc3NlZCB1cCBjYXVzaW5nIHRoaXMgZmlsZSB0bworCSMgYXBwZWFyIG91dCBvZiBkYXRlLiAgVG91Y2ggaXQgc28gdGhhdCB3ZSBkb24ndCB0cnkgdG8gcmVnZW5lcmF0ZSBpdC4KKwl0b3VjaCAke1N9L2RvYy94c2x0cHJvYy4xCit9CisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtcHl0aG9uIC0td2l0aG91dC1kZWJ1ZyAtLXdpdGhvdXQtbWVtLWRlYnVnIC0td2l0aG91dC1jcnlwdG8iCisjIG9sZGVyIHZlcnNpb25zIG9mIHRoaXMgcmVjaXBlIGhhZCAke1BOfS11dGlscworUlBST1ZJREVTXyR7UE59LWJpbiArPSAiJHtQTn0tdXRpbHMiCitSQ09ORkxJQ1RTXyR7UE59LWJpbiArPSAiJHtQTn0tdXRpbHMiCitSUkVQTEFDRVNfJHtQTn0tYmluICs9ICIke1BOfS11dGlscyIKKworCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3hzbHRwcm9jIFhNTF9DQVRBTE9HX0ZJTEVTPSR7c3lzY29uZmRpcn0veG1sL2NhdGFsb2cueG1sCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vbGlieHNsdC1wbHVnaW5zIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0veHNsdENvbmYuc2giCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieWFtbC9maWxlcy9saWJ5YW1sLUNWRS0yMDE0LTkxMzAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnlhbWwvZmlsZXMvbGlieWFtbC1DVkUtMjAxNC05MTMwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNGEwMGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnlhbWwvZmlsZXMvbGlieWFtbC1DVkUtMjAxNC05MTMwLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKKyMgSEcgY2hhbmdlc2V0IHBhdGNoCisjIFVzZXIgS2lyaWxsIFNpbW9ub3YgPHhpQHJlc29sdmVudC5uZXQ+CisjIERhdGUgMTQxNzE5NzMxMiAyMTYwMAorIyBOb2RlIElEIDJiOTE1Njc1NjQyM2U5NjdjZmQwOWE2MWQxMjVkODgzZmNhNmY0ZjIKKyMgUGFyZW50ICAwNTNmNTNhMzgxZmY2YWRiYmM5M2EzMWFiN2ZkZWUwNmExNmM4YTMzCitSZW1vdmVkIGludmFsaWQgc2ltcGxlIGtleSBhc3NlcnRpb24gKHRoYW5rIHRvIEpvbmF0aGFuIEdyYXkpLgorCitUaGUgcGF0Y2ggY29tZXMgZnJvbSAKKworaHR0cHM6Ly9iaXRidWNrZXQub3JnL3hpL2xpYnlhbWwvY29tbWl0cy8yYjkxNTY3NTY0MjNlOTY3Y2ZkMDlhNjFkMTI1ZDg4M2ZjYTZmNGYyCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogWXVlIFRhbyA8eXVlLnRhb0B3aW5kcml2ZXIuY29tPgorCitkaWZmIC1yIDA1M2Y1M2EzODFmZiAtciAyYjkxNTY3NTY0MjMgc3JjL3NjYW5uZXIuYworLS0tIGEvc3JjL3NjYW5uZXIuYwlXZWQgTWFyIDI2IDEzOjU1OjU0IDIwMTQgLTA1MDAKKysrKyBiL3NyYy9zY2FubmVyLmMJRnJpIE5vdiAyOCAxMTo1NToxMiAyMDE0IC0wNjAwCitAQCAtMTEwNiwxMyArMTEwNiw2IEBACisgICAgICAgICAgICAgJiYgcGFyc2VyLT5pbmRlbnQgPT0gKHB0cmRpZmZfdClwYXJzZXItPm1hcmsuY29sdW1uKTsKKyAKKyAgICAgLyoKKy0gICAgICogQSBzaW1wbGUga2V5IGlzIHJlcXVpcmVkIG9ubHkgd2hlbiBpdCBpcyB0aGUgZmlyc3QgdG9rZW4gaW4gdGhlIGN1cnJlbnQKKy0gICAgICogbGluZS4gIFRoZXJlZm9yZSBpdCBpcyBhbHdheXMgYWxsb3dlZC4gIEJ1dCB3ZSBhZGQgYSBjaGVjayBhbnl3YXkuCistICAgICAqLworLQorLSAgICBhc3NlcnQocGFyc2VyLT5zaW1wbGVfa2V5X2FsbG93ZWQgfHwgIXJlcXVpcmVkKTsgICAgLyogSW1wb3NzaWJsZS4gKi8KKy0KKy0gICAgLyoKKyAgICAgICogSWYgdGhlIGN1cnJlbnQgcG9zaXRpb24gbWF5IHN0YXJ0IGEgc2ltcGxlIGtleSwgc2F2ZSBpdC4KKyAgICAgICovCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnlhbWwvbGlieWFtbF8wLjEuNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieWFtbC9saWJ5YW1sXzAuMS42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMTU1NzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnlhbWwvbGlieWFtbF8wLjEuNi5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkxpYllBTUwgaXMgYSBZQU1MIDEuMSBwYXJzZXIgYW5kIGVtaXR0ZXIgd3JpdHRlbiBpbiBDLiIKK0RFU0NSSVBUSU9OID0gIkxpYllBTUwgaXMgYSBDIGxpYnJhcnkgZm9yIHBhcnNpbmcgYW5kIGVtaXR0aW5nIGRhdGEgaW4gWUFNTCAxLjEsIFwKK2EgaHVtYW4tcmVhZGFibGUgZGF0YSBzZXJpYWxpemF0aW9uIGZvcm1hdC4gIgorSE9NRVBBR0UgPSAiaHR0cDovL3B5eWFtbC5vcmcvd2lraS9MaWJZQU1MIgorU0VDVElPTiA9ICJsaWJzL2RldmVsIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTYwMTVmMDg4NzU5YjEwZTBiYzJiZjY0ODk4ZDRhZTE3IgorCitTUkNfVVJJID0gImh0dHA6Ly9weXlhbWwub3JnL2Rvd25sb2FkL2xpYnlhbWwveWFtbC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbGlieWFtbC1DVkUtMjAxNC05MTMwLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1ZmUwMGNkYTE4Y2E1ZGFlYjQzNzYyYjgwYzM4ZTA2ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3ZGE2OTcxYjRiZDA4YTk4NmRkMmE2MTM1M2JjNDIyMzYyYmQwZWRjYzY3ZDdlYmFhYzY4Yzk1Zjc0MTgyNzQ5IgorCitTID0gIiR7V09SS0RJUn0veWFtbC0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6NC9sejQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6NC9sejQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThlNTZkMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHo0L2x6NC5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkV4dHJlbWVseSBGYXN0IENvbXByZXNzaW9uIGFsZ29yaXRobSIKK0RFU0NSSVBUSU9OID0gIkxaNCBpcyBhIHZlcnkgZmFzdCBsb3NzbGVzcyBjb21wcmVzc2lvbiBhbGdvcml0aG0sIHByb3ZpZGluZyBjb21wcmVzc2lvbiBzcGVlZCBhdCA0MDAgTUIvcyBwZXIgY29yZSwgc2NhbGFibGUgd2l0aCBtdWx0aS1jb3JlcyBDUFUuIEl0IGFsc28gZmVhdHVyZXMgYW4gZXh0cmVtZWx5IGZhc3QgZGVjb2Rlciwgd2l0aCBzcGVlZCBpbiBtdWx0aXBsZSBHQi9zIHBlciBjb3JlLCB0eXBpY2FsbHkgcmVhY2hpbmcgUkFNIHNwZWVkIGxpbWl0cyBvbiBtdWx0aS1jb3JlIHN5c3RlbXMuIgorCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2xpYi9MSUNFTlNFO21kNT0wYjBkMDYzZjM3YTQ0NzdiNTRhZjI0NTk0NzdkY2FmZCIKKworU1JDUkVWID0gImQ4NmRjOTE2NzcxYzEyNmFmYjc5NzYzN2RkYTlmNjQyMWMwY2I5OTgiCisKK1BWID0gIjEzMStnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL0N5YW40OTczL2x6NC5naXQiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0VYVFJBX09FTUFLRSA9ICJQUkVGSVg9JHtwcmVmaXh9IENDPScke0NDfScgREVTVERJUj0ke0R9IExJQkRJUj0ke2xpYmRpcn0gSU5DTFVERURJUj0ke2luY2x1ZGVkaXJ9IgorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbAorfQorCitCQkNMQVNTRVhURU5EICs9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvLzAwMDEtVXNlLW1lbWNweS1pbnN0ZWFkLW9mLXJlaW52ZW50aW5nLWl0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvLzAwMDEtVXNlLW1lbWNweS1pbnN0ZWFkLW9mLXJlaW52ZW50aW5nLWl0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiM2E3MGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vMDAwMS1Vc2UtbWVtY3B5LWluc3RlYWQtb2YtcmVpbnZlbnRpbmctaXQucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorRnJvbTogU2ltb24gTWNWaXR0aWUgPHNtY3ZAZGViaWFuLm9yZz4KK0RhdGU6IFN1biwgMjMgTm92IDIwMTQgMjI6NTA6MzMgKzAwMDAKK1N1YmplY3Q6IFVzZSBtZW1jcHkoKSBpbnN0ZWFkIG9mIHJlaW52ZW50aW5nIGl0CisKK2djYyBpbmxpbmVzIG1lbWNweSgpIHdpdGggcmVzdWx0cyBhcyBmYXN0IGFzIGhhbmR3cml0dGVuIGNvZGUgKGF0CitsZWFzdCBpbiBteSBicmllZiB0ZXN0aW5nIHdpdGggbHpvcCksIGFuZCBrbm93cyB0aGUgYWxpZ25tZW50Citjb25zdHJhaW50cyBmb3Igb3VyIGFyY2hpdGVjdHVyZXMuCisKK0NoYW5nZSBzdWdnZXN0ZWQgYnkgSnVsaWFuIFRheWxvci4KKworQnVnLURlYmlhbjogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvY2dpLWJpbi9idWdyZXBvcnQuY2dpP2J1Zz03NTcwMzcKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CistLS0KKyBtaW5pbHpvL21pbmlsem8uYyB8IDE0ICsrKysrKysrKysrKysrCisgc3JjL2x6b19mdW5jLmggICAgfCAxNCArKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMjggaW5zZXJ0aW9ucygrKQorCisKK2RpZmYgLS1naXQgYS9taW5pbHpvL21pbmlsem8uYyBiL21pbmlsem8vbWluaWx6by5jCitpbmRleCBhYjJiZTVmLi42OTEzYzJmIDEwMDY0NAorLS0tIGEvbWluaWx6by9taW5pbHpvLmMKKysrKyBiL21pbmlsem8vbWluaWx6by5jCitAQCAtMzUyMyw2ICszNTIzLDIwIEBAIExaT19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihzaXplb2YoKihsem9fbWVtb3BzX1RVOHApMCk9PTgpCisgICAgIGlmICgodm9pZCkwLCBuX19uID4gMCkgZG8geyAqZF9fbisrID0gKnNfX24rKzsgfSB3aGlsZSAoLS1uX19uID4gMCk7IFwKKyAgICAgTFpPX0JMT0NLX0VORAorIAorKy8qIERlYmlhbi1zcGVjaWZpYyBjaGFuZ2U6IHdlIGtub3cgdGhhdCBvdXIgY29tcGlsZXIgaW5saW5lcyBtZW1jcHkoKSB3aXRoCisrICogY29uc3RhbnQgbiB0byBiZSBhcyBmYXN0IGFzIGhhbmR3cml0dGVuIGNvZGUsIGFuZCBrbm93cyB3aGljaCBhcmNoaXRlY3R1cmVzCisrICogbmVlZCB0aGluZ3MgY29ycmVjdGx5IGFsaWduZWQuICovCisrI3VuZGVmIExaT19NRU1PUFNfQ09QWTEKKysjdW5kZWYgTFpPX01FTU9QU19DT1BZMgorKyN1bmRlZiBMWk9fTUVNT1BTX0NPUFk0CisrI3VuZGVmIExaT19NRU1PUFNfQ09QWTgKKysjdW5kZWYgTFpPX01FTU9QU19DT1BZTgorKyNkZWZpbmUgTFpPX01FTU9QU19DT1BZMShkZCxzcykgbWVtY3B5KGRkLCBzcywgMSkKKysjZGVmaW5lIExaT19NRU1PUFNfQ09QWTIoZGQsc3MpIG1lbWNweShkZCwgc3MsIDIpCisrI2RlZmluZSBMWk9fTUVNT1BTX0NPUFk0KGRkLHNzKSBtZW1jcHkoZGQsIHNzLCA0KQorKyNkZWZpbmUgTFpPX01FTU9QU19DT1BZOChkZCxzcykgbWVtY3B5KGRkLCBzcywgOCkKKysjZGVmaW5lIExaT19NRU1PUFNfQ09QWU4oZGQsc3Msbm4pIG1lbWNweShkZCwgc3MsIG5uKQorKworIF9fbHpvX3N0YXRpY19mb3JjZWlubGluZSBsem9fdWludDE2X3QgbHpvX21lbW9wc19nZXRfbGUxNihjb25zdCBsem9fdm9pZHAgc3MpCisgeworICAgICBsem9fdWludDE2X3QgdjsKK2RpZmYgLS1naXQgYS9zcmMvbHpvX2Z1bmMuaCBiL3NyYy9sem9fZnVuYy5oCitpbmRleCBkZmFhNjc2Li4xY2MxYjUzIDEwMDY0NAorLS0tIGEvc3JjL2x6b19mdW5jLmgKKysrKyBiL3NyYy9sem9fZnVuYy5oCitAQCAtMzMzLDYgKzMzMywyMCBAQCBMWk9fQ09NUElMRV9USU1FX0FTU0VSVF9IRUFERVIoc2l6ZW9mKCoobHpvX21lbW9wc19UVThwKTApPT04KQorICAgICBpZiAoKHZvaWQpMCwgbl9fbiA+IDApIGRvIHsgKmRfX24rKyA9ICpzX19uKys7IH0gd2hpbGUgKC0tbl9fbiA+IDApOyBcCisgICAgIExaT19CTE9DS19FTkQKKyAKKysvKiBEZWJpYW4tc3BlY2lmaWMgY2hhbmdlOiB3ZSBrbm93IHRoYXQgb3VyIGNvbXBpbGVyIGlubGluZXMgbWVtY3B5KCkgd2l0aAorKyAqIGNvbnN0YW50IG4gdG8gYmUgYXMgZmFzdCBhcyBoYW5kd3JpdHRlbiBjb2RlLCBhbmQga25vd3Mgd2hpY2ggYXJjaGl0ZWN0dXJlcworKyAqIG5lZWQgdGhpbmdzIGNvcnJlY3RseSBhbGlnbmVkLiAqLworKyN1bmRlZiBMWk9fTUVNT1BTX0NPUFkxCisrI3VuZGVmIExaT19NRU1PUFNfQ09QWTIKKysjdW5kZWYgTFpPX01FTU9QU19DT1BZNAorKyN1bmRlZiBMWk9fTUVNT1BTX0NPUFk4CisrI3VuZGVmIExaT19NRU1PUFNfQ09QWU4KKysjZGVmaW5lIExaT19NRU1PUFNfQ09QWTEoZGQsc3MpIG1lbWNweShkZCwgc3MsIDEpCisrI2RlZmluZSBMWk9fTUVNT1BTX0NPUFkyKGRkLHNzKSBtZW1jcHkoZGQsIHNzLCAyKQorKyNkZWZpbmUgTFpPX01FTU9QU19DT1BZNChkZCxzcykgbWVtY3B5KGRkLCBzcywgNCkKKysjZGVmaW5lIExaT19NRU1PUFNfQ09QWTgoZGQsc3MpIG1lbWNweShkZCwgc3MsIDgpCisrI2RlZmluZSBMWk9fTUVNT1BTX0NPUFlOKGRkLHNzLG5uKSBtZW1jcHkoZGQsIHNzLCBubikKKysKKyBfX2x6b19zdGF0aWNfZm9yY2VpbmxpbmUgbHpvX3VpbnQxNl90IGx6b19tZW1vcHNfZ2V0X2xlMTYoY29uc3QgbHpvX3ZvaWRwIHNzKQorIHsKKyAgICAgbHpvX3VpbnQxNl90IHY7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vYWNpbmNsdWRlLm00IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvL2FjaW5jbHVkZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGQyY2NkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvL2FjaW5jbHVkZS5tNApAQCAtMCwwICsxLDM1OCBAQAorCitBQ19ERUZVTihbbWZ4X0FDQ19DSEVDS19FTkRJQU5dLCBbCitBQ19DX0JJR0VORElBTihbQUNfREVGSU5FKEFDQ19BQklfQklHX0VORElBTiwxLFtEZWZpbmUgdG8gMSBpZiB5b3VyIG1hY2hpbmUgaXMgYmlnIGVuZGlhbi5dKV0sW0FDX0RFRklORShBQ0NfQUJJX0xJVFRMRV9FTkRJQU4sMSxbRGVmaW5lIHRvIDEgaWYgeW91ciBtYWNoaW5lIGlzIGxpdHRsZSBlbmRpYW4uXSldKQorXSkjCisKK0FDX0RFRlVOKFttZnhfQUNDX0NIRUNLX0hFQURFUlNdLCBbCitBQ19IRUFERVJfVElNRQorQUNfQ0hFQ0tfSEVBREVSUyhbYXNzZXJ0LmggY3R5cGUuaCBkaXJlbnQuaCBlcnJuby5oIGZjbnRsLmggZmxvYXQuaCBsaW1pdHMuaCBtYWxsb2MuaCBtZW1vcnkuaCBzZXRqbXAuaCBzaWduYWwuaCBzdGRhcmcuaCBzdGRkZWYuaCBzdGRpbnQuaCBzdGRpby5oIHN0ZGxpYi5oIHN0cmluZy5oIHN0cmluZ3MuaCB0aW1lLmggdW5pc3RkLmggdXRpbWUuaCBzeXMvc3RhdC5oIHN5cy90aW1lLmggc3lzL3R5cGVzLmggc3lzL3dhaXQuaF0pCitdKSMKKworQUNfREVGVU4oW21meF9BQ0NfQ0hFQ0tfRlVOQ1NdLCBbCitBQ19DSEVDS19GVU5DUyhhY2Nlc3MgYWxsb2NhIGF0ZXhpdCBhdG9pIGF0b2wgY2htb2QgY2hvd24gY3RpbWUgZGlmZnRpbWUgZnN0YXQgZ2V0dGltZW9mZGF5IGdtdGltZSBsb2NhbHRpbWUgbG9uZ2ptcCBsc3RhdCBtZW1jbXAgbWVtY3B5IG1lbW1vdmUgbWVtc2V0IG1rdGltZSBxc29ydCByYWlzZSBzZXRqbXAgc2lnbmFsIHNucHJpbnRmIHN0cmNhc2VjbXAgc3RyY2hyIHN0cmR1cCBzdHJlcnJvciBzdHJmdGltZSBzdHJpY21wIHN0cm5jYXNlY21wIHN0cm5pY21wIHN0cnJjaHIgc3Ryc3RyIHRpbWUgdW1hc2sgdXRpbWUgdnNucHJpbnRmKQorXSkjCisKKworQUNfREVGVU4oW21meF9BQ0NfQ0hFQ0tfU0laRU9GXSwgWworQUNfQ0hFQ0tfU0laRU9GKHNob3J0KQorQUNfQ0hFQ0tfU0laRU9GKGludCkKK0FDX0NIRUNLX1NJWkVPRihsb25nKQorCitBQ19DSEVDS19TSVpFT0YobG9uZyBsb25nKQorQUNfQ0hFQ0tfU0laRU9GKF9faW50MTYpCitBQ19DSEVDS19TSVpFT0YoX19pbnQzMikKK0FDX0NIRUNLX1NJWkVPRihfX2ludDY0KQorCitBQ19DSEVDS19TSVpFT0Yodm9pZCAqKQorQUNfQ0hFQ0tfU0laRU9GKHNpemVfdCkKK0FDX0NIRUNLX1NJWkVPRihwdHJkaWZmX3QpCitdKSMKKworCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAvLyBDaGVjayBmb3IgQUNDX2NvbmZvcm1hbmNlCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworQUNfREVGVU4oW21meF9BQ0NfQUNDQ0hLXSwgWworbWZ4X3RtcD0kMQorbWZ4X3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCitkbmwgaW4gTWFrZWZpbGUuaW4gJChJTkNMVURFUykgd2lsbCBiZSBiZWZvcmUgJChDUFBGTEFHUyksIHNvIHdlIG1pbWljIHRoaXMgaGVyZQordGVzdCAiWCRtZnhfdG1wIiA9ICJYIiB8fCBDUFBGTEFHUz0iJG1meF90bXAgJENQUEZMQUdTIgorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgeW91ciBjb21waWxlciBwYXNzZXMgdGhlIEFDQyBjb25mb3JtYW5jZSB0ZXN0XSkKKworQUNfTEFOR19DT05GVEVTVChbQUNfTEFOR19QUk9HUkFNKAorW1sjZGVmaW5lIEFDQ19DT05GSUdfTk9fSEVBREVSIDEKKyNpbmNsdWRlICJhY2MvYWNjLmgiCisjaW5jbHVkZSAiYWNjL2FjY19pbmNkLmgiCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICAgICBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVF9IRUFERVIoZXhwcikKKyNpbmNsdWRlICJhY2MvYWNjX2Noay5jaCIKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCitzdGF0aWMgdm9pZCB0ZXN0X2FjY19jb21waWxlX3RpbWVfYXNzZXJ0KHZvaWQpIHsKKyNkZWZpbmUgQUNDQ0hLX0FTU0VSVChleHByKSAgICAgQUNDX0NPTVBJTEVfVElNRV9BU1NFUlQoZXhwcikKKyNpbmNsdWRlICJhY2MvYWNjX2Noay5jaCIKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCit9CisjdW5kZWYgTkRFQlVHCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitzdGF0aWMgaW50IHRlc3RfYWNjX3J1bl90aW1lX2Fzc2VydChpbnQgcikgeworI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICAgICBhc3NlcnQoZXhwcik7CisjaW5jbHVkZSAiYWNjL2FjY19jaGsuY2giCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorcmV0dXJuIHI7Cit9CitdXSwgW1sKK3Rlc3RfYWNjX2NvbXBpbGVfdGltZV9hc3NlcnQoKTsKK2lmICh0ZXN0X2FjY19ydW5fdGltZV9hc3NlcnQoMSkgIT0gMSkgcmV0dXJuIDE7CitdXQorKV0pCisKK21meF90bXA9RkFJTEVECitfQUNfQ09NUElMRV9JRkVMU0UoW10sIFttZnhfdG1wPXllc10pCitybSAtZiBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQKKworQ1BQRkxBR1M9JG1meF9zYXZlX0NQUEZMQUdTCisKK0FDX01TR19SRVNVTFQoWyRtZnhfdG1wXSkKK2Nhc2UgeCRtZnhfdG1wIGluCisgIHhwYXNzZWQgfCB4eWVzKSA7OworICAqKQorICAgIEFDX01TR19OT1RJQ0UoW10pCisgICAgQUNfTVNHX05PVElDRShbWW91ciBjb21waWxlciBmYWlsZWQgdGhlIEFDQyBjb25mb3JtYW5jZSB0ZXN0IC0gZm9yIGRldGFpbHMgc2VlIF0pCisgICAgQUNfTVNHX05PVElDRShbYGNvbmZpZy5sb2cnLiBQbGVhc2UgY2hlY2sgdGhhdCBsb2cgZmlsZSBhbmQgY29uc2lkZXIgc2VuZGluZ10pCisgICAgQUNfTVNHX05PVElDRShbYSBwYXRjaCBvciBidWctcmVwb3J0IHRvIDwke1BBQ0tBR0VfQlVHUkVQT1JUfT4uXSkKKyAgICBBQ19NU0dfTk9USUNFKFtUaGFua3MgZm9yIHlvdXIgc3VwcG9ydC5dKQorICAgIEFDX01TR19OT1RJQ0UoW10pCisgICAgQUNfTVNHX0VSUk9SKFtBQ0MgY29uZm9ybWFuY2UgdGVzdCBmYWlsZWQuIFN0b3AuXSkKK2RubCAgICBBU19FWElUCisgICAgOzsKK2VzYWMKK10pIyBtZnhfQUNDX0FDQ0NISworCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vIENoZWNrIGZvciBBQ0NfY29uZm9ybWFuY2UKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitBQ19ERUZVTihbbWZ4X01JTklBQ0NfQUNDQ0hLXSwgWworbWZ4X3RtcD0kMQorbWZ4X3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCitkbmwgaW4gTWFrZWZpbGUuaW4gJChJTkNMVURFUykgd2lsbCBiZSBiZWZvcmUgJChDUFBGTEFHUyksIHNvIHdlIG1pbWljIHRoaXMgaGVyZQordGVzdCAiWCRtZnhfdG1wIiA9ICJYIiB8fCBDUFBGTEFHUz0iJG1meF90bXAgJENQUEZMQUdTIgorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgeW91ciBjb21waWxlciBwYXNzZXMgdGhlIEFDQyBjb25mb3JtYW5jZSB0ZXN0XSkKKworQUNfTEFOR19DT05GVEVTVChbQUNfTEFOR19QUk9HUkFNKAorW1sjZGVmaW5lIEFDQ19DT05GSUdfTk9fSEVBREVSIDEKKyNkZWZpbmUgQUNDX1dBTlRfQUNDX0lOQ0RfSCAxCisjaW5jbHVkZSAkMgorCisjZGVmaW5lIEFDQ19XQU5UX0FDQ19DSEtfQ0ggMQorI3VuZGVmIEFDQ0NIS19BU1NFUlQKKyNkZWZpbmUgQUNDQ0hLX0FTU0VSVChleHByKSAgICAgQUNDX0NPTVBJTEVfVElNRV9BU1NFUlRfSEVBREVSKGV4cHIpCisjaW5jbHVkZSAkMgorCisjZGVmaW5lIEFDQ19XQU5UX0FDQ19DSEtfQ0ggMQorI3VuZGVmIEFDQ0NIS19BU1NFUlQKKyNkZWZpbmUgQUNDQ0hLX0FTU0VSVChleHByKSAgICAgQUNDX0NPTVBJTEVfVElNRV9BU1NFUlQoZXhwcikKK3N0YXRpYyB2b2lkIHRlc3RfYWNjX2NvbXBpbGVfdGltZV9hc3NlcnQodm9pZCkgeworI2luY2x1ZGUgJDIKK30KKworI3VuZGVmIE5ERUJVRworI2luY2x1ZGUgPGFzc2VydC5oPgorI2RlZmluZSBBQ0NfV0FOVF9BQ0NfQ0hLX0NIIDEKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgIGFzc2VydChleHByKTsKK3N0YXRpYyBpbnQgdGVzdF9hY2NfcnVuX3RpbWVfYXNzZXJ0KGludCByKSB7CisjaW5jbHVkZSAkMgorcmV0dXJuIHI7Cit9CitdXSwgW1sKK3Rlc3RfYWNjX2NvbXBpbGVfdGltZV9hc3NlcnQoKTsKK2lmICh0ZXN0X2FjY19ydW5fdGltZV9hc3NlcnQoMSkgIT0gMSkgcmV0dXJuIDE7CitdXQorKV0pCisKK21meF90bXA9RkFJTEVECitfQUNfQ09NUElMRV9JRkVMU0UoW10sIFttZnhfdG1wPXllc10pCitybSAtZiBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQKKworQ1BQRkxBR1M9JG1meF9zYXZlX0NQUEZMQUdTCisKK0FDX01TR19SRVNVTFQoWyRtZnhfdG1wXSkKK2Nhc2UgeCRtZnhfdG1wIGluCisgIHhwYXNzZWQgfCB4eWVzKSA7OworICAqKQorICAgIEFDX01TR19OT1RJQ0UoW10pCisgICAgQUNfTVNHX05PVElDRShbWW91ciBjb21waWxlciBmYWlsZWQgdGhlIEFDQyBjb25mb3JtYW5jZSB0ZXN0IC0gZm9yIGRldGFpbHMgc2VlIF0pCisgICAgQUNfTVNHX05PVElDRShbYGNvbmZpZy5sb2cnLiBQbGVhc2UgY2hlY2sgdGhhdCBsb2cgZmlsZSBhbmQgY29uc2lkZXIgc2VuZGluZ10pCisgICAgQUNfTVNHX05PVElDRShbYSBwYXRjaCBvciBidWctcmVwb3J0IHRvIDwke1BBQ0tBR0VfQlVHUkVQT1JUfT4uXSkKKyAgICBBQ19NU0dfTk9USUNFKFtUaGFua3MgZm9yIHlvdXIgc3VwcG9ydC5dKQorICAgIEFDX01TR19OT1RJQ0UoW10pCisgICAgQUNfTVNHX0VSUk9SKFtBQ0MgY29uZm9ybWFuY2UgdGVzdCBmYWlsZWQuIFN0b3AuXSkKK2RubCAgICBBU19FWElUCisgICAgOzsKK2VzYWMKK10pIyBtZnhfTUlOSUFDQ19BQ0NDSEsKKworCisKKyMgc2VyaWFsIDEKKworQUNfREVGVU4oW21meF9QUk9HX0NQUEZMQUdTXSwgWworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBDIHByZXByb2Nlc3NvciBuZWVkcyBzcGVjaWFsIGZsYWdzXSkKKworQUNfTEFOR19DT05GVEVTVChbQUNfTEFOR19QUk9HUkFNKAorW1sjaW5jbHVkZSA8bGltaXRzLmg+CisjaWYgKDMyNzY3ID49IDQyOTQ5NjcyOTV1bCkgfHwgKDY1NTM1dSA+PSA0Mjk0OTY3Mjk1dWwpCisjICBpbmNsdWRlICJ5b3VyIEMgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiAxIgorI2VsaWYgKDB4ZmZmZnUgPT0gMHhmZmZmZmZmZnVsKQorIyAgaW5jbHVkZSAieW91ciBDIHByZXByb2Nlc3NvciBpcyBicm9rZW4gMiIKKyNlbGlmICgzMjc2NyA+PSBVTE9OR19NQVgpIHx8ICg2NTUzNXUgPj0gVUxPTkdfTUFYKQorIyAgaW5jbHVkZSAieW91ciBDIHByZXByb2Nlc3NvciBpcyBicm9rZW4gMyIKKyNlbmRpZgorXV0sIFtbIF1dCispXSkKKworbWZ4X3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCittZnhfdG1wPUVSUk9SCitmb3IgbWZ4X2FyZyBpbiAiIiAtbm8tY3BwLXByZWNvbXAKK2RvCisgIENQUEZMQUdTPSIkbWZ4X2FyZyAkbWZ4X3NhdmVfQ1BQRkxBR1MiCisgIF9BQ19DT01QSUxFX0lGRUxTRShbXSwKK1ttZnhfdG1wPSRtZnhfYXJnCiticmVha10pCitkb25lCitDUFBGTEFHUz0kbWZ4X3NhdmVfQ1BQRkxBR1MKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QuJGFjX29iamV4dAorY2FzZSB4JG1meF90bXAgaW4KKyAgeCkKKyAgICBBQ19NU0dfUkVTVUxUKFtub25lIG5lZWRlZF0pIDs7CisgIHhFUlJPUikKKyAgICBBQ19NU0dfUkVTVUxUKFtFUlJPUl0pCisgICAgQUNfTVNHX0VSUk9SKFt5b3VyIEMgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiAtIGZvciBkZXRhaWxzIHNlZSBjb25maWcubG9nXSkKKyAgICA7OworICAqKQorICAgIEFDX01TR19SRVNVTFQoWyRtZnhfdG1wXSkKKyAgICBDUFBGTEFHUz0iJG1meF90bXAgJENQUEZMQUdTIgorICAgIDs7Citlc2FjCitdKSMgbWZ4X1BST0dfQ1BQRkxBR1MKKworCisKKyMgc2VyaWFsIDMKKworQUNfREVGVU4oW21meF9DSEVDS19IRUFERVJfU0FORV9MSU1JVFNfSF0sIFsKK0FDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGxpbWl0cy5oIGlzIHNhbmVdLAorbWZ4X2N2X2hlYWRlcl9zYW5lX2xpbWl0c19oLAorW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8bGltaXRzLmg+CisjaWYgKDMyNzY3ID49IDQyOTQ5NjcyOTV1bCkgfHwgKDY1NTM1dSA+PSA0Mjk0OTY3Mjk1dWwpCisjICBpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgZGVmaW5lZChfX0dOVUNfXykKKyMgICAgZXJyb3IgInlvdXIgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiAtIHVzZSBjb21waWxlciBvcHRpb24gLW5vLWNwcC1wcmVjb21wIgorIyAgZWxzZQorIyAgICBpbmNsdWRlICJ5b3VyIHByZXByb2Nlc3NvciBpcyBicm9rZW4iCisjICBlbmRpZgorI2VuZGlmCisjZGVmaW5lIE1GWF8weGZmZmYgICAgICAgICAgMHhmZmZmCisjZGVmaW5lIE1GWF8weGZmZmZmZmZmTCAgICAgNDI5NDk2NzI5NXVsCisjaWYgIWRlZmluZWQoQ0hBUl9CSVQpIHx8IChDSEFSX0JJVCAhPSA4KQorIyAgaW5jbHVkZSAiZXJyb3IgQ0hBUl9CSVQiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChVQ0hBUl9NQVgpCisjICBpbmNsdWRlICJlcnJvciBVQ0hBUl9NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFVTSFJUX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVTSFJUX01BWCAxIgorI2VuZGlmCisjaWYgIWRlZmluZWQoVUlOVF9NQVgpCisjICBpbmNsdWRlICJlcnJvciBVSU5UX01BWCAxIgorI2VuZGlmCisjaWYgIWRlZmluZWQoVUxPTkdfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgVUxPTkdfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTSFJUX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFNIUlRfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChJTlRfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgSU5UX01BWCAxIgorI2VuZGlmCisjaWYgIWRlZmluZWQoTE9OR19NQVgpCisjICBpbmNsdWRlICJlcnJvciBMT05HX01BWCAxIgorI2VuZGlmCisjaWYgKFVDSEFSX01BWCA8IDEpCisjICBpbmNsdWRlICJlcnJvciBVQ0hBUl9NQVggMiIKKyNlbmRpZgorI2lmIChVU0hSVF9NQVggPCAxKQorIyAgaW5jbHVkZSAiZXJyb3IgVVNIUlRfTUFYIDIiCisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPCAxKQorIyAgaW5jbHVkZSAiZXJyb3IgVUlOVF9NQVggMiIKKyNlbmRpZgorI2lmIChVTE9OR19NQVggPCAxKQorIyAgaW5jbHVkZSAiZXJyb3IgVUxPTkdfTUFYIDIiCisjZW5kaWYKKyNpZiAoVUNIQVJfTUFYIDwgMHhmZikKKyMgIGluY2x1ZGUgImVycm9yIFVDSEFSX01BWCAzIgorI2VuZGlmCisjaWYgKFVTSFJUX01BWCA8IE1GWF8weGZmZmYpCisjICBpbmNsdWRlICJlcnJvciBVU0hSVF9NQVggMyIKKyNlbmRpZgorI2lmIChVSU5UX01BWCA8IE1GWF8weGZmZmYpCisjICBpbmNsdWRlICJlcnJvciBVSU5UX01BWCAzIgorI2VuZGlmCisjaWYgKFVMT05HX01BWCA8IE1GWF8weGZmZmZmZmZmTCkKKyMgIGluY2x1ZGUgImVycm9yIFVMT05HX01BWCAzIgorI2VuZGlmCisjaWYgKFVTSFJUX01BWCA+IFVJTlRfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgVVNIUlRfTUFYIHZzIFVJTlRfTUFYIgorI2VuZGlmCisjaWYgKFVJTlRfTUFYID4gVUxPTkdfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgVUlOVF9NQVggdnMgVUxPTkdfTUFYIgorI2VuZGlmCitdXSwgW1sKKyNpZiAoVVNIUlRfTUFYID09IE1GWF8weGZmZmYpCit7IHR5cGVkZWYgY2hhciBhX3Nob3J0MmFbMSAtIDIgKiAhKHNpemVvZihzaG9ydCkgPT0gMildOyB9CisjZWxpZiAoVVNIUlRfTUFYID49IE1GWF8weGZmZmYpCit7IHR5cGVkZWYgY2hhciBhX3Nob3J0MmJbMSAtIDIgKiAhKHNpemVvZihzaG9ydCkgPiAyKV07IH0KKyNlbmRpZgorI2lmIChVSU5UX01BWCA9PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9pbnQyYVsxIC0gMiAqICEoc2l6ZW9mKGludCkgPT0gMildOyB9CisjZWxpZiAoVUlOVF9NQVggPj0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfaW50MmJbMSAtIDIgKiAhKHNpemVvZihpbnQpID4gMildOyB9CisjZW5kaWYKKyNpZiAoVUxPTkdfTUFYID09IE1GWF8weGZmZmYpCit7IHR5cGVkZWYgY2hhciBhX2xvbmcyYVsxIC0gMiAqICEoc2l6ZW9mKGxvbmcpID09IDIpXTsgfQorI2VsaWYgKFVMT05HX01BWCA+PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9sb25nMmJbMSAtIDIgKiAhKHNpemVvZihsb25nKSA+IDIpXTsgfQorI2VuZGlmCisjaWYgKFVTSFJUX01BWCA9PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX3Nob3J0NGFbMSAtIDIgKiAhKHNpemVvZihzaG9ydCkgPT0gNCldOyB9CisjZWxpZiAoVVNIUlRfTUFYID49IE1GWF8weGZmZmZmZmZmTCkKK3sgdHlwZWRlZiBjaGFyIGFfc2hvcnQ0YlsxIC0gMiAqICEoc2l6ZW9mKHNob3J0KSA+IDQpXTsgfQorI2VuZGlmCisjaWYgKFVJTlRfTUFYID09IE1GWF8weGZmZmZmZmZmTCkKK3sgdHlwZWRlZiBjaGFyIGFfaW50NGFbMSAtIDIgKiAhKHNpemVvZihpbnQpID09IDQpXTsgfQorI2VsaWYgKFVJTlRfTUFYID49IE1GWF8weGZmZmZmZmZmTCkKK3sgdHlwZWRlZiBjaGFyIGFfaW50NGJbMSAtIDIgKiAhKHNpemVvZihpbnQpID4gNCldOyB9CisjZW5kaWYKKyNpZiAoVUxPTkdfTUFYID09IE1GWF8weGZmZmZmZmZmTCkKK3sgdHlwZWRlZiBjaGFyIGFfbG9uZzRhWzEgLSAyICogIShzaXplb2YobG9uZykgPT0gNCldOyB9CisjZWxpZiAoVUxPTkdfTUFYID49IE1GWF8weGZmZmZmZmZmTCkKK3sgdHlwZWRlZiBjaGFyIGFfbG9uZzRiWzEgLSAyICogIShzaXplb2YobG9uZykgPiA0KV07IH0KKyNlbmRpZgorXV0pXSwKK1ttZnhfY3ZfaGVhZGVyX3NhbmVfbGltaXRzX2g9eWVzXSwKK1ttZnhfY3ZfaGVhZGVyX3NhbmVfbGltaXRzX2g9bm9dKV0pCitdKQorCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAvLyBzdGFuZGFyZAorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0FDX0RFRlVOKFttZnhfTFpPX0NIRUNLX0VORElBTl0sIFsKK0FDX0NfQklHRU5ESUFOKFtBQ19ERUZJTkUoTFpPX0FCSV9CSUdfRU5ESUFOLDEsW0RlZmluZSB0byAxIGlmIHlvdXIgbWFjaGluZSBpcyBiaWcgZW5kaWFuLl0pXSxbQUNfREVGSU5FKExaT19BQklfTElUVExFX0VORElBTiwxLFtEZWZpbmUgdG8gMSBpZiB5b3VyIG1hY2hpbmUgaXMgbGl0dGxlIGVuZGlhbi5dKV0pCitdKSMKKworCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAvLworIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2RubCBtb3JlIHR5cGVzIHdoaWNoIGFyZSBub3QgeWV0IGNvdmVyZWQgYnkgQUNDCisKK0FDX0RFRlVOKFttZnhfQ0hFQ0tfU0laRU9GXSwgWworQUNfQ0hFQ0tfU0laRU9GKF9faW50MzIpCitBQ19DSEVDS19TSVpFT0YoaW50bWF4X3QpCitBQ19DSEVDS19TSVpFT0YodWludG1heF90KQorQUNfQ0hFQ0tfU0laRU9GKGludHB0cl90KQorQUNfQ0hFQ0tfU0laRU9GKHVpbnRwdHJfdCkKKworQUNfQ0hFQ0tfU0laRU9GKGZsb2F0KQorQUNfQ0hFQ0tfU0laRU9GKGRvdWJsZSkKK0FDX0NIRUNLX1NJWkVPRihsb25nIGRvdWJsZSkKKworQUNfQ0hFQ0tfU0laRU9GKGRldl90KQorQUNfQ0hFQ0tfU0laRU9GKGZwb3NfdCkKK0FDX0NIRUNLX1NJWkVPRihtb2RlX3QpCitBQ19DSEVDS19TSVpFT0Yob2ZmX3QpCitBQ19DSEVDS19TSVpFT0Yoc3NpemVfdCkKK0FDX0NIRUNLX1NJWkVPRih0aW1lX3QpCitdKSMKKworCisKK0FDX0RFRlVOKFttZnhfQ0hFQ0tfTElCX1dJTk1NXSwgWworaWYgdGVzdCAiWCRHQ0MiID0gWHllczsgdGhlbgorY2FzZSAkaG9zdF9vcyBpbgorY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgICB0ZXN0ICJYJExJQlMiICE9ICJYIiAmJiBMSUJTPSIkTElCUyAiCisgICAgIExJQlM9IiR7TElCU30tbHdpbm1tIiA7OworKikKKyAgICAgOzsKK2VzYWMKK2ZpCitdKSMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvL2x6by9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVhNzc0NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvL2x6by9ydW4tcHRlc3QKQEAgLTAsMCArMSw4IEBACisjIS9iaW4vc2gKKworLi9sem90ZXN0IC1tYXZhaWwgLW4xMCAtcSAvZXRjL3NlcnZpY2VzCitMWk9URVNUPS4vbHpvdGVzdCAvYmluL3NoIC1lICIuL2NoZWNrLnNoIiAiL2V0YyIKKy4vYWxpZ24KKy4vY2hrc3VtCisuL3NpbXBsZQorLi90ZXN0bWluaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvXzIuMDkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem9fMi4wOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTc4NjE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvXzIuMDkuYmIKQEAgLTAsMCArMSwzNSBAQAorU1VNTUFSWSA9ICJMb3NzbGVzcyBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbHpvX2luaXQuYztiZWdpbmxpbmU9NTtlbmRsaW5lPTI1O21kNT0zNTUwMjM4MzVhOWI5ZWViNzBhYjg5NTM5NWU5NTFmZiIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vZG93bmxvYWQvbHpvLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVzZS1tZW1jcHktaW5zdGVhZC1vZi1yZWludmVudGluZy1pdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hY2luY2x1ZGUubTQgXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYzdmZmM5YTEwM2FmZTJkMWJiYTBiMDE1ZTdhYTg4N2YiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjI5NGE3Y2VkMzEzMDYzYzA1N2M1MDQyNTdmNDM3YzgzMzVjNDFiZmVlZDIzNTMxZWU0ZTZhMmI4N2JjYjM0YyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcHRlc3QKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNoYXJlZCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCWNwICR7V09SS0RJUn0vYWNpbmNsdWRlLm00ICR7U30vCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJdD0ke0R9JHtQVEVTVF9QQVRIfQorCWNwICR7U30vdXRpbC9jaGVjay5zaCAkdAorCWNwICR7Qn0vbWluaWx6by90ZXN0bWluaSAkdAorCWZvciBpIGluIHRlc3RzL2FsaWduIHRlc3RzL2Noa3N1bSBsem90ZXN0L2x6b3Rlc3QgZXhhbXBsZXMvc2ltcGxlCisJCWRvIGNwICR7Qn0vYGRpcm5hbWUgJGlgLy5saWJzL2BiYXNlbmFtZSAkaWAgJHQ7IFwKKwlkb25lCit9CisKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem9wL2x6b3AvMDAwMS11c2Utc3RhdGljLWlubGluZXMtYXMtdGhlLWV4dGVybmFsLWlubGluZS1kZWZpbml0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem9wL2x6b3AvMDAwMS11c2Utc3RhdGljLWlubGluZXMtYXMtdGhlLWV4dGVybmFsLWlubGluZS1kZWZpbml0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2N2I4OGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcC8wMDAxLXVzZS1zdGF0aWMtaW5saW5lcy1hcy10aGUtZXh0ZXJuYWwtaW5saW5lLWRlZmluaXRpb24ucGF0Y2gKQEAgLTAsMCArMSwxMDAgQEAKK0Zyb20gZWNjY2JjZjY2ZGE1Mzc3OWQ4OGUzOGUyYWY3ZjgyZWZmOGRkZTdmOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDE2IEF1ZyAyMDE1IDEwOjM1OjQ3IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHVzZSBzdGF0aWMgaW5saW5lcyBhcyB0aGUgZXh0ZXJuYWwgaW5saW5lIGRlZmluaXRpb24gaGFzCisgY2hhbmdlZCB3aXRoIGdjYzUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBzcmMvbWluaWFjYy5oIHwgMjQgKysrKysrKystLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbWluaWFjYy5oIGIvc3JjL21pbmlhY2MuaAoraW5kZXggMDllNmYwYy4uY2FlOThkMSAxMDA2NDQKKy0tLSBhL3NyYy9taW5pYWNjLmgKKysrKyBiL3NyYy9taW5pYWNjLmgKK0BAIC0yODgwLDggKzI4ODAsNyBAQCB0eXBlZGVmIHZvaWQgKF9fYWNjX2NkZWNsX3NpZ2hhbmRsZXIgKmFjY19zaWdoYW5kbGVyX3QpKGFjY19zaWdub190KTsKKyAjaWYgIShBQ0NfQ0ZHX05PX0lOTElORV9BU00pICYmIChfX2FjY19IQVZFX2ZvcmNlaW5saW5lKQorICNpZiAoQUNDX0FSQ0hfUE9XRVJQQyAmJiBBQ0NfQUJJX0JJR19FTkRJQU4pICYmIChBQ0NfQ0NfR05VQykKKyAjaWYgIWRlZmluZWQoQUNDX1VBX0dFVF9MRTE2KQorLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKTsKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKiBwcCkgeworK3N0YXRpYyBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKSB7CisgICAgIF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IGFjY191aW50MTZlX3QqIHAgPSAoX19hY2NfdWFfdm9sYXRpbGUgY29uc3QgYWNjX3VpbnQxNmVfdCopIHBwOworICAgICB1bnNpZ25lZCBsb25nIHY7CisgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJsaGJyeCAlMCwwLCUxIiA6ICI9ciIgKHYpIDogInIiIChwKSwgIm0iICgqcCkpOworQEAgLTI4OTAsOCArMjg4OSw3IEBAIGV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0CisgI2RlZmluZSBBQ0NfVUFfR0VUX0xFMTYocCkgICAgICBfX0FDQ19VQV9HRVRfTEUxNihwKQorICNlbmRpZgorICNpZiAhZGVmaW5lZChBQ0NfVUFfU0VUX0xFMTYpCistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdik7CistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdikgeworK3N0YXRpYyBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpZ25lZCBsb25nIHYpIHsKKyAgICAgX19hY2NfdWFfdm9sYXRpbGUgYWNjX3VpbnQxNmVfdCogcCA9IChfX2FjY191YV92b2xhdGlsZSBhY2NfdWludDE2ZV90KikgcHA7CisgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJzdGhicnggJTIsMCwlMSIgOiAiPW0iICgqcCkgOiAiciIgKHApLCAiciIgKHYpKTsKKyB9CitAQCAtMjkxNiw4ICsyOTE0LDcgQEAgZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2kKKyAjaWYgIShBQ0NfQ0ZHX05PX0lOTElORV9BU00pICYmIChfX2FjY19IQVZFX2ZvcmNlaW5saW5lKQorICNpZiAoQUNDX0FSQ0hfUE9XRVJQQyAmJiBBQ0NfQUJJX0JJR19FTkRJQU4pICYmIChBQ0NfQ0NfR05VQykKKyAjaWYgIWRlZmluZWQoQUNDX1VBX0dFVF9MRTMyKQorLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKTsKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKiBwcCkgeworK3N0YXRpYyBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKSB7CisgICAgIF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IGFjY191aW50MzJlX3QqIHAgPSAoX19hY2NfdWFfdm9sYXRpbGUgY29uc3QgYWNjX3VpbnQzMmVfdCopIHBwOworICAgICB1bnNpZ25lZCBsb25nIHY7CisgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJsd2JyeCAlMCwwLCUxIiA6ICI9ciIgKHYpIDogInIiIChwKSwgIm0iICgqcCkpOworQEAgLTI5MjYsOCArMjkyMyw3IEBAIGV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0CisgI2RlZmluZSBBQ0NfVUFfR0VUX0xFMzIocCkgICAgICBfX0FDQ19VQV9HRVRfTEUzMihwKQorICNlbmRpZgorICNpZiAhZGVmaW5lZChBQ0NfVUFfU0VUX0xFMzIpCistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdik7CistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdikgeworK3N0YXRpYyBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpZ25lZCBsb25nIHYpIHsKKyAgICAgX19hY2NfdWFfdm9sYXRpbGUgYWNjX3VpbnQzMmVfdCogcCA9IChfX2FjY191YV92b2xhdGlsZSBhY2NfdWludDMyZV90KikgcHA7CisgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJzdHdicnggJTIsMCwlMSIgOiAiPW0iICgqcCkgOiAiciIgKHApLCAiciIgKHYpKTsKKyB9CitAQCAtMzMwNyw4ICszMzAzLDcgQEAgdHlwZWRlZiB2b2lkIChfX2FjY19jZGVjbF9zaWdoYW5kbGVyICphY2Nfc2lnaGFuZGxlcl90KShhY2Nfc2lnbm9fdCk7CisgI2lmICEoQUNDX0NGR19OT19JTkxJTkVfQVNNKSAmJiAoX19hY2NfSEFWRV9mb3JjZWlubGluZSkKKyAjaWYgKEFDQ19BUkNIX1BPV0VSUEMgJiYgQUNDX0FCSV9CSUdfRU5ESUFOKSAmJiAoQUNDX0NDX0dOVUMpCisgI2lmICFkZWZpbmVkKEFDQ19VQV9HRVRfTEUxNikKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKiBwcCk7CistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApIHsKKytzdGF0aWMgX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKiBwcCkgeworICAgICBfX2FjY191YV92b2xhdGlsZSBjb25zdCBhY2NfdWludDE2ZV90KiBwID0gKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IGFjY191aW50MTZlX3QqKSBwcDsKKyAgICAgdW5zaWduZWQgbG9uZyB2OworICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibGhicnggJTAsMCwlMSIgOiAiPXIiICh2KSA6ICJyIiAocCksICJtIiAoKnApKTsKK0BAIC0zMzE3LDggKzMzMTIsNyBAQCBleHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSBjb25zdAorICNkZWZpbmUgQUNDX1VBX0dFVF9MRTE2KHApICAgICAgX19BQ0NfVUFfR0VUX0xFMTYocCkKKyAjZW5kaWYKKyAjaWYgIWRlZmluZWQoQUNDX1VBX1NFVF9MRTE2KQorLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpZ25lZCBsb25nIHYpOworLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpZ25lZCBsb25nIHYpIHsKKytzdGF0aWMgX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KSB7CisgICAgIF9fYWNjX3VhX3ZvbGF0aWxlIGFjY191aW50MTZlX3QqIHAgPSAoX19hY2NfdWFfdm9sYXRpbGUgYWNjX3VpbnQxNmVfdCopIHBwOworICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RoYnJ4ICUyLDAsJTEiIDogIj1tIiAoKnApIDogInIiIChwKSwgInIiICh2KSk7CisgfQorQEAgLTMzNDMsOCArMzMzNyw3IEBAIGV4dGVybiBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpCisgI2lmICEoQUNDX0NGR19OT19JTkxJTkVfQVNNKSAmJiAoX19hY2NfSEFWRV9mb3JjZWlubGluZSkKKyAjaWYgKEFDQ19BUkNIX1BPV0VSUEMgJiYgQUNDX0FCSV9CSUdfRU5ESUFOKSAmJiAoQUNDX0NDX0dOVUMpCisgI2lmICFkZWZpbmVkKEFDQ19VQV9HRVRfTEUzMikKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKiBwcCk7CistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApIHsKKytzdGF0aWMgX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKiBwcCkgeworICAgICBfX2FjY191YV92b2xhdGlsZSBjb25zdCBhY2NfdWludDMyZV90KiBwID0gKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IGFjY191aW50MzJlX3QqKSBwcDsKKyAgICAgdW5zaWduZWQgbG9uZyB2OworICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibHdicnggJTAsMCwlMSIgOiAiPXIiICh2KSA6ICJyIiAocCksICJtIiAoKnApKTsKK0BAIC0zMzUzLDggKzMzNDYsNyBAQCBleHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSBjb25zdAorICNkZWZpbmUgQUNDX1VBX0dFVF9MRTMyKHApICAgICAgX19BQ0NfVUFfR0VUX0xFMzIocCkKKyAjZW5kaWYKKyAjaWYgIWRlZmluZWQoQUNDX1VBX1NFVF9MRTMyKQorLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpZ25lZCBsb25nIHYpOworLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpZ25lZCBsb25nIHYpIHsKKytzdGF0aWMgX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KSB7CisgICAgIF9fYWNjX3VhX3ZvbGF0aWxlIGFjY191aW50MzJlX3QqIHAgPSAoX19hY2NfdWFfdm9sYXRpbGUgYWNjX3VpbnQzMmVfdCopIHBwOworICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R3YnJ4ICUyLDAsJTEiIDogIj1tIiAoKnApIDogInIiIChwKSwgInIiICh2KSk7CisgfQorLS0gCisyLjUuMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcC9hY2luY2x1ZGUubTQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcC9hY2luY2x1ZGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAyOWMxOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wL2FjaW5jbHVkZS5tNApAQCAtMCwwICsxLDM5MCBAQAorCitBQ19ERUZVTihbbWZ4X0FDQ19DSEVDS19FTkRJQU5dLCBbCitBQ19DX0JJR0VORElBTihbQUNfREVGSU5FKEFDQ19BQklfQklHX0VORElBTiwxLFtEZWZpbmUgdG8gMSBpZiB5b3VyIG1hY2hpbmUgaXMgYmlnIGVuZGlhbi5dKV0sW0FDX0RFRklORShBQ0NfQUJJX0xJVFRMRV9FTkRJQU4sMSxbRGVmaW5lIHRvIDEgaWYgeW91ciBtYWNoaW5lIGlzIGxpdHRsZSBlbmRpYW4uXSldKQorXSkjCisKK0FDX0RFRlVOKFttZnhfQUNDX0NIRUNLX0hFQURFUlNdLCBbCitBQ19IRUFERVJfVElNRQorQUNfQ0hFQ0tfSEVBREVSUyhbYXNzZXJ0LmggY3R5cGUuaCBkaXJlbnQuaCBlcnJuby5oIGZjbnRsLmggZmxvYXQuaCBsaW1pdHMuaCBtYWxsb2MuaCBtZW1vcnkuaCBzZXRqbXAuaCBzaWduYWwuaCBzdGRhcmcuaCBzdGRkZWYuaCBzdGRpbnQuaCBzdGRpby5oIHN0ZGxpYi5oIHN0cmluZy5oIHN0cmluZ3MuaCB0aW1lLmggdW5pc3RkLmggdXRpbWUuaCBzeXMvc3RhdC5oIHN5cy90aW1lLmggc3lzL3R5cGVzLmggc3lzL3dhaXQuaF0pCitdKSMKKworQUNfREVGVU4oW21meF9BQ0NfQ0hFQ0tfRlVOQ1NdLCBbCitBQ19DSEVDS19GVU5DUyhhY2Nlc3MgYWxsb2NhIGF0ZXhpdCBhdG9pIGF0b2wgY2htb2QgY2hvd24gY3RpbWUgZGlmZnRpbWUgZnN0YXQgZ2V0dGltZW9mZGF5IGdtdGltZSBsb2NhbHRpbWUgbG9uZ2ptcCBsc3RhdCBtZW1jbXAgbWVtY3B5IG1lbW1vdmUgbWVtc2V0IG1rdGltZSBxc29ydCByYWlzZSBzZXRqbXAgc2lnbmFsIHNucHJpbnRmIHN0cmNhc2VjbXAgc3RyY2hyIHN0cmR1cCBzdHJlcnJvciBzdHJmdGltZSBzdHJpY21wIHN0cm5jYXNlY21wIHN0cm5pY21wIHN0cnJjaHIgc3Ryc3RyIHRpbWUgdW1hc2sgdXRpbWUgdnNucHJpbnRmKQorXSkjCisKKworQUNfREVGVU4oW21meF9BQ0NfQ0hFQ0tfU0laRU9GXSwgWworQUNfQ0hFQ0tfU0laRU9GKHNob3J0KQorQUNfQ0hFQ0tfU0laRU9GKGludCkKK0FDX0NIRUNLX1NJWkVPRihsb25nKQorCitBQ19DSEVDS19TSVpFT0YobG9uZyBsb25nKQorQUNfQ0hFQ0tfU0laRU9GKF9faW50MTYpCitBQ19DSEVDS19TSVpFT0YoX19pbnQzMikKK0FDX0NIRUNLX1NJWkVPRihfX2ludDY0KQorCitBQ19DSEVDS19TSVpFT0Yodm9pZCAqKQorQUNfQ0hFQ0tfU0laRU9GKHNpemVfdCkKK0FDX0NIRUNLX1NJWkVPRihwdHJkaWZmX3QpCitdKSMKKworCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAvLyBDaGVjayBmb3IgQUNDX2NvbmZvcm1hbmNlCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworQUNfREVGVU4oW21meF9BQ0NfQUNDQ0hLXSwgWworbWZ4X3RtcD0kMQorbWZ4X3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCitkbmwgaW4gTWFrZWZpbGUuaW4gJChJTkNMVURFUykgd2lsbCBiZSBiZWZvcmUgJChDUFBGTEFHUyksIHNvIHdlIG1pbWljIHRoaXMgaGVyZQordGVzdCAiWCRtZnhfdG1wIiA9ICJYIiB8fCBDUFBGTEFHUz0iJG1meF90bXAgJENQUEZMQUdTIgorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgeW91ciBjb21waWxlciBwYXNzZXMgdGhlIEFDQyBjb25mb3JtYW5jZSB0ZXN0XSkKKworQUNfTEFOR19DT05GVEVTVChbQUNfTEFOR19QUk9HUkFNKAorW1sjZGVmaW5lIEFDQ19DT05GSUdfTk9fSEVBREVSIDEKKyNpbmNsdWRlICJhY2MvYWNjLmgiCisjaW5jbHVkZSAiYWNjL2FjY19pbmNkLmgiCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICAgICBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVF9IRUFERVIoZXhwcikKKyNpbmNsdWRlICJhY2MvYWNjX2Noay5jaCIKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCitzdGF0aWMgdm9pZCB0ZXN0X2FjY19jb21waWxlX3RpbWVfYXNzZXJ0KHZvaWQpIHsKKyNkZWZpbmUgQUNDQ0hLX0FTU0VSVChleHByKSAgICAgQUNDX0NPTVBJTEVfVElNRV9BU1NFUlQoZXhwcikKKyNpbmNsdWRlICJhY2MvYWNjX2Noay5jaCIKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCit9CisjdW5kZWYgTkRFQlVHCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitzdGF0aWMgaW50IHRlc3RfYWNjX3J1bl90aW1lX2Fzc2VydChpbnQgcikgeworI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICAgICBhc3NlcnQoZXhwcik7CisjaW5jbHVkZSAiYWNjL2FjY19jaGsuY2giCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorcmV0dXJuIHI7Cit9CitdXSwgW1sKK3Rlc3RfYWNjX2NvbXBpbGVfdGltZV9hc3NlcnQoKTsKK2lmICh0ZXN0X2FjY19ydW5fdGltZV9hc3NlcnQoMSkgIT0gMSkgcmV0dXJuIDE7CitdXQorKV0pCisKK21meF90bXA9RkFJTEVECitfQUNfQ09NUElMRV9JRkVMU0UoW10sIFttZnhfdG1wPXllc10pCitybSAtZiBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQKKworQ1BQRkxBR1M9JG1meF9zYXZlX0NQUEZMQUdTCisKK0FDX01TR19SRVNVTFQoWyRtZnhfdG1wXSkKK2Nhc2UgeCRtZnhfdG1wIGluCisgIHhwYXNzZWQgfCB4eWVzKSA7OworICAqKQorICAgIEFDX01TR19OT1RJQ0UoW10pCisgICAgQUNfTVNHX05PVElDRShbWW91ciBjb21waWxlciBmYWlsZWQgdGhlIEFDQyBjb25mb3JtYW5jZSB0ZXN0IC0gZm9yIGRldGFpbHMgc2VlIF0pCisgICAgQUNfTVNHX05PVElDRShbYGNvbmZpZy5sb2cnLiBQbGVhc2UgY2hlY2sgdGhhdCBsb2cgZmlsZSBhbmQgY29uc2lkZXIgc2VuZGluZ10pCisgICAgQUNfTVNHX05PVElDRShbYSBwYXRjaCBvciBidWctcmVwb3J0IHRvIDwke1BBQ0tBR0VfQlVHUkVQT1JUfT4uXSkKKyAgICBBQ19NU0dfTk9USUNFKFtUaGFua3MgZm9yIHlvdXIgc3VwcG9ydC5dKQorICAgIEFDX01TR19OT1RJQ0UoW10pCisgICAgQUNfTVNHX0VSUk9SKFtBQ0MgY29uZm9ybWFuY2UgdGVzdCBmYWlsZWQuIFN0b3AuXSkKK2RubCAgICBBU19FWElUCisgICAgOzsKK2VzYWMKK10pIyBtZnhfQUNDX0FDQ0NISworCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vIENoZWNrIGZvciBBQ0NfY29uZm9ybWFuY2UKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitBQ19ERUZVTihbbWZ4X01JTklBQ0NfQUNDQ0hLXSwgWworbWZ4X3RtcD0kMQorbWZ4X3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCitkbmwgaW4gTWFrZWZpbGUuaW4gJChJTkNMVURFUykgd2lsbCBiZSBiZWZvcmUgJChDUFBGTEFHUyksIHNvIHdlIG1pbWljIHRoaXMgaGVyZQordGVzdCAiWCRtZnhfdG1wIiA9ICJYIiB8fCBDUFBGTEFHUz0iJG1meF90bXAgJENQUEZMQUdTIgorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgeW91ciBjb21waWxlciBwYXNzZXMgdGhlIEFDQyBjb25mb3JtYW5jZSB0ZXN0XSkKKworQUNfTEFOR19DT05GVEVTVChbQUNfTEFOR19QUk9HUkFNKAorW1sjZGVmaW5lIEFDQ19DT05GSUdfTk9fSEVBREVSIDEKKyNkZWZpbmUgQUNDX1dBTlRfQUNDX0lOQ0RfSCAxCisjaW5jbHVkZSAkMgorCisjZGVmaW5lIEFDQ19XQU5UX0FDQ19DSEtfQ0ggMQorI3VuZGVmIEFDQ0NIS19BU1NFUlQKKyNkZWZpbmUgQUNDQ0hLX0FTU0VSVChleHByKSAgICAgQUNDX0NPTVBJTEVfVElNRV9BU1NFUlRfSEVBREVSKGV4cHIpCisjaW5jbHVkZSAkMgorCisjZGVmaW5lIEFDQ19XQU5UX0FDQ19DSEtfQ0ggMQorI3VuZGVmIEFDQ0NIS19BU1NFUlQKKyNkZWZpbmUgQUNDQ0hLX0FTU0VSVChleHByKSAgICAgQUNDX0NPTVBJTEVfVElNRV9BU1NFUlQoZXhwcikKK3N0YXRpYyB2b2lkIHRlc3RfYWNjX2NvbXBpbGVfdGltZV9hc3NlcnQodm9pZCkgeworI2luY2x1ZGUgJDIKK30KKworI3VuZGVmIE5ERUJVRworI2luY2x1ZGUgPGFzc2VydC5oPgorI2RlZmluZSBBQ0NfV0FOVF9BQ0NfQ0hLX0NIIDEKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgIGFzc2VydChleHByKTsKK3N0YXRpYyBpbnQgdGVzdF9hY2NfcnVuX3RpbWVfYXNzZXJ0KGludCByKSB7CisjaW5jbHVkZSAkMgorcmV0dXJuIHI7Cit9CitdXSwgW1sKK3Rlc3RfYWNjX2NvbXBpbGVfdGltZV9hc3NlcnQoKTsKK2lmICh0ZXN0X2FjY19ydW5fdGltZV9hc3NlcnQoMSkgIT0gMSkgcmV0dXJuIDE7CitdXQorKV0pCisKK21meF90bXA9RkFJTEVECitfQUNfQ09NUElMRV9JRkVMU0UoW10sIFttZnhfdG1wPXllc10pCitybSAtZiBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQKKworQ1BQRkxBR1M9JG1meF9zYXZlX0NQUEZMQUdTCisKK0FDX01TR19SRVNVTFQoWyRtZnhfdG1wXSkKK2Nhc2UgeCRtZnhfdG1wIGluCisgIHhwYXNzZWQgfCB4eWVzKSA7OworICAqKQorICAgIEFDX01TR19OT1RJQ0UoW10pCisgICAgQUNfTVNHX05PVElDRShbWW91ciBjb21waWxlciBmYWlsZWQgdGhlIEFDQyBjb25mb3JtYW5jZSB0ZXN0IC0gZm9yIGRldGFpbHMgc2VlIF0pCisgICAgQUNfTVNHX05PVElDRShbYGNvbmZpZy5sb2cnLiBQbGVhc2UgY2hlY2sgdGhhdCBsb2cgZmlsZSBhbmQgY29uc2lkZXIgc2VuZGluZ10pCisgICAgQUNfTVNHX05PVElDRShbYSBwYXRjaCBvciBidWctcmVwb3J0IHRvIDwke1BBQ0tBR0VfQlVHUkVQT1JUfT4uXSkKKyAgICBBQ19NU0dfTk9USUNFKFtUaGFua3MgZm9yIHlvdXIgc3VwcG9ydC5dKQorICAgIEFDX01TR19OT1RJQ0UoW10pCisgICAgQUNfTVNHX0VSUk9SKFtBQ0MgY29uZm9ybWFuY2UgdGVzdCBmYWlsZWQuIFN0b3AuXSkKK2RubCAgICBBU19FWElUCisgICAgOzsKK2VzYWMKK10pIyBtZnhfTUlOSUFDQ19BQ0NDSEsKKworCisKKyMgc2VyaWFsIDEKKworQUNfREVGVU4oW21meF9QUk9HX0NQUEZMQUdTXSwgWworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBDIHByZXByb2Nlc3NvciBuZWVkcyBzcGVjaWFsIGZsYWdzXSkKKworQUNfTEFOR19DT05GVEVTVChbQUNfTEFOR19QUk9HUkFNKAorW1sjaW5jbHVkZSA8bGltaXRzLmg+CisjaWYgKDMyNzY3ID49IDQyOTQ5NjcyOTV1bCkgfHwgKDY1NTM1dSA+PSA0Mjk0OTY3Mjk1dWwpCisjICBpbmNsdWRlICJ5b3VyIEMgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiAxIgorI2VsaWYgKDB4ZmZmZnUgPT0gMHhmZmZmZmZmZnVsKQorIyAgaW5jbHVkZSAieW91ciBDIHByZXByb2Nlc3NvciBpcyBicm9rZW4gMiIKKyNlbGlmICgzMjc2NyA+PSBVTE9OR19NQVgpIHx8ICg2NTUzNXUgPj0gVUxPTkdfTUFYKQorIyAgaW5jbHVkZSAieW91ciBDIHByZXByb2Nlc3NvciBpcyBicm9rZW4gMyIKKyNlbmRpZgorXV0sIFtbIF1dCispXSkKKworbWZ4X3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCittZnhfdG1wPUVSUk9SCitmb3IgbWZ4X2FyZyBpbiAiIiAtbm8tY3BwLXByZWNvbXAKK2RvCisgIENQUEZMQUdTPSIkbWZ4X2FyZyAkbWZ4X3NhdmVfQ1BQRkxBR1MiCisgIF9BQ19DT01QSUxFX0lGRUxTRShbXSwKK1ttZnhfdG1wPSRtZnhfYXJnCiticmVha10pCitkb25lCitDUFBGTEFHUz0kbWZ4X3NhdmVfQ1BQRkxBR1MKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QuJGFjX29iamV4dAorY2FzZSB4JG1meF90bXAgaW4KKyAgeCkKKyAgICBBQ19NU0dfUkVTVUxUKFtub25lIG5lZWRlZF0pIDs7CisgIHhFUlJPUikKKyAgICBBQ19NU0dfUkVTVUxUKFtFUlJPUl0pCisgICAgQUNfTVNHX0VSUk9SKFt5b3VyIEMgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiAtIGZvciBkZXRhaWxzIHNlZSBjb25maWcubG9nXSkKKyAgICA7OworICAqKQorICAgIEFDX01TR19SRVNVTFQoWyRtZnhfdG1wXSkKKyAgICBDUFBGTEFHUz0iJG1meF90bXAgJENQUEZMQUdTIgorICAgIDs7Citlc2FjCitdKSMgbWZ4X1BST0dfQ1BQRkxBR1MKKworCisKKyMgc2VyaWFsIDMKKworQUNfREVGVU4oW21meF9DSEVDS19IRUFERVJfU0FORV9MSU1JVFNfSF0sIFsKK0FDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGxpbWl0cy5oIGlzIHNhbmVdLAorbWZ4X2N2X2hlYWRlcl9zYW5lX2xpbWl0c19oLAorW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8bGltaXRzLmg+CisjaWYgKDMyNzY3ID49IDQyOTQ5NjcyOTV1bCkgfHwgKDY1NTM1dSA+PSA0Mjk0OTY3Mjk1dWwpCisjICBpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgZGVmaW5lZChfX0dOVUNfXykKKyMgICAgZXJyb3IgInlvdXIgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiAtIHVzZSBjb21waWxlciBvcHRpb24gLW5vLWNwcC1wcmVjb21wIgorIyAgZWxzZQorIyAgICBpbmNsdWRlICJ5b3VyIHByZXByb2Nlc3NvciBpcyBicm9rZW4iCisjICBlbmRpZgorI2VuZGlmCisjZGVmaW5lIE1GWF8weGZmZmYgICAgICAgICAgMHhmZmZmCisjZGVmaW5lIE1GWF8weGZmZmZmZmZmTCAgICAgNDI5NDk2NzI5NXVsCisjaWYgIWRlZmluZWQoQ0hBUl9CSVQpIHx8IChDSEFSX0JJVCAhPSA4KQorIyAgaW5jbHVkZSAiZXJyb3IgQ0hBUl9CSVQiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChVQ0hBUl9NQVgpCisjICBpbmNsdWRlICJlcnJvciBVQ0hBUl9NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFVTSFJUX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVTSFJUX01BWCAxIgorI2VuZGlmCisjaWYgIWRlZmluZWQoVUlOVF9NQVgpCisjICBpbmNsdWRlICJlcnJvciBVSU5UX01BWCAxIgorI2VuZGlmCisjaWYgIWRlZmluZWQoVUxPTkdfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgVUxPTkdfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTSFJUX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFNIUlRfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChJTlRfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgSU5UX01BWCAxIgorI2VuZGlmCisjaWYgIWRlZmluZWQoTE9OR19NQVgpCisjICBpbmNsdWRlICJlcnJvciBMT05HX01BWCAxIgorI2VuZGlmCisjaWYgKFVDSEFSX01BWCA8IDEpCisjICBpbmNsdWRlICJlcnJvciBVQ0hBUl9NQVggMiIKKyNlbmRpZgorI2lmIChVU0hSVF9NQVggPCAxKQorIyAgaW5jbHVkZSAiZXJyb3IgVVNIUlRfTUFYIDIiCisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPCAxKQorIyAgaW5jbHVkZSAiZXJyb3IgVUlOVF9NQVggMiIKKyNlbmRpZgorI2lmIChVTE9OR19NQVggPCAxKQorIyAgaW5jbHVkZSAiZXJyb3IgVUxPTkdfTUFYIDIiCisjZW5kaWYKKyNpZiAoVUNIQVJfTUFYIDwgMHhmZikKKyMgIGluY2x1ZGUgImVycm9yIFVDSEFSX01BWCAzIgorI2VuZGlmCisjaWYgKFVTSFJUX01BWCA8IE1GWF8weGZmZmYpCisjICBpbmNsdWRlICJlcnJvciBVU0hSVF9NQVggMyIKKyNlbmRpZgorI2lmIChVSU5UX01BWCA8IE1GWF8weGZmZmYpCisjICBpbmNsdWRlICJlcnJvciBVSU5UX01BWCAzIgorI2VuZGlmCisjaWYgKFVMT05HX01BWCA8IE1GWF8weGZmZmZmZmZmTCkKKyMgIGluY2x1ZGUgImVycm9yIFVMT05HX01BWCAzIgorI2VuZGlmCisjaWYgKFVTSFJUX01BWCA+IFVJTlRfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgVVNIUlRfTUFYIHZzIFVJTlRfTUFYIgorI2VuZGlmCisjaWYgKFVJTlRfTUFYID4gVUxPTkdfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgVUlOVF9NQVggdnMgVUxPTkdfTUFYIgorI2VuZGlmCitdXSwgW1sKKyNpZiAoVVNIUlRfTUFYID09IE1GWF8weGZmZmYpCit7IHR5cGVkZWYgY2hhciBhX3Nob3J0MmFbMSAtIDIgKiAhKHNpemVvZihzaG9ydCkgPT0gMildOyB9CisjZWxpZiAoVVNIUlRfTUFYID49IE1GWF8weGZmZmYpCit7IHR5cGVkZWYgY2hhciBhX3Nob3J0MmJbMSAtIDIgKiAhKHNpemVvZihzaG9ydCkgPiAyKV07IH0KKyNlbmRpZgorI2lmIChVSU5UX01BWCA9PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9pbnQyYVsxIC0gMiAqICEoc2l6ZW9mKGludCkgPT0gMildOyB9CisjZWxpZiAoVUlOVF9NQVggPj0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfaW50MmJbMSAtIDIgKiAhKHNpemVvZihpbnQpID4gMildOyB9CisjZW5kaWYKKyNpZiAoVUxPTkdfTUFYID09IE1GWF8weGZmZmYpCit7IHR5cGVkZWYgY2hhciBhX2xvbmcyYVsxIC0gMiAqICEoc2l6ZW9mKGxvbmcpID09IDIpXTsgfQorI2VsaWYgKFVMT05HX01BWCA+PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9sb25nMmJbMSAtIDIgKiAhKHNpemVvZihsb25nKSA+IDIpXTsgfQorI2VuZGlmCisjaWYgKFVTSFJUX01BWCA9PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX3Nob3J0NGFbMSAtIDIgKiAhKHNpemVvZihzaG9ydCkgPT0gNCldOyB9CisjZWxpZiAoVVNIUlRfTUFYID49IE1GWF8weGZmZmZmZmZmTCkKK3sgdHlwZWRlZiBjaGFyIGFfc2hvcnQ0YlsxIC0gMiAqICEoc2l6ZW9mKHNob3J0KSA+IDQpXTsgfQorI2VuZGlmCisjaWYgKFVJTlRfTUFYID09IE1GWF8weGZmZmZmZmZmTCkKK3sgdHlwZWRlZiBjaGFyIGFfaW50NGFbMSAtIDIgKiAhKHNpemVvZihpbnQpID09IDQpXTsgfQorI2VsaWYgKFVJTlRfTUFYID49IE1GWF8weGZmZmZmZmZmTCkKK3sgdHlwZWRlZiBjaGFyIGFfaW50NGJbMSAtIDIgKiAhKHNpemVvZihpbnQpID4gNCldOyB9CisjZW5kaWYKKyNpZiAoVUxPTkdfTUFYID09IE1GWF8weGZmZmZmZmZmTCkKK3sgdHlwZWRlZiBjaGFyIGFfbG9uZzRhWzEgLSAyICogIShzaXplb2YobG9uZykgPT0gNCldOyB9CisjZWxpZiAoVUxPTkdfTUFYID49IE1GWF8weGZmZmZmZmZmTCkKK3sgdHlwZWRlZiBjaGFyIGFfbG9uZzRiWzEgLSAyICogIShzaXplb2YobG9uZykgPiA0KV07IH0KKyNlbmRpZgorXV0pXSwKK1ttZnhfY3ZfaGVhZGVyX3NhbmVfbGltaXRzX2g9eWVzXSwKK1ttZnhfY3ZfaGVhZGVyX3NhbmVfbGltaXRzX2g9bm9dKV0pCitdKQorCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAvLyBzdGFuZGFyZAorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0FDX0RFRlVOKFttZnhfTFpPX0NIRUNLX0VORElBTl0sIFsKK0FDX0NfQklHRU5ESUFOKFtBQ19ERUZJTkUoTFpPX0FCSV9CSUdfRU5ESUFOLDEsW0RlZmluZSB0byAxIGlmIHlvdXIgbWFjaGluZSBpcyBiaWcgZW5kaWFuLl0pXSxbQUNfREVGSU5FKExaT19BQklfTElUVExFX0VORElBTiwxLFtEZWZpbmUgdG8gMSBpZiB5b3VyIG1hY2hpbmUgaXMgbGl0dGxlIGVuZGlhbi5dKV0pCitdKSMKKworCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAvLworIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2RubCBtb3JlIHR5cGVzIHdoaWNoIGFyZSBub3QgeWV0IGNvdmVyZWQgYnkgQUNDCisKK0FDX0RFRlVOKFttZnhfQ0hFQ0tfU0laRU9GXSwgWworQUNfQ0hFQ0tfU0laRU9GKF9faW50MzIpCitBQ19DSEVDS19TSVpFT0YoaW50bWF4X3QpCitBQ19DSEVDS19TSVpFT0YodWludG1heF90KQorQUNfQ0hFQ0tfU0laRU9GKGludHB0cl90KQorQUNfQ0hFQ0tfU0laRU9GKHVpbnRwdHJfdCkKKworQUNfQ0hFQ0tfU0laRU9GKGZsb2F0KQorQUNfQ0hFQ0tfU0laRU9GKGRvdWJsZSkKK0FDX0NIRUNLX1NJWkVPRihsb25nIGRvdWJsZSkKKworQUNfQ0hFQ0tfU0laRU9GKGRldl90KQorQUNfQ0hFQ0tfU0laRU9GKGZwb3NfdCkKK0FDX0NIRUNLX1NJWkVPRihtb2RlX3QpCitBQ19DSEVDS19TSVpFT0Yob2ZmX3QpCitBQ19DSEVDS19TSVpFT0Yoc3NpemVfdCkKK0FDX0NIRUNLX1NJWkVPRih0aW1lX3QpCitdKSMKKworCisKK0FDX0RFRlVOKFttZnhfQ0hFQ0tfTElCX1dJTk1NXSwgWworaWYgdGVzdCAiWCRHQ0MiID0gWHllczsgdGhlbgorY2FzZSAkaG9zdF9vcyBpbgorY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgICB0ZXN0ICJYJExJQlMiICE9ICJYIiAmJiBMSUJTPSIkTElCUyAiCisgICAgIExJQlM9IiR7TElCU30tbHdpbm1tIiA7OworKikKKyAgICAgOzsKK2VzYWMKK2ZpCitdKSMKKworI3NlcmlhbCA2CisKK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorCisjIERlZmluZSBTVF9NVElNX05TRUMgdG8gYmUgdGhlIG5hbm9zZWNvbmRzIG1lbWJlciBvZiBzdHJ1Y3Qgc3RhdCdzIHN0X210aW0sCisjIGlmIGl0IGV4aXN0cy4KKworQUNfREVGVU4oW0FDX1NUUlVDVF9TVF9NVElNX05TRUNdLAorIFtBQ19DQUNIRV9DSEVDSyhbZm9yIG5hbm9zZWNvbmRzIG1lbWJlciBvZiBzdHJ1Y3Qgc3RhdC5zdF9tdGltXSwKKyAgIGFjX2N2X3N0cnVjdF9zdF9tdGltX25zZWMsCisgICBbYWNfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgIGFjX2N2X3N0cnVjdF9zdF9tdGltX25zZWM9bm8KKyAgICAjIHR2X25zZWMgLS0gdGhlIHVzdWFsIGNhc2UKKyAgICAjIF90dl9uc2VjIC0tIFNvbGFyaXMgMi42LCBpZgorICAgICMJKGRlZmluZWQgX1hPUEVOX1NPVVJDRSAmJiBfWE9QRU5fU09VUkNFX0VYVEVOREVEID09IDEKKyAgICAjCSAmJiAhZGVmaW5lZCBfX0VYVEVOU0lPTlNfXykKKyAgICAjIHN0X190aW0udHZfbnNlYyAtLSBVbml4V2FyZSAyLjEuMgorICAgIGZvciBhY192YWwgaW4gdHZfbnNlYyBfdHZfbnNlYyBzdF9fdGltLnR2X25zZWM7IGRvCisgICAgICBDUFBGTEFHUz0iJGFjX3NhdmVfQ1BQRkxBR1MgLURTVF9NVElNX05TRUM9JGFjX3ZhbCIKKyAgICAgIEFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD5dLCBbc3RydWN0IHN0YXQgczsgcy5zdF9tdGltLlNUX01USU1fTlNFQztdLAorICAgICAgICBbYWNfY3Zfc3RydWN0X3N0X210aW1fbnNlYz0kYWNfdmFsOyBicmVha10pCisgICAgZG9uZQorICAgIENQUEZMQUdTPSIkYWNfc2F2ZV9DUFBGTEFHUyJdKQorCisgIGlmIHRlc3QgJGFjX2N2X3N0cnVjdF9zdF9tdGltX25zZWMgIT0gbm87IHRoZW4KKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoU1RfTVRJTV9OU0VDLCAkYWNfY3Zfc3RydWN0X3N0X210aW1fbnNlYywKKyAgICAgIFtEZWZpbmUgdG8gYmUgdGhlIG5hbm9zZWNvbmRzIG1lbWJlciBvZiBzdHJ1Y3Qgc3RhdCdzIHN0X210aW0sCisgICAgICAgaWYgaXQgZXhpc3RzLl0pCisgIGZpCisgXQorKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem9wL2x6b3AveDMyX2FiaV9taW5pYWNjX2gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcC94MzJfYWJpX21pbmlhY2NfaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzliZTgyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem9wL2x6b3AveDMyX2FiaV9taW5pYWNjX2gucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRml4IGdldCBvZiBGTEFHUyByZWdpc3RlciBpbiB4MzIgQUJJLAorCit4MzIgQUJJIHJlcXVpcmVzIHRvIGhhdmUgNjQtYml0IHZhcmlhYmxlIHRvIHN0b3JlIEZMQUdTIHJlZ2lzdGVyCitpbnN0ZWFkIG9mIHNpemVfdCB0aGF0IGlzIDMyLWJpdCB2YXJpYWJsZSwgdGhpcyBmaXggb3BlcmFuZAordHlwZSBtaXNtYXRjaCB3aGVuIHRyeSB0byBwb3AgcHJldmlvdXMgcHVzaGYgdmFsdWUuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IEFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgorCitJbmRleDogbHpvcC0xLjAzL3NyYy9taW5pYWNjLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsem9wLTEuMDMub3JpZy9zcmMvbWluaWFjYy5oCisrKysgbHpvcC0xLjAzL3NyYy9taW5pYWNjLmgKK0BAIC03NTQsNiArNzU0LDkgQEAKKyAjZWxpZiBkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9NX0FNRDY0KQorICMgIGRlZmluZSBBQ0NfQVJDSF9BTUQ2NCAgICAgICAgICAgIDEKKyAjICBkZWZpbmUgQUNDX0lORk9fQVJDSCAgICAgICAgICAgICAiYW1kNjQiCisrIyAgaWYgZGVmaW5lZChfX0lMUDMyX18pCisrIyAgICBkZWZpbmUgQUNDX0FSQ0hfQU1ENjRfWDMyICAgICAgMQorKyMgIGVuZGlmCisgI2VsaWYgZGVmaW5lZChfX3RodW1iX18pIHx8IChkZWZpbmVkKF9NX0FSTSkgJiYgZGVmaW5lZChfTV9USFVNQikpCisgIyAgZGVmaW5lIEFDQ19BUkNIX0FSTSAgICAgICAgICAgICAgMQorICMgIGRlZmluZSBBQ0NfQVJDSF9BUk1fVEhVTUIgICAgICAgIDEKK0BAIC02Nzg3LDcgKzY3OTAsMTEgQEAgQUNDTElCX1BVQkxJQ19OT0lOTElORSh2b2lkLCBhY2NfZGVidWdfbgorIEFDQ0xJQl9QVUJMSUNfTk9JTkxJTkUoaW50LCBhY2NfZGVidWdfYWxpZ25fY2hlY2tfcXVlcnkpICh2b2lkKQorIHsKKyAjaWYgKEFDQ19BUkNIX0FNRDY0IHx8IEFDQ19BUkNIX0kzODYpICYmIChBQ0NfQVNNX1NZTlRBWF9HTlVDKQorKyMgIGlmIGRlZmluZWQoQUNDX0FSQ0hfQU1ENjRfWDMyKQorKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgcjsKKysjICBlbHNlCisgICAgIHNpemVfdCByOworKyMgIGVuZGlmCisgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNoZlxuIHBvcCAlMFxuIiA6ICI9YSIgKHIpIDogOiBfX0FDQ19BU01fQ0xPQkJFUik7CisgICAgIHJldHVybiAoaW50KShyID4+IDE4KSAmIDE7CisgI2VsaWYgKEFDQ19BUkNIX0kzODYpICYmIChBQ0NfQVNNX1NZTlRBWF9NU0MpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcF8xLjAzLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem9wL2x6b3BfMS4wMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2Q2Mjg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem9wL2x6b3BfMS4wMy5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIlJlYWwtdGltZSBmaWxlIGNvbXByZXNzb3IiCitERVNDUklQVElPTiA9ICJsem9wIGlzIGEgY29tcHJlc3Npb24gdXRpbGl0eSB3aGljaCBpcyBkZXNpZ25lZCB0byBiZSBhIGNvbXBhbmlvbiB0byBnemlwLiBcblwKK0l0IGlzIGJhc2VkIG9uIHRoZSBMWk8gZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5IGFuZCBpdHMgbWFpbiBhZHZhbnRhZ2VzIG92ZXIgXG5cCitnemlwIGFyZSBtdWNoIGhpZ2hlciBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBzcGVlZCBhdCB0aGUgY29zdCBvZiBzb21lIFxuXAorY29tcHJlc3Npb24gcmF0aW8uIFRoZSBsem9wIGNvbXByZXNzaW9uIHV0aWxpdHkgd2FzIGRlc2lnbmVkIHdpdGggdGhlIGdvYWxzIFxuXAorb2YgcmVsaWFiaWxpdHksIHNwZWVkLCBwb3J0YWJpbGl0eSBhbmQgd2l0aCByZWFzb25hYmxlIGRyb3AtaW4gY29tcGF0aWJpbGl0eSBcblwKK3RvIGd6aXAuIgorREVQRU5EUyArPSAibHpvIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWRmZWFmM2RjNGJlZWY0ZjVhN2JkYmMzNWIxOTdmMzllIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9sem9wLmM7YmVnaW5saW5lPTU7ZW5kbGluZT0yMTttZDU9Njc5N2JkM2VkMGExYTQ5MzI3YjdlYmY5MzY2ZWJkODYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5sem9wLm9yZy9kb3dubG9hZC8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYWNpbmNsdWRlLm00IFwKKyAgICAgICAgICAgZmlsZTovL3gzMl9hYmlfbWluaWFjY19oLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdXNlLXN0YXRpYy1pbmxpbmVzLWFzLXRoZS1leHRlcm5hbC1pbmxpbmUtZGVmaW5pdGlvbi5wYXRjaCBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjAwNmM1ZTI3ZmI3OGNkZDE0YTYyOGZkZmE1YWExOTA1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImMxNDI1YjhjNzdkNDlmNWE2NzlkNWExMjZjOTBlYTZhZDk5NTg1YTU1ZTMzNWE2MTNjYWU1OWU5MDlkYmIyYzkiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisgICAgbG4gLXNmICAuLi9hY2luY2x1ZGUubTQgJHtTfS9hY2luY2x1ZGUubTQKKyAgICBhdXRvdG9vbHNfZG9fY29uZmlndXJlCit9CisKK0JCQ0xBU1NFWFRFTkQgKz0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L21wZnIvbXBmci0zLjEuMy9sb25nLWxvbmctdGh1bWIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L21wZnIvbXBmci0zLjEuMy9sb25nLWxvbmctdGh1bWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E3MTAwZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyLTMuMS4zL2xvbmctbG9uZy10aHVtYi5wYXRjaApAQCAtMCwwICsxLDM5IEBACitGcm9tIDg0MDIxYjFlMjM2NTA4MTY5YmU2NWU4MDJhOWMwYTI1ZmM5YTg4MjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQaGlsIEJsdW5kZWxsIDxwaGlsYkBnbnUub3JnPgorRGF0ZTogTW9uLCAyNyBPY3QgMjAwOCAyMjoyNjozNSArMDAwMAorU3ViamVjdDogW1BBVENIXSBtcGZyOiBjcnVzYWRlIGFnYWluc3QgaW5saW5lIGFzc2VtYmxlcgorCitXaXRob3V0IHRoaXMsIGJ1aWxkIGZhaWxzIGZvciB0aHVtYjoKK3wge3N0YW5kYXJkIGlucHV0fTogQXNzZW1ibGVyIG1lc3NhZ2VzOgorfCB7c3RhbmRhcmQgaW5wdXR9OjE5OTogRXJyb3I6IHNlbGVjdGVkIHByb2Nlc3NvciBkb2VzIG5vdCBzdXBwb3J0IFRodW1iIG1vZGUgYHVtdWxsIHNsLHIwLHIyLHIxJworfCB7c3RhbmRhcmQgaW5wdXR9OjIxNDogRXJyb3I6IHNlbGVjdGVkIHByb2Nlc3NvciBkb2VzIG5vdCBzdXBwb3J0IFRodW1iIG1vZGUgYHVtdWxsIHNsLHIyLHIxLGZwJworfCB7c3RhbmRhcmQgaW5wdXR9OjIxOTogRXJyb3I6IGluc3RydWN0aW9uIG5vdCBzdXBwb3J0ZWQgaW4gVGh1bWIxNiBtb2RlIC0tIGBhZGRzIGZwLHIwLHNsJworfCB7c3RhbmRhcmQgaW5wdXR9OjIyMDogRXJyb3I6IHVuc2hpZnRlZCByZWdpc3RlciByZXF1aXJlZCAtLSBgYWRjIHIyLHIyLCMwJworfCB7c3RhbmRhcmQgaW5wdXR9OjIzNTogRXJyb3I6IHNlbGVjdGVkIHByb2Nlc3NvciBkb2VzIG5vdCBzdXBwb3J0IFRodW1iIG1vZGUgYHVtdWxsIHIwLHNsLHIxLHIzJworfCB7c3RhbmRhcmQgaW5wdXR9OjI0NDogRXJyb3I6IHNlbGVjdGVkIHByb2Nlc3NvciBkb2VzIG5vdCBzdXBwb3J0IFRodW1iIG1vZGUgYHVtdWxsIGZwLGlwLHIxLHIzJworfCB7c3RhbmRhcmQgaW5wdXR9OjI1MzogRXJyb3I6IGluc3RydWN0aW9uIG5vdCBzdXBwb3J0ZWQgaW4gVGh1bWIxNiBtb2RlIC0tIGBhZGRzIHIzLHNsLGZwJworfCB7c3RhbmRhcmQgaW5wdXR9OjI1NDogRXJyb3I6IHVuc2hpZnRlZCByZWdpc3RlciByZXF1aXJlZCAtLSBgYWRjIGlwLGlwLCMwJworfCB7c3RhbmRhcmQgaW5wdXR9OjI1OTogRXJyb3I6IGluc3RydWN0aW9uIG5vdCBzdXBwb3J0ZWQgaW4gVGh1bWIxNiBtb2RlIC0tIGBhZGRzIHNsLHIxLHIwJworfCB7c3RhbmRhcmQgaW5wdXR9OjY0MjogRXJyb3I6IHNlbGVjdGVkIHByb2Nlc3NvciBkb2VzIG5vdCBzdXBwb3J0IFRodW1iIG1vZGUgYHVtdWxsIHIwLHIyLHIzLHIxJworfCAuLi9hcm0tb2UtbGludXgtZ251ZWFiaS1saWJ0b29sIC0tdGFnPUNDICAgLS1tb2RlPWNvbXBpbGUgYXJtLW9lLWxpbnV4LWdudWVhYmktZ2NjICAtbWFyY2g9YXJtdjV0ZSAgLW10aHVtYiAtbXRodW1iLWludGVyd29yayAgLW10dW5lPXhzY2FsZSAtLXN5c3Jvb3Q9L09FL3Noci1jb3JlL3RtcC1lZ2xpYmMvc3lzcm9vdHMvc3BpdHogLURIQVZFX0lOVFRZUEVTX0g9MSAtREhBVkVfU1RESU5UX0g9MSAtRFRJTUVfV0lUSF9TWVNfVElNRT0xIC1ESEFWRV9MT0NBTEVfSD0xIC1ESEFWRV9XQ0hBUl9IPTEgLURIQVZFX1NUREFSRz0xIC1ESEFWRV9TWVNfVElNRV9IPTEgLURIQVZFX0FMTE9DQV9IPTEgLURIQVZFX1NURElOVF9IPTEgLURIQVZFX1ZBX0NPUFk9MSAtREhBVkVfU0VUTE9DQUxFPTEgLURIQVZFX0dFVFRJTUVPRkRBWT0xIC1ESEFWRV9MT05HX0xPTkc9MSAtREhBVkVfSU5UTUFYX1Q9MSAtRE1QRlJfSEFWRV9JTlRNQVhfTUFYPTEgLURNUEZSX0hBVkVfRkVTRVRST1VORD0xIC1ESEFWRV9ST1VORD0xIC1ESEFWRV9UUlVOQz0xIC1ESEFWRV9GTE9PUj0xIC1ESEFWRV9DRUlMPTEgLURIQVZFX05FQVJCWUlOVD0xIC1ETFRfT0JKRElSPVwiLmxpYnMvXCIgLURIQVZFX0FUVFJJQlVURV9NT0RFPTEgLURIQVZFX19fR01QTl9ST09UUkVNPTEgLURIQVZFX19fR01QTl9TQlBJMV9ESVZBUFBSX1E9MSAtSS4gICAgIC1PMiAtcGlwZSAtZyAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgLWZmbG9hdC1zdG9yZSAtYyAtbyBwb3cubG8gcG93LmMKK3wge3N0YW5kYXJkIGlucHV0fToxMTU0OiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBvcnQgVGh1bWIgbW9kZSBgdW11bGwgcjAscjEsc2wsaXAnCit8IHtzdGFuZGFyZCBpbnB1dH06MTE2NjogRXJyb3I6IHNlbGVjdGVkIHByb2Nlc3NvciBkb2VzIG5vdCBzdXBwb3J0IFRodW1iIG1vZGUgYHVtdWxsIHIzLHIyLGlwLHIwJworfCB7c3RhbmRhcmQgaW5wdXR9OjExNzE6IEVycm9yOiBpbnN0cnVjdGlvbiBub3Qgc3VwcG9ydGVkIGluIFRodW1iMTYgbW9kZSAtLSBgYWRkcyByMCxyMSxyMycKK3wge3N0YW5kYXJkIGlucHV0fToxMTcyOiBFcnJvcjogdW5zaGlmdGVkIHJlZ2lzdGVyIHJlcXVpcmVkIC0tIGBhZGMgcjIscjIsIzAnCit8IG1ha2VbMl06ICoqKiBbbXVsLmxvXSBFcnJvciAxCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBtcGZyLm9sZC9zcmMvbXBmci1sb25nbG9uZy5oCTIwMDgtMDEtMDEgMDM6Mjk6MDkuMDAwMDAwMDAwICswMDAwCisrKysgbXBmci9zcmMvbXBmci1sb25nbG9uZy5oCTIwMDgtMTAtMjcgMjE6NDY6NDQuMDAwMDAwMDAwICswMDAwCitAQCAtNDA2LDcgKzQwNiw3IEBACisgCSAgICAgInJJSiIgKChVU0l0eXBlKSAoYmwpKSkKKyAjZW5kaWYKKyAKKy0jaWYgZGVmaW5lZCAoX19hcm1fXykgJiYgV19UWVBFX1NJWkUgPT0gMzIKKysjaWYgZGVmaW5lZCAoX19hcm1fXykgJiYgV19UWVBFX1NJWkUgPT0gMzIgJiYgIWRlZmluZWQoX190aHVtYl9fKQorICNkZWZpbmUgYWRkX3NzYWFhYShzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKSBcCisgICBfX2FzbV9fICgiYWRkc1x0JTEsICU0LCAlNVxuXHRhZGNcdCUwLCAlMiwgJTMiCQkJXAorIAkgICA6ICI9ciIgKHNoKSwgIj0mciIgKHNsKQkJCQkJXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9tcGZyL21wZnIuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9tcGZyL21wZnIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmM2Y5MTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L21wZnIvbXBmci5pbmMKQEAgLTAsMCArMSw2IEBACitTVU1NQVJZID0gIkMgbGlicmFyeSBmb3IgbXVsdGlwbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IGNvbXB1dGF0aW9ucyB3aXRoIGV4YWN0IHJvdW5kaW5nIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tcGZyLm9yZy8iCitMSUNFTlNFID0gIkxHUEx2MysiCitTRUNUSU9OID0gImRldmVsIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L21wZnIvbXBmcl8zLjEuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyXzMuMS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMTliNTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L21wZnIvbXBmcl8zLjEuMy5iYgpAQCAtMCwwICsxLDE3IEBACityZXF1aXJlIG1wZnIuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjMgJiBMR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisJCSAgICBmaWxlOi8vQ09QWUlORy5MRVNTRVI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IgorREVQRU5EUyA9ICJnbXAiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5tcGZyLm9yZy9tcGZyLSR7UFZ9L21wZnItJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2xvbmctbG9uZy10aHVtYi5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjY5NjkzOThjZDJmYmM1NmE2YWY1NzBiNTI3M2M1NmE5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY4MzVhMDhiZDk5MmM4MjU3NjQxNzkxZTlhNmEyYjM1YjAyMzM2YzhkZTI2ZDBhODU3Nzk1Mzc0N2U1MTRhMTYiCisKK1MgPSAiJHtXT1JLRElSfS9tcGZyLSR7UFZ9IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25lb24vbmVvbi9nbnV0bHNfNC4zX2ZpeHVwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZW9uL25lb24vZ251dGxzXzQuM19maXh1cC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTlmNWUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZW9uL25lb24vZ251dGxzXzQuM19maXh1cC5wYXRjaApAQCAtMCwwICsxLDY4IEBACityZXBsYWNlIGRlcHJlY2F0ZWQgR251VExTIGZ1bmN0aW9ucyB3aXRoIG5ld2VyIG9uZXMgaWYgYXZhaWxhYmxlIAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyODA4QGdtYWlsLmNvbT4KKworSW5kZXg6IG5lb24tMC4zMC4xL21hY3Jvcy9uZW9uLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbmVvbi0wLjMwLjEub3JpZy9tYWNyb3MvbmVvbi5tNAorKysrIG5lb24tMC4zMC4xL21hY3Jvcy9uZW9uLm00CitAQCAtOTg3LDYgKzk4NywxMCBAQCBnbnV0bHMpCisgICAgICAgICAgICAgICAgICAgZ251dGxzX2NlcnRpZmljYXRlX2dldF94NTA5X2NhcyBcCisgICAgICAgICAgICAgICAgICAgZ251dGxzX3g1MDlfY3J0X3NpZ24yXSkKKyAKKysgICAjIGdudXRscyA0LjMgY2hlY2sKKysgICBBQ19DSEVDS19MSUIoZ251dGxzLCBnbnV0bHNfZ2xvYmFsX2luaXQpCisrICAgQUNfQ0hFQ0tfRlVOQ1MoZ251dGxzX2NlcnRpZmljYXRlX3NldF9yZXRyaWV2ZV9mdW5jdGlvbiwsKQorKworICAgICMgZmFpbCBpZiBnbnV0bHNfeDUwOV9jcnRfc2lnbjIgaXMgbm90IGZvdW5kIChpdCB3YXMgaW50cm9kdWNlZCBpbiAxLjIuMCwgd2hpY2ggaXMgcmVxdWlyZWQpCisgICAgaWYgdGVzdCB4JHthY19jdl9mdW5jX2dudXRsc194NTA5X2NydF9zaWduMn0gIT0geHllczsgdGhlbgorICAgICAgICBBQ19NU0dfRVJST1IoW0dudVRMUyB2ZXJzaW9uIHByZWRhdGVzIGdudXRsc194NTA5X2NydF9zaWduMiwgbmV3ZXIgdmVyc2lvbiByZXF1aXJlZCAoYXQgbGVhc3QgMS4yLjApXSkKK0luZGV4OiBuZW9uLTAuMzAuMS9zcmMvbmVfZ251dGxzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBuZW9uLTAuMzAuMS5vcmlnL3NyYy9uZV9nbnV0bHMuYworKysrIG5lb24tMC4zMC4xL3NyYy9uZV9nbnV0bHMuYworQEAgLTU1Myw3ICs1NTMsMTMgQEAgZHVwX2Vycm9yOgorIHN0YXRpYyBpbnQgcHJvdmlkZV9jbGllbnRfY2VydChnbnV0bHNfc2Vzc2lvbl90IHNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdudXRsc19kYXR1bV90ICpyZXFfY2FfcmRuLCBpbnQgbnJlcXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdudXRsc19wa19hbGdvcml0aG1fdCAqc2lnbl9hbGdvcywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpZ25fYWxnb3NfbGVuZ3RoLCBnbnV0bHNfcmV0cl9zdCAqc3QpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaWduX2FsZ29zX2xlbmd0aCwKKysjaWYgSEFWRV9HTlVUTFNfQ0VSVElGSUNBVEVfU0VUX1JFVFJJRVZFX0ZVTkNUSU9OCisrICAgIGdudXRsc19yZXRyMl9zdCogc3QKKysjZWxzZQorKyAgICBnbnV0bHNfcmV0cl9zdCAqc3QKKysjZW5kaWYKKysgICAgKQorIHsKKyAgICAgbmVfc2Vzc2lvbiAqc2VzcyA9IGdudXRsc19zZXNzaW9uX2dldF9wdHIoc2Vzc2lvbik7CisgICAgIAorQEAgLTYxNyw4ICs2MjMsMTEgQEAgc3RhdGljIGludCBwcm92aWRlX2NsaWVudF9jZXJ0KGdudXRsc19zZQorICNlbmRpZgorICAgICAgICAgICAgICkgeworICAgICAgICAgICAgIE5FX0RFQlVHKE5FX0RCR19TU0wsICJTdXBwbHlpbmcgY2xpZW50IGNlcnRpZmljYXRlLlxuIik7CistCisrI2lmIEhBVkVfR05VVExTX0NFUlRJRklDQVRFX1NFVF9SRVRSSUVWRV9GVU5DVElPTgorKyAgICAgICAgICAgIHN0LT5jZXJ0X3R5cGUgPSB0eXBlOworKyNlbHNlCisgICAgICAgICAgICAgc3QtPnR5cGUgPSB0eXBlOworKyNlbmRpZgorICAgICAgICAgICAgIHN0LT5uY2VydHMgPSAxOworICAgICAgICAgICAgIHN0LT5jZXJ0Lng1MDkgPSAmc2Vzcy0+Y2xpZW50X2NlcnQtPmNlcnQuc3ViamVjdDsKKyAgICAgICAgICAgICBzdC0+a2V5Lng1MDkgPSBzZXNzLT5jbGllbnRfY2VydC0+cGtleTsKK0BAIC02NDksOCArNjU4LDE0IEBAIG5lX3NzbF9jb250ZXh0ICpuZV9zc2xfY29udGV4dF9jcmVhdGUoaW4KKyAgICAgbmVfc3NsX2NvbnRleHQgKmN0eCA9IG5lX2NhbGxvYyhzaXplb2YgKmN0eCk7CisgICAgIGdudXRsc19jZXJ0aWZpY2F0ZV9hbGxvY2F0ZV9jcmVkZW50aWFscygmY3R4LT5jcmVkKTsKKyAgICAgaWYgKGZsYWdzID09IE5FX1NTTF9DVFhfQ0xJRU5UKSB7CisrCisrI2lmIEhBVkVfR05VVExTX0NFUlRJRklDQVRFX1NFVF9SRVRSSUVWRV9GVU5DVElPTgorKyAgICAgICAgZ251dGxzX2NlcnRpZmljYXRlX3NldF9yZXRyaWV2ZV9mdW5jdGlvbihjdHgtPmNyZWQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVfY2xpZW50X2NlcnQpOworKyNlbHNlCisgICAgICAgICBnbnV0bHNfY2VydGlmaWNhdGVfY2xpZW50X3NldF9yZXRyaWV2ZV9mdW5jdGlvbihjdHgtPmNyZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlX2NsaWVudF9jZXJ0KTsKKysjZW5kaWYKKyAgICAgfQorICAgICBnbnV0bHNfY2VydGlmaWNhdGVfc2V0X3ZlcmlmeV9mbGFncyhjdHgtPmNyZWQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTlVUTFNfVkVSSUZZX0FMTE9XX1g1MDlfVjFfQ0FfQ1JUKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmVvbi9uZW9uL3BrZ2NvbmZpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmVvbi9uZW9uL3BrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzlkYmE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZW9uL25lb24vcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworLS0tCisgbmVvbi5wYy5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworLS0tIG5lb24tMC4zMC4xLm9yaWcvbmVvbi5wYy5pbgorKysrIG5lb24tMC4zMC4xL25lb24ucGMuaW4KK0BAIC03LDUgKzcsNSBAQCBOYW1lOiBuZW9uCisgRGVzY3JpcHRpb246IEhUVFAvV2ViREFWIGNsaWVudCBsaWJyYXJ5CisgVmVyc2lvbjogQE5FT05fVkVSU0lPTkAKKyBMaWJzOiAtTCR7bGliZGlyfSAtbG5lb24gQE5FT05fUENfTElCU0AKKy1MaWJzLnByaXZhdGU6IEBORU9OX0xJQlNACisrTGlicy5wcml2YXRlOiAtTCR7bGliZGlyfSAtbHogLWxnY3J5cHQgLWxncGctZXJyb3IgLWxleHBhdCAtbGdudXRscworIENmbGFnczogLUkke2luY2x1ZGVkaXJ9L25lb24gQE5FT05fQ0ZMQUdTQApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZW9uL25lb25fMC4zMC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZW9uL25lb25fMC4zMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNDQzMTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25lb24vbmVvbl8wLjMwLjEuYmIKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJBbiBIVFRQIGFuZCBXZWJEQVYgY2xpZW50IGxpYnJhcnkgd2l0aCBhIEMgaW50ZXJmYWNlIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy53ZWJkYXYub3JnL25lb24vIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc3JjL0NPUFlJTkcuTElCO21kNT1mMzBhOTcxNmVmMzc2MmUzNDY3YTJmNjJiZjc5MGYwYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbmVfdXRpbHMuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT0yY2FjYTYwOTUzOGVkZGFhNmY2YWRmMTIwYTIxODAzNyIKK0RFUEVORFMgPSAiemxpYiBsaWJ4bWwyIGV4cGF0IHRpbWUgZ251dGxzIGxpYnByb3h5IgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiemxpYi1uYXRpdmUgbGlieG1sMi1uYXRpdmUgZXhwYXQtbmF0aXZlIGdudXRscy1uYXRpdmUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cud2ViZGF2Lm9yZy8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ251dGxzXzQuM19maXh1cC5wYXRjaCIKK1NSQ19VUklbbWQ1c3VtXSA9ICIyMzFhZGViZTVjMmY3OGZkZWQzZTNkZjZlOTU4ODc4ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwMGM2MjZjMGRjMThkMDk0YWIzNzRkYmQ5YTM1NDkxNWJmZTQ3NzY0MzMyODkzODZlZDQ4OWMyZWMwODQ1Y2RkIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L25lb24tY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQgbGliX3BhY2thZ2UgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtc3NsPWdudXRscyAtLXdpdGgtbGlieG1sMiAtLXdpdGgtZXhwYXQgLS1lbmFibGUtc2hhcmVkIgorRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtZ3NzYXBpIgorCitkb19jb21waWxlX2FwcGVuZCgpIHsKKwlvZV9ydW5tYWtlIC1DIHRlc3QKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL2ZpbGVzL0FkZC10YXJnZXQtdG8tb25seS1idWlsZC10ZXN0cy1ub3QtcnVuLXRoZW0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9maWxlcy9BZGQtdGFyZ2V0LXRvLW9ubHktYnVpbGQtdGVzdHMtbm90LXJ1bi10aGVtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZGE3NzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9maWxlcy9BZGQtdGFyZ2V0LXRvLW9ubHktYnVpbGQtdGVzdHMtbm90LXJ1bi10aGVtLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gNDZlZGYwMWNjOThkYjlmOWZlZWM5ODQ4OTc4MzZkZmRkMjZiZGM4ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBXZWQsIDEyIEF1ZyAyMDE1IDIzOjI3OjI3ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZCB0YXJnZXQgdG8gb25seSBidWlsZCB0ZXN0cyAobm90IHJ1biB0aGVtKQorCitOb3Qgc2VuZGluZyB1cHN0cmVhbSBhcyB0aGlzIGlzIG9ubHkgYSBzdGFydCBvZiBhIHNvbHV0aW9uIHRvCitpbnN0YWxsYWJsZSB0ZXN0czogSXQncyB1c2VmdWwgZm9yIHVzIGFscmVhZHkgYXMgaXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbm90IGEgY29tcGxldGUgc29sdXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CistLS0KKyBNYWtlZmlsZS5pbiAgICAgICAgICAgfCAzICsrKworIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbiB8IDIgKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggMDhlZmI3ZC4uNzkwOTM0MiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTU1LDYgKzU1LDkgQEAgY2xlYW4gZGlzdGNsZWFuIG1vc3RseWNsZWFuIG1haW50YWluZXItY2xlYW4gdGFnczoKKyAJICBlY2hvICJNYWtpbmcgJEAgaW4gJCRkIiA7IChjZCAkJGQgJiYgJChNQUtFKSAkQCk7IGRvbmUKKyAJJChNQUtFKSAkQC1oZXJlCisgCisrYnVpbGR0ZXN0OgorKwllY2hvICJNYWtpbmcgJEAgaW4gdGVzdHN1aXRlIiA7IChjZCB0ZXN0c3VpdGUgJiYgJChNQUtFKSAkQCkKKysKKyBjaGVjay1oZXJlOgorIAl0cnVlCisgCitkaWZmIC0tZ2l0IGEvdGVzdHN1aXRlL01ha2VmaWxlLmluIGIvdGVzdHN1aXRlL01ha2VmaWxlLmluCitpbmRleCA2YmMxOTA3Li5iYjY1YmYwIDEwMDY0NAorLS0tIGEvdGVzdHN1aXRlL01ha2VmaWxlLmluCisrKysgYi90ZXN0c3VpdGUvTWFrZWZpbGUuaW4KK0BAIC0xMTYsNiArMTE2LDggQEAgJChUQVJHRVRTKSAkKEVYVFJBX1RBUkdFVFMpOiB0ZXN0dXRpbHMuJChPQkpFWFQpIC4uL25ldHRsZS1pbnRlcm5hbC4kKE9CSkVYVCkgXAorICMgZGF0YS4KKyBWQUxHUklORCA9IHZhbGdyaW5kIC0tZXJyb3ItZXhpdGNvZGU9MSAtLWxlYWstY2hlY2s9ZnVsbCAtLXNob3ctcmVhY2hhYmxlPXllcyBASUZfQVNNQCAtLXBhcnRpYWwtbG9hZHMtb2s9eWVzCisgCisrYnVpbGR0ZXN0OiAkKFRTX0FMTCkKKysKKyAjIFRoZSBQQVRIIHVwZGF0ZSBpcyBmb3IgbG9jYXRpbmcgZGxscyBvbiB3Km5kb3dzLgorIGNoZWNrOiAkKFRTX0FMTCkKKyAJTERfTElCUkFSWV9QQVRIPS4uLy5saWIgUEFUSD0iLi4vLmxpYjokJFBBVEgiIHNyY2Rpcj0iJChzcmNkaXIpIiBcCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL2ZpbGVzL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL2ZpbGVzL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTBiZWQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvZmlsZXMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMzYgQEAKKyMhIC9iaW4vc2gKKworY2QgdGVzdHN1aXRlCisKK2ZhaWxlZD0wCithbGw9MAorCitmb3IgZiBpbiAqLXRlc3Q7IGRvCisgICAgaWYgWyAiJGYiID0gInNoYTEtaHVnZS10ZXN0IiBdIDsgdGhlbgorICAgICAgICBlY2hvICJTS0lQOiAkZiAoc2tpcHBlZCBmb3IgbHVkaWNyb3VzIHJ1biB0aW1lKSIKKyAgICAgICAgY29udGludWUKKyAgICBmaQorCisgICAgIi4vJGYiCisgICAgY2FzZSAiJD8iIGluCisgICAgICAgIDApCisgICAgICAgICAgICBlY2hvICJQQVNTOiAkZiIKKyAgICAgICAgICAgIGFsbD0kKChhbGwgKyAxKSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIDc3KQorICAgICAgICAgICAgZWNobyAiU0tJUDogJGYiCisgICAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgZWNobyAiRkFJTDogJGYiCisgICAgICAgICAgICBmYWlsZWQ9JCgoZmFpbGVkICsgMSkpCisgICAgICAgICAgICBhbGw9JCgoYWxsICsgMSkpCisgICAgICAgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworaWYgWyAiJGZhaWxlZCIgLWVxIDAgXSA7IHRoZW4KKyAgZWNobyAiQWxsICRhbGwgdGVzdHMgcGFzc2VkIgorZWxzZQorICBlY2hvICIkZmFpbGVkIG9mICRhbGwgdGVzdHMgZmFpbGVkIgorZmkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvbmV0dGxlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL25ldHRsZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmZmY2ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL25ldHRsZS5pbmMKQEAgLTAsMCArMSw0MyBAQAorU1VNTUFSWSA9ICJBIGxvdyBsZXZlbCBjcnlwdG9ncmFwaGljIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmx5c2F0b3IubGl1LnNlL35uaXNzZS9uZXR0bGUvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2VycGVudC1kZWNyeXB0LmM7YmVnaW5saW5lPTUzO2VuZGxpbmU9Njc7bWQ1PWJjZmQ0NzQ1ZDUzY2E1N2Y4MjkwNzA4OTg5OGUzOTBkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NlcnBlbnQtc2V0LWtleS5jO2JlZ2lubGluZT01NjtlbmRsaW5lPTcwO21kNT1iY2ZkNDc0NWQ1M2NhNTdmODI5MDcwODk4OThlMzkwZCIKKworREVQRU5EUyArPSAiZ21wIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubHlzYXRvci5saXUuc2Uvfm5pc3NlL2FyY2hpdmUvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL0FkZC10YXJnZXQtdG8tb25seS1idWlsZC10ZXN0cy1ub3QtcnVuLXRoZW0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDAzZDUxNDc5MTEzMTc5MzFkZDQ1MzUyMGViMjM0YTUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmM3MWViZDQzNDM1NTM3ZDc2Nzc5OWU0MTRmY2U4OGU1MjFiNzI3OGQ0OGM4NjA2NTEyMTZlMWZjNjU1NWI0MCIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1vcGVuc3NsIgorCitpbmhlcml0IGF1dG90b29scyBwdGVzdAorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAgICBpZiBbICEgLWUgJHtTfS9hY2luY2x1ZGUubTQgLWEgLWUgJHtTfS9hY2xvY2FsLm00IF07IHRoZW4KKyAgICAgICAgICAgICAgIGNwICR7U30vYWNsb2NhbC5tNCAke1N9L2FjaW5jbHVkZS5tNAorICAgICAgIGZpCit9CisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgYnVpbGR0ZXN0Cit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHN1aXRlLworICAgICAgICBpbnN0YWxsICR7U30vdGVzdHN1aXRlL2dvbGQtYnVnLnR4dCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0c3VpdGUvCisgICAgICAgIGluc3RhbGwgJHtTfS90ZXN0c3VpdGUvKi10ZXN0ICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzdWl0ZS8KKyAgICAgICAgIyB0b29scyBjYW4gYmUgZm91bmQgaW4gUEFUSCwgbm90IGluIC4uL3Rvb2xzLworICAgICAgICBzZWQgLWkgLWUgJ3N8Li4vdG9vbHMvfHwnICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzdWl0ZS8qLXRlc3QKKyAgICAgICAgaW5zdGFsbCAke0J9L3Rlc3RzdWl0ZS8qLXRlc3QgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHN1aXRlLworfQorCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL25ldHRsZV8yLjcuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL25ldHRsZV8yLjcuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTI1NzRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvbmV0dGxlXzIuNy4xLmJiCkBAIC0wLDAgKzEsMTIgQEAKK3JlcXVpcmUgbmV0dGxlLmluYworCitMSUNFTlNFID0gIkxHUEx2Mi4xICYgR1BMdjIiCitMSUNFTlNFXyR7UE59ID0gIkxHUEx2Mi4xKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NlcnBlbnQtZGVjcnlwdC5jO2JlZ2lubGluZT01MztlbmRsaW5lPTY3O21kNT1iY2ZkNDc0NWQ1M2NhNTdmODI5MDcwODk4OThlMzkwZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zZXJwZW50LXNldC1rZXkuYztiZWdpbmxpbmU9NTY7ZW5kbGluZT03MDttZDU9YmNmZDQ3NDVkNTNjYTU3ZjgyOTA3MDg5ODk4ZTM5MGQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwMDNkNTE0NzkxMTMxNzkzMWRkNDUzNTIwZWIyMzRhNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiYzcxZWJkNDM0MzU1MzdkNzY3Nzk5ZTQxNGZjZTg4ZTUyMWI3Mjc4ZDQ4Yzg2MDY1MTIxNmUxZmM2NTU1YjQwIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9uZXR0bGVfMy4xLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9uZXR0bGVfMy4xLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q3MTM0ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL25ldHRsZV8zLjEuMS5iYgpAQCAtMCwwICsxLDExIEBACityZXF1aXJlIG5ldHRsZS5pbmMKKworTElDRU5TRSA9ICJMR1BMdjMrIHwgR1BMdjIrIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxFU1NFUnYzO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HdjI7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NlcnBlbnQtZGVjcnlwdC5jO2JlZ2lubGluZT0xNDtlbmRsaW5lPTM2O21kNT1jYTBkMjIwYmM0MTNlMTg0MmVjYzUwNzY5MGNlNDE2ZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zZXJwZW50LXNldC1rZXkuYztiZWdpbmxpbmU9MTQ7ZW5kbGluZT0zNjttZDU9Y2EwZDIyMGJjNDEzZTE4NDJlY2M1MDc2OTBjZTQxNmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiNDBmYTg4ZGMzMmYzN2ExODJiNmI0MjA5MmViYjE0NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1ZmQ0ZDI1ZDY0ZDhkZGNiODVkMGQ4OTc1NzJhZjczYjA1YjRkMTYzYzZjYzQ5NDM4YTViZmJiOGZmMjkzZDRjIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ucHRoL25wdGgvcGtnY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ucHRoL25wdGgvcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YTEyZTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25wdGgvbnB0aC9wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorQWRkZWQgbnB0aCBwa2djb25maWcgZmlsZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogbnB0aC0xLjEvc3JjL25wdGgucGMuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBucHRoLTEuMS9zcmMvbnB0aC5wYy5pbgorQEAgLTAsMCArMSwxMCBAQAorK3ByZWZpeD1AcHJlZml4QAorK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKytpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorKworK05hbWU6IG5wdGgKKytEZXNjcmlwdGlvbjogYSBuZXcgcG9ydGFibGUgcG9zaXggdGhyZWFkaW5nIGxpYnJhcnkKKytWZXJzaW9uOiBAVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbG5wdGggLWxwdGhyZWFkCisrQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KK0luZGV4OiBucHRoLTEuMS9zcmMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBucHRoLTEuMS5vcmlnL3NyYy9NYWtlZmlsZS5hbQorKysrIG5wdGgtMS4xL3NyYy9NYWtlZmlsZS5hbQorQEAgLTI3LDggKzI3LDEwIEBACisgIyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgCisgIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluCisrcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworK3BrZ2NvbmZpZ19EQVRBID0gbnB0aC5wYworIAorLUVYVFJBX0RJU1QgPSBsaWJucHRoLnZlcnMKKytFWFRSQV9ESVNUID0gbGlibnB0aC52ZXJzIG5wdGgucGMKKyAjCSAgICAgdmVyc2lvbmluZm8ucmMuaW4KKyBub2Rpc3RfaW5jbHVkZV9IRUFERVJTID0gbnB0aC5oCisgCitJbmRleDogbnB0aC0xLjEvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbnB0aC0xLjEub3JpZy9jb25maWd1cmUuYWMKKysrKyBucHRoLTEuMS9jb25maWd1cmUuYWMKK0BAIC0zMzcsNiArMzM3LDcgQEAgc3JjL01ha2VmaWxlCisgdzMyL01ha2VmaWxlCisgdGVzdHMvTWFrZWZpbGVdKQorIEFDX0NPTkZJR19GSUxFUyhucHRoLWNvbmZpZywgY2htb2QgK3ggbnB0aC1jb25maWcpCisrQUNfQ09ORklHX0ZJTEVTKFtzcmMvbnB0aC5wY10pCisgQUNfT1VUUFVUCisgCisgZWNobyAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25wdGgvbnB0aF8xLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25wdGgvbnB0aF8xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIzOTYyZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnB0aC9ucHRoXzEuMi5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIk5ldyBHTlUgUG9ydGFibGUgVGhyZWFkcyBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnVwZy5vcmcvc29mdHdhcmUvcHRoLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTEdQTHYzKyAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiXAorICAgIGZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZVwKKyAgICBmaWxlOi8vQ09QWUlORy5MRVNTRVI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2XAorICAgICIKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvbnB0aC9ucHRoLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyMjZiYWM3Mzc0Yjk0NjZjNmVjMjZiMWMzNGRhYjg0NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2ZGRiZGRkYjJjZjQ5YTQ3MjNmOWQxYWQ2NTYzYzQ4MGQ2NzYwZGNiNjNjYjc3MjZiOGZjM2JjMmUxYjZjMDhhIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L25wdGgtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQKKworRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYm5wdGguc28uKiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L25wdGgtY29uZmlnIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvZml4LWJ1aWxkLW9uLXg4Nl82NC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByL2ZpeC1idWlsZC1vbi14ODZfNjQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJiNzI1OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByL2ZpeC1idWlsZC1vbi14ODZfNjQucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorRml4IGJ1aWxkIGZhaWx1cmUgb24geDg2XzY0CisKK1doZW4gdGhlIHRhcmdldF9jcHUgaXMgeDg2XzY0LCB3ZSBzaG91bGQgYXNzdW1lIHRoYXQgdGhlIHBrZyB1c2VzIDY0Yml0LAorb25seSBpZiBVU0VfTjMyIGlzIHNldCwgd2UgY2FuIGFzc3VtZSB0aGF0IHRoZSBwa2cgdXNlcyAzMmJpdC4gSXQgdXNlZCBhCitvcHBvc2l0ZSBsb2dpYyBiZWZvcmUuCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNvbmZpZ3VyZS5pbiB8ICAgMTIgKysrKysrLS0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK0luZGV4OiBuc3ByL2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG5zcHIub3JpZy9jb25maWd1cmUuaW4KKysrKyBuc3ByL2NvbmZpZ3VyZS5pbgorQEAgLTE4NzUsMjggKzE4NzUsMjQgQEAgdG9vbHMgYXJlIHNlbGVjdGVkIGR1cmluZyB0aGUgWGNvZGUvRGV2ZQorICAgICAgICAgUFJfTURfQVNGSUxFUz1vc19MaW51eF9pYTY0LnMKKyAgICAgICAgIDs7CisgICAgIHg4Nl82NCkKKy0gICAgICAgIGlmIHRlc3QgLW4gIiRVU0VfNjQiOyB0aGVuCistICAgICAgICAgICAgUFJfTURfQVNGSUxFUz1vc19MaW51eF94ODZfNjQucworLSAgICAgICAgZWxpZiB0ZXN0IC1uICIkVVNFX1gzMiI7IHRoZW4KKysgICAgICAgIGlmIHRlc3QgLW4gIiRVU0VfWDMyIjsgdGhlbgorKyAgICAgICAgICAgIEFDX0RFRklORShpMzg2KQorICAgICAgICAgICAgIFBSX01EX0FTRklMRVM9b3NfTGludXhfeDg2XzY0LnMKKyAgICAgICAgICAgICBDQz0iJENDIC1teDMyIgorICAgICAgICAgICAgIENYWD0iJENYWCAtbXgzMiIKKyAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICBBQ19ERUZJTkUoaTM4NikKKy0gICAgICAgICAgICBQUl9NRF9BU0ZJTEVTPW9zX0xpbnV4X3g4Ni5zCistICAgICAgICAgICAgQ0M9IiRDQyAtbTMyIgorLSAgICAgICAgICAgIENYWD0iJENYWCAtbTMyIgorKyAgICAgICAgICAgIFBSX01EX0FTRklMRVM9b3NfTGludXhfeDg2XzY0LnMKKyAgICAgICAgIGZpCisgICAgICAgICA7OworICAgICBwcGN8cG93ZXJwYykKKyAgICAgICAgIFBSX01EX0FTRklMRVM9b3NfTGludXhfcHBjLnMKKyAgICAgICAgIDs7CisgICAgIHBvd2VycGM2NCkKKy0gICAgICAgIGlmIHRlc3QgLW4gIiRVU0VfNjQiOyB0aGVuCisrICAgICAgICBpZiB0ZXN0IC1uICIkVVNFX04zMiI7IHRoZW4KKysgICAgICAgICAgICBQUl9NRF9BU0ZJTEVTPW9zX0xpbnV4X3BwYy5zCisrICAgICAgICBlbHNlCisgICAgICAgICAgICAgQ0M9IiRDQyAtbTY0IgorICAgICAgICAgICAgIENYWD0iJENYWCAtbTY0IgorLSAgICAgICAgZWxzZQorLSAgICAgICAgICAgIFBSX01EX0FTRklMRVM9b3NfTGludXhfcHBjLnMKKyAgICAgICAgIGZpCisgICAgICAgICA7OworICAgICBtNjhrKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvbnNwci5wYy5pbiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByL25zcHIucGMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM3ZDBiYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByL25zcHIucGMuaW4KQEAgLTAsMCArMSwxMSBAQAorb3NfbGlicz0tbHB0aHJlYWQgLWxkbAorcHJlZml4PU9FUFJFRklYCitleGVjX3ByZWZpeD1PRUVYRUNQUkVGSVgKK2xpYmRpcj1PRUxJQkRJUgoraW5jbHVkZWRpcj1PRUlOQ0RJUgorCitOYW1lOiBOU1BSCitEZXNjcmlwdGlvbjogVGhlIE5ldHNjYXBlIFBvcnRhYmxlIFJ1bnRpbWUKK1ZlcnNpb246IDQuOS41CitMaWJzOiAtTCR7bGliZGlyfSAtbHBsZHM0IC1scGxjNCAtbG5zcHI0IC1scHRocmVhZCAtbGRsCitDZmxhZ3M6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci9yZW1vdmUtcnBhdGgtZnJvbS10ZXN0cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByL3JlbW92ZS1ycGF0aC1mcm9tLXRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZTc4NTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci9yZW1vdmUtcnBhdGgtZnJvbS10ZXN0cy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitBdXRob3I6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KK0RhdGU6ICAgVGh1IEZlYiA5IDAwOjAzOjM4IDIwMTIgKzAyMDAKKworQXZvaWQgUUEgd2FybmluZ3MgYnkgcmVtb3ZpbmcgaGFyZGNvZGVkIHJwYXRoIGZyb20gYmluYXJpZXMuCisKK1suLi5dCitXQVJOSU5HOiBRQSBJc3N1ZTogcGFja2FnZSBuc3ByIGNvbnRhaW5zIGJhZCBSUEFUSCB7YnVpbGRkaXJ9L3RtcC93b3JrL2FybXY1dGUtcG9reS1saW51eC1nbnVlYWJpL25zcHItNC44LjktcjEvbnNwci00LjguOS9tb3ppbGxhL25zcHJwdWIvcHIvdGVzdHMvLi4vLi4vZGlzdC9saWIKK2luIGZpbGUge2J1aWxkZGlyfS90bXAvd29yay9hcm12NXRlLXBva3ktbGludXgtZ251ZWFiaS9uc3ByLTQuOC45LXIxL3BhY2thZ2VzLXNwbGl0L25zcHIvdXNyL2xpYi9uc3ByL3Rlc3RzL211bHRpd2FpdAorWy4uLl0KKworU2lnbmVkLW9mZi1ieTogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBuc3ByLTQuOC45L21vemlsbGEvbnNwcnB1Yi9wci90ZXN0cy9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG5zcHJwdWIub3JpZy9wci90ZXN0cy9NYWtlZmlsZS5pbgkyMDEyLTAyLTExIDAwOjAxOjEwLjQ3NjIyMDUwNSArMDIwMAorKysrIG5zcHJwdWIvcHIvdGVzdHMvTWFrZWZpbGUuaW4JMjAxMi0wMi0xMCAyMzo1Nzo0MC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zNzksNyArMzc5LDcgQEAKKyBlbmRpZgorIAorIGlmZXEgKCwkKGZpbHRlci1vdXQgTGludXggR05VIEdOVV8lLCQoT1NfQVJDSCkpKQorLSAgICBMRE9QVFMgKz0gLVhsaW5rZXIgLXJwYXRoICQoQUJTT0xVVEVfTElCX0RJUikKKysgICAgTERPUFRTICs9IC1YbGlua2VyCisgICAgIGlmZXEgKCQoVVNFX1BUSFJFQURTKSwxKQorICAgICAgICAgRVhUUkFfTElCUyA9IC1scHRocmVhZAorICAgICBlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvcmVtb3ZlLXNyY2Rpci1mcm9tLWNvbmZpZ3VyZS1pbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByL3JlbW92ZS1zcmNkaXItZnJvbS1jb25maWd1cmUtaW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRlNzE1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByL3JlbW92ZS1zcmNkaXItZnJvbS1jb25maWd1cmUtaW4ucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAordGhlICRzcmNkaXIgaXMgbm90IGRlZmluZWQgYXQgdGhlIHRpbWUgb2YgZ251LWNvbmZpZ3VyaXplLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLUNvcmUgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IG5zcHIvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbnNwci5vcmlnL2NvbmZpZ3VyZS5pbgorKysrIG5zcHIvY29uZmlndXJlLmluCitAQCAtOCw3ICs4LDcgQEAgQUNfUFJFUkVRKDIuNjEpCisgQUNfSU5JVAorIEFDX0NPTkZJR19TUkNESVIoW3ByL2luY2x1ZGUvbnNwci5oXSkKKyAKKy1BQ19DT05GSUdfQVVYX0RJUigke3NyY2Rpcn0vYnVpbGQvYXV0b2NvbmYpCisrQUNfQ09ORklHX0FVWF9ESVIoYnVpbGQvYXV0b2NvbmYpCisgQUNfQ0FOT05JQ0FMX1RBUkdFVAorIAorIGRubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHJfNC4xMC44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHJfNC4xMC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NDk5NGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwcl80LjEwLjguYmIKQEAgLTAsMCArMSwxNzYgQEAKK1NVTU1BUlkgPSAiTmV0c2NhcGUgUG9ydGFibGUgUnVudGltZSBMaWJyYXJ5IgorSE9NRVBBR0UgPSAgImh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvbnNwci8iCitMSUNFTlNFID0gIkdQTC0yLjAgfCBNUEwtMi4wIHwgTEdQTC0yLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9jb25maWd1cmUuaW47YmVnaW5saW5lPTM7ZW5kbGluZT02O21kNT05MGMyZmRlZTM4ZTQ1ZDYzMDJhYmNmZTQ3NWM4YjVjNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS5pbjtiZWdpbmxpbmU9NDtlbmRsaW5lPTM4O21kNT1iZWRhMWRiYjk4YTUxNWY1NTdkM2U1OGVmMDZiY2E5OSIKK1NFQ1RJT04gPSAibGlicy9uZXR3b3JrIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5tb3ppbGxhLm9yZy9wdWIvbW96aWxsYS5vcmcvbnNwci9yZWxlYXNlcy92JHtQVn0vc3JjL25zcHItJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZS1ycGF0aC1mcm9tLXRlc3RzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1idWlsZC1vbi14ODZfNjQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXNyY2Rpci1mcm9tLWNvbmZpZ3VyZS1pbi5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJICs9ICJmaWxlOi8vbnNwci5wYy5pbiIKKworU1JDX1VSSVttZDVzdW1dID0gIjhkN2M1YmQwYTViMGE3ZDBlNzA1YmU2NjQ3OTAzMGEwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUwN2VhNTdjNTI1YzBjNTI0ZGFlNDg1N2E2NDJiNGVmNWM5ZDc5NTUxODc1NGM3ZjgzNDIyZDIyZmU1NDRhMTUiCisKK1MgPSAiJHtXT1JLRElSfS9uc3ByLSR7UFZ9L25zcHIiCisKK1JERVBFTkRTXyR7UE59LWRldiArPSAicGVybCIKK1RBUkdFVF9DQ19BUkNIICs9ICIke0xERkxBR1N9IgorCitURVNUUyA9ICIgXAorICAgIGFjY2VwdCBcCisgICAgYWNjZXB0cmVhZCBcCisgICAgYWNjZXB0cmVhZGVtdSBcCisgICAgYWZmaW5pdHkgXAorICAgIGFsYXJtIFwKKyAgICBhbm9uZm0gXAorICAgIGF0b21pYyBcCisgICAgYXR0YWNoIFwKKyAgICBiaWdmaWxlIFwKKyAgICBjbGVhbnVwIFwKKyAgICBjbHRzcnYgIFwKKyAgICBjb25jdXIgXAorICAgIGN2YXIgXAorICAgIGN2YXIyIFwKKyAgICBkbGx0ZXN0IFwKKyAgICBkdG9hIFwKKyAgICBlcnJjb2RlcyBcCisgICAgZXhpdCBcCisgICAgZmRjYWNoIFwKKyAgICBmaWxlaW8gXAorICAgIGZvcmVpZ24gXAorICAgIGZvcm1hdHRtIFwKKyAgICBmc3luYyBcCisgICAgZ2V0aG9zdCBcCisgICAgZ2V0cHJvdG8gXAorICAgIGkybCBcCisgICAgaW5pdGNsayBcCisgICAgaW5ydmFsIFwKKyAgICBpbnN0cnVtdCBcCisgICAgaW50cmlvIFwKKyAgICBpbnRydXB0IFwKKyAgICBpb190aW1lb3V0IFwKKyAgICBpb2NvbnRociBcCisgICAgam9pbiBcCisgICAgam9pbmtrIFwKKyAgICBqb2lua3UgXAorICAgIGpvaW51ayBcCisgICAgam9pbnV1IFwKKyAgICBsYXllciBcCisgICAgbGF6eWluaXQgXAorICAgIGxpYmZpbGVuYW1lIFwKKyAgICBsbHRlc3QgXAorICAgIGxvY2sgXAorICAgIGxvY2tmaWxlIFwKKyAgICBsb2dmaWxlIFwKKyAgICBsb2dnZXIgXAorICAgIG1hbnlfY3YgXAorICAgIG11bHRpd2FpdCBcCisgICAgbmFtZXNobTEgXAorICAgIG5ibGF5ZXIgXAorICAgIG5vbmJsb2NrIFwKKyAgICBudGlvdG8gXAorICAgIG50b2ggXAorICAgIG9wXzJsb25nIFwKKyAgICBvcF9leGNsIFwKKyAgICBvcF9maWxuZiBcCisgICAgb3BfZmlsb2sgXAorICAgIG9wX25vZmlsIFwKKyAgICBwYXJlbnQgXAorICAgIHBhcnNldG0gXAorICAgIHBlZWsgXAorICAgIHBlcmYgXAorICAgIHBpcGVwaW5nIFwKKyAgICBwaXBlcGluZzIgXAorICAgIHBpcGVzZWxmIFwKKyAgICBwb2xsX25tIFwKKyAgICBwb2xsX3RvIFwKKyAgICBwb2xsYWJsZSBcCisgICAgcHJmdGVzdCBcCisgICAgcHJpbWJsb2sgXAorICAgIHByb3ZpZGVyIFwKKyAgICBwcnBvbGxtbCBcCisgICAgcmFuZmlsZSBcCisgICAgcmFuZHNlZWQgXAorICAgIHJlaW5pdCBcCisgICAgcndsb2NrdGVzdCBcCisgICAgc2VsX3NwZCBcCisgICAgc2VsY3RfZXIgXAorICAgIHNlbGN0X25tIFwKKyAgICBzZWxjdF90byBcCisgICAgc2VsaW50ciBcCisgICAgc2VtYSBcCisgICAgc2VtYWVyciBcCisgICAgc2VtYXBpbmcgXAorICAgIHNlbmR6bGYgXAorICAgIHNlcnZlcl90ZXN0IFwKKyAgICBzZXJ2cl9rayBcCisgICAgc2VydnJfdWsgXAorICAgIHNlcnZyX2t1IFwKKyAgICBzZXJ2cl91dSBcCisgICAgc2hvcnRfdGhyZWFkIFwKKyAgICBzaWdwaXBlIFwKKyAgICBzb2NrZXQgXAorICAgIHNvY2tvcHQgXAorICAgIHNvY2twaW5nIFwKKyAgICBzcHJpbnRmIFwKKyAgICBzdGFjayBcCisgICAgc3RkaW8gXAorICAgIHN0cjJhZGRyIFwKKyAgICBzdHJvZCBcCisgICAgc3dpdGNoIFwKKyAgICBzeXN0ZW0gXAorICAgIHRlc3RiaXQgXAorICAgIHRlc3RmaWxlIFwKKyAgICB0aHJlYWRzIFwKKyAgICB0aW1lbWFjIFwKKyAgICB0aW1ldGVzdCBcCisgICAgdHBkIFwKKyAgICB1ZHBzcnYgXAorICAgIHZlcmNoZWNrIFwKKyAgICB2ZXJzaW9uIFwKKyAgICB3cml0ZXYgXAorICAgIHhub3RpZnkgXAorICAgIHplcm9sZW4iCisKK1BSID0gInIxIgorCitpbmhlcml0IGF1dG90b29scworCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisJb2VfcnVubWFrZSBDUk9TU19DT01QSUxFPTEgQ0ZMQUdTPSItRFhQX1VOSVgiIExERkxBR1M9IiIgQ0M9Z2NjIC1DIGNvbmZpZyBleHBvcnQKK30KKworZG9fY29tcGlsZV9hcHBlbmQoKSB7CisJb2VfcnVubWFrZSAtQyBwci90ZXN0cworfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1EICR7V09SS0RJUn0vbnNwci5wYy5pbiAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9uc3ByLnBjCisgICAgc2VkIC1pIHM6T0VQUkVGSVg6JHtwcmVmaXh9OmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNwci5wYworICAgIHNlZCAtaSBzOk9FTElCRElSOiR7bGliZGlyfTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcHIucGMKKyAgICBzZWQgLWkgczpPRUlOQ0RJUjoke2luY2x1ZGVkaXJ9OmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNwci5wYworICAgIHNlZCAtaSBzOk9FRVhFQ1BSRUZJWDoke2V4ZWNfcHJlZml4fTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcHIucGMKKworICAgIG1rZGlyIC1wICR7RH0ke2xpYmRpcn0vbnNwci90ZXN0cworICAgIGluc3RhbGwgLW0gMDc1NSAke1N9L3ByL3Rlc3RzL3J1bnRlc3RzLnBsICR7RH0ke2xpYmRpcn0vbnNwci90ZXN0cworICAgIGluc3RhbGwgLW0gMDc1NSAke1N9L3ByL3Rlc3RzL3J1bnRlc3RzLnNoICR7RH0ke2xpYmRpcn0vbnNwci90ZXN0cworICAgIGNkICR7Qn0vcHIvdGVzdHMKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtURVNUU30gJHtEfSR7bGliZGlyfS9uc3ByL3Rlc3RzCisKKyAgICAjIGRlbGV0ZSBjb21waWxlLWV0LnBsIGFuZCBwZXJyLnByb3BlcnRpZXMgZnJvbSAke2JpbmRpcn0gYmVjYXVzZSB0aGVzZSBhcmUKKyAgICAjIG9ubHkgdXNlZCB0byBnZW5lcmF0ZSBwcmVyci5jIGFuZCBwcmVyci5oIGZpbGVzIGZyb20gcHJlcnIuZXQgYXQgY29tcGlsZQorICAgICMgdGltZQorICAgIHJtICR7RH0ke2JpbmRpcn0vY29tcGlsZS1ldC5wbCAke0R9JHtiaW5kaXJ9L3ByZXJyLnByb3BlcnRpZXMKK30KKworRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYiouc28iCitGSUxFU18ke1BOfS1kZXYgPSAiJHtiaW5kaXJ9LyogJHtsaWJkaXJ9L25zcHIvdGVzdHMvKiAke2xpYmRpcn0vcGtnY29uZmlnIFwKKyAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9LyogJHtkYXRhZGlyfS9hY2xvY2FsLyogIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vbnNwci90ZXN0cy8uZGVidWcvKiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MtbXlob3N0bmFtZS9uc3MtbXlob3N0bmFtZV8wLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy1teWhvc3RuYW1lL25zcy1teWhvc3RuYW1lXzAuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmNlOWU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MtbXlob3N0bmFtZS9uc3MtbXlob3N0bmFtZV8wLjMuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJOYW1lIFNlcnZpY2UgU3dpdGNoIG1vZHVsZSBmb3IgcmVzb2x2aW5nIHRoZSBsb2NhbCBob3N0bmFtZSIKK0RFU0NSSVBUSU9OID0gInBsdWdpbiBmb3IgdGhlIEdOVSBOYW1lIFNlcnZpY2UgU3dpdGNoIChOU1MpIGZ1bmN0aW9uYWxpdHkgb2YgXAordGhlIEdOVSBDIExpYnJhcnkgKGdsaWJjKSBwcm92aWRpbmcgaG9zdCBuYW1lIHJlc29sdXRpb24gZm9yIHRoZSBsb2NhbGx5IFwKK2NvbmZpZ3VyZWQgc3lzdGVtIGhvc3RuYW1lIGFzIHJldHVybmVkIGJ5IGdldGhvc3RuYW1lKDIpLiIKK0hPTUVQQUdFID0gImh0dHA6Ly8wcG9pbnRlci5kZS9sZW5uYXJ0L3Byb2plY3RzL25zcy1teWhvc3RuYW1lLyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSIKKworU1JDX1VSSSA9ICJodHRwOi8vMHBvaW50ZXIuZGUvbGVubmFydC9wcm9qZWN0cy9uc3MtbXlob3N0bmFtZS9uc3MtbXlob3N0bmFtZS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkNGFiOWFjMzZjMDUzYWI4ZmI4MzZkYjFjYmQ0YTQ4ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyYmE3NDRlYThkNTc4ZDFjNTdjODU4ODRlOTRhMzA0MmVlMTc4NDNhNTI5NDQzNGQzYTdmNmM0ZDY3ZTdjYWYyIgorCitpbmhlcml0IGF1dG90b29scyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgc3lzdGVtZCBoYXMgaXRzIG93biBjb3B5IG9mIG5zcy1teWhvc3RuYW1lCitDT05GTElDVF9ESVNUUk9fRkVBVFVSRVMgPSAic3lzdGVtZCIKKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlzZWQgLWUgJy9eaG9zdHM6L3MvXHMqXDxteWhvc3RuYW1lXD4vLycgXAorCQktZSAncy9cKF5ob3N0czouKlwpXChcPGZpbGVzXD5cKVwoLipcKVwoXDxkbnNcPlwpXCguKlwpL1wxXDIgbXlob3N0bmFtZSBcM1w0XDUvJyBcCisJCS1pICREJHtzeXNjb25mZGlyfS9uc3N3aXRjaC5jb25mCit9CisKK3BrZ19wcmVybV8ke1BOfSAoKSB7CisJc2VkIC1lICcvXmhvc3RzOi9zL1xzKlw8bXlob3N0bmFtZVw+Ly8nIFwKKwkJLWUgJy9eaG9zdHM6L3MvXHMqbXlob3N0bmFtZS8vJyBcCisJCS1pICREJHtzeXNjb25mZGlyfS9uc3N3aXRjaC5jb25mCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLWZpeC1pbmNvcnJlY3Qtc2hlYmFuZy1vZi1wZXJsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy1maXgtaW5jb3JyZWN0LXNoZWJhbmctb2YtcGVybC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDc1OTRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy1maXgtaW5jb3JyZWN0LXNoZWJhbmctb2YtcGVybC5wYXRjaApAQCAtMCwwICsxLDExMCBAQAorbnNzOiBmaXggaW5jb3JyZWN0IHNoZWJhbmcgb2YgcGVybAorCitSZXBsYWNlIGluY29ycmVjdCBzaGViYW5nIG9mIHBlcmwgd2l0aCBgIyEvdXNyL2Jpbi9lbnYgcGVybCcuCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbnNzL2NtZC9zbWltZXRvb2xzL3NtaW1lICB8IDIgKy0KKyBuc3MvY29yZWNvbmYvY3BkaXN0LnBsICAgIHwgMiArLQorIG5zcy9jb3JlY29uZi9pbXBvcnQucGwgICAgfCAyICstCisgbnNzL2NvcmVjb25mL2puaXJlZ2VuLnBsICB8IDIgKy0KKyBuc3MvY29yZWNvbmYvb3V0b2ZkYXRlLnBsIHwgMiArLQorIG5zcy9jb3JlY29uZi9yZWxlYXNlLnBsICAgfCAyICstCisgbnNzL2NvcmVjb25mL3ZlcnNpb24ucGwgICB8IDIgKy0KKyBuc3MvdGVzdHMvY2xlYW5fdGJ4ICAgICAgIHwgMiArLQorIG5zcy90ZXN0cy9wYXRoX3VuaXEgICAgICAgfCAyICstCisgOSBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9uc3MvY21kL3NtaW1ldG9vbHMvc21pbWUgYi9uc3MvY21kL3NtaW1ldG9vbHMvc21pbWUKKy0tLSBhL25zcy9jbWQvc21pbWV0b29scy9zbWltZQorKysrIGIvbnNzL2NtZC9zbWltZXRvb2xzL3NtaW1lCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvbG9jYWwvYmluL3BlcmwKKysjIS91c3IvYmluL2VudiBwZXJsCisgCisgIyBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisgIyBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCitkaWZmIC0tZ2l0IGEvbnNzL2NvcmVjb25mL2NwZGlzdC5wbCBiL25zcy9jb3JlY29uZi9jcGRpc3QucGwKK2luZGV4IDgwMGVkZmIuLjY1MjE4N2YgMTAwNzU1CistLS0gYS9uc3MvY29yZWNvbmYvY3BkaXN0LnBsCisrKysgYi9uc3MvY29yZWNvbmYvY3BkaXN0LnBsCitAQCAtMSw0ICsxLDQgQEAKKy0jISAvdXNyL2xvY2FsL2Jpbi9wZXJsCisrIyEvdXNyL2Jpbi9lbnYgcGVybAorICMKKyAjIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyAjIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKK2RpZmYgLS1naXQgYS9uc3MvY29yZWNvbmYvaW1wb3J0LnBsIGIvbnNzL2NvcmVjb25mL2ltcG9ydC5wbAoraW5kZXggZGQyZDE3Ny4uNDI4ZWFhNSAxMDA3NTUKKy0tLSBhL25zcy9jb3JlY29uZi9pbXBvcnQucGwKKysrKyBiL25zcy9jb3JlY29uZi9pbXBvcnQucGwKK0BAIC0xLDQgKzEsNCBAQAorLSMhIC91c3IvbG9jYWwvYmluL3BlcmwKKysjIS91c3IvYmluL2VudiBwZXJsCisgIworICMgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworICMgTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworZGlmZiAtLWdpdCBhL25zcy9jb3JlY29uZi9qbmlyZWdlbi5wbCBiL25zcy9jb3JlY29uZi9qbmlyZWdlbi5wbAoraW5kZXggMjAzOTE4MC4uNWY0ZjY5YyAxMDA3NTUKKy0tLSBhL25zcy9jb3JlY29uZi9qbmlyZWdlbi5wbAorKysrIGIvbnNzL2NvcmVjb25mL2puaXJlZ2VuLnBsCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvbG9jYWwvYmluL3BlcmwKKysjIS91c3IvYmluL2VudiBwZXJsCisgIworICMgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworICMgTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworZGlmZiAtLWdpdCBhL25zcy9jb3JlY29uZi9vdXRvZmRhdGUucGwgYi9uc3MvY29yZWNvbmYvb3V0b2ZkYXRlLnBsCitpbmRleCAzM2Q4MGJiLi4wMWZjMDk3IDEwMDc1NQorLS0tIGEvbnNzL2NvcmVjb25mL291dG9mZGF0ZS5wbAorKysrIGIvbnNzL2NvcmVjb25mL291dG9mZGF0ZS5wbAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2xvY2FsL2Jpbi9wZXJsCisrIyEvdXNyL2Jpbi9lbnYgcGVybAorICMKKyAjIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyAjIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKK2RpZmYgLS1naXQgYS9uc3MvY29yZWNvbmYvcmVsZWFzZS5wbCBiL25zcy9jb3JlY29uZi9yZWxlYXNlLnBsCitpbmRleCA3Y2RlMTlkLi5iNWRmMmY2IDEwMDc1NQorLS0tIGEvbnNzL2NvcmVjb25mL3JlbGVhc2UucGwKKysrKyBiL25zcy9jb3JlY29uZi9yZWxlYXNlLnBsCitAQCAtMSw0ICsxLDQgQEAKKy0jISAvdXNyL2xvY2FsL2Jpbi9wZXJsCisrIyEvdXNyL2Jpbi9lbnYgcGVybAorICMKKyAjIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyAjIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKK2RpZmYgLS1naXQgYS9uc3MvY29yZWNvbmYvdmVyc2lvbi5wbCBiL25zcy9jb3JlY29uZi92ZXJzaW9uLnBsCitpbmRleCBkMmE0OTQyLi43OTM1OWZlIDEwMDY0NAorLS0tIGEvbnNzL2NvcmVjb25mL3ZlcnNpb24ucGwKKysrKyBiL25zcy9jb3JlY29uZi92ZXJzaW9uLnBsCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3Ivc2Jpbi9wZXJsCisrIyEvdXNyL2Jpbi9lbnYgcGVybAorICMKKyAjIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyAjIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKK2RpZmYgLS1naXQgYS9uc3MvdGVzdHMvY2xlYW5fdGJ4IGIvbnNzL3Rlc3RzL2NsZWFuX3RieAoraW5kZXggNGRlOTU1NS4uYTdkZWY5ZiAxMDA3NTUKKy0tLSBhL25zcy90ZXN0cy9jbGVhbl90YngKKysrKyBiL25zcy90ZXN0cy9jbGVhbl90YngKK0BAIC0xLDQgKzEsNCBAQAorLSMhIC9iaW4vcGVybAorKyMhL3Vzci9iaW4vZW52IHBlcmwKKyAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICMKK2RpZmYgLS1naXQgYS9uc3MvdGVzdHMvcGF0aF91bmlxIGIvbnNzL3Rlc3RzL3BhdGhfdW5pcQoraW5kZXggZjI5ZjYwYS4uMDhmYmZmYSAxMDA3NTUKKy0tLSBhL25zcy90ZXN0cy9wYXRoX3VuaXEKKysrKyBiL25zcy90ZXN0cy9wYXRoX3VuaXEKK0BAIC0xLDQgKzEsNCBAQAorLSMhIC9iaW4vcGVybAorKyMhL3Vzci9iaW4vZW52IHBlcmwKKyAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy1maXgtbnNpbnN0YWxsLWJ1aWxkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy1maXgtbnNpbnN0YWxsLWJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NmRlMDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLWZpeC1uc2luc3RhbGwtYnVpbGQucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRml4IG5zcyBtdWx0aWxpYiBidWlsZCBvbiBvcGVuU1VTRSAxMS54IDMyYml0CisKK1doaWxlIGJ1aWxkaW5nIGxpYjY0LW5zcyBvbiBvcGVuU1VTRSAxMS54IDMyYml0LCB0aGUgbnNpbnN0YWxsIHdpbGwKK2ZhaWwgd2l0aCBlcnJvcjoKKworKiBuc2luc3RhbGwuYzoxOjA6IHNvcnJ5LCB1bmltcGxlbWVudGVkOiA2NC1iaXQgbW9kZSBub3QgY29tcGlsZWQKKworSXQgY2F1c2VkIGJ5IHRoZSAnLW02NCcgb3B0aW9uIHdoaWNoIHBhc3NlZCB0byBob3N0IGdjYy4KKworVGhlIG5zaW5zdGFsbCB3YXMgYnVpbHQgZmlyc3Qgd2hpbGUgbnNzIHN0YXJ0aW5nIHRvIGJ1aWxkLCBpdCBvbmx5IHJ1bnMKK29uIGhvc3QgdG8gaW5zdGFsbCBidWlsdCBmaWxlcywgaXQgZG9lc24ndCBuZWVkIGFueSBjcm9zcy1jb21wbGluZyBvcgorbXVsdGlsaWIgYnVpbGQgb3B0aW9ucy4gSnVzdCBjbGVhbiB0aGUgQVJDSEZMQUcgYW5kIExERkxBR1MgdG8gZml4IHRoaXMKK2Vycm9yLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2RpZmYgLS1naXQgYS9uc3MvY29yZWNvbmYvbnNpbnN0YWxsL01ha2VmaWxlIGIvbnNzL2NvcmVjb25mL25zaW5zdGFsbC9NYWtlZmlsZQoraW5kZXggMTg1MGJjYi4uNWFlZTg0ZiAxMDA2NDQKKy0tLSBhL25zcy9jb3JlY29uZi9uc2luc3RhbGwvTWFrZWZpbGUKKysrKyBiL25zcy9jb3JlY29uZi9uc2luc3RhbGwvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCwxMiBAQCBJTlRFUk5BTF9UT09MUyAgPSAxCisgCisgaW5jbHVkZSAkKERFUFRIKS9jb3JlY29uZi9jb25maWcubWsKKyAKKysjIG5zaW5zdGFsbCBpcyB1bmZpdCBmb3IgY3Jvc3MtY29tcGlsaW5nL211bHRpbGliLWJ1aWxkIHNpbmNlIGl0IHdhcworKyMgYWx3YXlzIHJ1biBvbiBsb2NhbCBob3N0IHRvIGluc3RhbGwgYnVpbHQgZmlsZXMuIFRoaXMgY2hhbmdlIGludGVuZHMKKysjIHRvIGNsZWFuIHRoZSAnLW02NCcgZnJvbSBBUkNIRkxBRyBhbmQgTERGTEFHUy4KKytBUkNIRkxBRyA9CisrTERGTEFHUyA9CisrCisgaWZlcSAoLCQoZmlsdGVyLW91dCBPUzIgV0lOJSwkKE9TX1RBUkdFVCkpKQorIFBST0dSQU0JCT0KKyBlbHNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLWZpeC1zdXBwb3J0LWNyb3NzLWNvbXBpbGluZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3MtZml4LXN1cHBvcnQtY3Jvc3MtY29tcGlsaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYjM1NTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLWZpeC1zdXBwb3J0LWNyb3NzLWNvbXBpbGluZy5wYXRjaApAQCAtMCwwICsxLDcxIEBACituc3M6IGZpeCBzdXBwb3J0IGNyb3NzIGNvbXBpbGluZworCitMZXQgc29tZSBtYWtlIHZhcmlhYmxlcyBiZSBhc3NpZ25lZCBmcm9tIG91dHNpZGUgbWFrZWZpbGUuCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKy0tLQorIG5zcy9jb3JlY29uZi9MaW51eC5tayAgIHwgMTIgKysrKysrKysrKystCisgbnNzL2NvcmVjb25mL2FyY2gubWsgICAgfCAgMiArLQorIG5zcy9saWIvZnJlZWJsL01ha2VmaWxlIHwgIDYgKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbnNzL2NvcmVjb25mL0xpbnV4Lm1rIGIvbnNzL2NvcmVjb25mL0xpbnV4Lm1rCistLS0gYS9uc3MvY29yZWNvbmYvTGludXgubWsKKysrKyBiL25zcy9jb3JlY29uZi9MaW51eC5taworQEAgLTE2LDExICsxNiwyMSBAQCBpZmVxICgkKFVTRV9QVEhSRUFEUyksMSkKKyAJSU1QTF9TVFJBVEVHWSA9IF9QVEgKKyBlbmRpZgorIAorK2lmbmRlZiBDQworIENDCQkJPSBnY2MKKytlbmRpZgorKworK2lmZGVmIENYWAorK0NDQwkJCT0gJChDWFgpCisrZWxzZQorIENDQwkJCT0gZysrCisrZW5kaWYKKysKKytpZm5kZWYgUkFOTElCCisgUkFOTElCCQkJPSByYW5saWIKKytlbmRpZgorIAorLURFRkFVTFRfQ09NUElMRVIgPSBnY2MKKytERUZBVUxUX0NPTVBJTEVSID0gJChDQykKKyAKKyBpZmVxICgkKE9TX1RBUkdFVCksQW5kcm9pZCkKKyBpZm5kZWYgQU5EUk9JRF9OREsKK2RpZmYgLS1naXQgYS9uc3MvY29yZWNvbmYvYXJjaC5tayBiL25zcy9jb3JlY29uZi9hcmNoLm1rCitpbmRleCA2NTU3MzQ4Li5iNzIyNDEyIDEwMDY0NAorLS0tIGEvbnNzL2NvcmVjb25mL2FyY2gubWsKKysrKyBiL25zcy9jb3JlY29uZi9hcmNoLm1rCitAQCAtMzcsNyArMzcsNyBAQCBPU19URVNUIDo9ICQoc2hlbGwgdW5hbWUgLW0pCisgaWZlcSAoJChPU19URVNUKSxpODZwYykKKyAgICAgT1NfUkVMRUFTRSA6PSAkKHNoZWxsIHVuYW1lIC1yKV8kKE9TX1RFU1QpCisgZWxzZQorLSAgICBPU19SRUxFQVNFIDo9ICQoc2hlbGwgdW5hbWUgLXIpCisrICAgIE9TX1JFTEVBU0UgPz0gJChzaGVsbCB1bmFtZSAtcikKKyBlbmRpZgorIAorICMKK2RpZmYgLS1naXQgYS9uc3MvbGliL2ZyZWVibC9NYWtlZmlsZSBiL25zcy9saWIvZnJlZWJsL01ha2VmaWxlCitpbmRleCAwZDI5M2YxLi42NzhmNTA2IDEwMDY0NAorLS0tIGEvbnNzL2xpYi9mcmVlYmwvTWFrZWZpbGUKKysrKyBiL25zcy9saWIvZnJlZWJsL01ha2VmaWxlCitAQCAtMzYsNiArMzYsMTIgQEAgaWZkZWYgVVNFXzY0CisgCURFRklORVMgKz0gLUROU1NfVVNFXzY0CisgZW5kaWYKKyAKKytpZmVxICgkKE9TX1RFU1QpLG1pcHMpCisraWZuZGVmIFVTRV82NAorKwlERUZJTkVTICs9IC1ETlNfUFRSX0xFXzMyCisrZW5kaWYKKytlbmRpZgorKworIGlmZGVmIFVTRV9BQkkzMl9GUFUKKyAJREVGSU5FUyArPSAtRE5TU19VU0VfQUJJMzJfRlBVCisgZW5kaWYKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLW5vLXJwYXRoLWZvci1jcm9zcy1jb21waWxpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLW5vLXJwYXRoLWZvci1jcm9zcy1jb21waWxpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY2MWRjOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3Mtbm8tcnBhdGgtZm9yLWNyb3NzLWNvbXBpbGluZy5wYXRjaApAQCAtMCwwICsxLDI2IEBACituc3M6bm8gcnBhdGggZm9yIGNyb3NzIGNvbXBpbGluZworCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCistLS0KKyBuc3MvY21kL3BsYXRsaWJzLm1rIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL25zcy9jbWQvcGxhdGxpYnMubWsgYi9uc3MvY21kL3BsYXRsaWJzLm1rCistLS0gYS9uc3MvY21kL3BsYXRsaWJzLm1rCisrKysgYi9uc3MvY21kL3BsYXRsaWJzLm1rCitAQCAtMTgsOSArMTgsOSBAQCBlbmRpZgorIAorIGlmZXEgKCQoT1NfQVJDSCksIExpbnV4KQorIGlmZXEgKCQoVVNFXzY0KSwgMSkKKy1FWFRSQV9TSEFSRURfTElCUyArPSAtV2wsLXJwYXRoLCckJE9SSUdJTi8uLi9saWI2NDovb3B0L3N1bi9wcml2YXRlL2xpYjY0OiQkT1JJR0lOLy4uL2xpYicKKysjRVhUUkFfU0hBUkVEX0xJQlMgKz0gLVdsLC1ycGF0aCwnJCRPUklHSU4vLi4vbGliNjQ6L29wdC9zdW4vcHJpdmF0ZS9saWI2NDokJE9SSUdJTi8uLi9saWInCisgZWxzZQorLUVYVFJBX1NIQVJFRF9MSUJTICs9IC1XbCwtcnBhdGgsJyQkT1JJR0lOLy4uL2xpYjovb3B0L3N1bi9wcml2YXRlL2xpYicKKysjRVhUUkFfU0hBUkVEX0xJQlMgKz0gLVdsLC1ycGF0aCwnJCRPUklHSU4vLi4vbGliOi9vcHQvc3VuL3ByaXZhdGUvbGliJworIGVuZGlmCisgZW5kaWYKKyAKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLnBjLmluIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDBmNjM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy5wYy5pbgpAQCAtMCwwICsxLDExIEBACitwcmVmaXg9T0VQUkVGSVgKK2V4ZWNfcHJlZml4PU9FRVhFQ1BSRUZJWAorbGliZGlyPU9FTElCRElSCitpbmNsdWRlZGlyPU9FSU5DRElSCisKK05hbWU6IE5TUworRGVzY3JpcHRpb246IE5ldHdvcmsgU2VjdXJpdHkgU2VydmljZXMKK1ZlcnNpb246ICVOU1NfVkVSU0lPTiUKK1JlcXVpcmVzOiBuc3ByID49ICVOU1BSX1ZFUlNJT04lCitMaWJzOiAtbHNzbDMgLWxzbWltZTMgLWxuc3MzIC1sc29mdG9rbjMgLWxuc3N1dGlsMworQ2ZsYWdzOiAtSU9FSU5DRElSCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3Mvc2lnbmxpYnMuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3Mvc2lnbmxpYnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc0ZTQ5OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9zaWdubGlicy5zaApAQCAtMCwwICsxLDIwIEBACisjIS9iaW4vc2gKKworIyBzaWdubGlicy5zaAorIworIyAoYykyMDEwIFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgorIworIyByZWdlbmVyYXRlcyB0aGUgLmNoayBmaWxlcyBmb3IgdGhlIE5TUyBsaWJyYXJpZXMgdGhhdCByZXF1aXJlIGl0CisjIHNpbmNlIHRoZSBvbmVzIHRoYXQgYXJlIGJ1aWx0IGhhdmUgaW5jb3JyZWN0IGNoZWNrc3VtcyB0aGF0IHdlcmUKKyMgY2FsY3VsYXRlZCBvbiB0aGUgaG9zdCB3aGVyZSB0aGV5IHJlYWxseSBuZWVkIHRvIGJlIGRvbmUgb24gdGhlCisjIHRhcmdldAorCitDSEtfRklMRVM9YGxzIC9saWIqLyouY2hrIC91c3IvbGliKi8qLmNoayAyPi9kZXYvbnVsbGAKK1NJR05fQklOQVJZPWB3aGljaCBzaGxpYnNpZ25gCitmb3IgSSBpbiAkQ0hLX0ZJTEVTCitkbworICAgICAgIEROPWBkaXJuYW1lICRJYAorICAgICAgIEJOPWBiYXNlbmFtZSAkSSAuY2hrYAorICAgICAgIEZOPSRETi8kQk4uc28KKyAgICAgICAkU0lHTl9CSU5BUlkgLWkgJEZOCitkb25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3NfMy4xOS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzXzMuMTkuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2E0YTFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzXzMuMTkuMi5iYgpAQCAtMCwwICsxLDIyMyBAQAorU1VNTUFSWSA9ICJNb3ppbGxhJ3MgU1NMIGFuZCBUTFMgaW1wbGVtZW50YXRpb24iCitERVNDUklQVElPTiA9ICJOZXR3b3JrIFNlY3VyaXR5IFNlcnZpY2VzIChOU1MpIGlzIGEgc2V0IG9mIGxpYnJhcmllcyBcCitkZXNpZ25lZCB0byBzdXBwb3J0IGNyb3NzLXBsYXRmb3JtIGRldmVsb3BtZW50IG9mIFwKK3NlY3VyaXR5LWVuYWJsZWQgY2xpZW50IGFuZCBzZXJ2ZXIgYXBwbGljYXRpb25zLiBcCitBcHBsaWNhdGlvbnMgYnVpbHQgd2l0aCBOU1MgY2FuIHN1cHBvcnQgU1NMIHYyIGFuZCB2MywgXAorVExTLCBQS0NTIDUsIFBLQ1MgNywgUEtDUyAxMSwgUEtDUyAxMiwgUy9NSU1FLCBYLjUwOSBcCit2MyBjZXJ0aWZpY2F0ZXMsIGFuZCBvdGhlciBzZWN1cml0eSBzdGFuZGFyZHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9zZWN1cml0eS9wa2kvbnNzLyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJNUEwtMi4wIHwgKE1QTC0yLjAgJiBHUEwtMi4wKykgfCAoTVBMLTIuMCAmIExHUEwtMi4xKykiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL25zcy9DT1BZSU5HO21kNT0zYjFlODhlMWI5YzBiNWE0YjI4ODFkNDZjY2UwNmExOCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9uc3MvbGliL2ZyZWVibC9tcGkvZG9jL0xJQ0VOU0U7bWQ1PTQ5MWYxNThkMDlkOTQ4NDY2YWZjZTg1ZDZmMWZlMThmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL25zcy9saWIvZnJlZWJsL21waS9kb2MvTElDRU5TRS1NUEw7bWQ1PTVkNDI1YzhmMzE1N2RiZjIxMmRiMmVjNTNkOWU1MTMyIgorCitTUkNfVVJJID0gIlwKKyAgICBodHRwOi8vZnRwLm1vemlsbGEub3JnL3B1Yi9tb3ppbGxhLm9yZy9zZWN1cml0eS9uc3MvcmVsZWFzZXMvTlNTXzNfMTlfMl9SVE0vc3JjLyR7QlB9LnRhci5neiBcCisgICAgZmlsZTovL25zcy1maXgtc3VwcG9ydC1jcm9zcy1jb21waWxpbmcucGF0Y2ggXAorICAgIGZpbGU6Ly9uc3Mtbm8tcnBhdGgtZm9yLWNyb3NzLWNvbXBpbGluZy5wYXRjaCBcCisgICAgZmlsZTovL25zcy1maXgtaW5jb3JyZWN0LXNoZWJhbmctb2YtcGVybC5wYXRjaCBcCisgICAgZmlsZTovL25zcy1maXgtbnNpbnN0YWxsLWJ1aWxkLnBhdGNoIFwKKyAgICBmaWxlOi8vbnNzLnBjLmluIFwKKyAgICBmaWxlOi8vc2lnbmxpYnMuc2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjAyZmZkMWU4ZThlZjVmODUxMmZhMDJkOGNhOWRiM2QiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTMwNjY2M2U4ZjYxZDg0NDlhZDhjYmNmZmFiNzQzYTYwNGRjZDlmNmYzNDIzMmMyMTA4NDdjNTFkY2UyYzlhZSIKKworaW5oZXJpdCBzaXRlaW5mbworCitERVBFTkRTID0gInNxbGl0ZTMgbnNwciB6bGliIG5zcy1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJzcWxpdGUzLW5hdGl2ZSBuc3ByLW5hdGl2ZSB6bGliLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59LXNtaW1lID0gInBlcmwiCisKK1REID0gIiR7U30vdGVudGF0aXZlLWRpc3QiCitURFMgPSAiJHtTfS90ZW50YXRpdmUtZGlzdC1zdGFnaW5nIgorCitUQVJHRVRfQ0NfQVJDSCArPSAiJHtMREZMQUdTfSIKKworZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKyAgICBleHBvcnQgTlNQUl9JTkNMVURFX0RJUj0ke1NUQUdJTkdfSU5DRElSX05BVElWRX0KKyAgICBleHBvcnQgTlNQUl9MSUJfRElSPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfQorfQorCitkb19jb21waWxlX3ByZXBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworICAgIGV4cG9ydCBMREZMQUdTPSIiCit9CisKK2RvX2NvbXBpbGUoKSB7CisgICAgZXhwb3J0IENST1NTX0NPTVBJTEU9MQorICAgIGV4cG9ydCBOQVRJVkVfQ0M9ImdjYyIKKyAgICBleHBvcnQgQlVJTERfT1BUPTEKKworICAgIGV4cG9ydCBGUkVFQkxfTk9fREVQRU5EPTEKKyAgICBleHBvcnQgRlJFRUJMX0xPV0hBU0g9MQorCisgICAgZXhwb3J0IExJQkRJUj0ke2xpYmRpcn0KKyAgICBleHBvcnQgTU9aSUxMQV9DTElFTlQ9MQorICAgIGV4cG9ydCBOU19VU0VfR0NDPTEKKyAgICBleHBvcnQgTlNTX1VTRV9TWVNURU1fU1FMSVRFPTEKKyAgICBleHBvcnQgTlNTX0VOQUJMRV9FQ0M9MQorCisgICAgZXhwb3J0IE9TX1JFTEVBU0U9My40CisgICAgZXhwb3J0IE9TX1RBUkdFVD1MaW51eAorICAgIGV4cG9ydCBPU19BUkNIPUxpbnV4CisKKyAgICBpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYyIgXTsgdGhlbgorICAgICAgICBPU19URVNUPXBwYworICAgIGVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gInBvd2VycGM2NCIgXTsgdGhlbgorICAgICAgICBPU19URVNUPXBwYzY0CisgICAgZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAibWlwcyIgLW8gIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzZWwiIC1vICIke1RBUkdFVF9BUkNIfSIgPSAibWlwczY0IiAtbyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHM2NGVsIiBdOyB0aGVuCisgICAgICAgIE9TX1RFU1Q9bWlwcworICAgIGVsc2UKKyAgICAgICAgT1NfVEVTVD0iJHtUQVJHRVRfQVJDSH0iCisgICAgZmkKKworICAgIGlmIFsgIiR7U0lURUlORk9fQklUU30iID0gIjY0IiBdOyB0aGVuCisgICAgICAgIGV4cG9ydCBVU0VfNjQ9MQorICAgIGVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIng4Nl82NCIgLWEgIiR7U0lURUlORk9fQklUU30iID0gIjMyIiBdOyB0aGVuCisgICAgICAgIGV4cG9ydCBVU0VfWDMyPTEKKyAgICBmaQorCisgICAgIyBXZSBjYW4gbW9kaWZ5IENDIGluIHRoZSBlbnZpcm9ubWVudCwgYnV0IGlmIHdlIHNldCBpdCB2aWEgYW4KKyAgICAjIGFyZ3VtZW50IHRvIG1ha2UsIG5zaW5zdGFsbCwgYSBob3N0IHByb2dyYW0sIHdpbGwgYWxzbyBidWlsZCB3aXRoIGl0IQorICAgICMKKyAgICBleHBvcnQgQ0M9IiR7Q0N9IC1nIgorICAgIG1ha2UgLUMgLi9uc3MgQ0NDPSIke0NYWH0gLWciIFwKKyAgICAgICAgT1NfVEVTVD0ke09TX1RFU1R9Cit9CisKKworZG9faW5zdGFsbF9wcmVwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKyAgICBleHBvcnQgTERGTEFHUz0iIgorfQorCitkb19pbnN0YWxsKCkgeworICAgIGV4cG9ydCBDUk9TU19DT01QSUxFPTEKKyAgICBleHBvcnQgTkFUSVZFX0NDPSJnY2MiCisgICAgZXhwb3J0IEJVSUxEX09QVD0xCisKKyAgICBleHBvcnQgRlJFRUJMX05PX0RFUEVORD0xCisKKyAgICBleHBvcnQgTElCRElSPSR7bGliZGlyfQorICAgIGV4cG9ydCBNT1pJTExBX0NMSUVOVD0xCisgICAgZXhwb3J0IE5TX1VTRV9HQ0M9MQorICAgIGV4cG9ydCBOU1NfVVNFX1NZU1RFTV9TUUxJVEU9MQorICAgIGV4cG9ydCBOU1NfRU5BQkxFX0VDQz0xCisKKyAgICBleHBvcnQgT1NfUkVMRUFTRT0zLjQKKyAgICBleHBvcnQgT1NfVEFSR0VUPUxpbnV4CisgICAgZXhwb3J0IE9TX0FSQ0g9TGludXgKKworICAgIGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjIiBdOyB0aGVuCisgICAgICAgIE9TX1RFU1Q9cHBjCisgICAgZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYzY0IiBdOyB0aGVuCisgICAgICAgIE9TX1RFU1Q9cHBjNjQKKyAgICBlbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzIiAtbyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHNlbCIgLW8gIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzNjQiIC1vICIke1RBUkdFVF9BUkNIfSIgPSAibWlwczY0ZWwiIF07IHRoZW4KKyAgICAgICAgT1NfVEVTVD1taXBzCisgICAgZWxzZQorICAgICAgICBPU19URVNUPSIke1RBUkdFVF9BUkNIfSIKKyAgICBmaQorICAgIGlmIFsgIiR7U0lURUlORk9fQklUU30iID0gIjY0IiBdOyB0aGVuCisgICAgICAgIGV4cG9ydCBVU0VfNjQ9MQorICAgIGVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIng4Nl82NCIgLWEgIiR7U0lURUlORk9fQklUU30iID0gIjMyIiBdOyB0aGVuCisgICAgICAgIGV4cG9ydCBVU0VfWDMyPTEKKyAgICBmaQorCisgICAgbWFrZSAtQyAuL25zcyBcCisgICAgICAgIENDQz0iJHtDWFh9IiBcCisgICAgICAgIE9TX1RFU1Q9JHtPU19URVNUfSBcCisgICAgICAgIFNPVVJDRV9MSUJfRElSPSIke1REfS8ke2xpYmRpcn0iIFwKKyAgICAgICAgU09VUkNFX0JJTl9ESVI9IiR7VER9LyR7YmluZGlyfSIgXAorICAgICAgICBpbnN0YWxsCisKKyAgICBpbnN0YWxsIC1kICR7RH0vJHtsaWJkaXJ9LworICAgIGZvciBmaWxlIGluICR7U30vZGlzdC8qLk9CSi9saWIvKi5zbzsgZG8KKyAgICAgICAgZWNobyAiSW5zdGFsbGluZyBgYmFzZW5hbWUgJGZpbGVgLi4uIgorICAgICAgICBjcCAkZmlsZSAgJHtEfS8ke2xpYmRpcn0vCisgICAgZG9uZQorCisgICAgZm9yIHNoYXJlZF9saWIgaW4gJHtURH0vJHtsaWJkaXJ9Lyouc28uKjsgZG8KKyAgICAgICAgaWYgWyAtZiAkc2hhcmVkX2xpYiBdOyB0aGVuCisgICAgICAgICAgICBjcCAkc2hhcmVkX2xpYiAke0R9LyR7bGliZGlyfQorICAgICAgICAgICAgbG4gLXNmICQoYmFzZW5hbWUgJHNoYXJlZF9saWIpICR7RH0vJHtsaWJkaXJ9LyQoYmFzZW5hbWUgJHNoYXJlZF9saWIgLjFvZSkKKyAgICAgICAgZmkKKyAgICBkb25lCisgICAgZm9yIHNoYXJlZF9saWIgaW4gJHtURH0vJHtsaWJkaXJ9Lyouc287IGRvCisgICAgICAgIGlmIFsgLWYgJHNoYXJlZF9saWIgLWEgISAtZSAke0R9LyR7bGliZGlyfS8kc2hhcmVkX2xpYiBdOyB0aGVuCisgICAgICAgICAgICBjcCAkc2hhcmVkX2xpYiAke0R9LyR7bGliZGlyfQorICAgICAgICBmaQorICAgIGRvbmUKKworICAgIGluc3RhbGwgLWQgJHtEfS8ke2luY2x1ZGVkaXJ9L25zczMKKyAgICBpbnN0YWxsIC1tIDY0NCAtdCAke0R9LyR7aW5jbHVkZWRpcn0vbnNzMyBkaXN0L3B1YmxpYy9uc3MvKgorCisgICAgaW5zdGFsbCAtZCAke0R9LyR7YmluZGlyfQorICAgIGZvciBiaW5hcnkgaW4gJHtURH0vJHtiaW5kaXJ9Lyo7IGRvCisgICAgICAgIGluc3RhbGwgLW0gNzU1IC10ICR7RH0vJHtiaW5kaXJ9ICRiaW5hcnkKKyAgICBkb25lCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgICMgQ3JlYXRlIGVtcHR5IC5jaGsgZmlsZXMgZm9yIHRoZSBOU1MgbGlicmFyaWVzIGF0IGJ1aWxkIHRpbWUuIFRoZXkgY291bGQKKyAgICAjIGJlIHJlZ2VuZXJhdGVkIGF0IHRhcmdldCdzIGJvb3QgdGltZS4KKyAgICBmb3IgZmlsZSBpbiBsaWJzb2Z0b2tuMy5jaGsgbGliZnJlZWJsMy5jaGsgbGlibnNzZGJtMy5jaGs7IGRvCisgICAgICAgIHRvdWNoICR7RH0vJHtsaWJkaXJ9LyRmaWxlCisgICAgICAgIGNobW9kIDc1NSAke0R9LyR7bGliZGlyfS8kZmlsZQorICAgIGRvbmUKKyAgICBpbnN0YWxsIC1EIC1tIDc1NSAke1dPUktESVJ9L3NpZ25saWJzLnNoICR7RH0vJHtiaW5kaXJ9L3NpZ25saWJzLnNoCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnLworICAgIHNlZCAncy8lTlNTX1ZFUlNJT04lLyR7UFZ9LycgJHtXT1JLRElSfS9uc3MucGMuaW4gfCBzZWQgJ3MvJU5TUFJfVkVSU0lPTiUvNC45LjIvJyA+ICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYworICAgIHNlZCAtaSBzOk9FUFJFRklYOiR7cHJlZml4fTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYworICAgIHNlZCAtaSBzOk9FRVhFQ1BSRUZJWDoke2V4ZWNfcHJlZml4fTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYworICAgIHNlZCAtaSBzOk9FTElCRElSOiR7bGliZGlyfTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYworICAgIHNlZCAtaSBzOk9FSU5DRElSOiR7aW5jbHVkZWRpcn0vbnNzMzpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYworfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7CisgICAgIyBDcmVhdGUgYSBibGFuayBjZXJ0aWZpY2F0ZQorICAgIG1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L3BraS9uc3NkYi8KKyAgICB0b3VjaCAuL2VtcHR5X3Bhc3N3b3JkCisgICAgY2VydHV0aWwgLU4gLWQgJHtEfSR7c3lzY29uZmRpcn0vcGtpL25zc2RiLyAtZiAuL2VtcHR5X3Bhc3N3b3JkCisgICAgY2htb2QgNjQ0ICR7RH0ke3N5c2NvbmZkaXJ9L3BraS9uc3NkYi8qLmRiCisgICAgcm0gLi9lbXB0eV9wYXNzd29yZAorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworICAgIGlmIFsgLW4gIiREIiBdOyB0aGVuCisgICAgICAgIGZvciBJIGluICRELyR7bGliZGlyfS9saWIqLmNoazsgZG8KKyAgICAgICAgICAgIEROPWBkaXJuYW1lICRJYAorICAgICAgICAgICAgQk49YGJhc2VuYW1lICRJIC5jaGtgCisgICAgICAgICAgICBGTj0kRE4vJEJOLnNvCisgICAgICAgICAgICBzaGxpYnNpZ24gLWkgJEZOCisJICAgIGlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCSAgICAgICBleGl0IDEKKwkgICAgZmkKKyAgICAgICAgZG9uZQorICAgICAgICBleGl0IDAKKyAgICBmaQorICAgIHNpZ25saWJzLnNoCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1zbWltZSIKK0ZJTEVTXyR7UE59LXNtaW1lID0gIlwKKyAgICAke2JpbmRpcn0vc21pbWUgXAorIgorRklMRVNfJHtQTn0gPSAiXAorICAgICR7c3lzY29uZmRpcn0gXAorICAgICR7YmluZGlyfSBcCisgICAgJHtsaWJkaXJ9L2xpYiouY2hrIFwKKyAgICAke2xpYmRpcn0vbGliKi5zbyBcCisgICAgIgorRklMRVNfJHtQTn0tZGV2ID0gIlwKKyAgICAke2xpYmRpcn0vbnNzIFwKKyAgICAke2xpYmRpcn0vcGtnY29uZmlnLyogXAorICAgICR7aW5jbHVkZWRpcn0vKiBcCisgICAgIgorIyBGSUxFU18ke1BOfS1kYmcgaXMgcG9wdWxhdGVkIGF1dG9tYXRpY2FsbHkKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3AxMS1raXQvcDExLWtpdF8wLjIyLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3AxMS1raXQvcDExLWtpdF8wLjIyLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FkOTYyNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcDExLWtpdC9wMTEta2l0XzAuMjIuMS5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIlByb3ZpZGVzIGEgd2F5IHRvIGxvYWQgYW5kIGVudW1lcmF0ZSBQS0NTIzExIG1vZHVsZXMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTAyOTMzODg3ZjYwOTgwN2ZiYjU3YWE0MjM3ZDE0YTUwIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZworCitERVBFTkRTID0gImxpYnRhc24xIGxpYmZmaSIKKworU1JDX1VSSSA9ICJodHRwOi8vcDExLWdsdWUuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzLyR7QlB9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ZTliZWExMTA2NjI4ZmZiODIwYmRhZDI0YTgxOWZhYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlZjNhMzM5ZmNmNmFhMGUzMmM4YzIzZjc5YmE3MTkxZTU3MzEyYmUyYmRhOGIyNGU2ZDEyMWMyNjcwNTM5YTVjIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiBcCisgICAgJHtsaWJkaXJ9L3AxMS1raXQtcHJveHkuc28gXAorICAgICR7bGliZGlyfS9wa2NzMTEvcDExLWtpdC10cnVzdC5zbyBcCisiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9wa2NzMTEvKi5sYSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3BrY3MxMS8uZGVidWciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BpbmVudHJ5L3BpbmVudHJ5XzAuOS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9waW5lbnRyeS9waW5lbnRyeV8wLjkuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODM2Y2E0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9waW5lbnRyeS9waW5lbnRyeV8wLjkuMi5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIkNvbGxlY3Rpb24gb2Ygc2ltcGxlIFBJTiBvciBwYXNzcGhyYXNlIGVudHJ5IGRpYWxvZ3MiCitERVNDUklQVElPTiA9ICJcCisJUGluZW50cnkgaXMgYSBjb2xsZWN0aW9uIG9mIHNpbXBsZSBQSU4gb3IgcGFzc3BocmFzZSBlbnRyeSBkaWFsb2dzIHdoaWNoIFwKKwl1dGlsaXplIHRoZSBBc3N1YW4gcHJvdG9jb2wgYXMgZGVzY3JpYmVkIGJ5IHRoZSBhZWd5cHRlbiBwcm9qZWN0OyBzZWUgXAorCWh0dHA6Ly93d3cuZ251cGcub3JnL2FlZ3lwdGVuLyBmb3IgZGV0YWlscy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251cGcub3JnL3JlbGF0ZWRfc29mdHdhcmUvcGluZW50cnkvaW5kZXguZW4uaHRtbCIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jYmJkNzk0ZTJhMGEyODliOWRmY2M5ZjUxM2QxOTk2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmNTFkNDU0ZjkyMTExMWI1MTU2YTIyOTFjYmY3MDI3OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZDhiYzE1OTJjZWIyMmJiNDkyYjA3Y2IyOWIxYjE0MGJiODgyYzg1OWU2NTAzYjk3NDI1NGMwYTRiNDEzNGQxIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXJwYXRoIFwKKwkJICAgICAgICAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyBcCisgICAgICAgICAgICAgICAiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJuY3Vyc2VzIGxpYmNhcCIKKworUEFDS0FHRUNPTkZJR1tuY3Vyc2VzXSA9ICItLWVuYWJsZS1uY3Vyc2VzICAtLXdpdGgtbmN1cnNlcy1pbmNsdWRlLWRpcj0ke1NUQUdJTkdfSU5DRElSfSwgLS1kaXNhYmxlLW5jdXJzZXMsIG5jdXJzZXMiCitQQUNLQUdFQ09ORklHW2xpYmNhcF0gPSAiLS13aXRoLWxpYmNhcCwgLS13aXRob3V0LWxpYmNhcCwgbGliY2FwIgorUEFDS0FHRUNPTkZJR1txdDRdID0gIi0tZW5hYmxlLXBpbmVudHJ5LXF0NCwgLS1kaXNhYmxlLXBpbmVudHJ5LXF0NCwgcXQ0LXgxMSIKK1BBQ0tBR0VDT05GSUdbcXQ0X2NsaXBib2FyZF0gPSAiLS1lbmFibGUtcGluZW50cnktcXQ0LWNsaXBib2FyZCAtLWVuYWJsZS1waW5lbnRyeS1xdDQsIC0tZGlzYWJsZS1waW5lbnRyeS1xdDQtY2xpcGJvYXJkLCBxdDQteDExIgorUEFDS0FHRUNPTkZJR1tndGsyXSA9ICItLWVuYWJsZS1waW5lbnRyeS1ndGsyLCAtLWRpc2FibGUtcGluZW50cnktZ3RrMiwgZ3RrKyBnbGliLTIuMCIKKworI1RvIHVzZSBsaWJzZWNyZXQsIGFkZCBtZXRhLWdub21lCitQQUNLQUdFQ09ORklHW3NlY3JldF0gPSAiLS1lbmFibGUtbGlic2VjcmV0LCAtLWRpc2FibGUtbGlic2VjcmV0LCBsaWJzZWNyZXQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdC9kaXNhYmxlX3Rlc3RzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHQvZGlzYWJsZV90ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTZjZjY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHQvZGlzYWJsZV90ZXN0cy5wYXRjaApAQCAtMCwwICsxLDIxIEBACitVc2Ugb2YgJCh0b3Bfc3JjZGlyKSBpbiBURVNUUyBpcyBhbiBlcnJvciB3aGljaCBjYXVzZXMKK2F1dG9tYWtlLTEuMTMgdG8gYWJvcnQuIEp1c3QgcmVtb3ZlIHRlc3RzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmQgcG9wdC0xLjE2L01ha2VmaWxlLmFtIHBvcHQtMS4xNi9NYWtlZmlsZS5hbQorLS0tIHBvcHQtMS4xNi9NYWtlZmlsZS5hbQkyMDEwLTA1LTA0IDIzOjU1OjU0LjAwMDAwMDAwMCArMDMwMAorKysrIHBvcHQtMS4xNi9NYWtlZmlsZS5hbQkyMDEzLTAxLTAyIDEzOjM0OjI5LjU0MDM2MTM5MSArMDIwMAorQEAgLTM0LDExICszNCw2IEBACisKKyBub2luc3RfU0NSSVBUUyA9IHRlc3RpdC5zaAorCistVEVTVFNfRU5WSVJPTk1FTlQgPSBcCistdGVzdDE9IiQodG9wX2J1aWxkZGlyKS90ZXN0MSIKKy0KKy1URVNUUyA9ICQodG9wX3NyY2RpcikvdGVzdGl0LnNoCistCisgaW5jbHVkZV9IRUFERVJTID0gcG9wdC5oCisKKyB1c3JsaWJkaXIgPSAkKGxpYmRpcikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0L3BrZ2NvbmZpZ19maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdC9wa2djb25maWdfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZGRiZjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdC9wa2djb25maWdfZml4LnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbnN0YWxsIHRoZSBwa2djb25maWcgZmlsZSBpbnRvIGxpYmRpci4KKworLS0tIHBvcHQtMS4xNi5vcmlnL01ha2VmaWxlLmFtCTIwMTItMDQtMjYgMTM6NDI6NTQuMDIxMTM5ODEzICswODAwCisrKysgcG9wdC0xLjE2L01ha2VmaWxlLmFtCTIwMTItMDQtMjYgMTM6MzY6MDMuNTUyMDk2OTEyICswODAwCitAQCAtNDcsNyArNDcsNyBAQAorIGxpYnBvcHRfbGFfU09VUkNFUyA9IHBvcHQuYyBwb3B0cGFyc2UuYyBwb3B0Y29uZmlnLmMgcG9wdGhlbHAuYyBwb3B0aW50LmMKKyBsaWJwb3B0X2xhX0xERkxBR1MgPSAtbm8tdW5kZWZpbmVkIEBMVExJQklOVExAIEBMVExJQklDT05WQAorIAorLXBrZ2NvbmZpZ2RpciA9ICQocHJlZml4KS9saWIvcGtnY29uZmlnCisrcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworIHBrZ2NvbmZpZ19EQVRBID0gcG9wdC5wYworIAorIGlmIEhBVkVfTERfVkVSU0lPTl9TQ1JJUFQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0L3BvcHRfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHQvcG9wdF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFiY2E5NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0L3BvcHRfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogcGVuZGluZworCitUaGlzIHBhdGNoIGF2b2lkcyB0aGlzIGVycm9yIHdpdGggYXV0b21ha2UgMS4xMjoKKworfCBjb25maWd1cmUuYWM6NDk6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDUvMDIKKworSW5kZXg6IHBvcHQtMS4xNi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwb3B0LTEuMTYub3JpZy9jb25maWd1cmUuYWMKKysrKyBwb3B0LTEuMTYvY29uZmlndXJlLmFjCitAQCAtNDYsNyArNDYsNiBAQCBBQ19HQ0NfVFJBRElUSU9OQUwKKyBBQ19TWVNfTEFSR0VGSUxFCisgCisgQUNfSVNDX1BPU0lYCistQU1fQ19QUk9UT1RZUEVTCisgCisgQUNfQ0hFQ0tfSEVBREVSUyhmbG9hdC5oIGZubWF0Y2guaCBnbG9iLmggbGFuZ2luZm8uaCBsaWJpbnRsLmggbWNoZWNrLmggdW5pc3RkLmgpCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdF8xLjE2LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHRfMS4xNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjEzYTgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHRfMS4xNi5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIHBhcnNpbmcgY29tbWFuZCBsaW5lIG9wdGlvbnMiCitIT01FUEFHRSA9ICJodHRwOi8vcnBtNS5vcmcvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWNiMDYxM2MzMGFmMmE4MjQ5YjhkY2M2N2QzZWRiMDZkIgorUFIgPSAicjMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3JwbTUub3JnL2ZpbGVzL3BvcHQvcG9wdC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnX2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wb3B0X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlX3Rlc3RzLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzNzQzYmVlZmEzZGQ2MjQ3YTczZjhmN2EzMmMxNGMzMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlNzI4ZWQyOTZmZTlmMDY5YTBlMDA1MDAzYzNkNmIyZGRlM2Q5Y2FkNDUzNDIyYTEwZDY1NTg2MTZkMzA0Y2M4IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRlc3QtcnVubmVyL2ZpbGVzL3B0ZXN0LXJ1bm5lciBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRlc3QtcnVubmVyL2ZpbGVzL3B0ZXN0LXJ1bm5lcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjE4ZjExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGVzdC1ydW5uZXIvZmlsZXMvcHRlc3QtcnVubmVyCkBAIC0wLDAgKzEsMjcgQEAKKyMhL2Jpbi9zaAorQU5ZRkFJTEVEPW5vCitlY2hvICJTVEFSVDogJDAiCisKK2ZvciBsaWJkaXIgaW4gL3Vzci9saWIqCitkbworCisgICAgWyAhIC1kICIkbGliZGlyIiBdICYmIGNvbnRpbnVlCisKKyAgICBmb3IgeCBpbiBgbHMgLWQgJGxpYmRpci8qL3B0ZXN0IDI+L2Rldi9udWxsYAorICAgIGRvCisgICAgICAgIFsgISAtZiAkeC9ydW4tcHRlc3QgXSAmJiBjb250aW51ZQorICAgICAgICBbIC1oIGBkaXJuYW1lICR4YCBdICYmIGNvbnRpbnVlCisKKyAgICAgICAgZGF0ZSAiKyVZLSVtLSVkVCVIOiVNIgorICAgICAgICBlY2hvICJCRUdJTjogJHgiCisgICAgICAgIGNkICIkeCIKKyAgICAgICAgLi9ydW4tcHRlc3QgfHwgQU5ZRkFJTEVEPXllcworICAgICAgICBlY2hvICJFTkQ6ICR4IgorICAgICAgICBkYXRlICIrJVktJW0tJWRUJUg6JU0iCisgICAgZG9uZQorZG9uZQorZWNobyAiU1RPUDogJDAiCitpZiBbICIkQU5ZRkFJTEVEIiA9ICJ5ZXMiICBdOyB0aGVuCisgICAgZXhpdCAxCitmaQorZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0ZXN0LXJ1bm5lci9wdGVzdC1ydW5uZXJfMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGVzdC1ydW5uZXIvcHRlc3QtcnVubmVyXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzFiMGE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGVzdC1ydW5uZXIvcHRlc3QtcnVubmVyXzEuMC5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIkEgc2ltcGxlIHNoZWxsIHNjcmlwdCB0byBydW4gYWxsIGluc3RhbGxlZCBwdGVzdHMiCitERVNDUklQVElPTiA9ICJUaGUgcHRlc3QtcnVubmVyIHBhY2thZ2UgaW5zdGFsbHMgYSBwdGVzdC1ydW5uZXIgXAorc2hlbGwgc2NyaXB0IHdoaWNoIGxvb3BzIHRocm91Z2ggYWxsIGluc3RhbGxlZCBwdGVzdCB0ZXN0IHN1aXRlcyBhbmQgXAorcnVucyB0aGVtIGluIHNlcXVlbmNlLiIKK0hPTUVQQUdFID0gImh0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvUHRlc3QiCitTUkNfVVJJICs9ICJmaWxlOi8vcHRlc3QtcnVubmVyIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwgKCkgeworICAgIG1rZGlyIC1wICR7RH0ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wdGVzdC1ydW5uZXIgJHtEfSR7YmluZGlyfQorfQorCitkb19wYXRjaFtub2V4ZWNdID0gIjEiCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgorZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCitkb19idWlsZFtub2V4ZWNdID0gIjEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0aC9maWxlcy9wdGgtYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGgvZmlsZXMvcHRoLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2EyOGFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGgvZmlsZXMvcHRoLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDEwNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0FkZCBwa2djb25maWcgc3VwcG9ydCB0byBwdGguCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKworSW5kZXg6IE1ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNDcsNiArNDcsOSBAQCBkYXRhZGlyICAgICA9IEBkYXRhZGlyQAorIAorIERFU1RESVIgICAgID0KKyAKKytwa2djb25maWdkaXIgPSAke2xpYmRpcn0vcGtnY29uZmlnCisrcGtnY29uZmlnX0RBVEEgPSBwdGgucGMKKysKKyAjIworICMjICBfX19fIFRPT0wgREVGSU5JVElPTlMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICMjCitAQCAtMjE2LDcgKzIxOSw3IEBAIHRlc3RfcHRocmVhZDogdGVzdF9wdGhyZWFkLm8gdGVzdF9jb21tb24ubyBsaWJwdGhyZWFkLmxhCisgCisgIyAgIGluc3RhbGwgdGhlIHBhY2thZ2UKKyBpbnN0YWxsOiBhbGwtZm9yLWluc3RhbGwKKy0JQCQoTUFLRSkgJChNS0ZMQUdTKSBpbnN0YWxsLWRpcnMgaW5zdGFsbC1wdGggQElOU1RBTExfUFRIUkVBREAKKysJQCQoTUFLRSkgJChNS0ZMQUdTKSBpbnN0YWxsLWRpcnMgaW5zdGFsbC1wdGggQElOU1RBTExfUFRIUkVBREAgaW5zdGFsbC1wa2djb25maWdEQVRBCisgCUB0b3VjaCAuZG9uZS1pbnN0YWxsID4vZGV2L251bGwgMj4mMSB8fCAkKFRSVUUpCisgCUAkKE1BS0UpICQoTUtGTEFHUykgd2hhdC1uZXh0CisgaW5zdGFsbC1kaXJzOgorQEAgLTIyNyw2ICsyMzAsNyBAQCBpbnN0YWxsLWRpcnM6CisgCSQoU0hUT09MKSBta2RpciAtZiAtcCAtbSA3NTUgJChERVNURElSKSQobWFuZGlyKS9tYW4xCisgCSQoU0hUT09MKSBta2RpciAtZiAtcCAtbSA3NTUgJChERVNURElSKSQobWFuZGlyKS9tYW4zCisgCSQoU0hUT09MKSBta2RpciAtZiAtcCAtbSA3NTUgJChERVNURElSKSQoZGF0YWRpcikvYWNsb2NhbAorKwkkKFNIVE9PTCkgbWtkaXIgLWYgLXAgLW0gNzU1ICQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikKKyBpbnN0YWxsLXB0aDoKKyAJJChTSFRPT0wpIGluc3RhbGwgLWMgLW0gNzU1IHB0aC1jb25maWcgJChERVNURElSKSQoYmluZGlyKS9wdGgtY29uZmlnCisgCSQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDY0NCAkKFMpcHRoLWNvbmZpZy4xICQoREVTVERJUikkKG1hbmRpcikvbWFuMS9wdGgtY29uZmlnLjEKK0BAIC0yNDIsMTIgKzI0NiwxNiBAQCBpbnN0YWxsLXB0aHJlYWQ6CisgCSQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDY0NCAkKFMpcHRocmVhZC4zICQoREVTVERJUikkKG1hbmRpcikvbWFuMy9wdGhyZWFkLjMKKyAJQHVtYXNrIDAyMjsgJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCBcCisgCSQoU0hUT09MKSBpbnN0YWxsIC1jIGxpYnB0aHJlYWQubGEgJChERVNURElSKSQobGliZGlyKS9saWJwdGhyZWFkLmxhCisraW5zdGFsbC1wa2djb25maWdEQVRBOiAkKHBrZ2NvbmZpZ19EQVRBKQorKwkkKFNIVE9PTCkgaW5zdGFsbCAtYyAtbSA2NDQgJChwa2djb25maWdfREFUQSkgJChERVNURElSKSQocGtnY29uZmlnZGlyKS8kKHBrZ2NvbmZpZ19EQVRBKQorIAorICMgICB1bmluc3RhbGwgdGhlIHBhY2thZ2UKKyB1bmluc3RhbGw6CistCUAkKE1BS0UpICQoTUtGTEFHUykgQFVOSU5TVEFMTF9QVEhSRUFEQCB1bmluc3RhbGwtcHRoIHVuaW5zdGFsbC1kaXJzCisrCUAkKE1BS0UpICQoTUtGTEFHUykgdW5pbnN0YWxsLXBrZ2NvbmZpZ0RBVEEgQFVOSU5TVEFMTF9QVEhSRUFEQCB1bmluc3RhbGwtcHRoIHVuaW5zdGFsbC1kaXJzCisgCUB0b3VjaCAuZG9uZS11bmluc3RhbGwgPi9kZXYvbnVsbCAyPiYxIHx8ICQoVFJVRSkKKyAJQCQoTUFLRSkgJChNS0ZMQUdTKSB3aGF0LW5leHQKKyt1bmluc3RhbGwtcGtnY29uZmlnREFUQToKKysJJChSTSkgJChERVNURElSKSQocGtnY29uZmlnZGlyKS8kKHBrZ2NvbmZpZ19EQVRBKQorIHVuaW5zdGFsbC1wdGhyZWFkOgorIAkkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL3B0aHJlYWQtY29uZmlnCisgCSQoUk0pICQoREVTVERJUikkKG1hbmRpcikvbWFuMS9wdGhyZWFkLWNvbmZpZy4xCitAQCAtMjcxLDYgKzI3OSw3IEBAIHVuaW5zdGFsbC1kaXJzOgorIAktJChSTURJUikgJChERVNURElSKSQoaW5jbHVkZWRpcikgPi9kZXYvbnVsbCAyPiYxIHx8ICQoVFJVRSkKKyAJLSQoUk1ESVIpICQoREVTVERJUikkKGJpbmRpcikgPi9kZXYvbnVsbCAyPiYxIHx8ICQoVFJVRSkKKyAJLSQoUk1ESVIpICQoREVTVERJUikkKHByZWZpeCkgPi9kZXYvbnVsbCAyPiYxIHx8ICQoVFJVRSkKKysJLSQoUk1ESVIpICQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikgPiAvZGV2L251bGwgMj4mMSB8fCQoVFJVRSkKKyAKKyAjICAgc3RyaXAgZG93biB0aGUgc291cmNlIHRyZWUgdG8gaXRzIG1pbmltdW0KKyBzdHJpcHRlYXNlOgorSW5kZXg6IGNvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjU2LDYgKzY1NiwxMyBAQCBwdGhfYWNtYWMuaCBkbmwKKyBjaG1vZCArcnggcHRocmVhZC1jb25maWcKKyBjaG1vZCArcnggcHRoLWNvbmZpZworIClkbmwKKysKKytQVEhfVkVSU0lPTj1gZWNobyAkUFRIX1ZFUlNJT05fU1RSIHwgY3V0IC1kJyAnIC1mMWAKKytBQ19TVUJTVChQVEhfVkVSU0lPTikKKysKKytBQ19DT05GSUdfRklMRVMoW3B0aC5wY10pCisrQUNfT1VUUFVUCisrCisgaWYgdGVzdCAiLiRlbmFibGVfcHRocmVhZCIgPSAubm87IHRoZW4KKyAgICAgcm0gLWYgcHRocmVhZC1jb25maWcKKyAgICAgcm0gLWYgcHRocmVhZC5oCitJbmRleDogcHRoLnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGIvcHRoLnBjLmluCitAQCAtMCwwICsxLDE2IEBACisrcHJlZml4PUBwcmVmaXhACisrZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisrYmluZGlyPUBiaW5kaXJACisrbWFuZGlyPUBtYW5kaXJACisrZGF0YWRpcj1AZGF0YWRpckAKKythY2Rpcj1AZGF0YWRpckAvYWNsb2NhbAorKworK05hbWU6IHB0aAorK0Rlc2NyaXB0aW9uOiBHTlUgUG9ydGFibGUgVGhyZWFkcworK1JlcXVpcmVzOgorK1ZlcnNpb246IEBQVEhfVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbHB0aAorK0xpYnMucHJpdmF0ZTogCisrQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KKy0tIAorMS43LjUuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0aC9maWxlcy9wdGgtZml4LXBhcmFsbGVsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGgvZmlsZXMvcHRoLWZpeC1wYXJhbGxlbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGVkYWZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGgvZmlsZXMvcHRoLWZpeC1wYXJhbGxlbC5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitGcm9tIGRmMDZiODE3MDc0NWVhYzM0N2FjYjk1ZjlmMzc0ZjI1NzYyMTI1NGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMjkgSmFuIDIwMTUgMTg6MTE6MDAgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gTWFrZWZpbGUuaW46IGZpeCBmb3IgcGFyYWxsZWwgYnVpbGQKKworRml4ZWQ6CisqIGRvX2NvbXBpbGUKKyBwdGhfdWN0eC5jOjMxOjE5OiBmYXRhbCBlcnJvcjogcHRoX3AuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorICNpbmNsdWRlICJwdGhfcC5oIgorICAgICAgICAgICAgICAgICAgIF4KK2NvbXBpbGF0aW9uIHRlcm1pbmF0ZWQuCittYWtlOiAqKiogW3B0aF91Y3R4LmxvXSBFcnJvciAxCisKKyogZG9faW5zdGFsbDoKKyAgY3A6IGNhbm5vdCBjcmVhdGUgcmVndWxhciBmaWxlIGBpbWFnZS91c3IvbGliL3BrZ2NvbmZpZy8jSU5TVEAxNTUwNyMnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8ICAgIDUgKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggZGUwMzkwZC4uMzgxYTBlZSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTIxOSw3ICsyMTksOCBAQCB0ZXN0X3B0aHJlYWQ6IHRlc3RfcHRocmVhZC5vIHRlc3RfY29tbW9uLm8gbGlicHRocmVhZC5sYQorIAorICMgICBpbnN0YWxsIHRoZSBwYWNrYWdlCisgaW5zdGFsbDogYWxsLWZvci1pbnN0YWxsCistCUAkKE1BS0UpICQoTUtGTEFHUykgaW5zdGFsbC1kaXJzIGluc3RhbGwtcHRoIEBJTlNUQUxMX1BUSFJFQURAIGluc3RhbGwtcGtnY29uZmlnREFUQQorKwlAJChNQUtFKSAkKE1LRkxBR1MpIGluc3RhbGwtZGlycworKwlAJChNQUtFKSAkKE1LRkxBR1MpIGluc3RhbGwtcHRoIEBJTlNUQUxMX1BUSFJFQURAIGluc3RhbGwtcGtnY29uZmlnREFUQQorIAlAdG91Y2ggLmRvbmUtaW5zdGFsbCA+L2Rldi9udWxsIDI+JjEgfHwgJChUUlVFKQorIAlAJChNQUtFKSAkKE1LRkxBR1MpIHdoYXQtbmV4dAorIGluc3RhbGwtZGlyczoKK0BAIC00MzIsNyArNDMzLDcgQEAgVEFHUzoKKyAjIyAgKEFVVE9NQVRJQ0FMTFkgVVBEQVRFRCAtIERPIE5PVCBFRElUKQorICMjCisgCistJChMT0JKUyk6IE1ha2VmaWxlCisrJChMT0JKUyk6IE1ha2VmaWxlIHB0aF9wLmgKKyAKKyAjIERPIE5PVCBSRU1PVkUKKyBwdGhfYXR0ci5sbzogcHRoX2F0dHIuYyBwdGhfcC5oIHB0aF92ZXJzLmMgcHRoLmggcHRoX2FjZGVmLmggcHRoX2FjbWFjLmgKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0aC9wdGhfMi4wLjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0aC9wdGhfMi4wLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAzNzc2OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRoL3B0aF8yLjAuNy5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIkdOVSBQb3J0YWJsZSBUaHJlYWRzIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcHRoLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORztiZWdpbmxpbmU9MTI7ZW5kbGluZT0xNTttZDU9YTQ4YWYxMTRhODBjMjIyY2FmZDM3ZjI0MzcwYTc3YjEiCitQUiA9ICJyMyIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBpbXBvcnQgcmUKKyAgICB1Y19vcyA9IChyZS5tYXRjaCgnLip1Y2xpYmMqJywgZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpKSAhPSBOb25lKQorICAgIGlmIHVjX29zOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiaW5jb21wYXRpYmxlIHdpdGggdUNsaWJjIikKK30KKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3B0aC9wdGgtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICBmaWxlOi8vcHRoLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL3B0aC1maXgtcGFyYWxsZWwucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjljYjRhMjUzMzFhNGM0ZGI4NjZhMzFjYmU1MDdjNzkzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcyMzUzNjYwYzVhMmNhYWZkNjAxYjIwZTEyZTc1ZDg2NWZkODhmNmNmMWEwODhiMzA2YTM5NjNmMGJjNzcyMzIiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vcHRoLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZworCitkb19jb25maWd1cmUoKSB7CisJKCBjZCAke1N9OyBnbnUtY29uZmlnaXplICkKKwkoIGNkICR7U307IGF1dG9jb25mICkKKwlvZV9ydW5jb25mCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NlcmYvc2VyZi9lbnYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NlcmYvc2VyZi9lbnYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQwNzNlOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2VyZi9zZXJmL2Vudi5wYXRjaApAQCAtMCwwICsxLDI4IEBACisnc2NvbnMnIGNsZWFucyB0aGUgZW52aXJvbm1lbnQgd2hpY2ggYnJlYWtzIGNjYWNoZSBidWlsZHMgYmVjYXVzZQorQ0NBQ0hFRElSIGNhbiBwb2ludCB0byBhbiB1bmV4cGVjdGVkIGxvY2F0aW9uOgorCit8IGNjYWNoZSBhcm0tbGludXgtZ251ZWFiaS1nY2MgLi4uIGNvbnRleHQuYworfCBjY2FjaGU6IGZhaWxlZCB0byBjcmVhdGUgLi4uL3NlcmYvMS4zLjYtcjAvLmhvbWUvLmNjYWNoZSAoTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSkKKworSXNzdWUgaXMgZGVzY3JpYmVkIGluCisKKyAgaHR0cDovL3d3dy5zY29ucy5vcmcvd2lraS9JbXBvcnRpbmdFbnZpcm9ubWVudFNldHRpbmdzCisKK2FuZCBiZWNhdXNlICdiaXRiYWtlJyBjbGVhbnMgZW52aXJvbm1lbnQgd2UgY2FuIHBhc3MgaXQgY29tcGxldGVseQoraW5zdGVhZCBvZiB0cnlpbmcgdG8gZW51bWVyYXRlIG5lZWRlZCBlbnYuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCisKK0luZGV4OiBzZXJmLTEuMy42L1NDb25zdHJ1Y3QKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzZXJmLTEuMy42Lm9yaWcvU0NvbnN0cnVjdAorKysrIHNlcmYtMS4zLjYvU0NvbnN0cnVjdAorQEAgLTE0OSw2ICsxNDksNyBAQCBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyBlbnYgPSBFbnZpcm9ubWVudCh2YXJpYWJsZXM9b3B0cywKKyAgICAgICAgICAgICAgICAgICB0b29scz0oJ2RlZmF1bHQnLCAndGV4dGZpbGUnLCksCisgICAgICAgICAgICAgICAgICAgQ1BQUEFUSD1bJy4nLCBdLAorKyAgICAgICAgICAgICAgICAgIEVOViA9IG9zLmVudmlyb24sCisgICAgICAgICAgICAgICAgICAgKQorCisgZW52LkFwcGVuZChCVUlMREVSUyA9IHsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2VyZi9zZXJmL25vcnBhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NlcmYvc2VyZi9ub3JwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MGY1ZDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NlcmYvc2VyZi9ub3JwYXRoLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK1RoZSBSUEFUSCBoYW5kbGluZyBpbiBzZXJmIGlzIGFsbCB3cm9uZyBmb3IgdXMgYW5kIHdlIGRvbid0IG5lZWQgaXQgCithbnl3YXkgc28gaGFjayBhcm91bmQgaXQgYnkgcmVtb3ZpbmcgdGhpcyBmb3Igbm93LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworUlAgMjAxNC83LzE3CisKK0luZGV4OiBzZXJmLTEuMy42L1NDb25zdHJ1Y3QKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzZXJmLTEuMy42Lm9yaWcvU0NvbnN0cnVjdAkyMDE0LTA3LTE3IDE5OjU3OjU3LjcyNDM4OTE1MCArMDAwMAorKysrIHNlcmYtMS4zLjYvU0NvbnN0cnVjdAkyMDE0LTA3LTE3IDIwOjA0OjIxLjc4NDM5OTYxNiArMDAwMAorQEAgLTIxOCw4ICsyMTgsNyBAQAorIGVsc2U6CisgICBMSUJOQU1FU1RBVElDID0gJ3NlcmYtJHtNQUpPUn0nCisgCistZW52LkFwcGVuZChSUEFUSD1saWJkaXIsCistICAgICAgICAgICBQREI9JyR7VEFSR0VULmZpbGViYXNlfS5wZGInKQorK2Vudi5BcHBlbmQoUERCPScke1RBUkdFVC5maWxlYmFzZX0ucGRiJykKKyAKKyAjZm9yIGkgaW4gZW52OgorICMgICAgcHJpbnQoc3RyKGVudltpXSkpCitAQCAtMzcxLDEyICszNzAsNiBAQAorIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgZW52LkFwcGVuZChDUFBERUZJTkVTPVsnU0VSRl9IQVZFX1NTUEknXSkKKyAKKy0jIE9uIHNvbWUgc3lzdGVtcywgdGhlIC1SIHZhbHVlcyB0aGF0IEFQUiBkZXNjcmliZXMgbmV2ZXIgbWFrZSBpdCBpbnRvIGFjdHVhbAorLSMgUlBBVEggZmxhZ3MuIFdlJ2xsIG1hbnVhbGx5IG1hcCBhbGwgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpbnRvIG5ldworLSMgZmxhZ3MgdG8gc2V0IFJQQVRIIHZhbHVlcy4KKy1mb3IgZCBpbiBlbnZbJ0xJQlBBVEgnXToKKy0gIGVudi5BcHBlbmQoUlBBVEg9JzonK2QpCistCisgIyBTZXQgdXAgdGhlIGNvbnN0cnVjdGlvbiBvZiBzZXJmLSoucGMKKyBwa2djb25maWcgPSBlbnYuVGV4dGZpbGUoJ3NlcmYtJWQucGMnICUgKE1BSk9SLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVudi5GaWxlKCdidWlsZC9zZXJmLnBjLmluJyksCitAQCAtNDQ2LDcgKzQzOSw2IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICBFTlY9eydQQVRIJyA6IG9zLmVudmlyb25bJ1BBVEgnXX0pKQorIAorICMgRmluZCB0aGUgKGR5bmFtaWMpIGxpYnJhcnkgaW4gdGhpcyBkaXJlY3RvcnkKKy10ZW52LlJlcGxhY2UoUlBBVEg9dGhpc2RpcikKKyB0ZW52LlByZXBlbmQoTElCUz1bTElCTkFNRVNUQVRJQywgXSwKKyAgICAgICAgICAgICAgTElCUEFUSD1bdGhpc2RpciwgXSkKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2VyZi9zZXJmXzEuMy44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zZXJmL3NlcmZfMS4zLjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUwNTlkNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2VyZi9zZXJmXzEuMy44LmJiCkBAIC0wLDAgKzEsMjYgQEAKK1NVTU1BUlkgPSAiSGlnaC1QZXJmb3JtYW5jZSBBc3luY2hyb25vdXMgSFRUUCBDbGllbnQgTGlicmFyeSIKK1NSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL3MvJHtCUE59LyR7QlBOfV8ke1BWfS5vcmlnLnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9ub3JwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Vudi5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjcxM2JlYWYwNWQ3ZjMzMjlkZTEyMWUyMThlMmZjYjkzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc3MTM0Y2Q1MDEwNjY0Y2EwMjM1ODViY2U1MDk3OGJkNDAwNTkwNmVkMjgwZmY4ODlmNTkxZjg2ZGY3YzU5ZTQiCisKK0xJQ0VOU0UgPSAiQXBhY2hlLTIuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTg2ZDNmM2E5NWMzMjRjOTQ3OWJkODk4Njk2OGY0MzI3IgorCitERVBFTkRTID0gInB5dGhvbi1zY29ucy1uYXRpdmUgb3BlbnNzbCBhcHIgYXByLXV0aWwgdXRpbC1saW51eCBleHBhdCIKKworZG9fY29tcGlsZSgpIHsKKwkke1NUQUdJTkdfQklORElSX05BVElWRX0vc2NvbnMgJHtQQVJBTExFTF9NQUtFfSBQUkVGSVg9JHtwcmVmaXh9IFwKKwkJQ0M9IiR7Q0N9IiBcCisJCUFQUj1gd2hpY2ggYXByLTEtY29uZmlnYCBBUFU9YHdoaWNoIGFwdS0xLWNvbmZpZ2AgXAorCQlDRkxBR1M9IiR7Q0ZMQUdTfSIgTElOS0ZMQUdTPSIke0xERkxBR1N9IiBcCisJCU9QRU5TU0w9IiR7U1RBR0lOR19FWEVDUFJFRklYRElSfSIKK30KKworZG9faW5zdGFsbCgpIHsKKwkke1NUQUdJTkdfQklORElSX05BVElWRX0vc2NvbnMgUFJFRklYPSR7RH0ke3ByZWZpeH0gTElCRElSPSR7RH0ke2xpYmRpcn0gaW5zdGFsbAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWVkYjZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zaGFyZWQtbWltZS1pbmZvL3NoYXJlZC1taW1lLWluZm8uaW5jCkBAIC0wLDAgKzEsMzYgQEAKK1NVTU1BUlkgPSAiU2hhcmVkIE1JTUUgdHlwZSBkYXRhYmFzZSBhbmQgc3BlY2lmaWNhdGlvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly9mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9zaGFyZWQtbWltZS1pbmZvIgorU0VDVElPTiA9ICJiYXNlIgorCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKKworREVQRU5EUyA9ICJsaWJ4bWwyIGludGx0b29sLW5hdGl2ZSBnbGliLTIuMCBzaGFyZWQtbWltZS1pbmZvLW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImxpYnhtbDItbmF0aXZlIGludGx0b29sLW5hdGl2ZSBnbGliLTIuMC1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL2ZyZWVkZXNrdG9wLm9yZy9+aGFkZXNzL3NoYXJlZC1taW1lLWluZm8tJHtQVn0udGFyLnh6IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dAorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXVwZGF0ZS1taW1lZGIiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L21pbWUiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vcGtnY29uZmlnL3NoYXJlZC1taW1lLWluZm8ucGMiCisKKyMgZnJlZWRlc2t0b3Aub3JnLnhtbCBpcyBvbmx5IHJlcXVpcmVkIHdoZW4gdXBkYXRpbmcgdGhlIG1pbWUgZGF0YWJhc2UsCisjIHBhY2thZ2UgaXQgc2VwYXJhdGVseQorUEFDS0FHRVMgPSsgInNoYXJlZC1taW1lLWluZm8tZGF0YSIKK0ZJTEVTX3NoYXJlZC1taW1lLWluZm8tZGF0YSA9ICIke2RhdGFkaXJ9L21pbWUvcGFja2FnZXMvZnJlZWRlc2t0b3Aub3JnLnhtbCIKK1JERVBFTkRTX3NoYXJlZC1taW1lLWluZm8tZGF0YSA9ICJzaGFyZWQtbWltZS1pbmZvIgorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJdXBkYXRlLW1pbWUtZGF0YWJhc2UgJHtEfSR7ZGF0YWRpcn0vbWltZQorfQorCitkb19pbnN0YWxsX2NsYXNzLW5hdGl2ZSAoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NoYXJlZC1taW1lLWluZm8vc2hhcmVkLW1pbWUtaW5mby9pbnN0YWxsLWRhdGEtaG9vay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvL2luc3RhbGwtZGF0YS1ob29rLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOWYxZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NoYXJlZC1taW1lLWluZm8vc2hhcmVkLW1pbWUtaW5mby9pbnN0YWxsLWRhdGEtaG9vay5wYXRjaApAQCAtMCwwICsxLDIzIEBACitmaXggc2hhcmVkLW1pbWUtaW5mbyBidWlsZCByYWNlIGNvbmRpdGlvbgorCitUaGUgZGVmaW5pdGlvbiBvZiBpbnN0YWxsLWRhdGEtaG9vayBpbiBNYWtlZmlsZS5hbSBsZWFkcwordG8gbXVsdGlwbGUsIG92ZXJsYXBwaW5nLCBleGVjdXRpb25zIG9mIGluc3RhbGwtYmluUFJPR1JBTVMKK3RhcmdldC4gIFdlIG1vZGlmeSB0aGUgZGVmaW5pdGlvbiB0byBhdm9pZCB0aGF0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSm9lIFNsYXRlciA8anNsYXRlckB3aW5kcml2ZXIuY29tPgorCistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC00NCw3ICs0NCw5IEBAICQocGtnY29uZmlnX0RBVEEpOiBjb25maWcuc3RhdHVzCisgQElOVExUT09MX1hNTF9SVUxFQAorIEBJTlRMVE9PTF9ERVNLVE9QX1JVTEVACisgCistaW5zdGFsbC1kYXRhLWhvb2s6IGluc3RhbGwtYmluUFJPR1JBTVMKKysjIGRvIE5PVCBtYWtlIHRoaXMgZGVwZW5kZW50IG9uIGFueXRoaW5nIQorKyMKKytpbnN0YWxsLWRhdGEtaG9vazoKKyBpZiBFTkFCTEVfVVBEQVRFX01JTUVEQgorIAkkKERFU1RESVIpIiQoYmluZGlyKS91cGRhdGUtbWltZS1kYXRhYmFzZSIgLVYgIiQoREVTVERJUikkKGRhdGFkaXIpL21pbWUiCisgZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvL3BhcmFsbGVsbWFrZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvL3BhcmFsbGVsbWFrZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGM0ZDAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zaGFyZWQtbWltZS1pbmZvL3NoYXJlZC1taW1lLWluZm8vcGFyYWxsZWxtYWtlLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1RoZSBNYWtlZmlsZSB1c2VkIGJ5IHNoYXJlZC1taW1lLWluZm8gaXMgb25lIGJpZyByYWNlIHdpdGggdGhlIFNVQkRJUlMgCitvcHRpb24gYW5kIHRoZSBkZXBlbmRlbmN5IHNwZWNpZmljYWxseSBjYWxsaW5nIG1ha2UgYWxsIGNvbWJpbmluZyB0bworY3JlYXRlIG11bHRpcGxlIG1ha2UgaW5zdGFuY2VzIGFsbCBvZiB3aGljaCBtYXkgdHJ5IGFuZCBidWlsZCB0YXJnZXRzCitsaWtlIHVwZGF0ZS1taW1lLWRhdGFiYXNlLgorCitUaGlzIHBhdGNoIHJlbW92ZXMgdGhvc2Ugb3B0aW9ucyBtZWFuaW5nIG1ha2UgY2FuIGNvcnJlY3RseSBpZGVudGlmeQorZGVwZW5kZW5jaWVzIGFuZCBzdG9wIGl0c2VsZiByYWNpbmcgaXRzZWxmLgorCitSUCAxMC8xMC8yMDExCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitJbmRleDogc2hhcmVkLW1pbWUtaW5mby0xLjAvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzaGFyZWQtbWltZS1pbmZvLTEuMC5vcmlnL01ha2VmaWxlLmFtCisrKysgc2hhcmVkLW1pbWUtaW5mby0xLjAvTWFrZWZpbGUuYW0KK0BAIC0xLDUgKzEsMyBAQAorLVNVQkRJUlM9LiBwbworLQorIEFNX0NQUEZMQUdTID0gJChBTExfQ0ZMQUdTKQorIAorIHBhY2thZ2VzZGlyID0gJChkYXRhZGlyKS9taW1lL3BhY2thZ2VzCitAQCAtNzIsOCArNzAsNyBAQCB1bmluc3RhbGwtaG9vazoKKyAKKyBhbGw6ICQoZGVmYXVsdG1ha2VkZXBzKQorIAorLWNyZWF0ZS1wb3Q6CistCSQoQU1fVl9HRU4pICQoTUFLRSkgLUMgcG8gc2hhcmVkLW1pbWUtaW5mby5wb3QKKytjcmVhdGUtcG90OiBwbworIAorIGNoZWNrOiBjcmVhdGUtcG90IGZyZWVkZXNrdG9wLm9yZy54bWwgdXBkYXRlLW1pbWUtZGF0YWJhc2UgY2hlY2stdHJhbnNsYXRpb25zCisgCWlmIHRlc3QgLWUgJCh0b3BfYnVpbGRkaXIpL2ZyZWVkZXNrdG9wLm9yZy54bWw7IHRoZW4gXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zaGFyZWQtbWltZS1pbmZvL3NoYXJlZC1taW1lLWluZm9fMS40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zaGFyZWQtbWltZS1pbmZvL3NoYXJlZC1taW1lLWluZm9fMS40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNGZkZTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NoYXJlZC1taW1lLWluZm8vc2hhcmVkLW1pbWUtaW5mb18xLjQuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIHNoYXJlZC1taW1lLWluZm8uaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9wYXJhbGxlbG1ha2UucGF0Y2ggXAorCSAgICBmaWxlOi8vaW5zdGFsbC1kYXRhLWhvb2sucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxNmMwMmY3YjY1OGZmZjJhOWMyMDc0MDZkMzg4ZWEzMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiYmMwYmQwMjNmNDk3ZGZkNzVlMWNhNzM0NDFjYmJiNWE2MzYxN2Q5ZTE0ZjI3OTBiODY4MzYxY2MwNTViNWIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvZmlsZXMvMDAwMS11c2luZy10aGUtZHluYW1pYy1saWJyYXJ5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvZmlsZXMvMDAwMS11c2luZy10aGUtZHluYW1pYy1saWJyYXJ5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYmZkNWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9maWxlcy8wMDAxLXVzaW5nLXRoZS1keW5hbWljLWxpYnJhcnkucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorW1BBVENIXSB1c2luZyB0aGUgZHluYW1pYyBsaWJyYXJ5CisKK1Vwc3RyZWFtLVN0YXR1czogIEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK2J1aWxkaW5nIHN0YXRpY2FsbHktbGlua2VkIHNxbGl0ZTMgZmFpbGVkIHNpbmNlIHNxbGl0ZTMubyBpcyBnZW5lcmF0ZWQgaW4gCitkaWZmZXJlbnQgZGlyLCBldmVuIGlmIGxpbmsgc3VjY2Vzc2VzLCB0aGUgc2l6ZSBvZiBzcWxpdGUzIGlzIGJlY29tZSBsYXJnZXIsCitzbyB1c2UgdGhlIGR5bmFtaWMgbGluaywgcmVmOiBodHRwOi8vcGF0Y2h3b3JrLm9wZW5lbWJlZGRlZC5vcmcvcGF0Y2gvOTMyOTMvCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmFtIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCA4OGJjMjNkLi5mZTUwZjIwIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtNyw3ICs3LDggQEAgbGlic3FsaXRlM19sYV9MREZMQUdTID0gLW5vLXVuZGVmaW5lZCAtdmVyc2lvbi1pbmZvIDg6Njo4CisgCisgYmluX1BST0dSQU1TID0gc3FsaXRlMworIHNxbGl0ZTNfU09VUkNFUyA9IHNoZWxsLmMgc3FsaXRlMy5oCistc3FsaXRlM19MREFERCA9IHNxbGl0ZTMuJChPQkpFWFQpIEBSRUFETElORV9MSUJTQAorK3NxbGl0ZTNfTERBREQgPSBAUkVBRExJTkVfTElCU0AgbGlic3FsaXRlMy5sYQorKworIAorIGluY2x1ZGVfSEVBREVSUyA9IHNxbGl0ZTMuaCBzcWxpdGUzZXh0LmgKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlMy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9zcWxpdGUzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTM3OTFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlMy5pbmMKQEAgLTAsMCArMSwzNCBAQAorU1VNTUFSWSA9ICJFbWJlZGRhYmxlIFNRTCBkYXRhYmFzZSBlbmdpbmUiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnNxbGl0ZS5vcmciCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gInJlYWRsaW5lIG5jdXJzZXMiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCitMSUNFTlNFID0gIlBEIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNoYXJlZCAtLWVuYWJsZS10aHJlYWRzYWZlIgorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLWVuYWJsZS1zaGFyZWQgLS1lbmFibGUtdGhyZWFkc2FmZSAtLWRpc2FibGUtcmVhZGxpbmUiCitleHBvcnQgY29uZmlnX0JVSUxEX0NDID0gIiR7QlVJTERfQ0N9IgorZXhwb3J0IGNvbmZpZ19CVUlMRF9DRkxBR1MgPSAiJHtCVUlMRF9DRkxBR1N9IgorZXhwb3J0IGNvbmZpZ19CVUlMRF9MSUJTID0gIiR7QlVJTERfTERGTEFHU30iCitleHBvcnQgY29uZmlnX1RBUkdFVF9DQyA9ICIke0NDfSIKK2V4cG9ydCBjb25maWdfVEFSR0VUX0xJTksgPSAiJHtDQ0xEfSIKK2V4cG9ydCBjb25maWdfVEFSR0VUX0NGTEFHUyA9ICIke0NGTEFHU30iCitleHBvcnQgY29uZmlnX1RBUkdFVF9MRkxBR1MgPSAiJHtMREZMQUdTfSIKKworIyBwcmVhZCgpIGlzIGluIFBPU0lYLjEtMjAwMSBzbyBhbnkgcmVhc29uYWJsZSBzeXN0ZW0gbXVzdCBzdXJlbHkgc3VwcG9ydCBpdAorQlVJTERfQ0ZMQUdTICs9ICItRFVTRV9QUkVBRCIKK1RBUkdFVF9DRkxBR1MgKz0gIi1EVVNFX1BSRUFEIgorCitQQUNLQUdFUyA9ICJsaWIke0JQTn0gbGliJHtCUE59LWRldiBsaWIke0JQTn0tZG9jICR7UE59LWRiZyBsaWIke0JQTn0tc3RhdGljZGV2ICR7UE59IgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vKiIKK0ZJTEVTX2xpYiR7QlBOfSA9ICIke2xpYmRpcn0vKi5zby4qIgorRklMRVNfbGliJHtCUE59LWRldiA9ICIke2xpYmRpcn0vKi5sYSAke2xpYmRpcn0vKi5zbyBcCisJICAgICAgICAgICAgICAgIAkgICAke2xpYmRpcn0vcGtnY29uZmlnICR7aW5jbHVkZWRpcn0iCitGSUxFU19saWIke0JQTn0tZG9jID0gIiR7ZG9jZGlyfSAke21hbmRpcn0gJHtpbmZvZGlyfSIKK0ZJTEVTX2xpYiR7QlBOfS1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYiouYSIKK0FVVE9fTElCTkFNRV9QS0dTID0gIiR7TUxQUkVGSVh9bGliJHtCUE59IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9zcWxpdGUzXzMuOC4xMC4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlM18zLjguMTAuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzJhZDUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlM18zLjguMTAuMi5iYgpAQCAtMCwwICsxLDIzIEBACityZXF1aXJlIHNxbGl0ZTMuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NxbGl0ZTMuaDtlbmRsaW5lPTExO21kNT02NWYwYTU3Y2E2OTI4NzEwYjQxOGMwOTRiMzU3MGJiMCIKKworZGVmIHNxbGl0ZV9kb3dubG9hZF92ZXJzaW9uKGQpOgorICAgIHB2c3BsaXQgPSBkLmdldFZhcignUFYnLCBUcnVlKS5zcGxpdCgnLicpCisgICAgcmV0dXJuIHB2c3BsaXRbMF0gKyAnJy5qb2luKFtwYXJ0LnJqdXN0KDIsJzAnKSBmb3IgcGFydCBpbiBwdnNwbGl0WzE6XV0pCisKK1BFID0gIjMiCitTUUxJVEVfUFYgPSAiJHtAc3FsaXRlX2Rvd25sb2FkX3ZlcnNpb24oZCl9IgorU1JDX1VSSSA9ICJodHRwOi8vd3d3LnNxbGl0ZS5vcmcvMjAxNS9zcWxpdGUtYXV0b2NvbmYtJHtTUUxJVEVfUFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXVzaW5nLXRoZS1keW5hbWljLWxpYnJhcnkucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTE4YmZjMDE1Y2Q0OWExZTdhOTYxYjdiNzdiYzNiMzciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODM4MmU1NWE0ZTdkODUzYzkzMDM4NTYyY2EzZGQwMDMwNzkzN2ZjY2YxYzZiNjVkZGQ4MTNlNTAzYTU2ZDYyNiIKKworUyA9ICIke1dPUktESVJ9L3NxbGl0ZS1hdXRvY29uZi0ke1NRTElURV9QVn0iCisKKyMgUHJvdmlkZSBjb2x1bW4gbWV0YS1kYXRhIEFQSQorQlVJTERfQ0ZMQUdTICs9ICItRFNRTElURV9FTkFCTEVfQ09MVU1OX01FVEFEQVRBIgorVEFSR0VUX0NGTEFHUyArPSAiLURTUUxJVEVfRU5BQkxFX0NPTFVNTl9NRVRBREFUQSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC90YWdsaWIvdGFnbGliXzEuOS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC90YWdsaWIvdGFnbGliXzEuOS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMjc4MTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3RhZ2xpYi90YWdsaWJfMS45LjEuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciByZWFkaW5nIGFuZCBlZGl0aW5nIHRoZSBtZXRhLWRhdGEgb2YgcG9wdWxhciBhdWRpbyBmb3JtYXRzIgorU0VDVElPTiA9ICJsaWJzL211bHRpbWVkaWEiCitIT01FUEFHRSA9ICJodHRwOi8vdGFnbGliLmdpdGh1Yi5pby8iCitMSUNFTlNFID0gIkxHUEx2Mi4xIHwgTVBMLTEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxHUEw7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTVBMO21kNT1iZmUxZjc1ZDYwNjkxMmE0MTExYzkwNzQzZDZjNzMyNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90YWdsaWIvYXVkaW9wcm9wZXJ0aWVzLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yNDttZDU9OWRmMmM3Mzk5NTE5YjczMTA1NjhhN2M1NTA0MmVjZWUiCisKK0RFUEVORFMgPSAiemxpYiIKKworU1JDX1VSSSA9ICJodHRwOi8vdGFnbGliLmdpdGh1Yi5pby9yZWxlYXNlcy8ke0JQfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiMGQzNWRmOTY4MjJiYmQ1NjRjNTUwNGNiM2MyZTRkODYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzJkMzcxY2QxNDE5YTg3YWUyMDA0NDdhNTNiZmYyYmUyMTkyODMwNzFlODBmZDEyMzM3OTI4Y2M5NjdkYzcxYSIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS90YWdsaWItY29uZmlnIgorCitpbmhlcml0IGNtYWtlIHBrZ2NvbmZpZyBiaW5jb25maWctZGlzYWJsZWQKKworUEFDS0FHRVMgPSsgIiR7UE59LWMiCitGSUxFU18ke1BOfS1jID0gIiR7bGliZGlyfS9saWJ0YWdfYy5zby4qIgorCitFWFRSQV9PRUNNQUtFID0gIi1ETElCX1NVRkZJWD0ke0BkLmdldFZhcignYmFzZWxpYicsIFRydWUpLnJlcGxhY2UoJ2xpYicsICcnKX0iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlybSAtZiAke1N9L2FkbWluL2x0bWFpbi5zaAorCXJtIC1mICR7U30vYWRtaW4vbGlidG9vbC5tNC5pbgorCSMgRG9uJ3QgaGF2ZSBhIGZsb2F0aW5nIGRlcGVuZGVueSBvbiBib29zdAorCXNlZCAtaSAtZSAicy9hdG9taWMuaHBwL2F0b21pYy1ub3QtZXhpc3QuaHBwLyIgJHtTfS9Db25maWd1cmVDaGVja3MuY21ha2UgJHtTfS90YWdsaWIvdG9vbGtpdC90cmVmY291bnRlci5jcHAKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC91c2VyLWNyZWF0aW9uL3h1c2VyLWFjY291bnRfMC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC91c2VyLWNyZWF0aW9uL3h1c2VyLWFjY291bnRfMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YmE5N2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3VzZXItY3JlYXRpb24veHVzZXItYWNjb3VudF8wLjEuYmIKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJDcmVhdGVzIGFuICd4dXNlcicgYWNjb3VudCB1c2VkIGZvciBydW5uaW5nIFgxMSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1NSQ19VUkkgPSAiIgorCitpbmhlcml0IGFsbGFyY2ggdXNlcmFkZAorCitkb19jb25maWd1cmUoKSB7CisgICAgOgorfQorCitkb19jb21waWxlKCkgeworICAgIDoKK30KKworZG9faW5zdGFsbCgpIHsKKyAgICA6Cit9CisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitHUk9VUEFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSBzaHV0ZG93biIKK1VTRVJBRERfUEFSQU1fJHtQTn0gPSAiLS1jcmVhdGUtaG9tZSBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tZ3JvdXBzIHZpZGVvLHR0eSxhdWRpbyxpbnB1dCxzaHV0ZG93bixkaXNrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS11c2VyLWdyb3VwIHh1c2VyIgorCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLTAuMjguMi9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGUtMC4yOC4yL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzYzZDM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLTAuMjguMi9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTE1NDVdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIHZ0ZS0wLjI4LjIvZ25vbWUtcHR5LWhlbHBlci9jb25maWd1cmUuaW4gdnRlLTAuMjguMi9nbm9tZS1wdHktaGVscGVyL2NvbmZpZ3VyZS5pbgorLS0tIHZ0ZS0wLjI4LjIvZ25vbWUtcHR5LWhlbHBlci9jb25maWd1cmUuaW4JMjAxMC0wNy0xNSAyMDowODo0NC4wMDAwMDAwMDAgKzAzMDAKKysrKyB2dGUtMC4yOC4yL2dub21lLXB0eS1oZWxwZXIvY29uZmlndXJlLmluCTIwMTMtMDEtMTEgMTQ6NTA6MzQuOTcxMDI3NDQwICswMjAwCitAQCAtOCw3ICs4LDYgQEAKKyBBQ19JU0NfUE9TSVgKKyBBQ19QUk9HX0NDCisgQUNfU1REQ19IRUFERVJTCistQU1fUFJPR19DQ19TVERDCisKKyBpZiB0ZXN0IC16ICIkZW5hYmxlX21haW50YWluZXJfbW9kZSI7IHRoZW4KKyAgIGVuYWJsZV9tYWludGFpbmVyX21vZGU9eWVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGUuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzQwNjJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLmluYwpAQCAtMCwwICsxLDE2IEBACitTVU1NQVJZID0gIlZpcnR1YWwgdGVybWluYWwgZW11bGF0b3IgR1RLKyB3aWRnZXQgbGlicmFyeSIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvYnVnbGlzdC5jZ2k/cHJvZHVjdD12dGUiCitMSUNFTlNFID0gIkxHUEx2Mi4wIgorREVQRU5EUyA9ICIgZ2xpYi0yLjAgZ3RrKyBpbnRsdG9vbC1uYXRpdmUgbmN1cnNlcyBnb2JqZWN0LWludHJvc3BlY3Rpb24tc3R1YiIKK1JERVBFTkRTX2xpYnZ0ZSA9ICJ2dGUtdGVybWNhcCIKKworaW5oZXJpdCBnbm9tZSBndGstZG9jCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtcHl0aG9uIC0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIgorCitQQUNLQUdFUyA9KyAibGlidnRlIHZ0ZS10ZXJtY2FwIgorRklMRVNfbGlidnRlID0gIiR7bGliZGlyfS8qLnNvLiogJHtsaWJleGVjZGlyfS9nbm9tZS1wdHktaGVscGVyIgorRklMRVNfJHtQTn0tZGJnID0rICIke2xpYmV4ZWNkaXJ9Ly5kZWJ1ZyAke3ByZWZpeH0vc3JjICR7YmluZGlyfS8uZGVidWcgXAorICAgICAgICAgICAgICAgJHtsaWJkaXJ9Ly5kZWJ1ZyIKK0ZJTEVTX3Z0ZS10ZXJtY2FwID0gIiR7ZGF0YWRpcn0vdnRlL3Rlcm1jYXAtMC4wIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGVfMC4yOC4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlXzAuMjguMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTAyNWNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlXzAuMjguMi5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIHZ0ZS5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTciCisKK1BSID0gInI2IgorCitTUkNfVVJJICs9ICJmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIgorCitDRkxBR1MgKz0gIi1EX0dOVV9TT1VSQ0UiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjQ5N2YyNmU0NTczMDg2NDllNmVjZTMyYjNiYjE0MmZmIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiODZjZjBiODFhYTAyM2ZhOTNlZDQxNTY1M2Q1MWM5Njc2N2YyMGIyZDczMzRjODkzY2FiYTcxZTQyNjU0YjBhZSIKKworUkVDSVBFX05PX1VQREFURV9SRUFTT04gPSAibWF0Y2hib3gtdGVybWluYWwgbmVlZHMgdG8gYmUgcG9ydGVkIG92ZXIgdG8gbmV3IHZ0ZSBmaXJzdCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLnR4dCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDUzODZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMudHh0CkBAIC0wLDAgKzEsMTUgQEAKK3JlY2lwZXMtYnNwICAgICAgICAgIC0gQW55dGhpbmcgd2l0aCBsaW5rcyB0byBzcGVjaWZpYyBoYXJkd2FyZSBvciBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uCityZWNpcGVzLWNvbm5lY3Rpdml0eSAtIExpYnJhcmllcyBhbmQgYXBwbGljYXRpb25zIHJlbGF0ZWQgdG8gY29tbXVuaWNhdGlvbiB3aXRoIG90aGVyIGRldmljZXMgCityZWNpcGVzLWNvcmUgICAgICAgICAtIFdoYXQncyBuZWVkZWQgdG8gYnVpbGQgYSBiYXNpYyB3b3JraW5nIExpbnV4IGltYWdlIGluY2x1ZGluZyBjb21tb25seSB1c2VkIGRlcGVuZGVuY2llcworcmVjaXBlcy1kZXZ0b29scyAgICAgLSBUb29scyBwcmltYXJpbHkgdXNlZCBieSB0aGUgYnVpbGQgc3lzdGVtIChidXQgY2FuIGFsc28gYmUgdXNlZCBvbiB0YXJnZXRzKQorcmVjaXBlcy1leHRlbmRlZCAgICAgLSBBcHBsaWNhdGlvbnMgd2hpY2ggd2hpbHN0IG5vdCBlc3NlbnRpYWwgYWRkIGZlYXR1cmVzIGNvbXBhcmVkIHRvIHRoZSBhbHRlcm5hdGl2ZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgY29yZS4gTWF5IGJlIG5lZWRlZCBmb3IgZnVsbCB0b29sIGZ1bmN0aW9uYWxpdHkgb3IgTFNCIGNvbXBsaWFuY2UuCityZWNpcGVzLWdub21lICAgICAgICAtIEFsbCB0aGluZ3MgcmVsYXRlZCB0byB0aGUgR1RLKyBhcHBsaWNhdGlvbiBmcmFtZXdvcmsKK3JlY2lwZXMtZ3JhcGhpY3MgICAgIC0gWCBhbmQgb3RoZXIgZ3JhcGhpY2FsbHkgcmVsYXRlZCBzeXN0ZW0gbGlicmFyaWVzICAKK3JlY2lwZXMta2VybmVsICAgICAgIC0gVGhlIGtlcm5lbCBhbmQgZ2VuZXJpYyBhcHBsaWNhdGlvbnMvbGlicmFyaWVzIHdpdGggc3Ryb25nIGtlcm5lbCBkZXBlbmRlbmNpZXMKK3JlY2lwZXMtbHNiNCAgICAgICAgIC0gUmVjaXBlcyBhZGRlZCBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZiBzdXBwb3J0aW5nIHRoZSBMaW51eCBTdGFuZGFyZCBCYXNlIChMU0IpIDQueAorcmVjaXBlcy1tdWx0aW1lZGlhICAgLSBDb2RlY3MgYW5kIHN1cHBvcnQgdXRpbHRpZXMgZm9yIGF1ZGlvLCBpbWFnZXMgYW5kIHZpZGVvCityZWNpcGVzLXJ0ICAgICAgICAgICAtIFByb3ZpZGVzIHBhY2thZ2UgYW5kIGltYWdlIHJlY2lwZXMgZm9yIHVzaW5nIGFuZCB0ZXN0aW5nIHRoZSBQUkVFTVBUX1JUIGtlcm5lbAorcmVjaXBlcy1xdCAgICAgICAgICAgLSBBbGwgdGhpbmdzIHJlbGF0ZWQgdG8gdGhlIFF0IGFwcGxpY2F0aW9uIGZyYW1ld29yaworcmVjaXBlcy1zYXRvICAgICAgICAgLSBUaGUgU2F0byBkZW1vL3JlZmVyZW5jZSBVSS9VWCwgaXRzIGFzc29jaWF0ZWQgYXBwcyBhbmQgY29uZmlndXJhdGlvbiAKK3JlY2lwZXMtc3VwcG9ydCAgICAgIC0gUmVjaXBlcyB1c2VkIGJ5IG90aGVyIHJlY2lwZXMgYnV0IHRoYXQgYXJlIG5vdCBkaXJlY3RseSBpbmNsdWRlZCBpbiBpbWFnZXMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS0zMiBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS0zMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWZkOGQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvYXJtLTMyCkBAIC0wLDAgKzEsNDcgQEAKKyMgZGVmaW5pdGlvbnMgYXNzdW1pbmcgMzItYml0IGFybSBhcmNoaXRlY3R1cmUKKworIyBhcGFjaGUKK2FjX2N2X3NpemVvZl9zaXplX3Q9JHthY19jdl9zaXplb2Zfc2l6ZV90PTR9CithY19jdl9zaXplb2Zfc3NpemVfdD0ke2FjX2N2X3NpemVvZl9zc2l6ZV90PTR9CisKKyMgZ2xpYgorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KKworIyBnbGliLTIuMAorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2ZfaW50bWF4X3Q9JHtnbGliX2N2X3NpemVvZl9pbnRtYXhfdD04fQorZ2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTR9CitnbGliX2N2X3NpemVvZl9zaXplX3Q9JHtnbGliX2N2X3NpemVvZl9zaXplX3Q9NH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz00CisKKyMgamlrZXMKK2FjX2N2X3NpemVvZl93Y2hhcl90PTQKKworIyBPUkJpdDIKK2FjX2N2X2FsaWdub2ZfQ09SQkFfYm9vbGVhbj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2NoYXI9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9kb3VibGU9OAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9mbG9hdD00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmc9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2RvdWJsZT04CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfbG9uZz04CithY19jdl9hbGlnbm9mX0NPUkJBX29jdGV0PTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfcG9pbnRlcj00CithY19jdl9hbGlnbm9mX0NPUkJBX3Nob3J0PTIKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc3RydWN0PTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfd2NoYXI9MgorCisjIGF0LXNwaTItY29yZQorYWNfY3ZfYWxpZ25vZl9jaGFyPTEKK2FjX2N2X2FsaWdub2ZfZGJpbmRfcG9pbnRlcj00CithY19jdl9hbGlnbm9mX2RiaW5kX3N0cnVjdD0xCithY19jdl9hbGlnbm9mX2RidXNfYm9vbF90PTQKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQxNl90PTIKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQzMl90PTQKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQ2NF90PTgKK2FjX2N2X2FsaWdub2ZfZG91YmxlPTgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS02NCBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS02NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGMwOWIyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvYXJtLTY0CkBAIC0wLDAgKzEsNDYgQEAKKyMgZGVmaW5pdGlvbnMgYXNzdW1pbmcgNjQtYml0IGFybSBhcmNoaXRlY3R1cmUKKworIyBnZW5lcmFsCithY19jdl9zaXplb2Zfd2NoYXJfdD00CithY19jdl9zaXplb2Zfc2l6ZV90PTgKK2FjX2N2X3NpemVvZl9zc2l6ZV90PTgKK2FjX2N2X2FsaWdub2ZfY2hhcj0xCithY19jdl9hbGlnbm9mX2RvdWJsZT04CisKKyMgZ2xpYgorI2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KKyNnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorI2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KKworIyBnbGliLTIuMAorI2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KKyNnbGliX2N2X3NpemVvZl9pbnRtYXhfdD0ke2dsaWJfY3Zfc2l6ZW9mX2ludG1heF90PTh9CisjZ2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTR9CisjZ2xpYl9jdl9zaXplb2Zfc2l6ZV90PSR7Z2xpYl9jdl9zaXplb2Zfc2l6ZV90PTR9CisjZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2FjX2N2X2FsaWdub2ZfZ3VpbnQzMj00CithY19jdl9hbGlnbm9mX2d1aW50NjQ9OAorYWNfY3ZfYWxpZ25vZl91bnNpZ25lZF9sb25nPTgKKworIyBPUkJpdDIgKHNob3VsZCBiZSBpbiBtZXRhLWdub21lL3NpdGUvYXJtLTY0KQorI2FjX2N2X2FsaWdub2ZfQ09SQkFfYm9vbGVhbj0xCisjYWNfY3ZfYWxpZ25vZl9DT1JCQV9jaGFyPTEKKyNhY19jdl9hbGlnbm9mX0NPUkJBX2RvdWJsZT04CisjYWNfY3ZfYWxpZ25vZl9DT1JCQV9mbG9hdD00CisjYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nPTQKKyNhY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfZG91YmxlPTgKKyNhY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfbG9uZz04CisjYWNfY3ZfYWxpZ25vZl9DT1JCQV9vY3RldD0xCisjYWNfY3ZfYWxpZ25vZl9DT1JCQV9wb2ludGVyPTQKKyNhY19jdl9hbGlnbm9mX0NPUkJBX3Nob3J0PTIKKyNhY19jdl9hbGlnbm9mX0NPUkJBX3N0cnVjdD0xCisjYWNfY3ZfYWxpZ25vZl9DT1JCQV93Y2hhcj0yCisKKyMgYXQtc3BpMi1jb3JlCithY19jdl9hbGlnbm9mX2RiaW5kX3BvaW50ZXI9OAorYWNfY3ZfYWxpZ25vZl9kYmluZF9zdHJ1Y3Q9MQorYWNfY3ZfYWxpZ25vZl9kYnVzX2Jvb2xfdD00CithY19jdl9hbGlnbm9mX2RidXNfaW50MTZfdD0yCithY19jdl9hbGlnbm9mX2RidXNfaW50MzJfdD00CithY19jdl9hbGlnbm9mX2RidXNfaW50NjRfdD04CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS1jb21tb24gYi95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tY29tbW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZTVkNDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tY29tbW9uCkBAIC0wLDAgKzEsMTU5IEBACisjIGdlbmVyYWwKK2FjX2N2X3ZhX3ZhbF9jb3B5PSR7YWNfY3ZfdmFfdmFsX2NvcHk9eWVzfQorYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPSR7YWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPXllc30KK2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KK2FjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9bm99CithY19jdl9mdW5jX3N0YXRfaWdub3Jlc190cmFpbGluZ19zbGFzaD0ke2FjX2N2X2Z1bmNfc3RhdF9pZ25vcmVzX3RyYWlsaW5nX3NsYXNoPW5vfQorYWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF9oPSR7YWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF9oPW5vfQorYWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF91aW9faD0ke2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfdWlvX2g9bm99CithY19jdl9zY3RwPSR7YWNfY3Zfc2N0cD1ub30KKworIyBhcGFjaGUKK2FjX2N2X2Z1bmNfcHRocmVhZF9rZXlfZGVsZXRlPSR7YWNfY3ZfZnVuY19wdGhyZWFkX2tleV9kZWxldGU9eWVzfQorYXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPSR7YXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPW5vfQorYXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz0ke2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9eWVzfQorCisjIGJhc2gKK2FjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPXllc30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPW1pc3Npbmd9CisKKyMgY29yZXV0aWxzCit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxOX0KKworIyBjdnMKK2N2c19jdl9mdW5jX3ByaW50Zl9wdHI9JHtjdnNfY3ZfZnVuY19wcmludGZfcHRyPXllc30KKworIyBkYiAoc2xlZXB5Y2F0KQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nJ30KKworIyBELUJVUworYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBlZGIKK2RiX2N2X3NwaW5sb2Nrcz0ke2RiX2N2X3NwaW5sb2Nrcz1ub30KKworIyBldHRlcmNhcAorZXR0ZXJjYXBfY3ZfdHlwZV9zb2NrbGVuX3Q9JHtldHRlcmNhcF9jdl90eXBlX3NvY2tsZW5fdD15ZXN9CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9Citjb21wYXRfY3ZfZnVuY19iYXNlbmFtZV93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX2Jhc2VuYW1lX3dvcmtzPW5vfQorY29tcGF0X2N2X2Z1bmNfZGlybmFtZV93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX2Rpcm5hbWVfd29ya3M9bm99CisKKyMgZm5tYXRjaAorYWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPSR7YWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPXllc30KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworIyBnbGliCitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CitnbGliX2N2X3ZhX3ZhbF9jb3B5PSR7Z2xpYl9jdl92YV92YWxfY29weT15ZXN9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD15ZXN9CitnbGliX2N2X3N5c19wdGhyZWFkX2dldHNwZWNpZmljX3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9nZXRzcGVjaWZpY19wb3NpeD15ZXN9CitnbGliX2N2X3N5c19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9jb25kX3RpbWVkd2FpdF9wb3NpeD15ZXN9CisKKyMgZ2xpYi0yLjAKK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3Zfc3lzX3VzZV9waWRfbmljZW5lc3Nfc3Vycm9nYXRlPSR7Z2xpYl9jdl9zeXNfdXNlX3BpZF9uaWNlbmVzc19zdXJyb2dhdGU9eWVzfQorCisjZ3N0cmVhbWVyCithc19jdl91bmFsaWduZWRfYWNjZXNzPSR7YXNfY3ZfdW5hbGlnbmVkX2FjY2Vzcz1ub30KKworIyBodHRwcGMKK2FjX2N2X3N0cmVycm9yX3JfU1VTdjM9JHthY19jdl9zdHJlcnJvcl9yX1NVU3YzPW5vfQorCisjIGxmdHAKK2FjX2N2X25lZWRfdHJpbz0ke2FjX2N2X25lZWRfdHJpbz1ub30KK2xmdHBfY3ZfdmFfdmFsX2NvcHk9JHtsZnRwX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworIyBsaWJlc210cAorYWN4X3dvcmtpbmdfc25wcmludGY9JHthY3hfd29ya2luZ19zbnByaW50Zj15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIGxpYm5ldCAKK2FjX2xpYm5ldF9oYXZlX3BhY2tldF9zb2NrZXQ9JHthY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PXllc30KKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIGxpYnhmY2U0dXRpbAord2l0aF9icm9rZW5fcHV0ZW52PSR7d2l0aF9icm9rZW5fcHV0ZW52PW5vfQorCisjIGxpbmtzCithY19jdl9saWJfcG5nX3BuZ19jcmVhdGVfaW5mb19zdHJ1Y3Q9JHthY19jdl9saWJfcG5nX3BuZ19jcmVhdGVfaW5mb19zdHJ1Y3Q9eWVzfQorCisjIG15c3FsCitteXNxbF9jdl9mdW5jX2F0b21pY19zdWI9JHtteXNxbF9jdl9mdW5jX2F0b21pY19zdWI9bm99CitteXNxbF9jdl9mdW5jX2F0b21pY19hZGQ9JHtteXNxbF9jdl9mdW5jX2F0b21pY19hZGQ9bm99CisKKyMgbmFubworYWNfY3ZfcmVnZXhlY19zZWdmYXVsdF9lbXB0eXN0cj0ke2FjX2N2X3JlZ2V4ZWNfc2VnZmF1bHRfZW1wdHlzdHI9bm99CituYW5vX2N2X2Z1bmNfcmVnZXhlY19zZWd2X2VtcHR5c3RyPSR7bmFub19jdl9mdW5jX3JlZ2V4ZWNfc2Vndl9lbXB0eXN0cj1ub30KKworIyBwaHAKK2FjX2N2X3ByZWFkPSR7YWNfY3ZfcHJlYWQ9bm99CithY19jdl9wd3JpdGU9JHthY19jdl9wd3JpdGU9bm99CitwaHBfY3ZfbGliX2Nvb2tpZV9pb19mdW5jdGlvbnNfdXNlX29mZjY0X3Q9JHtwaHBfY3ZfbGliX2Nvb2tpZV9pb19mdW5jdGlvbnNfdXNlX29mZjY0X3Q9eWVzfQorCisjIHJzeW5jCityc3luY19jdl9IQVZFX0JST0tFTl9MQVJHRUZJTEU9JHtyc3luY19jdl9IQVZFX0JST0tFTl9MQVJHRUZJTEU9bm99Cityc3luY19jdl9IQVZFX1NPQ0tFVFBBSVI9JHtyc3luY19jdl9IQVZFX1NPQ0tFVFBBSVI9eWVzfQorcnN5bmNfY3ZfSEFWRV9MT05HTE9ORz0ke3JzeW5jX2N2X0hBVkVfTE9OR0xPTkc9eWVzfQorcnN5bmNfY3ZfSEFWRV9PRkY2NF9UPSR7cnN5bmNfY3ZfSEFWRV9PRkY2NF9UPW5vfQorcnN5bmNfY3ZfSEFWRV9TSE9SVF9JTk9fVD0ke3JzeW5jX2N2X0hBVkVfU0hPUlRfSU5PX1Q9bm99Cityc3luY19jdl9IQVZFX1VOU0lHTkVEX0NIQVI9JHtyc3luY19jdl9IQVZFX1VOU0lHTkVEX0NIQVI9bm99Cityc3luY19jdl9IQVZFX0JST0tFTl9SRUFERElSPSR7cnN5bmNfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj1ub30KK3JzeW5jX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7cnN5bmNfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorcnN5bmNfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPSR7cnN5bmNfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPXllc30KK3JzeW5jX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtyc3luY19jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9OVE9BPSR7cnN5bmNfY3ZfUkVQTEFDRV9JTkVUX05UT0E9bm99Cityc3luY19jdl9SRVBMQUNFX0lORVRfQVRPTj0ke3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9BVE9OPW5vfQorCisjIHNjcmVlbgorc2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPSR7c2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPXllc30KK3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9JHtzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD0ke3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD15ZXN9CisKKyMgc2xybgorc2xybl9jdl92YV92YWxfY29weT0ke3Nscm5fY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIHNvY2F0CithY19jdl9pc3BlZWRfb2Zmc2V0PSR7YWNfY3ZfaXNwZWVkX29mZnNldD0xM30KK3NjX2N2X3Rlcm1pb3NfaXNwZWVkPSR7c2NfY3ZfdGVybWlvc19pc3BlZWQ9eWVzfQorCisjIHNzaAorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2RpcmVudF9oYXZlX3NwYWNlX2RfbmFtZT15ZXN9CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPXllc30KKworIyBzdGFydHVwLW5vdGlmaWNhdGlvbgorbGZfY3Zfc2FuZV9yZWFsbG9jPXllcworCisjIHhmZm0KK2ptX2N2X2Z1bmNfd29ya2luZ19yZWFkZGlyPXllcworCisjIGV2b2x1dGlvbi1kYXRhLXNlcnZlcgorYWNfY3ZfbGliaWNvbnZfdXRmOD0ke2FjX2N2X2xpYmljb252X3V0Zjg9eWVzfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tZGFyd2luIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvYXJtLWRhcndpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWZmMDk3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvYXJtLWRhcndpbgpAQCAtMCwwICsxLDExIEBACithY19jdl9saWJfbV9zaW49JHthY19jdl9saWJfbV9zaW49eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9zcGF3bj0ke2FjX2N2X2Z1bmNfcG9zaXhfc3Bhd249bm99CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9bm99CithY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9bm99CithY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9bm99CithY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9JHthY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9bm99CitiYXNoX2N2X2hhdmVfbWJzdGF0ZV90PSR7YmFzaF9jdl9oYXZlX21ic3RhdGVfdD15ZXN9CithY19jdl9mdW5jX3N0cmVycm9yX3I9JHthY19jdl9mdW5jX3N0cmVycm9yX3I9bm99CithY19jdl92YV9jb3B5PSR7YWNfY3ZfdmFfY29weT15ZXN9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tZGFyd2luOCBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS1kYXJ3aW44Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZmYwOTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tZGFyd2luOApAQCAtMCwwICsxLDExIEBACithY19jdl9saWJfbV9zaW49JHthY19jdl9saWJfbV9zaW49eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9zcGF3bj0ke2FjX2N2X2Z1bmNfcG9zaXhfc3Bhd249bm99CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9bm99CithY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9bm99CithY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9bm99CithY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9JHthY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9bm99CitiYXNoX2N2X2hhdmVfbWJzdGF0ZV90PSR7YmFzaF9jdl9oYXZlX21ic3RhdGVfdD15ZXN9CithY19jdl9mdW5jX3N0cmVycm9yX3I9JHthY19jdl9mdW5jX3N0cmVycm9yX3I9bm99CithY19jdl92YV9jb3B5PSR7YWNfY3ZfdmFfY29weT15ZXN9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tbGludXggYi95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRiMTg4OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS1saW51eApAQCAtMCwwICsxLDE2MCBAQAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vCithY19jdl9zaXplb2ZfX19pbnQ2ND0ke2FjX2N2X3NpemVvZl9fX2ludDY0PTB9CithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2Zfd2NoYXJfdD0ke2FjX2N2X3NpemVvZl93Y2hhcl90PTF9CithY19jdl9zaXplb2ZfdW5zaWduZWRfY2hhcj0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9jaGFyPTF9CithY19jdl9zaXplb2ZfYm9vbD0ke2FjX2N2X3NpemVvZl9ib29sPTF9CithY19jdl9zaXplb2ZfY2hhcl9wPSR7YWNfY3Zfc2l6ZW9mX2ludF9wPTR9CithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3Zfc2l6ZW9mX2ludF9wPSR7YWNfY3Zfc2l6ZW9mX2ludF9wPTR9CithY19jdl9zaXplb2ZfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nPTR9CithY19jdl9zaXplb2ZfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfbG9uZ19pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfb2ZmX3Q9JHthY19jdl9zaXplb2Zfb2ZmX3Q9NH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl9zaXplX3Q9JHthY19jdl9zaXplb2Zfc2l6ZV90PTR9CithY19jdl9zaXplb2Zfdm9pZF9wPSR7YWNfY3Zfc2l6ZW9mX3ZvaWRfcD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfcD0ke2FjX2N2X3NpemVvZl9sb25nX3A9NH0KK2FjX2N2X3NpemVvZl9mbG9hdD0ke2FjX2N2X3NpemVvZl9mbG9hdD00fQorYWNfY3Zfc2l6ZW9mX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9kb3VibGU9OH0KK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT04fQorYWNfY3Zfc2l6ZW9mX3B0cmRpZmZfdD0ke2dsaWJfY3Zfc2l6ZW9mX3B0cmRpZmZfdD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PTJ9CithY19jdl9zaXplb2ZfdW5zaWduZWQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWQ9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyPSR7YWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyPTF9CisKK2FjX2N2X3VjaGFyPSR7YWNfY3ZfdWNoYXI9bm99CithY19jdl91aW50PSR7YWNfY3ZfdWludD15ZXN9CithY19jdl91bG9uZz0ke2FjX2N2X3Vsb25nPXllc30KK2FjX2N2X3VzaG9ydD0ke2FjX2N2X3VzaG9ydD15ZXN9CithY19jdl90aW1lX3JfdHlwZT0ke2FjX2N2X3RpbWVfcl90eXBlPVBPU0lYfQorCisjIHNhbWJhCitzYW1iYV9jdl9CUk9LRU5fTklTUExVU19JTkNMVURFX0ZJTEVTPSR7c2FtYmFfY3ZfQlJPS0VOX05JU1BMVVNfSU5DTFVERV9GSUxFUz15ZXN9CitzYW1iYV9jdl9CUk9LRU5fUkVESEFUXzdfU1lTVEVNX0hFQURFUlM9JHtzYW1iYV9jdl9CUk9LRU5fUkVESEFUXzdfU1lTVEVNX0hFQURFUlM9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9GQ05UTDY0X0xPQ0tTPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fRkNOVEw2NF9MT0NLUz1ub30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX0dFVEdST1VQUz0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0dFVEdST1VQUz1ub30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX0xJTlVYX1NFTkRGSUxFPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fTElOVVhfU0VOREZJTEU9eWVzfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9eWVzfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUl9OQU1FPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUl9OQU1FPW5vfQorc2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPSR7c2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPXllc30KK3NhbWJhX2N2X0hBVkVfREVWNjRfVD0ke3NhbWJhX2N2X0hBVkVfREVWNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfREVWSUNFX01BSk9SX0ZOPSR7c2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUFKT1JfRk49eWVzfQorc2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUlOT1JfRk49JHtzYW1iYV9jdl9IQVZFX0RFVklDRV9NSU5PUl9GTj15ZXN9CitzYW1iYV9jdl9IQVZFX0RRQl9GU09GVExJTUlUPSR7c2FtYmFfY3ZfSEFWRV9EUUJfRlNPRlRMSU1JVD1ub30KK3NhbWJhX2N2X0hBVkVfRVhQTElDSVRfTEFSR0VGSUxFX1NVUFBPUlQ9JHtzYW1iYV9jdl9IQVZFX0VYUExJQ0lUX0xBUkdFRklMRV9TVVBQT1JUPXllc30KK3NhbWJhX2N2X0hBVkVfRkFNX0g9JHtzYW1iYV9jdl9IQVZFX0ZBTV9IPW5vfQorc2FtYmFfY3ZfSEFWRV9GQ05UTF9MT0NLPSR7c2FtYmFfY3ZfSEFWRV9GQ05UTF9MT0NLPXllc30KK3NhbWJhX2N2X0hBVkVfRlRSVU5DQVRFX0VYVEVORD0ke3NhbWJhX2N2X0hBVkVfRlRSVU5DQVRFX0VYVEVORD15ZXN9CitzYW1iYV9jdl9IQVZFX0ZVTkNUSU9OX01BQ1JPPSR7c2FtYmFfY3ZfSEFWRV9GVU5DVElPTl9NQUNSTz15ZXN9CitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KK3NhbWJhX2N2X0hBVkVfSU5PNjRfVD0ke3NhbWJhX2N2X0hBVkVfSU5PNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfSU5UMTZfRlJPTV9SUENfUlBDX0g9JHtzYW1iYV9jdl9IQVZFX0lOVDE2X0ZST01fUlBDX1JQQ19IPW5vfQorc2FtYmFfY3ZfSEFWRV9JTlQzMl9GUk9NX1JQQ19SUENfSD0ke3NhbWJhX2N2X0hBVkVfSU5UMzJfRlJPTV9SUENfUlBDX0g9bm99CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPXllc30KK3NhbWJhX2N2X0hBVkVfTUFLRURFVj0ke3NhbWJhX2N2X0hBVkVfTUFLRURFVj15ZXN9CitzYW1iYV9jdl9IQVZFX01NQVA9JHtzYW1iYV9jdl9IQVZFX01NQVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9OQVRJVkVfSUNPTlY9JHtzYW1iYV9jdl9IQVZFX05BVElWRV9JQ09OVj15ZXN9CitzYW1iYV9jdl9IQVZFX09GRjY0X1Q9JHtzYW1iYV9jdl9IQVZFX09GRjY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX1JPT1Q9JHtzYW1iYV9jdl9IQVZFX1JPT1Q9eWVzfQorc2FtYmFfY3ZfSEFWRV9SUENfQVVUSF9FUlJPUl9DT05GTElDVD0ke3NhbWJhX2N2X0hBVkVfUlBDX0FVVEhfRVJST1JfQ09ORkxJQ1Q9bm99CitzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPSR7c2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFPSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRT15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TT0NLX1NJTl9MRU49JHtzYW1iYV9jdl9IQVZFX1NPQ0tfU0lOX0xFTj1ub30KK3NhbWJhX2N2X0hBVkVfU1RBVF9TVF9CTEtTSVpFPSR7c2FtYmFfY3ZfSEFWRV9TVEFUX1NUX0JMS1NJWkU9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVEFUX1NUX0JMT0NLUz0ke3NhbWJhX2N2X0hBVkVfU1RBVF9TVF9CTE9DS1M9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRElSNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9ESVI2ND1ub30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0RJUkVOVDY0PSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRElSRU5UNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9UUlVOQ0FURURfU0FMVD0ke3NhbWJhX2N2X0hBVkVfVFJVTkNBVEVEX1NBTFQ9bm99CitzYW1iYV9jdl9IQVZFX1VJTlQxNl9GUk9NX1JQQ19SUENfSD0ke3NhbWJhX2N2X0hBVkVfVUlOVDE2X0ZST01fUlBDX1JQQ19IPW5vfQorc2FtYmFfY3ZfSEFWRV9VSU5UMzJfRlJPTV9SUENfUlBDX0g9JHtzYW1iYV9jdl9IQVZFX1VJTlQzMl9GUk9NX1JQQ19SUENfSD1ub30KK3NhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj0ke3NhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj15ZXN9CitzYW1iYV9jdl9IQVZFX1VUSU1CVUY9JHtzYW1iYV9jdl9IQVZFX1VUSU1CVUY9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9BRERSPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9BRERSPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfRVhJVD0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfRVhJVD15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX0hPU1Q9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX0hPU1Q9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9JRD0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfSUQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9OQU1FPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9OQU1FPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfUElEPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9QSUQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9USU1FPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9USU1FPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfVFY9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX1RWPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfVFlQRT0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfVFlQRT15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX1VTRVI9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX1VTRVI9eWVzfQorc2FtYmFfY3ZfSEFWRV9VWF9VVF9TWVNMRU49JHtzYW1iYV9jdl9IQVZFX1VYX1VUX1NZU0xFTj1ub30KK3NhbWJhX2N2X0hBVkVfVkFfQ09QWT0ke3NhbWJhX2N2X0hBVkVfVkFfQ09QWT15ZXN9CitzYW1iYV9jdl9IQVZFX1dPUktJTkdfQUZfTE9DQUw9JHtzYW1iYV9jdl9IQVZFX1dPUktJTkdfQUZfTE9DQUw9eWVzfQorc2FtYmFfY3ZfSEFWRV9XZXJyb3I9JHtzYW1iYV9jdl9IQVZFX1dlcnJvcj15ZXN9CitzYW1iYV9jdl9QVVRVVExJTkVfUkVUVVJOU19VVE1QPSR7c2FtYmFfY3ZfUFVUVVRMSU5FX1JFVFVSTlNfVVRNUD15ZXN9CitzYW1iYV9jdl9RVU9UQV9XT1JLUz0ke3NhbWJhX2N2X1FVT1RBX1dPUktTPXllc30KK3NhbWJhX2N2X1JFQUxQQVRIX1RBS0VTX05VTEw9JHtzYW1iYV9jdl9SRUFMUEFUSF9UQUtFU19OVUxMPXllc30KK3NhbWJhX2N2X1JFUExBQ0VfR0VUUEFTUz0ke3NhbWJhX2N2X1JFUExBQ0VfR0VUUEFTUz15ZXN9CitzYW1iYV9jdl9SRVBMQUNFX0lORVRfTlRPQT0ke3NhbWJhX2N2X1JFUExBQ0VfSU5FVF9OVE9BPW5vfQorc2FtYmFfY3ZfUkVQTEFDRV9SRUFERElSPSR7c2FtYmFfY3ZfUkVQTEFDRV9SRUFERElSPW5vfQorc2FtYmFfY3ZfUlVOX1FVT1RBX1RFU1RTPSR7c2FtYmFfY3ZfUlVOX1FVT1RBX1RFU1RTPXllc30KK3NhbWJhX2N2X1NFRUtESVJfUkVUVVJOU19WT0lEPSR7c2FtYmFfY3ZfU0VFS0RJUl9SRVRVUk5TX1ZPSUQ9eWVzfQorc2FtYmFfY3ZfU0laRU9GX0RFVl9UPSR7c2FtYmFfY3ZfU0laRU9GX0RFVl9UPXllc30KK3NhbWJhX2N2X1NJWkVPRl9JTk9fVD0ke3NhbWJhX2N2X1NJWkVPRl9JTk9fVD15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9eWVzfQorc2FtYmFfY3ZfU1lTQ09ORl9TQ19OR1JPVVBTX01BWD0ke3NhbWJhX2N2X1NZU0NPTkZfU0NfTkdST1VQU19NQVg9eWVzfQorc2FtYmFfY3ZfU1lTQ09ORl9TQ19OUFJPQ0VTU09SU19PTkxOPSR7c2FtYmFfY3ZfU1lTQ09ORl9TQ19OUFJPQ0VTU09SU19PTkxOPXllc30KK3NhbWJhX2N2X1NZU0NPTkZfU0NfTlBST0NfT05MTj0ke3NhbWJhX2N2X1NZU0NPTkZfU0NfTlBST0NfT05MTj1ub30KK3NhbWJhX2N2X1NZU0NPTkZfU0NfUEFHRVNJWkU9JHtzYW1iYV9jdl9TWVNDT05GX1NDX1BBR0VTSVpFPXllc30KK3NhbWJhX2N2X1NZU1FVT1RBX0ZPVU5EPSR7c2FtYmFfY3ZfU1lTUVVPVEFfRk9VTkQ9eWVzfQorc2FtYmFfY3ZfU1lTUVVPVEFfV09SS1M9JHtzYW1iYV9jdl9TWVNRVU9UQV9XT1JLUz15ZXN9CitzYW1iYV9jdl9TWVNRVU9UQV9XT1JLU19YRlM9JHtzYW1iYV9jdl9TWVNRVU9UQV9XT1JLU19YRlM9eWVzfQorc2FtYmFfY3ZfVFJZX1FVT1RBUz0ke3NhbWJhX2N2X1RSWV9RVU9UQVM9bm99CitzYW1iYV9jdl9UUllfU1lTX1FVT1RBUz0ke3NhbWJhX2N2X1RSWV9TWVNfUVVPVEFTPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPXllc30KK3NhbWJhX2N2X1dFX1VTRV9TWVNfUVVPVEFTPSR7c2FtYmFfY3ZfV0VfVVNFX1NZU19RVU9UQVM9eWVzfQorc2FtYmFfY3ZfV0lUSF9BRlM9JHtzYW1iYV9jdl9XSVRIX0FGUz1ub30KK3NhbWJhX2N2X1dJVEhfRkFLRV9LQVNFUlZFUj0ke3NhbWJhX2N2X1dJVEhfRkFLRV9LQVNFUlZFUj1ub30KK3NhbWJhX2N2X1dJVEhfUVVPVEFTPSR7c2FtYmFfY3ZfV0lUSF9RVU9UQVM9YXV0b30KK3NhbWJhX2N2X1dJVEhfU1lTX1FVT1RBUz0ke3NhbWJhX2N2X1dJVEhfU1lTX1FVT1RBUz1hdXRvfQorc2FtYmFfY3ZfV0lUSF9WRlNfQUZTQUNMPSR7c2FtYmFfY3ZfV0lUSF9WRlNfQUZTQUNMPW5vfQorc2FtYmFfY3ZfY29tcGlsZXJfc3VwcG9ydHNfbGw9JHtzYW1iYV9jdl9jb21waWxlcl9zdXBwb3J0c19sbD15ZXN9CitzYW1iYV9jdl9mb3VuZF94ZnNfaGVhZGVyPSR7c2FtYmFfY3ZfZm91bmRfeGZzX2hlYWRlcj15ZXN9CitzYW1iYV9jdl9oYXZlX2xvbmdsb25nPSR7c2FtYmFfY3ZfaGF2ZV9sb25nbG9uZz15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9eWVzfQorc2FtYmFfY3ZfaW1tZWRpYXRlX3N0cnVjdHVyZXM9JHtzYW1iYV9jdl9pbW1lZGlhdGVfc3RydWN0dXJlcz15ZXN9CitzYW1iYV9jdl9vcHRpbWl6ZV9vdXRfZnVuY2F0aW9uX2NhbGxzPSR7c2FtYmFfY3Zfb3B0aW1pemVfb3V0X2Z1bmNhdGlvbl9jYWxscz15ZXN9CitzYW1iYV9jdl9zaWdfYXRvbWljX3Q9JHtzYW1iYV9jdl9zaWdfYXRvbWljX3Q9eWVzfQorc2FtYmFfY3Zfc29ja2xlbl90PSR7c2FtYmFfY3Zfc29ja2xlbl90PXllc30KK3NhbWJhX2N2X3N0cnVjdF90aW1lc3BlYz0ke3NhbWJhX2N2X3N0cnVjdF90aW1lc3BlYz15ZXN9CitzYW1iYV9jdl9zeXNxdW90YXNfZmlsZT0ke3NhbWJhX2N2X3N5c3F1b3Rhc19maWxlPWxpYi9zeXNxdW90YXNfbGludXguY30KK3NhbWJhX2N2X3VuaXhzb2NrZXQ9JHtzYW1iYV9jdl91bml4c29ja2V0PXllc30KK3NhbWJhX2N2X3ZvbGF0aWxlPSR7c2FtYmFfY3Zfdm9sYXRpbGU9eWVzfQorCisjb2xkZXIgc2FtYmUgZGVmaW5lcworc2FtYmFfY3ZfVVNFX1NFVEVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VURVVJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFVJRFg9JHtzYW1iYV9jdl9VU0VfU0VUVUlEWD15ZXN9CitzYW1iYV9jdl9MSU5VWF9MRlNfU1VQUE9SVD0ke3NhbWJhX2N2X0xJTlVYX0xGU19TVVBQT1JUPXllc30KKworIyBjbGFtYXYKK2NsYW1hdl9hdl9mdW5jX3dvcmtpbmdfc25wcmludGZfbG9uZz0ke2NsYW1hdl9hdl9mdW5jX3dvcmtpbmdfc25wcmludGZfbG9uZz15ZXN9CitjbGFtYXZfYXZfaGF2ZV9pbl9wb3J0X3Q9JHtjbGFtYXZfYXZfaGF2ZV9pbl9wb3J0X3Q9eWVzfQorY2xhbWF2X2F2X2hhdmVfaW5fYWRkcl90PSR7Y2xhbWF2X2F2X2hhdmVfaW5fYWRkcl90PXllc30KK2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9JHthY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPXllc30KKworI2RidXMKK2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz0ke2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz15ZXN9CisKKyMgbGZ0cAorYWNfY3ZfZmlsZV9fX2Rldl9wdGNfPXllcworCisjIGd1aWxlCithY19jdl9mdW5jX3B0aHJlYWRfYXR0cl9nZXRzdGFjaz0ke2FjX2N2X2Z1bmNfcHRocmVhZF9hdHRyX2dldHN0YWNrPXllc30KKworIyBnbmV0CithY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX3NhX2xlbj0ke2FjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfc2FfbGVuPW5vfQorYWNfY3ZfZ25ldF9oYXZlX2Fic3RyYWN0X3NvY2tldHM9JHthY19jdl9nbmV0X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz1ub30KK2duZXRfc29ja2FkZHJfZmFtaWx5X2ZpZWxkX25hbWU9JHtnbmV0X3NvY2thZGRyX2ZhbWlseV9maWVsZF9uYW1lPXNzX2ZhbWlseX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS1saW51eC11Y2xpYmMgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tbGludXgtdWNsaWJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZTdjNmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tbGludXgtdWNsaWJjCkBAIC0wLDAgKzEsMTA1IEBACithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm8KK2FjX2N2X3NpemVvZl9fX2ludDY0PSR7YWNfY3Zfc2l6ZW9mX19faW50NjQ9MH0KK2FjX2N2X3NpemVvZl9jaGFyPSR7YWNfY3Zfc2l6ZW9mX2NoYXI9MX0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CithY19jdl9zaXplb2ZfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nPTR9CithY19jdl9zaXplb2ZfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfbG9uZ19pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfc2hvcnQ9JHthY19jdl9zaXplb2Zfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9JHthY19jdl9zaXplb2Zfc2hvcnRfaW50PTJ9CithY19jdl9zaXplb2Zfc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NpemVfdD00fQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9NH0KK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT04fQorCithY19jdl91Y2hhcj0ke2FjX2N2X3VjaGFyPW5vfQorYWNfY3ZfdWludD0ke2FjX2N2X3VpbnQ9eWVzfQorYWNfY3ZfdWxvbmc9JHthY19jdl91bG9uZz15ZXN9CithY19jdl91c2hvcnQ9JHthY19jdl91c2hvcnQ9eWVzfQorCithY19jdl90aW1lX3JfdHlwZT0ke2FjX2N2X3RpbWVfcl90eXBlPVBPU0lYfQorCisjIHNhbWJhCitzYW1iYV9jdl9CUk9LRU5fTklTUExVU19JTkNMVURFX0ZJTEVTPSR7c2FtYmFfY3ZfQlJPS0VOX05JU1BMVVNfSU5DTFVERV9GSUxFUz15ZXN9CitzYW1iYV9jdl9CUk9LRU5fUkVESEFUXzdfU1lTVEVNX0hFQURFUlM9JHtzYW1iYV9jdl9CUk9LRU5fUkVESEFUXzdfU1lTVEVNX0hFQURFUlM9bm99CitzYW1iYV9jdl9GVFJVTkNBVEVfTkVFRFNfUk9PVD0ke3NhbWJhX2N2X0ZUUlVOQ0FURV9ORUVEU19ST09UPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fRkNOVEw2NF9MT0NLUz0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0ZDTlRMNjRfTE9DS1M9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9HRVRHUk9VUFM9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9HRVRHUk9VUFM9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9MSU5VWF9TRU5ERklMRT0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0xJTlVYX1NFTkRGSUxFPXllc30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSPW5vfQorc2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPSR7c2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPXllc30KK3NhbWJhX2N2X0hBVkVfREVWNjRfVD0ke3NhbWJhX2N2X0hBVkVfREVWNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfREVWSUNFX01BSk9SX0ZOPSR7c2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUFKT1JfRk49eWVzfQorc2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUlOT1JfRk49JHtzYW1iYV9jdl9IQVZFX0RFVklDRV9NSU5PUl9GTj15ZXN9CitzYW1iYV9jdl9IQVZFX0RRQl9GU09GVExJTUlUPSR7c2FtYmFfY3ZfSEFWRV9EUUJfRlNPRlRMSU1JVD1ub30KK3NhbWJhX2N2X0hBVkVfRVhQTElDSVRfTEFSR0VGSUxFX1NVUFBPUlQ9JHtzYW1iYV9jdl9IQVZFX0VYUExJQ0lUX0xBUkdFRklMRV9TVVBQT1JUPXllc30KK3NhbWJhX2N2X0hBVkVfRkNOVExfTE9DSz0ke3NhbWJhX2N2X0hBVkVfRkNOVExfTE9DSz15ZXN9CitzYW1iYV9jdl9IQVZFX0ZUUlVOQ0FURV9FWFRFTkQ9JHtzYW1iYV9jdl9IQVZFX0ZUUlVOQ0FURV9FWFRFTkQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9GVU5DVElPTl9NQUNSTz0ke3NhbWJhX2N2X0hBVkVfRlVOQ1RJT05fTUFDUk89eWVzfQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CitzYW1iYV9jdl9IQVZFX0lOTzY0X1Q9JHtzYW1iYV9jdl9IQVZFX0lOTzY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX0lOVDE2X0ZST01fUlBDX1JQQ19IPSR7c2FtYmFfY3ZfSEFWRV9JTlQxNl9GUk9NX1JQQ19SUENfSD1ub30KK3NhbWJhX2N2X0hBVkVfSU5UMzJfRlJPTV9SUENfUlBDX0g9JHtzYW1iYV9jdl9IQVZFX0lOVDMyX0ZST01fUlBDX1JQQ19IPW5vfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz15ZXN9CitzYW1iYV9jdl9IQVZFX01NQVA9JHtzYW1iYV9jdl9IQVZFX01NQVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9OQVRJVkVfSUNPTlY9JHtzYW1iYV9jdl9IQVZFX05BVElWRV9JQ09OVj15ZXN9CitzYW1iYV9jdl9IQVZFX09GRjY0X1Q9JHtzYW1iYV9jdl9IQVZFX09GRjY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX1FVT1RBQ1RMXzRBPSR7c2FtYmFfY3ZfSEFWRV9RVU9UQUNUTF80QT15ZXN9CitzYW1iYV9jdl9IQVZFX1JPT1Q9JHtzYW1iYV9jdl9IQVZFX1JPT1Q9bm99CitzYW1iYV9jdl9IQVZFX1JQQ19BVVRIX0VSUk9SX0NPTkZMSUNUPSR7c2FtYmFfY3ZfSEFWRV9SUENfQVVUSF9FUlJPUl9DT05GTElDVD1ub30KK3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3NhbWJhX2N2X0hBVkVfU0VOREZJTEU9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFPW5vfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PW5vfQorc2FtYmFfY3ZfSEFWRV9TT0NLX1NJTl9MRU49JHtzYW1iYV9jdl9IQVZFX1NPQ0tfU0lOX0xFTj1ub30KK3NhbWJhX2N2X0hBVkVfU1RBVF9TVF9CTEtTSVpFPSR7c2FtYmFfY3ZfSEFWRV9TVEFUX1NUX0JMS1NJWkU9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVEFUX1NUX0JMT0NLUz0ke3NhbWJhX2N2X0hBVkVfU1RBVF9TVF9CTE9DS1M9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRElSRU5UNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9ESVJFTlQ2ND1ub30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PXllc30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0lGX0RRQkxLPSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfSUZfRFFCTEs9bm99CitzYW1iYV9jdl9IQVZFX1NUUlVDVF9NRU1fRFFCTEs9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9NRU1fRFFCTEs9bm99CitzYW1iYV9jdl9IQVZFX1RSVU5DQVRFRF9TQUxUPSR7c2FtYmFfY3ZfSEFWRV9UUlVOQ0FURURfU0FMVD1ub30KK3NhbWJhX2N2X0hBVkVfVUlOVDE2X0ZST01fUlBDX1JQQ19IPSR7c2FtYmFfY3ZfSEFWRV9VSU5UMTZfRlJPTV9SUENfUlBDX0g9bm99CitzYW1iYV9jdl9IQVZFX1VJTlQzMl9GUk9NX1JQQ19SUENfSD0ke3NhbWJhX2N2X0hBVkVfVUlOVDMyX0ZST01fUlBDX1JQQ19IPW5vfQorc2FtYmFfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPSR7c2FtYmFfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPXllc30KK3NhbWJhX2N2X0hBVkVfVVRJTUJVRj0ke3NhbWJhX2N2X0hBVkVfVVRJTUJVRj15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX0FERFI9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX0FERFI9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9FWElUPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9FWElUPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfSE9TVD0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfSE9TVD15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX0lEPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9JRD15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX05BTUU9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX05BTUU9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9QSUQ9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX1BJRD15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX1RJTUU9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX1RJTUU9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9UVj0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfVFY9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9UWVBFPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9UWVBFPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfVVNFUj0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfVVNFUj15ZXN9CitzYW1iYV9jdl9IQVZFX1VYX1VUX1NZU0xFTj0ke3NhbWJhX2N2X0hBVkVfVVhfVVRfU1lTTEVOPW5vfQorc2FtYmFfY3ZfSEFWRV9WQV9DT1BZPSR7c2FtYmFfY3ZfSEFWRV9WQV9DT1BZPXllc30KK3NhbWJhX2N2X0hBVkVfV09SS0lOR19BRl9MT0NBTD0ke3NhbWJhX2N2X0hBVkVfV09SS0lOR19BRl9MT0NBTD1ub30KK3NhbWJhX2N2X0hBVkVfV2Vycm9yPSR7c2FtYmFfY3ZfSEFWRV9XZXJyb3I9eWVzfQorc2FtYmFfY3ZfUFVUVVRMSU5FX1JFVFVSTlNfVVRNUD0ke3NhbWJhX2N2X1BVVFVUTElORV9SRVRVUk5TX1VUTVA9eWVzfQorc2FtYmFfY3ZfUVVPVEFfV09SS1M9JHtzYW1iYV9jdl9RVU9UQV9XT1JLUz15ZXN9CitzYW1iYV9jdl9SRVBMQUNFX0dFVFBBU1M9JHtzYW1iYV9jdl9SRVBMQUNFX0dFVFBBU1M9eWVzfQorc2FtYmFfY3ZfUkVQTEFDRV9JTkVUX05UT0E9JHtzYW1iYV9jdl9SRVBMQUNFX0lORVRfTlRPQT1ub30KK3NhbWJhX2N2X1JVTl9RVU9UQV9URVNUUz0ke3NhbWJhX2N2X1JVTl9RVU9UQV9URVNUUz1hdXRvfQorc2FtYmFfY3ZfU0VFS0RJUl9SRVRVUk5TX1ZPSUQ9JHtzYW1iYV9jdl9TRUVLRElSX1JFVFVSTlNfVk9JRD15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9eWVzfQorc2FtYmFfY3ZfU0laRU9GX09GRl9UPSR7c2FtYmFfY3ZfU0laRU9GX09GRl9UPXllc30KK3NhbWJhX2N2X1NZU0NPTkZfU0NfTkdST1VQU19NQVg9JHtzYW1iYV9jdl9TWVNDT05GX1NDX05HUk9VUFNfTUFYPXllc30KK3NhbWJhX2N2X1NZU1FVT1RBX0ZPVU5EPSR7c2FtYmFfY3ZfU1lTUVVPVEFfRk9VTkQ9eWVzfQorc2FtYmFfY3ZfU1lTUVVPVEFfV09SS1M9JHtzYW1iYV9jdl9TWVNRVU9UQV9XT1JLUz15ZXN9CitzYW1iYV9jdl9UUllfUVVPVEFTPSR7c2FtYmFfY3ZfVFJZX1FVT1RBUz1ub30KK3NhbWJhX2N2X1RSWV9TWVNfUVVPVEFTPSR7c2FtYmFfY3ZfVFJZX1NZU19RVU9UQVM9bm99CitzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD15ZXN9CitzYW1iYV9jdl9XSVRIX1FVT1RBUz0ke3NhbWJhX2N2X1dJVEhfUVVPVEFTPWF1dG99CitzYW1iYV9jdl9XSVRIX1NZU19RVU9UQVM9JHtzYW1iYV9jdl9XSVRIX1NZU19RVU9UQVM9YXV0b30KK3NhbWJhX2N2X2NvbXBpbGVyX3N1cHBvcnRzX2xsPSR7c2FtYmFfY3ZfY29tcGlsZXJfc3VwcG9ydHNfbGw9eWVzfQorc2FtYmFfY3ZfaGF2ZV9sb25nbG9uZz0ke3NhbWJhX2N2X2hhdmVfbG9uZ2xvbmc9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPXllc30KK3NhbWJhX2N2X2ltbWVkaWF0ZV9zdHJ1Y3R1cmVzPSR7c2FtYmFfY3ZfaW1tZWRpYXRlX3N0cnVjdHVyZXM9eWVzfQorc2FtYmFfY3Zfb3B0aW1pemVfb3V0X2Z1bmNhdGlvbl9jYWxscz0ke3NhbWJhX2N2X29wdGltaXplX291dF9mdW5jYXRpb25fY2FsbHM9eWVzfQorc2FtYmFfY3Zfc2lnX2F0b21pY190PSR7c2FtYmFfY3Zfc2lnX2F0b21pY190PXllc30KK3NhbWJhX2N2X3NvY2tsZW5fdD0ke3NhbWJhX2N2X3NvY2tsZW5fdD15ZXN9CitzYW1iYV9jdl91bml4c29ja2V0PSR7c2FtYmFfY3ZfdW5peHNvY2tldD15ZXN9CitzYW1iYV9jdl92b2xhdGlsZT0ke3NhbWJhX2N2X3ZvbGF0aWxlPXllc30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybWViLWxpbnV4IGIveW9jdG8tcG9reS9tZXRhL3NpdGUvYXJtZWItbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUyMWZmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybWViLWxpbnV4CkBAIC0wLDAgKzEsNDMgQEAKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ubworYWNfY3Zfc2l6ZW9mX19faW50NjQ9JHthY19jdl9zaXplb2ZfX19pbnQ2ND0wfQorYWNfY3Zfc2l6ZW9mX2NoYXI9JHthY19jdl9zaXplb2ZfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmc9NH0KK2FjX2N2X3NpemVvZl9sb25nX2ludD0ke2FjX2N2X3NpemVvZl9sb25nX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl9zaXplX3Q9JHthY19jdl9zaXplb2Zfc2l6ZV90PTR9CithY19jdl9zaXplb2Zfdm9pZF9wPSR7YWNfY3Zfc2l6ZW9mX3ZvaWRfcD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTh9CithY19jdl9zaXplb2ZfY2hhcl9wPSR7YWNfY3Zfc2l6ZW9mX2NoYXJfcD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkPTR9CithY19jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTR9CisKK2FjX2N2X3VjaGFyPSR7YWNfY3ZfdWNoYXI9bm99CithY19jdl91aW50PSR7YWNfY3ZfdWludD15ZXN9CithY19jdl91bG9uZz0ke2FjX2N2X3Vsb25nPXllc30KK2FjX2N2X3VzaG9ydD0ke2FjX2N2X3VzaG9ydD15ZXN9CisKK2FjX2N2X3RpbWVfcl90eXBlPSR7YWNfY3ZfdGltZV9yX3R5cGU9UE9TSVh9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVEVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VURVVJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFVJRFg9JHtzYW1iYV9jdl9VU0VfU0VUVUlEWD15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRT0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PXllc30KK3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3NhbWJhX2N2X0hBVkVfTU1BUD0ke3NhbWJhX2N2X0hBVkVfTU1BUD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPXllc30KK3NhbWJhX2N2X0xJTlVYX0xGU19TVVBQT1JUPSR7c2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9eWVzfQorc2FtYmFfY3ZfU1RBVF9TVEFUVkZTNjQ9JHtzYW1iYV9jdl9TVEFUX1NUQVRWRlM2ND15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9eWVzfQorc2FtYmFfY3ZfU0laRU9GX0lOT19UPSR7c2FtYmFfY3ZfU0laRU9GX0lOT19UPXllc30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PXllc30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybWViLWxpbnV4LXVjbGliYyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybWViLWxpbnV4LXVjbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzFlODU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvYXJtZWItbGludXgtdWNsaWJjCkBAIC0wLDAgKzEsMzggQEAKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ubworYWNfY3Zfc2l6ZW9mX19faW50NjQ9JHthY19jdl9zaXplb2ZfX19pbnQ2ND0wfQorYWNfY3Zfc2l6ZW9mX2NoYXI9JHthY19jdl9zaXplb2ZfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmc9NH0KK2FjX2N2X3NpemVvZl9sb25nX2ludD0ke2FjX2N2X3NpemVvZl9sb25nX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl9zaXplX3Q9JHthY19jdl9zaXplb2Zfc2l6ZV90PTR9CithY19jdl9zaXplb2Zfdm9pZF9wPSR7YWNfY3Zfc2l6ZW9mX3ZvaWRfcD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTh9CithY19jdl9zaXplb2ZfY2hhcl9wPSR7YWNfY3Zfc2l6ZW9mX2NoYXJfcD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkPTR9CithY19jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTR9CisKK2FjX2N2X3VjaGFyPSR7YWNfY3ZfdWNoYXI9bm99CithY19jdl91aW50PSR7YWNfY3ZfdWludD15ZXN9CithY19jdl91bG9uZz0ke2FjX2N2X3Vsb25nPXllc30KK2FjX2N2X3VzaG9ydD0ke2FjX2N2X3VzaG9ydD15ZXN9CisKK2FjX2N2X3RpbWVfcl90eXBlPSR7YWNfY3ZfdGltZV9yX3R5cGU9UE9TSVh9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVEVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VURVVJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFVJRFg9JHtzYW1iYV9jdl9VU0VfU0VUVUlEWD15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRT0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PXllc30KK3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3NhbWJhX2N2X0hBVkVfTU1BUD0ke3NhbWJhX2N2X0hBVkVfTU1BUD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPXllc30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2NvbW1vbiBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2NvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2NjMTRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uCkBAIC0wLDAgKzEsMjEgQEAKKyMgbGliZWxmCittcl9jdl90YXJnZXRfZWxmPSR7bXJfY3ZfdGFyZ2V0X2VsZj15ZXN9CisKKyMgTm9ybWFsbHkga2VybmVscyBoYXZlIC9kZXYvcmFuZG9tIGVuYWJsZWQKK2FjX2N2X2ZpbGVfX2Rldl9yYW5kb209JHthY19jdl9maWxlX19kZXZfcmFuZG9tPXllc30KKworIyBBdm9pZCBzdWRvIHRvIGFzc3VtZSB2b2lkIGZvciB1bnNldGVudiBpbiBjcm9zcyBlbnZpcm9ubWVudCwgb3IgZWxzZSBpdCBjb25mbGljdHMgd2l0aAorIyB0YXJnZXQgc3RkbGliLmggcHJvdG90eXBlIHdoaWNoIGZvbGxvd3MgUE9TSVggY29tcGlsaWFuY2UuIE1hcmsgZm9yIHVwc3RyZWFtLgorc3Vkb19jdl9mdW5jX3Vuc2V0ZW52X3ZvaWQ9bm8KKworIyBzaGFkb3cgZGlyIGluZm8sIHRvIGF2b2lkIHNlYXJjaGluZyBidWlsZCBzeXN0ZW0KK3NoYWRvd19jdl9tYWlsZGlyPSR7bG9jYWxzdGF0ZWRpcn0vc3Bvb2wvbWFpbAorc2hhZG93X2N2X21haWxmaWxlPU1haWxib3gKK3NoYWRvd19jdl91dG1wZGlyPSR7bG9jYWxzdGF0ZWRpcn0vcnVuCitzaGFkb3dfY3ZfbG9nZGlyPSR7bG9jYWxzdGF0ZWRpcn0vbG9nCitzaGFkb3dfY3ZfcGFzc3dkX2Rpcj0ke2JpbmRpcn0KKworIyBweXRob246IGRlYWN0aXZhdGUgYSBydW50aW1lIGNoZWNrIGZvciBpcHY2LXN1cHBvcnQgaW4gcHl0aG9uID49Mi43LjEgdGhhdCBmYWlscyB3aGVuIGNyb3NzLWNvbXBpbGluZworYWNfY3ZfYnVnZ3lfZ2V0YWRkcmluZm89bm8KKworYWNfY3ZfcGF0aF9TRUQ9c2VkCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9jb21tb24tZGFyd2luIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLWRhcndpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDJkODk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLWRhcndpbgpAQCAtMCwwICsxLDIgQEAKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9eWVzfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLWdsaWJjIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLWdsaWJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NDNmOGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9jb21tb24tZ2xpYmMKQEAgLTAsMCArMSw4NiBAQAorIyBnZW5lcmFsCithY19jdl9oYXZlX2RlY2xfc3lzX3NpZ2xpc3Q9JHthY19jdl9oYXZlX2RlY2xfc3lzX3NpZ2xpc3Q9eWVzfQorYWNfY3ZfZnVuY19yZWFsbG9jX3dvcmtzPSR7YWNfY3ZfZnVuY19yZWFsbG9jX3dvcmtzPXllc30KK2FjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGw9JHthY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsPXllc30KK2FjX2N2X2Z1bmNfbWFsbG9jX3dvcmtzPSR7YWNfY3ZfZnVuY19tYWxsb2Nfd29ya3M9eWVzfQorYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPSR7YWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPXllc30KK2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9JHthY19jdl9mdW5jX21lbWNtcF93b3JraW5nPXllc30KK2FjX2N2X2Z1bmNfZ2V0cGdycF92b2lkPXllcworYWNfY3ZfZnVuY19zZXRwZ3JwX3ZvaWQ9eWVzCithY19jdl9mdW5jX3NldGdyZW50X3ZvaWQ9eWVzCithY19jdl9mdW5jX2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX2dldGdyZ2lkX3I9eWVzfQorYWNfY3ZfZnVuY19nZXRwd3VpZF9yPSR7YWNfY3ZfZnVuY19nZXRwd3VpZF9yPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9eWVzfQorYWNfY3ZfdHlwZV91aWRfdD17YWNfY3ZfdHlwZV91aWRfdD15ZXN9CithY19jdl9mdW5jX2dldGFkZHJpbmZvPSR7YWNfY3ZfZnVuY19nZXRhZGRyaW5mbz15ZXN9CisKKyMgYmFzaAorYmFzaF9jdl91bmRlcl9zeXNfc2lnbGlzdD0ke2Jhc2hfY3ZfdW5kZXJfc3lzX3NpZ2xpc3Q9eWVzfQorYmFzaF9jdl9zeXNfc2lnbGlzdD0ke2Jhc2hfY3Zfc3lzX3NpZ2xpc3Q9eWVzfQorYmFzaF9jdl9nZXRjd2RfbWFsbG9jPSR7YmFzaF9jdl9nZXRjd2RfbWFsbG9jPXllc30KKworIyBjbGFtYXYKK2NsYW1hdl9hdl9mdW5jX3dvcmtpbmdfc25wcmludGZfbG9uZz0ke2NsYW1hdl9hdl9mdW5jX3dvcmtpbmdfc25wcmludGZfbG9uZz15ZXN9CitjbGFtYXZfYXZfaGF2ZV9pbl9wb3J0X3Q9JHtjbGFtYXZfYXZfaGF2ZV9pbl9wb3J0X3Q9eWVzfQorY2xhbWF2X2F2X2hhdmVfaW5fYWRkcl90PSR7Y2xhbWF2X2F2X2hhdmVfaW5fYWRkcl90PXllc30KK2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9JHthY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPXllc30KKworIyBjb3JldXRpbHMKK2Z1X2N2X3N5c19zdGF0X3N0YXRmczJfYnNpemU9JHtmdV9jdl9zeXNfc3RhdF9zdGF0ZnMyX2JzaXplPXllc30KKworIyBnbGliCitnbGliX2N2X3N0cmxjcHk9JHtnbGliX2N2X3N0cmxjcHk9bm99CithY19jdl9mdW5jX3ByaW50Zl91bml4OTg9JHthY19jdl9mdW5jX3ByaW50Zl91bml4OTg9eWVzfQorYWNfY3ZfZnVuY19zbnByaW50Zl9jOTk9JHthY19jdl9mdW5jX3NucHJpbnRmX2M5OT15ZXN9CithY19jdl9mdW5jX3ZzbnByaW50Zl9jOTk9JHthY19jdl9mdW5jX3ZzbnByaW50Zl9jOTk9eWVzfQorZ2xpYl9jdl9jb21wbGlhbnRfcG9zaXhfbWVtYWxpZ249JHtnbGliX2N2X2NvbXBsaWFudF9wb3NpeF9tZW1hbGlnbj0xfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorIyBnbGliLTEueCByZXF1aXJlcyB0aGlzIGFuZCBwa2djb25maWctbmF0aXZlIC8gcGtnY29uZmlnLW5hdGl2ZXNkayB1c2UKKyMgdGhhdCB0byBhdm9pZCBhIGRlcGVuZGVuY3kgbG9vcC4KK2dsaWJfY3ZfX192YV9jb3B5PSR7Z2xpYl9jdl9fX3ZhX2NvcHk9eWVzfQorZ2xpYl9jdl92YV9jb3B5PSR7Z2xpYl9jdl92YV9jb3B5PXllc30KK2dsaWJfY3ZfaGF2ZV9xc29ydF9yPSR7Z2xpYl9jdl9oYXZlX3Fzb3J0X3I9eWVzfQorCisjZGJ1cy1nbGliCithY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9JHthY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9eWVzfQorCisjIGdudWNhc2gKK2FtX2N2X3NjYW5mX2xsZD0ke2FtX2N2X3NjYW5mX2xsZD15ZXN9CisKKyMgZ3VpbGUKK2FjX2N2X2Z1bmNfcHRocmVhZF9hdHRyX2dldHN0YWNrPSR7YWNfY3ZfZnVuY19wdGhyZWFkX2F0dHJfZ2V0c3RhY2s9eWVzfQorCisjZ2NjLXpsaWIKK2FjX2N2X2Z1bmNfZ2V0cGFnZXNpemU9JHthY19jdl9mdW5jX2dldHBhZ2VzaXplPXllc30KK2FjX2N2X2Z1bmNfbWVtY3B5PSR7YWNfY3ZfZnVuY19tZW1jcHk9eWVzfQorYWNfY3ZfZnVuY19zdHJlcnJvcj0ke2FjX2N2X2Z1bmNfc3RyZXJyb3I9eWVzfQorCisjIHNxdWlkCithY19jdl9hZl91bml4X2xhcmdlX2RncmFtPSR7YWNfY3ZfYWZfdW5peF9sYXJnZV9kZ3JhbT15ZXN9CithY19jdl9mdW5jX3NldHJlc3VpZD0ke2FjX2N2X2Z1bmNfc2V0cmVzdWlkPXllc30KK2FjX2N2X2Z1bmNfdmFfY29weT0ke2FjX2N2X2Z1bmNfdmFfY29weT15ZXN9CithY19jdl9mdW5jX19fdmFfY29weT0ke2FjX2N2X2Z1bmNfX192YV9jb3B5PXllc30KK2FjX2N2X2Vwb2xsX3dvcmtzPSR7YWNfY3ZfZXBvbGxfd29ya3M9eWVzfQorCithY19jdl9jaGVja19zamxqPXNzamxqCisKKyMgbTQKK2d0X2N2X2xvY2FsZV9mcj0ke2d0X2N2X2xvY2FsZV9mcj1mcl9GUn0KK2dsX2N2X2Z1bmNfYnRvd2NfZW9mPSR7Z2xfY3ZfZnVuY19idG93Y19lb2Y9eWVzfQorZ2xfY3ZfZnVuY193Y3J0b21iX3JldHZhbD0ke2dsX2N2X2Z1bmNfd2NydG9tYl9yZXR2YWw9eWVzfQorZ2xfY3ZfZnVuY193Y3RvYl93b3Jrcz0ke2dsX2N2X2Z1bmNfd2N0b2Jfd29ya3M9eWVzfQorZ2xfY3ZfZnVuY19tYnJ0b3djX2luY29tcGxldGVfc3RhdGU9JHtnbF9jdl9mdW5jX21icnRvd2NfaW5jb21wbGV0ZV9zdGF0ZT15ZXN9CitnbF9jdl9mdW5jX21icnRvd2Nfc2FuaXR5Y2hlY2s9JHtnbF9jdl9mdW5jX21icnRvd2Nfc2FuaXR5Y2hlY2s9eWVzfQorZ2xfY3ZfZnVuY19tYnJ0b3djX251bGxfYXJnPSR7Z2xfY3ZfZnVuY19tYnJ0b3djX251bGxfYXJnPXllc30KK2dsX2N2X2Z1bmNfbWJydG93Y19yZXR2YWw9JHtnbF9jdl9mdW5jX21icnRvd2NfcmV0dmFsPXllc30KK2dsX2N2X2Z1bmNfbWJydG93Y19udWxfcmV0dmFsPSR7Z2xfY3ZfZnVuY19tYnJ0b3djX251bF9yZXR2YWw9eWVzfQorCisjIHZhX2NvcHkgYW5kIF92YV9jb3B5CithY19jdl92YV9jb3B5PSR7YWNfY3ZfdmFfY29weT15ZXN9CithY19jdl9fX3ZhX2NvcHk9JHthY19jdl9fX3ZhX2NvcHk9eWVzfQorYWNfY3ZfZnVuY192YV9jb3B5PSR7YWNfY3ZfZnVuY192YV9jb3B5PXllc30KK2FjX2N2X2Z1bmNfX192YV9jb3B5PSR7YWNfY3ZfZnVuY19fX3ZhX2NvcHk9eWVzfQorCisjIFhvcmcKK3hvcmdfY3ZfbWFsbG9jMF9yZXR1cm5zX251bGw9JHt4b3JnX2N2X21hbGxvYzBfcmV0dXJuc19udWxsPXllc30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2NvbW1vbi1saW51eCBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2NvbW1vbi1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjViZTY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLWxpbnV4CkBAIC0wLDAgKzEsNTIgQEAKKyMgYXByCithY19jdl9maWxlX19kZXZfemVybz0ke2FjX2N2X2ZpbGVfX2Rldl96ZXJvPXllc30KK2FjX2N2X3NpemVvZl9waWRfdD0ke2FjX2N2X3NpemVvZl9waWRfdD00fQorCisjIHNhbWJhCitzYW1iYV9jdl9IQVZFX0lGQUNFX0FJWD0ke3NhbWJhX2N2X0hBVkVfSUZBQ0VfQUlYPW5vfQorc2FtYmFfY3ZfSEFWRV9JRkFDRV9JRkNPTkY9JHtzYW1iYV9jdl9IQVZFX0lGQUNFX0lGQ09ORj15ZXN9CitzYW1iYV9jdl9IQVZFX0lGQUNFX0lGUkVRPSR7c2FtYmFfY3ZfSEFWRV9JRkFDRV9JRlJFUT15ZXN9CitzYW1iYV9jdl9IQVZFX0lSSVhfU1BFQ0lGSUNfQ0FQQUJJTElUSUVTPSR7c2FtYmFfY3ZfSEFWRV9JUklYX1NQRUNJRklDX0NBUEFCSUxJVElFUz1ub30KKworIyBkYgorZGJfY3ZfcGF0aF9hcj0ke2RiX2N2X3BhdGhfYXI9L3Vzci9iaW4vYXJ9CitkYl9jdl9wYXRoX2NobW9kPSR7ZGJfY3ZfcGF0aF9jaG1vZD0vYmluL2NobW9kfQorZGJfY3ZfcGF0aF9jcD0ke2RiX2N2X3BhdGhfY3A9L2Jpbi9jcH0KK2RiX2N2X3BhdGhfbG49JHtkYl9jdl9wYXRoX2xuPS9iaW4vbG59CitkYl9jdl9wYXRoX21rZGlyPSR7ZGJfY3ZfcGF0aF9ta2Rpcj0vYmluL21rZGlyfQorZGJfY3ZfcGF0aF9yYW5saWI9JHtkYl9jdl9wYXRoX3JhbmxpYj0vdXNyL2Jpbi9yYW5saWJ9CitkYl9jdl9wYXRoX3JtPSR7ZGJfY3ZfcGF0aF9ybT0vYmluL3JtfQorZGJfY3ZfcGF0aF9zaD0ke2RiX2N2X3BhdGhfc2g9L2Jpbi9zaH0KK2RiX2N2X3BhdGhfc3RyaXA9JHtkYl9jdl9wYXRoX3N0cmlwPS91c3IvYmluL3N0cmlwfQorCisjIGJhc2gKK2Jhc2hfY3ZfaGF2ZV9tYnN0YXRlX3Q9JHtiYXNoX2N2X2hhdmVfbWJzdGF0ZV90PXllc30KK2Jhc2hfY3ZfbXVzdF9yZWluc3RhbGxfc2lnaGFuZGxlcnM9JHtiYXNoX2N2X211c3RfcmVpbnN0YWxsX3NpZ2hhbmRsZXJzPW5vfQorYmFzaF9jdl9mdW5jX3N0cmNvbGxfYnJva2VuPSR7YmFzaF9jdl9mdW5jX3N0cmNvbGxfYnJva2VuPW5vfQorYmFzaF9jdl9kdXAyX2Jyb2tlbj0ke2Jhc2hfY3ZfZHVwMl9icm9rZW49bm99CitiYXNoX2N2X29wZW5kaXJfbm90X3JvYnVzdD0ke2Jhc2hfY3Zfb3BlbmRpcl9ub3Rfcm9idXN0PW5vfQorYmFzaF9jdl90eXBlX3JsaW1pdD0ke2Jhc2hfY3ZfdHlwZV9ybGltaXQ9cmxpbV90fQorYmFzaF9jdl9nZXRlbnZfcmVkZWY9JHtiYXNoX2N2X2dldGVudl9yZWRlZj15ZXN9CitiYXNoX2N2X3VsaW1pdF9tYXhmZHM9JHtiYXNoX2N2X3VsaW1pdF9tYXhmZHM9eWVzfQorYmFzaF9jdl9nZXRjd2RfY2FsbHNfcG9wZW49JHtiYXNoX2N2X2dldGN3ZF9jYWxsc19wb3Blbj1ub30KK2Jhc2hfY3ZfcHJpbnRmX2FfZm9ybWF0PSR7YmFzaF9jdl9wcmludGZfYV9mb3JtYXQ9eWVzfQorYmFzaF9jdl9wZ3JwX3BpcGU9JHtiYXNoX2N2X3BncnBfcGlwZT1ub30KK2Jhc2hfY3Zfam9iX2NvbnRyb2xfbWlzc2luZz0ke2Jhc2hfY3Zfam9iX2NvbnRyb2xfbWlzc2luZz1wcmVzZW50fQorYmFzaF9jdl9zeXNfbmFtZWRfcGlwZXM9JHtiYXNoX2N2X3N5c19uYW1lZF9waXBlcz1wcmVzZW50fQorYmFzaF9jdl91bnVzYWJsZV9ydHNpZ3M9JHtiYXNoX2N2X3VudXNhYmxlX3J0c2lncz1ub30KKworIyBjb3JldXRpbHMKK2dsX2N2X2Z1bmNfZnN0YXRhdF96ZXJvX2ZsYWc9JHtnbF9jdl9mdW5jX2ZzdGF0YXRfemVyb19mbGFnPXllc30KKworIyBteXNxbAorYWNfY3Zfc3lzX3Jlc3RhcnRhYmxlX3N5c2NhbGxzPSR7YWNfY3Zfc3lzX3Jlc3RhcnRhYmxlX3N5c2NhbGxzPXllc30KK2FjX2N2X2NvbnZfbG9uZ2xvbmdfdG9fZmxvYXQ9JHthY19jdl9jb252X2xvbmdsb25nX3RvX2Zsb2F0PXllc30KKworIyBUQ0wKK3RjbF9jdl9hcGlfc2VyaWFsPSR7dGNsX2N2X2FwaV9zZXJpYWw9dGVybWlvc30KKworIyBweXRob24KK2FjX2N2X2hhdmVfbG9uZ19sb25nX2Zvcm1hdD15ZXMKKworIyBhcGFjaGUKK2FjX2N2X29fbm9uYmxvY2tfaW5oZXJpdGVkPSR7YWNfY3Zfb19ub25ibG9ja19pbmhlcml0ZWQ9bm99CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9jb21tb24tbWluZ3cgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9jb21tb24tbWluZ3cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMzN2MzNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2NvbW1vbi1taW5ndwpAQCAtMCwwICsxLDIgQEAKKyMgZXhwYXQKK2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9bm8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2NvbW1vbi1tdXNsIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLW11c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmYzEwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2NvbW1vbi1tdXNsCkBAIC0wLDAgKzEsNTIgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfaGF2ZV9kZWNsX3N5c19zaWdsaXN0PSR7YWNfY3ZfaGF2ZV9kZWNsX3N5c19zaWdsaXN0PW5vfQorYWNfY3ZfZnVuY19yZWFsbG9jX3dvcmtzPSR7YWNfY3ZfZnVuY19yZWFsbG9jX3dvcmtzPXllc30KK2FjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGw9JHthY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsPXllc30KK2FjX2N2X2Z1bmNfbWFsbG9jX3dvcmtzPSR7YWNfY3ZfZnVuY19tYWxsb2Nfd29ya3M9eWVzfQorYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPSR7YWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPXllc30KK2FjX2N2X2Z1bmNfZ2V0cGdycF92b2lkPXllcworYWNfY3ZfZnVuY19zZXRwZ3JwX3ZvaWQ9eWVzCithY19jdl9mdW5jX3NldGdyZW50X3ZvaWQ9eWVzCithY19jdl9mdW5jX2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX2dldGdyZ2lkX3I9eWVzfQorYWNfY3ZfZnVuY19nZXRwd3VpZF9yPSR7YWNfY3ZfZnVuY19nZXRwd3VpZF9yPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9eWVzfQorYWNfY3ZfZnVuY19nZXRhZGRyaW5mbz0ke2FjX2N2X2Z1bmNfZ2V0YWRkcmluZm89eWVzfQorCisjIGdsaWIKK2dsaWJfY3Zfc3RybGNweT0ke2dsaWJfY3Zfc3RybGNweT1ub30KK2FjX2N2X2Z1bmNfcHJpbnRmX3VuaXg5OD0ke2FjX2N2X2Z1bmNfcHJpbnRmX3VuaXg5OD15ZXN9CithY19jdl9mdW5jX3NucHJpbnRmX2M5OT0ke2FjX2N2X2Z1bmNfc25wcmludGZfYzk5PXllc30KK2FjX2N2X2Z1bmNfdnNucHJpbnRmX2M5OT0ke2FjX2N2X2Z1bmNfdnNucHJpbnRmX2M5OT15ZXN9CitnbGliX2N2X2NvbXBsaWFudF9wb3NpeF9tZW1hbGlnbj0ke2dsaWJfY3ZfY29tcGxpYW50X3Bvc2l4X21lbWFsaWduPTF9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X2hhdmVfcXNvcnRfcj0ke2dsaWJfY3ZfaGF2ZV9xc29ydF9yPW5vfQorCisjZGJ1cy1nbGliCithY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9JHthY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9eWVzfQorCisjIGJhc2gKK2Jhc2hfY3ZfdW5kZXJfc3lzX3NpZ2xpc3Q9JHtiYXNoX2N2X3VuZGVyX3N5c19zaWdsaXN0PW5vfQorYmFzaF9jdl9zeXNfc2lnbGlzdD0ke2Jhc2hfY3Zfc3lzX3NpZ2xpc3Q9bm99CisKKyMgY29yZXV0aWxzCitmdV9jdl9zeXNfc3RhdF9zdGF0ZnMyX2JzaXplPSR7ZnVfY3Zfc3lzX3N0YXRfc3RhdGZzMl9ic2l6ZT15ZXN9CitnbF9jdl9mdW5jX2dldHRpbWVvZmRheV9jbG9iYmVyPSR7Z2xfY3ZfZnVuY19nZXR0aW1lb2ZkYXlfY2xvYmJlcj1ub30KK2dsX2N2X2Z1bmNfdHpzZXRfY2xvYmJlcj0ke2dsX2N2X2Z1bmNfdHpzZXRfY2xvYmJlcj1ub30KK2dsX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X3Bvc2l4X3NpZ25hdHVyZT0ke2dsX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X3Bvc2l4X3NpZ25hdHVyZT15ZXN9CithY19jdl9mdW5jX3Bvc2l4X3NwYXduPSR7YWNfY3ZfZnVuY19wb3NpeF9zcGF3bj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X3NwYXduX3dvcmtzPSR7YWNfY3ZfZnVuY19wb3NpeF9zcGF3bl93b3Jrcz15ZXN9CisKKyMgdmFfY29weSBhbmQgX3ZhX2NvcHkKK2FjX2N2X3ZhX2NvcHk9JHthY19jdl92YV9jb3B5PXllc30KK2FjX2N2X19fdmFfY29weT0ke2FjX2N2X19fdmFfY29weT15ZXN9CithY19jdl9mdW5jX3ZhX2NvcHk9JHthY19jdl9mdW5jX3ZhX2NvcHk9eWVzfQorYWNfY3ZfZnVuY19fX3ZhX2NvcHk9JHthY19jdl9mdW5jX19fdmFfY29weT15ZXN9CisKKyMgcG9zaXhfZ2V0cHd1aWRfciBwb3NpeF9nZXRncmdpZF9yIHBvc2l4X2dldHB3bmFtX3IKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBYb3JnCit4b3JnX2N2X21hbGxvYzBfcmV0dXJuc19udWxsPSR7eG9yZ19jdl9tYWxsb2MwX3JldHVybnNfbnVsbD15ZXN9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9jb21tb24tdWNsaWJjIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLXVjbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmZjMTAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLXVjbGliYwpAQCAtMCwwICsxLDUyIEBACisjIGdlbmVyYWwKK2FjX2N2X2hhdmVfZGVjbF9zeXNfc2lnbGlzdD0ke2FjX2N2X2hhdmVfZGVjbF9zeXNfc2lnbGlzdD1ub30KK2FjX2N2X2Z1bmNfcmVhbGxvY193b3Jrcz0ke2FjX2N2X2Z1bmNfcmVhbGxvY193b3Jrcz15ZXN9CithY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsPSR7YWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbD15ZXN9CithY19jdl9mdW5jX21hbGxvY193b3Jrcz0ke2FjX2N2X2Z1bmNfbWFsbG9jX3dvcmtzPXllc30KK2FjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbD0ke2FjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbD15ZXN9CithY19jdl9mdW5jX2dldHBncnBfdm9pZD15ZXMKK2FjX2N2X2Z1bmNfc2V0cGdycF92b2lkPXllcworYWNfY3ZfZnVuY19zZXRncmVudF92b2lkPXllcworYWNfY3ZfZnVuY19nZXRncmdpZF9yPSR7YWNfY3ZfZnVuY19nZXRncmdpZF9yPXllc30KK2FjX2N2X2Z1bmNfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfZ2V0cHd1aWRfcj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRncmdpZF9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRncmdpZF9yPXllc30KK2FjX2N2X2Z1bmNfZ2V0YWRkcmluZm89JHthY19jdl9mdW5jX2dldGFkZHJpbmZvPXllc30KKworIyBnbGliCitnbGliX2N2X3N0cmxjcHk9JHtnbGliX2N2X3N0cmxjcHk9bm99CithY19jdl9mdW5jX3ByaW50Zl91bml4OTg9JHthY19jdl9mdW5jX3ByaW50Zl91bml4OTg9eWVzfQorYWNfY3ZfZnVuY19zbnByaW50Zl9jOTk9JHthY19jdl9mdW5jX3NucHJpbnRmX2M5OT15ZXN9CithY19jdl9mdW5jX3ZzbnByaW50Zl9jOTk9JHthY19jdl9mdW5jX3ZzbnByaW50Zl9jOTk9eWVzfQorZ2xpYl9jdl9jb21wbGlhbnRfcG9zaXhfbWVtYWxpZ249JHtnbGliX2N2X2NvbXBsaWFudF9wb3NpeF9tZW1hbGlnbj0xfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9oYXZlX3Fzb3J0X3I9JHtnbGliX2N2X2hhdmVfcXNvcnRfcj1ub30KKworI2RidXMtZ2xpYgorYWNfY3ZfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzPSR7YWNfY3ZfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzPXllc30KKworIyBiYXNoCitiYXNoX2N2X3VuZGVyX3N5c19zaWdsaXN0PSR7YmFzaF9jdl91bmRlcl9zeXNfc2lnbGlzdD1ub30KK2Jhc2hfY3Zfc3lzX3NpZ2xpc3Q9JHtiYXNoX2N2X3N5c19zaWdsaXN0PW5vfQorCisjIGNvcmV1dGlscworZnVfY3Zfc3lzX3N0YXRfc3RhdGZzMl9ic2l6ZT0ke2Z1X2N2X3N5c19zdGF0X3N0YXRmczJfYnNpemU9eWVzfQorZ2xfY3ZfZnVuY19nZXR0aW1lb2ZkYXlfY2xvYmJlcj0ke2dsX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X2Nsb2JiZXI9bm99CitnbF9jdl9mdW5jX3R6c2V0X2Nsb2JiZXI9JHtnbF9jdl9mdW5jX3R6c2V0X2Nsb2JiZXI9bm99CitnbF9jdl9mdW5jX2dldHRpbWVvZmRheV9wb3NpeF9zaWduYXR1cmU9JHtnbF9jdl9mdW5jX2dldHRpbWVvZmRheV9wb3NpeF9zaWduYXR1cmU9eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9zcGF3bj0ke2FjX2N2X2Z1bmNfcG9zaXhfc3Bhd249eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9zcGF3bl93b3Jrcz0ke2FjX2N2X2Z1bmNfcG9zaXhfc3Bhd25fd29ya3M9eWVzfQorCisjIHZhX2NvcHkgYW5kIF92YV9jb3B5CithY19jdl92YV9jb3B5PSR7YWNfY3ZfdmFfY29weT15ZXN9CithY19jdl9fX3ZhX2NvcHk9JHthY19jdl9fX3ZhX2NvcHk9eWVzfQorYWNfY3ZfZnVuY192YV9jb3B5PSR7YWNfY3ZfZnVuY192YV9jb3B5PXllc30KK2FjX2N2X2Z1bmNfX192YV9jb3B5PSR7YWNfY3ZfZnVuY19fX3ZhX2NvcHk9eWVzfQorCisjIHBvc2l4X2dldHB3dWlkX3IgcG9zaXhfZ2V0Z3JnaWRfciBwb3NpeF9nZXRwd25hbV9yCithY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRncmdpZF9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRncmdpZF9yPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgWG9yZworeG9yZ19jdl9tYWxsb2MwX3JldHVybnNfbnVsbD0ke3hvcmdfY3ZfbWFsbG9jMF9yZXR1cm5zX251bGw9eWVzfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvZW5kaWFuLWJpZyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2VuZGlhbi1iaWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk5ZTk2YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2VuZGlhbi1iaWcKQEAgLTAsMCArMSw4IEBACithY19jdl9jX2xpdHRsZWVuZGlhbj0ke2FjX2N2X2NfbGl0dGxlZW5kaWFuPW5vfQorYWNfY3ZfY19iaWdlbmRpYW49JHthY19jdl9jX2JpZ2VuZGlhbj15ZXN9CisKKyMgbGlibmV0CithY19jdl9saWJuZXRfZW5kaWFuZXNzPSR7YWNfY3ZfbGlibmV0X2VuZGlhbmVzcz1iaWd9CisKKyMgbGlibWVtY2FjaGVkCithY19jdl9jX2VuZGlhbj1iaWcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2VuZGlhbi1saXR0bGUgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9lbmRpYW4tbGl0dGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1OGRiNzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9lbmRpYW4tbGl0dGxlCkBAIC0wLDAgKzEsOCBAQAorYWNfY3ZfY19saXR0bGVlbmRpYW49JHthY19jdl9jX2xpdHRsZWVuZGlhbj15ZXN9CithY19jdl9jX2JpZ2VuZGlhbj0ke2FjX2N2X2NfYmlnZW5kaWFuPW5vfQorCisjIGxpYm5ldAorYWNfY3ZfbGlibmV0X2VuZGlhbmVzcz0ke2FjX2N2X2xpYm5ldF9lbmRpYW5lc3M9bGlsfQorCisjIGxpYm1lbWNhY2hlZAorYWNfY3ZfY19lbmRpYW49bGl0dGxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9peDg2LWNvbW1vbiBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2l4ODYtY29tbW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZDJjZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9peDg2LWNvbW1vbgpAQCAtMCwwICsxLDIzMiBAQAorIyBnZW5lcmFsCithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2ZfdW5zaWduZWRfY2hhcj0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9jaGFyPTF9CithY19jdl9zaXplb2ZfY2hhcl9wPSR7YWNfY3Zfc2l6ZW9mX2NoYXJfcD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2NoYXJfcD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9jaGFyX3A9NH0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD00fQorYWNfY3Zfc2l6ZW9mX2ludF9wPSR7YWNfY3Zfc2l6ZW9mX2ludF9wPTR9CithY19jdl9zaXplb2ZfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nPTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPTR9CithY19jdl9zaXplb2ZfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PTJ9CithY19jdl9zaXplb2Zfc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NpemVfdD00fQorYWNfY3Zfc2l6ZW9mX3NzaXplX3Q9JHthY19jdl9zaXplb2Zfc3NpemVfdD00fQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9NH0KK2FjX2N2X3NpemVvZl9sb25nX3A9JHthY19jdl9zaXplb2ZfbG9uZ19wPTR9CithY19jdl9zaXplb2ZfZmxvYXQ9JHthY19jdl9zaXplb2ZfZmxvYXQ9NH0KK2FjX2N2X3NpemVvZl9vZmZfdD0ke2FjX2N2X3NpemVvZl9vZmZfdD00fQorYWNfY3Zfc2l6ZW9mX3VpZF90PSR7YWNfY3Zfc2l6ZW9mX3VpZF90PTR9CithY19jdl9zaXplb2ZfZ2lkX3Q9JHthY19jdl9zaXplb2ZfZ2lkX3Q9NH0KK2FjX2N2X3NpemVvZl9pbm9fdD0ke2FjX2N2X3NpemVvZl9pbm9fdD00fQorYWNfY3Zfc2l6ZW9mX2Rldl90PSR7YWNfY3Zfc2l6ZW9mX2Rldl90PTh9CithY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9JHthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9eWVzfQorYWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQorYWNfY3ZfZnVuY19wdGhyZWFkX2tleV9kZWxldGU9JHthY19jdl9mdW5jX3B0aHJlYWRfa2V5X2RlbGV0ZT15ZXN9CithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CithY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQorYWNfY3ZfZnVuY19zdGF0X2lnbm9yZXNfdHJhaWxpbmdfc2xhc2g9JHthY19jdl9mdW5jX3N0YXRfaWdub3Jlc190cmFpbGluZ19zbGFzaD1ub30KK2FjX2N2X3ZhX3ZhbF9jb3B5PSR7YWNfY3ZfdmFfdmFsX2NvcHk9eWVzfQorCithY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX2g9JHthY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX2g9bm99CithY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX3Vpb19oPSR7YWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF91aW9faD1ub30KK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CithY19jdl9zY3RwPSR7YWNfY3Zfc2N0cD1ub30KKworYXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPSR7YXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPW5vfQorYXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz0ke2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9eWVzfQorCithY19jdl9wYXRoX0VTRF9DT05GSUc9bm8KK2xmX2N2X3NhbmVfcmVhbGxvYz15ZXMKK2ptX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X2Nsb2JiZXI9bm8KK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllcworYmZfbHNiZj0xCithY19jdl91Y2hhcj0ke2FjX2N2X3VjaGFyPW5vfQorYWNfY3ZfdWludD0ke2FjX2N2X3VpbnQ9eWVzfQorYWNfY3ZfdWxvbmc9JHthY19jdl91bG9uZz15ZXN9CithY19jdl91c2hvcnQ9JHthY19jdl91c2hvcnQ9eWVzfQorCisjIGF1ZGFjaXR5CithY19jdl9maWxlX2xpYl9zcmNfbGlibWFkX2ZyYW1lX2g9JHthY19jdl9maWxlX2xpYl9zcmNfbGlibWFkX2ZyYW1lX2g9bm99CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9eWVzfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9bWlzc2luZ30KKworIyBjbGFtYXYKK2NsYW1hdl9hdl9mdW5jX3dvcmtpbmdfc25wcmludGZfbG9uZz0ke2NsYW1hdl9hdl9mdW5jX3dvcmtpbmdfc25wcmludGZfbG9uZz15ZXN9CitjbGFtYXZfYXZfaGF2ZV9pbl9wb3J0X3Q9JHtjbGFtYXZfYXZfaGF2ZV9pbl9wb3J0X3Q9eWVzfQorY2xhbWF2X2F2X2hhdmVfaW5fYWRkcl90PSR7Y2xhbWF2X2F2X2hhdmVfaW5fYWRkcl90PXllc30KK2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9JHthY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPXllc30KKworIyBjdnMKK2N2c19jdl9mdW5jX3ByaW50Zl9wdHI9JHtjdnNfY3ZfZnVuY19wcmludGZfcHRyPXllc30KKworIyBkYgorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyd9CitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KK2RiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KKworIyBELUJVUworYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBldHRlcmNhcAorZXR0ZXJjYXBfY3ZfdHlwZV9zb2NrbGVuX3Q9JHtldHRlcmNhcF9jdl90eXBlX3NvY2tsZW5fdD15ZXN9CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zeXNfcHRocmVhZF9jb25kX3RpbWVkd2FpdF9wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcG9zaXg9eWVzfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9nZXRzcGVjaWZpY19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfZ2V0c3BlY2lmaWNfcG9zaXg9eWVzfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9tdXRleF90cnlsb2NrX3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9tdXRleF90cnlsb2NrX3Bvc2l4PXllc30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CitnbGliX2N2X3ZhX3ZhbF9jb3B5PSR7Z2xpYl9jdl92YV92YWxfY29weT15ZXN9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj15ZXN9CisKKyMgZ2xpYi0yLjAKK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9CitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTQKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz00CisKKyMgZ3VpbGUKK2FjX2N2X3VjaGFyPSR7YWNfY3ZfdWNoYXI9bm99CithY19jdl91aW50PSR7YWNfY3ZfdWludD15ZXN9CithY19jdl91bG9uZz0ke2FjX2N2X3Vsb25nPXllc30KK2FjX2N2X3VzaG9ydD0ke2FjX2N2X3VzaG9ydD15ZXN9CisKKyMgaW50ZXJjb20KK2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz0ke2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz15ZXN9CisKKyMgamlrZXMtbmF0aXZlCithY19jdl9zaXplb2Zfd2NoYXJfdD00CisKKyMgbGZ0cAorYWNfY3ZfbmVlZF90cmlvPSR7YWNfY3ZfbmVlZF90cmlvPW5vfQorbGZ0cF9jdl92YV92YWxfY29weT0ke2xmdHBfY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBsaWJuZXQgCithY19jdl9sYmxfdW5hbGlnbmVkX2ZhaWw9JHthY19jdl9sYmxfdW5hbGlnbmVkX2ZhaWw9bm99CithY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PSR7YWNfbGlibmV0X2hhdmVfcGFja2V0X3NvY2tldD15ZXN9CisKKyMgbGlieGZjZTR1dGlsCit3aXRoX2Jyb2tlbl9wdXRlbnY9JHt3aXRoX2Jyb2tlbl9wdXRlbnY9bm99CisKKyMgbXlzcWwKK215c3FsX2N2X2Z1bmNfYXRvbWljX3N1Yj0ke215c3FsX2N2X2Z1bmNfYXRvbWljX3N1Yj15ZXN9CitteXNxbF9jdl9mdW5jX2F0b21pY19hZGQ9JHtteXNxbF9jdl9mdW5jX2F0b21pY19hZGQ9eWVzfQorCisjIE9SQml0MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9ib29sZWFuPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfY2hhcj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2RvdWJsZT00CithY19jdl9hbGlnbm9mX0NPUkJBX2Zsb2F0PTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZz00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfZG91YmxlPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19sb25nPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfb2N0ZXQ9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9wb2ludGVyPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc2hvcnQ9MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zdHJ1Y3Q9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV93Y2hhcj0yCisKKyMgcGhwCithY19jdl9wcmVhZD0ke2FjX2N2X3ByZWFkPW5vfQorYWNfY3ZfcHdyaXRlPSR7YWNfY3ZfcHdyaXRlPW5vfQorcGhwX2N2X2xpYl9jb29raWVfaW9fZnVuY3Rpb25zX3VzZV9vZmY2NF90PSR7cGhwX2N2X2xpYl9jb29raWVfaW9fZnVuY3Rpb25zX3VzZV9vZmY2NF90PXllc30KKworIyByc3luYworcnN5bmNfY3ZfSEFWRV9CUk9LRU5fTEFSR0VGSUxFPSR7cnN5bmNfY3ZfSEFWRV9CUk9LRU5fTEFSR0VGSUxFPW5vfQorcnN5bmNfY3ZfSEFWRV9TT0NLRVRQQUlSPSR7cnN5bmNfY3ZfSEFWRV9TT0NLRVRQQUlSPXllc30KK3JzeW5jX2N2X0hBVkVfTE9OR0xPTkc9JHtyc3luY19jdl9IQVZFX0xPTkdMT05HPXllc30KK3JzeW5jX2N2X0hBVkVfT0ZGNjRfVD0ke3JzeW5jX2N2X0hBVkVfT0ZGNjRfVD1ub30KK3JzeW5jX2N2X0hBVkVfU0hPUlRfSU5PX1Q9JHtyc3luY19jdl9IQVZFX1NIT1JUX0lOT19UPW5vfQorcnN5bmNfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPSR7cnN5bmNfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPW5vfQorcnN5bmNfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj0ke3JzeW5jX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9bm99Cityc3luY19jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3JzeW5jX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KK3JzeW5jX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj0ke3JzeW5jX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj15ZXN9Cityc3luY19jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPSR7cnN5bmNfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD15ZXN9Cityc3luY19jdl9SRVBMQUNFX0lORVRfTlRPQT0ke3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9OVE9BPW5vfQorcnN5bmNfY3ZfUkVQTEFDRV9JTkVUX0FUT049JHtyc3luY19jdl9SRVBMQUNFX0lORVRfQVRPTj1ub30KKworIyBzYW1iYQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CisKKyMgc2NyZWVuCitzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9eWVzfQorc2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD0ke3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPSR7c2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPXllc30KKworIyBzbHJuCitzbHJuX2N2X3ZhX3ZhbF9jb3B5PSR7c2xybl9jdl92YV92YWxfY29weT15ZXN9CisKKyMgc3NoCithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfZGlyZW50X2hhdmVfc3BhY2VfZF9uYW1lPXllc30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl90eXBlX3N0cnVjdF90aW1lc3BlYz0ke2FjX2N2X3R5cGVfc3RydWN0X3RpbWVzcGVjPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz15ZXN9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz15ZXMKKworIyB4ZmZtCitqbV9jdl9mdW5jX3dvcmtpbmdfcmVhZGRpcj15ZXMKKworIyB4b3JnIFgxMVI3CithY19jdl9zeXNfbGlua2VyX2g9JHthY19jdl9zeXNfbGlua2VyX2g9bm99CithY19jdl9maWxlX191c3Jfc2hhcmVfWDExX3NnbWxfZGVmc19lbnQ9JHthY19jdl9maWxlX191c3Jfc2hhcmVfWDExX3NnbWxfZGVmc19lbnQ9bm99CisKKyMgZXZvbHV0aW9uLWRhdGEtc2VydmVyCithY19jdl9saWJpY29udl91dGY4PSR7YWNfY3ZfbGliaWNvbnZfdXRmOD15ZXN9CisKKyNkYnVzCithY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9JHthY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9eWVzfQorCisjbGlicGNpYWNjZXNzCitoYXZlX210cnJfaD15ZXMKKworI21vemlsbGEKK21vel9jdl9zaXplX29mX0pTX0JZVEVTX1BFUl9XT1JEPTQKK21vel9jdl9hbGlnbl9vZl9KU19BTElHTl9PRl9QT0lOVEVSPTQKK21vel9jdl9zaXplX29mX0pTX0JZVEVTX1BFUl9ET1VCTEU9OAorCisjb2Zvbm8KK2FjX2N2X2xpYl9jX3NpZ25hbGZkPSR7YWNfY3ZfbGliX2Nfc2lnbmFsZmQ9eWVzfQorCisjdW5mczMKK25mc2RfY3ZfYnJva2VuX3NldGZzdWlkPSR7bmZzZF9jdl9icm9rZW5fc2V0ZnN1aWQ9MH0KK25mc2RfY3ZfZnVuY19zdGF0ZnM9JHtuZnNkX2N2X2Z1bmNfc3RhdGZzPXN0YXRmczJfYnNpemV9CituZnNkX2N2X2JzZF9zaWduYWxzPSR7bmZzZF9jdl9ic2Rfc2lnbmFscz15ZXN9CisKKyMgYXQtc3BpMi1jb3JlCithY19jdl9hbGlnbm9mX2NoYXI9MQorYWNfY3ZfYWxpZ25vZl9kYmluZF9wb2ludGVyPTQKK2FjX2N2X2FsaWdub2ZfZGJpbmRfc3RydWN0PTEKK2FjX2N2X2FsaWdub2ZfZGJ1c19ib29sX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDE2X3Q9MgorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDMyX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDY0X3Q9NAorYWNfY3ZfYWxpZ25vZl9kb3VibGU9NApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwcy1jb21tb24gYi95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzLWNvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWQ3MmNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwcy1jb21tb24KQEAgLTAsMCArMSw1NiBAQAorIyBnZW5lcmFsCithY19jdl92YV92YWxfY29weT0ke2FjX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworIyBjdnMKK2N2c19jdl9mdW5jX3ByaW50Zl9wdHI9JHtjdnNfY3ZfZnVuY19wcmludGZfcHRyPXllc30KKworIyBzY3JlZW4KK3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD0ke3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD15ZXN9CitzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPSR7c2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9JHtzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9eWVzfQorCisjIE9SQml0MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9vY3RldD0xCithY19jdl9hbGlnbm9mX0NPUkJBX2Jvb2xlYW49MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9jaGFyPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfd2NoYXI9MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zaG9ydD0yCithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmc9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2xvbmc9OAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9mbG9hdD00CithY19jdl9hbGlnbm9mX0NPUkJBX2RvdWJsZT04CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfZG91YmxlPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfcG9pbnRlcj00CithY19jdl9hbGlnbm9mX0NPUkJBX3N0cnVjdD0xCisKKyMgYXBhY2hlCithY19jdl9mdW5jX3B0aHJlYWRfa2V5X2RlbGV0ZT0ke2FjX2N2X2Z1bmNfcHRocmVhZF9rZXlfZGVsZXRlPXllc30KK2Fwcl9jdl9wcm9jZXNzX3NoYXJlZF93b3Jrcz0ke2Fwcl9jdl9wcm9jZXNzX3NoYXJlZF93b3Jrcz1ub30KK2FjX2N2X3NpemVvZl9zc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NzaXplX3Q9NH0KK2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9JHthcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPXllc30KKworIyBnbGliCitnbGliX2N2X3ZhX3ZhbF9jb3B5PSR7Z2xpYl9jdl92YV92YWxfY29weT15ZXN9CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz00CisKKworIyBzbHJuCitzbHJuX2N2X3ZhX3ZhbF9jb3B5PSR7c2xybl9jdl92YV92YWxfY29weT15ZXN9CisKKyMgYXQtc3BpMi1jb3JlCithY19jdl9hbGlnbm9mX2NoYXI9MQorYWNfY3ZfYWxpZ25vZl9kYmluZF9wb2ludGVyPTQKK2FjX2N2X2FsaWdub2ZfZGJpbmRfc3RydWN0PTEKK2FjX2N2X2FsaWdub2ZfZGJ1c19ib29sX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDE2X3Q9MgorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDMyX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDY0X3Q9OAorYWNfY3ZfYWxpZ25vZl9kb3VibGU9OApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwcy1saW51eCBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHMtbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJhNTRmOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHMtbGludXgKQEAgLTAsMCArMSw3OSBAQAorIyBnZW5lcmFsCithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9bm99CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1wcmVzZW50fQorCisjIG9wZW5zc2gKK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj1ub30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9bm99CithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD15ZXN9CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9fX3ZhX2NvcHk9JHtnbGliX2N2X19fdmFfY29weT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KKworIyBnbGliLTIuMAorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99Cit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxNX0KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9JHtsZl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBuY2Z0cAord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPWxvbmd9Cit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz1sb25nfQorCisjIGRiCitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcnfQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorCisjIHJyZHRvb2wKK3JkX2N2X2llZWVfd29ya3M9JHtyZF9jdl9pZWVlX3dvcmtzPXllc30KKyMgYWNfY3ZfcGF0aF9QRVJMPSR7YWNfY3ZfcGF0aF9QRVJMPW5vfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIHNhbWJhCitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KKworIyB2aW0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CisKKyMgaW50ZXJjb20KK2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz0ke2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz15ZXN9CisKKyMgbG1iZW5jaAorYWNfY3ZfdWludD0ke2FjX2N2X3VuaXQ9eWVzfQorCisjIEQtQlVTCithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorCisjIGV2b2x1dGlvbi1kYXRhLXNlcnZlcgorYWNfY3ZfbGliaWNvbnZfdXRmOD0ke2FjX2N2X2xpYmljb252X3V0Zjg9eWVzfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzLWxpbnV4LXVjbGliYyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHMtbGludXgtdWNsaWJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMzM2M2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzLWxpbnV4LXVjbGliYwpAQCAtMCwwICsxLDgwIEBACisjIGdlbmVyYWwKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD0ke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ub30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT1ub30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPXByZXNlbnR9CisKKyMgb3BlbnNzaAorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj1ub30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz1ub30KK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PXllc30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KKworIyBnbGliCitnbGliX2N2X19fdmFfY29weT0ke2dsaWJfY3ZfX192YV9jb3B5PXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPW5vfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorCisjIGdsaWItMi4wCitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE1fQorZ2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT0ke2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9eWVzfQorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz0ke2xmX2N2X3NhbmVfcmVhbGxvYz15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIG5jZnRwCit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9bG9uZ30KK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPWxvbmd9Cit3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPSR7d2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz15ZXN9CisKKyMgZGIKK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyd9CitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CisKKyMgcnJkdG9vbAorcmRfY3ZfaWVlZV93b3Jrcz0ke3JkX2N2X2llZWVfd29ya3M9eWVzfQorIyBhY19jdl9wYXRoX1BFUkw9JHthY19jdl9wYXRoX1BFUkw9bm99CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorCisjIHZpbQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KKworIyBpbnRlcmNvbQorYWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPSR7YWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPXllc30KKworIyBsbWJlbmNoCithY19jdl91aW50PSR7YWNfY3ZfdW5pdD15ZXN9CisKKyMgRC1CVVMKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgZXZvbHV0aW9uLWRhdGEtc2VydmVyCithY19jdl9saWJpY29udl91dGY4PSR7YWNfY3ZfbGliaWNvbnZfdXRmOD15ZXN9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHM2NC1saW51eCBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHM2NC1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDBmYmJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwczY0LWxpbnV4CkBAIC0wLDAgKzEsODMgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPSR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vfQorCisjIGJhc2gKK2FjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPW5vfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9cHJlc2VudH0KKworIyBvcGVuc3NoCithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPW5vfQorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9eWVzfQorCisjIGZnZXQKK2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9eWVzfQorCisjIGdsaWIKK2dsaWJfY3ZfX192YV9jb3B5PSR7Z2xpYl9jdl9fX3ZhX2NvcHk9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49bm99CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CisKKyMgZ2xpYi0yLjAKK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9CitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz04CithY19jdl9zaXplb2Zfc3NpemVfdD04CisKKyMgbGlicGNhcAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KKworIyBzdGFydHVwLW5vdGlmaWNhdGlvbgorbGZfY3Zfc2FuZV9yZWFsbG9jPSR7bGZfY3Zfc2FuZV9yZWFsbG9jPXllc30KKworIyBsaWJpZGwKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisKKyMgbmNmdHAKK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz1sb25nfQord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9bG9uZ30KKworIyBkYgorZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nJ30KK2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KK2RiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KKworIyBycmR0b29sCityZF9jdl9pZWVlX3dvcmtzPSR7cmRfY3ZfaWVlZV93b3Jrcz15ZXN9CisjIGFjX2N2X3BhdGhfUEVSTD0ke2FjX2N2X3BhdGhfUEVSTD1ub30KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworIyBzYW1iYQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CisKKyMgdmltCithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorCisjIGludGVyY29tCithY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9JHthY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9eWVzfQorCisjIGxtYmVuY2gKK2FjX2N2X3VpbnQ9JHthY19jdl91bml0PXllc30KKworIyBELUJVUworYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBlZHMtZGJ1cworYWNfY3ZfbGliaWNvbnZfdXRmOD0ke2FjX2N2X2xpYmljb252X3V0Zjg9eWVzfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzNjQtbGludXgtdWNsaWJjIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwczY0LWxpbnV4LXVjbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmJhNTUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwczY0LWxpbnV4LXVjbGliYwpAQCAtMCwwICsxLDgzIEBACisjIGdlbmVyYWwKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD0ke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ub30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT1ub30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPXByZXNlbnR9CisKKyMgb3BlbnNzaAorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj1ub30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz1ub30KK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PXllc30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KKworIyBnbGliCitnbGliX2N2X19fdmFfY29weT0ke2dsaWJfY3ZfX192YV9jb3B5PXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPW5vfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorCisjIGdsaWItMi4wCitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE1fQorZ2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT0ke2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9eWVzfQorYWNfY3ZfYWxpZ25vZl9ndWludDMyPTQKK2FjX2N2X2FsaWdub2ZfZ3VpbnQ2ND04CithY19jdl9hbGlnbm9mX3Vuc2lnbmVkX2xvbmc9OAorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz0ke2xmX2N2X3NhbmVfcmVhbGxvYz15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIG5jZnRwCit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9bG9uZ30KK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPWxvbmd9Cit3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPSR7d2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz15ZXN9CisKKyMgZGIKK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyd9CitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CisKKyMgcnJkdG9vbAorcmRfY3ZfaWVlZV93b3Jrcz0ke3JkX2N2X2llZWVfd29ya3M9eWVzfQorIyBhY19jdl9wYXRoX1BFUkw9JHthY19jdl9wYXRoX1BFUkw9bm99CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorCisjIHZpbQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KKworIyBpbnRlcmNvbQorYWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPSR7YWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPXllc30KKworIyBsbWJlbmNoCithY19jdl91aW50PSR7YWNfY3ZfdW5pdD15ZXN9CisKKyMgRC1CVVMKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgZWRzLWRidXMKK2FjX2N2X2xpYmljb252X3V0Zjg9JHthY19jdl9saWJpY29udl91dGY4PXllc30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwczY0ZWwtbGludXggYi95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzNjRlbC1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjYxZWIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwczY0ZWwtbGludXgKQEAgLTAsMCArMSw4MiBAQAorIyBnZW5lcmFsCithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9bm99CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1wcmVzZW50fQorCisjIG9wZW5zc2gKK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj1ub30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9bm99CithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD15ZXN9CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9fX3ZhX2NvcHk9JHtnbGliX2N2X19fdmFfY29weT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KKworIyBnbGliLTIuMAorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99Cit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxNX0KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KK2FjX2N2X2FsaWdub2ZfZ3VpbnQzMj00CithY19jdl9hbGlnbm9mX2d1aW50NjQ9OAorYWNfY3ZfYWxpZ25vZl91bnNpZ25lZF9sb25nPTgKKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9JHtsZl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBuY2Z0cAord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPWxvbmd9Cit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz1sb25nfQord2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz0ke3dpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9eWVzfQorCisjIGRiCitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcnfQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorCisjIHJyZHRvb2wKK3JkX2N2X2llZWVfd29ya3M9JHtyZF9jdl9pZWVlX3dvcmtzPXllc30KKyMgYWNfY3ZfcGF0aF9QRVJMPSR7YWNfY3ZfcGF0aF9QRVJMPW5vfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIHNhbWJhCitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KKworIyB2aW0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CisKKyMgaW50ZXJjb20KK2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz0ke2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz15ZXN9CisKKyNsbWJlbmNoCithY19jdl91aW50PSR7YWNfY3ZfdW5pdD15ZXN9CisKKyMgRC1CVVMKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgZWRzLWRidXMKK2FjX2N2X2xpYmljb252X3V0Zjg9JHthY19jdl9saWJpY29udl91dGY4PXllc30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHM2NGVsLWxpbnV4LXVjbGliYyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHM2NGVsLWxpbnV4LXVjbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTA0OTlkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwczY0ZWwtbGludXgtdWNsaWJjCkBAIC0wLDAgKzEsMTA4IEBACisjIGdlbmVyYWwKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD0ke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ub30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT1ub30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPXByZXNlbnR9CisKKyMgb3BlbnNzaAorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj1ub30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz1ub30KK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PXllc30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KKworIyBnbGliCitnbGliX2N2X19fdmFfY29weT0ke2dsaWJfY3ZfX192YV9jb3B5PXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPW5vfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorCisjIGdsaWItMi4wCitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE1fQorZ2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT0ke2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9eWVzfQorYWNfY3ZfYWxpZ25vZl9ndWludDMyPTQKK2FjX2N2X2FsaWdub2ZfZ3VpbnQ2ND04CithY19jdl9hbGlnbm9mX3Vuc2lnbmVkX2xvbmc9OAorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz0ke2xmX2N2X3NhbmVfcmVhbGxvYz15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIG5jZnRwCit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9bG9uZ30KK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPWxvbmd9Cit3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPSR7d2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz15ZXN9CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgc2FtYmEKKyMgZnJvbSBzYW1iYSAzLjAuMTRhIG9uIDUvMjkvMjAwNQorYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz0ke2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9eWVzfQorYWNfY3ZfaGF2ZV9hc3ByaW50Zl9kZWNsPSR7YWNfY3ZfaGF2ZV9hc3ByaW50Zl9kZWNsPXllc30KK2FjX2N2X2hhdmVfc2V0cmVzZ2lkX2RlY2w9JHthY19jdl9oYXZlX3NldHJlc2dpZF9kZWNsPXllc30KK2FjX2N2X2hhdmVfc2V0cmVzdWlkX2RlY2w9JHthY19jdl9oYXZlX3NldHJlc3VpZF9kZWNsPXllc30KK2FjX2N2X2hhdmVfdmFzcHJpbnRmX2RlY2w9JHthY19jdl9oYXZlX3Zhc3ByaW50Zl9kZWNsPXllc30KK2Z1X2N2X3N5c19zdGF0X3N0YXR2ZnM2ND0ke2Z1X2N2X3N5c19zdGF0X3N0YXR2ZnM2ND15ZXN9CitzYW1iYV9jdl9GVFJVTkNBVEVfTkVFRFNfUk9PVD0ke3NhbWJhX2N2X0ZUUlVOQ0FURV9ORUVEU19ST09UPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fRkNOVEw2NF9MT0NLUz0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0ZDTlRMNjRfTE9DS1M9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9HRVRHUk9VUFM9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9HRVRHUk9VUFM9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj1ub30KK3NhbWJhX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj0ke3NhbWJhX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj15ZXN9CitzYW1iYV9jdl9IQVZFX0RFVjY0X1Q9JHtzYW1iYV9jdl9IQVZFX0RFVjY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX0RFVklDRV9NQUpPUl9GTj0ke3NhbWJhX2N2X0hBVkVfREVWSUNFX01BSk9SX0ZOPXllc30KK3NhbWJhX2N2X0hBVkVfREVWSUNFX01JTk9SX0ZOPSR7c2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUlOT1JfRk49eWVzfQorc2FtYmFfY3ZfSEFWRV9FWFBMSUNJVF9MQVJHRUZJTEVfU1VQUE9SVD0ke3NhbWJhX2N2X0hBVkVfRVhQTElDSVRfTEFSR0VGSUxFX1NVUFBPUlQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9GQ05UTF9MT0NLPSR7c2FtYmFfY3ZfSEFWRV9GQ05UTF9MT0NLPXllc30KK3NhbWJhX2N2X0hBVkVfRlRSVU5DQVRFX0VYVEVORD0ke3NhbWJhX2N2X0hBVkVfRlRSVU5DQVRFX0VYVEVORD15ZXN9CitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KK3NhbWJhX2N2X0hBVkVfSU5PNjRfVD0ke3NhbWJhX2N2X0hBVkVfSU5PNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9eWVzfQorc2FtYmFfY3ZfSEFWRV9NQUtFREVWPSR7c2FtYmFfY3ZfSEFWRV9NQUtFREVWPXllc30KK3NhbWJhX2N2X0hBVkVfTU1BUD0ke3NhbWJhX2N2X0hBVkVfTU1BUD15ZXN9CitzYW1iYV9jdl9IQVZFX09GRjY0X1Q9JHtzYW1iYV9jdl9IQVZFX09GRjY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX1FVT1RBQ1RMXzRBPSR7c2FtYmFfY3ZfSEFWRV9RVU9UQUNUTF80QT15ZXN9CitzYW1iYV9jdl9IQVZFX1JPT1Q9JHtzYW1iYV9jdl9IQVZFX1JPT1Q9bm99CitzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPSR7c2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRElSRU5UNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9ESVJFTlQ2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1RSVU5DQVRFRF9TQUxUPSR7c2FtYmFfY3ZfSEFWRV9UUlVOQ0FURURfU0FMVD1ub30KK3NhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj0ke3NhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj1ub30KK3NhbWJhX2N2X0hBVkVfV09SS0lOR19BRl9MT0NBTD0ke3NhbWJhX2N2X0hBVkVfV09SS0lOR19BRl9MT0NBTD1ub30KK3NhbWJhX2N2X0hBVkVfV2Vycm9yPSR7c2FtYmFfY3ZfSEFWRV9XZXJyb3I9eWVzfQorc2FtYmFfY3ZfUkVBTFBBVEhfVEFLRVNfTlVMTD0ke3NhbWJhX2N2X1JFQUxQQVRIX1RBS0VTX05VTEw9bm99CitzYW1iYV9jdl9SRVBMQUNFX0lORVRfTlRPQT0ke3NhbWJhX2N2X1JFUExBQ0VfSU5FVF9OVE9BPW5vfQorc2FtYmFfY3ZfU0laRU9GX0lOT19UPSR7c2FtYmFfY3ZfU0laRU9GX0lOT19UPXllc30KK3NhbWJhX2N2X1NJWkVPRl9PRkZfVD0ke3NhbWJhX2N2X1NJWkVPRl9PRkZfVD15ZXN9CitzYW1iYV9jdl9TWVNDT05GX1NDX05HUk9VUFNfTUFYPSR7c2FtYmFfY3ZfU1lTQ09ORl9TQ19OR1JPVVBTX01BWD15ZXN9CitzYW1iYV9jdl9TWVNDT05GX1NDX05QUk9DX09OTE49JHtzYW1iYV9jdl9TWVNDT05GX1NDX05QUk9DX09OTE49bm99CitzYW1iYV9jdl9TWVNRVU9UQV9GT1VORD0ke3NhbWJhX2N2X1NZU1FVT1RBX0ZPVU5EPXllc30KK3NhbWJhX2N2X1NZU1FVT1RBX1dPUktTPSR7c2FtYmFfY3ZfU1lTUVVPVEFfV09SS1M9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9eWVzfQorc2FtYmFfY3ZfaGF2ZV9sb25nbG9uZz0ke3NhbWJhX2N2X2hhdmVfbG9uZ2xvbmc9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPXllc30KK3NhbWJhX2N2X3N5c3F1b3Rhc19maWxlPSR7c2FtYmFfY3Zfc3lzcXVvdGFzX2ZpbGU9bGliL3N5c3F1b3Rhc180QS5jfQorIyBUaGlzIGNhY2hlZCB2YWx1ZSBuZWVkcyBhIGxvY2FsIHBhdGNoIHRvIHBpY2sgaXQgdXAsIHVwc3RyZWFtIDMuMC4xNGEKKyMgZG9lc24ndCBjYWNoZSBpdC4KK3NhbWJhX2N2X0xJTlVYX0xGU19TVVBQT1JUPSR7c2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9eWVzfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwc2VsLWxpbnV4IGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwc2VsLWxpbnV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NmIxYmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzZWwtbGludXgKQEAgLTAsMCArMSw3OSBAQAorIyBnZW5lcmFsCithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9bm99CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1wcmVzZW50fQorCisjIG9wZW5zc2gKK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj1ub30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9bm99CithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD15ZXN9CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9fX3ZhX2NvcHk9JHtnbGliX2N2X19fdmFfY29weT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KKworIyBnbGliLTIuMAorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99Cit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxNX0KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9JHtsZl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBuY2Z0cAord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPWxvbmd9Cit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz1sb25nfQord2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz0ke3dpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9eWVzfQorCisjIGRiCitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcnfQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorCisjIHJyZHRvb2wKK3JkX2N2X2llZWVfd29ya3M9JHtyZF9jdl9pZWVlX3dvcmtzPXllc30KKyMgYWNfY3ZfcGF0aF9QRVJMPSR7YWNfY3ZfcGF0aF9QRVJMPW5vfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIHNhbWJhCitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KKworIyB2aW0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CisKKyMgaW50ZXJjb20KK2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz0ke2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz15ZXN9CisKKyNsbWJlbmNoCithY19jdl91aW50PSR7YWNfY3ZfdW5pdD15ZXN9CisKKyMgRC1CVVMKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgZXZvbHV0aW9uLWRhdGEtc2VydmVyCithY19jdl9saWJpY29udl91dGY4PSR7YWNfY3ZfbGliaWNvbnZfdXRmOD15ZXN9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzZWwtbGludXgtdWNsaWJjIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwc2VsLWxpbnV4LXVjbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTIxY2RhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwc2VsLWxpbnV4LXVjbGliYwpAQCAtMCwwICsxLDEwMCBAQAorIyBnZW5lcmFsCithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9bm99CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1wcmVzZW50fQorCisjIG9wZW5zc2gKK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj1ub30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9bm99CithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD15ZXN9CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9fX3ZhX2NvcHk9JHtnbGliX2N2X19fdmFfY29weT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9JHtsZl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBuY2Z0cAord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPWxvbmd9Cit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz1sb25nfQord2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz0ke3dpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9eWVzfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIHNhbWJhCisjIGZyb20gc2FtYmEgMy4wLjE0YSBvbiA1LzI5LzIwMDUKK2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9JHthY19jdl9mdW5jX21lbWNtcF93b3JraW5nPXllc30KK2FjX2N2X2hhdmVfYXNwcmludGZfZGVjbD0ke2FjX2N2X2hhdmVfYXNwcmludGZfZGVjbD15ZXN9CithY19jdl9oYXZlX3NldHJlc2dpZF9kZWNsPSR7YWNfY3ZfaGF2ZV9zZXRyZXNnaWRfZGVjbD15ZXN9CithY19jdl9oYXZlX3NldHJlc3VpZF9kZWNsPSR7YWNfY3ZfaGF2ZV9zZXRyZXN1aWRfZGVjbD15ZXN9CithY19jdl9oYXZlX3Zhc3ByaW50Zl9kZWNsPSR7YWNfY3ZfaGF2ZV92YXNwcmludGZfZGVjbD15ZXN9CitmdV9jdl9zeXNfc3RhdF9zdGF0dmZzNjQ9JHtmdV9jdl9zeXNfc3RhdF9zdGF0dmZzNjQ9eWVzfQorc2FtYmFfY3ZfRlRSVU5DQVRFX05FRURTX1JPT1Q9JHtzYW1iYV9jdl9GVFJVTkNBVEVfTkVFRFNfUk9PVD1ub30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX0ZDTlRMNjRfTE9DS1M9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9GQ05UTDY0X0xPQ0tTPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fR0VUR1JPVVBTPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fR0VUR1JPVVBTPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9bm99CitzYW1iYV9jdl9IQVZFX0M5OV9WU05QUklOVEY9JHtzYW1iYV9jdl9IQVZFX0M5OV9WU05QUklOVEY9eWVzfQorc2FtYmFfY3ZfSEFWRV9ERVY2NF9UPSR7c2FtYmFfY3ZfSEFWRV9ERVY2NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUFKT1JfRk49JHtzYW1iYV9jdl9IQVZFX0RFVklDRV9NQUpPUl9GTj15ZXN9CitzYW1iYV9jdl9IQVZFX0RFVklDRV9NSU5PUl9GTj0ke3NhbWJhX2N2X0hBVkVfREVWSUNFX01JTk9SX0ZOPXllc30KK3NhbWJhX2N2X0hBVkVfRVhQTElDSVRfTEFSR0VGSUxFX1NVUFBPUlQ9JHtzYW1iYV9jdl9IQVZFX0VYUExJQ0lUX0xBUkdFRklMRV9TVVBQT1JUPXllc30KK3NhbWJhX2N2X0hBVkVfRkNOVExfTE9DSz0ke3NhbWJhX2N2X0hBVkVfRkNOVExfTE9DSz15ZXN9CitzYW1iYV9jdl9IQVZFX0ZUUlVOQ0FURV9FWFRFTkQ9JHtzYW1iYV9jdl9IQVZFX0ZUUlVOQ0FURV9FWFRFTkQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CitzYW1iYV9jdl9IQVZFX0lOTzY0X1Q9JHtzYW1iYV9jdl9IQVZFX0lOTzY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPXllc30KK3NhbWJhX2N2X0hBVkVfTUFLRURFVj0ke3NhbWJhX2N2X0hBVkVfTUFLRURFVj15ZXN9CitzYW1iYV9jdl9IQVZFX01NQVA9JHtzYW1iYV9jdl9IQVZFX01NQVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9PRkY2NF9UPSR7c2FtYmFfY3ZfSEFWRV9PRkY2NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9RVU9UQUNUTF80QT0ke3NhbWJhX2N2X0hBVkVfUVVPVEFDVExfNEE9eWVzfQorc2FtYmFfY3ZfSEFWRV9ST09UPSR7c2FtYmFfY3ZfSEFWRV9ST09UPW5vfQorc2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD0ke3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PXllc30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0RJUkVOVDY0PSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRElSRU5UNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9UUlVOQ0FURURfU0FMVD0ke3NhbWJhX2N2X0hBVkVfVFJVTkNBVEVEX1NBTFQ9bm99CitzYW1iYV9jdl9IQVZFX1VOU0lHTkVEX0NIQVI9JHtzYW1iYV9jdl9IQVZFX1VOU0lHTkVEX0NIQVI9bm99CitzYW1iYV9jdl9IQVZFX1dPUktJTkdfQUZfTE9DQUw9JHtzYW1iYV9jdl9IQVZFX1dPUktJTkdfQUZfTE9DQUw9bm99CitzYW1iYV9jdl9IQVZFX1dlcnJvcj0ke3NhbWJhX2N2X0hBVkVfV2Vycm9yPXllc30KK3NhbWJhX2N2X1JFQUxQQVRIX1RBS0VTX05VTEw9JHtzYW1iYV9jdl9SRUFMUEFUSF9UQUtFU19OVUxMPW5vfQorc2FtYmFfY3ZfUkVQTEFDRV9JTkVUX05UT0E9JHtzYW1iYV9jdl9SRVBMQUNFX0lORVRfTlRPQT1ub30KK3NhbWJhX2N2X1NJWkVPRl9JTk9fVD0ke3NhbWJhX2N2X1NJWkVPRl9JTk9fVD15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9eWVzfQorc2FtYmFfY3ZfU1lTQ09ORl9TQ19OR1JPVVBTX01BWD0ke3NhbWJhX2N2X1NZU0NPTkZfU0NfTkdST1VQU19NQVg9eWVzfQorc2FtYmFfY3ZfU1lTQ09ORl9TQ19OUFJPQ19PTkxOPSR7c2FtYmFfY3ZfU1lTQ09ORl9TQ19OUFJPQ19PTkxOPW5vfQorc2FtYmFfY3ZfU1lTUVVPVEFfRk9VTkQ9JHtzYW1iYV9jdl9TWVNRVU9UQV9GT1VORD15ZXN9CitzYW1iYV9jdl9TWVNRVU9UQV9XT1JLUz0ke3NhbWJhX2N2X1NZU1FVT1RBX1dPUktTPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPXllc30KK3NhbWJhX2N2X2hhdmVfbG9uZ2xvbmc9JHtzYW1iYV9jdl9oYXZlX2xvbmdsb25nPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD15ZXN9CitzYW1iYV9jdl9zeXNxdW90YXNfZmlsZT0ke3NhbWJhX2N2X3N5c3F1b3Rhc19maWxlPWxpYi9zeXNxdW90YXNfNEEuY30KKyMgVGhpcyBjYWNoZWQgdmFsdWUgbmVlZHMgYSBsb2NhbCBwYXRjaCB0byBwaWNrIGl0IHVwLCB1cHN0cmVhbSAzLjAuMTRhCisjIGRvZXNuJ3QgY2FjaGUgaXQuCitzYW1iYV9jdl9MSU5VWF9MRlNfU1VQUE9SVD0ke3NhbWJhX2N2X0xJTlVYX0xGU19TVVBQT1JUPXllc30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL25hdGl2ZSBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL25hdGl2ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGZiMWNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbmF0aXZlCkBAIC0wLDAgKzEgQEAKK2FjX2N2X3BhdGhfU0VEPXNlZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvcG93ZXJwYy1jb21tb24gYi95b2N0by1wb2t5L21ldGEvc2l0ZS9wb3dlcnBjLWNvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmEyOTljCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvcG93ZXJwYy1jb21tb24KQEAgLTAsMCArMSwxNCBAQAorIyBnbGliCithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz00CisKKyMgYXQtc3BpMi1jb3JlCithY19jdl9hbGlnbm9mX2NoYXI9MQorYWNfY3ZfYWxpZ25vZl9kYmluZF9wb2ludGVyPTQKK2FjX2N2X2FsaWdub2ZfZGJpbmRfc3RydWN0PTEKK2FjX2N2X2FsaWdub2ZfZGJ1c19ib29sX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDE2X3Q9MgorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDMyX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDY0X3Q9OAorYWNfY3ZfYWxpZ25vZl9kb3VibGU9OApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvcG93ZXJwYy1kYXJ3aW4gYi95b2N0by1wb2t5L21ldGEvc2l0ZS9wb3dlcnBjLWRhcndpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODVmNTBiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvcG93ZXJwYy1kYXJ3aW4KQEAgLTAsMCArMSw3IEBACisjIHBrZ2NvbmZpZy1uYXRpdmUgZm9yIE9TIFggYnVpZAorYWNfY3Zfc2l6ZW9mX2NoYXI9JHthY19jdl9zaXplb2ZfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmc9NH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfc2hvcnQ9JHthY19jdl9zaXplb2Zfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTR9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9wb3dlcnBjLWxpbnV4IGIveW9jdG8tcG9reS9tZXRhL3NpdGUvcG93ZXJwYy1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWY4OWNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvcG93ZXJwYy1saW51eApAQCAtMCwwICsxLDE2IEBACisjIGdlbmVyYWwKK2FjX2N2X3ZhX3ZhbF9jb3B5PSR7YWNfY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9eWVzCisKKyMgZ2xpYgorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorZ2xpYl9jdl92YV92YWxfY29weT0ke2dsaWJfY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIGxmdHAKK2xmdHBfY3ZfdmFfdmFsX2NvcHk9JHtsZnRwX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworIyBzbHJuCitzbHJuX2N2X3ZhX3ZhbF9jb3B5PSR7c2xybl9jdl92YV92YWxfY29weT15ZXN9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9wb3dlcnBjMzItbGludXggYi95b2N0by1wb2t5L21ldGEvc2l0ZS9wb3dlcnBjMzItbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM5MjlhYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL3Bvd2VycGMzMi1saW51eApAQCAtMCwwICsxLDI3NSBAQAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vCithY19jdl9zaXplb2ZfX19pbnQ2ND0ke2FjX2N2X3NpemVvZl9fX2ludDY0PTB9CithY19jdl9zaXplb2ZfYm9vbD0ke2FjX2N2X3NpemVvZl9ib29sPTF9CithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2ZfY2hhcl9wPSR7YWNfY3Zfc2l6ZW9mX2NoYXJfcD00fQorYWNfY3Zfc2l6ZW9mX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9kb3VibGU9OH0KK2FjX2N2X3NpemVvZl9mbG9hdD0ke2FjX2N2X3NpemVvZl9mbG9hdD00fQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl9pbnRfcD0ke2FjX2N2X3NpemVvZl9pbnRfcD00fQorYWNfY3Zfc2l6ZW9mX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZz00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfcD0ke2FjX2N2X3NpemVvZl9sb25nX3A9NH0KK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0xNn0KK2FjX2N2X3NpemVvZl9sb25nX2ludD0ke2FjX2N2X3NpemVvZl9sb25nX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZ19pbnQ9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcj0ke2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9jaGFyPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2NoYXI9MX0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19pbnQ9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQ9OH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTR9CithY19jdl9zaXplb2Zfd2NoYXJfdD0ke2FjX2N2X3NpemVvZl93Y2hhcl90PTR9CithY19jdl90eXBlX19faW50NjQ9JHthY19jdl90eXBlX19faW50NjQ9bm99CithY19jdl90eXBlX3NpemVfdD0ke2FjX2N2X3R5cGVfc2l6ZV90PXllc30KK2FjX2N2X3R5cGVfdm9pZF9wPSR7YWNfY3ZfdHlwZV92b2lkX3A9eWVzfQorYWNfY3ZfdWNoYXI9JHthY19jdl91Y2hhcj1ub30KK2FjX2N2X3VpbnQ9JHthY19jdl91aW50PXllc30KK2FjX2N2X3Vsb25nPSR7YWNfY3ZfdWxvbmc9eWVzfQorYWNfY3ZfdXNob3J0PSR7YWNfY3ZfdXNob3J0PXllc30KK2FjX2N2X3RpbWVfcl90eXBlPSR7YWNfY3ZfdGltZV9yX3R5cGU9UE9TSVh9Citjb29raWVfaW9fZnVuY3Rpb25zX3VzZV9vZmY2NF90PSR7Y29va2llX2lvX2Z1bmN0aW9uc191c2Vfb2ZmNjRfdD15ZXN9CisKKworIyBhcGFjaGUKK2FjX2N2X2Z1bmNfcHRocmVhZF9rZXlfZGVsZXRlPSR7YWNfY3ZfZnVuY19wdGhyZWFkX2tleV9kZWxldGU9eWVzfQorYXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPSR7YXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPW5vfQorYWNfY3Zfc2l6ZW9mX3NzaXplX3Q9JHthY19jdl9zaXplb2Zfc3NpemVfdD00fQorCithY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX2g9JHthY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX2g9bm99CithY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX3Vpb19oPSR7YWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF91aW9faD1ub30KK2FjX2N2X3NjdHA9JHthY19jdl9zY3RwPW5vfQorCisjIHNzaAorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2RpcmVudF9oYXZlX3NwYWNlX2RfbmFtZT15ZXN9CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfdHlwZV9zdHJ1Y3RfdGltZXNwZWM9JHthY19jdl90eXBlX3N0cnVjdF90aW1lc3BlYz15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9eWVzfQorCisjIGNvcmV1dGlscwordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTl9CisKKyMgbGlicGNhcAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KKworIyBuYW5vCithY19jdl9yZWdleGVjX3NlZ2ZhdWx0X2VtcHR5c3RyPSR7YWNfY3ZfcmVnZXhlY19zZWdmYXVsdF9lbXB0eXN0cj1ub30KK25hbm9fY3ZfZnVuY19yZWdleGVjX3NlZ3ZfZW1wdHlzdHI9JHtuYW5vX2N2X2Z1bmNfcmVnZXhlY19zZWd2X2VtcHR5c3RyPW5vfQorCisKKyMgbGlibmV0CithY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PSR7YWNfbGlibmV0X2hhdmVfcGFja2V0X3NvY2tldD15ZXN9CisKKyMgc2NyZWVuCitzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9eWVzfQorc2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD0ke3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPSR7c2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPXllc30KKworYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPSR7YWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPXllc30KK2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KK2FjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9bm99CithY19jdl9mdW5jX3N0YXRfaWdub3Jlc190cmFpbGluZ19zbGFzaD0ke2FjX2N2X2Z1bmNfc3RhdF9pZ25vcmVzX3RyYWlsaW5nX3NsYXNoPW5vfQorCisjIHNvY2F0CithY19jdl9pc3BlZWRfb2Zmc2V0PSR7YWNfY3ZfaXNwZWVkX29mZnNldD0xM30KK3NjX2N2X3Rlcm1pb3NfaXNwZWVkPSR7c2NfY3ZfdGVybWlvc19pc3BlZWQ9eWVzfQorCisjIGxpbmtzCithY19jdl9saWJfcG5nX3BuZ19jcmVhdGVfaW5mb19zdHJ1Y3Q9JHthY19jdl9saWJfcG5nX3BuZ19jcmVhdGVfaW5mb19zdHJ1Y3Q9eWVzfQorCisjIGRiCitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcnfQorCisjIHBocAorYWNfY3ZfcHJlYWQ9JHthY19jdl9wcmVhZD1ub30KK2FjX2N2X3B3cml0ZT0ke2FjX2N2X3B3cml0ZT1ub30KK3BocF9jdl9saWJfY29va2llX2lvX2Z1bmN0aW9uc191c2Vfb2ZmNjRfdD0ke3BocF9jdl9saWJfY29va2llX2lvX2Z1bmN0aW9uc191c2Vfb2ZmNjRfdD15ZXN9CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl92YV92YWxfY29weT0ke2dsaWJfY3ZfdmFfdmFsX2NvcHk9eWVzfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49bm99CitnbGliX2N2X3N5c19wdGhyZWFkX211dGV4X3RyeWxvY2tfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX211dGV4X3RyeWxvY2tfcG9zaXg9eWVzfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9nZXRzcGVjaWZpY19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfZ2V0c3BlY2lmaWNfcG9zaXg9eWVzfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9jb25kX3RpbWVkd2FpdF9wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcG9zaXg9eWVzfQorCisjIGV0dGVyY2FwCitldHRlcmNhcF9jdl90eXBlX3NvY2tsZW5fdD0ke2V0dGVyY2FwX2N2X3R5cGVfc29ja2xlbl90PXllc30KKworIyBsaWJlc210cAorYWN4X3dvcmtpbmdfc25wcmludGY9JHthY3hfd29ya2luZ19zbnByaW50Zj15ZXN9CisKKyMgRC1CVVMKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgZ2xpYiAyLjAKK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX2ludG1heF90PSR7Z2xpYl9jdl9zaXplb2ZfaW50bWF4X3Q9OH0KK2dsaWJfY3Zfc2l6ZW9mX3B0cmRpZmZfdD0ke2dsaWJfY3Zfc2l6ZW9mX3B0cmRpZmZfdD00fQorZ2xpYl9jdl9zaXplb2Zfc2l6ZV90PSR7Z2xpYl9jdl9zaXplb2Zfc2l6ZV90PTR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zeXNfdXNlX3BpZF9uaWNlbmVzc19zdXJyb2dhdGU9JHtnbGliX2N2X3N5c191c2VfcGlkX25pY2VuZXNzX3N1cnJvZ2F0ZT15ZXN9CisKK2dsaWJfY3Zfc3RybGNweT0ke2dsaWJfY3Zfc3RybGNweT1ub30KKworIyBodHRwcGMKK2FjX2N2X3N0cmVycm9yX3JfU1VTdjM9JHthY19jdl9zdHJlcnJvcl9yX1NVU3YzPW5vfQorCisjIGxmdHAKK2FjX2N2X25lZWRfdHJpbz0ke2FjX2N2X25lZWRfdHJpbz1ub30KK2xmdHBfY3ZfdmFfdmFsX2NvcHk9JHtsZnRwX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworIyBlZGIKK2RiX2N2X3NwaW5sb2Nrcz0ke2RiX2N2X3NwaW5sb2Nrcz1ub30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KK2NvbXBhdF9jdl9mdW5jX2Jhc2VuYW1lX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfYmFzZW5hbWVfd29ya3M9bm99Citjb21wYXRfY3ZfZnVuY19kaXJuYW1lX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfZGlybmFtZV93b3Jrcz1ub30KKworIyBzbHJuCitzbHJuX2N2X3ZhX3ZhbF9jb3B5PSR7c2xybl9jdl92YV92YWxfY29weT15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIE9SQml0MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9ib29sZWFuPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfY2hhcj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2RvdWJsZT00CithY19jdl9hbGlnbm9mX0NPUkJBX2Zsb2F0PTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZz00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfZG91YmxlPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19sb25nPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfb2N0ZXQ9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9wb2ludGVyPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc2hvcnQ9MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zdHJ1Y3Q9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV93Y2hhcj0yCisKKyMgY3ZzCitjdnNfY3ZfZnVuY19wcmludGZfcHRyPSR7Y3ZzX2N2X2Z1bmNfcHJpbnRmX3B0cj15ZXN9CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9eWVzfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9bWlzc2luZ30KKworIyBvcGVuc3NoCithY19jdl9oYXZlX2Jyb2tlbl9kaXJuYW1lPSR7YWNfY3ZfaGF2ZV9icm9rZW5fZGlybmFtZT0neWVzJ30KK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSdubyd9CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSdubyd9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9J3llcyd9CithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9J25vJ30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSd5ZXMnfQorCisjIHZpbQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9JzQnfQorCisjbW9kcGhwIAorYWNfY3ZfY19iaWdlbmRpYW5fcGhwPSR7YWNfY3ZfY19iaWdlbmRpYW5fcGhwPXllc30KK2FjX2N2X3NpemVvZl9wdHJkaWZmX3Q9JHthY19jdl9zaXplb2ZfcHRyZGlmZl90PTR9CisKKyMgYXBhY2hlMiAobm90ZSBvdGhlciBhcGFjaGUgc3RhbnphIGluIHRoaXMgZmlsZSkKK2FwX3ZvaWRfcHRyX2x0X2xvbmc9JHthcF92b2lkX3B0cl9sdF9sb25nPW5vfQorYXByX2N2X3VzZV9sZnM2ND0ke2Fwcl9jdl91c2VfbGZzNjQ9eWVzfQorYXByX2N2X2Vwb2xsPSR7YXByX2N2X2Vwb2xsPXllc30KK2Fwcl9jdl9wdGhyZWFkc19jZmxhZ3M9JHthcHJfY3ZfcHRocmVhZHNfY2ZsYWdzPS1wdGhyZWFkfQorYXByX2N2X3B0aHJlYWRzX2xpYj0ke2Fwcl9jdl9wdGhyZWFkc19saWI9LWxwdGhyZWFkfQorYWNfY3ZfZnVuY19tbWFwPSR7YWNfY3ZfZnVuY19tbWFwPXllc30KK2FjX2N2X2ZpbGVfX2Rldl96ZXJvPSR7YWNfY3ZfZmlsZV9fZGV2X3plcm89eWVzfQorYWNfY3Zfc2l6ZW9mX29mZl90PSR7YWNfY3Zfc2l6ZW9mX29mZl90PTR9CithY19jdl9zaXplb2ZfcGlkX3Q9JHthY19jdl9zaXplb2ZfcGlkX3Q9NH0KK2FjX2N2X3NvY2tsZW5fdD0ke2FjX2N2X3NvY2tsZW5fdD15ZXN9CithY19jdl9zdHJ1Y3RfcmxpbWl0PSR7YWNfY3Zfc3RydWN0X3JsaW1pdD15ZXN9CithY19jdl9uZWdhdGl2ZV9lYWk9JHthY19jdl9uZWdhdGl2ZV9lYWk9eWVzfQorYXByX2N2X2dhaV9hZGRyY29uZmlnPSR7YXByX2N2X2dhaV9hZGRyY29uZmlnPW5vfQorYXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz0ke2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9eWVzfQorCisjIGJpbnV0aWxzIChsaWJpYmVydHkpCithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3ZfdHlwZV9pbnQ9JHthY19jdl90eXBlX2ludD15ZXN9CithY19jdl90eXBlX3VpbnRwdHJfdD0ke2FjX2N2X3R5cGVfdWludHB0cl90PXllc30KK2xpYmVydHlfY3ZfdWludDY0PSR7bGliZXJ0eV9jdl91aW50NjQ9dWludDY0X3R9CisKKyNzYW1iYQorYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz0ke2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9eWVzfQorZnVfY3Zfc3lzX3N0YXRfc3RhdHZmczY0PSR7ZnVfY3Zfc3lzX3N0YXRfc3RhdHZmczY0PXllc30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX0ZDTlRMNjRfTE9DS1M9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9GQ05UTDY0X0xPQ0tTPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fR0VUR1JPVVBTPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fR0VUR1JPVVBTPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9eWVzfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUl9OQU1FPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUl9OQU1FPW5vfQorc2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPSR7c2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPXllc30KK3NhbWJhX2N2X0hBVkVfREVWNjRfVD0ke3NhbWJhX2N2X0hBVkVfREVWNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfREVWSUNFX01BSk9SX0ZOPSR7c2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUFKT1JfRk49eWVzfQorc2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUlOT1JfRk49JHtzYW1iYV9jdl9IQVZFX0RFVklDRV9NSU5PUl9GTj15ZXN9CitzYW1iYV9jdl9IQVZFX0ZDTlRMX0xPQ0s9JHtzYW1iYV9jdl9IQVZFX0ZDTlRMX0xPQ0s9eWVzfQorc2FtYmFfY3ZfSEFWRV9GVFJVTkNBVEVfRVhURU5EPSR7c2FtYmFfY3ZfSEFWRV9GVFJVTkNBVEVfRVhURU5EPXllc30KK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorc2FtYmFfY3ZfSEFWRV9JTk82NF9UPSR7c2FtYmFfY3ZfSEFWRV9JTk82NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz15ZXN9CitzYW1iYV9jdl9IQVZFX01BS0VERVY9JHtzYW1iYV9jdl9IQVZFX01BS0VERVY9eWVzfQorc2FtYmFfY3ZfSEFWRV9NTUFQPSR7c2FtYmFfY3ZfSEFWRV9NTUFQPXllc30KK3NhbWJhX2N2X0hBVkVfT0ZGNjRfVD0ke3NhbWJhX2N2X0hBVkVfT0ZGNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFPSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRT15ZXN9CitzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1RSVU5DQVRFRF9TQUxUPSR7c2FtYmFfY3ZfSEFWRV9UUlVOQ0FURURfU0FMVD1ub30KK3NhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj0ke3NhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj15ZXN9CitzYW1iYV9jdl9IQVZFX1dPUktJTkdfQUZfTE9DQUw9JHtzYW1iYV9jdl9IQVZFX1dPUktJTkdfQUZfTE9DQUw9eWVzfQorc2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9JHtzYW1iYV9jdl9MSU5VWF9MRlNfU1VQUE9SVD15ZXN9CitzYW1iYV9jdl9SRUFMUEFUSF9UQUtFU19OVUxMPSR7c2FtYmFfY3ZfUkVBTFBBVEhfVEFLRVNfTlVMTD15ZXN9CitzYW1iYV9jdl9SRVBMQUNFX0lORVRfTlRPQT0ke3NhbWJhX2N2X1JFUExBQ0VfSU5FVF9OVE9BPW5vfQorc2FtYmFfY3ZfUkVQTEFDRV9SRUFERElSPSR7c2FtYmFfY3ZfUkVQTEFDRV9SRUFERElSPW5vfQorc2FtYmFfY3ZfU0laRU9GX0RFVl9UPSR7c2FtYmFfY3ZfU0laRU9GX0RFVl9UPXllc30KK3NhbWJhX2N2X1NJWkVPRl9JTk9fVD0ke3NhbWJhX2N2X1NJWkVPRl9JTk9fVD15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9eWVzfQorc2FtYmFfY3ZfU1RBVF9TVEFUVkZTNjQ9JHtzYW1iYV9jdl9TVEFUX1NUQVRWRlM2ND15ZXN9CitzYW1iYV9jdl9VU0VfU0VURVVJRD0ke3NhbWJhX2N2X1VTRV9TRVRFVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVVJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVVJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUVUlEWD0ke3NhbWJhX2N2X1VTRV9TRVRVSURYPXllc30KK3NhbWJhX2N2X2hhdmVfbG9uZ2xvbmc9JHtzYW1iYV9jdl9oYXZlX2xvbmdsb25nPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD15ZXN9CisKKyMgbXlzcWwKK215c3FsX2N2X2Z1bmNfYXRvbWljX3N1Yj0ke215c3FsX2N2X2Z1bmNfYXRvbWljX3N1Yj1ub30KK215c3FsX2N2X2Z1bmNfYXRvbWljX2FkZD0ke215c3FsX2N2X2Z1bmNfYXRvbWljX2FkZD1ub30KKworCisjIGxpYmMKK2xpYmNfY3ZfcHBjX21hY2hpbmU9JHtsaWJjX2N2X3BwY19tYWNoaW5lPXllc30KK2xpYmNfY3ZfbWxvbmdfZG91YmxlXzEyOGlibT0ke2xpYmNfY3ZfbWxvbmdfZG91YmxlXzEyOGlibT15ZXN9CitsaWJjX2N2X21hYmlfaWJtbG9uZ2RvdWJsZT0ke2xpYmNfY3ZfbWFiaV9pYm1sb25nZG91YmxlPXllc30KK2xpYmNfY3ZfbWxvbmdfZG91YmxlXzEyOD0ke2xpYmNfY3ZfbWxvbmdfZG91YmxlXzEyOD15ZXN9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9wb3dlcnBjNjQtbGludXggYi95b2N0by1wb2t5L21ldGEvc2l0ZS9wb3dlcnBjNjQtbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0ZTIzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL3Bvd2VycGM2NC1saW51eApAQCAtMCwwICsxLDM5IEBACithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2ZfY2hhcl9wPSR7YWNfY3Zfc2l6ZW9mX2NoYXJfcD04fQorYWNfY3Zfc2l6ZW9mX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9kb3VibGU9OH0KK2FjX2N2X3NpemVvZl9mbG9hdD0ke2FjX2N2X3NpemVvZl9mbG9hdD00fQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0xNn0KK2FjX2N2X3NpemVvZl9sb25nX2ludD0ke2FjX2N2X3NpemVvZl9sb25nX2ludD04fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZ19pbnQ9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcj0ke2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2NoYXI9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9OH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2ludD04fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nX2ludD04fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PTJ9CithY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9OH0KKworIyBzY3JlZW4KK3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD0ke3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD15ZXN9CitzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPSR7c2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9JHtzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9eWVzfQorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgYXByCithcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPSR7YXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz15ZXN9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL3NoLWNvbW1vbiBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL3NoLWNvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGU0MTZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvc2gtY29tbW9uCkBAIC0wLDAgKzEsMjM4IEBACisjIGdlbmVyYWwKK2FjX2N2X3ZhX3ZhbF9jb3B5PSR7YWNfY3ZfdmFfdmFsX2NvcHk9eWVzfQorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vCithY19jdl9zaXplb2ZfX19pbnQ2ND0ke2FjX2N2X3NpemVvZl9fX2ludDY0PTB9CithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZz00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfaW50PTR9CithY19jdl9zaXplb2ZfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9CithY19jdl9zaXplb2Zfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9NH0KK2FjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTR9CithY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9JHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9OH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfc2lnbmVkX2NoYXI9JHthY19jdl9zaXplb2Zfc2lnbmVkX2NoYXI9MX0KKworIyBsem8KK2FjX2N2X3NpemVvZl9jaGFyX3A9JHthY19jdl9zaXplb2ZfY2hhcl9wPTR9CisKK2FjX2N2X3VjaGFyPSR7YWNfY3ZfdWNoYXI9bm99CithY19jdl91aW50PSR7YWNfY3ZfdWludD15ZXN9CithY19jdl91bG9uZz0ke2FjX2N2X3Vsb25nPXllc30KK2FjX2N2X3VzaG9ydD0ke2FjX2N2X3VzaG9ydD15ZXN9CisKK2FjX2N2X3RpbWVfcl90eXBlPSR7YWNfY3ZfdGltZV9yX3R5cGU9UE9TSVh9CisKKyMgYXBhY2hlCithY19jdl9mdW5jX3B0aHJlYWRfa2V5X2RlbGV0ZT0ke2FjX2N2X2Z1bmNfcHRocmVhZF9rZXlfZGVsZXRlPXllc30KK2Fwcl9jdl9wcm9jZXNzX3NoYXJlZF93b3Jrcz0ke2Fwcl9jdl9wcm9jZXNzX3NoYXJlZF93b3Jrcz1ub30KK2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9JHthcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPXllc30KK2FjX2N2X3NpemVvZl9zc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NzaXplX3Q9NH0KKworYWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF9oPSR7YWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF9oPW5vfQorYWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF91aW9faD0ke2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfdWlvX2g9bm99CithY19jdl9zY3RwPSR7YWNfY3Zfc2N0cD1ub30KKworIyBzc2gKK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9kaXJlbnRfaGF2ZV9zcGFjZV9kX25hbWU9eWVzfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj1ub30KK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj1ub30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz15ZXN9CisKKyMgY29yZXV0aWxzCit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxOX0KKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIG5hbm8KK2FjX2N2X3JlZ2V4ZWNfc2VnZmF1bHRfZW1wdHlzdHI9JHthY19jdl9yZWdleGVjX3NlZ2ZhdWx0X2VtcHR5c3RyPW5vfQorbmFub19jdl9mdW5jX3JlZ2V4ZWNfc2Vndl9lbXB0eXN0cj0ke25hbm9fY3ZfZnVuY19yZWdleGVjX3NlZ3ZfZW1wdHlzdHI9bm99CisKKyMgc2NyZWVuCitzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9eWVzfQorc2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD0ke3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPSR7c2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPXllc30KKworYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPSR7YWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPXllc30KK2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KK2FjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9bm99CithY19jdl9mdW5jX3N0YXRfaWdub3Jlc190cmFpbGluZ19zbGFzaD0ke2FjX2N2X2Z1bmNfc3RhdF9pZ25vcmVzX3RyYWlsaW5nX3NsYXNoPW5vfQorCisjIHNvY2F0CithY19jdl9pc3BlZWRfb2Zmc2V0PSR7YWNfY3ZfaXNwZWVkX29mZnNldD0xM30KK3NjX2N2X3Rlcm1pb3NfaXNwZWVkPSR7c2NfY3ZfdGVybWlvc19pc3BlZWQ9eWVzfQorCisjIGxpbmtzCithY19jdl9saWJfcG5nX3BuZ19jcmVhdGVfaW5mb19zdHJ1Y3Q9JHthY19jdl9saWJfcG5nX3BuZ19jcmVhdGVfaW5mb19zdHJ1Y3Q9eWVzfQorCisjIHNhbWJhCitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KK3NhbWJhX2N2X1VTRV9TRVRFVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVEVVSUQ9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFJFVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVFJFVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRVSURYPSR7c2FtYmFfY3ZfVVNFX1NFVFVJRFg9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPXllc30KK3NhbWJhX2N2X0hBVkVfU0VOREZJTEU9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFPXllc30KK3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPSR7c2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD15ZXN9CitzYW1iYV9jdl9IQVZFX01NQVA9JHtzYW1iYV9jdl9IQVZFX01NQVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz15ZXN9CitzYW1iYV9jdl9MSU5VWF9MRlNfU1VQUE9SVD0ke3NhbWJhX2N2X0xJTlVYX0xGU19TVVBQT1JUPXllc30KK3NhbWJhX2N2X1NUQVRfU1RBVFZGUzY0PSR7c2FtYmFfY3ZfU1RBVF9TVEFUVkZTNjQ9eWVzfQorc2FtYmFfY3ZfU0laRU9GX09GRl9UPSR7c2FtYmFfY3ZfU0laRU9GX09GRl9UPXllc30KK3NhbWJhX2N2X1NJWkVPRl9JTk9fVD0ke3NhbWJhX2N2X1NJWkVPRl9JTk9fVD15ZXN9CitzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND15ZXN9CisKKyMgZGIKK2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KK2RiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyd9CisKKyMgcGhwCithY19jdl9wcmVhZD0ke2FjX2N2X3ByZWFkPW5vfQorYWNfY3ZfcHdyaXRlPSR7YWNfY3ZfcHdyaXRlPW5vfQorcGhwX2N2X2xpYl9jb29raWVfaW9fZnVuY3Rpb25zX3VzZV9vZmY2NF90PSR7cGhwX2N2X2xpYl9jb29raWVfaW9fZnVuY3Rpb25zX3VzZV9vZmY2NF90PXllc30KKworIyBnbGliCitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorZ2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT0ke2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorZ2xpYl9jdl92YV92YWxfY29weT0ke2dsaWJfY3ZfdmFfdmFsX2NvcHk9eWVzfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49bm99CitnbGliX2N2X3N5c19wdGhyZWFkX211dGV4X3RyeWxvY2tfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX211dGV4X3RyeWxvY2tfcG9zaXg9eWVzfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9nZXRzcGVjaWZpY19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfZ2V0c3BlY2lmaWNfcG9zaXg9eWVzfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9jb25kX3RpbWVkd2FpdF9wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcG9zaXg9eWVzfQorCisjIGV0dGVyY2FwCitldHRlcmNhcF9jdl90eXBlX3NvY2tsZW5fdD0ke2V0dGVyY2FwX2N2X3R5cGVfc29ja2xlbl90PXllc30KKworIyBsaWJlc210cAorYWN4X3dvcmtpbmdfc25wcmludGY9JHthY3hfd29ya2luZ19zbnByaW50Zj15ZXN9CisKKyMgRC1CVVMKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgZ2xpYiAyLjAKK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX2ludG1heF90PSR7Z2xpYl9jdl9zaXplb2ZfaW50bWF4X3Q9OH0KK2dsaWJfY3Zfc2l6ZW9mX3B0cmRpZmZfdD0ke2dsaWJfY3Zfc2l6ZW9mX3B0cmRpZmZfdD00fQorZ2xpYl9jdl9zaXplb2Zfc2l6ZV90PSR7Z2xpYl9jdl9zaXplb2Zfc2l6ZV90PTR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zeXNfdXNlX3BpZF9uaWNlbmVzc19zdXJyb2dhdGU9JHtnbGliX2N2X3N5c191c2VfcGlkX25pY2VuZXNzX3N1cnJvZ2F0ZT15ZXN9CisKK2dsaWJfY3Zfc3RybGNweT0ke2dsaWJfY3Zfc3RybGNweT1ub30KK2dsaWJfY3ZfdmFfdmFsX2NvcHk9JHtnbGliX2N2X3ZhX3ZhbF9jb3B5PXllc30KK2FjX2N2X2FsaWdub2ZfZ3VpbnQzMj00CithY19jdl9hbGlnbm9mX2d1aW50NjQ9OAorYWNfY3ZfYWxpZ25vZl91bnNpZ25lZF9sb25nPTQKKworIyBodHRwcGMKK2FjX2N2X3N0cmVycm9yX3JfU1VTdjM9JHthY19jdl9zdHJlcnJvcl9yX1NVU3YzPW5vfQorCisjIGppa2VzCithY19jdl9zaXplb2Zfd2NoYXJfdD00CisKKyMgbGZ0cAorYWNfY3ZfbmVlZF90cmlvPSR7YWNfY3ZfbmVlZF90cmlvPW5vfQorbGZ0cF9jdl92YV92YWxfY29weT0ke2xmdHBfY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIGVkYgorZGJfY3Zfc3BpbmxvY2tzPSR7ZGJfY3Zfc3BpbmxvY2tzPW5vfQorCisjIGZnZXQKK2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9eWVzfQorY29tcGF0X2N2X2Z1bmNfYmFzZW5hbWVfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19iYXNlbmFtZV93b3Jrcz1ub30KK2NvbXBhdF9jdl9mdW5jX2Rpcm5hbWVfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19kaXJuYW1lX3dvcmtzPW5vfQorCisjIHNscm4KK3Nscm5fY3ZfdmFfdmFsX2NvcHk9JHtzbHJuX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworIyBzdGFydHVwLW5vdGlmaWNhdGlvbgorbGZfY3Zfc2FuZV9yZWFsbG9jPXllcworCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBPUkJpdDIKK2FjX2N2X2FsaWdub2ZfQ09SQkFfYm9vbGVhbj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2NoYXI9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9kb3VibGU9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9mbG9hdD00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmc9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2RvdWJsZT00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfbG9uZz00CithY19jdl9hbGlnbm9mX0NPUkJBX29jdGV0PTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfcG9pbnRlcj00CithY19jdl9hbGlnbm9mX0NPUkJBX3Nob3J0PTIKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc3RydWN0PTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfd2NoYXI9MgorCisjIGN2cworY3ZzX2N2X2Z1bmNfcHJpbnRmX3B0cj0ke2N2c19jdl9mdW5jX3ByaW50Zl9wdHI9eWVzfQorCisjIGJhc2gKK2FjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPXllc30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPW1pc3Npbmd9CisKKyMgbXlzcWwKK215c3FsX2N2X2Z1bmNfYXRvbWljX3N1Yj0ke215c3FsX2N2X2Z1bmNfYXRvbWljX3N1Yj1ub30KK215c3FsX2N2X2Z1bmNfYXRvbWljX2FkZD0ke215c3FsX2N2X2Z1bmNfYXRvbWljX2FkZD1ub30KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworIyBmbm1hdGNoCithY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9JHthY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9eWVzfQorCisjIHJzeW5jCityc3luY19jdl9IQVZFX0JST0tFTl9MQVJHRUZJTEU9JHtyc3luY19jdl9IQVZFX0JST0tFTl9MQVJHRUZJTEU9bm99Cityc3luY19jdl9IQVZFX1NPQ0tFVFBBSVI9JHtyc3luY19jdl9IQVZFX1NPQ0tFVFBBSVI9eWVzfQorcnN5bmNfY3ZfSEFWRV9MT05HTE9ORz0ke3JzeW5jX2N2X0hBVkVfTE9OR0xPTkc9eWVzfQorcnN5bmNfY3ZfSEFWRV9PRkY2NF9UPSR7cnN5bmNfY3ZfSEFWRV9PRkY2NF9UPW5vfQorcnN5bmNfY3ZfSEFWRV9TSE9SVF9JTk9fVD0ke3JzeW5jX2N2X0hBVkVfU0hPUlRfSU5PX1Q9bm99Cityc3luY19jdl9IQVZFX1VOU0lHTkVEX0NIQVI9JHtyc3luY19jdl9IQVZFX1VOU0lHTkVEX0NIQVI9bm99Cityc3luY19jdl9IQVZFX0JST0tFTl9SRUFERElSPSR7cnN5bmNfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj1ub30KK3JzeW5jX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7cnN5bmNfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorcnN5bmNfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPSR7cnN5bmNfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPXllc30KK3JzeW5jX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtyc3luY19jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9OVE9BPSR7cnN5bmNfY3ZfUkVQTEFDRV9JTkVUX05UT0E9bm99Cityc3luY19jdl9SRVBMQUNFX0lORVRfQVRPTj0ke3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9BVE9OPW5vfQorCisjIGxpYnhmY2U0dXRpbAord2l0aF9icm9rZW5fcHV0ZW52PSR7d2l0aF9icm9rZW5fcHV0ZW52PW5vfQorCisjIGNsYW1hdgorY2xhbWF2X2F2X2Z1bmNfd29ya2luZ19zbnByaW50Zl9sb25nPSR7Y2xhbWF2X2F2X2Z1bmNfd29ya2luZ19zbnByaW50Zl9sb25nPXllc30KK2NsYW1hdl9hdl9oYXZlX2luX3BvcnRfdD0ke2NsYW1hdl9hdl9oYXZlX2luX3BvcnRfdD15ZXN9CitjbGFtYXZfYXZfaGF2ZV9pbl9hZGRyX3Q9JHtjbGFtYXZfYXZfaGF2ZV9pbl9hZGRyX3Q9eWVzfQorYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD0ke2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9eWVzfQorCisjIGxpYm5ldCAKK2FjX2N2X2xibF91bmFsaWduZWRfZmFpbD0ke2FjX2N2X2xibF91bmFsaWduZWRfZmFpbD1ub30KK2FjX2xpYm5ldF9oYXZlX3BhY2tldF9zb2NrZXQ9JHthY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PXllc30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL3NwYXJjLWxpbnV4IGIveW9jdG8tcG9reS9tZXRhL3NpdGUvc3BhcmMtbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlkMGQ5YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL3NwYXJjLWxpbnV4CkBAIC0wLDAgKzEsNDggQEAKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ubworYWNfY3Zfc2l6ZW9mX19faW50NjQ9JHthY19jdl9zaXplb2ZfX19pbnQ2ND0wfQorYWNfY3Zfc2l6ZW9mX2NoYXI9JHthY19jdl9zaXplb2ZfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmc9NH0KK2FjX2N2X3NpemVvZl9sb25nX2ludD0ke2FjX2N2X3NpemVvZl9sb25nX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl9zaXplX3Q9JHthY19jdl9zaXplb2Zfc2l6ZV90PTR9CithY19jdl9zaXplb2Zfdm9pZF9wPSR7YWNfY3Zfc2l6ZW9mX3ZvaWRfcD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTh9CithY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyPSR7YWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyPTF9CisKK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT04fQorbGliY19jdl9tbG9uZ19kb3VibGVfMTI4aWJtPSR7bGliY19jdl9tbG9uZ19kb3VibGVfMTI4aWJtPXllc30KK2xpYmNfY3ZfbWxvbmdfZG91YmxlXzEyOD0ke2xpYmNfY3ZfbWxvbmdfZG91YmxlXzEyOD15ZXN9CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfZG91YmxlPTQKK2FjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPXllc30KKworCithY19jdl91Y2hhcj0ke2FjX2N2X3VjaGFyPW5vfQorYWNfY3ZfdWludD0ke2FjX2N2X3VpbnQ9eWVzfQorYWNfY3ZfdWxvbmc9JHthY19jdl91bG9uZz15ZXN9CithY19jdl91c2hvcnQ9JHthY19jdl91c2hvcnQ9eWVzfQorCithY19jdl90aW1lX3JfdHlwZT0ke2FjX2N2X3RpbWVfcl90eXBlPVBPU0lYfQorY29va2llX2lvX2Z1bmN0aW9uc191c2Vfb2ZmNjRfdD0ke2Nvb2tpZV9pb19mdW5jdGlvbnNfdXNlX29mZjY0X3Q9eWVzfQorCisjIG1pbmljb20KK2FtX2N2X3N5c19wb3NpeF90ZXJtaW9zPSR7YW1fY3Zfc3lzX3Bvc2l4X3Rlcm1pb3M9eWVzfQorCisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyNnbGliCitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fSAKK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KKworI2xpbnV4CithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUveDMyLWxpbnV4IGIveW9jdG8tcG9reS9tZXRhL3NpdGUveDMyLWxpbnV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZWU2OGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS94MzItbGludXgKQEAgLTAsMCArMSwxMCBAQAorIyBnZW5lcmFsCithY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9JHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9MTZ9CithY19jdl9zaXplb2Zfb2ZmX3Q9JHthY19jdl9zaXplb2Zfb2ZmX3Q9OH0KK2FjX2N2X3NpemVvZl9pbm9fdD0ke2FjX2N2X3NpemVvZl9pbm9fdD04fQorYWNfY3Zfc2l6ZW9mX2Rldl90PSR7YWNfY3Zfc2l6ZW9mX2Rldl90PTh9CithY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cz0ke2FjX2N2X3N5c19maWxlX29mZnNldF9iaXRzPTY0fQorYWNfY3ZfYWxpZ25vZl9kb3VibGU9OAorCisjIGdsaWIKK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0zMn0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL3g4Nl82NC1saW51eCBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL3g4Nl82NC1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzNhOTA3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUveDg2XzY0LWxpbnV4CkBAIC0wLDAgKzEsMTM2IEBACisjIGdlbmVyYWwKK2FjX2N2X3ZhX3ZhbF9jb3B5PSR7YWNfY3ZfdmFfdmFsX2NvcHk9bm99CithY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9JHthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9eWVzfQorYWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD0ke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ub30KK2FjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9bm99CithY19jdl9mdW5jX3N0YXRfaWdub3Jlc190cmFpbGluZ19zbGFzaD0ke2FjX2N2X2Z1bmNfc3RhdF9pZ25vcmVzX3RyYWlsaW5nX3NsYXNoPW5vfQorYWNfbGlibmV0X2hhdmVfcGFja2V0X3NvY2tldD0ke2FjX2xpYm5ldF9oYXZlX3BhY2tldF9zb2NrZXQ9eWVzfQorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KK2FjX2N2X25lZWRfdHJpbz0ke2FjX2N2X25lZWRfdHJpbz1ub30KK2FjX2N2X3NpemVvZl9jaGFyPSR7YWNfY3Zfc2l6ZW9mX2NoYXI9MX0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD00fQorYWNfY3Zfc2l6ZW9mX19faW50NjQ9JHthY19jdl9zaXplb2ZfX19pbnQ2ND0wfQorYWNfY3Zfc2l6ZW9mX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTE2fQorYWNfY3Zfc2l6ZW9mX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfaW50PTh9CithY19jdl9zaXplb2ZfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX29mZl90PSR7YWNfY3Zfc2l6ZW9mX29mZl90PTh9CithY19jdl9zaXplb2Zfc2hvcnQ9JHthY19jdl9zaXplb2Zfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl9zaXplX3Q9JHthY19jdl9zaXplb2Zfc2l6ZV90PTh9CithY19jdl9zaXplb2ZfdWlkX3Q9JHthY19jdl9zaXplb2ZfdWlkX3Q9NH0KK2FjX2N2X3NpemVvZl9naWRfdD0ke2FjX2N2X3NpemVvZl9naWRfdD00fQorYWNfY3Zfc2l6ZW9mX2lub190PSR7YWNfY3Zfc2l6ZW9mX2lub190PTh9CithY19jdl9zaXplb2ZfZGV2X3Q9JHthY19jdl9zaXplb2ZfZGV2X3Q9OH0KK2FjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTh9CithY19jdl9zdHJlcnJvcl9yX1NVU3YzPSR7YWNfY3Zfc3RyZXJyb3Jfcl9TVVN2Mz1ub30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KK2RiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KKworIyBnbGliCitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj15ZXN9CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD00MH0KK2dsaWJfY3Zfc2l6ZW9mX2ludG1heF90PSR7Z2xpYl9jdl9zaXplb2ZfaW50bWF4X3Q9OH0KK2dsaWJfY3Zfc2l6ZW9mX3B0cmRpZmZfdD0ke2dsaWJfY3Zfc2l6ZW9mX3B0cmRpZmZfdD04fQorZ2xpYl9jdl9zaXplb2Zfc2l6ZV90PSR7Z2xpYl9jdl9zaXplb2Zfc2l6ZV90PTh9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD04fQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3N5c19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9jb25kX3RpbWVkd2FpdF9wb3NpeD15ZXN9CitnbGliX2N2X3N5c19wdGhyZWFkX2dldHNwZWNpZmljX3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9nZXRzcGVjaWZpY19wb3NpeD15ZXN9CitnbGliX2N2X3N5c19wdGhyZWFkX211dGV4X3RyeWxvY2tfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX211dGV4X3RyeWxvY2tfcG9zaXg9eWVzfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KK2dsaWJfY3ZfdmFfdmFsX2NvcHk9JHtnbGliX2N2X3ZhX3ZhbF9jb3B5PW5vfQorYWNfY3ZfYWxpZ25vZl9ndWludDMyPTQKK2FjX2N2X2FsaWdub2ZfZ3VpbnQ2ND04CithY19jdl9hbGlnbm9mX3Vuc2lnbmVkX2xvbmc9OAorCituYW5vX2N2X2Z1bmNfcmVnZXhlY19zZWd2X2VtcHR5c3RyPSR7bmFub19jdl9mdW5jX3JlZ2V4ZWNfc2Vndl9lbXB0eXN0cj1ub30KK3NhbWJhX2N2X0hBVkVfVkFfQ09QWT0ke3NhbWJhX2N2X0hBVkVfVkFfQ09QWT15ZXN9CitzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9eWVzfQorc2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD0ke3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPSR7c2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPXllc30KK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE1fQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjZ2NjCithY19jdl9saWJfbV9zaW49JHthY19jdl9saWJfbV9zaW49eWVzfQorCisjb3JiaXQKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsCisKKyMgYmFzaAorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9cHJlc2VudH0KKworIyBPUkJpdDIKK2FjX2N2X2FsaWdub2ZfQ09SQkFfYm9vbGVhbj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2NoYXI9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9kb3VibGU9OAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9mbG9hdD00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmc9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2RvdWJsZT04CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfbG9uZz04CithY19jdl9hbGlnbm9mX0NPUkJBX29jdGV0PTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfcG9pbnRlcj04CithY19jdl9hbGlnbm9mX0NPUkJBX3Nob3J0PTIKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc3RydWN0PTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfd2NoYXI9MgorCitsZl9jdl9zYW5lX3JlYWxsb2M9eWVzCithc19jdl91bmFsaWduZWRfYWNjZXNzPSR7YXNfY3ZfdW5hbGlnbmVkX2FjY2Vzcz15ZXN9CisKKyN1bmZzMworbmZzZF9jdl9icm9rZW5fc2V0ZnN1aWQ9JHtuZnNkX2N2X2Jyb2tlbl9zZXRmc3VpZD0wfQorbmZzZF9jdl9mdW5jX3N0YXRmcz0ke25mc2RfY3ZfZnVuY19zdGF0ZnM9c3RhdGZzMl9ic2l6ZX0KK25mc2RfY3ZfYnNkX3NpZ25hbHM9JHtuZnNkX2N2X2JzZF9zaWduYWxzPXllc30KKworI2FwcgorYXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz0ke2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9eWVzfQorCisjIGxmdHAKK2xmdHBfY3ZfdmFfdmFsX2NvcHk9JHtsZnRwX2N2X3ZhX3ZhbF9jb3B5PW5vfQorCisjIHNscm4KK3Nscm5fY3ZfdmFfdmFsX2NvcHk9JHtzbHJuX2N2X3ZhX3ZhbF9jb3B5PW5vfQorCisjIGdydWIKK2FjX2N2X2Z1bmNfX19hc2hsZGkzPW5vCithY19jdl9mdW5jX19fYXNocmRpMz1ubworYWNfY3ZfZnVuY19fX2Jzd2FwZGkyPW5vCithY19jdl9mdW5jX19fYnN3YXBzaTI9bm8KK2FjX2N2X2Z1bmNfX19sc2hyZGkzPW5vCithY19jdl9mdW5jX19fdHJhbXBvbGluZV9zZXR1cD1ubworYWNfY3ZfZnVuY19fX3VjbXBkaTI9bm8KK2FjX2N2X2Z1bmNfX3Jlc3RncHJfMTRfeD1ubworCisjIGN2cworY3ZzX2N2X2Z1bmNfcHJpbnRmX3B0cj0ke2N2c19jdl9mdW5jX3ByaW50Zl9wdHI9eWVzfQorCisjIGF0LXNwaTItY29yZQorYWNfY3ZfYWxpZ25vZl9jaGFyPTEKK2FjX2N2X2FsaWdub2ZfZGJpbmRfcG9pbnRlcj04CithY19jdl9hbGlnbm9mX2RiaW5kX3N0cnVjdD0xCithY19jdl9hbGlnbm9mX2RidXNfYm9vbF90PTQKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQxNl90PTIKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQzMl90PTQKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQ2NF90PTgKK2FjX2N2X2FsaWdub2ZfZG91YmxlPTgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL3g4Nl82NC1saW51eC11Y2xpYmMgYi95b2N0by1wb2t5L21ldGEvc2l0ZS94ODZfNjQtbGludXgtdWNsaWJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMjY5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS94ODZfNjQtbGludXgtdWNsaWJjCkBAIC0wLDAgKzEsOTEgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfdmFfdmFsX2NvcHk9JHthY19jdl92YV92YWxfY29weT1ub30KK2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz0ke2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz15ZXN9CithY19jdl9mdW5jX2xzdGF0X2VtcHR5X3N0cmluZ19idWc9JHthY19jdl9mdW5jX2xzdGF0X2VtcHR5X3N0cmluZ19idWc9bm99CithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPSR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vfQorYWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9JHthY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KK2FjX2N2X2Z1bmNfc3RhdF9pZ25vcmVzX3RyYWlsaW5nX3NsYXNoPSR7YWNfY3ZfZnVuY19zdGF0X2lnbm9yZXNfdHJhaWxpbmdfc2xhc2g9bm99CithY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PSR7YWNfbGlibmV0X2hhdmVfcGFja2V0X3NvY2tldD15ZXN9CithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorYWNfY3ZfbmVlZF90cmlvPSR7YWNfY3ZfbmVlZF90cmlvPW5vfQorYWNfY3Zfc2l6ZW9mX2NoYXI9JHthY19jdl9zaXplb2ZfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl9fX2ludDY0PSR7YWNfY3Zfc2l6ZW9mX19faW50NjQ9MH0KK2FjX2N2X3NpemVvZl9sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0xNn0KK2FjX2N2X3NpemVvZl9sb25nX2ludD0ke2FjX2N2X3NpemVvZl9sb25nX2ludD04fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl9zaXplX3Q9JHthY19jdl9zaXplb2Zfc2l6ZV90PTh9CithY19jdl9zaXplb2Zfdm9pZF9wPSR7YWNfY3Zfc2l6ZW9mX3ZvaWRfcD04fQorYWNfY3Zfc3RyZXJyb3Jfcl9TVVN2Mz0ke2FjX2N2X3N0cmVycm9yX3JfU1VTdjM9bm99CitkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj15ZXN9CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD00MH0KK2dsaWJfY3Zfc2l6ZW9mX2ludG1heF90PSR7Z2xpYl9jdl9zaXplb2ZfaW50bWF4X3Q9OH0KK2dsaWJfY3Zfc2l6ZW9mX3B0cmRpZmZfdD0ke2dsaWJfY3Zfc2l6ZW9mX3B0cmRpZmZfdD04fQorZ2xpYl9jdl9zaXplb2Zfc2l6ZV90PSR7Z2xpYl9jdl9zaXplb2Zfc2l6ZV90PTh9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD04fQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3N5c19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9jb25kX3RpbWVkd2FpdF9wb3NpeD15ZXN9CitnbGliX2N2X3N5c19wdGhyZWFkX2dldHNwZWNpZmljX3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9nZXRzcGVjaWZpY19wb3NpeD15ZXN9CitnbGliX2N2X3N5c19wdGhyZWFkX211dGV4X3RyeWxvY2tfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX211dGV4X3RyeWxvY2tfcG9zaXg9eWVzfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KK2dsaWJfY3ZfdmFfdmFsX2NvcHk9JHtnbGliX2N2X3ZhX3ZhbF9jb3B5PW5vfQorbmFub19jdl9mdW5jX3JlZ2V4ZWNfc2Vndl9lbXB0eXN0cj0ke25hbm9fY3ZfZnVuY19yZWdleGVjX3NlZ3ZfZW1wdHlzdHI9bm99CitzYW1iYV9jdl9IQVZFX1ZBX0NPUFk9JHtzYW1iYV9jdl9IQVZFX1ZBX0NPUFk9eWVzfQorc2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPSR7c2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPXllc30KK3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9JHtzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD0ke3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD15ZXN9Cit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxNX0KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworIyBnbGliLTIuMAorZ2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT0ke2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9eWVzfQorYWNfY3ZfYWxpZ25vZl9ndWludDMyPTQKK2FjX2N2X2FsaWdub2ZfZ3VpbnQ2ND04CithY19jdl9hbGlnbm9mX3Vuc2lnbmVkX2xvbmc9OAorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBPUkJpdDIKK2FjX2N2X2FsaWdub2ZfQ09SQkFfYm9vbGVhbj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2NoYXI9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9kb3VibGU9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9mbG9hdD00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmc9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2RvdWJsZT04CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfbG9uZz04CithY19jdl9hbGlnbm9mX0NPUkJBX29jdGV0PTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfcG9pbnRlcj04CithY19jdl9hbGlnbm9mX0NPUkJBX3Nob3J0PTIKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc3RydWN0PTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfd2NoYXI9MgorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9JHtsZl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorCisjIGxmdHAKK2xmdHBfY3ZfdmFfdmFsX2NvcHk9JHtsZnRwX2N2X3ZhX3ZhbF9jb3B5PW5vfQorCisjIHNscm4KK3Nscm5fY3ZfdmFfdmFsX2NvcHk9JHtzbHJuX2N2X3ZhX3ZhbF9jb3B5PW5vfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9vZS1pbml0LWJ1aWxkLWVudiBiL3lvY3RvLXBva3kvb2UtaW5pdC1idWlsZC1lbnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmZlZTVmNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvb2UtaW5pdC1idWlsZC1lbnYKQEAgLTAsMCArMSw2MiBAQAorIyEvYmluL3NoCisKKyMgT0UgQnVpbGQgRW52aXJvbm1lbnQgU2V0dXAgU2NyaXB0CisjCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDExIExpbnV4IEZvdW5kYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCisjCisjIE5vcm1hbGx5IHRoaXMgaXMgY2FsbGVkIGFzICcuIC4vb2UtaW5pdC1idWlsZC1lbnYgYnVpbGRkaXInCisjCisjIFRoaXMgd29ya3MgaW4gbW9zdCBzaGVsbHMgKG5vdCBkYXNoKSwgYnV0IG5vdCBhbGwgb2YgdGhlbSBwYXNzIGFyZzEgd2hlbgorIyBiZWluZyBzb3VyY2VkLiAgIFRvIHdvcmthcm91bmQgdGhlIHNoZWxsIGxpbWl0YXRpb24gdXNlICJzZXQgYXJnMSIgcHJpb3IgCisjIHRvIHNvdXJjaW5nIHRoaXMgc2NyaXB0LgorIworaWYgWyAtbiAiJEJBU0hfU09VUkNFIiBdOyB0aGVuCisgICBPRVJPT1Q9ImBkaXJuYW1lICRCQVNIX1NPVVJDRWAiCitlbGlmIFsgLW4gIiRaU0hfTkFNRSIgXTsgdGhlbgorICAgT0VST09UPSJgZGlybmFtZSAkMGAiCitlbHNlCisgICBPRVJPT1Q9ImBwd2RgIgorZmkKK2lmIFsgLW4gIiRCQlNFUlZFUiIgXTsgdGhlbgorICAgdW5zZXQgQkJTRVJWRVIKK2ZpCitUSElTX1NDUklQVD0kT0VST09UL29lLWluaXQtYnVpbGQtZW52CisKK2lmIFsgLXogIiRaU0hfTkFNRSIgXSAmJiBbICIkMCIgPSAiJFRISVNfU0NSSVBUIiBdOyB0aGVuCisgICBlY2hvICJFcnJvcjogVGhpcyBzY3JpcHQgbmVlZHMgdG8gYmUgc291cmNlZC4gUGxlYXNlIHJ1biBhcyAnLiAkVEhJU19TQ1JJUFQnIgorICAgZXhpdCAxCitmaQorCitPRVJPT1Q9YHJlYWRsaW5rIC1mICIkT0VST09UImAKK2V4cG9ydCBPRVJPT1QKKy4gJE9FUk9PVC9zY3JpcHRzL29lLWJ1aWxkZW52LWludGVybmFsICYmIFwKKyAgICAgJE9FUk9PVC9zY3JpcHRzL29lLXNldHVwLWJ1aWxkZGlyICYmIFwKKyAgICAgWyAtbiAiJEJVSUxERElSIiBdICYmIGNkICIkQlVJTERESVIiCit1bnNldCBPRVJPT1QKK3Vuc2V0IEJCUEFUSAordW5zZXQgVEhJU19TQ1JJUFQKKworIyBTaHV0ZG93biBhbnkgYml0YmFrZSBzZXJ2ZXIgaWYgdGhlIEJCU0VSVkVSIHZhcmlhYmxlIGlzIG5vdCBzZXQKK2lmIFsgLXogIiRCQlNFUlZFUiIgXSAmJiBbIC1mIGJpdGJha2UubG9jayBdIDsgdGhlbgorICAgIGdyZXAgIjoiIGJpdGJha2UubG9jayA+IC9kZXYvbnVsbCAmJiBCQlNFUlZFUj1gY2F0IGJpdGJha2UubG9ja2AgYml0YmFrZSAtLXN0YXR1cy1vbmx5CisgICAgaWYgWyAkPyA9IDAgXSA7IHRoZW4KKwllY2hvICJTaHV0dGluZyBkb3duIGJpdGJha2UgbWVtb3J5IHJlc2lkZW50IHNlcnZlciB3aXRoIGJpdGJha2UgLW0iCisJQkJTRVJWRVI9YGNhdCBiaXRiYWtlLmxvY2tgIGJpdGJha2UgLW0KKyAgICBmaQorZmkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXMgYi95b2N0by1wb2t5L29lLWluaXQtYnVpbGQtZW52LW1lbXJlcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMWRjNGZlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXMKQEAgLTAsMCArMSw4NCBAQAorIyEvYmluL3NoCisKKyMgT0UgQnVpbGQgRW52aXJvbm1lbnQgU2V0dXAgU2NyaXB0CisjCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDExIExpbnV4IEZvdW5kYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCisjCisjIE5vcm1hbGx5IHRoaXMgaXMgY2FsbGVkIGFzICcuIC4vb2UtaW5pdC1idWlsZC1lbnYgYnVpbGRkaXIgPHBvcnRudW1iZXI+IDxidWlsZGRpcj4nCisjCisjIFRoaXMgd29ya3MgaW4gbW9zdCBzaGVsbHMgKG5vdCBkYXNoKSwgYnV0IG5vdCBhbGwgb2YgdGhlbSBwYXNzIGFyZzEgd2hlbgorIyBiZWluZyBzb3VyY2VkLiAgIFRvIHdvcmthcm91bmQgdGhlIHNoZWxsIGxpbWl0YXRpb24gdXNlICJzZXQgYXJnMSIgcHJpb3IgCisjIHRvIHNvdXJjaW5nIHRoaXMgc2NyaXB0LgorIworaWYgWyAteiAiJDEiIF07IHRoZW4KKyAgICBlY2hvICJObyBwb3J0IHNwZWNpZmllZCwgdXNpbmcgZHluYW1pY2FsbHkgc2VsZWN0ZWQgcG9ydCIKKyAgICBwb3J0PS0xCitlbHNlCisgICAgcG9ydD0kMQorICAgIHNoaWZ0CitmaQorCitpZiBbIC1uICIkQkFTSF9TT1VSQ0UiIF07IHRoZW4KKyAgT0VST09UPSJgZGlybmFtZSAkQkFTSF9TT1VSQ0VgIgorZWxpZiBbIC1uICIkWlNIX05BTUUiIF07IHRoZW4KKyAgT0VST09UPSJgZGlybmFtZSAkMGAiCitlbHNlCisgIE9FUk9PVD0iYHB3ZGAiCitmaQoraWYgWyAtbiAiJEJCU0VSVkVSIiBdOyB0aGVuCisgIHVuc2V0IEJCU0VSVkVSCitmaQorCitUSElTX1NDUklQVD0kT0VST09UL29lLWluaXQtYnVpbGQtZW52LW1lbXJlcworaWYgWyAteiAiJFpTSF9OQU1FIiBdICYmIFsgIngkMCIgPSAieCRUSElTX1NDUklQVCIgXTsgdGhlbgorICAgZWNobyAiRXJyb3I6IFRoaXMgc2NyaXB0IG5lZWRzIHRvIGJlIHNvdXJjZWQuIFBsZWFzZSBydW4gYXMgJy4gJFRISVNfU0NSSVBUJyIKKyAgIGV4aXQgMQorZmkKKworT0VST09UPWByZWFkbGluayAtZiAiJE9FUk9PVCJgCitleHBvcnQgT0VST09UCisuICRPRVJPT1Qvc2NyaXB0cy9vZS1idWlsZGVudi1pbnRlcm5hbCAmJiBcCisgICAgJE9FUk9PVC9zY3JpcHRzL29lLXNldHVwLWJ1aWxkZGlyICYmIFwKKyAgICBbIC1uICIkQlVJTERESVIiIF0gJiYgY2QgJEJVSUxERElSCit1bnNldCBPRVJPT1QKK3Vuc2V0IEJCUEFUSAordW5zZXQgVEhJU19TQ1JJUFQKKworcmVzPTEKK2lmIFsgLWUgYml0YmFrZS5sb2NrIF0gJiYgZ3JlcCA6IGJpdGJha2UubG9jayA+IC9kZXYvbnVsbCA7IHRoZW4KKyAgICBCQlNFUlZFUj1gY2F0IGJpdGJha2UubG9ja2AgYml0YmFrZSAtLXN0YXR1cy1vbmx5CisgICAgcmVzPSQ/CitmaQorCitpZiBbICRyZXMgIT0gMCBdIDsgdGhlbgorICAgIGJpdGJha2UgLS1zZXJ2ZXItb25seSAtdCB4bWxycGMgLUIgbG9jYWxob3N0OiRwb3J0CitmaQorCitpZiBbICRwb3J0ID0gLTEgXSA7IHRoZW4KKyAgICBleHBvcnQgQkJTRVJWRVI9bG9jYWxob3N0Oi0xCisgICAgZWNobyAiQml0YmFrZSBzZXJ2ZXIgc3RhcnRlZCBvbiBkZW1hbmQgYXMgbmVlZGVkLCB1c2UgYml0YmFrZSAtbSB0byBzaHV0IGl0IGRvd24iCitlbHNlCisgICAgZXhwb3J0IEJCU0VSVkVSPWBjYXQgYml0YmFrZS5sb2NrYAorCisgICAgaWYgWyAkcmVzID0gMCBdIDsgdGhlbgorCWVjaG8gIlVzaW5nIGV4aXN0aW5nIGJpdGJha2Ugc2VydmVyIGF0OiAkQkJTRVJWRVIsIHVzZSBiaXRiYWtlIC1tIHRvIHNodXQgaXQgZG93biIKKyAgICBlbHNlCisJZWNobyAiQml0YmFrZSBzZXJ2ZXIgc3RhcnRlZCBhdDogJEJCU0VSVkVSLCB1c2UgYml0YmFrZSAtbSB0byBzaHV0IGl0IGRvd24iCisgICAgZmkKKyAgICB1bnNldCByZXMKK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvUkVBRE1FIGIveW9jdG8tcG9reS9zY3JpcHRzL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjhkMTI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL1JFQURNRQpAQCAtMCwwICsxIEBACitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBWYXJpb3VzIHVzZWZ1bCBzY3JpcHRzIGZvciB3b3JraW5nIHdpdGggT0UgYnVpbGRzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvYml0YmFrZS1wcnNlcnYtdG9vbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9iaXRiYWtlLXByc2Vydi10b29sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI4YzI0MTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvYml0YmFrZS1wcnNlcnYtdG9vbApAQCAtMCwwICsxLDEwMyBAQAorIyEvdXNyL2Jpbi9lbnYgYmFzaAorCitoZWxwICgpCit7CisgICAgYmFzZT1gYmFzZW5hbWUgJDBgCisgICAgZWNobyAtZSAiVXNhZ2U6ICRiYXNlIGNvbW1hbmQiCisgICAgZWNobyAiQXZhbGlhYmxlIGNvbW1hbmRzOiIKKyAgICBlY2hvIC1lICJcdGV4cG9ydCA8ZmlsZS5jb25mPjogZXhwb3J0IGFuZCBsb2NrIGRvd24gdGhlIEFVVE9QUiB2YWx1ZXMgZnJvbSB0aGUgUFIgc2VydmljZSBpbnRvIGEgZmlsZSBmb3IgcmVsZWFzZS4iCisgICAgZWNobyAtZSAiXHRpbXBvcnQgPGZpbGUuY29uZj46IGltcG9ydCB0aGUgQVVUT1BSIHZhbHVlcyBmcm9tIHRoZSBleHBvcnRlZCBmaWxlIGludG8gdGhlIFBSIHNlcnZpY2UuIgorfQorCitjbGVhbl9jYWNoZSgpCit7CisgICAgcz1gYml0YmFrZSAtZSB8IGdyZXAgXkNBQ0hFPSB8IGN1dCAtZjIgLWRcImAKKyAgICBpZiBbICJ4JHtzfSIgIT0gIngiIF07IHRoZW4KKyAgICAgICAgcm0gLXJmICR7c30KKyAgICBmaQorfQorCitkb19leHBvcnQgKCkKK3sKKyAgICBmaWxlPSQxCisgICAgWyAieCR7ZmlsZX0iID09ICJ4IiBdICYmIGhlbHAgJiYgZXhpdCAxCisgICAgcm0gLWYgJHtmaWxlfQorCisgICAgY2xlYW5fY2FjaGUKKyAgICBiaXRiYWtlIC1SIGNvbmYvcHJleHBvcnQuY29uZiAtcAorICAgIHM9YGJpdGJha2UgLVIgY29uZi9wcmV4cG9ydC5jb25mIC1lIHwgZ3JlcCBeUFJTRVJWX0RVTVBGSUxFPSB8IGN1dCAtZjIgLWRcImAKKyAgICBpZiBbICJ4JHtzfSIgIT0gIngiIF07CisgICAgdGhlbgorICAgICAgIFsgLWUgJHMgXSAmJiBtdiAtZiAkcyAkZmlsZSAmJiBlY2hvICJFeHBvcnRpbmcgdG8gZmlsZSAkZmlsZSBzdWNjZWVkZWQhIgorICAgICAgIHJldHVybiAwCisgICAgZmkKKyAgICBlY2hvICJFeHBvcnRpbmcgdG8gZmlsZSAkZmlsZSBmYWlsZWQhIgorICAgIHJldHVybiAxCit9CisKK2RvX2ltcG9ydCAoKQoreworICAgIGZpbGU9JDEKKyAgICBbICJ4JHtmaWxlfSIgPT0gIngiIF0gJiYgaGVscCAmJiBleGl0IDEKKworICAgIGNsZWFuX2NhY2hlCisgICAgYml0YmFrZSAtUiBjb25mL3ByaW1wb3J0LmNvbmYgLVIgJGZpbGUgLXAKKyAgICByZXQ9JD8KKyAgICBbICRyZXQgLWVxIDAgXSAmJiBlY2hvICJJbXBvcnRpbmcgZnJvbSBmaWxlICRmaWxlIHN1Y2NlZWRlZCEiIHx8IGVjaG8gIkltcG9ydGluZyBmcm9tIGZpbGUgJGZpbGUgZmFpbGVkISIKKyAgICByZXR1cm4gJHJldAorfQorCitkb19taWdyYXRlX2xvY2FsY291bnQgKCkKK3sKKyAgICBkZj1gYml0YmFrZSAtUiBjb25mL21pZ3JhdGVfbG9jYWxjb3VudC5jb25mIC1lIHwgXAorICAgICAgICAgICAgICAgIGdyZXAgXkxPQ0FMQ09VTlRfRFVNUEZJTEU9IHwgY3V0IC1mMiAtZFwiYAorICAgIGlmIFsgIngke2RmfSIgPT0gIngiIF07CisgICAgdGhlbgorICAgICAgICBlY2hvICJMT0NBTENPVU5UX0RVTVBGSUxFIGlzIG5vdCBkZWZpbmVkISIKKyAgICAgICAgcmV0dXJuIDEKKyAgICBmaQorCisgICAgcm0gLXJmICRkZgorICAgIGNsZWFuX2NhY2hlCisgICAgZWNobyAiRXhwb3J0aW5nIExPQ0FMQ09VTlQgdG8gQVVUT0lOQ3MuLi4iCisgICAgYml0YmFrZSAtUiBjb25mL21pZ3JhdGVfbG9jYWxjb3VudC5jb25mIC1wCisgICAgWyAhICQ/IC1lcSAwIF0gJiYgZWNobyAiRXhwb3J0aW5nIHRvIGZpbGUgJGRmIGZhaWxlZCEiICYmIGV4aXQgMQorCisgICAgaWYgWyAtZSAkZGYgXTsKKyAgICB0aGVuCisgICAgICAgIGVjaG8gIkV4cG9ydGluZyB0byBmaWxlICRkZiBzdWNjZWVkZWQhIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiRXhwb3J0aW5nIHRvIGZpbGUgJGRmIGZhaWxlZCEiCisgICAgICAgIGV4aXQgMQorICAgIGZpCisgICAgCisgICAgZWNobyAiSW1wb3J0aW5nIGdlbmVyYXRlZCBBVVRPSU5DIGVudHJpZXMuLi4iCisgICAgWyAtZSAkZGYgXSAmJiBkb19pbXBvcnQgJGRmCisKKyAgICBpZiBbICEgJD8gLWVxIDAgXQorICAgIHRoZW4KKyAgICAgICAgZWNobyAiTWlncmF0aW9uIGZyb20gTE9DQUxDT1VOVCB0byBBVVRPSU5DcyBmYWlsZWQhIgorICAgICAgICByZXR1cm4gMQorICAgIGZpCisKKyAgICBlY2hvICJNaWdyYXRpb24gZnJvbSBMT0NBTENPVU5UIHRvIEFVVE9JTkNzIHN1Y2NlZWRlZCEiCisgICAgcmV0dXJuIDAKK30KKworWyAkIyAtZXEgMCBdICYmIGhlbHAgICYmIGV4aXQgMQorCitjYXNlICQxIGluCitleHBvcnQpCisgICAgZG9fZXhwb3J0ICQyCisgICAgOzsKK2ltcG9ydCkKKyAgICBkb19pbXBvcnQgJDIKKyAgICA7OworbWlncmF0ZV9sb2NhbGNvdW50KQorICAgIGRvX21pZ3JhdGVfbG9jYWxjb3VudAorICAgIDs7CisqKQorICAgIGhlbHAKKyAgICBleGl0IDEKKyAgICA7OworZXNhYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2JpdGJha2Utd2hhdGNoYW5nZWQgYi95b2N0by1wb2t5L3NjcmlwdHMvYml0YmFrZS13aGF0Y2hhbmdlZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NWNmZTRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2JpdGJha2Utd2hhdGNoYW5nZWQKQEAgLTAsMCArMSwzMzkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKworIyBDb3B5cmlnaHQgKGMpIDIwMTMgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IGdldG9wdAoraW1wb3J0IHNodXRpbAoraW1wb3J0IHJlCitpbXBvcnQgd2FybmluZ3MKK2ltcG9ydCBzdWJwcm9jZXNzCitmcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKKworc2NyaXB0c19wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc3lzLmFyZ3ZbMF0pKSkKK2xpYl9wYXRoID0gc2NyaXB0c19wYXRoICsgJy9saWInCitzeXMucGF0aCA9IHN5cy5wYXRoICsgW2xpYl9wYXRoXQorCitpbXBvcnQgc2NyaXB0cGF0aAorCisjIEZpZ3VyZSBvdXQgd2hlcmUgaXMgdGhlIGJpdGJha2UvbGliL2JiIHNpbmNlIHdlIG5lZWQgYmIuc2lnZ2VuIGFuZCBiYi5wcm9jZXNzCitiaXRiYWtlcGF0aCA9IHNjcmlwdHBhdGguYWRkX2JpdGJha2VfbGliX3BhdGgoKQoraWYgbm90IGJpdGJha2VwYXRoOgorICAgIHN5cy5zdGRlcnIud3JpdGUoIlVuYWJsZSB0byBmaW5kIGJpdGJha2UgYnkgc2VhcmNoaW5nIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhpcyBzY3JpcHQgb3IgUEFUSFxuIikKKyAgICBzeXMuZXhpdCgxKQorCitpbXBvcnQgYmIuc2lnZ2VuCitpbXBvcnQgYmIucHJvY2VzcworCisjIE1hdGNoIHRoZSBzdGFtcCdzIGZpbGVuYW1lCisjIGdyb3VwKDEpOiBQRV9QViAobWF5IG5vIFBFKQorIyBncm91cCgyKTogUFIKKyMgZ3JvdXAoMyk6IFRBU0sKKyMgZ3JvdXAoNCk6IEhBU0gKK3N0YW1wX3JlID0gcmUuY29tcGlsZSgiKD9QPHB2Pi4qKS0oP1A8cHI+clxkKylcLig/UDx0YXNrPmRvX1x3KylcLig/UDxoYXNoPlteXC5dKikiKQorc2lnZGF0YV9yZSA9IHJlLmNvbXBpbGUoIi4qXC5zaWdkYXRhXC4uKiIpCisKK2RlZiBnZW5fZGljdChzdGFtcHMpOgorICAgICIiIgorICAgIEdlbmVyYXRlIHRoZSBkaWN0IGZyb20gdGhlIHN0YW1wcyBkaXIuCisgICAgVGhlIG91dHB1dCBkaWN0IGZvcm1hdCBpczoKKyAgICB7ZmFrZV9mOiB7cG46IFBOLCBwdjogUFYsIHByOiBQUiwgdGFzazogVEFTSywgcGF0aDogUEFUSH19CisgICAgV2hlcmU6CisgICAgZmFrZV9mOiBwdiArIHRhc2sgKyBoYXNoCisgICAgcGF0aDogdGhlIHBhdGggdG8gdGhlIHN0YW1wIGZpbGUKKyAgICAiIiIKKyAgICAjIFRoZSBtZW1iZXIgb2YgdGhlIHN1YiBkaWN0IChBICJwYXRoIiB3aWxsIGJlIGFwcGVuZGVkIGJlbG93KQorICAgIHN1Yl9tZW0gPSAoInB2IiwgInByIiwgInRhc2siKQorICAgIGQgPSB7fQorICAgIGZvciBkaXJwYXRoLCBfLCBmaWxlcyBpbiBvcy53YWxrKHN0YW1wcyk6CisgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgIyBUaGUgImJpdGJha2UgLVMiIHdvdWxkIGdlbmVyYXRlICIuc2lnZGF0YSIsIGJ1dCBubyAiX3NldHNjZW5lIi4KKyAgICAgICAgICAgIGZha2VfZiA9IHJlLnN1YignX3NldHNjZW5lLicsICcuJywgZikKKyAgICAgICAgICAgIGZha2VfZiA9IHJlLnN1YignLnNpZ2RhdGEnLCAnJywgZmFrZV9mKQorICAgICAgICAgICAgc3ViZGljdCA9IHt9CisgICAgICAgICAgICB0bXAgPSBzdGFtcF9yZS5tYXRjaChmYWtlX2YpCisgICAgICAgICAgICBpZiB0bXA6CisgICAgICAgICAgICAgICAgZm9yIGkgaW4gc3ViX21lbToKKyAgICAgICAgICAgICAgICAgICAgc3ViZGljdFtpXSA9IHRtcC5ncm91cChpKQorICAgICAgICAgICAgICAgIGlmIGxlbihzdWJkaWN0KSAhPSAwOgorICAgICAgICAgICAgICAgICAgICBwbiA9IG9zLnBhdGguYmFzZW5hbWUoZGlycGF0aCkKKyAgICAgICAgICAgICAgICAgICAgc3ViZGljdFsncG4nXSA9IHBuCisgICAgICAgICAgICAgICAgICAgICMgVGhlIHBhdGggd2lsbCBiZSB1c2VkIGJ5IG9zLnN0YXQoKSBhbmQgYmIuc2lnZ2VuCisgICAgICAgICAgICAgICAgICAgIHN1YmRpY3RbJ3BhdGgnXSA9IGRpcnBhdGggKyAiLyIgKyBmCisgICAgICAgICAgICAgICAgICAgIGZha2VfZiA9IHRtcC5ncm91cCgncHYnKSArIHRtcC5ncm91cCgndGFzaycpICsgdG1wLmdyb3VwKCdoYXNoJykKKyAgICAgICAgICAgICAgICAgICAgZFtmYWtlX2ZdID0gc3ViZGljdAorICAgIHJldHVybiBkCisKKyMgUmUtY29uc3RydWN0IHRoZSBkaWN0CitkZWYgcmVjb25fZGljdChkaWN0X2luKToKKyAgICAiIiIKKyAgICBUaGUgb3V0cHV0IGRpY3QgZm9ybWF0IGlzOgorICAgIHtwbl90YXNrOiB7cHY6IFBWLCBwcjogUFIsIHBhdGg6IFBBVEh9fQorICAgICIiIgorICAgIGRpY3Rfb3V0ID0ge30KKyAgICBmb3IgayBpbiBkaWN0X2luLmtleXMoKToKKyAgICAgICAgc3ViZGljdCA9IHt9CisgICAgICAgICMgVGhlIGtleQorICAgICAgICBwbl90YXNrID0gIiVzXyVzIiAlIChkaWN0X2luLmdldChrKS5nZXQoJ3BuJyksIGRpY3RfaW4uZ2V0KGspLmdldCgndGFzaycpKQorICAgICAgICAjIElmIG1vcmUgdGhhbiBvbmUgc3RhbXBzIGFyZSBmb3VuZCwgdXNlIHRoZSBsYXRlc3Qgb25lLgorICAgICAgICBpZiBwbl90YXNrIGluIGRpY3Rfb3V0OgorICAgICAgICAgICAgZnVsbF9wYXRoX3ByZSA9IGRpY3Rfb3V0LmdldChwbl90YXNrKS5nZXQoJ3BhdGgnKQorICAgICAgICAgICAgZnVsbF9wYXRoX2N1ciA9IGRpY3RfaW4uZ2V0KGspLmdldCgncGF0aCcpCisgICAgICAgICAgICBpZiBvcy5zdGF0KGZ1bGxfcGF0aF9wcmUpLnN0X210aW1lID4gb3Muc3RhdChmdWxsX3BhdGhfY3VyKS5zdF9tdGltZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBzdWJkaWN0WydwdiddID0gZGljdF9pbi5nZXQoaykuZ2V0KCdwdicpCisgICAgICAgIHN1YmRpY3RbJ3ByJ10gPSBkaWN0X2luLmdldChrKS5nZXQoJ3ByJykKKyAgICAgICAgc3ViZGljdFsncGF0aCddID0gZGljdF9pbi5nZXQoaykuZ2V0KCdwYXRoJykKKyAgICAgICAgZGljdF9vdXRbcG5fdGFza10gPSBzdWJkaWN0CisKKyAgICByZXR1cm4gZGljdF9vdXQKKworZGVmIHNwbGl0X3BudGFzayhzKToKKyAgICAiIiIKKyAgICBTcGxpdCB0aGUgcG5fdGFzayBpbiB0byAocG4sIHRhc2spIGFuZCByZXR1cm4gaXQKKyAgICAiIiIKKyAgICB0bXAgPSByZS5tYXRjaCgiKC4qKV8oZG9fLiopIiwgcykKKyAgICByZXR1cm4gKHRtcC5ncm91cCgxKSwgdG1wLmdyb3VwKDIpKQorCisKK2RlZiBwcmludF9hZGRlZChkX25ldyA9IE5vbmUsIGRfb2xkID0gTm9uZSk6CisgICAgIiIiCisgICAgUHJpbnQgdGhlIG5ld2x5IGFkZGVkIHRhc2tzCisgICAgIiIiCisgICAgYWRkZWQgPSB7fQorICAgIGZvciBrIGluIGRfbmV3LmtleXMoKToKKyAgICAgICAgaWYgayBub3QgaW4gZF9vbGQ6CisgICAgICAgICAgICAjIEFkZCB0aGUgbmV3IG9uZSB0byBhZGRlZCBkaWN0LCBhbmQgcmVtb3ZlIGl0IGZyb20KKyAgICAgICAgICAgICMgZF9uZXcsIHNvIHRoZSByZW1haW5pbmcgb25lcyBhcmUgdGhlIGNoYW5nZWQgb25lcworICAgICAgICAgICAgYWRkZWRba10gPSBkX25ldy5nZXQoaykKKyAgICAgICAgICAgIGRlbChkX25ld1trXSkKKworICAgIGlmIG5vdCBhZGRlZDoKKyAgICAgICAgcmV0dXJuIDAKKworICAgICMgRm9ybWF0IHRoZSBvdXRwdXQsIHRoZSBkaWN0IGZvcm1hdCBpczoKKyAgICAjIHtwbjogdGFzazEsIHRhc2syIC4uLn0KKyAgICBhZGRlZF9mb3JtYXQgPSB7fQorICAgIGNvdW50ZXIgPSAwCisgICAgZm9yIGsgaW4gYWRkZWQua2V5cygpOgorICAgICAgICBwbiwgdGFzayA9IHNwbGl0X3BudGFzayhrKQorICAgICAgICBpZiBwbiBpbiBhZGRlZF9mb3JtYXQ6CisgICAgICAgICAgICAjIEFwcGVuZCB0aGUgdmFsdWUKKyAgICAgICAgICAgIGFkZGVkX2Zvcm1hdFtwbl0gPSAiJXMgJXMiICUgKGFkZGVkX2Zvcm1hdC5nZXQocG4pLCB0YXNrKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWRkZWRfZm9ybWF0W3BuXSA9IHRhc2sKKyAgICAgICAgY291bnRlciArPSAxCisgICAgcHJpbnQoIj09PSBOZXdseSBhZGRlZCB0YXNrczogKCVzIHRhc2tzKSIgJSBjb3VudGVyKQorICAgIGZvciBrIGluIGFkZGVkX2Zvcm1hdC5rZXlzKCk6CisgICAgICAgIHByaW50KCIgICVzOiAlcyIgJSAoaywgYWRkZWRfZm9ybWF0LmdldChrKSkpCisKKyAgICByZXR1cm4gY291bnRlcgorCitkZWYgcHJpbnRfdnJjaGFuZ2VkKGRfbmV3ID0gTm9uZSwgZF9vbGQgPSBOb25lLCB2ciA9IE5vbmUpOgorICAgICIiIgorICAgIFByaW50IHRoZSBwdiBvciBwciBjaGFuZ2VkIHRhc2tzLgorICAgIFRoZSBhcmcgInZyIiBpcyAicHYiIG9yICJwciIKKyAgICAiIiIKKyAgICBwdmNoYW5nZWQgPSB7fQorICAgIGNvdW50ZXIgPSAwCisgICAgZm9yIGsgaW4gZF9uZXcua2V5cygpOgorICAgICAgICBpZiBkX25ldy5nZXQoaykuZ2V0KHZyKSAhPSBkX29sZC5nZXQoaykuZ2V0KHZyKToKKyAgICAgICAgICAgIGNvdW50ZXIgKz0gMQorICAgICAgICAgICAgcG4sIHRhc2sgPSBzcGxpdF9wbnRhc2soaykKKyAgICAgICAgICAgIGlmIHBuIG5vdCBpbiBwdmNoYW5nZWQ6CisgICAgICAgICAgICAgICAgIyBGb3JtYXQgdGhlIG91dHB1dCwgd2Ugb25seSBwcmludCBwbiAobm8gdGFzaykgc2luY2UKKyAgICAgICAgICAgICAgICAjIGFsbCB0aGUgdGFza3Mgd291bGQgYmUgY2hhbmdlZCB3aGVuIHBuIG9yIHByIGNoYW5nZWQsCisgICAgICAgICAgICAgICAgIyB0aGUgZGljdCBmb3JtYXQgaXM6CisgICAgICAgICAgICAgICAgIyB7cG46IHB2L3ByX29sZCAtPiBwdi9wcl9uZXd9CisgICAgICAgICAgICAgICAgcHZjaGFuZ2VkW3BuXSA9ICIlcyAtPiAlcyIgJSAoZF9vbGQuZ2V0KGspLmdldCh2ciksIGRfbmV3LmdldChrKS5nZXQodnIpKQorICAgICAgICAgICAgZGVsKGRfbmV3W2tdKQorCisgICAgaWYgbm90IHB2Y2hhbmdlZDoKKyAgICAgICAgcmV0dXJuIDAKKworICAgIHByaW50KCJcbj09PSAlcyBjaGFuZ2VkOiAoJXMgdGFza3MpIiAlICh2ci51cHBlcigpLCBjb3VudGVyKSkKKyAgICBmb3IgayBpbiBwdmNoYW5nZWQua2V5cygpOgorICAgICAgICBwcmludCgiICAlczogJXMiICUgKGssIHB2Y2hhbmdlZC5nZXQoaykpKQorCisgICAgcmV0dXJuIGNvdW50ZXIKKworZGVmIHByaW50X2RlcGNoYW5nZWQoZF9uZXcgPSBOb25lLCBkX29sZCA9IE5vbmUsIHZlcmJvc2UgPSBGYWxzZSk6CisgICAgIiIiCisgICAgUHJpbnQgdGhlIGRlcGVuZGVuY3kgY2hhbmdlcworICAgICIiIgorICAgIGRlcGNoYW5nZWQgPSB7fQorICAgIGNvdW50ZXIgPSAwCisgICAgZm9yIGsgaW4gZF9uZXcua2V5cygpOgorICAgICAgICBjb3VudGVyICs9IDEKKyAgICAgICAgcG4sIHRhc2sgPSBzcGxpdF9wbnRhc2soaykKKyAgICAgICAgaWYgKHZlcmJvc2UpOgorICAgICAgICAgICAgZnVsbF9wYXRoX29sZCA9IGRfb2xkLmdldChrKS5nZXQoInBhdGgiKQorICAgICAgICAgICAgZnVsbF9wYXRoX25ldyA9IGRfbmV3LmdldChrKS5nZXQoInBhdGgiKQorICAgICAgICAgICAgIyBObyBjb3VudGVyIHNpbmNlIGl0IGlzIG5vdCByZWFkeSBoZXJlCisgICAgICAgICAgICBpZiBzaWdkYXRhX3JlLm1hdGNoKGZ1bGxfcGF0aF9vbGQpIGFuZCBzaWdkYXRhX3JlLm1hdGNoKGZ1bGxfcGF0aF9uZXcpOgorICAgICAgICAgICAgICAgIG91dHB1dCA9IGJiLnNpZ2dlbi5jb21wYXJlX3NpZ2ZpbGVzKGZ1bGxfcGF0aF9vbGQsIGZ1bGxfcGF0aF9uZXcpCisgICAgICAgICAgICAgICAgaWYgb3V0cHV0OgorICAgICAgICAgICAgICAgICAgICBwcmludCgiXG49PT0gVGhlIHZlcmJvc2UgY2hhbmdlcyBvZiAlcy5kb18lczoiICUgKHBuLCB0YXNrKSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ1xuJy5qb2luKG91dHB1dCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEZvcm1hdCB0aGUgb3V0cHV0LCB0aGUgZm9ybWF0IGlzOgorICAgICAgICAgICAgIyB7cG46IHRhc2sxLCB0YXNrMiwgLi4ufQorICAgICAgICAgICAgaWYgcG4gaW4gZGVwY2hhbmdlZDoKKyAgICAgICAgICAgICAgICBkZXBjaGFuZ2VkW3BuXSA9ICIlcyAlcyIgJSAoZGVwY2hhbmdlZC5nZXQocG4pLCB0YXNrKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkZXBjaGFuZ2VkW3BuXSA9IHRhc2sKKworICAgIGlmIGxlbihkZXBjaGFuZ2VkKSA+IDA6CisgICAgICAgIHByaW50KCJcbj09PSBEZXBlbmRlbmNpZXMgY2hhbmdlZDogKCVzIHRhc2tzKSIgJSBjb3VudGVyKQorICAgICAgICBmb3IgayBpbiBkZXBjaGFuZ2VkLmtleXMoKToKKyAgICAgICAgICAgIHByaW50KCIgICVzOiAlcyIgJSAoaywgZGVwY2hhbmdlZFtrXSkpCisKKyAgICByZXR1cm4gY291bnRlcgorCisKK2RlZiBtYWluKCk6CisgICAgIiIiCisgICAgUHJpbnQgd2hhdCB3aWxsIGJlIGRvbmUgYmV0d2VlbiB0aGUgY3VycmVudCBhbmQgbGFzdCBidWlsZHM6CisgICAgMSkgUnVuICJTVEFNUFNfRElSPTxwYXRoPiBiaXRiYWtlIC1TIHJlY2lwZSIgdG8gcmUtZ2VuZXJhdGUgdGhlIHN0YW1wcworICAgIDIpIEZpZ3VyZSBvdXQgd2hhdCBhcmUgbmV3bHkgYWRkZWQgYW5kIGNoYW5nZWQsIGNhbid0IGZpZ3VyZSBvdXQKKyAgICAgICB3aGF0IGFyZSByZW1vdmVkIHNpbmNlIHdlIGNhbid0IGtub3cgdGhlIHByZXZpb3VzIHN0YW1wcworICAgICAgIGNsZWFybHksIGZvciBleGFtcGxlLCBpZiB0aGVyZSBhcmUgc2V2ZXJhbCBidWlsZHMsIHdlIGNhbid0IGtub3cKKyAgICAgICB3aGljaCBzdGFtcHMgdGhlIGxhc3QgYnVpbGQgaGFzIHVzZWQgZXhhY3RseS4KKyAgICAzKSBVc2UgYmIuc2lnZ2VuLmNvbXBhcmVfc2lnZmlsZXMgdG8gZGlmZiB0aGUgb2xkIGFuZCBuZXcgc3RhbXBzCisgICAgIiIiCisKKyAgICBwYXJzZXIgPSBPcHRpb25QYXJzZXIoCisgICAgICAgIHZlcnNpb24gPSAiMS4wIiwKKyAgICAgICAgdXNhZ2UgPSAiIiIlcHJvZyBbb3B0aW9uc10gW3BhY2thZ2UgLi4uXQorcHJpbnQgd2hhdCB3aWxsIGJlIGRvbmUgYmV0d2VlbiB0aGUgY3VycmVudCBhbmQgbGFzdCBidWlsZHMsIGZvciBleGFtcGxlOgorCisgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0bworICAgICMgRWRpdCB0aGUgcmVjaXBlcworICAgICQgYml0YmFrZS13aGF0Y2hhbmdlZCBjb3JlLWltYWdlLXNhdG8KKworVGhlIGNoYW5nZXMgd2lsbCBiZSBwcmludGVkIgorCitOb3RlOgorICAgIFRoZSBhbW91bnQgb2YgdGFza3MgaXMgbm90IGFjY3VyYXRlIHdoZW4gdGhlIHRhc2sgaXMgImRvX2J1aWxkIiBzaW5jZQorICAgIGl0IHVzdWFsbHkgZGVwZW5kcyBvbiBvdGhlciB0YXNrcy4KKyAgICBUaGUgIm5vc3RhbXAiIHRhc2sgaXMgbm90IGluY2x1ZGVkLgorIiIiCispCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi12IiwgIi0tdmVyYm9zZSIsIGhlbHAgPSAicHJpbnQgdGhlIHZlcmJvc2UgY2hhbmdlcyIsCisgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAidmVyYm9zZSIpCisKKyAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3YpCisKKyAgICB2ZXJib3NlID0gb3B0aW9ucy52ZXJib3NlCisKKyAgICBpZiBsZW4oYXJncykgIT0gMjoKKyAgICAgICAgcGFyc2VyLmVycm9yKCJJbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyIpCisgICAgZWxzZToKKyAgICAgICAgcmVjaXBlID0gYXJnc1sxXQorCisgICAgIyBHZXQgdGhlIFNUQU1QU19ESVIKKyAgICBwcmludCgiRmlndXJpbmcgb3V0IHRoZSBTVEFNUFNfRElSIC4uLiIpCisgICAgY21kbGluZSA9ICJiaXRiYWtlIC1lIHwgc2VkIC1uZSAncy9eU1RBTVBTX0RJUj1cIlwoLipcKVwiL1xcMS9wJyIKKyAgICB0cnk6CisgICAgICAgIHN0YW1wc2RpciwgZXJyID0gYmIucHJvY2Vzcy5ydW4oY21kbGluZSkKKyAgICBleGNlcHQ6CisgICAgICAgIHJhaXNlCisgICAgaWYgbm90IHN0YW1wc2RpcjoKKyAgICAgICAgcHJpbnQoIkVSUk9SOiBObyBTVEFNUFNfRElSIGZvdW5kIGZvciAnJXMnIiAlIHJlY2lwZSwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICByZXR1cm4gMgorICAgIHN0YW1wc2RpciA9IHN0YW1wc2Rpci5yc3RyaXAoIlxuIikKKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzdGFtcHNkaXIpOgorICAgICAgICBwcmludCgiRVJST1I6IHN0YW1wcyBkaXJlY3RvcnkgXCIlc1wiIG5vdCBmb3VuZCEiICUgc3RhbXBzZGlyLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgIHJldHVybiAyCisKKyAgICAjIFRoZSBuZXcgc3RhbXBzIGRpcgorICAgIG5ld19zdGFtcHNkaXIgPSBzdGFtcHNkaXIgKyAiLmJicyIKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhuZXdfc3RhbXBzZGlyKToKKyAgICAgICAgcHJpbnQoIkVSUk9SOiAlcyBhbHJlYWR5IGV4aXN0cyEiICUgbmV3X3N0YW1wc2RpciwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICByZXR1cm4gMgorCisgICAgdHJ5OgorICAgICAgICAjIEdlbmVyYXRlIHRoZSBuZXcgc3RhbXBzIGRpcgorICAgICAgICBwcmludCgiR2VuZXJhdGluZyB0aGUgbmV3IHN0YW1wcyAuLi4gKG5lZWQgc2V2ZXJhbCBtaW51dGVzKSIpCisgICAgICAgIGNtZGxpbmUgPSAiU1RBTVBTX0RJUj0lcyBiaXRiYWtlIC1TIG5vbmUgJXMiICUgKG5ld19zdGFtcHNkaXIsIHJlY2lwZSkKKyAgICAgICAgIyBGSVhNRQorICAgICAgICAjIFRoZSAiYml0YmFrZSAtUyIgbWF5IGZhaWwsIG5vdCBmYXRhbCBlcnJvciwgdGhlIHN0YW1wcyB3aWxsIHN0aWxsCisgICAgICAgICMgYmUgZ2VuZXJhdGVkLCB0aGlzIG1pZ2h0IGJlIGEgYnVnIG9mICJiaXRiYWtlIC1TIi4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIucHJvY2Vzcy5ydW4oY21kbGluZSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBwcmludChleGMpCisKKyAgICAgICAgIyBUaGUgZGljdCBmb3IgdGhlIG5ldyBhbmQgb2xkIHN0YW1wcy4KKyAgICAgICAgb2xkX2RpY3QgPSBnZW5fZGljdChzdGFtcHNkaXIpCisgICAgICAgIG5ld19kaWN0ID0gZ2VuX2RpY3QobmV3X3N0YW1wc2RpcikKKworICAgICAgICAjIFJlbW92ZSB0aGUgc2FtZSBvbmUgZnJvbSBib3RoIHN0YW1wcy4KKyAgICAgICAgY250X3VuY2hhbmdlZCA9IDAKKyAgICAgICAgZm9yIGsgaW4gbmV3X2RpY3Qua2V5cygpOgorICAgICAgICAgICAgaWYgayBpbiBvbGRfZGljdDoKKyAgICAgICAgICAgICAgICBjbnRfdW5jaGFuZ2VkICs9IDEKKyAgICAgICAgICAgICAgICBkZWwobmV3X2RpY3Rba10pCisgICAgICAgICAgICAgICAgZGVsKG9sZF9kaWN0W2tdKQorCisgICAgICAgICMgUmUtY29uc3RydWN0IHRoZSBkaWN0IHRvIGVhc2lseSBmaW5kIG91dCB3aGF0IGlzIGFkZGVkIG9yIGNoYW5nZWQuCisgICAgICAgICMgVGhlIGRpY3QgZm9ybWF0IGlzOgorICAgICAgICAjIHtwbl90YXNrOiB7cHY6IFBWLCBwcjogUFIsIHBhdGg6IFBBVEh9fQorICAgICAgICBuZXdfcmVjb24gPSByZWNvbl9kaWN0KG5ld19kaWN0KQorICAgICAgICBvbGRfcmVjb24gPSByZWNvbl9kaWN0KG9sZF9kaWN0KQorCisgICAgICAgIGRlbCBuZXdfZGljdAorICAgICAgICBkZWwgb2xkX2RpY3QKKworICAgICAgICAjIEZpZ3VyZSBvdXQgd2hhdCBhcmUgY2hhbmdlZCwgdGhlIG5ld19yZWNvbiB3b3VsZCBiZSBjaGFuZ2VkCisgICAgICAgICMgYnkgdGhlIHByaW50X3h4eCBmdW5jdGlvbi4KKyAgICAgICAgIyBOZXdseSBhZGRlZAorICAgICAgICBjbnRfYWRkZWQgPSBwcmludF9hZGRlZChuZXdfcmVjb24sIG9sZF9yZWNvbikKKworICAgICAgICAjIFBWIChpbmNsdWRpbmcgUEUpIGFuZCBQUiBjaGFuZ2VkCisgICAgICAgICMgTGV0IHRoZSBiYi5zaWdnZW4gaGFuZGxlIHRoZW0gaWYgdmVyYm9zZQorICAgICAgICBjbnRfcnYgPSB7fQorICAgICAgICBpZiBub3QgdmVyYm9zZToKKyAgICAgICAgICAgIGZvciBpIGluICgncHYnLCAncHInKToKKyAgICAgICAgICAgICAgIGNudF9ydltpXSA9IHByaW50X3ZyY2hhbmdlZChuZXdfcmVjb24sIG9sZF9yZWNvbiwgaSkKKworICAgICAgICAjIERlcGVuZGVuY2llcyBjaGFuZ2VkICh1c2UgYml0YmFrZS1kaWZmc2lncykKKyAgICAgICAgY250X2RlcCA9IHByaW50X2RlcGNoYW5nZWQobmV3X3JlY29uLCBvbGRfcmVjb24sIHZlcmJvc2UpCisKKyAgICAgICAgdG90YWxfY2hhbmdlZCA9IGNudF9hZGRlZCArIChjbnRfcnYuZ2V0KCdwdicpIG9yIDApICsgKGNudF9ydi5nZXQoJ3ByJykgb3IgMCkgKyBjbnRfZGVwCisKKyAgICAgICAgcHJpbnQoIlxuPT09IFN1bW1hcnk6ICglcyBjaGFuZ2VkLCAlcyB1bmNoYW5nZWQpIiAlICh0b3RhbF9jaGFuZ2VkLCBjbnRfdW5jaGFuZ2VkKSkKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCJOZXdseSBhZGRlZDogJXNcbkRlcGVuZGVuY2llcyBjaGFuZ2VkOiAlc1xuIiAlIFwKKyAgICAgICAgICAgICAgICAoY250X2FkZGVkLCBjbnRfZGVwKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJOZXdseSBhZGRlZDogJXNcblBWIGNoYW5nZWQ6ICVzXG5QUiBjaGFuZ2VkOiAlc1xuRGVwZW5kZW5jaWVzIGNoYW5nZWQ6ICVzXG4iICUgXAorICAgICAgICAgICAgICAgIChjbnRfYWRkZWQsIGNudF9ydi5nZXQoJ3B2Jykgb3IgMCwgY250X3J2LmdldCgncHInKSBvciAwLCBjbnRfZGVwKSkKKyAgICBleGNlcHQ6CisgICAgICAgIHByaW50KCJFUlJPUiBvY2N1cnJlZCEiKQorICAgICAgICByYWlzZQorICAgIGZpbmFsbHk6CisgICAgICAgICMgUmVtb3ZlIHRoZSBuZXdseSBnZW5lcmF0ZWQgc3RhbXBzIGRpcgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhuZXdfc3RhbXBzZGlyKToKKyAgICAgICAgICAgIHByaW50KCJSZW1vdmluZyB0aGUgbmV3bHkgZ2VuZXJhdGVkIHN0YW1wcyBkaXIgLi4uIikKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUobmV3X3N0YW1wc2RpcikKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBzeXMuZXhpdChtYWluKCkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvYnVpbGRoaXN0b3J5LWNvbGxlY3Qtc3JjcmV2cyBiL3lvY3RvLXBva3kvc2NyaXB0cy9idWlsZGhpc3RvcnktY29sbGVjdC1zcmNyZXZzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU4YTI3MDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvYnVpbGRoaXN0b3J5LWNvbGxlY3Qtc3JjcmV2cwpAQCAtMCwwICsxLDEwOSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvbGxlY3RzIHRoZSByZWNvcmRlZCBTUkNSRVYgdmFsdWVzIGZyb20gYnVpbGRoaXN0b3J5IGFuZCByZXBvcnRzIG9uIHRoZW0KKyMKKyMgQ29weXJpZ2h0IDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMgQXV0aG9yZWQtYnk6ICBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBvcywgc3lzCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBsb2dnaW5nCisKK2RlZiBsb2dnZXJfY3JlYXRlKCk6CisgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImJ1aWxkaGlzdG9yeSIpCisgICAgbG9nZ2VyaGFuZGxlciA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCisgICAgbG9nZ2VyaGFuZGxlci5zZXRGb3JtYXR0ZXIobG9nZ2luZy5Gb3JtYXR0ZXIoIiUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIikpCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIobG9nZ2VyaGFuZGxlcikKKyAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgIHJldHVybiBsb2dnZXIKKworbG9nZ2VyID0gbG9nZ2VyX2NyZWF0ZSgpCisKK2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgICAgICBkZXNjcmlwdGlvbiA9ICJDb2xsZWN0cyB0aGUgcmVjb3JkZWQgU1JDUkVWIHZhbHVlcyBmcm9tIGJ1aWxkaGlzdG9yeSBhbmQgcmVwb3J0cyBvbiB0aGVtLiIsCisgICAgICAgIHVzYWdlID0gIiIiCisgICAgJXByb2cgW29wdGlvbnNdIiIiKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1hIiwgIi0tcmVwb3J0LWFsbCIsCisgICAgICAgICAgICBoZWxwID0gIlJlcG9ydCBhbGwgU1JDUkVWIHZhbHVlcywgbm90IGp1c3Qgb25lcyB3aGVyZSBBVVRPUkVWIGhhcyBiZWVuIHVzZWQiLAorICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0icmVwb3J0YWxsIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWYiLCAiLS1mb3JjZXZhcmlhYmxlIiwKKyAgICAgICAgICAgIGhlbHAgPSAiVXNlIGZvcmNldmFyaWFibGUgb3ZlcnJpZGUgZm9yIGFsbCBvdXRwdXQgbGluZXMiLAorICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0iZm9yY2V2YXJpYWJsZSIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1wIiwgIi0tYnVpbGRoaXN0b3J5LWRpciIsCisgICAgICAgICAgICBoZWxwID0gIlNwZWNpZnkgcGF0aCB0byBidWlsZGhpc3RvcnkgZGlyZWN0b3J5IChkZWZhdWx0cyB0byBidWlsZGhpc3RvcnkvIHVuZGVyIGN3ZCkiLAorICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9ImJ1aWxkaGlzdG9yeV9kaXIiLCBkZWZhdWx0PSdidWlsZGhpc3RvcnkvJykKKworICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhzeXMuYXJndikKKworICAgIGlmIGxlbihhcmdzKSA+IDE6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0ludmFsaWQgYXJndW1lbnQocykgc3BlY2lmaWVkOiAlc1xuXG4nICUgJyAnLmpvaW4oYXJnc1sxOl0pKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3B0aW9ucy5idWlsZGhpc3RvcnlfZGlyKToKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnQnVpbGRoaXN0b3J5IGRpcmVjdG9yeSAiJXMiIGRvZXMgbm90IGV4aXN0XG5cbicgJSBvcHRpb25zLmJ1aWxkaGlzdG9yeV9kaXIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGlmIG9wdGlvbnMuZm9yY2V2YXJpYWJsZToKKyAgICAgICAgZm9yY2V2YXJpYWJsZSA9ICdfZm9yY2V2YXJpYWJsZScKKyAgICBlbHNlOgorICAgICAgICBmb3JjZXZhcmlhYmxlID0gJycKKworICAgIGxhc3RkaXIgPSAnJworICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKG9wdGlvbnMuYnVpbGRoaXN0b3J5X2Rpcik6CisgICAgICAgIGlmICcuZ2l0JyBpbiBkaXJzOgorICAgICAgICAgICAgZGlycy5yZW1vdmUoJy5naXQnKQorICAgICAgICBmb3IgZm4gaW4gZmlsZXM6CisgICAgICAgICAgICBpZiBmbiA9PSAnbGF0ZXN0X3NyY3Jldic6CisgICAgICAgICAgICAgICAgY3VyZGlyID0gb3MucGF0aC5iYXNlbmFtZShvcy5wYXRoLmRpcm5hbWUocm9vdCkpCisgICAgICAgICAgICAgICAgaWYgbGFzdGRpciAhPSBjdXJkaXI6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCcjICVzJyAlIGN1cmRpcikKKyAgICAgICAgICAgICAgICAgICAgbGFzdGRpciA9IGN1cmRpcgorICAgICAgICAgICAgICAgIGZ1bGxwYXRoID0gb3MucGF0aC5qb2luKHJvb3QsIGZuKQorICAgICAgICAgICAgICAgIHBuID0gb3MucGF0aC5iYXNlbmFtZShyb290KQorICAgICAgICAgICAgICAgIHNyY3JldiA9IE5vbmUKKyAgICAgICAgICAgICAgICBvcmlnX3NyY3JldiA9IE5vbmUKKyAgICAgICAgICAgICAgICBvcmlnX3NyY3JldnMgPSB7fQorICAgICAgICAgICAgICAgIHNyY3JldnMgPSB7fQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihmdWxscGF0aCkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICc9JyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dmFsID0gbGluZS5zcGxpdCgnPScpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzcGxpdHZhbFsxXS5zdHJpcCgnIiBcdFxuXHInKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcjIFNSQ1JFViA9ICcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdfc3JjcmV2ID0gdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCcjIFNSQ1JFVl8nKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdHZhbCA9IGxpbmUuc3BsaXQoJz0nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBzcGxpdHZhbFswXS5zcGxpdCgnXycpWzFdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnX3NyY3JldnNbbmFtZV0gPSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJ1NSQ1JFViA9Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjcmV2ID0gdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCdTUkNSRVZfJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHNwbGl0dmFsWzBdLnNwbGl0KCdfJylbMV0uc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY3JldnNbbmFtZV0gPSB2YWx1ZQorICAgICAgICAgICAgICAgIGlmIHNyY3JldiBhbmQgKG9wdGlvbnMucmVwb3J0YWxsIG9yIHNyY3JldiAhPSBvcmlnX3NyY3Jldik6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCdTUkNSRVZfcG4tJXMlcyA9ICIlcyInICUgKHBuLCBmb3JjZXZhcmlhYmxlLCBzcmNyZXYpKQorICAgICAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBzcmNyZXZzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIG9yaWcgPSBvcmlnX3NyY3JldnMuZ2V0KG5hbWUsIG9yaWdfc3JjcmV2KQorICAgICAgICAgICAgICAgICAgICBpZiBvcHRpb25zLnJlcG9ydGFsbCBvciB2YWx1ZSAhPSBvcmlnOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ1NSQ1JFVl8lc19wbi0lcyVzID0gIiVzIicgJSAobmFtZSwgcG4sIGZvcmNldmFyaWFibGUsIHZhbHVlKSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2J1aWxkaGlzdG9yeS1kaWZmIGIveW9jdG8tcG9reS9zY3JpcHRzL2J1aWxkaGlzdG9yeS1kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRmZWJjZGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvYnVpbGRoaXN0b3J5LWRpZmYKQEAgLTAsMCArMSwxMDAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIFJlcG9ydCBzaWduaWZpY2FudCBkaWZmZXJlbmNlcyBpbiB0aGUgYnVpbGRoaXN0b3J5IHJlcG9zaXRvcnkgc2luY2UgYSBzcGVjaWZpYyByZXZpc2lvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMgQXV0aG9yOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgb3B0cGFyc2UKK2Zyb20gZGlzdHV0aWxzLnZlcnNpb24gaW1wb3J0IExvb3NlVmVyc2lvbgorCisjIEVuc3VyZSBQeXRob25HaXQgaXMgaW5zdGFsbGVkIChidWlsZGhpc3RvcnlfYW5hbHlzaXMgbmVlZHMgaXQpCit0cnk6CisgICAgaW1wb3J0IGdpdAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHByaW50KCJQbGVhc2UgaW5zdGFsbCBHaXRQeXRob24gKHB5dGhvbi1naXQpIDAuMy4xIG9yIGxhdGVyIGluIG9yZGVyIHRvIHVzZSB0aGlzIHNjcmlwdCIpCisgICAgc3lzLmV4aXQoMSkKKworZGVmIG1haW4oKToKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoCisgICAgICAgIGRlc2NyaXB0aW9uID0gIlJlcG9ydHMgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZXMgaW4gdGhlIGJ1aWxkaGlzdG9yeSByZXBvc2l0b3J5LiIsCisgICAgICAgIHVzYWdlID0gIiIiCisgICAgJXByb2cgW29wdGlvbnNdIFtmcm9tLXJldmlzaW9uIFt0by1yZXZpc2lvbl1dCisoaWYgbm90IHNwZWNpZmllZCwgZnJvbS1yZXZpc2lvbiBkZWZhdWx0cyB0byBidWlsZC1taW51cy0xLCBhbmQgdG8tcmV2aXNpb24gZGVmYXVsdHMgdG8gSEVBRCkiIiIpCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXAiLCAiLS1idWlsZGhpc3RvcnktZGlyIiwKKyAgICAgICAgICAgIGhlbHAgPSAiU3BlY2lmeSBwYXRoIHRvIGJ1aWxkaGlzdG9yeSBkaXJlY3RvcnkgKGRlZmF1bHRzIHRvIGJ1aWxkaGlzdG9yeS8gdW5kZXIgY3dkKSIsCisgICAgICAgICAgICBhY3Rpb249InN0b3JlIiwgZGVzdD0iYnVpbGRoaXN0b3J5X2RpciIsIGRlZmF1bHQ9J2J1aWxkaGlzdG9yeS8nKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItdiIsICItLXJlcG9ydC12ZXJzaW9uIiwKKyAgICAgICAgICAgIGhlbHAgPSAiUmVwb3J0IGNoYW5nZXMgaW4gUEtHRS9QS0dWL1BLR1IgZXZlbiB3aGVuIHRoZSB2YWx1ZXMgYXJlIHN0aWxsIHRoZSBkZWZhdWx0IChQRS9QVi9QUikiLAorICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0icmVwb3J0X3ZlciIsIGRlZmF1bHQ9RmFsc2UpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1hIiwgIi0tcmVwb3J0LWFsbCIsCisgICAgICAgICAgICBoZWxwID0gIlJlcG9ydCBhbGwgY2hhbmdlcywgbm90IGp1c3QgdGhlIGRlZmF1bHQgc2lnbmlmaWNhbnQgb25lcyIsCisgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJyZXBvcnRfYWxsIiwgZGVmYXVsdD1GYWxzZSkKKworICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhzeXMuYXJndikKKworICAgIGlmIGxlbihhcmdzKSA+IDM6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0ludmFsaWQgYXJndW1lbnQocykgc3BlY2lmaWVkOiAlc1xuXG4nICUgJyAnLmpvaW4oYXJnc1szOl0pKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBMb29zZVZlcnNpb24oZ2l0Ll9fdmVyc2lvbl9fKSA8ICcwLjMuMSc6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlZlcnNpb24gb2YgR2l0UHl0aG9uIGlzIHRvbyBvbGQsIHBsZWFzZSBpbnN0YWxsIEdpdFB5dGhvbiAocHl0aG9uLWdpdCkgMC4zLjEgb3IgbGF0ZXIgaW4gb3JkZXIgdG8gdXNlIHRoaXMgc2NyaXB0XG4iKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9wdGlvbnMuYnVpbGRoaXN0b3J5X2Rpcik6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0J1aWxkaGlzdG9yeSBkaXJlY3RvcnkgIiVzIiBkb2VzIG5vdCBleGlzdFxuXG4nICUgb3B0aW9ucy5idWlsZGhpc3RvcnlfZGlyKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBzY3JpcHRzX3BhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlswXSkpKQorICAgIGxpYl9wYXRoID0gc2NyaXB0c19wYXRoICsgJy9saWInCisgICAgc3lzLnBhdGggPSBzeXMucGF0aCArIFtsaWJfcGF0aF0KKworICAgIGltcG9ydCBzY3JpcHRwYXRoCisKKyAgICAjIFNldCBwYXRoIHRvIE9FIGxpYiBkaXIgc28gd2UgY2FuIGltcG9ydCB0aGUgYnVpbGRoaXN0b3J5X2FuYWx5c2lzIG1vZHVsZQorICAgIHNjcmlwdHBhdGguYWRkX29lX2xpYl9wYXRoKCkKKyAgICAjIFNldCBwYXRoIHRvIGJpdGJha2UgbGliIGRpciBzbyB0aGUgYnVpbGRoaXN0b3J5X2FuYWx5c2lzIG1vZHVsZSBjYW4gbG9hZCBiYi51dGlscworICAgIGJpdGJha2VwYXRoID0gc2NyaXB0cGF0aC5hZGRfYml0YmFrZV9saWJfcGF0aCgpCisgICAgaWYgbm90IGJpdGJha2VwYXRoOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJVbmFibGUgdG8gZmluZCBiaXRiYWtlIGJ5IHNlYXJjaGluZyBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoaXMgc2NyaXB0IG9yIFBBVEhcbiIpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpbXBvcnQgb2UuYnVpbGRoaXN0b3J5X2FuYWx5c2lzCisKKyAgICBmcm9tcmV2ID0gJ2J1aWxkLW1pbnVzLTEnCisgICAgdG9yZXYgPSAnSEVBRCcKKyAgICBpZiBsZW4oYXJncykgPiAxOgorICAgICAgICBpZiBsZW4oYXJncykgPT0gMiBhbmQgJy4uJyBpbiBhcmdzWzFdOgorICAgICAgICAgICAgcmV2cyA9IGFyZ3NbMV0uc3BsaXQoJy4uJykKKyAgICAgICAgICAgIGZyb21yZXYgPSByZXZzWzBdCisgICAgICAgICAgICBpZiByZXZzWzFdOgorICAgICAgICAgICAgICAgIHRvcmV2ID0gcmV2c1sxXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnJvbXJldiA9IGFyZ3NbMV0KKyAgICBpZiBsZW4oYXJncykgPiAyOgorICAgICAgICB0b3JldiA9IGFyZ3NbMl0KKworICAgIGltcG9ydCBnaXRkYgorICAgIHRyeToKKyAgICAgICAgY2hhbmdlcyA9IG9lLmJ1aWxkaGlzdG9yeV9hbmFseXNpcy5wcm9jZXNzX2NoYW5nZXMob3B0aW9ucy5idWlsZGhpc3RvcnlfZGlyLCBmcm9tcmV2LCB0b3Jldiwgb3B0aW9ucy5yZXBvcnRfYWxsLCBvcHRpb25zLnJlcG9ydF92ZXIpCisgICAgZXhjZXB0IGdpdGRiLmV4Yy5CYWRPYmplY3QgYXMgZToKKyAgICAgICAgaWYgbGVuKGFyZ3MpID09IDE6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJVbmFibGUgdG8gZmluZCBwcmV2aW91cyBidWlsZCByZXZpc2lvbiBpbiBidWlsZGhpc3RvcnkgcmVwb3NpdG9yeVxuXG4iKQorICAgICAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnU3BlY2lmaWVkIGdpdCByZXZpc2lvbiAiJXMiIGlzIG5vdCB2YWxpZFxuJyAlIGUuYXJnc1swXSkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGZvciBjaGcgaW4gY2hhbmdlczoKKyAgICAgICAgcHJpbnQoJyVzJyAlIGNoZykKKworICAgIHN5cy5leGl0KDApCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9jbGVhbnVwLXdvcmtkaXIgYi95b2N0by1wb2t5L3NjcmlwdHMvY2xlYW51cC13b3JrZGlyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE3ZjVhM2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY2xlYW51cC13b3JrZGlyCkBAIC0wLDAgKzEsMTk4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBDb3B5cmlnaHQgKGMpIDIwMTIgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgcmUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc2h1dGlsCisKK3BrZ19jdXJfZGlycyA9IHt9CitvYnNvbGV0ZV9kaXJzID0gW10KK3BhcnNlciA9IE5vbmUKKworZGVmIGVycl9xdWl0KG1zZyk6CisgICAgcHJpbnQgbXNnCisgICAgcGFyc2VyLnByaW50X3VzYWdlKCkKKyAgICBzeXMuZXhpdCgxKQorCitkZWYgcGFyc2VfdmVyc2lvbih2ZXJzdHIpOgorICAgIGVsZW1zID0gdmVyc3RyLnNwbGl0KCc6JykKKyAgICBlcG9jaCA9IGVsZW1zWzBdCisgICAgaWYgbGVuKGVwb2NoKSA9PSAwOgorICAgICAgICByZXR1cm4gZWxlbXNbMV0KKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gZXBvY2ggKyAnXycgKyBlbGVtc1sxXQorCitkZWYgcnVuX2NvbW1hbmQoY21kKToKKyAgICBwaXBlID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHNoZWxsPVRydWUpCisgICAgb3V0cHV0ID0gcGlwZS5jb21tdW5pY2F0ZSgpWzBdCisgICAgaWYgcGlwZS5yZXR1cm5jb2RlICE9IDA6CisgICAgICAgIHByaW50ICJFeGVjdXRlIGNvbW1hbmQgJyVzJyBmYWlsZWQuIiAlIGNtZAorICAgICAgICBzeXMuZXhpdCgxKQorICAgIHJldHVybiBvdXRwdXQKKworZGVmIGdldF9jdXJfYXJjaF9kaXJzKHdvcmtkaXIsIGFyY2hfZGlycyk6CisgICAgcGF0dGVybiA9IHdvcmtkaXIgKyAnLyguKj8pLycKKworICAgIGNtZCA9ICJiaXRiYWtlIC1lIHwgZ3JlcCBeU0RLX0FSQ0g9IgorICAgIG91dHB1dCA9IHJ1bl9jb21tYW5kKGNtZCkKKyAgICBzZGtfYXJjaCA9IG91dHB1dC5zcGxpdCgnIicpWzFdCisKKyAgICAjIHNlbGVjdCB0aGVzdCA1IHBhY2thZ2VzIHRvIGdldCB0aGUgZGlycyBvZiBjdXJyZW50IGFyY2gKKyAgICBwa2dzID0gWydoaWNvbG9yLWljb24tdGhlbWUnLCAnYmFzZS1maWxlcycsICdhY2wtbmF0aXZlJywgJ2JpbnV0aWxzLWNyb3Nzc2RrLScgKyBzZGtfYXJjaCwgJ25hdGl2ZXNkay1hdXRvY29uZiddCisKKyAgICBmb3IgcGtnIGluIHBrZ3M6CisgICAgICAgIGNtZCA9ICJiaXRiYWtlIC1lICIgKyBwa2cgKyAiIHwgZ3JlcCBeSU1BR0VfUk9PVEZTPSIKKyAgICAgICAgb3V0cHV0ID0gcnVuX2NvbW1hbmQoY21kKQorICAgICAgICBvdXRwdXQgPSBvdXRwdXQuc3BsaXQoJyInKVsxXQorICAgICAgICBtID0gcmUubWF0Y2gocGF0dGVybiwgb3V0cHV0KQorICAgICAgICBhcmNoX2RpcnMuYXBwZW5kKG0uZ3JvdXAoMSkpCisKK2RlZiBtYWluKCk6CisgICAgZ2xvYmFsIHBhcnNlcgorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigKKyAgICAgICAgdXNhZ2UgPSAiIiIlcHJvZworCislcHJvZyByZW1vdmVzIHRoZSBvYnNvbGV0ZSBwYWNrYWdlcycgYnVpbGQgZGlyZWN0b3JpZXMgaW4gV09SS0RJUi4KK1RoaXMgc2NyaXB0IG11c3QgYmUgcmFuIHVuZGVyIEJVSUxERElSIGFmdGVyIHNvdXJjZSBmaWxlIFwib2UtaW5pdC1idWlsZC1lbnZcIi4KKworQW55IGZpbGUgb3IgZGlyZWN0b3J5IHVuZGVyIFdPUktESVIgd2hpY2ggaXMgbm90IGNyZWF0ZWQgYnkgWW9jdG8KK3dpbGwgYmUgZGVsZXRlZC4gQmUgQ0FVVElPVVMuIiIiKQorCisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHN5cy5hcmd2KQorCisgICAgYnVpbGRkaXIgPSBydW5fY29tbWFuZCgnZWNobyAkQlVJTERESVInKS5zdHJpcCgpCisgICAgaWYgbGVuKGJ1aWxkZGlyKSA9PSAwOgorICAgICAgICBlcnJfcXVpdCgiUGxlYXNlIHNvdXJjZSBmaWxlIFwib2UtaW5pdC1idWlsZC1lbnZcIiBmaXJzdC5cbiIpCisKKyAgICBpZiBvcy5nZXRjd2QoKSAhPSBidWlsZGRpcjoKKyAgICAgICAgZXJyX3F1aXQoIlBsZWFzZSBydW4gJXMgdW5kZXI6ICVzXG4iICUgKG9zLnBhdGguYmFzZW5hbWUoYXJnc1swXSksIGJ1aWxkZGlyKSkKKworICAgIHByaW50ICdVcGRhdGluZyBiaXRiYWtlIGNhY2hlcy4uLicKKyAgICBjbWQgPSAiYml0YmFrZSAtcyIKKyAgICBvdXRwdXQgPSBydW5fY29tbWFuZChjbWQpCisKKyAgICBvdXRwdXQgPSBvdXRwdXQuc3BsaXQoJ1xuJykKKyAgICBpbmRleCA9IDAKKyAgICB3aGlsZSBsZW4ob3V0cHV0W2luZGV4XSkgPiAwOgorICAgICAgICBpbmRleCArPSAxCisgICAgYWxsbGluZXMgPSBvdXRwdXRbaW5kZXgrMTpdCisKKyAgICBmb3IgbGluZSBpbiBhbGxsaW5lczoKKyAgICAgICAgIyBlbXB0eSBhZ2FpbiBtZWFucyBlbmQgb2YgdGhlIHZlcnNpb25zIG91dHB1dAorICAgICAgICBpZiBsZW4obGluZSkgPT0gMDoKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgbGluZSA9IHJlLnN1YignXHMrJywgJyAnLCBsaW5lKQorICAgICAgICBlbGVtcyA9IGxpbmUuc3BsaXQoJyAnKQorICAgICAgICBpZiBsZW4oZWxlbXMpID09IDI6CisgICAgICAgICAgICB2ZXJzaW9uID0gcGFyc2VfdmVyc2lvbihlbGVtc1sxXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZlcnNpb24gPSBwYXJzZV92ZXJzaW9uKGVsZW1zWzJdKQorICAgICAgICBwa2dfY3VyX2RpcnNbZWxlbXNbMF1dID0gdmVyc2lvbgorCisgICAgY21kID0gImJpdGJha2UgLWUiCisgICAgb3V0cHV0ID0gcnVuX2NvbW1hbmQoY21kKQorCisgICAgdG1wZGlyID0gTm9uZQorICAgIGltYWdlX3Jvb3RmcyA9IE5vbmUKKyAgICBvdXRwdXQgPSBvdXRwdXQuc3BsaXQoJ1xuJykKKyAgICBmb3IgbGluZSBpbiBvdXRwdXQ6CisgICAgICAgIGlmIHRtcGRpciBhbmQgaW1hZ2Vfcm9vdGZzOgorICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBpZiBub3QgdG1wZGlyOgorICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCdUTVBESVI9IiguKikiJywgbGluZSkKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgdG1wZGlyID0gbS5ncm91cCgxKQorCisgICAgICAgIGlmIG5vdCBpbWFnZV9yb290ZnM6CisgICAgICAgICAgICBtID0gcmUubWF0Y2goJ0lNQUdFX1JPT1RGUz0iKC4qKSInLCBsaW5lKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBpbWFnZV9yb290ZnMgPSBtLmdyb3VwKDEpCisKKyAgICAjIHdvbid0IGZhaWwganVzdCBpbiBjYXNlCisgICAgaWYgbm90IHRtcGRpciBvciBub3QgaW1hZ2Vfcm9vdGZzOgorICAgICAgICBwcmludCAiQ2FuJ3QgZ2V0IFRNUERJUiBvciBJTUFHRV9ST09URlMuIgorICAgICAgICByZXR1cm4gMQorCisgICAgcGF0dGVybiA9IHRtcGRpciArICcvKC4qPykvKC4qPykvJworICAgIG0gPSByZS5tYXRjaChwYXR0ZXJuLCBpbWFnZV9yb290ZnMpCisgICAgaWYgbm90IG06CisgICAgICAgIHByaW50ICJDYW4ndCBnZXQgV09SS0RJUi4iCisgICAgICAgIHJldHVybiAxCisKKyAgICB3b3JrZGlyID0gb3MucGF0aC5qb2luKHRtcGRpciwgbS5ncm91cCgxKSkKKworICAgICMgd2Ugb25seSBkZWFsIHRoZSBkaXJzIG9mIGN1cnJlbnQgYXJjaCwgdG90YWwgbnVtYmVycyBvZiBkaXJzIGFyZSA2CisgICAgY3VyX2FyY2hfZGlycyA9IFttLmdyb3VwKDIpXQorICAgIGdldF9jdXJfYXJjaF9kaXJzKHdvcmtkaXIsIGN1cl9hcmNoX2RpcnMpCisKKyAgICBmb3Igd29ya3Jvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsod29ya2Rpcik6CisgICAgICAgICMgRm9yIHRoZSBmaWxlcywgdGhleSBzaG91bGQgTk9UIGV4aXN0IGluIFdPUktESVIuIFJlbW92ZSB0aGVtLgorICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgIG9ic29sZXRlX2RpcnMuYXBwZW5kKG9zLnBhdGguam9pbih3b3Jrcm9vdCwgZikpCisKKyAgICAgICAgZm9yIGQgaW4gZGlyczoKKyAgICAgICAgICAgIGlmIGQgbm90IGluIGN1cl9hcmNoX2RpcnM6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZm9yIHBrZ3Jvb3QsIHBrZ2RpcnMsIGZpbGVuYW1lcyBpbiBvcy53YWxrKG9zLnBhdGguam9pbih3b3Jrcm9vdCwgZCkpOgorICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgb2Jzb2xldGVfZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHBrZ3Jvb3QsIGYpKQorCisgICAgICAgICAgICAgICAgZm9yIHBrZ2RpciBpbiBzb3J0ZWQocGtnZGlycyk6CisgICAgICAgICAgICAgICAgICAgIGlmIHBrZ2RpciBub3QgaW4gcGtnX2N1cl9kaXJzOgorICAgICAgICAgICAgICAgICAgICAgICAgb2Jzb2xldGVfZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHBrZ3Jvb3QsIHBrZ2RpcikpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdmVycm9vdCwgdmVyZGlycywgdmVyZmlsZXMgaW4gb3Mud2Fsayhvcy5wYXRoLmpvaW4ocGtncm9vdCwgcGtnZGlyKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gdmVyZmlsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic29sZXRlX2RpcnMuYXBwZW5kKG9zLnBhdGguam9pbihwa2dyb290LCBmKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdiBpbiBzb3J0ZWQodmVyZGlycyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdiBub3QgaW4gcGtnX2N1cl9kaXJzW3BrZ2Rpcl06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic29sZXRlX2RpcnMuYXBwZW5kKG9zLnBhdGguam9pbihwa2dyb290LCBwa2dkaXIsIHYpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICAjIGp1c3QgcHJvY2VzcyB0aGUgdG9wIGRpciBvZiBldmVyeSBwYWNrYWdlIHVuZGVyIHRtcC93b3JrLyovLAorICAgICAgICAgICAgICAgICMgdGhlbiBqdW1wIG91dCBvZiB0aGUgYWJvdmUgb3Mud2FsaygpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAjIGl0IGlzIGNvbnZlbmllbnQgdG8gdXNlIG9zLndhbGsoKSB0byBnZXQgZGlycyBhbmQgZmlsZXMgYXQgc2FtZSB0aW1lCisgICAgICAgICMgYm90aCBvZiB0aGVtIGhhdmUgYmVlbiBkZWFsZWQgaW4gdGhlIGxvb3AsIHNvIGp1bXAgb3V0CisgICAgICAgIGJyZWFrCisKKyAgICBmb3IgZCBpbiBvYnNvbGV0ZV9kaXJzOgorICAgICAgICBwcmludCAiRGVsZXRpbmcgJXMiICUgZAorICAgICAgICBzaHV0aWwucm10cmVlKGQsIFRydWUpCisKKyAgICBpZiBsZW4ob2Jzb2xldGVfZGlycyk6CisgICAgICAgIHByaW50ICdcblRvdGFsICVkIGl0ZW1zLicgJSBsZW4ob2Jzb2xldGVfZGlycykKKyAgICBlbHNlOgorICAgICAgICBwcmludCAnXG5ObyBvYnNvbGV0ZSBkaXJlY3RvcnkgZm91bmQgdW5kZXIgJXMuJyAlIHdvcmtkaXIKKworICAgIHJldHVybiAwCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdHJ5OgorICAgICAgICByZXQgPSBtYWluKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICByZXQgPSAyCisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygzKQorICAgIHN5cy5leGl0KHJldCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9jb21iby1sYXllciBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb21iby1sYXllcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NDM1YTE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbWJvLWxheWVyCkBAIC0wLDAgKzEsOTQ5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAyMDExIEludGVsIENvcnBvcmF0aW9uCisjIEF1dGhvcmVkLWJ5OiAgWXUgS2UgPGtlLnl1QGludGVsLmNvbT4KKyMgICAgICAgICAgICAgICBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGludGVsLmNvbT4KKyMgICAgICAgICAgICAgICBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGZubWF0Y2gKK2ltcG9ydCBvcywgc3lzCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgQ29uZmlnUGFyc2VyCitpbXBvcnQgcmUKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0Citmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKworX192ZXJzaW9uX18gPSAiMC4yLjEiCisKK2RlZiBsb2dnZXJfY3JlYXRlKCk6CisgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIiIpCisgICAgbG9nZ2VyaGFuZGxlciA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCisgICAgbG9nZ2VyaGFuZGxlci5zZXRGb3JtYXR0ZXIobG9nZ2luZy5Gb3JtYXR0ZXIoIlslKGFzY3RpbWUpc10gJShtZXNzYWdlKXMiLCIlSDolTTolUyIpKQorICAgIGxvZ2dlci5hZGRIYW5kbGVyKGxvZ2dlcmhhbmRsZXIpCisgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICByZXR1cm4gbG9nZ2VyCisKK2xvZ2dlciA9IGxvZ2dlcl9jcmVhdGUoKQorCitkZWYgZ2V0X2N1cnJlbnRfYnJhbmNoKHJlcG9kaXI9Tm9uZSk6CisgICAgdHJ5OgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHJlcG9kaXIgaWYgcmVwb2RpciBlbHNlICcnLCAiLmdpdCIpKToKKyAgICAgICAgICAgICMgUmVwbyBub3QgY3JlYXRlZCB5ZXQgKGkuZS4gZHVyaW5nIGluaXQpIHNvIGp1c3QgYXNzdW1lIG1hc3RlcgorICAgICAgICAgICAgcmV0dXJuICJtYXN0ZXIiCisgICAgICAgIGJyYW5jaG5hbWUgPSBydW5jbWQoImdpdCBzeW1ib2xpYy1yZWYgSEVBRCAyPi9kZXYvbnVsbCIsIHJlcG9kaXIpLnN0cmlwKCkKKyAgICAgICAgaWYgYnJhbmNobmFtZS5zdGFydHN3aXRoKCJyZWZzL2hlYWRzLyIpOgorICAgICAgICAgICAgYnJhbmNobmFtZSA9IGJyYW5jaG5hbWVbMTE6XQorICAgICAgICByZXR1cm4gYnJhbmNobmFtZQorICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgcmV0dXJuICIiCisKK2NsYXNzIENvbmZpZ3VyYXRpb24ob2JqZWN0KToKKyAgICAiIiIKKyAgICBNYW5hZ2VzIHRoZSBjb25maWd1cmF0aW9uCisKKyAgICBGb3IgYW4gZXhhbXBsZSBjb25maWcgZmlsZSwgc2VlIGNvbWJvLWxheWVyLmNvbmYuZXhhbXBsZQorCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICBmb3Iga2V5LCB2YWwgaW4gb3B0aW9ucy5fX2RpY3RfXy5pdGVtcygpOgorICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBrZXksIHZhbCkKKworICAgICAgICBkZWYgcmVhZHNlY3Rpb24ocGFyc2VyLCBzZWN0aW9uLCByZXBvKToKKyAgICAgICAgICAgIGZvciAobmFtZSwgdmFsdWUpIGluIHBhcnNlci5pdGVtcyhzZWN0aW9uKToKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZS5zdGFydHN3aXRoKCJAIik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVwb3NbcmVwb11bbmFtZV0gPSBldmFsKHZhbHVlLnN0cmlwKCJAIikpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBBcHBseSBzcGVjaWFsIHR5cGUgdHJhbnNmb3JtYXRpb25zIGZvciBzb21lIHByb3BlcnRpZXMuCisgICAgICAgICAgICAgICAgICAgICMgVHlwZSBtYXRjaGVzIHRoZSBSYXdDb25maWdQYXJzZXIuZ2V0KigpIG1ldGhvZHMuCisgICAgICAgICAgICAgICAgICAgIHR5cGVzID0geydzaWdub2ZmJzogJ2Jvb2xlYW4nfQorICAgICAgICAgICAgICAgICAgICBpZiBuYW1lIGluIHR5cGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRhdHRyKHBhcnNlciwgJ2dldCcgKyB0eXBlc1tuYW1lXSkoc2VjdGlvbiwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXBvc1tyZXBvXVtuYW1lXSA9IHZhbHVlCisKKyAgICAgICAgZGVmIHJlYWRnbG9iYWxzZWN0aW9uKHBhcnNlciwgc2VjdGlvbik6CisgICAgICAgICAgICBmb3IgKG5hbWUsIHZhbHVlKSBpbiBwYXJzZXIuaXRlbXMoc2VjdGlvbik6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAiY29tbWl0X21zZyI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29tbWl0X21zZ190ZW1wbGF0ZSA9IHZhbHVlCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJMb2FkaW5nIGNvbmZpZyBmaWxlICVzIiAlIHNlbGYuY29uZmZpbGUpCisgICAgICAgIHNlbGYucGFyc2VyID0gQ29uZmlnUGFyc2VyLkNvbmZpZ1BhcnNlcigpCisgICAgICAgIHdpdGggb3BlbihzZWxmLmNvbmZmaWxlKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5wYXJzZXIucmVhZGZwKGYpCisKKyAgICAgICAgIyBpbml0aWFsaXplIGRlZmF1bHQgdmFsdWVzCisgICAgICAgIHNlbGYuY29tbWl0X21zZ190ZW1wbGF0ZSA9ICJBdXRvbWF0aWMgY29tbWl0IHRvIHVwZGF0ZSBsYXN0X3JldmlzaW9uIgorCisgICAgICAgIHNlbGYucmVwb3MgPSB7fQorICAgICAgICBmb3IgcmVwbyBpbiBzZWxmLnBhcnNlci5zZWN0aW9ucygpOgorICAgICAgICAgICAgaWYgcmVwbyA9PSAiY29tYm8tbGF5ZXItc2V0dGluZ3MiOgorICAgICAgICAgICAgICAgICMgc3BlY2lhbCBoYW5kbGluZyBmb3IgZ2xvYmFsIHNldHRpbmdzCisgICAgICAgICAgICAgICAgcmVhZGdsb2JhbHNlY3Rpb24oc2VsZi5wYXJzZXIsIHJlcG8pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucmVwb3NbcmVwb10gPSB7fQorICAgICAgICAgICAgICAgIHJlYWRzZWN0aW9uKHNlbGYucGFyc2VyLCByZXBvLCByZXBvKQorCisgICAgICAgICMgTG9hZCBsb2NhbCBjb25maWd1cmF0aW9uLCBpZiBhdmFpbGFibGUKKyAgICAgICAgc2VsZi5sb2NhbGNvbmZmaWxlID0gTm9uZQorICAgICAgICBzZWxmLmxvY2FscGFyc2VyID0gTm9uZQorICAgICAgICBzZWxmLmNvbWJvYnJhbmNoID0gTm9uZQorICAgICAgICBpZiBzZWxmLmNvbmZmaWxlLmVuZHN3aXRoKCcuY29uZicpOgorICAgICAgICAgICAgbGNmaWxlID0gc2VsZi5jb25mZmlsZS5yZXBsYWNlKCcuY29uZicsICctbG9jYWwuY29uZicpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsY2ZpbGUpOgorICAgICAgICAgICAgICAgICMgUmVhZCBjb21ibyBsYXllciBicmFuY2gKKyAgICAgICAgICAgICAgICBzZWxmLmNvbWJvYnJhbmNoID0gZ2V0X2N1cnJlbnRfYnJhbmNoKCkKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIkNvbWJvIGxheWVyIGJyYW5jaCBpcyAlcyIgJSBzZWxmLmNvbWJvYnJhbmNoKQorCisgICAgICAgICAgICAgICAgc2VsZi5sb2NhbGNvbmZmaWxlID0gbGNmaWxlCisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJMb2FkaW5nIGxvY2FsIGNvbmZpZyBmaWxlICVzIiAlIHNlbGYubG9jYWxjb25mZmlsZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxvY2FscGFyc2VyID0gQ29uZmlnUGFyc2VyLkNvbmZpZ1BhcnNlcigpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYubG9jYWxjb25mZmlsZSkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2NhbHBhcnNlci5yZWFkZnAoZikKKworICAgICAgICAgICAgICAgIGZvciBzZWN0aW9uIGluIHNlbGYubG9jYWxwYXJzZXIuc2VjdGlvbnMoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgJ3wnIGluIHNlY3Rpb246CisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9udmFscyA9IHNlY3Rpb24uc3BsaXQoJ3wnKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVwbyA9IHNlY3Rpb252YWxzWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWN0aW9udmFsc1sxXSAhPSBzZWxmLmNvbWJvYnJhbmNoOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvID0gc2VjdGlvbgorICAgICAgICAgICAgICAgICAgICBpZiByZXBvIGluIHNlbGYucmVwb3M6CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkc2VjdGlvbihzZWxmLmxvY2FscGFyc2VyLCBzZWN0aW9uLCByZXBvKQorCisgICAgZGVmIHVwZGF0ZShzZWxmLCByZXBvLCBvcHRpb24sIHZhbHVlLCBpbml0bW9kZT1GYWxzZSk6CisgICAgICAgICMgSWYgdGhlIG1haW4gY29uZmlnIGhhcyB0aGUgb3B0aW9uIGFscmVhZHksIHRoYXQgaXMgd2hhdCB3ZQorICAgICAgICAjIGFyZSBleHBlY3RlZCB0byBtb2RpZnkuCisgICAgICAgIGlmIHNlbGYubG9jYWxwYXJzZXIgYW5kIG5vdCBzZWxmLnBhcnNlci5oYXNfb3B0aW9uKHJlcG8sIG9wdGlvbik6CisgICAgICAgICAgICBwYXJzZXIgPSBzZWxmLmxvY2FscGFyc2VyCisgICAgICAgICAgICBzZWN0aW9uID0gIiVzfCVzIiAlIChyZXBvLCBzZWxmLmNvbWJvYnJhbmNoKQorICAgICAgICAgICAgY29uZmZpbGUgPSBzZWxmLmxvY2FsY29uZmZpbGUKKyAgICAgICAgICAgIGlmIGluaXRtb2RlIGFuZCBub3QgcGFyc2VyLmhhc19zZWN0aW9uKHNlY3Rpb24pOgorICAgICAgICAgICAgICAgIHBhcnNlci5hZGRfc2VjdGlvbihzZWN0aW9uKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFyc2VyID0gc2VsZi5wYXJzZXIKKyAgICAgICAgICAgIHNlY3Rpb24gPSByZXBvCisgICAgICAgICAgICBjb25mZmlsZSA9IHNlbGYuY29uZmZpbGUKKyAgICAgICAgcGFyc2VyLnNldChzZWN0aW9uLCBvcHRpb24sIHZhbHVlKQorICAgICAgICB3aXRoIG9wZW4oY29uZmZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgIHBhcnNlci53cml0ZShmKQorICAgICAgICBzZWxmLnJlcG9zW3JlcG9dW29wdGlvbl0gPSB2YWx1ZQorCisgICAgZGVmIHNhbml0eV9jaGVjayhzZWxmLCBpbml0bW9kZT1GYWxzZSk6CisgICAgICAgIHJlcXVpcmVkX29wdGlvbnM9WyJzcmNfdXJpIiwgImxvY2FsX3JlcG9fZGlyIiwgImRlc3RfZGlyIiwgImxhc3RfcmV2aXNpb24iXQorICAgICAgICBpZiBpbml0bW9kZToKKyAgICAgICAgICAgIHJlcXVpcmVkX29wdGlvbnMucmVtb3ZlKCJsYXN0X3JldmlzaW9uIikKKyAgICAgICAgbXNnID0gIiIKKyAgICAgICAgbWlzc2luZ19vcHRpb25zID0gW10KKyAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5yZXBvczoKKyAgICAgICAgICAgIGZvciBvcHRpb24gaW4gcmVxdWlyZWRfb3B0aW9uczoKKyAgICAgICAgICAgICAgICBpZiBvcHRpb24gbm90IGluIHNlbGYucmVwb3NbbmFtZV06CisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICIlc1xuT3B0aW9uICVzIGlzIG5vdCBkZWZpbmVkIGZvciBjb21wb25lbnQgJXMiICUobXNnLCBvcHRpb24sIG5hbWUpCisgICAgICAgICAgICAgICAgICAgIG1pc3Npbmdfb3B0aW9ucy5hcHBlbmQob3B0aW9uKQorICAgICAgICAgICAgIyBTYW5pdGl6ZSBkZXN0X2RpciBzbyB0aGF0IHdlIGRvIG5vdCBoYXZlIHRvIGRlYWwgd2l0aCBlZGdlIGNhc2VzCisgICAgICAgICAgICAjICh1bnNldCwgZW1wdHkgc3RyaW5nLCBkb3VibGUgc2xhc2hlcykgaW4gdGhlIHJlc3Qgb2YgdGhlIGNvZGUuCisgICAgICAgICAgICAjIEl0IG5vdCBiZWluZyBzZXQgd2lsbCBzdGlsbCBiZSBmbGFnZ2VkIGFzIGVycm9yIGJlY2F1c2UgaXQgaXMKKyAgICAgICAgICAgICMgbGlzdGVkIGFzIHJlcXVpcmVkIG9wdGlvbiBhYm92ZTsgdGhhdCBjb3VsZCBiZSBjaGFuZ2VkIG5vdy4KKyAgICAgICAgICAgIGRlc3RfZGlyID0gb3MucGF0aC5ub3JtcGF0aChzZWxmLnJlcG9zW25hbWVdLmdldCgiZGVzdF9kaXIiLCAiLiIpKQorICAgICAgICAgICAgc2VsZi5yZXBvc1tuYW1lXVsiZGVzdF9kaXIiXSA9ICIuIiBpZiBub3QgZGVzdF9kaXIgZWxzZSBkZXN0X2RpcgorICAgICAgICBpZiBtc2cgIT0gIiI6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoImNvbmZpZ3VyYXRpb24gZmlsZSAlcyBoYXMgdGhlIGZvbGxvd2luZyBlcnJvcjogJXMiICUgKHNlbGYuY29uZmZpbGUsbXNnKSkKKyAgICAgICAgICAgIGlmIHNlbGYubG9jYWxjb25mZmlsZSBhbmQgJ2xhc3RfcmV2aXNpb24nIGluIG1pc3Npbmdfb3B0aW9uczoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoImxvY2FsIGNvbmZpZ3VyYXRpb24gZmlsZSAlcyBtYXkgYmUgbWlzc2luZyBjb25maWd1cmF0aW9uIGZvciBjb21ibyBicmFuY2ggJXMiICUgKHNlbGYubG9jYWxjb25mZmlsZSwgc2VsZi5jb21ib2JyYW5jaCkpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgICMgZmlsdGVyZGlmZiBpcyByZXF1aXJlZCBieSBhY3Rpb25fc3BsaXRwYXRjaCwgc28gY2hlY2sgaXRzIGF2YWlsYWJpbGl0eQorICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoIndoaWNoIGZpbHRlcmRpZmYgPiAvZGV2L251bGwgMj4mMSIsIHNoZWxsPVRydWUpICE9IDA6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkVSUk9SOiBwYXRjaHV0aWxzIHBhY2thZ2UgaXMgbWlzc2luZywgcGxlYXNlIGluc3RhbGwgaXQgKGUuZy4gIyBhcHQtZ2V0IGluc3RhbGwgcGF0Y2h1dGlscykiKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworZGVmIHJ1bmNtZChjbWQsZGVzdGRpcj1Ob25lLHByaW50ZXJyPVRydWUsb3V0PU5vbmUpOgorICAgICIiIgorICAgICAgICBleGVjdXRlIGNvbW1hbmQsIHJhaXNlIENhbGxlZFByb2Nlc3NFcnJvciBpZiBmYWlsCisgICAgICAgIHJldHVybiBvdXRwdXQgaWYgc3VjY2VlZAorICAgICIiIgorICAgIGxvZ2dlci5kZWJ1ZygicnVuIGNtZCAnJXMnIGluICVzIiAlIChjbWQsIG9zLmdldGN3ZCgpIGlmIGRlc3RkaXIgaXMgTm9uZSBlbHNlIGRlc3RkaXIpKQorICAgIGlmIG5vdCBvdXQ6CisgICAgICAgIG91dCA9IG9zLnRtcGZpbGUoKQorICAgICAgICBlcnIgPSBvdXQKKyAgICBlbHNlOgorICAgICAgICBlcnIgPSBvcy50bXBmaWxlKCkKKyAgICB0cnk6CisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChjbWQsIHN0ZG91dD1vdXQsIHN0ZGVycj1lcnIsIGN3ZD1kZXN0ZGlyLCBzaGVsbD1pc2luc3RhbmNlKGNtZCwgc3RyKSkKKyAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IsZToKKyAgICAgICAgZXJyLnNlZWsoMCkKKyAgICAgICAgaWYgcHJpbnRlcnI6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIiVzIiAlIGVyci5yZWFkKCkpCisgICAgICAgIHJhaXNlIGUKKworICAgIGVyci5zZWVrKDApCisgICAgb3V0cHV0ID0gZXJyLnJlYWQoKQorICAgIGxvZ2dlci5kZWJ1Zygib3V0cHV0OiAlcyIgJSBvdXRwdXQgKQorICAgIHJldHVybiBvdXRwdXQKKworZGVmIGFjdGlvbl9pbml0KGNvbmYsIGFyZ3MpOgorICAgICIiIgorICAgICAgICBDbG9uZSBjb21wb25lbnQgcmVwb3NpdG9yaWVzCisgICAgICAgIENoZWNrIGdpdCBpcyBpbml0aWFsaXNlZDsgaWYgbm90LCBjb3B5IGluaXRpYWwgZGF0YSBmcm9tIGNvbXBvbmVudCByZXBvcworICAgICIiIgorICAgIGZvciBuYW1lIGluIGNvbmYucmVwb3M6CisgICAgICAgIGxkaXIgPSBjb25mLnJlcG9zW25hbWVdWydsb2NhbF9yZXBvX2RpciddCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhsZGlyKToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJjbG9uaW5nICVzIHRvICVzIiAlKGNvbmYucmVwb3NbbmFtZV1bJ3NyY191cmknXSwgbGRpcikpCisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoImdpdCBjbG9uZSAlcyAlcyIgJSAoY29uZi5yZXBvc1tuYW1lXVsnc3JjX3VyaSddLCBsZGlyKSwgc2hlbGw9VHJ1ZSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoIi5naXQiKToKKyAgICAgICAgcnVuY21kKCJnaXQgaW5pdCIpCisgICAgICAgIGlmIGNvbmYuaGlzdG9yeToKKyAgICAgICAgICAgICMgTmVlZCBhIGNvbW1vbiByZWYgZm9yIGFsbCB0cmVlcy4KKyAgICAgICAgICAgIHJ1bmNtZCgnZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCBlbXB0eSBjb21taXQiIC0tYWxsb3ctZW1wdHknKQorICAgICAgICAgICAgc3RhcnRyZXYgPSBydW5jbWQoJ2dpdCByZXYtcGFyc2UgbWFzdGVyJykuc3RyaXAoKQorCisgICAgICAgIGZvciBuYW1lIGluIGNvbmYucmVwb3M6CisgICAgICAgICAgICByZXBvID0gY29uZi5yZXBvc1tuYW1lXQorICAgICAgICAgICAgbGRpciA9IHJlcG9bJ2xvY2FsX3JlcG9fZGlyJ10KKyAgICAgICAgICAgIGJyYW5jaCA9IHJlcG8uZ2V0KCdicmFuY2gnLCAibWFzdGVyIikKKyAgICAgICAgICAgIGxhc3RyZXYgPSByZXBvLmdldCgnbGFzdF9yZXZpc2lvbicsIE5vbmUpCisgICAgICAgICAgICBpZiBsYXN0cmV2IGFuZCBsYXN0cmV2ICE9ICJIRUFEIjoKKyAgICAgICAgICAgICAgICBpbml0aWFscmV2ID0gbGFzdHJldgorICAgICAgICAgICAgICAgIGlmIGJyYW5jaDoKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGNoZWNrX3Jldl9icmFuY2gobmFtZSwgbGRpciwgbGFzdHJldiwgYnJhbmNoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkNvcHlpbmcgZGF0YSBmcm9tICVzIGF0IHNwZWNpZmllZCByZXZpc2lvbiAlcy4uLiIgJSAobmFtZSwgbGFzdHJldikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxhc3RyZXYgPSBOb25lCisgICAgICAgICAgICAgICAgaW5pdGlhbHJldiA9IGJyYW5jaAorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDb3B5aW5nIGRhdGEgZnJvbSAlcy4uLiIgJSBuYW1lKQorICAgICAgICAgICAgIyBTYW5pdHkgY2hlY2sgaW5pdGlhbHJldiBhbmQgdHVybiBpdCBpbnRvIGhhc2ggKHJlcXVpcmVkIGZvciBjb3B5aW5nIGhpc3RvcnksCisgICAgICAgICAgICAjIGJlY2F1c2UgcmVzb2x2aW5nIGEgbmFtZSByZWYgb25seSB3b3JrcyBpbiB0aGUgY29tcG9uZW50IHJlcG8pLgorICAgICAgICAgICAgcmV2ID0gcnVuY21kKCdnaXQgcmV2LXBhcnNlICVzJyAlIGluaXRpYWxyZXYsIGxkaXIpLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIHJldiAhPSBpbml0aWFscmV2OgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmVmcyA9IHJ1bmNtZCgnZ2l0IHNob3ctcmVmIC1zICVzJyAlIGluaXRpYWxyZXYsIGxkaXIpLnNwbGl0KCdcbicpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihzZXQocmVmcykpID4gMToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgSGFwcGVucyBmb3IgZXhhbXBsZSB3aGVuIGNvbmZpZ3VyZWQgdG8gdHJhY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICMgIm1hc3RlciIgYW5kIHRoZXJlIGlzIGEgcmVmcy9oZWFkcy9tYXN0ZXIuIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIyB0cmFkaXRpb25hbCBiZWhhdmlvciBmcm9tICJnaXQgYXJjaGl2ZSIgKHByZXNlcnZlZAorICAgICAgICAgICAgICAgICAgICAgICAgIyBoZXJlKSBpdCB0byBjaG9vc2UgdGhlIGZpcnN0IG9uZS4gVGhpcyBtaWdodCBub3QgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgaW50ZW5kZWQsIHNvIGF0IGxlYXN0IHdhcm4gYWJvdXQgaXQuCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiJXM6IGluaXRpYWwgcmV2aXNpb24gJyVzJyBub3QgdW5pcXVlLCBwaWNraW5nIHJlc3VsdCBvZiByZXYtcGFyc2UgPSAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUsIGluaXRpYWxyZXYsIHJlZnNbMF0pKQorICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbHJldiA9IHJldgorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgIyBzaG93LXJlZiBmYWlscyBmb3IgaGFzaGVzLiBTa2lwIHRoZSBzYW5pdHkgd2FybmluZyBpbiB0aGF0IGNhc2UuCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBpbml0aWFscmV2ID0gcmV2CisgICAgICAgICAgICBkZXN0X2RpciA9IHJlcG9bJ2Rlc3RfZGlyJ10KKyAgICAgICAgICAgIGlmIGRlc3RfZGlyICE9ICIuIjoKKyAgICAgICAgICAgICAgICBleHRyYWN0X2RpciA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgZGVzdF9kaXIpCisgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGV4dHJhY3RfZGlyKToKKyAgICAgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMoZXh0cmFjdF9kaXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGV4dHJhY3RfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgICAgIGZpbGVfZmlsdGVyID0gcmVwby5nZXQoJ2ZpbGVfZmlsdGVyJywgIiIpCisgICAgICAgICAgICBleGNsdWRlX3BhdHRlcm5zID0gcmVwby5nZXQoJ2ZpbGVfZXhjbHVkZScsICcnKS5zcGxpdCgpCisgICAgICAgICAgICBkZWYgY29weV9zZWxlY3RlZF9maWxlcyhpbml0aWFscmV2LCBleHRyYWN0X2RpciwgZmlsZV9maWx0ZXIsIGV4Y2x1ZGVfcGF0dGVybnMsIGxkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJkaXI9IiIpOgorICAgICAgICAgICAgICAgICMgV2hlbiB3b3JraW5nIGluc2lkZSBhIGZpbHRlcmVkIGJyYW5jaCB3aGljaCBoYWQgdGhlCisgICAgICAgICAgICAgICAgIyBmaWxlcyBhbHJlYWR5IG1vdmVkLCB3ZSBuZWVkIHRvIHByZXBlbmQgdGhlCisgICAgICAgICAgICAgICAgIyBzdWJkaXJlY3RvcnkgdG8gYWxsIGZpbHRlcnMsIG90aGVyd2lzZSB0aGV5IHdvdWxkCisgICAgICAgICAgICAgICAgIyBub3QgbWF0Y2guCisgICAgICAgICAgICAgICAgaWYgc3ViZGlyID09ICcuJzoKKyAgICAgICAgICAgICAgICAgICAgc3ViZGlyID0gJycKKyAgICAgICAgICAgICAgICBlbGlmIHN1YmRpcjoKKyAgICAgICAgICAgICAgICAgICAgc3ViZGlyID0gb3MucGF0aC5ub3JtcGF0aChzdWJkaXIpCisgICAgICAgICAgICAgICAgICAgIGZpbGVfZmlsdGVyID0gJyAnLmpvaW4oW3N1YmRpciArICcvJyArIHggZm9yIHggaW4gZmlsZV9maWx0ZXIuc3BsaXQoKV0pCisgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVfcGF0dGVybnMgPSBbc3ViZGlyICsgJy8nICsgeCBmb3IgeCBpbiBleGNsdWRlX3BhdHRlcm5zXQorICAgICAgICAgICAgICAgICMgVG8gaGFuZGxlIGJvdGggY2FzZXMsIHdlIGNkIGludG8gdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICMgZGlyZWN0b3J5IGFuZCBvcHRpb25hbGx5IHRlbGwgdGFyIHRvIHN0cmlwIHRoZSBwYXRoCisgICAgICAgICAgICAgICAgIyBwcmVmaXggd2hlbiB0aGUgZmlsZXMgd2VyZSBhbHJlYWR5IG1vdmVkLgorICAgICAgICAgICAgICAgIHN1YmRpcl9jb21wb25lbnRzID0gbGVuKHN1YmRpci5zcGxpdChvcy5wYXRoLnNlcCkpIGlmIHN1YmRpciBlbHNlIDAKKyAgICAgICAgICAgICAgICBzdHJpcD0oJy0tc3RyaXAtY29tcG9uZW50cz0lZCcgJSBzdWJkaXJfY29tcG9uZW50cykgaWYgc3ViZGlyIGVsc2UgJycKKyAgICAgICAgICAgICAgICAjIFRPRE86IGZpbGVfZmlsdGVyIHdpbGQgY2FyZHMgZG8gbm90IHdvcmsgKGFuZCBoYXZlbid0IHdvcmtlZCBiZWZvcmUgZWl0aGVyKSwgYmVjYXVzZQorICAgICAgICAgICAgICAgICMgYSkgR05VIHRhciByZXF1aXJlcyBhIC0td2lsZGNhcmRzIHBhcmFtZXRlciBiZWZvcmUgdHVybmluZyBvbiB3aWxkIGNhcmQgbWF0Y2hpbmcuCisgICAgICAgICAgICAgICAgIyBiKSBUaGUgc2VtYW50aWMgaXMgbm90IGFzIGludGVuZGVuZCAoc3JjLyouYyBhbHNvIG1hdGNoZXMgc3JjL2Zvby9iYXIuYywKKyAgICAgICAgICAgICAgICAjICAgIGluIGNvbnRyYXN0IHRvIHRoZSBvdGhlciB1c2Ugb2YgZmlsZV9maWx0ZXIgYXMgcGFyYW1ldGVyIG9mICJnaXQgYXJjaGl2ZSIKKyAgICAgICAgICAgICAgICAjICAgIHdoZXJlIGl0IG9ubHkgbWF0Y2hlcyAuYyBmaWxlcyBkaXJlY3RseSBpbiBzcmMpLgorICAgICAgICAgICAgICAgIGZpbGVzID0gcnVuY21kKCJnaXQgYXJjaGl2ZSAlcyAlcyB8IHRhciAteCAtdiAlcyAtQyAlcyAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbml0aWFscmV2LCBzdWJkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwLCBleHRyYWN0X2RpciwgZmlsZV9maWx0ZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxkaXIpCisgICAgICAgICAgICAgICAgaWYgZXhjbHVkZV9wYXR0ZXJuczoKKyAgICAgICAgICAgICAgICAgICAgIyBJbXBsZW1lbnQgZmlsZSByZW1vdmFsIGJ5IGxldHRpbmcgdGFyIGNyZWF0ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyBmaWxlIGFuZCB0aGVuIGRlbGV0aW5nIGl0IGluIHRoZSBmaWxlIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICAjIGFnYWluLiBVc2VzIHRoZSBsaXN0IG9mIGZpbGVzIGNyZWF0ZWQgYnkgdGFyIChlYXNpZXIKKyAgICAgICAgICAgICAgICAgICAgIyB0aGFuIHdhbGtpbmcgdGhlIHRyZWUpLgorICAgICAgICAgICAgICAgICAgICBmb3IgZmlsZSBpbiBmaWxlcy5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwYXR0ZXJuIGluIGV4Y2x1ZGVfcGF0dGVybnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoKGZpbGUsIHBhdHRlcm4pOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsob3MucGF0aC5qb2luKCooW2V4dHJhY3RfZGlyXSArIFsnLi4nXSAqIHN1YmRpcl9jb21wb25lbnRzICsgW2ZpbGVdKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlmIG5vdCBjb25mLmhpc3Rvcnk6CisgICAgICAgICAgICAgICAgY29weV9zZWxlY3RlZF9maWxlcyhpbml0aWFscmV2LCBleHRyYWN0X2RpciwgZmlsZV9maWx0ZXIsIGV4Y2x1ZGVfcGF0dGVybnMsIGxkaXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgRmlyc3QgZmV0Y2ggcmVtb3RlIGhpc3RvcnkgaW50byBsb2NhbCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICMgV2UgbmVlZCBhIHJlZiBmb3IgdGhhdCwgc28gZW5zdXJlIHRoYXQgdGhlcmUgaXMgb25lLgorICAgICAgICAgICAgICAgIHJlZm5hbWUgPSAiY29tYm8tbGF5ZXItaW5pdC0lcyIgJSBuYW1lCisgICAgICAgICAgICAgICAgcnVuY21kKCJnaXQgYnJhbmNoIC1mICVzICVzIiAlIChyZWZuYW1lLCBpbml0aWFscmV2KSwgbGRpcikKKyAgICAgICAgICAgICAgICBydW5jbWQoImdpdCBmZXRjaCAlcyAlcyIgJSAobGRpciwgcmVmbmFtZSkpCisgICAgICAgICAgICAgICAgcnVuY21kKCJnaXQgYnJhbmNoIC1EICVzIiAlIHJlZm5hbWUsIGxkaXIpCisgICAgICAgICAgICAgICAgIyBNYWtlIHRoYXQgdGhlIGhlYWQgcmV2aXNpb24uCisgICAgICAgICAgICAgICAgcnVuY21kKCJnaXQgY2hlY2tvdXQgLWIgJXMgJXMiICUgKG5hbWUsIGluaXRpYWxyZXYpKQorICAgICAgICAgICAgICAgICMgT3B0aW9uYWw6IGN1dCB0aGUgaGlzdG9yeSBieSByZXBsYWNpbmcgdGhlIGdpdmVuCisgICAgICAgICAgICAgICAgIyBzdGFydCBwb2ludChzKSB3aXRoIGNvbW1pdHMgcHJvdmlkaW5nIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgIyBjb250ZW50IChha2EgdHJlZSksIGJ1dCB3aXRoIGNvbW1pdCBpbmZvcm1hdGlvbiB0aGF0CisgICAgICAgICAgICAgICAgIyBtYWtlcyBpdCBjbGVhciB0aGF0IHRoaXMgaXMgYW4gYXJ0aWZpY2FsbHkgY3JlYXRlZAorICAgICAgICAgICAgICAgICMgY29tbWl0IGFuZCBub3RoaW5nIHRoZSBvcmlnaW5hbCBhdXRob3JzIGhhZCBhbnl0aGluZworICAgICAgICAgICAgICAgICMgdG8gZG8gd2l0aC4KKyAgICAgICAgICAgICAgICBzaW5jZV9yZXYgPSByZXBvLmdldCgnc2luY2VfcmV2aXNpb24nLCAnJykKKyAgICAgICAgICAgICAgICBpZiBzaW5jZV9yZXY6CisgICAgICAgICAgICAgICAgICAgIGNvbW1pdHRlciA9IHJ1bmNtZCgnZ2l0IHZhciBHSVRfQVVUSE9SX0lERU5UJykuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAjIFNhbWUgdGltZSBzdGFtcCwgbm8gbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgYXV0aG9yID0gcmUuc3ViKCcuKiAoXGQrIFsrLV1cZCspJywgcid1bmtub3duIDx1bmtub3duPiBcMScsIGNvbW1pdHRlcikKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ2F1dGhvciAlcycgJSBhdXRob3IpCisgICAgICAgICAgICAgICAgICAgIGZvciByZXYgaW4gc2luY2VfcmV2LnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFJlc29sdmUgaW4gY29tcG9uZW50IHJlcG8uLi4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldiA9IHJ1bmNtZCgnZ2l0IGxvZyAtLW9uZWxpbmUgLS1uby1hYmJyZXYtY29tbWl0IC1uMSAlcycgJSByZXYsIGxkaXIpLnNwbGl0KClbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgICMgLi4uIGFuZCB0aGVuIGdldCB0aGUgdHJlZSBpbiBjdXJyZW50CisgICAgICAgICAgICAgICAgICAgICAgICAjIG9uZS4gVGhlIGNvbW1pdCBzaG91bGQgYmUgaW4gYm90aCByZXBvcyB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSBzYW1lIHRyZWUsIGJ1dCBiZXR0ZXIgY2hlY2sgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRyZWUgPSBydW5jbWQoJ2dpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDolJVQgJXMnICUgcmV2KS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpIGFzIGVkaXRvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iud3JpdGUoJycnY2F0ID4kMSA8PEVPRgordHJlZSAlcworYXV0aG9yICVzCitjb21taXR0ZXIgJXMKKworJXM6IHNxdWFzaGVkIGltcG9ydCBvZiBjb21wb25lbnQKKworVGhpcyBjb21taXQgY29waWVzIHRoZSBlbnRpcmUgc2V0IG9mIGZpbGVzIGFzIGZvdW5kIGluCislcyAlcworCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwcmV2aW91cyBjb21taXRzLCBzZWUgdGhlCit1cHN0cmVhbSByZXBvc2l0b3J5LgorCitDb21taXQgY3JlYXRlZCBieSBjb21iby1sYXllci4KK0VPRgorJycnICUgKHRyZWUsIGF1dGhvciwgY29tbWl0dGVyLCBuYW1lLCBuYW1lLCBzaW5jZV9yZXYpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvci5mbHVzaCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuZW52aXJvblsnR0lUX0VESVRPUiddID0gJ3NoICVzJyAlIGVkaXRvci5uYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuY21kKCdnaXQgcmVwbGFjZSAtLWVkaXQgJXMnICUgcmV2KQorCisgICAgICAgICAgICAgICAgIyBPcHRpb25hbDogcmV3cml0ZSBoaXN0b3J5IHRvIGNoYW5nZSBjb21taXQgbWVzc2FnZXMgb3IgdG8gbW92ZSBmaWxlcy4KKyAgICAgICAgICAgICAgICBpZiAnaG9vaycgaW4gcmVwbyBvciBkZXN0X2RpciAhPSAiLiI6CisgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9icmFuY2ggPSBbJ2dpdCcsICdmaWx0ZXItYnJhbmNoJywgJy0tZm9yY2UnXQorICAgICAgICAgICAgICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpIGFzIGhvb2t3cmFwcGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ2hvb2snIGluIHJlcG86CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDcmVhdGUgYSBzaGVsbCBzY3JpcHQgd3JhcHBlciBhcm91bmQgdGhlIG9yaWdpbmFsIGhvb2sgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2FuIGJlIHVzZWQgYnkgZ2l0IGZpbHRlci1icmFuY2guIEhvb2sgbWF5IG9yIG1heSBub3QgaGF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYW4gYWJzb2x1dGUgcGF0aC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBob29rID0gcmVwb1snaG9vayddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9vayA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoY29uZi5jb25mZmlsZSksICcuLicsIGhvb2spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGUgd3JhcHBlcnMgdHVybnMgdGhlIGNvbW1pdCBtZXNzYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmcm9tIHN0ZGluIGludG8gYSBmYWtlIHBhdGNoIGhlYWRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgZ29vZCBlbm91Z2ggZm9yIGNoYW5naW5nIFN1YmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFuZCBjb21taXQgbXNnIGJvZHkgd2l0aCBub3JtYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbWJvLWxheWVyIGhvb2tzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2t3cmFwcGVyLndyaXRlKCcnJ3NldCAtZQordG1wbmFtZT0kKG1rdGVtcCkKK3RyYXAgInJtICR0bXBuYW1lIiBFWElUCitlY2hvIC1uICdTdWJqZWN0OiBbUEFUQ0hdICcgPj4kdG1wbmFtZQorY2F0ID4+JHRtcG5hbWUKK2lmICEgWyAkKHRhaWwgLWMgMSAkdG1wbmFtZSB8IG9kIC1BIG4gLXQgeDEpID09ICcwYScgXTsgdGhlbgorICAgIGVjaG8gPj4kdG1wbmFtZQorZmkKK2VjaG8gJy0tLScgPj4kdG1wbmFtZQorJXMgJHRtcG5hbWUgJEdJVF9DT01NSVQgJXMKK3RhaWwgLWMgKzE4ICR0bXBuYW1lIHwgaGVhZCAtYyAtNAorJycnICUgKGhvb2ssIG5hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2t3cmFwcGVyLmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfYnJhbmNoLmV4dGVuZChbJy0tbXNnLWZpbHRlcicsICdiYXNoICVzJyAlIGhvb2t3cmFwcGVyLm5hbWVdKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGVzdF9kaXIgIT0gIi4iOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IG9zLnBhdGguZGlybmFtZShkZXN0X2RpcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgcGFyZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSAnLicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE1heSBydW4gb3V0c2lkZSBvZiB0aGUgY3VycmVudCBkaXJlY3RvcnksIHNvIGRvIG5vdCBhc3N1bWUgdGhhdCAuZ2l0IGV4aXN0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfYnJhbmNoLmV4dGVuZChbJy0tdHJlZS1maWx0ZXInLCAnbWtkaXIgLXAgLmdpdC90bXB0cmVlICYmIG12ICQobHMgLTEgLWEgfCBncmVwIC12IC1lIF4uZ2l0JCAtZSBeLiQgLWUgXi4uJCkgLmdpdC90bXB0cmVlICYmIG1rZGlyIC1wICVzICYmIG12IC5naXQvdG1wdHJlZSAlcycgJSAocGFyZW50LCBkZXN0X2RpcildKQorICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2JyYW5jaC5hcHBlbmQoJ0hFQUQnKQorICAgICAgICAgICAgICAgICAgICAgICAgcnVuY21kKGZpbHRlcl9icmFuY2gpCisgICAgICAgICAgICAgICAgICAgICAgICBydW5jbWQoJ2dpdCB1cGRhdGUtcmVmIC1kIHJlZnMvb3JpZ2luYWwvcmVmcy9oZWFkcy8lcycgJSBuYW1lKQorICAgICAgICAgICAgICAgIHJlcG9bJ3Jld3JpdHRlbl9yZXZpc2lvbiddID0gcnVuY21kKCdnaXQgcmV2LXBhcnNlIEhFQUQnKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgcmVwb1snc3RyaXBwZWRfcmV2aXNpb24nXSA9IHJlcG9bJ3Jld3JpdHRlbl9yZXZpc2lvbiddCisgICAgICAgICAgICAgICAgIyBPcHRpb25hbCBmaWx0ZXIgZmlsZXM6IHJlbW92ZSBldmVyeXRoaW5nIGFuZCByZS1wb3B1bGF0ZSB1c2luZyB0aGUgbm9ybWFsIGZpbHRlcmluZyBjb2RlLgorICAgICAgICAgICAgICAgICMgT3ZlcnJpZGUgYW55IHBvdGVudGlhbCAuZ2l0aWdub3JlLgorICAgICAgICAgICAgICAgIGlmIGZpbGVfZmlsdGVyIG9yIGV4Y2x1ZGVfcGF0dGVybnM6CisgICAgICAgICAgICAgICAgICAgIHJ1bmNtZCgnZ2l0IHJtIC1yZiAuJykKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGV4dHJhY3RfZGlyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKGV4dHJhY3RfZGlyKQorICAgICAgICAgICAgICAgICAgICBjb3B5X3NlbGVjdGVkX2ZpbGVzKCdIRUFEJywgZXh0cmFjdF9kaXIsIGZpbGVfZmlsdGVyLCBleGNsdWRlX3BhdHRlcm5zLCAnLicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViZGlyPWRlc3RfZGlyKQorICAgICAgICAgICAgICAgICAgICBydW5jbWQoJ2dpdCBhZGQgLS1hbGwgLS1mb3JjZSAuJykKKyAgICAgICAgICAgICAgICAgICAgaWYgcnVuY21kKCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFNvbWV0aGluZyB0byBjb21taXQuCisgICAgICAgICAgICAgICAgICAgICAgICBydW5jbWQoWydnaXQnLCAnY29tbWl0JywgJy1tJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycnJXM6IHNlbGVjdCBmaWxlIHN1YnNldAorCitGaWxlcyBmcm9tIHRoZSBjb21wb25lbnQgcmVwb3NpdG9yeSB3ZXJlIGNob3NlbiBiYXNlZCBvbgordGhlIGZvbGxvd2luZyBmaWx0ZXJzOgorZmlsZV9maWx0ZXIgPSAlcworZmlsZV9leGNsdWRlID0gJXMnJycgJSAobmFtZSwgZmlsZV9maWx0ZXIgb3IgJzxlbXB0eT4nLCByZXBvLmdldCgnZmlsZV9leGNsdWRlJywgJzxlbXB0eT4nKSldKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVwb1snc3RyaXBwZWRfcmV2aXNpb24nXSA9IHJ1bmNtZCgnZ2l0IHJldi1wYXJzZSBIRUFEJykuc3RyaXAoKQorCisgICAgICAgICAgICBpZiBub3QgbGFzdHJldjoKKyAgICAgICAgICAgICAgICBsYXN0cmV2ID0gcnVuY21kKCdnaXQgcmV2LXBhcnNlICVzJyAlIGluaXRpYWxyZXYsIGxkaXIpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBjb25mLnVwZGF0ZShuYW1lLCAibGFzdF9yZXZpc2lvbiIsIGxhc3RyZXYsIGluaXRtb2RlPVRydWUpCisKKyAgICAgICAgaWYgbm90IGNvbmYuaGlzdG9yeToKKyAgICAgICAgICAgIHJ1bmNtZCgiZ2l0IGFkZCAuIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgQ3JlYXRlIE9jdG9wdXMgbWVyZ2UgY29tbWl0IGFjY29yZGluZyB0byBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwODc0MTQ5L2dpdC1vY3RvcHVzLW1lcmdlLXdpdGgtdW5yZWxhdGVkLXJlcG9zaXRvaWVzCisgICAgICAgICAgICBydW5jbWQoJ2dpdCBjaGVja291dCBtYXN0ZXInKQorICAgICAgICAgICAgbWVyZ2UgPSBbJ2dpdCcsICdtZXJnZScsICctLW5vLWNvbW1pdCddCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBjb25mLnJlcG9zOgorICAgICAgICAgICAgICAgIHJlcG8gPSBjb25mLnJlcG9zW25hbWVdCisgICAgICAgICAgICAgICAgIyBVc2UgYnJhbmNoIGNyZWF0ZWQgZWFybGllci4KKyAgICAgICAgICAgICAgICBtZXJnZS5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgICAgICAjIFJvb3QgYWxsIGNvbW1pdHMgd2hpY2ggaGF2ZSBubyBwYXJlbnQgaW4gdGhlIGNvbW1vbgorICAgICAgICAgICAgICAgICMgYW5jZXN0b3IgaW4gdGhlIG5ldyByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIGZvciBzdGFydCBpbiBydW5jbWQoJ2dpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OiUlSCAtLW1heC1wYXJlbnRzPTAgJXMnICUgbmFtZSkuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgICAgIHJ1bmNtZCgnZ2l0IHJlcGxhY2UgLS1ncmFmdCAlcyAlcycgJSAoc3RhcnQsIHN0YXJ0cmV2KSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBydW5jbWQobWVyZ2UpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlcnJvcjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnJydNZXJnaW5nIGNvbXBvbmVudCByZXBvc2l0b3J5IGhpc3RvcnkgZmFpbGVkLCBwZXJoYXBzIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3RzLgorSXQgbWF5IGJlIHBvc3NpYmxlIHRvIGNvbW1pdCBhbnl3YXkgYWZ0ZXIgcmVzb2x2aW5nIHRoZXNlIGNvbmZsaWN0cy4KKworJXMnJycgJSBlcnJvcikKKyAgICAgICAgICAgICMgQ3JlYXRlIE1FUkdFX0hFQUQgYW5kIE1FUkdFX01TRy4gImdpdCBtZXJnZSIgaXRzZWxmCisgICAgICAgICAgICAjIGRvZXMgbm90IGNyZWF0ZSBNRVJHRV9IRUFEIGluIGNhc2Ugb2YgYSAoaGFybWxlc3MpIGZhaWx1cmUsCisgICAgICAgICAgICAjIGFuZCB3ZSB3YW50IGNlcnRhaW4gYXV0by1nZW5lcmF0ZWQgaW5mb3JtYXRpb24gaW4gdGhlCisgICAgICAgICAgICAjIGNvbW1pdCBtZXNzYWdlIGZvciBmdXR1cmUgcmVmZXJlbmNlIGFuZC9vciBhdXRvbWF0aW9uLgorICAgICAgICAgICAgd2l0aCBvcGVuKCcuZ2l0L01FUkdFX0hFQUQnLCAndycpIGFzIGhlYWQ6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKCcuZ2l0L01FUkdFX01TRycsICd3JykgYXMgbXNnOgorICAgICAgICAgICAgICAgICAgICBtc2cud3JpdGUoJ3JlcG86IGluaXRpYWwgaW1wb3J0IG9mIGNvbXBvbmVudHNcblxuJykKKyAgICAgICAgICAgICAgICAgICAgIyBoZWFkLndyaXRlKCclc1xuJyAlIHN0YXJ0cmV2KQorICAgICAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBjb25mLnJlcG9zOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVwbyA9IGNvbmYucmVwb3NbbmFtZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICMgPHVwc3RyZWFtIHJlZj4gPHJld3JpdHRlbiByZWY+IDxyZXdyaXR0ZW4gKyBmaWxlcyByZW1vdmVkPgorICAgICAgICAgICAgICAgICAgICAgICAgbXNnLndyaXRlKCdjb21iby1sYXllci0lczogJXMgJXMgJXNcbicgJSAobmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9bJ2xhc3RfcmV2aXNpb24nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9bJ3Jld3JpdHRlbl9yZXZpc2lvbiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb1snc3RyaXBwZWRfcmV2aXNpb24nXSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXYgPSBydW5jbWQoJ2dpdCByZXYtcGFyc2UgJXMnICUgbmFtZSkuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgaGVhZC53cml0ZSgnJXNcbicgJSByZXYpCisKKyAgICAgICAgaWYgY29uZi5sb2NhbGNvbmZmaWxlOgorICAgICAgICAgICAgbG9jYWxhZGRlZCA9IFRydWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBydW5jbWQoImdpdCBybSAtLWNhY2hlZCAlcyIgJSBjb25mLmxvY2FsY29uZmZpbGUsIHByaW50ZXJyPUZhbHNlKQorICAgICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yOgorICAgICAgICAgICAgICAgIGxvY2FsYWRkZWQgPSBGYWxzZQorICAgICAgICAgICAgaWYgbG9jYWxhZGRlZDoKKyAgICAgICAgICAgICAgICBsb2NhbHJlbHBhdGggPSBvcy5wYXRoLnJlbHBhdGgoY29uZi5sb2NhbGNvbmZmaWxlKQorICAgICAgICAgICAgICAgIHJ1bmNtZCgiZ3JlcCAtcSAlcyAuZ2l0aWdub3JlIHx8IGVjaG8gJXMgPj4gLmdpdGlnbm9yZSIgJSAobG9jYWxyZWxwYXRoLCBsb2NhbHJlbHBhdGgpKQorICAgICAgICAgICAgICAgIHJ1bmNtZCgiZ2l0IGFkZCAuZ2l0aWdub3JlIikKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiQWRkZWQgbG9jYWwgY29uZmlndXJhdGlvbiBmaWxlICVzIHRvIC5naXRpZ25vcmUiLCBsb2NhbHJlbHBhdGgpCisgICAgICAgIGxvZ2dlci5pbmZvKCJJbml0aWFsIGNvbWJvIGxheWVyIHJlcG9zaXRvcnkgZGF0YSBoYXMgYmVlbiBjcmVhdGVkOyBwbGVhc2UgbWFrZSBhbnkgY2hhbmdlcyBpZiBkZXNpcmVkIGFuZCB0aGVuIHVzZSAnZ2l0IGNvbW1pdCcgdG8gbWFrZSB0aGUgaW5pdGlhbCBjb21taXQuIikKKyAgICBlbHNlOgorICAgICAgICBsb2dnZXIuaW5mbygiUmVwb3NpdG9yeSBhbHJlYWR5IGluaXRpYWxpc2VkLCBub3RoaW5nIHRvIGRvLiIpCisKKworZGVmIGNoZWNrX3JlcG9fY2xlYW4ocmVwb2Rpcik6CisgICAgIiIiCisgICAgICAgIGNoZWNrIGlmIHRoZSByZXBvIGlzIGNsZWFuCisgICAgICAgIGV4aXQgaWYgcmVwbyBpcyBkaXJ0eQorICAgICIiIgorICAgIG91dHB1dD1ydW5jbWQoImdpdCBzdGF0dXMgLS1wb3JjZWxhaW4iLCByZXBvZGlyKQorICAgIHIgPSByZS5jb21waWxlKCdcP1w/IHBhdGNoLS4qLycpCisgICAgZGlydHlvdXQgPSBbaXRlbSBmb3IgaXRlbSBpbiBvdXRwdXQuc3BsaXRsaW5lcygpIGlmIG5vdCByLm1hdGNoKGl0ZW0pXQorICAgIGlmIGRpcnR5b3V0OgorICAgICAgICBsb2dnZXIuZXJyb3IoImdpdCByZXBvICVzIGlzIGRpcnR5LCBwbGVhc2UgZml4IGl0IGZpcnN0IiwgcmVwb2RpcikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworZGVmIGNoZWNrX3BhdGNoKHBhdGNoZmlsZSk6CisgICAgZiA9IG9wZW4ocGF0Y2hmaWxlKQorICAgIGxuID0gZi5yZWFkbGluZSgpCisgICAgb2YgPSBOb25lCisgICAgaW5fcGF0Y2ggPSBGYWxzZQorICAgIGJleW9uZF9tc2cgPSBGYWxzZQorICAgIHByZV9idWYgPSAnJworICAgIHdoaWxlIGxuOgorICAgICAgICBpZiBub3QgYmV5b25kX21zZzoKKyAgICAgICAgICAgIGlmIGxuID09ICctLS1cbic6CisgICAgICAgICAgICAgICAgaWYgbm90IG9mOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGluX3BhdGNoID0gRmFsc2UKKyAgICAgICAgICAgICAgICBiZXlvbmRfbXNnID0gVHJ1ZQorICAgICAgICAgICAgZWxpZiBsbi5zdGFydHN3aXRoKCctLS0gJyk6CisgICAgICAgICAgICAgICAgIyBXZSBoYXZlIGEgZGlmZiBpbiB0aGUgY29tbWl0IG1lc3NhZ2UKKyAgICAgICAgICAgICAgICBpbl9wYXRjaCA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBub3Qgb2Y6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCdXQVJOSU5HOiAlcyBjb250YWlucyBhIGRpZmYgaW4gaXRzIGNvbW1pdCBtZXNzYWdlLCBpbmRlbnRpbmcgdG8gYXZvaWQgZmFpbHVyZSBkdXJpbmcgYXBwbHknICUgcGF0Y2hmaWxlKQorICAgICAgICAgICAgICAgICAgICBvZiA9IG9wZW4ocGF0Y2hmaWxlICsgJy50bXAnLCAndycpCisgICAgICAgICAgICAgICAgICAgIG9mLndyaXRlKHByZV9idWYpCisgICAgICAgICAgICAgICAgICAgIHByZV9idWYgPSAnJworICAgICAgICAgICAgZWxpZiBpbl9wYXRjaCBhbmQgbm90IGxuWzBdIGluICcrLUAgXG5ccic6CisgICAgICAgICAgICAgICAgaW5fcGF0Y2ggPSBGYWxzZQorICAgICAgICBpZiBvZjoKKyAgICAgICAgICAgIGlmIGluX3BhdGNoOgorICAgICAgICAgICAgICAgIG9mLndyaXRlKCcgJyArIGxuKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvZi53cml0ZShsbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByZV9idWYgKz0gbG4KKyAgICAgICAgbG4gPSBmLnJlYWRsaW5lKCkKKyAgICBmLmNsb3NlKCkKKyAgICBpZiBvZjoKKyAgICAgICAgb2YuY2xvc2UoKQorICAgICAgICBvcy5yZW5hbWUocGF0Y2hmaWxlICsgJy50bXAnLCBwYXRjaGZpbGUpCisKK2RlZiBkcm9wX3RvX3NoZWxsKHdvcmtkaXI9Tm9uZSk6CisgICAgaWYgbm90IHN5cy5zdGRpbi5pc2F0dHkoKToKKyAgICAgICAgcHJpbnQgIk5vdCBhIFRUWSBzbyBjYW4ndCBkcm9wIHRvIHNoZWxsIGZvciByZXNvbHV0aW9uLCBleGl0aW5nLiIKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBzaGVsbCA9IG9zLmVudmlyb24uZ2V0KCdTSEVMTCcsICdiYXNoJykKKyAgICBwcmludCgnRHJvcHBpbmcgdG8gc2hlbGwgIiVzIlxuJyBcCisgICAgICAgICAgJ1doZW4geW91IGFyZSBmaW5pc2hlZCwgcnVuIHRoZSBmb2xsb3dpbmcgdG8gY29udGludWU6XG4nIFwKKyAgICAgICAgICAnICAgICAgIGV4aXQgICAgLS0gY29udGludWUgdG8gYXBwbHkgdGhlIHBhdGNoZXNcbicgXAorICAgICAgICAgICcgICAgICAgZXhpdCAxICAtLSBhYm9ydFxuJyAlIHNoZWxsKTsKKyAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoW3NoZWxsXSwgY3dkPXdvcmtkaXIpCisgICAgaWYgcmV0ICE9IDA6CisgICAgICAgIHByaW50ICJBYm9ydGluZyIKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIFRydWUKKworZGVmIGNoZWNrX3Jldl9icmFuY2goY29tcG9uZW50LCByZXBvZGlyLCByZXYsIGJyYW5jaCk6CisgICAgdHJ5OgorICAgICAgICBhY3R1YWxicmFuY2ggPSBydW5jbWQoImdpdCBicmFuY2ggLS1jb250YWlucyAlcyIgJSByZXYsIHJlcG9kaXIsIHByaW50ZXJyPUZhbHNlKQorICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICBpZiBlLnJldHVybmNvZGUgPT0gMTI5OgorICAgICAgICAgICAgYWN0dWFsYnJhbmNoID0gIiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICBpZiBub3QgYWN0dWFsYnJhbmNoOgorICAgICAgICBsb2dnZXIuZXJyb3IoIiVzOiBzcGVjaWZpZWQgcmV2aXNpb24gJXMgaXMgaW52YWxpZCEiICUgKGNvbXBvbmVudCwgcmV2KSkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBicmFuY2hlcyA9IFtdCisgICAgYnJhbmNobGlzdCA9IGFjdHVhbGJyYW5jaC5zcGxpdCgiXG4iKQorICAgIGZvciBiIGluIGJyYW5jaGxpc3Q6CisgICAgICAgIGJyYW5jaGVzLmFwcGVuZChiLnN0cmlwKCkuc3BsaXQoJyAnKVstMV0pCisKKyAgICBpZiBicmFuY2ggbm90IGluIGJyYW5jaGVzOgorICAgICAgICBsb2dnZXIuZXJyb3IoIiVzOiBzcGVjaWZpZWQgcmV2aXNpb24gJXMgaXMgbm90IG9uIHNwZWNpZmllZCBicmFuY2ggJXMhIiAlIChjb21wb25lbnQsIHJldiwgYnJhbmNoKSkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIFRydWUKKworZGVmIGdldF9yZXBvcyhjb25mLCByZXBvX25hbWVzKToKKyAgICByZXBvcyA9IFtdCisgICAgZm9yIG5hbWUgaW4gcmVwb19uYW1lczoKKyAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCctJyk6CisgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVwb3MuYXBwZW5kKG5hbWUpCisgICAgZm9yIHJlcG8gaW4gcmVwb3M6CisgICAgICAgIGlmIG5vdCByZXBvIGluIGNvbmYucmVwb3M6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlNwZWNpZmllZCBjb21wb25lbnQgJyVzJyBub3QgZm91bmQgaW4gY29uZmlndXJhdGlvbiIgJSByZXBvKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGlmIG5vdCByZXBvczoKKyAgICAgICAgcmVwb3MgPSBjb25mLnJlcG9zCisKKyAgICByZXR1cm4gcmVwb3MKKworZGVmIGFjdGlvbl9wdWxsKGNvbmYsIGFyZ3MpOgorICAgICIiIgorICAgICAgICB1cGRhdGUgdGhlIGNvbXBvbmVudCByZXBvcyBvbmx5CisgICAgIiIiCisgICAgcmVwb3MgPSBnZXRfcmVwb3MoY29uZiwgYXJnc1sxOl0pCisKKyAgICAjIG1ha2Ugc3VyZSBhbGwgcmVwb3MgYXJlIGNsZWFuCisgICAgZm9yIG5hbWUgaW4gcmVwb3M6CisgICAgICAgIGNoZWNrX3JlcG9fY2xlYW4oY29uZi5yZXBvc1tuYW1lXVsnbG9jYWxfcmVwb19kaXInXSkKKworICAgIGZvciBuYW1lIGluIHJlcG9zOgorICAgICAgICByZXBvID0gY29uZi5yZXBvc1tuYW1lXQorICAgICAgICBsZGlyID0gcmVwb1snbG9jYWxfcmVwb19kaXInXQorICAgICAgICBicmFuY2ggPSByZXBvLmdldCgnYnJhbmNoJywgIm1hc3RlciIpCisgICAgICAgIGxvZ2dlci5pbmZvKCJ1cGRhdGUgYnJhbmNoICVzIG9mIGNvbXBvbmVudCByZXBvICVzIGluICVzIC4uLiIgJSAoYnJhbmNoLCBuYW1lLCBsZGlyKSkKKyAgICAgICAgaWYgbm90IGNvbmYuaGFyZF9yZXNldDoKKyAgICAgICAgICAgICMgVHJ5IHRvIHB1bGwgb25seSB0aGUgY29uZmlndXJlZCBicmFuY2guIEJld2FyZSB0aGF0IHRoaXMgbWF5IGZhaWwKKyAgICAgICAgICAgICMgd2hlbiB0aGUgYnJhbmNoIGlzIGN1cnJlbnRseSB1bmtub3duIChmb3IgZXhhbXBsZSwgYWZ0ZXIgcmVjb25maWd1cmluZworICAgICAgICAgICAgIyBjb21iby1sYXllcikuIEluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIGZldGNoIGV2ZXJ5dGhpbmcgYW5kIHRyeSB0aGUgY2hlY2sgb3V0CisgICAgICAgICAgICAjIGFuZCBwdWxsIGFnYWluLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJ1bmNtZCgiZ2l0IGNoZWNrb3V0ICVzIiAlIGJyYW5jaCwgbGRpciwgcHJpbnRlcnI9RmFsc2UpCisgICAgICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6CisgICAgICAgICAgICAgICAgb3V0cHV0PXJ1bmNtZCgiZ2l0IGZldGNoIiwgbGRpcikKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhvdXRwdXQpCisgICAgICAgICAgICAgICAgcnVuY21kKCJnaXQgY2hlY2tvdXQgJXMiICUgYnJhbmNoLCBsZGlyKQorICAgICAgICAgICAgICAgIHJ1bmNtZCgiZ2l0IHB1bGwgLS1mZi1vbmx5IiwgbGRpcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3V0cHV0PXJ1bmNtZCgiZ2l0IHB1bGwgLS1mZi1vbmx5IiwgbGRpcikKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhvdXRwdXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdXRwdXQ9cnVuY21kKCJnaXQgZmV0Y2giLCBsZGlyKQorICAgICAgICAgICAgbG9nZ2VyLmluZm8ob3V0cHV0KQorICAgICAgICAgICAgcnVuY21kKCJnaXQgY2hlY2tvdXQgJXMiICUgYnJhbmNoLCBsZGlyKQorICAgICAgICAgICAgcnVuY21kKCJnaXQgcmVzZXQgLS1oYXJkIEZFVENIX0hFQUQiLCBsZGlyKQorCitkZWYgYWN0aW9uX3VwZGF0ZShjb25mLCBhcmdzKToKKyAgICAiIiIKKyAgICAgICAgdXBkYXRlIHRoZSBjb21wb25lbnQgcmVwb3MKKyAgICAgICAgZ2VuZXJhdGUgdGhlIHBhdGNoIGxpc3QKKyAgICAgICAgYXBwbHkgdGhlIGdlbmVyYXRlZCBwYXRjaGVzCisgICAgIiIiCisgICAgY29tcG9uZW50cyA9IFthcmcuc3BsaXQoJzonKVswXSBmb3IgYXJnIGluIGFyZ3NbMTpdXQorICAgIHJldmlzaW9ucyA9IHt9CisgICAgZm9yIGFyZyBpbiBhcmdzWzE6XToKKyAgICAgICAgaWYgJzonIGluIGFyZzoKKyAgICAgICAgICAgIGEgPSBhcmcuc3BsaXQoJzonLCAxKQorICAgICAgICAgICAgcmV2aXNpb25zW2FbMF1dID0gYVsxXQorICAgIHJlcG9zID0gZ2V0X3JlcG9zKGNvbmYsIGNvbXBvbmVudHMpCisKKyAgICAjIG1ha2Ugc3VyZSBjb21ibyByZXBvIGlzIGNsZWFuCisgICAgY2hlY2tfcmVwb19jbGVhbihvcy5nZXRjd2QoKSkKKworICAgIGltcG9ydCB1dWlkCisgICAgcGF0Y2hfZGlyID0gInBhdGNoLSVzIiAlIHV1aWQudXVpZDQoKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRjaF9kaXIpOgorICAgICAgICBvcy5ta2RpcihwYXRjaF9kaXIpCisKKyAgICAjIFN0ZXAgMTogdXBkYXRlIHRoZSBjb21wb25lbnQgcmVwb3MKKyAgICBpZiBjb25mLm5vcHVsbDoKKyAgICAgICAgbG9nZ2VyLmluZm8oIlNraXBwaW5nIHB1bGwgKC1uKSIpCisgICAgZWxzZToKKyAgICAgICAgYWN0aW9uX3B1bGwoY29uZiwgWydhcmcwJ10gKyBjb21wb25lbnRzKQorCisgICAgZm9yIG5hbWUgaW4gcmVwb3M6CisgICAgICAgIHJldmlzaW9uID0gcmV2aXNpb25zLmdldChuYW1lLCBOb25lKQorICAgICAgICByZXBvID0gY29uZi5yZXBvc1tuYW1lXQorICAgICAgICBsZGlyID0gcmVwb1snbG9jYWxfcmVwb19kaXInXQorICAgICAgICBkZXN0X2RpciA9IHJlcG9bJ2Rlc3RfZGlyJ10KKyAgICAgICAgYnJhbmNoID0gcmVwby5nZXQoJ2JyYW5jaCcsICJtYXN0ZXIiKQorICAgICAgICByZXBvX3BhdGNoX2RpciA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgcGF0Y2hfZGlyLCBuYW1lKQorCisgICAgICAgICMgU3RlcCAyOiBnZW5lcmF0ZSB0aGUgcGF0Y2ggbGlzdCBhbmQgc3RvcmUgdG8gcGF0Y2ggZGlyCisgICAgICAgIGxvZ2dlci5pbmZvKCJHZW5lcmF0aW5nIHBhdGNoZXMgZnJvbSAlcy4uLiIgJSBuYW1lKQorICAgICAgICB0b3BfcmV2aXNpb24gPSByZXZpc2lvbiBvciBicmFuY2gKKyAgICAgICAgaWYgbm90IGNoZWNrX3Jldl9icmFuY2gobmFtZSwgbGRpciwgdG9wX3JldmlzaW9uLCBicmFuY2gpOgorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgaWYgZGVzdF9kaXIgIT0gIi4iOgorICAgICAgICAgICAgcHJlZml4ID0gIi0tc3JjLXByZWZpeD1hLyVzLyAtLWRzdC1wcmVmaXg9Yi8lcy8iICUgKGRlc3RfZGlyLCBkZXN0X2RpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByZWZpeCA9ICIiCisgICAgICAgIGlmIHJlcG9bJ2xhc3RfcmV2aXNpb24nXSA9PSAiIjoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJXYXJuaW5nOiBsYXN0X3JldmlzaW9uIG9mIGNvbXBvbmVudCAlcyBpcyBub3Qgc2V0LCBzdGFydGluZyBmcm9tIHRoZSBmaXJzdCBjb21taXQiICUgbmFtZSkKKyAgICAgICAgICAgIHBhdGNoX2NtZF9yYW5nZSA9ICItLXJvb3QgJXMiICUgdG9wX3JldmlzaW9uCisgICAgICAgICAgICByZXZfY21kX3JhbmdlID0gdG9wX3JldmlzaW9uCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBub3QgY2hlY2tfcmV2X2JyYW5jaChuYW1lLCBsZGlyLCByZXBvWydsYXN0X3JldmlzaW9uJ10sIGJyYW5jaCk6CisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgICAgIHBhdGNoX2NtZF9yYW5nZSA9ICIlcy4uJXMiICUgKHJlcG9bJ2xhc3RfcmV2aXNpb24nXSwgdG9wX3JldmlzaW9uKQorICAgICAgICAgICAgcmV2X2NtZF9yYW5nZSA9IHBhdGNoX2NtZF9yYW5nZQorCisgICAgICAgIGZpbGVfZmlsdGVyID0gcmVwby5nZXQoJ2ZpbGVfZmlsdGVyJywiIikKKworICAgICAgICBwYXRjaF9jbWQgPSAiZ2l0IGZvcm1hdC1wYXRjaCAtTiAlcyAtLW91dHB1dC1kaXJlY3RvcnkgJXMgJXMgLS0gJXMiICUgXAorICAgICAgICAgICAgKHByZWZpeCxyZXBvX3BhdGNoX2RpciwgcGF0Y2hfY21kX3JhbmdlLCBmaWxlX2ZpbHRlcikKKyAgICAgICAgb3V0cHV0ID0gcnVuY21kKHBhdGNoX2NtZCwgbGRpcikKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJnZW5lcmF0ZWQgcGF0Y2ggc2V0OlxuJXMiICUgb3V0cHV0KQorICAgICAgICBwYXRjaGxpc3QgPSBvdXRwdXQuc3BsaXRsaW5lcygpCisKKyAgICAgICAgcmV2X2NtZCA9ICJnaXQgcmV2LWxpc3QgLS1uby1tZXJnZXMgJXMgLS0gJXMiICUgKHJldl9jbWRfcmFuZ2UsIGZpbGVfZmlsdGVyKQorICAgICAgICByZXZsaXN0ID0gcnVuY21kKHJldl9jbWQsIGxkaXIpLnNwbGl0bGluZXMoKQorCisgICAgICAgICMgU3RlcCAzOiBDYWxsIHJlcG8gc3BlY2lmaWMgaG9vayB0byBhZGp1c3QgcGF0Y2gKKyAgICAgICAgaWYgJ2hvb2snIGluIHJlcG86CisgICAgICAgICAgICAjIGhvb2sgcGFyYW1ldGVyIGlzOiAuL2hvb2sgcGF0Y2hwYXRoIHJldmlzaW9uIHJlcG9uYW1lCisgICAgICAgICAgICBjb3VudD1sZW4ocmV2bGlzdCktMQorICAgICAgICAgICAgZm9yIHBhdGNoIGluIHBhdGNobGlzdDoKKyAgICAgICAgICAgICAgICBydW5jbWQoIiVzICVzICVzICVzIiAlIChyZXBvWydob29rJ10sIHBhdGNoLCByZXZsaXN0W2NvdW50XSwgbmFtZSkpCisgICAgICAgICAgICAgICAgY291bnQ9Y291bnQtMQorCisgICAgICAgICMgU3RlcCAzYTogRmlsdGVyIG91dCB1bndhbnRlZCBmaWxlcyBhbmQgcGF0Y2hlcy4KKyAgICAgICAgZXhjbHVkZSA9IHJlcG8uZ2V0KCdmaWxlX2V4Y2x1ZGUnLCAnJykKKyAgICAgICAgaWYgZXhjbHVkZToKKyAgICAgICAgICAgIGZpbHRlciA9IFsnZmlsdGVyZGlmZicsICctcDEnXQorICAgICAgICAgICAgZm9yIHBhdGggaW4gZXhjbHVkZS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGZpbHRlci5hcHBlbmQoJy14JykKKyAgICAgICAgICAgICAgICBmaWx0ZXIuYXBwZW5kKCclcy8lcycgJSAoZGVzdF9kaXIsIHBhdGgpIGlmIGRlc3RfZGlyICE9ICcuJyBlbHNlIHBhdGgpCisgICAgICAgICAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hsaXN0WzpdOgorICAgICAgICAgICAgICAgIGZpbHRlcmVkID0gcGF0Y2ggKyAnLnRtcCcKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsdGVyZWQsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgcnVuY21kKGZpbHRlciArIFtwYXRjaF0sIG91dD1mKQorICAgICAgICAgICAgICAgICMgTm93IGNoZWNrIGZvciBlbXB0eSBwYXRjaGVzLgorICAgICAgICAgICAgICAgIGlmIHJ1bmNtZChbJ2ZpbHRlcmRpZmYnLCAnLS1saXN0JywgZmlsdGVyZWRdKToKKyAgICAgICAgICAgICAgICAgICAgIyBQb3NzaWJseSBtb2RpZmllZC4KKyAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKHBhdGNoKQorICAgICAgICAgICAgICAgICAgICBvcy5yZW5hbWUoZmlsdGVyZWQsIHBhdGNoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgRW1wdHksIGlnbm9yZSBpdC4gTXVzdCBhbHNvIHJlbW92ZSBmcm9tIHJldmxpc3QuCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihwYXRjaCwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICAgICAgZnJvbWxpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGZyb21saW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBQYXRjaCBtdXN0IGhhdmUgYmVlbiBlbXB0eSB0byBzdGFydCB3aXRoLiBObyBuZWVkCisgICAgICAgICAgICAgICAgICAgICAgICAjIHRvIHJlbW92ZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIG0gPSByZS5tYXRjaChyJycnXkZyb20gKFswLTlhLWZBLUZdKykgLipcbicnJywgZnJvbWxpbmUpCisgICAgICAgICAgICAgICAgICAgIHJldiA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdza2lwcGluZyBlbXB0eSBwYXRjaCAlcyA9ICVzJyAlIChwYXRjaCwgcmV2KSkKKyAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKHBhdGNoKQorICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZmlsdGVyZWQpCisgICAgICAgICAgICAgICAgICAgIHBhdGNobGlzdC5yZW1vdmUocGF0Y2gpCisgICAgICAgICAgICAgICAgICAgIHJldmxpc3QucmVtb3ZlKHJldikKKworICAgICAgICAjIFN0ZXAgNDogd3JpdGUgcGF0Y2ggbGlzdCBhbmQgcmV2aXNpb24gbGlzdCB0byBmaWxlLCBmb3IgdXNlciB0byBlZGl0IGxhdGVyCisgICAgICAgIHBhdGNobGlzdF9maWxlID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCBwYXRjaF9kaXIsICJwYXRjaGxpc3QtJXMiICUgbmFtZSkKKyAgICAgICAgcmVwb1sncGF0Y2hsaXN0J10gPSBwYXRjaGxpc3RfZmlsZQorICAgICAgICBmID0gb3BlbihwYXRjaGxpc3RfZmlsZSwgJ3cnKQorICAgICAgICBjb3VudD1sZW4ocmV2bGlzdCktMQorICAgICAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hsaXN0OgorICAgICAgICAgICAgZi53cml0ZSgiJXMgJXNcbiIgJSAocGF0Y2gsIHJldmxpc3RbY291bnRdKSkKKyAgICAgICAgICAgIGNoZWNrX3BhdGNoKG9zLnBhdGguam9pbihwYXRjaF9kaXIsIHBhdGNoKSkKKyAgICAgICAgICAgIGNvdW50PWNvdW50LTEKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAjIFN0ZXAgNTogaW52b2tlIGJhc2ggZm9yIHVzZXIgdG8gZWRpdCBwYXRjaCBhbmQgcGF0Y2ggbGlzdAorICAgIGlmIGNvbmYuaW50ZXJhY3RpdmU6CisgICAgICAgIHByaW50KCdZb3UgbWF5IG5vdyBlZGl0IHRoZSBwYXRjaCBhbmQgcGF0Y2ggbGlzdCBpbiAlc1xuJyBcCisgICAgICAgICAgICAgICdGb3IgZXhhbXBsZSwgeW91IGNhbiByZW1vdmUgdW53YW50ZWQgcGF0Y2ggZW50cmllcyBmcm9tIHBhdGNobGlzdC0qLCBzbyB0aGF0IHRoZXkgd2lsbCBiZSBub3QgYXBwbGllZCBsYXRlcicgJSBwYXRjaF9kaXIpOworICAgICAgICBpZiBub3QgZHJvcF90b19zaGVsbChwYXRjaF9kaXIpOgorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICMgU3RlcCA2OiBhcHBseSB0aGUgZ2VuZXJhdGVkIGFuZCByZXZpc2VkIHBhdGNoCisgICAgYXBwbHlfcGF0Y2hsaXN0KGNvbmYsIHJlcG9zKQorICAgIHJ1bmNtZCgicm0gLXJmICVzIiAlIHBhdGNoX2RpcikKKworICAgICMgU3RlcCA3OiBjb21taXQgdGhlIHVwZGF0ZWQgY29uZmlnIGZpbGUgaWYgaXQncyBiZWluZyB0cmFja2VkCisgICAgcmVscGF0aCA9IG9zLnBhdGgucmVscGF0aChjb25mLmNvbmZmaWxlKQorICAgIHRyeToKKyAgICAgICAgb3V0cHV0ID0gcnVuY21kKCJnaXQgc3RhdHVzIC0tcG9yY2VsYWluICVzIiAlIHJlbHBhdGgsIHByaW50ZXJyPUZhbHNlKQorICAgIGV4Y2VwdDoKKyAgICAgICAgIyBPdXRzaWRlIHRoZSByZXBvc2l0b3J5CisgICAgICAgIG91dHB1dCA9IE5vbmUKKyAgICBpZiBvdXRwdXQ6CisgICAgICAgIGxvZ2dlci5pbmZvKCJDb21taXR0aW5nIHVwZGF0ZWQgY29uZmlndXJhdGlvbiBmaWxlIikKKyAgICAgICAgaWYgb3V0cHV0LmxzdHJpcCgpLnN0YXJ0c3dpdGgoIk0iKToKKworICAgICAgICAgICAgIyBjcmVhdGUgdGhlICJjb21wb25lbnRzIiBzdHJpbmcKKyAgICAgICAgICAgIGNvbXBvbmVudF9zdHIgPSAiYWxsIGNvbXBvbmVudHMiCisgICAgICAgICAgICBpZiBsZW4oY29tcG9uZW50cykgPiAwOgorICAgICAgICAgICAgICAgICMgb3RoZXJ3aXNlIHRlbGwgd2hpY2ggY29tcG9uZW50cyB3ZXJlIGFjdHVhbGx5IGNoYW5nZWQKKyAgICAgICAgICAgICAgICBjb21wb25lbnRfc3RyID0gIiwgIi5qb2luKGNvbXBvbmVudHMpCisKKyAgICAgICAgICAgICMgZXhwYW5kIHRoZSB0ZW1wbGF0ZSB3aXRoIGtub3duIHZhbHVlcworICAgICAgICAgICAgdGVtcGxhdGUgPSBUZW1wbGF0ZShjb25mLmNvbW1pdF9tc2dfdGVtcGxhdGUpCisgICAgICAgICAgICByYXdfbXNnID0gdGVtcGxhdGUuc3Vic3RpdHV0ZShjb21wb25lbnRzID0gY29tcG9uZW50X3N0cikKKworICAgICAgICAgICAgIyBzYW5pdGl6ZSB0aGUgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBpbiBjb21tYW5kIGxpbmUKKyAgICAgICAgICAgIG1zZyA9IHJhd19tc2cucmVwbGFjZSgnIicsICdcXCInKQorCisgICAgICAgICAgICBydW5jbWQoJ2dpdCBjb21taXQgLW0gIiVzIiAlcycgJSAobXNnLCByZWxwYXRoKSkKKworZGVmIGFwcGx5X3BhdGNobGlzdChjb25mLCByZXBvcyk6CisgICAgIiIiCisgICAgICAgIGFwcGx5IHRoZSBnZW5lcmF0ZWQgcGF0Y2ggbGlzdCB0byBjb21ibyByZXBvCisgICAgIiIiCisgICAgZm9yIG5hbWUgaW4gcmVwb3M6CisgICAgICAgIHJlcG8gPSBjb25mLnJlcG9zW25hbWVdCisgICAgICAgIGxhc3RyZXYgPSByZXBvWyJsYXN0X3JldmlzaW9uIl0KKyAgICAgICAgcHJldnJldiA9IGxhc3RyZXYKKworICAgICAgICAjIEdldCBub24tYmxhbmsgbGluZXMgZnJvbSBwYXRjaCBsaXN0IGZpbGUKKyAgICAgICAgcGF0Y2hsaXN0ID0gW10KKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocmVwb1sncGF0Y2hsaXN0J10pIG9yIG5vdCBjb25mLmludGVyYWN0aXZlOgorICAgICAgICAgICAgIyBOb3RlOiB3ZSB3YW50IHRoaXMgdG8gZmFpbCBoZXJlIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QgYW5kIHdlJ3JlIG5vdCBpbgorICAgICAgICAgICAgIyBpbnRlcmFjdGl2ZSBtb2RlIHNpbmNlIHRoZSBmaWxlIHNob3VsZCBleGlzdCBpbiB0aGlzIGNhc2UKKyAgICAgICAgICAgIHdpdGggb3BlbihyZXBvWydwYXRjaGxpc3QnXSkgYXMgZjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hsaXN0LmFwcGVuZChsaW5lKQorCisgICAgICAgIGxkaXIgPSBjb25mLnJlcG9zW25hbWVdWydsb2NhbF9yZXBvX2RpciddCisgICAgICAgIGJyYW5jaCA9IGNvbmYucmVwb3NbbmFtZV0uZ2V0KCdicmFuY2gnLCAibWFzdGVyIikKKyAgICAgICAgYnJhbmNocmV2ID0gcnVuY21kKCJnaXQgcmV2LXBhcnNlICVzIiAlIGJyYW5jaCwgbGRpcikuc3RyaXAoKQorCisgICAgICAgIGlmIHBhdGNobGlzdDoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJBcHBseWluZyBwYXRjaGVzIGZyb20gJXMuLi4iICUgbmFtZSkKKyAgICAgICAgICAgIGxpbmVjb3VudCA9IGxlbihwYXRjaGxpc3QpCisgICAgICAgICAgICBpID0gMQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gcGF0Y2hsaXN0OgorICAgICAgICAgICAgICAgIHBhdGNoZmlsZSA9IGxpbmUuc3BsaXQoKVswXQorICAgICAgICAgICAgICAgIGxhc3RyZXYgPSBsaW5lLnNwbGl0KClbMV0KKyAgICAgICAgICAgICAgICBwYXRjaGRpc3AgPSBvcy5wYXRoLnJlbHBhdGgocGF0Y2hmaWxlKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZ2V0c2l6ZShwYXRjaGZpbGUpID09IDA6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCIoc2tpcHBpbmcgJWQvJWQgJXMgLSBubyBjaGFuZ2VzKSIgJSAoaSwgbGluZWNvdW50LCBwYXRjaGRpc3ApKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNtZCA9ICJnaXQgYW0gLS1rZWVwLWNyICVzLXAxICVzIiAlICgnLXMgJyBpZiByZXBvLmdldCgnc2lnbm9mZicsIFRydWUpIGVsc2UgJycsIHBhdGNoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkFwcGx5aW5nICVkLyVkOiAlcyIgJSAoaSwgbGluZWNvdW50LCBwYXRjaGRpc3ApKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBydW5jbWQoY21kKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnUnVubmluZyAiZ2l0IGFtIC0tYWJvcnQiIHRvIGNsZWFudXAgcmVwbycpCisgICAgICAgICAgICAgICAgICAgICAgICBydW5jbWQoImdpdCBhbSAtLWFib3J0IikKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignIiVzIiBmYWlsZWQnICUgY21kKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlBsZWFzZSBtYW51YWxseSBhcHBseSBwYXRjaCAlcyIgJSBwYXRjaGRpc3ApCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiTm90ZTogaWYgeW91IGV4aXQgYW5kIGNvbnRpbnVlIGFwcGx5aW5nIHdpdGhvdXQgbWFudWFsbHkgYXBwbHlpbmcgdGhlIHBhdGNoLCBpdCB3aWxsIGJlIHNraXBwZWQiKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRyb3BfdG9fc2hlbGwoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwcmV2cmV2ICE9IHJlcG9bJ2xhc3RfcmV2aXNpb24nXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZi51cGRhdGUobmFtZSwgImxhc3RfcmV2aXNpb24iLCBwcmV2cmV2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgICAgICAgICAgcHJldnJldiA9IGxhc3RyZXYKKyAgICAgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgICAgICMgT25jZSBhbGwgcGF0Y2hlcyBhcmUgYXBwbGllZCwgd2Ugc2hvdWxkIHVwZGF0ZQorICAgICAgICAgICAgIyBsYXN0X3JldmlzaW9uIHRvIHRoZSBicmFuY2ggaGVhZCBpbnN0ZWFkIG9mIHRoZSBsYXN0CisgICAgICAgICAgICAjIGFwcGxpZWQgcGF0Y2guIFRoZSB0d28gYXJlIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSB3aGVuCisgICAgICAgICAgICAjIHRoZSBsYXN0IGNvbW1pdCBpcyBhIG1lcmdlIGNvbW1pdCBvciB3aGVuIHRoZSBwYXRjaGVzIGF0CisgICAgICAgICAgICAjIHRoZSBicmFuY2ggaGVhZCB3ZXJlIGludGVudGlvbmFsbHkgZXhjbHVkZWQuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIElmIHdlIGRvIG5vdCBkbyB0aGF0IGZvciBhIG1lcmdlIGNvbW1pdCwgdGhlIG5leHQKKyAgICAgICAgICAgICMgY29tYm8tbGF5ZXIgcnVuIHdpbGwgb25seSBleGNsdWRlIHBhdGNoZXMgcmVhY2hhYmxlIGZyb20KKyAgICAgICAgICAgICMgb25lIG9mIHRoZSBtZXJnZWQgYnJhbmNoZXMgYW5kIHRyeSB0byByZS1hcHBseSBwYXRjaGVzCisgICAgICAgICAgICAjIGZyb20gb3RoZXIgYnJhbmNoZXMgZXZlbiB0aG91Z2ggdGhleSB3ZXJlIGFscmVhZHkKKyAgICAgICAgICAgICMgY29waWVkLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBJZiBwYXRjaGVzIHdlcmUgaW50ZW50aW9uYWxseSBleGNsdWRlZCwgdGhlIG5leHQgcnVuIHdpbGwKKyAgICAgICAgICAgICMgcHJlc2VudCB0aGVtIGFnYWluIGluc3RlYWQgb2Ygc2tpcHBpbmcgb3ZlciB0aGVtLiBUaGlzCisgICAgICAgICAgICAjIG1heSBvciBtYXkgbm90IGJlIGludGVuZGVkLCBzbyB0aGUgY29kZSBoZXJlIGlzIGNvbnNlcnZhdGl2ZQorICAgICAgICAgICAgIyBhbmQgb25seSBhZGRyZXNzZXMgdGhlICJoZWFkIGlzIG1lcmdlIGNvbW1pdCIgY2FzZS4KKyAgICAgICAgICAgIGlmIGxhc3RyZXYgIT0gYnJhbmNocmV2IGFuZCBcCisgICAgICAgICAgICAgICBsZW4ocnVuY21kKCJnaXQgc2hvdyAtLXByZXR0eT1mb3JtYXQ6JSVQIC0tbm8tcGF0Y2ggJXMiICUgYnJhbmNoLCBsZGlyKS5zcGxpdCgpKSA+IDE6CisgICAgICAgICAgICAgICAgbGFzdHJldiA9IGJyYW5jaHJldgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIk5vIHBhdGNoZXMgdG8gYXBwbHkgZnJvbSAlcyIgJSBuYW1lKQorICAgICAgICAgICAgbGFzdHJldiA9IGJyYW5jaHJldgorCisgICAgICAgIGlmIGxhc3RyZXYgIT0gcmVwb1snbGFzdF9yZXZpc2lvbiddOgorICAgICAgICAgICAgY29uZi51cGRhdGUobmFtZSwgImxhc3RfcmV2aXNpb24iLCBsYXN0cmV2KQorCitkZWYgYWN0aW9uX3NwbGl0cGF0Y2goY29uZiwgYXJncyk6CisgICAgIiIiCisgICAgICAgIGdlbmVyYXRlIHRoZSBjb21taXQgcGF0Y2ggYW5kCisgICAgICAgIHNwbGl0IHRoZSBwYXRjaCBwZXIgcmVwbworICAgICIiIgorICAgIGxvZ2dlci5kZWJ1ZygiYWN0aW9uX3NwbGl0cGF0Y2giKQorICAgIGlmIGxlbihhcmdzKSA+IDE6CisgICAgICAgIGNvbW1pdCA9IGFyZ3NbMV0KKyAgICBlbHNlOgorICAgICAgICBjb21taXQgPSAiSEVBRCIKKyAgICBwYXRjaGRpciA9ICJzcGxpdHBhdGNoLSVzIiAlIGNvbW1pdAorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRjaGRpcik6CisgICAgICAgIG9zLm1rZGlyKHBhdGNoZGlyKQorCisgICAgIyBmaWxlcmFuZ2Vfcm9vdCBpcyBmb3IgdGhlIHJlcG8gd2hvc2UgZGVzdF9kaXIgaXMgcm9vdCAiLiIKKyAgICAjIGFuZCBpdCBzaG91bGQgYmUgc3BlY2lmaWVkIGJ5IGV4Y2x1ZGluZyBhbGwgb3RoZXIgcmVwbyBkZXN0IGRpcgorICAgICMgbGlrZSAiLXggcmVwbzEgLXggcmVwbzIgLXggcmVwbzMgLi4uIgorICAgIGZpbGVyYW5nZV9yb290ID0gIiIKKyAgICBmb3IgbmFtZSBpbiBjb25mLnJlcG9zOgorICAgICAgICBkZXN0X2RpciA9IGNvbmYucmVwb3NbbmFtZV1bJ2Rlc3RfZGlyJ10KKyAgICAgICAgaWYgZGVzdF9kaXIgIT0gIi4iOgorICAgICAgICAgICAgZmlsZXJhbmdlX3Jvb3QgPSAnJXMgLXggIiVzLyoiJyAlIChmaWxlcmFuZ2Vfcm9vdCwgZGVzdF9kaXIpCisKKyAgICBmb3IgbmFtZSBpbiBjb25mLnJlcG9zOgorICAgICAgICBkZXN0X2RpciA9IGNvbmYucmVwb3NbbmFtZV1bJ2Rlc3RfZGlyJ10KKyAgICAgICAgcGF0Y2hfZmlsZW5hbWUgPSAiJXMvJXMucGF0Y2giICUgKHBhdGNoZGlyLCBuYW1lKQorICAgICAgICBpZiBkZXN0X2RpciA9PSAiLiI6CisgICAgICAgICAgICBjbWQgPSAiZ2l0IGZvcm1hdC1wYXRjaCAtbjEgLS1zdGRvdXQgJXNeLi4lcyB8IGZpbHRlcmRpZmYgLXAxICVzID4gJXMiICUgKGNvbW1pdCwgY29tbWl0LCBmaWxlcmFuZ2Vfcm9vdCwgcGF0Y2hfZmlsZW5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWQgPSAiZ2l0IGZvcm1hdC1wYXRjaCAtLW5vLXByZWZpeCAtbjEgLS1zdGRvdXQgJXNeLi4lcyAtLSAlcyA+ICVzIiAlIChjb21taXQsIGNvbW1pdCwgZGVzdF9kaXIsIHBhdGNoX2ZpbGVuYW1lKQorICAgICAgICBydW5jbWQoY21kKQorICAgICAgICAjIERldGVjdCBlbXB0eSBwYXRjaGVzIChpbmNsdWRpbmcgdGhvc2UgcHJvZHVjZWQgYnkgZmlsdGVyZGlmZiBhYm92ZQorICAgICAgICAjIHRoYXQgY29udGFpbiBvbmx5IHByZWFtYmxlIHRleHQpCisgICAgICAgIGlmIG9zLnBhdGguZ2V0c2l6ZShwYXRjaF9maWxlbmFtZSkgPT0gMCBvciBydW5jbWQoImZpbHRlcmRpZmYgJXMiICUgcGF0Y2hfZmlsZW5hbWUpID09ICIiOgorICAgICAgICAgICAgb3MucmVtb3ZlKHBhdGNoX2ZpbGVuYW1lKQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIihza2lwcGluZyAlcyAtIG5vIGNoYW5nZXMpIiwgbmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHBhdGNoX2ZpbGVuYW1lKQorCitkZWYgYWN0aW9uX2Vycm9yKGNvbmYsIGFyZ3MpOgorICAgIGxvZ2dlci5pbmZvKCJpbnZhbGlkIGFjdGlvbiAlcyIgJSBhcmdzWzBdKQorCithY3Rpb25zID0geworICAgICJpbml0IjogYWN0aW9uX2luaXQsCisgICAgInVwZGF0ZSI6IGFjdGlvbl91cGRhdGUsCisgICAgInB1bGwiOiBhY3Rpb25fcHVsbCwKKyAgICAic3BsaXRwYXRjaCI6IGFjdGlvbl9zcGxpdHBhdGNoLAorfQorCitkZWYgbWFpbigpOgorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigKKyAgICAgICAgdmVyc2lvbiA9ICJDb21ibyBMYXllciBSZXBvIFRvb2wgdmVyc2lvbiAlcyIgJSBfX3ZlcnNpb25fXywKKyAgICAgICAgdXNhZ2UgPSAiIiIlcHJvZyBbb3B0aW9uc10gYWN0aW9uCisKK0NyZWF0ZSBhbmQgdXBkYXRlIGEgY29tYmluYXRpb24gbGF5ZXIgcmVwb3NpdG9yeSBmcm9tIG11bHRpcGxlIGNvbXBvbmVudCByZXBvc2l0b3JpZXMuCisKK0FjdGlvbjoKKyAgaW5pdCAgICAgICAgICAgICAgICAgaW5pdGlhbGlzZSB0aGUgY29tYm8gbGF5ZXIgcmVwbworICB1cGRhdGUgW2NvbXBvbmVudHNdICBnZXQgcGF0Y2hlcyBmcm9tIGNvbXBvbmVudCByZXBvcyBhbmQgYXBwbHkgdGhlbSB0byB0aGUgY29tYm8gcmVwbworICBwdWxsIFtjb21wb25lbnRzXSAgICBqdXN0IHB1bGwgY29tcG9uZW50IHJlcG9zIG9ubHkKKyAgc3BsaXRwYXRjaCBbY29tbWl0XSAgZ2VuZXJhdGUgY29tbWl0IHBhdGNoIGFuZCBzcGxpdCBwZXIgY29tcG9uZW50LCBkZWZhdWx0IGNvbW1pdCBpcyBIRUFEIiIiKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1jIiwgIi0tY29uZiIsIGhlbHAgPSAic3BlY2lmeSB0aGUgY29uZmlnIGZpbGUgKGNvbmYvY29tYm8tbGF5ZXIuY29uZiBpcyB0aGUgZGVmYXVsdCkuIiwKKyAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsIGRlc3QgPSAiY29uZmZpbGUiLCBkZWZhdWx0ID0gImNvbmYvY29tYm8tbGF5ZXIuY29uZiIpCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWkiLCAiLS1pbnRlcmFjdGl2ZSIsIGhlbHAgPSAiaW50ZXJhY3RpdmUgbW9kZSwgdXNlciBjYW4gZWRpdCB0aGUgcGF0Y2ggbGlzdCBhbmQgcGF0Y2hlcyIsCisgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAiaW50ZXJhY3RpdmUiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLUQiLCAiLS1kZWJ1ZyIsIGhlbHAgPSAib3V0cHV0IGRlYnVnIGluZm9ybWF0aW9uIiwKKyAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJkZWJ1ZyIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbiIsICItLW5vLXB1bGwiLCBoZWxwID0gInNraXAgcHVsbGluZyBjb21wb25lbnQgcmVwb3MgZHVyaW5nIHVwZGF0ZSIsCisgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAibm9wdWxsIiwgZGVmYXVsdCA9IEZhbHNlKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0taGFyZC1yZXNldCIsCisgICAgICAgICAgICAgICBoZWxwID0gImluc3RlYWQgb2YgcHVsbCBkbyBmZXRjaCBhbmQgaGFyZC1yZXNldCBpbiBjb21wb25lbnQgcmVwb3MiLAorICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gImhhcmRfcmVzZXQiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLUgiLCAiLS1oaXN0b3J5IiwgaGVscCA9ICJpbXBvcnQgZnVsbCBoaXN0b3J5IG9mIGNvbXBvbmVudHMgZHVyaW5nIGluaXQiLAorICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVmYXVsdCA9IEZhbHNlKQorCisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHN5cy5hcmd2KQorCisgICAgIyBEaXNwYXRjaCB0byBhY3Rpb24gaGFuZGxlcgorICAgIGlmIGxlbihhcmdzKSA9PSAxOgorICAgICAgICBsb2dnZXIuZXJyb3IoIk5vIGFjdGlvbiBzcGVjaWZpZWQsIGV4aXRpbmciKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgZWxpZiBhcmdzWzFdIG5vdCBpbiBhY3Rpb25zOgorICAgICAgICBsb2dnZXIuZXJyb3IoIlVuc3VwcG9ydGVkIGFjdGlvbiAlcywgZXhpdGluZ1xuIiAlIChhcmdzWzFdKSkKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgIGVsaWYgbm90IG9zLnBhdGguZXhpc3RzKG9wdGlvbnMuY29uZmZpbGUpOgorICAgICAgICBsb2dnZXIuZXJyb3IoIk5vIHZhbGlkIGNvbmZpZyBmaWxlLCBleGl0aW5nXG4iKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgZWxzZToKKyAgICAgICAgaWYgb3B0aW9ucy5kZWJ1ZzoKKyAgICAgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorICAgICAgICBjb25mZGF0YSA9IENvbmZpZ3VyYXRpb24ob3B0aW9ucykKKyAgICAgICAgaW5pdG1vZGUgPSAoYXJnc1sxXSA9PSAnaW5pdCcpCisgICAgICAgIGNvbmZkYXRhLnNhbml0eV9jaGVjayhpbml0bW9kZSkKKyAgICAgICAgYWN0aW9ucy5nZXQoYXJnc1sxXSwgYWN0aW9uX2Vycm9yKShjb25mZGF0YSwgYXJnc1sxOl0pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdHJ5OgorICAgICAgICByZXQgPSBtYWluKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICByZXQgPSAxCisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Yyg1KQorICAgIHN5cy5leGl0KHJldCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9jb21iby1sYXllci1ob29rLWRlZmF1bHQuc2ggYi95b2N0by1wb2t5L3NjcmlwdHMvY29tYm8tbGF5ZXItaG9vay1kZWZhdWx0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFlM2EzYjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY29tYm8tbGF5ZXItaG9vay1kZWZhdWx0LnNoCkBAIC0wLDAgKzEsMjAgQEAKKyMhL2Jpbi9zaAorIyBIb29rIHRvIGFkZCBzb3VyY2UgY29tcG9uZW50L3JldmlzaW9uIGluZm8gdG8gY29tbWl0IG1lc3NhZ2UKKyMgUGFyYW1ldGVyOgorIyAgICQxIHBhdGNoLWZpbGUKKyMgICAkMiByZXZpc2lvbgorIyAgICQzIHJlcG9uYW1lCisKK3BhdGNoZmlsZT0kMQorcmV2PSQyCityZXBvbmFtZT0kMworCitzZWQgLWkgLWUgIjAsL15TdWJqZWN0Oi9zI15TdWJqZWN0OiBcW1BBVENIXF0gXCgkcmVwb25hbWU6IFwpKlwoLipcKSNTdWJqZWN0OiBcW1BBVENIXF0gJHJlcG9uYW1lOiBcMiMiICRwYXRjaGZpbGUKK2lmIGdyZXAgLXEgJ15TaWduZWQtb2ZmLWJ5OicgJHBhdGNoZmlsZTsgdGhlbgorICAgICMgSW5zZXJ0IGJlZm9yZSBTaWduZWQtb2ZmLWJ5LgorICAgIHNlZCAtaSAtZSAiMCwvXlNpZ25lZC1vZmYtYnk6L3MjXCheU2lnbmVkLW9mZi1ieTouKlwpI1woRnJvbSAkcmVwb25hbWUgcmV2OiAkcmV2XClcblxuXDEjIiAkcGF0Y2hmaWxlCitlbHNlCisgICAgIyBJbnNlcnQgYmVmb3JlIGZpbmFsIC0tLSBzZXBhcmF0b3IsIHdpdGggZXh0cmEgYmxhbmsgbGluZXMgcmVtb3ZlZC4KKyAgICBwZXJsIC1lICJcJF8gPSBqb2luKCcnLCA8Pik7IHMvXiguKlxTWyBcdF0qKShcbnxcblxzKlxuKS0tLVxuL1wkMVxuXG5Gcm9tICRyZXBvbmFtZSByZXY6ICRyZXZcbi0tLVxuL3M7IHByaW50OyIgJHBhdGNoZmlsZSA+JHBhdGNoZmlsZS50bXAKKyAgICBtdiAkcGF0Y2hmaWxlLnRtcCAkcGF0Y2hmaWxlCitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbWJvLWxheWVyLmNvbmYuZXhhbXBsZSBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb21iby1sYXllci5jb25mLmV4YW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBlMmI1OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb21iby1sYXllci5jb25mLmV4YW1wbGUKQEAgLTAsMCArMSw5MyBAQAorIyBjb21iby1sYXllciBleGFtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZQorCisjIERlZmF1bHQgdmFsdWVzIGZvciBhbGwgc2VjdGlvbnMuCitbREVGQVVMVF0KKworIyBBZGQgJ1NpZ25lZC1vZmYtYnknIHRvIGFsbCBjb21taXRzIHRoYXQgZ2V0IGltcG9ydGVkIGF1dG9tYXRpY2FsbHkuCitzaWdub2ZmID0gVHJ1ZQorCisjIGNvbXBvbmVudCBuYW1lCitbYml0YmFrZV0KKworIyBPdmVycmlkZSBzaWduZWRvZmYgZGVmYXVsdCBhYm92ZSAobm90IHZlcnkgdXNlZnVsLCBidXQgcG9zc2libGUpLgorc2lnbm9mZiA9IEZhbHNlCisKKyMgbWFuZGF0b3J5IG9wdGlvbnMKKyMgZ2l0IHVwc3RyZWFtIHVyaQorc3JjX3VyaSA9IGdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UKKworIyB0aGUgZGlyZWN0b3J5IHRvIGNsb25lIHRoZSBjb21wb25lbnQgcmVwbworbG9jYWxfcmVwb19kaXIgPSAvaG9tZS9reXUzL3NyYy90ZXN0L2JpdGJha2UKKworIyB0aGUgcmVsYXRpdmUgZGlyIHdpdGhpbiB0aGUgY29tYm8gcmVwbyB0byBwdXQgdGhlIGNvbXBvbmVudCBmaWxlcworIyB1c2UgIi4iIGlmIHRoZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhlIHJvb3QgZGlyCitkZXN0X2RpciA9IGJpdGJha2UKKworIyB0aGUgbGFzdCB1cGRhdGUgcmV2aXNpb24uCisjICJpbml0IiB3aWxsIHNldCB0aGlzIHRvIHRoZSBsYXRlc3QgcmV2aXNpb24gYXV0b21hdGljYWxseSwgaG93ZXZlciBpZiBpdAorIyBpcyBlbXB0eSB3aGVuICJ1cGRhdGUiIGlzIHJ1biwgdGhlIHRvb2wgd2lsbCBzdGFydCBmcm9tIHRoZSBmaXJzdCBjb21taXQuCisjIE5vdGUgdGhhdCB0aGlzIHZhbHVlIHdpbGwgZ2V0IHVwZGF0ZWQgYnkgInVwZGF0ZSIgaWYgdGhlIGNvbXBvbmVudCByZXBvJ3MKKyMgbGF0ZXN0IHJldmlzaW9uIGNoYW5nZWQgYW5kIHRoZSBvcGVyYXRpb24gY29tcGxldGVzIHN1Y2Nlc3NmdWxseS4KK2xhc3RfcmV2aXNpb24gPQorCisjIG9wdGlvbmFsIG9wdGlvbnM6CisKKyMgYnJhbmNoOiBzcGVjaWZ5IHRoZSBicmFuY2ggaW4gdGhlIGNvbXBvbmVudCByZXBvIHRvIHB1bGwgZnJvbQorIyAobWFzdGVyIGlmIG5vdCBzcGVjaWZpZWQpCisKKyMgZmlsZV9maWx0ZXI6IG9ubHkgaW5jbHVkZSB0aGUgc3BlY2lmaWVkIGZpbGUocykKKyMgZmlsZV9maWx0ZXIgPSBbcGF0aF0gW3BhdGhdIC4uLgorIyBleGFtcGxlOgorIyAgIGZpbGVfZmlsdGVyID0gc3JjLyAgOiBvbmx5IGluY2x1ZGUgdGhlIHN1YmRpciBzcmMKKyMgICBmaWxlX2ZpbHRlciA9IHNyYy8qLmMgOiBvbmx5IGluY2x1ZGUgdGhlIHNyYyAqLmMgZmlsZQorIyAgIGZpbGVfZmlsdGVyID0gc3JjL21haW4uYyBzcmMvTWFrZWZpbGUuYW0gOiBvbmx5IGluY2x1ZGUgdGhlc2UgdHdvIGZpbGVzCisKKyMgZmlsZV9leGNsdWRlOiBmaWx0ZXIgb3V0IHRoZXNlIGZpbGUocykKKyMgZmlsZV9leGNsdWRlID0gW3BhdGhdIFtwYXRoXSAuLi4KKyMKKyMgRWFjaCBlbnRyeSBtdXN0IG1hdGNoIGEgZmlsZSBuYW1lLiBJbiBjb250cmFzdCBkbyBmaWxlX2ZpbHRlciwgbWF0Y2hpbmcKKyMgYSBkaXJlY3RvcnkgaGFzIG5vIGVmZmVjdC4gVG8gYWNoaWV2ZSB0aGF0LCB1c2UgYXBwZW5kIGEgKiB3aWxkY2FyZAorIyBhdCB0aGUgZW5kLgorIworIyBXaWxkY2FyZHMgYXJlIGFwcGxpZWQgdG8gdGhlIGNvbXBsZXRlIHBhdGggYW5kIGFsc28gbWF0Y2ggc2xhc2hlcy4KKyMKKyMgZXhhbXBsZToKKyMgICBmaWxlX2V4Y2x1ZGUgPSBzcmMvZm9vYmFyLyogIDogZXhjbHVkZSBldmVyeXRoaW5nIHVuZGVyIHNyYy9mb29iYXIKKyMgICBmaWxlX2V4Y2x1ZGUgPSBzcmMvbWFpbi5jIDogZmlsdGVyIG91dCBtYWluLmMgYWZ0ZXIgaW5jbHVkaW5nIGl0IHdpdGggZmlsZV9maWx0ZXIgPSBzcmMvKi5jCisjICAgZmlsZV9leGNsdWRlID0gKn4gOiBleGNsdWRlIGJhY2t1cCBmaWxlcworCisjIGhvb2s6IGlmIHByb3ZpZGVkLCB0aGUgdG9vbCB3aWxsIGNhbGwgdGhlIGhvb2sgdG8gcHJvY2VzcyB0aGUgZ2VuZXJhdGVkCisjICAgICBwYXRjaCBmcm9tIHVwc3RyZWFtLCBhbmQgdGhlbiBhcHBseSB0aGUgbW9kaWZpZWQgcGF0Y2ggdG8gdGhlIGNvbWJvCisjICAgICByZXBvLgorIyB0aGUgaG9vayBzY3JpcHQgaXMgY2FsbGVkIGFzIGZvbGxvd3M6IC4vaG9vayBwYXRjaHBhdGggcmV2aXNpb24gcmVwb25hbWUKKyMgZXhhbXBsZToKKyMgICAgIGhvb2sgPSBjb21iby1sYXllci1ob29rLWRlZmF1bHQuc2gKKworIyBzaW5jZV9yZXZpc2lvbjoKKyMgICBzaW5jZV9yZXZpc2lvbiA9IHJlbGVhc2UtMS0yCisjICAgc2luY2VfcmV2aXNpb24gPSAxMjM0NSBhYmNkZgorIworIyBJZiBwcm92aWRlZCwgdHJ1bmNhdGUgaW1wb3J0ZWQgaGlzdG9yeSBkdXJpbmcgImNvbWJvLWxheWVyIC0taGlzdG9yeQorIyBpbml0IiBhdCB0aGUgc3BlY2lmaWVkIHJldmlzaW9uKHMpLiAgTW9yZSB0aGFuIG9uZSBjYW4gYmUgc3BlY2lmaWVkCisjIHRvIGN1dCBvZmYgbXVsdGlwbGUgY29tcG9uZW50IGJyYW5jaGVzLgorIworIyBUaGUgc3BlY2lmaWVkIGNvbW1pdHMgdGhlbXNlbHZlcyBkbyBub3QgZ2V0IGltcG9ydGVkLiBJbnN0ZWFkLCBhbgorIyBhcnRpZmljaWFsIGNvbW1pdCB3aXRoICJ1bmtub3duIiBhdXRob3IgaXMgY3JlYXRlZCB3aXRoIGEgY29udGVudAorIyB0aGF0IG1hdGNoZXMgdGhlIG9yaWdpbmFsIGNvbW1pdC4KKworW29lLWNvcmVdCitzcmNfdXJpID0gZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLWNvcmUKK2xvY2FsX3JlcG9fZGlyID0gL2hvbWUva3l1My9zcmMvdGVzdC9vZWNvcmUKK2Rlc3RfZGlyID0gLgorbGFzdF9yZXZpc2lvbiA9CitzaW5jZV9yZXZpc2lvbiA9IHNvbWUtdGFnLW9yLWNvbW1pdC1vbi1tYXN0ZXItYnJhbmNoCisKKyMgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBlbWJlZCBweXRob24gY29kZSBpbiB0aGUgY29uZmlnIHZhbHVlcy4gU2ltaWxhcgorIyB0byBiaXRiYWtlIGl0IGNvbnNpZGVycyBldmVyeSB2YWx1ZSBzdGFydGluZyB3aXRoIEAgdG8gYmUgYSBweXRob24KKyMgc2NyaXB0LgorIyBlLmcuIGxvY2FsX3JlcG9fZGlyIGNvdWxkIGVhc2lseSBiZSBjb25maWd1cmVkIHVzaW5nIGFuIGVudmlyb25tZW50CisjIHZhcmlhYmxlOgorIworIyBbYml0YmFrZV0KKyMgbG9jYWxfcmVwb19kaXIgPSBAb3MuZ2V0ZW52KCJMT0NBTF9SRVBPX0RJUiIpICsgIi9iaXRiYWtlIgorIwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYmItcGVyZi9iYi1tYXRyaXgtcGxvdC5zaCBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2JiLXBlcmYvYmItbWF0cml4LXBsb3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTM2YTI1NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2JiLXBlcmYvYmItbWF0cml4LXBsb3Quc2gKQEAgLTAsMCArMSwxMzcgQEAKKyMhL2Jpbi9iYXNoCisjCisjIENvcHlyaWdodCAoYykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgc2NyaXB0IG9wZXJhdGVzIG9uIHRoZSAuZGF0IGZpbGUgZ2VuZXJhdGVkIGJ5IGJiLW1hdHJpeC5zaC4gSXQgdG9sZXJhdGVzCisjIHRoZSBoZWFkZXIgYnkgc2tpcHBpbmcgdGhlIGZpcnN0IGxpbmUsIGJ1dCBlcnJvciBtZXNzYWdlcyBhbmQgYmFkIGRhdGEgcmVjb3JkcworIyBuZWVkIHRvIGJlIHJlbW92ZWQgZmlyc3QuIEl0IHdpbGwgZ2VuZXJhdGUgdGhyZWUgdmlld3Mgb2YgdGhlIHBsb3QsIGFuZCBsZWF2ZQorIyBhbiBpbnRlcmFjdGl2ZSB2aWV3IG9wZW4gZm9yIGZ1cnRoZXIgYW5hbHlzaXMuCisjCisjIEFVVEhPUlMKKyMgRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CisjCisKKyMgU2V0dXAgdGhlIGRlZmF1bHRzCitEQVRGSUxFPSJiYi1tYXRyaXguZGF0IgorWExBQkVMPSJCQl9OVU1CRVJfVEhSRUFEUyIKK1lMQUJFTD0iUEFSQUxMRUxfTUFLRSIKK0ZJRUxEPTMKK0RFRl9USVRMRT0iRWxhcHNlZCBUaW1lIChzZWNvbmRzKSIKK1BNM0RfRlJBR01FTlQ9InVuc2V0IHN1cmZhY2U7IHNldCBwbTNkIGF0IHMgaGlkZGVuM2QgMTAwIgorU0laRT0iNjQwLDQ4MCIKKworZnVuY3Rpb24gdXNhZ2UgeworQ01EPSQoYmFzZW5hbWUgJDApCitjYXQgPDxFT00KK1VzYWdlOiAkQ01EIFstZCBkYXRmaWxlXSBbLWYgZmllbGRdIFstaF0gWy10IHRpdGxlXSBbLXddCisgIC1kIGRhdGZpbGUgICAgVGhlIGRhdGEgZmlsZSBnZW5lcmF0ZWQgYnkgYmItbWF0cml4LnNoIChkZWZhdWx0OiAkREFURklMRSkKKyAgLWYgZmllbGQgICAgICBUaGUgZmllbGQgaW5kZXggdG8gcGxvdCBhcyB0aGUgWiBheGlzIGZyb20gdGhlIGRhdGEgZmlsZQorICAgICAgICAgICAgICAgIChkZWZhdWx0OiAkRklFTEQsICIkREVGX1RJVExFIikKKyAgLWggICAgICAgICAgICBEaXNwbGF5IHRoaXMgaGVscCBtZXNzYWdlCisgIC1zIFcsSCAgICAgICAgUE5HIGFuZCB3aW5kb3cgc2l6ZSBpbiBwaXhlbHMgKGRlZmF1bHQ6ICRTSVpFKQorICAtdCB0aXRsZSAgICAgIFRoZSB0aXRsZSB0byBkaXNwbGF5LCBzaG91bGQgZGVzY3JpYmUgdGhlIGZpZWxkICgtZikgYW5kIHVuaXRzCisgICAgICAgICAgICAgICAgKGRlZmF1bHQ6ICIkREVGX1RJVExFIikKKyAgLXcgICAgICAgICAgICBSZW5kZXIgdGhlIHBsb3QgYXMgd2lyZWZyYW1lIHdpdGggYSAyRCBjb2xvcm1hcCBwcm9qZWN0ZWQgb24gdGhlCisgICAgICAgICAgICAgICAgWFkgcGxhbmUgcmF0aGVyIHRoYW4gYXMgdGhlIHRleHR1cmUgZm9yIHRoZSBzdXJmYWNlCitFT00KK30KKworIyBQYXJzZSBhbmQgdmFsaWRhdGUgYXJndW1lbnRzCit3aGlsZSBnZXRvcHRzICJkOmY6aHM6dDp3IiBPUFQ7IGRvCisJY2FzZSAkT1BUIGluCisJZCkKKwkJREFURklMRT0iJE9QVEFSRyIKKwkJOzsKKwlmKQorCQlGSUVMRD0iJE9QVEFSRyIKKwkJOzsKKwloKQorCQl1c2FnZQorCQlleGl0IDAKKwkJOzsKKwlzKQorCQlTSVpFPSIkT1BUQVJHIgorCQk7OworCXQpCisJCVRJVExFPSIkT1BUQVJHIgorCQk7OworCXcpCisJCVBNM0RfRlJBR01FTlQ9InNldCBwbTNkIGF0IGIiCisJCVc9Ii13IgorCQk7OworCSopCisJCXVzYWdlCisJCWV4aXQgMQorCQk7OworCWVzYWMKK2RvbmUKKworIyBFbnN1cmUgdGhlIGRhdGEgZmlsZSBleGlzdHMKK2lmIFsgISAtZiAiJERBVEZJTEUiIF07IHRoZW4KKwllY2hvICJFUlJPUjogJERBVEZJTEUgZG9lcyBub3QgZXhpc3QiCisJdXNhZ2UKKwlleGl0IDEKK2ZpCitQTE9UX0JBU0VOQU1FPSR7REFURklMRSUuKn0tZiRGSUVMRCRXCisKKyMgU2V0IGEgc2FuZSB0aXRsZQorIyBUT0RPOiBwYXJzZSB0aGUgaGVhZGVyIGFuZCBkZWZpbmUgdGl0bGVzIGZvciBlYWNoIGZvcm1hdCBwYXJhbWV0ZXIgZm9yIFRJTUUoMSkKK2lmIFsgLXogIiRUSVRMRSIgXTsgdGhlbgorCWlmIFsgISAiJEZJRUxEIiA9PSAiMyIgXTsgdGhlbgorCQlUSVRMRT0iRmllbGQgJEZJRUxEIgorCWVsc2UKKwkJVElUTEU9IiRERUZfVElUTEUiCisJZmkKK2ZpCisKKyMgRGV0ZXJtaW5lIHRoZSBkZ3JpZDNkIG1lc2ggZGltZW5zaW9ucyBzaXplCitNSU49JCh0YWlsIC1uICsyICIkREFURklMRSIgfCBjdXQgLWQgJyAnIC1mIDEgfCBzZWQgJ3MvXjAqLy8nIHwgc29ydCAtbiB8IHVuaXEgfCBoZWFkIC1uMSkKK01BWD0kKHRhaWwgLW4gKzIgIiREQVRGSUxFIiB8IGN1dCAtZCAnICcgLWYgMSB8IHNlZCAncy9eMCovLycgfCBzb3J0IC1uIHwgdW5pcSB8IHRhaWwgLW4xKQorQkJfQ05UPSRbJHtNQVh9IC0gJE1JTiArIDFdCitNSU49JCh0YWlsIC1uICsyICIkREFURklMRSIgfCBjdXQgLWQgJyAnIC1mIDIgfCBzZWQgJ3MvXjAqLy8nIHwgc29ydCAtbiB8IHVuaXEgfCBoZWFkIC1uMSkKK01BWD0kKHRhaWwgLW4gKzIgIiREQVRGSUxFIiB8IGN1dCAtZCAnICcgLWYgMiB8IHNlZCAncy9eMCovLycgfCBzb3J0IC1uIHwgdW5pcSB8IHRhaWwgLW4xKQorUE1fQ05UPSRbJHtNQVh9IC0gJE1JTiArIDFdCisKKworKGNhdCA8PEVPRgorc2V0IHRpdGxlICIkVElUTEUiCitzZXQgeGxhYmVsICIkWExBQkVMIgorc2V0IHlsYWJlbCAiJFlMQUJFTCIKK3NldCBzdHlsZSBsaW5lIDEwMCBsdCA1IGx3IDEuNQorJFBNM0RfRlJBR01FTlQKK3NldCBkZ3JpZDNkICRQTV9DTlQsJEJCX0NOVCBzcGxpbmVzCitzZXQgdGljc2xldmVsIDAuMgorCitzZXQgdGVybSBwbmcgc2l6ZSAkU0laRQorc2V0IG91dHB1dCAiJFBMT1RfQkFTRU5BTUUucG5nIgorc3Bsb3QgIiREQVRGSUxFIiBldmVyeSA6OjEgdXNpbmcgMToyOiRGSUVMRCB3aXRoIGxpbmVzIGxzIDEwMAorCitzZXQgdmlldyA5MCwwCitzZXQgb3V0cHV0ICIkUExPVF9CQVNFTkFNRS1iYi5wbmciCityZXBsb3QKKworc2V0IHZpZXcgOTAsOTAKK3NldCBvdXRwdXQgIiRQTE9UX0JBU0VOQU1FLXBtLnBuZyIKK3JlcGxvdAorCitzZXQgdmlldyA2MCwzMAorc2V0IHRlcm0gd3h0IHNpemUgJFNJWkUKK3JlcGxvdAorRU9GCispIHwgZ251cGxvdCAtLXBlcnNpc3QKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2JiLXBlcmYvYmItbWF0cml4LnNoIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYmItcGVyZi9iYi1tYXRyaXguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTA2NDU2NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2JiLXBlcmYvYmItbWF0cml4LnNoCkBAIC0wLDAgKzEsNzkgQEAKKyMhL2Jpbi9iYXNoCisjCisjIENvcHlyaWdodCAoYykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgc2NyaXB0IHJ1bnMgQkJfQ01EICh0eXBpY2FsbHkgYnVpbGRpbmcgY29yZS1pbWFnZS1zYXRvKSBmb3IgYWxsCisjIGNvbWJpbmNhdGlvbnMgb2YgQkJfUkFOR0UgYW5kIFBNX1JBTkdFIHZhbHVlcy4gSXQgc2F2ZXMgb2ZmIGFsbCB0aGUgY29uc29sZQorIyBsb2dzLCB0aGUgYnVpbGRzdGF0cyBkaXJlY3RvcmllcywgYW5kIGNyZWF0ZXMgYSBiYi1wbS1ydW50aW1lLmRhdCBmaWxlIHdoaWNoCisjIGNhbiBiZSB1c2VkIHRvIHBvc3Rwcm9jZXNzIHRoZSByZXN1bHRzIHdpdGggYSBwbG90dGluZyB0b29sLCBzcHJlYWRzaGVldCwgZXRjLgorIyBCZWZvcmUgcnVubmluZyB0aGlzIHNjcmlwdCwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgcHJlLWRvd25sb2FkIGFsbCB0aGUKKyMgbmVjZXNzYXJ5IHNvdXJjZXMgYnkgcGVyZm9ybWluZyB0aGUgQkJfQ01EIG9uY2UgbWFudWFsbHkuIEl0IGlzIGFsc28gYSBnb29kCisjIGlkZWEgdG8gZGlzYWJsZSBjcm9uIHRvIGF2b2lkIHJ1bnRpbWUgdmFyaWF0aW9ucyBjYXVzZWQgYnkgdGhpbmdzIGxpa2UgdGhlCisjIGxvY2F0ZSBwcm9jZXNzLiBCZSBzdXJlIHRvIHNhbml0aXplIHRoZSBkYXQgZmlsZSBwcmlvciB0byBwb3N0LXByb2Nlc3NpbmcgYXMKKyMgaXQgbWF5IGNvbnRhaW4gZXJyb3IgbWVzc2FnZXMgb3IgYmFkIHJ1bnMgdGhhdCBzaG91bGQgYmUgcmVtb3ZlZC4KKyMKKyMgQVVUSE9SUworIyBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKyMKKworIyBUaGUgZm9sbG93aW5nIHJhbmdlcyBhcmUgYXBwcm9wcmlhdGUgZm9yIGEgNCBjb3JlIHN5c3RlbSB3aXRoIDggbG9naWNhbCB1bml0cworIyBVc2UgbGVhZGluZyAwcyB0byBlbnN1cmUgYWxsIGRpZ2l0cyBhcmUgdGhlIHNhbWUgc3RyaW5nIGxlbmd0aCwgdGhpcyByZXN1bHRzCisjIGluIG5pY2UgbG9nIGZpbGUgbmFtZXMgYW5kIGNvbHVtbmFyIGRhdCBmaWxlcy4KK0JCX1JBTkdFPSIwNCAwNSAwNiAwNyAwOCAwOSAxMCAxMSAxMiAxMyAxNCAxNSAxNiIKK1BNX1JBTkdFPSIwNCAwNSAwNiAwNyAwOCAwOSAxMCAxMSAxMiAxMyAxNCAxNSAxNiIKKworREFUQURJUj0iYmItbWF0cml4LSQkIgorQkJfQ01EPSJiaXRiYWtlIGNvcmUtaW1hZ2UtbWluaW1hbCIKK1JVTlRJTUVfTE9HPSIkREFUQURJUi9iYi1tYXRyaXguZGF0IgorCisjIFNlZSBUSU1FKDEpIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSB0aW1lIGZvcm1hdCBwYXJhbWV0ZXJzCisjIFRoZSBmb2xsb3dpbmcgYWxsIHJlcG9ydCAwOiBXIEsgciBzIHQgdworVElNRV9TVFI9IiVlICVTICVVICVQICVjICV3ICVSICVGICVNICV4IgorCisjIFByZXBhcmUgdGhlIERBVEFESVIKK21rZGlyICREQVRBRElSCitpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwllY2hvICJGYWlsZWQgdG8gY3JlYXRlICREQVRBRElSLiIKKwlleGl0IDEKK2ZpCisKKyMgQWRkIGEgc2ltcGxlIGhlYWRlcgorZWNobyAiQkIgUE0gJFRJTUVfU1RSIiA+ICRSVU5USU1FX0xPRworZm9yIEJCIGluICRCQl9SQU5HRTsgZG8KKwlmb3IgUE0gaW4gJFBNX1JBTkdFOyBkbworCQlSVU5ESVI9IiREQVRBRElSLyRCQi0kUE0tYnVpbGQiCisJCW1rZGlyICRSVU5ESVIKKwkJQkJfTE9HPSRSVU5ESVIvJEJCLSRQTS1iaXRiYWtlLmxvZworCQlkYXRlCisJCWVjaG8gIkJCPSRCQiBQTT0kUE0gTG9nZ2luZyB0byAkQkJfTE9HIgorCisJCWVjaG8gLW4gIiAgUHJlcGFyaW5nIHRoZSB3b3JrIGRpcmVjdG9yeS4uLiAiCisJCXJtIC1yZiBwc2V1ZG9kb25lIHRtcCBzc3RhdGUtY2FjaGUgdG1wLWVnbGliYyAmPiAvZGV2L251bGwKKwkJZWNobyAiZG9uZSIKKworCQkjIEV4cG9ydCB0aGUgdmFyaWFibGVzIHVuZGVyIHRlc3QgYW5kIHJ1biB0aGUgYml0YmFrZSBjb21tYW5kCisJCSMgU3RyaXAgYW55IGxlYWRpbmcgemVyb2VzIGJlZm9yZSBwYXNzaW5nIHRvIGJpdGJha2UKKwkJZXhwb3J0IEJCX05VTUJFUl9USFJFQURTPSQoZWNobyAkQkIgfCBzZWQgJ3MvXjAqLy8nKQorCQlleHBvcnQgUEFSQUxMRUxfTUFLRT0iLWogJChlY2hvICRQTSB8IHNlZCAncy9eMCovLycpIgorCQkvdXNyL2Jpbi90aW1lIC1mICIkQkIgJFBNICRUSU1FX1NUUiIgLWEgLW8gJFJVTlRJTUVfTE9HICRCQl9DTUQgJj4gJEJCX0xPRworCisJCWVjaG8gIiAgJCh0YWlsIC1uMSAkUlVOVElNRV9MT0cpIgorCQljcCAtYSB0bXAvYnVpbGRzdGF0cyAkUlVORElSLyRCQi0kUE0tYnVpbGRzdGF0cworCWRvbmUKK2RvbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2JiLXBlcmYvYnVpbGRzdGF0cy5zaCBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2JiLXBlcmYvYnVpbGRzdGF0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NjE1OGE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYmItcGVyZi9idWlsZHN0YXRzLnNoCkBAIC0wLDAgKzEsOTAgQEAKKyMhL2Jpbi9iYXNoCisjCisjIENvcHlyaWdodCAoYykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjIEdpdmVuIGEgJ2J1aWxkc3RhdHMnIHBhdGggKGNyZWF0ZWQgYnkgYml0YmFrZSB3aGVuIHNldHRpbmcKKyMgVVNFUl9DTEFTU0VTID89ICJidWlsZHN0YXRzIiBvbiBsb2NhbC5jb25mKSBhbmQgdGFzayBuYW1lcywgb3V0cHV0cworIyAnPHRhc2s+IDxyZWNpcGU+IDxlbGFwc2VkIHRpbWU+JyBmb3IgYWxsIHJlY2lwZXMuIEVsYXBzZWQgdGltZXMgYXJlIGluCisjIHNlY29uZHMsIGFuZCB0YXNrIHNob3VsZCBiZSBnaXZlbiB3aXRob3V0IHRoZSAnZG9fJyBwcmVmaXguCisjCisjIFNvbWUgdXNlZnVsIHBpcGVsaW5lcworIworIyAxLiBUYXNrcyB3aXRoIGxhcmdlc3QgZWxhcHNlZCB0aW1lcworIyAkIGJ1aWxkc3RhdHMuc2ggLWIgPGJ1aWxkc3RhdHM+IHwgc29ydCAtazMgLW4gLXIgfCBoZWFkCisjCisjIDIuIE1pbiwgbWF4LCBzdW0gcGVyIHRhc2sgKGluIG5lZWRzIEdOVSBkYXRhbWFzaCkKKyMgJCBidWlsZHN0YXRzLnNoIC1iIDxidWlsZHN0YXRzPiB8IGRhdGFtYXNoIC10JyAnIC1nMSBtaW4gMyBtYXggMyBzdW0gMyB8IHNvcnQgLWs0IC1uIC1yCisjCisjIEFVVEhPUlMKKyMgTGVvbmFyZG8gU2FuZG92YWwgPGxlb25hcmRvLnNhbmRvdmFsLmdvbnphbGV6QGxpbnV4LmludGVsLmNvbT4KKyMKK0JTX0RJUj0idG1wL2J1aWxkc3RhdHMiCitUQVNLUz0iY29tcGlsZTpjb25maWd1cmU6ZmV0Y2g6aW5zdGFsbDpwYXRjaDpwb3B1bGF0ZV9saWM6cG9wdWxhdGVfc3lzcm9vdDp1bnBhY2siCisKK2Z1bmN0aW9uIHVzYWdlIHsKK0NNRD0kKGJhc2VuYW1lICQwKQorY2F0IDw8RU9NCitVc2FnZTogJENNRCBbLWIgYnVpbGRzdGF0c19kaXJdIFstdCBkb190YXNrXQorICAtYiBidWlsZHN0YXRzIFRoZSBwYXRoIHdoZXJlIHRoZSBmb2xkZXIgcmVzaWRlcworICAgICAgICAgICAgICAgIChkZWZhdWx0OiAiJEJTX0RJUiIpCisgIC10IHRhc2tzICAgICAgVGhlIHRhc2tzIHRvIGJlIGNvbXB1dGVkCisgICAgICAgICAgICAgICAgKGRlZmF1bHQ6ICIkVEFTS1MiKQorICAtaCAgICAgICAgICAgIERpc3BsYXkgdGhpcyBoZWxwIG1lc3NhZ2UKK0VPTQorfQorCisjIFBhcnNlIGFuZCB2YWxpZGF0ZSBhcmd1bWVudHMKK3doaWxlIGdldG9wdHMgImI6dDpoIiBPUFQ7IGRvCisJY2FzZSAkT1BUIGluCisJYikKKwkJQlNfRElSPSIkT1BUQVJHIgorCQk7OworCXQpCisJCVRBU0tTPSIkT1BUQVJHIgorCQk7OworCWgpCisJCXVzYWdlCisJCWV4aXQgMAorCQk7OworCSopCisJCXVzYWdlCisJCWV4aXQgMQorCQk7OworCWVzYWMKK2RvbmUKKworIyBFbnN1cmUgdGhlIGJ1aWxkc3RhdHMgZm9sZGVyIGV4aXN0cworaWYgWyAhIC1kICIkQlNfRElSIiBdOyB0aGVuCisJZWNobyAiRVJST1I6ICRCU19ESVIgZG9lcyBub3QgZXhpc3QiCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisKK1JFQ0lQRV9GSUVMRD0xCitUSU1FX0ZJRUxEPTQKKwordGFza3M9KCR7VEFTS1MvLzovIH0pCitmb3IgdGFzayBpbiAiJHt0YXNrc1tAXX0iOyBkbworICAgIHRhc2s9ImRvXyR7dGFza30iCisgICAgZm9yIGZpbGUgaW4gJChmaW5kICR7QlNfRElSfSAtdHlwZSBmIC1uYW1lICR7dGFza30pOyBkbworICAgICAgICByZWNpcGU9JChzZWQgLW4gLWUgIi8kdGFzay9wIiAke2ZpbGV9IHwgY3V0IC1kICc6JyAtZiR7UkVDSVBFX0ZJRUxEfSkKKyAgICAgICAgdGltZT0kKHNlZCAtbiAtZSAiLyR0YXNrL3AiICR7ZmlsZX0gfCBjdXQgLWQgJzonIC1mJHtUSU1FX0ZJRUxEfSB8IGN1dCAtZCAnICcgLWYyKQorICAgICAgICBlY2hvICIke3Rhc2t9ICR7cmVjaXBlfSAke3RpbWV9IgorICAgIGRvbmUKK2RvbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2JidmFycy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2JidmFycy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wODk2ZDY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYmJ2YXJzLnB5CkBAIC0wLDAgKzEsMTg2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorIworIyBDb3B5cmlnaHQgKEMpIERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPiwgMjAxMAorCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBnZXRvcHQKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCByZQorCitkZWYgdXNhZ2UoKToKKyAgICBwcmludCAnVXNhZ2U6ICVzIC1kIEZJTEVOQU1FIFstZCBGSUxFTkFNRV0qIC1tIE1FVEFESVIgWy1tIE1BVEFESVJdKicgJSBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKQorICAgIHByaW50ICcgIC1kIEZJTEVOQU1FICAgICAgICAgZG9jdW1lbnRhdGlvbiBmaWxlIHRvIHNlYXJjaCcKKyAgICBwcmludCAnICAtaCwgLS1oZWxwICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0JworICAgIHByaW50ICcgIC1tIE1FVEFESVIgICAgICAgICAgbWV0YSBkaXJlY3RvcnkgdG8gc2VhcmNoIGZvciByZWNpcGVzJworICAgIHByaW50ICcgIC10IEZJTEVOQU1FICAgICAgICAgZG9jdW1lbnRhdGlvbiBjb25maWcgZmlsZSAoZm9yIGRvYyB0YWdzKScKKyAgICBwcmludCAnICAtVCAgICAgICAgICAgICAgICAgIE9ubHkgZGlzcGxheSB2YXJpYWJsZXMgd2l0aCBkb2MgdGFncyAocmVxdWlyZXMgLXQpJworCitkZWYgcmVjaXBlX2JidmFycyhyZWNpcGUpOgorICAgICcnJyBSZXR1cm4gYSB1bmlxdWUgc2V0IG9mIGV2ZXJ5IGJidmFyIGVuY291bnRlcmVkIGluIHRoZSByZWNpcGUgJycnCisgICAgcHJvZyA9IHJlLmNvbXBpbGUoIltBLVpfXSsiKQorICAgIHZzZXQgPSBzZXQoKQorICAgIHRyeToKKyAgICAgICAgciA9IG9wZW4ocmVjaXBlKQorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIChlcnJubywgc3RyZXJyb3IpOgorICAgICAgICBwcmludCAnV0FSTklORzogRmFpbGVkIHRvIG9wZW4gcmVjaXBlICcsIHJlY2lwZQorICAgICAgICBwcmludCBzdHJlcnJvcgorCisgICAgZm9yIGxpbmUgaW4gcjoKKyAgICAgICAgIyBTdHJpcCBhbnkgY29tbWVudHMgZnJvbSB0aGUgbGluZQorICAgICAgICBsaW5lID0gbGluZS5yc3BsaXQoJyMnKVswXQorICAgICAgICB2c2V0ID0gdnNldC51bmlvbihzZXQocHJvZy5maW5kYWxsKGxpbmUpKSkKKyAgICByLmNsb3NlKCkKKworICAgIGJidmFycyA9IHt9CisgICAgZm9yIHYgaW4gdnNldDoKKyAgICAgICAgYmJ2YXJzW3ZdID0gMQorCisgICAgcmV0dXJuIGJidmFycworCitkZWYgY29sbGVjdF9iYnZhcnMobWV0YWRpcik6CisgICAgJycnIFdhbGsgdGhlIG1ldGFkaXIgYW5kIGNvbGxlY3QgdGhlIGJidmFycyBmcm9tIGVhY2ggcmVjaXBlIGZvdW5kICcnJworICAgIGJidmFycyA9IHt9CisgICAgZm9yIHJvb3QsZGlycyxmaWxlcyBpbiBvcy53YWxrKG1ldGFkaXIpOgorICAgICAgICBmb3IgbmFtZSBpbiBmaWxlczoKKyAgICAgICAgICAgIGlmIG5hbWUuZmluZCgiLmJiIikgPj0gMDoKKyAgICAgICAgICAgICAgICBmb3Iga2V5IGluIHJlY2lwZV9iYnZhcnMob3MucGF0aC5qb2luKHJvb3QsbmFtZSkpLml0ZXJrZXlzKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGJidmFycy5oYXNfa2V5KGtleSk6CisgICAgICAgICAgICAgICAgICAgICAgICBiYnZhcnNba2V5XSA9IGJidmFyc1trZXldICsgMQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYmJ2YXJzW2tleV0gPSAxCisgICAgcmV0dXJuIGJidmFycworCitkZWYgYmJ2YXJfaXNfZG9jdW1lbnRlZCh2YXIsIGRvY2ZpbGVzKToKKyAgICBwcm9nID0gcmUuY29tcGlsZSgiLiooJHxbXkEtWl9dKSVzKFteQS1aX118JCkiICUgKHZhcikpCisgICAgZm9yIGRvYyBpbiBkb2NmaWxlczoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZiA9IG9wZW4oZG9jKQorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyAoZXJybm8sIHN0cmVycm9yKToKKyAgICAgICAgICAgIHByaW50ICdXQVJOSU5HOiBGYWlsZWQgdG8gb3BlbiBkb2MgJywgZG9jCisgICAgICAgICAgICBwcmludCBzdHJlcnJvcgorICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgaWYgcHJvZy5tYXRjaChsaW5lKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBmLmNsb3NlKCkKKyAgICByZXR1cm4gRmFsc2UKKworZGVmIGJidmFyX2RvY3RhZyh2YXIsIGRvY2NvbmYpOgorICAgIHByb2cgPSByZS5jb21waWxlKCdeJXNcW2RvY1xdICo9ICoiKC4qKSInICUgKHZhcikpCisgICAgaWYgZG9jY29uZiA9PSAiIjoKKyAgICAgICAgcmV0dXJuICI/IgorCisgICAgdHJ5OgorICAgICAgICBmID0gb3Blbihkb2Njb25mKQorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIChlcnJubywgc3RyZXJyb3IpOgorICAgICAgICByZXR1cm4gc3RyZXJyb3IKKworICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgIG0gPSBwcm9nLnNlYXJjaChsaW5lKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgcmV0dXJuIG0uZ3JvdXAoMSkKKworICAgIGYuY2xvc2UoKQorICAgIHJldHVybiAiIgorCitkZWYgbWFpbigpOgorICAgIGRvY2ZpbGVzID0gW10KKyAgICBtZXRhZGlycyA9IFtdCisgICAgYmJ2YXJzID0ge30KKyAgICB1bmRvY3VtZW50ZWQgPSBbXQorICAgIGRvY2NvbmYgPSAiIgorICAgIG9ubHlkb2N0YWdzID0gRmFsc2UKKworICAgICMgQ29sbGVjdCBhbmQgdmFsaWRhdGUgaW5wdXQKKyAgICB0cnk6CisgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgImQ6aG06dDpUIiwgWyJoZWxwIl0pCisgICAgZXhjZXB0IGdldG9wdC5HZXRvcHRFcnJvciwgZXJyOgorICAgICAgICBwcmludCAnJXMnICUgc3RyKGVycikKKyAgICAgICAgdXNhZ2UoKQorICAgICAgICBzeXMuZXhpdCgyKQorCisgICAgZm9yIG8sIGEgaW4gb3B0czoKKyAgICAgICAgaWYgbyBpbiAoJy1oJywgJy0taGVscCcpOgorICAgICAgICAgICAgdXNhZ2UoKQorICAgICAgICAgICAgc3lzLmV4aXQoMCkKKyAgICAgICAgZWxpZiBvID09ICctZCc6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShhKToKKyAgICAgICAgICAgICAgICBkb2NmaWxlcy5hcHBlbmQoYSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgJ0VSUk9SOiBkb2N1bWVudGF0aW9uIGZpbGUgJXMgaXMgbm90IGEgcmVndWxhciBmaWxlJyAlIChhKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDMpCisgICAgICAgIGVsaWYgbyA9PSAnLW0nOgorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihhKToKKyAgICAgICAgICAgICAgICBtZXRhZGlycy5hcHBlbmQoYSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgJ0VSUk9SOiBtZXRhIGRpcmVjdG9yeSAlcyBpcyBub3QgYSBkaXJlY3RvcnknICUgKGEpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoNCkKKyAgICAgICAgZWxpZiBvID09ICItdCI6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShhKToKKyAgICAgICAgICAgICAgICBkb2Njb25mID0gYQorICAgICAgICBlbGlmIG8gPT0gIi1UIjoKKyAgICAgICAgICAgIG9ubHlkb2N0YWdzID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXNzZXJ0IEZhbHNlLCAidW5oYW5kbGVkIG9wdGlvbiIKKworICAgIGlmIGxlbihkb2NmaWxlcykgPT0gMDoKKyAgICAgICAgcHJpbnQgJ0VSUk9SOiBubyBkb2NmaWxlIHNwZWNpZmllZCcKKyAgICAgICAgdXNhZ2UoKQorICAgICAgICBzeXMuZXhpdCg1KQorCisgICAgaWYgbGVuKG1ldGFkaXJzKSA9PSAwOgorICAgICAgICBwcmludCAnRVJST1I6IG5vIG1ldGFkaXIgc3BlY2lmaWVkJworICAgICAgICB1c2FnZSgpCisgICAgICAgIHN5cy5leGl0KDYpCisKKyAgICBpZiBvbmx5ZG9jdGFncyBhbmQgZG9jY29uZiA9PSAiIjoKKyAgICAgICAgcHJpbnQgJ0VSUk9SOiBubyBkb2Njb25mIHNwZWNpZmllZCcKKyAgICAgICAgdXNhZ2UoKQorICAgICAgICBzeXMuZXhpdCg3KQorCisgICAgIyBDb2xsZWN0IGFsbCB0aGUgdmFyaWFibGUgbmFtZXMgZnJvbSB0aGUgcmVjaXBlcyBpbiB0aGUgbWV0YWRpcnMKKyAgICBmb3IgbSBpbiBtZXRhZGlyczoKKyAgICAgICAgZm9yIGtleSxjbnQgaW4gY29sbGVjdF9iYnZhcnMobSkuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiBiYnZhcnMuaGFzX2tleShrZXkpOgorICAgICAgICAgICAgICAgIGJidmFyc1trZXldID0gYmJ2YXJzW2tleV0gKyBjbnQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYmJ2YXJzW2tleV0gPSBjbnQKKworICAgICMgQ2hlY2sgZWFjaCB2YXIgZm9yIGRvY3VtZW50YXRpb24KKyAgICB2YXJsZW4gPSAwCisgICAgZm9yIHYgaW4gYmJ2YXJzLml0ZXJrZXlzKCk6CisgICAgICAgIGlmIGxlbih2KSA+IHZhcmxlbjoKKyAgICAgICAgICAgIHZhcmxlbiA9IGxlbih2KQorICAgICAgICBpZiBub3QgYmJ2YXJfaXNfZG9jdW1lbnRlZCh2LCBkb2NmaWxlcyk6CisgICAgICAgICAgICB1bmRvY3VtZW50ZWQuYXBwZW5kKHYpCisgICAgdW5kb2N1bWVudGVkLnNvcnQoKQorICAgIHZhcmxlbiA9IHZhcmxlbiArIDEKKworICAgICMgUmVwb3J0IGFsbCB1bmRvY3VtZW50ZWQgdmFyaWFibGVzCisgICAgcHJpbnQgJ0ZvdW5kICVkIHVuZG9jdW1lbnRlZCBiYiB2YXJpYWJsZXMgKG91dCBvZiAlZCk6JyAlIChsZW4odW5kb2N1bWVudGVkKSwgbGVuKGJidmFycykpCisgICAgaGVhZGVyID0gJyVzJXMlcycgJSAoc3RyKCJWQVJJQUJMRSIpLmxqdXN0KHZhcmxlbiksIHN0cigiQ09VTlQiKS5sanVzdCg2KSwgc3RyKCJET0NUQUciKS5sanVzdCg3KSkKKyAgICBwcmludCBoZWFkZXIKKyAgICBwcmludCBzdHIoIiIpLmxqdXN0KGxlbihoZWFkZXIpLCAnPScpCisgICAgZm9yIHYgaW4gdW5kb2N1bWVudGVkOgorICAgICAgICBkb2N0YWcgPSBiYnZhcl9kb2N0YWcodiwgZG9jY29uZikKKyAgICAgICAgaWYgbm90IG9ubHlkb2N0YWdzIG9yIG5vdCBkb2N0YWcgPT0gIiI6CisgICAgICAgICAgICBwcmludCAnJXMlcyVzJyAlICh2LmxqdXN0KHZhcmxlbiksIHN0cihiYnZhcnNbdl0pLmxqdXN0KDYpLCBkb2N0YWcpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2J1aWxkLXBlcmYtdGVzdC5zaCBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2J1aWxkLXBlcmYtdGVzdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZGQ3ODg1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYnVpbGQtcGVyZi10ZXN0LnNoCkBAIC0wLDAgKzEsMzY5IEBACisjIS9iaW4vYmFzaAorIworIyBUaGlzIHNjcmlwdCBydW5zIGEgc2VyaWVzIG9mIHRlc3RzICAod2l0aCBhbmQgd2l0aG91dCBzc3RhdGUpIGFuZCByZXBvcnRzIGJ1aWxkIHRpbWUgKGFuZCB0bXAvIHNpemUpCisjIAorIyBCdWlsZCBwZXJmb3JtYW5jZSB0ZXN0IHNjcmlwdAorIworIyBDb3B5cmlnaHQgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisjCisjCisjIEFVVEhPUlM6CisjIFN0ZWZhbiBTdGFuYWNhciA8c3RlZmFueC5zdGFuYWNhckBpbnRlbC5jb20+CisKKworTUU9JChiYXNlbmFtZSAkMCkKKworIworIyB1c2FnZSBhbmQgc2V0dXAKKyMKKwordXNhZ2UgKCkgeworY2F0IDw8IEVPVAorVXNhZ2U6ICRNRSBbLWhdCisgICAgICAgJE1FIFstYyA8Y29tbWl0Pl0gWy12XSBbLW0gPHZhbD5dIFstaiA8dmFsPl0gWy10IDx2YWw+XSBbLWkgPGltYWdlLW5hbWU+XSBbLWQgPHBhdGg+XQorT3B0aW9uczoKKyAgICAgICAgLWgKKyAgICAgICAgICAgICAgICBEaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdC4KKyAgICAgICAgLWMgPGNvbW1pdD4KKyAgICAgICAgICAgICAgICBnaXQgY2hlY2tvdXQgPGNvbW1pdD4gYmVmb3JlIGFueXRoaW5nIGVsc2UKKyAgICAgICAgLXYKKyAgICAgICAgICAgICAgICBTaG93IGJpdGJha2Ugb3V0cHV0LCBkb24ndCByZWRpcmVjdCBpdCB0byBhIGxvZy4KKyAgICAgICAgLW0gPG1hY2hpbmU+CisgICAgICAgICAgICAgICAgVmFsdWUgZm9yIE1BQ0hJTkUuIERlZmF1bHQgaXMgcWVtdXg4Ni4KKyAgICAgICAgLWogPHZhbD4KKyAgICAgICAgICAgICAgICBWYWx1ZSBmb3IgUEFSQUxMRUxfTUFLRS4gRGVmYXVsdCBpcyA4LiAKKyAgICAgICAgLXQgPHZhbD4KKyAgICAgICAgICAgICAgICBWYWx1ZSBmb3IgQkJfTlVNQkVSX1RIUkVBRFMuIERlZmF1bHQgaXMgOC4KKyAgICAgICAgLWkgPGltYWdlLW5hbWU+CisgICAgICAgICAgICAgICAgSW5zdGVhZCBvZiB0aW1pbmcgYWdhaW5zdCBjb3JlLWltYWdlLXNhdG8sIHVzZSA8aW1hZ2UtbmFtZT4KKyAgICAgICAgLWQgPHBhdGg+CisgICAgICAgICAgICAgICAgVXNlIDxwYXRoPiBhcyBETF9ESVIKKyAgICAgICAgLXAgPGdpdGhhc2g+CisgICAgICAgICAgICAgICAgQ2hlcnJ5IHBpY2sgZ2l0aGFzaCBvbnRvIHRoZSBjb21taXQKKyAgICAgICAgICAgICAgICAKK05vdGU6IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgbXVzdCBiZSBpbnNpZGUgYSBwb2t5IGdpdCBjbG9uZS4KKyAKK0VPVAorfQorCisKK2lmIGNsb25lZGlyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwpOyB0aGVuCisgICAgICAgIGNkICRjbG9uZWRpcgorZWxzZQorICAgICAgICBlY2hvICJUaGUgY3VycmVudCB3b3JraW5nIGRpciBkb2Vzbid0IHNlZW0gdG8gYmUgYSBwb2t5IGdpdCBjbG9uZS4gUGxlYXNlIGNkIHRoZXJlIGJlZm9yZSBydW5uaW5nICRNRSIKKyAgICAgICAgZXhpdCAxCitmaQorCitJTUFHRT0iY29yZS1pbWFnZS1zYXRvIgordmVyYm9zZT0wCitkbGRpcj0KK2NvbW1pdD0KK3BtYWtlPQorY2hlcnJ5cGlja3M9Cit3aGlsZSBnZXRvcHRzICJodmM6bTpqOnQ6aTpkOnA6IiBvcHQ7IGRvCisgICAgICAgIGNhc2UgJG9wdCBpbgorICAgICAgICAgICAgICAgIGgpICAgICAgdXNhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQgMAorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICB2KSAgICAgIHZlcmJvc2U9MQorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBjKSAgICAgIGNvbW1pdD0kT1BUQVJHCisgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIG0pICAgICAgZXhwb3J0IE1BQ0hJTkU9JE9QVEFSRworICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBqKSAgICAgIHBtYWtlPSRPUFRBUkcKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgdCkgICAgICBleHBvcnQgQkJfTlVNQkVSX1RIUkVBRFM9JE9QVEFSRworICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBpKSAgICAgIElNQUdFPSRPUFRBUkcKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgZCkgICAgICBkbGRpcj0kT1BUQVJHCisgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIHApICAgICAgY2hlcnJ5cGlja3M9IiRjaGVycnlwaWNrcyAkT1BUQVJHIgorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAqKSAgICAgIHVzYWdlCisgICAgICAgICAgICAgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBlc2FjCitkb25lCisKKworI2Ryb3AgY2FjaGVkIGNyZWRlbnRpYWxzIGFuZCB0ZXN0IGZvciBzdWRvIGFjY2VzcyB3aXRob3V0IGEgcGFzc3dvcmQKK3N1ZG8gLWsgLW4gbHMgPiAvZGV2L251bGwgMj4mMQorcmVxcGFzcz0kPworaWYgWyAkcmVxcGFzcyAtbmUgMCBdOyB0aGVuCisgICAgZWNobyAiVGhlIHNjcmlwdCByZXF1aXJlcyBzdWRvIGFjY2VzcyB0byBkcm9wIGNhY2hlcyBiZXR3ZWVuIGJ1aWxkcyAoZWNobyAzID4gL3Byb2Mvc3lzL3ZtL2Ryb3BfY2FjaGVzKSIKKyAgICByZWFkIC1zIC1wICJQbGVhc2UgZW50ZXIgeW91ciBzdWRvIHBhc3N3b3JkOiAiIHBhc3MKKyAgICBlY2hvCitmaQorCitpZiBbIC1uICIkY29tbWl0IiBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICJnaXQgY2hlY2tvdXQgLWYgJGNvbW1pdCIKKyAgICAgICAgICAgIGdpdCBwdWxsID4gL2Rldi9udWxsIDI+JjEKKyAgICAgICAgICAgIGdpdCBjaGVja291dCAtZiAkY29tbWl0IHx8IGV4aXQgMQorICAgICAgICAgICAgZ2l0IHB1bGwgPiAvZGV2L251bGwgMj4mMQorZmkKKworaWYgWyAtbiAiJGNoZXJyeXBpY2tzIiBdOyB0aGVuCisgICAgZm9yIGMgaW4gJGNoZXJyeXBpY2tzOyBkbworICAgICAgICBnaXQgY2hlcnJ5LXBpY2sgJGMKKyAgICBkb25lCitmaQorCityZXY9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgIHx8IGV4aXQgMQorT1VURElSPSIkY2xvbmVkaXIvYnVpbGQtcGVyZi10ZXN0L3Jlc3VsdHMtJHJldi1gZGF0ZSAiKyVZJW0lZCVIJU0lUyJgIgorQlVJTERESVI9IiRPVVRESVIvYnVpbGQiCityZXN1bHRzZmlsZT0iJE9VVERJUi9yZXN1bHRzLmxvZyIKK2Jib3V0cHV0PSIkT1VURElSL2JpdGJha2UubG9nIgorbXlvdXRwdXQ9IiRPVVRESVIvb3V0cHV0LmxvZyIKK2dsb2JhbHJlcz0iJGNsb25lZGlyL2J1aWxkLXBlcmYtdGVzdC9nbG9iYWxyZXMubG9nIgorCitta2RpciAtcCAkT1VURElSIHx8IGV4aXQgMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK2xvZyAoKSB7CisgICAgbG9jYWwgbXNnPSIkMSIKKyAgICBlY2hvICJgZGF0ZWA6ICRtc2ciIHwgdGVlIC1hICRteW91dHB1dAorfQorCisKKyMKKyMgQ29uZmlnIHN0dWZmCisjCisKK2JyYW5jaD1gZ2l0IGJyYW5jaCAyPiYxIHwgZ3JlcCAiXiogIiB8IHRyIC1kICIqICJgCitnaXRjb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICB8fCBleGl0IDEKK2xvZyAiUnVubmluZyBvbiAkYnJhbmNoOiRnaXRjb21taXQiCisKK3NvdXJjZSAuL29lLWluaXQtYnVpbGQtZW52ICRPVVRESVIvYnVpbGQgPi9kZXYvbnVsbCB8fCBleGl0IDEKK2NkICRPVVRESVIvYnVpbGQKKworWyAtbiAiJE1BQ0hJTkUiIF0gfHwgZXhwb3J0IE1BQ0hJTkU9InFlbXV4ODYiCitbIC1uICIkQkJfTlVNQkVSX1RIUkVBRFMiIF0gfHwgZXhwb3J0IEJCX05VTUJFUl9USFJFQURTPSI4IgorCitpZiBbIC1uICIkcG1ha2UiIF07IHRoZW4KKyAgICAgICAgZXhwb3J0IFBBUkFMTEVMX01BS0U9Ii1qICRwbWFrZSIKK2Vsc2UKKyAgICAgICAgZXhwb3J0IFBBUkFMTEVMX01BS0U9Ii1qIDgiCitmaQorCitpZiBbIC1uICIkZGxkaXIiIF07IHRoZW4KKyAgICBlY2hvICJETF9ESVIgPSBcIiRkbGRpclwiIiA+PiBjb25mL2xvY2FsLmNvbmYKK2Vsc2UKKyAgICBlY2hvICJETF9ESVIgPSBcIiRjbG9uZWRpci9idWlsZC1wZXJmLXRlc3QvZG93bmxvYWRzXCIiID4+IGNvbmYvbG9jYWwuY29uZgorZmkKKworIyBTb21ldGltZXMgSSd2ZSBub3RpY2VkIGJpZyBkaWZmZXJlbmNlcyBpbiB0aW1pbmdzIGZvciB0aGUgc2FtZSBjb21taXQsIG9uIHRoZSBzYW1lIG1hY2hpbmUKKyMgRGlzYWJsaW5nIHRoZSBuZXR3b3JrIHNhbml0eSBjaGVjayBoZWxwcyBhIGJpdCAoYmVjYXVzZSBvZiBteSBjcmFwcHkgbmV0d29yayBjb25uZWN0aW9uIGFuZC9vciBwcm94eSkKK2VjaG8gIkNPTk5FQ1RJVklUWV9DSEVDS19VUklTID1cIlwiIiA+PiBjb25mL2xvY2FsLmNvbmYKKworCisjCisjIEZ1bmN0aW9ucworIworCitkZWNsYXJlIC1hIFRJTUVTCit0aW1lX2NvdW50PTAKK2RlY2xhcmUgLWEgU0laRVMKK3NpemVfY291bnQ9MAorCitiYnRpbWUgKCkgeworICAgIGxvY2FsIGFyZz0iJEAiCisgICAgbG9nICIgICBUaW1pbmc6IGJpdGJha2UgJHthcmd9IgorCisgICAgaWYgWyAkdmVyYm9zZSAtZXEgMCBdOyB0aGVuIAorICAgICAgICAvdXNyL2Jpbi90aW1lIC12IC1vICRyZXN1bHRzZmlsZSBiaXRiYWtlICR7YXJnfSA+PiAkYmJvdXRwdXQKKyAgICBlbHNlCisgICAgICAgIC91c3IvYmluL3RpbWUgLXYgLW8gJHJlc3VsdHNmaWxlIGJpdGJha2UgJHthcmd9CisgICAgZmkKKyAgICByZXQ9JD8KKyAgICBpZiBbICRyZXQgLWVxIDAgXTsgdGhlbgorICAgICAgICB0PWBncmVwIHdhbGwgJHJlc3VsdHNmaWxlIHwgc2VkICdzLy4qbTpzcyk6IC8vJ2AKKyAgICAgICAgbG9nICIgICBUSU1FOiAkdCIKKyAgICAgICAgVElNRVNbKCggdGltZV9jb3VudCsrICkpXT0iJHQiCisgICAgZWxzZQorICAgICAgICBsb2cgIkVSUk9SOiBleGl0IHN0YXR1cyB3YXMgbm9uLXplcm8sIHdpbGwgcmVwb3J0IHRpbWUgYXMgMC4iCisgICAgICAgIFRJTUVTWygoIHRpbWVfY291bnQrKyApKV09IjAiCisgICAgZmkKKyAgICAKKyAgICAjdGltZSBieSBkZWZhdWx0IG92ZXJ3cml0ZXMgdGhlIG91dHB1dCBmaWxlIGFuZCB3ZSAgd2FudCB0byBrZWVwIHRoZSByZXN1bHRzCisgICAgI2l0IGhhcyBhbiBhcHBlbmQgb3B0aW9uIGJ1dCBJIGRvbid0IHdhbnQgdG8gY2xvYmJlciB0aGUgcmVzdWx0cyBpbiB0aGUgc2FtZSBmaWxlCisgICAgaT1gbHMgJE9VVERJUi9yZXN1bHRzLmxvZyogfHdjIC1sYAorICAgIG12ICRyZXN1bHRzZmlsZSAiJHtyZXN1bHRzZmlsZX0uJHtpfSIKKyAgICBsb2cgIk1vcmUgc3RhdHMgY2FuIGJlIGZvdW5kIGluICR7cmVzdWx0c2ZpbGV9LiR7aX0iICAgIAorfQorCisjd2UgZG9uJ3QgdGltZSBiaXRiYWtlIGhlcmUKK2Jibm90aW1lICgpIHsKKyAgICBsb2NhbCBhcmc9IiRAIgorICAgIGxvZyAiICAgUnVubmluZzogYml0YmFrZSAke2FyZ30iCisgICAgaWYgWyAkdmVyYm9zZSAtZXEgMCBdOyB0aGVuCisgICAgICAgIGJpdGJha2UgJHthcmd9ID4+ICRiYm91dHB1dAorICAgIGVsc2UKKyAgICAgICAgYml0YmFrZSAke2FyZ30KKyAgICBmaQorICAgIHJldD0kPworICAgIGlmIFsgJHJldCAtZXEgMCBdOyB0aGVuCisgICAgICAgIGxvZyAiICAgRmluaXNoZWQgYml0YmFrZSAke2FyZ30iCisgICAgZWxzZQorICAgICAgICBsb2cgIkVSUk9SOiBleGl0IHN0YXR1cyB3YXMgbm9uLXplcm8uIEV4aXQuLiIKKyAgICAgICAgZXhpdCAkcmV0CisgICAgZmkKKworfQorCitkb19ybXRtcCgpIHsKKyAgICBsb2cgIiAgIFJlbW92aW5nIHRtcCIKKyAgICBybSAtcmYgYml0YmFrZS5sb2NrIHBzZXVkb2RvbmUgY29uZi9zYW5pdHlfaW5mbyBjYWNoZSB0bXAKK30KK2RvX3Jtc3N0YXRlICgpIHsKKyAgICBsb2cgIiAgIFJlbW92aW5nIHNzdGF0ZS1jYWNoZSIKKyAgICBybSAtcmYgc3N0YXRlLWNhY2hlCit9Citkb19zeW5jICgpIHsKKyAgICBsb2cgIiAgIFN5bmNpbmcgYW5kIGRyb3BwaW5nIGNhY2hlcyIKKyAgICBzeW5jOyBzeW5jCisgICAgaWYgWyAkcmVxcGFzcyAtZXEgMCBdOyB0aGVuCisgICAgICAgIHN1ZG8gc2ggLWMgImVjaG8gMyA+IC9wcm9jL3N5cy92bS9kcm9wX2NhY2hlcyIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIiRwYXNzIiB8IHN1ZG8gLVMgc2ggLWMgImVjaG8gMyA+IC9wcm9jL3N5cy92bS9kcm9wX2NhY2hlcyIKKyAgICAgICAgZWNobworICAgIGZpCisgICAgc2xlZXAgMworfQorCit3cml0ZV9yZXN1bHRzKCkgeworICAgIGVjaG8gLW4gImB1bmFtZSAtbmAsJGJyYW5jaDokZ2l0Y29tbWl0LGBnaXQgZGVzY3JpYmVgLCIgPj4gJGdsb2JhbHJlcworICAgIGZvciBpIGluICIke1RJTUVTW0BdfSI7IGRvCisgICAgICAgIGVjaG8gLW4gIiRpLCIgPj4gJGdsb2JhbHJlcworICAgIGRvbmUKKyAgICBmb3IgaSBpbiAiJHtTSVpFU1tAXX0iOyBkbworICAgICAgICBlY2hvIC1uICIkaSwiID4+ICRnbG9iYWxyZXMKKyAgICBkb25lCisgICAgZWNobyA+PiAkZ2xvYmFscmVzCisgICAgc2VkIC1pICckIHMvLCQvLycgJGdsb2JhbHJlcworfQorCisjIyMjCisKKyMKKyMgVGVzdCAxCisjIE1lYXN1cmU6IFdhbGwgY2xvY2sgb2YgImJpdGJha2UgY29yZS1pbWFnZS1zYXRvIiBhbmQgc2l6ZSBvZiB0bXAvZGlyICh3L28gcm1fd29yayBhbmQgdy8gcm1fd29yaykKKyMgUHJlOiBEb3dubG9hZGVkIHNvdXJjZXMsIG5vIHNzdGF0ZQorIyBTdGVwczoKKyMgICAgIFBhcnQxOgorIyAgICAgICAgLSBmZXRjaGFsbCAKKyMgICAgICAgIC0gY2xlYW4gYnVpbGQgZGlyCisjICAgICAgICAtIHRpbWUgYml0YmFrZSBjb3JlLWltYWdlLXNhdG8KKyMgICAgICAgIC0gY29sbGVjdCBkYXRhCisjICAgICBQYXJ0MjoKKyMgICAgICAgIC0gYml0YmFrZSB2aXJ0dWFsL2tlcm5lbCAtYyBjbGVhbnNzdGF0ZQorIyAgICAgICAgLSB0aW1lIGJpdGJha2UgdmlydHVhbC9rZXJuZWwKKyMgICAgIFBhcnQzOgorIyAgICAgICAgLSBhZGQgSU5IRVJJVCB0byBsb2NhbC5jb25mCisjICAgICAgICAtIGNsZWFuIGJ1aWxkIGRpcgorIyAgICAgICAgLSBidWlsZAorIyAgICAgICAgLSByZXBvcnQgc2l6ZSwgcmVtb3ZlIElOSEVSSVQKKwordGVzdDFfcDEgKCkgeworICAgIGxvZyAiUnVubmluZyBUZXN0IDEsIHBhcnQgMS8zOiBNZWFzdXJlIHdhbGwgY2xvY2sgb2YgYml0YmFrZSAkSU1BR0UgYW5kIHNpemUgb2YgdG1wLyBkaXIiCisgICAgYmJub3RpbWUgJElNQUdFIC1jIGZldGNoYWxsCisgICAgZG9fcm10bXAKKyAgICBkb19ybXNzdGF0ZQorICAgIGRvX3N5bmMKKyAgICBiYnRpbWUgJElNQUdFCisgICAgcz1gZHUgLXMgdG1wIHwgc2VkICdzL3RtcC8vJyB8IHNlZCAncy9bIFx0XSokLy8nYAorICAgIFNJWkVTWygoIHNpemVfY291bnQrKyApKV09IiRzIgorICAgIGxvZyAiU0laRSBvZiB0bXAgZGlyIGlzOiAkcyIKKyAgICBsb2cgIkJ1aWxkc3RhdHMgYXJlIHNhdmVkIGluICRPVVRESVIvYnVpbGRzdGF0cy10ZXN0MSIKKyAgICBtdiB0bXAvYnVpbGRzdGF0cyAkT1VURElSL2J1aWxkc3RhdHMtdGVzdDEKK30KKworCit0ZXN0MV9wMiAoKSB7CisgICAgbG9nICJSdW5uaW5nIFRlc3QgMSwgcGFydCAyLzM6IGJpdGJha2UgdmlydHVhbC9rZXJuZWwgLWMgY2xlYW5zc3RhdGUgYW5kIHRpbWUgYml0YmFrZSB2aXJ0dWFsL2tlcm5lbCIKKyAgICBiYm5vdGltZSB2aXJ0dWFsL2tlcm5lbCAtYyBjbGVhbnNzdGF0ZQorICAgIGRvX3N5bmMKKyAgICBiYnRpbWUgdmlydHVhbC9rZXJuZWwKK30KKwordGVzdDFfcDMgKCkgeworICAgIGxvZyAiUnVubmluZyBUZXN0IDEsIHBhcnQgMy8zOiBCdWlsZCAkSU1BR0Ugdy9vIHNzdGF0ZSBhbmQgcmVwb3J0IHNpemUgb2YgdG1wL2RpciB3aXRoIHJtX3dvcmsgZW5hYmxlZCIKKyAgICBlY2hvICJJTkhFUklUICs9IFwicm1fd29ya1wiIiA+PiBjb25mL2xvY2FsLmNvbmYKKyAgICBkb19ybXRtcAorICAgIGRvX3Jtc3N0YXRlCisgICAgZG9fc3luYworICAgIGJidGltZSAkSU1BR0UKKyAgICBzZWQgLWkgJ3MvSU5IRVJJVCArPSBcInJtX3dvcmtcIi8vJyBjb25mL2xvY2FsLmNvbmYKKyAgICBzPWBkdSAtcyB0bXAgfCBzZWQgJ3MvdG1wLy8nIHwgc2VkICdzL1sgXHRdKiQvLydgCisgICAgU0laRVNbKCggc2l6ZV9jb3VudCsrICkpXT0iJHMiCisgICAgbG9nICJTSVpFIG9mIHRtcCBkaXIgaXM6ICRzIgorICAgIGxvZyAiQnVpbGRzdGF0cyBhcmUgc2F2ZWQgaW4gJE9VVERJUi9idWlsZHN0YXRzLXRlc3QxMyIKKyAgICBtdiB0bXAvYnVpbGRzdGF0cyAkT1VURElSL2J1aWxkc3RhdHMtdGVzdDEzCit9CisKKworIworIyBUZXN0IDIKKyMgTWVhc3VyZTogV2FsbCBjbG9jayBvZiAiYml0YmFrZSBjb3JlLWltYWdlLXNhdG8iIGFuZCBzaXplIG9mIHRtcC9kaXIKKyMgUHJlOiBwb3B1bGF0ZWQgc3N0YXRlIGNhY2hlCisKK3Rlc3QyICgpIHsKKyAgICAjIEFzc3VtaW5nIHRlc3QgMSBoYXMgcnVuCisgICAgbG9nICJSdW5uaW5nIFRlc3QgMjogTWVhc3VyZSB3YWxsIGNsb2NrIG9mIGJpdGJha2UgJElNQUdFIC1jIHJvb3RmcyB3aXRoIHNzdGF0ZSIKKyAgICBkb19ybXRtcAorICAgIGRvX3N5bmMKKyAgICBiYnRpbWUgJElNQUdFIC1jIHJvb3RmcworfQorCisKKyMgVGVzdCAzCisjIHBhcnNpbmcgdGltZSBtZXRyaWNzCisjCisjICBTdGFydCB3aXRoCisjICAgaSkgInJtIC1yZiB0bXAvY2FjaGU7IHRpbWUgYml0YmFrZSAtcCIKKyMgIGlpKSAicm0gLXJmIHRtcC9jYWNoZS9kZWZhdWx0LWdsaWJjLzsgdGltZSBiaXRiYWtlIC1wIgorIyBpaWkpICJ0aW1lIGJpdGJha2UgLXAiCisKKwordGVzdDMgKCkgeworICAgIGxvZyAiUnVubmluZyBUZXN0IDM6IFBhcnNpbmcgdGltZSBtZXRyaWNzIChiaXRiYWtlIC1wKSIKKyAgICBsb2cgIiAgIFJlbW92aW5nIHRtcC9jYWNoZSAmJiBjYWNoZSIKKyAgICBybSAtcmYgdG1wL2NhY2hlIGNhY2hlCisgICAgYmJ0aW1lIC1wCisgICAgbG9nICIgICBSZW1vdmluZyB0bXAvY2FjaGUvZGVmYXVsdC1nbGliYy8iCisgICAgcm0gLXJmIHRtcC9jYWNoZS9kZWZhdWx0LWdsaWJjLworICAgIGJidGltZSAtcAorICAgIGJidGltZSAtcAorfQorCisKKworIyBSVU4hCisKK3Rlc3QxX3AxCit0ZXN0MV9wMgordGVzdDFfcDMKK3Rlc3QyCit0ZXN0MworCisjIGlmIHdlIGdvdCB0aWwgaGVyZSB3cml0ZSB0byBnbG9iYWwgcmVzdWx0cword3JpdGVfcmVzdWx0cworCitsb2cgIkFsbCBkb25lLCBjbGVhbmluZyB1cC4uLiIKKworZG9fcm10bXAKK2RvX3Jtc3N0YXRlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9kZGltYWdlIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvZGRpbWFnZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNTAzZjExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvZGRpbWFnZQpAQCAtMCwwICsxLDEwNCBAQAorIyEvYmluL3NoCisKKyMgRGVmYXVsdCB0byBhdm9pZGluZyB0aGUgZmlyc3QgdHdvIGRpc2tzIG9uIHR5cGljYWwgTGludXggYW5kIE1hYyBPUyBpbnN0YWxscworIyBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IDotKQorQkxBQ0tMSVNUX0RFVklDRVM9Ii9kZXYvc2RhIC9kZXYvc2RiIC9kZXYvZGlzazEgL2Rldi9kaXNrMiIKKworIyAxTUIgYmxvY2tzaXplCitCTE9DS1NJWkU9MTA0ODU3NgorCit1c2FnZSgpIHsKKwllY2hvICJVc2FnZTogJChiYXNlbmFtZSAkMCkgSU1BR0UgREVWSUNFIgorfQorCitpbWFnZV9kZXRhaWxzKCkgeworCUlNRz0kMQorCWVjaG8gIkltYWdlIGRldGFpbHMiCisJZWNobyAiPT09PT09PT09PT09PSIKKwllY2hvICIgICAgaW1hZ2U6ICQoYmFzZW5hbWUgJElNRykiCisJIyBzdGF0IGZvcm1hdCBpcyBkaWZmZXJlbnQgb24gTWFjIE9TIGFuZCBMaW51eAorCWlmIFsgIiQodW5hbWUpIiA9ICJEYXJ3aW4iIF07IHRoZW4KKwkJZWNobyAiICAgICBzaXplOiAkKHN0YXQgLUwgLWYgJyV6IGJ5dGVzJyAkSU1HKSIKKwkJZWNobyAiIG1vZGlmaWVkOiAkKHN0YXQgLUwgLWYgJyVTbScgJElNRykiCisJZWxzZQorCQllY2hvICIgICAgIHNpemU6ICQoc3RhdCAtTCAtYyAnJXMgYnl0ZXMnICRJTUcpIgorCQllY2hvICIgbW9kaWZpZWQ6ICQoc3RhdCAtTCAtYyAnJXknICRJTUcpIgorCWZpCisJZWNobyAiICAgICB0eXBlOiAkKGZpbGUgLUwgLWIgJElNRykiCisJZWNobyAiIgorfQorCitkZXZpY2VfZGV0YWlscygpIHsKKwlERVY9JDEKKwlCTE9DS19TSVpFPTUxMgorCisJZWNobyAiRGV2aWNlIGRldGFpbHMiCisJZWNobyAiPT09PT09PT09PT09PT0iCisKKwkjIENvbGxlY3QgZGlzayBpbmZvIHVzaW5nIGRpc2t1dGlsIG9uIE1hYyBPUworCWlmIFsgIiQodW5hbWUpIiA9ICJEYXJ3aW4iIF07IHRoZW4KKwkJZGlza3V0aWwgaW5mbyAkREVWSUNFIHwgZWdyZXAgIihEZXZpY2UgTm9kZXxNZWRpYSBOYW1lfFRvdGFsIFNpemUpIgorCQlyZXR1cm4KKwlmaQorCisJIyBEZWZhdWx0IC8gTGludXggaW5mb3JtYXRpb24gY29sbGVjdGlvbgorCWVjaG8gIiAgZGV2aWNlOiAkREVWSUNFIgorCWlmIFsgLWYgIi9zeXMvY2xhc3MvYmxvY2svJERFVi9kZXZpY2UvdmVuZG9yIiBdOyB0aGVuCisJCWVjaG8gIiAgdmVuZG9yOiAkKGNhdCAvc3lzL2NsYXNzL2Jsb2NrLyRERVYvZGV2aWNlL3ZlbmRvcikiCisJZWxzZQorCQllY2hvICIgIHZlbmRvcjogVU5LT1dOIgorCWZpCisJaWYgWyAtZiAiL3N5cy9jbGFzcy9ibG9jay8kREVWL2RldmljZS9tb2RlbCIgXTsgdGhlbgorCQllY2hvICIgICBtb2RlbDogJChjYXQgL3N5cy9jbGFzcy9ibG9jay8kREVWL2RldmljZS9tb2RlbCkiCisJZWxzZQorCQllY2hvICIgICBtb2RlbDogVU5LTk9XTiIKKwlmaQorCWlmIFsgLWYgIi9zeXMvY2xhc3MvYmxvY2svJERFVi9zaXplIiBdOyB0aGVuCisJCWVjaG8gIiAgICBzaXplOiAkKCgkKGNhdCAvc3lzL2NsYXNzL2Jsb2NrLyRERVYvc2l6ZSkgKiAkQkxPQ0tfU0laRSkpIGJ5dGVzIgorCWVsc2UKKwkJZWNobyAiICAgIHNpemU6IFVOS05PV04iCisJZmkKKwllY2hvICIiCit9CisKK2lmIFsgJCMgLW5lIDIgXTsgdGhlbgorCXVzYWdlCisJZXhpdCAxCitmaQorCitJTUFHRT0kMQorREVWSUNFPSQyCisKK2lmIFsgISAtZSAiJElNQUdFIiBdOyB0aGVuCisJZWNobyAiRVJST1I6IEltYWdlICRJTUFHRSBkb2VzIG5vdCBleGlzdCIKKwl1c2FnZQorCWV4aXQgMQorZmkKKworCitmb3IgaSBpbiAke0JMQUNLTElTVF9ERVZJQ0VTfTsgZG8KKwlpZiBbICIkaSIgPSAiJERFVklDRSIgXTsgdGhlbgorCQllY2hvICJFUlJPUjogRGV2aWNlICRERVZJQ0UgaXMgYmxhY2tsaXN0ZWQiCisJCWV4aXQgMQorCWZpCitkb25lCisKK2lmIFsgISAtdyAiJERFVklDRSIgXTsgdGhlbgorCWVjaG8gIkVSUk9SOiBEZXZpY2UgJERFVklDRSBkb2VzIG5vdCBleGlzdCBvciBpcyBub3Qgd3JpdGFibGUiCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisKK2ltYWdlX2RldGFpbHMgJElNQUdFCitkZXZpY2VfZGV0YWlscyAkKGJhc2VuYW1lICRERVZJQ0UpCisKK3ByaW50ZiAiV3JpdGUgJElNQUdFIHRvICRERVZJQ0UgW3kvTl0/ICIKK3JlYWQgUkVTUE9OU0UKK2lmIFsgIiRSRVNQT05TRSIgIT0gInkiIF07IHRoZW4KKwllY2hvICJXcml0ZSBhYm9ydGVkIgorCWV4aXQgMAorZmkKKworZWNobyAiV3JpdGluZyBpbWFnZS4uLiIKK2RkIGlmPSIkSU1BR0UiIG9mPSIkREVWSUNFIiBicz0iJEJMT0NLU0laRSIKK3N5bmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2RpYWxvZy1wb3dlci1jb250cm9sIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvZGlhbG9nLXBvd2VyLWNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzU1MGVhNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2RpYWxvZy1wb3dlci1jb250cm9sCkBAIC0wLDAgKzEsNTMgQEAKKyMhL2Jpbi9zaAorIworIyBTaW1wbGUgc2NyaXB0IHRvIHNob3cgYSBtYW51YWwgcG93ZXIgcHJvbXB0IGZvciB3aGVuIHlvdSB3YW50IHRvIHVzZQorIyBhdXRvbWF0ZWQgaGFyZHdhcmUgdGVzdGluZyB3aXRoIHRlc3RpbWFnZS5iYmNsYXNzIGJ1dCB5b3UgZG9uJ3QgaGF2ZSBhCisjIHdlYi1lbmFibGVkIHBvd2VyIHN0cmlwIG9yIHNpbWlsYXIgdG8gZG8gdGhlIHBvd2VyIG9uL29mZi9jeWNsZS4KKyMKKyMgWW91IGNhbiBlbmFibGUgaXQgYnkgZW5hYmxpbmcgdGVzdGltYWdlIChzZWUgdGhlIFlvY3RvIFByb2plY3QKKyMgRGV2ZWxvcG1lbnQgbWFudWFsICJQZXJmb3JtaW5nIEF1dG9tYXRlZCBSdW50aW1lIFRlc3RpbmciIHNlY3Rpb24pCisjIGFuZCBzZXR0aW5nIHRoZSBmb2xsb3dpbmcgaW4geW91ciBsb2NhbC5jb25mOgorIworIyBURVNUX1BPV0VSQ09OVFJPTF9DTUQgPSAiJHtDT1JFQkFTRX0vc2NyaXB0cy9jb250cmliL2RpYWxvZy1wb3dlci1jb250cm9sIgorIworCitQUk9NUFQ9IiIKK3doaWxlIHRydWU7IGRvCisgICAgY2FzZSAkMSBpbgorICAgICAgICBvbikKKyAgICAgICAgICAgIFBST01QVD0iUGxlYXNlIHR1cm4gZGV2aWNlIHBvd2VyIG9uIjs7CisgICAgICAgIG9mZikKKyAgICAgICAgICAgIFBST01QVD0iUGxlYXNlIHR1cm4gZGV2aWNlIHBvd2VyIG9mZiI7OworICAgICAgICBjeWNsZSkKKyAgICAgICAgICAgIFBST01QVD0iUGxlYXNlIGNsaWNrIERvbmUsIHRoZW4gdHVybiB0aGUgZGV2aWNlIHBvd2VyIG9mZiB0aGVuIG9uIjs7CisgICAgICAgICIiKQorICAgICAgICAgICAgYnJlYWs7OworICAgIGVzYWMKKyAgICBzaGlmdAorZG9uZQorCitpZiBbICIkUFJPTVBUIiA9ICIiIF0gOyB0aGVuCisgICAgZWNobyAiRVJST1I6IG5vIHBvd2VyIGFjdGlvbiBzcGVjaWZpZWQgb24gY29tbWFuZCBsaW5lIgorICAgIGV4aXQgMgorZmkKKworaWYgWyAiYHdoaWNoIGtkaWFsb2cgMj4vZGV2L251bGxgIiAhPSAiIiBdIDsgdGhlbgorICAgIERJQUxPR1VUSUw9ImtkaWFsb2ciCitlbGlmIFsgImB3aGljaCB6ZW5pdHkgMj4vZGV2L251bGxgIiAhPSAiIiBdIDsgdGhlbgorICAgIERJQUxPR1VUSUw9Inplbml0eSIKK2Vsc2UKKyAgICBlY2hvICJFUlJPUjogY291bGRuJ3QgZmluZCBwcm9ncmFtIHRvIGRpc3BsYXkgYSBtZXNzYWdlLCBpbnN0YWxsIGtkaWFsb2cgb3IgemVuaXR5IgorICAgIGV4aXQgMworZmkKKworaWYgWyAiJERJQUxPR1VUSUwiID0gImtkaWFsb2ciIF0gOyB0aGVuCisgICAga2RpYWxvZyAtLXllc25vICIkUFJPTVBUIiAtLXRpdGxlICJUZXN0SW1hZ2UgUG93ZXIgQ29udHJvbCIgLS15ZXMtbGFiZWwgIkRvbmUiIC0tbm8tbGFiZWwgIkNhbmNlbCB0ZXN0IgorZWxpZiBbICIkRElBTE9HVVRJTCIgPSAiemVuaXR5IiBdIDsgdGhlbgorICAgIHplbml0eSAtLXF1ZXN0aW9uIC0tdGV4dD0iJFBST01QVCIgLS10aXRsZT0iVGVzdEltYWdlIFBvd2VyIENvbnRyb2wiIC0tb2stbGFiZWw9IkRvbmUiIC0tY2FuY2VsLWxhYmVsPSJDYW5jZWwgdGVzdCIKK2ZpCisKK2lmIFsgIiQ/IiAhPSAiMCIgXSA7IHRoZW4KKyAgICBlY2hvICJVc2VyIGNhbmNlbGxlZCB0ZXN0IGF0IHBvd2VyIHByb21wdCIKKyAgICBleGl0IDEKK2ZpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2RvY3VtZW50YXRpb24tYXVkaXQuc2ggYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9kb2N1bWVudGF0aW9uLWF1ZGl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIxNDRhYWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9kb2N1bWVudGF0aW9uLWF1ZGl0LnNoCkBAIC0wLDAgKzEsOTQgQEAKKyMhL2Jpbi9iYXNoCisjCisjIFBlcmZvcm0gYW4gYXVkaXQgb2Ygd2hpY2ggcGFja2FnZXMgcHJvdmlkZSBkb2N1bWVudGF0aW9uIGFuZCB3aGljaAorIyBhcmUgbWlzc2luZyAtZG9jIHBhY2thZ2VzLgorIworIyBTZXR1cCByZXF1aXJlbWVudHM6IGJlIHN1cmUgdG8gYmUgYnVpbGRpbmcgZm9yIE1BQ0hJTkU9cWVtdXg4Ni4gUnVuCisjIHRoaXMgc2NyaXB0IGFmdGVyIHNvdXJjZSdpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IHNjcmlwdCwgc28geW91J3JlCisjIHJ1bm5pbmcgaXQgZnJvbSBidWlsZC8gZGlyZWN0b3J5LgorIworIyBNYWludGFpbmVyOiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworUkVQT1JUX0RPQ19TSU1QTEU9ImRvY3VtZW50YXRpb25fZXhpc3RzLnR4dCIKK1JFUE9SVF9ET0NfREVUQUlMPSJkb2N1bWVudGF0aW9uX2V4aXN0c19kZXRhaWwudHh0IgorUkVQT1JUX01JU1NJTkdfU0lNUExFPSJkb2N1bWVudGF0aW9uX21pc3NpbmcudHh0IgorUkVQT1JUX01JU1NJTkdfREVUQUlMPSJkb2N1bWVudGF0aW9uX21pc3NpbmdfZGV0YWlsLnR4dCIKK1JFUE9SVF9CVUlMRF9FUlJPUlM9ImJ1aWxkX2Vycm9ycy50eHQiCisKK3JtIC1yZiAkUkVQT1JUX0RPQ19TSU1QTEUgJFJFUE9SVF9ET0NfREVUQUlMICRSRVBPUlRfTUlTU0lOR19TSU1QTEUgJFJFUE9SVF9NSVNTSU5HX0RFVEFJTAorCitCSVRCQUtFPWB3aGljaCBiaXRiYWtlYAoraWYgWyAteiAiJEJJVEJBS0UiIF07IHRoZW4KKwllY2hvICJFcnJvcjogYml0YmFrZSBjb21tYW5kIG5vdCBmb3VuZC4iCisJZWNobyAiRGlkIHlvdSBmb3JnZXQgdG8gc291cmNlIHRoZSBidWlsZCBlbnZpcm9ubWVudCBzY3JpcHQ/IgorCWV4aXQgMQorZmkKKworZWNobyAiUkVNSU5ERVI6IHlvdSBuZWVkIHRvIGJ1aWxkIGZvciBNQUNISU5FPXFlbXV4ODYgb3IgeW91IHdvbid0IGdldCB1c2VmdWwgcmVzdWx0cyIKK2VjaG8gIlJFTUlOREVSOiB5b3UgbmVlZCB0byBzZXQgTElDRU5TRV9GTEFHU19XSElURUxJU1QgYXBwcm9wcmlhdGVseSBpbiBsb2NhbC5jb25mIG9yICIKK2VjaG8gIiB5b3UnbGwgZ2V0IGZhbHNlIHBvc2l0aXZlcy4gIEZvciBleGFtcGxlLCBMSUNFTlNFX0ZMQUdTX1dISVRFTElTVCA9IFwiQ29tbWVyY2lhbFwiIgorCitmb3IgcGtnIGluIGBiaXRiYWtlIC1zIHwgYXdrICd7IHByaW50IFwkMSB9J2A7IGRvCisJaWYgW1sgIiRwa2ciID09ICJMb2FkaW5nIiB8fCAiJHBrZyIgPT0gIkxvYWRlZCIgfHwKKwkgICIkcGtnIiA9PSAiUmVjaXBlIiAgfHwKKyAgICAgICAgICAiJHBrZyIgPT0gIlBhcnNpbmciIHx8ICIkcGtnIiA9PSAiUGFja2FnZSIgfHwKKyAgICAgICAgICAiJHBrZyIgPT0gIk5PVEU6IiAgIHx8ICIkcGtnIiA9PSAiV0FSTklORzoiIHx8CisgICAgICAgICAgIiRwa2ciID09ICJkb25lLiIgICB8fCAiJHBrZyIgPT0gIj09PT09PT09PT09IiBdXQorCXRoZW4KKwkJIyBTa2lwIGluaXRpYWwgYml0YmFrZSBvdXRwdXQKKwkJY29udGludWUKKwlmaQorCWlmIFtbICIkcGtnIiA9fiAtbmF0aXZlJCB8fCAiJHBrZyIgPX4gLW5hdGl2ZXNkayQgfHwKKyAgICAgICAgICAiJHBrZyIgPX4gLWNyb3NzLWNhbmFkaWFuIF1dOyB0aGVuCisJCSMgU2tpcCBuYXRpdmUvbmF0aXZlc2RrL2Nyb3NzLWNhbmFkaWFuIHJlY2lwZXMKKwkJY29udGludWUKKwlmaQorCWlmIFtbICIkcGtnIiA9fiBebWV0YS0gfHwgIiRwa2ciID1+IF5wYWNrYWdlZ3JvdXAtIHx8ICIkcGtnIiA9fiAtaW1hZ2UgXV07IHRoZW4KKwkJIyBTa2lwIG1ldGEsIHRhc2sgYW5kIGltYWdlIHJlY2lwZXMKKwkJY29udGludWUKKwlmaQorCWlmIFtbICIkcGtnIiA9fiBeZ2xpYmMtIHx8ICIkcGtnIiA9fiBebGliaWNvbnYkIHx8CisgICAgICAgICAgIiRwa2ciID1+IC10b29sY2hhaW4kIHx8ICIkcGtnIiA9fiBecGFja2FnZS1pbmRleCQgfHwKKyAgICAgICAgICAiJHBrZyIgPX4gXmxpbnV4LSB8fCAiJHBrZyIgPX4gXmFkdC1pbnN0YWxsZXIkIHx8CisgICAgICAgICAgIiRwa2ciID1+IF5lZHMtdG9vbHMkIHx8ICIkcGtnIiA9fiBeZXh0ZXJuYWwtcHl0aG9uLXRhcmJhbGwkIHx8CisgICAgICAgICAgIiRwa2ciID1+IF5xdDQtZW1iZWRkZWQkIHx8ICIkcGtnIiA9fiBecXQtbW9iaWxpdHkgXV07IHRoZW4KKwkJIyBTa2lwIGdsaWJjLCBsaWJpY29udiwgLXRvb2xjaGFpbiwgYW5kIG90aGVyIHJlY2lwZXMga25vd24KKwkJIyB0byBjYXVzZSBidWlsZCBjb25mbGljdHMgb3IgdHJpZ2dlciBmYWxzZSBwb3NpdGl2ZXMuCisJCWNvbnRpbnVlCisJZmkJCisKKwllY2hvICJCdWlsZGluZyBwYWNrYWdlICRwa2cuLi4iCisJYml0YmFrZSAkcGtnID4gL2Rldi9udWxsCisJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCWVjaG8gIlRoZXJlIHdhcyBhbiBlcnJvciBidWlsZGluZyBwYWNrYWdlICRwa2ciID4+ICIkUkVQT1JUX01JU1NJTkdfREVUQUlMIgorCQllY2hvICIkcGtnIiA+PiAkUkVQT1JUX0JVSUxEX0VSUk9SUworCisJCSMgRG8gbm90IHNraXAgdGhlIHJlbWFpbmluZyB0ZXN0cywgYXMgc29tZXRpbWVzIHRoZQorCQkjIGV4aXQgc3RhdHVzIGlzIDEgZHVlIHRvIFFBIGVycm9ycywgYW5kIHdlIGNhbiBzdGlsbAorCQkjIHBlcmZvcm0gdGhlIC1kb2MgY2hlY2tzLgorCWZpCisKKwllY2hvICIkcGtnIGJ1aWx0IHN1Y2Nlc3NmdWxseSwgY2hlY2tpbmcgZm9yIGEgZG9jdW1lbnRhdGlvbiBwYWNrYWdlLi4uIgorCVdPUktESVI9YGJpdGJha2UgLWUgJHBrZyB8IGdyZXAgXldPUktESVIgfCBhd2sgLUYgJz0nICd7IHByaW50IFwkMiB9JyB8IGF3ayAtRiAnIicgJ3sgcHJpbnQgXCQyIH0nYAorCUZJTkRfRE9DX1BLRz1gZmluZCAkV09SS0RJUi9wYWNrYWdlcy1zcGxpdC8qLWRvYyAtbWF4ZGVwdGggMCAtdHlwZSBkYAorCWlmIFsgLXogIiRGSU5EX0RPQ19QS0ciIF07IHRoZW4KKwkJIyBObyAtZG9jIHBhY2thZ2Ugd2FzIGdlbmVyYXRlZDoKKwkJZWNobyAiTm8gLWRvYyBwYWNrYWdlOiAkcGtnIiA+PiAiJFJFUE9SVF9NSVNTSU5HX0RFVEFJTCIKKwkJZWNobyAiJHBrZyIgPj4gJFJFUE9SVF9NSVNTSU5HX1NJTVBMRQorCQljb250aW51ZQorCWZpCisKKwlGSU5EX0RPQ19GSUxFUz1gZmluZCAkRklORF9ET0NfUEtHIC10eXBlIGZgCisJaWYgWyAteiAiJEZJTkRfRE9DX0ZJTEVTIiBdOyB0aGVuCisJCSMgTm8gZmlsZXMgc2hpcHBlZCB3aXRoIHRoZSAtZG9jIHBhY2thZ2U6CisJCWVjaG8gIk5vIGZpbGVzIHNoaXBwZWQgd2l0aCB0aGUgLWRvYyBwYWNrYWdlOiAkcGtnIiA+PiAiJFJFUE9SVF9NSVNTSU5HX0RFVEFJTCIKKwkJZWNobyAiJHBrZyIgPj4gJFJFUE9SVF9NSVNTSU5HX1NJTVBMRQorCQljb250aW51ZQorCWZpCisKKwllY2hvICJEb2N1bWVudGF0aW9uIHNoaXBwZWQgd2l0aCAkcGtnOiIgPj4gIiRSRVBPUlRfRE9DX0RFVEFJTCIKKwllY2hvICIkRklORF9ET0NfRklMRVMiID4+ICIkUkVQT1JUX0RPQ19ERVRBSUwiCisJZWNobyAiIgk+PiAiJFJFUE9SVF9ET0NfREVUQUlMIgorCisJZWNobyAiJHBrZyIgPj4gIiRSRVBPUlRfRE9DX1NJTVBMRSIKK2RvbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2dyYXBoLXRvb2wgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9ncmFwaC10b29sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZkYzdkMzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9ncmFwaC10b29sCkBAIC0wLDAgKzEsOTIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIFNpbXBsZSBncmFwaCBxdWVyeSB1dGlsaXR5CisjIHVzZWZ1bCBmb3IgZ2V0dGluZyBhbnN3ZXJzIGZyb20gLmRvdCBmaWxlcyBwcm9kdWNlZCBieSBiaXRiYWtlIC1nCisjCisjIFdyaXR0ZW4gYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorIworIyBDb3B5cmlnaHQgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKworaW1wb3J0IHN5cworCitkZWYgZ2V0X3BhdGhfbmV0d29ya3goZG90ZmlsZSwgZnJvbW5vZGUsIHRvbm9kZSk6CisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgbmV0d29ya3gKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHByaW50KCdFUlJPUjogUGxlYXNlIGluc3RhbGwgdGhlIG5ldHdvcmt4IHB5dGhvbiBtb2R1bGUnKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZ3JhcGggPSBuZXR3b3JreC5EaUdyYXBoKG5ldHdvcmt4LnJlYWRfZG90KGRvdGZpbGUpKQorCisgICAgZGVmIG5vZGVfbWlzc2luZyhub2RlKToKKyAgICAgICAgaW1wb3J0IGRpZmZsaWIKKyAgICAgICAgY2xvc2VfbWF0Y2hlcyA9IGRpZmZsaWIuZ2V0X2Nsb3NlX21hdGNoZXMobm9kZSwgZ3JhcGgubm9kZXMoKSwgY3V0b2ZmPTAuNykKKyAgICAgICAgaWYgY2xvc2VfbWF0Y2hlczoKKyAgICAgICAgICAgIHByaW50KCdFUlJPUjogbm8gbm9kZSAiJXMiIGluIGdyYXBoLiBDbG9zZSBtYXRjaGVzOlxuICAlcycgJSAobm9kZSwgJ1xuICAnLmpvaW4oY2xvc2VfbWF0Y2hlcykpKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaWYgbm90IGZyb21ub2RlIGluIGdyYXBoOgorICAgICAgICBub2RlX21pc3NpbmcoZnJvbW5vZGUpCisgICAgaWYgbm90IHRvbm9kZSBpbiBncmFwaDoKKyAgICAgICAgbm9kZV9taXNzaW5nKHRvbm9kZSkKKyAgICByZXR1cm4gbmV0d29ya3guYWxsX3NpbXBsZV9wYXRocyhncmFwaCwgc291cmNlPWZyb21ub2RlLCB0YXJnZXQ9dG9ub2RlKQorCisKK2RlZiBmaW5kX3BhdGhzKGFyZ3MsIHVzYWdlKToKKyAgICBpZiBsZW4oYXJncykgPCAzOgorICAgICAgICB1c2FnZSgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBmcm9tbm9kZSA9IGFyZ3NbMV0KKyAgICB0b25vZGUgPSBhcmdzWzJdCisgICAgcGF0aHMgPSBsaXN0KGdldF9wYXRoX25ldHdvcmt4KGFyZ3NbMF0sIGZyb21ub2RlLCB0b25vZGUpKQorICAgIGlmIHBhdGhzOgorICAgICAgICBmb3IgcGF0aCBpbiBwYXRoczoKKyAgICAgICAgICAgIHByaW50ICcgLT4gJy5qb2luKHBhdGgpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoIkVSUk9SOiBubyBwYXRoIGZyb20gJXMgdG8gJXMgaW4gZ3JhcGgiICUgKGZyb21ub2RlLCB0b25vZGUpKQorICAgICAgICBzeXMuZXhpdCgxKQorCitkZWYgbWFpbigpOgorICAgIGltcG9ydCBvcHRwYXJzZQorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigKKyAgICAgICAgdXNhZ2UgPSAnJyclcHJvZyBbb3B0aW9uc10gPGNvbW1hbmQ+IDxhcmd1bWVudHM+CisKK0F2YWlsYWJsZSBjb21tYW5kczoKKyAgICBmaW5kLXBhdGhzIDxkb3RmaWxlPiA8ZnJvbT4gPHRvPgorICAgICAgICBGaW5kIGFsbCBvZiB0aGUgcGF0aHMgYmV0d2VlbiB0d28gbm9kZXMgaW4gYSBkb3QgZ3JhcGgnJycpCisKKyAgICAjcGFyc2VyLmFkZF9vcHRpb24oIi1kIiwgIi0tZGVidWciLAorICAgICMgICAgICAgIGhlbHAgPSAiUmVwb3J0IGFsbCBTUkNSRVYgdmFsdWVzLCBub3QganVzdCBvbmVzIHdoZXJlIEFVVE9SRVYgaGFzIGJlZW4gdXNlZCIsCisgICAgIyAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0iZGVidWciLCBkZWZhdWx0PUZhbHNlKQorCisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHN5cy5hcmd2KQorICAgIGFyZ3MgPSBhcmdzWzE6XQorCisgICAgaWYgbGVuKGFyZ3MpIDwgMToKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaWYgYXJnc1swXSA9PSAiZmluZC1wYXRocyI6CisgICAgICAgIGZpbmRfcGF0aHMoYXJnc1sxOl0sIHBhcnNlci5wcmludF9oZWxwKQorICAgIGVsc2U6CisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvbGlzdC1wYWNrYWdlY29uZmlnLWZsYWdzLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvbGlzdC1wYWNrYWdlY29uZmlnLWZsYWdzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJmM2I4YjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9saXN0LXBhY2thZ2Vjb25maWctZmxhZ3MucHkKQEAgLTAsMCArMSwxNzkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIENvcHlyaWdodCAoQykgMjAxMyBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisjCisjIC0gbGlzdCBhdmFpbGFibGUgcmVjaXBlcyB3aGljaCBoYXZlIFBBQ0tBR0VDT05GSUcgZmxhZ3MKKyMgLSBsaXN0IGF2YWlsYWJsZSBQQUNLQUdFQ09ORklHIGZsYWdzIGFuZCBhbGwgYWZmZWN0ZWQgcmVjaXBlcworIyAtIGxpc3QgYWxsIHJlY2lwZXMgYW5kIFBBQ0tBR0VDT05GSUcgaW5mb3JtYXRpb24KKworaW1wb3J0IHN5cworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKKworCitzY3JpcHRzX3BhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlswXSkpKQorbGliX3BhdGggPSBvcy5wYXRoLmFic3BhdGgoc2NyaXB0c19wYXRoICsgJy8uLi9saWInKQorc3lzLnBhdGggPSBzeXMucGF0aCArIFtsaWJfcGF0aF0KKworaW1wb3J0IHNjcmlwdHBhdGgKKworIyBGb3IgaW1wb3J0aW5nIHRoZSBmb2xsb3dpbmcgbW9kdWxlcworYml0YmFrZXBhdGggPSBzY3JpcHRwYXRoLmFkZF9iaXRiYWtlX2xpYl9wYXRoKCkKK2lmIG5vdCBiaXRiYWtlcGF0aDoKKyAgICBzeXMuc3RkZXJyLndyaXRlKCJVbmFibGUgdG8gZmluZCBiaXRiYWtlIGJ5IHNlYXJjaGluZyBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoaXMgc2NyaXB0IG9yIFBBVEhcbiIpCisgICAgc3lzLmV4aXQoMSkKKworaW1wb3J0IGJiLmNhY2hlCitpbXBvcnQgYmIuY29va2VyCitpbXBvcnQgYmIucHJvdmlkZXJzCitpbXBvcnQgYmIudGluZm9pbAorCitkZWYgZ2V0X2ZubGlzdChiYmhhbmRsZXIsIHBrZ19wbiwgcHJlZmVycmVkKToKKyAgICAnJycgR2V0IGFsbCByZWNpcGUgZmlsZSBuYW1lcyAnJycKKyAgICBpZiBwcmVmZXJyZWQ6CisgICAgICAgIChsYXRlc3RfdmVyc2lvbnMsIHByZWZlcnJlZF92ZXJzaW9ucykgPSBiYi5wcm92aWRlcnMuZmluZFByb3ZpZGVycyhiYmhhbmRsZXIuY29uZmlnX2RhdGEsIGJiaGFuZGxlci5jb29rZXIucmVjaXBlY2FjaGUsIHBrZ19wbikKKworICAgIGZuX2xpc3QgPSBbXQorICAgIGZvciBwbiBpbiBzb3J0ZWQocGtnX3BuKToKKyAgICAgICAgaWYgcHJlZmVycmVkOgorICAgICAgICAgICAgZm5fbGlzdC5hcHBlbmQocHJlZmVycmVkX3ZlcnNpb25zW3BuXVsxXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZuX2xpc3QuZXh0ZW5kKHBrZ19wbltwbl0pCisKKyAgICByZXR1cm4gZm5fbGlzdAorCitkZWYgZ2V0X3JlY2lwZXNkYXRhKGJiaGFuZGxlciwgcHJlZmVycmVkKToKKyAgICAnJycgR2V0IGRhdGEgb2YgYWxsIGF2YWlsYWJsZSByZWNpcGVzIHdoaWNoIGhhdmUgUEFDS0FHRUNPTkZJRyBmbGFncyAnJycKKyAgICBwa2dfcG4gPSBiYmhhbmRsZXIuY29va2VyLnJlY2lwZWNhY2hlLnBrZ19wbgorCisgICAgZGF0YV9kaWN0ID0ge30KKyAgICBmb3IgZm4gaW4gZ2V0X2ZubGlzdChiYmhhbmRsZXIsIHBrZ19wbiwgcHJlZmVycmVkKToKKyAgICAgICAgZGF0YSA9IGJiLmNhY2hlLkNhY2hlLmxvYWREYXRhRnVsbChmbiwgYmJoYW5kbGVyLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoZm4pLCBiYmhhbmRsZXIuY29uZmlnX2RhdGEpCisgICAgICAgIGZsYWdzID0gZGF0YS5nZXRWYXJGbGFncygiUEFDS0FHRUNPTkZJRyIpCisgICAgICAgIGZsYWdzLnBvcCgnZG9jJywgTm9uZSkKKyAgICAgICAgaWYgZmxhZ3M6CisgICAgICAgICAgICBkYXRhX2RpY3RbZm5dID0gZGF0YQorCisgICAgcmV0dXJuIGRhdGFfZGljdAorCitkZWYgY29sbGVjdF9wa2dzKGRhdGFfZGljdCk6CisgICAgJycnIENvbGxlY3QgYXZhaWxhYmxlIHBrZ3MgaW4gd2hpY2ggaGF2ZSBQQUNLQUdFQ09ORklHIGZsYWdzICcnJworICAgICMgcGtnX2RpY3QgPSB7J3BrZzEnOiBbJ2ZsYWcxJywgJ2ZsYWcyJywuLi5dfQorICAgIHBrZ19kaWN0ID0ge30KKyAgICBmb3IgZm4gaW4gZGF0YV9kaWN0OgorICAgICAgICBwa2djb25maWdmbGFncyA9IGRhdGFfZGljdFtmbl0uZ2V0VmFyRmxhZ3MoIlBBQ0tBR0VDT05GSUciKQorICAgICAgICBwa2djb25maWdmbGFncy5wb3AoJ2RvYycsIE5vbmUpCisgICAgICAgIHBrZ25hbWUgPSBkYXRhX2RpY3RbZm5dLmdldFZhcigiUCIsIFRydWUpCisgICAgICAgIHBrZ19kaWN0W3BrZ25hbWVdID0gc29ydGVkKHBrZ2NvbmZpZ2ZsYWdzLmtleXMoKSkKKworICAgIHJldHVybiBwa2dfZGljdAorCitkZWYgY29sbGVjdF9mbGFncyhwa2dfZGljdCk6CisgICAgJycnIENvbGxlY3QgYXZhaWxhYmxlIFBBQ0tBR0VDT05GSUcgZmxhZ3MgYW5kIGFsbCBhZmZlY3RlZCBwa2dzICcnJworICAgICMgZmxhZ19kaWN0ID0geydmbGFnJzogWydwa2cxJywgJ3BrZzInLC4uLl19CisgICAgZmxhZ19kaWN0ID0ge30KKyAgICBmb3IgcGtnbmFtZSwgZmxhZ2xpc3QgaW4gcGtnX2RpY3QuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBmbGFnIGluIGZsYWdsaXN0OgorICAgICAgICAgICAgaWYgZmxhZyBpbiBmbGFnX2RpY3Q6CisgICAgICAgICAgICAgICAgZmxhZ19kaWN0W2ZsYWddLmFwcGVuZChwa2duYW1lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmbGFnX2RpY3RbZmxhZ10gPSBbcGtnbmFtZV0KKworICAgIHJldHVybiBmbGFnX2RpY3QKKworZGVmIGRpc3BsYXlfcGtncyhwa2dfZGljdCk6CisgICAgJycnIERpc3BsYXkgYXZhaWxhYmxlIHBrZ3Mgd2hpY2ggaGF2ZSBQQUNLQUdFQ09ORklHIGZsYWdzICcnJworICAgIHBrZ25hbWVfbGVuID0gbGVuKCJSRUNJUEUgTkFNRSIpICsgMQorICAgIGZvciBwa2duYW1lIGluIHBrZ19kaWN0OgorICAgICAgICBpZiBwa2duYW1lX2xlbiA8IGxlbihwa2duYW1lKToKKyAgICAgICAgICAgIHBrZ25hbWVfbGVuID0gbGVuKHBrZ25hbWUpCisgICAgcGtnbmFtZV9sZW4gKz0gMQorCisgICAgaGVhZGVyID0gJyUtKnMlcycgJSAocGtnbmFtZV9sZW4sIHN0cigiUkVDSVBFIE5BTUUiKSwgc3RyKCJQQUNLQUdFQ09ORklHIEZMQUdTIikpCisgICAgcHJpbnQgaGVhZGVyCisgICAgcHJpbnQgc3RyKCIiKS5sanVzdChsZW4oaGVhZGVyKSwgJz0nKQorICAgIGZvciBwa2duYW1lIGluIHNvcnRlZChwa2dfZGljdCk6CisgICAgICAgIHByaW50KCclLSpzJXMnICUgKHBrZ25hbWVfbGVuLCBwa2duYW1lLCAnICcuam9pbihwa2dfZGljdFtwa2duYW1lXSkpKQorCisKK2RlZiBkaXNwbGF5X2ZsYWdzKGZsYWdfZGljdCk6CisgICAgJycnIERpc3BsYXkgYXZhaWxhYmxlIFBBQ0tBR0VDT05GSUcgZmxhZ3MgYW5kIGFsbCBhZmZlY3RlZCBwa2dzICcnJworICAgIGZsYWdfbGVuID0gbGVuKCJQQUNLQUdFQ09ORklHIEZMQUciKSArIDUKKworICAgIGhlYWRlciA9ICclLSpzJXMnICUgKGZsYWdfbGVuLCBzdHIoIlBBQ0tBR0VDT05GSUcgRkxBRyIpLCBzdHIoIlJFQ0lQRSBOQU1FUyIpKQorICAgIHByaW50IGhlYWRlcgorICAgIHByaW50IHN0cigiIikubGp1c3QobGVuKGhlYWRlciksICc9JykKKworICAgIGZvciBmbGFnIGluIHNvcnRlZChmbGFnX2RpY3QpOgorICAgICAgICBwcmludCgnJS0qcyVzJyAlIChmbGFnX2xlbiwgZmxhZywgJyAgJy5qb2luKHNvcnRlZChmbGFnX2RpY3RbZmxhZ10pKSkpCisKK2RlZiBkaXNwbGF5X2FsbChkYXRhX2RpY3QpOgorICAgICcnJyBEaXNwbGF5IGFsbCBwa2dzIGFuZCBQQUNLQUdFQ09ORklHIGluZm9ybWF0aW9uICcnJworICAgIHByaW50IHN0cigiIikubGp1c3QoNTAsICc9JykKKyAgICBmb3IgZm4gaW4gZGF0YV9kaWN0OgorICAgICAgICBwcmludCgnJXMnICUgZGF0YV9kaWN0W2ZuXS5nZXRWYXIoIlAiLCBUcnVlKSkKKyAgICAgICAgcHJpbnQgZm4KKyAgICAgICAgcGFja2FnZWNvbmZpZyA9IGRhdGFfZGljdFtmbl0uZ2V0VmFyKCJQQUNLQUdFQ09ORklHIiwgVHJ1ZSkgb3IgJycKKyAgICAgICAgaWYgcGFja2FnZWNvbmZpZy5zdHJpcCgpID09ICcnOgorICAgICAgICAgICAgcGFja2FnZWNvbmZpZyA9ICdOb25lJworICAgICAgICBwcmludCgnUEFDS0FHRUNPTkZJRyAlcycgJSBwYWNrYWdlY29uZmlnKQorCisgICAgICAgIGZvciBmbGFnLGZsYWdfdmFsIGluIGRhdGFfZGljdFtmbl0uZ2V0VmFyRmxhZ3MoIlBBQ0tBR0VDT05GSUciKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGZsYWcgPT0gImRvYyI6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHByaW50KCdQQUNLQUdFQ09ORklHWyVzXSAlcycgJSAoZmxhZywgZmxhZ192YWwpKQorICAgICAgICBwcmludCAnJworCitkZWYgbWFpbigpOgorICAgIHBrZ19kaWN0ID0ge30KKyAgICBmbGFnX2RpY3QgPSB7fQorCisgICAgIyBDb2xsZWN0IGFuZCB2YWxpZGF0ZSBpbnB1dAorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigKKyAgICAgICAgZGVzY3JpcHRpb24gPSAiTGlzdHMgcmVjaXBlcyBhbmQgUEFDS0FHRUNPTkZJRyBmbGFncy4gV2l0aG91dCAtYSBvciAtZiwgcmVjaXBlcyBhbmQgdGhlaXIgYXZhaWxhYmxlIFBBQ0tBR0VDT05GSUcgZmxhZ3MgYXJlIGxpc3RlZC4iLAorICAgICAgICB1c2FnZSA9ICIiIgorICAgICVwcm9nIFtvcHRpb25zXSIiIikKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCItZiIsICItLWZsYWdzIiwKKyAgICAgICAgICAgIGhlbHAgPSAibGlzdCBhdmFpbGFibGUgUEFDS0FHRUNPTkZJRyBmbGFncyBhbmQgYWZmZWN0ZWQgcmVjaXBlcyIsCisgICAgICAgICAgICBhY3Rpb249InN0b3JlX2NvbnN0IiwgZGVzdD0ibGlzdHR5cGUiLCBjb25zdD0iZmxhZ3MiLCBkZWZhdWx0PSJyZWNpcGVzIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWEiLCAiLS1hbGwiLAorICAgICAgICAgICAgaGVscCA9ICJsaXN0IGFsbCByZWNpcGVzIGFuZCBQQUNLQUdFQ09ORklHIGluZm9ybWF0aW9uIiwKKyAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfY29uc3QiLCBkZXN0PSJsaXN0dHlwZSIsIGNvbnN0PSJhbGwiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItcCIsICItLXByZWZlcnJlZC1vbmx5IiwKKyAgICAgICAgICAgIGhlbHAgPSAid2hlcmUgbXVsdGlwbGUgcmVjaXBlIHZlcnNpb25zIGFyZSBhdmFpbGFibGUsIGxpc3Qgb25seSB0aGUgcHJlZmVycmVkIHZlcnNpb24iLAorICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0icHJlZmVycmVkIiwgZGVmYXVsdD1GYWxzZSkKKworICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhzeXMuYXJndikKKworICAgIGJiaGFuZGxlciA9IGJiLnRpbmZvaWwuVGluZm9pbCgpCisgICAgYmJoYW5kbGVyLnByZXBhcmUoKQorICAgIHByaW50KCJHYXRoZXJpbmcgcmVjaXBlIGRhdGEuLi4iKQorICAgIGRhdGFfZGljdCA9IGdldF9yZWNpcGVzZGF0YShiYmhhbmRsZXIsIG9wdGlvbnMucHJlZmVycmVkKQorCisgICAgaWYgb3B0aW9ucy5saXN0dHlwZSA9PSAnZmxhZ3MnOgorICAgICAgICBwa2dfZGljdCA9IGNvbGxlY3RfcGtncyhkYXRhX2RpY3QpCisgICAgICAgIGZsYWdfZGljdCA9IGNvbGxlY3RfZmxhZ3MocGtnX2RpY3QpCisgICAgICAgIGRpc3BsYXlfZmxhZ3MoZmxhZ19kaWN0KQorICAgIGVsaWYgb3B0aW9ucy5saXN0dHlwZSA9PSAncmVjaXBlcyc6CisgICAgICAgIHBrZ19kaWN0ID0gY29sbGVjdF9wa2dzKGRhdGFfZGljdCkKKyAgICAgICAgZGlzcGxheV9wa2dzKHBrZ19kaWN0KQorICAgIGVsaWYgb3B0aW9ucy5saXN0dHlwZSA9PSAnYWxsJzoKKyAgICAgICAgZGlzcGxheV9hbGwoZGF0YV9kaWN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvbWtlZmlkaXNrLnNoIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvbWtlZmlkaXNrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU1ZjcyYjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9ta2VmaWRpc2suc2gKQEAgLTAsMCArMSw0MDMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUKKyMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyAgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorIworCitMQU5HPUMKKworIyBTZXQgdG8gMSB0byBlbmFibGUgYWRkaXRpb25hbCBvdXRwdXQKK0RFQlVHPTAKK09VVD0iL2Rldi9udWxsIgorCisjCisjIERlZmF1bHRzCisjCisjIDIwIE1iIGZvciB0aGUgYm9vdCBwYXJ0aXRpb24KK0JPT1RfU0laRT0yMAorIyA1JSBmb3Igc3dhcAorU1dBUF9SQVRJTz01CisKKyMgQ2xlYW51cCBhZnRlciBkaWUoKQorY2xlYW51cCgpIHsKKwlkZWJ1ZyAiU3luY2luZyBhbmQgdW5tb3VudGluZyBkZXZpY2VzIgorCSMgVW5tb3VudCBhbnl0aGluZyB3ZSBtb3VudGVkCisJdW5tb3VudCAkUk9PVEZTX01OVCB8fCBlcnJvciAiRmFpbGVkIHRvIHVubW91bnQgJFJPT1RGU19NTlQiCisJdW5tb3VudCAkQk9PVEZTX01OVCB8fCBlcnJvciAiRmFpbGVkIHRvIHVubW91bnQgJEJPT1RGU19NTlQiCisJdW5tb3VudCAkSERESU1HX1JPT1RGU19NTlQgfHwgZXJyb3IgIkZhaWxlZCB0byB1bm1vdW50ICRIRERJTUdfUk9PVEZTX01OVCIKKwl1bm1vdW50ICRIRERJTUdfTU5UIHx8IGVycm9yICJGYWlsZWQgdG8gdW5tb3VudCAkSERESU1HX01OVCIKKworCSMgUmVtb3ZlIHRoZSBUTVBESVIKKwlkZWJ1ZyAiUmVtb3ZpbmcgdGVtcG9yYXJ5IGZpbGVzIgorCWlmIFsgLWQgIiRUTVBESVIiIF07IHRoZW4KKwkJcm0gLXJmICRUTVBESVIgfHwgZXJyb3IgIkZhaWxlZCB0byByZW1vdmUgJFRNUERJUiIKKwlmaQorfQorCit0cmFwICdkaWUgIlNpZ25hbCBSZWNlaXZlZCwgQWJvcnRpbmcuLi4iJyBIVVAgSU5UIFRFUk0KKworIyBMb2dnaW5nIHJvdXRpbmVzCitXQVJOSU5HUz0wCitFUlJPUlM9MAorQ0xFQVI9IiQodHB1dCBzZ3IwKSIKK0lORk89IiQodHB1dCBib2xkKSIKK1JFRD0iJCh0cHV0IHNldGFmIDEpJCh0cHV0IGJvbGQpIgorR1JFRU49IiQodHB1dCBzZXRhZiAyKSQodHB1dCBib2xkKSIKK1lFTExPVz0iJCh0cHV0IHNldGFmIDMpJCh0cHV0IGJvbGQpIgoraW5mbygpIHsKKwllY2hvICIke0lORk99JDEke0NMRUFSfSIKK30KK2Vycm9yKCkgeworCUVSUk9SUz0kKChFUlJPUlMrMSkpCisJZWNobyAiJHtSRUR9JDEke0NMRUFSfSIKK30KK3dhcm4oKSB7CisJV0FSTklOR1M9JCgoV0FSTklOR1MrMSkpCisJZWNobyAiJHtZRUxMT1d9JDEke0NMRUFSfSIKK30KK3N1Y2Nlc3MoKSB7CisJZWNobyAiJHtHUkVFTn0kMSR7Q0xFQVJ9IgorfQorZGllKCkgeworCWVycm9yICIkMSIKKwljbGVhbnVwCisJZXhpdCAxCit9CitkZWJ1ZygpIHsKKwlpZiBbICRERUJVRyAtZXEgMSBdOyB0aGVuCisJCWVjaG8gIiQxIgorCWZpCit9CisKK3VzYWdlKCkgeworCWVjaG8gIlVzYWdlOiAkKGJhc2VuYW1lICQwKSBbLXZdIERFVklDRSBIRERJTUcgVEFSR0VUX0RFVklDRSIKKwllY2hvICIgICAgICAgLXY6IFZlcmJvc2UgZGVidWciCisJZWNobyAiICAgICAgIERFVklDRTogVGhlIGRldmljZSB0byB3cml0ZSB0aGUgaW1hZ2UgdG8sIGUuZy4gL2Rldi9zZGgiCisJZWNobyAiICAgICAgIEhERElNRzogVGhlIGhkZGltZyBmaWxlIHRvIGdlbmVyYXRlIHRoZSBlZmkgZGlzayBmcm9tIgorCWVjaG8gIiAgICAgICBUQVJHRVRfREVWSUNFOiBUaGUgZGV2aWNlIHRoZSB0YXJnZXQgd2lsbCBib290IGZyb20sIGUuZy4gIC9kZXYvbW1jYmxrMCIKK30KKworaW1hZ2VfZGV0YWlscygpIHsKKwlJTUc9JDEKKwlpbmZvICJJbWFnZSBkZXRhaWxzIgorCWVjaG8gIiAgICBpbWFnZTogJChzdGF0IC0tcHJpbnRmICclTlxuJyAkSU1HKSIKKwllY2hvICIgICAgIHNpemU6ICQoc3RhdCAtTCAtLXByaW50ZiAnJXMgYnl0ZXNcbicgJElNRykiCisJZWNobyAiIG1vZGlmaWVkOiAkKHN0YXQgLUwgLS1wcmludGYgJyV5XG4nICRJTUcpIgorCWVjaG8gIiAgICAgdHlwZTogJChmaWxlIC1MIC1iICRJTUcpIgorCWVjaG8gIiIKK30KKworZGV2aWNlX2RldGFpbHMoKSB7CisJREVWPSQxCisJQkxPQ0tfU0laRT01MTIKKworCWluZm8gIkRldmljZSBkZXRhaWxzIgorCWVjaG8gIiAgZGV2aWNlOiAkREVWSUNFIgorCWlmIFsgLWYgIi9zeXMvY2xhc3MvYmxvY2svJERFVi9kZXZpY2UvdmVuZG9yIiBdOyB0aGVuCisJCWVjaG8gIiAgdmVuZG9yOiAkKGNhdCAvc3lzL2NsYXNzL2Jsb2NrLyRERVYvZGV2aWNlL3ZlbmRvcikiCisJZWxzZQorCQllY2hvICIgIHZlbmRvcjogVU5LT1dOIgorCWZpCisJaWYgWyAtZiAiL3N5cy9jbGFzcy9ibG9jay8kREVWL2RldmljZS9tb2RlbCIgXTsgdGhlbgorCQllY2hvICIgICBtb2RlbDogJChjYXQgL3N5cy9jbGFzcy9ibG9jay8kREVWL2RldmljZS9tb2RlbCkiCisJZWxzZQorCQllY2hvICIgICBtb2RlbDogVU5LTk9XTiIKKwlmaQorCWlmIFsgLWYgIi9zeXMvY2xhc3MvYmxvY2svJERFVi9zaXplIiBdOyB0aGVuCisJCWVjaG8gIiAgICBzaXplOiAkKCgkKGNhdCAvc3lzL2NsYXNzL2Jsb2NrLyRERVYvc2l6ZSkgKiAkQkxPQ0tfU0laRSkpIGJ5dGVzIgorCWVsc2UKKwkJZWNobyAiICAgIHNpemU6IFVOS05PV04iCisJZmkKKwllY2hvICIiCit9CisKK3VubW91bnRfZGV2aWNlKCkgeworCWdyZXAgLXEgJERFVklDRSAvcHJvYy9tb3VudHMKKwlpZiBbICQ/IC1lcSAwIF07IHRoZW4KKwkJd2FybiAiJERFVklDRSBsaXN0ZWQgaW4gL3Byb2MvbW91bnRzLCBhdHRlbXB0aW5nIHRvIHVubW91bnQiCisJCXVtb3VudCAkREVWSUNFKiAyPi9kZXYvbnVsbAorCQlyZXR1cm4gJD8KKwlmaQorCXJldHVybiAwCit9CisKK3VubW91bnQoKSB7CisJaWYgWyAiJDEiID0gIiIgXSA7IHRoZW4KKwkJcmV0dXJuIDAKKwlmaQorCWdyZXAgLXEgJDEgL3Byb2MvbW91bnRzCisJaWYgWyAkPyAtZXEgMCBdOyB0aGVuCisJCWRlYnVnICJVbm1vdW50aW5nICQxIgorCQl1bW91bnQgJDEKKwkJcmV0dXJuICQ/CisJZmkKKwlyZXR1cm4gMAorfQorCisjCisjIFBhcnNlIGFuZCB2YWxpZGF0ZSBhcmd1bWVudHMKKyMKK2lmIFsgJCMgLWx0IDMgXSB8fCBbICQjIC1ndCA0IF07IHRoZW4KKwl1c2FnZQorCWV4aXQgMQorZmkKKworaWYgWyAiJDEiID0gIi12IiBdOyB0aGVuCisJREVCVUc9MQorCU9VVD0iMSIKKwlzaGlmdAorZmkKKworREVWSUNFPSQxCitIRERJTUc9JDIKK1RBUkdFVF9ERVZJQ0U9JDMKKworTElOSz0kKHJlYWRsaW5rICRERVZJQ0UpCitpZiBbICQ/IC1lcSAwIF07IHRoZW4KKwlERVZJQ0U9IiRMSU5LIgorZmkKKworaWYgWyAhIC13ICIkREVWSUNFIiBdOyB0aGVuCisJdXNhZ2UKKwlpZiBbICEgLWUgIiR7REVWSUNFfSIgXSA7IHRoZW4KKwkJZGllICJEZXZpY2UgJERFVklDRSBjYW5ub3QgYmUgZm91bmQiCisJZWxzZQorCQlkaWUgIkRldmljZSAkREVWSUNFIGlzIG5vdCB3cml0YWJsZSAobmVlZCB0byBydW4gdW5kZXIgc3Vkbz8pIgorCWZpCitmaQorCitpZiBbICEgLWUgIiRIRERJTUciIF07IHRoZW4KKwl1c2FnZQorCWRpZSAiSERESU1HICRIRERJTUcgZG9lcyBub3QgZXhpc3QiCitmaQorCisjCisjIEVuc3VyZSB0aGUgaGRkaW1nIGlzIG5vdCBtb3VudGVkCisjCit1bm1vdW50ICIkSERESU1HIiB8fCBkaWUgIkZhaWxlZCB0byB1bm1vdW50ICRIRERJTUciCisKKyMKKyMgQ2hlY2sgaWYgYW55ICRERVZJQ0UgcGFydGl0aW9ucyBhcmUgbW91bnRlZAorIwordW5tb3VudF9kZXZpY2UgfHwgZGllICJGYWlsZWQgdG8gdW5tb3VudCAkREVWSUNFIgorCisjCisjIENvbmZpcm0gZGV2aWNlIHdpdGggdXNlcgorIworaW1hZ2VfZGV0YWlscyAkSERESU1HCitkZXZpY2VfZGV0YWlscyAkKGJhc2VuYW1lICRERVZJQ0UpCitlY2hvIC1uICIke0lORk99UHJlcGFyZSBFRkkgaW1hZ2Ugb24gJERFVklDRSBbeS9OXT8ke0NMRUFSfSAiCityZWFkIFJFU1BPTlNFCitpZiBbICIkUkVTUE9OU0UiICE9ICJ5IiBdOyB0aGVuCisJZWNobyAiSW1hZ2UgY3JlYXRpb24gYWJvcnRlZCIKKwlleGl0IDAKK2ZpCisKKworIworIyBQcmVwYXJlIHRoZSB0ZW1wb3Jhcnkgd29ya2luZyBzcGFjZQorIworVE1QRElSPSQobWt0ZW1wIC1kIG1rZWZpZGlzay1YWFgpIHx8IGRpZSAiRmFpbGVkIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgbW91bnRpbmcgZGlyZWN0b3J5LiIKK0hERElNR19NTlQ9JFRNUERJUi9oZGRpbWcKK0hERElNR19ST09URlNfTU5UPSRUTVBESVIvaGRkaW1nX3Jvb3RmcworUk9PVEZTX01OVD0kVE1QRElSL3Jvb3RmcworQk9PVEZTX01OVD0kVE1QRElSL2Jvb3RmcworbWtkaXIgJEhERElNR19NTlQgfHwgZGllICJGYWlsZWQgdG8gY3JlYXRlICRIRERJTUdfTU5UIgorbWtkaXIgJEhERElNR19ST09URlNfTU5UIHx8IGRpZSAiRmFpbGVkIHRvIGNyZWF0ZSAkSERESU1HX1JPT1RGU19NTlQiCitta2RpciAkUk9PVEZTX01OVCB8fCBkaWUgIkZhaWxlZCB0byBjcmVhdGUgJFJPT1RGU19NTlQiCitta2RpciAkQk9PVEZTX01OVCB8fCBkaWUgIkZhaWxlZCB0byBjcmVhdGUgJEJPT1RGU19NTlQiCisKKworIworIyBQYXJ0aXRpb24gJERFVklDRQorIworREVWSUNFX1NJWkU9JChwYXJ0ZWQgLXMgJERFVklDRSB1bml0IG1iIHByaW50IHwgZ3JlcCBeRGlzayB8IGN1dCAtZCIgIiAtZiAzIHwgc2VkIC1lICJzL01CLy8iKQorIyBJZiB0aGUgZGV2aWNlIHNpemUgaXMgbm90IHJlcG9ydGVkIHRoZXJlIG1heSBub3QgYmUgYSB2YWxpZCBsYWJlbAoraWYgWyAiJERFVklDRV9TSVpFIiA9ICIiIF0gOyB0aGVuCisJcGFydGVkIC1zICRERVZJQ0UgbWtsYWJlbCBtc2RvcyB8fCBkaWUgIkZhaWxlZCB0byBjcmVhdGUgTVNET1MgcGFydGl0aW9uIHRhYmxlIgorCURFVklDRV9TSVpFPSQocGFydGVkIC1zICRERVZJQ0UgdW5pdCBtYiBwcmludCB8IGdyZXAgXkRpc2sgfCBjdXQgLWQiICIgLWYgMyB8IHNlZCAtZSAicy9NQi8vIikKK2ZpCitTV0FQX1NJWkU9JCgoREVWSUNFX1NJWkUqU1dBUF9SQVRJTy8xMDApKQorUk9PVEZTX1NJWkU9JCgoREVWSUNFX1NJWkUtQk9PVF9TSVpFLVNXQVBfU0laRSkpCitST09URlNfU1RBUlQ9JCgoQk9PVF9TSVpFKSkKK1JPT1RGU19FTkQ9JCgoUk9PVEZTX1NUQVJUK1JPT1RGU19TSVpFKSkKK1NXQVBfU1RBUlQ9JCgoUk9PVEZTX0VORCkpCisKKyMgTU1DIGRldmljZXMgdXNlIGEgcGFydGl0aW9uIHByZWZpeCBjaGFyYWN0ZXIgJ3AnCitQQVJUX1BSRUZJWD0iIgoraWYgWyAhICIke0RFVklDRSMvZGV2L21tY2Jsa30iID0gIiR7REVWSUNFfSIgXSB8fCBbICEgIiR7REVWSUNFIy9kZXYvbG9vcH0iID0gIiR7REVWSUNFfSIgXTsgdGhlbgorCVBBUlRfUFJFRklYPSJwIgorZmkKK0JPT1RGUz0kREVWSUNFJHtQQVJUX1BSRUZJWH0xCitST09URlM9JERFVklDRSR7UEFSVF9QUkVGSVh9MgorU1dBUD0kREVWSUNFJHtQQVJUX1BSRUZJWH0zCisKK1RBUkdFVF9QQVJUX1BSRUZJWD0iIgoraWYgWyAhICIke1RBUkdFVF9ERVZJQ0UjL2Rldi9tbWNibGt9IiA9ICIke1RBUkdFVF9ERVZJQ0V9IiBdOyB0aGVuCisJVEFSR0VUX1BBUlRfUFJFRklYPSJwIgorZmkKK1RBUkdFVF9ST09URlM9JFRBUkdFVF9ERVZJQ0Uke1RBUkdFVF9QQVJUX1BSRUZJWH0yCitUQVJHRVRfU1dBUD0kVEFSR0VUX0RFVklDRSR7VEFSR0VUX1BBUlRfUFJFRklYfTMKKworZWNobyAiIgoraW5mbyAiQm9vdCBwYXJ0aXRpb24gc2l6ZTogICAkQk9PVF9TSVpFIE1CICgkQk9PVEZTKSIKK2luZm8gIlJPT1RGUyBwYXJ0aXRpb24gc2l6ZTogJFJPT1RGU19TSVpFIE1CICgkUk9PVEZTKSIKK2luZm8gIlN3YXAgcGFydGl0aW9uIHNpemU6ICAgJFNXQVBfU0laRSBNQiAoJFNXQVApIgorZWNobyAiIgorCisjIFVzZSBNU0RPUyBieSBkZWZhdWx0IGFzIEdQVCBjYW5ub3QgYmUgcmVsaWFibHkgZGlzdHJpYnV0ZWQgaW4gZGlzayBpbWFnZSBmb3JtCisjIGFzIGl0IHJlcXVpcmVzIHRoZSBiYWNrdXAgdGFibGUgdG8gYmUgb24gdGhlIGxhc3QgYmxvY2sgb2YgdGhlIGRldmljZSwgd2hpY2gKKyMgb2YgY291cnNlIHZhcmllcyBmcm9tIGRldmljZSB0byBkZXZpY2UuCisKK2luZm8gIlBhcnRpdGlvbmluZyBpbnN0YWxsYXRpb24gbWVkaWEgKCRERVZJQ0UpIgorCitkZWJ1ZyAiRGVsZXRpbmcgcGFydGl0aW9uIHRhYmxlIG9uICRERVZJQ0UiCitkZCBpZj0vZGV2L3plcm8gb2Y9JERFVklDRSBicz01MTIgY291bnQ9MiA+JE9VVCAyPiYxIHx8IGRpZSAiRmFpbGVkIHRvIHplcm8gYmVnaW5uaW5nIG9mICRERVZJQ0UiCisKK2RlYnVnICJDcmVhdGluZyBuZXcgcGFydGl0aW9uIHRhYmxlIChNU0RPUykgb24gJERFVklDRSIKK3BhcnRlZCAtcyAkREVWSUNFIG1rbGFiZWwgbXNkb3MgPiRPVVQgMj4mMSB8fCBkaWUgIkZhaWxlZCB0byBjcmVhdGUgTVNET1MgcGFydGl0aW9uIHRhYmxlIgorCitkZWJ1ZyAiQ3JlYXRpbmcgYm9vdCBwYXJ0aXRpb24gb24gJEJPT1RGUyIKK3BhcnRlZCAtcyAkREVWSUNFIG1rcGFydCBwcmltYXJ5IDAlICRCT09UX1NJWkUgPiRPVVQgMj4mMSB8fCBkaWUgIkZhaWxlZCB0byBjcmVhdGUgQk9PVCBwYXJ0aXRpb24iCisKK2RlYnVnICJFbmFibGluZyBib290IGZsYWcgb24gJEJPT1RGUyIKK3BhcnRlZCAtcyAkREVWSUNFIHNldCAxIGJvb3Qgb24gPiRPVVQgMj4mMSB8fCBkaWUgIkZhaWxlZCB0byBlbmFibGUgYm9vdCBmbGFnIgorCitkZWJ1ZyAiQ3JlYXRpbmcgUk9PVEZTIHBhcnRpdGlvbiBvbiAkUk9PVEZTIgorcGFydGVkIC1zICRERVZJQ0UgbWtwYXJ0IHByaW1hcnkgJFJPT1RGU19TVEFSVCAkUk9PVEZTX0VORCA+JE9VVCAyPiYxIHx8IGRpZSAiRmFpbGVkIHRvIGNyZWF0ZSBST09URlMgcGFydGl0aW9uIgorCitkZWJ1ZyAiQ3JlYXRpbmcgc3dhcCBwYXJ0aXRpb24gb24gJFNXQVAiCitwYXJ0ZWQgLXMgJERFVklDRSBta3BhcnQgcHJpbWFyeSAkU1dBUF9TVEFSVCAxMDAlID4kT1VUIDI+JjEgfHwgZGllICJGYWlsZWQgdG8gY3JlYXRlIFNXQVAgcGFydGl0aW9uIgorCitpZiBbICRERUJVRyAtZXEgMSBdOyB0aGVuCisJcGFydGVkIC1zICRERVZJQ0UgcHJpbnQKK2ZpCisKKworIworIyBDaGVjayBpZiBhbnkgJERFVklDRSBwYXJ0aXRpb25zIGFyZSBtb3VudGVkIGFmdGVyIHBhcnRpdGlvbmluZworIwordW5tb3VudF9kZXZpY2UgfHwgZGllICJGYWlsZWQgdG8gdW5tb3VudCAkREVWSUNFIHBhcnRpdGlvbnMiCisKKworIworIyBGb3JtYXQgJERFVklDRSBwYXJ0aXRpb25zCisjCitpbmZvICJGb3JtYXR0aW5nIHBhcnRpdGlvbnMiCitkZWJ1ZyAiRm9ybWF0dGluZyAkQk9PVEZTIGFzIHZmYXQiCitpZiBbICEgIiR7REVWSUNFIy9kZXYvbG9vcH0iID0gIiR7REVWSUNFfSIgXTsgdGhlbgorCW1rZnMudmZhdCAtSSAkQk9PVEZTIC1uICJFRkkiID4kT1VUIDI+JjEgfHwgZGllICJGYWlsZWQgdG8gZm9ybWF0ICRCT09URlMiCitlbHNlCisJbWtmcy52ZmF0ICRCT09URlMgLW4gIkVGSSIgPiRPVVQgMj4mMSB8fCBkaWUgIkZhaWxlZCB0byBmb3JtYXQgJEJPT1RGUyIKK2ZpCisKK2RlYnVnICJGb3JtYXR0aW5nICRST09URlMgYXMgZXh0MyIKK21rZnMuZXh0MyAtRiAkUk9PVEZTIC1MICJST09UIiA+JE9VVCAyPiYxIHx8IGRpZSAiRmFpbGVkIHRvIGZvcm1hdCAkUk9PVEZTIgorCitkZWJ1ZyAiRm9ybWF0dGluZyBzd2FwIHBhcnRpdGlvbiAoJFNXQVApIgorbWtzd2FwICRTV0FQID4kT1VUIDI+JjEgfHwgZGllICJGYWlsZWQgdG8gcHJlcGFyZSBzd2FwIgorCisKKyMKKyMgSW5zdGFsbGluZyB0byAkREVWSUNFCisjCitkZWJ1ZyAiTW91bnRpbmcgaW1hZ2VzIGFuZCBkZXZpY2UgaW4gcHJlcGFyYXRpb24gZm9yIGluc3RhbGxhdGlvbiIKK21vdW50IC1vIGxvb3AgJEhERElNRyAkSERESU1HX01OVCA+JE9VVCAyPiYxIHx8IGVycm9yICJGYWlsZWQgdG8gbW91bnQgJEhERElNRyIKK21vdW50IC1vIGxvb3AgJEhERElNR19NTlQvcm9vdGZzLmltZyAkSERESU1HX1JPT1RGU19NTlQgPiRPVVQgMj4mMSB8fCBlcnJvciAiRmFpbGVkIHRvIG1vdW50IHJvb3Rmcy5pbWciCittb3VudCAkUk9PVEZTICRST09URlNfTU5UID4kT1VUIDI+JjEgfHwgZXJyb3IgIkZhaWxlZCB0byBtb3VudCAkUk9PVEZTIG9uICRST09URlNfTU5UIgorbW91bnQgJEJPT1RGUyAkQk9PVEZTX01OVCA+JE9VVCAyPiYxIHx8IGVycm9yICJGYWlsZWQgdG8gbW91bnQgJEJPT1RGUyBvbiAkQk9PVEZTX01OVCIKKworaW5mbyAiUHJlcGFyaW5nIGJvb3QgcGFydGl0aW9uIgorRUZJRElSPSIkQk9PVEZTX01OVC9FRkkvQk9PVCIKK2NwICRIRERJTUdfTU5UL3ZtbGludXogJEJPT1RGU19NTlQgPiRPVVQgMj4mMSB8fCBlcnJvciAiRmFpbGVkIHRvIGNvcHkgdm1saW51eiIKKyMgQ29weSB0aGUgZWZpIGxvYWRlciBhbmQgY29uZmlncyAoYm9vdGkqLmVmaSBhbmQgZ3J1Yi5jZmcgaWYgaXQgZXhpc3RzKQorY3AgLXIgJEhERElNR19NTlQvRUZJICRCT09URlNfTU5UID4kT1VUIDI+JjEgfHwgZXJyb3IgIkZhaWxlZCB0byBjb3B5IEVGSSBkaXIiCisjIFNpbGVudGx5IGlnbm9yZSBhIG1pc3NpbmcgZ3VtbWlib290IGxvYWRlciBkaXIgKHdlIG1pZ2h0IGp1c3QgYmUgYSBHUlVCIGltYWdlKQorY3AgLXIgJEhERElNR19NTlQvbG9hZGVyICRCT09URlNfTU5UID4kT1VUIDI+JjEKKworIyBVcGRhdGUgdGhlIGJvb3QgbG9hZGVycyBjb25maWd1cmF0aW9ucyBmb3IgYW4gaW5zdGFsbGVkIGltYWdlCisjIFJlbW92ZSBhbnkgZXhpc3Rpbmcgcm9vdD0ga2VybmVsIHBhcmFtZXRlcnMgYW5kOgorIyBvIEFkZCBhIHJvb3Q9IHBhcmFtZXRlciB3aXRoIHRoZSB0YXJnZXQgcm9vdGZzCisjIG8gU3BlY2lmeSBybyBzbyBmc2NrIGNhbiBiZSBydW4gZHVyaW5nIGJvb3QKKyMgbyBTcGVjaWZ5IHJvb3R3YWl0IGluIGNhc2UgdGhlIHRhcmdldCBtZWRpYSBpcyBhbiBhc3luY3Jvbm91cyBibG9jayBkZXZpY2UKKyMgICBzdWNoIGFzIE1NQyBvciBVU0IgZGlza3MKKyMgbyBTcGVjaWZ5ICJxdWlldCIgdG8gbWluaW1pemUgYm9vdCB0aW1lIHdoZW4gdXNpbmcgc2xvdyBzZXJpYWwgY29uc29sZXMKKworIyBMb29rIGZvciBhIEdSVUIgaW5zdGFsbGF0aW9uCitHUlVCX0NGRz0iJEVGSURJUi9ncnViLmNmZyIKK2lmIFsgLWUgIiRHUlVCX0NGRyIgXTsgdGhlbgorCWluZm8gIkNvbmZpZ3VyaW5nIEdSVUIiCisJIyBEZWxldGUgdGhlIGluc3RhbGwgZW50cnkKKwlzZWQgLWkgIi9tZW51ZW50cnkgJ2luc3RhbGwnLywvXn0vZCIgJEdSVUJfQ0ZHCisJIyBEZWxldGUgdGhlIGluaXRyZCBsaW5lcworCXNlZCAtaSAiL2luaXRyZCAvZCIgJEdSVUJfQ0ZHCisJIyBEZWxldGUgYW55IExBQkVMPSBzdHJpbmdzCisJc2VkIC1pICJzLyBMQUJFTD1bXiBdKi8gLyIgJEdSVUJfQ0ZHCisKKwlzZWQgLWkgInNAIHJvb3Q9W14gXSpAIEAiICRHUlVCX0NGRworCXNlZCAtaSAic0B2bWxpbnV6IEB2bWxpbnV6IHJvb3Q9JFRBUkdFVF9ST09URlMgcm8gcm9vdHdhaXQgcXVpZXQgQCIgJEdSVUJfQ0ZHCitmaQorCisjIExvb2sgZm9yIGEgZ3VtbWlib290IGluc3RhbGxhdGlvbgorR1VNTUlfRU5UUklFUz0iJEJPT1RGU19NTlQvbG9hZGVyL2VudHJpZXMiCitHVU1NSV9DRkc9IiRHVU1NSV9FTlRSSUVTL2Jvb3QuY29uZiIKK2lmIFsgLWQgIiRHVU1NSV9FTlRSSUVTIiBdOyB0aGVuCisJaW5mbyAiQ29uZmlndXJpbmcgR3VtbWlib290IgorCSMgcmVtb3ZlIHRoZSBpbnN0YWxsIHRhcmdldCBpZiBpdCBleGlzdHMKKwlybSAkR1VNTUlfRU5UUklFUy9pbnN0YWxsLmNvbmYgPiRPVVQgMj4mMQorCisJaWYgWyAhIC1lICIkR1VNTUlfQ0ZHIiBdOyB0aGVuCisJCWVjaG8gIkVSUk9SOiAkR1VNTUlfQ0ZHIG5vdCBmb3VuZCIKKwlmaQorCisJc2VkIC1pICIvaW5pdHJkIC9kIiAkR1VNTUlfQ0ZHCisJc2VkIC1pICJzQCByb290PVteIF0qQCBAIiAkR1VNTUlfQ0ZHCisJc2VkIC1pICJzQG9wdGlvbnMgKkxBQkVMPWJvb3QgQG9wdGlvbnMgTEFCRUw9Qm9vdCByb290PSRUQVJHRVRfUk9PVEZTIHJvIHJvb3R3YWl0IHF1aWV0IEAiICRHVU1NSV9DRkcKK2ZpCisKKyMgRW5zdXJlIHdlIGhhdmUgYXQgbGVhc3Qgb25lIEVGSSBib290bG9hZGVyIGNvbmZpZ3VyZWQKK2lmIFsgISAtZSAkR1JVQl9DRkcgXSAmJiBbICEgLWUgJEdVTU1JX0NGRyBdOyB0aGVuCisJZGllICJObyBFRkkgYm9vdGxvYWRlciBjb25maWd1cmF0aW9uIGZvdW5kIgorZmkKKworCitpbmZvICJDb3B5aW5nIFJPT1RGUyBmaWxlcyAodGhpcyBtYXkgdGFrZSBhIHdoaWxlKSIKK2NwIC1hICRIRERJTUdfUk9PVEZTX01OVC8qICRST09URlNfTU5UID4kT1VUIDI+JjEgfHwgZGllICJSb290IEZTIGNvcHkgZmFpbGVkIgorCitlY2hvICIkVEFSR0VUX1NXQVAgICAgIHN3YXAgICAgICAgICAgICAgc3dhcCAgICAgICBkZWZhdWx0cyAgICAgICAgICAgICAgMCAwIiA+PiAkUk9PVEZTX01OVC9ldGMvZnN0YWIKKworIyBXZSBkb250IHdhbnQgdWRldiB0byBtb3VudCBvdXIgcm9vdCBkZXZpY2Ugd2hpbGUgd2UncmUgYm9vdGluZy4uLgoraWYgWyAtZCAkUk9PVEZTX01OVC9ldGMvdWRldi8gXSA7IHRoZW4KKwllY2hvICIkVEFSR0VUX0RFVklDRSIgPj4gJFJPT1RGU19NTlQvZXRjL3VkZXYvbW91bnQuYmxhY2tsaXN0CitmaQorCisKKyMgQ2FsbCBjbGVhbnVwIHRvIHVubW91bnQgZGV2aWNlcyBhbmQgaW1hZ2VzIGFuZCByZW1vdmUgdGhlIFRNUERJUgorY2xlYW51cAorCitlY2hvICIiCitpZiBbICRXQVJOSU5HUyAtbmUgMCBdICYmIFsgJEVSUk9SUyAtZXEgMCBdOyB0aGVuCisJZWNobyAiJHtZRUxMT1d9SW5zdGFsbGF0aW9uIGNvbXBsZXRlZCB3aXRoIHdhcm5pbmdzJHtDTEVBUn0iCisJZWNobyAiJHtZRUxMT1d9V2FybmluZ3M6ICRXQVJOSU5HUyR7Q0xFQVJ9IgorZWxpZiBbICRFUlJPUlMgLW5lIDAgXTsgdGhlbgorCWVjaG8gIiR7UkVEfUluc3RhbGxhdGlvbiBlbmNvdW50ZXJlZCBlcnJvcnMke0NMRUFSfSIKKwllY2hvICIke1JFRH1FcnJvcnM6ICRFUlJPUlMke0NMRUFSfSIKKwllY2hvICIke1lFTExPV31XYXJuaW5nczogJFdBUk5JTkdTJHtDTEVBUn0iCitlbHNlCisJc3VjY2VzcyAiSW5zdGFsbGF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkiCitmaQorZWNobyAiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTIuNy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3B5dGhvbi9nZW5lcmF0ZS1tYW5pZmVzdC0yLjcucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTM2NTIyZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3B5dGhvbi9nZW5lcmF0ZS1tYW5pZmVzdC0yLjcucHkKQEAgLTAsMCArMSwzOTggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIGdlbmVyYXRlIFB5dGhvbiBNYW5pZmVzdCBmb3IgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyMgKEMpIDIwMDItMjAxMCBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtbGF1ZXJAdmFuaWxsZS1tZWRpYS5kZT4KKyMgKEMpIDIwMDcgSmVyZW15IExhaW5lCisjIGxpY2Vuc2VkIHVuZGVyIE1JVCwgc2VlIENPUFlJTkcuTUlUCisjCisjIEp1bmUgMjIsIDIwMTEgLS0gTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorIyAgKiBVcGRhdGVkIHRvIG5vIGxvbmdlciBnZW5lcmF0ZSBzcGVjaWFsIC1kYmcgcGFja2FnZSwgaW5zdGVhZCB1c2UgdGhlCisjICAgIHNpbmdsZSBzeXN0ZW0gLWRiZworIyAgKiBVcGRhdGUgdmVyc2lvbiB3aXRoICIuMSIgdG8gaW5kaWNhdGUgdGhpcyBjaGFuZ2UKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQorCitWRVJTSU9OID0gIjIuNy4yIgorCitfX2F1dGhvcl9fID0gIk1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1sYXVlckB2YW5pbGxlLW1lZGlhLmRlPiIKK19fdmVyc2lvbl9fID0gIjIwMTEwMjIyLjIiCisKK2NsYXNzIE1ha2VmaWxlTWFrZXI6CisKKyAgICBkZWYgX19pbml0X18oIHNlbGYsIG91dGZpbGUgKToKKyAgICAgICAgIiIiaW5pdGlhbGl6ZSIiIgorICAgICAgICBzZWxmLnBhY2thZ2VzID0ge30KKyAgICAgICAgc2VsZi50YXJnZXRQcmVmaXggPSAiJHtsaWJkaXJ9L3B5dGhvbiVzLyIgJSBWRVJTSU9OWzozXQorICAgICAgICBzZWxmLm91dHB1dCA9IG91dGZpbGUKKyAgICAgICAgc2VsZi5vdXQoICIiIgorIyBXQVJOSU5HOiBUaGlzIGZpbGUgaXMgQVVUTyBHRU5FUkFURUQ6IE1hbnVhbCBlZGl0cyB3aWxsIGJlIGxvc3QgbmV4dCB0aW1lIEkgcmVnZW5lcmF0ZSB0aGUgZmlsZS4KKyMgR2VuZXJhdG9yOiAnJXMnIFZlcnNpb24gJXMgKEMpIDIwMDItMjAxMCBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtbGF1ZXJAdmFuaWxsZS1tZWRpYS5kZT4KKyMgVmlzaXQgdGhlIFB5dGhvbiBmb3IgRW1iZWRkZWQgU3lzdGVtcyBTaXRlID0+IGh0dHA6Ly93d3cuVmFuaWxsZS5kZS9wcm9qZWN0cy9weXRob24uc3B5CisiIiIgJSAoIHN5cy5hcmd2WzBdLCBfX3ZlcnNpb25fXyApICkKKworICAgICMKKyAgICAjIGhlbHBlciBmdW5jdGlvbnMKKyAgICAjCisKKyAgICBkZWYgb3V0KCBzZWxmLCBkYXRhICk6CisgICAgICAgICIiInByaW50IGEgbGluZSB0byB0aGUgb3V0cHV0IGZpbGUiIiIKKyAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUoICIlc1xuIiAlIGRhdGEgKQorCisgICAgZGVmIHNldFByZWZpeCggc2VsZiwgdGFyZ2V0UHJlZml4ICk6CisgICAgICAgICIiInNldCBhIGZpbGUgcHJlZml4IGZvciBhZGRQYWNrYWdlIGZpbGVzIiIiCisgICAgICAgIHNlbGYudGFyZ2V0UHJlZml4ID0gdGFyZ2V0UHJlZml4CisKKyAgICBkZWYgZG9Qcm9sb2coIHNlbGYgKToKKyAgICAgICAgc2VsZi5vdXQoICIiIiAiIiIgKQorICAgICAgICBzZWxmLm91dCggIiIgKQorCisgICAgZGVmIGFkZFBhY2thZ2UoIHNlbGYsIG5hbWUsIGRlc2NyaXB0aW9uLCBkZXBlbmRlbmNpZXMsIGZpbGVuYW1lcyApOgorICAgICAgICAiIiJhZGQgYSBwYWNrYWdlIHRvIHRoZSBNYWtlZmlsZSIiIgorICAgICAgICBpZiB0eXBlKCBmaWxlbmFtZXMgKSA9PSB0eXBlKCAiIiApOgorICAgICAgICAgICAgZmlsZW5hbWVzID0gZmlsZW5hbWVzLnNwbGl0KCkKKyAgICAgICAgZnVsbEZpbGVuYW1lcyA9IFtdCisgICAgICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlbmFtZXM6CisgICAgICAgICAgICBpZiBmaWxlbmFtZVswXSAhPSAiJCI6CisgICAgICAgICAgICAgICAgZnVsbEZpbGVuYW1lcy5hcHBlbmQoICIlcyVzIiAlICggc2VsZi50YXJnZXRQcmVmaXgsIGZpbGVuYW1lICkgKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmdWxsRmlsZW5hbWVzLmFwcGVuZCggZmlsZW5hbWUgKQorICAgICAgICBzZWxmLnBhY2thZ2VzW25hbWVdID0gZGVzY3JpcHRpb24sIGRlcGVuZGVuY2llcywgZnVsbEZpbGVuYW1lcworCisgICAgZGVmIGRvQm9keSggc2VsZiApOgorICAgICAgICAiIiJnZW5lcmF0ZSBib2R5IG9mIE1ha2VmaWxlIiIiCisKKyAgICAgICAgZ2xvYmFsIFZFUlNJT04KKworICAgICAgICAjCisgICAgICAgICMgZ2VuZXJhdGUgcHJvdmlkZXMgbGluZQorICAgICAgICAjCisKKyAgICAgICAgcHJvdmlkZUxpbmUgPSAnUFJPVklERVMrPSInCisgICAgICAgIGZvciBuYW1lIGluIHNvcnRlZChzZWxmLnBhY2thZ2VzKToKKyAgICAgICAgICAgIHByb3ZpZGVMaW5lICs9ICIlcyAiICUgbmFtZQorICAgICAgICBwcm92aWRlTGluZSArPSAnIicKKworICAgICAgICBzZWxmLm91dCggcHJvdmlkZUxpbmUgKQorICAgICAgICBzZWxmLm91dCggIiIgKQorCisgICAgICAgICMKKyAgICAgICAgIyBnZW5lcmF0ZSBwYWNrYWdlIGxpbmUKKyAgICAgICAgIworCisgICAgICAgIHBhY2thZ2VMaW5lID0gJ1BBQ0tBR0VTPSIke1BOfS1kYmcgJworICAgICAgICBmb3IgbmFtZSBpbiBzb3J0ZWQoc2VsZi5wYWNrYWdlcyk6CisgICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoIiR7UE59LWRpc3R1dGlscyIpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gIiR7UE59LWRpc3R1dGlscyI6CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VMaW5lICs9ICIlcy1zdGF0aWNkZXYgJXMgIiAlIChuYW1lLCBuYW1lKQorICAgICAgICAgICAgZWxpZiBuYW1lICE9ICcke1BOfS1kYmcnOgorICAgICAgICAgICAgICAgIHBhY2thZ2VMaW5lICs9ICIlcyAiICUgbmFtZQorICAgICAgICBwYWNrYWdlTGluZSArPSAnJHtQTn0tbW9kdWxlcyInCisKKyAgICAgICAgc2VsZi5vdXQoIHBhY2thZ2VMaW5lICkKKyAgICAgICAgc2VsZi5vdXQoICIiICkKKworICAgICAgICAjCisgICAgICAgICMgZ2VuZXJhdGUgcGFja2FnZSB2YXJpYWJsZXMKKyAgICAgICAgIworCisgICAgICAgIGZvciBuYW1lLCBkYXRhIGluIHNvcnRlZChzZWxmLnBhY2thZ2VzLml0ZXJpdGVtcygpKToKKyAgICAgICAgICAgIGRlc2MsIGRlcHMsIGZpbGVzID0gZGF0YQorCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIHdyaXRlIG91dCB0aGUgZGVzY3JpcHRpb24sIHJldmlzaW9uIGFuZCBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgIHNlbGYub3V0KCAnU1VNTUFSWV8lcz0iJXMiJyAlICggbmFtZSwgZGVzYyApICkKKyAgICAgICAgICAgIHNlbGYub3V0KCAnUkRFUEVORFNfJXM9IiVzIicgJSAoIG5hbWUsIGRlcHMgKSApCisKKyAgICAgICAgICAgIGxpbmUgPSAnRklMRVNfJXM9IicgJSBuYW1lCisKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgY2hlY2sgd2hpY2ggZGlyZWN0b3JpZXMgdG8gbWFrZSBpbiB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeQorICAgICAgICAgICAgIworCisgICAgICAgICAgICBkaXJzZXQgPSB7fSAjIGlmIHB5dGhvbiBoYWQgYSBzZXQtZGF0YXR5cGUgdGhpcyB3b3VsZCBiZSBzdWZmaWNpZW50LiBmb3Igbm93LCB3ZSdyZSB1c2luZyBhIGRpY3QgaW5zdGVhZC4KKyAgICAgICAgICAgIGZvciB0YXJnZXQgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgZGlyc2V0W29zLnBhdGguZGlybmFtZSggdGFyZ2V0ICldID0gVHJ1ZQorCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIGdlbmVyYXRlIHdoaWNoIGZpbGVzIHRvIGNvcHkgZm9yIHRoZSB0YXJnZXQgKC1kZlIgYmVjYXVzZSB3aG9sZSBkaXJlY3RvcmllcyBhcmUgYWxzbyBhbGxvd2VkKQorICAgICAgICAgICAgIworCisgICAgICAgICAgICBmb3IgdGFyZ2V0IGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGxpbmUgKz0gIiVzICIgJSB0YXJnZXQKKworICAgICAgICAgICAgbGluZSArPSAnIicKKyAgICAgICAgICAgIHNlbGYub3V0KCBsaW5lICkKKyAgICAgICAgICAgIHNlbGYub3V0KCAiIiApCisKKyAgICAgICAgc2VsZi5vdXQoICdTVU1NQVJZXyR7UE59LW1vZHVsZXM9IkFsbCBQeXRob24gbW9kdWxlcyInICkKKyAgICAgICAgbGluZSA9ICdSREVQRU5EU18ke1BOfS1tb2R1bGVzPSInCisKKyAgICAgICAgZm9yIG5hbWUsIGRhdGEgaW4gc29ydGVkKHNlbGYucGFja2FnZXMuaXRlcml0ZW1zKCkpOgorICAgICAgICAgICAgaWYgbmFtZSBub3QgaW4gWycke1BOfS1kZXYnLCAnJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2RldiddOgorICAgICAgICAgICAgICAgIGxpbmUgKz0gIiVzICIgJSBuYW1lCisKKyAgICAgICAgc2VsZi5vdXQoICIlcyBcIiIgJSBsaW5lICkKKyAgICAgICAgc2VsZi5vdXQoICdBTExPV19FTVBUWV8ke1BOfS1tb2R1bGVzID0gIjEiJyApCisKKyAgICBkZWYgZG9FcGlsb2coIHNlbGYgKToKKyAgICAgICAgc2VsZi5vdXQoICIiIiIiIiApCisgICAgICAgIHNlbGYub3V0KCAiIiApCisKKyAgICBkZWYgbWFrZSggc2VsZiApOgorICAgICAgICBzZWxmLmRvUHJvbG9nKCkKKyAgICAgICAgc2VsZi5kb0JvZHkoKQorICAgICAgICBzZWxmLmRvRXBpbG9nKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKworICAgIGlmIGxlbiggc3lzLmFyZ3YgKSA+IDE6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayhzeXMuYXJndlsxXSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHN5cy5leGNfY2xlYXIoKQorICAgICAgICBvdXRmaWxlID0gZmlsZSggc3lzLmFyZ3ZbMV0sICJ3IiApCisgICAgZWxzZToKKyAgICAgICAgb3V0ZmlsZSA9IHN5cy5zdGRvdXQKKworICAgIG0gPSBNYWtlZmlsZU1ha2VyKCBvdXRmaWxlICkKKworICAgICMgQWRkIHBhY2thZ2VzIGhlcmUuIE9ubHkgc3BlY2lmeSBkbG9wZW4tc3R5bGUgbGlicmFyeSBkZXBlbmRlbmNpZXMgaGVyZSwgbm8gbGRkLXN0eWxlIGRlcGVuZGVuY2llcyEKKyAgICAjIFBhcmFtZXRlcnM6IHJldmlzaW9uLCBuYW1lLCBkZXNjcmlwdGlvbiwgZGVwZW5kZW5jaWVzLCBmaWxlbmFtZXMKKyAgICAjCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jb3JlIiwgIlB5dGhvbiBpbnRlcnByZXRlciBhbmQgY29yZSBtb2R1bGVzIiwgIiR7UE59LWxhbmcgJHtQTn0tcmUiLAorICAgICJfX2Z1dHVyZV9fLiogX2FiY29sbC4qIGFiYy4qIGNvcHkuKiBjb3B5X3JlZy4qIENvbmZpZ1BhcnNlci4qICIgKworICAgICJnZW5lcmljcGF0aC4qIGdldG9wdC4qIGxpbmVjYWNoZS4qIG5ldy4qICIgKworICAgICJvcy4qIHBvc2l4cGF0aC4qIHN0cnVjdC4qICIgKworICAgICJ3YXJuaW5ncy4qIHNpdGUuKiBzdGF0LiogIiArCisgICAgIlVzZXJEaWN0LiogVXNlckxpc3QuKiBVc2VyU3RyaW5nLiogIiArCisgICAgImxpYi1keW5sb2FkL2JpbmFzY2lpLnNvIGxpYi1keW5sb2FkL19zdHJ1Y3Quc28gbGliLWR5bmxvYWQvdGltZS5zbyAiICsKKyAgICAibGliLWR5bmxvYWQveHJlYWRsaW5lcy5zbyB0eXBlcy4qIHBsYXRmb3JtLiogJHtiaW5kaXJ9L3B5dGhvbiogIiAgKworICAgICJfd2Vha3JlZnNldC4qIHN5c2NvbmZpZy4qIF9zeXNjb25maWdkYXRhLiogY29uZmlnL01ha2VmaWxlICIgKworICAgICIke2luY2x1ZGVkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vcHljb25maWcqLmggIiArCisgICAgIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L3NpdGVjdXN0b21pemUucHkgIikKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWRldiIsICJQeXRob24gZGV2ZWxvcG1lbnQgcGFja2FnZSIsICIke1BOfS1jb3JlIiwKKyAgICAiJHtpbmNsdWRlZGlyfSAiICsKKyAgICAiJHtsaWJkaXJ9L2xpYioke1NPTElCU0RFVn0gIiArCisgICAgIiR7bGliZGlyfS8qLmxhICIgKworICAgICIke2xpYmRpcn0vKi5hICIgKworICAgICIke2xpYmRpcn0vKi5vICIgKworICAgICIke2xpYmRpcn0vcGtnY29uZmlnICIgKworICAgICIke2Jhc2VfbGliZGlyfS8qLmEgIiArCisgICAgIiR7YmFzZV9saWJkaXJ9LyoubyAiICsKKyAgICAiJHtkYXRhZGlyfS9hY2xvY2FsICIgKworICAgICIke2RhdGFkaXJ9L3BrZ2NvbmZpZyAiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LTJ0bzMiLCAiUHl0aG9uIGF1dG9tYXRlZCBQeXRob24gMiB0byAzIGNvZGUgdHJhbnNsYXRvciIsICIke1BOfS1jb3JlIiwKKyAgICAiJHtiaW5kaXJ9LzJ0bzMgbGliMnRvMyIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWlkbGUiLCAiUHl0aG9uIEludGVncmF0ZWQgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQiLCAiJHtQTn0tY29yZSAke1BOfS10a2ludGVyIiwKKyAgICAiJHtiaW5kaXJ9L2lkbGUgaWRsZWxpYiIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXB5ZG9jIiwgIlB5dGhvbiBpbnRlcmFjdGl2ZSBoZWxwIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1sYW5nICR7UE59LXN0cmluZ29sZCAke1BOfS1yZSIsCisgICAgIiR7YmluZGlyfS9weWRvYyBweWRvYy4qIHB5ZG9jX2RhdGEiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXNtdHBkIiwgIlB5dGhvbiBTaW1wbGUgTWFpbCBUcmFuc3BvcnQgRGFlbW9uIiwgIiR7UE59LWNvcmUgJHtQTn0tbmV0c2VydmVyICR7UE59LWVtYWlsICR7UE59LW1pbWUiLAorICAgICIke2JpbmRpcn0vc210cGQuKiBzbXRwZC4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1hdWRpbyIsICJQeXRob24gQXVkaW8gSGFuZGxpbmciLCAiJHtQTn0tY29yZSIsCisgICAgIndhdmUuKiBjaHVuay4qIHNuZGhkci4qIGxpYi1keW5sb2FkL29zc2F1ZGlvZGV2LnNvIGxpYi1keW5sb2FkL2F1ZGlvb3Auc28gYXVkaW9kZXYuKiBzdW5hdWRpby4qIHN1bmF1LiogdG9haWZmLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWJzZGRiIiwgIlB5dGhvbiBiaW5kaW5ncyBmb3IgdGhlIEJlcmtlbGV5IERhdGFiYXNlIiwgIiR7UE59LWNvcmUiLAorICAgICJic2RkYiBsaWItZHlubG9hZC9fYnNkZGIuc28iICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jb2RlY3MiLCAiUHl0aG9uIGNvZGVjcywgZW5jb2RpbmdzICYgaTE4biBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tbGFuZyIsCisgICAgImNvZGVjcy4qIGVuY29kaW5ncyBnZXR0ZXh0LiogbG9jYWxlLiogbGliLWR5bmxvYWQvX2xvY2FsZS5zbyBsaWItZHlubG9hZC9fY29kZWNzKiBsaWItZHlubG9hZC9fbXVsdGlieXRlY29kZWMuc28gbGliLWR5bmxvYWQvdW5pY29kZWRhdGEuc28gc3RyaW5ncHJlcC4qIHhkcmxpYi4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jb21waWxlIiwgIlB5dGhvbiBieXRlY29kZSBjb21waWxhdGlvbiBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJweV9jb21waWxlLiogY29tcGlsZWFsbC4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jb21waWxlciIsICJQeXRob24gY29tcGlsZXIgc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAiY29tcGlsZXIiICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jb21wcmVzc2lvbiIsICJQeXRob24gaGlnaC1sZXZlbCBjb21wcmVzc2lvbiBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0temxpYiIsCisgICAgImd6aXAuKiB6aXBmaWxlLiogdGFyZmlsZS4qIGxpYi1keW5sb2FkL2J6Mi5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tY3J5cHQiLCAiUHl0aG9uIGJhc2ljIGNyeXB0b2dyYXBoaWMgYW5kIGhhc2hpbmcgc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAiaGFzaGxpYi4qIG1kNS4qIHNoYS4qIGxpYi1keW5sb2FkL2NyeXB0LnNvIGxpYi1keW5sb2FkL19oYXNobGliLnNvIGxpYi1keW5sb2FkL19zaGEyNTYuc28gbGliLWR5bmxvYWQvX3NoYTUxMi5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tdGV4dHV0aWxzIiwgIlB5dGhvbiBvcHRpb24gcGFyc2luZywgdGV4dCB3cmFwcGluZyBhbmQgQ1NWIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1yZSAke1BOfS1zdHJpbmdvbGQiLAorICAgICJsaWItZHlubG9hZC9fY3N2LnNvIGNzdi4qIG9wdHBhcnNlLiogdGV4dHdyYXAuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tY3Vyc2VzIiwgIlB5dGhvbiBjdXJzZXMgc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAiY3Vyc2VzIGxpYi1keW5sb2FkL19jdXJzZXMuc28gbGliLWR5bmxvYWQvX2N1cnNlc19wYW5lbC5zbyIgKSAjIGRpcmVjdG9yeSArIGxvdyBsZXZlbCBtb2R1bGUKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWN0eXBlcyIsICJQeXRob24gQyB0eXBlcyBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJjdHlwZXMgbGliLWR5bmxvYWQvX2N0eXBlcy5zbyBsaWItZHlubG9hZC9fY3R5cGVzX3Rlc3Quc28iICkgIyBkaXJlY3RvcnkgKyBsb3cgbGV2ZWwgbW9kdWxlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1kYXRldGltZSIsICJQeXRob24gY2FsZW5kYXIgYW5kIHRpbWUgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWNvZGVjcyIsCisgICAgIl9zdHJwdGltZS4qIGNhbGVuZGFyLiogbGliLWR5bmxvYWQvZGF0ZXRpbWUuc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWRiIiwgIlB5dGhvbiBmaWxlLWJhc2VkIGRhdGFiYXNlIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImFueWRibS4qIGR1bWJkYm0uKiB3aGljaGRiLiogIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1kZWJ1Z2dlciIsICJQeXRob24gZGVidWdnZXIiLCAiJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LXJlICR7UE59LXN0cmluZ29sZCAke1BOfS1zaGVsbCAke1BOfS1wcHJpbnQiLAorICAgICJiZGIuKiBwZGIuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZGlmZmxpYiIsICJQeXRob24gaGVscGVycyBmb3IgY29tcHV0aW5nIGRlbHRhcyBiZXR3ZWVuIG9iamVjdHMiLCAiJHtQTn0tbGFuZyAke1BOfS1yZSIsCisgICAgImRpZmZsaWIuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2RldiIsICJQeXRob24gZGlzdHJpYnV0aW9uIHV0aWxpdGllcyAoc3RhdGljIGxpYnJhcmllcykiLCAiJHtQTn0tZGlzdHV0aWxzIiwKKyAgICAiY29uZmlnL2xpYiouYSIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWRpc3R1dGlscyIsICJQeXRob24gRGlzdHJpYnV0aW9uIFV0aWxpdGllcyIsICIke1BOfS1jb3JlIiwKKyAgICAiY29uZmlnIGRpc3R1dGlscyIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWRvY3Rlc3QiLCAiUHl0aG9uIGZyYW1ld29yayBmb3IgcnVubmluZyBleGFtcGxlcyBpbiBkb2NzdHJpbmdzIiwgIiR7UE59LWNvcmUgJHtQTn0tbGFuZyAke1BOfS1pbyAke1BOfS1yZSAke1BOfS11bml0dGVzdCAke1BOfS1kZWJ1Z2dlciAke1BOfS1kaWZmbGliIiwKKyAgICAiZG9jdGVzdC4qIiApCisKKyAgICAjIEZJWE1FIGNvbnNpZGVyIGFkZGluZyB0byBzb21lIGhpZ2hlciBsZXZlbCBwYWNrYWdlCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZWxlbWVudHRyZWUiLCAiUHl0aG9uIGVsZW1lbnRyZWUiLCAiJHtQTn0tY29yZSIsCisgICAgImxpYi1keW5sb2FkL19lbGVtZW50dHJlZS5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZW1haWwiLCAiUHl0aG9uIGVtYWlsIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1yZSAke1BOfS1taW1lICR7UE59LWF1ZGlvICR7UE59LWltYWdlICR7UE59LW5ldGNsaWVudCIsCisgICAgImltYXBsaWIuKiBlbWFpbCIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWZjbnRsIiwgIlB5dGhvbidzIGZjbnRsIGludGVyZmFjZSIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvZmNudGwuc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWhvdHNob3QiLCAiUHl0aG9uIGhvdHNob3QgcGVyZm9ybWFuY2UgcHJvZmlsZXIiLCAiJHtQTn0tY29yZSIsCisgICAgImhvdHNob3QgbGliLWR5bmxvYWQvX2hvdHNob3Quc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWh0bWwiLCAiUHl0aG9uIEhUTUwgcHJvY2Vzc2luZyBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJmb3JtYXR0ZXIuKiBodG1sZW50aXR5ZGVmcy4qIGh0bWxsaWIuKiBtYXJrdXBiYXNlLiogc2dtbGxpYi4qIEhUTUxQYXJzZXIuKiAiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWltcG9ydGxpYiIsICJQeXRob24gaW1wb3J0IGltcGxlbWVudGF0aW9uIGxpYnJhcnkiLCAiJHtQTn0tY29yZSIsCisgICAgImltcG9ydGxpYiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZ2RibSIsICJQeXRob24gR05VIGRhdGFiYXNlIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImxpYi1keW5sb2FkL2dkYm0uc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWltYWdlIiwgIlB5dGhvbiBncmFwaGljYWwgaW1hZ2UgaGFuZGxpbmciLCAiJHtQTn0tY29yZSIsCisgICAgImNvbG9yc3lzLiogaW1naGRyLiogbGliLWR5bmxvYWQvaW1hZ2VvcC5zbyBsaWItZHlubG9hZC9yZ2JpbWcuc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWlvIiwgIlB5dGhvbiBsb3ctbGV2ZWwgSS9PIiwgIiR7UE59LWNvcmUgJHtQTn0tbWF0aCAke1BOfS10ZXh0dXRpbHMgJHtQTn0tbmV0Y2xpZW50ICR7UE59LWNvbnRleHRsaWIiLAorICAgICJsaWItZHlubG9hZC9fc29ja2V0LnNvIGxpYi1keW5sb2FkL19pby5zbyBsaWItZHlubG9hZC9fc3NsLnNvIGxpYi1keW5sb2FkL3NlbGVjdC5zbyBsaWItZHlubG9hZC90ZXJtaW9zLnNvIGxpYi1keW5sb2FkL2NTdHJpbmdJTy5zbyAiICsKKyAgICAicGlwZXMuKiBzb2NrZXQuKiBzc2wuKiB0ZW1wZmlsZS4qIFN0cmluZ0lPLiogaW8uKiBfcHlpby4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1qc29uIiwgIlB5dGhvbiBKU09OIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1tYXRoICR7UE59LXJlICR7UE59LWNvZGVjcyIsCisgICAgImpzb24gbGliLWR5bmxvYWQvX2pzb24uc28iICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1sYW5nIiwgIlB5dGhvbiBsb3ctbGV2ZWwgbGFuZ3VhZ2Ugc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvX2Jpc2VjdC5zbyBsaWItZHlubG9hZC9fY29sbGVjdGlvbnMuc28gbGliLWR5bmxvYWQvX2hlYXBxLnNvIGxpYi1keW5sb2FkL193ZWFrcmVmLnNvIGxpYi1keW5sb2FkL19mdW5jdG9vbHMuc28gIiArCisgICAgImxpYi1keW5sb2FkL2FycmF5LnNvIGxpYi1keW5sb2FkL2l0ZXJ0b29scy5zbyBsaWItZHlubG9hZC9vcGVyYXRvci5zbyBsaWItZHlubG9hZC9wYXJzZXIuc28gIiArCisgICAgImF0ZXhpdC4qIGJpc2VjdC4qIGNvZGUuKiBjb2Rlb3AuKiBjb2xsZWN0aW9ucy4qIGRpcy4qIGZ1bmN0b29scy4qIGhlYXBxLiogaW5zcGVjdC4qIGtleXdvcmQuKiBvcGNvZGUuKiBzeW1ib2wuKiByZXByLiogdG9rZW4uKiAiICsKKyAgICAidG9rZW5pemUuKiB0cmFjZWJhY2suKiB3ZWFrcmVmLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWxvZ2dpbmciLCAiUHl0aG9uIGxvZ2dpbmcgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tcGlja2xlICR7UE59LXN0cmluZ29sZCIsCisgICAgImxvZ2dpbmciICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1tYWlsYm94IiwgIlB5dGhvbiBtYWlsYm94IGZvcm1hdCBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tbWltZSIsCisgICAgIm1haWxib3guKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbWF0aCIsICJQeXRob24gbWF0aCBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tY3J5cHQiLAorICAgICJsaWItZHlubG9hZC9jbWF0aC5zbyBsaWItZHlubG9hZC9tYXRoLnNvIGxpYi1keW5sb2FkL19yYW5kb20uc28gcmFuZG9tLiogc2V0cy4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1taW1lIiwgIlB5dGhvbiBNSU1FIGhhbmRsaW5nIEFQSXMiLCAiJHtQTn0tY29yZSAke1BOfS1pbyIsCisgICAgIm1pbWV0b29scy4qIHV1LiogcXVvcHJpLiogcmZjODIyLiogTWltZVdyaXRlci4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1tbWFwIiwgIlB5dGhvbiBtZW1vcnktbWFwcGVkIGZpbGUgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWlvIiwKKyAgICAibGliLWR5bmxvYWQvbW1hcC5zbyAiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW11bHRpcHJvY2Vzc2luZyIsICJQeXRob24gbXVsdGlwcm9jZXNzaW5nIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LXBpY2tsZSAke1BOfS10aHJlYWRpbmcgJHtQTn0tY3R5cGVzICR7UE59LW1tYXAiLAorICAgICJsaWItZHlubG9hZC9fbXVsdGlwcm9jZXNzaW5nLnNvIG11bHRpcHJvY2Vzc2luZyIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW5ldGNsaWVudCIsICJQeXRob24gSW50ZXJuZXQgUHJvdG9jb2wgY2xpZW50cyIsICIke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWRhdGV0aW1lICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tbG9nZ2luZyAke1BOfS1taW1lIiwKKyAgICAiKkNvb2tpZSouKiAiICsKKyAgICAiYmFzZTY0LiogY29va2llbGliLiogZnRwbGliLiogZ29waGVybGliLiogaG1hYy4qIGh0dHBsaWIuKiBtaW1ldHlwZXMuKiBubnRwbGliLiogcG9wbGliLiogc210cGxpYi4qIHRlbG5ldGxpYi4qIHVybGxpYi4qIHVybGxpYjIuKiB1cmxwYXJzZS4qIHV1aWQuKiByZmM4MjIuKiBtaW1ldG9vbHMuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbmV0c2VydmVyIiwgIlB5dGhvbiBJbnRlcm5ldCBQcm90b2NvbCBzZXJ2ZXJzIiwgIiR7UE59LWNvcmUgJHtQTn0tbmV0Y2xpZW50ICR7UE59LXNoZWxsICR7UE59LXRocmVhZGluZyIsCisgICAgImNnaS4qICpIVFRQU2VydmVyLiogU29ja2V0U2VydmVyLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW51bWJlcnMiLCAiUHl0aG9uIG51bWJlciBBUElzIiwgIiR7UE59LWNvcmUgJHtQTn0tbGFuZyAke1BOfS1yZSIsCisgICAgImRlY2ltYWwuKiBmcmFjdGlvbnMuKiBudW1iZXJzLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXBpY2tsZSIsICJQeXRob24gc2VyaWFsaXNhdGlvbi9wZXJzaXN0ZW5jZSBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tY29kZWNzICR7UE59LWlvICR7UE59LXJlIiwKKyAgICAicGlja2xlLiogc2hlbHZlLiogbGliLWR5bmxvYWQvY1BpY2tsZS5zbyBwaWNrbGV0b29scy4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1wa2d1dGlsIiwgIlB5dGhvbiBwYWNrYWdlIGV4dGVuc2lvbiB1dGlsaXR5IHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgInBrZ3V0aWwuKiIpCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1wcHJpbnQiLCAiUHl0aG9uIHByZXR0eS1wcmludCBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0taW8iLAorICAgICJwcHJpbnQuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tcHJvZmlsZSIsICJQeXRob24gYmFzaWMgcGVyZm9ybWFuY2UgcHJvZmlsaW5nIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS10ZXh0dXRpbHMiLAorICAgICJwcm9maWxlLiogcHN0YXRzLiogY1Byb2ZpbGUuKiBsaWItZHlubG9hZC9fbHNwcm9mLnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1yZSIsICJQeXRob24gUmVndWxhciBFeHByZXNzaW9uIEFQSXMiLCAiJHtQTn0tY29yZSIsCisgICAgInJlLiogc3JlLiogc3JlX2NvbXBpbGUuKiBzcmVfY29uc3RhbnRzKiBzcmVfcGFyc2UuKiIgKSAjIF9zcmUgaXMgYnVpbHRpbgorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tcmVhZGxpbmUiLCAiUHl0aG9uIHJlYWRsaW5lIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImxpYi1keW5sb2FkL3JlYWRsaW5lLnNvIHJsY29tcGxldGVyLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXJlc291cmNlIiwgIlB5dGhvbiByZXNvdXJjZSBjb250cm9sIGludGVyZmFjZSIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvcmVzb3VyY2Uuc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXNoZWxsIiwgIlB5dGhvbiBzaGVsbC1saWtlIGZ1bmN0aW9uYWxpdHkiLCAiJHtQTn0tY29yZSAke1BOfS1yZSIsCisgICAgImNtZC4qIGNvbW1hbmRzLiogZGlyY2FjaGUuKiBmbm1hdGNoLiogZ2xvYi4qIHBvcGVuMi4qIHNobGV4Liogc2h1dGlsLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXJvYm90cGFyc2VyIiwgIlB5dGhvbiByb2JvdHMudHh0IHBhcnNlciIsICIke1BOfS1jb3JlICR7UE59LW5ldGNsaWVudCIsCisgICAgInJvYm90cGFyc2VyLioiKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc3VicHJvY2VzcyIsICJQeXRob24gc3VicHJvY2VzcyBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tZmNudGwgJHtQTn0tcGlja2xlIiwKKyAgICAic3VicHJvY2Vzcy4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1zcWxpdGUzIiwgIlB5dGhvbiBTcWxpdGUzIGRhdGFiYXNlIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1kYXRldGltZSAke1BOfS1sYW5nICR7UE59LWNyeXB0ICR7UE59LWlvICR7UE59LXRocmVhZGluZyAke1BOfS16bGliIiwKKyAgICAibGliLWR5bmxvYWQvX3NxbGl0ZTMuc28gc3FsaXRlMy9kYmFwaTIuKiBzcWxpdGUzL19faW5pdF9fLiogc3FsaXRlMy9kdW1wLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXNxbGl0ZTMtdGVzdHMiLCAiUHl0aG9uIFNxbGl0ZTMgZGF0YWJhc2Ugc3VwcG9ydCB0ZXN0cyIsICIke1BOfS1jb3JlICR7UE59LXNxbGl0ZTMiLAorICAgICJzcWxpdGUzL3Rlc3QiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXN0cmluZ29sZCIsICJQeXRob24gc3RyaW5nIEFQSXMgW2RlcHJlY2F0ZWRdIiwgIiR7UE59LWNvcmUgJHtQTn0tcmUiLAorICAgICJsaWItZHlubG9hZC9zdHJvcC5zbyBzdHJpbmcuKiBzdHJpbmdvbGQuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc3lzbG9nIiwgIlB5dGhvbiBzeXNsb2cgaW50ZXJmYWNlIiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC9zeXNsb2cuc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXRlcm1pbmFsIiwgIlB5dGhvbiB0ZXJtaW5hbCBjb250cm9sbGluZyBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0taW8iLAorICAgICJwdHkuKiB0dHkuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tdGVzdHMiLCAiUHl0aG9uIHRlc3RzIiwgIiR7UE59LWNvcmUiLAorICAgICJ0ZXN0IiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tdGhyZWFkaW5nIiwgIlB5dGhvbiB0aHJlYWRpbmcgJiBzeW5jaHJvbml6YXRpb24gc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWxhbmciLAorICAgICJfdGhyZWFkaW5nX2xvY2FsLiogZHVtbXlfdGhyZWFkLiogZHVtbXlfdGhyZWFkaW5nLiogbXV0ZXguKiB0aHJlYWRpbmcuKiBRdWV1ZS4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS10a2ludGVyIiwgIlB5dGhvbiBUY2wvVGsgYmluZGluZ3MiLCAiJHtQTn0tY29yZSIsCisgICAgImxpYi1keW5sb2FkL190a2ludGVyLnNvIGxpYi10ayIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXVuaXR0ZXN0IiwgIlB5dGhvbiB1bml0IHRlc3RpbmcgZnJhbWV3b3JrIiwgIiR7UE59LWNvcmUgJHtQTn0tc3RyaW5nb2xkICR7UE59LWxhbmcgJHtQTn0taW8gJHtQTn0tZGlmZmxpYiAke1BOfS1wcHJpbnQgJHtQTn0tc2hlbGwiLAorICAgICJ1bml0dGVzdC8iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXVuaXhhZG1pbiIsICJQeXRob24gVW5peCBhZG1pbmlzdHJhdGlvbiBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC9uaXMuc28gbGliLWR5bmxvYWQvZ3JwLnNvIGxpYi1keW5sb2FkL3B3ZC5zbyBnZXRwYXNzLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXhtbCIsICJQeXRob24gYmFzaWMgWE1MIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1lbGVtZW50dHJlZSAke1BOfS1yZSIsCisgICAgImxpYi1keW5sb2FkL3B5ZXhwYXQuc28geG1sIHhtbGxpYi4qIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0teG1scnBjIiwgIlB5dGhvbiBYTUwtUlBDIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS14bWwgJHtQTn0tbmV0c2VydmVyICR7UE59LWxhbmciLAorICAgICJ4bWxycGNsaWIuKiBTaW1wbGVYTUxSUENTZXJ2ZXIuKiBEb2NYTUxSUENTZXJ2ZXIuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0temxpYiIsICJQeXRob24gemxpYiBjb21wcmVzc2lvbiBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC96bGliLnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1tYWlsYm94IiwgIlB5dGhvbiBtYWlsYm94IGZvcm1hdCBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tbWltZSIsCisgICAgIm1haWxib3guKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tYXJncGFyc2UiLCAiUHl0aG9uIGNvbW1hbmQgbGluZSBhcmd1bWVudCBwYXJzZXIiLCAiJHtQTn0tY29yZSAke1BOfS1jb2RlY3MgJHtQTn0tdGV4dHV0aWxzIiwKKyAgICAiYXJncGFyc2UuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tY29udGV4dGxpYiIsICJQeXRob24gdXRpbGl0aWVzIGZvciB3aXRoLXN0YXRlbWVudCIgKworICAgICJjb250ZXh0cy4iLCAiJHtQTn0tY29yZSIsCisgICAgIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbnRleHRsaWIuKiIgKQorCisgICAgbS5tYWtlKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3B5dGhvbi9nZW5lcmF0ZS1tYW5pZmVzdC0zLjQucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9weXRob24vZ2VuZXJhdGUtbWFuaWZlc3QtMy40LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA2ZWVjZGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9weXRob24vZ2VuZXJhdGUtbWFuaWZlc3QtMy40LnB5CkBAIC0wLDAgKzEsMzg4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBnZW5lcmF0ZSBQeXRob24gTWFuaWZlc3QgZm9yIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisjIChDKSAyMDAyLTIwMTAgTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWxhdWVyQHZhbmlsbGUtbWVkaWEuZGU+CisjIChDKSAyMDA3IEplcmVteSBMYWluZQorIyBsaWNlbnNlZCB1bmRlciBNSVQsIHNlZSBDT1BZSU5HLk1JVAorIworIyBKdW5lIDIyLCAyMDExIC0tIE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKyMgICogVXBkYXRlZCB0byBubyBsb25nZXIgZ2VuZXJhdGUgc3BlY2lhbCAtZGJnIHBhY2thZ2UsIGluc3RlYWQgdXNlIHRoZQorIyAgICBzaW5nbGUgc3lzdGVtIC1kYmcKKyMgICogVXBkYXRlIHZlcnNpb24gd2l0aCAiLjEiIHRvIGluZGljYXRlIHRoaXMgY2hhbmdlCisjCisjIDIwMTQgS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKyMgQWRkZWQgcHl0aG9uMyBzdXBwb3J0CisjCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCisKK1ZFUlNJT04gPSAiMy40LjIiCisKK19fYXV0aG9yX18gPSAiTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWxhdWVyQHZhbmlsbGUtbWVkaWEuZGU+IgorX192ZXJzaW9uX18gPSAiMjAxNDAxMzEiCisKK2NsYXNzIE1ha2VmaWxlTWFrZXI6CisKKyAgICBkZWYgX19pbml0X18oIHNlbGYsIG91dGZpbGUgKToKKyAgICAgICAgIiIiaW5pdGlhbGl6ZSIiIgorICAgICAgICBzZWxmLnBhY2thZ2VzID0ge30KKyAgICAgICAgc2VsZi50YXJnZXRQcmVmaXggPSAiJHtsaWJkaXJ9L3B5dGhvbiVzLyIgJSBWRVJTSU9OWzozXQorICAgICAgICBzZWxmLm91dHB1dCA9IG91dGZpbGUKKyAgICAgICAgc2VsZi5vdXQoICIiIgorIyBXQVJOSU5HOiBUaGlzIGZpbGUgaXMgQVVUTyBHRU5FUkFURUQ6IE1hbnVhbCBlZGl0cyB3aWxsIGJlIGxvc3QgbmV4dCB0aW1lIEkgcmVnZW5lcmF0ZSB0aGUgZmlsZS4KKyMgR2VuZXJhdG9yOiAnJXMnIFZlcnNpb24gJXMgKEMpIDIwMDItMjAxMCBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtbGF1ZXJAdmFuaWxsZS1tZWRpYS5kZT4KKyMgVmlzaXQgdGhlIFB5dGhvbiBmb3IgRW1iZWRkZWQgU3lzdGVtcyBTaXRlID0+IGh0dHA6Ly93d3cuVmFuaWxsZS5kZS9wcm9qZWN0cy9weXRob24uc3B5CisiIiIgJSAoIHN5cy5hcmd2WzBdLCBfX3ZlcnNpb25fXyApICkKKworICAgICMKKyAgICAjIGhlbHBlciBmdW5jdGlvbnMKKyAgICAjCisKKyAgICBkZWYgb3V0KCBzZWxmLCBkYXRhICk6CisgICAgICAgICIiInByaW50IGEgbGluZSB0byB0aGUgb3V0cHV0IGZpbGUiIiIKKyAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUoICIlc1xuIiAlIGRhdGEgKQorCisgICAgZGVmIHNldFByZWZpeCggc2VsZiwgdGFyZ2V0UHJlZml4ICk6CisgICAgICAgICIiInNldCBhIGZpbGUgcHJlZml4IGZvciBhZGRQYWNrYWdlIGZpbGVzIiIiCisgICAgICAgIHNlbGYudGFyZ2V0UHJlZml4ID0gdGFyZ2V0UHJlZml4CisKKyAgICBkZWYgZG9Qcm9sb2coIHNlbGYgKToKKyAgICAgICAgc2VsZi5vdXQoICIiIiAiIiIgKQorICAgICAgICBzZWxmLm91dCggIiIgKQorCisgICAgZGVmIGFkZFBhY2thZ2UoIHNlbGYsIG5hbWUsIGRlc2NyaXB0aW9uLCBkZXBlbmRlbmNpZXMsIGZpbGVuYW1lcyApOgorICAgICAgICAiIiJhZGQgYSBwYWNrYWdlIHRvIHRoZSBNYWtlZmlsZSIiIgorICAgICAgICBpZiB0eXBlKCBmaWxlbmFtZXMgKSA9PSB0eXBlKCAiIiApOgorICAgICAgICAgICAgZmlsZW5hbWVzID0gZmlsZW5hbWVzLnNwbGl0KCkKKyAgICAgICAgZnVsbEZpbGVuYW1lcyA9IFtdCisgICAgICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlbmFtZXM6CisgICAgICAgICAgICBpZiBmaWxlbmFtZVswXSAhPSAiJCI6CisgICAgICAgICAgICAgICAgZnVsbEZpbGVuYW1lcy5hcHBlbmQoICIlcyVzIiAlICggc2VsZi50YXJnZXRQcmVmaXgsIGZpbGVuYW1lICkgKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmdWxsRmlsZW5hbWVzLmFwcGVuZCggZmlsZW5hbWUgKQorICAgICAgICBzZWxmLnBhY2thZ2VzW25hbWVdID0gZGVzY3JpcHRpb24sIGRlcGVuZGVuY2llcywgZnVsbEZpbGVuYW1lcworCisgICAgZGVmIGRvQm9keSggc2VsZiApOgorICAgICAgICAiIiJnZW5lcmF0ZSBib2R5IG9mIE1ha2VmaWxlIiIiCisKKyAgICAgICAgZ2xvYmFsIFZFUlNJT04KKworICAgICAgICAjCisgICAgICAgICMgZ2VuZXJhdGUgcHJvdmlkZXMgbGluZQorICAgICAgICAjCisKKyAgICAgICAgcHJvdmlkZUxpbmUgPSAnUFJPVklERVMrPSInCisgICAgICAgIGZvciBuYW1lIGluIHNvcnRlZChzZWxmLnBhY2thZ2VzKToKKyAgICAgICAgICAgIHByb3ZpZGVMaW5lICs9ICIlcyAiICUgbmFtZQorICAgICAgICBwcm92aWRlTGluZSArPSAnIicKKworICAgICAgICBzZWxmLm91dCggcHJvdmlkZUxpbmUgKQorICAgICAgICBzZWxmLm91dCggIiIgKQorCisgICAgICAgICMKKyAgICAgICAgIyBnZW5lcmF0ZSBwYWNrYWdlIGxpbmUKKyAgICAgICAgIworCisgICAgICAgIHBhY2thZ2VMaW5lID0gJ1BBQ0tBR0VTPSIke1BOfS1kYmcgJworICAgICAgICBmb3IgbmFtZSBpbiBzb3J0ZWQoc2VsZi5wYWNrYWdlcyk6CisgICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoIiR7UE59LWRpc3R1dGlscyIpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gIiR7UE59LWRpc3R1dGlscyI6CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VMaW5lICs9ICIlcy1zdGF0aWNkZXYgJXMgIiAlIChuYW1lLCBuYW1lKQorICAgICAgICAgICAgZWxpZiBuYW1lICE9ICcke1BOfS1kYmcnOgorICAgICAgICAgICAgICAgIHBhY2thZ2VMaW5lICs9ICIlcyAiICUgbmFtZQorICAgICAgICBwYWNrYWdlTGluZSArPSAnJHtQTn0tbW9kdWxlcyInCisKKyAgICAgICAgc2VsZi5vdXQoIHBhY2thZ2VMaW5lICkKKyAgICAgICAgc2VsZi5vdXQoICIiICkKKworICAgICAgICAjCisgICAgICAgICMgZ2VuZXJhdGUgcGFja2FnZSB2YXJpYWJsZXMKKyAgICAgICAgIworCisgICAgICAgIGZvciBuYW1lLCBkYXRhIGluIHNvcnRlZChzZWxmLnBhY2thZ2VzLml0ZXJpdGVtcygpKToKKyAgICAgICAgICAgIGRlc2MsIGRlcHMsIGZpbGVzID0gZGF0YQorCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIHdyaXRlIG91dCB0aGUgZGVzY3JpcHRpb24sIHJldmlzaW9uIGFuZCBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgIHNlbGYub3V0KCAnU1VNTUFSWV8lcz0iJXMiJyAlICggbmFtZSwgZGVzYyApICkKKyAgICAgICAgICAgIHNlbGYub3V0KCAnUkRFUEVORFNfJXM9IiVzIicgJSAoIG5hbWUsIGRlcHMgKSApCisKKyAgICAgICAgICAgIGxpbmUgPSAnRklMRVNfJXM9IicgJSBuYW1lCisKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgY2hlY2sgd2hpY2ggZGlyZWN0b3JpZXMgdG8gbWFrZSBpbiB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeQorICAgICAgICAgICAgIworCisgICAgICAgICAgICBkaXJzZXQgPSB7fSAjIGlmIHB5dGhvbiBoYWQgYSBzZXQtZGF0YXR5cGUgdGhpcyB3b3VsZCBiZSBzdWZmaWNpZW50LiBmb3Igbm93LCB3ZSdyZSB1c2luZyBhIGRpY3QgaW5zdGVhZC4KKyAgICAgICAgICAgIGZvciB0YXJnZXQgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgZGlyc2V0W29zLnBhdGguZGlybmFtZSggdGFyZ2V0ICldID0gVHJ1ZQorCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIGdlbmVyYXRlIHdoaWNoIGZpbGVzIHRvIGNvcHkgZm9yIHRoZSB0YXJnZXQgKC1kZlIgYmVjYXVzZSB3aG9sZSBkaXJlY3RvcmllcyBhcmUgYWxzbyBhbGxvd2VkKQorICAgICAgICAgICAgIworCisgICAgICAgICAgICBmb3IgdGFyZ2V0IGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGxpbmUgKz0gIiVzICIgJSB0YXJnZXQKKworICAgICAgICAgICAgbGluZSArPSAnIicKKyAgICAgICAgICAgIHNlbGYub3V0KCBsaW5lICkKKyAgICAgICAgICAgIHNlbGYub3V0KCAiIiApCisKKyAgICAgICAgc2VsZi5vdXQoICdTVU1NQVJZXyR7UE59LW1vZHVsZXM9IkFsbCBQeXRob24gbW9kdWxlcyInICkKKyAgICAgICAgbGluZSA9ICdSREVQRU5EU18ke1BOfS1tb2R1bGVzPSInCisKKyAgICAgICAgZm9yIG5hbWUsIGRhdGEgaW4gc29ydGVkKHNlbGYucGFja2FnZXMuaXRlcml0ZW1zKCkpOgorICAgICAgICAgICAgaWYgbmFtZSBub3QgaW4gWycke1BOfS1kZXYnLCAnJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2RldiddOgorICAgICAgICAgICAgICAgIGxpbmUgKz0gIiVzICIgJSBuYW1lCisKKyAgICAgICAgc2VsZi5vdXQoICIlcyBcIiIgJSBsaW5lICkKKyAgICAgICAgc2VsZi5vdXQoICdBTExPV19FTVBUWV8ke1BOfS1tb2R1bGVzID0gIjEiJyApCisKKyAgICBkZWYgZG9FcGlsb2coIHNlbGYgKToKKyAgICAgICAgc2VsZi5vdXQoICIiIiIiIiApCisgICAgICAgIHNlbGYub3V0KCAiIiApCisKKyAgICBkZWYgbWFrZSggc2VsZiApOgorICAgICAgICBzZWxmLmRvUHJvbG9nKCkKKyAgICAgICAgc2VsZi5kb0JvZHkoKQorICAgICAgICBzZWxmLmRvRXBpbG9nKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKworICAgIGlmIGxlbiggc3lzLmFyZ3YgKSA+IDE6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayhzeXMuYXJndlsxXSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHN5cy5leGNfY2xlYXIoKQorICAgICAgICBvdXRmaWxlID0gZmlsZSggc3lzLmFyZ3ZbMV0sICJ3IiApCisgICAgZWxzZToKKyAgICAgICAgb3V0ZmlsZSA9IHN5cy5zdGRvdXQKKworICAgIG0gPSBNYWtlZmlsZU1ha2VyKCBvdXRmaWxlICkKKworICAgICMgQWRkIHBhY2thZ2VzIGhlcmUuIE9ubHkgc3BlY2lmeSBkbG9wZW4tc3R5bGUgbGlicmFyeSBkZXBlbmRlbmNpZXMgaGVyZSwgbm8gbGRkLXN0eWxlIGRlcGVuZGVuY2llcyEKKyAgICAjIFBhcmFtZXRlcnM6IHJldmlzaW9uLCBuYW1lLCBkZXNjcmlwdGlvbiwgZGVwZW5kZW5jaWVzLCBmaWxlbmFtZXMKKyAgICAjCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jb3JlIiwgIlB5dGhvbiBpbnRlcnByZXRlciBhbmQgY29yZSBtb2R1bGVzIiwgIiR7UE59LWxhbmcgJHtQTn0tcmUgJHtQTn0tcmVwcmxpYiAke1BOfS1jb2RlY3MgJHtQTn0taW8gJHtQTn0tbWF0aCIsCisgICAgIl9fZnV0dXJlX18uKiBfYWJjb2xsLiogYWJjLiogY29weS4qIGNvcHlyZWcuKiBDb25maWdQYXJzZXIuKiAiICsKKyAgICAiZ2VuZXJpY3BhdGguKiBnZXRvcHQuKiBsaW5lY2FjaGUuKiBuZXcuKiAiICsKKyAgICAib3MuKiBwb3NpeHBhdGguKiBzdHJ1Y3QuKiAiICsKKyAgICAid2FybmluZ3MuKiBzaXRlLiogc3RhdC4qICIgKworICAgICJVc2VyRGljdC4qIFVzZXJMaXN0LiogVXNlclN0cmluZy4qICIgKworICAgICJsaWItZHlubG9hZC9iaW5hc2NpaS4qLnNvIGxpYi1keW5sb2FkL19zdHJ1Y3QuKi5zbyBsaWItZHlubG9hZC90aW1lLiouc28gIiArCisgICAgImxpYi1keW5sb2FkL3hyZWFkbGluZXMuKi5zbyB0eXBlcy4qIHBsYXRmb3JtLiogJHtiaW5kaXJ9L3B5dGhvbiogIiAgKyAKKyAgICAiX3dlYWtyZWZzZXQuKiBzeXNjb25maWcuKiBfc3lzY29uZmlnZGF0YS4qIGNvbmZpZy9NYWtlZmlsZSAiICsKKyAgICAiJHtpbmNsdWRlZGlyfS9weXRob24ke1BZVEhPTl9CSU5BQkl9L3B5Y29uZmlnKi5oICIgKworICAgICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb2xsZWN0aW9ucyAiICsKKyAgICAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vX2NvbGxlY3Rpb25zX2FiYy4qICIgKworICAgICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9fc2l0ZWJ1aWx0aW5zLiogIiArCisgICAgIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L3NpdGVjdXN0b21pemUucHkgIikKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWRldiIsICJQeXRob24gZGV2ZWxvcG1lbnQgcGFja2FnZSIsICIke1BOfS1jb3JlIiwKKyAgICAiJHtpbmNsdWRlZGlyfSAiICsKKyAgICAiJHtsaWJkaXJ9L2xpYioke1NPTElCU0RFVn0gIiArCisgICAgIiR7bGliZGlyfS8qLmxhICIgKworICAgICIke2xpYmRpcn0vKi5hICIgKworICAgICIke2xpYmRpcn0vKi5vICIgKworICAgICIke2xpYmRpcn0vcGtnY29uZmlnICIgKworICAgICIke2Jhc2VfbGliZGlyfS8qLmEgIiArCisgICAgIiR7YmFzZV9saWJkaXJ9LyoubyAiICsKKyAgICAiJHtkYXRhZGlyfS9hY2xvY2FsICIgKworICAgICIke2RhdGFkaXJ9L3BrZ2NvbmZpZyAiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LTJ0bzMiLCAiUHl0aG9uIGF1dG9tYXRlZCBQeXRob24gMiB0byAzIGNvZGUgdHJhbnNsYXRvciIsICIke1BOfS1jb3JlIiwKKyAgICAibGliMnRvMyIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWlkbGUiLCAiUHl0aG9uIEludGVncmF0ZWQgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQiLCAiJHtQTn0tY29yZSAke1BOfS10a2ludGVyIiwKKyAgICAiJHtiaW5kaXJ9L2lkbGUgaWRsZWxpYiIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXB5ZG9jIiwgIlB5dGhvbiBpbnRlcmFjdGl2ZSBoZWxwIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1sYW5nICR7UE59LXN0cmluZ29sZCAke1BOfS1yZSIsCisgICAgIiR7YmluZGlyfS9weWRvYyBweWRvYy4qIHB5ZG9jX2RhdGEiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXNtdHBkIiwgIlB5dGhvbiBTaW1wbGUgTWFpbCBUcmFuc3BvcnQgRGFlbW9uIiwgIiR7UE59LWNvcmUgJHtQTn0tbmV0c2VydmVyICR7UE59LWVtYWlsICR7UE59LW1pbWUiLAorICAgICIke2JpbmRpcn0vc210cGQuKiBzbXRwZC4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1hdWRpbyIsICJQeXRob24gQXVkaW8gSGFuZGxpbmciLCAiJHtQTn0tY29yZSIsCisgICAgIndhdmUuKiBjaHVuay4qIHNuZGhkci4qIGxpYi1keW5sb2FkL29zc2F1ZGlvZGV2Liouc28gbGliLWR5bmxvYWQvYXVkaW9vcC4qLnNvIGF1ZGlvZGV2Liogc3VuYXVkaW8uKiBzdW5hdS4qIHRvYWlmZi4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1hc3luY2lvIiwgIlB5dGhvbiBBc3luY2hyb25vdXMgSS9PLCBldmVudCBsb29wLCBjb3JvdXRpbmVzIGFuZCB0YXNrcyIsICIke1BOfS1jb3JlIiwKKyAgICAiYXN5bmNpbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tY29kZWNzIiwgIlB5dGhvbiBjb2RlY3MsIGVuY29kaW5ncyAmIGkxOG4gc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWxhbmciLAorICAgICJjb2RlY3MuKiBlbmNvZGluZ3MgZ2V0dGV4dC4qIGxvY2FsZS4qIGxpYi1keW5sb2FkL19sb2NhbGUuKi5zbyBsaWItZHlubG9hZC9fY29kZWNzKiBsaWItZHlubG9hZC9fbXVsdGlieXRlY29kZWMuKi5zbyBsaWItZHlubG9hZC91bmljb2RlZGF0YS4qLnNvIHN0cmluZ3ByZXAuKiB4ZHJsaWIuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tY29tcGlsZSIsICJQeXRob24gYnl0ZWNvZGUgY29tcGlsYXRpb24gc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAicHlfY29tcGlsZS4qIGNvbXBpbGVhbGwuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tY29tcHJlc3Npb24iLCAiUHl0aG9uIGhpZ2gtbGV2ZWwgY29tcHJlc3Npb24gc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWNvZGVjcyIsCisgICAgImd6aXAuKiB6aXBmaWxlLiogdGFyZmlsZS4qIGxpYi1keW5sb2FkL2J6Mi4qLnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jcnlwdCIsICJQeXRob24gYmFzaWMgY3J5cHRvZ3JhcGhpYyBhbmQgaGFzaGluZyBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJoYXNobGliLiogbWQ1Liogc2hhLiogbGliLWR5bmxvYWQvY3J5cHQuKi5zbyBsaWItZHlubG9hZC9faGFzaGxpYi4qLnNvIGxpYi1keW5sb2FkL19zaGEyNTYuKi5zbyBsaWItZHlubG9hZC9fc2hhNTEyLiouc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXRleHR1dGlscyIsICJQeXRob24gb3B0aW9uIHBhcnNpbmcsIHRleHQgd3JhcHBpbmcgYW5kIENTViBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tc3RyaW5nb2xkIiwKKyAgICAibGliLWR5bmxvYWQvX2Nzdi4qLnNvIGNzdi4qIG9wdHBhcnNlLiogdGV4dHdyYXAuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tY3Vyc2VzIiwgIlB5dGhvbiBjdXJzZXMgc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAiY3Vyc2VzIGxpYi1keW5sb2FkL19jdXJzZXMuKi5zbyBsaWItZHlubG9hZC9fY3Vyc2VzX3BhbmVsLiouc28iICkgIyBkaXJlY3RvcnkgKyBsb3cgbGV2ZWwgbW9kdWxlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jdHlwZXMiLCAiUHl0aG9uIEMgdHlwZXMgc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAiY3R5cGVzIGxpYi1keW5sb2FkL19jdHlwZXMuKi5zbyBsaWItZHlubG9hZC9fY3R5cGVzX3Rlc3QuKi5zbyIgKSAjIGRpcmVjdG9yeSArIGxvdyBsZXZlbCBtb2R1bGUKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWRhdGV0aW1lIiwgIlB5dGhvbiBjYWxlbmRhciBhbmQgdGltZSBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tY29kZWNzIiwKKyAgICAiX3N0cnB0aW1lLiogY2FsZW5kYXIuKiBsaWItZHlubG9hZC9kYXRldGltZS4qLnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1kYiIsICJQeXRob24gZmlsZS1iYXNlZCBkYXRhYmFzZSBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJhbnlkYm0uKiBkdW1iZGJtLiogd2hpY2hkYi4qIGRibSBsaWItZHlubG9hZC9fZGJtLiouc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWRlYnVnZ2VyIiwgIlB5dGhvbiBkZWJ1Z2dlciIsICIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tcmUgJHtQTn0tc3RyaW5nb2xkICR7UE59LXNoZWxsICR7UE59LXBwcmludCIsCisgICAgImJkYi4qIHBkYi4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1kaWZmbGliIiwgIlB5dGhvbiBoZWxwZXJzIGZvciBjb21wdXRpbmcgZGVsdGFzIGJldHdlZW4gb2JqZWN0cyIsICIke1BOfS1sYW5nICR7UE59LXJlIiwKKyAgICAiZGlmZmxpYi4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2IiwgIlB5dGhvbiBkaXN0cmlidXRpb24gdXRpbGl0aWVzIChzdGF0aWMgbGlicmFyaWVzKSIsICIke1BOfS1kaXN0dXRpbHMiLAorICAgICJjb25maWcvbGliKi5hIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZGlzdHV0aWxzIiwgIlB5dGhvbiBEaXN0cmlidXRpb24gVXRpbGl0aWVzIiwgIiR7UE59LWNvcmUiLAorICAgICJjb25maWcgZGlzdHV0aWxzIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZG9jdGVzdCIsICJQeXRob24gZnJhbWV3b3JrIGZvciBydW5uaW5nIGV4YW1wbGVzIGluIGRvY3N0cmluZ3MiLCAiJHtQTn0tY29yZSAke1BOfS1sYW5nICR7UE59LWlvICR7UE59LXJlICR7UE59LXVuaXR0ZXN0ICR7UE59LWRlYnVnZ2VyICR7UE59LWRpZmZsaWIiLAorICAgICJkb2N0ZXN0LioiICkKKworICAgICMgRklYTUUgY29uc2lkZXIgYWRkaW5nIHRvIHNvbWUgaGlnaGVyIGxldmVsIHBhY2thZ2UKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1lbGVtZW50dHJlZSIsICJQeXRob24gZWxlbWVudHJlZSIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvX2VsZW1lbnR0cmVlLiouc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWVtYWlsIiwgIlB5dGhvbiBlbWFpbCBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tbWltZSAke1BOfS1hdWRpbyAke1BOfS1pbWFnZSAke1BOfS1uZXRjbGllbnQiLAorICAgICJpbWFwbGliLiogZW1haWwiICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1mY250bCIsICJQeXRob24ncyBmY250bCBpbnRlcmZhY2UiLCAiJHtQTn0tY29yZSIsCisgICAgImxpYi1keW5sb2FkL2ZjbnRsLiouc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWh0bWwiLCAiUHl0aG9uIEhUTUwgcHJvY2Vzc2luZyBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJmb3JtYXR0ZXIuKiBodG1sZW50aXR5ZGVmcy4qIGh0bWxsaWIuKiBtYXJrdXBiYXNlLiogc2dtbGxpYi4qIEhUTUxQYXJzZXIuKiAiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWltcG9ydGxpYiIsICJQeXRob24gaW1wb3J0IGltcGxlbWVudGF0aW9uIGxpYnJhcnkiLCAiJHtQTn0tY29yZSIsCisgICAgImltcG9ydGxpYiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZ2RibSIsICJQeXRob24gR05VIGRhdGFiYXNlIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImxpYi1keW5sb2FkL19nZGJtLiouc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWltYWdlIiwgIlB5dGhvbiBncmFwaGljYWwgaW1hZ2UgaGFuZGxpbmciLCAiJHtQTn0tY29yZSIsCisgICAgImNvbG9yc3lzLiogaW1naGRyLiogbGliLWR5bmxvYWQvaW1hZ2VvcC4qLnNvIGxpYi1keW5sb2FkL3JnYmltZy4qLnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1pbyIsICJQeXRob24gbG93LWxldmVsIEkvTyIsICIke1BOfS1jb3JlICR7UE59LW1hdGgiLAorICAgICJsaWItZHlubG9hZC9fc29ja2V0Liouc28gbGliLWR5bmxvYWQvX2lvLiouc28gbGliLWR5bmxvYWQvX3NzbC4qLnNvIGxpYi1keW5sb2FkL3NlbGVjdC4qLnNvIGxpYi1keW5sb2FkL3Rlcm1pb3MuKi5zbyBsaWItZHlubG9hZC9jU3RyaW5nSU8uKi5zbyAiICsKKyAgICAicGlwZXMuKiBzb2NrZXQuKiBzc2wuKiB0ZW1wZmlsZS4qIFN0cmluZ0lPLiogaW8uKiBfcHlpby4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1qc29uIiwgIlB5dGhvbiBKU09OIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1tYXRoICR7UE59LXJlIiwKKyAgICAianNvbiBsaWItZHlubG9hZC9fanNvbi4qLnNvIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbGFuZyIsICJQeXRob24gbG93LWxldmVsIGxhbmd1YWdlIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImxpYi1keW5sb2FkL19iaXNlY3QuKi5zbyBsaWItZHlubG9hZC9fY29sbGVjdGlvbnMuKi5zbyBsaWItZHlubG9hZC9faGVhcHEuKi5zbyBsaWItZHlubG9hZC9fd2Vha3JlZi4qLnNvIGxpYi1keW5sb2FkL19mdW5jdG9vbHMuKi5zbyAiICsKKyAgICAibGliLWR5bmxvYWQvYXJyYXkuKi5zbyBsaWItZHlubG9hZC9pdGVydG9vbHMuKi5zbyBsaWItZHlubG9hZC9vcGVyYXRvci4qLnNvIGxpYi1keW5sb2FkL3BhcnNlci4qLnNvICIgKworICAgICJhdGV4aXQuKiBiaXNlY3QuKiBjb2RlLiogY29kZW9wLiogY29sbGVjdGlvbnMuKiBfY29sbGVjdGlvbnNfYWJjLiogZGlzLiogZnVuY3Rvb2xzLiogaGVhcHEuKiBpbnNwZWN0Lioga2V5d29yZC4qIG9wY29kZS4qIHN5bWJvbC4qIHJlcHIuKiB0b2tlbi4qICIgKworICAgICJ0b2tlbml6ZS4qIHRyYWNlYmFjay4qIHdlYWtyZWYuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbG9nZ2luZyIsICJQeXRob24gbG9nZ2luZyBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tbGFuZyAke1BOfS1waWNrbGUgJHtQTn0tc3RyaW5nb2xkIiwKKyAgICAibG9nZ2luZyIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW1haWxib3giLCAiUHl0aG9uIG1haWxib3ggZm9ybWF0IHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1taW1lIiwKKyAgICAibWFpbGJveC4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1tYXRoIiwgIlB5dGhvbiBtYXRoIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImxpYi1keW5sb2FkL2NtYXRoLiouc28gbGliLWR5bmxvYWQvbWF0aC4qLnNvIGxpYi1keW5sb2FkL19yYW5kb20uKi5zbyByYW5kb20uKiBzZXRzLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW1pbWUiLCAiUHl0aG9uIE1JTUUgaGFuZGxpbmcgQVBJcyIsICIke1BOfS1jb3JlICR7UE59LWlvIiwKKyAgICAibWltZXRvb2xzLiogdXUuKiBxdW9wcmkuKiByZmM4MjIuKiBNaW1lV3JpdGVyLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW1tYXAiLCAiUHl0aG9uIG1lbW9yeS1tYXBwZWQgZmlsZSBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0taW8iLAorICAgICJsaWItZHlubG9hZC9tbWFwLiouc28gIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1tdWx0aXByb2Nlc3NpbmciLCAiUHl0aG9uIG11bHRpcHJvY2Vzc2luZyBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tbGFuZyAke1BOfS1waWNrbGUgJHtQTn0tdGhyZWFkaW5nICR7UE59LWN0eXBlcyAke1BOfS1tbWFwIiwKKyAgICAibGliLWR5bmxvYWQvX211bHRpcHJvY2Vzc2luZy4qLnNvIG11bHRpcHJvY2Vzc2luZyIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW5ldGNsaWVudCIsICJQeXRob24gSW50ZXJuZXQgUHJvdG9jb2wgY2xpZW50cyIsICIke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWRhdGV0aW1lICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tbG9nZ2luZyAke1BOfS1taW1lIiwKKyAgICAiKkNvb2tpZSouKiAiICsKKyAgICAiYmFzZTY0LiogY29va2llbGliLiogZnRwbGliLiogZ29waGVybGliLiogaG1hYy4qIGh0dHBsaWIuKiBtaW1ldHlwZXMuKiBubnRwbGliLiogcG9wbGliLiogc210cGxpYi4qIHRlbG5ldGxpYi4qIHVybGxpYiAgdXVpZC4qIHJmYzgyMi4qIG1pbWV0b29scy4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1uZXRzZXJ2ZXIiLCAiUHl0aG9uIEludGVybmV0IFByb3RvY29sIHNlcnZlcnMiLCAiJHtQTn0tY29yZSAke1BOfS1uZXRjbGllbnQgJHtQTn0tc2hlbGwgJHtQTn0tdGhyZWFkaW5nIiwKKyAgICAiY2dpLiogKkhUVFBTZXJ2ZXIuKiBTb2NrZXRTZXJ2ZXIuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbnVtYmVycyIsICJQeXRob24gbnVtYmVyIEFQSXMiLCAiJHtQTn0tY29yZSAke1BOfS1sYW5nICR7UE59LXJlIiwKKyAgICAiZGVjaW1hbC4qIGZyYWN0aW9ucy4qIG51bWJlcnMuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tcGlja2xlIiwgIlB5dGhvbiBzZXJpYWxpc2F0aW9uL3BlcnNpc3RlbmNlIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1jb2RlY3MgJHtQTn0taW8gJHtQTn0tcmUiLAorICAgICJwaWNrbGUuKiBzaGVsdmUuKiBsaWItZHlubG9hZC9jUGlja2xlLiouc28gcGlja2xldG9vbHMuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tcGtndXRpbCIsICJQeXRob24gcGFja2FnZSBleHRlbnNpb24gdXRpbGl0eSBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJwa2d1dGlsLioiKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tcHByaW50IiwgIlB5dGhvbiBwcmV0dHktcHJpbnQgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWlvIiwKKyAgICAicHByaW50LioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXByb2ZpbGUiLCAiUHl0aG9uIGJhc2ljIHBlcmZvcm1hbmNlIHByb2ZpbGluZyBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tdGV4dHV0aWxzIiwKKyAgICAicHJvZmlsZS4qIHBzdGF0cy4qIGNQcm9maWxlLiogbGliLWR5bmxvYWQvX2xzcHJvZi4qLnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1yZSIsICJQeXRob24gUmVndWxhciBFeHByZXNzaW9uIEFQSXMiLCAiJHtQTn0tY29yZSIsCisgICAgInJlLiogc3JlLiogc3JlX2NvbXBpbGUuKiBzcmVfY29uc3RhbnRzKiBzcmVfcGFyc2UuKiIgKSAjIF9zcmUgaXMgYnVpbHRpbgorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tcmVhZGxpbmUiLCAiUHl0aG9uIHJlYWRsaW5lIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImxpYi1keW5sb2FkL3JlYWRsaW5lLiouc28gcmxjb21wbGV0ZXIuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tcmVwcmxpYiIsICJQeXRob24gYWx0ZXJuYXRlIHJlcHIoKSBpbXBsZW1lbnRhdGlvbiIsICIke1BOfS1jb3JlIiwKKyAgICAicmVwcmxpYi5weSIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tcmVzb3VyY2UiLCAiUHl0aG9uIHJlc291cmNlIGNvbnRyb2wgaW50ZXJmYWNlIiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC9yZXNvdXJjZS4qLnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1zaGVsbCIsICJQeXRob24gc2hlbGwtbGlrZSBmdW5jdGlvbmFsaXR5IiwgIiR7UE59LWNvcmUgJHtQTn0tcmUiLAorICAgICJjbWQuKiBjb21tYW5kcy4qIGRpcmNhY2hlLiogZm5tYXRjaC4qIGdsb2IuKiBwb3BlbjIuKiBzaGxleC4qIHNodXRpbC4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1zdWJwcm9jZXNzIiwgIlB5dGhvbiBzdWJwcm9jZXNzIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1yZSAke1BOfS1mY250bCAke1BOfS1waWNrbGUiLAorICAgICJzdWJwcm9jZXNzLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXNxbGl0ZTMiLCAiUHl0aG9uIFNxbGl0ZTMgZGF0YWJhc2Ugc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWRhdGV0aW1lICR7UE59LWxhbmcgJHtQTn0tY3J5cHQgJHtQTn0taW8gJHtQTn0tdGhyZWFkaW5nIiwKKyAgICAibGliLWR5bmxvYWQvX3NxbGl0ZTMuKi5zbyBzcWxpdGUzL2RiYXBpMi4qIHNxbGl0ZTMvX19pbml0X18uKiBzcWxpdGUzL2R1bXAuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc3FsaXRlMy10ZXN0cyIsICJQeXRob24gU3FsaXRlMyBkYXRhYmFzZSBzdXBwb3J0IHRlc3RzIiwgIiR7UE59LWNvcmUgJHtQTn0tc3FsaXRlMyIsCisgICAgInNxbGl0ZTMvdGVzdCIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc3RyaW5nb2xkIiwgIlB5dGhvbiBzdHJpbmcgQVBJcyBbZGVwcmVjYXRlZF0iLCAiJHtQTn0tY29yZSAke1BOfS1yZSIsCisgICAgImxpYi1keW5sb2FkL3N0cm9wLiouc28gc3RyaW5nLiogc3RyaW5nb2xkLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXN5c2xvZyIsICJQeXRob24gc3lzbG9nIGludGVyZmFjZSIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvc3lzbG9nLiouc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXRlcm1pbmFsIiwgIlB5dGhvbiB0ZXJtaW5hbCBjb250cm9sbGluZyBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0taW8iLAorICAgICJwdHkuKiB0dHkuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tdGVzdHMiLCAiUHl0aG9uIHRlc3RzIiwgIiR7UE59LWNvcmUiLAorICAgICJ0ZXN0IiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tdGhyZWFkaW5nIiwgIlB5dGhvbiB0aHJlYWRpbmcgJiBzeW5jaHJvbml6YXRpb24gc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWxhbmciLAorICAgICJfdGhyZWFkaW5nX2xvY2FsLiogZHVtbXlfdGhyZWFkLiogZHVtbXlfdGhyZWFkaW5nLiogbXV0ZXguKiB0aHJlYWRpbmcuKiBRdWV1ZS4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS10a2ludGVyIiwgIlB5dGhvbiBUY2wvVGsgYmluZGluZ3MiLCAiJHtQTn0tY29yZSIsCisgICAgImxpYi1keW5sb2FkL190a2ludGVyLiouc28gbGliLXRrIHRraW50ZXIiICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS11bml0dGVzdCIsICJQeXRob24gdW5pdCB0ZXN0aW5nIGZyYW1ld29yayIsICIke1BOfS1jb3JlICR7UE59LXN0cmluZ29sZCAke1BOfS1sYW5nICR7UE59LWlvICR7UE59LWRpZmZsaWIgJHtQTn0tcHByaW50ICR7UE59LXNoZWxsIiwKKyAgICAidW5pdHRlc3QvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS11bml4YWRtaW4iLCAiUHl0aG9uIFVuaXggYWRtaW5pc3RyYXRpb24gc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvbmlzLiouc28gbGliLWR5bmxvYWQvZ3JwLiouc28gbGliLWR5bmxvYWQvcHdkLiouc28gZ2V0cGFzcy4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS14bWwiLCAiUHl0aG9uIGJhc2ljIFhNTCBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tZWxlbWVudHRyZWUgJHtQTn0tcmUiLAorICAgICJsaWItZHlubG9hZC9weWV4cGF0Liouc28geG1sIHhtbGxpYi4qIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0teG1scnBjIiwgIlB5dGhvbiBYTUwtUlBDIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS14bWwgJHtQTn0tbmV0c2VydmVyICR7UE59LWxhbmciLAorICAgICJ4bWxycGNsaWIuKiBTaW1wbGVYTUxSUENTZXJ2ZXIuKiBEb2NYTUxSUENTZXJ2ZXIuKiB4bWxycGMiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW1haWxib3giLCAiUHl0aG9uIG1haWxib3ggZm9ybWF0IHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1taW1lIiwKKyAgICAibWFpbGJveC4qIiApCisKKyAgICBtLm1ha2UoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvc2VyZGV2dHJ5IGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvc2VyZGV2dHJ5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc0YmQ3YjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9zZXJkZXZ0cnkKQEAgLTAsMCArMSw2MCBAQAorIyEvYmluL3NoCisKKyMgQ29weXJpZ2h0IChDKSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCitpZiBbICIkMSIgPSAiIiAtbyAiJDEiID0gIi0taGVscCIgXSA7IHRoZW4KKyAgICBlY2hvICJVc2FnZTogJDAgPHNlcmlhbCB0ZXJtaW5hbCBjb21tYW5kPiIKKyAgICBlY2hvCisgICAgZWNobyAiU2ltcGxlIHNjcmlwdCB0byBoYW5kbGUgbWFpbnRhaW5pbmcgYSB0ZXJtaW5hbCBmb3Igc2VyaWFsIGRldmljZXMgdGhhdCIKKyAgICBlY2hvICJkaXNhcHBlYXIgd2hlbiBhIGRldmljZSBpcyBwb3dlcmVkIGRvd24gb3IgcmVzZXQsIHN1Y2ggYXMgdGhlIFVTQiIKKyAgICBlY2hvICJzZXJpYWwgY29uc29sZSBvbiB0aGUgb3JpZ2luYWwgQmVhZ2xlQm9uZSAod2hpdGUgdmVyc2lvbikuIgorICAgIGVjaG8KKyAgICBlY2hvICJlLmcuICQwIHBpY29jb20gLWIgMTE1MjAwIC9kZXYvdHR5VVNCMCIKKyAgICBlY2hvCisgICAgZXhpdAorZmkKKworYXJncz0iJEAiCitERVZJQ0U9IiIKK3doaWxlIFsgIiQxIiAhPSAiIiBdOyBkbworICAgIGNhc2UgIiQxIiBpbgorICAgICAgICAvZGV2LyopCisgICAgICAgICAgICBERVZJQ0U9JDEKKyAgICAgICAgICAgIGJyZWFrOzsKKyAgICBlc2FjCisgICAgc2hpZnQKK2RvbmUKKworaWYgWyAiJERFVklDRSIgIT0gIiIgXSA7IHRoZW4KKyAgICB3aGlsZSB0cnVlOyBkbworICAgICAgICBpZiBbICEgLWUgJERFVklDRSBdIDsgdGhlbgorICAgICAgICAgICAgZWNobyAic2VyZGV2dHJ5OiB3YWl0aW5nIGZvciAkREVWSUNFIHRvIGV4aXN0Li4uIgorICAgICAgICAgICAgd2hpbGUgWyAhIC1lICRERVZJQ0UgXTsgZG8KKyAgICAgICAgICAgICAgICBzbGVlcCAwLjEKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAhIC13ICRERVZJQ0UgXSA7IHRoZW4KKyAgICAgICAgICAgICMgU29tZXRpbWVzIChwcmVzdW1hYmx5IGJlY2F1c2Ugb2YgYSByYWNlIHdpdGggdWRldikgd2UgZ2V0IHRvCisgICAgICAgICAgICAjIHRoZSBkZXZpY2UgYmVmb3JlIGl0cyBwZXJtaXNzaW9ucyBoYXZlIGJlZW4gc2V0IHVwCisgICAgICAgICAgICBSRVRSWU5VTT0wCisgICAgICAgICAgICB3aGlsZSBbICEgLXcgJERFVklDRSBdOyBkbworICAgICAgICAgICAgICAgIGlmIFsgIiRSRVRSWU5VTSIgPSAiMiIgXSA7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZWNobyAiRGV2aWNlICRERVZJQ0UgZXhpc3RzIGJ1dCBpcyBub3Qgd3JpdGFibGUhIgorICAgICAgICAgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIFJFVFJZTlVNPSQoKFJFVFJZTlVNKzEpKQorICAgICAgICAgICAgICAgIHNsZWVwIDAuMQorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorICAgICAgICAkYXJncworICAgICAgICBpZiBbIC1lICRERVZJQ0UgXSA7IHRoZW4KKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgZG9uZQorZWxzZQorICAgIGVjaG8gIlVuYWJsZSB0byBkZXRlcm1pbmUgZGV2aWNlIG5vZGUgZnJvbSBjb21tYW5kOiAkYXJncyIKKyAgICBleGl0IDEKK2ZpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3Rlc3RfYnVpbGRfdGltZS5zaCBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3Rlc3RfYnVpbGRfdGltZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZTU3MjVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvdGVzdF9idWlsZF90aW1lLnNoCkBAIC0wLDAgKzEsMjM3IEBACisjIS9iaW4vYmFzaAorCisjIEJ1aWxkIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCBzY3JpcHQKKyMKKyMgQ29weXJpZ2h0IDIwMTEgSW50ZWwgQ29ycG9yYXRpb24KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIworIworIyBERVNDUklQVElPTgorIyBUaGlzIHNjcmlwdCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggImdpdCBiaXNlY3QgcnVuIgorIyBpbiBvcmRlciB0byBmaW5kIHJlZ3Jlc3Npb25zIGluIGJ1aWxkIHRpbWUsIGhvd2V2ZXIgaXQgY2FuIGFsc28gYmUgdXNlZAorIyBpbmRlcGVuZGVudGx5LiBJdCBjbGVhbnMgb3V0IHRoZSBidWlsZCBvdXRwdXQgZGlyZWN0b3JpZXMsIHJ1bnMgYQorIyBzcGVjaWZpZWQgd29ya2VyIHNjcmlwdCAoYW4gZXhhbXBsZSBpcyB0ZXN0X2J1aWxkX3RpbWVfd29ya2VyLnNoKSB1bmRlcgorIyBUSU1FKDEpLCBsb2dzIHRoZSByZXN1bHRzIHRvIFRFU1RfTE9HRElSIChkZWZhdWx0IC90bXApIGFuZCByZXR1cm5zIGEKKyMgdmFsdWUgdGVsbGluZyAiZ2l0IGJpc2VjdCBydW4iIHdoZXRoZXIgdGhlIGJ1aWxkIHRpbWUgaXMgZ29vZCAodW5kZXIKKyMgdGhlIHNwZWNpZmllZCB0aHJlc2hvbGQpIG9yIGJhZCAob3ZlciBpdCkuIFRoZXJlIGlzIGFsc28gYSB0b2xlcmFuY2UKKyMgb3B0aW9uIGJ1dCBpdCBpcyBub3QgcGFydGljdWxhcmx5IHVzZWZ1bCBhcyBpdCBvbmx5IHN1YnRyYWN0cyB0aGUKKyMgdG9sZXJhbmNlIGZyb20gdGhlIGdpdmVuIHRocmVzaG9sZCBhbmQgdXNlcyBpdCBhcyB0aGUgYWN0dWFsIHRocmVzaG9sZC4KKyMKKyMgSXQgaXMgYWxzbyBjYXBhYmxlIG9mIHRha2luZyBhIGZpbGUgbGlzdGluZyBnaXQgcmV2aXNpb24gaGFzaGVzIHRvIGJlCisjIHRlc3QtYXBwbGllZCB0byB0aGUgcmVwb3NpdG9yeSBpbiBvcmRlciB0byBnZXQgcGFzdCBidWlsZCBmYWlsdXJlcyB0aGF0CisjIHdvdWxkIG90aGVyd2lzZSBjYXVzZSBjZXJ0YWluIHJldmlzaW9ucyB0byBoYXZlIHRvIGJlIHNraXBwZWQ7IGlmIGEKKyMgcmV2aXNpb24gZG9lcyBub3QgYXBwbHkgY2xlYW5seSB0aGVuIHRoZSBzY3JpcHQgYXNzdW1lcyBpdCBkb2VzIG5vdAorIyBuZWVkIHRvIGJlIGFwcGxpZWQgYW5kIGlnbm9yZXMgaXQuCisjCisjIFBsZWFzZSBzZWUgdGhlIGhlbHAgb3V0cHV0IChzeW50YXggYmVsb3cpIGZvciBzb21lIGltcG9ydGFudCBzZXR1cAorIyBpbnN0cnVjdGlvbnMuCisjCisjIEFVVEhPUlMKKyMgUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKKworc3ludGF4KCkgeworICAgIGVjaG8gInN5bnRheDogJDAgPHNjcmlwdD4gPHRpbWU+IDx0b2xlcmFuY2U+IFtwYXRjaHJldmxpc3RdIgorICAgIGVjaG8gIiIKKyAgICBlY2hvICIgIHNjcmlwdCAgICAgICAtIHdvcmtlciBzY3JpcHQgZmlsZSAoaWYgaW4gY3VycmVudCBkaXIsIHByZWZpeCB3aXRoIC4vKSIKKyAgICBlY2hvICIgIHRpbWUgICAgICAgICAtIHRpbWUgdGhyZXNob2xkIChpbiBzZWNvbmRzLCBzdWZmaXggbSBmb3IgbWludXRlcykiCisgICAgZWNobyAiICB0b2xlcmFuY2UgICAgLSB0b2xlcmFuY2UgKGluIHNlY29uZHMsIHN1ZmZpeCBtIGZvciBtaW51dGVzIG9yICUgZm9yIgorICAgIGVjaG8gIiAgICAgICAgICAgICAgICAgcGVyY2VudGFnZSwgY2FuIGJlIDApIgorICAgIGVjaG8gIiAgcGF0Y2hyZXZsaXN0IC0gb3B0aW9uYWwgZmlsZSBsaXN0aW5nIHJldmlzaW9ucyB0byBhcHBseSBhcyBwYXRjaGVzIG9uIHRvcCIKKyAgICBlY2hvICIiCisgICAgZWNobyAiWW91IG11c3Qgc2V0IFRFU1RfQlVJTERESVIgdG8gcG9pbnQgdG8gYSBwcmV2aW91c2x5IGNyZWF0ZWQgYnVpbGQgZGlyZWN0b3J5LCIKKyAgICBlY2hvICJob3dldmVyIHBsZWFzZSBub3RlIHRoYXQgdGhpcyBzY3JpcHQgd2lsbCB3aXBlIG91dCB0aGUgVE1QRElSIGRlZmluZWQgaW4iCisgICAgZWNobyAiVEVTVF9CVUlMRERJUi9jb25mL2xvY2FsLmNvbmYgYXMgcGFydCBvZiBpdHMgaW5pdGlhbCBzZXR1cCAoYXMgd2VsbCBhcyB5b3VyIgorICAgIGVjaG8gIn4vLmNjYWNoZSkiCisgICAgZWNobyAiIgorICAgIGVjaG8gIlRvIGdldCByaWQgb2YgdGhlIHN1ZG8gcHJvbXB0LCBwbGVhc2UgYWRkIHRoZSBmb2xsb3dpbmcgbGluZSB0byAvZXRjL3N1ZG9lcnMiCisgICAgZWNobyAiKHVzZSAndmlzdWRvJyB0byBlZGl0IHRoaXM7IGFsc28gaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSB1c2VyIHlvdSBhcmUgcnVubmluZyIKKyAgICBlY2hvICJhcyBpcyBhIG1lbWJlciBvZiB0aGUgJ3doZWVsJyBncm91cCk6IgorICAgIGVjaG8gIiIKKyAgICBlY2hvICIld2hlZWwgQUxMPShBTEwpIE5PUEFTU1dEOiAvc2Jpbi9zeXNjdGwgLXcgdm0uZHJvcF9jYWNoZXM9WzEtM10iCisgICAgZWNobyAiIgorICAgIGVjaG8gIk5vdGU6IGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRpc2FibGUgY3JvbmQgYW5kIGFueSBvdGhlciBwcm9jZXNzIHRoYXQiCisgICAgZWNobyAibWF5IGNhdXNlIHNpZ25pZmljYW50IENQVSBvciBJL08gdXNhZ2UgZHVyaW5nIGJ1aWxkIHBlcmZvcm1hbmNlIHRlc3RzLiIKK30KKworIyBOb3RlIC0gd2UgZXhpdCB3aXRoIDI1MCBoZXJlIGJlY2F1c2UgdGhhdCB3aWxsIHRlbGwgZ2l0IGJpc2VjdCBydW4gdGhhdAorIyBzb21ldGhpbmcgYmFkIGhhcHBlbmVkIGFuZCBzdG9wCitpZiBbICIkMSIgPSAiIiBdIDsgdGhlbgorICAgc3ludGF4CisgICBleGl0IDI1MAorZmkKKworaWYgWyAiJDIiID0gIiIgXSA7IHRoZW4KKyAgIHN5bnRheAorICAgZXhpdCAyNTAKK2ZpCisKK2lmIFsgIiQzIiA9ICIiIF0gOyB0aGVuCisgICBzeW50YXgKKyAgIGV4aXQgMjUwCitmaQorCitpZiAhIFtbICIkMiIgPX4gXlswLTldWzAtOW0uXSokIF1dIDsgdGhlbgorICAgZWNobyAiJyQyJyBpcyBub3QgYSB2YWxpZCBudW1iZXIgZm9yIHRocmVzaG9sZCIKKyAgIGV4aXQgMjUwCitmaQorCitpZiAhIFtbICIkMyIgPX4gXlswLTldWzAtOW0uJV0qJCBdXSA7IHRoZW4KKyAgIGVjaG8gIickMycgaXMgbm90IGEgdmFsaWQgbnVtYmVyIGZvciB0b2xlcmFuY2UiCisgICBleGl0IDI1MAorZmkKKworaWYgWyAiJFRFU1RfQlVJTERESVIiID0gIiIgXSA7IHRoZW4KKyAgIGVjaG8gIlBsZWFzZSBzZXQgVEVTVF9CVUlMRERJUiB0byBhIHByZXZpb3VzbHkgY3JlYXRlZCBidWlsZCBkaXJlY3RvcnkiCisgICBleGl0IDI1MAorZmkKKworaWYgWyAhIC1kICIkVEVTVF9CVUlMRERJUiIgXSA7IHRoZW4KKyAgIGVjaG8gIlRFU1RfQlVJTERESVIgJFRFU1RfQlVJTERESVIgbm90IGZvdW5kIgorICAgZXhpdCAyNTAKK2ZpCisKK2dpdCBkaWZmIC0tcXVpZXQKK2lmIFsgJD8gIT0gMCBdIDsgdGhlbgorICAgIGVjaG8gIldvcmtpbmcgdHJlZSBpcyBkaXJ0eSwgY2Fubm90IHByb2NlZWQiCisgICAgZXhpdCAyNTEKK2ZpCisKK2lmIFsgIiRCQl9FTlZfRVhUUkFXSElURSIgIT0gIiIgXSA7IHRoZW4KKyAgIGVjaG8gIldBUk5JTkc6IHlvdSBhcmUgcnVubmluZyBhZnRlciBzb3VyY2luZyB0aGUgYnVpbGQgZW52aXJvbm1lbnQgc2NyaXB0LCB0aGlzIGlzIG5vdCByZWNvbW1lbmRlZCIKK2ZpCisKK3J1bnNjcmlwdD0kMQordGltZXRocmVzaG9sZD0kMgordG9sZXJhbmNlPSQzCisKK2lmIFsgIiQ0IiAhPSAiIiBdIDsgdGhlbgorICAgIHBhdGNocmV2bGlzdD1gY2F0ICQ0YAorZWxzZQorICAgIHBhdGNocmV2bGlzdD0iIgorZmkKKworaWYgW1sgdGltZXRocmVzaG9sZCA9PSAqbSogXV0gOyB0aGVuCisgICAgdGltZXRocmVzaG9sZD1gZWNobyAkdGltZXRocmVzaG9sZCB8IHNlZCBzL20vKjYwLyB8IGJjYAorZmkKKworaWYgW1sgJHRvbGVyYW5jZSA9PSAqbSogXV0gOyB0aGVuCisgICAgdG9sZXJhbmNlPWBlY2hvICR0b2xlcmFuY2UgfCBzZWQgcy9tLyo2MC8gfCBiY2AKK2VsaWYgW1sgJHRvbGVyYW5jZSA9PSAqJSogXV0gOyB0aGVuCisgICAgdG9sZXJhbmNlPWBlY2hvICR0b2xlcmFuY2UgfCBzZWQgcy8lLy9gCisgICAgdG9sZXJhbmNlPWBlY2hvICJzY2FsZSA9IDI7ICgoJHRvbGVyYW5jZSAqICR0aW1ldGhyZXNob2xkKSAvIDEwMCkiIHwgYmNgCitmaQorCit0bXBkaXI9YGdyZXAgIl5UTVBESVIiICRURVNUX0JVSUxERElSL2NvbmYvbG9jYWwuY29uZiB8IHNlZCAtZSAncy9UTVBESVJbIFx0XSo9WyBcdFw/XSoiLy8nIC1lICdzLyIvLydgCitpZiBbICJ4JHRtcGRpciIgPSAieCIgXTsgdGhlbgorICAgIGVjaG8gIlVuYWJsZSB0byBkZXRlcm1pbmUgVE1QRElSIGZyb20gJFRFU1RfQlVJTERESVIvY29uZi9sb2NhbC5jb25mLCBiYWlsaW5nIG91dCIKKyAgICBleGl0IDI1MAorZmkKK3NzdGF0ZWRpcj1gZ3JlcCAiXlNTVEFURV9ESVIiICRURVNUX0JVSUxERElSL2NvbmYvbG9jYWwuY29uZiB8IHNlZCAtZSAncy9TU1RBVEVfRElSWyBcdFw/XSo9WyBcdF0qIi8vJyAtZSAncy8iLy8nYAoraWYgWyAieCRzc3RhdGVkaXIiID0gIngiIF07IHRoZW4KKyAgICBlY2hvICJVbmFibGUgdG8gZGV0ZXJtaW5lIFNTVEFURV9ESVIgZnJvbSAkVEVTVF9CVUlMRERJUi9jb25mL2xvY2FsLmNvbmYsIGJhaWxpbmcgb3V0IgorICAgIGV4aXQgMjUwCitmaQorCitpZiBbIGBleHByIGxlbmd0aCAkdG1wZGlyYCAtbHQgNCBdIDsgdGhlbgorICAgIGVjaG8gIlRNUERJUiAkdG1wZGlyIGlzIGxlc3MgdGhhbiA0IGNoYXJhY3RlcnMsIGJhaWxpbmcgb3V0IgorICAgIGV4aXQgMjUwCitmaQorCitpZiBbIGBleHByIGxlbmd0aCAkc3N0YXRlZGlyYCAtbHQgNCBdIDsgdGhlbgorICAgIGVjaG8gIlNTVEFURV9ESVIgJHNzdGF0ZWRpciBpcyBsZXNzIHRoYW4gNCBjaGFyYWN0ZXJzLCBiYWlsaW5nIG91dCIKKyAgICBleGl0IDI1MAorZmkKKworZWNobyAtbiAiQWJvdXQgdG8gd2lwZSBvdXQgVE1QRElSICR0bXBkaXIsIHByZXNzIEN0cmwrQyB0byBicmVhayBvdXQuLi4gICIKK2ZvciBpIGluIDkgOCA3IDYgNSA0IDMgMiAxCitkbworICAgIGVjaG8gLW5lICJceDA4JGkiCisgICAgc2xlZXAgMQorZG9uZQorZWNobworCitwdXNoZCAuID4gL2Rldi9udWxsCisKK3JtIC1mIHBzZXVkb2RvbmUKK2VjaG8gIlJlbW92aW5nIFRNUERJUiAkdG1wZGlyLi4uIgorcm0gLXJmICR0bXBkaXIKK2VjaG8gIlJlbW92aW5nIFRNUERJUiAkdG1wZGlyLSpsaWJjLi4uIgorcm0gLXJmICR0bXBkaXItKmxpYmMKK2VjaG8gIlJlbW92aW5nIFNTVEFURV9ESVIgJHNzdGF0ZWRpci4uLiIKK3JtIC1yZiAkc3N0YXRlZGlyCitlY2hvICJSZW1vdmluZyB+Ly5jY2FjaGUuLi4iCitybSAtcmYgfi8uY2NhY2hlCisKK2VjaG8gIlN5bmNpbmcuLi4iCitzeW5jCitzeW5jCitlY2hvICJEcm9wcGluZyBWTSBjYWNoZS4uLiIKKyNlY2hvIDMgPiAvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXMKK3N1ZG8gL3NiaW4vc3lzY3RsIC13IHZtLmRyb3BfY2FjaGVzPTMgPiAvZGV2L251bGwKKworaWYgWyAiJFRFU1RfTE9HRElSIiA9ICIiIF0gOyB0aGVuCisgICAgbG9nZGlyPSIvdG1wIgorZWxzZQorICAgIGxvZ2Rpcj0iJFRFU1RfTE9HRElSIgorZmkKK3Jldj1gZ2l0IHJldi1wYXJzZSBIRUFEYAorbG9nZmlsZT0iJGxvZ2Rpci90aW1lbG9nXyRyZXYubG9nIgorZWNobyAtbiA+ICRsb2dmaWxlCisKK2dpdHJvb3Q9YGdpdCByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsYAorY2QgJGdpdHJvb3QKK2ZvciBwYXRjaHJldiBpbiAkcGF0Y2hyZXZsaXN0IDsgZG8KKyAgICBlY2hvICJBcHBseWluZyAkcGF0Y2hyZXYiCisgICAgcGF0Y2hmaWxlPWBta3RlbXBgCisgICAgZ2l0IHNob3cgJHBhdGNocmV2ID4gJHBhdGNoZmlsZQorICAgIGdpdCBhcHBseSAtLWNoZWNrICRwYXRjaGZpbGUgJj4gL2Rldi9udWxsCisgICAgaWYgWyAkPyAhPSAwIF0gOyB0aGVuCisgICAgICAgIGVjaG8gIiAuLi4gcGF0Y2ggZG9lcyBub3QgYXBwbHkgd2l0aG91dCBlcnJvcnMsIGlnbm9yaW5nIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiQXBwbGllZCAkcGF0Y2hyZXYiID4+ICRsb2dmaWxlCisgICAgICAgIGdpdCBhcHBseSAkcGF0Y2hmaWxlICY+IC9kZXYvbnVsbAorICAgIGZpCisgICAgcm0gJHBhdGNoZmlsZQorZG9uZQorCitzeW5jCitlY2hvICJRdWllc2NpbmcgZm9yIDVzLi4uIgorc2xlZXAgNQorCitlY2hvICJSdW5uaW5nICRydW5zY3JpcHQgYXQgJHJldi4uLiIKK3RpbWVvdXRmaWxlPWBta3RlbXBgCisvdXNyL2Jpbi90aW1lIC1vICR0aW1lb3V0ZmlsZSAtZiAiJWVcbnJlYWxcdCVFXG51c2VyXHQlVXNcbnN5c1x0JVNzXG5tYXhtXHQlTWsiICRydW5zY3JpcHQgMj4mMSB8IHRlZSAtYSAkbG9nZmlsZQorZXhpdHN0YXR1cz0kUElQRVNUQVRVUworCitnaXQgcmVzZXQgLS1oYXJkIEhFQUQgPiAvZGV2L251bGwKK3BvcGQgPiAvZGV2L251bGwKKwordGltZXJlc3VsdD1gaGVhZCAtbjEgJHRpbWVvdXRmaWxlYAorY2F0ICR0aW1lb3V0ZmlsZSB8IHRlZSAtYSAkbG9nZmlsZQorcm0gJHRpbWVvdXRmaWxlCisKK2lmIFsgJGV4aXRzdGF0dXMgIT0gMCBdIDsgdGhlbgorICAgICMgQnVpbGQgZmFpbGVkLCBleGl0IHdpdGggMTI1IHRvIHRlbGwgZ2l0IGJpc2VjdCBydW4gdG8gc2tpcCB0aGlzIHJldgorICAgIGVjaG8gIioqKiBCdWlsZCBmYWlsZWQgKGV4aXQgY29kZSAkZXhpdHN0YXR1cyksIHNraXBwaW5nLi4uIiB8IHRlZSAtYSAkbG9nZmlsZQorICAgIGV4aXQgMTI1CitmaQorCityZXQ9YGVjaG8gInNjYWxlID0gMjsgJHRpbWVyZXN1bHQgPiAkdGltZXRocmVzaG9sZCAtICR0b2xlcmFuY2UiIHwgYmNgCitlY2hvICJSZXR1cm5pbmcgJHJldCIgfCB0ZWUgLWEgJGxvZ2ZpbGUKK2V4aXQgJHJldAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi90ZXN0X2J1aWxkX3RpbWVfd29ya2VyLnNoIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvdGVzdF9idWlsZF90aW1lX3dvcmtlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZTIwYTllCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvdGVzdF9idWlsZF90aW1lX3dvcmtlci5zaApAQCAtMCwwICsxLDM3IEBACisjIS9iaW4vYmFzaAorCisjIFRoaXMgaXMgYW4gZXhhbXBsZSBzY3JpcHQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRlc3RfYnVpbGRfdGltZS5zaAorCitpZiBbICIkVEVTVF9CVUlMRERJUiIgPSAiIiBdIDsgdGhlbgorICAgIGVjaG8gIlRFU1RfQlVJTERESVIgaXMgbm90IHNldCIKKyAgICBleGl0IDEKK2ZpCisKK2J1aWxkc3ViZGlyPWBiYXNlbmFtZSAkVEVTVF9CVUlMRERJUmAKK2lmIFsgISAtZCAkYnVpbGRzdWJkaXIgXSA7IHRoZW4KKyAgICBlY2hvICJVbmFibGUgdG8gZmluZCBidWlsZCBzdWJkaXIgJGJ1aWxkc3ViZGlyIGluIGN1cnJlbnQgZGlyZWN0b3J5IgorICAgIGV4aXQgMQorZmkKKworaWYgWyAtZiBvZS1pbml0LWJ1aWxkLWVudiBdIDsgdGhlbgorICAgIC4gLi9vZS1pbml0LWJ1aWxkLWVudiAkYnVpbGRzdWJkaXIKK2VsaWYgWyAtZiBwb2t5LWluaXQtYnVpbGQtZW52IF0gOyB0aGVuCisgICAgLiAuL3Bva3ktaW5pdC1idWlsZC1lbnYgJGJ1aWxkc3ViZGlyCitlbHNlCisgICAgZWNobyAiVW5hYmxlIHRvIGZpbmQgYnVpbGQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IgorICAgIGV4aXQgMQorZmkKKworaWYgWyAtZiAuLi9tZXRhL3JlY2lwZXMtc2F0by9pbWFnZXMvY29yZS1pbWFnZS1zYXRvLmJiIF0gOyB0aGVuCisgICAgdGFyZ2V0PSJjb3JlLWltYWdlLXNhdG8iCitlbHNlCisgICAgdGFyZ2V0PSJwb2t5LWltYWdlLXNhdG8iCitmaQorCitlY2hvICJCdWlsZCBzdGFydGVkIGF0IGBkYXRlICIrJVktJW0tJWQgJUg6JU06JVMiYCIKK2VjaG8gImJpdGJha2UgJHRhcmdldCIKK2JpdGJha2UgJHRhcmdldAorcmV0PSQ/CitlY2hvICJCdWlsZCBmaW5pc2hlZCBhdCBgZGF0ZSAiKyVZLSVtLSVkICVIOiVNOiVTImAiCitleGl0ICRyZXQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvdmVyaWZ5LWhvbWVwYWdlLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvdmVyaWZ5LWhvbWVwYWdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg2Y2M4MmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi92ZXJpZnktaG9tZXBhZ2UucHkKQEAgLTAsMCArMSw2MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgVGhpcyBzY3JpcHQgaXMgdXNlZCBmb3IgdmVyaWZ5IEhPTUVQQUdFLgorIyBUaGUgcmVzdWx0IGlzIGluZmx1ZW5jZWQgYnkgbmV0d29yayBlbnZpcm9ubWVudCwgc2luY2UgdGhlIHRpbWVvdXQgb2YgY29ubmVjdCB1cmwgaXMgNSBzZWNvbmRzIGFzIGRlZmF1bHQuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB1cmxsaWIyCisKK2RlZiBzZWFyY2hfYml0YmFrZXBhdGgoKToKKyAgICBiaXRiYWtlcGF0aCA9ICIiCisKKyAgICAjIFNlYXJjaCBwYXRoIHRvIGJpdGJha2UgbGliIGRpciBpbiBvcmRlciB0byBsb2FkIGJiIG1vZHVsZXMKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKSwgJy4uLy4uL2JpdGJha2UvbGliL2JiJykpOgorICAgICAgICBiaXRiYWtlcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMF0pLCAnLi4vLi4vYml0YmFrZS9saWInKQorICAgICAgICBiaXRiYWtlcGF0aCA9IG9zLnBhdGguYWJzcGF0aChiaXRiYWtlcGF0aCkKKyAgICBlbHNlOgorICAgICAgICAjIExvb2sgZm9yIGJpdGJha2UvYmluIGRpciBpbiBQQVRICisgICAgICAgIGZvciBwdGggaW4gb3MuZW52aXJvblsnUEFUSCddLnNwbGl0KCc6Jyk6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocHRoLCAnLi4vbGliL2JiJykpOgorICAgICAgICAgICAgICAgIGJpdGJha2VwYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwdGgsICcuLi9saWInKSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBub3QgYml0YmFrZXBhdGg6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJVbmFibGUgdG8gZmluZCBiaXRiYWtlIGJ5IHNlYXJjaGluZyBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoaXMgc2NyaXB0IG9yIFBBVEhcbiIpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgIHJldHVybiBiaXRiYWtlcGF0aAorCisjIEZvciBpbXBvcnRpbmcgdGhlIGZvbGxvd2luZyBtb2R1bGVzCitzeXMucGF0aC5pbnNlcnQoMCwgc2VhcmNoX2JpdGJha2VwYXRoKCkpCitpbXBvcnQgYmIudGluZm9pbAorCitkZWYgd2dldEhvbWVwYWdlKHBuLCBob21lcGFnZSk6CisgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5jYWxsKCd3Z2V0ICcgKyAnLXEgLVQgNSAtdCAxIC0tc3BpZGVyICcgKyBob21lcGFnZSwgc2hlbGwgPSBUcnVlKQorICAgIGlmIHJlc3VsdDoKKyAgICAgICAgYmIud2FybigiRmFpbGVkIHRvIHZlcmlmeSBIT01FUEFHRSAoJXMpIG9mICVzIiAlIChob21lcGFnZSwgcG4pKQorICAgICAgICByZXR1cm4gMQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiAwCisKK2RlZiB2ZXJpZnlIb21lcGFnZShiYmhhbmRsZXIpOgorICAgIHBrZ19wbiA9IGJiaGFuZGxlci5jb29rZXIucmVjaXBlY2FjaGUucGtnX3BuCisgICAgcG5saXN0ID0gc29ydGVkKHBrZ19wbikKKyAgICBjb3VudCA9IDAKKyAgICBmb3IgcG4gaW4gcG5saXN0OgorICAgICAgICBmbiA9IHBrZ19wbltwbl0ucG9wKCkKKyAgICAgICAgZGF0YSA9IGJiLmNhY2hlLkNhY2hlLmxvYWREYXRhRnVsbChmbiwgYmJoYW5kbGVyLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoZm4pLCBiYmhhbmRsZXIuY29uZmlnX2RhdGEpCisgICAgICAgIGhvbWVwYWdlID0gZGF0YS5nZXRWYXIoIkhPTUVQQUdFIikKKyAgICAgICAgaWYgaG9tZXBhZ2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdXJsbGliMi51cmxvcGVuKGhvbWVwYWdlLCB0aW1lb3V0PTUpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIGNvdW50ID0gY291bnQgKyB3Z2V0SG9tZXBhZ2UocG4sIGhvbWVwYWdlKQorICAgIHJldHVybiBjb3VudAorCitpZiBfX25hbWVfXz09J19fbWFpbl9fJzoKKyAgICBmYWlsY291bnQgPSAwCisgICAgYmJoYW5kbGVyID0gYmIudGluZm9pbC5UaW5mb2lsKCkKKyAgICBiYmhhbmRsZXIucHJlcGFyZSgpCisgICAgcHJpbnQgIlN0YXJ0IHRvIHZlcmlmeSBIT01FUEFHRToiCisgICAgZmFpbGNvdW50ID0gdmVyaWZ5SG9tZXBhZ2UoYmJoYW5kbGVyKQorICAgIHByaW50ICJmaW5pc2ggdG8gdmVyaWZ5IEhPTUVQQUdFLiIKKyAgICBwcmludCAiU3VtbWFyeTogJXMgZmFpbGVkIiAlIGZhaWxjb3VudApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NwLW5vZXJyb3IgYi95b2N0by1wb2t5L3NjcmlwdHMvY3Atbm9lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yOGViOTBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2NwLW5vZXJyb3IKQEAgLTAsMCArMSw1MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIEFsbG93IGNvcHlpbmcgb2YgJDEgdG8gJDIgYnV0IGlmIGZpbGVzIGluICQxIGRpc2FwcGVhciBkdXJpbmcgdGhlIGNvcHkgb3BlcmF0aW9uLAorIyBkb24ndCBlcnJvci4KKyMgQWxzbyBkb24ndCBlcnJvciBpZiAkMSBkaXNhcHBlYXJzLgorIworCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKKworZGVmIGNvcHl0cmVlKHNyYywgZHN0LCBzeW1saW5rcz1GYWxzZSwgaWdub3JlPU5vbmUpOgorICAgICIiIkJhc2VkIG9uIHNodXRpbC5jb3B5dHJlZSIiIgorICAgIG5hbWVzID0gb3MubGlzdGRpcihzcmMpCisgICAgdHJ5OgorICAgICAgICBvcy5tYWtlZGlycyhkc3QpCisgICAgZXhjZXB0IE9TRXJyb3I6IAorICAgICAgICAjIEFscmVhZHkgZXhpc3RzCisgICAgICAgIHBhc3MKKyAgICBlcnJvcnMgPSBbXQorICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICBzcmNuYW1lID0gb3MucGF0aC5qb2luKHNyYywgbmFtZSkKKyAgICAgICAgZHN0bmFtZSA9IG9zLnBhdGguam9pbihkc3QsIG5hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGQgPSBkc3RuYW1lCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGRzdG5hbWUpOgorICAgICAgICAgICAgICAgIGQgPSBvcy5wYXRoLmpvaW4oZHN0bmFtZSwgb3MucGF0aC5iYXNlbmFtZShzcmNuYW1lKSkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGQpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MubGluayhzcmNuYW1lLCBkc3RuYW1lKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkyKHNyY25hbWUsIGRzdG5hbWUpCisgICAgICAgICMgY2F0Y2ggdGhlIEVycm9yIGZyb20gdGhlIHJlY3Vyc2l2ZSBjb3B5dHJlZSBzbyB0aGF0IHdlIGNhbgorICAgICAgICAjIGNvbnRpbnVlIHdpdGggb3RoZXIgZmlsZXMKKyAgICAgICAgZXhjZXB0IHNodXRpbC5FcnJvciwgZXJyOgorICAgICAgICAgICAgZXJyb3JzLmV4dGVuZChlcnIuYXJnc1swXSkKKyAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IsIHdoeToKKyAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoKHNyY25hbWUsIGRzdG5hbWUsIHN0cih3aHkpKSkKKyAgICB0cnk6CisgICAgICAgIHNodXRpbC5jb3B5c3RhdChzcmMsIGRzdCkKKyAgICBleGNlcHQgT1NFcnJvciwgd2h5OgorICAgICAgICBlcnJvcnMuZXh0ZW5kKChzcmMsIGRzdCwgc3RyKHdoeSkpKQorICAgIGlmIGVycm9yczoKKyAgICAgICAgcmFpc2Ugc2h1dGlsLkVycm9yLCBlcnJvcnMKKwordHJ5OgorICAgIGNvcHl0cmVlKHN5cy5hcmd2WzFdLCBzeXMuYXJndlsyXSkKK2V4Y2VwdCBzaHV0aWwuRXJyb3I6CisgICBwYXNzCitleGNlcHQgT1NFcnJvcjoKKyAgIHBhc3MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9jcmVhdGUtcHVsbC1yZXF1ZXN0IGIveW9jdG8tcG9reS9zY3JpcHRzL2NyZWF0ZS1wdWxsLXJlcXVlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTliYTU4OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9jcmVhdGUtcHVsbC1yZXF1ZXN0CkBAIC0wLDAgKzEsMjU4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwLTIwMTMsICBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyAKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7ICB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlCisjIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworIworIyBUaGlzIHNjcmlwdCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIHByZXBhcmUgYSBzZXJpZXMgb2YgcGF0Y2hlcworIyBhbmQgYSBjb3ZlciBsZXR0ZXIgaW4gYW4gYXBwcm9wcmlhdGUgYW5kIGNvbnNpc3RlbnQgZm9ybWF0IGZvcgorIyBzdWJtaXNzaW9uIHRvIE9wZW4gRW1iZWRkZWQgYW5kIFRoZSBZb2N0byBQcm9qZWN0LCBhcyB3ZWxsIGFzIHRvCisjIHJlbGF0ZWQgcHJvamVjdHMgYW5kIGxheWVycy4KKyMKKworT0RJUj1wdWxsLSQkCitSRUxBVElWRV9UTz0ibWFzdGVyIgorQ09NTUlUX0lEPSJIRUFEIgorUFJFRklYPSJQQVRDSCIKK1JGQz0wCisKK3VzYWdlKCkgeworQ01EPSQoYmFzZW5hbWUgJDApCitjYXQgPDxFT00KK1VzYWdlOiAkQ01EIFstaF0gWy1vIG91dHB1dF9kaXJdIFstbSBtc2dfYm9keV9maWxlXSBbLXMgc3ViamVjdF0gWy1yIHJlbGF0aXZlX3RvXSBbLWkgY29tbWl0X2lkXSBbLWQgcmVsYXRpdmVfZGlyXSAtdSByZW1vdGUgWy1iIGJyYW5jaF0KKyAgLWIgYnJhbmNoICAgICAgICAgICBCcmFuY2ggbmFtZSBpbiB0aGUgc3BlY2lmaWVkIHJlbW90ZSAoZGVmYXVsdDogY3VycmVudCBicmFuY2gpCisgIC1jICAgICAgICAgICAgICAgICAgQ3JlYXRlIGFuIFJGQyAoUmVxdWVzdCBmb3IgQ29tbWVudCkgcGF0Y2ggc2VyaWVzCisgIC1oICAgICAgICAgICAgICAgICAgRGlzcGxheSB0aGlzIGhlbHAgbWVzc2FnZQorICAtaSBjb21taXRfaWQgICAgICAgIEVuZGluZyBjb21taXQgKGRlZmF1bHQ6IEhFQUQpCisgIC1tIG1zZ19ib2R5X2ZpbGUgICAgVGhlIGZpbGUgY29udGFpbmluZyBhIGJsdXJiIHRvIGJlIGluc2VydGVkIGludG8gdGhlIHN1bW1hcnkgZW1haWwKKyAgLW8gb3V0cHV0X2RpciAgICAgICBTcGVjaWZ5IHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgbWVzc2FnZXMgKGRlZmF1bHQ6IHB1bGwtUElEKQorICAtcCBwcmVmaXggICAgICAgICAgIFVzZSBbcHJlZml4IE4vTV0gaW5zdGVhZCBvZiBbUEFUQ0ggTi9NXSBhcyB0aGUgc3ViamVjdCBwcmVmaXgKKyAgLXIgcmVsYXRpdmVfdG8gICAgICBTdGFydGluZyBjb21taXQgKGRlZmF1bHQ6IG1hc3RlcikKKyAgLXMgc3ViamVjdCAgICAgICAgICBUaGUgc3ViamVjdCB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSBzdW1tYXJ5IGVtYWlsCisgIC11IHJlbW90ZSAgICAgICAgICAgVGhlIGdpdCByZW1vdGUgd2hlcmUgdGhlIGJyYW5jaCBpcyBsb2NhdGVkCisgIC1kIHJlbGF0aXZlX2RpciAgICAgR2VuZXJhdGUgcGF0Y2hlcyByZWxhdGl2ZSB0byBkaXJlY3RvcnkKKworIEV4YW1wbGVzOgorICAgJENNRCAtdSBjb250cmliIC1iIG5pdGluL2Jhc2ljCisgICAkQ01EIC11IGNvbnRyaWIgLXIgZGlzdHJvL21hc3RlciAtaSBuaXRpbi9kaXN0cm8gLWIgbml0aW4vZGlzdHJvCisgICAkQ01EIC11IGNvbnRyaWIgLXIgbWFzdGVyIC1pIG1pc2MgLWIgbml0aW4vbWlzYyAtbyBwdWxsLW1pc2MKKyAgICRDTUQgLXUgY29udHJpYiAtcCAiUkZDIFBBVENIIiAtYiBuaXRpbi9leHBlcmltZW50YWwKKyAgICRDTUQgLXUgY29udHJpYiAtaSBtaXNjIC1iIG5pdGluL21pc2MgLWQgLi9iaXRiYWtlCitFT00KK30KKworIyBQYXJzZSBhbmQgdmFsaWRhdGUgYXJndW1lbnRzCit3aGlsZSBnZXRvcHRzICJiOmNkOmhpOm06bzpwOnI6czp1OiIgT1BUOyBkbworCWNhc2UgJE9QVCBpbgorCWIpCisJCUJSQU5DSD0iJE9QVEFSRyIKKwkJOzsKKwljKQorCQlSRkM9MQorCQk7OworCWQpCisJCVJFTERJUj0iJE9QVEFSRyIKKwkJOzsKKwloKQorCQl1c2FnZQorCQlleGl0IDAKKwkJOzsKKwlpKQorCQlDT01NSVRfSUQ9IiRPUFRBUkciCisJCTs7CisJbSkKKwkJQk9EWT0iJE9QVEFSRyIKKwkJaWYgWyAhIC1lICIkQk9EWSIgXTsgdGhlbgorCQkJZWNobyAiRVJST1I6IEJvZHkgZmlsZSBkb2VzIG5vdCBleGlzdCIKKwkJCWV4aXQgMQorCQlmaQorCQk7OworCW8pCisJCU9ESVI9IiRPUFRBUkciCisJCTs7CisJcCkKKwkJUFJFRklYPSIkT1BUQVJHIgorCQk7OworCXIpCisJCVJFTEFUSVZFX1RPPSIkT1BUQVJHIgorCQk7OworCXMpCisJCVNVQkpFQ1Q9IiRPUFRBUkciCisJCTs7CisJdSkKKwkJUkVNT1RFPSIkT1BUQVJHIgorCQlSRU1PVEVfVVJMPSQoZ2l0IGNvbmZpZyByZW1vdGUuJFJFTU9URS51cmwpCisJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQkJZWNobyAiRVJST1I6IGdpdCBjb25maWcgZmFpbGVkIHRvIGZpbmQgYSB1cmwgZm9yICckUkVNT1RFJyIKKwkJCWVjaG8KKwkJCWVjaG8gIlRvIGFkZCBhIHJlbW90ZSB1cmwgZm9yICRSRU1PVEUsIHVzZToiCisJCQllY2hvICIgIGdpdCBjb25maWcgcmVtb3RlLiRSRU1PVEUudXJsIDx1cmw+IgorCQkJZXhpdCAxCisJCWZpCisKKwkJIyBSZXdyaXRlIHByaXZhdGUgVVJMcyB0byBwdWJsaWMgVVJMcworCQkjIERldGVybWluZSB0aGUgcmVwb3NpdG9yeSBuYW1lIGZvciB1c2UgaW4gdGhlIFdFQl9VUkwgbGF0ZXIKKwkJY2FzZSAiJFJFTU9URV9VUkwiIGluCisJCSpAKikKKwkJCVVTRVJfUkU9IltBLVphLXowLTlfLkBdW0EtWmEtejAtOV8uQC1dKlwkXD8iCisJCQlQUk9UT19SRT0iW2Etel1bYS16K10qOi8vIgorCQkJR0lUX1JFPSJcKF5cKCRQUk9UT19SRVwpXD8kVVNFUl9SRUBcKVwoW146L10qXClbOi9dXCguKlwpIgorCQkJUkVNT1RFX1VSTD0ke1JFTU9URV9VUkwlLmdpdH0KKwkJCVJFTU9URV9SRVBPPSQoZWNobyAkUkVNT1RFX1VSTCB8IHNlZCAicyMkR0lUX1JFI1w0IyIpCisJCQlSRU1PVEVfVVJMPSQoZWNobyAkUkVNT1RFX1VSTCB8IHNlZCAicyMkR0lUX1JFI2dpdDovL1wzL1w0IyIpCisJCQk7OworCQkqKQorCQkJZWNobyAiV0FSTklORzogVW5yZWNvZ25pemVkIHJlbW90ZSBVUkw6ICRSRU1PVEVfVVJMIgorCQkJZWNobyAiICAgICAgICAgVGhlIHB1bGwgYW5kIGJyb3dzZSBVUkxzIHdpbGwgbGlrZWx5IGJlIGluY29ycmVjdCIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwllc2FjCitkb25lCisKK2lmIFsgLXogIiRCUkFOQ0giIF07IHRoZW4KKwlCUkFOQ0g9JChnaXQgYnJhbmNoIHwgZ3JlcCAtZSAiXlwqICIgfCBjdXQgLWQnICcgLWYyKQorCWVjaG8gIk5PVEU6IEFzc3VtaW5nIHJlbW90ZSBicmFuY2ggJyRCUkFOQ0gnLCB1c2UgLWIgdG8gb3ZlcnJpZGUuIgorZmkKKworaWYgWyAteiAiJFJFTU9URV9VUkwiIF07IHRoZW4KKwllY2hvICJFUlJPUjogTWlzc2luZyBwYXJhbWV0ZXIgLXUsIG5vIGdpdCByZW1vdGUhIgorCXVzYWdlCisJZXhpdCAxCitmaQorCitpZiBbICRSRkMgLWVxIDEgXTsgdGhlbgorCVBSRUZJWD0iUkZDICRQUkVGSVgiCitmaQorCisKKyMgU2V0IFdFQl9VUkwgZnJvbSBrbm93biByZW1vdGVzCitXRUJfVVJMPSIiCitjYXNlICIkUkVNT1RFX1VSTCIgaW4KKwkqZ2l0LnlvY3RvcHJvamVjdC5vcmcqKQorCQlXRUJfVVJMPSJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC5jZ2kvJFJFTU9URV9SRVBPL2xvZy8/aD0kQlJBTkNIIgorCQk7OworCSpnaXQucG9reWxpbnV4Lm9yZyopCisJCVdFQl9VUkw9Imh0dHA6Ly9naXQucG9reWxpbnV4Lm9yZy9jZ2l0LmNnaS8kUkVNT1RFX1JFUE8vbG9nLz9oPSRCUkFOQ0giCisJCTs7CisJKmdpdC5vcGVuZW1iZWRkZWQub3JnKikKKwkJV0VCX1VSTD0iaHR0cDovL2NnaXQub3BlbmVtYmVkZGVkLm9yZy9jZ2l0LmNnaS8kUkVNT1RFX1JFUE8vbG9nLz9oPSRCUkFOQ0giCisJCTs7CisJKmdpdGh1Yi5jb20qKQorCQlXRUJfVVJMPSJodHRwczovL2dpdGh1Yi5jb20vJFJFTU9URV9SRVBPL3RyZWUvJEJSQU5DSCIKKwkJOzsKK2VzYWMKKworIyBQZXJmb3JtIGEgc2FuaXR5IHRlc3Qgb24gdGhlIHdlYiBVUkwuIElzc3VlIGEgd2FybmluZyBpZiBpdCBpcyBub3QKKyMgYWNjZXNzaWJsZSwgYnV0IGRvIG5vdCBhYm9ydCBhcyB1c2VycyBtYXkgd2FudCB0byBydW4gb2ZmbGluZS4KK2lmIFsgLW4gIiRXRUJfVVJMIiBdOyB0aGVuCisJd2dldCAtLW5vLWNoZWNrLWNlcnRpZmljYXRlIC1xICRXRUJfVVJMIC1PIC9kZXYvbnVsbAorCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQllY2hvICJXQVJOSU5HOiBCcmFuY2ggJyRCUkFOQ0gnIHdhcyBub3QgZm91bmQgb24gdGhlIGNvbnRyaWIgZ2l0IHRyZWUuIgorCQllY2hvICIgICAgICAgICBQbGVhc2UgY2hlY2sgeW91ciByZW1vdGUgYW5kIGJyYW5jaCBwYXJhbWV0ZXIgYmVmb3JlIHNlbmRpbmcuIgorCQllY2hvICIiCisJZmkKK2ZpCisKK2lmIFsgLWUgJE9ESVIgXTsgdGhlbgorCWVjaG8gIkVSUk9SOiBvdXRwdXQgZGlyZWN0b3J5ICRPRElSIGV4aXN0cy4iCisJZXhpdCAxCitmaQorbWtkaXIgJE9ESVIKKworaWYgWyAtbiAiJFJFTERJUiIgXTsgdGhlbgorCU9ESVI9JChyZWFscGF0aCAkT0RJUikKKwlwZGlyPSQocHdkKQorCWNkICRSRUxESVIKKwlleHRyYW9wdHM9Ii0tcmVsYXRpdmUiCitmaQorCisjIEdlbmVyYXRlIHRoZSBwYXRjaGVzIGFuZCBjb3ZlciBsZXR0ZXIKK2dpdCBmb3JtYXQtcGF0Y2ggJGV4dHJhb3B0cyAtTTQwIC0tc3ViamVjdC1wcmVmaXg9IiRQUkVGSVgiIC1uIC1vICRPRElSIC0tdGhyZWFkPXNoYWxsb3cgLS1jb3Zlci1sZXR0ZXIgJFJFTEFUSVZFX1RPLi4kQ09NTUlUX0lEID4gL2Rldi9udWxsCisKK1sgLW4gIiRSRUxESVIiIF0gJiYgY2QgJHBkaXIKKworIyBDdXN0b21pemUgdGhlIGNvdmVyIGxldHRlcgorQ0w9IiRPRElSLzAwMDAtY292ZXItbGV0dGVyLnBhdGNoIgorUE09IiRPRElSL3B1bGwtbXNnIgorR0lUX1ZFUlNJT049JChgZ2l0IC0tdmVyc2lvbmAgfCB0ciAtZCAnWzphbHBoYTpdWzpzcGFjZTpdLicgfCBzZWQgJ3MvXCguLi5cKS4qL1wxLycpCitORVdFUl9HSVRfVkVSU0lPTj0yMTAKK2lmIFsgJEdJVF9WRVJTSU9OIC1sdCAkTkVXRVJfR0lUX1ZFUlNJT04gXTsgdGhlbgorCWdpdCByZXF1ZXN0LXB1bGwgJFJFTEFUSVZFX1RPICRSRU1PVEVfVVJMICRDT01NSVRfSUQgPj4gIiRQTSIKK2Vsc2UKKwlnaXQgcmVxdWVzdC1wdWxsICRSRUxBVElWRV9UTyAkUkVNT1RFX1VSTCA6JEJSQU5DSCA+PiAiJFBNIgorZmkKK2lmIFsgJD8gLW5lIDAgXTsgdGhlbgorCWVjaG8gIkVSUk9SOiBnaXQgcmVxdWVzdC1wdWxsIHJlcG9ydGVkIGFuIGVycm9yIgorCWV4aXQgMQorZmkKKworIyBUaGUgY292ZXIgbGV0dGVyIGFscmVhZHkgaGFzIGEgZGlmZnN0YXQsIHJlbW92ZSBpdCBmcm9tIHRoZSBwdWxsLW1zZworIyBiZWZvcmUgaW5zZXJ0aW5nIGl0Lgorc2VkIC1uICIwLFwjJFJFTU9URV9VUkwjIHAiICIkUE0iIHwgc2VkIC1pICIvQkxVUkIgSEVSRS8gciAvZGV2L3N0ZGluIiAiJENMIgorcm0gIiRQTSIKKworIyBJZiB0aGlzIGlzIGFuIFJGQywgbWFrZSB0aGF0IGNsZWFyIGluIHRoZSBjb3ZlciBsZXR0ZXIKK2lmIFsgJFJGQyAtZXEgMSBdOyB0aGVuCisoY2F0IDw8RU9NCitQbGVhc2UgcmV2aWV3IHRoZSBmb2xsb3dpbmcgY2hhbmdlcyBmb3Igc3VpdGFiaWxpdHkgZm9yIGluY2x1c2lvbi4gSWYgeW91IGhhdmUKK2FueSBvYmplY3Rpb25zIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgcGxlYXNlIHJlc3BvbmQgdG8gdGhlIHBhdGNoZXMuIElmCit5b3UgYWdyZWUgd2l0aCB0aGUgY2hhbmdlcywgcGxlYXNlIHByb3ZpZGUgeW91ciBBY2tlZC1ieS4KKworRU9NCispIHwgc2VkIC1pICIvQkxVUkIgSEVSRS8gciAvZGV2L3N0ZGluIiAiJENMIgorZmkKKworIyBJbnNlcnQgdGhlIFdFQl9VUkwgaWYgdGhlcmUgaXMgb25lCitpZiBbIC1uICIkV0VCX1VSTCIgXTsgdGhlbgorCWVjaG8gIiAgJFdFQl9VUkwiIHwgc2VkIC1pICJcIyRSRU1PVEVfVVJMIyByIC9kZXYvc3RkaW4iICIkQ0wiCitmaQorCisKKyMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGEgbWVzc2FnZSBib2R5LCBpbnNlcnQgaXQgaW50byB0aGUgY292ZXIgbGV0dGVyIGFuZAorIyByZW1vdmUgdGhlIEJMVVJCIHRva2VuLgoraWYgWyAtbiAiJEJPRFkiIF07IHRoZW4KKwlzZWQgLWkgIi9CTFVSQiBIRVJFLyByICRCT0RZIiAiJENMIgorCXNlZCAtaSAiL0JMVVJCIEhFUkUvIGQiICIkQ0wiCitmaQorCisjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhIHN1YmplY3QsIHJlcGxhY2UgdGhlIFNVQkpFQ1QgdG9rZW4gd2l0aCBpdC4KK2lmIFsgLW4gIiRTVUJKRUNUIiBdOyB0aGVuCisJc2VkIC1pIC1lICJzL1wqXCpcKiBTVUJKRUNUIEhFUkUgXCpcKlwqLyRTVUJKRUNULyIgIiRDTCIKK2ZpCisKKworIyBHZW5lcmF0ZSByZXBvcnQgZm9yIHVzZXIKK2NhdCA8PEVPTQorVGhlIGZvbGxvd2luZyBwYXRjaGVzIGhhdmUgYmVlbiBwcmVwYXJlZDoKKyQoZm9yIFBBVENIIGluICQobHMgJE9ESVIvKik7IGRvIGVjaG8gIiAgICAkUEFUQ0giOyBkb25lKQorCitSZXZpZXcgdGhlaXIgY29udGVudCwgZXNwZWNpYWxseSB0aGUgc3VtbWFyeSBtYWlsOgorICAgICRDTAorCitXaGVuIHlvdSBhcmUgc2F0aXNmaWVkLCB5b3UgY2FuIHNlbmQgdGhlbSB3aXRoOgorICAgIHNlbmQtcHVsbC1yZXF1ZXN0IC1hIC1wICRPRElSCitFT00KKworIyBDaGVjayB0aGUgcGF0Y2hlcyBmb3IgdHJhaWxpbmcgd2hpdGUgc3BhY2UKK2VncmVwIC1xIC1lICJeXCsuKlxzKyQiICRPRElSLyoKK2lmIFsgJD8gLW5lIDEgXTsgdGhlbgorCWVjaG8KKwllY2hvICJXQVJOSU5HOiBUcmFpbGluZyB3aGl0ZSBzcGFjZSBkZXRlY3RlZCBhdCB0aGVzZSBsb2NhdGlvbnMiCisJZWdyZXAgLW5IIC0tY29sb3IgLWUgIl5cKy4qXHMrJCIgJE9ESVIvKgorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9jcm9zc3RhcCBiL3lvY3RvLXBva3kvc2NyaXB0cy9jcm9zc3RhcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ODMxN2NmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2Nyb3NzdGFwCkBAIC0wLDAgKzEsMTQ4IEBACisjIS9iaW4vYmFzaAorIworIyBSdW4gYSBzeXN0ZW10YXAgc2NyaXB0IG9uIHJlbW90ZSB0YXJnZXQKKyMKKyMgRXhhbXBsZXMgKHJ1biBvbiBidWlsZCBob3N0LCB0YXJnZXQgaXMgMTkyLjE2OC4xLnh4eCk6CisjICAgJCBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnYiCisjICAgJCBjZCB+L215L3N5c3RlbXRhcC9zY3JpcHRzIgorIworIyAgICQgY3Jvc3N0YXAgcm9vdEAxOTIuMTY4LjEueHh4IG15c2NyaXB0LnN0cCIKKyMgICAkIGNyb3NzdGFwIHJvb3RAMTkyLjE2OC4xLnh4eCBteXNjcmlwdC13aXRoLWFyZ3Muc3RwIDk5IG5pbmV0eW5pbmUiCisjCisjIENvcHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK2Z1bmN0aW9uIHVzYWdlKCkgeworICAgIGVjaG8gIlVzYWdlOiAkMCA8dXNlckBob3N0bmFtZT4gPHN5dGVtdGFwLXNjcmlwdD4gW2FkZGl0aW9uYWwgc3lzdGVtdGFwLXNjcmlwdCBhcmdzXSIKK30KKworZnVuY3Rpb24gc2V0dXBfdXNhZ2UoKSB7CisgICAgZWNobyAiIgorICAgIGVjaG8gIidjcm9zc3RhcCcgcmVxdWlyZXMgYSBsb2NhbCBzZGsgYnVpbGQgb2YgdGhlIHRhcmdldCBzeXN0ZW0iCisgICAgZWNobyAiKG9yIGEgYnVpbGQgdGhhdCBpbmNsdWRlcyAndG9vbHMtcHJvZmlsZScpIGluIG9yZGVyIHRvIGJ1aWxkIgorICAgIGVjaG8gImtlcm5lbCBtb2R1bGVzIHRoYXQgY2FuIHByb2JlIHRoZSB0YXJnZXQgc3lzdGVtLiIKKyAgICBlY2hvICIiCisgICAgZWNobyAiUHJhY3RpY2FsbHkgc3BlYWtpbmcsIHRoYXQgbWVhbnMgeW91IG5lZWQgdG8gZG8gdGhlIGZvbGxvd2luZzoiCisgICAgZWNobyAiICAtIElmIHlvdSdyZSBydW5uaW5nIGEgcHJlLWJ1aWx0IGltYWdlLCBkb3dubG9hZCB0aGUgcmVsZWFzZSIKKyAgICBlY2hvICIgICAgYW5kL29yIEJTUCB0YXJiYWxscyB1c2VkIHRvIGJ1aWxkIHRoZSBpbWFnZS4iCisgICAgZWNobyAiICAtIElmIHlvdSdyZSB3b3JraW5nIGZyb20gZ2l0IHNvdXJjZXMsIGp1c3QgY2xvbmUgdGhlIG1ldGFkYXRhIgorICAgIGVjaG8gIiAgICBhbmQgQlNQIGxheWVycyBuZWVkZWQgdG8gYnVpbGQgdGhlIGltYWdlIHlvdSdsbCBiZSBib290aW5nLiIKKyAgICBlY2hvICIgIC0gTWFrZSBzdXJlIHlvdSdyZSBwcm9wZXJseSBzZXQgdXAgdG8gYnVpbGQgYSBuZXcgaW1hZ2UgKHNlZSIKKyAgICBlY2hvICIgICAgdGhlIEJTUCBSRUFETUUgYW5kL29yIHRoZSB3aWRlbHkgYXZhaWxhYmxlIGJhc2ljIGRvY3VtZW50YXRpb24iCisgICAgZWNobyAiICAgIHRoYXQgZGlzY3Vzc2VzIGhvdyB0byBidWlsZCBpbWFnZXMpLiIKKyAgICBlY2hvICIgIC0gQnVpbGQgYW4gLXNkayB2ZXJzaW9uIG9mIHRoZSBpbWFnZSBlLmcuOiIKKyAgICBlY2hvICIgICAgICAkIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvLXNkayIKKyAgICBlY2hvICIgIE9SIgorICAgIGVjaG8gIiAgLSBCdWlsZCBhIG5vbi1zZGsgaW1hZ2UgYnV0IGluY2x1ZGUgdGhlIHByb2ZpbGluZyB0b29sczoiCisgICAgZWNobyAiICAgICAgWyBlZGl0IGxvY2FsLmNvbmYgYW5kIGFkZCAndG9vbHMtcHJvZmlsZScgdG8gdGhlIGVuZCBvZiIKKyAgICBlY2hvICIgICAgICAgIHRoZSBFWFRSQV9JTUFHRV9GRUFUVVJFUyB2YXJpYWJsZSBdIgorICAgIGVjaG8gIiAgICAgICQgYml0YmFrZSBjb3JlLWltYWdlLXNhdG8iCisgICAgZWNobyAiIgorICAgIGVjaG8gIiAgWyBOT1RFIHRoYXQgJ2Nyb3NzdGFwJyBuZWVkcyB0byBiZSBhYmxlIHRvIHNzaCBpbnRvIHRoZSB0YXJnZXQiCisgICAgZWNobyAiICAgIHN5c3RlbSwgd2hpY2ggaXNuJ3QgZW5hYmxlZCBieSBkZWZhdWx0IGluIC1taW5pbWFsIGltYWdlcy4gXSIKKyAgICBlY2hvICIiCisgICAgZWNobyAiT25jZSB5b3UndmUgYnVpbGQgdGhlIGltYWdlIG9uIHRoZSBob3N0IHN5c3RlbSwgeW91J3JlIHJlYWR5IHRvIgorICAgIGVjaG8gImJvb3QgaXQgKG9yIHRoZSBlcXVpdmFsZW50IHByZS1idWlsdCBpbWFnZSkgYW5kIHVzZSAnY3Jvc3N0YXAnIgorICAgIGVjaG8gInRvIHByb2JlIGl0ICh5b3UgbmVlZCB0byBzb3VyY2UgdGhlIGVudmlyb25tZW50IGFzIHVzdWFsIGZpcnN0KToiCisgICAgZWNobyAiIgorICAgIGVjaG8gIiAgICAkIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudiIKKyAgICBlY2hvICIgICAgJCBjZCB+L215L3N5c3RlbXRhcC9zY3JpcHRzIgorICAgIGVjaG8gIiAgICAkIGNyb3NzdGFwIHJvb3RAMTkyLjE2OC4xLnh4eCBteXNjcmlwdC5zdHAiCisgICAgZWNobyAiIgorfQorCitmdW5jdGlvbiBzeXN0ZW10YXBfdGFyZ2V0X2FyY2goKSB7CisgICAgU1lTVEVNVEFQX1RBUkdFVF9BUkNIPSQxCisgICAgY2FzZSAkU1lTVEVNVEFQX1RBUkdFVF9BUkNIIGluCisgICAgICAgIGk/ODYpCisgICAgICAgICAgICBTWVNURU1UQVBfVEFSR0VUX0FSQ0g9ImkzODYiCisgICAgICAgICAgICA7OworICAgICAgICB4ODY/NjQqKQorICAgICAgICAgICAgU1lTVEVNVEFQX1RBUkdFVF9BUkNIPSJ4ODZfNjQiCisgICAgICAgICAgICA7OworICAgICAgICBhcm0qKQorICAgICAgICAgICAgU1lTVEVNVEFQX1RBUkdFVF9BUkNIPSJhcm0iCisgICAgICAgICAgICA7OworICAgICAgICBwb3dlcnBjKikKKyAgICAgICAgICAgIFNZU1RFTVRBUF9UQVJHRVRfQVJDSD0icG93ZXJwYyIKKyAgICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgICA7OworICAgIGVzYWMKK30KKworaWYgWyAkIyAtbHQgMiBdOyB0aGVuCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisKK2lmIFsgLXogIiRCVUlMRERJUiIgXTsgdGhlbgorICAgIGVjaG8gIkVycm9yOiBVbmFibGUgdG8gZmluZCB0aGUgQlVJTERESVIgZW52aXJvbm1lbnQgdmFyaWFibGUuIgorICAgIGVjaG8gIkRpZCB5b3UgZm9yZ2V0IHRvIHNvdXJjZSB5b3VyIGJ1aWxkIHN5c3RlbSBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQ/IgorICAgIGV4aXQgMQorZmkKKworcHVzaGQgJFBXRAorY2QgJEJVSUxERElSCitCSVRCQUtFX1ZBUlM9YGJpdGJha2UgLWUgdmlydHVhbC9rZXJuZWxgCitwb3BkCisKK1NUQUdJTkdfQklORElSX1RPT0xDSEFJTj0kKGVjaG8gIiRCSVRCQUtFX1ZBUlMiIHwgZ3JlcCBeU1RBR0lOR19CSU5ESVJfVE9PTENIQUlOIFwKKyAgfCBjdXQgLWQgJz0nIC1mMiB8IGN1dCAtZCAnIicgLWYyKQorU1RBR0lOR19CSU5ESVJfVE9PTFBSRUZJWD0kKGVjaG8gIiRCSVRCQUtFX1ZBUlMiIHwgZ3JlcCBeVEFSR0VUX1BSRUZJWCBcCisgIHwgY3V0IC1kICc9JyAtZjIgfCBjdXQgLWQgJyInIC1mMikKK1NZU1RFTVRBUF9IT1NUX0lOU1RBTExESVI9JChlY2hvICIkQklUQkFLRV9WQVJTIiB8IGdyZXAgXlNUQUdJTkdfRElSX05BVElWRSBcCisgIHwgY3V0IC1kICc9JyAtZjIgfCBjdXQgLWQgJyInIC1mMikKK1RBUkdFVF9BUkNIPSQoZWNobyAiJEJJVEJBS0VfVkFSUyIgfCBncmVwIF5UUkFOU0xBVEVEX1RBUkdFVF9BUkNIIFwKKyAgfCBjdXQgLWQgJz0nIC1mMiB8IGN1dCAtZCAnIicgLWYyKQorVEFSR0VUX0tFUk5FTF9CVUlMRERJUj0kKGVjaG8gIiRCSVRCQUtFX1ZBUlMiIHwgZ3JlcCBeQj0gXAorICB8IGN1dCAtZCAnPScgLWYyIHwgY3V0IC1kICciJyAtZjIpCisKK3N5c3RlbXRhcF90YXJnZXRfYXJjaCAiJFRBUkdFVF9BUkNIIgorCitpZiBbICEgLWQgJFRBUkdFVF9LRVJORUxfQlVJTERESVIgXSB8fAorICAgWyAhIC1mICRUQVJHRVRfS0VSTkVMX0JVSUxERElSL3ZtbGludXggXTsgdGhlbgorICAgIGVjaG8gLWUgIlxuRXJyb3I6IE5vIHRhcmdldCBrZXJuZWwgYnVpbGQgZm91bmQuIgorICAgIGVjaG8gLWUgIkRpZCB5b3UgZm9yZ2V0IHRvIGNyZWF0ZSBhIGxvY2FsIGJ1aWxkIG9mIHlvdXIgaW1hZ2U/IgorICAgIHNldHVwX3VzYWdlCisgICAgZXhpdCAxCitmaQorCitpZiBbICEgLWYgJFNZU1RFTVRBUF9IT1NUX0lOU1RBTExESVIvdXNyL2Jpbi9zdGFwIF07IHRoZW4KKyAgICBlY2hvIC1lICJcbkVycm9yOiBOYXRpdmUgKGhvc3QpIHN5c3RlbXRhcCBub3QgZm91bmQuIgorICAgIGVjaG8gLWUgIkRpZCB5b3UgYWNjaWRlbnRhbGx5IGJ1aWxkIGEgbG9jYWwgbm9uLXNkayBpbWFnZT8gKG9yIGZvcmdldCB0byIKKyAgICBlY2hvIC1lICJhZGQgJ3Rvb2xzLXByb2ZpbGUnIHRvIEVYVFJBX0lNQUdFX0ZFQVRVUkVTIGluIHlvdXIgbG9jYWwuY29uZik/IgorICAgIHNldHVwX3VzYWdlCisgICAgZXhpdCAxCitmaQorCit0YXJnZXRfdXNlcl9ob3N0bmFtZT0iJDEiCitmdWxsX3NjcmlwdF9uYW1lPSIkMiIKK3NjcmlwdF9uYW1lPSQoYmFzZW5hbWUgIiQyIikKK3NjcmlwdF9iYXNlPSR7c2NyaXB0X25hbWUlLip9CitzaGlmdCAyCisKKyR7U1lTVEVNVEFQX0hPU1RfSU5TVEFMTERJUn0vdXNyL2Jpbi9zdGFwIFwKKyAgLWEgJHtTWVNURU1UQVBfVEFSR0VUX0FSQ0h9IFwKKyAgLUIgQ1JPU1NfQ09NUElMRT0iJHtTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU59LyR7U1RBR0lOR19CSU5ESVJfVE9PTFBSRUZJWH0iIFwKKyAgLXIgJHtUQVJHRVRfS0VSTkVMX0JVSUxERElSfSBcCisgIC1JICR7U1lTVEVNVEFQX0hPU1RfSU5TVEFMTERJUn0vdXNyL3NoYXJlL3N5c3RlbXRhcC90YXBzZXQgXAorICAtUiAke1NZU1RFTVRBUF9IT1NUX0lOU1RBTExESVJ9L3Vzci9zaGFyZS9zeXN0ZW10YXAvcnVudGltZSBcCisgIC0tcmVtb3RlPSR0YXJnZXRfdXNlcl9ob3N0bmFtZSBcCisgIC1tICRzY3JpcHRfYmFzZSBcCisgICAkZnVsbF9zY3JpcHRfbmFtZSAiJEAiCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2RldnRvb2wgYi95b2N0by1wb2t5L3NjcmlwdHMvZGV2dG9vbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44N2RmOTUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2RldnRvb2wKQEAgLTAsMCArMSwyOTUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIE9wZW5FbWJlZGRlZCBEZXZlbG9wbWVudCB0b29sCisjCisjIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGdsb2IKK2ltcG9ydCByZQoraW1wb3J0IENvbmZpZ1BhcnNlcgoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBsb2dnaW5nCisKK2Jhc2VwYXRoID0gJycKK3dvcmtzcGFjZSA9IHt9Citjb25maWcgPSBOb25lCitjb250ZXh0ID0gTm9uZQorCisKK3NjcmlwdHNfcGF0aCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSkKK2xpYl9wYXRoID0gc2NyaXB0c19wYXRoICsgJy9saWInCitzeXMucGF0aCA9IHN5cy5wYXRoICsgW2xpYl9wYXRoXQorZnJvbSBkZXZ0b29sIGltcG9ydCBEZXZ0b29sRXJyb3IsIHNldHVwX3RpbmZvaWwKK2ltcG9ydCBzY3JpcHR1dGlscworbG9nZ2VyID0gc2NyaXB0dXRpbHMubG9nZ2VyX2NyZWF0ZSgnZGV2dG9vbCcpCisKK3BsdWdpbnMgPSBbXQorCisKK2NsYXNzIENvbmZpZ0hhbmRsZXIob2JqZWN0KToKKyAgICBjb25maWdfZmlsZSA9ICcnCisgICAgY29uZmlnX29iaiA9IE5vbmUKKyAgICBpbml0X3BhdGggPSAnJworICAgIHdvcmtzcGFjZV9wYXRoID0gJycKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIHNlbGYuY29uZmlnX2ZpbGUgPSBmaWxlbmFtZQorICAgICAgICBzZWxmLmNvbmZpZ19vYmogPSBDb25maWdQYXJzZXIuU2FmZUNvbmZpZ1BhcnNlcigpCisKKyAgICBkZWYgZ2V0KHNlbGYsIHNlY3Rpb24sIG9wdGlvbiwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0ID0gc2VsZi5jb25maWdfb2JqLmdldChzZWN0aW9uLCBvcHRpb24pCisgICAgICAgIGV4Y2VwdCAoQ29uZmlnUGFyc2VyLk5vT3B0aW9uRXJyb3IsIENvbmZpZ1BhcnNlci5Ob1NlY3Rpb25FcnJvcik6CisgICAgICAgICAgICBpZiBkZWZhdWx0ICE9IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0ID0gZGVmYXVsdAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICByZXR1cm4gcmV0CisKKyAgICBkZWYgcmVhZChzZWxmKToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5jb25maWdfZmlsZSk6CisgICAgICAgICAgICBzZWxmLmNvbmZpZ19vYmoucmVhZChzZWxmLmNvbmZpZ19maWxlKQorCisgICAgICAgICAgICBpZiBzZWxmLmNvbmZpZ19vYmouaGFzX29wdGlvbignR2VuZXJhbCcsICdpbml0X3BhdGgnKToKKyAgICAgICAgICAgICAgICBwdGggPSBzZWxmLmdldCgnR2VuZXJhbCcsICdpbml0X3BhdGgnKQorICAgICAgICAgICAgICAgIHNlbGYuaW5pdF9wYXRoID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCBwdGgpCisgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuaW5pdF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdpbml0X3BhdGggJXMgc3BlY2lmaWVkIGluIGNvbmZpZyBmaWxlIGNhbm5vdCBiZSBmb3VuZCcgJSBwdGgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5jb25maWdfb2JqLmFkZF9zZWN0aW9uKCdHZW5lcmFsJykKKworICAgICAgICBzZWxmLndvcmtzcGFjZV9wYXRoID0gc2VsZi5nZXQoJ0dlbmVyYWwnLCAnd29ya3NwYWNlX3BhdGgnLCBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICd3b3Jrc3BhY2UnKSkKKyAgICAgICAgcmV0dXJuIFRydWUKKworCisgICAgZGVmIHdyaXRlKHNlbGYpOgorICAgICAgICBsb2dnZXIuZGVidWcoJ3dyaXRpbmcgdG8gY29uZmlnIGZpbGUgJXMnICUgc2VsZi5jb25maWdfZmlsZSkKKyAgICAgICAgc2VsZi5jb25maWdfb2JqLnNldCgnR2VuZXJhbCcsICd3b3Jrc3BhY2VfcGF0aCcsIHNlbGYud29ya3NwYWNlX3BhdGgpCisgICAgICAgIHdpdGggb3BlbihzZWxmLmNvbmZpZ19maWxlLCAndycpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmNvbmZpZ19vYmoud3JpdGUoZikKKworY2xhc3MgQ29udGV4dDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLl9fZGljdF9fLnVwZGF0ZShrd2FyZ3MpCisKKworZGVmIHJlYWRfd29ya3NwYWNlKCk6CisgICAgZ2xvYmFsIHdvcmtzcGFjZQorICAgIHdvcmtzcGFjZSA9IHt9CisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihjb25maWcud29ya3NwYWNlX3BhdGgsICdjb25mJywgJ2xheWVyLmNvbmYnKSk6CisgICAgICAgIGlmIGNvbnRleHQuZml4ZWRfc2V0dXA6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIndvcmtzcGFjZSBsYXllciBub3Qgc2V0IHVwIikKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygnQ3JlYXRpbmcgd29ya3NwYWNlIGxheWVyIGluICVzJyAlIGNvbmZpZy53b3Jrc3BhY2VfcGF0aCkKKyAgICAgICAgICAgIF9jcmVhdGVfd29ya3NwYWNlKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgY29uZmlnLCBiYXNlcGF0aCkKKyAgICBpZiBub3QgY29udGV4dC5maXhlZF9zZXR1cDoKKyAgICAgICAgX2VuYWJsZV93b3Jrc3BhY2VfbGF5ZXIoY29uZmlnLndvcmtzcGFjZV9wYXRoLCBjb25maWcsIGJhc2VwYXRoKQorCisgICAgbG9nZ2VyLmRlYnVnKCdSZWFkaW5nIHdvcmtzcGFjZSBpbiAlcycgJSBjb25maWcud29ya3NwYWNlX3BhdGgpCisgICAgZXh0ZXJuYWxzcmNfcmUgPSByZS5jb21waWxlKHInXkVYVEVSTkFMU1JDKF9wbi0oW14gPV0rKSk/ICo9ICoiKFteIl0qKSIkJykKKyAgICBmb3IgZm4gaW4gZ2xvYi5nbG9iKG9zLnBhdGguam9pbihjb25maWcud29ya3NwYWNlX3BhdGgsICdhcHBlbmRzJywgJyouYmJhcHBlbmQnKSk6CisgICAgICAgIHdpdGggb3BlbihmbiwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICByZXMgPSBleHRlcm5hbHNyY19yZS5tYXRjaChsaW5lLnJzdHJpcCgpKQorICAgICAgICAgICAgICAgIGlmIHJlczoKKyAgICAgICAgICAgICAgICAgICAgcG4gPSByZXMuZ3JvdXAoMikgb3Igb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKGZuKSlbMF0uc3BsaXQoJ18nKVswXQorICAgICAgICAgICAgICAgICAgICB3b3Jrc3BhY2VbcG5dID0geydzcmN0cmVlJzogcmVzLmdyb3VwKDMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYmFwcGVuZCc6IGZufQorCitkZWYgY3JlYXRlX3dvcmtzcGFjZShhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgorICAgIGlmIGFyZ3MubGF5ZXJwYXRoOgorICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmFic3BhdGgoYXJncy5sYXllcnBhdGgpCisgICAgZWxzZToKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihiYXNlcGF0aCwgJ3dvcmtzcGFjZScpKQorICAgIF9jcmVhdGVfd29ya3NwYWNlKHdvcmtzcGFjZWRpciwgY29uZmlnLCBiYXNlcGF0aCkKKyAgICBpZiBub3QgYXJncy5jcmVhdGVfb25seToKKyAgICAgICAgX2VuYWJsZV93b3Jrc3BhY2VfbGF5ZXIod29ya3NwYWNlZGlyLCBjb25maWcsIGJhc2VwYXRoKQorCitkZWYgX2NyZWF0ZV93b3Jrc3BhY2Uod29ya3NwYWNlZGlyLCBjb25maWcsIGJhc2VwYXRoKToKKyAgICBpbXBvcnQgYmIKKworICAgIGNvbmZkaXIgPSBvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnY29uZicpCisgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGNvbmZkaXIsICdsYXllci5jb25mJykpOgorICAgICAgICBsb2dnZXIuaW5mbygnU3BlY2lmaWVkIHdvcmtzcGFjZSBhbHJlYWR5IHNldCB1cCwgbGVhdmluZyBhcy1pcycpCisgICAgZWxzZToKKyAgICAgICAgIyBBZGQgYSBjb25maWcgZmlsZQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoY29uZmRpcikKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihjb25mZGlyLCAnbGF5ZXIuY29uZicpLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCcjICMjIyB3b3Jrc3BhY2UgbGF5ZXIgYXV0by1nZW5lcmF0ZWQgYnkgZGV2dG9vbCAjIyNcbicpCisgICAgICAgICAgICBmLndyaXRlKCdCQlBBVEggPS4gIiQnICsgJ3tMQVlFUkRJUn06IlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ0JCRklMRVMgKz0gIiQnICsgJ3tMQVlFUkRJUn0vcmVjaXBlcy8qLyouYmIgXFxcbicpCisgICAgICAgICAgICBmLndyaXRlKCcgICAgICAgICAgICAkJyArICd7TEFZRVJESVJ9L2FwcGVuZHMvKi5iYmFwcGVuZCJcbicpCisgICAgICAgICAgICBmLndyaXRlKCdCQkZJTEVfQ09MTEVDVElPTlMgKz0gIndvcmtzcGFjZWxheWVyIlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ0JCRklMRV9QQVRURVJOX3dvcmtzcGFjZWxheWVyID0gIl4kJyArICd7TEFZRVJESVJ9LyJcbicpCisgICAgICAgICAgICBmLndyaXRlKCdCQkZJTEVfUEFUVEVSTl9JR05PUkVfRU1QVFlfd29ya3NwYWNlbGF5ZXIgPSAiMSJcbicpCisgICAgICAgICAgICBmLndyaXRlKCdCQkZJTEVfUFJJT1JJVFlfd29ya3NwYWNlbGF5ZXIgPSAiOTkiXG4nKQorICAgICAgICAjIEFkZCBhIFJFQURNRSBmaWxlCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnUkVBRE1FJyksICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJ1RoaXMgbGF5ZXIgd2FzIGNyZWF0ZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBkZXZ0b29sIHV0aWxpdHkgaW4gb3JkZXIgdG9cbicpCisgICAgICAgICAgICBmLndyaXRlKCdjb250YWluIHJlY2lwZXMgYW5kIGJiYXBwZW5kcy4gSW4gbW9zdCBpbnN0YW5jZXMgeW91IHNob3VsZCB1c2UgdGhlXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnZGV2dG9vbCB1dGlsaXR5IHRvIG1hbmFnZSBmaWxlcyB3aXRoaW4gaXQgcmF0aGVyIHRoYW4gbW9kaWZ5aW5nIGZpbGVzXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnZGlyZWN0bHkgKGFsdGhvdWdoIHJlY2lwZXMgYWRkZWQgd2l0aCAiZGV2dG9vbCBhZGQiIHdpbGwgb2Z0ZW4gbmVlZFxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ2RpcmVjdCBtb2RpZmljYXRpb24uKVxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ1xuSWYgeW91IG5vIGxvbmdlciBuZWVkIHRvIHVzZSBkZXZ0b29sIHlvdSBjYW4gcmVtb3ZlIHRoZSBwYXRoIHRvIHRoaXNcbicpCisgICAgICAgICAgICBmLndyaXRlKCd3b3Jrc3BhY2UgbGF5ZXIgZnJvbSB5b3VyIGNvbmYvYmJsYXllcnMuY29uZiBmaWxlIChhbmQgdGhlbiBkZWxldGUgdGhlXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnbGF5ZXIsIGlmIHlvdSB3aXNoKS5cbicpCisKK2RlZiBfZW5hYmxlX3dvcmtzcGFjZV9sYXllcih3b3Jrc3BhY2VkaXIsIGNvbmZpZywgYmFzZXBhdGgpOgorICAgICIiIkVuc3VyZSB0aGUgd29ya3NwYWNlIGxheWVyIGlzIGluIGJibGF5ZXJzLmNvbmYiIiIKKyAgICBpbXBvcnQgYmIKKyAgICBiYmxheWVyc19jb25mID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCAnY29uZicsICdiYmxheWVycy5jb25mJykKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYmJsYXllcnNfY29uZik6CisgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIGZpbmQgYmJsYXllcnMuY29uZicpCisgICAgICAgIHJldHVybgorICAgIF8sIGFkZGVkID0gYmIudXRpbHMuZWRpdF9iYmxheWVyc19jb25mKGJibGF5ZXJzX2NvbmYsIHdvcmtzcGFjZWRpciwgY29uZmlnLndvcmtzcGFjZV9wYXRoKQorICAgIGlmIGFkZGVkOgorICAgICAgICBsb2dnZXIuaW5mbygnRW5hYmxpbmcgd29ya3NwYWNlIGxheWVyIGluIGJibGF5ZXJzLmNvbmYnKQorICAgIGlmIGNvbmZpZy53b3Jrc3BhY2VfcGF0aCAhPSB3b3Jrc3BhY2VkaXI6CisgICAgICAgICMgVXBkYXRlIG91ciBjb25maWcgdG8gcG9pbnQgdG8gdGhlIG5ldyBsb2NhdGlvbgorICAgICAgICBjb25maWcud29ya3NwYWNlX3BhdGggPSB3b3Jrc3BhY2VkaXIKKyAgICAgICAgY29uZmlnLndyaXRlKCkKKworCitkZWYgbWFpbigpOgorICAgIGdsb2JhbCBiYXNlcGF0aAorICAgIGdsb2JhbCBjb25maWcKKyAgICBnbG9iYWwgY29udGV4dAorCisgICAgY29udGV4dCA9IENvbnRleHQoZml4ZWRfc2V0dXA9RmFsc2UpCisKKyAgICAjIERlZmF1bHQgYmFzZXBhdGgKKyAgICBiYXNlcGF0aCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQorICAgIHB0aCA9IGJhc2VwYXRoCisgICAgd2hpbGUgcHRoICE9ICcnIGFuZCBwdGggIT0gb3Muc2VwOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocHRoLCAnLmRldnRvb2xiYXNlJykpOgorICAgICAgICAgICAgY29udGV4dC5maXhlZF9zZXR1cCA9IFRydWUKKyAgICAgICAgICAgIGJhc2VwYXRoID0gcHRoCisgICAgICAgICAgICBicmVhaworICAgICAgICBwdGggPSBvcy5wYXRoLmRpcm5hbWUocHRoKQorCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249Ik9wZW5FbWJlZGRlZCBkZXZlbG9wbWVudCB0b29sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfaGVscD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcGlsb2c9IlVzZSAlKHByb2cpcyA8c3ViY29tbWFuZD4gLS1oZWxwIHRvIGdldCBoZWxwIG9uIGEgc3BlY2lmaWMgY29tbWFuZCIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1iYXNlcGF0aCcsIGhlbHA9J0Jhc2UgZGlyZWN0b3J5IG9mIFNESyAvIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1iYnBhdGgnLCBoZWxwPSdFeHBsaWNpdGx5IHNwZWNpZnkgdGhlIEJCUEFUSCwgcmF0aGVyIHRoYW4gZ2V0dGluZyBpdCBmcm9tIHRoZSBtZXRhZGF0YScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWQnLCAnLS1kZWJ1ZycsIGhlbHA9J0VuYWJsZSBkZWJ1ZyBvdXRwdXQnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1xJywgJy0tcXVpZXQnLCBoZWxwPSdQcmludCBvbmx5IGVycm9ycycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1jb2xvcicsIGNob2ljZXM9WydhdXRvJywgJ2Fsd2F5cycsICduZXZlciddLCBkZWZhdWx0PSdhdXRvJywgaGVscD0nQ29sb3JpemUgb3V0cHV0ICh3aGVyZSAlKG1ldGF2YXIpcyBpcyAlKGNob2ljZXMpcyknLCBtZXRhdmFyPSdDT0xPUicpCisKKyAgICBnbG9iYWxfYXJncywgdW5wYXJzZWRfYXJncyA9IHBhcnNlci5wYXJzZV9rbm93bl9hcmdzKCkKKworICAgICMgSGVscCBpcyBhZGRlZCBoZXJlIHJhdGhlciB0aGFuIHZpYSBhZGRfaGVscD1UcnVlLCBhcyB3ZSBkb24ndCB3YW50IGl0IHRvCisgICAgIyBiZSBoYW5kbGVkIGJ5IHBhcnNlX2tub3duX2FyZ3MoKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1oJywgJy0taGVscCcsIGFjdGlvbj0naGVscCcsIGRlZmF1bHQ9YXJncGFyc2UuU1VQUFJFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0JykKKworICAgIGlmIGdsb2JhbF9hcmdzLmRlYnVnOgorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKyAgICBlbGlmIGdsb2JhbF9hcmdzLnF1aWV0OgorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5FUlJPUikKKworICAgIGlmIGdsb2JhbF9hcmdzLmJhc2VwYXRoOgorICAgICAgICAjIE92ZXJyaWRlCisgICAgICAgIGJhc2VwYXRoID0gZ2xvYmFsX2FyZ3MuYmFzZXBhdGgKKyAgICBlbGlmIG5vdCBjb250ZXh0LmZpeGVkX3NldHVwOgorICAgICAgICBiYXNlcGF0aCA9IG9zLmVudmlyb24uZ2V0KCdCVUlMRERJUicpCisgICAgICAgIGlmIG5vdCBiYXNlcGF0aDoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVGhpcyBzY3JpcHQgY2FuIG9ubHkgYmUgcnVuIGFmdGVyIGluaXRpYWxpc2luZyB0aGUgYnVpbGQgZW52aXJvbm1lbnQgKGUuZy4gYnkgdXNpbmcgb2UtaW5pdC1idWlsZC1lbnYpIikKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBsb2dnZXIuZGVidWcoJ1VzaW5nIGJhc2VwYXRoICVzJyAlIGJhc2VwYXRoKQorCisgICAgY29uZmlnID0gQ29uZmlnSGFuZGxlcihvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICdjb25mJywgJ2RldnRvb2wuY29uZicpKQorICAgIGlmIG5vdCBjb25maWcucmVhZCgpOgorICAgICAgICByZXR1cm4gLTEKKworICAgICMgV2UgbmVlZCB0byBiZSBpbiB0aGlzIGRpcmVjdG9yeSBvciB3ZSB3b24ndCBiZSBhYmxlIHRvIGluaXRpYWxpc2UgdGluZm9pbAorICAgIG9zLmNoZGlyKGJhc2VwYXRoKQorCisgICAgYml0YmFrZV9zdWJkaXIgPSBjb25maWcuZ2V0KCdHZW5lcmFsJywgJ2JpdGJha2Vfc3ViZGlyJywgJycpCisgICAgaWYgYml0YmFrZV9zdWJkaXI6CisgICAgICAgICMgTm9ybWFsbHkgc2V0IGZvciB1c2Ugd2l0aGluIHRoZSBTREsKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdVc2luZyBiaXRiYWtlIHN1YmRpciAlcycgJSBiaXRiYWtlX3N1YmRpcikKKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguam9pbihiYXNlcGF0aCwgYml0YmFrZV9zdWJkaXIsICdsaWInKSkKKyAgICAgICAgY29yZV9tZXRhX3N1YmRpciA9IGNvbmZpZy5nZXQoJ0dlbmVyYWwnLCAnY29yZV9tZXRhX3N1YmRpcicpCisgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsIGNvcmVfbWV0YV9zdWJkaXIsICdsaWInKSkKKyAgICBlbHNlOgorICAgICAgICAjIFN0YW5kYXJkIGxvY2F0aW9uCisgICAgICAgIGltcG9ydCBzY3JpcHRwYXRoCisgICAgICAgIGJpdGJha2VwYXRoID0gc2NyaXB0cGF0aC5hZGRfYml0YmFrZV9saWJfcGF0aCgpCisgICAgICAgIGlmIG5vdCBiaXRiYWtlcGF0aDoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGZpbmQgYml0YmFrZSBieSBzZWFyY2hpbmcgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGlzIHNjcmlwdCBvciBQQVRIIikKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygnVXNpbmcgc3RhbmRhcmQgYml0YmFrZSBwYXRoICVzJyAlIGJpdGJha2VwYXRoKQorICAgICAgICBzY3JpcHRwYXRoLmFkZF9vZV9saWJfcGF0aCgpCisKKyAgICBzY3JpcHR1dGlscy5sb2dnZXJfc2V0dXBfY29sb3IobG9nZ2VyLCBnbG9iYWxfYXJncy5jb2xvcikKKworICAgIGlmIGdsb2JhbF9hcmdzLmJicGF0aCBpcyBOb25lOgorICAgICAgICB0aW5mb2lsID0gc2V0dXBfdGluZm9pbChjb25maWdfb25seT1UcnVlKQorICAgICAgICBnbG9iYWxfYXJncy5iYnBhdGggPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignQkJQQVRIJywgVHJ1ZSkKKyAgICBlbHNlOgorICAgICAgICB0aW5mb2lsID0gTm9uZQorCisgICAgZm9yIHBhdGggaW4gW3NjcmlwdHNfcGF0aF0gKyBnbG9iYWxfYXJncy5iYnBhdGguc3BsaXQoJzonKToKKyAgICAgICAgcGx1Z2lucGF0aCA9IG9zLnBhdGguam9pbihwYXRoLCAnbGliJywgJ2RldnRvb2wnKQorICAgICAgICBzY3JpcHR1dGlscy5sb2FkX3BsdWdpbnMobG9nZ2VyLCBwbHVnaW5zLCBwbHVnaW5wYXRoKQorCisgICAgaWYgdGluZm9pbDoKKyAgICAgICAgdGluZm9pbC5zaHV0ZG93bigpCisKKyAgICBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKGRlc3Q9InN1YnBhcnNlcl9uYW1lIiwgdGl0bGU9J3N1YmNvbW1hbmRzJywgbWV0YXZhcj0nPHN1YmNvbW1hbmQ+JykKKworICAgIGlmIG5vdCBjb250ZXh0LmZpeGVkX3NldHVwOgorICAgICAgICBwYXJzZXJfY3JlYXRlX3dvcmtzcGFjZSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignY3JlYXRlLXdvcmtzcGFjZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NldCB1cCBhIHdvcmtzcGFjZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdTZXRzIHVwIGEgbmV3IHdvcmtzcGFjZS4gTk9URTogb3RoZXIgZGV2dG9vbCBzdWJjb21tYW5kcyB3aWxsIGNyZWF0ZSBhIHdvcmtzcGFjZSBhdXRvbWF0aWNhbGx5IGFzIG5lZWRlZCwgc28geW91IG9ubHkgbmVlZCB0byB1c2UgJShwcm9nKXMgaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgd29ya3NwYWNlIHNob3VsZCBiZSBsb2NhdGVkLicpCisgICAgICAgIHBhcnNlcl9jcmVhdGVfd29ya3NwYWNlLmFkZF9hcmd1bWVudCgnbGF5ZXJwYXRoJywgbmFyZ3M9Jz8nLCBoZWxwPSdQYXRoIGluIHdoaWNoIHRoZSB3b3Jrc3BhY2UgbGF5ZXIgc2hvdWxkIGJlIGNyZWF0ZWQnKQorICAgICAgICBwYXJzZXJfY3JlYXRlX3dvcmtzcGFjZS5hZGRfYXJndW1lbnQoJy0tY3JlYXRlLW9ubHknLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSdPbmx5IGNyZWF0ZSB0aGUgd29ya3NwYWNlIGxheWVyLCBkbyBub3QgYWx0ZXIgY29uZmlndXJhdGlvbicpCisgICAgICAgIHBhcnNlcl9jcmVhdGVfd29ya3NwYWNlLnNldF9kZWZhdWx0cyhmdW5jPWNyZWF0ZV93b3Jrc3BhY2UpCisKKyAgICBmb3IgcGx1Z2luIGluIHBsdWdpbnM6CisgICAgICAgIGlmIGhhc2F0dHIocGx1Z2luLCAncmVnaXN0ZXJfY29tbWFuZHMnKToKKyAgICAgICAgICAgIHBsdWdpbi5yZWdpc3Rlcl9jb21tYW5kcyhzdWJwYXJzZXJzLCBjb250ZXh0KQorCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHVucGFyc2VkX2FyZ3MsIG5hbWVzcGFjZT1nbG9iYWxfYXJncykKKworICAgIGlmIGFyZ3Muc3VicGFyc2VyX25hbWUgIT0gJ2NyZWF0ZS13b3Jrc3BhY2UnOgorICAgICAgICByZWFkX3dvcmtzcGFjZSgpCisKKyAgICB0cnk6CisgICAgICAgIHJldCA9IGFyZ3MuZnVuYyhhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpCisgICAgZXhjZXB0IERldnRvb2xFcnJvciBhcyBlcnI6CisgICAgICAgIGlmIHN0cihlcnIpOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHN0cihlcnIpKQorICAgICAgICByZXQgPSAxCisKKyAgICByZXR1cm4gcmV0CisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0cnk6CisgICAgICAgIHJldCA9IG1haW4oKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJldCA9IDEKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKDUpCisgICAgc3lzLmV4aXQocmV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2dlbi1sb2NrZWRzaWctY2FjaGUgYi95b2N0by1wb2t5L3NjcmlwdHMvZ2VuLWxvY2tlZHNpZy1jYWNoZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jOTNiMmMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2dlbi1sb2NrZWRzaWctY2FjaGUKQEAgLTAsMCArMSw0NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIGdlbi1sb2NrZWRzaWctY2FjaGUgPGxvY2tlZC1zaWdzLmluYz4gPGlucHV0LWNhY2hlZGlyPiA8b3V0cHV0LWNhY2hlZGlyPgorIworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBnbG9iCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgZXJybm8KKworZGVmIG1rZGlyKGQpOgorICAgIHRyeToKKyAgICAgICAgb3MubWFrZWRpcnMoZCkKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKKyAgICAgICAgICAgIHJhaXNlIGUKKworaWYgbGVuKHN5cy5hcmd2KSA8IDM6CisgICAgcHJpbnQoIkluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIHNwZWNpZmllZCIpCisgICAgc3lzLmV4aXQoMSkKKworc2lncyA9IFtdCit3aXRoIG9wZW4oc3lzLmFyZ3ZbMV0pIGFzIGY6CisgICAgZm9yIGwgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgaWYgIjoiIGluIGw6CisgICAgICAgICAgICBzaWdzLmFwcGVuZChsLnNwbGl0KCI6IilbMl0uc3BsaXQoKVswXSkKKworZmlsZXMgPSBzZXQoKQorZm9yIHMgaW4gc2lnczoKKyAgICBwID0gc3lzLmFyZ3ZbMl0gKyAiLyIgKyBzWzoyXSArICIvKiIgKyBzICsgIioiCisgICAgZmlsZXMgfD0gc2V0KGdsb2IuZ2xvYihwKSkKKyAgICBwID0gc3lzLmFyZ3ZbMl0gKyAiLyovIiArIHNbOjJdICsgIi8qIiArIHMgKyAiKiIKKyAgICBmaWxlcyB8PSBzZXQoZ2xvYi5nbG9iKHApKQorCitmb3IgZiBpbiBmaWxlczoKKyAgICBkc3QgPSBmLnJlcGxhY2Uoc3lzLmFyZ3ZbMl0sIHN5cy5hcmd2WzNdKQorICAgIGRlc3RkaXIgPSBvcy5wYXRoLmRpcm5hbWUoZHN0KQorICAgIG1rZGlyKGRlc3RkaXIpCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhkc3QpOgorICAgICAgICBvcy5yZW1vdmUoZHN0KQorICAgIGlmIChvcy5zdGF0KGYpLnN0X2RldiA9PSBvcy5zdGF0KGRlc3RkaXIpLnN0X2Rldik6CisgICAgICAgIG9zLmxpbmsoZiwgZHN0KQorICAgIGVsc2U6CisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShmLCBkc3QpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvZ2VuLXNpdGUtY29uZmlnIGIveW9jdG8tcG9reS9zY3JpcHRzL2dlbi1zaXRlLWNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZGE3YTBiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2dlbi1zaXRlLWNvbmZpZwpAQCAtMCwwICsxLDUzIEBACisjISAvYmluL3NoCisjICBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworY2F0IDw8IEVPRgorQUNfUFJFUkVRKDIuNTcpCitBQ19JTklUKFtzaXRlX3dpZGVdLFsxLjAuMF0pCisKK0VPRgorCisjIERpc2FibGUgYXMgZW5kaWFuIGlzIHNldCBpbiB0aGUgZGVmYXVsdCBjb25maWcKKyNlY2hvIEFDX0NfQklHRU5ESUFOCisjZWNobworCitpZiBbIC1lICQxL3R5cGVzIF0gOyB0aGVuCisgIHdoaWxlIHJlYWQgdHlwZSA7IGRvCisgICAgZWNobyAiQUNfQ0hFQ0tfU0laRU9GKFskdHlwZV0pIgorICBkb25lIDwgJDEvdHlwZXMKKworICBlY2hvCitmaQorCitpZiBbIC1lICQxL2Z1bmNzIF07IHRoZW4KKyAgd2hpbGUgcmVhZCBmdW5jIDsgZG8KKyAgICBlY2hvICJBQ19DSEVDS19GVU5DUyhbJGZ1bmNdKSIKKyAgZG9uZSA8ICQxL2Z1bmNzCisKKyAgZWNobworZmkKKworaWYgWyAtZSAkMS9oZWFkZXJzIF07IHRoZW4KKyAgd2hpbGUgcmVhZCBoZWFkZXIgOyBkbworICAgIGVjaG8gIkFDX0NIRUNLX0hFQURFUlMoWyRoZWFkZXJdKSIKKyAgZG9uZSA8ICQxL2hlYWRlcnMKKworICBlY2hvCitmaQorCitjYXQgPDwgRU9GCitBQ19PVVRQVVQKK0VPRgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2hvYiBiL3lvY3RvLXBva3kvc2NyaXB0cy9ob2IKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGQzM2FiMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9ob2IKQEAgLTAsMCArMSw2IEBACisjIS91c3IvYmluL2VudiBiYXNoCitleHBvcnQgQkJfRU5WX0VYVFJBV0hJVEU9IkRJU0FCTEVfU0FOSVRZX0NIRUNLUyAkQkJfRU5WX0VYVFJBV0hJVEUiCitESVNBQkxFX1NBTklUWV9DSEVDS1M9MSBiaXRiYWtlIC11IGhvYiAkQAorCityZXQ9JD8KK2V4aXQgJHJldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3AvX19pbml0X18ucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmJiNmUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3AvX19pbml0X18ucHkKQEAgLTAsMCArMSwyMiBAQAorIworIyBZb2N0byBCU1AgdG9vbHMgbGlicmFyeQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBpbnRlbC5jb20+CisjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9lbmdpbmUucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9lbmdpbmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q2YmUyMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL2VuZ2luZS5weQpAQCAtMCwwICsxLDE5NDcgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBERVNDUklQVElPTgorIyBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSB0ZW1wbGF0aW5nIGVuZ2luZSB1c2VkIGJ5ICd5b2N0by1ic3AnIHRvCisjIGNyZWF0ZSBCU1BzLiAgVGhlIEJTUCB0ZW1wbGF0ZXMgYXJlIHNpbXBseSB0aGUgc2V0IG9mIGZpbGVzIGV4cGVjdGVkCisjIHRvIGFwcGVhciBpbiBhIGdlbmVyYXRlZCBCU1AsIG1hcmtlZCB1cCB3aXRoIGEgc21hbGwgc2V0IG9mIHRhZ3MKKyMgdXNlZCB0byBjdXN0b21pemUgdGhlIG91dHB1dC4gIFRoZSBlbmdpbmUgcGFyc2VzIHRocm91Z2ggdGhlCisjIHRlbXBsYXRlcyBhbmQgZ2VuZXJhdGVzIGEgUHl0aG9uIHByb2dyYW0gY29udGFpbmluZyBhbGwgdGhlIGxvZ2ljCisjIGFuZCBpbnB1dCBlbGVtZW50cyBuZWVkZWQgdG8gZGlzcGxheSBhbmQgcmV0cmlldmUgQlNQLXNwZWNpZmljCisjIGluZm9ybWF0aW9uIGZyb20gdGhlIHVzZXIuICBUaGUgcmVzdWx0aW5nIHByb2dyYW0gdXNlcyB0aG9zZSByZXN1bHRzCisjIHRvIGdlbmVyYXRlIHRoZSBmaW5hbCBCU1AgZmlsZXMuCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gaW50ZWwuY29tPgorIworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAorZnJvbSB0YWdzIGltcG9ydCAqCitpbXBvcnQgc2hsZXgKK2ltcG9ydCBqc29uCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHNodXRpbAorCitjbGFzcyBMaW5lKCk6CisgICAgIiIiCisgICAgR2VuZXJpYyAoYWJzdHJhY3QpIGNvbnRhaW5lciByZXByZXNlbnRpbmcgYSBsaW5lIHRoYXQgd2lsbCBhcHBlYXIKKyAgICBpbiB0aGUgQlNQLWdlbmVyYXRpbmcgcHJvZ3JhbS4KKyAgICAiIiIKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpbmUpOgorICAgICAgICBzZWxmLmxpbmUgPSBsaW5lCisgICAgICAgIHNlbGYuZ2VuZXJhdGVkX2xpbmUgPSAiIgorICAgICAgICBzZWxmLnByaW8gPSBzeXMubWF4aW50CisgICAgICAgIHNlbGYuZGlzY2FyZCA9IEZhbHNlCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgZ2VuKHNlbGYsIGNvbnRleHQgPSBOb25lKToKKyAgICAgICAgIiIiCisgICAgICAgIEdlbmVyYXRlIHRoZSBmaW5hbCBleGVjdXRhYmxlIGxpbmUgdGhhdCB3aWxsIGFwcGVhciBpbiB0aGUKKyAgICAgICAgQlNQLWdlbmVyYXRpb24gcHJvZ3JhbS4KKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworICAgIGRlZiBlc2NhcGUoc2VsZiwgbGluZSk6CisgICAgICAgICIiIgorICAgICAgICBFc2NhcGUgc2luZ2xlIGFuZCBkb3VibGUgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcyB1bnRpbCBJIGZpbmQKKyAgICAgICAgc29tZXRoaW5nIGJldHRlciAocmUuZXNjYXBlKCkgZXNjYXBlcyB3YXkgdG9vIG11Y2gpLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIGxpbmUucmVwbGFjZSgiXFwiLCAiXFxcXCIpLnJlcGxhY2UoIlwiIiwgIlxcXCIiKS5yZXBsYWNlKCInIiwgIlxcJyIpCisKKyAgICBkZWYgcGFyc2VfZXJyb3Ioc2VsZiwgbXNnLCBsaW5lbm8sIGxpbmUpOgorICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoIiVzOiAlcyIgJSAobXNnLCBsaW5lKSkKKworCitjbGFzcyBOb3JtYWxMaW5lKExpbmUpOgorICAgICIiIgorICAgIENvbnRhaW5lciBmb3Igbm9ybWFsIChub24tdGFnKSBsaW5lcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGluZSk6CisgICAgICAgIExpbmUuX19pbml0X18oc2VsZiwgbGluZSkKKyAgICAgICAgc2VsZi5pc19maWxlbmFtZSA9IEZhbHNlCisgICAgICAgIHNlbGYuaXNfZGlybmFtZSA9IEZhbHNlCisgICAgICAgIHNlbGYub3V0X2ZpbGViYXNlID0gTm9uZQorCisgICAgZGVmIGdlbihzZWxmLCBjb250ZXh0ID0gTm9uZSk6CisgICAgICAgIGlmIHNlbGYuaXNfZmlsZW5hbWU6CisgICAgICAgICAgICBsaW5lID0gImN1cnJlbnRfZmlsZSA9IFwiIiArIG9zLnBhdGguam9pbihzZWxmLm91dF9maWxlYmFzZSwgc2VsZi5lc2NhcGUoc2VsZi5saW5lKSkgKyAiXCI7IG9mID0gb3BlbihjdXJyZW50X2ZpbGUsIFwid1wiKSIKKyAgICAgICAgZWxpZiBzZWxmLmlzX2Rpcm5hbWU6CisgICAgICAgICAgICBkaXJuYW1lID0gb3MucGF0aC5qb2luKHNlbGYub3V0X2ZpbGViYXNlLCBzZWxmLmVzY2FwZShzZWxmLmxpbmUpKQorICAgICAgICAgICAgbGluZSA9ICJpZiBub3Qgb3MucGF0aC5leGlzdHMoXCIiICsgZGlybmFtZSArICJcIik6IG9zLm1rZGlyKFwiIiArIGRpcm5hbWUgKyAiXCIpIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGluZSA9ICJvZi53cml0ZShcIiIgKyBzZWxmLmVzY2FwZShzZWxmLmxpbmUpICsgIlxcblwiKSIKKyAgICAgICAgcmV0dXJuIGxpbmUKKworCitjbGFzcyBDb2RlTGluZShMaW5lKToKKyAgICAiIiIKKyAgICBDb250YWluZXIgZm9yIFB5dGhvbiBjb2RlIHRhZyBsaW5lcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGluZSk6CisgICAgICAgIExpbmUuX19pbml0X18oc2VsZiwgbGluZSkKKworICAgIGRlZiBnZW4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5saW5lCisKKworY2xhc3MgQXNzaWdubWVudDoKKyAgICAiIiIKKyAgICBSZXByZXNlbnRhdGlvbiBvZiBldmVyeXRoaW5nIHdlIGtub3cgYWJvdXQge3s9bmFtZSB9fSB0YWdzLgorICAgIEluc3RhbmNlcyBvZiB0aGVzZSBhcmUgdXNlZCBieSBBc3NpZ25tZW50IGxpbmVzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGFydCwgZW5kLCBuYW1lKToKKyAgICAgICAgc2VsZi5zdGFydCA9IHN0YXJ0CisgICAgICAgIHNlbGYuZW5kID0gZW5kCisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKworCitjbGFzcyBBc3NpZ25tZW50TGluZShOb3JtYWxMaW5lKToKKyAgICAiIiIKKyAgICBDb250YWluZXIgZm9yIG5vcm1hbCBsaW5lcyBjb250YWluaW5nIGFzc2lnbm1lbnQgdGFncy4gIEFzc2lnbm1lbnQKKyAgICB0YWdzIG11c3QgYmUgaW4gYXNjZW5kaW5nIG9yZGVyIG9mICdzdGFydCcgdmFsdWUuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpbmUpOgorICAgICAgICBOb3JtYWxMaW5lLl9faW5pdF9fKHNlbGYsIGxpbmUpCisgICAgICAgIHNlbGYuYXNzaWdubWVudHMgPSBbXQorCisgICAgZGVmIGFkZF9hc3NpZ25tZW50KHNlbGYsIHN0YXJ0LCBlbmQsIG5hbWUpOgorICAgICAgICBzZWxmLmFzc2lnbm1lbnRzLmFwcGVuZChBc3NpZ25tZW50KHN0YXJ0LCBlbmQsIG5hbWUpKQorCisgICAgZGVmIGdlbihzZWxmLCBjb250ZXh0ID0gTm9uZSk6CisgICAgICAgIGxpbmUgPSBzZWxmLmVzY2FwZShzZWxmLmxpbmUpCisKKyAgICAgICAgZm9yIGFzc2lnbm1lbnQgaW4gc2VsZi5hc3NpZ25tZW50czoKKyAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gIlwiICsgIiArIGFzc2lnbm1lbnQubmFtZSArICIgKyBcIiIKKyAgICAgICAgICAgIGlkeCA9IGxpbmUuZmluZChBU1NJR05fVEFHKQorICAgICAgICAgICAgbGluZSA9IGxpbmVbOmlkeF0gKyByZXBsYWNlbWVudCArIGxpbmVbaWR4ICsgYXNzaWdubWVudC5lbmQgLSBhc3NpZ25tZW50LnN0YXJ0Ol0KKyAgICAgICAgaWYgc2VsZi5pc19maWxlbmFtZToKKyAgICAgICAgICAgIHJldHVybiAiY3VycmVudF9maWxlID0gXCIiICsgb3MucGF0aC5qb2luKHNlbGYub3V0X2ZpbGViYXNlLCBsaW5lKSArICJcIjsgb2YgPSBvcGVuKGN1cnJlbnRfZmlsZSwgXCJ3XCIpIgorICAgICAgICBlbGlmIHNlbGYuaXNfZGlybmFtZToKKyAgICAgICAgICAgIGRpcm5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5vdXRfZmlsZWJhc2UsIGxpbmUpCisgICAgICAgICAgICByZXR1cm4gImlmIG5vdCBvcy5wYXRoLmV4aXN0cyhcIiIgKyBkaXJuYW1lICsgIlwiKTogb3MubWtkaXIoXCIiICsgZGlybmFtZSArICJcIikiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIm9mLndyaXRlKFwiIiArIGxpbmUgKyAiXFxuXCIpIgorCisKK2NsYXNzIElucHV0TGluZShMaW5lKToKKyAgICAiIiIKKyAgICBCYXNlIGNsYXNzIGZvciBJbnB1dCBsaW5lcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKToKKyAgICAgICAgTGluZS5fX2luaXRfXyhzZWxmLCB0YWcpCisgICAgICAgIHNlbGYucHJvcHMgPSBwcm9wcworICAgICAgICBzZWxmLmxpbmVubyA9IGxpbmVubworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucHJpbyA9IGludChwcm9wc1sicHJpbyJdKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmLnByaW8gPSBzeXMubWF4aW50CisKKyAgICBkZWYgZ2VuKHNlbGYsIGNvbnRleHQgPSBOb25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVwZW5kc19vbiA9IHNlbGYucHJvcHNbImRlcGVuZHMtb24iXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlcGVuZHNfb25fdmFsID0gc2VsZi5wcm9wc1siZGVwZW5kcy1vbi12YWwiXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoIk5vICdkZXBlbmRzLW9uLXZhbCcgZm9yICdkZXBlbmRzLW9uJyBwcm9wZXJ0eSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubywgc2VsZi5saW5lKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKworY2xhc3MgRWRpdEJveElucHV0TGluZShJbnB1dExpbmUpOgorICAgICIiIgorICAgIEJhc2UgY2xhc3MgZm9yICdlZGl0Ym94JyBJbnB1dCBsaW5lcy4KKworICAgIHByb3BzOgorICAgICAgICBuYW1lOiBleGFtcGxlIC0gIkxvYWQgYWRkcmVzcyIKKyAgICAgICAgbXNnOiBleGFtcGxlIC0gIlBsZWFzZSBlbnRlciB0aGUgbG9hZCBhZGRyZXNzIgorICAgIHJlc3VsdDoKKyAgICAgICAgU2V0cyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIHNwZWNpZmllZCBieSAnbmFtZScgdG8KKyAgICAgICAgd2hhdGV2ZXIgdGhlIHVzZXIgdHlwZWQuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubyk6CisgICAgICAgIElucHV0TGluZS5fX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pCisKKyAgICBkZWYgZ2VuKHNlbGYsIGNvbnRleHQgPSBOb25lKToKKyAgICAgICAgSW5wdXRMaW5lLmdlbihzZWxmLCBjb250ZXh0KQorICAgICAgICBuYW1lID0gc2VsZi5wcm9wc1sibmFtZSJdCisgICAgICAgIGlmIG5vdCBuYW1lOgorICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gaW5wdXQgJ25hbWUnIHByb3BlcnR5IGZvdW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5lbm8sIHNlbGYubGluZSkKKyAgICAgICAgbXNnID0gc2VsZi5wcm9wc1sibXNnIl0KKyAgICAgICAgaWYgbm90IG1zZzoKKyAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoIk5vIGlucHV0ICdtc2cnIHByb3BlcnR5IGZvdW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5lbm8sIHNlbGYubGluZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWZhdWx0X2Nob2ljZSA9IHNlbGYucHJvcHNbImRlZmF1bHQiXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBkZWZhdWx0X2Nob2ljZSA9ICIiCisKKyAgICAgICAgbXNnICs9ICIgW2RlZmF1bHQ6ICIgKyBkZWZhdWx0X2Nob2ljZSArICJdIgorCisgICAgICAgIGxpbmUgPSBuYW1lICsgIiA9IGRlZmF1bHQocmF3X2lucHV0KFwiIiArIG1zZyArICIgXCIpLCAiICsgbmFtZSArICIpIgorCisgICAgICAgIHJldHVybiBsaW5lCisKKworY2xhc3MgR2l0UmVwb0VkaXRCb3hJbnB1dExpbmUoRWRpdEJveElucHV0TGluZSk6CisgICAgIiIiCisgICAgQmFzZSBjbGFzcyBmb3IgJ2VkaXRib3gnIElucHV0IGxpbmVzIGZvciB1c2VyIGlucHV0IG9mIHJlbW90ZSBnaXQKKyAgICByZXBvcy4gIFRoaXMgY2xhc3MgdmVyaWZpZXMgdGhlIGV4aXN0ZW5jZSBhbmQgY29ubmVjdGl2aXR5IG9mIHRoZQorICAgIHNwZWNpZmllZCBnaXQgcmVwby4KKworICAgIHByb3BzOgorICAgICAgICBuYW1lOiBleGFtcGxlIC0gIkxvYWQgYWRkcmVzcyIKKyAgICAgICAgbXNnOiBleGFtcGxlIC0gIlBsZWFzZSBlbnRlciB0aGUgbG9hZCBhZGRyZXNzIgorICAgIHJlc3VsdDoKKyAgICAgICAgU2V0cyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIHNwZWNpZmllZCBieSAnbmFtZScgdG8KKyAgICAgICAgd2hhdGV2ZXIgdGhlIHVzZXIgdHlwZWQuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubyk6CisgICAgICAgIEVkaXRCb3hJbnB1dExpbmUuX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKQorCisgICAgZGVmIGdlbihzZWxmLCBjb250ZXh0ID0gTm9uZSk6CisgICAgICAgIEVkaXRCb3hJbnB1dExpbmUuZ2VuKHNlbGYsIGNvbnRleHQpCisgICAgICAgIG5hbWUgPSBzZWxmLnByb3BzWyJuYW1lIl0KKyAgICAgICAgaWYgbm90IG5hbWU6CisgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJObyBpbnB1dCAnbmFtZScgcHJvcGVydHkgZm91bmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubywgc2VsZi5saW5lKQorICAgICAgICBtc2cgPSBzZWxmLnByb3BzWyJtc2ciXQorICAgICAgICBpZiBub3QgbXNnOgorICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gaW5wdXQgJ21zZycgcHJvcGVydHkgZm91bmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubywgc2VsZi5saW5lKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlZmF1bHRfY2hvaWNlID0gc2VsZi5wcm9wc1siZGVmYXVsdCJdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGRlZmF1bHRfY2hvaWNlID0gIiIKKworICAgICAgICBtc2cgKz0gIiBbZGVmYXVsdDogIiArIGRlZmF1bHRfY2hvaWNlICsgIl0iCisKKyAgICAgICAgbGluZSA9IG5hbWUgKyAiID0gZ2V0X3ZlcmlmaWVkX2dpdF9yZXBvKFwiIiArIG1zZyArICJcIiwiICsgbmFtZSArICIpIgorCisgICAgICAgIHJldHVybiBsaW5lCisKKworY2xhc3MgRmlsZUVkaXRCb3hJbnB1dExpbmUoRWRpdEJveElucHV0TGluZSk6CisgICAgIiIiCisgICAgQmFzZSBjbGFzcyBmb3IgJ2VkaXRib3gnIElucHV0IGxpbmVzIGZvciB1c2VyIGlucHV0IG9mIGV4aXN0aW5nCisgICAgZmlsZXMuICBUaGlzIGNsYXNzIHZlcmlmaWVzIHRoZSBleGlzdGVuY2Ugb2YgdGhlIHNwZWNpZmllZCBmaWxlLgorCisgICAgcHJvcHM6CisgICAgICAgIG5hbWU6IGV4YW1wbGUgLSAiTG9hZCBhZGRyZXNzIgorICAgICAgICBtc2c6IGV4YW1wbGUgLSAiUGxlYXNlIGVudGVyIHRoZSBsb2FkIGFkZHJlc3MiCisgICAgcmVzdWx0OgorICAgICAgICBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgc3BlY2lmaWVkIGJ5ICduYW1lJyB0bworICAgICAgICB3aGF0ZXZlciB0aGUgdXNlciB0eXBlZC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKToKKyAgICAgICAgRWRpdEJveElucHV0TGluZS5fX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pCisKKyAgICBkZWYgZ2VuKHNlbGYsIGNvbnRleHQgPSBOb25lKToKKyAgICAgICAgRWRpdEJveElucHV0TGluZS5nZW4oc2VsZiwgY29udGV4dCkKKyAgICAgICAgbmFtZSA9IHNlbGYucHJvcHNbIm5hbWUiXQorICAgICAgICBpZiBub3QgbmFtZToKKyAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoIk5vIGlucHV0ICduYW1lJyBwcm9wZXJ0eSBmb3VuZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZW5vLCBzZWxmLmxpbmUpCisgICAgICAgIG1zZyA9IHNlbGYucHJvcHNbIm1zZyJdCisgICAgICAgIGlmIG5vdCBtc2c6CisgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJObyBpbnB1dCAnbXNnJyBwcm9wZXJ0eSBmb3VuZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZW5vLCBzZWxmLmxpbmUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVmYXVsdF9jaG9pY2UgPSBzZWxmLnByb3BzWyJkZWZhdWx0Il0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgZGVmYXVsdF9jaG9pY2UgPSAiIgorCisgICAgICAgIG1zZyArPSAiIFtkZWZhdWx0OiAiICsgZGVmYXVsdF9jaG9pY2UgKyAiXSIKKworICAgICAgICBsaW5lID0gbmFtZSArICIgPSBnZXRfdmVyaWZpZWRfZmlsZShcIiIgKyBtc2cgKyAiXCIsIiArIG5hbWUgKyAiLCBUcnVlKSIKKworICAgICAgICByZXR1cm4gbGluZQorCisKK2NsYXNzIEJvb2xlYW5JbnB1dExpbmUoSW5wdXRMaW5lKToKKyAgICAiIiIKKyAgICBCYXNlIGNsYXNzIGZvciBib29sZWFuIElucHV0IGxpbmVzLgorICAgIHByb3BzOgorICAgICAgICBuYW1lOiBleGFtcGxlIC0gImtleWJvYXJkIgorICAgICAgICBtc2c6ICBleGFtcGxlIC0gIkdvdCBrZXlib2FyZD8iCisgICAgcmVzdWx0OgorICAgICAgICBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgc3BlY2lmaWVkIGJ5ICduYW1lJyB0byAieWVzIiBvciAibm8iCisgICAgICAgIGV4YW1wbGUgLSBrZXlib2FyZCA9ICJ5ZXMiCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubyk6CisgICAgICAgIElucHV0TGluZS5fX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pCisKKyAgICBkZWYgZ2VuKHNlbGYsIGNvbnRleHQgPSBOb25lKToKKyAgICAgICAgSW5wdXRMaW5lLmdlbihzZWxmLCBjb250ZXh0KQorICAgICAgICBuYW1lID0gc2VsZi5wcm9wc1sibmFtZSJdCisgICAgICAgIGlmIG5vdCBuYW1lOgorICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gaW5wdXQgJ25hbWUnIHByb3BlcnR5IGZvdW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5lbm8sIHNlbGYubGluZSkKKyAgICAgICAgbXNnID0gc2VsZi5wcm9wc1sibXNnIl0KKyAgICAgICAgaWYgbm90IG1zZzoKKyAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoIk5vIGlucHV0ICdtc2cnIHByb3BlcnR5IGZvdW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5lbm8sIHNlbGYubGluZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWZhdWx0X2Nob2ljZSA9IHNlbGYucHJvcHNbImRlZmF1bHQiXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBkZWZhdWx0X2Nob2ljZSA9ICIiCisKKyAgICAgICAgbXNnICs9ICIgW2RlZmF1bHQ6ICIgKyBkZWZhdWx0X2Nob2ljZSArICJdIgorCisgICAgICAgIGxpbmUgPSBuYW1lICsgIiA9IGJvb2xlYW4ocmF3X2lucHV0KFwiIiArIG1zZyArICIgXCIpLCAiICsgbmFtZSArICIpIgorCisgICAgICAgIHJldHVybiBsaW5lCisKKworY2xhc3MgTGlzdElucHV0TGluZShJbnB1dExpbmUpOgorICAgICIiIgorICAgIEJhc2UgY2xhc3MgZm9yIExpc3QtYmFzZWQgSW5wdXQgbGluZXMuIGUuZy4gQ2hvaWNlbGlzdCwgQ2hlY2tsaXN0LgorICAgICIiIgorICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKToKKyAgICAgICAgSW5wdXRMaW5lLl9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubykKKyAgICAgICAgc2VsZi5jaG9pY2VzID0gW10KKworICAgIGRlZiBnZW5fY2hvaWNlcGFpcl9saXN0KHNlbGYpOgorICAgICAgICAiIiJHZW5lcmF0ZSBhIGxpc3Qgb2YgMi1pdGVtIHZhbDpkZXNjIGxpc3RzIGZyb20gc2VsZi5jaG9pY2VzLiIiIgorICAgICAgICBpZiBub3Qgc2VsZi5jaG9pY2VzOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBjaG9pY2VwYWlyX2xpc3QgPSBsaXN0KCkKKworICAgICAgICBmb3IgY2hvaWNlIGluIHNlbGYuY2hvaWNlczoKKyAgICAgICAgICAgIGNob2ljZXBhaXIgPSBbXQorICAgICAgICAgICAgY2hvaWNlcGFpci5hcHBlbmQoY2hvaWNlLnZhbCkKKyAgICAgICAgICAgIGNob2ljZXBhaXIuYXBwZW5kKGNob2ljZS5kZXNjKQorICAgICAgICAgICAgY2hvaWNlcGFpcl9saXN0LmFwcGVuZChjaG9pY2VwYWlyKQorCisgICAgICAgIHJldHVybiBjaG9pY2VwYWlyX2xpc3QKKworICAgIGRlZiBnZW5fZGVnZW5lcmF0ZV9jaG9pY2VwYWlyX2xpc3Qoc2VsZiwgY2hvaWNlcyk6CisgICAgICAgICIiIkdlbmVyYXRlIGEgbGlzdCBvZiAyLWl0ZW0gdmFsOmRlc2Mgd2l0aCB2YWw9ZGVzYyBmcm9tIHBhc3NlZC1pbiBjaG9pY2VzLiIiIgorICAgICAgICBjaG9pY2VwYWlyX2xpc3QgPSBsaXN0KCkKKworICAgICAgICBmb3IgY2hvaWNlIGluIGNob2ljZXM6CisgICAgICAgICAgICBjaG9pY2VwYWlyID0gW10KKyAgICAgICAgICAgIGNob2ljZXBhaXIuYXBwZW5kKGNob2ljZSkKKyAgICAgICAgICAgIGNob2ljZXBhaXIuYXBwZW5kKGNob2ljZSkKKyAgICAgICAgICAgIGNob2ljZXBhaXJfbGlzdC5hcHBlbmQoY2hvaWNlcGFpcikKKworICAgICAgICByZXR1cm4gY2hvaWNlcGFpcl9saXN0CisKKyAgICBkZWYgZXhlY19saXN0Z2VuX2ZuKHNlbGYsIGNvbnRleHQgPSBOb25lKToKKyAgICAgICAgIiIiCisgICAgICAgIEV4ZWN1dGUgdGhlIGxpc3QtZ2VuZXJhdGluZyBmdW5jdGlvbiBjb250YWluZWQgYXMgYSBzdHJpbmcgaW4KKyAgICAgICAgdGhlICJnZW4iIHByb3BlcnR5LgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dmFsID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmbmFtZSA9IHNlbGYucHJvcHNbImdlbiJdCisgICAgICAgICAgICBtb2RzcGxpdCA9IGZuYW1lLnNwbGl0KCcuJykKKyAgICAgICAgICAgIG1vZF9mbiA9IG1vZHNwbGl0LnBvcCgpCisgICAgICAgICAgICBtb2QgPSAnLicuam9pbihtb2RzcGxpdCkKKworICAgICAgICAgICAgX19pbXBvcnRfXyhtb2QpCisgICAgICAgICAgICAjIHB5dGhvbiAyLjcgaGFzIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIHVzaW5nIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlCisgICAgICAgICAgICBtID0gc3lzLm1vZHVsZXNbbW9kXQorCisgICAgICAgICAgICBmbiA9IGdldGF0dHIobSwgbW9kX2ZuKQorICAgICAgICAgICAgaWYgbm90IGZuOgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoImNvdWxkbid0IGxvYWQgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciAnZ2VuJyBwcm9wZXJ0eSAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5lbm8sIHNlbGYubGluZSkKKyAgICAgICAgICAgIHJldHZhbCA9IGZuKGNvbnRleHQpCisgICAgICAgICAgICBpZiBub3QgcmV0dmFsOgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoImZ1bmN0aW9uIHNwZWNpZmllZCBmb3IgJ2dlbicgcHJvcGVydHkgcmV0dXJuZWQgbm90aGluZyAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5lbm8sIHNlbGYubGluZSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJldHVybiByZXR2YWwKKworICAgIGRlZiBnZW5fY2hvaWNlc19zdHIoc2VsZiwgY2hvaWNlcGFpcnMpOgorICAgICAgICAiIiIKKyAgICAgICAgR2VuZXJhdGUgYSBudW1iZXJlZCBsaXN0IG9mIGNob2ljZXMgZnJvbSBhIGxpc3Qgb2YgY2hvaWNlcGFpcnMKKyAgICAgICAgZm9yIGRpc3BsYXkgdG8gdGhlIHVzZXIuCisgICAgICAgICIiIgorICAgICAgICBjaG9pY2VzX3N0ciA9ICIiCisKKyAgICAgICAgZm9yIGksIGNob2ljZXBhaXIgaW4gZW51bWVyYXRlKGNob2ljZXBhaXJzKToKKyAgICAgICAgICAgIGNob2ljZXNfc3RyICs9ICJcdCIgKyBzdHIoaSArIDEpICsgIikgIiArIGNob2ljZXBhaXJbMV0gKyAiXG4iCisKKyAgICAgICAgcmV0dXJuIGNob2ljZXNfc3RyCisKKyAgICBkZWYgZ2VuX2Nob2ljZXNfdmFsX3N0cihzZWxmLCBjaG9pY2VwYWlycyk6CisgICAgICAgICIiIgorICAgICAgICBHZW5lcmF0ZSBhbiBhcnJheSBvZiBjaG9pY2UgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisgICAgICAgIG51bWJlcmVkIGxpc3QgZ2VuZXJhdGVkIGJ5IGdlbl9jaG9pY2VzX3N0cigpLgorICAgICAgICAiIiIKKyAgICAgICAgY2hvaWNlc192YWxfbGlzdCA9ICJbIgorCisgICAgICAgIGZvciBpLCBjaG9pY2VwYWlyIGluIGVudW1lcmF0ZShjaG9pY2VwYWlycyk6CisgICAgICAgICAgICBjaG9pY2VzX3ZhbF9saXN0ICs9ICJcIiIgKyBjaG9pY2VwYWlyWzBdICsgIlwiLCIKKyAgICAgICAgY2hvaWNlc192YWxfbGlzdCArPSAiXSIKKworICAgICAgICByZXR1cm4gY2hvaWNlc192YWxfbGlzdAorCisgICAgZGVmIGdlbl9jaG9pY2VzX3ZhbF9saXN0KHNlbGYsIGNob2ljZXBhaXJzKToKKyAgICAgICAgIiIiCisgICAgICAgIEdlbmVyYXRlIGFuIGFycmF5IG9mIGNob2ljZSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUKKyAgICAgICAgbnVtYmVyZWQgbGlzdCBnZW5lcmF0ZWQgYnkgZ2VuX2Nob2ljZXNfc3RyKCkuCisgICAgICAgICIiIgorICAgICAgICBjaG9pY2VzX3ZhbF9saXN0ID0gW10KKworICAgICAgICBmb3IgaSwgY2hvaWNlcGFpciBpbiBlbnVtZXJhdGUoY2hvaWNlcGFpcnMpOgorICAgICAgICAgICAgY2hvaWNlc192YWxfbGlzdC5hcHBlbmQoY2hvaWNlcGFpclswXSkKKworICAgICAgICByZXR1cm4gY2hvaWNlc192YWxfbGlzdAorCisgICAgZGVmIGdlbl9jaG9pY2VzX2xpc3Qoc2VsZiwgY29udGV4dCA9IE5vbmUsIGNoZWNrbGlzdCA9IEZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIEdlbmVyYXRlIGFuIGFycmF5IG9mIGNob2ljZSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUKKyAgICAgICAgbnVtYmVyZWQgbGlzdCBnZW5lcmF0ZWQgYnkgZ2VuX2Nob2ljZXNfc3RyKCkuCisgICAgICAgICIiIgorICAgICAgICBjaG9pY2VzID0gc2VsZi5leGVjX2xpc3RnZW5fZm4oY29udGV4dCkKKyAgICAgICAgaWYgY2hvaWNlczoKKyAgICAgICAgICAgIGlmIGxlbihjaG9pY2VzKSA9PSAwOgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoIk5vIGVudHJpZXMgYXZhaWxhYmxlIGZvciBpbnB1dCBsaXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZW5vLCBzZWxmLmxpbmUpCisgICAgICAgICAgICBjaG9pY2VwYWlycyA9IHNlbGYuZ2VuX2RlZ2VuZXJhdGVfY2hvaWNlcGFpcl9saXN0KGNob2ljZXMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBsZW4oc2VsZi5jaG9pY2VzKSA9PSAwOgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoIk5vIGVudHJpZXMgYXZhaWxhYmxlIGZvciBpbnB1dCBsaXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZW5vLCBzZWxmLmxpbmUpCisgICAgICAgICAgICBjaG9pY2VwYWlycyA9IHNlbGYuZ2VuX2Nob2ljZXBhaXJfbGlzdCgpCisgICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuIGNob2ljZXBhaXJzCisKKyAgICBkZWYgZ2VuX2Nob2ljZXMoc2VsZiwgY29udGV4dCA9IE5vbmUsIGNoZWNrbGlzdCA9IEZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIEdlbmVyYXRlIGFuIGFycmF5IG9mIGNob2ljZSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUKKyAgICAgICAgbnVtYmVyZWQgbGlzdCBnZW5lcmF0ZWQgYnkgZ2VuX2Nob2ljZXNfc3RyKCksIGRpc3BsYXkgaXQgdG8KKyAgICAgICAgdGhlIHVzZXIsIGFuZCBwcm9jZXNzIHRoZSByZXN1bHQuCisgICAgICAgICIiIgorICAgICAgICBtc2cgPSBzZWxmLnByb3BzWyJtc2ciXQorICAgICAgICBpZiBub3QgbXNnOgorICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gaW5wdXQgJ21zZycgcHJvcGVydHkgZm91bmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubywgc2VsZi5saW5lKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlZmF1bHRfY2hvaWNlID0gc2VsZi5wcm9wc1siZGVmYXVsdCJdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGRlZmF1bHRfY2hvaWNlID0gIiIKKworICAgICAgICBtc2cgKz0gIiBbZGVmYXVsdDogIiArIGRlZmF1bHRfY2hvaWNlICsgIl0iCisKKyAgICAgICAgY2hvaWNlcGFpcnMgPSBzZWxmLmdlbl9jaG9pY2VzX2xpc3QoY29udGV4dCwgY2hlY2tsaXN0KQorCisgICAgICAgIGNob2ljZXNfc3RyID0gc2VsZi5nZW5fY2hvaWNlc19zdHIoY2hvaWNlcGFpcnMpCisgICAgICAgIGNob2ljZXNfdmFsX2xpc3QgPSBzZWxmLmdlbl9jaG9pY2VzX3ZhbF9saXN0KGNob2ljZXBhaXJzKQorICAgICAgICBpZiBjaGVja2xpc3Q6CisgICAgICAgICAgICBjaG9pY2V2YWwgPSBkZWZhdWx0KGZpbmRfY2hvaWNldmFscyhyYXdfaW5wdXQobXNnICsgIlxuIiArIGNob2ljZXNfc3RyKSwgY2hvaWNlc192YWxfbGlzdCksIGRlZmF1bHRfY2hvaWNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2hvaWNldmFsID0gZGVmYXVsdChmaW5kX2Nob2ljZXZhbChyYXdfaW5wdXQobXNnICsgIlxuIiArIGNob2ljZXNfc3RyKSwgY2hvaWNlc192YWxfbGlzdCksIGRlZmF1bHRfY2hvaWNlKQorCisgICAgICAgIHJldHVybiBjaG9pY2V2YWwKKworCitkZWYgZmluZF9jaG9pY2V2YWwoY2hvaWNlX3N0ciwgY2hvaWNlX2xpc3QpOgorICAgICIiIgorICAgIFRha2UgbnVtYmVyIGFzIHN0cmluZyBhbmQgcmV0dXJuIHZhbCBzdHJpbmcgZnJvbSBjaG9pY2VfbGlzdCwKKyAgICBlbXB0eSBzdHJpbmcgaWYgb29iLiAgY2hvaWNlX2xpc3QgaXMgYSBzaW1wbGUgcHl0aG9uIGxpc3QuCisgICAgIiIiCisgICAgY2hvaWNlX3ZhbCA9ICIiCisKKyAgICB0cnk6CisgICAgICAgIGNob2ljZV9pZHggPSBpbnQoY2hvaWNlX3N0cikKKyAgICAgICAgaWYgY2hvaWNlX2lkeCA8PSBsZW4oY2hvaWNlX2xpc3QpOgorICAgICAgICAgICAgY2hvaWNlX2lkeCAtPSAxCisgICAgICAgICAgICBjaG9pY2VfdmFsID0gY2hvaWNlX2xpc3RbY2hvaWNlX2lkeF0KKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgcGFzcworCisgICAgcmV0dXJuIGNob2ljZV92YWwKKworCitkZWYgZmluZF9jaG9pY2V2YWxzKGNob2ljZV9zdHIsIGNob2ljZV9saXN0KToKKyAgICAiIiIKKyAgICBUYWtlIG51bWJlcnMgYXMgc3BhY2Utc2VwYXJhdGVkIHN0cmluZyBhbmQgcmV0dXJuIHZhbHMgbGlzdCBmcm9tCisgICAgY2hvaWNlX2xpc3QsIGVtcHR5IGxpc3QgaWYgb29iLiAgY2hvaWNlX2xpc3QgaXMgYSBzaW1wbGUgcHl0aG9uCisgICAgbGlzdC4KKyAgICAiIiIKKyAgICBjaG9pY2VfdmFscyA9IFtdCisKKyAgICBjaG9pY2VzID0gY2hvaWNlX3N0ci5zcGxpdCgpCisgICAgZm9yIGNob2ljZSBpbiBjaG9pY2VzOgorICAgICAgICBjaG9pY2VfdmFscy5hcHBlbmQoZmluZF9jaG9pY2V2YWwoY2hvaWNlLCBjaG9pY2VfbGlzdCkpCisKKyAgICByZXR1cm4gY2hvaWNlX3ZhbHMKKworCitkZWYgZGVmYXVsdChpbnB1dF9zdHIsIG5hbWUpOgorICAgICIiIgorICAgIFJldHVybiBkZWZhdWx0IGlmIG5vIGlucHV0X3N0ciwgb3RoZXJ3aXNlIHN0cmlwcGVkIGlucHV0X3N0ci4KKyAgICAiIiIKKyAgICBpZiBub3QgaW5wdXRfc3RyOgorICAgICAgICByZXR1cm4gbmFtZQorCisgICAgcmV0dXJuIGlucHV0X3N0ci5zdHJpcCgpCisKKworZGVmIHZlcmlmeV9naXRfcmVwbyhnaXR1cmwpOgorICAgICIiIgorICAgIFZlcmlmeSB0aGF0IHRoZSBnaXR1cmwgcGFzc2VkIGluIGNhbiBiZSBjb25uZWN0ZWQgdG8uICBUaGlzIGNhbiBiZQorICAgIHVzZWQgYXMgYSBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZ2l2ZW4gcmVwbyBhbmQvb3IgYmFzaWMKKyAgICBnaXQgcmVtb3RlIGNvbm5lY3Rpdml0eS4KKworICAgIFJldHVybnMgVHJ1ZSBpZiB0aGUgY29ubmVjdGlvbiB3YXMgc3VjY2Vzc2Z1bCwgZmFscyBvdGhlcndpc2UKKyAgICAiIiIKKyAgICBpZiBub3QgZ2l0dXJsOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGdpdGNtZCA9ICJnaXQgbHMtcmVtb3RlICVzID4gL2Rldi9udWxsIDI+JjEiICUgKGdpdHVybCkKKyAgICByYyA9IHN1YnByb2Nlc3MuY2FsbChnaXRjbWQsIHNoZWxsPVRydWUpCisgICAgaWYgcmMgPT0gMDoKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIHJldHVybiBGYWxzZQorCisKK2RlZiBnZXRfdmVyaWZpZWRfZ2l0X3JlcG8oaW5wdXRfc3RyLCBuYW1lKToKKyAgICAiIiIKKyAgICBSZXR1cm4gZ2l0IHJlcG8gaWYgdmVyaWZpZWQsIG90aGVyd2lzZSBsb29wIGZvcmV2ZXIgYXNraW5nIHVzZXIKKyAgICBmb3IgZmlsZW5hbWUuCisgICAgIiIiCisgICAgbXNnID0gaW5wdXRfc3RyLnN0cmlwKCkgKyAiICIKKworICAgIGdpdHVybCA9IGRlZmF1bHQocmF3X2lucHV0KG1zZyksIG5hbWUpCisKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBpZiB2ZXJpZnlfZ2l0X3JlcG8oZ2l0dXJsKToKKyAgICAgICAgICAgIHJldHVybiBnaXR1cmwKKyAgICAgICAgZ2l0dXJsID0gZGVmYXVsdChyYXdfaW5wdXQobXNnKSwgbmFtZSkKKworCitkZWYgZ2V0X3ZlcmlmaWVkX2ZpbGUoaW5wdXRfc3RyLCBuYW1lLCBmaWxlbmFtZV9jYW5fYmVfbnVsbCk6CisgICAgIiIiCisgICAgUmV0dXJuIGZpbGVuYW1lIGlmIHRoZSBmaWxlIGV4aXN0cywgb3RoZXJ3aXNlIGxvb3AgZm9yZXZlciBhc2tpbmcKKyAgICB1c2VyIGZvciBmaWxlbmFtZS4KKyAgICAiIiIKKyAgICBtc2cgPSBpbnB1dF9zdHIuc3RyaXAoKSArICIgIgorCisgICAgZmlsZW5hbWUgPSBkZWZhdWx0KHJhd19pbnB1dChtc2cpLCBuYW1lKQorCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgaWYgbm90IGZpbGVuYW1lIGFuZCBmaWxlbmFtZV9jYW5fYmVfbnVsbDoKKyAgICAgICAgICAgIHJldHVybiBmaWxlbmFtZQorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmaWxlbmFtZSk6CisgICAgICAgICAgICByZXR1cm4gZmlsZW5hbWUKKyAgICAgICAgZmlsZW5hbWUgPSBkZWZhdWx0KHJhd19pbnB1dChtc2cpLCBuYW1lKQorCisKK2RlZiByZXBsYWNlX2ZpbGUocmVwbGFjZV90aGlzLCB3aXRoX3RoaXMpOgorICAgICIiIgorICAgIFJlcGxhY2UgdGhlIGdpdmVuIGZpbGUgd2l0aCB0aGUgY29udGVudHMgb2YgZmlsZW5hbWUsIHJldGFpbmluZworICAgIHRoZSBvcmlnaW5hbCBmaWxlbmFtZS4KKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgIHJlcGxhY2VfdGhpcy5jbG9zZSgpCisgICAgICAgIHNodXRpbC5jb3B5KHdpdGhfdGhpcywgcmVwbGFjZV90aGlzLm5hbWUpCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHBhc3MKKworCitkZWYgYm9vbGVhbihpbnB1dF9zdHIsIG5hbWUpOgorICAgICIiIgorICAgIFJldHVybiBsb3dlcmNhc2UgdmVyc2lvbiBvZiBmaXJzdCBjaGFyIGluIHN0cmluZywgb3IgdmFsdWUgaW4gbmFtZS4KKyAgICAiIiIKKyAgICBpZiBub3QgaW5wdXRfc3RyOgorICAgICAgICByZXR1cm4gbmFtZQorCisgICAgc3RyID0gaW5wdXRfc3RyLmxvd2VyKCkuc3RyaXAoKQorICAgIGlmIHN0ciBhbmQgc3RyWzBdID09ICJ5IiBvciBzdHJbMF0gPT0gIm4iOgorICAgICAgICByZXR1cm4gc3RyWzBdCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIG5hbWUKKworCitkZWYgc3RyaXBfYmFzZShpbnB1dF9zdHIpOgorICAgICIiIgorICAgIHN0cmlwICcvYmFzZScgb2ZmIHRoZSBlbmQgb2YgaW5wdXRfc3RyLCBzbyB3ZSBjYW4gdXNlICdiYXNlJyBpbgorICAgIHRoZSBicmFuY2ggbmFtZXMgd2UgcHJlc2VudCB0byB0aGUgdXNlci4KKyAgICAiIiIKKyAgICBpZiBpbnB1dF9zdHIgYW5kIGlucHV0X3N0ci5lbmRzd2l0aCgiL2Jhc2UiKToKKyAgICAgICAgcmV0dXJuIGlucHV0X3N0cls6LWxlbigiL2Jhc2UiKV0KKyAgICByZXR1cm4gaW5wdXRfc3RyLnN0cmlwKCkKKworCitkZWZlcnJlZF9jaG9pY2VzID0ge30KKworZGVmIGdlbl9jaG9pY2VzX2RlZmVyKGlucHV0X2xpbmUsIGNvbnRleHQsIGNoZWNrbGlzdCA9IEZhbHNlKToKKyAgICAiIiIKKyAgICBTYXZlIHRoZSBjb250ZXh0IGhhc2hlZCB0aGUgbmFtZSBvZiB0aGUgaW5wdXQgaXRlbSwgd2hpY2ggd2lsbCBiZQorICAgIHBhc3NlZCB0byB0aGUgZ2VuIGZ1bmN0aW9uIGxhdGVyLgorICAgICIiIgorICAgIG5hbWUgPSBpbnB1dF9saW5lLnByb3BzWyJuYW1lIl0KKworICAgIHRyeToKKyAgICAgICAgbmFtZWFwcGVuZCA9IGlucHV0X2xpbmUucHJvcHNbIm5hbWVhcHBlbmQiXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgbmFtZWFwcGVuZCA9ICIiCisKKyAgICB0cnk6CisgICAgICAgIGJyYW5jaGVzX2Jhc2UgPSBpbnB1dF9saW5lLnByb3BzWyJicmFuY2hlc19iYXNlIl0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIGJyYW5jaGVzX2Jhc2UgPSAiIgorCisgICAgZmlsZW5hbWUgPSBpbnB1dF9saW5lLnByb3BzWyJmaWxlbmFtZSJdCisKKyAgICBjbG9zZXRhZ19zdGFydCA9IGZpbGVuYW1lLmZpbmQoQ0xPU0VfVEFHKQorCisgICAgaWYgY2xvc2V0YWdfc3RhcnQgIT0gLTE6CisgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWVbY2xvc2V0YWdfc3RhcnQgKyBsZW4oQ0xPU0VfVEFHKTpdCisKKyAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN0cmlwKCkKKyAgICBmaWxlbmFtZSA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzBdCisKKyAgICBjYXB0dXJlZF9jb250ZXh0ID0gY2FwdHVyZV9jb250ZXh0KGNvbnRleHQpCisgICAgY29udGV4dFsiZmlsZW5hbWUiXSA9IGZpbGVuYW1lCisgICAgY2FwdHVyZWRfY29udGV4dFsiZmlsZW5hbWUiXSA9IGZpbGVuYW1lCisgICAgY29udGV4dFsibmFtZWFwcGVuZCJdID0gbmFtZWFwcGVuZAorICAgIGNhcHR1cmVkX2NvbnRleHRbIm5hbWVhcHBlbmQiXSA9IG5hbWVhcHBlbmQKKyAgICBjb250ZXh0WyJicmFuY2hlc19iYXNlIl0gPSBicmFuY2hlc19iYXNlCisgICAgY2FwdHVyZWRfY29udGV4dFsiYnJhbmNoZXNfYmFzZSJdID0gYnJhbmNoZXNfYmFzZQorCisgICAgZGVmZXJyZWRfY2hvaWNlID0gKGlucHV0X2xpbmUsIGNhcHR1cmVkX2NvbnRleHQsIGNoZWNrbGlzdCkKKyAgICBrZXkgPSBuYW1lICsgIl8iICsgZmlsZW5hbWUgKyAiXyIgKyBuYW1lYXBwZW5kCisgICAgZGVmZXJyZWRfY2hvaWNlc1trZXldID0gZGVmZXJyZWRfY2hvaWNlCisKKworZGVmIGludm9rZV9kZWZlcnJlZF9jaG9pY2VzKG5hbWUpOgorICAgICIiIgorICAgIEludm9rZSB0aGUgY2hvaWNlIGdlbmVyYXRpb24gZnVuY3Rpb24gdXNpbmcgdGhlIGNvbnRleHQgaGFzaGVkIGJ5CisgICAgJ25hbWUnLgorICAgICIiIgorICAgIGRlZmVycmVkX2Nob2ljZSA9IGRlZmVycmVkX2Nob2ljZXNbbmFtZV0KKyAgICBpbnB1dF9saW5lID0gZGVmZXJyZWRfY2hvaWNlWzBdCisgICAgY29udGV4dCA9IGRlZmVycmVkX2Nob2ljZVsxXQorICAgIGNoZWNrbGlzdCA9IGRlZmVycmVkX2Nob2ljZVsyXQorCisgICAgY29udGV4dFsibmFtZSJdID0gbmFtZQorCisgICAgY2hvaWNlcyA9IGlucHV0X2xpbmUuZ2VuX2Nob2ljZXMoY29udGV4dCwgY2hlY2tsaXN0KQorCisgICAgcmV0dXJuIGNob2ljZXMKKworCitjbGFzcyBDaG9pY2VsaXN0SW5wdXRMaW5lKExpc3RJbnB1dExpbmUpOgorICAgICIiIgorICAgIEJhc2UgY2xhc3MgZm9yIGNob2ljZWxpc3QgSW5wdXQgbGluZXMuCisgICAgcHJvcHM6CisgICAgICAgIG5hbWU6IGV4YW1wbGUgLSAieHNlcnZlcl9jaG9pY2UiCisgICAgICAgIG1zZzogIGV4YW1wbGUgLSAiUGxlYXNlIHNlbGVjdCBhbiB4c2VydmVyIGZvciB0aGlzIG1hY2hpbmUiCisgICAgcmVzdWx0OgorICAgICAgICBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgc3BlY2lmaWVkIGJ5ICduYW1lJyB0byB3aGljaGV2ZXIgQ2hvaWNlIHdhcyBjaG9zZW4KKyAgICAgICAgZXhhbXBsZSAtIHhzZXJ2ZXJfY2hvaWNlID0gInhzZXJ2ZXJfdmVzYSIKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKToKKyAgICAgICAgTGlzdElucHV0TGluZS5fX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pCisKKyAgICBkZWYgZ2VuKHNlbGYsIGNvbnRleHQgPSBOb25lKToKKyAgICAgICAgSW5wdXRMaW5lLmdlbihzZWxmLCBjb250ZXh0KQorCisgICAgICAgIGdlbl9jaG9pY2VzX2RlZmVyKHNlbGYsIGNvbnRleHQpCisgICAgICAgIG5hbWUgPSBzZWxmLnByb3BzWyJuYW1lIl0KKyAgICAgICAgbmFtZWFwcGVuZCA9IGNvbnRleHRbIm5hbWVhcHBlbmQiXQorICAgICAgICBmaWxlbmFtZSA9IGNvbnRleHRbImZpbGVuYW1lIl0KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWZhdWx0X2Nob2ljZSA9IHNlbGYucHJvcHNbImRlZmF1bHQiXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBkZWZhdWx0X2Nob2ljZSA9ICIiCisKKyAgICAgICAgbGluZSA9IG5hbWUgKyAiID0gZGVmYXVsdChpbnZva2VfZGVmZXJyZWRfY2hvaWNlcyhcIiIgKyBuYW1lICsgIl8iICsgZmlsZW5hbWUgKyAiXyIgKyBuYW1lYXBwZW5kICsgIlwiKSwgXCIiICsgZGVmYXVsdF9jaG9pY2UgKyAiXCIpIgorCisgICAgICAgIHJldHVybiBsaW5lCisKKworY2xhc3MgTGlzdFZhbElucHV0TGluZShJbnB1dExpbmUpOgorICAgICIiIgorICAgIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGNob2ljZSBhbmQgY2hlY2tib3ggSW5wdXQgbGluZXMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubyk6CisgICAgICAgIElucHV0TGluZS5fX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi52YWwgPSBzZWxmLnByb3BzWyJ2YWwiXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJObyBpbnB1dCAndmFsJyBwcm9wZXJ0eSBmb3VuZCIsIHNlbGYubGluZW5vLCBzZWxmLmxpbmUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5kZXNjID0gc2VsZi5wcm9wc1sibXNnIl0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gaW5wdXQgJ21zZycgcHJvcGVydHkgZm91bmQiLCBzZWxmLmxpbmVubywgc2VsZi5saW5lKQorCisKK2NsYXNzIENob2ljZUlucHV0TGluZShMaXN0VmFsSW5wdXRMaW5lKToKKyAgICAiIiIKKyAgICBCYXNlIGNsYXNzIGZvciBjaG9pY2VsaXN0IGl0ZW0gSW5wdXQgbGluZXMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubyk6CisgICAgICAgIExpc3RWYWxJbnB1dExpbmUuX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKQorCisgICAgZGVmIGdlbihzZWxmLCBjb250ZXh0ID0gTm9uZSk6CisgICAgICAgIHJldHVybiBOb25lCisKKworY2xhc3MgQ2hlY2tsaXN0SW5wdXRMaW5lKExpc3RJbnB1dExpbmUpOgorICAgICIiIgorICAgIEJhc2UgY2xhc3MgZm9yIGNoZWNrbGlzdCBJbnB1dCBsaW5lcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKToKKyAgICAgICAgTGlzdElucHV0TGluZS5fX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pCisKKyAgICBkZWYgZ2VuKHNlbGYsIGNvbnRleHQgPSBOb25lKToKKyAgICAgICAgSW5wdXRMaW5lLmdlbihzZWxmLCBjb250ZXh0KQorCisgICAgICAgIGdlbl9jaG9pY2VzX2RlZmVyKHNlbGYsIGNvbnRleHQsIFRydWUpCisgICAgICAgIG5hbWUgPSBzZWxmLnByb3BzWyJuYW1lIl0KKyAgICAgICAgbmFtZWFwcGVuZCA9IGNvbnRleHRbIm5hbWVhcHBlbmQiXQorICAgICAgICBmaWxlbmFtZSA9IGNvbnRleHRbImZpbGVuYW1lIl0KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWZhdWx0X2Nob2ljZSA9IHNlbGYucHJvcHNbImRlZmF1bHQiXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBkZWZhdWx0X2Nob2ljZSA9ICIiCisKKyAgICAgICAgbGluZSA9IG5hbWUgKyAiID0gZGVmYXVsdChpbnZva2VfZGVmZXJyZWRfY2hvaWNlcyhcIiIgKyBuYW1lICsgIl8iICsgZmlsZW5hbWUgKyAiXyIgKyBuYW1lYXBwZW5kICsgIlwiKSwgXCIiICsgZGVmYXVsdF9jaG9pY2UgKyAiXCIpIgorCisgICAgICAgIHJldHVybiBsaW5lCisKKworY2xhc3MgQ2hlY2tJbnB1dExpbmUoTGlzdFZhbElucHV0TGluZSk6CisgICAgIiIiCisgICAgQmFzZSBjbGFzcyBmb3IgY2hlY2tsaXN0IGl0ZW0gSW5wdXQgbGluZXMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubyk6CisgICAgICAgIExpc3RWYWxJbnB1dExpbmUuX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKQorCisgICAgZGVmIGdlbihzZWxmLCBjb250ZXh0ID0gTm9uZSk6CisgICAgICAgIHJldHVybiBOb25lCisKKworZGlybmFtZV9zdWJzdGl0dXRpb25zID0ge30KKworY2xhc3MgU3Vic3RyYXRlQmFzZShvYmplY3QpOgorICAgICIiIgorICAgIEJhc2UgY2xhc3MgZm9yIGJvdGggZXhwYW5kZWQgYW5kIHVuZXhwYW5kZWQgZmlsZSBhbmQgZGlyIGNvbnRhaW5lcgorICAgIG9iamVjdHMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBmaWxlYmFzZSwgb3V0X2ZpbGViYXNlKToKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYuZmlsZWJhc2UgPSBmaWxlYmFzZQorICAgICAgICBzZWxmLnRyYW5zbGF0ZWRfZmlsZW5hbWUgPSBmaWxlbmFtZQorICAgICAgICBzZWxmLm91dF9maWxlYmFzZSA9IG91dF9maWxlYmFzZQorICAgICAgICBzZWxmLnJhd19saW5lcyA9IFtdCisgICAgICAgIHNlbGYuZXhwYW5kZWRfbGluZXMgPSBbXQorICAgICAgICBzZWxmLnByZXZfY2hvaWNlbGlzdCA9IE5vbmUKKworICAgIGRlZiBwYXJzZV9lcnJvcihzZWxmLCBtc2csIGxpbmVubywgbGluZSk6CisgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiJXM6IFslczogJWRdOiAlcyIgJSAobXNnLCBzZWxmLmZpbGVuYW1lLCBsaW5lbm8sIGxpbmUpKQorCisgICAgZGVmIGV4cGFuZF9pbnB1dF90YWcoc2VsZiwgdGFnLCBsaW5lbm8pOgorICAgICAgICAiIiIKKyAgICAgICAgSW5wdXQgdGFncyBjb25zaXN0IG9mIHRoZSB3b3JkICdpbnB1dCcgYXQgdGhlIGJlZ2lubmluZywKKyAgICAgICAgZm9sbG93ZWQgYnkgbmFtZTp2YWx1ZSBwcm9wZXJ0eSBwYWlycyB3aGljaCBhcmUgY29udmVydGVkIGludG8KKyAgICAgICAgYSBkaWN0aW9uYXJ5LgorICAgICAgICAiIiIKKyAgICAgICAgcHJvcHN0ciA9IHRhZ1tsZW4oSU5QVVRfVEFHKTpdCisKKyAgICAgICAgcHJvcHMgPSBkaWN0KHByb3Auc3BsaXQoIjoiLCAxKSBmb3IgcHJvcCBpbiBzaGxleC5zcGxpdChwcm9wc3RyKSkKKyAgICAgICAgcHJvcHNbImZpbGVuYW1lIl0gPSBzZWxmLmZpbGVuYW1lCisKKyAgICAgICAgaW5wdXRfdHlwZSA9IHByb3BzW0lOUFVUX1RZUEVfUFJPUEVSVFldCisgICAgICAgIGlmIG5vdCBwcm9wc1tJTlBVVF9UWVBFX1BST1BFUlRZXToKKyAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoIk5vIGlucHV0ICd0eXBlJyBwcm9wZXJ0eSBmb3VuZCIsIGxpbmVubywgdGFnKQorCisgICAgICAgIGlmIGlucHV0X3R5cGUgPT0gImJvb2xlYW4iOgorICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW5JbnB1dExpbmUocHJvcHMsIHRhZywgbGluZW5vKQorICAgICAgICBpZiBpbnB1dF90eXBlID09ICJlZGl0IjoKKyAgICAgICAgICAgIHJldHVybiBFZGl0Qm94SW5wdXRMaW5lKHByb3BzLCB0YWcsIGxpbmVubykKKyAgICAgICAgaWYgaW5wdXRfdHlwZSA9PSAiZWRpdC1naXQtcmVwbyI6CisgICAgICAgICAgICByZXR1cm4gR2l0UmVwb0VkaXRCb3hJbnB1dExpbmUocHJvcHMsIHRhZywgbGluZW5vKQorICAgICAgICBpZiBpbnB1dF90eXBlID09ICJlZGl0LWZpbGUiOgorICAgICAgICAgICAgcmV0dXJuIEZpbGVFZGl0Qm94SW5wdXRMaW5lKHByb3BzLCB0YWcsIGxpbmVubykKKyAgICAgICAgZWxpZiBpbnB1dF90eXBlID09ICJjaG9pY2VsaXN0IjoKKyAgICAgICAgICAgIHNlbGYucHJldl9jaG9pY2VsaXN0ID0gQ2hvaWNlbGlzdElucHV0TGluZShwcm9wcywgdGFnLCBsaW5lbm8pCisgICAgICAgICAgICByZXR1cm4gc2VsZi5wcmV2X2Nob2ljZWxpc3QKKyAgICAgICAgZWxpZiBpbnB1dF90eXBlID09ICJjaG9pY2UiOgorICAgICAgICAgICAgaWYgbm90IHNlbGYucHJldl9jaG9pY2VsaXN0OgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoIkZvdW5kICdjaG9pY2UnIGlucHV0IHRhZyBidXQgbm8gcHJldmlvdXMgY2hvaWNlbGlzdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lbm8sIHRhZykKKyAgICAgICAgICAgIGNob2ljZSA9IENob2ljZUlucHV0TGluZShwcm9wcywgdGFnLCBsaW5lbm8pCisgICAgICAgICAgICBzZWxmLnByZXZfY2hvaWNlbGlzdC5jaG9pY2VzLmFwcGVuZChjaG9pY2UpCisgICAgICAgICAgICByZXR1cm4gY2hvaWNlCisgICAgICAgIGVsaWYgaW5wdXRfdHlwZSA9PSAiY2hlY2tsaXN0IjoKKyAgICAgICAgICAgIHJldHVybiBDaGVja2xpc3RJbnB1dExpbmUocHJvcHMsIHRhZywgbGluZW5vKQorICAgICAgICBlbGlmIGlucHV0X3R5cGUgPT0gImNoZWNrIjoKKyAgICAgICAgICAgIHJldHVybiBDaGVja0lucHV0TGluZShwcm9wcywgdGFnLCBsaW5lbm8pCisKKyAgICBkZWYgZXhwYW5kX2Fzc2lnbm1lbnRfdGFnKHNlbGYsIHN0YXJ0LCBsaW5lLCBsaW5lbm8pOgorICAgICAgICAiIiIKKyAgICAgICAgRXhwYW5kIGFsbCB0YWdzIGluIGEgbGluZS4KKyAgICAgICAgIiIiCisgICAgICAgIGV4cGFuZGVkX2xpbmUgPSBBc3NpZ25tZW50TGluZShsaW5lLnJzdHJpcCgpKQorCisgICAgICAgIHdoaWxlIHN0YXJ0ICE9IC0xOgorICAgICAgICAgICAgZW5kID0gbGluZS5maW5kKENMT1NFX1RBRywgc3RhcnQpCisgICAgICAgICAgICBpZiBlbmQgPT0gLTE6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gY2xvc2UgdGFnIGZvdW5kIGZvciBhc3NpZ25tZW50IHRhZyIsIGxpbmVubywgbGluZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmFtZSA9IGxpbmVbc3RhcnQgKyBsZW4oQVNTSUdOX1RBRyk6ZW5kXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgZXhwYW5kZWRfbGluZS5hZGRfYXNzaWdubWVudChzdGFydCwgZW5kICsgbGVuKENMT1NFX1RBRyksIG5hbWUpCisgICAgICAgICAgICAgICAgc3RhcnQgPSBsaW5lLmZpbmQoQVNTSUdOX1RBRywgZW5kKQorCisgICAgICAgIHJldHVybiBleHBhbmRlZF9saW5lCisKKyAgICBkZWYgZXhwYW5kX3RhZyhzZWxmLCBsaW5lLCBsaW5lbm8pOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyBhIHByb2Nlc3NlZCB0YWcgbGluZSwgb3IgTm9uZSBpZiB0aGVyZSB3YXMgbm8gdGFnCisKKyAgICAgICAgVGhlIHJ1bGVzIGZvciB0YWdzIGFyZSB2ZXJ5IHNpbXBsZToKKyAgICAgICAgICAgIC0gTm8gbmVzdGVkIHRhZ3MKKyAgICAgICAgICAgIC0gVGFncyBzdGFydCB3aXRoIHt7IGFuZCBlbmQgd2l0aCB9fQorICAgICAgICAgICAgLSBBbiBhc3NpZ24gdGFnLCB7ez0sIGNhbiBhcHBlYXIgYW55d2hlcmUgYW5kIHdpbGwKKyAgICAgICAgICAgICAgYmUgcmVwbGFjZWQgd2l0aCB3aGF0IHRoZSBhc3NpZ25tZW50IGV2YWx1YXRlcyB0bworICAgICAgICAgICAgLSBBbnkgb3RoZXIgdGFnIG9jY3VwaWVzIHRoZSB3aG9sZSBsaW5lIGl0IGlzIG9uCisgICAgICAgICAgICAgICAgLSBpZiB0aGVyZSdzIGFueXRoaW5nIGVsc2Ugb24gdGhlIHRhZyBsaW5lLCBpdCdzIGFuIGVycm9yCisgICAgICAgICAgICAgICAgLSBpZiBpdCBzdGFydHMgd2l0aCAnaW5wdXQnLCBpdCdzIGFuIGlucHV0IHRhZyBhbmQKKyAgICAgICAgICAgICAgICAgIHdpbGwgb25seSBiZSB1c2VkIGZvciBwcm9tcHRpbmcgYW5kIHNldHRpbmcgdmFyaWFibGVzCisgICAgICAgICAgICAgICAgLSBhbnl0aGluZyBlbHNlIGlzIHN0cmFpZ2h0IFB5dGhvbgorICAgICAgICAgICAgICAgIC0gdGFncyBhcmUgaW4gZWZmZWN0IG9ubHkgdW50aWwgdGhlIG5leHQgYmxhbmsgbGluZSBvciB0YWcgb3IgJ3Bhc3MnIHRhZworICAgICAgICAgICAgICAgIC0gd2UgZG9uJ3QgaGF2ZSBpbmRlbnRhdGlvbiBpbiB0YWdzLCBidXQgd2UgbmVlZCBzb21lIHdheSB0byBlbmQgYSBibG9jaworICAgICAgICAgICAgICAgICAgZm9yY2VmdWxseSB3aXRob3V0IGJsYW5rIGxpbmVzIG9yIG90aGVyIHRhZ3MgLSB0aGF0J3MgdGhlICdwYXNzJyB0YWcKKyAgICAgICAgICAgICAgICAtIHRvZG86IGltcGxlbWVudCBwYXNzIHRhZworICAgICAgICAgICAgICAgIC0gZGlyZWN0b3JpZXMgYW5kIGZpbGVuYW1lcyBjYW4gaGF2ZSB0YWdzIGFzIHdlbGwsIGJ1dCBvbmx5IGFzc2lnbm1lbnQKKyAgICAgICAgICAgICAgICAgIGFuZCAnaWYnIGNvZGUgbGluZXMKKyAgICAgICAgICAgICAgICAtIGRpcmVjdG9yaWVzIGFuZCBmaWxlbmFtZXMgYXJlIHRoZSBvbmx5IGNhc2Ugd2hlcmUgbm9ybWFsIHRhZ3MgY2FuCisgICAgICAgICAgICAgICAgICBjb2V4aXN0IHdpdGggbm9ybWFsIHRleHQgb24gdGhlIHNhbWUgJ2xpbmUnCisgICAgICAgICIiIgorICAgICAgICBzdGFydCA9IGxpbmUuZmluZChBU1NJR05fVEFHKQorICAgICAgICBpZiBzdGFydCAhPSAtMToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmV4cGFuZF9hc3NpZ25tZW50X3RhZyhzdGFydCwgbGluZSwgbGluZW5vKQorCisgICAgICAgIHN0YXJ0ID0gbGluZS5maW5kKE9QRU5fVEFHKQorICAgICAgICBpZiBzdGFydCA9PSAtMToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgZW5kID0gbGluZS5maW5kKENMT1NFX1RBRywgMCkKKyAgICAgICAgaWYgZW5kID09IC0xOgorICAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoIk5vIGNsb3NlIHRhZyBmb3VuZCBmb3Igb3BlbiB0YWciLCBsaW5lbm8sIGxpbmUpCisKKyAgICAgICAgdGFnID0gbGluZVtzdGFydCArIGxlbihPUEVOX1RBRyk6ZW5kXS5zdHJpcCgpCisKKyAgICAgICAgaWYgbm90IHRhZy5sc3RyaXAoKS5zdGFydHN3aXRoKElOUFVUX1RBRyk6CisgICAgICAgICAgICByZXR1cm4gQ29kZUxpbmUodGFnKQorCisgICAgICAgIHJldHVybiBzZWxmLmV4cGFuZF9pbnB1dF90YWcodGFnLCBsaW5lbm8pCisKKyAgICBkZWYgYXBwZW5kX3RyYW5zbGF0ZWRfZmlsZW5hbWUoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgU2ltcGx5IGFwcGVuZCBmaWxlbmFtZSB0byB0cmFuc2xhdGVkX2ZpbGVuYW1lCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnRyYW5zbGF0ZWRfZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi50cmFuc2xhdGVkX2ZpbGVuYW1lLCBmaWxlbmFtZSkKKworICAgIGRlZiBnZXRfc3Vic3RpdHV0ZWRfZmlsZV9vcl9kaXJfbmFtZShzZWxmLCBmaXJzdF9saW5lLCB0YWcpOgorICAgICAgICAiIiIKKyAgICAgICAgSWYgZmlsZSBvciBkaXIgbmFtZXMgY29udGFpbiBuYW1lIHN1YnN0aXR1dGlvbnMsIHJldHVybiB0aGUgbmFtZQorICAgICAgICB0byBzdWJzdGl0dXRlLiAgTm90ZSB0aGF0IHRoaXMgaXMganVzdCB0aGUgZmlsZSBvciBkaXJuYW1lIGFuZAorICAgICAgICBkb2Vzbid0IGluY2x1ZGUgdGhlIHBhdGguCisgICAgICAgICIiIgorICAgICAgICBmaWxlbmFtZSA9IGZpcnN0X2xpbmUuZmluZCh0YWcpCisgICAgICAgIGlmIGZpbGVuYW1lICE9IC0xOgorICAgICAgICAgICAgZmlsZW5hbWUgKz0gbGVuKHRhZykKKyAgICAgICAgc3Vic3RpdHV0ZWRfZmlsZW5hbWUgPSBmaXJzdF9saW5lW2ZpbGVuYW1lOl0uc3RyaXAoKQorICAgICAgICB0aGlzID0gc3Vic3RpdHV0ZWRfZmlsZW5hbWUuZmluZCgiIHRoaXMiKQorICAgICAgICBpZiB0aGlzICE9IC0xOgorICAgICAgICAgICAgaGVhZCwgdGFpbCA9IG9zLnBhdGguc3BsaXQoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgICAgIHN1YnN0aXR1dGVkX2ZpbGVuYW1lID0gc3Vic3RpdHV0ZWRfZmlsZW5hbWVbOnRoaXMgKyAxXSArIHRhaWwKKyAgICAgICAgICAgIGlmIHRhZyA9PSBESVJOQU1FX1RBRzogIyBnZXQgcmlkIG9mIC5ub2luc3RhbGwgaW4gZGlybmFtZQorICAgICAgICAgICAgICAgIHN1YnN0aXR1dGVkX2ZpbGVuYW1lID0gc3Vic3RpdHV0ZWRfZmlsZW5hbWUuc3BsaXQoJy4nKVswXQorCisgICAgICAgIHJldHVybiBzdWJzdGl0dXRlZF9maWxlbmFtZQorCisgICAgZGVmIGdldF9zdWJzdGl0dXRlZF9maWxlbmFtZShzZWxmLCBmaXJzdF9saW5lKToKKyAgICAgICAgIiIiCisgICAgICAgIElmIGEgZmlsZW5hbWUgY29udGFpbnMgYSBuYW1lIHN1YnN0aXR1dGlvbiwgcmV0dXJuIHRoZSBuYW1lIHRvCisgICAgICAgIHN1YnN0aXR1dGUuICBOb3RlIHRoYXQgdGhpcyBpcyBqdXN0IHRoZSBmaWxlbmFtZSBhbmQgZG9lc24ndAorICAgICAgICBpbmNsdWRlIHRoZSBwYXRoLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3N1YnN0aXR1dGVkX2ZpbGVfb3JfZGlyX25hbWUoZmlyc3RfbGluZSwgRklMRU5BTUVfVEFHKQorCisgICAgZGVmIGdldF9zdWJzdGl0dXRlZF9kaXJuYW1lKHNlbGYsIGZpcnN0X2xpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgSWYgYSBkaXJuYW1lIGNvbnRhaW5zIGEgbmFtZSBzdWJzdGl0dXRpb24sIHJldHVybiB0aGUgbmFtZSB0bworICAgICAgICBzdWJzdGl0dXRlLiAgTm90ZSB0aGF0IHRoaXMgaXMganVzdCB0aGUgZGlybmFtZSBhbmQgZG9lc24ndAorICAgICAgICBpbmNsdWRlIHRoZSBwYXRoLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3N1YnN0aXR1dGVkX2ZpbGVfb3JfZGlyX25hbWUoZmlyc3RfbGluZSwgRElSTkFNRV9UQUcpCisKKyAgICBkZWYgc3Vic3RpdHV0ZV9maWxlbmFtZShzZWxmLCBmaXJzdF9saW5lKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgdGhlIGZpbGVuYW1lIGluIGZpcnN0X2xpbmUgYW5kIGFwcGVuZCBpdCB0byB0cmFuc2xhdGVkX2ZpbGVuYW1lLgorICAgICAgICAiIiIKKyAgICAgICAgc3Vic3RpdHV0ZWRfZmlsZW5hbWUgPSBzZWxmLmdldF9zdWJzdGl0dXRlZF9maWxlbmFtZShmaXJzdF9saW5lKQorICAgICAgICBzZWxmLmFwcGVuZF90cmFuc2xhdGVkX2ZpbGVuYW1lKHN1YnN0aXR1dGVkX2ZpbGVuYW1lKTsKKworICAgIGRlZiBzdWJzdGl0dXRlX2Rpcm5hbWUoc2VsZiwgZmlyc3RfbGluZSk6CisgICAgICAgICIiIgorICAgICAgICBGaW5kIHRoZSBkaXJuYW1lIGluIGZpcnN0X2xpbmUgYW5kIGFwcGVuZCBpdCB0byB0cmFuc2xhdGVkX2ZpbGVuYW1lLgorICAgICAgICAiIiIKKyAgICAgICAgc3Vic3RpdHV0ZWRfZGlybmFtZSA9IHNlbGYuZ2V0X3N1YnN0aXR1dGVkX2Rpcm5hbWUoZmlyc3RfbGluZSkKKyAgICAgICAgc2VsZi5hcHBlbmRfdHJhbnNsYXRlZF9maWxlbmFtZShzdWJzdGl0dXRlZF9kaXJuYW1lKTsKKworICAgIGRlZiBpc19maWxlbmFtZV9zdWJzdGl0dXRpb24oc2VsZiwgbGluZSk6CisgICAgICAgICIiIgorICAgICAgICBEbyB3ZSBoYXZlIGEgZmlsZW5hbWUgc3VidXN0aXRpb24/CisgICAgICAgICIiIgorICAgICAgICBpZiBsaW5lLmZpbmQoRklMRU5BTUVfVEFHKSAhPSAtMToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGlzX2Rpcm5hbWVfc3Vic3RpdHV0aW9uKHNlbGYsIGxpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgRG8gd2UgaGF2ZSBhIGRpcm5hbWUgc3VidXN0aXRpb24/CisgICAgICAgICIiIgorICAgICAgICBpZiBsaW5lLmZpbmQoRElSTkFNRV9UQUcpICE9IC0xOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgdHJhbnNsYXRlX2Rpcm5hbWUoc2VsZiwgZmlyc3RfbGluZSk6CisgICAgICAgICIiIgorICAgICAgICBKdXN0IHNhdmUgdGhlIGZpcnN0X2xpbmUgbWFwcGVkIGJ5IGZpbGVuYW1lLiAgVGhlIGxhdGVyIHBhc3MKKyAgICAgICAgdGhyb3VnaCB0aGUgZGlyZWN0b3JpZXMgd2lsbCBsb29rIGZvciBhIGRpcm5hbWUubm9pbnN0YWxsCisgICAgICAgIG1hdGNoIGFuZCBncmFiIHRoZSBzdWJzdGl0dXRpb24gbGluZS4KKyAgICAgICAgIiIiCisgICAgICAgIGRpcm5hbWVfc3Vic3RpdHV0aW9uc1tzZWxmLmZpbGVuYW1lXSA9IGZpcnN0X2xpbmUKKworICAgIGRlZiB0cmFuc2xhdGVfZGlybmFtZXNfaW5fcGF0aChzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiCisgICAgICAgIFRyYW5zbGF0ZSBkaXJuYW1lcyBiZWxvdyB0aGlzIGZpbGUgb3IgZGlyLCBub3QgaW5jbHVkaW5nIHRhaWwuCisgICAgICAgIGRpcm5hbWVfc3Vic3RpdGl0aW9ucyBpcyBrZXllZCBvbiBhY3R1YWwgdW50cmFuc2xhdGVkIGZpbGVuYW1lcy4KKyAgICAgICAgdHJhbnNsYXRlZF9wYXRoIGNvbnRhaW5zIHRoZSBzdWJzaXRpdHV0aW9ucyBmb3IgZWFjaCBlbGVtZW50LgorICAgICAgICAiIiIKKyAgICAgICAgcmVtYWluZGVyID0gcGF0aFtsZW4oc2VsZi5maWxlYmFzZSkrMTpdCisgICAgICAgIHRyYW5zbGF0ZWRfcGF0aCA9IHVudHJhbnNsYXRlZF9wYXRoID0gc2VsZi5maWxlYmFzZQorCisgICAgICAgIHVudHJhbnNsYXRlZF9kaXJzID0gcmVtYWluZGVyLnNwbGl0KG9zLnNlcCkKKworICAgICAgICBmb3IgZGlyIGluIHVudHJhbnNsYXRlZF9kaXJzOgorICAgICAgICAgICAga2V5ID0gb3MucGF0aC5qb2luKHVudHJhbnNsYXRlZF9wYXRoLCBkaXIgKyAnLm5vaW5zdGFsbCcpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmlyc3RfbGluZSA9IGRpcm5hbWVfc3Vic3RpdHV0aW9uc1trZXldCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgdHJhbnNsYXRlZF9wYXRoID0gb3MucGF0aC5qb2luKHRyYW5zbGF0ZWRfcGF0aCwgZGlyKQorICAgICAgICAgICAgICAgIHVudHJhbnNsYXRlZF9wYXRoID0gb3MucGF0aC5qb2luKHVudHJhbnNsYXRlZF9wYXRoLCBkaXIpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHN1YnN0aXR1dGVkX2RpciA9IHNlbGYuZ2V0X3N1YnN0aXR1dGVkX2Rpcm5hbWUoZmlyc3RfbGluZSkKKyAgICAgICAgICAgIHRyYW5zbGF0ZWRfcGF0aCA9IG9zLnBhdGguam9pbih0cmFuc2xhdGVkX3BhdGgsIHN1YnN0aXR1dGVkX2RpcikKKyAgICAgICAgICAgIHVudHJhbnNsYXRlZF9wYXRoID0gb3MucGF0aC5qb2luKHVudHJhbnNsYXRlZF9wYXRoLCBkaXIpCisKKyAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZWRfcGF0aAorCisgICAgZGVmIHRyYW5zbGF0ZV9maWxlX29yX2Rpcl9uYW1lKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgT3JpZ2luYWxseSB3ZSB3ZXJlIGFsbG93ZWQgdG8gdXNlIG9wZW4vY2xvc2UvYXNzaWduIHRhZ3MgYW5kIHB5dGhvbgorICAgICAgICBjb2RlIGluIHRoZSBmaWxlbmFtZSwgd2hpY2ggZml0IGluIG5pY2VseSB3aXRoIHRoZSB3YXkgd2UKKyAgICAgICAgcHJvY2Vzc2VkIHRoZSB0ZW1wbGF0ZXMgYW5kIGdlbmVyYXRlZCBjb2RlLiAgTm93IHRoYXQgd2UgY2FuJ3QKKyAgICAgICAgZG8gdGhhdCwgd2UgbWFrZSB0aG9zZSB0YWdzIHByb3BlciBmaWxlIGNvbnRlbnRzIGFuZCBoYXZlIHRoaXMKKyAgICAgICAgcGFzcyBzdWJzdGl0dXRlIHRoZSBuaWNlIGJ1dCBub24tZnVuY3Rpb25hbCBuYW1lcyB3aXRoIHRob3NlCisgICAgICAgICdzdHJhbmdlJyBvbmVzLCBhbmQgdGhlbiBwcm9jZWVkIGFzIHVzdWFsLgorCisgICAgICAgIFNvLCBpZiBmaWxlcyBvciBtYXRjaGluZyBkaXI8Lm5vaW5zdGFsbD4gZmlsZXMgY29udGFpbgorICAgICAgICBmaWxlbmFtZSBzdWJzdGl0dXRpb25zLCB0aGlzIGZ1bmN0aW9uIHRyYW5zbGF0ZXMgdGhlbSBpbnRvIHRoZQorICAgICAgICBjb3JyZXNwb25kaW5nICdzdHJhbmdlJyBuYW1lcywgd2hpY2ggZnV0dXJlIHBhc3NlcyB3aWxsIGV4cGFuZAorICAgICAgICBhcyB0aGV5IGFsd2F5cyBoYXZlLiAgVGhlIHJlc3VsdGluZyBwYXRobmFtZSBpcyBrZXB0IGluIHRoZQorICAgICAgICBmaWxlIG9yIGRpcmVjdG9yeSdzIHRyYW5zbGF0ZWRfZmlsZW5hbWUuICBBbm90aGVyIHdheSB0byB0aGluaworICAgICAgICBhYm91dCBpdCBpcyB0aGF0IHNlbGYuZmlsZW5hbWUgaXMgdGhlIGlucHV0IGZpbGVuYW1lLCBhbmQKKyAgICAgICAgdHJhbnNsYXRlZF9maWxlbmFtZSBpcyB0aGUgb3V0cHV0IGZpbGVuYW1lIGJlZm9yZSBleHBhbnNpb24uCisgICAgICAgICIiIgorICAgICAgICAjIHJlbW92ZSBsZWFmIGZpbGUgb3IgZGlybmFtZQorICAgICAgICBoZWFkLCB0YWlsID0gb3MucGF0aC5zcGxpdChzZWxmLmZpbGVuYW1lKQorICAgICAgICB0cmFuc2xhdGVkX3BhdGggPSBzZWxmLnRyYW5zbGF0ZV9kaXJuYW1lc19pbl9wYXRoKGhlYWQpCisgICAgICAgIHNlbGYudHJhbnNsYXRlZF9maWxlbmFtZSA9IHRyYW5zbGF0ZWRfcGF0aAorCisgICAgICAgICMgVGhpcyBpcyBhIGRpcm5hbWUgLSBkb2VzIGl0IGhhdmUgYSBtYXRjaGluZyAubm9pbnN0YWxsIHdpdGgKKyAgICAgICAgIyBhIHN1YnN0aXR1dGlvbj8gIElmIHNvLCBhcHBseSB0aGUgZGlybmFtZSBzdWJzaXRpdHV0aW9uLgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoc2VsZi5maWxlbmFtZSk6CisgICAgICAgICAgICBrZXkgPSBzZWxmLmZpbGVuYW1lICsgIi5ub2luc3RhbGwiCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmlyc3RfbGluZSA9IGRpcm5hbWVfc3Vic3RpdHV0aW9uc1trZXldCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5hcHBlbmRfdHJhbnNsYXRlZF9maWxlbmFtZSh0YWlsKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi5zdWJzdGl0dXRlX2Rpcm5hbWUoZmlyc3RfbGluZSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGYgPSBvcGVuKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIGZpcnN0X2xpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgIyBUaGlzIGlzIGEgbm9ybWFsIGZpbGVuYW1lIG5vdCBuZWVkaW5nIHRyYW5zbGF0aW9uLCBqdXN0IHVzZQorICAgICAgICAjIGl0IGFzLWlzLgorICAgICAgICBpZiBub3QgZmlyc3RfbGluZSBvciBub3QgZmlyc3RfbGluZS5zdGFydHN3aXRoKCIjIik6CisgICAgICAgICAgICBzZWxmLmFwcGVuZF90cmFuc2xhdGVkX2ZpbGVuYW1lKHRhaWwpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIElmIHdlIGhhdmUgYSBmaWxlbmFtZSBzdWJzdGl0dXRpb24gKGZpcnN0IGxpbmUgaW4gdGhlIGZpbGUKKyAgICAgICAgIyBpcyBhIEZJTEVOQU1FX1RBRyBsaW5lKSBkbyB0aGUgc3Vic3RpdHV0aW9uIG5vdy4gIElmIHdlIGhhdmUKKyAgICAgICAgIyBhIGRpcm5hbWUgc3Vic3RpdHV0aW9uIChESVJOQU1FX1RBRyBpbiBkaXJuYW1lLm5vaW5zdGFsbAorICAgICAgICAjIG1ldGEtZmlsZSksIGhhc2ggaXQgc28gd2UgY2FuIGFwcGx5IGl0IHdoZW4gd2Ugc2VlIHRoZQorICAgICAgICAjIG1hdGNoaW5nIGRpcm5hbWUgbGF0ZXIuICBPdGhlcndpc2Ugd2UgaGF2ZSBhIHJlZ3VsYXIKKyAgICAgICAgIyBmaWxlbmFtZSwganVzdCB1c2UgaXQgYXMtaXMuCisgICAgICAgIGlmIHNlbGYuaXNfZmlsZW5hbWVfc3Vic3RpdHV0aW9uKGZpcnN0X2xpbmUpOgorICAgICAgICAgICAgc2VsZi5zdWJzdGl0dXRlX2ZpbGVuYW1lKGZpcnN0X2xpbmUpCisgICAgICAgIGVsaWYgc2VsZi5pc19kaXJuYW1lX3N1YnN0aXR1dGlvbihmaXJzdF9saW5lKToKKyAgICAgICAgICAgIHNlbGYudHJhbnNsYXRlX2Rpcm5hbWUoZmlyc3RfbGluZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kX3RyYW5zbGF0ZWRfZmlsZW5hbWUodGFpbCkKKworICAgIGRlZiBleHBhbmRfZmlsZV9vcl9kaXJfbmFtZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEV4cGFuZCBmaWxlIG9yIGRpciBuYW1lcyBpbnRvIGNvZGVsaW5lLiAgRGlybmFtZXMgYW5kCisgICAgICAgIGZpbGVuYW1lcyBjYW4gb25seSBoYXZlIGFzc2lnbm1lbnRzIG9yIGlmIHN0YXRlbWVudHMuICBGaXJzdAorICAgICAgICB0cmFuc2xhdGUgaWYgc3RhdGVtZW50cyBpbnRvIENvZGVMaW5lICsgKGRpcm5hbWUgb3IgZmlsZW5hbWUKKyAgICAgICAgY3JlYXRpb24pLgorICAgICAgICAiIiIKKyAgICAgICAgbGluZW5vID0gMAorCisgICAgICAgIGxpbmUgPSBzZWxmLnRyYW5zbGF0ZWRfZmlsZW5hbWVbbGVuKHNlbGYuZmlsZWJhc2UpOl0KKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCIvIik6CisgICAgICAgICAgICBsaW5lID0gbGluZVsxOl0KKyAgICAgICAgb3BlbnRhZ19zdGFydCA9IC0xCisKKyAgICAgICAgc3RhcnQgPSBsaW5lLmZpbmQoT1BFTl9UQUcpCisgICAgICAgIHdoaWxlIHN0YXJ0ICE9IC0xOgorICAgICAgICAgICAgaWYgbm90IGxpbmVbc3RhcnQ6XS5zdGFydHN3aXRoKEFTU0lHTl9UQUcpOgorICAgICAgICAgICAgICAgIG9wZW50YWdfc3RhcnQgPSBzdGFydAorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBzdGFydCArPSBsZW4oQVNTSUdOX1RBRykKKyAgICAgICAgICAgIHN0YXJ0ID0gbGluZS5maW5kKE9QRU5fVEFHLCBzdGFydCkKKworICAgICAgICBpZiBvcGVudGFnX3N0YXJ0ICE9IC0xOgorICAgICAgICAgICAgZW5kID0gbGluZS5maW5kKENMT1NFX1RBRywgb3BlbnRhZ19zdGFydCkKKyAgICAgICAgICAgIGlmIGVuZCA9PSAtMToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJObyBjbG9zZSB0YWcgZm91bmQgZm9yIG9wZW4gdGFnIiwgbGluZW5vLCBsaW5lKQorICAgICAgICAgICAgIyB3ZSBoYXZlIGEge3sgdGFnIGkuZS4gY29kZQorICAgICAgICAgICAgdGFnID0gbGluZVtvcGVudGFnX3N0YXJ0ICsgbGVuKE9QRU5fVEFHKTplbmRdLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG5vdCB0YWcubHN0cmlwKCkuc3RhcnRzd2l0aChJRl9UQUcpOgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoIk9ubHkgJ2lmJyB0YWdzIGFyZSBhbGxvd2VkIGluIGZpbGUgb3IgZGlyZWN0b3J5IG5hbWVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubywgbGluZSkKKyAgICAgICAgICAgIHNlbGYuZXhwYW5kZWRfbGluZXMuYXBwZW5kKENvZGVMaW5lKHRhZykpCisKKyAgICAgICAgICAgICMgZXZlcnl0aGluZyBhZnRlciB9fSBpcyB0aGUgYWN0dWFsIGZpbGVuYW1lIChwb3NzaWJseSB3aXRoIGFzc2lnbm1lbnRzKQorICAgICAgICAgICAgIyBldmVyeXRoaW5nIGJlZm9yZSBpcyB0aGUgcGF0aG5hbWUKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lWzpvcGVudGFnX3N0YXJ0XSArIGxpbmVbZW5kICsgbGVuKENMT1NFX1RBRyk6XS5zdHJpcCgpCisKKyAgICAgICAgYXNzaWduX3N0YXJ0ID0gbGluZS5maW5kKEFTU0lHTl9UQUcpCisgICAgICAgIGlmIGFzc2lnbl9zdGFydCAhPSAtMToKKyAgICAgICAgICAgIGFzc2lnbm1lbnRfdGFnID0gc2VsZi5leHBhbmRfYXNzaWdubWVudF90YWcoYXNzaWduX3N0YXJ0LCBsaW5lLCBsaW5lbm8pCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYsIFN1YnN0cmF0ZUZpbGUpOgorICAgICAgICAgICAgICAgIGFzc2lnbm1lbnRfdGFnLmlzX2ZpbGVuYW1lID0gVHJ1ZQorICAgICAgICAgICAgICAgIGFzc2lnbm1lbnRfdGFnLm91dF9maWxlYmFzZSA9IHNlbGYub3V0X2ZpbGViYXNlCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsZiwgU3Vic3RyYXRlRGlyKToKKyAgICAgICAgICAgICAgICBhc3NpZ25tZW50X3RhZy5pc19kaXJuYW1lID0gVHJ1ZQorICAgICAgICAgICAgICAgIGFzc2lnbm1lbnRfdGFnLm91dF9maWxlYmFzZSA9IHNlbGYub3V0X2ZpbGViYXNlCisgICAgICAgICAgICBzZWxmLmV4cGFuZGVkX2xpbmVzLmFwcGVuZChhc3NpZ25tZW50X3RhZykKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIG5vcm1hbF9saW5lID0gTm9ybWFsTGluZShsaW5lKQorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYsIFN1YnN0cmF0ZUZpbGUpOgorICAgICAgICAgICAgbm9ybWFsX2xpbmUuaXNfZmlsZW5hbWUgPSBUcnVlCisgICAgICAgICAgICBub3JtYWxfbGluZS5vdXRfZmlsZWJhc2UgPSBzZWxmLm91dF9maWxlYmFzZQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsZiwgU3Vic3RyYXRlRGlyKToKKyAgICAgICAgICAgIG5vcm1hbF9saW5lLmlzX2Rpcm5hbWUgPSBUcnVlCisgICAgICAgICAgICBub3JtYWxfbGluZS5vdXRfZmlsZWJhc2UgPSBzZWxmLm91dF9maWxlYmFzZQorICAgICAgICBzZWxmLmV4cGFuZGVkX2xpbmVzLmFwcGVuZChub3JtYWxfbGluZSkKKworICAgIGRlZiBleHBhbmQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBFeHBhbmQgdGhlIGZpbGUgb3IgZGlyIG5hbWUgZmlyc3QsIGV2ZW50dWFsbHkgdGhpcyBlbmRzIHVwCisgICAgICAgIGNyZWF0aW5nIHRoZSBmaWxlIG9yIGRpci4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYudHJhbnNsYXRlX2ZpbGVfb3JfZGlyX25hbWUoKQorICAgICAgICBzZWxmLmV4cGFuZF9maWxlX29yX2Rpcl9uYW1lKCkKKworCitjbGFzcyBTdWJzdHJhdGVGaWxlKFN1YnN0cmF0ZUJhc2UpOgorICAgICIiIgorICAgIENvbnRhaW5lciBmb3IgYm90aCBleHBhbmRlZCBhbmQgdW5leHBhbmRlZCBzdWJzdHJhdGUgZmlsZXMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBmaWxlYmFzZSwgb3V0X2ZpbGViYXNlKToKKyAgICAgICAgU3Vic3RyYXRlQmFzZS5fX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgZmlsZWJhc2UsIG91dF9maWxlYmFzZSkKKworICAgIGRlZiByZWFkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnJhd19saW5lczoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBmID0gb3BlbihzZWxmLmZpbGVuYW1lKQorICAgICAgICBzZWxmLnJhd19saW5lcyA9IGYucmVhZGxpbmVzKCkKKworICAgIGRlZiBleHBhbmQoc2VsZik6CisgICAgICAgICIiIkV4cGFuZCB0aGUgY29udGVudHMgb2YgYWxsIHRlbXBsYXRlIHRhZ3MgaW4gdGhlIGZpbGUuIiIiCisgICAgICAgIFN1YnN0cmF0ZUJhc2UuZXhwYW5kKHNlbGYpCisgICAgICAgIHNlbGYucmVhZCgpCisKKyAgICAgICAgZm9yIGxpbmVubywgbGluZSBpbiBlbnVtZXJhdGUoc2VsZi5yYXdfbGluZXMpOgorICAgICAgICAgICAgIyBvbmx5IGZpcnN0IGxpbmUgY2FuIGJlIGEgZmlsZW5hbWUgc3Vic3RpdGl0aW9uCisgICAgICAgICAgICBpZiBsaW5lbm8gPT0gMCBhbmQgbGluZS5zdGFydHN3aXRoKCIjIikgYW5kIEZJTEVOQU1FX1RBRyBpbiBsaW5lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlICMgc2tpcCBpdCAtIHdlJ3ZlIGFscmVhZHkgZXhwYW5kZWQgaXQKKyAgICAgICAgICAgIGV4cGFuZGVkX2xpbmUgPSBzZWxmLmV4cGFuZF90YWcobGluZSwgbGluZW5vICsgMSkgIyBodW1hbnMgbm90IDAtYmFzZWQKKyAgICAgICAgICAgIGlmIG5vdCBleHBhbmRlZF9saW5lOgorICAgICAgICAgICAgICAgIGV4cGFuZGVkX2xpbmUgPSBOb3JtYWxMaW5lKGxpbmUucnN0cmlwKCkpCisgICAgICAgICAgICBzZWxmLmV4cGFuZGVkX2xpbmVzLmFwcGVuZChleHBhbmRlZF9saW5lKQorCisgICAgZGVmIGdlbihzZWxmLCBjb250ZXh0ID0gTm9uZSk6CisgICAgICAgICIiIkdlbmVyYXRlIHRoZSBjb2RlIHRoYXQgZ2VuZXJhdGVzIHRoZSBCU1AuIiIiCisgICAgICAgIGJhc2VfaW5kZW50ID0gMAorCisgICAgICAgIGluZGVudCA9IG5ld19pbmRlbnQgPSBiYXNlX2luZGVudAorCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXhwYW5kZWRfbGluZXM6CisgICAgICAgICAgICBnZW5saW5lID0gbGluZS5nZW4oY29udGV4dCkKKyAgICAgICAgICAgIGlmIG5vdCBnZW5saW5lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIElucHV0TGluZSk6CisgICAgICAgICAgICAgICAgbGluZS5nZW5lcmF0ZWRfbGluZSA9IGdlbmxpbmUKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZ2VubGluZS5zdGFydHN3aXRoKE9QRU5fU1RBUlQpOgorICAgICAgICAgICAgICAgIGlmIGluZGVudCA9PSAxOgorICAgICAgICAgICAgICAgICAgICBiYXNlX2luZGVudCA9IDEKKyAgICAgICAgICAgIGlmIGluZGVudDoKKyAgICAgICAgICAgICAgICBpZiBnZW5saW5lID09IEJMQU5LTElORV9TVFIgb3IgKG5vdCBnZW5saW5lLnN0YXJ0c3dpdGgoTk9STUFMX1NUQVJUKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBnZW5saW5lLnN0YXJ0c3dpdGgoT1BFTl9TVEFSVCkpOgorICAgICAgICAgICAgICAgICAgICBpbmRlbnQgPSBuZXdfaW5kZW50ID0gYmFzZV9pbmRlbnQKKyAgICAgICAgICAgIGlmIGdlbmxpbmUuZW5kc3dpdGgoIjoiKToKKyAgICAgICAgICAgICAgICBuZXdfaW5kZW50ID0gYmFzZV9pbmRlbnQgKyAxCisgICAgICAgICAgICBsaW5lLmdlbmVyYXRlZF9saW5lID0gKGluZGVudCAqIElOREVOVF9TVFIpICsgZ2VubGluZQorICAgICAgICAgICAgaW5kZW50ID0gbmV3X2luZGVudAorCisKK2NsYXNzIFN1YnN0cmF0ZURpcihTdWJzdHJhdGVCYXNlKToKKyAgICAiIiIKKyAgICBDb250YWluZXIgZm9yIGJvdGggZXhwYW5kZWQgYW5kIHVuZXhwYW5kZWQgc3Vic3RyYXRlIGRpcnMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBmaWxlYmFzZSwgb3V0X2ZpbGViYXNlKToKKyAgICAgICAgU3Vic3RyYXRlQmFzZS5fX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgZmlsZWJhc2UsIG91dF9maWxlYmFzZSkKKworICAgIGRlZiBleHBhbmQoc2VsZik6CisgICAgICAgIFN1YnN0cmF0ZUJhc2UuZXhwYW5kKHNlbGYpCisKKyAgICBkZWYgZ2VuKHNlbGYsIGNvbnRleHQgPSBOb25lKToKKyAgICAgICAgIiIiR2VuZXJhdGUgdGhlIGNvZGUgdGhhdCBnZW5lcmF0ZXMgdGhlIEJTUC4iIiIKKyAgICAgICAgaW5kZW50ID0gbmV3X2luZGVudCA9IDAKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5leHBhbmRlZF9saW5lczoKKyAgICAgICAgICAgIGdlbmxpbmUgPSBsaW5lLmdlbihjb250ZXh0KQorICAgICAgICAgICAgaWYgbm90IGdlbmxpbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGdlbmxpbmUuZW5kc3dpdGgoIjoiKToKKyAgICAgICAgICAgICAgICBuZXdfaW5kZW50ID0gMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXdfaW5kZW50ID0gMAorICAgICAgICAgICAgbGluZS5nZW5lcmF0ZWRfbGluZSA9IChpbmRlbnQgKiBJTkRFTlRfU1RSKSArIGdlbmxpbmUKKyAgICAgICAgICAgIGluZGVudCA9IG5ld19pbmRlbnQKKworCitkZWYgZXhwYW5kX3RhcmdldCh0YXJnZXQsIGFsbF9maWxlcywgb3V0X2ZpbGViYXNlKToKKyAgICAiIiIKKyAgICBFeHBhbmQgdGhlIGNvbnRlbnRzIG9mIGFsbCB0ZW1wbGF0ZSB0YWdzIGluIHRoZSB0YXJnZXQuICBUaGlzCisgICAgbWVhbnMgcmVtb3ZpbmcgdGFncyBhbmQgY2F0ZWdvcml6aW5nIG9yIGNyZWF0aW5nIGxpbmVzIHNvIHRoYXQKKyAgICBmdXR1cmUgcGFzc2VzIGNhbiBwcm9jZXNzIGFuZCBwcmVzZW50IGlucHV0IGxpbmVzIGFuZCBnZW5lcmF0ZSB0aGUKKyAgICBjb3JyZXNwb25kaW5nIGxpbmVzIG9mIHRoZSBQeXRob24gcHJvZ3JhbSB0aGF0IHdpbGwgYmUgZXhlYydlZCB0bworICAgIGFjdHVhbGx5IHByb2R1Y2UgdGhlIGZpbmFsIEJTUC4gICdhbGxfZmlsZXMnIGluY2x1ZGVzIGRpcmVjdG9yaWVzLgorICAgICIiIgorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHRhcmdldCk6CisgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgaWYgZmlsZS5lbmRzd2l0aCgifiIpIG9yIGZpbGUuZW5kc3dpdGgoIiMiKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZiA9IG9zLnBhdGguam9pbihyb290LCBmaWxlKQorICAgICAgICAgICAgc2ZpbGUgPSBTdWJzdHJhdGVGaWxlKGYsIHRhcmdldCwgb3V0X2ZpbGViYXNlKQorICAgICAgICAgICAgc2ZpbGUuZXhwYW5kKCkKKyAgICAgICAgICAgIGFsbF9maWxlcy5hcHBlbmQoc2ZpbGUpCisKKyAgICAgICAgZm9yIGRpciBpbiBkaXJzOgorICAgICAgICAgICAgZCA9IG9zLnBhdGguam9pbihyb290LCBkaXIpCisgICAgICAgICAgICBzZGlyID0gU3Vic3RyYXRlRGlyKGQsIHRhcmdldCwgb3V0X2ZpbGViYXNlKQorICAgICAgICAgICAgc2Rpci5leHBhbmQoKQorICAgICAgICAgICAgYWxsX2ZpbGVzLmFwcGVuZChzZGlyKQorCisKK2RlZiBnZW5fcHJvZ3JhbV9tYWNoaW5lX2xpbmVzKG1hY2hpbmUsIHByb2dyYW1fbGluZXMpOgorICAgICIiIgorICAgIFVzZSB0aGUgaW5wdXQgdmFsdWVzIHdlIGdvdCBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCisgICAgIiIiCisgICAgbGluZSA9ICJtYWNoaW5lID0gXCIiICsgbWFjaGluZSArICJcIiIKKyAgICBwcm9ncmFtX2xpbmVzLmFwcGVuZChsaW5lKQorCisgICAgbGluZSA9ICJsYXllcl9uYW1lID0gXCIiICsgbWFjaGluZSArICJcIiIKKyAgICBwcm9ncmFtX2xpbmVzLmFwcGVuZChsaW5lKQorCisKK2RlZiBzb3J0X2lucHV0bGluZXMoaW5wdXRfbGluZXMpOgorICAgICIiIlNvcnQgaW5wdXQgbGluZXMgYWNjb3JkaW5nIHRvIHByaW9yaXR5IChwb3NpdGlvbikuIiIiCisgICAgaW5wdXRfbGluZXMuc29ydChrZXkgPSBsYW1iZGEgbDogbC5wcmlvKQorCisKK2RlZiBmaW5kX3BhcmVudF9kZXBlbmRlbmN5KGxpbmVzLCBkZXBlbmRzX29uKToKKyAgICBmb3IgaSwgbGluZSBpbiBsaW5lczoKKyAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBDb2RlTGluZSk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBsaW5lLnByb3BzWyJuYW1lIl0gPT0gZGVwZW5kc19vbjoKKyAgICAgICAgICAgIHJldHVybiBpCisKKyAgICByZXR1cm4gLTEKKworCitkZWYgcHJvY2Vzc19pbnB1dGxpbmVfZGVwZW5kZW5jaWVzKGlucHV0X2xpbmVzLCBhbGxfaW5wdXRsaW5lcyk6CisgICAgIiIiSWYgYW55IGlucHV0IGxpbmVzIGRlcGVuZCBvbiBvdGhlcnMsIHB1dCB0aGUgb3RoZXJzIGZpcnN0LiIiIgorICAgIGZvciBsaW5lIGluIGlucHV0X2xpbmVzOgorICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIElucHV0TGluZUdyb3VwKToKKyAgICAgICAgICAgIGdyb3VwX2lucHV0bGluZXMgPSBbXQorICAgICAgICAgICAgcHJvY2Vzc19pbnB1dGxpbmVfZGVwZW5kZW5jaWVzKGxpbmUuZ3JvdXAsIGdyb3VwX2lucHV0bGluZXMpCisgICAgICAgICAgICBsaW5lLmdyb3VwID0gZ3JvdXBfaW5wdXRsaW5lcworICAgICAgICAgICAgYWxsX2lucHV0bGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwgQ29kZUxpbmUpIG9yIGlzaW5zdGFuY2UobGluZSwgTm9ybWFsTGluZSk6CisgICAgICAgICAgICBhbGxfaW5wdXRsaW5lcy5hcHBlbmQobGluZSkKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVwZW5kc19vbiA9IGxpbmUucHJvcHNbImRlcGVuZHMtb24iXQorICAgICAgICAgICAgZGVwZW5kc19jb2RlbGluZSA9ICJpZiAiICsgbGluZS5wcm9wc1siZGVwZW5kcy1vbiJdICsgIiA9PSBcIiIgKyBsaW5lLnByb3BzWyJkZXBlbmRzLW9uLXZhbCJdICsgIlwiOiIKKyAgICAgICAgICAgIGFsbF9pbnB1dGxpbmVzLmFwcGVuZChDb2RlTGluZShkZXBlbmRzX2NvZGVsaW5lKSkKKyAgICAgICAgICAgIGFsbF9pbnB1dGxpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBhbGxfaW5wdXRsaW5lcy5hcHBlbmQobGluZSkKKworCitkZWYgY29uZGl0aW9uYWxfZmlsZW5hbWUoZmlsZW5hbWUpOgorICAgICIiIgorICAgIENoZWNrIGlmIHRoZSBmaWxlbmFtZSBpdHNlbGYgY29udGFpbnMgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQuICBJZgorICAgIHNvLCByZXR1cm4gYSBjb2RlbGluZSBmb3IgaXQuCisgICAgIiIiCisgICAgb3BlbnRhZ19zdGFydCA9IGZpbGVuYW1lLmZpbmQoT1BFTl9UQUcpCisKKyAgICBpZiBvcGVudGFnX3N0YXJ0ICE9IC0xOgorICAgICAgICBpZiBmaWxlbmFtZVtvcGVudGFnX3N0YXJ0Ol0uc3RhcnRzd2l0aChBU1NJR05fVEFHKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVuZCA9IGZpbGVuYW1lLmZpbmQoQ0xPU0VfVEFHLCBvcGVudGFnX3N0YXJ0KQorICAgICAgICBpZiBlbmQgPT0gLTE6CisgICAgICAgICAgICBwcmludCAiTm8gY2xvc2UgdGFnIGZvdW5kIGZvciBvcGVuIHRhZyBpbiBmaWxlbmFtZSAlcyIgJSBmaWxlbmFtZQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICAjIHdlIGhhdmUgYSB7eyB0YWcgaS5lLiBjb2RlCisgICAgICAgIHRhZyA9IGZpbGVuYW1lW29wZW50YWdfc3RhcnQgKyBsZW4oT1BFTl9UQUcpOmVuZF0uc3RyaXAoKQorICAgICAgICBpZiBub3QgdGFnLmxzdHJpcCgpLnN0YXJ0c3dpdGgoSUZfVEFHKToKKyAgICAgICAgICAgIHByaW50ICJPbmx5ICdpZicgdGFncyBhcmUgYWxsb3dlZCBpbiBmaWxlIG9yIGRpcmVjdG9yeSBuYW1lcywgZmlsZW5hbWU6ICVzIiAlIGZpbGVuYW1lCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIHJldHVybiBDb2RlTGluZSh0YWcpCisKKyAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIElucHV0TGluZUdyb3VwKElucHV0TGluZSk6CisgICAgIiIiCisgICAgSW5wdXRMaW5lIHRoYXQgZG9lcyBub3RoaW5nIGJ1dCBncm91cCBvdGhlciBpbnB1dCBsaW5lcworICAgIGNvcnJlc3BvbmRpbmcgdG8gYWxsIHRoZSBpbnB1dCBsaW5lcyBpbiBhIFN1YnN0cmF0ZUZpbGUgc28gdGhleQorICAgIGNhbiBiZSBnZW5lcmF0ZWQgYXMgYSBncm91cC4gIHByaW8gaXMgdGhlIG9ubHkgcHJvcGVydHkgdXNlZC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29kZWxpbmUpOgorICAgICAgICBJbnB1dExpbmUuX19pbml0X18oc2VsZiwge30sICIiLCAwKQorICAgICAgICBzZWxmLmdyb3VwID0gW10KKyAgICAgICAgc2VsZi5wcmlvID0gc3lzLm1heGludAorICAgICAgICBzZWxmLmdyb3VwLmFwcGVuZChjb2RlbGluZSkKKworICAgIGRlZiBhcHBlbmQoc2VsZiwgbGluZSk6CisgICAgICAgIHNlbGYuZ3JvdXAuYXBwZW5kKGxpbmUpCisgICAgICAgIGlmIGxpbmUucHJpbyA8IHNlbGYucHJpbzoKKyAgICAgICAgICAgIHNlbGYucHJpbyA9IGxpbmUucHJpbworCisgICAgZGVmIGxlbihzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLmdyb3VwKQorCisKK2RlZiBnYXRoZXJfaW5wdXRsaW5lcyhmaWxlcyk6CisgICAgIiIiCisgICAgR2F0aGVyIGFsbCB0aGUgSW5wdXRMaW5lcyAtIHdlIHdhbnQgdG8gZ2VuZXJhdGUgdGhlbSBmaXJzdC4KKyAgICAiIiIKKyAgICBhbGxfaW5wdXRsaW5lcyA9IFtdCisgICAgaW5wdXRfbGluZXMgPSBbXQorCisgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZmlsZSwgU3Vic3RyYXRlRmlsZSk6CisgICAgICAgICAgICBncm91cCA9IE5vbmUKKyAgICAgICAgICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShmaWxlLnRyYW5zbGF0ZWRfZmlsZW5hbWUpCisKKyAgICAgICAgICAgIGNvZGVsaW5lID0gY29uZGl0aW9uYWxfZmlsZW5hbWUoYmFzZW5hbWUpCisgICAgICAgICAgICBpZiBjb2RlbGluZToKKyAgICAgICAgICAgICAgICBncm91cCA9IElucHV0TGluZUdyb3VwKGNvZGVsaW5lKQorCisgICAgICAgICAgICBoYXZlX2NvbmRpdGlvbiA9IEZhbHNlCisgICAgICAgICAgICBjb25kaXRpb25fdG9fd3JpdGUgPSBOb25lCisgICAgICAgICAgICBmb3IgbGluZSBpbiBmaWxlLmV4cGFuZGVkX2xpbmVzOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwgQ29kZUxpbmUpOgorICAgICAgICAgICAgICAgICAgICBoYXZlX2NvbmRpdGlvbiA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uX3RvX3dyaXRlID0gbGluZQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwgSW5wdXRMaW5lKToKKyAgICAgICAgICAgICAgICAgICAgaWYgZ3JvdXA6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb25kaXRpb25fdG9fd3JpdGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uX3RvX3dyaXRlLnByaW8gPSBsaW5lLnByaW8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25fdG9fd3JpdGUuZGlzY2FyZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cC5hcHBlbmQoY29uZGl0aW9uX3RvX3dyaXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbl90b193cml0ZSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29uZGl0aW9uX3RvX3dyaXRlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbl90b193cml0ZS5wcmlvID0gbGluZS5wcmlvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uX3RvX3dyaXRlLmRpc2NhcmQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfbGluZXMuYXBwZW5kKGNvbmRpdGlvbl90b193cml0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25fdG9fd3JpdGUgPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9saW5lcy5hcHBlbmQobGluZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBjb25kaXRpb25fdG9fd3JpdGU6CisgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25fdG9fd3JpdGUgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGlmIGhhdmVfY29uZGl0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmUubGluZS5zdHJpcCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUuZGlzY2FyZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9saW5lcy5hcHBlbmQobGluZSkKKyAgICAgICAgICAgICAgICAgICAgaGF2ZV9jb25kaXRpb24gPSBGYWxzZQorCisgICAgICAgICAgICBpZiBncm91cCBhbmQgZ3JvdXAubGVuKCkgPiAxOgorICAgICAgICAgICAgICAgIGlucHV0X2xpbmVzLmFwcGVuZChncm91cCkKKworICAgIHNvcnRfaW5wdXRsaW5lcyhpbnB1dF9saW5lcykKKyAgICBwcm9jZXNzX2lucHV0bGluZV9kZXBlbmRlbmNpZXMoaW5wdXRfbGluZXMsIGFsbF9pbnB1dGxpbmVzKQorCisgICAgcmV0dXJuIGFsbF9pbnB1dGxpbmVzCisKKworZGVmIHJ1bl9wcm9ncmFtX2xpbmVzKGxpbmVsaXN0LCBjb2RlZHVtcCk6CisgICAgIiIiCisgICAgRm9yIGEgc2luZ2xlIGZpbGUsIHByaW50IGFsbCB0aGUgcHl0aG9uIGNvZGUgaW50byBhIGJ1ZiBhbmQgZXhlY3V0ZSBpdC4KKyAgICAiIiIKKyAgICBidWYgPSAiXG4iLmpvaW4obGluZWxpc3QpCisKKyAgICBpZiBjb2RlZHVtcDoKKyAgICAgICAgb2YgPSBvcGVuKCJic3BnZW4ub3V0IiwgInciKQorICAgICAgICBvZi53cml0ZShidWYpCisgICAgICAgIG9mLmNsb3NlKCkKKyAgICBleGVjIGJ1ZgorCisKK2RlZiBnZW5fdGFyZ2V0KGZpbGVzLCBjb250ZXh0ID0gTm9uZSk6CisgICAgIiIiCisgICAgR2VuZXJhdGUgdGhlIHB5dGhvbiBjb2RlIGZvciBlYWNoIGZpbGUuCisgICAgIiIiCisgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgIGZpbGUuZ2VuKGNvbnRleHQpCisKKworZGVmIGdlbl9wcm9ncmFtX2hlYWRlcl9saW5lcyhwcm9ncmFtX2xpbmVzKToKKyAgICAiIiIKKyAgICBHZW5lcmF0ZSBhbnkgaW1wb3J0cyB3ZSBuZWVkLgorICAgICIiIgorICAgIHByb2dyYW1fbGluZXMuYXBwZW5kKCJjdXJyZW50X2ZpbGUgPSBcIlwiIikKKworCitkZWYgZ2VuX3N1cHBsaWVkX3Byb3BlcnR5X3ZhbHMocHJvcGVydGllcywgcHJvZ3JhbV9saW5lcyk6CisgICAgIiIiCisgICAgR2VuZXJhdGUgdXNlci1zcGVjaWZpZWQgZW50cmllcyBmb3IgaW5wdXQgdmFsdWVzIGluc3RlYWQgb2YKKyAgICBnZW5lcmF0aW5nIGlucHV0IHByb21wdHMuCisgICAgIiIiCisgICAgZm9yIG5hbWUsIHZhbCBpbiBwcm9wZXJ0aWVzLml0ZXJpdGVtcygpOgorICAgICAgICBwcm9ncmFtX2xpbmUgPSBuYW1lICsgIiA9IFwiIiArIHZhbCArICJcIiIKKyAgICAgICAgcHJvZ3JhbV9saW5lcy5hcHBlbmQocHJvZ3JhbV9saW5lKQorCisKK2RlZiBnZW5faW5pdGlhbF9wcm9wZXJ0eV92YWxzKGlucHV0X2xpbmVzLCBwcm9ncmFtX2xpbmVzKToKKyAgICAiIiIKKyAgICBHZW5lcmF0ZSBudWxsIG9yIGRlZmF1bHQgZW50cmllcyBmb3IgaW5wdXQgdmFsdWVzLCBzbyB3ZSBkb24ndAorICAgIGhhdmUgdW5kZWZpbmVkIHZhcmlhYmxlcy4KKyAgICAiIiIKKyAgICBmb3IgbGluZSBpbiBpbnB1dF9saW5lczoKKyAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBJbnB1dExpbmVHcm91cCk6CisgICAgICAgICAgICBnZW5faW5pdGlhbF9wcm9wZXJ0eV92YWxzKGxpbmUuZ3JvdXAsIHByb2dyYW1fbGluZXMpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwgSW5wdXRMaW5lKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuYW1lID0gbGluZS5wcm9wc1sibmFtZSJdCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3ZhbCA9ICJcIiIgKyBsaW5lLnByb3BzWyJkZWZhdWx0Il0gKyAiXCIiCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3ZhbCA9ICJcIlwiIgorICAgICAgICAgICAgICAgIHByb2dyYW1fbGluZSA9IG5hbWUgKyAiID0gIiArIGRlZmF1bHRfdmFsCisgICAgICAgICAgICAgICAgcHJvZ3JhbV9saW5lcy5hcHBlbmQocHJvZ3JhbV9saW5lKQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworCitkZWYgZ2VuX3Byb2dyYW1faW5wdXRfbGluZXMoaW5wdXRfbGluZXMsIHByb2dyYW1fbGluZXMsIGNvbnRleHQsIGluX2dyb3VwID0gRmFsc2UpOgorICAgICIiIgorICAgIEdlbmVyYXRlIG9ubHkgdGhlIGlucHV0IGxpbmVzIHVzZWQgZm9yIHByb21wdGluZyB0aGUgdXNlci4gIEZvcgorICAgIHRoYXQsIHdlIG9ubHkgaGF2ZSBpbnB1dCBsaW5lcyBhbmQgQ29kZUxpbmVzIHRoYXQgYWZmZWN0IHRoZSBuZXh0CisgICAgaW5wdXQgbGluZS4KKyAgICAiIiIKKyAgICBpbmRlbnQgPSBuZXdfaW5kZW50ID0gMAorCisgICAgZm9yIGxpbmUgaW4gaW5wdXRfbGluZXM6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwgSW5wdXRMaW5lR3JvdXApOgorICAgICAgICAgICAgZ2VuX3Byb2dyYW1faW5wdXRfbGluZXMobGluZS5ncm91cCwgcHJvZ3JhbV9saW5lcywgY29udGV4dCwgVHJ1ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIG5vdCBsaW5lLmxpbmUuc3RyaXAoKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgZ2VubGluZSA9IGxpbmUuZ2VuKGNvbnRleHQpCisgICAgICAgIGlmIG5vdCBnZW5saW5lOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgZ2VubGluZS5lbmRzd2l0aCgiOiIpOgorICAgICAgICAgICAgbmV3X2luZGVudCArPSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBpbmRlbnQgPiAxIG9yIChub3QgaW5fZ3JvdXAgYW5kIGluZGVudCk6CisgICAgICAgICAgICAgICAgbmV3X2luZGVudCAtPSAxCisKKyAgICAgICAgbGluZS5nZW5lcmF0ZWRfbGluZSA9IChpbmRlbnQgKiBJTkRFTlRfU1RSKSArIGdlbmxpbmUKKyAgICAgICAgcHJvZ3JhbV9saW5lcy5hcHBlbmQobGluZS5nZW5lcmF0ZWRfbGluZSkKKworICAgICAgICBpbmRlbnQgPSBuZXdfaW5kZW50CisKKworZGVmIGdlbl9wcm9ncmFtX2xpbmVzKHRhcmdldF9maWxlcywgcHJvZ3JhbV9saW5lcyk6CisgICAgIiIiCisgICAgR2VuZXJhdGUgdGhlIHByb2dyYW0gbGluZXMgdGhhdCBtYWtlIHVwIHRoZSBCU1AgZ2VuZXJhdGlvbgorICAgIHByb2dyYW0uICBUaGlzIGFwcGVuZHMgdGhlIGdlbmVyYXRlZCBsaW5lcyBvZiBhbGwgdGFyZ2V0X2ZpbGVzIHRvCisgICAgcHJvZ3JhbV9saW5lcywgYW5kIHNraXBzIGlucHV0IGxpbmVzLCB3aGljaCBhcmUgZGVhbHQgd2l0aAorICAgIHNlcGFyYXRlbHksIG9yIG9taXR0ZWQuCisgICAgIiIiCisgICAgZm9yIGZpbGUgaW4gdGFyZ2V0X2ZpbGVzOgorICAgICAgICBpZiBmaWxlLmZpbGVuYW1lLmVuZHN3aXRoKCJub2luc3RhbGwiKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgZm9yIGxpbmUgaW4gZmlsZS5leHBhbmRlZF9saW5lczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwgSW5wdXRMaW5lKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbGluZS5kaXNjYXJkOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHByb2dyYW1fbGluZXMuYXBwZW5kKGxpbmUuZ2VuZXJhdGVkX2xpbmUpCisKKworZGVmIGNyZWF0ZV9jb250ZXh0KG1hY2hpbmUsIGFyY2gsIHNjcmlwdHNfcGF0aCk6CisgICAgIiIiCisgICAgQ3JlYXRlIGEgY29udGV4dCBvYmplY3QgZm9yIHVzZSBpbiBkZWZlcnJlZCBmdW5jdGlvbiBpbnZvY2F0aW9uLgorICAgICIiIgorICAgIGNvbnRleHQgPSB7fQorCisgICAgY29udGV4dFsibWFjaGluZSJdID0gbWFjaGluZQorICAgIGNvbnRleHRbImFyY2giXSA9IGFyY2gKKyAgICBjb250ZXh0WyJzY3JpcHRzX3BhdGgiXSA9IHNjcmlwdHNfcGF0aAorCisgICAgcmV0dXJuIGNvbnRleHQKKworCitkZWYgY2FwdHVyZV9jb250ZXh0KGNvbnRleHQpOgorICAgICIiIgorICAgIENyZWF0ZSBhIGNvbnRleHQgb2JqZWN0IGZvciB1c2UgaW4gZGVmZXJyZWQgZnVuY3Rpb24gaW52b2NhdGlvbi4KKyAgICAiIiIKKyAgICBjYXB0dXJlZF9jb250ZXh0ID0ge30KKworICAgIGNhcHR1cmVkX2NvbnRleHRbIm1hY2hpbmUiXSA9IGNvbnRleHRbIm1hY2hpbmUiXQorICAgIGNhcHR1cmVkX2NvbnRleHRbImFyY2giXSA9IGNvbnRleHRbImFyY2giXQorICAgIGNhcHR1cmVkX2NvbnRleHRbInNjcmlwdHNfcGF0aCJdID0gY29udGV4dFsic2NyaXB0c19wYXRoIl0KKworICAgIHJldHVybiBjYXB0dXJlZF9jb250ZXh0CisKKworZGVmIGV4cGFuZF90YXJnZXRzKGNvbnRleHQsIGJzcF9vdXRwdXRfZGlyLCBleHBhbmRfY29tbW9uPVRydWUpOgorICAgICIiIgorICAgIEV4cGFuZCBhbGwgdGhlIHRhZ3MgaW4gYm90aCB0aGUgY29tbW9uIGFuZCBtYWNoaW5lLXNwZWNpZmljCisgICAgJ3RhcmdldHMnLgorCisgICAgSWYgZXhwYW5kX2NvbW1vbiBpcyBGYWxzZSwgZG9uJ3QgZXhwYW5kIHRoZSBjb21tb24gdGFyZ2V0ICh0aGlzCisgICAgb3B0aW9uIGlzIHVzZWQgdG8gY3JlYXRlIHNwZWNpYWwtcHVycG9zZSBsYXllcnMpLgorICAgICIiIgorICAgIHRhcmdldF9maWxlcyA9IFtdCisKKyAgICBtYWNoaW5lID0gY29udGV4dFsibWFjaGluZSJdCisgICAgYXJjaCA9IGNvbnRleHRbImFyY2giXQorICAgIHNjcmlwdHNfcGF0aCA9IGNvbnRleHRbInNjcmlwdHNfcGF0aCJdCisKKyAgICBsaWJfcGF0aCA9IHNjcmlwdHNfcGF0aCArICcvbGliJworICAgIGJzcF9wYXRoID0gbGliX3BhdGggKyAnL2JzcCcKKyAgICBhcmNoX3BhdGggPSBic3BfcGF0aCArICcvc3Vic3RyYXRlL3RhcmdldC9hcmNoJworCisgICAgaWYgZXhwYW5kX2NvbW1vbjoKKyAgICAgICAgY29tbW9uID0gb3MucGF0aC5qb2luKGFyY2hfcGF0aCwgImNvbW1vbiIpCisgICAgICAgIGV4cGFuZF90YXJnZXQoY29tbW9uLCB0YXJnZXRfZmlsZXMsIGJzcF9vdXRwdXRfZGlyKQorCisgICAgYXJjaGVzID0gb3MubGlzdGRpcihhcmNoX3BhdGgpCisgICAgaWYgYXJjaCBub3QgaW4gYXJjaGVzIG9yIGFyY2ggPT0gImNvbW1vbiI6CisgICAgICAgIHByaW50ICJJbnZhbGlkIGthcmNoLCBleGl0aW5nXG4iCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICB0YXJnZXQgPSBvcy5wYXRoLmpvaW4oYXJjaF9wYXRoLCBhcmNoKQorICAgIGV4cGFuZF90YXJnZXQodGFyZ2V0LCB0YXJnZXRfZmlsZXMsIGJzcF9vdXRwdXRfZGlyKQorCisgICAgZ2VuX3RhcmdldCh0YXJnZXRfZmlsZXMsIGNvbnRleHQpCisKKyAgICByZXR1cm4gdGFyZ2V0X2ZpbGVzCisKKworZGVmIHlvY3RvX2NvbW1vbl9jcmVhdGUobWFjaGluZSwgdGFyZ2V0LCBzY3JpcHRzX3BhdGgsIGxheWVyX291dHB1dF9kaXIsIGNvZGVkdW1wLCBwcm9wZXJ0aWVzX2ZpbGUsIHByb3BlcnRpZXNfc3RyPSIiLCBleHBhbmRfY29tbW9uPVRydWUpOgorICAgICIiIgorICAgIENvbW1vbiBsYXllci1jcmVhdGlvbiBjb2RlCisKKyAgICBtYWNoaW5lIC0gdXNlci1kZWZpbmVkIG1hY2hpbmUgbmFtZSAoaWYgbmVlZGVkLCB3aWxsIGdlbmVyYXRlICdtYWNoaW5lJyB2YXIpCisgICAgdGFyZ2V0IC0gdGhlICd0YXJnZXQnIHRoZSBsYXllciB3aWxsIGJlIGJhc2VkIG9uLCBtdXN0IGJlIG9uZSBpbgorICAgICAgICAgICBzY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoCisgICAgc2NyaXB0c19wYXRoIC0gYWJzb2x1dGUgcGF0aCB0byB5b2N0byAvc2NyaXB0cyBkaXIKKyAgICBsYXllcl9vdXRwdXRfZGlyIC0gZGlybmFtZSB0byBjcmVhdGUgZm9yIGxheWVyCisgICAgY29kZWR1bXAgLSBkdW1wIGdlbmVyYXRlZCBjb2RlIHRvIGJzcGdlbi5vdXQKKyAgICBwcm9wZXJ0aWVzX2ZpbGUgLSB1c2UgdmFsdWVzIGZyb20gdGhpcyBmaWxlIGlmIG5vbmVtcHR5IGkuZSBubyBwcm9tcHRpbmcKKyAgICBwcm9wZXJ0aWVzX3N0ciAtIHVzZSB2YWx1ZXMgZnJvbSB0aGlzIHN0cmluZyBpZiBub25lbXB0eSBpLmUgbm8gcHJvbXB0aW5nCisgICAgZXhwYW5kX2NvbW1vbiAtIGJvb2xlYW4sIHVzZSB0aGUgY29udGVudHMgb2YgKGZvciBic3AgbGF5ZXJzKSBhcmNoL2NvbW1vbgorICAgICIiIgorICAgIGlmIG9zLnBhdGguZXhpc3RzKGxheWVyX291dHB1dF9kaXIpOgorICAgICAgICBwcmludCAiXG5sYXllciBvdXRwdXQgZGlyIGFscmVhZHkgZXhpc3RzLCBleGl0aW5nLiAoJXMpIiAlIGxheWVyX291dHB1dF9kaXIKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHByb3BlcnRpZXMgPSBOb25lCisKKyAgICBpZiBwcm9wZXJ0aWVzX2ZpbGU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGluZmlsZSA9IG9wZW4ocHJvcGVydGllc19maWxlLCAiciIpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcHJpbnQgIkNvdWxkbid0IG9wZW4gcHJvcGVydGllcyBmaWxlICVzIGZvciByZWFkaW5nLCBleGl0aW5nIiAlIHByb3BlcnRpZXNfZmlsZQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICBwcm9wZXJ0aWVzID0ganNvbi5sb2FkKGluZmlsZSkKKworICAgIGlmIHByb3BlcnRpZXNfc3RyIGFuZCBub3QgcHJvcGVydGllczoKKyAgICAgICAgcHJvcGVydGllcyA9IGpzb24ubG9hZHMocHJvcGVydGllc19zdHIpCisKKyAgICBvcy5ta2RpcihsYXllcl9vdXRwdXRfZGlyKQorCisgICAgY29udGV4dCA9IGNyZWF0ZV9jb250ZXh0KG1hY2hpbmUsIHRhcmdldCwgc2NyaXB0c19wYXRoKQorICAgIHRhcmdldF9maWxlcyA9IGV4cGFuZF90YXJnZXRzKGNvbnRleHQsIGxheWVyX291dHB1dF9kaXIsIGV4cGFuZF9jb21tb24pCisKKyAgICBpbnB1dF9saW5lcyA9IGdhdGhlcl9pbnB1dGxpbmVzKHRhcmdldF9maWxlcykKKworICAgIHByb2dyYW1fbGluZXMgPSBbXQorCisgICAgZ2VuX3Byb2dyYW1faGVhZGVyX2xpbmVzKHByb2dyYW1fbGluZXMpCisKKyAgICBnZW5faW5pdGlhbF9wcm9wZXJ0eV92YWxzKGlucHV0X2xpbmVzLCBwcm9ncmFtX2xpbmVzKQorCisgICAgaWYgcHJvcGVydGllczoKKyAgICAgICAgZ2VuX3N1cHBsaWVkX3Byb3BlcnR5X3ZhbHMocHJvcGVydGllcywgcHJvZ3JhbV9saW5lcykKKworICAgIGdlbl9wcm9ncmFtX21hY2hpbmVfbGluZXMobWFjaGluZSwgcHJvZ3JhbV9saW5lcykKKworICAgIGlmIG5vdCBwcm9wZXJ0aWVzOgorICAgICAgICBnZW5fcHJvZ3JhbV9pbnB1dF9saW5lcyhpbnB1dF9saW5lcywgcHJvZ3JhbV9saW5lcywgY29udGV4dCkKKworICAgIGdlbl9wcm9ncmFtX2xpbmVzKHRhcmdldF9maWxlcywgcHJvZ3JhbV9saW5lcykKKworICAgIHJ1bl9wcm9ncmFtX2xpbmVzKHByb2dyYW1fbGluZXMsIGNvZGVkdW1wKQorCisKK2RlZiB5b2N0b19sYXllcl9jcmVhdGUobGF5ZXJfbmFtZSwgc2NyaXB0c19wYXRoLCBsYXllcl9vdXRwdXRfZGlyLCBjb2RlZHVtcCwgcHJvcGVydGllc19maWxlLCBwcm9wZXJ0aWVzPSIiKToKKyAgICAiIiIKKyAgICBDcmVhdGUgeW9jdG8gbGF5ZXIKKworICAgIGxheWVyX25hbWUgLSB1c2VyLWRlZmluZWQgbGF5ZXIgbmFtZQorICAgIHNjcmlwdHNfcGF0aCAtIGFic29sdXRlIHBhdGggdG8geW9jdG8gL3NjcmlwdHMgZGlyCisgICAgbGF5ZXJfb3V0cHV0X2RpciAtIGRpcm5hbWUgdG8gY3JlYXRlIGZvciBsYXllcgorICAgIGNvZGVkdW1wIC0gZHVtcCBnZW5lcmF0ZWQgY29kZSB0byBic3BnZW4ub3V0CisgICAgcHJvcGVydGllc19maWxlIC0gdXNlIHZhbHVlcyBmcm9tIHRoaXMgZmlsZSBpZiBub25lbXB0eSBpLmUgbm8gcHJvbXB0aW5nCisgICAgcHJvcGVydGllcyAtIHVzZSB2YWx1ZXMgZnJvbSB0aGlzIHN0cmluZyBpZiBub25lbXB0eSBpLmUgbm8gcHJvbXB0aW5nCisgICAgIiIiCisgICAgeW9jdG9fY29tbW9uX2NyZWF0ZShsYXllcl9uYW1lLCAibGF5ZXIiLCBzY3JpcHRzX3BhdGgsIGxheWVyX291dHB1dF9kaXIsIGNvZGVkdW1wLCBwcm9wZXJ0aWVzX2ZpbGUsIHByb3BlcnRpZXMsIEZhbHNlKQorCisgICAgcHJpbnQgIlxuTmV3IGxheWVyIGNyZWF0ZWQgaW4gJXMuXG4iICUgKGxheWVyX291dHB1dF9kaXIpCisgICAgcHJpbnQgIkRvbid0IGZvcmdldCB0byBhZGQgaXQgdG8geW91ciBCQkxBWUVSUyAoZm9yIGRldGFpbHMgc2VlICVzXFJFQURNRSkuIiAlIChsYXllcl9vdXRwdXRfZGlyKQorCisKK2RlZiB5b2N0b19ic3BfY3JlYXRlKG1hY2hpbmUsIGFyY2gsIHNjcmlwdHNfcGF0aCwgYnNwX291dHB1dF9kaXIsIGNvZGVkdW1wLCBwcm9wZXJ0aWVzX2ZpbGUsIHByb3BlcnRpZXM9Tm9uZSk6CisgICAgIiIiCisgICAgQ3JlYXRlIGJzcAorCisgICAgbWFjaGluZSAtIHVzZXItZGVmaW5lZCBtYWNoaW5lIG5hbWUKKyAgICBhcmNoIC0gdGhlIGFyY2ggdGhlIGJzcCB3aWxsIGJlIGJhc2VkIG9uLCBtdXN0IGJlIG9uZSBpbgorICAgICAgICAgICBzY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoCisgICAgc2NyaXB0c19wYXRoIC0gYWJzb2x1dGUgcGF0aCB0byB5b2N0byAvc2NyaXB0cyBkaXIKKyAgICBic3Bfb3V0cHV0X2RpciAtIGRpcm5hbWUgdG8gY3JlYXRlIGZvciBCU1AKKyAgICBjb2RlZHVtcCAtIGR1bXAgZ2VuZXJhdGVkIGNvZGUgdG8gYnNwZ2VuLm91dAorICAgIHByb3BlcnRpZXNfZmlsZSAtIHVzZSB2YWx1ZXMgZnJvbSB0aGlzIGZpbGUgaWYgbm9uZW1wdHkgaS5lIG5vIHByb21wdGluZworICAgIHByb3BlcnRpZXMgLSB1c2UgdmFsdWVzIGZyb20gdGhpcyBzdHJpbmcgaWYgbm9uZW1wdHkgaS5lIG5vIHByb21wdGluZworICAgICIiIgorICAgIHlvY3RvX2NvbW1vbl9jcmVhdGUobWFjaGluZSwgYXJjaCwgc2NyaXB0c19wYXRoLCBic3Bfb3V0cHV0X2RpciwgY29kZWR1bXAsIHByb3BlcnRpZXNfZmlsZSwgcHJvcGVydGllcykKKworICAgIHByaW50ICJcbk5ldyAlcyBCU1AgY3JlYXRlZCBpbiAlcyIgJSAoYXJjaCwgYnNwX291dHB1dF9kaXIpCisKKworZGVmIHByaW50X2RpY3QoaXRlbXMsIGluZGVudCA9IDApOgorICAgICIiIgorICAgIFByaW50IHRoZSB2YWx1ZXMgaW4gYSBwb3NzaWJseSBuZXN0ZWQgZGljdGlvbmFyeS4KKyAgICAiIiIKKyAgICBmb3Iga2V5LCB2YWwgaW4gaXRlbXMuaXRlcml0ZW1zKCk6CisgICAgICAgIHByaW50ICIgICAgIippbmRlbnQgKyAiXCIlc1wiIDoiICUga2V5LAorICAgICAgICBpZiB0eXBlKHZhbCkgPT0gZGljdDoKKyAgICAgICAgICAgIHByaW50ICJ7IgorICAgICAgICAgICAgcHJpbnRfZGljdCh2YWwsIGluZGVudCArIDEpCisgICAgICAgICAgICBwcmludCAiICAgICIqaW5kZW50ICsgIn0iCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCAiJXMiICUgdmFsCisKKworZGVmIGdldF9wcm9wZXJ0aWVzKGlucHV0X2xpbmVzKToKKyAgICAiIiIKKyAgICBHZXQgdGhlIGNvbXBsZXRlIHNldCBvZiBwcm9wZXJ0aWVzIGZvciBhbGwgdGhlIGlucHV0IGl0ZW1zIGluIHRoZQorICAgIEJTUCwgYXMgYSBwb3NzaWJseSBuZXN0ZWQgZGljdGlvbmFyeS4KKyAgICAiIiIKKyAgICBwcm9wZXJ0aWVzID0ge30KKworICAgIGZvciBsaW5lIGluIGlucHV0X2xpbmVzOgorICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIElucHV0TGluZUdyb3VwKToKKyAgICAgICAgICAgIHN0YXRlbWVudCA9IGxpbmUuZ3JvdXBbMF0ubGluZQorICAgICAgICAgICAgZ3JvdXBfcHJvcGVydGllcyA9IGdldF9wcm9wZXJ0aWVzKGxpbmUuZ3JvdXApCisgICAgICAgICAgICBwcm9wZXJ0aWVzW3N0YXRlbWVudF0gPSBncm91cF9wcm9wZXJ0aWVzCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGxpbmUsIElucHV0TGluZSk6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwgQ2hvaWNlSW5wdXRMaW5lKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgcHJvcHMgPSBsaW5lLnByb3BzCisgICAgICAgIGl0ZW0gPSB7fQorICAgICAgICBuYW1lID0gcHJvcHNbIm5hbWUiXQorICAgICAgICBmb3Iga2V5LCB2YWwgaW4gcHJvcHMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG5vdCBrZXkgPT0gIm5hbWUiOgorICAgICAgICAgICAgICAgIGl0ZW1ba2V5XSA9IHZhbAorICAgICAgICBwcm9wZXJ0aWVzW25hbWVdID0gaXRlbQorCisgICAgcmV0dXJuIHByb3BlcnRpZXMKKworCitkZWYgeW9jdG9fbGF5ZXJfbGlzdF9wcm9wZXJ0aWVzKGFyY2gsIHNjcmlwdHNfcGF0aCwgcHJvcGVydGllc19maWxlLCBleHBhbmRfY29tbW9uPVRydWUpOgorICAgICIiIgorICAgIExpc3QgdGhlIGNvbXBsZXRlIHNldCBvZiBwcm9wZXJ0aWVzIGZvciBhbGwgdGhlIGlucHV0IGl0ZW1zIGluIHRoZQorICAgIGxheWVyLiAgSWYgcHJvcGVydGllc19maWxlIGlzIG5vbi1udWxsLCB3cml0ZSB0aGUgY29tcGxldGUgc2V0IG9mCisgICAgcHJvcGVydGllcyBhcyBhIG5lc3RlZCBKU09OIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIGEgcG9zc2libHkKKyAgICBuZXN0ZWQgZGljdGlvbmFyeS4KKyAgICAiIiIKKyAgICBjb250ZXh0ID0gY3JlYXRlX2NvbnRleHQoInVudXNlZCIsIGFyY2gsIHNjcmlwdHNfcGF0aCkKKyAgICB0YXJnZXRfZmlsZXMgPSBleHBhbmRfdGFyZ2V0cyhjb250ZXh0LCAidW51c2VkIiwgZXhwYW5kX2NvbW1vbikKKworICAgIGlucHV0X2xpbmVzID0gZ2F0aGVyX2lucHV0bGluZXModGFyZ2V0X2ZpbGVzKQorCisgICAgcHJvcGVydGllcyA9IGdldF9wcm9wZXJ0aWVzKGlucHV0X2xpbmVzKQorICAgIGlmIHByb3BlcnRpZXNfZmlsZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb2YgPSBvcGVuKHByb3BlcnRpZXNfZmlsZSwgInciKQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHByaW50ICJDb3VsZG4ndCBvcGVuIHByb3BlcnRpZXMgZmlsZSAlcyBmb3Igd3JpdGluZywgZXhpdGluZyIgJSBwcm9wZXJ0aWVzX2ZpbGUKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAganNvbi5kdW1wKHByb3BlcnRpZXMsIG9mKQorCisgICAgcHJpbnRfZGljdChwcm9wZXJ0aWVzKQorCisKK2RlZiBzcGxpdF9uZXN0ZWRfcHJvcGVydHkocHJvcGVydHkpOgorICAgICIiIgorICAgIEEgcHJvcGVydHkgbmFtZSBvZiB0aGUgZm9ybSB4LnkgZGVzY3JpYmVzIGEgbmVzdGVkIHByb3BlcnR5CisgICAgaS5lLiB0aGUgcHJvcGVydHkgeSBpcyBjb250YWluZWQgd2l0aGluIHggYW5kIGNhbiBiZSBhZGRyZXNzZWQKKyAgICB1c2luZyBzdGFuZGFyZCBKU09OIHN5bnRheCBmb3IgbmVzdGVkIHByb3BlcnRpZXMuICBOb3RlIHRoYXQgaWYgYQorICAgIHByb3BlcnR5IG5hbWUgaXRzZWxmIGNvbnRhaW5zICcuJywgaXQgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbgorICAgIGRvdWJsZSBxdW90ZXMuCisgICAgIiIiCisgICAgc3BsaXR0YWJsZV9wcm9wZXJ0eSA9ICIiCisgICAgaW5fcXVvdGVzID0gRmFsc2UKKyAgICBmb3IgYyBpbiBwcm9wZXJ0eToKKyAgICAgICAgaWYgYyA9PSAnLicgYW5kIG5vdCBpbl9xdW90ZXM6CisgICAgICAgICAgICBzcGxpdHRhYmxlX3Byb3BlcnR5ICs9ICdcbicKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGMgPT0gJyInOgorICAgICAgICAgICAgaW5fcXVvdGVzID0gbm90IGluX3F1b3RlcworICAgICAgICBzcGxpdHRhYmxlX3Byb3BlcnR5ICs9IGMKKworICAgIHNwbGl0X3Byb3BlcnRpZXMgPSBzcGxpdHRhYmxlX3Byb3BlcnR5LnNwbGl0KCdcbicpCisKKyAgICBpZiBsZW4oc3BsaXRfcHJvcGVydGllcykgPiAxOgorICAgICAgICByZXR1cm4gc3BsaXRfcHJvcGVydGllcworCisgICAgcmV0dXJuIE5vbmUKKworCitkZWYgZmluZF9pbnB1dF9saW5lX2dyb3VwKHN1YnN0cmluZywgaW5wdXRfbGluZXMpOgorICAgICIiIgorICAgIEZpbmQgYW5kIHJldHVybiB0aGUgSW5wdXRMaW5lR3JvdXAgY29udGFpbmluZyB0aGUgc3BlY2lmaWVkIHN1YnN0cmluZy4KKyAgICAiIiIKKyAgICBmb3IgbGluZSBpbiBpbnB1dF9saW5lczoKKyAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBJbnB1dExpbmVHcm91cCk6CisgICAgICAgICAgICBpZiBzdWJzdHJpbmcgaW4gbGluZS5ncm91cFswXS5saW5lOgorICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCisKKyAgICByZXR1cm4gTm9uZQorCisKK2RlZiBmaW5kX2lucHV0X2xpbmUobmFtZSwgaW5wdXRfbGluZXMpOgorICAgICIiIgorICAgIEZpbmQgdGhlIGlucHV0IGxpbmUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuCisgICAgIiIiCisgICAgZm9yIGxpbmUgaW4gaW5wdXRfbGluZXM6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwgSW5wdXRMaW5lR3JvdXApOgorICAgICAgICAgICAgbCA9IGZpbmRfaW5wdXRfbGluZShuYW1lLCBsaW5lLmdyb3VwKQorICAgICAgICAgICAgaWYgbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbAorCisgICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwgSW5wdXRMaW5lKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnByb3BzWyJuYW1lIl0gPT0gbmFtZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnByb3BzWyJuYW1lIl0gKyAiXyIgKyBsaW5lLnByb3BzWyJuYW1lYXBwZW5kIl0gPT0gbmFtZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICByZXR1cm4gTm9uZQorCisKK2RlZiBwcmludF92YWx1ZXModHlwZSwgdmFsdWVzX2xpc3QpOgorICAgICIiIgorICAgIFByaW50IHRoZSB2YWx1ZXMgaW4gdGhlIGdpdmVuIGxpc3Qgb2YgdmFsdWVzLgorICAgICIiIgorICAgIGlmIHR5cGUgPT0gImNob2ljZWxpc3QiOgorICAgICAgICBmb3IgdmFsdWUgaW4gdmFsdWVzX2xpc3Q6CisgICAgICAgICAgICBwcmludCAiW1wiJXNcIiwgXCIlc1wiXSIgJSAodmFsdWVbMF0sIHZhbHVlWzFdKQorICAgIGVsaWYgdHlwZSA9PSAiYm9vbGVhbiI6CisgICAgICAgIGZvciB2YWx1ZSBpbiB2YWx1ZXNfbGlzdDoKKyAgICAgICAgICAgIHByaW50ICJbXCIlc1wiLCBcIiVzXCJdIiAlICh2YWx1ZVswXSwgdmFsdWVbMV0pCisKKworZGVmIHlvY3RvX2xheWVyX2xpc3RfcHJvcGVydHlfdmFsdWVzKGFyY2gsIHByb3BlcnR5LCBzY3JpcHRzX3BhdGgsIHByb3BlcnRpZXNfZmlsZSwgZXhwYW5kX2NvbW1vbj1UcnVlKToKKyAgICAiIiIKKyAgICBMaXN0IHRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIGEgZ2l2ZW4gaW5wdXQgcHJvcGVydHkuICBJZgorICAgIHByb3BlcnRpZXNfZmlsZSBpcyBub24tbnVsbCwgd3JpdGUgdGhlIGNvbXBsZXRlIHNldCBvZiBwcm9wZXJ0aWVzCisgICAgYXMgYSBKU09OIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIGFuIGFycmF5IG9mIHBvc3NpYmxlIHZhbHVlcy4KKyAgICAiIiIKKyAgICBjb250ZXh0ID0gY3JlYXRlX2NvbnRleHQoInVudXNlZCIsIGFyY2gsIHNjcmlwdHNfcGF0aCkKKyAgICBjb250ZXh0WyJuYW1lIl0gPSBwcm9wZXJ0eQorCisgICAgdGFyZ2V0X2ZpbGVzID0gZXhwYW5kX3RhcmdldHMoY29udGV4dCwgInVudXNlZCIsIGV4cGFuZF9jb21tb24pCisKKyAgICBpbnB1dF9saW5lcyA9IGdhdGhlcl9pbnB1dGxpbmVzKHRhcmdldF9maWxlcykKKworICAgIHByb3BlcnRpZXMgPSBnZXRfcHJvcGVydGllcyhpbnB1dF9saW5lcykKKworICAgIG5lc3RlZF9wcm9wZXJ0aWVzID0gc3BsaXRfbmVzdGVkX3Byb3BlcnR5KHByb3BlcnR5KQorICAgIGlmIG5lc3RlZF9wcm9wZXJ0aWVzOgorICAgICAgICAjIGN1cnJlbnRseSB0aGUgb3V0ZXIgcHJvcGVydHkgb2YgYSBuZXN0ZWQgcHJvcGVydHkgYWx3YXlzCisgICAgICAgICMgY29ycmVzcG9uZHMgdG8gYW4gaW5wdXQgbGluZSBncm91cAorICAgICAgICBpbnB1dF9saW5lX2dyb3VwID0gZmluZF9pbnB1dF9saW5lX2dyb3VwKG5lc3RlZF9wcm9wZXJ0aWVzWzBdLCBpbnB1dF9saW5lcykKKyAgICAgICAgaWYgaW5wdXRfbGluZV9ncm91cDoKKyAgICAgICAgICAgIGlucHV0X2xpbmVzWzpdID0gaW5wdXRfbGluZV9ncm91cC5ncm91cFsxOl0KKyAgICAgICAgICAgICMgVGhlIGlubmVyIHByb3BlcnR5IG9mIGEgbmVzdGVkIHByb3BlcnR5IG5hbWUgaXMgdGhlCisgICAgICAgICAgICAjIGFjdHVhbCBwcm9wZXJ0eSBuYW1lIHdlIHdhbnQsIHNvIHJlc2V0IHRvIHRoYXQKKyAgICAgICAgICAgIHByb3BlcnR5ID0gbmVzdGVkX3Byb3BlcnRpZXNbMV0KKworICAgIGlucHV0X2xpbmUgPSBmaW5kX2lucHV0X2xpbmUocHJvcGVydHksIGlucHV0X2xpbmVzKQorICAgIGlmIG5vdCBpbnB1dF9saW5lOgorICAgICAgICBwcmludCAiQ291bGRuJ3QgZmluZCB2YWx1ZXMgZm9yIHByb3BlcnR5ICVzIiAlIHByb3BlcnR5CisgICAgICAgIHJldHVybgorCisgICAgdmFsdWVzX2xpc3QgPSBbXQorCisgICAgdHlwZSA9IGlucHV0X2xpbmUucHJvcHNbInR5cGUiXQorICAgIGlmIHR5cGUgPT0gImJvb2xlYW4iOgorICAgICAgICB2YWx1ZXNfbGlzdC5hcHBlbmQoWyJ5IiwgIm4iXSkKKyAgICBlbGlmIHR5cGUgPT0gImNob2ljZWxpc3QiIG9yIHR5cGUgPT0gImNoZWNrbGlzdCI6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGdlbl9mbiA9IGlucHV0X2xpbmUucHJvcHNbImdlbiJdCisgICAgICAgICAgICBpZiBuZXN0ZWRfcHJvcGVydGllczoKKyAgICAgICAgICAgICAgICBjb250ZXh0WyJmaWxlbmFtZSJdID0gbmVzdGVkX3Byb3BlcnRpZXNbMF0KKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbImJyYW5jaGVzX2Jhc2UiXSA9IGlucHV0X2xpbmUucHJvcHNbImJyYW5jaGVzX2Jhc2UiXQorICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dFsiYnJhbmNoZXNfYmFzZSJdID0gTm9uZQorICAgICAgICAgICAgdmFsdWVzX2xpc3QgPSBpbnB1dF9saW5lLmdlbl9jaG9pY2VzX2xpc3QoY29udGV4dCwgRmFsc2UpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGZvciBjaG9pY2UgaW4gaW5wdXRfbGluZS5jaG9pY2VzOgorICAgICAgICAgICAgICAgIGNob2ljZXBhaXIgPSBbXQorICAgICAgICAgICAgICAgIGNob2ljZXBhaXIuYXBwZW5kKGNob2ljZS52YWwpCisgICAgICAgICAgICAgICAgY2hvaWNlcGFpci5hcHBlbmQoY2hvaWNlLmRlc2MpCisgICAgICAgICAgICAgICAgdmFsdWVzX2xpc3QuYXBwZW5kKGNob2ljZXBhaXIpCisKKyAgICBpZiBwcm9wZXJ0aWVzX2ZpbGU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9mID0gb3Blbihwcm9wZXJ0aWVzX2ZpbGUsICJ3IikKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBwcmludCAiQ291bGRuJ3Qgb3BlbiBwcm9wZXJ0aWVzIGZpbGUgJXMgZm9yIHdyaXRpbmcsIGV4aXRpbmciICUgcHJvcGVydGllc19maWxlCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIGpzb24uZHVtcCh2YWx1ZXNfbGlzdCwgb2YpCisgICAgCisgICAgcHJpbnRfdmFsdWVzKHR5cGUsIHZhbHVlc19saXN0KQorCisKK2RlZiB5b2N0b19ic3BfbGlzdChhcmdzLCBzY3JpcHRzX3BhdGgsIHByb3BlcnRpZXNfZmlsZSk6CisgICAgIiIiCisgICAgUHJpbnQgYXZhaWxhYmxlIGFyY2hpdGVjdHVyZXMsIG9yIHRoZSBjb21wbGV0ZSBsaXN0IG9mIHByb3BlcnRpZXMKKyAgICBkZWZpbmVkIGJ5IHRoZSBCU1AsIG9yIHRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIGEgcGFydGljdWxhciBCU1AKKyAgICBwcm9wZXJ0eS4KKyAgICAiIiIKKyAgICBpZiBsZW4oYXJncykgPCAxOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmIGFyZ3NbMF0gPT0gImthcmNoIjoKKyAgICAgICAgbGliX3BhdGggPSBzY3JpcHRzX3BhdGggKyAnL2xpYicKKyAgICAgICAgYnNwX3BhdGggPSBsaWJfcGF0aCArICcvYnNwJworICAgICAgICBhcmNoX3BhdGggPSBic3BfcGF0aCArICcvc3Vic3RyYXRlL3RhcmdldC9hcmNoJworICAgICAgICBwcmludCAiQXJjaGl0ZWN0dXJlcyBhdmFpbGFibGU6IgorICAgICAgICBmb3IgYXJjaCBpbiBvcy5saXN0ZGlyKGFyY2hfcGF0aCk6CisgICAgICAgICAgICBpZiBhcmNoID09ICJjb21tb24iIG9yIGFyY2ggPT0gImxheWVyIjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcHJpbnQgIiAgICAlcyIgJSBhcmNoCisgICAgICAgIHJldHVybiBUcnVlCisgICAgZWxzZToKKyAgICAgICAgYXJjaCA9IGFyZ3NbMF0KKworICAgIGlmIGxlbihhcmdzKSA8IDIgb3IgbGVuKGFyZ3MpID4gMzoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBsZW4oYXJncykgPT0gMjoKKyAgICAgICAgaWYgYXJnc1sxXSA9PSAicHJvcGVydGllcyI6CisgICAgICAgICAgICB5b2N0b19sYXllcl9saXN0X3Byb3BlcnRpZXMoYXJjaCwgc2NyaXB0c19wYXRoLCBwcm9wZXJ0aWVzX2ZpbGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmIGxlbihhcmdzKSA9PSAzOgorICAgICAgICBpZiBhcmdzWzFdID09ICJwcm9wZXJ0eSI6CisgICAgICAgICAgICB5b2N0b19sYXllcl9saXN0X3Byb3BlcnR5X3ZhbHVlcyhhcmNoLCBhcmdzWzJdLCBzY3JpcHRzX3BhdGgsIHByb3BlcnRpZXNfZmlsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgcmV0dXJuIFRydWUKKworCitkZWYgeW9jdG9fbGF5ZXJfbGlzdChhcmdzLCBzY3JpcHRzX3BhdGgsIHByb3BlcnRpZXNfZmlsZSk6CisgICAgIiIiCisgICAgUHJpbnQgdGhlIGNvbXBsZXRlIGxpc3Qgb2YgaW5wdXQgcHJvcGVydGllcyBkZWZpbmVkIGJ5IHRoZSBsYXllciwKKyAgICBvciB0aGUgcG9zc2libGUgdmFsdWVzIGZvciBhIHBhcnRpY3VsYXIgbGF5ZXIgcHJvcGVydHkuCisgICAgIiIiCisgICAgaWYgbGVuKGFyZ3MpIDwgMToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBsZW4oYXJncykgPCAxIG9yIGxlbihhcmdzKSA+IDI6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgaWYgbGVuKGFyZ3MpID09IDE6CisgICAgICAgIGlmIGFyZ3NbMF0gPT0gInByb3BlcnRpZXMiOgorICAgICAgICAgICAgeW9jdG9fbGF5ZXJfbGlzdF9wcm9wZXJ0aWVzKCJsYXllciIsIHNjcmlwdHNfcGF0aCwgcHJvcGVydGllc19maWxlLCBGYWxzZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgaWYgbGVuKGFyZ3MpID09IDI6CisgICAgICAgIGlmIGFyZ3NbMF0gPT0gInByb3BlcnR5IjoKKyAgICAgICAgICAgIHlvY3RvX2xheWVyX2xpc3RfcHJvcGVydHlfdmFsdWVzKCJsYXllciIsIGFyZ3NbMV0sIHNjcmlwdHNfcGF0aCwgcHJvcGVydGllc19maWxlLCBGYWxzZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgcmV0dXJuIFRydWUKKworCitkZWYgbWFwX3N0YW5kYXJkX2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpOgorICAgICIiIgorICAgIFJldHVybiB0aGUgbGludXgteW9jdG8gYnNwIGJyYW5jaCB0byB1c2Ugd2l0aCB0aGUgc3BlY2lmaWVkCisgICAga2JyYW5jaC4gIFRoaXMgaGFuZGxlcyB0aGUgLXN0YW5kYXJkIHZhcmlhbnRzIGZvciAzLjQgYW5kIDMuODsgdGhlCisgICAgb3RoZXIgdmFyaWFudHMgZG9uJ3QgbmVlZCBtYXBwaW5ncy4KKyAgICAiIiIKKyAgICBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjoKKyAgICAgICAga2JyYW5jaCA9IG5ld19rYnJhbmNoCisgICAgZWxzZToKKyAgICAgICAga2JyYW5jaCA9IGV4aXN0aW5nX2ticmFuY2gKKworICAgIGlmIGticmFuY2guc3RhcnRzd2l0aCgic3RhbmRhcmQvY29tbW9uLXBjLTY0Iik6CisgICAgICAgIHJldHVybiAiYnNwL2NvbW1vbi1wYy02NC9jb21tb24tcGMtNjQtc3RhbmRhcmQuc2NjIgorICAgIGlmIGticmFuY2guc3RhcnRzd2l0aCgic3RhbmRhcmQvY29tbW9uLXBjIik6CisgICAgICAgIHJldHVybiAiYnNwL2NvbW1vbi1wYy9jb21tb24tcGMtc3RhbmRhcmQuc2NjIgorICAgIGVsc2U6CisgICAgICAgIHJldHVybiAia3R5cGVzL3N0YW5kYXJkL3N0YW5kYXJkLnNjYyIKKworCitkZWYgbWFwX3ByZWVtcHRfcnRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCk6CisgICAgIiIiCisgICAgUmV0dXJuIHRoZSBsaW51eC15b2N0byBic3AgYnJhbmNoIHRvIHVzZSB3aXRoIHRoZSBzcGVjaWZpZWQKKyAgICBrYnJhbmNoLiAgVGhpcyBoYW5kbGVzIHRoZSAtcHJlZW1wdC1ydCB2YXJpYW50cyBmb3IgMy40IGFuZCAzLjg7CisgICAgdGhlIG90aGVyIHZhcmlhbnRzIGRvbid0IG5lZWQgbWFwcGluZ3MuCisgICAgIiIiCisgICAgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6CisgICAgICAgIGticmFuY2ggPSBuZXdfa2JyYW5jaAorICAgIGVsc2U6CisgICAgICAgIGticmFuY2ggPSBleGlzdGluZ19rYnJhbmNoCisKKyAgICBpZiBrYnJhbmNoLnN0YXJ0c3dpdGgoInN0YW5kYXJkL3ByZWVtcHQtcnQvY29tbW9uLXBjLTY0Iik6CisgICAgICAgIHJldHVybiAiYnNwL2NvbW1vbi1wYy02NC9jb21tb24tcGMtNjQtcHJlZW1wdC1ydC5zY2MiCisgICAgaWYga2JyYW5jaC5zdGFydHN3aXRoKCJzdGFuZGFyZC9wcmVlbXB0LXJ0L2NvbW1vbi1wYyIpOgorICAgICAgICByZXR1cm4gImJzcC9jb21tb24tcGMvY29tbW9uLXBjLXByZWVtcHQtcnQuc2NjIgorICAgIGVsc2U6CisgICAgICAgIHJldHVybiAia3R5cGVzL3ByZWVtcHQtcnQvcHJlZW1wdC1ydC5zY2MiCisKKworZGVmIG1hcF90aW55X2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpOgorICAgICIiIgorICAgIFJldHVybiB0aGUgbGludXgteW9jdG8gYnNwIGJyYW5jaCB0byB1c2Ugd2l0aCB0aGUgc3BlY2lmaWVkCisgICAga2JyYW5jaC4gIFRoaXMgaGFuZGxlcyB0aGUgLXRpbnkgdmFyaWFudHMgZm9yIDMuNCBhbmQgMy44OyB0aGUKKyAgICBvdGhlciB2YXJpYW50cyBkb24ndCBuZWVkIG1hcHBpbmdzLgorICAgICIiIgorICAgIGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOgorICAgICAgICBrYnJhbmNoID0gbmV3X2ticmFuY2gKKyAgICBlbHNlOgorICAgICAgICBrYnJhbmNoID0gZXhpc3Rpbmdfa2JyYW5jaAorCisgICAgaWYga2JyYW5jaC5zdGFydHN3aXRoKCJzdGFuZGFyZC90aW55L2NvbW1vbi1wYyIpOgorICAgICAgICByZXR1cm4gImJzcC9jb21tb24tcGMvY29tbW9uLXBjLXRpbnkuc2NjIgorICAgIGVsc2U6CisgICAgICAgIHJldHVybiAia3R5cGVzL3RpbnkvdGlueS5zY2MiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9oZWxwLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3AvaGVscC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2NlMTAwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3AvaGVscC5weQpAQCAtMCwwICsxLDEwNDQgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBERVNDUklQVElPTgorIyBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHNvbWUgYmFzaWMgaGVscCBpbnZvY2F0aW9uIGZ1bmN0aW9ucyBhbG9uZworIyB3aXRoIHRoZSBidWxrIG9mIHRoZSBoZWxwIHRvcGljIHRleHQgZm9yIHRoZSBZb2N0byBCU1AgVG9vbHMuCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gaW50ZWwuY29tPgorIworCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IGxvZ2dpbmcKKworCitkZWYgc3ViY29tbWFuZF9lcnJvcihhcmdzKToKKyAgICBsb2dnaW5nLmluZm8oImludmFsaWQgc3ViY29tbWFuZCAlcyIgJSBhcmdzWzBdKQorCisKK2RlZiBkaXNwbGF5X2hlbHAoc3ViY29tbWFuZCwgc3ViY29tbWFuZHMpOgorICAgICIiIgorICAgIERpc3BsYXkgaGVscCBmb3Igc3ViY29tbWFuZC4KKyAgICAiIiIKKyAgICBpZiBzdWJjb21tYW5kIG5vdCBpbiBzdWJjb21tYW5kczoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBoZWxwID0gc3ViY29tbWFuZHMuZ2V0KHN1YmNvbW1hbmQsIHN1YmNvbW1hbmRfZXJyb3IpWzJdCisgICAgcGFnZXIgPSBzdWJwcm9jZXNzLlBvcGVuKCdsZXNzJywgc3RkaW49c3VicHJvY2Vzcy5QSVBFKQorICAgIHBhZ2VyLmNvbW11bmljYXRlKGhlbHApCisKKyAgICByZXR1cm4gVHJ1ZQorCisKK2RlZiB5b2N0b19oZWxwKGFyZ3MsIHVzYWdlX3N0ciwgc3ViY29tbWFuZHMpOgorICAgICIiIgorICAgIFN1YmNvbW1hbmQgaGVscCBkaXNwYXRjaGVyLgorICAgICIiIgorICAgIGlmIGxlbihhcmdzKSA9PSAxIG9yIG5vdCBkaXNwbGF5X2hlbHAoYXJnc1sxXSwgc3ViY29tbWFuZHMpOgorICAgICAgICBwcmludCh1c2FnZV9zdHIpCisKKworZGVmIGludm9rZV9zdWJjb21tYW5kKGFyZ3MsIHBhcnNlciwgbWFpbl9jb21tYW5kX3VzYWdlLCBzdWJjb21tYW5kcyk6CisgICAgIiIiCisgICAgRGlzcGF0Y2ggdG8gc3ViY29tbWFuZCBoYW5kbGVyIGJvcnJvd2VkIGZyb20gY29tYm8tbGF5ZXIuCisgICAgU2hvdWxkIHVzZSBhcmdwYXJzZSwgYnV0IGhhcyB0byB3b3JrIGluIDIuNi4KKyAgICAiIiIKKyAgICBpZiBub3QgYXJnczoKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiTm8gc3ViY29tbWFuZCBzcGVjaWZpZWQsIGV4aXRpbmciKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgZWxpZiBhcmdzWzBdID09ICJoZWxwIjoKKyAgICAgICAgeW9jdG9faGVscChhcmdzLCBtYWluX2NvbW1hbmRfdXNhZ2UsIHN1YmNvbW1hbmRzKQorICAgIGVsaWYgYXJnc1swXSBub3QgaW4gc3ViY29tbWFuZHM6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIlVuc3VwcG9ydGVkIHN1YmNvbW1hbmQgJXMsIGV4aXRpbmdcbiIgJSAoYXJnc1swXSkpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICBlbHNlOgorICAgICAgICB1c2FnZSA9IHN1YmNvbW1hbmRzLmdldChhcmdzWzBdLCBzdWJjb21tYW5kX2Vycm9yKVsxXQorICAgICAgICBzdWJjb21tYW5kcy5nZXQoYXJnc1swXSwgc3ViY29tbWFuZF9lcnJvcilbMF0oYXJnc1sxOl0sIHVzYWdlKQorCisKKyMjCisjIHlvY3RvLWJzcCBoZWxwIGFuZCB1c2FnZSBzdHJpbmdzCisjIworCit5b2N0b19ic3BfdXNhZ2UgPSAiIiIKKworIENyZWF0ZSBhIGN1c3RvbWl6ZWQgWW9jdG8gQlNQIGxheWVyLgorCisgdXNhZ2U6IHlvY3RvLWJzcCBbLS12ZXJzaW9uXSBbLS1oZWxwXSBDT01NQU5EIFtBUkdTXQorCisgQ3VycmVudCAneW9jdG8tYnNwJyBjb21tYW5kcyBhcmU6CisgICAgY3JlYXRlICAgICAgICAgICAgQ3JlYXRlIGEgbmV3IFlvY3RvIEJTUAorICAgIGxpc3QgICAgICAgICAgICAgIExpc3QgYXZhaWxhYmxlIHZhbHVlcyBmb3Igb3B0aW9ucyBhbmQgQlNQIHByb3BlcnRpZXMKKworIFNlZSAneW9jdG8tYnNwIGhlbHAgQ09NTUFORCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYSBzcGVjaWZpYyBjb21tYW5kLgorIiIiCisKK3lvY3RvX2JzcF9oZWxwX3VzYWdlID0gIiIiCisKKyB1c2FnZTogeW9jdG8tYnNwIGhlbHAgPHN1YmNvbW1hbmQ+CisKKyBUaGlzIGNvbW1hbmQgZGlzcGxheXMgZGV0YWlsZWQgaGVscCBmb3IgdGhlIHNwZWNpZmllZCBzdWJjb21tYW5kLgorIiIiCisKK3lvY3RvX2JzcF9jcmVhdGVfdXNhZ2UgPSAiIiIKKworIENyZWF0ZSBhIG5ldyBZb2N0byBCU1AKKworIHVzYWdlOiB5b2N0by1ic3AgY3JlYXRlIDxic3AtbmFtZT4gPGthcmNoPiBbLW8gPERJUk5BTUU+IHwgLS1vdXRkaXIgPERJUk5BTUU+XQorICAgICAgICAgICAgWy1pIDxKU09OIFBST1BFUlRZIEZJTEU+IHwgLS1pbmZpbGUgPEpTT04gUFJPUEVSVFlfRklMRT5dCisKKyBUaGlzIGNvbW1hbmQgY3JlYXRlcyBhIFlvY3RvIEJTUCBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMuCisgVGhlIG5ldyBCU1Agd2lsbCBiZSBhIG5ldyBZb2N0byBCU1AgbGF5ZXIgY29udGFpbmVkIGJ5IGRlZmF1bHQgd2l0aGluCisgdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgc3BlY2lmaWVkIGFzICdtZXRhLWJzcC1uYW1lJy4gIFRoZSAtbyBvcHRpb24KKyBjYW4gYmUgdXNlZCB0byBwbGFjZSB0aGUgQlNQIGxheWVyIGluIGEgZGlyZWN0b3J5IHdpdGggYSBkaWZmZXJlbnQKKyBuYW1lIGFuZCBsb2NhdGlvbi4KKworIFRoZSB2YWx1ZSBvZiB0aGUgJ2thcmNoJyBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB0aGUgc2V0IG9mIGZpbGVzIHRoYXQKKyB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgdGhlIEJTUCwgYWxvbmcgd2l0aCB0aGUgc3BlY2lmaWMgc2V0IG9mCisgJ3Byb3BlcnRpZXMnIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGZpbGwgb3V0IHRoZSBCU1Atc3BlY2lmaWMgcG9ydGlvbnMKKyBvZiB0aGUgQlNQLiAgVGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlICdrYXJjaCcgcGFyYW10ZXIgY2FuIGJlCisgbGlzdGVkIHZpYSAneW9jdG8tYnNwIGxpc3Qga2FyY2gnLgorCisgTk9URTogT25jZSBjcmVhdGVkLCB5b3Ugc2hvdWxkIGFkZCB5b3VyIG5ldyBsYXllciB0byB5b3VyCisgYmJsYXllcnMuY29uZiBmaWxlIGluIG9yZGVyIGZvciBpdCB0byBiZSBzdWJzZXF1ZW50bHkgc2VlbiBhbmQKKyBtb2RpZmllZCBieSB0aGUgeW9jdG8ta2VybmVsIHRvb2wuCisKKyBTZWUgJ3lvY3RvIGJzcCBoZWxwIGNyZWF0ZScgZm9yIG1vcmUgZGV0YWlsZWQgaW5zdHJ1Y3Rpb25zLgorIiIiCisKK3lvY3RvX2JzcF9jcmVhdGVfaGVscCA9ICIiIgorCitOQU1FCisgICAgeW9jdG8tYnNwIGNyZWF0ZSAtIENyZWF0ZSBhIG5ldyBZb2N0byBCU1AKKworU1lOT1BTSVMKKyAgICB5b2N0by1ic3AgY3JlYXRlIDxic3AtbmFtZT4gPGthcmNoPiBbLW8gPERJUk5BTUU+IHwgLS1vdXRkaXIgPERJUk5BTUU+XQorICAgICAgICBbLWkgPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtLWluZmlsZSA8SlNPTiBQUk9QRVJUWV9GSUxFPl0KKworREVTQ1JJUFRJT04KKyAgICBUaGlzIGNvbW1hbmQgY3JlYXRlcyBhIFlvY3RvIEJTUCBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkCisgICAgcGFyYW1ldGVycy4gIFRoZSBuZXcgQlNQIHdpbGwgYmUgYSBuZXcgWW9jdG8gQlNQIGxheWVyIGNvbnRhaW5lZAorICAgIGJ5IGRlZmF1bHQgd2l0aGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IHNwZWNpZmllZCBhcworICAgICdtZXRhLWJzcC1uYW1lJy4gIFRoZSAtbyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcGxhY2UgdGhlIEJTUCBsYXllcgorICAgIGluIGEgZGlyZWN0b3J5IHdpdGggYSBkaWZmZXJlbnQgbmFtZSBhbmQgbG9jYXRpb24uCisKKyAgICBUaGUgdmFsdWUgb2YgdGhlICdrYXJjaCcgcGFyYW1ldGVyIGRldGVybWluZXMgdGhlIHNldCBvZiBmaWxlcworICAgIHRoYXQgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIHRoZSBCU1AsIGFsb25nIHdpdGggdGhlIHNwZWNpZmljIHNldCBvZgorICAgICdwcm9wZXJ0aWVzJyB0aGF0IHdpbGwgYmUgdXNlZCB0byBmaWxsIG91dCB0aGUgQlNQLXNwZWNpZmljCisgICAgcG9ydGlvbnMgb2YgdGhlIEJTUC4gIFRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSAna2FyY2gnIHBhcmFtdGVyCisgICAgY2FuIGJlIGxpc3RlZCB2aWEgJ3lvY3RvLWJzcCBsaXN0IGthcmNoJy4KKworICAgIFRoZSBCU1Atc3BlY2lmaWMgcHJvcGVydGllcyB0aGF0IGRlZmluZSB0aGUgdmFsdWVzIHRoYXQgd2lsbCBiZQorICAgIHVzZWQgdG8gZ2VuZXJhdGUgYSBwYXJ0aWN1bGFyIEJTUCBjYW4gYmUgc3BlY2lmaWVkIG9uIHRoZQorICAgIGNvbW1hbmQtbGluZSB1c2luZyB0aGUgLWkgb3B0aW9uIGFuZCBzdXBwbHlpbmcgYSBKU09OIG9iamVjdAorICAgIGNvbnNpc3Rpbmcgb2YgdGhlIHNldCBvZiBuYW1lOnZhbHVlIHBhaXJzIG5lZWRlZCBieSB0aGUgQlNQLgorCisgICAgSWYgdGhlIC1pIG9wdGlvbiBpcyBub3QgdXNlZCwgdGhlIHVzZXIgd2lsbCBiZSBpbnRlcmFjdGl2ZWx5CisgICAgcHJvbXB0ZWQgZm9yIGVhY2ggb2YgdGhlIHJlcXVpcmVkIHByb3BlcnR5IHZhbHVlcywgd2hpY2ggd2lsbCB0aGVuCisgICAgYmUgdXNlZCBhcyB2YWx1ZXMgZm9yIEJTUCBnZW5lcmF0aW9uLgorCisgICAgVGhlIHNldCBvZiBwcm9wZXJ0aWVzIGF2YWlsYWJsZSBmb3IgYSBnaXZlbiBhcmNoaXRlY3R1cmUgY2FuIGJlCisgICAgbGlzdGVkIHVzaW5nIHRoZSAneW9jdG8tYnNwIGxpc3QnIGNvbW1hbmQuCisKKyAgICBTcGVjaWZ5aW5nIC1jIGNhdXNlcyB0aGUgUHl0aG9uIGNvZGUgZ2VuZXJhdGVkIGFuZCBleGVjdXRlZCB0bworICAgIGNyZWF0ZSB0aGUgQlNQIHRvIGJlIGR1bXBlZCB0byB0aGUgJ2JzcGdlbi5vdXQnIGZpbGUgaW4gdGhlCisgICAgY3VycmVudCBkaXJlY3RvcnksIGFuZCBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZy4KKworICAgIE5PVEU6IE9uY2UgY3JlYXRlZCwgeW91IHNob3VsZCBhZGQgeW91ciBuZXcgbGF5ZXIgdG8geW91cgorICAgIGJibGF5ZXJzLmNvbmYgZmlsZSBpbiBvcmRlciBmb3IgaXQgdG8gYmUgc3Vic2VxdWVudGx5IHNlZW4gYW5kCisgICAgbW9kaWZpZWQgYnkgdGhlIHlvY3RvLWtlcm5lbCB0b29sLgorCisgICAgRm9yIGV4YW1wbGUsIGFzc3VtaW5nIHlvdXIgcG9reSByZXBvIGlzIGF0IC9wYXRoL3RvL3Bva3ksIHlvdXIgbmV3CisgICAgQlNQIGxheWVyIGlzIGF0IC9wYXRoL3RvL3Bva3kvbWV0YS1teWJzcCwgYW5kIHlvdXIgYnVpbGQgZGlyZWN0b3J5CisgICAgaXMgL3BhdGgvdG8vYnVpbGQ6CisKKyAgICAkIGdlZGl0IC9wYXRoL3RvL2J1aWxkL2NvbmYvYmJsYXllcnMuY29uZgorCisgICAgQkJMQVlFUlMgPz0gIiBcXAorICAgICAgL3BhdGgvdG8vcG9reS9tZXRhIFxcCisgICAgICAvcGF0aC90by9wb2t5L21ldGEteW9jdG8gXFwKKyAgICAgIC9wYXRoL3RvL3Bva3kvbWV0YS1teWJzcCBcXAorICAgICAgIgorIiIiCisKK3lvY3RvX2JzcF9saXN0X3VzYWdlID0gIiIiCisKKyB1c2FnZTogeW9jdG8tYnNwIGxpc3Qga2FyY2gKKyAgICAgICAgeW9jdG8tYnNwIGxpc3QgPGthcmNoPiBwcm9wZXJ0aWVzCisgICAgICAgICAgICAgICAgWy1vIDxKU09OIFBST1BFUlRZIEZJTEU+IHwgLS1vdXRmaWxlIDxKU09OIFBST1BFUlRZX0ZJTEU+XQorICAgICAgICB5b2N0by1ic3AgbGlzdCA8a2FyY2g+IHByb3BlcnR5IDx4eHg+CisgICAgICAgICAgICAgICAgWy1vIDxKU09OIFBST1BFUlRZIEZJTEU+IHwgLS1vdXRmaWxlIDxKU09OIFBST1BFUlRZX0ZJTEU+XQorCisgVGhpcyBjb21tYW5kIGVudW1lcmF0ZXMgdGhlIGNvbXBsZXRlIHNldCBvZiBwb3NzaWJsZSB2YWx1ZXMgZm9yIGEKKyBzcGVjaWZpZWQgb3B0aW9uIG9yIHByb3BlcnR5IG5lZWRlZCBieSB0aGUgQlNQIGNyZWF0aW9uIHByb2Nlc3MuCisKKyBUaGUgZmlyc3QgZm9ybSBlbnVtZXJhdGVzIGFsbCB0aGUgcG9zc2libGUgdmFsdWVzIHRoYXQgZXhpc3QgYW5kIGNhbgorIGJlIHNwZWNpZmllZCBmb3IgdGhlICdrYXJjaCcgcGFyYW1ldGVyIHRvIHRoZSAneW9jdG8gYnNwIGNyZWF0ZScKKyBjb21tYW5kLgorCisgVGhlIHNlY29uZCBmb3JtIGVudW1lcmF0ZXMgYWxsIHRoZSBwb3NzaWJsZSBwcm9wZXJ0aWVzIHRoYXQgZXhpc3QgYW5kCisgbXVzdCBoYXZlIHZhbHVlcyBzcGVjaWZpZWQgZm9yIHRoZW0gaW4gdGhlICd5b2N0byBic3AgY3JlYXRlJyBjb21tYW5kCisgZm9yIHRoZSBnaXZlbiAna2FyY2gnLgorCisgVGhlIHRoaXJkIGZvcm0gZW51bWVyYXRlcyBhbGwgdGhlIHBvc3NpYmxlIHZhbHVlcyB0aGF0IGV4aXN0IGFuZCBjYW4KKyBiZSBzcGVjaWZpZWQgZm9yIGFueSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlbgorICdrYXJjaCcgaW4gdGhlICd5b2N0byBic3AgY3JlYXRlJyBjb21tYW5kLgorCisgU2VlICd5b2N0by1ic3AgaGVscCBsaXN0JyBmb3IgbW9yZSBkZXRhaWxzLgorIiIiCisKK3lvY3RvX2JzcF9saXN0X2hlbHAgPSAiIiIKKworTkFNRQorICAgIHlvY3RvLWJzcCBsaXN0IC0gTGlzdCBhdmFpbGFibGUgdmFsdWVzIGZvciBvcHRpb25zIGFuZCBCU1AgcHJvcGVydGllcworCitTWU5PUFNJUworICAgIHlvY3RvLWJzcCBsaXN0IGthcmNoCisgICAgeW9jdG8tYnNwIGxpc3QgPGthcmNoPiBwcm9wZXJ0aWVzCisgICAgICAgICAgICBbLS1vIDxKU09OIFBST1BFUlRZIEZJTEU+IHwgLW91dGZpbGUgPEpTT04gUFJPUEVSVFlfRklMRT5dCisgICAgeW9jdG8tYnNwIGxpc3QgPGthcmNoPiBwcm9wZXJ0eSA8eHh4PgorICAgICAgICAgICAgWy0tbyA8SlNPTiBQUk9QRVJUWSBGSUxFPiB8IC1vdXRmaWxlIDxKU09OIFBST1BFUlRZX0ZJTEU+XQorCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCBlbnVtZXJhdGVzIHRoZSBjb21wbGV0ZSBzZXQgb2YgcG9zc2libGUgdmFsdWVzIGZvciBhCisgICAgc3BlY2lmaWVkIG9wdGlvbiBvciBwcm9wZXJ0eSBuZWVkZWQgYnkgdGhlIEJTUCBjcmVhdGlvbiBwcm9jZXNzLgorCisgICAgVGhlIGZpcnN0IGZvcm0gZW51bWVyYXRlcyBhbGwgdGhlIHBvc3NpYmxlIHZhbHVlcyB0aGF0IGV4aXN0IGFuZAorICAgIGNhbiBiZSBzcGVjaWZpZWQgZm9yIHRoZSAna2FyY2gnIHBhcmFtZXRlciB0byB0aGUgJ3lvY3RvIGJzcAorICAgIGNyZWF0ZScgY29tbWFuZC4gIEV4YW1wbGUgb3V0cHV0IGZvciB0aGUgJ2xpc3Qga2FyY2gnIGNvbW1hbmQ6CisKKyAgICAkIHlvY3RvLWJzcCBsaXN0IGthcmNoCisgICAgQXJjaGl0ZWN0dXJlcyBhdmFpbGFibGU6CisgICAgICAgIGFybQorICAgICAgICBwb3dlcnBjCisgICAgICAgIGkzODYKKyAgICAgICAgbWlwcworICAgICAgICBtaXBzNjQKKyAgICAgICAgeDg2XzY0CisgICAgICAgIHFlbXUKKworICAgIFRoZSBzZWNvbmQgZm9ybSBlbnVtZXJhdGVzIGFsbCB0aGUgcG9zc2libGUgcHJvcGVydGllcyB0aGF0IGV4aXN0CisgICAgYW5kIG11c3QgaGF2ZSB2YWx1ZXMgc3BlY2lmaWVkIGZvciB0aGVtIGluIHRoZSAneW9jdG8gYnNwIGNyZWF0ZScKKyAgICBjb21tYW5kIGZvciB0aGUgZ2l2ZW4gJ2thcmNoJy4gIFRoaXMgY29tbWFuZCBpcyBtYWlubHkgbWVhbnQgdG8KKyAgICBhbGxvdyB0aGUgZGV2ZWxvcG1lbnQgdXNlciBpbnRlcmZhY2UgYWx0ZXJuYXRpdmVzIHRvIHRoZSBkZWZhdWx0CisgICAgdGV4dC1iYXNlZCBwcm9tcHRpbmcgaW50ZXJmYWNlLiAgSWYgdGhlIC1vIG9wdGlvbiBpcyBzcGVjaWZpZWQsCisgICAgdGhlIGxpc3Qgb2YgcHJvcGVydGllcywgaW4gYWRkaXRpb24gdG8gYmVpbmcgZGlzcGxheWVkLCB3aWxsIGJlCisgICAgd3JpdHRlbiB0byB0aGUgc3BlY2lmaWVkIGZpbGUgYXMgYSBKU09OIG9iamVjdC4gIEluIHRoaXMgY2FzZSwgdGhlCisgICAgb2JqZWN0IHdpbGwgY29uc2lzdCBvZiB0aGUgc2V0IG9mIG5hbWU6dmFsdWUgcGFpcnMgY29ycmVzcG9uZGluZworICAgIHRvIHRoZSAocG9zc2libHkgbmVzdGVkKSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMgZGVmaW5lZCBieSB0aGUKKyAgICBpbnB1dCBzdGF0ZW1lbnRzIHVzZWQgYnkgdGhlIEJTUC4gIFNvbWUgZXhhbXBsZSBvdXRwdXQgZm9yIHRoZQorICAgICdsaXN0IHByb3BlcnRpZXMnIGNvbW1hbmQ6CisKKyAgICAkIHlvY3RvLWJzcCBsaXN0IGFybSBwcm9wZXJ0aWVzCisgICAgInRvdWNoc2NyZWVuIiA6IHsKKyAgICAgICAgIm1zZyIgOiBEb2VzIHlvdXIgQlNQIGhhdmUgYSB0b3VjaHNjcmVlbj8gKHkvTikKKyAgICAgICAgImRlZmF1bHQiIDogbgorICAgICAgICAidHlwZSIgOiBib29sZWFuCisgICAgfQorICAgICJ1Ym9vdF9sb2FkYWRkcmVzcyIgOiB7CisgICAgICAgICJtc2ciIDogUGxlYXNlIHNwZWNpZnkgYSB2YWx1ZSBmb3IgVUJPT1RfTE9BREFERFJFU1MuCisgICAgICAgICJkZWZhdWx0IiA6IDB4ODAwMDgwMDAKKyAgICAgICAgInR5cGUiIDogZWRpdAorICAgICAgICAicHJpbyIgOiA0MAorICAgIH0KKyAgICAia2VybmVsX2Nob2ljZSIgOiB7CisgICAgICAgICJwcmlvIiA6IDEwCisgICAgICAgICJkZWZhdWx0IiA6IGxpbnV4LXlvY3RvXzMuMgorICAgICAgICAiZGVwZW5kcy1vbiIgOiB1c2VfZGVmYXVsdF9rZXJuZWwKKyAgICAgICAgImRlcGVuZHMtb24tdmFsIiA6IG4KKyAgICAgICAgIm1zZyIgOiBQbGVhc2UgY2hvb3NlIHRoZSBrZXJuZWwgdG8gdXNlIGluIHRoaXMgQlNQID0+CisgICAgICAgICJ0eXBlIiA6IGNob2ljZWxpc3QKKyAgICAgICAgImdlbiIgOiBic3Aua2VybmVsLmtlcm5lbHMKKyAgICB9CisgICAgImlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzMuMCI6IiA6IHsKKyAgICAgICAgImJhc2Vfa2JyYW5jaF9saW51eF95b2N0b18zXzAiIDogeworICAgICAgICAgICAgInByaW8iIDogMjAKKyAgICAgICAgICAgICJkZWZhdWx0IiA6IHlvY3RvL3N0YW5kYXJkCisgICAgICAgICAgICAiZGVwZW5kcy1vbiIgOiBuZXdfa2JyYW5jaF9saW51eF95b2N0b18zXzAKKyAgICAgICAgICAgICJkZXBlbmRzLW9uLXZhbCIgOiB5CisgICAgICAgICAgICAibXNnIiA6IFBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uID0+CisgICAgICAgICAgICAidHlwZSIgOiBjaG9pY2VsaXN0CisgICAgICAgICAgICAiZ2VuIiA6IGJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzCisgICAgfQorICAgIC4KKyAgICAuCisgICAgLgorCisgICAgRWFjaCBlbnRyeSBpbiB0aGUgb3V0cHV0IGNvbnNpc3RzIG9mIHRoZSBuYW1lIG9mIHRoZSBpbnB1dCBlbGVtZW50CisgICAgZS5nLiAidG91Y2hzY3JlZW4iLCBmb2xsb3dlZCBieSB0aGUgcHJvcGVydGllcyBkZWZpbmVkIGZvciB0aGF0CisgICAgZWxlbWVudCBlbmNsb3NlZCBpbiBicmFjZXMuICBUaGlzIGluZm9ybWF0aW9uIHNob3VsZCBwcm92aWRlCisgICAgc3VmZmljaWVudCBpbmZvcm1hdGlvbiB0byBjcmVhdGUgYSBjb21wbGV0ZSB1c2VyIGludGVyZmFjZSB3aXRoLgorICAgIFR3byBmZWF0dXJlcyBvZiB0aGUgc2NoZW1lIHByb3ZpZGUgZm9yIGNvbmRpdGlvbmFsIGlucHV0LiAgRmlyc3QsCisgICAgaWYgYSBQeXRob24gImlmIiBzdGF0ZW1lbnQgYXBwZWFycyBpbiBwbGFjZSBvZiBhbiBpbnB1dCBlbGVtZW50CisgICAgbmFtZSwgdGhlIHNldCBvZiBlbmNsb3NlZCBpbnB1dCBlbGVtZW50cyBhcHBseSBhbmQgc2hvdWxkIGJlCisgICAgcHJlc2VudGVkIHRvIHRoZSB1c2VyIG9ubHkgaWYgdGhlICdpZicgc3RhdGVtZW50IGV2YWx1YXRlcyB0bworICAgIHRydWUuICBUaGUgdGVzdCBpbiB0aGUgaWYgc3RhdGVtZW50IHdpbGwgYWx3YXlzIHJlZmVyZW5jZSBhbm90aGVyCisgICAgaW5wdXQgZWxlbWVudCBpbiB0aGUgbGlzdCwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgZWxlbWVudCBiZWluZworICAgIHRlc3RlZCBzaG91bGQgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIGJlZm9yZSB0aGUgZWxlbWVudHMKKyAgICBlbmNsb3NlZCBieSB0aGUgaWYgYmxvY2suICBTZWNvbmRseSwgaW4gYSBzaW1pbGFyIHdheSwgc29tZQorICAgIGVsZW1lbnRzIGNvbnRhaW4gImRlcGVuZHMtb24iIGFuZCBkZXBlbmRzLW9uLXZhbCIgdGFncywgd2hpY2ggbWVhbgorICAgIHRoYXQgdGhlIGFmZmVjdGVkIGlucHV0IGVsZW1lbnQgc2hvdWxkIG9ubHkgYmUgcHJlc2VudGVkIHRvIHRoZQorICAgIHVzZXIgaWYgdGhlIGVsZW1lbnQgaXQgZGVwZW5kcyBvbiBoYXMgYWxyZWFkeSBiZWVuIHByZXNlbnRlZCB0bworICAgIHRoZSB1c2VyIGFuZCB0aGUgdXNlciBoYXMgc2VsZWN0ZWQgdGhlIHNwZWNpZmllZCB2YWx1ZSBmb3IgdGhhdAorICAgIGVsZW1lbnQuCisKKyAgICBUaGUgdGhpcmQgZm9ybSBlbnVtZXJhdGVzIGFsbCB0aGUgcG9zc2libGUgdmFsdWVzIHRoYXQgZXhpc3QgYW5kCisgICAgY2FuIGJlIHNwZWNpZmllZCBmb3IgYW55IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuCisgICAgJ2thcmNoJyBpbiB0aGUgJ3lvY3RvIGJzcCBjcmVhdGUnIGNvbW1hbmQuICBJZiB0aGUgLW8gb3B0aW9uIGlzCisgICAgc3BlY2lmaWVkLCB0aGUgbGlzdCBvZiB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSwgaW4gYWRkaXRpb24KKyAgICB0byBiZWluZyBkaXNwbGF5ZWQsIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgc3BlY2lmaWVkIGZpbGUgYXMgYQorICAgIEpTT04gb2JqZWN0LiAgSW4gdGhpcyBjYXNlLCB0aGUgb2JqZWN0IHdpbGwgY29uc2lzdCBvZiB0aGUgc2V0IG9mCisgICAgbmFtZTp2YWx1ZSBwYWlycyBjb3JyZXNwb25kaW5nIHRvIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMKKyAgICBhc3NvY2lhdGVkIHdpdGggdGhlIHByb3BlcnR5LgorCisgICAgJCB5b2N0by1ic3AgbGlzdCBpMzg2IHByb3BlcnR5IHhzZXJ2ZXJfY2hvaWNlCisgICAgICAgIFsieHNlcnZlcl92ZXNhIiwgIlZFU0EgeHNlcnZlciBzdXBwb3J0Il0KKyAgICAgICAgWyJ4c2VydmVyX2k5MTUiLCAiaTkxNSB4c2VydmVyIHN1cHBvcnQiXQorCisgICAgJCB5b2N0by1ic3AgbGlzdCBhcm0gcHJvcGVydHkgYmFzZV9rYnJhbmNoX2xpbnV4X3lvY3RvXzNfMAorICAgICAgICBHZXR0aW5nIGJyYW5jaGVzIGZyb20gcmVtb3RlIHJlcG8gZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy4wLi4uCisgICAgICAgIFsieW9jdG8vYmFzZSIsICJ5b2N0by9iYXNlIl0KKyAgICAgICAgWyJ5b2N0by9lZzIwdCIsICJ5b2N0by9lZzIwdCJdCisgICAgICAgIFsieW9jdG8vZ21hNTAwIiwgInlvY3RvL2dtYTUwMCJdCisgICAgICAgIFsieW9jdG8vcHZyIiwgInlvY3RvL3B2ciJdCisgICAgICAgIFsieW9jdG8vc3RhbmRhcmQvYXJtLXZlcnNhdGlsZS05MjZlanMiLCAieW9jdG8vc3RhbmRhcmQvYXJtLXZlcnNhdGlsZS05MjZlanMiXQorICAgICAgICBbInlvY3RvL3N0YW5kYXJkL2Jhc2UiLCAieW9jdG8vc3RhbmRhcmQvYmFzZSJdCisgICAgICAgIFsieW9jdG8vc3RhbmRhcmQvY2VkYXJ0cmFpbCIsICJ5b2N0by9zdGFuZGFyZC9jZWRhcnRyYWlsIl0KKyAgICAgICAgLgorICAgICAgICAuCisgICAgICAgIC4KKyAgICAgICAgWyJ5b2N0by9zdGFuZGFyZC9xZW11LXBwYzMyIiwgInlvY3RvL3N0YW5kYXJkL3FlbXUtcHBjMzIiXQorICAgICAgICBbInlvY3RvL3N0YW5kYXJkL3JvdXRlcnN0YXRpb25wcm8iLCAieW9jdG8vc3RhbmRhcmQvcm91dGVyc3RhdGlvbnBybyJdCisKKyAgICBUaGUgdGhpcmQgZm9ybSBhcyB3ZWxsIGlzIG1lYW50IG1haW5seSBmb3IgZGV2ZWxvcGVycyBvZgorICAgIGFsdGVybmF0aXZlIGludGVyZmFjZXMgLSBpdCBhbGxvd3MgdGhlIGRldmVsb3BlciB0byBmZXRjaCB0aGUKKyAgICBwb3NzaWJsZSB2YWx1ZXMgZm9yIGEgZ2l2ZW4gaW5wdXQgZWxlbWVudCBvbi1kZW1hbmQuICBUaGlzCisgICAgb24tZGVtYW5kIGNhcGFiaWxpdHkgaXMgZXNwZWNpYWxseSB2YWx1YWJsZSBmb3IgZWxlbWVudHMgdGhhdAorICAgIHJlcXVpcmUgcmVsYXRpdmVseSBleHBlbnNpdmUgcmVtb3RlIG9wZXJhdGlvbnMgdG8gZnVsZmlsbCwgc3VjaCBhcworICAgIHRoZSBleGFtcGxlIHRoYXQgcmV0dXJucyB0aGUgc2V0IG9mIGJyYW5jaGVzIGF2YWlsYWJsZSBpbiBhIHJlbW90ZQorICAgIGdpdCB0cmVlIGFib3ZlLgorCisiIiIKKworIyMKKyMgeW9jdG8ta2VybmVsIGhlbHAgYW5kIHVzYWdlIHN0cmluZ3MKKyMjCisKK3lvY3RvX2tlcm5lbF91c2FnZSA9ICIiIgorCisgTW9kaWZ5IGFuZCBsaXN0IFlvY3RvIEJTUCBrZXJuZWwgY29uZmlnIGl0ZW1zIGFuZCBwYXRjaGVzLgorCisgdXNhZ2U6IHlvY3RvLWtlcm5lbCBbLS12ZXJzaW9uXSBbLS1oZWxwXSBDT01NQU5EIFtBUkdTXQorCisgQ3VycmVudCAneW9jdG8ta2VybmVsJyBjb21tYW5kcyBhcmU6CisgICBjb25maWcgbGlzdCAgICAgICBMaXN0IHRoZSBtb2RpZmlhYmxlIHNldCBvZiBiYXJlIGtlcm5lbCBjb25maWcgb3B0aW9ucyBmb3IgYSBCU1AKKyAgIGNvbmZpZyBhZGQgICAgICAgIEFkZCBvciBtb2RpZnkgYmFyZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgZm9yIGEgQlNQCisgICBjb25maWcgcm0gICAgICAgICBSZW1vdmUgYmFyZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgZnJvbSBhIEJTUAorICAgcGF0Y2ggbGlzdCAgICAgICAgTGlzdCB0aGUgcGF0Y2hlcyBhc3NvY2lhdGVkIHdpdGggYSBCU1AKKyAgIHBhdGNoIGFkZCAgICAgICAgIFBhdGNoIHRoZSBZb2N0byBrZXJuZWwgZm9yIGEgQlNQCisgICBwYXRjaCBybSAgICAgICAgICBSZW1vdmUgcGF0Y2hlcyBmcm9tIGEgQlNQCisgICBmZWF0dXJlIGxpc3QgICAgICBMaXN0IHRoZSBmZWF0dXJlcyB1c2VkIGJ5IGEgQlNQCisgICBmZWF0dXJlIGFkZCAgICAgICBIYXZlIGEgQlNQIHVzZSBhIGZlYXR1cmUKKyAgIGZlYXR1cmUgcm0gICAgICAgIEhhdmUgYSBCU1Agc3RvcCB1c2luZyBhIGZlYXR1cmUKKyAgIGZlYXR1cmVzIGxpc3QgICAgIExpc3QgdGhlIGZlYXR1cmVzIGF2YWlsYWJsZSB0byBCU1BzCisgICBmZWF0dXJlIGRlc2NyaWJlICBEZXNjcmliZSBhIHBhcnRpY3VsYXIgZmVhdHVyZQorICAgZmVhdHVyZSBjcmVhdGUgICAgQ3JlYXRlIGEgbmV3IEJTUC1sb2NhbCBmZWF0dXJlCisgICBmZWF0dXJlIGRlc3Ryb3kgICBSZW1vdmUgYSBCU1AtbG9jYWwgZmVhdHVyZQorCisgU2VlICd5b2N0by1rZXJuZWwgaGVscCBDT01NQU5EJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBhIHNwZWNpZmljIGNvbW1hbmQuCisKKyIiIgorCisKK3lvY3RvX2tlcm5lbF9oZWxwX3VzYWdlID0gIiIiCisKKyB1c2FnZTogeW9jdG8ta2VybmVsIGhlbHAgPHN1YmNvbW1hbmQ+CisKKyBUaGlzIGNvbW1hbmQgZGlzcGxheXMgZGV0YWlsZWQgaGVscCBmb3IgdGhlIHNwZWNpZmllZCBzdWJjb21tYW5kLgorIiIiCisKK3lvY3RvX2tlcm5lbF9jb25maWdfbGlzdF91c2FnZSA9ICIiIgorCisgTGlzdCB0aGUgbW9kaWZpYWJsZSBzZXQgb2YgYmFyZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgZm9yIGEgQlNQCisKKyB1c2FnZTogeW9jdG8ta2VybmVsIGNvbmZpZyBsaXN0IDxic3AtbmFtZT4KKworIFRoaXMgY29tbWFuZCBsaXN0cyB0aGUgJ21vZGlmaWFibGUnIGNvbmZpZyBpdGVtcyBmb3IgYSBCU1AgaS5lLiB0aGUKKyBpdGVtcyB3aGljaCBhcmUgZWxpZ2libGUgZm9yIG1vZGlmaWNhdGlvbiBvciByZW1vdmFsIGJ5IG90aGVyCisgeW9jdG8ta2VybmVsIGNvbW1hbmRzLgorCisgJ21vZGlmaWFibGUnIGNvbmZpZyBpdGVtcyBhcmUgdGhlIGNvbmZpZyBpdGVtcyBjb250YWluZWQgYSBCU1AncworIHVzZXItY29uZmlnLmNmZyBiYXNlIGNvbmZpZy4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9jb25maWdfbGlzdF9oZWxwID0gIiIiCisKK05BTUUKKyAgICB5b2N0by1rZXJuZWwgY29uZmlnIGxpc3QgLSBMaXN0IHRoZSBtb2RpZmlhYmxlIHNldCBvZiBiYXJlIGtlcm5lbAorICAgIGNvbmZpZyBvcHRpb25zIGZvciBhIEJTUAorCitTWU5PUFNJUworICAgIHlvY3RvLWtlcm5lbCBjb25maWcgbGlzdCA8YnNwLW5hbWU+CisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIGxpc3RzIHRoZSAnbW9kaWZpYWJsZScgY29uZmlnIGl0ZW1zIGZvciBhIEJTUAorICAgIGkuZS4gdGhlIGl0ZW1zIHdoaWNoIGFyZSBlbGlnaWJsZSBmb3IgbW9kaWZpY2F0aW9uIG9yIHJlbW92YWwgYnkKKyAgICBvdGhlciB5b2N0by1rZXJuZWwgY29tbWFuZHMuCisiIiIKKworCit5b2N0b19rZXJuZWxfY29uZmlnX2FkZF91c2FnZSA9ICIiIgorCisgQWRkIG9yIG1vZGlmeSBiYXJlIGtlcm5lbCBjb25maWcgb3B0aW9ucyBmb3IgYSBCU1AKKworIHVzYWdlOiB5b2N0by1rZXJuZWwgY29uZmlnIGFkZCA8YnNwLW5hbWU+IFs8Q09ORklHX1hYWD14PiAuLi5dCisKKyBUaGlzIGNvbW1hbmQgYWRkcyBvbmUgb3IgbW9yZSBDT05GSUdfWFhYPXggaXRlbXMgdG8gYSBCU1AncyB1c2VyLWNvbmZpZy5jZmcKKyBiYXNlIGNvbmZpZy4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9jb25maWdfYWRkX2hlbHAgPSAiIiIKKworTkFNRQorICAgIHlvY3RvLWtlcm5lbCBjb25maWcgYWRkIC0gQWRkIG9yIG1vZGlmeSBiYXJlIGtlcm5lbCBjb25maWcgb3B0aW9ucworICAgIGZvciBhIEJTUAorCitTWU5PUFNJUworICAgIHlvY3RvLWtlcm5lbCBjb25maWcgYWRkIDxic3AtbmFtZT4gWzxDT05GSUdfWFhYPXg+IC4uLl0KKworREVTQ1JJUFRJT04KKyAgICBUaGlzIGNvbW1hbmQgYWRkcyBvbmUgb3IgbW9yZSBDT05GSUdfWFhYPXggaXRlbXMgdG8gYSBCU1AncworICAgIGZvby5jZmcgYmFzZSBjb25maWcuCisKKyAgICBOT1RFOiBJdCdzIHVwIHRvIHRoZSB1c2VyIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0aGUgY29uZmlnCisgICAgb3B0aW9ucyBiZWluZyBhZGRlZCBtYWtlIHNlbnNlIG9yIG5vdCAtIHRoaXMgY29tbWFuZCBkb2VzIG5vCisgICAgc2FuaXR5IGNoZWNraW5nIG9yIHZlcmlmaWNhdGlvbiBvZiBhbnkga2luZCB0byBlbnN1cmUgdGhhdCBhCisgICAgY29uZmlnIG9wdGlvbiByZWFsbHkgbWFrZXMgc2Vuc2UgYW5kIHdpbGwgYWN0dWFsbHkgYmUgc2V0IGluIGluCisgICAgdGhlIGZpbmFsIGNvbmZpZy4gIEZvciBleGFtcGxlLCBpZiBhIGNvbmZpZyBvcHRpb24gZGVwZW5kcyBvbgorICAgIG90aGVyIGNvbmZpZyBvcHRpb25zLCBpdCB3aWxsIGJlIHR1cm5lZCBvZmYgYnkga2NvbmZpZyBpZiB0aGUKKyAgICBvdGhlciBvcHRpb25zIGFyZW4ndCBzZXQgY29ycmVjdGx5LgorIiIiCisKKworeW9jdG9fa2VybmVsX2NvbmZpZ19ybV91c2FnZSA9ICIiIgorCisgUmVtb3ZlIGJhcmUga2VybmVsIGNvbmZpZyBvcHRpb25zIGZyb20gYSBCU1AKKworIHVzYWdlOiB5b2N0by1rZXJuZWwgY29uZmlnIHJtIDxic3AtbmFtZT4KKworIFRoaXMgY29tbWFuZCByZW1vdmVzICh0dXJucyBvZmYpIG9uZSBvciBtb3JlIENPTkZJR19YWFggaXRlbXMgZnJvbSBhCisgQlNQJ3MgdXNlci1jb25maWcuY2ZnIGJhc2UgY29uZmlnLgorCisgVGhlIHNldCBvZiBjb25maWcgaXRlbXMgYXZhaWxhYmxlIHRvIGJlIHJlbW92ZWQgYnkgdGhpcyBjb21tYW5kIGZvciBhCisgQlNQIGlzIGxpc3RlZCBhbmQgdGhlIHVzZXIgcHJvbXB0ZWQgZm9yIHRoZSBzcGVjaWZpYyBpdGVtcyB0byByZW1vdmUuCisiIiIKKworCit5b2N0b19rZXJuZWxfY29uZmlnX3JtX2hlbHAgPSAiIiIKKworTkFNRQorICAgIHlvY3RvLWtlcm5lbCBjb25maWcgcm0gLSBSZW1vdmUgYmFyZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgZnJvbSBhCisgICAgQlNQCisKK1NZTk9QU0lTCisgICAgeW9jdG8ta2VybmVsIGNvbmZpZyBybSA8YnNwLW5hbWU+CisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIHJlbW92ZXMgKHR1cm5zIG9mZikgb25lIG9yIG1vcmUgQ09ORklHX1hYWCBpdGVtcyBmcm9tIGEKKyAgICBCU1AncyB1c2VyLWNvbmZpZy5jZmcgYmFzZSBjb25maWcuCisKKyAgICBUaGUgc2V0IG9mIGNvbmZpZyBpdGVtcyBhdmFpbGFibGUgdG8gYmUgcmVtb3ZlZCBieSB0aGlzIGNvbW1hbmQKKyAgICBmb3IgYSBCU1AgaXMgbGlzdGVkIGFuZCB0aGUgdXNlciBwcm9tcHRlZCBmb3IgdGhlIHNwZWNpZmljIGl0ZW1zCisgICAgdG8gcmVtb3ZlLgorIiIiCisKKworeW9jdG9fa2VybmVsX3BhdGNoX2xpc3RfdXNhZ2UgPSAiIiIKKworIExpc3QgdGhlIHBhdGNoZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXJuZWwgZm9yIGEgQlNQCisKKyB1c2FnZTogeW9jdG8ta2VybmVsIHBhdGNoIGxpc3QgPGJzcC1uYW1lPgorCisgVGhpcyBjb21tYW5kIGxpc3RzIHRoZSBwYXRjaGVzIGFzc29jaWF0ZWQgd2l0aCBhIEJTUC4KKworIE5PVEU6IHRoaXMgb25seSBhcHBsaWVzIHRvIHBhdGNoZXMgbGlzdGVkIGluIHRoZSBrZXJuZWwgcmVjaXBlJ3MKKyB1c2VyLXBhdGNoZXMuc2NjIGZpbGUgKGFuZCBjdXJyZW50bHkgcmVwZWF0ZWQgaW4gaXRzIFNSQ19VUkkpLgorIiIiCisKKworeW9jdG9fa2VybmVsX3BhdGNoX2xpc3RfaGVscCA9ICIiIgorCitOQU1FCisgICAgeW9jdG8ta2VybmVsIHBhdGNoIGxpc3QgLSBMaXN0IHRoZSBwYXRjaGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUga2VybmVsCisgICAgZm9yIGEgQlNQCisKK1NZTk9QU0lTCisgICAgeW9jdG8ta2VybmVsIHBhdGNoIGxpc3QgPGJzcC1uYW1lPgorCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCBsaXN0cyB0aGUgcGF0Y2hlcyBhc3NvY2lhdGVkIHdpdGggYSBCU1AuCisKKyAgICBOT1RFOiB0aGlzIG9ubHkgYXBwbGllcyB0byBwYXRjaGVzIGxpc3RlZCBpbiB0aGUga2VybmVsIHJlY2lwZSdzCisgICAgdXNlci1wYXRjaGVzLnNjYyBmaWxlIChhbmQgY3VycmVudGx5IHJlcGVhdGVkIGluIGl0cyBTUkNfVVJJKS4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9wYXRjaF9hZGRfdXNhZ2UgPSAiIiIKKworIFBhdGNoIHRoZSBZb2N0byBrZXJuZWwgZm9yIGEgc3BlY2lmaWMgQlNQCisKKyB1c2FnZTogeW9jdG8ta2VybmVsIHBhdGNoIGFkZCA8YnNwLW5hbWU+IFs8UEFUQ0g+IC4uLl0KKworIFRoaXMgY29tbWFuZCBhZGRzIG9uZSBvciBtb3JlIHBhdGNoZXMgdG8gYSBCU1AncyBtYWNoaW5lIGJyYW5jaC4gIFRoZQorIHBhdGNoIHdpbGwgYmUgYWRkZWQgdG8gdGhlIEJTUCdzIGxpbnV4LXlvY3RvIGtlcm5lbCB1c2VyLXBhdGNoZXMuc2NjCisgZmlsZSAoYW5kIGN1cnJlbnRseSByZXBlYXRlZCBpbiBpdHMgU1JDX1VSSSkgYW5kIHdpbGwgYmUgZ3VhcmFudGVlZAorIHRvIGJlIGFwcGxpZWQgaW4gdGhlIG9yZGVyIHNwZWNpZmllZC4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9wYXRjaF9hZGRfaGVscCA9ICIiIgorCitOQU1FCisgICAgeW9jdG8ta2VybmVsIHBhdGNoIGFkZCAtIFBhdGNoIHRoZSBZb2N0byBrZXJuZWwgZm9yIGEgc3BlY2lmaWMgQlNQCisKK1NZTk9QU0lTCisgICAgeW9jdG8ta2VybmVsIHBhdGNoIGFkZCA8YnNwLW5hbWU+IFs8UEFUQ0g+IC4uLl0KKworREVTQ1JJUFRJT04KKyAgICBUaGlzIGNvbW1hbmQgYWRkcyBvbmUgb3IgbW9yZSBwYXRjaGVzIHRvIGEgQlNQJ3MgbWFjaGluZSBicmFuY2guCisgICAgVGhlIHBhdGNoIHdpbGwgYmUgYWRkZWQgdG8gdGhlIEJTUCdzIGxpbnV4LXlvY3RvIGtlcm5lbAorICAgIHVzZXItcGF0Y2hlcy5zY2MgZmlsZSAoYW5kIGN1cnJlbnRseSByZXBlYXRlZCBpbiBpdHMgU1JDX1VSSSkgYW5kCisgICAgd2lsbCBiZSBndWFyYW50ZWVkIHRvIGJlIGFwcGxpZWQgaW4gdGhlIG9yZGVyIHNwZWNpZmllZC4KKworICAgIE5PVEU6IEl0J3MgdXAgdG8gdGhlIHVzZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZSBwYXRjaGVzCisgICAgYmVpbmcgYWRkZWQgbWFrZXMgc2Vuc2Ugb3Igbm90IC0gdGhpcyBjb21tYW5kIGRvZXMgbm8gc2FuaXR5CisgICAgY2hlY2tpbmcgb3IgdmVyaWZpY2F0aW9uIG9mIGFueSBraW5kIHRvIGVuc3VyZSB0aGF0IGEgcGF0Y2ggY2FuCisgICAgYWN0dWFsbHkgYmUgYXBwbGllZCB0byB0aGUgQlNQJ3Mga2VybmVsIGJyYW5jaDsgaXQncyBhc3N1bWVkIHRoYXQKKyAgICB0aGUgdXNlciBoYXMgYWxyZWFkeSBkb25lIHRoYXQuCisiIiIKKworCit5b2N0b19rZXJuZWxfcGF0Y2hfcm1fdXNhZ2UgPSAiIiIKKworIFJlbW92ZSBhIHBhdGNoIGZyb20gdGhlIFlvY3RvIGtlcm5lbCBmb3IgYSBzcGVjaWZpYyBCU1AKKworIHVzYWdlOiB5b2N0by1rZXJuZWwgcGF0Y2ggcm0gPGJzcC1uYW1lPgorCisgVGhpcyBjb21tYW5kIHJlbW92ZXMgb25lIG9yIG1vcmUgcGF0Y2hlcyBmcm9tIGEgQlNQJ3MgbWFjaGluZSBicmFuY2guCisgVGhlIHBhdGNoIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBCU1AncyBsaW51eC15b2N0byBrZXJuZWwKKyB1c2VyLXBhdGNoZXMuc2NjIGZpbGUgKGFuZCBjdXJyZW50bHkgcmVwZWF0ZWQgaW4gaXRzIFNSQ19VUkkpIGFuZAorIGtlcm5lbCBTUkNfVVJJIGRpci4KKworIFRoZSBzZXQgb2YgcGF0Y2hlcyBhdmFpbGFibGUgdG8gYmUgcmVtb3ZlZCBieSB0aGlzIGNvbW1hbmQgZm9yIGEgQlNQCisgaXMgbGlzdGVkIGFuZCB0aGUgdXNlciBwcm9tcHRlZCBmb3IgdGhlIHNwZWNpZmljIHBhdGNoZXMgdG8gcmVtb3ZlLgorIiIiCisKKworeW9jdG9fa2VybmVsX3BhdGNoX3JtX2hlbHAgPSAiIiIKKworTkFNRQorICAgIHlvY3RvLWtlcm5lbCBwYXRjaCBybSAtIFJlbW92ZSBhIHBhdGNoIGZyb20gdGhlIFlvY3RvIGtlcm5lbCBmb3IgYSBzcGVjaWZpYyBCU1AKKworU1lOT1BTSVMKKyAgICB5b2N0by1rZXJuZWwgcGF0Y2ggcm0gPGJzcC1uYW1lPgorCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCByZW1vdmVzIG9uZSBvciBtb3JlIHBhdGNoZXMgZnJvbSBhIEJTUCdzIG1hY2hpbmUKKyAgICBicmFuY2guICBUaGUgcGF0Y2ggd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIEJTUCdzIGxpbnV4LXlvY3RvCisgICAga2VybmVsIHVzZXItcGF0Y2hlcy5zY2MgZmlsZSAoYW5kIGN1cnJlbnRseSByZXBlYXRlZCBpbiBpdHMKKyAgICBTUkNfVVJJKS4KKworICAgIFRoZSBzZXQgb2YgcGF0Y2hlcyBhdmFpbGFibGUgdG8gYmUgcmVtb3ZlZCBieSB0aGlzIGNvbW1hbmQgZm9yIGEKKyAgICBCU1AgaXMgbGlzdGVkIGFuZCB0aGUgdXNlciBwcm9tcHRlZCBmb3IgdGhlIHNwZWNpZmljIHBhdGNoZXMgdG8KKyAgICByZW1vdmUuCisiIiIKKworeW9jdG9fa2VybmVsX2ZlYXR1cmVfbGlzdF91c2FnZSA9ICIiIgorCisgTGlzdCB0aGUgQlNQIGZlYXR1cmVzIHRoYXQgYXJlIGJlaW5nIHVzZWQgYnkgYSBCU1AKKworIHVzYWdlOiB5b2N0by1rZXJuZWwgZmVhdHVyZSBsaXN0IDxic3AtbmFtZT4KKworIFRoaXMgY29tbWFuZCBsaXN0cyB0aGUgZmVhdHVyZXMgYmVpbmcgdXNlZCBieSBhIEJTUCBpLmUuIHRoZSBmZWF0dXJlcworIHdoaWNoIGFyZSBlbGlnaWJsZSBmb3IgbW9kaWZpY2F0aW9uIG9yIHJlbW92YWwgYnkgb3RoZXIgeW9jdG8ta2VybmVsCisgY29tbWFuZHMuCisKKyAnbW9kaWZpYWJsZScgZmVhdHVyZXMgYXJlIHRoZSBmZWF0dXJlcyBsaXN0ZWQgaW4gYSBCU1AncworIHVzZXItZmVhdHVyZXMuc2NjIGZpbGUuCisiIiIKKworCit5b2N0b19rZXJuZWxfZmVhdHVyZV9saXN0X2hlbHAgPSAiIiIKKworTkFNRQorICAgIHlvY3RvLWtlcm5lbCBmZWF0dXJlIGxpc3QgLSBMaXN0IHRoZSBtb2RpZmlhYmxlIHNldCBvZiBmZWF0dXJlcworICAgIGJlaW5nIHVzZWQgYnkgYSBCU1AKKworU1lOT1BTSVMKKyAgICB5b2N0by1rZXJuZWwgZmVhdHVyZSBsaXN0IDxic3AtbmFtZT4KKworREVTQ1JJUFRJT04KKyAgICBUaGlzIGNvbW1hbmQgbGlzdHMgdGhlICdtb2RpZmlhYmxlJyBmZWF0dXJlcyBiZWluZyB1c2VkIGJ5IGEgQlNQCisgICAgaS5lLiB0aGUgZmVhdHVyZXMgd2hpY2ggYXJlIGVsaWdpYmxlIGZvciBtb2RpZmljYXRpb24gb3IgcmVtb3ZhbAorICAgIGJ5IG90aGVyIHlvY3RvLWtlcm5lbCBjb21tYW5kcy4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9mZWF0dXJlX2FkZF91c2FnZSA9ICIiIgorCisgQWRkIHRvIG9yIG1vZGlmeSB0aGUgbGlzdCBvZiBmZWF0dXJlcyBiZWluZyB1c2VkIGZvciBhIEJTUAorCisgdXNhZ2U6IHlvY3RvLWtlcm5lbCBmZWF0dXJlIGFkZCA8YnNwLW5hbWU+IFsveHh4eC95eXl5L2ZlYXR1cmUuc2NjIC4uLl0KKworIFRoaXMgY29tbWFuZCBhZGRzIG9uZSBvciBtb3JlIGZlYXR1cmUgaXRlbXMgdG8gYSBCU1AncyBrZXJuZWwKKyB1c2VyLWZlYXR1cmVzLnNjYyBmaWxlLCB3aGljaCBpcyB0aGUgZmlsZSB1c2VkIHRvIG1hbmFnZSBmZWF0dXJlcyBpbgorIGEgeW9jdG8tYnNwLWdlbmVyYXRlZCBCU1AuICBGZWF0dXJlcyB0byBiZSBhZGRlZCBtdXN0IGJlIHNwZWNpZmllZCBhcworIGZ1bGx5LXF1YWxpZmllZCBmZWF0dXJlIG5hbWVzLgorIiIiCisKKworeW9jdG9fa2VybmVsX2ZlYXR1cmVfYWRkX2hlbHAgPSAiIiIKKworTkFNRQorICAgIHlvY3RvLWtlcm5lbCBmZWF0dXJlIGFkZCAtIEFkZCB0byBvciBtb2RpZnkgdGhlIGxpc3Qgb2YgZmVhdHVyZXMKKyAgICBiZWluZyB1c2VkIGZvciBhIEJTUAorCitTWU5PUFNJUworICAgIHlvY3RvLWtlcm5lbCBmZWF0dXJlIGFkZCA8YnNwLW5hbWU+IFsveHh4eC95eXl5L2ZlYXR1cmUuc2NjIC4uLl0KKworREVTQ1JJUFRJT04KKyAgICBUaGlzIGNvbW1hbmQgYWRkcyBvbmUgb3IgbW9yZSBmZWF0dXJlIGl0ZW1zIHRvIGEgQlNQJ3MKKyAgICB1c2VyLWZlYXR1cmVzLnNjYyBmaWxlLCB3aGljaCBpcyB0aGUgZmlsZSB1c2VkIHRvIG1hbmFnZSBmZWF0dXJlcworICAgIGluIGEgeW9jdG8tYnNwLWdlbmVyYXRlZCBCU1AuICBGZWF0dXJlcyB0byBiZSBhZGRlZCBtdXN0IGJlCisgICAgc3BlY2lmaWVkIGFzIGZ1bGx5LXF1YWxpZmllZCBmZWF0dXJlIG5hbWVzLgorIiIiCisKKworeW9jdG9fa2VybmVsX2ZlYXR1cmVfcm1fdXNhZ2UgPSAiIiIKKworIFJlbW92ZSBhIGZlYXR1cmUgZnJvbSB0aGUgbGlzdCBvZiBmZWF0dXJlcyBiZWluZyB1c2VkIGZvciBhIEJTUAorCisgdXNhZ2U6IHlvY3RvLWtlcm5lbCBmZWF0dXJlIHJtIDxic3AtbmFtZT4KKworIFRoaXMgY29tbWFuZCByZW1vdmVzICh0dXJucyBvZmYpIG9uZSBvciBtb3JlIGZlYXR1cmVzIGZyb20gYSBCU1AncworIHVzZXItZmVhdHVyZXMuc2NjIGZpbGUsIHdoaWNoIGlzIHRoZSBmaWxlIHVzZWQgdG8gbWFuYWdlIGZlYXR1cmVzIGluCisgYSB5b2N0by1ic3AtZ2VuZXJhdGVkIEJTUC4KKworIFRoZSBzZXQgb2YgZmVhdHVyZXMgYXZhaWxhYmxlIHRvIGJlIHJlbW92ZWQgYnkgdGhpcyBjb21tYW5kIGZvciBhIEJTUAorIGlzIGxpc3RlZCBhbmQgdGhlIHVzZXIgcHJvbXB0ZWQgZm9yIHRoZSBzcGVjaWZpYyBpdGVtcyB0byByZW1vdmUuCisiIiIKKworCit5b2N0b19rZXJuZWxfZmVhdHVyZV9ybV9oZWxwID0gIiIiCisKK05BTUUKKyAgICB5b2N0by1rZXJuZWwgZmVhdHVyZSBybSAtIFJlbW92ZSBhIGZlYXR1cmUgZnJvbSB0aGUgbGlzdCBvZgorICAgIGZlYXR1cmVzIGJlaW5nIHVzZWQgZm9yIGEgQlNQCisKK1NZTk9QU0lTCisgICAgeW9jdG8ta2VybmVsIGZlYXR1cmUgcm0gPGJzcC1uYW1lPgorCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCByZW1vdmVzICh0dXJucyBvZmYpIG9uZSBvciBtb3JlIGZlYXR1cmVzIGZyb20gYSBCU1AncworICAgIHVzZXItZmVhdHVyZXMuc2NjIGZpbGUsIHdoaWNoIGlzIHRoZSBmaWxlIHVzZWQgdG8gbWFuYWdlIGZlYXR1cmVzCisgICAgaW4gYSB5b2N0by1ic3AtZ2VuZXJhdGVkIEJTUC4KKworICAgIFRoZSBzZXQgb2YgZmVhdHVyZXMgYXZhaWxhYmxlIHRvIGJlIHJlbW92ZWQgYnkgdGhpcyBjb21tYW5kIGZvciBhCisgICAgQlNQIGlzIGxpc3RlZCBhbmQgdGhlIHVzZXIgcHJvbXB0ZWQgZm9yIHRoZSBzcGVjaWZpYyBpdGVtcyB0bworICAgIHJlbW92ZS4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9hdmFpbGFibGVfZmVhdHVyZXNfbGlzdF91c2FnZSA9ICIiIgorCisgTGlzdCB0aGUgc2V0IG9mIGtlcm5lbCBmZWF0dXJlcyBhdmFpbGFibGUgdG8gYSBCU1AKKworIHVzYWdlOiB5b2N0by1rZXJuZWwgZmVhdHVyZXMgbGlzdCA8YnNwLW5hbWU+CisKKyBUaGlzIGNvbW1hbmQgbGlzdHMgdGhlIGNvbXBsZXRlIHNldCBvZiBrZXJuZWwgZmVhdHVyZXMgYXZhaWxhYmxlIHRvIGEKKyBCU1AuICBUaGlzIGluY2x1ZGVzIHRoZSBmZWF0dXJlcyBjb250YWluZWQgaW4gbGludXgteW9jdG8gbWV0YQorIGJyYW5jaGVzIGFzIHdlbGwgYXMgcmVjaXBlLXNwYWNlIGZlYXR1cmVzIGRlZmluZWQgbG9jYWxseSB0byB0aGUgQlNQLgorIiIiCisKKworeW9jdG9fa2VybmVsX2F2YWlsYWJsZV9mZWF0dXJlc19saXN0X2hlbHAgPSAiIiIKKworTkFNRQorICAgIHlvY3RvLWtlcm5lbCBmZWF0dXJlcyBsaXN0IC0gTGlzdCB0aGUgc2V0IG9mIGtlcm5lbCBmZWF0dXJlcworICAgIGF2YWlsYWJsZSB0byBhIEJTUAorCitTWU5PUFNJUworICAgIHlvY3RvLWtlcm5lbCBmZWF0dXJlcyBsaXN0IDxic3AtbmFtZT4KKworREVTQ1JJUFRJT04KKyAgICAgVGhpcyBjb21tYW5kIGxpc3RzIHRoZSBjb21wbGV0ZSBzZXQgb2Yga2VybmVsIGZlYXR1cmVzIGF2YWlsYWJsZQorICAgICB0byBhIEJTUC4gIFRoaXMgaW5jbHVkZXMgdGhlIGZlYXR1cmVzIGNvbnRhaW5lZCBpbiBsaW51eC15b2N0bworICAgICBtZXRhIGJyYW5jaGVzIGFzIHdlbGwgYXMgcmVjaXBlLXNwYWNlIGZlYXR1cmVzIGRlZmluZWQgbG9jYWxseSB0bworICAgICB0aGUgQlNQLgorIiIiCisKKworeW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzY3JpYmVfdXNhZ2UgPSAiIiIKKworIFByaW50IHRoZSBkZXNjcmlwdGlvbiBhbmQgY29tcGF0aWJpbGl0eSBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiBrZXJuZWwgZmVhdHVyZQorCisgdXNhZ2U6IHlvY3RvLWtlcm5lbCBmZWF0dXJlIGRlc2NyaWJlIDxic3AtbmFtZT4gWy94eHh4L3l5eXkvZmVhdHVyZS5zY2MgLi4uXQorCisgVGhpcyBjb21tYW5kIHByaW50cyB0aGUgZGVzY3JpcHRpb24gYW5kIGNvbXBhdGliaWxpdHkgb2YgYSBzcGVjaWZpYworIGZlYXR1cmUgaW4gdGhlIGZvcm1hdCAnZGVzY3JpcHRpb24gW2NvbXBhdGliaWxpdHldLgorIiIiCisKKworeW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzY3JpYmVfaGVscCA9ICIiIgorCitOQU1FCisgICAgeW9jdG8ta2VybmVsIGZlYXR1cmUgZGVzY3JpYmUgLSBwcmludCB0aGUgZGVzY3JpcHRpb24gYW5kCisgICAgY29tcGF0aWJpbGl0eSBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiBrZXJuZWwgZmVhdHVyZQorCitTWU5PUFNJUworICAgIHlvY3RvLWtlcm5lbCBmZWF0dXJlIGRlc2NyaWJlIDxic3AtbmFtZT4gWy94eHh4L3l5eXkvZmVhdHVyZS5zY2MgLi4uXQorCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCBwcmludHMgdGhlIGRlc2NyaXB0aW9uIGFuZCBjb21wYXRpYmlsaXR5IG9mIGEKKyAgICBzcGVjaWZpYyBmZWF0dXJlIGluIHRoZSBmb3JtYXQgJ2Rlc2NyaXB0aW9uIFtjb21wYXRpYmlsaXR5XS4gIElmCisgICAgdGhlIGZlYXR1cmUgZG9lc24ndCBkZWZpbmUgYSBkZXNjcmlwdGlvbiBvciBjb21wYXRpYmlsaXR5LCBhCisgICAgc3RyaW5nIHdpdGggZ2VuZXJpYyB1bmtub3duIHZhbHVlcyB3aWxsIGJlIHByaW50ZWQuCisiIiIKKworCit5b2N0b19rZXJuZWxfZmVhdHVyZV9jcmVhdGVfdXNhZ2UgPSAiIiIKKworIENyZWF0ZSBhIHJlY2lwZS1zcGFjZSBrZXJuZWwgZmVhdHVyZSBpbiBhIEJTUAorCisgdXNhZ2U6IHlvY3RvLWtlcm5lbCBmZWF0dXJlIGNyZWF0ZSA8YnNwLW5hbWU+IG5ld2ZlYXR1cmUuc2NjIFwKKyAgICAgICAgIkZlYXR1cmUgRGVzY3JpcHRpb24iIGNhcGFiaWxpdGllcyBbPENPTkZJR19YWFg9eD4gLi4uXSBbPFBBVENIPiAuLi5dCisKKyBUaGlzIGNvbW1hbmQgY3JlYXRlcyBhIG5ldyBrZXJuZWwgZmVhdHVyZSBmcm9tIHRoZSBiYXJlIGNvbmZpZworIG9wdGlvbnMgYW5kIHBhdGNoZXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kLWxpbmUuCisiIiIKKworCit5b2N0b19rZXJuZWxfZmVhdHVyZV9jcmVhdGVfaGVscCA9ICIiIgorCitOQU1FCisgICAgeW9jdG8ta2VybmVsIGZlYXR1cmUgY3JlYXRlIC0gY3JlYXRlIGEgcmVjaXBlLXNwYWNlIGtlcm5lbCBmZWF0dXJlCisgICAgaW4gYSBCU1AKKworU1lOT1BTSVMKKyAgICB5b2N0by1rZXJuZWwgZmVhdHVyZSBjcmVhdGUgPGJzcC1uYW1lPiBuZXdmZWF0dXJlLnNjYyBcCisgICAgICAgICJGZWF0dXJlIERlc2NyaXB0aW9uIiBjYXBhYmlsaXRpZXMgWzxDT05GSUdfWFhYPXg+IC4uLl0gWzxQQVRDSD4gLi4uXQorCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCBjcmVhdGVzIGEgbmV3IGtlcm5lbCBmZWF0dXJlIGZyb20gdGhlIGJhcmUgY29uZmlnCisgICAgb3B0aW9ucyBhbmQgcGF0Y2hlcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQtbGluZS4gIFRoZSBuZXcKKyAgICBmZWF0dXJlIHdpbGwgYmUgY3JlYXRlZCBpbiByZWNpcGUtc3BhY2UsIHNwZWNpZmljYWxseSBpbiBlaXRoZXIKKyAgICB0aGUga2VybmVsIC5iYmFwcGVuZCdzIC9maWxlcy9jZmcgb3IgL2ZpbGVzL2ZlYXR1cmVzIHN1YmRpcmVjdG9yeSwKKyAgICBkZXBlbmRpbmcgb24gd2hldGhlciBvciBub3QgdGhlIGZlYXR1cmUgY29udGFpbnMgY29uZmlnIGl0ZW1zIG9ubHkKKyAgICBvciBjb25maWcgaXRlbXMgYWxvbmcgd2l0aCBwYXRjaGVzLiAgVGhlIG5hbWVkIGZlYXR1cmUgbXVzdCBlbmQKKyAgICB3aXRoIC5zY2MgYW5kIG11c3Qgbm90IGNvbnRhaW4gYSBmZWF0dXJlIGRpcmVjdG9yeSB0byBjb250YWluIHRoZQorICAgIGZlYXR1cmUgKHRoaXMgd2lsbCBiZSBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkpLCBhbmQgYSBmZWF0dXJlCisgICAgZGVjcmlwdGlvbiBpbiBkb3VibGUtcXVvdGVzIGFsb25nIHdpdGggYSBjYXBhYmlsaXRpZXMgc3RyaW5nCisgICAgKHdoaWNoIGZvciB0aGUgdGltZSBiZWluZyBjYW4gYmUgb25lIG9mOiAnYWxsJyBvciAnYm9hcmQnKS4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9mZWF0dXJlX2Rlc3Ryb3lfdXNhZ2UgPSAiIiIKKworIERlc3Ryb3kgYSByZWNpcGUtc3BhY2Uga2VybmVsIGZlYXR1cmUgaW4gYSBCU1AKKworIHVzYWdlOiB5b2N0by1rZXJuZWwgZmVhdHVyZSBkZXN0cm95IDxic3AtbmFtZT4gZmVhdHVyZS5zY2MKKworIFRoaXMgY29tbWFuZCBkZXN0cm95cyBhIGtlcm5lbCBmZWF0dXJlIGRlZmluZWQgaW4gdGhlIHNwZWNpZmllZCBCU1AncworIHJlY2lwZS1zcGFjZSBrZXJuZWwgZGVmaW5pdGlvbi4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9mZWF0dXJlX2Rlc3Ryb3lfaGVscCA9ICIiIgorCitOQU1FCisgICAgeW9jdG8ta2VybmVsIGZlYXR1cmUgZGVzdHJveSA8YnNwLW5hbWU+IGZlYXR1cmUuc2NjIC0gZGVzdHJveSBhCisgICAgcmVjaXBlLXNwYWNlIGtlcm5lbCBmZWF0dXJlIGluIGEgQlNQCisKK1NZTk9QU0lTCisgICAgeW9jdG8ta2VybmVsIGZlYXR1cmUgZGVzdHJveSA8YnNwLW5hbWU+IGZlYXR1cmUuc2NjCisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIGRlc3Ryb3lzIGEga2VybmVsIGZlYXR1cmUgZGVmaW5lZCBpbiB0aGUgc3BlY2lmaWVkCisgICAgQlNQJ3MgcmVjaXBlLXNwYWNlIGtlcm5lbCBkZWZpbml0aW9uLiAgVGhlIG5hbWVkIGZlYXR1cmUgbXVzdCBlbmQKKyAgICB3aXRoIC5zY2MgYW5kIG11c3Qgbm90IGNvbnRhaW4gYSBmZWF0dXJlIGRpcmVjdG9yeSB0byBjb250YWluIHRoZQorICAgIGZlYXR1cmUgKHRoaXMgd2lsbCBiZSBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkpLiAgSWYgdGhlIGtlcm5lbAorICAgIGZlYXR1cmUgaXMgaW4gdXNlIGJ5IGEgQlNQLCBpdCBjYW4ndCBiZSByZW1vdmVkIHVudGlsIHRoZSBCU1AKKyAgICBzdG9wcyB1c2luZyBpdCAoc2VlIHlvY3RvLWtlcm5lbCBmZWF0dXJlIHJtIHRvIHN0b3AgdXNpbmcgaXQpLgorIiIiCisKKyMjCisjIHlvY3RvLWxheWVyIGhlbHAgYW5kIHVzYWdlIHN0cmluZ3MKKyMjCisKK3lvY3RvX2xheWVyX3VzYWdlID0gIiIiCisKKyBDcmVhdGUgYSBnZW5lcmljIFlvY3RvIGxheWVyLgorCisgdXNhZ2U6IHlvY3RvLWxheWVyIFstLXZlcnNpb25dIFstLWhlbHBdIENPTU1BTkQgW0FSR1NdCisKKyBDdXJyZW50ICd5b2N0by1sYXllcicgY29tbWFuZHMgYXJlOgorICAgIGNyZWF0ZSAgICAgICAgICAgIENyZWF0ZSBhIG5ldyBnZW5lcmljIFlvY3RvIGxheWVyCisgICAgbGlzdCAgICAgICAgICAgICAgTGlzdCBhdmFpbGFibGUgdmFsdWVzIGZvciBpbnB1dCBvcHRpb25zIGFuZCBwcm9wZXJ0aWVzCisKKyBTZWUgJ3lvY3RvLWxheWVyIGhlbHAgQ09NTUFORCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYSBzcGVjaWZpYyBjb21tYW5kLgorIiIiCisKK3lvY3RvX2xheWVyX2hlbHBfdXNhZ2UgPSAiIiIKKworIHVzYWdlOiB5b2N0by1sYXllciBoZWxwIDxzdWJjb21tYW5kPgorCisgVGhpcyBjb21tYW5kIGRpc3BsYXlzIGRldGFpbGVkIGhlbHAgZm9yIHRoZSBzcGVjaWZpZWQgc3ViY29tbWFuZC4KKyIiIgorCit5b2N0b19sYXllcl9jcmVhdGVfdXNhZ2UgPSAiIiIKKworIENyZWF0ZSBhIG5ldyBnZW5lcmljIFlvY3RvIGxheWVyCisKKyB1c2FnZTogeW9jdG8tbGF5ZXIgY3JlYXRlIDxsYXllci1uYW1lPiBbbGF5ZXJfcHJpb3JpdHldCisgICAgICAgICAgICBbLW8gPERJUk5BTUU+IHwgLS1vdXRkaXIgPERJUk5BTUU+XQorICAgICAgICAgICAgWy1pIDxKU09OIFBST1BFUlRZIEZJTEU+IHwgLS1pbmZpbGUgPEpTT04gUFJPUEVSVFlfRklMRT5dCisKKyBUaGlzIGNvbW1hbmQgY3JlYXRlcyBhIGdlbmVyaWMgWW9jdG8gbGF5ZXIgYmFzZWQgb24gdGhlIHNwZWNpZmllZAorIHBhcmFtZXRlcnMuICBUaGUgbmV3IGxheWVyIHdpbGwgYmUgYSBuZXcgWW9jdG8gbGF5ZXIgY29udGFpbmVkIGJ5CisgZGVmYXVsdCB3aXRoaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgc3BlY2lmaWVkIGFzCisgJ21ldGEtbGF5ZXItbmFtZScuICBUaGUgLW8gb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHBsYWNlIHRoZSBsYXllciBpbiBhCisgZGlyZWN0b3J5IHdpdGggYSBkaWZmZXJlbnQgbmFtZSBhbmQgbG9jYXRpb24uCisKKyBJZiBsYXllcl9wcmlvcml0eSBpcyBzcGVjaWZpZWQsIGEgc2ltcGxlIGxheWVyIHdpbGwgYmUgY3JlYXRlZCB1c2luZworIHRoZSBnaXZlbiBsYXllciBwcmlvcml0eSwgYW5kIHRoZSB1c2VyIHdpbGwgbm90IGJlIHByb21wdGVkIGZvcgorIGZ1cnRoZXIgaW5wdXQuCisKKyBOT1RFOiBPbmNlIGNyZWF0ZWQsIHlvdSBzaG91bGQgYWRkIHlvdXIgbmV3IGxheWVyIHRvIHlvdXIKKyBiYmxheWVycy5jb25mIGZpbGUgaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHN1YnNlcXVlbnRseSBzZWVuIGFuZAorIG1vZGlmaWVkIGJ5IHRoZSB5b2N0by1rZXJuZWwgdG9vbC4gIEluc3RydWN0aW9ucyBmb3IgZG9pbmcgdGhpcyBjYW4KKyBiZSBmb3VuZCBpbiB0aGUgUkVBRE1FIGZpbGUgZ2VuZXJhdGVkIGluIHRoZSBsYXllcidzIHRvcC1sZXZlbAorIGRpcmVjdG9yeS4KKworIFNlZSAneW9jdG8gbGF5ZXIgaGVscCBjcmVhdGUnIGZvciBtb3JlIGRldGFpbGVkIGluc3RydWN0aW9ucy4KKyIiIgorCit5b2N0b19sYXllcl9jcmVhdGVfaGVscCA9ICIiIgorCitOQU1FCisgICAgeW9jdG8tbGF5ZXIgY3JlYXRlIC0gQ3JlYXRlIGEgbmV3IGdlbmVyaWMgWW9jdG8gbGF5ZXIKKworU1lOT1BTSVMKKyAgICB5b2N0by1sYXllciBjcmVhdGUgPGxheWVyLW5hbWU+IFtsYXllcl9wcmlvcml0eV0KKyAgICAgICAgWy1vIDxESVJOQU1FPiB8IC0tb3V0ZGlyIDxESVJOQU1FPl0KKyAgICAgICAgWy1pIDxKU09OIFBST1BFUlRZIEZJTEU+IHwgLS1pbmZpbGUgPEpTT04gUFJPUEVSVFlfRklMRT5dCisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIGNyZWF0ZXMgYSBnZW5lcmljIFlvY3RvIGxheWVyIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQKKyAgICBwYXJhbWV0ZXJzLiAgVGhlIG5ldyBsYXllciB3aWxsIGJlIGEgbmV3IFlvY3RvIGxheWVyIGNvbnRhaW5lZCBieQorICAgIGRlZmF1bHQgd2l0aGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IHNwZWNpZmllZCBhcworICAgICdtZXRhLWxheWVyLW5hbWUnLiAgVGhlIC1vIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBwbGFjZSB0aGUgbGF5ZXIKKyAgICBpbiBhIGRpcmVjdG9yeSB3aXRoIGEgZGlmZmVyZW50IG5hbWUgYW5kIGxvY2F0aW9uLgorCisgICAgSWYgbGF5ZXJfcHJpb3JpdHkgaXMgc3BlY2lmaWVkLCBhIHNpbXBsZSBsYXllciB3aWxsIGJlIGNyZWF0ZWQKKyAgICB1c2luZyB0aGUgZ2l2ZW4gbGF5ZXIgcHJpb3JpdHksIGFuZCB0aGUgdXNlciB3aWxsIG5vdCBiZSBwcm9tcHRlZAorICAgIGZvciBmdXJ0aGVyIGlucHV0LgorCisgICAgVGhlIGxheWVyLXNwZWNpZmljIHByb3BlcnRpZXMgdGhhdCBkZWZpbmUgdGhlIHZhbHVlcyB0aGF0IHdpbGwgYmUKKyAgICB1c2VkIHRvIGdlbmVyYXRlIHRoZSBsYXllciBjYW4gYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kLWxpbmUKKyAgICB1c2luZyB0aGUgLWkgb3B0aW9uIGFuZCBzdXBwbHlpbmcgYSBKU09OIG9iamVjdCBjb25zaXN0aW5nIG9mIHRoZQorICAgIHNldCBvZiBuYW1lOnZhbHVlIHBhaXJzIG5lZWRlZCBieSB0aGUgbGF5ZXIuCisKKyAgICBJZiB0aGUgLWkgb3B0aW9uIGlzIG5vdCB1c2VkLCB0aGUgdXNlciB3aWxsIGJlIGludGVyYWN0aXZlbHkKKyAgICBwcm9tcHRlZCBmb3IgZWFjaCBvZiB0aGUgcmVxdWlyZWQgcHJvcGVydHkgdmFsdWVzLCB3aGljaCB3aWxsIHRoZW4KKyAgICBiZSB1c2VkIGFzIHZhbHVlcyBmb3IgbGF5ZXIgZ2VuZXJhdGlvbi4KKworICAgIFRoZSBzZXQgb2YgcHJvcGVydGllcyBhdmFpbGFibGUgY2FuIGJlIGxpc3RlZCB1c2luZyB0aGUKKyAgICAneW9jdG8tbGF5ZXIgbGlzdCcgY29tbWFuZC4KKworICAgIFNwZWNpZnlpbmcgLWMgY2F1c2VzIHRoZSBQeXRob24gY29kZSBnZW5lcmF0ZWQgYW5kIGV4ZWN1dGVkIHRvCisgICAgY3JlYXRlIHRoZSBsYXllciB0byBiZSBkdW1wZWQgdG8gdGhlICdic3BnZW4ub3V0JyBmaWxlIGluIHRoZQorICAgIGN1cnJlbnQgZGlyZWN0b3J5LCBhbmQgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuCisKKyAgICBOT1RFOiBPbmNlIGNyZWF0ZWQsIHlvdSBzaG91bGQgYWRkIHlvdXIgbmV3IGxheWVyIHRvIHlvdXIKKyAgICBiYmxheWVycy5jb25mIGZpbGUgaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHN1YnNlcXVlbnRseSBzZWVuIGFuZAorICAgIG1vZGlmaWVkIGJ5IHRoZSB5b2N0by1rZXJuZWwgdG9vbC4gIEluc3RydWN0aW9ucyBmb3IgZG9pbmcgdGhpcworICAgIGNhbiBiZSBmb3VuZCBpbiB0aGUgUkVBRE1FIGZpbGUgZ2VuZXJhdGVkIGluIHRoZSBsYXllcidzIHRvcC1sZXZlbAorICAgIGRpcmVjdG9yeS4KKworICAgIEZvciBleGFtcGxlLCBhc3N1bWluZyB5b3VyIHBva3kgcmVwbyBpcyBhdCAvcGF0aC90by9wb2t5LCB5b3VyIG5ldworICAgIGxheWVyIGlzIGF0IC9wYXRoL3RvL3Bva3kvbWV0YS1teWxheWVyLCBhbmQgeW91ciBidWlsZCBkaXJlY3RvcnkKKyAgICBpcyAvcGF0aC90by9idWlsZDoKKworICAgICQgZ2VkaXQgL3BhdGgvdG8vYnVpbGQvY29uZi9iYmxheWVycy5jb25mCisKKyAgICBCQkxBWUVSUyA/PSAiIFxcCisgICAgICAvcGF0aC90by9wb2t5L21ldGEgXFwKKyAgICAgIC9wYXRoL3RvL3Bva3kvbWV0YS15b2N0byBcXAorICAgICAgL3BhdGgvdG8vcG9reS9tZXRhLW15bGF5ZXIgXFwKKyAgICAgICIKKyIiIgorCit5b2N0b19sYXllcl9saXN0X3VzYWdlID0gIiIiCisKKyB1c2FnZTogeW9jdG8tbGF5ZXIgbGlzdCBwcm9wZXJ0aWVzCisgICAgICAgICAgICAgICAgWy1vIDxKU09OIFBST1BFUlRZIEZJTEU+IHwgLS1vdXRmaWxlIDxKU09OIFBST1BFUlRZX0ZJTEU+XQorICAgICAgICB5b2N0by1sYXllciBsaXN0IHByb3BlcnR5IDx4eHg+CisgICAgICAgICAgICAgICAgWy1vIDxKU09OIFBST1BFUlRZIEZJTEU+IHwgLS1vdXRmaWxlIDxKU09OIFBST1BFUlRZX0ZJTEU+XQorCisgVGhpcyBjb21tYW5kIGVudW1lcmF0ZXMgdGhlIGNvbXBsZXRlIHNldCBvZiBwb3NzaWJsZSB2YWx1ZXMgZm9yIGEKKyBzcGVjaWZpZWQgb3B0aW9uIG9yIHByb3BlcnR5IG5lZWRlZCBieSB0aGUgbGF5ZXIgY3JlYXRpb24gcHJvY2Vzcy4KKworIFRoZSBmaXJzdCBmb3JtIGVudW1lcmF0ZXMgYWxsIHRoZSBwb3NzaWJsZSBwcm9wZXJ0aWVzIHRoYXQgZXhpc3QgYW5kCisgbXVzdCBoYXZlIHZhbHVlcyBzcGVjaWZpZWQgZm9yIHRoZW0gaW4gdGhlICd5b2N0by1sYXllciBjcmVhdGUnCisgY29tbWFuZC4KKworIFRoZSBzZWNvbmQgZm9ybSBlbnVtZXJhdGVzIGFsbCB0aGUgcG9zc2libGUgdmFsdWVzIHRoYXQgZXhpc3QgYW5kIGNhbgorIGJlIHNwZWNpZmllZCBmb3IgYW55IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnRpZXMgaW4gdGhlICd5b2N0by1sYXllcgorIGNyZWF0ZScgY29tbWFuZC4KKworIFNlZSAneW9jdG8tbGF5ZXIgaGVscCBsaXN0JyBmb3IgbW9yZSBkZXRhaWxzLgorIiIiCisKK3lvY3RvX2xheWVyX2xpc3RfaGVscCA9ICIiIgorCitOQU1FCisgICAgeW9jdG8tbGF5ZXIgbGlzdCAtIExpc3QgYXZhaWxhYmxlIHZhbHVlcyBmb3IgbGF5ZXIgaW5wdXQgb3B0aW9ucyBhbmQgcHJvcGVydGllcworCitTWU5PUFNJUworICAgIHlvY3RvLWxheWVyIGxpc3QgcHJvcGVydGllcworICAgICAgICAgICAgWy0tbyA8SlNPTiBQUk9QRVJUWSBGSUxFPiB8IC1vdXRmaWxlIDxKU09OIFBST1BFUlRZX0ZJTEU+XQorICAgIHlvY3RvLWxheWVyIGxpc3QgcHJvcGVydHkgPHh4eD4KKyAgICAgICAgICAgIFstLW8gPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtb3V0ZmlsZSA8SlNPTiBQUk9QRVJUWV9GSUxFPl0KKworREVTQ1JJUFRJT04KKyAgICBUaGlzIGNvbW1hbmQgZW51bWVyYXRlcyB0aGUgY29tcGxldGUgc2V0IG9mIHBvc3NpYmxlIHZhbHVlcyBmb3IgYQorICAgIHNwZWNpZmllZCBvcHRpb24gb3IgcHJvcGVydHkgbmVlZGVkIGJ5IHRoZSBsYXllciBjcmVhdGlvbiBwcm9jZXNzLgorCisgICAgVGhlIGZpcnN0IGZvcm0gZW51bWVyYXRlcyBhbGwgdGhlIHBvc3NpYmxlIHByb3BlcnRpZXMgdGhhdCBleGlzdAorICAgIGFuZCBtdXN0IGhhdmUgdmFsdWVzIHNwZWNpZmllZCBmb3IgdGhlbSBpbiB0aGUgJ3lvY3RvLWxheWVyCisgICAgY3JlYXRlJyBjb21tYW5kLiAgVGhpcyBjb21tYW5kIGlzIG1haW5seSBtZWFudCB0byBhaWQgdGhlCisgICAgZGV2ZWxvcG1lbnQgb2YgdXNlciBpbnRlcmZhY2UgYWx0ZXJuYXRpdmVzIHRvIHRoZSBkZWZhdWx0CisgICAgdGV4dC1iYXNlZCBwcm9tcHRpbmcgaW50ZXJmYWNlLiAgSWYgdGhlIC1vIG9wdGlvbiBpcyBzcGVjaWZpZWQsCisgICAgdGhlIGxpc3Qgb2YgcHJvcGVydGllcywgaW4gYWRkaXRpb24gdG8gYmVpbmcgZGlzcGxheWVkLCB3aWxsIGJlCisgICAgd3JpdHRlbiB0byB0aGUgc3BlY2lmaWVkIGZpbGUgYXMgYSBKU09OIG9iamVjdC4gIEluIHRoaXMgY2FzZSwgdGhlCisgICAgb2JqZWN0IHdpbGwgY29uc2lzdCBvZiB0aGUgc2V0IG9mIG5hbWU6dmFsdWUgcGFpcnMgY29ycmVzcG9uZGluZworICAgIHRvIHRoZSAocG9zc2libHkgbmVzdGVkKSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMgZGVmaW5lZCBieSB0aGUKKyAgICBpbnB1dCBzdGF0ZW1lbnRzIHVzZWQgYnkgdGhlIEJTUC4gIFNvbWUgZXhhbXBsZSBvdXRwdXQgZm9yIHRoZQorICAgICdsaXN0IHByb3BlcnRpZXMnIGNvbW1hbmQ6CisKKyAgICAkIHlvY3RvLWxheWVyIGxpc3QgcHJvcGVydGllcworICAgICJleGFtcGxlX2JiYXBwZW5kX25hbWUiIDogeworICAgICAgICAiZGVmYXVsdCIgOiBleGFtcGxlCisgICAgICAgICJtc2ciIDogUGxlYXNlIGVudGVyIHRoZSBuYW1lIHlvdSdkIGxpa2UgdG8gdXNlIGZvciB5b3VyIGJiYXBwZW5kIGZpbGU6CisgICAgICAgICJ0eXBlIiA6IGVkaXQKKyAgICAgICAgInByaW8iIDogMjAKKyAgICAgICAgImZpbGVuYW1lIiA6IC9ob21lL3Ryei95b2N0by95b2N0by1sYXllci1kZXYvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9sYXllci1xdWVzdGlvbnMubm9pbnN0YWxsCisgICAgfQorICAgICJjcmVhdGVfZXhhbXBsZV9yZWNpcGUiIDogeworICAgICAgICAiZGVmYXVsdCIgOiBuCisgICAgICAgICJtc2ciIDogV291bGQgeW91IGxpa2UgdG8gaGF2ZSBhbiBleGFtcGxlIHJlY2lwZSBjcmVhdGVkPyAoeS9uKQorICAgICAgICAidHlwZSIgOiBib29sZWFuCisgICAgICAgICJwcmlvIiA6IDIwCisgICAgICAgICJmaWxlbmFtZSIgOiAvaG9tZS90cnoveW9jdG8veW9jdG8tbGF5ZXItZGV2L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvbGF5ZXItcXVlc3Rpb25zLm5vaW5zdGFsbAorICAgIH0KKyAgICAiZXhhbXBsZV9yZWNpcGVfbmFtZSIgOiB7CisgICAgICAgICJkZWZhdWx0IiA6IGV4YW1wbGUKKyAgICAgICAgIm1zZyIgOiBQbGVhc2UgZW50ZXIgdGhlIG5hbWUgeW91J2QgbGlrZSB0byB1c2UgZm9yIHlvdXIgZXhhbXBsZSByZWNpcGU6CisgICAgICAgICJ0eXBlIiA6IGVkaXQKKyAgICAgICAgInByaW8iIDogMjAKKyAgICAgICAgImZpbGVuYW1lIiA6IC9ob21lL3Ryei95b2N0by95b2N0by1sYXllci1kZXYvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9sYXllci1xdWVzdGlvbnMubm9pbnN0YWxsCisgICAgfQorICAgICJsYXllcl9wcmlvcml0eSIgOiB7CisgICAgICAgICJkZWZhdWx0IiA6IDYKKyAgICAgICAgIm1zZyIgOiBQbGVhc2UgZW50ZXIgdGhlIGxheWVyIHByaW9yaXR5IHlvdSdkIGxpa2UgdG8gdXNlIGZvciB0aGUgbGF5ZXI6CisgICAgICAgICJ0eXBlIiA6IGVkaXQKKyAgICAgICAgInByaW8iIDogMjAKKyAgICAgICAgImZpbGVuYW1lIiA6IC9ob21lL3Ryei95b2N0by95b2N0by1sYXllci1kZXYvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9sYXllci1xdWVzdGlvbnMubm9pbnN0YWxsCisgICAgfQorICAgICJjcmVhdGVfZXhhbXBsZV9iYmFwcGVuZCIgOiB7CisgICAgICAgICJkZWZhdWx0IiA6IG4KKyAgICAgICAgIm1zZyIgOiBXb3VsZCB5b3UgbGlrZSB0byBoYXZlIGFuIGV4YW1wbGUgYmJhcHBlbmQgZmlsZSBjcmVhdGVkPyAoeS9uKQorICAgICAgICAidHlwZSIgOiBib29sZWFuCisgICAgICAgICJwcmlvIiA6IDIwCisgICAgICAgICJmaWxlbmFtZSIgOiAvaG9tZS90cnoveW9jdG8veW9jdG8tbGF5ZXItZGV2L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvbGF5ZXItcXVlc3Rpb25zLm5vaW5zdGFsbAorICAgIH0KKyAgICAiZXhhbXBsZV9iYmFwcGVuZF92ZXJzaW9uIiA6IHsKKyAgICAgICAgImRlZmF1bHQiIDogMC4xCisgICAgICAgICJtc2ciIDogUGxlYXNlIGVudGVyIHRoZSB2ZXJzaW9uIG51bWJlciB5b3UnZCBsaWtlIHRvIHVzZSBmb3IgeW91ciBiYmFwcGVuZCBmaWxlICh0aGlzIHNob3VsZCBtYXRjaCB0aGUgcmVjaXBlIHlvdSdyZSBhcHBlbmRpbmcgdG8pOgorICAgICAgICAidHlwZSIgOiBlZGl0CisgICAgICAgICJwcmlvIiA6IDIwCisgICAgICAgICJmaWxlbmFtZSIgOiAvaG9tZS90cnoveW9jdG8veW9jdG8tbGF5ZXItZGV2L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvbGF5ZXItcXVlc3Rpb25zLm5vaW5zdGFsbAorICAgIH0KKworICAgIEVhY2ggZW50cnkgaW4gdGhlIG91dHB1dCBjb25zaXN0cyBvZiB0aGUgbmFtZSBvZiB0aGUgaW5wdXQgZWxlbWVudAorICAgIGUuZy4gImxheWVyX3ByaW9yaXR5IiwgZm9sbG93ZWQgYnkgdGhlIHByb3BlcnRpZXMgZGVmaW5lZCBmb3IgdGhhdAorICAgIGVsZW1lbnQgZW5jbG9zZWQgaW4gYnJhY2VzLiAgVGhpcyBpbmZvcm1hdGlvbiBzaG91bGQgcHJvdmlkZQorICAgIHN1ZmZpY2llbnQgaW5mb3JtYXRpb24gdG8gY3JlYXRlIGEgY29tcGxldGUgdXNlciBpbnRlcmZhY2UuICBUd28KKyAgICBmZWF0dXJlcyBvZiB0aGUgc2NoZW1lIHByb3ZpZGUgZm9yIGNvbmRpdGlvbmFsIGlucHV0LiAgRmlyc3QsIGlmIGEKKyAgICBQeXRob24gImlmIiBzdGF0ZW1lbnQgYXBwZWFycyBpbiBwbGFjZSBvZiBhbiBpbnB1dCBlbGVtZW50IG5hbWUsCisgICAgdGhlIHNldCBvZiBlbmNsb3NlZCBpbnB1dCBlbGVtZW50cyBhcHBseSBhbmQgc2hvdWxkIGJlIHByZXNlbnRlZAorICAgIHRvIHRoZSB1c2VyIG9ubHkgaWYgdGhlICdpZicgc3RhdGVtZW50IGV2YWx1YXRlcyB0byB0cnVlLiAgVGhlCisgICAgdGVzdCBpbiB0aGUgaWYgc3RhdGVtZW50IHdpbGwgYWx3YXlzIHJlZmVyZW5jZSBhbm90aGVyIGlucHV0CisgICAgZWxlbWVudCBpbiB0aGUgbGlzdCwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgZWxlbWVudCBiZWluZyB0ZXN0ZWQKKyAgICBzaG91bGQgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIGJlZm9yZSB0aGUgZWxlbWVudHMgZW5jbG9zZWQgYnkKKyAgICB0aGUgaWYgYmxvY2suICBTZWNvbmRseSwgaW4gYSBzaW1pbGFyIHdheSwgc29tZSBlbGVtZW50cyBjb250YWluCisgICAgImRlcGVuZHMtb24iIGFuZCBkZXBlbmRzLW9uLXZhbCIgdGFncywgd2hpY2ggbWVhbiB0aGF0IHRoZQorICAgIGFmZmVjdGVkIGlucHV0IGVsZW1lbnQgc2hvdWxkIG9ubHkgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIGlmIHRoZQorICAgIGVsZW1lbnQgaXQgZGVwZW5kcyBvbiBoYXMgYWxyZWFkeSBiZWVuIHByZXNlbnRlZCB0byB0aGUgdXNlciBhbmQKKyAgICB0aGUgdXNlciBoYXMgc2VsZWN0ZWQgdGhlIHNwZWNpZmllZCB2YWx1ZSBmb3IgdGhhdCBlbGVtZW50LgorCisgICAgVGhlIHNlY29uZCBmb3JtIGVudW1lcmF0ZXMgYWxsIHRoZSBwb3NzaWJsZSB2YWx1ZXMgdGhhdCBleGlzdCBhbmQKKyAgICBjYW4gYmUgc3BlY2lmaWVkIGZvciBhbnkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydGllcyBpbiB0aGUKKyAgICAneW9jdG8tbGF5ZXIgY3JlYXRlJyBjb21tYW5kLiAgSWYgdGhlIC1vIG9wdGlvbiBpcyBzcGVjaWZpZWQsIHRoZQorICAgIGxpc3Qgb2YgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHksIGluIGFkZGl0aW9uIHRvIGJlaW5nCisgICAgZGlzcGxheWVkLCB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHNwZWNpZmllZCBmaWxlIGFzIGEgSlNPTiBvYmplY3QuCisgICAgSW4gdGhpcyBjYXNlLCB0aGUgb2JqZWN0IHdpbGwgY29uc2lzdCBvZiB0aGUgc2V0IG9mIG5hbWU6dmFsdWUKKyAgICBwYWlycyBjb3JyZXNwb25kaW5nIHRvIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMgYXNzb2NpYXRlZAorICAgIHdpdGggdGhlIHByb3BlcnR5LgorCisgICAgJCB5b2N0by1sYXllciBsaXN0IHByb3BlcnR5IGxheWVyX3ByaW9yaXR5CisgICAgIFtubyBvdXRwdXQgLSBsYXllcl9wcmlvcml0eSBpcyBhIHRleHQgZmllbGQgdGhhdCBoYXMgbm8gZW51bWVyYWJsZSB2YWx1ZXNdCisKKyAgICBUaGUgc2Vjb25kIGZvcm0gYXMgd2VsbCBpcyBtZWFudCBtYWlubHkgZm9yIGRldmVsb3BlcnMgb2YKKyAgICBhbHRlcm5hdGl2ZSBpbnRlcmZhY2VzIC0gaXQgYWxsb3dzIHRoZSBkZXZlbG9wZXIgdG8gZmV0Y2ggdGhlCisgICAgcG9zc2libGUgdmFsdWVzIGZvciBhIGdpdmVuIGlucHV0IGVsZW1lbnQgb24tZGVtYW5kLiAgVGhpcworICAgIG9uLWRlbWFuZCBjYXBhYmlsaXR5IGlzIGVzcGVjaWFsbHkgdmFsdWFibGUgZm9yIGVsZW1lbnRzIHRoYXQKKyAgICByZXF1aXJlIHJlbGF0aXZlbHkgZXhwZW5zaXZlIHJlbW90ZSBvcGVyYXRpb25zIHRvIGZ1bGZpbGwsIHN1Y2ggYXMKKyAgICB0aGUgZXhhbXBsZSB0aGF0IHJldHVybnMgdGhlIHNldCBvZiBicmFuY2hlcyBhdmFpbGFibGUgaW4gYSByZW1vdGUKKyAgICBnaXQgdHJlZSBhYm92ZS4KKworIiIiCisKKyMjCisjIHRlc3QgY29kZQorIyMKKwordGVzdF9ic3BfcHJvcGVydGllcyA9IHsKKyAgICAnc21wJzogJ3llcycsCisgICAgJ3RvdWNoc2NyZWVuJzogJ3llcycsCisgICAgJ2tleWJvYXJkJzogJ25vJywKKyAgICAneHNlcnZlcic6ICd5ZXMnLAorICAgICd4c2VydmVyX2Nob2ljZSc6ICd4c2VydmVyLWk5MTUnLAorICAgICdmZWF0dXJlcyc6IFsnZ29vZGZlYXR1cmUnLCAnZ3JlYXRmZWF0dXJlJ10sCisgICAgJ3R1bmVmaWxlJzogJ3R1bmUtcXVhcmsnLAorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9rZXJuZWwucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9rZXJuZWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE2OGI2MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL2tlcm5lbC5weQpAQCAtMCwwICsxLDEwNzEgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBERVNDUklQVElPTgorIyBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBrZXJuZWwtcmVsYXRlZCBmdW5jdGlvbnMgdXNlZCBieQorIyAneW9jdG8ta2VybmVsJyB0byBtYW5hZ2Uga2VybmVsIGNvbmZpZyBpdGVtcyBhbmQgcGF0Y2hlcyBmb3IgWW9jdG8KKyMgQlNQcy4KKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBpbnRlbC5jb20+CisjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAorZnJvbSB0YWdzIGltcG9ydCAqCitpbXBvcnQgZ2xvYgoraW1wb3J0IHN1YnByb2Nlc3MKK2Zyb20gZW5naW5lIGltcG9ydCBjcmVhdGVfY29udGV4dAorCisKK2RlZiBmaW5kX2JibGF5ZXJzKCk6CisgICAgIiIiCisgICAgRmluZCBhbmQgcmV0dXJuIGEgc2FuaXRpemVkIGxpc3Qgb2YgdGhlIGxheWVycyBmb3VuZCBpbiBCQkxBWUVSUy4KKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgIGJ1aWxkZGlyID0gb3MuZW52aXJvblsiQlVJTERESVIiXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcHJpbnQgIkJVSUxERElSIG5vdCBmb3VuZCwgZXhpdGluZy4gKERpZCB5b3UgZm9yZ2V0IHRvIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudj8pIgorICAgICAgICBzeXMuZXhpdCgxKQorICAgIGJibGF5ZXJzX2NvbmYgPSBvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICJjb25mL2JibGF5ZXJzLmNvbmYiKQorCisgICAgbGF5ZXJzID0gW10KKworICAgIGJpdGJha2VfZW52X2NtZCA9ICJiaXRiYWtlIC1lIgorICAgIGJpdGJha2VfZW52X2xpbmVzID0gc3VicHJvY2Vzcy5Qb3BlbihiaXRiYWtlX2Vudl9jbWQsIHNoZWxsPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dC5yZWFkKCkKKworICAgIGlmIG5vdCBiaXRiYWtlX2Vudl9saW5lczoKKyAgICAgICAgcHJpbnQgIkNvdWxkbid0IGdldCAnJXMnIG91dHB1dCwgZXhpdGluZy4iICUgYml0YmFrZV9lbnZfY21kCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBmb3IgbGluZSBpbiBiaXRiYWtlX2Vudl9saW5lcy5zcGxpdCgnXG4nKToKKyAgICAgICAgYmJsYXllcnMgPSBnZXRfbGluZV92YWwobGluZSwgIkJCTEFZRVJTIikKKyAgICAgICAgaWYgKGJibGF5ZXJzKToKKyAgICAgICAgICAgIGJyZWFrCisKKyAgICBpZiBub3QgYmJsYXllcnM6CisgICAgICAgIHByaW50ICJDb3VsZG4ndCBmaW5kIEJCTEFZRVJTIGluICVzIG91dHB1dCwgZXhpdGluZy4iICUgXAorICAgICAgICAgICAgYml0YmFrZV9lbnZfY21kCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICByYXdfbGF5ZXJzID0gYmJsYXllcnMuc3BsaXQoKQorCisgICAgZm9yIGxheWVyIGluIHJhd19sYXllcnM6CisgICAgICAgIGlmIGxheWVyID09ICdCQkxBWUVSUycgb3IgJz0nIGluIGxheWVyOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgbGF5ZXJzLmFwcGVuZChsYXllcikKKworICAgIHJldHVybiBsYXllcnMKKworCitkZWYgZ2V0X2xpbmVfdmFsKGxpbmUsIGtleSk6CisgICAgIiIiCisgICAgRXh0cmFjdCB0aGUgdmFsdWUgZnJvbSB0aGUgVkFSPSJ2YWwiIHN0cmluZworICAgICIiIgorICAgIGlmIGxpbmUuc3RhcnRzd2l0aChrZXkgKyAiPSIpOgorICAgICAgICBzdHJpcHBlZF9saW5lID0gbGluZS5zcGxpdCgnPScpWzFdCisgICAgICAgIHN0cmlwcGVkX2xpbmUgPSBzdHJpcHBlZF9saW5lLnJlcGxhY2UoJ1wiJywgJycpCisgICAgICAgIHJldHVybiBzdHJpcHBlZF9saW5lCisgICAgcmV0dXJuIE5vbmUKKworCitkZWYgZmluZF9tZXRhX2xheWVyKCk6CisgICAgIiIiCisgICAgRmluZCBhbmQgcmV0dXJuIHRoZSBtZXRhIGxheWVyIGluIEJCTEFZRVJTLgorICAgICIiIgorICAgIGxheWVycyA9IGZpbmRfYmJsYXllcnMoKQorCisgICAgZm9yIGxheWVyIGluIGxheWVyczoKKyAgICAgICAgaWYgbGF5ZXIuZW5kc3dpdGgoIm1ldGEiKToKKyAgICAgICAgICAgIHJldHVybiBsYXllcgorCisgICAgcmV0dXJuIE5vbmUKKworCitkZWYgZmluZF9ic3BfbGF5ZXIobWFjaGluZSk6CisgICAgIiIiCisgICAgRmluZCBhbmQgcmV0dXJuIGEgbWFjaGluZSdzIEJTUCBsYXllciBpbiBCQkxBWUVSUy4KKyAgICAiIiIKKyAgICBsYXllcnMgPSBmaW5kX2JibGF5ZXJzKCkKKworICAgIGZvciBsYXllciBpbiBsYXllcnM6CisgICAgICAgIGlmIGxheWVyLmVuZHN3aXRoKG1hY2hpbmUpOgorICAgICAgICAgICAgcmV0dXJuIGxheWVyCisKKyAgICBwcmludCAiVW5hYmxlIHRvIGZpbmQgdGhlIEJTUCBsYXllciBmb3IgbWFjaGluZSAlcy4iICUgbWFjaGluZQorICAgIHByaW50ICJQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGxpc3RlZCBpbiBiYmxheWVycy5jb25mIgorICAgIHN5cy5leGl0KDEpCisKKworZGVmIGdlbl9jaG9pY2VzX3N0cihjaG9pY2VzKToKKyAgICAiIiIKKyAgICBHZW5lcmF0ZSBhIG51bWJlcmVkIGxpc3Qgb2YgY2hvaWNlcyBmcm9tIGEgbGlzdCBvZiBjaG9pY2VzIGZvcgorICAgIGRpc3BsYXkgdG8gdGhlIHVzZXIuCisgICAgIiIiCisgICAgY2hvaWNlc19zdHIgPSAiIgorCisgICAgZm9yIGksIGNob2ljZSBpbiBlbnVtZXJhdGUoY2hvaWNlcyk6CisgICAgICAgIGNob2ljZXNfc3RyICs9ICJcdCIgKyBzdHIoaSArIDEpICsgIikgIiArIGNob2ljZSArICJcbiIKKworICAgIHJldHVybiBjaG9pY2VzX3N0cgorCisKK2RlZiBvcGVuX3VzZXJfZmlsZShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIHVzZXJmaWxlLCBtb2RlKToKKyAgICAiIiIKKyAgICBGaW5kIG9uZSBvZiB0aGUgdXNlciBmaWxlcyAodXNlci1jb25maWcuY2ZnLCB1c2VyLXBhdGNoZXMuc2NjKQorICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFjaGluZSAoY291bGQgYmUgaW4gZmlsZXMvLAorICAgIGxpbnV4LXlvY3RvLWN1c3RvbS8sIGV0YykuICBSZXR1cm5zIHRoZSBvcGVuIGZpbGUgaWYgZm91bmQsIE5vbmUKKyAgICBvdGhlcndpc2UuCisKKyAgICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjbG9zaW5nIHRoZSBmaWxlIHJldHVybmVkLgorICAgICIiIgorICAgIGxheWVyID0gZmluZF9ic3BfbGF5ZXIobWFjaGluZSkKKyAgICBsaW51eGRpciA9IG9zLnBhdGguam9pbihsYXllciwgInJlY2lwZXMta2VybmVsL2xpbnV4IikKKyAgICBsaW51eGRpcl9saXN0ID0gb3MubGlzdGRpcihsaW51eGRpcikKKyAgICBmb3IgZmlsZW9iaiBpbiBsaW51eGRpcl9saXN0OgorICAgICAgICBmaWxlb2JqX3BhdGggPSBvcy5wYXRoLmpvaW4obGludXhkaXIsIGZpbGVvYmopCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZmlsZW9ial9wYXRoKToKKyAgICAgICAgICAgIHVzZXJmaWxlX25hbWUgPSBvcy5wYXRoLmpvaW4oZmlsZW9ial9wYXRoLCB1c2VyZmlsZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmID0gb3Blbih1c2VyZmlsZV9uYW1lLCBtb2RlKQorICAgICAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgIHJldHVybiBOb25lCisKKworZGVmIHJlYWRfY29uZmlnX2l0ZW1zKHNjcmlwdHNfcGF0aCwgbWFjaGluZSk6CisgICAgIiIiCisgICAgRmluZCBhbmQgcmV0dXJuIGEgbGlzdCBvZiBjb25maWcgaXRlbXMgKENPTkZJR19YWFgpIGluIGEgbWFjaGluZSdzCisgICAgdXNlci1kZWZpbmVkIGNvbmZpZyBmcmFnbWVudCBbJHttYWNoaW5lfS11c2VyLWNvbmZpZy5jZmddLgorICAgICIiIgorICAgIGNvbmZpZ19pdGVtcyA9IFtdCisKKyAgICBmID0gb3Blbl91c2VyX2ZpbGUoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBtYWNoaW5lKyItdXNlci1jb25maWcuY2ZnIiwgInIiKQorICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICBzID0gbGluZS5zdHJpcCgpCisgICAgICAgIGlmIHMgYW5kIG5vdCBzLnN0YXJ0c3dpdGgoIiMiKToKKyAgICAgICAgICAgIGNvbmZpZ19pdGVtcy5hcHBlbmQocykKKyAgICBmLmNsb3NlKCkKKworICAgIHJldHVybiBjb25maWdfaXRlbXMKKworCitkZWYgd3JpdGVfY29uZmlnX2l0ZW1zKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgY29uZmlnX2l0ZW1zKToKKyAgICAiIiIKKyAgICBXcml0ZSAocmVwbGFjZSkgdGhlIGxpc3Qgb2YgY29uZmlnIGl0ZW1zIChDT05GSUdfWFhYKSBpbiBhCisgICAgbWFjaGluZSdzIHVzZXItZGVmaW5lZCBjb25maWcgZnJhZ21lbnQgWyR7bWFjaGluZX09dXNlci1jb25maWcuY2ZnXS4KKyAgICAiIiIKKyAgICBmID0gb3Blbl91c2VyX2ZpbGUoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBtYWNoaW5lKyItdXNlci1jb25maWcuY2ZnIiwgInciKQorICAgIGZvciBpdGVtIGluIGNvbmZpZ19pdGVtczoKKyAgICAgICAgZi53cml0ZShpdGVtICsgIlxuIikKKyAgICBmLmNsb3NlKCkKKworICAgIGtlcm5lbF9jb250ZW50c19jaGFuZ2VkKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKKworCitkZWYgeW9jdG9fa2VybmVsX2NvbmZpZ19saXN0KHNjcmlwdHNfcGF0aCwgbWFjaGluZSk6CisgICAgIiIiCisgICAgRGlzcGxheSB0aGUgbGlzdCBvZiBjb25maWcgaXRlbXMgKENPTkZJR19YWFgpIGluIGEgbWFjaGluZSdzCisgICAgdXNlci1kZWZpbmVkIGNvbmZpZyBmcmFnbWVudCBbJHttYWNoaW5lfS11c2VyLWNvbmZpZy5jZmddLgorICAgICIiIgorICAgIGNvbmZpZ19pdGVtcyA9IHJlYWRfY29uZmlnX2l0ZW1zKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKKworICAgIHByaW50ICJUaGUgY3VycmVudCBzZXQgb2YgbWFjaGluZS1zcGVjaWZpYyBrZXJuZWwgY29uZmlnIGl0ZW1zIGZvciAlcyBpczoiICUgbWFjaGluZQorICAgIHByaW50IGdlbl9jaG9pY2VzX3N0cihjb25maWdfaXRlbXMpCisKKworZGVmIHlvY3RvX2tlcm5lbF9jb25maWdfcm0oc2NyaXB0c19wYXRoLCBtYWNoaW5lKToKKyAgICAiIiIKKyAgICBEaXNwbGF5IHRoZSBsaXN0IG9mIGNvbmZpZyBpdGVtcyAoQ09ORklHX1hYWCkgaW4gYSBtYWNoaW5lJ3MKKyAgICB1c2VyLWRlZmluZWQgY29uZmlnIGZyYWdtZW50IFske21hY2hpbmV9LXVzZXItY29uZmlnLmNmZ10sIHByb21wdCB0aGUgdXNlcgorICAgIGZvciBvbmUgb3IgbW9yZSB0byByZW1vdmUsIGFuZCByZW1vdmUgdGhlbS4KKyAgICAiIiIKKyAgICBjb25maWdfaXRlbXMgPSByZWFkX2NvbmZpZ19pdGVtcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCisKKyAgICBwcmludCAiU3BlY2lmeSB0aGUga2VybmVsIGNvbmZpZyBpdGVtcyB0byByZW1vdmU6IgorICAgIGlucHV0ID0gcmF3X2lucHV0KGdlbl9jaG9pY2VzX3N0cihjb25maWdfaXRlbXMpKQorICAgIHJtX2Nob2ljZXMgPSBpbnB1dC5zcGxpdCgpCisgICAgcm1fY2hvaWNlcy5zb3J0KCkKKworICAgIHJlbW92ZWQgPSBbXQorCisgICAgZm9yIGNob2ljZSBpbiByZXZlcnNlZChybV9jaG9pY2VzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWR4ID0gaW50KGNob2ljZSkgLSAxCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcHJpbnQgIkludmFsaWQgY2hvaWNlICglcyksIGV4aXRpbmciICUgY2hvaWNlCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBpZiBpZHggPCAwIG9yIGlkeCA+PSBsZW4oY29uZmlnX2l0ZW1zKToKKyAgICAgICAgICAgIHByaW50ICJJbnZhbGlkIGNob2ljZSAoJWQpLCBleGl0aW5nIiAlIChpZHggKyAxKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgcmVtb3ZlZC5hcHBlbmQoY29uZmlnX2l0ZW1zLnBvcChpZHgpKQorCisgICAgd3JpdGVfY29uZmlnX2l0ZW1zKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgY29uZmlnX2l0ZW1zKQorCisgICAgcHJpbnQgIlJlbW92ZWQgaXRlbXM6IgorICAgIGZvciByIGluIHJlbW92ZWQ6CisgICAgICAgIHByaW50ICJcdCVzIiAlIHIKKworCitkZWYgeW9jdG9fa2VybmVsX2NvbmZpZ19hZGQoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBjb25maWdfaXRlbXMpOgorICAgICIiIgorICAgIEFkZCBvbmUgb3IgbW9yZSBjb25maWcgaXRlbXMgKENPTkZJR19YWFgpIHRvIGEgbWFjaGluZSdzCisgICAgdXNlci1kZWZpbmVkIGNvbmZpZyBmcmFnbWVudCBbJHttYWNoaW5lfS11c2VyLWNvbmZpZy5jZmddLgorICAgICIiIgorICAgIG5ld19pdGVtcyA9IFtdCisgICAgZHVwX2l0ZW1zID0gW10KKworICAgIGN1cl9pdGVtcyA9IHJlYWRfY29uZmlnX2l0ZW1zKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKKworICAgIGZvciBpdGVtIGluIGNvbmZpZ19pdGVtczoKKyAgICAgICAgaWYgbm90IGl0ZW0uc3RhcnRzd2l0aCgiQ09ORklHIikgb3IgKG5vdCAiPXkiIGluIGl0ZW0gYW5kIG5vdCAiPW0iIGluIGl0ZW0pOgorICAgICAgICAgICAgcHJpbnQgIkludmFsaWQgY29uZmlnIGl0ZW0gKCVzKSwgZXhpdGluZyIgJSBpdGVtCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBpZiBpdGVtIG5vdCBpbiBjdXJfaXRlbXMgYW5kIGl0ZW0gbm90IGluIG5ld19pdGVtczoKKyAgICAgICAgICAgIG5ld19pdGVtcy5hcHBlbmQoaXRlbSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGR1cF9pdGVtcy5hcHBlbmQoaXRlbSkKKworICAgIGlmIGxlbihuZXdfaXRlbXMpID4gMDoKKyAgICAgICAgY3VyX2l0ZW1zLmV4dGVuZChuZXdfaXRlbXMpCisgICAgICAgIHdyaXRlX2NvbmZpZ19pdGVtcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGN1cl9pdGVtcykKKyAgICAgICAgcHJpbnQgIkFkZGVkIGl0ZW0lczoiICUgKCIiIGlmIGxlbihuZXdfaXRlbXMpPT0xIGVsc2UgInMiKQorICAgICAgICBmb3IgbiBpbiBuZXdfaXRlbXM6CisgICAgICAgICAgICBwcmludCAiXHQlcyIgJSBuCisKKyAgICBpZiBsZW4oZHVwX2l0ZW1zKSA+IDA6CisgICAgICAgIG91dHB1dD0iVGhlIGZvbGxvd2luZyBpdGVtJXMgYWxyZWFkeSBleGlzdCVzIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIGlnbm9yaW5nICVzOiIgJSBcCisgICAgICAgICAgICAoKCIiLCJzIiwgIml0IikgaWYgbGVuKGR1cF9pdGVtcyk9PTEgZWxzZSAoInMiLCAiIiwgInRoZW0iICkpCisgICAgICAgIHByaW50IG91dHB1dAorICAgICAgICBmb3IgbiBpbiBkdXBfaXRlbXM6CisgICAgICAgICAgICBwcmludCAiXHQlcyIgJSBuCisKK2RlZiBmaW5kX2N1cnJlbnRfa2VybmVsKGJzcF9sYXllciwgbWFjaGluZSk6CisgICAgIiIiCisgICAgRGV0ZXJtaW5lIHRoZSBrZXJuZWwgYW5kIHZlcnNpb24gY3VycmVudGx5IGJlaW5nIHVzZWQgaW4gdGhlIEJTUC4KKyAgICAiIiIKKyAgICBtYWNoaW5lX2NvbmYgPSBvcy5wYXRoLmpvaW4oYnNwX2xheWVyLCAiY29uZi9tYWNoaW5lLyIgKyBtYWNoaW5lICsgIi5jb25mIikKKworICAgIHByZWZlcnJlZF9rZXJuZWwgPSBwcmVmZXJyZWRfa2VybmVsX3ZlcnNpb24gPSBwcmVmZXJyZWRfdmVyc2lvbl92YXJuYW1lID0gTm9uZQorCisgICAgZiA9IG9wZW4obWFjaGluZV9jb25mLCAiciIpCisgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgIGlmIGxpbmUuc3RyaXAoKS5zdGFydHN3aXRoKCJQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwiKToKKyAgICAgICAgICAgIHByZWZlcnJlZF9rZXJuZWwgPSBsaW5lLnNwbGl0KClbLTFdCisgICAgICAgICAgICBwcmVmZXJyZWRfa2VybmVsID0gcHJlZmVycmVkX2tlcm5lbC5yZXBsYWNlKCdcIicsJycpCisgICAgICAgICAgICBwcmVmZXJyZWRfdmVyc2lvbl92YXJuYW1lID0gIlBSRUZFUlJFRF9WRVJTSU9OXyIgKyBwcmVmZXJyZWRfa2VybmVsCisgICAgICAgIGlmIHByZWZlcnJlZF92ZXJzaW9uX3Zhcm5hbWUgYW5kIGxpbmUuc3RyaXAoKS5zdGFydHN3aXRoKHByZWZlcnJlZF92ZXJzaW9uX3Zhcm5hbWUpOgorICAgICAgICAgICAgcHJlZmVycmVkX2tlcm5lbF92ZXJzaW9uID0gbGluZS5zcGxpdCgpWy0xXQorICAgICAgICAgICAgcHJlZmVycmVkX2tlcm5lbF92ZXJzaW9uID0gcHJlZmVycmVkX2tlcm5lbF92ZXJzaW9uLnJlcGxhY2UoJ1wiJywnJykKKyAgICAgICAgICAgIHByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbiA9IHByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbi5yZXBsYWNlKCclJywnJykKKworICAgIGlmIHByZWZlcnJlZF9rZXJuZWwgYW5kIHByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbjoKKyAgICAgICAgcmV0dXJuIHByZWZlcnJlZF9rZXJuZWwgKyAiXyIgKyBwcmVmZXJyZWRfa2VybmVsX3ZlcnNpb24KKyAgICBlbGlmIHByZWZlcnJlZF9rZXJuZWw6CisgICAgICAgIHJldHVybiBwcmVmZXJyZWRfa2VybmVsCisKKworZGVmIGZpbmRfZmlsZXNkaXIoc2NyaXB0c19wYXRoLCBtYWNoaW5lKToKKyAgICAiIiIKKyAgICBGaW5kIHRoZSBuYW1lIG9mIHRoZSAnZmlsZXMnIGRpciBhc3NvY2lhdGVkIHdpdGggdGhlIG1hY2hpbmUKKyAgICAoY291bGQgYmUgaW4gZmlsZXMvLCBsaW51eC15b2N0by1jdXN0b20vLCBldGMpLiAgUmV0dXJucyB0aGUgbmFtZQorICAgIG9mIHRoZSBmaWxlcyBkaXIgaWYgZm91bmQsIE5vbmUgb3RoZXJ3aXNlLgorICAgICIiIgorICAgIGxheWVyID0gZmluZF9ic3BfbGF5ZXIobWFjaGluZSkKKyAgICBmaWxlc2RpciA9IE5vbmUKKyAgICBsaW51eGRpciA9IG9zLnBhdGguam9pbihsYXllciwgInJlY2lwZXMta2VybmVsL2xpbnV4IikKKyAgICBsaW51eGRpcl9saXN0ID0gb3MubGlzdGRpcihsaW51eGRpcikKKyAgICBmb3IgZmlsZW9iaiBpbiBsaW51eGRpcl9saXN0OgorICAgICAgICBmaWxlb2JqX3BhdGggPSBvcy5wYXRoLmpvaW4obGludXhkaXIsIGZpbGVvYmopCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZmlsZW9ial9wYXRoKToKKyAgICAgICAgICAgICMgdGhpcyBjb3VsZCBiZSBmaWxlcy8gb3IgbGludXgteW9jdG8tY3VzdG9tLywgd2UgaGF2ZSBubyB3YXkgb2YgZGlzdGluZ3Vpc2hpbmcKKyAgICAgICAgICAgICMgc28gd2UgdGFrZSB0aGUgZmlyc3QgKGFuZCBub3JtYWxseSBvbmx5KSBkaXIgd2UgZmluZCBhcyB0aGUgJ2ZpbGVzZGlyJworICAgICAgICAgICAgZmlsZXNkaXIgPSBmaWxlb2JqX3BhdGgKKworICAgIHJldHVybiBmaWxlc2RpcgorCisKK2RlZiByZWFkX3BhdGNoX2l0ZW1zKHNjcmlwdHNfcGF0aCwgbWFjaGluZSk6CisgICAgIiIiCisgICAgRmluZCBhbmQgcmV0dXJuIGEgbGlzdCBvZiBwYXRjaCBpdGVtcyBpbiBhIG1hY2hpbmUncyB1c2VyLWRlZmluZWQKKyAgICBwYXRjaCBsaXN0IFske21hY2hpbmV9LXVzZXItcGF0Y2hlcy5zY2NdLgorICAgICIiIgorICAgIHBhdGNoX2l0ZW1zID0gW10KKworICAgIGYgPSBvcGVuX3VzZXJfZmlsZShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIG1hY2hpbmUrIi11c2VyLXBhdGNoZXMuc2NjIiwgInIiKQorICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICBzID0gbGluZS5zdHJpcCgpCisgICAgICAgIGlmIHMgYW5kIG5vdCBzLnN0YXJ0c3dpdGgoIiMiKToKKyAgICAgICAgICAgIGZpZWxkcyA9IHMuc3BsaXQoKQorICAgICAgICAgICAgaWYgbm90IGZpZWxkc1swXSA9PSAicGF0Y2giOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBwYXRjaF9pdGVtcy5hcHBlbmQoZmllbGRzWzFdKQorICAgIGYuY2xvc2UoKQorCisgICAgcmV0dXJuIHBhdGNoX2l0ZW1zCisKKworZGVmIHdyaXRlX3BhdGNoX2l0ZW1zKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgcGF0Y2hfaXRlbXMpOgorICAgICIiIgorICAgIFdyaXRlIChyZXBsYWNlKSB0aGUgbGlzdCBvZiBwYXRjaGVzIGluIGEgbWFjaGluZSdzIHVzZXItZGVmaW5lZAorICAgIHBhdGNoIGxpc3QgWyR7bWFjaGluZX0tdXNlci1wYXRjaGVzLnNjY10uCisgICAgIiIiCisgICAgZiA9IG9wZW5fdXNlcl9maWxlKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgbWFjaGluZSsiLXVzZXItcGF0Y2hlcy5zY2MiLCAidyIpCisgICAgZm9yIGl0ZW0gaW4gcGF0Y2hfaXRlbXM6CisgICAgICAgIGYud3JpdGUoInBhdGNoICIgKyBpdGVtICsgIlxuIikKKyAgICBmLmNsb3NlKCkKKworICAgIGtlcm5lbF9jb250ZW50c19jaGFuZ2VkKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKKworCitkZWYgeW9jdG9fa2VybmVsX3BhdGNoX2xpc3Qoc2NyaXB0c19wYXRoLCBtYWNoaW5lKToKKyAgICAiIiIKKyAgICBEaXNwbGF5IHRoZSBsaXN0IG9mIHBhdGNoZXMgaW4gYSBtYWNoaW5lJ3MgdXNlci1kZWZpbmVkIHBhdGNoIGxpc3QKKyAgICBbJHttYWNoaW5lfS11c2VyLXBhdGNoZXMuc2NjXS4KKyAgICAiIiIKKyAgICBwYXRjaGVzID0gcmVhZF9wYXRjaF9pdGVtcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCisKKyAgICBwcmludCAiVGhlIGN1cnJlbnQgc2V0IG9mIG1hY2hpbmUtc3BlY2lmaWMgcGF0Y2hlcyBmb3IgJXMgaXM6IiAlIG1hY2hpbmUKKyAgICBwcmludCBnZW5fY2hvaWNlc19zdHIocGF0Y2hlcykKKworCitkZWYgeW9jdG9fa2VybmVsX3BhdGNoX3JtKHNjcmlwdHNfcGF0aCwgbWFjaGluZSk6CisgICAgIiIiCisgICAgUmVtb3ZlIG9uZSBvciBtb3JlIHBhdGNoZXMgZnJvbSBhIG1hY2hpbmUncyB1c2VyLWRlZmluZWQgcGF0Y2gKKyAgICBsaXN0IFske21hY2hpbmV9LXVzZXItcGF0Y2hlcy5zY2NdLgorICAgICIiIgorICAgIHBhdGNoZXMgPSByZWFkX3BhdGNoX2l0ZW1zKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKKworICAgIHByaW50ICJTcGVjaWZ5IHRoZSBwYXRjaGVzIHRvIHJlbW92ZToiCisgICAgaW5wdXQgPSByYXdfaW5wdXQoZ2VuX2Nob2ljZXNfc3RyKHBhdGNoZXMpKQorICAgIHJtX2Nob2ljZXMgPSBpbnB1dC5zcGxpdCgpCisgICAgcm1fY2hvaWNlcy5zb3J0KCkKKworICAgIHJlbW92ZWQgPSBbXQorCisgICAgZmlsZXNkaXIgPSBmaW5kX2ZpbGVzZGlyKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKKyAgICBpZiBub3QgZmlsZXNkaXI6CisgICAgICAgIHByaW50ICJDb3VsZG4ndCBybSBwYXRjaChlcykgc2luY2Ugd2UgY291bGRuJ3QgZmluZCBhICdmaWxlcycgZGlyIgorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZm9yIGNob2ljZSBpbiByZXZlcnNlZChybV9jaG9pY2VzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWR4ID0gaW50KGNob2ljZSkgLSAxCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcHJpbnQgIkludmFsaWQgY2hvaWNlICglcyksIGV4aXRpbmciICUgY2hvaWNlCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBpZiBpZHggPCAwIG9yIGlkeCA+PSBsZW4ocGF0Y2hlcyk6CisgICAgICAgICAgICBwcmludCAiSW52YWxpZCBjaG9pY2UgKCVkKSwgZXhpdGluZyIgJSAoaWR4ICsgMSkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGZpbGVzZGlyX3BhdGNoID0gb3MucGF0aC5qb2luKGZpbGVzZGlyLCBwYXRjaGVzW2lkeF0pCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGVzZGlyX3BhdGNoKToKKyAgICAgICAgICAgIG9zLnJlbW92ZShmaWxlc2Rpcl9wYXRjaCkKKyAgICAgICAgcmVtb3ZlZC5hcHBlbmQocGF0Y2hlc1tpZHhdKQorICAgICAgICBwYXRjaGVzLnBvcChpZHgpCisKKyAgICB3cml0ZV9wYXRjaF9pdGVtcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIHBhdGNoZXMpCisKKyAgICBwcmludCAiUmVtb3ZlZCBwYXRjaGVzOiIKKyAgICBmb3IgciBpbiByZW1vdmVkOgorICAgICAgICBwcmludCAiXHQlcyIgJSByCisKKworZGVmIHlvY3RvX2tlcm5lbF9wYXRjaF9hZGQoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBwYXRjaGVzKToKKyAgICAiIiIKKyAgICBBZGQgb25lIG9yIG1vcmUgcGF0Y2hlcyB0byBhIG1hY2hpbmUncyB1c2VyLWRlZmluZWQgcGF0Y2ggbGlzdAorICAgIFske21hY2hpbmV9LXVzZXItcGF0Y2hlcy5zY2NdLgorICAgICIiIgorICAgIGV4aXN0aW5nX3BhdGNoZXMgPSByZWFkX3BhdGNoX2l0ZW1zKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKKworICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzOgorICAgICAgICBpZiBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKSBpbiBleGlzdGluZ19wYXRjaGVzOgorICAgICAgICAgICAgcHJpbnQgIkNvdWxkbid0IGFkZCBwYXRjaCAoJXMpIHNpbmNlIGl0J3MgYWxyZWFkeSBiZWVuIGFkZGVkIiAlIG9zLnBhdGguYmFzZW5hbWUocGF0Y2gpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZmlsZXNkaXIgPSBmaW5kX2ZpbGVzZGlyKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKKyAgICBpZiBub3QgZmlsZXNkaXI6CisgICAgICAgIHByaW50ICJDb3VsZG4ndCBhZGQgcGF0Y2ggKCVzKSBzaW5jZSB3ZSBjb3VsZG4ndCBmaW5kIGEgJ2ZpbGVzJyBkaXIgdG8gYWRkIGl0IHRvIiAlIG9zLnBhdGguYmFzZW5hbWUocGF0Y2gpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBuZXdfcGF0Y2hlcyA9IFtdCisKKyAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKHBhdGNoKToKKyAgICAgICAgICAgIHByaW50ICJDb3VsZG4ndCBmaW5kIHBhdGNoICglcyksIGV4aXRpbmciICUgcGF0Y2gKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShwYXRjaCkKKyAgICAgICAgZmlsZXNkaXJfcGF0Y2ggPSBvcy5wYXRoLmpvaW4oZmlsZXNkaXIsIGJhc2VuYW1lKQorICAgICAgICBzaHV0aWwuY29weWZpbGUocGF0Y2gsIGZpbGVzZGlyX3BhdGNoKQorICAgICAgICBuZXdfcGF0Y2hlcy5hcHBlbmQoYmFzZW5hbWUpCisKKyAgICBjdXJfaXRlbXMgPSByZWFkX3BhdGNoX2l0ZW1zKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKKyAgICBjdXJfaXRlbXMuZXh0ZW5kKG5ld19wYXRjaGVzKQorICAgIHdyaXRlX3BhdGNoX2l0ZW1zKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgY3VyX2l0ZW1zKQorCisgICAgcHJpbnQgIkFkZGVkIHBhdGNoZXM6IgorICAgIGZvciBuIGluIG5ld19wYXRjaGVzOgorICAgICAgICBwcmludCAiXHQlcyIgJSBuCisKKworZGVmIGluY19wcihsaW5lKToKKyAgICAiIiIKKyAgICBBZGQgMSB0byB0aGUgUFIgdmFsdWUgaW4gdGhlIGdpdmVuIGJiYXBwZW5kIFBSIGxpbmUuICBGb3IgdGhlIFBSCisgICAgbGluZXMgaW4ga2VybmVsIC5iYmFwcGVuZHMgYWZ0ZXIgbW9kaWZpY2F0aW9ucy4gIEhhbmRsZXMgUFJzIG9mCisgICAgdGhlIGZvcm0gUFIgOj0gIiR7UFJ9LjEiIGFzIHdlbGwgYXMgUFIgPSAicjAiLgorICAgICIiIgorICAgIGlkeCA9IGxpbmUuZmluZCgiXCIiKQorCisgICAgcHJfc3RyID0gbGluZVtpZHg6XQorICAgIHByX3N0ciA9IHByX3N0ci5yZXBsYWNlKCdcIicsJycpCisgICAgZmllbGRzID0gcHJfc3RyLnNwbGl0KCcuJykKKyAgICBpZiBsZW4oZmllbGRzKSA+IDE6CisgICAgICAgIGZpZWxkc1sxXSA9IHN0cihpbnQoZmllbGRzWzFdKSArIDEpCisgICAgICAgIHByX3N0ciA9ICJcIiIgKyAnLicuam9pbihmaWVsZHMpICsgIlwiXG4iCisgICAgZWxzZToKKyAgICAgICAgcHJfdmFsID0gcHJfc3RyWzE6XQorICAgICAgICBwcl9zdHIgPSAiXCIiICsgInIiICsgc3RyKGludChwcl92YWwpICsgMSkgKyAiXCJcbiIKKyAgICBpZHgyID0gbGluZS5maW5kKCJcIiIsIGlkeCArIDEpCisgICAgbGluZSA9IGxpbmVbOmlkeF0gKyBwcl9zdHIKKyAgICAKKyAgICByZXR1cm4gbGluZQorCisKK2RlZiBrZXJuZWxfY29udGVudHNfY2hhbmdlZChzY3JpcHRzX3BhdGgsIG1hY2hpbmUpOgorICAgICIiIgorICAgIERvIHdoYXQgd2UgbmVlZCB0byBkbyB0byBub3RpZnkgdGhlIHN5c3RlbSB0aGF0IHRoZSBrZXJuZWwKKyAgICByZWNpcGUncyBjb250ZW50cyBoYXZlIGNoYW5nZWQuCisgICAgIiIiCisgICAgbGF5ZXIgPSBmaW5kX2JzcF9sYXllcihtYWNoaW5lKQorCisgICAga2VybmVsID0gZmluZF9jdXJyZW50X2tlcm5lbChsYXllciwgbWFjaGluZSkKKyAgICBpZiBub3Qga2VybmVsOgorICAgICAgICBwcmludCAiQ291bGRuJ3QgZGV0ZXJtaW5lIHRoZSBrZXJuZWwgZm9yIHRoaXMgQlNQLCBleGl0aW5nLiIKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGtlcm5lbF9iYmZpbGUgPSBvcy5wYXRoLmpvaW4obGF5ZXIsICJyZWNpcGVzLWtlcm5lbC9saW51eC8iICsga2VybmVsICsgIi5iYmFwcGVuZCIpCisgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGtlcm5lbF9iYmZpbGUpOgorICAgICAgICBrZXJuZWxfYmJmaWxlID0gb3MucGF0aC5qb2luKGxheWVyLCAicmVjaXBlcy1rZXJuZWwvbGludXgvIiArIGtlcm5lbCArICIuYmIiKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoa2VybmVsX2JiZmlsZSk6CisgICAgICAgICAgICByZXR1cm4KKyAgICBrZXJuZWxfYmJmaWxlX3ByZXYgPSBrZXJuZWxfYmJmaWxlICsgIi5wcmV2IgorICAgIHNodXRpbC5jb3B5ZmlsZShrZXJuZWxfYmJmaWxlLCBrZXJuZWxfYmJmaWxlX3ByZXYpCisKKyAgICBpZmlsZSA9IG9wZW4oa2VybmVsX2JiZmlsZV9wcmV2LCAiciIpCisgICAgb2ZpbGUgPSBvcGVuKGtlcm5lbF9iYmZpbGUsICJ3IikKKyAgICBpZmlsZV9saW5lcyA9IGlmaWxlLnJlYWRsaW5lcygpCisgICAgZm9yIGlmaWxlX2xpbmUgaW4gaWZpbGVfbGluZXM6CisgICAgICAgIGlmIGlmaWxlX2xpbmUuc3RyaXAoKS5zdGFydHN3aXRoKCJQUiIpOgorICAgICAgICAgICAgaWZpbGVfbGluZSA9IGluY19wcihpZmlsZV9saW5lKQorICAgICAgICBvZmlsZS53cml0ZShpZmlsZV9saW5lKQorICAgIG9maWxlLmNsb3NlKCkKKyAgICBpZmlsZS5jbG9zZSgpCisKKworZGVmIGtlcm5lbHMoY29udGV4dCk6CisgICAgIiIiCisgICAgUmV0dXJuIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBrZXJuZWxzIGluIHRoZSBCU1AgaS5lLiBjb3JyZXNwb25kaW5nCisgICAgdG8gdGhlIGtlcm5lbCAuYmJhcHBlbmRzIGZvdW5kIGluIHRoZSBsYXllci4KKyAgICAiIiIKKyAgICBhcmNoZGlyID0gb3MucGF0aC5qb2luKGNvbnRleHRbInNjcmlwdHNfcGF0aCJdLCAibGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvIiArIGNvbnRleHRbImFyY2giXSkKKyAgICBrZXJuZGlyID0gb3MucGF0aC5qb2luKGFyY2hkaXIsICJyZWNpcGVzLWtlcm5lbC9saW51eCIpCisgICAgYmJnbG9iID0gb3MucGF0aC5qb2luKGtlcm5kaXIsICIqLmJiYXBwZW5kIikKKworICAgIGJiYXBwZW5kcyA9IGdsb2IuZ2xvYihiYmdsb2IpCisKKyAgICBrZXJuZWxzID0gW10KKworICAgIGZvciBrZXJuZWwgaW4gYmJhcHBlbmRzOgorICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShrZXJuZWwpKVswXQorICAgICAgICBpZHggPSBmaWxlbmFtZS5maW5kKENMT1NFX1RBRykKKyAgICAgICAgaWYgaWR4ICE9IC0xOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZVtpZHggKyBsZW4oQ0xPU0VfVEFHKTpdLnN0cmlwKCkKKyAgICAgICAga2VybmVscy5hcHBlbmQoZmlsZW5hbWUpCisKKyAgICBrZXJuZWxzLmFwcGVuZCgiY3VzdG9tIikKKworICAgIHJldHVybiBrZXJuZWxzCisKKworZGVmIGV4dHJhY3RfZ2l0dXJsKGZpbGUpOgorICAgICIiIgorICAgIEV4dHJhY3QgdGhlIGdpdCB1cmwgb2YgdGhlIGtlcm5lbCByZXBvIGZyb20gdGhlIGtlcm5lbCByZWNpcGUncworICAgIFNSQ19VUkkuCisgICAgIiIiCisgICAgdXJsID0gTm9uZQorICAgIGYgPSBvcGVuKGZpbGUsICJyIikKKyAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlNSQ19VUkkiKToKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lW2xlbigiU1JDX1VSSSIpOl0uc3RyaXAoKQorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCI9Iik6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbMTpdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlwiIik6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzE6XS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIHByb3QgPSAiZ2l0IgorICAgICAgICAgICAgICAgICAgICBmb3IgcyBpbiBsaW5lLnNwbGl0KCI7Iik6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzLnN0YXJ0c3dpdGgoImdpdDovLyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHMuc3RhcnRzd2l0aCgicHJvdG9jb2w9Iik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdCA9IHMuc3BsaXQoIj0iKVsxXQorICAgICAgICAgICAgICAgICAgICBpZiB1cmw6CisgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBwcm90ICsgdXJsWzM6XQorICAgIHJldHVybiB1cmwKKworCitkZWYgZmluZF9naXR1cmwoY29udGV4dCk6CisgICAgIiIiCisgICAgRmluZCB0aGUgZ2l0IHVybCBvZiB0aGUga2VybmVsIHJlcG8gZnJvbSB0aGUga2VybmVsIHJlY2lwZSdzCisgICAgU1JDX1VSSS4KKyAgICAiIiIKKyAgICBuYW1lID0gY29udGV4dFsibmFtZSJdCisgICAgZmlsZWJhc2UgPSBjb250ZXh0WyJmaWxlbmFtZSJdCisgICAgc2NyaXB0c19wYXRoID0gY29udGV4dFsic2NyaXB0c19wYXRoIl0KKworICAgIG1ldGFfbGF5ZXIgPSBmaW5kX21ldGFfbGF5ZXIoKQorCisgICAga2VybmRpciA9IG9zLnBhdGguam9pbihtZXRhX2xheWVyLCAicmVjaXBlcy1rZXJuZWwvbGludXgiKQorICAgIGJiZ2xvYiA9IG9zLnBhdGguam9pbihrZXJuZGlyLCAiKi5iYiIpCisgICAgYmJzID0gZ2xvYi5nbG9iKGJiZ2xvYikKKyAgICBmb3Iga2VybmVsIGluIGJiczoKKyAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoa2VybmVsKSlbMF0KKyAgICAgICAgaWYgZmlsZW5hbWUgaW4gZmlsZWJhc2U6CisgICAgICAgICAgICBnaXR1cmwgPSBleHRyYWN0X2dpdHVybChrZXJuZWwpCisgICAgICAgICAgICByZXR1cm4gZ2l0dXJsCisgICAgCisgICAgcmV0dXJuIE5vbmUKKworCitkZWYgcmVhZF9mZWF0dXJlcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUpOgorICAgICIiIgorICAgIEZpbmQgYW5kIHJldHVybiBhIGxpc3Qgb2YgZmVhdHVyZXMgaW4gYSBtYWNoaW5lJ3MgdXNlci1kZWZpbmVkCisgICAgZmVhdHVyZXMgZnJhZ21lbnQgWyR7bWFjaGluZX0tdXNlci1mZWF0dXJlcy5zY2NdLgorICAgICIiIgorICAgIGZlYXR1cmVzID0gW10KKworICAgIGYgPSBvcGVuX3VzZXJfZmlsZShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIG1hY2hpbmUrIi11c2VyLWZlYXR1cmVzLnNjYyIsICJyIikKKyAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgcyA9IGxpbmUuc3RyaXAoKQorICAgICAgICBpZiBzIGFuZCBub3Qgcy5zdGFydHN3aXRoKCIjIik6CisgICAgICAgICAgICBmZWF0dXJlX2luY2x1ZGUgPSBzLnNwbGl0KCkKKyAgICAgICAgICAgIGZlYXR1cmVzLmFwcGVuZChmZWF0dXJlX2luY2x1ZGVbMV0uc3RyaXAoKSkKKyAgICBmLmNsb3NlKCkKKworICAgIHJldHVybiBmZWF0dXJlcworCisKK2RlZiB3cml0ZV9mZWF0dXJlcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGZlYXR1cmVzKToKKyAgICAiIiIKKyAgICBXcml0ZSAocmVwbGFjZSkgdGhlIGxpc3Qgb2YgZmVhdHVyZSBpdGVtcyBpbiBhCisgICAgbWFjaGluZSdzIHVzZXItZGVmaW5lZCBmZWF0dXJlcyBmcmFnbWVudCBbJHttYWNoaW5lfT11c2VyLWZlYXR1cmVzLmNmZ10uCisgICAgIiIiCisgICAgZiA9IG9wZW5fdXNlcl9maWxlKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgbWFjaGluZSsiLXVzZXItZmVhdHVyZXMuc2NjIiwgInciKQorICAgIGZvciBpdGVtIGluIGZlYXR1cmVzOgorICAgICAgICBmLndyaXRlKCJpbmNsdWRlICIgKyBpdGVtICsgIlxuIikKKyAgICBmLmNsb3NlKCkKKworICAgIGtlcm5lbF9jb250ZW50c19jaGFuZ2VkKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKKworCitkZWYgeW9jdG9fa2VybmVsX2ZlYXR1cmVfbGlzdChzY3JpcHRzX3BhdGgsIG1hY2hpbmUpOgorICAgICIiIgorICAgIERpc3BsYXkgdGhlIGxpc3Qgb2YgZmVhdHVyZXMgdXNlZCBpbiBhIG1hY2hpbmUncyB1c2VyLWRlZmluZWQKKyAgICBmZWF0dXJlcyBmcmFnbWVudCBbJHttYWNoaW5lfS11c2VyLWZlYXR1cmVzLnNjY10uCisgICAgIiIiCisgICAgZmVhdHVyZXMgPSByZWFkX2ZlYXR1cmVzKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKKworICAgIHByaW50ICJUaGUgY3VycmVudCBzZXQgb2YgbWFjaGluZS1zcGVjaWZpYyBmZWF0dXJlcyBmb3IgJXMgaXM6IiAlIG1hY2hpbmUKKyAgICBwcmludCBnZW5fY2hvaWNlc19zdHIoZmVhdHVyZXMpCisKKworZGVmIHlvY3RvX2tlcm5lbF9mZWF0dXJlX3JtKHNjcmlwdHNfcGF0aCwgbWFjaGluZSk6CisgICAgIiIiCisgICAgRGlzcGxheSB0aGUgbGlzdCBvZiBmZWF0dXJlcyB1c2VkIGluIGEgbWFjaGluZSdzIHVzZXItZGVmaW5lZAorICAgIGZlYXR1cmVzIGZyYWdtZW50IFske21hY2hpbmV9LXVzZXItZmVhdHVyZXMuc2NjXSwgcHJvbXB0IHRoZSB1c2VyCisgICAgZm9yIG9uZSBvciBtb3JlIHRvIHJlbW92ZSwgYW5kIHJlbW92ZSB0aGVtLgorICAgICIiIgorICAgIGZlYXR1cmVzID0gcmVhZF9mZWF0dXJlcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCisKKyAgICBwcmludCAiU3BlY2lmeSB0aGUgZmVhdHVyZXMgdG8gcmVtb3ZlOiIKKyAgICBpbnB1dCA9IHJhd19pbnB1dChnZW5fY2hvaWNlc19zdHIoZmVhdHVyZXMpKQorICAgIHJtX2Nob2ljZXMgPSBpbnB1dC5zcGxpdCgpCisgICAgcm1fY2hvaWNlcy5zb3J0KCkKKworICAgIHJlbW92ZWQgPSBbXQorCisgICAgZm9yIGNob2ljZSBpbiByZXZlcnNlZChybV9jaG9pY2VzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWR4ID0gaW50KGNob2ljZSkgLSAxCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcHJpbnQgIkludmFsaWQgY2hvaWNlICglcyksIGV4aXRpbmciICUgY2hvaWNlCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBpZiBpZHggPCAwIG9yIGlkeCA+PSBsZW4oZmVhdHVyZXMpOgorICAgICAgICAgICAgcHJpbnQgIkludmFsaWQgY2hvaWNlICglZCksIGV4aXRpbmciICUgKGlkeCArIDEpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICByZW1vdmVkLmFwcGVuZChmZWF0dXJlcy5wb3AoaWR4KSkKKworICAgIHdyaXRlX2ZlYXR1cmVzKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgZmVhdHVyZXMpCisKKyAgICBwcmludCAiUmVtb3ZlZCBmZWF0dXJlczoiCisgICAgZm9yIHIgaW4gcmVtb3ZlZDoKKyAgICAgICAgcHJpbnQgIlx0JXMiICUgcgorCisKK2RlZiB5b2N0b19rZXJuZWxfZmVhdHVyZV9hZGQoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBmZWF0dXJlcyk6CisgICAgIiIiCisgICAgQWRkIG9uZSBvciBtb3JlIGZlYXR1cmVzIGEgbWFjaGluZSdzIHVzZXItZGVmaW5lZCBmZWF0dXJlcworICAgIGZyYWdtZW50IFske21hY2hpbmV9LXVzZXItZmVhdHVyZXMuc2NjXS4KKyAgICAiIiIKKyAgICBuZXdfaXRlbXMgPSBbXQorCisgICAgZm9yIGl0ZW0gaW4gZmVhdHVyZXM6CisgICAgICAgIGlmIG5vdCBpdGVtLmVuZHN3aXRoKCIuc2NjIik6CisgICAgICAgICAgICBwcmludCAiSW52YWxpZCBmZWF0dXJlICglcyksIGV4aXRpbmciICUgaXRlbQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgbmV3X2l0ZW1zLmFwcGVuZChpdGVtKQorCisgICAgY3VyX2l0ZW1zID0gcmVhZF9mZWF0dXJlcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCisgICAgY3VyX2l0ZW1zLmV4dGVuZChuZXdfaXRlbXMpCisKKyAgICB3cml0ZV9mZWF0dXJlcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGN1cl9pdGVtcykKKworICAgIHByaW50ICJBZGRlZCBmZWF0dXJlczoiCisgICAgZm9yIG4gaW4gbmV3X2l0ZW1zOgorICAgICAgICBwcmludCAiXHQlcyIgJSBuCisKKworZGVmIGZpbmRfZmVhdHVyZV91cmwoZ2l0X3VybCk6CisgICAgIiIiCisgICAgRmluZCB0aGUgdXJsIG9mIHRoZSBrZXJuLWZlYXR1cmVzLnJjIGtlcm5lbCBmb3IgdGhlIGtlcm5lbCByZXBvCisgICAgc3BlY2lmaWVkIGZyb20gdGhlIEJTUCdzIGtlcm5lbCByZWNpcGUgU1JDX1VSSS4KKyAgICAiIiIKKyAgICBmZWF0dXJlX3VybCA9ICIiCisgICAgaWYgZ2l0X3VybC5zdGFydHN3aXRoKCJnaXQ6Ly8iKToKKyAgICAgICAgZ2l0X3VybCA9IGdpdF91cmxbbGVuKCJnaXQ6Ly8iKTpdLnN0cmlwKCkKKyAgICAgICAgcyA9IGdpdF91cmwuc3BsaXQoIi8iKQorICAgICAgICBpZiBzWzFdLmVuZHN3aXRoKCIuZ2l0Iik6CisgICAgICAgICAgICBzWzFdID0gc1sxXVs6bGVuKHNbMV0pIC0gbGVuKCIuZ2l0IildCisgICAgICAgIGZlYXR1cmVfdXJsID0gImh0dHA6Ly8iICsgc1swXSArICIvY2dpdC9jZ2l0LmNnaS8iICsgc1sxXSArIFwKKyAgICAgICAgICAgICIvcGxhaW4vbWV0YS9jZmcva2Vybi1mZWF0dXJlcy5yYz9oPW1ldGEiCisKKyAgICByZXR1cm4gZmVhdHVyZV91cmwKKworCitkZWYgZmluZF9mZWF0dXJlX2Rlc2MobGluZXMpOgorICAgICIiIgorICAgIEZpbmQgdGhlIGZlYXR1cmUgZGVzY3JpcHRpb24gYW5kIGNvbXBhdGliaWxpdHkgaW4gdGhlIHBhc3NlZC1pbgorICAgIHNldCBvZiBsaW5lcy4gIFJldHVybnMgYSBzdHJpbmcgc3RyaW5nIG9mIHRoZSBmb3JtICdkZXNjCisgICAgW2NvbXBhdF0nLgorICAgICIiIgorICAgIGRlc2MgPSAibm8gZGVzY3JpcHRpb24gYXZhaWxhYmxlIgorICAgIGNvbXBhdCA9ICJ1bmtub3duIgorCisgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgIGlkeCA9IGxpbmUuZmluZCgiS0ZFQVRVUkVfREVTQ1JJUFRJT04iKQorICAgICAgICBpZiBpZHggIT0gLTE6CisgICAgICAgICAgICBkZXNjID0gbGluZVtpZHggKyBsZW4oIktGRUFUVVJFX0RFU0NSSVBUSU9OIik6XS5zdHJpcCgpCisgICAgICAgICAgICBpZiBkZXNjLnN0YXJ0c3dpdGgoIlwiIik6CisgICAgICAgICAgICAgICAgZGVzYyA9IGRlc2NbMTpdCisgICAgICAgICAgICAgICAgaWYgZGVzYy5lbmRzd2l0aCgiXCIiKToKKyAgICAgICAgICAgICAgICAgICAgZGVzYyA9IGRlc2NbOi0xXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWR4ID0gbGluZS5maW5kKCJLRkVBVFVSRV9DT01QQVRJQklMSVRZIikKKyAgICAgICAgICAgIGlmIGlkeCAhPSAtMToKKyAgICAgICAgICAgICAgICBjb21wYXQgPSBsaW5lW2lkeCArIGxlbigiS0ZFQVRVUkVfQ09NUEFUSUJJTElUWSIpOl0uc3RyaXAoKQorCisgICAgcmV0dXJuIGRlc2MgKyAiIFsiICsgY29tcGF0ICsgIl0iCisKKworZGVmIHByaW50X2ZlYXR1cmVfZGVzY3MobGF5ZXIsIGZlYXR1cmVfZGlyKToKKyAgICAiIiIKKyAgICBQcmludCB0aGUgZmVhdHVyZSBkZXNjcmlwdGlvbnMgZm9yIHRoZSBmZWF0dXJlcyBpbiBmZWF0dXJlX2Rpci4KKyAgICAiIiIKKyAgICBrZXJuZWxfZmlsZXNfZmVhdHVyZXMgPSBvcy5wYXRoLmpvaW4obGF5ZXIsICJyZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy8iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZV9kaXIpCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoa2VybmVsX2ZpbGVzX2ZlYXR1cmVzKToKKyAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICBpZiBmaWxlLmVuZHN3aXRoKCJ+Iikgb3IgZmlsZS5lbmRzd2l0aCgiIyIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBmaWxlLmVuZHN3aXRoKCIuc2NjIik6CisgICAgICAgICAgICAgICAgZnVsbHBhdGggPSBvcy5wYXRoLmpvaW4obGF5ZXIsICJyZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy8iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlX2RpciArICIvIiArIGZpbGUpCisgICAgICAgICAgICAgICAgZiA9IG9wZW4oZnVsbHBhdGgpCisgICAgICAgICAgICAgICAgZmVhdHVyZV9kZXNjID0gZmluZF9mZWF0dXJlX2Rlc2MoZi5yZWFkbGluZXMoKSkKKyAgICAgICAgICAgICAgICBwcmludCBmZWF0dXJlX2RpciArICIvIiArIGZpbGUgKyAiOiAiICsgZmVhdHVyZV9kZXNjCisKKworZGVmIHlvY3RvX2tlcm5lbF9hdmFpbGFibGVfZmVhdHVyZXNfbGlzdChzY3JpcHRzX3BhdGgsIG1hY2hpbmUpOgorICAgICIiIgorICAgIERpc3BsYXkgdGhlIGxpc3Qgb2YgYWxsIHRoZSBrZXJuZWwgZmVhdHVyZXMgYXZhaWxhYmxlIGZvciB1c2UgaW4KKyAgICBCU1BzLCBhcyBnYXRoZXJlZCBmcm9tIHRoZSBzZXQgb2YgZmVhdHVyZSBzb3VyY2VzLgorICAgICIiIgorICAgIGxheWVyID0gZmluZF9ic3BfbGF5ZXIobWFjaGluZSkKKyAgICBrZXJuZWwgPSBmaW5kX2N1cnJlbnRfa2VybmVsKGxheWVyLCBtYWNoaW5lKQorICAgIGlmIG5vdCBrZXJuZWw6CisgICAgICAgIHByaW50ICJDb3VsZG4ndCBkZXRlcm1pbmUgdGhlIGtlcm5lbCBmb3IgdGhpcyBCU1AsIGV4aXRpbmcuIgorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgY29udGV4dCA9IGNyZWF0ZV9jb250ZXh0KG1hY2hpbmUsICJhcmNoIiwgc2NyaXB0c19wYXRoKQorICAgIGNvbnRleHRbIm5hbWUiXSA9ICJuYW1lIgorICAgIGNvbnRleHRbImZpbGVuYW1lIl0gPSBrZXJuZWwKKyAgICBnaXR1cmwgPSBmaW5kX2dpdHVybChjb250ZXh0KQorICAgIGZlYXR1cmVfdXJsID0gZmluZF9mZWF0dXJlX3VybChnaXR1cmwpCisKKyAgICBmZWF0dXJlX2NtZCA9ICJ3Z2V0IC1xIC1PIC0gIiArIGZlYXR1cmVfdXJsCisgICAgdG1wID0gc3VicHJvY2Vzcy5Qb3BlbihmZWF0dXJlX2NtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKQorCisgICAgcHJpbnQgIlRoZSBjdXJyZW50IHNldCBvZiBrZXJuZWwgZmVhdHVyZXMgYXZhaWxhYmxlIHRvICVzIGlzOlxuIiAlIG1hY2hpbmUKKworICAgIGlmIHRtcDoKKyAgICAgICAgdG1wbGluZSA9IHRtcC5zcGxpdCgiXG4iKQorICAgICAgICBpbl9rZXJuZWxfb3B0aW9ucyA9IEZhbHNlCisgICAgICAgIGZvciBsaW5lIGluIHRtcGxpbmU6CisgICAgICAgICAgICBpZiBub3QgIj0iIGluIGxpbmU6CisgICAgICAgICAgICAgICAgaWYgaW5fa2VybmVsX29wdGlvbnM6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgImtlcm5lbC1vcHRpb25zIiBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICBpbl9rZXJuZWxfb3B0aW9ucyA9IFRydWUKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaW5fa2VybmVsX29wdGlvbnM6CisgICAgICAgICAgICAgICAgZmVhdHVyZV9kZWYgPSBsaW5lLnNwbGl0KCI9IikKKyAgICAgICAgICAgICAgICBmZWF0dXJlX3R5cGUgPSBmZWF0dXJlX2RlZlswXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgZmVhdHVyZSA9IGZlYXR1cmVfZGVmWzFdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBkZXNjID0gZ2V0X2ZlYXR1cmVfZGVzYyhnaXR1cmwsIGZlYXR1cmUpCisgICAgICAgICAgICAgICAgcHJpbnQgIiVzOiAlcyIgJSAoZmVhdHVyZSwgZGVzYykKKworICAgIHByaW50ICJbbG9jYWxdIgorCisgICAgcHJpbnRfZmVhdHVyZV9kZXNjcyhsYXllciwgImNmZyIpCisgICAgcHJpbnRfZmVhdHVyZV9kZXNjcyhsYXllciwgImZlYXR1cmVzIikKKworCitkZWYgZmluZF9mZWF0dXJlX2Rlc2NfdXJsKGdpdF91cmwsIGZlYXR1cmUpOgorICAgICIiIgorICAgIEZpbmQgdGhlIHVybCBvZiB0aGUga2VybmVsIGZlYXR1cmUgaW4gdGhlIGtlcm5lbCByZXBvIHNwZWNpZmllZAorICAgIGZyb20gdGhlIEJTUCdzIGtlcm5lbCByZWNpcGUgU1JDX1VSSS4KKyAgICAiIiIKKyAgICBmZWF0dXJlX2Rlc2NfdXJsID0gIiIKKyAgICBpZiBnaXRfdXJsLnN0YXJ0c3dpdGgoImdpdDovLyIpOgorICAgICAgICBnaXRfdXJsID0gZ2l0X3VybFtsZW4oImdpdDovLyIpOl0uc3RyaXAoKQorICAgICAgICBzID0gZ2l0X3VybC5zcGxpdCgiLyIpCisgICAgICAgIGlmIHNbMV0uZW5kc3dpdGgoIi5naXQiKToKKyAgICAgICAgICAgIHNbMV0gPSBzWzFdWzpsZW4oc1sxXSkgLSBsZW4oIi5naXQiKV0KKyAgICAgICAgZmVhdHVyZV9kZXNjX3VybCA9ICJodHRwOi8vIiArIHNbMF0gKyAiL2NnaXQvY2dpdC5jZ2kvIiArIHNbMV0gKyBcCisgICAgICAgICAgICAiL3BsYWluL21ldGEvY2ZnL2tlcm5lbC1jYWNoZS8iICsgZmVhdHVyZSArICI/aD1tZXRhIgorCisgICAgcmV0dXJuIGZlYXR1cmVfZGVzY191cmwKKworCitkZWYgZ2V0X2ZlYXR1cmVfZGVzYyhnaXRfdXJsLCBmZWF0dXJlKToKKyAgICAiIiIKKyAgICBSZXR1cm4gYSBmZWF0dXJlIGRlc2NyaXB0aW9uIG9mIHRoZSBmb3JtICdkZXNjcmlwdGlvbiBbY29tcGF0aWJpbGl0eV0KKyAgICBCU1BzLCBhcyBnYXRoZXJlZCBmcm9tIHRoZSBzZXQgb2YgZmVhdHVyZSBzb3VyY2VzLgorICAgICIiIgorICAgIGZlYXR1cmVfZGVzY191cmwgPSBmaW5kX2ZlYXR1cmVfZGVzY191cmwoZ2l0X3VybCwgZmVhdHVyZSkKKyAgICBmZWF0dXJlX2Rlc2NfY21kID0gIndnZXQgLXEgLU8gLSAiICsgZmVhdHVyZV9kZXNjX3VybAorICAgIHRtcCA9IHN1YnByb2Nlc3MuUG9wZW4oZmVhdHVyZV9kZXNjX2NtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKQorCisgICAgcmV0dXJuIGZpbmRfZmVhdHVyZV9kZXNjKHRtcC5zcGxpdCgiXG4iKSkKKworCitkZWYgeW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzY3JpYmUoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBmZWF0dXJlKToKKyAgICAiIiIKKyAgICBEaXNwbGF5IHRoZSBkZXNjcmlwdGlvbiBvZiBhIHNwZWNpZmljIGtlcm5lbCBmZWF0dXJlIGF2YWlsYWJsZSBmb3IKKyAgICB1c2UgaW4gYSBCU1AuCisgICAgIiIiCisgICAgbGF5ZXIgPSBmaW5kX2JzcF9sYXllcihtYWNoaW5lKQorCisgICAga2VybmVsID0gZmluZF9jdXJyZW50X2tlcm5lbChsYXllciwgbWFjaGluZSkKKyAgICBpZiBub3Qga2VybmVsOgorICAgICAgICBwcmludCAiQ291bGRuJ3QgZGV0ZXJtaW5lIHRoZSBrZXJuZWwgZm9yIHRoaXMgQlNQLCBleGl0aW5nLiIKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGNvbnRleHQgPSBjcmVhdGVfY29udGV4dChtYWNoaW5lLCAiYXJjaCIsIHNjcmlwdHNfcGF0aCkKKyAgICBjb250ZXh0WyJuYW1lIl0gPSAibmFtZSIKKyAgICBjb250ZXh0WyJmaWxlbmFtZSJdID0ga2VybmVsCisgICAgZ2l0dXJsID0gZmluZF9naXR1cmwoY29udGV4dCkKKworICAgIGRlc2MgPSBnZXRfZmVhdHVyZV9kZXNjKGdpdHVybCwgZmVhdHVyZSkKKworICAgIHByaW50IGRlc2MKKworCitkZWYgY2hlY2tfZmVhdHVyZV9uYW1lKGZlYXR1cmVfbmFtZSk6CisgICAgIiIiCisgICAgU2FuaXR5LWNoZWNrIHRoZSBmZWF0dXJlIG5hbWUgZm9yIGNyZWF0ZS9kZXN0cm95LiAgUmV0dXJuIEZhbHNlIGlmIG5vdCBPSy4KKyAgICAiIiIKKyAgICBpZiBub3QgZmVhdHVyZV9uYW1lLmVuZHN3aXRoKCIuc2NjIik6CisgICAgICAgIHByaW50ICJJbnZhbGlkIGZlYXR1cmUgbmFtZSAobXVzdCBlbmQgd2l0aCAuc2NjKSBbJXNdLCBleGl0aW5nIiAlIGZlYXR1cmVfbmFtZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmICIvIiBpbiBmZWF0dXJlX25hbWU6CisgICAgICAgIHByaW50ICJJbnZhbGlkIGZlYXR1cmUgbmFtZSAoZG9uJ3Qgc3BlY2lmeSBkaXJlY3RvcnkpIFslc10sIGV4aXRpbmciICUgZmVhdHVyZV9uYW1lCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgcmV0dXJuIFRydWUKKworCitkZWYgY2hlY2tfY3JlYXRlX2lucHV0KGZlYXR1cmVfaXRlbXMpOgorICAgICIiIgorICAgIFNhbml0eS1jaGVjayB0aGUgY3JlYXRlIGlucHV0LiAgUmV0dXJuIEZhbHNlIGlmIG5vdCBPSy4KKyAgICAiIiIKKyAgICBpZiBub3QgY2hlY2tfZmVhdHVyZV9uYW1lKGZlYXR1cmVfaXRlbXNbMF0pOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmIGZlYXR1cmVfaXRlbXNbMV0uZW5kc3dpdGgoIi5wYXRjaCIpIG9yIGZlYXR1cmVfaXRlbXNbMV0uc3RhcnRzd2l0aCgiQ09ORklHXyIpOgorICAgICAgICBwcmludCAiTWlzc2luZyBkZXNjcmlwdGlvbiBhbmQvb3IgY29tcGF0aWJpbHR5IFslc10sIGV4aXRpbmciICUgZmVhdHVyZV9pdGVtc1sxXQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmIGZlYXR1cmVfaXRlbXNbMl0uZW5kc3dpdGgoIi5wYXRjaCIpIG9yIGZlYXR1cmVfaXRlbXNbMl0uc3RhcnRzd2l0aCgiQ09ORklHXyIpOgorICAgICAgICBwcmludCAiTWlzc2luZyBkZXNjcmlwdGlvbiBhbmQvb3IgY29tcGF0aWJpbGl0eSBbJXNdLCBleGl0aW5nIiAlIGZlYXR1cmVfaXRlbXNbMV0KKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICByZXR1cm4gVHJ1ZQorCisKK2RlZiB5b2N0b19rZXJuZWxfZmVhdHVyZV9jcmVhdGUoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBmZWF0dXJlX2l0ZW1zKToKKyAgICAiIiIKKyAgICBDcmVhdGUgYSByZWNpcGUtc3BhY2Uga2VybmVsIGZlYXR1cmUgaW4gYSBCU1AuCisgICAgIiIiCisgICAgaWYgbm90IGNoZWNrX2NyZWF0ZV9pbnB1dChmZWF0dXJlX2l0ZW1zKToKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGZlYXR1cmUgPSBmZWF0dXJlX2l0ZW1zWzBdCisgICAgZmVhdHVyZV9iYXNlbmFtZSA9IGZlYXR1cmUuc3BsaXQoIi4iKVswXQorICAgIGZlYXR1cmVfZGVzY3JpcHRpb24gPSBmZWF0dXJlX2l0ZW1zWzFdCisgICAgZmVhdHVyZV9jb21wYXQgPSBmZWF0dXJlX2l0ZW1zWzJdCisKKyAgICBwYXRjaGVzID0gW10KKyAgICBjZmdfaXRlbXMgPSBbXQorCisgICAgZm9yIGl0ZW0gaW4gZmVhdHVyZV9pdGVtc1szOl06CisgICAgICAgIGlmIGl0ZW0uZW5kc3dpdGgoIi5wYXRjaCIpOgorICAgICAgICAgICAgcGF0Y2hlcy5hcHBlbmQoaXRlbSkKKyAgICAgICAgZWxpZiBpdGVtLnN0YXJ0c3dpdGgoIkNPTkZJRyIpOgorICAgICAgICAgICAgaWYgKCI9eSIgaW4gaXRlbSBvciAiPW0iIGluIGl0ZW0pOgorICAgICAgICAgICAgICAgIGNmZ19pdGVtcy5hcHBlbmQoaXRlbSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICJJbnZhbGlkIGZlYXR1cmUgaXRlbSAobXVzdCBiZSAucGF0Y2ggb3IgQ09ORklHXyopIFslc10sIGV4aXRpbmciICUgaXRlbQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGZlYXR1cmVfZGlybmFtZSA9ICJjZmciCisgICAgaWYgcGF0Y2hlczoKKyAgICAgICAgZmVhdHVyZV9kaXJuYW1lID0gImZlYXR1cmVzIgorCisgICAgZmlsZXNkaXIgPSBmaW5kX2ZpbGVzZGlyKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKKyAgICBpZiBub3QgZmlsZXNkaXI6CisgICAgICAgIHByaW50ICJDb3VsZG4ndCBhZGQgZmVhdHVyZSAoJXMpLCBubyAnZmlsZXMnIGRpciBmb3VuZCIgJSBmZWF0dXJlCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBmZWF0ZGlyID0gb3MucGF0aC5qb2luKGZpbGVzZGlyLCBmZWF0dXJlX2Rpcm5hbWUpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZlYXRkaXIpOgorICAgICAgICBvcy5ta2RpcihmZWF0ZGlyKQorCisgICAgZm9yIHBhdGNoIGluIHBhdGNoZXM6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShwYXRjaCk6CisgICAgICAgICAgICBwcmludCAiQ291bGRuJ3QgZmluZCBwYXRjaCAoJXMpLCBleGl0aW5nIiAlIHBhdGNoCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBiYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUocGF0Y2gpCisgICAgICAgIGZlYXRkaXJfcGF0Y2ggPSBvcy5wYXRoLmpvaW4oZmVhdGRpciwgYmFzZW5hbWUpCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShwYXRjaCwgZmVhdGRpcl9wYXRjaCkKKworICAgIG5ld19jZmdfZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oZmVhdGRpciwgZmVhdHVyZV9iYXNlbmFtZSArICIuY2ZnIikKKyAgICBuZXdfY2ZnX2ZpbGUgPSBvcGVuKG5ld19jZmdfZmlsZW5hbWUsICJ3IikKKyAgICBmb3IgY2ZnX2l0ZW0gaW4gY2ZnX2l0ZW1zOgorICAgICAgICBuZXdfY2ZnX2ZpbGUud3JpdGUoY2ZnX2l0ZW0gKyAiXG4iKQorICAgIG5ld19jZmdfZmlsZS5jbG9zZSgpCisKKyAgICBuZXdfZmVhdHVyZV9maWxlbmFtZSA9IG9zLnBhdGguam9pbihmZWF0ZGlyLCBmZWF0dXJlX2Jhc2VuYW1lICsgIi5zY2MiKQorICAgIG5ld19mZWF0dXJlX2ZpbGUgPSBvcGVuKG5ld19mZWF0dXJlX2ZpbGVuYW1lLCAidyIpCisgICAgbmV3X2ZlYXR1cmVfZmlsZS53cml0ZSgiZGVmaW5lIEtGRUFUVVJFX0RFU0NSSVBUSU9OIFwiIiArIGZlYXR1cmVfZGVzY3JpcHRpb24gKyAiXCJcbiIpCisgICAgbmV3X2ZlYXR1cmVfZmlsZS53cml0ZSgiZGVmaW5lIEtGRUFUVVJFX0NPTVBBVElCSUxJVFkgIiArIGZlYXR1cmVfY29tcGF0ICsgIlxuXG4iKQorCisgICAgZm9yIHBhdGNoIGluIHBhdGNoZXM6CisgICAgICAgIHBhdGNoX2RpciwgcGF0Y2hfZmlsZSA9IG9zLnBhdGguc3BsaXQocGF0Y2gpCisgICAgICAgIG5ld19mZWF0dXJlX2ZpbGUud3JpdGUoInBhdGNoICIgKyBwYXRjaF9maWxlICsgIlxuIikKKworICAgIG5ld19mZWF0dXJlX2ZpbGUud3JpdGUoImtjb25mIG5vbi1oYXJkd2FyZSAiICsgZmVhdHVyZV9iYXNlbmFtZSArICIuY2ZnXG4iKQorICAgIG5ld19mZWF0dXJlX2ZpbGUuY2xvc2UoKQorCisgICAgcHJpbnQgIkFkZGVkIGZlYXR1cmU6IgorICAgIHByaW50ICJcdCVzIiAlIGZlYXR1cmVfZGlybmFtZSArICIvIiArIGZlYXR1cmUKKworCitkZWYgZmVhdHVyZV9pbl91c2Uoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBmZWF0dXJlKToKKyAgICAiIiIKKyAgICBEZXRlcm1pbmUgd2hldGhlciB0aGUgc3BlY2lmaWVkIGZlYXR1cmUgaXMgaW4gdXNlIGJ5IHRoZSBCU1AuCisgICAgUmV0dXJuIFRydWUgaWYgc28sIEZhbHNlIG90aGVyd2lzZS4KKyAgICAiIiIKKyAgICBmZWF0dXJlcyA9IHJlYWRfZmVhdHVyZXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorICAgIGZvciBmIGluIGZlYXR1cmVzOgorICAgICAgICBpZiBmID09IGZlYXR1cmU6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQorCisKK2RlZiBmZWF0dXJlX3JlbW92ZShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGZlYXR1cmUpOgorICAgICIiIgorICAgIFJlbW92ZSB0aGUgc3BlY2lmaWVkIGZlYXR1cmUgZnJvbSB0aGUgYXZhaWxhYmxlIHJlY2lwZS1zcGFjZQorICAgIGZlYXR1cmVzIGRlZmluZWQgZm9yIHRoZSBCU1AuCisgICAgIiIiCisgICAgZmVhdHVyZXMgPSByZWFkX2ZlYXR1cmVzKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKKyAgICBuZXdfZmVhdHVyZXMgPSBbXQorICAgIGZvciBmIGluIGZlYXR1cmVzOgorICAgICAgICBpZiBmID09IGZlYXR1cmU6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBuZXdfZmVhdHVyZXMuYXBwZW5kKGYpCisgICAgd3JpdGVfZmVhdHVyZXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBuZXdfZmVhdHVyZXMpCisKKworZGVmIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2Rlc3Ryb3koc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBmZWF0dXJlKToKKyAgICAiIiIKKyAgICBSZW1vdmUgYSByZWNpcGUtc3BhY2Uga2VybmVsIGZlYXR1cmUgZnJvbSBhIEJTUC4KKyAgICAiIiIKKyAgICBpZiBub3QgY2hlY2tfZmVhdHVyZV9uYW1lKGZlYXR1cmUpOgorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaWYgZmVhdHVyZV9pbl91c2Uoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCAiZmVhdHVyZXMvIiArIGZlYXR1cmUpIG9yIFwKKyAgICAgICAgICAgIGZlYXR1cmVfaW5fdXNlKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgImNmZy8iICsgZmVhdHVyZSk6CisgICAgICAgIHByaW50ICJGZWF0dXJlICVzIGlzIGluIHVzZSAodXNlICdmZWF0dXJlIHJtJyB0byB1bi11c2UgaXQgZmlyc3QpLCBleGl0aW5nIiAlIGZlYXR1cmUKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGZpbGVzZGlyID0gZmluZF9maWxlc2RpcihzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCisgICAgaWYgbm90IGZpbGVzZGlyOgorICAgICAgICBwcmludCAiQ291bGRuJ3QgZGVzdHJveSBmZWF0dXJlICglcyksIG5vICdmaWxlcycgZGlyIGZvdW5kIiAlIGZlYXR1cmUKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGZlYXR1cmVfZGlybmFtZSA9ICJmZWF0dXJlcyIKKyAgICBmZWF0ZGlyID0gb3MucGF0aC5qb2luKGZpbGVzZGlyLCBmZWF0dXJlX2Rpcm5hbWUpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZlYXRkaXIpOgorICAgICAgICBwcmludCAiQ291bGRuJ3QgZmluZCBmZWF0dXJlIGRpcmVjdG9yeSAoJXMpIiAlIGZlYXR1cmVfZGlybmFtZQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZmVhdHVyZV9mcW4gPSBvcy5wYXRoLmpvaW4oZmVhdGRpciwgZmVhdHVyZSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmVhdHVyZV9mcW4pOgorICAgICAgICBmZWF0dXJlX2Rpcm5hbWUgPSAiY2ZnIgorICAgICAgICBmZWF0ZGlyID0gb3MucGF0aC5qb2luKGZpbGVzZGlyLCBmZWF0dXJlX2Rpcm5hbWUpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmZWF0ZGlyKToKKyAgICAgICAgICAgIHByaW50ICJDb3VsZG4ndCBmaW5kIGZlYXR1cmUgZGlyZWN0b3J5ICglcykiICUgZmVhdHVyZV9kaXJuYW1lCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBmZWF0dXJlX2ZxbiA9IG9zLnBhdGguam9pbihmZWF0ZGlyLCBmZWF0dXJlX2ZpbGVuYW1lKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmVhdHVyZV9mcW4pOgorICAgICAgICAgICAgcHJpbnQgIkNvdWxkbid0IGZpbmQgZmVhdHVyZSAoJXMpIiAlIGZlYXR1cmUKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBmID0gb3BlbihmZWF0dXJlX2ZxbiwgInIiKQorICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICBzID0gbGluZS5zdHJpcCgpCisgICAgICAgIGlmIHMuc3RhcnRzd2l0aCgicGF0Y2ggIikgb3Igcy5zdGFydHN3aXRoKCJrY29uZiAiKToKKyAgICAgICAgICAgIHNwbGl0X2xpbmUgPSBzLnNwbGl0KCkKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKGZlYXRkaXIsIHNwbGl0X2xpbmVbLTFdKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZmlsZW5hbWUpOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmaWxlbmFtZSkKKyAgICBmLmNsb3NlKCkKKyAgICBvcy5yZW1vdmUoZmVhdHVyZV9mcW4pCisKKyAgICBmZWF0dXJlX3JlbW92ZShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGZlYXR1cmUpCisKKyAgICBwcmludCAiUmVtb3ZlZCBmZWF0dXJlOiIKKyAgICBwcmludCAiXHQlcyIgJSBmZWF0dXJlX2Rpcm5hbWUgKyAiLyIgKyBmZWF0dXJlCisKKworZGVmIGJhc2VfYnJhbmNoZXMoY29udGV4dCk6CisgICAgIiIiCisgICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgYmFzZSBicmFuY2hlcyBmb3VuZCBpbiB0aGUga2VybmVsIGdpdCByZXBvLgorICAgICIiIgorICAgIGdpdHVybCA9IGZpbmRfZ2l0dXJsKGNvbnRleHQpCisKKyAgICBwcmludCAiR2V0dGluZyBicmFuY2hlcyBmcm9tIHJlbW90ZSByZXBvICVzLi4uIiAlIGdpdHVybAorCisgICAgZ2l0Y21kID0gImdpdCBscy1yZW1vdGUgJXMgKmhlYWRzKiAyPiYxIiAlIChnaXR1cmwpCisgICAgdG1wID0gc3VicHJvY2Vzcy5Qb3BlbihnaXRjbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dC5yZWFkKCkKKworICAgIGJyYW5jaGVzID0gW10KKworICAgIGlmIHRtcDoKKyAgICAgICAgdG1wbGluZSA9IHRtcC5zcGxpdCgiXG4iKQorICAgICAgICBmb3IgbGluZSBpbiB0bXBsaW5lOgorICAgICAgICAgICAgaWYgbGVuKGxpbmUpPT0wOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgbm90IGxpbmUuZW5kc3dpdGgoImJhc2UiKToKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlkeCA9IGxpbmUuZmluZCgicmVmcy9oZWFkcy8iKQorICAgICAgICAgICAga2JyYW5jaCA9IGxpbmVbaWR4ICsgbGVuKCJyZWZzL2hlYWRzLyIpOl0KKyAgICAgICAgICAgIGlmIGticmFuY2guZmluZCgiLyIpID09IC0xIGFuZCBrYnJhbmNoLmZpbmQoImJhc2UiKSA9PSAtMToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWR4ID0ga2JyYW5jaC5maW5kKCJiYXNlIikKKyAgICAgICAgICAgIGJyYW5jaGVzLmFwcGVuZChrYnJhbmNoWzppZHggLSAxXSkKKworICAgIHJldHVybiBicmFuY2hlcworCisKK2RlZiBhbGxfYnJhbmNoZXMoY29udGV4dCk6CisgICAgIiIiCisgICAgUmV0dXJuIGEgbGlzdCBvZiBhbGwgdGhlIGJyYW5jaGVzIGZvdW5kIGluIHRoZSBrZXJuZWwgZ2l0IHJlcG8uCisgICAgIiIiCisgICAgZ2l0dXJsID0gZmluZF9naXR1cmwoY29udGV4dCkKKworICAgIHByaW50ICJHZXR0aW5nIGJyYW5jaGVzIGZyb20gcmVtb3RlIHJlcG8gJXMuLi4iICUgZ2l0dXJsCisKKyAgICBnaXRjbWQgPSAiZ2l0IGxzLXJlbW90ZSAlcyAqaGVhZHMqIDI+JjEiICUgKGdpdHVybCkKKyAgICB0bXAgPSBzdWJwcm9jZXNzLlBvcGVuKGdpdGNtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKQorCisgICAgYnJhbmNoZXMgPSBbXQorCisgICAgYmFzZV9wcmVmaXhlcyA9IE5vbmUKKworICAgIHRyeToKKyAgICAgICAgYnJhbmNoZXNfYmFzZSA9IGNvbnRleHRbImJyYW5jaGVzX2Jhc2UiXQorICAgICAgICBpZiBicmFuY2hlc19iYXNlOgorICAgICAgICAgICAgYmFzZV9wcmVmaXhlcyA9IGJyYW5jaGVzX2Jhc2Uuc3BsaXQoIjoiKQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcGFzcworCisgICAgYXJjaCA9IGNvbnRleHRbImFyY2giXQorCisgICAgaWYgdG1wOgorICAgICAgICB0bXBsaW5lID0gdG1wLnNwbGl0KCJcbiIpCisgICAgICAgIGZvciBsaW5lIGluIHRtcGxpbmU6CisgICAgICAgICAgICBpZiBsZW4obGluZSk9PTA6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZHggPSBsaW5lLmZpbmQoInJlZnMvaGVhZHMvIikKKyAgICAgICAgICAgIGticmFuY2ggPSBsaW5lW2lkeCArIGxlbigicmVmcy9oZWFkcy8iKTpdCisgICAgICAgICAgICBrYnJhbmNoX3ByZWZpeCA9IGticmFuY2gucnNwbGl0KCIvIiwgMSlbMF0KKworICAgICAgICAgICAgaWYgYmFzZV9wcmVmaXhlczoKKyAgICAgICAgICAgICAgICBmb3IgYmFzZV9wcmVmaXggaW4gYmFzZV9wcmVmaXhlczoKKyAgICAgICAgICAgICAgICAgICAgaWYga2JyYW5jaF9wcmVmaXggPT0gYmFzZV9wcmVmaXg6CisgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2hlcy5hcHBlbmQoa2JyYW5jaCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiAoa2JyYW5jaC5maW5kKCIvIikgIT0gLTEgYW5kCisgICAgICAgICAgICAgICAgKGticmFuY2guZmluZCgic3RhbmRhcmQiKSAhPSAtMSBvciBrYnJhbmNoLmZpbmQoImJhc2UiKSAhPSAtMSkgb3IKKyAgICAgICAgICAgICAgICBrYnJhbmNoID09ICJiYXNlIik6CisgICAgICAgICAgICAgICAgYnJhbmNoZXMuYXBwZW5kKGticmFuY2gpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgIHJldHVybiBicmFuY2hlcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS8uZ2l0aWdub3JlIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtLy5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZiBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODgzNjdhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mCkBAIC0wLDAgKzEsMTAyIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uY29uZgorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IHt7PW1hY2hpbmV9fQorCisjQERFU0NSSVBUSU9OOiBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZm9yIHt7PW1hY2hpbmV9fSBzeXN0ZW1zCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InhzZXJ2ZXIiIHByaW86IjUwIiBtc2c6IkRvIHlvdSBuZWVkIHN1cHBvcnQgZm9yIFg/ICh5L24pIiBkZWZhdWx0OiJ5IiB9fQore3sgaWYgeHNlcnZlciA9PSAieSI6IH19CitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID89ICJ4c2VydmVyLXhvcmciCitYU0VSVkVSID89ICJ4c2VydmVyLXhvcmcgXAorICAgICAgICAgICB4Zjg2LWlucHV0LWV2ZGV2IFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1tb3VzZSBcCisgICAgICAgICAgIHhmODYtdmlkZW8tZmJkZXYgXAorICAgICAgICAgICB4Zjg2LWlucHV0LWtleWJvYXJkIgorCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTID0gIiBrZXJuZWwtbW9kdWxlcyBrZXJuZWwtZGV2aWNldHJlZSIKKworRVhUUkFfSU1BR0VERVBFTkRTICs9ICJ1LWJvb3QiCisKK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6InR1bmVmaWxlIiBwcmlvOiI0MCIgbXNnOiJXaGljaCBtYWNoaW5lIHR1bmluZyB3b3VsZCB5b3UgbGlrZSB0byB1c2U/IiBkZWZhdWx0OiJ0dW5lX2NvcnRleGE4IiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfYXJtMTEzNmpmX3MiIG1zZzoiYXJtMTEzNmpmLXMgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9hcm05MjB0IiBtc2c6ImFybTkyMHQgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9hcm05MjZlanMiIG1zZzoiYXJtOTI2ZWpzIHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfYXJtOXRkbWkiIG1zZzoiYXJtOXRkbWkgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9jb3J0ZXhhNSIgbXNnOiJjb3J0ZXhhNSB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX2NvcnRleGE3IiBtc2c6ImNvcnRleGE3IHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfY29ydGV4YTgiIG1zZzoiY29ydGV4YTggdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9jb3J0ZXhhOSIgbXNnOiJjb3J0ZXhhOSB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX2NvcnRleGExNSIgbXNnOiJjb3J0ZXhhMTUgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9jb3J0ZXhtMSIgbXNnOiJjb3J0ZXhtMSB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX2NvcnRleG0zIiBtc2c6ImNvcnRleG0zIHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfY29ydGV4cjQiIG1zZzoiY29ydGV4cjQgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9lcDkzMTIiIG1zZzoiZXA5MzEyIHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfaXdtbXh0IiBtc2c6Iml3bW14dCB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX3N0cm9uZ2FybTExMDAiIG1zZzoic3Ryb25nYXJtMTEwMCB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX3hzY2FsZSIgbXNnOiJ4c2NhbGUgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9hcm0xMTM2amZfcyI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtMTEzNmpmLXMuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9hcm05MjB0IjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05MjB0LmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfYXJtOTI2ZWpzIjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05MjZlanMuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9hcm05dGRtaSI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtOXRkbWkuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9jb3J0ZXhhNSI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTUuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9jb3J0ZXhhNyI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTcuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9jb3J0ZXhhOCI6IH19CitERUZBVUxUVFVORSA/PSAiY29ydGV4YThoZi1uZW9uIgoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE4LmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfY29ydGV4YTkiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE5LmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfY29ydGV4YTE1IjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhMTUuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9jb3J0ZXhtMSI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4bTEuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9jb3J0ZXhtMyI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4bTMuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9jb3J0ZXhyNCI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4cjQuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9lcDkzMTIiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWVwOTMxMi5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2l3bW14dCI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaXdtbXh0LmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfc3Ryb25nYXJtMTEwMCI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtc3Ryb25nYXJtMTEwMC5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX3hzY2FsZSI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUteHNjYWxlLmluYworCitJTUFHRV9GU1RZUEVTICs9ICJ0YXIuYnoyIGpmZnMyIgorRVhUUkFfSU1BR0VDTURfamZmczIgPSAiLWxucCAiCisKK1NFUklBTF9DT05TT0xFID0gIjExNTIwMCB0dHlPMCIKKwore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIjogcHJlZmVycmVkX2tlcm5lbCA9ICJsaW51eC15b2N0by1jdXN0b20iIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsID0gImxpbnV4LXlvY3RvLWRldiIgfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSIgb3Iga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IiA6IH19CitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gInt7PXByZWZlcnJlZF9rZXJuZWx9fSIKKwore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbCA9IGtlcm5lbF9jaG9pY2Uuc3BsaXQoJ18nKVswXSB9fQore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbF92ZXJzaW9uID0ga2VybmVsX2Nob2ljZS5zcGxpdCgnXycpWzFdIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiB9fQorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsfX0iCitQUkVGRVJSRURfVkVSU0lPTl97ez1wcmVmZXJyZWRfa2VybmVsfX0gPz0gInt7PXByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbn19JSIKKworS0VSTkVMX0lNQUdFVFlQRSA9ICJ1SW1hZ2UiCitLRVJORUxfREVWSUNFVFJFRSA9ICJhbTMzNXgtYm9uZS5kdGIgYW0zMzV4LWJvbmVibGFjay5kdGIiCitLRVJORUxfRVhUUkFfQVJHUyArPSAiTE9BREFERFI9JHtVQk9PVF9FTlRSWVBPSU5UfSIKKworU1BMX0JJTkFSWSA9ICJNTE8iCitVQk9PVF9TVUZGSVggPSAiaW1nIgore3sgaW5wdXQgdHlwZToiZWRpdCIgbmFtZToidWJvb3RfbWFjaGluZSIgcHJpbzoiNDAiIG1zZzoiUGxlYXNlIHNwZWNpZnkgYSB2YWx1ZSBmb3IgVUJPT1RfTUFDSElORToiIGRlZmF1bHQ6ImFtMzM1eF9ldm1fY29uZmlnIiB9fQorVUJPT1RfTUFDSElORSA9ICJ7ez11Ym9vdF9tYWNoaW5lfX0iCit7eyBpbnB1dCB0eXBlOiJlZGl0IiBuYW1lOiJ1Ym9vdF9lbnRyeXBvaW50IiBwcmlvOiI0MCIgbXNnOiJQbGVhc2Ugc3BlY2lmeSBhIHZhbHVlIGZvciBVQk9PVF9FTlRSWVBPSU5UOiIgZGVmYXVsdDoiMHg4MDAwODAwMCIgfX0KK1VCT09UX0VOVFJZUE9JTlQgPSAie3s9dWJvb3RfZW50cnlwb2ludH19Igore3sgaW5wdXQgdHlwZToiZWRpdCIgbmFtZToidWJvb3RfbG9hZGFkZHJlc3MiIHByaW86IjQwIiBtc2c6IlBsZWFzZSBzcGVjaWZ5IGEgdmFsdWUgZm9yIFVCT09UX0xPQURBRERSRVNTOiIgZGVmYXVsdDoiMHg4MDAwODAwMCIgfX0KK1VCT09UX0xPQURBRERSRVNTID0gInt7PXVib290X2xvYWRhZGRyZXNzfX0iCisKK01BQ0hJTkVfRkVBVFVSRVMgPSAidXNiZ2FkZ2V0IHVzYmhvc3QgdmZhdCBhbHNhIgorCitJTUFHRV9CT09UX0ZJTEVTID89ICJ1LWJvb3QuJHtVQk9PVF9TVUZGSVh9IE1MTyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lLm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lLm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDQyZDAyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUubm9pbnN0YWxsCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWRpcm5hbWUge3s9bWFjaGluZX19CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS94b3JnLmNvbmYgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS94b3JnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM1Mjg5MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lL3hvcmcuY29uZgpAQCAtMCwwICsxLDM0IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiB4c2VydmVyID09ICJ5IjogfX0gdGhpcworU2VjdGlvbiAiTW9kdWxlIgorCUxvYWQJImV4dG1vZCIKKwlMb2FkCSJkYmUiCisJTG9hZAkiZ2x4IgorCUxvYWQJImZyZWV0eXBlIgorCUxvYWQJInR5cGUxIgorCUxvYWQJInJlY29yZCIKKwlMb2FkCSJkcmkiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIk1vbml0b3IiCisJSWRlbnRpZmllcgkiQnVpbHRpbiBEZWZhdWx0IE1vbml0b3IiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIkRldmljZSIKKwlJZGVudGlmaWVyCSJCdWlsdGluIERlZmF1bHQgZmJkZXYgRGV2aWNlIDAiCisJRHJpdmVyCQkib21hcGZiIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJTY3JlZW4iCisJSWRlbnRpZmllcgkiQnVpbHRpbiBEZWZhdWx0IGZiZGV2IFNjcmVlbiAwIgorCURldmljZQkJIkJ1aWx0aW4gRGVmYXVsdCBmYmRldiBEZXZpY2UgMCIKKwlNb25pdG9yCQkiQnVpbHRpbiBEZWZhdWx0IE1vbml0b3IiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNlcnZlckxheW91dCIKKwlJZGVudGlmaWVyCSJCdWlsdGluIERlZmF1bHQgTGF5b3V0IgorCVNjcmVlbgkJIkJ1aWx0aW4gRGVmYXVsdCBmYmRldiBTY3JlZW4gMCIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2VydmVyRmxhZ3MiCisJT3B0aW9uCQkiRG9udFphcCIgICIwIgorRW5kU2VjdGlvbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZ18wLjEuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA4MzAwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZ18wLjEuYmJhcHBlbmQKQEAgLTAsMCArMSwyIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiB4c2VydmVyID09ICJ5IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy5ub2luc3RhbGwgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTBkOTJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy5ub2luc3RhbGwKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZGlybmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iOiB9fSBmaWxlcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLW5vbl9oYXJkd2FyZS5jZmcgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtbm9uX2hhcmR3YXJlLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmZjOTBjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLW5vbl9oYXJkd2FyZS5jZmcKQEAgLTAsMCArMSwzMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LW5vbl9oYXJkd2FyZS5jZmcKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworQ09ORklHX05GU19ERUZfRklMRV9JT19TSVpFPTEwMjQKKworIworIyBNdWx0aXBsZSBEZXZpY2UgU3VwcG9ydAorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX05PX0haPXkKKworIworIyBDUFVJZGxlCisjCitDT05GSUdfQ1BVX0lETEU9eQorQ09ORklHX0NQVV9JRExFX0dPVl9MQURERVI9eQorQ09ORklHX0NQVV9JRExFX0dPVl9NRU5VPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX0RFQlVHX0ZTPXkKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTV9ERUJVRz15CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E1ZjNiNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYwpAQCAtMCwwICsxLDE0IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tcHJlZW1wdC1ydC5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSBwcmVlbXB0LXJ0CitkZWZpbmUgS0FSQ0ggYXJtCisKK2luY2x1ZGUge3s9bWFwX3ByZWVtcHRfcnRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYworCisjIGRlZmF1bHQgcG9saWN5IGZvciBwcmVlbXB0LXJ0IGtlcm5lbHMKK2luY2x1ZGUgZmVhdHVyZXMvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLnNjYworaW5jbHVkZSBmZWF0dXJlcy9wcm9maWxpbmcvcHJvZmlsaW5nLnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAxNGMyYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKQEAgLTAsMCArMSwxNCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYworZGVmaW5lIEtNQUNISU5FIHt7PW1hY2hpbmV9fQorZGVmaW5lIEtUWVBFIHN0YW5kYXJkCitkZWZpbmUgS0FSQ0ggYXJtCisKK2luY2x1ZGUge3s9bWFwX3N0YW5kYXJkX2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKKworIyBkZWZhdWx0IHBvbGljeSBmb3Igc3RhbmRhcmQga2VybmVscworaW5jbHVkZSBmZWF0dXJlcy9sYXRlbmN5dG9wL2xhdGVuY3l0b3Auc2NjCitpbmNsdWRlIGZlYXR1cmVzL3Byb2ZpbGluZy9wcm9maWxpbmcuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YxYzI1MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYwpAQCAtMCwwICsxLDEwIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdGlueS5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSB0aW55CitkZWZpbmUgS0FSQ0ggYXJtCisKK2luY2x1ZGUge3s9bWFwX3Rpbnlfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWNvbmZpZy5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc0ODllNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWNvbmZpZy5jZmcKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4Mjc1OWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3Zjc0N2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJlMWFlMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5jZmcKQEAgLTAsMCArMSwzMjEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5jZmcKKyMKKyMgU3lzdGVtIFR5cGUKKyMKK0NPTkZJR19BUkNIX09NQVA9eQorCisjCisjIFRJIE9NQVAgSW1wbGVtZW50YXRpb25zCisjCisjIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX09NQVAzPXkKKworIworIyBUSSBPTUFQIENvbW1vbiBGZWF0dXJlcworIworQ09ORklHX0FSQ0hfT01BUDJQTFVTPXkKKworIworIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucworIworQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKK0NPTkZJR19PTUFQXzMyS19USU1FUl9IWj0xMjgKK0NPTkZJR19PTUFQX0RNX1RJTUVSPXkKK0NPTkZJR19PTUFQX1JFU0VUX0NMT0NLUz15CitDT05GSUdfT01BUF9TTUFSVFJFRkxFWD15CitDT05GSUdfT01BUF9TTUFSVFJFRkxFWF9DTEFTUzM9eQorQ09ORklHX09NQVBfTUJPWF9GV0s9bQorQ09ORklHX09NQVBfTUJPWF9LRklGT19TSVpFPTI1NgorCisjCisjIE9NQVAgQm9hcmQgVHlwZQorIworQ09ORklHX01BQ0hfT01BUDNfQkVBR0xFPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUJFRT15CitDT05GSUdfQVJNX0VSUkFUQV80MzA5NzM9eQorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX0xFRFM9eQorCisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfT01BUD15CitDT05GSUdfU0VSSUFMX09NQVBfQ09OU09MRT15CisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfVkZQPXkKK0NPTkZJR19ORU9OPXkKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CitDT05GSUdfUE1fUlVOVElNRT15CisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX01URD15CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCitDT05GSUdfTVREX05BTkQ9eQorCitDT05GSUdfTVREX05BTkRfT01BUDI9eQorCitDT05GSUdfTVREX1VCST15CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1NDU0k9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfU01TQzkxMVg9eQorQ09ORklHX1VTQl9ORVRfU01TQzk1WFg9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9FVkRFVj15CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19LRVlCT0FSRF9UV0w0MDMwPXkKK0NPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CitDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfT01BUD15CitDT05GSUdfU1BJPXkKK0NPTkZJR19TUElfTUFTVEVSPXkKK0NPTkZJR19TUElfT01BUDI0WFg9eQorCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKK0NPTkZJR19HUElPX1RXTDQwMzA9eQorCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKK0NPTkZJR19PTUFQX1dBVENIRE9HPXkKK0NPTkZJR19XQVRDSERPR19OT1dBWU9VVD15CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworQ09ORklHX1RXTDQwMzBfQ09SRT15CitDT05GSUdfUkVHVUxBVE9SPXkKK0NPTkZJR19SRUdVTEFUT1JfRFVNTVk9eQorQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwPXkKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCitDT05GSUdfRkI9eQorQ09ORklHX0RSTT1tCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9PTUFQX0JPT1RMT0FERVJfSU5JVCBpcyBub3Qgc2V0CitDT05GSUdfT01BUDJfVlJBTT15CitDT05GSUdfT01BUDJfVlJGQj15CitDT05GSUdfT01BUDJfRFNTPXkKK0NPTkZJR19PTUFQMl9WUkFNX1NJWkU9MTQKK0NPTkZJR19PTUFQMl9EU1NfREVCVUdfU1VQUE9SVD15CisjIENPTkZJR19PTUFQMl9EU1NfQ09MTEVDVF9JUlFfU1RBVFMgaXMgbm90IHNldAorQ09ORklHX09NQVAyX0RTU19EUEk9eQorIyBDT05GSUdfT01BUDJfRFNTX1JGQkkgaXMgbm90IHNldAorQ09ORklHX09NQVAyX0RTU19WRU5DPXkKKyMgQ09ORklHX09NQVAyX0RTU19TREkgaXMgbm90IHNldAorQ09ORklHX09NQVAyX0RTU19EU0k9eQorIyBDT05GSUdfT01BUDJfRFNTX0ZBS0VfVlNZTkMgaXMgbm90IHNldAorQ09ORklHX09NQVAyX0RTU19NSU5fRkNLX1BFUl9QQ0s9MAorQ09ORklHX0ZCX09NQVAyPXkKK0NPTkZJR19GQl9PTUFQMl9ERUJVR19TVVBQT1JUPXkKK0NPTkZJR19GQl9PTUFQMl9OVU1fRkJTPTIKKworIworIyBPTUFQMi8zIERpc3BsYXkgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19QQU5FTF9HRU5FUklDX0RQST15CitDT05GSUdfUEFORUxfRFZJPXkKK0NPTkZJR19QQU5FTF9TSEFSUF9MUzAzN1Y3RFcwMT15CisjIENPTkZJR19QQU5FTF9MR1BISUxJUFNfTEIwMzVRMDIgaXMgbm90IHNldAorIyBDT05GSUdfUEFORUxfVEFBTCBpcyBub3Qgc2V0CitDT05GSUdfUEFORUxfVFBPX1REMDQzTVRFQTE9bQorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfRElTUExBWV9TVVBQT1JUPXkKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT049eQorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorQ09ORklHX0xPR089eQorIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorCisjIERNQSBEZXZpY2VzCitDT05GSUdfRE1BREVWSUNFUz15CitDT05GSUdfRE1BX09NQVA9eQorQ09ORklHX0RNQV9PRj15CisKK0NPTkZJR19TT1VORD15CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfU09DPXkKK0NPTkZJR19TTkRfT01BUF9TT0M9eQorQ09ORklHX1NORF9PTUFQX1NPQ19PTUFQX1RXTDQwMzA9eQorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCPXkKK0NPTkZJR19VU0JfU1VQUE9SVD15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9PVEc9eQorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1VTQl9FSENJX0hDRD15CitDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQ9eQorQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKK0NPTkZJR19VU0JfTVVTQl9IRFJDPXkKK0NPTkZJR19VU0JfTVVTQl9PTUFQMlBMVVM9eQorQ09ORklHX1VTQl9PTUFQPXkKKworIworIyBPTUFQIDM0M3ggaGlnaCBzcGVlZCBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9NVVNCX09URz15CitDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkM9eQorQ09ORklHX1VTQl9NVVNCX0hEUkNfSENEPXkKK0NPTkZJR19VU0JfSU5WRU5UUkFfRE1BPXkKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCitDT05GSUdfVVNCX0dBREdFVD15CitDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQorQ09ORklHX1VTQl9PVEdfVVRJTFM9eQorQ09ORklHX1RXTDQwMzBfVVNCPXkKKworIyBVU0IgZ2FkZ2V0IG1vZHVsZXMKK0NPTkZJR19VU0JfR19OQ009eQorQ09ORklHX1VTQl9NQVNTX1NUT1JBR0U9eQorCitDT05GSUdfTU1DPXkKKworIworIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfT01BUF9IUz15CisKKyMKKyMgUmVhbCBUaW1lIENsb2NrCisjCitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfRFJWX1RXTDQwMzA9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19WRkFUX0ZTPXkKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworCisjIENPTkZJR19WSURFT19IRUxQRVJfQ0hJUFNfQVVUTyBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCBFbXVsYXRpb24gc3VwcG9ydAorIworQ09ORklHX0FQTV9FTVVMQVRJT049eQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI4NDAwZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MKQEAgLTAsMCArMSw4IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uc2NjCitrY29uZiBoYXJkd2FyZSB7ez1tYWNoaW5lfX0uY2ZnCitrY29uZiBub24taGFyZHdhcmUge3ttYWNoaW5lfX0tbm9uX2hhcmR3YXJlLmNmZworCitpbmNsdWRlIGZlYXR1cmVzL3VzYi1uZXQvdXNiLW5ldC5zY2MKKwora2NvbmYgaGFyZHdhcmUge3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZworaW5jbHVkZSB7ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTFkNjk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKQEAgLTAsMCArMSw1IEBACit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iOiB9fQore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToidXNlX2RlZmF1bHRfa2VybmVsIiBwcmlvOiIxMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSB0byB1c2UgdGhlIGRlZmF1bHQgKDMuMTkpIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KKwore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQgdXNlX2RlZmF1bHRfa2VybmVsID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Imtlcm5lbF9jaG9pY2UiIGdlbjoiYnNwLmtlcm5lbC5rZXJuZWxzIiBwcmlvOiIxMCIgbXNnOiJQbGVhc2UgY2hvb3NlIHRoZSBrZXJuZWwgdG8gdXNlIGluIHRoaXMgQlNQOiIgZGVmYXVsdDoibGludXgteW9jdG9fMy4xOSJ9fQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmE2MjMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKQEAgLTAsMCArMSwyNiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IldvdWxkIHlvdSBsaWtlIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmOGRiMDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tcnRfMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1wcmVlbXB0LXJ0LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXJ0X3t7PW1hY2hpbmV9fSA/PSAiZjM1OTkyZjgwYzgxZGM1ZmExYTk3MTY1ZGZkNWNiYjg0NjYxZjdjYiIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by1ydF97ez1tYWNoaW5lfX0gPz0gIjFiNTM0YjJmOGJiZTliOGE3NzMyNjhjZmEzMGE0ODUwMzQ2ZjZmNWYiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzFjY2JjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV8zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGU4MmZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV8zLjE5IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE5IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMWNjNTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZTFiYjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fMy4xOSI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTkiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9DT1BZSU5HLk1JVCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vQ09QWUlORy5NSVQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI5NTBkYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vQ09QWUlORy5NSVQKQEAgLTAsMCArMSwxNyBAQAorUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyAKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAKK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSAKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCAKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gCitUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL1JFQURNRSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyODY1OWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL1JFQURNRQpAQCAtMCwwICsxLDExOCBAQAorVGhpcyBSRUFETUUgZmlsZSBjb250YWlucyBpbmZvcm1hdGlvbiBvbiBidWlsZGluZyB0aGUgbWV0YS17ez1tYWNoaW5lfX0KK0JTUCBsYXllciwgYW5kIGJvb3RpbmcgdGhlIGltYWdlcyBjb250YWluZWQgaW4gdGhlIC9iaW5hcnkgZGlyZWN0b3J5LgorUGxlYXNlIHNlZSB0aGUgY29ycmVzcG9uZGluZyBzZWN0aW9ucyBiZWxvdyBmb3IgZGV0YWlscy4KKworCitEZXBlbmRlbmNpZXMKKz09PT09PT09PT09PQorCitUaGlzIGxheWVyIGRlcGVuZHMgb246CisKKyAgVVJJOiBnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlCisgIGJyYW5jaDogbWFzdGVyCisKKyAgVVJJOiBnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZQorICBsYXllcnM6IG1ldGEKKyAgYnJhbmNoOiBtYXN0ZXIKKworICBVUkk6IGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3h4eHgKKyAgbGF5ZXJzOiB4eHh4CisgIGJyYW5jaDogbWFzdGVyCisKKworUGF0Y2hlcworPT09PT09PQorCitQbGVhc2Ugc3VibWl0IGFueSBwYXRjaGVzIGFnYWluc3QgdGhpcyBCU1AgdG8gdGhlIFlvY3RvIG1haWxpbmcgbGlzdAorKHlvY3RvQHlvY3RvcHJvamVjdC5vcmcpIGFuZCBjYzogdGhlIG1haW50YWluZXI6CisKK01haW50YWluZXI6IFhYWCBZWVlZWVkgPHh4eC55eXl5eXlAenp6enouY29tPgorCitQbGVhc2Ugc2VlIHRoZSBtZXRhLXh4eHgvTUFJTlRBSU5FUlMgZmlsZSBmb3IgbW9yZSBkZXRhaWxzLgorCisKK1RhYmxlIG9mIENvbnRlbnRzCis9PT09PT09PT09PT09PT09PQorCisgIEkuIEJ1aWxkaW5nIHRoZSBtZXRhLXt7PW1hY2hpbmV9fSBCU1AgbGF5ZXIKKyBJSS4gQm9vdGluZyB0aGUgaW1hZ2VzIGluIC9iaW5hcnkKKworCitJLiBCdWlsZGluZyB0aGUgbWV0YS17ez1tYWNoaW5lfX0gQlNQIGxheWVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy0tLSByZXBsYWNlIHdpdGggc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIGZvciB5b3VyIGxheWVyIC0tLQorCitJbiBvcmRlciB0byBidWlsZCBhbiBpbWFnZSB3aXRoIEJTUCBzdXBwb3J0IGZvciBhIGdpdmVuIHJlbGVhc2UsIHlvdQorbmVlZCB0byBkb3dubG9hZCB0aGUgY29ycmVzcG9uZGluZyBCU1AgdGFyYmFsbCBmcm9tIHRoZSAnQm9hcmQgU3VwcG9ydAorUGFja2FnZSAoQlNQKSBEb3dubG9hZHMnIHBhZ2Ugb2YgdGhlIFlvY3RvIFByb2plY3Qgd2Vic2l0ZS4KKworSGF2aW5nIGRvbmUgdGhhdCwgYW5kIGFzc3VtaW5nIHlvdSBleHRyYWN0ZWQgdGhlIEJTUCB0YXJiYWxsIGNvbnRlbnRzCithdCB0aGUgdG9wLWxldmVsIG9mIHlvdXIgeW9jdG8gYnVpbGQgdHJlZSwgeW91IGNhbiBidWlsZCBhCit7ez1tYWNoaW5lfX0gaW1hZ2UgYnkgYWRkaW5nIHRoZSBsb2NhdGlvbiBvZiB0aGUgbWV0YS17ez1tYWNoaW5lfX0KK2xheWVyIHRvIGJibGF5ZXJzLmNvbmYsIGFsb25nIHdpdGggYW55IG90aGVyIGxheWVycyBuZWVkZWQgKHRvIGFjY2VzcworY29tbW9uIG1ldGFkYXRhIHNoYXJlZCBiZXR3ZWVuIEJTUHMpIGUuZy46CisKKyAgeW9jdG8vbWV0YS14eHh4IFwKKyAgeW9jdG8vbWV0YS14eHh4L21ldGEte3s9bWFjaGluZX19IFwKKworVG8gZW5hYmxlIHRoZSB7ez1tYWNoaW5lfX0gbGF5ZXIsIGFkZCB0aGUge3s9bWFjaGluZX19IE1BQ0hJTkUgdG8gbG9jYWwuY29uZjoKKworICBNQUNISU5FID89ICJ7ez1tYWNoaW5lfX0iCisKK1lvdSBzaG91bGQgdGhlbiBiZSBhYmxlIHRvIGJ1aWxkIGEge3s9bWFjaGluZX19IGltYWdlIGFzIHN1Y2g6CisKKyAgJCBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnYKKyAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0bworCitBdCB0aGUgZW5kIG9mIGEgc3VjY2Vzc2Z1bCBidWlsZCwgeW91IHNob3VsZCBoYXZlIGEgbGl2ZSBpbWFnZSB0aGF0Cit5b3UgY2FuIGJvb3QgZnJvbSBhIFVTQiBmbGFzaCBkcml2ZSAoc2VlIGluc3RydWN0aW9ucyBvbiBob3cgdG8gZG8KK3RoYXQgYmVsb3csIGluIHRoZSBzZWN0aW9uICdCb290aW5nIHRoZSBpbWFnZXMgZnJvbSAvYmluYXJ5JykuCisKK0FzIGFuIGFsdGVybmF0aXZlIHRvIGRvd25sb2FkaW5nIHRoZSBCU1AgdGFyYmFsbCwgeW91IGNhbiBhbHNvIHdvcmsKK2RpcmVjdGx5IGZyb20gdGhlIG1ldGEteHh4eCBnaXQgcmVwb3NpdG9yeS4gIEZvciBlYWNoIEJTUCBpbiB0aGUKKydtZXRhLXh4eHgnIHJlcG9zaXRvcnksIHRoZXJlIGFyZSBtdWx0aXBsZSBicmFuY2hlcywgb25lIGNvcnJlc3BvbmRpbmcKK3RvIGVhY2ggbWFqb3IgcmVsZWFzZSBzdGFydGluZyB3aXRoICdsYXZlcm5lJyAoMC45MCksIGluIGFkZGl0aW9uIHRvCit0aGUgbGF0ZXN0IGNvZGUgd2hpY2ggdHJhY2tzIHRoZSBjdXJyZW50IG1hc3RlciAobm90ZSB0aGF0IG5vdCBhbGwKK0JTUHMgYXJlIHByZXNlbnQgaW4gZXZlcnkgcmVsZWFzZSkuICBJbnN0ZWFkIG9mIGV4dHJhY3RpbmcgYSBCU1AKK3RhcmJhbGwgYXQgdGhlIHRvcCBsZXZlbCBvZiB5b3VyIHlvY3RvIGJ1aWxkIHRyZWUsIHlvdSBjYW4KK2VxdWl2YWxlbnRseSBjaGVjayBvdXQgdGhlIGFwcHJvcHJpYXRlIGJyYW5jaCBmcm9tIHRoZSBtZXRhLXh4eHgKK3JlcG9zaXRvcnkgYXQgdGhlIHNhbWUgbG9jYXRpb24uCisKKworSUkuIEJvb3RpbmcgdGhlIGltYWdlcyBpbiAvYmluYXJ5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLS0tIHJlcGxhY2Ugd2l0aCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgZm9yIHlvdXIgcGxhdGZvcm0gLS0tCisKK1RoaXMgQlNQIGNvbnRhaW5zIGJvb3RhYmxlIGxpdmUgaW1hZ2VzLCB3aGljaCBjYW4gYmUgdXNlZCB0byBkaXJlY3RseQorYm9vdCBZb2N0byBvZmYgb2YgYSBVU0IgZmxhc2ggZHJpdmUuCisKK1VuZGVyIExpbnV4LCBpbnNlcnQgYSBVU0IgZmxhc2ggZHJpdmUuICBBc3N1bWluZyB0aGUgVVNCIGZsYXNoIGRyaXZlCit0YWtlcyBkZXZpY2UgL2Rldi9zZGYsIHVzZSBkZCB0byBjb3B5IHRoZSBsaXZlIGltYWdlIHRvIGl0LiAgRm9yCitleGFtcGxlOgorCisjIGRkIGlmPWNvcmUtaW1hZ2Utc2F0by17ez1tYWNoaW5lfX0tMjAxMDEyMDcwNTM3MzguaGRkaW1nIG9mPS9kZXYvc2RmCisjIHN5bmMKKyMgZWplY3QgL2Rldi9zZGYKKworVGhpcyBzaG91bGQgZ2l2ZSB5b3UgYSBib290YWJsZSBVU0IgZmxhc2ggZGV2aWNlLiAgSW5zZXJ0IHRoZSBkZXZpY2UKK2ludG8gYSBib290YWJsZSBVU0Igc29ja2V0IG9uIHRoZSB0YXJnZXQsIGFuZCBwb3dlciBvbi4gIFRoaXMgc2hvdWxkCityZXN1bHQgaW4gYSBzeXN0ZW0gYm9vdGVkIHRvIHRoZSBTYXRvIGdyYXBoaWNhbCBkZXNrdG9wLgorCitJZiB5b3Ugd2FudCBhIHRlcm1pbmFsLCB1c2UgdGhlIGFycm93cyBhdCB0aGUgdG9wIG9mIHRoZSBVSSB0byBtb3ZlIHRvCitkaWZmZXJlbnQgcGFnZXMgb2YgYXZhaWxhYmxlIGFwcGxpY2F0aW9ucywgb25lIG9mIHdoaWNoIGlzIG5hbWVkCisnVGVybWluYWwnLiAgQ2xpY2tpbmcgdGhhdCBzaG91bGQgZ2l2ZSB5b3UgYSByb290IHRlcm1pbmFsLgorCitJZiB5b3Ugd2FudCB0byBzc2ggaW50byB0aGUgc3lzdGVtLCB5b3UgY2FuIHVzZSB0aGUgcm9vdCB0ZXJtaW5hbCB0bworaWZjb25maWcgdGhlIElQIGFkZHJlc3MgYW5kIHVzZSB0aGF0IHRvIHNzaCBpbi4gIFRoZSByb290IHBhc3N3b3JkIGlzCitlbXB0eSwgc28gdG8gbG9nIGluIHR5cGUgJ3Jvb3QnIGZvciB0aGUgdXNlciBuYW1lIGFuZCBoaXQgJ0VudGVyJyBhdAordGhlIFBhc3N3b3JkIHByb21wdDogYW5kIHlvdSBzaG91bGQgYmUgaW4uCisKKy0tLS0KKworSWYgeW91IGZpbmQgeW91J3JlIGdldHRpbmcgY29ycnVwdCBpbWFnZXMgb24gdGhlIFVTQiAoaXQgZG9lc24ndCBzaG93Cit0aGUgc3lzbGludXggYm9vdDogcHJvbXB0LCBvciB0aGUgYm9vdDogcHJvbXB0IGNvbnRhaW5zIHN0cmFuZ2UKK2NoYXJhY3RlcnMpLCB0cnkgZG9pbmcgdGhpcyBmaXJzdDoKKworIyBkZCBpZj0vZGV2L3plcm8gb2Y9L2Rldi9zZGYgYnM9MU0gY291bnQ9NTEyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL1JFQURNRS5zb3VyY2VzIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9SRUFETUUuc291cmNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzRjYjdiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9SRUFETUUuc291cmNlcwpAQCAtMCwwICsxLDE3IEBACitUaGUgc291cmNlcyBmb3IgdGhlIHBhY2thZ2VzIGNvbXByaXNpbmcgdGhlIGltYWdlcyBzaGlwcGVkIHdpdGggdGhpcworQlNQIGNhbiBiZSBmb3VuZCBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uOgorCitodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvCisKK1RoZSBtZXRhZGF0YSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBpbWFnZXMgc2hpcHBlZCB3aXRoIHRoaXMgQlNQLCBpbgorYWRkaXRpb24gdG8gdGhlIGNvZGUgY29udGFpbmVkIGluIHRoaXMgQlNQLCBjYW4gYmUgZm91bmQgYXQgdGhlCitmb2xsb3dpbmcgbG9jYXRpb246CisKK2h0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb3dubG9hZHMveW9jdG8tMS4xL3Bva3ktZWRpc29uLTYuMC50YXIuYnoyCisKK1RoZSBtZXRhZGF0YSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBpbWFnZXMgc2hpcHBlZCB3aXRoIHRoaXMgQlNQLCBpbgorYWRkaXRpb24gdG8gdGhlIGNvZGUgY29udGFpbmVkIGluIHRoaXMgQlNQLCBjYW4gYWxzbyBiZSBmb3VuZCBhdCB0aGUKK2ZvbGxvd2luZyBsb2NhdGlvbnM6CisKK2dpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kuZ2l0CitnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9tZXRhLXh4eHgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vYmluYXJ5Ly5naXRpZ25vcmUgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL2JpbmFyeS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL2JpbmFyeS8uZ2l0aWdub3JlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL2NvbmYvbGF5ZXIuY29uZiBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vY29uZi9sYXllci5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MjlmNDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL2NvbmYvbGF5ZXIuY29uZgpAQCAtMCwwICsxLDEwIEBACisjIFdlIGhhdmUgYSBjb25mIGFuZCBjbGFzc2VzIGRpcmVjdG9yeSwgYWRkIHRvIEJCUEFUSAorQkJQQVRIIC49ICI6JHtMQVlFUkRJUn0iCisKKyMgV2UgaGF2ZSBhIHJlY2lwZXMtKiBkaXJlY3RvcmllcywgYWRkIHRvIEJCRklMRVMKK0JCRklMRVMgKz0gIiR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmIgXAorCSR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmJhcHBlbmQiCisKK0JCRklMRV9DT0xMRUNUSU9OUyArPSAie3s9bWFjaGluZX19IgorQkJGSUxFX1BBVFRFUk5fe3s9bWFjaGluZX19ID0gIl4ke0xBWUVSRElSfS8iCitCQkZJTEVfUFJJT1JJVFlfe3s9bWFjaGluZX19ID0gIjYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvci9tYWNoaW5lLm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL21hY2hpbmUubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NDJkMDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvci9tYWNoaW5lLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7PW1hY2hpbmV9fQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3IvbWFjaGluZS9tYWNoY29uZmlnIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3IvbWFjaGluZS9tYWNoY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiODVkMzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvci9tYWNoaW5lL21hY2hjb25maWcKQEAgLTAsMCArMSw1IEBACisjIEFzc3VtZSBhIFVTQiBtb3VzZSBhbmQga2V5Ym9hcmQgYXJlIGNvbm5lY3RlZAore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToidG91Y2hzY3JlZW4iIG1zZzoiRG9lcyB5b3VyIEJTUCBoYXZlIGEgdG91Y2hzY3JlZW4/ICh5L24pIiBkZWZhdWx0OiJuIiB9fQorSEFWRV9UT1VDSFNDUkVFTj17ez10b3VjaHNjcmVlbn19Cit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJrZXlib2FyZCIgbXNnOiJEb2VzIHlvdXIgQlNQIGhhdmUgYSBrZXlib2FyZD8gKHkvbikiIGRlZmF1bHQ6InkiIH19CitIQVZFX0tFWUJPQVJEPXt7PWtleWJvYXJkfX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yXzAuMC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yXzAuMC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDQ4MDRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiYXBwZW5kCkBAIC0wLDAgKzEsMiBAQAorRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2M2RkZGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbApAQCAtMCwwICsxLDI2IEBACit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iOiB9fQore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToiY3VzdG9tX2tlcm5lbF9yZW1vdGUiIHByaW86IjIwIiBtc2c6IklzIHRoZSBjdXN0b20ga2VybmVsIHlvdSdkIGxpa2UgdG8gdXNlIGluIGEgcmVtb3RlIGdpdCByZXBvPyAoeS9uKSIgZGVmYXVsdDoieSJ9fQorCit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iIGFuZCBjdXN0b21fa2VybmVsX3JlbW90ZSA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJlZGl0LWdpdC1yZXBvIiBuYW1lOiJjdXN0b21fa2VybmVsX3JlbW90ZV9wYXRoIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgZW50ZXIgdGhlIGZ1bGwgVVJJIHRvIHRoZSByZW1vdGUgZ2l0IHJlcG8gKHRoZSBkZWZhdWx0IGNvcnJlc3BvbmRzIHRvIGxpbnV4LXN0YWJsZSB2My4xNi4zKSIgZGVmYXVsdDoiZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3N0YWJsZS9saW51eC1zdGFibGUuZ2l0In19CisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSIgYW5kIGN1c3RvbV9rZXJuZWxfcmVtb3RlID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImVkaXQtZ2l0LXJlcG8iIG5hbWU6ImN1c3RvbV9rZXJuZWxfbG9jYWxfcGF0aCIgcHJpbzoiMjAiIG1zZzoiWW91J3ZlIGluZGljYXRlZCB0aGF0IHlvdSdyZSBub3QgdXNpbmcgYSByZW1vdGUgZ2l0IHJlcG8uICBQbGVhc2UgZW50ZXIgdGhlIGZ1bGwgcGF0aCB0byB0aGUgbG9jYWwgZ2l0IHJlcG8geW91IHdhbnQgdG8gdXNlICh0aGUgZGVmYXVsdCBhc3N1bWVzIGEgbG9jYWwgbGludXgtc3RhYmxlIHYzLjE2LjMpIiBkZWZhdWx0OiIvaG9tZS90cnoveW9jdG8va2VybmVscy9saW51eC1zdGFibGUuZ2l0In19CisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSI6IH19Cit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJjdXN0b21fa2VybmVsX25lZWRfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgdG8gdXNlIGEgc3BlY2lmaWMgKG5vbi1tYXN0ZXIpIGJyYW5jaD8gKHkvbikiIGRlZmF1bHQ6Im4ifX0KKwore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIiBhbmQgY3VzdG9tX2tlcm5lbF9uZWVkX2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiZWRpdCIgbmFtZToiY3VzdG9tX2tlcm5lbF9rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgZW50ZXIgdGhlIGJyYW5jaCB5b3Ugd2FudCB0byB1c2UgKHRoZSBkZWZhdWx0IGJyYW5jaCBjb3JyZXNwb25kcyB0byB0aGUgbGludXgtc3RhYmxlICdsaW51eC0zLjE2LnknIGJyYW5jaCk6IiBkZWZhdWx0OiJsaW51eC0zLjE2LnkifX0KKwore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIjogfX0KK3t7IGlucHV0IHR5cGU6ImVkaXQiIG5hbWU6ImN1c3RvbV9rZXJuZWxfc3JjcmV2IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgZW50ZXIgdGhlIFNSQ1JFViAoY29tbWl0IGlkKSB5b3UnZCBsaWtlIHRvIHVzZSAodXNlICcke0FVVE9SRVZ9JyB0byB0cmFjayB0aGUgY3VycmVudCBIRUFEKToiIGRlZmF1bHQ6IiR7QVVUT1JFVn0ifX0KKwore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIjogfX0KK3t7IGlucHV0IHR5cGU6ImVkaXQiIG5hbWU6ImN1c3RvbV9rZXJuZWxfbGludXhfdmVyc2lvbiIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGVudGVyIHRoZSBMaW51eCB2ZXJzaW9uIG9mIHRoZSBrZXJuZWwgeW91J3ZlIHNwZWNpZmllZDoiIGRlZmF1bHQ6IjMuMTYuMyJ9fQorCit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iOiB9fQore3sgaW5wdXQgdHlwZToiZWRpdCIgbmFtZToiY3VzdG9tX2tlcm5lbF9saW51eF92ZXJzaW9uX2V4dGVuc2lvbiIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGVudGVyIGEgTGludXggdmVyc2lvbiBleHRlbnNpb24gaWYgeW91IHdhbnQgKGl0IHdpbGwgc2hvdyB1cCBhdCB0aGUgZW5kIG9mIHRoZSBrZXJuZWwgbmFtZSBzaG93biBieSB1bmFtZSk6IiBkZWZhdWx0OiItY3VzdG9tIn19CisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSI6IH19Cit7eyBpbnB1dCB0eXBlOiJlZGl0LWZpbGUiIG5hbWU6ImN1c3RvbV9rZXJuZWxfZGVmY29uZmlnIiBwcmlvOiIyMCIgbXNnOiJJdCdzIHJlY29tbWVuZGVkIChidXQgbm90IHJlcXVpcmVkKSB0aGF0IGN1c3RvbSBrZXJuZWxzIGJlIGJ1aWx0IHVzaW5nIGEgZGVmY29uZmlnLiAgUGxlYXNlIGVudGVyIHRoZSBmdWxsIHBhdGggdG8gdGhlIGRlZmNvbmZpZyBmb3IgeW91ciBrZXJuZWwgKE5PVEU6IGlmIHlvdSBkb24ndCBzcGVjaWZ5IGEgZGVmY29uZmlnIHRoZSBrZXJuZWwgcHJvYmFibHkgd29uJ3QgYnVpbGQgb3IgYm9vdCk6IiBkZWZhdWx0OiIifX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tLmJiIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20uYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRhOTU1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tLmJiCkBAIC0wLDAgKzEsNTcgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSI6IH19IHRoaXMKKyMgVGhpcyBmaWxlIHdhcyBkZXJpdmVkIGZyb20gdGhlIGxpbnV4LXlvY3RvLWN1c3RvbS5iYiByZWNpcGUgaW4KKyMgb2UtY29yZS4KKyMKKyMgbGludXgteW9jdG8tY3VzdG9tLmJiOgorIworIyAgIEEgeW9jdG8tYnNwLWdlbmVyYXRlZCBrZXJuZWwgcmVjaXBlIHRoYXQgdXNlcyB0aGUgbGludXgteW9jdG8gYW5kCisjICAgb2UtY29yZSBrZXJuZWwgY2xhc3NlcyB0byBhcHBseSBhIHN1YnNldCBvZiB5b2N0byBrZXJuZWwKKyMgICBtYW5hZ2VtZW50IHRvIGdpdCBtYW5hZ2VkIGtlcm5lbCByZXBvc2l0b3JpZXMuCisjCisjIFdhcm5pbmc6CisjCisjICAgQnVpbGRpbmcgdGhpcyBrZXJuZWwgd2l0aG91dCBwcm92aWRpbmcgYSBkZWZjb25maWcgb3IgQlNQCisjICAgY29uZmlndXJhdGlvbiB3aWxsIHJlc3VsdCBpbiBidWlsZCBvciBib290IGVycm9ycy4gVGhpcyBpcyBub3QgYQorIyAgIGJ1Zy4KKyMKKyMgTm90ZXM6CisjCisjICAgcGF0Y2hlczogcGF0Y2hlcyBjYW4gYmUgbWVyZ2VkIGludG8gdG8gdGhlIHNvdXJjZSBnaXQgdHJlZSBpdHNlbGYsCisjICAgICAgICAgICAgYWRkZWQgdmlhIHRoZSBTUkNfVVJJLCBvciBjb250cm9sbGVkIHZpYSBhIEJTUAorIyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uCisjCisjICAgZXhhbXBsZSBjb25maWd1cmF0aW9uIGFkZGl0aW9uOgorIyAgICAgICAgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly9zbXAuY2ZnIgorIyAgIGV4YW1wbGUgcGF0Y2ggYWRkaXRpb246CisjICAgICAgICAgICAgU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtbGludXgtdmVyc2lvbi10d2Vhay5wYXRjaAorIyAgIGV4YW1wbGUgZmVhdHVyZSBhZGRpdGlvbjoKKyMgICAgICAgICAgICBTUkNfVVJJICs9ICJmaWxlOi8vZmVhdHVyZS5zY2MiCisjCisKK2luaGVyaXQga2VybmVsCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iIGFuZCBjdXN0b21fa2VybmVsX3JlbW90ZSA9PSAieSI6IH19CitTUkNfVVJJID0gInt7PWN1c3RvbV9rZXJuZWxfcmVtb3RlX3BhdGh9fTtwcm90b2NvbD1naXQ7YmFyZWNsb25lPTE7YnJhbmNoPSR7S0JSQU5DSH0iCit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iIGFuZCBjdXN0b21fa2VybmVsX3JlbW90ZSA9PSAibiI6IH19CitTUkNfVVJJID0gImdpdDovL3t7PWN1c3RvbV9rZXJuZWxfbG9jYWxfcGF0aH19O3Byb3RvY29sPWZpbGU7YmFyZWNsb25lPTE7YnJhbmNoPSR7S0JSQU5DSH0iCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kZWZjb25maWciCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0uc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0uY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICIKKwore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIiBhbmQgY3VzdG9tX2tlcm5lbF9uZWVkX2ticmFuY2ggPT0gInkiIGFuZCBjdXN0b21fa2VybmVsX2ticmFuY2ggYW5kIGN1c3RvbV9rZXJuZWxfa2JyYW5jaCAhPSAibWFzdGVyIjogfX0KK0tCUkFOQ0ggPSAie3s9Y3VzdG9tX2tlcm5lbF9rYnJhbmNofX0iCisKK0xJTlVYX1ZFUlNJT04gPz0gInt7PWN1c3RvbV9rZXJuZWxfbGludXhfdmVyc2lvbn19IgorTElOVVhfVkVSU0lPTl9FWFRFTlNJT04gPz0gInt7PWN1c3RvbV9rZXJuZWxfbGludXhfdmVyc2lvbl9leHRlbnNpb259fSIKKworU1JDUkVWPSJ7ez1jdXN0b21fa2VybmVsX3NyY3Jldn19IgorCitQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tLm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tLm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTdkMjA2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20ubm9pbnN0YWxsCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWRpcm5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIjogfX0gbGludXgteW9jdG8tY3VzdG9tCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS9kZWZjb25maWcgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ViMGZmYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL2RlZmNvbmZpZwpAQCAtMCwwICsxLDUgQEAKKyMKKyMgUGxhY2Vob2xkZXIgZm9yIGN1c3RvbSBkZWZhdWx0IGtlcm5lbCBjb25maWd1cmF0aW9uLiAgeW9jdG8tYnNwIHdpbGwKKyMgcmVwbGFjZSB0aGlzIGZpbGUgd2l0aCBhIHVzZXItc3BlY2lmaWVkIGRlZmNvbmZpZy4KKyMKK3t7IGlmIGN1c3RvbV9rZXJuZWxfZGVmY29uZmlnOiByZXBsYWNlX2ZpbGUob2YsIGN1c3RvbV9rZXJuZWxfZGVmY29uZmlnKSB9fQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vbWFjaGluZS11c2VyLWNvbmZpZy5jZmcgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjIzMDlkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vbWFjaGluZS11c2VyLWNvbmZpZy5jZmcKQEAgLTAsMCArMSw5IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnCisjCisjIFVzZWQgYnkgeW9jdG8ta2VybmVsIHRvIG1hbmFnZSBjb25maWcgb3B0aW9ucy4KKyMKKyMgeW9jdG8ta2VybmVsIG1heSBjaGFuZ2UgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBpbiBhbnkKKyMgd2F5IGl0IHNlZXMgZml0LCBpbmNsdWRpbmcgcmVtb3ZpbmcgY29tbWVudHMgbGlrZSB0aGlzLAorIyBzbyBkb24ndCBtYW51YWxseSBtYWtlIGFueSBtb2RpZmljYXRpb25zIHlvdSBkb24ndCB3YW50CisjIHRvIGxvc2UuCisjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQxMTM4ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYwpAQCAtMCwwICsxLDkgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjCisjCisjIFVzZWQgYnkgeW9jdG8ta2VybmVsIHRvIG1hbmFnZSBwYXRjaGVzLgorIworIyB5b2N0by1rZXJuZWwgbWF5IGNoYW5nZSB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGluIGFueQorIyB3YXkgaXQgc2VlcyBmaXQsIGluY2x1ZGluZyByZW1vdmluZyBjb21tZW50cyBsaWtlIHRoaXMsCisjIHNvIGRvbid0IG1hbnVhbGx5IG1ha2UgYW55IG1vZGlmaWNhdGlvbnMgeW91IGRvbid0IHdhbnQKKyMgdG8gbG9zZS4KKyMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL21hY2hpbmUuY2ZnIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vbWFjaGluZS5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJhODIwMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL21hY2hpbmUuY2ZnCkBAIC0wLDAgKzEsNCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LmNmZworIworIyBBIGNvbnZlbmllbnQgcGxhY2UgdG8gYWRkIGNvbmZpZyBvcHRpb25zLCBub3RoaW5nIG1vcmUuCisjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS9tYWNoaW5lLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL21hY2hpbmUuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNmI0MTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS9tYWNoaW5lLnNjYwpAQCAtMCwwICsxLDE4IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uc2NjCisjCisjIFRoZSB0b3AtbGV2ZWwgJ2ZlYXR1cmUnIGZvciB0aGUge3s9bWFjaGluZX19IGN1c3RvbSBrZXJuZWwuCisjCisjIEVzc2VudGlhbGx5IHRoaXMgaXMgYSBjb252ZW5pZW50IHRvcC1sZXZlbCBjb250YWluZXIgb3Igc3RhcnRpbmcKKyMgcG9pbnQgZm9yIGFkZGluZyBsb3dlci1sZXZlbCBjb25maWcgZnJhZ2VtZW50cyBhbmQgZmVhdHVyZXMuCisjCisKKyMge3s9bWFjaGluZX19LmNmZyBpbiB0aGUgbGludXgteW9jdG8tY3VzdG9tIHN1YmRpciBpcyBqdXN0IGEKKyMgY29udmVuaWVudCBwbGFjZSBmb3IgYWRkaW5nIHJhbmRvbSBjb25maWcgZnJhZ21lbnRzLgorCitrY29uZiBoYXJkd2FyZSB7ez1tYWNoaW5lfX0uY2ZnCisKKyMgVGhlc2UgYXJlIHVzZWQgYnkgeW9jdG8ta2VybmVsIHRvIGFkZCBjb25maWcgZnJhZ21lbnRzIGFuZCBmZWF0dXJlcy4KKyMgRG9uJ3QgcmVtb3ZlIGlmIHlvdSBwbGFuIG9uIHVzaW5nIHlvY3RvLWtlcm5lbCB3aXRoIHRoaXMgQlNQLgorCitrY29uZiBoYXJkd2FyZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnCitpbmNsdWRlIHt7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTg5MzQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZgpAQCAtMCwwICsxLDc3IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uY29uZgorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IHt7PW1hY2hpbmV9fQorCisjQERFU0NSSVBUSU9OOiBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZm9yIHt7PW1hY2hpbmV9fSBzeXN0ZW1zCisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSI6IHByZWZlcnJlZF9rZXJuZWwgPSAibGludXgteW9jdG8tY3VzdG9tIiB9fQore3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbCA9ICJsaW51eC15b2N0by1kZXYiIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iIG9yIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiIgOiB9fQorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsfX0iCisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWwgPSBrZXJuZWxfY2hvaWNlLnNwbGl0KCdfJylbMF0gfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbiA9IGtlcm5lbF9jaG9pY2Uuc3BsaXQoJ18nKVsxXSB9fQore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAie3s9cHJlZmVycmVkX2tlcm5lbH19IgorUFJFRkVSUkVEX1ZFUlNJT05fe3s9cHJlZmVycmVkX2tlcm5lbH19ID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsX3ZlcnNpb259fSUiCisKK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6InR1bmVmaWxlIiBwcmlvOiI0MCIgbXNnOiJXaGljaCBtYWNoaW5lIHR1bmluZyB3b3VsZCB5b3UgbGlrZSB0byB1c2U/IiBkZWZhdWx0OiJ0dW5lX2NvcmUyIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfaTU4NiIgbXNnOiJpNTg2IHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfYXRvbSIgbXNnOiJBdG9tIHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfY29yZTIiIG1zZzoiQ29yZTIgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9pNTg2IjogfX0KK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pNTg2LmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfYXRvbSI6IH19CityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXRvbS5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2NvcmUyIjogfX0KK0RFRkFVTFRUVU5FPSJjb3JlMi0zMiIKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlMi5pbmMKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS94ODYtYmFzZS5pbmMKKworTUFDSElORV9GRUFUVVJFUyArPSAid2lmaSBlZmkgcGNiaW9zIgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ4c2VydmVyIiBwcmlvOiI1MCIgbXNnOiJEbyB5b3UgbmVlZCBzdXBwb3J0IGZvciBYPyAoeS9uKSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIChrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b18zLjE5IiBvciBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b18zLjE0Iik6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJ4c2VydmVyX2Nob2ljZSIgcHJpbzoiNTAiIG1zZzoiUGxlYXNlIHNlbGVjdCBhbiB4c2VydmVyIGZvciB0aGlzIG1hY2hpbmU6IiBkZWZhdWx0OiJ4c2VydmVyX3Zlc2EiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl92ZXNhIiBtc2c6IlZFU0EgeHNlcnZlciBzdXBwb3J0IiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InhzZXJ2ZXJfaTkxNSIgbXNnOiJpOTE1IHhzZXJ2ZXIgc3VwcG9ydCIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4c2VydmVyX2k5NjUiIG1zZzoiaTk2NSB4c2VydmVyIHN1cHBvcnQiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl9mYmRldiIgbXNnOiJmYmRldiB4c2VydmVyIHN1cHBvcnQiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl9tb2Rlc2V0dGluZyIgbXNnOiJtb2Rlc2V0dGluZyB4c2VydmVyIHN1cHBvcnQiIH19CisKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToieHNlcnZlcl9jaG9pY2UiIHByaW86IjUwIiBtc2c6IlBsZWFzZSBzZWxlY3QgYW4geHNlcnZlciBmb3IgdGhpcyBtYWNoaW5lOiIgZGVmYXVsdDoieHNlcnZlcl92ZXNhIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InhzZXJ2ZXJfdmVzYSIgbXNnOiJWRVNBIHhzZXJ2ZXIgc3VwcG9ydCIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4c2VydmVyX2k5MTUiIG1zZzoiaTkxNSB4c2VydmVyIHN1cHBvcnQiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl9pOTY1IiBtc2c6Imk5NjUgeHNlcnZlciBzdXBwb3J0IiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InhzZXJ2ZXJfZmJkZXYiIG1zZzoiZmJkZXYgeHNlcnZlciBzdXBwb3J0IiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InhzZXJ2ZXJfbW9kZXNldHRpbmciIG1zZzoibW9kZXNldHRpbmcgeHNlcnZlciBzdXBwb3J0IiB9fQorCit7eyBpZiB4c2VydmVyID09ICJ5IiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG9fMy4xOSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvXzMuMTQiIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iOiB4c2VydmVyX2Nob2ljZSA9ICJ4c2VydmVyX2k5MTUiIH19CisKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiOiB9fQorWFNFUlZFUiA/PSAiJHtYU0VSVkVSX1g4Nl9CQVNFfSBcCisgICAgICAgICAgICR7WFNFUlZFUl9YODZfRVhUfSBcCit7eyBpZiB4c2VydmVyID09ICJ5IiBhbmQgeHNlcnZlcl9jaG9pY2UgPT0gInhzZXJ2ZXJfdmVzYSI6IH19CisgICAgICAgICAgICR7WFNFUlZFUl9YODZfVkVTQX0gXAore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIHhzZXJ2ZXJfY2hvaWNlID09ICJ4c2VydmVyX2k5MTUiOiB9fQorICAgICAgICAgICAke1hTRVJWRVJfWDg2X0k5MTV9IFwKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCB4c2VydmVyX2Nob2ljZSA9PSAieHNlcnZlcl9pOTY1IjogfX0KKyAgICAgICAgICAgJHtYU0VSVkVSX1g4Nl9JOTY1fSBcCit7eyBpZiB4c2VydmVyID09ICJ5IiBhbmQgeHNlcnZlcl9jaG9pY2UgPT0gInhzZXJ2ZXJfZmJkZXYiOiB9fQorICAgICAgICAgICAke1hTRVJWRVJfWDg2X0ZCREVWfSBcCit7eyBpZiB4c2VydmVyID09ICJ5IiBhbmQgeHNlcnZlcl9jaG9pY2UgPT0gInhzZXJ2ZXJfbW9kZXNldHRpbmciOiB9fQorICAgICAgICAgICAke1hTRVJWRVJfWDg2X01PREVTRVRUSU5HfSBcCit7eyBpZiB4c2VydmVyID09ICJ5IjogfX0KKyAgICAgICAgICAgIgorCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTICs9ICJsaW51eC1maXJtd2FyZSB2ODZkIGVlZS1hY3BpLXNjcmlwdHMiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfcG4tbWF0Y2hib3gtcGFuZWwtMiA9ICIgLS13aXRoLWJhdHRlcnk9YWNwaSIKKworR0xJQkNfQURET05TID0gIm5wdGwiCisKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCB4c2VydmVyX2Nob2ljZSA9PSAieHNlcnZlcl92ZXNhIjogfX0KK0FQUEVORCArPSAidmlkZW89dmVzYWZiIHZnYT0weDMxOCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS5ub2luc3RhbGwgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NDJkMDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUubm9pbnN0YWxsCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWRpcm5hbWUge3s9bWFjaGluZX19CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUveG9yZy5jb25mIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lL3hvcmcuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzlhMGYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lL3hvcmcuY29uZgpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiB4c2VydmVyID09ICJ5IjogfX0gdGhpcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZ18wLjEuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDgzMDAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZ18wLjEuYmJhcHBlbmQKQEAgLTAsMCArMSwyIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiB4c2VydmVyID09ICJ5IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMGQ5MmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy5ub2luc3RhbGwKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZGlybmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iOiB9fSBmaWxlcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE5ZWUzZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MKQEAgLTAsMCArMSwxNiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXByZWVtcHQtcnQuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgcHJlZW1wdC1ydAorZGVmaW5lIEtBUkNIIGkzODYKKworaW5jbHVkZSB7ez1tYXBfcHJlZW1wdF9ydF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCisKKyMgZGVmYXVsdCBwb2xpY3kgZm9yIHByZWVtcHQtcnQga2VybmVscworaW5jbHVkZSBjZmcvdXNiLW1hc3Mtc3RvcmFnZS5zY2MKK2luY2x1ZGUgY2ZnL2Jvb3QtbGl2ZS5zY2MKK2luY2x1ZGUgZmVhdHVyZXMvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLnNjYworaW5jbHVkZSBmZWF0dXJlcy9wcm9maWxpbmcvcHJvZmlsaW5nLnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODIwMTJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKQEAgLTAsMCArMSwxNiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYworZGVmaW5lIEtNQUNISU5FIHt7PW1hY2hpbmV9fQorZGVmaW5lIEtUWVBFIHN0YW5kYXJkCitkZWZpbmUgS0FSQ0ggaTM4NgorCitpbmNsdWRlIHt7PW1hcF9zdGFuZGFyZF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCisKKyMgZGVmYXVsdCBwb2xpY3kgZm9yIHN0YW5kYXJkIGtlcm5lbHMKK2luY2x1ZGUgY2ZnL3VzYi1tYXNzLXN0b3JhZ2Uuc2NjCitpbmNsdWRlIGNmZy9ib290LWxpdmUuc2NjCitpbmNsdWRlIGZlYXR1cmVzL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC5zY2MKK2luY2x1ZGUgZmVhdHVyZXMvcHJvZmlsaW5nL3Byb2ZpbGluZy5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXRpbnkuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNzUxOTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXRpbnkuc2NjCkBAIC0wLDAgKzEsMTAgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS10aW55LnNjYworZGVmaW5lIEtNQUNISU5FIHt7PW1hY2hpbmV9fQorZGVmaW5lIEtUWVBFIHRpbnkKK2RlZmluZSBLQVJDSCBpMzg2CisKK2luY2x1ZGUge3s9bWFwX3Rpbnlfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWNvbmZpZy5jZmcgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWVmZGNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWNvbmZpZy5jZmcKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YmUyNmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzU5ZGFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5jZmcgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjE2OGI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5jZmcKQEAgLTAsMCArMSw1NSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LmNmZworQ09ORklHX1g4Nl8zMj15CitDT05GSUdfTUFUT009eQorQ09ORklHX1BSSU5USz15CisKKyMgQmFzaWMgaGFyZHdhcmUgc3VwcG9ydCBmb3IgdGhlIGJveCAtIG5ldHdvcmssIFVTQiwgUENJLCBzb3VuZAorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0FUQT15CitDT05GSUdfQVRBX0dFTkVSSUM9eQorQ09ORklHX0FUQV9TRkY9eQorQ09ORklHX1BDST15CitDT05GSUdfTU1DPXkKK0NPTkZJR19NTUNfU0RIQ0k9eQorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0I9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19SODE2OT15CitDT05GSUdfUEFUQV9TQ0g9eQorQ09ORklHX01NQ19TREhDSV9QQ0k9eQorQ09ORklHX1VTQl9FSENJX0hDRD15CitDT05GSUdfUENJRVBPUlRCVVM9eQorQ09ORklHX05FVD15CitDT05GSUdfVVNCX1VIQ0lfSENEPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU0c9eQorQ09ORklHX1NPVU5EPXkKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9IREFfSU5URUw9eQorQ09ORklHX1NBVEFfQUhDST15CitDT05GSUdfQUdQPXkKK0NPTkZJR19QTT15CitDT05GSUdfQUNQST15CitDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKK0NPTkZJR19JTlBVVD15CisKKyMgTWFrZSBzdXJlIHRoZXNlIGFyZSBvbiwgb3RoZXJ3aXNlIHRoZSBib290dXAgd29uJ3QgYmUgZnVuCitDT05GSUdfRVhUM19GUz15CitDT05GSUdfVU5JWD15CitDT05GSUdfSU5FVD15CitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1RNUEZTPXkKK0NPTkZJR19QQUNLRVQ9eQorCisjIE5lZWRlZCBmb3IgYm9vdGluZyAoYW5kIHVzaW5nKSBVU0IgbWVtb3J5IHN0aWNrcworQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisKK0NPTkZJR19SRF9HWklQPXkKKworIyBOZWVkZWQgZm9yIGJvb3RpbmcgKGFuZCB1c2luZykgQ0QgaW1hZ2VzCitDT05GSUdfQkxLX0RFVl9TUj15CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMzJmMTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYwpAQCAtMCwwICsxLDIxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uc2NjCitrY29uZiBoYXJkd2FyZSB7ez1tYWNoaW5lfX0uY2ZnCisKK2luY2x1ZGUgZmVhdHVyZXMvaW50ZWwtZTF4eHh4L2ludGVsLWUxMDAuc2NjCitpbmNsdWRlIGZlYXR1cmVzL2ludGVsLWUxeHh4eC9pbnRlbC1lMXh4eHguc2NjCisKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCB4c2VydmVyX2Nob2ljZSA9PSAieHNlcnZlcl9pOTE1IiBvciB4c2VydmVyX2Nob2ljZSA9PSAieHNlcnZlcl9pOTY1IjogfX0KK2luY2x1ZGUgZmVhdHVyZXMvaTkxNS9pOTE1LnNjYworCitpbmNsdWRlIGZlYXR1cmVzL3NlcmlhbC84MjUwLnNjYworaW5jbHVkZSBmZWF0dXJlcy9lcmljc3Nvbi0zZy9mNTUyMWd3LnNjYworCit7eyBpZiB4c2VydmVyID09ICJ5IiBhbmQgeHNlcnZlcl9jaG9pY2UgPT0gInhzZXJ2ZXJfdmVzYSI6IH19CitpbmNsdWRlIGNmZy92ZXNhZmIuc2NjCisKK2luY2x1ZGUgY2ZnL3VzYi1tYXNzLXN0b3JhZ2Uuc2NjCitpbmNsdWRlIGNmZy9ib290LWxpdmUuc2NjCitpbmNsdWRlIGZlYXR1cmVzL3Bvd2VyL2ludGVsLnNjYworCitrY29uZiBoYXJkd2FyZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnCitpbmNsdWRlIHt7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODExZDY5NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbApAQCAtMCwwICsxLDUgQEAKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19Cit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ1c2VfZGVmYXVsdF9rZXJuZWwiIHByaW86IjEwIiBtc2c6IldvdWxkIHlvdSBsaWtlIHRvIHVzZSB0aGUgZGVmYXVsdCAoMy4xOSkga2VybmVsPyAoeS9uKSIgZGVmYXVsdDoieSJ9fQorCit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCB1c2VfZGVmYXVsdF9rZXJuZWwgPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToia2VybmVsX2Nob2ljZSIgZ2VuOiJic3Aua2VybmVsLmtlcm5lbHMiIHByaW86IjEwIiBtc2c6IlBsZWFzZSBjaG9vc2UgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhpcyBCU1A6IiBkZWZhdWx0OiJsaW51eC15b2N0b18zLjE5In19CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhNjIzMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZApAQCAtMCwwICsxLDI2IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiV291bGQgeW91IGxpa2UgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjhkYjAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1ydF8zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXByZWVtcHQtcnQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tcnRfe3s9bWFjaGluZX19ID89ICJmMzU5OTJmODBjODFkYzVmYTFhOTcxNjVkZmQ1Y2JiODQ2NjFmN2NiIgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXJ0X3t7PW1hY2hpbmV9fSA/PSAiMWI1MzRiMmY4YmJlOWI4YTc3MzI2OGNmYTMwYTQ4NTAzNDZmNmY1ZiIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcxY2NiYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRlODJmYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzMuMTkiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmI0OWVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b18zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQvY29tbW9uLXBjIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQvY29tbW9uLXBjIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMmNiNWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzMuMTkiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTkiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL0NPUFlJTkcuTUlUIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL0NPUFlJTkcuTUlUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZGUzNTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvQ09QWUlORy5NSVQKQEAgLTAsMCArMSwxNyBAQAorUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvUkVBRE1FIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDNkZmM0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL1JFQURNRQpAQCAtMCwwICsxLDY0IEBACitUaGlzIFJFQURNRSBmaWxlIGNvbnRhaW5zIGluZm9ybWF0aW9uIG9uIHRoZSBjb250ZW50cyBvZiB0aGUKK3t7PWxheWVyX25hbWV9fSBsYXllci4KKworUGxlYXNlIHNlZSB0aGUgY29ycmVzcG9uZGluZyBzZWN0aW9ucyBiZWxvdyBmb3IgZGV0YWlscy4KKworCitEZXBlbmRlbmNpZXMKKz09PT09PT09PT09PQorCitUaGlzIGxheWVyIGRlcGVuZHMgb246CisKKyAgVVJJOiBnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlCisgIGJyYW5jaDogbWFzdGVyCisKKyAgVVJJOiBnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZQorICBsYXllcnM6IG1ldGEKKyAgYnJhbmNoOiBtYXN0ZXIKKworICBVUkk6IGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3h4eHgKKyAgbGF5ZXJzOiB4eHh4CisgIGJyYW5jaDogbWFzdGVyCisKKworUGF0Y2hlcworPT09PT09PQorCitQbGVhc2Ugc3VibWl0IGFueSBwYXRjaGVzIGFnYWluc3QgdGhlIHt7PWxheWVyX25hbWV9fSBsYXllciB0byB0aGUKK3h4eHggbWFpbGluZyBsaXN0ICh4eHh4QHp6enoub3JnKSBhbmQgY2M6IHRoZSBtYWludGFpbmVyOgorCitNYWludGFpbmVyOiBYWFggWVlZWVlZIDx4eHgueXl5eXl5QHp6enp6LmNvbT4KKworCitUYWJsZSBvZiBDb250ZW50cworPT09PT09PT09PT09PT09PT0KKworICBJLiBBZGRpbmcgdGhlIHt7PWxheWVyX25hbWV9fSBsYXllciB0byB5b3VyIGJ1aWxkCisgSUkuIE1pc2MKKworCitJLiBBZGRpbmcgdGhlIHt7PWxheWVyX25hbWV9fSBsYXllciB0byB5b3VyIGJ1aWxkCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy0tLSByZXBsYWNlIHdpdGggc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIGZvciB0aGUge3s9bGF5ZXJfbmFtZX19IGxheWVyIC0tLQorCitJbiBvcmRlciB0byB1c2UgdGhpcyBsYXllciwgeW91IG5lZWQgdG8gbWFrZSB0aGUgYnVpbGQgc3lzdGVtIGF3YXJlIG9mCitpdC4KKworQXNzdW1pbmcgdGhlIHt7PWxheWVyX25hbWV9fSBsYXllciBleGlzdHMgYXQgdGhlIHRvcC1sZXZlbCBvZiB5b3VyCit5b2N0byBidWlsZCB0cmVlLCB5b3UgY2FuIGFkZCBpdCB0byB0aGUgYnVpbGQgc3lzdGVtIGJ5IGFkZGluZyB0aGUKK2xvY2F0aW9uIG9mIHRoZSB7ez1sYXllcl9uYW1lfX0gbGF5ZXIgdG8gYmJsYXllcnMuY29uZiwgYWxvbmcgd2l0aCBhbnkKK290aGVyIGxheWVycyBuZWVkZWQuIGUuZy46CisKKyAgQkJMQVlFUlMgPz0gIiBcCisgICAgL3BhdGgvdG8veW9jdG8vbWV0YSBcCisgICAgL3BhdGgvdG8veW9jdG8vbWV0YS15b2N0byBcCisgICAgL3BhdGgvdG8veW9jdG8vbWV0YS15b2N0by1ic3AgXAorICAgIC9wYXRoL3RvL3lvY3RvL21ldGEte3s9bGF5ZXJfbmFtZX19IFwKKyAgICAiCisKKworSUkuIE1pc2MKKz09PT09PT09CisKKy0tLSByZXBsYWNlIHdpdGggc3BlY2lmaWMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHt7PWxheWVyX25hbWV9fSBsYXllciAtLS0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9jb25mL2xheWVyLmNvbmYgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvY29uZi9sYXllci5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZmZlMTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvY29uZi9sYXllci5jb25mCkBAIC0wLDAgKzEsMTAgQEAKKyMgV2UgaGF2ZSBhIGNvbmYgYW5kIGNsYXNzZXMgZGlyZWN0b3J5LCBhZGQgdG8gQkJQQVRICitCQlBBVEggLj0gIjoke0xBWUVSRElSfSIKKworIyBXZSBoYXZlIHJlY2lwZXMtKiBkaXJlY3RvcmllcywgYWRkIHRvIEJCRklMRVMKK0JCRklMRVMgKz0gIiR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmIgXAorCSR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmJhcHBlbmQiCisKK0JCRklMRV9DT0xMRUNUSU9OUyArPSAie3s9bGF5ZXJfbmFtZX19IgorQkJGSUxFX1BBVFRFUk5fe3s9bGF5ZXJfbmFtZX19ID0gIl4ke0xBWUVSRElSfS8iCitCQkZJTEVfUFJJT1JJVFlfe3s9bGF5ZXJfbmFtZX19ID0gInt7PWxheWVyX3ByaW9yaXR5fX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvbGF5ZXItcXVlc3Rpb25zLm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9sYXllci1xdWVzdGlvbnMubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYTg5YzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvbGF5ZXItcXVlc3Rpb25zLm5vaW5zdGFsbApAQCAtMCwwICsxLDE0IEBACit7eyBpbnB1dCB0eXBlOiJlZGl0IiBuYW1lOiJsYXllcl9wcmlvcml0eSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGVudGVyIHRoZSBsYXllciBwcmlvcml0eSB5b3UnZCBsaWtlIHRvIHVzZSBmb3IgdGhlIGxheWVyOiIgZGVmYXVsdDoiNiJ9fQorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJjcmVhdGVfZXhhbXBsZV9yZWNpcGUiIHByaW86IjIwIiBtc2c6IldvdWxkIHlvdSBsaWtlIHRvIGhhdmUgYW4gZXhhbXBsZSByZWNpcGUgY3JlYXRlZD8gKHkvbikiIGRlZmF1bHQ6Im4ifX0KKwore3sgaWYgY3JlYXRlX2V4YW1wbGVfcmVjaXBlID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImVkaXQiIG5hbWU6ImV4YW1wbGVfcmVjaXBlX25hbWUiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBlbnRlciB0aGUgbmFtZSB5b3UnZCBsaWtlIHRvIHVzZSBmb3IgeW91ciBleGFtcGxlIHJlY2lwZToiIGRlZmF1bHQ6ImV4YW1wbGUifX0KKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToiY3JlYXRlX2V4YW1wbGVfYmJhcHBlbmQiIHByaW86IjIwIiBtc2c6IldvdWxkIHlvdSBsaWtlIHRvIGhhdmUgYW4gZXhhbXBsZSBiYmFwcGVuZCBmaWxlIGNyZWF0ZWQ/ICh5L24pIiBkZWZhdWx0OiJuIn19CisKK3t7IGlmIGNyZWF0ZV9leGFtcGxlX2JiYXBwZW5kID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImVkaXQiIG5hbWU6ImV4YW1wbGVfYmJhcHBlbmRfbmFtZSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGVudGVyIHRoZSBuYW1lIHlvdSdkIGxpa2UgdG8gdXNlIGZvciB5b3VyIGJiYXBwZW5kIGZpbGU6IiBkZWZhdWx0OiJleGFtcGxlIn19CisKK3t7IGlmIGNyZWF0ZV9leGFtcGxlX2JiYXBwZW5kID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImVkaXQiIG5hbWU6ImV4YW1wbGVfYmJhcHBlbmRfdmVyc2lvbiIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGVudGVyIHRoZSB2ZXJzaW9uIG51bWJlciB5b3UnZCBsaWtlIHRvIHVzZSBmb3IgeW91ciBiYmFwcGVuZCBmaWxlICh0aGlzIHNob3VsZCBtYXRjaCB0aGUgcmVjaXBlIHlvdSdyZSBhcHBlbmRpbmcgdG8pOiIgZGVmYXVsdDoiMC4xIn19CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLWJiYXBwZW5kLm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUtYmJhcHBlbmQubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OTRlNjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLWJiYXBwZW5kLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7IGlmIGNyZWF0ZV9leGFtcGxlX2JiYXBwZW5kID09ICJ5IjogfX0gcmVjaXBlcy1leGFtcGxlLWJiYXBwZW5kCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC12ZXJzaW9uLmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS1iYmFwcGVuZC9leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQtdmVyc2lvbi5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTMxMzMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS1iYmFwcGVuZC9leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQtdmVyc2lvbi5iYmFwcGVuZApAQCAtMCwwICsxLDkgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PWV4YW1wbGVfYmJhcHBlbmRfbmFtZX19X3t7PWV4YW1wbGVfYmJhcHBlbmRfdmVyc2lvbn19LmJiYXBwZW5kCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfS0ke1BWfToiCisKKyMKKyMgVGhpcyAuYmJhcHBlbmQgZG9lc24ndCB5ZXQgZG8gYW55dGhpbmcgLSByZXBsYWNlIHRoaXMgdGV4dCB3aXRoCisjIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGV4YW1wbGVfMC4xLmJiIHJlY2lwZSwgb3Igd2hhdGV2ZXIgcmVjaXBlIGl0IGlzCisjIHRoYXQgeW91IHdhbnQgdG8gbW9kaWZ5IHdpdGggdGhpcyAuYmJhcHBlbmQgKG1ha2Ugc3VyZSB5b3UgY2hhbmdlCisjIHRoZSByZWNpcGUgbmFtZSAoUE4pIGFuZCB2ZXJzaW9uIChQVikgdG8gbWF0Y2gpLgorIwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS1iYmFwcGVuZC9leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQtdmVyc2lvbi5ub2luc3RhbGwgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC12ZXJzaW9uLm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmRmOGE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS1iYmFwcGVuZC9leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQtdmVyc2lvbi5ub2luc3RhbGwKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZGlybmFtZSB7ez1leGFtcGxlX2JiYXBwZW5kX25hbWV9fS17ez1leGFtcGxlX2JiYXBwZW5kX3ZlcnNpb259fQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS1iYmFwcGVuZC9leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQtdmVyc2lvbi9leGFtcGxlLnBhdGNoIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS1iYmFwcGVuZC9leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQtdmVyc2lvbi9leGFtcGxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMDBhMzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC12ZXJzaW9uL2V4YW1wbGUucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorIworIyBUaGlzIGlzIGEgbm9uLWZ1bmN0aW9uYWwgcGxhY2Vob2xkZXIgZmlsZSwgaGVyZSBmb3IgZXhhbXBsZSBwdXJwb3NlcworIyBvbmx5LgorIworIyBJZiB5b3UgaGFkIGEgcGF0Y2ggZm9yIHlvdXIgcmVjaXBlLCB5b3UnZCBwdXQgaXQgaW4gdGhpcyBkaXJlY3RvcnkKKyMgYW5kIHJlZmVyZW5jZSBpdCBmcm9tIHlvdXIgcmVjaXBlJ3MgU1JDX1VSSToKKyMKKyMgIFNSQ19VUkkgKz0gImZpbGU6Ly9leGFtcGxlLnBhdGNoIgorIworIyBOb3RlIHRoYXQgeW91IGNvdWxkIGFsc28gcmVuYW1lIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHBhdGNoCisjIHRvIHJlbW92ZSB0aGUgdmVyc2lvbiBudW1iZXIgb3Igc2ltcGx5IHJlbmFtZSBpdCAnZmlsZXMnLiAgRG9pbmcgc28KKyMgYWxsb3dzIHlvdSB0byB1c2UgdGhlIHNhbWUgZGlyZWN0b3J5IGZvciBtdWx0aXBsZSByZWNpcGVzLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS5ub2luc3RhbGwgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDA2OWIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS5ub2luc3RhbGwKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZGlybmFtZSB7eyBpZiBjcmVhdGVfZXhhbXBsZV9yZWNpcGUgPT0gInkiOiB9fSByZWNpcGVzLWV4YW1wbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUvZXhhbXBsZS9leGFtcGxlLXJlY2lwZS0wLjEuYmIgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlL2V4YW1wbGUvZXhhbXBsZS1yZWNpcGUtMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYmY1OTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlL2V4YW1wbGUvZXhhbXBsZS1yZWNpcGUtMC4xLmJiCkBAIC0wLDAgKzEsMjMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PWV4YW1wbGVfcmVjaXBlX25hbWV9fV8wLjEuYmIKKyMKKyMgVGhpcyBmaWxlIHdhcyBkZXJpdmVkIGZyb20gdGhlICdIZWxsbyBXb3JsZCEnIGV4YW1wbGUgcmVjaXBlIGluIHRoZQorIyBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyMKKworU1VNTUFSWSA9ICJTaW1wbGUgaGVsbG93b3JsZCBhcHBsaWNhdGlvbiIKK1NFQ1RJT04gPSAiZXhhbXBsZXMiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09NTU9OX0xJQ0VOU0VfRElSfS9NSVQ7bWQ1PTA4MzVhZGU2OThlMGJjZjg1MDZlY2RhMmY3YjRmMzAyIgorCitTUkNfVVJJID0gImZpbGU6Ly9oZWxsb3dvcmxkLmMiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9fY29tcGlsZSgpIHsKKwkgICAgICR7Q0N9IGhlbGxvd29ybGQuYyAtbyBoZWxsb3dvcmxkCit9CisKK2RvX2luc3RhbGwoKSB7CisJICAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwkgICAgIGluc3RhbGwgLW0gMDc1NSBoZWxsb3dvcmxkICR7RH0ke2JpbmRpcn0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUvZXhhbXBsZS9leGFtcGxlLXJlY2lwZS0wLjEubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS9leGFtcGxlL2V4YW1wbGUtcmVjaXBlLTAuMS5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMxOWMxOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUvZXhhbXBsZS9leGFtcGxlLXJlY2lwZS0wLjEubm9pbnN0YWxsCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWRpcm5hbWUge3s9ZXhhbXBsZV9yZWNpcGVfbmFtZX19LTAuMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS9leGFtcGxlL2V4YW1wbGUtcmVjaXBlLTAuMS9leGFtcGxlLnBhdGNoIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS9leGFtcGxlL2V4YW1wbGUtcmVjaXBlLTAuMS9leGFtcGxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMDBhMzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlL2V4YW1wbGUvZXhhbXBsZS1yZWNpcGUtMC4xL2V4YW1wbGUucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorIworIyBUaGlzIGlzIGEgbm9uLWZ1bmN0aW9uYWwgcGxhY2Vob2xkZXIgZmlsZSwgaGVyZSBmb3IgZXhhbXBsZSBwdXJwb3NlcworIyBvbmx5LgorIworIyBJZiB5b3UgaGFkIGEgcGF0Y2ggZm9yIHlvdXIgcmVjaXBlLCB5b3UnZCBwdXQgaXQgaW4gdGhpcyBkaXJlY3RvcnkKKyMgYW5kIHJlZmVyZW5jZSBpdCBmcm9tIHlvdXIgcmVjaXBlJ3MgU1JDX1VSSToKKyMKKyMgIFNSQ19VUkkgKz0gImZpbGU6Ly9leGFtcGxlLnBhdGNoIgorIworIyBOb3RlIHRoYXQgeW91IGNvdWxkIGFsc28gcmVuYW1lIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHBhdGNoCisjIHRvIHJlbW92ZSB0aGUgdmVyc2lvbiBudW1iZXIgb3Igc2ltcGx5IHJlbmFtZSBpdCAnZmlsZXMnLiAgRG9pbmcgc28KKyMgYWxsb3dzIHlvdSB0byB1c2UgdGhlIHNhbWUgZGlyZWN0b3J5IGZvciBtdWx0aXBsZSByZWNpcGVzLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS9leGFtcGxlL2V4YW1wbGUtcmVjaXBlLTAuMS9oZWxsb3dvcmxkLmMgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlL2V4YW1wbGUvZXhhbXBsZS1yZWNpcGUtMC4xL2hlbGxvd29ybGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWYyZTQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS9leGFtcGxlL2V4YW1wbGUtcmVjaXBlLTAuMS9oZWxsb3dvcmxkLmMKQEAgLTAsMCArMSw4IEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIHByaW50ZigiSGVsbG8gV29ybGQhXG4iKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvLmdpdGlnbm9yZSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzLy5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMTlkNjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mCkBAIC0wLDAgKzEsMzkgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5jb25mCisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRToge3s9bWFjaGluZX19CisKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3Ige3s9bWFjaGluZX19IHN5c3RlbXMKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMi5pbmMKKworTUFDSElORV9GRUFUVVJFUyA9ICJzY3JlZW4ga2V5Ym9hcmQgcGNpIHVzYmhvc3QgZXh0MiBleHQzIHNlcmlhbCIKKworS0VSTkVMX0lNQUdFVFlQRSA9ICJ2bWxpbnV4IgorS0VSTkVMX0FMVF9JTUFHRVRZUEUgPSAidm1saW51eC5iaW4iCitLRVJORUxfSU1BR0VfU1RSSVBfRVhUUkFfU0VDVElPTlMgID0gIi5jb21tZW50IgorCit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iOiBwcmVmZXJyZWRfa2VybmVsID0gImxpbnV4LXlvY3RvLWN1c3RvbSIgfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWwgPSAibGludXgteW9jdG8tZGV2IiB9fQore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIiBvciBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiIDogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAie3s9cHJlZmVycmVkX2tlcm5lbH19IgorCit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsID0ga2VybmVsX2Nob2ljZS5zcGxpdCgnXycpWzBdIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsX3ZlcnNpb24gPSBrZXJuZWxfY2hvaWNlLnNwbGl0KCdfJylbMV0gfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IH19CitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gInt7PXByZWZlcnJlZF9rZXJuZWx9fSIKK1BSRUZFUlJFRF9WRVJTSU9OX3t7PXByZWZlcnJlZF9rZXJuZWx9fSA/PSAie3s9cHJlZmVycmVkX2tlcm5lbF92ZXJzaW9ufX0lIgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ4c2VydmVyIiBwcmlvOiI1MCIgbXNnOiJEbyB5b3UgbmVlZCBzdXBwb3J0IGZvciBYPyAoeS9uKSIgZGVmYXVsdDoieSIgfX0KK3t7IGlmIHhzZXJ2ZXIgPT0gInkiOiB9fQorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwveHNlcnZlciA/PSAieHNlcnZlci14b3JnIgorWFNFUlZFUiA/PSAieHNlcnZlci14b3JnIFwKKyAgICAgICAgICAgIHhmODYtaW5wdXQtZXZkZXYgXAorICAgICAgICAgICAgeGY4Ni12aWRlby1mYmRldiIKKworU0VSSUFMX0NPTlNPTEUgPSAiMTE1MjAwIHR0eVMwIgorVVNFX1ZUID89ICIwIgorCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTID0gIiBrZXJuZWwtbW9kdWxlcyIKKworSU1BR0VfRlNUWVBFUyA/PSAiamZmczIgdGFyLmJ6MiIKK0pGRlMyX0VSQVNFQkxPQ0sgPSAiMHgxMDAwMCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTBkOTJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMubm9pbnN0YWxsCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWRpcm5hbWUge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0gZmlsZXMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXByZWVtcHQtcnQuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NjE5MGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXByZWVtcHQtcnQuc2NjCkBAIC0wLDAgKzEsMTAgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS1wcmVlbXB0LXJ0LnNjYworZGVmaW5lIEtNQUNISU5FIHt7PW1hY2hpbmV9fQorZGVmaW5lIEtUWVBFIHByZWVtcHQtcnQKK2RlZmluZSBLQVJDSCBtaXBzCisKK2luY2x1ZGUge3s9bWFwX3ByZWVtcHRfcnRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDVkZDg1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKQEAgLTAsMCArMSwxMCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYworZGVmaW5lIEtNQUNISU5FIHt7PW1hY2hpbmV9fQorZGVmaW5lIEtUWVBFIHN0YW5kYXJkCitkZWZpbmUgS0FSQ0ggbWlwcworCitpbmNsdWRlIHt7PW1hcF9zdGFuZGFyZF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXRpbnkuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzFjNzc1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYwpAQCAtMCwwICsxLDEwIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdGlueS5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSB0aW55CitkZWZpbmUgS0FSQ0ggbWlwcworCitpbmNsdWRlIHt7PW1hcF90aW55X2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1jb25maWcuY2ZnIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWNvbmZpZy5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc0ODllNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1jb25maWcuY2ZnCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YmUyNmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2Y3NDdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZTQ3NjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZwpAQCAtMCwwICsxLDIgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5jZmcKK0NPTkZJR19NSVBTPXkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM5ZGMzZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjCkBAIC0wLDAgKzEsOCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LnNjYwora2NvbmYgaGFyZHdhcmUge3s9bWFjaGluZX19LmNmZworCitpbmNsdWRlIGNmZy91c2ItbWFzcy1zdG9yYWdlLnNjYworaW5jbHVkZSBjZmcvZnMvdmZhdC5zY2MKKwora2NvbmYgaGFyZHdhcmUge3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZworaW5jbHVkZSB7ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMWQ2OTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKQEAgLTAsMCArMSw1IEBACit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iOiB9fQore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToidXNlX2RlZmF1bHRfa2VybmVsIiBwcmlvOiIxMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSB0byB1c2UgdGhlIGRlZmF1bHQgKDMuMTkpIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KKwore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQgdXNlX2RlZmF1bHRfa2VybmVsID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Imtlcm5lbF9jaG9pY2UiIGdlbjoiYnNwLmtlcm5lbC5rZXJuZWxzIiBwcmlvOiIxMCIgbXNnOiJQbGVhc2UgY2hvb3NlIHRoZSBrZXJuZWwgdG8gdXNlIGluIHRoaXMgQlNQOiIgZGVmYXVsdDoibGludXgteW9jdG9fMy4xOSJ9fQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYTYyMzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKQEAgLTAsMCArMSwyNiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IldvdWxkIHlvdSBsaWtlIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY4ZGIwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tcnRfMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1wcmVlbXB0LXJ0LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXJ0X3t7PW1hY2hpbmV9fSA/PSAiZjM1OTkyZjgwYzgxZGM1ZmExYTk3MTY1ZGZkNWNiYjg0NjYxZjdjYiIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by1ydF97ez1tYWNoaW5lfX0gPz0gIjFiNTM0YjJmOGJiZTliOGE3NzMyNjhjZmEzMGE0ODUwMzQ2ZjZmNWYiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZTc5ODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV8zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWJhMGFlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfMy4xOSI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xOSIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTFjYzUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b18zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2UxYmI4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b18zLjE5IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xOSIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0Ly5naXRpZ25vcmUgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZmM1ZTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYKQEAgLTAsMCArMSwzOSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LmNvbmYKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiB7ez1tYWNoaW5lfX0KKworI0BERVNDUklQVElPTjogTWFjaGluZSBjb25maWd1cmF0aW9uIGZvciB7ez1tYWNoaW5lfX0gc3lzdGVtcworCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczY0LmluYworCitNQUNISU5FX0ZFQVRVUkVTID0gInBjaSBleHQyIGV4dDMgc2VyaWFsIgorCitLRVJORUxfSU1BR0VUWVBFID0gInZtbGludXgiCitLRVJORUxfQUxUX0lNQUdFVFlQRSA9ICJ2bWxpbnV4LmJpbiIKK0tFUk5FTF9JTUFHRV9TVFJJUF9FWFRSQV9TRUNUSU9OUyAgPSAiLmNvbW1lbnQiCisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSI6IHByZWZlcnJlZF9rZXJuZWwgPSAibGludXgteW9jdG8tY3VzdG9tIiB9fQore3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbCA9ICJsaW51eC15b2N0by1kZXYiIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iIG9yIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiIgOiB9fQorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsfX0iCisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWwgPSBrZXJuZWxfY2hvaWNlLnNwbGl0KCdfJylbMF0gfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbiA9IGtlcm5lbF9jaG9pY2Uuc3BsaXQoJ18nKVsxXSB9fQore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAie3s9cHJlZmVycmVkX2tlcm5lbH19IgorUFJFRkVSUkVEX1ZFUlNJT05fe3s9cHJlZmVycmVkX2tlcm5lbH19ID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsX3ZlcnNpb259fSUiCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InhzZXJ2ZXIiIHByaW86IjUwIiBtc2c6IkRvIHlvdSBuZWVkIHN1cHBvcnQgZm9yIFg/ICh5L24pIiBkZWZhdWx0OiJ5IiB9fQore3sgaWYgeHNlcnZlciA9PSAieSI6IH19CitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID89ICJ4c2VydmVyLXhvcmciCitYU0VSVkVSID89ICJ4c2VydmVyLXhvcmcgXAorICAgICAgICAgICAgeGY4Ni1pbnB1dC1ldmRldiBcCisgICAgICAgICAgICB4Zjg2LXZpZGVvLWZiZGV2IgorCitTRVJJQUxfQ09OU09MRSA9ICIxMTUyMDAgdHR5UzAiCitVU0VfVlQgPz0gIjAiCisKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgPSAiIGtlcm5lbC1tb2R1bGVzIgorCitJTUFHRV9GU1RZUEVTID89ICJqZmZzMiB0YXIuYnoyIgorSkZGUzJfRVJBU0VCTE9DSyA9ICIweDEwMDAwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy5ub2luc3RhbGwgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTBkOTJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy5ub2luc3RhbGwKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZGlybmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iOiB9fSBmaWxlcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXByZWVtcHQtcnQuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXByZWVtcHQtcnQuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NjE5MGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MKQEAgLTAsMCArMSwxMCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXByZWVtcHQtcnQuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgcHJlZW1wdC1ydAorZGVmaW5lIEtBUkNIIG1pcHMKKworaW5jbHVkZSB7ez1tYXBfcHJlZW1wdF9ydF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDVkZDg1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwpAQCAtMCwwICsxLDEwIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgc3RhbmRhcmQKK2RlZmluZSBLQVJDSCBtaXBzCisKK2luY2x1ZGUge3s9bWFwX3N0YW5kYXJkX2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzFjNzc1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXRpbnkuc2NjCkBAIC0wLDAgKzEsMTAgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS10aW55LnNjYworZGVmaW5lIEtNQUNISU5FIHt7PW1hY2hpbmV9fQorZGVmaW5lIEtUWVBFIHRpbnkKK2RlZmluZSBLQVJDSCBtaXBzCisKK2luY2x1ZGUge3s9bWFwX3Rpbnlfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWNvbmZpZy5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjllZmRjYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWNvbmZpZy5jZmcKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWJlMjZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM1OWRhYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNjOTA2YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5jZmcKQEAgLTAsMCArMSw2NiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LmNmZworI1NPQworQ09ORklHX0NBVklVTV9PQ1RFT05fU09DPXkKK0NPTkZJR19DQVZJVU1fQ042M1hYUDE9eQorQ09ORklHX0NBVklVTV9PQ1RFT05fQ1ZNU0VHX1NJWkU9MgorCisjS2VybmVsCitDT05GSUdfU01QPXkKK0NPTkZJR19OUl9DUFVTPTMyCisjRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKK0NPTkZJR19NSVBTMzJfQ09NUEFUPXkKK0NPTkZJR19NSVBTMzJfTzMyPXkKK0NPTkZJR19NSVBTMzJfTjMyPXkKKworCisjUENJCitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfTVNJPXkKKworI0kyQworQ09ORklHX0kyQz15CitDT05GSUdfSTJDX09DVEVPTj15CisKK0NPTkZJR19IV19SQU5ET01fT0NURU9OPXkKKworI1NQSQorQ09ORklHX1NQST15CitDT05GSUdfU1BJX09DVEVPTj15CisKKyNNaXNjCitDT05GSUdfRUVQUk9NX0FUMjQ9eQorQ09ORklHX0VFUFJPTV9BVDI1PXkKK0NPTkZJR19PQ1RFT05fV0RUPXkKKworQ09ORklHX1NUQUdJTkc9eQorCisjRXRoZXJuZXQKK0NPTkZJR19PQ1RFT05fRVRIRVJORVQ9eQorQ09ORklHX09DVEVPTl9NR01UX0VUSEVSTkVUPXkKK0NPTkZJR19NRElPX09DVEVPTj15CisKKyNQSFkKK0NPTkZJR19NQVJWRUxMX1BIWT15CitDT05GSUdfQlJPQURDT01fUEhZPXkKK0NPTkZJR19CQ004N1hYX1BIWT15CisKKworI1VTQgorQ09ORklHX1VTQj15CitDT05GSUdfT0NURU9OX1VTQj15CitDT05GSUdfVVNCX09DVEVPTl9FSENJPXkKK0NPTkZJR19VU0JfT0NURU9OX09IQ0k9eQorQ09ORklHX1VTQl9PQ1RFT04yX0NPTU1PTj15CisKK0NPTkZJR19NVEQ9eQorQ09ORklHX01URF9CTE9DSz15CitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfRFc9eQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzlkYzNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYwpAQCAtMCwwICsxLDggQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5zY2MKK2tjb25mIGhhcmR3YXJlIHt7PW1hY2hpbmV9fS5jZmcKKworaW5jbHVkZSBjZmcvdXNiLW1hc3Mtc3RvcmFnZS5zY2MKK2luY2x1ZGUgY2ZnL2ZzL3ZmYXQuc2NjCisKK2tjb25mIGhhcmR3YXJlIHt7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcKK2luY2x1ZGUge3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA0ZTZjNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCkBAIC0wLDAgKzEsNSBAQAore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0KK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICgzLjE0KSBrZXJuZWw/ICh5L24pIiBkZWZhdWx0OiJ5In19CisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIHVzZV9kZWZhdWx0X2tlcm5lbCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzMuMTQifX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhNjIzMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kCkBAIC0wLDAgKzEsMjYgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19Igore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjhkYjAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXJ0XzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tcHJlZW1wdC1ydC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by1ydF97ez1tYWNoaW5lfX0gPz0gImYzNTk5MmY4MGM4MWRjNWZhMWE5NzE2NWRmZDVjYmI4NDY2MWY3Y2IiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tcnRfe3s9bWFjaGluZX19ID89ICIxYjUzNGIyZjhiYmU5YjhhNzczMjY4Y2ZhMzBhNDg1MDM0NmY2ZjVmIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdlNzk4OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YmEwYWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzMuMTkiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTkiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNmNkZWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2VkZ2Vyb3V0ZXIiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvZWRnZXJvdXRlciIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCitTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gImRiZTViNTJlOTNmZjExNGIyYzBmNWRhNmY2YWY5MWY1MmMxOGYyYjgiCitTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjZlZGRiZjQ3ODc1ZWY0OGRkYzU4NjQ5NTdhN2I2MzM2MzEwMDc4MmIiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzRhZWVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzMuMTkiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9lZGdlcm91dGVyIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2VkZ2Vyb3V0ZXIiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE5IgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjLy5naXRpZ25vcmUgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy8uZ2l0aWdub3JlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTRmN2Y5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZgpAQCAtMCwwICsxLDg3IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uY29uZgorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IHt7PW1hY2hpbmV9fQorCisjQERFU0NSSVBUSU9OOiBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZm9yIHt7PW1hY2hpbmV9fSBzeXN0ZW1zCisKK1RBUkdFVF9GUFUgPSAiIgorCit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJ0dW5lZmlsZSIgcHJpbzoiNDAiIG1zZzoiV2hpY2ggbWFjaGluZSB0dW5pbmcgd291bGQgeW91IGxpa2UgdG8gdXNlPyIgZGVmYXVsdDoidHVuZV9wcGNlMzAwYzMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9wcGM0NzYiIG1zZzoicHBjNDc2IHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfcHBjNjAzZSIgbXNnOiJwcGM2MDNlIHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfcHBjNzQwMCIgbXNnOiJwcGM3NDAwIHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfcHBjZTMwMGMyIiBtc2c6InBwY2UzMDBjMiB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX3BwY2UzMDBjMyIgbXNnOiJwcGNlMzAwYzMgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9wcGNlNTAwIiBtc2c6InBwY2U1MDAgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9wcGNlNTAwbWMiIG1zZzoicHBjZTUwMG1jIHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfcHBjZTUwMHYyIiBtc2c6InBwY2U1MDB2MiB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX3BwY2U1NTAwIiBtc2c6InBwY2U1NTAwIHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfcHBjZTY1MDAiIG1zZzoicHBjZTY1MDAgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9wb3dlcjUiIG1zZzoicG93ZXI1IHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfcG93ZXI2IiBtc2c6InBvd2VyNiB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX3Bvd2VyNyIgbXNnOiJwb3dlcjcgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9wcGM0NzYiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwYzQ3Ni5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX3BwYzYwM2UiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwYzYwM2UuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9wcGM3NDAwIjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGM3NDAwLmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfcHBjZTMwMGMyIjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlMzAwYzIuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9wcGNlMzAwYzMiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2UzMDBjMy5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX3BwY2U1MDAiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1MDAuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9wcGNlNTAwbWMiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1MDBtYy5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX3BwY2U1MDB2MiI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTUwMHYyLmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfcHBjZTU1MDAiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1NTAwLmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfcHBjZTY1MDAiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U2NTAwLmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfcG93ZXI1IjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wb3dlcjUuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9wb3dlcjYiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBvd2VyNi5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX3Bvd2VyNyI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcG93ZXI3LmluYworCitLRVJORUxfSU1BR0VUWVBFID0gInVJbWFnZSIKKworRVhUUkFfSU1BR0VERVBFTkRTICs9ICJ1LWJvb3QiCitVQk9PVF9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJNUEM4MzE1RVJEQl9jb25maWciCisKK1NFUklBTF9DT05TT0xFID0gIjExNTIwMCB0dHlTMCIKKworTUFDSElORV9GRUFUVVJFUyA9ICJrZXlib2FyZCBwY2kgZXh0MiBleHQzIHNlcmlhbCIKKwore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIjogcHJlZmVycmVkX2tlcm5lbCA9ICJsaW51eC15b2N0by1jdXN0b20iIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsID0gImxpbnV4LXlvY3RvLWRldiIgfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSIgb3Iga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IiA6IH19CitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gInt7PXByZWZlcnJlZF9rZXJuZWx9fSIKKwore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbCA9IGtlcm5lbF9jaG9pY2Uuc3BsaXQoJ18nKVswXSB9fQore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbF92ZXJzaW9uID0ga2VybmVsX2Nob2ljZS5zcGxpdCgnXycpWzFdIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiB9fQorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsfX0iCitQUkVGRVJSRURfVkVSU0lPTl97ez1wcmVmZXJyZWRfa2VybmVsfX0gPz0gInt7PXByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbn19JSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToieHNlcnZlciIgcHJpbzoiNTAiIG1zZzoiRG8geW91IG5lZWQgc3VwcG9ydCBmb3IgWD8gKHkvbikiIGRlZmF1bHQ6InkiIH19Cit7eyBpZiB4c2VydmVyID09ICJ5IjogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIgPz0gInhzZXJ2ZXIteG9yZyIKK1hTRVJWRVIgPz0gInhzZXJ2ZXIteG9yZyBcCisgICAgICAgICAgIHhmODYtaW5wdXQtZXZkZXYgXAorICAgICAgICAgICB4Zjg2LXZpZGVvLWZiZGV2IgorCitQUkVGRVJSRURfVkVSU0lPTl91LWJvb3QgPz0gInYyMDE1LjAxJSIKK3t7IGlucHV0IHR5cGU6ImVkaXQiIG5hbWU6InVib290X2VudHJ5cG9pbnQiIHByaW86IjQwIiBtc2c6IlBsZWFzZSBzcGVjaWZ5IGEgdmFsdWUgZm9yIFVCT09UX0VOVFJZUE9JTlQ6IiBkZWZhdWx0OiIweDAwMDAwMDAwIiB9fQorVUJPT1RfRU5UUllQT0lOVCA9ICJ7ez11Ym9vdF9lbnRyeXBvaW50fX0iCisKK3t7IGlucHV0IHR5cGU6ImVkaXQiIG5hbWU6Imtlcm5lbF9kZXZpY2V0cmVlIiBwcmlvOiI0MCIgbXNnOiJQbGVhc2Ugc3BlY2lmeSBhIFthcmNoL3Bvd2VycGMvYm9vdC9kdHMveHh4XSB2YWx1ZSBmb3IgS0VSTkVMX0RFVklDRVRSRUU6IiBkZWZhdWx0OiJtcGM4MzE1ZXJkYi5kdHMiIH19CitLRVJORUxfREVWSUNFVFJFRSA9ICIke1N9L2FyY2gvcG93ZXJwYy9ib290L2R0cy97ez1rZXJuZWxfZGV2aWNldHJlZX19IgorCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTID0gIiBrZXJuZWwtbW9kdWxlcyIKKworSU1BR0VfRlNUWVBFUyA/PSAiamZmczIgdGFyLmJ6MiIKK0pGRlMyX0VSQVNFQkxPQ0sgPSAiMHg0MDAwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMGQ5MmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy5ub2luc3RhbGwKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZGlybmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iOiB9fSBmaWxlcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBjOTI2NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MKQEAgLTAsMCArMSwxMCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXByZWVtcHQtcnQuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgcHJlZW1wdC1ydAorZGVmaW5lIEtBUkNIIHBvd2VycGMKKworaW5jbHVkZSB7ez1tYXBfcHJlZW1wdF9ydF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMWQzNWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwpAQCAtMCwwICsxLDEwIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgc3RhbmRhcmQKK2RlZmluZSBLQVJDSCBwb3dlcnBjCisKK2luY2x1ZGUge3s9bWFwX3N0YW5kYXJkX2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXRpbnkuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZjk0YjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXRpbnkuc2NjCkBAIC0wLDAgKzEsMTAgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS10aW55LnNjYworZGVmaW5lIEtNQUNISU5FIHt7PW1hY2hpbmV9fQorZGVmaW5lIEtUWVBFIHRpbnkKK2RlZmluZSBLQVJDSCBwb3dlcnBjCisKK2luY2x1ZGUge3s9bWFwX3Rpbnlfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWNvbmZpZy5jZmcgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzQ4OWU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWNvbmZpZy5jZmcKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgyNzU5ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdmNzQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5jZmcgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmZlMWZlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5jZmcKQEAgLTAsMCArMSwxNjQgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5jZmcKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXQVJOSU5HCisuCisuIFRoaXMgZmlsZSBpcyBhIGtlcm5lbCBjb25maWd1cmF0aW9uIGZyYWdtZW50LCBhbmQgbm90IGEgZnVsbCBrZXJuZWwKKy4gY29uZmlndXJhdGlvbiBmaWxlLiAgVGhlIGZpbmFsIGtlcm5lbCBjb25maWd1cmF0aW9uIGlzIG1hZGUgdXAgb2YKKy4gYW4gYXNzZW1ibHkgb2YgcHJvY2Vzc2VkIGZyYWdtZW50cywgZWFjaCBvZiB3aGljaCBpcyBkZXNpZ25lZCB0bworLiBjYXB0dXJlIGEgc3BlY2lmaWMgcGFydCBvZiB0aGUgZmluYWwgY29uZmlndXJhdGlvbiAoZS5nLiBwbGF0Zm9ybQorLiBjb25maWd1cmF0aW9uLCBmZWF0dXJlIGNvbmZpZ3VyYXRpb24sIGFuZCBib2FyZCBzcGVjaWZpYyBoYXJkd2FyZQorLiBjb25maWd1cmF0aW9uKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uLCBwbGVhc2UKKy4gY29uc3VsdCB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uLgorLgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KK0NPTkZJR19QUEMzMj15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKK0NPTkZJR19QUENfODN4eD15CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworQ09ORklHX01QQzgzMXhfUkRCPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1BDST15CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworQ09ORklHX01URD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKK0NPTkZJR19NVERfT0ZfUEFSVFM9eQorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTE9DSz15CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworQ09ORklHX01URF9QSFlTTUFQX09GPXkKKworIworIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCitDT05GSUdfTVREX05BTkQ9eQorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCitDT05GSUdfR0lBTkZBUj15CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCitDT05GSUdfOHh4eF9XRFQ9eQorCisjCisjIEkyQyBzdXBwb3J0CisjCitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCitDT05GSUdfSTJDX01QQz15CisKK0NPTkZJR19TRU5TT1JTX0xNNzU9eQorCitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKK0NPTkZJR19FRVBST01fQVQyND15CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKK0NPTkZJR19TUEk9eQorIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1NQSV9NUEM4eHh4PXkKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworQ09ORklHX0hXTU9OPXkKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfU0NTST15CitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TRz15CitDT05GSUdfU0NTSV9MT0dHSU5HPXkKKworQ09ORklHX0FUQT15CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQorQ09ORklHX1NBVEFfRlNMPXkKK0NPTkZJR19BVEFfU0ZGPXkKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQj1tCitDT05GSUdfVVNCX0RFVklDRUZTPXkKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9bQorQ09ORklHX1VTQl9FSENJX0ZTTD15CitDT05GSUdfVVNCX1NUT1JBR0U9bQorCisjCisjIFJlYWwgVGltZSBDbG9jaworIworQ09ORklHX1JUQ19DTEFTUz15CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9EUzEzMDc9eQorCitDT05GSUdfS0dEQl84MjUwPW0KKworQ09ORklHX0NSWVBUT19ERVZfVEFMSVRPUz1tCisKK0NPTkZJR19GU0xfRE1BPXkKKworQ09ORklHX01NQz15CitDT05GSUdfTU1DX1NQST1tCisKK0NPTkZJR19VU0JfRlNMX01QSF9EUl9PRj15CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYWM4YjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYwpAQCAtMCwwICsxLDEwIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uc2NjCitrY29uZiBoYXJkd2FyZSB7ez1tYWNoaW5lfX0uY2ZnCisKK2luY2x1ZGUgY2ZnL3VzYi1tYXNzLXN0b3JhZ2Uuc2NjCitpbmNsdWRlIGNmZy9mcy92ZmF0LnNjYworCitpbmNsdWRlIGNmZy9kbWFlbmdpbmUuc2NjCisKK2tjb25mIGhhcmR3YXJlIHt7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcKK2luY2x1ZGUge3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTFkNjk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCkBAIC0wLDAgKzEsNSBAQAore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0KK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICgzLjE5KSBrZXJuZWw/ICh5L24pIiBkZWZhdWx0OiJ5In19CisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIHVzZV9kZWZhdWx0X2tlcm5lbCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzMuMTkifX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmE2MjMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kCkBAIC0wLDAgKzEsMjYgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19Igore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMjU0NDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXJ0XzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tcHJlZW1wdC1ydC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by1ydF97ez1tYWNoaW5lfX0gPz0gImYzNTk5MmY4MGM4MWRjNWZhMWE5NzE2NWRmZDVjYmI4NDY2MWY3Y2IiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tcnRfe3s9bWFjaGluZX19ID89ICIxYjUzNGIyZjhiYmU5YjhhNzczMjY4Y2ZhMzBhNDg1MDM0NmY2ZjVmIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcxY2NiYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRlODJmYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzMuMTkiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjg4Mzg0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b18zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZDllODUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzMuMTkiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE5IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZiBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdlMWNiZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYKQEAgLTAsMCArMSw3NCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LmNvbmYKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiB7ez1tYWNoaW5lfX0KKworI0BERVNDUklQVElPTjogTWFjaGluZSBjb25maWd1cmF0aW9uIGZvciB7ez1tYWNoaW5lfX0gc3lzdGVtcworCit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iOiBwcmVmZXJyZWRfa2VybmVsID0gImxpbnV4LXlvY3RvLWN1c3RvbSIgfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWwgPSAibGludXgteW9jdG8tZGV2IiB9fQore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIiBvciBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiIDogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAie3s9cHJlZmVycmVkX2tlcm5lbH19IgorCit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsID0ga2VybmVsX2Nob2ljZS5zcGxpdCgnXycpWzBdIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsX3ZlcnNpb24gPSBrZXJuZWxfY2hvaWNlLnNwbGl0KCdfJylbMV0gfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IH19CitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gInt7PXByZWZlcnJlZF9rZXJuZWx9fSIKK1BSRUZFUlJFRF9WRVJTSU9OX3t7PXByZWZlcnJlZF9rZXJuZWx9fSA/PSAie3s9cHJlZmVycmVkX2tlcm5lbF92ZXJzaW9ufX0lIgorCit7eyBpZiBxZW11YXJjaCA9PSAiaTM4NiIgb3IgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19CitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID89ICJ4c2VydmVyLXhvcmciCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbCA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsZXMxID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2xlczIgPz0gIm1lc2EiCisKK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6InFlbXVhcmNoIiBwcmlvOiI1IiBtc2c6IldoaWNoIHFlbXUgYXJjaGl0ZWN0dXJlIHdvdWxkIHlvdSBsaWtlIHRvIHVzZT8iIGRlZmF1bHQ6ImkzODYiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoiaTM4NiIgbXNnOiJpMzg2ICAgICgzMi1iaXQpIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6Ing4Nl82NCIgbXNnOiJ4ODZfNjQgICg2NC1iaXQpIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6ImFybSIgbXNnOiJBUk0gICAgICgzMi1iaXQpIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InBvd2VycGMiIG1zZzoiUG93ZXJQQyAoMzItYml0KSIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJtaXBzIiBtc2c6Ik1JUFMgICAgKDMyLWJpdCkiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoibWlwczY0IiBtc2c6Ik1JUFM2NCAgKDY0LWJpdCkiIH19Cit7eyBpZiBxZW11YXJjaCA9PSAiaTM4NiI6IH19CityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaTU4Ni5pbmMKK3t7IGlmIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYworREVGQVVMVFRVTkUgPz0gImNvcmUyLTY0IgorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmUyLmluYwore3sgaWYgcWVtdWFyY2ggPT0gImFybSI6IH19CityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtOTI2ZWpzLmluYwore3sgaWYgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwYzc0MDAuaW5jCit7eyBpZiBxZW11YXJjaCA9PSAibWlwcyI6IH19CityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMyLmluYwore3sgaWYgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19CityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczY0LmluYworCit7eyBpZiBxZW11YXJjaCA9PSAiaTM4NiIgb3IgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19CitNQUNISU5FX0ZFQVRVUkVTICs9ICJ4ODYiCitLRVJORUxfSU1BR0VUWVBFID0gImJ6SW1hZ2UiCitTRVJJQUxfQ09OU09MRSA9ICIxMTUyMDAgdHR5UzAiCitYU0VSVkVSID0gInhzZXJ2ZXIteG9yZyBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ21lc2EtZHJpdmVyLXN3cmFzdCcsICcnLCBkKX0gXAorICAgICAgICAgICB4Zjg2LWlucHV0LXZtbW91c2UgXAorICAgICAgICAgICB4Zjg2LWlucHV0LWtleWJvYXJkIFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1ldmRldiBcCisgICAgICAgICAgIHhmODYtdmlkZW8tdm13YXJlIgorCit7eyBpZiBxZW11YXJjaCA9PSAiYXJtIjogfX0KK0tFUk5FTF9JTUFHRVRZUEUgPSAiekltYWdlIgorU0VSSUFMX0NPTlNPTEUgPSAiMTE1MjAwIHR0eUFNQTAiCisKK3t7IGlmIHFlbXVhcmNoID09ICJwb3dlcnBjIjogfX0KK0tFUk5FTF9JTUFHRVRZUEUgPSAidm1saW51eCIKK1NFUklBTF9DT05TT0xFID0gIjExNTIwMCB0dHlTMCIKKwore3sgaWYgcWVtdWFyY2ggPT0gIm1pcHMiIG9yIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQorS0VSTkVMX0lNQUdFVFlQRSA9ICJ2bWxpbnV4IgorS0VSTkVMX0FMVF9JTUFHRVRZUEUgPSAidm1saW51eC5iaW4iCitTRVJJQUxfQ09OU09MRSA9ICIxMTUyMDAgdHR5UzAiCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTID0gIiBrZXJuZWwtbW9kdWxlcyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24vbWFjaGluZS5ub2luc3RhbGwgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duL21hY2hpbmUubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NDJkMDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duL21hY2hpbmUubm9pbnN0YWxsCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWRpcm5hbWUge3s9bWFjaGluZX19CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duL21hY2hpbmUvaW50ZXJmYWNlcyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24vbWFjaGluZS9pbnRlcmZhY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2OTY3NzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duL21hY2hpbmUvaW50ZXJmYWNlcwpAQCAtMCwwICsxLDUgQEAKKyMgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgLS0gY29uZmlndXJhdGlvbiBmaWxlIGZvciBpZnVwKDgpLCBpZmRvd24oOCkKKyAKKyMgVGhlIGxvb3BiYWNrIGludGVyZmFjZQorYXV0byBsbworaWZhY2UgbG8gaW5ldCBsb29wYmFjawpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bl8xLjAuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duXzEuMC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmQ5OTFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bl8xLjAuYmJhcHBlbmQKQEAgLTAsMCArMSBAQAorRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lLm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ0MmQwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS5ub2luc3RhbGwKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZGlybmFtZSB7ez1tYWNoaW5lfX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS94b3JnLmNvbmYgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUveG9yZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZGRlNzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUveG9yZy5jb25mCkBAIC0wLDAgKzEsNzcgQEAKKworU2VjdGlvbiAiRmlsZXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZUtleWJvYXJkIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAiL2Rldi9pbnB1dC9ieS1wYXRoL3BsYXRmb3JtLWk4MDQyLXNlcmlvLTAtZXZlbnQta2JkIgorICAgIE9wdGlvbiAgICAgICAgIlhrYlJ1bGVzIiAgICAieG9yZyIKKyAgICBPcHRpb24gICAgICAgICJYa2JNb2RlbCIgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIlhrYkxheW91dCIgICAgInVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJDb25maWd1cmVkIE1vdXNlIgore3sgaWYgcWVtdWFyY2ggPT0gImFybSIgb3IgcWVtdWFyY2ggPT0gInBvd2VycGMiIG9yIHFlbXVhcmNoID09ICJtaXBzIiBvciBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KKyAgICBEcml2ZXIgICAgICAgICJtb3VzZSIKK3t7IGlmIHFlbXVhcmNoID09ICJpMzg2IiBvciBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KKyAgICBEcml2ZXIgICAgICAgICJ2bW1vdXNlIgorCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvbWljZSIKKyAgICBPcHRpb24gICAgICAgICJQcm90b2NvbCIgICAgICAgICJJbVBTLzIiCisgICAgT3B0aW9uICAgICAgICAiWkF4aXNNYXBwaW5nIiAgICAgICAgIjQgNSIKKyAgICBPcHRpb24gICAgICAgICJFbXVsYXRlM0J1dHRvbnMiICAgICJ0cnVlIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJRZW11IFRhYmxldCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAiCisgICAgT3B0aW9uICAgICAgICAiVVNCIiAgICAgICAgICAgIm9uIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJEZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR3JhcGhpY3MgQ29udHJvbGxlciIKK3t7IGlmIHFlbXVhcmNoID09ICJhcm0iIG9yIHFlbXVhcmNoID09ICJwb3dlcnBjIiBvciBxZW11YXJjaCA9PSAibWlwcyIgb3IgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19CisgICAgRHJpdmVyICAgICAgICAiZmJkZXYiCit7eyBpZiBxZW11YXJjaCA9PSAiaTM4NiIgb3IgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19CisgICAgRHJpdmVyICAgICAgICAidm13YXJlIgorCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIk1vbml0b3IiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIE9wdGlvbiAgICAgICAgIkRQTVMiCisgICAgIyAxMDI0eDYwMCA1OS44NSBIeiAoQ1ZUKSBoc3luYzogMzcuMzUga0h6OyBwY2xrOiA0OS4wMCBNSHoKKyAgICBNb2RlbGluZSAiMTAyNHg2MDBfNjAuMDAiICAgNDkuMDAgIDEwMjQgMTA3MiAxMTY4IDEzMTIgIDYwMCA2MDMgNjEzIDYyNCAtaHN5bmMgK3ZzeW5jCisgICAgIyA2NDB4NDgwIEAgNjBIeiAoSW5kdXN0cnkgc3RhbmRhcmQpIGhzeW5jOiAzMS41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDI1LjIgIDY0MCAgNjU2ICA3NTIgIDgwMCAgICA0ODAgIDQ5MCAgNDkyICA1MjUgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDcySHogKFZFU0EpIGhzeW5jOiAzNy45a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjY0ICA3MDQgIDgzMiAgICA0ODAgIDQ4OSAgNDkxICA1MjAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDc1SHogKFZFU0EpIGhzeW5jOiAzNy41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjU2ICA3MjAgIDg0MCAgICA0ODAgIDQ4MSAgNDg0ICA1MDAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDg1SHogKFZFU0EpIGhzeW5jOiA0My4za0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDM2LjAgIDY0MCAgNjk2ICA3NTIgIDgzMiAgICA0ODAgIDQ4MSAgNDg0ICA1MDkgLWhzeW5jIC12c3luYworRW5kU2VjdGlvbgorCitTZWN0aW9uICJTY3JlZW4iCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgRGV2aWNlICAgICAgICAiR3JhcGhpY3MgQ29udHJvbGxlciIKKyAgICBNb25pdG9yICAgICAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIFN1YlNlY3Rpb24gIkRpc3BsYXkiCisgICAgICAgIE1vZGVzICAgICAiNjQweDQ4MCIKKyAgICBFbmRTdWJTZWN0aW9uCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNlcnZlckxheW91dCIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IExheW91dCIKKyAgICBTY3JlZW4gICAgICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBJbnB1dERldmljZSAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICAjIElucHV0RGV2aWNlICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIElucHV0RGV2aWNlICAgICJRRU1VIFRhYmxldCIKKyAgICBPcHRpb24gICAgICAgICAiQWxsb3dFbXB0eUlucHV0IiAibm8iCitFbmRTZWN0aW9uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZDk5MWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYmFwcGVuZApAQCAtMCwwICsxIEBACitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy5ub2luc3RhbGwgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZiNTI4MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19IGZpbGVzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFhZmZiOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MKQEAgLTAsMCArMSwxMCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXByZWVtcHQtcnQuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgcHJlZW1wdC1ydAorZGVmaW5lIEtBUkNIIHt7PXFlbXVhcmNofX0KKworaW5jbHVkZSB7ez1tYXBfcHJlZW1wdF9ydF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYTAzZWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwpAQCAtMCwwICsxLDE5IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgc3RhbmRhcmQKK2RlZmluZSBLQVJDSCB7ez1xZW11YXJjaH19CisKK3t7IGlmIHFlbXVhcmNoID09ICJpMzg2IiBvciBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KK2luY2x1ZGUge3s9bWFwX3N0YW5kYXJkX2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIHFlbXVhcmNoID09ICJhcm0iOiB9fQoraW5jbHVkZSBic3AvYXJtLXZlcnNhdGlsZS05MjZlanMvYXJtLXZlcnNhdGlsZS05MjZlanMtc3RhbmRhcmQKK3t7IGlmIHFlbXVhcmNoID09ICJwb3dlcnBjIjogfX0KK2luY2x1ZGUgYnNwL3FlbXUtcHBjMzIvcWVtdS1wcGMzMi1zdGFuZGFyZAore3sgaWYgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQoraW5jbHVkZSBic3AvbXRpLW1hbHRhMzIvbXRpLW1hbHRhMzItYmUtc3RhbmRhcmQKK3t7IGlmIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQoraW5jbHVkZSBic3AvbXRpLW1hbHRhNjQvbXRpLW1hbHRhNjQtYmUtc3RhbmRhcmQKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXRpbnkuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMDk4ZmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXRpbnkuc2NjCkBAIC0wLDAgKzEsMTAgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS10aW55LnNjYworZGVmaW5lIEtNQUNISU5FIHt7PW1hY2hpbmV9fQorZGVmaW5lIEtUWVBFIHRpbnkKK2RlZmluZSBLQVJDSCB7ez1xZW11YXJjaH19CisKK2luY2x1ZGUge3s9bWFwX3Rpbnlfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWNvbmZpZy5jZmcgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWVmZGNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWNvbmZpZy5jZmcKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4Mjc1OWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNTlkYWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NjA3ODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uY2ZnClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzAxZTA1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MKQEAgLTAsMCArMSw1IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uc2NjCitrY29uZiBoYXJkd2FyZSB7ez1tYWNoaW5lfX0uY2ZnCisKK2tjb25mIGhhcmR3YXJlIHt7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcKK2luY2x1ZGUge3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTFkNjk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCkBAIC0wLDAgKzEsNSBAQAore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0KK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICgzLjE5KSBrZXJuZWw/ICh5L24pIiBkZWZhdWx0OiJ5In19CisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIHVzZV9kZWZhdWx0X2tlcm5lbCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzMuMTkifX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTQ3OWJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kCkBAIC0wLDAgKzEsNTYgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19Igore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gImFybSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHlvdXIgbmV3IEJTUCBicmFuY2ggb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gImFybSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhbiBleGlzdGluZyBtYWNoaW5lIGJyYW5jaCB0byB1c2UgZm9yIHRoaXMgQlNQOiIgZGVmYXVsdDoic3RhbmRhcmQvYXJtLXZlcnNhdGlsZS05MjZlanMiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoicG93ZXJwYyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJwb3dlcnBjIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6InBvd2VycGMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3FlbXVwcGMiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAiaTM4NiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQvY29tbW9uLXBjIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2NvbW1vbi1wYyIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJpMzg2IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYyIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9jb21tb24tcGMiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJ4ODZfNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYy02NCIgIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvY29tbW9uLXBjLTY0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Ing4Nl82NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQvY29tbW9uLXBjLTY0IiAgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9jb21tb24tcGMtNjQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJtaXBzIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwcyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvbXRpLW1hbHRhMzIiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHM2NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvbXRpLW1hbHRhNjQiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNWUxYTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsNjIgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXJ0XzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImFybSIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiYXJtIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6ImFybSIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoicG93ZXJwYyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvcWVtdXBwYyIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJpMzg2IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJpMzg2IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJtaXBzIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJtaXBzIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwczY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwczY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tcHJlZW1wdC1ydC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by1ydF97ez1tYWNoaW5lfX0gPz0gImYzNTk5MmY4MGM4MWRjNWZhMWE5NzE2NWRmZDVjYmI4NDY2MWY3Y2IiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tcnRfe3s9bWFjaGluZX19ID89ICIxYjUzNGIyZjhiYmU5YjhhNzczMjY4Y2ZhMzBhNDg1MDM0NmY2ZjVmIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODc5Y2UyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsNjIgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19Igore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gImFybSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiYXJtIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiYXJtIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJwb3dlcnBjIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJwb3dlcnBjIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6InBvd2VycGMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gImkzODYiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gImkzODYiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2NvbW1vbi1wYyIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Ing4Nl82NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Ing4Nl82NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAibWlwcyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwcyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAibWlwcyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHM2NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHM2NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjAxNDNjNmViYjRhMmQ2M2IyNDFkZjVmNjA4YjE5ZjQ4M2Y3ZWI5ZTAiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjhmNTViZWUyNDAzMTc2YTUwY2MwZGQ0MTgxMWFhNjBmY2YwNzI0M2MiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZWY0YmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmJhcHBlbmQKQEAgLTAsMCArMSw2MiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV8zLjE5IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAiYXJtIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJhcm0iIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gImFybSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJhcm0iIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6InBvd2VycGMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoicG93ZXJwYyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAiaTM4NiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiaTM4NiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvY29tbW9uLXBjIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJtaXBzIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJtaXBzIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwczY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwczY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiMDE0M2M2ZWJiNGEyZDYzYjI0MWRmNWY2MDhiMTlmNDgzZjdlYjllMCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiOGY1NWJlZTI0MDMxNzZhNTBjYzBkZDQxODExYWE2MGZjZjA3MjQzYyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjYwMTljCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDYyIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b18zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAiYXJtIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgeW91ciBuZXcgQlNQIGJyYW5jaCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiYXJtIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGFuIGV4aXN0aW5nIG1hY2hpbmUgYnJhbmNoIHRvIHVzZSBmb3IgdGhpcyBCU1A6IiBkZWZhdWx0OiJzdGFuZGFyZC9hcm0tdmVyc2F0aWxlLTkyNmVqcyIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJwb3dlcnBjIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoicG93ZXJwYyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcWVtdXBwYyIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJpMzg2IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvY29tbW9uLXBjIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gImkzODYiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQvY29tbW9uLXBjIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2NvbW1vbi1wYyIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Ing4Nl82NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQvY29tbW9uLXBjLTY0IiAgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9jb21tb24tcGMtNjQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMtNjQiICBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAibWlwcyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9tdGktbWFsdGEzMiIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHM2NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwczY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9tdGktbWFsdGE2NCIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IldvdWxkIHlvdSBsaWtlIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIwMTQzYzZlYmI0YTJkNjNiMjQxZGY1ZjYwOGIxOWY0ODNmN2ViOWUwIgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiOGY1NWJlZTI0MDMxNzZhNTBjYzBkZDQxODExYWE2MGZjZjA3MjQzYyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDc5OGI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZApAQCAtMCwwICsxLDYyIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b18zLjE5IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAiYXJtIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgeW91ciBuZXcgQlNQIGJyYW5jaCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiYXJtIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGFuIGV4aXN0aW5nIG1hY2hpbmUgYnJhbmNoIHRvIHVzZSBmb3IgdGhpcyBCU1A6IiBkZWZhdWx0OiJzdGFuZGFyZC9hcm0tdmVyc2F0aWxlLTkyNmVqcyIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJwb3dlcnBjIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoicG93ZXJwYyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcWVtdXBwYyIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJpMzg2IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvY29tbW9uLXBjIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gImkzODYiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQvY29tbW9uLXBjIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2NvbW1vbi1wYyIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Ing4Nl82NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQvY29tbW9uLXBjLTY0IiAgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9jb21tb24tcGMtNjQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMtNjQiICBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwcyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvbXRpLW1hbHRhMzIiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHM2NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvbXRpLW1hbHRhNjQiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAibWlwcyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwcyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHM2NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IldvdWxkIHlvdSBsaWtlIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIwMTQzYzZlYmI0YTJkNjNiMjQxZGY1ZjYwOGIxOWY0ODNmN2ViOWUwIgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiOGY1NWJlZTI0MDMxNzZhNTBjYzBkZDQxODExYWE2MGZjZjA3MjQzYyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0Ly5naXRpZ25vcmUgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YjgyNTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYKQEAgLTAsMCArMSw2NSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LmNvbmYKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiB7ez1tYWNoaW5lfX0KKworI0BERVNDUklQVElPTjogTWFjaGluZSBjb25maWd1cmF0aW9uIGZvciB7ez1tYWNoaW5lfX0gc3lzdGVtcworCit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iOiBwcmVmZXJyZWRfa2VybmVsID0gImxpbnV4LXlvY3RvLWN1c3RvbSIgfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWwgPSAibGludXgteW9jdG8tZGV2IiB9fQore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIiBvciBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiIDogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAie3s9cHJlZmVycmVkX2tlcm5lbH19IgorCit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsID0ga2VybmVsX2Nob2ljZS5zcGxpdCgnXycpWzBdIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsX3ZlcnNpb24gPSBrZXJuZWxfY2hvaWNlLnNwbGl0KCdfJylbMV0gfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IH19CitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gInt7PXByZWZlcnJlZF9rZXJuZWx9fSIKK1BSRUZFUlJFRF9WRVJTSU9OX3t7PXByZWZlcnJlZF9rZXJuZWx9fSA/PSAie3s9cHJlZmVycmVkX2tlcm5lbF92ZXJzaW9ufX0lIgorCit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJ0dW5lZmlsZSIgcHJpbzoiNDAiIG1zZzoiV2hpY2ggbWFjaGluZSB0dW5pbmcgd291bGQgeW91IGxpa2UgdG8gdXNlPyIgZGVmYXVsdDoidHVuZV9jb3JlMiIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX2NvcmUyIiBtc2c6IkNvcmUyIHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfY29yZWk3IiBtc2c6IkNvcmVpNyB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2NvcmUyIjogfX0KK0RFRkFVTFRUVU5FID89ICJjb3JlMi02NCIKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlMi5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2NvcmVpNyI6IH19CitERUZBVUxUVFVORSA/PSAiY29yZWk3LTY0IgorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmVpNy5pbmMKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS94ODYtYmFzZS5pbmMKKworTUFDSElORV9GRUFUVVJFUyArPSAid2lmaSBlZmkgcGNiaW9zIgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ4c2VydmVyIiBwcmlvOiI1MCIgbXNnOiJEbyB5b3UgbmVlZCBzdXBwb3J0IGZvciBYPyAoeS9uKSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgeHNlcnZlciA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJ4c2VydmVyX2Nob2ljZSIgcHJpbzoiNTAiIG1zZzoiUGxlYXNlIHNlbGVjdCBhbiB4c2VydmVyIGZvciB0aGlzIG1hY2hpbmU6IiBkZWZhdWx0OiJ4c2VydmVyX2k5MTUiIH19CisKK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4c2VydmVyX3Zlc2EiIG1zZzoiVkVTQSB4c2VydmVyIHN1cHBvcnQiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl9pOTE1IiBtc2c6Imk5MTUgeHNlcnZlciBzdXBwb3J0IiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InhzZXJ2ZXJfaTk2NSIgbXNnOiJpOTY1IHhzZXJ2ZXIgc3VwcG9ydCIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4c2VydmVyX2ZiZGV2IiBtc2c6ImZiZGV2IHhzZXJ2ZXIgc3VwcG9ydCIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4c2VydmVyX21vZGVzZXR0aW5nIiBtc2c6Im1vZGVzZXR0aW5nIHhzZXJ2ZXIgc3VwcG9ydCIgfX0KK3t7IGlmIHhzZXJ2ZXIgPT0gInkiOiB9fQorWFNFUlZFUiA/PSAiJHtYU0VSVkVSX1g4Nl9CQVNFfSBcCisgICAgICAgICAgICR7WFNFUlZFUl9YODZfRVhUfSBcCit7eyBpZiB4c2VydmVyID09ICJ5IiBhbmQgeHNlcnZlcl9jaG9pY2UgPT0gInhzZXJ2ZXJfdmVzYSI6IH19CisgICAgICAgICAgICR7WFNFUlZFUl9YODZfVkVTQX0gXAore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIHhzZXJ2ZXJfY2hvaWNlID09ICJ4c2VydmVyX2k5MTUiOiB9fQorICAgICAgICAgICAke1hTRVJWRVJfWDg2X0k5MTV9IFwKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCB4c2VydmVyX2Nob2ljZSA9PSAieHNlcnZlcl9pOTY1IjogfX0KKyAgICAgICAgICAgJHtYU0VSVkVSX1g4Nl9JOTY1fSBcCit7eyBpZiB4c2VydmVyID09ICJ5IiBhbmQgeHNlcnZlcl9jaG9pY2UgPT0gInhzZXJ2ZXJfZmJkZXYiOiB9fQorICAgICAgICAgICAke1hTRVJWRVJfWDg2X0ZCREVWfSBcCit7eyBpZiB4c2VydmVyID09ICJ5IiBhbmQgeHNlcnZlcl9jaG9pY2UgPT0gInhzZXJ2ZXJfbW9kZXNldHRpbmciOiB9fQorICAgICAgICAgICAke1hTRVJWRVJfWDg2X01PREVTRVRUSU5HfSBcCit7eyBpZiB4c2VydmVyID09ICJ5IjogfX0KKyAgICAgICAgICAgIgorCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTICs9ICJsaW51eC1maXJtd2FyZSB2ODZkIGVlZS1hY3BpLXNjcmlwdHMiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfcG4tbWF0Y2hib3gtcGFuZWwtMiA9ICIgLS13aXRoLWJhdHRlcnk9YWNwaSIKKworR0xJQkNfQURET05TID0gIm5wdGwiCisKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCB4c2VydmVyX2Nob2ljZSA9PSAieHNlcnZlcl92ZXNhIjogfX0KK0FQUEVORCArPSAidmlkZW89dmVzYWZiIHZnYT0weDMxOCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lLm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lLm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDQyZDAyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUubm9pbnN0YWxsCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWRpcm5hbWUge3s9bWFjaGluZX19CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS94b3JnLmNvbmYgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS94b3JnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM5YTBmMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lL3hvcmcuY29uZgpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiB4c2VydmVyID09ICJ5IjogfX0gdGhpcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZ18wLjEuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA4MzAwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZ18wLjEuYmJhcHBlbmQKQEAgLTAsMCArMSwyIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiB4c2VydmVyID09ICJ5IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy5ub2luc3RhbGwgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTBkOTJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy5ub2luc3RhbGwKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZGlybmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iOiB9fSBmaWxlcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXByZWVtcHQtcnQuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXByZWVtcHQtcnQuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNTMyMGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MKQEAgLTAsMCArMSwxNiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXByZWVtcHQtcnQuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgcHJlZW1wdC1ydAorZGVmaW5lIEtBUkNIIHg4Nl82NAorCitpbmNsdWRlIHt7PW1hcF9wcmVlbXB0X3J0X2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKKworIyBkZWZhdWx0IHBvbGljeSBmb3IgcHJlZW1wdC1ydCBrZXJuZWxzCitpbmNsdWRlIGNmZy91c2ItbWFzcy1zdG9yYWdlLnNjYworaW5jbHVkZSBjZmcvYm9vdC1saXZlLnNjYworaW5jbHVkZSBmZWF0dXJlcy9sYXRlbmN5dG9wL2xhdGVuY3l0b3Auc2NjCitpbmNsdWRlIGZlYXR1cmVzL3Byb2ZpbGluZy9wcm9maWxpbmcuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjlmOTY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwpAQCAtMCwwICsxLDE2IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgc3RhbmRhcmQKK2RlZmluZSBLQVJDSCB4ODZfNjQKKworaW5jbHVkZSB7ez1tYXBfc3RhbmRhcmRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYworCisjIGRlZmF1bHQgcG9saWN5IGZvciBzdGFuZGFyZCBrZXJuZWxzCitpbmNsdWRlIGNmZy91c2ItbWFzcy1zdG9yYWdlLnNjYworaW5jbHVkZSBjZmcvYm9vdC1saXZlLnNjYworaW5jbHVkZSBmZWF0dXJlcy9sYXRlbmN5dG9wL2xhdGVuY3l0b3Auc2NjCitpbmNsdWRlIGZlYXR1cmVzL3Byb2ZpbGluZy9wcm9maWxpbmcuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIyMTQzMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYwpAQCAtMCwwICsxLDEwIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdGlueS5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSB0aW55CitkZWZpbmUgS0FSQ0ggeDg2XzY0CisKK2luY2x1ZGUge3s9bWFwX3Rpbnlfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWNvbmZpZy5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc0ODllNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWNvbmZpZy5jZmcKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4Mjc1OWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3Zjc0N2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI5MGRkZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5jZmcKQEAgLTAsMCArMSw0OCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LmNmZworQ09ORklHX1BSSU5USz15CisKKyMgQmFzaWMgaGFyZHdhcmUgc3VwcG9ydCBmb3IgdGhlIGJveCAtIG5ldHdvcmssIFVTQiwgUENJLCBzb3VuZCAgICAgICAgICAgICAgICAgICAgIAorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0FUQT15CitDT05GSUdfQVRBX0dFTkVSSUM9eQorQ09ORklHX0FUQV9TRkY9eQorQ09ORklHX1BDST15CitDT05GSUdfTU1DPXkKK0NPTkZJR19NTUNfU0RIQ0k9eQorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0I9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19SODE2OT15CitDT05GSUdfUEFUQV9TQ0g9eQorQ09ORklHX01NQ19TREhDSV9QQ0k9eQorQ09ORklHX1VTQl9FSENJX0hDRD15CitDT05GSUdfUENJRVBPUlRCVVM9eQorQ09ORklHX05FVD15CitDT05GSUdfVVNCX1VIQ0lfSENEPXkKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NHPXkKK0NPTkZJR19TT1VORD15CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfSERBX0lOVEVMPXkKKworIyBNYWtlIHN1cmUgdGhlc2UgYXJlIG9uLCBvdGhlcndpc2UgdGhlIGJvb3R1cCB3b24ndCBiZSBmdW4gICAgICAgICAgICAgICAgICAgICAgICAgCitDT05GSUdfRVhUM19GUz15CitDT05GSUdfVU5JWD15CitDT05GSUdfSU5FVD15CitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1RNUEZTPXkKK0NPTkZJR19QQUNLRVQ9eQorCitDT05GSUdfSTJDPXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK0NPTkZJR19BR1A9eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorQ09ORklHX1BNPXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitDT05GSUdfQUNQST15ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK0NPTkZJR19JTlBVVD15ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjIE5lZWRlZCBmb3IgYm9vdGluZyAoYW5kIHVzaW5nKSBVU0IgbWVtb3J5IHN0aWNrcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK0NPTkZJR19CTEtfREVWX0xPT1A9eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitDT05GSUdfTkxTX0lTTzg4NTlfMT15ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorQ09ORklHX1JEX0daSVA9eQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI3YzI5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MKQEAgLTAsMCArMSwxNCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LnNjYwora2NvbmYgaGFyZHdhcmUge3s9bWFjaGluZX19LmNmZworCitpbmNsdWRlIGZlYXR1cmVzL3NlcmlhbC84MjUwLnNjYwore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIHhzZXJ2ZXJfY2hvaWNlID09ICJ4c2VydmVyX3Zlc2EiOiB9fQoraW5jbHVkZSBjZmcvdmVzYWZiLnNjYwore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIHhzZXJ2ZXJfY2hvaWNlID09ICJ4c2VydmVyX2k5MTUiIG9yIHhzZXJ2ZXJfY2hvaWNlID09ICJ4c2VydmVyX2k5NjUiOiB9fQoraW5jbHVkZSBmZWF0dXJlcy9pOTE1L2k5MTUuc2NjCisKK2luY2x1ZGUgY2ZnL3VzYi1tYXNzLXN0b3JhZ2Uuc2NjCitpbmNsdWRlIGZlYXR1cmVzL3Bvd2VyL2ludGVsLnNjYworCitrY29uZiBoYXJkd2FyZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnCitpbmNsdWRlIHt7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMWQ2OTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbApAQCAtMCwwICsxLDUgQEAKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19Cit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ1c2VfZGVmYXVsdF9rZXJuZWwiIHByaW86IjEwIiBtc2c6IldvdWxkIHlvdSBsaWtlIHRvIHVzZSB0aGUgZGVmYXVsdCAoMy4xOSkga2VybmVsPyAoeS9uKSIgZGVmYXVsdDoieSJ9fQorCit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCB1c2VfZGVmYXVsdF9rZXJuZWwgPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToia2VybmVsX2Nob2ljZSIgZ2VuOiJic3Aua2VybmVsLmtlcm5lbHMiIHByaW86IjEwIiBtc2c6IlBsZWFzZSBjaG9vc2UgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhpcyBCU1A6IiBkZWZhdWx0OiJsaW51eC15b2N0b18zLjE5In19CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYTYyMzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZApAQCAtMCwwICsxLDI2IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiV291bGQgeW91IGxpa2UgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EyNTQ0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1ydF8zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXByZWVtcHQtcnQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tcnRfe3s9bWFjaGluZX19ID89ICJmMzU5OTJmODBjODFkYzVmYTFhOTcxNjVkZmQ1Y2JiODQ2NjFmN2NiIgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXJ0X3t7PW1hY2hpbmV9fSA/PSAiMWI1MzRiMmY4YmJlOWI4YTc3MzI2OGNmYTMwYTQ4NTAzNDZmNmY1ZiIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzFjY2JjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV8zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGU4MmZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV8zLjE5IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE5IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMGI0OTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYy02NCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9jb21tb24tcGMtNjQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMtNjQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvY29tbW9uLXBjLTY0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYTYzYzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fMy4xOSI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYy02NCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9jb21tb24tcGMtNjQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMtNjQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvY29tbW9uLXBjLTY0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE5IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3AvdGFncy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3RhZ3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcxOTQyNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3RhZ3MucHkKQEAgLTAsMCArMSw0OSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgcGxhY2UgdG8gZGVmaW5lIGNvbW1vbiBjb25zdGFudHMgZm9yIHRoZQorIyBZb2N0byBCU1AgVG9vbHMuCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gaW50ZWwuY29tPgorIworCitPUEVOX1RBRyA9ICAgICAie3siCitDTE9TRV9UQUcgPSAgICAifX0iCitBU1NJR05fVEFHID0gICAie3s9IgorSU5QVVRfVEFHID0gICAgImlucHV0IgorSUZfVEFHID0gICAgICAgImlmIgorRklMRU5BTUVfVEFHID0gInlvY3RvLWJzcC1maWxlbmFtZSIKK0RJUk5BTUVfVEFHID0gICJ5b2N0by1ic3AtZGlybmFtZSIKKworSU5ERU5UX1NUUiA9ICAiICAgICIKKworQkxBTktMSU5FX1NUUiA9ICJvZi53cml0ZShcIlxcblwiKSIKK05PUk1BTF9TVEFSVCA9ICAib2Yud3JpdGUiCitPUEVOX1NUQVJUID0gICAgImN1cnJlbnRfZmlsZSA9IgorCitJTlBVVF9UWVBFX1BST1BFUlRZID0gInR5cGUiCisKK1NSQ19VUklfRklMRSA9ICJmaWxlOi8vIgorCitHSVRfQ0hFQ0tfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLWRldi5naXQiCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvX19pbml0X18ucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA0ZDNlNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9fX2luaXRfXy5weQpAQCAtMCwwICsxLDEzOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgRGV2ZWxvcG1lbnQgdG9vbCAtIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBwbHVnaW5zCisjCisjIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyIiIkRldnRvb2wgcGx1Z2lucyBtb2R1bGUiIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IGxvZ2dpbmcKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2RldnRvb2wnKQorCisKK2NsYXNzIERldnRvb2xFcnJvcihFeGNlcHRpb24pOgorICAgICIiIkV4Y2VwdGlvbiBmb3IgaGFuZGxpbmcgZGV2dG9vbCBlcnJvcnMiIiIKKyAgICBwYXNzCisKKworZGVmIGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQoaW5pdF9wYXRoLCBidWlsZGRpciwgY21kLCB3YXRjaD1GYWxzZSwgKipvcHRpb25zKToKKyAgICAiIiJSdW4gYSBwcm9ncmFtIGluIGJpdGJha2UgYnVpbGQgY29udGV4dCIiIgorICAgIGltcG9ydCBiYgorICAgIGlmIG5vdCAnY3dkJyBpbiBvcHRpb25zOgorICAgICAgICBvcHRpb25zWyJjd2QiXSA9IGJ1aWxkZGlyCisgICAgaWYgaW5pdF9wYXRoOgorICAgICAgICAjIEFzIHRoZSBPRSBpbml0IHNjcmlwdCBtYWtlcyB1c2Ugb2YgQkFTSF9TT1VSQ0UgdG8gZGV0ZXJtaW5lIE9FUk9PVCwKKyAgICAgICAgIyBhbmQgY2FuJ3QgZGV0ZXJtaW5lIGl0IHdoZW4gcnVubmluZyB1bmRlciBkYXNoLCB3ZSBuZWVkIHRvIHNldAorICAgICAgICAjIHRoZSBleGVjdXRhYmxlIHRvIGJhc2ggdG8gY29ycmVjdGx5IHNldCB0aGluZ3MgdXAKKyAgICAgICAgaWYgbm90ICdleGVjdXRhYmxlJyBpbiBvcHRpb25zOgorICAgICAgICAgICAgb3B0aW9uc1snZXhlY3V0YWJsZSddID0gJ2Jhc2gnCisgICAgICAgIGxvZ2dlci5kZWJ1ZygnRXhlY3V0aW5nIGNvbW1hbmQ6ICIlcyIgdXNpbmcgaW5pdCBwYXRoICVzJyAlIChjbWQsIGluaXRfcGF0aCkpCisgICAgICAgIGluaXRfcHJlZml4ID0gJy4gJXMgJXMgPiAvZGV2L251bGwgJiYgJyAlIChpbml0X3BhdGgsIGJ1aWxkZGlyKQorICAgIGVsc2U6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygnRXhlY3V0aW5nIGNvbW1hbmQgIiVzIicgJSBjbWQpCisgICAgICAgIGluaXRfcHJlZml4ID0gJycKKyAgICBpZiB3YXRjaDoKKyAgICAgICAgaWYgc3lzLnN0ZG91dC5pc2F0dHkoKToKKyAgICAgICAgICAgICMgRm9vbCBiaXRiYWtlIGludG8gdGhpbmtpbmcgaXQncyBvdXRwdXR0aW5nIHRvIGEgdGVybWluYWwgKGJlY2F1c2UgaXQgaXMsIGluZGlyZWN0bHkpCisgICAgICAgICAgICBjbWQgPSAnc2NyaXB0IC1lIC1xIC1jICIlcyIgL2Rldi9udWxsJyAlIGNtZAorICAgICAgICByZXR1cm4gZXhlY193YXRjaCgnJXMlcycgJSAoaW5pdF9wcmVmaXgsIGNtZCksICoqb3B0aW9ucykKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gYmIucHJvY2Vzcy5ydW4oJyVzJXMnICUgKGluaXRfcHJlZml4LCBjbWQpLCAqKm9wdGlvbnMpCisKK2RlZiBleGVjX3dhdGNoKGNtZCwgKipvcHRpb25zKToKKyAgICAiIiJSdW4gcHJvZ3JhbSB3aXRoIHN0ZG91dCBzaG93biBvbiBzeXMuc3Rkb3V0IiIiCisgICAgaW1wb3J0IGJiCisgICAgaWYgaXNpbnN0YW5jZShjbWQsIGJhc2VzdHJpbmcpIGFuZCBub3QgInNoZWxsIiBpbiBvcHRpb25zOgorICAgICAgICBvcHRpb25zWyJzaGVsbCJdID0gVHJ1ZQorCisgICAgcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oCisgICAgICAgIGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCAqKm9wdGlvbnMKKyAgICApCisKKyAgICBidWYgPSAnJworICAgIHdoaWxlIFRydWU6CisgICAgICAgIG91dCA9IHByb2Nlc3Muc3Rkb3V0LnJlYWQoMSkKKyAgICAgICAgaWYgb3V0OgorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShvdXQpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgIGJ1ZiArPSBvdXQKKyAgICAgICAgZWxpZiBvdXQgPT0gJycgYW5kIHByb2Nlc3MucG9sbCgpICE9IE5vbmU6CisgICAgICAgICAgICBicmVhaworCisgICAgaWYgcHJvY2Vzcy5yZXR1cm5jb2RlICE9IDA6CisgICAgICAgIHJhaXNlIGJiLnByb2Nlc3MuRXhlY3V0aW9uRXJyb3IoY21kLCBwcm9jZXNzLnJldHVybmNvZGUsIGJ1ZiwgTm9uZSkKKworICAgIHJldHVybiBidWYsIE5vbmUKKworZGVmIGV4ZWNfZmFrZXJvb3QoZCwgY21kLCAqKmt3YXJncyk6CisgICAgIiIiUnVuIGEgY29tbWFuZCB1bmRlciBmYWtlcm9vdCAocHNldWRvLCBpbiBmYWN0KSBzbyB0aGF0IGl0IHBpY2tzIHVwIHRoZSBhcHByb3ByaWF0ZSBmaWxlIHBlcm1pc3Npb25zIiIiCisgICAgIyBHcmFiIHRoZSBjb21tYW5kIGFuZCBjaGVjayBpdCBhY3R1YWxseSBleGlzdHMKKyAgICBmYWtlcm9vdGNtZCA9IGQuZ2V0VmFyKCdGQUtFUk9PVENNRCcsIFRydWUpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZha2Vyb290Y21kKToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCdwc2V1ZG8gZXhlY3V0YWJsZSAlcyBjb3VsZCBub3QgYmUgZm91bmQgLSBoYXZlIHlvdSBydW4gYSBidWlsZCB5ZXQ/IHBzZXVkby1uYXRpdmUgc2hvdWxkIGluc3RhbGwgdGhpcyBhbmQgaWYgeW91IGhhdmUgcnVuIGFueSBidWlsZCB0aGVuIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBidWlsdCcpCisgICAgICAgIHJldHVybiAyCisgICAgIyBTZXQgdXAgdGhlIGFwcHJvcHJpYXRlIGVudmlyb25tZW50CisgICAgbmV3ZW52ID0gZGljdChvcy5lbnZpcm9uKQorICAgIGZha2Vyb290ZW52ID0gZC5nZXRWYXIoJ0ZBS0VST09URU5WJywgVHJ1ZSkKKyAgICBmb3IgdmFydmFsdWUgaW4gZmFrZXJvb3RlbnYuc3BsaXQoKToKKyAgICAgICAgaWYgJz0nIGluIHZhcnZhbHVlOgorICAgICAgICAgICAgc3BsaXR2YWwgPSB2YXJ2YWx1ZS5zcGxpdCgnPScsIDEpCisgICAgICAgICAgICBuZXdlbnZbc3BsaXR2YWxbMF1dID0gc3BsaXR2YWxbMV0KKyAgICByZXR1cm4gc3VicHJvY2Vzcy5jYWxsKCIlcyAlcyIgJSAoZmFrZXJvb3RjbWQsIGNtZCksIGVudj1uZXdlbnYsICoqa3dhcmdzKQorCitkZWYgc2V0dXBfdGluZm9pbChjb25maWdfb25seT1GYWxzZSk6CisgICAgIiIiSW5pdGlhbGl6ZSB0aW5mb2lsIGFwaSBmcm9tIGJpdGJha2UiIiIKKyAgICBpbXBvcnQgc2NyaXB0cGF0aAorICAgIGJpdGJha2VwYXRoID0gc2NyaXB0cGF0aC5hZGRfYml0YmFrZV9saWJfcGF0aCgpCisgICAgaWYgbm90IGJpdGJha2VwYXRoOgorICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBmaW5kIGJpdGJha2UgYnkgc2VhcmNoaW5nIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhpcyBzY3JpcHQgb3IgUEFUSCIpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpbXBvcnQgYmIudGluZm9pbAorICAgIHRpbmZvaWwgPSBiYi50aW5mb2lsLlRpbmZvaWwoKQorICAgIHRpbmZvaWwucHJlcGFyZShjb25maWdfb25seSkKKyAgICB0aW5mb2lsLmxvZ2dlci5zZXRMZXZlbChsb2dnZXIuZ2V0RWZmZWN0aXZlTGV2ZWwoKSkKKyAgICByZXR1cm4gdGluZm9pbAorCitkZWYgZ2V0X3JlY2lwZV9maWxlKGNvb2tlciwgcG4pOgorICAgICIiIkZpbmQgcmVjaXBlIGZpbGUgY29ycmVzcG9uZGluZyBhIHBhY2thZ2UgbmFtZSIiIgorICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscworICAgIHJlY2lwZWZpbGUgPSBvZS5yZWNpcGV1dGlscy5wbl90b19yZWNpcGUoY29va2VyLCBwbikKKyAgICBpZiBub3QgcmVjaXBlZmlsZToKKyAgICAgICAgc2tpcHJlYXNvbnMgPSBvZS5yZWNpcGV1dGlscy5nZXRfdW5hdmFpbGFibGVfcmVhc29ucyhjb29rZXIsIHBuKQorICAgICAgICBpZiBza2lwcmVhc29uczoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignXG4nLmpvaW4oc2tpcHJlYXNvbnMpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZmluZCBhbnkgcmVjaXBlIGZpbGUgbWF0Y2hpbmcgJXMiICUgcG4pCisgICAgcmV0dXJuIHJlY2lwZWZpbGUKKworZGVmIHBhcnNlX3JlY2lwZShjb25maWcsIHRpbmZvaWwsIHBuLCBhcHBlbmRzKToKKyAgICAiIiJQYXJzZSByZWNpcGUgb2YgYSBwYWNrYWdlIiIiCisgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisgICAgcmVjaXBlZmlsZSA9IGdldF9yZWNpcGVfZmlsZSh0aW5mb2lsLmNvb2tlciwgcG4pCisgICAgaWYgbm90IHJlY2lwZWZpbGU6CisgICAgICAgICMgRXJyb3IgYWxyZWFkeSBsb2dnZWQKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBpZiBhcHBlbmRzOgorICAgICAgICBhcHBlbmRfZmlsZXMgPSB0aW5mb2lsLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMocmVjaXBlZmlsZSkKKyAgICAgICAgIyBGaWx0ZXIgb3V0IGFwcGVuZHMgZnJvbSB0aGUgd29ya3NwYWNlCisgICAgICAgIGFwcGVuZF9maWxlcyA9IFtwYXRoIGZvciBwYXRoIGluIGFwcGVuZF9maWxlcyBpZgorICAgICAgICAgICAgICAgICAgICAgICAgbm90IHBhdGguc3RhcnRzd2l0aChjb25maWcud29ya3NwYWNlX3BhdGgpXQorICAgIHJldHVybiBvZS5yZWNpcGV1dGlscy5wYXJzZV9yZWNpcGUocmVjaXBlZmlsZSwgYXBwZW5kX2ZpbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9idWlsZC1pbWFnZS5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9idWlsZC1pbWFnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzAxNDI4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL2J1aWxkLWltYWdlLnB5CkBAIC0wLDAgKzEsOTEgQEAKKyMgRGV2ZWxvcG1lbnQgdG9vbCAtIGJ1aWxkLWltYWdlIHBsdWdpbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyIiIkRldnRvb2wgcGx1Z2luIGNvbnRhaW5pbmcgdGhlIGJ1aWxkLWltYWdlIHN1YmNvbW1hbmQuIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKKworZnJvbSBiYi5wcm9jZXNzIGltcG9ydCBFeGVjdXRpb25FcnJvcgorZnJvbSBkZXZ0b29sIGltcG9ydCBleGVjX2J1aWxkX2Vudl9jb21tYW5kLCBzZXR1cF90aW5mb2lsLCBwYXJzZV9yZWNpcGUKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2RldnRvb2wnKQorCitkZWYgX2dldF9yZWNpcGVzKHdvcmtzcGFjZSwgY29uZmlnKToKKyAgICAiIiJHZXQgbGlzdCBvZiB0YXJnZXQgcmVjaXBlcyBmcm9tIHRoZSB3b3Jrc3BhY2UuIiIiCisgICAgcmVzdWx0ID0gW10KKyAgICB0aW5mb2lsID0gc2V0dXBfdGluZm9pbCgpCisgICAgZm9yIHJlY2lwZSBpbiB3b3Jrc3BhY2U6CisgICAgICAgIGRhdGEgPSBwYXJzZV9yZWNpcGUoY29uZmlnLCB0aW5mb2lsLCByZWNpcGUsIFRydWUpCisgICAgICAgIGlmICdjbGFzcy10YXJnZXQnIGluIGRhdGEuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKS5zcGxpdCgnOicpOgorICAgICAgICAgICAgaWYgcmVjaXBlIGluIGRhdGEuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVjaXBlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygiU2tpcHBpbmcgcmVjaXBlICVzIGFzIGl0IGRvZXNuJ3QgcHJvZHVjZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhY2thZ2Ugd2l0aCB0aGUgc2FtZSBuYW1lIiwgcmVjaXBlKQorICAgIHRpbmZvaWwuc2h1dGRvd24oKQorICAgIHJldHVybiByZXN1bHQKKworZGVmIGJ1aWxkX2ltYWdlKGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CisgICAgIiIiRW50cnkgcG9pbnQgZm9yIHRoZSBkZXZ0b29sICdidWlsZC1pbWFnZScgc3ViY29tbWFuZC4iIiIKKyAgICBpbWFnZSA9IGFyZ3MucmVjaXBlCisgICAgYXBwZW5kZmlsZSA9IG9zLnBhdGguam9pbihjb25maWcud29ya3NwYWNlX3BhdGgsICdhcHBlbmRzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclcy5iYmFwcGVuZCcgJSBpbWFnZSkKKworICAgICMgcmVtb3ZlIDxpbWFnZT4uYmJhcGVuZCB0byBtYWtlIHN1cmUgc2V0dXBfdGluZm9pbCBkb2Vzbid0CisgICAgIyBicmVha2UgYmVjYXVzZSBvZiBpdAorICAgIGlmIG9zLnBhdGguaXNmaWxlKGFwcGVuZGZpbGUpOgorICAgICAgICBvcy51bmxpbmsoYXBwZW5kZmlsZSkKKworICAgIHJlY2lwZXMgPSBfZ2V0X3JlY2lwZXMod29ya3NwYWNlLCBjb25maWcpCisgICAgaWYgcmVjaXBlczoKKyAgICAgICAgd2l0aCBvcGVuKGFwcGVuZGZpbGUsICd3JykgYXMgYWZpbGU6CisgICAgICAgICAgICAjIGluY2x1ZGUgc2VsZWN0ZWQgcmVjaXBlcyBpbnRvIHRoZSBpbWFnZQorICAgICAgICAgICAgYWZpbGUud3JpdGUoJ0lNQUdFX0lOU1RBTExfYXBwZW5kID0gIiAlcyJcbicgJSAnICcuam9pbihyZWNpcGVzKSkKKworICAgICAgICAgICAgIyBHZW5lcmF0ZSBub3RpZmljYXRpb24gY2FsbGJhY2sgZGV2dG9vbF93YXJuX2ltYWdlX2V4dGVuZGVkCisgICAgICAgICAgICBhZmlsZS53cml0ZSgnZG9fcm9vdGZzW3ByZWZ1bmNzXSArPSAiZGV2dG9vbF93YXJuX2ltYWdlX2V4dGVuZGVkIlxuXG4nKQorICAgICAgICAgICAgYWZpbGUud3JpdGUoInB5dGhvbiBkZXZ0b29sX3dhcm5faW1hZ2VfZXh0ZW5kZWQoKSB7XG4iKQorICAgICAgICAgICAgYWZpbGUud3JpdGUoIiAgICBiYi5wbGFpbignTk9URTogJSVzOiBidWlsZGluZyB3aXRoIGFkZGl0aW9uYWwgJ1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAncGFja2FnZXMgZHVlIHRvIFwiZGV2dG9vbCBidWlsZC1pbWFnZVwiJyIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICUlIGQuZ2V0VmFyKCdQTicsIFRydWUpKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBiYi5wbGFpbignTk9URTogZGVsZXRlICUlcyB0byBjbGVhciB0aGlzJyAlJSBcXFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAnJXMnKVxuIiAlIG9zLnBhdGgucmVscGF0aChhcHBlbmRmaWxlLCBiYXNlcGF0aCkpCisgICAgICAgICAgICBhZmlsZS53cml0ZSgifVxuIikKKworICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0J1aWxkaW5nIGltYWdlICVzIHdpdGggdGhlIGZvbGxvd2luZyAnCisgICAgICAgICAgICAgICAgICAgICAgICAnYWRkaXRpb25hbCBwYWNrYWdlczogJXMnLCBpbWFnZSwgJyAnLmpvaW4ocmVjaXBlcykpCisgICAgZWxzZToKKyAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ05vIHJlY2lwZXMgaW4gd29ya3NwYWNlLCBidWlsZGluZyBpbWFnZSAlcyB1bm1vZGlmaWVkJywgaW1hZ2UpCisKKyAgICAjIHJ1biBiaXRiYWtlIHRvIGJ1aWxkIGltYWdlCisgICAgdHJ5OgorICAgICAgICBleGVjX2J1aWxkX2Vudl9jb21tYW5kKGNvbmZpZy5pbml0X3BhdGgsIGJhc2VwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiaXRiYWtlICVzJyAlIGltYWdlLCB3YXRjaD1UcnVlKQorICAgIGV4Y2VwdCBFeGVjdXRpb25FcnJvciBhcyBlcnI6CisgICAgICAgIHJldHVybiBlcnIuZXhpdGNvZGUKKworICAgIGxvZ2dlci5pbmZvKCdTdWNjZXNzZnVsbHkgYnVpbHQgJXMnLCBpbWFnZSkKKworZGVmIHJlZ2lzdGVyX2NvbW1hbmRzKHN1YnBhcnNlcnMsIGNvbnRleHQpOgorICAgICIiIlJlZ2lzdGVyIGRldnRvb2wgc3ViY29tbWFuZHMgZnJvbSB0aGUgYnVpbGQtaW1hZ2UgcGx1Z2luIiIiCisgICAgcGFyc2VyID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdidWlsZC1pbWFnZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0J1aWxkIGltYWdlIGluY2x1ZGluZyB3b3Jrc3BhY2UgcmVjaXBlIHBhY2thZ2VzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J0J1aWxkcyBhbiBpbWFnZSwgZXh0ZW5kaW5nIGl0IHRvIGluY2x1ZGUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFja2FnZXMgZnJvbSByZWNpcGVzIGluIHRoZSB3b3Jrc3BhY2UnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3JlY2lwZScsIGhlbHA9J0ltYWdlIHJlY2lwZSB0byBidWlsZCcpCisgICAgcGFyc2VyLnNldF9kZWZhdWx0cyhmdW5jPWJ1aWxkX2ltYWdlKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL2J1aWxkLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL2J1aWxkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNWFmZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvYnVpbGQucHkKQEAgLTAsMCArMSw3NyBAQAorIyBEZXZlbG9wbWVudCB0b29sIC0gYnVpbGQgY29tbWFuZCBwbHVnaW4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisiIiJEZXZ0b29sIGJ1aWxkIHBsdWdpbiIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBiYgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IHRlbXBmaWxlCitmcm9tIGRldnRvb2wgaW1wb3J0IGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQsIERldnRvb2xFcnJvcgorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignZGV2dG9vbCcpCisKK2RlZiBwbHVnaW5faW5pdChwbHVnaW5saXN0KToKKyAgICAiIiJQbHVnaW4gaW5pdGlhbGl6YXRpb24iIiIKKyAgICBwYXNzCisKK2RlZiBfY3JlYXRlX2NvbmZfZmlsZSh2YWx1ZXMsIGNvbmZfZmlsZT1Ob25lKToKKyAgICBpZiBub3QgY29uZl9maWxlOgorICAgICAgICBmZCwgY29uZl9maWxlID0gdGVtcGZpbGUubWtzdGVtcChzdWZmaXg9Jy5jb25mJykKKyAgICBlbGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmRpcm5hbWUoY29uZl9maWxlKSk6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygiQ3JlYXRpbmcgZm9sZGVyICVzIiAlIG9zLnBhdGguZGlybmFtZShjb25mX2ZpbGUpKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGNvbmZfZmlsZSkpCisgICAgd2l0aCBvcGVuKGNvbmZfZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiB2YWx1ZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBmLndyaXRlKCclcyA9ICIlcyJcbicgJSAoa2V5LCB2YWx1ZSkpCisgICAgcmV0dXJuIGNvbmZfZmlsZQorCitkZWYgYnVpbGQoYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKKyAgICAiIiJFbnRyeSBwb2ludCBmb3IgdGhlIGRldnRvb2wgJ2J1aWxkJyBzdWJjb21tYW5kIiIiCisgICAgaWYgbm90IGFyZ3MucmVjaXBlbmFtZSBpbiB3b3Jrc3BhY2U6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigibm8gcmVjaXBlIG5hbWVkICVzIGluIHlvdXIgd29ya3NwYWNlIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnJlY2lwZW5hbWUpCisKKyAgICBidWlsZF90YXNrID0gY29uZmlnLmdldCgnQnVpbGQnLCAnYnVpbGRfdGFzaycsICdwb3B1bGF0ZV9zeXNyb290JykKKworICAgIHBvc3RmaWxlX3BhcmFtID0gIiIKKyAgICBwb3N0ZmlsZSA9ICIiCisgICAgaWYgYXJncy5kaXNhYmxlX3BhcmFsbGVsX21ha2U6CisgICAgICAgIGxvZ2dlci5pbmZvKCJEaXNhYmxpbmcgJ21ha2UnIHBhcmFsbGVsaXNtIikKKyAgICAgICAgcG9zdGZpbGUgPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICdjb25mJywgJ2Rpc2FibGVfcGFyYWxsZWxpc20uY29uZicpCisgICAgICAgIF9jcmVhdGVfY29uZl9maWxlKHsnUEFSQUxMRUxfTUFLRSc6Jyd9LCBwb3N0ZmlsZSkKKyAgICAgICAgcG9zdGZpbGVfcGFyYW0gPSAiLVIgJXMiICUgcG9zdGZpbGUKKyAgICB0cnk6CisgICAgICAgIGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQoY29uZmlnLmluaXRfcGF0aCwgYmFzZXBhdGgsICdiaXRiYWtlIC1jICVzICVzICVzJyAlIChidWlsZF90YXNrLCBwb3N0ZmlsZV9wYXJhbSwgYXJncy5yZWNpcGVuYW1lKSwgd2F0Y2g9VHJ1ZSkKKyAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvciBhcyBlOgorICAgICAgICAjIFdlJ3ZlIGFscmVhZHkgc2VlbiB0aGUgb3V0cHV0IHNpbmNlIHdhdGNoPVRydWUsIHNvIGp1c3QgZW5zdXJlIHdlIHJldHVybiBzb21ldGhpbmcgdG8gdGhlIHVzZXIKKyAgICAgICAgcmV0dXJuIGUuZXhpdGNvZGUKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiBwb3N0ZmlsZToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnUmVtb3ZpbmcgcG9zdGZpbGUnKQorICAgICAgICAgICAgb3MucmVtb3ZlKHBvc3RmaWxlKQorCisgICAgcmV0dXJuIDAKKworZGVmIHJlZ2lzdGVyX2NvbW1hbmRzKHN1YnBhcnNlcnMsIGNvbnRleHQpOgorICAgICIiIlJlZ2lzdGVyIGRldnRvb2wgc3ViY29tbWFuZHMgZnJvbSB0aGlzIHBsdWdpbiIiIgorICAgIHBhcnNlcl9idWlsZCA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignYnVpbGQnLCBoZWxwPSdCdWlsZCBhIHJlY2lwZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdCdWlsZHMgdGhlIHNwZWNpZmllZCByZWNpcGUgdXNpbmcgYml0YmFrZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5Bcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlcikKKyAgICBwYXJzZXJfYnVpbGQuYWRkX2FyZ3VtZW50KCdyZWNpcGVuYW1lJywgaGVscD0nUmVjaXBlIHRvIGJ1aWxkJykKKyAgICBwYXJzZXJfYnVpbGQuYWRkX2FyZ3VtZW50KCctcycsICctLWRpc2FibGUtcGFyYWxsZWwtbWFrZScsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9J0Rpc2FibGUgbWFrZSBwYXJhbGxlbGlzbScpCisgICAgcGFyc2VyX2J1aWxkLnNldF9kZWZhdWx0cyhmdW5jPWJ1aWxkKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL2RlcGxveS5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9kZXBsb3kucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE5M2FkZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9kZXBsb3kucHkKQEAgLTAsMCArMSwxNDkgQEAKKyMgRGV2ZWxvcG1lbnQgdG9vbCAtIGRlcGxveS91bmRlcGxveSBjb21tYW5kIHBsdWdpbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyIiIkRldnRvb2wgcGx1Z2luIGNvbnRhaW5pbmcgdGhlIGRlcGxveSBzdWJjb21tYW5kcyIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgbG9nZ2luZworZnJvbSBkZXZ0b29sIGltcG9ydCBleGVjX2Zha2Vyb290LCBzZXR1cF90aW5mb2lsLCBEZXZ0b29sRXJyb3IKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2RldnRvb2wnKQorCitkZWYgZGVwbG95KGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CisgICAgIiIiRW50cnkgcG9pbnQgZm9yIHRoZSBkZXZ0b29sICdkZXBsb3knIHN1YmNvbW1hbmQiIiIKKyAgICBpbXBvcnQgcmUKKyAgICBpbXBvcnQgb2UucmVjaXBldXRpbHMKKworICAgIGlmIG5vdCBhcmdzLnJlY2lwZW5hbWUgaW4gd29ya3NwYWNlOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIm5vIHJlY2lwZSBuYW1lZCAlcyBpbiB5b3VyIHdvcmtzcGFjZSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5yZWNpcGVuYW1lKQorICAgIHRyeToKKyAgICAgICAgaG9zdCwgZGVzdGRpciA9IGFyZ3MudGFyZ2V0LnNwbGl0KCc6JykKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgZGVzdGRpciA9ICcvJworICAgIGVsc2U6CisgICAgICAgIGFyZ3MudGFyZ2V0ID0gaG9zdAorCisgICAgZGVwbG95X2RpciA9IG9zLnBhdGguam9pbihiYXNlcGF0aCwgJ3RhcmdldF9kZXBsb3knLCBhcmdzLnRhcmdldCkKKyAgICBkZXBsb3lfZmlsZSA9IG9zLnBhdGguam9pbihkZXBsb3lfZGlyLCBhcmdzLnJlY2lwZW5hbWUgKyAnLmxpc3QnKQorCisgICAgdGluZm9pbCA9IHNldHVwX3RpbmZvaWwoKQorICAgIHRyeToKKyAgICAgICAgcmQgPSBvZS5yZWNpcGV1dGlscy5wYXJzZV9yZWNpcGVfc2ltcGxlKHRpbmZvaWwuY29va2VyLCBhcmdzLnJlY2lwZW5hbWUsIHRpbmZvaWwuY29uZmlnX2RhdGEpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ0V4Y2VwdGlvbiBwYXJzaW5nIHJlY2lwZSAlczogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcmdzLnJlY2lwZW5hbWUsIGUpKQorICAgIHJlY2lwZV9vdXRkaXIgPSByZC5nZXRWYXIoJ0QnLCBUcnVlKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhyZWNpcGVfb3V0ZGlyKSBvciBub3Qgb3MubGlzdGRpcihyZWNpcGVfb3V0ZGlyKToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdObyBmaWxlcyB0byBkZXBsb3kgLSBoYXZlIHlvdSBidWlsdCB0aGUgJXMgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlY2lwZT8gSWYgc28sIHRoZSBpbnN0YWxsIHN0ZXAgaGFzIG5vdCBpbnN0YWxsZWQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FueSBmaWxlcy4nICUgYXJncy5yZWNpcGVuYW1lKQorCisgICAgaWYgYXJncy5kcnlfcnVuOgorICAgICAgICBwcmludCgnRmlsZXMgdG8gYmUgZGVwbG95ZWQgZm9yICVzIG9uIHRhcmdldCAlczonICUgKGFyZ3MucmVjaXBlbmFtZSwgYXJncy50YXJnZXQpKQorICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhyZWNpcGVfb3V0ZGlyKToKKyAgICAgICAgICAgIGZvciBmbiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBwcmludCgnICAlcycgJSBvcy5wYXRoLmpvaW4oZGVzdGRpciwgb3MucGF0aC5yZWxwYXRoKHJvb3QsIHJlY2lwZV9vdXRkaXIpLCBmbikpCisgICAgICAgIHJldHVybiAwCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhkZXBsb3lfZmlsZSk6CisgICAgICAgIGlmIHVuZGVwbG95KGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CisgICAgICAgICAgICAjIEVycm9yIGFscmVhZHkgc2hvd24KKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICBleHRyYW9wdGlvbnMgPSAnJworICAgIGlmIGFyZ3Mubm9faG9zdF9jaGVjazoKKyAgICAgICAgZXh0cmFvcHRpb25zICs9ICctbyBVc2VyS25vd25Ib3N0c0ZpbGU9L2Rldi9udWxsIC1vIFN0cmljdEhvc3RLZXlDaGVja2luZz1ubycKKyAgICBpZiBhcmdzLnNob3dfc3RhdHVzOgorICAgICAgICB0YXJleHRyYWN0b3B0cyA9ICd4dicKKyAgICBlbHNlOgorICAgICAgICB0YXJleHRyYWN0b3B0cyA9ICd4JworICAgICAgICBleHRyYW9wdGlvbnMgKz0gJyAtcScKKyAgICAjIFdlIGNhbm5vdCB1c2Ugc2NwIGhlcmUsIGJlY2F1c2UgaXQgZG9lc24ndCBwcmVzZXJ2ZSBzeW1saW5rcworICAgIHJldCA9IGV4ZWNfZmFrZXJvb3QocmQsICd0YXIgY2YgLSAuIHwgc3NoICVzICVzIFwndGFyICVzIC1DICVzIC1mIC1cJycgJSAoZXh0cmFvcHRpb25zLCBhcmdzLnRhcmdldCwgdGFyZXh0cmFjdG9wdHMsIGRlc3RkaXIpLCBjd2Q9cmVjaXBlX291dGRpciwgc2hlbGw9VHJ1ZSkKKyAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdEZXBsb3kgZmFpbGVkIC0gcmVydW4gd2l0aCAtcyB0byBnZXQgYSBjb21wbGV0ZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXJyb3IgbWVzc2FnZScpCisKKyAgICBsb2dnZXIuaW5mbygnU3VjY2Vzc2Z1bGx5IGRlcGxveWVkICVzJyAlIHJlY2lwZV9vdXRkaXIpCisKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGVwbG95X2Rpcik6CisgICAgICAgIG9zLm1ha2VkaXJzKGRlcGxveV9kaXIpCisKKyAgICBmaWxlc19saXN0ID0gW10KKyAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhyZWNpcGVfb3V0ZGlyKToKKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLnJlbHBhdGgob3MucGF0aC5qb2luKHJvb3QsIGZpbGVuYW1lKSwgcmVjaXBlX291dGRpcikKKyAgICAgICAgICAgIGZpbGVzX2xpc3QuYXBwZW5kKG9zLnBhdGguam9pbihkZXN0ZGlyLCBmaWxlbmFtZSkpCisKKyAgICB3aXRoIG9wZW4oZGVwbG95X2ZpbGUsICd3JykgYXMgZm9iajoKKyAgICAgICAgZm9iai53cml0ZSgnXG4nLmpvaW4oZmlsZXNfbGlzdCkpCisKKyAgICByZXR1cm4gMAorCitkZWYgdW5kZXBsb3koYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKKyAgICAiIiJFbnRyeSBwb2ludCBmb3IgdGhlIGRldnRvb2wgJ3VuZGVwbG95JyBzdWJjb21tYW5kIiIiCisgICAgZGVwbG95X2ZpbGUgPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICd0YXJnZXRfZGVwbG95JywgYXJncy50YXJnZXQsIGFyZ3MucmVjaXBlbmFtZSArICcubGlzdCcpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRlcGxveV9maWxlKToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCclcyBoYXMgbm90IGJlZW4gZGVwbG95ZWQnICUgYXJncy5yZWNpcGVuYW1lKQorCisgICAgaWYgYXJncy5kcnlfcnVuOgorICAgICAgICBwcmludCgnUHJldmlvdXNseSBkZXBsb3llZCBmaWxlcyB0byBiZSB1bi1kZXBsb3llZCBmb3IgJXMgb24gdGFyZ2V0ICVzOicgJSAoYXJncy5yZWNpcGVuYW1lLCBhcmdzLnRhcmdldCkpCisgICAgICAgIHdpdGggb3BlbihkZXBsb3lfZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBwcmludCgnICAlcycgJSBsaW5lLnJzdHJpcCgpKQorICAgICAgICByZXR1cm4gMAorCisgICAgZXh0cmFvcHRpb25zID0gJycKKyAgICBpZiBhcmdzLm5vX2hvc3RfY2hlY2s6CisgICAgICAgIGV4dHJhb3B0aW9ucyArPSAnLW8gVXNlcktub3duSG9zdHNGaWxlPS9kZXYvbnVsbCAtbyBTdHJpY3RIb3N0S2V5Q2hlY2tpbmc9bm8nCisgICAgaWYgbm90IGFyZ3Muc2hvd19zdGF0dXM6CisgICAgICAgIGV4dHJhb3B0aW9ucyArPSAnIC1xJworCisgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKCJzY3AgJXMgJXMgJXM6L3RtcCIgJSAoZXh0cmFvcHRpb25zLCBkZXBsb3lfZmlsZSwgYXJncy50YXJnZXQpLCBzaGVsbD1UcnVlKQorICAgIGlmIHJldCAhPSAwOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ0ZhaWxlZCB0byBjb3B5IGZpbGUgbGlzdCB0byAlcyAtIHJlcnVuIHdpdGggLXMgdG8gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldCBhIGNvbXBsZXRlIGVycm9yIG1lc3NhZ2UnICUgYXJncy50YXJnZXQpCisKKyAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoInNzaCAlcyAlcyAneGFyZ3MgLW4xIHJtIC1mIDwvdG1wLyVzJyIgJSAoZXh0cmFvcHRpb25zLCBhcmdzLnRhcmdldCwgb3MucGF0aC5iYXNlbmFtZShkZXBsb3lfZmlsZSkpLCBzaGVsbD1UcnVlKQorICAgIGlmIHJldCA9PSAwOgorICAgICAgICBsb2dnZXIuaW5mbygnU3VjY2Vzc2Z1bGx5IHVuZGVwbG95ZWQgJXMnICUgYXJncy5yZWNpcGVuYW1lKQorICAgICAgICBvcy5yZW1vdmUoZGVwbG95X2ZpbGUpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdVbmRlcGxveSBmYWlsZWQgLSByZXJ1biB3aXRoIC1zIHRvIGdldCBhIGNvbXBsZXRlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvciBtZXNzYWdlJykKKworICAgIHJldHVybiByZXQKKworCitkZWYgcmVnaXN0ZXJfY29tbWFuZHMoc3VicGFyc2VycywgY29udGV4dCk6CisgICAgIiIiUmVnaXN0ZXIgZGV2dG9vbCBzdWJjb21tYW5kcyBmcm9tIHRoZSBkZXBsb3kgcGx1Z2luIiIiCisgICAgcGFyc2VyX2RlcGxveSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignZGVwbG95LXRhcmdldCcsIGhlbHA9J0RlcGxveSByZWNpcGUgb3V0cHV0IGZpbGVzIHRvIGxpdmUgdGFyZ2V0IG1hY2hpbmUnKQorICAgIHBhcnNlcl9kZXBsb3kuYWRkX2FyZ3VtZW50KCdyZWNpcGVuYW1lJywgaGVscD0nUmVjaXBlIHRvIGRlcGxveScpCisgICAgcGFyc2VyX2RlcGxveS5hZGRfYXJndW1lbnQoJ3RhcmdldCcsIGhlbHA9J0xpdmUgdGFyZ2V0IG1hY2hpbmUgcnVubmluZyBhbiBzc2ggc2VydmVyOiB1c2VyQGhvc3RuYW1lWzpkZXN0ZGlyXScpCisgICAgcGFyc2VyX2RlcGxveS5hZGRfYXJndW1lbnQoJy1jJywgJy0tbm8taG9zdC1jaGVjaycsIGhlbHA9J0Rpc2FibGUgc3NoIGhvc3Qga2V5IGNoZWNraW5nJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfZGVwbG95LmFkZF9hcmd1bWVudCgnLXMnLCAnLS1zaG93LXN0YXR1cycsIGhlbHA9J1Nob3cgcHJvZ3Jlc3Mvc3RhdHVzIG91dHB1dCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyX2RlcGxveS5hZGRfYXJndW1lbnQoJy1uJywgJy0tZHJ5LXJ1bicsIGhlbHA9J0xpc3QgZmlsZXMgdG8gYmUgZGVwbG95ZWQgb25seScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyX2RlcGxveS5zZXRfZGVmYXVsdHMoZnVuYz1kZXBsb3kpCisKKyAgICBwYXJzZXJfdW5kZXBsb3kgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ3VuZGVwbG95LXRhcmdldCcsIGhlbHA9J1VuZGVwbG95IHJlY2lwZSBvdXRwdXQgZmlsZXMgaW4gbGl2ZSB0YXJnZXQgbWFjaGluZScpCisgICAgcGFyc2VyX3VuZGVwbG95LmFkZF9hcmd1bWVudCgncmVjaXBlbmFtZScsIGhlbHA9J1JlY2lwZSB0byB1bmRlcGxveScpCisgICAgcGFyc2VyX3VuZGVwbG95LmFkZF9hcmd1bWVudCgndGFyZ2V0JywgaGVscD0nTGl2ZSB0YXJnZXQgbWFjaGluZSBydW5uaW5nIGFuIHNzaCBzZXJ2ZXI6IHVzZXJAaG9zdG5hbWUnKQorICAgIHBhcnNlcl91bmRlcGxveS5hZGRfYXJndW1lbnQoJy1jJywgJy0tbm8taG9zdC1jaGVjaycsIGhlbHA9J0Rpc2FibGUgc3NoIGhvc3Qga2V5IGNoZWNraW5nJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfdW5kZXBsb3kuYWRkX2FyZ3VtZW50KCctcycsICctLXNob3ctc3RhdHVzJywgaGVscD0nU2hvdyBwcm9ncmVzcy9zdGF0dXMgb3V0cHV0JywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfdW5kZXBsb3kuYWRkX2FyZ3VtZW50KCctbicsICctLWRyeS1ydW4nLCBoZWxwPSdMaXN0IGZpbGVzIHRvIGJlIHVuZGVwbG95ZWQgb25seScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyX3VuZGVwbG95LnNldF9kZWZhdWx0cyhmdW5jPXVuZGVwbG95KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3BhY2thZ2UucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvcGFja2FnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTdhMzZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3BhY2thZ2UucHkKQEAgLTAsMCArMSw2MSBAQAorIyBEZXZlbG9wbWVudCB0b29sIC0gcGFja2FnZSBjb21tYW5kIHBsdWdpbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyIiIkRldnRvb2wgcGx1Z2luIGNvbnRhaW5pbmcgdGhlIHBhY2thZ2Ugc3ViY29tbWFuZHMiIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IGxvZ2dpbmcKK2Zyb20gYmIucHJvY2VzcyBpbXBvcnQgRXhlY3V0aW9uRXJyb3IKK2Zyb20gZGV2dG9vbCBpbXBvcnQgZXhlY19idWlsZF9lbnZfY29tbWFuZCwgc2V0dXBfdGluZm9pbCwgRGV2dG9vbEVycm9yCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdkZXZ0b29sJykKKworZGVmIHBsdWdpbl9pbml0KHBsdWdpbmxpc3QpOgorICAgICIiIlBsdWdpbiBpbml0aWFsaXphdGlvbiIiIgorICAgIHBhc3MKKworZGVmIHBhY2thZ2UoYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKKyAgICAiIiJFbnRyeSBwb2ludCBmb3IgdGhlIGRldnRvb2wgJ3BhY2thZ2UnIHN1YmNvbW1hbmQiIiIKKyAgICBpZiBub3QgYXJncy5yZWNpcGVuYW1lIGluIHdvcmtzcGFjZToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJubyByZWNpcGUgbmFtZWQgJXMgaW4geW91ciB3b3Jrc3BhY2UiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucmVjaXBlbmFtZSkKKworICAgIGltYWdlX3BrZ3R5cGUgPSBjb25maWcuZ2V0KCdQYWNrYWdlJywgJ2ltYWdlX3BrZ3R5cGUnLCAnJykKKyAgICBpZiBub3QgaW1hZ2VfcGtndHlwZToKKyAgICAgICAgdGluZm9pbCA9IHNldHVwX3RpbmZvaWwoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0aW5mb2lsLnByZXBhcmUoY29uZmlnX29ubHk9VHJ1ZSkKKyAgICAgICAgICAgIGltYWdlX3BrZ3R5cGUgPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignSU1BR0VfUEtHVFlQRScsIFRydWUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0aW5mb2lsLnNodXRkb3duKCkKKworICAgIHBhY2thZ2VfdGFzayA9IGNvbmZpZy5nZXQoJ1BhY2thZ2UnLCAncGFja2FnZV90YXNrJywgJ3BhY2thZ2Vfd3JpdGVfJXMnICUgaW1hZ2VfcGtndHlwZSkKKyAgICB0cnk6CisgICAgICAgIGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQoY29uZmlnLmluaXRfcGF0aCwgYmFzZXBhdGgsICdiaXRiYWtlIC1jICVzICVzJyAlIChwYWNrYWdlX3Rhc2ssIGFyZ3MucmVjaXBlbmFtZSksIHdhdGNoPVRydWUpCisgICAgZXhjZXB0IGJiLnByb2Nlc3MuRXhlY3V0aW9uRXJyb3IgYXMgZToKKyAgICAgICAgIyBXZSd2ZSBhbHJlYWR5IHNlZW4gdGhlIG91dHB1dCBzaW5jZSB3YXRjaD1UcnVlLCBzbyBqdXN0IGVuc3VyZSB3ZSByZXR1cm4gc29tZXRoaW5nIHRvIHRoZSB1c2VyCisgICAgICAgIHJldHVybiBlLmV4aXRjb2RlCisgICAgbG9nZ2VyLmluZm8oJ1lvdXIgcGFja2FnZXMgYXJlIGluICVzL3RtcC9kZXBsb3kvJXMnICUgKGJhc2VwYXRoLCBpbWFnZV9wa2d0eXBlKSkKKworICAgIHJldHVybiAwCisKK2RlZiByZWdpc3Rlcl9jb21tYW5kcyhzdWJwYXJzZXJzLCBjb250ZXh0KToKKyAgICAiIiJSZWdpc3RlciBkZXZ0b29sIHN1YmNvbW1hbmRzIGZyb20gdGhlIHBhY2thZ2UgcGx1Z2luIiIiCisgICAgaWYgY29udGV4dC5maXhlZF9zZXR1cDoKKyAgICAgICAgcGFyc2VyX3BhY2thZ2UgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ3BhY2thZ2UnLCBoZWxwPSdCdWlsZCBwYWNrYWdlcyBmb3IgYSByZWNpcGUnLCBkZXNjcmlwdGlvbj0nQnVpbGRzIHBhY2thZ2VzIGZvciBhIHJlY2lwZVwncyBvdXRwdXQgZmlsZXMnKQorICAgICAgICBwYXJzZXJfcGFja2FnZS5hZGRfYXJndW1lbnQoJ3JlY2lwZW5hbWUnLCBoZWxwPSdSZWNpcGUgdG8gcGFja2FnZScpCisgICAgICAgIHBhcnNlcl9wYWNrYWdlLnNldF9kZWZhdWx0cyhmdW5jPXBhY2thZ2UpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvc2RrLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3Nkay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjQxNmIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3Nkay5weQpAQCAtMCwwICsxLDE5NyBAQAorIyBEZXZlbG9wbWVudCB0b29sIC0gc2RrLXVwZGF0ZSBjb21tYW5kIHBsdWdpbgorCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGdsb2IKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBlcnJubworaW1wb3J0IHN5cworZnJvbSBkZXZ0b29sIGltcG9ydCBleGVjX2J1aWxkX2Vudl9jb21tYW5kLCBzZXR1cF90aW5mb2lsLCBEZXZ0b29sRXJyb3IKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2RldnRvb2wnKQorCitkZWYgcGx1Z2luX2luaXQocGx1Z2lubGlzdCk6CisgICAgIiIiUGx1Z2luIGluaXRpYWxpemF0aW9uIiIiCisgICAgcGFzcworCitkZWYgcGFyc2VfbG9ja2VkX3NpZ3Moc2lnZmlsZV9wYXRoKToKKyAgICAiIiJSZXR1cm4gPHBuOnRhc2s+OjxoYXNoPiBkaWN0aW9uYXJ5IiIiCisgICAgc2lnX2RpY3QgPSB7fQorICAgIHdpdGggb3BlbihzaWdmaWxlX3BhdGgpIGFzIGY6CisgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIGlmICc6JyBpbiBsaW5lOgorICAgICAgICAgICAgICAgIHRhc2trZXksIF8sIGhhc2h2YWwgPSBsaW5lLnJwYXJ0aXRpb24oJzonKQorICAgICAgICAgICAgICAgIHNpZ19kaWN0W3Rhc2trZXkuc3RyaXAoKV0gPSBoYXNodmFsLnNwbGl0KClbMF0KKyAgICByZXR1cm4gc2lnX2RpY3QKKworZGVmIGdlbmVyYXRlX3VwZGF0ZV9kaWN0KHNpZ2ZpbGVfbmV3LCBzaWdmaWxlX29sZCk6CisgICAgIiIiUmV0dXJuIGEgZGljdCBjb250YWluaW5nIDxwbjp0YXNrPjo8aGFzaD4gd2hpY2ggaW5kaWNhdGVzIHdoYXQgbmVlZCB0byBiZSB1cGRhdGVkIiIiCisgICAgdXBkYXRlX2RpY3QgPSB7fQorICAgIHNpZ2RpY3RfbmV3ID0gcGFyc2VfbG9ja2VkX3NpZ3Moc2lnZmlsZV9uZXcpCisgICAgc2lnZGljdF9vbGQgPSBwYXJzZV9sb2NrZWRfc2lncyhzaWdmaWxlX29sZCkKKyAgICBmb3IgayBpbiBzaWdkaWN0X25ldzoKKyAgICAgICAgaWYgayBub3QgaW4gc2lnZGljdF9vbGQ6CisgICAgICAgICAgICB1cGRhdGVfZGljdFtrXSA9IHNpZ2RpY3RfbmV3W2tdCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBzaWdkaWN0X25ld1trXSAhPSBzaWdkaWN0X29sZFtrXToKKyAgICAgICAgICAgIHVwZGF0ZV9kaWN0W2tdID0gc2lnZGljdF9uZXdba10KKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgcmV0dXJuIHVwZGF0ZV9kaWN0CisKK2RlZiBnZXRfc3N0YXRlX29iamVjdHModXBkYXRlX2RpY3QsIG5ld3Nka19wYXRoKToKKyAgICAiIiJSZXR1cm4gYSBsaXN0IGNvbnRhaW5pbmcgc3N0YXRlIG9iamVjdHMgd2hpY2ggYXJlIHRvIGJlIGluc3RhbGxlZCIiIgorICAgIHNzdGF0ZV9vYmplY3RzID0gW10KKyAgICAjIEVuc3VyZSBuZXdzZGtfcGF0aCBwb2ludHMgdG8gYW4gZXh0ZW5zaWJsZSBTREsKKyAgICBzc3RhdGVfZGlyID0gb3MucGF0aC5qb2luKG5ld3Nka19wYXRoLCAnc3N0YXRlLWNhY2hlJykKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3N0YXRlX2Rpcik6CisgICAgICAgIGxvZ2dlci5lcnJvcigic3N0YXRlLWNhY2hlIGRpcmVjdG9yeSBub3QgZm91bmQgdW5kZXIgJXMiICUgbmV3c2RrX3BhdGgpCisgICAgICAgIHJhaXNlCisgICAgZm9yIGsgaW4gdXBkYXRlX2RpY3Q6CisgICAgICAgIGZpbGVzID0gc2V0KCkKKyAgICAgICAgaGFzaHZhbCA9IHVwZGF0ZV9kaWN0W2tdCisgICAgICAgIHAgPSBzc3RhdGVfZGlyICsgJy8nICsgaGFzaHZhbFs6Ml0gKyAnLyonICsgaGFzaHZhbCArICcqLnRneicKKyAgICAgICAgZmlsZXMgfD0gc2V0KGdsb2IuZ2xvYihwKSkKKyAgICAgICAgcCA9IHNzdGF0ZV9kaXIgKyAnLyovJyArIGhhc2h2YWxbOjJdICsgJy8qJyArIGhhc2h2YWwgKyAnKi50Z3onCisgICAgICAgIGZpbGVzIHw9IHNldChnbG9iLmdsb2IocCkpCisgICAgICAgIGZpbGVzID0gbGlzdChmaWxlcykKKyAgICAgICAgaWYgbGVuKGZpbGVzKSA9PSAxOgorICAgICAgICAgICAgc3N0YXRlX29iamVjdHMuZXh0ZW5kKGZpbGVzKQorICAgICAgICBlbGlmIGxlbihmaWxlcykgPiAxOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJNb3JlIHRoYW4gb25lIG1hdGNoaW5nIHNzdGF0ZSBvYmplY3QgZm91bmQgZm9yICVzIiAlIGhhc2h2YWwpCisKKyAgICByZXR1cm4gc3N0YXRlX29iamVjdHMKKworZGVmIG1rZGlyKGQpOgorICAgIHRyeToKKyAgICAgICAgb3MubWFrZWRpcnMoZCkKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKKyAgICAgICAgICAgIHJhaXNlIGUKKworZGVmIGluc3RhbGxfc3N0YXRlX29iamVjdHMoc3N0YXRlX29iamVjdHMsIHNyY19zZGssIGRlc3Rfc2RrKToKKyAgICAiIiJJbnN0YWxsIHNzdGF0ZSBvYmplY3RzIGludG8gZGVzdGluYXRpb24gU0RLIiIiCisgICAgc3N0YXRlX2RpciA9IG9zLnBhdGguam9pbihkZXN0X3NkaywgJ3NzdGF0ZS1jYWNoZScpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNzdGF0ZV9kaXIpOgorICAgICAgICBsb2dnZXIuZXJyb3IoIk1pc3Npbmcgc3N0YXRlLWNhY2hlIGRpcmVjdG9yeSBpbiAlcywgaXQgbWlnaHQgbm90IGJlIGFuIGV4dGVuc2libGUgU0RLLiIgJSBkZXN0X3NkaykKKyAgICAgICAgcmFpc2UKKyAgICBmb3Igc2IgaW4gc3N0YXRlX29iamVjdHM6CisgICAgICAgIGRzdCA9IHNiLnJlcGxhY2Uoc3JjX3NkaywgZGVzdF9zZGspCisgICAgICAgIGRlc3RkaXIgPSBvcy5wYXRoLmRpcm5hbWUoZHN0KQorICAgICAgICBta2RpcihkZXN0ZGlyKQorICAgICAgICBsb2dnZXIuZGVidWcoIkNvcHlpbmcgJXMgdG8gJXMiICUgKHNiLCBkc3QpKQorICAgICAgICBzaHV0aWwuY29weShzYiwgZHN0KQorCitkZWYgc2RrX3VwZGF0ZShhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgorICAgICMgRmV0Y2ggbG9ja2VkLXNpZ3MuaW5jIGZpbGUgZnJvbSByZW1vdGUvbG9jYWwgZGVzdGluYXRpb24KKyAgICBmcm9tIENvbmZpZ1BhcnNlciBpbXBvcnQgTm9TZWN0aW9uRXJyb3IKKyAgICB1cGRhdGVzZXJ2ZXIgPSBhcmdzLnVwZGF0ZXNlcnZlcgorICAgIGlmIG5vdCB1cGRhdGVzZXJ2ZXI6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHVwZGF0ZXNlcnZlciA9IGNvbmZpZy5nZXQoJ1NESycsICd1cGRhdGVzZXJ2ZXInLCBOb25lKQorICAgICAgICBleGNlcHQgTm9TZWN0aW9uRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgaWYgbm90IHVwZGF0ZXNlcnZlcjoKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJVcGRhdGUgc2VydmVyIG5vdCBzcGVjaWZpZWQgaW4gY29uZmlnIGZpbGUsIHlvdSBtdXN0IHNwZWNpZnkgaXQgb24gdGhlIGNvbW1hbmQgbGluZSIpCisgICAgbG9nZ2VyLmRlYnVnKCJ1cGRhdGVzZXJ2ZXI6ICVzIiAlIGFyZ3MudXBkYXRlc2VydmVyKQorCisgICAgIyBNYWtlIHN1cmUgd2UgYXJlIHVzaW5nIHNkay11cGRhdGUgZnJvbSB3aXRoaW4gU0RLCisgICAgbG9nZ2VyLmRlYnVnKCJiYXNlcGF0aCA9ICVzIiAlIGJhc2VwYXRoKQorICAgIG9sZF9sb2NrZWRfc2lnX2ZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihiYXNlcGF0aCwgJ2NvbmYvbG9ja2VkLXNpZ3MuaW5jJykKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob2xkX2xvY2tlZF9zaWdfZmlsZV9wYXRoKToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJOb3QgdXNpbmcgZGV2dG9vbCdzIHNkay11cGRhdGUgY29tbWFuZCBmcm9tIHdpdGhpbiBhbiBleHRlbnNpYmxlIFNESy4gUGxlYXNlIHNwZWNpZnkgY29ycmVjdCBiYXNlcGF0aCB2aWEgLS1iYXNlcGF0aCBvcHRpb24iKQorICAgICAgICByZXR1cm4gLTEKKyAgICBlbHNlOgorICAgICAgICBsb2dnZXIuZGVidWcoIkZvdW5kIGNvbmYvbG9ja2VkLXNpZ3MuaW5jIGluICVzIiAlIGJhc2VwYXRoKQorCisgICAgaWYgJzonIGluIGFyZ3MudXBkYXRlc2VydmVyOgorICAgICAgICBpc19yZW1vdGUgPSBUcnVlCisgICAgZWxzZToKKyAgICAgICAgaXNfcmVtb3RlID0gRmFsc2UKKworICAgIGlmIG5vdCBpc19yZW1vdGU6CisgICAgICAgICMgZGV2dG9vbCBzZGstdXBkYXRlIC9sb2NhbC9wYXRoL3RvL2xhdGVzdC9zZGsKKyAgICAgICAgbmV3X2xvY2tlZF9zaWdfZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKGFyZ3MudXBkYXRlc2VydmVyLCAnY29uZi9sb2NrZWQtc2lncy5pbmMnKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobmV3X2xvY2tlZF9zaWdfZmlsZV9wYXRoKToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiJXMgZG9lc24ndCBleGlzdCBvciBpcyBub3QgYW4gZXh0ZW5zaWJsZSBTREsiICUgYXJncy51cGRhdGVzZXJ2ZXIpCisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiRm91bmQgY29uZi9sb2NrZWQtc2lncy5pbmMgaW4gJXMiICUgYXJncy51cGRhdGVzZXJ2ZXIpCisgICAgICAgIHVwZGF0ZV9kaWN0ID0gZ2VuZXJhdGVfdXBkYXRlX2RpY3QobmV3X2xvY2tlZF9zaWdfZmlsZV9wYXRoLCBvbGRfbG9ja2VkX3NpZ19maWxlX3BhdGgpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygidXBkYXRlX2RpY3QgPSAlcyIgJSB1cGRhdGVfZGljdCkKKyAgICAgICAgc3N0YXRlX29iamVjdHMgPSBnZXRfc3N0YXRlX29iamVjdHModXBkYXRlX2RpY3QsIGFyZ3MudXBkYXRlc2VydmVyKQorICAgICAgICBsb2dnZXIuZGVidWcoInNzdGF0ZV9vYmplY3RzID0gJXMiICUgc3N0YXRlX29iamVjdHMpCisgICAgICAgIGlmIGxlbihzc3RhdGVfb2JqZWN0cykgPT0gMDoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJObyBuZWVkIHRvIHVwZGF0ZS4iKQorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgbG9nZ2VyLmluZm8oIkluc3RhbGxpbmcgc3N0YXRlIG9iamVjdHMgaW50byAlcyIsIGJhc2VwYXRoKQorICAgICAgICBpbnN0YWxsX3NzdGF0ZV9vYmplY3RzKHNzdGF0ZV9vYmplY3RzLCBhcmdzLnVwZGF0ZXNlcnZlci5yc3RyaXAoJy8nKSwgYmFzZXBhdGgpCisgICAgICAgIGxvZ2dlci5pbmZvKCJVcGRhdGluZyBjb25maWd1cmF0aW9uIGZpbGVzIikKKyAgICAgICAgbmV3X2NvbmZfZGlyID0gb3MucGF0aC5qb2luKGFyZ3MudXBkYXRlc2VydmVyLCAnY29uZicpCisgICAgICAgIG9sZF9jb25mX2RpciA9IG9zLnBhdGguam9pbihiYXNlcGF0aCwgJ2NvbmYnKQorICAgICAgICBzaHV0aWwucm10cmVlKG9sZF9jb25mX2RpcikKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKG5ld19jb25mX2Rpciwgb2xkX2NvbmZfZGlyKQorICAgICAgICBsb2dnZXIuaW5mbygiVXBkYXRpbmcgbGF5ZXJzIikKKyAgICAgICAgbmV3X2xheWVyc19kaXIgPSBvcy5wYXRoLmpvaW4oYXJncy51cGRhdGVzZXJ2ZXIsICdsYXllcnMnKQorICAgICAgICBvbGRfbGF5ZXJzX2RpciA9IG9zLnBhdGguam9pbihiYXNlcGF0aCwgJ2xheWVycycpCisgICAgICAgIHNodXRpbC5ybXRyZWUob2xkX2xheWVyc19kaXIpCisgICAgICAgIHNodXRpbC5jb3B5dHJlZShuZXdfbGF5ZXJzX2Rpciwgb2xkX2xheWVyc19kaXIpCisgICAgZWxzZToKKyAgICAgICAgIyBkZXZ0b29sIHNkay11cGRhdGUgaHR0cDovL215aG9zdC9zZGsKKyAgICAgICAgdG1wc2RrX2RpciA9ICcvdG1wL3Nkay1leHQnCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHRtcHNka19kaXIpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0bXBzZGtfZGlyKQorICAgICAgICBvcy5tYWtlZGlycyh0bXBzZGtfZGlyKQorICAgICAgICBvcy5tYWtlZGlycyhvcy5wYXRoLmpvaW4odG1wc2RrX2RpciwgJ2NvbmYnKSkKKyAgICAgICAgIyBGZXRjaCBsb2NrZWQtc2lncy5pbmMgZnJvbSB1cGRhdGUgc2VydmVyCisgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgid2dldCAtcSAtTyAtICVzL2NvbmYvbG9ja2VkLXNpZ3MuaW5jID4gJXMvbG9ja2VkLXNpZ3MuaW5jIiAlIChhcmdzLnVwZGF0ZXNlcnZlciwgb3MucGF0aC5qb2luKHRtcHNka19kaXIsICdjb25mJykpLCBzaGVsbD1UcnVlKQorICAgICAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiRmV0Y2hpbmcgY29uZi9sb2NrZWQtc2lncy5pbmMgZnJvbSAlcyB0byAlcy9sb2NrZWQtc2lncy5pbmMgZmFpbGVkIiAlIChhcmdzLnVwZGF0ZXNlcnZlciwgb3MucGF0aC5qb2luKHRtcHNka19kaXIsICdjb25mJykpKQorICAgICAgICAgICAgcmV0dXJuIHJldAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkZldGNoaW5nIGNvbmYvbG9ja2VkLXNpZ3MuaW5jIGZyb20gJXMgdG8gJXMvbG9ja2VkLXNpZ3MuaW5jIHN1Y2NlZWRlZCIgJSAoYXJncy51cGRhdGVzZXJ2ZXIsIG9zLnBhdGguam9pbih0bXBzZGtfZGlyLCAnY29uZicpKSkKKyAgICAgICAgbmV3X2xvY2tlZF9zaWdfZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHRtcHNka19kaXIsICdjb25mL2xvY2tlZC1zaWdzLmluYycpCisgICAgICAgIHVwZGF0ZV9kaWN0ID0gZ2VuZXJhdGVfdXBkYXRlX2RpY3QobmV3X2xvY2tlZF9zaWdfZmlsZV9wYXRoLCBvbGRfbG9ja2VkX3NpZ19maWxlX3BhdGgpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygidXBkYXRlX2RpY3QgPSAlcyIgJSB1cGRhdGVfZGljdCkKKyAgICAgICAgaWYgbGVuKHVwZGF0ZV9kaWN0KSA9PSAwOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIk5vIG5lZWQgdG8gdXBkYXRlLiIpCisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAjIFVwZGF0ZSBtZXRhZGF0YQorICAgICAgICBsb2dnZXIuZGVidWcoIlVwZGF0aW5nIG1ldGEgZGF0YSB2aWEgZ2l0IC4uLiIpCisgICAgICAgICMgVHJ5IHVzaW5nICdnaXQgcHVsbCcsIGlmIGZhaWxlZCwgdXNlICdnaXQgY2xvbmUnCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihiYXNlcGF0aCwgJ2xheWVycy8uZ2l0JykpOgorICAgICAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKCJjZCBsYXllcnMgJiYgZ2l0IHB1bGwiLCBzaGVsbD1UcnVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0ID0gLTEKKyAgICAgICAgaWYgcmV0ICE9IDA6CisgICAgICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoInJtIC1yZiBsYXllcnMgJiYgZ2l0IGNsb25lICVzL2xheWVycyIgJSBhcmdzLnVwZGF0ZXNlcnZlciwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgaWYgcmV0ICE9IDA6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVwZGF0aW5nIG1ldGEgZGF0YSB2aWEgZ2l0IGZhaWxlZCIpCisgICAgICAgICAgICByZXR1cm4gcmV0CisgICAgICAgIGxvZ2dlci5kZWJ1ZygiVXBkYXRpbmcgY29uZiBmaWxlcyAuLi4iKQorICAgICAgICBjb25mX2ZpbGVzID0gWydsb2NhbC5jb25mJywgJ2JibGF5ZXJzLmNvbmYnLCAnZGV2dG9vbC5jb25mJywgJ3dvcmstY29uZmlnLmluYycsICdsb2NrZWQtc2lncy5pbmMnXQorICAgICAgICBmb3IgY29uZiBpbiBjb25mX2ZpbGVzOgorICAgICAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKCJ3Z2V0IC1xIC1PIC0gJXMvY29uZi8lcyA+IGNvbmYvJXMiICUgKGFyZ3MudXBkYXRlc2VydmVyLCBjb25mLCBjb25mKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIGlmIHJldCAhPSAwOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVXBkYXRlICVzIGZhaWxlZCIgJSBjb25mKQorICAgICAgICAgICAgICAgIHJldHVybiByZXQKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihiYXNlcGF0aCwgJ2NvbmYvbG9jYWwuY29uZicpLCAnYScpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCdTU1RBVEVfTUlSUk9SU19hcHBlbmQgPSAiIGZpbGU6Ly8uKiAlcy9zc3RhdGUtY2FjaGUvUEFUSCBcXG4gIlxuJyAlIGFyZ3MudXBkYXRlc2VydmVyKQorCisgICAgIyBSdW4gYml0YmFrZSBjb21tYW5kIGZvciB0aGUgd2hvbGUgU0RLCisgICAgc2RrX3RhcmdldHMgPSBjb25maWcuZ2V0KCdTREsnLCAnc2RrX3RhcmdldHMnKQorICAgIGxvZ2dlci5pbmZvKCJFeGVjdXRpbmcgJ2JpdGJha2UgJXMnIC4uLiAoVGhpcyBtYXkgdGFrZSBzb21lIHRpbWUuKSIgJSBzZGtfdGFyZ2V0cykKKyAgICB0cnk6CisgICAgICAgIGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQoY29uZmlnLmluaXRfcGF0aCwgYmFzZXBhdGgsICdiaXRiYWtlICVzJyAlIHNka190YXJnZXRzKQorICAgIGV4Y2VwdDoKKyAgICAgICAgbG9nZ2VyLmVycm9yKCdiaXRiYWtlICVzIGZhaWxlZCcgJSBzZGtfdGFyZ2V0cykKKyAgICAgICAgcmV0dXJuIC0xCisgICAgcmV0dXJuIDAKKworZGVmIHJlZ2lzdGVyX2NvbW1hbmRzKHN1YnBhcnNlcnMsIGNvbnRleHQpOgorICAgICIiIlJlZ2lzdGVyIGRldnRvb2wgc3ViY29tbWFuZHMgZnJvbSB0aGUgc2RrIHBsdWdpbiIiIgorICAgIGlmIGNvbnRleHQuZml4ZWRfc2V0dXA6CisgICAgICAgIHBhcnNlcl9zZGsgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ3Nkay11cGRhdGUnLCBoZWxwPSdVcGRhdGUgU0RLIGNvbXBvbmVudHMgZnJvbSBhIG5vbWluYXRlZCBsb2NhdGlvbicpCisgICAgICAgIHBhcnNlcl9zZGsuYWRkX2FyZ3VtZW50KCd1cGRhdGVzZXJ2ZXInLCBoZWxwPSdUaGUgdXBkYXRlIHNlcnZlciB0byBmZXRjaCBsYXRlc3QgU0RLIGNvbXBvbmVudHMgZnJvbScsIG5hcmdzPSc/JykKKyAgICAgICAgcGFyc2VyX3Nkay5zZXRfZGVmYXVsdHMoZnVuYz1zZGtfdXBkYXRlKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3N0YW5kYXJkLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3N0YW5kYXJkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1OTAwYjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvc3RhbmRhcmQucHkKQEAgLTAsMCArMSw5MzAgQEAKKyMgRGV2ZWxvcG1lbnQgdG9vbCAtIHN0YW5kYXJkIGNvbW1hbmRzIHBsdWdpbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyIiIkRldnRvb2wgc3RhbmRhcmQgcGx1Z2lucyIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgc2NyaXB0dXRpbHMKK2ltcG9ydCBlcnJubworZnJvbSBkZXZ0b29sIGltcG9ydCBleGVjX2J1aWxkX2Vudl9jb21tYW5kLCBzZXR1cF90aW5mb2lsLCBEZXZ0b29sRXJyb3IKK2Zyb20gZGV2dG9vbCBpbXBvcnQgcGFyc2VfcmVjaXBlCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdkZXZ0b29sJykKKworCitkZWYgYWRkKGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CisgICAgIiIiRW50cnkgcG9pbnQgZm9yIHRoZSBkZXZ0b29sICdhZGQnIHN1YmNvbW1hbmQiIiIKKyAgICBpbXBvcnQgYmIKKyAgICBpbXBvcnQgb2UucmVjaXBldXRpbHMKKworICAgIGlmIGFyZ3MucmVjaXBlbmFtZSBpbiB3b3Jrc3BhY2U6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigicmVjaXBlICVzIGlzIGFscmVhZHkgaW4geW91ciB3b3Jrc3BhY2UiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnJlY2lwZW5hbWUpCisKKyAgICByZWFzb24gPSBvZS5yZWNpcGV1dGlscy52YWxpZGF0ZV9wbihhcmdzLnJlY2lwZW5hbWUpCisgICAgaWYgcmVhc29uOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IocmVhc29uKQorCisgICAgc3JjdHJlZSA9IG9zLnBhdGguYWJzcGF0aChhcmdzLnNyY3RyZWUpCisgICAgaWYgb3MucGF0aC5leGlzdHMoc3JjdHJlZSk6CisgICAgICAgIGlmIGFyZ3MuZmV0Y2g6CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzcmN0cmVlKToKKyAgICAgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIkNhbm5vdCBmZXRjaCBpbnRvIHNvdXJjZSB0cmVlIHBhdGggJXMgYXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaXQgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjdHJlZSkKKyAgICAgICAgICAgIGVsaWYgb3MubGlzdGRpcihzcmN0cmVlKToKKyAgICAgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIkNhbm5vdCBmZXRjaCBpbnRvIHNvdXJjZSB0cmVlIHBhdGggJXMgYXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaXQgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vbi1lbXB0eSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmN0cmVlKQorICAgIGVsaWYgbm90IGFyZ3MuZmV0Y2g6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiU3BlY2lmaWVkIHNvdXJjZSB0cmVlICVzIGNvdWxkIG5vdCBiZSBmb3VuZCIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjdHJlZSkKKworICAgIGFwcGVuZHBhdGggPSBvcy5wYXRoLmpvaW4oY29uZmlnLndvcmtzcGFjZV9wYXRoLCAnYXBwZW5kcycpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGFwcGVuZHBhdGgpOgorICAgICAgICBvcy5tYWtlZGlycyhhcHBlbmRwYXRoKQorCisgICAgcmVjaXBlZGlyID0gb3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJ3JlY2lwZXMnLCBhcmdzLnJlY2lwZW5hbWUpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKHJlY2lwZWRpcikKKyAgICByZnYgPSBOb25lCisgICAgaWYgYXJncy52ZXJzaW9uOgorICAgICAgICBpZiAnXycgaW4gYXJncy52ZXJzaW9uIG9yICcgJyBpbiBhcmdzLnZlcnNpb246CisgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ0ludmFsaWQgdmVyc2lvbiBzdHJpbmcgIiVzIicgJSBhcmdzLnZlcnNpb24pCisgICAgICAgIHJmdiA9IGFyZ3MudmVyc2lvbgorICAgIGlmIGFyZ3MuZmV0Y2g6CisgICAgICAgIGlmIGFyZ3MuZmV0Y2guc3RhcnRzd2l0aCgnZ2l0Oi8vJyk6CisgICAgICAgICAgICByZnYgPSAnZ2l0JworICAgICAgICBlbGlmIGFyZ3MuZmV0Y2guc3RhcnRzd2l0aCgnc3ZuOi8vJyk6CisgICAgICAgICAgICByZnYgPSAnc3ZuJworICAgICAgICBlbGlmIGFyZ3MuZmV0Y2guc3RhcnRzd2l0aCgnaGc6Ly8nKToKKyAgICAgICAgICAgIHJmdiA9ICdoZycKKyAgICBpZiByZnY6CisgICAgICAgIGJwID0gIiVzXyVzIiAlIChhcmdzLnJlY2lwZW5hbWUsIHJmdikKKyAgICBlbHNlOgorICAgICAgICBicCA9IGFyZ3MucmVjaXBlbmFtZQorICAgIHJlY2lwZWZpbGUgPSBvcy5wYXRoLmpvaW4ocmVjaXBlZGlyLCAiJXMuYmIiICUgYnApCisgICAgaWYgc3lzLnN0ZG91dC5pc2F0dHkoKToKKyAgICAgICAgY29sb3IgPSAnYWx3YXlzJworICAgIGVsc2U6CisgICAgICAgIGNvbG9yID0gYXJncy5jb2xvcgorICAgIGV4dHJhY21kb3B0cyA9ICcnCisgICAgaWYgYXJncy5mZXRjaDoKKyAgICAgICAgc291cmNlID0gYXJncy5mZXRjaAorICAgICAgICBleHRyYWNtZG9wdHMgPSAnLXggJXMnICUgc3JjdHJlZQorICAgIGVsc2U6CisgICAgICAgIHNvdXJjZSA9IHNyY3RyZWUKKyAgICBpZiBhcmdzLnZlcnNpb246CisgICAgICAgIGV4dHJhY21kb3B0cyArPSAnIC1WICVzJyAlIGFyZ3MudmVyc2lvbgorICAgIHRyeToKKyAgICAgICAgc3Rkb3V0LCBfID0gZXhlY19idWlsZF9lbnZfY29tbWFuZChjb25maWcuaW5pdF9wYXRoLCBiYXNlcGF0aCwgJ3JlY2lwZXRvb2wgLS1jb2xvcj0lcyBjcmVhdGUgLW8gJXMgIiVzIiAlcycgJSAoY29sb3IsIHJlY2lwZWZpbGUsIHNvdXJjZSwgZXh0cmFjbWRvcHRzKSkKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1JlY2lwZSAlcyBoYXMgYmVlbiBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQ7IGZ1cnRoZXIgZWRpdGluZyBtYXkgYmUgcmVxdWlyZWQgdG8gbWFrZSBpdCBmdWxseSBmdW5jdGlvbmFsJyAlIHJlY2lwZWZpbGUpCisgICAgZXhjZXB0IGJiLnByb2Nlc3MuRXhlY3V0aW9uRXJyb3IgYXMgZToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdDb21tYW5kIFwnJXNcJyBmYWlsZWQ6XG4lcycgJSAoZS5jb21tYW5kLCBlLnN0ZG91dCkpCisKKyAgICBfYWRkX21kNShjb25maWcsIGFyZ3MucmVjaXBlbmFtZSwgcmVjaXBlZmlsZSkKKworICAgIGluaXRpYWxfcmV2ID0gTm9uZQorICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzcmN0cmVlLCAnLmdpdCcpKToKKyAgICAgICAgKHN0ZG91dCwgXykgPSBiYi5wcm9jZXNzLnJ1bignZ2l0IHJldi1wYXJzZSBIRUFEJywgY3dkPXNyY3RyZWUpCisgICAgICAgIGluaXRpYWxfcmV2ID0gc3Rkb3V0LnJzdHJpcCgpCisKKyAgICBhcHBlbmRmaWxlID0gb3MucGF0aC5qb2luKGFwcGVuZHBhdGgsICclcy5iYmFwcGVuZCcgJSBicCkKKyAgICB3aXRoIG9wZW4oYXBwZW5kZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICBmLndyaXRlKCdpbmhlcml0IGV4dGVybmFsc3JjXG4nKQorICAgICAgICBmLndyaXRlKCdFWFRFUk5BTFNSQyA9ICIlcyJcbicgJSBzcmN0cmVlKQorICAgICAgICBpZiBhcmdzLnNhbWVfZGlyOgorICAgICAgICAgICAgZi53cml0ZSgnRVhURVJOQUxTUkNfQlVJTEQgPSAiJXMiXG4nICUgc3JjdHJlZSkKKyAgICAgICAgaWYgaW5pdGlhbF9yZXY6CisgICAgICAgICAgICBmLndyaXRlKCdcbiMgaW5pdGlhbF9yZXY6ICVzXG4nICUgaW5pdGlhbF9yZXYpCisKKyAgICBfYWRkX21kNShjb25maWcsIGFyZ3MucmVjaXBlbmFtZSwgYXBwZW5kZmlsZSkKKworICAgIHJldHVybiAwCisKKworZGVmIF9jaGVja19jb21wYXRpYmxlX3JlY2lwZShwbiwgZCk6CisgICAgIiIiQ2hlY2sgaWYgdGhlIHJlY2lwZSBpcyBzdXBwb3J0ZWQgYnkgZGV2dG9vbCIiIgorICAgIGlmIHBuID09ICdwZXJmJzoKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJUaGUgcGVyZiByZWNpcGUgZG9lcyBub3QgYWN0dWFsbHkgY2hlY2sgb3V0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UgYW5kIHRodXMgY2Fubm90IGJlIHN1cHBvcnRlZCBieSB0aGlzIHRvb2wiKQorCisgICAgaWYgcG4gaW4gWydrZXJuZWwtZGV2c3JjJywgJ3BhY2thZ2UtaW5kZXgnXSBvciBwbi5zdGFydHN3aXRoKCdnY2Mtc291cmNlJyk6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiVGhlICVzIHJlY2lwZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgdG9vbCIgJSBwbikKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2ltYWdlJywgZCk6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiVGhlICVzIHJlY2lwZSBpcyBhbiBpbWFnZSwgYW5kIHRoZXJlZm9yZSBpcyBub3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cHBvcnRlZCBieSB0aGlzIHRvb2wiICUgcG4pCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdwb3B1bGF0ZV9zZGsnLCBkKToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJUaGUgJXMgcmVjaXBlIGlzIGFuIFNESywgYW5kIHRoZXJlZm9yZSBpcyBub3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cHBvcnRlZCBieSB0aGlzIHRvb2wiICUgcG4pCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdwYWNrYWdlZ3JvdXAnLCBkKToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJUaGUgJXMgcmVjaXBlIGlzIGEgcGFja2FnZWdyb3VwLCBhbmQgdGhlcmVmb3JlIGlzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgdG9vbCIgJSBwbikKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ21ldGEnLCBkKToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJUaGUgJXMgcmVjaXBlIGlzIGEgbWV0YS1yZWNpcGUsIGFuZCB0aGVyZWZvcmUgaXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBzdXBwb3J0ZWQgYnkgdGhpcyB0b29sIiAlIHBuKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnZXh0ZXJuYWxzcmMnLCBkKSBhbmQgZC5nZXRWYXIoJ0VYVEVSTkFMU1JDJywgVHJ1ZSk6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiZXh0ZXJuYWxzcmMgaXMgY3VycmVudGx5IGVuYWJsZWQgZm9yIHRoZSAlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVjaXBlLiBUaGlzIHByZXZlbnRzIHRoZSBub3JtYWwgZG9fcGF0Y2ggdGFzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJvbSB3b3JraW5nLiBZb3Ugd2lsbCBuZWVkIHRvIGRpc2FibGUgdGhpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlyc3QuIiAlIHBuKQorCitkZWYgX2xzX3RyZWUoZGlyZWN0b3J5KToKKyAgICAiIiJSZWN1cnNpdmUgbGlzdGluZyBvZiBmaWxlcyBpbiBhIGRpcmVjdG9yeSIiIgorICAgIHJldCA9IFtdCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoZGlyZWN0b3J5KToKKyAgICAgICAgcmV0LmV4dGVuZChbb3MucGF0aC5yZWxwYXRoKG9zLnBhdGguam9pbihyb290LCBmbmFtZSksIGRpcmVjdG9yeSkgZm9yCisgICAgICAgICAgICAgICAgICAgIGZuYW1lIGluIGZpbGVzXSkKKyAgICByZXR1cm4gcmV0CisKKworZGVmIGV4dHJhY3QoYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKKyAgICAiIiJFbnRyeSBwb2ludCBmb3IgdGhlIGRldnRvb2wgJ2V4dHJhY3QnIHN1YmNvbW1hbmQiIiIKKyAgICBpbXBvcnQgYmIKKworICAgIHRpbmZvaWwgPSBfcHJlcF9leHRyYWN0X29wZXJhdGlvbihjb25maWcsIGJhc2VwYXRoLCBhcmdzLnJlY2lwZW5hbWUpCisKKyAgICByZCA9IHBhcnNlX3JlY2lwZShjb25maWcsIHRpbmZvaWwsIGFyZ3MucmVjaXBlbmFtZSwgVHJ1ZSkKKyAgICBpZiBub3QgcmQ6CisgICAgICAgIHJldHVybiAxCisKKyAgICBzcmN0cmVlID0gb3MucGF0aC5hYnNwYXRoKGFyZ3Muc3JjdHJlZSkKKyAgICBpbml0aWFsX3JldiA9IF9leHRyYWN0X3NvdXJjZShzcmN0cmVlLCBhcmdzLmtlZXBfdGVtcCwgYXJncy5icmFuY2gsIHJkKQorICAgIGxvZ2dlci5pbmZvKCdTb3VyY2UgdHJlZSBleHRyYWN0ZWQgdG8gJXMnICUgc3JjdHJlZSkKKworICAgIGlmIGluaXRpYWxfcmV2OgorICAgICAgICByZXR1cm4gMAorICAgIGVsc2U6CisgICAgICAgIHJldHVybiAxCisKK2NsYXNzIEJiVGFza0V4ZWN1dG9yKG9iamVjdCk6CisgICAgIiIiQ2xhc3MgZm9yIGV4ZWN1dGluZyBiaXRiYWtlIHRhc2tzIGZvciBhIHJlY2lwZQorCisgICAgRklYTUU6IFRoaXMgaXMgdmVyeSBhd2t3YXJkLiBVbmZvcnR1bmF0ZWx5IGl0J3Mgbm90IGN1cnJlbnRseSBlYXN5IHRvCisgICAgcHJvcGVybHkgZXhlY3V0ZSB0YXNrcyBvdXRzaWRlIG9mIGJpdGJha2UgaXRzZWxmLCB1bnRpbCB0aGVuIHRoaXMgaGFzIHRvCisgICAgc3VmZmljZSBpZiB3ZSBhcmUgdG8gaGFuZGxlIGUuZy4gbGludXgteW9jdG8ncyBleHRyYSB0YXNrcworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJkYXRhKToKKyAgICAgICAgc2VsZi5yZGF0YSA9IHJkYXRhCisgICAgICAgIHNlbGYuZXhlY3V0ZWQgPSBbXQorCisgICAgZGVmIGV4ZWNfZnVuYyhzZWxmLCBmdW5jLCByZXBvcnQpOgorICAgICAgICAiIiJSdW4gYml0YmFrZSB0YXNrIGZ1bmN0aW9uIiIiCisgICAgICAgIGlmIG5vdCBmdW5jIGluIHNlbGYuZXhlY3V0ZWQ6CisgICAgICAgICAgICBkZXBzID0gc2VsZi5yZGF0YS5nZXRWYXJGbGFnKGZ1bmMsICdkZXBzJykKKyAgICAgICAgICAgIGlmIGRlcHM6CisgICAgICAgICAgICAgICAgZm9yIHRhc2tkZXBmdW5jIGluIGRlcHM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhlY19mdW5jKHRhc2tkZXBmdW5jLCBUcnVlKQorICAgICAgICAgICAgaWYgcmVwb3J0OgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdFeGVjdXRpbmcgJXMuLi4nICUgZnVuYykKKyAgICAgICAgICAgIGZuID0gc2VsZi5yZGF0YS5nZXRWYXIoJ0ZJTEUnLCBUcnVlKQorICAgICAgICAgICAgbG9jYWxkYXRhID0gYmIuYnVpbGQuX3Rhc2tfZGF0YShmbiwgZnVuYywgc2VsZi5yZGF0YSkKKyAgICAgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhmdW5jLCBsb2NhbGRhdGEpCisgICAgICAgICAgICBzZWxmLmV4ZWN1dGVkLmFwcGVuZChmdW5jKQorCisKK2RlZiBfcHJlcF9leHRyYWN0X29wZXJhdGlvbihjb25maWcsIGJhc2VwYXRoLCByZWNpcGVuYW1lKToKKyAgICAiIiJIQUNLOiBVZ2x5IHdvcmthcm91bmQgZm9yIG1ha2luZyBzdXJlIHRoYXQgcmVxdWlyZW1lbnRzIGFyZSBtZXQgd2hlbgorICAgICAgIHRyeWluZyB0byBleHRyYWN0IGEgcGFja2FnZS4gUmV0dXJucyB0aGUgdGluZm9pbCBpbnN0YW5jZSB0byBiZSB1c2VkLiIiIgorICAgIHRpbmZvaWwgPSBzZXR1cF90aW5mb2lsKCkKKyAgICByZCA9IHBhcnNlX3JlY2lwZShjb25maWcsIHRpbmZvaWwsIHJlY2lwZW5hbWUsIFRydWUpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwteW9jdG8nLCByZCk6CisgICAgICAgIHRpbmZvaWwuc2h1dGRvd24oKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdGRvdXQsIF8gPSBleGVjX2J1aWxkX2Vudl9jb21tYW5kKGNvbmZpZy5pbml0X3BhdGgsIGJhc2VwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYml0YmFrZSBrZXJuLXRvb2xzLW5hdGl2ZScpCisgICAgICAgICAgICB0aW5mb2lsID0gc2V0dXBfdGluZm9pbCgpCisgICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiRmFpbGVkIHRvIGJ1aWxkIGtlcm4tdG9vbHMtbmF0aXZlOlxuJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIuc3Rkb3V0KQorICAgIHJldHVybiB0aW5mb2lsCisKKworZGVmIF9leHRyYWN0X3NvdXJjZShzcmN0cmVlLCBrZWVwX3RlbXAsIGRldmJyYW5jaCwgZCk6CisgICAgIiIiRXh0cmFjdCBzb3VyY2VzIG9mIGEgcmVjaXBlIiIiCisgICAgaW1wb3J0IGJiLmV2ZW50CisgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisKKyAgICBkZWYgZXZlbnRmaWx0ZXIobmFtZSwgaGFuZGxlciwgZXZlbnQsIGQpOgorICAgICAgICAiIiJCaXRiYWtlIGV2ZW50IGZpbHRlciBmb3IgZGV2dG9vbCBleHRyYWN0IG9wZXJhdGlvbiIiIgorICAgICAgICBpZiBuYW1lID09ICdiYXNlX2V2ZW50aGFuZGxlcic6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBoYXNhdHRyKGJiLmV2ZW50LCAnc2V0X2V2ZW50ZmlsdGVyJyk6CisgICAgICAgIGJiLmV2ZW50LnNldF9ldmVudGZpbHRlcihldmVudGZpbHRlcikKKworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgIF9jaGVja19jb21wYXRpYmxlX3JlY2lwZShwbiwgZCkKKworICAgIGlmIG9zLnBhdGguZXhpc3RzKHNyY3RyZWUpOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzcmN0cmVlKToKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigib3V0cHV0IHBhdGggJXMgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmN0cmVlKQorICAgICAgICBlbGlmIG9zLmxpc3RkaXIoc3JjdHJlZSk6CisgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIm91dHB1dCBwYXRoICVzIGFscmVhZHkgZXhpc3RzIGFuZCBpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vbi1lbXB0eSIgJSBzcmN0cmVlKQorCisgICAgIyBQcmVwYXJlIGZvciBzaHV0aWwubW92ZSBsYXRlciBvbgorICAgIGJiLnV0aWxzLm1rZGlyaGllcihzcmN0cmVlKQorICAgIG9zLnJtZGlyKHNyY3RyZWUpCisKKyAgICAjIFdlIGRvbid0IHdhbnQgbm90ZXMgdG8gYmUgcHJpbnRlZCwgdGhleSBhcmUgdG9vIHZlcmJvc2UKKyAgICBvcmlnbGV2ZWwgPSBiYi5sb2dnZXIuZ2V0RWZmZWN0aXZlTGV2ZWwoKQorICAgIGlmIGxvZ2dlci5nZXRFZmZlY3RpdmVMZXZlbCgpID4gbG9nZ2luZy5ERUJVRzoKKyAgICAgICAgYmIubG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuV0FSTklORykKKworICAgIGluaXRpYWxfcmV2ID0gTm9uZQorICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbCcpCisgICAgdHJ5OgorICAgICAgICBjcmQgPSBkLmNyZWF0ZUNvcHkoKQorICAgICAgICAjIE1ha2UgYSBzdWJkaXIgc28gd2UgZ3VhcmQgYWdhaW5zdCBXT1JLRElSPT1TCisgICAgICAgIHdvcmtkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ3dvcmtkaXInKQorICAgICAgICBjcmQuc2V0VmFyKCdXT1JLRElSJywgd29ya2RpcikKKyAgICAgICAgY3JkLnNldFZhcignVCcsIG9zLnBhdGguam9pbih0ZW1wZGlyLCAndGVtcCcpKQorICAgICAgICBpZiBub3QgY3JkLmdldFZhcignUycsIFRydWUpLnN0YXJ0c3dpdGgod29ya2Rpcik6CisgICAgICAgICAgICAjIFVzdWFsbHkgYSBzaGFyZWQgd29ya2RpciByZWNpcGUgKGtlcm5lbCwgZ2NjKQorICAgICAgICAgICAgIyBUcnkgdG8gc2V0IGEgcmVhc29uYWJsZSBkZWZhdWx0CisgICAgICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwnLCBkKToKKyAgICAgICAgICAgICAgICBjcmQuc2V0VmFyKCdTJywgJyR7V09SS0RJUn0vc291cmNlJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY3JkLnNldFZhcignUycsICcke1dPUktESVJ9LyR7QlB9JykKKyAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygna2VybmVsJywgZCk6CisgICAgICAgICAgICAjIFdlIGRvbid0IHdhbnQgdG8gbW92ZSB0aGUgc291cmNlIHRvIFNUQUdJTkdfS0VSTkVMX0RJUiBoZXJlCisgICAgICAgICAgICBjcmQuc2V0VmFyKCdTVEFHSU5HX0tFUk5FTF9ESVInLCAnJHtTfScpCisKKyAgICAgICAgdGFza19leGVjdXRvciA9IEJiVGFza0V4ZWN1dG9yKGNyZCkKKworICAgICAgICBjcmQuc2V0VmFyKCdFWFRFUk5BTFNSQ19mb3JjZXZhcmlhYmxlJywgJycpCisKKyAgICAgICAgbG9nZ2VyLmluZm8oJ0ZldGNoaW5nICVzLi4uJyAlIHBuKQorICAgICAgICB0YXNrX2V4ZWN1dG9yLmV4ZWNfZnVuYygnZG9fZmV0Y2gnLCBGYWxzZSkKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1VucGFja2luZy4uLicpCisgICAgICAgIHRhc2tfZXhlY3V0b3IuZXhlY19mdW5jKCdkb191bnBhY2snLCBGYWxzZSkKKyAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygna2VybmVsLXlvY3RvJywgZCk6CisgICAgICAgICAgICAjIEV4dHJhIHN0ZXAgZm9yIGtlcm5lbCB0byBwb3B1bGF0ZSB0aGUgc291cmNlIGRpcmVjdG9yeQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0RvaW5nIGtlcm5lbCBjaGVja291dC4uLicpCisgICAgICAgICAgICB0YXNrX2V4ZWN1dG9yLmV4ZWNfZnVuYygnZG9fa2VybmVsX2NoZWNrb3V0JywgRmFsc2UpCisgICAgICAgIHNyY3N1YmRpciA9IGNyZC5nZXRWYXIoJ1MnLCBUcnVlKQorICAgICAgICBpZiBzcmNzdWJkaXIgPT0gd29ya2RpcjoKKyAgICAgICAgICAgICMgRmluZCBub24tcGF0Y2ggc291cmNlcyB0aGF0IHdlcmUgInVucGFja2VkIiB0byBzcmN0cmVlIGRpcmVjdG9yeQorICAgICAgICAgICAgcmVjaXBlX3BhdGNoZXMgPSBbb3MucGF0aC5iYXNlbmFtZShwYXRjaCkgZm9yIHBhdGNoIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZS5yZWNpcGV1dGlscy5nZXRfcmVjaXBlX3BhdGNoZXMoY3JkKV0KKyAgICAgICAgICAgIHNyY19maWxlcyA9IFtmbmFtZSBmb3IgZm5hbWUgaW4gX2xzX3RyZWUod29ya2RpcikgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKGZuYW1lKSBub3QgaW4gcmVjaXBlX3BhdGNoZXNdCisgICAgICAgICAgICAjIEZvcmNlIHNlcGFyYXRlIFMgc28gdGhhdCBwYXRjaCBmaWxlcyBjYW4gYmUgbGVmdCBvdXQgZnJvbSBzcmN0cmVlCisgICAgICAgICAgICBzcmNzdWJkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKGRpcj13b3JrZGlyKQorICAgICAgICAgICAgY3JkLnNldFZhcignUycsIHNyY3N1YmRpcikKKyAgICAgICAgICAgICMgTW92ZSBzb3VyY2UgZmlsZXMgdG8gUworICAgICAgICAgICAgZm9yIHBhdGggaW4gc3JjX2ZpbGVzOgorICAgICAgICAgICAgICAgIHRndF9kaXIgPSBvcy5wYXRoLmpvaW4oc3Jjc3ViZGlyLCBvcy5wYXRoLmRpcm5hbWUocGF0aCkpCisgICAgICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHRndF9kaXIpCisgICAgICAgICAgICAgICAgc2h1dGlsLm1vdmUob3MucGF0aC5qb2luKHdvcmtkaXIsIHBhdGgpLCB0Z3RfZGlyKQorICAgICAgICBlbGlmIG9zLnBhdGguZGlybmFtZShzcmNzdWJkaXIpICE9IHdvcmtkaXI6CisgICAgICAgICAgICAjIEhhbmRsZSBpZiBTIGlzIHNldCB0byBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgc291cmNlCisgICAgICAgICAgICBzcmNzdWJkaXIgPSBvcy5wYXRoLmpvaW4od29ya2Rpciwgb3MucGF0aC5yZWxwYXRoKHNyY3N1YmRpciwgd29ya2Rpcikuc3BsaXQob3Muc2VwKVswXSkKKworICAgICAgICBzY3JpcHR1dGlscy5naXRfY29udmVydF9zdGFuZGFsb25lX2Nsb25lKHNyY3N1YmRpcikKKworICAgICAgICBwYXRjaGRpciA9IG9zLnBhdGguam9pbihzcmNzdWJkaXIsICdwYXRjaGVzJykKKyAgICAgICAgaGFzcGF0Y2hlcyA9IEZhbHNlCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGNoZGlyKToKKyAgICAgICAgICAgIGlmIG9zLmxpc3RkaXIocGF0Y2hkaXIpOgorICAgICAgICAgICAgICAgIGhhc3BhdGNoZXMgPSBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9zLnJtZGlyKHBhdGNoZGlyKQorCisgICAgICAgIGlmIG5vdCBvcy5saXN0ZGlyKHNyY3N1YmRpcik6CisgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIm5vIHNvdXJjZSB1bnBhY2tlZCB0byBTLCBwZXJoYXBzIHRoZSAlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlY2lwZSBkb2Vzbid0IHVzZSBhbnkgc291cmNlPyIgJSBwbikKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNyY3N1YmRpciwgJy5naXQnKSk6CisgICAgICAgICAgICBiYi5wcm9jZXNzLnJ1bignZ2l0IGluaXQnLCBjd2Q9c3Jjc3ViZGlyKQorICAgICAgICAgICAgYmIucHJvY2Vzcy5ydW4oJ2dpdCBhZGQgLicsIGN3ZD1zcmNzdWJkaXIpCisgICAgICAgICAgICBiYi5wcm9jZXNzLnJ1bignZ2l0IGNvbW1pdCAtcSAtbSAiSW5pdGlhbCBjb21taXQgZnJvbSB1cHN0cmVhbSBhdCB2ZXJzaW9uICVzIicgJSBjcmQuZ2V0VmFyKCdQVicsIFRydWUpLCBjd2Q9c3Jjc3ViZGlyKQorCisgICAgICAgIChzdGRvdXQsIF8pID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCByZXYtcGFyc2UgSEVBRCcsIGN3ZD1zcmNzdWJkaXIpCisgICAgICAgIGluaXRpYWxfcmV2ID0gc3Rkb3V0LnJzdHJpcCgpCisKKyAgICAgICAgYmIucHJvY2Vzcy5ydW4oJ2dpdCBjaGVja291dCAtYiAlcycgJSBkZXZicmFuY2gsIGN3ZD1zcmNzdWJkaXIpCisgICAgICAgIGJiLnByb2Nlc3MucnVuKCdnaXQgdGFnIC1mIGRldnRvb2wtYmFzZScsIGN3ZD1zcmNzdWJkaXIpCisgICAgICAgIGNyZC5zZXRWYXIoJ1BBVENIVE9PTCcsICdnaXQnKQorCisgICAgICAgIGxvZ2dlci5pbmZvKCdQYXRjaGluZy4uLicpCisgICAgICAgIHRhc2tfZXhlY3V0b3IuZXhlY19mdW5jKCdkb19wYXRjaCcsIEZhbHNlKQorCisgICAgICAgIGJiLnByb2Nlc3MucnVuKCdnaXQgdGFnIC1mIGRldnRvb2wtcGF0Y2hlZCcsIGN3ZD1zcmNzdWJkaXIpCisKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGF0Y2hkaXIpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShwYXRjaGRpcikKKyAgICAgICAgICAgIGlmIGhhc3BhdGNoZXM6CisgICAgICAgICAgICAgICAgYmIucHJvY2Vzcy5ydW4oJ2dpdCBjaGVja291dCBwYXRjaGVzJywgY3dkPXNyY3N1YmRpcikKKworICAgICAgICBzaHV0aWwubW92ZShzcmNzdWJkaXIsIHNyY3RyZWUpCisgICAgZmluYWxseToKKyAgICAgICAgYmIubG9nZ2VyLnNldExldmVsKG9yaWdsZXZlbCkKKworICAgICAgICBpZiBrZWVwX3RlbXA6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygnUHJlc2VydmluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzJyAlIHRlbXBkaXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRlbXBkaXIpCisgICAgcmV0dXJuIGluaXRpYWxfcmV2CisKK2RlZiBfYWRkX21kNShjb25maWcsIHJlY2lwZW5hbWUsIGZpbGVuYW1lKToKKyAgICAiIiJSZWNvcmQgY2hlY2tzdW0gb2YgYSBmaWxlIChvciByZWN1cnNpdmVseSBmb3IgYSBkaXJlY3RvcnkpIHRvIHRoZSBtZDUtZmlsZSBvZiB0aGUgd29ya3NwYWNlIiIiCisgICAgaW1wb3J0IGJiLnV0aWxzCisKKyAgICBkZWYgYWRkZmlsZShmbik6CisgICAgICAgIG1kNSA9IGJiLnV0aWxzLm1kNV9maWxlKGZuKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJy5kZXZ0b29sX21kNScpLCAnYScpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCclc3wlc3wlc1xuJyAlIChyZWNpcGVuYW1lLCBvcy5wYXRoLnJlbHBhdGgoZm4sIGNvbmZpZy53b3Jrc3BhY2VfcGF0aCksIG1kNSkpCisKKyAgICBpZiBvcy5wYXRoLmlzZGlyKGZpbGVuYW1lKToKKyAgICAgICAgZm9yIHJvb3QsIF8sIGZpbGVzIGluIG9zLndhbGsob3MucGF0aC5kaXJuYW1lKGZpbGVuYW1lKSk6CisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBhZGRmaWxlKG9zLnBhdGguam9pbihyb290LCBmKSkKKyAgICBlbHNlOgorICAgICAgICBhZGRmaWxlKGZpbGVuYW1lKQorCitkZWYgX2NoZWNrX3ByZXNlcnZlKGNvbmZpZywgcmVjaXBlbmFtZSk6CisgICAgIiIiQ2hlY2sgaWYgYSBmaWxlIHdhcyBtYW51YWxseSBjaGFuZ2VkIGFuZCBuZWVkcyB0byBiZSBzYXZlZCBpbiAnYXR0aWMnCisgICAgICAgZGlyZWN0b3J5IiIiCisgICAgaW1wb3J0IGJiLnV0aWxzCisgICAgb3JpZ2ZpbGUgPSBvcy5wYXRoLmpvaW4oY29uZmlnLndvcmtzcGFjZV9wYXRoLCAnLmRldnRvb2xfbWQ1JykKKyAgICBuZXdmaWxlID0gb3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJy5kZXZ0b29sX21kNV9uZXcnKQorICAgIHByZXNlcnZlcGF0aCA9IG9zLnBhdGguam9pbihjb25maWcud29ya3NwYWNlX3BhdGgsICdhdHRpYycpCisgICAgd2l0aCBvcGVuKG9yaWdmaWxlLCAncicpIGFzIGY6CisgICAgICAgIHdpdGggb3BlbihuZXdmaWxlLCAndycpIGFzIHRmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICBzcGxpdGxpbmUgPSBsaW5lLnJzdHJpcCgpLnNwbGl0KCd8JykKKyAgICAgICAgICAgICAgICBpZiBzcGxpdGxpbmVbMF0gPT0gcmVjaXBlbmFtZToKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZmlsZSA9IG9zLnBhdGguam9pbihjb25maWcud29ya3NwYWNlX3BhdGgsIHNwbGl0bGluZVsxXSkKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgbWQ1ID0gYmIudXRpbHMubWQ1X2ZpbGUocmVtb3ZlZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXJyLmVycm5vID09IDI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBGaWxlIG5vIGxvbmdlciBleGlzdHMsIHNraXAgaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICBpZiBzcGxpdGxpbmVbMl0gIT0gbWQ1OgorICAgICAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHByZXNlcnZlcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZlZmlsZSA9IG9zLnBhdGguYmFzZW5hbWUocmVtb3ZlZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCdGaWxlICVzIG1vZGlmaWVkIHNpbmNlIGl0IHdhcyB3cml0dGVuLCBwcmVzZXJ2aW5nIGluICVzJyAlIChwcmVzZXJ2ZWZpbGUsIHByZXNlcnZlcGF0aCkpCisgICAgICAgICAgICAgICAgICAgICAgICBzaHV0aWwubW92ZShyZW1vdmVmaWxlLCBvcy5wYXRoLmpvaW4ocHJlc2VydmVwYXRoLCBwcmVzZXJ2ZWZpbGUpKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHJlbW92ZWZpbGUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdGYud3JpdGUobGluZSkKKyAgICBvcy5yZW5hbWUobmV3ZmlsZSwgb3JpZ2ZpbGUpCisKK2RlZiBtb2RpZnkoYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKKyAgICAiIiJFbnRyeSBwb2ludCBmb3IgdGhlIGRldnRvb2wgJ21vZGlmeScgc3ViY29tbWFuZCIiIgorICAgIGltcG9ydCBiYgorICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscworCisgICAgaWYgYXJncy5yZWNpcGVuYW1lIGluIHdvcmtzcGFjZToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJyZWNpcGUgJXMgaXMgYWxyZWFkeSBpbiB5b3VyIHdvcmtzcGFjZSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5yZWNpcGVuYW1lKQorCisgICAgaWYgbm90IGFyZ3MuZXh0cmFjdCBhbmQgbm90IG9zLnBhdGguaXNkaXIoYXJncy5zcmN0cmVlKToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJkaXJlY3RvcnkgJXMgZG9lcyBub3QgZXhpc3Qgb3Igbm90IGEgZGlyZWN0b3J5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIoc3BlY2lmeSAteCB0byBleHRyYWN0IHNvdXJjZSBmcm9tIHJlY2lwZSkiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Muc3JjdHJlZSkKKyAgICBpZiBhcmdzLmV4dHJhY3Q6CisgICAgICAgIHRpbmZvaWwgPSBfcHJlcF9leHRyYWN0X29wZXJhdGlvbihjb25maWcsIGJhc2VwYXRoLCBhcmdzLnJlY2lwZW5hbWUpCisgICAgZWxzZToKKyAgICAgICAgdGluZm9pbCA9IHNldHVwX3RpbmZvaWwoKQorCisgICAgcmQgPSBwYXJzZV9yZWNpcGUoY29uZmlnLCB0aW5mb2lsLCBhcmdzLnJlY2lwZW5hbWUsIFRydWUpCisgICAgaWYgbm90IHJkOgorICAgICAgICByZXR1cm4gMQorICAgIHJlY2lwZWZpbGUgPSByZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKQorICAgIGFwcGVuZG5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUocmVjaXBlZmlsZSkpWzBdCisgICAgaWYgYXJncy53aWxkY2FyZDoKKyAgICAgICAgYXBwZW5kbmFtZSA9IHJlLnN1YihyJ18uKicsICdfJScsIGFwcGVuZG5hbWUpCisgICAgYXBwZW5kcGF0aCA9IG9zLnBhdGguam9pbihjb25maWcud29ya3NwYWNlX3BhdGgsICdhcHBlbmRzJykKKyAgICBhcHBlbmRmaWxlID0gb3MucGF0aC5qb2luKGFwcGVuZHBhdGgsIGFwcGVuZG5hbWUgKyAnLmJiYXBwZW5kJykKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhhcHBlbmRmaWxlKToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJBbm90aGVyIHZhcmlhbnQgb2YgcmVjaXBlICVzIGlzIGFscmVhZHkgaW4geW91ciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAid29ya3NwYWNlIChvbmx5IG9uZSB2YXJpYW50IG9mIGEgcmVjaXBlIGNhbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3VycmVudGx5IGJlIHdvcmtlZCBvbiBhdCBvbmNlKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICUgYXJncy5yZWNpcGVuYW1lKQorCisgICAgX2NoZWNrX2NvbXBhdGlibGVfcmVjaXBlKGFyZ3MucmVjaXBlbmFtZSwgcmQpCisKKyAgICBpbml0aWFsX3JldiA9IE5vbmUKKyAgICBjb21taXRzID0gW10KKyAgICBzcmN0cmVlID0gb3MucGF0aC5hYnNwYXRoKGFyZ3Muc3JjdHJlZSkKKyAgICBpZiBhcmdzLmV4dHJhY3Q6CisgICAgICAgIGluaXRpYWxfcmV2ID0gX2V4dHJhY3Rfc291cmNlKGFyZ3Muc3JjdHJlZSwgRmFsc2UsIGFyZ3MuYnJhbmNoLCByZCkKKyAgICAgICAgaWYgbm90IGluaXRpYWxfcmV2OgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1NvdXJjZSB0cmVlIGV4dHJhY3RlZCB0byAlcycgJSBzcmN0cmVlKQorICAgICAgICAjIEdldCBsaXN0IG9mIGNvbW1pdHMgc2luY2UgdGhpcyByZXZpc2lvbgorICAgICAgICAoc3Rkb3V0LCBfKSA9IGJiLnByb2Nlc3MucnVuKCdnaXQgcmV2LWxpc3QgLS1yZXZlcnNlICVzLi5IRUFEJyAlIGluaXRpYWxfcmV2LCBjd2Q9YXJncy5zcmN0cmVlKQorICAgICAgICBjb21taXRzID0gc3Rkb3V0LnNwbGl0KCkKKyAgICBlbHNlOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oYXJncy5zcmN0cmVlLCAnLmdpdCcpKToKKyAgICAgICAgICAgICMgQ2hlY2sgaWYgaXQncyBhIHRyZWUgcHJldmlvdXNseSBleHRyYWN0ZWQgYnkgdXMKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAoc3Rkb3V0LCBfKSA9IGJiLnByb2Nlc3MucnVuKCdnaXQgYnJhbmNoIC0tY29udGFpbnMgZGV2dG9vbC1iYXNlJywgY3dkPWFyZ3Muc3JjdHJlZSkKKyAgICAgICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yOgorICAgICAgICAgICAgICAgIHN0ZG91dCA9ICcnCisgICAgICAgICAgICBmb3IgbGluZSBpbiBzdGRvdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnKicpOgorICAgICAgICAgICAgICAgICAgICAoc3Rkb3V0LCBfKSA9IGJiLnByb2Nlc3MucnVuKCdnaXQgcmV2LXBhcnNlIGRldnRvb2wtYmFzZScsIGN3ZD1hcmdzLnNyY3RyZWUpCisgICAgICAgICAgICAgICAgICAgIGluaXRpYWxfcmV2ID0gc3Rkb3V0LnJzdHJpcCgpCisgICAgICAgICAgICBpZiBub3QgaW5pdGlhbF9yZXY6CisgICAgICAgICAgICAgICAgIyBPdGhlcndpc2UsIGp1c3QgZ3JhYiB0aGUgaGVhZCByZXZpc2lvbgorICAgICAgICAgICAgICAgIChzdGRvdXQsIF8pID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCByZXYtcGFyc2UgSEVBRCcsIGN3ZD1hcmdzLnNyY3RyZWUpCisgICAgICAgICAgICAgICAgaW5pdGlhbF9yZXYgPSBzdGRvdXQucnN0cmlwKCkKKworICAgICMgQ2hlY2sgdGhhdCByZWNpcGUgaXNuJ3QgdXNpbmcgYSBzaGFyZWQgd29ya2RpcgorICAgIHMgPSBvcy5wYXRoLmFic3BhdGgocmQuZ2V0VmFyKCdTJywgVHJ1ZSkpCisgICAgd29ya2RpciA9IG9zLnBhdGguYWJzcGF0aChyZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSkKKyAgICBpZiBzLnN0YXJ0c3dpdGgod29ya2RpcikgYW5kIHMgIT0gd29ya2RpciBhbmQgb3MucGF0aC5kaXJuYW1lKHMpICE9IHdvcmtkaXI6CisgICAgICAgICMgSGFuZGxlIGlmIFMgaXMgc2V0IHRvIGEgc3ViZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UKKyAgICAgICAgc3Jjc3ViZGlyID0gb3MucGF0aC5yZWxwYXRoKHMsIHdvcmtkaXIpLnNwbGl0KG9zLnNlcCwgMSlbMV0KKyAgICAgICAgc3JjdHJlZSA9IG9zLnBhdGguam9pbihzcmN0cmVlLCBzcmNzdWJkaXIpCisKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYXBwZW5kcGF0aCk6CisgICAgICAgIG9zLm1ha2VkaXJzKGFwcGVuZHBhdGgpCisgICAgd2l0aCBvcGVuKGFwcGVuZGZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgZi53cml0ZSgnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuXG4nKQorICAgICAgICBmLndyaXRlKCdpbmhlcml0IGV4dGVybmFsc3JjXG4nKQorICAgICAgICBmLndyaXRlKCcjIE5PVEU6IFdlIHVzZSBwbi0gb3ZlcnJpZGVzIGhlcmUgdG8gYXZvaWQgYWZmZWN0aW5nIG11bHRpcGxlIHZhcmlhbnRzIGluIHRoZSBjYXNlIHdoZXJlIHRoZSByZWNpcGUgdXNlcyBCQkNMQVNTRVhURU5EXG4nKQorICAgICAgICBmLndyaXRlKCdFWFRFUk5BTFNSQ19wbi0lcyA9ICIlcyJcbicgJSAoYXJncy5yZWNpcGVuYW1lLCBzcmN0cmVlKSkKKworICAgICAgICBiX2lzX3MgPSBUcnVlCisgICAgICAgIGlmIGFyZ3Mubm9fc2FtZV9kaXI6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygndXNpbmcgc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5IHNpbmNlIC0tbm8tc2FtZS1kaXIgc3BlY2lmaWVkJykKKyAgICAgICAgICAgIGJfaXNfcyA9IEZhbHNlCisgICAgICAgIGVsaWYgYXJncy5zYW1lX2RpcjoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCd1c2luZyBzb3VyY2UgdHJlZSBhcyBidWlsZCBkaXJlY3Rvcnkgc2luY2UgLS1zYW1lLWRpciBzcGVjaWZpZWQnKQorICAgICAgICBlbGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2F1dG90b29scy1icm9rZW5zZXAnLCByZCk6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygndXNpbmcgc291cmNlIHRyZWUgYXMgYnVpbGQgZGlyZWN0b3J5IHNpbmNlIG9yaWdpbmFsIHJlY2lwZSBpbmhlcml0cyBhdXRvdG9vbHMtYnJva2Vuc2VwJykKKyAgICAgICAgZWxpZiByZC5nZXRWYXIoJ0InLCBUcnVlKSA9PSBzOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ3VzaW5nIHNvdXJjZSB0cmVlIGFzIGJ1aWxkIGRpcmVjdG9yeSBzaW5jZSB0aGF0IGlzIHRoZSBkZWZhdWx0IGZvciB0aGlzIHJlY2lwZScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiX2lzX3MgPSBGYWxzZQorICAgICAgICBpZiBiX2lzX3M6CisgICAgICAgICAgICBmLndyaXRlKCdFWFRFUk5BTFNSQ19CVUlMRF9wbi0lcyA9ICIlcyJcbicgJSAoYXJncy5yZWNpcGVuYW1lLCBzcmN0cmVlKSkKKworICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwnLCByZCk6CisgICAgICAgICAgICBmLndyaXRlKCdTUkNUUkVFQ09WRVJFRFRBU0tTID0gImRvX3ZhbGlkYXRlX2JyYW5jaGVzIGRvX2tlcm5lbF9jaGVja291dCBkb19mZXRjaCBkb191bnBhY2siXG4nKQorICAgICAgICBpZiBpbml0aWFsX3JldjoKKyAgICAgICAgICAgIGYud3JpdGUoJ1xuIyBpbml0aWFsX3JldjogJXNcbicgJSBpbml0aWFsX3JldikKKyAgICAgICAgICAgIGZvciBjb21taXQgaW4gY29tbWl0czoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCcjIGNvbW1pdDogJXNcbicgJSBjb21taXQpCisKKyAgICBfYWRkX21kNShjb25maWcsIGFyZ3MucmVjaXBlbmFtZSwgYXBwZW5kZmlsZSkKKworICAgIGxvZ2dlci5pbmZvKCdSZWNpcGUgJXMgbm93IHNldCB1cCB0byBidWlsZCBmcm9tICVzJyAlIChhcmdzLnJlY2lwZW5hbWUsIHNyY3RyZWUpKQorCisgICAgcmV0dXJuIDAKKworZGVmIF9nZXRfcGF0Y2hzZXRfcmV2cyhhcmdzLCBzcmN0cmVlLCByZWNpcGVfcGF0aCk6CisgICAgIiIiR2V0IGluaXRpYWwgYW5kIHVwZGF0ZSByZXYgb2YgYSByZWNpcGUuIFRoZXNlIGFyZSB0aGUgc3RhcnQgcG9pbnQgb2YgdGhlCisgICAgd2hvbGUgcGF0Y2hzZXQgYW5kIHN0YXJ0IHBvaW50IGZvciB0aGUgcGF0Y2hlcyB0byBiZSByZS1nZW5lcmF0ZWQvdXBkYXRlZC4KKyAgICAiIiIKKyAgICBpbXBvcnQgYmIKKworICAgIGlmIGFyZ3MuaW5pdGlhbF9yZXY6CisgICAgICAgIHJldHVybiBhcmdzLmluaXRpYWxfcmV2LCBhcmdzLmluaXRpYWxfcmV2CisKKyAgICAjIFBhcnNlIGluaXRpYWwgcmV2IGZyb20gcmVjaXBlCisgICAgY29tbWl0cyA9IFtdCisgICAgaW5pdGlhbF9yZXYgPSBOb25lCisgICAgd2l0aCBvcGVuKHJlY2lwZV9wYXRoLCAncicpIGFzIGY6CisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyMgaW5pdGlhbF9yZXY6Jyk6CisgICAgICAgICAgICAgICAgaW5pdGlhbF9yZXYgPSBsaW5lLnNwbGl0KCc6JylbLTFdLnN0cmlwKCkKKyAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCcjIGNvbW1pdDonKToKKyAgICAgICAgICAgICAgICBjb21taXRzLmFwcGVuZChsaW5lLnNwbGl0KCc6JylbLTFdLnN0cmlwKCkpCisKKyAgICB1cGRhdGVfcmV2ID0gaW5pdGlhbF9yZXYKKyAgICBpZiBpbml0aWFsX3JldjoKKyAgICAgICAgIyBGaW5kIGZpcnN0IGFjdHVhbGx5IGNoYW5nZWQgcmV2aXNpb24KKyAgICAgICAgc3Rkb3V0LCBfID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCByZXYtbGlzdCAtLXJldmVyc2UgJXMuLkhFQUQnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbF9yZXYsIGN3ZD1zcmN0cmVlKQorICAgICAgICBuZXdjb21taXRzID0gc3Rkb3V0LnNwbGl0KCkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKG1pbihsZW4oY29tbWl0cyksIGxlbihuZXdjb21taXRzKSkpOgorICAgICAgICAgICAgaWYgbmV3Y29tbWl0c1tpXSA9PSBjb21taXRzW2ldOgorICAgICAgICAgICAgICAgIHVwZGF0ZV9yZXYgPSBjb21taXRzW2ldCisKKyAgICByZXR1cm4gaW5pdGlhbF9yZXYsIHVwZGF0ZV9yZXYKKworZGVmIF9yZW1vdmVfcGF0Y2hfZW50cmllcyhzcmN1cmksIHBhdGNobGlzdCk6CisgICAgIiIiUmVtb3ZlIHBhdGNoIGVudHJpZXMgZnJvbSBTUkNfVVJJIiIiCisgICAgcmVtYWluaW5nID0gcGF0Y2hsaXN0WzpdCisgICAgZW50cmllcyA9IFtdCisgICAgZm9yIHBhdGNoIGluIHBhdGNobGlzdDoKKyAgICAgICAgcGF0Y2hmaWxlID0gb3MucGF0aC5iYXNlbmFtZShwYXRjaCkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihzcmN1cmkpKToKKyAgICAgICAgICAgIGlmIHNyY3VyaVtpXS5zdGFydHN3aXRoKCdmaWxlOi8vJykgYW5kIG9zLnBhdGguYmFzZW5hbWUoc3JjdXJpW2ldLnNwbGl0KCc7JylbMF0pID09IHBhdGNoZmlsZToKKyAgICAgICAgICAgICAgICBlbnRyaWVzLmFwcGVuZChzcmN1cmlbaV0pCisgICAgICAgICAgICAgICAgcmVtYWluaW5nLnJlbW92ZShwYXRjaCkKKyAgICAgICAgICAgICAgICBzcmN1cmkucG9wKGkpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICByZXR1cm4gZW50cmllcywgcmVtYWluaW5nCisKK2RlZiBfcmVtb3ZlX3BhdGNoX2ZpbGVzKGFyZ3MsIHBhdGNoZXMsIGRlc3RwYXRoKToKKyAgICAiIiJVbmxpbmsgZXhpc3RpbmcgcGF0Y2ggZmlsZXMiIiIKKyAgICBmb3IgcGF0Y2hmaWxlIGluIHBhdGNoZXM6CisgICAgICAgIGlmIGFyZ3MuYXBwZW5kOgorICAgICAgICAgICAgaWYgbm90IGRlc3RwYXRoOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignZGVzdHBhdGggc2hvdWxkIGJlIHNldCBoZXJlJykKKyAgICAgICAgICAgIHBhdGNoZmlsZSA9IG9zLnBhdGguam9pbihkZXN0cGF0aCwgb3MucGF0aC5iYXNlbmFtZShwYXRjaGZpbGUpKQorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGNoZmlsZSk6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygnUmVtb3ZpbmcgcGF0Y2ggJXMnICUgcGF0Y2hmaWxlKQorICAgICAgICAgICAgIyBGSVhNRSAiZ2l0IHJtIiBoZXJlIHdvdWxkIGJlIG5pY2UgaWYgdGhlIGZpbGUgaW4gcXVlc3Rpb24gaXMKKyAgICAgICAgICAgICMgICAgICAgdHJhY2tlZAorICAgICAgICAgICAgIyBGSVhNRSB0aGVyZSdzIGEgY2hhbmNlIHRoYXQgdGhpcyBmaWxlIGlzIHJlZmVycmVkIHRvIGJ5CisgICAgICAgICAgICAjICAgICAgIGFub3RoZXIgcmVjaXBlLCBpbiB3aGljaCBjYXNlIGRlbGV0aW5nIHdvdWxkbid0IGJlIHRoZQorICAgICAgICAgICAgIyAgICAgICByaWdodCB0aGluZyB0byBkbworICAgICAgICAgICAgb3MucmVtb3ZlKHBhdGNoZmlsZSkKKyAgICAgICAgICAgICMgUmVtb3ZlIGRpcmVjdG9yeSBpZiBlbXB0eQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnJtZGlyKG9zLnBhdGguZGlybmFtZShwYXRjaGZpbGUpKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgb3NlOgorICAgICAgICAgICAgICAgIGlmIG9zZS5lcnJubyAhPSBlcnJuby5FTk9URU1QVFk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisKK2RlZiBfdXBkYXRlX3JlY2lwZV9zcmNyZXYoYXJncywgc3JjdHJlZSwgcmQsIGNvbmZpZ19kYXRhKToKKyAgICAiIiJJbXBsZW1lbnQgdGhlICdzcmNyZXYnIG1vZGUgb2YgdXBkYXRlLXJlY2lwZSIiIgorICAgIGltcG9ydCBiYgorICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscworICAgIGZyb20gb2UucGF0Y2ggaW1wb3J0IEdpdEFwcGx5VHJlZQorCisgICAgcmVjaXBlZmlsZSA9IHJkLmdldFZhcignRklMRScsIFRydWUpCisgICAgbG9nZ2VyLmluZm8oJ1VwZGF0aW5nIFNSQ1JFViBpbiByZWNpcGUgJXMnICUgb3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKSkKKworICAgICMgR2V0IEhFQUQgcmV2aXNpb24KKyAgICB0cnk6CisgICAgICAgIHN0ZG91dCwgXyA9IGJiLnByb2Nlc3MucnVuKCdnaXQgcmV2LXBhcnNlIEhFQUQnLCBjd2Q9c3JjdHJlZSkKKyAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvciBhcyBlcnI6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignRmFpbGVkIHRvIGdldCBIRUFEIHJldmlzaW9uIGluICVzOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNyY3RyZWUsIGVycikpCisgICAgc3JjcmV2ID0gc3Rkb3V0LnN0cmlwKCkKKyAgICBpZiBsZW4oc3JjcmV2KSAhPSA0MDoKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdJbnZhbGlkIGhhc2ggcmV0dXJuZWQgYnkgZ2l0OiAlcycgJSBzdGRvdXQpCisKKyAgICBkZXN0cGF0aCA9IE5vbmUKKyAgICByZW1vdmVwYXRjaGVzID0gW10KKyAgICBwYXRjaGZpZWxkcyA9IHt9CisgICAgcGF0Y2hmaWVsZHNbJ1NSQ1JFViddID0gc3JjcmV2CisgICAgb3JpZ19zcmNfdXJpID0gcmQuZ2V0VmFyKCdTUkNfVVJJJywgRmFsc2UpIG9yICcnCisgICAgaWYgbm90IGFyZ3Mubm9fcmVtb3ZlOgorICAgICAgICAjIEZpbmQgbGlzdCBvZiBleGlzdGluZyBwYXRjaGVzIGluIHJlY2lwZSBmaWxlCisgICAgICAgIGV4aXN0aW5nX3BhdGNoZXMgPSBvZS5yZWNpcGV1dGlscy5nZXRfcmVjaXBlX3BhdGNoZXMocmQpCisKKyAgICAgICAgb2xkX3NyY3JldiA9IChyZC5nZXRWYXIoJ1NSQ1JFVicsIEZhbHNlKSBvciAnJykKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29sJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgR2l0QXBwbHlUcmVlLmV4dHJhY3RQYXRjaGVzKHNyY3RyZWUsIG9sZF9zcmNyZXYsIHRlbXBkaXIpCisgICAgICAgICAgICBuZXdwYXRjaGVzID0gb3MubGlzdGRpcih0ZW1wZGlyKQorICAgICAgICAgICAgZm9yIHBhdGNoIGluIGV4aXN0aW5nX3BhdGNoZXM6CisgICAgICAgICAgICAgICAgcGF0Y2hmaWxlID0gb3MucGF0aC5iYXNlbmFtZShwYXRjaCkKKyAgICAgICAgICAgICAgICBpZiBwYXRjaGZpbGUgaW4gbmV3cGF0Y2hlczoKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlcGF0Y2hlcy5hcHBlbmQocGF0Y2gpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRlbXBkaXIpCisKKyAgICAgICAgaWYgcmVtb3ZlcGF0Y2hlczoKKyAgICAgICAgICAgIHNyY3VyaSA9IG9yaWdfc3JjX3VyaS5zcGxpdCgpCisgICAgICAgICAgICByZW1vdmVkZW50cmllcywgXyA9IF9yZW1vdmVfcGF0Y2hfZW50cmllcyhzcmN1cmksIHJlbW92ZXBhdGNoZXMpCisgICAgICAgICAgICBpZiByZW1vdmVkZW50cmllczoKKyAgICAgICAgICAgICAgICBwYXRjaGZpZWxkc1snU1JDX1VSSSddID0gJyAnLmpvaW4oc3JjdXJpKQorCisgICAgaWYgYXJncy5hcHBlbmQ6CisgICAgICAgIF8sIGRlc3RwYXRoID0gb2UucmVjaXBldXRpbHMuYmJhcHBlbmRfcmVjaXBlKAorICAgICAgICAgICAgICAgIHJkLCBhcmdzLmFwcGVuZCwgTm9uZSwgd2lsZGNhcmR2ZXI9YXJncy53aWxkY2FyZF92ZXJzaW9uLAorICAgICAgICAgICAgICAgIGV4dHJhbGluZXM9cGF0Y2hmaWVsZHMpCisgICAgZWxzZToKKyAgICAgICAgb2UucmVjaXBldXRpbHMucGF0Y2hfcmVjaXBlKHJkLCByZWNpcGVmaWxlLCBwYXRjaGZpZWxkcykKKworICAgIGlmIG5vdCAnZ2l0Oi8vJyBpbiBvcmlnX3NyY191cmk6CisgICAgICAgIGxvZ2dlci5pbmZvKCdZb3Ugd2lsbCBuZWVkIHRvIHVwZGF0ZSBTUkNfVVJJIHdpdGhpbiB0aGUgcmVjaXBlIHRvICcKKyAgICAgICAgICAgICAgICAgICAgJ3BvaW50IHRvIGEgZ2l0IHJlcG9zaXRvcnkgd2hlcmUgeW91IGhhdmUgcHVzaGVkIHlvdXIgJworICAgICAgICAgICAgICAgICAgICAnY2hhbmdlcycpCisKKyAgICBfcmVtb3ZlX3BhdGNoX2ZpbGVzKGFyZ3MsIHJlbW92ZXBhdGNoZXMsIGRlc3RwYXRoKQorCitkZWYgX3VwZGF0ZV9yZWNpcGVfcGF0Y2goYXJncywgY29uZmlnLCBzcmN0cmVlLCByZCwgY29uZmlnX2RhdGEpOgorICAgICIiIkltcGxlbWVudCB0aGUgJ3BhdGNoJyBtb2RlIG9mIHVwZGF0ZS1yZWNpcGUiIiIKKyAgICBpbXBvcnQgYmIKKyAgICBpbXBvcnQgb2UucmVjaXBldXRpbHMKKyAgICBmcm9tIG9lLnBhdGNoIGltcG9ydCBHaXRBcHBseVRyZWUKKworICAgIHJlY2lwZWZpbGUgPSByZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKQorICAgIGFwcGVuZCA9IG9zLnBhdGguam9pbihjb25maWcud29ya3NwYWNlX3BhdGgsICdhcHBlbmRzJywgJyVzLmJiYXBwZW5kJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKSlbMF0pCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGFwcGVuZCk6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigndW5hYmxlIHRvIGZpbmQgd29ya3NwYWNlIGJiYXBwZW5kIGZvciByZWNpcGUgJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucmVjaXBlbmFtZSkKKworICAgIGluaXRpYWxfcmV2LCB1cGRhdGVfcmV2ID0gX2dldF9wYXRjaHNldF9yZXZzKGFyZ3MsIHNyY3RyZWUsIGFwcGVuZCkKKyAgICBpZiBub3QgaW5pdGlhbF9yZXY6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignVW5hYmxlIHRvIGZpbmQgaW5pdGlhbCByZXZpc2lvbiAtIHBsZWFzZSBzcGVjaWZ5ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdpdCB3aXRoIC0taW5pdGlhbC1yZXYnKQorCisgICAgIyBGaW5kIGxpc3Qgb2YgZXhpc3RpbmcgcGF0Y2hlcyBpbiByZWNpcGUgZmlsZQorICAgIGV4aXN0aW5nX3BhdGNoZXMgPSBvZS5yZWNpcGV1dGlscy5nZXRfcmVjaXBlX3BhdGNoZXMocmQpCisKKyAgICByZW1vdmVwYXRjaGVzID0gW10KKyAgICBzZXFwYXRjaF9yZSA9IHJlLmNvbXBpbGUoJ14oWzAtOV17NH0tKT8oLispJykKKyAgICBpZiBub3QgYXJncy5ub19yZW1vdmU6CisgICAgICAgICMgR2V0IGFsbCBwYXRjaGVzIGZyb20gc291cmNlIHRyZWUgYW5kIGNoZWNrIGlmIGFueSBzaG91bGQgYmUgcmVtb3ZlZAorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2wnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBHaXRBcHBseVRyZWUuZXh0cmFjdFBhdGNoZXMoc3JjdHJlZSwgaW5pdGlhbF9yZXYsIHRlbXBkaXIpCisgICAgICAgICAgICAjIFN0cmlwIG51bWJlcmluZyBmcm9tIHBhdGNoIG5hbWVzLiBJZiBpdCdzIGEgZ2l0IHNlcXVlbmNlIG5hbWVkCisgICAgICAgICAgICAjIHBhdGNoLCB0aGUgbnVtYmVycyBtaWdodCBub3QgbWF0Y2ggdXAgc2luY2Ugd2UgYXJlIHN0YXJ0aW5nIGZyb20KKyAgICAgICAgICAgICMgYSBkaWZmZXJlbnQgcmV2aXNpb24gVGhpcyBkb2VzIGFzc3VtZSB0aGF0IHBlb3BsZSBhcmUgdXNpbmcKKyAgICAgICAgICAgICMgdW5pcXVlIHNob3J0bG9nIHZhbHVlcywgYnV0IHRoZXkgb3VnaHQgdG8gYmUgYW55d2F5Li4uCisgICAgICAgICAgICBuZXdwYXRjaGVzID0gW3NlcXBhdGNoX3JlLm1hdGNoKGZuYW1lKS5ncm91cCgyKSBmb3IgZm5hbWUgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3MubGlzdGRpcih0ZW1wZGlyKV0KKyAgICAgICAgICAgIGZvciBwYXRjaCBpbiBleGlzdGluZ19wYXRjaGVzOgorICAgICAgICAgICAgICAgIGJhc2VuYW1lID0gc2VxcGF0Y2hfcmUubWF0Y2goCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUocGF0Y2gpKS5ncm91cCgyKQorICAgICAgICAgICAgICAgIGlmIGJhc2VuYW1lIG5vdCBpbiBuZXdwYXRjaGVzOgorICAgICAgICAgICAgICAgICAgICByZW1vdmVwYXRjaGVzLmFwcGVuZChwYXRjaCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUodGVtcGRpcikKKworICAgICMgR2V0IHVwZGF0ZWQgcGF0Y2hlcyBmcm9tIHNvdXJjZSB0cmVlCisgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29sJykKKyAgICB0cnk6CisgICAgICAgIEdpdEFwcGx5VHJlZS5leHRyYWN0UGF0Y2hlcyhzcmN0cmVlLCB1cGRhdGVfcmV2LCB0ZW1wZGlyKQorCisgICAgICAgICMgTWF0Y2ggdXAgYW5kIHJlcGxhY2UgZXhpc3RpbmcgcGF0Y2hlcyB3aXRoIGNvcnJlc3BvbmRpbmcgbmV3IHBhdGNoZXMKKyAgICAgICAgdXBkYXRlcGF0Y2hlcyA9IEZhbHNlCisgICAgICAgIHVwZGF0ZXJlY2lwZSA9IEZhbHNlCisgICAgICAgIGRlc3RwYXRoID0gTm9uZQorICAgICAgICBuZXdwYXRjaGVzID0gb3MubGlzdGRpcih0ZW1wZGlyKQorICAgICAgICBpZiBhcmdzLmFwcGVuZDoKKyAgICAgICAgICAgIHBhdGNoZmlsZXMgPSB7fQorICAgICAgICAgICAgZm9yIHBhdGNoIGluIGV4aXN0aW5nX3BhdGNoZXM6CisgICAgICAgICAgICAgICAgcGF0Y2hmaWxlID0gb3MucGF0aC5iYXNlbmFtZShwYXRjaCkKKyAgICAgICAgICAgICAgICBpZiBwYXRjaGZpbGUgaW4gbmV3cGF0Y2hlczoKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hmaWxlc1tvcy5wYXRoLmpvaW4odGVtcGRpciwgcGF0Y2hmaWxlKV0gPSBwYXRjaGZpbGUKKyAgICAgICAgICAgICAgICAgICAgbmV3cGF0Y2hlcy5yZW1vdmUocGF0Y2hmaWxlKQorICAgICAgICAgICAgZm9yIHBhdGNoZmlsZSBpbiBuZXdwYXRjaGVzOgorICAgICAgICAgICAgICAgIHBhdGNoZmlsZXNbb3MucGF0aC5qb2luKHRlbXBkaXIsIHBhdGNoZmlsZSldID0gTm9uZQorCisgICAgICAgICAgICBpZiBwYXRjaGZpbGVzIG9yIHJlbW92ZXBhdGNoZXM6CisgICAgICAgICAgICAgICAgcmVtb3ZldmFsdWVzID0gTm9uZQorICAgICAgICAgICAgICAgIGlmIHJlbW92ZXBhdGNoZXM6CisgICAgICAgICAgICAgICAgICAgIHNyY3VyaSA9IChyZC5nZXRWYXIoJ1NSQ19VUkknLCBGYWxzZSkgb3IgJycpLnNwbGl0KCkKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZGVudHJpZXMsIHJlbWFpbmluZyA9IF9yZW1vdmVfcGF0Y2hfZW50cmllcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmN1cmksIHJlbW92ZXBhdGNoZXMpCisgICAgICAgICAgICAgICAgICAgIGlmIHJlbW92ZWRlbnRyaWVzIG9yIHJlbWFpbmluZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZyA9IFsnZmlsZTovLycgKyBvcy5wYXRoLmJhc2VuYW1lKGl0ZW0pIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gaW4gcmVtYWluaW5nXQorICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZldmFsdWVzID0geydTUkNfVVJJJzogcmVtb3ZlZGVudHJpZXMgKyByZW1haW5pbmd9CisgICAgICAgICAgICAgICAgXywgZGVzdHBhdGggPSBvZS5yZWNpcGV1dGlscy5iYmFwcGVuZF9yZWNpcGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkLCBhcmdzLmFwcGVuZCwgcGF0Y2hmaWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZldmFsdWVzPXJlbW92ZXZhbHVlcykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ05vIHBhdGNoZXMgbmVlZGVkIHVwZGF0aW5nJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBwYXRjaCBpbiBleGlzdGluZ19wYXRjaGVzOgorICAgICAgICAgICAgICAgIHBhdGNoZmlsZSA9IG9zLnBhdGguYmFzZW5hbWUocGF0Y2gpCisgICAgICAgICAgICAgICAgaWYgcGF0Y2hmaWxlIGluIG5ld3BhdGNoZXM6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdVcGRhdGluZyBwYXRjaCAlcycgJSBwYXRjaGZpbGUpCisgICAgICAgICAgICAgICAgICAgIHNodXRpbC5tb3ZlKG9zLnBhdGguam9pbih0ZW1wZGlyLCBwYXRjaGZpbGUpLCBwYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgbmV3cGF0Y2hlcy5yZW1vdmUocGF0Y2hmaWxlKQorICAgICAgICAgICAgICAgICAgICB1cGRhdGVwYXRjaGVzID0gVHJ1ZQorICAgICAgICAgICAgc3JjdXJpID0gKHJkLmdldFZhcignU1JDX1VSSScsIEZhbHNlKSBvciAnJykuc3BsaXQoKQorICAgICAgICAgICAgaWYgbmV3cGF0Y2hlczoKKyAgICAgICAgICAgICAgICAjIEFkZCBhbnkgcGF0Y2hlcyBsZWZ0IG92ZXIKKyAgICAgICAgICAgICAgICBwYXRjaGRpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmQuZ2V0VmFyKCdCUE4nLCBUcnVlKSkKKyAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocGF0Y2hkaXIpCisgICAgICAgICAgICAgICAgZm9yIHBhdGNoZmlsZSBpbiBuZXdwYXRjaGVzOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnQWRkaW5nIG5ldyBwYXRjaCAlcycgJSBwYXRjaGZpbGUpCisgICAgICAgICAgICAgICAgICAgIHNodXRpbC5tb3ZlKG9zLnBhdGguam9pbih0ZW1wZGlyLCBwYXRjaGZpbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ocGF0Y2hkaXIsIHBhdGNoZmlsZSkpCisgICAgICAgICAgICAgICAgICAgIHNyY3VyaS5hcHBlbmQoJ2ZpbGU6Ly8lcycgJSBwYXRjaGZpbGUpCisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZXJlY2lwZSA9IFRydWUKKyAgICAgICAgICAgIGlmIHJlbW92ZXBhdGNoZXM6CisgICAgICAgICAgICAgICAgcmVtb3ZlZGVudHJpZXMsIF8gPSBfcmVtb3ZlX3BhdGNoX2VudHJpZXMoc3JjdXJpLCByZW1vdmVwYXRjaGVzKQorICAgICAgICAgICAgICAgIGlmIHJlbW92ZWRlbnRyaWVzOgorICAgICAgICAgICAgICAgICAgICB1cGRhdGVyZWNpcGUgPSBUcnVlCisgICAgICAgICAgICBpZiB1cGRhdGVyZWNpcGU6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1VwZGF0aW5nIHJlY2lwZSAlcycgJSBvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICAgICAgICAgIG9lLnJlY2lwZXV0aWxzLnBhdGNoX3JlY2lwZShyZCwgcmVjaXBlZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeydTUkNfVVJJJzogJyAnLmpvaW4oc3JjdXJpKX0pCisgICAgICAgICAgICBlbGlmIG5vdCB1cGRhdGVwYXRjaGVzOgorICAgICAgICAgICAgICAgICMgTmVpdGhlciBwYXRjaGVzIG5vciByZWNpcGUgd2VyZSB1cGRhdGVkCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ05vIHBhdGNoZXMgbmVlZCB1cGRhdGluZycpCisgICAgZmluYWxseToKKyAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wZGlyKQorCisgICAgX3JlbW92ZV9wYXRjaF9maWxlcyhhcmdzLCByZW1vdmVwYXRjaGVzLCBkZXN0cGF0aCkKKworZGVmIF9ndWVzc19yZWNpcGVfdXBkYXRlX21vZGUoc3JjdHJlZSwgcmRhdGEpOgorICAgICIiIkd1ZXNzIHRoZSByZWNpcGUgdXBkYXRlIG1vZGUgdG8gdXNlIiIiCisgICAgc3JjX3VyaSA9IChyZGF0YS5nZXRWYXIoJ1NSQ19VUkknLCBGYWxzZSkgb3IgJycpLnNwbGl0KCkKKyAgICBnaXRfdXJpcyA9IFt1cmkgZm9yIHVyaSBpbiBzcmNfdXJpIGlmIHVyaS5zdGFydHN3aXRoKCdnaXQ6Ly8nKV0KKyAgICBpZiBub3QgZ2l0X3VyaXM6CisgICAgICAgIHJldHVybiAncGF0Y2gnCisgICAgIyBKdXN0IHVzZSB0aGUgZmlyc3QgVVJJIGZvciBub3cKKyAgICB1cmkgPSBnaXRfdXJpc1swXQorICAgICMgQ2hlY2sgcmVtb3RlIGJyYW5jaAorICAgIHBhcmFtcyA9IGJiLmZldGNoLmRlY29kZXVybCh1cmkpWzVdCisgICAgdXBzdHJfYnJhbmNoID0gcGFyYW1zWydicmFuY2gnXSBpZiAnYnJhbmNoJyBpbiBwYXJhbXMgZWxzZSAnbWFzdGVyJworICAgICMgQ2hlY2sgaWYgY3VycmVudCBicmFuY2ggSEVBRCBpcyBmb3VuZCBpbiB1cHN0cmVhbSBicmFuY2gKKyAgICBzdGRvdXQsIF8gPSBiYi5wcm9jZXNzLnJ1bignZ2l0IHJldi1wYXJzZSBIRUFEJywgY3dkPXNyY3RyZWUpCisgICAgaGVhZF9yZXYgPSBzdGRvdXQucnN0cmlwKCkKKyAgICBzdGRvdXQsIF8gPSBiYi5wcm9jZXNzLnJ1bignZ2l0IGJyYW5jaCAtciAtLWNvbnRhaW5zICVzJyAlIGhlYWRfcmV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD1zcmN0cmVlKQorICAgIHJlbW90ZV9icnMgPSBbYnJhbmNoLnN0cmlwKCkgZm9yIGJyYW5jaCBpbiBzdGRvdXQuc3BsaXRsaW5lcygpXQorICAgIGlmICdvcmlnaW4vJyArIHVwc3RyX2JyYW5jaCBpbiByZW1vdGVfYnJzOgorICAgICAgICByZXR1cm4gJ3NyY3JldicKKworICAgIHJldHVybiAncGF0Y2gnCisKK2RlZiB1cGRhdGVfcmVjaXBlKGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CisgICAgIiIiRW50cnkgcG9pbnQgZm9yIHRoZSBkZXZ0b29sICd1cGRhdGUtcmVjaXBlJyBzdWJjb21tYW5kIiIiCisgICAgaWYgbm90IGFyZ3MucmVjaXBlbmFtZSBpbiB3b3Jrc3BhY2U6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigibm8gcmVjaXBlIG5hbWVkICVzIGluIHlvdXIgd29ya3NwYWNlIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnJlY2lwZW5hbWUpCisKKyAgICBpZiBhcmdzLmFwcGVuZDoKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGFyZ3MuYXBwZW5kKToKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignYmJhcHBlbmQgZGVzdGluYXRpb24gbGF5ZXIgZGlyZWN0b3J5ICIlcyIgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkb2VzIG5vdCBleGlzdCcgJSBhcmdzLmFwcGVuZCkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihhcmdzLmFwcGVuZCwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpKToKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignY29uZi9sYXllci5jb25mIG5vdCBmb3VuZCBpbiBiYmFwcGVuZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc3RpbmF0aW9uIGxheWVyICIlcyInICUgYXJncy5hcHBlbmQpCisKKyAgICB0aW5mb2lsID0gc2V0dXBfdGluZm9pbCgpCisKKyAgICByZCA9IHBhcnNlX3JlY2lwZShjb25maWcsIHRpbmZvaWwsIGFyZ3MucmVjaXBlbmFtZSwgVHJ1ZSkKKyAgICBpZiBub3QgcmQ6CisgICAgICAgIHJldHVybiAxCisKKyAgICBzcmN0cmVlID0gd29ya3NwYWNlW2FyZ3MucmVjaXBlbmFtZV1bJ3NyY3RyZWUnXQorICAgIGlmIGFyZ3MubW9kZSA9PSAnYXV0byc6CisgICAgICAgIG1vZGUgPSBfZ3Vlc3NfcmVjaXBlX3VwZGF0ZV9tb2RlKHNyY3RyZWUsIHJkKQorICAgIGVsc2U6CisgICAgICAgIG1vZGUgPSBhcmdzLm1vZGUKKworICAgIGlmIG1vZGUgPT0gJ3NyY3Jldic6CisgICAgICAgIF91cGRhdGVfcmVjaXBlX3NyY3JldihhcmdzLCBzcmN0cmVlLCByZCwgdGluZm9pbC5jb25maWdfZGF0YSkKKyAgICBlbGlmIG1vZGUgPT0gJ3BhdGNoJzoKKyAgICAgICAgX3VwZGF0ZV9yZWNpcGVfcGF0Y2goYXJncywgY29uZmlnLCBzcmN0cmVlLCByZCwgdGluZm9pbC5jb25maWdfZGF0YSkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ3VwZGF0ZV9yZWNpcGU6IGludmFsaWQgbW9kZSAlcycgJSBtb2RlKQorCisgICAgcmYgPSByZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKQorICAgIGlmIHJmLnN0YXJ0c3dpdGgoY29uZmlnLndvcmtzcGFjZV9wYXRoKToKKyAgICAgICAgbG9nZ2VyLndhcm4oJ1JlY2lwZSBmaWxlICVzIGhhcyBiZWVuIHVwZGF0ZWQgYnV0IGlzIGluc2lkZSB0aGUgd29ya3NwYWNlIC0geW91IHdpbGwgbmVlZCB0byBtb3ZlIGl0IChhbmQgYW55IGFzc29jaWF0ZWQgZmlsZXMgbmV4dCB0byBpdCkgb3V0IHRvIHRoZSBkZXNpcmVkIGxheWVyIGJlZm9yZSB1c2luZyAiZGV2dG9vbCByZXNldCIgaW4gb3JkZXIgdG8ga2VlcCBhbnkgY2hhbmdlcycgJSByZikKKworICAgIHJldHVybiAwCisKKworZGVmIHN0YXR1cyhhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgorICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAnc3RhdHVzJyBzdWJjb21tYW5kIiIiCisgICAgaWYgd29ya3NwYWNlOgorICAgICAgICBmb3IgcmVjaXBlLCB2YWx1ZSBpbiB3b3Jrc3BhY2UuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBwcmludCgiJXM6ICVzIiAlIChyZWNpcGUsIHZhbHVlWydzcmN0cmVlJ10pKQorICAgIGVsc2U6CisgICAgICAgIGxvZ2dlci5pbmZvKCdObyByZWNpcGVzIGN1cnJlbnRseSBpbiB5b3VyIHdvcmtzcGFjZSAtIHlvdSBjYW4gdXNlICJkZXZ0b29sIG1vZGlmeSIgdG8gd29yayBvbiBhbiBleGlzdGluZyByZWNpcGUgb3IgImRldnRvb2wgYWRkIiB0byBhZGQgYSBuZXcgb25lJykKKyAgICByZXR1cm4gMAorCisKK2RlZiByZXNldChhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgorICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAncmVzZXQnIHN1YmNvbW1hbmQiIiIKKyAgICBpbXBvcnQgYmIKKyAgICBpZiBhcmdzLnJlY2lwZW5hbWU6CisgICAgICAgIGlmIGFyZ3MuYWxsOgorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJSZWNpcGUgY2Fubm90IGJlIHNwZWNpZmllZCBpZiAtYS8tLWFsbCBpcyB1c2VkIikKKyAgICAgICAgZWxpZiBub3QgYXJncy5yZWNpcGVuYW1lIGluIHdvcmtzcGFjZToKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigibm8gcmVjaXBlIG5hbWVkICVzIGluIHlvdXIgd29ya3NwYWNlIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5yZWNpcGVuYW1lKQorICAgIGVsaWYgbm90IGFyZ3MuYWxsOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlJlY2lwZSBtdXN0IGJlIHNwZWNpZmllZCwgb3Igc3BlY2lmeSAtYS8tLWFsbCB0byAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzZXQgYWxsIHJlY2lwZXMiKQorICAgIGlmIGFyZ3MuYWxsOgorICAgICAgICByZWNpcGVzID0gd29ya3NwYWNlCisgICAgZWxzZToKKyAgICAgICAgcmVjaXBlcyA9IFthcmdzLnJlY2lwZW5hbWVdCisKKyAgICBmb3IgcG4gaW4gcmVjaXBlczoKKyAgICAgICAgaWYgbm90IGFyZ3Mubm9fY2xlYW46CisgICAgICAgICAgICBsb2dnZXIuaW5mbygnQ2xlYW5pbmcgc3lzcm9vdCBmb3IgcmVjaXBlICVzLi4uJyAlIHBuKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQoY29uZmlnLmluaXRfcGF0aCwgYmFzZXBhdGgsICdiaXRiYWtlIC1jIGNsZWFuICVzJyAlIHBuKQorICAgICAgICAgICAgZXhjZXB0IGJiLnByb2Nlc3MuRXhlY3V0aW9uRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ0NvbW1hbmQgXCclc1wnIGZhaWxlZCwgb3V0cHV0OlxuJXNcbklmIHlvdSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXNoLCB5b3UgbWF5IHNwZWNpZnkgLW4vLS1uby1jbGVhbiB0byAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdza2lwIHJ1bm5pbmcgdGhpcyBjb21tYW5kIHdoZW4gcmVzZXR0aW5nJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmNvbW1hbmQsIGUuc3Rkb3V0KSkKKworICAgICAgICBfY2hlY2tfcHJlc2VydmUoY29uZmlnLCBwbikKKworICAgICAgICBwcmVzZXJ2ZXBhdGggPSBvcy5wYXRoLmpvaW4oY29uZmlnLndvcmtzcGFjZV9wYXRoLCAnYXR0aWMnLCBwbikKKyAgICAgICAgZGVmIHByZXNlcnZlZGlyKG9yaWdkaXIpOgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3JpZ2Rpcik6CisgICAgICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsob3JpZ2Rpcik6CisgICAgICAgICAgICAgICAgICAgIGZvciBmbiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCdQcmVzZXJ2aW5nICVzIGluICVzJyAlIChmbiwgcHJlc2VydmVwYXRoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihwcmVzZXJ2ZXBhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICBzaHV0aWwubW92ZShvcy5wYXRoLmpvaW4ob3JpZ2RpciwgZm4pLCBvcy5wYXRoLmpvaW4ocHJlc2VydmVwYXRoLCBmbikpCisgICAgICAgICAgICAgICAgICAgIGZvciBkbiBpbiBkaXJzOgorICAgICAgICAgICAgICAgICAgICAgICAgb3Mucm1kaXIob3MucGF0aC5qb2luKHJvb3QsIGRuKSkKKyAgICAgICAgICAgICAgICBvcy5ybWRpcihvcmlnZGlyKQorCisgICAgICAgIHByZXNlcnZlZGlyKG9zLnBhdGguam9pbihjb25maWcud29ya3NwYWNlX3BhdGgsICdyZWNpcGVzJywgcG4pKQorICAgICAgICAjIFdlIGRvbid0IGF1dG9tYXRpY2FsbHkgY3JlYXRlIHRoaXMgZGlyIG5leHQgdG8gYXBwZW5kcywgYnV0IHRoZSB1c2VyIGNhbgorICAgICAgICBwcmVzZXJ2ZWRpcihvcy5wYXRoLmpvaW4oY29uZmlnLndvcmtzcGFjZV9wYXRoLCAnYXBwZW5kcycsIHBuKSkKKworICAgIHJldHVybiAwCisKKworZGVmIHJlZ2lzdGVyX2NvbW1hbmRzKHN1YnBhcnNlcnMsIGNvbnRleHQpOgorICAgICIiIlJlZ2lzdGVyIGRldnRvb2wgc3ViY29tbWFuZHMgZnJvbSB0aGlzIHBsdWdpbiIiIgorICAgIHBhcnNlcl9hZGQgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2FkZCcsIGhlbHA9J0FkZCBhIG5ldyByZWNpcGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J0FkZHMgYSBuZXcgcmVjaXBlJykKKyAgICBwYXJzZXJfYWRkLmFkZF9hcmd1bWVudCgncmVjaXBlbmFtZScsIGhlbHA9J05hbWUgZm9yIG5ldyByZWNpcGUgdG8gYWRkJykKKyAgICBwYXJzZXJfYWRkLmFkZF9hcmd1bWVudCgnc3JjdHJlZScsIGhlbHA9J1BhdGggdG8gZXh0ZXJuYWwgc291cmNlIHRyZWUnKQorICAgIHBhcnNlcl9hZGQuYWRkX2FyZ3VtZW50KCctLXNhbWUtZGlyJywgJy1zJywgaGVscD0nQnVpbGQgaW4gc2FtZSBkaXJlY3RvcnkgYXMgc291cmNlJywgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICBwYXJzZXJfYWRkLmFkZF9hcmd1bWVudCgnLS1mZXRjaCcsICctZicsIGhlbHA9J0ZldGNoIHRoZSBzcGVjaWZpZWQgVVJJIGFuZCBleHRyYWN0IGl0IHRvIGNyZWF0ZSB0aGUgc291cmNlIHRyZWUnLCBtZXRhdmFyPSdVUkknKQorICAgIHBhcnNlcl9hZGQuYWRkX2FyZ3VtZW50KCctLXZlcnNpb24nLCAnLVYnLCBoZWxwPSdWZXJzaW9uIHRvIHVzZSB3aXRoaW4gcmVjaXBlIChQViknKQorICAgIHBhcnNlcl9hZGQuc2V0X2RlZmF1bHRzKGZ1bmM9YWRkKQorCisgICAgcGFyc2VyX21vZGlmeSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignbW9kaWZ5JywgaGVscD0nTW9kaWZ5IHRoZSBzb3VyY2UgZm9yIGFuIGV4aXN0aW5nIHJlY2lwZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nRW5hYmxlcyBtb2RpZnlpbmcgdGhlIHNvdXJjZSBmb3IgYW4gZXhpc3RpbmcgcmVjaXBlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5Bcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlcikKKyAgICBwYXJzZXJfbW9kaWZ5LmFkZF9hcmd1bWVudCgncmVjaXBlbmFtZScsIGhlbHA9J05hbWUgZm9yIHJlY2lwZSB0byBlZGl0JykKKyAgICBwYXJzZXJfbW9kaWZ5LmFkZF9hcmd1bWVudCgnc3JjdHJlZScsIGhlbHA9J1BhdGggdG8gZXh0ZXJuYWwgc291cmNlIHRyZWUnKQorICAgIHBhcnNlcl9tb2RpZnkuYWRkX2FyZ3VtZW50KCctLXdpbGRjYXJkJywgJy13JywgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0nVXNlIHdpbGRjYXJkIGZvciB1bnZlcnNpb25lZCBiYmFwcGVuZCcpCisgICAgcGFyc2VyX21vZGlmeS5hZGRfYXJndW1lbnQoJy0tZXh0cmFjdCcsICcteCcsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9J0V4dHJhY3Qgc291cmNlIGFzIHdlbGwnKQorICAgIGdyb3VwID0gcGFyc2VyX21vZGlmeS5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKCkKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tc2FtZS1kaXInLCAnLXMnLCBoZWxwPSdCdWlsZCBpbiBzYW1lIGRpcmVjdG9yeSBhcyBzb3VyY2UnLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1uby1zYW1lLWRpcicsIGhlbHA9J0ZvcmNlIGJ1aWxkIGluIGEgc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5JywgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICBwYXJzZXJfbW9kaWZ5LmFkZF9hcmd1bWVudCgnLS1icmFuY2gnLCAnLWInLCBkZWZhdWx0PSJkZXZ0b29sIiwgaGVscD0nTmFtZSBmb3IgZGV2ZWxvcG1lbnQgYnJhbmNoIHRvIGNoZWNrb3V0IChvbmx5IHdoZW4gdXNpbmcgLXgpJykKKyAgICBwYXJzZXJfbW9kaWZ5LnNldF9kZWZhdWx0cyhmdW5jPW1vZGlmeSkKKworICAgIHBhcnNlcl9leHRyYWN0ID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdleHRyYWN0JywgaGVscD0nRXh0cmFjdCB0aGUgc291cmNlIGZvciBhbiBleGlzdGluZyByZWNpcGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J0V4dHJhY3RzIHRoZSBzb3VyY2UgZm9yIGFuIGV4aXN0aW5nIHJlY2lwZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXIpCisgICAgcGFyc2VyX2V4dHJhY3QuYWRkX2FyZ3VtZW50KCdyZWNpcGVuYW1lJywgaGVscD0nTmFtZSBmb3IgcmVjaXBlIHRvIGV4dHJhY3QgdGhlIHNvdXJjZSBmb3InKQorICAgIHBhcnNlcl9leHRyYWN0LmFkZF9hcmd1bWVudCgnc3JjdHJlZScsIGhlbHA9J1BhdGggdG8gd2hlcmUgdG8gZXh0cmFjdCB0aGUgc291cmNlIHRyZWUnKQorICAgIHBhcnNlcl9leHRyYWN0LmFkZF9hcmd1bWVudCgnLS1icmFuY2gnLCAnLWInLCBkZWZhdWx0PSJkZXZ0b29sIiwgaGVscD0nTmFtZSBmb3IgZGV2ZWxvcG1lbnQgYnJhbmNoIHRvIGNoZWNrb3V0JykKKyAgICBwYXJzZXJfZXh0cmFjdC5hZGRfYXJndW1lbnQoJy0ta2VlcC10ZW1wJywgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0nS2VlcCB0ZW1wb3JhcnkgZGlyZWN0b3J5IChmb3IgZGVidWdnaW5nKScpCisgICAgcGFyc2VyX2V4dHJhY3Quc2V0X2RlZmF1bHRzKGZ1bmM9ZXh0cmFjdCkKKworICAgIHBhcnNlcl91cGRhdGVfcmVjaXBlID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCd1cGRhdGUtcmVjaXBlJywgaGVscD0nQXBwbHkgY2hhbmdlcyBmcm9tIGV4dGVybmFsIHNvdXJjZSB0cmVlIHRvIHJlY2lwZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nQXBwbGllcyBjaGFuZ2VzIGZyb20gZXh0ZXJuYWwgc291cmNlIHRyZWUgdG8gYSByZWNpcGUgKHVwZGF0aW5nL2FkZGluZy9yZW1vdmluZyBwYXRjaGVzIGFzIG5lY2Vzc2FyeSwgb3IgYnkgdXBkYXRpbmcgU1JDUkVWKScpCisgICAgcGFyc2VyX3VwZGF0ZV9yZWNpcGUuYWRkX2FyZ3VtZW50KCdyZWNpcGVuYW1lJywgaGVscD0nTmFtZSBvZiByZWNpcGUgdG8gdXBkYXRlJykKKyAgICBwYXJzZXJfdXBkYXRlX3JlY2lwZS5hZGRfYXJndW1lbnQoJy0tbW9kZScsICctbScsIGNob2ljZXM9WydwYXRjaCcsICdzcmNyZXYnLCAnYXV0byddLCBkZWZhdWx0PSdhdXRvJywgaGVscD0nVXBkYXRlIG1vZGUgKHdoZXJlICUobWV0YXZhcilzIGlzICUoY2hvaWNlcylzOyBkZWZhdWx0IGlzICUoZGVmYXVsdClzKScsIG1ldGF2YXI9J01PREUnKQorICAgIHBhcnNlcl91cGRhdGVfcmVjaXBlLmFkZF9hcmd1bWVudCgnLS1pbml0aWFsLXJldicsIGhlbHA9J1N0YXJ0aW5nIHJldmlzaW9uIGZvciBwYXRjaGVzJykKKyAgICBwYXJzZXJfdXBkYXRlX3JlY2lwZS5hZGRfYXJndW1lbnQoJy0tYXBwZW5kJywgJy1hJywgaGVscD0nV3JpdGUgY2hhbmdlcyB0byBhIGJiYXBwZW5kIGluIHRoZSBzcGVjaWZpZWQgbGF5ZXIgaW5zdGVhZCBvZiB0aGUgcmVjaXBlJywgbWV0YXZhcj0nTEFZRVJESVInKQorICAgIHBhcnNlcl91cGRhdGVfcmVjaXBlLmFkZF9hcmd1bWVudCgnLS13aWxkY2FyZC12ZXJzaW9uJywgJy13JywgaGVscD0nSW4gY29uanVuY3Rpb24gd2l0aCAtYS8tLWFwcGVuZCwgdXNlIGEgd2lsZGNhcmQgdG8gbWFrZSB0aGUgYmJhcHBlbmQgYXBwbHkgdG8gYW55IHJlY2lwZSB2ZXJzaW9uJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfdXBkYXRlX3JlY2lwZS5hZGRfYXJndW1lbnQoJy0tbm8tcmVtb3ZlJywgJy1uJywgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0nRG9uXCd0IHJlbW92ZSBwYXRjaGVzLCBvbmx5IGFkZCBvciB1cGRhdGUnKQorICAgIHBhcnNlcl91cGRhdGVfcmVjaXBlLnNldF9kZWZhdWx0cyhmdW5jPXVwZGF0ZV9yZWNpcGUpCisKKyAgICBwYXJzZXJfc3RhdHVzID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdzdGF0dXMnLCBoZWxwPSdTaG93IHdvcmtzcGFjZSBzdGF0dXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J0xpc3RzIHJlY2lwZXMgY3VycmVudGx5IGluIHlvdXIgd29ya3NwYWNlIGFuZCB0aGUgcGF0aHMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBleHRlcm5hbCBzb3VyY2UgdHJlZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyX2NsYXNzPWFyZ3BhcnNlLkFyZ3VtZW50RGVmYXVsdHNIZWxwRm9ybWF0dGVyKQorICAgIHBhcnNlcl9zdGF0dXMuc2V0X2RlZmF1bHRzKGZ1bmM9c3RhdHVzKQorCisgICAgcGFyc2VyX3Jlc2V0ID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdyZXNldCcsIGhlbHA9J1JlbW92ZSBhIHJlY2lwZSBmcm9tIHlvdXIgd29ya3NwYWNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J1JlbW92ZXMgdGhlIHNwZWNpZmllZCByZWNpcGUgZnJvbSB5b3VyIHdvcmtzcGFjZSAocmVzZXR0aW5nIGl0cyBzdGF0ZSknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXIpCisgICAgcGFyc2VyX3Jlc2V0LmFkZF9hcmd1bWVudCgncmVjaXBlbmFtZScsIG5hcmdzPSc/JywgaGVscD0nUmVjaXBlIHRvIHJlc2V0JykKKyAgICBwYXJzZXJfcmVzZXQuYWRkX2FyZ3VtZW50KCctLWFsbCcsICctYScsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9J1Jlc2V0IGFsbCByZWNpcGVzIChjbGVhciB3b3Jrc3BhY2UpJykKKyAgICBwYXJzZXJfcmVzZXQuYWRkX2FyZ3VtZW50KCctLW5vLWNsZWFuJywgJy1uJywgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0nRG9uXCd0IGNsZWFuIHRoZSBzeXNyb290IHRvIHJlbW92ZSByZWNpcGUgb3V0cHV0JykKKyAgICBwYXJzZXJfcmVzZXQuc2V0X2RlZmF1bHRzKGZ1bmM9cmVzZXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvdXBncmFkZS5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC91cGdyYWRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NDQzYjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvdXBncmFkZS5weQpAQCAtMCwwICsxLDM1NCBAQAorIyBEZXZlbG9wbWVudCB0b29sIC0gdXBncmFkZSBjb21tYW5kIHBsdWdpbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyIiIkRldnRvb2wgdXBncmFkZSBwbHVnaW4iIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IHNjcmlwdHV0aWxzCitpbXBvcnQgZXJybm8KK2ltcG9ydCBiYgoraW1wb3J0IG9lLnJlY2lwZXV0aWxzCitmcm9tIGRldnRvb2wgaW1wb3J0IHN0YW5kYXJkCitmcm9tIGRldnRvb2wgaW1wb3J0IGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQsIHNldHVwX3RpbmZvaWwsIERldnRvb2xFcnJvciwgcGFyc2VfcmVjaXBlCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdkZXZ0b29sJykKKworZGVmIHBsdWdpbl9pbml0KHBsdWdpbmxpc3QpOgorICAgICIiIlBsdWdpbiBpbml0aWFsaXphdGlvbiIiIgorICAgIHBhc3MKKworZGVmIF9ydW4oY21kLCBjd2Q9JycpOgorICAgIGxvZ2dlci5kZWJ1ZygiUnVubmluZyBjb21tYW5kICVzPiAlcyIgJSAoY3dkLGNtZCkpCisgICAgcmV0dXJuIGJiLnByb2Nlc3MucnVuKCclcycgJSBjbWQsIGN3ZD1jd2QpCisKK2RlZiBfZ2V0X3NyY3RyZWUodG1wZGlyKToKKyAgICBzcmN0cmVlID0gdG1wZGlyCisgICAgZGlycyA9IG9zLmxpc3RkaXIodG1wZGlyKQorICAgIGlmIGxlbihkaXJzKSA9PSAxOgorICAgICAgICBzcmN0cmVlID0gb3MucGF0aC5qb2luKHRtcGRpciwgZGlyc1swXSkKKyAgICByZXR1cm4gc3JjdHJlZQorCitkZWYgX2NvcHlfc291cmNlX2NvZGUob3JpZywgZGVzdCk6CisgICAgZm9yIHBhdGggaW4gc3RhbmRhcmQuX2xzX3RyZWUob3JpZyk6CisgICAgICAgIGRlc3RfZGlyID0gb3MucGF0aC5qb2luKGRlc3QsIG9zLnBhdGguZGlybmFtZShwYXRoKSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGRlc3RfZGlyKQorICAgICAgICBkZXN0X3BhdGggPSBvcy5wYXRoLmpvaW4oZGVzdCwgcGF0aCkKKyAgICAgICAgb3MucmVuYW1lKG9zLnBhdGguam9pbihvcmlnLCBwYXRoKSwgZGVzdF9wYXRoKQorCitkZWYgX2dldF9jaGVja3N1bXMocmYpOgorICAgIGltcG9ydCByZQorICAgIGNoZWNrc3VtcyA9IHt9CisgICAgd2l0aCBvcGVuKHJmKSBhcyBmOgorICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgZm9yIGNzIGluIFsnbWQ1c3VtJywgJ3NoYTI1NnN1bSddOgorICAgICAgICAgICAgICAgIG0gPSByZS5tYXRjaCgiXlNSQ19VUklcWyVzXF0uKj0uKlwiKC4qKVwiIiAlIGNzLCBsaW5lKQorICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgIGNoZWNrc3Vtc1tjc10gPSBtLmdyb3VwKDEpCisgICAgcmV0dXJuIGNoZWNrc3VtcworCitkZWYgX3JlcGxhY2VfY2hlY2tzdW1zKHJmLCBtZDUsIHNoYTI1Nik6CisgICAgaWYgbm90IG1kNSBhbmQgbm90IHNoYTI1NjoKKyAgICAgICAgcmV0dXJuCisgICAgY2hlY2tzdW1zID0geydtZDVzdW0nOm1kNSwgJ3NoYTI1NnN1bSc6c2hhMjU2fQorICAgIHdpdGggb3BlbihyZiArICIudG1wIiwgIncrIikgYXMgdG1wcmY6CisgICAgICAgIHdpdGggb3BlbihyZikgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgbSA9IE5vbmUKKyAgICAgICAgICAgICAgICBmb3IgY3MgaW4gY2hlY2tzdW1zLmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCJeU1JDX1VSSVxbJXNcXS4qPS4qXCIoLiopXCIiICUgY3MsIGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjaGVja3N1bXNbY3NdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZGNoZWNrID0gbS5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2NoZWNrID0gY2hlY2tzdW1zW2NzXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2Uob2xkY2hlY2ssIG5ld2NoZWNrKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICB0bXByZi53cml0ZShsaW5lKQorICAgIG9zLnJlbmFtZShyZiArICIudG1wIiwgcmYpCisKKworZGVmIF9yZW1vdmVfcGF0Y2hfZGlycyhyZWNpcGVmb2xkZXIpOgorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHJlY2lwZWZvbGRlcik6CisgICAgICAgIGZvciBkIGluIGRpcnM6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKG9zLnBhdGguam9pbihyb290LGQpKQorCitkZWYgX3JlY2lwZV9jb250YWlucyhyZiwgdmFyKToKKyAgICBpbXBvcnQgcmUKKyAgICBmb3VuZCA9IEZhbHNlCisgICAgd2l0aCBvcGVuKHJmKSBhcyBmOgorICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgaWYgcmUubWF0Y2goIl4lcy4qPS4qIiAlIHZhciwgbGluZSk6CisgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICByZXR1cm4gZm91bmQKKworZGVmIF9yZW5hbWVfcmVjaXBlX2RpcnMob2xkcHYsIG5ld3B2LCBwYXRoKToKKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhwYXRoKToKKyAgICAgICAgZm9yIG9sZGRpciBpbiBkaXJzOgorICAgICAgICAgICAgaWYgb2xkZGlyLmZpbmQob2xkcHYpICE9IC0xOgorICAgICAgICAgICAgICAgIG5ld2RpciA9IG9sZGRpci5yZXBsYWNlKG9sZHB2LCBuZXdwdikKKyAgICAgICAgICAgICAgICBpZiBvbGRkaXIgIT0gbmV3ZGlyOgorICAgICAgICAgICAgICAgICAgICBfcnVuKCdtdiAlcyAlcycgJSAob2xkZGlyLCBuZXdkaXIpKQorCitkZWYgX3JlbmFtZV9yZWNpcGVfZmlsZShicG4sIG9sZHB2LCBuZXdwdiwgcGF0aCk6CisgICAgb2xkcmVjaXBlID0gIiVzXyVzLmJiIiAlIChicG4sIG9sZHB2KQorICAgIG5ld3JlY2lwZSA9ICIlc18lcy5iYiIgJSAoYnBuLCBuZXdwdikKKyAgICBpZiBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4ocGF0aCwgb2xkcmVjaXBlKSk6CisgICAgICAgIGlmIG9sZHJlY2lwZSAhPSBuZXdyZWNpcGU6CisgICAgICAgICAgICBfcnVuKCdtdiAlcyAlcycgJSAob2xkcmVjaXBlLCBuZXdyZWNpcGUpLCBjd2Q9cGF0aCkKKyAgICBlbHNlOgorICAgICAgICByZWNpcGUgPSAiJXNfZ2l0LmJiIiAlIGJwbgorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4ocGF0aCwgcmVjaXBlKSk6CisgICAgICAgICAgICBuZXdyZWNpcGUgPSByZWNpcGUKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiT3JpZ2luYWwgcmVjaXBlIG5vdCBmb3VuZCBvbiB3b3Jrc3BhY2UiKQorICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocGF0aCwgbmV3cmVjaXBlKQorCitkZWYgX3JlbmFtZV9yZWNpcGVfZmlsZXMoYnBuLCBvbGRwdiwgbmV3cHYsIHBhdGgpOgorICAgIF9yZW5hbWVfcmVjaXBlX2RpcnMob2xkcHYsIG5ld3B2LCBwYXRoKQorICAgIHJldHVybiBfcmVuYW1lX3JlY2lwZV9maWxlKGJwbiwgb2xkcHYsIG5ld3B2LCBwYXRoKQorCitkZWYgX3VzZV9leHRlcm5hbF9idWlsZChzYW1lX2Rpciwgbm9fc2FtZV9kaXIsIGQpOgorICAgIGJfaXNfcyA9IFRydWUKKyAgICBpZiBub19zYW1lX2RpcjoKKyAgICAgICAgbG9nZ2VyLmluZm8oJ3VzaW5nIHNlcGFyYXRlIGJ1aWxkIGRpcmVjdG9yeSBzaW5jZSAtLW5vLXNhbWUtZGlyIHNwZWNpZmllZCcpCisgICAgICAgIGJfaXNfcyA9IEZhbHNlCisgICAgZWxpZiBzYW1lX2RpcjoKKyAgICAgICAgbG9nZ2VyLmluZm8oJ3VzaW5nIHNvdXJjZSB0cmVlIGFzIGJ1aWxkIGRpcmVjdG9yeSBzaW5jZSAtLXNhbWUtZGlyIHNwZWNpZmllZCcpCisgICAgZWxpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdhdXRvdG9vbHMtYnJva2Vuc2VwJywgZCk6CisgICAgICAgIGxvZ2dlci5pbmZvKCd1c2luZyBzb3VyY2UgdHJlZSBhcyBidWlsZCBkaXJlY3Rvcnkgc2luY2Ugb3JpZ2luYWwgcmVjaXBlIGluaGVyaXRzIGF1dG90b29scy1icm9rZW5zZXAnKQorICAgIGVsaWYgZC5nZXRWYXIoJ0InLCBUcnVlKSA9PSBvcy5wYXRoLmFic3BhdGgoZC5nZXRWYXIoJ1MnLCBUcnVlKSk6CisgICAgICAgIGxvZ2dlci5pbmZvKCd1c2luZyBzb3VyY2UgdHJlZSBhcyBidWlsZCBkaXJlY3Rvcnkgc2luY2UgdGhhdCBpcyB0aGUgZGVmYXVsdCBmb3IgdGhpcyByZWNpcGUnKQorICAgIGVsc2U6CisgICAgICAgIGJfaXNfcyA9IEZhbHNlCisgICAgcmV0dXJuIGJfaXNfcworCitkZWYgX3dyaXRlX2FwcGVuZChyYywgc3JjdHJlZSwgc2FtZV9kaXIsIG5vX3NhbWVfZGlyLCByZXYsIHdvcmtzcGFjZSwgZCk6CisgICAgIiIiV3JpdGVzIGFuIGFwcGVuZCBmaWxlIiIiCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHJjKToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJiYmFwcGVuZCBub3QgY3JlYXRlZCBiZWNhdXNlICVzIGRvZXMgbm90IGV4aXN0IiAlIHJjKQorCisgICAgYXBwZW5kcGF0aCA9IG9zLnBhdGguam9pbih3b3Jrc3BhY2UsICdhcHBlbmRzJykKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYXBwZW5kcGF0aCk6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihhcHBlbmRwYXRoKQorCisgICAgYnJmID0gb3MucGF0aC5iYXNlbmFtZShvcy5wYXRoLnNwbGl0ZXh0KHJjKVswXSkgIyByYyBiYXNlbmFtZQorCisgICAgc3JjdHJlZSA9IG9zLnBhdGguYWJzcGF0aChzcmN0cmVlKQorICAgIHBuID0gZC5nZXRWYXIoJ1BOJyxUcnVlKQorICAgIGFmID0gb3MucGF0aC5qb2luKGFwcGVuZHBhdGgsICclcy5iYmFwcGVuZCcgJSBicmYpCisgICAgd2l0aCBvcGVuKGFmLCAndycpIGFzIGY6CisgICAgICAgIGYud3JpdGUoJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcblxuJykKKyAgICAgICAgZi53cml0ZSgnaW5oZXJpdCBleHRlcm5hbHNyY1xuJykKKyAgICAgICAgZi53cml0ZSgoJyMgTk9URTogV2UgdXNlIHBuLSBvdmVycmlkZXMgaGVyZSB0byBhdm9pZCBhZmZlY3RpbmcnCisgICAgICAgICAgICAgICAgICdtdWx0aXBsZSB2YXJpYW50cyBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgcmVjaXBlIHVzZXMgQkJDTEFTU0VYVEVORFxuJykpCisgICAgICAgIGYud3JpdGUoJ0VYVEVSTkFMU1JDX3BuLSVzID0gIiVzIlxuJyAlIChwbiwgc3JjdHJlZSkpCisgICAgICAgIGlmIF91c2VfZXh0ZXJuYWxfYnVpbGQoc2FtZV9kaXIsIG5vX3NhbWVfZGlyLCBkKToKKyAgICAgICAgICAgIGYud3JpdGUoJ0VYVEVSTkFMU1JDX0JVSUxEX3BuLSVzID0gIiVzIlxuJyAlIChwbiwgc3JjdHJlZSkpCisgICAgICAgIGlmIHJldjoKKyAgICAgICAgICAgIGYud3JpdGUoJ1xuIyBpbml0aWFsX3JldjogJXNcbicgJSByZXYpCisgICAgcmV0dXJuIGFmCisKK2RlZiBfY2xlYW51cF9vbl9lcnJvcihyZiwgc3JjdHJlZSk6CisgICAgcmZwID0gb3MucGF0aC5zcGxpdChyZilbMF0gIyByZWNpcGUgZm9sZGVyCisgICAgcmZwcCA9IG9zLnBhdGguc3BsaXQocmZwKVswXSAjIHJlY2lwZXMgZm9sZGVyCisgICAgaWYgb3MucGF0aC5leGlzdHMocmZwKToKKyAgICAgICAgc2h1dGlsLnJtdHJlZShiKQorICAgIGlmIG5vdCBsZW4ob3MubGlzdGRpcihyZnBwKSk6CisgICAgICAgIG9zLnJtZGlyKHJmcHApCisgICAgc3JjdHJlZSA9IG9zLnBhdGguYWJzcGF0aChzcmN0cmVlKQorICAgIGlmIG9zLnBhdGguZXhpc3RzKHNyY3RyZWUpOgorICAgICAgICBzaHV0aWwucm10cmVlKHNyY3RyZWUpCisKK2RlZiBfdXBncmFkZV9lcnJvcihlLCByZiwgc3JjdHJlZSk6CisgICAgaWYgcmY6CisgICAgICAgIGNsZWFudXBfb25fZXJyb3IocmYsIHNyY3RyZWUpCisgICAgbG9nZ2VyLmVycm9yKGUpCisgICAgcmFpc2UgRGV2dG9vbEVycm9yKGUpCisKK2RlZiBfZ2V0X3VyaShyZCk6CisgICAgc3JjdXJpcyA9IHJkLmdldFZhcignU1JDX1VSSScsIFRydWUpLnNwbGl0KCkKKyAgICBpZiBub3QgbGVuKHNyY3VyaXMpOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ1NSQ19VUkkgbm90IGZvdW5kIG9uIHJlY2lwZScpCisgICAgc3JjdXJpID0gc3JjdXJpc1swXSAjIGl0IGlzIGFzc3VtZWQsIFVSSSBpcyBhdCBmaXJzdCBwb3NpdGlvbgorICAgIHNyY3JldiA9ICcke0FVVE9SRVZ9JworICAgIGlmICc6Ly8nIGluIHNyY3VyaToKKyAgICAgICAgIyBGZXRjaCBhIFVSTAorICAgICAgICByZXZfcmUgPSByZS5jb21waWxlKCc7cmV2PShbXjtdKyknKQorICAgICAgICByZXMgPSByZXZfcmUuc2VhcmNoKHNyY3VyaSkKKyAgICAgICAgaWYgcmVzOgorICAgICAgICAgICAgc3JjcmV2ID0gcmVzLmdyb3VwKDEpCisgICAgICAgICAgICBzcmN1cmkgPSByZXZfcmUuc3ViKCcnLCBzcmN1cmkpCisgICAgcmV0dXJuIHNyY3VyaSwgc3JjcmV2CisKK2RlZiBfZXh0cmFjdF9uZXdfc291cmNlKG5ld3B2LCBzcmN0cmVlLCBub19wYXRjaCwgc3JjcmV2LCBicmFuY2gsIGtlZXBfdGVtcCwgdGluZm9pbCwgcmQpOgorICAgICIiIkV4dHJhY3Qgc291cmNlcyBvZiBhIHJlY2lwZSB3aXRoIGEgbmV3IHZlcnNpb24iIiIKKworICAgIGRlZiBfX3J1bihjbWQpOgorICAgICAgICAiIiJTaW1wbGUgd3JhcHBlciB3aGljaCBjYWxscyBfcnVuIHdpdGggc3JjdHJlZSBhcyBjd2QiIiIKKyAgICAgICAgcmV0dXJuIF9ydW4oY21kLCBzcmN0cmVlKQorCisgICAgY3JkID0gcmQuY3JlYXRlQ29weSgpCisKKyAgICBwdiA9IGNyZC5nZXRWYXIoJ1BWJywgVHJ1ZSkKKyAgICBjcmQuc2V0VmFyKCdQVicsIG5ld3B2KQorCisgICAgdG1wc3JjdHJlZSA9IE5vbmUKKyAgICB1cmksIHJldiA9IF9nZXRfdXJpKGNyZCkKKyAgICBpZiBzcmNyZXY6CisgICAgICAgIHJldiA9IHNyY3JldgorICAgIGlmIHVyaS5zdGFydHN3aXRoKCdnaXQ6Ly8nKToKKyAgICAgICAgX19ydW4oJ2dpdCBjaGVja291dCAlcycgJSByZXYpCisgICAgICAgIF9fcnVuKCdnaXQgdGFnIC1mIGRldnRvb2wtYmFzZS1uZXcnKQorICAgICAgICBtZDUgPSBOb25lCisgICAgICAgIHNoYTI1NiA9IE5vbmUKKyAgICBlbHNlOgorICAgICAgICBfX3J1bignZ2l0IGNoZWNrb3V0IC1iIGRldnRvb2wtJXMnICUgbmV3cHYpCisKKyAgICAgICAgdG1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2wnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtZDUsIHNoYTI1NiA9IHNjcmlwdHV0aWxzLmZldGNoX3VyaSh0aW5mb2lsLmNvbmZpZ19kYXRhLCB1cmksIHRtcGRpciwgcmV2KQorICAgICAgICBleGNlcHQgYmIuZmV0Y2gyLkZldGNoRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcihlKQorCisgICAgICAgIHRtcHNyY3RyZWUgPSBfZ2V0X3NyY3RyZWUodG1wZGlyKQorCisgICAgICAgIHNjcnRyZWUgPSBvcy5wYXRoLmFic3BhdGgoc3JjdHJlZSkKKworICAgICAgICBfY29weV9zb3VyY2VfY29kZSh0bXBzcmN0cmVlLCBzcmN0cmVlKQorCisgICAgICAgIChzdGRvdXQsXykgPSBfX3J1bignZ2l0IGxzLWZpbGVzIC0tbW9kaWZpZWQgLS1vdGhlcnMgLS1leGNsdWRlLXN0YW5kYXJkJykKKyAgICAgICAgZm9yIGYgaW4gc3Rkb3V0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIF9fcnVuKCdnaXQgYWRkICIlcyInICUgZikKKworICAgICAgICBfX3J1bignZ2l0IGNvbW1pdCAtcSAtbSAiQ29tbWl0IG9mIHVwc3RyZWFtIGNoYW5nZXMgYXQgdmVyc2lvbiAlcyIgLS1hbGxvdy1lbXB0eScgJSBuZXdwdikKKyAgICAgICAgX19ydW4oJ2dpdCB0YWcgLWYgZGV2dG9vbC1iYXNlLSVzJyAlIG5ld3B2KQorCisgICAgKHN0ZG91dCwgXykgPSBfX3J1bignZ2l0IHJldi1wYXJzZSBIRUFEJykKKyAgICByZXYgPSBzdGRvdXQucnN0cmlwKCkKKworICAgIGlmIG5vX3BhdGNoOgorICAgICAgICBwYXRjaGVzID0gb2UucmVjaXBldXRpbHMuZ2V0X3JlY2lwZV9wYXRjaGVzKGNyZCkKKyAgICAgICAgaWYgbGVuKHBhdGNoZXMpOgorICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0J5IHVzZXIgY2hvaWNlLCB0aGUgZm9sbG93aW5nIHBhdGNoZXMgd2lsbCBOT1QgYmUgYXBwbGllZCcpCisgICAgICAgICAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiJXMiICUgb3MucGF0aC5iYXNlbmFtZShwYXRjaCkpCisgICAgZWxzZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX19ydW4oJ2dpdCBjaGVja291dCBkZXZ0b29sLXBhdGNoZWQgLWIgJXMnICUgYnJhbmNoKQorICAgICAgICAgICAgX19ydW4oJ2dpdCByZWJhc2UgJXMnICUgcmV2KQorICAgICAgICAgICAgaWYgdXJpLnN0YXJ0c3dpdGgoJ2dpdDovLycpOgorICAgICAgICAgICAgICAgIHN1ZmZpeCA9ICduZXcnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN1ZmZpeCA9IG5ld3B2CisgICAgICAgICAgICBfX3J1bignZ2l0IHRhZyAtZiBkZXZ0b29sLXBhdGNoZWQtJXMnICUgc3VmZml4KQorICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0NvbW1hbmQgXCclc1wnIGZhaWxlZDpcbiVzJyAlIChlLmNvbW1hbmQsIGUuc3Rkb3V0KSkKKworICAgIGlmIHRtcHNyY3RyZWU6CisgICAgICAgIGlmIGtlZXBfdGVtcDoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdQcmVzZXJ2aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXMnICUgdG1wc3JjdHJlZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUodG1wc3JjdHJlZSkKKworICAgIHJldHVybiAocmV2LCBtZDUsIHNoYTI1NikKKworZGVmIF9jcmVhdGVfbmV3X3JlY2lwZShuZXdwdiwgbWQ1LCBzaGEyNTYsIHdvcmtzcGFjZSwgcmQpOgorICAgICIiIkNyZWF0ZXMgdGhlIG5ldyByZWNpcGUgdW5kZXIgd29ya3NwYWNlIiIiCisgICAgY3JkID0gcmQuY3JlYXRlQ29weSgpCisKKyAgICBicG4gPSBjcmQuZ2V0VmFyKCdCUE4nLCBUcnVlKQorICAgIHBhdGggPSBvcy5wYXRoLmpvaW4od29ya3NwYWNlLCAncmVjaXBlcycsIGJwbikKKyAgICBiYi51dGlscy5ta2RpcmhpZXIocGF0aCkKKyAgICBvZS5yZWNpcGV1dGlscy5jb3B5X3JlY2lwZV9maWxlcyhjcmQsIHBhdGgpCisKKyAgICBvbGRwdiA9IGNyZC5nZXRWYXIoJ1BWJywgVHJ1ZSkKKyAgICBpZiBub3QgbmV3cHY6CisgICAgICAgIG5ld3B2ID0gb2xkcHYKKyAgICBmdWxscGF0aCA9IF9yZW5hbWVfcmVjaXBlX2ZpbGVzKGJwbiwgb2xkcHYsIG5ld3B2LCBwYXRoKQorCisgICAgaWYgX3JlY2lwZV9jb250YWlucyhmdWxscGF0aCwgJ1BWJykgYW5kIG5ld3B2ICE9IG9sZHB2OgorICAgICAgICBvZS5yZWNpcGV1dGlscy5wYXRjaF9yZWNpcGUoZCwgZnVsbHBhdGgsIHsnUFYnOm5ld3B2fSkKKworICAgIGlmIG1kNSBhbmQgc2hhMjU2OgorICAgICAgICAjIFVuZm9ydHVuYXRlbHksIG9lLnJlY2lwZXV0aWxzLnBhdGNoX3JlY2lwZSBjYW5ub3QgdXBkYXRlIGZsYWdzLgorICAgICAgICAjIG9uY2UgdGhlIGxhdHRlciBmZWF0dXJlIGlzIGltcGxlbWVudGVkLCB3ZSBzaG91bGQgY2FsbCBwYXRjaF9yZWNpcGUKKyAgICAgICAgIyBpbnN0ZWFkIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24KKyAgICAgICAgX3JlcGxhY2VfY2hlY2tzdW1zKGZ1bGxwYXRoLCBtZDUsIHNoYTI1NikKKworICAgIHJldHVybiBmdWxscGF0aAorCitkZWYgdXBncmFkZShhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgorICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAndXBncmFkZScgc3ViY29tbWFuZCIiIgorCisgICAgaWYgYXJncy5yZWNpcGVuYW1lIGluIHdvcmtzcGFjZToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJyZWNpcGUgJXMgaXMgYWxyZWFkeSBpbiB5b3VyIHdvcmtzcGFjZSIgJSBhcmdzLnJlY2lwZW5hbWUpCisgICAgaWYgbm90IGFyZ3MudmVyc2lvbiBhbmQgbm90IGFyZ3Muc3JjcmV2OgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIllvdSBtdXN0IHByb3ZpZGUgYSB2ZXJzaW9uIHVzaW5nIHRoZSAtLXZlcnNpb24vLVYgb3B0aW9uLCBvciBmb3IgcmVjaXBlcyB0aGF0IGZldGNoIGZyb20gYW4gU0NNIHN1Y2ggYXMgZ2l0LCB0aGUgLS1zcmNyZXYvLVMgb3B0aW9uIikKKworICAgIHJlYXNvbiA9IG9lLnJlY2lwZXV0aWxzLnZhbGlkYXRlX3BuKGFyZ3MucmVjaXBlbmFtZSkKKyAgICBpZiByZWFzb246CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcihyZWFzb24pCisKKyAgICB0aW5mb2lsID0gc2V0dXBfdGluZm9pbCgpCisKKyAgICByZCA9IHBhcnNlX3JlY2lwZShjb25maWcsIHRpbmZvaWwsIGFyZ3MucmVjaXBlbmFtZSwgVHJ1ZSkKKyAgICBpZiBub3QgcmQ6CisgICAgICAgIHJldHVybiAxCisKKyAgICBzdGFuZGFyZC5fY2hlY2tfY29tcGF0aWJsZV9yZWNpcGUoYXJncy5yZWNpcGVuYW1lLCByZCkKKyAgICBpZiByZC5nZXRWYXIoJ1BWJywgVHJ1ZSkgPT0gYXJncy52ZXJzaW9uIGFuZCByZC5nZXRWYXIoJ1NSQ1JFVicsIFRydWUpID09IGFyZ3Muc3JjcmV2OgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIkN1cnJlbnQgYW5kIHVwZ3JhZGUgdmVyc2lvbnMgYXJlIHRoZSBzYW1lIHZlcnNpb24iICUgdmVyc2lvbikKKworICAgIHJmID0gTm9uZQorICAgIHRyeToKKyAgICAgICAgcmV2MSA9IHN0YW5kYXJkLl9leHRyYWN0X3NvdXJjZShhcmdzLnNyY3RyZWUsIEZhbHNlLCAnZGV2dG9vbC1vcmlnJywgcmQpCisgICAgICAgIHJldjIsIG1kNSwgc2hhMjU2ID0gX2V4dHJhY3RfbmV3X3NvdXJjZShhcmdzLnZlcnNpb24sIGFyZ3Muc3JjdHJlZSwgYXJncy5ub19wYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Muc3JjcmV2LCBhcmdzLmJyYW5jaCwgYXJncy5rZWVwX3RlbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW5mb2lsLCByZCkKKyAgICAgICAgcmYgPSBfY3JlYXRlX25ld19yZWNpcGUoYXJncy52ZXJzaW9uLCBtZDUsIHNoYTI1NiwgY29uZmlnLndvcmtzcGFjZV9wYXRoLCByZCkKKyAgICBleGNlcHQgYmIucHJvY2Vzcy5DbWRFcnJvciBhcyBlOgorICAgICAgICBfdXBncmFkZV9lcnJvcihlLCByZiwgYXJncy5zcmN0cmVlKQorICAgIGV4Y2VwdCBEZXZ0b29sRXJyb3IgYXMgZToKKyAgICAgICAgX3VwZ3JhZGVfZXJyb3IoZSwgcmYsIGFyZ3Muc3JjdHJlZSkKKyAgICBzdGFuZGFyZC5fYWRkX21kNShjb25maWcsIGFyZ3MucmVjaXBlbmFtZSwgb3MucGF0aC5kaXJuYW1lKHJmKSkKKworICAgIGFmID0gX3dyaXRlX2FwcGVuZChyZiwgYXJncy5zcmN0cmVlLCBhcmdzLnNhbWVfZGlyLCBhcmdzLm5vX3NhbWVfZGlyLCByZXYyLAorICAgICAgICAgICAgICAgICAgICAgICBjb25maWcud29ya3NwYWNlX3BhdGgsIHJkKQorICAgIHN0YW5kYXJkLl9hZGRfbWQ1KGNvbmZpZywgYXJncy5yZWNpcGVuYW1lLCBhZikKKyAgICBsb2dnZXIuaW5mbygnVXBncmFkZWQgc291cmNlIGV4dHJhY3RlZCB0byAlcycgJSBhcmdzLnNyY3RyZWUpCisgICAgcmV0dXJuIDAKKworZGVmIHJlZ2lzdGVyX2NvbW1hbmRzKHN1YnBhcnNlcnMsIGNvbnRleHQpOgorICAgICIiIlJlZ2lzdGVyIGRldnRvb2wgc3ViY29tbWFuZHMgZnJvbSB0aGlzIHBsdWdpbiIiIgorICAgIHBhcnNlcl91cGdyYWRlID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCd1cGdyYWRlJywgaGVscD0nVXBncmFkZSBhbiBleGlzdGluZyByZWNpcGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdVcGdyYWRlcyBhbiBleGlzdGluZyByZWNpcGUgdG8gYSBuZXcgdXBzdHJlYW0gdmVyc2lvbicpCisgICAgcGFyc2VyX3VwZ3JhZGUuYWRkX2FyZ3VtZW50KCdyZWNpcGVuYW1lJywgaGVscD0nTmFtZSBmb3IgcmVjaXBlIHRvIGV4dHJhY3QgdGhlIHNvdXJjZSBmb3InKQorICAgIHBhcnNlcl91cGdyYWRlLmFkZF9hcmd1bWVudCgnc3JjdHJlZScsIGhlbHA9J1BhdGggdG8gd2hlcmUgdG8gZXh0cmFjdCB0aGUgc291cmNlIHRyZWUnKQorICAgIHBhcnNlcl91cGdyYWRlLmFkZF9hcmd1bWVudCgnLS12ZXJzaW9uJywgJy1WJywgaGVscD0nVmVyc2lvbiB0byB1cGdyYWRlIHRvIChQViknKQorICAgIHBhcnNlcl91cGdyYWRlLmFkZF9hcmd1bWVudCgnLS1zcmNyZXYnLCAnLVMnLCBoZWxwPSdTb3VyY2UgcmV2aXNpb24gdG8gdXBncmFkZSB0byAoaWYgZmV0Y2hpbmcgZnJvbSBhbiBTQ00gc3VjaCBhcyBnaXQpJykKKyAgICBwYXJzZXJfdXBncmFkZS5hZGRfYXJndW1lbnQoJy0tYnJhbmNoJywgJy1iJywgZGVmYXVsdD0iZGV2dG9vbCIsIGhlbHA9J05hbWUgZm9yIG5ldyBkZXZlbG9wbWVudCBicmFuY2ggdG8gY2hlY2tvdXQgKGRlZmF1bHQgIiUoZGVmYXVsdClzIiknKQorICAgIHBhcnNlcl91cGdyYWRlLmFkZF9hcmd1bWVudCgnLS1uby1wYXRjaCcsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9J0RvIG5vdCBhcHBseSBwYXRjaGVzIGZyb20gdGhlIHJlY2lwZSB0byB0aGUgbmV3IHNvdXJjZSBjb2RlJykKKyAgICBncm91cCA9IHBhcnNlcl91cGdyYWRlLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAoKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1zYW1lLWRpcicsICctcycsIGhlbHA9J0J1aWxkIGluIHNhbWUgZGlyZWN0b3J5IGFzIHNvdXJjZScsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLW5vLXNhbWUtZGlyJywgaGVscD0nRm9yY2UgYnVpbGQgaW4gYSBzZXBhcmF0ZSBidWlsZCBkaXJlY3RvcnknLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgIHBhcnNlcl91cGdyYWRlLmFkZF9hcmd1bWVudCgnLS1rZWVwLXRlbXAnLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSdLZWVwIHRlbXBvcmFyeSBkaXJlY3RvcnkgKGZvciBkZWJ1Z2dpbmcpJykKKyAgICBwYXJzZXJfdXBncmFkZS5zZXRfZGVmYXVsdHMoZnVuYz11cGdyYWRlKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9hcHBlbmQucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvYXBwZW5kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZTQxMTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvYXBwZW5kLnB5CkBAIC0wLDAgKzEsNDY5IEBACisjIFJlY2lwZSBjcmVhdGlvbiB0b29sIC0gYXBwZW5kIHBsdWdpbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgZ2xvYgoraW1wb3J0IGZubWF0Y2gKK2ltcG9ydCByZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3RhdAoraW1wb3J0IHNodXRpbAoraW1wb3J0IHNjcmlwdHV0aWxzCitpbXBvcnQgZXJybm8KK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdyZWNpcGV0b29sJykKKwordGluZm9pbCA9IE5vbmUKKworZGVmIHRpbmZvaWxfaW5pdChpbnN0YW5jZSk6CisgICAgZ2xvYmFsIHRpbmZvaWwKKyAgICB0aW5mb2lsID0gaW5zdGFuY2UKKworCisjIEZJWE1FIGd1ZXNzaW5nIHdoZW4gd2UgZG9uJ3QgaGF2ZSBwa2dkYXRhPworIyBGSVhNRSBtb2RlIHRvIGNyZWF0ZSBwYXRjaCByYXRoZXIgdGhhbiBkaXJlY3RseSBzdWJzdGl0dXRlCisKK2NsYXNzIEludmFsaWRUYXJnZXRGaWxlRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2RlZiBmaW5kX3RhcmdldF9maWxlKHRhcmdldHBhdGgsIGQsIHBrZ2xpc3Q9Tm9uZSk6CisgICAgIiIiRmluZCB0aGUgcmVjaXBlIGluc3RhbGxpbmcgdGhlIHNwZWNpZmllZCB0YXJnZXQgcGF0aCwgb3B0aW9uYWxseSBsaW1pdGVkIHRvIGEgc2VsZWN0IGxpc3Qgb2YgcGFja2FnZXMiIiIKKyAgICBpbXBvcnQganNvbgorCisgICAgcGtnZGF0YV9kaXIgPSBkLmdldFZhcignUEtHREFUQV9ESVInLCBUcnVlKQorCisgICAgIyBUaGUgbWl4IGJldHdlZW4gL2V0YyBhbmQgJHtzeXNjb25mZGlyfSBoZXJlIG1heSBsb29rIG9kZCwgYnV0IGl0IGlzIGp1c3QKKyAgICAjIGJlaW5nIGNvbnNpc3RlbnQgd2l0aCB1c2FnZSBlbHNld2hlcmUKKyAgICBpbnZhbGlkdGFyZ2V0cyA9IHsnJHtzeXNjb25mZGlyfS92ZXJzaW9uJzogJyR7c3lzY29uZmRpcn0vdmVyc2lvbiBpcyB3cml0dGVuIG91dCBhdCBpbWFnZSBjcmVhdGlvbiB0aW1lJywKKyAgICAgICAgICAgICAgICAgICAgICAnL2V0Yy90aW1lc3RhbXAnOiAnL2V0Yy90aW1lc3RhbXAgaXMgd3JpdHRlbiBvdXQgYXQgaW1hZ2UgY3JlYXRpb24gdGltZScsCisgICAgICAgICAgICAgICAgICAgICAgJy9kZXYvKic6ICcvZGV2IGlzIGhhbmRsZWQgYnkgdWRldiAob3IgZXF1aXZhbGVudCkgYW5kIHRoZSBrZXJuZWwgKGRldnRtcGZzKScsCisgICAgICAgICAgICAgICAgICAgICAgJy9ldGMvcGFzc3dkJzogJy9ldGMvcGFzc3dkIHNob3VsZCBiZSBtYW5hZ2VkIHRocm91Z2ggdGhlIHVzZXJhZGQgYW5kIGV4dHJhdXNlcnMgY2xhc3NlcycsCisgICAgICAgICAgICAgICAgICAgICAgJy9ldGMvZ3JvdXAnOiAnL2V0Yy9ncm91cCBzaG91bGQgYmUgbWFuYWdlZCB0aHJvdWdoIHRoZSB1c2VyYWRkIGFuZCBleHRyYXVzZXJzIGNsYXNzZXMnLAorICAgICAgICAgICAgICAgICAgICAgICcvZXRjL3NoYWRvdyc6ICcvZXRjL3NoYWRvdyBzaG91bGQgYmUgbWFuYWdlZCB0aHJvdWdoIHRoZSB1c2VyYWRkIGFuZCBleHRyYXVzZXJzIGNsYXNzZXMnLAorICAgICAgICAgICAgICAgICAgICAgICcvZXRjL2dzaGFkb3cnOiAnL2V0Yy9nc2hhZG93IHNob3VsZCBiZSBtYW5hZ2VkIHRocm91Z2ggdGhlIHVzZXJhZGQgYW5kIGV4dHJhdXNlcnMgY2xhc3NlcycsCisgICAgICAgICAgICAgICAgICAgICAgJyR7c3lzY29uZmRpcn0vaG9zdG5hbWUnOiAnJHtzeXNjb25mZGlyfS9ob3N0bmFtZSBjb250ZW50cyBzaG91bGQgYmUgc2V0IGJ5IHNldHRpbmcgaG9zdG5hbWVfcG4tYmFzZS1maWxlcyA9ICJ2YWx1ZSIgaW4gY29uZmlndXJhdGlvbicsfQorCisgICAgZm9yIHB0aHNwZWMsIG1lc3NhZ2UgaW4gaW52YWxpZHRhcmdldHMuaXRlcml0ZW1zKCk6CisgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaGNhc2UodGFyZ2V0cGF0aCwgZC5leHBhbmQocHRoc3BlYykpOgorICAgICAgICAgICAgcmFpc2UgSW52YWxpZFRhcmdldEZpbGVFcnJvcihkLmV4cGFuZChtZXNzYWdlKSkKKworICAgIHRhcmdldHBhdGhfcmUgPSByZS5jb21waWxlKHInXHMrKFwkRCk/JXMoXHN8JCknICUgdGFyZ2V0cGF0aCkKKworICAgIHJlY2lwZXMgPSBkZWZhdWx0ZGljdChsaXN0KQorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKG9zLnBhdGguam9pbihwa2dkYXRhX2RpciwgJ3J1bnRpbWUnKSk6CisgICAgICAgIGlmIHBrZ2xpc3Q6CisgICAgICAgICAgICBmaWxlbGlzdCA9IHBrZ2xpc3QKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpbGVsaXN0ID0gZmlsZXMKKyAgICAgICAgZm9yIGZuIGluIGZpbGVsaXN0OgorICAgICAgICAgICAgcGtnZGF0YWZpbGUgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZm4pCisgICAgICAgICAgICBpZiBwa2dsaXN0IGFuZCBub3Qgb3MucGF0aC5leGlzdHMocGtnZGF0YWZpbGUpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB3aXRoIG9wZW4ocGtnZGF0YWZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICBwbiA9ICcnCisgICAgICAgICAgICAgICAgIyBUaGlzIGRvZXMgYXNzdW1lIHRoYXQgUE4gY29tZXMgYmVmb3JlIG90aGVyIHZhbHVlcywgYnV0IHRoYXQncyBhIGZhaXJseSBzYWZlIGFzc3VtcHRpb24KKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1BOOicpOgorICAgICAgICAgICAgICAgICAgICAgICAgcG4gPSBsaW5lLnNwbGl0KCc6JywgMSlbMV0uc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnRklMRVNfSU5GTzonKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICBkaWN0dmFsID0ganNvbi5sb2Fkcyh2YWwpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZnVsbHB0aCBpbiBkaWN0dmFsLmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2hjYXNlKGZ1bGxwdGgsIHRhcmdldHBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzW3RhcmdldHBhdGhdLmFwcGVuZChwbikKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJ3BrZ19wcmVpbnN0XycpIG9yIGxpbmUuc3RhcnRzd2l0aCgncGtnX3Bvc3RpbnN0XycpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0dmFsID0gbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCkuZGVjb2RlKCdzdHJpbmdfZXNjYXBlJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICd1cGRhdGUtYWx0ZXJuYXRpdmVzIC0taW5zdGFsbCAlcyAnICUgdGFyZ2V0cGF0aCBpbiBzY3JpcHR2YWw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlc1t0YXJnZXRwYXRoXS5hcHBlbmQoJz8lcycgJSBwbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgdGFyZ2V0cGF0aF9yZS5zZWFyY2goc2NyaXB0dmFsKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzW3RhcmdldHBhdGhdLmFwcGVuZCgnISVzJyAlIHBuKQorICAgIHJldHVybiByZWNpcGVzCisKK2RlZiBfZ2V0X3JlY2lwZV9maWxlKGNvb2tlciwgcG4pOgorICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscworICAgIHJlY2lwZWZpbGUgPSBvZS5yZWNpcGV1dGlscy5wbl90b19yZWNpcGUoY29va2VyLCBwbikKKyAgICBpZiBub3QgcmVjaXBlZmlsZToKKyAgICAgICAgc2tpcHJlYXNvbnMgPSBvZS5yZWNpcGV1dGlscy5nZXRfdW5hdmFpbGFibGVfcmVhc29ucyhjb29rZXIsIHBuKQorICAgICAgICBpZiBza2lwcmVhc29uczoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignXG4nLmpvaW4oc2tpcHJlYXNvbnMpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZmluZCBhbnkgcmVjaXBlIGZpbGUgbWF0Y2hpbmcgJXMiICUgcG4pCisgICAgcmV0dXJuIHJlY2lwZWZpbGUKKworZGVmIF9wYXJzZV9yZWNpcGUocG4sIHRpbmZvaWwpOgorICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscworICAgIHJlY2lwZWZpbGUgPSBfZ2V0X3JlY2lwZV9maWxlKHRpbmZvaWwuY29va2VyLCBwbikKKyAgICBpZiBub3QgcmVjaXBlZmlsZToKKyAgICAgICAgIyBFcnJvciBhbHJlYWR5IGxvZ2dlZAorICAgICAgICByZXR1cm4gTm9uZQorICAgIGFwcGVuZF9maWxlcyA9IHRpbmZvaWwuY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhyZWNpcGVmaWxlKQorICAgIHJkID0gb2UucmVjaXBldXRpbHMucGFyc2VfcmVjaXBlKHJlY2lwZWZpbGUsIGFwcGVuZF9maWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbmZvaWwuY29uZmlnX2RhdGEpCisgICAgcmV0dXJuIHJkCisKK2RlZiBkZXRlcm1pbmVfZmlsZV9zb3VyY2UodGFyZ2V0cGF0aCwgcmQpOgorICAgICIiIkFzc3VtaW5nIHdlIGtub3cgYSBmaWxlIGNhbWUgZnJvbSBhIHNwZWNpZmljIHJlY2lwZSwgZmlndXJlIG91dCBleGFjdGx5IHdoZXJlIGl0IGNhbWUgZnJvbSIiIgorICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscworCisgICAgIyBTZWUgaWYgaXQncyBpbiBkb19pbnN0YWxsIGZvciB0aGUgcmVjaXBlCisgICAgd29ya2RpciA9IHJkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgc3JjX3VyaSA9IHJkLmdldFZhcignU1JDX1VSSScsIFRydWUpCisgICAgc3JjZmlsZSA9ICcnCisgICAgbW9kcGF0Y2hlcyA9IFtdCisgICAgZWxlbWVudHMgPSBjaGVja19kb19pbnN0YWxsKHJkLCB0YXJnZXRwYXRoKQorICAgIGlmIGVsZW1lbnRzOgorICAgICAgICBsb2dnZXIuZGVidWcoJ2RvX2luc3RhbGwgbGluZTpcbiVzJyAlICcgJy5qb2luKGVsZW1lbnRzKSkKKyAgICAgICAgc3JjcGF0aCA9IGdldF9zb3VyY2VfcGF0aChlbGVtZW50cykKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdzb3VyY2UgcGF0aDogJXMnICUgc3JjcGF0aCkKKyAgICAgICAgaWYgbm90IHNyY3BhdGguc3RhcnRzd2l0aCgnLycpOgorICAgICAgICAgICAgIyBIYW5kbGUgbm9uLWFic29sdXRlIHBhdGgKKyAgICAgICAgICAgIHNyY3BhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHJkLmdldFZhckZsYWcoJ2RvX2luc3RhbGwnLCAnZGlycycsIFRydWUpLnNwbGl0KClbLTFdLCBzcmNwYXRoKSkKKyAgICAgICAgaWYgc3JjcGF0aC5zdGFydHN3aXRoKHdvcmtkaXIpOgorICAgICAgICAgICAgIyBPSywgbm93IHdlIGhhdmUgdGhlIHNvdXJjZSBmaWxlIG5hbWUsIGxvb2sgZm9yIGl0IGluIFNSQ19VUkkKKyAgICAgICAgICAgIHdvcmtkaXJmaWxlID0gb3MucGF0aC5yZWxwYXRoKHNyY3BhdGgsIHdvcmtkaXIpCisgICAgICAgICAgICAjIEZJWE1FIHRoaXMgaXMgd2hlcmUgd2Ugb3VnaHQgdG8gaGF2ZSBzb21lIGNvZGUgaW4gdGhlIGZldGNoZXIsIGJlY2F1c2UgdGhpcyBpcyBuYWl2ZQorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gc3JjX3VyaS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGxvY2FscGF0aCA9IGJiLmZldGNoMi5sb2NhbHBhdGgoaXRlbSwgcmQpCisgICAgICAgICAgICAgICAgIyBTb3VyY2UgcGF0aCBzcGVjaWZpZWQgaW4gZG9faW5zdGFsbCBtaWdodCBiZSBhIGdsb2IKKyAgICAgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2gob3MucGF0aC5iYXNlbmFtZShsb2NhbHBhdGgpLCB3b3JrZGlyZmlsZSk6CisgICAgICAgICAgICAgICAgICAgIHNyY2ZpbGUgPSAnZmlsZTovLyVzJyAlIGxvY2FscGF0aAorICAgICAgICAgICAgICAgIGVsaWYgJy8nIGluIHdvcmtkaXJmaWxlOgorICAgICAgICAgICAgICAgICAgICBpZiBpdGVtID09ICdmaWxlOi8vJXMnICUgd29ya2RpcmZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICBzcmNmaWxlID0gJ2ZpbGU6Ly8lcycgJSBsb2NhbHBhdGgKKworICAgICAgICAjIENoZWNrIHBhdGNoZXMKKyAgICAgICAgc3JjcGF0Y2hlcyA9IFtdCisgICAgICAgIHBhdGNoZWRmaWxlcyA9IG9lLnJlY2lwZXV0aWxzLmdldF9yZWNpcGVfcGF0Y2hlZF9maWxlcyhyZCkKKyAgICAgICAgZm9yIHBhdGNoLCBmaWxlbGlzdCBpbiBwYXRjaGVkZmlsZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBmb3IgZmlsZWl0ZW0gaW4gZmlsZWxpc3Q6CisgICAgICAgICAgICAgICAgaWYgZmlsZWl0ZW1bMF0gPT0gc3JjcGF0aDoKKyAgICAgICAgICAgICAgICAgICAgc3JjcGF0Y2hlcy5hcHBlbmQoKHBhdGNoLCBmaWxlaXRlbVsxXSkpCisgICAgICAgIGlmIHNyY3BhdGNoZXM6CisgICAgICAgICAgICBhZGRwYXRjaCA9IE5vbmUKKyAgICAgICAgICAgIGZvciBwYXRjaCBpbiBzcmNwYXRjaGVzOgorICAgICAgICAgICAgICAgIGlmIHBhdGNoWzFdID09ICdBJzoKKyAgICAgICAgICAgICAgICAgICAgYWRkcGF0Y2ggPSBwYXRjaFswXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1vZHBhdGNoZXMuYXBwZW5kKHBhdGNoWzBdKQorICAgICAgICAgICAgaWYgYWRkcGF0Y2g6CisgICAgICAgICAgICAgICAgc3JjZmlsZSA9ICdwYXRjaDovLyVzJyAlIGFkZHBhdGNoCisKKyAgICByZXR1cm4gKHNyY2ZpbGUsIGVsZW1lbnRzLCBtb2RwYXRjaGVzKQorCitkZWYgZ2V0X3NvdXJjZV9wYXRoKGNtZGVsZW1lbnRzKToKKyAgICAiIiJGaW5kIHRoZSBzb3VyY2UgcGF0aCBzcGVjaWZpZWQgd2l0aGluIGEgY29tbWFuZCIiIgorICAgIGNvbW1hbmQgPSBjbWRlbGVtZW50c1swXQorICAgIGlmIGNvbW1hbmQgaW4gWydpbnN0YWxsJywgJ2NwJ106CisgICAgICAgIGhlbHB0ZXh0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoJ0xDX0FMTD1DICVzIC0taGVscCcgJSBjb21tYW5kLCBzaGVsbD1UcnVlKQorICAgICAgICBhcmdvcHRzID0gJycKKyAgICAgICAgYXJnb3B0X2xpbmVfcmUgPSByZS5jb21waWxlKCdeLShbYS16QS1aMC05XSksIC0tW2Etei1dKz0nKQorICAgICAgICBmb3IgbGluZSBpbiBoZWxwdGV4dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBsaW5lID0gbGluZS5sc3RyaXAoKQorICAgICAgICAgICAgcmVzID0gYXJnb3B0X2xpbmVfcmUuc2VhcmNoKGxpbmUpCisgICAgICAgICAgICBpZiByZXM6CisgICAgICAgICAgICAgICAgYXJnb3B0cyArPSByZXMuZ3JvdXAoMSkKKyAgICAgICAgaWYgbm90IGFyZ29wdHM6CisgICAgICAgICAgICAjIEZhbGxiYWNrCisgICAgICAgICAgICBpZiBjb21tYW5kID09ICdpbnN0YWxsJzoKKyAgICAgICAgICAgICAgICBhcmdvcHRzID0gJ2dtb1N0JworICAgICAgICAgICAgZWxpZiBjb21tYW5kID09ICdjcCc6CisgICAgICAgICAgICAgICAgYXJnb3B0cyA9ICd0JworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ05vIGZhbGxiYWNrIGFyZ3VtZW50cyBmb3IgY29tbWFuZCAlcycgJSBjb21tYW5kKQorCisgICAgICAgIHNraXBuZXh0ID0gRmFsc2UKKyAgICAgICAgZm9yIGVsZW0gaW4gY21kZWxlbWVudHNbMTotMV06CisgICAgICAgICAgICBpZiBlbGVtLnN0YXJ0c3dpdGgoJy0nKToKKyAgICAgICAgICAgICAgICBpZiBsZW4oZWxlbSkgPiAxIGFuZCBlbGVtWzFdIGluIGFyZ29wdHM6CisgICAgICAgICAgICAgICAgICAgIHNraXBuZXh0ID0gVHJ1ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBza2lwbmV4dDoKKyAgICAgICAgICAgICAgICBza2lwbmV4dCA9IEZhbHNlCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHJldHVybiBlbGVtCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdnZXRfc291cmNlX3BhdGg6IG5vIGhhbmRsaW5nIGZvciBjb21tYW5kICIlcyInKQorCitkZWYgZ2V0X2Z1bmNfZGVwcyhmdW5jLCBkKToKKyAgICAiIiJGaW5kIHRoZSBmdW5jdGlvbiBkZXBlbmRlbmNpZXMgb2YgYSBzaGVsbCBmdW5jdGlvbiIiIgorICAgIGRlcHMgPSBiYi5jb2RlcGFyc2VyLlNoZWxsUGFyc2VyKGZ1bmMsIGxvZ2dlcikucGFyc2Vfc2hlbGwoZC5nZXRWYXIoZnVuYywgVHJ1ZSkpCisgICAgZGVwcyB8PSBzZXQoKGQuZ2V0VmFyRmxhZyhmdW5jLCAidmFyZGVwcyIsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgIGZ1bmNkZXBzID0gW10KKyAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgIGlmIGQuZ2V0VmFyRmxhZyhkZXAsICdmdW5jJywgVHJ1ZSk6CisgICAgICAgICAgICBmdW5jZGVwcy5hcHBlbmQoZGVwKQorICAgIHJldHVybiBmdW5jZGVwcworCitkZWYgY2hlY2tfZG9faW5zdGFsbChyZCwgdGFyZ2V0cGF0aCk6CisgICAgIiIiTG9vayBhdCBkb19pbnN0YWxsIGZvciBhIGNvbW1hbmQgdGhhdCBpbnN0YWxscy9jb3BpZXMgdGhlIHNwZWNpZmllZCB0YXJnZXQgcGF0aCIiIgorICAgIGluc3RwYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihyZC5nZXRWYXIoJ0QnLCBUcnVlKSwgdGFyZ2V0cGF0aC5sc3RyaXAoJy8nKSkpCisgICAgZG9faW5zdGFsbCA9IHJkLmdldFZhcignZG9faW5zdGFsbCcsIFRydWUpCisgICAgIyBIYW5kbGUgd2hlcmUgZG9faW5zdGFsbCBjYWxscyBvdGhlciBmdW5jdGlvbnMgKHNvbWV3aGF0IGNydWRlbHksIGJ1dCBnb29kIGVub3VnaCBmb3IgdGhpcyBwdXJwb3NlKQorICAgIGRlcHMgPSBnZXRfZnVuY19kZXBzKCdkb19pbnN0YWxsJywgcmQpCisgICAgZm9yIGRlcCBpbiBkZXBzOgorICAgICAgICBkb19pbnN0YWxsID0gZG9faW5zdGFsbC5yZXBsYWNlKGRlcCwgcmQuZ2V0VmFyKGRlcCwgVHJ1ZSkpCisKKyAgICAjIExvb2sgYmFja3dhcmRzIHRocm91Z2ggZG9faW5zdGFsbCBhcyB3ZSB3YW50IHRvIGNhdGNoIHdoZXJlIGEgbGF0ZXIgbGluZSAocGVyaGFwcworICAgICMgZnJvbSBhIGJiYXBwZW5kKSBpcyB3cml0aW5nIG92ZXIgdGhlIHRvcAorICAgIGZvciBsaW5lIGluIHJldmVyc2VkKGRvX2luc3RhbGwuc3BsaXRsaW5lcygpKToKKyAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICBpZiAobGluZS5zdGFydHN3aXRoKCdpbnN0YWxsICcpIGFuZCAnIC1tJyBpbiBsaW5lKSBvciBsaW5lLnN0YXJ0c3dpdGgoJ2NwICcpOgorICAgICAgICAgICAgZWxlbWVudHMgPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgICAgIGRlc3RwYXRoID0gb3MucGF0aC5hYnNwYXRoKGVsZW1lbnRzWy0xXSkKKyAgICAgICAgICAgIGlmIGRlc3RwYXRoID09IGluc3RwYXRoOgorICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50cworICAgICAgICAgICAgZWxpZiBkZXN0cGF0aC5yc3RyaXAoJy8nKSA9PSBvcy5wYXRoLmRpcm5hbWUoaW5zdHBhdGgpOgorICAgICAgICAgICAgICAgICMgRklYTUUgdGhpcyBkb2Vzbid0IHRha2UgcmVjdXJzaXZlIGNvcHkgaW50byBhY2NvdW50OyB1bnN1cmUgaWYgaXQncyBwcmFjdGljYWwgdG8gZG8gc28KKyAgICAgICAgICAgICAgICBzcmNwYXRoID0gZ2V0X3NvdXJjZV9wYXRoKGVsZW1lbnRzKQorICAgICAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaGNhc2Uob3MucGF0aC5iYXNlbmFtZShpbnN0cGF0aCksIG9zLnBhdGguYmFzZW5hbWUoc3JjcGF0aCkpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudHMKKyAgICByZXR1cm4gTm9uZQorCisKK2RlZiBhcHBlbmRmaWxlKGFyZ3MpOgorICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscworCisgICAgc3Rkb3V0ID0gJycKKyAgICB0cnk6CisgICAgICAgIChzdGRvdXQsIF8pID0gYmIucHJvY2Vzcy5ydW4oJ0xBTkc9QyBmaWxlIC1iICVzJyAlIGFyZ3MubmV3ZmlsZSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgaWYgJ2Nhbm5vdCBvcGVuJyBpbiBzdGRvdXQ6CisgICAgICAgICAgICByYWlzZSBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yKHN0ZG91dCkKKyAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvciBhcyBlcnI6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygnZmlsZSBjb21tYW5kIHJldHVybmVkIGVycm9yOiAlcycgJSBlcnIpCisgICAgICAgIHN0ZG91dCA9ICcnCisgICAgaWYgc3Rkb3V0OgorICAgICAgICBsb2dnZXIuZGVidWcoJ2ZpbGUgY29tbWFuZCBvdXRwdXQ6ICVzJyAlIHN0ZG91dC5yc3RyaXAoKSkKKyAgICAgICAgaWYgKCdleGVjdXRhYmxlJyBpbiBzdGRvdXQgYW5kIG5vdCAnc2hlbGwgc2NyaXB0JyBpbiBzdGRvdXQpIG9yICdzaGFyZWQgb2JqZWN0JyBpbiBzdGRvdXQ6CisgICAgICAgICAgICBsb2dnZXIud2FybignVGhpcyBmaWxlIGxvb2tzIGxpa2UgaXQgaXMgYSBiaW5hcnkgb3Igb3RoZXJ3aXNlIHRoZSBvdXRwdXQgb2YgY29tcGlsYXRpb24uIElmIGl0IGlzLCB5b3Ugc2hvdWxkIGNvbnNpZGVyIGJ1aWxkaW5nIGl0IHByb3Blcmx5IGluc3RlYWQgb2Ygc3Vic3RpdHV0aW5nIGEgYmluYXJ5IGZpbGUgZGlyZWN0bHkuJykKKworICAgIGlmIGFyZ3MucmVjaXBlOgorICAgICAgICByZWNpcGVzID0ge2FyZ3MudGFyZ2V0cGF0aDogW2FyZ3MucmVjaXBlXSx9CisgICAgZWxzZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVjaXBlcyA9IGZpbmRfdGFyZ2V0X2ZpbGUoYXJncy50YXJnZXRwYXRoLCB0aW5mb2lsLmNvbmZpZ19kYXRhKQorICAgICAgICBleGNlcHQgSW52YWxpZFRhcmdldEZpbGVFcnJvciBhcyBlOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCclcyBjYW5ub3QgYmUgaGFuZGxlZCBieSB0aGlzIHRvb2w6ICVzJyAlIChhcmdzLnRhcmdldHBhdGgsIGUpKQorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgaWYgbm90IHJlY2lwZXM6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBmaW5kIGFueSBwYWNrYWdlIHByb2R1Y2luZyBwYXRoICVzIC0gdGhpcyBtYXkgYmUgYmVjYXVzZSB0aGUgcmVjaXBlIHBhY2thZ2luZyBpdCBoYXMgbm90IGJlZW4gYnVpbHQgeWV0JyAlIGFyZ3MudGFyZ2V0cGF0aCkKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICBhbHRlcm5hdGl2ZV9wbnMgPSBbXQorICAgIHBvc3RpbnN0X3BucyA9IFtdCisKKyAgICBzZWxlY3RwbiA9IE5vbmUKKyAgICBmb3IgdGFyZ2V0cGF0aCwgcG5saXN0IGluIHJlY2lwZXMuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBwbiBpbiBwbmxpc3Q6CisgICAgICAgICAgICBpZiBwbi5zdGFydHN3aXRoKCc/Jyk6CisgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmVfcG5zLmFwcGVuZChwblsxOl0pCisgICAgICAgICAgICBlbGlmIHBuLnN0YXJ0c3dpdGgoJyEnKToKKyAgICAgICAgICAgICAgICBwb3N0aW5zdF9wbnMuYXBwZW5kKHBuWzE6XSkKKyAgICAgICAgICAgIGVsaWYgc2VsZWN0cG46CisgICAgICAgICAgICAgICAgIyBoaXQgaGVyZSB3aXRoIG11bHRpbGlicworICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGVjdHBuID0gcG4KKworICAgIGlmIG5vdCBzZWxlY3RwbiBhbmQgbGVuKGFsdGVybmF0aXZlX3BucykgPT0gMToKKyAgICAgICAgc2VsZWN0cG4gPSBhbHRlcm5hdGl2ZV9wbnNbMF0KKyAgICAgICAgbG9nZ2VyLmVycm9yKCdGaWxlICVzIGlzIGFuIGFsdGVybmF0aXZlIHBvc3NpYmx5IHByb3ZpZGVkIGJ5IHJlY2lwZSAlcyBidXQgc2VlbWluZ2x5IG5vIG90aGVyLCBzZWxlY3RpbmcgaXQgYnkgZGVmYXVsdCAtIHlvdSBzaG91bGQgZG91YmxlIGNoZWNrIG90aGVyIHJlY2lwZXMnICUgKGFyZ3MudGFyZ2V0cGF0aCwgc2VsZWN0cG4pKQorCisgICAgaWYgc2VsZWN0cG46CisgICAgICAgIGxvZ2dlci5kZWJ1ZygnU2VsZWN0aW5nIHJlY2lwZSAlcyBmb3IgZmlsZSAlcycgJSAoc2VsZWN0cG4sIGFyZ3MudGFyZ2V0cGF0aCkpCisgICAgICAgIGlmIHBvc3RpbnN0X3BuczoKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCclcyBiZSBtb2RpZmllZCBieSBwb3N0aW5zdGFsbCBzY3JpcHRzIGZvciB0aGUgZm9sbG93aW5nIHJlY2lwZXM6XG4gICVzXG5UaGlzIG1heSBvciBtYXkgbm90IGJlIGFuIGlzc3VlIGRlcGVuZGluZyBvbiB3aGF0IG1vZGlmaWNhdGlvbnMgdGhlc2UgcG9zdGluc3RhbGwgc2NyaXB0cyBtYWtlLicgJSAoYXJncy50YXJnZXRwYXRoLCAnXG4gICcuam9pbihwb3N0aW5zdF9wbnMpKSkKKyAgICAgICAgcmQgPSBfcGFyc2VfcmVjaXBlKHNlbGVjdHBuLCB0aW5mb2lsKQorICAgICAgICBpZiBub3QgcmQ6CisgICAgICAgICAgICAjIEVycm9yIG1lc3NhZ2UgYWxyZWFkeSBzaG93bgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgc291cmNlZmlsZSwgaW5zdGVsZW1lbnRzLCBtb2RwYXRjaGVzID0gZGV0ZXJtaW5lX2ZpbGVfc291cmNlKGFyZ3MudGFyZ2V0cGF0aCwgcmQpCisgICAgICAgIHNvdXJjZXBhdGggPSBOb25lCisgICAgICAgIGlmIHNvdXJjZWZpbGU6CisgICAgICAgICAgICBzb3VyY2V0eXBlLCBzb3VyY2VwYXRoID0gc291cmNlZmlsZS5zcGxpdCgnOi8vJywgMSkKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnT3JpZ2luYWwgc291cmNlIGZpbGUgaXMgJXMgKCVzKScgJSAoc291cmNlcGF0aCwgc291cmNldHlwZSkpCisgICAgICAgICAgICBpZiBzb3VyY2V0eXBlID09ICdwYXRjaCc6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0ZpbGUgJXMgaXMgYWRkZWQgYnkgdGhlIHBhdGNoICVzIC0geW91IG1heSBuZWVkIHRvIHJlbW92ZSBvciByZXBsYWNlIHRoaXMgcGF0Y2ggaW4gb3JkZXIgdG8gcmVwbGFjZSB0aGUgZmlsZS4nICUgKGFyZ3MudGFyZ2V0cGF0aCwgc291cmNlcGF0aCkpCisgICAgICAgICAgICAgICAgc291cmNlcGF0aCA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnVW5hYmxlIHRvIGRldGVybWluZSBzb3VyY2UgZmlsZSwgcHJvY2VlZGluZyBhbnl3YXknKQorICAgICAgICBpZiBtb2RwYXRjaGVzOgorICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0ZpbGUgJXMgaXMgbW9kaWZpZWQgYnkgdGhlIGZvbGxvd2luZyBwYXRjaGVzOlxuICAlcycgJSAoYXJncy50YXJnZXRwYXRoLCAnXG4gICcuam9pbihtb2RwYXRjaGVzKSkpCisKKyAgICAgICAgaWYgaW5zdGVsZW1lbnRzIGFuZCBzb3VyY2VwYXRoOgorICAgICAgICAgICAgaW5zdGFsbCA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgQXV0by1kZXRlcm1pbmUgcGVybWlzc2lvbnMKKyAgICAgICAgICAgICMgQ2hlY2sgZGVzdGluYXRpb24KKyAgICAgICAgICAgIGJpbnBhdGhzID0gJyR7YmluZGlyfToke3NiaW5kaXJ9OiR7YmFzZV9iaW5kaXJ9OiR7YmFzZV9zYmluZGlyfToke2xpYmV4ZWNkaXJ9OiR7c3lzY29uZmRpcn0vaW5pdC5kJworICAgICAgICAgICAgcGVybXMgPSAnMDY0NCcKKyAgICAgICAgICAgIGlmIG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoYXJncy50YXJnZXRwYXRoKSkgaW4gcmQuZXhwYW5kKGJpbnBhdGhzKS5zcGxpdCgnOicpOgorICAgICAgICAgICAgICAgICMgRmlsZSBpcyBnb2luZyBpbnRvIGEgZGlyZWN0b3J5IG5vcm1hbGx5IHJlc2VydmVkIGZvciBleGVjdXRhYmxlcywgc28gaXQgc2hvdWxkIGJlIGV4ZWN1dGFibGUKKyAgICAgICAgICAgICAgICBwZXJtcyA9ICcwNzU1JworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIENoZWNrIHNvdXJjZQorICAgICAgICAgICAgICAgIHN0ID0gb3Muc3RhdChhcmdzLm5ld2ZpbGUpCisgICAgICAgICAgICAgICAgaWYgc3Quc3RfbW9kZSAmIHN0YXQuU19JWFVTUjoKKyAgICAgICAgICAgICAgICAgICAgcGVybXMgPSAnMDc1NScKKyAgICAgICAgICAgIGluc3RhbGwgPSB7YXJncy5uZXdmaWxlOiAoYXJncy50YXJnZXRwYXRoLCBwZXJtcyl9CisgICAgICAgIG9lLnJlY2lwZXV0aWxzLmJiYXBwZW5kX3JlY2lwZShyZCwgYXJncy5kZXN0bGF5ZXIsIHthcmdzLm5ld2ZpbGU6IHNvdXJjZXBhdGh9LCBpbnN0YWxsLCB3aWxkY2FyZHZlcj1hcmdzLndpbGRjYXJkX3ZlcnNpb24sIG1hY2hpbmU9YXJncy5tYWNoaW5lKQorICAgICAgICByZXR1cm4gMAorICAgIGVsc2U6CisgICAgICAgIGlmIGFsdGVybmF0aXZlX3BuczoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignRmlsZSAlcyBpcyBhbiBhbHRlcm5hdGl2ZSBwb3NzaWJseSBwcm92aWRlZCBieSB0aGUgZm9sbG93aW5nIHJlY2lwZXM6XG4gICVzXG5QbGVhc2Ugc2VsZWN0IHJlY2lwZSB3aXRoIC1yLy0tcmVjaXBlJyAlICh0YXJnZXRwYXRoLCAnXG4gICcuam9pbihhbHRlcm5hdGl2ZV9wbnMpKSkKKyAgICAgICAgZWxpZiBwb3N0aW5zdF9wbnM6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0ZpbGUgJXMgbWF5IGJlIHdyaXR0ZW4gb3V0IGluIGEgcHJlL3Bvc3RpbnN0YWxsIHNjcmlwdCBvZiB0aGUgZm9sbG93aW5nIHJlY2lwZXM6XG4gICVzXG5QbGVhc2Ugc2VsZWN0IHJlY2lwZSB3aXRoIC1yLy0tcmVjaXBlJyAlICh0YXJnZXRwYXRoLCAnXG4gICcuam9pbihwb3N0aW5zdF9wbnMpKSkKKyAgICAgICAgcmV0dXJuIDMKKworCitkZWYgYXBwZW5kc3JjKGFyZ3MsIGZpbGVzLCByZCwgZXh0cmFsaW5lcz1Ob25lKToKKyAgICBpbXBvcnQgb2UucmVjaXBldXRpbHMKKworICAgIHNyY2RpciA9IHJkLmdldFZhcignUycsIFRydWUpCisgICAgd29ya2RpciA9IHJkLmdldFZhcignV09SS0RJUicsIFRydWUpCisKKyAgICBpbXBvcnQgYmIuZmV0Y2gKKyAgICBzaW1wbGlmaWVkID0ge30KKyAgICBzcmNfdXJpID0gcmQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkuc3BsaXQoKQorICAgIGZvciB1cmkgaW4gc3JjX3VyaToKKyAgICAgICAgc2ltcGxlX3VyaSA9IGJiLmZldGNoLlVSSSh1cmkpCisgICAgICAgIHNpbXBsZV91cmkucGFyYW1zID0ge30KKyAgICAgICAgc2ltcGxpZmllZFtzdHIoc2ltcGxlX3VyaSldID0gdXJpCisKKyAgICBjb3B5ZmlsZXMgPSB7fQorICAgIGV4dHJhbGluZXMgPSBleHRyYWxpbmVzIG9yIFtdCisgICAgZm9yIG5ld2ZpbGUsIHNyY2ZpbGUgaW4gZmlsZXMuaXRlcml0ZW1zKCk6CisgICAgICAgIHNyY19kZXN0ZGlyID0gb3MucGF0aC5kaXJuYW1lKHNyY2ZpbGUpCisgICAgICAgIGlmIG5vdCBhcmdzLnVzZV93b3JrZGlyOgorICAgICAgICAgICAgaWYgcmQuZ2V0VmFyKCdTJywgVHJ1ZSkgPT0gcmQuZ2V0VmFyKCdTVEFHSU5HX0tFUk5FTF9ESVInLCBUcnVlKToKKyAgICAgICAgICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmpvaW4od29ya2RpciwgJ2dpdCcpCisgICAgICAgICAgICAgICAgaWYgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2tlcm5lbC15b2N0bycsIHJkKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ1MgPT0gU1RBR0lOR19LRVJORUxfRElSIGFuZCBub24ta2VybmVsLXlvY3RvLCB1bmFibGUgdG8gZGV0ZXJtaW5lIHBhdGggdG8gc3JjZGlyLCBkZWZhdWx0aW5nIHRvICR7V09SS0RJUn0vZ2l0JykKKyAgICAgICAgICAgIHNyY19kZXN0ZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGgucmVscGF0aChzcmNkaXIsIHdvcmtkaXIpLCBzcmNfZGVzdGRpcikKKyAgICAgICAgc3JjX2Rlc3RkaXIgPSBvcy5wYXRoLm5vcm1wYXRoKHNyY19kZXN0ZGlyKQorCisgICAgICAgIHNvdXJjZV91cmkgPSAnZmlsZTovL3swfScuZm9ybWF0KG9zLnBhdGguYmFzZW5hbWUoc3JjZmlsZSkpCisgICAgICAgIGlmIHNyY19kZXN0ZGlyIGFuZCBzcmNfZGVzdGRpciAhPSAnLic6CisgICAgICAgICAgICBzb3VyY2VfdXJpICs9ICc7c3ViZGlyPXswfScuZm9ybWF0KHNyY19kZXN0ZGlyKQorCisgICAgICAgIHNpbXBsZSA9IGJiLmZldGNoLlVSSShzb3VyY2VfdXJpKQorICAgICAgICBzaW1wbGUucGFyYW1zID0ge30KKyAgICAgICAgc2ltcGxlX3N0ciA9IHN0cihzaW1wbGUpCisgICAgICAgIGlmIHNpbXBsZV9zdHIgaW4gc2ltcGxpZmllZDoKKyAgICAgICAgICAgIGV4aXN0aW5nID0gc2ltcGxpZmllZFtzaW1wbGVfc3RyXQorICAgICAgICAgICAgaWYgc291cmNlX3VyaSAhPSBleGlzdGluZzoKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybignezAhcn0gaXMgYWxyZWFkeSBpbiBTUkNfVVJJLCB3aXRoIGRpZmZlcmVudCBwYXJhbWV0ZXJzOiB7MSFyfSwgbm90IGFkZGluZycuZm9ybWF0KHNvdXJjZV91cmksIGV4aXN0aW5nKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ3swIXJ9IGlzIGFscmVhZHkgaW4gU1JDX1VSSSwgbm90IGFkZGluZycuZm9ybWF0KHNvdXJjZV91cmkpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXh0cmFsaW5lcy5hcHBlbmQoJ1NSQ19VUkkgKz0gezB9Jy5mb3JtYXQoc291cmNlX3VyaSkpCisgICAgICAgIGNvcHlmaWxlc1tuZXdmaWxlXSA9IHNyY2ZpbGUKKworICAgIG9lLnJlY2lwZXV0aWxzLmJiYXBwZW5kX3JlY2lwZShyZCwgYXJncy5kZXN0bGF5ZXIsIGNvcHlmaWxlcywgTm9uZSwgd2lsZGNhcmR2ZXI9YXJncy53aWxkY2FyZF92ZXJzaW9uLCBtYWNoaW5lPWFyZ3MubWFjaGluZSwgZXh0cmFsaW5lcz1leHRyYWxpbmVzKQorCisKK2RlZiBhcHBlbmRzcmNmaWxlcyhwYXJzZXIsIGFyZ3MpOgorICAgIHJlY2lwZWRhdGEgPSBfcGFyc2VfcmVjaXBlKGFyZ3MucmVjaXBlLCB0aW5mb2lsKQorICAgIGlmIG5vdCByZWNpcGVkYXRhOgorICAgICAgICBwYXJzZXIuZXJyb3IoJ1JFQ0lQRSBtdXN0IGJlIGEgdmFsaWQgcmVjaXBlIG5hbWUnKQorCisgICAgZmlsZXMgPSBkaWN0KChmLCBvcy5wYXRoLmpvaW4oYXJncy5kZXN0ZGlyLCBvcy5wYXRoLmJhc2VuYW1lKGYpKSkKKyAgICAgICAgICAgICAgICAgZm9yIGYgaW4gYXJncy5maWxlcykKKyAgICByZXR1cm4gYXBwZW5kc3JjKGFyZ3MsIGZpbGVzLCByZWNpcGVkYXRhKQorCisKK2RlZiBhcHBlbmRzcmNmaWxlKHBhcnNlciwgYXJncyk6CisgICAgcmVjaXBlZGF0YSA9IF9wYXJzZV9yZWNpcGUoYXJncy5yZWNpcGUsIHRpbmZvaWwpCisgICAgaWYgbm90IHJlY2lwZWRhdGE6CisgICAgICAgIHBhcnNlci5lcnJvcignUkVDSVBFIG11c3QgYmUgYSB2YWxpZCByZWNpcGUgbmFtZScpCisKKyAgICBpZiBub3QgYXJncy5kZXN0ZmlsZToKKyAgICAgICAgYXJncy5kZXN0ZmlsZSA9IG9zLnBhdGguYmFzZW5hbWUoYXJncy5maWxlKQorICAgIGVsaWYgYXJncy5kZXN0ZmlsZS5lbmRzd2l0aCgnLycpOgorICAgICAgICBhcmdzLmRlc3RmaWxlID0gb3MucGF0aC5qb2luKGFyZ3MuZGVzdGZpbGUsIG9zLnBhdGguYmFzZW5hbWUoYXJncy5maWxlKSkKKworICAgIHJldHVybiBhcHBlbmRzcmMoYXJncywge2FyZ3MuZmlsZTogYXJncy5kZXN0ZmlsZX0sIHJlY2lwZWRhdGEpCisKKworZGVmIGxheWVyKGxheWVycGF0aCk6CisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihsYXllcnBhdGgsICdjb25mJywgJ2xheWVyLmNvbmYnKSk6CisgICAgICAgIHJhaXNlIGFyZ3BhcnNlLkFyZ3VtZW50VHlwZUVycm9yKCd7MCFyfSBtdXN0IGJlIGEgcGF0aCB0byBhIHZhbGlkIGxheWVyJy5mb3JtYXQobGF5ZXJwYXRoKSkKKyAgICByZXR1cm4gbGF5ZXJwYXRoCisKKworZGVmIGV4aXN0aW5nX3BhdGgoZmlsZXBhdGgpOgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlcGF0aCk6CisgICAgICAgIHJhaXNlIGFyZ3BhcnNlLkFyZ3VtZW50VHlwZUVycm9yKCd7MCFyfSBtdXN0IGJlIGFuIGV4aXN0aW5nIHBhdGgnLmZvcm1hdChmaWxlcGF0aCkpCisgICAgcmV0dXJuIGZpbGVwYXRoCisKKworZGVmIGV4aXN0aW5nX2ZpbGUoZmlsZXBhdGgpOgorICAgIGZpbGVwYXRoID0gZXhpc3RpbmdfcGF0aChmaWxlcGF0aCkKKyAgICBpZiBvcy5wYXRoLmlzZGlyKGZpbGVwYXRoKToKKyAgICAgICAgcmFpc2UgYXJncGFyc2UuQXJndW1lbnRUeXBlRXJyb3IoJ3swIXJ9IG11c3QgYmUgYSBmaWxlLCBub3QgYSBkaXJlY3RvcnknLmZvcm1hdChmaWxlcGF0aCkpCisgICAgcmV0dXJuIGZpbGVwYXRoCisKKworZGVmIGRlc3RpbmF0aW9uX3BhdGgoZGVzdHBhdGgpOgorICAgIGlmIG9zLnBhdGguaXNhYnMoZGVzdHBhdGgpOgorICAgICAgICByYWlzZSBhcmdwYXJzZS5Bcmd1bWVudFR5cGVFcnJvcignezAhcn0gbXVzdCBiZSBhIHJlbGF0aXZlIHBhdGgsIG5vdCBhYnNvbHV0ZScuZm9ybWF0KGRlc3RwYXRoKSkKKyAgICByZXR1cm4gZGVzdHBhdGgKKworCitkZWYgdGFyZ2V0X3BhdGgodGFyZ2V0cGF0aCk6CisgICAgaWYgbm90IG9zLnBhdGguaXNhYnModGFyZ2V0cGF0aCk6CisgICAgICAgIHJhaXNlIGFyZ3BhcnNlLkFyZ3VtZW50VHlwZUVycm9yKCd7MCFyfSBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGgsIG5vdCByZWxhdGl2ZScuZm9ybWF0KHRhcmdldHBhdGgpKQorICAgIHJldHVybiB0YXJnZXRwYXRoCisKKworZGVmIHJlZ2lzdGVyX2NvbW1hbmQoc3VicGFyc2Vycyk6CisgICAgY29tbW9uID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoYWRkX2hlbHA9RmFsc2UpCisgICAgY29tbW9uLmFkZF9hcmd1bWVudCgnLW0nLCAnLS1tYWNoaW5lJywgaGVscD0nTWFrZSBiYmFwcGVuZCBjaGFuZ2VzIHNwZWNpZmljIHRvIGEgbWFjaGluZSBvbmx5JywgbWV0YXZhcj0nTUFDSElORScpCisgICAgY29tbW9uLmFkZF9hcmd1bWVudCgnLXcnLCAnLS13aWxkY2FyZC12ZXJzaW9uJywgaGVscD0nVXNlIHdpbGRjYXJkIHRvIG1ha2UgdGhlIGJiYXBwZW5kIGFwcGx5IHRvIGFueSByZWNpcGUgdmVyc2lvbicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgY29tbW9uLmFkZF9hcmd1bWVudCgnZGVzdGxheWVyJywgbWV0YXZhcj0nREVTVExBWUVSJywgaGVscD0nQmFzZSBkaXJlY3Rvcnkgb2YgdGhlIGRlc3RpbmF0aW9uIGxheWVyIHRvIHdyaXRlIHRoZSBiYmFwcGVuZCB0bycsIHR5cGU9bGF5ZXIpCisKKyAgICBwYXJzZXJfYXBwZW5kZmlsZSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignYXBwZW5kZmlsZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50cz1bY29tbW9uXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdDcmVhdGUvdXBkYXRlIGEgYmJhcHBlbmQgdG8gcmVwbGFjZSBhIHRhcmdldCBmaWxlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nQ3JlYXRlcyBhIGJiYXBwZW5kIChvciB1cGRhdGVzIGFuIGV4aXN0aW5nIG9uZSkgdG8gcmVwbGFjZSB0aGUgc3BlY2lmaWVkIGZpbGUgdGhhdCBhcHBlYXJzIGluIHRoZSB0YXJnZXQgc3lzdGVtLCBkZXRlcm1pbmluZyB0aGUgcmVjaXBlIHRoYXQgcGFja2FnZXMgdGhlIGZpbGUgYW5kIHRoZSByZXF1aXJlZCBwYXRoIGFuZCBuYW1lIGZvciB0aGUgYmJhcHBlbmQgYXV0b21hdGljYWxseS4gTm90ZSB0aGF0IHRoZSBhYmlsaXR5IHRvIGRldGVybWluZSB0aGUgcmVjaXBlIHBhY2thZ2luZyBhIHBhcnRpY3VsYXIgZmlsZSBkZXBlbmRzIHVwb24gdGhlIHJlY2lwZVwncyBkb19wYWNrYWdlZGF0YSB0YXNrIGhhdmluZyBhbHJlYWR5IHJ1biBwcmlvciB0byBydW5uaW5nIHRoaXMgY29tbWFuZCAod2hpY2ggaXQgd2lsbCBoYXZlIHdoZW4gdGhlIHJlY2lwZSBoYXMgYmVlbiBidWlsdCBzdWNjZXNzZnVsbHksIHdoaWNoIGluIHR1cm4gd2lsbCBoYXZlIGhhcHBlbmVkIGlmIG9uZSBvciBtb3JlIG9mIHRoZSByZWNpcGVcJ3MgcGFja2FnZXMgaXMgaW5jbHVkZWQgaW4gYW4gaW1hZ2UgdGhhdCBoYXMgYmVlbiBidWlsdCBzdWNjZXNzZnVsbHkpLicpCisgICAgcGFyc2VyX2FwcGVuZGZpbGUuYWRkX2FyZ3VtZW50KCd0YXJnZXRwYXRoJywgaGVscD0nUGF0aCB0byB0aGUgZmlsZSB0byBiZSByZXBsYWNlZCAoYXMgaXQgd291bGQgYXBwZWFyIHdpdGhpbiB0aGUgdGFyZ2V0IGltYWdlLCBlLmcuIC9ldGMvbW90ZCknLCB0eXBlPXRhcmdldF9wYXRoKQorICAgIHBhcnNlcl9hcHBlbmRmaWxlLmFkZF9hcmd1bWVudCgnbmV3ZmlsZScsIGhlbHA9J0N1c3RvbSBmaWxlIHRvIHJlcGxhY2UgdGhlIHRhcmdldCBmaWxlIHdpdGgnLCB0eXBlPWV4aXN0aW5nX2ZpbGUpCisgICAgcGFyc2VyX2FwcGVuZGZpbGUuYWRkX2FyZ3VtZW50KCctcicsICctLXJlY2lwZScsIGhlbHA9J092ZXJyaWRlIHJlY2lwZSB0byBhcHBseSB0byAoZGVmYXVsdCBpcyB0byBmaW5kIHdoaWNoIHJlY2lwZSBhbHJlYWR5IHBhY2thZ2VzIHRoZSBmaWxlKScpCisgICAgcGFyc2VyX2FwcGVuZGZpbGUuc2V0X2RlZmF1bHRzKGZ1bmM9YXBwZW5kZmlsZSwgcGFyc2VyZWNpcGVzPVRydWUpCisKKyAgICBjb21tb25fc3JjID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoYWRkX2hlbHA9RmFsc2UsIHBhcmVudHM9W2NvbW1vbl0pCisgICAgY29tbW9uX3NyYy5hZGRfYXJndW1lbnQoJy1XJywgJy0td29ya2RpcicsIGhlbHA9J1VucGFjayBmaWxlIGludG8gV09SS0RJUiByYXRoZXIgdGhhbiBTJywgZGVzdD0ndXNlX3dvcmtkaXInLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIGNvbW1vbl9zcmMuYWRkX2FyZ3VtZW50KCdyZWNpcGUnLCBtZXRhdmFyPSdSRUNJUEUnLCBoZWxwPSdPdmVycmlkZSByZWNpcGUgdG8gYXBwbHkgdG8nKQorCisgICAgcGFyc2VyID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdhcHBlbmRzcmNmaWxlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudHM9W2NvbW1vbl9zcmNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdDcmVhdGUvdXBkYXRlIGEgYmJhcHBlbmQgdG8gYWRkIG9yIHJlcGxhY2Ugc291cmNlIGZpbGVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J0NyZWF0ZXMgYSBiYmFwcGVuZCAob3IgdXBkYXRlcyBhbiBleGlzdGluZyBvbmUpIHRvIGFkZCBvciByZXBsYWNlIHRoZSBzcGVjaWZpZWQgZmlsZSBpbiB0aGUgcmVjaXBlIHNvdXJjZXMsIGVpdGhlciB0aG9zZSBpbiBXT1JLRElSIG9yIHRob3NlIGluIHRoZSBzb3VyY2UgdHJlZS4gVGhpcyBjb21tYW5kIGxldHMgeW91IHNwZWNpZnkgbXVsdGlwbGUgZmlsZXMgd2l0aCBhIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSwgc28gY2Fubm90IHNwZWNpZnkgdGhlIGRlc3RpbmF0aW9uIGZpbGVuYW1lLiBTZWUgdGhlIGBhcHBlbmRzcmNmaWxlYCBjb21tYW5kIGZvciB0aGUgb3RoZXIgYmVoYXZpb3IuJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctRCcsICctLWRlc3RkaXInLCBoZWxwPSdEZXN0aW5hdGlvbiBkaXJlY3RvcnkgKHJlbGF0aXZlIHRvIFMgb3IgV09SS0RJUiwgZGVmYXVsdHMgdG8gIi4iKScsIGRlZmF1bHQ9JycsIHR5cGU9ZGVzdGluYXRpb25fcGF0aCkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdmaWxlcycsIG5hcmdzPScrJywgbWV0YXZhcj0nRklMRScsIGhlbHA9J0ZpbGUocykgdG8gYmUgYWRkZWQgdG8gdGhlIHJlY2lwZSBzb3VyY2VzIChXT1JLRElSIG9yIFMpJywgdHlwZT1leGlzdGluZ19wYXRoKQorICAgIHBhcnNlci5zZXRfZGVmYXVsdHMoZnVuYz1sYW1iZGEgYTogYXBwZW5kc3JjZmlsZXMocGFyc2VyLCBhKSwgcGFyc2VyZWNpcGVzPVRydWUpCisKKyAgICBwYXJzZXIgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2FwcGVuZHNyY2ZpbGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRzPVtjb21tb25fc3JjXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQ3JlYXRlL3VwZGF0ZSBhIGJiYXBwZW5kIHRvIGFkZCBvciByZXBsYWNlIGEgc291cmNlIGZpbGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nQ3JlYXRlcyBhIGJiYXBwZW5kIChvciB1cGRhdGVzIGFuIGV4aXN0aW5nIG9uZSkgdG8gYWRkIG9yIHJlcGxhY2UgdGhlIHNwZWNpZmllZCBmaWxlcyBpbiB0aGUgcmVjaXBlIHNvdXJjZXMsIGVpdGhlciB0aG9zZSBpbiBXT1JLRElSIG9yIHRob3NlIGluIHRoZSBzb3VyY2UgdHJlZS4gVGhpcyBjb21tYW5kIGxldHMgeW91IHNwZWNpZnkgdGhlIGRlc3RpbmF0aW9uIGZpbGVuYW1lLCBub3QganVzdCBkZXN0aW5hdGlvbiBkaXJlY3RvcnksIGJ1dCBvbmx5IHdvcmtzIGZvciBvbmUgZmlsZS4gU2VlIHRoZSBgYXBwZW5kc3JjZmlsZXNgIGNvbW1hbmQgZm9yIHRoZSBvdGhlciBiZWhhdmlvci4nKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZpbGUnLCBtZXRhdmFyPSdGSUxFJywgaGVscD0nRmlsZSB0byBiZSBhZGRlZCB0byB0aGUgcmVjaXBlIHNvdXJjZXMgKFdPUktESVIgb3IgUyknLCB0eXBlPWV4aXN0aW5nX3BhdGgpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnZGVzdGZpbGUnLCBtZXRhdmFyPSdERVNURklMRScsIG5hcmdzPSc/JywgaGVscD0nRGVzdGluYXRpb24gcGF0aCAocmVsYXRpdmUgdG8gUyBvciBXT1JLRElSLCBvcHRpb25hbCknLCB0eXBlPWRlc3RpbmF0aW9uX3BhdGgpCisgICAgcGFyc2VyLnNldF9kZWZhdWx0cyhmdW5jPWxhbWJkYSBhOiBhcHBlbmRzcmNmaWxlKHBhcnNlciwgYSksIHBhcnNlcmVjaXBlcz1UcnVlKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZS5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ3NTRkYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGUucHkKQEAgLTAsMCArMSw0MTIgQEAKKyMgUmVjaXBlIGNyZWF0aW9uIHRvb2wgLSBjcmVhdGUgY29tbWFuZCBwbHVnaW4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgZ2xvYgoraW1wb3J0IGZubWF0Y2gKK2ltcG9ydCByZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzY3JpcHR1dGlscworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigncmVjaXBldG9vbCcpCisKK3RpbmZvaWwgPSBOb25lCitwbHVnaW5zID0gTm9uZQorCitkZWYgcGx1Z2luX2luaXQocGx1Z2lubGlzdCk6CisgICAgIyBUYWtlIGEgcmVmZXJlbmNlIHRvIHRoZSBsaXN0IHNvIHdlIGNhbiB1c2UgaXQgbGF0ZXIKKyAgICBnbG9iYWwgcGx1Z2lucworICAgIHBsdWdpbnMgPSBwbHVnaW5saXN0CisKK2RlZiB0aW5mb2lsX2luaXQoaW5zdGFuY2UpOgorICAgIGdsb2JhbCB0aW5mb2lsCisgICAgdGluZm9pbCA9IGluc3RhbmNlCisKK2NsYXNzIFJlY2lwZUhhbmRsZXIoKToKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNoZWNrZmlsZXMocGF0aCwgc3BlY2xpc3QpOgorICAgICAgICByZXN1bHRzID0gW10KKyAgICAgICAgZm9yIHNwZWMgaW4gc3BlY2xpc3Q6CisgICAgICAgICAgICByZXN1bHRzLmV4dGVuZChnbG9iLmdsb2Iob3MucGF0aC5qb2luKHBhdGgsIHNwZWMpKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMKKworICAgIGRlZiBnZW5mdW5jdGlvbihzZWxmLCBvdXRsaW5lcywgZnVuY25hbWUsIGNvbnRlbnQpOgorICAgICAgICBvdXRsaW5lcy5hcHBlbmQoJyVzICgpIHsnICUgZnVuY25hbWUpCisgICAgICAgIGZvciBsaW5lIGluIGNvbnRlbnQ6CisgICAgICAgICAgICBvdXRsaW5lcy5hcHBlbmQoJ1x0JXMnICUgbGluZSkKKyAgICAgICAgb3V0bGluZXMuYXBwZW5kKCd9JykKKyAgICAgICAgb3V0bGluZXMuYXBwZW5kKCcnKQorCisgICAgZGVmIHByb2Nlc3Moc2VsZiwgc3JjdHJlZSwgY2xhc3NlcywgbGluZXNfYmVmb3JlLCBsaW5lc19hZnRlciwgaGFuZGxlZCk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisKKworZGVmIHN1cHBvcnRzX3NyY3Jldih1cmkpOgorICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weSh0aW5mb2lsLmNvbmZpZ19kYXRhKQorICAgICMgVGhpcyBpcyBhIGJpdCBzYWQsIGJ1dCBpZiB5b3UgZG9uJ3QgaGF2ZSB0aGlzIHNldCB0aGVyZSBjYW4gYmUgc29tZQorICAgICMgb2RkIGludGVyYWN0aW9ucyB3aXRoIHRoZSB1cmxkYXRhIGNhY2hlIHdoaWNoIGxlYWQgdG8gZXJyb3JzCisgICAgbG9jYWxkYXRhLnNldFZhcignU1JDUkVWJywgJyR7QVVUT1JFVn0nKQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goW3VyaV0sIGxvY2FsZGF0YSkKKyAgICB1cmxkYXRhID0gZmV0Y2hlci51ZAorICAgIGZvciB1IGluIHVybGRhdGE6CisgICAgICAgIGlmIHVybGRhdGFbdV0ubWV0aG9kLnN1cHBvcnRzX3NyY3JldigpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICByZXR1cm4gRmFsc2UKKworZGVmIGNyZWF0ZV9yZWNpcGUoYXJncyk6CisgICAgaW1wb3J0IGJiLnByb2Nlc3MKKyAgICBpbXBvcnQgdGVtcGZpbGUKKyAgICBpbXBvcnQgc2h1dGlsCisKKyAgICBwa2dhcmNoID0gIiIKKyAgICBpZiBhcmdzLm1hY2hpbmU6CisgICAgICAgIHBrZ2FyY2ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCisgICAgY2hlY2tzdW1zID0gKE5vbmUsIE5vbmUpCisgICAgdGVtcHNyYyA9ICcnCisgICAgc3Jjc3ViZGlyID0gJycKKyAgICBzcmNyZXYgPSAnJHtBVVRPUkVWfScKKyAgICBpZiAnOi8vJyBpbiBhcmdzLnNvdXJjZToKKyAgICAgICAgIyBGZXRjaCBhIFVSTAorICAgICAgICBzcmN1cmkgPSBhcmdzLnNvdXJjZQorICAgICAgICByZXZfcmUgPSByZS5jb21waWxlKCc7cmV2PShbXjtdKyknKQorICAgICAgICByZXMgPSByZXZfcmUuc2VhcmNoKHNyY3VyaSkKKyAgICAgICAgaWYgcmVzOgorICAgICAgICAgICAgc3JjcmV2ID0gcmVzLmdyb3VwKDEpCisgICAgICAgICAgICBzcmN1cmkgPSByZXZfcmUuc3ViKCcnLCBzcmN1cmkpCisgICAgICAgIHRlbXBzcmMgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0ncmVjaXBldG9vbC0nKQorICAgICAgICBzcmN0cmVlID0gdGVtcHNyYworICAgICAgICBsb2dnZXIuaW5mbygnRmV0Y2hpbmcgJXMuLi4nICUgc3JjdXJpKQorICAgICAgICBjaGVja3N1bXMgPSBzY3JpcHR1dGlscy5mZXRjaF91cmkodGluZm9pbC5jb25maWdfZGF0YSwgYXJncy5zb3VyY2UsIHNyY3RyZWUsIHNyY3JldikKKyAgICAgICAgZGlybGlzdCA9IG9zLmxpc3RkaXIoc3JjdHJlZSkKKyAgICAgICAgaWYgJ2dpdC5pbmRpcmVjdGlvbnN5bWxpbmsnIGluIGRpcmxpc3Q6CisgICAgICAgICAgICBkaXJsaXN0LnJlbW92ZSgnZ2l0LmluZGlyZWN0aW9uc3ltbGluaycpCisgICAgICAgIGlmIGxlbihkaXJsaXN0KSA9PSAxIGFuZCBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihzcmN0cmVlLCBkaXJsaXN0WzBdKSk6CisgICAgICAgICAgICAjIFdlIHVucGFja2VkIGEgc2luZ2xlIGRpcmVjdG9yeSwgc28gd2Ugc2hvdWxkIHVzZSB0aGF0CisgICAgICAgICAgICBzcmNzdWJkaXIgPSBkaXJsaXN0WzBdCisgICAgICAgICAgICBzcmN0cmVlID0gb3MucGF0aC5qb2luKHNyY3RyZWUsIHNyY3N1YmRpcikKKyAgICBlbHNlOgorICAgICAgICAjIEFzc3VtZSB3ZSdyZSBwb2ludGluZyB0byBhbiBleGlzdGluZyBzb3VyY2UgdHJlZQorICAgICAgICBpZiBhcmdzLmV4dHJhY3RfdG86CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJy0tZXh0cmFjdC10byBjYW5ub3QgYmUgc3BlY2lmaWVkIGlmIHNvdXJjZSBpcyBhIGRpcmVjdG9yeScpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihhcmdzLnNvdXJjZSk6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0ludmFsaWQgc291cmNlIGRpcmVjdG9yeSAlcycgJSBhcmdzLnNvdXJjZSkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIHNyY3VyaSA9ICcnCisgICAgICAgIHNyY3RyZWUgPSBhcmdzLnNvdXJjZQorCisgICAgb3V0ZmlsZSA9IGFyZ3Mub3V0ZmlsZQorICAgIGlmIG91dGZpbGUgYW5kIG91dGZpbGUgIT0gJy0nOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvdXRmaWxlKToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignT3V0cHV0IGZpbGUgJXMgYWxyZWFkeSBleGlzdHMnICUgb3V0ZmlsZSkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBsaW5lc19iZWZvcmUgPSBbXQorICAgIGxpbmVzX2FmdGVyID0gW10KKworICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgUmVjaXBlIGNyZWF0ZWQgYnkgJXMnICUgb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkpCisgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBUaGlzIGlzIHRoZSBiYXNpcyBvZiBhIHJlY2lwZSBhbmQgbWF5IG5lZWQgZnVydGhlciBlZGl0aW5nIGluIG9yZGVyIHRvIGJlIGZ1bGx5IGZ1bmN0aW9uYWwuJykKKyAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIChGZWVsIGZyZWUgdG8gcmVtb3ZlIHRoZXNlIGNvbW1lbnRzIHdoZW4gZWRpdGluZy4pJykKKyAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjJykKKworICAgIGxpY3ZhbHVlcyA9IGd1ZXNzX2xpY2Vuc2Uoc3JjdHJlZSkKKyAgICBsaWNfZmlsZXNfY2hrc3VtID0gW10KKyAgICBpZiBsaWN2YWx1ZXM6CisgICAgICAgIGxpY2Vuc2VzID0gW10KKyAgICAgICAgZm9yIGxpY3ZhbHVlIGluIGxpY3ZhbHVlczoKKyAgICAgICAgICAgIGlmIG5vdCBsaWN2YWx1ZVswXSBpbiBsaWNlbnNlczoKKyAgICAgICAgICAgICAgICBsaWNlbnNlcy5hcHBlbmQobGljdmFsdWVbMF0pCisgICAgICAgICAgICBsaWNfZmlsZXNfY2hrc3VtLmFwcGVuZCgnZmlsZTovLyVzO21kNT0lcycgJSAobGljdmFsdWVbMV0sIGxpY3ZhbHVlWzJdKSkKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBXQVJOSU5HOiB0aGUgZm9sbG93aW5nIExJQ0VOU0UgYW5kIExJQ19GSUxFU19DSEtTVU0gdmFsdWVzIGFyZSBiZXN0IGd1ZXNzZXMgLSBpdCBpcycpCisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgeW91ciByZXNwb25zaWJpbGl0eSB0byB2ZXJpZnkgdGhhdCB0aGUgdmFsdWVzIGFyZSBjb21wbGV0ZSBhbmQgY29ycmVjdC4nKQorICAgICAgICBpZiBsZW4obGljdmFsdWVzKSA+IDE6CisgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjJykKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgTk9URTogbXVsdGlwbGUgbGljZW5zZXMgaGF2ZSBiZWVuIGRldGVjdGVkOyBpZiB0aGF0IGlzIGNvcnJlY3QgeW91IHNob3VsZCBzZXBhcmF0ZScpCisgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIHRoZXNlIGluIHRoZSBMSUNFTlNFIHZhbHVlIHVzaW5nICYgaWYgdGhlIG11bHRpcGxlIGxpY2Vuc2VzIGFsbCBhcHBseSwgb3IgfCBpZiB0aGVyZScpCisgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIGlzIGEgY2hvaWNlIGJldHdlZW4gdGhlIG11bHRpcGxlIGxpY2Vuc2VzLiBJZiBpbiBkb3VidCwgY2hlY2sgdGhlIGFjY29tcGFueWluZycpCisgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIGRvY3VtZW50YXRpb24gdG8gZGV0ZXJtaW5lIHdoaWNoIHNpdHVhdGlvbiBpcyBhcHBsaWNhYmxlLicpCisgICAgZWxzZToKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBVbmFibGUgdG8gZmluZCBhbnkgZmlsZXMgdGhhdCBsb29rZWQgbGlrZSBsaWNlbnNlIHN0YXRlbWVudHMuIENoZWNrIHRoZSBhY2NvbXBhbnlpbmcnKQorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIGRvY3VtZW50YXRpb24gYW5kIHNvdXJjZSBoZWFkZXJzIGFuZCBzZXQgTElDRU5TRSBhbmQgTElDX0ZJTEVTX0NIS1NVTSBhY2NvcmRpbmdseS4nKQorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjJykKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBOT1RFOiBMSUNFTlNFIGlzIGJlaW5nIHNldCB0byAiQ0xPU0VEIiB0byBhbGxvdyB5b3UgdG8gYXQgbGVhc3Qgc3RhcnQgYnVpbGRpbmcgLSBpZicpCisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgdGhpcyBpcyBub3QgYWNjdXJhdGUgd2l0aCByZXNwZWN0IHRvIHRoZSBsaWNlbnNpbmcgb2YgdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0IChpdCcpCisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgd2lsbCBub3QgYmUgaW4gbW9zdCBjYXNlcykgeW91IG11c3Qgc3BlY2lmeSB0aGUgY29ycmVjdCB2YWx1ZSBiZWZvcmUgdXNpbmcgdGhpcycpCisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgcmVjaXBlIGZvciBhbnl0aGluZyBvdGhlciB0aGFuIGluaXRpYWwgdGVzdGluZy9kZXZlbG9wbWVudCEnKQorICAgICAgICBsaWNlbnNlcyA9IFsnQ0xPU0VEJ10KKyAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCdMSUNFTlNFID0gIiVzIicgJSAnICcuam9pbihsaWNlbnNlcykpCisgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnTElDX0ZJTEVTX0NIS1NVTSA9ICIlcyInICUgJyBcXFxuICAgICAgICAgICAgICAgICAgICAnLmpvaW4obGljX2ZpbGVzX2Noa3N1bSkpCisgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnJykKKworICAgICMgRklYTUUgVGhpcyBpcyBraW5kIG9mIGEgaGFjaywgd2UgcHJvYmFibHkgb3VnaHQgdG8gYmUgdXNpbmcgYml0YmFrZSB0byBkbyB0aGlzCisgICAgIyB3ZSdkIGFsc28gd2FudCBhIHdheSB0byBhdXRvbWF0aWNhbGx5IHNldCBvdXRmaWxlIGJhc2VkIHVwb24gYXV0by1kZXRlY3RpbmcgdGhlc2UgdmFsdWVzIGZyb20gdGhlIHNvdXJjZSBpZiBwb3NzaWJsZQorICAgIHJlY2lwZWZuID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKG91dGZpbGUpKVswXQorICAgIGZuc3BsaXQgPSByZWNpcGVmbi5zcGxpdCgnXycpCisgICAgaWYgbGVuKGZuc3BsaXQpID4gMToKKyAgICAgICAgcG4gPSBmbnNwbGl0WzBdCisgICAgICAgIHB2ID0gZm5zcGxpdFsxXQorICAgIGVsc2U6CisgICAgICAgIHBuID0gcmVjaXBlZm4KKyAgICAgICAgcHYgPSBOb25lCisKKyAgICBpZiBhcmdzLnZlcnNpb246CisgICAgICAgIHB2ID0gYXJncy52ZXJzaW9uCisKKyAgICBpZiBwdiBhbmQgcHYgbm90IGluICdnaXQgc3ZuIGhnJy5zcGxpdCgpOgorICAgICAgICByZWFscHYgPSBwdgorICAgIGVsc2U6CisgICAgICAgIHJlYWxwdiA9IE5vbmUKKworICAgIGlmIHNyY3VyaToKKyAgICAgICAgaWYgcmVhbHB2OgorICAgICAgICAgICAgc3JjdXJpID0gc3JjdXJpLnJlcGxhY2UocmVhbHB2LCAnJHtQVn0nKQorICAgIGVsc2U6CisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgTm8gaW5mb3JtYXRpb24gZm9yIFNSQ19VUkkgeWV0IChvbmx5IGFuIGV4dGVybmFsIHNvdXJjZSB0cmVlIHdhcyBzcGVjaWZpZWQpJykKKyAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCdTUkNfVVJJID0gIiVzIicgJSBzcmN1cmkpCisgICAgKG1kNXZhbHVlLCBzaGEyNTZ2YWx1ZSkgPSBjaGVja3N1bXMKKyAgICBpZiBtZDV2YWx1ZToKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnU1JDX1VSSVttZDVzdW1dID0gIiVzIicgJSBtZDV2YWx1ZSkKKyAgICBpZiBzaGEyNTZ2YWx1ZToKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnU1JDX1VSSVtzaGEyNTZzdW1dID0gIiVzIicgJSBzaGEyNTZ2YWx1ZSkKKyAgICBpZiBzcmN1cmkgYW5kIHN1cHBvcnRzX3NyY3JldihzcmN1cmkpOgorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcnKQorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIE1vZGlmeSB0aGVzZSBhcyBkZXNpcmVkJykKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnUFYgPSAiJXMrZ2l0JHtTUkNQVn0iJyAlIChyZWFscHYgb3IgJzEuMCcpKQorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCdTUkNSRVYgPSAiJXMiJyAlIHNyY3JldikKKyAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcnKQorCisgICAgaWYgc3Jjc3ViZGlyIGFuZCBwdjoKKyAgICAgICAgaWYgc3Jjc3ViZGlyID09ICIlcy0lcyIgJSAocG4sIHB2KToKKyAgICAgICAgICAgICMgVGhpcyB3b3VsZCBiZSB0aGUgZGVmYXVsdCwgc28gd2UgZG9uJ3QgbmVlZCB0byBzZXQgUyBpbiB0aGUgcmVjaXBlCisgICAgICAgICAgICBzcmNzdWJkaXIgPSAnJworICAgIGlmIHNyY3N1YmRpcjoKKyAgICAgICAgaWYgcHYgYW5kIHB2IG5vdCBpbiAnZ2l0IHN2biBoZycuc3BsaXQoKToKKyAgICAgICAgICAgIHNyY3N1YmRpciA9IHNyY3N1YmRpci5yZXBsYWNlKHB2LCAnJHtQVn0nKQorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCdTID0gIiR7V09SS0RJUn0vJXMiJyAlIHNyY3N1YmRpcikKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnJykKKworICAgIGlmIHBrZ2FyY2g6CisgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnUEFDS0FHRV9BUkNIID0gIiVzIicgJSBwa2dhcmNoKQorICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJycpCisKKyAgICAjIEZpbmQgYWxsIHBsdWdpbnMgdGhhdCB3YW50IHRvIHJlZ2lzdGVyIGhhbmRsZXJzCisgICAgaGFuZGxlcnMgPSBbXQorICAgIGZvciBwbHVnaW4gaW4gcGx1Z2luczoKKyAgICAgICAgaWYgaGFzYXR0cihwbHVnaW4sICdyZWdpc3Rlcl9yZWNpcGVfaGFuZGxlcnMnKToKKyAgICAgICAgICAgIHBsdWdpbi5yZWdpc3Rlcl9yZWNpcGVfaGFuZGxlcnMoaGFuZGxlcnMpCisKKyAgICAjIEFwcGx5IHRoZSBoYW5kbGVycworICAgIGNsYXNzZXMgPSBbXQorICAgIGhhbmRsZWQgPSBbXQorICAgIGZvciBoYW5kbGVyIGluIGhhbmRsZXJzOgorICAgICAgICBoYW5kbGVyLnByb2Nlc3Moc3JjdHJlZSwgY2xhc3NlcywgbGluZXNfYmVmb3JlLCBsaW5lc19hZnRlciwgaGFuZGxlZCkKKworICAgIG91dGxpbmVzID0gW10KKyAgICBvdXRsaW5lcy5leHRlbmQobGluZXNfYmVmb3JlKQorICAgIGlmIGNsYXNzZXM6CisgICAgICAgIG91dGxpbmVzLmFwcGVuZCgnaW5oZXJpdCAlcycgJSAnICcuam9pbihjbGFzc2VzKSkKKyAgICAgICAgb3V0bGluZXMuYXBwZW5kKCcnKQorICAgIG91dGxpbmVzLmV4dGVuZChsaW5lc19hZnRlcikKKworICAgIGlmIGFyZ3MuZXh0cmFjdF90bzoKKyAgICAgICAgc2NyaXB0dXRpbHMuZ2l0X2NvbnZlcnRfc3RhbmRhbG9uZV9jbG9uZShzcmN0cmVlKQorICAgICAgICBzaHV0aWwubW92ZShzcmN0cmVlLCBhcmdzLmV4dHJhY3RfdG8pCisgICAgICAgIGxvZ2dlci5pbmZvKCdTb3VyY2UgZXh0cmFjdGVkIHRvICVzJyAlIGFyZ3MuZXh0cmFjdF90bykKKworICAgIGlmIG91dGZpbGUgPT0gJy0nOgorICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcbicuam9pbihvdXRsaW5lcykgKyAnXG4nKQorICAgIGVsc2U6CisgICAgICAgIHdpdGggb3BlbihvdXRmaWxlLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCdcbicuam9pbihvdXRsaW5lcykgKyAnXG4nKQorICAgICAgICBsb2dnZXIuaW5mbygnUmVjaXBlICVzIGhhcyBiZWVuIGNyZWF0ZWQ7IGZ1cnRoZXIgZWRpdGluZyBtYXkgYmUgcmVxdWlyZWQgdG8gbWFrZSBpdCBmdWxseSBmdW5jdGlvbmFsJyAlIG91dGZpbGUpCisKKyAgICBpZiB0ZW1wc3JjOgorICAgICAgICBzaHV0aWwucm10cmVlKHRlbXBzcmMpCisKKyAgICByZXR1cm4gMAorCitkZWYgZ2V0X2xpY2Vuc2VfbWQ1c3VtcyhkLCBzdGF0aWNfb25seT1GYWxzZSk6CisgICAgaW1wb3J0IGJiLnV0aWxzCisgICAgbWQ1c3VtcyA9IHt9CisgICAgaWYgbm90IHN0YXRpY19vbmx5OgorICAgICAgICAjIEdhdGhlciBtZDVzdW1zIG9mIGxpY2Vuc2UgZmlsZXMgaW4gY29tbW9uIGxpY2Vuc2UgZGlyCisgICAgICAgIGNvbW1vbmxpY2RpciA9IGQuZ2V0VmFyKCdDT01NT05fTElDRU5TRV9ESVInLCBUcnVlKQorICAgICAgICBmb3IgZm4gaW4gb3MubGlzdGRpcihjb21tb25saWNkaXIpOgorICAgICAgICAgICAgbWQ1dmFsdWUgPSBiYi51dGlscy5tZDVfZmlsZShvcy5wYXRoLmpvaW4oY29tbW9ubGljZGlyLCBmbikpCisgICAgICAgICAgICBtZDVzdW1zW21kNXZhbHVlXSA9IGZuCisgICAgIyBUaGUgZm9sbG93aW5nIHdlcmUgZXh0cmFjdGVkIGZyb20gY29tbW9uIHZhbHVlcyBpbiB2YXJpb3VzIHJlY2lwZXMKKyAgICAjIChkb3VibGUgY2hlY2tpbmcgdGhlIGxpY2Vuc2UgYWdhaW5zdCB0aGUgbGljZW5zZSBmaWxlIGl0c2VsZiwgbm90IGp1c3QKKyAgICAjIHRoZSBMSUNFTlNFIHZhbHVlIGluIHRoZSByZWNpcGUpCisgICAgbWQ1c3Vtc1snOTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYnXSA9ICdHUEx2MicKKyAgICBtZDVzdW1zWydiMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyddID0gJ0dQTHYyJworICAgIG1kNXN1bXNbJzU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyJ10gPSAnR1BMdjInCisgICAgbWQ1c3Vtc1snMDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjMnXSA9ICdHUEx2MicKKyAgICBtZDVzdW1zWydlYjcyM2I2MTUzOWZlZWYwMTNkZTQ3NmU2OGI1YzUwYSddID0gJ0dQTHYyJworICAgIG1kNXN1bXNbJzc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlJ10gPSAnR1BMdjInCisgICAgbWQ1c3Vtc1snMzkzYTVjYTQ0NWY2OTY1ODczZWNhMDI1OWExN2Y4MzMnXSA9ICdHUEx2MicKKyAgICBtZDVzdW1zWycxMmY4ODRkMmFlMWZmODdjMDllNWI3Y2NjMmM0Y2E3ZSddID0gJ0dQTHYyJworICAgIG1kNXN1bXNbJzhjYTQzY2JjODQyYzIzMzZlODM1OTI2YzIxNjZjMjhiJ10gPSAnR1BMdjInCisgICAgbWQ1c3Vtc1snZWJiNWM1MGFiN2NhYjRiYWVmZmJhMTQ5NzcwMzBjMDcnXSA9ICdHUEx2MicKKyAgICBtZDVzdW1zWydjOTNjMDU1MGJkMzE3M2Y0NTA0YjJjYmQ4OTkxZTUwYiddID0gJ0dQTHYyJworICAgIG1kNXN1bXNbJzlhYzJlN2NmZjFkZGFmNDhiNmVhYjYwMjhmMjNlZjg4J10gPSAnR1BMdjInCisgICAgbWQ1c3Vtc1snNDMyNWFmZDM5NmZlYmNiNjU5YzM2YjQ5NTMzMTM1ZDQnXSA9ICdHUEx2MicKKyAgICBtZDVzdW1zWycxODgxMDY2OWYxM2I4NzM0ODQ1OWU2MTFkMzFhYjc2MCddID0gJ0dQTHYyJworICAgIG1kNXN1bXNbJ2Q3ODEwZmFiNzQ4N2ZiMGFhZDMyN2I3NmYxYmU3Y2Q3J10gPSAnR1BMdjInICMgdGhlIExpbnV4IGtlcm5lbCdzIENPUFlJTkcgZmlsZQorICAgIG1kNXN1bXNbJ2JiYjQ2MTIxMWEzM2IxMzRkNDJlZDVlZTgwMmIzN2ZmJ10gPSAnTEdQTHYyLjEnCisgICAgbWQ1c3Vtc1snN2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQnXSA9ICdMR1BMdjIuMScKKyAgICBtZDVzdW1zWyc0ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyddID0gJ0xHUEx2Mi4xJworICAgIG1kNXN1bXNbJzJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExJ10gPSAnTEdQTHYyLjEnCisgICAgbWQ1c3Vtc1snZmJjMDkzOTAxODU3ZmNkMTE4ZjA2NWY5MDA5ODJjMjQnXSA9ICdMR1BMdjIuMScKKyAgICBtZDVzdW1zWydhNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyddID0gJ0xHUEx2Mi4xJworICAgIG1kNXN1bXNbJ2Q4MDQ1ZjNiOGY5MjljMWNiMjlhMWUzZmQ3MzdiNDk5J10gPSAnTEdQTHYyLjEnCisgICAgbWQ1c3Vtc1snZmFkOWIzMzMyYmU4OTRiYWI5YmM1MDE1NzI4NjRiMjknXSA9ICdMR1BMdjIuMScKKyAgICBtZDVzdW1zWyczYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyddID0gJ0xHUEx2MicKKyAgICBtZDVzdW1zWyc5ZjYwNGQ4YTRmOGU3NGY0ZjUxNDA4NDVhMjFiNjY3NCddID0gJ0xHUEx2MicKKyAgICBtZDVzdW1zWyc1ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiddID0gJ0xHUEx2MicKKyAgICBtZDVzdW1zWyc1NWNhODE3Y2NiN2Q1YjViNjYzNTU2OTBlOWFiYzYwNSddID0gJ0xHUEx2MicKKyAgICBtZDVzdW1zWycyNTI4OTBkOWVlZTI2YWFiN2I0MzJlOGI4YTYxNjQ3NSddID0gJ0xHUEx2MicKKyAgICBtZDVzdW1zWydkMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCddID0gJ0dQTHYzJworICAgIG1kNXN1bXNbJ2YyN2RlZmUxZTk2YzJlMWVjZDRlMGM5YmU4OTY3OTQ5J10gPSAnR1BMdjMnCisgICAgbWQ1c3Vtc1snNmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjYnXSA9ICdMR1BMdjMnCisgICAgbWQ1c3Vtc1snM2I4M2VmOTYzODdmMTQ2NTVmYzg1NGRkYzNjNmJkNTcnXSA9ICdBcGFjaGUtMi4wJworICAgIG1kNXN1bXNbJzM4NWM1NTY1Mzg4NmFjYWMzODIxOTk5YTNjY2QxN2IzJ10gPSAnQXJ0aXN0aWMtMS4wIHwgR1BMLTIuMCcgIyBzb21lIHBlcmwgbW9kdWxlcworICAgIHJldHVybiBtZDVzdW1zCisKK2RlZiBndWVzc19saWNlbnNlKHNyY3RyZWUpOgorICAgIGltcG9ydCBiYgorICAgIG1kNXN1bXMgPSBnZXRfbGljZW5zZV9tZDVzdW1zKHRpbmZvaWwuY29uZmlnX2RhdGEpCisKKyAgICBsaWNlbnNlcyA9IFtdCisgICAgbGljc3BlY3MgPSBbJ0xJQ0VOU0UqJywgJ0NPUFlJTkcqJywgJypbTGxdaWNlbnNlKicsICdMSUNFTkNFKicsICdMRUdBTConLCAnW0xsXWVnYWwqJywgJypHUEwqJywgJ1JFQURNRS5saWMqJywgJ0NPUFlSSUdIVConLCAnW0NjXW9weXJpZ2h0KiddCisgICAgbGljZmlsZXMgPSBbXQorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNyY3RyZWUpOgorICAgICAgICBmb3IgZm4gaW4gZmlsZXM6CisgICAgICAgICAgICBmb3Igc3BlYyBpbiBsaWNzcGVjczoKKyAgICAgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2goZm4sIHNwZWMpOgorICAgICAgICAgICAgICAgICAgICBmdWxscGF0aCA9IG9zLnBhdGguam9pbihyb290LCBmbikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGZ1bGxwYXRoIGluIGxpY2ZpbGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgbGljZmlsZXMuYXBwZW5kKGZ1bGxwYXRoKQorICAgIGZvciBsaWNmaWxlIGluIGxpY2ZpbGVzOgorICAgICAgICBtZDV2YWx1ZSA9IGJiLnV0aWxzLm1kNV9maWxlKGxpY2ZpbGUpCisgICAgICAgIGxpY2Vuc2UgPSBtZDVzdW1zLmdldChtZDV2YWx1ZSwgJ1Vua25vd24nKQorICAgICAgICBsaWNlbnNlcy5hcHBlbmQoKGxpY2Vuc2UsIG9zLnBhdGgucmVscGF0aChsaWNmaWxlLCBzcmN0cmVlKSwgbWQ1dmFsdWUpKQorCisgICAgIyBGSVhNRSBzaG91bGQgd2UgZ3JhYiBhdCBsZWFzdCBvbmUgc291cmNlIGZpbGUgd2l0aCBhIGxpY2Vuc2UgaGVhZGVyIGFuZCBhZGQgdGhhdCB0b28/CisKKyAgICByZXR1cm4gbGljZW5zZXMKKworZGVmIHJlYWRfcGtnY29uZmlnX3Byb3ZpZGVzKGQpOgorICAgIHBrZ2RhdGFkaXIgPSBkLmdldFZhcignUEtHREFUQV9ESVInLCBUcnVlKQorICAgIHBrZ21hcCA9IHt9CisgICAgZm9yIGZuIGluIGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4ocGtnZGF0YWRpciwgJ3NobGliczInLCAnKi5wY2xpc3QnKSk6CisgICAgICAgIHdpdGggb3BlbihmbiwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBwa2dtYXBbb3MucGF0aC5iYXNlbmFtZShsaW5lLnJzdHJpcCgpKV0gPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoZm4pKVswXQorICAgIHJlY2lwZW1hcCA9IHt9CisgICAgZm9yIHBjLCBwa2cgaW4gcGtnbWFwLml0ZXJpdGVtcygpOgorICAgICAgICBwa2dkYXRhZmlsZSA9IG9zLnBhdGguam9pbihwa2dkYXRhZGlyLCAncnVudGltZScsIHBrZykKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGtnZGF0YWZpbGUpOgorICAgICAgICAgICAgd2l0aCBvcGVuKHBrZ2RhdGFmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdQTjogJyk6CisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVtYXBbcGNdID0gbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCkKKyAgICByZXR1cm4gcmVjaXBlbWFwCisKK2RlZiBjb252ZXJ0X3BrZ2luZm8ocGtnaW5mb2ZpbGUpOgorICAgIHZhbHVlcyA9IHt9CisgICAgd2l0aCBvcGVuKHBrZ2luZm9maWxlLCAncicpIGFzIGY6CisgICAgICAgIGluZGVzYyA9IEZhbHNlCisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICBpZiBpbmRlc2M6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdHJpcCgpOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbJ0RFU0NSSVBUSU9OJ10gKz0gJyAnICsgbGluZS5zdHJpcCgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaW5kZXNjID0gRmFsc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3BsaXRsaW5lID0gbGluZS5zcGxpdCgnOiAnLCAxKQorICAgICAgICAgICAgICAgIGtleSA9IGxpbmVbMF0KKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGxpbmVbMV0KKyAgICAgICAgICAgICAgICBpZiBrZXkgPT0gJ0xJQ0VOU0UnOgorICAgICAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHZhbHVlLnNwbGl0KCcsJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBkZXAgPSBkZXAuc3BsaXQoKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGVkID0gZGVwbWFwLmdldChkZXAsICcnKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbWFwcGVkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMuYXBwZW5kKG1hcHBlZCkKKyAgICAgICAgICAgICAgICBlbGlmIGtleSA9PSAnTGljZW5zZSc6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlc1snTElDRU5TRSddID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIGtleSA9PSAnU3VtbWFyeSc6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlc1snU1VNTUFSWSddID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIGtleSA9PSAnRGVzY3JpcHRpb24nOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbJ0RFU0NSSVBUSU9OJ10gPSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICBpbmRlc2MgPSBUcnVlCisgICAgcmV0dXJuIHZhbHVlcworCitkZWYgY29udmVydF9kZWJpYW4oZGVicGF0aCk6CisgICAgIyBGSVhNRSBleHRlbmQgdGhpcyBtYXBwaW5nIC0gcGVyaGFwcyB1c2UgZGlzdHJvX2FsaWFzLmluYz8KKyAgICBkZXBtYXAgPSB7J2xpYnotZGV2JzogJ3psaWInfQorCisgICAgdmFsdWVzID0ge30KKyAgICBkZXBlbmRzID0gW10KKyAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGRlYnBhdGgsICdjb250cm9sJykpIGFzIGY6CisgICAgICAgIGluZGVzYyA9IEZhbHNlCisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICBpZiBpbmRlc2M6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdHJpcCgpOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyBUaGlzIHBhY2thZ2UgY29udGFpbnMnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGVzYyA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbJ0RFU0NSSVBUSU9OJ10gKz0gJyAnICsgbGluZS5zdHJpcCgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaW5kZXNjID0gRmFsc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3BsaXRsaW5lID0gbGluZS5zcGxpdCgnOicsIDEpCisgICAgICAgICAgICAgICAga2V5ID0gbGluZVswXQorICAgICAgICAgICAgICAgIHZhbHVlID0gbGluZVsxXQorICAgICAgICAgICAgICAgIGlmIGtleSA9PSAnQnVpbGQtRGVwZW5kcyc6CisgICAgICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gdmFsdWUuc3BsaXQoJywnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcCA9IGRlcC5zcGxpdCgpWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWQgPSBkZXBtYXAuZ2V0KGRlcCwgJycpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBtYXBwZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kcy5hcHBlbmQobWFwcGVkKQorICAgICAgICAgICAgICAgIGVsaWYga2V5ID09ICdTZWN0aW9uJzoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzWydTRUNUSU9OJ10gPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYga2V5ID09ICdEZXNjcmlwdGlvbic6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlc1snU1VNTUFSWSddID0gdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgaW5kZXNjID0gVHJ1ZQorCisgICAgaWYgZGVwZW5kczoKKyAgICAgICAgdmFsdWVzWydERVBFTkRTJ10gPSAnICcuam9pbihkZXBlbmRzKQorCisgICAgcmV0dXJuIHZhbHVlcworCisKK2RlZiByZWdpc3Rlcl9jb21tYW5kKHN1YnBhcnNlcnMpOgorICAgIHBhcnNlcl9jcmVhdGUgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2NyZWF0ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdDcmVhdGUgYSBuZXcgcmVjaXBlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdDcmVhdGVzIGEgbmV3IHJlY2lwZSBmcm9tIGEgc291cmNlIHRyZWUnKQorICAgIHBhcnNlcl9jcmVhdGUuYWRkX2FyZ3VtZW50KCdzb3VyY2UnLCBoZWxwPSdQYXRoIG9yIFVSTCB0byBzb3VyY2UnKQorICAgIHBhcnNlcl9jcmVhdGUuYWRkX2FyZ3VtZW50KCctbycsICctLW91dGZpbGUnLCBoZWxwPSdTcGVjaWZ5IGZpbGVuYW1lIGZvciByZWNpcGUgdG8gY3JlYXRlJywgcmVxdWlyZWQ9VHJ1ZSkKKyAgICBwYXJzZXJfY3JlYXRlLmFkZF9hcmd1bWVudCgnLW0nLCAnLS1tYWNoaW5lJywgaGVscD0nTWFrZSByZWNpcGUgbWFjaGluZS1zcGVjaWZpYyBhcyBvcHBvc2VkIHRvIGFyY2hpdGVjdHVyZS1zcGVjaWZpYycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyX2NyZWF0ZS5hZGRfYXJndW1lbnQoJy14JywgJy0tZXh0cmFjdC10bycsIG1ldGF2YXI9J0VYVFJBQ1RQQVRIJywgaGVscD0nQXNzdW1pbmcgc291cmNlIGlzIGEgVVJMLCBmZXRjaCBpdCBhbmQgZXh0cmFjdCBpdCB0byB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZCBhcyAlKG1ldGF2YXIpcycpCisgICAgcGFyc2VyX2NyZWF0ZS5hZGRfYXJndW1lbnQoJy1WJywgJy0tdmVyc2lvbicsIGhlbHA9J1ZlcnNpb24gdG8gdXNlIHdpdGhpbiByZWNpcGUgKFBWKScpCisgICAgcGFyc2VyX2NyZWF0ZS5zZXRfZGVmYXVsdHMoZnVuYz1jcmVhdGVfcmVjaXBlKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlX2J1aWxkc3lzLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9idWlsZHN5cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDE0YTUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9idWlsZHN5cy5weQpAQCAtMCwwICsxLDMxNiBAQAorIyBSZWNpcGUgY3JlYXRpb24gdG9vbCAtIGNyZWF0ZSBjb21tYW5kIGJ1aWxkIHN5c3RlbSBoYW5kbGVycworIworIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCByZQoraW1wb3J0IGxvZ2dpbmcKK2Zyb20gcmVjaXBldG9vbC5jcmVhdGUgaW1wb3J0IFJlY2lwZUhhbmRsZXIsIHJlYWRfcGtnY29uZmlnX3Byb3ZpZGVzCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdyZWNpcGV0b29sJykKKwordGluZm9pbCA9IE5vbmUKKworZGVmIHRpbmZvaWxfaW5pdChpbnN0YW5jZSk6CisgICAgZ2xvYmFsIHRpbmZvaWwKKyAgICB0aW5mb2lsID0gaW5zdGFuY2UKKworY2xhc3MgQ21ha2VSZWNpcGVIYW5kbGVyKFJlY2lwZUhhbmRsZXIpOgorICAgIGRlZiBwcm9jZXNzKHNlbGYsIHNyY3RyZWUsIGNsYXNzZXMsIGxpbmVzX2JlZm9yZSwgbGluZXNfYWZ0ZXIsIGhhbmRsZWQpOgorICAgICAgICBpZiAnYnVpbGRzeXN0ZW0nIGluIGhhbmRsZWQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBSZWNpcGVIYW5kbGVyLmNoZWNrZmlsZXMoc3JjdHJlZSwgWydDTWFrZUxpc3RzLnR4dCddKToKKyAgICAgICAgICAgIGNsYXNzZXMuYXBwZW5kKCdjbWFrZScpCisgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyMgU3BlY2lmeSBhbnkgb3B0aW9ucyB5b3Ugd2FudCB0byBwYXNzIHRvIGNtYWtlIHVzaW5nIEVYVFJBX09FQ01BS0U6JykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnRVhUUkFfT0VDTUFLRSA9ICIiJykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGhhbmRsZWQuYXBwZW5kKCdidWlsZHN5c3RlbScpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworY2xhc3MgU2NvbnNSZWNpcGVIYW5kbGVyKFJlY2lwZUhhbmRsZXIpOgorICAgIGRlZiBwcm9jZXNzKHNlbGYsIHNyY3RyZWUsIGNsYXNzZXMsIGxpbmVzX2JlZm9yZSwgbGluZXNfYWZ0ZXIsIGhhbmRsZWQpOgorICAgICAgICBpZiAnYnVpbGRzeXN0ZW0nIGluIGhhbmRsZWQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBSZWNpcGVIYW5kbGVyLmNoZWNrZmlsZXMoc3JjdHJlZSwgWydTQ29uc3RydWN0JywgJ1Njb25zdHJ1Y3QnLCAnc2NvbnN0cnVjdCddKToKKyAgICAgICAgICAgIGNsYXNzZXMuYXBwZW5kKCdzY29ucycpCisgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyMgU3BlY2lmeSBhbnkgb3B0aW9ucyB5b3Ugd2FudCB0byBwYXNzIHRvIHNjb25zIHVzaW5nIEVYVFJBX09FU0NPTlM6JykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnRVhUUkFfT0VTQ09OUyA9ICIiJykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGhhbmRsZWQuYXBwZW5kKCdidWlsZHN5c3RlbScpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworY2xhc3MgUW1ha2VSZWNpcGVIYW5kbGVyKFJlY2lwZUhhbmRsZXIpOgorICAgIGRlZiBwcm9jZXNzKHNlbGYsIHNyY3RyZWUsIGNsYXNzZXMsIGxpbmVzX2JlZm9yZSwgbGluZXNfYWZ0ZXIsIGhhbmRsZWQpOgorICAgICAgICBpZiAnYnVpbGRzeXN0ZW0nIGluIGhhbmRsZWQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBSZWNpcGVIYW5kbGVyLmNoZWNrZmlsZXMoc3JjdHJlZSwgWycqLnBybyddKToKKyAgICAgICAgICAgIGNsYXNzZXMuYXBwZW5kKCdxbWFrZTInKQorICAgICAgICAgICAgaGFuZGxlZC5hcHBlbmQoJ2J1aWxkc3lzdGVtJykKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCitjbGFzcyBBdXRvdG9vbHNSZWNpcGVIYW5kbGVyKFJlY2lwZUhhbmRsZXIpOgorICAgIGRlZiBwcm9jZXNzKHNlbGYsIHNyY3RyZWUsIGNsYXNzZXMsIGxpbmVzX2JlZm9yZSwgbGluZXNfYWZ0ZXIsIGhhbmRsZWQpOgorICAgICAgICBpZiAnYnVpbGRzeXN0ZW0nIGluIGhhbmRsZWQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBhdXRvY29uZiA9IEZhbHNlCisgICAgICAgIGlmIFJlY2lwZUhhbmRsZXIuY2hlY2tmaWxlcyhzcmN0cmVlLCBbJ2NvbmZpZ3VyZS5hYycsICdjb25maWd1cmUuaW4nXSk6CisgICAgICAgICAgICBhdXRvY29uZiA9IFRydWUKKyAgICAgICAgICAgIHZhbHVlcyA9IEF1dG90b29sc1JlY2lwZUhhbmRsZXIuZXh0cmFjdF9hdXRvdG9vbHNfZGVwcyhsaW5lc19iZWZvcmUsIHNyY3RyZWUpCisgICAgICAgICAgICBjbGFzc2VzLmV4dGVuZCh2YWx1ZXMucG9wKCdpbmhlcml0JywgJycpLnNwbGl0KCkpCisgICAgICAgICAgICBmb3IgdmFyLCB2YWx1ZSBpbiB2YWx1ZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnJXMgPSAiJXMiJyAlICh2YXIsIHZhbHVlKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbmZmaWxlID0gUmVjaXBlSGFuZGxlci5jaGVja2ZpbGVzKHNyY3RyZWUsIFsnY29uZmlndXJlJ10pCisgICAgICAgICAgICBpZiBjb25mZmlsZToKKyAgICAgICAgICAgICAgICAjIENoZWNrIGlmIHRoaXMgaXMganVzdCBhIHByZS1nZW5lcmF0ZWQgYXV0b2NvbmYgY29uZmlndXJlIHNjcmlwdAorICAgICAgICAgICAgICAgIHdpdGggb3Blbihjb25mZmlsZVswXSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCAxMCk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAnR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZicgaW4gZi5yZWFkbGluZSgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb25mID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgYXV0b2NvbmY6CisgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIE5PVEU6IGlmIHRoaXMgc29mdHdhcmUgaXMgbm90IGNhcGFibGUgb2YgYmVpbmcgYnVpbHQgaW4gYSBzZXBhcmF0ZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBmcm9tIHRoZSBzb3VyY2UsIHlvdSBzaG91bGQgcmVwbGFjZSBhdXRvdG9vbHMgd2l0aCBhdXRvdG9vbHMtYnJva2Vuc2VwIGluIHRoZScpCisgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIGluaGVyaXQgbGluZScpCisgICAgICAgICAgICBjbGFzc2VzLmFwcGVuZCgnYXV0b3Rvb2xzJykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBTcGVjaWZ5IGFueSBvcHRpb25zIHlvdSB3YW50IHRvIHBhc3MgdG8gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgdXNpbmcgRVhUUkFfT0VDT05GOicpCisgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJ0VYVFJBX09FQ09ORiA9ICIiJykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGhhbmRsZWQuYXBwZW5kKCdidWlsZHN5c3RlbScpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBleHRyYWN0X2F1dG90b29sc19kZXBzKG91dGxpbmVzLCBzcmN0cmVlLCBhY2ZpbGU9Tm9uZSk6CisgICAgICAgIGltcG9ydCBzaGxleAorICAgICAgICBpbXBvcnQgb2UucGFja2FnZQorCisgICAgICAgIHZhbHVlcyA9IHt9CisgICAgICAgIGluaGVyaXRzID0gW10KKworICAgICAgICAjIEZJWE1FIHRoaXMgbWFwcGluZyBpcyB2ZXJ5IHRoaW4KKyAgICAgICAgcHJvZ21hcCA9IHsnZmxleCc6ICdmbGV4LW5hdGl2ZScsCisgICAgICAgICAgICAgICAgJ2Jpc29uJzogJ2Jpc29uLW5hdGl2ZScsCisgICAgICAgICAgICAgICAgJ200JzogJ200LW5hdGl2ZSd9CisgICAgICAgIHByb2djbGFzc21hcCA9IHsnZ2NvbmZ0b29sLTInOiAnZ2NvbmYnLAorICAgICAgICAgICAgICAgICdwa2ctY29uZmlnJzogJ3BrZ2NvbmZpZyd9CisKKyAgICAgICAgaWdub3JlZGVwcyA9IFsnZ2NjLXJ1bnRpbWUnLCAnZ2xpYmMnLCAndWNsaWJjJ10KKworICAgICAgICBwa2dfcmUgPSByZS5jb21waWxlKCdQS0dfQ0hFQ0tfTU9EVUxFU1woXFs/W2EtekEtWjAtOV0qXF0/LCBcWz8oW14sXF1dKilbKSxdLionKQorICAgICAgICBsaWJfcmUgPSByZS5jb21waWxlKCdBQ19DSEVDS19MSUJcKFxbPyhbYS16QS1aMC05XSopXF0/LCAuKicpCisgICAgICAgIHByb2dzX3JlID0gcmUuY29tcGlsZSgnX1BST0dTP1woXFs/W2EtekEtWjAtOV0qXF0/LCBcWz8oW14sXF1dKilcXT9bKSxdLionKQorICAgICAgICBkZXBfcmUgPSByZS5jb21waWxlKCcoW14gPjw9XSspKCBbPD49XSsgW14gPjw9XSspPycpCisKKyAgICAgICAgIyBCdWlsZCB1cCBsaWIgbGlicmFyeS0+cGFja2FnZSBtYXBwaW5nCisgICAgICAgIHNobGliX3Byb3ZpZGVycyA9IG9lLnBhY2thZ2UucmVhZF9zaGxpYl9wcm92aWRlcnModGluZm9pbC5jb25maWdfZGF0YSkKKyAgICAgICAgbGliZGlyID0gdGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ2xpYmRpcicsIFRydWUpCisgICAgICAgIGJhc2VfbGliZGlyID0gdGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ2Jhc2VfbGliZGlyJywgVHJ1ZSkKKyAgICAgICAgbGlicGF0aHMgPSBsaXN0KHNldChbYmFzZV9saWJkaXIsIGxpYmRpcl0pKQorICAgICAgICBsaWJuYW1lX3JlID0gcmUuY29tcGlsZSgnXmxpYiguKylcLnNvLiokJykKKyAgICAgICAgcGtnbGlibWFwID0ge30KKyAgICAgICAgZm9yIGxpYiwgaXRlbSBpbiBzaGxpYl9wcm92aWRlcnMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBmb3IgcGF0aCwgcGtnIGluIGl0ZW0uaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgcGF0aCBpbiBsaWJwYXRoczoKKyAgICAgICAgICAgICAgICAgICAgcmVzID0gbGlibmFtZV9yZS5tYXRjaChsaWIpCisgICAgICAgICAgICAgICAgICAgIGlmIHJlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpYm5hbWUgPSByZXMuZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaWJuYW1lIGluIHBrZ2xpYm1hcDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2dsaWJtYXBbbGlibmFtZV0gPSBwa2dbMF0KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygndW5hYmxlIHRvIGV4dHJhY3QgbGlicmFyeSBuYW1lIGZyb20gJXMnICUgbGliKQorCisgICAgICAgICMgTm93IHR1cm4gaXQgaW50byBhIGxpYnJhcnktPnJlY2lwZSBtYXBwaW5nCisgICAgICAgIHJlY2lwZWxpYm1hcCA9IHt9CisgICAgICAgIHBrZ2RhdGFfZGlyID0gdGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ1BLR0RBVEFfRElSJywgVHJ1ZSkKKyAgICAgICAgZm9yIGxpYm5hbWUsIHBrZyBpbiBwa2dsaWJtYXAuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihwa2dkYXRhX2RpciwgJ3J1bnRpbWUnLCBwa2cpKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdQTjonKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVsaWJtYXBbbGlibmFtZV0gPSBsaW5lLnNwbGl0KCc6JywgMSlbLTFdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgaW9lOgorICAgICAgICAgICAgICAgIGlmIGlvZS5lcnJubyA9PSAyOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybigndW5hYmxlIHRvIGZpbmQgYSBwa2dkYXRhIGZpbGUgZm9yIHBhY2thZ2UgJXMnICUgcGtnKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgIyBTaW5jZSBhIGNvbmZpZ3VyZS5hYyBmaWxlIGlzIGVzc2VudGlhbGx5IGEgcHJvZ3JhbSwgdGhpcyBpcyBvbmx5IGV2ZXIgZ29pbmcgdG8gYmUKKyAgICAgICAgIyBhIGhhY2sgdW5mb3J0dW5hdGVseTsgYnV0IGl0IG91Z2h0IHRvIGJlIGVub3VnaCBvZiBhbiBhcHByb3hpbWF0aW9uCisgICAgICAgIGlmIGFjZmlsZToKKyAgICAgICAgICAgIHNyY2ZpbGVzID0gW2FjZmlsZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNyY2ZpbGVzID0gUmVjaXBlSGFuZGxlci5jaGVja2ZpbGVzKHNyY3RyZWUsIFsnY29uZmlndXJlLmFjJywgJ2NvbmZpZ3VyZS5pbiddKQorICAgICAgICBwY2RlcHMgPSBbXQorICAgICAgICBkZXBzID0gW10KKyAgICAgICAgdW5tYXBwZWQgPSBbXQorICAgICAgICB1bm1hcHBlZGxpYnMgPSBbXQorICAgICAgICB3aXRoIG9wZW4oc3JjZmlsZXNbMF0sICdyJykgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgaWYgJ1BLR19DSEVDS19NT0RVTEVTJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICByZXMgPSBwa2dfcmUuc2VhcmNoKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIHJlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IGRlcF9yZS5maW5kYWxsKHJlcy5ncm91cCgxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2RlcHMuZXh0ZW5kKFt4WzBdIGZvciB4IGluIHJlc10pCisgICAgICAgICAgICAgICAgICAgIGluaGVyaXRzLmFwcGVuZCgncGtnY29uZmlnJykKKyAgICAgICAgICAgICAgICBpZiBsaW5lLmxzdHJpcCgpLnN0YXJ0c3dpdGgoJ0FNX0dOVV9HRVRURVhUJyk6CisgICAgICAgICAgICAgICAgICAgIGluaGVyaXRzLmFwcGVuZCgnZ2V0dGV4dCcpCisgICAgICAgICAgICAgICAgZWxpZiAnQUNfQ0hFQ0tfUFJPRycgaW4gbGluZSBvciAnQUNfUEFUSF9QUk9HJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICByZXMgPSBwcm9nc19yZS5zZWFyY2gobGluZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgcmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb2cgaW4gc2hsZXguc3BsaXQocmVzLmdyb3VwKDEpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9nID0gcHJvZy5zcGxpdCgpWzBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ2NsYXNzID0gcHJvZ2NsYXNzbWFwLmdldChwcm9nLCBOb25lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByb2djbGFzczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdHMuYXBwZW5kKHByb2djbGFzcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9nZGVwID0gcHJvZ21hcC5nZXQocHJvZywgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJvZ2RlcDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHMuYXBwZW5kKHByb2dkZXApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgcHJvZy5zdGFydHN3aXRoKCckJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5tYXBwZWQuYXBwZW5kKHByb2cpCisgICAgICAgICAgICAgICAgZWxpZiAnQUNfQ0hFQ0tfTElCJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICByZXMgPSBsaWJfcmUuc2VhcmNoKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIHJlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpYiA9IHJlcy5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICAgICAgbGliZGVwID0gcmVjaXBlbGlibWFwLmdldChsaWIsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaWJkZXA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQobGliZGVwKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaWJkZXAgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpYi5zdGFydHN3aXRoKCckJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm1hcHBlZGxpYnMuYXBwZW5kKGxpYikKKyAgICAgICAgICAgICAgICBlbGlmICdBQ19QQVRIX1gnIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGRlcHMuYXBwZW5kKCdsaWJ4MTEnKQorCisgICAgICAgIGlmIHVubWFwcGVkOgorICAgICAgICAgICAgb3V0bGluZXMuYXBwZW5kKCcjIE5PVEU6IHRoZSBmb2xsb3dpbmcgcHJvZyBkZXBlbmRlbmNpZXMgYXJlIHVua25vd24sIGlnbm9yaW5nOiAlcycgJSAnICcuam9pbih1bm1hcHBlZCkpCisKKyAgICAgICAgaWYgdW5tYXBwZWRsaWJzOgorICAgICAgICAgICAgb3V0bGluZXMuYXBwZW5kKCcjIE5PVEU6IHRoZSBmb2xsb3dpbmcgbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIHVua25vd24sIGlnbm9yaW5nOiAlcycgJSAnICcuam9pbih1bm1hcHBlZGxpYnMpKQorICAgICAgICAgICAgb3V0bGluZXMuYXBwZW5kKCcjICAgICAgICh0aGlzIGlzIGJhc2VkIG9uIHJlY2lwZXMgdGhhdCBoYXZlIHByZXZpb3VzbHkgYmVlbiBidWlsdCBhbmQgcGFja2FnZWQpJykKKworICAgICAgICByZWNpcGVtYXAgPSByZWFkX3BrZ2NvbmZpZ19wcm92aWRlcyh0aW5mb2lsLmNvbmZpZ19kYXRhKQorICAgICAgICB1bm1hcHBlZCA9IFtdCisgICAgICAgIGZvciBwY2RlcCBpbiBwY2RlcHM6CisgICAgICAgICAgICByZWNpcGUgPSByZWNpcGVtYXAuZ2V0KHBjZGVwLCBOb25lKQorICAgICAgICAgICAgaWYgcmVjaXBlOgorICAgICAgICAgICAgICAgIGRlcHMuYXBwZW5kKHJlY2lwZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbm90IHBjZGVwLnN0YXJ0c3dpdGgoJyQnKToKKyAgICAgICAgICAgICAgICAgICAgdW5tYXBwZWQuYXBwZW5kKHBjZGVwKQorCisgICAgICAgIGRlcHMgPSBzZXQoZGVwcykuZGlmZmVyZW5jZShzZXQoaWdub3JlZGVwcykpCisKKyAgICAgICAgaWYgdW5tYXBwZWQ6CisgICAgICAgICAgICBvdXRsaW5lcy5hcHBlbmQoJyMgTk9URTogdW5hYmxlIHRvIG1hcCB0aGUgZm9sbG93aW5nIHBrZy1jb25maWcgZGVwZW5kZW5jaWVzOiAlcycgJSAnICcuam9pbih1bm1hcHBlZCkpCisgICAgICAgICAgICBvdXRsaW5lcy5hcHBlbmQoJyMgICAgICAgKHRoaXMgaXMgYmFzZWQgb24gcmVjaXBlcyB0aGF0IGhhdmUgcHJldmlvdXNseSBiZWVuIGJ1aWx0IGFuZCBwYWNrYWdlZCknKQorCisgICAgICAgIGlmIGRlcHM6CisgICAgICAgICAgICB2YWx1ZXNbJ0RFUEVORFMnXSA9ICcgJy5qb2luKGRlcHMpCisKKyAgICAgICAgaWYgaW5oZXJpdHM6CisgICAgICAgICAgICB2YWx1ZXNbJ2luaGVyaXQnXSA9ICcgJy5qb2luKGxpc3Qoc2V0KGluaGVyaXRzKSkpCisKKyAgICAgICAgcmV0dXJuIHZhbHVlcworCisKK2NsYXNzIE1ha2VmaWxlUmVjaXBlSGFuZGxlcihSZWNpcGVIYW5kbGVyKToKKyAgICBkZWYgcHJvY2VzcyhzZWxmLCBzcmN0cmVlLCBjbGFzc2VzLCBsaW5lc19iZWZvcmUsIGxpbmVzX2FmdGVyLCBoYW5kbGVkKToKKyAgICAgICAgaWYgJ2J1aWxkc3lzdGVtJyBpbiBoYW5kbGVkOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgbWFrZWZpbGUgPSBSZWNpcGVIYW5kbGVyLmNoZWNrZmlsZXMoc3JjdHJlZSwgWydNYWtlZmlsZSddKQorICAgICAgICBpZiBtYWtlZmlsZToKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBOT1RFOiB0aGlzIGlzIGEgTWFrZWZpbGUtb25seSBwaWVjZSBvZiBzb2Z0d2FyZSwgc28gd2UgY2Fubm90IGdlbmVyYXRlIG11Y2ggb2YgdGhlJykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyByZWNpcGUgYXV0b21hdGljYWxseSAtIHlvdSB3aWxsIG5lZWQgdG8gZXhhbWluZSB0aGUgTWFrZWZpbGUgeW91cnNlbGYgYW5kIGVuc3VyZScpCisgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyMgdGhhdCB0aGUgYXBwcm9wcmlhdGUgYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4uJykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnJykKKworICAgICAgICAgICAgc2NhbmZpbGUgPSBvcy5wYXRoLmpvaW4oc3JjdHJlZSwgJ2NvbmZpZ3VyZS5zY2FuJykKKyAgICAgICAgICAgIHNraXBzY2FuID0gRmFsc2UKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IGJiLnByb2Nlc3MucnVuKCdhdXRvc2NhbicsIGN3ZD1zcmN0cmVlLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgZXhjZXB0IGJiLnByb2Nlc3MuRXhlY3V0aW9uRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBza2lwc2NhbiA9IFRydWUKKyAgICAgICAgICAgIGlmIHNjYW5maWxlIGFuZCBvcy5wYXRoLmV4aXN0cyhzY2FuZmlsZSk6CisgICAgICAgICAgICAgICAgdmFsdWVzID0gQXV0b3Rvb2xzUmVjaXBlSGFuZGxlci5leHRyYWN0X2F1dG90b29sc19kZXBzKGxpbmVzX2JlZm9yZSwgc3JjdHJlZSwgYWNmaWxlPXNjYW5maWxlKQorICAgICAgICAgICAgICAgIGNsYXNzZXMuZXh0ZW5kKHZhbHVlcy5wb3AoJ2luaGVyaXQnLCAnJykuc3BsaXQoKSkKKyAgICAgICAgICAgICAgICBmb3IgdmFyLCB2YWx1ZSBpbiB2YWx1ZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIHZhciA9PSAnREVQRU5EUyc6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIE5PVEU6IHNvbWUgb2YgdGhlc2UgZGVwZW5kZW5jaWVzIG1heSBiZSBvcHRpb25hbCwgY2hlY2sgdGhlIE1ha2VmaWxlIGFuZC9vciB1cHN0cmVhbSBkb2N1bWVudGF0aW9uJykKKyAgICAgICAgICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnJXMgPSAiJXMiJyAlICh2YXIsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcnKQorICAgICAgICAgICAgICAgIGZvciBmIGluIFsnY29uZmlndXJlLnNjYW4nLCAnYXV0b3NjYW4ubG9nJ106CisgICAgICAgICAgICAgICAgICAgIGZwID0gb3MucGF0aC5qb2luKHNyY3RyZWUsIGYpCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZwKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmcCkKKworICAgICAgICAgICAgc2VsZi5nZW5mdW5jdGlvbihsaW5lc19hZnRlciwgJ2RvX2NvbmZpZ3VyZScsIFsnIyBTcGVjaWZ5IGFueSBuZWVkZWQgY29uZmlndXJlIGNvbW1hbmRzIGhlcmUnXSkKKworICAgICAgICAgICAgZnVuYyA9IFtdCisgICAgICAgICAgICBmdW5jLmFwcGVuZCgnIyBZb3Ugd2lsbCBhbG1vc3QgY2VydGFpbmx5IG5lZWQgdG8gYWRkIGFkZGl0aW9uYWwgYXJndW1lbnRzIGhlcmUnKQorICAgICAgICAgICAgZnVuYy5hcHBlbmQoJ29lX3J1bm1ha2UnKQorICAgICAgICAgICAgc2VsZi5nZW5mdW5jdGlvbihsaW5lc19hZnRlciwgJ2RvX2NvbXBpbGUnLCBmdW5jKQorCisgICAgICAgICAgICBpbnN0YWxsdGFyZ2V0ID0gVHJ1ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gYmIucHJvY2Vzcy5ydW4oJ21ha2UgLXFuIGluc3RhbGwnLCBjd2Q9c3JjdHJlZSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5leGl0Y29kZSAhPSAxOgorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsdGFyZ2V0ID0gRmFsc2UKKyAgICAgICAgICAgIGZ1bmMgPSBbXQorICAgICAgICAgICAgaWYgaW5zdGFsbHRhcmdldDoKKyAgICAgICAgICAgICAgICBmdW5jLmFwcGVuZCgnIyBUaGlzIGlzIGEgZ3Vlc3M7IGFkZGl0aW9uYWwgYXJndW1lbnRzIG1heSBiZSByZXF1aXJlZCcpCisgICAgICAgICAgICAgICAgbWFrZWFyZ3MgPSAnJworICAgICAgICAgICAgICAgIHdpdGggb3BlbihtYWtlZmlsZVswXSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCAxMDApOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ0RFU1RESVInIGluIGYucmVhZGxpbmUoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlYXJncyArPSAiICdERVNURElSPSR7RH0nIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZnVuYy5hcHBlbmQoJ29lX3J1bm1ha2UgaW5zdGFsbCVzJyAlIG1ha2VhcmdzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmdW5jLmFwcGVuZCgnIyBOT1RFOiB1bmFibGUgdG8gZGV0ZXJtaW5lIHdoYXQgdG8gcHV0IGhlcmUgLSB0aGVyZSBpcyBhIE1ha2VmaWxlIGJ1dCBubycpCisgICAgICAgICAgICAgICAgZnVuYy5hcHBlbmQoJyMgdGFyZ2V0IG5hbWVkICJpbnN0YWxsIiwgc28geW91IHdpbGwgbmVlZCB0byBkZWZpbmUgdGhpcyB5b3Vyc2VsZicpCisgICAgICAgICAgICBzZWxmLmdlbmZ1bmN0aW9uKGxpbmVzX2FmdGVyLCAnZG9faW5zdGFsbCcsIGZ1bmMpCisKKyAgICAgICAgICAgIGhhbmRsZWQuYXBwZW5kKCdidWlsZHN5c3RlbScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyMgTk9URTogbm8gTWFrZWZpbGUgZm91bmQsIHVuYWJsZSB0byBkZXRlcm1pbmUgd2hhdCBuZWVkcyB0byBiZSBkb25lJykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnJykKKyAgICAgICAgICAgIHNlbGYuZ2VuZnVuY3Rpb24obGluZXNfYWZ0ZXIsICdkb19jb25maWd1cmUnLCBbJyMgU3BlY2lmeSBhbnkgbmVlZGVkIGNvbmZpZ3VyZSBjb21tYW5kcyBoZXJlJ10pCisgICAgICAgICAgICBzZWxmLmdlbmZ1bmN0aW9uKGxpbmVzX2FmdGVyLCAnZG9fY29tcGlsZScsIFsnIyBTcGVjaWZ5IGNvbXBpbGF0aW9uIGNvbW1hbmRzIGhlcmUnXSkKKyAgICAgICAgICAgIHNlbGYuZ2VuZnVuY3Rpb24obGluZXNfYWZ0ZXIsICdkb19pbnN0YWxsJywgWycjIFNwZWNpZnkgaW5zdGFsbCBjb21tYW5kcyBoZXJlJ10pCisKKworZGVmIHJlZ2lzdGVyX3JlY2lwZV9oYW5kbGVycyhoYW5kbGVycyk6CisgICAgIyBUaGVzZSBhcmUgaW4gYSBzcGVjaWZpYyBvcmRlciBzbyB0aGF0IHRoZSByaWdodCBvbmUgaXMgZGV0ZWN0ZWQgZmlyc3QKKyAgICBoYW5kbGVycy5hcHBlbmQoQ21ha2VSZWNpcGVIYW5kbGVyKCkpCisgICAgaGFuZGxlcnMuYXBwZW5kKEF1dG90b29sc1JlY2lwZUhhbmRsZXIoKSkKKyAgICBoYW5kbGVycy5hcHBlbmQoU2NvbnNSZWNpcGVIYW5kbGVyKCkpCisgICAgaGFuZGxlcnMuYXBwZW5kKFFtYWtlUmVjaXBlSGFuZGxlcigpKQorICAgIGhhbmRsZXJzLmFwcGVuZChNYWtlZmlsZVJlY2lwZUhhbmRsZXIoKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfYnVpbGRzeXNfcHl0aG9uLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9idWlsZHN5c19weXRob24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBhZjJhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfYnVpbGRzeXNfcHl0aG9uLnB5CkBAIC0wLDAgKzEsNzE2IEBACisjIFJlY2lwZSBjcmVhdGlvbiB0b29sIC0gY3JlYXRlIGJ1aWxkIHN5c3RlbSBoYW5kbGVyIGZvciBweXRob24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE1IE1lbnRvciBHcmFwaGljcyBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGFzdAoraW1wb3J0IGNvZGVjcworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfcHkKK2ltcG9ydCBlbWFpbAoraW1wb3J0IGltcAoraW1wb3J0IGdsb2IKK2ltcG9ydCBpdGVydG9vbHMKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN5cworaW1wb3J0IHN1YnByb2Nlc3MKK2Zyb20gcmVjaXBldG9vbC5jcmVhdGUgaW1wb3J0IFJlY2lwZUhhbmRsZXIKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3JlY2lwZXRvb2wnKQorCit0aW5mb2lsID0gTm9uZQorCisKK2RlZiB0aW5mb2lsX2luaXQoaW5zdGFuY2UpOgorICAgIGdsb2JhbCB0aW5mb2lsCisgICAgdGluZm9pbCA9IGluc3RhbmNlCisKKworY2xhc3MgUHl0aG9uUmVjaXBlSGFuZGxlcihSZWNpcGVIYW5kbGVyKToKKyAgICBiYXNlX3BrZ2RlcHMgPSBbJ3B5dGhvbi1jb3JlJ10KKyAgICBleGNsdWRlZF9wa2dkZXBzID0gWydweXRob24tZGJnJ10KKyAgICAjIG9zLnBhdGggaXMgcHJvdmlkZWQgYnkgcHl0aG9uLWNvcmUKKyAgICBhc3N1bWVfcHJvdmlkZWQgPSBbJ2J1aWx0aW5zJywgJ29zLnBhdGgnXQorICAgICMgQXNzdW1lcyB0aGF0IHRoZSBob3N0IHB5dGhvbiBidWlsdGluX21vZHVsZV9uYW1lcyBpcyBzYW5lIGZvciB0YXJnZXQgdG9vCisgICAgYXNzdW1lX3Byb3ZpZGVkID0gYXNzdW1lX3Byb3ZpZGVkICsgbGlzdChzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXMpCisKKyAgICBiYnZhcl9tYXAgPSB7CisgICAgICAgICdOYW1lJzogJ1BOJywKKyAgICAgICAgJ1ZlcnNpb24nOiAnUFYnLAorICAgICAgICAnSG9tZS1wYWdlJzogJ0hPTUVQQUdFJywKKyAgICAgICAgJ1N1bW1hcnknOiAnU1VNTUFSWScsCisgICAgICAgICdEZXNjcmlwdGlvbic6ICdERVNDUklQVElPTicsCisgICAgICAgICdMaWNlbnNlJzogJ0xJQ0VOU0UnLAorICAgICAgICAnUmVxdWlyZXMnOiAnUkRFUEVORFNfJHtQTn0nLAorICAgICAgICAnUHJvdmlkZXMnOiAnUlBST1ZJREVTXyR7UE59JywKKyAgICAgICAgJ09ic29sZXRlcyc6ICdSUkVQTEFDRVNfJHtQTn0nLAorICAgIH0KKyAgICAjIFBOL1BWIGFyZSBhbHJlYWR5IHNldCBieSByZWNpcGV0b29sIGNvcmUgJiBkZXNjIGNhbiBiZSBleHRyZW1lbHkgbG9uZworICAgIGV4Y2x1ZGVkX2ZpZWxkcyA9IFsKKyAgICAgICAgJ05hbWUnLAorICAgICAgICAnVmVyc2lvbicsCisgICAgICAgICdEZXNjcmlwdGlvbicsCisgICAgXQorICAgIHNldHVwX3BhcnNlX21hcCA9IHsKKyAgICAgICAgJ1VybCc6ICdIb21lLXBhZ2UnLAorICAgICAgICAnQ2xhc3NpZmllcnMnOiAnQ2xhc3NpZmllcicsCisgICAgICAgICdEZXNjcmlwdGlvbic6ICdTdW1tYXJ5JywKKyAgICB9CisgICAgc2V0dXBhcmdfbWFwID0geworICAgICAgICAnSG9tZS1wYWdlJzogJ3VybCcsCisgICAgICAgICdDbGFzc2lmaWVyJzogJ2NsYXNzaWZpZXJzJywKKyAgICAgICAgJ1N1bW1hcnknOiAnZGVzY3JpcHRpb24nLAorICAgICAgICAnRGVzY3JpcHRpb24nOiAnbG9uZy1kZXNjcmlwdGlvbicsCisgICAgfQorICAgICMgVmFsdWVzIHdoaWNoIGFyZSBsaXN0cywgdXNlZCBieSB0aGUgc2V0dXAucHkgYXJndW1lbnQgYmFzZWQgbWV0YWRhdGEKKyAgICAjIGV4dHJhY3Rpb24gbWV0aG9kLCB0byBkZXRlcm1pbmUgaG93IHRvIHByb2Nlc3MgdGhlIHNldHVwLnB5IG91dHB1dC4KKyAgICBzZXR1cGFyZ19saXN0X2ZpZWxkcyA9IFsKKyAgICAgICAgJ0NsYXNzaWZpZXInLAorICAgICAgICAnUmVxdWlyZXMnLAorICAgICAgICAnUHJvdmlkZXMnLAorICAgICAgICAnT2Jzb2xldGVzJywKKyAgICAgICAgJ1BsYXRmb3JtJywKKyAgICAgICAgJ1N1cHBvcnRlZC1QbGF0Zm9ybScsCisgICAgXQorICAgIHNldHVwYXJnX211bHRpX2xpbmVfdmFsdWVzID0gWydEZXNjcmlwdGlvbiddCisgICAgcmVwbGFjZW1lbnRzID0gWworICAgICAgICAoJ0xpY2Vuc2UnLCByJyAnLCAnLScpLAorICAgICAgICAoJ0xpY2Vuc2UnLCByJy1MaWNlbnNlJCcsICcnKSwKKyAgICAgICAgKCdMaWNlbnNlJywgcideVU5LTk9XTiQnLCAnJyksCisKKyAgICAgICAgIyBSZW1vdmUgY3VycmVudGx5IHVuaGFuZGxlZCB2ZXJzaW9uIG51bWJlcnMgZnJvbSB0aGVzZSB2YXJpYWJsZXMKKyAgICAgICAgKCdSZXF1aXJlcycsIHInICpcKFteKV0qXCknLCAnJyksCisgICAgICAgICgnUHJvdmlkZXMnLCByJyAqXChbXildKlwpJywgJycpLAorICAgICAgICAoJ09ic29sZXRlcycsIHInICpcKFteKV0qXCknLCAnJyksCisgICAgICAgICgnSW5zdGFsbC1yZXF1aXJlcycsIHInXihbXj48PSBdKykuKicsIHInXDEnKSwKKyAgICAgICAgKCdFeHRyYXMtcmVxdWlyZScsIHInXihbXj48PSBdKykuKicsIHInXDEnKSwKKyAgICAgICAgKCdUZXN0cy1yZXF1aXJlJywgcideKFtePjw9IF0rKS4qJywgcidcMScpLAorCisgICAgICAgICMgUmVtb3ZlIHVuaGFuZGxlZCBkZXBlbmRlbmN5IG9uIHBhcnRpY3VsYXIgZmVhdHVyZXMgKGUuZy4gZm9vW1BERl0pCisgICAgICAgICgnSW5zdGFsbC1yZXF1aXJlcycsIHInXFtbXlxdXStcXSQnLCAnJyksCisgICAgXQorCisgICAgY2xhc3NpZmllcl9saWNlbnNlX21hcCA9IHsKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEFjYWRlbWljIEZyZWUgTGljZW5zZSAoQUZMKSc6ICdBRkwnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UnOiAnQXBhY2hlJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEFwcGxlIFB1YmxpYyBTb3VyY2UgTGljZW5zZSc6ICdBUFNMJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEFydGlzdGljIExpY2Vuc2UnOiAnQXJ0aXN0aWMnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogQXR0cmlidXRpb24gQXNzdXJhbmNlIExpY2Vuc2UnOiAnQUFMJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEJTRCBMaWNlbnNlJzogJ0JTRCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBDb21tb24gUHVibGljIExpY2Vuc2UnOiAnQ1BMJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEVpZmZlbCBGb3J1bSBMaWNlbnNlJzogJ0VGTCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBFdXJvcGVhbiBVbmlvbiBQdWJsaWMgTGljZW5jZSAxLjAgKEVVUEwgMS4wKSc6ICdFVVBMLTEuMCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBFdXJvcGVhbiBVbmlvbiBQdWJsaWMgTGljZW5jZSAxLjEgKEVVUEwgMS4xKSc6ICdFVVBMLTEuMScsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjMgb3IgbGF0ZXIgKEFHUEx2MyspJzogJ0FHUEwtMy4wKycsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjMnOiAnQUdQTC0zLjAnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIChGREwpJzogJ0dGREwnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCknOiAnR1BMJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyIChHUEx2MiknOiAnR1BMLTIuMCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MiBvciBsYXRlciAoR1BMdjIrKSc6ICdHUEwtMi4wKycsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MyAoR1BMdjMpJzogJ0dQTC0zLjAnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjMgb3IgbGF0ZXIgKEdQTHYzKyknOiAnR1BMLTMuMCsnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyIChMR1BMdjIpJzogJ0xHUEwtMi4wJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MiBvciBsYXRlciAoTEdQTHYyKyknOiAnTEdQTC0yLjArJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MyAoTEdQTHYzKSc6ICdMR1BMLTMuMCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjMgb3IgbGF0ZXIgKExHUEx2MyspJzogJ0xHUEwtMy4wKycsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBHTlUgTGlicmFyeSBvciBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoTEdQTCknOiAnTEdQTCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBJQk0gUHVibGljIExpY2Vuc2UnOiAnSVBMJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IElTQyBMaWNlbnNlIChJU0NMKSc6ICdJU0MnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogSW50ZWwgT3BlbiBTb3VyY2UgTGljZW5zZSc6ICdJbnRlbCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBKYWJiZXIgT3BlbiBTb3VyY2UgTGljZW5zZSc6ICdKYWJiZXInLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogTUlUIExpY2Vuc2UnOiAnTUlUJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE1JVFJFIENvbGxhYm9yYXRpdmUgVmlydHVhbCBXb3Jrc3BhY2UgTGljZW5zZSAoQ1ZXKSc6ICdDVldMJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE1vdG9zb3RvIExpY2Vuc2UnOiAnTW90b3NvdG8nLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogTW96aWxsYSBQdWJsaWMgTGljZW5zZSAxLjAgKE1QTCknOiAnTVBMLTEuMCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIDEuMSAoTVBMIDEuMSknOiAnTVBMLTEuMScsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIDIuMCAoTVBMIDIuMCknOiAnTVBMLTIuMCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBOZXRoYWNrIEdlbmVyYWwgUHVibGljIExpY2Vuc2UnOiAnTkdQTCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBOb2tpYSBPcGVuIFNvdXJjZSBMaWNlbnNlJzogJ05va2lhJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE9wZW4gR3JvdXAgVGVzdCBTdWl0ZSBMaWNlbnNlJzogJ09HVFNMJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IFB5dGhvbiBMaWNlbnNlIChDTlJJIFB5dGhvbiBMaWNlbnNlKSc6ICdDTlJJLVB5dGhvbicsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBMaWNlbnNlJzogJ1BTRicsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBRdCBQdWJsaWMgTGljZW5zZSAoUVBMKSc6ICdRUEwnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogUmljb2ggU291cmNlIENvZGUgUHVibGljIExpY2Vuc2UnOiAnUlNDUEwnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogU2xlZXB5Y2F0IExpY2Vuc2UnOiAnU2xlZXB5Y2F0JywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IFN1biBJbmR1c3RyeSBTdGFuZGFyZHMgU291cmNlIExpY2Vuc2UgKFNJU1NMKSc6ICctLSAgU3VuIEluZHVzdHJ5IFN0YW5kYXJkcyBTb3VyY2UgTGljZW5zZSAoU0lTU0wpJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IFN1biBQdWJsaWMgTGljZW5zZSc6ICdTUEwnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogVW5pdmVyc2l0eSBvZiBJbGxpbm9pcy9OQ1NBIE9wZW4gU291cmNlIExpY2Vuc2UnOiAnTkNTQScsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBWb3ZpZGEgU29mdHdhcmUgTGljZW5zZSAxLjAnOiAnVlNMLTEuMCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBXM0MgTGljZW5zZSc6ICdXM0MnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogWC5OZXQgTGljZW5zZSc6ICdYbmV0JywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IFpvcGUgUHVibGljIExpY2Vuc2UnOiAnWlBMJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IHpsaWIvbGlicG5nIExpY2Vuc2UnOiAnWmxpYicsCisgICAgfQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcHJvY2VzcyhzZWxmLCBzcmN0cmVlLCBjbGFzc2VzLCBsaW5lc19iZWZvcmUsIGxpbmVzX2FmdGVyLCBoYW5kbGVkKToKKyAgICAgICAgaWYgJ2J1aWxkc3lzdGVtJyBpbiBoYW5kbGVkOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgbm90IFJlY2lwZUhhbmRsZXIuY2hlY2tmaWxlcyhzcmN0cmVlLCBbJ3NldHVwLnB5J10pOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBzZXR1cC5weSBpcyBhbHdheXMgcGFyc2VkIHRvIGdldCBhdCBjZXJ0YWluIHJlcXVpcmVkIGluZm9ybWF0aW9uLCBzdWNoIGFzCisgICAgICAgICMgZGlzdHV0aWxzIHZzIHNldHVwdG9vbHMKKyAgICAgICAgIworICAgICAgICAjIElmIGVnZyBpbmZvIGlzIGF2YWlsYWJsZSwgd2UgdXNlIGl0IGZvciBib3RoIGl0cyBQS0ctSU5GTyBtZXRhZGF0YQorICAgICAgICAjIGFuZCBmb3IgaXRzIHJlcXVpcmVzLnR4dCBmb3IgaW5zdGFsbF9yZXF1aXJlcy4KKyAgICAgICAgIyBJZiBQS0ctSU5GTyBpcyBhdmFpbGFibGUgYnV0IG5vIGVnZyBpbmZvIGlzLCB3ZSB1c2UgdGhhdCBmb3IgbWV0YWRhdGEgaW4gcHJlZmVyZW5jZSB0bworICAgICAgICAjIHRoZSBwYXJzZWQgc2V0dXAucHksIGJ1dCB1c2UgdGhlIGluc3RhbGxfcmVxdWlyZXMgaW5mbyBmcm9tIHRoZQorICAgICAgICAjIHBhcnNlZCBzZXR1cC5weS4KKworICAgICAgICBzZXR1cHNjcmlwdCA9IG9zLnBhdGguam9pbihzcmN0cmVlLCAnc2V0dXAucHknKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZXR1cF9pbmZvLCB1c2VzX3NldHVwdG9vbHMsIHNldHVwX25vbl9saXRlcmFscywgZXh0ZW5zaW9ucyA9IHNlbGYucGFyc2Vfc2V0dXBfcHkoc2V0dXBzY3JpcHQpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCJGYWlsZWQgdG8gcGFyc2Ugc2V0dXAucHkiKQorICAgICAgICAgICAgc2V0dXBfaW5mbywgdXNlc19zZXR1cHRvb2xzLCBzZXR1cF9ub25fbGl0ZXJhbHMsIGV4dGVuc2lvbnMgPSB7fSwgVHJ1ZSwgW10sIFtdCisKKyAgICAgICAgZWdnaW5mbyA9IGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oc3JjdHJlZSwgJyouZWdnLWluZm8nKSkKKyAgICAgICAgaWYgZWdnaW5mbzoKKyAgICAgICAgICAgIGluZm8gPSBzZWxmLmdldF9wa2dpbmZvKG9zLnBhdGguam9pbihlZ2dpbmZvWzBdLCAnUEtHLUlORk8nKSkKKyAgICAgICAgICAgIHJlcXVpcmVzX3R4dCA9IG9zLnBhdGguam9pbihlZ2dpbmZvWzBdLCAncmVxdWlyZXMudHh0JykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHJlcXVpcmVzX3R4dCk6CisgICAgICAgICAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihyZXF1aXJlc190eHQpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGluc3RfcmVxID0gW10KKyAgICAgICAgICAgICAgICAgICAgZXh0cmFzX3JlcSA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxpc3QpCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfZmVhdHVyZSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1snKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2ZlYXR1cmUgPSBsaW5lWzE6LTFdCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGN1cnJlbnRfZmVhdHVyZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYXNfcmVxW2N1cnJlbnRfZmVhdHVyZV0uYXBwZW5kKGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RfcmVxLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgICAgICAgICBpbmZvWydJbnN0YWxsLXJlcXVpcmVzJ10gPSBpbnN0X3JlcQorICAgICAgICAgICAgICAgICAgICBpbmZvWydFeHRyYXMtcmVxdWlyZSddID0gZXh0cmFzX3JlcQorICAgICAgICBlbGlmIFJlY2lwZUhhbmRsZXIuY2hlY2tmaWxlcyhzcmN0cmVlLCBbJ1BLRy1JTkZPJ10pOgorICAgICAgICAgICAgaW5mbyA9IHNlbGYuZ2V0X3BrZ2luZm8ob3MucGF0aC5qb2luKHNyY3RyZWUsICdQS0ctSU5GTycpKQorCisgICAgICAgICAgICBpZiBzZXR1cF9pbmZvOgorICAgICAgICAgICAgICAgIGlmICdJbnN0YWxsLXJlcXVpcmVzJyBpbiBzZXR1cF9pbmZvOgorICAgICAgICAgICAgICAgICAgICBpbmZvWydJbnN0YWxsLXJlcXVpcmVzJ10gPSBzZXR1cF9pbmZvWydJbnN0YWxsLXJlcXVpcmVzJ10KKyAgICAgICAgICAgICAgICBpZiAnRXh0cmFzLXJlcXVpcmUnIGluIHNldHVwX2luZm86CisgICAgICAgICAgICAgICAgICAgIGluZm9bJ0V4dHJhcy1yZXF1aXJlJ10gPSBzZXR1cF9pbmZvWydFeHRyYXMtcmVxdWlyZSddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZXR1cF9pbmZvOgorICAgICAgICAgICAgICAgIGluZm8gPSBzZXR1cF9pbmZvCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGluZm8gPSBzZWxmLmdldF9zZXR1cF9hcmdzX2luZm8oc2V0dXBzY3JpcHQpCisKKyAgICAgICAgc2VsZi5hcHBseV9pbmZvX3JlcGxhY2VtZW50cyhpbmZvKQorCisgICAgICAgIGlmIHVzZXNfc2V0dXB0b29sczoKKyAgICAgICAgICAgIGNsYXNzZXMuYXBwZW5kKCdzZXR1cHRvb2xzJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNsYXNzZXMuYXBwZW5kKCdkaXN0dXRpbHMnKQorCisgICAgICAgIGlmICdDbGFzc2lmaWVyJyBpbiBpbmZvOgorICAgICAgICAgICAgbGljZW5zZXMgPSBbXQorICAgICAgICAgICAgZm9yIGNsYXNzaWZpZXIgaW4gaW5mb1snQ2xhc3NpZmllciddOgorICAgICAgICAgICAgICAgIGlmIGNsYXNzaWZpZXIgaW4gc2VsZi5jbGFzc2lmaWVyX2xpY2Vuc2VfbWFwOgorICAgICAgICAgICAgICAgICAgICBsaWNlbnNlID0gc2VsZi5jbGFzc2lmaWVyX2xpY2Vuc2VfbWFwW2NsYXNzaWZpZXJdCisgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2VzLmFwcGVuZChsaWNlbnNlKQorCisgICAgICAgICAgICBpZiBsaWNlbnNlczoKKyAgICAgICAgICAgICAgICBpbmZvWydMaWNlbnNlJ10gPSAnICYgJy5qb2luKGxpY2Vuc2VzKQorCisKKyAgICAgICAgIyBNYXAgUEtHLUlORk8gJiBzZXR1cC5weSBmaWVsZHMgdG8gYml0YmFrZSB2YXJpYWJsZXMKKyAgICAgICAgYmJpbmZvID0ge30KKyAgICAgICAgZm9yIGZpZWxkLCB2YWx1ZXMgaW4gaW5mby5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGZpZWxkIGluIHNlbGYuZXhjbHVkZWRfZmllbGRzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGZpZWxkIG5vdCBpbiBzZWxmLmJidmFyX21hcDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlcywgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZXMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdmFsdWUgPSAnICcuam9pbihzdHIodikgZm9yIHYgaW4gdmFsdWVzIGlmIHYpCisKKyAgICAgICAgICAgIGJidmFyID0gc2VsZi5iYnZhcl9tYXBbZmllbGRdCisgICAgICAgICAgICBpZiBiYnZhciBub3QgaW4gYmJpbmZvIGFuZCB2YWx1ZToKKyAgICAgICAgICAgICAgICBiYmluZm9bYmJ2YXJdID0gdmFsdWUKKworICAgICAgICBjb21tZW50X2xpY19saW5lID0gTm9uZQorICAgICAgICBmb3IgcG9zLCBsaW5lIGluIGVudW1lcmF0ZShsaXN0KGxpbmVzX2JlZm9yZSkpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcjJykgYW5kICdMSUNFTlNFJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgIGNvbW1lbnRfbGljX2xpbmUgPSBwb3MKKyAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCdMSUNFTlNFID0nKSBhbmQgJ0xJQ0VOU0UnIGluIGJiaW5mbzoKKyAgICAgICAgICAgICAgICBpZiBsaW5lIGluICgnTElDRU5TRSA9ICJVbmtub3duIicsICdMSUNFTlNFID0gIkNMT1NFRCInKToKKyAgICAgICAgICAgICAgICAgICAgbGluZXNfYmVmb3JlW3Bvc10gPSAnTElDRU5TRSA9ICJ7fSInLmZvcm1hdChiYmluZm9bJ0xJQ0VOU0UnXSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZSA9PSAnTElDRU5TRSA9ICJDTE9TRUQiJyBhbmQgY29tbWVudF9saWNfbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzX2JlZm9yZVtjb21tZW50X2xpY19saW5lOnBvc10gPSBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgV0FSTklORzogdGhlIGZvbGxvd2luZyBMSUNFTlNFIHZhbHVlIGlzIGEgYmVzdCBndWVzcyAtIGl0IGlzIHlvdXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIHJlc3BvbnNpYmlsaXR5IHRvIHZlcmlmeSB0aGF0IHRoZSB2YWx1ZSBpcyBjb21wbGV0ZSBhbmQgY29ycmVjdC4nCisgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgZGVsIGJiaW5mb1snTElDRU5TRSddCisKKyAgICAgICAgc3JjX3VyaV9saW5lID0gTm9uZQorICAgICAgICBmb3IgcG9zLCBsaW5lIGluIGVudW1lcmF0ZShsaW5lc19iZWZvcmUpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdTUkNfVVJJID0nKToKKyAgICAgICAgICAgICAgICBzcmNfdXJpX2xpbmUgPSBwb3MKKworICAgICAgICBpZiBiYmluZm86CisgICAgICAgICAgICBtZGluZm8gPSBbJyddCisgICAgICAgICAgICBmb3IgayBpbiBzb3J0ZWQoYmJpbmZvKToKKyAgICAgICAgICAgICAgICB2ID0gYmJpbmZvW2tdCisgICAgICAgICAgICAgICAgbWRpbmZvLmFwcGVuZCgne30gPSAie30iJy5mb3JtYXQoaywgdikpCisgICAgICAgICAgICBsaW5lc19iZWZvcmVbc3JjX3VyaV9saW5lLTE6c3JjX3VyaV9saW5lLTFdID0gbWRpbmZvCisKKyAgICAgICAgbWFwcGVkX2RlcHMsIHVubWFwcGVkX2RlcHMgPSBzZWxmLnNjYW5fc2V0dXBfcHl0aG9uX2RlcHMoc3JjdHJlZSwgc2V0dXBfaW5mbywgc2V0dXBfbm9uX2xpdGVyYWxzKQorCisgICAgICAgIGV4dHJhc19yZXEgPSBzZXQoKQorICAgICAgICBpZiAnRXh0cmFzLXJlcXVpcmUnIGluIGluZm86CisgICAgICAgICAgICBleHRyYXNfcmVxID0gaW5mb1snRXh0cmFzLXJlcXVpcmUnXQorICAgICAgICAgICAgaWYgZXh0cmFzX3JlcToKKyAgICAgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyMgVGhlIGZvbGxvd2luZyBjb25maWdzICYgZGVwZW5kZW5jaWVzIGFyZSBmcm9tIHNldHVwdG9vbHMgZXh0cmFzX3JlcXVpcmUuJykKKyAgICAgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyMgVGhlc2UgZGVwZW5kZW5jaWVzIGFyZSBvcHRpb25hbCwgaGVuY2UgY2FuIGJlIGNvbnRyb2xsZWQgdmlhIFBBQ0tBR0VDT05GSUcuJykKKyAgICAgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyMgVGhlIHVwc3RyZWFtIG5hbWVzIG1heSBub3QgY29ycmVzcG9uZCBleGFjdGx5IHRvIGJpdGJha2UgcGFja2FnZSBuYW1lcy4nKQorICAgICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIycpCisgICAgICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjIFVuY29tbWVudCB0aGlzIGxpbmUgdG8gZW5hYmxlIGFsbCB0aGUgb3B0aW9uYWwgZmVhdHVyZXMuJykKKyAgICAgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyNQQUNLQUdFQ09ORklHID89ICJ7fSInLmZvcm1hdCgnICcuam9pbihrLmxvd2VyKCkgZm9yIGsgaW4gZXh0cmFzX3JlcS5pdGVya2V5cygpKSkpCisgICAgICAgICAgICAgICAgZm9yIGZlYXR1cmUsIGZlYXR1cmVfcmVxcyBpbiBleHRyYXNfcmVxLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgICAgICB1bm1hcHBlZF9kZXBzLmRpZmZlcmVuY2VfdXBkYXRlKGZlYXR1cmVfcmVxcykKKworICAgICAgICAgICAgICAgICAgICBmZWF0dXJlX3JlcV9kZXBzID0gKCdweXRob24tJyArIHIucmVwbGFjZSgnLicsICctJykubG93ZXIoKSBmb3IgciBpbiBzb3J0ZWQoZmVhdHVyZV9yZXFzKSkKKyAgICAgICAgICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCdQQUNLQUdFQ09ORklHW3t9XSA9ICIsLCx7fSInLmZvcm1hdChmZWF0dXJlLmxvd2VyKCksICcgJy5qb2luKGZlYXR1cmVfcmVxX2RlcHMpKSkKKworICAgICAgICBpbnN0X3JlcXMgPSBzZXQoKQorICAgICAgICBpZiAnSW5zdGFsbC1yZXF1aXJlcycgaW4gaW5mbzoKKyAgICAgICAgICAgIGlmIGV4dHJhc19yZXE6CisgICAgICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcnKQorICAgICAgICAgICAgaW5zdF9yZXFzID0gaW5mb1snSW5zdGFsbC1yZXF1aXJlcyddCisgICAgICAgICAgICBpZiBpbnN0X3JlcXM6CisgICAgICAgICAgICAgICAgdW5tYXBwZWRfZGVwcy5kaWZmZXJlbmNlX3VwZGF0ZShpbnN0X3JlcXMpCisKKyAgICAgICAgICAgICAgICBpbnN0X3JlcV9kZXBzID0gKCdweXRob24tJyArIHIucmVwbGFjZSgnLicsICctJykubG93ZXIoKSBmb3IgciBpbiBzb3J0ZWQoaW5zdF9yZXFzKSkKKyAgICAgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyMgV0FSTklORzogdGhlIGZvbGxvd2luZyByZGVwZW5kcyBhcmUgZnJvbSBzZXR1cHRvb2xzIGluc3RhbGxfcmVxdWlyZXMuIFRoZXNlJykKKyAgICAgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyMgdXBzdHJlYW0gbmFtZXMgbWF5IG5vdCBjb3JyZXNwb25kIGV4YWN0bHkgdG8gYml0YmFrZSBwYWNrYWdlIG5hbWVzLicpCisgICAgICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCdSREVQRU5EU18ke3tQTn19ICs9ICJ7fSInLmZvcm1hdCgnICcuam9pbihpbnN0X3JlcV9kZXBzKSkpCisKKyAgICAgICAgaWYgbWFwcGVkX2RlcHM6CisgICAgICAgICAgICBuYW1lID0gaW5mby5nZXQoJ05hbWUnKQorICAgICAgICAgICAgaWYgbmFtZSBhbmQgbmFtZVswXSBpbiBtYXBwZWRfZGVwczoKKyAgICAgICAgICAgICAgICAjIEF0dGVtcHQgdG8gYXZvaWQgc2VsZi1yZWZlcmVuY2UKKyAgICAgICAgICAgICAgICBtYXBwZWRfZGVwcy5yZW1vdmUobmFtZVswXSkKKyAgICAgICAgICAgIG1hcHBlZF9kZXBzIC09IHNldChzZWxmLmV4Y2x1ZGVkX3BrZ2RlcHMpCisgICAgICAgICAgICBpZiBpbnN0X3JlcXMgb3IgZXh0cmFzX3JlcToKKyAgICAgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJycpCisgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyMgV0FSTklORzogdGhlIGZvbGxvd2luZyByZGVwZW5kcyBhcmUgZGV0ZXJtaW5lZCB0aHJvdWdoIGJhc2ljIGFuYWx5c2lzIG9mIHRoZScpCisgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyMgcHl0aG9uIHNvdXJjZXMsIGFuZCBtaWdodCBub3QgYmUgMTAwJSBhY2N1cmF0ZS4nKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCdSREVQRU5EU18ke3tQTn19ICs9ICJ7fSInLmZvcm1hdCgnICcuam9pbihzb3J0ZWQobWFwcGVkX2RlcHMpKSkpCisKKyAgICAgICAgdW5tYXBwZWRfZGVwcyAtPSBzZXQoZXh0ZW5zaW9ucykKKyAgICAgICAgdW5tYXBwZWRfZGVwcyAtPSBzZXQoc2VsZi5hc3N1bWVfcHJvdmlkZWQpCisgICAgICAgIGlmIHVubWFwcGVkX2RlcHM6CisgICAgICAgICAgICBpZiBtYXBwZWRfZGVwczoKKyAgICAgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJycpCisgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyMgV0FSTklORzogV2Ugd2VyZSB1bmFibGUgdG8gbWFwIHRoZSBmb2xsb3dpbmcgcHl0aG9uIHBhY2thZ2UvbW9kdWxlJykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBkZXBlbmRlbmNpZXMgdG8gdGhlIGJpdGJha2UgcGFja2FnZXMgd2hpY2ggaW5jbHVkZSB0aGVtOicpCisgICAgICAgICAgICBsaW5lc19hZnRlci5leHRlbmQoJyMgICAge30nLmZvcm1hdChkKSBmb3IgZCBpbiBzb3J0ZWQodW5tYXBwZWRfZGVwcykpCisKKyAgICAgICAgaGFuZGxlZC5hcHBlbmQoJ2J1aWxkc3lzdGVtJykKKworICAgIGRlZiBnZXRfcGtnaW5mbyhzZWxmLCBwa2dpbmZvX2ZuKToKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX2ZpbGUob3Blbihwa2dpbmZvX2ZuLCAncicpKQorICAgICAgICBtc2dpbmZvID0ge30KKyAgICAgICAgZm9yIGZpZWxkIGluIG1zZy5rZXlzKCk6CisgICAgICAgICAgICB2YWx1ZXMgPSBtc2cuZ2V0X2FsbChmaWVsZCkKKyAgICAgICAgICAgIGlmIGxlbih2YWx1ZXMpID09IDE6CisgICAgICAgICAgICAgICAgbXNnaW5mb1tmaWVsZF0gPSB2YWx1ZXNbMF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbXNnaW5mb1tmaWVsZF0gPSB2YWx1ZXMKKyAgICAgICAgcmV0dXJuIG1zZ2luZm8KKworICAgIGRlZiBwYXJzZV9zZXR1cF9weShzZWxmLCBzZXR1cHNjcmlwdD0nLi9zZXR1cC5weScpOgorICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHNldHVwc2NyaXB0KSBhcyBmOgorICAgICAgICAgICAgaW5mbywgaW1wb3J0ZWRfbW9kdWxlcywgbm9uX2xpdGVyYWxzLCBleHRlbnNpb25zID0gZ2F0aGVyX3NldHVwX2luZm8oZikKKworICAgICAgICBkZWYgX21hcChrZXkpOgorICAgICAgICAgICAga2V5ID0ga2V5LnJlcGxhY2UoJ18nLCAnLScpCisgICAgICAgICAgICBrZXkgPSBrZXlbMF0udXBwZXIoKSArIGtleVsxOl0KKyAgICAgICAgICAgIGlmIGtleSBpbiBzZWxmLnNldHVwX3BhcnNlX21hcDoKKyAgICAgICAgICAgICAgICBrZXkgPSBzZWxmLnNldHVwX3BhcnNlX21hcFtrZXldCisgICAgICAgICAgICByZXR1cm4ga2V5CisKKyAgICAgICAgIyBOYWl2ZSBtYXBwaW5nIG9mIHNldHVwKCkgYXJndW1lbnRzIHRvIFBLRy1JTkZPIGZpZWxkIG5hbWVzCisgICAgICAgIGZvciBkIGluIFtpbmZvLCBub25fbGl0ZXJhbHNdOgorICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZC5pdGVtcygpOgorICAgICAgICAgICAgICAgIG5ld19rZXkgPSBfbWFwKGtleSkKKyAgICAgICAgICAgICAgICBpZiBuZXdfa2V5ICE9IGtleToKKyAgICAgICAgICAgICAgICAgICAgZGVsIGRba2V5XQorICAgICAgICAgICAgICAgICAgICBkW25ld19rZXldID0gdmFsdWUKKworICAgICAgICByZXR1cm4gaW5mbywgJ3NldHVwdG9vbHMnIGluIGltcG9ydGVkX21vZHVsZXMsIG5vbl9saXRlcmFscywgZXh0ZW5zaW9ucworCisgICAgZGVmIGdldF9zZXR1cF9hcmdzX2luZm8oc2VsZiwgc2V0dXBzY3JpcHQ9Jy4vc2V0dXAucHknKToKKyAgICAgICAgY21kID0gWydweXRob24nLCBzZXR1cHNjcmlwdF0KKyAgICAgICAgaW5mbyA9IHt9CisgICAgICAgIGtleXMgPSBzZXQoc2VsZi5iYnZhcl9tYXAua2V5cygpKQorICAgICAgICBrZXlzIHw9IHNldChzZWxmLnNldHVwYXJnX2xpc3RfZmllbGRzKQorICAgICAgICBrZXlzIHw9IHNldChzZWxmLnNldHVwYXJnX211bHRpX2xpbmVfdmFsdWVzKQorICAgICAgICBncm91cGVkX2tleXMgPSBpdGVydG9vbHMuZ3JvdXBieShrZXlzLCBsYW1iZGEgazogKGsgaW4gc2VsZi5zZXR1cGFyZ19saXN0X2ZpZWxkcywgayBpbiBzZWxmLnNldHVwYXJnX211bHRpX2xpbmVfdmFsdWVzKSkKKyAgICAgICAgZm9yIGluZGV4LCBrZXlzIGluIGdyb3VwZWRfa2V5czoKKyAgICAgICAgICAgIGlmIGluZGV4ID09IChUcnVlLCBGYWxzZSk6CisgICAgICAgICAgICAgICAgIyBTcGxpdGxpbmVzIG91dHB1dCBmb3IgZWFjaCBhcmcgYXMgYSBsaXN0IHZhbHVlCisgICAgICAgICAgICAgICAgZm9yIGtleSBpbiBrZXlzOgorICAgICAgICAgICAgICAgICAgICBhcmcgPSBzZWxmLnNldHVwYXJnX21hcC5nZXQoa2V5LCBrZXkubG93ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgYXJnX2luZm8gPSBzZWxmLnJ1bl9jb21tYW5kKGNtZCArIFsnLS0nICsgYXJnXSwgY3dkPW9zLnBhdGguZGlybmFtZShzZXR1cHNjcmlwdCkpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1trZXldID0gW2wucnN0cmlwKCkgZm9yIGwgaW4gYXJnX2luZm8uc3BsaXRsaW5lcygpXQorICAgICAgICAgICAgZWxpZiBpbmRleCA9PSAoRmFsc2UsIFRydWUpOgorICAgICAgICAgICAgICAgICMgRW50aXJlIG91dHB1dCBmb3IgZWFjaCBhcmcKKyAgICAgICAgICAgICAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgICAgICAgICAgICAgIGFyZyA9IHNlbGYuc2V0dXBhcmdfbWFwLmdldChrZXksIGtleS5sb3dlcigpKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBhcmdfaW5mbyA9IHNlbGYucnVuX2NvbW1hbmQoY21kICsgWyctLScgKyBhcmddLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHNldHVwc2NyaXB0KSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcik6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvW2tleV0gPSBhcmdfaW5mbworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpbmZvLnVwZGF0ZShzZWxmLmdldF9zZXR1cF9ieWxpbmUobGlzdChrZXlzKSwgc2V0dXBzY3JpcHQpKQorICAgICAgICByZXR1cm4gaW5mbworCisgICAgZGVmIGdldF9zZXR1cF9ieWxpbmUoc2VsZiwgZmllbGRzLCBzZXR1cHNjcmlwdD0nLi9zZXR1cC5weScpOgorICAgICAgICBpbmZvID0ge30KKworICAgICAgICBjbWQgPSBbJ3B5dGhvbicsIHNldHVwc2NyaXB0XQorICAgICAgICBjbWQuZXh0ZW5kKCctLScgKyBzZWxmLnNldHVwYXJnX21hcC5nZXQoZiwgZi5sb3dlcigpKSBmb3IgZiBpbiBmaWVsZHMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGluZm9fbGluZXMgPSBzZWxmLnJ1bl9jb21tYW5kKGNtZCwgY3dkPW9zLnBhdGguZGlybmFtZShzZXR1cHNjcmlwdCkpLnNwbGl0bGluZXMoKQorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGxlbihmaWVsZHMpICE9IGxlbihpbmZvX2xpbmVzKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ01pc21hdGNoIGJldHdlZW4gc2V0dXAucHkgb3V0cHV0IGxpbmVzIGFuZCBudW1iZXIgb2YgZmllbGRzJykKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgICAgICBmb3IgbGluZW5vLCBsaW5lIGluIGVudW1lcmF0ZShpbmZvX2xpbmVzKToKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoKQorICAgICAgICAgICAgICAgIGluZm9bZmllbGRzW2xpbmVub11dID0gbGluZQorICAgICAgICByZXR1cm4gaW5mbworCisgICAgZGVmIGFwcGx5X2luZm9fcmVwbGFjZW1lbnRzKHNlbGYsIGluZm8pOgorICAgICAgICBmb3IgdmFyaWFibGUsIHNlYXJjaCwgcmVwbGFjZSBpbiBzZWxmLnJlcGxhY2VtZW50czoKKyAgICAgICAgICAgIGlmIHZhcmlhYmxlIG5vdCBpbiBpbmZvOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGRlZiByZXBsYWNlX3ZhbHVlKHNlYXJjaCwgcmVwbGFjZSwgdmFsdWUpOgorICAgICAgICAgICAgICAgIGlmIHJlcGxhY2UgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKHNlYXJjaCwgdmFsdWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBuZXdfdmFsdWUgPSByZS5zdWIoc2VhcmNoLCByZXBsYWNlLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgdmFsdWUgIT0gbmV3X3ZhbHVlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld192YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgICAgICAgICB2YWx1ZSA9IGluZm9bdmFyaWFibGVdCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgICAgICBuZXdfdmFsdWUgPSByZXBsYWNlX3ZhbHVlKHNlYXJjaCwgcmVwbGFjZSwgdmFsdWUpCisgICAgICAgICAgICAgICAgaWYgbmV3X3ZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGRlbCBpbmZvW3ZhcmlhYmxlXQorICAgICAgICAgICAgICAgIGVsaWYgbmV3X3ZhbHVlICE9IHZhbHVlOgorICAgICAgICAgICAgICAgICAgICBpbmZvW3ZhcmlhYmxlXSA9IG5ld192YWx1ZQorICAgICAgICAgICAgZWxpZiBoYXNhdHRyKHZhbHVlLCAnaXRlcml0ZW1zJyk6CisgICAgICAgICAgICAgICAgZm9yIGRrZXksIGR2YWx1ZSBpbiB2YWx1ZS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgbmV3X2xpc3QgPSBbXQorICAgICAgICAgICAgICAgICAgICBmb3IgcG9zLCBhX3ZhbHVlIGluIGVudW1lcmF0ZShkdmFsdWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3ZhbHVlID0gcmVwbGFjZV92YWx1ZShzZWFyY2gsIHJlcGxhY2UsIGFfdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBuZXdfdmFsdWUgaXMgbm90IE5vbmUgYW5kIG5ld192YWx1ZSAhPSB2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfbGlzdC5hcHBlbmQobmV3X3ZhbHVlKQorCisgICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlICE9IG5ld19saXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVbZGtleV0gPSBuZXdfbGlzdAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXdfbGlzdCA9IFtdCisgICAgICAgICAgICAgICAgZm9yIHBvcywgYV92YWx1ZSBpbiBlbnVtZXJhdGUodmFsdWUpOgorICAgICAgICAgICAgICAgICAgICBuZXdfdmFsdWUgPSByZXBsYWNlX3ZhbHVlKHNlYXJjaCwgcmVwbGFjZSwgYV92YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbmV3X3ZhbHVlIGlzIG5vdCBOb25lIGFuZCBuZXdfdmFsdWUgIT0gdmFsdWU6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfbGlzdC5hcHBlbmQobmV3X3ZhbHVlKQorCisgICAgICAgICAgICAgICAgaWYgdmFsdWUgIT0gbmV3X2xpc3Q6CisgICAgICAgICAgICAgICAgICAgIGluZm9bdmFyaWFibGVdID0gbmV3X2xpc3QKKworICAgIGRlZiBzY2FuX3NldHVwX3B5dGhvbl9kZXBzKHNlbGYsIHNyY3RyZWUsIHNldHVwX2luZm8sIHNldHVwX25vbl9saXRlcmFscyk6CisgICAgICAgIGlmICdQYWNrYWdlLWRpcicgaW4gc2V0dXBfaW5mbzoKKyAgICAgICAgICAgIHBhY2thZ2VfZGlyID0gc2V0dXBfaW5mb1snUGFja2FnZS1kaXInXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFja2FnZV9kaXIgPSB7fQorCisgICAgICAgIGNsYXNzIFBhY2thZ2VEaXIoZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfcHkuYnVpbGRfcHkpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhY2thZ2VfZGlyKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhY2thZ2VfZGlyID0gcGFja2FnZV9kaXIKKworICAgICAgICBwZCA9IFBhY2thZ2VEaXIocGFja2FnZV9kaXIpCisgICAgICAgIHRvX3NjYW4gPSBbXQorICAgICAgICBpZiBub3QgYW55KHYgaW4gc2V0dXBfbm9uX2xpdGVyYWxzIGZvciB2IGluIFsnUHktbW9kdWxlcycsICdTY3JpcHRzJywgJ1BhY2thZ2VzJ10pOgorICAgICAgICAgICAgaWYgJ1B5LW1vZHVsZXMnIGluIHNldHVwX2luZm86CisgICAgICAgICAgICAgICAgZm9yIG1vZHVsZSBpbiBzZXR1cF9pbmZvWydQeS1tb2R1bGVzJ106CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UsIG1vZHVsZSA9IG1vZHVsZS5yc3BsaXQoJy4nLCAxKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UsIG1vZHVsZSA9ICcuJywgbW9kdWxlCisgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9wYXRoID0gb3MucGF0aC5qb2luKHBkLmdldF9wYWNrYWdlX2RpcihwYWNrYWdlKSwgbW9kdWxlICsgJy5weScpCisgICAgICAgICAgICAgICAgICAgIHRvX3NjYW4uYXBwZW5kKG1vZHVsZV9wYXRoKQorCisgICAgICAgICAgICBpZiAnUGFja2FnZXMnIGluIHNldHVwX2luZm86CisgICAgICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gc2V0dXBfaW5mb1snUGFja2FnZXMnXToKKyAgICAgICAgICAgICAgICAgICAgdG9fc2Nhbi5hcHBlbmQocGQuZ2V0X3BhY2thZ2VfZGlyKHBhY2thZ2UpKQorCisgICAgICAgICAgICBpZiAnU2NyaXB0cycgaW4gc2V0dXBfaW5mbzoKKyAgICAgICAgICAgICAgICB0b19zY2FuLmV4dGVuZChzZXR1cF9pbmZvWydTY3JpcHRzJ10pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiU2Nhbm5pbmcgdGhlIGVudGlyZSBzb3VyY2UgdHJlZSwgYXMgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBzZXR1cCBrZXl3b3JkcyBhcmUgbm9uLWxpdGVyYWw6IHB5X21vZHVsZXMsIHNjcmlwdHMsIHBhY2thZ2VzLiIpCisKKyAgICAgICAgaWYgbm90IHRvX3NjYW46CisgICAgICAgICAgICB0b19zY2FuID0gWycuJ10KKworICAgICAgICBsb2dnZXIuaW5mbygiU2Nhbm5pbmcgcGF0aHMgZm9yIHBhY2thZ2VzICYgZGVwZW5kZW5jaWVzOiAlcyIsICcsICcuam9pbih0b19zY2FuKSkKKworICAgICAgICBwcm92aWRlZF9wYWNrYWdlcyA9IHNlbGYucGFyc2VfcGtnZGF0YV9mb3JfcHl0aG9uX3BhY2thZ2VzKCkKKyAgICAgICAgc2Nhbm5lZF9kZXBzID0gc2VsZi5zY2FuX3B5dGhvbl9kZXBlbmRlbmNpZXMoW29zLnBhdGguam9pbihzcmN0cmVlLCBwKSBmb3IgcCBpbiB0b19zY2FuXSkKKyAgICAgICAgbWFwcGVkX2RlcHMsIHVubWFwcGVkX2RlcHMgPSBzZXQoc2VsZi5iYXNlX3BrZ2RlcHMpLCBzZXQoKQorICAgICAgICBmb3IgZGVwIGluIHNjYW5uZWRfZGVwczoKKyAgICAgICAgICAgIG1hcHBlZCA9IHByb3ZpZGVkX3BhY2thZ2VzLmdldChkZXApCisgICAgICAgICAgICBpZiBtYXBwZWQ6CisgICAgICAgICAgICAgICAgbWFwcGVkX2RlcHMuYWRkKG1hcHBlZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdW5tYXBwZWRfZGVwcy5hZGQoZGVwKQorICAgICAgICByZXR1cm4gbWFwcGVkX2RlcHMsIHVubWFwcGVkX2RlcHMKKworICAgIGRlZiBzY2FuX3B5dGhvbl9kZXBlbmRlbmNpZXMoc2VsZiwgcGF0aHMpOgorICAgICAgICBkZXBzID0gc2V0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVwX291dHB1dCA9IHNlbGYucnVuX2NvbW1hbmQoWydweXRob25kZXBzJywgJy1kJ10gKyBwYXRocykKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBkZXBfb3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoKQorICAgICAgICAgICAgICAgIGRlcCwgZmlsZW5hbWUgPSBsaW5lLnNwbGl0KCdcdCcsIDEpCisgICAgICAgICAgICAgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoJy9zZXR1cC5weScpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGRlcHMuYWRkKGRlcCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBwcm92aWRlc19vdXRwdXQgPSBzZWxmLnJ1bl9jb21tYW5kKFsncHl0aG9uZGVwcycsICctcCddICsgcGF0aHMpCisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJvdmlkZXNfbGluZXMgPSAobC5yc3RyaXAoKSBmb3IgbCBpbiBwcm92aWRlc19vdXRwdXQuc3BsaXRsaW5lcygpKQorICAgICAgICAgICAgcHJvdmlkZXMgPSBzZXQobCBmb3IgbCBpbiBwcm92aWRlc19saW5lcyBpZiBsIGFuZCBsICE9ICdzZXR1cCcpCisgICAgICAgICAgICBkZXBzIC09IHByb3ZpZGVzCisKKyAgICAgICAgcmV0dXJuIGRlcHMKKworICAgIGRlZiBwYXJzZV9wa2dkYXRhX2Zvcl9weXRob25fcGFja2FnZXMoc2VsZik6CisgICAgICAgIHN1ZmZpeGVzID0gW3RbMF0gZm9yIHQgaW4gaW1wLmdldF9zdWZmaXhlcygpXQorICAgICAgICBwa2dkYXRhX2RpciA9IHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdQS0dEQVRBX0RJUicsIFRydWUpCisKKyAgICAgICAgbGRhdGEgPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmNyZWF0ZUNvcHkoKQorICAgICAgICBiYi5wYXJzZS5oYW5kbGUoJ2NsYXNzZXMvcHl0aG9uLWRpci5iYmNsYXNzJywgbGRhdGEsIFRydWUpCisgICAgICAgIHB5dGhvbl9zaXRlZGlyID0gbGRhdGEuZ2V0VmFyKCdQWVRIT05fU0lURVBBQ0tBR0VTX0RJUicsIFRydWUpCisKKyAgICAgICAgZHlubG9hZF9kaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHB5dGhvbl9zaXRlZGlyKSwgJ2xpYi1keW5sb2FkJykKKyAgICAgICAgcHl0aG9uX2RpcnMgPSBbcHl0aG9uX3NpdGVkaXIgKyBvcy5zZXAsCisgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUocHl0aG9uX3NpdGVkaXIpLCAnZGlzdC1wYWNrYWdlcycpICsgb3Muc2VwLAorICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUocHl0aG9uX3NpdGVkaXIpICsgb3Muc2VwXQorICAgICAgICBwYWNrYWdlcyA9IHt9CisgICAgICAgIGZvciBwa2dkYXRhZmlsZSBpbiBnbG9iLmdsb2IoJ3t9L3J1bnRpbWUvKicuZm9ybWF0KHBrZ2RhdGFfZGlyKSk6CisgICAgICAgICAgICBmaWxlc19pbmZvID0gTm9uZQorICAgICAgICAgICAgd2l0aCBvcGVuKHBrZ2RhdGFmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICAgICAgZmllbGQsIHZhbHVlID0gbGluZS5zcGxpdCgnOiAnLCAxKQorICAgICAgICAgICAgICAgICAgICBpZiBmaWVsZCA9PSAnRklMRVNfSU5GTyc6CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc19pbmZvID0gYXN0LmxpdGVyYWxfZXZhbCh2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZm9yIGZuIGluIGZpbGVzX2luZm8uaXRlcmtleXMoKToKKyAgICAgICAgICAgICAgICBmb3Igc3VmZml4IGluIHN1ZmZpeGVzOgorICAgICAgICAgICAgICAgICAgICBpZiBmbi5lbmRzd2l0aChzdWZmaXgpOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgZm4uc3RhcnRzd2l0aChkeW5sb2FkX2RpciArIG9zLnNlcCk6CisgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBvcy5wYXRoLmJhc2VuYW1lKGZuKQorICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCA9IGJhc2Uuc3BsaXQoJy4nLCAxKVswXQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlc1twcm92aWRlZF0gPSBvcy5wYXRoLmJhc2VuYW1lKHBrZ2RhdGFmaWxlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgZm9yIHB5dGhvbl9kaXIgaW4gcHl0aG9uX2RpcnM6CisgICAgICAgICAgICAgICAgICAgIGlmIGZuLnN0YXJ0c3dpdGgocHl0aG9uX2Rpcik6CisgICAgICAgICAgICAgICAgICAgICAgICByZWxwYXRoID0gZm5bbGVuKHB5dGhvbl9kaXIpOl0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbHN0YXJ0LCBfLCByZWxyZW1haW5pbmcgPSByZWxwYXRoLnBhcnRpdGlvbihvcy5zZXApCisgICAgICAgICAgICAgICAgICAgICAgICBpZiByZWxzdGFydC5lbmRzd2l0aCgnLmVnZycpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbHBhdGggPSByZWxyZW1haW5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UsIF8gPSBvcy5wYXRoLnNwbGl0ZXh0KHJlbHBhdGgpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICcvLmRlYnVnLycgaW4gYmFzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5iYXNlbmFtZShiYXNlKSA9PSAnX19pbml0X18nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBvcy5wYXRoLmRpcm5hbWUoYmFzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBiYXNlLnJlcGxhY2Uob3Muc2VwICsgb3Muc2VwLCBvcy5zZXApCisgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCA9IGJhc2UucmVwbGFjZShvcy5zZXAsICcuJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzW3Byb3ZpZGVkXSA9IG9zLnBhdGguYmFzZW5hbWUocGtnZGF0YWZpbGUpCisgICAgICAgIHJldHVybiBwYWNrYWdlcworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHJ1bl9jb21tYW5kKGNscywgY21kLCAqKnBvcGVuYXJncyk6CisgICAgICAgIGlmICdzdGRlcnInIG5vdCBpbiBwb3BlbmFyZ3M6CisgICAgICAgICAgICBwb3BlbmFyZ3NbJ3N0ZGVyciddID0gc3VicHJvY2Vzcy5TVERPVVQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgKipwb3BlbmFyZ3MpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJ1biBge31gOiB7fScsICcgJy5qb2luKGNtZCksIGV4YykKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBydW4gYHt9YDoge30nLCAnICcuam9pbihjbWQpLCBleGMub3V0cHV0KQorICAgICAgICAgICAgcmFpc2UKKworCitkZWYgZ2F0aGVyX3NldHVwX2luZm8oZmlsZW9iaik6CisgICAgcGFyc2VkID0gYXN0LnBhcnNlKGZpbGVvYmoucmVhZCgpLCBmaWxlb2JqLm5hbWUpCisgICAgdmlzaXRvciA9IFNldHVwU2NyaXB0VmlzaXRvcigpCisgICAgdmlzaXRvci52aXNpdChwYXJzZWQpCisKKyAgICBub25fbGl0ZXJhbHMsIGV4dGVuc2lvbnMgPSB7fSwgW10KKyAgICBmb3Iga2V5LCB2YWx1ZSBpbiB2aXNpdG9yLmtleXdvcmRzLml0ZW1zKCk6CisgICAgICAgIGlmIGtleSA9PSAnZXh0X21vZHVsZXMnOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgbGlzdCk6CisgICAgICAgICAgICAgICAgZm9yIGV4dCBpbiB2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgaWYgIChpc2luc3RhbmNlKGV4dCwgYXN0LkNhbGwpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UoZXh0LmZ1bmMsIGFzdC5OYW1lKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHQuZnVuYy5pZCA9PSAnRXh0ZW5zaW9uJyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICBub3QgaGFzX25vbl9saXRlcmFscyhleHQuYXJncykpOgorICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucy5hcHBlbmQoZXh0LmFyZ3NbMF0pCisgICAgICAgIGVsaWYgaGFzX25vbl9saXRlcmFscyh2YWx1ZSk6CisgICAgICAgICAgICBub25fbGl0ZXJhbHNba2V5XSA9IHZhbHVlCisgICAgICAgICAgICBkZWwgdmlzaXRvci5rZXl3b3Jkc1trZXldCisKKyAgICByZXR1cm4gdmlzaXRvci5rZXl3b3JkcywgdmlzaXRvci5pbXBvcnRlZF9tb2R1bGVzLCBub25fbGl0ZXJhbHMsIGV4dGVuc2lvbnMKKworCitjbGFzcyBTZXR1cFNjcmlwdFZpc2l0b3IoYXN0Lk5vZGVWaXNpdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGFzdC5Ob2RlVmlzaXRvci5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmtleXdvcmRzID0ge30KKyAgICAgICAgc2VsZi5ub25fbGl0ZXJhbHMgPSBbXQorICAgICAgICBzZWxmLmltcG9ydGVkX21vZHVsZXMgPSBzZXQoKQorCisgICAgZGVmIHZpc2l0X0V4cHIoc2VsZiwgbm9kZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZS52YWx1ZSwgYXN0LkNhbGwpIGFuZCBcCisgICAgICAgICAgIGlzaW5zdGFuY2Uobm9kZS52YWx1ZS5mdW5jLCBhc3QuTmFtZSkgYW5kIFwKKyAgICAgICAgICAgbm9kZS52YWx1ZS5mdW5jLmlkID09ICdzZXR1cCc6CisgICAgICAgICAgICBzZWxmLnZpc2l0X3NldHVwKG5vZGUudmFsdWUpCisKKyAgICBkZWYgdmlzaXRfc2V0dXAoc2VsZiwgbm9kZSk6CisgICAgICAgIGNhbGwgPSBMaXRlcmFsQXN0VHJhbnNmb3JtKCkudmlzaXQobm9kZSkKKyAgICAgICAgc2VsZi5rZXl3b3JkcyA9IGNhbGwua2V5d29yZHMKKyAgICAgICAgZm9yIGssIHYgaW4gc2VsZi5rZXl3b3Jkcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGhhc19ub25fbGl0ZXJhbHModik6CisgICAgICAgICAgICAgICBzZWxmLm5vbl9saXRlcmFscy5hcHBlbmQoaykKKworICAgIGRlZiB2aXNpdF9JbXBvcnQoc2VsZiwgbm9kZSk6CisgICAgICAgIGZvciBhbGlhcyBpbiBub2RlLm5hbWVzOgorICAgICAgICAgICAgc2VsZi5pbXBvcnRlZF9tb2R1bGVzLmFkZChhbGlhcy5uYW1lKQorCisgICAgZGVmIHZpc2l0X0ltcG9ydEZyb20oc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYuaW1wb3J0ZWRfbW9kdWxlcy5hZGQobm9kZS5tb2R1bGUpCisKKworY2xhc3MgTGl0ZXJhbEFzdFRyYW5zZm9ybShhc3QuTm9kZVRyYW5zZm9ybWVyKToKKyAgICAiIiJTaW1wbGlmeSB0aGUgYXN0IHRocm91Z2ggZXZhbHVhdGlvbiBvZiBsaXRlcmFscy4iIiIKKyAgICBleGNsdWRlZF9maWVsZHMgPSBbJ2N0eCddCisKKyAgICBkZWYgdmlzaXQoc2VsZiwgbm9kZSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG5vZGUsIGFzdC5BU1QpOgorICAgICAgICAgICAgcmV0dXJuIG5vZGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBhc3QuTm9kZVRyYW5zZm9ybWVyLnZpc2l0KHNlbGYsIG5vZGUpCisKKyAgICBkZWYgZ2VuZXJpY192aXNpdChzZWxmLCBub2RlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGFzdC5saXRlcmFsX2V2YWwobm9kZSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBmb3IgZmllbGQsIHZhbHVlIGluIGFzdC5pdGVyX2ZpZWxkcyhub2RlKToKKyAgICAgICAgICAgICAgICBpZiBmaWVsZCBpbiBzZWxmLmV4Y2x1ZGVkX2ZpZWxkczoKKyAgICAgICAgICAgICAgICAgICAgZGVsYXR0cihub2RlLCBmaWVsZCkKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgbGlzdCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGZpZWxkIGluICgna2V5d29yZHMnLCAna3dhcmdzJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfdmFsdWUgPSBkaWN0KChrdy5hcmcsIHNlbGYudmlzaXQoa3cudmFsdWUpKSBmb3Iga3cgaW4gdmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfdmFsdWUgPSBbc2VsZi52aXNpdChpKSBmb3IgaSBpbiB2YWx1ZV0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBuZXdfdmFsdWUgPSBzZWxmLnZpc2l0KHZhbHVlKQorICAgICAgICAgICAgICAgIHNldGF0dHIobm9kZSwgZmllbGQsIG5ld192YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBub2RlCisKKyAgICBkZWYgdmlzaXRfTmFtZShzZWxmLCBub2RlKToKKyAgICAgICAgaWYgaGFzYXR0cignX19idWlsdGluc19fJywgbm9kZS5pZCk6CisgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihfX2J1aWx0aW5zX18sIG5vZGUuaWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5nZW5lcmljX3Zpc2l0KG5vZGUpCisKKyAgICBkZWYgdmlzaXRfVHVwbGUoc2VsZiwgbm9kZSk6CisgICAgICAgIHJldHVybiB0dXBsZShzZWxmLnZpc2l0KHYpIGZvciB2IGluIG5vZGUuZWx0cykKKworICAgIGRlZiB2aXNpdF9MaXN0KHNlbGYsIG5vZGUpOgorICAgICAgICByZXR1cm4gW3NlbGYudmlzaXQodikgZm9yIHYgaW4gbm9kZS5lbHRzXQorCisgICAgZGVmIHZpc2l0X1NldChzZWxmLCBub2RlKToKKyAgICAgICAgcmV0dXJuIHNldChzZWxmLnZpc2l0KHYpIGZvciB2IGluIG5vZGUuZWx0cykKKworICAgIGRlZiB2aXNpdF9EaWN0KHNlbGYsIG5vZGUpOgorICAgICAgICBrZXlzID0gKHNlbGYudmlzaXQoaykgZm9yIGsgaW4gbm9kZS5rZXlzKQorICAgICAgICB2YWx1ZXMgPSAoc2VsZi52aXNpdCh2KSBmb3IgdiBpbiBub2RlLnZhbHVlcykKKyAgICAgICAgcmV0dXJuIGRpY3QoemlwKGtleXMsIHZhbHVlcykpCisKKworZGVmIGhhc19ub25fbGl0ZXJhbHModmFsdWUpOgorICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGFzdC5BU1QpOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGVsaWYgaGFzYXR0cih2YWx1ZSwgJ2l0ZXJ2YWx1ZXMnKToKKyAgICAgICAgcmV0dXJuIGFueShoYXNfbm9uX2xpdGVyYWxzKHYpIGZvciB2IGluIHZhbHVlLml0ZXJ2YWx1ZXMoKSkKKyAgICBlbGlmIGhhc2F0dHIodmFsdWUsICdfX2l0ZXJfXycpOgorICAgICAgICByZXR1cm4gYW55KGhhc19ub25fbGl0ZXJhbHModikgZm9yIHYgaW4gdmFsdWUpCisKKworZGVmIHJlZ2lzdGVyX3JlY2lwZV9oYW5kbGVycyhoYW5kbGVycyk6CisgICAgIyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGFoZWFkIG9mIHRoZSBtYWtlZmlsZSBmYWxsYmFjayBoYW5kbGVyCisgICAgaGFuZGxlcnMuaW5zZXJ0KDAsIFB5dGhvblJlY2lwZUhhbmRsZXIoKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvc2NyaXB0cGF0aC5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvc2NyaXB0cGF0aC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDAzMTdlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9zY3JpcHRwYXRoLnB5CkBAIC0wLDAgKzEsNDIgQEAKKyMgUGF0aCB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgT0UgcHl0aG9uIHNjcmlwdHMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMgQ29weXJpZ2h0IChDKSAyMDExIE1lbnRvciBHcmFwaGljcyBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAorCitkZWYgYWRkX29lX2xpYl9wYXRoKCk6CisgICAgYmFzZXBhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSArICcvLi4vLi4nKQorICAgIG5ld3BhdGggPSBiYXNlcGF0aCArICcvbWV0YS9saWInCisgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG5ld3BhdGgpCisKK2RlZiBhZGRfYml0YmFrZV9saWJfcGF0aCgpOgorICAgIGJhc2VwYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgKyAnLy4uLy4uJykKKyAgICBiaXRiYWtlcGF0aCA9IE5vbmUKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhiYXNlcGF0aCArICcvYml0YmFrZS9saWIvYmInKToKKyAgICAgICAgYml0YmFrZXBhdGggPSBiYXNlcGF0aCArICcvYml0YmFrZScKKyAgICBlbHNlOgorICAgICAgICAjIGxvb2sgZm9yIGJpdGJha2UvYmluIGRpciBpbiBQQVRICisgICAgICAgIGZvciBwdGggaW4gb3MuZW52aXJvblsnUEFUSCddLnNwbGl0KCc6Jyk6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocHRoLCAnLi4vbGliL2JiJykpOgorICAgICAgICAgICAgICAgIGJpdGJha2VwYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwdGgsICcuLicpKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBpZiBiaXRiYWtlcGF0aDoKKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIGJpdGJha2VwYXRoICsgJy9saWInKQorICAgIHJldHVybiBiaXRiYWtlcGF0aApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9zY3JpcHR1dGlscy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvc2NyaXB0dXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM2Njg4MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvc2NyaXB0dXRpbHMucHkKQEAgLTAsMCArMSw5OCBAQAorIyBTY3JpcHQgdXRpbGl0eSBmdW5jdGlvbnMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgZ2xvYgorCitkZWYgbG9nZ2VyX2NyZWF0ZShuYW1lKToKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihuYW1lKQorICAgIGxvZ2dlcmhhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQorICAgIGxvZ2dlcmhhbmRsZXIuc2V0Rm9ybWF0dGVyKGxvZ2dpbmcuRm9ybWF0dGVyKCIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpKQorICAgIGxvZ2dlci5hZGRIYW5kbGVyKGxvZ2dlcmhhbmRsZXIpCisgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICByZXR1cm4gbG9nZ2VyCisKK2RlZiBsb2dnZXJfc2V0dXBfY29sb3IobG9nZ2VyLCBjb2xvcj0nYXV0bycpOgorICAgIGZyb20gYmIubXNnIGltcG9ydCBCQkxvZ0Zvcm1hdHRlcgorICAgIGNvbnNvbGUgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc3lzLnN0ZG91dCkKKyAgICBmb3JtYXR0ZXIgPSBCQkxvZ0Zvcm1hdHRlcigiJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiKQorICAgIGNvbnNvbGUuc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKyAgICBsb2dnZXIuaGFuZGxlcnMgPSBbY29uc29sZV0KKyAgICBpZiBjb2xvciA9PSAnYWx3YXlzJyBvciAoY29sb3I9PSdhdXRvJyBhbmQgY29uc29sZS5zdHJlYW0uaXNhdHR5KCkpOgorICAgICAgICBmb3JtYXR0ZXIuZW5hYmxlX2NvbG9yKCkKKworCitkZWYgbG9hZF9wbHVnaW5zKGxvZ2dlciwgcGx1Z2lucywgcGx1Z2lucGF0aCk6CisgICAgaW1wb3J0IGltcAorCisgICAgZGVmIGxvYWRfcGx1Z2luKG5hbWUpOgorICAgICAgICBsb2dnZXIuZGVidWcoJ0xvYWRpbmcgcGx1Z2luICVzJyAlIG5hbWUpCisgICAgICAgIGZwLCBwYXRobmFtZSwgZGVzY3JpcHRpb24gPSBpbXAuZmluZF9tb2R1bGUobmFtZSwgW3BsdWdpbnBhdGhdKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gaW1wLmxvYWRfbW9kdWxlKG5hbWUsIGZwLCBwYXRobmFtZSwgZGVzY3JpcHRpb24pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBmcDoKKyAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCisKKyAgICBsb2dnZXIuZGVidWcoJ0xvYWRpbmcgcGx1Z2lucyBmcm9tICVzLi4uJyAlIHBsdWdpbnBhdGgpCisgICAgZm9yIGZuIGluIGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4ocGx1Z2lucGF0aCwgJyoucHknKSk6CisgICAgICAgIG5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoZm4pKVswXQorICAgICAgICBpZiBuYW1lICE9ICdfX2luaXRfXyc6CisgICAgICAgICAgICBwbHVnaW4gPSBsb2FkX3BsdWdpbihuYW1lKQorICAgICAgICAgICAgaWYgaGFzYXR0cihwbHVnaW4sICdwbHVnaW5faW5pdCcpOgorICAgICAgICAgICAgICAgIHBsdWdpbi5wbHVnaW5faW5pdChwbHVnaW5zKQorICAgICAgICAgICAgcGx1Z2lucy5hcHBlbmQocGx1Z2luKQorCitkZWYgZ2l0X2NvbnZlcnRfc3RhbmRhbG9uZV9jbG9uZShyZXBvZGlyKToKKyAgICAiIiJJZiBzcGVjaWZpZWQgZGlyZWN0b3J5IGlzIGEgZ2l0IHJlcG9zaXRvcnksIGVuc3VyZSBpdCdzIGEgc3RhbmRhbG9uZSBjbG9uZSIiIgorICAgIGltcG9ydCBiYi5wcm9jZXNzCisgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHJlcG9kaXIsICcuZ2l0JykpOgorICAgICAgICBhbHRlcm5hdGVzZmlsZSA9IG9zLnBhdGguam9pbihyZXBvZGlyLCAnLmdpdCcsICdvYmplY3RzJywgJ2luZm8nLCAnYWx0ZXJuYXRlcycpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGFsdGVybmF0ZXNmaWxlKToKKyAgICAgICAgICAgICMgVGhpcyB3aWxsIGhhdmUgYmVlbiBjbG9uZWQgd2l0aCAtcywgc28gd2UgbmVlZCB0byBjb252ZXJ0IGl0IHNvIG5vbmUKKyAgICAgICAgICAgICMgb2YgdGhlIGNvbnRlbnRzIGlzIHNoYXJlZAorICAgICAgICAgICAgYmIucHJvY2Vzcy5ydW4oJ2dpdCByZXBhY2sgLWEnLCBjd2Q9cmVwb2RpcikKKyAgICAgICAgICAgIG9zLnJlbW92ZShhbHRlcm5hdGVzZmlsZSkKKworZGVmIGZldGNoX3VyaShkLCB1cmksIGRlc3RkaXIsIHNyY3Jldj1Ob25lKToKKyAgICAiIiJGZXRjaCBhIFVSSSB0byBhIGxvY2FsIGRpcmVjdG9yeSIiIgorICAgIGltcG9ydCBiYi5kYXRhCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGRlc3RkaXIpCisgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgbG9jYWxkYXRhLnNldFZhcignQkJfU1RSSUNUX0NIRUNLU1VNJywgJycpCisgICAgbG9jYWxkYXRhLnNldFZhcignU1JDUkVWJywgc3JjcmV2KQorICAgIHJldCA9IChOb25lLCBOb25lKQorICAgIG9sZGRpciA9IG9zLmdldGN3ZCgpCisgICAgdHJ5OgorICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2gyLkZldGNoKFt1cmldLCBsb2NhbGRhdGEpCisgICAgICAgIGZvciB1IGluIGZldGNoZXIudWQ6CisgICAgICAgICAgICB1ZCA9IGZldGNoZXIudWRbdV0KKyAgICAgICAgICAgIHVkLmlnbm9yZV9jaGVja3N1bXMgPSBUcnVlCisgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQorICAgICAgICBmZXRjaGVyLnVucGFjayhkZXN0ZGlyKQorICAgICAgICBmb3IgdSBpbiBmZXRjaGVyLnVkOgorICAgICAgICAgICAgdWQgPSBmZXRjaGVyLnVkW3VdCisgICAgICAgICAgICBpZiB1ZC5tZXRob2QucmVjb21tZW5kc19jaGVja3N1bSh1ZCk6CisgICAgICAgICAgICAgICAgbWQ1dmFsdWUgPSBiYi51dGlscy5tZDVfZmlsZSh1ZC5sb2NhbHBhdGgpCisgICAgICAgICAgICAgICAgc2hhMjU2dmFsdWUgPSBiYi51dGlscy5zaGEyNTZfZmlsZSh1ZC5sb2NhbHBhdGgpCisgICAgICAgICAgICAgICAgcmV0ID0gKG1kNXZhbHVlLCBzaGEyNTZ2YWx1ZSkKKyAgICBmaW5hbGx5OgorICAgICAgICBvcy5jaGRpcihvbGRkaXIpCisgICAgcmV0dXJuIHJldAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvYmFzZS5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2Jhc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZjOGY1NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2Jhc2UucHkKQEAgLTAsMCArMSw0NjYgQEAKKyMKKyMgQ2hyaXMgTHVtZW5zIDxjbHVtZW5zQHJlZGhhdC5jb20+CisjCisjIENvcHlyaWdodCAyMDA2LCAyMDA3LCAyMDA4IFJlZCBIYXQsIEluYy4KKyMKKyMgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsIG1vZGlmeSwKKyMgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2LjIuICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAorIyB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlCisjIGltcGxpZWQgd2FycmFudGllcyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEKKyMgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICBBbnkgUmVkIEhhdAorIyB0cmFkZW1hcmtzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGUgc291cmNlIGNvZGUgb3IgZG9jdW1lbnRhdGlvbiBhcmUgbm90CisjIHN1YmplY3QgdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCBtYXkgb25seSBiZSB1c2VkIG9yIHJlcGxpY2F0ZWQKKyMgd2l0aCB0aGUgZXhwcmVzcyBwZXJtaXNzaW9uIG9mIFJlZCBIYXQsIEluYy4gCisjCisiIiIKK0Jhc2UgY2xhc3NlcyBmb3IgY3JlYXRpbmcgY29tbWFuZHMgYW5kIHN5bnRheCB2ZXJzaW9uIG9iamVjdC4KKworVGhpcyBtb2R1bGUgZXhwb3J0cyBzZXZlcmFsIGltcG9ydGFudCBiYXNlIGNsYXNzZXM6CisKKyAgICBCYXNlRGF0YSAtIFRoZSBiYXNlIGFic3RyYWN0IGNsYXNzIGZvciBhbGwgZGF0YSBvYmplY3RzLiAgRGF0YSBvYmplY3RzCisgICAgICAgICAgICAgICBhcmUgY29udGFpbmVkIHdpdGhpbiBhIEJhc2VIYW5kbGVyIG9iamVjdC4KKworICAgIEJhc2VIYW5kbGVyIC0gVGhlIGJhc2UgYWJzdHJhY3QgY2xhc3MgZnJvbSB3aGljaCB2ZXJzaW9uZWQga2lja3N0YXJ0CisgICAgICAgICAgICAgICAgICBoYW5kbGVyIGFyZSBkZXJpdmVkLiAgU3ViY2xhc3NlcyBvZiBCYXNlSGFuZGxlciBob2xkCisgICAgICAgICAgICAgICAgICBCYXNlRGF0YSBhbmQgS2lja3N0YXJ0Q29tbWFuZCBvYmplY3RzLgorCisgICAgRGVwcmVjYXRlZENvbW1hbmQgLSBBbiBhYnN0cmFjdCBzdWJjbGFzcyBvZiBLaWNrc3RhcnRDb21tYW5kIHRoYXQgc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICBiZSBmdXJ0aGVyIHN1YmNsYXNzZWQgYnkgdXNlcnMgb2YgdGhpcyBtb2R1bGUuICBXaGVuCisgICAgICAgICAgICAgICAgICAgICAgICBhIHN1YmNsYXNzIGlzIHVzZWQsIGEgd2FybmluZyBtZXNzYWdlIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZWQuCisKKyAgICBLaWNrc3RhcnRDb21tYW5kIC0gVGhlIGJhc2UgYWJzdHJhY3QgY2xhc3MgZm9yIGFsbCBraWNrc3RhcnQgY29tbWFuZHMuCisgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmQgb2JqZWN0cyBhcmUgY29udGFpbmVkIHdpdGhpbiBhIEJhc2VIYW5kbGVyCisgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC4KKyIiIgoraW1wb3J0IGdldHRleHQKK2dldHRleHQudGV4dGRvbWFpbigicHlraWNrc3RhcnQiKQorXyA9IGxhbWJkYSB4OiBnZXR0ZXh0LmxkZ2V0dGV4dCgicHlraWNrc3RhcnQiLCB4KQorCitpbXBvcnQgdHlwZXMKK2ltcG9ydCB3YXJuaW5ncworZnJvbSBweWtpY2tzdGFydC5lcnJvcnMgaW1wb3J0ICoKK2Zyb20gcHlraWNrc3RhcnQua28gaW1wb3J0ICoKK2Zyb20gcHlraWNrc3RhcnQucGFyc2VyIGltcG9ydCBQYWNrYWdlcworZnJvbSBweWtpY2tzdGFydC52ZXJzaW9uIGltcG9ydCB2ZXJzaW9uVG9TdHJpbmcKKworIyMjCisjIyMgQ09NTUFORFMKKyMjIworY2xhc3MgS2lja3N0YXJ0Q29tbWFuZChLaWNrc3RhcnRPYmplY3QpOgorICAgICIiIlRoZSBiYXNlIGNsYXNzIGZvciBhbGwga2lja3N0YXJ0IGNvbW1hbmRzLiAgVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcy4iIiIKKyAgICByZW1vdmVkS2V5d29yZHMgPSBbXQorICAgIHJlbW92ZWRBdHRycyA9IFtdCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eT0wLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgS2lja3N0YXJ0Q29tbWFuZCBpbnN0YW5jZS4gIFRoaXMgbWV0aG9kIG11c3QgYmUKKyAgICAgICAgICAgcHJvdmlkZWQgYnkgYWxsIHN1YmNsYXNzZXMsIGJ1dCBzdWJjbGFzc2VzIG11c3QgY2FsbAorICAgICAgICAgICBLaWNrc3RhcnRDb21tYW5kLl9faW5pdF9fIGZpcnN0LiAgSW5zdGFuY2UgYXR0cmlidXRlczoKKworICAgICAgICAgICBjdXJyZW50Q21kICAgIC0tIFRoZSBuYW1lIG9mIHRoZSBjb21tYW5kIGluIHRoZSBpbnB1dCBmaWxlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXVzZWQgdGhpcyBoYW5kbGVyIHRvIGJlIHJ1bi4KKyAgICAgICAgICAgY3VycmVudExpbmUgICAtLSBUaGUgY3VycmVudCB1bnByb2Nlc3NlZCBsaW5lIGZyb20gdGhlIGlucHV0IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGNhdXNlZCB0aGlzIGhhbmRsZXIgdG8gYmUgcnVuLgorICAgICAgICAgICBoYW5kbGVyICAgICAgIC0tIEEgcmVmZXJlbmNlIHRvIHRoZSBCYXNlSGFuZGxlciBzdWJjbGFzcyB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBpcyBjb250YWluZWQgd2l0aGluZy4gIFRoaXMgaXMgbmVlZGVkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3cgcmVmZXJlbmNpbmcgb2YgRGF0YSBvYmplY3RzLgorICAgICAgICAgICBsaW5lbm8gICAgICAgIC0tIFRoZSBjdXJyZW50IGxpbmUgbnVtYmVyIGluIHRoZSBpbnB1dCBmaWxlLgorICAgICAgICAgICB3cml0ZVByaW9yaXR5IC0tIEFuIGludGVnZXIgc3BlY2lmeWluZyB3aGVuIHRoaXMgY29tbWFuZCBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGVkIHdoZW4gaXRlcmF0aW5nIG92ZXIgYWxsIGNvbW1hbmRzJyBfX3N0cl9fCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kcy4gIFRoZSBoaWdoZXIgdGhlIG51bWJlciwgdGhlIGxhdGVyIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIHdpbGwgYmUgd3JpdHRlbi4gIEFsbCBjb21tYW5kcyB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbWUgcHJpb3JpdHkgd2lsbCBiZSB3cml0dGVuIGFscGhhYmV0aWNhbGx5LgorICAgICAgICAiIiIKKworICAgICAgICAjIFdlIGRvbid0IHdhbnQgcGVvcGxlIHVzaW5nIHRoaXMgY2xhc3MgYnkgaXRzZWxmLgorICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBLaWNrc3RhcnRDb21tYW5kOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCAiS2lja3N0YXJ0Q29tbWFuZCBpcyBhbiBhYnN0cmFjdCBjbGFzcy4iCisKKyAgICAgICAgS2lja3N0YXJ0T2JqZWN0Ll9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKworICAgICAgICBzZWxmLndyaXRlUHJpb3JpdHkgPSB3cml0ZVByaW9yaXR5CisKKyAgICAgICAgIyBUaGVzZSB3aWxsIGJlIHNldCBieSB0aGUgZGlzcGF0Y2hlci4KKyAgICAgICAgc2VsZi5jdXJyZW50Q21kID0gIiIKKyAgICAgICAgc2VsZi5jdXJyZW50TGluZSA9ICIiCisgICAgICAgIHNlbGYuaGFuZGxlciA9IE5vbmUKKyAgICAgICAgc2VsZi5saW5lbm8gPSAwCisKKyAgICAgICAgIyBJZiBhIHN1YmNsYXNzIHByb3ZpZGVzIGEgcmVtb3ZlZEtleXdvcmRzIGxpc3QsIHJlbW92ZSBhbGwgdGhlCisgICAgICAgICMgbWVtYmVycyBmcm9tIHRoZSBrd2FyZ3MgbGlzdCBiZWZvcmUgd2Ugc3RhcnQgcHJvY2Vzc2luZyBpdC4gIFRoaXMKKyAgICAgICAgIyBlbnN1cmVzIHRoYXQgc3ViY2xhc3NlcyBkb24ndCBjb250aW51ZSB0byByZWNvZ25pemUgYXJndW1lbnRzIHRoYXQKKyAgICAgICAgIyB3ZXJlIHJlbW92ZWQuCisgICAgICAgIGZvciBhcmcgaW4gZmlsdGVyKGt3YXJncy5oYXNfa2V5LCBzZWxmLnJlbW92ZWRLZXl3b3Jkcyk6CisgICAgICAgICAgICBrd2FyZ3MucG9wKGFyZykKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJTZXQgbXVsdGlwbGUgYXR0cmlidXRlcyBvbiBhIHN1YmNsYXNzIG9mIEtpY2tzdGFydENvbW1hbmQgYXQgb25jZQorICAgICAgICAgICB2aWEga2V5d29yZCBhcmd1bWVudHMuICBWYWxpZCBhdHRyaWJ1dGVzIGFyZSBhbnl0aGluZyBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgYSBzdWJjbGFzcywgYnV0IHVua25vd24gYXR0cmlidXRlcyB3aWxsIGJlIGlnbm9yZWQuCisgICAgICAgICIiIgorICAgICAgICBmb3IgKGtleSwgdmFsKSBpbiBrd2FyZ3MuaXRlbXMoKToKKyAgICAgICAgICAgICMgSWdub3JlIHNldHRpbmcgYXR0cmlidXRlcyB0aGF0IHdlcmUgcmVtb3ZlZCBpbiBhIHN1YmNsYXNzLCBhcworICAgICAgICAgICAgIyBpZiB0aGV5IHdlcmUgdW5rbm93biBhdHRyaWJ1dGVzLgorICAgICAgICAgICAgaWYga2V5IGluIHNlbGYucmVtb3ZlZEF0dHJzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGtleSwgdmFsKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIHN0cmluZyBmb3JtYXR0ZWQgZm9yIG91dHB1dCB0byBhIGtpY2tzdGFydCBmaWxlLiAgVGhpcworICAgICAgICAgICBtZXRob2QgbXVzdCBiZSBwcm92aWRlZCBieSBhbGwgc3ViY2xhc3Nlcy4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBLaWNrc3RhcnRPYmplY3QuX19zdHJfXyhzZWxmKQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJQYXJzZSB0aGUgbGlzdCBvZiBhcmdzIGFuZCBzZXQgZGF0YSBvbiB0aGUgS2lja3N0YXJ0Q29tbWFuZCBvYmplY3QuCisgICAgICAgICAgIFRoaXMgbWV0aG9kIG11c3QgYmUgcHJvdmlkZWQgYnkgYWxsIHN1YmNsYXNzZXMuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBUeXBlRXJyb3IsICJwYXJzZSgpIG5vdCBpbXBsZW1lbnRlZCBmb3IgS2lja3N0YXJ0Q29tbWFuZCIKKworICAgIGRlZiBhcHBseShzZWxmLCBpbnN0cm9vdD0iLyIpOgorICAgICAgICAiIiJXcml0ZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byB0aGUgS2lja3N0YXJ0Q29tbWFuZCBvYmplY3QuCisgICAgICAgICAgIFN1YmNsYXNzZXMgd2hpY2ggZG8gbm90IHByb3ZpZGUgdGhpcyBtZXRob2Qgd2lsbCBub3QgaGF2ZSB0aGVpcgorICAgICAgICAgICBjb25maWd1cmF0aW9uIHdyaXR0ZW4gb3V0LgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgZGF0YUxpc3Qoc2VsZik6CisgICAgICAgICIiIkZvciBjb21tYW5kcyB0aGF0IGNhbiBvY2N1ciBtdWx0aXBsZSB0aW1lcyBpbiBhIHNpbmdsZSBraWNrc3RhcnQKKyAgICAgICAgICAgZmlsZSAobGlrZSBuZXR3b3JrLCBwYXJ0LCBldGMuKSwgcmV0dXJuIHRoZSBsaXN0IHRoYXQgd2Ugc2hvdWxkCisgICAgICAgICAgIGFwcGVuZCBtb3JlIGRhdGEgb2JqZWN0cyB0by4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZGVsZXRlUmVtb3ZlZEF0dHJzKHNlbGYpOgorICAgICAgICAiIiJSZW1vdmUgYWxsIGF0dHJpYnV0ZXMgZnJvbSBzZWxmIHRoYXQgYXJlIGdpdmVuIGluIHRoZSByZW1vdmVkQXR0cnMKKyAgICAgICAgICAgbGlzdC4gIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgZnJvbSBfX2luaXRfXyBpbiBhIHN1YmNsYXNzLAorICAgICAgICAgICBidXQgb25seSBhZnRlciB0aGUgc3VwZXJjbGFzcydzIF9faW5pdF9fIG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQuCisgICAgICAgICIiIgorICAgICAgICBmb3IgYXR0ciBpbiBmaWx0ZXIobGFtYmRhIGs6IGhhc2F0dHIoc2VsZiwgayksIHNlbGYucmVtb3ZlZEF0dHJzKToKKyAgICAgICAgICAgIGRlbGF0dHIoc2VsZiwgYXR0cikKKworICAgICMgU2V0IHRoZSBjb250ZW50cyBvZiB0aGUgb3B0cyBvYmplY3QgKGFuIGluc3RhbmNlIG9mIG9wdHBhcnNlLlZhbHVlcworICAgICMgcmV0dXJuZWQgYnkgcGFyc2VfYXJncykgYXMgYXR0cmlidXRlcyBvbiB0aGUgS2lja3N0YXJ0Q29tbWFuZCBvYmplY3QuCisgICAgIyBJdCdzIHVzZWZ1bCB0byBjYWxsIHRoaXMgZnJvbSBLaWNrc3RhcnRDb21tYW5kIHN1YmNsYXNzZXMgYWZ0ZXIgcGFyc2luZworICAgICMgdGhlIGFyZ3VtZW50cy4KKyAgICBkZWYgX3NldFRvU2VsZihzZWxmLCBvcHRQYXJzZXIsIG9wdHMpOgorICAgICAgICBzZWxmLl9zZXRUb09iaihvcHRQYXJzZXIsIG9wdHMsIHNlbGYpCisKKyAgICAjIFNldHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBvcHRzIG9iamVjdCAoYW4gaW5zdGFuY2Ugb2Ygb3B0cGFyc2UuVmFsdWVzCisgICAgIyByZXR1cm5lZCBieSBwYXJzZV9hcmdzKSBhcyBhdHRyaWJ1dGVzIG9uIHRoZSBwcm92aWRlZCBvYmplY3Qgb2JqLiAgSXQncworICAgICMgdXNlZnVsIHRvIGNhbGwgdGhpcyBmcm9tIEtpY2tzdGFydENvbW1hbmQgc3ViY2xhc3NlcyB0aGF0IGhhbmRsZSBsaXN0cworICAgICMgb2Ygb2JqZWN0cyAobGlrZSBwYXJ0aXRpb25zLCBuZXR3b3JrIGRldmljZXMsIGV0Yy4pIGFuZCBuZWVkIHRvIHBvcHVsYXRlCisgICAgIyBhIERhdGEgb2JqZWN0LgorICAgIGRlZiBfc2V0VG9PYmooc2VsZiwgb3B0UGFyc2VyLCBvcHRzLCBvYmopOgorICAgICAgICBmb3Iga2V5IGluIGZpbHRlciAobGFtYmRhIGs6IGdldGF0dHIob3B0cywgaykgIT0gTm9uZSwgb3B0UGFyc2VyLmtleXMoKSk6CisgICAgICAgICAgICBzZXRhdHRyKG9iaiwga2V5LCBnZXRhdHRyKG9wdHMsIGtleSkpCisKK2NsYXNzIERlcHJlY2F0ZWRDb21tYW5kKEtpY2tzdGFydENvbW1hbmQpOgorICAgICIiIlNwZWNpZnkgdGhhdCBhIGNvbW1hbmQgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGhhcyBhbnkgZnVuY3Rpb24uCisgICAgICAgQW55IGNvbW1hbmQgdGhhdCBpcyBkZXByZWNhdGVkIHNob3VsZCBiZSBzdWJjbGFzc2VkIGZyb20gdGhpcyBjbGFzcywKKyAgICAgICBvbmx5IHNwZWNpZnlpbmcgYW4gX19pbml0X18gbWV0aG9kIHRoYXQgY2FsbHMgdGhlIHN1cGVyY2xhc3MncyBfX2luaXRfXy4KKyAgICAgICBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3cml0ZVByaW9yaXR5PU5vbmUsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICMgV2UgZG9uJ3Qgd2FudCBwZW9wbGUgdXNpbmcgdGhpcyBjbGFzcyBieSBpdHNlbGYuCisgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIEtpY2tzdGFydENvbW1hbmQ6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IsICJEZXByZWNhdGVkQ29tbWFuZCBpcyBhbiBhYnN0cmFjdCBjbGFzcy4iCisKKyAgICAgICAgIyBDcmVhdGUgYSBuZXcgRGVwcmVjYXRlZENvbW1hbmQgaW5zdGFuY2UuCisgICAgICAgIEtpY2tzdGFydENvbW1hbmQuX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eSwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICIiIlBsYWNlaG9sZGVyIHNpbmNlIERlcHJlY2F0ZWRDb21tYW5kcyBkb24ndCB3b3JrIGFueW1vcmUuIiIiCisgICAgICAgIHJldHVybiAiIgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJQcmludCBhIHdhcm5pbmcgbWVzc2FnZSBpZiB0aGUgY29tbWFuZCBpcyBzZWVuIGluIHRoZSBpbnB1dCBmaWxlLiIiIgorICAgICAgICBtYXBwaW5nID0geyJsaW5lbm8iOiBzZWxmLmxpbmVubywgImNtZCI6IHNlbGYuY3VycmVudENtZH0KKyAgICAgICAgd2FybmluZ3Mud2FybihfKCJJZ25vcmluZyBkZXByZWNhdGVkIGNvbW1hbmQgb24gbGluZSAlKGxpbmVubylzOiAgVGhlICUoY21kKXMgY29tbWFuZCBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgaGFzIGFueSBlZmZlY3QuICBJdCBtYXkgYmUgcmVtb3ZlZCBmcm9tIGZ1dHVyZSByZWxlYXNlcywgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSBmYXRhbCBlcnJvciBmcm9tIGtpY2tzdGFydC4gIFBsZWFzZSBtb2RpZnkgeW91ciBraWNrc3RhcnQgZmlsZSB0byByZW1vdmUgdGhpcyBjb21tYW5kLiIpICUgbWFwcGluZywgRGVwcmVjYXRpb25XYXJuaW5nKQorCisKKyMjIworIyMjIEhBTkRMRVJTCisjIyMKK2NsYXNzIEJhc2VIYW5kbGVyKEtpY2tzdGFydE9iamVjdCk6CisgICAgIiIiRWFjaCB2ZXJzaW9uIG9mIGtpY2tzdGFydCBzeW50YXggaXMgcHJvdmlkZWQgYnkgYSBzdWJjbGFzcyBvZiB0aGlzCisgICAgICAgY2xhc3MuICBUaGVzZSBzdWJjbGFzc2VzIGFyZSB3aGF0IHVzZXJzIHdpbGwgaW50ZXJhY3Qgd2l0aCBmb3IgcGFyc2luZywKKyAgICAgICBleHRyYWN0aW5nIGRhdGEsIGFuZCB3cml0aW5nIG91dCBraWNrc3RhcnQgZmlsZXMuICBUaGlzIGlzIGFuIGFic3RyYWN0CisgICAgICAgY2xhc3MuCisKKyAgICAgICB2ZXJzaW9uIC0tIFRoZSB2ZXJzaW9uIHRoaXMgc3ludGF4IGhhbmRsZXIgc3VwcG9ydHMuICBUaGlzIGlzIHNldCBieQorICAgICAgICAgICAgICAgICAgYSBjbGFzcyBhdHRyaWJ1dGUgb2YgYSBCYXNlSGFuZGxlciBzdWJjbGFzcyBhbmQgaXMgdXNlZCB0bworICAgICAgICAgICAgICAgICAgc2V0IHVwIHRoZSBjb21tYW5kIGRpY3QuICBJdCBpcyBmb3IgcmVhZC1vbmx5IHVzZS4KKyAgICAiIiIKKyAgICB2ZXJzaW9uID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcHBpbmc9Tm9uZSwgZGF0YU1hcHBpbmc9Tm9uZSwgY29tbWFuZFVwZGF0ZXM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZGF0YVVwZGF0ZXM9Tm9uZSwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IEJhc2VIYW5kbGVyIGluc3RhbmNlLiAgVGhpcyBtZXRob2QgbXVzdCBiZSBwcm92aWRlZCBieQorICAgICAgICAgICBhbGwgc3ViY2xhc3NlcywgYnV0IHN1YmNsYXNzZXMgbXVzdCBjYWxsIEJhc2VIYW5kbGVyLl9faW5pdF9fIGZpcnN0LgorCisgICAgICAgICAgIG1hcHBpbmcgICAgICAgICAgLS0gQSBjdXN0b20gbWFwIGZyb20gY29tbWFuZCBzdHJpbmdzIHRvIGNsYXNzZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZnVsIHdoZW4gY3JlYXRpbmcgeW91ciBvd24gaGFuZGxlciB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCBjb21tYW5kIG9iamVjdHMuICBJdCBpcyBvdGhlcndpc2UgdW51c2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHJhcmVseSBuZWVkZWQuICBJZiB5b3UgZ2l2ZSB0aGlzIGFyZ3VtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXBwaW5nIHRha2VzIHRoZSBwbGFjZSBvZiB0aGUgZGVmYXVsdCBvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc28gbXVzdCBpbmNsdWRlIGFsbCBjb21tYW5kcyB5b3Ugd2FudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29nbml6ZWQuCisgICAgICAgICAgIGRhdGFNYXBwaW5nICAgICAgLS0gVGhpcyBpcyB0aGUgc2FtZSBhcyBtYXBwaW5nLCBidXQgZm9yIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RzLiAgQWxsIHRoZSBzYW1lIGNvbW1lbnRzIGFwcGx5LgorICAgICAgICAgICBjb21tYW5kVXBkYXRlcyAgIC0tIFRoaXMgaXMgc2ltaWxhciB0byBtYXBwaW5nLCBidXQgZG9lcyBub3QgdGFrZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwbGFjZSBvZiB0aGUgZGVmYXVsdHMgZW50aXJlbHkuICBJbnN0ZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgbWFwcGluZyBpcyBhcHBsaWVkIGFmdGVyIHRoZSBkZWZhdWx0cyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVzIGl0IHdpdGgganVzdCB0aGUgY29tbWFuZHMgeW91IHdhbnQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZnkuCisgICAgICAgICAgIGRhdGFVcGRhdGVzICAgICAgLS0gVGhpcyBpcyB0aGUgc2FtZSBhcyBjb21tYW5kVXBkYXRlcywgYnV0IGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgb2JqZWN0cy4KKworCisgICAgICAgICAgIEluc3RhbmNlIGF0dHJpYnV0ZXM6CisKKyAgICAgICAgICAgY29tbWFuZHMgLS0gQSBtYXBwaW5nIGZyb20gYSBzdHJpbmcgY29tbWFuZCB0byBhIEtpY2tzdGFydENvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgc3ViY2xhc3Mgb2JqZWN0IHRoYXQgaGFuZGxlcyBpdC4gIE11bHRpcGxlIHN0cmluZ3MgY2FuCisgICAgICAgICAgICAgICAgICAgICAgIG1hcCB0byB0aGUgc2FtZSBvYmplY3QsIGJ1dCBvbmx5IG9uZSBpbnN0YW5jZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBvYmplY3Qgc2hvdWxkIGV2ZXIgZXhpc3QuICBNb3N0IHVzZXJzIHNob3VsZAorICAgICAgICAgICAgICAgICAgICAgICBuZXZlciBoYXZlIHRvIGRlYWwgd2l0aCB0aGlzIGRpcmVjdGx5LCBhcyBpdCBpcworICAgICAgICAgICAgICAgICAgICAgICBtYW5pcHVsYXRlZCBpbnRlcm5hbGx5IGFuZCBjYWxsZWQgdGhyb3VnaCBkaXNwYXRjaGVyLgorICAgICAgICAgICBjdXJyZW50TGluZSAtLSBUaGUgY3VycmVudCB1bnByb2Nlc3NlZCBsaW5lIGZyb20gdGhlIGlucHV0IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBjYXVzZWQgdGhpcyBoYW5kbGVyIHRvIGJlIHJ1bi4KKyAgICAgICAgICAgcGFja2FnZXMgLS0gQW4gaW5zdGFuY2Ugb2YgcHlraWNrc3RhcnQucGFyc2VyLlBhY2thZ2VzIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaWJlcyB0aGUgcGFja2FnZXMgc2VjdGlvbiBvZiB0aGUgaW5wdXQgZmlsZS4KKyAgICAgICAgICAgcGxhdGZvcm0gLS0gQSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgaGFyZHdhcmUgcGxhdGZvcm0sIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgICAgICAgIG5lZWRlZCBvbmx5IGJ5IHN5c3RlbS1jb25maWcta2lja3N0YXJ0LgorICAgICAgICAgICBzY3JpcHRzICAtLSBBIGxpc3Qgb2YgcHlraWNrc3RhcnQucGFyc2VyLlNjcmlwdCBpbnN0YW5jZXMsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgICAgICAgIHBvcHVsYXRlZCBieSBLaWNrc3RhcnRQYXJzZXIuYWRkU2NyaXB0IGFuZCBkZXNjcmliZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICVwcmUvJXBvc3QvJXRyYWNlYmFjayBzY3JpcHQgc2VjdGlvbiBvZiB0aGUgaW5wdXQgZmlsZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBXZSBkb24ndCB3YW50IHBlb3BsZSB1c2luZyB0aGlzIGNsYXNzIGJ5IGl0c2VsZi4KKyAgICAgICAgaWYgc2VsZi5fX2NsYXNzX18gaXMgQmFzZUhhbmRsZXI6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IsICJCYXNlSGFuZGxlciBpcyBhbiBhYnN0cmFjdCBjbGFzcy4iCisKKyAgICAgICAgS2lja3N0YXJ0T2JqZWN0Ll9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKworICAgICAgICAjIFRoaXMgaXNuJ3QgcmVhbGx5IGEgZ29vZCBwbGFjZSBmb3IgdGhlc2UsIGJ1dCBpdCdzIGJldHRlciB0aGFuCisgICAgICAgICMgZXZlcnl0aGluZyBlbHNlIEkgY2FuIHRoaW5rIG9mLgorICAgICAgICBzZWxmLnNjcmlwdHMgPSBbXQorICAgICAgICBzZWxmLnBhY2thZ2VzID0gUGFja2FnZXMoKQorICAgICAgICBzZWxmLnBsYXRmb3JtID0gIiIKKworICAgICAgICAjIFRoZXNlIHdpbGwgYmUgc2V0IGJ5IHRoZSBkaXNwYXRjaGVyLgorICAgICAgICBzZWxmLmNvbW1hbmRzID0ge30KKyAgICAgICAgc2VsZi5jdXJyZW50TGluZSA9IDAKKworICAgICAgICAjIEEgZGljdCBrZXllZCBieSBhbiBpbnRlZ2VyIHByaW9yaXR5IG51bWJlciwgd2l0aCBlYWNoIHZhbHVlIGJlaW5nIGEKKyAgICAgICAgIyBsaXN0IG9mIEtpY2tzdGFydENvbW1hbmQgc3ViY2xhc3Nlcy4gIFRoaXMgZGljdCBpcyBtYWludGFpbmVkIGJ5CisgICAgICAgICMgcmVnaXN0ZXJDb21tYW5kIGFuZCB1c2VkIGluIF9fc3RyX18uICBObyBvbmUgZWxzZSBzaG91bGQgYmUgdG91Y2hpbmcKKyAgICAgICAgIyBpdC4KKyAgICAgICAgc2VsZi5fd3JpdGVPcmRlciA9IHt9CisKKyAgICAgICAgc2VsZi5fcmVnaXN0ZXJDb21tYW5kcyhtYXBwaW5nLCBkYXRhTWFwcGluZywgY29tbWFuZFVwZGF0ZXMsIGRhdGFVcGRhdGVzKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIHN0cmluZyBmb3JtYXR0ZWQgZm9yIG91dHB1dCB0byBhIGtpY2tzdGFydCBmaWxlLiIiIgorICAgICAgICByZXR2YWwgPSAiIgorCisgICAgICAgIGlmIHNlbGYucGxhdGZvcm0gIT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiNwbGF0Zm9ybT0lc1xuIiAlIHNlbGYucGxhdGZvcm0KKworICAgICAgICByZXR2YWwgKz0gIiN2ZXJzaW9uPSVzXG4iICUgdmVyc2lvblRvU3RyaW5nKHNlbGYudmVyc2lvbikKKworICAgICAgICBsc3QgPSBzZWxmLl93cml0ZU9yZGVyLmtleXMoKQorICAgICAgICBsc3Quc29ydCgpCisKKyAgICAgICAgZm9yIHByaW8gaW4gbHN0OgorICAgICAgICAgICAgZm9yIG9iaiBpbiBzZWxmLl93cml0ZU9yZGVyW3ByaW9dOgorICAgICAgICAgICAgICAgIHJldHZhbCArPSBvYmouX19zdHJfXygpCisKKyAgICAgICAgZm9yIHNjcmlwdCBpbiBzZWxmLnNjcmlwdHM6CisgICAgICAgICAgICByZXR2YWwgKz0gc2NyaXB0Ll9fc3RyX18oKQorCisgICAgICAgIHJldHZhbCArPSBzZWxmLnBhY2thZ2VzLl9fc3RyX18oKQorCisgICAgICAgIHJldHVybiByZXR2YWwKKworICAgIGRlZiBfaW5zZXJ0U29ydGVkKHNlbGYsIGxzdCwgb2JqKToKKyAgICAgICAgbGVuZ3RoID0gbGVuKGxzdCkKKyAgICAgICAgaSA9IDAKKworICAgICAgICB3aGlsZSBpIDwgbGVuZ3RoOgorICAgICAgICAgICAgIyBJZiB0aGUgdHdvIGNsYXNzZXMgaGF2ZSB0aGUgc2FtZSBuYW1lLCBpdCdzIGJlY2F1c2Ugd2UgYXJlCisgICAgICAgICAgICAjIG92ZXJyaWRpbmcgYW4gZXhpc3RpbmcgY2xhc3Mgd2l0aCBvbmUgZnJvbSBhIGxhdGVyIGtpY2tzdGFydAorICAgICAgICAgICAgIyB2ZXJzaW9uLCBzbyByZW1vdmUgdGhlIG9sZCBvbmUgaW4gZmF2b3Igb2YgdGhlIG5ldyBvbmUuCisgICAgICAgICAgICBpZiBvYmouX19jbGFzc19fLl9fbmFtZV9fID4gbHN0W2ldLl9fY2xhc3NfXy5fX25hbWVfXzoKKyAgICAgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgICAgIGVsaWYgb2JqLl9fY2xhc3NfXy5fX25hbWVfXyA9PSBsc3RbaV0uX19jbGFzc19fLl9fbmFtZV9fOgorICAgICAgICAgICAgICAgIGxzdFtpXSA9IG9iagorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZWxpZiBvYmouX19jbGFzc19fLl9fbmFtZV9fIDwgbHN0W2ldLl9fY2xhc3NfXy5fX25hbWVfXzoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIGkgPj0gbGVuZ3RoOgorICAgICAgICAgICAgbHN0LmFwcGVuZChvYmopCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsc3QuaW5zZXJ0KGksIG9iaikKKworICAgIGRlZiBfc2V0Q29tbWFuZChzZWxmLCBjbWRPYmopOgorICAgICAgICAjIEFkZCBhbiBhdHRyaWJ1dGUgb24gdGhpcyB2ZXJzaW9uIG9iamVjdC4gIFdlIG5lZWQgdGhpcyB0byBwcm92aWRlIGEKKyAgICAgICAgIyB3YXkgZm9yIGNsaWVudHMgdG8gYWNjZXNzIHRoZSBjb21tYW5kIG9iamVjdHMuICBXZSBhbHNvIG5lZWQgdG8gc3RyaXAKKyAgICAgICAgIyBvZmYgdGhlIHZlcnNpb24gcGFydCBmcm9tIHRoZSBmcm9udCBvZiB0aGUgbmFtZS4KKyAgICAgICAgaWYgY21kT2JqLl9fY2xhc3NfXy5fX25hbWVfXy5maW5kKCJfIikgIT0gLTE6CisgICAgICAgICAgICBuYW1lID0gdW5pY29kZShjbWRPYmouX19jbGFzc19fLl9fbmFtZV9fLnNwbGl0KCJfIiwgMSlbMV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuYW1lID0gdW5pY29kZShjbWRPYmouX19jbGFzc19fLl9fbmFtZV9fKS5sb3dlcigpCisKKyAgICAgICAgc2V0YXR0cihzZWxmLCBuYW1lLmxvd2VyKCksIGNtZE9iaikKKworICAgICAgICAjIEFsc28sIGFkZCB0aGUgb2JqZWN0IGludG8gdGhlIF93cml0ZU9yZGVyIGRpY3QgaW4gdGhlIHJpZ2h0IHBsYWNlLgorICAgICAgICBpZiBjbWRPYmoud3JpdGVQcmlvcml0eSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYuX3dyaXRlT3JkZXIuaGFzX2tleShjbWRPYmoud3JpdGVQcmlvcml0eSk6CisgICAgICAgICAgICAgICAgc2VsZi5faW5zZXJ0U29ydGVkKHNlbGYuX3dyaXRlT3JkZXJbY21kT2JqLndyaXRlUHJpb3JpdHldLCBjbWRPYmopCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlT3JkZXJbY21kT2JqLndyaXRlUHJpb3JpdHldID0gW2NtZE9ial0KKworICAgIGRlZiBfcmVnaXN0ZXJDb21tYW5kcyhzZWxmLCBtYXBwaW5nPU5vbmUsIGRhdGFNYXBwaW5nPU5vbmUsIGNvbW1hbmRVcGRhdGVzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFVcGRhdGVzPU5vbmUpOgorICAgICAgICBpZiBtYXBwaW5nID09IHt9IG9yIG1hcHBpbmcgPT0gTm9uZToKKyAgICAgICAgICAgIGZyb20gcHlraWNrc3RhcnQuaGFuZGxlcnMuY29udHJvbCBpbXBvcnQgY29tbWFuZE1hcAorICAgICAgICAgICAgY01hcCA9IGNvbW1hbmRNYXBbc2VsZi52ZXJzaW9uXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY01hcCA9IG1hcHBpbmcKKworICAgICAgICBpZiBkYXRhTWFwcGluZyA9PSB7fSBvciBkYXRhTWFwcGluZyA9PSBOb25lOgorICAgICAgICAgICAgZnJvbSBweWtpY2tzdGFydC5oYW5kbGVycy5jb250cm9sIGltcG9ydCBkYXRhTWFwCisgICAgICAgICAgICBkTWFwID0gZGF0YU1hcFtzZWxmLnZlcnNpb25dCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkTWFwID0gZGF0YU1hcHBpbmcKKworICAgICAgICBpZiB0eXBlKGNvbW1hbmRVcGRhdGVzKSA9PSB0eXBlcy5EaWN0VHlwZToKKyAgICAgICAgICAgIGNNYXAudXBkYXRlKGNvbW1hbmRVcGRhdGVzKQorCisgICAgICAgIGlmIHR5cGUoZGF0YVVwZGF0ZXMpID09IHR5cGVzLkRpY3RUeXBlOgorICAgICAgICAgICAgZE1hcC51cGRhdGUoZGF0YVVwZGF0ZXMpCisKKyAgICAgICAgZm9yIChjbWROYW1lLCBjbWRDbGFzcykgaW4gY01hcC5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICMgRmlyc3QgbWFrZSBzdXJlIHdlIGhhdmVuJ3QgaW5zdGFudGlhdGVkIHRoaXMgY29tbWFuZCBoYW5kbGVyCisgICAgICAgICAgICAjIGFscmVhZHkuICBJZiB3ZSBoYXZlLCB3ZSBqdXN0IG5lZWQgdG8gbWFrZSBhbm90aGVyIG1hcHBpbmcgdG8KKyAgICAgICAgICAgICMgaXQgaW4gc2VsZi5jb21tYW5kcy4KKyAgICAgICAgICAgIGNtZE9iaiA9IE5vbmUKKworICAgICAgICAgICAgZm9yIChrZXksIHZhbCkgaW4gc2VsZi5jb21tYW5kcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiB2YWwuX19jbGFzc19fLl9fbmFtZV9fID09IGNtZENsYXNzLl9fbmFtZV9fOgorICAgICAgICAgICAgICAgICAgICBjbWRPYmogPSB2YWwKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgIyBJZiB3ZSBkaWRuJ3QgZmluZCBhbiBpbnN0YW5jZSBpbiBzZWxmLmNvbW1hbmRzLCBjcmVhdGUgb25lIG5vdy4KKyAgICAgICAgICAgIGlmIGNtZE9iaiA9PSBOb25lOgorICAgICAgICAgICAgICAgIGNtZE9iaiA9IGNtZENsYXNzKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9zZXRDb21tYW5kKGNtZE9iaikKKworICAgICAgICAgICAgIyBGaW5hbGx5LCBhZGQgdGhlIG1hcHBpbmcgdG8gdGhlIGNvbW1hbmRzIGRpY3QuCisgICAgICAgICAgICBzZWxmLmNvbW1hbmRzW2NtZE5hbWVdID0gY21kT2JqCisgICAgICAgICAgICBzZWxmLmNvbW1hbmRzW2NtZE5hbWVdLmhhbmRsZXIgPSBzZWxmCisKKyAgICAgICAgIyBXZSBhbHNvIG5lZWQgdG8gY3JlYXRlIGF0dHJpYnV0ZXMgZm9yIHRoZSB2YXJpb3VzIGRhdGEgb2JqZWN0cy4KKyAgICAgICAgIyBObyBjaGVja3MgaGVyZSBiZWNhdXNlIGRNYXAgaXMgYSBiaWplY3Rpb24uICBBdCBsZWFzdCwgdGhhdCdzIHdoYXQKKyAgICAgICAgIyB0aGUgY29tbWVudCBzYXlzLiAgSG9wZSBubyBvbmUgc2NyZXdzIHRoYXQgdXAuCisgICAgICAgIGZvciAoZGF0YU5hbWUsIGRhdGFDbGFzcykgaW4gZE1hcC5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgZGF0YU5hbWUsIGRhdGFDbGFzcykKKworICAgIGRlZiBkaXNwYXRjaGVyKHNlbGYsIGFyZ3MsIGxpbmVubyk6CisgICAgICAgICIiIkNhbGwgdGhlIGFwcHJvcHJpYXRlIEtpY2tzdGFydENvbW1hbmQgaGFuZGxlciBmb3IgdGhlIGN1cnJlbnQgbGluZQorICAgICAgICAgICBpbiB0aGUga2lja3N0YXJ0IGZpbGUuICBBIGhhbmRsZXIgZm9yIHRoZSBjdXJyZW50IGNvbW1hbmQgc2hvdWxkCisgICAgICAgICAgIGJlIHJlZ2lzdGVyZWQsIHRob3VnaCBhIGhhbmRsZXIgb2YgTm9uZSBpcyBub3QgYW4gZXJyb3IuICBSZXR1cm5zCisgICAgICAgICAgIHRoZSBkYXRhIG9iamVjdCByZXR1cm5lZCBieSBLaWNrc3RhcnRDb21tYW5kLnBhcnNlLgorCisgICAgICAgICAgIGFyZ3MgICAgLS0gQSBsaXN0IG9mIGFyZ3VtZW50cyB0byB0aGUgY3VycmVudCBjb21tYW5kCisgICAgICAgICAgIGxpbmVubyAgLS0gVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBmaWxlLCBmb3IgZXJyb3IgcmVwb3J0aW5nCisgICAgICAgICIiIgorICAgICAgICBjbWQgPSBhcmdzWzBdCisKKyAgICAgICAgaWYgbm90IHNlbGYuY29tbWFuZHMuaGFzX2tleShjbWQpOgorICAgICAgICAgICAgcmFpc2UgS2lja3N0YXJ0UGFyc2VFcnJvciwgZm9ybWF0RXJyb3JNc2cobGluZW5vLCBtc2c9XygiVW5rbm93biBjb21tYW5kOiAlcyIgJSBjbWQpKQorICAgICAgICBlbGlmIHNlbGYuY29tbWFuZHNbY21kXSAhPSBOb25lOgorICAgICAgICAgICAgc2VsZi5jb21tYW5kc1tjbWRdLmN1cnJlbnRDbWQgPSBjbWQKKyAgICAgICAgICAgIHNlbGYuY29tbWFuZHNbY21kXS5jdXJyZW50TGluZSA9IHNlbGYuY3VycmVudExpbmUKKyAgICAgICAgICAgIHNlbGYuY29tbWFuZHNbY21kXS5saW5lbm8gPSBsaW5lbm8KKworICAgICAgICAgICAgIyBUaGUgcGFyc2VyIHJldHVybnMgdGhlIGRhdGEgb2JqZWN0IHRoYXQgd2FzIG1vZGlmaWVkLiAgVGhpcyBjb3VsZAorICAgICAgICAgICAgIyBiZSBhIEJhc2VEYXRhIHN1YmNsYXNzIHRoYXQgc2hvdWxkIGJlIHB1dCBpbnRvIGEgbGlzdCwgb3IgaXQKKyAgICAgICAgICAgICMgY291bGQgYmUgdGhlIGNvbW1hbmQgaGFuZGxlciBvYmplY3QgaXRzZWxmLgorICAgICAgICAgICAgb2JqID0gc2VsZi5jb21tYW5kc1tjbWRdLnBhcnNlKGFyZ3NbMTpdKQorICAgICAgICAgICAgbHN0ID0gc2VsZi5jb21tYW5kc1tjbWRdLmRhdGFMaXN0KCkKKyAgICAgICAgICAgIGlmIGxzdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBsc3QuYXBwZW5kKG9iaikKKworICAgICAgICAgICAgcmV0dXJuIG9iagorCisgICAgZGVmIG1hc2tBbGxFeGNlcHQoc2VsZiwgbHN0KToKKyAgICAgICAgIiIiU2V0IGFsbCBlbnRyaWVzIGluIHRoZSBjb21tYW5kcyBkaWN0IHRvIE5vbmUsIGV4Y2VwdCB0aGUgb25lcyBpbgorICAgICAgICAgICB0aGUgbHN0LiAgQWxsIG90aGVyIGNvbW1hbmRzIHdpbGwgbm90IGJlIHByb2Nlc3NlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3dyaXRlT3JkZXIgPSB7fQorCisgICAgICAgIGZvciAoa2V5LCB2YWwpIGluIHNlbGYuY29tbWFuZHMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiBub3Qga2V5IGluIGxzdDoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbW1hbmRzW2tleV0gPSBOb25lCisKKyAgICBkZWYgaGFzQ29tbWFuZChzZWxmLCBjbWQpOgorICAgICAgICAiIiJSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhIGhhbmRsZXIgZm9yIHRoZSBzdHJpbmcgY21kLiIiIgorICAgICAgICByZXR1cm4gaGFzYXR0cihzZWxmLCBjbWQpCisKKworIyMjCisjIyMgREFUQQorIyMjCitjbGFzcyBCYXNlRGF0YShLaWNrc3RhcnRPYmplY3QpOgorICAgICIiIlRoZSBiYXNlIGNsYXNzIGZvciBhbGwgZGF0YSBvYmplY3RzLiAgVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcy4iIiIKKyAgICByZW1vdmVkS2V5d29yZHMgPSBbXQorICAgIHJlbW92ZWRBdHRycyA9IFtdCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IEJhc2VEYXRhIGluc3RhbmNlLgorICAgICAgICAKKyAgICAgICAgICAgbGluZW5vIC0tIExpbmUgbnVtYmVyIGluIHRoZSBrcy1maWxlIHdoZXJlIHRoaXMgb2JqZWN0IHdhcyBkZWZpbmVkCisgICAgICAgICIiIgorCisgICAgICAgICMgV2UgZG9uJ3Qgd2FudCBwZW9wbGUgdXNpbmcgdGhpcyBjbGFzcyBieSBpdHNlbGYuCisgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIEJhc2VEYXRhOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCAiQmFzZURhdGEgaXMgYW4gYWJzdHJhY3QgY2xhc3MuIgorCisgICAgICAgIEtpY2tzdGFydE9iamVjdC5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYubGluZW5vID0gMAorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIHN0cmluZyBmb3JtYXR0ZWQgZm9yIG91dHB1dCB0byBhIGtpY2tzdGFydCBmaWxlLiIiIgorICAgICAgICByZXR1cm4gIiIKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJTZXQgbXVsdGlwbGUgYXR0cmlidXRlcyBvbiBhIHN1YmNsYXNzIG9mIEJhc2VEYXRhIGF0IG9uY2UgdmlhCisgICAgICAgICAgIGtleXdvcmQgYXJndW1lbnRzLiAgVmFsaWQgYXR0cmlidXRlcyBhcmUgYW55dGhpbmcgc3BlY2lmaWVkIGluIGEKKyAgICAgICAgICAgc3ViY2xhc3MsIGJ1dCB1bmtub3duIGF0dHJpYnV0ZXMgd2lsbCBiZSBpZ25vcmVkLgorICAgICAgICAiIiIKKyAgICAgICAgZm9yIChrZXksIHZhbCkgaW4ga3dhcmdzLml0ZW1zKCk6CisgICAgICAgICAgICAjIElnbm9yZSBzZXR0aW5nIGF0dHJpYnV0ZXMgdGhhdCB3ZXJlIHJlbW92ZWQgaW4gYSBzdWJjbGFzcywgYXMKKyAgICAgICAgICAgICMgaWYgdGhleSB3ZXJlIHVua25vd24gYXR0cmlidXRlcy4KKyAgICAgICAgICAgIGlmIGtleSBpbiBzZWxmLnJlbW92ZWRBdHRyczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBrZXksIHZhbCkKKworICAgIGRlZiBkZWxldGVSZW1vdmVkQXR0cnMoc2VsZik6CisgICAgICAgICIiIlJlbW92ZSBhbGwgYXR0cmlidXRlcyBmcm9tIHNlbGYgdGhhdCBhcmUgZ2l2ZW4gaW4gdGhlIHJlbW92ZWRBdHRycworICAgICAgICAgICBsaXN0LiAgVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIF9faW5pdF9fIGluIGEgc3ViY2xhc3MsCisgICAgICAgICAgIGJ1dCBvbmx5IGFmdGVyIHRoZSBzdXBlcmNsYXNzJ3MgX19pbml0X18gbWV0aG9kIGhhcyBiZWVuIGNhbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGZvciBhdHRyIGluIGZpbHRlcihsYW1iZGEgazogaGFzYXR0cihzZWxmLCBrKSwgc2VsZi5yZW1vdmVkQXR0cnMpOgorICAgICAgICAgICAgZGVsYXR0cihzZWxmLCBhdHRyKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvY29tbWFuZHMvX19pbml0X18ucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9jb21tYW5kcy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDk0NTUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvY29tbWFuZHMvX19pbml0X18ucHkKQEAgLTAsMCArMSwyMCBAQAorIworIyBDaHJpcyBMdW1lbnMgPGNsdW1lbnNAcmVkaGF0LmNvbT4KKyMKKyMgQ29weXJpZ2h0IDIwMDkgUmVkIEhhdCwgSW5jLgorIworIyBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwgbW9kaWZ5LAorIyBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYuMi4gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0CisjIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFkgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZyB0aGUKKyMgaW1wbGllZCB3YXJyYW50aWVzIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisjIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MQorIyBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gIEFueSBSZWQgSGF0CisjIHRyYWRlbWFya3MgdGhhdCBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZSBzb3VyY2UgY29kZSBvciBkb2N1bWVudGF0aW9uIGFyZSBub3QKKyMgc3ViamVjdCB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIG1heSBvbmx5IGJlIHVzZWQgb3IgcmVwbGljYXRlZAorIyB3aXRoIHRoZSBleHByZXNzIHBlcm1pc3Npb24gb2YgUmVkIEhhdCwgSW5jLiAKKyMKK2ltcG9ydCBib290bG9hZGVyLCBwYXJ0aXRpb24KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2NvbW1hbmRzL2Jvb3Rsb2FkZXIucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9jb21tYW5kcy9ib290bG9hZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYjU1MmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9jb21tYW5kcy9ib290bG9hZGVyLnB5CkBAIC0wLDAgKzEsMjE2IEBACisjCisjIENocmlzIEx1bWVucyA8Y2x1bWVuc0ByZWRoYXQuY29tPgorIworIyBDb3B5cmlnaHQgMjAwNyBSZWQgSGF0LCBJbmMuCisjCisjIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLCBtb2RpZnksCisjIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugdi4yLiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKKyMgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nIHRoZQorIyBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxCisjIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgQW55IFJlZCBIYXQKKyMgdHJhZGVtYXJrcyB0aGF0IGFyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlIHNvdXJjZSBjb2RlIG9yIGRvY3VtZW50YXRpb24gYXJlIG5vdAorIyBzdWJqZWN0IHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgbWF5IG9ubHkgYmUgdXNlZCBvciByZXBsaWNhdGVkCisjIHdpdGggdGhlIGV4cHJlc3MgcGVybWlzc2lvbiBvZiBSZWQgSGF0LCBJbmMuIAorIworZnJvbSBweWtpY2tzdGFydC5iYXNlIGltcG9ydCAqCitmcm9tIHB5a2lja3N0YXJ0Lm9wdGlvbnMgaW1wb3J0ICoKKworY2xhc3MgRkMzX0Jvb3Rsb2FkZXIoS2lja3N0YXJ0Q29tbWFuZCk6CisgICAgcmVtb3ZlZEtleXdvcmRzID0gS2lja3N0YXJ0Q29tbWFuZC5yZW1vdmVkS2V5d29yZHMKKyAgICByZW1vdmVkQXR0cnMgPSBLaWNrc3RhcnRDb21tYW5kLnJlbW92ZWRBdHRycworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHk9MTAsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIEtpY2tzdGFydENvbW1hbmQuX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eSwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLm9wID0gc2VsZi5fZ2V0UGFyc2VyKCkKKworICAgICAgICBzZWxmLmRyaXZlb3JkZXIgPSBrd2FyZ3MuZ2V0KCJkcml2ZW9yZGVyIiwgW10pCisgICAgICAgIHNlbGYuYXBwZW5kTGluZSA9IGt3YXJncy5nZXQoImFwcGVuZExpbmUiLCAiIikKKyAgICAgICAgc2VsZi5mb3JjZUxCQSA9IGt3YXJncy5nZXQoImZvcmNlTEJBIiwgRmFsc2UpCisgICAgICAgIHNlbGYubGluZWFyID0ga3dhcmdzLmdldCgibGluZWFyIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5sb2NhdGlvbiA9IGt3YXJncy5nZXQoImxvY2F0aW9uIiwgIiIpCisgICAgICAgIHNlbGYubWQ1cGFzcyA9IGt3YXJncy5nZXQoIm1kNXBhc3MiLCAiIikKKyAgICAgICAgc2VsZi5wYXNzd29yZCA9IGt3YXJncy5nZXQoInBhc3N3b3JkIiwgIiIpCisgICAgICAgIHNlbGYudXBncmFkZSA9IGt3YXJncy5nZXQoInVwZ3JhZGUiLCBGYWxzZSkKKyAgICAgICAgc2VsZi51c2VMaWxvID0ga3dhcmdzLmdldCgidXNlTGlsbyIsIEZhbHNlKQorCisgICAgICAgIHNlbGYuZGVsZXRlUmVtb3ZlZEF0dHJzKCkKKworICAgIGRlZiBfZ2V0QXJnc0FzU3RyKHNlbGYpOgorICAgICAgICByZXR2YWwgPSAiIgorCisgICAgICAgIGlmIHNlbGYuYXBwZW5kTGluZSAhPSAiIjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tYXBwZW5kPVwiJXNcIiIgJSBzZWxmLmFwcGVuZExpbmUKKyAgICAgICAgaWYgc2VsZi5saW5lYXI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWxpbmVhciIKKyAgICAgICAgaWYgc2VsZi5sb2NhdGlvbjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tbG9jYXRpb249JXMiICUgc2VsZi5sb2NhdGlvbgorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICJmb3JjZUxCQSIpIGFuZCBzZWxmLmZvcmNlTEJBOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1sYmEzMiIKKyAgICAgICAgaWYgc2VsZi5wYXNzd29yZCAhPSAiIjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tcGFzc3dvcmQ9XCIlc1wiIiAlIHNlbGYucGFzc3dvcmQKKyAgICAgICAgaWYgc2VsZi5tZDVwYXNzICE9ICIiOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1tZDVwYXNzPVwiJXNcIiIgJSBzZWxmLm1kNXBhc3MKKyAgICAgICAgaWYgc2VsZi51cGdyYWRlOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS11cGdyYWRlIgorICAgICAgICBpZiBzZWxmLnVzZUxpbG86CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLXVzZUxpbG8iCisgICAgICAgIGlmIGxlbihzZWxmLmRyaXZlb3JkZXIpID4gMDoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tZHJpdmVvcmRlcj1cIiVzXCIiICUgIiwiLmpvaW4oc2VsZi5kcml2ZW9yZGVyKQorCisgICAgICAgIHJldHVybiByZXR2YWwKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR2YWwgPSBLaWNrc3RhcnRDb21tYW5kLl9fc3RyX18oc2VsZikKKworICAgICAgICBpZiBzZWxmLmxvY2F0aW9uICE9ICIiOgorICAgICAgICAgICAgcmV0dmFsICs9ICIjIFN5c3RlbSBib290bG9hZGVyIGNvbmZpZ3VyYXRpb25cbmJvb3Rsb2FkZXIiCisgICAgICAgICAgICByZXR2YWwgKz0gc2VsZi5fZ2V0QXJnc0FzU3RyKCkgKyAiXG4iCisKKyAgICAgICAgcmV0dXJuIHJldHZhbAorCisgICAgZGVmIF9nZXRQYXJzZXIoc2VsZik6CisgICAgICAgIGRlZiBkcml2ZW9yZGVyX2NiIChvcHRpb24sIG9wdF9zdHIsIHZhbHVlLCBwYXJzZXIpOgorICAgICAgICAgICAgZm9yIGQgaW4gdmFsdWUuc3BsaXQoJywnKToKKyAgICAgICAgICAgICAgICBwYXJzZXIudmFsdWVzLmVuc3VyZV92YWx1ZShvcHRpb24uZGVzdCwgW10pLmFwcGVuZChkKQorCisgICAgICAgIG9wID0gS1NPcHRpb25QYXJzZXIoKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWFwcGVuZCIsIGRlc3Q9ImFwcGVuZExpbmUiKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWxpbmVhciIsIGRlc3Q9ImxpbmVhciIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1UcnVlKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLW5vbGluZWFyIiwgZGVzdD0ibGluZWFyIiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tbG9jYXRpb24iLCBkZXN0PSJsb2NhdGlvbiIsIHR5cGU9ImNob2ljZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0ibWJyIiwKKyAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzPVsibWJyIiwgInBhcnRpdGlvbiIsICJub25lIiwgImJvb3QiXSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1sYmEzMiIsIGRlc3Q9ImZvcmNlTEJBIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLXBhc3N3b3JkIiwgZGVzdD0icGFzc3dvcmQiLCBkZWZhdWx0PSIiKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLW1kNXBhc3MiLCBkZXN0PSJtZDVwYXNzIiwgZGVmYXVsdD0iIikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS11cGdyYWRlIiwgZGVzdD0idXBncmFkZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS11c2VMaWxvIiwgZGVzdD0idXNlTGlsbyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1kcml2ZW9yZGVyIiwgZGVzdD0iZHJpdmVvcmRlciIsIGFjdGlvbj0iY2FsbGJhY2siLAorICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrPWRyaXZlb3JkZXJfY2IsIG5hcmdzPTEsIHR5cGU9InN0cmluZyIpCisgICAgICAgIHJldHVybiBvcAorCisgICAgZGVmIHBhcnNlKHNlbGYsIGFyZ3MpOgorICAgICAgICAob3B0cywgZXh0cmEpID0gc2VsZi5vcC5wYXJzZV9hcmdzKGFyZ3M9YXJncywgbGluZW5vPXNlbGYubGluZW5vKQorICAgICAgICBzZWxmLl9zZXRUb1NlbGYoc2VsZi5vcCwgb3B0cykKKworICAgICAgICBpZiBzZWxmLmN1cnJlbnRDbWQgPT0gImxpbG8iOgorICAgICAgICAgICAgc2VsZi51c2VMaWxvID0gVHJ1ZQorCisgICAgICAgIHJldHVybiBzZWxmCisKK2NsYXNzIEZDNF9Cb290bG9hZGVyKEZDM19Cb290bG9hZGVyKToKKyAgICByZW1vdmVkS2V5d29yZHMgPSBGQzNfQm9vdGxvYWRlci5yZW1vdmVkS2V5d29yZHMgKyBbImxpbmVhciIsICJ1c2VMaWxvIl0KKyAgICByZW1vdmVkQXR0cnMgPSBGQzNfQm9vdGxvYWRlci5yZW1vdmVkQXR0cnMgKyBbImxpbmVhciIsICJ1c2VMaWxvIl0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3cml0ZVByaW9yaXR5PTEwLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBGQzNfQm9vdGxvYWRlci5fX2luaXRfXyhzZWxmLCB3cml0ZVByaW9yaXR5LCAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgX2dldEFyZ3NBc1N0cihzZWxmKToKKyAgICAgICAgcmV0dmFsID0gIiIKKyAgICAgICAgaWYgc2VsZi5hcHBlbmRMaW5lICE9ICIiOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1hcHBlbmQ9XCIlc1wiIiAlIHNlbGYuYXBwZW5kTGluZQorICAgICAgICBpZiBzZWxmLmxvY2F0aW9uOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1sb2NhdGlvbj0lcyIgJSBzZWxmLmxvY2F0aW9uCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgImZvcmNlTEJBIikgYW5kIHNlbGYuZm9yY2VMQkE6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWxiYTMyIgorICAgICAgICBpZiBzZWxmLnBhc3N3b3JkICE9ICIiOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1wYXNzd29yZD1cIiVzXCIiICUgc2VsZi5wYXNzd29yZAorICAgICAgICBpZiBzZWxmLm1kNXBhc3MgIT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLW1kNXBhc3M9XCIlc1wiIiAlIHNlbGYubWQ1cGFzcworICAgICAgICBpZiBzZWxmLnVwZ3JhZGU6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLXVwZ3JhZGUiCisgICAgICAgIGlmIGxlbihzZWxmLmRyaXZlb3JkZXIpID4gMDoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tZHJpdmVvcmRlcj1cIiVzXCIiICUgIiwiLmpvaW4oc2VsZi5kcml2ZW9yZGVyKQorICAgICAgICByZXR1cm4gcmV0dmFsCisKKyAgICBkZWYgX2dldFBhcnNlcihzZWxmKToKKyAgICAgICAgb3AgPSBGQzNfQm9vdGxvYWRlci5fZ2V0UGFyc2VyKHNlbGYpCisgICAgICAgIG9wLnJlbW92ZV9vcHRpb24oIi0tbGluZWFyIikKKyAgICAgICAgb3AucmVtb3ZlX29wdGlvbigiLS1ub2xpbmVhciIpCisgICAgICAgIG9wLnJlbW92ZV9vcHRpb24oIi0tdXNlTGlsbyIpCisgICAgICAgIHJldHVybiBvcAorCisgICAgZGVmIHBhcnNlKHNlbGYsIGFyZ3MpOgorICAgICAgICAob3B0cywgZXh0cmEpID0gc2VsZi5vcC5wYXJzZV9hcmdzKGFyZ3M9YXJncywgbGluZW5vPXNlbGYubGluZW5vKQorICAgICAgICBzZWxmLl9zZXRUb1NlbGYoc2VsZi5vcCwgb3B0cykKKyAgICAgICAgcmV0dXJuIHNlbGYKKworY2xhc3MgRjhfQm9vdGxvYWRlcihGQzRfQm9vdGxvYWRlcik6CisgICAgcmVtb3ZlZEtleXdvcmRzID0gRkM0X0Jvb3Rsb2FkZXIucmVtb3ZlZEtleXdvcmRzCisgICAgcmVtb3ZlZEF0dHJzID0gRkM0X0Jvb3Rsb2FkZXIucmVtb3ZlZEF0dHJzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eT0xMCwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgRkM0X0Jvb3Rsb2FkZXIuX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eSwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgICAgIHNlbGYudGltZW91dCA9IGt3YXJncy5nZXQoInRpbWVvdXQiLCBOb25lKQorICAgICAgICBzZWxmLmRlZmF1bHQgPSBrd2FyZ3MuZ2V0KCJkZWZhdWx0IiwgIiIpCisKKyAgICBkZWYgX2dldEFyZ3NBc1N0cihzZWxmKToKKyAgICAgICAgcmV0ID0gRkM0X0Jvb3Rsb2FkZXIuX2dldEFyZ3NBc1N0cihzZWxmKQorCisgICAgICAgIGlmIHNlbGYudGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldCArPSAiIC0tdGltZW91dD0lZCIgJShzZWxmLnRpbWVvdXQsKQorICAgICAgICBpZiBzZWxmLmRlZmF1bHQ6CisgICAgICAgICAgICByZXQgKz0gIiAtLWRlZmF1bHQ9JXMiICUoc2VsZi5kZWZhdWx0LCkKKworICAgICAgICByZXR1cm4gcmV0CisKKyAgICBkZWYgX2dldFBhcnNlcihzZWxmKToKKyAgICAgICAgb3AgPSBGQzRfQm9vdGxvYWRlci5fZ2V0UGFyc2VyKHNlbGYpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tdGltZW91dCIsIGRlc3Q9InRpbWVvdXQiLCB0eXBlPSJpbnQiKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWRlZmF1bHQiLCBkZXN0PSJkZWZhdWx0IikKKyAgICAgICAgcmV0dXJuIG9wCisKK2NsYXNzIEYxMl9Cb290bG9hZGVyKEY4X0Jvb3Rsb2FkZXIpOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEY4X0Jvb3Rsb2FkZXIucmVtb3ZlZEtleXdvcmRzCisgICAgcmVtb3ZlZEF0dHJzID0gRjhfQm9vdGxvYWRlci5yZW1vdmVkQXR0cnMKKworICAgIGRlZiBfZ2V0UGFyc2VyKHNlbGYpOgorICAgICAgICBvcCA9IEY4X0Jvb3Rsb2FkZXIuX2dldFBhcnNlcihzZWxmKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWxiYTMyIiwgZGVzdD0iZm9yY2VMQkEiLCBkZXByZWNhdGVkPTEsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHJldHVybiBvcAorCitjbGFzcyBGMTRfQm9vdGxvYWRlcihGMTJfQm9vdGxvYWRlcik6CisgICAgcmVtb3ZlZEtleXdvcmRzID0gRjEyX0Jvb3Rsb2FkZXIucmVtb3ZlZEtleXdvcmRzICsgWyJmb3JjZUxCQSJdCisgICAgcmVtb3ZlZEF0dHJzID0gRjEyX0Jvb3Rsb2FkZXIucmVtb3ZlZEtleXdvcmRzICsgWyJmb3JjZUxCQSJdCisKKyAgICBkZWYgX2dldFBhcnNlcihzZWxmKToKKyAgICAgICAgb3AgPSBGMTJfQm9vdGxvYWRlci5fZ2V0UGFyc2VyKHNlbGYpCisgICAgICAgIG9wLnJlbW92ZV9vcHRpb24oIi0tbGJhMzIiKQorICAgICAgICByZXR1cm4gb3AKKworY2xhc3MgRjE1X0Jvb3Rsb2FkZXIoRjE0X0Jvb3Rsb2FkZXIpOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEYxNF9Cb290bG9hZGVyLnJlbW92ZWRLZXl3b3JkcworICAgIHJlbW92ZWRBdHRycyA9IEYxNF9Cb290bG9hZGVyLnJlbW92ZWRBdHRycworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHk9MTAsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIEYxNF9Cb290bG9hZGVyLl9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHksICphcmdzLCAqKmt3YXJncykKKworICAgICAgICBzZWxmLmlzQ3J5cHRlZCA9IGt3YXJncy5nZXQoImlzQ3J5cHRlZCIsIEZhbHNlKQorCisgICAgZGVmIF9nZXRBcmdzQXNTdHIoc2VsZik6CisgICAgICAgIHJldCA9IEYxNF9Cb290bG9hZGVyLl9nZXRBcmdzQXNTdHIoc2VsZikKKworICAgICAgICBpZiBzZWxmLmlzQ3J5cHRlZDoKKyAgICAgICAgICAgIHJldCArPSAiIC0taXNjcnlwdGVkIgorCisgICAgICAgIHJldHVybiByZXQKKworICAgIGRlZiBfZ2V0UGFyc2VyKHNlbGYpOgorICAgICAgICBkZWYgcGFzc3dvcmRfY2Iob3B0aW9uLCBvcHRfc3RyLCB2YWx1ZSwgcGFyc2VyKToKKyAgICAgICAgICAgIHBhcnNlci52YWx1ZXMuaXNDcnlwdGVkID0gVHJ1ZQorICAgICAgICAgICAgcGFyc2VyLnZhbHVlcy5wYXNzd29yZCA9IHZhbHVlCisKKyAgICAgICAgb3AgPSBGMTRfQm9vdGxvYWRlci5fZ2V0UGFyc2VyKHNlbGYpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0taXNjcnlwdGVkIiwgZGVzdD0iaXNDcnlwdGVkIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1tZDVwYXNzIiwgYWN0aW9uPSJjYWxsYmFjayIsIGNhbGxiYWNrPXBhc3N3b3JkX2NiLCBuYXJncz0xLCB0eXBlPSJzdHJpbmciKQorICAgICAgICByZXR1cm4gb3AKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2NvbW1hbmRzL3BhcnRpdGlvbi5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2NvbW1hbmRzL3BhcnRpdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTY0YjFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvY29tbWFuZHMvcGFydGl0aW9uLnB5CkBAIC0wLDAgKzEsMzE0IEBACisjCisjIENocmlzIEx1bWVucyA8Y2x1bWVuc0ByZWRoYXQuY29tPgorIworIyBDb3B5cmlnaHQgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBSZWQgSGF0LCBJbmMuCisjCisjIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLCBtb2RpZnksCisjIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugdi4yLiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKKyMgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nIHRoZQorIyBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxCisjIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgQW55IFJlZCBIYXQKKyMgdHJhZGVtYXJrcyB0aGF0IGFyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlIHNvdXJjZSBjb2RlIG9yIGRvY3VtZW50YXRpb24gYXJlIG5vdAorIyBzdWJqZWN0IHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgbWF5IG9ubHkgYmUgdXNlZCBvciByZXBsaWNhdGVkCisjIHdpdGggdGhlIGV4cHJlc3MgcGVybWlzc2lvbiBvZiBSZWQgSGF0LCBJbmMuIAorIworZnJvbSBweWtpY2tzdGFydC5iYXNlIGltcG9ydCAqCitmcm9tIHB5a2lja3N0YXJ0LmVycm9ycyBpbXBvcnQgKgorZnJvbSBweWtpY2tzdGFydC5vcHRpb25zIGltcG9ydCAqCisKK2ltcG9ydCBnZXR0ZXh0CitpbXBvcnQgd2FybmluZ3MKK18gPSBsYW1iZGEgeDogZ2V0dGV4dC5sZGdldHRleHQoInB5a2lja3N0YXJ0IiwgeCkKKworY2xhc3MgRkMzX1BhcnREYXRhKEJhc2VEYXRhKToKKyAgICByZW1vdmVkS2V5d29yZHMgPSBCYXNlRGF0YS5yZW1vdmVkS2V5d29yZHMKKyAgICByZW1vdmVkQXR0cnMgPSBCYXNlRGF0YS5yZW1vdmVkQXR0cnMKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBCYXNlRGF0YS5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuYWN0aXZlID0ga3dhcmdzLmdldCgiYWN0aXZlIiwgRmFsc2UpCisgICAgICAgIHNlbGYucHJpbU9ubHkgPSBrd2FyZ3MuZ2V0KCJwcmltT25seSIsIEZhbHNlKQorICAgICAgICBzZWxmLmVuZCA9IGt3YXJncy5nZXQoImVuZCIsIDApCisgICAgICAgIHNlbGYuZnN0eXBlID0ga3dhcmdzLmdldCgiZnN0eXBlIiwgIiIpCisgICAgICAgIHNlbGYuZ3JvdyA9IGt3YXJncy5nZXQoImdyb3ciLCBGYWxzZSkKKyAgICAgICAgc2VsZi5tYXhTaXplTUIgPSBrd2FyZ3MuZ2V0KCJtYXhTaXplTUIiLCAwKQorICAgICAgICBzZWxmLmZvcm1hdCA9IGt3YXJncy5nZXQoImZvcm1hdCIsIFRydWUpCisgICAgICAgIHNlbGYub25iaW9zZGlzayA9IGt3YXJncy5nZXQoIm9uYmlvc2Rpc2siLCAiIikKKyAgICAgICAgc2VsZi5kaXNrID0ga3dhcmdzLmdldCgiZGlzayIsICIiKQorICAgICAgICBzZWxmLm9uUGFydCA9IGt3YXJncy5nZXQoIm9uUGFydCIsICIiKQorICAgICAgICBzZWxmLnJlY29tbWVuZGVkID0ga3dhcmdzLmdldCgicmVjb21tZW5kZWQiLCBGYWxzZSkKKyAgICAgICAgc2VsZi5zaXplID0ga3dhcmdzLmdldCgic2l6ZSIsIE5vbmUpCisgICAgICAgIHNlbGYuc3RhcnQgPSBrd2FyZ3MuZ2V0KCJzdGFydCIsIDApCisgICAgICAgIHNlbGYubW91bnRwb2ludCA9IGt3YXJncy5nZXQoIm1vdW50cG9pbnQiLCAiIikKKworICAgIGRlZiBfX2VxX18oc2VsZiwgeSk6CisgICAgICAgIGlmIHNlbGYubW91bnRwb2ludDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm1vdW50cG9pbnQgPT0geS5tb3VudHBvaW50CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfZ2V0QXJnc0FzU3RyKHNlbGYpOgorICAgICAgICByZXR2YWwgPSAiIgorCisgICAgICAgIGlmIHNlbGYuYWN0aXZlOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1hY3RpdmUiCisgICAgICAgIGlmIHNlbGYucHJpbU9ubHk6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWFzcHJpbWFyeSIKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAiZW5kIikgYW5kIHNlbGYuZW5kICE9IDA6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWVuZD0lcyIgJSBzZWxmLmVuZAorICAgICAgICBpZiBzZWxmLmZzdHlwZSAhPSAiIjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tZnN0eXBlPVwiJXNcIiIgJSBzZWxmLmZzdHlwZQorICAgICAgICBpZiBzZWxmLmdyb3c6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWdyb3ciCisgICAgICAgIGlmIHNlbGYubWF4U2l6ZU1CID4gMDoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tbWF4c2l6ZT0lZCIgJSBzZWxmLm1heFNpemVNQgorICAgICAgICBpZiBub3Qgc2VsZi5mb3JtYXQ6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLW5vZm9ybWF0IgorICAgICAgICBpZiBzZWxmLm9uYmlvc2Rpc2sgIT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLW9uYmlvc2Rpc2s9JXMiICUgc2VsZi5vbmJpb3NkaXNrCisgICAgICAgIGlmIHNlbGYuZGlzayAhPSAiIjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tb25kaXNrPSVzIiAlIHNlbGYuZGlzaworICAgICAgICBpZiBzZWxmLm9uUGFydCAhPSAiIjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tb25wYXJ0PSVzIiAlIHNlbGYub25QYXJ0CisgICAgICAgIGlmIHNlbGYucmVjb21tZW5kZWQ6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLXJlY29tbWVuZGVkIgorICAgICAgICBpZiBzZWxmLnNpemUgYW5kIHNlbGYuc2l6ZSAhPSAwOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1zaXplPSVzayIgJSBzZWxmLnNpemUKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAic3RhcnQiKSBhbmQgc2VsZi5zdGFydCAhPSAwOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1zdGFydD0lcyIgJSBzZWxmLnN0YXJ0CisKKyAgICAgICAgcmV0dXJuIHJldHZhbAorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHZhbCA9IEJhc2VEYXRhLl9fc3RyX18oc2VsZikKKyAgICAgICAgaWYgc2VsZi5tb3VudHBvaW50OgorICAgICAgICAgICAgbW91bnRwb2ludF9zdHIgPSAiJXMiICUgc2VsZi5tb3VudHBvaW50CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtb3VudHBvaW50X3N0ciA9ICIoTm8gbW91bnQgcG9pbnQpIgorICAgICAgICByZXR2YWwgKz0gInBhcnQgJXMlc1xuIiAlIChtb3VudHBvaW50X3N0ciwgc2VsZi5fZ2V0QXJnc0FzU3RyKCkpCisgICAgICAgIHJldHVybiByZXR2YWwKKworY2xhc3MgRkM0X1BhcnREYXRhKEZDM19QYXJ0RGF0YSk6CisgICAgcmVtb3ZlZEtleXdvcmRzID0gRkMzX1BhcnREYXRhLnJlbW92ZWRLZXl3b3JkcworICAgIHJlbW92ZWRBdHRycyA9IEZDM19QYXJ0RGF0YS5yZW1vdmVkQXR0cnMKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBGQzNfUGFydERhdGEuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmJ5dGVzUGVySW5vZGUgPSBrd2FyZ3MuZ2V0KCJieXRlc1Blcklub2RlIiwgNDA5NikKKyAgICAgICAgc2VsZi5mc29wdHMgPSBrd2FyZ3MuZ2V0KCJmc29wdHMiLCAiIikKKyAgICAgICAgc2VsZi5sYWJlbCA9IGt3YXJncy5nZXQoImxhYmVsIiwgIiIpCisKKyAgICBkZWYgX2dldEFyZ3NBc1N0cihzZWxmKToKKyAgICAgICAgcmV0dmFsID0gRkMzX1BhcnREYXRhLl9nZXRBcmdzQXNTdHIoc2VsZikKKworICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICJieXRlc1Blcklub2RlIikgYW5kIHNlbGYuYnl0ZXNQZXJJbm9kZSAhPSAwOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1ieXRlcy1wZXItaW5vZGU9JWQiICUgc2VsZi5ieXRlc1Blcklub2RlCisgICAgICAgIGlmIHNlbGYuZnNvcHRzICE9ICIiOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1mc29wdGlvbnM9XCIlc1wiIiAlIHNlbGYuZnNvcHRzCisgICAgICAgIGlmIHNlbGYubGFiZWwgIT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWxhYmVsPSVzIiAlIHNlbGYubGFiZWwKKworICAgICAgICByZXR1cm4gcmV0dmFsCisKK2NsYXNzIEY5X1BhcnREYXRhKEZDNF9QYXJ0RGF0YSk6CisgICAgcmVtb3ZlZEtleXdvcmRzID0gRkM0X1BhcnREYXRhLnJlbW92ZWRLZXl3b3JkcyArIFsiYnl0ZXNQZXJJbm9kZSJdCisgICAgcmVtb3ZlZEF0dHJzID0gRkM0X1BhcnREYXRhLnJlbW92ZWRBdHRycyArIFsiYnl0ZXNQZXJJbm9kZSJdCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgRkM0X1BhcnREYXRhLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5kZWxldGVSZW1vdmVkQXR0cnMoKQorCisgICAgICAgIHNlbGYuZnNvcHRzID0ga3dhcmdzLmdldCgiZnNvcHRzIiwgIiIpCisgICAgICAgIHNlbGYubGFiZWwgPSBrd2FyZ3MuZ2V0KCJsYWJlbCIsICIiKQorICAgICAgICBzZWxmLmZzcHJvZmlsZSA9IGt3YXJncy5nZXQoImZzcHJvZmlsZSIsICIiKQorICAgICAgICBzZWxmLmVuY3J5cHRlZCA9IGt3YXJncy5nZXQoImVuY3J5cHRlZCIsIEZhbHNlKQorICAgICAgICBzZWxmLnBhc3NwaHJhc2UgPSBrd2FyZ3MuZ2V0KCJwYXNzcGhyYXNlIiwgIiIpCisKKyAgICBkZWYgX2dldEFyZ3NBc1N0cihzZWxmKToKKyAgICAgICAgcmV0dmFsID0gRkM0X1BhcnREYXRhLl9nZXRBcmdzQXNTdHIoc2VsZikKKworICAgICAgICBpZiBzZWxmLmZzcHJvZmlsZSAhPSAiIjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tZnNwcm9maWxlPVwiJXNcIiIgJSBzZWxmLmZzcHJvZmlsZQorICAgICAgICBpZiBzZWxmLmVuY3J5cHRlZDoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tZW5jcnlwdGVkIgorCisgICAgICAgICAgICBpZiBzZWxmLnBhc3NwaHJhc2UgIT0gIiI6CisgICAgICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1wYXNzcGhyYXNlPVwiJXNcIiIgJSBzZWxmLnBhc3NwaHJhc2UKKworICAgICAgICByZXR1cm4gcmV0dmFsCisKK2NsYXNzIEYxMV9QYXJ0RGF0YShGOV9QYXJ0RGF0YSk6CisgICAgcmVtb3ZlZEtleXdvcmRzID0gRjlfUGFydERhdGEucmVtb3ZlZEtleXdvcmRzICsgWyJzdGFydCIsICJlbmQiXQorICAgIHJlbW92ZWRBdHRycyA9IEY5X1BhcnREYXRhLnJlbW92ZWRBdHRycyArIFsic3RhcnQiLCAiZW5kIl0KKworY2xhc3MgRjEyX1BhcnREYXRhKEYxMV9QYXJ0RGF0YSk6CisgICAgcmVtb3ZlZEtleXdvcmRzID0gRjExX1BhcnREYXRhLnJlbW92ZWRLZXl3b3JkcworICAgIHJlbW92ZWRBdHRycyA9IEYxMV9QYXJ0RGF0YS5yZW1vdmVkQXR0cnMKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBGMTFfUGFydERhdGEuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgICAgIHNlbGYuZXNjcm93Y2VydCA9IGt3YXJncy5nZXQoImVzY3Jvd2NlcnQiLCAiIikKKyAgICAgICAgc2VsZi5iYWNrdXBwYXNzcGhyYXNlID0ga3dhcmdzLmdldCgiYmFja3VwcGFzc3BocmFzZSIsIEZhbHNlKQorCisgICAgZGVmIF9nZXRBcmdzQXNTdHIoc2VsZik6CisgICAgICAgIHJldHZhbCA9IEYxMV9QYXJ0RGF0YS5fZ2V0QXJnc0FzU3RyKHNlbGYpCisKKyAgICAgICAgaWYgc2VsZi5lbmNyeXB0ZWQgYW5kIHNlbGYuZXNjcm93Y2VydCAhPSAiIjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tZXNjcm93Y2VydD1cIiVzXCIiICUgc2VsZi5lc2Nyb3djZXJ0CisKKyAgICAgICAgICAgIGlmIHNlbGYuYmFja3VwcGFzc3BocmFzZToKKyAgICAgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWJhY2t1cHBhc3NwaHJhc2UiCisKKyAgICAgICAgcmV0dXJuIHJldHZhbAorCitGMTRfUGFydERhdGEgPSBGMTJfUGFydERhdGEKKworY2xhc3MgRkMzX1BhcnRpdGlvbihLaWNrc3RhcnRDb21tYW5kKToKKyAgICByZW1vdmVkS2V5d29yZHMgPSBLaWNrc3RhcnRDb21tYW5kLnJlbW92ZWRLZXl3b3JkcworICAgIHJlbW92ZWRBdHRycyA9IEtpY2tzdGFydENvbW1hbmQucmVtb3ZlZEF0dHJzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eT0xMzAsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIEtpY2tzdGFydENvbW1hbmQuX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eSwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLm9wID0gc2VsZi5fZ2V0UGFyc2VyKCkKKworICAgICAgICBzZWxmLnBhcnRpdGlvbnMgPSBrd2FyZ3MuZ2V0KCJwYXJ0aXRpb25zIiwgW10pCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dmFsID0gIiIKKworICAgICAgICBmb3IgcGFydCBpbiBzZWxmLnBhcnRpdGlvbnM6CisgICAgICAgICAgICByZXR2YWwgKz0gcGFydC5fX3N0cl9fKCkKKworICAgICAgICBpZiByZXR2YWwgIT0gIiI6CisgICAgICAgICAgICByZXR1cm4gIiMgRGlzayBwYXJ0aXRpb25pbmcgaW5mb3JtYXRpb25cbiIgKyByZXR2YWwKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiIgorCisgICAgZGVmIF9nZXRQYXJzZXIoc2VsZik6CisgICAgICAgIGRlZiBwYXJ0X2NiIChvcHRpb24sIG9wdF9zdHIsIHZhbHVlLCBwYXJzZXIpOgorICAgICAgICAgICAgaWYgdmFsdWUuc3RhcnRzd2l0aCgiL2Rldi8iKToKKyAgICAgICAgICAgICAgICBwYXJzZXIudmFsdWVzLmVuc3VyZV92YWx1ZShvcHRpb24uZGVzdCwgdmFsdWVbNTpdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXJzZXIudmFsdWVzLmVuc3VyZV92YWx1ZShvcHRpb24uZGVzdCwgdmFsdWUpCisKKyAgICAgICAgb3AgPSBLU09wdGlvblBhcnNlcigpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tYWN0aXZlIiwgZGVzdD0iYWN0aXZlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWFzcHJpbWFyeSIsIGRlc3Q9InByaW1Pbmx5IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWVuZCIsIGRlc3Q9ImVuZCIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPSJpbnQiLAorICAgICAgICAgICAgICAgICAgICAgIG5hcmdzPTEpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tZnN0eXBlIiwgIi0tdHlwZSIsIGRlc3Q9ImZzdHlwZSIpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tZ3JvdyIsIGRlc3Q9Imdyb3ciLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLW1heHNpemUiLCBkZXN0PSJtYXhTaXplTUIiLCBhY3Rpb249InN0b3JlIiwgdHlwZT0iaW50IiwKKyAgICAgICAgICAgICAgICAgICAgICBuYXJncz0xKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLW5vZm9ybWF0IiwgZGVzdD0iZm9ybWF0IiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1UcnVlKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLW9uYmlvc2Rpc2siLCBkZXN0PSJvbmJpb3NkaXNrIikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1vbmRpc2siLCAiLS1vbmRyaXZlIiwgZGVzdD0iZGlzayIpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tb25wYXJ0IiwgIi0tdXNlcGFydCIsIGRlc3Q9Im9uUGFydCIsIGFjdGlvbj0iY2FsbGJhY2siLAorICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrPXBhcnRfY2IsIG5hcmdzPTEsIHR5cGU9InN0cmluZyIpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tcmVjb21tZW5kZWQiLCBkZXN0PSJyZWNvbW1lbmRlZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1zaXplIiwgZGVzdD0ic2l6ZSIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPSJzaXplIiwKKyAgICAgICAgICAgICAgICAgICAgICBuYXJncz0xKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLXN0YXJ0IiwgZGVzdD0ic3RhcnQiLCBhY3Rpb249InN0b3JlIiwgdHlwZT0iaW50IiwKKyAgICAgICAgICAgICAgICAgICAgICBuYXJncz0xKQorICAgICAgICByZXR1cm4gb3AKKworICAgIGRlZiBwYXJzZShzZWxmLCBhcmdzKToKKyAgICAgICAgKG9wdHMsIGV4dHJhKSA9IHNlbGYub3AucGFyc2VfYXJncyhhcmdzPWFyZ3MsIGxpbmVubz1zZWxmLmxpbmVubykKKworICAgICAgICBwZCA9IHNlbGYuaGFuZGxlci5QYXJ0RGF0YSgpCisgICAgICAgIHNlbGYuX3NldFRvT2JqKHNlbGYub3AsIG9wdHMsIHBkKQorICAgICAgICBwZC5saW5lbm8gPSBzZWxmLmxpbmVubworICAgICAgICBpZiBleHRyYToKKyAgICAgICAgICAgIHBkLm1vdW50cG9pbnQgPSBleHRyYVswXQorICAgICAgICAgICAgaWYgcGQgaW4gc2VsZi5kYXRhTGlzdCgpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oXygiQSBwYXJ0aXRpb24gd2l0aCB0aGUgbW91bnRwb2ludCAlcyBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQuIikgJSBwZC5tb3VudHBvaW50KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGQubW91bnRwb2ludCA9IE5vbmUKKworICAgICAgICByZXR1cm4gcGQKKworICAgIGRlZiBkYXRhTGlzdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucGFydGl0aW9ucworCitjbGFzcyBGQzRfUGFydGl0aW9uKEZDM19QYXJ0aXRpb24pOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEZDM19QYXJ0aXRpb24ucmVtb3ZlZEtleXdvcmRzCisgICAgcmVtb3ZlZEF0dHJzID0gRkMzX1BhcnRpdGlvbi5yZW1vdmVkQXR0cnMKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3cml0ZVByaW9yaXR5PTEzMCwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgRkMzX1BhcnRpdGlvbi5fX2luaXRfXyhzZWxmLCB3cml0ZVByaW9yaXR5LCAqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgZGVmIHBhcnRfY2IgKG9wdGlvbiwgb3B0X3N0ciwgdmFsdWUsIHBhcnNlcik6CisgICAgICAgICAgICBpZiB2YWx1ZS5zdGFydHN3aXRoKCIvZGV2LyIpOgorICAgICAgICAgICAgICAgIHBhcnNlci52YWx1ZXMuZW5zdXJlX3ZhbHVlKG9wdGlvbi5kZXN0LCB2YWx1ZVs1Ol0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhcnNlci52YWx1ZXMuZW5zdXJlX3ZhbHVlKG9wdGlvbi5kZXN0LCB2YWx1ZSkKKworICAgIGRlZiBfZ2V0UGFyc2VyKHNlbGYpOgorICAgICAgICBvcCA9IEZDM19QYXJ0aXRpb24uX2dldFBhcnNlcihzZWxmKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWJ5dGVzLXBlci1pbm9kZSIsIGRlc3Q9ImJ5dGVzUGVySW5vZGUiLCBhY3Rpb249InN0b3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJpbnQiLCBuYXJncz0xKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWZzb3B0aW9ucyIsIGRlc3Q9ImZzb3B0cyIpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tbGFiZWwiLCBkZXN0PSJsYWJlbCIpCisgICAgICAgIHJldHVybiBvcAorCitjbGFzcyBGOV9QYXJ0aXRpb24oRkM0X1BhcnRpdGlvbik6CisgICAgcmVtb3ZlZEtleXdvcmRzID0gRkM0X1BhcnRpdGlvbi5yZW1vdmVkS2V5d29yZHMKKyAgICByZW1vdmVkQXR0cnMgPSBGQzRfUGFydGl0aW9uLnJlbW92ZWRBdHRycworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHk9MTMwLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBGQzRfUGFydGl0aW9uLl9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHksICphcmdzLCAqKmt3YXJncykKKworICAgICAgICBkZWYgcGFydF9jYiAob3B0aW9uLCBvcHRfc3RyLCB2YWx1ZSwgcGFyc2VyKToKKyAgICAgICAgICAgIGlmIHZhbHVlLnN0YXJ0c3dpdGgoIi9kZXYvIik6CisgICAgICAgICAgICAgICAgcGFyc2VyLnZhbHVlcy5lbnN1cmVfdmFsdWUob3B0aW9uLmRlc3QsIHZhbHVlWzU6XSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFyc2VyLnZhbHVlcy5lbnN1cmVfdmFsdWUob3B0aW9uLmRlc3QsIHZhbHVlKQorCisgICAgZGVmIF9nZXRQYXJzZXIoc2VsZik6CisgICAgICAgIG9wID0gRkM0X1BhcnRpdGlvbi5fZ2V0UGFyc2VyKHNlbGYpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tYnl0ZXMtcGVyLWlub2RlIiwgZGVwcmVjYXRlZD0xKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWZzcHJvZmlsZSIpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tZW5jcnlwdGVkIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1wYXNzcGhyYXNlIikKKyAgICAgICAgcmV0dXJuIG9wCisKK2NsYXNzIEYxMV9QYXJ0aXRpb24oRjlfUGFydGl0aW9uKToKKyAgICByZW1vdmVkS2V5d29yZHMgPSBGOV9QYXJ0aXRpb24ucmVtb3ZlZEtleXdvcmRzCisgICAgcmVtb3ZlZEF0dHJzID0gRjlfUGFydGl0aW9uLnJlbW92ZWRBdHRycworCisgICAgZGVmIF9nZXRQYXJzZXIoc2VsZik6CisgICAgICAgIG9wID0gRjlfUGFydGl0aW9uLl9nZXRQYXJzZXIoc2VsZikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1zdGFydCIsIGRlcHJlY2F0ZWQ9MSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1lbmQiLCBkZXByZWNhdGVkPTEpCisgICAgICAgIHJldHVybiBvcAorCitjbGFzcyBGMTJfUGFydGl0aW9uKEYxMV9QYXJ0aXRpb24pOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEYxMV9QYXJ0aXRpb24ucmVtb3ZlZEtleXdvcmRzCisgICAgcmVtb3ZlZEF0dHJzID0gRjExX1BhcnRpdGlvbi5yZW1vdmVkQXR0cnMKKworICAgIGRlZiBfZ2V0UGFyc2VyKHNlbGYpOgorICAgICAgICBvcCA9IEYxMV9QYXJ0aXRpb24uX2dldFBhcnNlcihzZWxmKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWVzY3Jvd2NlcnQiKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWJhY2t1cHBhc3NwaHJhc2UiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlKQorICAgICAgICByZXR1cm4gb3AKKworY2xhc3MgRjE0X1BhcnRpdGlvbihGMTJfUGFydGl0aW9uKToKKyAgICByZW1vdmVkS2V5d29yZHMgPSBGMTJfUGFydGl0aW9uLnJlbW92ZWRLZXl3b3JkcworICAgIHJlbW92ZWRBdHRycyA9IEYxMl9QYXJ0aXRpb24ucmVtb3ZlZEF0dHJzCisKKyAgICBkZWYgX2dldFBhcnNlcihzZWxmKToKKyAgICAgICAgb3AgPSBGMTJfUGFydGl0aW9uLl9nZXRQYXJzZXIoc2VsZikKKyAgICAgICAgb3AucmVtb3ZlX29wdGlvbigiLS1ieXRlcy1wZXItaW5vZGUiKQorICAgICAgICBvcC5yZW1vdmVfb3B0aW9uKCItLXN0YXJ0IikKKyAgICAgICAgb3AucmVtb3ZlX29wdGlvbigiLS1lbmQiKQorICAgICAgICByZXR1cm4gb3AKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2NvbnN0YW50cy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2NvbnN0YW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTEyZmM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvY29uc3RhbnRzLnB5CkBAIC0wLDAgKzEsNTcgQEAKKyMKKyMgQ2hyaXMgTHVtZW5zIDxjbHVtZW5zQHJlZGhhdC5jb20+CisjCisjIENvcHlyaWdodCAyMDA1LTIwMDcgUmVkIEhhdCwgSW5jLgorIworIyBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwgbW9kaWZ5LAorIyBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYuMi4gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0CisjIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFkgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZyB0aGUKKyMgaW1wbGllZCB3YXJyYW50aWVzIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisjIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MQorIyBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gIEFueSBSZWQgSGF0CisjIHRyYWRlbWFya3MgdGhhdCBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZSBzb3VyY2UgY29kZSBvciBkb2N1bWVudGF0aW9uIGFyZSBub3QKKyMgc3ViamVjdCB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIG1heSBvbmx5IGJlIHVzZWQgb3IgcmVwbGljYXRlZAorIyB3aXRoIHRoZSBleHByZXNzIHBlcm1pc3Npb24gb2YgUmVkIEhhdCwgSW5jLiAKKyMKK0NMRUFSUEFSVF9UWVBFX0xJTlVYID0gMAorQ0xFQVJQQVJUX1RZUEVfQUxMID0gMQorQ0xFQVJQQVJUX1RZUEVfTk9ORSA9IDIKKworRElTUExBWV9NT0RFX0NNRExJTkUgPSAwCitESVNQTEFZX01PREVfR1JBUEhJQ0FMID0gMQorRElTUExBWV9NT0RFX1RFWFQgPSAyCisKK0ZJUlNUQk9PVF9ERUZBVUxUID0gMAorRklSU1RCT09UX1NLSVAgPSAxCitGSVJTVEJPT1RfUkVDT05GSUcgPSAyCisKK0tTX01JU1NJTkdfUFJPTVBUID0gMAorS1NfTUlTU0lOR19JR05PUkUgPSAxCisKK1NFTElOVVhfRElTQUJMRUQgPSAwCitTRUxJTlVYX0VORk9SQ0lORyA9IDEKK1NFTElOVVhfUEVSTUlTU0lWRSA9IDIKKworS1NfU0NSSVBUX1BSRSA9IDAKK0tTX1NDUklQVF9QT1NUID0gMQorS1NfU0NSSVBUX1RSQUNFQkFDSyA9IDIKKworS1NfV0FJVCA9IDAKK0tTX1JFQk9PVCA9IDEKK0tTX1NIVVRET1dOID0gMgorCitLU19JTlNUS0VZX1NLSVAgPSAtOTkKKworQk9PVFBST1RPX0RIQ1AgPSAiZGhjcCIKK0JPT1RQUk9UT19CT09UUCA9ICJib290cCIKK0JPT1RQUk9UT19TVEFUSUMgPSAic3RhdGljIgorQk9PVFBST1RPX1FVRVJZID0gInF1ZXJ5IgorQk9PVFBST1RPX0lCRlQgPSAiaWJmdCIKKworR1JPVVBfUkVRVUlSRUQgPSAwCitHUk9VUF9ERUZBVUxUID0gMQorR1JPVVBfQUxMID0gMgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvZXJyb3JzLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvZXJyb3JzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMzRkOTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9lcnJvcnMucHkKQEAgLTAsMCArMSwxMDMgQEAKKyMKKyMgZXJyb3JzLnB5OiAgS2lja3N0YXJ0IGVycm9yIGhhbmRsaW5nLgorIworIyBDaHJpcyBMdW1lbnMgPGNsdW1lbnNAcmVkaGF0LmNvbT4KKyMKKyMgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsIG1vZGlmeSwKKyMgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2LjIuICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAorIyB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlCisjIGltcGxpZWQgd2FycmFudGllcyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEKKyMgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICBBbnkgUmVkIEhhdAorIyB0cmFkZW1hcmtzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGUgc291cmNlIGNvZGUgb3IgZG9jdW1lbnRhdGlvbiBhcmUgbm90CisjIHN1YmplY3QgdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCBtYXkgb25seSBiZSB1c2VkIG9yIHJlcGxpY2F0ZWQKKyMgd2l0aCB0aGUgZXhwcmVzcyBwZXJtaXNzaW9uIG9mIFJlZCBIYXQsIEluYy4gCisjCisiIiIKK0Vycm9yIGhhbmRsaW5nIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucy4KKworVGhpcyBtb2R1bGUgZXhwb3J0cyBhIHNpbmdsZSBmdW5jdGlvbjoKKworICAgIGZvcm1hdEVycm9yTXNnIC0gUHJvcGVybHkgZm9ybWF0cyBhbiBlcnJvciBtZXNzYWdlLgorCitJdCBhbHNvIGV4cG9ydHMgc2V2ZXJhbCBleGNlcHRpb24gY2xhc3NlczoKKworICAgIEtpY2tzdGFydEVycm9yIC0gQSBnZW5lcmljIGV4Y2VwdGlvbiBjbGFzcy4KKworICAgIEtpY2tzdGFydFBhcnNlRXJyb3IgLSBBbiBleGNlcHRpb24gZm9yIGVycm9ycyByZWxhdGluZyB0byBwYXJzaW5nLgorCisgICAgS2lja3N0YXJ0VmFsdWVFcnJvciAtIEFuIGV4Y2VwdGlvbiBmb3IgZXJyb3JzIHJlbGF0aW5nIHRvIG9wdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nLgorCisgICAgS2lja3N0YXJ0VmVyc2lvbkVycm9yIC0gQW4gZXhjZXB0aW9uIGZvciBlcnJvcnMgcmVsYXRpbmcgdG8gdW5zdXBwb3J0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW50YXggdmVyc2lvbnMuCisiIiIKK2ltcG9ydCBnZXR0ZXh0CitfID0gbGFtYmRhIHg6IGdldHRleHQubGRnZXR0ZXh0KCJweWtpY2tzdGFydCIsIHgpCisKK2RlZiBmb3JtYXRFcnJvck1zZyhsaW5lbm8sIG1zZz0iIik6CisgICAgIiIiUHJvcGVybHkgZm9ybWF0IHRoZSBlcnJvciBtZXNzYWdlIG1zZyBmb3IgaW5jbHVzaW9uIGluIGFuIGV4Y2VwdGlvbi4iIiIKKyAgICBpZiBtc2cgIT0gIiI6CisgICAgICAgIG1hcHBpbmcgPSB7ImxpbmVubyI6IGxpbmVubywgIm1zZyI6IG1zZ30KKyAgICAgICAgcmV0dXJuIF8oIlRoZSBmb2xsb3dpbmcgcHJvYmxlbSBvY2N1cnJlZCBvbiBsaW5lICUobGluZW5vKXMgb2YgdGhlIGtpY2tzdGFydCBmaWxlOlxuXG4lKG1zZylzXG4iKSAlIG1hcHBpbmcKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gXygiVGhlcmUgd2FzIGEgcHJvYmxlbSByZWFkaW5nIGZyb20gbGluZSAlcyBvZiB0aGUga2lja3N0YXJ0IGZpbGUiKSAlIGxpbmVubworCitjbGFzcyBLaWNrc3RhcnRFcnJvcihFeGNlcHRpb24pOgorICAgICIiIkEgZ2VuZXJpYyBleGNlcHRpb24gY2xhc3MgZm9yIHVuc3BlY2lmaWMgZXJyb3IgY29uZGl0aW9ucy4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsID0gIiIpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgS2lja3N0YXJ0RXJyb3IgZXhjZXB0aW9uIGluc3RhbmNlIHdpdGggdGhlIGRlc2NyaXB0aXZlCisgICAgICAgICAgIG1lc3NhZ2UgdmFsLiAgdmFsIHNob3VsZCBiZSB0aGUgcmV0dXJuIHZhbHVlIG9mIGZvcm1hdEVycm9yTXNnLgorICAgICAgICAiIiIKKyAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYudmFsdWUgPSB2YWwKKworICAgIGRlZiBfX3N0cl9fIChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKKworY2xhc3MgS2lja3N0YXJ0UGFyc2VFcnJvcihLaWNrc3RhcnRFcnJvcik6CisgICAgIiIiQW4gZXhjZXB0aW9uIGNsYXNzIGZvciBlcnJvcnMgd2hlbiBwcm9jZXNzaW5nIHRoZSBpbnB1dCBmaWxlLCBzdWNoIGFzCisgICAgICAgdW5rbm93biBvcHRpb25zLCBjb21tYW5kcywgb3Igc2VjdGlvbnMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZyk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBLaWNrc3RhcnRQYXJzZUVycm9yIGV4Y2VwdGlvbiBpbnN0YW5jZSB3aXRoIHRoZQorICAgICAgICAgICBkZXNjcmlwdGl2ZSBtZXNzYWdlIHZhbC4gIHZhbCBzaG91bGQgYmUgdGhlIHJldHVybiB2YWx1ZSBvZgorICAgICAgICAgICBmb3JtYXRFcnJvck1zZy4KKyAgICAgICAgIiIiCisgICAgICAgIEtpY2tzdGFydEVycm9yLl9faW5pdF9fKHNlbGYsIG1zZykKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorCitjbGFzcyBLaWNrc3RhcnRWYWx1ZUVycm9yKEtpY2tzdGFydEVycm9yKToKKyAgICAiIiJBbiBleGNlcHRpb24gY2xhc3MgZm9yIGVycm9ycyB3aGVuIHByb2Nlc3NpbmcgYXJndW1lbnRzIHRvIGNvbW1hbmRzLAorICAgICAgIHN1Y2ggYXMgdG9vIG1hbnkgYXJndW1lbnRzLCB0b28gZmV3IGFyZ3VtZW50cywgb3IgbWlzc2luZyByZXF1aXJlZAorICAgICAgIGFyZ3VtZW50cy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbXNnKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IEtpY2tzdGFydFZhbHVlRXJyb3IgZXhjZXB0aW9uIGluc3RhbmNlIHdpdGggdGhlCisgICAgICAgICAgIGRlc2NyaXB0aXZlIG1lc3NhZ2UgdmFsLiAgdmFsIHNob3VsZCBiZSB0aGUgcmV0dXJuIHZhbHVlIG9mCisgICAgICAgICAgIGZvcm1hdEVycm9yTXNnLgorICAgICAgICAiIiIKKyAgICAgICAgS2lja3N0YXJ0RXJyb3IuX19pbml0X18oc2VsZiwgbXNnKQorCisgICAgZGVmIF9fc3RyX18gKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorCitjbGFzcyBLaWNrc3RhcnRWZXJzaW9uRXJyb3IoS2lja3N0YXJ0RXJyb3IpOgorICAgICIiIkFuIGV4Y2VwdGlvbiBjbGFzcyBmb3IgZXJyb3JzIHJlbGF0ZWQgdG8gdXNpbmcgYW4gaW5jb3JyZWN0IHZlcnNpb24gb2YKKyAgICAgICBraWNrc3RhcnQgc3ludGF4LgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2cpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgS2lja3N0YXJ0VmVyc2lvbkVycm9yIGV4Y2VwdGlvbiBpbnN0YW5jZSB3aXRoIHRoZQorICAgICAgICAgICBkZXNjcmlwdGl2ZSBtZXNzYWdlIHZhbC4gIHZhbCBzaG91bGQgYmUgdGhlIHJldHVybiB2YWx1ZSBvZgorICAgICAgICAgICBmb3JtYXRFcnJvck1zZy4KKyAgICAgICAgIiIiCisgICAgICAgIEtpY2tzdGFydEVycm9yLl9faW5pdF9fKHNlbGYsIG1zZykKKworICAgIGRlZiBfX3N0cl9fIChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2hhbmRsZXJzL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvaGFuZGxlcnMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2hhbmRsZXJzL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9oYW5kbGVycy9jb250cm9sLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvaGFuZGxlcnMvY29udHJvbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGM4MGQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvaGFuZGxlcnMvY29udHJvbC5weQpAQCAtMCwwICsxLDQ2IEBACisjCisjIENocmlzIEx1bWVucyA8Y2x1bWVuc0ByZWRoYXQuY29tPgorIworIyBDb3B5cmlnaHQgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBSZWQgSGF0LCBJbmMuCisjCisjIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLCBtb2RpZnksCisjIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugdi4yLiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKKyMgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nIHRoZQorIyBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxCisjIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgQW55IFJlZCBIYXQKKyMgdHJhZGVtYXJrcyB0aGF0IGFyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlIHNvdXJjZSBjb2RlIG9yIGRvY3VtZW50YXRpb24gYXJlIG5vdAorIyBzdWJqZWN0IHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgbWF5IG9ubHkgYmUgdXNlZCBvciByZXBsaWNhdGVkCisjIHdpdGggdGhlIGV4cHJlc3MgcGVybWlzc2lvbiBvZiBSZWQgSGF0LCBJbmMuIAorIworZnJvbSBweWtpY2tzdGFydC52ZXJzaW9uIGltcG9ydCAqCitmcm9tIHB5a2lja3N0YXJ0LmNvbW1hbmRzIGltcG9ydCAqCisKKyMgVGhpcyBtYXAgaXMga2V5ZWQgb24ga2lja3N0YXJ0IHN5bnRheCB2ZXJzaW9uIGFzIHByb3ZpZGVkIGJ5CisjIHB5a2lja3N0YXJ0LnZlcnNpb24uICBXaXRoaW4gZWFjaCBzdWItZGljdCBpcyBhIG1hcHBpbmcgZnJvbSBjb21tYW5kIG5hbWUKKyMgdG8gdGhlIGNsYXNzIHRoYXQgaGFuZGxlcyBpdC4gIFRoaXMgaXMgYW4gb250byBtYXBwaW5nIC0gdGhhdCBpcywgbXVsdGlwbGUKKyMgY29tbWFuZCBuYW1lcyBjYW4gbWFwIHRvIHRoZSBzYW1lIGNsYXNzLiAgSG93ZXZlciwgdGhlIEhhbmRsZXIgd2lsbCBlbnN1cmUKKyMgdGhhdCBvbmx5IG9uZSBpbnN0YW5jZSBvZiBlYWNoIGNsYXNzIGV2ZXIgZXhpc3RzLgorY29tbWFuZE1hcCA9IHsKKyAgICAjIGJhc2VkIG9uIGYxNQorICAgIEYxNjogeworICAgICAgICAiYm9vdGxvYWRlciI6IGJvb3Rsb2FkZXIuRjE1X0Jvb3Rsb2FkZXIsCisgICAgICAgICJwYXJ0IjogcGFydGl0aW9uLkYxNF9QYXJ0aXRpb24sCisgICAgICAgICJwYXJ0aXRpb24iOiBwYXJ0aXRpb24uRjE0X1BhcnRpdGlvbiwKKyAgICB9LAorfQorCisjIFRoaXMgbWFwIGlzIGtleWVkIG9uIGtpY2tzdGFydCBzeW50YXggdmVyc2lvbiBhcyBwcm92aWRlZCBieQorIyBweWtpY2tzdGFydC52ZXJzaW9uLiAgV2l0aGluIGVhY2ggc3ViLWRpY3QgaXMgYSBtYXBwaW5nIGZyb20gYSBkYXRhIG9iamVjdAorIyBuYW1lIHRvIHRoZSBjbGFzcyB0aGF0IHByb3ZpZGVzIGl0LiAgVGhpcyBpcyBhIGJpamVjdGl2ZSBtYXBwaW5nIC0gdGhhdCBpcywKKyMgZWFjaCBuYW1lIG1hcHMgdG8gZXhhY3RseSBvbmUgZGF0YSBjbGFzcyBhbmQgYWxsIGRhdGEgY2xhc3NlcyBoYXZlIGEgbmFtZS4KKyMgTW9yZSB0aGFuIG9uZSBpbnN0YW5jZSBvZiBlYWNoIGNsYXNzIGlzIGFsbG93ZWQgdG8gZXhpc3QsIGhvd2V2ZXIuCitkYXRhTWFwID0geworICAgIEYxNjogeworICAgICAgICAiUGFydERhdGEiOiBwYXJ0aXRpb24uRjE0X1BhcnREYXRhLAorICAgIH0sCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9oYW5kbGVycy9mMTYucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9oYW5kbGVycy9mMTYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M1MmY4ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2hhbmRsZXJzL2YxNi5weQpAQCAtMCwwICsxLDI0IEBACisjCisjIENocmlzIEx1bWVucyA8Y2x1bWVuc0ByZWRoYXQuY29tPgorIworIyBDb3B5cmlnaHQgMjAxMSBSZWQgSGF0LCBJbmMuCisjCisjIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLCBtb2RpZnksCisjIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugdi4yLiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKKyMgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nIHRoZQorIyBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxCisjIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgQW55IFJlZCBIYXQKKyMgdHJhZGVtYXJrcyB0aGF0IGFyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlIHNvdXJjZSBjb2RlIG9yIGRvY3VtZW50YXRpb24gYXJlIG5vdAorIyBzdWJqZWN0IHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgbWF5IG9ubHkgYmUgdXNlZCBvciByZXBsaWNhdGVkCisjIHdpdGggdGhlIGV4cHJlc3MgcGVybWlzc2lvbiBvZiBSZWQgSGF0LCBJbmMuIAorIworZnJvbSBweWtpY2tzdGFydC5iYXNlIGltcG9ydCAqCitmcm9tIHB5a2lja3N0YXJ0LnZlcnNpb24gaW1wb3J0ICoKKworY2xhc3MgRjE2SGFuZGxlcihCYXNlSGFuZGxlcik6CisgICAgdmVyc2lvbiA9IEYxNgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQva28ucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9rby5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzUwZDE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQva28ucHkKQEAgLTAsMCArMSwzNyBAQAorIworIyBDaHJpcyBMdW1lbnMgPGNsdW1lbnNAcmVkaGF0LmNvbT4KKyMKKyMgQ29weXJpZ2h0IDIwMDkgUmVkIEhhdCwgSW5jLgorIworIyBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwgbW9kaWZ5LAorIyBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYuMi4gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0CisjIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFkgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZyB0aGUKKyMgaW1wbGllZCB3YXJyYW50aWVzIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisjIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MQorIyBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gIEFueSBSZWQgSGF0CisjIHRyYWRlbWFya3MgdGhhdCBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZSBzb3VyY2UgY29kZSBvciBkb2N1bWVudGF0aW9uIGFyZSBub3QKKyMgc3ViamVjdCB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIG1heSBvbmx5IGJlIHVzZWQgb3IgcmVwbGljYXRlZAorIyB3aXRoIHRoZSBleHByZXNzIHBlcm1pc3Npb24gb2YgUmVkIEhhdCwgSW5jLiAKKyMKKyIiIgorQmFzZSBjbGFzc2VzIGZvciBpbnRlcm5hbCBweWtpY2tzdGFydCB1c2UuCisKK1RoZSBtb2R1bGUgZXhwb3J0cyB0aGUgZm9sbG93aW5nIGltcG9ydGFudCBjbGFzc2VzOgorCisgICAgS2lja3N0YXJ0T2JqZWN0IC0gVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBjbGFzc2VzIGluIHB5a2lja3N0YXJ0CisiIiIKKworY2xhc3MgS2lja3N0YXJ0T2JqZWN0KG9iamVjdCk6CisgICAgIiIiVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBvdGhlciBjbGFzc2VzIGluIHB5a2lja3N0YXJ0LiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgS2lja3N0YXJ0T2JqZWN0IGluc3RhbmNlLiAgQWxsIG90aGVyIGNsYXNzZXMgaW4KKyAgICAgICAgICAgcHlraWNrc3RhcnQgc2hvdWxkIGJlIGRlcml2ZWQgZnJvbSB0aGlzIG9uZS4gIEluc3RhbmNlIGF0dHJpYnV0ZXM6CisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9vcHRpb25zLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvb3B0aW9ucy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmMyM2VkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvb3B0aW9ucy5weQpAQCAtMCwwICsxLDIyMyBAQAorIworIyBDaHJpcyBMdW1lbnMgPGNsdW1lbnNAcmVkaGF0LmNvbT4KKyMKKyMgQ29weXJpZ2h0IDIwMDUsIDIwMDYsIDIwMDcgUmVkIEhhdCwgSW5jLgorIworIyBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwgbW9kaWZ5LAorIyBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYuMi4gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0CisjIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFkgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZyB0aGUKKyMgaW1wbGllZCB3YXJyYW50aWVzIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisjIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MQorIyBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gIEFueSBSZWQgSGF0CisjIHRyYWRlbWFya3MgdGhhdCBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZSBzb3VyY2UgY29kZSBvciBkb2N1bWVudGF0aW9uIGFyZSBub3QKKyMgc3ViamVjdCB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIG1heSBvbmx5IGJlIHVzZWQgb3IgcmVwbGljYXRlZAorIyB3aXRoIHRoZSBleHByZXNzIHBlcm1pc3Npb24gb2YgUmVkIEhhdCwgSW5jLiAKKyMKKyIiIgorU3BlY2lhbGl6ZWQgb3B0aW9uIGhhbmRsaW5nLgorCitUaGlzIG1vZHVsZSBleHBvcnRzIHR3byBjbGFzc2VzOgorCisgICAgS1NPcHRpb25QYXJzZXIgLSBBIHNwZWNpYWxpemVkIHN1YmNsYXNzIG9mIE9wdGlvblBhcnNlciB0byBiZSB1c2VkCisgICAgICAgICAgICAgICAgICAgICBpbiBCYXNlSGFuZGxlciBzdWJjbGFzc2VzLgorCisgICAgS1NPcHRpb24gLSBBIHNwZWNpYWxpemVkIHN1YmNsYXNzIG9mIE9wdGlvbi4KKyIiIgoraW1wb3J0IHdhcm5pbmdzCitmcm9tIGNvcHkgaW1wb3J0IGNvcHkKK2Zyb20gb3B0cGFyc2UgaW1wb3J0ICoKKworZnJvbSBjb25zdGFudHMgaW1wb3J0ICoKK2Zyb20gZXJyb3JzIGltcG9ydCAqCitmcm9tIHZlcnNpb24gaW1wb3J0ICoKKworaW1wb3J0IGdldHRleHQKK18gPSBsYW1iZGEgeDogZ2V0dGV4dC5sZGdldHRleHQoInB5a2lja3N0YXJ0IiwgeCkKKworY2xhc3MgS1NPcHRpb25QYXJzZXIoT3B0aW9uUGFyc2VyKToKKyAgICAiIiJBIHNwZWNpYWxpemVkIHN1YmNsYXNzIG9mIG9wdHBhcnNlLk9wdGlvblBhcnNlciB0byBoYW5kbGUgZXh0cmEgb3B0aW9uCisgICAgICAgYXR0cmlidXRlIGNoZWNraW5nLCB3b3JrIGVycm9yIHJlcG9ydGluZyBpbnRvIHRoZSBLaWNrc3RhcnRQYXJzZUVycm9yCisgICAgICAgZnJhbWV3b3JrLCBhbmQgdG8gdHVybiBvZmYgdGhlIGRlZmF1bHQgaGVscC4KKyAgICAiIiIKKyAgICBkZWYgZXhpdChzZWxmLCBzdGF0dXM9MCwgbXNnPU5vbmUpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgZXJyb3Ioc2VsZiwgbXNnKToKKyAgICAgICAgaWYgc2VsZi5saW5lbm8gIT0gTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEtpY2tzdGFydFBhcnNlRXJyb3IsIGZvcm1hdEVycm9yTXNnKHNlbGYubGluZW5vLCBtc2c9bXNnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgS2lja3N0YXJ0UGFyc2VFcnJvciwgbXNnCisKKyAgICBkZWYga2V5cyhzZWxmKToKKyAgICAgICAgcmV0dmFsID0gW10KKworICAgICAgICBmb3Igb3B0IGluIHNlbGYub3B0aW9uX2xpc3Q6CisgICAgICAgICAgICBpZiBvcHQgbm90IGluIHJldHZhbDoKKyAgICAgICAgICAgICAgICByZXR2YWwuYXBwZW5kKG9wdC5kZXN0KQorCisgICAgICAgIHJldHVybiByZXR2YWwKKworICAgIGRlZiBfaW5pdF9wYXJzaW5nX3N0YXRlIChzZWxmKToKKyAgICAgICAgT3B0aW9uUGFyc2VyLl9pbml0X3BhcnNpbmdfc3RhdGUoc2VsZikKKyAgICAgICAgc2VsZi5vcHRpb25fc2VlbiA9IHt9CisKKyAgICBkZWYgY2hlY2tfdmFsdWVzIChzZWxmLCB2YWx1ZXMsIGFyZ3MpOgorICAgICAgICBkZWYgc2VlbihzZWxmLCBvcHRpb24pOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYub3B0aW9uX3NlZW4uaGFzX2tleShvcHRpb24pCisKKyAgICAgICAgZGVmIHVzZWRUb29OZXcoc2VsZiwgb3B0aW9uKToKKyAgICAgICAgICAgIHJldHVybiBvcHRpb24uaW50cm9kdWNlZCBhbmQgb3B0aW9uLmludHJvZHVjZWQgPiBzZWxmLnZlcnNpb24KKworICAgICAgICBkZWYgdXNlZERlcHJlY2F0ZWQoc2VsZiwgb3B0aW9uKToKKyAgICAgICAgICAgIHJldHVybiBvcHRpb24uZGVwcmVjYXRlZAorCisgICAgICAgIGRlZiB1c2VkUmVtb3ZlZChzZWxmLCBvcHRpb24pOgorICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi5yZW1vdmVkIGFuZCBvcHRpb24ucmVtb3ZlZCA8PSBzZWxmLnZlcnNpb24KKworICAgICAgICBmb3Igb3B0aW9uIGluIGZpbHRlcihsYW1iZGEgbzogaXNpbnN0YW5jZShvLCBPcHRpb24pLCBzZWxmLm9wdGlvbl9saXN0KToKKyAgICAgICAgICAgIGlmIG9wdGlvbi5yZXF1aXJlZCBhbmQgbm90IHNlZW4oc2VsZiwgb3B0aW9uKToKKyAgICAgICAgICAgICAgICByYWlzZSBLaWNrc3RhcnRWYWx1ZUVycm9yLCBmb3JtYXRFcnJvck1zZyhzZWxmLmxpbmVubywgXygiT3B0aW9uICVzIGlzIHJlcXVpcmVkIikgJSBvcHRpb24pCisgICAgICAgICAgICBlbGlmIHNlZW4oc2VsZiwgb3B0aW9uKSBhbmQgdXNlZFRvb05ldyhzZWxmLCBvcHRpb24pOgorICAgICAgICAgICAgICAgIG1hcHBpbmcgPSB7Im9wdGlvbiI6IG9wdGlvbiwgImludHJvIjogdmVyc2lvblRvU3RyaW5nKG9wdGlvbi5pbnRyb2R1Y2VkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2ZXJzaW9uIjogdmVyc2lvblRvU3RyaW5nKHNlbGYudmVyc2lvbil9CisgICAgICAgICAgICAgICAgc2VsZi5lcnJvcihfKCJUaGUgJShvcHRpb24pcyBvcHRpb24gd2FzIGludHJvZHVjZWQgaW4gdmVyc2lvbiAlKGludHJvKXMsIGJ1dCB5b3UgYXJlIHVzaW5nIGtpY2tzdGFydCBzeW50YXggdmVyc2lvbiAlKHZlcnNpb24pcy4iKSAlIG1hcHBpbmcpCisgICAgICAgICAgICBlbGlmIHNlZW4oc2VsZiwgb3B0aW9uKSBhbmQgdXNlZFJlbW92ZWQoc2VsZiwgb3B0aW9uKToKKyAgICAgICAgICAgICAgICBtYXBwaW5nID0geyJvcHRpb24iOiBvcHRpb24sICJyZW1vdmVkIjogdmVyc2lvblRvU3RyaW5nKG9wdGlvbi5yZW1vdmVkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2ZXJzaW9uIjogdmVyc2lvblRvU3RyaW5nKHNlbGYudmVyc2lvbil9CisKKyAgICAgICAgICAgICAgICBpZiBvcHRpb24ucmVtb3ZlZCA9PSBzZWxmLnZlcnNpb246CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoXygiVGhlICUob3B0aW9uKXMgb3B0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIikgJSBtYXBwaW5nKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoXygiVGhlICUob3B0aW9uKXMgb3B0aW9uIHdhcyByZW1vdmVkIGluIHZlcnNpb24gJShyZW1vdmVkKXMsIGJ1dCB5b3UgYXJlIHVzaW5nIGtpY2tzdGFydCBzeW50YXggdmVyc2lvbiAlKHZlcnNpb24pcy4iKSAlIG1hcHBpbmcpCisgICAgICAgICAgICBlbGlmIHNlZW4oc2VsZiwgb3B0aW9uKSBhbmQgdXNlZERlcHJlY2F0ZWQoc2VsZiwgb3B0aW9uKToKKyAgICAgICAgICAgICAgICBtYXBwaW5nID0geyJsaW5lbm8iOiBzZWxmLmxpbmVubywgIm9wdGlvbiI6IG9wdGlvbn0KKyAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKF8oIklnbm9yaW5nIGRlcHJlY2F0ZWQgb3B0aW9uIG9uIGxpbmUgJShsaW5lbm8pczogIFRoZSAlKG9wdGlvbilzIG9wdGlvbiBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgaGFzIGFueSBlZmZlY3QuICBJdCBtYXkgYmUgcmVtb3ZlZCBmcm9tIGZ1dHVyZSByZWxlYXNlcywgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSBmYXRhbCBlcnJvciBmcm9tIGtpY2tzdGFydC4gIFBsZWFzZSBtb2RpZnkgeW91ciBraWNrc3RhcnQgZmlsZSB0byByZW1vdmUgdGhpcyBvcHRpb24uIikgJSBtYXBwaW5nLCBEZXByZWNhdGlvbldhcm5pbmcpCisKKyAgICAgICAgcmV0dXJuICh2YWx1ZXMsIGFyZ3MpCisKKyAgICBkZWYgcGFyc2VfYXJncyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiBrd2FyZ3MuaGFzX2tleSgibGluZW5vIik6CisgICAgICAgICAgICBzZWxmLmxpbmVubyA9IGt3YXJncy5wb3AoImxpbmVubyIpCisKKyAgICAgICAgcmV0dXJuIE9wdGlvblBhcnNlci5wYXJzZV9hcmdzKHNlbGYsICoqa3dhcmdzKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcHBpbmc9Tm9uZSwgdmVyc2lvbj1Ob25lKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IEtTT3B0aW9uUGFyc2VyIGluc3RhbmNlLiAgRWFjaCBLaWNrc3RhcnRDb21tYW5kCisgICAgICAgICAgIHN1YmNsYXNzIHNob3VsZCBjcmVhdGUgb25lIGluc3RhbmNlIG9mIEtTT3B0aW9uUGFyc2VyLCBwcm92aWRpbmcKKyAgICAgICAgICAgYXQgbGVhc3QgdGhlIGxpbmVubyBhdHRyaWJ1dGUuICBtYXBwaW5nIGFuZCB2ZXJzaW9uIGFyZSBub3QgcmVxdWlyZWQuCisgICAgICAgICAgIEluc3RhbmNlIGF0dHJpYnV0ZXM6CisKKyAgICAgICAgICAgbWFwcGluZyAtLSBBIG1hcHBpbmcgZnJvbSBvcHRpb24gc3RyaW5ncyB0byBkaWZmZXJlbnQgdmFsdWVzLgorICAgICAgICAgICB2ZXJzaW9uIC0tIFRoZSB2ZXJzaW9uIG9mIHRoZSBraWNrc3RhcnQgc3ludGF4IHdlIGFyZSBjaGVja2luZworICAgICAgICAgICAgICAgICAgICAgIGFnYWluc3QuCisgICAgICAgICIiIgorICAgICAgICBPcHRpb25QYXJzZXIuX19pbml0X18oc2VsZiwgb3B0aW9uX2NsYXNzPUtTT3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkX2hlbHBfb3B0aW9uPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmxpY3RfaGFuZGxlcj0icmVzb2x2ZSIpCisgICAgICAgIGlmIG1hcHBpbmcgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYubWFwID0ge30KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubWFwID0gbWFwcGluZworCisgICAgICAgIHNlbGYubGluZW5vID0gTm9uZQorICAgICAgICBzZWxmLm9wdGlvbl9zZWVuID0ge30KKyAgICAgICAgc2VsZi52ZXJzaW9uID0gdmVyc2lvbgorCitkZWYgX2NoZWNrX2tzYm9vbGVhbihvcHRpb24sIG9wdCwgdmFsdWUpOgorICAgIGlmIHZhbHVlLmxvd2VyKCkgaW4gKCJvbiIsICJ5ZXMiLCAidHJ1ZSIsICIxIik6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgZWxpZiB2YWx1ZS5sb3dlcigpIGluICgib2ZmIiwgIm5vIiwgImZhbHNlIiwgIjAiKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZWxzZToKKyAgICAgICAgbWFwcGluZyA9IHsib3B0Ijogb3B0LCAidmFsdWUiOiB2YWx1ZX0KKyAgICAgICAgcmFpc2UgT3B0aW9uVmFsdWVFcnJvcihfKCJPcHRpb24gJShvcHQpczogaW52YWxpZCBib29sZWFuIHZhbHVlOiAlKHZhbHVlKXIiKSAlIG1hcHBpbmcpCisKK2RlZiBfY2hlY2tfc3RyaW5nKG9wdGlvbiwgb3B0LCB2YWx1ZSk6CisgICAgaWYgbGVuKHZhbHVlKSA+IDIgYW5kIHZhbHVlLnN0YXJ0c3dpdGgoIi0tIik6CisgICAgICAgIG1hcHBpbmcgPSB7Im9wdCI6IG9wdCwgInZhbHVlIjogdmFsdWV9CisgICAgICAgIHJhaXNlIE9wdGlvblZhbHVlRXJyb3IoXygiT3B0aW9uICUob3B0KXM6IGludmFsaWQgc3RyaW5nIHZhbHVlOiAlKHZhbHVlKXIiKSAlIG1hcHBpbmcpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHZhbHVlCisKK2RlZiBfY2hlY2tfc2l6ZShvcHRpb24sIG9wdCwgdmFsdWUpOgorICAgICMgRm9ybWVyIGRlZmF1bHQgd2FzIE1CCisgICAgaWYgdmFsdWUuaXNkaWdpdCgpOgorICAgICAgICByZXR1cm4gaW50KHZhbHVlKSAqIDEwMjRMCisKKyAgICBtYXBwaW5nID0geyJvcHQiOiBvcHQsICJ2YWx1ZSI6IHZhbHVlfQorICAgIGlmIG5vdCB2YWx1ZVs6LTFdLmlzZGlnaXQoKToKKyAgICAgICAgcmFpc2UgT3B0aW9uVmFsdWVFcnJvcihfKCJPcHRpb24gJShvcHQpczogaW52YWxpZCBzaXplIHZhbHVlOiAlKHZhbHVlKXIiKSAlIG1hcHBpbmcpCisKKyAgICBzaXplID0gaW50KHZhbHVlWzotMV0pCisgICAgaWYgdmFsdWUuZW5kc3dpdGgoImsiKSBvciB2YWx1ZS5lbmRzd2l0aCgiSyIpOgorICAgICAgICByZXR1cm4gc2l6ZQorICAgIGlmIHZhbHVlLmVuZHN3aXRoKCJNIik6CisgICAgICAgIHJldHVybiBzaXplICogMTAyNEwKKyAgICBpZiB2YWx1ZS5lbmRzd2l0aCgiRyIpOgorICAgICAgICByZXR1cm4gc2l6ZSAqIDEwMjRMICogMTAyNEwKKyAgICByYWlzZSBPcHRpb25WYWx1ZUVycm9yKF8oIk9wdGlvbiAlKG9wdClzOiBpbnZhbGlkIHNpemUgdmFsdWU6ICUodmFsdWUpciIpICUgbWFwcGluZykKKworIyBDcmVhdGVzIGEgbmV3IE9wdGlvbiBjbGFzcyB0aGF0IHN1cHBvcnRzIHNldmVyYWwgbmV3IGF0dHJpYnV0ZXM6CisjIC0gcmVxdWlyZWQ6ICBhbnkgb3B0aW9uIHdpdGggdGhpcyBhdHRyaWJ1dGUgbXVzdCBiZSBzdXBwbGllZCBvciBhbiBleGNlcHRpb24KKyMgICAgICAgICAgICAgIGlzIHRocm93bgorIyAtIGludHJvZHVjZWQ6ICB0aGUga2lja3N0YXJ0IHN5bnRheCB2ZXJzaW9uIHRoYXQgdGhpcyBvcHRpb24gZmlyc3QgYXBwZWFyZWQKKyMgICAgICAgICAgICAgICAgaW4gLSBhbiBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQgaWYgdGhlIG9wdGlvbiBpcyB1c2VkIGFuZAorIyAgICAgICAgICAgICAgICB0aGUgc3BlY2lmaWVkIHN5bnRheCB2ZXJzaW9uIGlzIGxlc3MgdGhhbiB0aGUgdmFsdWUgb2YgdGhpcworIyAgICAgICAgICAgICAgICBhdHRyaWJ1dGUKKyMgLSBkZXByZWNhdGVkOiAgdGhlIGtpY2tzdGFydCBzeW50YXggdmVyc2lvbiB0aGF0IHRoaXMgb3B0aW9uIHdhcyBkZXByZWNhdGVkCisjICAgICAgICAgICAgICAgIGluIC0gYSBEZXByZWNhdGlvbldhcm5pbmcgd2lsbCBiZSB0aHJvd24gaWYgdGhlIG9wdGlvbiBpcworIyAgICAgICAgICAgICAgICB1c2VkIGFuZCB0aGUgc3BlY2lmaWVkIHN5bnRheCB2ZXJzaW9uIGlzIGdyZWF0ZXIgdGhhbiB0aGUKKyMgICAgICAgICAgICAgICAgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUKKyMgLSByZW1vdmVkOiAgdGhlIGtpY2tzdGFydCBzeW50YXggdmVyc2lvbiB0aGF0IHRoaXMgb3B0aW9uIHdhcyByZW1vdmVkIGluIC0gYW4KKyMgICAgICAgICAgICAgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkIGlmIHRoZSBvcHRpb24gaXMgdXNlZCBhbmQgdGhlIHNwZWNpZmllZAorIyAgICAgICAgICAgICBzeW50YXggdmVyc2lvbiBpcyBncmVhdGVkIHRoYW4gdGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlCisjIEFsc28gY3JlYXRlcyBhIG5ldyB0eXBlOgorIyAtIGtzYm9vbGVhbjogIHN1cHBvcnQgdmFyaW91cyBraW5kcyBvZiBib29sZWFuIHZhbHVlcyBvbiBhbiBvcHRpb24KKyMgQW5kIHR3byBuZXcgYWN0aW9uczoKKyMgLSBtYXAgOiAgYWxsb3dzIHlvdSB0byBkZWZpbmUgYW4gb3B0IC0+IHZhbCBtYXBwaW5nIHN1Y2ggdGhhdCBkZXN0IGdldHMgdmFsCisjICAgICAgICAgIHdoZW4gb3B0IGlzIHNlZW4KKyMgLSBtYXBfZXh0ZW5kOiAgYWxsb3dzIHlvdSB0byBkZWZpbmUgYW4gb3B0IC0+IFt2YWwxLCAuLi4gdmFsbl0gbWFwcGluZyBzdWNoCisjICAgICAgICAgICAgICAgIHRoYXQgZGVzdCBnZXRzIGEgbGlzdCBvZiB2YWxzIGJ1aWx0IHVwIHdoZW4gb3B0IGlzIHNlZW4KK2NsYXNzIEtTT3B0aW9uIChPcHRpb24pOgorICAgIEFUVFJTID0gT3B0aW9uLkFUVFJTICsgWydpbnRyb2R1Y2VkJywgJ2RlcHJlY2F0ZWQnLCAncmVtb3ZlZCcsICdyZXF1aXJlZCddCisgICAgQUNUSU9OUyA9IE9wdGlvbi5BQ1RJT05TICsgKCJtYXAiLCAibWFwX2V4dGVuZCIsKQorICAgIFNUT1JFX0FDVElPTlMgPSBPcHRpb24uU1RPUkVfQUNUSU9OUyArICgibWFwIiwgIm1hcF9leHRlbmQiLCkKKworICAgIFRZUEVTID0gT3B0aW9uLlRZUEVTICsgKCJrc2Jvb2xlYW4iLCAic3RyaW5nIiwgInNpemUiKQorICAgIFRZUEVfQ0hFQ0tFUiA9IGNvcHkoT3B0aW9uLlRZUEVfQ0hFQ0tFUikKKyAgICBUWVBFX0NIRUNLRVJbImtzYm9vbGVhbiJdID0gX2NoZWNrX2tzYm9vbGVhbgorICAgIFRZUEVfQ0hFQ0tFUlsic3RyaW5nIl0gPSBfY2hlY2tfc3RyaW5nCisgICAgVFlQRV9DSEVDS0VSWyJzaXplIl0gPSBfY2hlY2tfc2l6ZQorCisgICAgZGVmIF9jaGVja19yZXF1aXJlZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5yZXF1aXJlZCBhbmQgbm90IHNlbGYudGFrZXNfdmFsdWUoKToKKyAgICAgICAgICAgIHJhaXNlIE9wdGlvbkVycm9yKF8oIlJlcXVpcmVkIGZsYWcgc2V0IGZvciBvcHRpb24gdGhhdCBkb2Vzbid0IHRha2UgYSB2YWx1ZSIpLCBzZWxmKQorCisgICAgIyBNYWtlIHN1cmUgX2NoZWNrX3JlcXVpcmVkKCkgaXMgY2FsbGVkIGZyb20gdGhlIGNvbnN0cnVjdG9yIQorICAgIENIRUNLX01FVEhPRFMgPSBPcHRpb24uQ0hFQ0tfTUVUSE9EUyArIFtfY2hlY2tfcmVxdWlyZWRdCisKKyAgICBkZWYgcHJvY2VzcyAoc2VsZiwgb3B0LCB2YWx1ZSwgdmFsdWVzLCBwYXJzZXIpOgorICAgICAgICBPcHRpb24ucHJvY2VzcyhzZWxmLCBvcHQsIHZhbHVlLCB2YWx1ZXMsIHBhcnNlcikKKyAgICAgICAgcGFyc2VyLm9wdGlvbl9zZWVuW3NlbGZdID0gMQorCisgICAgIyBPdmVycmlkZSBkZWZhdWx0IHRha2VfYWN0aW9uIG1ldGhvZCB0byBoYW5kbGUgb3VyIGN1c3RvbSBhY3Rpb25zLgorICAgIGRlZiB0YWtlX2FjdGlvbihzZWxmLCBhY3Rpb24sIGRlc3QsIG9wdCwgdmFsdWUsIHZhbHVlcywgcGFyc2VyKToKKyAgICAgICAgaWYgYWN0aW9uID09ICJtYXAiOgorICAgICAgICAgICAgdmFsdWVzLmVuc3VyZV92YWx1ZShkZXN0LCBwYXJzZXIubWFwW29wdC5sc3RyaXAoJy0nKV0pCisgICAgICAgIGVsaWYgYWN0aW9uID09ICJtYXBfZXh0ZW5kIjoKKyAgICAgICAgICAgIHZhbHVlcy5lbnN1cmVfdmFsdWUoZGVzdCwgW10pLmV4dGVuZChwYXJzZXIubWFwW29wdC5sc3RyaXAoJy0nKV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBPcHRpb24udGFrZV9hY3Rpb24oc2VsZiwgYWN0aW9uLCBkZXN0LCBvcHQsIHZhbHVlLCB2YWx1ZXMsIHBhcnNlcikKKworICAgIGRlZiB0YWtlc192YWx1ZShzZWxmKToKKyAgICAgICAgIyBEZXByZWNhdGVkIG9wdGlvbnMgZG9uJ3QgdGFrZSBhIHZhbHVlLgorICAgICAgICByZXR1cm4gT3B0aW9uLnRha2VzX3ZhbHVlKHNlbGYpIGFuZCBub3Qgc2VsZi5kZXByZWNhdGVkCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5kZXByZWNhdGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5yZXF1aXJlZCA9IEZhbHNlCisgICAgICAgIE9wdGlvbi5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9wYXJzZXIucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9wYXJzZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM5Njc0YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L3BhcnNlci5weQpAQCAtMCwwICsxLDYxOSBAQAorIworIyBwYXJzZXIucHk6ICBLaWNrc3RhcnQgZmlsZSBwYXJzZXIuCisjCisjIENocmlzIEx1bWVucyA8Y2x1bWVuc0ByZWRoYXQuY29tPgorIworIyBDb3B5cmlnaHQgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMSBSZWQgSGF0LCBJbmMuCisjCisjIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLCBtb2RpZnksCisjIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugdi4yLiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKKyMgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nIHRoZQorIyBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxCisjIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgQW55IFJlZCBIYXQKKyMgdHJhZGVtYXJrcyB0aGF0IGFyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlIHNvdXJjZSBjb2RlIG9yIGRvY3VtZW50YXRpb24gYXJlIG5vdAorIyBzdWJqZWN0IHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgbWF5IG9ubHkgYmUgdXNlZCBvciByZXBsaWNhdGVkCisjIHdpdGggdGhlIGV4cHJlc3MgcGVybWlzc2lvbiBvZiBSZWQgSGF0LCBJbmMuIAorIworIiIiCitNYWluIGtpY2tzdGFydCBmaWxlIHByb2Nlc3NpbmcgbW9kdWxlLgorCitUaGlzIG1vZHVsZSBleHBvcnRzIHNldmVyYWwgaW1wb3J0YW50IGNsYXNzZXM6CisKKyAgICBTY3JpcHQgLSBSZXByZXNlbnRhdGlvbiBvZiBhIHNpbmdsZSAlcHJlLCAlcG9zdCwgb3IgJXRyYWNlYmFjayBzY3JpcHQuCisKKyAgICBQYWNrYWdlcyAtIFJlcHJlc2VudGF0aW9uIG9mIHRoZSAlcGFja2FnZXMgc2VjdGlvbi4KKworICAgIEtpY2tzdGFydFBhcnNlciAtIFRoZSBraWNrc3RhcnQgZmlsZSBwYXJzZXIgc3RhdGUgbWFjaGluZS4KKyIiIgorCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBJdGVyYXRvcgoraW1wb3J0IG9zCitpbXBvcnQgc2hsZXgKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQorZnJvbSBjb3B5IGltcG9ydCBjb3B5Citmcm9tIG9wdHBhcnNlIGltcG9ydCAqCisKK2ltcG9ydCBjb25zdGFudHMKK2Zyb20gZXJyb3JzIGltcG9ydCBLaWNrc3RhcnRFcnJvciwgS2lja3N0YXJ0UGFyc2VFcnJvciwgS2lja3N0YXJ0VmFsdWVFcnJvciwgZm9ybWF0RXJyb3JNc2cKK2Zyb20ga28gaW1wb3J0IEtpY2tzdGFydE9iamVjdAorZnJvbSBzZWN0aW9ucyBpbXBvcnQgKgoraW1wb3J0IHZlcnNpb24KKworaW1wb3J0IGdldHRleHQKK18gPSBsYW1iZGEgeDogZ2V0dGV4dC5sZGdldHRleHQoInB5a2lja3N0YXJ0IiwgeCkKKworU1RBVEVfRU5EID0gImVuZCIKK1NUQVRFX0NPTU1BTkRTID0gImNvbW1hbmRzIgorCit2ZXIgPSB2ZXJzaW9uLkRFVkVMCisKKworY2xhc3MgUHV0QmFja0l0ZXJhdG9yKEl0ZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaXRlcmFibGUpOgorICAgICAgICBzZWxmLl9pdGVyYWJsZSA9IGl0ZXIoaXRlcmFibGUpCisgICAgICAgIHNlbGYuX2J1ZiA9IE5vbmUKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBwdXQoc2VsZiwgcyk6CisgICAgICAgIHNlbGYuX2J1ZiA9IHMKKworICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9idWY6CisgICAgICAgICAgICByZXR2YWwgPSBzZWxmLl9idWYKKyAgICAgICAgICAgIHNlbGYuX2J1ZiA9IE5vbmUKKyAgICAgICAgICAgIHJldHVybiByZXR2YWwKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9pdGVyYWJsZS5uZXh0KCkKKworIyMjCisjIyMgU0NSSVBUIEhBTkRMSU5HCisjIyMKK2NsYXNzIFNjcmlwdChLaWNrc3RhcnRPYmplY3QpOgorICAgICIiIkEgY2xhc3MgcmVwcmVzZW50aW5nIGEgc2luZ2xlIGtpY2tzdGFydCBzY3JpcHQuICBJZiBmdW5jdGlvbmFsaXR5IGJleW9uZAorICAgICAgIGp1c3QgYSBkYXRhIHJlcHJlc2VudGF0aW9uIGlzIG5lZWRlZCAoZm9yIGV4YW1wbGUsIGEgcnVuIG1ldGhvZCBpbgorICAgICAgIGFuYWNvbmRhKSwgU2NyaXB0IG1heSBiZSBzdWJjbGFzc2VkLiAgQWx0aG91Z2ggYSBydW4gbWV0aG9kIGlzIG5vdAorICAgICAgIHByb3ZpZGVkLCBtb3N0IG9mIHRoZSBhdHRyaWJ1dGVzIG9mIFNjcmlwdCBoYXZlIHRvIGRvIHdpdGggcnVubmluZyB0aGUKKyAgICAgICBzY3JpcHQuICBJbnN0YW5jZXMgb2YgU2NyaXB0IGFyZSBoZWxkIGluIGEgbGlzdCBieSB0aGUgVmVyc2lvbiBvYmplY3QuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNjcmlwdCwgKmFyZ3MgLCAqKmt3YXJncyk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBTY3JpcHQgaW5zdGFuY2UuICBJbnN0YW5jZSBhdHRyaWJ1dGVzOgorCisgICAgICAgICAgIGVycm9yT25GYWlsIC0tIElmIGV4ZWN1dGlvbiBvZiB0aGUgc2NyaXB0IGZhaWxzLCBzaG91bGQgYW5hY29uZGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcCwgZGlzcGxheSBhbiBlcnJvciwgYW5kIHRoZW4gcmVib290IHdpdGhvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyBhbnkgb3RoZXIgc2NyaXB0cz8KKyAgICAgICAgICAgaW5DaHJvb3QgICAgLS0gRG9lcyB0aGUgc2NyaXB0IGV4ZWN1dGUgaW4gYW5hY29uZGEncyBjaHJvb3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgb3Igbm90PworICAgICAgICAgICBpbnRlcnAgICAgICAtLSBUaGUgcHJvZ3JhbSB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGludGVycHJldCB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC4KKyAgICAgICAgICAgbGluZW5vICAgICAgLS0gVGhlIGxpbmUgbnVtYmVyIHRoaXMgc2NyaXB0IHN0YXJ0cyBvbi4KKyAgICAgICAgICAgbG9nZmlsZSAgICAgLS0gV2hlcmUgYWxsIG1lc3NhZ2VzIGZyb20gdGhlIHNjcmlwdCBzaG91bGQgYmUgbG9nZ2VkLgorICAgICAgICAgICBzY3JpcHQgICAgICAtLSBBIHN0cmluZyBjb250YWluaW5nIGFsbCB0aGUgbGluZXMgb2YgdGhlIHNjcmlwdC4KKyAgICAgICAgICAgdHlwZSAgICAgICAgLS0gVGhlIHR5cGUgb2YgdGhlIHNjcmlwdCwgd2hpY2ggY2FuIGJlIEtTX1NDUklQVF8qIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHlraWNrc3RhcnQuY29uc3RhbnRzLgorICAgICAgICAiIiIKKyAgICAgICAgS2lja3N0YXJ0T2JqZWN0Ll9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5zY3JpcHQgPSAiIi5qb2luKHNjcmlwdCkKKworICAgICAgICBzZWxmLmludGVycCA9IGt3YXJncy5nZXQoImludGVycCIsICIvYmluL3NoIikKKyAgICAgICAgc2VsZi5pbkNocm9vdCA9IGt3YXJncy5nZXQoImluQ2hyb290IiwgRmFsc2UpCisgICAgICAgIHNlbGYubGluZW5vID0ga3dhcmdzLmdldCgibGluZW5vIiwgTm9uZSkKKyAgICAgICAgc2VsZi5sb2dmaWxlID0ga3dhcmdzLmdldCgibG9nZmlsZSIsIE5vbmUpCisgICAgICAgIHNlbGYuZXJyb3JPbkZhaWwgPSBrd2FyZ3MuZ2V0KCJlcnJvck9uRmFpbCIsIEZhbHNlKQorICAgICAgICBzZWxmLnR5cGUgPSBrd2FyZ3MuZ2V0KCJ0eXBlIiwgY29uc3RhbnRzLktTX1NDUklQVF9QUkUpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgc3RyaW5nIGZvcm1hdHRlZCBmb3Igb3V0cHV0IHRvIGEga2lja3N0YXJ0IGZpbGUuIiIiCisgICAgICAgIHJldHZhbCA9ICIiCisKKyAgICAgICAgaWYgc2VsZi50eXBlID09IGNvbnN0YW50cy5LU19TQ1JJUFRfUFJFOgorICAgICAgICAgICAgcmV0dmFsICs9ICdcbiVwcmUnCisgICAgICAgIGVsaWYgc2VsZi50eXBlID09IGNvbnN0YW50cy5LU19TQ1JJUFRfUE9TVDoKKyAgICAgICAgICAgIHJldHZhbCArPSAnXG4lcG9zdCcKKyAgICAgICAgZWxpZiBzZWxmLnR5cGUgPT0gY29uc3RhbnRzLktTX1NDUklQVF9UUkFDRUJBQ0s6CisgICAgICAgICAgICByZXR2YWwgKz0gJ1xuJXRyYWNlYmFjaycKKworICAgICAgICBpZiBzZWxmLmludGVycCAhPSAiL2Jpbi9zaCIgYW5kIHNlbGYuaW50ZXJwICE9ICIiOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1pbnRlcnByZXRlcj0lcyIgJSBzZWxmLmludGVycAorICAgICAgICBpZiBzZWxmLnR5cGUgPT0gY29uc3RhbnRzLktTX1NDUklQVF9QT1NUIGFuZCBub3Qgc2VsZi5pbkNocm9vdDoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tbm9jaHJvb3QiCisgICAgICAgIGlmIHNlbGYubG9nZmlsZSAhPSBOb25lOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1sb2dmaWxlICVzIiAlIHNlbGYubG9nZmlsZQorICAgICAgICBpZiBzZWxmLmVycm9yT25GYWlsOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1lcnJvcm9uZmFpbCIKKworICAgICAgICBpZiBzZWxmLnNjcmlwdC5lbmRzd2l0aCgiXG4iKToKKyAgICAgICAgICAgIGlmIHZlciA+PSB2ZXJzaW9uLkY4OgorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWwgKyAiXG4lcyUlZW5kXG4iICUgc2VsZi5zY3JpcHQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbCArICJcbiVzXG4iICUgc2VsZi5zY3JpcHQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHZlciA+PSB2ZXJzaW9uLkY4OgorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWwgKyAiXG4lc1xuJSVlbmRcbiIgJSBzZWxmLnNjcmlwdAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsICsgIlxuJXNcbiIgJSBzZWxmLnNjcmlwdAorCisKKyMjCisjIyBQQUNLQUdFIEhBTkRMSU5HCisjIworY2xhc3MgR3JvdXA6CisgICAgIiIiQSBjbGFzcyByZXByZXNlbnRpbmcgYSBzaW5nbGUgZ3JvdXAgaW4gdGhlICVwYWNrYWdlcyBzZWN0aW9uLiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lPSIiLCBpbmNsdWRlPWNvbnN0YW50cy5HUk9VUF9ERUZBVUxUKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IEdyb3VwIGluc3RhbmNlLiAgSW5zdGFuY2UgYXR0cmlidXRlczoKKworICAgICAgICAgICBuYW1lICAgIC0tIFRoZSBncm91cCdzIGlkZW50aWZpZXIKKyAgICAgICAgICAgaW5jbHVkZSAtLSBUaGUgbGV2ZWwgb2YgaG93IG11Y2ggb2YgdGhlIGdyb3VwIHNob3VsZCBiZSBpbmNsdWRlZC4KKyAgICAgICAgICAgICAgICAgICAgICBWYWx1ZXMgY2FuIGJlIEdST1VQXyogZnJvbSBweWtpY2tzdGFydC5jb25zdGFudHMuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuaW5jbHVkZSA9IGluY2x1ZGUKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBzdHJpbmcgZm9ybWF0dGVkIGZvciBvdXRwdXQgdG8gYSBraWNrc3RhcnQgZmlsZS4iIiIKKyAgICAgICAgaWYgc2VsZi5pbmNsdWRlID09IGNvbnN0YW50cy5HUk9VUF9SRVFVSVJFRDoKKyAgICAgICAgICAgIHJldHVybiAiQCVzIC0tbm9kZWZhdWx0cyIgJSBzZWxmLm5hbWUKKyAgICAgICAgZWxpZiBzZWxmLmluY2x1ZGUgPT0gY29uc3RhbnRzLkdST1VQX0FMTDoKKyAgICAgICAgICAgIHJldHVybiAiQCVzIC0tb3B0aW9uYWwiICUgc2VsZi5uYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIkAlcyIgJSBzZWxmLm5hbWUKKworICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgc2VsZi5uYW1lIDwgb3RoZXIubmFtZToKKyAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICBlbGlmIHNlbGYubmFtZSA+IG90aGVyLm5hbWU6CisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICByZXR1cm4gMAorCitjbGFzcyBQYWNrYWdlcyhLaWNrc3RhcnRPYmplY3QpOgorICAgICIiIkEgY2xhc3MgcmVwcmVzZW50aW5nIHRoZSAlcGFja2FnZXMgc2VjdGlvbiBvZiB0aGUga2lja3N0YXJ0IGZpbGUuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBQYWNrYWdlcyBpbnN0YW5jZS4gIEluc3RhbmNlIGF0dHJpYnV0ZXM6CisKKyAgICAgICAgICAgYWRkQmFzZSAgICAgICAtLSBTaG91bGQgdGhlIEJhc2UgZ3JvdXAgYmUgaW5zdGFsbGVkIGV2ZW4gaWYgaXQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3Qgc3BlY2lmaWVkPworICAgICAgICAgICBkZWZhdWx0ICAgICAgIC0tIFNob3VsZCB0aGUgZGVmYXVsdCBwYWNrYWdlIHNldCBiZSBzZWxlY3RlZD8KKyAgICAgICAgICAgZXhjbHVkZWRMaXN0ICAtLSBBIGxpc3Qgb2YgYWxsIHRoZSBwYWNrYWdlcyBtYXJrZWQgZm9yIGV4Y2x1c2lvbiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSAlcGFja2FnZXMgc2VjdGlvbiwgd2l0aG91dCB0aGUgbGVhZGluZyBtaW51cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbC4KKyAgICAgICAgICAgZXhjbHVkZURvY3MgICAtLSBTaG91bGQgZG9jdW1lbnRhdGlvbiBpbiBlYWNoIHBhY2thZ2UgYmUgZXhjbHVkZWQ/CisgICAgICAgICAgIGdyb3VwTGlzdCAgICAgLS0gQSBsaXN0IG9mIEdyb3VwIG9iamVjdHMgcmVwcmVzZW50aW5nIGFsbCB0aGUgZ3JvdXBzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGluIHRoZSAlcGFja2FnZXMgc2VjdGlvbi4gIE5hbWVzIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcHBlZCBvZiB0aGUgbGVhZGluZyBAIHN5bWJvbC4KKyAgICAgICAgICAgZXhjbHVkZWRHcm91cExpc3QgLS0gQSBsaXN0IG9mIEdyb3VwIG9iamVjdHMgcmVwcmVzZW50aW5nIGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzIHNwZWNpZmllZCBmb3IgcmVtb3ZhbCBpbiB0aGUgJXBhY2thZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uICBOYW1lcyB3aWxsIGJlIHN0cmlwcGVkIG9mIHRoZSBsZWFkaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1AIHN5bWJvbHMuCisgICAgICAgICAgIGhhbmRsZU1pc3NpbmcgLS0gSWYgdW5rbm93biBwYWNrYWdlcyBhcmUgc3BlY2lmaWVkIGluIHRoZSAlcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLCBzaG91bGQgaXQgYmUgaWdub3JlZCBvciBub3Q/ICBWYWx1ZXMgY2FuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgS1NfTUlTU0lOR18qIGZyb20gcHlraWNrc3RhcnQuY29uc3RhbnRzLgorICAgICAgICAgICBwYWNrYWdlTGlzdCAgIC0tIEEgbGlzdCBvZiBhbGwgdGhlIHBhY2thZ2VzIHNwZWNpZmllZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlcGFja2FnZXMgc2VjdGlvbi4KKyAgICAgICAgICAgaW5zdExhbmdzICAgICAtLSBBIGxpc3Qgb2YgbGFuZ3VhZ2VzIHRvIGluc3RhbGwuCisgICAgICAgICIiIgorICAgICAgICBLaWNrc3RhcnRPYmplY3QuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgICAgIHNlbGYuYWRkQmFzZSA9IFRydWUKKyAgICAgICAgc2VsZi5kZWZhdWx0ID0gRmFsc2UKKyAgICAgICAgc2VsZi5leGNsdWRlZExpc3QgPSBbXQorICAgICAgICBzZWxmLmV4Y2x1ZGVkR3JvdXBMaXN0ID0gW10KKyAgICAgICAgc2VsZi5leGNsdWRlRG9jcyA9IEZhbHNlCisgICAgICAgIHNlbGYuZ3JvdXBMaXN0ID0gW10KKyAgICAgICAgc2VsZi5oYW5kbGVNaXNzaW5nID0gY29uc3RhbnRzLktTX01JU1NJTkdfUFJPTVBUCisgICAgICAgIHNlbGYucGFja2FnZUxpc3QgPSBbXQorICAgICAgICBzZWxmLmluc3RMYW5ncyA9IE5vbmUKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBzdHJpbmcgZm9ybWF0dGVkIGZvciBvdXRwdXQgdG8gYSBraWNrc3RhcnQgZmlsZS4iIiIKKyAgICAgICAgcGtncyA9ICIiCisKKyAgICAgICAgaWYgbm90IHNlbGYuZGVmYXVsdDoKKyAgICAgICAgICAgIGdycHMgPSBzZWxmLmdyb3VwTGlzdAorICAgICAgICAgICAgZ3Jwcy5zb3J0KCkKKyAgICAgICAgICAgIGZvciBncnAgaW4gZ3JwczoKKyAgICAgICAgICAgICAgICBwa2dzICs9ICIlc1xuIiAlIGdycC5fX3N0cl9fKCkKKworICAgICAgICAgICAgcCA9IHNlbGYucGFja2FnZUxpc3QKKyAgICAgICAgICAgIHAuc29ydCgpCisgICAgICAgICAgICBmb3IgcGtnIGluIHA6CisgICAgICAgICAgICAgICAgcGtncyArPSAiJXNcbiIgJSBwa2cKKworICAgICAgICAgICAgZ3JwcyA9IHNlbGYuZXhjbHVkZWRHcm91cExpc3QKKyAgICAgICAgICAgIGdycHMuc29ydCgpCisgICAgICAgICAgICBmb3IgZ3JwIGluIGdycHM6CisgICAgICAgICAgICAgICAgcGtncyArPSAiLSVzXG4iICUgZ3JwLl9fc3RyX18oKQorCisgICAgICAgICAgICBwID0gc2VsZi5leGNsdWRlZExpc3QKKyAgICAgICAgICAgIHAuc29ydCgpCisgICAgICAgICAgICBmb3IgcGtnIGluIHA6CisgICAgICAgICAgICAgICAgcGtncyArPSAiLSVzXG4iICUgcGtnCisKKyAgICAgICAgICAgIGlmIHBrZ3MgPT0gIiI6CisgICAgICAgICAgICAgICAgcmV0dXJuICIiCisKKyAgICAgICAgcmV0dmFsID0gIlxuJXBhY2thZ2VzIgorCisgICAgICAgIGlmIHNlbGYuZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tZGVmYXVsdCIKKyAgICAgICAgaWYgc2VsZi5leGNsdWRlRG9jczoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tZXhjbHVkZWRvY3MiCisgICAgICAgIGlmIG5vdCBzZWxmLmFkZEJhc2U6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLW5vYmFzZSIKKyAgICAgICAgaWYgc2VsZi5oYW5kbGVNaXNzaW5nID09IGNvbnN0YW50cy5LU19NSVNTSU5HX0lHTk9SRToKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0taWdub3JlbWlzc2luZyIKKyAgICAgICAgaWYgc2VsZi5pbnN0TGFuZ3M6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWluc3RMYW5ncz0lcyIgJSBzZWxmLmluc3RMYW5ncworCisgICAgICAgIGlmIHZlciA+PSB2ZXJzaW9uLkY4OgorICAgICAgICAgICAgcmV0dXJuIHJldHZhbCArICJcbiIgKyBwa2dzICsgIlxuJWVuZFxuIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHJldHZhbCArICJcbiIgKyBwa2dzICsgIlxuIgorCisgICAgZGVmIF9wcm9jZXNzR3JvdXAgKHNlbGYsIGxpbmUpOgorICAgICAgICBvcCA9IE9wdGlvblBhcnNlcigpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tbm9kZWZhdWx0cyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tb3B0aW9uYWwiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlKQorCisgICAgICAgIChvcHRzLCBleHRyYSkgPSBvcC5wYXJzZV9hcmdzKGFyZ3M9bGluZS5zcGxpdCgpKQorCisgICAgICAgIGlmIG9wdHMubm9kZWZhdWx0cyBhbmQgb3B0cy5vcHRpb25hbDoKKyAgICAgICAgICAgIHJhaXNlIEtpY2tzdGFydFZhbHVlRXJyb3IsIF8oIkdyb3VwIGNhbm5vdCBzcGVjaWZ5IGJvdGggLS1ub2RlZmF1bHRzIGFuZCAtLW9wdGlvbmFsIikKKworICAgICAgICAjIElmIHRoZSBncm91cCBuYW1lIGhhcyBzcGFjZXMgaW4gaXQsIHdlIGhhdmUgdG8gcHV0IGl0IGJhY2sgdG9nZXRoZXIKKyAgICAgICAgIyBub3cuCisgICAgICAgIGdycCA9ICIgIi5qb2luKGV4dHJhKQorCisgICAgICAgIGlmIG9wdHMubm9kZWZhdWx0czoKKyAgICAgICAgICAgIHNlbGYuZ3JvdXBMaXN0LmFwcGVuZChHcm91cChuYW1lPWdycCwgaW5jbHVkZT1jb25zdGFudHMuR1JPVVBfUkVRVUlSRUQpKQorICAgICAgICBlbGlmIG9wdHMub3B0aW9uYWw6CisgICAgICAgICAgICBzZWxmLmdyb3VwTGlzdC5hcHBlbmQoR3JvdXAobmFtZT1ncnAsIGluY2x1ZGU9Y29uc3RhbnRzLkdST1VQX0FMTCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmdyb3VwTGlzdC5hcHBlbmQoR3JvdXAobmFtZT1ncnAsIGluY2x1ZGU9Y29uc3RhbnRzLkdST1VQX0RFRkFVTFQpKQorCisgICAgZGVmIGFkZCAoc2VsZiwgcGtnTGlzdCk6CisgICAgICAgICIiIkdpdmVuIGEgbGlzdCBvZiBsaW5lcyBmcm9tIHRoZSBpbnB1dCBmaWxlLCBzdHJpcCBvZmYgYW55IGxlYWRpbmcKKyAgICAgICAgICAgc3ltYm9scyBhbmQgYWRkIHRoZSByZXN1bHQgdG8gdGhlIGFwcHJvcHJpYXRlIGxpc3QuCisgICAgICAgICIiIgorICAgICAgICBleGlzdGluZ0V4Y2x1ZGVkU2V0ID0gc2V0KHNlbGYuZXhjbHVkZWRMaXN0KQorICAgICAgICBleGlzdGluZ1BhY2thZ2VTZXQgPSBzZXQoc2VsZi5wYWNrYWdlTGlzdCkKKyAgICAgICAgbmV3RXhjbHVkZWRTZXQgPSBzZXQoKQorICAgICAgICBuZXdQYWNrYWdlU2V0ID0gc2V0KCkKKworICAgICAgICBleGNsdWRlZEdyb3VwTGlzdCA9IFtdCisKKyAgICAgICAgZm9yIHBrZyBpbiBwa2dMaXN0OgorICAgICAgICAgICAgc3RyaXBwZWQgPSBwa2cuc3RyaXAoKQorCisgICAgICAgICAgICBpZiBzdHJpcHBlZFswXSA9PSAiQCI6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvY2Vzc0dyb3VwKHN0cmlwcGVkWzE6XSkKKyAgICAgICAgICAgIGVsaWYgc3RyaXBwZWRbMF0gPT0gIi0iOgorICAgICAgICAgICAgICAgIGlmIHN0cmlwcGVkWzFdID09ICJAIjoKKyAgICAgICAgICAgICAgICAgICAgZXhjbHVkZWRHcm91cExpc3QuYXBwZW5kKEdyb3VwKG5hbWU9c3RyaXBwZWRbMjpdKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBuZXdFeGNsdWRlZFNldC5hZGQoc3RyaXBwZWRbMTpdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXdQYWNrYWdlU2V0LmFkZChzdHJpcHBlZCkKKworICAgICAgICAjIEdyb3VwcyBoYXZlIHRvIGJlIGV4Y2x1ZGVkIGluIHR3byBkaWZmZXJlbnQgd2F5cyAobm90ZTogY2FuJ3QgdXNlCisgICAgICAgICMgc2V0cyBoZXJlIGJlY2F1c2Ugd2UgaGF2ZSB0byBzdG9yZSBvYmplY3RzKToKKyAgICAgICAgZXhjbHVkZWRHcm91cE5hbWVzID0gbWFwKGxhbWJkYSBnOiBnLm5hbWUsIGV4Y2x1ZGVkR3JvdXBMaXN0KQorCisgICAgICAgICMgRmlyc3QsIGFuIGV4Y2x1ZGVkIGdyb3VwIG1heSBiZSBjYW5jZWxsaW5nIG91dCBhIHByZXZpb3VzbHkgZ2l2ZW4KKyAgICAgICAgIyBvbmUuICBUaGlzIGlzIG9mdGVuIHRoZSBjYXNlIHdoZW4gdXNpbmcgJWluY2x1ZGUuICBTbyB0aGVyZSB3ZSBzaG91bGQKKyAgICAgICAgIyBqdXN0IHJlbW92ZSB0aGUgZ3JvdXAgZnJvbSB0aGUgbGlzdC4KKyAgICAgICAgc2VsZi5ncm91cExpc3QgPSBmaWx0ZXIobGFtYmRhIGc6IGcubmFtZSBub3QgaW4gZXhjbHVkZWRHcm91cE5hbWVzLCBzZWxmLmdyb3VwTGlzdCkKKworICAgICAgICAjIFNlY29uZCwgdGhlIHBhY2thZ2UgbGlzdCBjb3VsZCBoYXZlIGluY2x1ZGVkIGdsb2JzIHdoaWNoIGFyZSBub3QKKyAgICAgICAgIyBwcm9jZXNzZWQgYnkgcHlraWNrc3RhcnQuICBJbiB0aGF0IGNhc2Ugd2UgbmVlZCB0byBwcmVzZXJ2ZSBhIGxpc3Qgb2YKKyAgICAgICAgIyBleGNsdWRlZCBncm91cHMgc28gd2hhdGV2ZXIgdG9vbCBkb2luZyBwYWNrYWdlL2dyb3VwIGluc3RhbGxhdGlvbiBjYW4KKyAgICAgICAgIyB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbi4KKyAgICAgICAgc2VsZi5leGNsdWRlZEdyb3VwTGlzdC5leHRlbmQoZXhjbHVkZWRHcm91cExpc3QpCisKKyAgICAgICAgZXhpc3RpbmdQYWNrYWdlU2V0ID0gKGV4aXN0aW5nUGFja2FnZVNldCAtIG5ld0V4Y2x1ZGVkU2V0KSB8IG5ld1BhY2thZ2VTZXQKKyAgICAgICAgZXhpc3RpbmdFeGNsdWRlZFNldCA9IChleGlzdGluZ0V4Y2x1ZGVkU2V0IC0gZXhpc3RpbmdQYWNrYWdlU2V0KSB8IG5ld0V4Y2x1ZGVkU2V0CisKKyAgICAgICAgc2VsZi5wYWNrYWdlTGlzdCA9IGxpc3QoZXhpc3RpbmdQYWNrYWdlU2V0KQorICAgICAgICBzZWxmLmV4Y2x1ZGVkTGlzdCA9IGxpc3QoZXhpc3RpbmdFeGNsdWRlZFNldCkKKworCisjIyMKKyMjIyBQQVJTRVIKKyMjIworY2xhc3MgS2lja3N0YXJ0UGFyc2VyOgorICAgICIiIlRoZSBraWNrc3RhcnQgZmlsZSBwYXJzZXIgY2xhc3MgYXMgcmVwcmVzZW50ZWQgYnkgYSBiYXNpYyBzdGF0ZQorICAgICAgIG1hY2hpbmUuICBUbyBjcmVhdGUgYSBzcGVjaWFsaXplZCBwYXJzZXIsIG1ha2UgYSBzdWJjbGFzcyBhbmQgb3ZlcnJpZGUKKyAgICAgICBhbnkgb2YgdGhlIG1ldGhvZHMgeW91IGNhcmUgYWJvdXQuICBNZXRob2RzIHRoYXQgZG9uJ3QgbmVlZCB0byBkbworICAgICAgIGFueXRoaW5nIG1heSBqdXN0IHBhc3MuICBIb3dldmVyLCBfc3RhdGVNYWNoaW5lIHNob3VsZCBuZXZlciBiZQorICAgICAgIG92ZXJyaWRkZW4uCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fIChzZWxmLCBoYW5kbGVyLCBmb2xsb3dJbmNsdWRlcz1UcnVlLCBlcnJvcnNBcmVGYXRhbD1UcnVlLAorICAgICAgICAgICAgICAgICAgbWlzc2luZ0luY2x1ZGVJc0ZhdGFsPVRydWUpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgS2lja3N0YXJ0UGFyc2VyIGluc3RhbmNlLiAgSW5zdGFuY2UgYXR0cmlidXRlczoKKworICAgICAgICAgICBlcnJvcnNBcmVGYXRhbCAgICAgICAgLS0gU2hvdWxkIGVycm9ycyBjYXVzZSBwcm9jZXNzaW5nIHRvIGhhbHQsIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdXN0IHByaW50IGEgbWVzc2FnZSB0byB0aGUgc2NyZWVuPyAgVGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbW9zdCB1c2VmdWwgZm9yIHdyaXRpbmcgc3ludGF4IGNoZWNrZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IG1heSB3YW50IHRvIGNvbnRpbnVlIGFmdGVyIGFuIGVycm9yIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvdW50ZXJlZC4KKyAgICAgICAgICAgZm9sbG93SW5jbHVkZXMgICAgICAgIC0tIElmICVpbmNsdWRlIGlzIHNlZW4sIHNob3VsZCB0aGUgaW5jbHVkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgYmUgY2hlY2tlZCBhcyB3ZWxsIG9yIHNraXBwZWQ/CisgICAgICAgICAgIGhhbmRsZXIgICAgICAgICAgICAgICAtLSBBbiBpbnN0YW5jZSBvZiBhIEJhc2VIYW5kbGVyIHN1YmNsYXNzLiAgSWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIHRoZSBpbnB1dCBmaWxlIHdpbGwgc3RpbGwgYmUgcGFyc2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgbm8gZGF0YSB3aWxsIGJlIHNhdmVkIGFuZCBubyBjb21tYW5kcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBleGVjdXRlZC4KKyAgICAgICAgICAgbWlzc2luZ0luY2x1ZGVJc0ZhdGFsIC0tIFNob3VsZCBtaXNzaW5nIGluY2x1ZGUgZmlsZXMgYmUgZmF0YWwsIGV2ZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVycm9yc0FyZUZhdGFsIGlzIEZhbHNlPworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5lcnJvcnNBcmVGYXRhbCA9IGVycm9yc0FyZUZhdGFsCisgICAgICAgIHNlbGYuZm9sbG93SW5jbHVkZXMgPSBmb2xsb3dJbmNsdWRlcworICAgICAgICBzZWxmLmhhbmRsZXIgPSBoYW5kbGVyCisgICAgICAgIHNlbGYuY3VycmVudGRpciA9IHt9CisgICAgICAgIHNlbGYubWlzc2luZ0luY2x1ZGVJc0ZhdGFsID0gbWlzc2luZ0luY2x1ZGVJc0ZhdGFsCisKKyAgICAgICAgc2VsZi5fc3RhdGUgPSBTVEFURV9DT01NQU5EUworICAgICAgICBzZWxmLl9pbmNsdWRlRGVwdGggPSAwCisgICAgICAgIHNlbGYuX2xpbmUgPSAiIgorCisgICAgICAgIHNlbGYudmVyc2lvbiA9IHNlbGYuaGFuZGxlci52ZXJzaW9uCisKKyAgICAgICAgZ2xvYmFsIHZlcgorICAgICAgICB2ZXIgPSBzZWxmLnZlcnNpb24KKworICAgICAgICBzZWxmLl9zZWN0aW9ucyA9IHt9CisgICAgICAgIHNlbGYuc2V0dXBTZWN0aW9ucygpCisKKyAgICBkZWYgX3Jlc2V0KHNlbGYpOgorICAgICAgICAiIiJSZXNldCB0aGUgaW50ZXJuYWwgdmFyaWFibGVzIG9mIHRoZSBzdGF0ZSBtYWNoaW5lIGZvciBhIG5ldyBraWNrc3RhcnQgZmlsZS4iIiIKKyAgICAgICAgc2VsZi5fc3RhdGUgPSBTVEFURV9DT01NQU5EUworICAgICAgICBzZWxmLl9pbmNsdWRlRGVwdGggPSAwCisKKyAgICBkZWYgZ2V0U2VjdGlvbihzZWxmLCBzKToKKyAgICAgICAgIiIiUmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoZSByZXF1ZXN0ZWQgc2VjdGlvbiAocyBtdXN0IHN0YXJ0IHdpdGggJyUncyksCisgICAgICAgICAgIG9yIHJhaXNlIEtleUVycm9yIGlmIG5vdCBmb3VuZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9zZWN0aW9uc1tzXQorCisgICAgZGVmIGhhbmRsZUNvbW1hbmQgKHNlbGYsIGxpbmVubywgYXJncyk6CisgICAgICAgICIiIkdpdmVuIHRoZSBsaXN0IG9mIGNvbW1hbmQgYW5kIGFyZ3VtZW50cywgY2FsbCB0aGUgVmVyc2lvbidzCisgICAgICAgICAgIGRpc3BhdGNoZXIgbWV0aG9kIHRvIGhhbmRsZSB0aGUgY29tbWFuZC4gIFJldHVybnMgdGhlIGNvbW1hbmQgb3IKKyAgICAgICAgICAgZGF0YSBvYmplY3QgcmV0dXJuZWQgYnkgdGhlIGRpc3BhdGNoZXIuICBUaGlzIG1ldGhvZCBtYXkgYmUKKyAgICAgICAgICAgb3ZlcnJpZGRlbiBpbiBhIHN1YmNsYXNzIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuaGFuZGxlcjoKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5jdXJyZW50Q21kID0gYXJnc1swXQorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLmN1cnJlbnRMaW5lID0gc2VsZi5fbGluZQorICAgICAgICAgICAgcmV0dmFsID0gc2VsZi5oYW5kbGVyLmRpc3BhdGNoZXIoYXJncywgbGluZW5vKQorCisgICAgICAgICAgICByZXR1cm4gcmV0dmFsCisKKyAgICBkZWYgcmVnaXN0ZXJTZWN0aW9uKHNlbGYsIG9iaik6CisgICAgICAgICIiIkdpdmVuIGFuIGluc3RhbmNlIG9mIGEgU2VjdGlvbiBzdWJjbGFzcywgcmVnaXN0ZXIgdGhlIG5ldyBzZWN0aW9uCisgICAgICAgICAgIHdpdGggdGhlIHBhcnNlci4gIENhbGxpbmcgdGhpcyBtZXRob2QgbWVhbnMgdGhlIHBhcnNlciB3aWxsCisgICAgICAgICAgIHJlY29nbml6ZSB5b3VyIG5ldyBzZWN0aW9uIGFuZCBkaXNwYXRjaCBpbnRvIHRoZSBnaXZlbiBvYmplY3QgdG8KKyAgICAgICAgICAgaGFuZGxlIGl0LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IG9iai5zZWN0aW9uT3BlbjoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgIm5vIHNlY3Rpb25PcGVuIGdpdmVuIGZvciBzZWN0aW9uICVzIiAlIG9iagorCisgICAgICAgIGlmIG5vdCBvYmouc2VjdGlvbk9wZW4uc3RhcnRzd2l0aCgiJSIpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCAic2VjdGlvbiAlcyB0YWcgZG9lcyBub3Qgc3RhcnQgd2l0aCBhICUlIiAlIG9iai5zZWN0aW9uT3BlbgorCisgICAgICAgIHNlbGYuX3NlY3Rpb25zW29iai5zZWN0aW9uT3Blbl0gPSBvYmoKKworICAgIGRlZiBfZmluYWxpemUoc2VsZiwgb2JqKToKKyAgICAgICAgIiIiQ2FsbGVkIGF0IHRoZSBjbG9zZSBvZiBhIGtpY2tzdGFydCBzZWN0aW9uIHRvIHRha2UgYW55IHJlcXVpcmVkCisgICAgICAgICAgIGFjdGlvbnMuICBJbnRlcm5hbGx5LCB0aGlzIGlzIHVzZWQgdG8gYWRkIHNjcmlwdHMgb25jZSB3ZSBoYXZlIHRoZQorICAgICAgICAgICB3aG9sZSBib2R5IHJlYWQuCisgICAgICAgICIiIgorICAgICAgICBvYmouZmluYWxpemUoKQorICAgICAgICBzZWxmLl9zdGF0ZSA9IFNUQVRFX0NPTU1BTkRTCisKKyAgICBkZWYgX2hhbmRsZVNwZWNpYWxDb21tZW50cyhzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiS2lja3N0YXJ0IHJlY29nbml6ZXMgYSBjb3VwbGUgc3BlY2lhbCBjb21tZW50cy4iIiIKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgIT0gU1RBVEVfQ09NTUFORFM6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIFNhdmUgdGhlIHBsYXRmb3JtIGZvciBzLWMta2lja3N0YXJ0LgorICAgICAgICBpZiBsaW5lWzoxMF0gPT0gIiNwbGF0Zm9ybT0iOgorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnBsYXRmb3JtID0gc2VsZi5fbGluZVsxMTpdCisKKyAgICBkZWYgX3JlYWRTZWN0aW9uKHNlbGYsIGxpbmVJdGVyLCBsaW5lbm8pOgorICAgICAgICBvYmogPSBzZWxmLl9zZWN0aW9uc1tzZWxmLl9zdGF0ZV0KKworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lSXRlci5uZXh0KCkKKyAgICAgICAgICAgICAgICBpZiBsaW5lID09ICIiOgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgc2VjdGlvbiBlbmRzIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYudmVyc2lvbiA+PSB2ZXJzaW9uLkY4OgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgS2lja3N0YXJ0UGFyc2VFcnJvciwgZm9ybWF0RXJyb3JNc2cobGluZW5vLCBtc2c9XygiU2VjdGlvbiBkb2VzIG5vdCBlbmQgd2l0aCAlJWVuZC4iKSkKKworICAgICAgICAgICAgICAgICAgICBzZWxmLl9maW5hbGl6ZShvYmopCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBsaW5lbm8gKz0gMQorCisgICAgICAgICAgICAjIFRocm93IGF3YXkgYmxhbmsgbGluZXMgYW5kIGNvbW1lbnRzLCB1bmxlc3MgdGhlIHNlY3Rpb24gd2FudHMgYWxsCisgICAgICAgICAgICAjIGxpbmVzLgorICAgICAgICAgICAgaWYgc2VsZi5faXNCbGFua09yQ29tbWVudChsaW5lKSBhbmQgbm90IG9iai5hbGxMaW5lczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIiUiKToKKyAgICAgICAgICAgICAgICBhcmdzID0gc2hsZXguc3BsaXQobGluZSkKKworICAgICAgICAgICAgICAgIGlmIGFyZ3MgYW5kIGFyZ3NbMF0gPT0gIiVlbmQiOgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgYSBwcm9wZXJseSB0ZXJtaW5hdGVkIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbmFsaXplKG9iaikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbGlmIGFyZ3MgYW5kIGFyZ3NbMF0gPT0gIiVrc2FwcGVuZCI6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxpZiBhcmdzIGFuZCAoc2VsZi5fdmFsaWRTdGF0ZShhcmdzWzBdKSBvciBhcmdzWzBdIGluIFsiJWluY2x1ZGUiLCAiJWtzYXBwZW5kIl0pOgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgYW4gdW50ZXJtaW5hdGVkIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYudmVyc2lvbiA+PSB2ZXJzaW9uLkY4OgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgS2lja3N0YXJ0UGFyc2VFcnJvciwgZm9ybWF0RXJyb3JNc2cobGluZW5vLCBtc2c9XygiU2VjdGlvbiBkb2VzIG5vdCBlbmQgd2l0aCAlJWVuZC4iKSkKKworICAgICAgICAgICAgICAgICAgICAjIEZpbmlzaCB1cC4gIFdlIGRvIG5vdCBwcm9jZXNzIHRoZSBoZWFkZXIgaGVyZSBiZWNhdXNlCisgICAgICAgICAgICAgICAgICAgICMga2lja2luZyBiYWNrIG91dCB0byBTVEFURV9DT01NQU5EUyB3aWxsIGVuc3VyZSB0aGF0IGhhcHBlbnMuCisgICAgICAgICAgICAgICAgICAgIGxpbmVJdGVyLnB1dChsaW5lKQorICAgICAgICAgICAgICAgICAgICBsaW5lbm8gLT0gMQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9maW5hbGl6ZShvYmopCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgVGhpcyBpcyBqdXN0IGEgbGluZSB3aXRoaW4gYSBzZWN0aW9uLiAgUGFzcyBpdCBvZmYgdG8gd2hhdGV2ZXIKKyAgICAgICAgICAgICAgICAjIHNlY3Rpb24gaGFuZGxlcyBpdC4KKyAgICAgICAgICAgICAgICBvYmouaGFuZGxlTGluZShsaW5lKQorCisgICAgICAgIHJldHVybiBsaW5lbm8KKworICAgIGRlZiBfdmFsaWRTdGF0ZShzZWxmLCBzdCk6CisgICAgICAgICIiIklzIHRoZSBnaXZlbiBzZWN0aW9uIHRhZyBvbmUgdGhhdCBoYXMgYmVlbiByZWdpc3RlcmVkIHdpdGggdGhlIHBhcnNlcj8iIiIKKyAgICAgICAgcmV0dXJuIHN0IGluIHNlbGYuX3NlY3Rpb25zLmtleXMoKQorCisgICAgZGVmIF90cnlGdW5jKHNlbGYsIGZuKToKKyAgICAgICAgIiIiQ2FsbCB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gKHdoaWNoIGRvZXNuJ3QgdGFrZSBhbnkgYXJndW1lbnRzKSBhbmQKKyAgICAgICAgICAgZG8gdGhlIGFwcHJvcHJpYXRlIGVycm9yIGhhbmRsaW5nLiAgSWYgZXJyb3JzQXJlRmF0YWwgaXMgRmFsc2UsIHRoaXMKKyAgICAgICAgICAgZnVuY3Rpb24gd2lsbCBqdXN0IHByaW50IHRoZSBleGNlcHRpb24gYW5kIGtlZXAgZ29pbmcuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmbigpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIG1zZzoKKyAgICAgICAgICAgIGlmIHNlbGYuZXJyb3JzQXJlRmF0YWw6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgbXNnCisKKyAgICBkZWYgX2lzQmxhbmtPckNvbW1lbnQoc2VsZiwgbGluZSk6CisgICAgICAgIHJldHVybiBsaW5lLmlzc3BhY2UoKSBvciBsaW5lID09ICIiIG9yIGxpbmUubHN0cmlwKClbMF0gPT0gJyMnCisKKyAgICBkZWYgX3N0YXRlTWFjaGluZShzZWxmLCBsaW5lSXRlcik6CisgICAgICAgICMgRm9yIGVycm9yIHJlcG9ydGluZy4KKyAgICAgICAgbGluZW5vID0gMAorCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAjIEdldCB0aGUgbmV4dCBsaW5lIG91dCBvZiB0aGUgZmlsZSwgcXVpdHRpbmcgaWYgdGhpcyBpcyB0aGUgbGFzdCBsaW5lLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2xpbmUgPSBsaW5lSXRlci5uZXh0KCkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9saW5lID09ICIiOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgbGluZW5vICs9IDEKKworICAgICAgICAgICAgIyBFbGltaW5hdGUgYmxhbmsgbGluZXMsIHdoaXRlc3BhY2Utb25seSBsaW5lcywgYW5kIGNvbW1lbnRzLgorICAgICAgICAgICAgaWYgc2VsZi5faXNCbGFua09yQ29tbWVudChzZWxmLl9saW5lKToKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVTcGVjaWFsQ29tbWVudHMoc2VsZi5fbGluZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIFJlbW92ZSBhbnkgZW5kLW9mLWxpbmUgY29tbWVudHMuCisgICAgICAgICAgICBzYW5pdGl6ZWQgPSBzZWxmLl9saW5lLnNwbGl0KCIjIilbMF0KKworICAgICAgICAgICAgIyBUaGVuIHNwbGl0IHRoZSBsaW5lLgorICAgICAgICAgICAgYXJncyA9IHNobGV4LnNwbGl0KHNhbml0aXplZC5yc3RyaXAoKSkKKworICAgICAgICAgICAgaWYgYXJnc1swXSA9PSAiJWluY2x1ZGUiOgorICAgICAgICAgICAgICAgICMgVGhpcyBjYXNlIGNvbWVzIHVwIHByaW1hcmlseSBpbiBrc3ZhbGlkYXRvci4KKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5mb2xsb3dJbmNsdWRlczoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAxIG9yIG5vdCBhcmdzWzFdOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBLaWNrc3RhcnRQYXJzZUVycm9yLCBmb3JtYXRFcnJvck1zZyhsaW5lbm8pCisKKyAgICAgICAgICAgICAgICBzZWxmLl9pbmNsdWRlRGVwdGggKz0gMQorCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlYWRLaWNrc3RhcnQoYXJnc1sxXSwgcmVzZXQ9RmFsc2UpCisgICAgICAgICAgICAgICAgZXhjZXB0IEtpY2tzdGFydEVycm9yOgorICAgICAgICAgICAgICAgICAgICAjIEhhbmRsZSB0aGUgaW5jbHVkZSBmaWxlIGJlaW5nIHByb3ZpZGVkIG92ZXIgdGhlCisgICAgICAgICAgICAgICAgICAgICMgbmV0d29yayBpbiBhICVwcmUgc2NyaXB0LiAgVGhpcyBjYXNlIGNvbWVzIHVwIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAjIGVhcmx5IHBhcnNpbmcgaW4gYW5hY29uZGEuCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYubWlzc2luZ0luY2x1ZGVJc0ZhdGFsOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICAgICAgICAgIHNlbGYuX2luY2x1ZGVEZXB0aCAtPSAxCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBOb3cgb24gdG8gdGhlIG1haW4gZXZlbnQuCisgICAgICAgICAgICBpZiBzZWxmLl9zdGF0ZSA9PSBTVEFURV9DT01NQU5EUzoKKyAgICAgICAgICAgICAgICBpZiBhcmdzWzBdID09ICIla3NhcHBlbmQiOgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgaGFuZGxlZCBieSB0aGUgcHJlcHJvY2VzcyogZnVuY3Rpb25zLCBzbyBjb250aW51ZS4KKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBlbGlmIGFyZ3NbMF1bMF0gPT0gJyUnOgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiBhIG5ldyBzZWN0aW9uLiAgSGFuZGxlIGl0cyBoZWFkZXIKKyAgICAgICAgICAgICAgICAgICAgIyBoZXJlLgorICAgICAgICAgICAgICAgICAgICBuZXdTZWN0aW9uID0gYXJnc1swXQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fdmFsaWRTdGF0ZShuZXdTZWN0aW9uKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEtpY2tzdGFydFBhcnNlRXJyb3IsIGZvcm1hdEVycm9yTXNnKGxpbmVubywgbXNnPV8oIlVua25vd24ga2lja3N0YXJ0IHNlY3Rpb246ICVzIiAlIG5ld1NlY3Rpb24pKQorCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gbmV3U2VjdGlvbgorICAgICAgICAgICAgICAgICAgICBvYmogPSBzZWxmLl9zZWN0aW9uc1tzZWxmLl9zdGF0ZV0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fdHJ5RnVuYyhsYW1iZGE6IG9iai5oYW5kbGVIZWFkZXIobGluZW5vLCBhcmdzKSkKKworICAgICAgICAgICAgICAgICAgICAjIFRoaXMgd2lsbCBoYW5kbGUgYWxsIHNlY3Rpb24gcHJvY2Vzc2luZywga2lja2luZyB1cyBiYWNrCisgICAgICAgICAgICAgICAgICAgICMgb3V0IHRvIFNUQVRFX0NPTU1BTkRTIGF0IHRoZSBlbmQgd2l0aCB0aGUgY3VycmVudCBsaW5lCisgICAgICAgICAgICAgICAgICAgICMgYmVpbmcgdGhlIG5leHQgc2VjdGlvbiBoZWFkZXIsIGV0Yy4KKyAgICAgICAgICAgICAgICAgICAgbGluZW5vID0gc2VsZi5fcmVhZFNlY3Rpb24obGluZUl0ZXIsIGxpbmVubykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgYSBjb21tYW5kIGluIHRoZSBjb21tYW5kIHNlY3Rpb24uICBEaXNwYXRjaCB0byBpdC4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fdHJ5RnVuYyhsYW1iZGE6IHNlbGYuaGFuZGxlQ29tbWFuZChsaW5lbm8sIGFyZ3MpKQorICAgICAgICAgICAgZWxpZiBzZWxmLl9zdGF0ZSA9PSBTVEFURV9FTkQ6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIGRlZiByZWFkS2lja3N0YXJ0RnJvbVN0cmluZyAoc2VsZiwgcywgcmVzZXQ9VHJ1ZSk6CisgICAgICAgICIiIlByb2Nlc3MgYSBraWNrc3RhcnQgZmlsZSwgcHJvdmlkZWQgYXMgdGhlIHN0cmluZyBzdHIuIiIiCisgICAgICAgIGlmIHJlc2V0OgorICAgICAgICAgICAgc2VsZi5fcmVzZXQoKQorCisgICAgICAgICMgQWRkIGEgIiIgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCBzbyB0aGUgc3RyaW5nIHJlYWRlciBhY3RzIGxpa2UgdGhlCisgICAgICAgICMgZmlsZSByZWFkZXIgYW5kIHdlIG9ubHkgZ2V0IFN0b3BJdGVyYXRpb24gd2hlbiB3ZSdyZSBhZnRlciB0aGUgZmluYWwKKyAgICAgICAgIyBsaW5lIG9mIGlucHV0LgorICAgICAgICBpID0gUHV0QmFja0l0ZXJhdG9yKHMuc3BsaXRsaW5lcyhUcnVlKSArIFsiIl0pCisgICAgICAgIHNlbGYuX3N0YXRlTWFjaGluZSAoaSkKKworICAgIGRlZiByZWFkS2lja3N0YXJ0KHNlbGYsIGYsIHJlc2V0PVRydWUpOgorICAgICAgICAiIiJQcm9jZXNzIGEga2lja3N0YXJ0IGZpbGUsIGdpdmVuIGJ5IHRoZSBmaWxlbmFtZSBmLiIiIgorICAgICAgICBpZiByZXNldDoKKyAgICAgICAgICAgIHNlbGYuX3Jlc2V0KCkKKworICAgICAgICAjIGFuICVpbmNsdWRlIG1pZ2h0IG5vdCBzcGVjaWZ5IGEgZnVsbCBwYXRoLiAgaWYgd2UgZG9uJ3QgdHJ5IHRvIGZpZ3VyZQorICAgICAgICAjIG91dCB3aGF0IHRoZSBwYXRoIHNob3VsZCBoYXZlIGJlZW4sIHRoZW4gd2UncmUgdW5hYmxlIHRvIGZpbmQgaXQKKyAgICAgICAgIyByZXF1aXJpbmcgZnVsbCBwYXRoIHNwZWNpZmljYXRpb24sIHRob3VnaCwgc3Vja3MuICBzbyBsZXQncyBtYWtlCisgICAgICAgICMgdGhlIHJlYWRpbmcgInNtYXJ0IiBieSBrZWVwaW5nIHRyYWNrIG9mIHdoYXQgdGhlIHBhdGggaXMgYXQgZWFjaAorICAgICAgICAjIGluY2x1ZGUgZGVwdGguCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmKToKKyAgICAgICAgICAgIGlmIHNlbGYuY3VycmVudGRpci5oYXNfa2V5KHNlbGYuX2luY2x1ZGVEZXB0aCAtIDEpOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLmN1cnJlbnRkaXJbc2VsZi5faW5jbHVkZURlcHRoIC0gMV0sIGYpKToKKyAgICAgICAgICAgICAgICAgICAgZiA9IG9zLnBhdGguam9pbihzZWxmLmN1cnJlbnRkaXJbc2VsZi5faW5jbHVkZURlcHRoIC0gMV0sIGYpCisKKyAgICAgICAgY2QgPSBvcy5wYXRoLmRpcm5hbWUoZikKKyAgICAgICAgaWYgbm90IGNkLnN0YXJ0c3dpdGgoIi8iKToKKyAgICAgICAgICAgIGNkID0gb3MucGF0aC5hYnNwYXRoKGNkKQorICAgICAgICBzZWxmLmN1cnJlbnRkaXJbc2VsZi5faW5jbHVkZURlcHRoXSA9IGNkCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcyA9IGZpbGUoZikucmVhZCgpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAgICAgICAgcmFpc2UgS2lja3N0YXJ0RXJyb3IsIGZvcm1hdEVycm9yTXNnKDAsIG1zZz1fKCJVbmFibGUgdG8gb3BlbiBpbnB1dCBraWNrc3RhcnQgZmlsZTogJXMiKSAlIGUuc3RyZXJyb3IpCisKKyAgICAgICAgc2VsZi5yZWFkS2lja3N0YXJ0RnJvbVN0cmluZyhzLCByZXNldD1GYWxzZSkKKworICAgIGRlZiBzZXR1cFNlY3Rpb25zKHNlbGYpOgorICAgICAgICAiIiJJbnN0YWxsIHRoZSBzZWN0aW9ucyBhbGwga2lja3N0YXJ0IGZpbGVzIHN1cHBvcnQuICBZb3UgbWF5IG92ZXJyaWRlCisgICAgICAgICAgIHRoaXMgbWV0aG9kIGluIGEgc3ViY2xhc3MsIGJ1dCBzaG91bGQgYXZvaWQgZG9pbmcgc28gdW5sZXNzIHlvdSBrbm93CisgICAgICAgICAgIHdoYXQgeW91J3JlIGRvaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fc2VjdGlvbnMgPSB7fQorCisgICAgICAgICMgSW5zdGFsbCB0aGUgc2VjdGlvbnMgYWxsIGtpY2tzdGFydCBmaWxlcyBzdXBwb3J0LgorICAgICAgICBzZWxmLnJlZ2lzdGVyU2VjdGlvbihQcmVTY3JpcHRTZWN0aW9uKHNlbGYuaGFuZGxlciwgZGF0YU9iaj1TY3JpcHQpKQorICAgICAgICBzZWxmLnJlZ2lzdGVyU2VjdGlvbihQb3N0U2NyaXB0U2VjdGlvbihzZWxmLmhhbmRsZXIsIGRhdGFPYmo9U2NyaXB0KSkKKyAgICAgICAgc2VsZi5yZWdpc3RlclNlY3Rpb24oVHJhY2ViYWNrU2NyaXB0U2VjdGlvbihzZWxmLmhhbmRsZXIsIGRhdGFPYmo9U2NyaXB0KSkKKyAgICAgICAgc2VsZi5yZWdpc3RlclNlY3Rpb24oUGFja2FnZVNlY3Rpb24oc2VsZi5oYW5kbGVyKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L3NlY3Rpb25zLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvc2VjdGlvbnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRkZjg1NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L3NlY3Rpb25zLnB5CkBAIC0wLDAgKzEsMjQ0IEBACisjCisjIHNlY3Rpb25zLnB5OiAgS2lja3N0YXJ0IGZpbGUgc2VjdGlvbnMuCisjCisjIENocmlzIEx1bWVucyA8Y2x1bWVuc0ByZWRoYXQuY29tPgorIworIyBDb3B5cmlnaHQgMjAxMSBSZWQgSGF0LCBJbmMuCisjCisjIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLCBtb2RpZnksCisjIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugdi4yLiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKKyMgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nIHRoZQorIyBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxCisjIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgQW55IFJlZCBIYXQKKyMgdHJhZGVtYXJrcyB0aGF0IGFyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlIHNvdXJjZSBjb2RlIG9yIGRvY3VtZW50YXRpb24gYXJlIG5vdAorIyBzdWJqZWN0IHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgbWF5IG9ubHkgYmUgdXNlZCBvciByZXBsaWNhdGVkCisjIHdpdGggdGhlIGV4cHJlc3MgcGVybWlzc2lvbiBvZiBSZWQgSGF0LCBJbmMuIAorIworIiIiCitUaGlzIG1vZHVsZSBleHBvcnRzIHRoZSBjbGFzc2VzIHRoYXQgZGVmaW5lIGEgc2VjdGlvbiBvZiBhIGtpY2tzdGFydCBmaWxlLiAgQQorc2VjdGlvbiBpcyBhIGNodW5rIG9mIHRoZSBmaWxlIHN0YXJ0aW5nIHdpdGggYSAldGFnIGFuZCBlbmRpbmcgd2l0aCBhICVlbmQuCitFeGFtcGxlcyBvZiBzZWN0aW9ucyBpbmNsdWRlICVwYWNrYWdlcywgJXByZSwgYW5kICVwb3N0LgorCitZb3UgbWF5IHVzZSB0aGlzIG1vZHVsZSB0byBkZWZpbmUgeW91ciBvd24gY3VzdG9tIHNlY3Rpb25zIHdoaWNoIHdpbGwgYmUKK3RyZWF0ZWQganVzdCB0aGUgc2FtZSBhcyBhIHByZWRlZmluZWQgb25lIGJ5IHRoZSBraWNrc3RhcnQgcGFyc2VyLiAgQWxsIHRoYXQKK2lzIG5lY2Vzc2FyeSBpcyB0byBjcmVhdGUgYSBuZXcgc3ViY2xhc3Mgb2YgU2VjdGlvbiBhbmQgY2FsbAorcGFyc2VyLnJlZ2lzdGVyU2VjdGlvbiB3aXRoIGFuIGluc3RhbmNlIG9mIHlvdXIgbmV3IGNsYXNzLgorIiIiCitmcm9tIGNvbnN0YW50cyBpbXBvcnQgKgorZnJvbSBvcHRpb25zIGltcG9ydCBLU09wdGlvblBhcnNlcgorZnJvbSB2ZXJzaW9uIGltcG9ydCAqCisKK2NsYXNzIFNlY3Rpb24ob2JqZWN0KToKKyAgICAiIiJUaGUgYmFzZSBjbGFzcyBmb3IgZGVmaW5pbmcga2lja3N0YXJ0IHNlY3Rpb25zLiAgWW91IGFyZSBmcmVlIHRvCisgICAgICAgc3ViY2xhc3MgdGhpcyBhcyBhcHByb3ByaWF0ZS4KKworICAgICAgIENsYXNzIGF0dHJpYnV0ZXM6CisKKyAgICAgICBhbGxMaW5lcyAgICAtLSBEb2VzIHRoaXMgc2VjdGlvbiByZXF1aXJlIHRoZSBwYXJzZXIgdG8gY2FsbCBoYW5kbGVMaW5lCisgICAgICAgICAgICAgICAgICAgICAgZm9yIGV2ZXJ5IGxpbmUgaW4gdGhlIHNlY3Rpb24sIGV2ZW4gYmxhbmtzIGFuZCBjb21tZW50cz8KKyAgICAgICBzZWN0aW9uT3BlbiAtLSBUaGUgc3RyaW5nIHRoYXQgZGVub3RlcyB0aGUgc3RhcnQgb2YgdGhpcyBzZWN0aW9uLiAgWW91CisgICAgICAgICAgICAgICAgICAgICAgbXVzdCBzdGFydCB5b3VyIHRhZyB3aXRoIGEgcGVyY2VudCBzaWduLgorICAgICAgIHRpbWVzU2VlbiAgIC0tIFRoaXMgYXR0cmlidXRlIGlzIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkuICBJdCBpcworICAgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudGVkIGV2ZXJ5IHRpbWUgaGFuZGxlSGVhZGVyIGlzIGNhbGxlZCB0byBrZWVwCisgICAgICAgICAgICAgICAgICAgICAgdHJhY2sgb2YgdGhlIG51bWJlciBvZiB0aW1lcyBhIHNlY3Rpb24gb2YgdGhpcyB0eXBlIGlzCisgICAgICAgICAgICAgICAgICAgICAgc2Vlbi4KKyAgICAiIiIKKyAgICBhbGxMaW5lcyA9IEZhbHNlCisgICAgc2VjdGlvbk9wZW4gPSAiIgorICAgIHRpbWVzU2VlbiA9IDAKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBoYW5kbGVyLCAqKmt3YXJncyk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBTY3JpcHQgaW5zdGFuY2UuICBBdCB0aGUgbGVhc3QsIHlvdSBtdXN0IHBhc3MgaW4gYW4KKyAgICAgICAgICAgaW5zdGFuY2Ugb2YgYSBiYXNlSGFuZGxlciBzdWJjbGFzcy4KKworICAgICAgICAgICBWYWxpZCBrd2FyZ3M6CisKKyAgICAgICAgICAgZGF0YU9iaiAtLQorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5oYW5kbGVyID0gaGFuZGxlcgorCisgICAgICAgIHNlbGYudmVyc2lvbiA9IHNlbGYuaGFuZGxlci52ZXJzaW9uCisKKyAgICAgICAgc2VsZi5kYXRhT2JqID0ga3dhcmdzLmdldCgiZGF0YU9iaiIsIE5vbmUpCisKKyAgICBkZWYgZmluYWxpemUoc2VsZik6CisgICAgICAgICIiIlRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSAlZW5kIHRhZyBmb3IgYSBzZWN0aW9uIGlzIHNlZW4uICBJdAorICAgICAgICAgICBpcyBub3QgcmVxdWlyZWQgdG8gYmUgcHJvdmlkZWQuCisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKyAgICBkZWYgaGFuZGxlTGluZShzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiVGhpcyBtZXRob2QgaXMgY2FsbGVkIGZvciBldmVyeSBsaW5lIG9mIGEgc2VjdGlvbi4gIFRha2Ugd2hhdGV2ZXIKKyAgICAgICAgICAgYWN0aW9uIGlzIGFwcHJvcHJpYXRlLiAgV2hpbGUgdGhpcyBtZXRob2QgaXMgbm90IHJlcXVpcmVkIHRvIGJlCisgICAgICAgICAgIHByb3ZpZGVkLCBub3QgcHJvdmlkaW5nIGl0IGRvZXMgbm90IG1ha2UgYSB3aG9sZSBsb3Qgb2Ygc2Vuc2UuCisKKyAgICAgICAgICAgQXJndW1lbnRzOgorCisgICAgICAgICAgIGxpbmUgLS0gVGhlIGNvbXBsZXRlIGxpbmUsIHdpdGggYW55IHRyYWlsaW5nIG5ld2xpbmUuCisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKyAgICBkZWYgaGFuZGxlSGVhZGVyKHNlbGYsIGxpbmVubywgYXJncyk6CisgICAgICAgICIiIlRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBvcGVuaW5nIHRhZyBmb3IgYSBzZWN0aW9uIGlzIHNlZW4uCisgICAgICAgICAgIE5vdCBhbGwgc2VjdGlvbnMgd2lsbCBuZWVkIHRoaXMgbWV0aG9kLCB0aG91Z2ggYWxsIHByb3ZpZGVkIHdpdGgKKyAgICAgICAgICAga2lja3N0YXJ0IGluY2x1ZGUgb25lLgorCisgICAgICAgICAgIEFyZ3VtZW50czoKKworICAgICAgICAgICBhcmdzIC0tIEEgbGlzdCBvZiBhbGwgc3RyaW5ncyBwYXNzZWQgYXMgYXJndW1lbnRzIHRvIHRoZSBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgb3BlbmluZyB0YWcuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnRpbWVzU2VlbiArPSAxCisKK2NsYXNzIE51bGxTZWN0aW9uKFNlY3Rpb24pOgorICAgICIiIlRoaXMgZGVmaW5lcyBhIHNlY3Rpb24gdGhhdCBweWtpY2tzdGFydCB3aWxsIHJlY29nbml6ZSBidXQgZG8gbm90aGluZworICAgICAgIHdpdGguICBJZiB0aGUgcGFyc2VyIHJ1bnMgYWNyb3NzIGEgJXNlY3Rpb24gdGhhdCBoYXMgbm8gb2JqZWN0IHJlZ2lzdGVyZWQsCisgICAgICAgaXQgd2lsbCByYWlzZSBhbiBlcnJvci4gIFNvbWV0aW1lcywgeW91IG1heSB3YW50IHRvIHNpbXBseSBpZ25vcmUgdGhvc2UKKyAgICAgICBzZWN0aW9ucyBpbnN0ZWFkLiAgVGhpcyBjbGFzcyBpcyB1c2VmdWwgZm9yIHRoYXQgcHVycG9zZS4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IE51bGxTZWN0aW9uIGluc3RhbmNlLiAgWW91IG11c3QgcGFzcyBhIHNlY3Rpb25PcGVuCisgICAgICAgICAgIHBhcmFtZXRlciAoaW5jbHVkaW5nIGEgbGVhZGluZyAnJScpIGZvciB0aGUgc2VjdGlvbiB5b3Ugd2lzaCB0bworICAgICAgICAgICBpZ25vcmUuCisgICAgICAgICIiIgorICAgICAgICBTZWN0aW9uLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5zZWN0aW9uT3BlbiA9IGt3YXJncy5nZXQoInNlY3Rpb25PcGVuIikKKworY2xhc3MgU2NyaXB0U2VjdGlvbihTZWN0aW9uKToKKyAgICBhbGxMaW5lcyA9IFRydWUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBTZWN0aW9uLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5fc2NyaXB0ID0ge30KKyAgICAgICAgc2VsZi5fcmVzZXRTY3JpcHQoKQorCisgICAgZGVmIF9nZXRQYXJzZXIoc2VsZik6CisgICAgICAgIG9wID0gS1NPcHRpb25QYXJzZXIoc2VsZi52ZXJzaW9uKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWVycm9yb25mYWlsIiwgZGVzdD0iZXJyb3JPbkZhaWwiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0taW50ZXJwcmV0ZXIiLCBkZXN0PSJpbnRlcnByZXRlciIsIGRlZmF1bHQ9Ii9iaW4vc2giKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWxvZyIsICItLWxvZ2ZpbGUiLCBkZXN0PSJsb2ciKQorICAgICAgICByZXR1cm4gb3AKKworICAgIGRlZiBfcmVzZXRTY3JpcHQoc2VsZik6CisgICAgICAgIHNlbGYuX3NjcmlwdCA9IHsiaW50ZXJwIjogIi9iaW4vc2giLCAibG9nIjogTm9uZSwgImVycm9yT25GYWlsIjogRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAibGluZW5vIjogTm9uZSwgImNocm9vdCI6IEZhbHNlLCAiYm9keSI6IFtdfQorCisgICAgZGVmIGhhbmRsZUxpbmUoc2VsZiwgbGluZSk6CisgICAgICAgIHNlbGYuX3NjcmlwdFsiYm9keSJdLmFwcGVuZChsaW5lKQorCisgICAgZGVmIGZpbmFsaXplKHNlbGYpOgorICAgICAgICBpZiAiICIuam9pbihzZWxmLl9zY3JpcHRbImJvZHkiXSkuc3RyaXAoKSA9PSAiIjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGt3YXJncyA9IHsiaW50ZXJwIjogc2VsZi5fc2NyaXB0WyJpbnRlcnAiXSwKKyAgICAgICAgICAgICAgICAgICJpbkNocm9vdCI6IHNlbGYuX3NjcmlwdFsiY2hyb290Il0sCisgICAgICAgICAgICAgICAgICAibGluZW5vIjogc2VsZi5fc2NyaXB0WyJsaW5lbm8iXSwKKyAgICAgICAgICAgICAgICAgICJsb2dmaWxlIjogc2VsZi5fc2NyaXB0WyJsb2ciXSwKKyAgICAgICAgICAgICAgICAgICJlcnJvck9uRmFpbCI6IHNlbGYuX3NjcmlwdFsiZXJyb3JPbkZhaWwiXSwKKyAgICAgICAgICAgICAgICAgICJ0eXBlIjogc2VsZi5fc2NyaXB0WyJ0eXBlIl19CisKKyAgICAgICAgcyA9IHNlbGYuZGF0YU9iaiAoc2VsZi5fc2NyaXB0WyJib2R5Il0sICoqa3dhcmdzKQorICAgICAgICBzZWxmLl9yZXNldFNjcmlwdCgpCisKKyAgICAgICAgaWYgc2VsZi5oYW5kbGVyOgorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNjcmlwdHMuYXBwZW5kKHMpCisKKyAgICBkZWYgaGFuZGxlSGVhZGVyKHNlbGYsIGxpbmVubywgYXJncyk6CisgICAgICAgICIiIlByb2Nlc3MgdGhlIGFyZ3VtZW50cyB0byBhICVwcmUvJXBvc3QvJXRyYWNlYmFjayBoZWFkZXIgZm9yIGxhdGVyCisgICAgICAgICAgIHNldHRpbmcgb24gYSBTY3JpcHQgaW5zdGFuY2Ugb25jZSB0aGUgZW5kIG9mIHRoZSBzY3JpcHQgaXMgZm91bmQuCisgICAgICAgICAgIFRoaXMgbWV0aG9kIG1heSBiZSBvdmVycmlkZGVuIGluIGEgc3ViY2xhc3MgaWYgbmVjZXNzYXJ5LgorICAgICAgICAiIiIKKyAgICAgICAgU2VjdGlvbi5oYW5kbGVIZWFkZXIoc2VsZiwgbGluZW5vLCBhcmdzKQorICAgICAgICBvcCA9IHNlbGYuX2dldFBhcnNlcigpCisKKyAgICAgICAgKG9wdHMsIGV4dHJhKSA9IG9wLnBhcnNlX2FyZ3MoYXJncz1hcmdzWzE6XSwgbGluZW5vPWxpbmVubykKKworICAgICAgICBzZWxmLl9zY3JpcHRbImludGVycCJdID0gb3B0cy5pbnRlcnByZXRlcgorICAgICAgICBzZWxmLl9zY3JpcHRbImxpbmVubyJdID0gbGluZW5vCisgICAgICAgIHNlbGYuX3NjcmlwdFsibG9nIl0gPSBvcHRzLmxvZworICAgICAgICBzZWxmLl9zY3JpcHRbImVycm9yT25GYWlsIl0gPSBvcHRzLmVycm9yT25GYWlsCisgICAgICAgIGlmIGhhc2F0dHIob3B0cywgIm5vY2hyb290Iik6CisgICAgICAgICAgICBzZWxmLl9zY3JpcHRbImNocm9vdCJdID0gbm90IG9wdHMubm9jaHJvb3QKKworY2xhc3MgUHJlU2NyaXB0U2VjdGlvbihTY3JpcHRTZWN0aW9uKToKKyAgICBzZWN0aW9uT3BlbiA9ICIlcHJlIgorCisgICAgZGVmIF9yZXNldFNjcmlwdChzZWxmKToKKyAgICAgICAgU2NyaXB0U2VjdGlvbi5fcmVzZXRTY3JpcHQoc2VsZikKKyAgICAgICAgc2VsZi5fc2NyaXB0WyJ0eXBlIl0gPSBLU19TQ1JJUFRfUFJFCisKK2NsYXNzIFBvc3RTY3JpcHRTZWN0aW9uKFNjcmlwdFNlY3Rpb24pOgorICAgIHNlY3Rpb25PcGVuID0gIiVwb3N0IgorCisgICAgZGVmIF9nZXRQYXJzZXIoc2VsZik6CisgICAgICAgIG9wID0gU2NyaXB0U2VjdGlvbi5fZ2V0UGFyc2VyKHNlbGYpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tbm9jaHJvb3QiLCBkZXN0PSJub2Nocm9vdCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSkKKyAgICAgICAgcmV0dXJuIG9wCisKKyAgICBkZWYgX3Jlc2V0U2NyaXB0KHNlbGYpOgorICAgICAgICBTY3JpcHRTZWN0aW9uLl9yZXNldFNjcmlwdChzZWxmKQorICAgICAgICBzZWxmLl9zY3JpcHRbImNocm9vdCJdID0gVHJ1ZQorICAgICAgICBzZWxmLl9zY3JpcHRbInR5cGUiXSA9IEtTX1NDUklQVF9QT1NUCisKK2NsYXNzIFRyYWNlYmFja1NjcmlwdFNlY3Rpb24oU2NyaXB0U2VjdGlvbik6CisgICAgc2VjdGlvbk9wZW4gPSAiJXRyYWNlYmFjayIKKworICAgIGRlZiBfcmVzZXRTY3JpcHQoc2VsZik6CisgICAgICAgIFNjcmlwdFNlY3Rpb24uX3Jlc2V0U2NyaXB0KHNlbGYpCisgICAgICAgIHNlbGYuX3NjcmlwdFsidHlwZSJdID0gS1NfU0NSSVBUX1RSQUNFQkFDSworCitjbGFzcyBQYWNrYWdlU2VjdGlvbihTZWN0aW9uKToKKyAgICBzZWN0aW9uT3BlbiA9ICIlcGFja2FnZXMiCisKKyAgICBkZWYgaGFuZGxlTGluZShzZWxmLCBsaW5lKToKKyAgICAgICAgaWYgbm90IHNlbGYuaGFuZGxlcjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIChoLCBzLCB0KSA9IGxpbmUucGFydGl0aW9uKCcjJykKKyAgICAgICAgbGluZSA9IGgucnN0cmlwKCkKKworICAgICAgICBzZWxmLmhhbmRsZXIucGFja2FnZXMuYWRkKFtsaW5lXSkKKworICAgIGRlZiBoYW5kbGVIZWFkZXIoc2VsZiwgbGluZW5vLCBhcmdzKToKKyAgICAgICAgIiIiUHJvY2VzcyB0aGUgYXJndW1lbnRzIHRvIHRoZSAlcGFja2FnZXMgaGVhZGVyIGFuZCBzZXQgYXR0cmlidXRlcworICAgICAgICAgICBvbiB0aGUgVmVyc2lvbidzIFBhY2thZ2VzIGluc3RhbmNlIGFwcHJvcHJpYXRlLiAgVGhpcyBtZXRob2QgbWF5IGJlCisgICAgICAgICAgIG92ZXJyaWRkZW4gaW4gYSBzdWJjbGFzcyBpZiBuZWNlc3NhcnkuCisgICAgICAgICIiIgorICAgICAgICBTZWN0aW9uLmhhbmRsZUhlYWRlcihzZWxmLCBsaW5lbm8sIGFyZ3MpCisgICAgICAgIG9wID0gS1NPcHRpb25QYXJzZXIodmVyc2lvbj1zZWxmLnZlcnNpb24pCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tZXhjbHVkZWRvY3MiLCBkZXN0PSJleGNsdWRlZG9jcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1pZ25vcmVtaXNzaW5nIiwgZGVzdD0iaWdub3JlbWlzc2luZyIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1ub2Jhc2UiLCBkZXN0PSJub2Jhc2UiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0taWdub3JlZGVwcyIsIGRlc3Q9InJlc29sdmVEZXBzIiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZD1GQzQsIHJlbW92ZWQ9RjkpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tcmVzb2x2ZWRlcHMiLCBkZXN0PSJyZXNvbHZlRGVwcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZD1GQzQsIHJlbW92ZWQ9RjkpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tZGVmYXVsdCIsIGRlc3Q9ImRlZmF1bHRQYWNrYWdlcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwgaW50cm9kdWNlZD1GNykKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1pbnN0TGFuZ3MiLCBkZXN0PSJpbnN0TGFuZ3MiLCB0eXBlPSJzdHJpbmciLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9IiIsIGludHJvZHVjZWQ9RjkpCisKKyAgICAgICAgKG9wdHMsIGV4dHJhKSA9IG9wLnBhcnNlX2FyZ3MoYXJncz1hcmdzWzE6XSwgbGluZW5vPWxpbmVubykKKworICAgICAgICBzZWxmLmhhbmRsZXIucGFja2FnZXMuZXhjbHVkZURvY3MgPSBvcHRzLmV4Y2x1ZGVkb2NzCisgICAgICAgIHNlbGYuaGFuZGxlci5wYWNrYWdlcy5hZGRCYXNlID0gbm90IG9wdHMubm9iYXNlCisgICAgICAgIGlmIG9wdHMuaWdub3JlbWlzc2luZzoKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5wYWNrYWdlcy5oYW5kbGVNaXNzaW5nID0gS1NfTUlTU0lOR19JR05PUkUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5wYWNrYWdlcy5oYW5kbGVNaXNzaW5nID0gS1NfTUlTU0lOR19QUk9NUFQKKworICAgICAgICBpZiBvcHRzLmRlZmF1bHRQYWNrYWdlczoKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5wYWNrYWdlcy5kZWZhdWx0ID0gVHJ1ZQorCisgICAgICAgIGlmIG9wdHMuaW5zdExhbmdzOgorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnBhY2thZ2VzLmluc3RMYW5ncyA9IG9wdHMuaW5zdExhbmdzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC92ZXJzaW9uLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvdmVyc2lvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YThlNmFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvdmVyc2lvbi5weQpAQCAtMCwwICsxLDE2OCBAQAorIworIyBDaHJpcyBMdW1lbnMgPGNsdW1lbnNAcmVkaGF0LmNvbT4KKyMKKyMgQ29weXJpZ2h0IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgUmVkIEhhdCwgSW5jLgorIworIyBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwgbW9kaWZ5LAorIyBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYuMi4gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0CisjIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFkgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZyB0aGUKKyMgaW1wbGllZCB3YXJyYW50aWVzIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisjIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MQorIyBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gIEFueSBSZWQgSGF0CisjIHRyYWRlbWFya3MgdGhhdCBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZSBzb3VyY2UgY29kZSBvciBkb2N1bWVudGF0aW9uIGFyZSBub3QKKyMgc3ViamVjdCB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIG1heSBvbmx5IGJlIHVzZWQgb3IgcmVwbGljYXRlZAorIyB3aXRoIHRoZSBleHByZXNzIHBlcm1pc3Npb24gb2YgUmVkIEhhdCwgSW5jLiAKKyMKKyIiIgorTWV0aG9kcyBmb3Igd29ya2luZyB3aXRoIGtpY2tzdGFydCB2ZXJzaW9ucy4KKworVGhpcyBtb2R1bGUgZGVmaW5lcyBzZXZlcmFsIHN5bWJvbGljIGNvbnN0YW50cyB0aGF0IHNwZWNpZnkga2lja3N0YXJ0IHN5bnRheAordmVyc2lvbnMuICBFYWNoIHZlcnNpb24gY29ycmVzcG9uZHMgcm91Z2hseSB0byBvbmUgcmVsZWFzZSBvZiBSZWQgSGF0IExpbnV4LAorUmVkIEhhdCBFbnRlcnByaXNlIExpbnV4LCBvciBGZWRvcmEgQ29yZSBhcyB0aGVzZSBhcmUgd2hlcmUgbW9zdCBzeW50YXgKK2NoYW5nZXMgdGFrZSBwbGFjZS4KKworVGhpcyBtb2R1bGUgYWxzbyBleHBvcnRzIHNldmVyYWwgZnVuY3Rpb25zOgorCisgICAgbWFrZVZlcnNpb24gLSBHaXZlbiBhIHZlcnNpb24gbnVtYmVyLCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgdGhlCisgICAgICAgICAgICAgICAgICBtYXRjaGluZyBoYW5kbGVyIGNsYXNzLgorCisgICAgcmV0dXJuQ2xhc3NGb3JWZXJzaW9uIC0gR2l2ZW4gYSB2ZXJzaW9uIG51bWJlciwgcmV0dXJuIHRoZSBtYXRjaGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgY2xhc3MuICBUaGlzIGRvZXMgbm90IHJldHVybiBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlIG9mIHRoYXQgY2xhc3MsIGhvd2V2ZXIuCisKKyAgICBzdHJpbmdUb1ZlcnNpb24gLSBDb252ZXJ0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgdmVyc2lvbiBudW1iZXIKKyAgICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZSBzeW1ib2xpYyBjb25zdGFudC4KKworICAgIHZlcnNpb25Ub1N0cmluZyAtIFBlcmZvcm0gdGhlIHJldmVyc2UgbWFwcGluZy4KKworICAgIHZlcnNpb25Gcm9tRmlsZSAtIFJlYWQgYSBraWNrc3RhcnQgZmlsZSBhbmQgZGV0ZXJtaW5lIHRoZSB2ZXJzaW9uIG9mCisgICAgICAgICAgICAgICAgICAgICAgc3ludGF4IGl0IHVzZXMuICBUaGlzIHJlcXVpcmVzIHRoZSBraWNrc3RhcnQgZmlsZSB0bworICAgICAgICAgICAgICAgICAgICAgIGhhdmUgYSB2ZXJzaW9uPSBjb21tZW50IGluIGl0LgorIiIiCitpbXBvcnQgaW1wdXRpbCwgcmUsIHN5cworCitpbXBvcnQgZ2V0dGV4dAorXyA9IGxhbWJkYSB4OiBnZXR0ZXh0LmxkZ2V0dGV4dCgicHlraWNrc3RhcnQiLCB4KQorCitmcm9tIHB5a2lja3N0YXJ0LmVycm9ycyBpbXBvcnQgS2lja3N0YXJ0VmVyc2lvbkVycm9yCisKKyMgU3ltYm9saWMgbmFtZXMgZm9yIGludGVybmFsIHZlcnNpb24gbnVtYmVycy4KK1JIRUwzID0gOTAwCitGQzMgPSAxMDAwCitSSEVMNCA9IDExMDAKK0ZDNCA9IDIwMDAKK0ZDNSA9IDMwMDAKK0ZDNiA9IDQwMDAKK1JIRUw1ID0gNDEwMAorRjcgID0gNTAwMAorRjggPSA2MDAwCitGOSA9IDcwMDAKK0YxMCA9IDgwMDAKK0YxMSA9IDkwMDAKK0YxMiA9IDEwMDAwCitGMTMgPSAxMTAwMAorUkhFTDYgPSAxMTEwMAorRjE0ID0gMTIwMDAKK0YxNSA9IDEzMDAwCitGMTYgPSAxNDAwMAorCisjIFRoaXMgYWx3YXlzIHBvaW50cyBhdCB0aGUgbGF0ZXN0IHZlcnNpb24gYW5kIGlzIHRoZSBkZWZhdWx0LgorREVWRUwgPSBGMTYKKworIyBBIG9uZS10by1vbmUgbWFwcGluZyBmcm9tIHN0cmluZyByZXByZXNlbnRhdGlvbnMgdG8gdmVyc2lvbiBudW1iZXJzLgordmVyc2lvbk1hcCA9IHsKKyAgICAgICAgIkRFVkVMIjogREVWRUwsCisgICAgICAgICJGQzMiOiBGQzMsICJGQzQiOiBGQzQsICJGQzUiOiBGQzUsICJGQzYiOiBGQzYsICJGNyI6IEY3LCAiRjgiOiBGOCwKKyAgICAgICAgIkY5IjogRjksICJGMTAiOiBGMTAsICJGMTEiOiBGMTEsICJGMTIiOiBGMTIsICJGMTMiOiBGMTMsCisgICAgICAgICJGMTQiOiBGMTQsICJGMTUiOiBGMTUsICJGMTYiOiBGMTYsCisgICAgICAgICJSSEVMMyI6IFJIRUwzLCAiUkhFTDQiOiBSSEVMNCwgIlJIRUw1IjogUkhFTDUsICJSSEVMNiI6IFJIRUw2Cit9CisKK2RlZiBzdHJpbmdUb1ZlcnNpb24ocyk6CisgICAgIiIiQ29udmVydCBzdHJpbmcgaW50byBvbmUgb2YgdGhlIHByb3ZpZGVkIHZlcnNpb24gY29uc3RhbnRzLiAgUmFpc2VzCisgICAgICAgS2lja3N0YXJ0VmVyc2lvbkVycm9yIGlmIHN0cmluZyBkb2VzIG5vdCBtYXRjaCBhbnl0aGluZy4KKyAgICAiIiIKKyAgICAjIEZpcnN0IHRyeSB0aGVzZSBzaG9ydCBmb3Jtcy4KKyAgICB0cnk6CisgICAgICAgIHJldHVybiB2ZXJzaW9uTWFwW3MudXBwZXIoKV0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHBhc3MKKworICAgICMgTm93IHRyeSB0aGUgRmVkb3JhIHZlcnNpb25zLgorICAgIG0gPSByZS5tYXRjaCgiXmZlZG9yYS4qIChcZCspJCIsIHMsIHJlLkkpCisKKyAgICBpZiBtIGFuZCBtLmdyb3VwKDEpOgorICAgICAgICBpZiB2ZXJzaW9uTWFwLmhhc19rZXkoIkZDIiArIG0uZ3JvdXAoMSkpOgorICAgICAgICAgICAgcmV0dXJuIHZlcnNpb25NYXBbIkZDIiArIG0uZ3JvdXAoMSldCisgICAgICAgIGVsaWYgdmVyc2lvbk1hcC5oYXNfa2V5KCJGIiArIG0uZ3JvdXAoMSkpOgorICAgICAgICAgICAgcmV0dXJuIHZlcnNpb25NYXBbIkYiICsgbS5ncm91cCgxKV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEtpY2tzdGFydFZlcnNpb25FcnJvcihfKCJVbnN1cHBvcnRlZCB2ZXJzaW9uIHNwZWNpZmllZDogJXMiKSAlIHMpCisKKyAgICAjIE5vdyB0cnkgdGhlIFJIRUwgdmVyc2lvbnMuCisgICAgbSA9IHJlLm1hdGNoKCJecmVkIGhhdCBlbnRlcnByaXNlIGxpbnV4LiogKFxkKykoW1wuXGRdKikkIiwgcywgcmUuSSkKKworICAgIGlmIG0gYW5kIG0uZ3JvdXAoMSk6CisgICAgICAgIGlmIHZlcnNpb25NYXAuaGFzX2tleSgiUkhFTCIgKyBtLmdyb3VwKDEpKToKKyAgICAgICAgICAgIHJldHVybiB2ZXJzaW9uTWFwWyJSSEVMIiArIG0uZ3JvdXAoMSldCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBLaWNrc3RhcnRWZXJzaW9uRXJyb3IoXygiVW5zdXBwb3J0ZWQgdmVyc2lvbiBzcGVjaWZpZWQ6ICVzIikgJSBzKQorCisgICAgIyBJZiBub3RoaW5nIGVsc2Ugd29ya2VkLCB3ZSdyZSBvdXQgb2Ygb3B0aW9ucy4KKyAgICByYWlzZSBLaWNrc3RhcnRWZXJzaW9uRXJyb3IoXygiVW5zdXBwb3J0ZWQgdmVyc2lvbiBzcGVjaWZpZWQ6ICVzIikgJSBzKQorCitkZWYgdmVyc2lvblRvU3RyaW5nKHZlcnNpb24sIHNraXBEZXZlbD1GYWxzZSk6CisgICAgIiIiQ29udmVydCB2ZXJzaW9uIGludG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZlcnNpb24gbnVtYmVyLgorICAgICAgIFRoaXMgaXMgdGhlIHJldmVyc2Ugb3BlcmF0aW9uIG9mIHN0cmluZ1RvVmVyc2lvbi4gIFJhaXNlcworICAgICAgIEtpY2tzdGFydFZlcnNpb25FcnJvciBpZiB2ZXJzaW9uIGRvZXMgbm90IG1hdGNoIGFueXRoaW5nLgorICAgICIiIgorICAgIGlmIG5vdCBza2lwRGV2ZWwgYW5kIHZlcnNpb24gPT0gdmVyc2lvbk1hcFsiREVWRUwiXToKKyAgICAgICAgcmV0dXJuICJERVZFTCIKKworICAgIGZvciAoa2V5LCB2YWwpIGluIHZlcnNpb25NYXAuaXRlcml0ZW1zKCk6CisgICAgICAgIGlmIGtleSA9PSAiREVWRUwiOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZWxpZiB2YWwgPT0gdmVyc2lvbjoKKyAgICAgICAgICAgIHJldHVybiBrZXkKKworICAgIHJhaXNlIEtpY2tzdGFydFZlcnNpb25FcnJvcihfKCJVbnN1cHBvcnRlZCB2ZXJzaW9uIHNwZWNpZmllZDogJXMiKSAlIHZlcnNpb24pCisKK2RlZiByZXR1cm5DbGFzc0ZvclZlcnNpb24odmVyc2lvbj1ERVZFTCk6CisgICAgIiIiUmV0dXJuIHRoZSBjbGFzcyBvZiB0aGUgc3ludGF4IGhhbmRsZXIgZm9yIHZlcnNpb24uICB2ZXJzaW9uIGNhbiBiZQorICAgICAgIGVpdGhlciBhIHN0cmluZyBvciB0aGUgbWF0Y2hpbmcgY29uc3RhbnQuICBSYWlzZXMgS2lja3N0YXJ0VmFsdWVFcnJvcgorICAgICAgIGlmIHZlcnNpb24gZG9lcyBub3QgbWF0Y2ggYW55dGhpbmcuCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICB2ZXJzaW9uID0gaW50KHZlcnNpb24pCisgICAgICAgIG1vZHVsZSA9ICIlcyIgJSB2ZXJzaW9uVG9TdHJpbmcodmVyc2lvbiwgc2tpcERldmVsPVRydWUpCisgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgIG1vZHVsZSA9ICIlcyIgJSB2ZXJzaW9uCisgICAgICAgIHZlcnNpb24gPSBzdHJpbmdUb1ZlcnNpb24odmVyc2lvbikKKworICAgIG1vZHVsZSA9IG1vZHVsZS5sb3dlcigpCisKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBweWtpY2tzdGFydC5oYW5kbGVycworICAgICAgICBzeXMucGF0aC5leHRlbmQocHlraWNrc3RhcnQuaGFuZGxlcnMuX19wYXRoX18pCisgICAgICAgIGZvdW5kID0gaW1wdXRpbC5pbXAuZmluZF9tb2R1bGUobW9kdWxlKQorICAgICAgICBsb2FkZWQgPSBpbXB1dGlsLmltcC5sb2FkX21vZHVsZShtb2R1bGUsIGZvdW5kWzBdLCBmb3VuZFsxXSwgZm91bmRbMl0pCisKKyAgICAgICAgZm9yIChrLCB2KSBpbiBsb2FkZWQuX19kaWN0X18uaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiBrLmxvd2VyKCkuZW5kc3dpdGgoIiVzaGFuZGxlciIgJSBtb2R1bGUpOgorICAgICAgICAgICAgICAgIHJldHVybiB2CisgICAgZXhjZXB0OgorICAgICAgICByYWlzZSBLaWNrc3RhcnRWZXJzaW9uRXJyb3IoXygiVW5zdXBwb3J0ZWQgdmVyc2lvbiBzcGVjaWZpZWQ6ICVzIikgJSB2ZXJzaW9uKQorCitkZWYgbWFrZVZlcnNpb24odmVyc2lvbj1ERVZFTCk6CisgICAgIiIiUmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBzeW50YXggaGFuZGxlciBmb3IgdmVyc2lvbi4gIHZlcnNpb24gY2FuIGJlCisgICAgICAgZWl0aGVyIGEgc3RyaW5nIG9yIHRoZSBtYXRjaGluZyBjb25zdGFudC4gIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIGZvcgorICAgICAgIHN0YW5kYWxvbmUgcHJvZ3JhbXMgd2hpY2gganVzdCBuZWVkIHRvIGhhbmRsZSBhIHNwZWNpZmljIHZlcnNpb24gb2YKKyAgICAgICBraWNrc3RhcnQgc3ludGF4IChhcyBwcm92aWRlZCBieSBhIGNvbW1hbmQgbGluZSBhcmd1bWVudCwgZm9yIGV4YW1wbGUpCisgICAgICAgYW5kIG5lZWQgdG8gaW5zdGFudGlhdGUgdGhlIGNvcnJlY3Qgb2JqZWN0LgorICAgICIiIgorICAgIGNsID0gcmV0dXJuQ2xhc3NGb3JWZXJzaW9uKHZlcnNpb24pCisgICAgcmV0dXJuIGNsKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNjMWQ5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsNCBAQAoraW1wb3J0IG9zLCBzeXMKKworY3VyX3BhdGggPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yICcuJworc3lzLnBhdGguaW5zZXJ0KDAsIGN1cl9wYXRoICsgJy8zcmRwYXJ0eScpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9fX3ZlcnNpb25fXy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL19fdmVyc2lvbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NTJhNDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9fX3ZlcnNpb25fXy5weQpAQCAtMCwwICsxIEBACitWRVJTSU9OID0gIjIuMDAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL2RpcmVjdGRpc2stZ3B0LndrcyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvZGlyZWN0ZGlzay1ncHQud2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMDFjZjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL2RpcmVjdGRpc2stZ3B0LndrcwpAQCAtMCwwICsxLDEwIEBACisjIHNob3J0LWRlc2NyaXB0aW9uOiBDcmVhdGUgYSAncGNiaW9zJyBkaXJlY3QgZGlzayBpbWFnZQorIyBsb25nLWRlc2NyaXB0aW9uOiBDcmVhdGVzIGEgcGFydGl0aW9uZWQgbGVnYWN5IEJJT1MgZGlzayBpbWFnZSB0aGF0IHRoZSB1c2VyCisjIGNhbiBkaXJlY3RseSBkZCB0byBib290IG1lZGlhLgorCisKK3BhcnQgL2Jvb3QgLS1zb3VyY2UgYm9vdGltZy1wY2Jpb3MgLS1vbmRpc2sgc2RhIC0tbGFiZWwgYm9vdCAtLWFjdGl2ZSAtLWFsaWduIDEwMjQKK3BhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDQgLS1sYWJlbCBwbGF0Zm9ybSAtLWFsaWduIDEwMjQgLS11c2UtdXVpZAorCitib290bG9hZGVyICAtLXB0YWJsZSBncHQgLS10aW1lb3V0PTAgIC0tYXBwZW5kPSJyb290d2FpdCByb290ZnN0eXBlPWV4dDQgdmlkZW89dmVzYWZiIHZnYT0weDMxOCBjb25zb2xlPXR0eTAiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvZGlyZWN0ZGlzay1tdWx0aS1yb290ZnMud2tzIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrLW11bHRpLXJvb3Rmcy53a3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE4MWY4ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvZGlyZWN0ZGlzay1tdWx0aS1yb290ZnMud2tzCkBAIC0wLDAgKzEsMjMgQEAKKyMgc2hvcnQtZGVzY3JpcHRpb246IENyZWF0ZSBtdWx0aSByb290ZnMgaW1hZ2UgdXNpbmcgcm9vdGZzIHBsdWdpbgorIyBsb25nLWRlc2NyaXB0aW9uOiBDcmVhdGVzIGEgcGFydGl0aW9uZWQgZGlzayBpbWFnZSB3aXRoIHR3byByb290ZnMgcGFydGl0aW9ucworIyB1c2luZyByb290ZnMgcGx1Z2luLgorIworIyBQYXJ0aXRpb25zIGNhbiB1c2UgZWl0aGVyCisjICAgLSBpbmRpcmVjdCByb290ZnMgcmVmZXJlbmNlcyB0byBpbWFnZSByZWNpcGUocyk6CisjICAgICB3aWMgY3JlYXRlIGRpcmVjdGRpc2stbXVsdGktaW5kaXJlY3QtcmVjaXBlcyAtZSBjb3JlLWltYWdlLW1pbmltYWwgXAorIyAgICAgICAgIC0tcm9vdGZzLWRpciByb290ZnMxPWNvcmUtaW1hZ2UtbWluaW1hbAorIyAgICAgICAgIC0tcm9vdGZzLWRpciByb290ZnMyPWNvcmUtaW1hZ2UtbWluaW1hbC1kZXYKKyMKKyMgICAtIG9yIHBhdGhzIHRvIHJvb3RmcyBkaXJlY3RvcmllczoKKyMgICAgIHdpYyBjcmVhdGUgZGlyZWN0ZGlzay1tdWx0aS1yb290ZnMgXAorIyAgICAgICAgIC0tcm9vdGZzLWRpciByb290ZnMxPXRtcC93b3JrL3FlbXV4ODZfNjQtcG9reS1saW51eC9jb3JlLWltYWdlLW1pbmltYWwvMS4wLXIwL3Jvb3Rmcy8KKyMgICAgICAgICAtLXJvb3Rmcy1kaXIgcm9vdGZzMj10bXAvd29yay9xZW11eDg2XzY0LXBva3ktbGludXgvY29yZS1pbWFnZS1taW5pbWFsLWRldi8xLjAtcjAvcm9vdGZzLworIworIyAgIC0gb3IgYW55IGNvbWJpbmF0aW9ucyBvZiAtciBhbmQgLS1yb290ZnMgY29tbWFuZCBsaW5lIG9wdGlvbnMKKworcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLXBjYmlvcyAtLW9uZGlzayBzZGEgLS1sYWJlbCBib290IC0tYWN0aXZlIC0tYWxpZ24gMTAyNAorcGFydCAvIC0tc291cmNlIHJvb3RmcyAtLXJvb3Rmcy1kaXI9cm9vdGZzMSAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0NCAtLWxhYmVsIHBsYXRmb3JtIC0tYWxpZ24gMTAyNAorcGFydCAvcmVzY3VlIC0tc291cmNlIHJvb3RmcyAtLXJvb3Rmcy1kaXI9cm9vdGZzMiAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0NCAtLWxhYmVsIHNlY29uZGFyeSAtLWFsaWduIDEwMjQKKworYm9vdGxvYWRlciAgLS10aW1lb3V0PTAgIC0tYXBwZW5kPSJyb290d2FpdCByb290ZnN0eXBlPWV4dDQgdmlkZW89dmVzYWZiIHZnYT0weDMxOCBjb25zb2xlPXR0eTAiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvZGlyZWN0ZGlzay53a3MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL2RpcmVjdGRpc2sud2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNGM5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL2RpcmVjdGRpc2sud2tzCkBAIC0wLDAgKzEsMTAgQEAKKyMgc2hvcnQtZGVzY3JpcHRpb246IENyZWF0ZSBhICdwY2Jpb3MnIGRpcmVjdCBkaXNrIGltYWdlCisjIGxvbmctZGVzY3JpcHRpb246IENyZWF0ZXMgYSBwYXJ0aXRpb25lZCBsZWdhY3kgQklPUyBkaXNrIGltYWdlIHRoYXQgdGhlIHVzZXIKKyMgY2FuIGRpcmVjdGx5IGRkIHRvIGJvb3QgbWVkaWEuCisKKworcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLXBjYmlvcyAtLW9uZGlzayBzZGEgLS1sYWJlbCBib290IC0tYWN0aXZlIC0tYWxpZ24gMTAyNAorcGFydCAvIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0NCAtLWxhYmVsIHBsYXRmb3JtIC0tYWxpZ24gMTAyNAorCitib290bG9hZGVyICAtLXRpbWVvdXQ9MCAgLS1hcHBlbmQ9InJvb3R3YWl0IHJvb3Rmc3R5cGU9ZXh0NCB2aWRlbz12ZXNhZmIgdmdhPTB4MzE4IGNvbnNvbGU9dHR5MCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9ta2VmaWRpc2sud2tzIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9ta2VmaWRpc2sud2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NmU5NGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL21rZWZpZGlzay53a3MKQEAgLTAsMCArMSwxMSBAQAorIyBzaG9ydC1kZXNjcmlwdGlvbjogQ3JlYXRlIGFuIEVGSSBkaXNrIGltYWdlCisjIGxvbmctZGVzY3JpcHRpb246IENyZWF0ZXMgYSBwYXJ0aXRpb25lZCBFRkkgZGlzayBpbWFnZSB0aGF0IHRoZSB1c2VyCisjIGNhbiBkaXJlY3RseSBkZCB0byBib290IG1lZGlhLgorCitwYXJ0IC9ib290IC0tc291cmNlIGJvb3RpbWctZWZpIC0tc291cmNlcGFyYW1zPSJsb2FkZXI9Z3J1Yi1lZmkiIC0tb25kaXNrIHNkYSAtLWxhYmVsIG1zZG9zIC0tYWN0aXZlIC0tYWxpZ24gMTAyNAorCitwYXJ0IC8gLS1zb3VyY2Ugcm9vdGZzIC0tb25kaXNrIHNkYSAtLWZzdHlwZT1leHQ0IC0tbGFiZWwgcGxhdGZvcm0gLS1hbGlnbiAxMDI0CisKK3BhcnQgc3dhcCAtLW9uZGlzayBzZGEgLS1zaXplIDQ0IC0tbGFiZWwgc3dhcDEgLS1mc3R5cGU9c3dhcAorCitib290bG9hZGVyICAtLXRpbWVvdXQ9MTAgIC0tYXBwZW5kPSJyb290d2FpdCByb290ZnN0eXBlPWV4dDQgY29uc29sZT10dHlQQ0gwLDExNTIwMCBjb25zb2xlPXR0eTAgdm1hbGxvYz0yNTZNQiBzbmQtaGRhLWludGVsLmVuYWJsZV9tc2k9MCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvbWtndW1taWRpc2sud2tzIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9ta2d1bW1pZGlzay53a3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhMjJmNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvbWtndW1taWRpc2sud2tzCkBAIC0wLDAgKzEsMTEgQEAKKyMgc2hvcnQtZGVzY3JpcHRpb246IENyZWF0ZSBhbiBFRkkgZGlzayBpbWFnZQorIyBsb25nLWRlc2NyaXB0aW9uOiBDcmVhdGVzIGEgcGFydGl0aW9uZWQgRUZJIGRpc2sgaW1hZ2UgdGhhdCB0aGUgdXNlcgorIyBjYW4gZGlyZWN0bHkgZGQgdG8gYm9vdCBtZWRpYS4KKworcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLWVmaSAtLXNvdXJjZXBhcmFtcz0ibG9hZGVyPWd1bW1pYm9vdCIgLS1vbmRpc2sgc2RhIC0tbGFiZWwgbXNkb3MgLS1hY3RpdmUgLS1hbGlnbiAxMDI0CisKK3BhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDQgLS1sYWJlbCBwbGF0Zm9ybSAtLWFsaWduIDEwMjQKKworcGFydCBzd2FwIC0tb25kaXNrIHNkYSAtLXNpemUgNDQgLS1sYWJlbCBzd2FwMSAtLWZzdHlwZT1zd2FwCisKK2Jvb3Rsb2FkZXIgIC0tdGltZW91dD0xMCAgLS1hcHBlbmQ9InJvb3R3YWl0IHJvb3Rmc3R5cGU9ZXh0NCBjb25zb2xlPXR0eVBDSDAsMTE1MjAwIGNvbnNvbGU9dHR5MCB2bWFsbG9jPTI1Nk1CIHNuZC1oZGEtaW50ZWwuZW5hYmxlX21zaT0wIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9ta2h5YnJpZGlzby53a3MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL21raHlicmlkaXNvLndrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDM0ZTliCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9ta2h5YnJpZGlzby53a3MKQEAgLTAsMCArMSw3IEBACisjIHNob3J0LWRlc2NyaXB0aW9uOiBDcmVhdGUgYSBoeWJyaWQgSVNPIGltYWdlCisjIGxvbmctZGVzY3JpcHRpb246IENyZWF0ZXMgYW4gRUZJIGFuZCBsZWdhY3kgYm9vdGFibGUgaHlicmlkIElTTyBpbWFnZQorIyB3aGljaCBjYW4gYmUgdXNlZCBvbiBvcHRpY2FsIG1lZGlhIGFzIHdlbGwgYXMgVVNCIG1lZGlhLgorCitwYXJ0IC9ib290IC0tc291cmNlIGlzb2ltYWdlLWlzb2h5YnJpZCAtLXNvdXJjZXBhcmFtcz0ibG9hZGVyPWdydWItZWZpLGltYWdlX25hbWU9SFlCUklEX0lTT19JTUciIC0tb25kaXNrIGNkIC0tbGFiZWwgSFlCUklESVNPIC0tZnN0eXBlPWV4dDQKKworYm9vdGxvYWRlciAgLS10aW1lb3V0PTE1ICAtLWFwcGVuZD0iIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9xZW11eDg2LWRpcmVjdGRpc2sud2tzIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9xZW11eDg2LWRpcmVjdGRpc2sud2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYzM4YjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL3FlbXV4ODYtZGlyZWN0ZGlzay53a3MKQEAgLTAsMCArMSwxMCBAQAorIyBzaG9ydC1kZXNjcmlwdGlvbjogQ3JlYXRlIGEgcWVtdSBtYWNoaW5lICdwY2Jpb3MnIGRpcmVjdCBkaXNrIGltYWdlCisjIGxvbmctZGVzY3JpcHRpb246IENyZWF0ZXMgYSBwYXJ0aXRpb25lZCBsZWdhY3kgQklPUyBkaXNrIGltYWdlIHRoYXQgdGhlIHVzZXIKKyMgY2FuIGRpcmVjdGx5IHVzZSB0byBib290IGEgcWVtdSBtYWNoaW5lLgorCisKK3BhcnQgL2Jvb3QgLS1zb3VyY2UgYm9vdGltZy1wY2Jpb3MgLS1vbmRpc2sgc2RhIC0tbGFiZWwgYm9vdCAtLWFjdGl2ZSAtLWFsaWduIDEwMjQKK3BhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDQgLS1sYWJlbCBwbGF0Zm9ybSAtLWFsaWduIDEwMjQKKworYm9vdGxvYWRlciAgLS10aW1lb3V0PTAgIC0tYXBwZW5kPSJ2Z2E9MCB1dmVzYWZiLm1vZGVfb3B0aW9uPTY0MHg0ODAtMzIgcm9vdD0vZGV2L3ZkYTIgcncgbWVtPTI1Nk0gaXA9MTkyLjE2OC43LjI6OjE5Mi4xNjguNy4xOjI1NS4yNTUuMjU1LjAgb3Byb2ZpbGUudGltZXI9MSByb290ZnN0eXBlPWV4dDQgIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL3NkaW1hZ2UtYm9vdHBhcnQud2tzIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9zZGltYWdlLWJvb3RwYXJ0LndrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmZkNjMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9zZGltYWdlLWJvb3RwYXJ0LndrcwpAQCAtMCwwICsxLDYgQEAKKyMgc2hvcnQtZGVzY3JpcHRpb246IENyZWF0ZSBTRCBjYXJkIGltYWdlIHdpdGggYSBib290IHBhcnRpdGlvbgorIyBsb25nLWRlc2NyaXB0aW9uOiBDcmVhdGVzIGEgcGFydGl0aW9uZWQgU0QgY2FyZCBpbWFnZS4gQm9vdCBmaWxlcworIyBhcmUgbG9jYXRlZCBpbiB0aGUgZmlyc3QgdmZhdCBwYXJ0aXRpb24uCisKK3BhcnQgL2Jvb3QgLS1zb3VyY2UgYm9vdGltZy1wYXJ0aXRpb24gLS1vbmRpc2sgbW1jYmxrIC0tZnN0eXBlPXZmYXQgLS1sYWJlbCBib290IC0tYWN0aXZlIC0tYWxpZ24gNCAtLXNpemUgMTYKK3BhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgbW1jYmxrIC0tZnN0eXBlPWV4dDQgLS1sYWJlbCByb290IC0tYWxpZ24gNApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY29uZi5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2NvbmYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ0MzYzYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2NvbmYucHkKQEAgLTAsMCArMSwxMDAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbiAtdHQKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDExIEludGVsLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorIyBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorCitpbXBvcnQgb3MKKworZnJvbSB3aWMgaW1wb3J0IG1zZ2VyCitmcm9tIHdpYyBpbXBvcnQga2lja3N0YXJ0Citmcm9tIHdpYy51dGlscyBpbXBvcnQgbWlzYworCisKK2RlZiBnZXRfc2l0ZWNvbmYoKToKKyAgICB3aWNfcGF0aCA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKKyAgICBlb3MgPSB3aWNfcGF0aC5maW5kKCdzY3JpcHRzJykgKyBsZW4oJ3NjcmlwdHMnKQorICAgIHNjcmlwdHNfcGF0aCA9IHdpY19wYXRoWzplb3NdCisKKyAgICByZXR1cm4gc2NyaXB0c19wYXRoICsgIi9saWIvaW1hZ2UvY29uZmlnL3dpYy5jb25mIgorCitjbGFzcyBDb25maWdNZ3Iob2JqZWN0KToKKyAgICBERUZBVUxUUyA9IHsKKyAgICAgICAgJ2NvbW1vbic6IHsKKyAgICAgICAgICAgICJkaXN0cm9fbmFtZSI6ICJEZWZhdWx0IERpc3RyaWJ1dGlvbiIsCisgICAgICAgICAgICAicGx1Z2luX2RpciI6ICIvdXNyL2xpYi93aWMvcGx1Z2lucyJ9LCAjIFRPRE8gdXNlIHByZWZpeCBhbHNvPworICAgICAgICAnY3JlYXRlJzogeworICAgICAgICAgICAgInRtcGRpciI6ICcvdmFyL3RtcC93aWMnLAorICAgICAgICAgICAgIm91dGRpciI6ICcuL3dpYy1vdXRwdXQnLAorICAgICAgICAgICAgInJlbGVhc2UiOiBOb25lLAorICAgICAgICAgICAgImxvZ2ZpbGUiOiBOb25lLAorICAgICAgICAgICAgIm5hbWVfcHJlZml4IjogTm9uZSwKKyAgICAgICAgICAgICJuYW1lX3N1ZmZpeCI6IE5vbmV9CisgICAgICAgIH0KKworICAgICMgbWFrZSB0aGUgbWFuYWdlciBjbGFzcyBhcyBzaW5nbGV0b24KKyAgICBfaW5zdGFuY2UgPSBOb25lCisgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiBub3QgY2xzLl9pbnN0YW5jZToKKyAgICAgICAgICAgIGNscy5faW5zdGFuY2UgPSBzdXBlcihDb25maWdNZ3IsIGNscykuX19uZXdfXyhjbHMsICphcmdzLCAqKmt3YXJncykKKworICAgICAgICByZXR1cm4gY2xzLl9pbnN0YW5jZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGtzY29uZj1Ob25lLCBzaXRlY29uZj1Ob25lKToKKyAgICAgICAgIyByZXNldCBjb25maWcgb3B0aW9ucworICAgICAgICBzZWxmLnJlc2V0KCkKKworICAgICAgICBpZiBub3Qgc2l0ZWNvbmY6CisgICAgICAgICAgICBzaXRlY29uZiA9IGdldF9zaXRlY29uZigpCisKKyAgICAgICAgIyBpbml0aWFsIG9wdGlvbnMgZnJvbSBzaXRlY29uZgorICAgICAgICBzZWxmLl9zaXRlY29uZiA9IHNpdGVjb25mCisKKyAgICAgICAgaWYga3Njb25mOgorICAgICAgICAgICAgc2VsZi5fa3Njb25mID0ga3Njb25mCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYuX19rc2NvbmYgPSBOb25lCisgICAgICAgIHNlbGYuX19zaXRlY29uZiA9IE5vbmUKKyAgICAgICAgc2VsZi5jcmVhdGUgPSB7fQorCisgICAgICAgICMgaW5pdGlhbGl6ZSB0aGUgdmFsdWVzIHdpdGggZGVmYXVsdHMKKyAgICAgICAgZm9yIHNlYywgdmFscyBpbiBzZWxmLkRFRkFVTFRTLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBzZWMsIHZhbHMpCisKKyAgICBkZWYgX19zZXRfa3Njb25mKHNlbGYsIGtzY29uZik6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShrc2NvbmYpOgorICAgICAgICAgICAgbXNnZXIuZXJyb3IoJ0Nhbm5vdCBmaW5kIGtzIGZpbGU6ICVzJyAlIGtzY29uZikKKworICAgICAgICBzZWxmLl9fa3Njb25mID0ga3Njb25mCisgICAgICAgIHNlbGYuX3BhcnNlX2tpY2tzdGFydChrc2NvbmYpCisgICAgZGVmIF9fZ2V0X2tzY29uZihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19rc2NvbmYKKyAgICBfa3Njb25mID0gcHJvcGVydHkoX19nZXRfa3Njb25mLCBfX3NldF9rc2NvbmYpCisKKyAgICBkZWYgX3BhcnNlX2tpY2tzdGFydChzZWxmLCBrc2NvbmY9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBrc2NvbmY6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBrc29iaiA9IGtpY2tzdGFydC5yZWFkX2tpY2tzdGFydChrc2NvbmYpCisKKyAgICAgICAgc2VsZi5jcmVhdGVbJ2tzJ10gPSBrc29iagorICAgICAgICBzZWxmLmNyZWF0ZVsnbmFtZSddID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKGtzY29uZikpWzBdCisKKyAgICAgICAgc2VsZi5jcmVhdGVbJ25hbWUnXSA9IG1pc2MuYnVpbGRfbmFtZShrc2NvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jcmVhdGVbJ3JlbGVhc2UnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNyZWF0ZVsnbmFtZV9wcmVmaXgnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNyZWF0ZVsnbmFtZV9zdWZmaXgnXSkKKworY29uZmlnbWdyID0gQ29uZmlnTWdyKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2NvbmZpZy93aWMuY29uZiBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2NvbmZpZy93aWMuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTFiY2I1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY29uZmlnL3dpYy5jb25mCkBAIC0wLDAgKzEsNiBAQAorW2NvbW1vbl0KKzsgZ2VuZXJhbCBzZXR0aW5ncworZGlzdHJvX25hbWUgPSBPcGVuRW1iZWRkZWQKKworW2NyZWF0ZV0KKzsgc2V0dGluZ3MgZm9yIGNyZWF0ZSBzdWJjb21tYW5kCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jcmVhdG9yLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY3JlYXRvci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjMxMjk3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY3JlYXRvci5weQpAQCAtMCwwICsxLDEyNCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uIC10dAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgSW50ZWwsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyMgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisjIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisKK2ltcG9ydCBvcywgc3lzCitmcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIsIFNVUFBSRVNTX0hFTFAKKworZnJvbSB3aWMgaW1wb3J0IG1zZ2VyCitmcm9tIHdpYy51dGlscyBpbXBvcnQgZXJyb3JzCitmcm9tIHdpYy5jb25mIGltcG9ydCBjb25maWdtZ3IKK2Zyb20gd2ljLnBsdWdpbiBpbXBvcnQgcGx1Z2lubWdyCisKKworY2xhc3MgQ3JlYXRvcihvYmplY3QpOgorICAgICIiIiR7bmFtZX06IGNyZWF0ZSBhbiBpbWFnZQorCisgICAgVXNhZ2U6CisgICAgICAgICR7bmFtZX0gU1VCQ09NTUFORCA8a3NmaWxlPiBbT1BUU10KKworICAgICR7Y29tbWFuZF9saXN0fQorICAgICR7b3B0aW9uX2xpc3R9CisgICAgIiIiCisKKyAgICBuYW1lID0gJ3dpYyBjcmVhdGUoY3IpJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuX3N1YmNtZHMgPSB7fQorCisgICAgICAgICMgZ2V0IGNtZHMgZnJvbSBwbHVnaW5tZ3IKKyAgICAgICAgIyBtaXgtaW4gZG9fc3ViY21kIGludGVyZmFjZQorICAgICAgICBmb3Igc3ViY21kLCBrbGFzcyBpbiBwbHVnaW5tZ3IuZ2V0X3BsdWdpbnMoJ2ltYWdlcicpLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoa2xhc3MsICdkb19jcmVhdGUnKToKKyAgICAgICAgICAgICAgICBtc2dlci53YXJuaW5nKCJVbnN1cHBvcnRlZCBzdWJjbWQ6ICVzIiAlIHN1YmNtZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihrbGFzcywgJ2RvX2NyZWF0ZScpCisgICAgICAgICAgICBzZWxmLl9zdWJjbWRzW3N1YmNtZF0gPSBmdW5jCisKKyAgICBkZWYgZ2V0X29wdHBhcnNlcihzZWxmKToKKyAgICAgICAgb3B0cGFyc2VyID0gT3B0aW9uUGFyc2VyKCkKKyAgICAgICAgb3B0cGFyc2VyLmFkZF9vcHRpb24oJy1kJywgJy0tZGVidWcnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdkZWJ1ZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9U1VQUFJFU1NfSEVMUCkKKyAgICAgICAgb3B0cGFyc2VyLmFkZF9vcHRpb24oJy12JywgJy0tdmVyYm9zZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3ZlcmJvc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPVNVUFBSRVNTX0hFTFApCisgICAgICAgIG9wdHBhcnNlci5hZGRfb3B0aW9uKCcnLCAnLS1sb2dmaWxlJywgdHlwZT0nc3RyaW5nJywgZGVzdD0nbG9nZmlsZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUGF0aCBvZiBsb2dmaWxlJykKKyAgICAgICAgb3B0cGFyc2VyLmFkZF9vcHRpb24oJy1jJywgJy0tY29uZmlnJywgdHlwZT0nc3RyaW5nJywgZGVzdD0nY29uZmlnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTcGVjaWZ5IGNvbmZpZyBmaWxlIGZvciB3aWMnKQorICAgICAgICBvcHRwYXJzZXIuYWRkX29wdGlvbignLW8nLCAnLS1vdXRkaXInLCB0eXBlPSdzdHJpbmcnLCBhY3Rpb249J3N0b3JlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nb3V0ZGlyJywgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdPdXRwdXQgZGlyZWN0b3J5JykKKyAgICAgICAgb3B0cGFyc2VyLmFkZF9vcHRpb24oJycsICctLXRtcGZzJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0nZW5hYmxldG1wZnMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTZXR1cCB0bXBkaXIgYXMgdG1wZnMgdG8gYWNjZWxlcmF0ZSwgZXhwZXJpbWVudGFsJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgZmVhdHVyZSwgdXNlIGl0IGlmIHlvdSBoYXZlIG1vcmUgdGhhbiA0RyBtZW1vcnknKQorICAgICAgICByZXR1cm4gb3B0cGFyc2VyCisKKyAgICBkZWYgcG9zdG9wdHBhcnNlKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICBhYnNwYXRoID0gbGFtYmRhIHB0aDogb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZXhwYW5kdXNlcihwdGgpKQorCisgICAgICAgIGlmIG9wdGlvbnMudmVyYm9zZToKKyAgICAgICAgICAgIG1zZ2VyLnNldF9sb2dsZXZlbCgndmVyYm9zZScpCisgICAgICAgIGlmIG9wdGlvbnMuZGVidWc6CisgICAgICAgICAgICBtc2dlci5zZXRfbG9nbGV2ZWwoJ2RlYnVnJykKKworICAgICAgICBpZiBvcHRpb25zLmxvZ2ZpbGU6CisgICAgICAgICAgICBsb2dmaWxlX2Fic19wYXRoID0gYWJzcGF0aChvcHRpb25zLmxvZ2ZpbGUpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGxvZ2ZpbGVfYWJzX3BhdGgpOgorICAgICAgICAgICAgICAgIHJhaXNlIGVycm9ycy5Vc2FnZSgibG9nZmlsZSdzIHBhdGggJXMgc2hvdWxkIGJlIGZpbGUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgb3B0aW9ucy5sb2dmaWxlKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguZGlybmFtZShsb2dmaWxlX2Fic19wYXRoKSk6CisgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMob3MucGF0aC5kaXJuYW1lKGxvZ2ZpbGVfYWJzX3BhdGgpKQorICAgICAgICAgICAgbXNnZXIuc2V0X2ludGVyYWN0aXZlKEZhbHNlKQorICAgICAgICAgICAgbXNnZXIuc2V0X2xvZ2ZpbGUobG9nZmlsZV9hYnNfcGF0aCkKKyAgICAgICAgICAgIGNvbmZpZ21nci5jcmVhdGVbJ2xvZ2ZpbGUnXSA9IG9wdGlvbnMubG9nZmlsZQorCisgICAgICAgIGlmIG9wdGlvbnMuY29uZmlnOgorICAgICAgICAgICAgY29uZmlnbWdyLnJlc2V0KCkKKyAgICAgICAgICAgIGNvbmZpZ21nci5fc2l0ZWNvbmYgPSBvcHRpb25zLmNvbmZpZworCisgICAgICAgIGlmIG9wdGlvbnMub3V0ZGlyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY29uZmlnbWdyLmNyZWF0ZVsnb3V0ZGlyJ10gPSBhYnNwYXRoKG9wdGlvbnMub3V0ZGlyKQorCisgICAgICAgIGNkaXIgPSAnb3V0ZGlyJworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjb25maWdtZ3IuY3JlYXRlW2NkaXJdKSBcCisgICAgICAgICAgIGFuZCBub3Qgb3MucGF0aC5pc2Rpcihjb25maWdtZ3IuY3JlYXRlW2NkaXJdKToKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCdJbnZhbGlkIGRpcmVjdG9yeSBzcGVjaWZpZWQ6ICVzJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAlIGNvbmZpZ21nci5jcmVhdGVbY2Rpcl0pCisKKyAgICAgICAgaWYgb3B0aW9ucy5lbmFibGV0bXBmczoKKyAgICAgICAgICAgIGNvbmZpZ21nci5jcmVhdGVbJ2VuYWJsZXRtcGZzJ10gPSBvcHRpb25zLmVuYWJsZXRtcGZzCisKKyAgICBkZWYgbWFpbihzZWxmLCBhcmd2PU5vbmUpOgorICAgICAgICBpZiBhcmd2IGlzIE5vbmU6CisgICAgICAgICAgICBhcmd2ID0gc3lzLmFyZ3YKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFyZ3YgPSBhcmd2WzpdICMgZG9uJ3QgbW9kaWZ5IGNhbGxlcidzIGxpc3QKKworICAgICAgICBwbmFtZSA9IGFyZ3ZbMF0KKyAgICAgICAgaWYgcG5hbWUgbm90IGluIHNlbGYuX3N1YmNtZHM6CisgICAgICAgICAgICBtc2dlci5lcnJvcignVW5rbm93biBwbHVnaW46ICVzJyAlIHBuYW1lKQorCisgICAgICAgIG9wdHBhcnNlciA9IHNlbGYuZ2V0X29wdHBhcnNlcigpCisgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBvcHRwYXJzZXIucGFyc2VfYXJncyhhcmd2KQorCisgICAgICAgIHNlbGYucG9zdG9wdHBhcnNlKG9wdGlvbnMpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N1YmNtZHNbcG5hbWVdKG9wdGlvbnMsICphcmdzWzE6XSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2VuZ2luZS5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2VuZ2luZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmI5M2U4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvZW5naW5lLnB5CkBAIC0wLDAgKzEsMjIwIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTMsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKworIyBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBpbWFnZSBjcmVhdGlvbiBlbmdpbmUgdXNlZCBieSAnd2ljJyB0bworIyBjcmVhdGUgaW1hZ2VzLiAgVGhlIGVuZ2luZSBwYXJzZXMgdGhyb3VnaCB0aGUgT3BlbkVtYmVkZGVkIGtpY2tzdGFydAorIyAod2tzKSBmaWxlIHNwZWNpZmllZCBhbmQgZ2VuZXJhdGVzIGltYWdlcyB0aGF0IGNhbiB0aGVuIGJlIGRpcmVjdGx5CisjIHdyaXR0ZW4gb250byBtZWRpYS4KKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBsaW51eC5pbnRlbC5jb20+CisjCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitmcm9tIHdpYyBpbXBvcnQgbXNnZXIsIGNyZWF0b3IKK2Zyb20gd2ljLnV0aWxzIGltcG9ydCBtaXNjCitmcm9tIHdpYy5wbHVnaW4gaW1wb3J0IHBsdWdpbm1ncgorZnJvbSB3aWMudXRpbHMub2UgaW1wb3J0IG1pc2MKKworCitkZWYgdmVyaWZ5X2J1aWxkX2VudigpOgorICAgICIiIgorICAgIFZlcmlmeSB0aGF0IHRoZSBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lLgorCisgICAgUmV0dXJucyBUcnVlIGlmIGl0IGlzLCBmYWxzZSBvdGhlcndpc2UKKyAgICAiIiIKKyAgICBpZiBub3Qgb3MuZW52aXJvbi5nZXQoIkJVSUxERElSIik6CisgICAgICAgIHByaW50ICJCVUlMRERJUiBub3QgZm91bmQsIGV4aXRpbmcuIChEaWQgeW91IGZvcmdldCB0byBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnY/KSIKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHJldHVybiBUcnVlCisKKworQ0FOTkVEX0lNQUdFX0RJUiA9ICJsaWIvd2ljL2Nhbm5lZC13a3MiICMgcmVsYXRpdmUgdG8gc2NyaXB0cworU0NSSVBUU19DQU5ORURfSU1BR0VfRElSID0gInNjcmlwdHMvIiArIENBTk5FRF9JTUFHRV9ESVIKKworZGVmIGJ1aWxkX2Nhbm5lZF9pbWFnZV9saXN0KHBhdGgpOgorICAgIGxheWVyc19wYXRoID0gbWlzYy5nZXRfYml0YmFrZV92YXIoIkJCTEFZRVJTIikKKyAgICBjYW5uZWRfd2tzX2xheWVyX2RpcnMgPSBbXQorCisgICAgaWYgbGF5ZXJzX3BhdGggaXMgbm90IE5vbmU6CisgICAgICAgIGZvciBsYXllcl9wYXRoIGluIGxheWVyc19wYXRoLnNwbGl0KCk6CisgICAgICAgICAgICBjcGF0aCA9IG9zLnBhdGguam9pbihsYXllcl9wYXRoLCBTQ1JJUFRTX0NBTk5FRF9JTUFHRV9ESVIpCisgICAgICAgICAgICBjYW5uZWRfd2tzX2xheWVyX2RpcnMuYXBwZW5kKGNwYXRoKQorCisgICAgY3BhdGggPSBvcy5wYXRoLmpvaW4ocGF0aCwgQ0FOTkVEX0lNQUdFX0RJUikKKyAgICBjYW5uZWRfd2tzX2xheWVyX2RpcnMuYXBwZW5kKGNwYXRoKQorCisgICAgcmV0dXJuIGNhbm5lZF93a3NfbGF5ZXJfZGlycworCitkZWYgZmluZF9jYW5uZWRfaW1hZ2Uoc2NyaXB0c19wYXRoLCB3a3NfZmlsZSk6CisgICAgIiIiCisgICAgRmluZCBhIC53a3MgZmlsZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGluIHRoZSBjYW5uZWQgZmlsZXMgZGlyLgorCisgICAgUmV0dXJuIEZhbHNlIGlmIG5vdCBmb3VuZAorICAgICIiIgorICAgIGxheWVyc19jYW5uZWRfd2tzX2RpciA9IGJ1aWxkX2Nhbm5lZF9pbWFnZV9saXN0KHNjcmlwdHNfcGF0aCkKKworICAgIGZvciBjYW5uZWRfd2tzX2RpciBpbiBsYXllcnNfY2FubmVkX3drc19kaXI6CisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGNhbm5lZF93a3NfZGlyKToKKyAgICAgICAgICAgIGZvciBmbmFtZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBpZiBmbmFtZS5lbmRzd2l0aCgifiIpIG9yIGZuYW1lLmVuZHN3aXRoKCIjIik6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgZm5hbWUuZW5kc3dpdGgoIi53a3MiKSBhbmQgd2tzX2ZpbGUgKyAiLndrcyIgPT0gZm5hbWU6CisgICAgICAgICAgICAgICAgICAgIGZ1bGxwYXRoID0gb3MucGF0aC5qb2luKGNhbm5lZF93a3NfZGlyLCBmbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bGxwYXRoCisgICAgcmV0dXJuIE5vbmUKKworCitkZWYgbGlzdF9jYW5uZWRfaW1hZ2VzKHNjcmlwdHNfcGF0aCk6CisgICAgIiIiCisgICAgTGlzdCB0aGUgLndrcyBmaWxlcyBpbiB0aGUgY2FubmVkIGltYWdlIGRpciwgbWludXMgdGhlIGV4dGVuc2lvbi4KKyAgICAiIiIKKyAgICBsYXllcnNfY2FubmVkX3drc19kaXIgPSBidWlsZF9jYW5uZWRfaW1hZ2VfbGlzdChzY3JpcHRzX3BhdGgpCisKKyAgICBmb3IgY2FubmVkX3drc19kaXIgaW4gbGF5ZXJzX2Nhbm5lZF93a3NfZGlyOgorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhjYW5uZWRfd2tzX2Rpcik6CisgICAgICAgICAgICBmb3IgZm5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgZm5hbWUuZW5kc3dpdGgoIn4iKSBvciBmbmFtZS5lbmRzd2l0aCgiIyIpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIGZuYW1lLmVuZHN3aXRoKCIud2tzIik6CisgICAgICAgICAgICAgICAgICAgIGZ1bGxwYXRoID0gb3MucGF0aC5qb2luKGNhbm5lZF93a3NfZGlyLCBmbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGZ1bGxwYXRoKSBhcyB3a3M6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiB3a3M6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYyA9ICIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4ID0gbGluZS5maW5kKCJzaG9ydC1kZXNjcmlwdGlvbjoiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlkeCAhPSAtMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYyA9IGxpbmVbaWR4ICsgbGVuKCJzaG9ydC1kZXNjcmlwdGlvbjoiKTpdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KGZuYW1lKVswXQorICAgICAgICAgICAgICAgICAgICBwcmludCAiICAlc1x0XHQlcyIgJSAoYmFzZW5hbWUubGp1c3QoMzApLCBkZXNjKQorCisKK2RlZiBsaXN0X2Nhbm5lZF9pbWFnZV9oZWxwKHNjcmlwdHNfcGF0aCwgZnVsbHBhdGgpOgorICAgICIiIgorICAgIExpc3QgdGhlIGhlbHAgYW5kIHBhcmFtcyBpbiB0aGUgc3BlY2lmaWVkIGNhbm5lZCBpbWFnZS4KKyAgICAiIiIKKyAgICBmb3VuZCA9IEZhbHNlCisgICAgd2l0aCBvcGVuKGZ1bGxwYXRoKSBhcyB3a3M6CisgICAgICAgIGZvciBsaW5lIGluIHdrczoKKyAgICAgICAgICAgIGlmIG5vdCBmb3VuZDoKKyAgICAgICAgICAgICAgICBpZHggPSBsaW5lLmZpbmQoImxvbmctZGVzY3JpcHRpb246IikKKyAgICAgICAgICAgICAgICBpZiBpZHggIT0gLTE6CisgICAgICAgICAgICAgICAgICAgIHByaW50CisgICAgICAgICAgICAgICAgICAgIHByaW50IGxpbmVbaWR4ICsgbGVuKCJsb25nLWRlc2NyaXB0aW9uOiIpOl0uc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbm90IGxpbmUuc3RyaXAoKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWR4ID0gbGluZS5maW5kKCIjIikKKyAgICAgICAgICAgIGlmIGlkeCAhPSAtMToKKyAgICAgICAgICAgICAgICBwcmludCBsaW5lW2lkeCArIGxlbigiIzoiKTpdLnJzdHJpcCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKworZGVmIGxpc3Rfc291cmNlX3BsdWdpbnMoKToKKyAgICAiIiIKKyAgICBMaXN0IHRoZSBhdmFpbGFibGUgc291cmNlIHBsdWdpbnMgaS5lLiBwbHVnaW5zIGF2YWlsYWJsZSBmb3IgLS1zb3VyY2UuCisgICAgIiIiCisgICAgcGx1Z2lucyA9IHBsdWdpbm1nci5nZXRfc291cmNlX3BsdWdpbnMoKQorCisgICAgZm9yIHBsdWdpbiBpbiBwbHVnaW5zOgorICAgICAgICBwcmludCAiICAlcyIgJSBwbHVnaW4KKworCitkZWYgd2ljX2NyZWF0ZSh3a3NfZmlsZSwgcm9vdGZzX2RpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCwgc2NyaXB0c19wYXRoLCBpbWFnZV9vdXRwdXRfZGlyLAorICAgICAgICAgICAgICAgY29tcHJlc3NvciwgZGVidWcpOgorICAgICIiIkNyZWF0ZSBpbWFnZQorCisgICAgd2tzX2ZpbGUgLSB1c2VyLWRlZmluZWQgT0Uga2lja3N0YXJ0IGZpbGUKKyAgICByb290ZnNfZGlyIC0gYWJzb2x1dGUgcGF0aCB0byB0aGUgYnVpbGQncyAvcm9vdGZzIGRpcgorICAgIGJvb3RpbWdfZGlyIC0gYWJzb2x1dGUgcGF0aCB0byB0aGUgYnVpbGQncyBib290IGFydGlmYWN0cyBkaXJlY3RvcnkKKyAgICBrZXJuZWxfZGlyIC0gYWJzb2x1dGUgcGF0aCB0byB0aGUgYnVpbGQncyBrZXJuZWwgZGlyZWN0b3J5CisgICAgbmF0aXZlX3N5c3Jvb3QgLSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBidWlsZCdzIG5hdGl2ZSBzeXNyb290cyBkaXIKKyAgICBzY3JpcHRzX3BhdGggLSBhYnNvbHV0ZSBwYXRoIHRvIC9zY3JpcHRzIGRpcgorICAgIGltYWdlX291dHB1dF9kaXIgLSBkaXJuYW1lIHRvIGNyZWF0ZSBmb3IgaW1hZ2UKKyAgICBjb21wcmVzc29yIC0gY29tcHJlc3NvciB1dGlsaXR5IHRvIGNvbXByZXNzIHRoZSBpbWFnZQorCisgICAgTm9ybWFsbHksIHRoZSB2YWx1ZXMgZm9yIHRoZSBidWlsZCBhcnRpZmFjdHMgdmFsdWVzIGFyZSBkZXRlcm1pbmVkCisgICAgYnkgJ3dpYyAtZScgZnJvbSB0aGUgb3V0cHV0IG9mIHRoZSAnYml0YmFrZSAtZScgY29tbWFuZCBnaXZlbiBhbgorICAgIGltYWdlIG5hbWUgZS5nLiAnY29yZS1pbWFnZS1taW5pbWFsJyBhbmQgYSBnaXZlbiBtYWNoaW5lIHNldCBpbgorICAgIGxvY2FsLmNvbmYuICBJZiB0aGF0J3MgdGhlIGNhc2UsIHRoZSB2YXJpYWJsZXMgZ2V0IHRoZSBmb2xsb3dpbmcKKyAgICB2YWx1ZXMgZnJvbSB0aGUgb3V0cHV0IG9mICdiaXRiYWtlIC1lJzoKKworICAgIHJvb3Rmc19kaXI6ICAgICAgICBJTUFHRV9ST09URlMKKyAgICBrZXJuZWxfZGlyOiAgICAgICAgREVQTE9ZX0RJUl9JTUFHRQorICAgIG5hdGl2ZV9zeXNyb290OiAgICBTVEFHSU5HX0RJUl9OQVRJVkUKKworICAgIEluIHRoZSBhYm92ZSBjYXNlLCBib290aW1nX2RpciByZW1haW5zIHVuc2V0IGFuZCB0aGUKKyAgICBwbHVnaW4tc3BlY2lmaWMgaW1hZ2UgY3JlYXRpb24gY29kZSBpcyByZXNwb25zaWJsZSBmb3IgZmluZGluZyB0aGUKKyAgICBib290aW1nIGFydGlmYWN0cy4KKworICAgIEluIHRoZSBjYXNlIHdoZXJlIHRoZSB2YWx1ZXMgYXJlIHBhc3NlZCBpbiBleHBsaWNpdGx5IGkuZSAnd2ljIC1lJworICAgIGlzIG5vdCB1c2VkIGJ1dCByYXRoZXIgdGhlIGluZGl2aWR1YWwgJ3dpYycgb3B0aW9ucyBhcmUgdXNlZCB0bworICAgIGV4cGxpY2l0bHkgc3BlY2lmeSB0aGVzZSB2YWx1ZXMuCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICBvZV9idWlsZGRpciA9IG9zLmVudmlyb25bIkJVSUxERElSIl0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHByaW50ICJCVUlMRERJUiBub3QgZm91bmQsIGV4aXRpbmcuIChEaWQgeW91IGZvcmdldCB0byBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnY/KSIKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGlmIGRlYnVnOgorICAgICAgICBtc2dlci5zZXRfbG9nbGV2ZWwoJ2RlYnVnJykKKworICAgIGNyb2JqID0gY3JlYXRvci5DcmVhdG9yKCkKKworICAgIGNyb2JqLm1haW4oWyJkaXJlY3QiLCBuYXRpdmVfc3lzcm9vdCwga2VybmVsX2RpciwgYm9vdGltZ19kaXIsIHJvb3Rmc19kaXIsCisgICAgICAgICAgICAgICAgd2tzX2ZpbGUsIGltYWdlX291dHB1dF9kaXIsIG9lX2J1aWxkZGlyLCBjb21wcmVzc29yIG9yICIiXSkKKworICAgIHByaW50ICJcblRoZSBpbWFnZShzKSB3ZXJlIGNyZWF0ZWQgdXNpbmcgT0Uga2lja3N0YXJ0IGZpbGU6XG4gICVzIiAlIHdrc19maWxlCisKKworZGVmIHdpY19saXN0KGFyZ3MsIHNjcmlwdHNfcGF0aCk6CisgICAgIiIiCisgICAgUHJpbnQgdGhlIGxpc3Qgb2YgaW1hZ2VzIG9yIHNvdXJjZSBwbHVnaW5zLgorICAgICIiIgorICAgIGlmIGxlbihhcmdzKSA8IDE6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgaWYgYXJncyA9PSBbImltYWdlcyJdOgorICAgICAgICBsaXN0X2Nhbm5lZF9pbWFnZXMoc2NyaXB0c19wYXRoKQorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGVsaWYgYXJncyA9PSBbInNvdXJjZS1wbHVnaW5zIl06CisgICAgICAgIGxpc3Rfc291cmNlX3BsdWdpbnMoKQorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGVsaWYgbGVuKGFyZ3MpID09IDIgYW5kIGFyZ3NbMV0gPT0gImhlbHAiOgorICAgICAgICB3a3NfZmlsZSA9IGFyZ3NbMF0KKyAgICAgICAgZnVsbHBhdGggPSBmaW5kX2Nhbm5lZF9pbWFnZShzY3JpcHRzX3BhdGgsIHdrc19maWxlKQorICAgICAgICBpZiBub3QgZnVsbHBhdGg6CisgICAgICAgICAgICBwcmludCAiTm8gaW1hZ2UgbmFtZWQgJXMgZm91bmQsIGV4aXRpbmcuICJcCisgICAgICAgICAgICAgICAgICAiKFVzZSAnd2ljIGxpc3QgaW1hZ2VzJyB0byBsaXN0IGF2YWlsYWJsZSBpbWFnZXMsIG9yICJcCisgICAgICAgICAgICAgICAgICAic3BlY2lmeSBhIGZ1bGx5LXF1YWxpZmllZCBPRSBraWNrc3RhcnQgKC53a3MpICJcCisgICAgICAgICAgICAgICAgICAiZmlsZW5hbWUpXG4iICUgd2tzX2ZpbGUKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGxpc3RfY2FubmVkX2ltYWdlX2hlbHAoc2NyaXB0c19wYXRoLCBmdWxscGF0aCkKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIHJldHVybiBGYWxzZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvaGVscC5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2hlbHAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE3NzhiNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2hlbHAucHkKQEAgLTAsMCArMSw3NDcgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxMywgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBERVNDUklQVElPTgorIyBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHNvbWUgYmFzaWMgaGVscCBpbnZvY2F0aW9uIGZ1bmN0aW9ucyBhbG9uZworIyB3aXRoIHRoZSBidWxrIG9mIHRoZSBoZWxwIHRvcGljIHRleHQgZm9yIHRoZSBPRSBDb3JlIEltYWdlIFRvb2xzLgorIworIyBBVVRIT1JTCisjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGxpbnV4LmludGVsLmNvbT4KKyMKKworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBsb2dnaW5nCisKK2Zyb20gd2ljLnBsdWdpbiBpbXBvcnQgcGx1Z2lubWdyLCBQTFVHSU5fVFlQRVMKKworZGVmIHN1YmNvbW1hbmRfZXJyb3IoYXJncyk6CisgICAgbG9nZ2luZy5pbmZvKCJpbnZhbGlkIHN1YmNvbW1hbmQgJXMiICUgYXJnc1swXSkKKworCitkZWYgZGlzcGxheV9oZWxwKHN1YmNvbW1hbmQsIHN1YmNvbW1hbmRzKToKKyAgICAiIiIKKyAgICBEaXNwbGF5IGhlbHAgZm9yIHN1YmNvbW1hbmQuCisgICAgIiIiCisgICAgaWYgc3ViY29tbWFuZCBub3QgaW4gc3ViY29tbWFuZHM6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgaGxwID0gc3ViY29tbWFuZHMuZ2V0KHN1YmNvbW1hbmQsIHN1YmNvbW1hbmRfZXJyb3IpWzJdCisgICAgaWYgY2FsbGFibGUoaGxwKToKKyAgICAgICAgaGxwID0gaGxwKCkKKyAgICBwYWdlciA9IHN1YnByb2Nlc3MuUG9wZW4oJ2xlc3MnLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUpCisgICAgcGFnZXIuY29tbXVuaWNhdGUoaGxwKQorCisgICAgcmV0dXJuIFRydWUKKworCitkZWYgd2ljX2hlbHAoYXJncywgdXNhZ2Vfc3RyLCBzdWJjb21tYW5kcyk6CisgICAgIiIiCisgICAgU3ViY29tbWFuZCBoZWxwIGRpc3BhdGNoZXIuCisgICAgIiIiCisgICAgaWYgbGVuKGFyZ3MpID09IDEgb3Igbm90IGRpc3BsYXlfaGVscChhcmdzWzFdLCBzdWJjb21tYW5kcyk6CisgICAgICAgIHByaW50IHVzYWdlX3N0cgorCisKK2RlZiBnZXRfd2ljX3BsdWdpbnNfaGVscCgpOgorICAgICIiIgorICAgIENvbWJpbmUgd2ljX3BsdWdpbnNfaGVscCB3aXRoIHRoZSBoZWxwIGZvciBldmVyeSBrbm93bgorICAgIHNvdXJjZSBwbHVnaW4uCisgICAgIiIiCisgICAgcmVzdWx0ID0gd2ljX3BsdWdpbnNfaGVscAorICAgIGZvciBwbHVnaW5fdHlwZSBpbiBQTFVHSU5fVFlQRVM6CisgICAgICAgIHJlc3VsdCArPSAnXG5cbiVzIFBMVUdJTlNcblxuJyAlIHBsdWdpbl90eXBlLnVwcGVyKCkKKyAgICAgICAgZm9yIG5hbWUsIHBsdWdpbiBpbiBwbHVnaW5tZ3IuZ2V0X3BsdWdpbnMocGx1Z2luX3R5cGUpLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgcmVzdWx0ICs9ICJcbiAlcyBwbHVnaW46XG4iICUgbmFtZQorICAgICAgICAgICAgaWYgcGx1Z2luLl9fZG9jX186CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHBsdWdpbi5fX2RvY19fCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiXG4gICAgJXMgaXMgbWlzc2luZyBkb2NzdHJpbmdcbiIgJSBwbHVnaW4KKyAgICByZXR1cm4gcmVzdWx0CisKKworZGVmIGludm9rZV9zdWJjb21tYW5kKGFyZ3MsIHBhcnNlciwgbWFpbl9jb21tYW5kX3VzYWdlLCBzdWJjb21tYW5kcyk6CisgICAgIiIiCisgICAgRGlzcGF0Y2ggdG8gc3ViY29tbWFuZCBoYW5kbGVyIGJvcnJvd2VkIGZyb20gY29tYm8tbGF5ZXIuCisgICAgU2hvdWxkIHVzZSBhcmdwYXJzZSwgYnV0IGhhcyB0byB3b3JrIGluIDIuNi4KKyAgICAiIiIKKyAgICBpZiBub3QgYXJnczoKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiTm8gc3ViY29tbWFuZCBzcGVjaWZpZWQsIGV4aXRpbmciKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHJldHVybiAxCisgICAgZWxpZiBhcmdzWzBdID09ICJoZWxwIjoKKyAgICAgICAgd2ljX2hlbHAoYXJncywgbWFpbl9jb21tYW5kX3VzYWdlLCBzdWJjb21tYW5kcykKKyAgICBlbGlmIGFyZ3NbMF0gbm90IGluIHN1YmNvbW1hbmRzOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJVbnN1cHBvcnRlZCBzdWJjb21tYW5kICVzLCBleGl0aW5nXG4iICUgKGFyZ3NbMF0pKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHJldHVybiAxCisgICAgZWxzZToKKyAgICAgICAgdXNhZ2UgPSBzdWJjb21tYW5kcy5nZXQoYXJnc1swXSwgc3ViY29tbWFuZF9lcnJvcilbMV0KKyAgICAgICAgc3ViY29tbWFuZHMuZ2V0KGFyZ3NbMF0sIHN1YmNvbW1hbmRfZXJyb3IpWzBdKGFyZ3NbMTpdLCB1c2FnZSkKKworCisjIworIyB3aWMgaGVscCBhbmQgdXNhZ2Ugc3RyaW5ncworIyMKKword2ljX3VzYWdlID0gIiIiCisKKyBDcmVhdGUgYSBjdXN0b21pemVkIE9wZW5FbWJlZGRlZCBpbWFnZQorCisgdXNhZ2U6IHdpYyBbLS12ZXJzaW9uXSB8IFstLWhlbHBdIHwgW0NPTU1BTkQgW0FSR1NdXQorCisgQ3VycmVudCAnd2ljJyBjb21tYW5kcyBhcmU6CisgICAgaGVscCAgICAgICAgICAgICAgU2hvdyBoZWxwIGZvciBjb21tYW5kIG9yIG9uZSBvZiB0aGUgdG9waWNzIChzZWUgYmVsb3cpCisgICAgY3JlYXRlICAgICAgICAgICAgQ3JlYXRlIGEgbmV3IE9wZW5FbWJlZGRlZCBpbWFnZQorICAgIGxpc3QgICAgICAgICAgICAgIExpc3QgYXZhaWxhYmxlIGNhbm5lZCBpbWFnZXMgYW5kIHNvdXJjZSBwbHVnaW5zCisKKyBIZWxwIHRvcGljczoKKyAgICBvdmVydmlldyAgICAgICAgICB3aWMgb3ZlcnZpZXcgLSBHZW5lcmFsIG92ZXJ2aWV3IG9mIHdpYworICAgIHBsdWdpbnMgICAgICAgICAgIHdpYyBwbHVnaW5zIC0gT3ZlcnZpZXcgYW5kIEFQSQorICAgIGtpY2tzdGFydCAgICAgICAgIHdpYyBraWNrc3RhcnQgLSB3aWMga2lja3N0YXJ0IHJlZmVyZW5jZQorIiIiCisKK3dpY19oZWxwX3VzYWdlID0gIiIiCisKKyB1c2FnZTogd2ljIGhlbHAgPHN1YmNvbW1hbmQ+CisKKyBUaGlzIGNvbW1hbmQgZGlzcGxheXMgZGV0YWlsZWQgaGVscCBmb3IgdGhlIHNwZWNpZmllZCBzdWJjb21tYW5kLgorIiIiCisKK3dpY19jcmVhdGVfdXNhZ2UgPSAiIiIKKworIENyZWF0ZSBhIG5ldyBPcGVuRW1iZWRkZWQgaW1hZ2UKKworIHVzYWdlOiB3aWMgY3JlYXRlIDx3a3MgZmlsZSBvciBpbWFnZSBuYW1lPiBbLW8gPERJUk5BTUU+IHwgLS1vdXRkaXIgPERJUk5BTUU+XQorICAgICAgICAgICAgWy1pIDxKU09OIFBST1BFUlRZIEZJTEU+IHwgLS1pbmZpbGUgPEpTT04gUFJPUEVSVFlfRklMRT5dCisgICAgICAgICAgICBbLWUgfCAtLWltYWdlLW5hbWVdIFstcywgLS1za2lwLWJ1aWxkLWNoZWNrXSBbLUQsIC0tZGVidWddCisgICAgICAgICAgICBbLXIsIC0tcm9vdGZzLWRpcl0gWy1iLCAtLWJvb3RpbWctZGlyXQorICAgICAgICAgICAgWy1rLCAtLWtlcm5lbC1kaXJdIFstbiwgLS1uYXRpdmUtc3lzcm9vdF0gWy1mLCAtLWJ1aWxkLXJvb3Rmc10KKworIFRoaXMgY29tbWFuZCBjcmVhdGVzIGFuIE9wZW5FbWJlZGRlZCBpbWFnZSBiYXNlZCBvbiB0aGUgJ09FIGtpY2tzdGFydAorIGNvbW1hbmRzJyBmb3VuZCBpbiB0aGUgPHdrcyBmaWxlPi4KKworIFRoZSAtbyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcGxhY2UgdGhlIGltYWdlIGluIGEgZGlyZWN0b3J5IHdpdGggYQorIGRpZmZlcmVudCBuYW1lIGFuZCBsb2NhdGlvbi4KKworIFNlZSAnd2ljIGhlbHAgY3JlYXRlJyBmb3IgbW9yZSBkZXRhaWxlZCBpbnN0cnVjdGlvbnMuCisiIiIKKword2ljX2NyZWF0ZV9oZWxwID0gIiIiCisKK05BTUUKKyAgICB3aWMgY3JlYXRlIC0gQ3JlYXRlIGEgbmV3IE9wZW5FbWJlZGRlZCBpbWFnZQorCitTWU5PUFNJUworICAgIHdpYyBjcmVhdGUgPHdrcyBmaWxlIG9yIGltYWdlIG5hbWU+IFstbyA8RElSTkFNRT4gfCAtLW91dGRpciA8RElSTkFNRT5dCisgICAgICAgIFstZSB8IC0taW1hZ2UtbmFtZV0gWy1zLCAtLXNraXAtYnVpbGQtY2hlY2tdIFstRCwgLS1kZWJ1Z10KKyAgICAgICAgWy1yLCAtLXJvb3Rmcy1kaXJdIFstYiwgLS1ib290aW1nLWRpcl0KKyAgICAgICAgWy1rLCAtLWtlcm5lbC1kaXJdIFstbiwgLS1uYXRpdmUtc3lzcm9vdF0gWy1mLCAtLWJ1aWxkLXJvb3Rmc10KKyAgICAgICAgWy1jLCAtLWNvbXByZXNzLXdpdGhdCisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIGNyZWF0ZXMgYW4gT3BlbkVtYmVkZGVkIGltYWdlIGJhc2VkIG9uIHRoZSAnT0UKKyAgICBraWNrc3RhcnQgY29tbWFuZHMnIGZvdW5kIGluIHRoZSA8d2tzIGZpbGU+LgorCisgICAgSW4gb3JkZXIgdG8gZG8gdGhpcywgd2ljIG5lZWRzIHRvIGtub3cgdGhlIGxvY2F0aW9ucyBvZiB0aGUKKyAgICB2YXJpb3VzIGJ1aWxkIGFydGlmYWN0cyByZXF1aXJlZCB0byBidWlsZCB0aGUgaW1hZ2UuCisKKyAgICBVc2VycyBjYW4gZXhwbGljaXRseSBzcGVjaWZ5IHRoZSBidWlsZCBhcnRpZmFjdCBsb2NhdGlvbnMgdXNpbmcKKyAgICB0aGUgLXIsIC1iLCAtaywgYW5kIC1uIG9wdGlvbnMuICBTZWUgYmVsb3cgZm9yIGRldGFpbHMgb24gd2hlcmUKKyAgICB0aGUgY29ycmVzcG9uZGluZyBhcnRpZmFjdHMgYXJlIHR5cGljYWxseSBmb3VuZCBpbiBhIG5vcm1hbAorICAgIE9wZW5FbWJlZGRlZCBidWlsZC4KKworICAgIEFsdGVybmF0aXZlbHksIHVzZXJzIGNhbiB1c2UgdGhlIC1lIG9wdGlvbiB0byBoYXZlICd3aWMnIGRldGVybWluZQorICAgIHRob3NlIGxvY2F0aW9ucyBmb3IgYSBnaXZlbiBpbWFnZS4gIElmIHRoZSAtZSBvcHRpb24gaXMgdXNlZCwgdGhlCisgICAgdXNlciBuZWVkcyB0byBoYXZlIHNldCB0aGUgYXBwcm9wcmlhdGUgTUFDSElORSB2YXJpYWJsZSBpbgorICAgIGxvY2FsLmNvbmYsIGFuZCBoYXZlIHNvdXJjZWQgdGhlIGJ1aWxkIGVudmlyb25tZW50LgorCisgICAgVGhlIC1lIG9wdGlvbiBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIGltYWdlIHRvIHVzZSB0aGUKKyAgICBhcnRpZmFjdHMgZnJvbSBlLmcuIGNvcmUtaW1hZ2Utc2F0by4KKworICAgIFRoZSAtciBvcHRpb24gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBwYXRoIHRvIHRoZSAvcm9vdGZzIGRpciB0bworICAgIHVzZSBhcyB0aGUgLndrcyByb290ZnMgc291cmNlLgorCisgICAgVGhlIC1iIG9wdGlvbiBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIHBhdGggdG8gdGhlIGRpciBjb250YWluaW5nCisgICAgdGhlIGJvb3QgYXJ0aWZhY3RzIChlLmcuIC9FRkkgb3IgL3N5c2xpbnV4IGRpcnMpIHRvIHVzZSBhcyB0aGUKKyAgICAud2tzIGJvb3RpbWcgc291cmNlLgorCisgICAgVGhlIC1rIG9wdGlvbiBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIHBhdGggdG8gdGhlIGRpciBjb250YWluaW5nCisgICAgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhlIC53a3MgYm9vdGltZy4KKworICAgIFRoZSAtbiBvcHRpb24gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBwYXRoIHRvIHRoZSBuYXRpdmUgc3lzcm9vdAorICAgIGNvbnRhaW5pbmcgdGhlIHRvb2xzIHRvIHVzZSB0byBidWlsZCB0aGUgaW1hZ2UuCisKKyAgICBUaGUgLWYgb3B0aW9uIGlzIHVzZWQgdG8gYnVpbGQgcm9vdGZzIGJ5IHJ1bm5pbmcgImJpdGJha2UgPGltYWdlPiIKKworICAgIFRoZSAtcyBvcHRpb24gaXMgdXNlZCB0byBza2lwIHRoZSBidWlsZCBjaGVjay4gIFRoZSBidWlsZCBjaGVjayBpcworICAgIGEgc2ltcGxlIHNhbml0eSBjaGVjayB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB1c2VyIGhhcworICAgIHNvdXJjZWQgdGhlIGJ1aWxkIGVudmlyb25tZW50IHNvIHRoYXQgdGhlIC1lIG9wdGlvbiBjYW4gb3BlcmF0ZQorICAgIGNvcnJlY3RseS4gIElmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgdGhlIGJ1aWxkIGFydGlmYWN0IGxvY2F0aW9ucworICAgIGV4cGxpY2l0bHksICd3aWMnIGFzc3VtZXMgdGhlIHVzZXIga25vd3Mgd2hhdCBoZSBvciBzaGUgaXMgZG9pbmcKKyAgICBhbmQgc2tpcHMgdGhlIGJ1aWxkIGNoZWNrLgorCisgICAgVGhlIC1EIG9wdGlvbiBpcyB1c2VkIHRvIGRpc3BsYXkgZGVidWcgaW5mb3JtYXRpb24gZGV0YWlsaW5nCisgICAgZXhhY3RseSB3aGF0IGhhcHBlbnMgYmVoaW5kIHRoZSBzY2VuZXMgd2hlbiBhIGNyZWF0ZSByZXF1ZXN0IGlzCisgICAgZnVsZmlsbGVkIChvciBub3QsIGFzIHRoZSBjYXNlIG1heSBiZSkuICBJdCBlbnVtZXJhdGVzIGFuZAorICAgIGRpc3BsYXlzIHRoZSBjb21tYW5kIHNlcXVlbmNlIHVzZWQsIGFuZCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gYW55CisgICAgYnVnIHJlcG9ydCBkZXNjcmliaW5nIHVuZXhwZWN0ZWQgcmVzdWx0cy4KKworICAgIFdoZW4gJ3dpYyAtZScgaXMgdXNlZCwgdGhlIGxvY2F0aW9ucyBmb3IgdGhlIGJ1aWxkIGFydGlmYWN0cworICAgIHZhbHVlcyBhcmUgZGV0ZXJtaW5lZCBieSAnd2ljIC1lJyBmcm9tIHRoZSBvdXRwdXQgb2YgdGhlICdiaXRiYWtlCisgICAgLWUnIGNvbW1hbmQgZ2l2ZW4gYW4gaW1hZ2UgbmFtZSBlLmcuICdjb3JlLWltYWdlLW1pbmltYWwnIGFuZCBhCisgICAgZ2l2ZW4gbWFjaGluZSBzZXQgaW4gbG9jYWwuY29uZi4gIEluIHRoYXQgY2FzZSwgdGhlIGltYWdlIGlzCisgICAgY3JlYXRlZCBhcyBpZiB0aGUgZm9sbG93aW5nICdiaXRiYWtlIC1lJyB2YXJpYWJsZXMgd2VyZSB1c2VkOgorCisgICAgLXI6ICAgICAgICBJTUFHRV9ST09URlMKKyAgICAtazogICAgICAgIFNUQUdJTkdfS0VSTkVMX0RJUgorICAgIC1uOiAgICAgICAgU1RBR0lOR19ESVJfTkFUSVZFCisgICAgLWI6ICAgICAgICBlbXB0eSAocGx1Z2luLXNwZWNpZmljIGhhbmRsZXJzIG11c3QgZGV0ZXJtaW5lIHRoaXMpCisKKyAgICBJZiAnd2ljIC1lJyBpcyBub3QgdXNlZCwgdGhlIHVzZXIgbmVlZHMgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZQorICAgIHZhbHVlIGZvciAtYiAoYXMgd2VsbCBhcyAtciwgLWssIGFuZCAtbikuCisKKyAgICBUaGUgLW8gb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHBsYWNlIHRoZSBpbWFnZSBpbiBhIGRpcmVjdG9yeSB3aXRoIGEKKyAgICBkaWZmZXJlbnQgbmFtZSBhbmQgbG9jYXRpb24uCisKKyAgICBUaGUgLWMgb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSBjb21wcmVzc29yIHV0aWxpdHkgdG8gY29tcHJlc3MKKyAgICBhbiBpbWFnZS4gZ3ppcCwgYnppcDIgYW5kIHh6IGNvbXByZXNzb3JzIGFyZSBzdXBwb3J0ZWQuCisiIiIKKword2ljX2xpc3RfdXNhZ2UgPSAiIiIKKworIExpc3QgYXZhaWxhYmxlIE9wZW5FbWJlZGRlZCBpbWFnZXMgYW5kIHNvdXJjZSBwbHVnaW5zCisKKyB1c2FnZTogd2ljIGxpc3QgaW1hZ2VzCisgICAgICAgIHdpYyBsaXN0IDxpbWFnZT4gaGVscAorICAgICAgICB3aWMgbGlzdCBzb3VyY2UtcGx1Z2lucworCisgVGhpcyBjb21tYW5kIGVudW1lcmF0ZXMgdGhlIHNldCBvZiBhdmFpbGFibGUgY2FubmVkIGltYWdlcyBhcyB3ZWxsIGFzCisgaGVscCBmb3IgdGhvc2UgaW1hZ2VzLiAgSXQgYWxzbyBjYW4gYmUgdXNlZCB0byBsaXN0IG9mIGF2YWlsYWJsZSBzb3VyY2UKKyBwbHVnaW5zLgorCisgVGhlIGZpcnN0IGZvcm0gZW51bWVyYXRlcyBhbGwgdGhlIGF2YWlsYWJsZSAnY2FubmVkJyBpbWFnZXMuCisKKyBUaGUgc2Vjb25kIGZvcm0gbGlzdHMgdGhlIGRldGFpbGVkIGhlbHAgaW5mb3JtYXRpb24gZm9yIGEgc3BlY2lmaWMKKyAnY2FubmVkJyBpbWFnZS4KKworIFRoZSB0aGlyZCBmb3JtIGVudW1lcmF0ZXMgYWxsIHRoZSBhdmFpbGFibGUgLS1zb3VyY2VzIChzb3VyY2UKKyBwbHVnaW5zKS4KKworIFNlZSAnd2ljIGhlbHAgbGlzdCcgZm9yIG1vcmUgZGV0YWlscy4KKyIiIgorCit3aWNfbGlzdF9oZWxwID0gIiIiCisKK05BTUUKKyAgICB3aWMgbGlzdCAtIExpc3QgYXZhaWxhYmxlIE9wZW5FbWJlZGRlZCBpbWFnZXMgYW5kIHNvdXJjZSBwbHVnaW5zCisKK1NZTk9QU0lTCisgICAgd2ljIGxpc3QgaW1hZ2VzCisgICAgd2ljIGxpc3QgPGltYWdlPiBoZWxwCisgICAgd2ljIGxpc3Qgc291cmNlLXBsdWdpbnMKKworREVTQ1JJUFRJT04KKyAgICBUaGlzIGNvbW1hbmQgZW51bWVyYXRlcyB0aGUgc2V0IG9mIGF2YWlsYWJsZSBjYW5uZWQgaW1hZ2VzIGFzIHdlbGwKKyAgICBhcyBoZWxwIGZvciB0aG9zZSBpbWFnZXMuICBJdCBhbHNvIGNhbiBiZSB1c2VkIHRvIGxpc3QgYXZhaWxhYmxlCisgICAgc291cmNlIHBsdWdpbnMuCisKKyAgICBUaGUgZmlyc3QgZm9ybSBlbnVtZXJhdGVzIGFsbCB0aGUgYXZhaWxhYmxlICdjYW5uZWQnIGltYWdlcy4KKyAgICBUaGVzZSBhcmUgYWN0dWFsbHkganVzdCB0aGUgc2V0IG9mIC53a3MgZmlsZXMgdGhhdCBoYXZlIGJlZW4gbW92ZWQKKyAgICBpbnRvIHRoZSAvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MgZGlyZWN0b3J5KS4KKworICAgIFRoZSBzZWNvbmQgZm9ybSBsaXN0cyB0aGUgZGV0YWlsZWQgaGVscCBpbmZvcm1hdGlvbiBmb3IgYSBzcGVjaWZpYworICAgICdjYW5uZWQnIGltYWdlLgorCisgICAgVGhlIHRoaXJkIGZvcm0gZW51bWVyYXRlcyBhbGwgdGhlIGF2YWlsYWJsZSAtLXNvdXJjZXMgKHNvdXJjZQorICAgIHBsdWdpbnMpLiAgVGhlIGNvbnRlbnRzIG9mIGEgZ2l2ZW4gcGFydGl0aW9uIGFyZSBkcml2ZW4gYnkgY29kZQorICAgIGRlZmluZWQgaW4gJ3NvdXJjZSBwbHVnaW5zJy4gIFVzZXJzIHNwZWNpZnkgYSBzcGVjaWZpYyBwbHVnaW4gdmlhCisgICAgdGhlIC0tc291cmNlIHBhcmFtZXRlciBvZiB0aGUgcGFydGl0aW9uIC53a3MgY29tbWFuZC4gIE5vcm1hbGx5CisgICAgdGhpcyBpcyB0aGUgJ3Jvb3RmcycgcGx1Z2luIGJ1dCBjYW4gYmUgYW55IG9mIHRoZSBtb3JlIHNwZWNpYWxpemVkCisgICAgc291cmNlcyBsaXN0ZWQgYnkgdGhlICdsaXN0IHNvdXJjZS1wbHVnaW5zJyBjb21tYW5kLiAgVXNlcnMgY2FuCisgICAgYWxzbyBhZGQgdGhlaXIgb3duIHNvdXJjZSBwbHVnaW5zIC0gc2VlICd3aWMgaGVscCBwbHVnaW5zJyBmb3IKKyAgICBkZXRhaWxzLgorIiIiCisKK3dpY19wbHVnaW5zX2hlbHAgPSAiIiIKKworTkFNRQorICAgIHdpYyBwbHVnaW5zIC0gT3ZlcnZpZXcgYW5kIEFQSQorCitERVNDUklQVElPTgorICAgIHBsdWdpbnMgYWxsb3cgd2ljIGZ1bmN0aW9uYWxpdHkgdG8gYmUgZXh0ZW5kZWQgYW5kIHNwZWNpYWxpemVkIGJ5CisgICAgdXNlcnMuICBUaGlzIHNlY3Rpb24gZG9jdW1lbnRzIHRoZSBwbHVnaW4gaW50ZXJmYWNlLCB3aGljaCBpcworICAgIGN1cnJlbnRseSByZXN0cmljdGVkIHRvICdzb3VyY2UnIHBsdWdpbnMuCisKKyAgICAnU291cmNlJyBwbHVnaW5zIHByb3ZpZGUgYSBtZWNoYW5pc20gdG8gY3VzdG9taXplIHZhcmlvdXMgYXNwZWN0cworICAgIG9mIHRoZSBpbWFnZSBnZW5lcmF0aW9uIHByb2Nlc3MgaW4gd2ljLCBtYWlubHkgdGhlIGNvbnRlbnRzIG9mCisgICAgcGFydGl0aW9ucy4KKworICAgIFNvdXJjZSBwbHVnaW5zIHByb3ZpZGUgYSBtZWNoYW5pc20gZm9yIG1hcHBpbmcgdmFsdWVzIHNwZWNpZmllZCBpbgorICAgIC53a3MgZmlsZXMgdXNpbmcgdGhlIC0tc291cmNlIGtleXdvcmQgdG8gYSBwYXJ0aWN1bGFyIHBsdWdpbgorICAgIGltcGxlbWVudGF0aW9uIHRoYXQgcG9wdWxhdGVzIGEgY29ycmVzcG9uZGluZyBwYXJ0aXRpb24uCisKKyAgICBBIHNvdXJjZSBwbHVnaW4gaXMgY3JlYXRlZCBhcyBhIHN1YmNsYXNzIG9mIFNvdXJjZVBsdWdpbiAoc2VlCisgICAgc2NyaXB0cy9saWIvd2ljL3BsdWdpbmJhc2UucHkpIGFuZCB0aGUgcGx1Z2luIGZpbGUgY29udGFpbmluZyBpdAorICAgIGlzIGFkZGVkIHRvIHNjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS8gdG8gbWFrZSB0aGUgcGx1Z2luCisgICAgaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlIHRvIHRoZSB3aWMgaW1wbGVtZW50YXRpb24uCisKKyAgICBTb3VyY2UgcGx1Z2lucyBjYW4gYWxzbyBiZSBpbXBsZW1lbnRlZCBhbmQgYWRkZWQgYnkgZXh0ZXJuYWwKKyAgICBsYXllcnMgLSBhbnkgcGx1Z2lucyBmb3VuZCBpbiBhIHNjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS8KKyAgICBkaXJlY3RvcnkgaW4gYW4gZXh0ZXJuYWwgbGF5ZXIgd2lsbCBhbHNvIGJlIG1hZGUgYXZhaWxhYmxlLgorCisgICAgV2hlbiB0aGUgd2ljIGltcGxlbWVudGF0aW9uIG5lZWRzIHRvIGludm9rZSBhIHBhcnRpdGlvbi1zcGVjaWZpYworICAgIGltcGxlbWVudGF0aW9uLCBpdCBsb29rcyBmb3IgdGhlIHBsdWdpbiB0aGF0IGhhcyB0aGUgc2FtZSBuYW1lIGFzCisgICAgdGhlIC0tc291cmNlIHBhcmFtIGdpdmVuIHRvIHRoYXQgcGFydGl0aW9uLiAgRm9yIGV4YW1wbGUsIGlmIHRoZQorICAgIHBhcnRpdGlvbiBpcyBzZXQgdXAgbGlrZSB0aGlzOgorCisgICAgICBwYXJ0IC9ib290IC0tc291cmNlIGJvb3RpbWctcGNiaW9zICAgLi4uCisKKyAgICB0aGVuIHRoZSBtZXRob2RzIGRlZmluZWQgYXMgY2xhc3MgbWVtYmVycyBvZiB0aGUgcGx1Z2luIGhhdmluZyB0aGUKKyAgICBtYXRjaGluZyBib290aW1nLXBjYmlvcyAubmFtZSBjbGFzcyBtZW1iZXIgd291bGQgYmUgdXNlZC4KKworICAgIFRvIGJlIG1vcmUgY29uY3JldGUsIGhlcmUncyB0aGUgcGx1Z2luIGRlZmluaXRpb24gdGhhdCB3b3VsZCBtYXRjaAorICAgIGEgJy0tc291cmNlIGJvb3RpbWctcGNiaW9zJyB1c2FnZSwgYWxvbmcgd2l0aCBhbiBleGFtcGxlIG1ldGhvZAorICAgIHRoYXQgd291bGQgYmUgY2FsbGVkIGJ5IHRoZSB3aWMgaW1wbGVtZW50YXRpb24gd2hlbiBpdCBuZWVkZWQgdG8KKyAgICBpbnZva2UgYW4gaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgcGFydGl0aW9uLXByZXBhcmF0aW9uIGZ1bmN0aW9uOgorCisgICAgY2xhc3MgQm9vdGltZ1BjYmlvc1BsdWdpbihTb3VyY2VQbHVnaW4pOgorICAgICAgICBuYW1lID0gJ2Jvb3RpbWctcGNiaW9zJworCisgICAgQGNsYXNzbWV0aG9kCisgICAgICAgIGRlZiBkb19wcmVwYXJlX3BhcnRpdGlvbihzZWxmLCBwYXJ0LCAuLi4pCisKKyAgICBJZiB0aGUgc3ViY2xhc3MgaXRzZWxmIGRvZXNuJ3QgaW1wbGVtZW50IGEgZnVuY3Rpb24sIGEgJ2RlZmF1bHQnCisgICAgdmVyc2lvbiBpbiBhIHN1cGVyY2xhc3Mgd2lsbCBiZSBsb2NhdGVkIGFuZCB1c2VkLCB3aGljaCBpcyB3aHkgYWxsCisgICAgcGx1Z2lucyBtdXN0IGJlIGRlcml2ZWQgZnJvbSBTb3VyY2VQbHVnaW4uCisKKyAgICBUaGUgU291cmNlUGx1Z2luIGNsYXNzIGRlZmluZXMgdGhlIGZvbGxvd2luZyBtZXRob2RzLCB3aGljaCBpcyB0aGUKKyAgICBjdXJyZW50IHNldCBvZiBtZXRob2RzIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkL292ZXJyaWRkZW4gYnkKKyAgICAtLXNvdXJjZSBwbHVnaW5zLiAgQW55IG1ldGhvZHMgbm90IGltcGxlbWVudGVkIGJ5IGEgU291cmNlUGx1Z2luCisgICAgc3ViY2xhc3MgaW5oZXJpdCB0aGUgaW1wbGVtZW50YXRpb25zIHByZXNlbnQgaW4gdGhlIFNvdXJjZVBsdWdpbgorICAgIGNsYXNzIChzZWUgdGhlIFNvdXJjZVBsdWdpbiBzb3VyY2UgZm9yIGRldGFpbHMpOgorCisgICAgICBkb19wcmVwYXJlX3BhcnRpdGlvbigpCisgICAgICAgICAgQ2FsbGVkIHRvIGRvIHRoZSBhY3R1YWwgY29udGVudCBwb3B1bGF0aW9uIGZvciBhCisgICAgICAgICAgcGFydGl0aW9uLiBJbiBvdGhlciB3b3JkcywgaXQgJ3ByZXBhcmVzJyB0aGUgZmluYWwgcGFydGl0aW9uCisgICAgICAgICAgaW1hZ2Ugd2hpY2ggd2lsbCBiZSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgZGlzayBpbWFnZS4KKworICAgICAgZG9fY29uZmlndXJlX3BhcnRpdGlvbigpCisgICAgICAgICAgQ2FsbGVkIGJlZm9yZSBkb19wcmVwYXJlX3BhcnRpdGlvbigpLCB0eXBpY2FsbHkgdXNlZCB0bworICAgICAgICAgIGNyZWF0ZSBjdXN0b20gY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgYSBwYXJ0aXRpb24sIGZvcgorICAgICAgICAgIGV4YW1wbGUgc3lzbGludXggb3IgZ3J1YiBjb25maWcgZmlsZXMuCisKKyAgICAgIGRvX2luc3RhbGxfZGlzaygpCisgICAgICAgICAgQ2FsbGVkIGFmdGVyIGFsbCBwYXJ0aXRpb25zIGhhdmUgYmVlbiBwcmVwYXJlZCBhbmQgYXNzZW1ibGVkCisgICAgICAgICAgaW50byBhIGRpc2sgaW1hZ2UuICBUaGlzIHByb3ZpZGVzIGEgaG9vayB0byBhbGxvdworICAgICAgICAgIGZpbmFsaXphdGlvbiBvZiBhIGRpc2sgaW1hZ2UsIGZvciBleGFtcGxlIHRvIHdyaXRlIGFuIE1CUiB0bworICAgICAgICAgIGl0LgorCisgICAgICBkb19zdGFnZV9wYXJ0aXRpb24oKQorICAgICAgICAgIFNwZWNpYWwgY29udGVudC1zdGFnaW5nIGhvb2sgY2FsbGVkIGJlZm9yZQorICAgICAgICAgIGRvX3ByZXBhcmVfcGFydGl0aW9uKCksIG5vcm1hbGx5IGVtcHR5LgorCisgICAgICAgICAgVHlwaWNhbGx5LCBhIHBhcnRpdGlvbiB3aWxsIGp1c3QgdXNlIHRoZSBwYXNzZWQtaW4KKyAgICAgICAgICBwYXJhbWV0ZXJzLCBmb3IgZXhhbXBsZSB0aGUgdW5tb2RpZmllZCB2YWx1ZSBvZiBib290aW1nX2Rpci4KKyAgICAgICAgICBJbiBzb21lIGNhc2VzIGhvd2V2ZXIsIHRoaW5ncyBtYXkgbmVlZCB0byBiZSBtb3JlIHRhaWxvcmVkLgorICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGNlcnRhaW4gZmlsZXMgbWF5IGFkZGl0aW9uYWxseSBuZWVkIHRvIGJlCisgICAgICAgICAgdGFrZSBmcm9tIGJvb3RpbWdfZGlyICsgL2Jvb3QuICBUaGlzIGhvb2sgYWxsb3dzIHRob3NlIGZpbGVzCisgICAgICAgICAgdG8gYmUgc3RhZ2VkIGluIGEgY3VzdG9taXplZCBmYXNoaW9uLiAgTm90ZSB0aGF0CisgICAgICAgICAgZ2V0X2JpdGJha2VfdmFyKCkgYWxsb3dzIHlvdSB0byBhY2Nlc3Mgbm9uLXN0YW5kYXJkCisgICAgICAgICAgdmFyaWFibGVzIHRoYXQgeW91IG1pZ2h0IHdhbnQgdG8gdXNlIGZvciB0aGVzZSB0eXBlcyBvZgorICAgICAgICAgIHNpdHVhdGlvbnMuCisKKyAgICBUaGlzIHNjaGVtZSBpcyBleHRlbnNpYmxlIC0gYWRkaW5nIG1vcmUgaG9va3MgaXMgYSBzaW1wbGUgbWF0dGVyCisgICAgb2YgYWRkaW5nIG1vcmUgcGx1Z2luIG1ldGhvZHMgdG8gU291cmNlUGx1Z2luIGFuZCBkZXJpdmVkIGNsYXNzZXMuCisgICAgVGhlIGNvZGUgdGhhdCB0aGVuIG5lZWRzIHRvIGNhbGwgdGhlIHBsdWdpbiBtZXRob2RzIHVzZXMKKyAgICBwbHVnaW4uZ2V0X3NvdXJjZV9wbHVnaW5fbWV0aG9kcygpIHRvIGZpbmQgdGhlIG1ldGhvZChzKSBuZWVkZWQgYnkKKyAgICB0aGUgY2FsbDsgdGhpcyBpcyBkb25lIGJ5IGZpbGxpbmcgdXAgYSBkaWN0IHdpdGgga2V5cyBjb250YWluaW5nCisgICAgdGhlIG1ldGhvZCBuYW1lcyBvZiBpbnRlcmVzdCAtIG9uIHN1Y2Nlc3MsIHRoZXNlIHdpbGwgYmUgZmlsbGVkIGluCisgICAgd2l0aCB0aGUgYWN0dWFsIG1ldGhvZHMuIFBsZWFzZSBzZWUgdGhlIGltcGxlbWVudGF0aW9uIGZvcgorICAgIGV4YW1wbGVzIGFuZCBkZXRhaWxzLgorIiIiCisKK3dpY19vdmVydmlld19oZWxwID0gIiIiCisKK05BTUUKKyAgICB3aWMgb3ZlcnZpZXcgLSBHZW5lcmFsIG92ZXJ2aWV3IG9mIHdpYworCitERVNDUklQVElPTgorICAgIFRoZSAnd2ljJyBjb21tYW5kIGdlbmVyYXRlcyBwYXJ0aXRpb25lZCBpbWFnZXMgZnJvbSBleGlzdGluZworICAgIE9wZW5FbWJlZGRlZCBidWlsZCBhcnRpZmFjdHMuICBJbWFnZSBnZW5lcmF0aW9uIGlzIGRyaXZlbiBieQorICAgIHBhcnRpdGlvbmluZyBjb21tYW5kcyBjb250YWluZWQgaW4gYW4gJ09wZW5lbWJlZGRlZCBraWNrc3RhcnQnCisgICAgKC53a3MpIGZpbGUgKHNlZSAnd2ljIGhlbHAga2lja3N0YXJ0Jykgc3BlY2lmaWVkIGVpdGhlciBkaXJlY3RseQorICAgIG9uIHRoZSBjb21tYW5kLWxpbmUgb3IgYXMgb25lIG9mIGEgc2VsZWN0aW9uIG9mIGNhbm5lZCAud2tzIGZpbGVzCisgICAgKHNlZSAnd2ljIGxpc3QgaW1hZ2VzJykuICBXaGVuIGFwcGxpZWQgdG8gYSBnaXZlbiBzZXQgb2YgYnVpbGQKKyAgICBhcnRpZmFjdHMsIHRoZSByZXN1bHQgaXMgYW4gaW1hZ2Ugb3Igc2V0IG9mIGltYWdlcyB0aGF0IGNhbiBiZQorICAgIGRpcmVjdGx5IHdyaXR0ZW4gb250byBtZWRpYSBhbmQgdXNlZCBvbiBhIHBhcnRpY3VsYXIgc3lzdGVtLgorCisgICAgVGhlICd3aWMnIGNvbW1hbmQgYW5kIHRoZSBpbmZyYXN0cnVjdHVyZSBpdCdzIGJhc2VkIG9uIGlzIGJ5CisgICAgZGVmaW5pdGlvbiBpbmNvbXBsZXRlIC0gaXRzIHB1cnBvc2UgaXMgdG8gYWxsb3cgdGhlIGdlbmVyYXRpb24gb2YKKyAgICBjdXN0b21pemVkIGltYWdlcywgYW5kIGFzIHN1Y2ggd2FzIGRlc2lnbmVkIHRvIGJlIGNvbXBsZXRlbHkKKyAgICBleHRlbnNpYmxlIHZpYSBhIHBsdWdpbiBpbnRlcmZhY2UgKHNlZSAnd2ljIGhlbHAgcGx1Z2lucycpLgorCisgIEJhY2tncm91bmQgYW5kIE1vdGl2YXRpb24KKworICAgIHdpYyBpcyBtZWFudCB0byBiZSBhIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQgc3RhbmRhbG9uZSB1dGlsaXR5CisgICAgdGhhdCBpbml0aWFsbHkgcHJvdmlkZXMgZWFzaWVyLXRvLXVzZSBhbmQgbW9yZSBmbGV4aWJsZQorICAgIHJlcGxhY2VtZW50cyBmb3IgYSBjb3VwbGUgYml0cyBvZiBleGlzdGluZyBmdW5jdGlvbmFsaXR5IGluCisgICAgb2UtY29yZTogZGlyZWN0ZGlzay5iYmNsYXNzIGFuZCBta2VmaWRpc2suc2guICBUaGUgZGlmZmVyZW5jZQorICAgIGJldHdlZW4gd2ljIGFuZCB0aG9zZSBleGFtcGxlcyBpcyB0aGF0IHdpdGggd2ljIHRoZSBmdW5jdGlvbmFsaXR5CisgICAgb2YgdGhvc2Ugc2NyaXB0cyBpcyBpbXBsZW1lbnRlZCBieSBhIGdlbmVyYWwtcHVycG9zZSBwYXJ0aXRpb25pbmcKKyAgICAnbGFuZ3VhZ2UnIGJhc2VkIG9uIFJlZGhhdCBraWNrc3RhcnQgc3ludGF4KS4KKworICAgIFRoZSBpbml0aWFsIG1vdGl2YXRpb24gYW5kIGRlc2lnbiBjb25zaWRlcmF0aW9ucyB0aGF0IGxlYWQgdG8gdGhlCisgICAgY3VycmVudCB0b29sIGFyZSBkZXNjcmliZWQgZXhoYXVzdGl2ZWx5IGluIFlvY3RvIEJ1ZyAjMzg0NworICAgIChodHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4NDcpLgorCisgIEltcGxlbWVudGF0aW9uIGFuZCBFeGFtcGxlcworCisgICAgd2ljIGNhbiBiZSB1c2VkIGluIHR3byBkaWZmZXJlbnQgbW9kZXMsIGRlcGVuZGluZyBvbiBob3cgbXVjaAorICAgIGNvbnRyb2wgdGhlIHVzZXIgbmVlZHMgaW4gc3BlY2lmeWluZyB0aGUgT3BlbmVtYmVkZGVkIGJ1aWxkCisgICAgYXJ0aWZhY3RzIHRoYXQgd2lsbCBiZSB1c2VkIGluIGNyZWF0aW5nIHRoZSBpbWFnZTogJ3JhdycgYW5kCisgICAgJ2Nvb2tlZCcuCisKKyAgICBJZiB1c2VkIGluICdyYXcnIG1vZGUsIGFydGlmYWN0cyBhcmUgZXhwbGljaXRseSBzcGVjaWZpZWQgdmlhCisgICAgY29tbWFuZC1saW5lIGFyZ3VtZW50cyAoc2VlIGV4YW1wbGUgYmVsb3cpLgorCisgICAgVGhlIG1vcmUgZWFzaWx5IHVzYWJsZSAnY29va2VkJyBtb2RlIHVzZXMgdGhlIGN1cnJlbnQgTUFDSElORQorICAgIHNldHRpbmcgYW5kIGEgc3BlY2lmaWVkIGltYWdlIG5hbWUgdG8gYXV0b21hdGljYWxseSBsb2NhdGUgdGhlCisgICAgYXJ0aWZhY3RzIHVzZWQgdG8gY3JlYXRlIHRoZSBpbWFnZS4KKworICAgIE9FIGtpY2tzdGFydCBmaWxlcyAoLndrcykgY2FuIG9mIGNvdXJzZSBiZSBzcGVjaWZpZWQgZGlyZWN0bHkgb24KKyAgICB0aGUgY29tbWFuZC1saW5lLCBidXQgdGhlIHVzZXIgY2FuIGFsc28gY2hvb3NlIGZyb20gYSBzZXQgb2YKKyAgICAnY2FubmVkJyAud2tzIGZpbGVzIGF2YWlsYWJsZSB2aWEgdGhlICd3aWMgbGlzdCBpbWFnZXMnIGNvbW1hbmQKKyAgICAoZXhhbXBsZSBiZWxvdykuCisKKyAgICBJbiBhbnkgY2FzZSwgdGhlIHByZXJlcXVpc2l0ZSBmb3IgZ2VuZXJhdGluZyBhbnkgaW1hZ2UgaXMgdG8gaGF2ZQorICAgIHRoZSBidWlsZCBhcnRpZmFjdHMgYWxyZWFkeSBhdmFpbGFibGUuICBUaGUgYmVsb3cgZXhhbXBsZXMgYXNzdW1lCisgICAgdGhlIHVzZXIgaGFzIGFscmVhZHkgYnVpbGQgYSAnY29yZS1pbWFnZS1taW5pbWFsJyBmb3IgYSBzcGVjaWZpYworICAgIG1hY2hpbmUgKGZ1dHVyZSB2ZXJzaW9ucyB3b24ndCByZXF1aXJlIHRoaXMgcmVkdW5kYW50IHN0ZXAsIGJ1dAorICAgIGZvciBub3cgdGhhdCdzIHR5cGljYWxseSBob3cgYnVpbGQgYXJ0aWZhY3RzIGdldCBnZW5lcmF0ZWQpLgorCisgICAgVGhlIG90aGVyIHByZXJlcXVpc2l0ZSBpcyB0byBzb3VyY2UgdGhlIGJ1aWxkIGVudmlyb25tZW50OgorCisgICAgICAkIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudgorCisgICAgVG8gc3RhcnQgb3V0IHdpdGgsIHdlJ2xsIGdlbmVyYXRlIGFuIGltYWdlIGZyb20gb25lIG9mIHRoZSBjYW5uZWQKKyAgICAud2tzIGZpbGVzLiAgVGhlIGZvbGxvd2luZyBnZW5lcmF0ZXMgYSBsaXN0IG9mIGF2YWlsYWlsYWJsZQorICAgIGltYWdlczoKKworICAgICAgJCB3aWMgbGlzdCBpbWFnZXMKKyAgICAgICAgbWtlZmlkaXNrICAgICAgICAgICAgIENyZWF0ZSBhbiBFRkkgZGlzayBpbWFnZQorICAgICAgICBkaXJlY3RkaXNrICAgICAgICAgICAgQ3JlYXRlIGEgJ3BjYmlvcycgZGlyZWN0IGRpc2sgaW1hZ2UKKworICAgIFlvdSBjYW4gZ2V0IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYW55IG9mIHRoZSBhdmFpbGFibGUgaW1hZ2VzIGJ5CisgICAgdHlwaW5nICd3aWMgbGlzdCB4eHggaGVscCcsIHdoZXJlICd4eHgnIGlzIG9uZSBvZiB0aGUgaW1hZ2UgbmFtZXM6CisKKyAgICAgICQgd2ljIGxpc3QgbWtlZmlkaXNrIGhlbHAKKworICAgIENyZWF0ZXMgYSBwYXJ0aXRpb25lZCBFRkkgZGlzayBpbWFnZSB0aGF0IHRoZSB1c2VyIGNhbiBkaXJlY3RseSBkZAorICAgIHRvIGJvb3QgbWVkaWEuCisKKyAgICBBdCBhbnkgdGltZSwgeW91IGNhbiBnZXQgaGVscCBvbiB0aGUgJ3dpYycgY29tbWFuZCBvciBhbnkKKyAgICBzdWJjb21tYW5kIChjdXJyZW50bHkgJ2xpc3QnIGFuZCAnY3JlYXRlJykuICBGb3IgaW5zdGFuY2UsIHRvIGdldAorICAgIHRoZSBkZXNjcmlwdGlvbiBvZiAnd2ljIGNyZWF0ZScgY29tbWFuZCBhbmQgaXRzIHBhcmFtZXRlcnM6CisKKyAgICAgICQgd2ljIGNyZWF0ZQorCisgICAgICAgVXNhZ2U6CisKKyAgICAgICBDcmVhdGUgYSBuZXcgT3BlbkVtYmVkZGVkIGltYWdlCisKKyAgICAgICB1c2FnZTogd2ljIGNyZWF0ZSA8d2tzIGZpbGUgb3IgaW1hZ2UgbmFtZT4gWy1vIDxESVJOQU1FPiB8IC4uLl0KKyAgICAgICAgICAgIFstaSA8SlNPTiBQUk9QRVJUWSBGSUxFPiB8IC0taW5maWxlIDxKU09OIFBST1BFUlRZX0ZJTEU+XQorICAgICAgICAgICAgWy1lIHwgLS1pbWFnZS1uYW1lXSBbLXMsIC0tc2tpcC1idWlsZC1jaGVja10gWy1ELCAtLWRlYnVnXQorICAgICAgICAgICAgWy1yLCAtLXJvb3Rmcy1kaXJdIFstYiwgLS1ib290aW1nLWRpcl0gWy1rLCAtLWtlcm5lbC1kaXJdCisgICAgICAgICAgICBbLW4sIC0tbmF0aXZlLXN5c3Jvb3RdIFstZiwgLS1idWlsZC1yb290ZnNdCisKKyAgICAgICBUaGlzIGNvbW1hbmQgY3JlYXRlcyBhbiBPcGVuRW1iZWRkZWQgaW1hZ2UgYmFzZWQgb24gdGhlICdPRQorICAgICAgIGtpY2tzdGFydCBjb21tYW5kcycgZm91bmQgaW4gdGhlIDx3a3MgZmlsZT4uCisKKyAgICAgICBUaGUgLW8gb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHBsYWNlIHRoZSBpbWFnZSBpbiBhIGRpcmVjdG9yeQorICAgICAgIHdpdGggYSBkaWZmZXJlbnQgbmFtZSBhbmQgbG9jYXRpb24uCisKKyAgICAgICBTZWUgJ3dpYyBoZWxwIGNyZWF0ZScgZm9yIG1vcmUgZGV0YWlsZWQgaW5zdHJ1Y3Rpb25zLgorICAgICAgIC4uLgorCisgICAgQXMgbWVudGlvbmVkIGluIHRoZSBjb21tYW5kLCB5b3UgY2FuIGdldCBldmVuIG1vcmUgZGV0YWlsZWQKKyAgICBpbmZvcm1hdGlvbiBieSBhZGRpbmcgJ2hlbHAnIHRvIHRoZSBhYm92ZToKKworICAgICAgJCB3aWMgaGVscCBjcmVhdGUKKworICAgIFNvLCB0aGUgZWFzaWVzdCB3YXkgdG8gY3JlYXRlIGFuIGltYWdlIGlzIHRvIHVzZSB0aGUgLWUgb3B0aW9uCisgICAgd2l0aCBhIGNhbm5lZCAud2tzIGZpbGUuICBUbyB1c2UgdGhlIC1lIG9wdGlvbiwgeW91IG5lZWQgdG8KKyAgICBzcGVjaWZ5IHRoZSBpbWFnZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBhcnRpZmFjdHMgYW5kIHlvdSBhY3R1YWxseQorICAgIG5lZWQgdG8gaGF2ZSB0aGUgTUFDSElORSB1c2VkIHRvIGJ1aWxkIHRoZW0gc3BlY2lmaWVkIGluIHlvdXIKKyAgICBsb2NhbC5jb25mICh0aGVzZSByZXF1aXJlbWVudHMgYXJlbid0IG5lY2Vzc2FyeSBpZiB5b3UgYXJlbid0CisgICAgdXNpbmcgdGhlIC1lIG9wdGlvbnMuKSAgQmVsb3csIHdlIGdlbmVyYXRlIGEgZGlyZWN0ZGlzayBpbWFnZSwKKyAgICBwb2ludGluZyB0aGUgcHJvY2VzcyBhdCB0aGUgY29yZS1pbWFnZS1taW5pbWFsIGFydGlmYWN0cyBmb3IgdGhlCisgICAgY3VycmVudCBNQUNISU5FOgorCisgICAgICAkIHdpYyBjcmVhdGUgZGlyZWN0ZGlzayAtZSBjb3JlLWltYWdlLW1pbmltYWwKKworICAgICAgQ2hlY2tpbmcgYmFzaWMgYnVpbGQgZW52aXJvbm1lbnQuLi4KKyAgICAgIERvbmUuCisKKyAgICAgIENyZWF0aW5nIGltYWdlKHMpLi4uCisKKyAgICAgIEluZm86IFRoZSBuZXcgaW1hZ2UocykgY2FuIGJlIGZvdW5kIGhlcmU6CisgICAgICAvdmFyL3RtcC93aWMvYnVpbGQvZGlyZWN0ZGlzay0yMDEzMDkyNTIzNTAtc2RhLmRpcmVjdAorCisgICAgICBUaGUgZm9sbG93aW5nIGJ1aWxkIGFydGlmYWN0cyB3ZXJlIHVzZWQgdG8gY3JlYXRlIHRoZSBpbWFnZShzKToKKworICAgICAgUk9PVEZTX0RJUjogICAgICAuLi4KKyAgICAgIEJPT1RJTUdfRElSOiAgICAgLi4uCisgICAgICBLRVJORUxfRElSOiAgICAgIC4uLgorICAgICAgTkFUSVZFX1NZU1JPT1Q6ICAuLi4KKworICAgICAgVGhlIGltYWdlKHMpIHdlcmUgY3JlYXRlZCB1c2luZyBPRSBraWNrc3RhcnQgZmlsZToKKyAgICAgICAgLi4uL3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL2RpcmVjdGRpc2sud2tzCisKKyAgICBUaGUgb3V0cHV0IHNob3dzIHRoZSBuYW1lIGFuZCBsb2NhdGlvbiBvZiB0aGUgaW1hZ2UgY3JlYXRlZCwgYW5kCisgICAgc28gdGhhdCB5b3Uga25vdyBleGFjdGx5IHdoYXQgd2FzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGltYWdlLCBlYWNoCisgICAgb2YgdGhlIGFydGlmYWN0cyBhbmQgdGhlIGtpY2tzdGFydCBmaWxlIHVzZWQuCisKKyAgICBTaW1pbGFybHksIHlvdSBjYW4gY3JlYXRlIGEgJ21rZWZpZGlzaycgaW1hZ2UgaW4gdGhlIHNhbWUgd2F5CisgICAgKG5vdGljZSB0aGF0IHRoaXMgZXhhbXBsZSB1c2VzIGEgZGlmZmVyZW50IG1hY2hpbmUgLSBiZWNhdXNlIGl0J3MKKyAgICB1c2luZyB0aGUgLWUgb3B0aW9uLCB5b3UgbmVlZCB0byBjaGFuZ2UgdGhlIE1BQ0hJTkUgaW4geW91cgorICAgIGxvY2FsLmNvbmYpOgorCisgICAgICAkIHdpYyBjcmVhdGUgbWtlZmlkaXNrIC1lIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgQ2hlY2tpbmcgYmFzaWMgYnVpbGQgZW52aXJvbm1lbnQuLi4KKyAgICAgIERvbmUuCisKKyAgICAgIENyZWF0aW5nIGltYWdlKHMpLi4uCisKKyAgICAgIEluZm86IFRoZSBuZXcgaW1hZ2UocykgY2FuIGJlIGZvdW5kIGhlcmU6CisgICAgICAgICAvdmFyL3RtcC93aWMvYnVpbGQvbWtlZmlkaXNrLTIwMTMwOTI2MDAyNy1zZGEuZGlyZWN0CisKKyAgICAgIC4uLgorCisgICAgSGVyZSdzIGFuIGV4YW1wbGUgdGhhdCBkb2Vzbid0IHRha2UgdGhlIGVhc3kgd2F5IG91dCBhbmQgbWFudWFsbHkKKyAgICBzcGVjaWZpZXMgZWFjaCBidWlsZCBhcnRpZmFjdCwgYWxvbmcgd2l0aCBhIG5vbi1jYW5uZWQgLndrcyBmaWxlLAorICAgIGFuZCBhbHNvIHVzZXMgdGhlIC1vIG9wdGlvbiB0byBoYXZlIHdpYyBjcmVhdGUgdGhlIG91dHB1dAorICAgIHNvbWV3aGVyZSBvdGhlciB0aGFuIHRoZSBkZWZhdWx0IC92YXIvdG1wL3dpYzoKKworICAgICAgJCB3aWMgY3JlYXRlIC4vdGVzdC53a3MgLW8gLi9vdXQgLS1yb290ZnMtZGlyCisgICAgICB0bXAvd29yay9xZW11eDg2XzY0LXBva3ktbGludXgvY29yZS1pbWFnZS1taW5pbWFsLzEuMC1yMC9yb290ZnMKKyAgICAgIC0tYm9vdGltZy1kaXIgdG1wL3N5c3Jvb3RzL3FlbXV4ODYtNjQvdXNyL3NoYXJlCisgICAgICAtLWtlcm5lbC1kaXIgdG1wL2RlcGxveS9pbWFnZXMvcWVtdXg4Ni02NAorICAgICAgLS1uYXRpdmUtc3lzcm9vdCB0bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4CisKKyAgICAgQ3JlYXRpbmcgaW1hZ2UocykuLi4KKworICAgICBJbmZvOiBUaGUgbmV3IGltYWdlKHMpIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgICAgICBvdXQvYnVpbGQvdGVzdC0yMDE1MDcyMTEzMTMtc2RhLmRpcmVjdAorCisgICAgIFRoZSBmb2xsb3dpbmcgYnVpbGQgYXJ0aWZhY3RzIHdlcmUgdXNlZCB0byBjcmVhdGUgdGhlIGltYWdlKHMpOgorICAgICAgIFJPT1RGU19ESVI6ICAgICAgICAgICAgICAgICAgIHRtcC93b3JrL3FlbXV4ODZfNjQtcG9reS1saW51eC9jb3JlLWltYWdlLW1pbmltYWwvMS4wLXIwL3Jvb3RmcworICAgICAgIEJPT1RJTUdfRElSOiAgICAgICAgICAgICAgICAgIHRtcC9zeXNyb290cy9xZW11eDg2LTY0L3Vzci9zaGFyZQorICAgICAgIEtFUk5FTF9ESVI6ICAgICAgICAgICAgICAgICAgIHRtcC9kZXBsb3kvaW1hZ2VzL3FlbXV4ODYtNjQKKyAgICAgICBOQVRJVkVfU1lTUk9PVDogICAgICAgICAgICAgICB0bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4CisKKyAgICAgVGhlIGltYWdlKHMpIHdlcmUgY3JlYXRlZCB1c2luZyBPRSBraWNrc3RhcnQgZmlsZToKKyAgICAgLi90ZXN0LndrcworCisgICAgIEhlcmUgaXMgYSBjb250ZW50IG9mIHRlc3Qud2tzOgorCisgICAgIHBhcnQgL2Jvb3QgLS1zb3VyY2UgYm9vdGltZy1wY2Jpb3MgLS1vbmRpc2sgc2RhIC0tbGFiZWwgYm9vdCAtLWFjdGl2ZSAtLWFsaWduIDEwMjQKKyAgICAgcGFydCAvIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0MyAtLWxhYmVsIHBsYXRmb3JtIC0tYWxpZ24gMTAyNAorCisgICAgIGJvb3Rsb2FkZXIgIC0tdGltZW91dD0wICAtLWFwcGVuZD0icm9vdHdhaXQgcm9vdGZzdHlwZT1leHQzIHZpZGVvPXZlc2FmYiB2Z2E9MHgzMTggY29uc29sZT10dHkwIgorCisKKyAgICBGaW5hbGx5LCBoZXJlJ3MgYW4gZXhhbXBsZSBvZiB0aGUgYWN0dWFsIHBhcnRpdGlvbiBsYW5ndWFnZQorICAgIGNvbW1hbmRzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIG1rZWZpZGlzayBpbWFnZSBpLmUuIHRoZXNlIGFyZSB0aGUKKyAgICBjb250ZW50cyBvZiB0aGUgbWtlZmlkaXNrLndrcyBPRSBraWNrc3RhcnQgZmlsZToKKworICAgICAgIyBzaG9ydC1kZXNjcmlwdGlvbjogQ3JlYXRlIGFuIEVGSSBkaXNrIGltYWdlCisgICAgICAjIGxvbmctZGVzY3JpcHRpb246IENyZWF0ZXMgYSBwYXJ0aXRpb25lZCBFRkkgZGlzayBpbWFnZSB0aGF0IHRoZSB1c2VyCisgICAgICAjIGNhbiBkaXJlY3RseSBkZCB0byBib290IG1lZGlhLgorCisgICAgICBwYXJ0IC9ib290IC0tc291cmNlIGJvb3RpbWctZWZpIC0tb25kaXNrIHNkYSAtLWZzdHlwZT1lZmkgLS1hY3RpdmUKKworICAgICAgcGFydCAvIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0MyAtLWxhYmVsIHBsYXRmb3JtCisKKyAgICAgIHBhcnQgc3dhcCAtLW9uZGlzayBzZGEgLS1zaXplIDQ0IC0tbGFiZWwgc3dhcDEgLS1mc3R5cGU9c3dhcAorCisgICAgICBib290bG9hZGVyICAtLXRpbWVvdXQ9MTAgIC0tYXBwZW5kPSJyb290d2FpdCBjb25zb2xlPXR0eVBDSDAsMTE1MjAwIgorCisgICAgWW91IGNhbiBnZXQgYSBjb21wbGV0ZSBsaXN0aW5nIGFuZCBkZXNjcmlwdGlvbiBvZiBhbGwgdGhlCisgICAga2lja3N0YXJ0IGNvbW1hbmRzIGF2YWlsYWJsZSBmb3IgdXNlIGluIC53a3MgZmlsZXMgZnJvbSAnd2ljIGhlbHAKKyAgICBraWNrc3RhcnQnLgorIiIiCisKK3dpY19raWNrc3RhcnRfaGVscCA9ICIiIgorCitOQU1FCisgICAgd2ljIGtpY2tzdGFydCAtIHdpYyBraWNrc3RhcnQgcmVmZXJlbmNlCisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIHRoZSBkZWZpbml0aXZlIHJlZmVyZW5jZSB0byB0aGUgd2ljCisgICAga2lja3N0YXJ0IGxhbmd1YWdlLiAgSXQgYWxzbyBwcm92aWRlcyBkb2N1bWVudGF0aW9uIG9uIHRoZSBsaXN0IG9mCisgICAgLS1zb3VyY2UgcGx1Z2lucyBhdmFpbGFibGUgZm9yIHVzZSBmcm9tIHRoZSAncGFydCcgY29tbWFuZCAoc2VlCisgICAgdGhlICdQbGF0Zm9ybS1zcGVjaWZpYyBQbHVnaW5zJyBzZWN0aW9uIGJlbG93KS4KKworICAgIFRoZSBjdXJyZW50IHdpYyBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBvbmx5IHRoZSBiYXNpYyBraWNrc3RhcnQKKyAgICBwYXJ0aXRpb25pbmcgY29tbWFuZHM6IHBhcnRpdGlvbiAob3IgcGFydCBmb3Igc2hvcnQpIGFuZAorICAgIGJvb3Rsb2FkZXIuCisKKyAgICBUaGUgZm9sbG93aW5nIGlzIGEgbGlzdGluZyBvZiB0aGUgY29tbWFuZHMsIHRoZWlyIHN5bnRheCwgYW5kCisgICAgbWVhbmluZ3MuIFRoZSBjb21tYW5kcyBhcmUgYmFzZWQgb24gdGhlIEZlZG9yYSBraWNrc3RhcnQKKyAgICBkb2N1bWVudGF0aW9uIGJ1dCB3aXRoIG1vZGlmaWNhdGlvbnMgdG8gcmVmbGVjdCB3aWMgY2FwYWJpbGl0aWVzLgorCisgICAgICBodHRwOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9BbmFjb25kYS9LaWNrc3RhcnQjcGFydF9vcl9wYXJ0aXRpb24KKyAgICAgIGh0dHA6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93aWtpL0FuYWNvbmRhL0tpY2tzdGFydCNib290bG9hZGVyCisKKyAgQ29tbWFuZHMKKworICAgICogJ3BhcnQnIG9yICdwYXJ0aXRpb24nCisKKyAgICAgICBUaGlzIGNvbW1hbmQgY3JlYXRlcyBhIHBhcnRpdGlvbiBvbiB0aGUgc3lzdGVtIGFuZCB1c2VzIHRoZQorICAgICAgIGZvbGxvd2luZyBzeW50YXg6CisKKyAgICAgICAgIHBhcnQgPG1vdW50cG9pbnQ+CisKKyAgICAgICBUaGUgPG1vdW50cG9pbnQ+IGlzIHdoZXJlIHRoZSBwYXJ0aXRpb24gd2lsbCBiZSBtb3VudGVkIGFuZAorICAgICAgIG11c3QgdGFrZSBvZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtczoKKworICAgICAgICAgLzxwYXRoPjogRm9yIGV4YW1wbGU6IC8sIC91c3IsIG9yIC9ob21lCisKKyAgICAgICAgIHN3YXA6IFRoZSBwYXJ0aXRpb24gd2lsbCBiZSB1c2VkIGFzIHN3YXAgc3BhY2UuCisKKyAgICAgICBUaGUgZm9sbG93aW5nIGFyZSBzdXBwb3J0ZWQgJ3BhcnQnIG9wdGlvbnM6CisKKyAgICAgICAgIC0tc2l6ZTogVGhlIG1pbmltdW0gcGFydGl0aW9uIHNpemUuIFNwZWNpZnkgYW4gaW50ZWdlciB2YWx1ZQorICAgICAgICAgICAgICAgICBzdWNoIGFzIDUwMC4gTXVsdGlwbGllcnMgaywgTSBhbmcgRyBjYW4gYmUgdXNlZC4gSWYKKyAgICAgICAgICAgICAgICAgbm90IHNwZWNpZmllZCwgdGhlIHNpemUgaXMgaW4gTUIuCisgICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgbmVlZCB0aGlzIG9wdGlvbiBpZiB5b3UgdXNlIC0tc291cmNlLgorCisgICAgICAgICAtLXNvdXJjZTogVGhpcyBvcHRpb24gaXMgYSB3aWMtc3BlY2lmaWMgb3B0aW9uIHRoYXQgbmFtZXMgdGhlCisgICAgICAgICAgICAgICAgICAgc291cmNlIG9mIHRoZSBkYXRhIHRoYXQgd2lsbCBwb3B1bGF0ZSB0aGUKKyAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb24uICBUaGUgbW9zdCBjb21tb24gdmFsdWUgZm9yIHRoaXMgb3B0aW9uCisgICAgICAgICAgICAgICAgICAgaXMgJ3Jvb3RmcycsIGJ1dCBjYW4gYmUgYW55IHZhbHVlIHdoaWNoIG1hcHMgdG8gYQorICAgICAgICAgICAgICAgICAgIHZhbGlkICdzb3VyY2UgcGx1Z2luJyAoc2VlICd3aWMgaGVscCBwbHVnaW5zJykuCisKKyAgICAgICAgICAgICAgICAgICBJZiAnLS1zb3VyY2Ugcm9vdGZzJyBpcyB1c2VkLCBpdCB0ZWxscyB0aGUgd2ljCisgICAgICAgICAgICAgICAgICAgY29tbWFuZCB0byBjcmVhdGUgYSBwYXJ0aXRpb24gYXMgbGFyZ2UgYXMgbmVlZGVkCisgICAgICAgICAgICAgICAgICAgYW5kIHRvIGZpbGwgaXQgd2l0aCB0aGUgY29udGVudHMgb2YgdGhlIHJvb3QKKyAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtIHBvaW50ZWQgdG8gYnkgdGhlICctcicgd2ljIGNvbW1hbmQtbGluZQorICAgICAgICAgICAgICAgICAgIG9wdGlvbiAob3IgdGhlIGVxdWl2YWxlbnQgcm9vdGZzIGRlcml2ZWQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAnLWUnIGNvbW1hbmQtbGluZSBvcHRpb24pLiAgVGhlIGZpbGVzeXN0ZW0gdHlwZQorICAgICAgICAgICAgICAgICAgIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgcGFydGl0aW9uIGlzIGRyaXZlbgorICAgICAgICAgICAgICAgICAgIGJ5IHRoZSB2YWx1ZSBvZiB0aGUgLS1mc3R5cGUgb3B0aW9uIHNwZWNpZmllZCBmb3IKKyAgICAgICAgICAgICAgICAgICB0aGUgcGFydGl0aW9uIChzZWUgLS1mc3R5cGUgYmVsb3cpLgorCisgICAgICAgICAgICAgICAgICAgSWYgLS1zb3VyY2UgPHBsdWdpbi1uYW1lPicgaXMgdXNlZCwgaXQgdGVsbHMgdGhlCisgICAgICAgICAgICAgICAgICAgd2ljIGNvbW1hbmQgdG8gY3JlYXRlIGEgcGFydGl0aW9uIGFzIGxhcmdlIGFzCisgICAgICAgICAgICAgICAgICAgbmVlZGVkIGFuZCB0byBmaWxsIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoZQorICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbiB0aGF0IHdpbGwgYmUgZ2VuZXJhdGVkIGJ5IHRoZSBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICBwbHVnaW4gbmFtZSB1c2luZyB0aGUgZGF0YSBwb2ludGVkIHRvIGJ5IHRoZSAnLXInCisgICAgICAgICAgICAgICAgICAgd2ljIGNvbW1hbmQtbGluZSBvcHRpb24gKG9yIHRoZSBlcXVpdmFsZW50IHJvb3RmcworICAgICAgICAgICAgICAgICAgIGRlcml2ZWQgZnJvbSB0aGUgJy1lJyBjb21tYW5kLWxpbmUgb3B0aW9uKS4KKyAgICAgICAgICAgICAgICAgICBFeGFjdGx5IHdoYXQgdGhvc2UgY29udGVudHMgYW5kIGZpbGVzeXN0ZW0gdHlwZSBlbmQKKyAgICAgICAgICAgICAgICAgICB1cCBiZWluZyBhcmUgZGVwZW5kZW50IG9uIHRoZSBnaXZlbiBwbHVnaW4KKyAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAgICAgICAgICAgIElmIC0tc291cmNlIG9wdGlvbiBpcyBub3QgdXNlZCwgdGhlIHdpYyBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgd2lsbCBjcmVhdGUgZW1wdHkgcGFydGl0aW9uLiAtLXNpemUgcGFyYW1ldGVyIGhhcworICAgICAgICAgICAgICAgICAgIHRvIGJlIHVzZWQgdG8gc3BlY2lmeSBzaXplIG9mIGVtcHR5IHBhcnRpdGlvbi4KKworICAgICAgICAgLS1vbmRpc2sgb3IgLS1vbmRyaXZlOiBGb3JjZXMgdGhlIHBhcnRpdGlvbiB0byBiZSBjcmVhdGVkIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgcGFydGljdWxhciBkaXNrLgorCisgICAgICAgICAtLWZzdHlwZTogU2V0cyB0aGUgZmlsZSBzeXN0ZW0gdHlwZSBmb3IgdGhlIHBhcnRpdGlvbi4gIFRoZXNlCisgICAgICAgICAgIGFwcGx5IHRvIHBhcnRpdGlvbnMgY3JlYXRlZCB1c2luZyAnLS1zb3VyY2Ugcm9vdGZzJyAoc2VlCisgICAgICAgICAgIC0tc291cmNlIGFib3ZlKS4gIFZhbGlkIHZhbHVlcyBhcmU6CisKKyAgICAgICAgICAgICBleHQyCisgICAgICAgICAgICAgZXh0MworICAgICAgICAgICAgIGV4dDQKKyAgICAgICAgICAgICBidHJmcworICAgICAgICAgICAgIHNxdWFzaGZzCisgICAgICAgICAgICAgc3dhcAorCisgICAgICAgICAtLWZzb3B0aW9uczogU3BlY2lmaWVzIGEgZnJlZS1mb3JtIHN0cmluZyBvZiBvcHRpb25zIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgdXNlZCB3aGVuIG1vdW50aW5nIHRoZSBmaWxlc3lzdGVtLiBUaGlzIHN0cmluZworICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgY29waWVkIGludG8gdGhlIC9ldGMvZnN0YWIgZmlsZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgc3lzdGVtIGFuZCBzaG91bGQgYmUgZW5jbG9zZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICBxdW90ZXMuICBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBzdHJpbmcgaXMKKyAgICAgICAgICAgICAgICAgICAgICAiZGVmYXVsdHMiLgorCisgICAgICAgICAtLWxhYmVsIGxhYmVsOiBTcGVjaWZpZXMgdGhlIGxhYmVsIHRvIGdpdmUgdG8gdGhlIGZpbGVzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIG1hZGUgb24gdGhlIHBhcnRpdGlvbi4gSWYgdGhlIGdpdmVuCisgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCBpcyBhbHJlYWR5IGluIHVzZSBieSBhbm90aGVyIGZpbGVzeXN0ZW0sCisgICAgICAgICAgICAgICAgICAgICAgICBhIG5ldyBsYWJlbCBpcyBjcmVhdGVkIGZvciB0aGUgcGFydGl0aW9uLgorCisgICAgICAgICAtLWFjdGl2ZTogTWFya3MgdGhlIHBhcnRpdGlvbiBhcyBhY3RpdmUuCisKKyAgICAgICAgIC0tYWxpZ24gKGluIEtCeXRlcyk6IFRoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIHdpYyBhbmQgc2F5cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gc3RhcnQgYSBwYXJ0aXRpb24gb24gYW4geCBLQnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5LgorCisgICAgICAgICAtLW5vLXRhYmxlOiBUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB3aWMuIFNwYWNlIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkIGZvciB0aGUgcGFydGl0aW9uIGFuZCBpdCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICBwb3B1bGF0ZWQgYnV0IGl0IHdpbGwgbm90IGJlIGFkZGVkIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uIHRhYmxlLiBJdCBtYXkgYmUgdXNlZnVsIGZvcgorICAgICAgICAgICAgICAgICAgICAgYm9vdGxvYWRlcnMuCisKKyAgICAgICAgIC0tZXh0cmEtc3BhY2U6IFRoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIHdpYy4gSXQgYWRkcyBleHRyYQorICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2UgYWZ0ZXIgdGhlIHNwYWNlIGZpbGxlZCBieSB0aGUgY29udGVudAorICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHBhcnRpdGlvbi4gVGhlIGZpbmFsIHNpemUgY2FuIGdvCisgICAgICAgICAgICAgICAgICAgICAgICBiZXlvbmQgdGhlIHNpemUgc3BlY2lmaWVkIGJ5IC0tc2l6ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIDEwTUIuCisKKyAgICAgICAgIC0tb3ZlcmhlYWQtZmFjdG9yOiBUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB3aWMuIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgb2YgdGhlIHBhcnRpdGlvbiBpcyBtdWx0aXBsaWVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBmYWN0b3IuIEl0IGhhcyB0byBiZSBncmVhdGVyIHRoYW4gb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcXVhbCB0byAxLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEuMy4KKworICAgICAgICAgLS1wYXJ0LXR5cGU6IFRoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIHdpYy4gSXQgc3BlY2lmaWVzIHBhcnRpdGlvbgorICAgICAgICAgICAgICAgICAgICAgIHR5cGUgR1VJRCBmb3IgR1BUIHBhcnRpdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwYXJ0aXRpb24gdHlwZSBHVUlEUyBjYW4gYmUgZm91bmQgaGVyZToKKyAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dVSURfUGFydGl0aW9uX1RhYmxlI1BhcnRpdGlvbl90eXBlX0dVSURzCisKKyAgICAgICAgIC0tdXNlLXV1aWQ6IFRoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIHdpYy4gSXQgbWFrZXMgd2ljIHRvIGdlbmVyYXRlCisgICAgICAgICAgICAgICAgICAgICByYW5kb20gZ2xvYmFsbHkgdW5pcXVlIGlkZW50aWZpZXIgKEdVSUQpIGZvciB0aGUgcGFydGl0aW9uCisgICAgICAgICAgICAgICAgICAgICBhbmQgdXNlIGl0IGluIGJvb3Rsb2FkZXIgY29uZmlndXJhdGlvbiB0byBzcGVjaWZ5IHJvb3QgcGFydGl0aW9uLgorCisgICAgICAgICAtLXV1aWQ6IFRoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIHdpYy4gSXQgc3BlY2lmaWVzIHBhcnRpdGlvbiBVVUlELgorICAgICAgICAgICAgICAgICBJdCdzIHVzZWZ1bCBpZiBwcmVjb25maWd1cmVkIHBhcnRpdGlvbiBVVUlEIGlzIGFkZGVkIHRvIGtlcm5lbCBjb21tYW5kIGxpbmUKKyAgICAgICAgICAgICAgICAgaW4gYm9vdGxvYWRlciBjb25maWd1cmF0aW9uIGJlZm9yZSBydW5uaW5nIHdpYy4gSW4gdGhpcyBjYXNlIC53a3MgZmlsZSBjYW4KKyAgICAgICAgICAgICAgICAgYmUgZ2VuZXJhdGVkIG9yIG1vZGlmaWVkIHRvIHNldCBwcmVjb25maWd1cmVkIHBhcml0aW9uIFVVSUQgdXNpbmcgdGhpcyBvcHRpb24uCisKKyAgICAqIGJvb3Rsb2FkZXIKKworICAgICAgVGhpcyBjb21tYW5kIGFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IHZhcmlvdXMgYm9vdGxvYWRlcgorICAgICAgb3B0aW9ucy4gIFRoZSBmb2xsb3dpbmcgYXJlIHN1cHBvcnRlZCAnYm9vdGxvYWRlcicgb3B0aW9uczoKKworICAgICAgICAtLXRpbWVvdXQ6IFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIHRoZQorICAgICAgICAgICAgICAgICAgIGJvb3Rsb2FkZXIgdGltZXMgb3V0IGFuZCBib290cyB0aGUgZGVmYXVsdCBvcHRpb24uCisKKyAgICAgICAgLS1hcHBlbmQ6IFNwZWNpZmllcyBrZXJuZWwgcGFyYW1ldGVycy4gVGhlc2Ugd2lsbCBiZSBhZGRlZCB0bworICAgICAgICAgICAgICAgICAgYm9vdGxvYWRlciBjb21tYW5kLWxpbmUgLSBmb3IgZXhhbXBsZSwgdGhlIHN5c2xpbnV4CisgICAgICAgICAgICAgICAgICBBUFBFTkQgb3IgZ3J1YiBrZXJuZWwgY29tbWFuZCBsaW5lLgorCisgICAgICBOb3RlIHRoYXQgYm9vdGxvYWRlciBmdW5jdGlvbmFsaXR5IGFuZCBib290IHBhcnRpdGlvbnMgYXJlCisgICAgICBpbXBsZW1lbnRlZCBieSB0aGUgdmFyaW91cyAtLXNvdXJjZSBwbHVnaW5zIHRoYXQgaW1wbGVtZW50CisgICAgICBib290bG9hZGVyIGZ1bmN0aW9uYWxpdHk7IHRoZSBib290bG9hZGVyIGNvbW1hbmQgZXNzZW50aWFsbHkKKyAgICAgIHByb3ZpZGVzIGEgbWVhbnMgb2YgbW9kaWZ5aW5nIGJvb3Rsb2FkZXIgY29uZmlndXJhdGlvbi4KKyIiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvaW1hZ2VyL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvaW1hZ2VyL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9pbWFnZXIvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2ltYWdlci9iYXNlaW1hZ2VyLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvaW1hZ2VyL2Jhc2VpbWFnZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNiZTk0OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2ltYWdlci9iYXNlaW1hZ2VyLnB5CkBAIC0wLDAgKzEsMTkyIEBACisjIS91c3IvYmluL2VudiBweXRob24gLXR0CisjCisjIENvcHlyaWdodCAoYykgMjAwNyBSZWQgSGF0ICBJbmMuCisjIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCwgMjAxMSBJbnRlbCwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyMgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAoraW1wb3J0IG9zCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBzaHV0aWwKKworZnJvbSB3aWMgaW1wb3J0IG1zZ2VyCitmcm9tIHdpYy51dGlscy5lcnJvcnMgaW1wb3J0IENyZWF0b3JFcnJvcgorZnJvbSB3aWMudXRpbHMgaW1wb3J0IHJ1bm5lcgorCitjbGFzcyBCYXNlSW1hZ2VDcmVhdG9yKG9iamVjdCk6CisgICAgIiIiQmFzZSBjbGFzcyBmb3IgaW1hZ2UgY3JlYXRpb24uCisKKyAgICBCYXNlSW1hZ2VDcmVhdG9yIGlzIHRoZSBzaW1wbGVzdCBjcmVhdG9yIGNsYXNzIGF2YWlsYWJsZTsgaXQgd2lsbAorICAgIGNyZWF0ZSBhIHN5c3RlbSBpbWFnZSBhY2NvcmRpbmcgdG8gdGhlIHN1cHBsaWVkIGtpY2tzdGFydCBmaWxlLgorCisgICAgZS5nLgorCisgICAgICBpbXBvcnQgd2ljLmltZ2NyZWF0ZSBhcyBpbWdjcmVhdGUKKyAgICAgIGtzID0gaW1nY3JlYXRlLnJlYWRfa2lja3N0YXJ0KCJmb28ua3MiKQorICAgICAgaW1nY3JlYXRlLkltYWdlQ3JlYXRvcihrcywgImZvbyIpLmNyZWF0ZSgpCisgICAgIiIiCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgc2VsZi5jbGVhbnVwKCkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjcmVhdGVvcHRzPU5vbmUpOgorICAgICAgICAiIiJJbml0aWFsaXplIGFuIEltYWdlQ3JlYXRvciBpbnN0YW5jZS4KKworICAgICAgICBrcyAtLSBhIHB5a2lja3N0YXJ0LktpY2tzdGFydFBhcnNlciBpbnN0YW5jZTsgdGhpcyBpbnN0YW5jZSB3aWxsIGJlCisgICAgICAgICAgICAgIHVzZWQgdG8gZHJpdmUgdGhlIGluc3RhbGwgYnkgZS5nLiBwcm92aWRpbmcgdGhlIGxpc3Qgb2YgcGFja2FnZXMKKyAgICAgICAgICAgICAgdG8gYmUgaW5zdGFsbGVkLCB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24gYW5kICVwb3N0IHNjcmlwdHMKKworICAgICAgICBuYW1lIC0tIGEgbmFtZSBmb3IgdGhlIGltYWdlOyB1c2VkIGZvciBlLmcuIGltYWdlIGZpbGVuYW1lcyBvcgorICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0gbGFiZWxzCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuX19idWlsZGRpciA9IE5vbmUKKworICAgICAgICBzZWxmLmtzID0gTm9uZQorICAgICAgICBzZWxmLm5hbWUgPSAidGFyZ2V0IgorICAgICAgICBzZWxmLnRtcGRpciA9ICIvdmFyL3RtcC93aWMiCisgICAgICAgIHNlbGYud29ya2RpciA9ICIvdmFyL3RtcC93aWMvYnVpbGQiCisKKyAgICAgICAgIyBzZXR1cCB0bXBmcyB0bXBkaXIgd2hlbiBlbmFibGV0bXBmcyBpcyBUcnVlCisgICAgICAgIHNlbGYuZW5hYmxldG1wZnMgPSBGYWxzZQorCisgICAgICAgIGlmIGNyZWF0ZW9wdHM6CisgICAgICAgICAgICAjIE1hcHBpbmcgdGFibGUgZm9yIHZhcmlhYmxlcyB0aGF0IGhhdmUgZGlmZmVyZW50IG5hbWVzLgorICAgICAgICAgICAgb3B0bWFwID0geyJvdXRkaXIiIDogImRlc3RkaXIiLAorICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAjIHVwZGF0ZSBzZXR0aW5nIGZyb20gY3JlYXRlb3B0cworICAgICAgICAgICAgZm9yIGtleSBpbiBjcmVhdGVvcHRzLmtleXMoKToKKyAgICAgICAgICAgICAgICBpZiBrZXkgaW4gb3B0bWFwOgorICAgICAgICAgICAgICAgICAgICBvcHRpb24gPSBvcHRtYXBba2V5XQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbiA9IGtleQorICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgb3B0aW9uLCBjcmVhdGVvcHRzW2tleV0pCisKKyAgICAgICAgICAgIHNlbGYuZGVzdGRpciA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmV4cGFuZHVzZXIoc2VsZi5kZXN0ZGlyKSkKKworICAgICAgICBzZWxmLl9kZXBfY2hlY2tzID0gWyJscyIsICJiYXNoIiwgImNwIiwgImVjaG8iXQorCisgICAgICAgICMgT3V0cHV0IGltYWdlIGZpbGUgbmFtZXMKKyAgICAgICAgc2VsZi5vdXRpbWFnZSA9IFtdCisKKyAgICAgICAgIyBObyBrcyBwcm92aWRlZCB3aGVuIGNhbGxlZCBieSBjb252ZXJ0b3IsIHNvIHNraXAgdGhlIGRlcGVuZGVuY3kgY2hlY2sKKyAgICAgICAgaWYgc2VsZi5rczoKKyAgICAgICAgICAgICMgSWYgd2UgaGF2ZSBidHJmcyBwYXJ0aXRpb24gd2UgbmVlZCB0byBjaGVjayBuZWNlc3NhcnkgdG9vbHMKKyAgICAgICAgICAgIGZvciBwYXJ0IGluIHNlbGYua3MuaGFuZGxlci5wYXJ0aXRpb24ucGFydGl0aW9uczoKKyAgICAgICAgICAgICAgICBpZiBwYXJ0LmZzdHlwZSBhbmQgcGFydC5mc3R5cGUgPT0gImJ0cmZzIjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGVwX2NoZWNrcy5hcHBlbmQoIm1rZnMuYnRyZnMiKQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICMgbWFrZSBzdXJlIHRoZSBzcGVjaWZpZWQgdG1wZGlyIGFuZCBjYWNoZWRpciBleGlzdAorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi50bXBkaXIpOgorICAgICAgICAgICAgb3MubWFrZWRpcnMoc2VsZi50bXBkaXIpCisKKworICAgICMKKyAgICAjIEhvb2tzIGZvciBzdWJjbGFzc2VzCisgICAgIworICAgIGRlZiBfY3JlYXRlKHNlbGYpOgorICAgICAgICAiIiJDcmVhdGUgcGFydGl0aW9ucyBmb3IgdGhlIGRpc2sgaW1hZ2UocykKKworICAgICAgICBUaGlzIGlzIHRoZSBob29rIHdoZXJlIHN1YmNsYXNzZXMgbWF5IGNyZWF0ZSB0aGUgcGFydGl0aW9ucworICAgICAgICB0aGF0IHdpbGwgYmUgYXNzZW1ibGVkIGludG8gZGlzayBpbWFnZShzKS4KKworICAgICAgICBUaGVyZSBpcyBubyBkZWZhdWx0IGltcGxlbWVudGF0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9jbGVhbnVwKHNlbGYpOgorICAgICAgICAiIiJVbmRvIGFueXRoaW5nIHBlcmZvcm1lZCBpbiBfY3JlYXRlKCkuCisKKyAgICAgICAgVGhpcyBpcyB0aGUgaG9vayB3aGVyZSBzdWJjbGFzc2VzIG11c3QgdW5kbyBhbnl0aGluZyB3aGljaCB3YXMKKyAgICAgICAgZG9uZSBpbiBfY3JlYXRlKCkuCisKKyAgICAgICAgVGhlcmUgaXMgbm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisgICAgIworICAgICMgQWN0dWFsIGltcGxlbWVudGF0aW9uCisgICAgIworICAgIGRlZiBfX2Vuc3VyZV9idWlsZGRpcihzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX19idWlsZGRpciBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi53b3JrZGlyID0gb3MucGF0aC5qb2luKHNlbGYudG1wZGlyLCAiYnVpbGQiKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYud29ya2Rpcik6CisgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMoc2VsZi53b3JrZGlyKQorICAgICAgICAgICAgc2VsZi5fX2J1aWxkZGlyID0gdGVtcGZpbGUubWtkdGVtcChkaXI9c2VsZi53b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg9ImltZ2NyZWF0ZS0iKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgICAgICByYWlzZSBDcmVhdG9yRXJyb3IoIkZhaWxlZCBjcmVhdGUgYnVpbGQgZGlyZWN0b3J5IGluICVzOiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLnRtcGRpciwgZXJyKSkKKworICAgIGRlZiBfX3NldHVwX3RtcGRpcihzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuZW5hYmxldG1wZnM6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBydW5uZXIuc2hvdygnbW91bnQgLXQgdG1wZnMgLW8gc2l6ZT00RyB0bXBmcyAlcycgJSBzZWxmLndvcmtkaXIpCisKKyAgICBkZWYgX19jbGVhbl90bXBkaXIoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmVuYWJsZXRtcGZzOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcnVubmVyLnNob3coJ3Vtb3VudCAtbCAlcycgJSBzZWxmLndvcmtkaXIpCisKKyAgICBkZWYgY3JlYXRlKHNlbGYpOgorICAgICAgICAiIiJDcmVhdGUgcGFydGl0aW9ucyBmb3IgdGhlIGRpc2sgaW1hZ2UocykKKworICAgICAgICBDcmVhdGUgdGhlIHBhcnRpdGlvbnMgdGhhdCB3aWxsIGJlIGFzc2VtYmxlZCBpbnRvIGRpc2sKKyAgICAgICAgaW1hZ2UocykuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9fc2V0dXBfdG1wZGlyKCkKKyAgICAgICAgc2VsZi5fX2Vuc3VyZV9idWlsZGRpcigpCisKKyAgICAgICAgc2VsZi5fY3JlYXRlKCkKKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICAiIiJVbmRvIGFueXRoaW5nIHBlcmZvcm1lZCBpbiBjcmVhdGUoKS4KKworICAgICAgICBOb3RlLCBtYWtlIHN1cmUgdG8gY2FsbCB0aGlzIG1ldGhvZCBvbmNlIGZpbmlzaGVkIHdpdGggdGhlIGNyZWF0b3IKKyAgICAgICAgaW5zdGFuY2UgaW4gb3JkZXIgdG8gZW5zdXJlIG5vIHN0YWxlIGZpbGVzIGFyZSBsZWZ0IG9uIHRoZSBob3N0IGUuZy46CisKKyAgICAgICAgICBjcmVhdG9yID0gSW1hZ2VDcmVhdG9yKGtzLCBuYW1lKQorICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgY3JlYXRvci5jcmVhdGUoKQorICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgIGNyZWF0b3IuY2xlYW51cCgpCisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl9fYnVpbGRkaXI6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLl9jbGVhbnVwKCkKKworICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuX19idWlsZGRpciwgaWdub3JlX2Vycm9ycz1UcnVlKQorICAgICAgICBzZWxmLl9fYnVpbGRkaXIgPSBOb25lCisKKyAgICAgICAgc2VsZi5fX2NsZWFuX3RtcGRpcigpCisKKworICAgIGRlZiBwcmludF9vdXRpbWFnZV9pbmZvKHNlbGYpOgorICAgICAgICBtc2cgPSAiVGhlIG5ldyBpbWFnZSBjYW4gYmUgZm91bmQgaGVyZTpcbiIKKyAgICAgICAgc2VsZi5vdXRpbWFnZS5zb3J0KCkKKyAgICAgICAgZm9yIHBhdGggaW4gc2VsZi5vdXRpbWFnZToKKyAgICAgICAgICAgIG1zZyArPSAnICAlc1xuJyAlIG9zLnBhdGguYWJzcGF0aChwYXRoKQorCisgICAgICAgIG1zZ2VyLmluZm8obXNnKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvaW1hZ2VyL2RpcmVjdC5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2ltYWdlci9kaXJlY3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2YTBkMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2ltYWdlci9kaXJlY3QucHkKQEAgLTAsMCArMSwzNzggQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxMywgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBERVNDUklQVElPTgorIyBUaGlzIGltcGxlbWVudHMgdGhlICdkaXJlY3QnIGltYWdlIGNyZWF0b3IgY2xhc3MgZm9yICd3aWMnCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gbGludXguaW50ZWwuY29tPgorIworCitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKKworZnJvbSB3aWMgaW1wb3J0IGtpY2tzdGFydCwgbXNnZXIKK2Zyb20gd2ljLnV0aWxzIGltcG9ydCBmc19yZWxhdGVkCitmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBnZXRfYml0YmFrZV92YXIKK2Zyb20gd2ljLnV0aWxzLnBhcnRpdGlvbmVkZnMgaW1wb3J0IEltYWdlCitmcm9tIHdpYy51dGlscy5lcnJvcnMgaW1wb3J0IENyZWF0b3JFcnJvciwgSW1hZ2VFcnJvcgorZnJvbSB3aWMuaW1hZ2VyLmJhc2VpbWFnZXIgaW1wb3J0IEJhc2VJbWFnZUNyZWF0b3IKK2Zyb20gd2ljLnBsdWdpbiBpbXBvcnQgcGx1Z2lubWdyCitmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBleGVjX2NtZAorCitkaXNrX21ldGhvZHMgPSB7CisgICAgImRvX2luc3RhbGxfZGlzayI6Tm9uZSwKK30KKworY2xhc3MgRGlyZWN0SW1hZ2VDcmVhdG9yKEJhc2VJbWFnZUNyZWF0b3IpOgorICAgICIiIgorICAgIEluc3RhbGxzIGEgc3lzdGVtIGludG8gYSBmaWxlIGNvbnRhaW5pbmcgYSBwYXJ0aXRpb25lZCBkaXNrIGltYWdlLgorCisgICAgRGlyZWN0SW1hZ2VDcmVhdG9yIGlzIGFuIGFkdmFuY2VkIEltYWdlQ3JlYXRvciBzdWJjbGFzczsgYW4gaW1hZ2UKKyAgICBmaWxlIGlzIGZvcm1hdHRlZCB3aXRoIGEgcGFydGl0aW9uIHRhYmxlLCBlYWNoIHBhcnRpdGlvbiBjcmVhdGVkCisgICAgZnJvbSBhIHJvb3RmcyBvciBvdGhlciBPcGVuRW1iZWRkZWQgYnVpbGQgYXJ0aWZhY3QgYW5kIGRkJ2VkIGludG8KKyAgICB0aGUgdmlydHVhbCBkaXNrLiBUaGUgZGlzayBpbWFnZSBjYW4gc3Vic2VxdWVudGx5IGJlIGRkJ2VkIG9udG8KKyAgICBtZWRpYSBhbmQgdXNlZCBvbiBhY3R1YWwgaGFyZHdhcmUuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb2VfYnVpbGRkaXIsIGltYWdlX291dHB1dF9kaXIsIHJvb3Rmc19kaXIsIGJvb3RpbWdfZGlyLAorICAgICAgICAgICAgICAgICBrZXJuZWxfZGlyLCBuYXRpdmVfc3lzcm9vdCwgY29tcHJlc3NvciwgY3JlYXRvcm9wdHM9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBJbml0aWFsaXplIGEgRGlyZWN0SW1hZ2VDcmVhdG9yIGluc3RhbmNlLgorCisgICAgICAgIFRoaXMgbWV0aG9kIHRha2VzIHRoZSBzYW1lIGFyZ3VtZW50cyBhcyBJbWFnZUNyZWF0b3IuX19pbml0X18oKQorICAgICAgICAiIiIKKyAgICAgICAgQmFzZUltYWdlQ3JlYXRvci5fX2luaXRfXyhzZWxmLCBjcmVhdG9yb3B0cykKKworICAgICAgICBzZWxmLl9faW1hZ2UgPSBOb25lCisgICAgICAgIHNlbGYuX19kaXNrcyA9IHt9CisgICAgICAgIHNlbGYuX19kaXNrX2Zvcm1hdCA9ICJkaXJlY3QiCisgICAgICAgIHNlbGYuX2Rpc2tfbmFtZXMgPSBbXQorICAgICAgICBzZWxmLnB0YWJsZV9mb3JtYXQgPSBzZWxmLmtzLmhhbmRsZXIuYm9vdGxvYWRlci5wdGFibGUKKworICAgICAgICBzZWxmLm9lX2J1aWxkZGlyID0gb2VfYnVpbGRkaXIKKyAgICAgICAgaWYgaW1hZ2Vfb3V0cHV0X2RpcjoKKyAgICAgICAgICAgIHNlbGYudG1wZGlyID0gaW1hZ2Vfb3V0cHV0X2RpcgorICAgICAgICBzZWxmLnJvb3Rmc19kaXIgPSByb290ZnNfZGlyCisgICAgICAgIHNlbGYuYm9vdGltZ19kaXIgPSBib290aW1nX2RpcgorICAgICAgICBzZWxmLmtlcm5lbF9kaXIgPSBrZXJuZWxfZGlyCisgICAgICAgIHNlbGYubmF0aXZlX3N5c3Jvb3QgPSBuYXRpdmVfc3lzcm9vdAorICAgICAgICBzZWxmLmNvbXByZXNzb3IgPSBjb21wcmVzc29yCisKKyAgICBkZWYgX19nZXRfcGFydF9udW0oc2VsZiwgbnVtLCBwYXJ0cyk6CisgICAgICAgICIiImNhbGN1bGF0ZSB0aGUgcmVhbCBwYXJ0aXRpb24gbnVtYmVyLCBhY2NvdW50aW5nIGZvciBwYXJ0aXRpb25zIG5vdAorICAgICAgICBpbiB0aGUgcGFydGl0aW9uIHRhYmxlIGFuZCBsb2dpY2FsIHBhcnRpdGlvbnMKKyAgICAgICAgIiIiCisgICAgICAgIHJlYWxudW0gPSAwCisgICAgICAgIGZvciBwbnVtLCBwYXJ0IGluIGVudW1lcmF0ZShwYXJ0cywgMSk6CisgICAgICAgICAgICBpZiBub3QgcGFydC5ub190YWJsZToKKyAgICAgICAgICAgICAgICByZWFsbnVtICs9IDEKKyAgICAgICAgICAgIGlmIHBudW0gPT0gbnVtOgorICAgICAgICAgICAgICAgIGlmICBwYXJ0Lm5vX3RhYmxlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgICAgIGlmIHNlbGYucHRhYmxlX2Zvcm1hdCA9PSAnbXNkb3MnIGFuZCByZWFsbnVtID4gMzoKKyAgICAgICAgICAgICAgICAgICAgIyBhY2NvdW50IGZvciBsb2dpY2FsIHBhcnRpdGlvbiBudW1iZXJpbmcsIGV4LiBzZGE1Li4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWxudW0gKyAxCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWxudW0KKworICAgIGRlZiBfd3JpdGVfZnN0YWIoc2VsZiwgaW1hZ2Vfcm9vdGZzKToKKyAgICAgICAgIiIib3ZlcnJpZGVuIHRvIGdlbmVyYXRlIGZzdGFiICh0ZW1wb3JhcmlseSkgaW4gcm9vdGZzLiBUaGlzIGlzIGNhbGxlZAorICAgICAgICBmcm9tIF9jcmVhdGUsIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGdldCBjYWxsZWQgZnJvbQorICAgICAgICBCYXNlSW1hZ2UuY3JlYXRlKCkKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBpbWFnZV9yb290ZnM6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBmc3RhYl9wYXRoID0gaW1hZ2Vfcm9vdGZzICsgIi9ldGMvZnN0YWIiCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShmc3RhYl9wYXRoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHdpdGggb3Blbihmc3RhYl9wYXRoKSBhcyBmc3RhYjoKKyAgICAgICAgICAgIGZzdGFiX2xpbmVzID0gZnN0YWIucmVhZGxpbmVzKCkKKworICAgICAgICBpZiBzZWxmLl91cGRhdGVfZnN0YWIoZnN0YWJfbGluZXMsIHNlbGYuX2dldF9wYXJ0cygpKToKKyAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShmc3RhYl9wYXRoLCBmc3RhYl9wYXRoICsgIi5vcmlnIikKKworICAgICAgICAgICAgd2l0aCBvcGVuKGZzdGFiX3BhdGgsICJ3IikgYXMgZnN0YWI6CisgICAgICAgICAgICAgICAgZnN0YWIud3JpdGVsaW5lcyhmc3RhYl9saW5lcykKKworICAgICAgICAgICAgcmV0dXJuIGZzdGFiX3BhdGgKKworICAgIGRlZiBfdXBkYXRlX2ZzdGFiKHNlbGYsIGZzdGFiX2xpbmVzLCBwYXJ0cyk6CisgICAgICAgICIiIkFzc3VtZSBwYXJ0aXRpb24gb3JkZXIgc2FtZSBhcyBpbiB3a3MiIiIKKyAgICAgICAgdXBkYXRlZCA9IEZhbHNlCisgICAgICAgIGZvciBudW0sIHBhcnQgaW4gZW51bWVyYXRlKHBhcnRzLCAxKToKKyAgICAgICAgICAgIHBudW0gPSBzZWxmLl9fZ2V0X3BhcnRfbnVtKG51bSwgcGFydHMpCisgICAgICAgICAgICBpZiBub3QgcG51bSBvciBub3QgcGFydC5tb3VudHBvaW50IFwKKyAgICAgICAgICAgICAgIG9yIHBhcnQubW91bnRwb2ludCBpbiAoIi8iLCAiL2Jvb3QiKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIG1tYyBkZXZpY2UgcGFydGl0aW9ucyBhcmUgbmFtZWQgbW1jYmxrMHAxLCBtbWNibGswcDIuLgorICAgICAgICAgICAgcHJlZml4ID0gJ3AnIGlmICBwYXJ0LmRpc2suc3RhcnRzd2l0aCgnbW1jYmxrJykgZWxzZSAnJworICAgICAgICAgICAgZGV2aWNlX25hbWUgPSAiL2Rldi8lcyVzJWQiICUgKHBhcnQuZGlzaywgcHJlZml4LCBwbnVtKQorCisgICAgICAgICAgICBvcHRzID0gcGFydC5mc29wdHMgaWYgcGFydC5mc29wdHMgZWxzZSAiZGVmYXVsdHMiCisgICAgICAgICAgICBsaW5lID0gIlx0Ii5qb2luKFtkZXZpY2VfbmFtZSwgcGFydC5tb3VudHBvaW50LCBwYXJ0LmZzdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMsICIwIiwgIjAiXSkgKyAiXG4iCisKKyAgICAgICAgICAgIGZzdGFiX2xpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgdXBkYXRlZCA9IFRydWUKKworICAgICAgICByZXR1cm4gdXBkYXRlZAorCisgICAgZGVmIHNldF9ib290aW1nX2RpcihzZWxmLCBib290aW1nX2Rpcik6CisgICAgICAgICIiIgorICAgICAgICBBY2Nlc3NvciBmb3IgYm9vdGltZ19kaXIsIHRoZSBhY3R1YWwgbG9jYXRpb24gdXNlZCBmb3IgdGhlIHNvdXJjZQorICAgICAgICBvZiB0aGUgYm9vdGltZy4gIFNob3VsZCBiZSBzZXQgYnkgc291cmNlIHBsdWdpbnMgKG9ubHkgaWYgdGhleQorICAgICAgICBjaGFuZ2UgdGhlIGRlZmF1bHQgYm9vdGltZyBzb3VyY2UpIHNvIHRoZSBjb3JyZWN0IGluZm8gZ2V0cworICAgICAgICBkaXNwbGF5ZWQgZm9yIHByaW50X291dGltYWdlX2luZm8oKS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuYm9vdGltZ19kaXIgPSBib290aW1nX2RpcgorCisgICAgZGVmIF9nZXRfcGFydHMoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmtzOgorICAgICAgICAgICAgcmFpc2UgQ3JlYXRvckVycm9yKCJGYWlsZWQgdG8gZ2V0IHBhcnRpdGlvbiBpbmZvLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBsZWFzZSBjaGVjayB5b3VyIGtpY2tzdGFydCBzZXR0aW5nLiIpCisKKyAgICAgICAgIyBTZXQgYSBkZWZhdWx0IHBhcnRpdGlvbiBpZiBubyBwYXJ0aXRpb24gaXMgZ2l2ZW4gb3V0CisgICAgICAgIGlmIG5vdCBzZWxmLmtzLmhhbmRsZXIucGFydGl0aW9uLnBhcnRpdGlvbnM6CisgICAgICAgICAgICBwYXJ0c3RyID0gInBhcnQgLyAtLXNpemUgMTkwMCAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0MyIKKyAgICAgICAgICAgIGFyZ3MgPSBwYXJ0c3RyLnNwbGl0KCkKKyAgICAgICAgICAgIHBhcnQgPSBzZWxmLmtzLmhhbmRsZXIucGFydGl0aW9uLnBhcnNlKGFyZ3NbMTpdKQorICAgICAgICAgICAgaWYgcGFydCBub3QgaW4gc2VsZi5rcy5oYW5kbGVyLnBhcnRpdGlvbi5wYXJ0aXRpb25zOgorICAgICAgICAgICAgICAgIHNlbGYua3MuaGFuZGxlci5wYXJ0aXRpb24ucGFydGl0aW9ucy5hcHBlbmQocGFydCkKKworICAgICAgICAjIHBhcnRpdGlvbnMgbGlzdCBmcm9tIGtpY2tzdGFydCBmaWxlCisgICAgICAgIHJldHVybiBraWNrc3RhcnQuZ2V0X3BhcnRpdGlvbnMoc2VsZi5rcykKKworICAgIGRlZiBnZXRfZGlza19uYW1lcyhzZWxmKToKKyAgICAgICAgIiIiIFJldHVybnMgYSBsaXN0IG9mIHBoeXNpY2FsIHRhcmdldCBkaXNrIG5hbWVzIChlLmcuLCAnc2RiJykgd2hpY2gKKyAgICAgICAgd2lsbCBiZSBjcmVhdGVkLiAiIiIKKworICAgICAgICBpZiBzZWxmLl9kaXNrX25hbWVzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Rpc2tfbmFtZXMKKworICAgICAgICAjZ2V0IHBhcnRpdGlvbiBpbmZvIGZyb20ga3MgaGFuZGxlcgorICAgICAgICBwYXJ0cyA9IHNlbGYuX2dldF9wYXJ0cygpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHBhcnRzKSk6CisgICAgICAgICAgICBpZiBwYXJ0c1tpXS5kaXNrOgorICAgICAgICAgICAgICAgIGRpc2tfbmFtZSA9IHBhcnRzW2ldLmRpc2sKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgQ3JlYXRvckVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGRpc2tzLCBubyAtLW9uZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGVjaWZpZWQgaW4gcGFydGl0aW9uIGxpbmUgb2Yga3MgZmlsZSIpCisKKyAgICAgICAgICAgIGlmIHBhcnRzW2ldLm1vdW50cG9pbnQgYW5kIG5vdCBwYXJ0c1tpXS5mc3R5cGU6CisgICAgICAgICAgICAgICAgcmFpc2UgQ3JlYXRvckVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGRpc2tzLCBubyAtLWZzdHlwZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGVjaWZpZWQgZm9yIHBhcnRpdGlvbiB3aXRoIG1vdW50cG9pbnQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyVzJyBpbiB0aGUga3MgZmlsZSIpCisKKyAgICAgICAgICAgIHNlbGYuX2Rpc2tfbmFtZXMuYXBwZW5kKGRpc2tfbmFtZSkKKworICAgICAgICByZXR1cm4gc2VsZi5fZGlza19uYW1lcworCisgICAgZGVmIF9mdWxsX25hbWUoc2VsZiwgbmFtZSwgZXh0ZW50aW9uKToKKyAgICAgICAgIiIiIENvbnN0cnVjdCBmdWxsIGZpbGUgbmFtZSBmb3IgYSBmaWxlIHdlIGdlbmVyYXRlLiAiIiIKKyAgICAgICAgcmV0dXJuICIlcy0lcy4lcyIgJSAoc2VsZi5uYW1lLCBuYW1lLCBleHRlbnRpb24pCisKKyAgICBkZWYgX2Z1bGxfcGF0aChzZWxmLCBwYXRoLCBuYW1lLCBleHRlbnRpb24pOgorICAgICAgICAiIiIgQ29uc3RydWN0IGZ1bGwgZmlsZSBwYXRoIHRvIGEgZmlsZSB3ZSBnZW5lcmF0ZS4gIiIiCisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocGF0aCwgc2VsZi5fZnVsbF9uYW1lKG5hbWUsIGV4dGVudGlvbikpCisKKyAgICBkZWYgZ2V0X2RlZmF1bHRfc291cmNlX3BsdWdpbihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBkZWZhdWx0IHNvdXJjZSBwbHVnaW4gaS5lLiB0aGUgcGx1Z2luIHRoYXQncyBjb25zdWx0ZWQgZm9yCisgICAgICAgIG92ZXJhbGwgaW1hZ2UgZ2VuZXJhdGlvbiB0YXNrcyBvdXRzaWRlIG9mIGFueSBwYXJ0aWN1bGFyCisgICAgICAgIHBhcnRpdGlvbi4gIEZvciBjb252ZW5pZW5jZSwgd2UganVzdCBoYW5nIGl0IG9mZiB0aGUKKyAgICAgICAgYm9vdGxvYWRlciBoYW5kbGVyIHNpbmNlIGl0J3MgdGhlIG9uZSBub24tcGFydGl0aW9uIG9iamVjdCBpbgorICAgICAgICBhbnkgc2V0dXAuICBCeSBkZWZhdWx0IHRoZSBkZWZhdWx0IHBsdWdpbiBpcyBzZXQgdG8gdGhlIHNhbWUKKyAgICAgICAgcGx1Z2luIGFzIHRoZSAvYm9vdCBwYXJ0aXRpb247IHNpbmNlIHdlIGhhbmcgaXQgb2ZmIHRoZQorICAgICAgICBib290bG9hZGVyIG9iamVjdCwgdGhlIGRlZmF1bHQgY2FuIGJlIGV4cGxpY2l0bHkgc2V0IHVzaW5nIHRoZQorICAgICAgICAtLXNvdXJjZSBib290bG9hZGVyIHBhcmFtLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYua3MuaGFuZGxlci5ib290bG9hZGVyLnNvdXJjZQorCisgICAgIworICAgICMgQWN0dWFsIGltcGxlbWVudGlvbgorICAgICMKKyAgICBkZWYgX2NyZWF0ZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEZvciAnd2ljJywgd2UgYWxyZWFkeSBoYXZlIG91ciBidWlsZCBhcnRpZmFjdHMgLSB3ZSBqdXN0IGNyZWF0ZQorICAgICAgICBmaWxlc3lzdGVtcyBmcm9tIHRoZSBhcnRpZmFjdHMgZGlyZWN0bHkgYW5kIGNvbWJpbmUgdGhlbSBpbnRvCisgICAgICAgIGEgcGFydGl0aW9uZWQgaW1hZ2UuCisgICAgICAgICIiIgorICAgICAgICBwYXJ0cyA9IHNlbGYuX2dldF9wYXJ0cygpCisKKyAgICAgICAgc2VsZi5fX2ltYWdlID0gSW1hZ2Uoc2VsZi5uYXRpdmVfc3lzcm9vdCkKKworICAgICAgICBmb3IgcGFydCBpbiBwYXJ0czoKKyAgICAgICAgICAgICMgYXMgYSBjb252ZW5pZW5jZSwgc2V0IHNvdXJjZSB0byB0aGUgYm9vdCBwYXJ0aXRpb24gc291cmNlCisgICAgICAgICAgICAjIGluc3RlYWQgb2YgZm9yY2luZyBpdCB0byBiZSBzZXQgdmlhIGJvb3Rsb2FkZXIgLS1zb3VyY2UKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmtzLmhhbmRsZXIuYm9vdGxvYWRlci5zb3VyY2UgYW5kIHBhcnQubW91bnRwb2ludCA9PSAiL2Jvb3QiOgorICAgICAgICAgICAgICAgIHNlbGYua3MuaGFuZGxlci5ib290bG9hZGVyLnNvdXJjZSA9IHBhcnQuc291cmNlCisKKyAgICAgICAgZnN0YWJfcGF0aCA9IHNlbGYuX3dyaXRlX2ZzdGFiKHNlbGYucm9vdGZzX2Rpci5nZXQoIlJPT1RGU19ESVIiKSkKKworICAgICAgICBmb3IgcGFydCBpbiBwYXJ0czoKKyAgICAgICAgICAgICMgZ2V0IHJvb3RmcyBzaXplIGZyb20gYml0YmFrZSB2YXJpYWJsZSBpZiBpdCdzIG5vdCBzZXQgaW4gLmtzIGZpbGUKKyAgICAgICAgICAgIGlmIG5vdCBwYXJ0LnNpemU6CisgICAgICAgICAgICAgICAgIyBhbmQgaWYgcm9vdGZzIG5hbWUgaXMgc3BlY2lmaWVkIGZvciB0aGUgcGFydGl0aW9uCisgICAgICAgICAgICAgICAgaW1hZ2VfbmFtZSA9IHBhcnQuZ2V0X3Jvb3RmcygpCisgICAgICAgICAgICAgICAgaWYgaW1hZ2VfbmFtZToKKyAgICAgICAgICAgICAgICAgICAgIyBCaXRiYWtlIHZhcmlhYmxlIFJPT1RGU19TSVpFIGlzIGNhbGN1bGF0ZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgIyBJbWFnZS5fZ2V0X3Jvb3Rmc19zaXplIG1ldGhvZCBmcm9tIG1ldGEvbGliL29lL2ltYWdlLnB5CisgICAgICAgICAgICAgICAgICAgICMgdXNpbmcgSU1BR0VfUk9PVEZTX1NJWkUsIElNQUdFX1JPT1RGU19BTElHTk1FTlQsCisgICAgICAgICAgICAgICAgICAgICMgSU1BR0VfT1ZFUkhFQURfRkFDVE9SIGFuZCBJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UKKyAgICAgICAgICAgICAgICAgICAgcnNpemVfYmIgPSBnZXRfYml0YmFrZV92YXIoJ1JPT1RGU19TSVpFJywgaW1hZ2VfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgcnNpemVfYmI6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbnZlcnQgZnJvbSBLYiB0byBNYgorICAgICAgICAgICAgICAgICAgICAgICAgcGFydC5zaXplID0gaW50KHJvdW5kKGZsb2F0KHJzaXplX2JiKSAvIDEwMjQuKSkKKyAgICAgICAgICAgICMgbmVlZCB0byBjcmVhdGUgdGhlIGZpbGVzeXN0ZW1zIGluIG9yZGVyIHRvIGdldCB0aGVpcgorICAgICAgICAgICAgIyBzaXplcyBiZWZvcmUgd2UgY2FuIGFkZCB0aGVtIGFuZCBkbyB0aGUgbGF5b3V0LgorICAgICAgICAgICAgIyBJbWFnZS5jcmVhdGUoKSBhY3R1YWxseSBjYWxscyBfX2Zvcm1hdF9kaXNrcygpIHRvIGNyZWF0ZQorICAgICAgICAgICAgIyB0aGUgZGlzayBpbWFnZXMgYW5kIGNhcnZlIG91dCB0aGUgcGFydGl0aW9ucywgdGhlbgorICAgICAgICAgICAgIyBzZWxmLmFzc2VtYmxlKCkgY2FsbHMgSW1hZ2UuYXNzZW1ibGUoKSB3aGljaCBjYWxscworICAgICAgICAgICAgIyBfX3dyaXRlX3BhcnRpdGl0aW9uKCkgZm9yIGVhY2ggcGFydGl0aW9uIHRvIGRkIHRoZSBmcworICAgICAgICAgICAgIyBpbnRvIHRoZSBwYXJ0aXRpb25zLgorICAgICAgICAgICAgcGFydC5wcmVwYXJlKHNlbGYsIHNlbGYud29ya2Rpciwgc2VsZi5vZV9idWlsZGRpciwgc2VsZi5yb290ZnNfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYm9vdGltZ19kaXIsIHNlbGYua2VybmVsX2Rpciwgc2VsZi5uYXRpdmVfc3lzcm9vdCkKKworCisgICAgICAgICAgICBzZWxmLl9faW1hZ2UuYWRkX3BhcnRpdGlvbihpbnQocGFydC5zaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQuZGlzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQubW91bnRwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQuc291cmNlX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0LmZzdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQubGFiZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc29wdHM9cGFydC5mc29wdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290PXBhcnQuYWN0aXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ249cGFydC5hbGlnbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vX3RhYmxlPXBhcnQubm9fdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0X3R5cGU9cGFydC5wYXJ0X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dWlkPXBhcnQudXVpZCkKKworICAgICAgICBpZiBmc3RhYl9wYXRoOgorICAgICAgICAgICAgc2h1dGlsLm1vdmUoZnN0YWJfcGF0aCArICIub3JpZyIsIGZzdGFiX3BhdGgpCisKKyAgICAgICAgc2VsZi5fX2ltYWdlLmxheW91dF9wYXJ0aXRpb25zKHNlbGYucHRhYmxlX2Zvcm1hdCkKKworICAgICAgICBzZWxmLl9faW1nZGlyID0gc2VsZi53b3JrZGlyCisgICAgICAgIGZvciBkaXNrX25hbWUsIGRpc2sgaW4gc2VsZi5fX2ltYWdlLmRpc2tzLml0ZW1zKCk6CisgICAgICAgICAgICBmdWxsX3BhdGggPSBzZWxmLl9mdWxsX3BhdGgoc2VsZi5fX2ltZ2RpciwgZGlza19uYW1lLCAiZGlyZWN0IikKKyAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCJBZGRpbmcgZGlzayAlcyBhcyAlcyB3aXRoIHNpemUgJXMgYnl0ZXMiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKGRpc2tfbmFtZSwgZnVsbF9wYXRoLCBkaXNrWydtaW5fc2l6ZSddKSkKKyAgICAgICAgICAgIGRpc2tfb2JqID0gZnNfcmVsYXRlZC5EaXNrSW1hZ2UoZnVsbF9wYXRoLCBkaXNrWydtaW5fc2l6ZSddKQorICAgICAgICAgICAgc2VsZi5fX2Rpc2tzW2Rpc2tfbmFtZV0gPSBkaXNrX29iagorICAgICAgICAgICAgc2VsZi5fX2ltYWdlLmFkZF9kaXNrKGRpc2tfbmFtZSwgZGlza19vYmopCisKKyAgICAgICAgc2VsZi5fX2ltYWdlLmNyZWF0ZSgpCisKKyAgICBkZWYgYXNzZW1ibGUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBBc3NlbWJsZSBwYXJ0aXRpb25zIGludG8gZGlzayBpbWFnZShzKQorICAgICAgICAiIiIKKyAgICAgICAgZm9yIGRpc2tfbmFtZSwgZGlzayBpbiBzZWxmLl9faW1hZ2UuZGlza3MuaXRlbXMoKToKKyAgICAgICAgICAgIGZ1bGxfcGF0aCA9IHNlbGYuX2Z1bGxfcGF0aChzZWxmLl9faW1nZGlyLCBkaXNrX25hbWUsICJkaXJlY3QiKQorICAgICAgICAgICAgbXNnZXIuZGVidWcoIkFzc2VtYmxpbmcgZGlzayAlcyBhcyAlcyB3aXRoIHNpemUgJXMgYnl0ZXMiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKGRpc2tfbmFtZSwgZnVsbF9wYXRoLCBkaXNrWydtaW5fc2l6ZSddKSkKKyAgICAgICAgICAgIHNlbGYuX19pbWFnZS5hc3NlbWJsZShmdWxsX3BhdGgpCisKKyAgICBkZWYgZmluYWxpemUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBGaW5hbGl6ZSB0aGUgZGlzayBpbWFnZS4KKworICAgICAgICBGb3IgZXhhbXBsZSwgcHJlcGFyZSB0aGUgaW1hZ2UgdG8gYmUgYm9vdGFibGUgYnkgZS5nLgorICAgICAgICBjcmVhdGluZyBhbmQgaW5zdGFsbGluZyBhIGJvb3Rsb2FkZXIgY29uZmlndXJhdGlvbi4KKworICAgICAgICAiIiIKKyAgICAgICAgc291cmNlX3BsdWdpbiA9IHNlbGYuZ2V0X2RlZmF1bHRfc291cmNlX3BsdWdpbigpCisgICAgICAgIGlmIHNvdXJjZV9wbHVnaW46CisgICAgICAgICAgICBzZWxmLl9zb3VyY2VfbWV0aG9kcyA9IHBsdWdpbm1nci5nZXRfc291cmNlX3BsdWdpbl9tZXRob2RzKHNvdXJjZV9wbHVnaW4sIGRpc2tfbWV0aG9kcykKKyAgICAgICAgICAgIGZvciBkaXNrX25hbWUsIGRpc2sgaW4gc2VsZi5fX2ltYWdlLmRpc2tzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgc2VsZi5fc291cmNlX21ldGhvZHNbImRvX2luc3RhbGxfZGlzayJdKGRpc2ssIGRpc2tfbmFtZSwgc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9lX2J1aWxkZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJvb3RpbWdfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmF0aXZlX3N5c3Jvb3QpCisgICAgICAgICMgQ29tcHJlc3MgdGhlIGltYWdlCisgICAgICAgIGlmIHNlbGYuY29tcHJlc3NvcjoKKyAgICAgICAgICAgIGZvciBkaXNrX25hbWUsIGRpc2sgaW4gc2VsZi5fX2ltYWdlLmRpc2tzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgZnVsbF9wYXRoID0gc2VsZi5fZnVsbF9wYXRoKHNlbGYuX19pbWdkaXIsIGRpc2tfbmFtZSwgImRpcmVjdCIpCisgICAgICAgICAgICAgICAgbXNnZXIuZGVidWcoIkNvbXByZXNzaW5nIGRpc2sgJXMgd2l0aCAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpc2tfbmFtZSwgc2VsZi5jb21wcmVzc29yKSkKKyAgICAgICAgICAgICAgICBleGVjX2NtZCgiJXMgJXMiICUgKHNlbGYuY29tcHJlc3NvciwgZnVsbF9wYXRoKSkKKworICAgIGRlZiBwcmludF9vdXRpbWFnZV9pbmZvKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUHJpbnQgdGhlIGltYWdlKHMpIGFuZCBhcnRpZmFjdHMgdXNlZCwgZm9yIHRoZSB1c2VyLgorICAgICAgICAiIiIKKyAgICAgICAgbXNnID0gIlRoZSBuZXcgaW1hZ2UocykgY2FuIGJlIGZvdW5kIGhlcmU6XG4iCisKKyAgICAgICAgcGFydHMgPSBzZWxmLl9nZXRfcGFydHMoKQorCisgICAgICAgIGZvciBkaXNrX25hbWUgaW4gc2VsZi5fX2ltYWdlLmRpc2tzOgorICAgICAgICAgICAgZXh0ZW5zaW9uID0gImRpcmVjdCIgKyB7Imd6aXAiOiAiLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiemlwMiI6ICIuYnoyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ4eiI6ICIueHoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiI6ICIifS5nZXQoc2VsZi5jb21wcmVzc29yKQorICAgICAgICAgICAgZnVsbF9wYXRoID0gc2VsZi5fZnVsbF9wYXRoKHNlbGYuX19pbWdkaXIsIGRpc2tfbmFtZSwgZXh0ZW5zaW9uKQorICAgICAgICAgICAgbXNnICs9ICcgICVzXG5cbicgJSBmdWxsX3BhdGgKKworICAgICAgICBtc2cgKz0gJ1RoZSBmb2xsb3dpbmcgYnVpbGQgYXJ0aWZhY3RzIHdlcmUgdXNlZCB0byBjcmVhdGUgdGhlIGltYWdlKHMpOlxuJworICAgICAgICBmb3IgcGFydCBpbiBwYXJ0czoKKyAgICAgICAgICAgIGlmIHBhcnQuZ2V0X3Jvb3RmcygpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHBhcnQubW91bnRwb2ludCA9PSAnLyc6CisgICAgICAgICAgICAgICAgc3VmZml4ID0gJzonCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN1ZmZpeCA9ICdbIiVzIl06JyAlIChwYXJ0Lm1vdW50cG9pbnQgb3IgcGFydC5sYWJlbCkKKyAgICAgICAgICAgIG1zZyArPSAnICBST09URlNfRElSJXMlc1xuJyAlIChzdWZmaXgubGp1c3QoMjApLCBwYXJ0LmdldF9yb290ZnMoKSkKKworICAgICAgICBtc2cgKz0gJyAgQk9PVElNR19ESVI6ICAgICAgICAgICAgICAgICAgJXNcbicgJSBzZWxmLmJvb3RpbWdfZGlyCisgICAgICAgIG1zZyArPSAnICBLRVJORUxfRElSOiAgICAgICAgICAgICAgICAgICAlc1xuJyAlIHNlbGYua2VybmVsX2RpcgorICAgICAgICBtc2cgKz0gJyAgTkFUSVZFX1NZU1JPT1Q6ICAgICAgICAgICAgICAgJXNcbicgJSBzZWxmLm5hdGl2ZV9zeXNyb290CisKKyAgICAgICAgbXNnZXIuaW5mbyhtc2cpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcm9vdGRldihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEdldCByb290IGRldmljZSBuYW1lIHRvIHVzZSBhcyBhICdyb290JyBwYXJhbWV0ZXIKKyAgICAgICAgaW4ga2VybmVsIGNvbW1hbmQgbGluZS4KKworICAgICAgICBBc3N1bWUgcGFydGl0aW9uIG9yZGVyIHNhbWUgYXMgaW4gd2tzCisgICAgICAgICIiIgorICAgICAgICBwYXJ0cyA9IHNlbGYuX2dldF9wYXJ0cygpCisgICAgICAgIGZvciBudW0sIHBhcnQgaW4gZW51bWVyYXRlKHBhcnRzLCAxKToKKyAgICAgICAgICAgIGlmIHBhcnQubW91bnRwb2ludCA9PSAiLyI6CisgICAgICAgICAgICAgICAgaWYgcGFydC51dWlkOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBBUlRVVUlEPSVzIiAlIHBhcnQudXVpZAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHN1ZmZpeCA9ICdwJyBpZiBwYXJ0LmRpc2suc3RhcnRzd2l0aCgnbW1jYmxrJykgZWxzZSAnJworICAgICAgICAgICAgICAgICAgICBwbnVtID0gc2VsZi5fX2dldF9wYXJ0X251bShudW0sIHBhcnRzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIi9kZXYvJXMlcyUtZCIgJSAocGFydC5kaXNrLCBzdWZmaXgsIHBudW0pCisKKyAgICBkZWYgX2NsZWFudXAoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9faW1hZ2UgaXMgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9faW1hZ2UuY2xlYW51cCgpCisgICAgICAgICAgICBleGNlcHQgSW1hZ2VFcnJvciwgZXJyOgorICAgICAgICAgICAgICAgIG1zZ2VyLndhcm5pbmcoIiVzIiAlIGVycikKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMva2lja3N0YXJ0L19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMva2lja3N0YXJ0L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YjBlNTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9raWNrc3RhcnQvX19pbml0X18ucHkKQEAgLTAsMCArMSwxMjIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbiAtdHQKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IFJlZCBIYXQsIEluYy4KKyMgQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwLCAyMDExIEludGVsLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorIyBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorCitpbXBvcnQgb3MsIHN5cywgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3RyaW5nCisKK2ltcG9ydCBweWtpY2tzdGFydC5zZWN0aW9ucyBhcyBrc3NlY3Rpb25zCitpbXBvcnQgcHlraWNrc3RhcnQuY29tbWFuZHMgYXMga3Njb21tYW5kcworaW1wb3J0IHB5a2lja3N0YXJ0LmNvbnN0YW50cyBhcyBrc2NvbnN0YW50cworaW1wb3J0IHB5a2lja3N0YXJ0LmVycm9ycyBhcyBrc2Vycm9ycworaW1wb3J0IHB5a2lja3N0YXJ0LnBhcnNlciBhcyBrc3BhcnNlcgoraW1wb3J0IHB5a2lja3N0YXJ0LnZlcnNpb24gYXMga3N2ZXJzaW9uCitmcm9tIHB5a2lja3N0YXJ0LmhhbmRsZXJzLmNvbnRyb2wgaW1wb3J0IGNvbW1hbmRNYXAKK2Zyb20gcHlraWNrc3RhcnQuaGFuZGxlcnMuY29udHJvbCBpbXBvcnQgZGF0YU1hcAorCitmcm9tIHdpYyBpbXBvcnQgbXNnZXIKK2Zyb20gd2ljLnV0aWxzIGltcG9ydCBlcnJvcnMsIG1pc2MsIHJ1bm5lciwgZnNfcmVsYXRlZCBhcyBmcworZnJvbSBjdXN0b21fY29tbWFuZHMgaW1wb3J0IHdpY2Jvb3QsIHBhcnRpdGlvbgorCitkZWYgcmVhZF9raWNrc3RhcnQocGF0aCk6CisgICAgIiIiUGFyc2UgYSBraWNrc3RhcnQgZmlsZSBhbmQgcmV0dXJuIGEgS2lja3N0YXJ0UGFyc2VyIGluc3RhbmNlLgorCisgICAgVGhpcyBpcyBhIHNpbXBsZSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIHRha2VzIGEgcGF0aCB0byBhIGtpY2tzdGFydCBmaWxlLAorICAgIHBhcnNlcyBpdCBhbmQgcmV0dXJucyBhIHB5a2lja3N0YXJ0IEtpY2tzdGFydFBhcnNlciBpbnN0YW5jZSB3aGljaCBjYW4KKyAgICBiZSB0aGVuIHBhc3NlZCB0byBhbiBJbWFnZUNyZWF0b3IgY29uc3RydWN0b3IuCisKKyAgICBJZiBhbiBlcnJvciBvY2N1cnMsIGEgQ3JlYXRvckVycm9yIGV4Y2VwdGlvbiBpcyB0aHJvd24uCisgICAgIiIiCisKKyAgICAjdmVyc2lvbiA9IGtzdmVyc2lvbi5tYWtlVmVyc2lvbigpCisgICAgI2tzID0ga3NwYXJzZXIuS2lja3N0YXJ0UGFyc2VyKHZlcnNpb24pCisKKyAgICB1c2luZ192ZXJzaW9uID0ga3N2ZXJzaW9uLkRFVkVMCisgICAgY29tbWFuZE1hcFt1c2luZ192ZXJzaW9uXVsiYm9vdGxvYWRlciJdID0gd2ljYm9vdC5XaWNfQm9vdGxvYWRlcgorICAgIGNvbW1hbmRNYXBbdXNpbmdfdmVyc2lvbl1bInBhcnQiXSA9IHBhcnRpdGlvbi5XaWNfUGFydGl0aW9uCisgICAgY29tbWFuZE1hcFt1c2luZ192ZXJzaW9uXVsicGFydGl0aW9uIl0gPSBwYXJ0aXRpb24uV2ljX1BhcnRpdGlvbgorICAgIGRhdGFNYXBbdXNpbmdfdmVyc2lvbl1bIlBhcnREYXRhIl0gPSBwYXJ0aXRpb24uV2ljX1BhcnREYXRhCisgICAgc3VwZXJjbGFzcyA9IGtzdmVyc2lvbi5yZXR1cm5DbGFzc0ZvclZlcnNpb24odmVyc2lvbj11c2luZ192ZXJzaW9uKQorCisgICAgY2xhc3MgS1NIYW5kbGVycyhzdXBlcmNsYXNzKToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc3VwZXJjbGFzcy5fX2luaXRfXyhzZWxmLCBtYXBwaW5nPWNvbW1hbmRNYXBbdXNpbmdfdmVyc2lvbl0pCisKKyAgICBraWNrc3RhcnQgPSBrc3BhcnNlci5LaWNrc3RhcnRQYXJzZXIoS1NIYW5kbGVycygpLCBlcnJvcnNBcmVGYXRhbD1UcnVlKQorCisgICAgdHJ5OgorICAgICAgICBraWNrc3RhcnQucmVhZEtpY2tzdGFydChwYXRoKQorICAgIGV4Y2VwdCAoa3NlcnJvcnMuS2lja3N0YXJ0UGFyc2VFcnJvciwga3NlcnJvcnMuS2lja3N0YXJ0RXJyb3IpLCBlcnI6CisgICAgICAgIG1zZ2VyLndhcm5pbmcoIkVycm9ycyBvY2N1cnJlZCB3aGVuIHBhcnNpbmcga2lja3N0YXJ0IGZpbGU6ICVzXG4iICUgcGF0aCkKKyAgICAgICAgbXNnZXIuZXJyb3IoIiVzIiAlIGVycikKKworICAgIHJldHVybiBraWNrc3RhcnQKKworZGVmIGdldF9pbWFnZV9zaXplKGtpY2tzdGFydCwgZGVmYXVsdD1Ob25lKToKKyAgICBfX3NpemUgPSAwCisgICAgZm9yIHBhcnQgaW4ga2lja3N0YXJ0LmhhbmRsZXIucGFydGl0aW9uLnBhcnRpdGlvbnM6CisgICAgICAgIGlmIHBhcnQubW91bnRwb2ludCA9PSAiLyIgYW5kIHBhcnQuc2l6ZToKKyAgICAgICAgICAgIF9fc2l6ZSA9IHBhcnQuc2l6ZQorICAgIGlmIF9fc2l6ZSA+IDA6CisgICAgICAgIHJldHVybiBpbnQoX19zaXplKSAqIDEwMjRMCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGRlZmF1bHQKKworZGVmIGdldF9pbWFnZV9mc3R5cGUoa2lja3N0YXJ0LCBkZWZhdWx0PU5vbmUpOgorICAgIGZvciBwYXJ0IGluIGtpY2tzdGFydC5oYW5kbGVyLnBhcnRpdGlvbi5wYXJ0aXRpb25zOgorICAgICAgICBpZiBwYXJ0Lm1vdW50cG9pbnQgPT0gIi8iIGFuZCBwYXJ0LmZzdHlwZToKKyAgICAgICAgICAgIHJldHVybiBwYXJ0LmZzdHlwZQorICAgIHJldHVybiBkZWZhdWx0CisKK2RlZiBnZXRfaW1hZ2VfZnNvcHRzKGtpY2tzdGFydCwgZGVmYXVsdD1Ob25lKToKKyAgICBmb3IgcGFydCBpbiBraWNrc3RhcnQuaGFuZGxlci5wYXJ0aXRpb24ucGFydGl0aW9uczoKKyAgICAgICAgaWYgcGFydC5tb3VudHBvaW50ID09ICIvIiBhbmQgcGFydC5mc29wdHM6CisgICAgICAgICAgICByZXR1cm4gcGFydC5mc29wdHMKKyAgICByZXR1cm4gZGVmYXVsdAorCitkZWYgZ2V0X3RpbWVvdXQoa2lja3N0YXJ0LCBkZWZhdWx0PU5vbmUpOgorICAgIGlmIG5vdCBoYXNhdHRyKGtpY2tzdGFydC5oYW5kbGVyLmJvb3Rsb2FkZXIsICJ0aW1lb3V0Iik6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisgICAgaWYga2lja3N0YXJ0LmhhbmRsZXIuYm9vdGxvYWRlci50aW1lb3V0IGlzIE5vbmU6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisgICAgcmV0dXJuIGludChraWNrc3RhcnQuaGFuZGxlci5ib290bG9hZGVyLnRpbWVvdXQpCisKK2RlZiBnZXRfa2VybmVsX2FyZ3Moa2lja3N0YXJ0LCBkZWZhdWx0PSJybyByZC5saXZlLmltYWdlIik6CisgICAgaWYgbm90IGhhc2F0dHIoa2lja3N0YXJ0LmhhbmRsZXIuYm9vdGxvYWRlciwgImFwcGVuZExpbmUiKToKKyAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgICBpZiBraWNrc3RhcnQuaGFuZGxlci5ib290bG9hZGVyLmFwcGVuZExpbmUgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgICByZXR1cm4gIiVzICVzIiAlKGRlZmF1bHQsIGtpY2tzdGFydC5oYW5kbGVyLmJvb3Rsb2FkZXIuYXBwZW5kTGluZSkKKworZGVmIGdldF9tZW51X2FyZ3Moa2lja3N0YXJ0LCBkZWZhdWx0PSIiKToKKyAgICBpZiBub3QgaGFzYXR0cihraWNrc3RhcnQuaGFuZGxlci5ib290bG9hZGVyLCAibWVudXMiKToKKyAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgICBpZiBraWNrc3RhcnQuaGFuZGxlci5ib290bG9hZGVyLm1lbnVzIGluIChOb25lLCAiIik6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisgICAgcmV0dXJuICIlcyIgJSBraWNrc3RhcnQuaGFuZGxlci5ib290bG9hZGVyLm1lbnVzCisKK2RlZiBnZXRfZGVmYXVsdF9rZXJuZWwoa2lja3N0YXJ0LCBkZWZhdWx0PU5vbmUpOgorICAgIGlmIG5vdCBoYXNhdHRyKGtpY2tzdGFydC5oYW5kbGVyLmJvb3Rsb2FkZXIsICJkZWZhdWx0Iik6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisgICAgaWYgbm90IGtpY2tzdGFydC5oYW5kbGVyLmJvb3Rsb2FkZXIuZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgICByZXR1cm4ga2lja3N0YXJ0LmhhbmRsZXIuYm9vdGxvYWRlci5kZWZhdWx0CisKK2RlZiBnZXRfcGFydGl0aW9ucyhraWNrc3RhcnQpOgorICAgIHJldHVybiBraWNrc3RhcnQuaGFuZGxlci5wYXJ0aXRpb24ucGFydGl0aW9ucwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMva2lja3N0YXJ0L2N1c3RvbV9jb21tYW5kcy9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2tpY2tzdGFydC9jdXN0b21fY29tbWFuZHMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRhZTQwNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2tpY2tzdGFydC9jdXN0b21fY29tbWFuZHMvX19pbml0X18ucHkKQEAgLTAsMCArMSw3IEBACitmcm9tIHBhcnRpdGlvbiBpbXBvcnQgV2ljX1BhcnRpdGlvbgorZnJvbSBwYXJ0aXRpb24gaW1wb3J0IFdpY19QYXJ0RGF0YQorCitfX2FsbF9fID0gKAorICAgICJXaWNfUGFydGl0aW9uIiwKKyAgICAiV2ljX1BhcnREYXRhIiwKKykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2tpY2tzdGFydC9jdXN0b21fY29tbWFuZHMvcGFydGl0aW9uLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMva2lja3N0YXJ0L2N1c3RvbV9jb21tYW5kcy9wYXJ0aXRpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVlMjVhNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2tpY2tzdGFydC9jdXN0b21fY29tbWFuZHMvcGFydGl0aW9uLnB5CkBAIC0wLDAgKzEsNTI2IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTMsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIE9wZW5FbWJlZGRlZCBwYXJ0aXRpb24gb2JqZWN0IGRlZmluaXRpb25zLgorIworIyBBVVRIT1JTCisjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGxpbnV4LmludGVsLmNvbT4KKyMKKworaW1wb3J0IG9zCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB1dWlkCitmcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25WYWx1ZUVycm9yCisKK2Zyb20gcHlraWNrc3RhcnQuY29tbWFuZHMucGFydGl0aW9uIGltcG9ydCBGQzRfUGFydERhdGEsIEZDNF9QYXJ0aXRpb24KK2Zyb20gd2ljLnV0aWxzLm9lLm1pc2MgaW1wb3J0IG1zZ2VyLCBwYXJzZV9zb3VyY2VwYXJhbXMKK2Zyb20gd2ljLnV0aWxzLm9lLm1pc2MgaW1wb3J0IGV4ZWNfY21kLCBleGVjX25hdGl2ZV9jbWQKK2Zyb20gd2ljLnBsdWdpbiBpbXBvcnQgcGx1Z2lubWdyCisKK3BhcnRpdGlvbl9tZXRob2RzID0geworICAgICJkb19zdGFnZV9wYXJ0aXRpb24iOk5vbmUsCisgICAgImRvX3ByZXBhcmVfcGFydGl0aW9uIjpOb25lLAorICAgICJkb19jb25maWd1cmVfcGFydGl0aW9uIjpOb25lLAorfQorCitjbGFzcyBXaWNfUGFydERhdGEoRkM0X1BhcnREYXRhKToKKyAgICByZW1vdmVkS2V5d29yZHMgPSBGQzRfUGFydERhdGEucmVtb3ZlZEtleXdvcmRzCisgICAgcmVtb3ZlZEF0dHJzID0gRkM0X1BhcnREYXRhLnJlbW92ZWRBdHRycworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIEZDNF9QYXJ0RGF0YS5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuZGVsZXRlUmVtb3ZlZEF0dHJzKCkKKyAgICAgICAgc2VsZi5hbGlnbiA9IGt3YXJncy5nZXQoImFsaWduIiwgTm9uZSkKKyAgICAgICAgc2VsZi5leHRvcHRzID0ga3dhcmdzLmdldCgiZXh0b3B0cyIsIE5vbmUpCisgICAgICAgIHNlbGYucGFydF90eXBlID0ga3dhcmdzLmdldCgicGFydF90eXBlIiwgTm9uZSkKKyAgICAgICAgc2VsZi5zb3VyY2UgPSBrd2FyZ3MuZ2V0KCJzb3VyY2UiLCBOb25lKQorICAgICAgICBzZWxmLnNvdXJjZXBhcmFtcyA9IGt3YXJncy5nZXQoInNvdXJjZXBhcmFtcyIsIE5vbmUpCisgICAgICAgIHNlbGYucm9vdGZzID0ga3dhcmdzLmdldCgicm9vdGZzLWRpciIsIE5vbmUpCisgICAgICAgIHNlbGYubm9fdGFibGUgPSBrd2FyZ3MuZ2V0KCJuby10YWJsZSIsIEZhbHNlKQorICAgICAgICBzZWxmLmV4dHJhX3NwYWNlID0ga3dhcmdzLmdldCgiZXh0cmEtc3BhY2UiLCAiMTBNIikKKyAgICAgICAgc2VsZi5vdmVyaGVhZF9mYWN0b3IgPSBrd2FyZ3MuZ2V0KCJvdmVyaGVhZC1mYWN0b3IiLCAxLjMpCisgICAgICAgIHNlbGYuX3VzZV91dWlkID0gRmFsc2UKKyAgICAgICAgc2VsZi51dWlkID0ga3dhcmdzLmdldCgidXVpZCIsIE5vbmUpCisgICAgICAgIHNlbGYudXNlX3V1aWQgPSBrd2FyZ3MuZ2V0KCJ1c2UtdXVpZCIsIEZhbHNlKQorICAgICAgICBzZWxmLnNvdXJjZV9maWxlID0gIiIKKyAgICAgICAgc2VsZi5zaXplID0gMAorCisgICAgZGVmIF9nZXRBcmdzQXNTdHIoc2VsZik6CisgICAgICAgIHJldHZhbCA9IEZDNF9QYXJ0RGF0YS5fZ2V0QXJnc0FzU3RyKHNlbGYpCisKKyAgICAgICAgaWYgc2VsZi5hbGlnbjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tYWxpZ249JWQiICUgc2VsZi5hbGlnbgorICAgICAgICBpZiBzZWxmLmV4dG9wdHM6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWV4dG9wdGlvbnM9JXMiICUgc2VsZi5leHRvcHRzCisgICAgICAgIGlmIHNlbGYucGFydF90eXBlOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1wYXJ0LXR5cGU9JXMiICUgc2VsZi5wYXJ0X3R5cGUKKyAgICAgICAgaWYgc2VsZi5zb3VyY2U6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLXNvdXJjZT0lcyIgJSBzZWxmLnNvdXJjZQorICAgICAgICAgICAgaWYgc2VsZi5zb3VyY2VwYXJhbXM6CisgICAgICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1zb3VyY2VwYXJhbXM9JXMiICUgc2VsZi5zb3VyY2VwYXJhbXMKKyAgICAgICAgICAgIGlmIHNlbGYucm9vdGZzOgorICAgICAgICAgICAgICAgIHJldHZhbCArPSAiIC0tcm9vdGZzLWRpcj0lcyIgJSBzZWxmLnJvb3RmcworICAgICAgICBpZiBzZWxmLm5vX3RhYmxlOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1uby10YWJsZSIKKyAgICAgICAgaWYgc2VsZi51c2VfdXVpZDoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tdXNlLXV1aWQiCisgICAgICAgIGlmIHNlbGYudXVpZDoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tdXVpZD0lcyIgJSBzZWxmLnV1aWQKKyAgICAgICAgcmV0dmFsICs9ICIgLS1leHRyYS1zcGFjZT0lcyIgJSBzZWxmLmV4dHJhX3NwYWNlCisgICAgICAgIHJldHZhbCArPSAiIC0tb3ZlcmhlYWQtZmFjdG9yPSVmIiAlIHNlbGYub3ZlcmhlYWRfZmFjdG9yCisKKyAgICAgICAgcmV0dXJuIHJldHZhbAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHVzZV91dWlkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdXNlX3V1aWQKKworICAgIEB1c2VfdXVpZC5zZXR0ZXIKKyAgICBkZWYgdXNlX3V1aWQoc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLl91c2VfdXVpZCA9IHZhbHVlCisgICAgICAgIGlmIHZhbHVlIGFuZCBub3Qgc2VsZi51dWlkOgorICAgICAgICAgICAgc2VsZi51dWlkID0gc3RyKHV1aWQudXVpZDQoKSkKKworICAgIGRlZiBnZXRfcm9vdGZzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQWNlc3NvciBmb3Igcm9vdGZzIGRpcgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYucm9vdGZzCisKKyAgICBkZWYgc2V0X3Jvb3RmcyhzZWxmLCByb290ZnMpOgorICAgICAgICAiIiIKKyAgICAgICAgQWNlc3NvciBmb3IgYWN0dWFsIHJvb3RmcyBkaXIsIHdoaWNoIG11c3QgYmUgc2V0IGJ5IHNvdXJjZQorICAgICAgICBwbHVnaW5zLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5yb290ZnMgPSByb290ZnMKKworICAgIGRlZiBnZXRfc2l6ZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEFjY2Vzc29yIGZvciBwYXJ0aXRpb24gc2l6ZSwgMCBvciAtLXNpemUgYmVmb3JlIHNldF9zaXplKCkuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5zaXplCisKKyAgICBkZWYgc2V0X3NpemUoc2VsZiwgc2l6ZSk6CisgICAgICAgICIiIgorICAgICAgICBBY2Nlc3NvciBmb3IgYWN0dWFsIHBhcnRpdGlvbiBzaXplLCB3aGljaCBtdXN0IGJlIHNldCBieSBzb3VyY2UKKyAgICAgICAgcGx1Z2lucy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuc2l6ZSA9IHNpemUKKworICAgIGRlZiBzZXRfc291cmNlX2ZpbGUoc2VsZiwgc291cmNlX2ZpbGUpOgorICAgICAgICAiIiIKKyAgICAgICAgQWNjZXNzb3IgZm9yIHNvdXJjZV9maWxlLCB0aGUgbG9jYXRpb24gb2YgdGhlIGdlbmVyYXRlZCBwYXJ0aXRpb24KKyAgICAgICAgaW1hZ2UsIHdoaWNoIG11c3QgYmUgc2V0IGJ5IHNvdXJjZSBwbHVnaW5zLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5zb3VyY2VfZmlsZSA9IHNvdXJjZV9maWxlCisKKyAgICBkZWYgZ2V0X2V4dHJhX2Jsb2NrX2NvdW50KHNlbGYsIGN1cnJlbnRfYmxvY2tzKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSAtLXNpemUgcGFyYW0gaXMgcmVmbGVjdGVkIGluIHNlbGYuc2l6ZSAoaW4ga0IpLCBhbmQgd2UgYWxyZWFkeQorICAgICAgICBoYXZlIGN1cnJlbnRfYmxvY2tzICgxaykgYmxvY2tzLCBjYWxjdWxhdGUgYW5kIHJldHVybiB0aGUKKyAgICAgICAgbnVtYmVyIG9mICgxaykgYmxvY2tzIHdlIG5lZWQgdG8gYWRkIHRvIGdldCB0byAtLXNpemUsIDAgaWYKKyAgICAgICAgd2UncmUgYWxyZWFkeSB0aGVyZSBvciBiZXlvbmQuCisgICAgICAgICIiIgorICAgICAgICBtc2dlci5kZWJ1ZygiUmVxdWVzdGVkIHBhcnRpdGlvbiBzaXplIGZvciAlczogJWQiICUgXAorICAgICAgICAgICAgICAgICAgICAoc2VsZi5tb3VudHBvaW50LCBzZWxmLnNpemUpKQorCisgICAgICAgIGlmIG5vdCBzZWxmLnNpemU6CisgICAgICAgICAgICByZXR1cm4gMAorCisgICAgICAgIHJlcXVlc3RlZF9ibG9ja3MgPSBzZWxmLnNpemUKKworICAgICAgICBtc2dlci5kZWJ1ZygiUmVxdWVzdGVkIGJsb2NrcyAlZCwgY3VycmVudF9ibG9ja3MgJWQiICUgXAorICAgICAgICAgICAgICAgICAgICAocmVxdWVzdGVkX2Jsb2NrcywgY3VycmVudF9ibG9ja3MpKQorCisgICAgICAgIGlmIHJlcXVlc3RlZF9ibG9ja3MgPiBjdXJyZW50X2Jsb2NrczoKKyAgICAgICAgICAgIHJldHVybiByZXF1ZXN0ZWRfYmxvY2tzIC0gY3VycmVudF9ibG9ja3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAwCisKKyAgICBkZWYgcHJlcGFyZShzZWxmLCBjcmVhdG9yLCBjcl93b3JrZGlyLCBvZV9idWlsZGRpciwgcm9vdGZzX2RpciwgYm9vdGltZ19kaXIsCisgICAgICAgICAgICAgICAga2VybmVsX2RpciwgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgUHJlcGFyZSBjb250ZW50IGZvciBpbmRpdmlkdWFsIHBhcnRpdGlvbnMsIGRlcGVuZGluZyBvbgorICAgICAgICBwYXJ0aXRpb24gY29tbWFuZCBwYXJhbWV0ZXJzLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5zb3VyY2VwYXJhbXNfZGljdCA9IHt9CisKKyAgICAgICAgaWYgc2VsZi5zb3VyY2VwYXJhbXM6CisgICAgICAgICAgICBzZWxmLnNvdXJjZXBhcmFtc19kaWN0ID0gcGFyc2Vfc291cmNlcGFyYW1zKHNlbGYuc291cmNlcGFyYW1zKQorCisgICAgICAgIGlmIG5vdCBzZWxmLnNvdXJjZToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNpemU6CisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoIlRoZSAlcyBwYXJ0aXRpb24gaGFzIGEgc2l6ZSBvZiB6ZXJvLiAgUGxlYXNlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BlY2lmeSBhIG5vbi16ZXJvIC0tc2l6ZSBmb3IgdGhhdCBwYXJ0aXRpb24uIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vdW50cG9pbnQpCisgICAgICAgICAgICBpZiBzZWxmLmZzdHlwZSBhbmQgc2VsZi5mc3R5cGUgPT0gInN3YXAiOgorICAgICAgICAgICAgICAgIHNlbGYucHJlcGFyZV9zd2FwX3BhcnRpdGlvbihjcl93b3JrZGlyLCBvZV9idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpCisgICAgICAgICAgICBlbGlmIHNlbGYuZnN0eXBlOgorICAgICAgICAgICAgICAgIHJvb3RmcyA9ICIlcy9mc18lcy4lcy4lcyIgJSAoY3Jfd29ya2Rpciwgc2VsZi5sYWJlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZW5vLCBzZWxmLmZzdHlwZSkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShyb290ZnMpOgorICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUocm9vdGZzKQorICAgICAgICAgICAgICAgIGZvciBwcmVmaXggaW4gKCJleHQiLCAiYnRyZnMiLCAidmZhdCIsICJzcXVhc2hmcyIpOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmZzdHlwZS5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcmVwYXJlX2VtcHR5X3BhcnRpdGlvbl8iICsgcHJlZml4KQorICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kKHJvb3Rmcywgb2VfYnVpbGRkaXIsIG5hdGl2ZV9zeXNyb290KQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb3VyY2VfZmlsZSA9IHJvb3RmcworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHBsdWdpbnMgPSBwbHVnaW5tZ3IuZ2V0X3NvdXJjZV9wbHVnaW5zKCkKKworICAgICAgICBpZiBzZWxmLnNvdXJjZSBub3QgaW4gcGx1Z2luczoKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJUaGUgJyVzJyAtLXNvdXJjZSBzcGVjaWZpZWQgZm9yICVzIGRvZXNuJ3QgZXhpc3QuXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICJTZWUgJ3dpYyBsaXN0IHNvdXJjZS1wbHVnaW5zJyBmb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgLS1zb3VyY2VzLlxuXHRTZWUgJ3dpYyBoZWxwIHNvdXJjZS1wbHVnaW5zJyBmb3IgIgorICAgICAgICAgICAgICAgICAgICAgICAgImRldGFpbHMgb24gYWRkaW5nIGEgbmV3IHNvdXJjZSBwbHVnaW4uIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLnNvdXJjZSwgc2VsZi5tb3VudHBvaW50KSkKKworICAgICAgICBzZWxmLl9zb3VyY2VfbWV0aG9kcyA9IHBsdWdpbm1nci5nZXRfc291cmNlX3BsdWdpbl9tZXRob2RzKFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb3VyY2UsIHBhcnRpdGlvbl9tZXRob2RzKQorICAgICAgICBzZWxmLl9zb3VyY2VfbWV0aG9kc1siZG9fY29uZmlndXJlX3BhcnRpdGlvbiJdKHNlbGYsIHNlbGYuc291cmNlcGFyYW1zX2RpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRvciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290aW1nX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KQorICAgICAgICBzZWxmLl9zb3VyY2VfbWV0aG9kc1siZG9fc3RhZ2VfcGFydGl0aW9uIl0oc2VsZiwgc2VsZi5zb3VyY2VwYXJhbXNfZGljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0b3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpCisgICAgICAgIHNlbGYuX3NvdXJjZV9tZXRob2RzWyJkb19wcmVwYXJlX3BhcnRpdGlvbiJdKHNlbGYsIHNlbGYuc291cmNlcGFyYW1zX2RpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0b3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lX2J1aWxkZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290aW1nX2Rpciwga2VybmVsX2Rpciwgcm9vdGZzX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICBkZWYgcHJlcGFyZV9yb290ZnNfZnJvbV9mc19pbWFnZShzZWxmLCBjcl93b3JrZGlyLCBvZV9idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290ZnNfZGlyKToKKyAgICAgICAgIiIiCisgICAgICAgIEhhbmRsZSBhbiBhbHJlYWR5LWNyZWF0ZWQgcGFydGl0aW9uIGUuZy4geHh4LmV4dDMKKyAgICAgICAgIiIiCisgICAgICAgIHJvb3RmcyA9IG9lX2J1aWxkZGlyCisgICAgICAgIGR1X2NtZCA9ICJkdSAtTGJrcyAlcyIgJSByb290ZnMKKyAgICAgICAgb3V0ID0gZXhlY19jbWQoZHVfY21kKQorICAgICAgICByb290ZnNfc2l6ZSA9IG91dC5zcGxpdCgpWzBdCisKKyAgICAgICAgc2VsZi5zaXplID0gcm9vdGZzX3NpemUKKyAgICAgICAgc2VsZi5zb3VyY2VfZmlsZSA9IHJvb3RmcworCisgICAgZGVmIHByZXBhcmVfcm9vdGZzKHNlbGYsIGNyX3dvcmtkaXIsIG9lX2J1aWxkZGlyLCByb290ZnNfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlIGNvbnRlbnQgZm9yIGEgcm9vdGZzIHBhcnRpdGlvbiBpLmUuIGNyZWF0ZSBhIHBhcnRpdGlvbgorICAgICAgICBhbmQgZmlsbCBpdCBmcm9tIGEgL3Jvb3RmcyBkaXIuCisKKyAgICAgICAgQ3VycmVudGx5IGhhbmRsZXMgZXh0Mi8zLzQsIGJ0cmZzIGFuZCB2ZmF0LgorICAgICAgICAiIiIKKyAgICAgICAgcF9wcmVmaXggPSBvcy5lbnZpcm9uLmdldCgiUFNFVURPX1BSRUZJWCIsICIlcy91c3IiICUgbmF0aXZlX3N5c3Jvb3QpCisgICAgICAgIHBfbG9jYWxzdGF0ZWRpciA9IG9zLmVudmlyb24uZ2V0KCJQU0VVRE9fTE9DQUxTVEFURURJUiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcy8uLi9wc2V1ZG8iICUgcm9vdGZzX2RpcikKKyAgICAgICAgcF9wYXNzd2QgPSBvcy5lbnZpcm9uLmdldCgiUFNFVURPX1BBU1NXRCIsIHJvb3Rmc19kaXIpCisgICAgICAgIHBfbm9zeW1saW5rZXhwID0gb3MuZW52aXJvbi5nZXQoIlBTRVVET19OT1NZTUxJTktFWFAiLCAiMSIpCisgICAgICAgIHBzZXVkbyA9ICJleHBvcnQgUFNFVURPX1BSRUZJWD0lczsiICUgcF9wcmVmaXgKKyAgICAgICAgcHNldWRvICs9ICJleHBvcnQgUFNFVURPX0xPQ0FMU1RBVEVESVI9JXM7IiAlIHBfbG9jYWxzdGF0ZWRpcgorICAgICAgICBwc2V1ZG8gKz0gImV4cG9ydCBQU0VVRE9fUEFTU1dEPSVzOyIgJSBwX3Bhc3N3ZAorICAgICAgICBwc2V1ZG8gKz0gImV4cG9ydCBQU0VVRE9fTk9TWU1MSU5LRVhQPSVzOyIgJSBwX25vc3ltbGlua2V4cAorICAgICAgICBwc2V1ZG8gKz0gIiVzL3Vzci9iaW4vcHNldWRvICIgJSBuYXRpdmVfc3lzcm9vdAorCisgICAgICAgIHJvb3RmcyA9ICIlcy9yb290ZnNfJXMuJXMuJXMiICUgKGNyX3dvcmtkaXIsIHNlbGYubGFiZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZW5vLCBzZWxmLmZzdHlwZSkKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUocm9vdGZzKToKKyAgICAgICAgICAgIG9zLnJlbW92ZShyb290ZnMpCisKKyAgICAgICAgZm9yIHByZWZpeCBpbiAoImV4dCIsICJidHJmcyIsICJ2ZmF0IiwgInNxdWFzaGZzIik6CisgICAgICAgICAgICBpZiBzZWxmLmZzdHlwZS5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLCAicHJlcGFyZV9yb290ZnNfIiArIHByZWZpeCkKKyAgICAgICAgICAgICAgICBtZXRob2Qocm9vdGZzLCBvZV9idWlsZGRpciwgcm9vdGZzX2RpciwgbmF0aXZlX3N5c3Jvb3QsIHBzZXVkbykKKworICAgICAgICAgICAgICAgIHNlbGYuc291cmNlX2ZpbGUgPSByb290ZnMKKworICAgICAgICAgICAgICAgICMgZ2V0IHRoZSByb290ZnMgc2l6ZSBpbiB0aGUgcmlnaHQgdW5pdHMgZm9yIGtpY2tzdGFydCAoa0IpCisgICAgICAgICAgICAgICAgZHVfY21kID0gImR1IC1MYmtzICVzIiAlIHJvb3RmcworICAgICAgICAgICAgICAgIG91dCA9IGV4ZWNfY21kKGR1X2NtZCkKKyAgICAgICAgICAgICAgICBzZWxmLnNpemUgPSBvdXQuc3BsaXQoKVswXQorCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIGRlZiBwcmVwYXJlX3Jvb3Rmc19leHQoc2VsZiwgcm9vdGZzLCBvZV9idWlsZGRpciwgcm9vdGZzX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290LCBwc2V1ZG8pOgorICAgICAgICAiIiIKKyAgICAgICAgUHJlcGFyZSBjb250ZW50IGZvciBhbiBleHQyLzMvNCByb290ZnMgcGFydGl0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgZHVfY21kID0gImR1IC1rcyAlcyIgJSByb290ZnNfZGlyCisgICAgICAgIG91dCA9IGV4ZWNfY21kKGR1X2NtZCkKKyAgICAgICAgYWN0dWFsX3Jvb3Rmc19zaXplID0gaW50KG91dC5zcGxpdCgpWzBdKQorCisgICAgICAgIGV4dHJhX2Jsb2NrcyA9IHNlbGYuZ2V0X2V4dHJhX2Jsb2NrX2NvdW50KGFjdHVhbF9yb290ZnNfc2l6ZSkKKyAgICAgICAgaWYgZXh0cmFfYmxvY2tzIDwgc2VsZi5leHRyYV9zcGFjZToKKyAgICAgICAgICAgIGV4dHJhX2Jsb2NrcyA9IHNlbGYuZXh0cmFfc3BhY2UKKworICAgICAgICByb290ZnNfc2l6ZSA9IGFjdHVhbF9yb290ZnNfc2l6ZSArIGV4dHJhX2Jsb2NrcworICAgICAgICByb290ZnNfc2l6ZSAqPSBzZWxmLm92ZXJoZWFkX2ZhY3RvcgorCisgICAgICAgIG1zZ2VyLmRlYnVnKCJBZGRlZCAlZCBleHRyYSBibG9ja3MgdG8gJXMgdG8gZ2V0IHRvICVkIHRvdGFsIGJsb2NrcyIgJSBcCisgICAgICAgICAgICAgICAgICAgIChleHRyYV9ibG9ja3MsIHNlbGYubW91bnRwb2ludCwgcm9vdGZzX3NpemUpKQorCisgICAgICAgIGRkX2NtZCA9ICJkZCBpZj0vZGV2L3plcm8gb2Y9JXMgYnM9MTAyNCBzZWVrPSVkIGNvdW50PTAgYnM9MWsiICUgXAorICAgICAgICAgICAgKHJvb3Rmcywgcm9vdGZzX3NpemUpCisgICAgICAgIGV4ZWNfY21kKGRkX2NtZCkKKworICAgICAgICBleHRyYV9pbWFnZWNtZCA9ICItaSA4MTkyIgorCisgICAgICAgIGxhYmVsX3N0ciA9ICIiCisgICAgICAgIGlmIHNlbGYubGFiZWw6CisgICAgICAgICAgICBsYWJlbF9zdHIgPSAiLUwgJXMiICUgc2VsZi5sYWJlbAorCisgICAgICAgIG1rZnNfY21kID0gIm1rZnMuJXMgLUYgJXMgJXMgJXMgLWQgJXMiICUgXAorICAgICAgICAgICAgKHNlbGYuZnN0eXBlLCBleHRyYV9pbWFnZWNtZCwgcm9vdGZzLCBsYWJlbF9zdHIsIHJvb3Rmc19kaXIpCisgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChwc2V1ZG8gKyBta2ZzX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICBkZWYgcHJlcGFyZV9yb290ZnNfYnRyZnMoc2VsZiwgcm9vdGZzLCBvZV9idWlsZGRpciwgcm9vdGZzX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QsIHBzZXVkbyk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlIGNvbnRlbnQgZm9yIGEgYnRyZnMgcm9vdGZzIHBhcnRpdGlvbi4KKworICAgICAgICBDdXJyZW50bHkgaGFuZGxlcyBleHQyLzMvNCBhbmQgYnRyZnMuCisgICAgICAgICIiIgorICAgICAgICBkdV9jbWQgPSAiZHUgLWtzICVzIiAlIHJvb3Rmc19kaXIKKyAgICAgICAgb3V0ID0gZXhlY19jbWQoZHVfY21kKQorICAgICAgICBhY3R1YWxfcm9vdGZzX3NpemUgPSBpbnQob3V0LnNwbGl0KClbMF0pCisKKyAgICAgICAgZXh0cmFfYmxvY2tzID0gc2VsZi5nZXRfZXh0cmFfYmxvY2tfY291bnQoYWN0dWFsX3Jvb3Rmc19zaXplKQorICAgICAgICBpZiBleHRyYV9ibG9ja3MgPCBzZWxmLmV4dHJhX3NwYWNlOgorICAgICAgICAgICAgZXh0cmFfYmxvY2tzID0gc2VsZi5leHRyYV9zcGFjZQorCisgICAgICAgIHJvb3Rmc19zaXplID0gYWN0dWFsX3Jvb3Rmc19zaXplICsgZXh0cmFfYmxvY2tzCisgICAgICAgIHJvb3Rmc19zaXplICo9IHNlbGYub3ZlcmhlYWRfZmFjdG9yCisKKyAgICAgICAgbXNnZXIuZGVidWcoIkFkZGVkICVkIGV4dHJhIGJsb2NrcyB0byAlcyB0byBnZXQgdG8gJWQgdG90YWwgYmxvY2tzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgKGV4dHJhX2Jsb2Nrcywgc2VsZi5tb3VudHBvaW50LCByb290ZnNfc2l6ZSkpCisKKyAgICAgICAgZGRfY21kID0gImRkIGlmPS9kZXYvemVybyBvZj0lcyBicz0xMDI0IHNlZWs9JWQgY291bnQ9MCBicz0xayIgJSBcCisgICAgICAgICAgICAocm9vdGZzLCByb290ZnNfc2l6ZSkKKyAgICAgICAgZXhlY19jbWQoZGRfY21kKQorCisgICAgICAgIGxhYmVsX3N0ciA9ICIiCisgICAgICAgIGlmIHNlbGYubGFiZWw6CisgICAgICAgICAgICBsYWJlbF9zdHIgPSAiLUwgJXMiICUgc2VsZi5sYWJlbAorCisgICAgICAgIG1rZnNfY21kID0gIm1rZnMuJXMgLWIgJWQgLXIgJXMgJXMgJXMiICUgXAorICAgICAgICAgICAgKHNlbGYuZnN0eXBlLCByb290ZnNfc2l6ZSAqIDEwMjQsIHJvb3Rmc19kaXIsIGxhYmVsX3N0ciwgcm9vdGZzKQorICAgICAgICBleGVjX25hdGl2ZV9jbWQocHNldWRvICsgbWtmc19jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgZGVmIHByZXBhcmVfcm9vdGZzX3ZmYXQoc2VsZiwgcm9vdGZzLCBvZV9idWlsZGRpciwgcm9vdGZzX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCwgcHNldWRvKToKKyAgICAgICAgIiIiCisgICAgICAgIFByZXBhcmUgY29udGVudCBmb3IgYSB2ZmF0IHJvb3RmcyBwYXJ0aXRpb24uCisgICAgICAgICIiIgorICAgICAgICBkdV9jbWQgPSAiZHUgLWJrcyAlcyIgJSByb290ZnNfZGlyCisgICAgICAgIG91dCA9IGV4ZWNfY21kKGR1X2NtZCkKKyAgICAgICAgYmxvY2tzID0gaW50KG91dC5zcGxpdCgpWzBdKQorCisgICAgICAgIGV4dHJhX2Jsb2NrcyA9IHNlbGYuZ2V0X2V4dHJhX2Jsb2NrX2NvdW50KGJsb2NrcykKKyAgICAgICAgaWYgZXh0cmFfYmxvY2tzIDwgc2VsZi5leHRyYV9zcGFjZToKKyAgICAgICAgICAgIGV4dHJhX2Jsb2NrcyA9IHNlbGYuZXh0cmFfc3BhY2UKKworICAgICAgICBibG9ja3MgKz0gZXh0cmFfYmxvY2tzCisKKyAgICAgICAgbXNnZXIuZGVidWcoIkFkZGVkICVkIGV4dHJhIGJsb2NrcyB0byAlcyB0byBnZXQgdG8gJWQgdG90YWwgYmxvY2tzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgKGV4dHJhX2Jsb2Nrcywgc2VsZi5tb3VudHBvaW50LCBibG9ja3MpKQorCisgICAgICAgICMgRW5zdXJlIHRvdGFsIHNlY3RvcnMgaXMgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIHNlY3RvcnMgcGVyCisgICAgICAgICMgdHJhY2sgb3IgbWNvcHkgd2lsbCBjb21wbGFpbi4gU2VjdG9ycyBhcmUgNTEyIGJ5dGVzLCBhbmQgd2UKKyAgICAgICAgIyBnZW5lcmF0ZSBpbWFnZXMgd2l0aCAzMiBzZWN0b3JzIHBlciB0cmFjay4gVGhpcyBjYWxjdWxhdGlvbgorICAgICAgICAjIGlzIGRvbmUgaW4gYmxvY2tzLCB0aHVzIHRoZSBtb2QgYnkgMTYgaW5zdGVhZCBvZiAzMi4gQXBwbHkKKyAgICAgICAgIyBzZWN0b3IgY291bnQgZml4IG9ubHkgd2hlbiBuZWVkZWQuCisgICAgICAgIGlmIGJsb2NrcyAlIDE2ICE9IDA6CisgICAgICAgICAgICBibG9ja3MgKz0gKDE2IC0gKGJsb2NrcyAlIDE2KSkKKworICAgICAgICBsYWJlbF9zdHIgPSAiLW4gYm9vdCIKKyAgICAgICAgaWYgc2VsZi5sYWJlbDoKKyAgICAgICAgICAgIGxhYmVsX3N0ciA9ICItbiAlcyIgJSBzZWxmLmxhYmVsCisKKyAgICAgICAgZG9zZnNfY21kID0gIm1rZG9zZnMgJXMgLVMgNTEyIC1DICVzICVkIiAlIChsYWJlbF9zdHIsIHJvb3RmcywgYmxvY2tzKQorICAgICAgICBleGVjX25hdGl2ZV9jbWQoZG9zZnNfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgICAgICBtY29weV9jbWQgPSAibWNvcHkgLWkgJXMgLXMgJXMvKiA6Oi8iICUgKHJvb3Rmcywgcm9vdGZzX2RpcikKKyAgICAgICAgZXhlY19uYXRpdmVfY21kKG1jb3B5X2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgY2htb2RfY21kID0gImNobW9kIDY0NCAlcyIgJSByb290ZnMKKyAgICAgICAgZXhlY19jbWQoY2htb2RfY21kKQorCisgICAgZGVmIHByZXBhcmVfcm9vdGZzX3NxdWFzaGZzKHNlbGYsIHJvb3Rmcywgb2VfYnVpbGRkaXIsIHJvb3Rmc19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290LCBwc2V1ZG8pOgorICAgICAgICAiIiIKKyAgICAgICAgUHJlcGFyZSBjb250ZW50IGZvciBhIHNxdWFzaGZzIHJvb3RmcyBwYXJ0aXRpb24uCisgICAgICAgICIiIgorICAgICAgICBzcXVhc2hmc19jbWQgPSAibWtzcXVhc2hmcyAlcyAlcyAtbm9hcHBlbmQiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAocm9vdGZzX2Rpciwgcm9vdGZzKQorICAgICAgICBleGVjX25hdGl2ZV9jbWQocHNldWRvICsgc3F1YXNoZnNfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgIGRlZiBwcmVwYXJlX2VtcHR5X3BhcnRpdGlvbl9leHQoc2VsZiwgcm9vdGZzLCBvZV9idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIFByZXBhcmUgYW4gZW1wdHkgZXh0Mi8zLzQgcGFydGl0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgZGRfY21kID0gImRkIGlmPS9kZXYvemVybyBvZj0lcyBicz0xayBzZWVrPSVkIGNvdW50PTAiICUgXAorICAgICAgICAgICAgKHJvb3Rmcywgc2VsZi5zaXplKQorICAgICAgICBleGVjX2NtZChkZF9jbWQpCisKKyAgICAgICAgZXh0cmFfaW1hZ2VjbWQgPSAiLWkgODE5MiIKKworICAgICAgICBsYWJlbF9zdHIgPSAiIgorICAgICAgICBpZiBzZWxmLmxhYmVsOgorICAgICAgICAgICAgbGFiZWxfc3RyID0gIi1MICVzIiAlIHNlbGYubGFiZWwKKworICAgICAgICBta2ZzX2NtZCA9ICJta2ZzLiVzIC1GICVzICVzICVzIiAlIFwKKyAgICAgICAgICAgIChzZWxmLmZzdHlwZSwgZXh0cmFfaW1hZ2VjbWQsIGxhYmVsX3N0ciwgcm9vdGZzKQorICAgICAgICBleGVjX25hdGl2ZV9jbWQobWtmc19jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgZGVmIHByZXBhcmVfZW1wdHlfcGFydGl0aW9uX2J0cmZzKHNlbGYsIHJvb3Rmcywgb2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIFByZXBhcmUgYW4gZW1wdHkgYnRyZnMgcGFydGl0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgZGRfY21kID0gImRkIGlmPS9kZXYvemVybyBvZj0lcyBicz0xayBzZWVrPSVkIGNvdW50PTAiICUgXAorICAgICAgICAgICAgKHJvb3Rmcywgc2VsZi5zaXplKQorICAgICAgICBleGVjX2NtZChkZF9jbWQpCisKKyAgICAgICAgbGFiZWxfc3RyID0gIiIKKyAgICAgICAgaWYgc2VsZi5sYWJlbDoKKyAgICAgICAgICAgIGxhYmVsX3N0ciA9ICItTCAlcyIgJSBzZWxmLmxhYmVsCisKKyAgICAgICAgbWtmc19jbWQgPSAibWtmcy4lcyAtYiAlZCAlcyAlcyIgJSBcCisgICAgICAgICAgICAoc2VsZi5mc3R5cGUsIHNlbGYuc2l6ZSAqIDEwMjQsIGxhYmVsX3N0ciwgcm9vdGZzKQorICAgICAgICBleGVjX25hdGl2ZV9jbWQobWtmc19jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgZGVmIHByZXBhcmVfZW1wdHlfcGFydGl0aW9uX3ZmYXQoc2VsZiwgcm9vdGZzLCBvZV9idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlIGFuIGVtcHR5IHZmYXQgcGFydGl0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgYmxvY2tzID0gc2VsZi5zaXplCisKKyAgICAgICAgbGFiZWxfc3RyID0gIi1uIGJvb3QiCisgICAgICAgIGlmIHNlbGYubGFiZWw6CisgICAgICAgICAgICBsYWJlbF9zdHIgPSAiLW4gJXMiICUgc2VsZi5sYWJlbAorCisgICAgICAgIGRvc2ZzX2NtZCA9ICJta2Rvc2ZzICVzIC1TIDUxMiAtQyAlcyAlZCIgJSAobGFiZWxfc3RyLCByb290ZnMsIGJsb2NrcykKKyAgICAgICAgZXhlY19uYXRpdmVfY21kKGRvc2ZzX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgY2htb2RfY21kID0gImNobW9kIDY0NCAlcyIgJSByb290ZnMKKyAgICAgICAgZXhlY19jbWQoY2htb2RfY21kKQorCisgICAgZGVmIHByZXBhcmVfZW1wdHlfcGFydGl0aW9uX3NxdWFzaGZzKHNlbGYsIGNyX3dvcmtkaXIsIG9lX2J1aWxkZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlIGFuIGVtcHR5IHNxdWFzaGZzIHBhcnRpdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIG1zZ2VyLndhcm5pbmcoIkNyZWF0aW5nIG9mIGFuIGVtcHR5IHNxdWFzaGZzICVzIHBhcnRpdGlvbiB3YXMgYXR0ZW1wdGVkLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAiUHJvY2VlZGluZyBhcyByZXF1ZXN0ZWQuIiAlIHNlbGYubW91bnRwb2ludCkKKworICAgICAgICBwYXRoID0gIiVzL2ZzXyVzLiVzIiAlIChjcl93b3JrZGlyLCBzZWxmLmxhYmVsLCBzZWxmLmZzdHlwZSkKKyAgICAgICAgb3MucGF0aC5pc2ZpbGUocGF0aCkgYW5kIG9zLnJlbW92ZShwYXRoKQorCisgICAgICAgICMgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGNyZWF0ZSBhIHNxdWFzaGZzIHdpdGhvdXQgc291cmNlIGRhdGEsCisgICAgICAgICMgdGh1cyBwcmVwYXJlIGFuIGVtcHR5IHRlbXAgZGlyIHRoYXQgaXMgdXNlZCBhcyBzb3VyY2UKKyAgICAgICAgdG1wZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCisKKyAgICAgICAgc3F1YXNoZnNfY21kID0gIm1rc3F1YXNoZnMgJXMgJXMgLW5vYXBwZW5kIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgKHRtcGRpciwgcGF0aCkKKyAgICAgICAgZXhlY19uYXRpdmVfY21kKHNxdWFzaGZzX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgb3Mucm1kaXIodG1wZGlyKQorCisgICAgICAgICMgZ2V0IHRoZSByb290ZnMgc2l6ZSBpbiB0aGUgcmlnaHQgdW5pdHMgZm9yIGtpY2tzdGFydCAoa0IpCisgICAgICAgIGR1X2NtZCA9ICJkdSAtTGJrcyAlcyIgJSBwYXRoCisgICAgICAgIG91dCA9IGV4ZWNfY21kKGR1X2NtZCkKKyAgICAgICAgZnNfc2l6ZSA9IG91dC5zcGxpdCgpWzBdCisKKyAgICAgICAgc2VsZi5zaXplID0gZnNfc2l6ZQorCisgICAgZGVmIHByZXBhcmVfc3dhcF9wYXJ0aXRpb24oc2VsZiwgY3Jfd29ya2Rpciwgb2VfYnVpbGRkaXIsIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIFByZXBhcmUgYSBzd2FwIHBhcnRpdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHBhdGggPSAiJXMvZnMuJXMiICUgKGNyX3dvcmtkaXIsIHNlbGYuZnN0eXBlKQorCisgICAgICAgIGRkX2NtZCA9ICJkZCBpZj0vZGV2L3plcm8gb2Y9JXMgYnM9MWsgc2Vlaz0lZCBjb3VudD0wIiAlIFwKKyAgICAgICAgICAgIChwYXRoLCBzZWxmLnNpemUpCisgICAgICAgIGV4ZWNfY21kKGRkX2NtZCkKKworICAgICAgICBpbXBvcnQgdXVpZAorICAgICAgICBsYWJlbF9zdHIgPSAiIgorICAgICAgICBpZiBzZWxmLmxhYmVsOgorICAgICAgICAgICAgbGFiZWxfc3RyID0gIi1MICVzIiAlIHNlbGYubGFiZWwKKyAgICAgICAgbWtzd2FwX2NtZCA9ICJta3N3YXAgJXMgLVUgJXMgJXMiICUgKGxhYmVsX3N0ciwgc3RyKHV1aWQudXVpZDEoKSksIHBhdGgpCisgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChta3N3YXBfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworCitjbGFzcyBXaWNfUGFydGl0aW9uKEZDNF9QYXJ0aXRpb24pOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEZDNF9QYXJ0aXRpb24ucmVtb3ZlZEtleXdvcmRzCisgICAgcmVtb3ZlZEF0dHJzID0gRkM0X1BhcnRpdGlvbi5yZW1vdmVkQXR0cnMKKworICAgIGRlZiBfZ2V0UGFyc2VyKHNlbGYpOgorICAgICAgICBkZWYgb3ZlcmhlYWRfY2Iob3B0aW9uLCBvcHRfc3RyLCB2YWx1ZSwgcGFyc2VyKToKKyAgICAgICAgICAgIGlmIHZhbHVlIDwgMToKKyAgICAgICAgICAgICAgICByYWlzZSBPcHRpb25WYWx1ZUVycm9yKCJPcHRpb24gJXM6IGludmFsaWQgdmFsdWU6ICVyIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb24sIHZhbHVlKSkKKyAgICAgICAgICAgIHNldGF0dHIocGFyc2VyLnZhbHVlcywgb3B0aW9uLmRlc3QsIHZhbHVlKQorCisgICAgICAgIHBhcnNlciA9IEZDNF9QYXJ0aXRpb24uX2dldFBhcnNlcihzZWxmKQorCisgICAgICAgICMgVGhlIGFsaWdubWVudCB2YWx1ZSBpcyBnaXZlbiBpbiBrQnl0ZXMuIGUuZy4sIHZhbHVlIDggbWVhbnMgdGhhdAorICAgICAgICAjIHRoZSBwYXJ0aXRpb24gaXMgYWxpZ25lZCB0byBzdGFydCBmcm9tIDgwOTYgYnl0ZSBib3VuZGFyeS4KKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tYWxpZ24iLCB0eXBlPSJpbnQiLCBhY3Rpb249InN0b3JlIiwgZGVzdD0iYWxpZ24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUpCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLWV4dG9wdGlvbnMiLCB0eXBlPSJzdHJpbmciLCBhY3Rpb249InN0b3JlIiwgZGVzdD0iZXh0b3B0cyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSkKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tcGFydC10eXBlIiwgdHlwZT0ic3RyaW5nIiwgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9InBhcnRfdHlwZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSkKKyAgICAgICAgIyB1c2Ugc3BlY2lmaWVkIHNvdXJjZSBmaWxlIHRvIGZpbGwgdGhlIHBhcnRpdGlvbgorICAgICAgICAjIGFuZCBjYWxjdWxhdGUgcGFydGl0aW9uIHNpemUKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tc291cmNlIiwgdHlwZT0ic3RyaW5nIiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9InNvdXJjZSIsIGRlZmF1bHQ9Tm9uZSkKKyAgICAgICAgIyBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwYXJhbT12YWx1ZSBwYWlycworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1zb3VyY2VwYXJhbXMiLCB0eXBlPSJzdHJpbmciLCBhY3Rpb249InN0b3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0ic291cmNlcGFyYW1zIiwgZGVmYXVsdD1Ob25lKQorICAgICAgICAjIHVzZSBzcGVjaWZpZWQgcm9vdGZzIHBhdGggdG8gZmlsbCB0aGUgcGFydGl0aW9uCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLXJvb3Rmcy1kaXIiLCB0eXBlPSJzdHJpbmciLCBhY3Rpb249InN0b3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0icm9vdGZzIiwgZGVmYXVsdD1Ob25lKQorICAgICAgICAjIHdldGhlciB0byBhZGQgdGhlIHBhcnRpdGlvbiBpbiB0aGUgcGFydGl0aW9uIHRhYmxlCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLW5vLXRhYmxlIiwgZGVzdD0ibm9fdGFibGUiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlKQorICAgICAgICAjIGV4dHJhIHNwYWNlIGJleW9uZCB0aGUgcGFydGl0aW9uIHNpemUKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tZXh0cmEtc3BhY2UiLCBkZXN0PSJleHRyYV9zcGFjZSIsIGFjdGlvbj0ic3RvcmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJzaXplIiwgbmFyZ3M9MSwgZGVmYXVsdD0iMTBNIikKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tb3ZlcmhlYWQtZmFjdG9yIiwgZGVzdD0ib3ZlcmhlYWRfZmFjdG9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJjYWxsYmFjayIsIGNhbGxiYWNrPW92ZXJoZWFkX2NiLCB0eXBlPSJmbG9hdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5hcmdzPTEsIGRlZmF1bHQ9MS4zKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLS11c2UtdXVpZCIsIGRlc3Q9InVzZV91dWlkIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSkKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tdXVpZCIpCisKKyAgICAgICAgcmV0dXJuIHBhcnNlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMva2lja3N0YXJ0L2N1c3RvbV9jb21tYW5kcy93aWNib290LnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMva2lja3N0YXJ0L2N1c3RvbV9jb21tYW5kcy93aWNib290LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZTE4NTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9raWNrc3RhcnQvY3VzdG9tX2NvbW1hbmRzL3dpY2Jvb3QucHkKQEAgLTAsMCArMSw2MCBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHRoZSBPcGVuRW1iZWRkZWQgYm9vdGxvYWRlciBvYmplY3QgZGVmaW5pdGlvbnMuCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gbGludXguaW50ZWwuY29tPgorIworZnJvbSBweWtpY2tzdGFydC5jb21tYW5kcy5ib290bG9hZGVyIGltcG9ydCBGOF9Cb290bG9hZGVyCisKK2NsYXNzIFdpY19Cb290bG9hZGVyKEY4X0Jvb3Rsb2FkZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3cml0ZVByaW9yaXR5PTEwLCBhcHBlbmRMaW5lPSIiLCBkcml2ZW9yZGVyPU5vbmUsCisgICAgICAgICAgICAgICAgIGZvcmNlTEJBPUZhbHNlLCBsb2NhdGlvbj0iIiwgbWQ1cGFzcz0iIiwgcGFzc3dvcmQ9IiIsCisgICAgICAgICAgICAgICAgIHVwZ3JhZGU9RmFsc2UsIG1lbnVzPSIiKToKKyAgICAgICAgRjhfQm9vdGxvYWRlci5fX2luaXRfXyhzZWxmLCB3cml0ZVByaW9yaXR5LCBhcHBlbmRMaW5lLCBkcml2ZW9yZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlTEJBLCBsb2NhdGlvbiwgbWQ1cGFzcywgcGFzc3dvcmQsIHVwZ3JhZGUpCisKKyAgICAgICAgc2VsZi5tZW51cyA9ICIiCisgICAgICAgIHNlbGYucHRhYmxlID0gIm1zZG9zIgorICAgICAgICBzZWxmLnNvdXJjZSA9ICIiCisKKyAgICBkZWYgX2dldEFyZ3NBc1N0cihzZWxmKToKKyAgICAgICAgcmV0dmFsID0gRjhfQm9vdGxvYWRlci5fZ2V0QXJnc0FzU3RyKHNlbGYpCisKKyAgICAgICAgaWYgc2VsZi5tZW51cyA9PSAiIjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tbWVudXM9JXMiICUoc2VsZi5tZW51cywpCisgICAgICAgIGlmIHNlbGYucHRhYmxlOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1wdGFibGU9XCIlc1wiIiAlKHNlbGYucHRhYmxlLCkKKyAgICAgICAgaWYgc2VsZi5zb3VyY2U6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLXNvdXJjZT0lcyIgJSBzZWxmLnNvdXJjZQorCisgICAgICAgIHJldHVybiByZXR2YWwKKworICAgIGRlZiBfZ2V0UGFyc2VyKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBGOF9Cb290bG9hZGVyLl9nZXRQYXJzZXIoc2VsZikKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tbWVudXMiLCBkZXN0PSJtZW51cyIpCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLXB0YWJsZSIsIGRlc3Q9InB0YWJsZSIsIGNob2ljZXM9KCJtc2RvcyIsICJncHQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0ibXNkb3MiKQorICAgICAgICAjIHVzZSBzcGVjaWZpZWQgc291cmNlIHBsdWdpbiB0byBpbXBsZW1lbnQgYm9vdGxvYWRlci1zcGVjaWZpYyBtZXRob2RzCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLXNvdXJjZSIsIHR5cGU9InN0cmluZyIsIGFjdGlvbj0ic3RvcmUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9InNvdXJjZSIsIGRlZmF1bHQ9Tm9uZSkKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9tc2dlci5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL21zZ2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3Mzc1NTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9tc2dlci5weQpAQCAtMCwwICsxLDMwOSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uIC10dAorIyB2aW06IGFpIHRzPTQgc3RzPTQgZXQgc3c9NAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTAsIDIwMTEgSW50ZWwsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyMgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisjIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHJlCitpbXBvcnQgdGltZQorCitfX0FMTF9fID0gWydzZXRfbW9kZScsCisgICAgICAgICAgICdnZXRfbG9nbGV2ZWwnLAorICAgICAgICAgICAnc2V0X2xvZ2xldmVsJywKKyAgICAgICAgICAgJ3NldF9sb2dmaWxlJywKKyAgICAgICAgICAgJ3JhdycsCisgICAgICAgICAgICdkZWJ1ZycsCisgICAgICAgICAgICd2ZXJib3NlJywKKyAgICAgICAgICAgJ2luZm8nLAorICAgICAgICAgICAnd2FybmluZycsCisgICAgICAgICAgICdlcnJvcicsCisgICAgICAgICAgICdhc2snLAorICAgICAgICAgICAncGF1c2UnLAorICAgICAgICAgIF0KKworIyBDT0xPUnMgaW4gQU5TSQorSU5GT19DT0xPUiA9IDMyICMgZ3JlZW4KK1dBUk5fQ09MT1IgPSAzMyAjIHllbGxvdworRVJSX0NPTE9SID0gMzEgIyByZWQKK0FTS19DT0xPUiA9IDM0ICMgYmx1ZQorTk9fQ09MT1IgPSAwCisKK1BSRUZJWF9SRSA9IHJlLmNvbXBpbGUoJ148KC4qPyk+XHMqKC4qKScsIHJlLlMpCisKK0lOVEVSQUNUSVZFID0gVHJ1ZQorCitMT0dfTEVWRUwgPSAxCitMT0dfTEVWRUxTID0geworICAgICdxdWlldCc6IDAsCisgICAgJ25vcm1hbCc6IDEsCisgICAgJ3ZlcmJvc2UnOiAyLAorICAgICdkZWJ1Zyc6IDMsCisgICAgJ25ldmVyJzogNCwKK30KKworTE9HX0ZJTEVfRlAgPSBOb25lCitMT0dfQ09OVEVOVCA9ICcnCitDQVRDSEVSUl9CVUZGSUxFX0ZEID0gLTEKK0NBVENIRVJSX0JVRkZJTEVfUEFUSCA9IE5vbmUKK0NBVENIRVJSX1NBVkVEXzIgPSAtMQorCitkZWYgX2dlbmVyYWxfcHJpbnQoaGVhZCwgY29sb3IsIG1zZz1Ob25lLCBzdHJlYW09Tm9uZSwgbGV2ZWw9J25vcm1hbCcpOgorICAgIGdsb2JhbCBMT0dfQ09OVEVOVAorICAgIGlmIG5vdCBzdHJlYW06CisgICAgICAgIHN0cmVhbSA9IHN5cy5zdGRvdXQKKworICAgIGlmIExPR19MRVZFTFNbbGV2ZWxdID4gTE9HX0xFVkVMOgorICAgICAgICAjIHNraXAKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIGVuY29kZSByYXcgJ3VuaWNvZGUnIHN0ciB0byB1dGY4IGVuY29kZWQgc3RyCisgICAgaWYgbXNnIGFuZCBpc2luc3RhbmNlKG1zZywgdW5pY29kZSk6CisgICAgICAgIG1zZyA9IG1zZy5lbmNvZGUoJ3V0Zi04JywgJ2lnbm9yZScpCisKKyAgICBlcnJvcm1zZyA9ICcnCisgICAgaWYgQ0FUQ0hFUlJfQlVGRklMRV9GRCA+IDA6CisgICAgICAgIHNpemUgPSBvcy5sc2VlayhDQVRDSEVSUl9CVUZGSUxFX0ZELCAwLCBvcy5TRUVLX0VORCkKKyAgICAgICAgb3MubHNlZWsoQ0FUQ0hFUlJfQlVGRklMRV9GRCwgMCwgb3MuU0VFS19TRVQpCisgICAgICAgIGVycm9ybXNnID0gb3MucmVhZChDQVRDSEVSUl9CVUZGSUxFX0ZELCBzaXplKQorICAgICAgICBvcy5mdHJ1bmNhdGUoQ0FUQ0hFUlJfQlVGRklMRV9GRCwgMCkKKworICAgICMgYXBwZW5kIGVycm9yIG1zZyB0byBMT0cKKyAgICBpZiBlcnJvcm1zZzoKKyAgICAgICAgTE9HX0NPTlRFTlQgKz0gZXJyb3Jtc2cKKworICAgICMgYXBwZW5kIG5vcm1hbCBtc2cgdG8gTE9HCisgICAgc2F2ZV9tc2cgPSBtc2cuc3RyaXAoKSBpZiBtc2cgZWxzZSBOb25lCisgICAgaWYgc2F2ZV9tc2c6CisgICAgICAgIHRpbWVzdHIgPSB0aW1lLnN0cmZ0aW1lKCJbJW0vJWQgJUg6JU06JVMgJVpdICIsIHRpbWUubG9jYWx0aW1lKCkpCisgICAgICAgIExPR19DT05URU5UICs9IHRpbWVzdHIgKyBzYXZlX21zZyArICdcbicKKworICAgIGlmIGVycm9ybXNnOgorICAgICAgICBfY29sb3JfcHJpbnQoJycsIE5PX0NPTE9SLCBlcnJvcm1zZywgc3RyZWFtLCBsZXZlbCkKKworICAgIF9jb2xvcl9wcmludChoZWFkLCBjb2xvciwgbXNnLCBzdHJlYW0sIGxldmVsKQorCitkZWYgX2NvbG9yX3ByaW50KGhlYWQsIGNvbG9yLCBtc2csIHN0cmVhbSwgbGV2ZWwpOgorICAgIGNvbG9yZWQgPSBUcnVlCisgICAgaWYgY29sb3IgPT0gTk9fQ09MT1Igb3IgXAorICAgICAgIG5vdCBzdHJlYW0uaXNhdHR5KCkgb3IgXAorICAgICAgIG9zLmdldGVudignQU5TSV9DT0xPUlNfRElTQUJMRUQnKSBpcyBub3QgTm9uZToKKyAgICAgICAgY29sb3JlZCA9IEZhbHNlCisKKyAgICBpZiBoZWFkLnN0YXJ0c3dpdGgoJ1xyJyk6CisgICAgICAgICMgbmVlZCBub3QgXG4gYXQgbGFzdAorICAgICAgICBuZXdsaW5lID0gRmFsc2UKKyAgICBlbHNlOgorICAgICAgICBuZXdsaW5lID0gVHJ1ZQorCisgICAgaWYgY29sb3JlZDoKKyAgICAgICAgaGVhZCA9ICdcMDMzWyVkbSVzOlwwMzNbMG0gJyAlKGNvbG9yLCBoZWFkKQorICAgICAgICBpZiBub3QgbmV3bGluZToKKyAgICAgICAgICAgICMgRVNDIGNtZCB0byBjbGVhciBsaW5lCisgICAgICAgICAgICBoZWFkID0gJ1wwMzNbMksnICsgaGVhZAorICAgIGVsc2U6CisgICAgICAgIGlmIGhlYWQ6CisgICAgICAgICAgICBoZWFkICs9ICc6ICcKKyAgICAgICAgICAgIGlmIGhlYWQuc3RhcnRzd2l0aCgnXHInKToKKyAgICAgICAgICAgICAgICBoZWFkID0gaGVhZC5sc3RyaXAoKQorICAgICAgICAgICAgICAgIG5ld2xpbmUgPSBUcnVlCisKKyAgICBpZiBtc2cgaXMgbm90IE5vbmU6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobXNnLCB1bmljb2RlKToKKyAgICAgICAgICAgIG1zZyA9IG1zZy5lbmNvZGUoJ3V0ZjgnLCAnaWdub3JlJykKKworICAgICAgICBzdHJlYW0ud3JpdGUoJyVzJXMnICUgKGhlYWQsIG1zZykpCisgICAgICAgIGlmIG5ld2xpbmU6CisgICAgICAgICAgICBzdHJlYW0ud3JpdGUoJ1xuJykKKworICAgIHN0cmVhbS5mbHVzaCgpCisKK2RlZiBfY29sb3JfcGVycm9yKGhlYWQsIGNvbG9yLCBtc2csIGxldmVsPSdub3JtYWwnKToKKyAgICBpZiBDQVRDSEVSUl9CVUZGSUxFX0ZEID4gMDoKKyAgICAgICAgX2dlbmVyYWxfcHJpbnQoaGVhZCwgY29sb3IsIG1zZywgc3lzLnN0ZG91dCwgbGV2ZWwpCisgICAgZWxzZToKKyAgICAgICAgX2dlbmVyYWxfcHJpbnQoaGVhZCwgY29sb3IsIG1zZywgc3lzLnN0ZGVyciwgbGV2ZWwpCisKK2RlZiBfc3BsaXRfbXNnKGhlYWQsIG1zZyk6CisgICAgaWYgaXNpbnN0YW5jZShtc2csIGxpc3QpOgorICAgICAgICBtc2cgPSAnXG4nLmpvaW4obWFwKHN0ciwgbXNnKSkKKworICAgIGlmIG1zZy5zdGFydHN3aXRoKCdcbicpOgorICAgICAgICAjIG1lYW5zIHByaW50IFxuIGF0IGZpcnN0CisgICAgICAgIG1zZyA9IG1zZy5sc3RyaXAoKQorICAgICAgICBoZWFkID0gJ1xuJyArIGhlYWQKKworICAgIGVsaWYgbXNnLnN0YXJ0c3dpdGgoJ1xyJyk6CisgICAgICAgICMgbWVhbnMgcHJpbnQgXHIgYXQgZmlyc3QKKyAgICAgICAgbXNnID0gbXNnLmxzdHJpcCgpCisgICAgICAgIGhlYWQgPSAnXHInICsgaGVhZAorCisgICAgbWF0Y2ggPSBQUkVGSVhfUkUubWF0Y2gobXNnKQorICAgIGlmIG1hdGNoOgorICAgICAgICBoZWFkICs9ICcgPCVzPicgJSBtYXRjaC5ncm91cCgxKQorICAgICAgICBtc2cgPSBtYXRjaC5ncm91cCgyKQorCisgICAgcmV0dXJuIGhlYWQsIG1zZworCitkZWYgZ2V0X2xvZ2xldmVsKCk6CisgICAgcmV0dXJuIChrIGZvciBrLCB2IGluIExPR19MRVZFTFMuaXRlbXMoKSBpZiB2ID09IExPR19MRVZFTCkubmV4dCgpCisKK2RlZiBzZXRfbG9nbGV2ZWwobGV2ZWwpOgorICAgIGdsb2JhbCBMT0dfTEVWRUwKKyAgICBpZiBsZXZlbCBub3QgaW4gTE9HX0xFVkVMUzoKKyAgICAgICAgIyBubyBlZmZlY3QKKyAgICAgICAgcmV0dXJuCisKKyAgICBMT0dfTEVWRUwgPSBMT0dfTEVWRUxTW2xldmVsXQorCitkZWYgc2V0X2ludGVyYWN0aXZlKG1vZGU9VHJ1ZSk6CisgICAgZ2xvYmFsIElOVEVSQUNUSVZFCisgICAgaWYgbW9kZToKKyAgICAgICAgSU5URVJBQ1RJVkUgPSBUcnVlCisgICAgZWxzZToKKyAgICAgICAgSU5URVJBQ1RJVkUgPSBGYWxzZQorCitkZWYgbG9nKG1zZz0nJyk6CisgICAgIyBsb2cgbXNnIHRvIExPR19DT05URU5UIHRoZW4gc2F2ZSB0byBsb2dmaWxlCisgICAgZ2xvYmFsIExPR19DT05URU5UCisgICAgaWYgbXNnOgorICAgICAgICBMT0dfQ09OVEVOVCArPSBtc2cKKworZGVmIHJhdyhtc2c9JycpOgorICAgIF9nZW5lcmFsX3ByaW50KCcnLCBOT19DT0xPUiwgbXNnKQorCitkZWYgaW5mbyhtc2cpOgorICAgIGhlYWQsIG1zZyA9IF9zcGxpdF9tc2coJ0luZm8nLCBtc2cpCisgICAgX2dlbmVyYWxfcHJpbnQoaGVhZCwgSU5GT19DT0xPUiwgbXNnKQorCitkZWYgdmVyYm9zZShtc2cpOgorICAgIGhlYWQsIG1zZyA9IF9zcGxpdF9tc2coJ1ZlcmJvc2UnLCBtc2cpCisgICAgX2dlbmVyYWxfcHJpbnQoaGVhZCwgSU5GT19DT0xPUiwgbXNnLCBsZXZlbD0ndmVyYm9zZScpCisKK2RlZiB3YXJuaW5nKG1zZyk6CisgICAgaGVhZCwgbXNnID0gX3NwbGl0X21zZygnV2FybmluZycsIG1zZykKKyAgICBfY29sb3JfcGVycm9yKGhlYWQsIFdBUk5fQ09MT1IsIG1zZykKKworZGVmIGRlYnVnKG1zZyk6CisgICAgaGVhZCwgbXNnID0gX3NwbGl0X21zZygnRGVidWcnLCBtc2cpCisgICAgX2NvbG9yX3BlcnJvcihoZWFkLCBFUlJfQ09MT1IsIG1zZywgbGV2ZWw9J2RlYnVnJykKKworZGVmIGVycm9yKG1zZyk6CisgICAgaGVhZCwgbXNnID0gX3NwbGl0X21zZygnRXJyb3InLCBtc2cpCisgICAgX2NvbG9yX3BlcnJvcihoZWFkLCBFUlJfQ09MT1IsIG1zZykKKyAgICBzeXMuZXhpdCgxKQorCitkZWYgYXNrKG1zZywgZGVmYXVsdD1UcnVlKToKKyAgICBfZ2VuZXJhbF9wcmludCgnXHJRJywgQVNLX0NPTE9SLCAnJykKKyAgICB0cnk6CisgICAgICAgIGlmIGRlZmF1bHQ6CisgICAgICAgICAgICBtc2cgKz0gJyhZL24pICcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zZyArPSAnKHkvTikgJworICAgICAgICBpZiBJTlRFUkFDVElWRToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgcmVwbCA9IHJhd19pbnB1dChtc2cpCisgICAgICAgICAgICAgICAgaWYgcmVwbC5sb3dlcigpID09ICd5JzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgICAgICBlbGlmIHJlcGwubG93ZXIoKSA9PSAnbic6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgICAgIGVsaWYgbm90IHJlcGwuc3RyaXAoKToKKyAgICAgICAgICAgICAgICAgICAgIyA8RW50ZXI+CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CisKKyAgICAgICAgICAgICAgICAjIGVsc2UgbG9vcAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBtc2cgKz0gJyBZJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtc2cgKz0gJyBOJworICAgICAgICAgICAgX2dlbmVyYWxfcHJpbnQoJycsIE5PX0NPTE9SLCBtc2cpCisKKyAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CisgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcbicpCisgICAgICAgIHN5cy5leGl0KDIpCisKK2RlZiBjaG9pY2UobXNnLCBjaG9pY2VzLCBkZWZhdWx0PTApOgorICAgIGlmIGRlZmF1bHQgPj0gbGVuKGNob2ljZXMpOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIF9nZW5lcmFsX3ByaW50KCdcclEnLCBBU0tfQ09MT1IsICcnKQorICAgIHRyeToKKyAgICAgICAgbXNnICs9ICIgWyVzXSAiICUgJy8nLmpvaW4oY2hvaWNlcykKKyAgICAgICAgaWYgSU5URVJBQ1RJVkU6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHJlcGwgPSByYXdfaW5wdXQobXNnKQorICAgICAgICAgICAgICAgIGlmIHJlcGwgaW4gY2hvaWNlczoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcGwKKyAgICAgICAgICAgICAgICBlbGlmIG5vdCByZXBsLnN0cmlwKCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaG9pY2VzW2RlZmF1bHRdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtc2cgKz0gY2hvaWNlc1tkZWZhdWx0XQorICAgICAgICAgICAgX2dlbmVyYWxfcHJpbnQoJycsIE5PX0NPTE9SLCBtc2cpCisKKyAgICAgICAgICAgIHJldHVybiBjaG9pY2VzW2RlZmF1bHRdCisgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcbicpCisgICAgICAgIHN5cy5leGl0KDIpCisKK2RlZiBwYXVzZShtc2c9Tm9uZSk6CisgICAgaWYgSU5URVJBQ1RJVkU6CisgICAgICAgIF9nZW5lcmFsX3ByaW50KCdcclEnLCBBU0tfQ09MT1IsICcnKQorICAgICAgICBpZiBtc2cgaXMgTm9uZToKKyAgICAgICAgICAgIG1zZyA9ICdwcmVzcyA8RU5URVI+IHRvIGNvbnRpbnVlIC4uLicKKyAgICAgICAgcmF3X2lucHV0KG1zZykKKworZGVmIHNldF9sb2dmaWxlKGZwYXRoKToKKyAgICBnbG9iYWwgTE9HX0ZJTEVfRlAKKworICAgIGRlZiBfc2F2ZWxvZ2YoKToKKyAgICAgICAgaWYgTE9HX0ZJTEVfRlA6CisgICAgICAgICAgICB3aXRoIG9wZW4oTE9HX0ZJTEVfRlAsICd3JykgYXMgbG9nOgorICAgICAgICAgICAgICAgIGxvZy53cml0ZShMT0dfQ09OVEVOVCkKKworICAgIGlmIExPR19GSUxFX0ZQIGlzIG5vdCBOb25lOgorICAgICAgICB3YXJuaW5nKCdkdXBsaWNhdGUgbG9nIGZpbGUgY29uZmlndXJhdGlvbicpCisKKyAgICBMT0dfRklMRV9GUCA9IGZwYXRoCisKKyAgICBpbXBvcnQgYXRleGl0CisgICAgYXRleGl0LnJlZ2lzdGVyKF9zYXZlbG9nZikKKworZGVmIGVuYWJsZV9sb2dzdGRlcnIoZnBhdGgpOgorICAgIGdsb2JhbCBDQVRDSEVSUl9CVUZGSUxFX0ZECisgICAgZ2xvYmFsIENBVENIRVJSX0JVRkZJTEVfUEFUSAorICAgIGdsb2JhbCBDQVRDSEVSUl9TQVZFRF8yCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhmcGF0aCk6CisgICAgICAgIG9zLnJlbW92ZShmcGF0aCkKKyAgICBDQVRDSEVSUl9CVUZGSUxFX1BBVEggPSBmcGF0aAorICAgIENBVENIRVJSX0JVRkZJTEVfRkQgPSBvcy5vcGVuKENBVENIRVJSX0JVRkZJTEVfUEFUSCwgb3MuT19SRFdSfG9zLk9fQ1JFQVQpCisgICAgQ0FUQ0hFUlJfU0FWRURfMiA9IG9zLmR1cCgyKQorICAgIG9zLmR1cDIoQ0FUQ0hFUlJfQlVGRklMRV9GRCwgMikKKworZGVmIGRpc2FibGVfbG9nc3RkZXJyKCk6CisgICAgZ2xvYmFsIENBVENIRVJSX0JVRkZJTEVfRkQKKyAgICBnbG9iYWwgQ0FUQ0hFUlJfQlVGRklMRV9QQVRICisgICAgZ2xvYmFsIENBVENIRVJSX1NBVkVEXzIKKworICAgIHJhdyhtc2c9Tm9uZSkgIyBmbHVzaCBtZXNzYWdlIGJ1ZmZlciBhbmQgcHJpbnQgaXQuCisgICAgb3MuZHVwMihDQVRDSEVSUl9TQVZFRF8yLCAyKQorICAgIG9zLmNsb3NlKENBVENIRVJSX1NBVkVEXzIpCisgICAgb3MuY2xvc2UoQ0FUQ0hFUlJfQlVGRklMRV9GRCkKKyAgICBvcy51bmxpbmsoQ0FUQ0hFUlJfQlVGRklMRV9QQVRIKQorICAgIENBVENIRVJSX0JVRkZJTEVfRkQgPSAtMQorICAgIENBVENIRVJSX0JVRkZJTEVfUEFUSCA9IE5vbmUKKyAgICBDQVRDSEVSUl9TQVZFRF8yID0gLTEKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbi5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2ZkZmNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2luLnB5CkBAIC0wLDAgKzEsMTUwIEBACisjIS91c3IvYmluL2VudiBweXRob24gLXR0CisjCisjIENvcHlyaWdodCAoYykgMjAxMSBJbnRlbCwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyMgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKworaW1wb3J0IG9zLCBzeXMKKworZnJvbSB3aWMgaW1wb3J0IG1zZ2VyCitmcm9tIHdpYyBpbXBvcnQgcGx1Z2luYmFzZQorZnJvbSB3aWMudXRpbHMgaW1wb3J0IGVycm9ycworZnJvbSB3aWMudXRpbHMub2UubWlzYyBpbXBvcnQgZ2V0X2JpdGJha2VfdmFyCisKK19fQUxMX18gPSBbJ1BsdWdpbk1ncicsICdwbHVnaW5tZ3InXQorCitQTFVHSU5fVFlQRVMgPSBbImltYWdlciIsICJzb3VyY2UiXQorCitQTFVHSU5fRElSID0gIi9saWIvd2ljL3BsdWdpbnMiICMgcmVsYXRpdmUgdG8gc2NyaXB0cworU0NSSVBUU19QTFVHSU5fRElSID0gInNjcmlwdHMiICsgUExVR0lOX0RJUgorCitjbGFzcyBQbHVnaW5NZ3Iob2JqZWN0KToKKyAgICBwbHVnaW5fZGlycyA9IHt9CisKKyAgICAjIG1ha2UgdGhlIG1hbmFnZXIgY2xhc3MgYXMgc2luZ2xldG9uCisgICAgX2luc3RhbmNlID0gTm9uZQorICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgbm90IGNscy5faW5zdGFuY2U6CisgICAgICAgICAgICBjbHMuX2luc3RhbmNlID0gc3VwZXIoUGx1Z2luTWdyLCBjbHMpLl9fbmV3X18oY2xzLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgcmV0dXJuIGNscy5faW5zdGFuY2UKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgd2ljX3BhdGggPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCisgICAgICAgIGVvcyA9IHdpY19wYXRoLmZpbmQoJ3NjcmlwdHMnKSArIGxlbignc2NyaXB0cycpCisgICAgICAgIHNjcmlwdHNfcGF0aCA9IHdpY19wYXRoWzplb3NdCisgICAgICAgIHNlbGYuc2NyaXB0c19wYXRoID0gc2NyaXB0c19wYXRoCisgICAgICAgIHNlbGYucGx1Z2luX2RpciA9IHNjcmlwdHNfcGF0aCArIFBMVUdJTl9ESVIKKyAgICAgICAgc2VsZi5sYXllcnNfcGF0aCA9IE5vbmUKKworICAgIGRlZiBfYnVpbGRfcGx1Z2luX2Rpcl9saXN0KHNlbGYsIHBsdWdpbl9kaXIsIHB0eXBlKToKKyAgICAgICAgaWYgc2VsZi5sYXllcnNfcGF0aCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5sYXllcnNfcGF0aCA9IGdldF9iaXRiYWtlX3ZhcigiQkJMQVlFUlMiKQorICAgICAgICBsYXllcl9kaXJzID0gW10KKworICAgICAgICBpZiBzZWxmLmxheWVyc19wYXRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIGxheWVyX3BhdGggaW4gc2VsZi5sYXllcnNfcGF0aC5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4obGF5ZXJfcGF0aCwgU0NSSVBUU19QTFVHSU5fRElSLCBwdHlwZSkKKyAgICAgICAgICAgICAgICBsYXllcl9kaXJzLmFwcGVuZChwYXRoKQorCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocGx1Z2luX2RpciwgcHR5cGUpCisgICAgICAgIGxheWVyX2RpcnMuYXBwZW5kKHBhdGgpCisKKyAgICAgICAgcmV0dXJuIGxheWVyX2RpcnMKKworICAgIGRlZiBhcHBlbmRfZGlycyhzZWxmLCBkaXJzKToKKyAgICAgICAgZm9yIHBhdGggaW4gZGlyczoKKyAgICAgICAgICAgIHNlbGYuX2FkZF9wbHVnaW5kaXIocGF0aCkKKworICAgICAgICAjIGxvYWQgYWxsIHRoZSBwbHVnaW5zIEFHQUlOCisgICAgICAgIHNlbGYuX2xvYWRfYWxsKCkKKworICAgIGRlZiBfYWRkX3BsdWdpbmRpcihzZWxmLCBwYXRoKToKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmV4cGFuZHVzZXIocGF0aCkpCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIocGF0aCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBwYXRoIG5vdCBpbiBzZWxmLnBsdWdpbl9kaXJzOgorICAgICAgICAgICAgc2VsZi5wbHVnaW5fZGlyc1twYXRoXSA9IEZhbHNlCisgICAgICAgICAgICAjIHRoZSB2YWx1ZSBUcnVlL0ZhbHNlIG1lYW5zICJsb2FkZWQiCisKKyAgICBkZWYgX2xvYWRfYWxsKHNlbGYpOgorICAgICAgICBmb3IgKHBkaXIsIGxvYWRlZCkgaW4gc2VsZi5wbHVnaW5fZGlycy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGxvYWRlZDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgcGRpcikKKyAgICAgICAgICAgIGZvciBtb2QgaW4gW3hbOi0zXSBmb3IgeCBpbiBvcy5saXN0ZGlyKHBkaXIpIGlmIHguZW5kc3dpdGgoIi5weSIpXToKKyAgICAgICAgICAgICAgICBpZiBtb2QgYW5kIG1vZCAhPSAnX19pbml0X18nOgorICAgICAgICAgICAgICAgICAgICBpZiBtb2QgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAjc2VsZi5wbHVnaW5fZGlyc1twZGlyXSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZ2VyLndhcm5pbmcoIk1vZHVsZSAlcyBhbHJlYWR5IGV4aXN0cywgc2tpcCIgJSBtb2QpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHltb2QgPSBfX2ltcG9ydF9fKG1vZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBsdWdpbl9kaXJzW3BkaXJdID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCJQbHVnaW4gbW9kdWxlICVzOiVzIGltcG9ydGVkIlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChtb2QsIHB5bW9kLl9fZmlsZV9fKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciwgZXJyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICdGYWlsZWQgdG8gbG9hZCBwbHVnaW4gJXMvJXM6ICVzJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKG9zLnBhdGguYmFzZW5hbWUocGRpciksIG1vZCwgZXJyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ2VyLndhcm5pbmcobXNnKQorCisgICAgICAgICAgICBkZWwgc3lzLnBhdGhbMF0KKworICAgIGRlZiBnZXRfcGx1Z2lucyhzZWxmLCBwdHlwZSk6CisgICAgICAgICIiIiB0aGUgcmV0dXJuIHZhbHVlIGlzIGRpY3Qgb2YgbmFtZTpjbGFzcyBwYWlycyAiIiIKKworICAgICAgICBpZiBwdHlwZSBub3QgaW4gUExVR0lOX1RZUEVTOgorICAgICAgICAgICAgcmFpc2UgZXJyb3JzLkNyZWF0b3JFcnJvcignJXMgaXMgbm90IHZhbGlkIHBsdWdpbiB0eXBlJyAlIHB0eXBlKQorCisgICAgICAgIHBsdWdpbnNfZGlyID0gc2VsZi5fYnVpbGRfcGx1Z2luX2Rpcl9saXN0KHNlbGYucGx1Z2luX2RpciwgcHR5cGUpCisKKyAgICAgICAgc2VsZi5hcHBlbmRfZGlycyhwbHVnaW5zX2RpcikKKworICAgICAgICByZXR1cm4gcGx1Z2luYmFzZS5nZXRfcGx1Z2lucyhwdHlwZSkKKworICAgIGRlZiBnZXRfc291cmNlX3BsdWdpbnMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gbGlzdCBvZiBhdmFpbGFibGUgc291cmNlIHBsdWdpbnMuCisgICAgICAgICIiIgorICAgICAgICBwbHVnaW5zX2RpciA9IHNlbGYuX2J1aWxkX3BsdWdpbl9kaXJfbGlzdChzZWxmLnBsdWdpbl9kaXIsICdzb3VyY2UnKQorCisgICAgICAgIHNlbGYuYXBwZW5kX2RpcnMocGx1Z2luc19kaXIpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3BsdWdpbnMoJ3NvdXJjZScpCisKKworICAgIGRlZiBnZXRfc291cmNlX3BsdWdpbl9tZXRob2RzKHNlbGYsIHNvdXJjZV9uYW1lLCBtZXRob2RzKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBtZXRob2RzIHBhcmFtIGlzIGEgZGljdCB3aXRoIHRoZSBtZXRob2QgbmFtZXMgdG8gZmluZC4gIE9uCisgICAgICAgIHJldHVybiwgdGhlIGRpY3QgdmFsdWVzIHdpbGwgYmUgZmlsbGVkIGluIHdpdGggcG9pbnRlcnMgdG8gdGhlCisgICAgICAgIGNvcnJlc3BvbmRpbmcgbWV0aG9kcy4gIElmIG9uZSBvciBtb3JlIG1ldGhvZHMgYXJlIG5vdCBmb3VuZCwKKyAgICAgICAgTm9uZSBpcyByZXR1cm5lZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybl9tZXRob2RzID0gTm9uZQorICAgICAgICBmb3IgX3NvdXJjZV9uYW1lLCBrbGFzcyBpbiBzZWxmLmdldF9wbHVnaW5zKCdzb3VyY2UnKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIF9zb3VyY2VfbmFtZSA9PSBzb3VyY2VfbmFtZToKKyAgICAgICAgICAgICAgICBmb3IgX21ldGhvZF9uYW1lIGluIG1ldGhvZHMua2V5cygpOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihrbGFzcywgX21ldGhvZF9uYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZ2VyLndhcm5pbmcoIlVuaW1wbGVtZW50ZWQgJXMgc291cmNlIGludGVyZmFjZSBmb3I6ICVzIlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoX21ldGhvZF9uYW1lLCBfc291cmNlX25hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgICAgICAgICAgZnVuYyA9IGdldGF0dHIoa2xhc3MsIF9tZXRob2RfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kc1tfbWV0aG9kX25hbWVdID0gZnVuYworICAgICAgICAgICAgICAgICAgICByZXR1cm5fbWV0aG9kcyA9IG1ldGhvZHMKKyAgICAgICAgcmV0dXJuIHJldHVybl9tZXRob2RzCisKK3BsdWdpbm1nciA9IFBsdWdpbk1ncigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5iYXNlLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2luYmFzZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZThmZTk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2luYmFzZS5weQpAQCAtMCwwICsxLDEwOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uIC10dAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgSW50ZWwsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyMgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisjIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisKK2Zyb20gd2ljIGltcG9ydCBtc2dlcgorCitjbGFzcyBfUGx1Z2luKG9iamVjdCk6CisgICAgY2xhc3MgX19tZXRhY2xhc3NfXyh0eXBlKToKKyAgICAgICAgZGVmIF9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGF0dHJzKToKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGNscywgJ3BsdWdpbnMnKToKKyAgICAgICAgICAgICAgICBjbHMucGx1Z2lucyA9IHt9CisKKyAgICAgICAgICAgIGVsaWYgJ3dpY19wbHVnaW5fdHlwZScgaW4gYXR0cnM6CisgICAgICAgICAgICAgICAgaWYgYXR0cnNbJ3dpY19wbHVnaW5fdHlwZSddIG5vdCBpbiBjbHMucGx1Z2luczoKKyAgICAgICAgICAgICAgICAgICAgY2xzLnBsdWdpbnNbYXR0cnNbJ3dpY19wbHVnaW5fdHlwZSddXSA9IHt9CisKKyAgICAgICAgICAgIGVsaWYgaGFzYXR0cihjbHMsICd3aWNfcGx1Z2luX3R5cGUnKSBhbmQgJ25hbWUnIGluIGF0dHJzOgorICAgICAgICAgICAgICAgIGNscy5wbHVnaW5zW2Nscy53aWNfcGx1Z2luX3R5cGVdW2F0dHJzWyduYW1lJ11dID0gY2xzCisKKyAgICAgICAgZGVmIHNob3dfcGx1Z2lucyhjbHMpOgorICAgICAgICAgICAgZm9yIGNscyBpbiBjbHMucGx1Z2luc1tjbHMud2ljX3BsdWdpbl90eXBlXToKKyAgICAgICAgICAgICAgICBwcmludCBjbHMKKworICAgICAgICBkZWYgZ2V0X3BsdWdpbnMoY2xzKToKKyAgICAgICAgICAgIHJldHVybiBjbHMucGx1Z2lucworCisKK2NsYXNzIEltYWdlclBsdWdpbihfUGx1Z2luKToKKyAgICB3aWNfcGx1Z2luX3R5cGUgPSAiaW1hZ2VyIgorCisKK2NsYXNzIFNvdXJjZVBsdWdpbihfUGx1Z2luKToKKyAgICB3aWNfcGx1Z2luX3R5cGUgPSAic291cmNlIgorICAgICIiIgorICAgIFRoZSBtZXRob2RzIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGJ5IC0tc291cmNlIHBsdWdpbnMuCisKKyAgICBBbnkgbWV0aG9kcyBub3QgaW1wbGVtZW50ZWQgaW4gYSBzdWJjbGFzcyBpbmhlcml0IHRoZXNlLgorICAgICIiIgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX2luc3RhbGxfZGlzayhjbHMsIGRpc2ssIGRpc2tfbmFtZSwgY3JlYXRvciwgd29ya2Rpciwgb2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICBib290aW1nX2Rpciwga2VybmVsX2RpciwgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIGFmdGVyIGFsbCBwYXJ0aXRpb25zIGhhdmUgYmVlbiBwcmVwYXJlZCBhbmQgYXNzZW1ibGVkIGludG8gYQorICAgICAgICBkaXNrIGltYWdlLiAgVGhpcyBwcm92aWRlcyBhIGhvb2sgdG8gYWxsb3cgZmluYWxpemF0aW9uIG9mIGEKKyAgICAgICAgZGlzayBpbWFnZSBlLmcuIHRvIHdyaXRlIGFuIE1CUiB0byBpdC4KKyAgICAgICAgIiIiCisgICAgICAgIG1zZ2VyLmRlYnVnKCJTb3VyY2VQbHVnaW46IGRvX2luc3RhbGxfZGlzazogZGlzazogJXMiICUgZGlza19uYW1lKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX3N0YWdlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGNyZWF0b3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBTcGVjaWFsIGNvbnRlbnQgc3RhZ2luZyBob29rIGNhbGxlZCBiZWZvcmUgZG9fcHJlcGFyZV9wYXJ0aXRpb24oKSwKKyAgICAgICAgbm9ybWFsbHkgZW1wdHkuCisKKyAgICAgICAgVHlwaWNhbGx5LCBhIHBhcnRpdGlvbiB3aWxsIGp1c3QgdXNlIHRoZSBwYXNzZWQtaW4gcGFyYW1lIGUuZworICAgICAgICBzdHJhaWdodCBib290aW1nX2RpciwgZXRjLCBidXQgaW4gc29tZSBjYXNlcywgdGhpbmdzIG5lZWQgdG8KKyAgICAgICAgYmUgbW9yZSB0YWlsb3JlZCBlLmcuIHRvIHVzZSBhIGRlcGxveSBkaXIgKyAvYm9vdCwgZXRjLiAgVGhpcworICAgICAgICBob29rIGFsbG93cyB0aG9zZSBmaWxlcyB0byBiZSBzdGFnZWQgaW4gYSBjdXN0b21pemVkIGZhc2hpb24uCisgICAgICAgIE5vdCB0aGF0IGdldF9iaXRiYWtlX3ZhcigpIGFsbG93cyB5b3UgdG8gYWNjZXMgbm9uLXN0YW5kYXJkCisgICAgICAgIHZhcmlhYmxlcyB0aGF0IHlvdSBtaWdodCB3YW50IHRvIHVzZSBmb3IgdGhpcy4KKyAgICAgICAgIiIiCisgICAgICAgIG1zZ2VyLmRlYnVnKCJTb3VyY2VQbHVnaW46IGRvX3N0YWdlX3BhcnRpdGlvbjogcGFydDogJXMiICUgcGFydCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19jb25maWd1cmVfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgY3JlYXRvciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIGJlZm9yZSBkb19wcmVwYXJlX3BhcnRpdGlvbigpLCB0eXBpY2FsbHkgdXNlZCB0byBjcmVhdGUKKyAgICAgICAgY3VzdG9tIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIGEgcGFydGl0aW9uLCBmb3IgZXhhbXBsZQorICAgICAgICBzeXNsaW51eCBvciBncnViIGNvbmZpZyBmaWxlcy4KKyAgICAgICAgIiIiCisgICAgICAgIG1zZ2VyLmRlYnVnKCJTb3VyY2VQbHVnaW46IGRvX2NvbmZpZ3VyZV9wYXJ0aXRpb246IHBhcnQ6ICVzIiAlIHBhcnQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fcHJlcGFyZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBjcmVhdG9yLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsIHJvb3Rmc19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCB0byBkbyB0aGUgYWN0dWFsIGNvbnRlbnQgcG9wdWxhdGlvbiBmb3IgYSBwYXJ0aXRpb24gaS5lLiBpdAorICAgICAgICAncHJlcGFyZXMnIHRoZSBwYXJ0aXRpb24gdG8gYmUgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGltYWdlLgorICAgICAgICAiIiIKKyAgICAgICAgbXNnZXIuZGVidWcoIlNvdXJjZVBsdWdpbjogZG9fcHJlcGFyZV9wYXJ0aXRpb246IHBhcnQ6ICVzIiAlIHBhcnQpCisKK2RlZiBnZXRfcGx1Z2lucyh0eXBlbik6CisgICAgcGx1Z2lucyA9IEltYWdlclBsdWdpbi5nZXRfcGx1Z2lucygpCisgICAgaWYgdHlwZW4gaW4gcGx1Z2luczoKKyAgICAgICAgcmV0dXJuIHBsdWdpbnNbdHlwZW5dCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworX19hbGxfXyA9IFsnSW1hZ2VyUGx1Z2luJywgJ1NvdXJjZVBsdWdpbicsICdnZXRfcGx1Z2lucyddCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL2ltYWdlci9kaXJlY3RfcGx1Z2luLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9pbWFnZXIvZGlyZWN0X3BsdWdpbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDNmNDZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9pbWFnZXIvZGlyZWN0X3BsdWdpbi5weQpAQCAtMCwwICsxLDEwMiBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEzLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgaW1wbGVtZW50cyB0aGUgJ2RpcmVjdCcgaW1hZ2VyIHBsdWdpbiBjbGFzcyBmb3IgJ3dpYycKKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBsaW51eC5pbnRlbC5jb20+CisjCisKK2Zyb20gd2ljLnV0aWxzIGltcG9ydCBlcnJvcnMKK2Zyb20gd2ljLmNvbmYgaW1wb3J0IGNvbmZpZ21ncgorCitpbXBvcnQgd2ljLmltYWdlci5kaXJlY3QgYXMgZGlyZWN0Citmcm9tIHdpYy5wbHVnaW5iYXNlIGltcG9ydCBJbWFnZXJQbHVnaW4KKworY2xhc3MgRGlyZWN0UGx1Z2luKEltYWdlclBsdWdpbik6CisgICAgIiIiCisgICAgSW5zdGFsbCBhIHN5c3RlbSBpbnRvIGEgZmlsZSBjb250YWluaW5nIGEgcGFydGl0aW9uZWQgZGlzayBpbWFnZS4KKworICAgIEFuIGltYWdlIGZpbGUgaXMgZm9ybWF0dGVkIHdpdGggYSBwYXJ0aXRpb24gdGFibGUsIGVhY2ggcGFydGl0aW9uCisgICAgY3JlYXRlZCBmcm9tIGEgcm9vdGZzIG9yIG90aGVyIE9wZW5FbWJlZGRlZCBidWlsZCBhcnRpZmFjdCBhbmQgZGQnZWQKKyAgICBpbnRvIHRoZSB2aXJ0dWFsIGRpc2suIFRoZSBkaXNrIGltYWdlIGNhbiBzdWJzZXF1ZW50bHkgYmUgZGQnZWQgb250bworICAgIG1lZGlhIGFuZCB1c2VkIG9uIGFjdHVhbCBoYXJkd2FyZS4KKyAgICAiIiIKKworICAgIG5hbWUgPSAnZGlyZWN0JworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9fcm9vdGZzX2Rpcl90b19kaWN0KGNscywgcm9vdGZzX2RpcnMpOgorICAgICAgICAiIiIKKyAgICAgICAgR2V0cyBhIHN0cmluZyB0aGF0IGNvbnRhaW4gJ2Nvbm5lY3Rpb249ZGlyJyBzcGxpdHRlZCBieQorICAgICAgICBzcGFjZSBhbmQgcmV0dXJuIGEgZGljdAorICAgICAgICAiIiIKKyAgICAgICAga3Jvb3Rmc19kaXIgPSB7fQorICAgICAgICBmb3Igcm9vdGZzX2RpciBpbiByb290ZnNfZGlycy5zcGxpdCgnICcpOgorICAgICAgICAgICAga2V5LCB2YWwgPSByb290ZnNfZGlyLnNwbGl0KCc9JykKKyAgICAgICAgICAgIGtyb290ZnNfZGlyW2tleV0gPSB2YWwKKworICAgICAgICByZXR1cm4ga3Jvb3Rmc19kaXIKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19jcmVhdGUoY2xzLCBvcHRzLCAqYXJncyk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgZGlyZWN0IGltYWdlLCBjYWxsZWQgZnJvbSBjcmVhdG9yIGFzICdkaXJlY3QnIGNtZAorICAgICAgICAiIiIKKyAgICAgICAgaWYgbGVuKGFyZ3MpICE9IDg6CisgICAgICAgICAgICByYWlzZSBlcnJvcnMuVXNhZ2UoIkV4dHJhIGFyZ3VtZW50cyBnaXZlbiIpCisKKyAgICAgICAgbmF0aXZlX3N5c3Jvb3QgPSBhcmdzWzBdCisgICAgICAgIGtlcm5lbF9kaXIgPSBhcmdzWzFdCisgICAgICAgIGJvb3RpbWdfZGlyID0gYXJnc1syXQorICAgICAgICByb290ZnNfZGlyID0gYXJnc1szXQorCisgICAgICAgIGNyZWF0b3JvcHRzID0gY29uZmlnbWdyLmNyZWF0ZQorICAgICAgICBrc2NvbmYgPSBhcmdzWzRdCisKKyAgICAgICAgaW1hZ2Vfb3V0cHV0X2RpciA9IGFyZ3NbNV0KKyAgICAgICAgb2VfYnVpbGRkaXIgPSBhcmdzWzZdCisgICAgICAgIGNvbXByZXNzb3IgPSBhcmdzWzddCisKKyAgICAgICAga3Jvb3Rmc19kaXIgPSBjbHMuX19yb290ZnNfZGlyX3RvX2RpY3Qocm9vdGZzX2RpcikKKworICAgICAgICBjb25maWdtZ3IuX2tzY29uZiA9IGtzY29uZgorCisgICAgICAgIGNyZWF0b3IgPSBkaXJlY3QuRGlyZWN0SW1hZ2VDcmVhdG9yKG9lX2J1aWxkZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZV9vdXRwdXRfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrcm9vdGZzX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vdGltZ19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc29yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdG9yb3B0cykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBjcmVhdG9yLmNyZWF0ZSgpCisgICAgICAgICAgICBjcmVhdG9yLmFzc2VtYmxlKCkKKyAgICAgICAgICAgIGNyZWF0b3IuZmluYWxpemUoKQorICAgICAgICAgICAgY3JlYXRvci5wcmludF9vdXRpbWFnZV9pbmZvKCkKKworICAgICAgICBleGNlcHQgZXJyb3JzLkNyZWF0b3JFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBjcmVhdG9yLmNsZWFudXAoKQorCisgICAgICAgIHJldHVybiAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9ib290aW1nLWVmaS5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2Jvb3RpbWctZWZpLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNjNjNmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9ib290aW1nLWVmaS5weQpAQCAtMCwwICsxLDIxNCBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgaW1wbGVtZW50cyB0aGUgJ2Jvb3RpbWctZWZpJyBzb3VyY2UgcGx1Z2luIGNsYXNzIGZvciAnd2ljJworIworIyBBVVRIT1JTCisjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGxpbnV4LmludGVsLmNvbT4KKyMKKworaW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCisKK2Zyb20gd2ljIGltcG9ydCBraWNrc3RhcnQsIG1zZ2VyCitmcm9tIHdpYy5wbHVnaW5iYXNlIGltcG9ydCBTb3VyY2VQbHVnaW4KK2Zyb20gd2ljLnV0aWxzLm9lLm1pc2MgaW1wb3J0IGV4ZWNfY21kLCBleGVjX25hdGl2ZV9jbWQsIGdldF9iaXRiYWtlX3ZhciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PVEREX0VYVFJBX1NQQUNFCisKK2NsYXNzIEJvb3RpbWdFRklQbHVnaW4oU291cmNlUGx1Z2luKToKKyAgICAiIiIKKyAgICBDcmVhdGUgRUZJIGJvb3QgcGFydGl0aW9uLgorICAgIFRoaXMgcGx1Z2luIHN1cHBvcnRzIEdSVUIgMiBhbmQgZ3VtbWlib290IGJvb3Rsb2FkZXJzLgorICAgICIiIgorCisgICAgbmFtZSA9ICdib290aW1nLWVmaScKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19jb25maWd1cmVfZ3J1YmVmaShjbHMsIGhkZGRpciwgY3JlYXRvciwgY3Jfd29ya2Rpcik6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgbG9hZGVyLXNwZWNpZmljIChncnViLWVmaSkgY29uZmlnCisgICAgICAgICIiIgorICAgICAgICBvcHRpb25zID0gY3JlYXRvci5rcy5oYW5kbGVyLmJvb3Rsb2FkZXIuYXBwZW5kTGluZQorCisgICAgICAgIGdydWJlZmlfY29uZiA9ICIiCisgICAgICAgIGdydWJlZmlfY29uZiArPSAic2VyaWFsIC0tdW5pdD0wIC0tc3BlZWQ9MTE1MjAwIC0td29yZD04IC0tcGFyaXR5PW5vIC0tc3RvcD0xXG4iCisgICAgICAgIGdydWJlZmlfY29uZiArPSAiZGVmYXVsdD1ib290XG4iCisgICAgICAgIHRpbWVvdXQgPSBraWNrc3RhcnQuZ2V0X3RpbWVvdXQoY3JlYXRvci5rcykKKyAgICAgICAgaWYgbm90IHRpbWVvdXQ6CisgICAgICAgICAgICB0aW1lb3V0ID0gMAorICAgICAgICBncnViZWZpX2NvbmYgKz0gInRpbWVvdXQ9JXNcbiIgJSB0aW1lb3V0CisgICAgICAgIGdydWJlZmlfY29uZiArPSAibWVudWVudHJ5ICdib290J3tcbiIKKworICAgICAgICBrZXJuZWwgPSAiL2J6SW1hZ2UiCisKKyAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJsaW51eCAlcyByb290PSVzIHJvb3R3YWl0ICVzXG4iIFwKKyAgICAgICAgICAgICUgKGtlcm5lbCwgY3JlYXRvci5yb290ZGV2LCBvcHRpb25zKQorICAgICAgICBncnViZWZpX2NvbmYgKz0gIn1cbiIKKworICAgICAgICBtc2dlci5kZWJ1ZygiV3JpdGluZyBncnViZWZpIGNvbmZpZyAlcy9oZGQvYm9vdC9FRkkvQk9PVC9ncnViLmNmZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgJSBjcl93b3JrZGlyKQorICAgICAgICBjZmcgPSBvcGVuKCIlcy9oZGQvYm9vdC9FRkkvQk9PVC9ncnViLmNmZyIgJSBjcl93b3JrZGlyLCAidyIpCisgICAgICAgIGNmZy53cml0ZShncnViZWZpX2NvbmYpCisgICAgICAgIGNmZy5jbG9zZSgpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fY29uZmlndXJlX2d1bW1pYm9vdChjbHMsIGhkZGRpciwgY3JlYXRvciwgY3Jfd29ya2Rpcik6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgbG9hZGVyLXNwZWNpZmljIChndW1taWJvb3QpIGNvbmZpZworICAgICAgICAiIiIKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtZCAlcy9sb2FkZXIiICUgaGRkZGlyCisgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLWQgJXMvbG9hZGVyL2VudHJpZXMiICUgaGRkZGlyCisgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgIG9wdGlvbnMgPSBjcmVhdG9yLmtzLmhhbmRsZXIuYm9vdGxvYWRlci5hcHBlbmRMaW5lCisKKyAgICAgICAgdGltZW91dCA9IGtpY2tzdGFydC5nZXRfdGltZW91dChjcmVhdG9yLmtzKQorICAgICAgICBpZiBub3QgdGltZW91dDoKKyAgICAgICAgICAgIHRpbWVvdXQgPSAwCisKKyAgICAgICAgbG9hZGVyX2NvbmYgPSAiIgorICAgICAgICBsb2FkZXJfY29uZiArPSAiZGVmYXVsdCBib290XG4iCisgICAgICAgIGxvYWRlcl9jb25mICs9ICJ0aW1lb3V0ICVkXG4iICUgdGltZW91dAorCisgICAgICAgIG1zZ2VyLmRlYnVnKCJXcml0aW5nIGd1bW1pYm9vdCBjb25maWcgJXMvaGRkL2Jvb3QvbG9hZGVyL2xvYWRlci5jb25mIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAlIGNyX3dvcmtkaXIpCisgICAgICAgIGNmZyA9IG9wZW4oIiVzL2hkZC9ib290L2xvYWRlci9sb2FkZXIuY29uZiIgJSBjcl93b3JrZGlyLCAidyIpCisgICAgICAgIGNmZy53cml0ZShsb2FkZXJfY29uZikKKyAgICAgICAgY2ZnLmNsb3NlKCkKKworICAgICAgICBrZXJuZWwgPSAiL2J6SW1hZ2UiCisKKyAgICAgICAgYm9vdF9jb25mID0gIiIKKyAgICAgICAgYm9vdF9jb25mICs9ICJ0aXRsZSBib290XG4iCisgICAgICAgIGJvb3RfY29uZiArPSAibGludXggJXNcbiIgJSBrZXJuZWwKKyAgICAgICAgYm9vdF9jb25mICs9ICJvcHRpb25zIExBQkVMPUJvb3Qgcm9vdD0lcyAlc1xuIiAlIChjcmVhdG9yLnJvb3RkZXYsIG9wdGlvbnMpCisKKyAgICAgICAgbXNnZXIuZGVidWcoIldyaXRpbmcgZ3VtbWlib290IGNvbmZpZyAlcy9oZGQvYm9vdC9sb2FkZXIvZW50cmllcy9ib290LmNvbmYiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICUgY3Jfd29ya2RpcikKKyAgICAgICAgY2ZnID0gb3BlbigiJXMvaGRkL2Jvb3QvbG9hZGVyL2VudHJpZXMvYm9vdC5jb25mIiAlIGNyX3dvcmtkaXIsICJ3IikKKyAgICAgICAgY2ZnLndyaXRlKGJvb3RfY29uZikKKyAgICAgICAgY2ZnLmNsb3NlKCkKKworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX2NvbmZpZ3VyZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBjcmVhdG9yLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lX2J1aWxkZGlyLCBib290aW1nX2Rpciwga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgYmVmb3JlIGRvX3ByZXBhcmVfcGFydGl0aW9uKCksIGNyZWF0ZXMgbG9hZGVyLXNwZWNpZmljIGNvbmZpZworICAgICAgICAiIiIKKyAgICAgICAgaGRkZGlyID0gIiVzL2hkZC9ib290IiAlIGNyX3dvcmtkaXIKKyAgICAgICAgcm1fY21kID0gInJtIC1yZiAlcyIgJSBjcl93b3JrZGlyCisgICAgICAgIGV4ZWNfY21kKHJtX2NtZCkKKworICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1kICVzL0VGSS9CT09UIiAlIGhkZGRpcgorICAgICAgICBleGVjX2NtZChpbnN0YWxsX2NtZCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzb3VyY2VfcGFyYW1zWydsb2FkZXInXSA9PSAnZ3J1Yi1lZmknOgorICAgICAgICAgICAgICAgIGNscy5kb19jb25maWd1cmVfZ3J1YmVmaShoZGRkaXIsIGNyZWF0b3IsIGNyX3dvcmtkaXIpCisgICAgICAgICAgICBlbGlmIHNvdXJjZV9wYXJhbXNbJ2xvYWRlciddID09ICdndW1taWJvb3QnOgorICAgICAgICAgICAgICAgIGNscy5kb19jb25maWd1cmVfZ3VtbWlib290KGhkZGRpciwgY3JlYXRvciwgY3Jfd29ya2RpcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoInVucmVjb2duaXplZCBib290aW1nLWVmaSBsb2FkZXI6ICVzIiAlIHNvdXJjZV9wYXJhbXNbJ2xvYWRlciddKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBtc2dlci5lcnJvcigiYm9vdGltZy1lZmkgcmVxdWlyZXMgYSBsb2FkZXIsIG5vbmUgc3BlY2lmaWVkIikKKworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX3ByZXBhcmVfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgY3JlYXRvciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290ZnNfZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgdG8gZG8gdGhlIGFjdHVhbCBjb250ZW50IHBvcHVsYXRpb24gZm9yIGEgcGFydGl0aW9uIGkuZS4gaXQKKyAgICAgICAgJ3ByZXBhcmVzJyB0aGUgcGFydGl0aW9uIHRvIGJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBpbWFnZS4KKyAgICAgICAgSW4gdGhpcyBjYXNlLCBwcmVwYXJlIGNvbnRlbnQgZm9yIGFuIEVGSSAoZ3J1YikgYm9vdCBwYXJ0aXRpb24uCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgYm9vdGltZ19kaXI6CisgICAgICAgICAgICBib290aW1nX2RpciA9IGdldF9iaXRiYWtlX3ZhcigiSERERElSIikKKyAgICAgICAgICAgIGlmIG5vdCBib290aW1nX2RpcjoKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCBIRERESVIsIGV4aXRpbmdcbiIpCisgICAgICAgICAgICAjIGp1c3Qgc28gdGhlIHJlc3VsdCBub3RlcyBkaXNwbGF5IGl0CisgICAgICAgICAgICBjcmVhdG9yLnNldF9ib290aW1nX2Rpcihib290aW1nX2RpcikKKworICAgICAgICBzdGFnaW5nX2tlcm5lbF9kaXIgPSBrZXJuZWxfZGlyCisKKyAgICAgICAgaGRkZGlyID0gIiVzL2hkZC9ib290IiAlIGNyX3dvcmtkaXIKKworICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1tIDA2NDQgJXMvYnpJbWFnZSAlcy9iekltYWdlIiAlIFwKKyAgICAgICAgICAgIChzdGFnaW5nX2tlcm5lbF9kaXIsIGhkZGRpcikKKyAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc291cmNlX3BhcmFtc1snbG9hZGVyJ10gPT0gJ2dydWItZWZpJzoKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUoIiVzL2hkZC9ib290L0VGSS9CT09UL2dydWIuY2ZnIiAlIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcy9ncnViLmNmZyIgJSBjcl93b3JrZGlyKQorICAgICAgICAgICAgICAgIGNwX2NtZCA9ICJjcCAlcy9FRkkvQk9PVC8qICVzL0VGSS9CT09UIiAlIChib290aW1nX2RpciwgaGRkZGlyKQorICAgICAgICAgICAgICAgIGV4ZWNfY21kKGNwX2NtZCwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBzaHV0aWwubW92ZSgiJXMvZ3J1Yi5jZmciICUgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMvaGRkL2Jvb3QvRUZJL0JPT1QvZ3J1Yi5jZmciICUgY3Jfd29ya2RpcikKKyAgICAgICAgICAgIGVsaWYgc291cmNlX3BhcmFtc1snbG9hZGVyJ10gPT0gJ2d1bW1pYm9vdCc6CisgICAgICAgICAgICAgICAgY3BfY21kID0gImNwICVzL0VGSS9CT09ULyogJXMvRUZJL0JPT1QiICUgKGJvb3RpbWdfZGlyLCBoZGRkaXIpCisgICAgICAgICAgICAgICAgZXhlY19jbWQoY3BfY21kLCBUcnVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigidW5yZWNvZ25pemVkIGJvb3RpbWctZWZpIGxvYWRlcjogJXMiICUgc291cmNlX3BhcmFtc1snbG9hZGVyJ10pCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJib290aW1nLWVmaSByZXF1aXJlcyBhIGxvYWRlciwgbm9uZSBzcGVjaWZpZWQiKQorCisgICAgICAgIGR1X2NtZCA9ICJkdSAtYmtzICVzIiAlIGhkZGRpcgorICAgICAgICBvdXQgPSBleGVjX2NtZChkdV9jbWQpCisgICAgICAgIGJsb2NrcyA9IGludChvdXQuc3BsaXQoKVswXSkKKworICAgICAgICBleHRyYV9ibG9ja3MgPSBwYXJ0LmdldF9leHRyYV9ibG9ja19jb3VudChibG9ja3MpCisKKyAgICAgICAgaWYgZXh0cmFfYmxvY2tzIDwgQk9PVEREX0VYVFJBX1NQQUNFOgorICAgICAgICAgICAgZXh0cmFfYmxvY2tzID0gQk9PVEREX0VYVFJBX1NQQUNFCisKKyAgICAgICAgYmxvY2tzICs9IGV4dHJhX2Jsb2NrcworCisgICAgICAgIG1zZ2VyLmRlYnVnKCJBZGRlZCAlZCBleHRyYSBibG9ja3MgdG8gJXMgdG8gZ2V0IHRvICVkIHRvdGFsIGJsb2NrcyIgJSBcCisgICAgICAgICAgICAgICAgICAgIChleHRyYV9ibG9ja3MsIHBhcnQubW91bnRwb2ludCwgYmxvY2tzKSkKKworICAgICAgICAjIEVuc3VyZSB0b3RhbCBzZWN0b3JzIGlzIGFuIGludGVncmFsIG51bWJlciBvZiBzZWN0b3JzIHBlcgorICAgICAgICAjIHRyYWNrIG9yIG1jb3B5IHdpbGwgY29tcGxhaW4uIFNlY3RvcnMgYXJlIDUxMiBieXRlcywgYW5kIHdlCisgICAgICAgICMgZ2VuZXJhdGUgaW1hZ2VzIHdpdGggMzIgc2VjdG9ycyBwZXIgdHJhY2suIFRoaXMgY2FsY3VsYXRpb24gaXMKKyAgICAgICAgIyBkb25lIGluIGJsb2NrcywgdGh1cyB0aGUgbW9kIGJ5IDE2IGluc3RlYWQgb2YgMzIuCisgICAgICAgIGJsb2NrcyArPSAoMTYgLSAoYmxvY2tzICUgMTYpKQorCisgICAgICAgICMgZG9zZnMgaW1hZ2UsIGNyZWF0ZWQgYnkgbWtkb3NmcworICAgICAgICBib290aW1nID0gIiVzL2Jvb3QuaW1nIiAlIGNyX3dvcmtkaXIKKworICAgICAgICBkb3Nmc19jbWQgPSAibWtkb3NmcyAtbiBlZmkgLUMgJXMgJWQiICUgKGJvb3RpbWcsIGJsb2NrcykKKyAgICAgICAgZXhlY19uYXRpdmVfY21kKGRvc2ZzX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgbWNvcHlfY21kID0gIm1jb3B5IC1pICVzIC1zICVzLyogOjovIiAlIChib290aW1nLCBoZGRkaXIpCisgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChtY29weV9jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgICAgIGNobW9kX2NtZCA9ICJjaG1vZCA2NDQgJXMiICUgYm9vdGltZworICAgICAgICBleGVjX2NtZChjaG1vZF9jbWQpCisKKyAgICAgICAgZHVfY21kID0gImR1IC1MYmtzICVzIiAlIGJvb3RpbWcKKyAgICAgICAgb3V0ID0gZXhlY19jbWQoZHVfY21kKQorICAgICAgICBib290aW1nX3NpemUgPSBvdXQuc3BsaXQoKVswXQorCisgICAgICAgIHBhcnQuc2V0X3NpemUoYm9vdGltZ19zaXplKQorICAgICAgICBwYXJ0LnNldF9zb3VyY2VfZmlsZShib290aW1nKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvYm9vdGltZy1wYXJ0aXRpb24ucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9ib290aW1nLXBhcnRpdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzJjYTBmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvYm9vdGltZy1wYXJ0aXRpb24ucHkKQEAgLTAsMCArMSwxNDMgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBERVNDUklQVElPTgorIyBUaGlzIGltcGxlbWVudHMgdGhlICdib290aW1nLXBhcnRpdGlvbicgc291cmNlIHBsdWdpbiBjbGFzcyBmb3IKKyMgJ3dpYycuIFRoZSBwbHVnaW4gY3JlYXRlcyBhbiBpbWFnZSBvZiBib290IHBhcnRpdGlvbiwgY29weWluZyBvdmVyCisjIGZpbGVzIGxpc3RlZCBpbiBJTUFHRV9CT09UX0ZJTEVTIGJpdGJha2UgdmFyaWFibGUuCisjCisjIEFVVEhPUlMKKyMgTWFjaWVqIEJvcnplY2tpIDxtYWNpZWouYm9yemVja2kgKGF0XSBvcGVuLXJuZC5wbD4KKyMKKworaW1wb3J0IG9zCitpbXBvcnQgcmUKKworZnJvbSB3aWMgaW1wb3J0IG1zZ2VyCitmcm9tIHdpYy5wbHVnaW5iYXNlIGltcG9ydCBTb3VyY2VQbHVnaW4KK2Zyb20gd2ljLnV0aWxzLm9lLm1pc2MgaW1wb3J0IGV4ZWNfY21kLCBnZXRfYml0YmFrZV92YXIKK2Zyb20gZ2xvYiBpbXBvcnQgZ2xvYgorCitjbGFzcyBCb290aW1nUGFydGl0aW9uUGx1Z2luKFNvdXJjZVBsdWdpbik6CisgICAgIiIiCisgICAgQ3JlYXRlIGFuIGltYWdlIG9mIGJvb3QgcGFydGl0aW9uLCBjb3B5aW5nIG92ZXIgZmlsZXMKKyAgICBsaXN0ZWQgaW4gSU1BR0VfQk9PVF9GSUxFUyBiaXRiYWtlIHZhcmlhYmxlLgorICAgICIiIgorCisgICAgbmFtZSA9ICdib290aW1nLXBhcnRpdGlvbicKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19pbnN0YWxsX2Rpc2soY2xzLCBkaXNrLCBkaXNrX25hbWUsIGNyLCB3b3JrZGlyLCBvZV9idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgYWZ0ZXIgYWxsIHBhcnRpdGlvbnMgaGF2ZSBiZWVuIHByZXBhcmVkIGFuZCBhc3NlbWJsZWQgaW50byBhCisgICAgICAgIGRpc2sgaW1hZ2UuIERvIG5vdGhpbmcuCisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fY29uZmlndXJlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGNyLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lX2J1aWxkZGlyLCBib290aW1nX2Rpciwga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgYmVmb3JlIGRvX3ByZXBhcmVfcGFydGl0aW9uKCkuIFBvc3NpYmx5IHByZXBhcmUKKyAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcyBvZiBzb21lIHNvcnQuCisKKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19wcmVwYXJlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGNyLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Rmc19kaXIsIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCB0byBkbyB0aGUgYWN0dWFsIGNvbnRlbnQgcG9wdWxhdGlvbiBmb3IgYSBwYXJ0aXRpb24gaS5lLiBpdAorICAgICAgICAncHJlcGFyZXMnIHRoZSBwYXJ0aXRpb24gdG8gYmUgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGltYWdlLgorICAgICAgICBJbiB0aGlzIGNhc2UsIGRvZXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgLSBzZXRzIHVwIGEgdmZhdCBwYXJ0aXRpb24KKyAgICAgICAgLSBjb3BpZXMgYWxsIGZpbGVzIGxpc3RlZCBpbiBJTUFHRV9CT09UX0ZJTEVTIHZhcmlhYmxlCisgICAgICAgICIiIgorICAgICAgICBoZGRkaXIgPSAiJXMvYm9vdCIgJSBjcl93b3JrZGlyCisgICAgICAgIHJtX2NtZCA9ICJybSAtcmYgJXMvYm9vdCIgJSBjcl93b3JrZGlyCisgICAgICAgIGV4ZWNfY21kKHJtX2NtZCkKKworICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1kICVzIiAlIGhkZGRpcgorICAgICAgICBleGVjX2NtZChpbnN0YWxsX2NtZCkKKworICAgICAgICBpZiBub3QgYm9vdGltZ19kaXI6CisgICAgICAgICAgICBib290aW1nX2RpciA9IGdldF9iaXRiYWtlX3ZhcigiREVQTE9ZX0RJUl9JTUFHRSIpCisgICAgICAgICAgICBpZiBub3QgYm9vdGltZ19kaXI6CisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoIkNvdWxkbid0IGZpbmQgREVQTE9ZX0RJUl9JTUFHRSwgZXhpdGluZ1xuIikKKworICAgICAgICBtc2dlci5kZWJ1ZygnQm9vdGltZyBkaXI6ICVzJyAlIGJvb3RpbWdfZGlyKQorCisgICAgICAgIGJvb3RfZmlsZXMgPSBnZXRfYml0YmFrZV92YXIoIklNQUdFX0JPT1RfRklMRVMiKQorCisgICAgICAgIGlmIG5vdCBib290X2ZpbGVzOgorICAgICAgICAgICAgbXNnZXIuZXJyb3IoJ05vIGJvb3QgZmlsZXMgZGVmaW5lZCwgSU1BR0VfQk9PVF9GSUxFUyB1bnNldCcpCisKKyAgICAgICAgbXNnZXIuZGVidWcoJ0Jvb3QgZmlsZXM6ICVzJyAlIGJvb3RfZmlsZXMpCisKKyAgICAgICAgIyBsaXN0IG9mIHR1cGxlcyAoc3JjX25hbWUsIGRzdF9uYW1lKQorICAgICAgICBkZXBsb3lfZmlsZXMgPSBbXQorICAgICAgICBmb3Igc3JjX2VudHJ5IGluIHJlLmZpbmRhbGwocidbXHc7XC1cLi9cKl0rJywgYm9vdF9maWxlcyk6CisgICAgICAgICAgICBpZiAnOycgaW4gc3JjX2VudHJ5OgorICAgICAgICAgICAgICAgIGRzdF9lbnRyeSA9IHR1cGxlKHNyY19lbnRyeS5zcGxpdCgnOycpKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkc3RfZW50cnlbMF0gb3Igbm90IGRzdF9lbnRyeVsxXToKKyAgICAgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoJ01hbGZvcm1lZCBib290IGZpbGUgZW50cnk6ICVzJyAlIChzcmNfZW50cnkpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkc3RfZW50cnkgPSAoc3JjX2VudHJ5LCBzcmNfZW50cnkpCisKKyAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCdEZXN0aW5hdGlvbiBlbnRyeTogJXInICUgKGRzdF9lbnRyeSwpKQorICAgICAgICAgICAgZGVwbG95X2ZpbGVzLmFwcGVuZChkc3RfZW50cnkpCisKKyAgICAgICAgZm9yIGRlcGxveV9lbnRyeSBpbiBkZXBsb3lfZmlsZXM6CisgICAgICAgICAgICBzcmMsIGRzdCA9IGRlcGxveV9lbnRyeQorICAgICAgICAgICAgaW5zdGFsbF90YXNrID0gW10KKyAgICAgICAgICAgIGlmICcqJyBpbiBzcmM6CisgICAgICAgICAgICAgICAgIyBieSBkZWZhdWx0IGluc3RhbGwgZmlsZXMgdW5kZXIgdGhlaXIgYmFzZW5hbWUKKyAgICAgICAgICAgICAgICBlbnRyeV9uYW1lX2ZuID0gb3MucGF0aC5iYXNlbmFtZQorICAgICAgICAgICAgICAgIGlmIGRzdCAhPSBzcmM6CisgICAgICAgICAgICAgICAgICAgICMgdW5sZXNzIGEgdGFyZ2V0IG5hbWUgd2FzIGdpdmVuLCB0aGVuIHRyZWF0IG5hbWUKKyAgICAgICAgICAgICAgICAgICAgIyBhcyBhIGRpcmVjdG9yeSBhbmQgYXBwZW5kIGEgYmFzZW5hbWUKKyAgICAgICAgICAgICAgICAgICAgZW50cnlfbmFtZV9mbiA9IGxhbWJkYSBuYW1lOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUobmFtZSkpCisKKyAgICAgICAgICAgICAgICBzcmNzID0gZ2xvYihvcy5wYXRoLmpvaW4oYm9vdGltZ19kaXIsIHNyYykpCisKKyAgICAgICAgICAgICAgICBtc2dlci5kZWJ1ZygnR2xvYmJlZCBzb3VyY2VzOiAlcycgJSAoJywgJy5qb2luKHNyY3MpKSkKKyAgICAgICAgICAgICAgICBmb3IgZW50cnkgaW4gc3JjczoKKyAgICAgICAgICAgICAgICAgICAgZW50cnlfZHN0X25hbWUgPSBlbnRyeV9uYW1lX2ZuKGVudHJ5KQorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsX3Rhc2suYXBwZW5kKChlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGhkZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5X2RzdF9uYW1lKSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGluc3RhbGxfdGFzayA9IFsob3MucGF0aC5qb2luKGJvb3RpbWdfZGlyLCBzcmMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGhkZGRpciwgZHN0KSldCisKKyAgICAgICAgICAgIGZvciB0YXNrIGluIGluc3RhbGxfdGFzazoKKyAgICAgICAgICAgICAgICBzcmNfcGF0aCwgZHN0X3BhdGggPSB0YXNrCisgICAgICAgICAgICAgICAgbXNnZXIuZGVidWcoJ0luc3RhbGwgJXMgYXMgJXMnICUgKG9zLnBhdGguYmFzZW5hbWUoc3JjX3BhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RfcGF0aCkpCisgICAgICAgICAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtbSAwNjQ0IC1EICVzICVzIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzcmNfcGF0aCwgZHN0X3BhdGgpCisgICAgICAgICAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgbXNnZXIuZGVidWcoJ1ByZXBhcmUgYm9vdCBwYXJ0aXRpb24gdXNpbmcgcm9vdGZzIGluICVzJyAlIChoZGRkaXIpKQorICAgICAgICBwYXJ0LnByZXBhcmVfcm9vdGZzKGNyX3dvcmtkaXIsIG9lX2J1aWxkZGlyLCBoZGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2Jvb3RpbWctcGNiaW9zLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvYm9vdGltZy1wY2Jpb3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZlZDU0ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2Jvb3RpbWctcGNiaW9zLnB5CkBAIC0wLDAgKzEsMjAwIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBpbXBsZW1lbnRzIHRoZSAnYm9vdGltZy1wY2Jpb3MnIHNvdXJjZSBwbHVnaW4gY2xhc3MgZm9yICd3aWMnCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gbGludXguaW50ZWwuY29tPgorIworCitpbXBvcnQgb3MKKworZnJvbSB3aWMudXRpbHMuZXJyb3JzIGltcG9ydCBJbWFnZUVycm9yCitmcm9tIHdpYyBpbXBvcnQga2lja3N0YXJ0LCBtc2dlcgorZnJvbSB3aWMudXRpbHMgaW1wb3J0IHJ1bm5lcgorZnJvbSB3aWMucGx1Z2luYmFzZSBpbXBvcnQgU291cmNlUGx1Z2luCitmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBleGVjX2NtZCwgZXhlY19uYXRpdmVfY21kLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfYml0YmFrZV92YXIsIEJPT1RERF9FWFRSQV9TUEFDRQorCitjbGFzcyBCb290aW1nUGNiaW9zUGx1Z2luKFNvdXJjZVBsdWdpbik6CisgICAgIiIiCisgICAgQ3JlYXRlIE1CUiBib290IHBhcnRpdGlvbiBhbmQgaW5zdGFsbCBzeXNsaW51eCBvbiBpdC4KKyAgICAiIiIKKworICAgIG5hbWUgPSAnYm9vdGltZy1wY2Jpb3MnCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9faW5zdGFsbF9kaXNrKGNscywgZGlzaywgZGlza19uYW1lLCBjcmVhdG9yLCB3b3JrZGlyLCBvZV9idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgYWZ0ZXIgYWxsIHBhcnRpdGlvbnMgaGF2ZSBiZWVuIHByZXBhcmVkIGFuZCBhc3NlbWJsZWQgaW50byBhCisgICAgICAgIGRpc2sgaW1hZ2UuICBJbiB0aGlzIGNhc2UsIHdlIGluc3RhbGwgdGhlIE1CUi4KKyAgICAgICAgIiIiCisgICAgICAgIG1icmZpbGUgPSAiJXMvc3lzbGludXgvIiAlIGJvb3RpbWdfZGlyCisgICAgICAgIGlmIGNyZWF0b3IucHRhYmxlX2Zvcm1hdCA9PSAnbXNkb3MnOgorICAgICAgICAgICAgbWJyZmlsZSArPSAibWJyLmJpbiIKKyAgICAgICAgZWxpZiBjcmVhdG9yLnB0YWJsZV9mb3JtYXQgPT0gJ2dwdCc6CisgICAgICAgICAgICBtYnJmaWxlICs9ICJncHRtYnIuYmluIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnZXIuZXJyb3IoIlVuc3VwcG9ydGVkIHBhcnRpdGlvbiB0YWJsZTogJXMiICUgY3JlYXRvci5wdGFibGVfZm9ybWF0KQorCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhtYnJmaWxlKToKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJDb3VsZG4ndCBmaW5kICVzLiAgSWYgdXNpbmcgdGhlIC1lIG9wdGlvbiwgZG8geW91ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJoYXZlIHRoZSByaWdodCBNQUNISU5FIHNldCBpbiBsb2NhbC5jb25mPyAgSWYgbm90LCAiCisgICAgICAgICAgICAgICAgICAgICAgICAiaXMgdGhlIGJvb3RpbWdfZGlyIHBhdGggY29ycmVjdD8iICUgbWJyZmlsZSkKKworICAgICAgICBmdWxsX3BhdGggPSBjcmVhdG9yLl9mdWxsX3BhdGgod29ya2RpciwgZGlza19uYW1lLCAiZGlyZWN0IikKKyAgICAgICAgbXNnZXIuZGVidWcoIkluc3RhbGxpbmcgTUJSIG9uIGRpc2sgJXMgYXMgJXMgd2l0aCBzaXplICVzIGJ5dGVzIiBcCisgICAgICAgICAgICAgICAgICAgICUgKGRpc2tfbmFtZSwgZnVsbF9wYXRoLCBkaXNrWydtaW5fc2l6ZSddKSkKKworICAgICAgICByY29kZSA9IHJ1bm5lci5zaG93KFsnZGQnLCAnaWY9JXMnICUgbWJyZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29mPSVzJyAlIGZ1bGxfcGF0aCwgJ2NvbnY9bm90cnVuYyddKQorICAgICAgICBpZiByY29kZSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgSW1hZ2VFcnJvcigiVW5hYmxlIHRvIHNldCBNQlIgdG8gJXMiICUgZnVsbF9wYXRoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX2NvbmZpZ3VyZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBjcmVhdG9yLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lX2J1aWxkZGlyLCBib290aW1nX2Rpciwga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgYmVmb3JlIGRvX3ByZXBhcmVfcGFydGl0aW9uKCksIGNyZWF0ZXMgc3lzbGludXggY29uZmlnCisgICAgICAgICIiIgorICAgICAgICBoZGRkaXIgPSAiJXMvaGRkL2Jvb3QiICUgY3Jfd29ya2RpcgorICAgICAgICBybV9jbWQgPSAicm0gLXJmICIgKyBjcl93b3JrZGlyCisgICAgICAgIGV4ZWNfY21kKHJtX2NtZCkKKworICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1kICVzIiAlIGhkZGRpcgorICAgICAgICBleGVjX2NtZChpbnN0YWxsX2NtZCkKKworICAgICAgICBzcGxhc2ggPSBvcy5wYXRoLmpvaW4oY3Jfd29ya2RpciwgIi9oZGQvYm9vdC9zcGxhc2guanBnIikKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3BsYXNoKToKKyAgICAgICAgICAgIHNwbGFzaGxpbmUgPSAibWVudSBiYWNrZ3JvdW5kIHNwbGFzaC5qcGciCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzcGxhc2hsaW5lID0gIiIKKworICAgICAgICBvcHRpb25zID0gY3JlYXRvci5rcy5oYW5kbGVyLmJvb3Rsb2FkZXIuYXBwZW5kTGluZQorCisgICAgICAgIHN5c2xpbnV4X2NvbmYgPSAiIgorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJQUk9NUFQgMFxuIgorICAgICAgICB0aW1lb3V0ID0ga2lja3N0YXJ0LmdldF90aW1lb3V0KGNyZWF0b3Iua3MpCisgICAgICAgIGlmIG5vdCB0aW1lb3V0OgorICAgICAgICAgICAgdGltZW91dCA9IDAKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiVElNRU9VVCAiICsgc3RyKHRpbWVvdXQpICsgIlxuIgorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJcbiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiQUxMT1dPUFRJT05TIDFcbiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiU0VSSUFMIDAgMTE1MjAwXG4iCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIlxuIgorICAgICAgICBpZiBzcGxhc2hsaW5lOgorICAgICAgICAgICAgc3lzbGludXhfY29uZiArPSAiJXNcbiIgJSBzcGxhc2hsaW5lCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIkRFRkFVTFQgYm9vdFxuIgorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJMQUJFTCBib290XG4iCisKKyAgICAgICAga2VybmVsID0gIi92bWxpbnV6IgorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJLRVJORUwgIiArIGtlcm5lbCArICJcbiIKKworICAgICAgICBzeXNsaW51eF9jb25mICs9ICJBUFBFTkQgbGFiZWw9Ym9vdCByb290PSVzICVzXG4iICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3JlYXRvci5yb290ZGV2LCBvcHRpb25zKQorCisgICAgICAgIG1zZ2VyLmRlYnVnKCJXcml0aW5nIHN5c2xpbnV4IGNvbmZpZyAlcy9oZGQvYm9vdC9zeXNsaW51eC5jZmciIFwKKyAgICAgICAgICAgICAgICAgICAgJSBjcl93b3JrZGlyKQorICAgICAgICBjZmcgPSBvcGVuKCIlcy9oZGQvYm9vdC9zeXNsaW51eC5jZmciICUgY3Jfd29ya2RpciwgInciKQorICAgICAgICBjZmcud3JpdGUoc3lzbGludXhfY29uZikKKyAgICAgICAgY2ZnLmNsb3NlKCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19wcmVwYXJlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGNyZWF0b3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lX2J1aWxkZGlyLCBib290aW1nX2Rpciwga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdGZzX2RpciwgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIHRvIGRvIHRoZSBhY3R1YWwgY29udGVudCBwb3B1bGF0aW9uIGZvciBhIHBhcnRpdGlvbiBpLmUuIGl0CisgICAgICAgICdwcmVwYXJlcycgdGhlIHBhcnRpdGlvbiB0byBiZSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgaW1hZ2UuCisgICAgICAgIEluIHRoaXMgY2FzZSwgcHJlcGFyZSBjb250ZW50IGZvciBsZWdhY3kgYmlvcyBib290IHBhcnRpdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIGRlZiBfaGFzX3N5c2xpbnV4KGRpcm5hbWUpOgorICAgICAgICAgICAgaWYgZGlybmFtZToKKyAgICAgICAgICAgICAgICBzeXNsaW51eCA9ICIlcy9zeXNsaW51eCIgJSBkaXJuYW1lCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3lzbGludXgpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgbm90IF9oYXNfc3lzbGludXgoYm9vdGltZ19kaXIpOgorICAgICAgICAgICAgYm9vdGltZ19kaXIgPSBnZXRfYml0YmFrZV92YXIoIlNUQUdJTkdfREFUQURJUiIpCisgICAgICAgICAgICBpZiBub3QgYm9vdGltZ19kaXI6CisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoIkNvdWxkbid0IGZpbmQgU1RBR0lOR19EQVRBRElSLCBleGl0aW5nXG4iKQorICAgICAgICAgICAgaWYgbm90IF9oYXNfc3lzbGludXgoYm9vdGltZ19kaXIpOgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJQbGVhc2UgYnVpbGQgc3lzbGludXggZmlyc3RcbiIpCisgICAgICAgICAgICAjIGp1c3Qgc28gdGhlIHJlc3VsdCBub3RlcyBkaXNwbGF5IGl0CisgICAgICAgICAgICBjcmVhdG9yLnNldF9ib290aW1nX2Rpcihib290aW1nX2RpcikKKworICAgICAgICBzdGFnaW5nX2tlcm5lbF9kaXIgPSBrZXJuZWxfZGlyCisKKyAgICAgICAgaGRkZGlyID0gIiVzL2hkZC9ib290IiAlIGNyX3dvcmtkaXIKKworICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1tIDA2NDQgJXMvYnpJbWFnZSAlcy92bWxpbnV6IiBcCisgICAgICAgICAgICAlIChzdGFnaW5nX2tlcm5lbF9kaXIsIGhkZGRpcikKKyAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtbSA0NDQgJXMvc3lzbGludXgvbGRsaW51eC5zeXMgJXMvbGRsaW51eC5zeXMiIFwKKyAgICAgICAgICAgICUgKGJvb3RpbWdfZGlyLCBoZGRkaXIpCisgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgIGR1X2NtZCA9ICJkdSAtYmtzICVzIiAlIGhkZGRpcgorICAgICAgICBvdXQgPSBleGVjX2NtZChkdV9jbWQpCisgICAgICAgIGJsb2NrcyA9IGludChvdXQuc3BsaXQoKVswXSkKKworICAgICAgICBleHRyYV9ibG9ja3MgPSBwYXJ0LmdldF9leHRyYV9ibG9ja19jb3VudChibG9ja3MpCisKKyAgICAgICAgaWYgZXh0cmFfYmxvY2tzIDwgQk9PVEREX0VYVFJBX1NQQUNFOgorICAgICAgICAgICAgZXh0cmFfYmxvY2tzID0gQk9PVEREX0VYVFJBX1NQQUNFCisKKyAgICAgICAgYmxvY2tzICs9IGV4dHJhX2Jsb2NrcworCisgICAgICAgIG1zZ2VyLmRlYnVnKCJBZGRlZCAlZCBleHRyYSBibG9ja3MgdG8gJXMgdG8gZ2V0IHRvICVkIHRvdGFsIGJsb2NrcyIgJSBcCisgICAgICAgICAgICAgICAgICAgIChleHRyYV9ibG9ja3MsIHBhcnQubW91bnRwb2ludCwgYmxvY2tzKSkKKworICAgICAgICAjIEVuc3VyZSB0b3RhbCBzZWN0b3JzIGlzIGFuIGludGVncmFsIG51bWJlciBvZiBzZWN0b3JzIHBlcgorICAgICAgICAjIHRyYWNrIG9yIG1jb3B5IHdpbGwgY29tcGxhaW4uIFNlY3RvcnMgYXJlIDUxMiBieXRlcywgYW5kIHdlCisgICAgICAgICMgZ2VuZXJhdGUgaW1hZ2VzIHdpdGggMzIgc2VjdG9ycyBwZXIgdHJhY2suIFRoaXMgY2FsY3VsYXRpb24gaXMKKyAgICAgICAgIyBkb25lIGluIGJsb2NrcywgdGh1cyB0aGUgbW9kIGJ5IDE2IGluc3RlYWQgb2YgMzIuCisgICAgICAgIGJsb2NrcyArPSAoMTYgLSAoYmxvY2tzICUgMTYpKQorCisgICAgICAgICMgZG9zZnMgaW1hZ2UsIGNyZWF0ZWQgYnkgbWtkb3NmcworICAgICAgICBib290aW1nID0gIiVzL2Jvb3QuaW1nIiAlIGNyX3dvcmtkaXIKKworICAgICAgICBkb3Nmc19jbWQgPSAibWtkb3NmcyAtbiBib290IC1TIDUxMiAtQyAlcyAlZCIgJSAoYm9vdGltZywgYmxvY2tzKQorICAgICAgICBleGVjX25hdGl2ZV9jbWQoZG9zZnNfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgICAgICBtY29weV9jbWQgPSAibWNvcHkgLWkgJXMgLXMgJXMvKiA6Oi8iICUgKGJvb3RpbWcsIGhkZGRpcikKKyAgICAgICAgZXhlY19uYXRpdmVfY21kKG1jb3B5X2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgc3lzbGludXhfY21kID0gInN5c2xpbnV4ICVzIiAlIGJvb3RpbWcKKyAgICAgICAgZXhlY19uYXRpdmVfY21kKHN5c2xpbnV4X2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgY2htb2RfY21kID0gImNobW9kIDY0NCAlcyIgJSBib290aW1nCisgICAgICAgIGV4ZWNfY21kKGNobW9kX2NtZCkKKworICAgICAgICBkdV9jbWQgPSAiZHUgLUxia3MgJXMiICUgYm9vdGltZworICAgICAgICBvdXQgPSBleGVjX2NtZChkdV9jbWQpCisgICAgICAgIGJvb3RpbWdfc2l6ZSA9IG91dC5zcGxpdCgpWzBdCisKKyAgICAgICAgcGFydC5zZXRfc2l6ZShib290aW1nX3NpemUpCisgICAgICAgIHBhcnQuc2V0X3NvdXJjZV9maWxlKGJvb3RpbWcpCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvZnNpbWFnZS5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2ZzaW1hZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg5NGU4OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2ZzaW1hZ2UucHkKQEAgLTAsMCArMSw3MyBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisKK2ltcG9ydCBvcworCitmcm9tIHdpYyBpbXBvcnQgbXNnZXIKK2Zyb20gd2ljLnBsdWdpbmJhc2UgaW1wb3J0IFNvdXJjZVBsdWdpbgorZnJvbSB3aWMudXRpbHMub2UubWlzYyBpbXBvcnQgZ2V0X2JpdGJha2VfdmFyCisKK2NsYXNzIEZTSW1hZ2VQbHVnaW4oU291cmNlUGx1Z2luKToKKyAgICAiIiIKKyAgICBBZGQgYW4gYWxyZWFkeSBleGlzdGluZyBmaWxlc3lzdGVtIGltYWdlIHRvIHRoZSBwYXJ0aXRpb24gbGF5b3V0LgorICAgICIiIgorCisgICAgbmFtZSA9ICdmc2ltYWdlJworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX2luc3RhbGxfZGlzayhjbHMsIGRpc2ssIGRpc2tfbmFtZSwgY3IsIHdvcmtkaXIsIG9lX2J1aWxkZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCBhZnRlciBhbGwgcGFydGl0aW9ucyBoYXZlIGJlZW4gcHJlcGFyZWQgYW5kIGFzc2VtYmxlZCBpbnRvIGEKKyAgICAgICAgZGlzayBpbWFnZS4gRG8gbm90aGluZy4KKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19jb25maWd1cmVfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgY3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCBiZWZvcmUgZG9fcHJlcGFyZV9wYXJ0aXRpb24oKS4gUG9zc2libHkgcHJlcGFyZQorICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIG9mIHNvbWUgc29ydC4KKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19wcmVwYXJlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGNyLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Rmc19kaXIsIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCB0byBkbyB0aGUgYWN0dWFsIGNvbnRlbnQgcG9wdWxhdGlvbiBmb3IgYSBwYXJ0aXRpb24gaS5lLiBpdAorICAgICAgICAncHJlcGFyZXMnIHRoZSBwYXJ0aXRpb24gdG8gYmUgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGltYWdlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGJvb3RpbWdfZGlyOgorICAgICAgICAgICAgYm9vdGltZ19kaXIgPSBnZXRfYml0YmFrZV92YXIoIkRFUExPWV9ESVJfSU1BR0UiKQorICAgICAgICAgICAgaWYgbm90IGJvb3RpbWdfZGlyOgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJDb3VsZG4ndCBmaW5kIERFUExPWV9ESVJfSU1BR0UsIGV4aXRpbmdcbiIpCisKKyAgICAgICAgbXNnZXIuZGVidWcoJ0Jvb3RpbWcgZGlyOiAlcycgJSBib290aW1nX2RpcikKKworICAgICAgICBpZiAnZmlsZScgbm90IGluIHNvdXJjZV9wYXJhbXM6CisgICAgICAgICAgICBtc2dlci5lcnJvcigiTm8gZmlsZSBzcGVjaWZpZWRcbiIpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzcmMgPSBvcy5wYXRoLmpvaW4oYm9vdGltZ19kaXIsIHNvdXJjZV9wYXJhbXNbJ2ZpbGUnXSkKKworCisgICAgICAgIG1zZ2VyLmRlYnVnKCdQcmVwYXJpbmcgcGFydGl0aW9uIHVzaW5nIGltYWdlICVzJyAlIChzcmMpKQorICAgICAgICBwYXJ0LnByZXBhcmVfcm9vdGZzX2Zyb21fZnNfaW1hZ2UoY3Jfd29ya2Rpciwgc3JjLCAiIikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2lzb2ltYWdlLWlzb2h5YnJpZC5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2lzb2ltYWdlLWlzb2h5YnJpZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDcyZDhhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvaXNvaW1hZ2UtaXNvaHlicmlkLnB5CkBAIC0wLDAgKzEsNTM4IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBERVNDUklQVElPTgorIyBUaGlzIGltcGxlbWVudHMgdGhlICdpc29pbWFnZS1pc29oeWJyaWQnIHNvdXJjZSBwbHVnaW4gY2xhc3MgZm9yICd3aWMnCisjCisjIEFVVEhPUlMKKyMgTWloYWx5IFZhcmdhIDxtaWhhbHkudmFyZ2EgKGF0XSBuaS5jb20+CisKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCisKK2Zyb20gd2ljIGltcG9ydCBraWNrc3RhcnQsIG1zZ2VyCitmcm9tIHdpYy5wbHVnaW5iYXNlIGltcG9ydCBTb3VyY2VQbHVnaW4KK2Zyb20gd2ljLnV0aWxzLm9lLm1pc2MgaW1wb3J0IGV4ZWNfY21kLCBleGVjX25hdGl2ZV9jbWQsIGdldF9iaXRiYWtlX3ZhcgorCitjbGFzcyBJc29JbWFnZVBsdWdpbihTb3VyY2VQbHVnaW4pOgorICAgICIiIgorICAgIENyZWF0ZSBhIGJvb3RhYmxlIElTTyBpbWFnZQorCisgICAgVGhpcyBwbHVnaW4gY3JlYXRlcyBhIGh5YnJpZCwgbGVnYWN5IGFuZCBFRkkgYm9vdGFibGUgSVNPIGltYWdlLiBUaGUKKyAgICBnZW5lcmF0ZWQgaW1hZ2UgY2FuIGJlIHVzZWQgb24gb3B0aWNhbCBtZWRpYSBhcyB3ZWxsIGFzIFVTQiBtZWRpYS4KKworICAgIExlZ2FjeSBib290IHVzZXMgc3lzbGludXggYW5kIEVGSSBib290IHVzZXMgZ3J1YiBvciBndW1taWJvb3QgKG5vdAorICAgIGltcGxlbWVudGVkIHlldCkgYXMgYm9vdGxvYWRlci4gVGhlIHBsdWdpbiBjcmVhdGVzIHRoZSBkaXJlY3RvcmllcyByZXF1aXJlZAorICAgIGJ5IGJvb3Rsb2FkZXJzIGFuZCBwb3B1bGF0ZXMgdGhlbSBieSBjcmVhdGluZyBhbmQgY29uZmlndXJpbmcgdGhlCisgICAgYm9vdGxvYWRlciBmaWxlcy4KKworICAgIEV4YW1wbGUga2lja3N0YXJ0IGZpbGU6CisgICAgcGFydCAvYm9vdCAtLXNvdXJjZSBpc29pbWFnZS1pc29oeWJyaWQgLS1zb3VyY2VwYXJhbXM9ImxvYWRlcj1ncnViLWVmaSwgXFwKKyAgICBpbWFnZV9uYW1lPSBJc29JbWFnZSIgLS1vbmRpc2sgY2QgLS1sYWJlbCBMSVZFQ0QgLS1mc3R5cGU9ZXh0MgorICAgIGJvb3Rsb2FkZXIgIC0tdGltZW91dD0xMCAgLS1hcHBlbmQ9IiAiCisKKyAgICBJbiAtLXNvdXJjZXBhcmFtcyAibG9hZGVyIiBzcGVjaWZpZXMgdGhlIGJvb3Rsb2FkZXIgdXNlZCBmb3IgYm9vdGluZyBpbiBFRkkKKyAgICBtb2RlLCB3aGlsZSAiaW1hZ2VfbmFtZSIgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBnZW5lcmF0ZWQgaW1hZ2UuIEluIHRoZQorICAgIGV4YW1wbGUgYWJvdmUsIHdpYyBjcmVhdGVzIGFuIElTTyBpbWFnZSBuYW1lZCBJc29JbWFnZS1jZC5kaXJlY3QgKGRlZmF1bHQKKyAgICBleHRlbnNpb24gYWRkZWQgYnkgZGlyZWN0IGltZWdlciBwbHVnaW4pIGFuZCBhIGZpbGUgbmFtZWQgSXNvSW1hZ2UtY2QuaXNvCisgICAgIiIiCisKKyAgICBuYW1lID0gJ2lzb2ltYWdlLWlzb2h5YnJpZCcKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19jb25maWd1cmVfc3lzbGludXgoY2xzLCBjcmVhdG9yLCBjcl93b3JrZGlyKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBsb2FkZXItc3BlY2lmaWMgKHN5c2xpbnV4KSBjb25maWcKKyAgICAgICAgIiIiCisgICAgICAgIHNwbGFzaCA9IG9zLnBhdGguam9pbihjcl93b3JrZGlyLCAiL0lTTy9ib290L3NwbGFzaC5qcGciKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzcGxhc2gpOgorICAgICAgICAgICAgc3BsYXNobGluZSA9ICJtZW51IGJhY2tncm91bmQgc3BsYXNoLmpwZyIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNwbGFzaGxpbmUgPSAiIgorCisgICAgICAgIG9wdGlvbnMgPSBjcmVhdG9yLmtzLmhhbmRsZXIuYm9vdGxvYWRlci5hcHBlbmRMaW5lCisKKyAgICAgICAgdGltZW91dCA9IGtpY2tzdGFydC5nZXRfdGltZW91dChjcmVhdG9yLmtzLCAxMCkKKworICAgICAgICBzeXNsaW51eF9jb25mID0gIiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiUFJPTVBUIDBcbiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiVElNRU9VVCAlcyBcbiIgJSB0aW1lb3V0CisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIlxuIgorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJBTExPV09QVElPTlMgMVxuIgorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJTRVJJQUwgMCAxMTUyMDBcbiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiXG4iCisgICAgICAgIGlmIHNwbGFzaGxpbmU6CisgICAgICAgICAgICBzeXNsaW51eF9jb25mICs9ICIlc1xuIiAlIHNwbGFzaGxpbmUKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiREVGQVVMVCBib290XG4iCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIkxBQkVMIGJvb3RcbiIKKworICAgICAgICBrZXJuZWwgPSAiL2J6SW1hZ2UiCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIktFUk5FTCAiICsga2VybmVsICsgIlxuIgorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJBUFBFTkQgaW5pdHJkPS9pbml0cmQgTEFCRUw9Ym9vdCAlc1xuIiAlIG9wdGlvbnMKKworICAgICAgICBtc2dlci5kZWJ1ZygiV3JpdGluZyBzeXNsaW51eCBjb25maWcgJXMvSVNPL2lzb2xpbnV4L2lzb2xpbnV4LmNmZyIgXAorICAgICAgICAgICAgICAgICAgICAlIGNyX3dvcmtkaXIpCisgICAgICAgIHdpdGggb3BlbigiJXMvSVNPL2lzb2xpbnV4L2lzb2xpbnV4LmNmZyIgJSBjcl93b3JrZGlyLCAidyIpIGFzIGNmZzoKKyAgICAgICAgICAgIGNmZy53cml0ZShzeXNsaW51eF9jb25mKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX2NvbmZpZ3VyZV9ncnViZWZpKGNscywgcGFydCwgY3JlYXRvciwgY3Jfd29ya2Rpcik6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgbG9hZGVyLXNwZWNpZmljIChncnViLWVmaSkgY29uZmlnCisgICAgICAgICIiIgorICAgICAgICBzcGxhc2ggPSBvcy5wYXRoLmpvaW4oY3Jfd29ya2RpciwgIi9FRkkvYm9vdC9zcGxhc2guanBnIikKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3BsYXNoKToKKyAgICAgICAgICAgIHNwbGFzaGxpbmUgPSAibWVudSBiYWNrZ3JvdW5kIHNwbGFzaC5qcGciCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzcGxhc2hsaW5lID0gIiIKKworICAgICAgICBvcHRpb25zID0gY3JlYXRvci5rcy5oYW5kbGVyLmJvb3Rsb2FkZXIuYXBwZW5kTGluZQorCisgICAgICAgIGdydWJlZmlfY29uZiA9ICIiCisgICAgICAgIGdydWJlZmlfY29uZiArPSAic2VyaWFsIC0tdW5pdD0wIC0tc3BlZWQ9MTE1MjAwIC0td29yZD04ICIKKyAgICAgICAgZ3J1YmVmaV9jb25mICs9ICItLXBhcml0eT1ubyAtLXN0b3A9MVxuIgorICAgICAgICBncnViZWZpX2NvbmYgKz0gImRlZmF1bHQ9Ym9vdFxuIgorICAgICAgICB0aW1lb3V0ID0ga2lja3N0YXJ0LmdldF90aW1lb3V0KGNyZWF0b3Iua3MsIDEwKQorICAgICAgICBncnViZWZpX2NvbmYgKz0gInRpbWVvdXQ9JXNcbiIgJSB0aW1lb3V0CisgICAgICAgIGdydWJlZmlfY29uZiArPSAiXG4iCisgICAgICAgIGdydWJlZmlfY29uZiArPSAic2VhcmNoIC0tc2V0PXJvb3QgLS1sYWJlbCAlcyAiICUgcGFydC5sYWJlbAorICAgICAgICBncnViZWZpX2NvbmYgKz0gIlxuIgorICAgICAgICBncnViZWZpX2NvbmYgKz0gIm1lbnVlbnRyeSAnYm9vdCd7XG4iCisKKyAgICAgICAga2VybmVsID0gIi9iekltYWdlIgorCisgICAgICAgIGdydWJlZmlfY29uZiArPSAibGludXggJXMgcm9vdHdhaXQgJXNcbiIgXAorICAgICAgICAgICAgJSAoa2VybmVsLCBvcHRpb25zKQorICAgICAgICBncnViZWZpX2NvbmYgKz0gImluaXRyZCAvaW5pdHJkIFxuIgorICAgICAgICBncnViZWZpX2NvbmYgKz0gIn1cbiIKKworICAgICAgICBpZiBzcGxhc2hsaW5lOgorICAgICAgICAgICAgZ3J1YmVmaV9jb25mICs9ICIlc1xuIiAlIHNwbGFzaGxpbmUKKworICAgICAgICBtc2dlci5kZWJ1ZygiV3JpdGluZyBncnViZWZpIGNvbmZpZyAlcy9FRkkvQk9PVC9ncnViLmNmZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgJSBjcl93b3JrZGlyKQorICAgICAgICB3aXRoIG9wZW4oIiVzL0VGSS9CT09UL2dydWIuY2ZnIiAlIGNyX3dvcmtkaXIsICJ3IikgYXMgY2ZnOgorICAgICAgICAgICAgY2ZnLndyaXRlKGdydWJlZmlfY29uZikKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2J1aWxkX2luaXRyYW1mc19wYXRoKHJvb3Rmc19kaXIsIGNyX3dvcmtkaXIpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIHBhdGggZm9yIGluaXRyYW1mcyBpbWFnZQorICAgICAgICAiIiIKKworICAgICAgICBpbml0cmQgPSBnZXRfYml0YmFrZV92YXIoIklOSVRSRCIpCisgICAgICAgIGlmIG5vdCBpbml0cmQ6CisgICAgICAgICAgICBpbml0cmRfZGlyID0gZ2V0X2JpdGJha2VfdmFyKCJERVBMT1lfRElSX0lNQUdFIikKKyAgICAgICAgICAgIGlmIG5vdCBpbml0cmRfZGlyOgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJDb3VsZG4ndCBmaW5kIERFUExPWV9ESVJfSU1BR0UsIGV4aXRpbmcuXG4iKQorCisgICAgICAgICAgICBpbWFnZV9uYW1lID0gZ2V0X2JpdGJha2VfdmFyKCJJTUFHRV9CQVNFTkFNRSIpCisgICAgICAgICAgICBpZiBub3QgaW1hZ2VfbmFtZToKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCBJTUFHRV9CQVNFTkFNRSwgZXhpdGluZy5cbiIpCisKKyAgICAgICAgICAgIGltYWdlX3R5cGUgPSBnZXRfYml0YmFrZV92YXIoIklOSVRSQU1GU19GU1RZUEVTIikKKyAgICAgICAgICAgIGlmIG5vdCBpbWFnZV90eXBlOgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJDb3VsZG4ndCBmaW5kIElOSVRSQU1GU19GU1RZUEVTLCBleGl0aW5nLlxuIikKKworICAgICAgICAgICAgbWFjaGluZV9hcmNoID0gZ2V0X2JpdGJha2VfdmFyKCJNQUNISU5FX0FSQ0giKQorICAgICAgICAgICAgaWYgbm90IG1hY2hpbmVfYXJjaDoKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCBNQUNISU5FX0FSQ0gsIGV4aXRpbmcuXG4iKQorCisgICAgICAgICAgICBpbml0cmQgPSAiJXMvJXMtaW5pdHJhbWZzLSVzLiVzIiBcCisgICAgICAgICAgICAgICAgICAgICUgKGluaXRyZF9kaXIsIGltYWdlX25hbWUsIG1hY2hpbmVfYXJjaCwgaW1hZ2VfdHlwZSkKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoaW5pdHJkKToKKyAgICAgICAgICAgICMgQ3JlYXRlIGluaXRyZCBmcm9tIHJvb3RmcyBkaXJlY3RvcnkKKyAgICAgICAgICAgIGluaXRyZCA9ICIlcy9pbml0cmQuY3Bpby5neiIgJSBjcl93b3JrZGlyCisgICAgICAgICAgICBpbml0cmRfZGlyID0gIiVzL0lOSVRSRCIgJSBjcl93b3JrZGlyCisgICAgICAgICAgICBzaHV0aWwuY29weXRyZWUoIiVzIiAlIHJvb3Rmc19kaXIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiICUgaW5pdHJkX2Rpciwgc3ltbGlua3M9VHJ1ZSkKKworICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoIiVzL2luaXQiICUgcm9vdGZzX2Rpcik6CisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkyKCIlcy9pbml0IiAlIHJvb3Rmc19kaXIsICIlcy9pbml0IiAlIGluaXRyZF9kaXIpCisgICAgICAgICAgICBlbGlmIG9zLnBhdGgubGV4aXN0cygiJXMvaW5pdCIgJSByb290ZnNfZGlyKToKKyAgICAgICAgICAgICAgICBvcy5zeW1saW5rKG9zLnJlYWRsaW5rKCIlcy9pbml0IiAlIHJvb3Rmc19kaXIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzL2luaXQiICUgaW5pdHJkX2RpcikKKyAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2ZpbGUoIiVzL3NiaW4vaW5pdCIgJSByb290ZnNfZGlyKToKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weTIoIiVzL3NiaW4vaW5pdCIgJSByb290ZnNfZGlyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiAlIGluaXRyZF9kaXIpCisgICAgICAgICAgICBlbGlmIG9zLnBhdGgubGV4aXN0cygiJXMvc2Jpbi9pbml0IiAlIHJvb3Rmc19kaXIpOgorICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsob3MucmVhZGxpbmsoIiVzL3NiaW4vaW5pdCIgJSByb290ZnNfZGlyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcy9pbml0IiAlIGluaXRyZF9kaXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJDb3VsZG4ndCBmaW5kIG9yIGJ1aWxkIGluaXRyZCwgZXhpdGluZy5cbiIpCisKKyAgICAgICAgICAgIGV4ZWNfY21kKCJjZCAlcyAmJiBmaW5kIC4gfCBjcGlvIC1vIC1IIG5ld2MgPiVzL2luaXRyZC5jcGlvICIgXAorICAgICAgICAgICAgICAgICAgICAlIChpbml0cmRfZGlyLCBjcl93b3JrZGlyKSwgYXNfc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIGV4ZWNfY21kKCJnemlwIC1mIC05IC1jICVzL2luaXRyZC5jcGlvID4gJXMiIFwKKyAgICAgICAgICAgICAgICAgICAgJSAoY3Jfd29ya2RpciwgaW5pdHJkKSwgYXNfc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoaW5pdHJkX2RpcikKKworICAgICAgICByZXR1cm4gaW5pdHJkCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fc3RhZ2VfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgY3JlYXRvciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lX2J1aWxkZGlyLCBib290aW1nX2Rpciwga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIFNwZWNpYWwgY29udGVudCBzdGFnaW5nIGNhbGxlZCBiZWZvcmUgZG9fcHJlcGFyZV9wYXJ0aXRpb24oKS4KKyAgICAgICAgSXQgY2hla3MgaWYgYWxsIG5lY2Vzc2FyeSB0b29scyBhcmUgYXZhaWxhYmxlLCBpZiBub3QKKyAgICAgICAgdHJpZXMgdG8gaW5zdGFsIHRoZW0uCisgICAgICAgICIiIgorICAgICAgICAjIE1ha2Ugc3VyZSBwYXJ0ZWQgaXMgYXZhaWxhYmxlIGluIG5hdGl2ZSBzeXNyb290CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZSgiJXMvdXNyL3NiaW4vcGFydGVkIiAlIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgICAgIG1zZ2VyLmluZm8oIkJ1aWxkaW5nIHBhcnRlZC1uYXRpdmUuLi5cbiIpCisgICAgICAgICAgICBleGVjX2NtZCgiYml0YmFrZSBwYXJ0ZWQtbmF0aXZlIikKKworICAgICAgICAjIE1ha2Ugc3VyZSBta2ZzLmV4dDIvMy80IGlzIGF2YWlsYWJsZSBpbiBuYXRpdmUgc3lzcm9vdAorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoIiVzL3NiaW4vbWtmcy5leHQyIiAlIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgICAgIG1zZ2VyLmluZm8oIkJ1aWxkaW5nIGUyZnNwcm9ncy1uYXRpdmUuLi5cbiIpCisgICAgICAgICAgICBleGVjX2NtZCgiYml0YmFrZSBlMmZzcHJvZ3MtbmF0aXZlIikKKworICAgICAgICAjIE1ha2Ugc3VyZSBzeXNsaW51eCBpcyBhdmFpbGFibGUgaW4gc3lzcm9vdCBhbmQgaW4gbmF0aXZlIHN5c3Jvb3QKKyAgICAgICAgc3lzbGludXhfZGlyID0gZ2V0X2JpdGJha2VfdmFyKCJTVEFHSU5HX0RBVEFESVIiKQorICAgICAgICBpZiBub3Qgc3lzbGludXhfZGlyOgorICAgICAgICAgICAgbXNnZXIuZXJyb3IoIkNvdWxkbid0IGZpbmQgU1RBR0lOR19EQVRBRElSLCBleGl0aW5nLlxuIikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKCIlcy9zeXNsaW51eCIgJSBzeXNsaW51eF9kaXIpOgorICAgICAgICAgICAgbXNnZXIuaW5mbygiQnVpbGRpbmcgc3lzbGludXguLi5cbiIpCisgICAgICAgICAgICBleGVjX2NtZCgiYml0YmFrZSBzeXNsaW51eCIpCisgICAgICAgICAgICBtc2dlci5pbmZvKCJCdWlsZGluZyBzeXNsaW51eC1uYXRpdmUuLi5cbiIpCisgICAgICAgICAgICBleGVjX2NtZCgiYml0YmFrZSBzeXNsaW51eC1uYXRpdmUiKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoIiVzL3N5c2xpbnV4IiAlIHN5c2xpbnV4X2Rpcik6CisgICAgICAgICAgICBtc2dlci5lcnJvcigiUGxlYXNlIGJ1aWxkIHN5c2xpbnV4IGZpcnN0XG4iKQorCisgICAgICAgICNNYWtlIHN1cmUgbWtpc29mcyBpcyBhdmFpbGFibGUgaW4gbmF0aXZlIHN5c3Jvb3QKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKCIlcy91c3IvYmluL21raXNvZnMiICUgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAgICAgbXNnZXIuaW5mbygiQnVpbGRpbmcgY2RydG9vbHMtbmF0aXZlLi4uXG4iKQorICAgICAgICAgICAgZXhlY19jbWQoImJpdGJha2UgY2RydG9vbHMtbmF0aXZlIikKKworICAgICAgICAjIE1ha2Ugc3VyZSBta2ZzLnZmYXQgaXMgYXZhaWxhYmxlIGluIG5hdGl2ZSBzeXNyb290CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZSgiJXMvc2Jpbi9ta2ZzLnZmYXQiICUgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAgICAgbXNnZXIuaW5mbygiQnVpbGRpbmcgZG9zZnN0b29scy1uYXRpdmUuLi5cbiIpCisgICAgICAgICAgICBleGVjX2NtZCgiYml0YmFrZSBkb3Nmc3Rvb2xzLW5hdGl2ZSIpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgbXRvb2xzIGlzIGF2YWlsYWJsZSBpbiBuYXRpdmUgc3lzcm9vdAorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoIiVzL3Vzci9iaW4vbWNvcHkiICUgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAgICAgbXNnZXIuaW5mbygiQnVpbGRpbmcgbXRvb2xzLW5hdGl2ZS4uLlxuIikKKyAgICAgICAgICAgIGV4ZWNfY21kKCJiaXRiYWtlIG10b29scy1uYXRpdmUiKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX2NvbmZpZ3VyZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBjcmVhdG9yLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lX2J1aWxkZGlyLCBib290aW1nX2Rpciwga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgYmVmb3JlIGRvX3ByZXBhcmVfcGFydGl0aW9uKCksIGNyZWF0ZXMgbG9hZGVyLXNwZWNpZmljIGNvbmZpZworICAgICAgICAiIiIKKyAgICAgICAgaXNvZGlyID0gIiVzL0lTTy8iICUgY3Jfd29ya2RpcgorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNyX3dvcmtkaXIpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShjcl93b3JrZGlyKQorCisgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLWQgJXMgIiAlIGlzb2RpcgorICAgICAgICBleGVjX2NtZChpbnN0YWxsX2NtZCkKKworICAgICAgICAjIE92ZXJ3cml0ZSB0aGUgbmFtZSBvZiB0aGUgY3JlYXRlZCBpbWFnZQorICAgICAgICBtc2dlci5kZWJ1ZygiJXMiICUgc291cmNlX3BhcmFtcykKKyAgICAgICAgaWYgJ2ltYWdlX25hbWUnIGluIHNvdXJjZV9wYXJhbXMgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgc291cmNlX3BhcmFtc1snaW1hZ2VfbmFtZSddLnN0cmlwKCk6CisgICAgICAgICAgICBjcmVhdG9yLm5hbWUgPSBzb3VyY2VfcGFyYW1zWydpbWFnZV9uYW1lJ10uc3RyaXAoKQorICAgICAgICAgICAgbXNnZXIuZGVidWcoIlRoZSBuYW1lIG9mIHRoZSBpbWFnZSBpczogJXMiICUgY3JlYXRvci5uYW1lKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX3ByZXBhcmVfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgY3JlYXRvciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290ZnNfZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgdG8gZG8gdGhlIGFjdHVhbCBjb250ZW50IHBvcHVsYXRpb24gZm9yIGEgcGFydGl0aW9uIGkuZS4gaXQKKyAgICAgICAgJ3ByZXBhcmVzJyB0aGUgcGFydGl0aW9uIHRvIGJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBpbWFnZS4KKyAgICAgICAgSW4gdGhpcyBjYXNlLCBwcmVwYXJlIGNvbnRlbnQgZm9yIGEgYm9vdGFibGUgSVNPIGltYWdlLgorICAgICAgICAiIiIKKworICAgICAgICBpc29kaXIgPSAiJXMvSVNPIiAlIGNyX3dvcmtkaXIKKworICAgICAgICBpZiBwYXJ0LnJvb3RmcyBpcyBOb25lOgorICAgICAgICAgICAgaWYgbm90ICdST09URlNfRElSJyBpbiByb290ZnNfZGlyOgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJDb3VsZG4ndCBmaW5kIC0tcm9vdGZzLWRpciwgZXhpdGluZy5cbiIpCisgICAgICAgICAgICByb290ZnNfZGlyID0gcm9vdGZzX2RpclsnUk9PVEZTX0RJUiddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBwYXJ0LnJvb3RmcyBpbiByb290ZnNfZGlyOgorICAgICAgICAgICAgICAgIHJvb3Rmc19kaXIgPSByb290ZnNfZGlyW3BhcnQucm9vdGZzXQorICAgICAgICAgICAgZWxpZiBwYXJ0LnJvb3RmczoKKyAgICAgICAgICAgICAgICByb290ZnNfZGlyID0gcGFydC5yb290ZnMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbXNnID0gIkNvdWxkbid0IGZpbmQgLS1yb290ZnMtZGlyPSVzIGNvbm5lY3Rpb24gIgorICAgICAgICAgICAgICAgIG1zZyArPSAib3IgaXQgaXMgbm90IGEgdmFsaWQgcGF0aCwgZXhpdGluZy5cbiIKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcihtc2cgJSBwYXJ0LnJvb3RmcykKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihyb290ZnNfZGlyKToKKyAgICAgICAgICAgIHJvb3Rmc19kaXIgPSBnZXRfYml0YmFrZV92YXIoIklNQUdFX1JPT1RGUyIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHJvb3Rmc19kaXIpOgorICAgICAgICAgICAgbXNnZXIuZXJyb3IoIkNvdWxkbid0IGZpbmQgSU1BR0VfUk9PVEZTLCBleGl0aW5nLlxuIikKKworICAgICAgICBwYXJ0LnNldF9yb290ZnMocm9vdGZzX2RpcikKKworICAgICAgICAjIFByZXBhcmUgcm9vdGZzLmltZworICAgICAgICBoZGRfZGlyID0gZ2V0X2JpdGJha2VfdmFyKCJIRERESVIiKQorICAgICAgICBpbWdfaXNvX2RpciA9IGdldF9iaXRiYWtlX3ZhcigiSVNPRElSIikKKworICAgICAgICByb290ZnNfaW1nID0gIiVzL3Jvb3Rmcy5pbWciICUgaGRkX2RpcgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUocm9vdGZzX2ltZyk6CisgICAgICAgICAgICByb290ZnNfaW1nID0gIiVzL3Jvb3Rmcy5pbWciICUgaW1nX2lzb19kaXIKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKHJvb3Rmc19pbWcpOgorICAgICAgICAgICAgIyBjaGVjayBpZiByb290ZnMuaW1nIGlzIGluIGRlcGxveWRpcgorICAgICAgICAgICAgZGVwbG95X2RpciA9IGdldF9iaXRiYWtlX3ZhcigiREVQTE9ZX0RJUl9JTUFHRSIpCisgICAgICAgICAgICBpbWFnZV9uYW1lID0gZ2V0X2JpdGJha2VfdmFyKCJJTUFHRV9MSU5LX05BTUUiKQorICAgICAgICAgICAgcm9vdGZzX2ltZyA9ICIlcy8lcy4lcyIgXAorICAgICAgICAgICAgICAgICUgKGRlcGxveV9kaXIsIGltYWdlX25hbWUsIHBhcnQuZnN0eXBlKQorCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShyb290ZnNfaW1nKToKKyAgICAgICAgICAgICMgY3JlYXRlIGltYWdlIGZpbGUgd2l0aCB0eXBlIHNwZWNpZmllZCBieSAtLWZzdHlwZQorICAgICAgICAgICAgIyB3aGljaCBjb250YWlucyByb290ZnMKKyAgICAgICAgICAgIGR1X2NtZCA9ICJkdSAtYmtzICVzIiAlIHJvb3Rmc19kaXIKKyAgICAgICAgICAgIG91dCA9IGV4ZWNfY21kKGR1X2NtZCkKKyAgICAgICAgICAgIHBhcnQuc2V0X3NpemUoaW50KG91dC5zcGxpdCgpWzBdKSkKKyAgICAgICAgICAgIHBhcnQuZXh0cmFfc3BhY2UgPSAwCisgICAgICAgICAgICBwYXJ0Lm92ZXJoZWFkX2ZhY3RvciA9IDEuMgorICAgICAgICAgICAgcGFydC5wcmVwYXJlX3Jvb3Rmcyhjcl93b3JrZGlyLCBvZV9idWlsZGRpciwgcm9vdGZzX2RpciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCkKKyAgICAgICAgICAgIHJvb3Rmc19pbWcgPSBwYXJ0LnNvdXJjZV9maWxlCisKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtbSAwNjQ0ICVzICVzL3Jvb3Rmcy5pbWciIFwKKyAgICAgICAgICAgICUgKHJvb3Rmc19pbWcsIGlzb2RpcikKKyAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgIyBSZW1vdmUgdGhlIHRlbXBvcmFyeSBmaWxlIGNyZWF0ZWQgYnkgcGFydC5wcmVwYXJlX3Jvb3RmcygpCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHBhcnQuc291cmNlX2ZpbGUpOgorICAgICAgICAgICAgb3MucmVtb3ZlKHBhcnQuc291cmNlX2ZpbGUpCisKKyAgICAgICAgIyBQcmVwYXJlIGluaXRpYWwgcmFtZGlzaworICAgICAgICBpbml0cmQgPSAiJXMvaW5pdHJkIiAlIGhkZF9kaXIKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGluaXRyZCk6CisgICAgICAgICAgICBpbml0cmQgPSAiJXMvaW5pdHJkIiAlIGltZ19pc29fZGlyCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShpbml0cmQpOgorICAgICAgICAgICAgaW5pdHJkID0gY2xzLl9idWlsZF9pbml0cmFtZnNfcGF0aChyb290ZnNfZGlyLCBjcl93b3JrZGlyKQorCisgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLW0gMDY0NCAlcyAlcy9pbml0cmQiIFwKKyAgICAgICAgICAgICUgKGluaXRyZCwgaXNvZGlyKQorICAgICAgICBleGVjX2NtZChpbnN0YWxsX2NtZCkKKworICAgICAgICAjIFJlbW92ZSB0aGUgdGVtcG9yYXJ5IGZpbGUgY3JlYXRlZCBieSBfYnVpbGRfaW5pdHJhbWZzX3BhdGggZnVuY3Rpb24KKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoIiVzL2luaXRyZC5jcGlvLmd6IiAlIGNyX3dvcmtkaXIpOgorICAgICAgICAgICAgb3MucmVtb3ZlKCIlcy9pbml0cmQuY3Bpby5neiIgJSBjcl93b3JrZGlyKQorCisgICAgICAgICMgSW5zdGFsbCBiekltYWdlCisgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLW0gMDY0NCAlcy9iekltYWdlICVzL2J6SW1hZ2UiICUgXAorICAgICAgICAgICAgKGtlcm5lbF9kaXIsIGlzb2RpcikKKyAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgI0NyZWF0ZSBib290bG9hZGVyIGZvciBlZmkgYm9vdAorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzb3VyY2VfcGFyYW1zWydsb2FkZXInXSA9PSAnZ3J1Yi1lZmknOgorICAgICAgICAgICAgICAgICMgQnVpbGRzIGdydWIuY2ZnIGlmIElTT0RJUiBkaWRuJ3QgZXhpc3Qgb3IKKyAgICAgICAgICAgICAgICAjIGRpZG4ndCBjb250YWlucyBncnViLmNmZworICAgICAgICAgICAgICAgIGJvb3RpbWdfZGlyID0gaW1nX2lzb19kaXIKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoIiVzL0VGSS9CT09UIiAlIGJvb3RpbWdfZGlyKToKKyAgICAgICAgICAgICAgICAgICAgYm9vdGltZ19kaXIgPSAiJXMvYm9vdGltZyIgJSBjcl93b3JrZGlyCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGJvb3RpbWdfZGlyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoYm9vdGltZ19kaXIpCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLWQgJXMvRUZJL0JPT1QiICUgYm9vdGltZ19kaXIKKyAgICAgICAgICAgICAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoIiVzL0VGSS9CT09UL2Jvb3QuY2ZnIiAlIGJvb3RpbWdfZGlyKToKKyAgICAgICAgICAgICAgICAgICAgY2xzLmRvX2NvbmZpZ3VyZV9ncnViZWZpKHBhcnQsIGNyZWF0b3IsIGJvb3RpbWdfZGlyKQorCisgICAgICAgICAgICAgICAgIyBCdWlsZHMgYm9vdHg2NC5lZmkvYm9vdGlhMzIuZWZpIGlmIElTT0RJUiBkaWRuJ3QgZXhpc3Qgb3IKKyAgICAgICAgICAgICAgICAjIGRpZG4ndCBjb250YWlucyBpdAorICAgICAgICAgICAgICAgIHRhcmdldF9hcmNoID0gZ2V0X2JpdGJha2VfdmFyKCJUQVJHRVRfU1lTIikKKyAgICAgICAgICAgICAgICBpZiBub3QgdGFyZ2V0X2FyY2g6CisgICAgICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJDb2x1ZG4ndCBmaW5kIHRhcmdldCBhcmNoaXRlY3R1cmVcbiIpCisKKyAgICAgICAgICAgICAgICBpZiByZS5tYXRjaCgieDg2XzY0IiwgdGFyZ2V0X2FyY2gpOgorICAgICAgICAgICAgICAgICAgICBncnViX3RhcmdldCA9ICd4ODZfNjQtZWZpJworICAgICAgICAgICAgICAgICAgICBncnViX2ltYWdlID0gImJvb3R4NjQuZWZpIgorICAgICAgICAgICAgICAgIGVsaWYgcmUubWF0Y2goJ2kuODYnLCB0YXJnZXRfYXJjaCk6CisgICAgICAgICAgICAgICAgICAgIGdydWJfdGFyZ2V0ID0gJ2kzODYtZWZpJworICAgICAgICAgICAgICAgICAgICBncnViX2ltYWdlID0gImJvb3RpYTMyLmVmaSIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiZ3J1Yi1lZmkgaXMgaW5jb21wYXRpYmxlIHdpdGggdGFyZ2V0ICVzXG4iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSB0YXJnZXRfYXJjaCkKKworICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZSgiJXMvRUZJL0JPT1QvJXMiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoYm9vdGltZ19kaXIsIGdydWJfaW1hZ2UpKToKKyAgICAgICAgICAgICAgICAgICAgZ3J1Yl9wYXRoID0gZ2V0X2JpdGJha2VfdmFyKCJTVEFHSU5HX0xJQkRJUiIpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBncnViX3BhdGg6CisgICAgICAgICAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCBTVEFHSU5HX0xJQkRJUiwgZXhpdGluZy5cbiIpCisKKyAgICAgICAgICAgICAgICAgICAgZ3J1Yl9jb3JlID0gIiVzL2dydWIvJXMiICUgKGdydWJfcGF0aCwgZ3J1Yl90YXJnZXQpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhncnViX2NvcmUpOgorICAgICAgICAgICAgICAgICAgICAgICAgbXNnZXIuaW5mbygiQnVpbGRpbmcgZ3J1Yi1lZmkuLi5cbiIpCisgICAgICAgICAgICAgICAgICAgICAgICBleGVjX2NtZCgiYml0YmFrZSBncnViLWVmaSIpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhncnViX2NvcmUpOgorICAgICAgICAgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoIlBsZWFzZSBidWlsZCBncnViLWVmaSBmaXJzdFxuIikKKworICAgICAgICAgICAgICAgICAgICBncnViX2NtZCA9ICJncnViLW1raW1hZ2UgLXAgJy9FRkkvQk9PVCcgIgorICAgICAgICAgICAgICAgICAgICBncnViX2NtZCArPSAiLWQgJXMgIiAgJSBncnViX2NvcmUKKyAgICAgICAgICAgICAgICAgICAgZ3J1Yl9jbWQgKz0gIi1PICVzIC1vICVzL0VGSS9CT09ULyVzICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChncnViX3RhcmdldCwgYm9vdGltZ19kaXIsIGdydWJfaW1hZ2UpCisgICAgICAgICAgICAgICAgICAgIGdydWJfY21kICs9ICJwYXJ0X2dwdCBwYXJ0X21zZG9zIG50ZnMgbnRmc2NvbXAgZmF0IGV4dDIgIgorICAgICAgICAgICAgICAgICAgICBncnViX2NtZCArPSAibm9ybWFsIGNoYWluIGJvb3QgY29uZmlnZmlsZSBsaW51eCBtdWx0aWJvb3QgIgorICAgICAgICAgICAgICAgICAgICBncnViX2NtZCArPSAic2VhcmNoIGVmaV9nb3AgZWZpX3VnYSBmb250IGdmeHRlcm0gZ2Z4bWVudSAiCisgICAgICAgICAgICAgICAgICAgIGdydWJfY21kICs9ICJ0ZXJtaW5hbCBtaW5pY21kIHRlc3QgaW9ydyBsb2FkZW52IGVjaG8gaGVscCAiCisgICAgICAgICAgICAgICAgICAgIGdydWJfY21kICs9ICJyZWJvb3Qgc2VyaWFsIHRlcm1pbmZvIGlzbzk2NjAgbG9vcGJhY2sgdGFyICIKKyAgICAgICAgICAgICAgICAgICAgZ3J1Yl9jbWQgKz0gIm1lbWRpc2sgbHMgc2VhcmNoX2ZzX3V1aWQgdWRmIGJ0cmZzIHhmcyBsdm0gIgorICAgICAgICAgICAgICAgICAgICBncnViX2NtZCArPSAicmVpc2VyZnMgYXRhICIKKyAgICAgICAgICAgICAgICAgICAgZXhlY19uYXRpdmVfY21kKGdydWJfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFRPRE86IGluc2VydCBndW1taWJvb3Qgc3R1ZmYKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigidW5yZWNvZ25pemVkIGJvb3RpbWctZWZpIGxvYWRlcjogJXMiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHNvdXJjZV9wYXJhbXNbJ2xvYWRlciddKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBtc2dlci5lcnJvcigiYm9vdGltZy1lZmkgcmVxdWlyZXMgYSBsb2FkZXIsIG5vbmUgc3BlY2lmaWVkIikKKworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygiJXMvRUZJL0JPT1QiICUgaXNvZGlyKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoIiVzL0VGSS9CT09UIiAlIGlzb2RpcikKKworICAgICAgICBzaHV0aWwuY29weXRyZWUoYm9vdGltZ19kaXIrIi9FRkkvQk9PVCIsIGlzb2RpcisiL0VGSS9CT09UIikKKworICAgICAgICAjIElmIGV4aXN0cywgcmVtb3ZlIGNyX3dvcmtkaXIvYm9vdGltZyB0ZW1wb3JhcnkgZm9sZGVyCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCIlcy9ib290aW1nIiAlIGNyX3dvcmtkaXIpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSgiJXMvYm9vdGltZyIgJSBjcl93b3JrZGlyKQorCisgICAgICAgICMgQ3JlYXRlIGVmaS5pbWcgdGhhdCBjb250YWlucyBib290bG9hZGVyIGZpbGVzIGZvciBFRkkgYm9vdGluZworICAgICAgICAjIGlmIElTT0RJUiBkaWRuJ3QgZXhpc3Qgb3IgZGlkbid0IGNvbnRhaW5zIGl0CisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKCIlcy9lZmkuaW1nIiAlIGltZ19pc29fZGlyKToKKyAgICAgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLW0gMDY0NCAlcy9lZmkuaW1nICVzL2VmaS5pbWciICUgXAorICAgICAgICAgICAgICAgIChpbWdfaXNvX2RpciwgaXNvZGlyKQorICAgICAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkdV9jbWQgPSAiZHUgLWJrcyAlcy9FRkkiICUgaXNvZGlyCisgICAgICAgICAgICBvdXQgPSBleGVjX2NtZChkdV9jbWQpCisgICAgICAgICAgICBibG9ja3MgPSBpbnQob3V0LnNwbGl0KClbMF0pCisgICAgICAgICAgICAjIEFkZCBzb21lIGV4dHJhIHNwYWNlIGZvciBmaWxlIHN5c3RlbSBvdmVyaGVhZAorICAgICAgICAgICAgYmxvY2tzICs9IDEwMAorICAgICAgICAgICAgbXNnID0gIkFkZGVkIDEwMCBleHRyYSBibG9ja3MgdG8gJXMgdG8gZ2V0IHRvICVkIHRvdGFsIGJsb2NrcyIgXAorICAgICAgICAgICAgICAgICAgICAlIChwYXJ0Lm1vdW50cG9pbnQsIGJsb2NrcykKKyAgICAgICAgICAgIG1zZ2VyLmRlYnVnKG1zZykKKworICAgICAgICAgICAgIyBFbnN1cmUgdG90YWwgc2VjdG9ycyBpcyBhbiBpbnRlZ3JhbCBudW1iZXIgb2Ygc2VjdG9ycyBwZXIKKyAgICAgICAgICAgICMgdHJhY2sgb3IgbWNvcHkgd2lsbCBjb21wbGFpbi4gU2VjdG9ycyBhcmUgNTEyIGJ5dGVzLCBhbmQgd2UKKyAgICAgICAgICAgICMgZ2VuZXJhdGUgaW1hZ2VzIHdpdGggMzIgc2VjdG9ycyBwZXIgdHJhY2suIFRoaXMgY2FsY3VsYXRpb24gaXMKKyAgICAgICAgICAgICMgZG9uZSBpbiBibG9ja3MsIHRodXMgdGhlIG1vZCBieSAxNiBpbnN0ZWFkIG9mIDMyLgorICAgICAgICAgICAgYmxvY2tzICs9ICgxNiAtIChibG9ja3MgJSAxNikpCisKKyAgICAgICAgICAgICMgZG9zZnMgaW1hZ2UgZm9yIEVGSSBib290CisgICAgICAgICAgICBib290aW1nID0gIiVzL2VmaS5pbWciICUgaXNvZGlyCisKKyAgICAgICAgICAgIGRvc2ZzX2NtZCA9ICdta2ZzLnZmYXQgLW4gIkVGSWltZyIgLVMgNTEyIC1DICVzICVkJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAlIChib290aW1nLCBibG9ja3MpCisgICAgICAgICAgICBleGVjX25hdGl2ZV9jbWQoZG9zZnNfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgICAgICAgICAgbW1kX2NtZCA9ICJtbWQgLWkgJXMgOjovRUZJIiAlIGJvb3RpbWcKKyAgICAgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChtbWRfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgICAgICAgICAgbWNvcHlfY21kID0gIm1jb3B5IC1pICVzIC1zICVzL0VGSS8qIDo6L0VGSS8iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKGJvb3RpbWcsIGlzb2RpcikKKyAgICAgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChtY29weV9jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgICAgICAgICBjaG1vZF9jbWQgPSAiY2htb2QgNjQ0ICVzIiAlIGJvb3RpbWcKKyAgICAgICAgICAgIGV4ZWNfY21kKGNobW9kX2NtZCkKKworICAgICAgICAjIFByZXBhcmUgZmlsZXMgZm9yIGxlZ2FjeSBib290CisgICAgICAgIHN5c2xpbnV4X2RpciA9IGdldF9iaXRiYWtlX3ZhcigiU1RBR0lOR19EQVRBRElSIikKKyAgICAgICAgaWYgbm90IHN5c2xpbnV4X2RpcjoKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJDb3VsZG4ndCBmaW5kIFNUQUdJTkdfREFUQURJUiwgZXhpdGluZy5cbiIpCisKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoIiVzL2lzb2xpbnV4IiAlIGlzb2Rpcik6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKCIlcy9pc29saW51eCIgJSBpc29kaXIpCisKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtZCAlcy9pc29saW51eCIgJSBpc29kaXIKKyAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgY2xzLmRvX2NvbmZpZ3VyZV9zeXNsaW51eChjcmVhdG9yLCBjcl93b3JrZGlyKQorCisgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLW0gNDQ0ICVzL3N5c2xpbnV4L2xkbGludXguc3lzICIgJSBzeXNsaW51eF9kaXIKKyAgICAgICAgaW5zdGFsbF9jbWQgKz0gIiVzL2lzb2xpbnV4L2xkbGludXguc3lzIiAlIGlzb2RpcgorICAgICAgICBleGVjX2NtZChpbnN0YWxsX2NtZCkKKworICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1tIDQ0NCAlcy9zeXNsaW51eC9pc29oZHBmeC5iaW4gIiAlIHN5c2xpbnV4X2RpcgorICAgICAgICBpbnN0YWxsX2NtZCArPSAiJXMvaXNvbGludXgvaXNvaGRwZnguYmluIiAlIGlzb2RpcgorICAgICAgICBleGVjX2NtZChpbnN0YWxsX2NtZCkKKworICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1tIDY0NCAlcy9zeXNsaW51eC9pc29saW51eC5iaW4gIiAlIHN5c2xpbnV4X2RpcgorICAgICAgICBpbnN0YWxsX2NtZCArPSAiJXMvaXNvbGludXgvaXNvbGludXguYmluIiAlIGlzb2RpcgorICAgICAgICBleGVjX2NtZChpbnN0YWxsX2NtZCkKKworICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1tIDY0NCAlcy9zeXNsaW51eC9sZGxpbnV4LmMzMiAiICUgc3lzbGludXhfZGlyCisgICAgICAgIGluc3RhbGxfY21kICs9ICIlcy9pc29saW51eC9sZGxpbnV4LmMzMiIgJSBpc29kaXIKKyAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgI2NyZWF0ZSBJU08gaW1hZ2UKKyAgICAgICAgaXNvX2ltZyA9ICIlcy90ZW1waXNvX2ltZy5pc28iICUgY3Jfd29ya2RpcgorICAgICAgICBpc29fYm9vdGltZyA9ICJpc29saW51eC9pc29saW51eC5iaW4iCisgICAgICAgIGlzb19ib290Y2F0ID0gImlzb2xpbnV4L2Jvb3QuY2F0IgorICAgICAgICBlZmlfaW1nID0gImVmaS5pbWciCisKKyAgICAgICAgbWtpc29mc19jbWQgPSAibWtpc29mcyAtViAlcyAiICUgcGFydC5sYWJlbAorICAgICAgICBta2lzb2ZzX2NtZCArPSAiLW8gJXMgLVUgIiAlIGlzb19pbWcKKyAgICAgICAgbWtpc29mc19jbWQgKz0gIi1KIC1qb2xpZXQtbG9uZyAtciAtaXNvLWxldmVsIDIgLWIgJXMgIiAlIGlzb19ib290aW1nCisgICAgICAgIG1raXNvZnNfY21kICs9ICItYyAlcyAtbm8tZW11bC1ib290IC1ib290LWxvYWQtc2l6ZSA0ICIgJSBpc29fYm9vdGNhdAorICAgICAgICBta2lzb2ZzX2NtZCArPSAiLWJvb3QtaW5mby10YWJsZSAtZWx0b3JpdG8tYWx0LWJvb3QgIgorICAgICAgICBta2lzb2ZzX2NtZCArPSAiLWVsdG9yaXRvLXBsYXRmb3JtIDB4RUYgLWVsdG9yaXRvLWJvb3QgJXMgIiAlIGVmaV9pbWcKKyAgICAgICAgbWtpc29mc19jbWQgKz0gIi1uby1lbXVsLWJvb3QgJXMgIiAlIGlzb2RpcgorCisgICAgICAgIG1zZ2VyLmRlYnVnKCJydW5uaW5nIGNvbW1hbmQ6ICVzIiAlIG1raXNvZnNfY21kKQorICAgICAgICBleGVjX25hdGl2ZV9jbWQobWtpc29mc19jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgICAgIHNodXRpbC5ybXRyZWUoaXNvZGlyKQorCisgICAgICAgIGR1X2NtZCA9ICJkdSAtTGJrcyAlcyIgJSBpc29faW1nCisgICAgICAgIG91dCA9IGV4ZWNfY21kKGR1X2NtZCkKKyAgICAgICAgaXNvaW1nX3NpemUgPSBpbnQob3V0LnNwbGl0KClbMF0pCisKKyAgICAgICAgcGFydC5zZXRfc2l6ZShpc29pbWdfc2l6ZSkKKyAgICAgICAgcGFydC5zZXRfc291cmNlX2ZpbGUoaXNvX2ltZykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19pbnN0YWxsX2Rpc2soY2xzLCBkaXNrLCBkaXNrX25hbWUsIGNyZWF0b3IsIHdvcmtkaXIsIG9lX2J1aWxkZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCBhZnRlciBhbGwgcGFydGl0aW9ucyBoYXZlIGJlZW4gcHJlcGFyZWQgYW5kIGFzc2VtYmxlZCBpbnRvIGEKKyAgICAgICAgZGlzayBpbWFnZS4gIEluIHRoaXMgY2FzZSwgd2UgaW5zZXJ0L21vZGlmeSB0aGUgTUJSIHVzaW5nIGlzb2h5YnJpZAorICAgICAgICB1dGlsaXR5IGZvciBib290aW5nIHZpYSBCSU9TIGZyb20gZGlzayBzdG9yYWdlIGRldmljZXMuCisgICAgICAgICIiIgorCisgICAgICAgIGZ1bGxfcGF0aCA9IGNyZWF0b3IuX2Z1bGxfcGF0aCh3b3JrZGlyLCBkaXNrX25hbWUsICJkaXJlY3QiKQorICAgICAgICBpc29faW1nID0gIiVzLnAxIiAlIGZ1bGxfcGF0aAorICAgICAgICBmdWxsX3BhdGhfaXNvID0gY3JlYXRvci5fZnVsbF9wYXRoKHdvcmtkaXIsIGRpc2tfbmFtZSwgImlzbyIpCisKKyAgICAgICAgaXNvaHlicmlkX2NtZCA9ICJpc29oeWJyaWQgLXUgJXMiICUgaXNvX2ltZworICAgICAgICBtc2dlci5kZWJ1ZygicnVubmluZyBjb21tYW5kOiAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAgIGlzb2h5YnJpZF9jbWQpCisgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChpc29oeWJyaWRfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgICAgICAjIFJlcGxhY2UgdGhlIGltYWdlIGNyZWF0ZWQgYnkgZGlyZWN0IHBsdWdpbiB3aXRoIHRoZSBvbmUgY3JlYXRlZCBieQorICAgICAgICAjIG1raXNvZnMgY29tbWFuZC4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgaXNvIGltYWdlIGNyZWF0ZWQgYnkKKyAgICAgICAgIyBta2lzb2ZzIGhhcyBhIHZlcnkgc3BlY2lmaWMgTUJSIGlzIHN5c3RlbSBhcmVhIG9mIHRoZSBJU08gaW1hZ2UsIGFuZAorICAgICAgICAjIGRpcmVjdCBwbHVnaW4gYWRkcyBhbmQgY29uZmlndXJlcyBhbiBhbm90aGVyIE1CUi4KKyAgICAgICAgbXNnZXIuZGVidWcoIlJlcGxhY2VpbmcgdGhlIGltYWdlIGNyZWF0ZWQgYnkgZGlyZWN0IHBsdWdpblxuIikKKyAgICAgICAgb3MucmVtb3ZlKGZ1bGxfcGF0aCkKKyAgICAgICAgc2h1dGlsLmNvcHkyKGlzb19pbWcsIGZ1bGxfcGF0aF9pc28pCisgICAgICAgIHNodXRpbC5jb3B5MihmdWxsX3BhdGhfaXNvLCBmdWxsX3BhdGgpCisKKyAgICAgICAgIyBSZW1vdmUgdGVtcG9yYXJ5IElTTyBmaWxlCisgICAgICAgIG9zLnJlbW92ZShpc29faW1nKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvcmF3Y29weS5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL3Jhd2NvcHkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA2OTFiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL3Jhd2NvcHkucHkKQEAgLTAsMCArMSw4NyBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisKK2ltcG9ydCBvcworCitmcm9tIHdpYyBpbXBvcnQgbXNnZXIKK2Zyb20gd2ljLnBsdWdpbmJhc2UgaW1wb3J0IFNvdXJjZVBsdWdpbgorZnJvbSB3aWMudXRpbHMub2UubWlzYyBpbXBvcnQgZXhlY19jbWQsIGdldF9iaXRiYWtlX3ZhcgorCitjbGFzcyBSYXdDb3B5UGx1Z2luKFNvdXJjZVBsdWdpbik6CisgICAgIiIiCisgICAgUG9wdWxhdGUgcGFydGl0aW9uIGNvbnRlbnQgZnJvbSByYXcgaW1hZ2UgZmlsZS4KKyAgICAiIiIKKworICAgIG5hbWUgPSAncmF3Y29weScKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19pbnN0YWxsX2Rpc2soY2xzLCBkaXNrLCBkaXNrX25hbWUsIGNyLCB3b3JrZGlyLCBvZV9idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgYWZ0ZXIgYWxsIHBhcnRpdGlvbnMgaGF2ZSBiZWVuIHByZXBhcmVkIGFuZCBhc3NlbWJsZWQgaW50byBhCisgICAgICAgIGRpc2sgaW1hZ2UuIERvIG5vdGhpbmcuCisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fY29uZmlndXJlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGNyLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lX2J1aWxkZGlyLCBib290aW1nX2Rpciwga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgYmVmb3JlIGRvX3ByZXBhcmVfcGFydGl0aW9uKCkuIFBvc3NpYmx5IHByZXBhcmUKKyAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcyBvZiBzb21lIHNvcnQuCisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fcHJlcGFyZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBjciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290ZnNfZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgdG8gZG8gdGhlIGFjdHVhbCBjb250ZW50IHBvcHVsYXRpb24gZm9yIGEgcGFydGl0aW9uIGkuZS4gaXQKKyAgICAgICAgJ3ByZXBhcmVzJyB0aGUgcGFydGl0aW9uIHRvIGJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBpbWFnZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBib290aW1nX2RpcjoKKyAgICAgICAgICAgIGJvb3RpbWdfZGlyID0gZ2V0X2JpdGJha2VfdmFyKCJERVBMT1lfRElSX0lNQUdFIikKKyAgICAgICAgICAgIGlmIG5vdCBib290aW1nX2RpcjoKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCBERVBMT1lfRElSX0lNQUdFLCBleGl0aW5nXG4iKQorCisgICAgICAgIG1zZ2VyLmRlYnVnKCdCb290aW1nIGRpcjogJXMnICUgYm9vdGltZ19kaXIpCisKKyAgICAgICAgaWYgJ2ZpbGUnIG5vdCBpbiBzb3VyY2VfcGFyYW1zOgorICAgICAgICAgICAgbXNnZXIuZXJyb3IoIk5vIGZpbGUgc3BlY2lmaWVkXG4iKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc3JjID0gb3MucGF0aC5qb2luKGJvb3RpbWdfZGlyLCBzb3VyY2VfcGFyYW1zWydmaWxlJ10pCisgICAgICAgIGRzdCA9IHNyYworCisgICAgICAgIGlmICdza2lwJyBpbiBzb3VyY2VfcGFyYW1zOgorICAgICAgICAgICAgZHN0ID0gb3MucGF0aC5qb2luKGNyX3dvcmtkaXIsIHNvdXJjZV9wYXJhbXNbJ2ZpbGUnXSkKKyAgICAgICAgICAgIGRkX2NtZCA9ICJkZCBpZj0lcyBvZj0lcyBpYnM9JXMgc2tpcD0xIGNvbnY9bm90cnVuYyIgJSBcCisgICAgICAgICAgICAgICAgICAgIChzcmMsIGRzdCwgc291cmNlX3BhcmFtc1snc2tpcCddKQorICAgICAgICAgICAgZXhlY19jbWQoZGRfY21kKQorCisgICAgICAgICMgZ2V0IHRoZSBzaXplIGluIHRoZSByaWdodCB1bml0cyBmb3Iga2lja3N0YXJ0IChrQikKKyAgICAgICAgZHVfY21kID0gImR1IC1MYmtzICVzIiAlIGRzdAorICAgICAgICBvdXQgPSBleGVjX2NtZChkdV9jbWQpCisgICAgICAgIGZpbGVzaXplID0gb3V0LnNwbGl0KClbMF0KKworICAgICAgICBpZiBpbnQoZmlsZXNpemUpID4gaW50KHBhcnQuc2l6ZSk6CisgICAgICAgICAgICBwYXJ0LnNpemUgPSBmaWxlc2l6ZQorCisgICAgICAgIHBhcnQuc291cmNlX2ZpbGUgPSBkc3QKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2Uvcm9vdGZzLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2Uvcm9vdGZzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MDcxMmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9yb290ZnMucHkKQEAgLTAsMCArMSw4MyBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgaW1wbGVtZW50cyB0aGUgJ3Jvb3Rmcycgc291cmNlIHBsdWdpbiBjbGFzcyBmb3IgJ3dpYycKKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBsaW51eC5pbnRlbC5jb20+CisjIEpvYW8gSGVucmlxdWUgRmVycmVpcmEgZGUgRnJlaXRhcyA8am9hb2hmIChhdF0gZ21haWwuY29tPgorIworCitpbXBvcnQgb3MKKworZnJvbSB3aWMgaW1wb3J0IG1zZ2VyCitmcm9tIHdpYy5wbHVnaW5iYXNlIGltcG9ydCBTb3VyY2VQbHVnaW4KK2Zyb20gd2ljLnV0aWxzLm9lLm1pc2MgaW1wb3J0IGdldF9iaXRiYWtlX3ZhcgorCitjbGFzcyBSb290ZnNQbHVnaW4oU291cmNlUGx1Z2luKToKKyAgICAiIiIKKyAgICBQb3B1bGF0ZSBwYXJ0aXRpb24gY29udGVudCBmcm9tIGEgcm9vdGZzIGRpcmVjdG9yeS4KKyAgICAiIiIKKworICAgIG5hbWUgPSAncm9vdGZzJworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfX2dldF9yb290ZnNfZGlyKHJvb3Rmc19kaXIpOgorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHJvb3Rmc19kaXIpOgorICAgICAgICAgICAgcmV0dXJuIHJvb3Rmc19kaXIKKworICAgICAgICBpbWFnZV9yb290ZnNfZGlyID0gZ2V0X2JpdGJha2VfdmFyKCJJTUFHRV9ST09URlMiLCByb290ZnNfZGlyKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihpbWFnZV9yb290ZnNfZGlyKToKKyAgICAgICAgICAgIG1zZyA9ICJObyB2YWxpZCBhcnRpZmFjdCBJTUFHRV9ST09URlMgZnJvbSBpbWFnZSBuYW1lZCIKKyAgICAgICAgICAgIG1zZyArPSAiICVzIGhhcyBiZWVuIGZvdW5kIGF0ICVzLCBleGl0aW5nLlxuIiAlIFwKKyAgICAgICAgICAgICAgICAocm9vdGZzX2RpciwgaW1hZ2Vfcm9vdGZzX2RpcikKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKG1zZykKKworICAgICAgICByZXR1cm4gaW1hZ2Vfcm9vdGZzX2RpcgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX3ByZXBhcmVfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgY3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lX2J1aWxkZGlyLCBib290aW1nX2Rpciwga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3Jvb3Rmc19kaXIsIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCB0byBkbyB0aGUgYWN0dWFsIGNvbnRlbnQgcG9wdWxhdGlvbiBmb3IgYSBwYXJ0aXRpb24gaS5lLiBpdAorICAgICAgICAncHJlcGFyZXMnIHRoZSBwYXJ0aXRpb24gdG8gYmUgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGltYWdlLgorICAgICAgICBJbiB0aGlzIGNhc2UsIHByZXBhcmUgY29udGVudCBmb3IgbGVnYWN5IGJpb3MgYm9vdCBwYXJ0aXRpb24uCisgICAgICAgICIiIgorICAgICAgICBpZiBwYXJ0LnJvb3RmcyBpcyBOb25lOgorICAgICAgICAgICAgaWYgbm90ICdST09URlNfRElSJyBpbiBrcm9vdGZzX2RpcjoKKyAgICAgICAgICAgICAgICBtc2cgPSAiQ291bGRuJ3QgZmluZCAtLXJvb3Rmcy1kaXIsIGV4aXRpbmciCisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IobXNnKQorICAgICAgICAgICAgcm9vdGZzX2RpciA9IGtyb290ZnNfZGlyWydST09URlNfRElSJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHBhcnQucm9vdGZzIGluIGtyb290ZnNfZGlyOgorICAgICAgICAgICAgICAgIHJvb3Rmc19kaXIgPSBrcm9vdGZzX2RpcltwYXJ0LnJvb3Rmc10KKyAgICAgICAgICAgIGVsaWYgcGFydC5yb290ZnM6CisgICAgICAgICAgICAgICAgcm9vdGZzX2RpciA9IHBhcnQucm9vdGZzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1zZyA9ICJDb3VsZG4ndCBmaW5kIC0tcm9vdGZzLWRpcj0lcyBjb25uZWN0aW9uIgorICAgICAgICAgICAgICAgIG1zZyArPSAiIG9yIGl0IGlzIG5vdCBhIHZhbGlkIHBhdGgsIGV4aXRpbmciCisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IobXNnICUgcGFydC5yb290ZnMpCisKKyAgICAgICAgcmVhbF9yb290ZnNfZGlyID0gY2xzLl9fZ2V0X3Jvb3Rmc19kaXIocm9vdGZzX2RpcikKKworICAgICAgICBwYXJ0LnNldF9yb290ZnMocmVhbF9yb290ZnNfZGlyKQorICAgICAgICBwYXJ0LnByZXBhcmVfcm9vdGZzKGNyX3dvcmtkaXIsIG9lX2J1aWxkZGlyLCByZWFsX3Jvb3Rmc19kaXIsIG5hdGl2ZV9zeXNyb290KQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9yb290ZnNfcGNiaW9zX2V4dC5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL3Jvb3Rmc19wY2Jpb3NfZXh0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZTdiMDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9yb290ZnNfcGNiaW9zX2V4dC5weQpAQCAtMCwwICsxLDE4MSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW8gZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgQVVUSE9SCisjIEFkcmlhbiBGcmVpaG9mZXIgPGFkcmlhbi5mcmVpaG9mZXIgKGF0XSBuZXJhdGVjLmNvbT4KKyMKKworaW1wb3J0IG9zCitmcm9tIHdpYyBpbXBvcnQga2lja3N0YXJ0Citmcm9tIHdpYyBpbXBvcnQgbXNnZXIKK2Zyb20gd2ljLnV0aWxzIGltcG9ydCBzeXNsaW51eAorZnJvbSB3aWMudXRpbHMgaW1wb3J0IHJ1bm5lcgorZnJvbSB3aWMudXRpbHMub2UgaW1wb3J0IG1pc2MKK2Zyb20gd2ljLnV0aWxzLmVycm9ycyBpbXBvcnQgSW1hZ2VFcnJvcgorZnJvbSB3aWMucGx1Z2luYmFzZSBpbXBvcnQgU291cmNlUGx1Z2luCisKKworIyBweWxpbnQ6IGRpc2FibGU9bm8taW5pdAorY2xhc3MgUm9vdGZzUGx1Z2luKFNvdXJjZVBsdWdpbik6CisgICAgIiIiCisgICAgQ3JlYXRlIHJvb3QgcGFydGl0aW9uIGFuZCBpbnN0YWxsIHN5c2xpbnV4IGJvb3Rsb2FkZXIKKworICAgIFRoaXMgcGx1Z2luIGNyZWF0ZXMgYSBkaXNrIGltYWdlIGNvbnRhaW5pbmcgYSBib290YWJsZSByb290IHBhcnRpdGlvbiB3aXRoCisgICAgc3lzbGludXggaW5zdGFsbGVkLiBUaGUgZmlsZXN5c3RlbSBpcyBleHQyLzMvNCwgbm8gZXh0cmEgYm9vdCBwYXJ0aXRpb24gaXMKKyAgICByZXF1aXJlZC4KKworICAgIEV4YW1wbGUga2lja3N0YXJ0IGZpbGU6CisgICAgcGFydCAvIC0tc291cmNlIHJvb3Rmcy1wY2Jpb3MtZXh0IC0tb25kaXNrIHNkYSAtLWZzdHlwZT1leHQ0IC0tbGFiZWwgcm9vdGZzIC0tYWxpZ24gMTAyNAorICAgIGJvb3Rsb2FkZXIgLS1zb3VyY2Ugcm9vdGZzLXBjYmlvcy1leHQgLS10aW1lb3V0PTAgLS1hcHBlbmQ9InJvb3R3YWl0IHJvb3Rmc3R5cGU9ZXh0NCIKKworICAgIFRoZSBmaXJzdCBsaW5lIGdlbmVyYXRlcyBhIHJvb3QgZmlsZSBzeXN0ZW0gaW5jbHVkaW5nIGEgc3lzbGludXguY2ZnIGZpbGUKKyAgICBUaGUgIi0tc291cmNlIHJvb3Rmcy1wY2Jpb3MtZXh0IiBpbiB0aGUgc2Vjb25kIGxpbmUgdHJpZ2dlcnMgdGhlIGluc3RhbGxhdGlvbgorICAgIG9mIGxkbGludXguc3lzIGludG8gdGhlIGltYWdlLgorICAgICIiIgorCisgICAgbmFtZSA9ICdyb290ZnMtcGNiaW9zLWV4dCcKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2dldF9yb290ZnNfZGlyKHJvb3Rmc19kaXIpOgorICAgICAgICAiIiIKKyAgICAgICAgRmluZCByb290ZnMgcHNldWRvIGRpcgorCisgICAgICAgIElmIHJvb3Rmc19kaXIgaXMgYSBkaXJlY3RvcnkgY29uc2lkZXIgaXQgYXMgcm9vdGZzIGRpcmVjdG9yeS4KKyAgICAgICAgT3RoZXJ3aXNlIGFzayBiaXRiYWtlIGFib3V0IHRoZSBJTUFHRV9ST09URlMgZGlyZWN0b3J5LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihyb290ZnNfZGlyKToKKyAgICAgICAgICAgIHJldHVybiByb290ZnNfZGlyCisKKyAgICAgICAgaW1hZ2Vfcm9vdGZzX2RpciA9IG1pc2MuZ2V0X2JpdGJha2VfdmFyKCJJTUFHRV9ST09URlMiLCByb290ZnNfZGlyKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihpbWFnZV9yb290ZnNfZGlyKToKKyAgICAgICAgICAgIG1zZyA9ICJObyB2YWxpZCBhcnRpZmFjdCBJTUFHRV9ST09URlMgZnJvbSBpbWFnZSBuYW1lZCIKKyAgICAgICAgICAgIG1zZyArPSAiICVzIGhhcyBiZWVuIGZvdW5kIGF0ICVzLCBleGl0aW5nLlxuIiAlIFwKKyAgICAgICAgICAgICAgICAocm9vdGZzX2RpciwgaW1hZ2Vfcm9vdGZzX2RpcikKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKG1zZykKKworICAgICAgICByZXR1cm4gaW1hZ2Vfcm9vdGZzX2RpcgorCisgICAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWFyZ3VtZW50CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX2NvbmZpZ3VyZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBpbWFnZV9jcmVhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlX2NyZWF0b3Jfd29ya2Rpciwgb2VfYnVpbGRkaXIsIGJvb3RpbWdfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbF9kaXIsIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZXMgc3lzbGludXggY29uZmlnIGluIHJvb3RmcyBkaXJlY3RvcnkKKworICAgICAgICBDYWxsZWQgYmVmb3JlIGRvX3ByZXBhcmVfcGFydGl0aW9uKCkKKyAgICAgICAgIiIiCisgICAgICAgIG9wdGlvbnMgPSBpbWFnZV9jcmVhdG9yLmtzLmhhbmRsZXIuYm9vdGxvYWRlci5hcHBlbmRMaW5lCisKKyAgICAgICAgc3lzbGludXhfY29uZiA9ICIiCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIlBST01QVCAwXG4iCisKKyAgICAgICAgdGltZW91dCA9IGtpY2tzdGFydC5nZXRfdGltZW91dChpbWFnZV9jcmVhdG9yLmtzKQorICAgICAgICBpZiBub3QgdGltZW91dDoKKyAgICAgICAgICAgIHRpbWVvdXQgPSAwCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIlRJTUVPVVQgIiArIHN0cih0aW1lb3V0KSArICJcbiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiQUxMT1dPUFRJT05TIDFcbiIKKworICAgICAgICAjIERlcml2ZSBTRVJJQUwuLi4gbGluZSBmcm9tIGZyb20ga2VybmVsIGJvb3QgcGFyYW1ldGVycworICAgICAgICBzeXNsaW51eF9jb25mICs9IHN5c2xpbnV4LnNlcmlhbF9jb25zb2xlX2Zvcm1fa2FyZ3Mob3B0aW9ucykgKyAiXG4iCisKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiREVGQVVMVCBsaW51eFxuIgorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJMQUJFTCBsaW51eFxuIgorICAgICAgICBzeXNsaW51eF9jb25mICs9ICIgIEtFUk5FTCAvYm9vdC9iekltYWdlXG4iCisKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiICBBUFBFTkQgbGFiZWw9Ym9vdCByb290PSVzICVzXG4iICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW1hZ2VfY3JlYXRvci5yb290ZGV2LCBvcHRpb25zKQorCisgICAgICAgIHN5c2xpbnV4X2NmZyA9IG9zLnBhdGguam9pbihpbWFnZV9jcmVhdG9yLnJvb3Rmc19kaXJbJ1JPT1RGU19ESVInXSwgImJvb3QiLCAic3lzbGludXguY2ZnIikKKyAgICAgICAgbXNnZXIuZGVidWcoIldyaXRpbmcgc3lzbGludXggY29uZmlnICVzIiAlIHN5c2xpbnV4X2NmZykKKyAgICAgICAgd2l0aCBvcGVuKHN5c2xpbnV4X2NmZywgInciKSBhcyBjZmc6CisgICAgICAgICAgICBjZmcud3JpdGUoc3lzbGludXhfY29uZikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19wcmVwYXJlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGltYWdlX2NyZWF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlX2NyZWF0b3Jfd29ya2Rpciwgb2VfYnVpbGRkaXIsIGJvb3RpbWdfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWxfZGlyLCBrcm9vdGZzX2RpciwgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlcyBwYXJ0aXRpb24gb3V0IG9mIHJvb3RmcyBkaXJlY3RvcnkKKworICAgICAgICBQcmVwYXJlIGNvbnRlbnQgZm9yIGEgcm9vdGZzIHBhcnRpdGlvbiBpLmUuIGNyZWF0ZSBhIHBhcnRpdGlvbgorICAgICAgICBhbmQgZmlsbCBpdCBmcm9tIGEgL3Jvb3RmcyBkaXIuCisgICAgICAgIEluc3RhbGwgc3lzbGludXggYm9vdGxvYWRlciBpbnRvIHJvb3QgcGFydGl0aW9uIGltYWdlIGZpbGUKKyAgICAgICAgIiIiCisgICAgICAgIGRlZiBpc19leGUoZXhlcGF0aCk6CisgICAgICAgICAgICAiIiJWZXJpZnkgZXhlcGF0aCBpcyBhbiBleGVjdXRhYmxlIGZpbGUiIiIKKyAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmlzZmlsZShleGVwYXRoKSBhbmQgb3MuYWNjZXNzKGV4ZXBhdGgsIG9zLlhfT0spCisKKyAgICAgICAgIyBNYWtlIHN1cmUgc3lzbGludXgtbm9tdG9vbHMgaXMgYXZhaWxhYmxlIGluIG5hdGl2ZSBzeXNyb290IG9yIGZhaWwKKyAgICAgICAgbmF0aXZlX3N5c2xpbnV4X25vbXRvb2xzID0gb3MucGF0aC5qb2luKG5hdGl2ZV9zeXNyb290LCAidXNyL2Jpbi9zeXNsaW51eC1ub210b29scyIpCisgICAgICAgIGlmIG5vdCBpc19leGUobmF0aXZlX3N5c2xpbnV4X25vbXRvb2xzKToKKyAgICAgICAgICAgIG1zZ2VyLmluZm8oImJ1aWxkaW5nIHN5c2xpbnV4LW5hdGl2ZS4uLiIpCisgICAgICAgICAgICBtaXNjLmV4ZWNfY21kKCJiaXRiYWtlIHN5c2xpbnV4LW5hdGl2ZSIpCisgICAgICAgIGlmIG5vdCBpc19leGUobmF0aXZlX3N5c2xpbnV4X25vbXRvb2xzKToKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJDb3VsZG4ndCBmaW5kIHN5c2xpbnV4LW5vbXRvb2xzICglcyksIGV4aXRpbmdcbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c2xpbnV4X25vbXRvb2xzKQorCisgICAgICAgIGlmIHBhcnQucm9vdGZzIGlzIE5vbmU6CisgICAgICAgICAgICBpZiAnUk9PVEZTX0RJUicgbm90IGluIGtyb290ZnNfZGlyOgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJDb3VsZG4ndCBmaW5kIC0tcm9vdGZzLWRpciwgZXhpdGluZyIpCisgICAgICAgICAgICByb290ZnNfZGlyID0ga3Jvb3Rmc19kaXJbJ1JPT1RGU19ESVInXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgcGFydC5yb290ZnMgaW4ga3Jvb3Rmc19kaXI6CisgICAgICAgICAgICAgICAgcm9vdGZzX2RpciA9IGtyb290ZnNfZGlyW3BhcnQucm9vdGZzXQorICAgICAgICAgICAgZWxpZiBwYXJ0LnJvb3RmczoKKyAgICAgICAgICAgICAgICByb290ZnNfZGlyID0gcGFydC5yb290ZnMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbXNnID0gIkNvdWxkbid0IGZpbmQgLS1yb290ZnMtZGlyPSVzIGNvbm5lY3Rpb24iCisgICAgICAgICAgICAgICAgbXNnICs9ICIgb3IgaXQgaXMgbm90IGEgdmFsaWQgcGF0aCwgZXhpdGluZyIKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcihtc2cgJSBwYXJ0LnJvb3RmcykKKworICAgICAgICByZWFsX3Jvb3Rmc19kaXIgPSBjbHMuX2dldF9yb290ZnNfZGlyKHJvb3Rmc19kaXIpCisKKyAgICAgICAgcGFydC5zZXRfcm9vdGZzKHJlYWxfcm9vdGZzX2RpcikKKyAgICAgICAgcGFydC5wcmVwYXJlX3Jvb3RmcyhpbWFnZV9jcmVhdG9yX3dvcmtkaXIsIG9lX2J1aWxkZGlyLCByZWFsX3Jvb3Rmc19kaXIsIG5hdGl2ZV9zeXNyb290KQorCisgICAgICAgICMgaW5zdGFsbCBzeXNsaW51eCBpbnRvIHJvb3RmcyBwYXJ0aXRpb24KKyAgICAgICAgc3lzbGludXhfY21kID0gInN5c2xpbnV4LW5vbXRvb2xzIC1kIC9ib290IC1pICVzIiAlIHBhcnQuc291cmNlX2ZpbGUKKyAgICAgICAgbWlzYy5leGVjX25hdGl2ZV9jbWQoc3lzbGludXhfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19pbnN0YWxsX2Rpc2soY2xzLCBkaXNrLCBkaXNrX25hbWUsIGltYWdlX2NyZWF0b3IsIHdvcmtkaXIsIG9lX2J1aWxkZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIEFzc2VtYmxlIHBhcnRpdGlvbnMgdG8gZGlzayBpbWFnZQorCisgICAgICAgIENhbGxlZCBhZnRlciBhbGwgcGFydGl0aW9ucyBoYXZlIGJlZW4gcHJlcGFyZWQgYW5kIGFzc2VtYmxlZCBpbnRvIGEKKyAgICAgICAgZGlzayBpbWFnZS4gSW4gdGhpcyBjYXNlLCB3ZSBpbnN0YWxsIHRoZSBNQlIuCisgICAgICAgICIiIgorICAgICAgICBtYnJmaWxlID0gb3MucGF0aC5qb2luKG5hdGl2ZV9zeXNyb290LCAidXNyL3NoYXJlL3N5c2xpbnV4LyIpCisgICAgICAgIGlmIGltYWdlX2NyZWF0b3IucHRhYmxlX2Zvcm1hdCA9PSAnbXNkb3MnOgorICAgICAgICAgICAgbWJyZmlsZSArPSAibWJyLmJpbiIKKyAgICAgICAgZWxpZiBpbWFnZV9jcmVhdG9yLnB0YWJsZV9mb3JtYXQgPT0gJ2dwdCc6CisgICAgICAgICAgICBtYnJmaWxlICs9ICJncHRtYnIuYmluIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnZXIuZXJyb3IoIlVuc3VwcG9ydGVkIHBhcnRpdGlvbiB0YWJsZTogJXMiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VfY3JlYXRvci5wdGFibGVfZm9ybWF0KQorCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhtYnJmaWxlKToKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJDb3VsZG4ndCBmaW5kICVzLiBIYXMgc3lzbGludXgtbmF0aXZlIGJlZW4gYmFrZWQ/IiAlIG1icmZpbGUpCisKKyAgICAgICAgZnVsbF9wYXRoID0gZGlza1snZGlzayddLmRldmljZQorICAgICAgICBtc2dlci5kZWJ1ZygiSW5zdGFsbGluZyBNQlIgb24gZGlzayAlcyBhcyAlcyB3aXRoIHNpemUgJXMgYnl0ZXMiIFwKKyAgICAgICAgICAgICAgICAgICAgJSAoZGlza19uYW1lLCBmdWxsX3BhdGgsIGRpc2tbJ21pbl9zaXplJ10pKQorCisgICAgICAgIHJldF9jb2RlID0gcnVubmVyLnNob3coWydkZCcsICdpZj0lcycgJSBtYnJmaWxlLCAnb2Y9JXMnICUgZnVsbF9wYXRoLCAnY29udj1ub3RydW5jJ10pCisgICAgICAgIGlmIHJldF9jb2RlICE9IDA6CisgICAgICAgICAgICByYWlzZSBJbWFnZUVycm9yKCJVbmFibGUgdG8gc2V0IE1CUiB0byAlcyIgJSBmdWxsX3BhdGgpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy90ZXN0IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGFlYWZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdGVzdApAQCAtMCwwICsxIEBACit0ZXN0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvZXJyb3JzLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvZXJyb3JzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYjUxNGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9lcnJvcnMucHkKQEAgLTAsMCArMSwyOSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uIC10dAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgUmVkIEhhdCwgSW5jLgorIyBDb3B5cmlnaHQgKGMpIDIwMTEgSW50ZWwsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyMgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisjIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisKK2NsYXNzIFdpY0Vycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitjbGFzcyBDcmVhdG9yRXJyb3IoV2ljRXJyb3IpOgorICAgIHBhc3MKKworY2xhc3MgVXNhZ2UoV2ljRXJyb3IpOgorICAgIHBhc3MKKworY2xhc3MgSW1hZ2VFcnJvcihXaWNFcnJvcik6CisgICAgcGFzcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvZnNfcmVsYXRlZC5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL2ZzX3JlbGF0ZWQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU3NDQ2MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL2ZzX3JlbGF0ZWQucHkKQEAgLTAsMCArMSw4NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uIC10dAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcsIFJlZCBIYXQsIEluYy4KKyMgQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwLCAyMDExIEludGVsLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorIyBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CitpbXBvcnQgb3MKK2ltcG9ydCBlcnJubworCitmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBleGVjX2NtZAorCitkZWYgbWFrZWRpcnMoZGlybmFtZSk6CisgICAgIiIiQSB2ZXJzaW9uIG9mIG9zLm1ha2VkaXJzKCkgdGhhdCBkb2Vzbid0IHRocm93IGFuCisgICAgZXhjZXB0aW9uIGlmIHRoZSBsZWFmIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cy4KKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgIG9zLm1ha2VkaXJzKGRpcm5hbWUpCisgICAgZXhjZXB0IE9TRXJyb3IsIGVycjoKKyAgICAgICAgaWYgZXJyLmVycm5vICE9IGVycm5vLkVFWElTVDoKKyAgICAgICAgICAgIHJhaXNlCisKK2NsYXNzIERpc2s6CisgICAgIiIiCisgICAgR2VuZXJpYyBiYXNlIG9iamVjdCBmb3IgYSBkaXNrLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaXplLCBkZXZpY2U9Tm9uZSk6CisgICAgICAgIHNlbGYuX2RldmljZSA9IGRldmljZQorICAgICAgICBzZWxmLl9zaXplID0gc2l6ZQorCisgICAgZGVmIGNyZWF0ZShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBnZXRfZGV2aWNlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGV2aWNlCisgICAgZGVmIHNldF9kZXZpY2Uoc2VsZiwgcGF0aCk6CisgICAgICAgIHNlbGYuX2RldmljZSA9IHBhdGgKKyAgICBkZXZpY2UgPSBwcm9wZXJ0eShnZXRfZGV2aWNlLCBzZXRfZGV2aWNlKQorCisgICAgZGVmIGdldF9zaXplKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc2l6ZQorICAgIHNpemUgPSBwcm9wZXJ0eShnZXRfc2l6ZSkKKworCitjbGFzcyBEaXNrSW1hZ2UoRGlzayk6CisgICAgIiIiCisgICAgQSBEaXNrIGJhY2tlZCBieSBhIGZpbGUuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGltYWdlX2ZpbGUsIHNpemUpOgorICAgICAgICBEaXNrLl9faW5pdF9fKHNlbGYsIHNpemUpCisgICAgICAgIHNlbGYuaW1hZ2VfZmlsZSA9IGltYWdlX2ZpbGUKKworICAgIGRlZiBleGlzdHMoc2VsZik6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmV4aXN0cyhzZWxmLmltYWdlX2ZpbGUpCisKKyAgICBkZWYgY3JlYXRlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmRldmljZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGJsb2NrcyA9IHNlbGYuc2l6ZSAvIDEwMjQKKyAgICAgICAgaWYgc2VsZi5zaXplIC0gYmxvY2tzICogMTAyNDoKKyAgICAgICAgICAgIGJsb2NrcyArPSAxCisKKyAgICAgICAgIyBjcmVhdGUgZGlzayBpbWFnZQorICAgICAgICBkZF9jbWQgPSAiZGQgaWY9L2Rldi96ZXJvIG9mPSVzIGJzPTEwMjQgc2Vlaz0lZCBjb3VudD0xIiAlIFwKKyAgICAgICAgICAgIChzZWxmLmltYWdlX2ZpbGUsIGJsb2NrcykKKyAgICAgICAgZXhlY19jbWQoZGRfY21kKQorCisgICAgICAgIHNlbGYuZGV2aWNlID0gc2VsZi5pbWFnZV9maWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9taXNjLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvbWlzYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDc1MDY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvbWlzYy5weQpAQCAtMCwwICsxLDU4IEBACisjIS91c3IvYmluL2VudiBweXRob24gLXR0CisjCisjIENvcHlyaWdodCAoYykgMjAxMCwgMjAxMSBJbnRlbCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorIyBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorCitpbXBvcnQgb3MKK2ltcG9ydCB0aW1lCisKK2RlZiBidWlsZF9uYW1lKGtzY2ZnLCByZWxlYXNlPU5vbmUsIHByZWZpeD1Ob25lLCBzdWZmaXg9Tm9uZSk6CisgICAgIiIiQ29uc3RydWN0IGFuZCByZXR1cm4gYW4gaW1hZ2UgbmFtZSBzdHJpbmcuCisKKyAgICBUaGlzIGlzIGEgdXRpbGl0eSBmdW5jdGlvbiB0byBoZWxwIGNyZWF0ZSBzZW5zaWJsZSBuYW1lIGFuZCBmc2xhYmVsCisgICAgc3RyaW5ncy4gVGhlIG5hbWUgaXMgY29uc3RydWN0ZWQgdXNpbmcgdGhlIHNhbnMtcHJlZml4LWFuZC1leHRlbnNpb24KKyAgICBraWNrc3RhcnQgZmlsZW5hbWUgYW5kIHRoZSBzdXBwbGllZCBwcmVmaXggYW5kIHN1ZmZpeC4KKworICAgIGtzY2ZnIC0tIGEgcGF0aCB0byBhIGtpY2tzdGFydCBmaWxlCisgICAgcmVsZWFzZSAtLSAgYSByZXBsYWNlbWVudCB0byBzdWZmaXggZm9yIGltYWdlIHJlbGVhc2UKKyAgICBwcmVmaXggLS0gYSBwcmVmaXggdG8gcHJlcGVuZCB0byB0aGUgbmFtZTsgZGVmYXVsdHMgdG8gTm9uZSwgd2hpY2ggY2F1c2VzCisgICAgICAgICAgICAgIG5vIHByZWZpeCB0byBiZSB1c2VkCisgICAgc3VmZml4IC0tIGEgc3VmZml4IHRvIGFwcGVuZCB0byB0aGUgbmFtZTsgZGVmYXVsdHMgdG8gTm9uZSwgd2hpY2ggY2F1c2VzCisgICAgICAgICAgICAgIGEgWVlZWU1NRERISE1NIHN1ZmZpeCB0byBiZSB1c2VkCisKKyAgICBOb3RlLCBpZiBtYXhsZW4gaXMgbGVzcyB0aGVuIHRoZSBsZW4oc3VmZml4KSwgeW91IGdldCB0byBrZWVwIGJvdGggcGllY2VzLgorCisgICAgIiIiCisgICAgbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoa3NjZmcpCisgICAgaWR4ID0gbmFtZS5yZmluZCgnLicpCisgICAgaWYgaWR4ID49IDA6CisgICAgICAgIG5hbWUgPSBuYW1lWzppZHhdCisKKyAgICBpZiByZWxlYXNlIGlzIG5vdCBOb25lOgorICAgICAgICBzdWZmaXggPSAiIgorICAgIGlmIHByZWZpeCBpcyBOb25lOgorICAgICAgICBwcmVmaXggPSAiIgorICAgIGlmIHN1ZmZpeCBpcyBOb25lOgorICAgICAgICBzdWZmaXggPSB0aW1lLnN0cmZ0aW1lKCIlWSVtJWQlSCVNIikKKworICAgIGlmIG5hbWUuc3RhcnRzd2l0aChwcmVmaXgpOgorICAgICAgICBuYW1lID0gbmFtZVtsZW4ocHJlZml4KTpdCisKKyAgICBwcmVmaXggPSAiJXMtIiAlIHByZWZpeCBpZiBwcmVmaXggZWxzZSAiIgorICAgIHN1ZmZpeCA9ICItJXMiICUgc3VmZml4IGlmIHN1ZmZpeCBlbHNlICIiCisKKyAgICByZXQgPSBwcmVmaXggKyBuYW1lICsgc3VmZml4CisKKyAgICByZXR1cm4gcmV0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9vZS9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL29lL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhODE1NzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9vZS9fX2luaXRfXy5weQpAQCAtMCwwICsxLDIyIEBACisjCisjIE9wZW5FbWJlZGRlZCB3aWMgdXRpbHMgbGlicmFyeQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTMsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBsaW51eC5pbnRlbC5jb20+CisjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9vZS9taXNjLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvb2UvbWlzYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzcwZDkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvb2UvbWlzYy5weQpAQCAtMCwwICsxLDIzNCBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEzLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgcGxhY2UgdG8gY29sbGVjdCB2YXJpb3VzIHdpYy1yZWxhdGVkIHV0aWxzCisjIGZvciB0aGUgT3BlbkVtYmVkZGVkIEltYWdlIFRvb2xzLgorIworIyBBVVRIT1JTCisjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGxpbnV4LmludGVsLmNvbT4KKyMKKyIiIk1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zLiIiIgorCitpbXBvcnQgb3MKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CisKK2Zyb20gd2ljIGltcG9ydCBtc2dlcgorZnJvbSB3aWMudXRpbHMgaW1wb3J0IHJ1bm5lcgorCisjIGV4ZWN1dGFibGUgLT4gcmVjaXBlIHBhaXJzIGZvciBleGVjX25hdGl2ZV9jbWQKK05BVElWRV9SRUNJUEVTID0geyJtY29weSI6ICJtdG9vbHMiLAorICAgICAgICAgICAgICAgICAgIm1rZG9zZnMiOiAiZG9zZnN0b29scyIsCisgICAgICAgICAgICAgICAgICAibWtmcy5idHJmcyI6ICJidHJmcy10b29scyIsCisgICAgICAgICAgICAgICAgICAibWtmcy5leHQyIjogImUyZnNwcm9ncyIsCisgICAgICAgICAgICAgICAgICAibWtmcy5leHQzIjogImUyZnNwcm9ncyIsCisgICAgICAgICAgICAgICAgICAibWtmcy5leHQ0IjogImUyZnNwcm9ncyIsCisgICAgICAgICAgICAgICAgICAibWtmcy52ZmF0IjogImRvc2ZzdG9vbHMiLAorICAgICAgICAgICAgICAgICAgIm1rc3F1YXNoZnMiOiAic3F1YXNoZnMtdG9vbHMiLAorICAgICAgICAgICAgICAgICAgIm1rc3dhcCI6ICJ1dGlsLWxpbnV4IiwKKyAgICAgICAgICAgICAgICAgICJwYXJ0ZWQiOiAicGFydGVkIiwKKyAgICAgICAgICAgICAgICAgICJzZ2Rpc2siOiAiZ3B0ZmRpc2siLAorICAgICAgICAgICAgICAgICAgInN5c2xpbnV4IjogInN5c2xpbnV4IgorICAgICAgICAgICAgICAgICB9CisKK2RlZiBfZXhlY19jbWQoY21kX2FuZF9hcmdzLCBhc19zaGVsbD1GYWxzZSwgY2F0Y2g9Myk6CisgICAgIiIiCisgICAgRXhlY3V0ZSBjb21tYW5kLCBjYXRjaGluZyBzdGRlcnIsIHN0ZG91dAorCisgICAgTmVlZCB0byBleGVjdXRlIGFzX3NoZWxsIGlmIHRoZSBjb21tYW5kIHVzZXMgd2lsZGNhcmRzCisgICAgIiIiCisgICAgbXNnZXIuZGVidWcoIl9leGVjX2NtZDogJXMiICUgY21kX2FuZF9hcmdzKQorICAgIGFyZ3MgPSBjbWRfYW5kX2FyZ3Muc3BsaXQoKQorICAgIG1zZ2VyLmRlYnVnKGFyZ3MpCisKKyAgICBpZiBhc19zaGVsbDoKKyAgICAgICAgcmV0LCBvdXQgPSBydW5uZXIucnVudG9vbChjbWRfYW5kX2FyZ3MsIGNhdGNoKQorICAgIGVsc2U6CisgICAgICAgIHJldCwgb3V0ID0gcnVubmVyLnJ1bnRvb2woYXJncywgY2F0Y2gpCisgICAgb3V0ID0gb3V0LnN0cmlwKCkKKyAgICBtc2dlci5kZWJ1ZygiX2V4ZWNfY21kOiBvdXRwdXQgZm9yICVzIChyYyA9ICVkKTogJXMiICUgXAorICAgICAgICAgICAgICAgIChjbWRfYW5kX2FyZ3MsIHJldCwgb3V0KSkKKworICAgIHJldHVybiAocmV0LCBvdXQpCisKKworZGVmIGV4ZWNfY21kKGNtZF9hbmRfYXJncywgYXNfc2hlbGw9RmFsc2UsIGNhdGNoPTMpOgorICAgICIiIgorICAgIEV4ZWN1dGUgY29tbWFuZCwgY2F0Y2hpbmcgc3RkZXJyLCBzdGRvdXQKKworICAgIEV4aXRzIGlmIHJjIG5vbi16ZXJvCisgICAgIiIiCisgICAgcmV0LCBvdXQgPSBfZXhlY19jbWQoY21kX2FuZF9hcmdzLCBhc19zaGVsbCwgY2F0Y2gpCisKKyAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgbXNnZXIuZXJyb3IoImV4ZWNfY21kOiAlcyByZXR1cm5lZCAnJXMnIGluc3RlYWQgb2YgMCIgJSBcCisgICAgICAgICAgICAgICAgICAgIChjbWRfYW5kX2FyZ3MsIHJldCkpCisKKyAgICByZXR1cm4gb3V0CisKKworZGVmIGV4ZWNfbmF0aXZlX2NtZChjbWRfYW5kX2FyZ3MsIG5hdGl2ZV9zeXNyb290LCBjYXRjaD0zKToKKyAgICAiIiIKKyAgICBFeGVjdXRlIG5hdGl2ZSBjb21tYW5kLCBjYXRjaGluZyBzdGRlcnIsIHN0ZG91dAorCisgICAgTmVlZCB0byBleGVjdXRlIGFzX3NoZWxsIGlmIHRoZSBjb21tYW5kIHVzZXMgd2lsZGNhcmRzCisKKyAgICBBbHdheXMgbmVlZCB0byBleGVjdXRlIG5hdGl2ZSBjb21tYW5kcyBhc19zaGVsbAorICAgICIiIgorICAgIG5hdGl2ZV9wYXRocyA9IFwKKyAgICAgICAgImV4cG9ydCBQQVRIPSVzL3NiaW46JXMvdXNyL3NiaW46JXMvdXNyL2JpbiIgJSBcCisgICAgICAgIChuYXRpdmVfc3lzcm9vdCwgbmF0aXZlX3N5c3Jvb3QsIG5hdGl2ZV9zeXNyb290KQorICAgIG5hdGl2ZV9jbWRfYW5kX2FyZ3MgPSAiJXM7JXMiICUgKG5hdGl2ZV9wYXRocywgY21kX2FuZF9hcmdzKQorICAgIG1zZ2VyLmRlYnVnKCJleGVjX25hdGl2ZV9jbWQ6ICVzIiAlIGNtZF9hbmRfYXJncykKKworICAgIGFyZ3MgPSBjbWRfYW5kX2FyZ3Muc3BsaXQoKQorICAgIG1zZ2VyLmRlYnVnKGFyZ3MpCisKKyAgICByZXQsIG91dCA9IF9leGVjX2NtZChuYXRpdmVfY21kX2FuZF9hcmdzLCBUcnVlLCBjYXRjaCkKKworICAgIGlmIHJldCA9PSAxMjc6ICMgc2hlbGwgY29tbWFuZC1ub3QtZm91bmQKKyAgICAgICAgcHJvZyA9IGFyZ3NbMF0KKyAgICAgICAgbXNnID0gIkEgbmF0aXZlIHByb2dyYW0gJXMgcmVxdWlyZWQgdG8gYnVpbGQgdGhlIGltYWdlICJcCisgICAgICAgICAgICAgICJ3YXMgbm90IGZvdW5kIChzZWUgZGV0YWlscyBhYm92ZSkuXG5cbiIgJSBwcm9nCisgICAgICAgIHJlY2lwZSA9IE5BVElWRV9SRUNJUEVTLmdldChwcm9nKQorICAgICAgICBpZiByZWNpcGU6CisgICAgICAgICAgICBtc2cgKz0gIlBsZWFzZSBiYWtlIGl0IHdpdGggJ2JpdGJha2UgJXMtbmF0aXZlJyAiXAorICAgICAgICAgICAgICAgICAgICJhbmQgdHJ5IGFnYWluLlxuIiAlIHJlY2lwZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnICs9ICJXaWMgZmFpbGVkIHRvIGZpbmQgYSByZWNpcGUgdG8gYnVpbGQgbmF0aXZlICVzLiBQbGVhc2UgIlwKKyAgICAgICAgICAgICAgICAgICAiZmlsZSBhIGJ1ZyBhZ2FpbnN0IHdpYy5cbiIgJSBwcm9nCisgICAgICAgIG1zZ2VyLmVycm9yKG1zZykKKyAgICBpZiBvdXQ6CisgICAgICAgIG1zZ2VyLmRlYnVnKCciJXMiIG91dHB1dDogJXMnICUgKGFyZ3NbMF0sIG91dCkpCisKKyAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgbXNnZXIuZXJyb3IoImV4ZWNfY21kOiAnJXMnIHJldHVybmVkICclcycgaW5zdGVhZCBvZiAwIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgKGNtZF9hbmRfYXJncywgcmV0KSkKKworICAgIHJldHVybiByZXQsIG91dAorCitCT09URERfRVhUUkFfU1BBQ0UgPSAxNjM4NAorCitjbGFzcyBCaXRiYWtlVmFycyhkZWZhdWx0ZGljdCk6CisgICAgIiIiCisgICAgQ29udGFpbmVyIGZvciBCaXRiYWtlIHZhcmlhYmxlcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGRlZmF1bHRkaWN0Ll9faW5pdF9fKHNlbGYsIGRpY3QpCisKKyAgICAgICAgIyBkZWZhdWx0X2ltYWdlIGFuZCB2YXJzX2RpciBhdHRyaWJ1dGVzIHNob3VsZCBiZSBzZXQgZnJvbSBvdXRzaWRlCisgICAgICAgIHNlbGYuZGVmYXVsdF9pbWFnZSA9IE5vbmUKKyAgICAgICAgc2VsZi52YXJzX2RpciA9IE5vbmUKKworICAgIGRlZiBfcGFyc2VfbGluZShzZWxmLCBsaW5lLCBpbWFnZSk6CisgICAgICAgICIiIgorICAgICAgICBQYXJzZSBvbmUgbGluZSBmcm9tIGJpdGJha2UgLWUgb3V0cHV0IG9yIGZyb20gLmVudiBmaWxlLgorICAgICAgICBQdXQgcmVzdWx0IGtleS12YWx1ZSBwYWlyIGludG8gdGhlIHN0b3JhZ2UuCisgICAgICAgICIiIgorICAgICAgICBpZiAiPSIgbm90IGluIGxpbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5LCB2YWwgPSBsaW5lLnNwbGl0KCI9IikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAga2V5ID0ga2V5LnN0cmlwKCkKKyAgICAgICAgdmFsID0gdmFsLnN0cmlwKCkKKyAgICAgICAgaWYga2V5LnJlcGxhY2UoJ18nLCAnJykuaXNhbG51bSgpOgorICAgICAgICAgICAgc2VsZltpbWFnZV1ba2V5XSA9IHZhbC5zdHJpcCgnIicpCisKKyAgICBkZWYgZ2V0X3ZhcihzZWxmLCB2YXIsIGltYWdlPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgR2V0IGJpdGJha2UgdmFyaWFibGUgZnJvbSAnYml0YmFrZSAtZScgb3V0cHV0IG9yIGZyb20gLmVudiBmaWxlLgorICAgICAgICBUaGlzIGlzIGEgbGF6eSBtZXRob2QsIGkuZS4gaXQgcnVucyBiaXRiYWtlIG9yIHBhcnNlcyBmaWxlIG9ubHkgd2hlbgorICAgICAgICBvbmx5IHdoZW4gdmFyaWFibGUgaXMgcmVxdWVzdGVkLiBJdCBhbHNvIGNhY2hlcyByZXN1bHRzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGltYWdlOgorICAgICAgICAgICAgaW1hZ2UgPSBzZWxmLmRlZmF1bHRfaW1hZ2UKKworICAgICAgICBpZiBpbWFnZSBub3QgaW4gc2VsZjoKKyAgICAgICAgICAgIGlmIGltYWdlIGFuZCBzZWxmLnZhcnNfZGlyOgorICAgICAgICAgICAgICAgIGZuYW1lID0gb3MucGF0aC5qb2luKHNlbGYudmFyc19kaXIsIGltYWdlICsgJy5lbnYnKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgIyBwYXJzZSAuZW52IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGZuYW1lKSBhcyB2YXJzZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHZhcnNmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlX2xpbmUobGluZSwgaW1hZ2UpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkNvdWxkbid0IGdldCBiaXRiYWtlIHZhcmlhYmxlIGZyb20gJXMuIiAlIGZuYW1lCisgICAgICAgICAgICAgICAgICAgIHByaW50ICJGaWxlICVzIGRvZXNuJ3QgZXhpc3QuIiAlIGZuYW1lCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIEdldCBiaXRiYWtlIC1lIG91dHB1dAorICAgICAgICAgICAgICAgIGNtZCA9ICJiaXRiYWtlIC1lIgorICAgICAgICAgICAgICAgIGlmIGltYWdlOgorICAgICAgICAgICAgICAgICAgICBjbWQgKz0gIiAlcyIgJSBpbWFnZQorCisgICAgICAgICAgICAgICAgbG9nX2xldmVsID0gbXNnZXIuZ2V0X2xvZ2xldmVsKCkKKyAgICAgICAgICAgICAgICBtc2dlci5zZXRfbG9nbGV2ZWwoJ25vcm1hbCcpCisgICAgICAgICAgICAgICAgcmV0LCBsaW5lcyA9IF9leGVjX2NtZChjbWQpCisgICAgICAgICAgICAgICAgbXNnZXIuc2V0X2xvZ2xldmVsKGxvZ19sZXZlbCkKKworICAgICAgICAgICAgICAgIGlmIHJldDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkNvdWxkbid0IGdldCAnJXMnIG91dHB1dC4iICUgY21kCisgICAgICAgICAgICAgICAgICAgIHByaW50ICJCaXRiYWtlIGZhaWxlZCB3aXRoIGVycm9yOlxuJXNcbiIgJSBsaW5lcworICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgICAgICMgUGFyc2UgYml0YmFrZSAtZSBvdXRwdXQKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBsaW5lcy5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VfbGluZShsaW5lLCBpbWFnZSkKKworICAgICAgICAgICAgIyBNYWtlIGZpcnN0IGltYWdlIGEgZGVmYXVsdCBzZXQgb2YgdmFyaWFibGVzCisgICAgICAgICAgICBpbWFnZXMgPSBba2V5IGZvciBrZXkgaW4gc2VsZiBpZiBrZXldCisgICAgICAgICAgICBpZiBsZW4oaW1hZ2VzKSA9PSAxOgorICAgICAgICAgICAgICAgIHNlbGZbTm9uZV0gPSBzZWxmW2ltYWdlXQorCisgICAgICAgIHJldHVybiBzZWxmW2ltYWdlXS5nZXQodmFyKQorCisjIENyZWF0ZSBCQl9WQVJTIHNpbmdsZXRvbgorQkJfVkFSUyA9IEJpdGJha2VWYXJzKCkKKworZGVmIGdldF9iaXRiYWtlX3Zhcih2YXIsIGltYWdlPU5vbmUpOgorICAgICIiIgorICAgIFByb3ZpZGUgb2xkIGdldF9iaXRiYWtlX3ZhciBBUEkgYnkgd3JhcHBpbmcKKyAgICBnZXRfdmFyIG1ldGhvZCBvZiBCQl9WQVJTIHNpbmdsZXRvbi4KKyAgICAiIiIKKyAgICByZXR1cm4gQkJfVkFSUy5nZXRfdmFyKHZhciwgaW1hZ2UpCisKK2RlZiBwYXJzZV9zb3VyY2VwYXJhbXMoc291cmNlcGFyYW1zKToKKyAgICAiIiIKKyAgICBTcGxpdCBzb3VyY2VwYXJhbXMgc3RyaW5nIG9mIHRoZSBmb3JtIGtleTE9dmFsMVssa2V5Mj12YWwyLC4uLl0KKyAgICBpbnRvIGEgZGljdC4gIEFsc28gYWNjZXB0cyB2YWx1ZWxlc3Mga2V5cyBpLmUuIHdpdGhvdXQgPS4KKworICAgIFJldHVybnMgZGljdCBvZiBwYXJhbSBrZXkvdmFsIHBhaXJzIChub3RlIHRoYXQgdmFsIG1heSBiZSBOb25lKS4KKyAgICAiIiIKKyAgICBwYXJhbXNfZGljdCA9IHt9CisKKyAgICBwYXJhbXMgPSBzb3VyY2VwYXJhbXMuc3BsaXQoJywnKQorICAgIGlmIHBhcmFtczoKKyAgICAgICAgZm9yIHBhciBpbiBwYXJhbXM6CisgICAgICAgICAgICBpZiBub3QgcGFyOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBub3QgJz0nIGluIHBhcjoKKyAgICAgICAgICAgICAgICBrZXkgPSBwYXIKKyAgICAgICAgICAgICAgICB2YWwgPSBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGtleSwgdmFsID0gcGFyLnNwbGl0KCc9JykKKyAgICAgICAgICAgIHBhcmFtc19kaWN0W2tleV0gPSB2YWwKKworICAgIHJldHVybiBwYXJhbXNfZGljdApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvcGFydGl0aW9uZWRmcy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL3BhcnRpdGlvbmVkZnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWExMDNiYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL3BhcnRpdGlvbmVkZnMucHkKQEAgLTAsMCArMSwzNjIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbiAtdHQKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwLCAyMDExIEludGVsLCBJbmMuCisjIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBSZWQgSGF0LCBJbmMuCisjIENvcHlyaWdodCAoYykgMjAwOCBEYW5pZWwgUC4gQmVycmFuZ2UKKyMgQ29weXJpZ2h0IChjKSAyMDA4IERhdmlkIFAuIEh1ZmYKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyMgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisjIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisKK2ltcG9ydCBvcworZnJvbSB3aWMgaW1wb3J0IG1zZ2VyCitmcm9tIHdpYy51dGlscy5lcnJvcnMgaW1wb3J0IEltYWdlRXJyb3IKK2Zyb20gd2ljLnV0aWxzLm9lLm1pc2MgaW1wb3J0IGV4ZWNfY21kLCBleGVjX25hdGl2ZV9jbWQKKworIyBPdmVyaGVhZCBvZiB0aGUgTUJSIHBhcnRpdGlvbmluZyBzY2hlbWUgKGp1c3Qgb25lIHNlY3RvcikKK01CUl9PVkVSSEVBRCA9IDEKKworIyBPdmVyaGVhZCBvZiB0aGUgR1BUIHBhcnRpdGlvbmluZyBzY2hlbWUKK0dQVF9PVkVSSEVBRCA9IDM0CisKKyMgU2l6ZSBvZiBhIHNlY3RvciBpbiBieXRlcworU0VDVE9SX1NJWkUgPSA1MTIKKworY2xhc3MgSW1hZ2Uob2JqZWN0KToKKyAgICAiIiIKKyAgICBHZW5lcmljIGJhc2Ugb2JqZWN0IGZvciBhbiBpbWFnZS4KKworICAgIEFuIEltYWdlIGlzIGEgY29udGFpbmVyIGZvciBhIHNldCBvZiBEaXNrSW1hZ2VzIGFuZCBhc3NvY2lhdGVkCisgICAgcGFydGl0aW9ucy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmF0aXZlX3N5c3Jvb3Q9Tm9uZSk6CisgICAgICAgIHNlbGYuZGlza3MgPSB7fQorICAgICAgICBzZWxmLnBhcnRpdGlvbnMgPSBbXQorICAgICAgICAjIFNpemUgb2YgYSBzZWN0b3IgdXNlZCBpbiBjYWxjdWxhdGlvbnMKKyAgICAgICAgc2VsZi5zZWN0b3Jfc2l6ZSA9IFNFQ1RPUl9TSVpFCisgICAgICAgIHNlbGYuX3BhcnRpdGlvbnNfbGF5ZWRfb3V0ID0gRmFsc2UKKyAgICAgICAgc2VsZi5uYXRpdmVfc3lzcm9vdCA9IG5hdGl2ZV9zeXNyb290CisKKyAgICBkZWYgX19hZGRfZGlzayhzZWxmLCBkaXNrX25hbWUpOgorICAgICAgICAiIiIgQWRkIGEgZGlzayAnZGlza19uYW1lJyB0byB0aGUgaW50ZXJuYWwgbGlzdCBvZiBkaXNrcy4gTm90ZSwKKyAgICAgICAgJ2Rpc2tfbmFtZScgaXMgdGhlIG5hbWUgb2YgdGhlIGRpc2sgaW4gdGhlIHRhcmdldCBzeXN0ZW0KKyAgICAgICAgKGUuZy4sIHNkYikuICIiIgorCisgICAgICAgIGlmIGRpc2tfbmFtZSBpbiBzZWxmLmRpc2tzOgorICAgICAgICAgICAgIyBXZSBhbHJlYWR5IGhhdmUgdGhpcyBkaXNrCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBhc3NlcnQgbm90IHNlbGYuX3BhcnRpdGlvbnNfbGF5ZWRfb3V0CisKKyAgICAgICAgc2VsZi5kaXNrc1tkaXNrX25hbWVdID0gXAorICAgICAgICAgICAgICAgIHsnZGlzayc6IE5vbmUsICAgICAjIERpc2sgb2JqZWN0CisgICAgICAgICAgICAgICAgICdudW1wYXJ0JzogMCwgICAgICMgTnVtYmVyIG9mIGFsbG9jYXRlIHBhcnRpdGlvbnMKKyAgICAgICAgICAgICAgICAgJ3JlYWxwYXJ0JzogMCwgICAgIyBOdW1iZXIgb2YgcGFydGl0aW9ucyBpbiB0aGUgcGFydGl0aW9uIHRhYmxlCisgICAgICAgICAgICAgICAgICdwYXJ0aXRpb25zJzogW10sICMgSW5kZXhlcyB0byBzZWxmLnBhcnRpdGlvbnMKKyAgICAgICAgICAgICAgICAgJ29mZnNldCc6IDAsICAgICAgIyBPZmZzZXQgb2YgbmV4dCBwYXJ0aXRpb24gKGluIHNlY3RvcnMpCisgICAgICAgICAgICAgICAgICMgTWluaW11bSByZXF1aXJlZCBkaXNrIHNpemUgdG8gZml0IGFsbCBwYXJ0aXRpb25zIChpbiBieXRlcykKKyAgICAgICAgICAgICAgICAgJ21pbl9zaXplJzogMCwKKyAgICAgICAgICAgICAgICAgJ3B0YWJsZV9mb3JtYXQnOiAibXNkb3MifSAjIFBhcnRpdGlvbiB0YWJsZSBmb3JtYXQKKworICAgIGRlZiBhZGRfZGlzayhzZWxmLCBkaXNrX25hbWUsIGRpc2tfb2JqKToKKyAgICAgICAgIiIiIEFkZCBhIGRpc2sgb2JqZWN0IHdoaWNoIGhhdmUgdG8gYmUgcGFydGl0aW9uZWQuIE1vcmUgdGhhbiBvbmUgZGlzaworICAgICAgICBjYW4gYmUgYWRkZWQuIEluIGNhc2Ugb2YgbXVsdGlwbGUgZGlza3MsIGRpc2sgcGFydGl0aW9ucyBoYXZlIHRvIGJlCisgICAgICAgIGFkZGVkIGZvciBlYWNoIGRpc2sgc2VwYXJhdGVseSB3aXRoICdhZGRfcGFydGl0aW9uKCkiLiAiIiIKKworICAgICAgICBzZWxmLl9fYWRkX2Rpc2soZGlza19uYW1lKQorICAgICAgICBzZWxmLmRpc2tzW2Rpc2tfbmFtZV1bJ2Rpc2snXSA9IGRpc2tfb2JqCisKKyAgICBkZWYgX19hZGRfcGFydGl0aW9uKHNlbGYsIHBhcnQpOgorICAgICAgICAiIiIgVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgJ2FkZF9wYXJ0aXRpb24oKScgd2hpY2ggYWRkcyBhCisgICAgICAgIHBhcnRpdGlvbiB0byB0aGUgaW50ZXJuYWwgbGlzdCBvZiBwYXJ0aXRpb25zLiAiIiIKKworICAgICAgICBhc3NlcnQgbm90IHNlbGYuX3BhcnRpdGlvbnNfbGF5ZWRfb3V0CisKKyAgICAgICAgc2VsZi5wYXJ0aXRpb25zLmFwcGVuZChwYXJ0KQorICAgICAgICBzZWxmLl9fYWRkX2Rpc2socGFydFsnZGlza19uYW1lJ10pCisKKyAgICBkZWYgYWRkX3BhcnRpdGlvbihzZWxmLCBzaXplLCBkaXNrX25hbWUsIG1vdW50cG9pbnQsIHNvdXJjZV9maWxlPU5vbmUsIGZzdHlwZT1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPU5vbmUsIGZzb3B0cz1Ob25lLCBib290PUZhbHNlLCBhbGlnbj1Ob25lLCBub190YWJsZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICBwYXJ0X3R5cGU9Tm9uZSwgdXVpZD1Ob25lKToKKyAgICAgICAgIiIiIEFkZCB0aGUgbmV4dCBwYXJ0aXRpb24uIFBydGl0aW9ucyBoYXZlIHRvIGJlIGFkZGVkIGluIHRoZQorICAgICAgICBmaXJzdC10by1sYXN0IG9yZGVyLiAiIiIKKworICAgICAgICBrc19wbnVtID0gbGVuKHNlbGYucGFydGl0aW9ucykKKworICAgICAgICAjIENvbnZlcnRpbmcga0IgdG8gc2VjdG9ycyBmb3IgcGFydGVkCisgICAgICAgIHNpemUgPSBzaXplICogMTAyNCAvIHNlbGYuc2VjdG9yX3NpemUKKworICAgICAgICAjIFdlIHN0aWxsIG5lZWQgcGFydGl0aW9uIGZvciAiLyIgb3Igbm9uLXN1YnZvbHVtZQorICAgICAgICBpZiBtb3VudHBvaW50ID09ICIvIiBvciBub3QgZnNvcHRzOgorICAgICAgICAgICAgcGFydCA9IHsna3NfcG51bSc6IGtzX3BudW0sICMgUGFydGl0aW9uIG51bWJlciBpbiB0aGUgS1MgZmlsZQorICAgICAgICAgICAgICAgICAgICAnc2l6ZSc6IHNpemUsICMgSW4gc2VjdG9ycworICAgICAgICAgICAgICAgICAgICAnbW91bnRwb2ludCc6IG1vdW50cG9pbnQsICMgTW91bnQgcmVsYXRpdmUgdG8gY2hyb290CisgICAgICAgICAgICAgICAgICAgICdzb3VyY2VfZmlsZSc6IHNvdXJjZV9maWxlLCAjIHBhcnRpdGlvbiBjb250ZW50cworICAgICAgICAgICAgICAgICAgICAnZnN0eXBlJzogZnN0eXBlLCAjIEZpbGVzeXN0ZW0gdHlwZQorICAgICAgICAgICAgICAgICAgICAnZnNvcHRzJzogZnNvcHRzLCAjIEZpbGVzeXN0ZW0gbW91bnQgb3B0aW9ucworICAgICAgICAgICAgICAgICAgICAnbGFiZWwnOiBsYWJlbCwgIyBQYXJ0aXRpb24gbGFiZWwKKyAgICAgICAgICAgICAgICAgICAgJ2Rpc2tfbmFtZSc6IGRpc2tfbmFtZSwgIyBwaHlzaWNhbCBkaXNrIG5hbWUgaG9sZGluZyBwYXJ0aXRpb24KKyAgICAgICAgICAgICAgICAgICAgJ2RldmljZSc6IE5vbmUsICMga3BhcnR4IGRldmljZSBub2RlIGZvciBwYXJ0aXRpb24KKyAgICAgICAgICAgICAgICAgICAgJ251bSc6IE5vbmUsICMgUGFydGl0aW9uIG51bWJlcgorICAgICAgICAgICAgICAgICAgICAnYm9vdCc6IGJvb3QsICMgQm9vdGFibGUgZmxhZworICAgICAgICAgICAgICAgICAgICAnYWxpZ24nOiBhbGlnbiwgIyBQYXJ0aXRpb24gYWxpZ25tZW50CisgICAgICAgICAgICAgICAgICAgICdub190YWJsZScgOiBub190YWJsZSwgIyBQYXJ0aXRpb24gZG9lcyBub3QgYXBwZWFyIGluIHBhcnRpdGlvbiB0YWJsZQorICAgICAgICAgICAgICAgICAgICAncGFydF90eXBlJyA6IHBhcnRfdHlwZSwgIyBQYXJ0aXRpb24gdHlwZQorICAgICAgICAgICAgICAgICAgICAndXVpZCc6IHV1aWR9ICMgUGFydGl0aW9uIFVVSUQKKworICAgICAgICAgICAgc2VsZi5fX2FkZF9wYXJ0aXRpb24ocGFydCkKKworICAgIGRlZiBsYXlvdXRfcGFydGl0aW9ucyhzZWxmLCBwdGFibGVfZm9ybWF0PSJtc2RvcyIpOgorICAgICAgICAiIiIgTGF5b3V0IHRoZSBwYXJ0aXRpb25zLCBtZWFuaW5nIGNhbGN1bGF0ZSB0aGUgcG9zaXRpb24gb2YgZXZlcnkKKyAgICAgICAgcGFydGl0aW9uIG9uIHRoZSBkaXNrLiBUaGUgJ3B0YWJsZV9mb3JtYXQnIHBhcmFtZXRlciBkZWZpbmVzIHRoZQorICAgICAgICBwYXJ0aXRpb24gdGFibGUgZm9ybWF0IGFuZCBtYXkgYmUgIm1zZG9zIi4gIiIiCisKKyAgICAgICAgbXNnZXIuZGVidWcoIkFzc2lnbmluZyAlcyBwYXJ0aXRpb25zIHRvIGRpc2tzIiAlIHB0YWJsZV9mb3JtYXQpCisKKyAgICAgICAgaWYgc2VsZi5fcGFydGl0aW9uc19sYXllZF9vdXQ6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLl9wYXJ0aXRpb25zX2xheWVkX291dCA9IFRydWUKKworICAgICAgICAjIEdvIHRocm91Z2ggcGFydGl0aW9ucyBpbiB0aGUgb3JkZXIgdGhleSBhcmUgYWRkZWQgaW4gLmtzIGZpbGUKKyAgICAgICAgZm9yIG51bSBpbiByYW5nZShsZW4oc2VsZi5wYXJ0aXRpb25zKSk6CisgICAgICAgICAgICBwYXJ0ID0gc2VsZi5wYXJ0aXRpb25zW251bV0KKworICAgICAgICAgICAgaWYgbm90IHNlbGYuZGlza3MuaGFzX2tleShwYXJ0WydkaXNrX25hbWUnXSk6CisgICAgICAgICAgICAgICAgcmFpc2UgSW1hZ2VFcnJvcigiTm8gZGlzayAlcyBmb3IgcGFydGl0aW9uICVzIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwYXJ0WydkaXNrX25hbWUnXSwgcGFydFsnbW91bnRwb2ludCddKSkKKworICAgICAgICAgICAgaWYgcHRhYmxlX2Zvcm1hdCA9PSAnbXNkb3MnIGFuZCBwYXJ0WydwYXJ0X3R5cGUnXToKKyAgICAgICAgICAgICAgICAjIFRoZSAtLXBhcnQtdHlwZSBjYW4gYWxzbyBiZSBpbXBsZW1lbnRlZCBmb3IgTUJSIHBhcnRpdGlvbnMsCisgICAgICAgICAgICAgICAgIyBpbiB3aGljaCBjYXNlIGl0IHdvdWxkIG1hcCB0byB0aGUgMS1ieXRlICJwYXJ0aXRpb24gdHlwZSIKKyAgICAgICAgICAgICAgICAjIGZpbGVkIGF0IG9mZnNldCAzIG9mIHRoZSBwYXJ0aXRpb24gZW50cnkuCisgICAgICAgICAgICAgICAgcmFpc2UgSW1hZ2VFcnJvcigic2V0dGluZyBjdXN0b20gcGFydGl0aW9uIHR5cGUgaXMgbm90ICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcGxlbWVudGVkIGZvciBtc2RvcyBwYXJ0aXRpb25zIikKKworICAgICAgICAgICAgIyBHZXQgdGhlIGRpc2sgd2hlcmUgdGhlIHBhcnRpdGlvbiBpcyBsb2NhdGVkCisgICAgICAgICAgICBkaXNrID0gc2VsZi5kaXNrc1twYXJ0WydkaXNrX25hbWUnXV0KKyAgICAgICAgICAgIGRpc2tbJ251bXBhcnQnXSArPSAxCisgICAgICAgICAgICBpZiBub3QgcGFydFsnbm9fdGFibGUnXToKKyAgICAgICAgICAgICAgICBkaXNrWydyZWFscGFydCddICs9IDEKKyAgICAgICAgICAgIGRpc2tbJ3B0YWJsZV9mb3JtYXQnXSA9IHB0YWJsZV9mb3JtYXQKKworICAgICAgICAgICAgaWYgZGlza1snbnVtcGFydCddID09IDE6CisgICAgICAgICAgICAgICAgaWYgcHRhYmxlX2Zvcm1hdCA9PSAibXNkb3MiOgorICAgICAgICAgICAgICAgICAgICBvdmVyaGVhZCA9IE1CUl9PVkVSSEVBRAorICAgICAgICAgICAgICAgIGVsaWYgcHRhYmxlX2Zvcm1hdCA9PSAiZ3B0IjoKKyAgICAgICAgICAgICAgICAgICAgb3ZlcmhlYWQgPSBHUFRfT1ZFUkhFQUQKKworICAgICAgICAgICAgICAgICMgU2tpcCBvbmUgc2VjdG9yIHJlcXVpcmVkIGZvciB0aGUgcGFydGl0aW9uaW5nIHNjaGVtZSBvdmVyaGVhZAorICAgICAgICAgICAgICAgIGRpc2tbJ29mZnNldCddICs9IG92ZXJoZWFkCisKKyAgICAgICAgICAgIGlmIGRpc2tbJ3JlYWxwYXJ0J10gPiAzOgorICAgICAgICAgICAgICAgICMgUmVzZXJ2ZSBhIHNlY3RvciBmb3IgRUJSIGZvciBldmVyeSBsb2dpY2FsIHBhcnRpdGlvbgorICAgICAgICAgICAgICAgICMgYmVmb3JlIGFsaWdubWVudCBpcyBwZXJmb3JtZWQuCisgICAgICAgICAgICAgICAgaWYgcHRhYmxlX2Zvcm1hdCA9PSAibXNkb3MiOgorICAgICAgICAgICAgICAgICAgICBkaXNrWydvZmZzZXQnXSArPSAxCisKKworICAgICAgICAgICAgaWYgcGFydFsnYWxpZ24nXToKKyAgICAgICAgICAgICAgICAjIElmIG5vdCBmaXJzdCBwYXJ0aXRpb24gYW5kIHdlIGRvIGhhdmUgYWxpZ25tZW50IHNldCB3ZSBuZWVkCisgICAgICAgICAgICAgICAgIyB0byBhbGlnbiB0aGUgcGFydGl0aW9uLgorICAgICAgICAgICAgICAgICMgRklYTUU6IFRoaXMgbGVhdmVzIGEgZW1wdHkgc3BhY2VzIHRvIHRoZSBkaXNrLiBUbyBmaWxsIHRoZQorICAgICAgICAgICAgICAgICMgZ2FwcyB3ZSBjb3VsZCBlbmxhcmdlYSB0aGUgcHJldmlvdXMgcGFydGl0aW9uPworCisgICAgICAgICAgICAgICAgIyBDYWxjIGhvdyBtdWNoIHRoZSBhbGlnbm1lbnQgaXMgb2ZmLgorICAgICAgICAgICAgICAgIGFsaWduX3NlY3RvcnMgPSBkaXNrWydvZmZzZXQnXSAlIChwYXJ0WydhbGlnbiddICogMTAyNCAvIHNlbGYuc2VjdG9yX3NpemUpCisKKyAgICAgICAgICAgICAgICBpZiBhbGlnbl9zZWN0b3JzOgorICAgICAgICAgICAgICAgICAgICAjIElmIHBhcnRpdGlvbiBpcyBub3QgYWxpZ25lZCBhcyByZXF1aXJlZCwgd2UgbmVlZAorICAgICAgICAgICAgICAgICAgICAjIHRvIG1vdmUgZm9yd2FyZCB0byB0aGUgbmV4dCBhbGlnbm1lbnQgcG9pbnQKKyAgICAgICAgICAgICAgICAgICAgYWxpZ25fc2VjdG9ycyA9IChwYXJ0WydhbGlnbiddICogMTAyNCAvIHNlbGYuc2VjdG9yX3NpemUpIC0gYWxpZ25fc2VjdG9ycworCisgICAgICAgICAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCJSZWFsaWdubWVudCBmb3IgJXMlcyB3aXRoICVzIHNlY3RvcnMsIG9yaWdpbmFsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG9mZnNldCAlcywgdGFyZ2V0IGFsaWdubWVudCBpcyAlc0suIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJ0WydkaXNrX25hbWUnXSwgZGlza1snbnVtcGFydCddLCBhbGlnbl9zZWN0b3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlza1snb2Zmc2V0J10sIHBhcnRbJ2FsaWduJ10pKQorCisgICAgICAgICAgICAgICAgICAgICMgaW5jcmVhc2UgdGhlIG9mZnNldCBzbyB3ZSBhY3R1YWxseSBzdGFydCB0aGUgcGFydGl0aW9uIG9uIHJpZ2h0IGFsaWdubWVudAorICAgICAgICAgICAgICAgICAgICBkaXNrWydvZmZzZXQnXSArPSBhbGlnbl9zZWN0b3JzCisKKyAgICAgICAgICAgIHBhcnRbJ3N0YXJ0J10gPSBkaXNrWydvZmZzZXQnXQorICAgICAgICAgICAgZGlza1snb2Zmc2V0J10gKz0gcGFydFsnc2l6ZSddCisKKyAgICAgICAgICAgIHBhcnRbJ3R5cGUnXSA9ICdwcmltYXJ5JworICAgICAgICAgICAgaWYgbm90IHBhcnRbJ25vX3RhYmxlJ106CisgICAgICAgICAgICAgICAgcGFydFsnbnVtJ10gPSBkaXNrWydyZWFscGFydCddCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhcnRbJ251bSddID0gMAorCisgICAgICAgICAgICBpZiBkaXNrWydwdGFibGVfZm9ybWF0J10gPT0gIm1zZG9zIjoKKyAgICAgICAgICAgICAgICBpZiBkaXNrWydyZWFscGFydCddID4gMzoKKyAgICAgICAgICAgICAgICAgICAgcGFydFsndHlwZSddID0gJ2xvZ2ljYWwnCisgICAgICAgICAgICAgICAgICAgIHBhcnRbJ251bSddID0gZGlza1sncmVhbHBhcnQnXSArIDEKKworICAgICAgICAgICAgZGlza1sncGFydGl0aW9ucyddLmFwcGVuZChudW0pCisgICAgICAgICAgICBtc2dlci5kZWJ1ZygiQXNzaWduZWQgJXMgdG8gJXMlZCwgc2VjdG9ycyByYW5nZSAlZC0lZCBzaXplICVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJzZWN0b3JzICglZCBieXRlcykuIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGFydFsnbW91bnRwb2ludCddLCBwYXJ0WydkaXNrX25hbWUnXSwgcGFydFsnbnVtJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydFsnc3RhcnQnXSwgcGFydFsnc3RhcnQnXSArIHBhcnRbJ3NpemUnXSAtIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydFsnc2l6ZSddLCBwYXJ0WydzaXplJ10gKiBzZWxmLnNlY3Rvcl9zaXplKSkKKworICAgICAgICAjIE9uY2UgYWxsIHRoZSBwYXJ0aXRpb25zIGhhdmUgYmVlbiBsYXllZCBvdXQsIHdlIGNhbiBjYWxjdWxhdGUgdGhlCisgICAgICAgICMgbWludW1pbSBkaXNrIHNpemVzLgorICAgICAgICBmb3IgZGlzayBpbiBzZWxmLmRpc2tzLnZhbHVlcygpOgorICAgICAgICAgICAgZGlza1snbWluX3NpemUnXSA9IGRpc2tbJ29mZnNldCddCisgICAgICAgICAgICBpZiBkaXNrWydwdGFibGVfZm9ybWF0J10gPT0gImdwdCI6CisgICAgICAgICAgICAgICAgZGlza1snbWluX3NpemUnXSArPSBHUFRfT1ZFUkhFQUQKKworICAgICAgICAgICAgZGlza1snbWluX3NpemUnXSAqPSBzZWxmLnNlY3Rvcl9zaXplCisKKyAgICBkZWYgX19jcmVhdGVfcGFydGl0aW9uKHNlbGYsIGRldmljZSwgcGFydHR5cGUsIGZzdHlwZSwgc3RhcnQsIHNpemUpOgorICAgICAgICAiIiIgQ3JlYXRlIGEgcGFydGl0aW9uIG9uIGFuIGltYWdlIGRlc2NyaWJlZCBieSB0aGUgJ2RldmljZScgb2JqZWN0LiAiIiIKKworICAgICAgICAjIFN0YXJ0IGlzIGluY2x1ZGVkIHRvIHRoZSBzaXplIHNvIHdlIG5lZWQgdG8gc3Vic3RyYWN0IG9uZSBmcm9tIHRoZSBlbmQuCisgICAgICAgIGVuZCA9IHN0YXJ0ICsgc2l6ZSAtIDEKKyAgICAgICAgbXNnZXIuZGVidWcoIkFkZGVkICclcycgcGFydGl0aW9uLCBzZWN0b3JzICVkLSVkLCBzaXplICVkIHNlY3RvcnMiICUKKyAgICAgICAgICAgICAgICAgICAgKHBhcnR0eXBlLCBzdGFydCwgZW5kLCBzaXplKSkKKworICAgICAgICBjbWQgPSAicGFydGVkIC1zICVzIHVuaXQgcyBta3BhcnQgJXMiICUgKGRldmljZSwgcGFydHR5cGUpCisgICAgICAgIGlmIGZzdHlwZToKKyAgICAgICAgICAgIGNtZCArPSAiICVzIiAlIGZzdHlwZQorICAgICAgICBjbWQgKz0gIiAlZCAlZCIgJSAoc3RhcnQsIGVuZCkKKworICAgICAgICByZXR1cm4gZXhlY19uYXRpdmVfY21kKGNtZCwgc2VsZi5uYXRpdmVfc3lzcm9vdCkKKworICAgIGRlZiBfX2Zvcm1hdF9kaXNrcyhzZWxmKToKKyAgICAgICAgc2VsZi5sYXlvdXRfcGFydGl0aW9ucygpCisKKyAgICAgICAgZm9yIGRldiBpbiBzZWxmLmRpc2tzLmtleXMoKToKKyAgICAgICAgICAgIGRpc2sgPSBzZWxmLmRpc2tzW2Rldl0KKyAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCJJbml0aWFsaXppbmcgcGFydGl0aW9uIHRhYmxlIGZvciAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAoZGlza1snZGlzayddLmRldmljZSkpCisgICAgICAgICAgICBleGVjX25hdGl2ZV9jbWQoInBhcnRlZCAtcyAlcyBta2xhYmVsICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGlza1snZGlzayddLmRldmljZSwgZGlza1sncHRhYmxlX2Zvcm1hdCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5hdGl2ZV9zeXNyb290KQorCisgICAgICAgIG1zZ2VyLmRlYnVnKCJDcmVhdGluZyBwYXJ0aXRpb25zIikKKworICAgICAgICBmb3IgcGFydCBpbiBzZWxmLnBhcnRpdGlvbnM6CisgICAgICAgICAgICBpZiBwYXJ0WydudW0nXSA9PSAwOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGRpc2sgPSBzZWxmLmRpc2tzW3BhcnRbJ2Rpc2tfbmFtZSddXQorICAgICAgICAgICAgaWYgZGlza1sncHRhYmxlX2Zvcm1hdCddID09ICJtc2RvcyIgYW5kIHBhcnRbJ251bSddID09IDU6CisgICAgICAgICAgICAgICAgIyBDcmVhdGUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uIChub3RlOiBleHRlbmRlZAorICAgICAgICAgICAgICAgICMgcGFydGl0aW9uIGlzIGRlc2NyaWJlZCBpbiBNQlIgYW5kIGNvbnRhaW5zIGFsbAorICAgICAgICAgICAgICAgICMgbG9naWNhbCBwYXJ0aXRpb25zKS4gVGhlIGxvZ2ljYWwgcGFydGl0aW9ucyBzYXZlIGEKKyAgICAgICAgICAgICAgICAjIHNlY3RvciBmb3IgYW4gRUJSIGp1c3QgYmVmb3JlIHRoZSBzdGFydCBvZiBhCisgICAgICAgICAgICAgICAgIyBwYXJ0aXRpb24uIFRoZSBleHRlbmRlZCBwYXJ0aXRpb24gbXVzdCBzdGFydCBvbmUKKyAgICAgICAgICAgICAgICAjIHNlY3RvciBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBsb2dpY2FsCisgICAgICAgICAgICAgICAgIyBwYXJ0aXRpb24uIFRoaXMgd2F5IHRoZSBmaXJzdCBFQlIgaXMgaW5zaWRlIG9mIHRoZQorICAgICAgICAgICAgICAgICMgZXh0ZW5kZWQgcGFydGl0aW9uLiBTaW5jZSB0aGUgZXh0ZW5kZWQgcGFydGl0aW9ucworICAgICAgICAgICAgICAgICMgc3RhcnRzIGEgc2VjdG9yIGJlZm9yZSB0aGUgZmlyc3QgbG9naWNhbCBwYXJ0aXRpb24sCisgICAgICAgICAgICAgICAgIyBhZGQgYSBzZWN0b3IgYXQgdGhlIGJhY2ssIHNvIHRoYXQgdGhlcmUgaXMgZW5vdWdoCisgICAgICAgICAgICAgICAgIyByb29tIGZvciBhbGwgbG9naWNhbCBwYXJ0aXRpb25zLgorICAgICAgICAgICAgICAgIHNlbGYuX19jcmVhdGVfcGFydGl0aW9uKGRpc2tbJ2Rpc2snXS5kZXZpY2UsICJleHRlbmRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwgcGFydFsnc3RhcnQnXSAtIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlza1snb2Zmc2V0J10gLSBwYXJ0WydzdGFydCddICsgMSkKKworICAgICAgICAgICAgaWYgcGFydFsnZnN0eXBlJ10gPT0gInN3YXAiOgorICAgICAgICAgICAgICAgIHBhcnRlZF9mc190eXBlID0gImxpbnV4LXN3YXAiCisgICAgICAgICAgICBlbGlmIHBhcnRbJ2ZzdHlwZSddID09ICJ2ZmF0IjoKKyAgICAgICAgICAgICAgICBwYXJ0ZWRfZnNfdHlwZSA9ICJmYXQzMiIKKyAgICAgICAgICAgIGVsaWYgcGFydFsnZnN0eXBlJ10gPT0gIm1zZG9zIjoKKyAgICAgICAgICAgICAgICBwYXJ0ZWRfZnNfdHlwZSA9ICJmYXQxNiIKKyAgICAgICAgICAgIGVsaWYgcGFydFsnZnN0eXBlJ10gPT0gIm9udHJhY2tkbTZhdXgzIjoKKyAgICAgICAgICAgICAgICBwYXJ0ZWRfZnNfdHlwZSA9ICJvbnRyYWNrZG02YXV4MyIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBUeXBlIGZvciBleHQyL2V4dDMvZXh0NC9idHJmcworICAgICAgICAgICAgICAgIHBhcnRlZF9mc190eXBlID0gImV4dDIiCisKKyAgICAgICAgICAgICMgQm9vdCBST00gb2YgT01BUCBib2FyZHMgcmVxdWlyZSB2ZmF0IGJvb3QgcGFydGl0aW9uIHRvIGhhdmUgYW4KKyAgICAgICAgICAgICMgZXZlbiBudW1iZXIgb2Ygc2VjdG9ycy4KKyAgICAgICAgICAgIGlmIHBhcnRbJ21vdW50cG9pbnQnXSA9PSAiL2Jvb3QiIGFuZCBwYXJ0Wydmc3R5cGUnXSBpbiBbInZmYXQiLCAibXNkb3MiXSBcCisgICAgICAgICAgICAgICBhbmQgcGFydFsnc2l6ZSddICUgMjoKKyAgICAgICAgICAgICAgICBtc2dlci5kZWJ1ZygiU3Vic3RyYWN0aW5nIG9uZSBzZWN0b3IgZnJvbSAnJXMnIHBhcnRpdGlvbiB0byAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0IGV2ZW4gbnVtYmVyIG9mIHNlY3RvcnMgZm9yIHRoZSBwYXJ0aXRpb24iICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRbJ21vdW50cG9pbnQnXSkKKyAgICAgICAgICAgICAgICBwYXJ0WydzaXplJ10gLT0gMQorCisgICAgICAgICAgICBzZWxmLl9fY3JlYXRlX3BhcnRpdGlvbihkaXNrWydkaXNrJ10uZGV2aWNlLCBwYXJ0Wyd0eXBlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0ZWRfZnNfdHlwZSwgcGFydFsnc3RhcnQnXSwgcGFydFsnc2l6ZSddKQorCisgICAgICAgICAgICBpZiBwYXJ0WydwYXJ0X3R5cGUnXToKKyAgICAgICAgICAgICAgICBtc2dlci5kZWJ1ZygicGFydGl0aW9uICVkOiBzZXQgdHlwZSBVSUQgdG8gJXMiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJ0WydudW0nXSwgcGFydFsncGFydF90eXBlJ10pKQorICAgICAgICAgICAgICAgIGV4ZWNfbmF0aXZlX2NtZCgic2dkaXNrIC0tdHlwZWNvZGU9JWQ6JXMgJXMiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFydFsnbnVtJ10sIHBhcnRbJ3BhcnRfdHlwZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlza1snZGlzayddLmRldmljZSksIHNlbGYubmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgICAgIGlmIHBhcnRbJ3V1aWQnXToKKyAgICAgICAgICAgICAgICBtc2dlci5kZWJ1ZygicGFydGl0aW9uICVkOiBzZXQgVVVJRCB0byAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcnRbJ251bSddLCBwYXJ0Wyd1dWlkJ10pKQorICAgICAgICAgICAgICAgIGV4ZWNfbmF0aXZlX2NtZCgic2dkaXNrIC0tcGFydGl0aW9uLWd1aWQ9JWQ6JXMgJXMiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFydFsnbnVtJ10sIHBhcnRbJ3V1aWQnXSwgZGlza1snZGlzayddLmRldmljZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgICAgIGlmIHBhcnRbJ2Jvb3QnXToKKyAgICAgICAgICAgICAgICBmbGFnX25hbWUgPSAibGVnYWN5X2Jvb3QiIGlmIGRpc2tbJ3B0YWJsZV9mb3JtYXQnXSA9PSAnZ3B0JyBlbHNlICJib290IgorICAgICAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCJTZXQgJyVzJyBmbGFnIGZvciBwYXJ0aXRpb24gJyVzJyBvbiBkaXNrICclcyciICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbGFnX25hbWUsIHBhcnRbJ251bSddLCBkaXNrWydkaXNrJ10uZGV2aWNlKSkKKyAgICAgICAgICAgICAgICBleGVjX25hdGl2ZV9jbWQoInBhcnRlZCAtcyAlcyBzZXQgJWQgJXMgb24iICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGlza1snZGlzayddLmRldmljZSwgcGFydFsnbnVtJ10sIGZsYWdfbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgICAgICMgUGFydGVkIGRlZmF1bHRzIHRvIGVuYWJsaW5nIHRoZSBsYmEgZmxhZyBmb3IgZmF0MTYgcGFydGl0aW9ucywKKyAgICAgICAgICAgICMgd2hpY2ggY2F1c2VzIGNvbXBhdGliaWxpdHkgaXNzdWVzIHdpdGggc29tZSBmaXJtd2FyZSAoYW5kIHJlYWxseQorICAgICAgICAgICAgIyBpc24ndCBuZWNlc3NhcnkpLgorICAgICAgICAgICAgaWYgcGFydGVkX2ZzX3R5cGUgPT0gImZhdDE2IjoKKyAgICAgICAgICAgICAgICBpZiBkaXNrWydwdGFibGVfZm9ybWF0J10gPT0gJ21zZG9zJzoKKyAgICAgICAgICAgICAgICAgICAgbXNnZXIuZGVidWcoIkRpc2FibGUgJ2xiYScgZmxhZyBmb3IgcGFydGl0aW9uICclcycgb24gZGlzayAnJXMnIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcnRbJ251bSddLCBkaXNrWydkaXNrJ10uZGV2aWNlKSkKKyAgICAgICAgICAgICAgICAgICAgZXhlY19uYXRpdmVfY21kKCJwYXJ0ZWQgLXMgJXMgc2V0ICVkIGxiYSBvZmYiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpc2tbJ2Rpc2snXS5kZXZpY2UsIHBhcnRbJ251bSddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmF0aXZlX3N5c3Jvb3QpCisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kaXNrczoKKyAgICAgICAgICAgIGZvciBkZXYgaW4gc2VsZi5kaXNrczoKKyAgICAgICAgICAgICAgICBkaXNrID0gc2VsZi5kaXNrc1tkZXZdCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBkaXNrWydkaXNrJ10uY2xlYW51cCgpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgYXNzZW1ibGUoc2VsZiwgaW1hZ2VfZmlsZSk6CisgICAgICAgIG1zZ2VyLmRlYnVnKCJJbnN0YWxsaW5nIHBhcnRpdGlvbnMiKQorCisgICAgICAgIGZvciBwYXJ0IGluIHNlbGYucGFydGl0aW9uczoKKyAgICAgICAgICAgIHNvdXJjZSA9IHBhcnRbJ3NvdXJjZV9maWxlJ10KKyAgICAgICAgICAgIGlmIHNvdXJjZToKKyAgICAgICAgICAgICAgICAjIGluc3RhbGwgc291cmNlX2ZpbGUgY29udGVudHMgaW50byBhIHBhcnRpdGlvbgorICAgICAgICAgICAgICAgIGNtZCA9ICJkZCBpZj0lcyBvZj0lcyBicz0lZCBzZWVrPSVkIGNvdW50PSVkIGNvbnY9bm90cnVuYyIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgKHNvdXJjZSwgaW1hZ2VfZmlsZSwgc2VsZi5zZWN0b3Jfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgcGFydFsnc3RhcnQnXSwgcGFydFsnc2l6ZSddKQorICAgICAgICAgICAgICAgIGV4ZWNfY21kKGNtZCkKKworICAgICAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCJJbnN0YWxsZWQgJXMgaW4gcGFydGl0aW9uICVkLCBzZWN0b3JzICVkLSVkLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpemUgJWQgc2VjdG9ycyIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvdXJjZSwgcGFydFsnbnVtJ10sIHBhcnRbJ3N0YXJ0J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRbJ3N0YXJ0J10gKyBwYXJ0WydzaXplJ10gLSAxLCBwYXJ0WydzaXplJ10pKQorCisgICAgICAgICAgICAgICAgb3MucmVuYW1lKHNvdXJjZSwgaW1hZ2VfZmlsZSArICcucCVkJyAlIHBhcnRbJ251bSddKQorCisgICAgZGVmIGNyZWF0ZShzZWxmKToKKyAgICAgICAgZm9yIGRldiBpbiBzZWxmLmRpc2tzLmtleXMoKToKKyAgICAgICAgICAgIGRpc2sgPSBzZWxmLmRpc2tzW2Rldl0KKyAgICAgICAgICAgIGRpc2tbJ2Rpc2snXS5jcmVhdGUoKQorCisgICAgICAgIHNlbGYuX19mb3JtYXRfZGlza3MoKQorCisgICAgICAgIHJldHVybgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvcnVubmVyLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvcnVubmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MzE5MTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9ydW5uZXIucHkKQEAgLTAsMCArMSwxMTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbiAtdHQKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDExIEludGVsLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorIyBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2Zyb20gd2ljIGltcG9ydCBtc2dlcgorCitkZWYgcnVudG9vbChjbWRsbl9vcl9hcmdzLCBjYXRjaD0xKToKKyAgICAiIiIgd3JhcHBlciBmb3IgbW9zdCBvZiB0aGUgc3VicHJvY2VzcyBjYWxscworICAgIGlucHV0OgorICAgICAgICBjbWRsbl9vcl9hcmdzOiBjYW4gYmUgYm90aCBhcmdzIGFuZCBjbWRsbiBzdHIgKHNoZWxsPVRydWUpCisgICAgICAgIGNhdGNoOiAwLCBxdWl0ZWx5IHJ1bgorICAgICAgICAgICAgICAgMSwgb25seSBTVERPVVQKKyAgICAgICAgICAgICAgIDIsIG9ubHkgU1RERVJSCisgICAgICAgICAgICAgICAzLCBib3RoIFNURE9VVCBhbmQgU1RERVJSCisgICAgcmV0dXJuOgorICAgICAgICAocmMsIG91dHB1dCkKKyAgICAgICAgaWYgY2F0Y2g9PTA6IHRoZSBvdXRwdXQgd2lsbCBhbHdheXMgTm9uZQorICAgICIiIgorCisgICAgaWYgY2F0Y2ggbm90IGluICgwLCAxLCAyLCAzKToKKyAgICAgICAgIyBpbnZhbGlkIGNhdGNoIHNlbGVjdGlvbiwgd2lsbCBjYXVzZSBleGNlcHRpb24sIHRoYXQncyBnb29kCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBpZiBpc2luc3RhbmNlKGNtZGxuX29yX2FyZ3MsIGxpc3QpOgorICAgICAgICBjbWQgPSBjbWRsbl9vcl9hcmdzWzBdCisgICAgICAgIHNoZWxsID0gRmFsc2UKKyAgICBlbHNlOgorICAgICAgICBpbXBvcnQgc2hsZXgKKyAgICAgICAgY21kID0gc2hsZXguc3BsaXQoY21kbG5fb3JfYXJncylbMF0KKyAgICAgICAgc2hlbGwgPSBUcnVlCisKKyAgICBpZiBjYXRjaCAhPSAzOgorICAgICAgICBkZXZfbnVsbCA9IG9zLm9wZW4oIi9kZXYvbnVsbCIsIG9zLk9fV1JPTkxZKQorCisgICAgaWYgY2F0Y2ggPT0gMDoKKyAgICAgICAgc291dCA9IGRldl9udWxsCisgICAgICAgIHNlcnIgPSBkZXZfbnVsbAorICAgIGVsaWYgY2F0Y2ggPT0gMToKKyAgICAgICAgc291dCA9IHN1YnByb2Nlc3MuUElQRQorICAgICAgICBzZXJyID0gZGV2X251bGwKKyAgICBlbGlmIGNhdGNoID09IDI6CisgICAgICAgIHNvdXQgPSBkZXZfbnVsbAorICAgICAgICBzZXJyID0gc3VicHJvY2Vzcy5QSVBFCisgICAgZWxpZiBjYXRjaCA9PSAzOgorICAgICAgICBzb3V0ID0gc3VicHJvY2Vzcy5QSVBFCisgICAgICAgIHNlcnIgPSBzdWJwcm9jZXNzLlNURE9VVAorCisgICAgdHJ5OgorICAgICAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihjbWRsbl9vcl9hcmdzLCBzdGRvdXQ9c291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXNlcnIsIHNoZWxsPXNoZWxsKQorICAgICAgICAoc291dCwgc2VycikgPSBwcm9jZXNzLmNvbW11bmljYXRlKCkKKyAgICAgICAgIyBjb21iaW5lIHN0ZG91dCBhbmQgc3RkZXJyLCBmaWx0ZXIgTm9uZSBvdXQKKyAgICAgICAgb3V0ID0gJycuam9pbihmaWx0ZXIoTm9uZSwgW3NvdXQsIHNlcnJdKSkKKyAgICBleGNlcHQgT1NFcnJvciwgZXJyOgorICAgICAgICBpZiBlcnIuZXJybm8gPT0gMjoKKyAgICAgICAgICAgICMgW0Vycm5vIDJdIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCdDYW5ub3QgcnVuIGNvbW1hbmQ6ICVzLCBsb3N0IGRlcGVuZGVuY3k/JyAlIGNtZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlICMgcmVsYXkKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiBjYXRjaCAhPSAzOgorICAgICAgICAgICAgb3MuY2xvc2UoZGV2X251bGwpCisKKyAgICByZXR1cm4gKHByb2Nlc3MucmV0dXJuY29kZSwgb3V0KQorCitkZWYgc2hvdyhjbWRsbl9vcl9hcmdzKToKKyAgICAjIHNob3cgYWxsIHRoZSBtZXNzYWdlIHVzaW5nIG1zZ2VyLnZlcmJvc2UKKworICAgIHJjb2RlLCBvdXQgPSBydW50b29sKGNtZGxuX29yX2FyZ3MsIGNhdGNoPTMpCisKKyAgICBpZiBpc2luc3RhbmNlKGNtZGxuX29yX2FyZ3MsIGxpc3QpOgorICAgICAgICBjbWQgPSAnICcuam9pbihjbWRsbl9vcl9hcmdzKQorICAgIGVsc2U6CisgICAgICAgIGNtZCA9IGNtZGxuX29yX2FyZ3MKKworICAgIG1zZyA9ICdydW5uaW5nIGNvbW1hbmQ6ICIlcyInICUgY21kCisgICAgaWYgb3V0OgorICAgICAgICBvdXQgPSBvdXQuc3RyaXAoKQorICAgIGlmIG91dDoKKyAgICAgICAgbXNnICs9ICcsIHdpdGggb3V0cHV0OjonCisgICAgICAgIG1zZyArPSAnXG4gICstLS0tLS0tLS0tLS0tLS0tJworICAgICAgICBmb3IgbGluZSBpbiBvdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgbXNnICs9ICdcbiAgfCAlcycgJSBsaW5lCisgICAgICAgIG1zZyArPSAnXG4gICstLS0tLS0tLS0tLS0tLS0tJworCisgICAgbXNnZXIudmVyYm9zZShtc2cpCisgICAgcmV0dXJuIHJjb2RlCisKK2RlZiBvdXRzKGNtZGxuX29yX2FyZ3MsIGNhdGNoPTEpOgorICAgICMgZ2V0IHRoZSBvdXRwdXRzIG9mIHRvb2xzCisgICAgcmV0dXJuIHJ1bnRvb2woY21kbG5fb3JfYXJncywgY2F0Y2gpWzFdLnN0cmlwKCkKKworZGVmIHF1aWV0KGNtZGxuX29yX2FyZ3MpOgorICAgIHJldHVybiBydW50b29sKGNtZGxuX29yX2FyZ3MsIGNhdGNoPTApWzBdCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9zeXNsaW51eC5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL3N5c2xpbnV4LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhY2UyODYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9zeXNsaW51eC5weQpAQCAtMCwwICsxLDU4IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyMgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyMKKyMgQVVUSE9SCisjIEFkcmlhbiBGcmVpaG9mZXIgPGFkcmlhbi5mcmVpaG9mZXIgKGF0XSBuZXJhdGVjLmNvbT4KKworCitpbXBvcnQgcmUKK2Zyb20gd2ljIGltcG9ydCBtc2dlcgorCisKK2RlZiBzZXJpYWxfY29uc29sZV9mb3JtX2thcmdzKGtlcm5lbF9hcmdzKToKKyAgICAiIiIKKyAgICBDcmVhdGUgU0VSSUFMLi4uIGxpbmUgZnJvbSBrZXJuZWwgcGFyYW1ldGVycworCisgICAgc3lzbGludXggbmVlZHMgYSBsaW5lIFNFUklBTCBwb3J0IFtiYXVkcmF0ZSBbZmxvd2NvbnRyb2xdXQorICAgIGluIHRoZSBzeXNsaW51eC5jZmcgZmlsZS4gVGhlIGNvbmZpZyBsaW5lIGlzIGdlbmVyYXRlZCBiYXNlZAorICAgIG9uIGtlcm5lbCBib290IHBhcmFtZXRlcnMuIFRoZSB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZmlyc3QKKyAgICB0dHlTIGNvbnNvbGUgYXJlIGNvbnNpZGVyZWQgZm9yIHN5c2xpbnV4IGNvbmZpZy4KKyAgICBAcGFyYW0ga2VybmVsX2FyZ3Mga2VybmVsIGNvbW1hbmQgbGluZQorICAgIEByZXR1cm4gbGluZSBmb3Igc3lzbGludXggY29uZmlnIGZpbGUgZS5nLiAiU0VSSUFMIDAgMTE1MjAwIgorICAgICIiIgorICAgIHN5c2xpbnV4X2NvbmYgPSAiIgorICAgIGZvciBwYXJhbSBpbiBrZXJuZWxfYXJncy5zcGxpdCgpOgorICAgICAgICBwYXJhbV9tYXRjaCA9IHJlLm1hdGNoKCJjb25zb2xlPXR0eVMoWzAtOV0rKSw/KFswLTldKikoW25vZV0/KShbMC05XT8pKHI/KSIsIHBhcmFtKQorICAgICAgICBpZiBwYXJhbV9tYXRjaDoKKyAgICAgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIlNFUklBTCAiICsgcGFyYW1fbWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgICAgICMgYmF1ZHJhdGUKKyAgICAgICAgICAgIGlmIHBhcmFtX21hdGNoLmdyb3VwKDIpOgorICAgICAgICAgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIiAiICsgcGFyYW1fbWF0Y2guZ3JvdXAoMikKKyAgICAgICAgICAgICMgcGFyaXR5CisgICAgICAgICAgICBpZiBwYXJhbV9tYXRjaC5ncm91cCgzKSBhbmQgcGFyYW1fbWF0Y2guZ3JvdXAoMykgIT0gJ24nOgorICAgICAgICAgICAgICAgIG1zZ2VyLndhcm5pbmcoInN5c2xpbnV4IGRvZXMgbm90IHN1cHBvcnQgcGFyaXR5IGZvciBjb25zb2xlLiB7fSBpcyBpZ25vcmVkLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQocGFyYW1fbWF0Y2guZ3JvdXAoMykpKQorICAgICAgICAgICAgIyBudW1iZXIgb2YgYml0cworICAgICAgICAgICAgaWYgcGFyYW1fbWF0Y2guZ3JvdXAoNCkgYW5kIHBhcmFtX21hdGNoLmdyb3VwKDQpICE9ICc4JzoKKyAgICAgICAgICAgICAgICBtc2dlci53YXJuaW5nKCJzeXNsaW51eCBzdXBwb3J0cyA4IGJpdCBjb25zb2xlIGNvbmZpZ3VyYXRpb24gb25seS4ge30gaXMgaWdub3JlZC4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHBhcmFtX21hdGNoLmdyb3VwKDQpKSkKKyAgICAgICAgICAgICMgZmxvdyBjb250cm9sCisgICAgICAgICAgICBpZiBwYXJhbV9tYXRjaC5ncm91cCg1KSBhbmQgcGFyYW1fbWF0Y2guZ3JvdXAoNSkgIT0gJyc6CisgICAgICAgICAgICAgICAgbXNnZXIud2FybmluZygic3lzbGludXggY29uc29sZSBmbG93Y29udHJvbCBjb25maWd1cmF0aW9uLiB7fSBpcyBpZ25vcmVkLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQocGFyYW1fbWF0Y2guZ3JvdXAoNSkpKQorICAgICAgICAgICAgYnJlYWsKKworICAgIHJldHVybiBzeXNsaW51eF9jb25mCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbG5yIGIveW9jdG8tcG9reS9zY3JpcHRzL2xucgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZGFjZWJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xucgpAQCAtMCwwICsxLDIxIEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgQ3JlYXRlIGEgKnJlbGF0aXZlKiBzeW1saW5rLCBqdXN0IGxpa2UgbG4gLS1yZWxhdGl2ZSBkb2VzIGJ1dCB3aXRob3V0IG5lZWRpbmcKKyMgY29yZXV0aWxzIDguMTYuCisKK2ltcG9ydCBzeXMsIG9zCisKK2lmIGxlbihzeXMuYXJndikgIT0gMzoKKyAgIHByaW50ICIkIGxuciBUQVJHRVQgTElOS19OQU1FIgorICAgc3lzLmV4aXQoMSkKKwordGFyZ2V0ID0gc3lzLmFyZ3ZbMV0KK2xpbmtuYW1lID0gc3lzLmFyZ3ZbMl0KKworaWYgb3MucGF0aC5pc2Ficyh0YXJnZXQpOgorICAgaWYgbm90IG9zLnBhdGguaXNhYnMobGlua25hbWUpOgorICAgICAgbGlua25hbWUgPSBvcy5wYXRoLmFic3BhdGgobGlua25hbWUpCisgICBzdGFydCA9IG9zLnBhdGguZGlybmFtZShsaW5rbmFtZSkKKyAgIHRhcmdldCA9IG9zLnBhdGgucmVscGF0aCh0YXJnZXQsIHN0YXJ0KQorCitvcy5zeW1saW5rKHRhcmdldCwgbGlua25hbWUpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbXVsdGlsaWJfaGVhZGVyX3dyYXBwZXIuaCBiL3lvY3RvLXBva3kvc2NyaXB0cy9tdWx0aWxpYl9oZWFkZXJfd3JhcHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhODc1NDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbXVsdGlsaWJfaGVhZGVyX3dyYXBwZXIuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTEgYnkgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICogCisgKi8KKworI2luY2x1ZGUgPGJpdHMvd29yZHNpemUuaD4KKworI2lmZGVmIF9fV09SRFNJWkUKKworI2lmIF9fV09SRFNJWkUgPT0gMzIKKworI2lmZGVmIF9NSVBTX1NJTQorCisjaWYgX01JUFNfU0lNID09IF9BQklPMzIKKyNpbmNsdWRlIDxFTlRFUl9IRUFERVJfRklMRU5BTUVfSEVSRS0zMi5oPgorI2VsaWYgX01JUFNfU0lNID09IF9BQklOMzIKKyNpbmNsdWRlIDxFTlRFUl9IRUFERVJfRklMRU5BTUVfSEVSRS1uMzIuaD4KKyNlbHNlCisjZXJyb3IgIlVua25vd24gX01JUFNfU0lNIgorI2VuZGlmCisKKyNlbHNlIC8qIF9NSVBTX1NJTSBpcyBub3QgZGVmaW5lZCAqLworI2luY2x1ZGUgPEVOVEVSX0hFQURFUl9GSUxFTkFNRV9IRVJFLTMyLmg+CisjZW5kaWYKKworI2VsaWYgX19XT1JEU0laRSA9PSA2NAorI2luY2x1ZGUgPEVOVEVSX0hFQURFUl9GSUxFTkFNRV9IRVJFLTY0Lmg+CisjZWxzZQorI2Vycm9yICJVbmtub3duIF9fV09SRFNJWkUgZGV0ZWN0ZWQiCisjZW5kaWYgLyogbWF0Y2hlcyAjaWYgX19XT1JEU0laRSA9PSAzMiAqLworCisjZWxzZSAvKiBfX1dPUkRTSVpFIGlzIG5vdCBkZWZpbmVkICovCisKKyNlcnJvciAiX19XT1JEU0laRSBpcyBub3QgZGVmaW5lZCIKKworI2VuZGlmCisgIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL25hdGl2ZS1pbnRlcmNlcHQvY2hvd24gYi95b2N0by1wb2t5L3NjcmlwdHMvbmF0aXZlLWludGVyY2VwdC9jaG93bgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZjQzMjcxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL25hdGl2ZS1pbnRlcmNlcHQvY2hvd24KQEAgLTAsMCArMSwyIEBACisjISAvYmluL3NoCitlY2hvICJJbnRlcmNlcHQgJDA6ICRAIC0tIGRvIG5vdGhpbmciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvb2UtYnVpbGRlbnYtaW50ZXJuYWwgYi95b2N0by1wb2t5L3NjcmlwdHMvb2UtYnVpbGRlbnYtaW50ZXJuYWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWVkMjcyMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1idWlsZGVudi1pbnRlcm5hbApAQCAtMCwwICsxLDEwOSBAQAorIyEvYmluL3NoCisKKyMgT0UtQ29yZSBCdWlsZCBFbnZpcm9ubWVudCBTZXR1cCBTY3JpcHQKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTEgTGludXggRm91bmRhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKyMgSXQgaXMgYXNzdW1lZCBPRVJPT1QgaXMgYWxyZWFkeSBkZWZpbmVkIHdoZW4gdGhpcyBpcyBjYWxsZWQKK2lmIFsgLXogIiRPRVJPT1QiIF07IHRoZW4KKyAgICBlY2hvID4mMiAiRXJyb3I6IE9FUk9PVCBpcyBub3QgZGVmaW5lZCEiCisgICAgcmV0dXJuIDEKK2ZpCisKK2lmIFsgLXogIiRPRV9TS0lQX1NES19DSEVDSyIgLWEgISAteiAiJE9FQ09SRV9TREtfVkVSU0lPTiIgXTsgdGhlbgorICAgIGVjaG8gPiYyICJFcnJvcjogVGhlIE9FIFNESy9BRFQgd2FzIGRldGVjdGVkIGFzIGFscmVhZHkgYmVpbmcgcHJlc2VudCBpbiB0aGlzIHNoZWxsIGVudmlyb25tZW50LiBQbGVhc2UgdXNlIGEgY2xlYW4gc2hlbGwgd2hlbiBzb3VyY2luZyB0aGlzIGVudmlyb25tZW50IHNjcmlwdC4iCisgICAgcmV0dXJuIDEKK2ZpCisKKyMgTWFrZSBzdXJlIHdlJ3JlIG5vdCB1c2luZyBweXRob24gdjMueC4gVGhpcyBjaGVjayBjYW4ndCBnbyBpbnRvCisjIHNhbml0eS5iYmNsYXNzIGJlY2F1c2UgYml0YmFrZSdzIHNvdXJjZSBjb2RlIGRvZXNuJ3QgZXZlbiBwYXNzCisjIHBhcnNpbmcgc3RhZ2Ugd2hlbiB1c2VkIHdpdGggcHl0aG9uIHYzLCBzbyB3ZSBjYXRjaCBpdCBoZXJlIHNvIHdlCisjIGNhbiBvZmZlciBhIG1lYW5pbmdmdWwgZXJyb3IgbWVzc2FnZS4KK3B5X3YzX2NoZWNrPWAvdXNyL2Jpbi9lbnYgcHl0aG9uIC0tdmVyc2lvbiAyPiYxIHwgZ3JlcCAiUHl0aG9uIDMiYAoraWYgWyAiJHB5X3YzX2NoZWNrIiAhPSAiIiBdOyB0aGVuCisJZWNobyA+JjIgIkJpdGJha2UgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBweXRob24gdjMiCisJZWNobyA+JjIgIlBsZWFzZSBzZXQgdXAgcHl0aG9uIHYyIGFzIHlvdXIgZGVmYXVsdCBweXRob24gaW50ZXJwcmV0ZXIiCisJcmV0dXJuIDEKK2ZpCisKKyMgU2ltaWxhcmx5LCB3ZSBub3cgaGF2ZSBjb2RlIHRoYXQgZG9lc24ndCBwYXJzZSBjb3JyZWN0bHkgd2l0aCBvbGRlcgorIyB2ZXJzaW9ucyBvZiBQeXRob24sIGFuZCByYXRoZXIgdGhhbiBmaXhpbmcgdGhhdCBhbmQgYmVpbmcgZXRlcm5hbGx5CisjIHZpZ2lsYW50IGZvciBhbnkgb3RoZXIgbmV3IGZlYXR1cmUgdXNlLCBqdXN0IGNoZWNrIHRoZSB2ZXJzaW9uIGhlcmUuCitweV92MjZfY2hlY2s9YHB5dGhvbiAtYyAnaW1wb3J0IHN5czsgcHJpbnQgc3lzLnZlcnNpb25faW5mbyA+PSAoMiw3LDMpJ2AKK2lmIFsgIiRweV92MjZfY2hlY2siICE9ICJUcnVlIiBdOyB0aGVuCisJZWNobyA+JjIgIkJpdEJha2UgcmVxdWlyZXMgUHl0aG9uIDIuNy4zIG9yIGxhdGVyIgorCXJldHVybiAxCitmaQorCitpZiBbICJ4JEJESVIiID0gIngiIF07IHRoZW4KKyAgICBpZiBbICJ4JDEiID0gIngiIF07IHRoZW4KKyAgICAgICAgQkRJUj0iYnVpbGQiCisgICAgZWxzZQorICAgICAgICBCRElSPSIkMSIKKyAgICAgICAgaWYgWyAiJEJESVIiID0gIi8iIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gPiYyICJFcnJvcjogLyBpcyBub3Qgc3VwcG9ydGVkIGFzIGEgYnVpbGQgZGlyZWN0b3J5LiIKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGZpCisKKyAgICAgICAgIyBSZW1vdmUgYW55IHBvc3NpYmxlIHRyYWlsaW5nIHNsYXNoZXMuIFRoaXMgaXMgdXNlZCB0byB3b3JrIGFyb3VuZAorICAgICAgICAjIGJ1Z2d5IHJlYWRsaW5rIGluIFVidW50dSAxMC4wNCB0aGF0IGRvZXNuJ3QgaWdub3JlIHRyYWlsaW5nIHNsYXNoZXMKKyAgICAgICAgIyBhbmQgaGVuY2UgInJlYWRsaW5rIC1mIG5ld19kaXJfdG9fYmVfY3JlYXRlZC8iIHJldHVybnMgZW1wdHkuCisgICAgICAgIEJESVI9YGVjaG8gJEJESVIgfCBzZWQgLXJlICdzfC8rJHx8J2AKKworICAgICAgICBCRElSPWByZWFkbGluayAtZiAiJEJESVIiYAorICAgICAgICBpZiBbIC16ICIkQkRJUiIgXTsgdGhlbgorICAgICAgICAgICAgUEFSRU5URElSPWBkaXJuYW1lICIkMSJgCisgICAgICAgICAgICBlY2hvID4mMiAiRXJyb3I6IHRoZSBkaXJlY3RvcnkgJFBBUkVOVERJUiBkb2VzIG5vdCBleGlzdD8iCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBmaQorICAgIGZpCisgICAgaWYgWyAieCQyIiAhPSAieCIgXTsgdGhlbgorICAgICAgICBCSVRCQUtFRElSPSIkMiIKKyAgICBmaQorZmkKK2lmIGV4cHIgIiRCRElSIiA6ICcvLionID4gL2Rldi9udWxsIDsgdGhlbgorICAgIEJVSUxERElSPSIkQkRJUiIKK2Vsc2UKKyAgICBCVUlMRERJUj0iYHB3ZGAvJEJESVIiCitmaQordW5zZXQgQkRJUgorCitpZiBbICJ4JEJJVEJBS0VESVIiID0gIngiIF07IHRoZW4KKyAgICBCSVRCQUtFRElSPSIkT0VST09UL2JpdGJha2UkQkJFWFRSQS8iCitmaQorCitCSVRCQUtFRElSPWByZWFkbGluayAtZiAiJEJJVEJBS0VESVIiYAorQlVJTERESVI9YHJlYWRsaW5rIC1mICIkQlVJTERESVIiYAorCitpZiAhICh0ZXN0IC1kICIkQklUQkFLRURJUiIpOyB0aGVuCisgICAgZWNobyA+JjIgIkVycm9yOiBUaGUgYml0YmFrZSBkaXJlY3RvcnkgKCRCSVRCQUtFRElSKSBkb2VzIG5vdCBleGlzdCEgIFBsZWFzZSBlbnN1cmUgYSBjb3B5IG9mIGJpdGJha2UgZXhpc3RzIGF0IHRoaXMgbG9jYXRpb24iCisgICAgcmV0dXJuIDEKK2ZpCisKKyMgTWFrZSBzdXJlIG91ciBwYXRocyBhcmUgYXQgdGhlIGJlZ2lubmluZyBvZiAkUEFUSAorTkVXUEFUSFM9IiR7T0VST09UfS9zY3JpcHRzOiRCSVRCQUtFRElSL2JpbjoiCitQQVRIPSRORVdQQVRIUyQoZWNobyAkUEFUSCB8IHNlZCAtZSAic3w6JE5FV1BBVEhTfDp8ZyIgLWUgInN8XiRORVdQQVRIU3x8IikKK3Vuc2V0IEJJVEJBS0VESVIgTkVXUEFUSFMKKworIyBVc2VkIGJ5IHRoZSBydW5xZW11IHNjcmlwdAorZXhwb3J0IEJVSUxERElSCitleHBvcnQgUEFUSAorZXhwb3J0IEJCX0VOVl9FWFRSQVdISVRFPSJNQUNISU5FIERJU1RSTyBUQ01PREUgVENMSUJDIEhUVFBfUFJPWFkgaHR0cF9wcm94eSBcCitIVFRQU19QUk9YWSBodHRwc19wcm94eSBGVFBfUFJPWFkgZnRwX3Byb3h5IEZUUFNfUFJPWFkgZnRwc19wcm94eSBBTExfUFJPWFkgXAorYWxsX3Byb3h5IE5PX1BST1hZIG5vX3Byb3h5IFNTSF9BR0VOVF9QSUQgU1NIX0FVVEhfU09DSyBCQl9TUkNSRVZfUE9MSUNZIFwKK1NES01BQ0hJTkUgQkJfTlVNQkVSX1RIUkVBRFMgQkJfTk9fTkVUV09SSyBQQVJBTExFTF9NQUtFIEdJVF9QUk9YWV9DT01NQU5EIFwKK1NPQ0tTNV9QQVNTV0QgU09DS1M1X1VTRVIgU0NSRUVORElSIFNUQU1QU19ESVIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvb2UtZmluZC1uYXRpdmUtc3lzcm9vdCBiL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1maW5kLW5hdGl2ZS1zeXNyb290Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgxZDYyYjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvb2UtZmluZC1uYXRpdmUtc3lzcm9vdApAQCAtMCwwICsxLDgxIEBACisjIS9iaW4vYmFzaAorIworIyBGaW5kIGEgbmF0aXZlIHN5c3Jvb3QgdG8gdXNlIC0gZWl0aGVyIGZyb20gYW4gaW4tdHJlZSBPRSBidWlsZCBvcgorIyBmcm9tIGEgdG9vbGNoYWluIGluc3RhbGxhdGlvbi4gSXQgdGhlbiBlbnN1cmVzIHRoZSB2YXJpYWJsZQorIyAkT0VDT1JFX05BVElWRV9TWVNST09UIGlzIHNldCB0byB0aGUgc3lzcm9vdCdzIGJhc2UgZGlyZWN0b3J5LCBhbmQgc2V0cyAKKyMgJFBTRVVETyB0byB0aGUgcGF0aCBvZiB0aGUgcHNldWRvIGJpbmFyeS4KKyMKKyMgVGhpcyBzY3JpcHQgaXMgaW50ZW5kZWQgdG8gYmUgcnVuIHdpdGhpbiBvdGhlciBzY3JpcHRzIGJ5IHNvdXJjZSdpbmcKKyMgaXQsIGUuZzoKKyMKKyMgU1lTUk9PVF9TRVRVUF9TQ1JJUFQ9YHdoaWNoIG9lLWZpbmQtbmF0aXZlLXN5c3Jvb3RgCisjIC4gJFNZU1JPT1RfU0VUVVBfU0NSSVBUCisjCisjIFRoaXMgc2NyaXB0IHdpbGwgdGVybWluYXRlIGV4ZWN1dGlvbiBvZiB5b3VyIGNhbGxpbmcgcHJvZ3JhbSB1bmxlc3MKKyMgeW91IHNldCBhIHZhcmlhYmxlICRTS0lQX1NUUklDVF9TWVNST09UX0NIRUNLIHRvIGEgbm9uLWVtcHR5IHN0cmluZworIyBiZWZvcmVoYW5kLgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgTGludXggRm91bmRhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaWYgWyAieCRPRUNPUkVfTkFUSVZFX1NZU1JPT1QiID0gIngiIF07IHRoZW4KKyAgICBCSVRCQUtFPWB3aGljaCBiaXRiYWtlIDI+IC9kZXYvbnVsbGAKKyAgICBpZiBbICJ4JEJJVEJBS0UiICE9ICJ4IiBdOyB0aGVuCisgICAgICAgIGlmIFsgIiRVSUQiID0gIjAiIF07IHRoZW4KKyAgICAgICAgICAgICMgUm9vdCBjYW5ub3QgcnVuIGJpdGJha2UgdW5sZXNzIHNhbml0eSBjaGVja2luZyBpcyBkaXNhYmxlZAorICAgICAgICAgICAgaWYgWyAhIC1kICIuL2NvbmYiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICJFcnJvcjogcm9vdCBjYW5ub3QgcnVuIGJpdGJha2UgYnkgZGVmYXVsdCwgYW5kIEkgY2Fubm90IGZpbmQgYSAuL2NvbmYgZGlyZWN0b3J5IHRvIGJlIGFibGUgdG8gZGlzYWJsZSBzYW5pdHkgY2hlY2tpbmciCisgICAgICAgICAgICAgICAgZXhpdCAxCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgdG91Y2ggY29uZi9zYW5pdHkuY29uZgorICAgICAgICAgICAgT0VDT1JFX05BVElWRV9TWVNST09UPWBiaXRiYWtlIC1lIHwgZ3JlcCBeU1RBR0lOR19ESVJfTkFUSVZFIHwgY3V0IC1kICciJyAtZjJgCisgICAgICAgICAgICBybSAtZiBjb25mL3Nhbml0eS5jb25mCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIE9FQ09SRV9OQVRJVkVfU1lTUk9PVD1gYml0YmFrZSAtZSB8IGdyZXAgXlNUQUdJTkdfRElSX05BVElWRSB8IGN1dCAtZCAnIicgLWYyYAorICAgICAgICBmaQorICAgIGVsc2UKKyAgICAgICAgZWNobyAiRXJyb3I6IFVuYWJsZSB0byBsb2NhdGUgYml0YmFrZSBjb21tYW5kLiIKKyAgICAgICAgZWNobyAiRGlkIHlvdSBmb3JnZXQgdG8gc291cmNlIHRoZSBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQ/IgorCisgICAgICAgIGlmIFsgLXogIiRTS0lQX1NUUklDVF9TWVNST09UX0NIRUNLIiBdOyB0aGVuCisgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgZmkKKyAgICBmaQorZmkKKworaWYgWyAieCRPRUNPUkVfTkFUSVZFX1NZU1JPT1QiID0gIngiIF07IHRoZW4KKyAgICAjIFRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlcmUgd2FzIGFuIGVycm9yIHJ1bm5pbmcgYml0YmFrZSAtZSB0aGF0CisgICAgIyB0aGUgdXNlciBuZWVkcyB0byBiZSBpbmZvcm1lZCBvZgorICAgIGVjaG8gIlRoZXJlIHdhcyBhbiBlcnJvciBydW5uaW5nIGJpdGJha2UgdG8gZGV0ZXJtaW5lIFNUQUdJTkdfRElSX05BVElWRSIKKyAgICBlY2hvICJIZXJlIGlzIHRoZSBvdXRwdXQgZnJvbSBiaXRiYWtlIC1lIgorICAgIGJpdGJha2UgLWUKKyAgICBleGl0IDEKK2ZpCisKKyMgU2V0IHVwIHBzZXVkbyBjb21tYW5kCitpZiBbICEgLWUgIiRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvdXNyL2Jpbi9wc2V1ZG8iIF07IHRoZW4KKyAgICBlY2hvICJFcnJvcjogVW5hYmxlIHRvIGZpbmQgcHNldWRvIGJpbmFyeSBpbiAkT0VDT1JFX05BVElWRV9TWVNST09UL3Vzci9iaW4vIgorCisgICAgaWYgWyAieCRPRUNPUkVfRElTVFJPX1ZFUlNJT04iID0gIngiIF07IHRoZW4KKyAgICAgICAgZWNobyAiSGF2ZSB5b3UgcnVuICdiaXRiYWtlIG1ldGEtaWRlLXN1cHBvcnQnPyIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIlRoaXMgc2hvdWxkbid0IGhhcHBlbiAtIHNvbWV0aGluZyBpcyB3cm9uZyB3aXRoIHlvdXIgdG9vbGNoYWluIGluc3RhbGxhdGlvbiIKKyAgICBmaQorCisgICAgaWYgWyAteiAiJFNLSVBfU1RSSUNUX1NZU1JPT1RfQ0hFQ0siIF07IHRoZW4KKyAgICAgICAgZXhpdCAxCisgICAgZmkKK2ZpCitQU0VVRE89IiRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvdXNyL2Jpbi9wc2V1ZG8iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvb2UtZ2l0LXByb3h5IGIveW9jdG8tcG9reS9zY3JpcHRzL29lLWdpdC1wcm94eQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ODczNDU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL29lLWdpdC1wcm94eQpAQCAtMCwwICsxLDEzMyBAQAorIyEvYmluL2Jhc2gKKworIyBvZS1naXQtcHJveHkgaXMgYSBzaW1wbGUgdG9vbCB0byBiZSB2aWEgR0lUX1BST1hZX0NPTU1BTkQuIEl0IHVzZXMgc29jYXQKKyMgdG8gbWFrZSBTT0NLUzUgb3IgSFRUUFMgcHJveHkgY29ubmVjdGlvbnMuIEl0IHVzZXMgQUxMX1BST1hZIHRvIGRldGVybWluZSB0aGUKKyMgcHJveHkgc2VydmVyLCBwcm90b2NvbCwgYW5kIHBvcnQuIEl0IHVzZXMgTk9fUFJPWFkgdG8gc2tpcCB1c2luZyB0aGUgcHJveHkgZm9yCisjIGEgY29tbWEgZGVsaW1pdGVkIGxpc3Qgb2YgaG9zdHMsIGhvc3QgZ2xvYnMgKCouZXhhbXBsZS5jb20pLCBJUHMsIG9yIENJRFIKKyMgbWFza3MgKDE5Mi4xNjguMS4wLzI0KS4gSXQgaXMga25vd24gdG8gd29yayB3aXRoIGJvdGggYmFzaCBhbmQgZGFzaCBzaGVsbHMuCisjCisjIEV4YW1wbGUgQUxMX1BST1hZIHZhbHVlczoKKyMgQUxMX1BST1hZPXNvY2tzOi8vc29ja3MuZXhhbXBsZS5jb206MTA4MAorIyBBTExfUFJPWFk9aHR0cHM6Ly9wcm94eS5leGFtcGxlLmNvbTo4MDgwCisjCisjIENvcHlyaWdodCAoYykgMjAxMywgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIEFVVEhPUlMKKyMgRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CisKKyMgTG9jYXRlIHRoZSBuZXRjYXQgYmluYXJ5CitTT0NBVD0kKHdoaWNoIHNvY2F0IDI+L2Rldi9udWxsKQoraWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJZWNobyAiRVJST1I6IHNvY2F0IGJpbmFyeSBub3QgaW4gUEFUSCIgMT4mMgorCWV4aXQgMQorZmkKK01FVEhPRD0iIgorCisjIFRlc3QgZm9yIGEgdmFsaWQgSVBWNCBxdWFkIHdpdGggb3B0aW9uYWwgYml0bWFzawordmFsaWRfaXB2NCgpIHsKKwllY2hvICQxIHwgZWdyZXAgLXEgIl4oWzEtOV18WzEtOV1bMC05XXwxWzAtOV1bMC05XXwyWzAtNF1bMC05XXwyNVswLTVdKShcLihbMC05XXxbMS05XVswLTldfDFbMC05XVswLTldfDJbMC00XVswLTldfDI1WzAtNV0pKXszfSgvKDNbMC0yXXxbMS0yXT9bMC05XSkpPyQiCisJcmV0dXJuICQ/Cit9CisKKyMgQ29udmVydCBhbiBJUFY0IGFkZHJlc3MgaW50byBhIDMyYml0IGludGVnZXIKK2lwdjRfdmFsKCkgeworCUlQPSIkMSIKKwlTSElGVD0yNAorCVZBTD0wCisJZm9yIEIgaW4gJHtJUC8vLi8gfTsgZG8KKwkJVkFMPSQoKCRWQUwrJCgoJEI8PCRTSElGVCkpKSkKKwkJU0hJRlQ9JCgoJFNISUZULTgpKQorCWRvbmUKKwllY2hvICIkVkFMIgorfQorCisjIERldGVybWluZSBpZiB0d28gSVBzIGFyZSBlcXVpdmFsZW50LCBvciBpZiB0aGUgQ0lEUiBjb250YWlucyB0aGUgSVAKK21hdGNoX2lwdjQoKSB7CisJQ0lEUj0kMQorCUlQPSQyCisKKwlpZiBbIC16ICIke0lQJSUkQ0lEUn0iIF07IHRoZW4KKwkJcmV0dXJuIDAKKwlmaQorCisJIyBEZXRlcm1pbmUgdGhlIG1hc2sgYml0bGVuZ3RoCisJQklUUz0ke0NJRFIjIyovfQorCWlmIFsgLXogIiRCSVRTIiBdOyB0aGVuCisJCXJldHVybiAxCisJZmkKKworCUlQVkFMPSQoaXB2NF92YWwgJElQKQorCUlQMlZBTD0kKGlwdjRfdmFsICR7Q0lEUiUlLyp9KQorCisJIyBPUiBpbiB0aGUgdW5tYXNrZWQgYml0cworCWZvciBpIGluICQoc2VxIDAgJCgoMzItJEJJVFMpKSk7IGRvCisJCUlQMlZBTD0kKCgkSVAyVkFMfCQoKDE8PCRpKSkpKQorCQlJUFZBTD0kKCgkSVBWQUx8JCgoMTw8JGkpKSkpCisJZG9uZQorCisJaWYgWyAkSVBWQUwgLWVxICRJUDJWQUwgXTsgdGhlbgorCQlyZXR1cm4gMAorCWZpCisJcmV0dXJuIDEKK30KKworIyBUZXN0IHRvIHNlZSBpZiBHTE9CIG1hdGNoZXMgSE9TVAorbWF0Y2hfaG9zdCgpIHsKKwlIT1NUPSQxCisJR0xPQj0kMgorCisJaWYgWyAteiAiJHtIT1NUJSUkR0xPQn0iIF07IHRoZW4KKwkJcmV0dXJuIDAKKwlmaQorCisJIyBNYXRjaCBieSBuZXRtYXNrCisJaWYgdmFsaWRfaXB2NCAkR0xPQjsgdGhlbgorCQlIT1NUX0lQPSQoZ2V0aG9zdGlwIC1kICRIT1NUKQorCQlpZiB2YWxpZF9pcHY0ICRIT1NUX0lQOyB0aGVuCisJCQltYXRjaF9pcHY0ICRHTE9CICRIT1NUX0lQCisJCQlpZiBbICQ/IC1lcSAwIF07IHRoZW4KKwkJCQlyZXR1cm4gMAorCQkJZmkKKwkJZmkKKwlmaQorCisJcmV0dXJuIDEKK30KKworIyBJZiBubyBwcm94eSBpcyBzZXQgb3IgbmVlZGVkLCBqdXN0IGNvbm5lY3QgZGlyZWN0bHkKK01FVEhPRD0iVENQOiQxOiQyIgorCitpZiBbIC16ICIkQUxMX1BST1hZIiBdOyB0aGVuCisJZXhlYyAkU09DQVQgU1RESU8gJE1FVEhPRAorZmkKKworIyBDb25uZWN0IGRpcmVjdGx5IHRvIGhvc3RzIGluIE5PX1BST1hZCitmb3IgSCBpbiAke05PX1BST1hZLy8sLyB9OyBkbworCWlmIG1hdGNoX2hvc3QgJDEgJEg7IHRoZW4KKwkJZXhlYyAkU09DQVQgU1RESU8gJE1FVEhPRAorCWZpCitkb25lCisKKyMgUHJveHkgaXMgbmVjZXNzYXJ5LCBkZXRlcm1pbmUgcHJvdG9jb2wsIHNlcnZlciwgYW5kIHBvcnQKK1BST1RPPSQoZWNobyAkQUxMX1BST1hZIHwgc2VkIC1lICdzL1woW146XSpcKTpcL1wvLiovXDEvJykKK1BST1hZPSQoZWNobyAkQUxMX1BST1hZIHwgc2VkIC1lICdzLy4qOlwvXC9cKFteOl0qXCkuKi9cMS8nKQorUE9SVD0kKGVjaG8gJEFMTF9QUk9YWSB8IHNlZCAtZSAncy8uKjpcKFswLTldKlwpXC8/JC9cMS8nKQoraWYgWyAiJFBPUlQiID0gIiRBTExfUFJPWFkiIF07IHRoZW4KKwlQT1JUPSIiCitmaQorCitpZiBbICIkUFJPVE8iID0gInNvY2tzIiBdOyB0aGVuCisJaWYgWyAteiAiJFBPUlQiIF07IHRoZW4KKwkJUE9SVD0iMTA4MCIKKwlmaQorCU1FVEhPRD0iU09DS1M0QTokUFJPWFk6JDE6JDIsc29ja3Nwb3J0PSRQT1JUIgorZWxzZQorCSMgQXNzdW1lIFBST1hZIChodHRwLCBodHRwcywgZXRjKQorCWlmIFsgLXogIiRQT1JUIiBdOyB0aGVuCisJCVBPUlQ9IjgwODAiCisJZmkKKwlNRVRIT0Q9IlBST1hZOiRQUk9YWTokMTokMixwcm94eXBvcnQ9JFBPUlQiCitmaQorCitleGVjICRTT0NBVCBTVERJTyAkTUVUSE9ECmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvb2UtcGtnZGF0YS11dGlsIGIveW9jdG8tcG9reS9zY3JpcHRzL29lLXBrZ2RhdGEtdXRpbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMDc1Nzc1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL29lLXBrZ2RhdGEtdXRpbApAQCAtMCwwICsxLDUwNSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgT3BlbkVtYmVkZGVkIHBrZ2RhdGEgdXRpbGl0eQorIworIyBXcml0dGVuIGJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKyMKKyMgQ29weXJpZ2h0IDIwMTItMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IGZubWF0Y2gKK2ltcG9ydCByZQoraW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgbG9nZ2luZworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QsIE9yZGVyZWREaWN0CisKK3NjcmlwdHNfcGF0aCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSkKK2xpYl9wYXRoID0gc2NyaXB0c19wYXRoICsgJy9saWInCitzeXMucGF0aCA9IHN5cy5wYXRoICsgW2xpYl9wYXRoXQoraW1wb3J0IHNjcmlwdHV0aWxzCitsb2dnZXIgPSBzY3JpcHR1dGlscy5sb2dnZXJfY3JlYXRlKCdwa2dkYXRhdXRpbCcpCisKK2RlZiB0aW5mb2lsX2luaXQoKToKKyAgICBpbXBvcnQgYmIudGluZm9pbAorICAgIGltcG9ydCBsb2dnaW5nCisgICAgdGluZm9pbCA9IGJiLnRpbmZvaWwuVGluZm9pbCgpCisgICAgdGluZm9pbC5wcmVwYXJlKFRydWUpCisKKyAgICB0aW5mb2lsLmxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLldBUk5JTkcpCisgICAgcmV0dXJuIHRpbmZvaWwKKworCitkZWYgZ2xvYihhcmdzKToKKyAgICAjIEhhbmRsZSBib3RoIG11bHRpcGxlIGFyZ3VtZW50cyBhbmQgbXVsdGlwbGUgdmFsdWVzIHdpdGhpbiBhbiBhcmcgKG9sZCBzeW50YXgpCisgICAgZ2xvYnMgPSBbXQorICAgIGZvciBnbG9iaXRlbSBpbiBhcmdzLmdsb2I6CisgICAgICAgIGdsb2JzLmV4dGVuZChnbG9iaXRlbS5zcGxpdCgpKQorCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGFyZ3MucGtnbGlzdGZpbGUpOgorICAgICAgICBsb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBmaW5kIHBhY2thZ2UgbGlzdCBmaWxlICVzJyAlIGFyZ3MucGtnbGlzdGZpbGUpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBza2lwdmFsID0gIi1sb2NhbGUtfF5sb2NhbGUtYmFzZS18LWRldiR8LWRvYyR8LWRiZyR8LXN0YXRpY2RldiR8Xmtlcm5lbC1tb2R1bGUtIgorICAgIGlmIGFyZ3MuZXhjbHVkZToKKyAgICAgICAgc2tpcHZhbCArPSAifCIgKyBhcmdzLmV4Y2x1ZGUKKyAgICBza2lwcmVnZXggPSByZS5jb21waWxlKHNraXB2YWwpCisKKyAgICBtYXBwZWRwa2dzID0gc2V0KCkKKyAgICB3aXRoIG9wZW4oYXJncy5wa2dsaXN0ZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgZmllbGRzID0gbGluZS5yc3RyaXAoKS5zcGxpdCgpCisgICAgICAgICAgICBpZiBub3QgZmllbGRzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBwa2cgPSBmaWVsZHNbMF0KKyAgICAgICAgICAgICMgV2UgZG9uJ3QgY2FyZSBhYm91dCBvdGhlciBhcmdzICh1c2VkIHRvIG5lZWQgdGhlIHBhY2thZ2UgYXJjaGl0ZWN0dXJlIGJ1dCB0aGUKKyAgICAgICAgICAgICMgbmV3IHBrZ2RhdGEgc3RydWN0dXJlIGF2b2lkcyB0aGUgbmVlZCBmb3IgdGhhdCkKKworICAgICAgICAgICAgIyBTa2lwIHBhY2thZ2VzIGZvciB3aGljaCB0aGVyZSBpcyBubyBwb2ludCBhcHBseWluZyBnbG9icworICAgICAgICAgICAgaWYgc2tpcHJlZ2V4LnNlYXJjaChwa2cpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXMgLT4gISEiICUgcGtnKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgU2tpcCBwYWNrYWdlcyB0aGF0IGFscmVhZHkgbWF0Y2ggdGhlIGdsb2JzLCBzbyBpZiBlLmcuIGEgZGV2IHBhY2thZ2UKKyAgICAgICAgICAgICMgaXMgYWxyZWFkeSBpbnN0YWxsZWQgYW5kIHRodXMgaW4gdGhlIGxpc3QsIHdlIGRvbid0IHByb2Nlc3MgaXQgYW55IGZ1cnRoZXIKKyAgICAgICAgICAgICMgTW9zdCBvZiB0aGVzZSB3aWxsIGJlIGNhdWdodCBieSBza2lwcmVnZXggYWxyZWFkeSwgYnV0IGp1c3QgaW4gY2FzZS4uLgorICAgICAgICAgICAgYWxyZWFkeSA9IEZhbHNlCisgICAgICAgICAgICBmb3IgZyBpbiBnbG9iczoKKyAgICAgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2hjYXNlKHBrZywgZyk6CisgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBhbHJlYWR5OgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXMgLT4gISIgJSBwa2cpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBEZWZpbmUgc29tZSBmdW5jdGlvbnMKKyAgICAgICAgICAgIGRlZiByZXZwa2dkYXRhKHBrZ24pOgorICAgICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oYXJncy5wa2dkYXRhX2RpciwgInJ1bnRpbWUtcmV2ZXJzZSIsIHBrZ24pCisgICAgICAgICAgICBkZWYgZndkcGtnZGF0YShwa2duKToKKyAgICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKGFyZ3MucGtnZGF0YV9kaXIsICJydW50aW1lIiwgcGtnbikKKyAgICAgICAgICAgIGRlZiByZWFkcG4ocGtnZGF0YV9maWxlKToKKyAgICAgICAgICAgICAgICBwbiA9ICIiCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHBrZ2RhdGFfZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJQTjoiKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbiA9IGxpbmUuc3BsaXQoJzogJylbMV0ucnN0cmlwKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcG4KKyAgICAgICAgICAgIGRlZiByZWFkcmVuYW1lZChwa2dkYXRhX2ZpbGUpOgorICAgICAgICAgICAgICAgIHJlbmFtZWQgPSAiIgorICAgICAgICAgICAgICAgIHBuID0gb3MucGF0aC5iYXNlbmFtZShwa2dkYXRhX2ZpbGUpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHBrZ2RhdGFfZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJQS0dfJXM6IiAlIHBuKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5hbWVkID0gbGluZS5zcGxpdCgnOiAnKVsxXS5yc3RyaXAoKQorICAgICAgICAgICAgICAgIHJldHVybiByZW5hbWVkCisKKyAgICAgICAgICAgICMgTWFpbiBwcm9jZXNzaW5nIGxvb3AKKyAgICAgICAgICAgIGZvciBnIGluIGdsb2JzOgorICAgICAgICAgICAgICAgIG1hcHBlZHBrZyA9ICIiCisgICAgICAgICAgICAgICAgIyBGaXJzdCBqdXN0IHRyeSBzdWJzdGl0dXRpb24gKGkuZS4gcGFja2FnZW5hbWUgLT4gcGFja2FnZW5hbWUtZGV2KQorICAgICAgICAgICAgICAgIG5ld3BrZyA9IGcucmVwbGFjZSgiKiIsIHBrZykKKyAgICAgICAgICAgICAgICByZXZsaW5rID0gcmV2cGtnZGF0YShuZXdwa2cpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocmV2bGluayk6CisgICAgICAgICAgICAgICAgICAgIG1hcHBlZHBrZyA9IG9zLnBhdGguYmFzZW5hbWUob3MucmVhZGxpbmsocmV2bGluaykpCisgICAgICAgICAgICAgICAgICAgIGZ3ZGZpbGUgPSBmd2Rwa2dkYXRhKG1hcHBlZHBrZykKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZndkZmlsZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWRwa2cgPSByZWFkcmVuYW1lZChmd2RmaWxlKQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZndkZmlsZSArICIucGFja2FnZWQiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBlZHBrZyA9ICIiCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV2bGluayA9IHJldnBrZ2RhdGEocGtnKQorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhyZXZsaW5rKToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgd2UgY2FuIG1hcCBhZnRlciB1bmRvaW5nIHRoZSBwYWNrYWdlIHJlbmFtaW5nIChieSByZXNvbHZpbmcgdGhlIHN5bWxpbmspCisgICAgICAgICAgICAgICAgICAgICAgICBvcmlncGtnID0gb3MucGF0aC5iYXNlbmFtZShvcy5yZWFkbGluayhyZXZsaW5rKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BrZyA9IGcucmVwbGFjZSgiKiIsIG9yaWdwa2cpCisgICAgICAgICAgICAgICAgICAgICAgICBmd2RmaWxlID0gZndkcGtnZGF0YShuZXdwa2cpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmd2RmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWRwa2cgPSByZWFkcmVuYW1lZChmd2RmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoYXQgZGlkbid0IHdvcmssIHNvIG5vdyBnZXQgdGhlIFBOLCBzdWJzdGl0dXRlIHRoYXQsIHRoZW4gbWFwIGluIHRoZSBvdGhlciBkaXJlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbiA9IHJlYWRwbihyZXZsaW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BrZyA9IGcucmVwbGFjZSgiKiIsIHBuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ3ZGZpbGUgPSBmd2Rwa2dkYXRhKG5ld3BrZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmd2RmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGVkcGtnID0gcmVhZHJlbmFtZWQoZndkZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmd2RmaWxlICsgIi5wYWNrYWdlZCIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBlZHBrZyA9ICIiCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFBhY2thZ2UgZG9lc24ndCBldmVuIGV4aXN0Li4uCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVzIGlzIG5vdCBhIHZhbGlkIHBhY2thZ2UhIiAlIChwa2cpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgIGlmIG1hcHBlZHBrZzoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlcyAoJXMpIC0+ICVzIiAlIChwa2csIGcsIG1hcHBlZHBrZykpCisgICAgICAgICAgICAgICAgICAgIG1hcHBlZHBrZ3MuYWRkKG1hcHBlZHBrZykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVzICglcykgLT4gPyIgJSAocGtnLCBnKSkKKworICAgIGxvZ2dlci5kZWJ1ZygiLS0tLS0tIikKKworICAgIHByaW50KCJcbiIuam9pbihtYXBwZWRwa2dzKSkKKworZGVmIHJlYWRfdmFsdWUoYXJncyk6CisgICAgIyBIYW5kbGUgYm90aCBtdWx0aXBsZSBhcmd1bWVudHMgYW5kIG11bHRpcGxlIHZhbHVlcyB3aXRoaW4gYW4gYXJnIChvbGQgc3ludGF4KQorICAgIHBhY2thZ2VzID0gW10KKyAgICBmb3IgcGtnaXRlbSBpbiBhcmdzLnBrZzoKKyAgICAgICAgcGFja2FnZXMuZXh0ZW5kKHBrZ2l0ZW0uc3BsaXQoKSkKKworICAgIGRlZiByZWFkdmFyKHBrZ2RhdGFfZmlsZSwgdmFsdWVuYW1lKToKKyAgICAgICAgdmFsID0gIiIKKyAgICAgICAgd2l0aCBvcGVuKHBrZ2RhdGFfZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgodmFsdWVuYW1lICsgIjoiKToKKyAgICAgICAgICAgICAgICAgICAgdmFsID0gbGluZS5zcGxpdCgnOiAnLCAxKVsxXS5yc3RyaXAoKQorICAgICAgICByZXR1cm4gdmFsCisKKyAgICBsb2dnZXIuZGVidWcoInJlYWQtdmFsdWUoJyVzJywgJyVzJyAnJXMnIiAlIChhcmdzLnBrZ2RhdGFfZGlyLCBhcmdzLnZhbHVlbmFtZSwgcGFja2FnZXMpKQorICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VzOgorICAgICAgICBwa2dfc3BsaXQgPSBwYWNrYWdlLnNwbGl0KCdfJykKKyAgICAgICAgcGtnX25hbWUgPSBwa2dfc3BsaXRbMF0KKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJwYWNrYWdlOiAnJXMnIiAlIHBrZ19uYW1lKQorICAgICAgICByZXZsaW5rID0gb3MucGF0aC5qb2luKGFyZ3MucGtnZGF0YV9kaXIsICJydW50aW1lLXJldmVyc2UiLCBwa2dfbmFtZSkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKHJldmxpbmspCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHJldmxpbmspOgorICAgICAgICAgICAgbWFwcGVkcGtnID0gb3MucGF0aC5iYXNlbmFtZShvcy5yZWFkbGluayhyZXZsaW5rKSkKKyAgICAgICAgICAgIHF2YXIgPSBhcmdzLnZhbHVlbmFtZQorICAgICAgICAgICAgaWYgcXZhciA9PSAiUEtHU0laRSI6CisgICAgICAgICAgICAgICAgIyBhcHBlbmQgcGFja2FnZW5hbWUKKyAgICAgICAgICAgICAgICBxdmFyID0gIiVzXyVzIiAlIChhcmdzLnZhbHVlbmFtZSwgbWFwcGVkcGtnKQorICAgICAgICAgICAgICAgICMgUEtHU0laRSBpcyBub3cgaW4gYnl0ZXMsIGJ1dCB3ZSB3ZSB3YW50IGl0IGluIEtCCisgICAgICAgICAgICAgICAgcGtnc2l6ZSA9IChpbnQocmVhZHZhcihyZXZsaW5rLCBxdmFyKSkgKyAxMDI0IC8vIDIpIC8vIDEwMjQKKyAgICAgICAgICAgICAgICBwcmludCgiJWQiICUgcGtnc2l6ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQocmVhZHZhcihyZXZsaW5rLCBxdmFyKSkKKworZGVmIGxvb2t1cF9wa2dsaXN0KHBrZ3MsIHBrZ2RhdGFfZGlyLCByZXZlcnNlKToKKyAgICBpZiByZXZlcnNlOgorICAgICAgICBtYXBwaW5ncyA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgZm9yIHBrZyBpbiBwa2dzOgorICAgICAgICAgICAgcmV2bGluayA9IG9zLnBhdGguam9pbihwa2dkYXRhX2RpciwgInJ1bnRpbWUtcmV2ZXJzZSIsIHBrZykKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhyZXZsaW5rKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocmV2bGluayk6CisgICAgICAgICAgICAgICAgbWFwcGluZ3NbcGtnXSA9IG9zLnBhdGguYmFzZW5hbWUob3MucmVhZGxpbmsocmV2bGluaykpCisgICAgZWxzZToKKyAgICAgICAgbWFwcGluZ3MgPSBkZWZhdWx0ZGljdChsaXN0KQorICAgICAgICBmb3IgcGtnIGluIHBrZ3M6CisgICAgICAgICAgICBwa2dmaWxlID0gb3MucGF0aC5qb2luKHBrZ2RhdGFfZGlyLCAncnVudGltZScsIHBrZykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBrZ2ZpbGUpOgorICAgICAgICAgICAgICAgIHdpdGggb3Blbihwa2dmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHMgPSBsaW5lLnJzdHJpcCgpLnNwbGl0KCc6ICcpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmaWVsZHNbMF0gPT0gJ1BLR18lcycgJSBwa2c6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ3NbcGtnXS5hcHBlbmQoZmllbGRzWzFdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIG1hcHBpbmdzCisKK2RlZiBsb29rdXBfcGtnKGFyZ3MpOgorICAgICMgSGFuZGxlIGJvdGggbXVsdGlwbGUgYXJndW1lbnRzIGFuZCBtdWx0aXBsZSB2YWx1ZXMgd2l0aGluIGFuIGFyZyAob2xkIHN5bnRheCkKKyAgICBwa2dzID0gW10KKyAgICBmb3IgcGtnaXRlbSBpbiBhcmdzLnBrZzoKKyAgICAgICAgcGtncy5leHRlbmQocGtnaXRlbS5zcGxpdCgpKQorCisgICAgbWFwcGluZ3MgPSBsb29rdXBfcGtnbGlzdChwa2dzLCBhcmdzLnBrZ2RhdGFfZGlyLCBhcmdzLnJldmVyc2UpCisKKyAgICBpZiBsZW4obWFwcGluZ3MpIDwgbGVuKHBrZ3MpOgorICAgICAgICBtaXNzaW5nID0gbGlzdChzZXQocGtncykgLSBzZXQobWFwcGluZ3Mua2V5cygpKSkKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJUaGUgZm9sbG93aW5nIHBhY2thZ2VzIGNvdWxkIG5vdCBiZSBmb3VuZDogJXMiICUgJywgJy5qb2luKG1pc3NpbmcpKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaWYgYXJncy5yZXZlcnNlOgorICAgICAgICBpdGVtcyA9IG1hcHBpbmdzLnZhbHVlcygpCisgICAgZWxzZToKKyAgICAgICAgaXRlbXMgPSBbXQorICAgICAgICBmb3IgcGtnIGluIHBrZ3M6CisgICAgICAgICAgICBpdGVtcy5leHRlbmQobWFwcGluZ3MuZ2V0KHBrZywgW10pKQorCisgICAgcHJpbnQoJ1xuJy5qb2luKGl0ZW1zKSkKKworZGVmIGxvb2t1cF9yZWNpcGUoYXJncyk6CisgICAgIyBIYW5kbGUgYm90aCBtdWx0aXBsZSBhcmd1bWVudHMgYW5kIG11bHRpcGxlIHZhbHVlcyB3aXRoaW4gYW4gYXJnIChvbGQgc3ludGF4KQorICAgIHBrZ3MgPSBbXQorICAgIGZvciBwa2dpdGVtIGluIGFyZ3MucGtnOgorICAgICAgICBwa2dzLmV4dGVuZChwa2dpdGVtLnNwbGl0KCkpCisKKyAgICBtYXBwaW5ncyA9IGRlZmF1bHRkaWN0KGxpc3QpCisgICAgZm9yIHBrZyBpbiBwa2dzOgorICAgICAgICBwa2dmaWxlID0gb3MucGF0aC5qb2luKGFyZ3MucGtnZGF0YV9kaXIsICdydW50aW1lLXJldmVyc2UnLCBwa2cpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBrZ2ZpbGUpOgorICAgICAgICAgICAgd2l0aCBvcGVuKHBrZ2ZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICBmaWVsZHMgPSBsaW5lLnJzdHJpcCgpLnNwbGl0KCc6ICcpCisgICAgICAgICAgICAgICAgICAgIGlmIGZpZWxkc1swXSA9PSAnUE4nOgorICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ3NbcGtnXS5hcHBlbmQoZmllbGRzWzFdKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICBpZiBsZW4obWFwcGluZ3MpIDwgbGVuKHBrZ3MpOgorICAgICAgICBtaXNzaW5nID0gbGlzdChzZXQocGtncykgLSBzZXQobWFwcGluZ3Mua2V5cygpKSkKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJUaGUgZm9sbG93aW5nIHBhY2thZ2VzIGNvdWxkIG5vdCBiZSBmb3VuZDogJXMiICUgJywgJy5qb2luKG1pc3NpbmcpKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaXRlbXMgPSBbXQorICAgIGZvciBwa2cgaW4gcGtnczoKKyAgICAgICAgaXRlbXMuZXh0ZW5kKG1hcHBpbmdzLmdldChwa2csIFtdKSkKKyAgICBwcmludCgnXG4nLmpvaW4oaXRlbXMpKQorCitkZWYgZ2V0X3JlY2lwZV9wa2dzKHBrZ2RhdGFfZGlyLCByZWNpcGUsIHVucGFja2FnZWQpOgorICAgIHJlY2lwZWRhdGFmaWxlID0gb3MucGF0aC5qb2luKHBrZ2RhdGFfZGlyLCByZWNpcGUpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHJlY2lwZWRhdGFmaWxlKToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZmluZCBwYWNrYWdlZCByZWNpcGUgd2l0aCBuYW1lICVzIiAlIHJlY2lwZSkKKyAgICAgICAgc3lzLmV4aXQoMSkKKyAgICBwYWNrYWdlcyA9IFtdCisgICAgd2l0aCBvcGVuKHJlY2lwZWRhdGFmaWxlLCAncicpIGFzIGY6CisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICBmaWVsZHMgPSBsaW5lLnJzdHJpcCgpLnNwbGl0KCc6ICcpCisgICAgICAgICAgICBpZiBmaWVsZHNbMF0gPT0gJ1BBQ0tBR0VTJzoKKyAgICAgICAgICAgICAgICBwYWNrYWdlcyA9IGZpZWxkc1sxXS5zcGxpdCgpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIGlmIG5vdCB1bnBhY2thZ2VkOgorICAgICAgICBwa2dsaXN0ID0gW10KKyAgICAgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwa2dkYXRhX2RpciwgJ3J1bnRpbWUnLCAnJXMucGFja2FnZWQnICUgcGtnKSk6CisgICAgICAgICAgICAgICAgcGtnbGlzdC5hcHBlbmQocGtnKQorICAgICAgICByZXR1cm4gcGtnbGlzdAorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBwYWNrYWdlcworCitkZWYgbGlzdF9wa2dzKGFyZ3MpOgorICAgIGZvdW5kID0gRmFsc2UKKworICAgIGRlZiBtYXRjaHBrZyhwa2cpOgorICAgICAgICBpZiBhcmdzLnBrZ3NwZWM6CisgICAgICAgICAgICBtYXRjaGVkID0gRmFsc2UKKyAgICAgICAgICAgIGZvciBwa2dzcGVjIGluIGFyZ3MucGtnc3BlYzoKKyAgICAgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2hjYXNlKHBrZywgcGtnc3BlYyk6CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBub3QgbWF0Y2hlZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgbm90IGFyZ3MudW5wYWNrYWdlZDoKKyAgICAgICAgICAgIGlmIGFyZ3MucnVudGltZToKKyAgICAgICAgICAgICAgICByZXZsaW5rID0gb3MucGF0aC5qb2luKGFyZ3MucGtnZGF0YV9kaXIsICJydW50aW1lLXJldmVyc2UiLCBwa2cpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocmV2bGluayk6CisgICAgICAgICAgICAgICAgICAgICMgV2UncmUgdW5saWtlbHkgdG8gZ2V0IGhlcmUgaWYgdGhlIHBhY2thZ2Ugd2FzIG5vdCBwYWNrYWdlZCwgYnV0IGp1c3QgaW4gY2FzZQorICAgICAgICAgICAgICAgICAgICAjIHdlIGFkZCB0aGUgc3ltbGlua3MgZm9yIHVucGFja2FnZWQgZmlsZXMgaW4gdGhlIGZ1dHVyZQorICAgICAgICAgICAgICAgICAgICBtYXBwZWRwa2cgPSBvcy5wYXRoLmJhc2VuYW1lKG9zLnJlYWRsaW5rKHJldmxpbmspKQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGFyZ3MucGtnZGF0YV9kaXIsICdydW50aW1lJywgJyVzLnBhY2thZ2VkJyAlIG1hcHBlZHBrZykpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oYXJncy5wa2dkYXRhX2RpciwgJ3J1bnRpbWUnLCAnJXMucGFja2FnZWQnICUgcGtnKSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgaWYgYXJncy5yZWNpcGU6CisgICAgICAgIHBhY2thZ2VzID0gZ2V0X3JlY2lwZV9wa2dzKGFyZ3MucGtnZGF0YV9kaXIsIGFyZ3MucmVjaXBlLCBhcmdzLnVucGFja2FnZWQpCisKKyAgICAgICAgaWYgYXJncy5ydW50aW1lOgorICAgICAgICAgICAgcGtnbGlzdCA9IFtdCisgICAgICAgICAgICBydW50aW1lX3BrZ3MgPSBsb29rdXBfcGtnbGlzdChwYWNrYWdlcywgYXJncy5wa2dkYXRhX2RpciwgRmFsc2UpCisgICAgICAgICAgICBmb3IgcnRwa2dzIGluIHJ1bnRpbWVfcGtncy52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICBwa2dsaXN0LmV4dGVuZChydHBrZ3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwa2dsaXN0ID0gcGFja2FnZXMKKworICAgICAgICBmb3IgcGtnIGluIHBrZ2xpc3Q6CisgICAgICAgICAgICBpZiBtYXRjaHBrZyhwa2cpOgorICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgIHByaW50KCIlcyIgJSBwa2cpCisgICAgZWxzZToKKyAgICAgICAgaWYgYXJncy5ydW50aW1lOgorICAgICAgICAgICAgc2VhcmNoZGlyID0gJ3J1bnRpbWUtcmV2ZXJzZScKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlYXJjaGRpciA9ICdydW50aW1lJworCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKG9zLnBhdGguam9pbihhcmdzLnBrZ2RhdGFfZGlyLCBzZWFyY2hkaXIpKToKKyAgICAgICAgICAgIGZvciBmbiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBpZiBmbi5lbmRzd2l0aCgnLnBhY2thZ2VkJyk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgbWF0Y2hwa2coZm4pOgorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIiVzIiAlIGZuKQorICAgIGlmIG5vdCBmb3VuZDoKKyAgICAgICAgaWYgYXJncy5wa2dzcGVjOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZmluZCBhbnkgcGFja2FnZSBtYXRjaGluZyAlcyIgJSBhcmdzLnBrZ3NwZWMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIk5vIHBhY2thZ2VzIGZvdW5kIikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworZGVmIGxpc3RfcGtnX2ZpbGVzKGFyZ3MpOgorICAgIGltcG9ydCBqc29uCisKKyAgICBpZiBhcmdzLnJlY2lwZToKKyAgICAgICAgaWYgYXJncy5wa2c6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoImxpc3QtcGtnLWZpbGVzOiBJZiAtcC8tLXJlY2lwZSBpcyBzcGVjaWZpZWQgdGhlbiBhIHBhY2thZ2UgbmFtZSBjYW5ub3QgYmUgc3BlY2lmaWVkIikKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIHJlY2lwZXBrZ2xpc3QgPSBnZXRfcmVjaXBlX3BrZ3MoYXJncy5wa2dkYXRhX2RpciwgYXJncy5yZWNpcGUsIGFyZ3MudW5wYWNrYWdlZCkKKyAgICAgICAgaWYgYXJncy5ydW50aW1lOgorICAgICAgICAgICAgcGtnbGlzdCA9IFtdCisgICAgICAgICAgICBydW50aW1lX3BrZ3MgPSBsb29rdXBfcGtnbGlzdChyZWNpcGVwa2dsaXN0LCBhcmdzLnBrZ2RhdGFfZGlyLCBGYWxzZSkKKyAgICAgICAgICAgIGZvciBydHBrZ3MgaW4gcnVudGltZV9wa2dzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIHBrZ2xpc3QuZXh0ZW5kKHJ0cGtncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBrZ2xpc3QgPSByZWNpcGVwa2dsaXN0CisgICAgZWxzZToKKyAgICAgICAgaWYgbm90IGFyZ3MucGtnOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJsaXN0LXBrZy1maWxlczogSWYgLXAvLS1yZWNpcGUgaXMgbm90IHNwZWNpZmllZCB0aGVuIGF0IGxlYXN0IG9uZSBwYWNrYWdlIG5hbWUgbXVzdCBiZSBzcGVjaWZpZWQiKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgcGtnbGlzdCA9IGFyZ3MucGtnCisKKyAgICBmb3IgcGtnIGluIHBrZ2xpc3Q6CisgICAgICAgIHByaW50KCIlczoiICUgcGtnKQorICAgICAgICBpZiBhcmdzLnJ1bnRpbWU6CisgICAgICAgICAgICBwa2dkYXRhZmlsZSA9IG9zLnBhdGguam9pbihhcmdzLnBrZ2RhdGFfZGlyLCAicnVudGltZS1yZXZlcnNlIiwgcGtnKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBrZ2RhdGFmaWxlKToKKyAgICAgICAgICAgICAgICBpZiBhcmdzLnJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIHBhY2thZ2Ugd2FzIGVtcHR5IGFuZCB0aHVzIG5ldmVyIHBhY2thZ2VkLCBpZ25vcmUKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBmaW5kIGFueSBidWlsdCBydW50aW1lIHBhY2thZ2UgbmFtZWQgJXMiICUgcGtnKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwa2dkYXRhZmlsZSA9IG9zLnBhdGguam9pbihhcmdzLnBrZ2RhdGFfZGlyLCAicnVudGltZSIsIHBrZykKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwa2dkYXRhZmlsZSk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZmluZCBhbnkgYnVpbHQgcmVjaXBlLXNwYWNlIHBhY2thZ2UgbmFtZWQgJXMiICUgcGtnKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgd2l0aCBvcGVuKHBrZ2RhdGFmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnRklMRVNfSU5GTzonKToKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIHZhbCA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGRpY3R2YWwgPSBqc29uLmxvYWRzKHZhbCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGZ1bGxwdGggaW4gc29ydGVkKGRpY3R2YWwpOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlx0JXMiICUgZnVsbHB0aCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIG5vdCBmb3VuZDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBmaW5kIEZJTEVTX0lORk8gZW50cnkgaW4gJXMiICUgcGtnZGF0YWZpbGUpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworZGVmIGZpbmRfcGF0aChhcmdzKToKKyAgICBpbXBvcnQganNvbgorCisgICAgZm91bmQgPSBGYWxzZQorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKG9zLnBhdGguam9pbihhcmdzLnBrZ2RhdGFfZGlyLCAncnVudGltZScpKToKKyAgICAgICAgZm9yIGZuIGluIGZpbGVzOgorICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihyb290LGZuKSkgYXMgZjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0ZJTEVTX0lORk86Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBsaW5lLnNwbGl0KCc6JywgMSlbMV0uc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgZGljdHZhbCA9IGpzb24ubG9hZHModmFsKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZ1bGxwdGggaW4gZGljdHZhbC5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoY2FzZShmdWxscHRoLCBhcmdzLnRhcmdldHBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIiVzOiAlcyIgJSAoZm4sIGZ1bGxwdGgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICBpZiBub3QgZm91bmQ6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGZpbmQgYW55IHBhY2thZ2UgcHJvZHVjaW5nIHBhdGggJXMiICUgYXJncy50YXJnZXRwYXRoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisKK2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249Ik9wZW5FbWJlZGRlZCBwa2dkYXRhIHRvb2wgLSBxdWVyaWVzIHRoZSBwa2dkYXRhIGZpbGVzIHdyaXR0ZW4gb3V0IGR1cmluZyBkb19wYWNrYWdlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcGlsb2c9IlVzZSAlKHByb2cpcyA8c3ViY29tbWFuZD4gLS1oZWxwIHRvIGdldCBoZWxwIG9uIGEgc3BlY2lmaWMgY29tbWFuZCIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWQnLCAnLS1kZWJ1ZycsIGhlbHA9J0VuYWJsZSBkZWJ1ZyBvdXRwdXQnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1wJywgJy0tcGtnZGF0YS1kaXInLCBoZWxwPSdQYXRoIHRvIHBrZ2RhdGEgZGlyZWN0b3J5IChkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkgaWYgbm90IHNwZWNpZmllZCknKQorICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnModGl0bGU9J3N1YmNvbW1hbmRzJywgbWV0YXZhcj0nPHN1YmNvbW1hbmQ+JykKKworICAgIHBhcnNlcl9sb29rdXBfcGtnID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdsb29rdXAtcGtnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RyYW5zbGF0ZSBiZXR3ZWVuIHJlY2lwZS1zcGFjZSBwYWNrYWdlIG5hbWVzIGFuZCBydW50aW1lIHBhY2thZ2UgbmFtZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J0xvb2tzIHVwIHRoZSBzcGVjaWZpZWQgcmVjaXBlLXNwYWNlIHBhY2thZ2UgbmFtZShzKSB0byBzZWUgd2hhdCB0aGUgZmluYWwgcnVudGltZSBwYWNrYWdlIG5hbWUgaXMgKGUuZy4gZ2xpYmMgYmVjb21lcyBsaWJjNiksIG9yIHdpdGggLXIvLS1yZXZlcnNlIGxvb2tzIHVwIHRoZSBvdGhlciB3YXkuJykKKyAgICBwYXJzZXJfbG9va3VwX3BrZy5hZGRfYXJndW1lbnQoJ3BrZycsIG5hcmdzPScrJywgaGVscD0nUGFja2FnZSBuYW1lIHRvIGxvb2sgdXAnKQorICAgIHBhcnNlcl9sb29rdXBfcGtnLmFkZF9hcmd1bWVudCgnLXInLCAnLS1yZXZlcnNlJywgaGVscD0nU3dpdGNoIHRvIGxvb2tpbmcgdXAgcmVjaXBlLXNwYWNlIHBhY2thZ2UgbmFtZXMgZnJvbSBydW50aW1lIHBhY2thZ2UgbmFtZXMnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl9sb29rdXBfcGtnLnNldF9kZWZhdWx0cyhmdW5jPWxvb2t1cF9wa2cpCisKKyAgICBwYXJzZXJfbGlzdF9wa2dzID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdsaXN0LXBrZ3MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nTGlzdCBwYWNrYWdlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nTGlzdHMgcGFja2FnZXMgdGhhdCBoYXZlIGJlZW4gYnVpbHQnKQorICAgIHBhcnNlcl9saXN0X3BrZ3MuYWRkX2FyZ3VtZW50KCdwa2dzcGVjJywgbmFyZ3M9JyonLCBoZWxwPSdQYWNrYWdlIG5hbWUgdG8gc2VhcmNoIGZvciAod2lsZGNhcmRzICogPyBhbGxvd2VkLCB1c2UgcXVvdGVzIHRvIGF2b2lkIHNoZWxsIGV4cGFuc2lvbiknKQorICAgIHBhcnNlcl9saXN0X3BrZ3MuYWRkX2FyZ3VtZW50KCctcicsICctLXJ1bnRpbWUnLCBoZWxwPSdTaG93IHJ1bnRpbWUgcGFja2FnZSBuYW1lcyBpbnN0ZWFkIG9mIHJlY2lwZS1zcGFjZSBwYWNrYWdlIG5hbWVzJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfbGlzdF9wa2dzLmFkZF9hcmd1bWVudCgnLXAnLCAnLS1yZWNpcGUnLCBoZWxwPSdMaW1pdCB0byBwYWNrYWdlcyBwcm9kdWNlZCBieSB0aGUgc3BlY2lmaWVkIHJlY2lwZScpCisgICAgcGFyc2VyX2xpc3RfcGtncy5hZGRfYXJndW1lbnQoJy11JywgJy0tdW5wYWNrYWdlZCcsIGhlbHA9J0luY2x1ZGUgdW5wYWNrYWdlZCAoaS5lLiBlbXB0eSkgcGFja2FnZXMnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl9saXN0X3BrZ3Muc2V0X2RlZmF1bHRzKGZ1bmM9bGlzdF9wa2dzKQorCisgICAgcGFyc2VyX2xpc3RfcGtnX2ZpbGVzID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdsaXN0LXBrZy1maWxlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdMaXN0IGZpbGVzIHdpdGhpbiBhIHBhY2thZ2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J0xpc3RzIGZpbGVzIGluY2x1ZGVkIGluIG9uZSBvciBtb3JlIHBhY2thZ2VzJykKKyAgICBwYXJzZXJfbGlzdF9wa2dfZmlsZXMuYWRkX2FyZ3VtZW50KCdwa2cnLCBuYXJncz0nKicsIGhlbHA9J1BhY2thZ2UgbmFtZSB0byByZXBvcnQgb24gKGlmIC1wLy0tcmVjaXBlIGlzIG5vdCBzcGVjaWZpZWQpJykKKyAgICBwYXJzZXJfbGlzdF9wa2dfZmlsZXMuYWRkX2FyZ3VtZW50KCctcicsICctLXJ1bnRpbWUnLCBoZWxwPSdTcGVjaWZpZWQgcGFja2FnZShzKSBhcmUgcnVudGltZSBwYWNrYWdlIG5hbWVzIGluc3RlYWQgb2YgcmVjaXBlLXNwYWNlIHBhY2thZ2UgbmFtZXMnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl9saXN0X3BrZ19maWxlcy5hZGRfYXJndW1lbnQoJy1wJywgJy0tcmVjaXBlJywgaGVscD0nUmVwb3J0IG9uIGFsbCBwYWNrYWdlcyBwcm9kdWNlZCBieSB0aGUgc3BlY2lmaWVkIHJlY2lwZScpCisgICAgcGFyc2VyX2xpc3RfcGtnX2ZpbGVzLmFkZF9hcmd1bWVudCgnLXUnLCAnLS11bnBhY2thZ2VkJywgaGVscD0nSW5jbHVkZSB1bnBhY2thZ2VkIChpLmUuIGVtcHR5KSBwYWNrYWdlcyAob25seSB1c2VmdWwgd2l0aCAtcC8tLXJlY2lwZSknLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl9saXN0X3BrZ19maWxlcy5zZXRfZGVmYXVsdHMoZnVuYz1saXN0X3BrZ19maWxlcykKKworICAgIHBhcnNlcl9sb29rdXBfcmVjaXBlID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdsb29rdXAtcmVjaXBlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0ZpbmQgcmVjaXBlIHByb2R1Y2luZyBvbmUgb3IgbW9yZSBwYWNrYWdlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nTG9va3MgdXAgdGhlIHNwZWNpZmllZCBydW50aW1lIHBhY2thZ2UocykgdG8gc2VlIHdoaWNoIHJlY2lwZSB0aGV5IHdlcmUgcHJvZHVjZWQgYnknKQorICAgIHBhcnNlcl9sb29rdXBfcmVjaXBlLmFkZF9hcmd1bWVudCgncGtnJywgbmFyZ3M9JysnLCBoZWxwPSdSdW50aW1lIHBhY2thZ2UgbmFtZSB0byBsb29rIHVwJykKKyAgICBwYXJzZXJfbG9va3VwX3JlY2lwZS5zZXRfZGVmYXVsdHMoZnVuYz1sb29rdXBfcmVjaXBlKQorCisgICAgcGFyc2VyX2ZpbmRfcGF0aCA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignZmluZC1wYXRoJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0ZpbmQgcGFja2FnZSBwcm92aWRpbmcgYSB0YXJnZXQgcGF0aCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nRmluZHMgdGhlIHJlY2lwZS1zcGFjZSBwYWNrYWdlIHByb3ZpZGluZyB0aGUgc3BlY2lmaWVkIHRhcmdldCBwYXRoJykKKyAgICBwYXJzZXJfZmluZF9wYXRoLmFkZF9hcmd1bWVudCgndGFyZ2V0cGF0aCcsIGhlbHA9J1BhdGggdG8gZmluZCAod2lsZGNhcmRzICogPyBhbGxvd2VkLCB1c2UgcXVvdGVzIHRvIGF2b2lkIHNoZWxsIGV4cGFuc2lvbiknKQorICAgIHBhcnNlcl9maW5kX3BhdGguc2V0X2RlZmF1bHRzKGZ1bmM9ZmluZF9wYXRoKQorCisgICAgcGFyc2VyX3JlYWRfdmFsdWUgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ3JlYWQtdmFsdWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUmVhZCBhbnkgcGtnZGF0YSB2YWx1ZSBmb3Igb25lIG9yIG1vcmUgcGFja2FnZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J1JlYWRzIHRoZSBuYW1lZCB2YWx1ZSBmcm9tIHRoZSBwa2dkYXRhIGZpbGVzIGZvciB0aGUgc3BlY2lmaWVkIHBhY2thZ2VzJykKKyAgICBwYXJzZXJfcmVhZF92YWx1ZS5hZGRfYXJndW1lbnQoJ3ZhbHVlbmFtZScsIGhlbHA9J05hbWUgb2YgdGhlIHZhbHVlIHRvIGxvb2sgdXAnKQorICAgIHBhcnNlcl9yZWFkX3ZhbHVlLmFkZF9hcmd1bWVudCgncGtnJywgbmFyZ3M9JysnLCBoZWxwPSdSdW50aW1lIHBhY2thZ2UgbmFtZSB0byBsb29rIHVwJykKKyAgICBwYXJzZXJfcmVhZF92YWx1ZS5zZXRfZGVmYXVsdHMoZnVuYz1yZWFkX3ZhbHVlKQorCisgICAgcGFyc2VyX2dsb2IgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2dsb2InLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRXhwYW5kIHBhY2thZ2UgbmFtZSBnbG9iIGV4cHJlc3Npb24nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J0V4cGFuZHMgb25lIG9yIG1vcmUgZ2xvYiBleHByZXNzaW9ucyBvdmVyIHRoZSBwYWNrYWdlcyBsaXN0ZWQgaW4gcGtnbGlzdGZpbGUnKQorICAgIHBhcnNlcl9nbG9iLmFkZF9hcmd1bWVudCgncGtnbGlzdGZpbGUnLCBoZWxwPSdGaWxlIGxpc3RpbmcgcGFja2FnZXMgKG9uZSBwYWNrYWdlIG5hbWUgcGVyIGxpbmUpJykKKyAgICBwYXJzZXJfZ2xvYi5hZGRfYXJndW1lbnQoJ2dsb2InLCBuYXJncz0iKyIsIGhlbHA9J0dsb2IgZXhwcmVzc2lvbiBmb3IgcGFja2FnZSBuYW1lcywgZS5nLiAqLWRldicpCisgICAgcGFyc2VyX2dsb2IuYWRkX2FyZ3VtZW50KCcteCcsICctLWV4Y2x1ZGUnLCBoZWxwPSdFeGNsdWRlIHBhY2thZ2VzIG1hdGNoaW5nIHNwZWNpZmllZCByZWdleCBmcm9tIHRoZSBnbG9iIG9wZXJhdGlvbicpCisgICAgcGFyc2VyX2dsb2Iuc2V0X2RlZmF1bHRzKGZ1bmM9Z2xvYikKKworCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIGlmIGFyZ3MuZGVidWc6CisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorCisgICAgaWYgbm90IGFyZ3MucGtnZGF0YV9kaXI6CisgICAgICAgIGltcG9ydCBzY3JpcHRwYXRoCisgICAgICAgIGJpdGJha2VwYXRoID0gc2NyaXB0cGF0aC5hZGRfYml0YmFrZV9saWJfcGF0aCgpCisgICAgICAgIGlmIG5vdCBiaXRiYWtlcGF0aDoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGZpbmQgYml0YmFrZSBieSBzZWFyY2hpbmcgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGlzIHNjcmlwdCBvciBQQVRIIikKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygnRm91bmQgYml0YmFrZSBwYXRoOiAlcycgJSBiaXRiYWtlcGF0aCkKKyAgICAgICAgdGluZm9pbCA9IHRpbmZvaWxfaW5pdCgpCisgICAgICAgIGFyZ3MucGtnZGF0YV9kaXIgPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignUEtHREFUQV9ESVInLCBUcnVlKQorICAgICAgICBsb2dnZXIuZGVidWcoJ1ZhbHVlIG9mIFBLR0RBVEFfRElSIGlzICIlcyInICUgYXJncy5wa2dkYXRhX2RpcikKKyAgICAgICAgaWYgbm90IGFyZ3MucGtnZGF0YV9kaXI6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBkZXRlcm1pbmUgcGtnZGF0YSBkaXJlY3RvcnkgZnJvbSBQS0dEQVRBX0RJUicpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGFyZ3MucGtnZGF0YV9kaXIpOgorICAgICAgICBsb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBmaW5kIHBrZ2RhdGEgZGlyZWN0b3J5ICVzJyAlIHBrZ2RhdGFfZGlyKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgcmV0ID0gYXJncy5mdW5jKGFyZ3MpCisKKyAgICByZXR1cm4gcmV0CisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1wdWJsaXNoLXNkayBiL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1wdWJsaXNoLXNkawpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNzM3YzlmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL29lLXB1Ymxpc2gtc2RrCkBAIC0wLDAgKzEsMTQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBPcGVuRW1iZWRkZWQgU0RLIHB1Ymxpc2hpbmcgdG9vbAorCisjIG9lLXB1Ymxpc2gtc2RrIHB1Ymxpc2ggPGV4dC1zZGs+IDxkZXN0aW5hdGlvbj4KKyMgPGV4dC1zZGs+OiBleHRlbnNpYmxlIFNESyB0byBwdWJsaXNoIChwYXRoIHRvIHRoZSBpbnN0YWxsZXIgc2hlbGwgc2NyaXB0KQorIyA8ZGVzdGluYXRpb24+OiBsb2NhbCBvciByZW1vdGUgbG9jYXRpb24gd2hpY2ggc2VydmVycyBhcyBhbiBTREsgdXBkYXRlIHNlcnZlcgorIyBlLmcuCisjIG9lLXB1Ymxpc2gtc2RrIC9wYXRoL3RvL3Nkay1leHQuc2ggL21udC9wb2t5L3Nkay1leHQKKyMgb2UtcHVibGlzaC1zZGsgL3BhdGgvdG8vc2RrLWV4dC5zaCB1c2VyQGhvc3Q6L29wdC9wb2t5L3Nkay1leHQKKyMKKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBnbG9iCitpbXBvcnQgcmUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHNodXRpbAoraW1wb3J0IGVycm5vCisKK3NjcmlwdHNfcGF0aCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSkKK2xpYl9wYXRoID0gc2NyaXB0c19wYXRoICsgJy9saWInCitzeXMucGF0aCA9IHN5cy5wYXRoICsgW2xpYl9wYXRoXQoraW1wb3J0IHNjcmlwdHV0aWxzCitsb2dnZXIgPSBzY3JpcHR1dGlscy5sb2dnZXJfY3JlYXRlKCdzZGt0b29sJykKKworZGVmIG1rZGlyKGQpOgorICAgIHRyeToKKyAgICAgICAgb3MubWFrZWRpcnMoZCkKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKKyAgICAgICAgICAgIHJhaXNlIGUKKworZGVmIHB1Ymxpc2goYXJncyk6CisgICAgbG9nZ2VyLmRlYnVnKCJJbiBwdWJsaXNoIGZ1bmN0aW9uIikKKyAgICB0YXJnZXRfc2RrID0gYXJncy5zZGsKKyAgICBkZXN0aW5hdGlvbiA9IGFyZ3MuZGVzdAorICAgIGxvZ2dlci5kZWJ1ZygidGFyZ2V0X3NkayA9ICVzLCB1cGRhdGVfc2VydmVyID0gJXMiICUgKHRhcmdldF9zZGssIGRlc3RpbmF0aW9uKSkKKyAgICBzZGtfYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHRhcmdldF9zZGspCisKKyAgICAjIEVuc3VyZSB0aGUgU0RLIGV4aXN0cworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0YXJnZXRfc2RrKToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCIlcyBkb2Vzbid0IGV4aXN0IiAlIHRhcmdldF9zZGspCisgICAgICAgIHJldHVybiAtMQorCisgICAgaWYgJzonIGluIGRlc3RpbmF0aW9uOgorICAgICAgICBpc19yZW1vdGUgPSBUcnVlCisgICAgICAgIGhvc3QsIGRlc3RkaXIgPSBkZXN0aW5hdGlvbi5zcGxpdCgnOicpCisgICAgICAgIGRlc3Rfc2RrID0gb3MucGF0aC5qb2luKGRlc3RkaXIsIHNka19iYXNlbmFtZSkKKyAgICBlbHNlOgorICAgICAgICBpc19yZW1vdGUgPSBGYWxzZQorICAgICAgICBkZXN0X3NkayA9IG9zLnBhdGguam9pbihkZXN0aW5hdGlvbiwgc2RrX2Jhc2VuYW1lKQorCisgICAgIyBNYWtpbmcgc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cworICAgIGxvZ2dlci5kZWJ1ZygiTWFraW5nIHN1cmUgdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBleGlzdHMiKQorICAgIGlmIG5vdCBpc19yZW1vdGU6CisgICAgICAgIG1rZGlyKGRlc3RpbmF0aW9uKQorICAgIGVsc2U6CisgICAgICAgIGNtZCA9ICJzc2ggJXMgJ21rZGlyIC1wICVzJyIgJSAoaG9zdCwgZGVzdGRpcikKKyAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKGNtZCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgaWYgcmV0ICE9IDA6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIk1ha2luZyBkaXJlY3RvcnkgJXMgb24gJXMgZmFpbGVkIiAlIChkZXN0ZGlyLCBob3N0KSkKKyAgICAgICAgICAgIHJldHVybiByZXQKKworICAgICMgQ29weWluZyB0aGUgU0RLIHRvIHRoZSBkZXN0aW5hdGlvbgorICAgIGxvZ2dlci5pbmZvKCJDb3B5aW5nIHRoZSBTREsgdG8gZGVzdGluYXRpb24iKQorICAgIGlmIG5vdCBpc19yZW1vdGU6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRlc3Rfc2RrKToKKyAgICAgICAgICAgIG9zLnJlbW92ZShkZXN0X3NkaykKKyAgICAgICAgaWYgKG9zLnN0YXQodGFyZ2V0X3Nkaykuc3RfZGV2ID09IG9zLnN0YXQoZGVzdGluYXRpb24pLnN0X2Rldik6CisgICAgICAgICAgICBvcy5saW5rKHRhcmdldF9zZGssIGRlc3Rfc2RrKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2h1dGlsLmNvcHkodGFyZ2V0X3NkaywgZGVzdF9zZGspCisgICAgZWxzZToKKyAgICAgICAgY21kID0gInNjcCAlcyAlcyIgJSAodGFyZ2V0X3NkaywgZGVzdGluYXRpb24pCisgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbChjbWQsIHNoZWxsPVRydWUpCisgICAgICAgIGlmIHJldCAhPSAwOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJzY3AgJXMgJXMgZmFpbGVkIiAlICh0YXJnZXRfc2RrLCBkZXN0aW5hdGlvbikpCisgICAgICAgICAgICByZXR1cm4gcmV0CisKKyAgICAjIFVucGFjayB0aGUgU0RLCisgICAgbG9nZ2VyLmluZm8oIlVucGFja2luZyBTREsiKQorICAgIGlmIG5vdCBpc19yZW1vdGU6CisgICAgICAgIGNtZCA9ICJzaCAlcyAtbiAteSAtZCAlcyIgJSAoZGVzdF9zZGssIGRlc3RpbmF0aW9uKQorICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoY21kLCBzaGVsbD1UcnVlKQorICAgICAgICBpZiByZXQgPT0gMDoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdTdWNjZXNzZnVsbHkgdW5wYWNrZWQgJXMgdG8gJXMnICUgKGRlc3Rfc2RrLCBkZXN0aW5hdGlvbikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byB1bnBhY2sgJXMgdG8gJXMnICUgKGRlc3Rfc2RrLCBkZXN0aW5hdGlvbikpCisgICAgICAgICAgICByZXR1cm4gcmV0CisgICAgZWxzZToKKyAgICAgICAgY21kID0gInNzaCAlcyAnc2ggJXMgLW4gLXkgLWQgJXMnIiAlIChob3N0LCBkZXN0X3NkaywgZGVzdGRpcikKKyAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKGNtZCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgaWYgcmV0ID09IDA6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygnU3VjY2Vzc2Z1bGx5IHVucGFja2VkICVzIHRvICVzJyAlIChkZXN0X3NkaywgZGVzdGRpcikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byB1bnBhY2sgJXMgdG8gJXMnICUgKGRlc3Rfc2RrLCBkZXN0ZGlyKSkKKyAgICAgICAgICAgIHJldHVybiByZXQKKworICAgICMgU2V0dGluZyB1cCB0aGUgZ2l0IHJlcG8KKyAgICBpZiBub3QgaXNfcmVtb3RlOgorICAgICAgICBjbWQgPSAnc2V0IC1lOyBjZCAlcy9sYXllcnM7IGlmIFsgISAtZSAuZ2l0IF07IHRoZW4gZ2l0IGluaXQgLjsgbXYgLmdpdC9ob29rcy9wb3N0LXVwZGF0ZS5zYW1wbGUgLmdpdC9ob29rcy9wb3N0LXVwZGF0ZTsgZmk7IGdpdCBhZGQgLUEgLjsgZ2l0IGNvbW1pdCAtcSAtbSAiaW5pdCByZXBvIiB8fCB0cnVlOycgJSBkZXN0aW5hdGlvbgorICAgIGVsc2U6CisgICAgICAgIGNtZCA9ICJzc2ggJXMgJ3NldCAtZTsgY2QgJXMvbGF5ZXJzOyBpZiBbICEgLWUgLmdpdCBdOyB0aGVuIGdpdCBpbml0IC47IG12IC5naXQvaG9va3MvcG9zdC11cGRhdGUuc2FtcGxlIC5naXQvaG9va3MvcG9zdC11cGRhdGU7IGZpOyBnaXQgYWRkIC1BIC47IGdpdCBjb21taXQgLXEgLW0gXCJpbml0IHJlcG9cIiB8fCB0cnVlOyciICUgKGhvc3QsIGRlc3RkaXIpCisgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKGNtZCwgc2hlbGw9VHJ1ZSkKKyAgICBpZiByZXQgPT0gMDoKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1NESyBwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5JykKKyAgICBlbHNlOgorICAgICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgdXAgbGF5ZXIgZ2l0IHJlcG8nKQorICAgIHJldHVybiByZXQKKworCitkZWYgbWFpbigpOgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSJPcGVuRW1iZWRkZWQgZGV2ZWxvcG1lbnQgdG9vbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXBpbG9nPSJVc2UgJShwcm9nKXMgPHN1YmNvbW1hbmQ+IC0taGVscCB0byBnZXQgaGVscCBvbiBhIHNwZWNpZmljIGNvbW1hbmQiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1kJywgJy0tZGVidWcnLCBoZWxwPSdFbmFibGUgZGVidWcgb3V0cHV0JywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcScsICctLXF1aWV0JywgaGVscD0nUHJpbnQgb25seSBlcnJvcnMnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnc2RrJywgaGVscD0nRXh0ZW5zaWJsZSBTREsgdG8gcHVibGlzaCcpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnZGVzdCcsIGhlbHA9J0Rlc3RpbmF0aW9uIHRvIHB1Ymxpc2ggU0RLIHRvJykKKworICAgIHBhcnNlci5zZXRfZGVmYXVsdHMoZnVuYz1wdWJsaXNoKQorCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIGlmIGFyZ3MuZGVidWc6CisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorICAgIGVsaWYgYXJncy5xdWlldDoKKyAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuRVJST1IpCisKKyAgICByZXQgPSBhcmdzLmZ1bmMoYXJncykKKyAgICByZXR1cm4gcmV0CisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdHJ5OgorICAgICAgICByZXQgPSBtYWluKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICByZXQgPSAxCisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Yyg1KQorICAgIHN5cy5leGl0KHJldCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1zZWxmdGVzdCBiL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1zZWxmdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MWUyZGQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL29lLXNlbGZ0ZXN0CkBAIC0wLDAgKzEsMjQ1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBDb3B5cmlnaHQgKGMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBzY3JpcHQgcnVucyB0ZXN0cyBkZWZpbmVkIGluIG1ldGEvbGliL3NlbGZ0ZXN0LworIyBJdCdzIHB1cnBvc2UgaXMgdG8gYXV0b21hdGUgdGhlIHRlc3Rpbmcgb2YgZGlmZmVyZW50IGJpdGJha2UgdG9vbHMuCisjIFRvIHVzZSBpdCB5b3UganVzdCBuZWVkIHRvIHNvdXJjZSB5b3VyIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBhbmQKKyMgYWRkIHRoZSBtZXRhLXNlbGZ0ZXN0IGxheWVyIHRvIHlvdXIgQkJMQVlFUlMuCisjIENhbGwgdGhlIHNjcmlwdCBhczogIm9lLXNlbGZ0ZXN0IiB0byBydW4gYWxsIHRoZSB0ZXN0cyBpbiBpbiBtZXRhL2xpYi9zZWxmdGVzdC8KKyMgQ2FsbCB0aGUgc2NyaXB0IGFzOiAib2Utc2VsZnRlc3QgPG1vZHVsZT4uPENsYXNzPi48bWV0aG9kPiIgdG8gcnVuIGp1c3QgYSBzaW5nbGUgdGVzdAorIyBFLmc6ICJvZS1zZWxmdGVzdCBiYm91dHB1dC5CaXRiYWtlTGF5ZXJzIiB3aWxsIHJ1biBqdXN0IHRoZSBCaXRiYWtlTGF5ZXJzIGNsYXNzIGZyb20gbWV0YS9saWIvc2VsZnRlc3QvYmJvdXRwdXQucHkKKworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBhcmdwYXJzZQorCitzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKSArICcvbGliJykKK2ltcG9ydCBzY3JpcHRwYXRoCitzY3JpcHRwYXRoLmFkZF9iaXRiYWtlX2xpYl9wYXRoKCkKK3NjcmlwdHBhdGguYWRkX29lX2xpYl9wYXRoKCkKKworaW1wb3J0IG9lcWEuc2VsZnRlc3QKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBnZXRfYmJfdmFyLCBnZXRfdGVzdF9sYXllcgorZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKKworZGVmIGxvZ2dlcl9jcmVhdGUoKToKKyAgICBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcigic2VsZnRlc3QiKQorICAgIGxvZy5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorCisgICAgZmggPSBsb2dnaW5nLkZpbGVIYW5kbGVyKGZpbGVuYW1lPSdvZS1zZWxmdGVzdC5sb2cnLCBtb2RlPSd3JykKKyAgICBmaC5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorCisgICAgY2ggPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc3lzLnN0ZG91dCkKKyAgICBjaC5zZXRMZXZlbChsb2dnaW5nLklORk8pCisKKyAgICBmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcignJShhc2N0aW1lKXMgLSAlKG5hbWUpcyAtICUobGV2ZWxuYW1lKXMgLSAlKG1lc3NhZ2UpcycpCisgICAgZmguc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKyAgICBjaC5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQorCisgICAgbG9nLmFkZEhhbmRsZXIoZmgpCisgICAgbG9nLmFkZEhhbmRsZXIoY2gpCisKKyAgICByZXR1cm4gbG9nCisKK2xvZyA9IGxvZ2dlcl9jcmVhdGUoKQorCitkZWYgZ2V0X2FyZ3NfcGFyc2VyKCk6CisgICAgZGVzY3JpcHRpb24gPSAiU2NyaXB0IHRoYXQgcnVucyB1bml0IHRlc3RzIGFnYWlucyBiaXRiYWtlIGFuZCBvdGhlciBZb2N0byByZWxhdGVkIHRvb2xzLiBUaGUgZ29hbCBpcyB0byB2YWxpZGF0ZSB0b29scyBmdW5jdGlvbmFsaXR5IGFuZCBtZXRhZGF0YSBpbnRlZ3JpdHkuIFJlZmVyIHRvIGh0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvT2Utc2VsZnRlc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPWRlc2NyaXB0aW9uKQorICAgIGdyb3VwID0gcGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAocmVxdWlyZWQ9VHJ1ZSkKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tcnVuLXRlc3RzJywgcmVxdWlyZWQ9RmFsc2UsIGFjdGlvbj0nc3RvcmUnLCBuYXJncz0nKicsIGRlc3Q9InJ1bl90ZXN0cyIsIGRlZmF1bHQ9Tm9uZSwgaGVscD0nU2VsZWN0IHdoYXQgdGVzdHMgdG8gcnVuIChtb2R1bGVzLCBjbGFzc2VzIG9yIHRlc3QgbWV0aG9kcykuIEZvcm1hdCBzaG91bGQgYmU6IDxtb2R1bGU+LjxjbGFzcz4uPHRlc3RfbWV0aG9kPicpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXJ1bi1hbGwtdGVzdHMnLCByZXF1aXJlZD1GYWxzZSwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0icnVuX2FsbF90ZXN0cyIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9J1J1biBhbGwgKHVuaGlkZGVuKSB0ZXN0cycpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWxpc3QtbW9kdWxlcycsIHJlcXVpcmVkPUZhbHNlLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJsaXN0X21vZHVsZXMiLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSdMaXN0IGFsbCBhdmFpbGFibGUgdGVzdCBtb2R1bGVzLicpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWxpc3QtY2xhc3NlcycsIHJlcXVpcmVkPUZhbHNlLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJsaXN0X2FsbGNsYXNzZXMiLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSdMaXN0IGFsbCBhdmFpbGFibGUgdGVzdCBjbGFzc2VzLicpCisgICAgcmV0dXJuIHBhcnNlcgorCisKK2RlZiBwcmVmbGlnaHRfY2hlY2soKToKKworICAgIGxvZy5pbmZvKCJDaGVja2luZyB0aGF0IGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIgYmVmb3JlIHJ1bm5pbmcgdGhlIHRlc3RzIikKKworICAgIGlmIG5vdCBvcy5lbnZpcm9uLmdldCgiQlVJTERESVIiKToKKyAgICAgICAgbG9nLmVycm9yKCJCVUlMRERJUiBpc24ndCBzZXQuIERpZCB5b3UgZm9yZ2V0IHRvIHNvdXJjZSB5b3VyIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdD8iKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGJ1aWxkZGlyID0gb3MuZW52aXJvbi5nZXQoIkJVSUxERElSIikKKyAgICBpZiBvcy5nZXRjd2QoKSAhPSBidWlsZGRpcjoKKyAgICAgICAgbG9nLmluZm8oIkNoYW5naW5nIGN3ZCB0byAlcyIgJSBidWlsZGRpcikKKyAgICAgICAgb3MuY2hkaXIoYnVpbGRkaXIpCisKKyAgICBpZiBub3QgIm1ldGEtc2VsZnRlc3QiIGluIGdldF9iYl92YXIoIkJCTEFZRVJTIik6CisgICAgICAgIGxvZy5lcnJvcigiWW91IGRvbid0IHNlZW0gdG8gaGF2ZSB0aGUgbWV0YS1zZWxmdGVzdCBsYXllciBpbiBCQkxBWUVSUyIpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgbG9nLmluZm8oIlJ1bm5pbmcgYml0YmFrZSAtcCIpCisgICAgcnVuQ21kKCJiaXRiYWtlIC1wIikKKworICAgIHJldHVybiBUcnVlCisKK2RlZiBhZGRfaW5jbHVkZSgpOgorICAgIGJ1aWxkZGlyID0gb3MuZW52aXJvbi5nZXQoIkJVSUxERElSIikKKyAgICBpZiAiI2luY2x1ZGUgYWRkZWQgYnkgb2Utc2VsZnRlc3QucHkiIFwKKyAgICAgICAgbm90IGluIGZ0b29scy5yZWFkX2ZpbGUob3MucGF0aC5qb2luKGJ1aWxkZGlyLCAiY29uZi9sb2NhbC5jb25mIikpOgorICAgICAgICAgICAgbG9nLmluZm8oIkFkZGluZzogXCJpbmNsdWRlIHNlbGZ0ZXN0LmluY1wiIGluIGxvY2FsLmNvbmYiKQorICAgICAgICAgICAgZnRvb2xzLmFwcGVuZF9maWxlKG9zLnBhdGguam9pbihidWlsZGRpciwgImNvbmYvbG9jYWwuY29uZiIpLCBcCisgICAgICAgICAgICAgICAgICAgICJcbiNpbmNsdWRlIGFkZGVkIGJ5IG9lLXNlbGZ0ZXN0LnB5XG5pbmNsdWRlIHNlbGZ0ZXN0LmluYyIpCisKKyAgICBpZiAiI2luY2x1ZGUgYWRkZWQgYnkgb2Utc2VsZnRlc3QucHkiIFwKKyAgICAgICAgbm90IGluIGZ0b29scy5yZWFkX2ZpbGUob3MucGF0aC5qb2luKGJ1aWxkZGlyLCAiY29uZi9iYmxheWVycy5jb25mIikpOgorICAgICAgICAgICAgbG9nLmluZm8oIkFkZGluZzogXCJpbmNsdWRlIGJibGF5ZXJzLmluY1wiIGluIGJibGF5ZXJzLmNvbmYiKQorICAgICAgICAgICAgZnRvb2xzLmFwcGVuZF9maWxlKG9zLnBhdGguam9pbihidWlsZGRpciwgImNvbmYvYmJsYXllcnMuY29uZiIpLCBcCisgICAgICAgICAgICAgICAgICAgICJcbiNpbmNsdWRlIGFkZGVkIGJ5IG9lLXNlbGZ0ZXN0LnB5XG5pbmNsdWRlIGJibGF5ZXJzLmluYyIpCisKK2RlZiByZW1vdmVfaW5jbHVkZSgpOgorICAgIGJ1aWxkZGlyID0gb3MuZW52aXJvbi5nZXQoIkJVSUxERElSIikKKyAgICBpZiBidWlsZGRpciBpcyBOb25lOgorICAgICAgICByZXR1cm4KKyAgICBpZiAiI2luY2x1ZGUgYWRkZWQgYnkgb2Utc2VsZnRlc3QucHkiIFwKKyAgICAgICAgaW4gZnRvb2xzLnJlYWRfZmlsZShvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICJjb25mL2xvY2FsLmNvbmYiKSk6CisgICAgICAgICAgICBsb2cuaW5mbygiUmVtb3ZpbmcgdGhlIGluY2x1ZGUgZnJvbSBsb2NhbC5jb25mIikKKyAgICAgICAgICAgIGZ0b29scy5yZW1vdmVfZnJvbV9maWxlKG9zLnBhdGguam9pbihidWlsZGRpciwgImNvbmYvbG9jYWwuY29uZiIpLCBcCisgICAgICAgICAgICAgICAgICAgICIjaW5jbHVkZSBhZGRlZCBieSBvZS1zZWxmdGVzdC5weVxuaW5jbHVkZSBzZWxmdGVzdC5pbmMiKQorCisgICAgaWYgIiNpbmNsdWRlIGFkZGVkIGJ5IG9lLXNlbGZ0ZXN0LnB5IiBcCisgICAgICAgIGluIGZ0b29scy5yZWFkX2ZpbGUob3MucGF0aC5qb2luKGJ1aWxkZGlyLCAiY29uZi9iYmxheWVycy5jb25mIikpOgorICAgICAgICAgICAgbG9nLmluZm8oIlJlbW92aW5nIHRoZSBpbmNsdWRlIGZyb20gYmJsYXllcnMuY29uZiIpCisgICAgICAgICAgICBmdG9vbHMucmVtb3ZlX2Zyb21fZmlsZShvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICJjb25mL2JibGF5ZXJzLmNvbmYiKSwgXAorICAgICAgICAgICAgICAgICAgICAiI2luY2x1ZGUgYWRkZWQgYnkgb2Utc2VsZnRlc3QucHlcbmluY2x1ZGUgYmJsYXllcnMuaW5jIikKKworZGVmIHJlbW92ZV9pbmNfZmlsZXMoKToKKyAgICB0cnk6CisgICAgICAgIG9zLnJlbW92ZShvcy5wYXRoLmpvaW4ob3MuZW52aXJvbi5nZXQoIkJVSUxERElSIiksICJjb25mL3NlbGZ0ZXN0LmluYyIpKQorICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhnZXRfdGVzdF9sYXllcigpKToKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGlmIGYgPT0gJ3Rlc3RfcmVjaXBlLmluYyc6CisgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShvcy5wYXRoLmpvaW4ocm9vdCwgZikpCisgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgT1NFcnJvciwpIGFzIGU6ICAgICMgQXR0cmlidXRlRXJyb3IgbWF5IGhhcHBlbiBpZiBCVUlMRERJUiBpcyBub3Qgc2V0CisgICAgICAgIHBhc3MKKworICAgIHRyeToKKyAgICAgICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbihvcy5lbnZpcm9uLmdldCgiQlVJTERESVIiKSwgImNvbmYvYmJsYXllcnMuaW5jIikpCisgICAgZXhjZXB0OgorICAgICAgICBwYXNzCisKK2RlZiBnZXRfdGVzdHMoZXhjbHVzaXZlX21vZHVsZXM9W10sIGluY2x1ZGVfaGlkZGVuPUZhbHNlKToKKyAgICB0ZXN0c2xpc3QgPSBbXQorICAgIGZvciB4IGluIGV4Y2x1c2l2ZV9tb2R1bGVzOgorICAgICAgICB0ZXN0c2xpc3QuYXBwZW5kKCdvZXFhLnNlbGZ0ZXN0LicgKyB4KQorICAgIGlmIG5vdCB0ZXN0c2xpc3Q6CisgICAgICAgIGZvciB0ZXN0cGF0aCBpbiBvZXFhLnNlbGZ0ZXN0Ll9fcGF0aF9fOgorICAgICAgICAgICAgZmlsZXMgPSBzb3J0ZWQoW2YgZm9yIGYgaW4gb3MubGlzdGRpcih0ZXN0cGF0aCkgaWYgZi5lbmRzd2l0aCgnLnB5JykgYW5kIG5vdCAoZi5zdGFydHN3aXRoKCdfJykgYW5kIG5vdCBpbmNsdWRlX2hpZGRlbikgYW5kIG5vdCBmLnN0YXJ0c3dpdGgoJ19fJykgYW5kIGYgIT0gJ2Jhc2UucHknXSkKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIG1vZHVsZSA9ICdvZXFhLnNlbGZ0ZXN0LicgKyBmWzotM10KKyAgICAgICAgICAgICAgICBpZiBtb2R1bGUgbm90IGluIHRlc3RzbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgdGVzdHNsaXN0LmFwcGVuZChtb2R1bGUpCisKKyAgICByZXR1cm4gdGVzdHNsaXN0CisKK2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gZ2V0X2FyZ3NfcGFyc2VyKCkKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgIyBBZGQgPGxheWVyPi9saWIgdG8gc3lzLnBhdGgsIHNvIGxheWVycyBjYW4gYWRkIHNlbGZ0ZXN0cworICAgIGxvZy5pbmZvKCJSdW5uaW5nIGJpdGJha2UgLWUgdG8gZ2V0IEJCUEFUSCIpCisgICAgYmJwYXRoID0gZ2V0X2JiX3ZhcignQkJQQVRIJykuc3BsaXQoJzonKQorICAgIGxheWVyX2xpYmRpcnMgPSBbcCBmb3IgcCBpbiAob3MucGF0aC5qb2luKGwsICdsaWInKSBmb3IgbCBpbiBiYnBhdGgpIGlmIG9zLnBhdGguZXhpc3RzKHApXQorICAgIHN5cy5wYXRoLmV4dGVuZChsYXllcl9saWJkaXJzKQorICAgIHJlbG9hZChvZXFhLnNlbGZ0ZXN0KQorCisgICAgaWYgYXJncy5saXN0X2FsbGNsYXNzZXM6CisgICAgICAgIGFyZ3MubGlzdF9tb2R1bGVzID0gVHJ1ZQorCisgICAgaWYgYXJncy5saXN0X21vZHVsZXM6CisgICAgICAgIGxvZy5pbmZvKCdMaXN0aW5nIGFsbCBhdmFpbGFibGUgdGVzdCBtb2R1bGVzOicpCisgICAgICAgIHRlc3RzbGlzdCA9IGdldF90ZXN0cyhpbmNsdWRlX2hpZGRlbj1UcnVlKQorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0c2xpc3Q6CisgICAgICAgICAgICBtb2R1bGUgPSB0ZXN0LnNwbGl0KCcuJylbLTFdCisgICAgICAgICAgICBpbmZvID0gJycKKyAgICAgICAgICAgIGlmIG1vZHVsZS5zdGFydHN3aXRoKCdfJyk6CisgICAgICAgICAgICAgICAgaW5mbyA9ICcgKGhpZGRlbiknCisgICAgICAgICAgICBwcmludCBtb2R1bGUgKyBpbmZvCisgICAgICAgICAgICBpZiBhcmdzLmxpc3RfYWxsY2xhc3NlczoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGltcG9ydCBpbXBvcnRsaWIKKyAgICAgICAgICAgICAgICAgICAgbW9kbGliID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUodGVzdCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIHYgaW4gdmFycyhtb2RsaWIpOgorICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHZhcnMobW9kbGliKVt2XQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0LCB0eXBlKG9lU2VsZlRlc3QpKSBhbmQgaXNzdWJjbGFzcyh0LCBvZVNlbGZUZXN0KSBhbmQgdCE9b2VTZWxmVGVzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiIC0tIiwgdgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBtZXRob2QgaW4gZGlyKHQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBtZXRob2Quc3RhcnRzd2l0aCgidGVzdF8iKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIgLS0gIC0tIiwgbWV0aG9kCisKKyAgICAgICAgICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBJbXBvcnRFcnJvcikgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgZQorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBpZiBhcmdzLnJ1bl90ZXN0cyBvciBhcmdzLnJ1bl9hbGxfdGVzdHM6CisgICAgICAgIGlmIG5vdCBwcmVmbGlnaHRfY2hlY2soKToKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgdGVzdHNsaXN0ID0gZ2V0X3Rlc3RzKGV4Y2x1c2l2ZV9tb2R1bGVzPShhcmdzLnJ1bl90ZXN0cyBvciBbXSksIGluY2x1ZGVfaGlkZGVuPUZhbHNlKQorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBsb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcgPSBOb25lCisgICAgICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHZlcmJvc2l0eT0yLCByZXN1bHRjbGFzcz1TdGFtcGVkUmVzdWx0KQorICAgICAgICAjIHdlIG5lZWQgdG8gZG8gdGhpcyBoZXJlLCBvdGhlcndpc2UganVzdCBsb2FkaW5nIHRoZSB0ZXN0cworICAgICAgICAjIHdpbGwgdGFrZSAyIG1pbnV0ZXMgKGJpdGJha2UgLWUgY2FsbHMpCisgICAgICAgIG9lU2VsZlRlc3QudGVzdGxheWVyX3BhdGggPSBnZXRfdGVzdF9sYXllcigpCisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzbGlzdDoKKyAgICAgICAgICAgIGxvZy5pbmZvKCJMb2FkaW5nIHRlc3RzIGZyb206ICVzIiAlIHRlc3QpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3VpdGUuYWRkVGVzdHMobG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKHRlc3QpKQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgbG9nLmVycm9yKCJGYWlsZWQgdG8gaW1wb3J0ICVzIiAlIHRlc3QpCisgICAgICAgICAgICAgICAgbG9nLmVycm9yKGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgYWRkX2luY2x1ZGUoKQorICAgICAgICByZXN1bHQgPSBydW5uZXIucnVuKHN1aXRlKQorICAgICAgICBsb2cuaW5mbygiRmluaXNoZWQiKQorICAgICAgICBpZiByZXN1bHQud2FzU3VjY2Vzc2Z1bCgpOgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAxCisKK2NsYXNzIFN0YW1wZWRSZXN1bHQodW5pdHRlc3QuVGV4dFRlc3RSZXN1bHQpOgorICAgICIiIgorICAgIEN1c3RvbSBUZXN0UmVzdWx0IHRoYXQgcHJpbnRzIHRoZSB0aW1lIHdoZW4gYSB0ZXN0IHN0YXJ0cy4gIEFzIG9lLXNlbGZ0ZXN0CisgICAgY2FuIHRha2UgYSBsb25nIHRpbWUgKGllIGEgZmV3IGhvdXJzKSB0byBydW4sIHRpbWVzdGFtcHMgaGVscCB1cyB1bmRlcnN0YW5kCisgICAgd2hhdCB0ZXN0cyBhcmUgdGFraW5nIGEgbG9uZyB0aW1lIHRvIGV4ZWN1dGUuCisgICAgIiIiCisgICAgZGVmIHN0YXJ0VGVzdChzZWxmLCB0ZXN0KToKKyAgICAgICAgaW1wb3J0IHRpbWUKKyAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUodGltZS5zdHJmdGltZSgiJVktJW0tJWQgJUg6JU06JVMiLCB0aW1lLmxvY2FsdGltZSgpKSArICIgLSAiKQorICAgICAgICBzdXBlcihTdGFtcGVkUmVzdWx0LCBzZWxmKS5zdGFydFRlc3QodGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0cnk6CisgICAgICAgIHJldCA9IG1haW4oKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJldCA9IDEKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKDUpCisgICAgZmluYWxseToKKyAgICAgICAgcmVtb3ZlX2luY2x1ZGUoKQorICAgICAgICByZW1vdmVfaW5jX2ZpbGVzKCkKKyAgICBzeXMuZXhpdChyZXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvb2Utc2V0dXAtYnVpbGRkaXIgYi95b2N0by1wb2t5L3NjcmlwdHMvb2Utc2V0dXAtYnVpbGRkaXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjU5OGJhOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1zZXR1cC1idWlsZGRpcgpAQCAtMCwwICsxLDE0MCBAQAorIyEvYmluL3NoCisKKyMgT0UgQnVpbGQgRW52aXJvbm1lbnQgU2V0dXAgU2NyaXB0CisjCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDExIExpbnV4IEZvdW5kYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCitpZiBbIC16ICIkQlVJTERESVIiIF07IHRoZW4KKyAgICBlY2hvID4mMiAiRXJyb3I6IFRoZSBidWlsZCBkaXJlY3RvcnkgKEJVSUxERElSKSBtdXN0IGJlIHNldCEiCisgICAgZXhpdCAxCitmaQorCitta2RpciAtcCAiJEJVSUxERElSL2NvbmYiCisKK2lmIFsgISAtZCAiJEJVSUxERElSIiBdOyB0aGVuCisgICAgZWNobyA+JjIgIkVycm9yOiBUaGUgYnVpbGRkaXIgKCRCVUlMRERJUikgZG9lcyBub3QgZXhpc3QhIgorICAgIGV4aXQgMQorZmkKKworaWYgWyAhIC13ICIkQlVJTERESVIiIF07IHRoZW4KKyAgICBlY2hvID4mMiAiRXJyb3I6IENhbm5vdCB3cml0ZSB0byAkQlVJTERESVIsIHBlcmhhcHMgdHJ5IHNvdXJjaW5nIHdpdGggYSB3cml0YWJsZSBwYXRoPyBpLmUuIC4gb2UtaW5pdC1idWlsZC1lbnYgfi9teS1idWlsZCIKKyAgICBleGl0IDEKK2ZpCisKKyMgQXR0ZW1wdGluZyByZW1vdmFsIG9mIHN0aWNreSxzZXR1aWQgYml0cyBmcm9tIEJVSUxERElSLCBCVUlMRERJUi9jb25mCitjaG1vZCAtc3QgIiRCVUlMRERJUiIgMj4vZGV2L251bGwgfHwgZWNobyAiV0FSTklORzogdW5hYmxlIHRvIGNobW9kICRCVUlMRERJUiIKK2NobW9kIC1zdCAiJEJVSUxERElSL2NvbmYiIDI+L2Rldi9udWxsIHx8IGVjaG8gIldBUk5JTkc6IHVuYWJsZSB0byBjaG1vZCAkQlVJTERESVIvY29uZiIKKworY2QgIiRCVUlMRERJUiIKKworaWYgWyAtZiAiJEJVSUxERElSL2NvbmYvdGVtcGxhdGVjb25mLmNmZyIgXTsgdGhlbgorICAgIFRFTVBMQVRFQ09ORj0kKGNhdCAiJEJVSUxERElSL2NvbmYvdGVtcGxhdGVjb25mLmNmZyIpCitmaQorCisuICRPRVJPT1QvLnRlbXBsYXRlY29uZgorCitpZiBbICEgLWYgIiRCVUlMRERJUi9jb25mL3RlbXBsYXRlY29uZi5jZmciIF07IHRoZW4KKyAgICBlY2hvICIkVEVNUExBVEVDT05GIiA+IiRCVUlMRERJUi9jb25mL3RlbXBsYXRlY29uZi5jZmciCitmaQorCisjIAorIyAkVEVNUExBVEVDT05GIGNhbiBwb2ludCB0byBhIGRpcmVjdG9yeSBmb3IgdGhlIHRlbXBsYXRlIGxvY2FsLmNvbmYgJiBiYmxheWVycy5jb25mCisjCitpZiBbIC1uICIkVEVNUExBVEVDT05GIiBdOyB0aGVuCisgICAgaWYgWyAhIC1kICIkVEVNUExBVEVDT05GIiBdOyB0aGVuCisgICAgICAgICMgQWxsb3cgVEVNUExBVEVDT05GPW1ldGEteHl6L2NvbmYgYXMgYSBzaG9ydGN1dAorICAgICAgICBpZiBbIC1kICIkT0VST09ULyRURU1QTEFURUNPTkYiIF07IHRoZW4KKyAgICAgICAgICAgIFRFTVBMQVRFQ09ORj0iJE9FUk9PVC8kVEVNUExBVEVDT05GIgorICAgICAgICBmaQorICAgICAgICBpZiBbICEgLWQgIiRURU1QTEFURUNPTkYiIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gPiYyICJFcnJvcjogJyRURU1QTEFURUNPTkYnIG11c3QgYmUgYSBkaXJlY3RvcnkgY29udGFpbmluZyBsb2NhbC5jb25mICYgYmJsYXllcnMuY29uZiIKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorICAgIGZpCisgICAgT0VDT1JFTEFZRVJDT05GPSIkVEVNUExBVEVDT05GL2JibGF5ZXJzLmNvbmYuc2FtcGxlIgorICAgIE9FQ09SRUxPQ0FMQ09ORj0iJFRFTVBMQVRFQ09ORi9sb2NhbC5jb25mLnNhbXBsZSIKKyAgICBPRUNPUkVOT1RFU0NPTkY9IiRURU1QTEFURUNPTkYvY29uZi1ub3Rlcy50eHQiCitmaQorCit1bnNldCBTSE9XWVBET0MKK2lmIFsgLXogIiRPRUNPUkVMT0NBTENPTkYiIF07IHRoZW4KKyAgICBPRUNPUkVMT0NBTENPTkY9IiRPRVJPT1QvbWV0YS9jb25mL2xvY2FsLmNvbmYuc2FtcGxlIgorZmkKK2lmIFsgISAtciAiJEJVSUxERElSL2NvbmYvbG9jYWwuY29uZiIgXTsgdGhlbgorY2F0IDw8RU9NCitZb3UgaGFkIG5vIGNvbmYvbG9jYWwuY29uZiBmaWxlLiBUaGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBoYXMgdGhlcmVmb3JlIGJlZW4KK2NyZWF0ZWQgZm9yIHlvdSB3aXRoIHNvbWUgZGVmYXVsdCB2YWx1ZXMuIFlvdSBtYXkgd2lzaCB0byBlZGl0IGl0IHRvIHVzZSBhIAorZGlmZmVyZW50IE1BQ0hJTkUgKHRhcmdldCBoYXJkd2FyZSkgb3IgZW5hYmxlIHBhcmFsbGVsIGJ1aWxkIG9wdGlvbnMgdG8gdGFrZSAKK2FkdmFudGFnZSBvZiBtdWx0aXBsZSBjb3JlcyBmb3IgZXhhbXBsZS4gU2VlIHRoZSBmaWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFzIAorY29tbW9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgY29tbWVudGVkLgorCitFT00KKyAgICBjcCAtZiAkT0VDT1JFTE9DQUxDT05GICIkQlVJTERESVIvY29uZi9sb2NhbC5jb25mIgorICAgIFNIT1dZUERPQz15ZXMKK2ZpCisKK2lmIFsgLXogIiRPRUNPUkVMQVlFUkNPTkYiIF07IHRoZW4KKyAgICBPRUNPUkVMQVlFUkNPTkY9IiRPRVJPT1QvbWV0YS9jb25mL2JibGF5ZXJzLmNvbmYuc2FtcGxlIgorZmkKK2lmIFsgISAtciAiJEJVSUxERElSL2NvbmYvYmJsYXllcnMuY29uZiIgXTsgdGhlbgorICAgIGNhdCA8PEVPTQorWW91IGhhZCBubyBjb25mL2JibGF5ZXJzLmNvbmYgZmlsZS4gVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBoYXMgYmVlbiBjcmVhdGVkIGZvcgoreW91IHdpdGggc29tZSBkZWZhdWx0IHZhbHVlcy4gVG8gYWRkIGFkZGl0aW9uYWwgbWV0YWRhdGEgbGF5ZXJzIGludG8geW91cgorY29uZmlndXJhdGlvbiBwbGVhc2UgYWRkIGVudHJpZXMgdG8gdGhpcyBmaWxlLgorCitFT00KKworICAgICMgUHV0IHRoZSBhYm9zb2x1dGUgcGF0aCB0byB0aGUgbGF5ZXJzIGluIGJibGF5ZXJzLmNvbmYgc28gd2UgY2FuIHJ1bgorICAgICMgYml0YmFrZSB3aXRob3V0IHRoZSBpbml0IHNjcmlwdCBhZnRlciB0aGUgZmlyc3QgcnVuCisgICAgIyAjI0NPUkVCQVNFIyMgaXMgZGVwcmVjYXRlZCBhcyBpdCdzIG1lYW5pbmcgd2FzIGluY29uc2lzdGVudCwgYnV0IGNvbnRpbnVlCisgICAgIyB0byByZXBsYWNlIGl0IGZvciBjb21wYXRpYmlsaXR5LgorICAgIHNlZCAtZSAic3wjI09FUk9PVCMjfCRPRVJPT1R8ZyIgXAorICAgICAgICAtZSAic3wjI0NPUkVCQVNFIyN8JE9FUk9PVHxnIiBcCisgICAgICAgICRPRUNPUkVMQVlFUkNPTkYgPiAiJEJVSUxERElSL2NvbmYvYmJsYXllcnMuY29uZiIKKyAgICBTSE9XWVBET0M9eWVzCitmaQorCisjIFByZXZlbnQgZGlzdHVyYmluZyBhIG5ldyBHSVQgY2xvbmUgaW4gc2FtZSBjb25zb2xlCit1bnNldCBPRUNPUkVMT0NBTENPTkYKK3Vuc2V0IE9FQ09SRUxBWUVSQ09ORgorCisjIEVuZGluZyB0aGUgZmlyc3QtdGltZSBydW4gbWVzc2FnZS4gU2hvdyB0aGUgWVAgRG9jdW1lbnRhdGlvbiBiYW5uZXIuCitpZiBbICEgLXogIiRTSE9XWVBET0MiIF07IHRoZW4KKyAgICBjYXQgPDxFT00KK1RoZSBZb2N0byBQcm9qZWN0IGhhcyBleHRlbnNpdmUgZG9jdW1lbnRhdGlvbiBhYm91dCBPRSBpbmNsdWRpbmcgYSByZWZlcmVuY2UKK21hbnVhbCB3aGljaCBjYW4gYmUgZm91bmQgYXQ6CisgICAgaHR0cDovL3lvY3RvcHJvamVjdC5vcmcvZG9jdW1lbnRhdGlvbgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBPcGVuRW1iZWRkZWQgc2VlIHRoZWlyIHdlYnNpdGU6CisgICAgaHR0cDovL3d3dy5vcGVuZW1iZWRkZWQub3JnLworCitFT00KKyMgICAgdW5zZXQgU0hPV1lQRE9DCitmaQorCitjYXQgPDxFT00KKworIyMjIFNoZWxsIGVudmlyb25tZW50IHNldCB1cCBmb3IgYnVpbGRzLiAjIyMKKworWW91IGNhbiBub3cgcnVuICdiaXRiYWtlIDx0YXJnZXQ+JworCitFT00KK2lmIFsgLXogIiRPRUNPUkVOT1RFU0NPTkYiIF07IHRoZW4KKyAgICBPRUNPUkVOT1RFU0NPTkY9IiRPRVJPT1QvbWV0YS9jb25mL2NvbmYtbm90ZXMudHh0IgorZmkKK1sgISAtciAiJE9FQ09SRU5PVEVTQ09ORiIgXSB8fCBjYXQgJE9FQ09SRU5PVEVTQ09ORgordW5zZXQgT0VDT1JFTk9URVNDT05GCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvb2Utc2V0dXAtcnBtcmVwbyBiL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1zZXR1cC1ycG1yZXBvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkxN2I5OGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvb2Utc2V0dXAtcnBtcmVwbwpAQCAtMCwwICsxLDk3IEBACisjIS9iaW4vYmFzaAorIworIyBUaGlzIHV0aWxpdHkgc2V0dXAgdGhlIG5lY2Vzc2FyeSBtZXRhZGF0YSBmb3IgYW4gcnBtIHJlcG8KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDExIEludGVsIENvcnAuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKKworIyBEb24ndCB1c2UgVE1QRElSIGZyb20gdGhlIGV4dGVybmFsIGVudmlyb25tZW50LCBpdCBtYXkgYmUgYSBkaXN0cm8KKyMgdmFyaWFibGUgcG9pbnRpbmcgdG8gL3RtcCAoZS5nLiB3aXRoaW4gWCBvbiBPcGVuU1VTRSkKKyMgSW5zdGVhZCwgdXNlIE9FX1RNUERJUiBmb3IgcGFzc2luZyB0aGlzIGluIGV4dGVybmFsbHkuCitUTVBESVI9IiRPRV9UTVBESVIiCisKK2Z1bmN0aW9uIHVzYWdlKCkgeworCWVjaG8gIlVzYWdlOiAkMCA8cnBtLWRpcj4iCisJZWNobyAiICA8cnBtLWRpcj46IGRlZmF1bHQgaXMgJFRNUERJUi9kZXBsb3kvcnBtIgorfQorCitpZiBbICQjIC1ndCAxIF07IHRoZW4KKwl1c2FnZQorCWV4aXQgMQorZmkKKworc2V0dXBfdG1wZGlyKCkgeworICAgIGlmIFsgLXogIiRUTVBESVIiIF07IHRoZW4KKyAgICAgICAgIyBUcnkgdG8gZ2V0IFRNUERJUiBmcm9tIGJpdGJha2UKKyAgICAgICAgdHlwZSAtUCBiaXRiYWtlICY+L2Rldi9udWxsIHx8IHsKKyAgICAgICAgICAgIGVjaG8gIkluIG9yZGVyIGZvciB0aGlzIHNjcmlwdCB0byBkeW5hbWljYWxseSBpbmZlciBwYXRocyI7CisgICAgICAgICAgICBlY2hvICJ0byBrZXJuZWxzIG9yIGZpbGVzeXN0ZW0gaW1hZ2VzLCB5b3UgZWl0aGVyIG5lZWQiOworICAgICAgICAgICAgZWNobyAiYml0YmFrZSBpbiB5b3VyIFBBVEggb3IgdG8gc291cmNlIG9lLWluaXQtYnVpbGQtZW52IjsKKyAgICAgICAgICAgIGVjaG8gImJlZm9yZSBydW5uaW5nIHRoaXMgc2NyaXB0IiA+JjI7CisgICAgICAgICAgICBleGl0IDE7IH0KKworICAgICAgICAjIFdlIGhhdmUgYml0YmFrZSBpbiBQQVRILCBnZXQgVE1QRElSIGZyb20gYml0YmFrZQorICAgICAgICBUTVBESVI9YGJpdGJha2UgLWUgfCBncmVwIF5UTVBESVI9XCIgfCBjdXQgLWQgJz0nIC1mMiB8IGN1dCAtZCAnIicgLWYyYAorICAgICAgICBpZiBbIC16ICIkVE1QRElSIiBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICJFcnJvcjogdGhpcyBzY3JpcHQgbmVlZHMgdG8gYmUgcnVuIGZyb20geW91ciBidWlsZCBkaXJlY3RvcnksIgorICAgICAgICAgICAgZWNobyAib3IgeW91IG5lZWQgdG8gZXhwbGljaXRseSBzZXQgVE1QRElSIGluIHlvdXIgZW52aXJvbm1lbnQiCisgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgZmkKKyAgICBmaQorfQorCitzZXR1cF9zeXNyb290KCkgeworCSMgVG9vbGNoYWluIGluc3RhbGxzIHNldCB1cCAkT0VDT1JFX05BVElWRV9TWVNST09UIGluIHRoZWlyCisJIyBlbnZpcm9ubWVudCBzY3JpcHQuIElmIHRoYXQgdmFyaWFibGUgaXNuJ3Qgc2V0LCB3ZSdyZQorCSMgZWl0aGVyIGluIGFuIGluLXRyZWUgcG9reSBzY2VuYXJpbyBvciB0aGUgZW52aXJvbm1lbnQKKwkjIHNjcmlwdCB3YXNuJ3Qgc291cmNlJ2QuCisJaWYgWyAteiAiJE9FQ09SRV9OQVRJVkVfU1lTUk9PVCIgXTsgdGhlbgorCQlzZXR1cF90bXBkaXIKKwkJQlVJTERfQVJDSD1gdW5hbWUgLW1gCisJCUJVSUxEX09TPWB1bmFtZSB8IHRyICdbQS1aXScgJ1thLXpdJ2AKKwkJQlVJTERfU1lTPSIkQlVJTERfQVJDSC0kQlVJTERfT1MiCisKKwkJT0VDT1JFX05BVElWRV9TWVNST09UPSRUTVBESVIvc3lzcm9vdHMvJEJVSUxEX1NZUworCWZpIAorfQorCitzZXR1cF90bXBkaXIKK3NldHVwX3N5c3Jvb3QKKworCitpZiBbIC1uICIkMSIgXTsgdGhlbgorCVJQTV9ESVI9IiQxIgorZWxzZQorCVJQTV9ESVI9IiRUTVBESVIvZGVwbG95L3JwbSIKK2ZpCisKK2lmIFsgISAtZCAiJFJQTV9ESVIiIF07IHRoZW4KKyAgIAllY2hvICJFcnJvcjogcnBtIGRpciAkUlBNX0RJUiBkb2Vzbid0IGV4aXN0IgorCWV4aXQgMQorZmkKKworQ1JFQVRFUkVQTz0kT0VDT1JFX05BVElWRV9TWVNST09UL3Vzci9iaW4vY3JlYXRlcmVwbworaWYgWyAhIC1lICIkQ1JFQVRFUkVQTyIgXTsgdGhlbgorICAgCWVjaG8gIkVycm9yOiBjYW4ndCBmaW5kIGNyZWF0ZXJlcG8gYmluYXJ5IgorCWVjaG8gInBsZWFzZSBydW4gYml0YmFrZSBjcmVhdGVyZXBvLW5hdGl2ZSBmaXJzdCIKKwlleGl0IDEKK2ZpCisKK2V4cG9ydCBQQVRIPSR7UEFUSH06JHtPRUNPUkVfTkFUSVZFX1NZU1JPT1R9L3Vzci9iaW4KKworJENSRUFURVJFUE8gIiRSUE1fRElSIgorCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9vZS10cmltLXNjaGVtYXMgYi95b2N0by1wb2t5L3NjcmlwdHMvb2UtdHJpbS1zY2hlbWFzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI5ZmIzYTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvb2UtdHJpbS1zY2hlbWFzCkBAIC0wLDAgKzEsNDkgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IHN5cwordHJ5OgorICAgIGltcG9ydCB4bWwuZXRyZWUuY0VsZW1lbnRUcmVlIGFzIGV0cmVlCitleGNlcHQ6CisgICAgaW1wb3J0IHhtbC5ldHJlZS5FbGVtZW50VHJlZSBhcyBldHJlZQorCitkZWYgY2hpbGQgKGVsZW0sIG5hbWUpOgorICAgIGZvciBlIGluIGVsZW0uZ2V0Y2hpbGRyZW4oKToKKyAgICAgICAgaWYgZS50YWcgPT0gbmFtZToKKyAgICAgICAgICAgIHJldHVybiBlCisgICAgcmV0dXJuIE5vbmUKKworZGVmIGNoaWxkcmVuIChlbGVtLCBuYW1lPU5vbmUpOgorICAgIGwgPSBlbGVtLmdldGNoaWxkcmVuKCkKKyAgICBpZiBuYW1lOgorICAgICAgICBsID0gW2UgZm9yIGUgaW4gbCBpZiBlLnRhZyA9PSBuYW1lXQorICAgIHJldHVybiBsCisKK3htbCA9IGV0cmVlLnBhcnNlKHN5cy5hcmd2WzFdKQorCitmb3Igc2NoZW1hIGluIGNoaWxkKHhtbC5nZXRyb290KCksICJzY2hlbWFsaXN0IikuZ2V0Y2hpbGRyZW4oKToKKyAgICBlID0gY2hpbGQoc2NoZW1hLCAic2hvcnQiKQorICAgIGlmIGUgaXMgbm90IE5vbmU6CisgICAgICAgIHNjaGVtYS5yZW1vdmUoZSkKKworICAgIGUgPSBjaGlsZChzY2hlbWEsICJsb25nIikKKyAgICBpZiBlIGlzIG5vdCBOb25lOgorICAgICAgICBzY2hlbWEucmVtb3ZlKGUpCisKKyAgICBmb3IgbG9jYWxlIGluIGNoaWxkcmVuKHNjaGVtYSwgImxvY2FsZSIpOgorICAgICAgICAjIE9uZSBsb2NhbGUgbXVzdCBleGlzdCBzbyBsZWF2ZSBDIGxvY2FsZS4uLgorICAgICAgICBhID0gbG9jYWxlLmF0dHJpYi5nZXQoIm5hbWUiKQorICAgICAgICBpZiBhID09ICdDJzoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGUgPSBjaGlsZChsb2NhbGUsICJkZWZhdWx0IikKKyAgICAgICAgaWYgZSBpcyBOb25lOgorICAgICAgICAgICAgc2NoZW1hLnJlbW92ZShsb2NhbGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlID0gY2hpbGQobG9jYWxlLCAic2hvcnQiKQorICAgICAgICAgICAgaWYgZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBsb2NhbGUucmVtb3ZlKGUpCisgICAgICAgICAgICBlID0gY2hpbGQobG9jYWxlLCAibG9uZyIpCisgICAgICAgICAgICBpZiBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGxvY2FsZS5yZW1vdmUoZSkKKworeG1sLndyaXRlKHN5cy5zdGRvdXQsICJVVEYtOCIpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9vZXB5ZGV2c2hlbGwtaW50ZXJuYWwucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvb2VweWRldnNoZWxsLWludGVybmFsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY3YjJlNGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvb2VweWRldnNoZWxsLWludGVybmFsLnB5CkBAIC0wLDAgKzEsOTIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitpbXBvcnQgc2VsZWN0CitpbXBvcnQgZmNudGwKK2ltcG9ydCB0ZXJtaW9zCitpbXBvcnQgcmVhZGxpbmUKK2ltcG9ydCBzaWduYWwKKworZGVmIG5vbmJsb2NraW5nZmQoZmQpOgorICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZMLCBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGTCkgfCBvcy5PX05PTkJMT0NLKQorCitkZWYgZWNob25vY2JyZWFrKGZkKToKKyAgICBvbGQgPSB0ZXJtaW9zLnRjZ2V0YXR0cihmZCkKKyAgICBvbGRbM10gPSBvbGRbM10gfCB0ZXJtaW9zLkVDSE8gfCB0ZXJtaW9zLklDQU5PTgorICAgIHRlcm1pb3MudGNzZXRhdHRyKGZkLCB0ZXJtaW9zLlRDU0FEUkFJTiwgb2xkKQorCitkZWYgY2JyZWFrbm9lY2hvKGZkKToKKyAgICBvbGQgPSB0ZXJtaW9zLnRjZ2V0YXR0cihmZCkKKyAgICBvbGRbM10gPSBvbGRbM10gJn4gdGVybWlvcy5FQ0hPICZ+IHRlcm1pb3MuSUNBTk9OCisgICAgdGVybWlvcy50Y3NldGF0dHIoZmQsIHRlcm1pb3MuVENTQURSQUlOLCBvbGQpCisKK2lmIGxlbihzeXMuYXJndikgIT0gMzoKKyAgICBwcmludCgiSW5jb3JyZWN0IHBhcmFtZXRlcnMiKQorICAgIHN5cy5leGl0KDEpCisKK3B0eSA9IG9wZW4oc3lzLmFyZ3ZbMV0sICJ3K2IiLCAwKQorcGFyZW50ID0gaW50KHN5cy5hcmd2WzJdKQorCisjIERvbid0IGJ1ZmZlciBvdXRwdXQgYnkgbGluZSBlbmRpbmdzCitzeXMuc3Rkb3V0ID0gb3MuZmRvcGVuKHN5cy5zdGRvdXQuZmlsZW5vKCksICd3JywgMCkKK3N5cy5zdGRpbiA9IG9zLmZkb3BlbihzeXMuc3RkaW4uZmlsZW5vKCksICdyJywgMCkKK25vbmJsb2NraW5nZmQocHR5KQorbm9uYmxvY2tpbmdmZChzeXMuc3RkaW4pCisKKworaGlzdGZpbGUgPSBvcy5wYXRoLmV4cGFuZHVzZXIoIn4vLm9lZGV2cHlzaGVsbC1oaXN0b3J5IikKK3JlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKCJ0YWI6IGNvbXBsZXRlIikKK3RyeToKKyAgICByZWFkbGluZS5yZWFkX2hpc3RvcnlfZmlsZShoaXN0ZmlsZSkKK2V4Y2VwdCBJT0Vycm9yOgorICAgIHBhc3MgCisKK3RyeToKKworICAgIGkgPSAiIgorICAgIG8gPSAiIgorICAgICMgTmVlZCBjYnJlYWsvbm9lY2hvIHdoaWxzdCBpbiBzZWxlY3Qgc28gd2UgdHJpZ2dlciBvbiBhbnkga2V5cHJlc3MKKyAgICBjYnJlYWtub2VjaG8oc3lzLnN0ZGluLmZpbGVubygpKQorICAgICMgU2VuZCBvdXIgUElEIHRvIHRoZSBvdGhlciBlbmQgc28gdGhleSBjYW4ga2lsbCB1cy4KKyAgICBwdHkud3JpdGUoc3RyKG9zLmdldHBpZCgpKSArICJcbiIpCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd3JpdGVycyA9IFtdCisgICAgICAgICAgICBpZiBpOgorICAgICAgICAgICAgICAgIHdyaXRlcnMuYXBwZW5kKHN5cy5zdGRvdXQpCisgICAgICAgICAgICAocmVhZHksIF8sIF8pID0gc2VsZWN0LnNlbGVjdChbcHR5LCBzeXMuc3RkaW5dLCB3cml0ZXJzICwgW10sIDApCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgcHR5IGluIHJlYWR5OgorICAgICAgICAgICAgICAgICAgICBpID0gaSArIHB0eS5yZWFkKCkKKyAgICAgICAgICAgICAgICBpZiBpOgorICAgICAgICAgICAgICAgICAgICAjIFdyaXRlIGEgcGFnZSBhdCBhIHRpbWUgdG8gYXZvaWQgb3ZlcmZsb3dpbmcgb3V0cHV0IAorICAgICAgICAgICAgICAgICAgICAjIGQua2V5cygpIGlzIGEgZ29vZCB3YXkgdG8gZG8gdGhhdAorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKGlbOjQwOTZdKQorICAgICAgICAgICAgICAgICAgICBpID0gaVs0MDk2Ol0KKyAgICAgICAgICAgICAgICBpZiBzeXMuc3RkaW4gaW4gcmVhZHk6CisgICAgICAgICAgICAgICAgICAgIGVjaG9ub2NicmVhayhzeXMuc3RkaW4uZmlsZW5vKCkpCisgICAgICAgICAgICAgICAgICAgIG8gPSByYXdfaW5wdXQoKQorICAgICAgICAgICAgICAgICAgICBjYnJlYWtub2VjaG8oc3lzLnN0ZGluLmZpbGVubygpKQorICAgICAgICAgICAgICAgICAgICBwdHkud3JpdGUobyArICJcbiIpCisgICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSAxMToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IDU6CisgICAgICAgICAgICAgICAgICAgIHN5cy5leGl0KDApCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdCBFT0ZFcnJvcjoKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgwKQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBvcy5raWxsKHBhcmVudCwgc2lnbmFsLlNJR0lOVCkKKworZXhjZXB0IFN5c3RlbUV4aXQ6CisgICAgcGFzcworZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICBwcmludCgiRXhjZXB0aW9uIGluIG9lcHlkZWhzaGVsbC1pbnRlcm5hbDogIiArIHN0cihlKSkKKyAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKKyAgICB0aW1lLnNsZWVwKDUpCitmaW5hbGx5OgorICAgIHJlYWRsaW5lLndyaXRlX2hpc3RvcnlfZmlsZShoaXN0ZmlsZSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9vcGtnLXF1ZXJ5LWhlbHBlci5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9vcGtnLXF1ZXJ5LWhlbHBlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZmIxYTc4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL29wa2ctcXVlcnktaGVscGVyLnB5CkBAIC0wLDAgKzEsODUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIE9wZW5FbWJlZGRlZCBvcGtnIHF1ZXJ5IGhlbHBlciB1dGlsaXR5CisjCisjIFdyaXR0ZW4gYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorIworIyBDb3B5cmlnaHQgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMKKworCitpbXBvcnQgc3lzCitpbXBvcnQgZmlsZWlucHV0CitpbXBvcnQgcmUKKworYXJjaG1vZGUgPSBGYWxzZQorZmlsZW1vZGUgPSBGYWxzZQordmVybW9kZSA9IEZhbHNlCisKK2FyZ3MgPSBbXQorZm9yIGFyZyBpbiBzeXMuYXJndlsxOl06CisgICAgaWYgYXJnID09ICctYSc6CisgICAgICAgIGFyY2htb2RlID0gVHJ1ZQorICAgIGVsaWYgYXJnID09ICctZic6CisgICAgICAgIGZpbGVtb2RlID0gVHJ1ZQorICAgIGVsaWYgYXJnID09ICctdic6CisgICAgICAgIHZlcm1vZGUgPSBUcnVlCisgICAgZWxzZToKKyAgICAgICAgYXJncy5hcHBlbmQoYXJnKQorCisjIFJlZ2V4IGZvciByZW1vdmluZyB2ZXJzaW9uIHNwZWNzIGFmdGVyIGRlcGVuZGVuY3kgaXRlbXMKK3ZlcnJlZ2V4ID0gcmUuY29tcGlsZSgnIFwoWz08Pl0qIFteICldKlwpJykKKworcGtnID0gIiIKK3ZlciA9ICIiCitmb3IgbGluZSBpbiBmaWxlaW5wdXQuaW5wdXQoYXJncyk6CisgICAgbGluZSA9IGxpbmUucnN0cmlwKCkKKyAgICBpZiAnOiAnIGluIGxpbmU6CisgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiUGFja2FnZToiKToKKyAgICAgICAgICAgIHBrZyA9IGxpbmUuc3BsaXQoIjogIilbMV0KKyAgICAgICAgICAgIHZlciA9ICIiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBhcmNobW9kZToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIkFyY2hpdGVjdHVyZToiKToKKyAgICAgICAgICAgICAgICAgICAgYXJjaCA9IGxpbmUuc3BsaXQoIjogIilbMV0KKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIiVzICVzIiAlIChwa2csYXJjaCkpCisgICAgICAgICAgICBlbGlmIGZpbGVtb2RlOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiVmVyc2lvbjoiKToKKyAgICAgICAgICAgICAgICAgICAgdmVyID0gbGluZS5zcGxpdCgiOiAiKVsxXQorICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCJBcmNoaXRlY3R1cmU6Iik6CisgICAgICAgICAgICAgICAgICAgIGFyY2ggPSBsaW5lLnNwbGl0KCI6ICIpWzFdCisgICAgICAgICAgICAgICAgICAgIHByaW50KCIlcyAlc18lc18lcy5pcGsgJXMiICUgKHBrZyxwa2csdmVyLGFyY2gsYXJjaCkpCisgICAgICAgICAgICBlbGlmIHZlcm1vZGU6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJWZXJzaW9uOiIpOgorICAgICAgICAgICAgICAgICAgICB2ZXIgPSBsaW5lLnNwbGl0KCI6ICIpWzFdCisgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoIkFyY2hpdGVjdHVyZToiKToKKyAgICAgICAgICAgICAgICAgICAgYXJjaCA9IGxpbmUuc3BsaXQoIjogIilbMV0KKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIiVzICVzICVzIiAlIChwa2csYXJjaCx2ZXIpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIkRlcGVuZHM6Iik6CisgICAgICAgICAgICAgICAgICAgIGRlcHZhbCA9IGxpbmUuc3BsaXQoIjogIilbMV0KKyAgICAgICAgICAgICAgICAgICAgZGVwcyA9IGRlcHZhbC5zcGxpdCgiLCAiKQorICAgICAgICAgICAgICAgICAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICBkZXAgPSB2ZXJyZWdleC5zdWIoJycsIGRlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCIlc3wlcyIgJSAocGtnLGRlcCkpCisgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoIlJlY29tbWVuZHM6Iik6CisgICAgICAgICAgICAgICAgICAgIHJlY3ZhbCA9IGxpbmUuc3BsaXQoIjogIilbMV0KKyAgICAgICAgICAgICAgICAgICAgcmVjcyA9IHJlY3ZhbC5zcGxpdCgiLCAiKQorICAgICAgICAgICAgICAgICAgICBmb3IgcmVjIGluIHJlY3M6CisgICAgICAgICAgICAgICAgICAgICAgICByZWMgPSB2ZXJyZWdleC5zdWIoJycsIHJlYykKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCIlc3wlcyBbUkVDXSIgJSAocGtnLCByZWMpKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcG9zdGluc3QtaW50ZXJjZXB0cy9wb3N0aW5zdF9pbnRlcmNlcHQgYi95b2N0by1wb2t5L3NjcmlwdHMvcG9zdGluc3QtaW50ZXJjZXB0cy9wb3N0aW5zdF9pbnRlcmNlcHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjE4ZTgwNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3Bvc3RpbnN0X2ludGVyY2VwdApAQCAtMCwwICsxLDU2IEBACisjIS9iaW4vc2gKKyMKKyMgVGhpcyBzY3JpcHQgaXMgY2FsbGVkIGZyb20gaW5zaWRlIHBvc3RpbnN0YWxsIHNjcmlwdGxldHMgYXQgZG9fcm9vdGZzIHRpbWUuIEl0CisjIGFjdHVhbGx5IGFkZHMsIGF0IHRoZSBlbmQsIHRoZSBsaXN0IG9mIHBhY2thZ2VzIGZvciB3aGljaCB0aGUgaW50ZXJjZXB0IHNjcmlwdAorIyBpcyB2YWxpZC4gQWxzbywgaWYgb25lIHdhbnRzIHRvIHBhc3MgYW55IHZhcmlhYmxlcyB0byB0aGUgaW50ZXJjZXB0IHNjcmlwdCBmcm9tCisjIHRoZSBwb3N0aW5zdGFsbCBpdHNlbGYsIHRoZXkgd2lsbCBiZSBhZGRlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgc2hlYmFuZyBsaW5lLgorIworIyBVc2FnZTogcG9zdGluc3RfaW50ZXJjZXB0IDxpbnRlcmNlcHRfc2NyaXB0X25hbWU+IDxwYWNrYWdlX25hbWU+IDxtbHByZWZpeD0uLi4+IDx2YXIxPS4uLj4gLi4uIDx2YXJOPS4uLj4KKyMgICogaW50ZXJjZXB0X3NjcmlwdF9uYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGludGVyY2VwdCBzY3JpcHQgd2Ugd2FudCB0byBjaGFuZ2U7CisjICAqIHBhY2thZ2VfbmFtZSAtIGFkZCB0aGUgcGFja2FnZV9uYW1lIHRvIGxpc3Qgb2YgcGFja2FnZXMgdGhlIGludGVyY2VwdCBzY3JpcHQKKyMgICAgICAgICAgICAgICAgICAgaXMgdXNlZCBmb3I7CisjICAqIG1scHJlZml4PS4uLiAtIHRoaXMgb25lIGlzIG5lZWRlZCBpbiBvcmRlciB0byBoYXZlIHNlcGFyYXRlIGhvb2tzIGZvciBtdWx0aWxpYi4KKyMgICogdmFyMT0uLi4gLSB2YXIxIHdpbGwgaGF2ZSB0aGUgdmFsdWUgd2UgcHJvdmlkZSBpbiB0aGUgaW50ZXJjZXB0IHNjcmlwdC4gVGhpcworIyAgICAgICAgICAgICAgIGlzIHVzZWZ1bCB3aGVuIHdlIHdhbnQgdG8gcGFzcyBvbiB2YXJpYWJsZXMgbGlrZSAke2xpYmRpcn0gdG8KKyMgICAgICAgICAgICAgICB0aGUgaW50ZXJjZXB0IHNjcmlwdDsKKyMKK1sgJCMgLWx0IDMgXSAmJiBleGl0IDEKKworaW50ZXJjZXB0X3NjcmlwdD0kSU5URVJDRVBUX0RJUi8kMSAmJiBzaGlmdAorcGFja2FnZV9uYW1lPSQxICYmIHNoaWZ0CittbHByZWZpeD0kKGVjaG8gJDEgfHNlZCAtbmUgInMvXm1scHJlZml4PVwoLipcKS0vXDEvcCIpICYmIHNoaWZ0CisKKyMgaWYgdGhlIGhvb2sgd2Ugd2FudCB0byBpbnN0YWxsIGRvZXMgbm90IGV4aXN0LCB0aGVuIHRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4gZG8KK1sgLWYgIiRpbnRlcmNlcHRfc2NyaXB0IiBdIHx8IGV4aXQgMQorCisjIGlmIHRoZSBwb3N0aW5zdGFsbCB3YW50aW5nIHRvIGluc3RhbGwgdGhlIGhvb2sgYmVsb25ncyB0byBhIG11bHRpbGliIHBhY2thZ2UsCisjIHRoZW4gd2UnZCBiZXR0ZXIgaGF2ZSBhIHNlcGFyYXRlIGhvb2sgZm9yIHRoaXMgYmVjYXVzZSB0aGUgZGVmYXVsdCAke2xpYmRpcn0gYW5kCisjICR7YmFzZV9saWJkaXJ9IHdpbGwgcG9pbnQgdG8gdGhlIHdyb25nIGxvY2F0aW9ucworaWYgWyAtbiAiJG1scHJlZml4IiBdOyB0aGVuCisJbWxfaW50ZXJjZXB0X3NjcmlwdD0kaW50ZXJjZXB0X3NjcmlwdC0kbWxwcmVmaXgKKwkjIGlmIHRoZSBtdWx0aWxpYiBob29rIGRvZXMgbm90IGV4aXN0LCBjcmVhdGUgaXQgZnJvbSB0aGUgZGVmYXVsdCBvbmUKKwlpZiBbICEgLWYgIiRtbF9pbnRlcmNlcHRfc2NyaXB0IiBdOyB0aGVuCisJCWNwICRpbnRlcmNlcHRfc2NyaXB0ICRtbF9pbnRlcmNlcHRfc2NyaXB0CisKKwkJIyBjbGVhciB0aGUgIyNQS0dTOiBsaW5lIGFuZCB0aGUgYWxyZWFkeSBzZXQgdmFyaWFibGVzCisJCVsgLXggIiRtbF9pbnRlcmNlcHRfc2NyaXB0IiBdICYmIHNlZCAtaSAtZSAiMiwkKCgkIysxKSkgey8uKi9kfSIgLWUgIi9eIyNQS0dTOiAuKi9kIiAkbWxfaW50ZXJjZXB0X3NjcmlwdAorCWZpCisKKwlpbnRlcmNlcHRfc2NyaXB0PSRtbF9pbnRlcmNlcHRfc2NyaXB0CitmaQorCitjaG1vZCAreCAiJGludGVyY2VwdF9zY3JpcHQiCisKK3BrZ3NfbGluZT0kKGdyZXAgIiMjUEtHUzoiICRpbnRlcmNlcHRfc2NyaXB0KQoraWYgWyAtbiAiJHBrZ3NfbGluZSIgXTsgdGhlbgorCSMgbGluZSBleGlzdHMsIGFkZCB0aGlzIHBhY2thZ2UgdG8gdGhlIGxpc3Qgb25seSBpZiBpdCdzIG5vdCBhbHJlYWR5IHRoZXJlCisJaWYgWyAteiAiJChlY2hvICIkcGtnc19saW5lIiB8IGdyZXAgIiAkcGFja2FnZV9uYW1lICIpIiBdOyB0aGVuCisJCXNlZCAtaSAtZSAicy8jI1BLR1M6LiovXDAke3BhY2thZ2VfbmFtZX0gLyIgJGludGVyY2VwdF9zY3JpcHQKKwlmaQorZWxzZQorCWZvciB2YXIgaW4gIiRAIjsgZG8KKwkJc2VkIC1pIC1lICJcJV4jXCEvYmluLy4qc2glYSAkdmFyIiAkaW50ZXJjZXB0X3NjcmlwdAorCWRvbmUKKwllY2hvICIjI1BLR1M6ICR7cGFja2FnZV9uYW1lfSAiID4+ICRpbnRlcmNlcHRfc2NyaXB0CitmaQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcG9zdGluc3QtaW50ZXJjZXB0cy91cGRhdGVfZm9udF9jYWNoZSBiL3lvY3RvLXBva3kvc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3VwZGF0ZV9mb250X2NhY2hlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YzYwMTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcG9zdGluc3QtaW50ZXJjZXB0cy91cGRhdGVfZm9udF9jYWNoZQpAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9zaAorCitQU0VVRE9fVU5MT0FEPTEgcWVtdXdyYXBwZXIgLUwgJEQgLUUgTERfTElCUkFSWV9QQVRIPSRELyR7bGliZGlyfTokRC8ke2Jhc2VfbGliZGlyfVwKKwkJCQkJJEQke2JpbmRpcn0vZmMtY2FjaGUgLS1zeXNyb290PSRECitjaG93biAtUiByb290OnJvb3QgJEQke2ZvbnRjb25maWdjYWNoZWRpcn0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3VwZGF0ZV9pY29uX2NhY2hlIGIveW9jdG8tcG9reS9zY3JpcHRzL3Bvc3RpbnN0LWludGVyY2VwdHMvdXBkYXRlX2ljb25fY2FjaGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUxN2E2YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3VwZGF0ZV9pY29uX2NhY2hlCkBAIC0wLDAgKzEsMTIgQEAKKyMhL2Jpbi9zaAorCitzZXQgLWUKKyMgdXBkYXRlIG5hdGl2ZSBwaXhidWYgbG9hZGVycworZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzIC0tdXBkYXRlLWNhY2hlCisKK2ZvciBpY29uZGlyIGluICREL3Vzci9zaGFyZS9pY29ucy8qLyA7IGRvCisgICAgaWYgWyAtZCAkaWNvbmRpciBdIDsgdGhlbgorICAgICAgICBndGstdXBkYXRlLWljb24tY2FjaGUgLWZxdCAgJGljb25kaXIKKyAgICBmaQorZG9uZQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcG9zdGluc3QtaW50ZXJjZXB0cy91cGRhdGVfcGl4YnVmX2NhY2hlIGIveW9jdG8tcG9reS9zY3JpcHRzL3Bvc3RpbnN0LWludGVyY2VwdHMvdXBkYXRlX3BpeGJ1Zl9jYWNoZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWJmNGY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3Bvc3RpbnN0LWludGVyY2VwdHMvdXBkYXRlX3BpeGJ1Zl9jYWNoZQpAQCAtMCwwICsxLDExIEBACisjIS9iaW4vc2gKKworZXhwb3J0IEdES19QSVhCVUZfTU9EVUxFRElSPSREJHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLzIuMTAuMC9sb2FkZXJzCitleHBvcnQgR0RLX1BJWEJVRl9GQVRBTF9MT0FERVI9MQorCitQU0VVRE9fVU5MT0FEPTEgcWVtdXdyYXBwZXIgLUwgJEQgLUUgTERfTElCUkFSWV9QQVRIPSRELyR7bGliZGlyfTokRC8ke2Jhc2VfbGliZGlyfVwKKyAgICAkRCR7YmluZGlyfS9nZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMgXAorICAgID4kR0RLX1BJWEJVRl9NT0RVTEVESVIvLi4vbG9hZGVycy5jYWNoZSAmJiBcCisgICAgc2VkIC1pIC1lICJzOiREOjpnIiAkR0RLX1BJWEJVRl9NT0RVTEVESVIvLi4vbG9hZGVycy5jYWNoZQorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9BVVRIT1JTIGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL0FVVEhPUlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcyYjdlOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9BVVRIT1JTCkBAIC0wLDAgKzEsMTEgQEAKK01pY2hhZWwgTWVla3MgPG1pY2hhZWwubWVla3NAbm92ZWxsLmNvbT4KK0FuZGVycyBOb3JnYWFyZCA8YW5kZXJzLm5vcmdhYXJkQGdtYWlsLmNvbT4KK1Njb3R0IEphbWVzIFJlbW5hbnQgPHNjb3R0QHVidW50dS5jb20+CitIZW5uaW5nIE5pc3MgPGhlbm5pbmduaXNzQGdtYWlsLmNvbT4KK1JpY2NhcmRvIE1hZ2xpb2NjaGV0dGkgPHJpY2NhcmRvLm1hZ2xpb2NjaGV0dGlAZ21haWwuY29tPgorCitDb250cmlidXRvcnM6CisJQnJpYW4gRXdpbnMKKworQmFzZWQgb24gd29yayBieToKKwlaaWdhIE1haGtvdmVjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvQ09QWUlORyBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkODdhY2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvQ09QWUlORwpAQCAtMCwwICsxLDM0MCBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EgCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorDAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorDAorVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisMCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisMCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworDAorCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxIFVTQQorCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyICBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL01BSU5UQUlORVJTIGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL01BSU5UQUlORVJTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NWUxMzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvTUFJTlRBSU5FUlMKQEAgLTAsMCArMSwzIEBACitSaWNjYXJkbyBNYWdsaW9jY2hldHRpIDxyaWNjYXJkby5tYWdsaW9jY2hldHRpQGdtYWlsLmNvbT4KK01pY2hhZWwgTWVla3MgPG1pY2hhZWwubWVla3NAbm92ZWxsLmNvbT4KK0hhcmFsZCBIb3llciA8aGFyYWxkQHJlZGhhdC5jb20+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvTkVXUyBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9ORVdTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNWIyZmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvTkVXUwpAQCAtMCwwICsxLDIwNCBAQAorYm9vdGNoYXJ0MiAwLjE0LjU6CisJKyBweWJvb3RjaGFydGd1aSAoUmljY2FyZG8pCisJCSsgRml4IHRlc3RzIHdpdGggcHl0aG9uMworCQkrIEZpeCBwYXJzaW5nIG9mIGZpbGVzIHdpdGggbm9uLWFzY2lpIGJ5dGVzCisJCSsgUm9idXN0bmVzcyBmaXhlcyB0byB0YXNrc3RhdHMgYW5kIG1lbWluZm8gcGFyc2luZworCQkrIE1vcmUgcHl0aG9uMyBmaXhlcworCitib290Y2hhcnQyIDAuMTQuNDoKKwkrIGJvb3RjaGFydGQKKwkJKyBBZGQgcmVsZXZhbnQgRVhJVF9QUk9DIGZvciBHTk9NRTMsIFhGQ0U0LCBvcGVuYm94CisJCSAgKEp1c3RpbiBMZWNoZXIsIEJlbiBFaWxscykKKwkrIHB5Ym9vdGNoYXJ0Z3VpIChSaWNjYXJkbykKKwkJKyBGaXggc29tZSBpc3N1ZXMgaW4gLS1jcm9wLWFmdGVyIGFuZCAtLWFubm90YXRlCisJCSsgRml4IHB5Ym9vdGNoYXJ0Z3VpIHByb2Nlc3NfdHJlZSB0ZXN0cworCQkrIE1vcmUgcHl0aG9uMyBmaXhlcworCitib290Y2hhcnQyIDAuMTQuMjoKKwkrIHB5Ym9vdGNoYXJ0Z3VpCisJCSsgRml4IHNvbWUgY3Jhc2hlcyBpbiBwYXJzaW5nLnB5IChKYWt1YiBDemFwbGlja2ksIFJpY2NhcmRvKQorCQkrIHNwZWVkdXAgYSBiaXQgbWVtaW5mbyBwYXJzaW5nIChSaWNjYXJkbykKKwkJKyBGaXggaW5kZW50YXRpb24gZm9yIHB5dGhvbjMuMiAoUmljY2FyZG8pCisKK2Jvb3RjaGFydDIgMC4xNC4xOgorCSsgYm9vdGNoYXJ0ZAorCQkrIEV4cGVjdCBkbWVzZyBvbmx5IGlmIHN0YXJ0ZWQgYXMgaW5pdCAoSGVucnkgWWVpKQorCQkrIGxvb2sgZm9yIGJvb3RjaGFydF9pbml0IGluIHRoZSBlbnZpcm9ubWVudCAoSGVucnkgR2ViaGFyZHQpCisJKyBweWJvb3RjaGFydGd1aQorCQkrIEZpeHVwIHNvbWUgdGVzdHMgKFJpY2NhcmRvKQorCQkrIFN1cHBvcnQgaHAgc21hcnQgYXJyYXlzIGJsb2NrIGRldmljZXMgKEFuZGVycyBOb3JnYWFyZCwKKwkJICBCcmlhbiBNdXJyYXkpCisJCSsgRml4ZXMgZm9yIC10LCAtbyBhbmQgLWYgb3B0aW9ucyAoTWxhZGVuIEt1bnRuZXIsIEhhcmFsZCwgUmljY2FyZG8pCisKK2Jvb3RjaGFydDIgMC4xNC4wOgorCSsgYm9vdGNoYXJ0ZAorCQkrIEFkZCBhYmlsaXR5IHRvIGRlZmluZSBjdXN0b20gY29tbWFuZHMKKwkJICAoTHVjaWFuIE11cmVzYW4sIFBldGVyIEhqYWxtYXJzc29uKQorCSsgY29sbGVjdG9yCisJCSsgZml4IHRtcGZzIG1vdW50IGxlYWthZ2UgKFBldGVyIEhqYWxtYXJzc29uKQorCSsgcHlib290Y2hhcnRndWkKKwkJKyByZW5kZXIgY3VtdWxhdGl2ZSBJL08gdGltZSBjaGFydCAoU2Fua2FyIFApCisJCSsgcHl0aG9uMyBjb21wYXRpYmlsaXR5IGZpeGVzIChSaWNjYXJkbykKKwkrIE1pc2MgKE1pY2hhZWwpCisJCSsgcmVtb3ZlIGNvbmZ1c2luZywgb2Jzb2xldGUgc2V0dXAucHkKKwkJKyBpbnN0YWxsIGRvY3MgdG8gL3Vzci9zaGFyZS8KKwkJKyBsb3Qgb2YgZml4ZXMgZm9yIGVhc2llciBwYWNrYWdpbmcgKFBldGVyIEhqYWxtYXJzc29uKQorCQkrIGFkZCBib290Y2hhcnQyLCBib290Y2hhcnRkIGFuZCBweWJvb3RjaGFydGd1aSBtYW5wYWdlcworCQkgIChGcmFuY2VzY2EgQ2ljZXJpLCBEYXZpZCBQYWxlaW5vKQorCitib290Y2hhcnQyIDAuMTIuNjoKKwkrIGJvb3RjaGFydGQKKwkJKyBiZXR0ZXIgY2hlY2sgZm9yIGluaXRyZCAoUmljY2FyZG8gTWFnbGlvY2NoZXR0aSkKKwkJKyBjb2RlIGNsZWFudXAgKFJpY2NhcmRvKQorCQkrIG1ha2UgdGhlIGxpc3Qgb2YgcHJvY2Vzc2VzIHdlIGFyZSB3YWl0aW5nIGZvciBlZGl0YWJsZQorCQkgIGluIGNvbmZpZyBmaWxlIGJ5IEVYSVRfUFJPQyAoUmljY2FyZG8pCisJCSsgZml4IHBhcnNpbmcgb2YgY21kbGluZSBmb3IgYWx0ZXJuYXRpdmUgaW5pdCBzeXN0ZW0gKFJpY2NhcmRvKQorCQkrIGZpeGVkIGNhbGxpbmcgaW5pdCBpbiBpbml0cmFtZnMgKEhhcmFsZCkKKwkJKyBleGl0IDAgZm9yIHN0YXJ0LCBpZiB0aGUgY29sbGVjdG9yIGlzIGFscmVhZHkgcnVubmluZyAoSGFyYWxkKQorCSsgY29sbGVjdG9yCisJCSsgdHJ5IGhhcmRlciB3aXRoIHRhc2tzdGF0cyAoTWljaGFlbCkKKwkJKyBwbHVnIHNvbWUgc21hbGwgbGVha3MgKFJpY2NhcmRvKQorCQkrIGZpeCBtaXNzaW5nIFBST0NfRVZFTlRTIGRldGVjdGlvbiAoSGFyYWxkKQorCSsgcHlib290Y2hhcnRndWkgKE1pY2hhZWwpCisJCSsgYWRkIGtlcm5lbCBib290Y2hhcnQgdGFiIHRvIGludGVyYWN0aXZlIGd1aQorCQkrIHJlcG9ydCBib290Y2hhcnQgdmVyc2lvbiBpbiBjbGkgaW50ZXJmYWNlCisJCSsgaW1wcm92ZSByZW5kZXJpbmcgcGVyZm9ybWFuY2UKKwkJKyBHVUkgaW1wcm92ZW1lbnRzCisJCSsgbG90IG9mIGNsZWFudXBzCisJKyBNYWtlZmlsZQorCQkrIGRvIG5vdCBweXRob24gY29tcGlsZSBpZiBOT19QWVRIT05fQ09NUElMRSBpcyBzZXQgKEhhcmFsZCkKKwkrIHN5c3RlbWQgc2VydmljZSBmaWxlcworCQkrIGFkZGVkIHRoZW0gYW5kIGluc3RhbGwgKEhhcmFsZCwgV3VsZiBDLiBLcnVlZ2VyKQorCitib290Y2hhcnQyIDAuMTIuNToKKwkrIGFkbWluaXN0cmF0aXZlIHNuYWZ1IHZlcnNpb247IHB1bGwgYmVmb3JlIHB1c2hpbmcuLi4KKworYm9vdGNoYXJ0MiAwLjEyLjQ6CisJKyBib290Y2hhcnRkCisJCSsgcmVkdWNlIG92ZXJoZWFkIGNhdXNlZCBieSBwaWRvZiAoUmljY2FyZG8gTWFnbGlvY2NoZXR0aSkKKwkrIGNvbGxlY3RvcgorCQkrIGF0dGVtcHQgdG8gcmV0cnkgcHRyYWNlIHRvIGF2b2lkIGJvZ3VzIEVOT1NZUyAoTWljaGFlbCkKKwkJKyBhZGQgbWVtaW5mbyBwb2xsaW5nIChEYXZlIE1hcnRpbikKKwkrIHB5Ym9vdGNoYXJ0Z3VpCisJCSsgaGFuZGxlIGRtZXNnIHRpbWVzdGFtcHMgd2l0aCBiaWcgZGVsdGEgKFJpY2NhcmRvKQorCQkrIGF2b2lkIGRpdmlkZSBieSB6ZXJvIHdoZW4gcmVuZGVyaW5nIEkvTyB1dGlsaXphdGlvbiAoUmljY2FyZG8pCisJCSsgYWRkIHByb2Nlc3MgZ3JvdXBpbmcgaW4gdGhlIGN1bXVsYXRpdmUgY2hhcnQgKFJpY2NhcmRvKQorCQkrIGZpeCBjcHUgdGltZSBjYWxjdWxhdGlvbiBpbiBjdW11bGF0aXZlIGNoYXJ0IChSaWNjYXJkbykKKwkJKyBnZXQgaS9vIHN0YXRpc3RpY3MgZm9yIGZsYXNoIGJhc2VkIGRldmljZXMgKFJpY2NhcmRvKQorCQkrIHByZXR0aWVyIGNvbG9yaW5nIGZvciB0aGUgY3VtdWxhdGl2ZSBncmFwaHMgKE1pY2hhZWwpCisJCSsgZml4IGludGVyYWN0aXZlIENQVSByZW5kZXJpbmcgKE1pY2hhZWwpCisJCSsgcmVuZGVyIG1lbW9yeSB1c2FnZSBncmFwaCAoRGF2ZSBNYXJ0aW4pCisKK2Jvb3RjaGFydDIgMC4xMi4zCisJKyBjb2xsZWN0b3IKKwkJKyBwY2xvc2UgYWZ0ZXIgcG9wZW4gKFJpY2NhcmRvIE1hZ2xpb2NjaGV0dGkgKHhybXgpKQorCQkrIGZpeCBidWZmZXIgb3ZlcmZsb3cgKHhybXgpCisJCSsgY291bnQgJ3Byb2Nlc3NvcjonIGluIC9wcm9jL2NwdWluZm8gZm9yIEFSTSAoTWljaGFlbCkKKwkJKyBnZXQgbW9kZWwgbmFtZSBmcm9tIHRoYXQgbGluZSB0b28gZm9yIEFSTSAoeHJteCkKKwkJKyBzdG9yZSAvcHJvYy9jcHVpbmZvIGluIHRoZSBib290LWNoYXJ0IGFyY2hpdmUgKHhybXgpCisJCSsgdHJ5IGhhcmRlciB0byBkZXRlY3QgbWlzc2luZyBUQVNLU1RBVFMgKE1pY2hhZWwpCisJCSsgc2FuaXR5LWNoZWNrIGludmFsaWQgZG9tYWluIG5hbWVzIChNaWNoYWVsKQorCQkrIGRldGVjdCBtaXNzaW5nIFBST0NfRVZFTlRTIG1vcmUgcmVsaWFibHkgKE1pY2hhZWwpCisJCSsgUkVBRE1FIGZpeGVzICh4cm14LCBNaWNoYWVsKQorCSsgcHlib290Y2hhcnRndWkKKwkJKyBtYWtlIG51bV9jcHUgcGFyc2luZyByb2J1c3QgKE1pY2hhZWwpCisKK2Jvb3RjaGFydDIgMC4xMi4yCisgCSsgZml4IHB0aHJlYWQgY29tcGlsZSAvIGxpbmtpbmcgYnVnCisKK2Jvb3RjaGFydDIgMC4xMi4xCisJKyBweWJvb3RjaGFydGd1aQorCQkrIHB5bGludCBjbGVhbnVwCisJCSsgaGFuZGxlIGVtcHR5IHRyYWNlcyBtb3JlIGVsZWdhbnRseQorCQkrIGFkZCAnLXQnIC8gJy0tYm9vdC10aW1lJyBhcmd1bWVudCAoTWF0dGhldyBCYXVlcikKKwkrIGNvbGxlY3RvcgorCQkrIG5vdyBHUEx2MgorCQkrIGFkZCByZGluaXQgc3VwcG9ydCBmb3IgdmVyeSBlYXJseSBpbml0cmQgdHJhY2luZworCQkrIGNsZWFudXAgLyByZS1mYWN0b3IgY29kZSBpbnRvIHNlcGFyYXRlIG1vZHVsZXMKKwkJKyByZS1mYWN0b3IgYXJnIHBhcnNpbmcsIGFuZCBwYXJzZSByZW1vdGUgcHJvY2VzcyBhcmdzCisJCSsgaGFuZGxlIG1pc3NpbmcgYm9vdGNoYXJ0ZC5jb25mIGNsZWFubHkKKwkJKyBtb3ZlIG11Y2ggb2YgYm9vdGNoYXJ0ZCBmcm9tIHNoZWxsIC0+IEMKKwkJCSsgZHJvcCBkbWVzZyBhbmQgdW5hbWUgdXNhZ2UKKwkJCSsgYXZvaWQgcnBtL2Rwa2cgd2l0aCBuYXRpdmUgdmVyc2lvbiByZXBvcnRpbmcKKworYm9vdGNoYXJ0MiAwLjEyLjAgKE1pY2hhZWwgTWVla3MpCisJKyBjb2xsZWN0b3IKKwkJKyB1c2UgbmV0bGluayBQUk9DX0VWRU5UUyB0byBnZW5lcmF0ZSBwYXJlbnRhZ2UgZGF0YQorCQkJKyBmaW5hbGx5IGtpbGxzIGFueSBuZWVkIGZvciAnYWNjdCcgZXQuIGFsLgorCQkJKyBhbHNvIHJlbW92ZXMgbmVlZCB0byBwb2xsIC9wcm9jID0+IGZhc3RlcgorCQkrIGNsZWFudXAgY29kZSB0byBLJlIsIDggc3RvcCB0YWJzLgorCSsgcHlib290Y2hhcnRndWkKKwkJKyBjb25zdW1lIHRocmVhZCBwYXJlbnRhZ2UgZGF0YQorCitib290Y2hhcnQyIDAuMTEuNCAoTWljaGFlbCBNZWVrcykKKwkrIGNvbGxlY3RvcgorCQkrIGlmIHJ1biBpbnNpZGUgYW4gaW5pdHJkIGRldGVjdCB3aGVuIC9kZXYgaXMgd3JpdGFibGUKKwkJICBhbmQgcmVtb3VudCBvdXJzZWx2ZXMgaW50byB0aGF0LgorCQkrIG92ZXJmbG93IGJ1ZmZlcnMgbW9yZSBlbGVnYW50bHkgaW4gZXh0cmVtaXMKKwkJKyBkdW1wIGZ1bGwgcHJvY2VzcyBwYXRoIGFuZCBjb21tYW5kLWxpbmUgYXJncworCQkrIGNhbG0gZG93biBkZWJ1Z2dpbmcgb3V0cHV0CisJKyBweWJvb3RjaGFydGd1aQorCQkrIGNhbiByZW5kZXIgbG9ncyBpbiBhIGRpcmVjdG9yeSBhZ2FpbgorCQkrIGhhcyBhICdzaG93IG1vcmUnIG9wdGlvbiB0byBzaG93IGNvbW1hbmQtbGluZXMKKworYm9vdGNoYXJ0MiAwLjExLjMgKE1pY2hhZWwgTWVla3MpCisJKyBhZGQgJCQgZGlzcGxheSB0byB0aGUgYm9vdGNoYXJ0IGhlYWRlcgorCSsgcHJvY2VzcyBjb21tYW5kLWxpbmUgYml0cworCQkrIGZpeCBjb2xsZWN0aW9uIGNvZGUsIGFuZCByZW5hbWUgc3RyZWFtIHRvIG1hdGNoCisJCSsgZW5hYmxlIHBhcnNpbmcsIGFkZCBjaGVjayBidXR0b24gdG8gVUksIGFuZCAtLXNob3ctYWxsCisJCSAgY29tbWFuZC1saW5lIG9wdGlvbgorCSsgZml4IHBhcnNpbmcgb2YgZGlyZWN0b3JpZXMgZnVsbCBvZiBmaWxlcy4KKworYm9vdGNoYXJ0MiAwLjExLjIgKE1pY2hhZWwgTWVla3MpCisJKyBmaXggaW5pdHJkIHNhbml0eSBjaGVjayB0byB1c2UgdGhlIHJpZ2h0IHByb2MgcGF0aAorCSsgZG9uJ3QgcmV0dXJuIGEgYm9ndXMgZXJyb3IgdmFsdWUgd2hlbiBkdW1waW5nIHN0YXRlCisJKyBhZGQgLWMgdG8gYWlkIG1hbnVhbCBjb25zb2xlIGRlYnVnZ2luZworCitib290Y2hhcnQyIDAuMTEuMSAoTWljaGFlbCBNZWVrcykKKwkrIGV2ZW4gc2ltcGxlciBpbml0cmQgc2V0dXAKKwkJKyBjcmVhdGUgYSBzaW5nbGUgZGlyZWN0b3J5OiAvbGliL2Jvb3RjaGFydC90bXBmcworCitib290Y2hhcnQyIDAuMTEgKE1pY2hhZWwgTWVla3MpCisJKyBib290Y2hhcnRkCisJCSsgZmFyLCBmYXIgc2ltcGxlciwgbGVzcyBzaGVsbCwgbW9yZSByb2J1c3RuZXNzIGV0Yy4KKwkrIGJvb3RjaGFydC1jb2xsZWN0b3IKKwkJKyByZW1vdmUgdGhlIC1wIGFyZ3VtZW50IC0gd2UgYWx3YXlzIG1vdW50IHByb2MKKwkJKyByZXF1aXJlcyAvbGliL2Jvb3RjaGFydCAobWFrZSBpbnN0YWxsLWNocm9vdCkgdG8KKwkJICBiZSBwcmVzZW50IChhbHNvIGluIHRoZSBpbml0cmQpIFsgd2l0aCBhIGttc2cKKwkJICBub2RlIGluY2x1ZGVkIF0KKwkJKyBhZGQgYSAtLXByb2JlLXJ1bm5pbmcgbW9kZQorCSsgcHRyYWNlIHJlLXdyaXRlCisJCSsgZ2l2ZXMgLW11Y2gtIGJldHRlciBlYXJseS1ib290LXRpbWUgcmVzb2x1dGlvbgorCQkrIHVuY29uZGl0aW9uYWwgY2hyb290IC9saWIvYm9vdGNoYXJ0L2Nocm9vdAorCQkJKyB3ZSBtb3VudCBwcm9jIHRoZXJlIG91cnNlbHZlcworCQkrIGxvZyBleHRyYWN0aW9uIHJlcXVpcmVzIG5vIGNvbW1vbiBmaWxlLXN5c3RlbSB2aWV3CisKKworYm9vdGNoYXJ0MiAwLjEwLjEgKEtlbCBNb2RkZXJtYW4pCisJKyBjb2xsZWN0b3IgYXJnIC1tIHNob3VsZCBtb3VudCAvcHJvYworCSsgcmVtb3ZlIGJvZ3VzIHZjc2lkIGNvZGUKKwkrIHNwbGl0IGNvbGxlY3RvciBpbnN0YWxsIGluIE1ha2VmaWxlCisJKyByZW1vdmUgYm9ndXMgZGVidWcgY29kZQorCSsgYWNjZXB0IHByb2Nlc3MgbmFtZXMgY29udGFpbmluZyBzcGFjZXMKKworYm9vdGNoYXJ0MiAwLjEwLjAKKwkrIHJlbmRlcmluZyAoQW5kZXJzIE5vcmdhYXJkKQorCQkrIGZpeCBmb3IgdW5rbm93biBleGNlcHRpb25zCisJKyBpbnRlcmFjdGl2ZSBVSSAoTWljaGFlbCkKKwkJKyBtdWNoIGZhc3RlciByZW5kZXJpbmcgYnkgbWFudWFsIGNsaXBwaW5nCisJCSsgaG9yaXpvbnRhbCBzY2FsaW5nCisJCSsgcmVtb3ZlIGFubm95aW5nIHBhZ2UtdXAvZG93biBiaW5kaW5ncworCSsgaW5pdHJkIHBvcnRhYmlsaXR5ICYgZml4ZXMgKEZlZGVyaWMgQ3JvemF0KQorCQkrIHBvcnQgdG8gTWFuZHJpdmEKKwkJKyBpbXByb3ZlZCBwcm9jZXNzIHdhaXRpbmcKKwkJKyBpbml0dGFiIGNvbW1lbnRpbmcgZml4CisJCSsgaW1wcm92ZWQgaW5pdHJkIGRldGVjdGlvbiAvIGphaWwgdGFnZ2luZworCQkrIGZpeCBmb3IgdW4tZGV0ZWN0YWJsZSBhY2N0b24gYmVoYXZpb3VyIGNoYW5nZQorCQkrIGltcGxlbWVudCBhIGJ1aWx0LWluIHVzbGVlcCB0byBoZWxwIGluaXRyZCBkZXBzIChNaWNoYWVsKQorCitib290Y2hhcnQyIDAuMC45CisJKyBmaXggaW5pdHJkIGJ1ZworCitib290Y2hhcnQyIDAuMC44CisJKyBhZGQgYSBmaWxlbmFtZSBzdHJpbmcgdG8gdGhlIHdpbmRvdyB0aXRsZSBpbiBpbnRlcmFjdGl2ZSBtb2RlCisJKyBhZGQgYSBORVdTIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9SRUFETUUucHlib290Y2hhcnQgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvUkVBRE1FLnB5Ym9vdGNoYXJ0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NDJlNjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvUkVBRE1FLnB5Ym9vdGNoYXJ0CkBAIC0wLDAgKzEsMzcgQEAKKwkJCSAgICBQWUJPT1RDSEFSVEdVSQorCQkJICAgLS0tLS0tLS0tLS0tLS0tLQorCitweWJvb3RjaGFydGd1aSBpcyBhIHRvb2wgKG5vdyBpbmNsdWRlZCBhcyBwYXJ0IG9mIGJvb3RjaGFydDIpIGZvcgordmlzdWFsaXphdGlvbiBhbmQgYW5hbHlzaXMgb2YgdGhlIEdOVS9MaW51eCBib290IHByb2Nlc3MuIEl0IHJlbmRlcnMKK3RoZSBvdXRwdXQgb2YgdGhlIGJvb3QtbG9nZ2VyIHRvb2wgYm9vdGNoYXJ0IChzZWUKK2h0dHA6Ly93d3cuYm9vdGNoYXJ0Lm9yZy8pIHRvIGVpdGhlciB0aGUgc2NyZWVuIG9yIGZpbGVzIG9mIHZhcmlvdXMKK2Zvcm1hdHMuIEJvb3RjaGFydCBjb2xsZWN0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvY2Vzc2VzLCB0aGVpcgorZGVwZW5kZW5jaWVzLCBhbmQgcmVzb3VyY2UgY29uc3VtcHRpb24gZHVyaW5nIGJvb3Qgb2YgYSBHTlUvTGludXgKK3N5c3RlbS4gVGhlIHB5Ym9vdGNoYXJ0Z3VpIHRvb2xzIHZpc3VhbGl6ZXMgdGhlIHByb2Nlc3MgdHJlZSBhbmQKK292ZXJhbGwgcmVzb3VyY2UgdXRpbGl6YXRpb24uCisKK3B5Ym9vdGNoYXJ0Z3VpIGlzIGEgcG9ydCBvZiB0aGUgdmlzdWFsaXphdGlvbiBwYXJ0IG9mIGJvb3RjaGFydCBmcm9tCitKYXZhIHRvIFB5dGhvbiBhbmQgQ2Fpcm8uCisKK0FkYXB0ZWQgZnJvbSB0aGUgYm9vdGNoYXJ0LWRvY3VtZW50YXRpb246CisKKyAgVGhlIENQVSBhbmQgZGlzayBzdGF0aXN0aWNzIGFyZSB1c2VkIHRvIHJlbmRlciBzdGFja2VkIGFyZWEgYW5kIGxpbmUKKyAgY2hhcnRzLiBUaGUgcHJvY2VzcyBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvIGNyZWF0ZSBhIEdhbnR0IGNoYXJ0CisgIHNob3dpbmcgcHJvY2VzcyBkZXBlbmRlbmN5LCBzdGF0ZXMgYW5kIENQVSB1c2FnZS4KKworICBBIHR5cGljYWwgYm9vdCBzZXF1ZW5jZSBjb25zaXN0cyBvZiBzZXZlcmFsIGh1bmRyZWQgcHJvY2Vzc2VzLiBTaW5jZQorICBpdCBpcyBkaWZmaWN1bHQgdG8gdmlzdWFsaXplIHN1Y2ggYW1vdW50IG9mIGRhdGEgaW4gYSBjb21wcmVoZW5zaWJsZQorICB3YXksIHRyZWUgcHJ1bmluZyBpcyB1dGlsaXplZC4gSWRsZSBiYWNrZ3JvdW5kIHByb2Nlc3NlcyBhbmQKKyAgc2hvcnQtbGl2ZWQgcHJvY2Vzc2VzIGFyZSByZW1vdmVkLiBTaW1pbGFyIHByb2Nlc3NlcyBydW5uaW5nIGluCisgIHBhcmFsbGVsIGFyZSBhbHNvIG1lcmdlZCB0b2dldGhlci4KKworICBGaW5hbGx5LCB0aGUgcGVyZm9ybWFuY2UgYW5kIGRlcGVuZGVuY3kgY2hhcnRzIGFyZSByZW5kZXJlZCBhcyBhCisgIHNpbmdsZSBpbWFnZSB0byBlaXRoZXIgdGhlIHNjcmVlbiBvciBpbiBQTkcsIFBERiBvciBTVkcgZm9ybWF0LgorCisKK1RvIGdldCBoZWxwIGZvciBweWJvb3RjaGFydGd1aSwgcnVuCisKKyQgcHlib290Y2hhcnRndWkgLS1oZWxwCisKK1RoaXMgY29kZSB3YXMgb3JpZ2luYWxseSBob3N0ZWQgYXQ6CisJaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3B5Ym9vdGNoYXJ0Z3VpLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdjZTFhNWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkucHkKQEAgLTAsMCArMSwyMyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBUaGlzIGZpbGUgaXMgcGFydCBvZiBweWJvb3RjaGFydGd1aS4KKworIyAgcHlib290Y2hhcnRndWkgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjICBweWJvb3RjaGFydGd1aSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICBhbG9uZyB3aXRoIHB5Ym9vdGNoYXJ0Z3VpLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKworaW1wb3J0IHN5cworZnJvbSBweWJvb3RjaGFydGd1aS5tYWluIGltcG9ydCBtYWluCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisJc3lzLmV4aXQobWFpbigpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9iYXRjaC5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9iYXRjaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWM3MTRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL2JhdGNoLnB5CkBAIC0wLDAgKzEsNDYgQEAKKyMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5Ym9vdGNoYXJ0Z3VpLgorCisjICBweWJvb3RjaGFydGd1aSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgIHB5Ym9vdGNoYXJ0Z3VpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgIGFsb25nIHdpdGggcHlib290Y2hhcnRndWkuIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworaW1wb3J0IGNhaXJvCitmcm9tIC4gaW1wb3J0IGRyYXcKK2Zyb20gLmRyYXcgaW1wb3J0IFJlbmRlck9wdGlvbnMKKworZGVmIHJlbmRlcih3cml0ZXIsIHRyYWNlLCBhcHBfb3B0aW9ucywgZmlsZW5hbWUpOgorICAgIGhhbmRsZXJzID0geworICAgICAgICAicG5nIjogKGxhbWJkYSB3LCBoOiBjYWlyby5JbWFnZVN1cmZhY2UoY2Fpcm8uRk9STUFUX0FSR0IzMiwgdywgaCksIFwKKyAgICAgICAgICAgICAgICBsYW1iZGEgc2ZjOiBzZmMud3JpdGVfdG9fcG5nKGZpbGVuYW1lKSksCisgICAgICAgICJwZGYiOiAobGFtYmRhIHcsIGg6IGNhaXJvLlBERlN1cmZhY2UoZmlsZW5hbWUsIHcsIGgpLCBsYW1iZGEgc2ZjOiAwKSwKKyAgICAgICAgInN2ZyI6IChsYW1iZGEgdywgaDogY2Fpcm8uU1ZHU3VyZmFjZShmaWxlbmFtZSwgdywgaCksIGxhbWJkYSBzZmM6IDApCisgICAgfQorCisgICAgaWYgYXBwX29wdGlvbnMuZm9ybWF0IGlzIE5vbmU6CisgICAgICAgIGZtdCA9IGZpbGVuYW1lLnJzcGxpdCgnLicsIDEpWzFdCisgICAgZWxzZToKKyAgICAgICAgZm10ID0gYXBwX29wdGlvbnMuZm9ybWF0CisKKyAgICBpZiBub3QgKGZtdCBpbiBoYW5kbGVycyk6CisgICAgICAgIHdyaXRlci5lcnJvciAoIlVua25vd24gZm9ybWF0ICclcycuIiAlIGZtdCkKKyAgICAgICAgcmV0dXJuIDEwCisKKyAgICBtYWtlX3N1cmZhY2UsIHdyaXRlX3N1cmZhY2UgPSBoYW5kbGVyc1tmbXRdCisgICAgb3B0aW9ucyA9IFJlbmRlck9wdGlvbnMgKGFwcF9vcHRpb25zKQorICAgICh3LCBoKSA9IGRyYXcuZXh0ZW50cyAob3B0aW9ucywgMS4wLCB0cmFjZSkKKyAgICB3ID0gbWF4ICh3LCBkcmF3Lk1JTl9JTUdfVykKKyAgICBzdXJmYWNlID0gbWFrZV9zdXJmYWNlICh3LCBoKQorICAgIGN0eCA9IGNhaXJvLkNvbnRleHQgKHN1cmZhY2UpCisgICAgZHJhdy5yZW5kZXIgKGN0eCwgb3B0aW9ucywgMS4wLCB0cmFjZSkKKyAgICB3cml0ZV9zdXJmYWNlIChzdXJmYWNlKQorICAgIHdyaXRlci5zdGF0dXMgKCJib290Y2hhcnQgd3JpdHRlbiB0byAnJXMnIiAlIGZpbGVuYW1lKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvZHJhdy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9kcmF3LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNTc0YmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvZHJhdy5weQpAQCAtMCwwICsxLDg5NCBAQAorIyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlib290Y2hhcnRndWkuCisKKyMgIHB5Ym9vdGNoYXJ0Z3VpIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyAgcHlib290Y2hhcnRndWkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgYWxvbmcgd2l0aCBweWJvb3RjaGFydGd1aS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisKK2ltcG9ydCBjYWlybworaW1wb3J0IG1hdGgKK2ltcG9ydCByZQoraW1wb3J0IHJhbmRvbQoraW1wb3J0IGNvbG9yc3lzCitmcm9tIG9wZXJhdG9yIGltcG9ydCBpdGVtZ2V0dGVyCisKK2NsYXNzIFJlbmRlck9wdGlvbnM6CisKKwlkZWYgX19pbml0X18oc2VsZiwgYXBwX29wdGlvbnMpOgorCQkjIHNob3VsZCB3ZSByZW5kZXIgYSBjdW11bGF0aXZlIENQVSB0aW1lIGNoYXJ0CisJCXNlbGYuY3VtdWxhdGl2ZSA9IFRydWUKKwkJc2VsZi5jaGFydHMgPSBUcnVlCisJCXNlbGYua2VybmVsX29ubHkgPSBGYWxzZQorCQlzZWxmLmFwcF9vcHRpb25zID0gYXBwX29wdGlvbnMKKworCWRlZiBwcm9jX3RyZWUgKHNlbGYsIHRyYWNlKToKKwkJaWYgc2VsZi5rZXJuZWxfb25seToKKwkJCXJldHVybiB0cmFjZS5rZXJuZWxfdHJlZQorCQllbHNlOgorCQkJcmV0dXJuIHRyYWNlLnByb2NfdHJlZQorCisjIFByb2Nlc3MgdHJlZSBiYWNrZ3JvdW5kIGNvbG9yLgorQkFDS19DT0xPUiA9ICgxLjAsIDEuMCwgMS4wLCAxLjApCisKK1dISVRFID0gKDEuMCwgMS4wLCAxLjAsIDEuMCkKKyMgUHJvY2VzcyB0cmVlIGJvcmRlciBjb2xvci4KK0JPUkRFUl9DT0xPUiA9ICgwLjYzLCAwLjYzLCAwLjYzLCAxLjApCisjIFNlY29uZCB0aWNrIGxpbmUgY29sb3IuCitUSUNLX0NPTE9SID0gKDAuOTIsIDAuOTIsIDAuOTIsIDEuMCkKKyMgNS1zZWNvbmQgdGljayBsaW5lIGNvbG9yLgorVElDS19DT0xPUl9CT0xEID0gKDAuODYsIDAuODYsIDAuODYsIDEuMCkKKyMgQW5ub3RhdGlvbiBjb2xvdXIKK0FOTk9UQVRJT05fQ09MT1IgPSAoMC42MywgMC4wLCAwLjAsIDAuNSkKKyMgVGV4dCBjb2xvci4KK1RFWFRfQ09MT1IgPSAoMC4wLCAwLjAsIDAuMCwgMS4wKQorCisjIEZvbnQgZmFtaWx5CitGT05UX05BTUUgPSAiQml0c3RyZWFtIFZlcmEgU2FucyIKKyMgVGl0bGUgdGV4dCBmb250LgorVElUTEVfRk9OVF9TSVpFID0gMTgKKyMgRGVmYXVsdCB0ZXh0IGZvbnQuCitURVhUX0ZPTlRfU0laRSA9IDEyCisjIEF4aXMgbGFiZWwgZm9udC4KK0FYSVNfRk9OVF9TSVpFID0gMTEKKyMgTGVnZW5kIGZvbnQuCitMRUdFTkRfRk9OVF9TSVpFID0gMTIKKworIyBDUFUgbG9hZCBjaGFydCBjb2xvci4KK0NQVV9DT0xPUiA9ICgwLjQwLCAwLjU1LCAwLjcwLCAxLjApCisjIElPIHdhaXQgY2hhcnQgY29sb3IuCitJT19DT0xPUiA9ICgwLjc2LCAwLjQ4LCAwLjQ4LCAwLjUpCisjIERpc2sgdGhyb3VnaHB1dCBjb2xvci4KK0RJU0tfVFBVVF9DT0xPUiA9ICgwLjIwLCAwLjcxLCAwLjIwLCAxLjApCisjIENQVSBsb2FkIGNoYXJ0IGNvbG9yLgorRklMRV9PUEVOX0NPTE9SID0gKDAuMjAsIDAuNzEsIDAuNzEsIDEuMCkKKyMgTWVtIGNhY2hlZCBjb2xvcgorTUVNX0NBQ0hFRF9DT0xPUiA9IENQVV9DT0xPUgorIyBNZW0gdXNlZCBjb2xvcgorTUVNX1VTRURfQ09MT1IgPSBJT19DT0xPUgorIyBCdWZmZXJzIGNvbG9yCitNRU1fQlVGRkVSU19DT0xPUiA9ICgwLjQsIDAuNCwgMC40LCAwLjMpCisjIFN3YXAgY29sb3IKK01FTV9TV0FQX0NPTE9SID0gRElTS19UUFVUX0NPTE9SCisKKyMgUHJvY2VzcyBib3JkZXIgY29sb3IuCitQUk9DX0JPUkRFUl9DT0xPUiA9ICgwLjcxLCAwLjcxLCAwLjcxLCAxLjApCisjIFdhaXRpbmcgcHJvY2VzcyBjb2xvci4KK1BST0NfQ09MT1JfRCA9ICgwLjc2LCAwLjQ4LCAwLjQ4LCAwLjUpCisjIFJ1bm5pbmcgcHJvY2VzcyBjb2xvci4KK1BST0NfQ09MT1JfUiA9IENQVV9DT0xPUgorIyBTbGVlcGluZyBwcm9jZXNzIGNvbG9yLgorUFJPQ19DT0xPUl9TID0gKDAuOTQsIDAuOTQsIDAuOTQsIDEuMCkKKyMgU3RvcHBlZCBwcm9jZXNzIGNvbG9yLgorUFJPQ19DT0xPUl9UID0gKDAuOTQsIDAuNTAsIDAuNTAsIDEuMCkKKyMgWm9tYmllIHByb2Nlc3MgY29sb3IuCitQUk9DX0NPTE9SX1ogPSAoMC43MSwgMC43MSwgMC43MSwgMS4wKQorIyBEZWFkIHByb2Nlc3MgY29sb3IuCitQUk9DX0NPTE9SX1ggPSAoMC43MSwgMC43MSwgMC43MSwgMC4xMjUpCisjIFBhZ2luZyBwcm9jZXNzIGNvbG9yLgorUFJPQ19DT0xPUl9XID0gKDAuNzEsIDAuNzEsIDAuNzEsIDAuMTI1KQorCisjIFByb2Nlc3MgbGFiZWwgY29sb3IuCitQUk9DX1RFWFRfQ09MT1IgPSAoMC4xOSwgMC4xOSwgMC4xOSwgMS4wKQorIyBQcm9jZXNzIGxhYmVsIGZvbnQuCitQUk9DX1RFWFRfRk9OVF9TSVpFID0gMTIKKworIyBTaWduYXR1cmUgY29sb3IuCitTSUdfQ09MT1IgPSAoMC4wLCAwLjAsIDAuMCwgMC4zMTI1KQorIyBTaWduYXR1cmUgZm9udC4KK1NJR19GT05UX1NJWkUgPSAxNAorIyBTaWduYXR1cmUgdGV4dC4KK1NJR05BVFVSRSA9ICJodHRwOi8vZ2l0aHViLmNvbS9tbWVla3MvYm9vdGNoYXJ0IgorCisjIFByb2Nlc3MgZGVwZW5kZW5jeSBsaW5lIGNvbG9yLgorREVQX0NPTE9SID0gKDAuNzUsIDAuNzUsIDAuNzUsIDEuMCkKKyMgUHJvY2VzcyBkZXBlbmRlbmN5IGxpbmUgc3Ryb2tlLgorREVQX1NUUk9LRSA9IDEuMAorCisjIFByb2Nlc3MgZGVzY3JpcHRpb24gZGF0ZSBmb3JtYXQuCitERVNDX1RJTUVfRk9STUFUID0gIm1tOnNzLlNTUyIKKworIyBDdW11bGF0aXZlIGNvbG9yaW5nIGJpdHMKK0hTVl9NQVhfTU9EID0gMzEKK0hTVl9TVEVQID0gNworCisjIENvbmZpZ3VyZSB0YXNrIGNvbG9yCitUQVNLX0NPTE9SX0NPTkZJR1VSRSA9ICgxLjAsIDEuMCwgMC4wMCwgMS4wKQorIyBDb21waWxlIHRhc2sgY29sb3IuCitUQVNLX0NPTE9SX0NPTVBJTEUgPSAoMC4wLCAxLjAwLCAwLjAwLCAxLjApCisjIEluc3RhbGwgdGFzayBjb2xvcgorVEFTS19DT0xPUl9JTlNUQUxMID0gKDEuMCwgMC4wMCwgMS4wMCwgMS4wKQorIyBTeXNyb290IHRhc2sgY29sb3IKK1RBU0tfQ09MT1JfU1lTUk9PVCA9ICgwLjAsIDAuMDAsIDEuMDAsIDEuMCkKKyMgUGFja2FnZSB0YXNrIGNvbG9yCitUQVNLX0NPTE9SX1BBQ0tBR0UgPSAoMC4wLCAxLjAwLCAxLjAwLCAxLjApCisjIFBhY2thZ2UgV3JpdGUgUlBNL0RFQi9JUEsgdGFzayBjb2xvcgorVEFTS19DT0xPUl9QQUNLQUdFX1dSSVRFID0gKDAuMCwgMC41MCwgMC41MCwgMS4wKQorCisjIFByb2Nlc3Mgc3RhdGVzCitTVEFURV9VTkRFRklORUQgPSAwCitTVEFURV9SVU5OSU5HICAgPSAxCitTVEFURV9TTEVFUElORyAgPSAyCitTVEFURV9XQUlUSU5HICAgPSAzCitTVEFURV9TVE9QUEVEICAgPSA0CitTVEFURV9aT01CSUUgICAgPSA1CisKK1NUQVRFX0NPTE9SUyA9IFsoMCwgMCwgMCwgMCksIFBST0NfQ09MT1JfUiwgUFJPQ19DT0xPUl9TLCBQUk9DX0NPTE9SX0QsIFwKKwkJUFJPQ19DT0xPUl9ULCBQUk9DX0NPTE9SX1osIFBST0NfQ09MT1JfWCwgUFJPQ19DT0xPUl9XXQorCisjIEN1bXVsYXRpdmVTdGF0cyBUeXBlcworU1RBVF9UWVBFX0NQVSA9IDAKK1NUQVRfVFlQRV9JTyA9IDEKKworIyBDb252ZXJ0IHBzIHByb2Nlc3Mgc3RhdGUgdG8gYW4gaW50CitkZWYgZ2V0X3Byb2Nfc3RhdGUoZmxhZyk6CisJcmV0dXJuICJSU0RUWlhXIi5maW5kKGZsYWcpICsgMQorCitkZWYgZHJhd190ZXh0KGN0eCwgdGV4dCwgY29sb3IsIHgsIHkpOgorCWN0eC5zZXRfc291cmNlX3JnYmEoKmNvbG9yKQorCWN0eC5tb3ZlX3RvKHgsIHkpCisJY3R4LnNob3dfdGV4dCh0ZXh0KQorCitkZWYgZHJhd19maWxsX3JlY3QoY3R4LCBjb2xvciwgcmVjdCk6CisJY3R4LnNldF9zb3VyY2VfcmdiYSgqY29sb3IpCisJY3R4LnJlY3RhbmdsZSgqcmVjdCkKKwljdHguZmlsbCgpCisKK2RlZiBkcmF3X3JlY3QoY3R4LCBjb2xvciwgcmVjdCk6CisJY3R4LnNldF9zb3VyY2VfcmdiYSgqY29sb3IpCisJY3R4LnJlY3RhbmdsZSgqcmVjdCkKKwljdHguc3Ryb2tlKCkKKworZGVmIGRyYXdfbGVnZW5kX2JveChjdHgsIGxhYmVsLCBmaWxsX2NvbG9yLCB4LCB5LCBzKToKKwlkcmF3X2ZpbGxfcmVjdChjdHgsIGZpbGxfY29sb3IsICh4LCB5IC0gcywgcywgcykpCisJZHJhd19yZWN0KGN0eCwgUFJPQ19CT1JERVJfQ09MT1IsICh4LCB5IC0gcywgcywgcykpCisJZHJhd190ZXh0KGN0eCwgbGFiZWwsIFRFWFRfQ09MT1IsIHggKyBzICsgNSwgeSkKKworZGVmIGRyYXdfbGVnZW5kX2xpbmUoY3R4LCBsYWJlbCwgZmlsbF9jb2xvciwgeCwgeSwgcyk6CisJZHJhd19maWxsX3JlY3QoY3R4LCBmaWxsX2NvbG9yLCAoeCwgeSAtIHMvMiwgcyArIDEsIDMpKQorCWN0eC5hcmMoeCArIChzICsgMSkvMi4wLCB5IC0gKHMgLSAzKS8yLjAsIDIuNSwgMCwgMi4wICogbWF0aC5waSkKKwljdHguZmlsbCgpCisJZHJhd190ZXh0KGN0eCwgbGFiZWwsIFRFWFRfQ09MT1IsIHggKyBzICsgNSwgeSkKKworZGVmIGRyYXdfbGFiZWxfaW5fYm94KGN0eCwgY29sb3IsIGxhYmVsLCB4LCB5LCB3LCBtYXh4KToKKwlsYWJlbF93ID0gY3R4LnRleHRfZXh0ZW50cyhsYWJlbClbMl0KKwlsYWJlbF94ID0geCArIHcgLyAyIC0gbGFiZWxfdyAvIDIKKwlpZiBsYWJlbF93ICsgMTAgPiB3OgorCQlsYWJlbF94ID0geCArIHcgKyA1CisJaWYgbGFiZWxfeCArIGxhYmVsX3cgPiBtYXh4OgorCQlsYWJlbF94ID0geCAtIGxhYmVsX3cgLSA1CisJZHJhd190ZXh0KGN0eCwgbGFiZWwsIGNvbG9yLCBsYWJlbF94LCB5KQorCitkZWYgZHJhd19zZWNfbGFiZWxzKGN0eCwgb3B0aW9ucywgcmVjdCwgc2VjX3csIG5zZWNzKToKKwljdHguc2V0X2ZvbnRfc2l6ZShBWElTX0ZPTlRfU0laRSkKKwlwcmV2X3ggPSAwCisJZm9yIGkgaW4gcmFuZ2UoMCwgcmVjdFsyXSArIDEsIHNlY193KToKKwkJaWYgKChpIC8gc2VjX3cpICUgbnNlY3MgPT0gMCkgOgorCQkJaWYgb3B0aW9ucy5hcHBfb3B0aW9ucy5hc19taW51dGVzIDoKKwkJCQlsYWJlbCA9ICIlLjFmIiAlIChpIC8gc2VjX3cgLyA2MC4wKQorCQkJZWxzZSA6CisJCQkJbGFiZWwgPSAiJWQiICUgKGkgLyBzZWNfdykKKwkJCWxhYmVsX3cgPSBjdHgudGV4dF9leHRlbnRzKGxhYmVsKVsyXQorCQkJeCA9IHJlY3RbMF0gKyBpIC0gbGFiZWxfdy8yCisJCQlpZiB4ID49IHByZXZfeDoKKwkJCQlkcmF3X3RleHQoY3R4LCBsYWJlbCwgVEVYVF9DT0xPUiwgeCwgcmVjdFsxXSAtIDIpCisJCQkJcHJldl94ID0geCArIGxhYmVsX3cKKworZGVmIGRyYXdfYm94X3RpY2tzKGN0eCwgcmVjdCwgc2VjX3cpOgorCWRyYXdfcmVjdChjdHgsIEJPUkRFUl9DT0xPUiwgdHVwbGUocmVjdCkpCisKKwljdHguc2V0X2xpbmVfY2FwKGNhaXJvLkxJTkVfQ0FQX1NRVUFSRSkKKworCWZvciBpIGluIHJhbmdlKHNlY193LCByZWN0WzJdICsgMSwgc2VjX3cpOgorCQlpZiAoKGkgLyBzZWNfdykgJSAxMCA9PSAwKSA6CisJCQljdHguc2V0X2xpbmVfd2lkdGgoMS41KQorCQllbGlmIHNlY193IDwgNSA6CisJCQljb250aW51ZQorCQllbHNlIDoKKwkJCWN0eC5zZXRfbGluZV93aWR0aCgxLjApCisJCWlmICgoaSAvIHNlY193KSAlIDMwID09IDApIDoKKwkJCWN0eC5zZXRfc291cmNlX3JnYmEoKlRJQ0tfQ09MT1JfQk9MRCkKKwkJZWxzZSA6CisJCQljdHguc2V0X3NvdXJjZV9yZ2JhKCpUSUNLX0NPTE9SKQorCQljdHgubW92ZV90byhyZWN0WzBdICsgaSwgcmVjdFsxXSArIDEpCisJCWN0eC5saW5lX3RvKHJlY3RbMF0gKyBpLCByZWN0WzFdICsgcmVjdFszXSAtIDEpCisJCWN0eC5zdHJva2UoKQorCWN0eC5zZXRfbGluZV93aWR0aCgxLjApCisKKwljdHguc2V0X2xpbmVfY2FwKGNhaXJvLkxJTkVfQ0FQX0JVVFQpCisKK2RlZiBkcmF3X2Fubm90YXRpb25zKGN0eCwgcHJvY190cmVlLCB0aW1lcywgcmVjdCk6CisgICAgY3R4LnNldF9saW5lX2NhcChjYWlyby5MSU5FX0NBUF9TUVVBUkUpCisgICAgY3R4LnNldF9zb3VyY2VfcmdiYSgqQU5OT1RBVElPTl9DT0xPUikKKyAgICBjdHguc2V0X2Rhc2goWzQsIDRdKQorCisgICAgZm9yIHRpbWUgaW4gdGltZXM6CisgICAgICAgIGlmIHRpbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB4ID0gKCh0aW1lIC0gcHJvY190cmVlLnN0YXJ0X3RpbWUpICogcmVjdFsyXSAvIHByb2NfdHJlZS5kdXJhdGlvbikKKworICAgICAgICAgICAgY3R4Lm1vdmVfdG8ocmVjdFswXSArIHgsIHJlY3RbMV0gKyAxKQorICAgICAgICAgICAgY3R4LmxpbmVfdG8ocmVjdFswXSArIHgsIHJlY3RbMV0gKyByZWN0WzNdIC0gMSkKKyAgICAgICAgICAgIGN0eC5zdHJva2UoKQorCisgICAgY3R4LnNldF9saW5lX2NhcChjYWlyby5MSU5FX0NBUF9CVVRUKQorICAgIGN0eC5zZXRfZGFzaChbXSkKKworZGVmIGRyYXdfY2hhcnQoY3R4LCBjb2xvciwgZmlsbCwgY2hhcnRfYm91bmRzLCBkYXRhLCBwcm9jX3RyZWUsIGRhdGFfcmFuZ2UpOgorCWN0eC5zZXRfbGluZV93aWR0aCgwLjUpCisJeF9zaGlmdCA9IHByb2NfdHJlZS5zdGFydF90aW1lCisKKwlkZWYgdHJhbnNmb3JtX3BvaW50X2Nvb3Jkcyhwb2ludCwgeF9iYXNlLCB5X2Jhc2UsIFwKKwkJCQkgICB4c2NhbGUsIHlzY2FsZSwgeF90cmFucywgeV90cmFucyk6CisJCXggPSAocG9pbnRbMF0gLSB4X2Jhc2UpICogeHNjYWxlICsgeF90cmFucworCQl5ID0gKHBvaW50WzFdIC0geV9iYXNlKSAqIC15c2NhbGUgKyB5X3RyYW5zICsgY2hhcnRfYm91bmRzWzNdCisJCXJldHVybiB4LCB5CisKKwltYXhfeCA9IG1heCAoeCBmb3IgKHgsIHkpIGluIGRhdGEpCisJbWF4X3kgPSBtYXggKHkgZm9yICh4LCB5KSBpbiBkYXRhKQorCSMgYXZvaWQgZGl2aWRlIGJ5IHplcm8KKwlpZiBtYXhfeSA9PSAwOgorCQltYXhfeSA9IDEuMAorCXhzY2FsZSA9IGZsb2F0IChjaGFydF9ib3VuZHNbMl0pIC8gbWF4X3gKKwkjIElmIGRhdGFfcmFuZ2UgaXMgZ2l2ZW4sIHNjYWxlIHRoZSBjaGFydCBzbyB0aGF0IHRoZSB2YWx1ZSByYW5nZSBpbgorCSMgZGF0YV9yYW5nZSBtYXRjaGVzIHRoZSBjaGFydCBib3VuZHMgZXhhY3RseS4KKwkjIE90aGVyd2lzZSwgc2NhbGUgc28gdGhhdCB0aGUgYWN0dWFsIGRhdGEgbWF0Y2hlcyB0aGUgY2hhcnQgYm91bmRzLgorCWlmIGRhdGFfcmFuZ2U6CisJCXlzY2FsZSA9IGZsb2F0KGNoYXJ0X2JvdW5kc1szXSkgLyAoZGF0YV9yYW5nZVsxXSAtIGRhdGFfcmFuZ2VbMF0pCisJCXliYXNlID0gZGF0YV9yYW5nZVswXQorCWVsc2U6CisJCXlzY2FsZSA9IGZsb2F0KGNoYXJ0X2JvdW5kc1szXSkgLyBtYXhfeQorCQl5YmFzZSA9IDAKKworCWZpcnN0ID0gdHJhbnNmb3JtX3BvaW50X2Nvb3JkcyAoZGF0YVswXSwgeF9zaGlmdCwgeWJhc2UsIHhzY2FsZSwgeXNjYWxlLCBcCisJCQkJICAgICAgICBjaGFydF9ib3VuZHNbMF0sIGNoYXJ0X2JvdW5kc1sxXSkKKwlsYXN0ID0gIHRyYW5zZm9ybV9wb2ludF9jb29yZHMgKGRhdGFbLTFdLCB4X3NoaWZ0LCB5YmFzZSwgeHNjYWxlLCB5c2NhbGUsIFwKKwkJCQkgICAgICAgIGNoYXJ0X2JvdW5kc1swXSwgY2hhcnRfYm91bmRzWzFdKQorCisJY3R4LnNldF9zb3VyY2VfcmdiYSgqY29sb3IpCisJY3R4Lm1vdmVfdG8oKmZpcnN0KQorCWZvciBwb2ludCBpbiBkYXRhOgorCQl4LCB5ID0gdHJhbnNmb3JtX3BvaW50X2Nvb3JkcyAocG9pbnQsIHhfc2hpZnQsIHliYXNlLCB4c2NhbGUsIHlzY2FsZSwgXAorCQkJCQkgICAgICAgY2hhcnRfYm91bmRzWzBdLCBjaGFydF9ib3VuZHNbMV0pCisJCWN0eC5saW5lX3RvKHgsIHkpCisJaWYgZmlsbDoKKwkJY3R4LnN0cm9rZV9wcmVzZXJ2ZSgpCisJCWN0eC5saW5lX3RvKGxhc3RbMF0sIGNoYXJ0X2JvdW5kc1sxXStjaGFydF9ib3VuZHNbM10pCisJCWN0eC5saW5lX3RvKGZpcnN0WzBdLCBjaGFydF9ib3VuZHNbMV0rY2hhcnRfYm91bmRzWzNdKQorCQljdHgubGluZV90byhmaXJzdFswXSwgZmlyc3RbMV0pCisJCWN0eC5maWxsKCkKKwllbHNlOgorCQljdHguc3Ryb2tlKCkKKwljdHguc2V0X2xpbmVfd2lkdGgoMS4wKQorCitiYXJfaCA9IDU1CittZW1pbmZvX2Jhcl9oID0gMiAqIGJhcl9oCitoZWFkZXJfaCA9IDYwCisjIG9mZnNldHMKK29mZl94LCBvZmZfeSA9IDIyMCwgMTAKK3NlY193X2Jhc2UgPSAxICMgdGhlIHdpZHRoIG9mIGEgc2Vjb25kCitwcm9jX2ggPSAxNiAjIHRoZSBoZWlnaHQgb2YgYSBwcm9jZXNzCitsZWdfcyA9IDEwCitNSU5fSU1HX1cgPSA4MDAKK0NVTUxfSEVJR0hUID0gMjAwMCAjIEluY3JlYXNlZCB2YWx1ZSB0byBhY2NvbW9kYXRlIENQVSBhbmQgSS9PIEdyYXBocworT1BUSU9OUyA9IE5vbmUKKworZGVmIGV4dGVudHMob3B0aW9ucywgeHNjYWxlLCB0cmFjZSk6CisJc3RhcnQgPSBtaW4odHJhY2Uuc3RhcnQua2V5cygpKQorCWVuZCA9IHN0YXJ0CisKKyAgICAgICAgcHJvY2Vzc2VzID0gMAorICAgICAgICBmb3IgcHJvYyBpbiB0cmFjZS5wcm9jZXNzZXM6CisgICAgICAgICAgICAgICAgaWYgbm90IG9wdGlvbnMuYXBwX29wdGlvbnMuc2hvd19hbGwgYW5kIFwKKyAgICAgICAgICAgICAgICAgICB0cmFjZS5wcm9jZXNzZXNbcHJvY11bMV0gLSB0cmFjZS5wcm9jZXNzZXNbcHJvY11bMF0gPCBvcHRpb25zLmFwcF9vcHRpb25zLm1pbnRpbWU6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgdHJhY2UucHJvY2Vzc2VzW3Byb2NdWzFdID4gZW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gdHJhY2UucHJvY2Vzc2VzW3Byb2NdWzFdCisgICAgICAgICAgICAgICAgcHJvY2Vzc2VzICs9IDEKKworCWlmIHRyYWNlLm1pbiBpcyBub3QgTm9uZSBhbmQgdHJhY2UubWF4IGlzIG5vdCBOb25lOgorCQlzdGFydCA9IHRyYWNlLm1pbgorCQllbmQgPSB0cmFjZS5tYXgKKworCXcgPSBpbnQgKChlbmQgLSBzdGFydCkgKiBzZWNfd19iYXNlICogeHNjYWxlKSArIDIgKiBvZmZfeAorCWggPSBwcm9jX2ggKiBwcm9jZXNzZXMgKyBoZWFkZXJfaCArIDIgKiBvZmZfeQorCisJcmV0dXJuICh3LCBoKQorCitkZWYgY2xpcF92aXNpYmxlKGNsaXAsIHJlY3QpOgorCXhtYXggPSBtYXggKGNsaXBbMF0sIHJlY3RbMF0pCisJeW1heCA9IG1heCAoY2xpcFsxXSwgcmVjdFsxXSkKKwl4bWluID0gbWluIChjbGlwWzBdICsgY2xpcFsyXSwgcmVjdFswXSArIHJlY3RbMl0pCisJeW1pbiA9IG1pbiAoY2xpcFsxXSArIGNsaXBbM10sIHJlY3RbMV0gKyByZWN0WzNdKQorCXJldHVybiAoeG1pbiA+IHhtYXggYW5kIHltaW4gPiB5bWF4KQorCitkZWYgcmVuZGVyX2NoYXJ0cyhjdHgsIG9wdGlvbnMsIGNsaXAsIHRyYWNlLCBjdXJyX3ksIHcsIGgsIHNlY193KToKKwlwcm9jX3RyZWUgPSBvcHRpb25zLnByb2NfdHJlZSh0cmFjZSkKKworCSMgcmVuZGVyIGJhciBsZWdlbmQKKwljdHguc2V0X2ZvbnRfc2l6ZShMRUdFTkRfRk9OVF9TSVpFKQorCisJZHJhd19sZWdlbmRfYm94KGN0eCwgIkNQVSAodXNlcitzeXMpIiwgQ1BVX0NPTE9SLCBvZmZfeCwgY3Vycl95KzIwLCBsZWdfcykKKwlkcmF3X2xlZ2VuZF9ib3goY3R4LCAiSS9PICh3YWl0KSIsIElPX0NPTE9SLCBvZmZfeCArIDEyMCwgY3Vycl95KzIwLCBsZWdfcykKKworCSMgcmVuZGVyIEkvTyB3YWl0CisJY2hhcnRfcmVjdCA9IChvZmZfeCwgY3Vycl95KzMwLCB3LCBiYXJfaCkKKwlpZiBjbGlwX3Zpc2libGUgKGNsaXAsIGNoYXJ0X3JlY3QpOgorCQlkcmF3X2JveF90aWNrcyAoY3R4LCBjaGFydF9yZWN0LCBzZWNfdykKKwkJZHJhd19hbm5vdGF0aW9ucyAoY3R4LCBwcm9jX3RyZWUsIHRyYWNlLnRpbWVzLCBjaGFydF9yZWN0KQorCQlkcmF3X2NoYXJ0IChjdHgsIElPX0NPTE9SLCBUcnVlLCBjaGFydF9yZWN0LCBcCisJCQkgICAgWyhzYW1wbGUudGltZSwgc2FtcGxlLnVzZXIgKyBzYW1wbGUuc3lzICsgc2FtcGxlLmlvKSBmb3Igc2FtcGxlIGluIHRyYWNlLmNwdV9zdGF0c10sIFwKKwkJCSAgICBwcm9jX3RyZWUsIE5vbmUpCisJCSMgcmVuZGVyIENQVSBsb2FkCisJCWRyYXdfY2hhcnQgKGN0eCwgQ1BVX0NPTE9SLCBUcnVlLCBjaGFydF9yZWN0LCBcCisJCQkgICAgWyhzYW1wbGUudGltZSwgc2FtcGxlLnVzZXIgKyBzYW1wbGUuc3lzKSBmb3Igc2FtcGxlIGluIHRyYWNlLmNwdV9zdGF0c10sIFwKKwkJCSAgICBwcm9jX3RyZWUsIE5vbmUpCisKKwljdXJyX3kgPSBjdXJyX3kgKyAzMCArIGJhcl9oCisKKwkjIHJlbmRlciBzZWNvbmQgY2hhcnQKKwlkcmF3X2xlZ2VuZF9saW5lKGN0eCwgIkRpc2sgdGhyb3VnaHB1dCIsIERJU0tfVFBVVF9DT0xPUiwgb2ZmX3gsIGN1cnJfeSsyMCwgbGVnX3MpCisJZHJhd19sZWdlbmRfYm94KGN0eCwgIkRpc2sgdXRpbGl6YXRpb24iLCBJT19DT0xPUiwgb2ZmX3ggKyAxMjAsIGN1cnJfeSsyMCwgbGVnX3MpCisKKyAgICAgICAgIyByZW5kZXIgSS9PIHV0aWxpemF0aW9uCisJY2hhcnRfcmVjdCA9IChvZmZfeCwgY3Vycl95KzMwLCB3LCBiYXJfaCkKKwlpZiBjbGlwX3Zpc2libGUgKGNsaXAsIGNoYXJ0X3JlY3QpOgorCQlkcmF3X2JveF90aWNrcyAoY3R4LCBjaGFydF9yZWN0LCBzZWNfdykKKwkJZHJhd19hbm5vdGF0aW9ucyAoY3R4LCBwcm9jX3RyZWUsIHRyYWNlLnRpbWVzLCBjaGFydF9yZWN0KQorCQlkcmF3X2NoYXJ0IChjdHgsIElPX0NPTE9SLCBUcnVlLCBjaGFydF9yZWN0LCBcCisJCQkgICAgWyhzYW1wbGUudGltZSwgc2FtcGxlLnV0aWwpIGZvciBzYW1wbGUgaW4gdHJhY2UuZGlza19zdGF0c10sIFwKKwkJCSAgICBwcm9jX3RyZWUsIE5vbmUpCisKKwkjIHJlbmRlciBkaXNrIHRocm91Z2hwdXQKKwltYXhfc2FtcGxlID0gbWF4ICh0cmFjZS5kaXNrX3N0YXRzLCBrZXkgPSBsYW1iZGEgczogcy50cHV0KQorCWlmIGNsaXBfdmlzaWJsZSAoY2xpcCwgY2hhcnRfcmVjdCk6CisJCWRyYXdfY2hhcnQgKGN0eCwgRElTS19UUFVUX0NPTE9SLCBGYWxzZSwgY2hhcnRfcmVjdCwgXAorCQkJICAgIFsoc2FtcGxlLnRpbWUsIHNhbXBsZS50cHV0KSBmb3Igc2FtcGxlIGluIHRyYWNlLmRpc2tfc3RhdHNdLCBcCisJCQkgICAgcHJvY190cmVlLCBOb25lKQorCisJcG9zX3ggPSBvZmZfeCArICgobWF4X3NhbXBsZS50aW1lIC0gcHJvY190cmVlLnN0YXJ0X3RpbWUpICogdyAvIHByb2NfdHJlZS5kdXJhdGlvbikKKworCXNoaWZ0X3gsIHNoaWZ0X3kgPSAtMjAsIDIwCisJaWYgKHBvc194IDwgb2ZmX3ggKyAyNDUpOgorCQlzaGlmdF94LCBzaGlmdF95ID0gNSwgNDAKKworCWxhYmVsID0gIiVkTUIvcyIgJSByb3VuZCAoKG1heF9zYW1wbGUudHB1dCkgLyAxMDI0LjApCisJZHJhd190ZXh0IChjdHgsIGxhYmVsLCBESVNLX1RQVVRfQ09MT1IsIHBvc194ICsgc2hpZnRfeCwgY3Vycl95ICsgc2hpZnRfeSkKKworCWN1cnJfeSA9IGN1cnJfeSArIDMwICsgYmFyX2gKKworCSMgcmVuZGVyIG1lbSB1c2FnZQorCWNoYXJ0X3JlY3QgPSAob2ZmX3gsIGN1cnJfeSszMCwgdywgbWVtaW5mb19iYXJfaCkKKwltZW1fc3RhdHMgPSB0cmFjZS5tZW1fc3RhdHMKKwlpZiBtZW1fc3RhdHMgYW5kIGNsaXBfdmlzaWJsZSAoY2xpcCwgY2hhcnRfcmVjdCk6CisJCW1lbV9zY2FsZSA9IG1heChzYW1wbGUucmVjb3Jkc1snTWVtVG90YWwnXSAtIHNhbXBsZS5yZWNvcmRzWydNZW1GcmVlJ10gZm9yIHNhbXBsZSBpbiBtZW1fc3RhdHMpCisJCWRyYXdfbGVnZW5kX2JveChjdHgsICJNZW0gY2FjaGVkIChzY2FsZTogJXUgTWlCKSIgJSAoZmxvYXQobWVtX3NjYWxlKSAvIDEwMjQpLCBNRU1fQ0FDSEVEX0NPTE9SLCBvZmZfeCwgY3Vycl95KzIwLCBsZWdfcykKKwkJZHJhd19sZWdlbmRfYm94KGN0eCwgIlVzZWQiLCBNRU1fVVNFRF9DT0xPUiwgb2ZmX3ggKyAyNDAsIGN1cnJfeSsyMCwgbGVnX3MpCisJCWRyYXdfbGVnZW5kX2JveChjdHgsICJCdWZmZXJzIiwgTUVNX0JVRkZFUlNfQ09MT1IsIG9mZl94ICsgMzYwLCBjdXJyX3krMjAsIGxlZ19zKQorCQlkcmF3X2xlZ2VuZF9saW5lKGN0eCwgIlN3YXAgKHNjYWxlOiAldSBNaUIpIiAlIG1heChbKHNhbXBsZS5yZWNvcmRzWydTd2FwVG90YWwnXSAtIHNhbXBsZS5yZWNvcmRzWydTd2FwRnJlZSddKS8xMDI0IGZvciBzYW1wbGUgaW4gbWVtX3N0YXRzXSksIFwKKwkJCQkgTUVNX1NXQVBfQ09MT1IsIG9mZl94ICsgNDgwLCBjdXJyX3krMjAsIGxlZ19zKQorCQlkcmF3X2JveF90aWNrcyhjdHgsIGNoYXJ0X3JlY3QsIHNlY193KQorCQlkcmF3X2Fubm90YXRpb25zKGN0eCwgcHJvY190cmVlLCB0cmFjZS50aW1lcywgY2hhcnRfcmVjdCkKKwkJZHJhd19jaGFydChjdHgsIE1FTV9CVUZGRVJTX0NPTE9SLCBUcnVlLCBjaGFydF9yZWN0LCBcCisJCQkgICBbKHNhbXBsZS50aW1lLCBzYW1wbGUucmVjb3Jkc1snTWVtVG90YWwnXSAtIHNhbXBsZS5yZWNvcmRzWydNZW1GcmVlJ10pIGZvciBzYW1wbGUgaW4gdHJhY2UubWVtX3N0YXRzXSwgXAorCQkJICAgcHJvY190cmVlLCBbMCwgbWVtX3NjYWxlXSkKKwkJZHJhd19jaGFydChjdHgsIE1FTV9VU0VEX0NPTE9SLCBUcnVlLCBjaGFydF9yZWN0LCBcCisJCQkgICBbKHNhbXBsZS50aW1lLCBzYW1wbGUucmVjb3Jkc1snTWVtVG90YWwnXSAtIHNhbXBsZS5yZWNvcmRzWydNZW1GcmVlJ10gLSBzYW1wbGUucmVjb3Jkc1snQnVmZmVycyddKSBmb3Igc2FtcGxlIGluIG1lbV9zdGF0c10sIFwKKwkJCSAgIHByb2NfdHJlZSwgWzAsIG1lbV9zY2FsZV0pCisJCWRyYXdfY2hhcnQoY3R4LCBNRU1fQ0FDSEVEX0NPTE9SLCBUcnVlLCBjaGFydF9yZWN0LCBcCisJCQkgICBbKHNhbXBsZS50aW1lLCBzYW1wbGUucmVjb3Jkc1snQ2FjaGVkJ10pIGZvciBzYW1wbGUgaW4gbWVtX3N0YXRzXSwgXAorCQkJICAgcHJvY190cmVlLCBbMCwgbWVtX3NjYWxlXSkKKwkJZHJhd19jaGFydChjdHgsIE1FTV9TV0FQX0NPTE9SLCBGYWxzZSwgY2hhcnRfcmVjdCwgXAorCQkJICAgWyhzYW1wbGUudGltZSwgZmxvYXQoc2FtcGxlLnJlY29yZHNbJ1N3YXBUb3RhbCddIC0gc2FtcGxlLnJlY29yZHNbJ1N3YXBGcmVlJ10pKSBmb3Igc2FtcGxlIGluIG1lbV9zdGF0c10sIFwKKwkJCSAgIHByb2NfdHJlZSwgTm9uZSkKKworCQljdXJyX3kgPSBjdXJyX3kgKyBtZW1pbmZvX2Jhcl9oCisKKwlyZXR1cm4gY3Vycl95CisKK2RlZiByZW5kZXJfcHJvY2Vzc2VzX2NoYXJ0KGN0eCwgb3B0aW9ucywgdHJhY2UsIGN1cnJfeSwgdywgaCwgc2VjX3cpOgorICAgICAgICBjaGFydF9yZWN0ID0gW29mZl94LCBjdXJyX3kraGVhZGVyX2gsIHcsIGggLSAyICogb2ZmX3kgLSAoY3Vycl95K2hlYWRlcl9oKSArIHByb2NfaF0KKworCWRyYXdfbGVnZW5kX2JveCAoY3R4LCAiQ29uZmlndXJlIiwgXAorCQkJIFRBU0tfQ09MT1JfQ09ORklHVVJFLCBvZmZfeCAgLCBjdXJyX3kgKyA0NSwgbGVnX3MpCisJZHJhd19sZWdlbmRfYm94IChjdHgsICJDb21waWxlIiwgXAorCQkJIFRBU0tfQ09MT1JfQ09NUElMRSwgb2ZmX3grMTIwLCBjdXJyX3kgKyA0NSwgbGVnX3MpCisJZHJhd19sZWdlbmRfYm94IChjdHgsICJJbnN0YWxsIiwgXAorCQkJIFRBU0tfQ09MT1JfSU5TVEFMTCwgb2ZmX3grMjQwLCBjdXJyX3kgKyA0NSwgbGVnX3MpCisJZHJhd19sZWdlbmRfYm94IChjdHgsICJQb3B1bGF0ZSBTeXNyb290IiwgXAorCQkJIFRBU0tfQ09MT1JfU1lTUk9PVCwgb2ZmX3grMzYwLCBjdXJyX3kgKyA0NSwgbGVnX3MpCisJZHJhd19sZWdlbmRfYm94IChjdHgsICJQYWNrYWdlIiwgXAorCQkJIFRBU0tfQ09MT1JfUEFDS0FHRSwgb2ZmX3grNDgwLCBjdXJyX3kgKyA0NSwgbGVnX3MpCisJZHJhd19sZWdlbmRfYm94IChjdHgsICJQYWNrYWdlIFdyaXRlIiwKKwkJCSBUQVNLX0NPTE9SX1BBQ0tBR0VfV1JJVEUsIG9mZl94KzYwMCwgY3Vycl95ICsgNDUsIGxlZ19zKQorCisJY3R4LnNldF9mb250X3NpemUoUFJPQ19URVhUX0ZPTlRfU0laRSkKKworCWRyYXdfYm94X3RpY2tzKGN0eCwgY2hhcnRfcmVjdCwgc2VjX3cpCisJZHJhd19zZWNfbGFiZWxzKGN0eCwgb3B0aW9ucywgY2hhcnRfcmVjdCwgc2VjX3csIDMwKQorCisJeSA9IGN1cnJfeStoZWFkZXJfaAorCisgICAgICAgIG9mZnNldCA9IHRyYWNlLm1pbiBvciBtaW4odHJhY2Uuc3RhcnQua2V5cygpKQorICAgICAgICBmb3IgcyBpbiBzb3J0ZWQodHJhY2Uuc3RhcnQua2V5cygpKToKKyAgICAgICAgICAgIGZvciB2YWwgaW4gc29ydGVkKHRyYWNlLnN0YXJ0W3NdKToKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3B0aW9ucy5hcHBfb3B0aW9ucy5zaG93X2FsbCBhbmQgXAorICAgICAgICAgICAgICAgICAgIHRyYWNlLnByb2Nlc3Nlc1t2YWxdWzFdIC0gcyA8IG9wdGlvbnMuYXBwX29wdGlvbnMubWludGltZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICB0YXNrID0gdmFsLnNwbGl0KCI6IilbMV0KKyAgICAgICAgICAgICAgICAjcHJpbnQgdmFsCisgICAgICAgICAgICAgICAgI3ByaW50IHRyYWNlLnByb2Nlc3Nlc1t2YWxdWzFdCisgICAgICAgICAgICAgICAgI3ByaW50IHMKKyAgICAgICAgICAgICAgICB4ID0gY2hhcnRfcmVjdFswXSArIChzIC0gb2Zmc2V0KSAqIHNlY193CisgICAgICAgICAgICAgICAgdyA9ICgodHJhY2UucHJvY2Vzc2VzW3ZhbF1bMV0gLSBzKSAqIHNlY193KQorCisgICAgICAgICAgICAgICAgI3ByaW50ICJwcm9jIGF0ICVzICVzICVzICVzIiAlICh4LCB5LCB3LCBwcm9jX2gpCisgICAgICAgICAgICAgICAgY29sID0gTm9uZQorICAgICAgICAgICAgICAgIGlmIHRhc2sgPT0gImRvX2NvbXBpbGUiOgorICAgICAgICAgICAgICAgICAgICBjb2wgPSBUQVNLX0NPTE9SX0NPTVBJTEUKKyAgICAgICAgICAgICAgICBlbGlmIHRhc2sgPT0gImRvX2NvbmZpZ3VyZSI6CisgICAgICAgICAgICAgICAgICAgIGNvbCA9IFRBU0tfQ09MT1JfQ09ORklHVVJFCisgICAgICAgICAgICAgICAgZWxpZiB0YXNrID09ICJkb19pbnN0YWxsIjoKKyAgICAgICAgICAgICAgICAgICAgY29sID0gVEFTS19DT0xPUl9JTlNUQUxMCisgICAgICAgICAgICAgICAgZWxpZiB0YXNrID09ICJkb19wb3B1bGF0ZV9zeXNyb290IjoKKyAgICAgICAgICAgICAgICAgICAgY29sID0gVEFTS19DT0xPUl9TWVNST09UCisgICAgICAgICAgICAgICAgZWxpZiB0YXNrID09ICJkb19wYWNrYWdlIjoKKyAgICAgICAgICAgICAgICAgICAgY29sID0gVEFTS19DT0xPUl9QQUNLQUdFCisgICAgICAgICAgICAgICAgZWxpZiB0YXNrID09ICJkb19wYWNrYWdlX3dyaXRlX3JwbSIgb3IgXAorICAgICAgICAgICAgICAgICAgICAgdGFzayA9PSAiZG9fcGFja2FnZV93cml0ZV9kZWIiIG9yIFwKKyAgICAgICAgICAgICAgICAgICAgIHRhc2sgPT0gImRvX3BhY2thZ2Vfd3JpdGVfaXBrIjoKKyAgICAgICAgICAgICAgICAgICAgY29sID0gVEFTS19DT0xPUl9QQUNLQUdFX1dSSVRFCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY29sID0gV0hJVEUKKworICAgICAgICAgICAgICAgIGlmIGNvbDoKKyAgICAgICAgICAgICAgICAgICAgZHJhd19maWxsX3JlY3QoY3R4LCBjb2wsICh4LCB5LCB3LCBwcm9jX2gpKQorICAgICAgICAgICAgICAgIGRyYXdfcmVjdChjdHgsIFBST0NfQk9SREVSX0NPTE9SLCAoeCwgeSwgdywgcHJvY19oKSkKKworICAgICAgICAgICAgICAgIGRyYXdfbGFiZWxfaW5fYm94KGN0eCwgUFJPQ19URVhUX0NPTE9SLCB2YWwsIHgsIHkgKyBwcm9jX2ggLSA0LCB3LCBwcm9jX2gpCisgICAgICAgICAgICAgICAgeSA9IHkgKyBwcm9jX2gKKworCXJldHVybiBjdXJyX3kKKworIworIyBSZW5kZXIgdGhlIGNoYXJ0LgorIworZGVmIHJlbmRlcihjdHgsIG9wdGlvbnMsIHhzY2FsZSwgdHJhY2UpOgorCSh3LCBoKSA9IGV4dGVudHMgKG9wdGlvbnMsIHhzY2FsZSwgdHJhY2UpCisJZ2xvYmFsIE9QVElPTlMKKwlPUFRJT05TID0gb3B0aW9ucy5hcHBfb3B0aW9ucworCisJIyB4LCB5LCB3LCBoCisJY2xpcCA9IGN0eC5jbGlwX2V4dGVudHMoKQorCisJc2VjX3cgPSBpbnQgKHhzY2FsZSAqIHNlY193X2Jhc2UpCisJY3R4LnNldF9saW5lX3dpZHRoKDEuMCkKKwljdHguc2VsZWN0X2ZvbnRfZmFjZShGT05UX05BTUUpCisJZHJhd19maWxsX3JlY3QoY3R4LCBXSElURSwgKDAsIDAsIG1heCh3LCBNSU5fSU1HX1cpLCBoKSkKKwl3IC09IDIqb2ZmX3gKKwljdXJyX3kgPSBvZmZfeTsKKworCWN1cnJfeSA9IHJlbmRlcl9wcm9jZXNzZXNfY2hhcnQgKGN0eCwgb3B0aW9ucywgdHJhY2UsIGN1cnJfeSwgdywgaCwgc2VjX3cpCisKKwlyZXR1cm4KKworCXByb2NfdHJlZSA9IG9wdGlvbnMucHJvY190cmVlICh0cmFjZSkKKworCSMgZHJhdyB0aGUgdGl0bGUgYW5kIGhlYWRlcnMKKwlpZiBwcm9jX3RyZWUuaWRsZToKKwkJZHVyYXRpb24gPSBwcm9jX3RyZWUuaWRsZQorCWVsc2U6CisJCWR1cmF0aW9uID0gcHJvY190cmVlLmR1cmF0aW9uCisKKwlpZiBub3Qgb3B0aW9ucy5rZXJuZWxfb25seToKKwkJY3Vycl95ID0gZHJhd19oZWFkZXIgKGN0eCwgdHJhY2UuaGVhZGVycywgZHVyYXRpb24pCisJZWxzZToKKwkJY3Vycl95ID0gb2ZmX3k7CisKKwlpZiBvcHRpb25zLmNoYXJ0czoKKwkJY3Vycl95ID0gcmVuZGVyX2NoYXJ0cyAoY3R4LCBvcHRpb25zLCBjbGlwLCB0cmFjZSwgY3Vycl95LCB3LCBoLCBzZWNfdykKKworCSMgZHJhdyBwcm9jZXNzIGJveGVzCisJcHJvY19oZWlnaHQgPSBoCisJaWYgcHJvY190cmVlLnRhc2tzdGF0cyBhbmQgb3B0aW9ucy5jdW11bGF0aXZlOgorCQlwcm9jX2hlaWdodCAtPSBDVU1MX0hFSUdIVAorCisJZHJhd19wcm9jZXNzX2Jhcl9jaGFydChjdHgsIGNsaXAsIG9wdGlvbnMsIHByb2NfdHJlZSwgdHJhY2UudGltZXMsCisJCQkgICAgICAgY3Vycl95LCB3LCBwcm9jX2hlaWdodCwgc2VjX3cpCisKKwljdXJyX3kgPSBwcm9jX2hlaWdodAorCWN0eC5zZXRfZm9udF9zaXplKFNJR19GT05UX1NJWkUpCisJZHJhd190ZXh0KGN0eCwgU0lHTkFUVVJFLCBTSUdfQ09MT1IsIG9mZl94ICsgNSwgcHJvY19oZWlnaHQgLSA4KQorCisJIyBkcmF3IGEgY3VtdWxhdGl2ZSBDUFUtdGltZS1wZXItcHJvY2VzcyBncmFwaAorCWlmIHByb2NfdHJlZS50YXNrc3RhdHMgYW5kIG9wdGlvbnMuY3VtdWxhdGl2ZToKKwkJY3VtbF9yZWN0ID0gKG9mZl94LCBjdXJyX3kgKyBvZmZfeSwgdywgQ1VNTF9IRUlHSFQvMiAtIG9mZl95ICogMikKKwkJaWYgY2xpcF92aXNpYmxlIChjbGlwLCBjdW1sX3JlY3QpOgorCQkJZHJhd19jdW1sX2dyYXBoKGN0eCwgcHJvY190cmVlLCBjdW1sX3JlY3QsIGR1cmF0aW9uLCBzZWNfdywgU1RBVF9UWVBFX0NQVSkKKworCSMgZHJhdyBhIGN1bXVsYXRpdmUgSS9PLXRpbWUtcGVyLXByb2Nlc3MgZ3JhcGgKKwlpZiBwcm9jX3RyZWUudGFza3N0YXRzIGFuZCBvcHRpb25zLmN1bXVsYXRpdmU6CisJCWN1bWxfcmVjdCA9IChvZmZfeCwgY3Vycl95ICsgb2ZmX3kgKiAxMDAsIHcsIENVTUxfSEVJR0hULzIgLSBvZmZfeSAqIDIpCisJCWlmIGNsaXBfdmlzaWJsZSAoY2xpcCwgY3VtbF9yZWN0KToKKwkJCWRyYXdfY3VtbF9ncmFwaChjdHgsIHByb2NfdHJlZSwgY3VtbF9yZWN0LCBkdXJhdGlvbiwgc2VjX3csIFNUQVRfVFlQRV9JTykKKworZGVmIGRyYXdfcHJvY2Vzc19iYXJfY2hhcnQoY3R4LCBjbGlwLCBvcHRpb25zLCBwcm9jX3RyZWUsIHRpbWVzLCBjdXJyX3ksIHcsIGgsIHNlY193KToKKwloZWFkZXJfc2l6ZSA9IDAKKwlpZiBub3Qgb3B0aW9ucy5rZXJuZWxfb25seToKKwkJZHJhd19sZWdlbmRfYm94IChjdHgsICJSdW5uaW5nICglY3B1KSIsCisJCQkJIFBST0NfQ09MT1JfUiwgb2ZmX3ggICAgLCBjdXJyX3kgKyA0NSwgbGVnX3MpCisJCWRyYXdfbGVnZW5kX2JveCAoY3R4LCAiVW5pbnQuc2xlZXAgKEkvTykiLAorCQkJCSBQUk9DX0NPTE9SX0QsIG9mZl94KzEyMCwgY3Vycl95ICsgNDUsIGxlZ19zKQorCQlkcmF3X2xlZ2VuZF9ib3ggKGN0eCwgIlNsZWVwaW5nIiwKKwkJCQkgUFJPQ19DT0xPUl9TLCBvZmZfeCsyNDAsIGN1cnJfeSArIDQ1LCBsZWdfcykKKwkJZHJhd19sZWdlbmRfYm94IChjdHgsICJab21iaWUiLAorCQkJCSBQUk9DX0NPTE9SX1osIG9mZl94KzM2MCwgY3Vycl95ICsgNDUsIGxlZ19zKQorCQloZWFkZXJfc2l6ZSA9IDQ1CisKKwljaGFydF9yZWN0ID0gW29mZl94LCBjdXJyX3kgKyBoZWFkZXJfc2l6ZSArIDE1LAorCQkgICAgICB3LCBoIC0gMiAqIG9mZl95IC0gKGN1cnJfeSArIGhlYWRlcl9zaXplICsgMTUpICsgcHJvY19oXQorCWN0eC5zZXRfZm9udF9zaXplIChQUk9DX1RFWFRfRk9OVF9TSVpFKQorCisJZHJhd19ib3hfdGlja3MgKGN0eCwgY2hhcnRfcmVjdCwgc2VjX3cpCisJaWYgc2VjX3cgPiAxMDA6CisJCW5zZWMgPSAxCisJZWxzZToKKwkJbnNlYyA9IDUKKwlkcmF3X3NlY19sYWJlbHMgKGN0eCwgb3B0aW9ucywgY2hhcnRfcmVjdCwgc2VjX3csIG5zZWMpCisJZHJhd19hbm5vdGF0aW9ucyAoY3R4LCBwcm9jX3RyZWUsIHRpbWVzLCBjaGFydF9yZWN0KQorCisJeSA9IGN1cnJfeSArIDYwCisJZm9yIHJvb3QgaW4gcHJvY190cmVlLnByb2Nlc3NfdHJlZToKKwkJZHJhd19wcm9jZXNzZXNfcmVjdXJzaXZlbHkoY3R4LCByb290LCBwcm9jX3RyZWUsIHksIHByb2NfaCwgY2hhcnRfcmVjdCwgY2xpcCkKKwkJeSA9IHkgKyBwcm9jX2ggKiBwcm9jX3RyZWUubnVtX25vZGVzKFtyb290XSkKKworCitkZWYgZHJhd19oZWFkZXIgKGN0eCwgaGVhZGVycywgZHVyYXRpb24pOgorICAgIHRvc2hvdyA9IFsKKyAgICAgICgnc3lzdGVtLnVuYW1lJywgJ3VuYW1lJywgbGFtYmRhIHM6IHMpLAorICAgICAgKCdzeXN0ZW0ucmVsZWFzZScsICdyZWxlYXNlJywgbGFtYmRhIHM6IHMpLAorICAgICAgKCdzeXN0ZW0uY3B1JywgJ0NQVScsIGxhbWJkYSBzOiByZS5zdWIoJ21vZGVsIG5hbWVccyo6XHMqJywgJycsIHMsIDEpKSwKKyAgICAgICgnc3lzdGVtLmtlcm5lbC5vcHRpb25zJywgJ2tlcm5lbCBvcHRpb25zJywgbGFtYmRhIHM6IHMpLAorICAgIF0KKworICAgIGhlYWRlcl95ID0gY3R4LmZvbnRfZXh0ZW50cygpWzJdICsgMTAKKyAgICBjdHguc2V0X2ZvbnRfc2l6ZShUSVRMRV9GT05UX1NJWkUpCisgICAgZHJhd190ZXh0KGN0eCwgaGVhZGVyc1sndGl0bGUnXSwgVEVYVF9DT0xPUiwgb2ZmX3gsIGhlYWRlcl95KQorICAgIGN0eC5zZXRfZm9udF9zaXplKFRFWFRfRk9OVF9TSVpFKQorCisgICAgZm9yIChoZWFkZXJrZXksIGhlYWRlcnRpdGxlLCBtYW5nbGUpIGluIHRvc2hvdzoKKyAgICAgICAgaGVhZGVyX3kgKz0gY3R4LmZvbnRfZXh0ZW50cygpWzJdCisgICAgICAgIGlmIGhlYWRlcmtleSBpbiBoZWFkZXJzOgorICAgICAgICAgICAgdmFsdWUgPSBoZWFkZXJzLmdldChoZWFkZXJrZXkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB2YWx1ZSA9ICIiCisgICAgICAgIHR4dCA9IGhlYWRlcnRpdGxlICsgJzogJyArIG1hbmdsZSh2YWx1ZSkKKyAgICAgICAgZHJhd190ZXh0KGN0eCwgdHh0LCBURVhUX0NPTE9SLCBvZmZfeCwgaGVhZGVyX3kpCisKKyAgICBkdXIgPSBkdXJhdGlvbiAvIDEwMC4wCisgICAgdHh0ID0gJ3RpbWUgOiAlMDJkOiUwNS4yZicgJSAobWF0aC5mbG9vcihkdXIvNjApLCBkdXIgLSA2MCAqIG1hdGguZmxvb3IoZHVyLzYwKSkKKyAgICBpZiBoZWFkZXJzLmdldCgnc3lzdGVtLm1heHBpZCcpIGlzIG5vdCBOb25lOgorICAgICAgICB0eHQgPSB0eHQgKyAnICAgICAgbWF4IHBpZDogJXMnICUgKGhlYWRlcnMuZ2V0KCdzeXN0ZW0ubWF4cGlkJykpCisKKyAgICBoZWFkZXJfeSArPSBjdHguZm9udF9leHRlbnRzKClbMl0KKyAgICBkcmF3X3RleHQgKGN0eCwgdHh0LCBURVhUX0NPTE9SLCBvZmZfeCwgaGVhZGVyX3kpCisKKyAgICByZXR1cm4gaGVhZGVyX3kKKworZGVmIGRyYXdfcHJvY2Vzc2VzX3JlY3Vyc2l2ZWx5KGN0eCwgcHJvYywgcHJvY190cmVlLCB5LCBwcm9jX2gsIHJlY3QsIGNsaXApIDoKKwl4ID0gcmVjdFswXSArICAoKHByb2Muc3RhcnRfdGltZSAtIHByb2NfdHJlZS5zdGFydF90aW1lKSAqIHJlY3RbMl0gLyBwcm9jX3RyZWUuZHVyYXRpb24pCisJdyA9ICgocHJvYy5kdXJhdGlvbikgKiByZWN0WzJdIC8gcHJvY190cmVlLmR1cmF0aW9uKQorCisJZHJhd19wcm9jZXNzX2FjdGl2aXR5X2NvbG9ycyhjdHgsIHByb2MsIHByb2NfdHJlZSwgeCwgeSwgdywgcHJvY19oLCByZWN0LCBjbGlwKQorCWRyYXdfcmVjdChjdHgsIFBST0NfQk9SREVSX0NPTE9SLCAoeCwgeSwgdywgcHJvY19oKSkKKwlpcGlkID0gaW50KHByb2MucGlkKQorCWlmIG5vdCBPUFRJT05TLnNob3dfYWxsOgorCQljbWRTdHJpbmcgPSBwcm9jLmNtZAorCWVsc2U6CisJCWNtZFN0cmluZyA9ICcnCisJaWYgKE9QVElPTlMuc2hvd19waWQgb3IgT1BUSU9OUy5zaG93X2FsbCkgYW5kIGlwaWQgaXMgbm90IDA6CisJCWNtZFN0cmluZyA9IGNtZFN0cmluZyArICIgWyIgKyBzdHIoaXBpZCAvLyAxMDAwKSArICJdIgorCWlmIE9QVElPTlMuc2hvd19hbGw6CisJCWlmIHByb2MuYXJnczoKKwkJCWNtZFN0cmluZyA9IGNtZFN0cmluZyArICIgJyIgKyAiJyAnIi5qb2luKHByb2MuYXJncykgKyAiJyIKKwkJZWxzZToKKwkJCWNtZFN0cmluZyA9IGNtZFN0cmluZyArICIgIiArIHByb2MuZXhlCisKKwlkcmF3X2xhYmVsX2luX2JveChjdHgsIFBST0NfVEVYVF9DT0xPUiwgY21kU3RyaW5nLCB4LCB5ICsgcHJvY19oIC0gNCwgdywgcmVjdFswXSArIHJlY3RbMl0pCisKKwluZXh0X3kgPSB5ICsgcHJvY19oCisJZm9yIGNoaWxkIGluIHByb2MuY2hpbGRfbGlzdDoKKwkJaWYgbmV4dF95ID4gY2xpcFsxXSArIGNsaXBbM106CisJCQlicmVhaworCQljaGlsZF94LCBjaGlsZF95ID0gZHJhd19wcm9jZXNzZXNfcmVjdXJzaXZlbHkoY3R4LCBjaGlsZCwgcHJvY190cmVlLCBuZXh0X3ksIHByb2NfaCwgcmVjdCwgY2xpcCkKKwkJZHJhd19wcm9jZXNzX2Nvbm5lY3RpbmdfbGluZXMoY3R4LCB4LCB5LCBjaGlsZF94LCBjaGlsZF95LCBwcm9jX2gpCisJCW5leHRfeSA9IG5leHRfeSArIHByb2NfaCAqIHByb2NfdHJlZS5udW1fbm9kZXMoW2NoaWxkXSkKKworCXJldHVybiB4LCB5CisKKworZGVmIGRyYXdfcHJvY2Vzc19hY3Rpdml0eV9jb2xvcnMoY3R4LCBwcm9jLCBwcm9jX3RyZWUsIHgsIHksIHcsIHByb2NfaCwgcmVjdCwgY2xpcCk6CisKKwlpZiB5ID4gY2xpcFsxXSArIGNsaXBbM10gb3IgeSArIHByb2NfaCArIDIgPCBjbGlwWzFdOgorCQlyZXR1cm4KKworCWRyYXdfZmlsbF9yZWN0KGN0eCwgUFJPQ19DT0xPUl9TLCAoeCwgeSwgdywgcHJvY19oKSkKKworCWxhc3RfdHggPSAtMQorCWZvciBzYW1wbGUgaW4gcHJvYy5zYW1wbGVzIDoKKwkJdHggPSByZWN0WzBdICsgcm91bmQoKChzYW1wbGUudGltZSAtIHByb2NfdHJlZS5zdGFydF90aW1lKSAqIHJlY3RbMl0gLyBwcm9jX3RyZWUuZHVyYXRpb24pKQorCisJCSMgc2FtcGxlcyBhcmUgc29ydGVkIGNocm9ub2xvZ2ljYWxseQorCQlpZiB0eCA8IGNsaXBbMF06CisJCQljb250aW51ZQorCQlpZiB0eCA+IGNsaXBbMF0gKyBjbGlwWzJdOgorCQkJYnJlYWsKKworCQl0dyA9IHJvdW5kKHByb2NfdHJlZS5zYW1wbGVfcGVyaW9kICogcmVjdFsyXSAvIGZsb2F0KHByb2NfdHJlZS5kdXJhdGlvbikpCisJCWlmIGxhc3RfdHggIT0gLTEgYW5kIGFicyhsYXN0X3R4IC0gdHgpIDw9IHR3OgorCQkJdHcgLT0gbGFzdF90eCAtIHR4CisJCQl0eCA9IGxhc3RfdHgKKwkJdHcgPSBtYXggKHR3LCAxKSAjIG5pY2UgdG8gc2VlIGF0IGxlYXN0IHNvbWV0aGluZworCisJCWxhc3RfdHggPSB0eCArIHR3CisJCXN0YXRlID0gZ2V0X3Byb2Nfc3RhdGUoIHNhbXBsZS5zdGF0ZSApCisKKwkJY29sb3IgPSBTVEFURV9DT0xPUlNbc3RhdGVdCisJCWlmIHN0YXRlID09IFNUQVRFX1JVTk5JTkc6CisJCQlhbHBoYSA9IG1pbiAoc2FtcGxlLmNwdV9zYW1wbGUudXNlciArIHNhbXBsZS5jcHVfc2FtcGxlLnN5cywgMS4wKQorCQkJY29sb3IgPSB0dXBsZShsaXN0KFBST0NfQ09MT1JfUlswOjNdKSArIFthbHBoYV0pCisjCQkJcHJpbnQgInJlbmRlciB0aW1lICVkIFsgdHggJWQgdHcgJWQgXSwgc2FtcGxlIHN0YXRlICVzIGNvbG9yICVzIGFscGhhICVnIiAlIChzYW1wbGUudGltZSwgdHgsIHR3LCBzdGF0ZSwgY29sb3IsIGFscGhhKQorCQllbGlmIHN0YXRlID09IFNUQVRFX1NMRUVQSU5HOgorCQkJY29udGludWUKKworCQlkcmF3X2ZpbGxfcmVjdChjdHgsIGNvbG9yLCAodHgsIHksIHR3LCBwcm9jX2gpKQorCitkZWYgZHJhd19wcm9jZXNzX2Nvbm5lY3RpbmdfbGluZXMoY3R4LCBweCwgcHksIHgsIHksIHByb2NfaCk6CisJY3R4LnNldF9zb3VyY2VfcmdiYSgqREVQX0NPTE9SKQorCWN0eC5zZXRfZGFzaChbMiwgMl0pCisJaWYgYWJzKHB4IC0geCkgPCAzOgorCQlkZXBfb2ZmX3ggPSAzCisJCWRlcF9vZmZfeSA9IHByb2NfaCAvIDQKKwkJY3R4Lm1vdmVfdG8oeCwgeSArIHByb2NfaCAvIDIpCisJCWN0eC5saW5lX3RvKHB4IC0gZGVwX29mZl94LCB5ICsgcHJvY19oIC8gMikKKwkJY3R4LmxpbmVfdG8ocHggLSBkZXBfb2ZmX3gsIHB5IC0gZGVwX29mZl95KQorCQljdHgubGluZV90byhweCwgcHkgLSBkZXBfb2ZmX3kpCisJZWxzZToKKwkJY3R4Lm1vdmVfdG8oeCwgeSArIHByb2NfaCAvIDIpCisJCWN0eC5saW5lX3RvKHB4LCB5ICsgcHJvY19oIC8gMikKKwkJY3R4LmxpbmVfdG8ocHgsIHB5KQorCWN0eC5zdHJva2UoKQorCWN0eC5zZXRfZGFzaChbXSkKKworIyBlbGlkZSB0aGUgYm9vdGNoYXJ0IGNvbGxlY3RvciAtIGl0IGlzIHF1aXRlIGRpc3RvcnRpbmcKK2RlZiBlbGlkZV9ib290Y2hhcnQocHJvYyk6CisJcmV0dXJuIHByb2MuY21kID09ICdib290Y2hhcnRkJyBvciBwcm9jLmNtZCA9PSAnYm9vdGNoYXJ0LWNvbGxlJworCitjbGFzcyBDdW1sU2FtcGxlOgorCWRlZiBfX2luaXRfXyhzZWxmLCBwcm9jKToKKwkJc2VsZi5jbWQgPSBwcm9jLmNtZAorCQlzZWxmLnNhbXBsZXMgPSBbXQorCQlzZWxmLm1lcmdlX3NhbXBsZXMgKHByb2MpCisJCXNlbGYuY29sb3IgPSBOb25lCisKKwlkZWYgbWVyZ2Vfc2FtcGxlcyhzZWxmLCBwcm9jKToKKwkJc2VsZi5zYW1wbGVzLmV4dGVuZCAocHJvYy5zYW1wbGVzKQorCQlzZWxmLnNhbXBsZXMuc29ydCAoa2V5ID0gbGFtYmRhIHA6IHAudGltZSkKKworCWRlZiBuZXh0KHNlbGYpOgorCQlnbG9iYWwgcGFsZXR0ZV9pZHgKKwkJcGFsZXR0ZV9pZHggKz0gSFNWX1NURVAKKwkJcmV0dXJuIHBhbGV0dGVfaWR4CisKKwlkZWYgZ2V0X2NvbG9yKHNlbGYpOgorCQlpZiBzZWxmLmNvbG9yIGlzIE5vbmU6CisJCQlpID0gc2VsZi5uZXh0KCkgJSBIU1ZfTUFYX01PRAorCQkJaCA9IDAuMAorCQkJaWYgaSBpcyBub3QgMDoKKwkJCQloID0gKDEuMCAqIGkpIC8gSFNWX01BWF9NT0QKKwkJCXMgPSAwLjUKKwkJCXYgPSAxLjAKKwkJCWMgPSBjb2xvcnN5cy5oc3ZfdG9fcmdiIChoLCBzLCB2KQorCQkJc2VsZi5jb2xvciA9IChjWzBdLCBjWzFdLCBjWzJdLCAxLjApCisJCXJldHVybiBzZWxmLmNvbG9yCisKKworZGVmIGRyYXdfY3VtbF9ncmFwaChjdHgsIHByb2NfdHJlZSwgY2hhcnRfYm91bmRzLCBkdXJhdGlvbiwgc2VjX3csIHN0YXRfdHlwZSk6CisJZ2xvYmFsIHBhbGV0dGVfaWR4CisJcGFsZXR0ZV9pZHggPSAwCisKKwl0aW1lX2hhc2ggPSB7fQorCXRvdGFsX3RpbWUgPSAwLjAKKwltX3Byb2NfbGlzdCA9IHt9CisKKwlpZiBzdGF0X3R5cGUgaXMgU1RBVF9UWVBFX0NQVToKKwkJc2FtcGxlX3ZhbHVlID0gJ2NwdScKKwllbHNlOgorCQlzYW1wbGVfdmFsdWUgPSAnaW8nCisJZm9yIHByb2MgaW4gcHJvY190cmVlLnByb2Nlc3NfbGlzdDoKKwkJaWYgZWxpZGVfYm9vdGNoYXJ0KHByb2MpOgorCQkJY29udGludWUKKworCQlmb3Igc2FtcGxlIGluIHByb2Muc2FtcGxlczoKKwkJCXRvdGFsX3RpbWUgKz0gZ2V0YXR0cihzYW1wbGUuY3B1X3NhbXBsZSwgc2FtcGxlX3ZhbHVlKQorCQkJaWYgbm90IHNhbXBsZS50aW1lIGluIHRpbWVfaGFzaDoKKwkJCQl0aW1lX2hhc2hbc2FtcGxlLnRpbWVdID0gMQorCisJCSMgbWVyZ2UgcGlkcyB3aXRoIHRoZSBzYW1lIGNtZAorCQlpZiBub3QgcHJvYy5jbWQgaW4gbV9wcm9jX2xpc3Q6CisJCQltX3Byb2NfbGlzdFtwcm9jLmNtZF0gPSBDdW1sU2FtcGxlIChwcm9jKQorCQkJY29udGludWUKKwkJcyA9IG1fcHJvY19saXN0W3Byb2MuY21kXQorCQlzLm1lcmdlX3NhbXBsZXMgKHByb2MpCisKKwkjIGFsbCB0aGUgc2FtcGxlIHRpbWVzCisJdGltZXMgPSBzb3J0ZWQodGltZV9oYXNoKQorCWlmIGxlbiAodGltZXMpIDwgMjoKKwkJcHJpbnQoImRlZ2VuZXJhdGUgYm9vdCBjaGFydCIpCisJCXJldHVybgorCisJcGl4X3Blcl9ucyA9IGNoYXJ0X2JvdW5kc1szXSAvIHRvdGFsX3RpbWUKKyMJcHJpbnQgInRvdGFsIHRpbWU6ICVnIHBpeC1wZXItbnMgJWciICUgKHRvdGFsX3RpbWUsIHBpeF9wZXJfbnMpCisKKwkjIEZJWE1FOiB3ZSBoYXZlIGR1cGxpY2F0ZXMgaW4gdGhlIHByb2Nlc3MgbGlzdCB0b28gWyFdIC0gd2h5ICE/CisKKwkjIFJlbmRlciBib3R0b20gdXAsIGxlZnQgdG8gcmlnaHQKKwliZWxvdyA9IHt9CisJZm9yIHRpbWUgaW4gdGltZXM6CisJCWJlbG93W3RpbWVdID0gY2hhcnRfYm91bmRzWzFdICsgY2hhcnRfYm91bmRzWzNdCisKKwkjIHNhbWUgY29sb3JzIGVhY2ggdGltZSB3ZSByZW5kZXIKKwlyYW5kb20uc2VlZCAoMCkKKworCWN0eC5zZXRfbGluZV93aWR0aCgxKQorCisJbGVnZW5kcyA9IFtdCisJbGFiZWxzID0gW10KKworCSMgcmVuZGVyIGVhY2ggcGlkIGluIG9yZGVyCisJZm9yIGNzIGluIG1fcHJvY19saXN0LnZhbHVlcygpOgorCQlyb3cgPSB7fQorCQljdW1sID0gMC4wCisKKwkJIyBwcmludCAicGlkIDogJXMgLT4gJWcgc2FtcGxlcyAlZCIgJSAocHJvYy5jbWQsIGN1bWwsIGxlbiAoY3Muc2FtcGxlcykpCisJCWZvciBzYW1wbGUgaW4gY3Muc2FtcGxlczoKKwkJCWN1bWwgKz0gZ2V0YXR0cihzYW1wbGUuY3B1X3NhbXBsZSwgc2FtcGxlX3ZhbHVlKQorCQkJcm93W3NhbXBsZS50aW1lXSA9IGN1bWwKKworCQlwcm9jZXNzX3RvdGFsX3RpbWUgPSBjdW1sCisKKwkJIyBoaWRlIHJlYWxseSB0aW55IHByb2Nlc3NlcworCQlpZiBjdW1sICogcGl4X3Blcl9ucyA8PSAyOgorCQkJY29udGludWUKKworCQlsYXN0X3RpbWUgPSB0aW1lc1swXQorCQl5ID0gbGFzdF9iZWxvdyA9IGJlbG93W2xhc3RfdGltZV0KKwkJbGFzdF9jdW1sID0gY3VtbCA9IDAuMAorCisJCWN0eC5zZXRfc291cmNlX3JnYmEoKmNzLmdldF9jb2xvcigpKQorCQlmb3IgdGltZSBpbiB0aW1lczoKKwkJCXJlbmRlcl9zZWcgPSBGYWxzZQorCisJCQkjIGRpZCB0aGUgdW5kZXJseWluZyB0cmVuZCBpbmNyZWFzZSA/CisJCQlpZiBiZWxvd1t0aW1lXSAhPSBsYXN0X2JlbG93OgorCQkJCWxhc3RfYmVsb3cgPSBiZWxvd1tsYXN0X3RpbWVdCisJCQkJbGFzdF9jdW1sID0gY3VtbAorCQkJCXJlbmRlcl9zZWcgPSBUcnVlCisKKwkJCSMgZGlkIHdlIG1vdmUgdXAgYSBwaXhlbCBpbmNyZWFzZSA/CisJCQlpZiB0aW1lIGluIHJvdzoKKwkJCQluYyA9IHJvdW5kIChyb3dbdGltZV0gKiBwaXhfcGVyX25zKQorCQkJCWlmIG5jICE9IGN1bWw6CisJCQkJCWxhc3RfY3VtbCA9IGN1bWwKKwkJCQkJY3VtbCA9IG5jCisJCQkJCXJlbmRlcl9zZWcgPSBUcnVlCisKKyMJCQlpZiBsYXN0X2N1bWwgPiBjdW1sOgorIwkJCQlhc3NlcnQgZmFpbCAuLi4gLSB1bi1zb3J0ZWQgcHJvY2VzcyBzYW1wbGVzCisKKwkJCSMgZHJhdyB0aGUgdHJhaWxpbmcgcmVjdGFuZ2xlIGZyb20gdGhlIGxhc3QgdGltZSB0bworCQkJIyBiZWZvcmUgbm93LCBhdCB0aGUgaGVpZ2h0IG9mIHRoZSBsYXN0IHNlZ21lbnQuCisJCQlpZiByZW5kZXJfc2VnOgorCQkJCXcgPSBtYXRoLmNlaWwgKCh0aW1lIC0gbGFzdF90aW1lKSAqIGNoYXJ0X2JvdW5kc1syXSAvIHByb2NfdHJlZS5kdXJhdGlvbikgKyAxCisJCQkJeCA9IGNoYXJ0X2JvdW5kc1swXSArIHJvdW5kKChsYXN0X3RpbWUgLSBwcm9jX3RyZWUuc3RhcnRfdGltZSkgKiBjaGFydF9ib3VuZHNbMl0gLyBwcm9jX3RyZWUuZHVyYXRpb24pCisJCQkJY3R4LnJlY3RhbmdsZSAoeCwgYmVsb3dbbGFzdF90aW1lXSAtIGxhc3RfY3VtbCwgdywgbGFzdF9jdW1sKQorCQkJCWN0eC5maWxsKCkKKyMJCQkJY3R4LnN0cm9rZSgpCisJCQkJbGFzdF90aW1lID0gdGltZQorCQkJCXkgPSBiZWxvdyBbdGltZV0gLSBjdW1sCisKKwkJCXJvd1t0aW1lXSA9IHkKKworCQkjIHJlbmRlciB0aGUgbGFzdCBzZWdtZW50CisJCXggPSBjaGFydF9ib3VuZHNbMF0gKyByb3VuZCgobGFzdF90aW1lIC0gcHJvY190cmVlLnN0YXJ0X3RpbWUpICogY2hhcnRfYm91bmRzWzJdIC8gcHJvY190cmVlLmR1cmF0aW9uKQorCQl5ID0gYmVsb3dbbGFzdF90aW1lXSAtIGN1bWwKKwkJY3R4LnJlY3RhbmdsZSAoeCwgeSwgY2hhcnRfYm91bmRzWzJdIC0geCwgY3VtbCkKKwkJY3R4LmZpbGwoKQorIwkJY3R4LnN0cm9rZSgpCisKKwkJIyByZW5kZXIgbGVnZW5kIGlmIGl0IHdpbGwgZml0CisJCWlmIGN1bWwgPiA4OgorCQkJbGFiZWwgPSBjcy5jbWQKKwkJCWV4dG50cyA9IGN0eC50ZXh0X2V4dGVudHMobGFiZWwpCisJCQlsYWJlbF93ID0gZXh0bnRzWzJdCisJCQlsYWJlbF9oID0gZXh0bnRzWzNdCisjCQkJcHJpbnQgIlRleHQgZXh0ZW50cyAlZyBieSAlZyIgJSAobGFiZWxfdywgbGFiZWxfaCkKKwkJCWxhYmVscy5hcHBlbmQoKGxhYmVsLAorCQkJCSAgICAgICBjaGFydF9ib3VuZHNbMF0gKyBjaGFydF9ib3VuZHNbMl0gLSBsYWJlbF93IC0gb2ZmX3ggKiAyLAorCQkJCSAgICAgICB5ICsgKGN1bWwgKyBsYWJlbF9oKSAvIDIpKQorCQkJaWYgY3MgaW4gbGVnZW5kczoKKwkJCQlwcmludCgiQVJHSCAtIGR1cGxpY2F0ZSBwcm9jZXNzIGluIGxpc3QgISIpCisKKwkJbGVnZW5kcy5hcHBlbmQgKChjcywgcHJvY2Vzc190b3RhbF90aW1lKSkKKworCQliZWxvdyA9IHJvdworCisJIyByZW5kZXIgZ3JpZC1saW5lcyBvdmVyIHRoZSB0b3AKKwlkcmF3X2JveF90aWNrcyhjdHgsIGNoYXJ0X2JvdW5kcywgc2VjX3cpCisKKwkjIHJlbmRlciBsYWJlbHMKKwlmb3IgbCBpbiBsYWJlbHM6CisJCWRyYXdfdGV4dChjdHgsIGxbMF0sIFRFWFRfQ09MT1IsIGxbMV0sIGxbMl0pCisKKwkjIFJlbmRlciBsZWdlbmRzCisJZm9udF9oZWlnaHQgPSAyMAorCWxhYmVsX3dpZHRoID0gMzAwCisJTEVHRU5EU19QRVJfQ09MID0gMTUKKwlMRUdFTkRTX1RPVEFMID0gNDUKKwljdHguc2V0X2ZvbnRfc2l6ZSAoVElUTEVfRk9OVF9TSVpFKQorCWR1cl9zZWNzID0gZHVyYXRpb24gLyAxMDAKKwljcHVfc2VjcyA9IHRvdGFsX3RpbWUgLyAxMDAwMDAwMDAwCisKKwkjIG1pc2xlYWRpbmcgLSB3aXRoIG11bHRpcGxlIENQVXMgLi4uCisjCWlkbGUgPSAoKGR1cl9zZWNzIC0gY3B1X3NlY3MpIC8gZHVyX3NlY3MpICogMTAwLjAKKwlpZiBzdGF0X3R5cGUgaXMgU1RBVF9UWVBFX0NQVToKKwkJbGFiZWwgPSAiQ3VtdWxhdGl2ZSBDUFUgdXNhZ2UsIGJ5IHByb2Nlc3M7IHRvdGFsIENQVTogIiBcCisJCQkiICUuNWcocykgdGltZTogJS4zZyhzKSIgJSAoY3B1X3NlY3MsIGR1cl9zZWNzKQorCWVsc2U6CisJCWxhYmVsID0gIkN1bXVsYXRpdmUgSS9PIHVzYWdlLCBieSBwcm9jZXNzOyB0b3RhbCBJL086ICIgXAorCQkJIiAlLjVnKHMpIHRpbWU6ICUuM2cocykiICUgKGNwdV9zZWNzLCBkdXJfc2VjcykKKworCWRyYXdfdGV4dChjdHgsIGxhYmVsLCBURVhUX0NPTE9SLCBjaGFydF9ib3VuZHNbMF0gKyBvZmZfeCwKKwkJICBjaGFydF9ib3VuZHNbMV0gKyBmb250X2hlaWdodCkKKworCWkgPSAwCisJbGVnZW5kcyA9IHNvcnRlZChsZWdlbmRzLCBrZXk9aXRlbWdldHRlcigxKSwgcmV2ZXJzZT1UcnVlKQorCWN0eC5zZXRfZm9udF9zaXplKFRFWFRfRk9OVF9TSVpFKQorCWZvciB0IGluIGxlZ2VuZHM6CisJCWNzID0gdFswXQorCQl0aW1lID0gdFsxXQorCQl4ID0gY2hhcnRfYm91bmRzWzBdICsgb2ZmX3ggKyBpbnQgKGkvTEVHRU5EU19QRVJfQ09MKSAqIGxhYmVsX3dpZHRoCisJCXkgPSBjaGFydF9ib3VuZHNbMV0gKyBmb250X2hlaWdodCAqICgoaSAlIExFR0VORFNfUEVSX0NPTCkgKyAyKQorCQlzdHIgPSAiJXMgLSAlLjBmKG1zKSAoJTIuMmYlJSkiICUgKGNzLmNtZCwgdGltZS8xMDAwMDAwLCAodGltZS90b3RhbF90aW1lKSAqIDEwMC4wKQorCQlkcmF3X2xlZ2VuZF9ib3goY3R4LCBzdHIsIGNzLmNvbG9yLCB4LCB5LCBsZWdfcykKKwkJaSA9IGkgKyAxCisJCWlmIGkgPj0gTEVHRU5EU19UT1RBTDoKKwkJCWJyZWFrCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvZ3VpLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL2d1aS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmVkZDIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL2d1aS5weQpAQCAtMCwwICsxLDM1MCBAQAorIyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlib290Y2hhcnRndWkuCisKKyMgIHB5Ym9vdGNoYXJ0Z3VpIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyAgcHlib290Y2hhcnRndWkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgYWxvbmcgd2l0aCBweWJvb3RjaGFydGd1aS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitpbXBvcnQgZ29iamVjdAoraW1wb3J0IGd0aworaW1wb3J0IGd0ay5nZGsKK2ltcG9ydCBndGsua2V5c3ltcworZnJvbSAuIGltcG9ydCBkcmF3Citmcm9tIC5kcmF3IGltcG9ydCBSZW5kZXJPcHRpb25zCisKK2NsYXNzIFB5Qm9vdGNoYXJ0V2lkZ2V0KGd0ay5EcmF3aW5nQXJlYSk6CisgICAgX19nc2lnbmFsc19fID0geworICAgICAgICAgICAgJ2V4cG9zZS1ldmVudCc6ICdvdmVycmlkZScsCisgICAgICAgICAgICAnY2xpY2tlZCcgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsIGdvYmplY3QuVFlQRV9OT05FLCAoZ29iamVjdC5UWVBFX1NUUklORywgZ3RrLmdkay5FdmVudCkpLAorICAgICAgICAgICAgJ3Bvc2l0aW9uLWNoYW5nZWQnIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULCBnb2JqZWN0LlRZUEVfTk9ORSwgKGdvYmplY3QuVFlQRV9JTlQsIGdvYmplY3QuVFlQRV9JTlQpKSwKKyAgICAgICAgICAgICdzZXQtc2Nyb2xsLWFkanVzdG1lbnRzJyA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwgZ29iamVjdC5UWVBFX05PTkUsIChndGsuQWRqdXN0bWVudCwgZ3RrLkFkanVzdG1lbnQpKQorICAgIH0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFjZSwgb3B0aW9ucywgeHNjYWxlKToKKyAgICAgICAgZ3RrLkRyYXdpbmdBcmVhLl9faW5pdF9fKHNlbGYpCisKKyAgICAgICAgc2VsZi50cmFjZSA9IHRyYWNlCisgICAgICAgIHNlbGYub3B0aW9ucyA9IG9wdGlvbnMKKworICAgICAgICBzZWxmLnNldF9mbGFncyhndGsuQ0FOX0ZPQ1VTKQorCisgICAgICAgIHNlbGYuYWRkX2V2ZW50cyhndGsuZ2RrLkJVVFRPTl9QUkVTU19NQVNLIHwgZ3RrLmdkay5CVVRUT05fUkVMRUFTRV9NQVNLKQorICAgICAgICBzZWxmLmNvbm5lY3QoImJ1dHRvbi1wcmVzcy1ldmVudCIsIHNlbGYub25fYXJlYV9idXR0b25fcHJlc3MpCisgICAgICAgIHNlbGYuY29ubmVjdCgiYnV0dG9uLXJlbGVhc2UtZXZlbnQiLCBzZWxmLm9uX2FyZWFfYnV0dG9uX3JlbGVhc2UpCisgICAgICAgIHNlbGYuYWRkX2V2ZW50cyhndGsuZ2RrLlBPSU5URVJfTU9USU9OX01BU0sgfCBndGsuZ2RrLlBPSU5URVJfTU9USU9OX0hJTlRfTUFTSyB8IGd0ay5nZGsuQlVUVE9OX1JFTEVBU0VfTUFTSykKKyAgICAgICAgc2VsZi5jb25uZWN0KCJtb3Rpb24tbm90aWZ5LWV2ZW50Iiwgc2VsZi5vbl9hcmVhX21vdGlvbl9ub3RpZnkpCisgICAgICAgIHNlbGYuY29ubmVjdCgic2Nyb2xsLWV2ZW50Iiwgc2VsZi5vbl9hcmVhX3Njcm9sbF9ldmVudCkKKyAgICAgICAgc2VsZi5jb25uZWN0KCdrZXktcHJlc3MtZXZlbnQnLCBzZWxmLm9uX2tleV9wcmVzc19ldmVudCkKKworICAgICAgICBzZWxmLmNvbm5lY3QoJ3NldC1zY3JvbGwtYWRqdXN0bWVudHMnLCBzZWxmLm9uX3NldF9zY3JvbGxfYWRqdXN0bWVudHMpCisgICAgICAgIHNlbGYuY29ubmVjdCgic2l6ZS1hbGxvY2F0ZSIsIHNlbGYub25fYWxsb2NhdGlvbl9zaXplX2NoYW5nZWQpCisgICAgICAgIHNlbGYuY29ubmVjdCgicG9zaXRpb24tY2hhbmdlZCIsIHNlbGYub25fcG9zaXRpb25fY2hhbmdlZCkKKworICAgICAgICBzZWxmLnpvb21fcmF0aW8gPSAxLjAKKyAgICAgICAgc2VsZi54c2NhbGUgPSB4c2NhbGUKKyAgICAgICAgc2VsZi54LCBzZWxmLnkgPSAwLjAsIDAuMAorCisgICAgICAgIHNlbGYuY2hhcnRfd2lkdGgsIHNlbGYuY2hhcnRfaGVpZ2h0ID0gZHJhdy5leHRlbnRzKHNlbGYub3B0aW9ucywgc2VsZi54c2NhbGUsIHNlbGYudHJhY2UpCisgICAgICAgIHNlbGYuaGFkaiA9IE5vbmUKKyAgICAgICAgc2VsZi52YWRqID0gTm9uZQorICAgICAgICBzZWxmLmhhZGpfY2hhbmdlZF9zaWduYWxfaWQgPSBOb25lCisgICAgICAgIHNlbGYudmFkal9jaGFuZ2VkX3NpZ25hbF9pZCA9IE5vbmUKKworICAgIGRlZiBkb19leHBvc2VfZXZlbnQoc2VsZiwgZXZlbnQpOgorICAgICAgICBjciA9IHNlbGYud2luZG93LmNhaXJvX2NyZWF0ZSgpCisKKyAgICAgICAgIyBzZXQgYSBjbGlwIHJlZ2lvbiBmb3IgdGhlIGV4cG9zZSBldmVudAorICAgICAgICBjci5yZWN0YW5nbGUoCisgICAgICAgICAgICAgICAgZXZlbnQuYXJlYS54LCBldmVudC5hcmVhLnksCisgICAgICAgICAgICAgICAgZXZlbnQuYXJlYS53aWR0aCwgZXZlbnQuYXJlYS5oZWlnaHQKKyAgICAgICAgKQorICAgICAgICBjci5jbGlwKCkKKyAgICAgICAgc2VsZi5kcmF3KGNyLCBzZWxmLmdldF9hbGxvY2F0aW9uKCkpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGRyYXcoc2VsZiwgY3IsIHJlY3QpOgorICAgICAgICBjci5zZXRfc291cmNlX3JnYmEoMS4wLCAxLjAsIDEuMCwgMS4wKQorICAgICAgICBjci5wYWludCgpCisgICAgICAgIGNyLnNjYWxlKHNlbGYuem9vbV9yYXRpbywgc2VsZi56b29tX3JhdGlvKQorICAgICAgICBjci50cmFuc2xhdGUoLXNlbGYueCwgLXNlbGYueSkKKyAgICAgICAgZHJhdy5yZW5kZXIoY3IsIHNlbGYub3B0aW9ucywgc2VsZi54c2NhbGUsIHNlbGYudHJhY2UpCisKKyAgICBkZWYgcG9zaXRpb25fY2hhbmdlZChzZWxmKToKKyAgICAgICAgc2VsZi5lbWl0KCJwb3NpdGlvbi1jaGFuZ2VkIiwgc2VsZi54LCBzZWxmLnkpCisKKyAgICBaT09NX0lOQ1JFTUVOVCA9IDEuMjUKKworICAgIGRlZiB6b29tX2ltYWdlIChzZWxmLCB6b29tX3JhdGlvKToKKyAgICAgICAgc2VsZi56b29tX3JhdGlvID0gem9vbV9yYXRpbworICAgICAgICBzZWxmLl9zZXRfc2Nyb2xsX2FkanVzdG1lbnRzIChzZWxmLmhhZGosIHNlbGYudmFkaikKKyAgICAgICAgc2VsZi5xdWV1ZV9kcmF3KCkKKworICAgIGRlZiB6b29tX3RvX3JlY3QgKHNlbGYsIHJlY3QpOgorICAgICAgICB6b29tX3JhdGlvID0gZmxvYXQocmVjdC53aWR0aCkvZmxvYXQoc2VsZi5jaGFydF93aWR0aCkKKyAgICAgICAgc2VsZi56b29tX2ltYWdlKHpvb21fcmF0aW8pCisgICAgICAgIHNlbGYueCA9IDAKKyAgICAgICAgc2VsZi5wb3NpdGlvbl9jaGFuZ2VkKCkKKworICAgIGRlZiBzZXRfeHNjYWxlKHNlbGYsIHhzY2FsZSk6CisgICAgICAgIG9sZF9taWRfeCA9IHNlbGYueCArIHNlbGYuaGFkai5wYWdlX3NpemUgLyAyCisgICAgICAgIHNlbGYueHNjYWxlID0geHNjYWxlCisgICAgICAgIHNlbGYuY2hhcnRfd2lkdGgsIHNlbGYuY2hhcnRfaGVpZ2h0ID0gZHJhdy5leHRlbnRzKHNlbGYub3B0aW9ucywgc2VsZi54c2NhbGUsIHNlbGYudHJhY2UpCisgICAgICAgIG5ld194ID0gb2xkX21pZF94CisgICAgICAgIHNlbGYuem9vbV9pbWFnZSAoc2VsZi56b29tX3JhdGlvKQorCisgICAgZGVmIG9uX2V4cGFuZChzZWxmLCBhY3Rpb24pOgorICAgICAgICBzZWxmLnNldF94c2NhbGUgKGludChzZWxmLnhzY2FsZSAqIDEuNSArIDAuNSkpCisKKyAgICBkZWYgb25fY29udHJhY3Qoc2VsZiwgYWN0aW9uKToKKyAgICAgICAgc2VsZi5zZXRfeHNjYWxlIChtYXgoaW50KHNlbGYueHNjYWxlIC8gMS41KSwgMSkpCisKKyAgICBkZWYgb25fem9vbV9pbihzZWxmLCBhY3Rpb24pOgorICAgICAgICBzZWxmLnpvb21faW1hZ2Uoc2VsZi56b29tX3JhdGlvICogc2VsZi5aT09NX0lOQ1JFTUVOVCkKKworICAgIGRlZiBvbl96b29tX291dChzZWxmLCBhY3Rpb24pOgorICAgICAgICBzZWxmLnpvb21faW1hZ2Uoc2VsZi56b29tX3JhdGlvIC8gc2VsZi5aT09NX0lOQ1JFTUVOVCkKKworICAgIGRlZiBvbl96b29tX2ZpdChzZWxmLCBhY3Rpb24pOgorICAgICAgICBzZWxmLnpvb21fdG9fcmVjdChzZWxmLmdldF9hbGxvY2F0aW9uKCkpCisKKyAgICBkZWYgb25fem9vbV8xMDAoc2VsZiwgYWN0aW9uKToKKyAgICAgICAgc2VsZi56b29tX2ltYWdlKDEuMCkKKyAgICAgICAgc2VsZi5zZXRfeHNjYWxlKDEuMCkKKworICAgIGRlZiBzaG93X3RvZ2dsZWQoc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5vcHRpb25zLmFwcF9vcHRpb25zLnNob3dfYWxsID0gYnV0dG9uLmdldF9wcm9wZXJ0eSAoJ2FjdGl2ZScpCisgICAgICAgIHNlbGYuY2hhcnRfd2lkdGgsIHNlbGYuY2hhcnRfaGVpZ2h0ID0gZHJhdy5leHRlbnRzKHNlbGYub3B0aW9ucywgc2VsZi54c2NhbGUsIHNlbGYudHJhY2UpCisgICAgICAgIHNlbGYuX3NldF9zY3JvbGxfYWRqdXN0bWVudHMoc2VsZi5oYWRqLCBzZWxmLnZhZGopCisgICAgICAgIHNlbGYucXVldWVfZHJhdygpCisKKyAgICBQT1NfSU5DUkVNRU5UID0gMTAwCisKKyAgICBkZWYgb25fa2V5X3ByZXNzX2V2ZW50KHNlbGYsIHdpZGdldCwgZXZlbnQpOgorICAgICAgICBpZiBldmVudC5rZXl2YWwgPT0gZ3RrLmtleXN5bXMuTGVmdDoKKyAgICAgICAgICAgIHNlbGYueCAtPSBzZWxmLlBPU19JTkNSRU1FTlQvc2VsZi56b29tX3JhdGlvCisgICAgICAgIGVsaWYgZXZlbnQua2V5dmFsID09IGd0ay5rZXlzeW1zLlJpZ2h0OgorICAgICAgICAgICAgc2VsZi54ICs9IHNlbGYuUE9TX0lOQ1JFTUVOVC9zZWxmLnpvb21fcmF0aW8KKyAgICAgICAgZWxpZiBldmVudC5rZXl2YWwgPT0gZ3RrLmtleXN5bXMuVXA6CisgICAgICAgICAgICBzZWxmLnkgLT0gc2VsZi5QT1NfSU5DUkVNRU5UL3NlbGYuem9vbV9yYXRpbworICAgICAgICBlbGlmIGV2ZW50LmtleXZhbCA9PSBndGsua2V5c3ltcy5Eb3duOgorICAgICAgICAgICAgc2VsZi55ICs9IHNlbGYuUE9TX0lOQ1JFTUVOVC9zZWxmLnpvb21fcmF0aW8KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBzZWxmLnF1ZXVlX2RyYXcoKQorICAgICAgICBzZWxmLnBvc2l0aW9uX2NoYW5nZWQoKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIG9uX2FyZWFfYnV0dG9uX3ByZXNzKHNlbGYsIGFyZWEsIGV2ZW50KToKKyAgICAgICAgaWYgZXZlbnQuYnV0dG9uID09IDIgb3IgZXZlbnQuYnV0dG9uID09IDE6CisgICAgICAgICAgICBhcmVhLndpbmRvdy5zZXRfY3Vyc29yKGd0ay5nZGsuQ3Vyc29yKGd0ay5nZGsuRkxFVVIpKQorICAgICAgICAgICAgc2VsZi5wcmV2bW91c2V4ID0gZXZlbnQueAorICAgICAgICAgICAgc2VsZi5wcmV2bW91c2V5ID0gZXZlbnQueQorICAgICAgICBpZiBldmVudC50eXBlIG5vdCBpbiAoZ3RrLmdkay5CVVRUT05fUFJFU1MsIGd0ay5nZGsuQlVUVE9OX1JFTEVBU0UpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIG9uX2FyZWFfYnV0dG9uX3JlbGVhc2Uoc2VsZiwgYXJlYSwgZXZlbnQpOgorICAgICAgICBpZiBldmVudC5idXR0b24gPT0gMiBvciBldmVudC5idXR0b24gPT0gMToKKyAgICAgICAgICAgIGFyZWEud2luZG93LnNldF9jdXJzb3IoZ3RrLmdkay5DdXJzb3IoZ3RrLmdkay5BUlJPVykpCisgICAgICAgICAgICBzZWxmLnByZXZtb3VzZXggPSBOb25lCisgICAgICAgICAgICBzZWxmLnByZXZtb3VzZXkgPSBOb25lCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBvbl9hcmVhX3Njcm9sbF9ldmVudChzZWxmLCBhcmVhLCBldmVudCk6CisgICAgICAgIGlmIGV2ZW50LnN0YXRlICYgZ3RrLmdkay5DT05UUk9MX01BU0s6CisgICAgICAgICAgICBpZiBldmVudC5kaXJlY3Rpb24gPT0gZ3RrLmdkay5TQ1JPTExfVVA6CisgICAgICAgICAgICAgICAgc2VsZi56b29tX2ltYWdlKHNlbGYuem9vbV9yYXRpbyAqIHNlbGYuWk9PTV9JTkNSRU1FTlQpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGlmIGV2ZW50LmRpcmVjdGlvbiA9PSBndGsuZ2RrLlNDUk9MTF9ET1dOOgorICAgICAgICAgICAgICAgIHNlbGYuem9vbV9pbWFnZShzZWxmLnpvb21fcmF0aW8gLyBzZWxmLlpPT01fSU5DUkVNRU5UKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBvbl9hcmVhX21vdGlvbl9ub3RpZnkoc2VsZiwgYXJlYSwgZXZlbnQpOgorICAgICAgICBzdGF0ZSA9IGV2ZW50LnN0YXRlCisgICAgICAgIGlmIHN0YXRlICYgZ3RrLmdkay5CVVRUT04yX01BU0sgb3Igc3RhdGUgJiBndGsuZ2RrLkJVVFRPTjFfTUFTSzoKKyAgICAgICAgICAgIHgsIHkgPSBpbnQoZXZlbnQueCksIGludChldmVudC55KQorICAgICAgICAgICAgIyBwYW4gdGhlIGltYWdlCisgICAgICAgICAgICBzZWxmLnggKz0gKHNlbGYucHJldm1vdXNleCAtIHgpL3NlbGYuem9vbV9yYXRpbworICAgICAgICAgICAgc2VsZi55ICs9IChzZWxmLnByZXZtb3VzZXkgLSB5KS9zZWxmLnpvb21fcmF0aW8KKyAgICAgICAgICAgIHNlbGYucXVldWVfZHJhdygpCisgICAgICAgICAgICBzZWxmLnByZXZtb3VzZXggPSB4CisgICAgICAgICAgICBzZWxmLnByZXZtb3VzZXkgPSB5CisgICAgICAgICAgICBzZWxmLnBvc2l0aW9uX2NoYW5nZWQoKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIG9uX3NldF9zY3JvbGxfYWRqdXN0bWVudHMoc2VsZiwgYXJlYSwgaGFkaiwgdmFkaik6CisgICAgICAgIHNlbGYuX3NldF9zY3JvbGxfYWRqdXN0bWVudHMgKGhhZGosIHZhZGopCisKKyAgICBkZWYgb25fYWxsb2NhdGlvbl9zaXplX2NoYW5nZWQoc2VsZiwgd2lkZ2V0LCBhbGxvY2F0aW9uKToKKyAgICAgICAgc2VsZi5oYWRqLnBhZ2Vfc2l6ZSA9IGFsbG9jYXRpb24ud2lkdGgKKyAgICAgICAgc2VsZi5oYWRqLnBhZ2VfaW5jcmVtZW50ID0gYWxsb2NhdGlvbi53aWR0aCAqIDAuOQorICAgICAgICBzZWxmLnZhZGoucGFnZV9zaXplID0gYWxsb2NhdGlvbi5oZWlnaHQKKyAgICAgICAgc2VsZi52YWRqLnBhZ2VfaW5jcmVtZW50ID0gYWxsb2NhdGlvbi5oZWlnaHQgKiAwLjkKKworICAgIGRlZiBfc2V0X2Fkal91cHBlcihzZWxmLCBhZGosIHVwcGVyKToKKyAgICAgICAgY2hhbmdlZCA9IEZhbHNlCisgICAgICAgIHZhbHVlX2NoYW5nZWQgPSBGYWxzZQorCisgICAgICAgIGlmIGFkai51cHBlciAhPSB1cHBlcjoKKyAgICAgICAgICAgIGFkai51cHBlciA9IHVwcGVyCisgICAgICAgICAgICBjaGFuZ2VkID0gVHJ1ZQorCisgICAgICAgIG1heF92YWx1ZSA9IG1heCgwLjAsIHVwcGVyIC0gYWRqLnBhZ2Vfc2l6ZSkKKyAgICAgICAgaWYgYWRqLnZhbHVlID4gbWF4X3ZhbHVlOgorICAgICAgICAgICAgYWRqLnZhbHVlID0gbWF4X3ZhbHVlCisgICAgICAgICAgICB2YWx1ZV9jaGFuZ2VkID0gVHJ1ZQorCisgICAgICAgIGlmIGNoYW5nZWQ6CisgICAgICAgICAgICBhZGouY2hhbmdlZCgpCisgICAgICAgIGlmIHZhbHVlX2NoYW5nZWQ6CisgICAgICAgICAgICBhZGoudmFsdWVfY2hhbmdlZCgpCisKKyAgICBkZWYgX3NldF9zY3JvbGxfYWRqdXN0bWVudHMoc2VsZiwgaGFkaiwgdmFkaik6CisgICAgICAgIGlmIGhhZGogPT0gTm9uZToKKyAgICAgICAgICAgIGhhZGogPSBndGsuQWRqdXN0bWVudCgwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wKQorICAgICAgICBpZiB2YWRqID09IE5vbmU6CisgICAgICAgICAgICB2YWRqID0gZ3RrLkFkanVzdG1lbnQoMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCkKKworICAgICAgICBpZiBzZWxmLmhhZGpfY2hhbmdlZF9zaWduYWxfaWQgIT0gTm9uZSBhbmQgXAorICAgICAgICAgICBzZWxmLmhhZGogIT0gTm9uZSBhbmQgaGFkaiAhPSBzZWxmLmhhZGo6CisgICAgICAgICAgICBzZWxmLmhhZGouZGlzY29ubmVjdCAoc2VsZi5oYWRqX2NoYW5nZWRfc2lnbmFsX2lkKQorICAgICAgICBpZiBzZWxmLnZhZGpfY2hhbmdlZF9zaWduYWxfaWQgIT0gTm9uZSBhbmQgXAorICAgICAgICAgICBzZWxmLnZhZGogIT0gTm9uZSBhbmQgdmFkaiAhPSBzZWxmLnZhZGo6CisgICAgICAgICAgICBzZWxmLnZhZGouZGlzY29ubmVjdCAoc2VsZi52YWRqX2NoYW5nZWRfc2lnbmFsX2lkKQorCisgICAgICAgIGlmIGhhZGogIT0gTm9uZToKKyAgICAgICAgICAgIHNlbGYuaGFkaiA9IGhhZGoKKyAgICAgICAgICAgIHNlbGYuX3NldF9hZGpfdXBwZXIgKHNlbGYuaGFkaiwgc2VsZi56b29tX3JhdGlvICogc2VsZi5jaGFydF93aWR0aCkKKyAgICAgICAgICAgIHNlbGYuaGFkal9jaGFuZ2VkX3NpZ25hbF9pZCA9IHNlbGYuaGFkai5jb25uZWN0KCd2YWx1ZS1jaGFuZ2VkJywgc2VsZi5vbl9hZGp1c3RtZW50c19jaGFuZ2VkKQorCisgICAgICAgIGlmIHZhZGogIT0gTm9uZToKKyAgICAgICAgICAgIHNlbGYudmFkaiA9IHZhZGoKKyAgICAgICAgICAgIHNlbGYuX3NldF9hZGpfdXBwZXIgKHNlbGYudmFkaiwgc2VsZi56b29tX3JhdGlvICogc2VsZi5jaGFydF9oZWlnaHQpCisgICAgICAgICAgICBzZWxmLnZhZGpfY2hhbmdlZF9zaWduYWxfaWQgPSBzZWxmLnZhZGouY29ubmVjdCgndmFsdWUtY2hhbmdlZCcsIHNlbGYub25fYWRqdXN0bWVudHNfY2hhbmdlZCkKKworICAgIGRlZiBvbl9hZGp1c3RtZW50c19jaGFuZ2VkKHNlbGYsIGFkaik6CisgICAgICAgIHNlbGYueCA9IHNlbGYuaGFkai52YWx1ZSAvIHNlbGYuem9vbV9yYXRpbworICAgICAgICBzZWxmLnkgPSBzZWxmLnZhZGoudmFsdWUgLyBzZWxmLnpvb21fcmF0aW8KKyAgICAgICAgc2VsZi5xdWV1ZV9kcmF3KCkKKworICAgIGRlZiBvbl9wb3NpdGlvbl9jaGFuZ2VkKHNlbGYsIHdpZGdldCwgeCwgeSk6CisgICAgICAgIHNlbGYuaGFkai52YWx1ZSA9IHggKiBzZWxmLnpvb21fcmF0aW8KKyAgICAgICAgc2VsZi52YWRqLnZhbHVlID0geSAqIHNlbGYuem9vbV9yYXRpbworCitQeUJvb3RjaGFydFdpZGdldC5zZXRfc2V0X3Njcm9sbF9hZGp1c3RtZW50c19zaWduYWwoJ3NldC1zY3JvbGwtYWRqdXN0bWVudHMnKQorCitjbGFzcyBQeUJvb3RjaGFydFNoZWxsKGd0ay5WQm94KToKKyAgICB1aSA9ICcnJworICAgIDx1aT4KKyAgICAgICAgICAgIDx0b29sYmFyIG5hbWU9IlRvb2xCYXIiPgorICAgICAgICAgICAgICAgICAgICA8dG9vbGl0ZW0gYWN0aW9uPSJFeHBhbmQiLz4KKyAgICAgICAgICAgICAgICAgICAgPHRvb2xpdGVtIGFjdGlvbj0iQ29udHJhY3QiLz4KKyAgICAgICAgICAgICAgICAgICAgPHNlcGFyYXRvci8+CisgICAgICAgICAgICAgICAgICAgIDx0b29saXRlbSBhY3Rpb249Ilpvb21JbiIvPgorICAgICAgICAgICAgICAgICAgICA8dG9vbGl0ZW0gYWN0aW9uPSJab29tT3V0Ii8+CisgICAgICAgICAgICAgICAgICAgIDx0b29saXRlbSBhY3Rpb249Ilpvb21GaXQiLz4KKyAgICAgICAgICAgICAgICAgICAgPHRvb2xpdGVtIGFjdGlvbj0iWm9vbTEwMCIvPgorICAgICAgICAgICAgPC90b29sYmFyPgorICAgIDwvdWk+CisgICAgJycnCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdpbmRvdywgdHJhY2UsIG9wdGlvbnMsIHhzY2FsZSk6CisgICAgICAgIGd0ay5WQm94Ll9faW5pdF9fKHNlbGYpCisKKyAgICAgICAgc2VsZi53aWRnZXQgPSBQeUJvb3RjaGFydFdpZGdldCh0cmFjZSwgb3B0aW9ucywgeHNjYWxlKQorCisgICAgICAgICMgQ3JlYXRlIGEgVUlNYW5hZ2VyIGluc3RhbmNlCisgICAgICAgIHVpbWFuYWdlciA9IHNlbGYudWltYW5hZ2VyID0gZ3RrLlVJTWFuYWdlcigpCisKKyAgICAgICAgIyBBZGQgdGhlIGFjY2VsZXJhdG9yIGdyb3VwIHRvIHRoZSB0b3BsZXZlbCB3aW5kb3cKKyAgICAgICAgYWNjZWxncm91cCA9IHVpbWFuYWdlci5nZXRfYWNjZWxfZ3JvdXAoKQorICAgICAgICB3aW5kb3cuYWRkX2FjY2VsX2dyb3VwKGFjY2VsZ3JvdXApCisKKyAgICAgICAgIyBDcmVhdGUgYW4gQWN0aW9uR3JvdXAKKyAgICAgICAgYWN0aW9uZ3JvdXAgPSBndGsuQWN0aW9uR3JvdXAoJ0FjdGlvbnMnKQorICAgICAgICBzZWxmLmFjdGlvbmdyb3VwID0gYWN0aW9uZ3JvdXAKKworICAgICAgICAjIENyZWF0ZSBhY3Rpb25zCisgICAgICAgIGFjdGlvbmdyb3VwLmFkZF9hY3Rpb25zKCgKKyAgICAgICAgICAgICAgICAoJ0V4cGFuZCcsIGd0ay5TVE9DS19BREQsIE5vbmUsIE5vbmUsIE5vbmUsIHNlbGYud2lkZ2V0Lm9uX2V4cGFuZCksCisgICAgICAgICAgICAgICAgKCdDb250cmFjdCcsIGd0ay5TVE9DS19SRU1PVkUsIE5vbmUsIE5vbmUsIE5vbmUsIHNlbGYud2lkZ2V0Lm9uX2NvbnRyYWN0KSwKKyAgICAgICAgICAgICAgICAoJ1pvb21JbicsIGd0ay5TVE9DS19aT09NX0lOLCBOb25lLCBOb25lLCBOb25lLCBzZWxmLndpZGdldC5vbl96b29tX2luKSwKKyAgICAgICAgICAgICAgICAoJ1pvb21PdXQnLCBndGsuU1RPQ0tfWk9PTV9PVVQsIE5vbmUsIE5vbmUsIE5vbmUsIHNlbGYud2lkZ2V0Lm9uX3pvb21fb3V0KSwKKyAgICAgICAgICAgICAgICAoJ1pvb21GaXQnLCBndGsuU1RPQ0tfWk9PTV9GSVQsICdGaXQgV2lkdGgnLCBOb25lLCBOb25lLCBzZWxmLndpZGdldC5vbl96b29tX2ZpdCksCisgICAgICAgICAgICAgICAgKCdab29tMTAwJywgZ3RrLlNUT0NLX1pPT01fMTAwLCBOb25lLCBOb25lLCBOb25lLCBzZWxmLndpZGdldC5vbl96b29tXzEwMCksCisgICAgICAgICkpCisKKyAgICAgICAgIyBBZGQgdGhlIGFjdGlvbmdyb3VwIHRvIHRoZSB1aW1hbmFnZXIKKyAgICAgICAgdWltYW5hZ2VyLmluc2VydF9hY3Rpb25fZ3JvdXAoYWN0aW9uZ3JvdXAsIDApCisKKyAgICAgICAgIyBBZGQgYSBVSSBkZXNjcmlwdGlvbgorICAgICAgICB1aW1hbmFnZXIuYWRkX3VpX2Zyb21fc3RyaW5nKHNlbGYudWkpCisKKyAgICAgICAgIyBTY3JvbGxlZCB3aW5kb3cKKyAgICAgICAgc2Nyb2xsZWQgPSBndGsuU2Nyb2xsZWRXaW5kb3coKQorICAgICAgICBzY3JvbGxlZC5hZGQoc2VsZi53aWRnZXQpCisKKyAgICAgICAgIyB0b29sYmFyIC8gaC1ib3gKKyAgICAgICAgaGJveCA9IGd0ay5IQm94KEZhbHNlLCA4KQorCisgICAgICAgICMgQ3JlYXRlIGEgVG9vbGJhcgorICAgICAgICB0b29sYmFyID0gdWltYW5hZ2VyLmdldF93aWRnZXQoJy9Ub29sQmFyJykKKyAgICAgICAgaGJveC5wYWNrX3N0YXJ0KHRvb2xiYXIsIFRydWUsIFRydWUpCisKKyAgICAgICAgaWYgbm90IG9wdGlvbnMua2VybmVsX29ubHk6CisgICAgICAgICAgICAjIE1pc2MuIG9wdGlvbnMKKyAgICAgICAgICAgIGJ1dHRvbiA9IGd0ay5DaGVja0J1dHRvbigiU2hvdyBtb3JlIikKKyAgICAgICAgICAgIGJ1dHRvbi5jb25uZWN0ICgndG9nZ2xlZCcsIHNlbGYud2lkZ2V0LnNob3dfdG9nZ2xlZCkKKyAgICAgICAgICAgIGJ1dHRvbi5zZXRfYWN0aXZlKG9wdGlvbnMuYXBwX29wdGlvbnMuc2hvd19hbGwpCisgICAgICAgICAgICBoYm94LnBhY2tfc3RhcnQgKGJ1dHRvbiwgRmFsc2UsIFRydWUpCisKKyAgICAgICAgc2VsZi5wYWNrX3N0YXJ0KGhib3gsIEZhbHNlKQorICAgICAgICBzZWxmLnBhY2tfc3RhcnQoc2Nyb2xsZWQpCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorCisgICAgZGVmIGdyYWJfZm9jdXMoc2VsZiwgd2luZG93KToKKyAgICAgICAgd2luZG93LnNldF9mb2N1cyhzZWxmLndpZGdldCkKKworCitjbGFzcyBQeUJvb3RjaGFydFdpbmRvdyhndGsuV2luZG93KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFjZSwgYXBwX29wdGlvbnMpOgorICAgICAgICBndGsuV2luZG93Ll9faW5pdF9fKHNlbGYpCisKKyAgICAgICAgd2luZG93ID0gc2VsZgorICAgICAgICB3aW5kb3cuc2V0X3RpdGxlKCJCb290Y2hhcnQgJXMiICUgdHJhY2UuZmlsZW5hbWUpCisgICAgICAgIHdpbmRvdy5zZXRfZGVmYXVsdF9zaXplKDc1MCwgNTUwKQorCisgICAgICAgIHRhYl9wYWdlID0gZ3RrLk5vdGVib29rKCkKKyAgICAgICAgdGFiX3BhZ2Uuc2hvdygpCisgICAgICAgIHdpbmRvdy5hZGQodGFiX3BhZ2UpCisKKyAgICAgICAgZnVsbF9vcHRzID0gUmVuZGVyT3B0aW9ucyhhcHBfb3B0aW9ucykKKyAgICAgICAgZnVsbF90cmVlID0gUHlCb290Y2hhcnRTaGVsbCh3aW5kb3csIHRyYWNlLCBmdWxsX29wdHMsIDEuMCkKKyAgICAgICAgdGFiX3BhZ2UuYXBwZW5kX3BhZ2UgKGZ1bGxfdHJlZSwgZ3RrLkxhYmVsKCJGdWxsIHRyZWUiKSkKKworICAgICAgICBpZiB0cmFjZS5rZXJuZWwgaXMgbm90IE5vbmUgYW5kIGxlbiAodHJhY2Uua2VybmVsKSA+IDI6CisgICAgICAgICAgICBrZXJuZWxfb3B0cyA9IFJlbmRlck9wdGlvbnMoYXBwX29wdGlvbnMpCisgICAgICAgICAgICBrZXJuZWxfb3B0cy5jdW11bGF0aXZlID0gRmFsc2UKKyAgICAgICAgICAgIGtlcm5lbF9vcHRzLmNoYXJ0cyA9IEZhbHNlCisgICAgICAgICAgICBrZXJuZWxfb3B0cy5rZXJuZWxfb25seSA9IFRydWUKKyAgICAgICAgICAgIGtlcm5lbF90cmVlID0gUHlCb290Y2hhcnRTaGVsbCh3aW5kb3csIHRyYWNlLCBrZXJuZWxfb3B0cywgNS4wKQorICAgICAgICAgICAgdGFiX3BhZ2UuYXBwZW5kX3BhZ2UgKGtlcm5lbF90cmVlLCBndGsuTGFiZWwoIktlcm5lbCBib290IikpCisKKyAgICAgICAgZnVsbF90cmVlLmdyYWJfZm9jdXMoc2VsZikKKyAgICAgICAgc2VsZi5zaG93KCkKKworCitkZWYgc2hvdyh0cmFjZSwgb3B0aW9ucyk6CisgICAgd2luID0gUHlCb290Y2hhcnRXaW5kb3codHJhY2UsIG9wdGlvbnMpCisgICAgd2luLmNvbm5lY3QoJ2Rlc3Ryb3knLCBndGsubWFpbl9xdWl0KQorICAgIGd0ay5tYWluKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9tYWluLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL21haW4ucHkKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uYjQ1YWUwYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9tYWluLnB5CkBAIC0wLDAgKzEgQEAKK21haW4ucHkuaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvbWFpbi5weS5pbiBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9tYWluLnB5LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYmIwYmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvbWFpbi5weS5pbgpAQCAtMCwwICsxLDE4NyBAQAorIworIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgV2FybmluZzogVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGZyb20gbWFpbi5weS5pbiAtIGVkaXQgaXQgdGhlcmUuCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjCisjICBweWJvb3RjaGFydGd1aSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgIHB5Ym9vdGNoYXJ0Z3VpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgIGFsb25nIHdpdGggcHlib290Y2hhcnRndWkuIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBvcHRwYXJzZQorCitmcm9tIC4gaW1wb3J0IHBhcnNpbmcKK2Zyb20gLiBpbXBvcnQgYmF0Y2gKKworZGVmIF9ta19vcHRpb25zX3BhcnNlcigpOgorCSIiIk1ha2UgYW4gb3B0aW9ucyBwYXJzZXIuIiIiCisJdXNhZ2UgPSAiJXByb2cgW29wdGlvbnNdIC9wYXRoL3RvL3RtcC9idWlsZHN0YXRzLzxyZWNpcGUtbWFjaGluZT4vPEJVSUxETkFNRT4vIgorCXZlcnNpb24gPSAiJXByb2cgdjEuMC4wIgorCXBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSwgdmVyc2lvbj12ZXJzaW9uKQorCXBhcnNlci5hZGRfb3B0aW9uKCItaSIsICItLWludGVyYWN0aXZlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0iaW50ZXJhY3RpdmUiLCBkZWZhdWx0PUZhbHNlLCAKKwkJCSAgaGVscD0ic3RhcnQgaW4gYWN0aXZlIG1vZGUiKQorCXBhcnNlci5hZGRfb3B0aW9uKCItZiIsICItLWZvcm1hdCIsIGRlc3Q9ImZvcm1hdCIsIGRlZmF1bHQ9InBuZyIsIGNob2ljZXM9WyJwbmciLCAic3ZnIiwgInBkZiJdLAorCQkJICBoZWxwPSJpbWFnZSBmb3JtYXQgKHBuZywgc3ZnLCBwZGYpOyBkZWZhdWx0IGZvcm1hdCBwbmciKQorCXBhcnNlci5hZGRfb3B0aW9uKCItbyIsICItLW91dHB1dCIsIGRlc3Q9Im91dHB1dCIsIG1ldGF2YXI9IlBBVEgiLCBkZWZhdWx0PU5vbmUsCisJCQkgIGhlbHA9Im91dHB1dCBwYXRoIChmaWxlIG9yIGRpcmVjdG9yeSkgd2hlcmUgY2hhcnRzIGFyZSBzdG9yZWQiKQorCXBhcnNlci5hZGRfb3B0aW9uKCItcyIsICItLXNwbGl0IiwgZGVzdD0ibnVtIiwgdHlwZT1pbnQsIGRlZmF1bHQ9MSwKKwkJCSAgaGVscD0ic3BsaXQgdGhlIG91dHB1dCBjaGFydCBpbnRvIDxOVU0+IGNoYXJ0cywgb25seSB3b3JrcyB3aXRoIFwiLW8gUEFUSFwiIikKKwlwYXJzZXIuYWRkX29wdGlvbigiLW0iLCAiLS1taW50aW1lIiwgZGVzdD0ibWludGltZSIsIHR5cGU9aW50LCBkZWZhdWx0PTgsCisJCQkgIGhlbHA9Im9ubHkgdGFza3MgbG9uZ2VyIHRoYW4gdGhpcyB0aW1lIHdpbGwgYmUgZGlzcGxheWVkIikKKwlwYXJzZXIuYWRkX29wdGlvbigiLU0iLCAiLS1taW51dGVzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0iYXNfbWludXRlcyIsIGRlZmF1bHQ9RmFsc2UsCisJCQkgIGhlbHA9ImRpc3BsYXkgdGltZSBpbiBtaW51dGVzIGluc3RlYWQgb2Ygc2Vjb25kcyIpCisjCXBhcnNlci5hZGRfb3B0aW9uKCItbiIsICItLW5vLXBydW5lIiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9InBydW5lIiwgZGVmYXVsdD1UcnVlLAorIwkJCSAgaGVscD0iZG8gbm90IHBydW5lIHRoZSBwcm9jZXNzIHRyZWUiKQorCXBhcnNlci5hZGRfb3B0aW9uKCItcSIsICItLXF1aWV0IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0icXVpZXQiLCBkZWZhdWx0PUZhbHNlLAorCQkJICBoZWxwPSJzdXBwcmVzcyBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIikKKyMJcGFyc2VyLmFkZF9vcHRpb24oIi10IiwgIi0tYm9vdC10aW1lIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0iYm9vdHRpbWUiLCBkZWZhdWx0PUZhbHNlLAorIwkJCSAgaGVscD0ib25seSBkaXNwbGF5IHRoZSBib290IHRpbWUgb2YgdGhlIGJvb3QgaW4gdGV4dCBmb3JtYXQgKHN0ZG91dCkiKQkKKwlwYXJzZXIuYWRkX29wdGlvbigiLS12ZXJ5LXF1aWV0IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0idmVyeXF1aWV0IiwgZGVmYXVsdD1GYWxzZSwKKwkJCSAgaGVscD0ic3VwcHJlc3MgYWxsIG1lc3NhZ2VzIGV4Y2VwdCBlcnJvcnMiKQorCXBhcnNlci5hZGRfb3B0aW9uKCItLXZlcmJvc2UiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJ2ZXJib3NlIiwgZGVmYXVsdD1GYWxzZSwKKwkJCSAgaGVscD0icHJpbnQgYWxsIG1lc3NhZ2VzIikKKyMJcGFyc2VyLmFkZF9vcHRpb24oIi0tcHJvZmlsZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InByb2ZpbGUiLCBkZWZhdWx0PUZhbHNlLAorIwkJCSAgaGVscD0icHJvZmlsZSByZW5kZXJpbmcgb2YgY2hhcnQgKG9ubHkgdXNlZnVsIHdoZW4gaW4gYmF0Y2ggbW9kZSBpbmRpY2F0ZWQgYnkgLWYpIikKKyMJcGFyc2VyLmFkZF9vcHRpb24oIi0tc2hvdy1waWQiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJzaG93X3BpZCIsIGRlZmF1bHQ9RmFsc2UsCisjCQkJICBoZWxwPSJzaG93IHByb2Nlc3MgaWRzIGluIHRoZSBib290Y2hhcnQgYXMgJ3Byb2Nlc3NuYW1lIFtwaWRdJyIpCisJcGFyc2VyLmFkZF9vcHRpb24oIi0tc2hvdy1hbGwiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJzaG93X2FsbCIsIGRlZmF1bHQ9RmFsc2UsCisJCQkgIGhlbHA9InNob3cgYWxsIHByb2Nlc3NlcyBpbiB0aGUgY2hhcnQiKQorIwlwYXJzZXIuYWRkX29wdGlvbigiLS1jcm9wLWFmdGVyIiwgZGVzdD0iY3JvcF9hZnRlciIsIG1ldGF2YXI9IlBST0NFU1MiLCBkZWZhdWx0PU5vbmUsCisjCQkJICBoZWxwPSJjcm9wIGNoYXJ0IHdoZW4gaWRsZSBhZnRlciBQUk9DRVNTIGlzIHN0YXJ0ZWQiKQorIwlwYXJzZXIuYWRkX29wdGlvbigiLS1hbm5vdGF0ZSIsIGFjdGlvbj0iYXBwZW5kIiwgZGVzdD0iYW5ub3RhdGUiLCBtZXRhdmFyPSJQUk9DRVNTIiwgZGVmYXVsdD1Ob25lLAorIwkJCSAgaGVscD0iYW5ub3RhdGUgcG9zaXRpb24gd2hlcmUgUFJPQ0VTUyBpcyBzdGFydGVkOyBjYW4gYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLiAiICsKKyMJCQkgICAgICAgIlRvIGNyZWF0ZSBhIHNpbmdsZSBhbm5vdGF0aW9uIHdoZW4gYW55IG9uZSBvZiBhIHNldCBvZiBwcm9jZXNzZXMgaXMgc3RhcnRlZCwgdXNlIGNvbW1hcyB0byBzZXBhcmF0ZSB0aGUgbmFtZXMiKQorIwlwYXJzZXIuYWRkX29wdGlvbigiLS1hbm5vdGF0ZS1maWxlIiwgZGVzdD0iYW5ub3RhdGVfZmlsZSIsIG1ldGF2YXI9IkZJTEVOQU1FIiwgZGVmYXVsdD1Ob25lLAorIwkJCSAgaGVscD0iZmlsZW5hbWUgdG8gd3JpdGUgYW5ub3RhdGlvbiBwb2ludHMgdG8iKQorCXBhcnNlci5hZGRfb3B0aW9uKCItVCIsICItLWZ1bGwtdGltZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImZ1bGxfdGltZSIsIGRlZmF1bHQ9RmFsc2UsCisJCQkgIGhlbHA9ImRpc3BsYXkgdGhlIGZ1bGwgdGltZSByZWdhcmRsZXNzIG9mIHdoaWNoIHByb2Nlc3NlcyBhcmUgY3VycmVudGx5IHNob3duIikKKwlyZXR1cm4gcGFyc2VyCisKK2NsYXNzIFdyaXRlcjoKKwlkZWYgX19pbml0X18oc2VsZiwgd3JpdGUsIG9wdGlvbnMpOgorCQlzZWxmLndyaXRlID0gd3JpdGUKKwkJc2VsZi5vcHRpb25zID0gb3B0aW9ucworCQkKKwlkZWYgZXJyb3Ioc2VsZiwgbXNnKToKKwkJc2VsZi53cml0ZShtc2cpCisKKwlkZWYgd2FybihzZWxmLCBtc2cpOgorCQlpZiBub3Qgc2VsZi5vcHRpb25zLnF1aWV0OgorCQkJc2VsZi53cml0ZShtc2cpCisKKwlkZWYgaW5mbyhzZWxmLCBtc2cpOgorCQlpZiBzZWxmLm9wdGlvbnMudmVyYm9zZToKKwkJCXNlbGYud3JpdGUobXNnKQorCisJZGVmIHN0YXR1cyhzZWxmLCBtc2cpOgorCQlpZiBub3Qgc2VsZi5vcHRpb25zLnF1aWV0OgorCQkJc2VsZi53cml0ZShtc2cpCisKK2RlZiBfbWtfd3JpdGVyKG9wdGlvbnMpOgorCWRlZiB3cml0ZShzKToKKwkJcHJpbnQocykKKwlyZXR1cm4gV3JpdGVyKHdyaXRlLCBvcHRpb25zKQorCQorZGVmIF9nZXRfZmlsZW5hbWUocGF0aCk6CisJIiIiQ29uc3RydWN0IGEgdXNhYmxlIGZpbGVuYW1lIGZvciBvdXRwdXRzIiIiCisJZG5hbWUgPSAiLiIKKwlmbmFtZSA9ICJib290Y2hhcnQiCisJaWYgcGF0aCAhPSBOb25lOgorCQlpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgorCQkJZG5hbWUgPSBwYXRoCisJCWVsc2U6CisJCQlmbmFtZSA9IHBhdGgKKwlyZXR1cm4gb3MucGF0aC5qb2luKGRuYW1lLCBmbmFtZSkKKworZGVmIG1haW4oYXJndj1Ob25lKToKKwl0cnk6CisJCWlmIGFyZ3YgaXMgTm9uZToKKwkJCWFyZ3YgPSBzeXMuYXJndlsxOl0KKwkKKwkJcGFyc2VyID0gX21rX29wdGlvbnNfcGFyc2VyKCkKKwkJb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3YpCisKKwkJIyBEZWZhdWx0IHZhbHVlcyBmb3IgZGlzYWJsZWQgb3B0aW9ucworCQlvcHRpb25zLnBydW5lID0gVHJ1ZQorCQlvcHRpb25zLmJvb3R0aW1lID0gRmFsc2UKKwkJb3B0aW9ucy5wcm9maWxlID0gRmFsc2UKKwkJb3B0aW9ucy5zaG93X3BpZCA9IEZhbHNlCisJCW9wdGlvbnMuY3JvcF9hZnRlciA9IE5vbmUKKwkJb3B0aW9ucy5hbm5vdGF0ZSA9IE5vbmUKKwkJb3B0aW9ucy5hbm5vdGF0ZV9maWxlID0gTm9uZQorCisJCXdyaXRlciA9IF9ta193cml0ZXIob3B0aW9ucykKKworCQlpZiBsZW4oYXJncykgPT0gMDoKKwkJCXByaW50KCJObyBwYXRoIGdpdmVuLCB0cnlpbmcgL3Zhci9sb2cvYm9vdGNoYXJ0LnRneiIpCisJCQlhcmdzID0gWyAiL3Zhci9sb2cvYm9vdGNoYXJ0LnRneiIgXQorCisJCXJlcyA9IHBhcnNpbmcuVHJhY2Uod3JpdGVyLCBhcmdzLCBvcHRpb25zKQorCisJCWlmIG9wdGlvbnMuaW50ZXJhY3RpdmUgb3Igb3B0aW9ucy5vdXRwdXQgPT0gTm9uZToKKwkJCWZyb20gLiBpbXBvcnQgZ3VpCisJCQlndWkuc2hvdyhyZXMsIG9wdGlvbnMpCisJCWVsaWYgb3B0aW9ucy5ib290dGltZToKKwkJCWltcG9ydCBtYXRoCisJCQlwcm9jX3RyZWUgPSByZXMucHJvY190cmVlCisJCQlpZiBwcm9jX3RyZWUuaWRsZToKKwkJCSAgICBkdXJhdGlvbiA9IHByb2NfdHJlZS5pZGxlCisJCQllbHNlOgorCQkJICAgIGR1cmF0aW9uID0gcHJvY190cmVlLmR1cmF0aW9uCisJCQlkdXIgPSBkdXJhdGlvbiAvIDEwMC4wCisJCQlwcmludCgnJTAyZDolMDUuMmYnICUgKG1hdGguZmxvb3IoZHVyLzYwKSwgZHVyIC0gNjAgKiBtYXRoLmZsb29yKGR1ci82MCkpKQorCQllbHNlOgorCQkJaWYgb3B0aW9ucy5hbm5vdGF0ZV9maWxlOgorCQkJCWYgPSBvcGVuIChvcHRpb25zLmFubm90YXRlX2ZpbGUsICJ3IikKKwkJCQl0cnk6CisJCQkJCWZvciB0aW1lIGluIHJlc1s0XToKKwkJCQkJCWlmIHRpbWUgaXMgbm90IE5vbmU6CisJCQkJCQkJIyBvdXRwdXQgYXMgbXMKKwkJCQkJCQlwcmludCh0aW1lICogMTAsIGZpbGU9ZikKKwkJCQkJCWVsc2U6CisJCQkJCQkJcHJpbnQoZmlsZT1mKQorCQkJCWZpbmFsbHk6CisJCQkJCWYuY2xvc2UoKQorCQkJZmlsZW5hbWUgPSBfZ2V0X2ZpbGVuYW1lKG9wdGlvbnMub3V0cHV0KQorCQkJcmVzX2xpc3QgPSBwYXJzaW5nLnNwbGl0X3JlcyhyZXMsIG9wdGlvbnMpCisJCQluID0gMQorCQkJd2lkdGggPSBsZW4oc3RyKGxlbihyZXNfbGlzdCkpKQorCQkJcyA9ICJfJSUwJWRkLiIgJSB3aWR0aAorCQkJZm9yIHIgaW4gcmVzX2xpc3Q6CisJCQkJaWYgbGVuKHJlc19saXN0KSA9PSAxOgorCQkJCQlmID0gZmlsZW5hbWUgKyAiLiIgKyBvcHRpb25zLmZvcm1hdAorCQkJCWVsc2U6CisJCQkJCWYgPSBmaWxlbmFtZSArIHMgJSBuICsgb3B0aW9ucy5mb3JtYXQKKwkJCQkJbiA9IG4gKyAxCisJCQkJZGVmIHJlbmRlcigpOgorCQkJCQliYXRjaC5yZW5kZXIod3JpdGVyLCByLCBvcHRpb25zLCBmKQorCQkJCWlmIG9wdGlvbnMucHJvZmlsZToKKwkJCQkJaW1wb3J0IGNQcm9maWxlCisJCQkJCWltcG9ydCBwc3RhdHMKKwkJCQkJcHJvZmlsZSA9ICclcy5wcm9mJyAlIG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzBdCisJCQkJCWNQcm9maWxlLnJ1bmN0eCgncmVuZGVyKCknLCBnbG9iYWxzKCksIGxvY2FscygpLCBwcm9maWxlKQorCQkJCQlwID0gcHN0YXRzLlN0YXRzKHByb2ZpbGUpCisJCQkJCXAuc3RyaXBfZGlycygpLnNvcnRfc3RhdHMoJ3RpbWUnKS5wcmludF9zdGF0cygyMCkKKwkJCQllbHNlOgorCQkJCQlyZW5kZXIoKQorCisJCXJldHVybiAwCisJZXhjZXB0IHBhcnNpbmcuUGFyc2VFcnJvciBhcyBleDoKKwkJcHJpbnQoKCJQYXJzZSBlcnJvcjogJXMiICUgZXgpKQorCQlyZXR1cm4gMgorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisJc3lzLmV4aXQobWFpbigpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL3BhcnNpbmcucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvcGFyc2luZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDIzYjlmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL3BhcnNpbmcucHkKQEAgLTAsMCArMSw3NDAgQEAKKyMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5Ym9vdGNoYXJ0Z3VpLgorCisjICBweWJvb3RjaGFydGd1aSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgIHB5Ym9vdGNoYXJ0Z3VpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgIGFsb25nIHdpdGggcHlib290Y2hhcnRndWkuIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CisKK2ltcG9ydCBvcworaW1wb3J0IHN0cmluZworaW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgdGFyZmlsZQorZnJvbSB0aW1lIGltcG9ydCBjbG9jaworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCByZWR1Y2UKKworZnJvbSAuc2FtcGxlcyBpbXBvcnQgKgorZnJvbSAucHJvY2Vzc190cmVlIGltcG9ydCBQcm9jZXNzVHJlZQorCitpZiBzeXMudmVyc2lvbl9pbmZvID49ICgzLCAwKToKKyAgICBsb25nID0gaW50CisKKyMgUGFyc2luZyBwcm9kdWNlcyBhcyBpdHMgZW5kIHJlc3VsdCBhICdUcmFjZScKKworY2xhc3MgVHJhY2U6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdyaXRlciwgcGF0aHMsIG9wdGlvbnMpOgorICAgICAgICBzZWxmLnByb2Nlc3NlcyA9IHt9CisgICAgICAgIHNlbGYuc3RhcnQgPSB7fQorICAgICAgICBzZWxmLmVuZCA9IHt9CisgICAgICAgIHNlbGYubWluID0gTm9uZQorICAgICAgICBzZWxmLm1heCA9IE5vbmUKKyAgICAgICAgc2VsZi5oZWFkZXJzID0gTm9uZQorICAgICAgICBzZWxmLmRpc2tfc3RhdHMgPSBOb25lCisgICAgICAgIHNlbGYucHNfc3RhdHMgPSBOb25lCisgICAgICAgIHNlbGYudGFza3N0YXRzID0gTm9uZQorICAgICAgICBzZWxmLmNwdV9zdGF0cyA9IE5vbmUKKyAgICAgICAgc2VsZi5jbWRsaW5lID0gTm9uZQorICAgICAgICBzZWxmLmtlcm5lbCA9IE5vbmUKKyAgICAgICAgc2VsZi5rZXJuZWxfdHJlZSA9IE5vbmUKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi5wYXJlbnRfbWFwID0gTm9uZQorICAgICAgICBzZWxmLm1lbV9zdGF0cyA9IE5vbmUKKworICAgICAgICBpZiBsZW4ocGF0aHMpOgorICAgICAgICAgICAgcGFyc2VfcGF0aHMgKHdyaXRlciwgc2VsZiwgcGF0aHMpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi52YWxpZCgpOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3IoImVtcHR5IHN0YXRlOiAnJXMnIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBib290Y2hhcnQiICUgIiwgIi5qb2luKHBhdGhzKSkKKworICAgICAgICAgICAgaWYgb3B0aW9ucy5mdWxsX3RpbWU6CisgICAgICAgICAgICAgICAgc2VsZi5taW4gPSBtaW4oc2VsZi5zdGFydC5rZXlzKCkpCisgICAgICAgICAgICAgICAgc2VsZi5tYXggPSBtYXgoc2VsZi5lbmQua2V5cygpKQorCisgICAgICAgIHJldHVybgorCisgICAgICAgICMgVHVybiB0aGF0IHBhcnNlZCBpbmZvcm1hdGlvbiBpbnRvIHNvbWV0aGluZyBtb3JlIHVzZWZ1bAorICAgICAgICAjIGxpbmsgcHJvY2Vzc2VzIGludG8gYSB0cmVlIG9mIHBvaW50ZXJzLCBjYWxjdWxhdGUgc3RhdGlzdGljcworICAgICAgICBzZWxmLmNvbXBpbGUod3JpdGVyKQorCisgICAgICAgICMgQ3JvcCB0aGUgY2hhcnQgdG8gdGhlIGVuZCBvZiB0aGUgZmlyc3QgaWRsZSBwZXJpb2QgYWZ0ZXIgdGhlIGdpdmVuCisgICAgICAgICMgcHJvY2VzcworICAgICAgICBpZiBvcHRpb25zLmNyb3BfYWZ0ZXI6CisgICAgICAgICAgICBpZGxlID0gc2VsZi5jcm9wICh3cml0ZXIsIG9wdGlvbnMuY3JvcF9hZnRlcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlkbGUgPSBOb25lCisKKyAgICAgICAgIyBBbm5vdGF0ZSBvdGhlciB0aW1lcyBhcyB0aGUgZmlyc3Qgc3RhcnQgcG9pbnQgb2YgZ2l2ZW4gcHJvY2VzcyBsaXN0cworICAgICAgICBzZWxmLnRpbWVzID0gWyBpZGxlIF0KKyAgICAgICAgaWYgb3B0aW9ucy5hbm5vdGF0ZToKKyAgICAgICAgICAgIGZvciBwcm9jbmFtZXMgaW4gb3B0aW9ucy5hbm5vdGF0ZToKKyAgICAgICAgICAgICAgICBuYW1lcyA9IFt4WzoxNV0gZm9yIHggaW4gcHJvY25hbWVzLnNwbGl0KCIsIildCisgICAgICAgICAgICAgICAgZm9yIHByb2MgaW4gc2VsZi5wc19zdGF0cy5wcm9jZXNzX21hcC52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgcHJvYy5jbWQgaW4gbmFtZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbWVzLmFwcGVuZChwcm9jLnN0YXJ0X3RpbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW1lcy5hcHBlbmQoTm9uZSkKKworICAgICAgICBzZWxmLnByb2NfdHJlZSA9IFByb2Nlc3NUcmVlKHdyaXRlciwgc2VsZi5rZXJuZWwsIHNlbGYucHNfc3RhdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wc19zdGF0cy5zYW1wbGVfcGVyaW9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGVhZGVycy5nZXQoInByb2ZpbGUucHJvY2VzcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucHJ1bmUsIGlkbGUsIHNlbGYudGFza3N0YXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyZW50X21hcCBpcyBub3QgTm9uZSkKKworICAgICAgICBpZiBzZWxmLmtlcm5lbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYua2VybmVsX3RyZWUgPSBQcm9jZXNzVHJlZSh3cml0ZXIsIHNlbGYua2VybmVsLCBOb25lLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGVhZGVycy5nZXQoInByb2ZpbGUucHJvY2VzcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlLCBOb25lLCBOb25lLCBUcnVlKQorCisgICAgZGVmIHZhbGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYucHJvY2Vzc2VzKSAhPSAwCisgICAgICAgIHJldHVybiBzZWxmLmhlYWRlcnMgIT0gTm9uZSBhbmQgc2VsZi5kaXNrX3N0YXRzICE9IE5vbmUgYW5kIFwKKyAgICAgICAgICAgICAgIHNlbGYucHNfc3RhdHMgIT0gTm9uZSBhbmQgc2VsZi5jcHVfc3RhdHMgIT0gTm9uZQorCisgICAgZGVmIGFkZF9wcm9jZXNzKHNlbGYsIHByb2Nlc3MsIHN0YXJ0LCBlbmQpOgorICAgICAgICBzZWxmLnByb2Nlc3Nlc1twcm9jZXNzXSA9IFtzdGFydCwgZW5kXQorICAgICAgICBpZiBzdGFydCBub3QgaW4gc2VsZi5zdGFydDoKKyAgICAgICAgICAgIHNlbGYuc3RhcnRbc3RhcnRdID0gW10KKyAgICAgICAgaWYgcHJvY2VzcyBub3QgaW4gc2VsZi5zdGFydFtzdGFydF06CisgICAgICAgICAgICBzZWxmLnN0YXJ0W3N0YXJ0XS5hcHBlbmQocHJvY2VzcykKKyAgICAgICAgaWYgZW5kIG5vdCBpbiBzZWxmLmVuZDoKKyAgICAgICAgICAgIHNlbGYuZW5kW2VuZF0gPSBbXQorICAgICAgICBpZiBwcm9jZXNzIG5vdCBpbiBzZWxmLmVuZFtlbmRdOgorICAgICAgICAgICAgc2VsZi5lbmRbZW5kXS5hcHBlbmQocHJvY2VzcykKKworICAgIGRlZiBjb21waWxlKHNlbGYsIHdyaXRlcik6CisKKyAgICAgICAgZGVmIGZpbmRfcGFyZW50X2lkX2ZvcihwaWQpOgorICAgICAgICAgICAgaWYgcGlkIGlzIDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgIHBwaWQgPSBzZWxmLnBhcmVudF9tYXAuZ2V0KHBpZCkKKyAgICAgICAgICAgIGlmIHBwaWQ6CisgICAgICAgICAgICAgICAgIyBtYW55IG9mIHRoZXNlIGRvdWJsZSBmb3JrcyBhcmUgc28gc2hvcnQgbGl2ZWQKKyAgICAgICAgICAgICAgICAjIHRoYXQgd2UgaGF2ZSBubyBzYW1wbGVzLCBvciBwcm9jZXNzIGluZm8gZm9yIHRoZW0KKyAgICAgICAgICAgICAgICAjIHNvIGNsaW1iIHRoZSBwYXJlbnQgaGllcmFyY3kgdG8gZmluZCBvbmUKKyAgICAgICAgICAgICAgICBpZiBpbnQgKHBwaWQgKiAxMDAwKSBub3QgaW4gc2VsZi5wc19zdGF0cy5wcm9jZXNzX21hcDoKKyMgICAgICAgICAgICAgICAgICAgIHByaW50ICJQaWQgJyVkJyBzaG9ydCBsaXZlZCB3aXRoIG5vIHByb2Nlc3MiICUgcHBpZAorICAgICAgICAgICAgICAgICAgICBwcGlkID0gZmluZF9wYXJlbnRfaWRfZm9yIChwcGlkKQorIyAgICAgICAgICAgICAgICBlbHNlOgorIyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlBpZCAnJWQnIGhhcyBhbiBlbnRyeSIgJSBwcGlkCisgICAgICAgICAgICBlbHNlOgorIyAgICAgICAgICAgICAgICBwcmludCAiUGlkICclZCcgbWlzc2luZyBmcm9tIHBpZCBtYXAiICUgcGlkCisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgIHJldHVybiBwcGlkCisKKyAgICAgICAgIyBtZXJnZSBpbiB0aGUgY21kbGluZSBkYXRhCisgICAgICAgIGlmIHNlbGYuY21kbGluZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciBwcm9jIGluIHNlbGYucHNfc3RhdHMucHJvY2Vzc19tYXAudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgcnBpZCA9IGludCAocHJvYy5waWQgLy8gMTAwMCkKKyAgICAgICAgICAgICAgICBpZiBycGlkIGluIHNlbGYuY21kbGluZToKKyAgICAgICAgICAgICAgICAgICAgY21kID0gc2VsZi5jbWRsaW5lW3JwaWRdCisgICAgICAgICAgICAgICAgICAgIHByb2MuZXhlID0gY21kWydleGUnXQorICAgICAgICAgICAgICAgICAgICBwcm9jLmFyZ3MgPSBjbWRbJ2FyZ3MnXQorIyAgICAgICAgICAgICAgICBlbHNlOgorIyAgICAgICAgICAgICAgICAgICAgcHJpbnQgInByb2MgJWQgJyVzJyBub3QgaW4gY21kbGluZSIgJSAocnBpZCwgcHJvYy5leGUpCisKKyAgICAgICAgIyByZS1wYXJlbnQgYW55IHN0cmF5IG9ycGhhbnMgaWYgd2UgY2FuCisgICAgICAgIGlmIHNlbGYucGFyZW50X21hcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciBwcm9jZXNzIGluIHNlbGYucHNfc3RhdHMucHJvY2Vzc19tYXAudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgcHBpZCA9IGZpbmRfcGFyZW50X2lkX2ZvciAoaW50KHByb2Nlc3MucGlkIC8vIDEwMDApKQorICAgICAgICAgICAgICAgIGlmIHBwaWQ6CisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MucHBpZCA9IHBwaWQgKiAxMDAwCisKKyAgICAgICAgIyBzdGl0Y2ggdGhlIHRyZWUgdG9nZXRoZXIgd2l0aCBwb2ludGVycworICAgICAgICBmb3IgcHJvY2VzcyBpbiBzZWxmLnBzX3N0YXRzLnByb2Nlc3NfbWFwLnZhbHVlcygpOgorICAgICAgICAgICAgcHJvY2Vzcy5zZXRfcGFyZW50IChzZWxmLnBzX3N0YXRzLnByb2Nlc3NfbWFwKQorCisgICAgICAgICMgY291bnQgb24gZmluZ2VycyB2YXJpb3VzbHkKKyAgICAgICAgZm9yIHByb2Nlc3MgaW4gc2VsZi5wc19zdGF0cy5wcm9jZXNzX21hcC52YWx1ZXMoKToKKyAgICAgICAgICAgIHByb2Nlc3MuY2FsY19zdGF0cyAoc2VsZi5wc19zdGF0cy5zYW1wbGVfcGVyaW9kKQorCisgICAgZGVmIGNyb3Aoc2VsZiwgd3JpdGVyLCBjcm9wX2FmdGVyKToKKworICAgICAgICBkZWYgaXNfaWRsZV9hdCh1dGlsLCBzdGFydCwgaik6CisgICAgICAgICAgICBrID0gaiArIDEKKyAgICAgICAgICAgIHdoaWxlIGsgPCBsZW4odXRpbCkgYW5kIHV0aWxba11bMF0gPCBzdGFydCArIDMwMDoKKyAgICAgICAgICAgICAgICBrICs9IDEKKyAgICAgICAgICAgIGsgPSBtaW4oaywgbGVuKHV0aWwpLTEpCisKKyAgICAgICAgICAgIGlmIHV0aWxbal1bMV0gPj0gMC4yNToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAgICAgYXZnbG9hZCA9IHN1bSh1WzFdIGZvciB1IGluIHV0aWxbajprKzFdKSAvIChrLWorMSkKKyAgICAgICAgICAgIGlmIGF2Z2xvYWQgPCAwLjI1OgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBkZWYgaXNfaWRsZSh1dGlsLCBzdGFydCk6CisgICAgICAgICAgICBmb3IgaiBpbiByYW5nZSgwLCBsZW4odXRpbCkpOgorICAgICAgICAgICAgICAgIGlmIHV0aWxbal1bMF0gPCBzdGFydDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICByZXR1cm4gaXNfaWRsZV9hdCh1dGlsLCBzdGFydCwgaikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgbmFtZXMgPSBbeFs6MTVdIGZvciB4IGluIGNyb3BfYWZ0ZXIuc3BsaXQoIiwiKV0KKyAgICAgICAgZm9yIHByb2MgaW4gc2VsZi5wc19zdGF0cy5wcm9jZXNzX21hcC52YWx1ZXMoKToKKyAgICAgICAgICAgIGlmIHByb2MuY21kIGluIG5hbWVzIG9yIHByb2MuZXhlIGluIG5hbWVzOgorICAgICAgICAgICAgICAgIHdyaXRlci5pbmZvKCJzZWxlY3RlZCBwcm9jICclcycgZnJvbSBsaXN0IChzdGFydCAlZCkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocHJvYy5jbWQsIHByb2Muc3RhcnRfdGltZSkpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgcHJvYyBpcyBOb25lOgorICAgICAgICAgICAgd3JpdGVyLndhcm4oIm5vIHNlbGVjdGVkIGNyb3AgcHJvYyAnJXMnIGluIGxpc3QiICUgY3JvcF9hZnRlcikKKworCisgICAgICAgIGNwdV91dGlsID0gWyhzYW1wbGUudGltZSwgc2FtcGxlLnVzZXIgKyBzYW1wbGUuc3lzICsgc2FtcGxlLmlvKSBmb3Igc2FtcGxlIGluIHNlbGYuY3B1X3N0YXRzXQorICAgICAgICBkaXNrX3V0aWwgPSBbKHNhbXBsZS50aW1lLCBzYW1wbGUudXRpbCkgZm9yIHNhbXBsZSBpbiBzZWxmLmRpc2tfc3RhdHNdCisKKyAgICAgICAgaWRsZSA9IE5vbmUKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGNwdV91dGlsKSk6CisgICAgICAgICAgICBpZiBjcHVfdXRpbFtpXVswXSA8IHByb2Muc3RhcnRfdGltZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNfaWRsZV9hdChjcHVfdXRpbCwgY3B1X3V0aWxbaV1bMF0sIGkpIFwKKyAgICAgICAgICAgICAgIGFuZCBpc19pZGxlKGRpc2tfdXRpbCwgY3B1X3V0aWxbaV1bMF0pOgorICAgICAgICAgICAgICAgIGlkbGUgPSBjcHVfdXRpbFtpXVswXQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgaWRsZSBpcyBOb25lOgorICAgICAgICAgICAgd3JpdGVyLndhcm4gKCJub3QgaWRsZSBhZnRlciBwcm9jICclcyciICUgY3JvcF9hZnRlcikKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgY3JvcF9hdCA9IGlkbGUgKyAzMDAKKyAgICAgICAgd3JpdGVyLmluZm8gKCJjcm9wcGluZyBhdCB0aW1lICVkIiAlIGNyb3BfYXQpCisgICAgICAgIHdoaWxlIGxlbiAoc2VsZi5jcHVfc3RhdHMpIFwKKyAgICAgICAgICAgICAgICAgICAgYW5kIHNlbGYuY3B1X3N0YXRzWy0xXS50aW1lID4gY3JvcF9hdDoKKyAgICAgICAgICAgIHNlbGYuY3B1X3N0YXRzLnBvcCgpCisgICAgICAgIHdoaWxlIGxlbiAoc2VsZi5kaXNrX3N0YXRzKSBcCisgICAgICAgICAgICAgICAgICAgIGFuZCBzZWxmLmRpc2tfc3RhdHNbLTFdLnRpbWUgPiBjcm9wX2F0OgorICAgICAgICAgICAgc2VsZi5kaXNrX3N0YXRzLnBvcCgpCisKKyAgICAgICAgc2VsZi5wc19zdGF0cy5lbmRfdGltZSA9IGNyb3BfYXQKKworICAgICAgICBjcm9wcGVkX21hcCA9IHt9CisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHNlbGYucHNfc3RhdHMucHJvY2Vzc19tYXAuaXRlbXMoKToKKyAgICAgICAgICAgIGlmICh2YWx1ZS5zdGFydF90aW1lIDw9IGNyb3BfYXQpOgorICAgICAgICAgICAgICAgIGNyb3BwZWRfbWFwW2tleV0gPSB2YWx1ZQorCisgICAgICAgIGZvciBwcm9jIGluIGNyb3BwZWRfbWFwLnZhbHVlcygpOgorICAgICAgICAgICAgcHJvYy5kdXJhdGlvbiA9IG1pbiAocHJvYy5kdXJhdGlvbiwgY3JvcF9hdCAtIHByb2Muc3RhcnRfdGltZSkKKyAgICAgICAgICAgIHdoaWxlIGxlbiAocHJvYy5zYW1wbGVzKSBcCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgcHJvYy5zYW1wbGVzWy0xXS50aW1lID4gY3JvcF9hdDoKKyAgICAgICAgICAgICAgICBwcm9jLnNhbXBsZXMucG9wKCkKKworICAgICAgICBzZWxmLnBzX3N0YXRzLnByb2Nlc3NfbWFwID0gY3JvcHBlZF9tYXAKKworICAgICAgICByZXR1cm4gaWRsZQorCisKKworY2xhc3MgUGFyc2VFcnJvcihFeGNlcHRpb24pOgorICAgICIiIlJlcHJlc2VudHMgZXJyb3JzIGR1cmluZyBwYXJzZSBvZiB0aGUgYm9vdGNoYXJ0LiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisKK2RlZiBfcGFyc2VfaGVhZGVycyhmaWxlKToKKyAgICAiIiJQYXJzZXMgdGhlIGhlYWRlcnMgb2YgdGhlIGJvb3RjaGFydC4iIiIKKyAgICBkZWYgcGFyc2UoYWNjLCBsaW5lKToKKyAgICAgICAgKGhlYWRlcnMsIGxhc3QpID0gYWNjCisgICAgICAgIGlmICc9JyBpbiBsaW5lOgorICAgICAgICAgICAgbGFzdCwgdmFsdWUgPSBtYXAgKGxhbWJkYSB4OiB4LnN0cmlwKCksIGxpbmUuc3BsaXQoJz0nLCAxKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhbHVlID0gbGluZS5zdHJpcCgpCisgICAgICAgIGhlYWRlcnNbbGFzdF0gKz0gdmFsdWUKKyAgICAgICAgcmV0dXJuIGhlYWRlcnMsIGxhc3QKKyAgICByZXR1cm4gcmVkdWNlKHBhcnNlLCBmaWxlLnJlYWQoKS5kZWNvZGUoJ3V0Zi04Jykuc3BsaXQoJ1xuJyksIChkZWZhdWx0ZGljdChzdHIpLCcnKSlbMF0KKworZGVmIF9wYXJzZV90aW1lZF9ibG9ja3MoZmlsZSk6CisgICAgIiIiUGFyc2VzIChpZS4sIHNwbGl0cykgYSBmaWxlIGludG8gc28tY2FsbGVkIHRpbWVkLWJsb2Nrcy4gQQorICAgIHRpbWVkLWJsb2NrIGNvbnNpc3RzIG9mIGEgdGltZXN0YW1wIG9uIGEgbGluZSBieSBpdHNlbGYgZm9sbG93ZWQKKyAgICBieSB6ZXJvIG9yIG1vcmUgbGluZXMgb2YgZGF0YSBmb3IgdGhhdCBwb2ludCBpbiB0aW1lLiIiIgorICAgIGRlZiBwYXJzZShibG9jayk6CisgICAgICAgIGxpbmVzID0gYmxvY2suc3BsaXQoJ1xuJykKKyAgICAgICAgaWYgbm90IGxpbmVzOgorICAgICAgICAgICAgcmFpc2UgUGFyc2VFcnJvcignZXhwZWN0ZWQgYSB0aW1lZC1ibG9jayBjb25zaXN0aW5nIGEgdGltZXN0YW1wIGZvbGxvd2VkIGJ5IGRhdGEgbGluZXMnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gKGludChsaW5lc1swXSksIGxpbmVzWzE6XSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBQYXJzZUVycm9yKCJleHBlY3RlZCBhIHRpbWVkLWJsb2NrLCBidXQgdGltZXN0YW1wICclcycgaXMgbm90IGFuIGludGVnZXIiICUgbGluZXNbMF0pCisgICAgYmxvY2tzID0gZmlsZS5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpLnNwbGl0KCdcblxuJykKKyAgICByZXR1cm4gW3BhcnNlKGJsb2NrKSBmb3IgYmxvY2sgaW4gYmxvY2tzIGlmIGJsb2NrLnN0cmlwKCkgYW5kIG5vdCBibG9jay5lbmRzd2l0aCgnIG5vdCBydW5uaW5nXG4nKV0KKworZGVmIF9wYXJzZV9wcm9jX3BzX2xvZyh3cml0ZXIsIGZpbGUpOgorICAgICIiIgorICAgICAqIFNlZSBwcm9jKDUpIGZvciBkZXRhaWxzLgorICAgICAqCisgICAgICoge3BpZCwgY29tbSwgc3RhdGUsIHBwaWQsIHBncnAsIHNlc3Npb24sIHR0eV9uciwgdHBnaWQsIGZsYWdzLCBtaW5mbHQsIGNtaW5mbHQsIG1hamZsdCwgY21hamZsdCwgdXRpbWUsIHN0aW1lLAorICAgICAqICBjdXRpbWUsIGNzdGltZSwgcHJpb3JpdHksIG5pY2UsIDAsIGl0cmVhbHZhbHVlLCBzdGFydHRpbWUsIHZzaXplLCByc3MsIHJsaW0sIHN0YXJ0Y29kZSwgZW5kY29kZSwgc3RhcnRzdGFjaywKKyAgICAgKiAga3N0a2VzcCwga3N0a2VpcH0KKyAgICAiIiIKKyAgICBwcm9jZXNzTWFwID0ge30KKyAgICBsdGltZSA9IDAKKyAgICB0aW1lZF9ibG9ja3MgPSBfcGFyc2VfdGltZWRfYmxvY2tzKGZpbGUpCisgICAgZm9yIHRpbWUsIGxpbmVzIGluIHRpbWVkX2Jsb2NrczoKKyAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICBpZiBub3QgbGluZTogY29udGludWUKKyAgICAgICAgICAgIHRva2VucyA9IGxpbmUuc3BsaXQoJyAnKQorICAgICAgICAgICAgaWYgbGVuKHRva2VucykgPCAyMToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBvZmZzZXQgPSBbaW5kZXggZm9yIGluZGV4LCB0b2tlbiBpbiBlbnVtZXJhdGUodG9rZW5zWzE6XSkgaWYgdG9rZW5bLTFdID09ICcpJ11bMF0KKyAgICAgICAgICAgIHBpZCwgY21kLCBzdGF0ZSwgcHBpZCA9IGludCh0b2tlbnNbMF0pLCAnICcuam9pbih0b2tlbnNbMToyK29mZnNldF0pLCB0b2tlbnNbMitvZmZzZXRdLCBpbnQodG9rZW5zWzMrb2Zmc2V0XSkKKyAgICAgICAgICAgIHVzZXJDcHUsIHN5c0NwdSwgc3RpbWUgPSBpbnQodG9rZW5zWzEzK29mZnNldF0pLCBpbnQodG9rZW5zWzE0K29mZnNldF0pLCBpbnQodG9rZW5zWzIxK29mZnNldF0pCisKKyAgICAgICAgICAgICMgbWFnaWMgZml4ZWQgcG9pbnQtbmVzcyAuLi4KKyAgICAgICAgICAgIHBpZCAqPSAxMDAwCisgICAgICAgICAgICBwcGlkICo9IDEwMDAKKyAgICAgICAgICAgIGlmIHBpZCBpbiBwcm9jZXNzTWFwOgorICAgICAgICAgICAgICAgIHByb2Nlc3MgPSBwcm9jZXNzTWFwW3BpZF0KKyAgICAgICAgICAgICAgICBwcm9jZXNzLmNtZCA9IGNtZC5zdHJpcCgnKCknKSAjIHdoeSByZW5hbWUgYWZ0ZXIgbGF0ZXN0IG5hbWU/PworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcm9jZXNzID0gUHJvY2Vzcyh3cml0ZXIsIHBpZCwgY21kLnN0cmlwKCcoKScpLCBwcGlkLCBtaW4odGltZSwgc3RpbWUpKQorICAgICAgICAgICAgICAgIHByb2Nlc3NNYXBbcGlkXSA9IHByb2Nlc3MKKworICAgICAgICAgICAgaWYgcHJvY2Vzcy5sYXN0X3VzZXJfY3B1X3RpbWUgaXMgbm90IE5vbmUgYW5kIHByb2Nlc3MubGFzdF9zeXNfY3B1X3RpbWUgaXMgbm90IE5vbmUgYW5kIGx0aW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHVzZXJDcHVMb2FkLCBzeXNDcHVMb2FkID0gcHJvY2Vzcy5jYWxjX2xvYWQodXNlckNwdSwgc3lzQ3B1LCBtYXgoMSwgdGltZSAtIGx0aW1lKSkKKyAgICAgICAgICAgICAgICBjcHVTYW1wbGUgPSBDUFVTYW1wbGUoJ251bGwnLCB1c2VyQ3B1TG9hZCwgc3lzQ3B1TG9hZCwgMC4wKQorICAgICAgICAgICAgICAgIHByb2Nlc3Muc2FtcGxlcy5hcHBlbmQoUHJvY2Vzc1NhbXBsZSh0aW1lLCBzdGF0ZSwgY3B1U2FtcGxlKSkKKworICAgICAgICAgICAgcHJvY2Vzcy5sYXN0X3VzZXJfY3B1X3RpbWUgPSB1c2VyQ3B1CisgICAgICAgICAgICBwcm9jZXNzLmxhc3Rfc3lzX2NwdV90aW1lID0gc3lzQ3B1CisgICAgICAgIGx0aW1lID0gdGltZQorCisgICAgaWYgbGVuICh0aW1lZF9ibG9ja3MpIDwgMjoKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIHN0YXJ0VGltZSA9IHRpbWVkX2Jsb2Nrc1swXVswXQorICAgIGF2Z1NhbXBsZUxlbmd0aCA9IChsdGltZSAtIHN0YXJ0VGltZSkvKGxlbiAodGltZWRfYmxvY2tzKSAtIDEpCisKKyAgICByZXR1cm4gUHJvY2Vzc1N0YXRzICh3cml0ZXIsIHByb2Nlc3NNYXAsIGxlbiAodGltZWRfYmxvY2tzKSwgYXZnU2FtcGxlTGVuZ3RoLCBzdGFydFRpbWUsIGx0aW1lKQorCitkZWYgX3BhcnNlX3Rhc2tzdGF0c19sb2cod3JpdGVyLCBmaWxlKToKKyAgICAiIiIKKyAgICAgKiBTZWUgYm9vdGNoYXJ0LWNvbGxlY3Rvci5jIGZvciBkZXRhaWxzLgorICAgICAqCisgICAgICogeyBwaWQsIHBwaWQsIGNvbW0sIGNwdV9ydW5fcmVhbF90b3RhbCwgYmxraW9fZGVsYXlfdG90YWwsIHN3YXBpbl9kZWxheV90b3RhbCB9CisgICAgICoKKyAgICAiIiIKKyAgICBwcm9jZXNzTWFwID0ge30KKyAgICBwaWRSZXdyaXRlcyA9IHt9CisgICAgbHRpbWUgPSBOb25lCisgICAgdGltZWRfYmxvY2tzID0gX3BhcnNlX3RpbWVkX2Jsb2NrcyhmaWxlKQorICAgIGZvciB0aW1lLCBsaW5lcyBpbiB0aW1lZF9ibG9ja3M6CisgICAgICAgICMgd2UgaGF2ZSBubyAnc3RpbWUnIGZyb20gdGFza3N0YXRzLCBzbyBwcmVwICdpbml0JworICAgICAgICBpZiBsdGltZSBpcyBOb25lOgorICAgICAgICAgICAgcHJvY2VzcyA9IFByb2Nlc3Mod3JpdGVyLCAxLCAnW2luaXRdJywgMCwgMCkKKyAgICAgICAgICAgIHByb2Nlc3NNYXBbMTAwMF0gPSBwcm9jZXNzCisgICAgICAgICAgICBsdGltZSA9IHRpbWUKKyMgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgaWYgbm90IGxpbmU6IGNvbnRpbnVlCisgICAgICAgICAgICB0b2tlbnMgPSBsaW5lLnNwbGl0KCcgJykKKyAgICAgICAgICAgIGlmIGxlbih0b2tlbnMpICE9IDY6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgb3BpZCwgcHBpZCwgY21kID0gaW50KHRva2Vuc1swXSksIGludCh0b2tlbnNbMV0pLCB0b2tlbnNbMl0KKyAgICAgICAgICAgIGNwdV9ucywgYmxraW9fZGVsYXlfbnMsIHN3YXBpbl9kZWxheV9ucyA9IGxvbmcodG9rZW5zWy0zXSksIGxvbmcodG9rZW5zWy0yXSksIGxvbmcodG9rZW5zWy0xXSksCisKKyAgICAgICAgICAgICMgbWFrZSBzcGFjZSBmb3IgdHJlZXMgb2YgcGlkcworICAgICAgICAgICAgb3BpZCAqPSAxMDAwCisgICAgICAgICAgICBwcGlkICo9IDEwMDAKKworICAgICAgICAgICAgIyB3aGVuIHRoZSBwcm9jZXNzIG5hbWUgY2hhbmdlcywgd2UgcmUtd3JpdGUgdGhlIHBpZC4KKyAgICAgICAgICAgIGlmIG9waWQgaW4gcGlkUmV3cml0ZXM6CisgICAgICAgICAgICAgICAgcGlkID0gcGlkUmV3cml0ZXNbb3BpZF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGlkID0gb3BpZAorCisgICAgICAgICAgICBjbWQgPSBjbWQuc3RyaXAoJygnKS5zdHJpcCgnKScpCisgICAgICAgICAgICBpZiBwaWQgaW4gcHJvY2Vzc01hcDoKKyAgICAgICAgICAgICAgICBwcm9jZXNzID0gcHJvY2Vzc01hcFtwaWRdCisgICAgICAgICAgICAgICAgaWYgcHJvY2Vzcy5jbWQgIT0gY21kOgorICAgICAgICAgICAgICAgICAgICBwaWQgKz0gMQorICAgICAgICAgICAgICAgICAgICBwaWRSZXdyaXRlc1tvcGlkXSA9IHBpZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJwcm9jZXNzIG11dGF0aW9uICEgJyVzJyB2cyAnJXMnIHBpZCAlcyAtPiBwaWQgJXNcbiIgJSAocHJvY2Vzcy5jbWQsIGNtZCwgb3BpZCwgcGlkKQorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzID0gcHJvY2Vzcy5zcGxpdCAod3JpdGVyLCBwaWQsIGNtZCwgcHBpZCwgdGltZSkKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc01hcFtwaWRdID0gcHJvY2VzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuY21kID0gY21kOworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcm9jZXNzID0gUHJvY2Vzcyh3cml0ZXIsIHBpZCwgY21kLCBwcGlkLCB0aW1lKQorICAgICAgICAgICAgICAgIHByb2Nlc3NNYXBbcGlkXSA9IHByb2Nlc3MKKworICAgICAgICAgICAgZGVsdGFfY3B1X25zID0gKGZsb2F0KSAoY3B1X25zIC0gcHJvY2Vzcy5sYXN0X2NwdV9ucykKKyAgICAgICAgICAgIGRlbHRhX2Jsa2lvX2RlbGF5X25zID0gKGZsb2F0KSAoYmxraW9fZGVsYXlfbnMgLSBwcm9jZXNzLmxhc3RfYmxraW9fZGVsYXlfbnMpCisgICAgICAgICAgICBkZWx0YV9zd2FwaW5fZGVsYXlfbnMgPSAoZmxvYXQpIChzd2FwaW5fZGVsYXlfbnMgLSBwcm9jZXNzLmxhc3Rfc3dhcGluX2RlbGF5X25zKQorCisgICAgICAgICAgICAjIG1ha2UgdXAgc29tZSBzdGF0ZSBkYXRhIC4uLgorICAgICAgICAgICAgaWYgZGVsdGFfY3B1X25zID4gMDoKKyAgICAgICAgICAgICAgICBzdGF0ZSA9ICJSIgorICAgICAgICAgICAgZWxpZiBkZWx0YV9ibGtpb19kZWxheV9ucyArIGRlbHRhX3N3YXBpbl9kZWxheV9ucyA+IDA6CisgICAgICAgICAgICAgICAgc3RhdGUgPSAiRCIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3RhdGUgPSAiUyIKKworICAgICAgICAgICAgIyByZXRhaW4gdGhlIG5zIHRpbWluZyBpbmZvcm1hdGlvbiBpbnRvIGEgQ1BVU2FtcGxlIC0gdGhhdCB0cmllcworICAgICAgICAgICAgIyB3aXRoIHRoZSBvbGQtc3R5bGUgdG8gYmUgYSAlYWdlIG9mIENQVSB1c2VkIGluIHRoaXMgdGltZS1zbGljZS4KKyAgICAgICAgICAgIGlmIGRlbHRhX2NwdV9ucyArIGRlbHRhX2Jsa2lvX2RlbGF5X25zICsgZGVsdGFfc3dhcGluX2RlbGF5X25zID4gMDoKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgInByb2MgJXMgY3B1X25zICVnIGRlbHRhX2NwdSAlZyIgJSAoY21kLCBjcHVfbnMsIGRlbHRhX2NwdV9ucykKKyAgICAgICAgICAgICAgICBjcHVTYW1wbGUgPSBDUFVTYW1wbGUoJ251bGwnLCBkZWx0YV9jcHVfbnMsIDAuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFfYmxraW9fZGVsYXlfbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhX3N3YXBpbl9kZWxheV9ucykKKyAgICAgICAgICAgICAgICBwcm9jZXNzLnNhbXBsZXMuYXBwZW5kKFByb2Nlc3NTYW1wbGUodGltZSwgc3RhdGUsIGNwdVNhbXBsZSkpCisKKyAgICAgICAgICAgIHByb2Nlc3MubGFzdF9jcHVfbnMgPSBjcHVfbnMKKyAgICAgICAgICAgIHByb2Nlc3MubGFzdF9ibGtpb19kZWxheV9ucyA9IGJsa2lvX2RlbGF5X25zCisgICAgICAgICAgICBwcm9jZXNzLmxhc3Rfc3dhcGluX2RlbGF5X25zID0gc3dhcGluX2RlbGF5X25zCisgICAgICAgIGx0aW1lID0gdGltZQorCisgICAgaWYgbGVuICh0aW1lZF9ibG9ja3MpIDwgMjoKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIHN0YXJ0VGltZSA9IHRpbWVkX2Jsb2Nrc1swXVswXQorICAgIGF2Z1NhbXBsZUxlbmd0aCA9IChsdGltZSAtIHN0YXJ0VGltZSkvKGxlbih0aW1lZF9ibG9ja3MpLTEpCisKKyAgICByZXR1cm4gUHJvY2Vzc1N0YXRzICh3cml0ZXIsIHByb2Nlc3NNYXAsIGxlbiAodGltZWRfYmxvY2tzKSwgYXZnU2FtcGxlTGVuZ3RoLCBzdGFydFRpbWUsIGx0aW1lKQorCitkZWYgX3BhcnNlX3Byb2Nfc3RhdF9sb2coZmlsZSk6CisgICAgc2FtcGxlcyA9IFtdCisgICAgbHRpbWVzID0gTm9uZQorICAgIGZvciB0aW1lLCBsaW5lcyBpbiBfcGFyc2VfdGltZWRfYmxvY2tzKGZpbGUpOgorICAgICAgICAjIHNraXAgZW10cHkgbGluZXMKKyAgICAgICAgaWYgbm90IGxpbmVzOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgIyBDUFUgdGltZXMge3VzZXIsIG5pY2UsIHN5c3RlbSwgaWRsZSwgaW9fd2FpdCwgaXJxLCBzb2Z0aXJxfQorICAgICAgICB0b2tlbnMgPSBsaW5lc1swXS5zcGxpdCgpCisgICAgICAgIHRpbWVzID0gWyBpbnQodG9rZW4pIGZvciB0b2tlbiBpbiB0b2tlbnNbMTpdIF0KKyAgICAgICAgaWYgbHRpbWVzOgorICAgICAgICAgICAgdXNlciA9IGZsb2F0KCh0aW1lc1swXSArIHRpbWVzWzFdKSAtIChsdGltZXNbMF0gKyBsdGltZXNbMV0pKQorICAgICAgICAgICAgc3lzdGVtID0gZmxvYXQoKHRpbWVzWzJdICsgdGltZXNbNV0gKyB0aW1lc1s2XSkgLSAobHRpbWVzWzJdICsgbHRpbWVzWzVdICsgbHRpbWVzWzZdKSkKKyAgICAgICAgICAgIGlkbGUgPSBmbG9hdCh0aW1lc1szXSAtIGx0aW1lc1szXSkKKyAgICAgICAgICAgIGlvd2FpdCA9IGZsb2F0KHRpbWVzWzRdIC0gbHRpbWVzWzRdKQorCisgICAgICAgICAgICBhU3VtID0gbWF4KHVzZXIgKyBzeXN0ZW0gKyBpZGxlICsgaW93YWl0LCAxKQorICAgICAgICAgICAgc2FtcGxlcy5hcHBlbmQoIENQVVNhbXBsZSh0aW1lLCB1c2VyL2FTdW0sIHN5c3RlbS9hU3VtLCBpb3dhaXQvYVN1bSkgKQorCisgICAgICAgIGx0aW1lcyA9IHRpbWVzCisgICAgICAgICMgc2tpcCB0aGUgcmVzdCBvZiBzdGF0aXN0aWNzIGxpbmVzCisgICAgcmV0dXJuIHNhbXBsZXMKKworZGVmIF9wYXJzZV9wcm9jX2Rpc2tfc3RhdF9sb2coZmlsZSwgbnVtQ3B1KToKKyAgICAiIiIKKyAgICBQYXJzZSBmaWxlIGZvciBkaXNrIHN0YXRzLCBidXQgb25seSBsb29rIGF0IHRoZSB3aG9sZSBkZXZpY2UsIGVnLiBzZGEsCisgICAgbm90IHNkYTEsIHNkYTIgZXRjLiBUaGUgZm9ybWF0IG9mIHJlbGV2YW50IGxpbmVzIHNob3VsZCBiZToKKyAgICB7bWFqb3IgbWlub3IgbmFtZSByaW8gcm1lcmdlIHJzZWN0IHJ1c2Ugd2lvIHdtZXJnZSB3c2VjdCB3dXNlIHJ1bm5pbmcgdXNlIGF2ZXF9CisgICAgIiIiCisgICAgZGlza19yZWdleF9yZSA9IHJlLmNvbXBpbGUgKCdeKFtoc3ZdZC58bXRkYmxvY2tcZHxtbWNibGtcZHxjY2lzcy9jXGQrZFxkKy4qKSQnKQorCisgICAgIyB0aGlzIGdldHMgY2FsbGVkIGFuIGF3ZnVsIGxvdC4KKyAgICBkZWYgaXNfcmVsZXZhbnRfbGluZShsaW5ldG9rZW5zKToKKyAgICAgICAgaWYgbGVuKGxpbmV0b2tlbnMpICE9IDE0OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGRpc2sgPSBsaW5ldG9rZW5zWzJdCisgICAgICAgIHJldHVybiBkaXNrX3JlZ2V4X3JlLm1hdGNoKGRpc2spCisKKyAgICBkaXNrX3N0YXRfc2FtcGxlcyA9IFtdCisKKyAgICBmb3IgdGltZSwgbGluZXMgaW4gX3BhcnNlX3RpbWVkX2Jsb2NrcyhmaWxlKToKKyAgICAgICAgc2FtcGxlID0gRGlza1N0YXRTYW1wbGUodGltZSkKKyAgICAgICAgcmVsZXZhbnRfdG9rZW5zID0gW2xpbmV0b2tlbnMgZm9yIGxpbmV0b2tlbnMgaW4gbWFwIChsYW1iZGEgeDogeC5zcGxpdCgpLGxpbmVzKSBpZiBpc19yZWxldmFudF9saW5lKGxpbmV0b2tlbnMpXQorCisgICAgICAgIGZvciB0b2tlbnMgaW4gcmVsZXZhbnRfdG9rZW5zOgorICAgICAgICAgICAgZGlzaywgcnNlY3QsIHdzZWN0LCB1c2UgPSB0b2tlbnNbMl0sIGludCh0b2tlbnNbNV0pLCBpbnQodG9rZW5zWzldKSwgaW50KHRva2Vuc1sxMl0pCisgICAgICAgICAgICBzYW1wbGUuYWRkX2Rpc2tkYXRhKFtyc2VjdCwgd3NlY3QsIHVzZV0pCisKKyAgICAgICAgZGlza19zdGF0X3NhbXBsZXMuYXBwZW5kKHNhbXBsZSkKKworICAgIGRpc2tfc3RhdHMgPSBbXQorICAgIGZvciBzYW1wbGUxLCBzYW1wbGUyIGluIHppcChkaXNrX3N0YXRfc2FtcGxlc1s6LTFdLCBkaXNrX3N0YXRfc2FtcGxlc1sxOl0pOgorICAgICAgICBpbnRlcnZhbCA9IHNhbXBsZTEudGltZSAtIHNhbXBsZTIudGltZQorICAgICAgICBpZiBpbnRlcnZhbCA9PSAwOgorICAgICAgICAgICAgaW50ZXJ2YWwgPSAxCisgICAgICAgIHN1bXMgPSBbIGEgLSBiIGZvciBhLCBiIGluIHppcChzYW1wbGUxLmRpc2tkYXRhLCBzYW1wbGUyLmRpc2tkYXRhKSBdCisgICAgICAgIHJlYWRUcHV0ID0gc3Vtc1swXSAvIDIuMCAqIDEwMC4wIC8gaW50ZXJ2YWwKKyAgICAgICAgd3JpdGVUcHV0ID0gc3Vtc1sxXSAvIDIuMCAqIDEwMC4wIC8gaW50ZXJ2YWwKKyAgICAgICAgdXRpbCA9IGZsb2F0KCBzdW1zWzJdICkgLyAxMCAvIGludGVydmFsIC8gbnVtQ3B1CisgICAgICAgIHV0aWwgPSBtYXgoMC4wLCBtaW4oMS4wLCB1dGlsKSkKKyAgICAgICAgZGlza19zdGF0cy5hcHBlbmQoRGlza1NhbXBsZShzYW1wbGUyLnRpbWUsIHJlYWRUcHV0LCB3cml0ZVRwdXQsIHV0aWwpKQorCisgICAgcmV0dXJuIGRpc2tfc3RhdHMKKworZGVmIF9wYXJzZV9wcm9jX21lbWluZm9fbG9nKGZpbGUpOgorICAgICIiIgorICAgIFBhcnNlIGZpbGUgZm9yIGdsb2JhbCBtZW1vcnkgc3RhdGlzdGljcy4KKyAgICBUaGUgZm9ybWF0IG9mIHJlbGV2YW50IGxpbmVzIHNob3VsZCBiZTogXmtleTogdmFsdWUoIHVuaXQpPworICAgICIiIgorICAgIHVzZWRfdmFsdWVzID0gKCdNZW1Ub3RhbCcsICdNZW1GcmVlJywgJ0J1ZmZlcnMnLCAnQ2FjaGVkJywgJ1N3YXBUb3RhbCcsICdTd2FwRnJlZScsKQorCisgICAgbWVtX3N0YXRzID0gW10KKyAgICBtZW1pbmZvX3JlID0gcmUuY29tcGlsZShyJyhbXiBcdDpdKyk6XHMqKFxkKykuKicpCisKKyAgICBmb3IgdGltZSwgbGluZXMgaW4gX3BhcnNlX3RpbWVkX2Jsb2NrcyhmaWxlKToKKyAgICAgICAgc2FtcGxlID0gTWVtU2FtcGxlKHRpbWUpCisKKyAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICBtYXRjaCA9IG1lbWluZm9fcmUubWF0Y2gobGluZSkKKyAgICAgICAgICAgIGlmIG5vdCBtYXRjaDoKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUVycm9yKCJJbnZhbGlkIG1lbWluZm8gbGluZSBcIiVzXCIiICUgbWF0Y2guZ3JvdXBzKDApKQorICAgICAgICAgICAgc2FtcGxlLmFkZF92YWx1ZShtYXRjaC5ncm91cCgxKSwgaW50KG1hdGNoLmdyb3VwKDIpKSkKKworICAgICAgICBpZiBzYW1wbGUudmFsaWQoKToKKyAgICAgICAgICAgIG1lbV9zdGF0cy5hcHBlbmQoc2FtcGxlKQorCisgICAgcmV0dXJuIG1lbV9zdGF0cworCisjIGlmIHdlIGJvb3QgdGhlIGtlcm5lbCB3aXRoOiBpbml0Y2FsbF9kZWJ1ZyBwcmludGsudGltZT0xIHdlIGNhbgorIyBnZXQgYWxsIG1hbm5lciBvZiBpbnRlcmVzdGluZyBkYXRhIGZyb20gdGhlIGRtZXNnIG91dHB1dAorIyBXZSB0dXJuIHRoaXMgaW50byBhIHBzZXVkby1wcm9jZXNzIHRyZWU6IGVhY2ggZXZlbnQgaXMKKyMgY2hhcmFjdGVyaXNlZCBieSBhCisjIHdlIGRvbid0IHRyeSB0byBkZXRlY3QgYSAia2VybmVsIGZpbmlzaGVkIiBzdGF0ZSAtIHNpbmNlIHRoZSBrZXJuZWwKKyMgY29udGludWVzIHRvIGRvIGludGVyZXN0aW5nIHRoaW5ncyBhZnRlciBpbml0IGlzIGNhbGxlZC4KKyMKKyMgc2FtcGxlIGlucHV0OgorIyBbICAgIDAuMDAwMDAwXSBBQ1BJOiBGQUNQIDNmNGZjMDAwIDAwMEY0ICh2MDQgSU5URUwgIE5hcGEgICAgIDAwMDAwMDAxIE1TRlQgMDEwMDAwMTMpCisjIC4uLgorIyBbICAgIDAuMDM5OTkzXSBjYWxsaW5nICBtaWdyYXRpb25faW5pdCsweDAvMHg2YiBAIDEKKyMgWyAgICAwLjAzOTk5M10gaW5pdGNhbGwgbWlncmF0aW9uX2luaXQrMHgwLzB4NmIgcmV0dXJuZWQgMSBhZnRlciAwIHVzZWNzCitkZWYgX3BhcnNlX2RtZXNnKHdyaXRlciwgZmlsZSk6CisgICAgdGltZXN0YW1wX3JlID0gcmUuY29tcGlsZSAoIl5cW1xzKihcZCtcLlxkKylccypdXHMrKC4qKSQiKQorICAgIHNwbGl0X3JlID0gcmUuY29tcGlsZSAoIl4oXFMrKVxzKyhbXFNcK18tXSspICguKikkIikKKyAgICBwcm9jZXNzTWFwID0ge30KKyAgICBpZHggPSAwCisgICAgaW5jID0gMS4wIC8gMTAwMDAwMAorICAgIGtlcm5lbCA9IFByb2Nlc3Mod3JpdGVyLCBpZHgsICJrLWJvb3QiLCAwLCAwLjEpCisgICAgcHJvY2Vzc01hcFsnay1ib290J10gPSBrZXJuZWwKKyAgICBiYXNlX3RzID0gRmFsc2UKKyAgICBtYXhfdHMgPSAwCisgICAgZm9yIGxpbmUgaW4gZmlsZS5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpLnNwbGl0KCdcbicpOgorICAgICAgICB0ID0gdGltZXN0YW1wX3JlLm1hdGNoIChsaW5lKQorICAgICAgICBpZiB0IGlzIE5vbmU6CisjICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiZHVmZiB0aW1lc3RhbXAgIiArIGxpbmUKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgdGltZV9tcyA9IGZsb2F0ICh0Lmdyb3VwKDEpKSAqIDEwMDAKKyAgICAgICAgIyBsb29rcyBsaWtlIHdlIG1heSBoYXZlIGEgaHVnZSBkaWZmIGFmdGVyIHRoZSBjbG9jaworICAgICAgICAjIGhhcyBiZWVuIHNldCB1cC4gVGhpcyBjb3VsZCBsZWFkIHRvIGh1Z2UgZ3JhcGg6CisgICAgICAgICMgc28gaHVnZSB3ZSB3aWxsIGJlIGtpbGxlZCBieSB0aGUgT09NLgorICAgICAgICAjIFNvIGluc3RlYWQgb2YgdXNpbmcgdGhlIHBsYWluIHRpbWVzdGFtcCB3ZSB3aWxsCisgICAgICAgICMgdXNlIGEgZGVsdGEgdG8gZmlyc3Qgb25lIGFuZCBza2lwIHRoZSBmaXJzdCBvbmUKKyAgICAgICAgIyBmb3IgY29udmVuaWVuY2UKKyAgICAgICAgaWYgbWF4X3RzID09IDAgYW5kIG5vdCBiYXNlX3RzIGFuZCB0aW1lX21zID4gMTAwMDoKKyAgICAgICAgICAgIGJhc2VfdHMgPSB0aW1lX21zCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBtYXhfdHMgPSBtYXgodGltZV9tcywgbWF4X3RzKQorICAgICAgICBpZiBiYXNlX3RzOgorIyAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgImZzY2tlZCBjbG9jazogdXNlZCAlZiBpbnN0ZWFkIG9mICVmIiAlICh0aW1lX21zIC0gYmFzZV90cywgdGltZV9tcykKKyAgICAgICAgICAgIHRpbWVfbXMgLT0gYmFzZV90cworICAgICAgICBtID0gc3BsaXRfcmUubWF0Y2ggKHQuZ3JvdXAoMikpCisKKyAgICAgICAgaWYgbSBpcyBOb25lOgorICAgICAgICAgICAgY29udGludWUKKyMgICAgICAgICAgICAgICBwcmludCAibWF0Y2g6ICclcyciICUgKG0uZ3JvdXAoMSkpCisgICAgICAgIHR5cGUgPSBtLmdyb3VwKDEpCisgICAgICAgIGZ1bmMgPSBtLmdyb3VwKDIpCisgICAgICAgIHJlc3QgPSBtLmdyb3VwKDMpCisKKyAgICAgICAgaWYgdC5ncm91cCgyKS5zdGFydHN3aXRoICgnV3JpdGUgcHJvdGVjdGluZyB0aGUnKSBvciBcCisgICAgICAgICAgIHQuZ3JvdXAoMikuc3RhcnRzd2l0aCAoJ0ZyZWVpbmcgdW51c2VkIGtlcm5lbCBtZW1vcnknKToKKyAgICAgICAgICAgIGtlcm5lbC5kdXJhdGlvbiA9IHRpbWVfbXMgLyAxMAorICAgICAgICAgICAgY29udGludWUKKworIyAgICAgICAgICAgICAgIHByaW50ICJmb286ICclcycgJyVzJyAnJXMnIiAlICh0eXBlLCBmdW5jLCByZXN0KQorICAgICAgICBpZiB0eXBlID09ICJjYWxsaW5nIjoKKyAgICAgICAgICAgIHBwaWQgPSBrZXJuZWwucGlkCisgICAgICAgICAgICBwID0gcmUubWF0Y2ggKCJcQCAoXGQrKSIsIHJlc3QpCisgICAgICAgICAgICBpZiBwIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHBwaWQgPSBmbG9hdCAocC5ncm91cCgxKSkgLy8gMTAwMAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAibWF0Y2g6ICclcycgKCclZycpIGF0ICclcyciICUgKGZ1bmMsIHBwaWQsIHRpbWVfbXMpCisgICAgICAgICAgICBuYW1lID0gZnVuYy5zcGxpdCAoJysnLCAxKSBbMF0KKyAgICAgICAgICAgIGlkeCArPSBpbmMKKyAgICAgICAgICAgIHByb2Nlc3NNYXBbZnVuY10gPSBQcm9jZXNzKHdyaXRlciwgcHBpZCArIGlkeCwgbmFtZSwgcHBpZCwgdGltZV9tcyAvIDEwKQorICAgICAgICBlbGlmIHR5cGUgPT0gImluaXRjYWxsIjoKKyMgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJmaW5pc2hlZDogJyVzJyBhdCAnJXMnIiAlIChmdW5jLCB0aW1lX21zKQorICAgICAgICAgICAgaWYgZnVuYyBpbiBwcm9jZXNzTWFwOgorICAgICAgICAgICAgICAgIHByb2Nlc3MgPSBwcm9jZXNzTWFwW2Z1bmNdCisgICAgICAgICAgICAgICAgcHJvY2Vzcy5kdXJhdGlvbiA9ICh0aW1lX21zIC8gMTApIC0gcHJvY2Vzcy5zdGFydF90aW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50KCJjb3JydXB0ZWQgaW5pdCBjYWxsIGZvciAlcyIgJSAoZnVuYykpCisKKyAgICAgICAgZWxpZiB0eXBlID09ICJhc3luY193YWl0aW5nIiBvciB0eXBlID09ICJhc3luY19jb250aW51aW5nIjoKKyAgICAgICAgICAgIGNvbnRpbnVlICMgaWdub3JlCisKKyAgICByZXR1cm4gcHJvY2Vzc01hcC52YWx1ZXMoKQorCisjCisjIFBhcnNlIGJpbmFyeSBwYWNjdCBhY2NvdW50aW5nIGZpbGUgb3V0cHV0IGlmIHdlIGhhdmUgb25lCisjIGNmLiAvdXNyL2luY2x1ZGUvbGludXgvYWNjdC5oCisjCitkZWYgX3BhcnNlX3BhY2N0KHdyaXRlciwgZmlsZSk6CisgICAgIyByZWFkIExFIGludDMyCisgICAgZGVmIF9yZWFkX2xlX2ludDMyKGZpbGUpOgorICAgICAgICBieXRzID0gZmlsZS5yZWFkKDQpCisgICAgICAgIHJldHVybiAob3JkKGJ5dHNbMF0pKSAgICAgICB8IChvcmQoYnl0c1sxXSkgPDwgOCkgfCBcCisgICAgICAgICAgICAgICAob3JkKGJ5dHNbMl0pIDw8IDE2KSB8IChvcmQoYnl0c1szXSkgPDwgMjQpCisKKyAgICBwYXJlbnRfbWFwID0ge30KKyAgICBwYXJlbnRfbWFwWzBdID0gMAorICAgIHdoaWxlIGZpbGUucmVhZCgxKSAhPSAiIjogIyBpZ25vcmUgZmxhZ3MKKyAgICAgICAgdmVyID0gZmlsZS5yZWFkKDEpCisgICAgICAgIGlmIG9yZCh2ZXIpIDwgMzoKKyAgICAgICAgICAgIHByaW50KCJJbnZhbGlkIHZlcnNpb24gMHgleCIgJSAob3JkKHZlcikpKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBmaWxlLnNlZWsgKDE0LCAxKSAgICAgIyB1c2VyLCBncm91cCBldGMuCisgICAgICAgIHBpZCA9IF9yZWFkX2xlX2ludDMyIChmaWxlKQorICAgICAgICBwcGlkID0gX3JlYWRfbGVfaW50MzIgKGZpbGUpCisjICAgICAgICAgICAgICAgcHJpbnQgIlBhcmVudCBvZiAlZCBpcyAlZCIgJSAocGlkLCBwcGlkKQorICAgICAgICBwYXJlbnRfbWFwW3BpZF0gPSBwcGlkCisgICAgICAgIGZpbGUuc2VlayAoNCArIDQgKyAxNiwgMSkgIyB0aW1pbmdzCisgICAgICAgIGZpbGUuc2VlayAoMTYsIDEpICAgICAgICAgIyBhY2N0X2NvbW0KKyAgICByZXR1cm4gcGFyZW50X21hcAorCitkZWYgX3BhcnNlX3BhdGVybml0eV9sb2cod3JpdGVyLCBmaWxlKToKKyAgICBwYXJlbnRfbWFwID0ge30KKyAgICBwYXJlbnRfbWFwWzBdID0gMAorICAgIGZvciBsaW5lIGluIGZpbGUucmVhZCgpLmRlY29kZSgndXRmLTgnKS5zcGxpdCgnXG4nKToKKyAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBlbGVtcyA9IGxpbmUuc3BsaXQoJyAnKSAjIDxDaGlsZD4gPFBhcmVudD4KKyAgICAgICAgaWYgbGVuIChlbGVtcykgPj0gMjoKKyMgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJwYXRlcm5pdHkgb2YgJWQgaXMgJWQiICUgKGludChlbGVtc1swXSksIGludChlbGVtc1sxXSkpCisgICAgICAgICAgICBwYXJlbnRfbWFwW2ludChlbGVtc1swXSldID0gaW50KGVsZW1zWzFdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIk9kZCBwYXRlcm5pdHkgbGluZSAnJXMnIiAlIChsaW5lKSkKKyAgICByZXR1cm4gcGFyZW50X21hcAorCitkZWYgX3BhcnNlX2NtZGxpbmVfbG9nKHdyaXRlciwgZmlsZSk6CisgICAgY21kTGluZXMgPSB7fQorICAgIGZvciBibG9jayBpbiBmaWxlLnJlYWQoKS5kZWNvZGUoJ3V0Zi04Jykuc3BsaXQoJ1xuXG4nKToKKyAgICAgICAgbGluZXMgPSBibG9jay5zcGxpdCgnXG4nKQorICAgICAgICBpZiBsZW4gKGxpbmVzKSA+PSAzOgorIyAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkxpbmVzICclcyciICUgKGxpbmVzWzBdKQorICAgICAgICAgICAgcGlkID0gaW50IChsaW5lc1swXSkKKyAgICAgICAgICAgIHZhbHVlcyA9IHt9CisgICAgICAgICAgICB2YWx1ZXNbJ2V4ZSddID0gbGluZXNbMV0ubHN0cmlwKCc6JykKKyAgICAgICAgICAgIGFyZ3MgPSBsaW5lc1syXS5sc3RyaXAoJzonKS5zcGxpdCgnXDAnKQorICAgICAgICAgICAgYXJncy5wb3AoKQorICAgICAgICAgICAgdmFsdWVzWydhcmdzJ10gPSBhcmdzCisgICAgICAgICAgICBjbWRMaW5lc1twaWRdID0gdmFsdWVzCisgICAgcmV0dXJuIGNtZExpbmVzCisKK2RlZiBnZXRfbnVtX2NwdXMoaGVhZGVycyk6CisgICAgIiIiR2V0IHRoZSBudW1iZXIgb2YgQ1BVcyBmcm9tIHRoZSBzeXN0ZW0uY3B1IGhlYWRlciBwcm9wZXJ0eS4gQXMgdGhlCisgICAgQ1BVIHV0aWxpemF0aW9uIGdyYXBocyBhcmUgcmVsYXRpdmUsIHRoZSBudW1iZXIgb2YgQ1BVcyBjdXJyZW50bHkgbWFrZXMKKyAgICBubyBkaWZmZXJlbmNlLiIiIgorICAgIGlmIGhlYWRlcnMgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIDEKKyAgICBpZiBoZWFkZXJzLmdldCgic3lzdGVtLmNwdS5udW0iKToKKyAgICAgICAgcmV0dXJuIG1heCAoaW50IChoZWFkZXJzLmdldCgic3lzdGVtLmNwdS5udW0iKSksIDEpCisgICAgY3B1X21vZGVsID0gaGVhZGVycy5nZXQoInN5c3RlbS5jcHUiKQorICAgIGlmIGNwdV9tb2RlbCBpcyBOb25lOgorICAgICAgICByZXR1cm4gMQorICAgIG1hdCA9IHJlLm1hdGNoKCIuKlxcKChcXGQrKVxcKSIsIGNwdV9tb2RlbCkKKyAgICBpZiBtYXQgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIDEKKyAgICByZXR1cm4gbWF4IChpbnQobWF0Lmdyb3VwKDEpKSwgMSkKKworZGVmIF9kb19wYXJzZSh3cml0ZXIsIHN0YXRlLCBmaWxlbmFtZSwgZmlsZSk6CisgICAgd3JpdGVyLmluZm8oInBhcnNpbmcgJyVzJyIgJSBmaWxlbmFtZSkKKyAgICB0MSA9IGNsb2NrKCkKKyAgICBwYXRocyA9IGZpbGVuYW1lLnNwbGl0KCIvIikKKyAgICB0YXNrID0gcGF0aHNbLTFdCisgICAgcG4gPSBwYXRoc1stMl0KKyAgICBzdGFydCA9IE5vbmUKKyAgICBlbmQgPSBOb25lCisgICAgZm9yIGxpbmUgaW4gZmlsZToKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJTdGFydGVkOiIpOgorICAgICAgICAgICAgc3RhcnQgPSBpbnQoZmxvYXQobGluZS5zcGxpdCgpWy0xXSkpCisgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCJFbmRlZDoiKToKKyAgICAgICAgICAgIGVuZCA9IGludChmbG9hdChsaW5lLnNwbGl0KClbLTFdKSkKKyAgICBpZiBzdGFydCBhbmQgZW5kOgorICAgICAgICBzdGF0ZS5hZGRfcHJvY2VzcyhwbiArICI6IiArIHRhc2ssIHN0YXJ0LCBlbmQpCisgICAgdDIgPSBjbG9jaygpCisgICAgd3JpdGVyLmluZm8oIiAgJXMgc2Vjb25kcyIgJSBzdHIodDItdDEpKQorICAgIHJldHVybiBzdGF0ZQorCitkZWYgcGFyc2VfZmlsZSh3cml0ZXIsIHN0YXRlLCBmaWxlbmFtZSk6CisgICAgaWYgc3RhdGUuZmlsZW5hbWUgaXMgTm9uZToKKyAgICAgICAgc3RhdGUuZmlsZW5hbWUgPSBmaWxlbmFtZQorICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShmaWxlbmFtZSkKKyAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyYiIpIGFzIGZpbGU6CisgICAgICAgIHJldHVybiBfZG9fcGFyc2Uod3JpdGVyLCBzdGF0ZSwgZmlsZW5hbWUsIGZpbGUpCisKK2RlZiBwYXJzZV9wYXRocyh3cml0ZXIsIHN0YXRlLCBwYXRocyk6CisgICAgZm9yIHBhdGggaW4gcGF0aHM6CisgICAgICAgIGlmIHN0YXRlLmZpbGVuYW1lIGlzIE5vbmU6CisgICAgICAgICAgICBzdGF0ZS5maWxlbmFtZSA9IHBhdGgKKyAgICAgICAgcm9vdCwgZXh0ZW5zaW9uID0gb3MucGF0aC5zcGxpdGV4dChwYXRoKQorICAgICAgICBpZiBub3Qob3MucGF0aC5leGlzdHMocGF0aCkpOgorICAgICAgICAgICAgd3JpdGVyLndhcm4oIndhcm5pbmc6IHBhdGggJyVzJyBkb2VzIG5vdCBleGlzdCwgaWdub3JpbmcuIiAlIHBhdGgpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAjc3RhdGUuZmlsZW5hbWUgPSBwYXRoCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIocGF0aCk6CisgICAgICAgICAgICBmaWxlcyA9IHNvcnRlZChbb3MucGF0aC5qb2luKHBhdGgsIGYpIGZvciBmIGluIG9zLmxpc3RkaXIocGF0aCldKQorICAgICAgICAgICAgc3RhdGUgPSBwYXJzZV9wYXRocyh3cml0ZXIsIHN0YXRlLCBmaWxlcykKKyAgICAgICAgZWxpZiBleHRlbnNpb24gaW4gWyIudGFyIiwgIi50Z3oiLCAiLmd6Il06CisgICAgICAgICAgICBpZiBleHRlbnNpb24gPT0gIi5neiI6CisgICAgICAgICAgICAgICAgcm9vdCwgZXh0ZW5zaW9uID0gb3MucGF0aC5zcGxpdGV4dChyb290KQorICAgICAgICAgICAgICAgIGlmIGV4dGVuc2lvbiAhPSAiLnRhciI6CisgICAgICAgICAgICAgICAgICAgIHdyaXRlci53YXJuKCJ3YXJuaW5nOiBjYW4gb25seSBoYW5kbGUgemlwcGVkIHRhciBmaWxlcywgbm90IHppcHBlZCAnJXMnLWZpbGVzOyBpZ25vcmluZyIgJSBleHRlbnNpb24pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB0ZiA9IE5vbmUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3cml0ZXIuc3RhdHVzKCJwYXJzaW5nICclcyciICUgcGF0aCkKKyAgICAgICAgICAgICAgICB0ZiA9IHRhcmZpbGUub3BlbihwYXRoLCAncjoqJykKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiB0Zi5nZXRuYW1lcygpOgorICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IF9kb19wYXJzZSh3cml0ZXIsIHN0YXRlLCBuYW1lLCB0Zi5leHRyYWN0ZmlsZShuYW1lKSkKKyAgICAgICAgICAgIGV4Y2VwdCB0YXJmaWxlLlJlYWRFcnJvciBhcyBlcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUVycm9yKCJlcnJvcjogY291bGQgbm90IHJlYWQgdGFyZmlsZSAnJXMnOiAlcy4iICUgKHBhdGgsIGVycm9yKSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgaWYgdGYgIT0gTm9uZToKKyAgICAgICAgICAgICAgICAgICAgdGYuY2xvc2UoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RhdGUgPSBwYXJzZV9maWxlKHdyaXRlciwgc3RhdGUsIHBhdGgpCisgICAgcmV0dXJuIHN0YXRlCisKK2RlZiBzcGxpdF9yZXMocmVzLCBvcHRpb25zKToKKyAgICAiIiIgU3BsaXQgdGhlIHJlcyBpbnRvIG4gcGllY2VzICIiIgorICAgIHJlc19saXN0ID0gW10KKyAgICBpZiBvcHRpb25zLm51bSA+IDE6CisgICAgICAgIHNfbGlzdCA9IHNvcnRlZChyZXMuc3RhcnQua2V5cygpKQorICAgICAgICBmcmFnX3NpemUgPSBsZW4oc19saXN0KSAvIGZsb2F0KG9wdGlvbnMubnVtKQorICAgICAgICAjIE5lZWQgdGhlIHRvcCB2YWx1ZQorICAgICAgICBpZiBmcmFnX3NpemUgPiBpbnQoZnJhZ19zaXplKToKKyAgICAgICAgICAgIGZyYWdfc2l6ZSA9IGludChmcmFnX3NpemUgKyAxKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnJhZ19zaXplID0gaW50KGZyYWdfc2l6ZSkKKworICAgICAgICBzdGFydCA9IDAKKyAgICAgICAgZW5kID0gZnJhZ19zaXplCisgICAgICAgIHdoaWxlIHN0YXJ0IDwgZW5kOgorICAgICAgICAgICAgc3RhdGUgPSBUcmFjZShOb25lLCBbXSwgTm9uZSkKKyAgICAgICAgICAgIGlmIG9wdGlvbnMuZnVsbF90aW1lOgorICAgICAgICAgICAgICAgIHN0YXRlLm1pbiA9IG1pbihyZXMuc3RhcnQua2V5cygpKQorICAgICAgICAgICAgICAgIHN0YXRlLm1heCA9IG1heChyZXMuZW5kLmtleXMoKSkKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHN0YXJ0LCBlbmQpOgorICAgICAgICAgICAgICAgICMgQWRkIHRoaXMgbGluZSBmb3IgcmVmZXJlbmNlCisgICAgICAgICAgICAgICAgI3N0YXRlLmFkZF9wcm9jZXNzKHBuICsgIjoiICsgdGFzaywgc3RhcnQsIGVuZCkKKyAgICAgICAgICAgICAgICBmb3IgcCBpbiByZXMuc3RhcnRbc19saXN0W2ldXToKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWRkX3Byb2Nlc3MocCwgc19saXN0W2ldLCByZXMucHJvY2Vzc2VzW3BdWzFdKQorICAgICAgICAgICAgc3RhcnQgPSBlbmQKKyAgICAgICAgICAgIGVuZCA9IGVuZCArIGZyYWdfc2l6ZQorICAgICAgICAgICAgaWYgZW5kID4gbGVuKHNfbGlzdCk6CisgICAgICAgICAgICAgICAgZW5kID0gbGVuKHNfbGlzdCkKKyAgICAgICAgICAgIHJlc19saXN0LmFwcGVuZChzdGF0ZSkKKyAgICBlbHNlOgorICAgICAgICByZXNfbGlzdC5hcHBlbmQocmVzKQorICAgIHJldHVybiByZXNfbGlzdApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL3Byb2Nlc3NfdHJlZS5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9wcm9jZXNzX3RyZWUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y4ODExMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9wcm9jZXNzX3RyZWUucHkKQEAgLTAsMCArMSwyOTIgQEAKKyMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5Ym9vdGNoYXJ0Z3VpLgorCisjICBweWJvb3RjaGFydGd1aSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgIHB5Ym9vdGNoYXJ0Z3VpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgIGFsb25nIHdpdGggcHlib290Y2hhcnRndWkuIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworY2xhc3MgUHJvY2Vzc1RyZWU6CisgICAgIiIiUHJvY2Vzc1RyZWUgZW5jYXBzdWxhdGVzIGEgcHJvY2VzcyB0cmVlLiAgVGhlIHRyZWUgaXMgYnVpbHQgZnJvbSBsb2cgZmlsZXMKKyAgICAgICByZXRyaWV2ZWQgZHVyaW5nIHRoZSBib290IHByb2Nlc3MuICBXaGVuIGJ1aWxkaW5nIHRoZSBwcm9jZXNzIHRyZWUsIGl0IGlzCisgICAgICAgcHJ1bmVkIGFuZCBtZXJnZWQgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byB2aXN1YWxpemUgaXQgaW4gYSBjb21wcmVoZW5zaWJsZQorICAgICAgIG1hbm5lci4KKworICAgICAgIFRoZSBmb2xsb3dpbmcgcHJ1bmluZyB0ZWNobmlxdWVzIGFyZSB1c2VkOgorCisgICAgICAgICogaWRsZSBwcm9jZXNzZXMgdGhhdCBrZWVwIHJ1bm5pbmcgZHVyaW5nIHRoZSBsYXN0IHByb2Nlc3Mgc2FtcGxlCisgICAgICAgICAgKHdoaWNoIGlzIGEgaGV1cmlzdGljIGZvciBhIGJhY2tncm91bmQgcHJvY2Vzc2VzKSBhcmUgcmVtb3ZlZCwKKyAgICAgICAgKiBzaG9ydC1saXZlZCBwcm9jZXNzZXMgKGkuZS4gcHJvY2Vzc2VzIHRoYXQgb25seSBsaXZlIGZvciB0aGUKKyAgICAgICAgICBkdXJhdGlvbiBvZiB0d28gc2FtcGxlcyBvciBsZXNzKSBhcmUgcmVtb3ZlZCwKKyAgICAgICAgKiB0aGUgcHJvY2Vzc2VzIHVzZWQgYnkgdGhlIGJvb3QgbG9nZ2VyIGFyZSByZW1vdmVkLAorICAgICAgICAqIGV4cGxvZGVycyAoaS5lLiBwcm9jZXNzZXMgdGhhdCBhcmUga25vd24gdG8gc3Bhd24gaHVnZSBtZWFuaW5nbGVzcworICAgICAgICAgIHByb2Nlc3Mgc3VidHJlZXMpIGhhdmUgdGhlaXIgc3VidHJlZXMgbWVyZ2VkIHRvZ2V0aGVyLAorICAgICAgICAqIHNpYmxpbmdzIChpLmUuIHByb2Nlc3NlcyB3aXRoIHRoZSBzYW1lIGNvbW1hbmQgbGluZSBsaXZpbmcKKyAgICAgICAgICBjb25jdXJyZW50bHkgLS0gdGhyZWFkIGhldXJpc3RpYykgYXJlIG1lcmdlZCB0b2dldGhlciwKKyAgICAgICAgKiBwcm9jZXNzIHJ1bnMgKHVuYXJ5IHRyZWVzIHdpdGggcHJvY2Vzc2VzIHNoYXJpbmcgdGhlIGNvbW1hbmQgbGluZSkKKyAgICAgICAgICBhcmUgbWVyZ2VkIHRvZ2V0aGVyLgorCisgICAgIiIiCisgICAgTE9HR0VSX1BST0MgPSAnYm9vdGNoYXJ0LWNvbGxlJworICAgIEVYUExPREVSX1BST0NFU1NFUyA9IHNldChbJ2h3dXAnXSkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3cml0ZXIsIGtlcm5lbCwgcHNzdGF0cywgc2FtcGxlX3BlcmlvZCwKKyAgICAgICAgICAgICAgICAgbW9uaXRvcmVkQXBwLCBwcnVuZSwgaWRsZSwgdGFza3N0YXRzLAorICAgICAgICAgICAgICAgICBhY2N1cmF0ZV9wYXJlbnRhZ2UsIGZvcl90ZXN0aW5nID0gRmFsc2UpOgorICAgICAgICBzZWxmLndyaXRlciA9IHdyaXRlcgorICAgICAgICBzZWxmLnByb2Nlc3NfdHJlZSA9IFtdCisgICAgICAgIHNlbGYudGFza3N0YXRzID0gdGFza3N0YXRzCisgICAgICAgIGlmIHBzc3RhdHMgaXMgTm9uZToKKyAgICAgICAgICAgIHByb2Nlc3NfbGlzdCA9IGtlcm5lbAorICAgICAgICBlbGlmIGtlcm5lbCBpcyBOb25lOgorICAgICAgICAgICAgcHJvY2Vzc19saXN0ID0gcHNzdGF0cy5wcm9jZXNzX21hcC52YWx1ZXMoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJvY2Vzc19saXN0ID0gbGlzdChrZXJuZWwpICsgbGlzdChwc3N0YXRzLnByb2Nlc3NfbWFwLnZhbHVlcygpKQorICAgICAgICBzZWxmLnByb2Nlc3NfbGlzdCA9IHNvcnRlZChwcm9jZXNzX2xpc3QsIGtleSA9IGxhbWJkYSBwOiBwLnBpZCkKKyAgICAgICAgc2VsZi5zYW1wbGVfcGVyaW9kID0gc2FtcGxlX3BlcmlvZAorCisgICAgICAgIHNlbGYuYnVpbGQoKQorICAgICAgICBpZiBub3QgYWNjdXJhdGVfcGFyZW50YWdlOgorICAgICAgICAgICAgc2VsZi51cGRhdGVfcHBpZHNfZm9yX2RhZW1vbnMoc2VsZi5wcm9jZXNzX2xpc3QpCisKKyAgICAgICAgc2VsZi5zdGFydF90aW1lID0gc2VsZi5nZXRfc3RhcnRfdGltZShzZWxmLnByb2Nlc3NfdHJlZSkKKyAgICAgICAgc2VsZi5lbmRfdGltZSA9IHNlbGYuZ2V0X2VuZF90aW1lKHNlbGYucHJvY2Vzc190cmVlKQorICAgICAgICBzZWxmLmR1cmF0aW9uID0gc2VsZi5lbmRfdGltZSAtIHNlbGYuc3RhcnRfdGltZQorICAgICAgICBzZWxmLmlkbGUgPSBpZGxlCisKKyAgICAgICAgaWYgZm9yX3Rlc3Rpbmc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICByZW1vdmVkID0gc2VsZi5tZXJnZV9sb2dnZXIoc2VsZi5wcm9jZXNzX3RyZWUsIHNlbGYuTE9HR0VSX1BST0MsIG1vbml0b3JlZEFwcCwgRmFsc2UpCisgICAgICAgIHdyaXRlci5zdGF0dXMoIm1lcmdlZCAlaSBsb2dnZXIgcHJvY2Vzc2VzIiAlIHJlbW92ZWQpCisKKyAgICAgICAgaWYgcHJ1bmU6CisgICAgICAgICAgICBwX3Byb2Nlc3NlcyA9IHNlbGYucHJ1bmUoc2VsZi5wcm9jZXNzX3RyZWUsIE5vbmUpCisgICAgICAgICAgICBwX2V4cGxvZGVycyA9IHNlbGYubWVyZ2VfZXhwbG9kZXJzKHNlbGYucHJvY2Vzc190cmVlLCBzZWxmLkVYUExPREVSX1BST0NFU1NFUykKKyAgICAgICAgICAgIHBfdGhyZWFkcyA9IHNlbGYubWVyZ2Vfc2libGluZ3Moc2VsZi5wcm9jZXNzX3RyZWUpCisgICAgICAgICAgICBwX3J1bnMgPSBzZWxmLm1lcmdlX3J1bnMoc2VsZi5wcm9jZXNzX3RyZWUpCisgICAgICAgICAgICB3cml0ZXIuc3RhdHVzKCJwcnVuZWQgJWkgcHJvY2VzcywgJWkgZXhwbG9kZXJzLCAlaSB0aHJlYWRzLCBhbmQgJWkgcnVucyIgJSAocF9wcm9jZXNzZXMsIHBfZXhwbG9kZXJzLCBwX3RocmVhZHMsIHBfcnVucykpCisKKyAgICAgICAgc2VsZi5zb3J0KHNlbGYucHJvY2Vzc190cmVlKQorCisgICAgICAgIHNlbGYuc3RhcnRfdGltZSA9IHNlbGYuZ2V0X3N0YXJ0X3RpbWUoc2VsZi5wcm9jZXNzX3RyZWUpCisgICAgICAgIHNlbGYuZW5kX3RpbWUgPSBzZWxmLmdldF9lbmRfdGltZShzZWxmLnByb2Nlc3NfdHJlZSkKKyAgICAgICAgc2VsZi5kdXJhdGlvbiA9IHNlbGYuZW5kX3RpbWUgLSBzZWxmLnN0YXJ0X3RpbWUKKworICAgICAgICBzZWxmLm51bV9wcm9jID0gc2VsZi5udW1fbm9kZXMoc2VsZi5wcm9jZXNzX3RyZWUpCisKKyAgICBkZWYgYnVpbGQoc2VsZik6CisgICAgICAgICIiIkJ1aWxkIHRoZSBwcm9jZXNzIHRyZWUgZnJvbSB0aGUgbGlzdCBvZiB0b3Agc2FtcGxlcy4iIiIKKyAgICAgICAgc2VsZi5wcm9jZXNzX3RyZWUgPSBbXQorICAgICAgICBmb3IgcHJvYyBpbiBzZWxmLnByb2Nlc3NfbGlzdDoKKyAgICAgICAgICAgIGlmIG5vdCBwcm9jLnBhcmVudDoKKyAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NfdHJlZS5hcHBlbmQocHJvYykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJvYy5wYXJlbnQuY2hpbGRfbGlzdC5hcHBlbmQocHJvYykKKworICAgIGRlZiBzb3J0KHNlbGYsIHByb2Nlc3Nfc3VidHJlZSk6CisgICAgICAgICIiIlNvcnQgcHJvY2VzcyB0cmVlLiIiIgorICAgICAgICBmb3IgcCBpbiBwcm9jZXNzX3N1YnRyZWU6CisgICAgICAgICAgICBwLmNoaWxkX2xpc3Quc29ydChrZXkgPSBsYW1iZGEgcDogcC5waWQpCisgICAgICAgICAgICBzZWxmLnNvcnQocC5jaGlsZF9saXN0KQorCisgICAgZGVmIG51bV9ub2RlcyhzZWxmLCBwcm9jZXNzX2xpc3QpOgorICAgICAgICAiQ291bnRzIHRoZSBudW1iZXIgb2Ygbm9kZXMgaW4gdGhlIHNwZWNpZmllZCBwcm9jZXNzIHRyZWUuIiIiCisgICAgICAgIG5vZGVzID0gMAorICAgICAgICBmb3IgcHJvYyBpbiBwcm9jZXNzX2xpc3Q6CisgICAgICAgICAgICBub2RlcyA9IG5vZGVzICsgc2VsZi5udW1fbm9kZXMocHJvYy5jaGlsZF9saXN0KQorICAgICAgICByZXR1cm4gbm9kZXMgKyBsZW4ocHJvY2Vzc19saXN0KQorCisgICAgZGVmIGdldF9zdGFydF90aW1lKHNlbGYsIHByb2Nlc3Nfc3VidHJlZSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIHN0YXJ0IHRpbWUgb2YgdGhlIHByb2Nlc3Mgc3VidHJlZS4gIFRoaXMgaXMgdGhlIHN0YXJ0CisgICAgICAgICAgIHRpbWUgb2YgdGhlIGVhcmxpZXN0IHByb2Nlc3MuCisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBwcm9jZXNzX3N1YnRyZWU6CisgICAgICAgICAgICByZXR1cm4gMTAwMDAwMDAwCisgICAgICAgIHJldHVybiBtaW4oIFttaW4ocHJvYy5zdGFydF90aW1lLCBzZWxmLmdldF9zdGFydF90aW1lKHByb2MuY2hpbGRfbGlzdCkpIGZvciBwcm9jIGluIHByb2Nlc3Nfc3VidHJlZV0gKQorCisgICAgZGVmIGdldF9lbmRfdGltZShzZWxmLCBwcm9jZXNzX3N1YnRyZWUpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBlbmQgdGltZSBvZiB0aGUgcHJvY2VzcyBzdWJ0cmVlLiAgVGhpcyBpcyB0aGUgZW5kIHRpbWUKKyAgICAgICAgICAgb2YgdGhlIGxhc3QgY29sbGVjdGVkIHNhbXBsZS4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHByb2Nlc3Nfc3VidHJlZToKKyAgICAgICAgICAgIHJldHVybiAtMTAwMDAwMDAwCisgICAgICAgIHJldHVybiBtYXgoIFttYXgocHJvYy5zdGFydF90aW1lICsgcHJvYy5kdXJhdGlvbiwgc2VsZi5nZXRfZW5kX3RpbWUocHJvYy5jaGlsZF9saXN0KSkgZm9yIHByb2MgaW4gcHJvY2Vzc19zdWJ0cmVlXSApCisKKyAgICBkZWYgZ2V0X21heF9waWQoc2VsZiwgcHJvY2Vzc19zdWJ0cmVlKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgbWF4IFBJRCBmb3VuZCBpbiB0aGUgcHJvY2VzcyB0cmVlLiIiIgorICAgICAgICBpZiBub3QgcHJvY2Vzc19zdWJ0cmVlOgorICAgICAgICAgICAgcmV0dXJuIC0xMDAwMDAwMDAKKyAgICAgICAgcmV0dXJuIG1heCggW21heChwcm9jLnBpZCwgc2VsZi5nZXRfbWF4X3BpZChwcm9jLmNoaWxkX2xpc3QpKSBmb3IgcHJvYyBpbiBwcm9jZXNzX3N1YnRyZWVdICkKKworICAgIGRlZiB1cGRhdGVfcHBpZHNfZm9yX2RhZW1vbnMoc2VsZiwgcHJvY2Vzc19saXN0KToKKyAgICAgICAgIiIiRmVkb3JhIGhhY2s6IHdoZW4gbG9hZGluZyB0aGUgc3lzdGVtIHNlcnZpY2VzIGZyb20gcmMsIHJ1bnVzZXIoMSkKKyAgICAgICAgICAgaXMgdXNlZC4gIFRoaXMgc2V0cyB0aGUgUFBJRCBvZiBhbGwgZGFlbW9ucyB0byAxLCBza2V3aW5nCisgICAgICAgICAgIHRoZSBwcm9jZXNzIHRyZWUuICBUcnkgdG8gZGV0ZWN0IHRoaXMgYW5kIHNldCB0aGUgUFBJRCBvZgorICAgICAgICAgICB0aGVzZSBwcm9jZXNzZXMgdGhlIFBJRCBvZiByYy4KKworICAgICAgICAiIiIKKyAgICAgICAgcmNzdGFydHBpZCA9IC0xCisgICAgICAgIHJjZW5kcGlkID0gLTEKKyAgICAgICAgcmNwcm9jID0gTm9uZQorICAgICAgICBmb3IgcCBpbiBwcm9jZXNzX2xpc3Q6CisgICAgICAgICAgICBpZiBwLmNtZCA9PSAicmMiIGFuZCBwLnBwaWQgLy8gMTAwMCA9PSAxOgorICAgICAgICAgICAgICAgIHJjcHJvYyA9IHAKKyAgICAgICAgICAgICAgICByY3N0YXJ0cGlkID0gcC5waWQKKyAgICAgICAgICAgICAgICByY2VuZHBpZCA9IHNlbGYuZ2V0X21heF9waWQocC5jaGlsZF9saXN0KQorICAgICAgICBpZiByY3N0YXJ0cGlkICE9IC0xIGFuZCByY2VuZHBpZCAhPSAtMToKKyAgICAgICAgICAgIGZvciBwIGluIHByb2Nlc3NfbGlzdDoKKyAgICAgICAgICAgICAgICBpZiBwLnBpZCA+IHJjc3RhcnRwaWQgYW5kIHAucGlkIDwgcmNlbmRwaWQgYW5kIHAucHBpZCAvLyAxMDAwID09IDE6CisgICAgICAgICAgICAgICAgICAgIHAucHBpZCA9IHJjc3RhcnRwaWQKKyAgICAgICAgICAgICAgICAgICAgcC5wYXJlbnQgPSByY3Byb2MKKyAgICAgICAgICAgIGZvciBwIGluIHByb2Nlc3NfbGlzdDoKKyAgICAgICAgICAgICAgICBwLmNoaWxkX2xpc3QgPSBbXQorICAgICAgICAgICAgc2VsZi5idWlsZCgpCisKKyAgICBkZWYgcHJ1bmUoc2VsZiwgcHJvY2Vzc19zdWJ0cmVlLCBwYXJlbnQpOgorICAgICAgICAiIiJQcnVuZXMgdGhlIHByb2Nlc3MgdHJlZSBieSByZW1vdmluZyBpZGxlIHByb2Nlc3NlcyBhbmQgcHJvY2Vzc2VzCisgICAgICAgICAgIHRoYXQgb25seSBsaXZlIGZvciB0aGUgZHVyYXRpb24gb2YgYSBzaW5nbGUgdG9wIHNhbXBsZS4gIFNpYmxpbmcKKyAgICAgICAgICAgcHJvY2Vzc2VzIHdpdGggdGhlIHNhbWUgY29tbWFuZCBsaW5lIChpLmUuIHRocmVhZHMpIGFyZSBtZXJnZWQKKyAgICAgICAgICAgdG9nZXRoZXIuIFRoaXMgZmlsdGVycyBvdXQgc2xlZXB5IGJhY2tncm91bmQgcHJvY2Vzc2VzLCBzaG9ydC1saXZlZAorICAgICAgICAgICBwcm9jZXNzZXMgYW5kIGJvb3RjaGFydHMnIGFuYWx5c2lzIHRvb2xzLgorICAgICAgICAiIiIKKyAgICAgICAgZGVmIGlzX2lkbGVfYmFja2dyb3VuZF9wcm9jZXNzX3dpdGhvdXRfY2hpbGRyZW4ocCk6CisgICAgICAgICAgICBwcm9jZXNzX2VuZCA9IHAuc3RhcnRfdGltZSArIHAuZHVyYXRpb24KKyAgICAgICAgICAgIHJldHVybiBub3QgcC5hY3RpdmUgYW5kIFwKKyAgICAgICAgICAgICAgICAgICBwcm9jZXNzX2VuZCA+PSBzZWxmLnN0YXJ0X3RpbWUgKyBzZWxmLmR1cmF0aW9uIGFuZCBcCisgICAgICAgICAgICAgICAgICAgcC5zdGFydF90aW1lID4gc2VsZi5zdGFydF90aW1lIGFuZCBcCisgICAgICAgICAgICAgICAgICAgcC5kdXJhdGlvbiA+IDAuOSAqIHNlbGYuZHVyYXRpb24gYW5kIFwKKyAgICAgICAgICAgICAgICAgICBzZWxmLm51bV9ub2RlcyhwLmNoaWxkX2xpc3QpID09IDAKKworICAgICAgICBudW1fcmVtb3ZlZCA9IDAKKyAgICAgICAgaWR4ID0gMAorICAgICAgICB3aGlsZSBpZHggPCBsZW4ocHJvY2Vzc19zdWJ0cmVlKToKKyAgICAgICAgICAgIHAgPSBwcm9jZXNzX3N1YnRyZWVbaWR4XQorICAgICAgICAgICAgaWYgcGFyZW50ICE9IE5vbmUgb3IgbGVuKHAuY2hpbGRfbGlzdCkgPT0gMDoKKworICAgICAgICAgICAgICAgIHBydW5lID0gRmFsc2UKKyAgICAgICAgICAgICAgICBpZiBpc19pZGxlX2JhY2tncm91bmRfcHJvY2Vzc193aXRob3V0X2NoaWxkcmVuKHApOgorICAgICAgICAgICAgICAgICAgICBwcnVuZSA9IFRydWUKKyAgICAgICAgICAgICAgICBlbGlmIHAuZHVyYXRpb24gPD0gMiAqIHNlbGYuc2FtcGxlX3BlcmlvZDoKKyAgICAgICAgICAgICAgICAgICAgIyBzaG9ydC1saXZlZCBwcm9jZXNzCisgICAgICAgICAgICAgICAgICAgIHBydW5lID0gVHJ1ZQorCisgICAgICAgICAgICAgICAgaWYgcHJ1bmU6CisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Nfc3VidHJlZS5wb3AoaWR4KQorICAgICAgICAgICAgICAgICAgICBmb3IgYyBpbiBwLmNoaWxkX2xpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzX3N1YnRyZWUuaW5zZXJ0KGlkeCwgYykKKyAgICAgICAgICAgICAgICAgICAgbnVtX3JlbW92ZWQgKz0gMQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG51bV9yZW1vdmVkICs9IHNlbGYucHJ1bmUocC5jaGlsZF9saXN0LCBwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBudW1fcmVtb3ZlZCArPSBzZWxmLnBydW5lKHAuY2hpbGRfbGlzdCwgcCkKKyAgICAgICAgICAgIGlkeCArPSAxCisKKyAgICAgICAgcmV0dXJuIG51bV9yZW1vdmVkCisKKyAgICBkZWYgbWVyZ2VfbG9nZ2VyKHNlbGYsIHByb2Nlc3Nfc3VidHJlZSwgbG9nZ2VyX3Byb2MsIG1vbml0b3JlZF9hcHAsIGFwcF90cmVlKToKKyAgICAgICAgIiIiTWVyZ2VzIHRoZSBsb2dnZXIncyBwcm9jZXNzIHN1YnRyZWUuICBUaGUgbG9nZ2VyIHdpbGwgdHlwaWNhbGx5CisgICAgICAgICAgIHNwYXduIGxvdHMgb2Ygc2xlZXAgYW5kIGNhdCBwcm9jZXNzZXMsIHRodXMgcG9sbHV0aW5nIHRoZQorICAgICAgICAgICBwcm9jZXNzIHRyZWUuCisKKyAgICAgICAgIiIiCisgICAgICAgIG51bV9yZW1vdmVkID0gMAorICAgICAgICBmb3IgcCBpbiBwcm9jZXNzX3N1YnRyZWU6CisgICAgICAgICAgICBpc19hcHBfdHJlZSA9IGFwcF90cmVlCisgICAgICAgICAgICBpZiBsb2dnZXJfcHJvYyA9PSBwLmNtZCBhbmQgbm90IGFwcF90cmVlOgorICAgICAgICAgICAgICAgIGlzX2FwcF90cmVlID0gVHJ1ZQorICAgICAgICAgICAgICAgIG51bV9yZW1vdmVkICs9IHNlbGYubWVyZ2VfbG9nZ2VyKHAuY2hpbGRfbGlzdCwgbG9nZ2VyX3Byb2MsIG1vbml0b3JlZF9hcHAsIGlzX2FwcF90cmVlKQorICAgICAgICAgICAgICAgICMgZG9uJ3QgcmVtb3ZlIHRoZSBsb2dnZXIgaXRzZWxmCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgYXBwX3RyZWUgYW5kIG1vbml0b3JlZF9hcHAgIT0gTm9uZSBhbmQgbW9uaXRvcmVkX2FwcCA9PSBwLmNtZDoKKyAgICAgICAgICAgICAgICBpc19hcHBfdHJlZSA9IEZhbHNlCisKKyAgICAgICAgICAgIGlmIGlzX2FwcF90cmVlOgorICAgICAgICAgICAgICAgIGZvciBjaGlsZCBpbiBwLmNoaWxkX2xpc3Q6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubWVyZ2VfcHJvY2Vzc2VzKHAsIGNoaWxkKQorICAgICAgICAgICAgICAgICAgICBudW1fcmVtb3ZlZCArPSAxCisgICAgICAgICAgICAgICAgcC5jaGlsZF9saXN0ID0gW10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbnVtX3JlbW92ZWQgKz0gc2VsZi5tZXJnZV9sb2dnZXIocC5jaGlsZF9saXN0LCBsb2dnZXJfcHJvYywgbW9uaXRvcmVkX2FwcCwgaXNfYXBwX3RyZWUpCisgICAgICAgIHJldHVybiBudW1fcmVtb3ZlZAorCisgICAgZGVmIG1lcmdlX2V4cGxvZGVycyhzZWxmLCBwcm9jZXNzX3N1YnRyZWUsIHByb2Nlc3Nlcyk6CisgICAgICAgICIiIk1lcmdlcyBzcGVjaWZpYyBwcm9jZXNzIHN1YnRyZWVzICh1c2VkIGZvciBwcm9jZXNzZXMgd2hpY2ggdXN1YWxseQorICAgICAgICAgICBzcGF3biBodWdlIG1lYW5pbmdsZXNzIHByb2Nlc3MgdHJlZXMpLgorCisgICAgICAgICIiIgorICAgICAgICBudW1fcmVtb3ZlZCA9IDAKKyAgICAgICAgZm9yIHAgaW4gcHJvY2Vzc19zdWJ0cmVlOgorICAgICAgICAgICAgaWYgcHJvY2Vzc2VzIGluIHByb2Nlc3NlcyBhbmQgbGVuKHAuY2hpbGRfbGlzdCkgPiAwOgorICAgICAgICAgICAgICAgIHN1YnRyZWVtYXAgPSBzZWxmLmdldFByb2Nlc3NNYXAocC5jaGlsZF9saXN0KQorICAgICAgICAgICAgICAgIGZvciBjaGlsZCBpbiBzdWJ0cmVlbWFwLnZhbHVlcygpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLm1lcmdlX3Byb2Nlc3NlcyhwLCBjaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgbnVtX3JlbW92ZWQgKz0gbGVuKHN1YnRyZWVtYXApCisgICAgICAgICAgICAgICAgICAgIHAuY2hpbGRfbGlzdCA9IFtdCisgICAgICAgICAgICAgICAgICAgIHAuY21kICs9ICIgKCspIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBudW1fcmVtb3ZlZCArPSBzZWxmLm1lcmdlX2V4cGxvZGVycyhwLmNoaWxkX2xpc3QsIHByb2Nlc3NlcykKKyAgICAgICAgcmV0dXJuIG51bV9yZW1vdmVkCisKKyAgICBkZWYgbWVyZ2Vfc2libGluZ3Moc2VsZiwgcHJvY2Vzc19zdWJ0cmVlKToKKyAgICAgICAgIiIiTWVyZ2VzIHRocmVhZCBwcm9jZXNzZXMuICBTaWJsaW5nIHByb2Nlc3NlcyB3aXRoIHRoZSBzYW1lIGNvbW1hbmQKKyAgICAgICAgICAgbGluZSBhcmUgbWVyZ2VkIHRvZ2V0aGVyLgorCisgICAgICAgICIiIgorICAgICAgICBudW1fcmVtb3ZlZCA9IDAKKyAgICAgICAgaWR4ID0gMAorICAgICAgICB3aGlsZSBpZHggPCBsZW4ocHJvY2Vzc19zdWJ0cmVlKS0xOgorICAgICAgICAgICAgcCA9IHByb2Nlc3Nfc3VidHJlZVtpZHhdCisgICAgICAgICAgICBuZXh0cCA9IHByb2Nlc3Nfc3VidHJlZVtpZHgrMV0KKyAgICAgICAgICAgIGlmIG5leHRwLmNtZCA9PSBwLmNtZDoKKyAgICAgICAgICAgICAgICBwcm9jZXNzX3N1YnRyZWUucG9wKGlkeCsxKQorICAgICAgICAgICAgICAgIGlkeCAtPSAxCisgICAgICAgICAgICAgICAgbnVtX3JlbW92ZWQgKz0gMQorICAgICAgICAgICAgICAgIHAuY2hpbGRfbGlzdC5leHRlbmQobmV4dHAuY2hpbGRfbGlzdCkKKyAgICAgICAgICAgICAgICBzZWxmLm1lcmdlX3Byb2Nlc3NlcyhwLCBuZXh0cCkKKyAgICAgICAgICAgIG51bV9yZW1vdmVkICs9IHNlbGYubWVyZ2Vfc2libGluZ3MocC5jaGlsZF9saXN0KQorICAgICAgICAgICAgaWR4ICs9IDEKKyAgICAgICAgaWYgbGVuKHByb2Nlc3Nfc3VidHJlZSkgPiAwOgorICAgICAgICAgICAgcCA9IHByb2Nlc3Nfc3VidHJlZVstMV0KKyAgICAgICAgICAgIG51bV9yZW1vdmVkICs9IHNlbGYubWVyZ2Vfc2libGluZ3MocC5jaGlsZF9saXN0KQorICAgICAgICByZXR1cm4gbnVtX3JlbW92ZWQKKworICAgIGRlZiBtZXJnZV9ydW5zKHNlbGYsIHByb2Nlc3Nfc3VidHJlZSk6CisgICAgICAgICIiIk1lcmdlcyBwcm9jZXNzIHJ1bnMuICBTaW5nbGUgY2hpbGQgcHJvY2Vzc2VzIHdoaWNoIHNoYXJlIHRoZSBzYW1lCisgICAgICAgICAgIGNvbW1hbmQgbGluZSB3aXRoIHRoZSBwYXJlbnQgYXJlIG1lcmdlZC4KKworICAgICAgICAiIiIKKyAgICAgICAgbnVtX3JlbW92ZWQgPSAwCisgICAgICAgIGlkeCA9IDAKKyAgICAgICAgd2hpbGUgaWR4IDwgbGVuKHByb2Nlc3Nfc3VidHJlZSk6CisgICAgICAgICAgICBwID0gcHJvY2Vzc19zdWJ0cmVlW2lkeF0KKyAgICAgICAgICAgIGlmIGxlbihwLmNoaWxkX2xpc3QpID09IDEgYW5kIHAuY2hpbGRfbGlzdFswXS5jbWQgPT0gcC5jbWQ6CisgICAgICAgICAgICAgICAgY2hpbGQgPSBwLmNoaWxkX2xpc3RbMF0KKyAgICAgICAgICAgICAgICBwLmNoaWxkX2xpc3QgPSBsaXN0KGNoaWxkLmNoaWxkX2xpc3QpCisgICAgICAgICAgICAgICAgc2VsZi5tZXJnZV9wcm9jZXNzZXMocCwgY2hpbGQpCisgICAgICAgICAgICAgICAgbnVtX3JlbW92ZWQgKz0gMQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBudW1fcmVtb3ZlZCArPSBzZWxmLm1lcmdlX3J1bnMocC5jaGlsZF9saXN0KQorICAgICAgICAgICAgaWR4ICs9IDEKKyAgICAgICAgcmV0dXJuIG51bV9yZW1vdmVkCisKKyAgICBkZWYgbWVyZ2VfcHJvY2Vzc2VzKHNlbGYsIHAxLCBwMik6CisgICAgICAgICIiIk1lcmdlcyB0d28gcHJvY2Vzcycgc2FtcGxlcy4iIiIKKyAgICAgICAgcDEuc2FtcGxlcy5leHRlbmQocDIuc2FtcGxlcykKKyAgICAgICAgcDEuc2FtcGxlcy5zb3J0KCBrZXkgPSBsYW1iZGEgcDogcC50aW1lICkKKyAgICAgICAgcDF0aW1lID0gcDEuc3RhcnRfdGltZQorICAgICAgICBwMnRpbWUgPSBwMi5zdGFydF90aW1lCisgICAgICAgIHAxLnN0YXJ0X3RpbWUgPSBtaW4ocDF0aW1lLCBwMnRpbWUpCisgICAgICAgIHBlbmR0aW1lID0gbWF4KHAxdGltZSArIHAxLmR1cmF0aW9uLCBwMnRpbWUgKyBwMi5kdXJhdGlvbikKKyAgICAgICAgcDEuZHVyYXRpb24gPSBwZW5kdGltZSAtIHAxLnN0YXJ0X3RpbWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9zYW1wbGVzLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL3NhbXBsZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE1ZDc0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9zYW1wbGVzLnB5CkBAIC0wLDAgKzEsMTUxIEBACisjICBUaGlzIGZpbGUgaXMgcGFydCBvZiBweWJvb3RjaGFydGd1aS4KKworIyAgcHlib290Y2hhcnRndWkgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjICBweWJvb3RjaGFydGd1aSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICBhbG9uZyB3aXRoIHB5Ym9vdGNoYXJ0Z3VpLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKworY2xhc3MgRGlza1N0YXRTYW1wbGU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRpbWUpOgorICAgICAgICBzZWxmLnRpbWUgPSB0aW1lCisgICAgICAgIHNlbGYuZGlza2RhdGEgPSBbMCwgMCwgMF0KKyAgICBkZWYgYWRkX2Rpc2tkYXRhKHNlbGYsIG5ld19kaXNrZGF0YSk6CisgICAgICAgIHNlbGYuZGlza2RhdGEgPSBbIGEgKyBiIGZvciBhLCBiIGluIHppcChzZWxmLmRpc2tkYXRhLCBuZXdfZGlza2RhdGEpIF0KKworY2xhc3MgQ1BVU2FtcGxlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aW1lLCB1c2VyLCBzeXMsIGlvID0gMC4wLCBzd2FwID0gMC4wKToKKyAgICAgICAgc2VsZi50aW1lID0gdGltZQorICAgICAgICBzZWxmLnVzZXIgPSB1c2VyCisgICAgICAgIHNlbGYuc3lzID0gc3lzCisgICAgICAgIHNlbGYuaW8gPSBpbworICAgICAgICBzZWxmLnN3YXAgPSBzd2FwCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY3B1KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi51c2VyICsgc2VsZi5zeXMKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc3RyKHNlbGYudGltZSkgKyAiXHQiICsgc3RyKHNlbGYudXNlcikgKyAiXHQiICsgXAorICAgICAgICAgICAgICAgc3RyKHNlbGYuc3lzKSArICJcdCIgKyBzdHIoc2VsZi5pbykgKyAiXHQiICsgc3RyIChzZWxmLnN3YXApCisKK2NsYXNzIE1lbVNhbXBsZToKKyAgICB1c2VkX3ZhbHVlcyA9ICgnTWVtVG90YWwnLCAnTWVtRnJlZScsICdCdWZmZXJzJywgJ0NhY2hlZCcsICdTd2FwVG90YWwnLCAnU3dhcEZyZWUnLCkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aW1lKToKKyAgICAgICAgc2VsZi50aW1lID0gdGltZQorICAgICAgICBzZWxmLnJlY29yZHMgPSB7fQorCisgICAgZGVmIGFkZF92YWx1ZShzZWxmLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgIGlmIG5hbWUgaW4gTWVtU2FtcGxlLnVzZWRfdmFsdWVzOgorICAgICAgICAgICAgc2VsZi5yZWNvcmRzW25hbWVdID0gdmFsdWUKKworICAgIGRlZiB2YWxpZChzZWxmKToKKyAgICAgICAga2V5cyA9IHNlbGYucmVjb3Jkcy5rZXlzKCkKKyAgICAgICAgIyBkaXNjYXJkIGluY29tcGxldGUgc2FtcGxlcworICAgICAgICByZXR1cm4gW3YgZm9yIHYgaW4gTWVtU2FtcGxlLnVzZWRfdmFsdWVzIGlmIHYgbm90IGluIGtleXNdID09IFtdCisKK2NsYXNzIFByb2Nlc3NTYW1wbGU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRpbWUsIHN0YXRlLCBjcHVfc2FtcGxlKToKKyAgICAgICAgc2VsZi50aW1lID0gdGltZQorICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUKKyAgICAgICAgc2VsZi5jcHVfc2FtcGxlID0gY3B1X3NhbXBsZQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzdHIoc2VsZi50aW1lKSArICJcdCIgKyBzdHIoc2VsZi5zdGF0ZSkgKyAiXHQiICsgc3RyKHNlbGYuY3B1X3NhbXBsZSkKKworY2xhc3MgUHJvY2Vzc1N0YXRzOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3cml0ZXIsIHByb2Nlc3NfbWFwLCBzYW1wbGVfY291bnQsIHNhbXBsZV9wZXJpb2QsIHN0YXJ0X3RpbWUsIGVuZF90aW1lKToKKyAgICAgICAgc2VsZi5wcm9jZXNzX21hcCA9IHByb2Nlc3NfbWFwCisgICAgICAgIHNlbGYuc2FtcGxlX2NvdW50ID0gc2FtcGxlX2NvdW50CisgICAgICAgIHNlbGYuc2FtcGxlX3BlcmlvZCA9IHNhbXBsZV9wZXJpb2QKKyAgICAgICAgc2VsZi5zdGFydF90aW1lID0gc3RhcnRfdGltZQorICAgICAgICBzZWxmLmVuZF90aW1lID0gZW5kX3RpbWUKKyAgICAgICAgd3JpdGVyLmluZm8gKCIlZCBzYW1wbGVzLCBhdmcuIHNhbXBsZSBsZW5ndGggJWYiICUgKHNlbGYuc2FtcGxlX2NvdW50LCBzZWxmLnNhbXBsZV9wZXJpb2QpKQorICAgICAgICB3cml0ZXIuaW5mbyAoInByb2Nlc3MgbGlzdCBzaXplOiAlZCIgJSBsZW4gKHNlbGYucHJvY2Vzc19tYXAudmFsdWVzKCkpKQorCitjbGFzcyBQcm9jZXNzOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3cml0ZXIsIHBpZCwgY21kLCBwcGlkLCBzdGFydF90aW1lKToKKyAgICAgICAgc2VsZi53cml0ZXIgPSB3cml0ZXIKKyAgICAgICAgc2VsZi5waWQgPSBwaWQKKyAgICAgICAgc2VsZi5jbWQgPSBjbWQKKyAgICAgICAgc2VsZi5leGUgPSBjbWQKKyAgICAgICAgc2VsZi5hcmdzID0gW10KKyAgICAgICAgc2VsZi5wcGlkID0gcHBpZAorICAgICAgICBzZWxmLnN0YXJ0X3RpbWUgPSBzdGFydF90aW1lCisgICAgICAgIHNlbGYuZHVyYXRpb24gPSAwCisgICAgICAgIHNlbGYuc2FtcGxlcyA9IFtdCisgICAgICAgIHNlbGYucGFyZW50ID0gTm9uZQorICAgICAgICBzZWxmLmNoaWxkX2xpc3QgPSBbXQorCisgICAgICAgIHNlbGYuYWN0aXZlID0gTm9uZQorICAgICAgICBzZWxmLmxhc3RfdXNlcl9jcHVfdGltZSA9IE5vbmUKKyAgICAgICAgc2VsZi5sYXN0X3N5c19jcHVfdGltZSA9IE5vbmUKKworICAgICAgICBzZWxmLmxhc3RfY3B1X25zID0gMAorICAgICAgICBzZWxmLmxhc3RfYmxraW9fZGVsYXlfbnMgPSAwCisgICAgICAgIHNlbGYubGFzdF9zd2FwaW5fZGVsYXlfbnMgPSAwCisKKyAgICAjIHNwbGl0IHRoaXMgcHJvY2VzcycgcnVuIC0gdHJpZ2dlcmVkIGJ5IGEgbmFtZSBjaGFuZ2UKKyAgICBkZWYgc3BsaXQoc2VsZiwgd3JpdGVyLCBwaWQsIGNtZCwgcHBpZCwgc3RhcnRfdGltZSk6CisgICAgICAgIHNwbGl0ID0gUHJvY2VzcyAod3JpdGVyLCBwaWQsIGNtZCwgcHBpZCwgc3RhcnRfdGltZSkKKworICAgICAgICBzcGxpdC5sYXN0X2NwdV9ucyA9IHNlbGYubGFzdF9jcHVfbnMKKyAgICAgICAgc3BsaXQubGFzdF9ibGtpb19kZWxheV9ucyA9IHNlbGYubGFzdF9ibGtpb19kZWxheV9ucworICAgICAgICBzcGxpdC5sYXN0X3N3YXBpbl9kZWxheV9ucyA9IHNlbGYubGFzdF9zd2FwaW5fZGVsYXlfbnMKKworICAgICAgICByZXR1cm4gc3BsaXQKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiAiLmpvaW4oW3N0cihzZWxmLnBpZCksIHNlbGYuY21kLCBzdHIoc2VsZi5wcGlkKSwgJ1sgJyArIHN0cihsZW4oc2VsZi5zYW1wbGVzKSkgKyAnIHNhbXBsZXMgXScgXSkKKworICAgIGRlZiBjYWxjX3N0YXRzKHNlbGYsIHNhbXBsZVBlcmlvZCk6CisgICAgICAgIGlmIHNlbGYuc2FtcGxlczoKKyAgICAgICAgICAgIGZpcnN0U2FtcGxlID0gc2VsZi5zYW1wbGVzWzBdCisgICAgICAgICAgICBsYXN0U2FtcGxlID0gc2VsZi5zYW1wbGVzWy0xXQorICAgICAgICAgICAgc2VsZi5zdGFydF90aW1lID0gbWluKGZpcnN0U2FtcGxlLnRpbWUsIHNlbGYuc3RhcnRfdGltZSkKKyAgICAgICAgICAgIHNlbGYuZHVyYXRpb24gPSBsYXN0U2FtcGxlLnRpbWUgLSBzZWxmLnN0YXJ0X3RpbWUgKyBzYW1wbGVQZXJpb2QKKworICAgICAgICBhY3RpdmVDb3VudCA9IHN1bSggWzEgZm9yIHNhbXBsZSBpbiBzZWxmLnNhbXBsZXMgaWYgc2FtcGxlLmNwdV9zYW1wbGUgYW5kIHNhbXBsZS5jcHVfc2FtcGxlLnN5cyArIHNhbXBsZS5jcHVfc2FtcGxlLnVzZXIgKyBzYW1wbGUuY3B1X3NhbXBsZS5pbyA+IDAuMF0gKQorICAgICAgICBhY3RpdmVDb3VudCA9IGFjdGl2ZUNvdW50ICsgc3VtKCBbMSBmb3Igc2FtcGxlIGluIHNlbGYuc2FtcGxlcyBpZiBzYW1wbGUuc3RhdGUgPT0gJ0QnXSApCisgICAgICAgIHNlbGYuYWN0aXZlID0gKGFjdGl2ZUNvdW50PjIpCisKKyAgICBkZWYgY2FsY19sb2FkKHNlbGYsIHVzZXJDcHUsIHN5c0NwdSwgaW50ZXJ2YWwpOgorICAgICAgICB1c2VyQ3B1TG9hZCA9IGZsb2F0KHVzZXJDcHUgLSBzZWxmLmxhc3RfdXNlcl9jcHVfdGltZSkgLyBpbnRlcnZhbAorICAgICAgICBzeXNDcHVMb2FkID0gZmxvYXQoc3lzQ3B1IC0gc2VsZi5sYXN0X3N5c19jcHVfdGltZSkgLyBpbnRlcnZhbAorICAgICAgICBjcHVMb2FkID0gdXNlckNwdUxvYWQgKyBzeXNDcHVMb2FkCisgICAgICAgICMgbm9ybWFsaXplCisgICAgICAgIGlmIGNwdUxvYWQgPiAxLjA6CisgICAgICAgICAgICB1c2VyQ3B1TG9hZCA9IHVzZXJDcHVMb2FkIC8gY3B1TG9hZAorICAgICAgICAgICAgc3lzQ3B1TG9hZCA9IHN5c0NwdUxvYWQgLyBjcHVMb2FkCisgICAgICAgIHJldHVybiAodXNlckNwdUxvYWQsIHN5c0NwdUxvYWQpCisKKyAgICBkZWYgc2V0X3BhcmVudChzZWxmLCBwcm9jZXNzTWFwKToKKyAgICAgICAgaWYgc2VsZi5wcGlkICE9IE5vbmU6CisgICAgICAgICAgICBzZWxmLnBhcmVudCA9IHByb2Nlc3NNYXAuZ2V0IChzZWxmLnBwaWQpCisgICAgICAgICAgICBpZiBzZWxmLnBhcmVudCA9PSBOb25lIGFuZCBzZWxmLnBpZCAvLyAxMDAwID4gMSBhbmQgXAorICAgICAgICAgICAgICAgIG5vdCAoc2VsZi5wcGlkID09IDIwMDAgb3Igc2VsZi5waWQgPT0gMjAwMCk6ICMga2VybmVsIHRocmVhZHM6IHBwaWQ9MgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVyLndhcm4oIk1pc3NpbmcgQ09ORklHX1BST0NfRVZFTlRTOiBubyBwYXJlbnQgZm9yIHBpZCAnJWknICgnJXMnKSB3aXRoIHBwaWQgJyVpJyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5waWQsc2VsZi5jbWQsc2VsZi5wcGlkKSkKKworICAgIGRlZiBnZXRfZW5kX3RpbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnN0YXJ0X3RpbWUgKyBzZWxmLmR1cmF0aW9uCisKK2NsYXNzIERpc2tTYW1wbGU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRpbWUsIHJlYWQsIHdyaXRlLCB1dGlsKToKKyAgICAgICAgc2VsZi50aW1lID0gdGltZQorICAgICAgICBzZWxmLnJlYWQgPSByZWFkCisgICAgICAgIHNlbGYud3JpdGUgPSB3cml0ZQorICAgICAgICBzZWxmLnV0aWwgPSB1dGlsCisgICAgICAgIHNlbGYudHB1dCA9IHJlYWQgKyB3cml0ZQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiXHQiLmpvaW4oW3N0cihzZWxmLnRpbWUpLCBzdHIoc2VsZi5yZWFkKSwgc3RyKHNlbGYud3JpdGUpLCBzdHIoc2VsZi51dGlsKV0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvdGVzdHMvcGFyc2VyX3Rlc3QucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvdGVzdHMvcGFyc2VyX3Rlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBmYjNiZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS90ZXN0cy9wYXJzZXJfdGVzdC5weQpAQCAtMCwwICsxLDEwNSBAQAoraW1wb3J0IHN5cywgb3MsIHJlLCBzdHJ1Y3QsIG9wZXJhdG9yLCBtYXRoCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAoraW1wb3J0IHVuaXR0ZXN0CisKK3N5cy5wYXRoLmluc2VydCgwLCBvcy5nZXRjd2QoKSkKKworaW1wb3J0IHB5Ym9vdGNoYXJ0Z3VpLnBhcnNpbmcgYXMgcGFyc2luZworaW1wb3J0IHB5Ym9vdGNoYXJ0Z3VpLm1haW4gYXMgbWFpbgorCitkZWJ1ZyA9IEZhbHNlCisKK2RlZiBmbG9hdEVxKGYxLCBmMik6CisJcmV0dXJuIG1hdGguZmFicyhmMS1mMikgPCAwLjAwMDAxCisKK2Jvb3RjaGFydF9kaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKSwgJy4uLy4uL2V4YW1wbGVzLzEvJykKK3BhcnNlciA9IG1haW4uX21rX29wdGlvbnNfcGFyc2VyKCkKK29wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhbJy0tcScsIGJvb3RjaGFydF9kaXJdKQord3JpdGVyID0gbWFpbi5fbWtfd3JpdGVyKG9wdGlvbnMpCisKK2NsYXNzIFRlc3RCQ1BhcnNlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgCisJZGVmIHNldFVwKHNlbGYpOgorCQlzZWxmLm5hbWUgPSAiTXkgZmlyc3QgdW5pdHRlc3QiCisJCXNlbGYucm9vdGRpciA9IGJvb3RjaGFydF9kaXIKKworCWRlZiBta19mbmFtZShzZWxmLGYpOgorCQlyZXR1cm4gb3MucGF0aC5qb2luKHNlbGYucm9vdGRpciwgZikKKworCWRlZiB0ZXN0UGFyc2VIZWFkZXIoc2VsZik6CisJCXRyYWNlID0gcGFyc2luZy5UcmFjZSh3cml0ZXIsIGFyZ3MsIG9wdGlvbnMpCisJCXN0YXRlID0gcGFyc2luZy5wYXJzZV9maWxlKHdyaXRlciwgdHJhY2UsIHNlbGYubWtfZm5hbWUoJ2hlYWRlcicpKQorCQlzZWxmLmFzc2VydEVxdWFsKDYsIGxlbihzdGF0ZS5oZWFkZXJzKSkKKwkJc2VsZi5hc3NlcnRFcXVhbCgyLCBwYXJzaW5nLmdldF9udW1fY3B1cyhzdGF0ZS5oZWFkZXJzKSkKKworCWRlZiB0ZXN0X3BhcnNlVGltZWRCbG9ja3Moc2VsZik6CisJCXRyYWNlID0gcGFyc2luZy5UcmFjZSh3cml0ZXIsIGFyZ3MsIG9wdGlvbnMpCisJCXN0YXRlID0gcGFyc2luZy5wYXJzZV9maWxlKHdyaXRlciwgdHJhY2UsIHNlbGYubWtfZm5hbWUoJ3Byb2NfZGlza3N0YXRzLmxvZycpKQorCQlzZWxmLmFzc2VydEVxdWFsKDE0MSwgbGVuKHN0YXRlLmRpc2tfc3RhdHMpKQkJCisKKwlkZWYgdGVzdFBhcnNlUHJvY1BzTG9nKHNlbGYpOgorCQl0cmFjZSA9IHBhcnNpbmcuVHJhY2Uod3JpdGVyLCBhcmdzLCBvcHRpb25zKQorCQlzdGF0ZSA9IHBhcnNpbmcucGFyc2VfZmlsZSh3cml0ZXIsIHRyYWNlLCBzZWxmLm1rX2ZuYW1lKCdwcm9jX3BzLmxvZycpKQorCQlzYW1wbGVzID0gc3RhdGUucHNfc3RhdHMKKwkJcHJvY2Vzc2VzID0gc2FtcGxlcy5wcm9jZXNzX21hcAorCQlzb3J0ZWRfcHJvY2Vzc2VzID0gW3Byb2Nlc3Nlc1trXSBmb3IgayBpbiBzb3J0ZWQocHJvY2Vzc2VzLmtleXMoKSldCisKKwkJcHNfZGF0YSA9IG9wZW4oc2VsZi5ta19mbmFtZSgnZXh0cmFjdDIucHJvY19wcy5sb2cnKSkKKwkJZm9yIGluZGV4LCBsaW5lIGluIGVudW1lcmF0ZShwc19kYXRhKToKKwkJCXRva2VucyA9IGxpbmUuc3BsaXQoKTsKKwkJCXByb2Nlc3MgPSBzb3J0ZWRfcHJvY2Vzc2VzW2luZGV4XQorCQkJaWYgZGVidWc6CisJCQkJcHJpbnQodG9rZW5zWzA6NF0pCisJCQkJcHJpbnQocHJvY2Vzcy5waWQgLyAxMDAwLCBwcm9jZXNzLmNtZCwgcHJvY2Vzcy5wcGlkLCBsZW4ocHJvY2Vzcy5zYW1wbGVzKSkKKwkJCQlwcmludCgnLS0tLS0tLS0tLS0tLS0tLS0tLScpCisKKwkJCXNlbGYuYXNzZXJ0RXF1YWwodG9rZW5zWzBdLCBzdHIocHJvY2Vzcy5waWQgLy8gMTAwMCkpCisJCQlzZWxmLmFzc2VydEVxdWFsKHRva2Vuc1sxXSwgc3RyKHByb2Nlc3MuY21kKSkKKwkJCXNlbGYuYXNzZXJ0RXF1YWwodG9rZW5zWzJdLCBzdHIocHJvY2Vzcy5wcGlkIC8vIDEwMDApKQorCQkJc2VsZi5hc3NlcnRFcXVhbCh0b2tlbnNbM10sIHN0cihsZW4ocHJvY2Vzcy5zYW1wbGVzKSkpCisJCXBzX2RhdGEuY2xvc2UoKQorCisJZGVmIHRlc3RwYXJzZVByb2NEaXNrU3RhdExvZyhzZWxmKToKKwkJdHJhY2UgPSBwYXJzaW5nLlRyYWNlKHdyaXRlciwgYXJncywgb3B0aW9ucykKKwkJc3RhdGVfd2l0aF9oZWFkZXJzID0gcGFyc2luZy5wYXJzZV9maWxlKHdyaXRlciwgdHJhY2UsIHNlbGYubWtfZm5hbWUoJ2hlYWRlcicpKQorCQlzdGF0ZV93aXRoX2hlYWRlcnMuaGVhZGVyc1snc3lzdGVtLmNwdSddID0gJ3h4eCAoMiknCisJCXNhbXBsZXMgPSBwYXJzaW5nLnBhcnNlX2ZpbGUod3JpdGVyLCBzdGF0ZV93aXRoX2hlYWRlcnMsIHNlbGYubWtfZm5hbWUoJ3Byb2NfZGlza3N0YXRzLmxvZycpKS5kaXNrX3N0YXRzCisJCXNlbGYuYXNzZXJ0RXF1YWwoMTQxLCBsZW4oc2FtcGxlcykpCisKKwkJZGlza3N0YXRzX2RhdGEgPSBvcGVuKHNlbGYubWtfZm5hbWUoJ2V4dHJhY3QucHJvY19kaXNrc3RhdHMubG9nJykpCisJCWZvciBpbmRleCwgbGluZSBpbiBlbnVtZXJhdGUoZGlza3N0YXRzX2RhdGEpOgorCQkJdG9rZW5zID0gbGluZS5zcGxpdCgnXHQnKQorCQkJc2FtcGxlID0gc2FtcGxlc1tpbmRleF0KKwkJCWlmIGRlYnVnOgkJCisJCQkJcHJpbnQobGluZS5yc3RyaXAoKSkKKwkJCQlwcmludChzYW1wbGUpCisJCQkJcHJpbnQoJy0tLS0tLS0tLS0tLS0tLS0tLS0nKQorCQkJCisJCQlzZWxmLmFzc2VydEVxdWFsKHRva2Vuc1swXSwgc3RyKHNhbXBsZS50aW1lKSkKKwkJCXNlbGYuYXNzZXJ0XyhmbG9hdEVxKGZsb2F0KHRva2Vuc1sxXSksIHNhbXBsZS5yZWFkKSkKKwkJCXNlbGYuYXNzZXJ0XyhmbG9hdEVxKGZsb2F0KHRva2Vuc1syXSksIHNhbXBsZS53cml0ZSkpCisJCQlzZWxmLmFzc2VydF8oZmxvYXRFcShmbG9hdCh0b2tlbnNbM10pLCBzYW1wbGUudXRpbCkpCisJCWRpc2tzdGF0c19kYXRhLmNsb3NlKCkKKwkKKwlkZWYgdGVzdHBhcnNlUHJvY1N0YXRMb2coc2VsZik6CisJCXRyYWNlID0gcGFyc2luZy5UcmFjZSh3cml0ZXIsIGFyZ3MsIG9wdGlvbnMpCisJCXNhbXBsZXMgPSBwYXJzaW5nLnBhcnNlX2ZpbGUod3JpdGVyLCB0cmFjZSwgc2VsZi5ta19mbmFtZSgncHJvY19zdGF0LmxvZycpKS5jcHVfc3RhdHMKKwkJc2VsZi5hc3NlcnRFcXVhbCgxNDEsIGxlbihzYW1wbGVzKSkKKworCQlzdGF0X2RhdGEgPSBvcGVuKHNlbGYubWtfZm5hbWUoJ2V4dHJhY3QucHJvY19zdGF0LmxvZycpKQorCQlmb3IgaW5kZXgsIGxpbmUgaW4gZW51bWVyYXRlKHN0YXRfZGF0YSk6CisJCQl0b2tlbnMgPSBsaW5lLnNwbGl0KCdcdCcpCisJCQlzYW1wbGUgPSBzYW1wbGVzW2luZGV4XQorCQkJaWYgZGVidWc6CisJCQkJcHJpbnQobGluZS5yc3RyaXAoKSkKKwkJCQlwcmludChzYW1wbGUpCisJCQkJcHJpbnQoJy0tLS0tLS0tLS0tLS0tLS0tLS0nKQorCQkJc2VsZi5hc3NlcnRfKGZsb2F0RXEoZmxvYXQodG9rZW5zWzBdKSwgc2FtcGxlLnRpbWUpKQorCQkJc2VsZi5hc3NlcnRfKGZsb2F0RXEoZmxvYXQodG9rZW5zWzFdKSwgc2FtcGxlLnVzZXIpKQorCQkJc2VsZi5hc3NlcnRfKGZsb2F0RXEoZmxvYXQodG9rZW5zWzJdKSwgc2FtcGxlLnN5cykpCisJCQlzZWxmLmFzc2VydF8oZmxvYXRFcShmbG9hdCh0b2tlbnNbM10pLCBzYW1wbGUuaW8pKQorCQlzdGF0X2RhdGEuY2xvc2UoKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvdGVzdHMvcHJvY2Vzc190cmVlX3Rlc3QucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvdGVzdHMvcHJvY2Vzc190cmVlX3Rlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY0NmExYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS90ZXN0cy9wcm9jZXNzX3RyZWVfdGVzdC5weQpAQCAtMCwwICsxLDkyIEBACitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorCitzeXMucGF0aC5pbnNlcnQoMCwgb3MuZ2V0Y3dkKCkpCisKK2ltcG9ydCBweWJvb3RjaGFydGd1aS5wYXJzaW5nIGFzIHBhcnNpbmcKK2ltcG9ydCBweWJvb3RjaGFydGd1aS5wcm9jZXNzX3RyZWUgYXMgcHJvY2Vzc190cmVlCitpbXBvcnQgcHlib290Y2hhcnRndWkubWFpbiBhcyBtYWluCisKK2lmIHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsIDApOgorICAgIGxvbmcgPSBpbnQKKworY2xhc3MgVGVzdFByb2Nlc3NUcmVlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5uYW1lID0gIlByb2Nlc3MgdHJlZSB1bml0dGVzdCIKKyAgICAgICAgc2VsZi5yb290ZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSksICcuLi8uLi9leGFtcGxlcy8xLycpCisKKyAgICAgICAgcGFyc2VyID0gbWFpbi5fbWtfb3B0aW9uc19wYXJzZXIoKQorICAgICAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLXEnLCBzZWxmLnJvb3RkaXJdKQorICAgICAgICB3cml0ZXIgPSBtYWluLl9ta193cml0ZXIob3B0aW9ucykKKyAgICAgICAgdHJhY2UgPSBwYXJzaW5nLlRyYWNlKHdyaXRlciwgYXJncywgb3B0aW9ucykKKworICAgICAgICBwYXJzaW5nLnBhcnNlX2ZpbGUod3JpdGVyLCB0cmFjZSwgc2VsZi5ta19mbmFtZSgncHJvY19wcy5sb2cnKSkKKyAgICAgICAgdHJhY2UuY29tcGlsZSh3cml0ZXIpCisgICAgICAgIHNlbGYucHJvY2Vzc3RyZWUgPSBwcm9jZXNzX3RyZWUuUHJvY2Vzc1RyZWUod3JpdGVyLCBOb25lLCB0cmFjZS5wc19zdGF0cywgXAorICAgICAgICAgICAgdHJhY2UucHNfc3RhdHMuc2FtcGxlX3BlcmlvZCwgTm9uZSwgb3B0aW9ucy5wcnVuZSwgTm9uZSwgTm9uZSwgRmFsc2UsIGZvcl90ZXN0aW5nID0gVHJ1ZSkKKworICAgIGRlZiBta19mbmFtZShzZWxmLGYpOgorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYucm9vdGRpciwgZikKKworICAgIGRlZiBmbGF0dGVuKHNlbGYsIHByb2Nlc3NfdHJlZSk6CisgICAgICAgIGZsYXR0ZW5lZCA9IFtdCisgICAgICAgIGZvciBwIGluIHByb2Nlc3NfdHJlZToKKyAgICAgICAgICAgIGZsYXR0ZW5lZC5hcHBlbmQocCkKKyAgICAgICAgICAgIGZsYXR0ZW5lZC5leHRlbmQoc2VsZi5mbGF0dGVuKHAuY2hpbGRfbGlzdCkpCisgICAgICAgIHJldHVybiBmbGF0dGVuZWQKKworICAgIGRlZiBjaGVja0FnYWluc3RKYXZhRXh0cmFjdChzZWxmLCBmaWxlbmFtZSwgcHJvY2Vzc190cmVlKToKKyAgICAgICAgdGVzdF9kYXRhID0gb3BlbihmaWxlbmFtZSkKKyAgICAgICAgZm9yIGV4cGVjdGVkLCBhY3R1YWwgaW4gemlwKHRlc3RfZGF0YSwgc2VsZi5mbGF0dGVuKHByb2Nlc3NfdHJlZSkpOgorICAgICAgICAgICAgdG9rZW5zID0gZXhwZWN0ZWQuc3BsaXQoJ1x0JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KHRva2Vuc1swXSksIGFjdHVhbC5waWQgLy8gMTAwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodG9rZW5zWzFdLCBhY3R1YWwuY21kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKHRva2Vuc1syXSksIDEwICogYWN0dWFsLnN0YXJ0X3RpbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydF8obG9uZyh0b2tlbnNbM10pIC0gMTAgKiBhY3R1YWwuZHVyYXRpb24gPCA1LCAiZHVyYXRpb24iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQodG9rZW5zWzRdKSwgbGVuKGFjdHVhbC5jaGlsZF9saXN0KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KHRva2Vuc1s1XSksIGxlbihhY3R1YWwuc2FtcGxlcykpCisgICAgICAgIHRlc3RfZGF0YS5jbG9zZSgpCisKKyAgICBkZWYgdGVzdEJ1aWxkKHNlbGYpOgorICAgICAgICBwcm9jZXNzX3RyZWUgPSBzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZQorICAgICAgICBzZWxmLmNoZWNrQWdhaW5zdEphdmFFeHRyYWN0KHNlbGYubWtfZm5hbWUoJ2V4dHJhY3QucHJvY2Vzc3RyZWUuMS5sb2cnKSwgcHJvY2Vzc190cmVlKQorCisgICAgZGVmIHRlc3RNZXJnZUxvZ2dlcihzZWxmKToKKyAgICAgICAgc2VsZi5wcm9jZXNzdHJlZS5tZXJnZV9sb2dnZXIoc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUsICdib290Y2hhcnRkJywgTm9uZSwgRmFsc2UpCisgICAgICAgIHByb2Nlc3NfdHJlZSA9IHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlCisgICAgICAgIHNlbGYuY2hlY2tBZ2FpbnN0SmF2YUV4dHJhY3Qoc2VsZi5ta19mbmFtZSgnZXh0cmFjdC5wcm9jZXNzdHJlZS4yLmxvZycpLCBwcm9jZXNzX3RyZWUpCisKKyAgICBkZWYgdGVzdFBydW5lKHNlbGYpOgorICAgICAgICBzZWxmLnByb2Nlc3N0cmVlLm1lcmdlX2xvZ2dlcihzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZSwgJ2Jvb3RjaGFydGQnLCBOb25lLCBGYWxzZSkKKyAgICAgICAgc2VsZi5wcm9jZXNzdHJlZS5wcnVuZShzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZSwgTm9uZSkKKyAgICAgICAgcHJvY2Vzc190cmVlID0gc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUKKyAgICAgICAgc2VsZi5jaGVja0FnYWluc3RKYXZhRXh0cmFjdChzZWxmLm1rX2ZuYW1lKCdleHRyYWN0LnByb2Nlc3N0cmVlLjNiLmxvZycpLCBwcm9jZXNzX3RyZWUpCisKKyAgICBkZWYgdGVzdE1lcmdlRXhwbG9kZXJzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2Nlc3N0cmVlLm1lcmdlX2xvZ2dlcihzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZSwgJ2Jvb3RjaGFydGQnLCBOb25lLCBGYWxzZSkKKyAgICAgICAgc2VsZi5wcm9jZXNzdHJlZS5wcnVuZShzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZSwgTm9uZSkKKyAgICAgICAgc2VsZi5wcm9jZXNzdHJlZS5tZXJnZV9leHBsb2RlcnMoc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUsIHNldChbJ2h3dXAnXSkpCisgICAgICAgIHByb2Nlc3NfdHJlZSA9IHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlCisgICAgICAgIHNlbGYuY2hlY2tBZ2FpbnN0SmF2YUV4dHJhY3Qoc2VsZi5ta19mbmFtZSgnZXh0cmFjdC5wcm9jZXNzdHJlZS4zYy5sb2cnKSwgcHJvY2Vzc190cmVlKQorCisgICAgZGVmIHRlc3RNZXJnZVNpYmxpbmdzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2Nlc3N0cmVlLm1lcmdlX2xvZ2dlcihzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZSwgJ2Jvb3RjaGFydGQnLCBOb25lLCBGYWxzZSkKKyAgICAgICAgc2VsZi5wcm9jZXNzdHJlZS5wcnVuZShzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZSwgTm9uZSkKKyAgICAgICAgc2VsZi5wcm9jZXNzdHJlZS5tZXJnZV9leHBsb2RlcnMoc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUsIHNldChbJ2h3dXAnXSkpCisgICAgICAgIHNlbGYucHJvY2Vzc3RyZWUubWVyZ2Vfc2libGluZ3Moc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUpCisgICAgICAgIHByb2Nlc3NfdHJlZSA9IHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlCisgICAgICAgIHNlbGYuY2hlY2tBZ2FpbnN0SmF2YUV4dHJhY3Qoc2VsZi5ta19mbmFtZSgnZXh0cmFjdC5wcm9jZXNzdHJlZS4zZC5sb2cnKSwgcHJvY2Vzc190cmVlKQorCisgICAgZGVmIHRlc3RNZXJnZVJ1bnMoc2VsZik6CisgICAgICAgIHNlbGYucHJvY2Vzc3RyZWUubWVyZ2VfbG9nZ2VyKHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlLCAnYm9vdGNoYXJ0ZCcsIE5vbmUsIEZhbHNlKQorICAgICAgICBzZWxmLnByb2Nlc3N0cmVlLnBydW5lKHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlLCBOb25lKQorICAgICAgICBzZWxmLnByb2Nlc3N0cmVlLm1lcmdlX2V4cGxvZGVycyhzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZSwgc2V0KFsnaHd1cCddKSkKKyAgICAgICAgc2VsZi5wcm9jZXNzdHJlZS5tZXJnZV9zaWJsaW5ncyhzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZSkKKyAgICAgICAgc2VsZi5wcm9jZXNzdHJlZS5tZXJnZV9ydW5zKHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlKQorICAgICAgICBwcm9jZXNzX3RyZWUgPSBzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZQorICAgICAgICBzZWxmLmNoZWNrQWdhaW5zdEphdmFFeHRyYWN0KHNlbGYubWtfZm5hbWUoJ2V4dHJhY3QucHJvY2Vzc3RyZWUuM2UubG9nJyksIHByb2Nlc3NfdHJlZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9weXRob25kZXBzIGIveW9jdG8tcG9reS9zY3JpcHRzL3B5dGhvbmRlcHMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmY5MmU3NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9weXRob25kZXBzCkBAIC0wLDAgKzEsMjUwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgRGV0ZXJtaW5lIGRlcGVuZGVuY2llcyBvZiBweXRob24gc2NyaXB0cyBvciBhdmFpbGFibGUgcHl0aG9uIG1vZHVsZXMgaW4gYSBzZWFyY2ggcGF0aC4KKyMKKyMgR2l2ZW4gdGhlIC1kIGFyZ3VtZW50IGFuZCBhIGZpbGVuYW1lL2ZpbGVuYW1lcywgcmV0dXJucyB0aGUgbW9kdWxlcyBpbXBvcnRlZCBieSB0aG9zZSBmaWxlcy4KKyMgR2l2ZW4gdGhlIC1kIGFyZ3VtZW50IGFuZCBhIGRpcmVjdG9yeS9kaXJlY3RvcmllcywgcmVjdXJzZXMgdG8gZmluZCBhbGwKKyMgcHl0aG9uIHBhY2thZ2VzIGFuZCBtb2R1bGVzLCByZXR1cm5zIHRoZSBtb2R1bGVzIGltcG9ydGVkIGJ5IHRoZXNlLgorIyBHaXZlbiB0aGUgLXAgYXJndW1lbnQgYW5kIGEgcGF0aCBvciBwYXRocywgc2NhbnMgdGhhdCBwYXRoIGZvciBhdmFpbGFibGUgcHl0aG9uIG1vZHVsZXMvcGFja2FnZXMuCisKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGFzdAoraW1wb3J0IGltcAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgc3lzCisKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3B5dGhvbmRlcHMnKQorCitzdWZmaXhlcyA9IFtdCitmb3IgdHJpcGxlIGluIGltcC5nZXRfc3VmZml4ZXMoKToKKyAgICBzdWZmaXhlcy5hcHBlbmQodHJpcGxlWzBdKQorCisKK2NsYXNzIFB5dGhvbkRlcEVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKK2NsYXNzIERlcGVuZEVycm9yKFB5dGhvbkRlcEVycm9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCwgZXJyb3IpOgorICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisgICAgICAgIHNlbGYuZXJyb3IgPSBlcnJvcgorICAgICAgICBQeXRob25EZXBFcnJvci5fX2luaXRfXyhzZWxmLCBlcnJvcikKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIkZhaWx1cmUgZGV0ZXJtaW5pbmcgZGVwZW5kZW5jaWVzIG9mIHt9OiB7fSIuZm9ybWF0KHNlbGYucGF0aCwgc2VsZi5lcnJvcikKKworCitjbGFzcyBJbXBvcnRWaXNpdG9yKGFzdC5Ob2RlVmlzaXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmltcG9ydHMgPSBzZXQoKQorICAgICAgICBzZWxmLmltcG9ydHNmcm9tID0gW10KKworICAgIGRlZiB2aXNpdF9JbXBvcnQoc2VsZiwgbm9kZSk6CisgICAgICAgIGZvciBhbGlhcyBpbiBub2RlLm5hbWVzOgorICAgICAgICAgICAgc2VsZi5pbXBvcnRzLmFkZChhbGlhcy5uYW1lKQorCisgICAgZGVmIHZpc2l0X0ltcG9ydEZyb20oc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYuaW1wb3J0c2Zyb20uYXBwZW5kKChub2RlLm1vZHVsZSwgW2EubmFtZSBmb3IgYSBpbiBub2RlLm5hbWVzXSwgbm9kZS5sZXZlbCkpCisKKworZGVmIHdhbGtfdXAocGF0aCk6CisgICAgd2hpbGUgcGF0aDoKKyAgICAgICAgeWllbGQgcGF0aAorICAgICAgICBwYXRoLCBfLCBfID0gcGF0aC5ycGFydGl0aW9uKG9zLnNlcCkKKworCitkZWYgZ2V0X3Byb3ZpZGVzKHBhdGgpOgorICAgIHBhdGggPSBvcy5wYXRoLnJlYWxwYXRoKHBhdGgpCisKKyAgICBkZWYgZ2V0X2ZuX25hbWUoZm4pOgorICAgICAgICBmb3Igc3VmZml4IGluIHN1ZmZpeGVzOgorICAgICAgICAgICAgaWYgZm4uZW5kc3dpdGgoc3VmZml4KToKKyAgICAgICAgICAgICAgICByZXR1cm4gZm5bOi1sZW4oc3VmZml4KV0KKworICAgIGlzZGlyID0gb3MucGF0aC5pc2RpcihwYXRoKQorICAgIGlmIGlzZGlyOgorICAgICAgICBwa2dfcGF0aCA9IHBhdGgKKyAgICAgICAgd2Fsa19wYXRoID0gcGF0aAorICAgIGVsc2U6CisgICAgICAgIHBrZ19wYXRoID0gZ2V0X2ZuX25hbWUocGF0aCkKKyAgICAgICAgaWYgcGtnX3BhdGggaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB3YWxrX3BhdGggPSBvcy5wYXRoLmRpcm5hbWUocGF0aCkKKworICAgIGZvciBjdXJwYXRoIGluIHdhbGtfdXAod2Fsa19wYXRoKToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihjdXJwYXRoLCAnX19pbml0X18ucHknKSk6CisgICAgICAgICAgICBsaWJkaXIgPSBjdXJwYXRoCisgICAgICAgICAgICBicmVhaworICAgIGVsc2U6CisgICAgICAgIGxpYmRpciA9ICcnCisKKyAgICBwYWNrYWdlX3JlbHBhdGggPSBwa2dfcGF0aFtsZW4obGliZGlyKSsxOl0KKyAgICBwYWNrYWdlID0gJy4nLmpvaW4ocGFja2FnZV9yZWxwYXRoLnNwbGl0KG9zLnNlcCkpCisgICAgaWYgbm90IGlzZGlyOgorICAgICAgICB5aWVsZCBwYWNrYWdlLCBwYXRoCisgICAgZWxzZToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHBhdGgsICdfX2luaXRfXy5weScpKToKKyAgICAgICAgICAgIHlpZWxkIHBhY2thZ2UsIHBhdGgKKworICAgICAgICBmb3IgZGlycGF0aCwgZGlybmFtZXMsIGZpbGVuYW1lcyBpbiBvcy53YWxrKHBhdGgpOgorICAgICAgICAgICAgcmVscGF0aCA9IGRpcnBhdGhbbGVuKHBhdGgpKzE6XQorICAgICAgICAgICAgaWYgcmVscGF0aDoKKyAgICAgICAgICAgICAgICBpZiAnX19pbml0X18ucHknIG5vdCBpbiBmaWxlbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIGRpcm5hbWVzWzpdID0gW10KKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0gJy4nLmpvaW4ocmVscGF0aC5zcGxpdChvcy5zZXApKQorICAgICAgICAgICAgICAgICAgICBpZiBwYWNrYWdlOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9IHBhY2thZ2UgKyAnLicgKyBjb250ZXh0CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGNvbnRleHQsIGRpcnBhdGgKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY29udGV4dCA9IHBhY2thZ2UKKworICAgICAgICAgICAgZm9yIGZuIGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgICAgICBhZGp1c3RlZF9mbiA9IGdldF9mbl9uYW1lKGZuKQorICAgICAgICAgICAgICAgIGlmIG5vdCBhZGp1c3RlZF9mbiBvciBhZGp1c3RlZF9mbiA9PSAnX19pbml0X18nOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgZnVsbGZuID0gb3MucGF0aC5qb2luKGRpcnBhdGgsIGZuKQorICAgICAgICAgICAgICAgIGlmIGNvbnRleHQ6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGNvbnRleHQgKyAnLicgKyBhZGp1c3RlZF9mbiwgZnVsbGZuCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgYWRqdXN0ZWRfZm4sIGZ1bGxmbgorCisKK2RlZiBnZXRfY29kZV9kZXBlbmRzKGNvZGVfc3RyaW5nLCBwYXRoPU5vbmUsIHByb3ZpZGU9Tm9uZSwgaXNwa2c9RmFsc2UpOgorICAgIHRyeToKKyAgICAgICAgY29kZSA9IGFzdC5wYXJzZShjb2RlX3N0cmluZywgcGF0aCkKKyAgICBleGNlcHQgVHlwZUVycm9yIGFzIGV4YzoKKyAgICAgICAgcmFpc2UgRGVwZW5kRXJyb3IocGF0aCwgZXhjKQorICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBleGM6CisgICAgICAgIHJhaXNlIERlcGVuZEVycm9yKHBhdGgsIGV4YykKKworICAgIHZpc2l0b3IgPSBJbXBvcnRWaXNpdG9yKCkKKyAgICB2aXNpdG9yLnZpc2l0KGNvZGUpCisgICAgZm9yIGJ1aWx0aW5fbW9kdWxlIGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lczoKKyAgICAgICAgaWYgYnVpbHRpbl9tb2R1bGUgaW4gdmlzaXRvci5pbXBvcnRzOgorICAgICAgICAgICAgdmlzaXRvci5pbXBvcnRzLnJlbW92ZShidWlsdGluX21vZHVsZSkKKworICAgIGlmIHByb3ZpZGU6CisgICAgICAgIHByb3ZpZGVfZWxlbWVudHMgPSBwcm92aWRlLnNwbGl0KCcuJykKKyAgICAgICAgaWYgaXNwa2c6CisgICAgICAgICAgICBwcm92aWRlX2VsZW1lbnRzLmFwcGVuZCgiX19zZWxmX18iKQorICAgICAgICBjb250ZXh0ID0gJy4nLmpvaW4ocHJvdmlkZV9lbGVtZW50c1s6LTFdKQorICAgICAgICBwYWNrYWdlX3BhdGggPSBvcy5wYXRoLmRpcm5hbWUocGF0aCkKKyAgICBlbHNlOgorICAgICAgICBjb250ZXh0ID0gTm9uZQorICAgICAgICBwYWNrYWdlX3BhdGggPSBOb25lCisKKyAgICBsZXZlbHplcm9faW1wb3J0c2Zyb20gPSAobW9kdWxlIGZvciBtb2R1bGUsIG5hbWVzLCBsZXZlbCBpbiB2aXNpdG9yLmltcG9ydHNmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxldmVsID09IDApCisgICAgZm9yIG1vZHVsZSBpbiB2aXNpdG9yLmltcG9ydHMgfCBzZXQobGV2ZWx6ZXJvX2ltcG9ydHNmcm9tKToKKyAgICAgICAgaWYgY29udGV4dCBhbmQgcGF0aDoKKyAgICAgICAgICAgIG1vZHVsZV9iYXNlcGF0aCA9IG9zLnBhdGguam9pbihwYWNrYWdlX3BhdGgsIG1vZHVsZS5yZXBsYWNlKCcuJywgJy8nKSkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG1vZHVsZV9iYXNlcGF0aCk6CisgICAgICAgICAgICAgICAgIyBJbXBsaWNpdCByZWxhdGl2ZSBpbXBvcnQKKyAgICAgICAgICAgICAgICB5aWVsZCBjb250ZXh0ICsgJy4nICsgbW9kdWxlLCBwYXRoCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZm9yIHN1ZmZpeCBpbiBzdWZmaXhlczoKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhtb2R1bGVfYmFzZXBhdGggKyBzdWZmaXgpOgorICAgICAgICAgICAgICAgICAgICAjIEltcGxpY2l0IHJlbGF0aXZlIGltcG9ydAorICAgICAgICAgICAgICAgICAgICB5aWVsZCBjb250ZXh0ICsgJy4nICsgbW9kdWxlLCBwYXRoCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHlpZWxkIG1vZHVsZSwgcGF0aAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgeWllbGQgbW9kdWxlLCBwYXRoCisKKyAgICBmb3IgbW9kdWxlLCBuYW1lcywgbGV2ZWwgaW4gdmlzaXRvci5pbXBvcnRzZnJvbToKKyAgICAgICAgaWYgbGV2ZWwgPT0gMDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGVsaWYgbm90IHByb3ZpZGU6CisgICAgICAgICAgICByYWlzZSBEZXBlbmRFcnJvcigiRXJyb3I6IEltcG9ydEZyb20gbm9uLXplcm8gbGV2ZWwgb3V0c2lkZSBvZiBhIHBhY2thZ2U6IHswfSIuZm9ybWF0KChtb2R1bGUsIG5hbWVzLCBsZXZlbCkpLCBwYXRoKQorICAgICAgICBlbGlmIGxldmVsID4gbGVuKHByb3ZpZGVfZWxlbWVudHMpOgorICAgICAgICAgICAgcmFpc2UgRGVwZW5kRXJyb3IoIkVycm9yOiBJbXBvcnRGcm9tIGxldmVsIGV4Y2VlZHMgcGFja2FnZSBkZXB0aDogezB9Ii5mb3JtYXQoKG1vZHVsZSwgbmFtZXMsIGxldmVsKSksIHBhdGgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb250ZXh0ID0gJy4nLmpvaW4ocHJvdmlkZV9lbGVtZW50c1s6LWxldmVsXSkKKyAgICAgICAgICAgIGlmIG1vZHVsZToKKyAgICAgICAgICAgICAgICBpZiBjb250ZXh0OgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBjb250ZXh0ICsgJy4nICsgbW9kdWxlLCBwYXRoCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgbW9kdWxlLCBwYXRoCisKKworZGVmIGdldF9maWxlX2RlcGVuZHMocGF0aCk6CisgICAgdHJ5OgorICAgICAgICBjb2RlX3N0cmluZyA9IG9wZW4ocGF0aCwgJ3InKS5yZWFkKCkKKyAgICBleGNlcHQgKE9TRXJyb3IsIElPRXJyb3IpIGFzIGV4YzoKKyAgICAgICAgcmFpc2UgRGVwZW5kRXJyb3IocGF0aCwgZXhjKQorCisgICAgcmV0dXJuIGdldF9jb2RlX2RlcGVuZHMoY29kZV9zdHJpbmcsIHBhdGgpCisKKworZGVmIGdldF9kZXBlbmRzX3JlY3Vyc2l2ZShkaXJlY3RvcnkpOgorICAgIGRpcmVjdG9yeSA9IG9zLnBhdGgucmVhbHBhdGgoZGlyZWN0b3J5KQorCisgICAgcHJvdmlkZXMgPSBkaWN0KCh2LCBrKSBmb3IgaywgdiBpbiBnZXRfcHJvdmlkZXMoZGlyZWN0b3J5KSkKKyAgICBmb3IgZmlsZW5hbWUsIHByb3ZpZGUgaW4gcHJvdmlkZXMuaXRlcml0ZW1zKCk6CisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZmlsZW5hbWUpOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oZmlsZW5hbWUsICdfX2luaXRfXy5weScpCisgICAgICAgICAgICBpc3BrZyA9IFRydWUKKyAgICAgICAgZWxpZiBub3QgZmlsZW5hbWUuZW5kc3dpdGgoJy5weScpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlzcGtnID0gRmFsc2UKKworICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIHNvdXJjZSA9IGYucmVhZCgpCisKKyAgICAgICAgZGVwZW5kcyA9IGdldF9jb2RlX2RlcGVuZHMoc291cmNlLCBmaWxlbmFtZSwgcHJvdmlkZSwgaXNwa2cpCisgICAgICAgIGZvciBkZXBlbmQsIGJ5IGluIGRlcGVuZHM6CisgICAgICAgICAgICB5aWVsZCBkZXBlbmQsIGJ5CisKKworZGVmIGdldF9kZXBlbmRzKHBhdGgpOgorICAgIGlmIG9zLnBhdGguaXNkaXIocGF0aCk6CisgICAgICAgIHJldHVybiBnZXRfZGVwZW5kc19yZWN1cnNpdmUocGF0aCkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gZ2V0X2ZpbGVfZGVwZW5kcyhwYXRoKQorCisKK2RlZiBtYWluKCk6CisgICAgbG9nZ2luZy5iYXNpY0NvbmZpZygpCisKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nRGV0ZXJtaW5lIGRlcGVuZGVuY2llcyBhbmQgcHJvdmlkZWQgcGFja2FnZXMgZm9yIHB5dGhvbiBzY3JpcHRzL21vZHVsZXMnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3BhdGgnLCBuYXJncz0nKycsIGhlbHA9J2Z1bGwgcGF0aCB0byBjb250ZW50IHRvIGJlIHByb2Nlc3NlZCcpCisgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCgpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctcCcsICctLXByb3ZpZGVzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZ2l2ZW4gYSBwYXRoLCBkaXNwbGF5IHRoZSBwcm92aWRlZCBweXRob24gbW9kdWxlcycpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctZCcsICctLWRlcGVuZHMnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdnaXZlbiBhIGZpbGVuYW1lLCBkaXNwbGF5IHRoZSBpbXBvcnRlZCBweXRob24gbW9kdWxlcycpCisKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIGlmIGFyZ3MucHJvdmlkZXM6CisgICAgICAgIG1vZHVsZXMgPSBzZXQoKQorICAgICAgICBmb3IgcGF0aCBpbiBhcmdzLnBhdGg6CisgICAgICAgICAgICBmb3IgcHJvdmlkZSwgZm4gaW4gZ2V0X3Byb3ZpZGVzKHBhdGgpOgorICAgICAgICAgICAgICAgIG1vZHVsZXMuYWRkKHByb3ZpZGUpCisKKyAgICAgICAgZm9yIG1vZHVsZSBpbiBzb3J0ZWQobW9kdWxlcyk6CisgICAgICAgICAgICBwcmludChtb2R1bGUpCisgICAgZWxpZiBhcmdzLmRlcGVuZHM6CisgICAgICAgIGZvciBwYXRoIGluIGFyZ3MucGF0aDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtb2R1bGVzID0gZ2V0X2RlcGVuZHMocGF0aCkKKyAgICAgICAgICAgIGV4Y2VwdCBQeXRob25EZXBFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHN0cihleGMpKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgICAgIGZvciBtb2R1bGUsIGltcF9ieSBpbiBtb2R1bGVzOgorICAgICAgICAgICAgICAgIHByaW50KCJ7fVx0e30iLmZvcm1hdChtb2R1bGUsIGltcF9ieSkpCisgICAgZWxzZToKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgyKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcmVjaXBldG9vbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9yZWNpcGV0b29sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg3ZmIzNWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcmVjaXBldG9vbApAQCAtMCwwICsxLDExNCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgUmVjaXBlIGNyZWF0aW9uIHRvb2wKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGdsb2IKK2ltcG9ydCBsb2dnaW5nCisKK3NjcmlwdHNfcGF0aCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSkKK2xpYl9wYXRoID0gc2NyaXB0c19wYXRoICsgJy9saWInCitzeXMucGF0aCA9IHN5cy5wYXRoICsgW2xpYl9wYXRoXQoraW1wb3J0IHNjcmlwdHV0aWxzCitsb2dnZXIgPSBzY3JpcHR1dGlscy5sb2dnZXJfY3JlYXRlKCdyZWNpcGV0b29sJykKKworcGx1Z2lucyA9IFtdCisKK2RlZiB0aW5mb2lsX2luaXQocGFyc2VyZWNpcGVzKToKKyAgICBpbXBvcnQgYmIudGluZm9pbAorICAgIGltcG9ydCBsb2dnaW5nCisgICAgdGluZm9pbCA9IGJiLnRpbmZvaWwuVGluZm9pbCgpCisgICAgdGluZm9pbC5wcmVwYXJlKG5vdCBwYXJzZXJlY2lwZXMpCisgICAgdGluZm9pbC5sb2dnZXIuc2V0TGV2ZWwobG9nZ2VyLmdldEVmZmVjdGl2ZUxldmVsKCkpCisgICAgcmV0dXJuIHRpbmZvaWwKKworZGVmIG1haW4oKToKKworICAgIGlmIG5vdCBvcy5lbnZpcm9uLmdldCgnQlVJTERESVInLCAnJyk6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVGhpcyBzY3JpcHQgY2FuIG9ubHkgYmUgcnVuIGFmdGVyIGluaXRpYWxpc2luZyB0aGUgYnVpbGQgZW52aXJvbm1lbnQgKGUuZy4gYnkgdXNpbmcgb2UtaW5pdC1idWlsZC1lbnYpIikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSJPcGVuRW1iZWRkZWQgcmVjaXBlIHRvb2wiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9oZWxwPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwaWxvZz0iVXNlICUocHJvZylzIDxzdWJjb21tYW5kPiAtLWhlbHAgdG8gZ2V0IGhlbHAgb24gYSBzcGVjaWZpYyBjb21tYW5kIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZCcsICctLWRlYnVnJywgaGVscD0nRW5hYmxlIGRlYnVnIG91dHB1dCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXEnLCAnLS1xdWlldCcsIGhlbHA9J1ByaW50IG9ubHkgZXJyb3JzJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNvbG9yJywgY2hvaWNlcz1bJ2F1dG8nLCAnYWx3YXlzJywgJ25ldmVyJ10sIGRlZmF1bHQ9J2F1dG8nLCBoZWxwPSdDb2xvcml6ZSBvdXRwdXQgKHdoZXJlICUobWV0YXZhcilzIGlzICUoY2hvaWNlcylzKScsIG1ldGF2YXI9J0NPTE9SJykKKworICAgIGdsb2JhbF9hcmdzLCB1bnBhcnNlZF9hcmdzID0gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoKQorCisgICAgIyBIZWxwIGlzIGFkZGVkIGhlcmUgcmF0aGVyIHRoYW4gdmlhIGFkZF9oZWxwPVRydWUsIGFzIHdlIGRvbid0IHdhbnQgaXQgdG8KKyAgICAjIGJlIGhhbmRsZWQgYnkgcGFyc2Vfa25vd25fYXJncygpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWgnLCAnLS1oZWxwJywgYWN0aW9uPSdoZWxwJywgZGVmYXVsdD1hcmdwYXJzZS5TVVBQUkVTUywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3Nob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQnKQorICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnModGl0bGU9J3N1YmNvbW1hbmRzJywgbWV0YXZhcj0nPHN1YmNvbW1hbmQ+JykKKworICAgIGlmIGdsb2JhbF9hcmdzLmRlYnVnOgorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKyAgICBlbGlmIGdsb2JhbF9hcmdzLnF1aWV0OgorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5FUlJPUikKKworICAgIGltcG9ydCBzY3JpcHRwYXRoCisgICAgYml0YmFrZXBhdGggPSBzY3JpcHRwYXRoLmFkZF9iaXRiYWtlX2xpYl9wYXRoKCkKKyAgICBpZiBub3QgYml0YmFrZXBhdGg6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGZpbmQgYml0YmFrZSBieSBzZWFyY2hpbmcgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGlzIHNjcmlwdCBvciBQQVRIIikKKyAgICAgICAgc3lzLmV4aXQoMSkKKyAgICBsb2dnZXIuZGVidWcoJ0ZvdW5kIGJpdGJha2UgcGF0aDogJXMnICUgYml0YmFrZXBhdGgpCisKKyAgICBzY3JpcHR1dGlscy5sb2dnZXJfc2V0dXBfY29sb3IobG9nZ2VyLCBnbG9iYWxfYXJncy5jb2xvcikKKworICAgIHRpbmZvaWwgPSB0aW5mb2lsX2luaXQoRmFsc2UpCisgICAgZm9yIHBhdGggaW4gKFtzY3JpcHRzX3BhdGhdICsKKyAgICAgICAgICAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpLnNwbGl0KCc6JykpOgorICAgICAgICBwbHVnaW5wYXRoID0gb3MucGF0aC5qb2luKHBhdGgsICdsaWInLCAncmVjaXBldG9vbCcpCisgICAgICAgIHNjcmlwdHV0aWxzLmxvYWRfcGx1Z2lucyhsb2dnZXIsIHBsdWdpbnMsIHBsdWdpbnBhdGgpCisKKyAgICByZWdpc3RlcmVkID0gRmFsc2UKKyAgICBmb3IgcGx1Z2luIGluIHBsdWdpbnM6CisgICAgICAgIGlmIGhhc2F0dHIocGx1Z2luLCAncmVnaXN0ZXJfY29tbWFuZCcpOgorICAgICAgICAgICAgcmVnaXN0ZXJlZCA9IFRydWUKKyAgICAgICAgICAgIHBsdWdpbi5yZWdpc3Rlcl9jb21tYW5kKHN1YnBhcnNlcnMpCisgICAgICAgIGlmIGhhc2F0dHIocGx1Z2luLCAndGluZm9pbF9pbml0Jyk6CisgICAgICAgICAgICBwbHVnaW4udGluZm9pbF9pbml0KHRpbmZvaWwpCisKKyAgICBpZiBub3QgcmVnaXN0ZXJlZDoKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJObyBjb21tYW5kcyByZWdpc3RlcmVkIC0gbWlzc2luZyBwbHVnaW5zPyIpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3ModW5wYXJzZWRfYXJncywgbmFtZXNwYWNlPWdsb2JhbF9hcmdzKQorCisgICAgdHJ5OgorICAgICAgICBpZiBnZXRhdHRyKGFyZ3MsICdwYXJzZXJlY2lwZXMnLCBGYWxzZSk6CisgICAgICAgICAgICB0aW5mb2lsLnBhcnNlUmVjaXBlcygpCisgICAgICAgIHJldCA9IGFyZ3MuZnVuYyhhcmdzKQorICAgIGV4Y2VwdCBiYi5CQkhhbmRsZWRFeGNlcHRpb246CisgICAgICAgIHJldCA9IDEKKworICAgIHJldHVybiByZXQKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRyeToKKyAgICAgICAgcmV0ID0gbWFpbigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmV0ID0gMQorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoNSkKKyAgICBzeXMuZXhpdChyZXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcmVsb2NhdGVfc2RrLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL3JlbG9jYXRlX3Nkay5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45OTJkYjVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3JlbG9jYXRlX3Nkay5weQpAQCAtMCwwICsxLDI1NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorIworIyBERVNDUklQVElPTgorIyBUaGlzIHNjcmlwdCBpcyBjYWxsZWQgYnkgdGhlIFNESyBpbnN0YWxsZXIgc2NyaXB0LiBJdCByZXBsYWNlcyB0aGUgZHluYW1pYworIyBsb2FkZXIgcGF0aCBpbiBhbGwgYmluYXJpZXMgYW5kIGFsc28gZml4ZXMgdGhlIFNZU0RJUiBwYXRocy9sZW5ndGhzIGFuZCB0aGUKKyMgbG9jYXRpb24gb2YgbGQuc28uY2FjaGUgaW4gdGhlIGR5bmFtaWMgbG9hZGVyIGJpbmFyeQorIworIyBBVVRIT1JTCisjIExhdXJlbnRpdSBQYWxjdSA8bGF1cmVudGl1LnBhbGN1QGludGVsLmNvbT4KKyMKKworaW1wb3J0IHN0cnVjdAoraW1wb3J0IHN5cworaW1wb3J0IHN0YXQKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgZXJybm8KKworaWYgc3lzLnZlcnNpb24gPCAnMyc6CisgICAgZGVmIGIoeCk6CisgICAgICAgIHJldHVybiB4CitlbHNlOgorICAgIGRlZiBiKHgpOgorICAgICAgICByZXR1cm4geC5lbmNvZGUoc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpKQorCitvbGRfcHJlZml4ID0gcmUuY29tcGlsZShiKCIjI0RFRkFVTFRfSU5TVEFMTF9ESVIjIyIpKQorCitkZWYgZ2V0X2FyY2goKToKKyAgICBmLnNlZWsoMCkKKyAgICBlX2lkZW50ID1mLnJlYWQoMTYpCisgICAgZWlfbWFnMCxlaV9tYWcxXzMsZWlfY2xhc3MgPSBzdHJ1Y3QudW5wYWNrKCI8QjNzQjExeCIsIGVfaWRlbnQpCisKKyAgICBpZiAoZWlfbWFnMCAhPSAweDdmIGFuZCBlaV9tYWcxXzMgIT0gIkVMRiIpIG9yIGVpX2NsYXNzID09IDA6CisgICAgICAgIHJldHVybiAwCisKKyAgICBpZiBlaV9jbGFzcyA9PSAxOgorICAgICAgICByZXR1cm4gMzIKKyAgICBlbGlmIGVpX2NsYXNzID09IDI6CisgICAgICAgIHJldHVybiA2NAorCitkZWYgcGFyc2VfZWxmX2hlYWRlcigpOgorICAgIGdsb2JhbCBlX3R5cGUsIGVfbWFjaGluZSwgZV92ZXJzaW9uLCBlX2VudHJ5LCBlX3Bob2ZmLCBlX3Nob2ZmLCBlX2ZsYWdzLFwKKyAgICAgICAgICAgZV9laHNpemUsIGVfcGhlbnRzaXplLCBlX3BobnVtLCBlX3NoZW50c2l6ZSwgZV9zaG51bSwgZV9zaHN0cm5keAorCisgICAgZi5zZWVrKDApCisgICAgZWxmX2hlYWRlciA9IGYucmVhZCg2NCkKKworICAgIGlmIGFyY2ggPT0gMzI6CisgICAgICAgICMgMzJiaXQKKyAgICAgICAgaGRyX2ZtdCA9ICI8SEhJTExMSUhISEhISCIKKyAgICAgICAgaGRyX3NpemUgPSA1MgorICAgIGVsc2U6CisgICAgICAgICMgNjRiaXQKKyAgICAgICAgaGRyX2ZtdCA9ICI8SEhJUVFRSUhISEhISCIKKyAgICAgICAgaGRyX3NpemUgPSA2NAorCisgICAgZV90eXBlLCBlX21hY2hpbmUsIGVfdmVyc2lvbiwgZV9lbnRyeSwgZV9waG9mZiwgZV9zaG9mZiwgZV9mbGFncyxcCisgICAgZV9laHNpemUsIGVfcGhlbnRzaXplLCBlX3BobnVtLCBlX3NoZW50c2l6ZSwgZV9zaG51bSwgZV9zaHN0cm5keCA9XAorICAgICAgICBzdHJ1Y3QudW5wYWNrKGhkcl9mbXQsIGVsZl9oZWFkZXJbMTY6aGRyX3NpemVdKQorCitkZWYgY2hhbmdlX2ludGVycHJldGVyKGVsZl9maWxlX25hbWUpOgorICAgIGlmIGFyY2ggPT0gMzI6CisgICAgICAgIHBoX2ZtdCA9ICI8SUlJSUlJSUkiCisgICAgZWxzZToKKyAgICAgICAgcGhfZm10ID0gIjxJSVFRUVFRUSIKKworICAgICIiIiBsb29rIGZvciBQVF9JTlRFUlAgc2VjdGlvbiAiIiIKKyAgICBmb3IgaSBpbiByYW5nZSgwLGVfcGhudW0pOgorICAgICAgICBmLnNlZWsoZV9waG9mZiArIGkgKiBlX3BoZW50c2l6ZSkKKyAgICAgICAgcGhfaGRyID0gZi5yZWFkKGVfcGhlbnRzaXplKQorICAgICAgICBpZiBhcmNoID09IDMyOgorICAgICAgICAgICAgIyAzMmJpdAorICAgICAgICAgICAgcF90eXBlLCBwX29mZnNldCwgcF92YWRkciwgcF9wYWRkciwgcF9maWxlc3osXAorICAgICAgICAgICAgICAgIHBfbWVtc3osIHBfZmxhZ3MsIHBfYWxpZ24gPSBzdHJ1Y3QudW5wYWNrKHBoX2ZtdCwgcGhfaGRyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyA2NGJpdAorICAgICAgICAgICAgcF90eXBlLCBwX2ZsYWdzLCBwX29mZnNldCwgcF92YWRkciwgcF9wYWRkciwgXAorICAgICAgICAgICAgcF9maWxlc3osIHBfbWVtc3osIHBfYWxpZ24gPSBzdHJ1Y3QudW5wYWNrKHBoX2ZtdCwgcGhfaGRyKQorCisgICAgICAgICIiIiBjaGFuZ2UgaW50ZXJwcmV0ZXIgIiIiCisgICAgICAgIGlmIHBfdHlwZSA9PSAzOgorICAgICAgICAgICAgIyBQVF9JTlRFUlAgc2VjdGlvbgorICAgICAgICAgICAgZi5zZWVrKHBfb2Zmc2V0KQorICAgICAgICAgICAgIyBFeHRlcm5hbCBTREtzIHdpdGggbWl4ZWQgcHJlLWNvbXBpbGVkIGJpbmFyaWVzIHNob3VsZCBub3QgZ2V0CisgICAgICAgICAgICAjIHJlbG9jYXRlZCBzbyBsb29rIGZvciBzb21lIHZhcmlhbnQgb2YgL2xpYgorICAgICAgICAgICAgZm5hbWUgPSBmLnJlYWQoMTEpCisgICAgICAgICAgICBpZiBmbmFtZS5zdGFydHN3aXRoKGIoIi9saWIvIikpIG9yIGZuYW1lLnN0YXJ0c3dpdGgoYigiL2xpYjY0LyIpKSBvciBcCisgICAgICAgICAgICAgICBmbmFtZS5zdGFydHN3aXRoKGIoIi9saWIzMi8iKSkgb3IgZm5hbWUuc3RhcnRzd2l0aChiKCIvdXNyL2xpYjMyLyIpKSBvciBcCisgICAgICAgICAgICAgICBmbmFtZS5zdGFydHN3aXRoKGIoIi91c3IvbGliMzIvIikpIG9yIGZuYW1lLnN0YXJ0c3dpdGgoYigiL3Vzci9saWI2NC8iKSk6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIChsZW4obmV3X2RsX3BhdGgpID49IHBfZmlsZXN6KToKKyAgICAgICAgICAgICAgICBwcmludCgiRVJST1I6IGNvdWxkIG5vdCByZWxvY2F0ZSAlcywgaW50ZXJwIHNpemUgPSAlaSBhbmQgJWkgaXMgbmVlZGVkLiIgXAorICAgICAgICAgICAgICAgICAgICAlIChlbGZfZmlsZV9uYW1lLCBwX21lbXN6LCBsZW4obmV3X2RsX3BhdGgpICsgMSkpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGRsX3BhdGggPSBuZXdfZGxfcGF0aCArIGIoIlwwIikgKiAocF9maWxlc3ogLSBsZW4obmV3X2RsX3BhdGgpKQorICAgICAgICAgICAgZi5zZWVrKHBfb2Zmc2V0KQorICAgICAgICAgICAgZi53cml0ZShkbF9wYXRoKQorICAgICAgICAgICAgYnJlYWsKKworZGVmIGNoYW5nZV9kbF9zeXNkaXJzKCk6CisgICAgaWYgYXJjaCA9PSAzMjoKKyAgICAgICAgc2hfZm10ID0gIjxJSUlJSUlJSUlJIgorICAgIGVsc2U6CisgICAgICAgIHNoX2ZtdCA9ICI8SUlRUVFRSUlRUSIKKworICAgICIiIiByZWFkIHNlY3Rpb24gc3RyaW5nIHRhYmxlICIiIgorICAgIGYuc2VlayhlX3Nob2ZmICsgZV9zaHN0cm5keCAqIGVfc2hlbnRzaXplKQorICAgIHNoX2hkciA9IGYucmVhZChlX3NoZW50c2l6ZSkKKyAgICBpZiBhcmNoID09IDMyOgorICAgICAgICBzaF9vZmZzZXQsIHNoX3NpemUgPSBzdHJ1Y3QudW5wYWNrKCI8MTZ4SUkxNngiLCBzaF9oZHIpCisgICAgZWxzZToKKyAgICAgICAgc2hfb2Zmc2V0LCBzaF9zaXplID0gc3RydWN0LnVucGFjaygiPDI0eFFRMjR4Iiwgc2hfaGRyKQorCisgICAgZi5zZWVrKHNoX29mZnNldCkKKyAgICBzaF9zdHJ0YWIgPSBmLnJlYWQoc2hfc2l6ZSkKKworICAgIHN5c2RpcnMgPSBzeXNkaXJzX2xlbiA9ICIiCisKKyAgICAiIiIgY2hhbmdlIGxkLnNvLmNhY2hlIHBhdGggYW5kIGRlZmF1bHQgbGlicyBwYXRoIGZvciBkeW5hbWljIGxvYWRlciAiIiIKKyAgICBmb3IgaSBpbiByYW5nZSgwLGVfc2hudW0pOgorICAgICAgICBmLnNlZWsoZV9zaG9mZiArIGkgKiBlX3NoZW50c2l6ZSkKKyAgICAgICAgc2hfaGRyID0gZi5yZWFkKGVfc2hlbnRzaXplKQorCisgICAgICAgIHNoX25hbWUsIHNoX3R5cGUsIHNoX2ZsYWdzLCBzaF9hZGRyLCBzaF9vZmZzZXQsIHNoX3NpemUsIHNoX2xpbmssXAorICAgICAgICAgICAgc2hfaW5mbywgc2hfYWRkcmFsaWduLCBzaF9lbnRzaXplID0gc3RydWN0LnVucGFjayhzaF9mbXQsIHNoX2hkcikKKworICAgICAgICBuYW1lID0gc2hfc3RydGFiW3NoX25hbWU6c2hfc3RydGFiLmZpbmQoYigiXDAiKSwgc2hfbmFtZSldCisKKyAgICAgICAgIiIiIGxvb2sgb25seSBpbnRvIFNIVF9QUk9HQklUUyBzZWN0aW9ucyAiIiIKKyAgICAgICAgaWYgc2hfdHlwZSA9PSAxOgorICAgICAgICAgICAgZi5zZWVrKHNoX29mZnNldCkKKyAgICAgICAgICAgICIiIiBkZWZhdWx0IGxpYnJhcnkgcGF0aHMgY2Fubm90IGJlIGNoYW5nZWQgb24gdGhlIGZseSBiZWNhdXNlICAiIiIKKyAgICAgICAgICAgICIiIiB0aGUgc3RyaW5nIGxlbmd0aHMgaGF2ZSB0byBiZSBjaGFuZ2VkIHRvby4gICAgICAgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGlmIG5hbWUgPT0gYigiLnN5c2RpcnMiKToKKyAgICAgICAgICAgICAgICBzeXNkaXJzID0gZi5yZWFkKHNoX3NpemUpCisgICAgICAgICAgICAgICAgc3lzZGlyc19vZmYgPSBzaF9vZmZzZXQKKyAgICAgICAgICAgICAgICBzeXNkaXJzX3NlY3Rfc2l6ZSA9IHNoX3NpemUKKyAgICAgICAgICAgIGVsaWYgbmFtZSA9PSBiKCIuc3lzZGlyc2xlbiIpOgorICAgICAgICAgICAgICAgIHN5c2RpcnNsZW4gPSBmLnJlYWQoc2hfc2l6ZSkKKyAgICAgICAgICAgICAgICBzeXNkaXJzbGVuX29mZiA9IHNoX29mZnNldAorICAgICAgICAgICAgZWxpZiBuYW1lID09IGIoIi5sZHNvY2FjaGUiKToKKyAgICAgICAgICAgICAgICBsZHNvY2FjaGVfcGF0aCA9IGYucmVhZChzaF9zaXplKQorICAgICAgICAgICAgICAgIG5ld19sZHNvY2FjaGVfcGF0aCA9IG9sZF9wcmVmaXguc3ViKG5ld19wcmVmaXgsIGxkc29jYWNoZV9wYXRoKQorICAgICAgICAgICAgICAgICMgcGFkIHdpdGggemVyb3MKKyAgICAgICAgICAgICAgICBuZXdfbGRzb2NhY2hlX3BhdGggKz0gYigiXDAiKSAqIChzaF9zaXplIC0gbGVuKG5ld19sZHNvY2FjaGVfcGF0aCkpCisgICAgICAgICAgICAgICAgIyB3cml0ZSBpdCBiYWNrCisgICAgICAgICAgICAgICAgZi5zZWVrKHNoX29mZnNldCkKKyAgICAgICAgICAgICAgICBmLndyaXRlKG5ld19sZHNvY2FjaGVfcGF0aCkKKyAgICAgICAgICAgIGVsaWYgbmFtZSA9PSBiKCIuZ2NjcmVsb2NwcmVmaXgiKToKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSAwCisgICAgICAgICAgICAgICAgd2hpbGUgKG9mZnNldCArIDQwOTYpIDw9IHNoX3NpemU6CisgICAgICAgICAgICAgICAgICAgIHBhdGggPSBmLnJlYWQoNDA5NikKKyAgICAgICAgICAgICAgICAgICAgbmV3X3BhdGggPSBvbGRfcHJlZml4LnN1YihuZXdfcHJlZml4LCBwYXRoKQorICAgICAgICAgICAgICAgICAgICAjIHBhZCB3aXRoIHplcm9zCisgICAgICAgICAgICAgICAgICAgIG5ld19wYXRoICs9IGIoIlwwIikgKiAoNDA5NiAtIGxlbihuZXdfcGF0aCkpCisgICAgICAgICAgICAgICAgICAgICNwcmludCAiQ2hhbmdpbmcgJXMgdG8gJXMgYXQgJXMiICUgKHN0cihwYXRoKSwgc3RyKG5ld19wYXRoKSwgc3RyKG9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgICMgd3JpdGUgaXQgYmFjaworICAgICAgICAgICAgICAgICAgICBmLnNlZWsoc2hfb2Zmc2V0ICsgb2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKG5ld19wYXRoKQorICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBvZmZzZXQgKyA0MDk2CisgICAgaWYgc3lzZGlycyAhPSAiIiBhbmQgc3lzZGlyc2xlbiAhPSAiIjoKKyAgICAgICAgcGF0aHMgPSBzeXNkaXJzLnNwbGl0KGIoIlwwIikpCisgICAgICAgIHN5c2RpcnMgPSBiKCIiKQorICAgICAgICBzeXNkaXJzbGVuID0gYigiIikKKyAgICAgICAgZm9yIHBhdGggaW4gcGF0aHM6CisgICAgICAgICAgICAiIiIgZXhpdCB0aGUgbG9vcCB3aGVuIHdlIGVuY291bnRlciBmaXJzdCBlbXB0eSBzdHJpbmcgIiIiCisgICAgICAgICAgICBpZiBwYXRoID09IGIoIiIpOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIG5ld19wYXRoID0gb2xkX3ByZWZpeC5zdWIobmV3X3ByZWZpeCwgcGF0aCkKKyAgICAgICAgICAgIHN5c2RpcnMgKz0gbmV3X3BhdGggKyBiKCJcMCIpCisKKyAgICAgICAgICAgIGlmIGFyY2ggPT0gMzI6CisgICAgICAgICAgICAgICAgc3lzZGlyc2xlbiArPSBzdHJ1Y3QucGFjaygiPEwiLCBsZW4obmV3X3BhdGgpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzeXNkaXJzbGVuICs9IHN0cnVjdC5wYWNrKCI8USIsIGxlbihuZXdfcGF0aCkpCisKKyAgICAgICAgIiIiIHBhZCB3aXRoIHplcm9zICIiIgorICAgICAgICBzeXNkaXJzICs9IGIoIlwwIikgKiAoc3lzZGlyc19zZWN0X3NpemUgLSBsZW4oc3lzZGlycykpCisKKyAgICAgICAgIiIiIHdyaXRlIHRoZSBzZWN0aW9ucyBiYWNrICIiIgorICAgICAgICBmLnNlZWsoc3lzZGlyc19vZmYpCisgICAgICAgIGYud3JpdGUoc3lzZGlycykKKyAgICAgICAgZi5zZWVrKHN5c2RpcnNsZW5fb2ZmKQorICAgICAgICBmLndyaXRlKHN5c2RpcnNsZW4pCisKKyMgTUFJTgoraWYgbGVuKHN5cy5hcmd2KSA8IDQ6CisgICAgc3lzLmV4aXQoLTEpCisKKyMgSW4gcHl0aG9uID4gMywgc3RyaW5ncyBtYXkgYWxzbyBjb250YWluIFVuaWNvZGUgY2hhcmFjdGVycy4gU28sIGNvbnZlcnQKKyMgdGhlbSB0byBieXRlcworaWYgc3lzLnZlcnNpb25faW5mbyA8ICgzLCk6CisgICAgbmV3X3ByZWZpeCA9IHN5cy5hcmd2WzFdCisgICAgbmV3X2RsX3BhdGggPSBzeXMuYXJndlsyXQorZWxzZToKKyAgICBuZXdfcHJlZml4ID0gc3lzLmFyZ3ZbMV0uZW5jb2RlKCkKKyAgICBuZXdfZGxfcGF0aCA9IHN5cy5hcmd2WzJdLmVuY29kZSgpCisKK2V4ZWN1dGFibGVzX2xpc3QgPSBzeXMuYXJndlszOl0KKworZm9yIGUgaW4gZXhlY3V0YWJsZXNfbGlzdDoKKyAgICBwZXJtcyA9IG9zLnN0YXQoZSlbc3RhdC5TVF9NT0RFXQorICAgIGlmIG9zLmFjY2VzcyhlLCBvcy5XX09LfG9zLlJfT0spOgorICAgICAgICBwZXJtcyA9IE5vbmUKKyAgICBlbHNlOgorICAgICAgICBvcy5jaG1vZChlLCBwZXJtc3xzdGF0LlNfSVJXWFUpCisKKyAgICB0cnk6CisgICAgICAgIGYgPSBvcGVuKGUsICJyK2IiKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGN0eXBlLCBpb2V4ID0gc3lzLmV4Y19pbmZvKClbOjJdCisgICAgICAgIGlmIGlvZXguZXJybm8gPT0gZXJybm8uRVRYVEJTWToKKyAgICAgICAgICAgIHByaW50KCJDb3VsZCBub3Qgb3BlbiAlcy4gRmlsZSB1c2VkIGJ5IGFub3RoZXIgcHJvY2Vzcy5cblBsZWFzZSAiXAorICAgICAgICAgICAgICAgICAgIm1ha2Ugc3VyZSB5b3UgZXhpdCBhbGwgcHJvY2Vzc2VzIHRoYXQgbWlnaHQgdXNlIGFueSBTREsgIlwKKyAgICAgICAgICAgICAgICAgICJiaW5hcmllcy4iICUgZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJDb3VsZCBub3Qgb3BlbiAlczogJXMoJWQpIiAlIChlLCBpb2V4LnN0cmVycm9yLCBpb2V4LmVycm5vKSkKKyAgICAgICAgc3lzLmV4aXQoLTEpCisKKyAgICAjIFNhdmUgb2xkIHNpemUgYW5kIGRvIGEgc2l6ZSBjaGVjayBhdCB0aGUgZW5kLiBKdXN0IGEgc2FmZXR5IG1lYXN1cmUuCisgICAgb2xkX3NpemUgPSBvcy5wYXRoLmdldHNpemUoZSkKKyAgICBpZiBvbGRfc2l6ZSA+PSA2NDoKKyAgICAgICAgYXJjaCA9IGdldF9hcmNoKCkKKyAgICAgICAgaWYgYXJjaDoKKyAgICAgICAgICAgIHBhcnNlX2VsZl9oZWFkZXIoKQorICAgICAgICAgICAgY2hhbmdlX2ludGVycHJldGVyKGUpCisgICAgICAgICAgICBjaGFuZ2VfZGxfc3lzZGlycygpCisKKyAgICAiIiIgY2hhbmdlIHBlcm1pc3Npb25zIGJhY2sgIiIiCisgICAgaWYgcGVybXM6CisgICAgICAgIG9zLmNobW9kKGUsIHBlcm1zKQorCisgICAgZi5jbG9zZSgpCisKKyAgICBpZiBvbGRfc2l6ZSAhPSBvcy5wYXRoLmdldHNpemUoZSk6CisgICAgICAgIHByaW50KCJOZXcgZmlsZSBzaXplIGZvciAlcyBpcyBkaWZmZXJlbnQuIExvb2tzIGxpa2UgYSByZWxvY2F0aW9uIGVycm9yISIsIGUpCisgICAgICAgIHN5cy5leGl0KC0xKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcm9vdGZzX3JwbS1leHRyYWN0LXBvc3RpbnN0LmF3ayBiL3lvY3RvLXBva3kvc2NyaXB0cy9yb290ZnNfcnBtLWV4dHJhY3QtcG9zdGluc3QuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMjgzNmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcm9vdGZzX3JwbS1leHRyYWN0LXBvc3RpbnN0LmF3awpAQCAtMCwwICsxLDExIEBACisvTmFtZTouKi8geworICBwYWNrYWdlID0gc3Vic3RyKCQwLCA3KQorICBuZXh0Cit9CisvcG9zdGluc3RhbGwuKnNjcmlwdGxldCAuKi8geworICBuZXh0Cit9Cit7CisgIHByaW50ICQwID4+IEVOVklST05bIkQiXSAiL2V0Yy9ycG0tcG9zdGluc3RzLyIgcGFja2FnZSAiLnNoIgorfQorICAgIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3JwbTJjcGlvLnNoIGIveW9jdG8tcG9reS9zY3JpcHRzL3JwbTJjcGlvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVkZjhjMGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcnBtMmNwaW8uc2gKQEAgLTAsMCArMSw1MyBAQAorIyEvYmluL3NoCisKKyMgVGhpcyBjb21lcyBmcm9tIHRoZSBSUE01IDUuNC4wIGRpc3RyaWJ1dGlvbi4KKworcGtnPSQxCitpZiBbICIkcGtnIiA9ICIiIC1vICEgLWUgIiRwa2ciIF07IHRoZW4KKyAgICBlY2hvICJubyBwYWNrYWdlIHN1cHBsaWVkIiAxPiYyCisgICBleGl0IDEKK2ZpCisKK2xlYWRzaXplPTk2CitvPWBleHByICRsZWFkc2l6ZSArIDhgCitzZXQgYG9kIC1qICRvIC1OIDggLXQgdTEgJHBrZ2AKK2lsPWBleHByIDI1NiBcKiBcKCAyNTYgXCogXCggMjU2IFwqICQyICsgJDMgXCkgKyAkNCBcKSArICQ1YAorZGw9YGV4cHIgMjU2IFwqIFwoIDI1NiBcKiBcKCAyNTYgXCogJDYgKyAkNyBcKSArICQ4IFwpICsgJDlgCisjIGVjaG8gInNpZyBpbDogJGlsIGRsOiAkZGwiCisKK3NpZ3NpemU9YGV4cHIgOCArIDE2IFwqICRpbCArICRkbGAKK289YGV4cHIgJG8gKyAkc2lnc2l6ZSArIFwoIDggLSBcKCAkc2lnc2l6ZSBcJSA4IFwpIFwpIFwlIDggKyA4YAorc2V0IGBvZCAtaiAkbyAtTiA4IC10IHUxICRwa2dgCitpbD1gZXhwciAyNTYgXCogXCggMjU2IFwqIFwoIDI1NiBcKiAkMiArICQzIFwpICsgJDQgXCkgKyAkNWAKK2RsPWBleHByIDI1NiBcKiBcKCAyNTYgXCogXCggMjU2IFwqICQ2ICsgJDcgXCkgKyAkOCBcKSArICQ5YAorIyBlY2hvICJoZHIgaWw6ICRpbCBkbDogJGRsIgorCitoZHJzaXplPWBleHByIDggKyAxNiBcKiAkaWwgKyAkZGxgCitvPWBleHByICRvICsgJGhkcnNpemVgCitFWFRSQUNUT1I9ImRkIGlmPSRwa2cgaWJzPSRvIHNraXA9MSIKKworQ09NUFJFU1NJT049YCgkRVhUUkFDVE9SIHxmaWxlIC0pIDI+L2Rldi9udWxsYAoraWYgZWNobyAkQ09NUFJFU1NJT04gfGdyZXAgLWlxIGd6aXA7IHRoZW4KKwlERUNPTVBSRVNTT1I9Z3VuemlwCitlbGlmIGVjaG8gJENPTVBSRVNTSU9OIHxncmVwIC1pcSBiemlwMjsgdGhlbgorCURFQ09NUFJFU1NPUj1idW56aXAyCitlbGlmIGVjaG8gJENPTVBSRVNTSU9OIHxncmVwIC1pcSB4ejsgdGhlbgorCURFQ09NUFJFU1NPUj11bnh6CitlbGlmIGVjaG8gJENPTVBSRVNTSU9OIHxncmVwIC1pcSBjcGlvOyB0aGVuCisJREVDT01QUkVTU09SPWNhdAorZWxzZQorCSMgTW9zdCB2ZXJzaW9ucyBvZiBmaWxlIGRvbid0IHN1cHBvcnQgTFpNQSwgdGhlcmVmb3JlIHdlIGFzc3VtZQorCSMgYW55dGhpbmcgbm90IGRldGVjdGVkIGlzIExaTUEKKwlERUNPTVBSRVNTT1I9YHdoaWNoIHVubHptYSAyPi9kZXYvbnVsbGAKKwljYXNlICIkREVDT01QUkVTU09SIiBpbgorCSAgICAvKiApIDs7CisJICAgICogICkgREVDT01QUkVTU09SPWB3aGljaCBsem1hc2ggMj4vZGV2L251bGxgCisJICAgICAgICAgY2FzZSAiJERFQ09NUFJFU1NPUiIgaW4KKwkgICAgICAgICAgICAgLyogKSBERUNPTVBSRVNTT1I9Imx6bWFzaCAtZCAtYyIgOzsKKwkgICAgICAgICAgICAgKiAgKSBERUNPTVBSRVNTT1I9Y2F0IDs7CisJICAgICAgICAgZXNhYworCSAgICAgICAgIDs7CisJZXNhYworZmkKKworJEVYVFJBQ1RPUiAyPi9kZXYvbnVsbCB8ICRERUNPTVBSRVNTT1IKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11IGIveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjNjZjViZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11CkBAIC0wLDAgKzEsNTMyIEBACisjIS9iaW4vYmFzaAorIworIyBIYW5kbGUgcnVubmluZyBPRSBpbWFnZXMgc3RhbmRhbG9uZSB3aXRoIFFFTVUKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTEgTGludXggRm91bmRhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKwordXNhZ2UoKSB7CisgICAgTVlOQU1FPWBiYXNlbmFtZSAkMGAKKyAgICBlY2hvICIiCisgICAgZWNobyAiVXNhZ2U6IHlvdSBjYW4gcnVuIHRoaXMgc2NyaXB0IHdpdGggYW55IHZhbGlkIGNvbWJpbmF0aW9uIgorICAgIGVjaG8gIm9mIHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIChpbiBhbnkgb3JkZXIpOiIKKyAgICBlY2hvICIgIFFFTVVBUkNIIC0gdGhlIHFlbXUgbWFjaGluZSBhcmNoaXRlY3R1cmUgdG8gdXNlIgorICAgIGVjaG8gIiAgS0VSTkVMIC0gdGhlIGtlcm5lbCBpbWFnZSBmaWxlIHRvIHVzZSIKKyAgICBlY2hvICIgIFJPT1RGUyAtIHRoZSByb290ZnMgaW1hZ2UgZmlsZSBvciBuZnNyb290IGRpcmVjdG9yeSB0byB1c2UiCisgICAgZWNobyAiICBNQUNISU5FIC0gdGhlIG1hY2hpbmUgbmFtZSAob3B0aW9uYWwsIGF1dG9kZXRlY3RlZCBmcm9tIEtFUk5FTCBmaWxlbmFtZSBpZiB1bnNwZWNpZmllZCkiCisgICAgZWNobyAiICBSQU1GUyAtIGJvb3QgYSByYW1mcy1iYXNlZCBpbWFnZSIKKyAgICBlY2hvICIgIElTTyAtIGJvb3QgYW4gSVNPIGltYWdlIgorICAgIGVjaG8gIiAgVk0gLSBib290IGEgdmlydHVhbCBtYWNoaW5lIGltYWdlICg9IGEgZmlsZSByZXByZXNlbnRpbmcgYSBmdWxsIGRpc2sgd2l0aCBib290IGxvYWRlcikiCisgICAgZWNobyAiICBTaW1wbGlmaWVkIFFFTVUgY29tbWFuZC1saW5lIG9wdGlvbnMgY2FuIGJlIHBhc3NlZCB3aXRoOiIKKyAgICBlY2hvICIgICAgbm9ncmFwaGljIC0gZGlzYWJsZXMgdmlkZW8gY29uc29sZSIKKyAgICBlY2hvICIgICAgc2VyaWFsIC0gZW5hYmxlcyBhIHNlcmlhbCBjb25zb2xlIG9uIC9kZXYvdHR5UzAiCisgICAgZWNobyAiICAgIGt2bSAtIGVuYWJsZXMgS1ZNIHdoZW4gcnVubmluZyBxZW11eDg2L3FlbXV4ODYtNjQgKFZULWNhcGFibGUgQ1BVIHJlcXVpcmVkKSIKKyAgICBlY2hvICIgICAgcHVibGljdm5jIC0gZW5hYmxlIGEgVk5DIHNlcnZlciBvcGVuIHRvIGFsbCBob3N0cyIKKyAgICBlY2hvICIgIHFlbXVwYXJhbXM9XCJ4eXpcIiAtIHNwZWNpZnkgY3VzdG9tIHBhcmFtZXRlcnMgdG8gUUVNVSIKKyAgICBlY2hvICIgIGJvb3RwYXJhbXM9XCJ4eXpcIiAtIHNwZWNpZnkgY3VzdG9tIGtlcm5lbCBwYXJhbWV0ZXJzIGR1cmluZyBib290IgorICAgIGVjaG8gIiIKKyAgICBlY2hvICJFeGFtcGxlczoiCisgICAgZWNobyAiICAkTVlOQU1FIHFlbXVhcm0iCisgICAgZWNobyAiICAkTVlOQU1FIHFlbXV4ODYtNjQgY29yZS1pbWFnZS1zYXRvIGV4dDQiCisgICAgZWNobyAiICAkTVlOQU1FIHBhdGgvdG8vYnpJbWFnZS1xZW11eDg2LmJpbiBwYXRoL3RvL25mc3Jvb3RkaXIvIHNlcmlhbCIKKyAgICBlY2hvICIgICRNWU5BTUUgcWVtdXg4NiByYW1mcyIKKyAgICBlY2hvICIgICRNWU5BTUUgcWVtdXg4NiBpc28iCisgICAgZWNobyAiICAkTVlOQU1FIHFlbXV4ODYgcWVtdXBhcmFtcz1cIi1tIDI1NlwiIgorICAgIGVjaG8gIiAgJE1ZTkFNRSBxZW11eDg2IGJvb3RwYXJhbXM9XCJwc3BsYXNoPWZhbHNlXCIiCisgICAgZWNobyAiICAkTVlOQU1FIHBhdGgvdG8vPGltYWdlPi08bWFjaGluZT4udm1kayIKKyAgICBleGl0IDEKK30KKworaWYgWyAieCQxIiA9ICJ4IiBdOyB0aGVuCisgICAgdXNhZ2UKK2ZpCisKK2Vycm9yKCkgeworICAgIGVjaG8gIkVycm9yOiAiJCoKKyAgICB1c2FnZQorfQorCitNQUNISU5FPSR7TUFDSElORTo9IiJ9CitLRVJORUw9JHtLRVJORUw6PSIifQorUk9PVEZTPSR7Uk9PVEZTOj0iIn0KK1ZNPSR7Vk06PSIifQorRlNUWVBFPSR7RlNUWVBFOj0iIn0KK0xBWllfUk9PVEZTPSIiCitTQ1JJUFRfUUVNVV9PUFQ9IiIKK1NDUklQVF9RRU1VX0VYVFJBX09QVD0iIgorU0NSSVBUX0tFUk5FTF9PUFQ9IiIKK1NFUklBTFNURElPPSIiCitUQ1BTRVJJQUxfUE9SVE5VTT0iIgorS1ZNX0VOQUJMRUQ9Im5vIgorS1ZNX0FDVElWRT0ibm8iCisKKyMgRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGZpbGUgaXMgYSBrZXJuZWwgb3IgUUVNVSBpbWFnZSwgYW5kIHNldCB0aGUKKyMgYXBwcm9wcmlhdGUgdmFyaWFibGVzCitwcm9jZXNzX2ZpbGVuYW1lKCkgeworICAgIGZpbGVuYW1lPSQxCisKKyAgICAjIEV4dHJhY3QgdGhlIGZpbGVuYW1lIGV4dGVuc2lvbgorICAgIEVYVD1gZWNobyAkZmlsZW5hbWUgfCBhd2sgLUYgLiAneyBwcmludCBcJE5GIH0nYAorICAgIGNhc2UgLyRFWFQvIGluCisJL2Jpbi8pCisJCSMgQSBmaWxlIGVuZGluZyBpbiAuYmluIGlzIGEga2VybmVsCisJCVsgLXogIiRLRVJORUwiIF0gJiYgS0VSTkVMPSRmaWxlbmFtZSB8fCBcCisJCSAgICBlcnJvciAiY29uZmxpY3RpbmcgS0VSTkVMIGFyZ3MgWyRLRVJORUxdIGFuZCBbJGZpbGVuYW1lXSIKKwkJOzsKKwkvZXh0WzIzNF0vfC9qZmZzMi98L2J0cmZzLykKKwkJIyBBIGZpbGUgZW5kaW5nIGluIGEgc3VwcG9ydHRlZCBmcyB0eXBlIGlzIGEgcm9vdGZzIGltYWdlCisJCWlmIFsgLXogIiRGU1RZUEUiIC1vICIkRlNUWVBFIiA9ICIkRVhUIiBdOyB0aGVuCisJCSAgICBGU1RZUEU9JEVYVAorCQkgICAgUk9PVEZTPSRmaWxlbmFtZQorCQllbHNlCisJCSAgICBlcnJvciAiY29uZmxpY3RpbmcgRlNUWVBFIHR5cGVzIFskRlNUWVBFXSBhbmQgWyRFWFRdIgorCQlmaQorCQk7OworCS9oZGRpbWcvfC9oZGRkaXJlY3QvfC92bWRrLykKKwkJRlNUWVBFPSRFWFQKKwkJVk09JGZpbGVuYW1lCisJCTs7CisJKikKKwkJZXJyb3IgInVua25vd24gZmlsZSBhcmcgWyRmaWxlbmFtZV0iCisJCTs7CisgICAgZXNhYworfQorCisjIFBhcnNlIGNvbW1hbmQgbGluZSBhcmdzIHdpdGhvdXQgcmVxdWlyaW5nIHNwZWNpZmljIG9yZGVyaW5nLiBJdCdzIGEKKyMgYml0IG1vcmUgY29tcGxleCwgYnV0IG9mZmVycyBhIGdyZWF0IHVzZXIgZXhwZXJpZW5jZS4KK3doaWxlIHRydWU7IGRvCisgICAgYXJnPSR7MX0KKyAgICBjYXNlICIkYXJnIiBpbgorICAgICAgICAicWVtdXg4NiIgfCAicWVtdXg4Ni02NCIgfCAicWVtdWFybSIgfCAicWVtdWFybTY0IiB8ICJxZW11bWlwcyIgfCAicWVtdW1pcHNlbCIgfCBcCisgICAgICAgICJxZW11bWlwczY0IiB8ICJxZW11c2g0IiAgfCAicWVtdXBwYyIgfCAicWVtdW1pY3JvYmxhemUiIHwgInFlbXV6eW5xIikKKyAgICAgICAgICAgIFsgLXogIiRNQUNISU5FIiBdICYmIE1BQ0hJTkU9JGFyZyB8fCBcCisgICAgICAgICAgICAgICAgZXJyb3IgImNvbmZsaWN0aW5nIE1BQ0hJTkUgdHlwZXMgWyRNQUNISU5FXSBhbmQgWyRhcmddIgorICAgICAgICAgICAgOzsKKyAgICAgICAgImV4dDIiIHwgImV4dDMiIHwgImV4dDQiIHwgImpmZnMyIiB8ICJuZnMiIHwgImJ0cmZzIiB8ICJoZGRpbWciIHwgImhkZGRpcmVjdCIgKQorICAgICAgICAgICAgWyAteiAiJEZTVFlQRSIgLW8gIiRGU1RZUEUiID0gIiRhcmciIF0gJiYgRlNUWVBFPSRhcmcgfHwgXAorICAgICAgICAgICAgICAgIGVycm9yICJjb25mbGljdGluZyBGU1RZUEUgdHlwZXMgWyRGU1RZUEVdIGFuZCBbJGFyZ10iCisgICAgICAgICAgICA7OworICAgICAgICAicmFtZnMiKQorICAgICAgICAgICAgRlNUWVBFPWNwaW8uZ3oKKyAgICAgICAgICAgIFJBTUZTPXRydWUKKyAgICAgICAgICAgIDs7CisgICAgICAgICJpc28iKQorCSAgICBGU1RZUEU9aXNvCisJICAgIElTT0ZTPXRydWUKKwkgICAgOzsKKyAgICAgICAgIm5vZ3JhcGhpYyIpCisgICAgICAgICAgICBTQ1JJUFRfUUVNVV9PUFQ9IiRTQ1JJUFRfUUVNVV9PUFQgLW5vZ3JhcGhpYyIKKyAgICAgICAgICAgIFNDUklQVF9LRVJORUxfT1BUPSIkU0NSSVBUX0tFUk5FTF9PUFQgY29uc29sZT10dHlTMCIKKyAgICAgICAgICAgIDs7CisgICAgICAgICJzZXJpYWwiKQorICAgICAgICAgICAgU0NSSVBUX1FFTVVfT1BUPSIkU0NSSVBUX1FFTVVfT1BUIC1zZXJpYWwgc3RkaW8iCisgICAgICAgICAgICBTQ1JJUFRfS0VSTkVMX09QVD0iJFNDUklQVF9LRVJORUxfT1BUIGNvbnNvbGU9dHR5UzAiCisgICAgICAgICAgICBTRVJJQUxTVERJTz0iMSIKKyAgICAgICAgICAgIDs7CisgICAgICAgICJ0Y3BzZXJpYWw9IiopCisgICAgICAgICAgICBUQ1BTRVJJQUxfUE9SVE5VTT0ke2FyZyMjdGNwc2VyaWFsPX0KKyAgICAgICAgICAgIDs7CisJImJpb3NkaXI9IiopCisgICAgICAgICAgICBDVVNUT01CSU9TRElSPSIke2FyZyMjYmlvc2Rpcj19IgorCSAgICA7OworICAgICAgICAiYmlvc2ZpbGVuYW1lPSIqKQorICAgICAgICAgICAgU0NSSVBUX1FFTVVfT1BUPSIkU0NSSVBUX1FFTVVfT1BUIC1iaW9zICR7YXJnIyNiaW9zZmlsZW5hbWU9fSIKKyAgICAgICAgICAgIDs7CisgICAgICAgICJxZW11cGFyYW1zPSIqKQorICAgICAgICAgICAgU0NSSVBUX1FFTVVfRVhUUkFfT1BUPSIke2FyZyMjcWVtdXBhcmFtcz19IgorCisgICAgICAgICAgICAjIFdhcm4gdXNlciBpZiB0aGV5IHRyeSB0byBzcGVjaWZ5IHNlcmlhbCBvciBrdm0gb3B0aW9ucworICAgICAgICAgICAgIyB0byB1c2Ugc2ltcGxpZmllZCBvcHRpb25zIGluc3RlYWQKKyAgICAgICAgICAgIHNlcmlhbF9vcHRpb249YGV4cHIgIiRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQiIDogJy4qXCgtc2VyaWFsXCknYAorICAgICAgICAgICAga3ZtX29wdGlvbj1gZXhwciAiJFNDUklQVF9RRU1VX0VYVFJBX09QVCIgOiAnLipcKC1lbmFibGUta3ZtXCknYAorICAgICAgICAgICAgdmdhX29wdGlvbj1gZXhwciAiJFNDUklQVF9RRU1VX0VYVFJBX09QVCIgOiAnLipcKC12Z2FcKSdgCisgICAgICAgICAgICBbICEgLXogIiRzZXJpYWxfb3B0aW9uIiAtbyAhIC16ICIka3ZtX29wdGlvbiIgXSAmJiBcCisgICAgICAgICAgICAgICAgZWNobyAiUGxlYXNlIHVzZSBzaW1wbGlmaWVkIHNlcmlhbCBvciBrdm0gb3B0aW9ucyBpbnN0ZWFkIgorICAgICAgICAgICAgOzsKKyAgICAgICAgImJvb3RwYXJhbXM9IiopCisgICAgICAgICAgICBTQ1JJUFRfS0VSTkVMX09QVD0iJFNDUklQVF9LRVJORUxfT1BUICR7YXJnIyNib290cGFyYW1zPX0iCisgICAgICAgICAgICA7OworICAgICAgICAiYXVkaW8iKQorICAgICAgICAgICAgaWYgWyAieCRNQUNISU5FIiA9ICJ4cWVtdXg4NiIgLW8gIngkTUFDSElORSIgPSAieHFlbXV4ODYtNjQiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICJFbmFibGluZyBhdWRpbyBpbiBxZW11LiIKKyAgICAgICAgICAgICAgICBlY2hvICJQbGVhc2UgaW5zdGFsbCBzbmRfaW50ZWw4eDAgb3Igc25kX2VuczEzNzAgZHJpdmVyIGluIGxpbnV4IGd1ZXN0LiIKKyAgICAgICAgICAgICAgICBRRU1VX0FVRElPX0RSVj0iYWxzYSIKKyAgICAgICAgICAgICAgICBTQ1JJUFRfUUVNVV9PUFQ9IiRTQ1JJUFRfUUVNVV9PUFQgLXNvdW5kaHcgYWM5NyxlczEzNzAiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICAgICAgImt2bSIpCisgICAgICAgICAgICBLVk1fRU5BQkxFRD0ieWVzIgorICAgICAgICAgICAgS1ZNX0NBUEFCTEU9YGdyZXAgLXEgJ3ZteFx8c3ZtJyAvcHJvYy9jcHVpbmZvICYmIGVjaG8gMWAKKyAgICAgICAgICAgIDs7CisgICAgICAgICJzbGlycCIpCisgICAgICAgICAgICBTTElSUF9FTkFCTEVEPSJ5ZXMiCisgICAgICAgICAgICA7OworICAgICAgICAicHVibGljdm5jIikKKyAgICAgICAgICAgIFNDUklQVF9RRU1VX09QVD0iJFNDUklQVF9RRU1VX09QVCAtdm5jIDAuMC4wLjA6MCIKKyAgICAgICAgICAgIDs7CisgICAgICAgICotaW1hZ2UqKQorICAgICAgICAgICAgWyAteiAiJFJPT1RGUyIgXSB8fCBcCisJCWVycm9yICJjb25mbGljdGluZyBST09URlMgYXJncyBbJFJPT1RGU10gYW5kIFskYXJnXSIKKyAgICAgICAgICAgIGlmIFsgLWYgIiRhcmciIF07IHRoZW4KKyAgICAgICAgICAgICAgICBwcm9jZXNzX2ZpbGVuYW1lICRhcmcKKyAgICAgICAgICAgIGVsaWYgWyAtZCAiJGFyZyIgXTsgdGhlbgorICAgICAgICAgICAgICAgICMgSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBuZnNyb290IGRpciBoYXMgLWltYWdlLQorICAgICAgICAgICAgICAgICMgaW4gdGhlIHBhdGhuYW1lCisgICAgICAgICAgICAgICAgZWNobyAiQXNzdW1pbmcgJGFyZyBpcyBhbiBuZnMgcm9vdGZzIgorICAgICAgICAgICAgICAgIEZTVFlQRT1uZnMKKyAgICAgICAgICAgICAgICBST09URlM9JGFyZworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFJPT1RGUz0kYXJnCisgICAgICAgICAgICAgICAgTEFaWV9ST09URlM9InRydWUiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICAgICAgIiIpIGJyZWFrIDs7CisgICAgICAgICopCisgICAgICAgICAgICAjIEEgZGlyZWN0b3J5IG5hbWUgaXMgYW4gbmZzIHJvb3RmcworICAgICAgICAgICAgaWYgWyAtZCAiJGFyZyIgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gIkFzc3VtaW5nICRhcmcgaXMgYW4gbmZzIHJvb3RmcyIKKyAgICAgICAgICAgICAgICBpZiBbIC16ICIkRlNUWVBFIiAtbyAiJEZTVFlQRSIgPSAibmZzIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIEZTVFlQRT1uZnMKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGVycm9yICJjb25mbGljdGluZyBGU1RZUEUgdHlwZXMgWyRhcmddIGFuZCBuZnMiCisgICAgICAgICAgICAgICAgZmkKKworICAgICAgICAgICAgICAgIGlmIFsgLXogIiRST09URlMiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgUk9PVEZTPSRhcmcKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGVycm9yICJjb25mbGljdGluZyBST09URlMgYXJncyBbJFJPT1RGU10gYW5kIFskYXJnXSIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZWxpZiBbIC1mICIkYXJnIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgcHJvY2Vzc19maWxlbmFtZSAkYXJnCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZXJyb3IgInVuYWJsZSB0byBjbGFzc2lmeSBhcmcgWyRhcmddIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworICAgIHNoaWZ0Citkb25lCisKK2lmIFsgISAtYyAvZGV2L25ldC90dW4gXSA7IHRoZW4KKwllY2hvICJUVU4gY29udHJvbCBkZXZpY2UgL2Rldi9uZXQvdHVuIGlzIHVuYXZhaWxhYmxlOyB5b3UgbWF5IG5lZWQgdG8gZW5hYmxlIFRVTiAoZS5nLiBzdWRvIG1vZHByb2JlIHR1bikiCisJZXhpdCAxCitlbGlmIFsgISAtdyAvZGV2L25ldC90dW4gXSA7IHRoZW4KKwllY2hvICJUVU4gY29udHJvbCBkZXZpY2UgL2Rldi9uZXQvdHVuIGlzIG5vdCB3cml0YWJsZSwgcGxlYXNlIGZpeCAoZS5nLiBzdWRvIGNobW9kIDY2NiAvZGV2L25ldC90dW4pIgorCWV4aXQgMQorZmkKKworIyBSZXBvcnQgZXJyb3JzIGZvciBtaXNzaW5nIGNvbWJpbmF0aW9ucyBvZiBvcHRpb25zCitpZiBbIC16ICIkTUFDSElORSIgLWEgLXogIiRLRVJORUwiIC1hIC16ICIkVk0iIF07IHRoZW4KKyAgICBlcnJvciAieW91IG11c3Qgc3BlY2lmeSBhdCBsZWFzdCBhIE1BQ0hJTkUsIFZNLCBvciBLRVJORUwgYXJndW1lbnQiCitmaQoraWYgWyAiJEZTVFlQRSIgPSAibmZzIiAtYSAteiAiJFJPT1RGUyIgXTsgdGhlbgorICAgIGVycm9yICJORlMgYm9vdGluZyB3aXRob3V0IGFuIGV4cGxpY2l0IFJPT1RGUyBwYXRoIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIgorZmkKKworaWYgWyAteiAiJE1BQ0hJTkUiIF07IHRoZW4KKyAgICBpZiBbICJ4JEZTVFlQRSIgPSAieHZtZGsiIF0gfHwgWyAieCRGU1RZUEUiID0gInhoZGRpbWciIF0gfHwgWyAieCRGU1RZUEUiID0gInhoZGRkaXJlY3QiIF07IHRoZW4KKyAgICAgICAgTUFDSElORT1gYmFzZW5hbWUgJFZNIHwgc2VkIC1uICdzLy4qXChxZW11eDg2LTY0XHxxZW11eDg2XHxxZW11YXJtNjRcfHFlbXVhcm1cfHFlbXVtaXBzNjRcfHFlbXVtaXBzXHxxZW11cHBjXHxxZW11c2g0XCkuKi9cMS9wJ2AKKyAgICAgICAgaWYgWyAteiAiJE1BQ0hJTkUiIF07IHRoZW4KKyAgICAgICAgICAgIGVycm9yICJVbmFibGUgdG8gc2V0IE1BQ0hJTkUgZnJvbSBpbWFnZSBmaWxlbmFtZSBbJFZNXSIKKyAgICAgICAgZmkKKyAgICAgICAgZWNobyAiU2V0IE1BQ0hJTkUgdG8gWyRNQUNISU5FXSBiYXNlZCBvbiBpbWFnZSBbJFZNXSIKKyAgICBlbHNlCisgICAgICAgIE1BQ0hJTkU9YGJhc2VuYW1lICRLRVJORUwgfCBzZWQgLW4gJ3MvLipcKHFlbXV4ODYtNjRcfHFlbXV4ODZcfHFlbXVhcm02NFx8cWVtdWFybVx8cWVtdW1pcHM2NFx8cWVtdW1pcHNcfHFlbXVwcGNcfHFlbXVzaDRcKS4qL1wxL3AnYAorICAgICAgICBpZiBbIC16ICIkTUFDSElORSIgXTsgdGhlbgorICAgICAgICAgICAgZXJyb3IgIlVuYWJsZSB0byBzZXQgTUFDSElORSBmcm9tIGtlcm5lbCBmaWxlbmFtZSBbJEtFUk5FTF0iCisgICAgICAgIGZpCisgICAgICAgIGVjaG8gIlNldCBNQUNISU5FIHRvIFskTUFDSElORV0gYmFzZWQgb24ga2VybmVsIFskS0VSTkVMXSIKKyAgICBmaQorZmkKKworWU9DVE9fS1ZNX1dJS0k9Imh0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvSG93X3RvX2VuYWJsZV9LVk1fZm9yX1Bva3lfcWVtdSIKK1lPQ1RPX1BBUkFWSVJUX0tWTV9XSUtJPSJodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL1J1bm5pbmdfYW5feDg2X1lvY3RvX0xpbnV4X2ltYWdlX3VuZGVyX1FFTVVfS1ZNIgorIyBEZXRlY3QgS1ZNIGNvbmZpZ3VyYXRpb24KK2lmIFsgIngkS1ZNX0VOQUJMRUQiID0gInh5ZXMiIF07IHRoZW4KKyAgICBpZiBbIC16ICIkS1ZNX0NBUEFCTEUiIF07IHRoZW4KKyAgICAgICAgZWNobyAiWW91IGFyZSB0cnlpbmcgdG8gZW5hYmxlIEtWTSBvbiBhIGNwdSB3aXRob3V0IFZUIHN1cHBvcnQuIgorICAgICAgICBlY2hvICJSZW1vdmUga3ZtIGZyb20gdGhlIGNvbW1hbmQtbGluZSwgb3IgcmVmZXIiCisgICAgICAgIGVjaG8gIiRZT0NUT19LVk1fV0lLSSI7CisgICAgICAgIGV4aXQgMTsKKyAgICBmaQorICAgIGlmIFsgIngkTUFDSElORSIgIT0gInhxZW11eDg2IiAtYSAieCRNQUNISU5FIiAhPSAieHFlbXV4ODYtNjQiIF07IHRoZW4KKyAgICAgICAgZWNobyAiS1ZNIG9ubHkgc3VwcG9ydCB4ODYgJiB4ODYtNjQuIFJlbW92ZSBrdm0gZnJvbSB0aGUgY29tbWFuZC1saW5lIjsKKyAgICAgICAgZXhpdCAxOworICAgIGZpCisgICAgaWYgWyAhIC1lIC9kZXYva3ZtIF07IHRoZW4KKyAgICAgICAgZWNobyAiTWlzc2luZyBLVk0gZGV2aWNlLiBIYXZlIHlvdSBpbnNlcnRlZCBrdm0gbW9kdWxlcz8iCisgICAgICAgIGVjaG8gIkZvciBmdXJ0aGVyIGhlbHAgc2VlOiIKKyAgICAgICAgZWNobyAiJFlPQ1RPX0tWTV9XSUtJIjsKKyAgICAgICAgZXhpdCAxOworICAgIGZpCisgICAgaWYgWyAhIC1lIC9kZXYvdmhvc3QtbmV0IF07IHRoZW4KKyAgICAgICAgZWNobyAiTWlzc2luZyB2aXJ0aW8gbmV0IGRldmljZS4gSGF2ZSB5b3UgaW5zZXJ0ZWQgdmhvc3QtbmV0IG1vZHVsZT8iCisgICAgICAgIGVjaG8gIkZvciBmdXJ0aGVyIGhlbHAgc2VlOiIKKyAgICAgICAgZWNobyAiJFlPQ1RPX1BBUkFWSVJUX0tWTV9XSUtJIjsKKyAgICAgICAgZXhpdCAxOworICAgIGZpCisgICAgaWYgWyAtdyAvZGV2L2t2bSAtYSAtciAvZGV2L2t2bSBdOyB0aGVuCisgICAgICAgIFNDUklQVF9RRU1VX09QVD0iJFNDUklQVF9RRU1VX09QVCAtZW5hYmxlLWt2bSIKKyAgICAgICAgS1ZNX0FDVElWRT0ieWVzIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiWW91IGhhdmUgbm8gcmlnaHRzIG9uIC9kZXYva3ZtLiIKKyAgICAgICAgZWNobyAiUGxlYXNlIGNoYW5nZSB0aGUgb3duZXJzaGlwIG9mIHRoaXMgZmlsZSBhcyBkZXNjcmliZWQgYXQ6IgorICAgICAgICBlY2hvICIkWU9DVE9fS1ZNX1dJS0kiOworICAgICAgICBleGl0IDE7CisgICAgZmkKKyAgICBpZiBbICEgLXcgL2Rldi92aG9zdC1uZXQgLW8gISAtciAvZGV2L3Zob3N0LW5ldCBdOyB0aGVuCisJaWYgWyAiJFNMSVJQX0VOQUJMRUQiICE9ICJ5ZXMiIF0gOyB0aGVuCisgICAgICAgICAgICBlY2hvICJZb3UgaGF2ZSBubyByaWdodHMgb24gL2Rldi92aG9zdC1uZXQuIgorICAgICAgICAgICAgZWNobyAiUGxlYXNlIGNoYW5nZSB0aGUgb3duZXJzaGlwIG9mIHRoaXMgZmlsZSBhcyBkZXNjcmliZWQgYXQ6IgorICAgICAgICAgICAgZWNobyAiJFlPQ1RPX1BBUkFWSVJUX0tWTV9XSUtJIjsKKyAgICAgICAgICAgIGV4aXQgMTsKKwlmaQorICAgIGZpCitmaQorCittYWNoaW5lMj1gZWNobyAkTUFDSElORSB8IHRyICdhLXonICdBLVonIHwgc2VkICdzLy0vXy8nYAorIyBNQUNISU5FIGlzIG5vdyBzZXQgZm9yIGFsbCBjYXNlcworCisjIERlZmF1bHRzIHVzZWQgd2hlbiB0aGVzZSB2YXJzIG5lZWQgdG8gYmUgaW5mZXJyZWQKK1FFTVVYODZfREVGQVVMVF9LRVJORUw9YnpJbWFnZS1xZW11eDg2LmJpbgorUUVNVVg4Nl9ERUZBVUxUX0ZTVFlQRT1leHQ0CisKK1FFTVVYODZfNjRfREVGQVVMVF9LRVJORUw9YnpJbWFnZS1xZW11eDg2LTY0LmJpbgorUUVNVVg4Nl82NF9ERUZBVUxUX0ZTVFlQRT1leHQ0CisKK1FFTVVBUk1fREVGQVVMVF9LRVJORUw9ekltYWdlLXFlbXVhcm0uYmluCitRRU1VQVJNX0RFRkFVTFRfRlNUWVBFPWV4dDQKKworUUVNVUFSTTY0X0RFRkFVTFRfS0VSTkVMPUltYWdlLXFlbXVhcm02NC5iaW4KK1FFTVVBUk02NF9ERUZBVUxUX0ZTVFlQRT1leHQ0CisKK1FFTVVNSVBTX0RFRkFVTFRfS0VSTkVMPXZtbGludXgtcWVtdW1pcHMuYmluCitRRU1VTUlQU19ERUZBVUxUX0ZTVFlQRT1leHQ0CisKK1FFTVVNSVBTRUxfREVGQVVMVF9LRVJORUw9dm1saW51eC1xZW11bWlwc2VsLmJpbgorUUVNVU1JUFNFTF9ERUZBVUxUX0ZTVFlQRT1leHQ0CisKK1FFTVVNSVBTNjRfREVGQVVMVF9LRVJORUw9dm1saW51eC1xZW11bWlwczY0LmJpbgorUUVNVU1JUFM2NF9ERUZBVUxUX0ZTVFlQRT1leHQ0CisKK1FFTVVTSDRfREVGQVVMVF9LRVJORUw9dm1saW51eC1xZW11bWlwcy5iaW4KK1FFTVVTSDRfREVGQVVMVF9GU1RZUEU9ZXh0NAorCitRRU1VUFBDX0RFRkFVTFRfS0VSTkVMPXZtbGludXgtcWVtdXBwYy5iaW4KK1FFTVVQUENfREVGQVVMVF9GU1RZUEU9ZXh0NAorCitRRU1VTUlDUk9CTEFaRV9ERUZBVUxUX0tFUk5FTD1saW51eC5iaW4udWIKK1FFTVVNSUNST0JMQVpFX0RFRkFVTFRfRlNUWVBFPWNwaW8KKworUUVNVVpZTlFfREVGQVVMVF9LRVJORUw9dUltYWdlCitRRU1VWllOUV9ERUZBVUxUX0ZTVFlQRT1jcGlvCisKK0FLSVRBX0RFRkFVTFRfS0VSTkVMPXpJbWFnZS1ha2l0YS5iaW4KK0FLSVRBX0RFRkFVTFRfRlNUWVBFPWpmZnMyCisKK1NQSVRaX0RFRkFVTFRfS0VSTkVMPXpJbWFnZS1zcGl0ei5iaW4KK1NQSVRaX0RFRkFVTFRfRlNUWVBFPWV4dDMKKworc2V0dXBfcGF0aF92YXJzKCkgeworICAgIGlmIFsgLXogIiRPRV9UTVBESVIiIF0gOyB0aGVuCisgICAgICAgIFBBVEhTX1JFUVVJUkVEPXRydWUKKyAgICBlbGlmIFsgIiQxIiA9ICIxIiAtYSAteiAiJERFUExPWV9ESVJfSU1BR0UiIF0gOyB0aGVuCisgICAgICAgIFBBVEhTX1JFUVVJUkVEPXRydWUKKyAgICBlbHNlCisgICAgICAgIFBBVEhTX1JFUVVJUkVEPWZhbHNlCisgICAgZmkKKworICAgIGlmIFsgIiRQQVRIU19SRVFVSVJFRCIgPSAidHJ1ZSIgXTsgdGhlbgorICAgICAgICAjIFRyeSB0byBnZXQgdGhlIHZhcmlhYmxlIHZhbHVlcyBmcm9tIGJpdGJha2UKKyAgICAgICAgdHlwZSAtUCBiaXRiYWtlICY+L2Rldi9udWxsIHx8IHsKKyAgICAgICAgICAgIGVjaG8gIkluIG9yZGVyIGZvciB0aGlzIHNjcmlwdCB0byBkeW5hbWljYWxseSBpbmZlciBwYXRocyI7CisgICAgICAgICAgICBlY2hvICJ0byBrZXJuZWxzIG9yIGZpbGVzeXN0ZW0gaW1hZ2VzLCB5b3UgZWl0aGVyIG5lZWQiOworICAgICAgICAgICAgZWNobyAiYml0YmFrZSBpbiB5b3VyIFBBVEggb3IgdG8gc291cmNlIG9lLWluaXQtYnVpbGQtZW52IjsKKyAgICAgICAgICAgIGVjaG8gImJlZm9yZSBydW5uaW5nIHRoaXMgc2NyaXB0IiA+JjI7CisgICAgICAgICAgICBleGl0IDE7IH0KKworICAgICAgICAjIFdlIGhhdmUgYml0YmFrZSBpbiBQQVRILCBnZXQgdGhlIHZhcmlhYmxlIHZhbHVlcyBmcm9tIGJpdGJha2UKKyAgICAgICAgQklUQkFLRV9FTlZfVE1QRklMRT1gbWt0ZW1wIC0tdG1wZGlyIHJ1bnFlbXUuWFhYWFhYWFhYWGAKKyAgICAgICAgaWYgWyAiJD8iICE9ICIwIiBdIDsgdGhlbgorICAgICAgICAgICAgZWNobyAiRXJyb3I6IG1rdGVtcCBmYWlsZWQgZm9yIGJpdGJha2UgZW52aXJvbm1lbnQgb3V0cHV0IgorICAgICAgICAgICAgZXhpdCAxCisgICAgICAgIGZpCisKKyAgICAgICAgTUFDSElORT0kTUFDSElORSBiaXRiYWtlIC1lID4gJEJJVEJBS0VfRU5WX1RNUEZJTEUKKyAgICAgICAgaWYgWyAteiAiJE9FX1RNUERJUiIgXSA7IHRoZW4KKyAgICAgICAgICAgIE9FX1RNUERJUj1gc2VkIC1uICdzL15UTVBESVI9XCJcKC4qXClcIi9cMS9wJyAkQklUQkFLRV9FTlZfVE1QRklMRWAKKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAteiAiJERFUExPWV9ESVJfSU1BR0UiIF0gOyB0aGVuCisgICAgICAgICAgICBERVBMT1lfRElSX0lNQUdFPWBzZWQgLW4gJ3MvXkRFUExPWV9ESVJfSU1BR0U9XCJcKC4qXClcIi9cMS9wJyAkQklUQkFLRV9FTlZfVE1QRklMRWAKKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAteiAiJE9FX1RNUERJUiIgXTsgdGhlbgorICAgICAgICAgICAgIyBDaGVjayBmb3IgZXJyb3JzIGZyb20gYml0YmFrZSB0aGF0IHRoZSB1c2VyIG5lZWRzIHRvIGtub3cgYWJvdXQKKyAgICAgICAgICAgIEJJVEJBS0VfT1VUUFVUPWBjYXQgJEJJVEJBS0VfRU5WX1RNUEZJTEUgfCB3YyAtbGAKKyAgICAgICAgICAgIGlmIFsgIiRCSVRCQUtFX09VVFBVVCIgLWVxICIwIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiRXJyb3I6IHRoaXMgc2NyaXB0IG5lZWRzIHRvIGJlIHJ1biBmcm9tIHlvdXIgYnVpbGQgZGlyZWN0b3J5LCBvciB5b3UgbmVlZCIKKyAgICAgICAgICAgICAgICBlY2hvICJ0byBleHBsaWNpdGx5IHNldCBPRV9UTVBESVIgYW5kIERFUExPWV9ESVJfSU1BR0UgaW4geW91ciBlbnZpcm9ubWVudCIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlY2hvICJUaGVyZSB3YXMgYW4gZXJyb3IgcnVubmluZyBiaXRiYWtlIHRvIGRldGVybWluZSBUTVBESVIiCisgICAgICAgICAgICAgICAgZWNobyAiSGVyZSBpcyB0aGUgb3V0cHV0IGZyb20gJ2JpdGJha2UgLWUnOiIKKyAgICAgICAgICAgICAgICBjYXQgJEJJVEJBS0VfRU5WX1RNUEZJTEUKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBybSAkQklUQkFLRV9FTlZfVE1QRklMRQorICAgICAgICAgICAgZXhpdCAxCisgICAgICAgIGZpCisgICAgICAgIHJtICRCSVRCQUtFX0VOVl9UTVBGSUxFCisgICAgZmkKK30KKworc2V0dXBfc3lzcm9vdCgpIHsKKyAgICAjIFRvb2xjaGFpbiBpbnN0YWxscyBzZXQgdXAgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVCBpbiB0aGVpcgorICAgICMgZW52aXJvbm1lbnQgc2NyaXB0LiBJZiB0aGF0IHZhcmlhYmxlIGlzbid0IHNldCwgd2UncmUKKyAgICAjIGVpdGhlciBpbiBhbiBpbi10cmVlIGJ1aWxkIHNjZW5hcmlvIG9yIHRoZSBlbnZpcm9ubWVudAorICAgICMgc2NyaXB0IHdhc24ndCBzb3VyY2UnZC4KKyAgICBpZiBbIC16ICIkT0VDT1JFX05BVElWRV9TWVNST09UIiBdOyB0aGVuCisgICAgICAgIHNldHVwX3BhdGhfdmFycworICAgICAgICBCVUlMRF9BUkNIPWB1bmFtZSAtbWAKKyAgICAgICAgQlVJTERfT1M9YHVuYW1lIHwgdHIgJ1tBLVpdJyAnW2Etel0nYAorICAgICAgICBCVUlMRF9TWVM9IiRCVUlMRF9BUkNILSRCVUlMRF9PUyIKKworICAgICAgICBPRUNPUkVfTkFUSVZFX1NZU1JPT1Q9JE9FX1RNUERJUi9zeXNyb290cy8kQlVJTERfU1lTCisgICAgZmkgCisKKyAgICAjIFNvbWUgcmVjaXBlcyBzdG9yZSB0aGUgQklPUyB1bmRlciAkT0VfVE1QRElSL3N5c3Jvb3RzLyRNQUNISU5FLAorICAgICMgbm93IGRlZmluZWQgYXMgT0VDT1JFX01BQ0hJTkVfU1lTUk9PVC4gVGhlIGxhdHRlciBpcyB1c2VkIHdoZW4gc2VhcmNoaW5nCisgICAgIyBCSU9TLCBWR0EgQklPUyBhbmQga2V5bWFwcy4KKyAgICBpZiBbIC16ICIkT0VDT1JFX01BQ0hJTkVfU1lTUk9PVCIgXTsgdGhlbgorICAgICAgICBPRUNPUkVfTUFDSElORV9TWVNST09UPSRPRV9UTVBESVIvc3lzcm9vdHMvJE1BQ0hJTkUKKyAgICBmaQorfQorCisjIExvY2F0ZSBhIHJvb3RmcyBpbWFnZSB0byBib290IHdoaWNoIG1hdGNoZXMgb3VyIGV4cGVjdGVkCisjIG1hY2hpbmUgYW5kIGZzdHlwZS4gCitmaW5kaW1hZ2UoKSB7CisgICAgd2hlcmU9JDEKKyAgICBtYWNoaW5lPSQyCisgICAgZXh0ZW5zaW9uPSQzCisKKyAgICAjIFNvcnQgcm9vdGZzIGNhbmRpZGF0ZXMgYnkgbW9kaWZpY2F0aW9uIHRpbWUgLSB0aGUgbW9zdAorICAgICMgcmVjZW50bHkgY3JlYXRlZCBvbmUgaXMgdGhlIG9uZSB3ZSBtb3N0IGxpa2VseSB3YW50IHRvIGJvb3QuCisgICAgZmlsZW5hbWU9YGxzIC10MSAkd2hlcmUvKi1pbWFnZSokbWFjaGluZS4kZXh0ZW5zaW9uIDI+L2Rldi9udWxsIHwgaGVhZCAtbjFgCisgICAgaWYgWyAieCRmaWxlbmFtZSIgIT0gIngiIF07IHRoZW4KKyAgICAgICAgUk9PVEZTPSRmaWxlbmFtZQorICAgICAgICByZXR1cm4KKyAgICBmaQorCisgICAgZWNobyAiQ291bGRuJ3QgZmluZCBhICRtYWNoaW5lIHJvb3RmcyBpbWFnZSBpbiAkd2hlcmUuIgorICAgIGV4aXQgMQorfQorCitpZiBbIC1lICIkUk9PVEZTIiAtYSAteiAiJEZTVFlQRSIgXTsgdGhlbgorICAgICMgRXh0cmFjdCB0aGUgZmlsZW5hbWUgZXh0ZW5zaW9uCisgICAgRVhUPWBlY2hvICRST09URlMgfCBhd2sgLUYgLiAneyBwcmludCBcJE5GIH0nYAorICAgIGlmIFsgIngkRVhUIiA9ICJ4ZXh0MiIgLW8gIngkRVhUIiA9ICJ4ZXh0MyIgLW8gXAorICAgICAgICAgICJ4JEVYVCIgPSAieGpmZnMyIiAtbyAieCRFWFQiID0gInhidHJmcyIgLW8gXAorICAgICAgICAgICJ4JEVYVCIgPSAieGV4dDQiIF07IHRoZW4KKyAgICAgICAgRlNUWVBFPSRFWFQKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIk5vdGU6IFVuYWJsZSB0byBkZXRlcm1pbmUgZmlsZXN5c3RlbSBleHRlbnNpb24gZm9yICRST09URlMiCisgICAgICAgIGVjaG8gIldlIHdpbGwgdXNlIHRoZSBkZWZhdWx0IEZTVFlQRSBmb3IgJE1BQ0hJTkUiCisgICAgICAgICMgLi4ud2hpY2ggaXMgZG9uZSBmdXJ0aGVyIGJlbG93Li4uCisgICAgZmkKK2ZpCisKK2lmIFsgLXogIiRLRVJORUwiIC1hICJ4JEZTVFlQRSIgIT0gInh2bWRrIiAtYSAieCRGU1RZUEUiICE9ICJ4aGRkaW1nIiAtYSAieCRGU1RZUEUiICE9ICJ4aGRkZGlyZWN0IiBdOyB0aGVuCisgICAgc2V0dXBfcGF0aF92YXJzIDEKKyAgICBldmFsIGtlcm5lbF9maWxlPVwkJHttYWNoaW5lMn1fREVGQVVMVF9LRVJORUwKKyAgICBLRVJORUw9JERFUExPWV9ESVJfSU1BR0UvJGtlcm5lbF9maWxlCisKKyAgICBpZiBbIC16ICIkS0VSTkVMIiBdOyB0aGVuCisgICAgICAgIGVycm9yICJVbmFibGUgdG8gZGV0ZXJtaW5lIGRlZmF1bHQga2VybmVsIGZvciBNQUNISU5FIFskTUFDSElORV0iCisgICAgZmkKK2ZpCisjIEtFUk5FTCBpcyBub3cgc2V0IGZvciBhbGwgY2FzZXMKKworaWYgWyAteiAiJEZTVFlQRSIgXTsgdGhlbgorICAgIGV2YWwgRlNUWVBFPVwkJHttYWNoaW5lMn1fREVGQVVMVF9GU1RZUEUKKworICAgIGlmIFsgLXogIiRGU1RZUEUiIF07IHRoZW4KKyAgICAgICAgZXJyb3IgIlVuYWJsZSB0byBkZXRlcm1pbmUgZGVmYXVsdCBmc3R5cGUgZm9yIE1BQ0hJTkUgWyRNQUNISU5FXSIKKyAgICBmaQorZmkKKworIyBGU1RZUEUgaXMgbm93IHNldCBmb3IgYWxsIGNhc2VzCisKKyMgSGFuZGxlIGNhc2VzIHdoZXJlIGEgUk9PVEZTIHR5cGUgaXMgZ2l2ZW4gaW5zdGVhZCBvZiBhIGZpbGVuYW1lLCBlLmcuCisjIGNvcmUtaW1hZ2Utc2F0bworaWYgWyAiJExBWllfUk9PVEZTIiA9ICJ0cnVlIiBdOyB0aGVuCisgICAgc2V0dXBfcGF0aF92YXJzIDEKKyAgICBlY2hvICJBc3N1bWluZyAkUk9PVEZTIHJlYWxseSBtZWFucyAkREVQTE9ZX0RJUl9JTUFHRS8kUk9PVEZTLSRNQUNISU5FLiRGU1RZUEUiCisgICAgaWYgWyAiJEZTVFlQRSIgPSAiaGRkaW1nIiAtbyAieCRGU1RZUEUiID0gInhoZGRkaXJlY3QiIF07IHRoZW4KKyAgICAgICAgVk09JERFUExPWV9ESVJfSU1BR0UvJFJPT1RGUy0kTUFDSElORS4kRlNUWVBFCisgICAgZWxzZQorICAgICAgICBST09URlM9JERFUExPWV9ESVJfSU1BR0UvJFJPT1RGUy0kTUFDSElORS4kRlNUWVBFCisgICAgZmkKK2ZpCisKK2lmIFsgLXogIiRST09URlMiIC1hICJ4JEZTVFlQRSIgIT0gInh2bWRrIiAtYSAieCRGU1RZUEUiICE9ICJ4aGRkaW1nIiAtYSAieCRGU1RZUEUiICE9ICJ4aGRkZGlyZWN0IiBdOyB0aGVuCisgICAgc2V0dXBfcGF0aF92YXJzIDEKKyAgICBUPSRERVBMT1lfRElSX0lNQUdFCisgICAgZXZhbCByb290ZnNfbGlzdD1cJCR7bWFjaGluZTJ9X0RFRkFVTFRfUk9PVEZTCisgICAgZmluZGltYWdlICRUICRNQUNISU5FICRGU1RZUEUKKworICAgIGlmIFsgLXogIiRST09URlMiIF07IHRoZW4KKyAgICAgICAgZXJyb3IgIlVuYWJsZSB0byBkZXRlcm1pbmUgZGVmYXVsdCByb290ZnMgZm9yIE1BQ0hJTkUgWyRNQUNISU5FXSIKKyAgICBmaQorZmkKKyMgUk9PVEZTIGlzIG5vdyBzZXQgZm9yIGFsbCBjYXNlcywgbm93IGV4cGFuZCBpdCB0byBiZSBhbiBhYnNvbHV0ZSBwYXRoLCBpdCBzaG91bGQgZXhpc3QgYXQgdGhpcyBwb2ludAorCitST09URlM9YHJlYWRsaW5rIC1mICRST09URlNgCisKK2VjaG8gIiIKK2VjaG8gIkNvbnRpbnVpbmcgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6IgoraWYgWyAieCRGU1RZUEUiICE9ICJ4dm1kayIgLWEgIngkRlNUWVBFIiAhPSAieGhkZGltZyIgLWEgIngkRlNUWVBFIiAhPSAieGhkZGRpcmVjdCIgXTsgdGhlbgorICAgIGVjaG8gIktFUk5FTDogWyRLRVJORUxdIgorICAgIGVjaG8gIlJPT1RGUzogWyRST09URlNdIgorZWxzZQorICAgIGVjaG8gIlZNREs6ICAgWyRWTV0iCitmaQorZWNobyAiRlNUWVBFOiBbJEZTVFlQRV0iCisKK3NldHVwX3N5c3Jvb3QKKyMgT0VDT1JFX05BVElWRV9TWVNST09UIGFuZCBPRUNPUkVfTUFDSElORV9TWVNST09UIGFyZSBub3cgc2V0IGZvciBhbGwgY2FzZXMKKworSU5URVJOQUxfU0NSSVBUPSIkMC1pbnRlcm5hbCIKK2lmIFsgISAtZiAiJElOVEVSTkFMX1NDUklQVCIgLW8gISAtciAiJElOVEVSTkFMX1NDUklQVCIgXTsgdGhlbgorSU5URVJOQUxfU0NSSVBUPWB3aGljaCBydW5xZW11LWludGVybmFsYAorZmkKKworIyBTcGVjaWZ5IGRpcmVjdG9yeSBmb3IgQklPUywgVkdBIEJJT1MgYW5kIGtleW1hcHMKK2lmIFsgISAteiAiJENVU1RPTUJJT1NESVIiIF07IHRoZW4KKyAgICBpZiBbIC1kICIkT0VDT1JFX05BVElWRV9TWVNST09ULyRDVVNUT01CSU9TRElSIiBdOyB0aGVuCisgICAgICAgIGVjaG8gIkFzc3VtaW5nIGJpb3NkaXIgaXMgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC8kQ1VTVE9NQklPU0RJUiIKKyAgICAgICAgU0NSSVBUX1FFTVVfT1BUPSIkU0NSSVBUX1FFTVVfT1BUIC1MICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvJENVU1RPTUJJT1NESVIiCisgICAgZWxpZiBbIC1kICIkT0VDT1JFX01BQ0hJTkVfU1lTUk9PVC8kQ1VTVE9NQklPU0RJUiIgXTsgdGhlbgorICAgICAgICBlY2hvICJBc3N1bWluZyBiaW9zZGlyIGlzICRPRUNPUkVfTUFDSElORV9TWVNST09ULyRDVVNUT01CSU9TRElSIgorICAgICAgICBTQ1JJUFRfUUVNVV9PUFQ9IiRTQ1JJUFRfUUVNVV9PUFQgLUwgJE9FQ09SRV9NQUNISU5FX1NZU1JPT1QvJENVU1RPTUJJT1NESVIiCisgICAgZWxzZQorICAgICAgICBpZiBbICEgLWQgIiRDVVNUT01CSU9TRElSIiBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICJDdXN0b20gQklPUyBkaXJlY3Rvcnkgbm90IGZvdW5kLiBUcmllZDogJENVU1RPTUJJT1NESVIiCisgICAgICAgICAgICBlY2hvICJhbmQgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC8kQ1VTVE9NQklPU0RJUiIKKyAgICAgICAgICAgIGVjaG8gImFuZCAkT0VDT1JFX01BQ0hJTkVfU1lTUk9PVC8kQ1VTVE9NQklPU0RJUiIKKyAgICAgICAgICAgIGV4aXQgMTsKKyAgICAgICAgZmkKKyAgICAgICAgZWNobyAiQXNzdW1pbmcgYmlvc2RpciBpcyAkQ1VTVE9NQklPU0RJUiIKKyAgICAgICAgU0NSSVBUX1FFTVVfT1BUPSIkU0NSSVBUX1FFTVVfT1BUIC1MICRDVVNUT01CSU9TRElSIgorICAgIGZpCitmaQorCisuICRJTlRFUk5BTF9TQ1JJUFQKK2V4aXQgJD8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWFkZHB0YWJsZTJpbWFnZSBiL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWFkZHB0YWJsZTJpbWFnZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMDE5NWFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtYWRkcHRhYmxlMmltYWdlCkBAIC0wLDAgKzEsNTEgQEAKKyMhL2Jpbi9zaAorCisjIEFkZCBhIHBhcnRpb24gdGFibGUgdG8gYW4gZXh0MiBpbWFnZSBmaWxlCisjCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IE9wZW5lZEhhbmQgTHRkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKworSU1BR0U9JDEKK0lNQUdFT1VUPSQyCisKK2VjaG8gJElNQUdFCitlY2hvICRJTUFHRU9VVAorCitzaXplPWBscyAtbCAkSU1BR0UgfCBhd2sgJ3sgcHJpbnQgJDV9J2AKK3NpemUyPWBleHByICRzaXplIC8gNTEyIC8gMTYgLyA2M2AKKworZWNobyAkc2l6ZQorZWNobyAkc2l6ZTIKKworIyBNQlIgU2l6ZSA9IDUxMiAqIDYzIGJ5dGVzCitkZCBpZj0vZGV2L3plcm8gb2Y9JElNQUdFT1VUIGNvdW50PTYzCisKK2VjaG8gIngiID4gL3RtcC9mZGlzay5jbWRzCitlY2hvICJjIiA+PiAvdG1wL2ZkaXNrLmNtZHMKK2VjaG8gIjEwMjQiID4+IC90bXAvZmRpc2suY21kcworZWNobyAiaCIgPj4gL3RtcC9mZGlzay5jbWRzCitlY2hvICIxNiIgPj4gL3RtcC9mZGlzay5jbWRzCitlY2hvICJyIiA+PiAvdG1wL2ZkaXNrLmNtZHMKK2VjaG8gIm4iID4+IC90bXAvZmRpc2suY21kcworZWNobyAicCIgPj4gL3RtcC9mZGlzay5jbWRzCitlY2hvICIxIiA+PiAvdG1wL2ZkaXNrLmNtZHMKK2VjaG8gIjEiID4+IC90bXAvZmRpc2suY21kcworZWNobyAiJHNpemUyIiA+PiAvdG1wL2ZkaXNrLmNtZHMKK2VjaG8gInciID4+IC90bXAvZmRpc2suY21kcworCisvc2Jpbi9mZGlzayAkSU1BR0VPVVQgPCAvdG1wL2ZkaXNrLmNtZHMKK2NhdCAkSU1BR0UgPj4gJElNQUdFT1VUCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1leHBvcnQtcm9vdGZzIGIveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtZXhwb3J0LXJvb3RmcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MGFiMjAxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtZXhwb3J0LXJvb3RmcwpAQCAtMCwwICsxLDE2MyBAQAorIyEvYmluL2Jhc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK3VzYWdlKCkgeworCWVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxyZXN0YXJ0fSA8bmZzLWV4cG9ydC1kaXI+IgorfQorCitpZiBbICQjICE9IDIgXTsgdGhlbgorCXVzYWdlCisJZXhpdCAxCitmaQorCitpZiBbWyAiJDEiICE9ICJzdGFydCIgJiYgIiQxIiAhPSAic3RvcCIgJiYgIiQxIiAhPSAicmVzdGFydCIgXV07IHRoZW4KKwllY2hvICJVbmtub3duIGNvbW1hbmQgJyQxJyIKKwl1c2FnZQorCWV4aXQgMQorZmkKKworaWYgWyAhIC1kICIkMiIgXTsgdGhlbgorCWVjaG8gIkVycm9yOiAnJDInIGRvZXMgbm90IGV4aXN0IgorCXVzYWdlCisJZXhpdCAxCitmaQorIyBFbnN1cmUgdGhlIG5mcy1leHBvcnQtZGlyIGlzIGFuIGFic29sdXRlIHBhdGgKK05GU19FWFBPUlRfRElSPSQoY2QgIiQyIiAmJiBwd2QpCisKK1NZU1JPT1RfU0VUVVBfU0NSSVBUPWB3aGljaCBvZS1maW5kLW5hdGl2ZS1zeXNyb290IDI+IC9kZXYvbnVsbGAKK2lmIFsgLXogIiRTWVNST09UX1NFVFVQX1NDUklQVCIgXTsgdGhlbgorCWVjaG8gIkVycm9yOiBVbmFibGUgdG8gZmluZCB0aGUgb2UtZmluZC1uYXRpdmUtc3lzcm9vdCBzY3JpcHQiCisJZWNobyAiRGlkIHlvdSBmb3JnZXQgdG8gc291cmNlIHlvdXIgYnVpbGQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0PyIKKwlleGl0IDEKK2ZpCisuICRTWVNST09UX1NFVFVQX1NDUklQVAorCitpZiBbICEgLWUgIiRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvdXNyL3NiaW4vdW5mc2QiIF07IHRoZW4KKwllY2hvICJFcnJvcjogVW5hYmxlIHRvIGZpbmQgdW5mc2QgYmluYXJ5IGluICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvdXNyL3NiaW4vIgorCisJaWYgWyAieCRPRUNPUkVfRElTVFJPX1ZFUlNJT04iID0gIngiIF07IHRoZW4KKwkJZWNobyAiSGF2ZSB5b3UgcnVuICdiaXRiYWtlIG1ldGEtaWRlLXN1cHBvcnQnPyIKKwllbHNlCisJCWVjaG8gIlRoaXMgc2hvdWxkbid0IGhhcHBlbiAtIHNvbWV0aGluZyBpcyBtaXNzaW5nIGZyb20geW91ciB0b29sY2hhaW4gaW5zdGFsbGF0aW9uIgorCWZpCisJZXhpdCAxCitmaQorCitpZiBbICEgLWQgfi8ucnVucWVtdS1zZGsgXTsgdGhlbgorCW1rZGlyIC1wIH4vLnJ1bnFlbXUtc2RrCitmaQorCitORlNfSU5TVEFOQ0U9JHtORlNfSU5TVEFOQ0U6PTB9CitFWFBPUlRTPX4vLnJ1bnFlbXUtc2RrL2V4cG9ydHMkTkZTX0lOU1RBTkNFCitSTVRBQj1+Ly5ydW5xZW11LXNkay9ybXRhYiRORlNfSU5TVEFOQ0UKK05GU1BJRD1+Ly5ydW5xZW11LXNkay9uZnMkTkZTX0lOU1RBTkNFLnBpZAorTU9VTlRQSUQ9fi8ucnVucWVtdS1zZGsvbW91bnQkTkZTX0lOU1RBTkNFLnBpZAorCitQU0VVRE9fT1BUUz0iLVAgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC91c3IiCitQU0VVRE9fTE9DQUxTVEFURURJUj0iJE5GU19FWFBPUlRfRElSLy4uLyQoYmFzZW5hbWUgJE5GU19FWFBPUlRfRElSKS5wc2V1ZG9fc3RhdGUiCitleHBvcnQgUFNFVURPX0xPQ0FMU1RBVEVESVIKKworaWYgWyAhIC1kICIkUFNFVURPX0xPQ0FMU1RBVEVESVIiIF07IHRoZW4KKwllY2hvICJFcnJvcjogJFBTRVVET19MT0NBTFNUQVRFRElSIGRvZXMgbm90IGV4aXN0LiIKKwllY2hvICJEaWQgeW91IGNyZWF0ZSB0aGUgZXhwb3J0IGRpcmVjdG9yeSB1c2luZyBydW5xZW11LWV4dHJhY3Qtc2RrPyIKKwlleGl0IDEJCitmaQorCisjIHJwYy5tb3VudGQgUlBDIHBvcnQKK05GU19NT1VOVFBST0c9JFsgMjExMTEgKyAkTkZTX0lOU1RBTkNFIF0KKyMgcnBjLm5mc2QgUlBDIHBvcnQKK05GU19ORlNQUk9HPSRbIDExMTExICsgJE5GU19JTlNUQU5DRSBdCisjIE5GUyBwb3J0IG51bWJlcgorTkZTX1BPUlQ9JFsgMzA0OSArIDIgKiAkTkZTX0lOU1RBTkNFIF0KKyMgbW91bnRkIHBvcnQgbnVtYmVyCitNT1VOVF9QT1JUPSRbIDMwNDggKyAyICogJE5GU19JTlNUQU5DRSBdCisKKyMjIEZvciBkZWJ1Z2dpbmcgeW91IHdvdWxkIGFkZGl0aW9uYWxseSBhZGQKKyMjIC0tZGVidWcgYWxsCitVTkZTRF9PUFRTPSItcCAtTiAtaSAkTkZTUElEIC1lICRFWFBPUlRTIC14ICRORlNfTkZTUFJPRyAtbiAkTkZTX1BPUlQgLXkgJE5GU19NT1VOVFBST0cgLW0gJE1PVU5UX1BPUlQiCisKKyMgU2V0dXAgdGhlIGV4cG9ydHMgZmlsZQoraWYgWyAiJDEiID0gInN0YXJ0IiBdOyB0aGVuCisJZWNobyAiQ3JlYXRpbmcgZXhwb3J0cyBmaWxlLi4uIgorCWVjaG8gIiRORlNfRVhQT1JUX0RJUiAocncsYXN5bmMsbm9fcm9vdF9zcXVhc2gsbm9fYWxsX3NxdWFzaCxpbnNlY3VyZSkiID4gJEVYUE9SVFMKK2ZpCisKKyMgU2VlIGhvdyB3ZSB3ZXJlIGNhbGxlZC4KK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwlQT1JUTUFQX1JVTk5JTkc9YHBzIC1lZiB8IGdyZXAgcG9ydG1hcCB8IGdyZXAgLXYgZ3JlcGAKKwlSUENCSU5EX1JVTk5JTkc9YHBzIC1lZiB8IGdyZXAgcnBjYmluZCB8IGdyZXAgLXYgZ3JlcGAKKwlpZiBbWyAieCRQT1JUTUFQX1JVTk5JTkciID0gIngiICYmICJ4JFJQQ0JJTkRfUlVOTklORyIgPSAieCIgXV07IHRoZW4KKwkJZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKKwkJZWNobyAiRXJyb3I6IG5laXRoZXIgcnBjYmluZCBub3IgcG9ydG1hcCBhcHBlYXIgdG8gYmUgcnVubmluZyIKKwkJZWNobyAiUGxlYXNlIGluc3RhbGwgYW5kIHN0YXJ0IG9uZSBvZiB0aGVzZSBzZXJ2aWNlcyBmaXJzdCIKKwkJZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKKwkJZWNobyAiVGlwOiBmb3IgcmVjZW50IFVidW50dSBob3N0cywgcnVuOiIKKwkJZWNobyAiICBzdWRvIGFwdC1nZXQgaW5zdGFsbCBycGNiaW5kIgorCQllY2hvICJUaGVuIGFkZCBPUFRJT05TPVwiLWkgLXdcIiAgdG8gL2V0Yy9kZWZhdWx0L3JwY2JpbmQgYW5kIHJ1biIKKwkJZWNobyAiICBzdWRvIHNlcnZpY2UgcG9ydG1hcCByZXN0YXJ0IgorCisJCWV4aXQgMQorCWZpCisKKwllY2hvICJTdGFydGluZyBVc2VyIE1vZGUgbmZzZCIKKwllY2hvICIgICRQU0VVRE8gJFBTRVVET19PUFRTICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvdXNyL3NiaW4vdW5mc2QgJFVORlNEX09QVFMiCisJJFBTRVVETyAkUFNFVURPX09QVFMgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC91c3Ivc2Jpbi91bmZzZCAkVU5GU0RfT1BUUworCWlmIFsgISAkPyA9IDAgXTsgdGhlbgorCQllY2hvICJFcnJvciBzdGFydGluZyBuZnNkIgorCQlleGl0IDEKKwlmaQorCSMgQ2hlY2sgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgc3RhcnRlZCBvay4KKwlpZiBbICEgLWYgJE5GU1BJRCBdOyB0aGVuCisJCWVjaG8gInJwYy5uZnNkIGRpZCBub3Qgc3RhcnQgY29ycmVjdGx5IgorCQlleGl0IDEKKwlmaQorCXBzIC1mcCBgY2F0ICRORlNQSURgID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbAorCWlmIFsgISAkPyA9IDAgXTsgdGhlbgorCQllY2hvICJycGMubmZzZCBkaWQgbm90IHN0YXJ0IGNvcnJlY3RseSIKKwkJZXhpdCAxCisJZmkKKwllY2hvICIgIgorCWVjaG8gIk9uIHlvdXIgdGFyZ2V0IHBsZWFzZSByZW1lbWJlciB0byBhZGQgdGhlIGZvbGxvd2luZyBvcHRpb25zIGZvciBORlMiCisJZWNobyAibmZzcm9vdD1JUF9BRERSRVNTOiRORlNfRVhQT1JUX0RJUixuZnN2ZXJzPTMscG9ydD0kTkZTRF9QT1JULG1vdW50cHJvZz0kTU9VTlREX1JQQ1BPUlQsbmZzcHJvZz0kTkZTRF9SUENQT1JULHVkcCxtb3VudHBvcnQ9JE1PVU5URF9QT1JUIgorCTs7CisgIHN0b3ApCisJaWYgWyAtZiAiJE5GU1BJRCIgXTsgdGhlbgorCQllY2hvICJTdG9wcGluZyBycGMubmZzZCIKKwkJa2lsbCBgY2F0ICRORlNQSURgCisJCXJtIC1mICRORlNQSUQKKwllbHNlCisJCWVjaG8gIk5vIFBJRCBmaWxlLCBub3Qgc3RvcHBpbmcgcnBjLm5mc2QiCisJZmkKKwlpZiBbIC1mICIkRVhQT1JUUyIgXTsgdGhlbgorCQllY2hvICJSZW1vdmluZyBleHBvcnRzIGZpbGUiCisJCXJtIC1mICRFWFBPUlRTCisJZmkKKwk7OworICByZXN0YXJ0KQorCSQwIHN0b3AgJE5GU19FWFBPUlRfRElSCisJJDAgc3RhcnQgJE5GU19FWFBPUlRfRElSIAorCWlmIFsgISAkPyA9IDAgXTsgdGhlbgorCQlleGl0IDEKKwlmaQorCTs7CisgICopCisJZWNobyAiJDAge3N0YXJ0fHN0b3B8cmVzdGFydH0gPG5mcy1leHBvcnQtZGlyPiIKKwk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWV4dHJhY3Qtc2RrIGIveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtZXh0cmFjdC1zZGsKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzJkZGQ0OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWV4dHJhY3Qtc2RrCkBAIC0wLDAgKzEsMTA0IEBACisjIS9iaW4vYmFzaAorIworIyBUaGlzIHV0aWxpdHkgZXh0cmFjdHMgYW4gU0RLIGltYWdlIHRhcmJhbGwgdXNpbmcgcHNldWRvLCBhbmQgc3RvcmVzCisjIHRoZSBwc2V1ZG8gZGF0YWJhc2UgaW4gdmFyL3BzZXVkbyB3aXRoaW4gdGhlIHJvb3Rmcy4gSWYgeW91IHdhbnQgdG8KKyMgYm9vdCBRRU1VIHVzaW5nIGFuIG5mc3Jvb3QsIHlvdSAqbXVzdCogdXNlIHRoaXMgc2NyaXB0IHRvIGNyZWF0ZSB0aGUKKyMgcm9vdGZzIHRvIGVuc3VyZSBpdCBpcyBkb25lIGNvcnJlY3RseSB3aXRoIHBzZXVkby4KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIEludGVsIENvcnAuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK2Z1bmN0aW9uIHVzYWdlKCkgeworCWVjaG8gIlVzYWdlOiAkMCA8aW1hZ2UtdGFyYmFsbD4gPGV4dHJhY3QtZGlyPiIKK30KKworaWYgWyAkIyAtbmUgMiBdOyB0aGVuCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisKK1NZU1JPT1RfU0VUVVBfU0NSSVBUPWB3aGljaCBvZS1maW5kLW5hdGl2ZS1zeXNyb290IDI+IC9kZXYvbnVsbGAKK2lmIFsgLXogIiRTWVNST09UX1NFVFVQX1NDUklQVCIgXTsgdGhlbgorICAgIGVjaG8gIkVycm9yOiBVbmFibGUgdG8gZmluZCB0aGUgb2UtZmluZC1uYXRpdmUtc3lzcm9vdCBzY3JpcHQiCisgICAgZWNobyAiRGlkIHlvdSBmb3JnZXQgdG8gc291cmNlIHlvdXIgYnVpbGQgc3lzdGVtIGVudmlyb25tZW50IHNldHVwIHNjcmlwdD8iCisgICAgZXhpdCAxCitmaQorLiAkU1lTUk9PVF9TRVRVUF9TQ1JJUFQKK1BTRVVET19PUFRTPSItUCAkT0VDT1JFX05BVElWRV9TWVNST09UL3VzciIKKworUk9PVEZTX1RBUkJBTEw9JDEKK1NES19ST09URlNfRElSPSQyCisKK2lmIFsgISAtZSAiJFJPT1RGU19UQVJCQUxMIiBdOyB0aGVuCisgICAJZWNobyAiRXJyb3I6IHNkayB0YXJiYWxsICckUk9PVEZTX1RBUkJBTEwnIGRvZXMgbm90IGV4aXN0IgorICAgCXVzYWdlCisgICAJZXhpdCAxCitmaQorCisjIENvbnZlcnQgU0RLX1JPT1RGU19ESVIgdG8gYSBmdWxsIHBhdGhuYW1lCitpZiBbWyAke1NES19ST09URlNfRElSOjA6MX0gIT0gIi8iIF1dOyB0aGVuCisJU0RLX1JPT1RGU19ESVI9JChyZWFkbGluayAtZiAkKHB3ZCkvJFNES19ST09URlNfRElSKQorZmkKKworVEFSX09QVFM9IiIKK2lmIFtbICIkUk9PVEZTX1RBUkJBTEwiID1+IHRhclwuYnoyJCBdXTsgdGhlbgorCVRBUl9PUFRTPSItLW51bWVyaWMtb3duZXIgLXhqZiIKK2ZpCitpZiBbWyAiJFJPT1RGU19UQVJCQUxMIiA9fiB0YXJcLmd6JCBdXTsgdGhlbgorCVRBUl9PUFRTPSItLW51bWVyaWMtb3duZXIgLXh6ZiIKK2ZpCitpZiBbWyAiJFJPT1RGU19UQVJCQUxMIiA9fiBcLnRhciQgXV07IHRoZW4KKwlUQVJfT1BUUz0iLS1udW1lcmljLW93bmVyIC14ZiIKK2ZpCitpZiBbIC16ICIkVEFSX09QVFMiIF07IHRoZW4KKwllY2hvICJFcnJvcjogVW5hYmxlIHRvIGRldGVybWluZSBzZGsgdGFyYmFsbCBmb3JtYXQiCisJZWNobyAiQWNjZXB0ZWQgdHlwZXM6IC50YXIgLyAudGFyLmd6IC8gLnRhci5iejIiCisJZXhpdCAxCitmaQorCitpZiBbICEgLWQgIiRTREtfUk9PVEZTX0RJUiIgXTsgdGhlbgorCWVjaG8gIkNyZWF0aW5nIGRpcmVjdG9yeSAkU0RLX1JPT1RGU19ESVIiCisJbWtkaXIgLXAgIiRTREtfUk9PVEZTX0RJUiIKK2ZpCisKK3BzZXVkb19zdGF0ZV9kaXI9IiRTREtfUk9PVEZTX0RJUi8uLi8kKGJhc2VuYW1lICIkU0RLX1JPT1RGU19ESVIiKS5wc2V1ZG9fc3RhdGUiCitwc2V1ZG9fc3RhdGVfZGlyPSIkKHJlYWRsaW5rIC1mICRwc2V1ZG9fc3RhdGVfZGlyKSIKKworaWYgWyAtZSAiJHBzZXVkb19zdGF0ZV9kaXIiIF07IHRoZW4KKwllY2hvICJFcnJvcjogJHBzZXVkb19zdGF0ZV9kaXIgYWxyZWFkeSBleGlzdHMhIgorCWVjaG8gIlBsZWFzZSBkZWxldGUgdGhlIHJvb3RmcyB0cmVlIGFuZCBwc2V1ZG8gZGlyZWN0b3J5IG1hbnVhbGx5IgorICAgICAgICBlY2hvICJpZiB0aGlzIGlzIHJlYWxseSB3aGF0IHlvdSB3YW50LiIKKwlleGl0IDEKK2ZpCisKK21rZGlyIC1wICIkcHNldWRvX3N0YXRlX2RpciIKK3RvdWNoICIkcHNldWRvX3N0YXRlX2Rpci9wc2V1ZG8ucGlkIgorUFNFVURPX0xPQ0FMU1RBVEVESVI9IiRwc2V1ZG9fc3RhdGVfZGlyIgorZXhwb3J0IFBTRVVET19MT0NBTFNUQVRFRElSCisKK2VjaG8gIkV4dHJhY3Rpbmcgcm9vdGZzIHRhcmJhbGwgdXNpbmcgcHNldWRvLi4uIgorZWNobyAiJFBTRVVETyAkUFNFVURPX09QVFMgdGFyIC1DIFwiJFNES19ST09URlNfRElSXCIgJFRBUl9PUFRTIFwiJFJPT1RGU19UQVJCQUxMXCIiCiskUFNFVURPICRQU0VVRE9fT1BUUyB0YXIgLUMgIiRTREtfUk9PVEZTX0RJUiIgJFRBUl9PUFRTICIkUk9PVEZTX1RBUkJBTEwiCisKK0RJUkNIRUNLPWBscyAtbCAiJFNES19ST09URlNfRElSIiB8IHdjIC1sYAoraWYgWyAiJERJUkNIRUNLIiAtbHQgNSBdOyB0aGVuCisJZWNobyAiV2FybmluZzogSSBkb24ndCBzZWUgbWFueSBmaWxlcyBpbiAkU0RLX1JPT1RGU19ESVIiCisJZWNobyAiUGxlYXNlIGRvdWJsZS1jaGVjayB0aGUgZXh0cmFjdGlvbiB3b3JrZWQgYXMgaW50ZW5kZWQiCisJZXhpdCAwCitmaQorCitlY2hvICJTREsgaW1hZ2Ugc3VjY2Vzc2Z1bGx5IGV4dHJhY3RlZCB0byAkU0RLX1JPT1RGU19ESVIiCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtZ2VuLXRhcGRldnMgYi95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1nZW4tdGFwZGV2cwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kM2IyN2JlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtZ2VuLXRhcGRldnMKQEAgLTAsMCArMSw5MSBAQAorIyEvYmluL2Jhc2gKKyMKKyMgQ3JlYXRlIGEgImJhbmsiIG9mIHRhcCBuZXR3b3JrIGRldmljZXMgdGhhdCBjYW4gYmUgdXNlZCBieSB0aGUKKyMgcnVucWVtdSBzY3JpcHQuIFRoaXMgc2NyaXB0IG5lZWRzIHRvIGJlIHJ1biBhcyByb290LCBhbmQgd2lsbAorIyB1c2UgdGhlIHR1bmN0bCBiaW5hcnkgZnJvbSB0aGUgYnVpbGQgc3lzdGVtIHN5c3Jvb3QuIE5vdGU6IG1hbnkgTGludXggCisjIGRpc3Ryb3MgdGhlc2UgZGF5cyBzdGlsbCB1c2UgYW4gb2xkZXIgdmVyc2lvbiBvZiB0dW5jdGwgd2hpY2ggZG9lcyBub3QKKyMgc3VwcG9ydCB0aGUgZ3JvdXAgcGVybWlzc2lvbnMgb3B0aW9uLCBoZW5jZSB0aGUgbmVlZCB0byB1c2UgdGhlIGJ1aWxkCisjIHN5c3RlbSBwcm92aWRlZCB2ZXJzaW9uLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTAgSW50ZWwgQ29ycC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCVNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKwordXNhZ2UoKSB7CisJZWNobyAiVXNhZ2U6IHN1ZG8gJDAgPHVpZD4gPGdpZD4gPG51bT4gPG5hdGl2ZS1zeXNyb290LWJhc2VkaXI+IgorICAgICAgICBlY2hvICJXaGVyZSA8dWlkPiBpcyB0aGUgbnVtZXJpYyB1c2VyIGlkIHRoZSB0YXAgZGV2aWNlcyB3aWxsIGJlIG93bmVkIGJ5IgorCWVjaG8gIldoZXJlIDxnaWQ+IGlzIHRoZSBudW1lcmljIGdyb3VwIGlkIHRoZSB0YXAgZGV2aWNlcyB3aWxsIGJlIG93bmVkIGJ5IgorCWVjaG8gIjxudW0+IGlzIHRoZSBudW1iZXIgb2YgdGFwIGRldmljZXMgdG8gY3JlYXRlICgwIHRvIHJlbW92ZSBhbGwpIgorCWVjaG8gIjxuYXRpdmUtc3lzcm9vdC1iYXNlZGlyPiBpcyB0aGUgcGF0aCB0byB0aGUgYnVpbGQgc3lzdGVtJ3MgbmF0aXZlIHN5c3Jvb3QiCisJZXhpdCAxCit9CisKK2lmIFsgJEVVSUQgLW5lIDAgXTsgdGhlbgorCWVjaG8gIkVycm9yOiBUaGlzIHNjcmlwdCBtdXN0IGJlIHJ1biB3aXRoIHJvb3QgcHJpdmlsZWdlcyIKKwlleGl0CitmaQorCitpZiBbICQjIC1uZSA0IF07IHRoZW4KKwllY2hvICJFcnJvcjogSW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMiCisJdXNhZ2UKK2ZpCisKK1RVSUQ9JDEKK0dJRD0kMgorQ09VTlQ9JDMKK1NZU1JPT1Q9JDQKKworVFVOQ1RMPSRTWVNST09UL3Vzci9iaW4vdHVuY3RsCitpZiBbWyAhIC14ICIkVFVOQ1RMIiB8fCAtZCAiJFRVTkNUTCIgXV07IHRoZW4KKwllY2hvICJFcnJvcjogJFRVTkNUTCBpcyBub3QgYW4gZXhlY3V0YWJsZSIKKwl1c2FnZQorZmkKKworU0NSSVBUX0RJUj1gZGlybmFtZSAkMGAKK1JVTlFFTVVfSUZVUD0iJFNDUklQVF9ESVIvcnVucWVtdS1pZnVwIgoraWYgWyAhIC14ICIkUlVOUUVNVV9JRlVQIiBdOyB0aGVuCisJZWNobyAiRXJyb3I6IFVuYWJsZSB0byBmaW5kIHRoZSBydW5xZW11LWlmdXAgc2NyaXB0IGluICRTQ1JJUFRfRElSIgorCWV4aXQgMQorZmkKKworSUZDT05GSUc9YHdoaWNoIGlwIDI+IC9kZXYvbnVsbGAKK2lmIFsgLXogIiRJRkNPTkZJRyIgXTsgdGhlbgorCSMgSXMgaXQgZXZlciBhbnl3aGVyZSBlbHNlPworCUlGQ09ORklHPS9zYmluL2lwCitmaQoraWYgWyAhIC14ICIkSUZDT05GSUciIF07IHRoZW4KKyAgICAgICBlY2hvICIkSUZDT05GSUcgY2Fubm90IGJlIGV4ZWN1dGVkIgorICAgICAgIGV4aXQgMQorZmkKKworIyBFbnN1cmUgd2Ugc3RhcnQgd2l0aCBhIGNsZWFuIHNsYXRlCitmb3IgdGFwIGluIGAkSUZDT05GSUcgbGluayB8IGdyZXAgdGFwIHwgYXdrICd7IHByaW50IFwkMiB9JyB8IHNlZCBzLzovL2A7IGRvCisJZWNobyAiTm90ZTogRGVzdHJveWluZyBwcmUtZXhpc3RpbmcgdGFwIGludGVyZmFjZSAkdGFwLi4uIgorCSRUVU5DVEwgLWQgJHRhcAorZG9uZQorCitlY2hvICJDcmVhdGluZyAkQ09VTlQgdGFwIGRldmljZXMgZm9yIFVJRDogJFRVSUQgR0lEOiAkR0lELi4uIgorZm9yICgoaW5kZXg9MDsgaW5kZXggPCAkQ09VTlQ7IGluZGV4KyspKTsgZG8KKwllY2hvICJDcmVhdGluZyB0YXAkaW5kZXgiCisJaWZ1cD1gJFJVTlFFTVVfSUZVUCAkVFVJRCAkR0lEICRTWVNST09UIDI+JjFgCisJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCWVjaG8gIkVycm9yIHJ1bm5pbmcgdHVuY3RsOiAkaWZ1cCIKKwkJZXhpdCAxCisJZmkKK2RvbmUKKworIyBUaGUgcnVucWVtdSBzY3JpcHQgd2lsbCBjaGVjayBmb3IgdGhpcyBmaWxlLCBhbmQgaWYgaXQgZXhpc3RzLAorIyB3aWxsIHVzZSB0aGUgZXhpc3RpbmcgYmFuayBvZiB0YXAgZGV2aWNlcyB3aXRob3V0IGNyZWF0aW5nCisjIGFkZGl0aW9uYWwgb25lcyB2aWEgc3Vkby4KK3RvdWNoIC9ldGMvcnVucWVtdS1ub3N1ZG8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWlmZG93biBiL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWlmZG93bgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZjY2Y2ZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtaWZkb3duCkBAIC0wLDAgKzEsNjYgQEAKKyMhL2Jpbi9iYXNoCisjCisjIFFFTVUgbmV0d29yayBjb25maWd1cmF0aW9uIHNjcmlwdCB0byBicmluZyBkb3duIHRhcCBkZXZpY2VzLiBUaGlzCisjIHV0aWxpdHkgbmVlZHMgdG8gYmUgcnVuIGFzIHJvb3QsIGFuZCB3aWxsIHVzZSB0aGUgdHVuY3RsIGJpbmFyeQorIyBmcm9tIHRoZSBuYXRpdmUgc3lzcm9vdC4gCisjCisjIElmIHlvdSBmaW5kIHlvdXJzZWxmIGNhbGxpbmcgdGhpcyBzY3JpcHQgYSBsb3QsIHlvdSBjYW4gYWRkIHRoZQorIyB0aGUgZm9sbG93aW5nIHRvIHlvdXIgL2V0Yy9zdWRvZXJzIGZpbGUgdG8gYmUgYWJsZSB0byBydW4gdGhpcworIyBjb21tYW5kIHdpdGhvdXQgZW50ZXJpbmcgeW91ciBwYXNzd29yZCBlYWNoIHRpbWU6CisjCisjIDxteS11c2VybmFtZT4gQUxMPU5PUEFTU1dEOiAvcGF0aC90by9ydW5xZW11LWlmdXAKKyMgPG15LXVzZXJuYW1lPiBBTEw9Tk9QQVNTV0Q6IC9wYXRoL3RvL3J1bnFlbXUtaWZkb3duCisjCisjIENvcHlyaWdodCAoYykgMjAwNi0yMDExIExpbnV4IEZvdW5kYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCVNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKwordXNhZ2UoKSB7CisJZWNobyAic3VkbyAkKGJhc2VuYW1lICQwKSA8dGFwLWRldj4gPG5hdGl2ZS1zeXNyb290LWJhc2VkaXI+IgorfQorCitpZiBbICRFVUlEIC1uZSAwIF07IHRoZW4KKwllY2hvICJFcnJvcjogVGhpcyBzY3JpcHQgKHJ1bnFlbXUtaWZkb3duKSBtdXN0IGJlIHJ1biB3aXRoIHJvb3QgcHJpdmlsZWdlcyIKKwlleGl0IDEKK2ZpCisKK2lmIFsgJCMgLW5lIDIgXTsgdGhlbgorCXVzYWdlCisJZXhpdCAxCitmaQorCitUQVA9JDEKK05BVElWRV9TWVNST09UX0RJUj0kMgorCitUVU5DVEw9JE5BVElWRV9TWVNST09UX0RJUi91c3IvYmluL3R1bmN0bAoraWYgWyAhIC1lICIkVFVOQ1RMIiBdOyB0aGVuCisJZWNobyAiRXJyb3I6IFVuYWJsZSB0byBmaW5kIHR1bmN0bCBiaW5hcnkgaW4gJyROQVRJVkVfU1lTUk9PVF9ESVIvdXNyL2JpbicsIHBsZWFzZSBiaXRiYWtlIHFlbXUtaGVscGVyLW5hdGl2ZSIKKwlleGl0IDEKK2ZpCisKKyRUVU5DVEwgLWQgJFRBUAorCisjIGNsZWFudXAgdGhlIHJlbWFpbmluZyBpcHRhYmxlcyBydWxlcworSVBUQUJMRVM9YHdoaWNoIGlwdGFibGVzIDI+IC9kZXYvbnVsbGAKK2lmIFsgIngkSVBUQUJMRVMiID0gIngiIF07IHRoZW4KKwlJUFRBQkxFUz0vc2Jpbi9pcHRhYmxlcworZmkKK2lmIFsgISAteCAiJElQVEFCTEVTIiBdOyB0aGVuCisJZWNobyAiJElQVEFCTEVTIGNhbm5vdCBiZSBleGVjdXRlZCIKKwlleGl0IDEKK2ZpCituPSRbIChgZWNobyAkVEFQIHwgc2VkICdzL3RhcC8vJ2AgKiAyKSArIDEgXQorZGVzdD0kWyAoYGVjaG8gJFRBUCB8IHNlZCAncy90YXAvLydgICogMikgKyAyIF0KKyRJUFRBQkxFUyAtRCBQT1NUUk9VVElORyAtdCBuYXQgLWogTUFTUVVFUkFERSAtcyAxOTIuMTY4LjcuJG4vMzIKKyRJUFRBQkxFUyAtRCBQT1NUUk9VVElORyAtdCBuYXQgLWogTUFTUVVFUkFERSAtcyAxOTIuMTY4LjcuJGRlc3QvMzIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWlmdXAgYi95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1pZnVwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI1YTNkYjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1pZnVwCkBAIC0wLDAgKzEsMTA2IEBACisjIS9iaW4vYmFzaAorIworIyBRRU1VIG5ldHdvcmsgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gc2NyaXB0LiBUaGlzIHV0aWxpdHkgbmVlZHMgdG8KKyMgYmUgcnVuIGFzIHJvb3QsIGFuZCB3aWxsIHVzZSB0aGUgdHVuY3RsIGJpbmFyeSBmcm9tIGEgbmF0aXZlIHN5c3Jvb3QuCisjIE5vdGU6IG1hbnkgTGludXggZGlzdHJvcyB0aGVzZSBkYXlzIHN0aWxsIHVzZSBhbiBvbGRlciB2ZXJzaW9uIG9mCisjIHR1bmN0bCB3aGljaCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBncm91cCBwZXJtaXNzaW9ucyBvcHRpb24sIGhlbmNlCisjIHRoZSBuZWVkIHRvIHVzZSBidWlsZCBzeXN0ZW0ncyB2ZXJzaW9uLgorIworIyBJZiB5b3UgZmluZCB5b3Vyc2VsZiBjYWxsaW5nIHRoaXMgc2NyaXB0IGEgbG90LCB5b3UgY2FuIGFkZCB0aGUKKyMgdGhlIGZvbGxvd2luZyB0byB5b3VyIC9ldGMvc3Vkb2VycyBmaWxlIHRvIGJlIGFibGUgdG8gcnVuIHRoaXMKKyMgY29tbWFuZCB3aXRob3V0IGVudGVyaW5nIHlvdXIgcGFzc3dvcmQgZWFjaCB0aW1lOgorIworIyA8bXktdXNlcm5hbWU+IEFMTD1OT1BBU1NXRDogL3BhdGgvdG8vcnVucWVtdS1pZnVwCisjIDxteS11c2VybmFtZT4gQUxMPU5PUEFTU1dEOiAvcGF0aC90by9ydW5xZW11LWlmZG93bgorIworIyBJZiB5b3UnZCBsaWtlIHRvIGNyZWF0ZSBhIGJhbmsgb2YgdGFwIGRldmljZXMgYXQgb25jZSwgeW91IHNob3VsZCB1c2UKKyMgdGhlIHJ1bnFlbXUtZ2VuLXRhcGRldnMgc2NyaXB0IGluc3RlYWQuIElmIHRhcCBkZXZpY2VzIGFyZSBzZXQgdXAgdXNpbmcKKyMgdGhhdCBzY3JpcHQsIHRoZSBydW5xZW11IHNjcmlwdCB3aWxsIG5ldmVyIGVuZCB1cCBjYWxsaW5nIHRoaXMKKyMgc2NyaXB0LgorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxMSBMaW51eCBGb3VuZGF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLglTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK3VzYWdlKCkgeworCWVjaG8gInN1ZG8gJChiYXNlbmFtZSAkMCkgPHVpZD4gPGdpZD4gPG5hdGl2ZS1zeXNyb290LWJhc2VkaXI+IgorfQorCitpZiBbICRFVUlEIC1uZSAwIF07IHRoZW4KKwllY2hvICJFcnJvcjogVGhpcyBzY3JpcHQgKHJ1bnFlbXUtaWZ1cCkgbXVzdCBiZSBydW4gd2l0aCByb290IHByaXZpbGVnZXMiCisJZXhpdCAxCitmaQorCitpZiBbICQjIC1uZSAzIF07IHRoZW4KKwl1c2FnZQorCWV4aXQgMQorZmkKKworVVNFUklEPSItdSAkMSIKK0dST1VQPSItZyAkMiIKK05BVElWRV9TWVNST09UX0RJUj0kMworCitUVU5DVEw9JE5BVElWRV9TWVNST09UX0RJUi91c3IvYmluL3R1bmN0bAoraWYgWyAhIC14ICIkVFVOQ1RMIiBdOyB0aGVuCisgICAgICAgZWNobyAiRXJyb3I6IFVuYWJsZSB0byBmaW5kIHR1bmN0bCBiaW5hcnkgaW4gJyROQVRJVkVfU1lTUk9PVF9ESVIvdXNyL2JpbicsIHBsZWFzZSBiaXRiYWtlIHFlbXUtaGVscGVyLW5hdGl2ZSIKKwlleGl0IDEKK2ZpCisKK1RBUD1gJFRVTkNUTCAtYiAkR1JPVVAgMj4mMWAKK1NUQVRVUz0kPworaWYgWyAkU1RBVFVTIC1uZSAwIF07IHRoZW4KKyMgSWYgdHVuY3RsIC1nIGZhaWxzLCB0cnkgdXNpbmcgdHVuY3RsIC11LCBmb3Igb2xkZXIgaG9zdCBrZXJuZWxzIAorIyB3aGljaCBkbyBub3Qgc3VwcG9ydCB0aGUgVFVOU0VUR1JPVVAgaW9jdGwKKwlUQVA9YCRUVU5DVEwgLWIgJFVTRVJJRCAyPiYxYAorCVNUQVRVUz0kPworCWlmIFsgJFNUQVRVUyAtbmUgMCBdOyB0aGVuCisJCWVjaG8gInR1bmN0bCBmYWlsZWQ6IgorCQlleGl0IDEKKwlmaQorZmkKKworSUZDT05GSUc9YHdoaWNoIGlwIDI+IC9kZXYvbnVsbGAKK2lmIFsgIngkSUZDT05GSUciID0gIngiIF07IHRoZW4KKwkjIGJldHRlciB0aGFuIG5vdGhpbmcuLi4KKwlJRkNPTkZJRz0vc2Jpbi9pcAorZmkKK2lmIFsgISAteCAiJElGQ09ORklHIiBdOyB0aGVuCisJZWNobyAiJElGQ09ORklHIGNhbm5vdCBiZSBleGVjdXRlZCIKKwlleGl0IDEKK2ZpCisKK0lQVEFCTEVTPWB3aGljaCBpcHRhYmxlcyAyPiAvZGV2L251bGxgCitpZiBbICJ4JElQVEFCTEVTIiA9ICJ4IiBdOyB0aGVuCisJSVBUQUJMRVM9L3NiaW4vaXB0YWJsZXMKK2ZpCitpZiBbICEgLXggIiRJUFRBQkxFUyIgXTsgdGhlbgorCWVjaG8gIiRJUFRBQkxFUyBjYW5ub3QgYmUgZXhlY3V0ZWQiCisJZXhpdCAxCitmaQorCituPSRbIChgZWNobyAkVEFQIHwgc2VkICdzL3RhcC8vJ2AgKiAyKSArIDEgXQorJElGQ09ORklHIGFkZHIgYWRkIDE5Mi4xNjguNy4kbi8zMiBicm9hZGNhc3QgMTkyLjE2OC43LjI1NSBkZXYgJFRBUAorJElGQ09ORklHIGxpbmsgc2V0IGRldiAkVEFQIHVwCisKK2Rlc3Q9JFsgKGBlY2hvICRUQVAgfCBzZWQgJ3MvdGFwLy8nYCAqIDIpICsgMiBdCiskSUZDT05GSUcgcm91dGUgYWRkIHRvIDE5Mi4xNjguNy4kZGVzdCBkZXYgJFRBUAorCisjIHNldHVwIE5BVCBmb3IgdGFwMCBpbnRlcmZhY2UgdG8gaGF2ZSBpbnRlcm5ldCBhY2Nlc3MgaW4gUUVNVQorJElQVEFCTEVTIC1BIFBPU1RST1VUSU5HIC10IG5hdCAtaiBNQVNRVUVSQURFIC1zIDE5Mi4xNjguNy4kbi8zMgorJElQVEFCTEVTIC1BIFBPU1RST1VUSU5HIC10IG5hdCAtaiBNQVNRVUVSQURFIC1zIDE5Mi4xNjguNy4kZGVzdC8zMgorZWNobyAxID4gL3Byb2Mvc3lzL25ldC9pcHY0L2lwX2ZvcndhcmQKK2VjaG8gMSA+IC9wcm9jL3N5cy9uZXQvaXB2NC9jb25mLyRUQVAvcHJveHlfYXJwCiskSVBUQUJMRVMgLVAgRk9SV0FSRCBBQ0NFUFQKKworZWNobyAkVEFQCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1pbnRlcm5hbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWludGVybmFsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE1MjcyNjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1pbnRlcm5hbApAQCAtMCwwICsxLDcyNCBAQAorIyEvYmluL2Jhc2ggLXgKKworIyBIYW5kbGUgcnVubmluZyBPRSBpbWFnZXMgdW5kZXIgcWVtdQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMSBMaW51eCBGb3VuZGF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisjIENhbGwgc2V0dGluZzoKKyMgICBRRU1VX01FTU9SWSAob3B0aW9uYWwpIC0gc2V0IHRoZSBhbW91bnQgb2YgbWVtb3J5IGluIHRoZSBlbXVhbHRlZCBzeXN0ZW0uCisjICAgU0VSSUFMX0xPR0ZJTEUgKG9wdGlvbmFsKSAtIGxvZyB0aGUgc2VyaWFsIHBvcnQgb3V0cHV0IHRvIGEgZmlsZQorIworIyBJbWFnZSBvcHRpb25zOgorIyAgIE1BQ0hJTkUgLSB0aGUgbWFjaGluZSB0byBydW4KKyMgICBGU1RZUEUgLSB0aGUgaW1hZ2UgdHlwZSB0byBydW4KKyMgICBLRVJORUwgLSB0aGUga2VybmVsIGltYWdlIGZpbGUgdG8gdXNlCisjICAgUk9PVEZTIC0gdGhlIGRpc2sgaW1hZ2UgZmlsZSB0byB1c2UKKyMKKworCittZW1fc2l6ZT0tMQorCisjR2V0IHJpZCBvZiA8PiBhbmQgZ2V0IHRoZSBjb250ZW50cyBvZiBleHRyYSBxZW11IHJ1bm5pbmcgcGFyYW1zCitTQ1JJUFRfUUVNVV9FWFRSQV9PUFQ9YGVjaG8gJFNDUklQVF9RRU1VX0VYVFJBX09QVCB8IHNlZCAtZSAncy88Ly8nIC1lICdzLz4vLydgCisjaWYgdXNlciBzZXQgcWVtdSBtZW1vcnksIGVnOiAtbSAyNTYgaW4gcWVtdSBleHRyYSBwYXJhbXMsIHdlIG5lZWQgdG8gZG8gc29tZSAKKyMgdmFsaWRhdGlvbiBjaGVjaworbWVtX3NldD1gZXhwciAiJFNDUklQVF9RRU1VX0VYVFJBX09QVCIgOiAnLipcKC1tW1s6c3BhY2U6XV0gKlswLTldKlwpJ2AKK2lmIFsgISAteiAiJG1lbV9zZXQiIF0gOyB0aGVuCisjR2V0IG1lbW9yeSBzZXR0aW5nIHNpemUgZnJvbSB1c2VyIGlucHV0CisgIG1lbV9zaXplPWBlY2hvICRtZW1fc2V0IHwgc2VkICdzLy1tW1s6c3BhY2U6XV0gKi8vJ2AKK2Vsc2UKKyAgICBjYXNlICIkTUFDSElORSIgaW4KKyAgICAgICAgInFlbXV4ODYiKQorICAgICAgICAgICAgbWVtX3NpemU9MjU2CisgICAgICAgICAgICA7OworICAgICAgICAicWVtdXg4Ni02NCIpCisgICAgICAgICAgICBtZW1fc2l6ZT0yNTYKKyAgICAgICAgICAgIDs7CisgICAgICAgICJxZW11YXJtIikKKyAgICAgICAgICAgIG1lbV9zaXplPTEyOAorICAgICAgICAgICAgOzsKKyAgICAgICAgInFlbXVhcm02NCIpCisgICAgICAgICAgICBtZW1fc2l6ZT01MTIKKyAgICAgICAgICAgIDs7CisgICAgICAgICJxZW11bWljcm9ibGF6ZSIpCisgICAgICAgICAgICBtZW1fc2l6ZT02NAorICAgICAgICAgICAgOzsKKyAgICAgICAgInFlbXVtaXBzInwicWVtdW1pcHM2NCIpCisgICAgICAgICAgICBtZW1fc2l6ZT0yNTYKKyAgICAgICAgICAgIDs7CisgICAgICAgICJxZW11cHBjIikKKyAgICAgICAgICAgIG1lbV9zaXplPTI1NgorICAgICAgICAgICAgOzsKKyAgICAgICAgInFlbXVzaDQiKQorICAgICAgICAgICAgbWVtX3NpemU9MTAyNAorICAgICAgICAgICAgOzsKKyAgICAgICAgInFlbXV6eW5xIikKKyAgICAgICAgICAgIG1lbV9zaXplPTEwMjQKKyAgICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgICBtZW1fc2l6ZT02NAorICAgICAgICAgICAgOzsKKyAgICBlc2FjCisKK2ZpCisKKyMgUUVNVV9NRU1PUlkgaGFzICdNJyBhcHBlbmRlZCB0byBtZW1fc2l6ZQorUUVNVV9NRU1PUlk9IiRtZW1fc2l6ZSJNCisKKyMgQnVnIDQzMzogcWVtdWFybSBjYW5ub3QgdXNlID4gMjU2IE1CIFJBTQoraWYgWyAiJE1BQ0hJTkUiID0gInFlbXVhcm0iIF07IHRoZW4KKyAgICBpZiBbIC16ICIkbWVtX3NpemUiIC1vICRtZW1fc2l6ZSAtZ3QgMjU2IF07IHRoZW4KKyAgICAgICAgZWNobyAiV0FSTklORzogcWVtdWFybSBkb2VzIG5vdCBzdXBwb3J0ID4gMjU2TSBvZiBSQU0uIgorICAgICAgICBlY2hvICJDaGFuZ2luZyBRRU1VX01FTU9SWSB0byBkZWZhdWx0IG9mIDI1Nk0uIgorICAgICAgICBRRU1VX01FTU9SWT0iMjU2TSIKKwltZW1fc2l6ZT0iMjU2IgorICAgICAgICBTQ1JJUFRfUUVNVV9FWFRSQV9PUFQ9YGVjaG8gJFNDUklQVF9RRU1VX0VYVFJBX09QVCB8IHNlZCAtZSAicy8kbWVtX3NldC8tbSAyNTYvIiBgCisgICAgZmkKK2ZpCisKKyMgV2UgbmVlZCB0byBzcGVjaWZ5IC1tIDxtZW1fc2l6ZT4gdG8gb3ZlcmNvbWUgYSBidWcgaW4gcWVtdSAwLjE0LjAKKyMgaHR0cHM6Ly9idWdzLmxhdW5jaHBhZC5uZXQvdWJ1bnR1Lytzb3VyY2UvcWVtdS1rdm0vK2J1Zy81ODQ0ODAKKworaWYgWyAteiAiJG1lbV9zZXQiIF0gOyB0aGVuCisgIFNDUklQVF9RRU1VX0VYVFJBX09QVD0iJFNDUklQVF9RRU1VX0VYVFJBX09QVCAtbSAkbWVtX3NpemUiCitmaQorIyBUaGlzIGZpbGUgaXMgY3JlYXRlZCB3aGVuIHJ1bnFlbXUtZ2VuLXRhcGRldnMgY3JlYXRlcyBhIGJhbmsgb2YgdGFwCisjIGRldmljZXMsIGluZGljYXRpbmcgdGhhdCB0aGUgdXNlciBzaG91bGQgbm90IGJyaW5nIHVwIG5ldyBvbmVzIHVzaW5nCisjIHN1ZG8uCitOT1NVRE9fRkxBRz0iL2V0Yy9ydW5xZW11LW5vc3VkbyIKKworUUVNVUlGVVA9YHdoaWNoIHJ1bnFlbXUtaWZ1cCAyPiAvZGV2L251bGxgCitRRU1VSUZET1dOPWB3aGljaCBydW5xZW11LWlmZG93biAyPiAvZGV2L251bGxgCitpZiBbIC16ICIkUUVNVUlGVVAiIC1vICEgLXggIiRRRU1VSUZVUCIgXTsgdGhlbgorICAgICAgIGVjaG8gInJ1bnFlbXUtaWZ1cCBjYW5ub3QgYmUgZm91bmQgb3IgZXhlY3V0ZWQiCisgICAgICAgZXhpdCAxCitmaQoraWYgWyAteiAiJFFFTVVJRkRPV04iIC1vICEgLXggIiRRRU1VSUZET1dOIiBdOyB0aGVuCisgICAgICAgZWNobyAicnVucWVtdS1pZmRvd24gY2Fubm90IGJlIGZvdW5kIG9yIGV4ZWN1dGVkIgorICAgICAgIGV4aXQgMQorZmkKKworTkZTUlVOTklORz0iZmFsc2UiCisKKyNjYXB0dXJlIG9yaWdpbmFsIHN0dHkgdmFsdWVzCitPUklHX1NUVFk9JChzdHR5IC1nKQorCitpZiBbICIkU0xJUlBfRU5BQkxFRCIgPSAieWVzIiBdOyB0aGVuCisgICAgS0VSTkVMX05FVFdPUktfQ01EPSJpcD1kaGNwIgorICAgIFFFTVVfVEFQX0NNRD0iIgorICAgIFFFTVVfVUlfT1BUSU9OUz0iLXNob3ctY3Vyc29yIC11c2IgLXVzYmRldmljZSB3YWNvbS10YWJsZXQiCisgICAgaWYgWyAiJEtWTV9BQ1RJVkUiID0gInllcyIgXTsgdGhlbgorICAgICAgICBRRU1VX05FVFdPUktfQ01EPSIiCisgICAgICAgIERST09UPSIvZGV2L3ZkYSIKKyAgICAgICAgUk9PVEZTX09QVElPTlM9Ii1kcml2ZSBmaWxlPSRST09URlMsaWY9dmlydGlvLGZvcm1hdD1yYXciCisgICAgZWxzZQorICAgICAgICBRRU1VX05FVFdPUktfQ01EPSIiCisgICAgICAgIERST09UPSIvZGV2L2hkYSIKKyAgICAgICAgUk9PVEZTX09QVElPTlM9Ii1kcml2ZSBmaWxlPSRST09URlMsaWY9aWRlLGZvcm1hdD1yYXciCisgICAgZmkKKworZWxzZQorICAgICAgICBhY3F1aXJlX2xvY2soKSB7CisgICAgICAgICAgICBsb2NrZmlsZT0kMQorICAgICAgICAgICAgaWYgWyAteiAiJGxvY2tmaWxlIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiRXJyb3I6IG1pc3NpbmcgbG9ja2ZpbGUgYXJnIHBhc3NlZCB0byBhY3F1aXJlX2xvY2soKSIKKyAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgZmkKKworICAgICAgICAgICAgdG91Y2ggJGxvY2tmaWxlLmxvY2sgMj4vZGV2L251bGwKKyAgICAgICAgICAgIGlmIFsgJD8gLW5lIDAgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gIkFjcXVpcmluZyBsb2NrZmlsZSBmb3IgJGxvY2tmaWxlLmxvY2sgZmFpbGVkIgorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgZXhlYyA4PiRsb2NrZmlsZS5sb2NrCisgICAgICAgICAgICBmbG9jayAtbiAteCA4CisgICAgICAgICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KKyAgICAgICAgICAgICAgICBleGVjIDg+Ji0KKyAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgZmkKKworICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgfQorCisgICAgICAgIHJlbGVhc2VfbG9jaygpIHsKKyAgICAgICAgICAgIGxvY2tmaWxlPSQxCisgICAgICAgICAgICBpZiBbIC16ICIkbG9ja2ZpbGUiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICJFcnJvcjogbWlzc2luZyBsb2NrZmlsZSBhcmcgcGFzc2VkIHRvIHJlbGVhc2VfbG9jaygpIgorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICBmaQorCisgICAgICAgICAgICBybSAtZiAkbG9ja2ZpbGUubG9jaworICAgICAgICAgICAgZXhlYyAgOD4mLQorICAgICAgICB9CisKKyAgICAgICAgTE9DS0RJUj0iL3RtcC9xZW11LXRhcC1sb2NrcyIKKyAgICAgICAgaWYgWyAhIC1kICIkTE9DS0RJUiIgXTsgdGhlbgorICAgICAgICAgICAgbWtkaXIgJExPQ0tESVIKKyAgICAgICAgICAgIGNobW9kIDc3NyAkTE9DS0RJUgorICAgICAgICBmaQorCisgICAgICAgIElGQ09ORklHPWB3aGljaCBpcCAyPiAvZGV2L251bGxgCisgICAgICAgIGlmIFsgLXogIiRJRkNPTkZJRyIgXTsgdGhlbgorICAgICAgICAgICAgSUZDT05GSUc9L3NiaW4vaXAKKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAhIC14ICIkSUZDT05GSUciIF07IHRoZW4KKyAgICAgICAgICAgICAgIGVjaG8gIiRJRkNPTkZJRyBjYW5ub3QgYmUgZXhlY3V0ZWQiCisgICAgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgZmkKKworICAgICAgICBQT1NTSUJMRT1gJElGQ09ORklHIGxpbmsgfCBncmVwICd0YXAnIHwgYXdrICd7cHJpbnQgJDJ9JyB8IHNlZCAtZSAncy86Ly8nIC1lICdzL0AuKi8vJ2AKKyAgICAgICAgVEFQPSIiCisgICAgICAgIExPQ0tGSUxFPSIiCisgICAgICAgIFVTRV9QUkVDT05GX1RBUD0ibm8iCisgICAgICAgIGZvciB0YXAgaW4gJFBPU1NJQkxFOyBkbworICAgICAgICAgICAgTE9DS0ZJTEU9IiRMT0NLRElSLyR0YXAiCisgICAgICAgICAgICBpZiBbIC1lICIkTE9DS0ZJTEUuc2tpcCIgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gIkZvdW5kICRMT0NLRklMRS5za2lwLCBza2lwcGluZyAkdGFwIgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgZWNobyAiQWNxdWlyaW5nIGxvY2tmaWxlIGZvciAkdGFwLi4uIgorICAgICAgICAgICAgYWNxdWlyZV9sb2NrICRMT0NLRklMRQorICAgICAgICAgICAgaWYgWyAkPyAtZXEgMCBdOyB0aGVuCisgICAgICAgICAgICAgICAgVEFQPSR0YXAKKyAgICAgICAgICAgICAgICBVU0VfUFJFQ09ORl9UQVA9InllcyIKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorCisgICAgICAgIGlmIFsgIiRUQVAiID0gIiIgXTsgdGhlbgorICAgICAgICAgICAgaWYgWyAtZSAiJE5PU1VET19GTEFHIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiRXJyb3I6IFRoZXJlIGFyZSBubyBhdmFpbGFibGUgdGFwIGRldmljZXMgdG8gdXNlIGZvciBuZXR3b3JraW5nLCIKKyAgICAgICAgICAgICAgICBlY2hvICJhbmQgSSBzZWUgJE5PU1VET19GTEFHIGV4aXN0cywgc28gSSBhbSBub3QgZ29pbmcgdG8gdHJ5IGNyZWF0aW5nIgorICAgICAgICAgICAgICAgIGVjaG8gImEgbmV3IG9uZSB3aXRoIHN1ZG8uIgorICAgICAgICAgICAgICAgIGV4aXQgMQorICAgICAgICAgICAgZmkKKworICAgICAgICAgICAgR1JPVVBJRD1gaWQgLWdgCisgICAgICAgICAgICBVU0VSSUQ9YGlkIC11YAorICAgICAgICAgICAgZWNobyAiU2V0dGluZyB1cCB0YXAgaW50ZXJmYWNlIHVuZGVyIHN1ZG8iCisgICAgICAgICAgICAjIFJlZGlyZWN0IHN0ZGVyciBzaW5jZSB3ZSBjb3VsZCBzZWUgYSBMRF9QUkVMT0FEIHdhcm5pbmcgaGVyZSBpZiBwc2V1ZG8gaXMgbG9hZGVkCisgICAgICAgICAgICAjIGJ1dCBpbmFjdGl2ZS4gVGhpcyBsb29rcyBzY2FyeSBidXQgaXMgaGFybWxlc3MKKyAgICAgICAgICAgIHRhcD1gc3VkbyAkUUVNVUlGVVAgJFVTRVJJRCAkR1JPVVBJRCAkT0VDT1JFX05BVElWRV9TWVNST09UIDI+IC9kZXYvbnVsbGAKKyAgICAgICAgICAgIGlmIFsgJD8gLW5lIDAgXTsgdGhlbgorICAgICAgICAgICAgICAgICMgUmUtcnVuIHN0YW5kYWxvbmUgdG8gc2VlIHZlcmJvc2UgZXJyb3JzCisgICAgICAgICAgICAgICAgc3VkbyAkUUVNVUlGVVAgJFVTRVJJRCAkR1JPVVBJRCAkT0VDT1JFX05BVElWRV9TWVNST09UCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBMT0NLRklMRT0iJExPQ0tESVIvJHRhcCIKKyAgICAgICAgICAgIGVjaG8gIkFjcXVpcmluZyBsb2NrZmlsZSBmb3IgJHRhcC4uLiIKKyAgICAgICAgICAgIGFjcXVpcmVfbG9jayAkTE9DS0ZJTEUKKyAgICAgICAgICAgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbgorICAgICAgICAgICAgICAgIFRBUD0kdGFwCisgICAgICAgICAgICBmaSAKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZWNobyAiVXNpbmcgcHJlY29uZmlndXJlZCB0YXAgZGV2aWNlICckVEFQJyIKKyAgICAgICAgICAgIGVjaG8gIklmIHRoaXMgaXMgbm90IGludGVuZGVkLCB0b3VjaCAkTE9DS0ZJTEUuc2tpcCB0byBtYWtlIHJ1bnFlbXUgc2tpcCAkVEFQLiIKKyAgICAgICAgZmkKKworICAgICAgICBjbGVhbnVwKCkgeworICAgICAgICAgICAgaWYgWyAhIC1lICIkTk9TVURPX0ZMQUciIC1hICIkVVNFX1BSRUNPTkZfVEFQIiA9ICJubyIgXTsgdGhlbgorICAgICAgICAgICAgICAgICMgUmVkaXJlY3Qgc3RkZXJyIHNpbmNlIHdlIGNvdWxkIHNlZSBhIExEX1BSRUxPQUQgd2FybmluZyBoZXJlIGlmIHBzZXVkbyBpcyBsb2FkZWQKKyAgICAgICAgICAgICAgICAjIGJ1dCBpbmFjdGl2ZS4gVGhpcyBsb29rcyBzY2FyeSBidXQgaXMgaGFybWxlc3MKKyAgICAgICAgICAgICAgICBzdWRvICRRRU1VSUZET1dOICRUQVAgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVCAyPiAvZGV2L251bGwKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBlY2hvICJSZWxlYXNpbmcgbG9ja2ZpbGUgb2YgcHJlY29uZmlndXJlZCB0YXAgZGV2aWNlICckVEFQJyIKKyAgICAgICAgICAgIHJlbGVhc2VfbG9jayAkTE9DS0ZJTEUKKworICAgICAgICAgICAgaWYgWyAiJE5GU1JVTk5JTkciID0gInRydWUiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICJTaHV0dGluZyBkb3duIHRoZSB1c2Vyc3BhY2UgTkZTIHNlcnZlci4uLiIKKyAgICAgICAgICAgICAgICBlY2hvICJydW5xZW11LWV4cG9ydC1yb290ZnMgc3RvcCAkUk9PVEZTIgorICAgICAgICAgICAgICAgIHJ1bnFlbXUtZXhwb3J0LXJvb3RmcyBzdG9wICRST09URlMKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICAjIElmIFFFTVUgY3Jhc2hlcyBvciBzb21laG93IHR0eSBwcm9wZXJ0aWVzIGFyZSBub3QgcmVzdG9yZWQKKyAgICAgICAgICAgICMgYWZ0ZXIgcWVtdSBleGl0cywgd2UgbmVlZCB0byBydW4gc3R0eSBzYW5lCisgICAgICAgICAgICAjc3R0eSBzYW5lCisKKyAgICAgICAgICAgICNpbnN0ZWFkIG9mIHVzaW5nIHN0dHkgc2FuZSB3ZSBzZXQgdGhlIG9yaWdpbmFsIHN0dHkgdmFsdWVzCisgICAgICAgICAgICBzdHR5ICR7T1JJR19TVFRZfQorCisgICAgICAgIH0KKworCisgICAgICAgIG4wPSQoZWNobyAkVEFQIHwgc2VkICdzL3RhcC8vJykKKworICAgICAgICBjYXNlICRuMCBpbgorICAgICAgICAgICAgJyd8KlshMC05XSopCisgICAgICAgICAgICAgICAgZWNobyAiRXJyb3IgQ291bGRuJ3QgdHVybiAkVEFQIGludG8gYW4gaW50ZXJmYWNlIG51bWJlcj8iCisgICAgICAgICAgICAgICAgZXhpdCAxCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworCisgICAgICAgIG4xPSQoKCRuMCAqIDIgKyAxKSkKKyAgICAgICAgbjI9JCgoJG4xICsgMSkpCisKKyAgICAgICAgS0VSTkVMX05FVFdPUktfQ01EPSJpcD0xOTIuMTY4LjcuJG4yOjoxOTIuMTY4LjcuJG4xOjI1NS4yNTUuMjU1LjAiCisgICAgICAgIFFFTVVfVEFQX0NNRD0iLW5ldCB0YXAsdmxhbj0wLGlmbmFtZT0kVEFQLHNjcmlwdD1ubyxkb3duc2NyaXB0PW5vIgorICAgICAgICBpZiBbICIkS1ZNX0FDVElWRSIgPSAieWVzIiBdOyB0aGVuCisgICAgICAgICAgICBRRU1VX05FVFdPUktfQ01EPSItbmV0IG5pYyxtb2RlbD12aXJ0aW8gJFFFTVVfVEFQX0NNRCx2aG9zdD1vbiIKKyAgICAgICAgICAgIERST09UPSIvZGV2L3ZkYSIKKyAgICAgICAgICAgIFJPT1RGU19PUFRJT05TPSItZHJpdmUgZmlsZT0kUk9PVEZTLGlmPXZpcnRpbyxmb3JtYXQ9cmF3IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBRRU1VX05FVFdPUktfQ01EPSItbmV0IG5pYyx2bGFuPTAgJFFFTVVfVEFQX0NNRCIKKyAgICAgICAgICAgIERST09UPSIvZGV2L2hkYSIKKyAgICAgICAgICAgIFJPT1RGU19PUFRJT05TPSItZHJpdmUgZmlsZT0kUk9PVEZTLGlmPWlkZSxmb3JtYXQ9cmF3IgorICAgICAgICBmaQorICAgICAgICBpZiBbICIkTUFDSElORSIgPSAicWVtdWFybTY0IiBdOyB0aGVuCisgICAgICAgICAgICBRRU1VX05FVFdPUktfQ01EPSItbmV0ZGV2IHRhcCxpZD1uZXQwLGlmbmFtZT0kVEFQLHNjcmlwdD1ubyxkb3duc2NyaXB0PW5vIC1kZXZpY2UgdmlydGlvLW5ldC1kZXZpY2UsbmV0ZGV2PW5ldDAgIgorICAgICAgICAgICAgRFJPT1Q9Ii9kZXYvdmRhIgorICAgICAgICAgICAgUk9PVEZTX09QVElPTlM9Ii1kcml2ZSBpZD1kaXNrMCxmaWxlPSRST09URlMsaWY9bm9uZSxmb3JtYXQ9cmF3IC1kZXZpY2UgdmlydGlvLWJsay1kZXZpY2UsZHJpdmU9ZGlzazAiCisgICAgICAgIGZpCisKKyAgICAgICAgS0VSTkNNRExJTkU9Im1lbT0kUUVNVV9NRU1PUlkiCisgICAgICAgIFFFTVVfVUlfT1BUSU9OUz0iLXNob3ctY3Vyc29yIC11c2IgLXVzYmRldmljZSB3YWNvbS10YWJsZXQiCisKKyAgICAgICAgTkZTX0lOU1RBTkNFPWBlY2hvICRUQVAgfCBzZWQgJ3MvdGFwLy8nYAorICAgICAgICBleHBvcnQgTkZTX0lOU1RBTkNFCisKKyAgICAgICAgU0VSSUFMT1BUUz0iIgorICAgICAgICBpZiBbICJ4JFNFUklBTF9MT0dGSUxFIiAhPSAieCIgXTsgdGhlbgorICAgICAgICAgICAgU0VSSUFMT1BUUz0iLXNlcmlhbCBmaWxlOiRTRVJJQUxfTE9HRklMRSIKKyAgICAgICAgZmkKK2ZpCisKK2Nhc2UgIiRNQUNISU5FIiBpbgorICAgICJxZW11YXJtIikgOzsKKyAgICAicWVtdWFybTY0IikgOzsKKyAgICAicWVtdW1pY3JvYmxhemUiKSA7OworICAgICJxZW11bWlwcyIpIDs7CisgICAgInFlbXVtaXBzZWwiKSA7OworICAgICJxZW11bWlwczY0IikgOzsKKyAgICAicWVtdXNoNCIpIDs7CisgICAgInFlbXVwcGMiKSA7OworICAgICJxZW11YXJtdjYiKSA7OworICAgICJxZW11YXJtdjciKSA7OworICAgICJxZW11eDg2IikgOzsKKyAgICAicWVtdXg4Ni02NCIpIDs7CisgICAgInFlbXV6eW5xIikgOzsKKyAgICAiYWtpdGEiKSA7OworICAgICJzcGl0eiIpIDs7CisgICAgKikKKyAgICAgICAgZWNobyAiRXJyb3I6IFVuc3VwcG9ydGVkIG1hY2hpbmUgdHlwZSAkTUFDSElORSIKKyAgICAgICAgcmV0dXJuIDEKKyAgICA7OworZXNhYworCitpZiBbICEgLWYgIiRLRVJORUwiIC1hICJ4JEZTVFlQRSIgIT0gInh2bWRrIiAtYSAieCRGU1RZUEUiICE9ICJ4aGRkaW1nIiAtYSAieCRGU1RZUEUiICE9ICJ4aGRkZGlyZWN0IiBdOyB0aGVuCisgICAgZWNobyAiRXJyb3I6IEtlcm5lbCBpbWFnZSBmaWxlICRLRVJORUwgZG9lc24ndCBleGlzdCIKKyAgICBjbGVhbnVwCisgICAgcmV0dXJuIDEKK2ZpCisKK2lmIFsgIiRGU1RZUEUiICE9ICJuZnMiIC1hICIkRlNUWVBFIiAhPSAidm1kayIgLWEgIiRGU1RZUEUiICE9ICJoZGRpbWciIC1hICIkRlNUWVBFIiAhPSAiaGRkZGlyZWN0IiAtYSAhIC1mICIkUk9PVEZTIiBdOyB0aGVuCisgICAgZWNobyAiRXJyb3I6IEltYWdlIGZpbGUgJFJPT1RGUyBkb2Vzbid0IGV4aXN0IgorICAgIGNsZWFudXAKKyAgICByZXR1cm4gMQorZmkKKworaWYgWyAiJE5GU19TRVJWRVIiID0gIiIgXTsgdGhlbgorICAgIE5GU19TRVJWRVI9IjE5Mi4xNjguNy4xIgorICAgIGlmIFsgIiRTTElSUF9FTkFCTEVEIiA9ICJ5ZXMiIF07IHRoZW4KKwlORlNfU0VSVkVSPSIxMC4wLjIuMiIKKyAgICBmaQorZmkKKworaWYgWyAiJEZTVFlQRSIgPSAibmZzIiBdOyB0aGVuCisgICAgTkZTX0RJUj1gZWNobyAkUk9PVEZTIHwgc2VkICdzL15bXjpdKjpcKC4qXCkvXDEvJ2AKKyAgICBpZiBbICIkTkZTX0lOU1RBTkNFIiA9ICIiIF0gOyB0aGVuCisJTkZTX0lOU1RBTkNFPTAKKyAgICBmaQorICAgIE1PVU5URF9SUENQT1JUPSRbIDIxMTExICsgJE5GU19JTlNUQU5DRSBdCisgICAgTkZTRF9SUENQT1JUPSRbIDExMTExICsgJE5GU19JTlNUQU5DRSBdCisgICAgTkZTRF9QT1JUPSRbIDMwNDkgKyAyICogJE5GU19JTlNUQU5DRSBdCisgICAgTU9VTlREX1BPUlQ9JFsgMzA0OCArIDIgKiAkTkZTX0lOU1RBTkNFIF0KKyAgICBVTkZTX09QVFM9Im5mc3ZlcnM9Myxwb3J0PSRORlNEX1BPUlQsbW91bnRwcm9nPSRNT1VOVERfUlBDUE9SVCxuZnNwcm9nPSRORlNEX1JQQ1BPUlQsdWRwLG1vdW50cG9ydD0kTU9VTlREX1BPUlQiCisKKyAgICBQU0VVRE9fTE9DQUxTVEFURURJUj1+Ly5ydW5xZW11LXNkay9wc2V1ZG8KKyAgICBleHBvcnQgUFNFVURPX0xPQ0FMU1RBVEVESVIKKworICAgICMgU3RhcnQgdGhlIHVzZXJzcGFjZSBORlMgc2VydmVyCisgICAgZWNobyAicnVucWVtdS1leHBvcnQtcm9vdGZzIHJlc3RhcnQgJFJPT1RGUyIKKyAgICBydW5xZW11LWV4cG9ydC1yb290ZnMgcmVzdGFydCAkUk9PVEZTCisgICAgaWYgWyAkPyAhPSAwIF07IHRoZW4KKyAgICAgICAgcmV0dXJuIDEKKyAgICBmaQorICAgIE5GU1JVTk5JTkc9InRydWUiCitmaQorCitpZiBbICIkTUFDSElORSIgPSAicWVtdWFybSIgLW8gIiRNQUNISU5FIiA9ICJxZW11YXJtdjYiIC1vICIkTUFDSElORSIgPSAicWVtdWFybXY3IiBdOyB0aGVuCisgICAgUUVNVT1xZW11LXN5c3RlbS1hcm0KKyAgICBNQUNISU5FX1NVQlRZUEU9dmVyc2F0aWxlcGIKKyAgICBleHBvcnQgUUVNVV9BVURJT19EUlY9Im5vbmUiCisgICAgUUVNVV9VSV9PUFRJT05TPSIkUUVNVV9VSV9PUFRJT05TIgorICAgICMgUUVNVV9VSV9PUFRJT05TPSIkUUVNVV9VSV9PUFRJT05TIC1mb3JjZS1wb2ludGVyIgorICAgIGlmIFsgIiR7RlNUWVBFOjA6M30iID0gImV4dCIgLW8gIiRGU1RZUEUiID0gImJ0cmZzIiBdOyB0aGVuCisgICAgICAgIEtFUk5DTURMSU5FPSJyb290PS9kZXYvc2RhIHJ3IGNvbnNvbGU9dHR5QU1BMCwxMTUyMDAgY29uc29sZT10dHkgJEtFUk5FTF9ORVRXT1JLX0NNRCBtZW09JFFFTVVfTUVNT1JZIGhpZ2hyZXM9b2ZmIgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLU0gJHtNQUNISU5FX1NVQlRZUEV9IC1kcml2ZSBmaWxlPSRST09URlMsZm9ybWF0PXJhdyAtbm8tcmVib290ICRRRU1VX1VJX09QVElPTlMiCisgICAgZmkKKyAgICBpZiBbICIkRlNUWVBFIiA9ICJuZnMiIF07IHRoZW4KKyAgICAgICAgaWYgWyAiJE5GU19TRVJWRVIiID0gIjE5Mi4xNjguNy4xIiAtYSAhIC1kICIkTkZTX0RJUiIgXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiRXJyb3I6IE5GUyBtb3VudCBwb2ludCAkUk9PVEZTIGRvZXNuJ3QgZXhpc3QiCisgICAgICAgICAgICBjbGVhbnVwCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBmaQorICAgICAgICBLRVJOQ01ETElORT0icm9vdD0vZGV2L25mcyBuZnNyb290PSRORlNfU0VSVkVSOiRORlNfRElSLCRVTkZTX09QVFMgcncgY29uc29sZT10dHlBTUEwLDExNTIwMCAkS0VSTkVMX05FVFdPUktfQ01EIG1lbT0kUUVNVV9NRU1PUlkiCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtTSAke01BQ0hJTkVfU1VCVFlQRX0gLS1uby1yZWJvb3QgJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBmaQorICAgIGlmIFsgIiRNQUNISU5FIiA9ICJxZW11YXJtdjYiIF07IHRoZW4KKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VT1BUSU9OUyAtY3B1IGFybTExMzYiCisgICAgZmkKKyAgICBpZiBbICIkTUFDSElORSIgPSAicWVtdWFybXY3IiBdOyB0aGVuCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVU9QVElPTlMgLWNwdSBjb3J0ZXgtYTgiCisgICAgZmkKK2ZpCisKK2lmIFsgIiRNQUNISU5FIiA9ICJxZW11YXJtNjQiIF07IHRoZW4KKyAgICBRRU1VPXFlbXUtc3lzdGVtLWFhcmNoNjQKKworICAgIGV4cG9ydCBRRU1VX0FVRElPX0RSVj0ibm9uZSIKKyAgICBpZiBbICJ4JFNFUklBTFNURElPIiA9ICJ4IiBdIDsgdGhlbgorICAgICAgICBRRU1VX1VJX09QVElPTlM9Ii1ub2dyYXBoaWMiCisgICAgZWxzZQorICAgICAgICBRRU1VX1VJX09QVElPTlM9IiIKKyAgICBmaQorICAgIGlmIFsgIiR7RlNUWVBFOjA6M30iID0gImV4dCIgLW8gIiRGU1RZUEUiID0gImJ0cmZzIiBdOyB0aGVuCisgICAgICAgIEtFUk5DTURMSU5FPSJyb290PS9kZXYvdmRhIHJ3IGNvbnNvbGU9dHR5QU1BMCwzODQwMCBtZW09JFFFTVVfTUVNT1JZIGhpZ2hyZXM9b2ZmICRLRVJORUxfTkVUV09SS19DTUQiCisgICAgICAgICMgcWVtdS1zeXN0ZW0tYWFyY2g2NCBvbmx5IHN1cHBvcnQgJy1tYWNoaW5lIHZpcnQgLWNwdSBjb3J0ZXgtYTU3JyBmb3Igbm93CisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtbWFjaGluZSB2aXJ0IC1jcHUgY29ydGV4LWE1NyAkUk9PVEZTX09QVElPTlMgJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBmaQorICAgIGlmIFsgIiRGU1RZUEUiID0gIm5mcyIgXTsgdGhlbgorICAgICAgICBpZiBbICIkTkZTX1NFUlZFUiIgPSAiMTkyLjE2OC43LjEiIC1hICEgLWQgIiRORlNfRElSIiBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICJFcnJvcjogTkZTIG1vdW50IHBvaW50ICRST09URlMgZG9lc24ndCBleGlzdCIKKyAgICAgICAgICAgIGNsZWFudXAKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGZpCisgICAgICAgIEtFUk5DTURMSU5FPSJyb290PS9kZXYvbmZzIG5mc3Jvb3Q9JE5GU19TRVJWRVI6JE5GU19ESVIsJFVORlNfT1BUUyBydyBjb25zb2xlPXR0eUFNQTAsMzg0MDAgbWVtPSRRRU1VX01FTU9SWSBoaWdocmVzPW9mZiAkS0VSTkVMX05FVFdPUktfQ01EIgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLW1hY2hpbmUgdmlydCAtY3B1IGNvcnRleC1hNTcgJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBmaQorZmkKKworCitpZiBbICIkTUFDSElORSIgPSAicWVtdXg4NiIgXTsgdGhlbgorICAgIFFFTVU9cWVtdS1zeXN0ZW0taTM4NgorICAgIGlmIFsgIiRLVk1fQUNUSVZFIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICAgICAgQ1BVX1NVQlRZUEU9a3ZtMzIKKyAgICBlbHNlCisgICAgICAgIENQVV9TVUJUWVBFPXFlbXUzMgorICAgIGZpCisgICAgaWYgWyAhIC16ICIkdmdhX29wdGlvbiIgXTsgdGhlbgorICAgICAgICBRRU1VX1VJX09QVElPTlM9IiRRRU1VX1VJX09QVElPTlMiCisgICAgZWxzZQorICAgICAgICBRRU1VX1VJX09QVElPTlM9IiRRRU1VX1VJX09QVElPTlMgLXZnYSB2bXdhcmUiCisgICAgZmkKKyAgICBpZiBbICIke0ZTVFlQRTowOjN9IiA9ICJleHQiIC1vICIkRlNUWVBFIiA9ICJidHJmcyIgXTsgdGhlbgorICAgICAgICBLRVJOQ01ETElORT0idmdhPTAgdXZlc2FmYi5tb2RlX29wdGlvbj02NDB4NDgwLTMyIHJvb3Q9JERST09UIHJ3IG1lbT0kUUVNVV9NRU1PUlkgJEtFUk5FTF9ORVRXT1JLX0NNRCIKKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1jcHUgJENQVV9TVUJUWVBFICRST09URlNfT1BUSU9OUyAkUUVNVV9VSV9PUFRJT05TIgorICAgIGZpCisgICAgaWYgWyAiJHtGU1RZUEU6MDo0fSIgPSAiY3BpbyIgXTsgdGhlbgorICAgICAgICBLRVJOQ01ETElORT0idmdhPTAgdXZlc2FmYi5tb2RlX29wdGlvbj02NDB4NDgwLTMyIHJvb3Q9L2Rldi9yYW0wIHJ3IG1lbT0kUUVNVV9NRU1PUlkgJEtFUk5FTF9ORVRXT1JLX0NNRCIKKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1jcHUgJENQVV9TVUJUWVBFIC1pbml0cmQgJFJPT1RGUyAkUUVNVV9VSV9PUFRJT05TIgorICAgIGZpCisKKyAgICBpZiBbICIkRlNUWVBFIiA9ICJuZnMiIF07IHRoZW4KKyAgICAgICAgaWYgWyAiJE5GU19TRVJWRVIiID0gIjE5Mi4xNjguNy4xIiAtYSAhIC1kICIkTkZTX0RJUiIgXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiRXJyb3I6IE5GUyBtb3VudCBwb2ludCAkUk9PVEZTIGRvZXNuJ3QgZXhpc3QuIgorICAgICAgICAgICAgY2xlYW51cAorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZmkKKyAgICAgICAgS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9uZnMgbmZzcm9vdD0kTkZTX1NFUlZFUjokTkZTX0RJUiwkVU5GU19PUFRTIHJ3ICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSIKKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EICRRRU1VX1VJX09QVElPTlMiCisgICAgZmkKKyAgICBpZiBbICIkRlNUWVBFIiA9ICJ2bWRrIiAtbyAiJEZTVFlQRSIgPSAiaGRkaW1nIiAtbyAiJEZTVFlQRSIgPSAiaGRkZGlyZWN0IiBdOyB0aGVuCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAkUUVNVV9VSV9PUFRJT05TIgorICAgIGZpCisgICAgIyBDdXJyZW50bHkgb3Byb2ZpbGUncyBldmVudCBiYXNlZCBpbnRlcnJ1cHQgbW9kZSBkb2Vzbid0IHdvcmsoQnVnICM4MjgpIGluCisgICAgIyBxZW11eDg2IGFuZCBxZW11eDg2LTY0LiBXZSBjYW4gdXNlIHRpbWVyIGludGVycnVwdCBtb2RlIGZvciBub3cuCisgICAgS0VSTkNNRExJTkU9IiRLRVJOQ01ETElORSBvcHJvZmlsZS50aW1lcj0xIgorZmkKKworaWYgWyAiJE1BQ0hJTkUiID0gInFlbXV4ODYtNjQiIF07IHRoZW4KKyAgICBRRU1VPXFlbXUtc3lzdGVtLXg4Nl82NAorICAgIGlmIFsgIiRLVk1fQUNUSVZFIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICAgICAgQ1BVX1NVQlRZUEU9a3ZtNjQKKyAgICBlbHNlCisgICAgICAgIENQVV9TVUJUWVBFPWNvcmUyZHVvCisgICAgZmkKKyAgICBpZiBbICEgLXogIiR2Z2Ffb3B0aW9uIiBdOyB0aGVuCisgICAgICAgIFFFTVVfVUlfT1BUSU9OUz0iJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBlbHNlCisgICAgICAgIFFFTVVfVUlfT1BUSU9OUz0iJFFFTVVfVUlfT1BUSU9OUyAtdmdhIHZtd2FyZSIKKyAgICBmaQorICAgIGlmIFsgIiR7RlNUWVBFOjA6M30iID0gImV4dCIgLW8gIiRGU1RZUEUiID0gImJ0cmZzIiBdOyB0aGVuCisgICAgICAgIEtFUk5DTURMSU5FPSJ2Z2E9MCB1dmVzYWZiLm1vZGVfb3B0aW9uPTY0MHg0ODAtMzIgcm9vdD0kRFJPT1QgcncgbWVtPSRRRU1VX01FTU9SWSAkS0VSTkVMX05FVFdPUktfQ01EIgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLWNwdSAkQ1BVX1NVQlRZUEUgJFJPT1RGU19PUFRJT05TICRRRU1VX1VJX09QVElPTlMiCisgICAgZmkKKyAgICBpZiBbICIkRlNUWVBFIiA9ICJuZnMiIF07IHRoZW4KKyAgICAgICAgaWYgWyAieCRST09URlMiID0gIngiIF07IHRoZW4KKyAgICAgICAgICAgIFJPT1RGUz0vc3J2L25mcy9xZW11eDg2LTY0CisgICAgICAgIGZpCisgICAgICAgIGlmIFsgISAtZCAiJFJPT1RGUyIgXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiRXJyb3I6IE5GUyBtb3VudCBwb2ludCAkUk9PVEZTIGRvZXNuJ3QgZXhpc3QuIgorICAgICAgICAgICAgY2xlYW51cAorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZmkKKyAgICAgICAgS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9uZnMgbmZzcm9vdD0kTkZTX1NFUlZFUjokTkZTX0RJUiwkVU5GU19PUFRTIHJ3ICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSIKKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1jcHUgJENQVV9TVUJUWVBFICRRRU1VX1VJX09QVElPTlMiCisgICAgZmkKKyAgICBpZiBbICIkRlNUWVBFIiA9ICJ2bWRrIiAtbyAiJEZTVFlQRSIgPSAiaGRkaW1nIiAtbyAiJEZTVFlQRSIgPSAiaGRkZGlyZWN0IiBdOyB0aGVuCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtY3B1ICRDUFVfU1VCVFlQRSAkUUVNVV9VSV9PUFRJT05TIgorICAgIGZpCisgICAgIyBDdXJyZW50bHkgb3Byb2ZpbGUncyBldmVudCBiYXNlZCBpbnRlcnJ1cHQgbW9kZSBkb2Vzbid0IHdvcmsoQnVnICM4MjgpIGluCisgICAgIyBxZW11eDg2IGFuZCBxZW11eDg2LTY0LiBXZSBjYW4gdXNlIHRpbWVyIGludGVycnVwdCBtb2RlIGZvciBub3cuCisgICAgS0VSTkNNRExJTkU9IiRLRVJOQ01ETElORSBvcHJvZmlsZS50aW1lcj0xIgorZmkKKworaWYgWyAiJE1BQ0hJTkUiID0gInNwaXR6IiBdOyB0aGVuCisgICAgUUVNVT1xZW11LXN5c3RlbS1hcm0KKyAgICBpZiBbICIke0ZTVFlQRTowOjN9IiA9ICJleHQiIC1vICIkRlNUWVBFIiA9ICJidHJmcyIgXTsgdGhlbgorICAgICAgICBlY2hvICRST09URlMKKyAgICAgICAgUk9PVEZTPWByZWFkbGluayAtZiAkUk9PVEZTYAorICAgICAgICBlY2hvICRST09URlMKKyAgICAgICAgaWYgWyAhIC1lICIkUk9PVEZTLnFlbXVkaXNrIiBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICJBZGRpbmcgYSBwYXJ0aXRpb24gdGFibGUgdG8gdGhlIGV4dDMgaW1hZ2UgZm9yIHVzZSBieSBRRU1VLCBwbGVhc2Ugd2FpdC4uLiIKKyAgICAgICAgICAgIHJ1bnFlbXUtYWRkcHRhYmxlMmltYWdlICRST09URlMgJFJPT1RGUy5xZW11ZGlzaworICAgICAgICBmaQorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLU0gc3BpdHogLWhkYSAkUk9PVEZTLnFlbXVkaXNrIC1wb3J0cmFpdCIKKyAgICBmaQorZmkKKworaWYgWyAiJE1BQ0hJTkUiID0gInFlbXVtaXBzIiAtbyAiJE1BQ0hJTkUiID0gInFlbXVtaXBzZWwiIC1vICIkTUFDSElORSIgPSAicWVtdW1pcHM2NCIgXTsgdGhlbgorICAgIGNhc2UgIiRNQUNISU5FIiBpbgorICAgICAgIHFlbXVtaXBzKSAgIFFFTVU9cWVtdS1zeXN0ZW0tbWlwcyA7OworICAgICAgIHFlbXVtaXBzZWwpIFFFTVU9cWVtdS1zeXN0ZW0tbWlwc2VsIDs7CisgICAgICAgcWVtdW1pcHM2NCkgUUVNVT1xZW11LXN5c3RlbS1taXBzNjQgOzsKKyAgICBlc2FjCisgICAgTUFDSElORV9TVUJUWVBFPW1hbHRhCisgICAgUUVNVV9VSV9PUFRJT05TPSItdmdhIGNpcnJ1cyAkUUVNVV9VSV9PUFRJT05TIgorICAgIGlmIFsgIiR7RlNUWVBFOjA6M30iID0gImV4dCIgLW8gIiRGU1RZUEUiID0gImJ0cmZzIiBdOyB0aGVuCisgICAgICAgICNLRVJOQ01ETElORT0icm9vdD0vZGV2L2hkYSBjb25zb2xlPXR0eVMwIGNvbnNvbGU9dHR5MCAkS0VSTkVMX05FVFdPUktfQ01EIG1lbT0kUUVNVV9NRU1PUlkiCisgICAgICAgIEtFUk5DTURMSU5FPSJyb290PS9kZXYvaGRhIHJ3IGNvbnNvbGU9dHR5UzAgY29uc29sZT10dHkgJEtFUk5FTF9ORVRXT1JLX0NNRCBtZW09JFFFTVVfTUVNT1JZIgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLU0gJE1BQ0hJTkVfU1VCVFlQRSAtZHJpdmUgZmlsZT0kUk9PVEZTLGZvcm1hdD1yYXcgLW5vLXJlYm9vdCAkUUVNVV9VSV9PUFRJT05TIgorICAgIGZpCisgICAgaWYgWyAiJEZTVFlQRSIgPSAibmZzIiBdOyB0aGVuCisgICAgICAgIGlmIFsgIiRORlNfU0VSVkVSIiA9ICIxOTIuMTY4LjcuMSIgLWEgISAtZCAiJE5GU19ESVIiIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIkVycm9yOiBORlMgbW91bnQgcG9pbnQgJFJPT1RGUyBkb2Vzbid0IGV4aXN0IgorICAgICAgICAgICAgY2xlYW51cAorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZmkKKyAgICAgICAgS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9uZnMgY29uc29sZT10dHlTMCBjb25zb2xlPXR0eSBuZnNyb290PSRORlNfU0VSVkVSOiRORlNfRElSLCRVTkZTX09QVFMgcncgJEtFUk5FTF9ORVRXT1JLX0NNRCBtZW09JFFFTVVfTUVNT1JZIgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLU0gJE1BQ0hJTkVfU1VCVFlQRSAtbm8tcmVib290ICRRRU1VX1VJX09QVElPTlMiCisgICAgZmkKK2ZpCisKK2lmIFsgIiRNQUNISU5FIiA9ICJxZW11cHBjIiBdOyB0aGVuCisgICAgUUVNVT1xZW11LXN5c3RlbS1wcGMKKyAgICBNQUNISU5FX1NVQlRZUEU9bWFjOTkKKyAgICBDUFVfU1VCVFlQRT1HNAorICAgIFFFTVVfVUlfT1BUSU9OUz0iJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBpZiBbICIkU0xJUlBfRU5BQkxFRCIgPSAieWVzIiBdOyB0aGVuCisgICAgICAgIFFFTVVfTkVUV09SS19DTUQ9IiIKKyAgICBlbHNlCisgICAgICAgIFFFTVVfTkVUV09SS19DTUQ9Ii1uZXQgbmljLG1vZGVsPXBjbmV0ICRRRU1VX1RBUF9DTUQiCisgICAgZmkKKyAgICBpZiBbICIke0ZTVFlQRTowOjN9IiA9ICJleHQiIC1vICIkRlNUWVBFIiA9ICJidHJmcyIgXTsgdGhlbgorICAgICAgICBLRVJOQ01ETElORT0icm9vdD0vZGV2L2hkYSBydyBjb25zb2xlPXR0eVMwIGNvbnNvbGU9dHR5ICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSIKKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1jcHUgJENQVV9TVUJUWVBFIC1NICRNQUNISU5FX1NVQlRZUEUgLWRyaXZlIGZpbGU9JFJPT1RGUyxmb3JtYXQ9cmF3IC1uby1yZWJvb3QgJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBmaQorICAgIGlmIFsgIiRGU1RZUEUiID0gIm5mcyIgXTsgdGhlbgorICAgICAgICBpZiBbICIkTkZTX1NFUlZFUiIgPSAiMTkyLjE2OC43LjEiIC1hICEgLWQgIiRORlNfRElSIiBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICJFcnJvcjogTkZTIG1vdW50IHBvaW50ICRST09URlMgZG9lc24ndCBleGlzdCIKKyAgICAgICAgICAgIGNsZWFudXAKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGZpCisgICAgICAgIEtFUk5DTURMSU5FPSJyb290PS9kZXYvbmZzIGNvbnNvbGU9dHR5UzAgY29uc29sZT10dHkgbmZzcm9vdD0kTkZTX1NFUlZFUjokTkZTX0RJUiwkVU5GU19PUFRTIHJ3ICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSIKKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1jcHUgJENQVV9TVUJUWVBFIC1NICRNQUNISU5FX1NVQlRZUEUgLW5vLXJlYm9vdCAkUUVNVV9VSV9PUFRJT05TIgorICAgIGZpCitmaQorCitpZiBbICIkTUFDSElORSIgPSAicWVtdXNoNCIgXTsgdGhlbgorICAgIFFFTVU9cWVtdS1zeXN0ZW0tc2g0CisgICAgTUFDSElORV9TVUJUWVBFPXIyZAorICAgIFFFTVVfVUlfT1BUSU9OUz0iJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBpZiBbICIke0ZTVFlQRTowOjN9IiA9ICJleHQiIC1vICIkRlNUWVBFIiA9ICJidHJmcyIgXTsgdGhlbgorICAgICAgICAjS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9oZGEgY29uc29sZT10dHlTMCBjb25zb2xlPXR0eTAgJEtFUk5FTF9ORVRXT1JLX0NNRCBtZW09JFFFTVVfTUVNT1JZIgorICAgICAgICBLRVJOQ01ETElORT0icm9vdD0vZGV2L2hkYSBydyBjb25zb2xlPXR0eVNDMSBub2lvdHJhcCBlYXJseXByaW50az1zaC1zY2kuMSBjb25zb2xlPXR0eSAkS0VSTkVMX05FVFdPUktfQ01EIG1lbT0kUUVNVV9NRU1PUlkiCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtTSAkTUFDSElORV9TVUJUWVBFIC1oZGEgJFJPT1RGUyAtbm8tcmVib290ICRRRU1VX1VJX09QVElPTlMgLW1vbml0b3IgbnVsbCAtc2VyaWFsIHZjIC1zZXJpYWwgc3RkaW8iCisgICAgICAgIFNFUklBTFNURElPPSIxIgorICAgIGZpCisgICAgaWYgWyAiJEZTVFlQRSIgPSAibmZzIiBdOyB0aGVuCisgICAgICAgIGlmIFsgIiRORlNfU0VSVkVSIiA9ICIxOTIuMTY4LjcuMSIgLWEgISAtZCAiJE5GU19ESVIiIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIkVycm9yOiBORlMgbW91bnQgcG9pbnQgJFJPT1RGUyBkb2Vzbid0IGV4aXN0IgorICAgICAgICAgICAgY2xlYW51cAorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZmkKKyAgICAgICAgS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9uZnMgY29uc29sZT10dHlTQzEgbm9pb3RyYXAgZWFybHlwcmludGs9c2gtc2NpLjEgY29uc29sZT10dHkgbmZzcm9vdD0kTkZTX1NFUlZFUjokTkZTX0RJUiwkVU5GU19PUFRTIHJ3ICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSIKKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1NICRNQUNISU5FX1NVQlRZUEUgLW5vLXJlYm9vdCAkUUVNVV9VSV9PUFRJT05TIC1tb25pdG9yIG51bGwgLXNlcmlhbCB2YyAtc2VyaWFsIHN0ZGlvIgorICAgICAgICBTRVJJQUxTVERJTz0iMSIKKyAgICBmaQorZmkKKworaWYgWyAiJHtGU1RZUEU6MDozfSIgPSAiZXh0IiBdOyB0aGVuCisgICAgS0VSTkNNRExJTkU9IiRLRVJOQ01ETElORSByb290ZnN0eXBlPSRGU1RZUEUiCitmaQorCitpZiBbICIkTUFDSElORSIgPSAiYWtpdGEiIF07IHRoZW4KKyAgICBRRU1VPXFlbXUtc3lzdGVtLWFybQorICAgIGlmIFsgIiRGU1RZUEUiID0gImpmZnMyIiBdOyB0aGVuCisgICAgICAgIFJPT1RGUz1gcmVhZGxpbmsgLWYgJFJPT1RGU2AKKyAgICAgICAgaWYgWyAhIC1lICIkUk9PVEZTLnFlbXVmbGFzaCIgXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiQ29udmVydGluZyByYXcgaW1hZ2UgaW50byBmbGFzaCBpbWFnZSBmb3JtYXQgZm9yIHVzZSBieSBRRU1VLCBwbGVhc2Ugd2FpdC4uLiIKKyAgICAgICAgcmF3MmZsYXNoLmFraXRhIDwgJFJPT1RGUyA+ICRST09URlMucWVtdWZsYXNoCisgICAgICAgIGZpCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtTSBha2l0YSAtbXRkYmxvY2sgJFJPT1RGUy5xZW11Zmxhc2ggLXBvcnRyYWl0IgorICAgIGZpCitmaQorCitpZiBbICIkTUFDSElORSIgPSAicWVtdW1pY3JvYmxhemUiIF07IHRoZW4KKyAgICBRRU1VPXFlbXUtc3lzdGVtLW1pY3JvYmxhemVlbAorICAgIFFFTVVfU1lTVEVNX09QVElPTlM9Ii1NIHBldGFsb2dpeC1tbDYwNSAtc2VyaWFsIG1vbjpzdGRpbyAtZHRiICRLRVJORUwtJE1BQ0hJTkUuZHRiIgorICAgIGlmIFsgIiR7RlNUWVBFOjA6M30iID0gImV4dCIgLW8gIiR7RlNUWVBFOjA6NH0iID0gImNwaW8iIF07IHRoZW4KKyAgICAgICAgS0VSTkNNRExJTkU9ImVhcmx5cHJpbnRrIHJvb3Q9L2Rldi9yYW0gcnciCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9TWVNURU1fT1BUSU9OUyAtaW5pdHJkICRST09URlMiCisgICAgZmkKK2ZpCisKK2lmIFsgIiRNQUNISU5FIiA9ICJxZW11enlucSIgXTsgdGhlbgorICAgIFFFTVU9cWVtdS1zeXN0ZW0tYXJtCisgICAgUUVNVV9TWVNURU1fT1BUSU9OUz0iLU0geGlsaW54LXp5bnEtYTkgLXNlcmlhbCBudWxsIC1zZXJpYWwgbW9uOnN0ZGlvIC1kdGIgJEtFUk5FTC0kTUFDSElORS5kdGIiCisgICAgIyB6eW5xIHNlcmlhbCBwb3J0cyBhcmUgbmFtZWQgJ3R0eVBTMCcgYW5kICd0dHlQUzEnLCBmaXh1cCB0aGUgZGVmYXVsdCB2YWx1ZXMKKyAgICBTQ1JJUFRfS0VSTkVMX09QVD0kKGVjaG8gIiRTQ1JJUFRfS0VSTkVMX09QVCIgfCBzZWQgJ3MvY29uc29sZT10dHlTL2NvbnNvbGU9dHR5UFMvZycpCisgICAgaWYgWyAiJHtGU1RZUEU6MDozfSIgPSAiZXh0IiAtbyAiJHtGU1RZUEU6MDo0fSIgPSAiY3BpbyIgXTsgdGhlbgorICAgICAgICBLRVJOQ01ETElORT0iZWFybHlwcmludGsgcm9vdD0vZGV2L3JhbSBydyIKKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX1NZU1RFTV9PUFRJT05TIC1pbml0cmQgJFJPT1RGUyIKKyAgICBmaQorZmkKKworaWYgWyAieCRSQU1GUyIgPSAieHRydWUiIF07IHRoZW4KKyAgICBRRU1VT1BUSU9OUz0iLWluaXRyZCAkUk9PVEZTIC1ub2dyYXBoaWMiCisgICAgS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9yYW0wIGNvbnNvbGU9dHR5UzAgZGVidWdzaGVsbCIKK2ZpCisKK2lmIFsgIngkSVNPRlMiID0gInh0cnVlIiBdOyB0aGVuCisgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1jZHJvbSAkUk9PVEZTICRRRU1VX1VJX09QVElPTlMiCitmaQorCitpZiBbICJ4JFFFTVVPUFRJT05TIiA9ICJ4IiBdOyB0aGVuCisgICAgZWNobyAiRXJyb3I6IFVuYWJsZSB0byBzdXBwb3J0IHRoaXMgY29tYmluYXRpb24gb2Ygb3B0aW9ucyIKKyAgICBjbGVhbnVwCisgICAgcmV0dXJuIDEKK2ZpCisKK2lmIFsgIiRUQ1BTRVJJQUxfUE9SVE5VTSIgIT0gIiIgXTsgdGhlbgorICAgIGlmIFsgIiRNQUNISU5FIiA9ICJxZW11YXJtNjQiIF07IHRoZW4KKyAgICAgICAgU0NSSVBUX1FFTVVfRVhUUkFfT1BUPSIkU0NSSVBUX1FFTVVfRVhUUkFfT1BUIC1kZXZpY2UgdmlydGlvLXNlcmlhbC1kZXZpY2UgLWNoYXJkZXYgc29ja2V0LGlkPXZpcnRjb24scG9ydD0kVENQU0VSSUFMX1BPUlROVU0saG9zdD0xMjcuMC4wLjEgLWRldmljZSB2aXJ0Y29uc29sZSxjaGFyZGV2PXZpcnRjb24iCisgICAgZWxzZQorICAgICAgICBTQ1JJUFRfUUVNVV9FWFRSQV9PUFQ9IiRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQgLXNlcmlhbCB0Y3A6MTI3LjAuMC4xOiRUQ1BTRVJJQUxfUE9SVE5VTSIKKyAgICBmaQorZmkKKworUEFUSD0kT0VDT1JFX05BVElWRV9TWVNST09UL3Vzci9iaW46JFBBVEgKKworUUVNVUJJTj1gd2hpY2ggJFFFTVUgMj4gL2Rldi9udWxsYAoraWYgWyAhIC14ICIkUUVNVUJJTiIgXTsgdGhlbgorICAgIGVjaG8gIkVycm9yOiBObyBRRU1VIGJpbmFyeSAnJFFFTVUnIGNvdWxkIGJlIGZvdW5kLiIKKyAgICBjbGVhbnVwCisgICAgcmV0dXJuIDEKK2ZpCisKK05FRURfR0w9YGxkZCAkUUVNVUJJTi8kUUVNVSAyPiYxIHwgZ3JlcCBsaWJHTFVgCisjIFdlIGNhbid0IHJ1biB3aXRob3V0IGEgbGliR0wuc28KK2lmIFsgIiRORUVEX0dMIiAhPSAiIiBdOyB0aGVuCisgICAgbGliZ2w9J25vJworCisgICAgWyAtZSAvdXNyL2xpYi9saWJHTC5zbyAtYSAtZSAvdXNyL2xpYi9saWJHTFUuc28gXSAmJiBsaWJnbD0neWVzJworICAgIFsgLWUgL3Vzci9saWI2NC9saWJHTC5zbyAtYSAtZSAvdXNyL2xpYjY0L2xpYkdMVS5zbyBdICYmIGxpYmdsPSd5ZXMnCisgICAgWyAtZSAvdXNyL2xpYi8qLWxpbnV4LWdudS9saWJHTC5zbyAtYSAtZSAvdXNyL2xpYi8qLWxpbnV4LWdudS9saWJHTFUuc28gXSAmJiBsaWJnbD0neWVzJworCisgICAgaWYgWyAiJGxpYmdsIiAhPSAneWVzJyBdOyB0aGVuCisgICAgICAgIGVjaG8gIllvdSBuZWVkIGxpYkdMLnNvIGFuZCBsaWJHTFUuc28gdG8gZXhpc3QgaW4geW91ciBsaWJyYXJ5IHBhdGggdG8gcnVuIHRoZSBRRU1VIGVtdWxhdG9yLgorICAgICAgICBVYnVudHUgcGFja2FnZSBuYW1lcyBhcmU6IGxpYmdsMS1tZXNhLWRldiBhbmQgbGliZ2x1MS1tZXNhLWRldi4KKyAgICAgICAgRmVkb3JhIHBhY2thZ2UgbmFtZXMgYXJlOiBtZXNhLWxpYkdMLWRldmVsIG1lc2EtbGliR0xVLWRldmVsLiIKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZmkKK2ZpCisKK2RvX3F1aXQoKSB7CisgICAgY2xlYW51cAorICAgIHJldHVybiAxCit9CisKK3RyYXAgZG9fcXVpdCBJTlQgVEVSTSBRVUlUCisKKyMgcWVtdSBnb3Qgc2VnZmF1bHQgaWYgbGlua2VkIHdpdGggblZpZGlhJ3MgbGliZ2wKK0dMX0xEX1BSRUxPQUQ9JExEX1BSRUxPQUQKKworaWYgbGRkICRRRU1VQklOIHwgZ3JlcCAtaSBudmlkaWEgJj4gL2Rldi9udWxsCit0aGVuCitjYXQgPDwgRU9NCitXQVJOSU5HOiBuVmlkaWEgcHJvcHJpZXRhcnkgT3BlbkdMIGxpYnJhcmllcyBkZXRlY3RlZC4KK25WaWRpYSdzIE9wZW5HTCBsaWJyYXJpZXMgYXJlIGtub3duIHRvIGhhdmUgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2l0aCBxZW11LAorcmVzdWx0aW5nIGluIGEgc2VnZmF1bHQuIFBsZWFzZSB1bmluc3RhbGwgdGhlc2UgZHJpdmVycyBvciBlbnN1cmUgdGhlIG1lc2EgbGliR0wKK2xpYnJhcmllcyBwcmVjZWRlIG52aWRpYSdzIHZpYSBMRF9QUkVMT0FEKEFscmVhZHkgZG8gaXQgb24gVWJ1bnR1IDEwKS4KK0VPTQorCisjIEF1dG9tYXRpY2FsbHkgdXNlIFVidW50dSBzeXN0ZW0ncyBtZXNhIGxpYkdMLCBvdGhlciBkaXN0cm8gY2FuIGFkZCBpdHMgb3duIHBhdGgKK2lmIGdyZXAgLWkgdWJ1bnR1IC9ldGMvbHNiLXJlbGVhc2UgJj4gL2Rldi9udWxsCit0aGVuCisgICAgIyBwcmVjZWRlIG52aWRpYSdzIGRyaXZlciBvbiBVYnVudHUgMTAKKyAgICBVQlVOVFVfTUFJTl9WRVJTSU9OPWBjYXQgL2V0Yy9sc2ItcmVsZWFzZSB8Z3JlcCBESVNUUklCX1JFTEVBU0UgfGN1dCAtZD0gIC1mIDJ8IGN1dCAtZC4gLWYgMWAKKyAgICBpZiBbICIkVUJVTlRVX01BSU5fVkVSU0lPTiIgPSAiMTAiIF07CisgICAgdGhlbgorICAgICAgICBHTF9QQVRIPSIiCisgICAgICAgIGlmIHRlc3QgLWUgL3Vzci9saWIvbGliR0wuc28KKyAgICAgICAgdGhlbiAKKyAgICAgICAgICAgIEdMX1BBVEg9Ii91c3IvbGliL2xpYkdMLnNvIgorICAgICAgICBlbGlmIHRlc3QgLWUgL3Vzci9saWIveDg2XzY0LWxpbnV4LWdudS9saWJHTC5zbworICAgICAgICB0aGVuCisgICAgICAgICAgICBHTF9QQVRIPSIvdXNyL2xpYi94ODZfNjQtbGludXgtZ251L2xpYkdMLnNvIgorICAgICAgICBmaQorCisgICAgICAgIGVjaG8gIlNraXAgblZpZGlhJ3MgbGliR0wgb24gVWJ1bnR1IDEwISIKKyAgICAgICAgR0xfTERfUFJFTE9BRD0iJEdMX1BBVEggJExEX1BSRUxPQUQiCisgICAgZmkKK2ZpCitmaQorCitpZiBbICJ4JFNFUklBTFNURElPIiA9ICJ4MSIgXTsgdGhlbgorICAgICAgICBlY2hvICJJbnRlcnJ1cHQgY2hhcmFjdGVyIGlzICdeXSciCisgICAgICAgIHN0dHkgaW50ciBeXQorZmkKKworZWNobyAiUnVubmluZyAkUUVNVS4uLiIKKyMgLW5vLXJlYm9vdCBpcyBhIG1hbmRhdG9yeSBvcHRpb24gLSBzZWUgYnVnICMxMDAKK2lmIFsgIiRGU1RZUEUiID0gInZtZGsiIC1vICIkRlNUWVBFIiA9ICJoZGRpbWciIC1vICIkRlNUWVBFIiA9ICJoZGRkaXJlY3QiIF07IHRoZW4KKyAgICBlY2hvICRRRU1VQklOICRWTSAkUUVNVU9QVElPTlMgJFNFUklBTE9QVFMgLW5vLXJlYm9vdCAkU0NSSVBUX1FFTVVfT1BUICRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQKKyAgICBMRF9QUkVMT0FEPSIkR0xfTERfUFJFTE9BRCIgJFFFTVVCSU4gJFZNICRRRU1VT1BUSU9OUyAkU0VSSUFMT1BUUyAtbm8tcmVib290ICRTQ1JJUFRfUUVNVV9PUFQgJFNDUklQVF9RRU1VX0VYVFJBX09QVAorZWxpZiBbICIkRlNUWVBFIiA9ICJpc28iIF07IHRoZW4KKyAgICBlY2hvICRRRU1VQklOICRRRU1VT1BUSU9OUyAkU0VSSUFMT1BUUyAtbm8tcmVib290ICRTQ1JJUFRfUUVNVV9PUFQgJFNDUklQVF9RRU1VX0VYVFJBX09QVAorICAgIExEX1BSRUxPQUQ9IiRHTF9MRF9QUkVMT0FEIiAkUUVNVUJJTiAkUUVNVU9QVElPTlMgJFNFUklBTE9QVFMgLW5vLXJlYm9vdCAkU0NSSVBUX1FFTVVfT1BUICRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQKK2Vsc2UKKyAgICBlY2hvICRRRU1VQklOIC1rZXJuZWwgJEtFUk5FTCAkUUVNVU9QVElPTlMgJFNMSVJQX0NNRCAkU0VSSUFMT1BUUyAtbm8tcmVib290ICRTQ1JJUFRfUUVNVV9PUFQgJFNDUklQVF9RRU1VX0VYVFJBX09QVCAtLWFwcGVuZCAnIickS0VSTkNNRExJTkUgJFNDUklQVF9LRVJORUxfT1BUJyInCisgICAgTERfUFJFTE9BRD0iJEdMX0xEX1BSRUxPQUQiICRRRU1VQklOIC1rZXJuZWwgJEtFUk5FTCAkUUVNVU9QVElPTlMgJFNFUklBTE9QVFMgLW5vLXJlYm9vdCAkU0NSSVBUX1FFTVVfT1BUICRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQgLS1hcHBlbmQgIiRLRVJOQ01ETElORSAkU0NSSVBUX0tFUk5FTF9PUFQiCitmaQorcmV0PSQ/CitpZiBbICIkU0xJUlBfRU5BQkxFRCIgIT0gInllcyIgXTsgdGhlbgorICAgICAgICBjbGVhbnVwCitmaQorCisjc2V0IHRoZSBvcmlnaW5hbCBzdHR5IHZhbHVlcyBiZWZvcmUgZXhpdAorc3R0eSAke09SSUdfU1RUWX0KK3RyYXAgLSBJTlQgVEVSTSBRVUlUCisKK3JldHVybiAkcmV0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS5SRUFETUUgYi95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS5SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkwOGQ4MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LlJFQURNRQpAQCAtMCwwICsxLDQyIEBACitVc2luZyBPRSBpbWFnZXMgd2l0aCBRRU1VCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK09FLUNvcmUgY2FuIGdlbmVyYXRlIHFlbXUgYm9vdGFibGUga2VybmVscyBhbmQgaW1hZ2VzIHdpdGggY2FuIGJlIHVzZWQgCitvbiBhIGRlc2t0b3Agc3lzdGVtLiBUaGUgc2NyaXB0cyBjdXJyZW50bHkgc3VwcG9ydCBib290aW5nIEFSTSwgTUlQUywgUG93ZXJQQworYW5kIHg4NiAoMzIgYW5kIDY0IGJpdCkgaW1hZ2VzLiBUaGUgc2NyaXB0cyBjYW4gYmUgdXNlZCB3aXRoaW4gdGhlIE9FIGJ1aWxkIAorc3lzdGVtIG9yIGV4dGVybmFseS4KKworVGhlIHJ1bnFlbXUgc2NyaXB0IGlzIHJ1biBhczogCisKKyAgIHJ1bnFlbXUgPG1hY2hpbmU+IDx6aW1hZ2U+IDxmaWxlc3lzdGVtPgorCit3aGVyZToKKworICAgPG1hY2hpbmU+IGlzIHRoZSBtYWNoaW5lL2FyY2hpdGVjdHVyZSB0byB1c2UgKHFlbXVhcm0vcWVtdW1pcHMvcWVtdXBwYy9xZW11eDg2L3FlbXV4ODYtNjQpCisgICA8emltYWdlPiBpcyB0aGUgcGF0aCB0byBhIGtlcm5lbCAoZS5nLiB6aW1hZ2UtcWVtdWFybS5iaW4pCisgICA8ZmlsZXN5c3RlbT4gaXMgdGhlIHBhdGggdG8gYW4gZXh0MiBpbWFnZSAoZS5nLiBmaWxlc3lzdGVtLXFlbXVhcm0uZXh0Mikgb3IgYW4gbmZzIGRpcmVjdG9yeQorICAgCitJZiA8bWFjaGluZT4gaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgc2NyaXB0IHdpbGwgdHJ5IHRvIGRldGVjdCB0aGUgbWFjaGluZSBuYW1lIAorZnJvbSB0aGUgbmFtZSBvZiB0aGUgPHppbWFnZT4gZmlsZS4KKworSWYgPGZpbGVzeXN0ZW0+IGlzbid0IHNwZWNpZmllZCwgbmZzIGJvb3Rpbmcgd2lsbCBiZSBhc3N1bWVkLgorCitXaGVuIHVzZWQgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0sIGl0IHdpbGwgZGVmYXVsdCB0byBxZW11YXJtLCBleHQyIGFuZCB0aGUgbGFzdCBrZXJuZWwgYW5kIAorY29yZS1pbWFnZS1zYXRvLXNkayBpbWFnZSBidWlsdCBieSB0aGUgYnVpbGQgc3lzdGVtLiBJZiBhbiBzZGsgaW1hZ2UgaXNuJ3QgcHJlc2VudCBpdCB3aWxsIGxvb2sKK2ZvciBzYXRvIGFuZCBtaW5pbWFsIGltYWdlcy4KKworRnVsbCB1c2FnZSBpbnN0cnVjdGlvbnMgY2FuIGJlIHNlZW4gYnkgcnVubmluZyB0aGUgY29tbWFuZCB3aXRoIG5vIG9wdGlvbnMgc3BlY2lmaWVkLgorCisKK05vdGVzCis9PT09PQorCisgLSBUaGUgc2NyaXB0cyBydW4gcWVtdSB1c2luZyBzdWRvLiBDaGFuZ2UgcGVybXMgb24gL2Rldi9uZXQvdHVuIHRvIAorICAgcnVuIGFzIG5vbiByb290LiBUaGUgcnVucWVtdS1nZW4tdGFwZGV2cyBzY3JpcHQgY2FuIGFsc28gYmUgdXNlZCBieQorICAgcm9vdCB0byBwcmVwb3B1bGF0ZSB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBkZXZpY2VzLgorIC0gWW91IGNhbiBhY2Nlc3MgdGhlIGhvc3QgY29tcHV0ZXIgYXQgMTkyLjE2OC43LjEgd2l0aGluIHRoZSBpbWFnZS4KKyAtIFlvdXIgcWVtdSBzeXN0ZW0gd2lsbCBiZSBhY2Nlc3NpYmxlIGFzIDE5Mi4xNi43LjIuCisgLSBUaGUgc2NyaXB0IGV4dHJhY3RzIHRoZSByb290IGZpbGVzeXN0ZW0gc3BlY2lmaWVkIHVuZGVyIHBzZXVkbyBhbmQgc2V0cyB1cCBhIHVzZXJzcGFjZQorICAgTkZTIHNlcnZlciB0byBzaGFyZSB0aGUgaW1hZ2Ugb3ZlciBieSBkZWZhdWx0IG1lYW5pbmcgdGhlIGZpbGVzeXN0ZW0gY2FuIGJlIGFjY2Vzc2VkIGJ5CisgICBib3RoIHRoZSBob3N0IGFuZCBndWVzdCBzeXN0ZW1zLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvc2VuZC1lcnJvci1yZXBvcnQgYi95b2N0by1wb2t5L3NjcmlwdHMvc2VuZC1lcnJvci1yZXBvcnQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWExYjk2NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9zZW5kLWVycm9yLXJlcG9ydApAQCAtMCwwICsxLDE5NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgU2VuZHMgYW4gZXJyb3IgcmVwb3J0IChpZiB0aGUgcmVwb3J0LWVycm9yIGNsYXNzIHdhcyBlbmFibGVkKSB0byBhCisjIHJlbW90ZSBzZXJ2ZXIuCisjCisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIyBBdXRob3I6IEFuZHJlZWEgUHJvY2EgPGFuZHJlZWEuYi5wcm9jYUBpbnRlbC5jb20+CisjIEF1dGhvcjogTWljaGFlbCBXb29kIDxtaWNoYWVsLmcud29vZEBpbnRlbC5jb20+CisKK2ltcG9ydCB1cmxsaWIyCitpbXBvcnQgc3lzCitpbXBvcnQganNvbgoraW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgbG9nZ2luZworCit2ZXJzaW9uID0gIjAuMyIKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoInNlbmQtZXJyb3ItcmVwb3J0IikKK2xvZ2dpbmcuYmFzaWNDb25maWcoZm9ybWF0PSclKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcycpCisKK2RlZiBnZXRQYXlsb2FkTGltaXQodXJsKToKKyAgICByZXEgPSB1cmxsaWIyLlJlcXVlc3QodXJsLCBOb25lKQorICAgIHRyeToKKyAgICAgICAgcmVzcG9uc2UgPSB1cmxsaWIyLnVybG9wZW4ocmVxKQorICAgIGV4Y2VwdCB1cmxsaWIyLlVSTEVycm9yIGFzIGU6CisgICAgICAgICMgVXNlIHRoaXMgb3Bwb3J0dW5pdHkgdG8gYmFpbCBvdXQgaWYgd2UgY2FuJ3QgZXZlbiBjb250YWN0IHRoZSBzZXJ2ZXIKKyAgICAgICAgbG9nLmVycm9yKCJDb3VsZCBub3QgY29udGFjdCBzZXJ2ZXI6ICIgKyB1cmwpCisgICAgICAgIGxvZy5lcnJvcihlLnJlYXNvbikKKyAgICAgICAgc3lzLmV4aXQoMSkKKyAgICB0cnk6CisgICAgICAgIHJldCA9IGpzb24ubG9hZHMocmVzcG9uc2UucmVhZCgpKQorICAgICAgICBtYXhfbG9nX3NpemUgPSByZXQuZ2V0KCdtYXhfbG9nX3NpemUnLCAwKQorICAgICAgICByZXR1cm4gaW50KG1heF9sb2dfc2l6ZSkKKyAgICBleGNlcHQ6CisgICAgICAgIHBhc3MKKworICAgIHJldHVybiAwCisKK2RlZiBhc2tfZm9yX2NvbnRhY3RkZXRhaWxzKCk6CisgICAgcHJpbnQoIlBsZWFzZSBlbnRlciB5b3VyIG5hbWUgYW5kIHlvdXIgZW1haWwgKG9wdGlvbmFsbHkpLCB0aGV5J2xsIGJlIHNhdmVkIGluIHRoZSBmaWxlIHlvdSBzZW5kLiIpCisgICAgdXNlcm5hbWUgPSByYXdfaW5wdXQoIk5hbWUgKHJlcXVpcmVkKTogIikKKyAgICBlbWFpbCA9IHJhd19pbnB1dCgiRS1tYWlsIChub3QgcmVxdWlyZWQpOiAiKQorICAgIHJldHVybiB1c2VybmFtZSwgZW1haWwKKworZGVmIGVkaXRfY29udGVudChqc29uX2ZpbGVfcGF0aCk6CisgICAgZWRpdCA9IHJhd19pbnB1dCgiUmV2aWV3IGluZm9ybWF0aW9uIGJlZm9yZSBzZW5kaW5nPyAoeS9uKTogIikKKyAgICBpZiAneScgaW4gZWRpdCBvciAnWScgaW4gZWRpdDoKKyAgICAgICAgZWRpdG9yID0gb3MuZW52aXJvbi5nZXQoJ0VESVRPUicsIE5vbmUpCisgICAgICAgIGlmIGVkaXRvcjoKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbZWRpdG9yLCBqc29uX2ZpbGVfcGF0aF0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2cuZXJyb3IoIlBsZWFzZSBzZXQgeW91ciBFRElUT1IgdmFsdWUiKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICByZXR1cm4gRmFsc2UKKworZGVmIHByZXBhcmVfZGF0YShhcmdzKToKKyAgICAjIGF0dGVtcHQgdG8gZ2V0IHRoZSBtYXhfbG9nX3NpemUgZnJvbSB0aGUgc2VydmVyJ3Mgc2V0dGluZ3MKKyAgICBtYXhfbG9nX3NpemUgPSBnZXRQYXlsb2FkTGltaXQoImh0dHA6Ly8iK2FyZ3Muc2VydmVyKyIvQ2xpZW50UG9zdC9KU09OIikKKworICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShhcmdzLmVycm9yX2ZpbGUpOgorICAgICAgICBsb2cuZXJyb3IoIk5vIGRhdGEgZmlsZSBmb3VuZC4iKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaG9tZSA9IG9zLnBhdGguZXhwYW5kdXNlcigifiIpCisgICAgdXNlcmZpbGUgPSBvcy5wYXRoLmpvaW4oaG9tZSwgIi5vZS1zZW5kLWVycm9yIikKKworICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKHVzZXJmaWxlLCAncicpIGFzIHVzZXJmaWxlX2ZwOgorICAgICAgICAgICAgaWYgbGVuKGFyZ3MubmFtZSkgPT0gMDoKKyAgICAgICAgICAgICAgICBhcmdzLm5hbWUgPSB1c2VyZmlsZV9mcC5yZWFkbGluZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICN1c2UgZW1wdHkgcmVhZGxpbmUgdG8gaW5jcmVtZW50IHRoZSBmcAorICAgICAgICAgICAgICAgIHVzZXJmaWxlX2ZwLnJlYWRsaW5lKCkKKworICAgICAgICAgICAgaWYgbGVuKGFyZ3MuZW1haWwpID09IDA6CisgICAgICAgICAgICAgICAgYXJncy5lbWFpbCA9IHVzZXJmaWxlX2ZwLnJlYWRsaW5lKCkKKyAgICBleGNlcHQ6CisgICAgICAgIHBhc3MKKworICAgIGlmIGFyZ3MuYXNzdW1lX3llcyA9PSBUcnVlIGFuZCBsZW4oYXJncy5uYW1lKSA9PSAwOgorICAgICAgICBsb2cuZXJyb3IoIk5hbWUgbmVlZHMgdG8gYmUgcHJvdmlkZWQgZWl0aGVyIHZpYSAiK3VzZXJmaWxlKyIgb3IgYXMgYW4gYXJndW1lbnQgKC1uKS4iKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgd2hpbGUgbGVuKGFyZ3MubmFtZSkgPD0gMCBhbmQgbGVuKGFyZ3MubmFtZSkgPCA1MDoKKyAgICAgICAgcHJpbnQoIlxuTmFtZSBuZWVkcyB0byBiZSBnaXZlbiBhbmQgbXVzdCBub3QgbW9yZSB0aGFuIDUwIGNoYXJhY3RlcnMuIikKKyAgICAgICAgYXJncy5uYW1lLCBhcmdzLmVtYWlsID0gYXNrX2Zvcl9jb250YWN0ZGV0YWlscygpCisKKyAgICB3aXRoIG9wZW4odXNlcmZpbGUsICd3JykgYXMgdXNlcmZpbGVfZnA6CisgICAgICAgIHVzZXJmaWxlX2ZwLndyaXRlKGFyZ3MubmFtZS5zdHJpcCgpICsgIlxuIikKKyAgICAgICAgdXNlcmZpbGVfZnAud3JpdGUoYXJncy5lbWFpbC5zdHJpcCgpICsgIlxuIikKKworICAgIHdpdGggb3BlbihhcmdzLmVycm9yX2ZpbGUsICdyJykgYXMganNvbl9mcDoKKyAgICAgICAgZGF0YSA9IGpzb25fZnAucmVhZCgpCisKKyAgICAgICAganNvbmRhdGEgPSBqc29uLmxvYWRzKGRhdGEpCisgICAgICAgIGpzb25kYXRhWyd1c2VybmFtZSddID0gYXJncy5uYW1lLnN0cmlwKCkKKyAgICAgICAganNvbmRhdGFbJ2VtYWlsJ10gPSBhcmdzLmVtYWlsLnN0cmlwKCkKKyAgICAgICAganNvbmRhdGFbJ2xpbmtfYmFjayddID0gYXJncy5saW5rX2JhY2suc3RyaXAoKQorICAgICAgICAjIElmIHdlIGdvdCBhIG1heF9sb2dfc2l6ZSB0aGVuIHVzZSB0aGlzIHRvIHRydW5jYXRlIHRvIGdldCB0aGUgbGFzdAorICAgICAgICAjIG1heF9sb2dfc2l6ZSBieXRlcyBmcm9tIHRoZSBlbmQKKyAgICAgICAgaWYgbWF4X2xvZ19zaXplICE9IDA6CisgICAgICAgICAgICBmb3IgZmFpbCBpbiBqc29uZGF0YVsnZmFpbHVyZXMnXToKKyAgICAgICAgICAgICAgICBpZiBsZW4oZmFpbFsnbG9nJ10pID4gbWF4X2xvZ19zaXplOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiVHJ1bmNhdGluZyBsb2cgdG8gYWxsb3cgZm9yIHVwbG9hZCIKKyAgICAgICAgICAgICAgICAgICAgZmFpbFsnbG9nJ10gPSBmYWlsWydsb2cnXVstbWF4X2xvZ19zaXplOl0KKworICAgICAgICBkYXRhID0ganNvbi5kdW1wcyhqc29uZGF0YSwgaW5kZW50PTQsIHNvcnRfa2V5cz1UcnVlKQorCisgICAgIyBXcml0ZSBiYWNrIHRoZSByZXN1bHQgd2hpY2ggd2lsbCBjb250YWluIGFsbCBmaWVsZHMgZmlsbGVkIGluIGFuZAorICAgICMgYW55IHBvc3QgcHJvY2Vzc2luZyBkb25lIG9uIHRoZSBsb2cgZGF0YQorICAgIHdpdGggb3BlbihhcmdzLmVycm9yX2ZpbGUsICJ3IikgYXMganNvbl9mcDoKKyAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgIGpzb25fZnAud3JpdGUoZGF0YSkKKworCisgICAgaWYgYXJncy5hc3N1bWVfeWVzID09IEZhbHNlIGFuZCBlZGl0X2NvbnRlbnQoYXJncy5lcnJvcl9maWxlKToKKyAgICAgICAgI1dlJ2xsIG5lZWQgdG8gcmUtcmVhZCB0aGUgY29udGVudCBpZiB3ZSBlZGl0ZWQgaXQKKyAgICAgICAgd2l0aCBvcGVuKGFyZ3MuZXJyb3JfZmlsZSwgJ3InKSBhcyBqc29uX2ZwOgorICAgICAgICAgICAgZGF0YSA9IGpzb25fZnAucmVhZCgpCisKKyAgICByZXR1cm4gZGF0YQorCisKK2RlZiBzZW5kX2RhdGEoZGF0YSwgYXJncyk6CisgICAgaGVhZGVycz17J0NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ1VzZXItQWdlbnQnOiAic2VuZC1lcnJvci1yZXBvcnQvIit2ZXJzaW9ufQorCisgICAgaWYgYXJncy5qc29uOgorICAgICAgICB1cmwgPSAiaHR0cDovLyIrYXJncy5zZXJ2ZXIrIi9DbGllbnRQb3N0L0pTT04vIgorICAgIGVsc2U6CisgICAgICAgIHVybCA9ICJodHRwOi8vIithcmdzLnNlcnZlcisiL0NsaWVudFBvc3QvIgorCisgICAgcmVxID0gdXJsbGliMi5SZXF1ZXN0KHVybCwgZGF0YT1kYXRhLCBoZWFkZXJzPWhlYWRlcnMpCisgICAgdHJ5OgorICAgICAgICByZXNwb25zZSA9IHVybGxpYjIudXJsb3BlbihyZXEpCisgICAgZXhjZXB0IHVybGxpYjIuSFRUUEVycm9yLCBlOgorICAgICAgICBsb2dnaW5nLmVycm9yKGUucmVhc29uKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgcHJpbnQgcmVzcG9uc2UucmVhZCgpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBhcmdfcGFyc2UgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iVGhpcyBzY3JpcHRzIHdpbGwgc2VuZCBhbiBlcnJvciByZXBvcnQgdG8geW91ciBzcGVjaWZpZWQgZXJyb3ItcmVwb3J0LXdlYiBzZXJ2ZXIuIikKKworICAgIGFyZ19wYXJzZS5hZGRfYXJndW1lbnQoImVycm9yX2ZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iR2VuZXJhdGVkIGVycm9yIHJlcG9ydCBmaWxlIGxvY2F0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyKQorCisgICAgYXJnX3BhcnNlLmFkZF9hcmd1bWVudCgiLXkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tYXNzdW1lLXllcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJBc3N1bWUgeWVzIHRvIGFsbCBxdWVyaWVzIGFuZCBkbyBub3QgcHJvbXB0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisKKyAgICBhcmdfcGFyc2UuYWRkX2FyZ3VtZW50KCItcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1zZXJ2ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iU2VydmVyIHRvIHNlbmQgZXJyb3IgcmVwb3J0IHRvIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0iZXJyb3JzLnlvY3RvcHJvamVjdC5vcmciKQorCisgICAgYXJnX3BhcnNlLmFkZF9hcmd1bWVudCgiLWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tZW1haWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRW1haWwgYWRkcmVzcyB0byBiZSB1c2VkIGZvciBjb250YWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0iIikKKworICAgIGFyZ19wYXJzZS5hZGRfYXJndW1lbnQoIi1uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICItLW5hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iU3VibWl0dGVyIG5hbWUgdXNlZCB0byBpZGVudGlmeSB5b3VyIGVycm9yIHJlcG9ydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9IiIpCisKKyAgICBhcmdfcGFyc2UuYWRkX2FyZ3VtZW50KCItbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1saW5rLWJhY2siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iQSB1cmwgdG8gbGluayBiYWNrIHRvIHRoaXMgYnVpbGQgZnJvbSB0aGUgZXJyb3IgcmVwb3J0IHNlcnZlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9IiIpCisKKyAgICBhcmdfcGFyc2UuYWRkX2FyZ3VtZW50KCItaiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1qc29uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlJldHVybiB0aGUgcmVzdWx0IGluIGpzb24gZm9ybWF0LCBzaWxlbmNlcyBhbGwgb3RoZXIgb3V0cHV0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisKKworCisgICAgYXJncyA9IGFyZ19wYXJzZS5wYXJzZV9hcmdzKCkKKworICAgIGlmIChhcmdzLmpzb24gPT0gRmFsc2UpOgorICAgICAgICBwcmludCAiUHJlcGFyaW5nIHRvIHNlbmQgZXJyb3JzIHRvOiAiK2FyZ3Muc2VydmVyCisKKyAgICBkYXRhID0gcHJlcGFyZV9kYXRhKGFyZ3MpCisgICAgc2VuZF9kYXRhKGRhdGEsIGFyZ3MpCisKKyAgICBzeXMuZXhpdCgwKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3NlbmQtcHVsbC1yZXF1ZXN0IGIveW9jdG8tcG9reS9zY3JpcHRzL3NlbmQtcHVsbC1yZXF1ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU3NTU0OWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvc2VuZC1wdWxsLXJlcXVlc3QKQEAgLTAsMCArMSwxNzkgQEAKKyMhL2Jpbi9iYXNoCisjCisjIENvcHlyaWdodCAoYykgMjAxMC0yMDExLCAgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyAgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZQorIyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07ICBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisjCisKKyMKKyMgVGhpcyBzY3JpcHQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byBzZW5kIGEgcGF0Y2ggc2VyaWVzIHByZXBhcmVkIGJ5IHRoZQorIyBjcmVhdGUtcHVsbC1yZXF1ZXN0IHNjcmlwdCB0byBPcGVuIEVtYmVkZGVkIGFuZCBUaGUgWW9jdG8gUHJvamVjdCwgYXMgd2VsbAorIyBhcyB0byByZWxhdGVkIHByb2plY3RzIGFuZCBsYXllcnMuCisjCisKK0FVVE89MAorQVVUT19DTD0wCitHSVRTT0JDQz0iLS1zdXBwcmVzcy1jYz1hbGwiCisKKyMgUHJldmVudCBlbnZpcm9ubWVudCBsZWFrYWdlIHRvIHRoZXNlIHZhcnMuCit1bnNldCBUTwordW5zZXQgQ0MKK3Vuc2V0IEFVVE9fQ0MKK3Vuc2V0IEVYVFJBX0NDCisKK3VzYWdlKCkKK3sKK2NhdCA8PEVPTQorVXNhZ2U6ICQoYmFzZW5hbWUgJDApIFstaF0gWy1hXSBbLWNdIFtbLXQgZW1haWxdLi4uXSAtcCBwdWxsLWRpciAKKyAgLWEgICAgICAgICAgIFNlbmQgdGhlIGNvdmVyIGxldHRlciB0byBldmVyeSByZWNpcGllbnQgbGlzdGVkIGluIENjIGFuZAorICAgICAgICAgICAgICAgU2lnbmVkLW9mZi1ieSBsaW5lcyBmb3VuZCBpbiB0aGUgY292ZXIgbGV0dGVyIGFuZCB0aGUgcGF0Y2hlcy4KKwkgICAgICAgVGhpcyBvcHRpb24gaW1wbGllcyAtYy4KKyAgLWMgICAgICAgICAgIEV4cGFuZCB0aGUgQ2MgbGlzdCBmb3IgdGhlIGluZGl2aWR1YWwgcGF0Y2hlcyB1c2luZyB0aGUgQ2MgYW5kCisgICAgICAgICAgICAgICBTaWduZWQtb2ZmLWJ5IGxpbmVzIGZyb20gdGhlIHNhbWUgcGF0Y2guCisgIC1DICAgICAgICAgICBBZGQgZXh0cmEgQ0MgdG8gZWFjaCBlbWFpbCBzZW50LgorICAtcCBwdWxsLWRpciAgRGlyZWN0b3J5IGNvbnRhaW5pbmcgc3VtbWFyeSBhbmQgcGF0Y2ggZmlsZXMKKyAgLXQgZW1haWwgICAgIEV4cGxpY2l0bHkgYWRkIGVtYWlsIHRvIHRoZSByZWNpcGllbnRzCitFT00KK30KKworIyBDb2xsZWN0IGFkZHJlc3NlcyBmcm9tIGEgcGF0Y2ggaW50byBBVVRPX0NDCisjICQxOiBhIHBhdGNoIGZpbGUKK2hhcnZlc3RfcmVjaXBpZW50cygpCit7CisJUEFUQ0g9JDEKKwlleHBvcnQgSUZTPSQnLFxuJworCWZvciBSRUdYIGluICJeW0NjXVtDY106ICoiICJeW1NzXWlnbmVkLVtPb11mZi1bQmJdeTogKiI7IGRvCisJCWZvciBFTUFJTCBpbiAkKHNlZCAnL14tLS0kL3EnICRQQVRDSCB8IGdyZXAgLWUgIiRSRUdYIiB8IHNlZCAicy8kUkVHWC8vIik7IGRvCisJCQlpZiBbICIke0FVVE9fQ0MvJEVNQUlML30iID09ICIkQVVUT19DQyIgXSAmJiBbIC1uICIkRU1BSUwiIF07IHRoZW4KKwkJCQlpZiBbIC16ICIkQVVUT19DQyIgXTsgdGhlbgorCQkJCQlBVVRPX0NDPSRFTUFJTDsKKwkJCQllbHNlCisJCQkJCUFVVE9fQ0M9IiRBVVRPX0NDLCRFTUFJTCI7CisJCQkJZmkKKwkJCWZpCisJCWRvbmUKKwlkb25lCisJdW5zZXQgSUZTCit9CisKKyMgUGFyc2UgYW5kIHZlcmlmeSBhcmd1bWVudHMKK3doaWxlIGdldG9wdHMgImFjQzpocDp0OiIgT1BUOyBkbworCWNhc2UgJE9QVCBpbgorCWEpCisJCUFVVE89MQorCQlHSVRTT0JDQz0iLS1zaWduZWQtb2ZmLWJ5LWNjIgorCQlBVVRPX0NMPTEKKwkJOzsKKwljKQorCQlBVVRPPTEKKwkJR0lUU09CQ0M9Ii0tc2lnbmVkLW9mZi1ieS1jYyIKKwkJOzsKKwlDKQorCQlFWFRSQV9DQz0iJE9QVEFSRyIKKwkJOzsKKwloKQorCQl1c2FnZQorCQlleGl0IDAKKwkJOzsKKwlwKQorCQlQRElSPSR7T1BUQVJHJS99CisJCWlmIFsgISAtZCAkUERJUiBdOyB0aGVuCisJCQllY2hvICJFUlJPUjogcHVsbC1kaXIgXCIkUERJUlwiIGRvZXMgbm90IGV4aXN0LiIKKwkJCXVzYWdlCisJCQlleGl0IDEKKwkJZmkKKwkJOzsKKwl0KQorCQlpZiBbIC1uICIkVE8iIF07IHRoZW4KKwkJCVRPPSIkVE8sJE9QVEFSRyIKKwkJZWxzZQorCQkJVE89IiRPUFRBUkciCisJCWZpCisJCTs7CisJZXNhYworZG9uZQorCitpZiBbIC16ICIkUERJUiIgXTsgdGhlbgorCWVjaG8gIkVSUk9SOiB5b3UgbXVzdCBzcGVjaWZ5IGEgcHVsbC1kaXIuIgorCXVzYWdlCisJZXhpdCAxCitmaQorCisKKyMgVmVyaWZ5IHRoZSBjb3ZlciBsZXR0ZXIgaXMgY29tcGxldGUgYW5kIGZyZWUgb2YgdG9rZW5zCitpZiBbIC1lICRQRElSLzAwMDAtY292ZXItbGV0dGVyLnBhdGNoIF07IHRoZW4KKwlDTD0iJFBESVIvMDAwMC1jb3Zlci1sZXR0ZXIucGF0Y2giCisJZm9yIFRPS0VOIGluIFNVQkpFQ1QgQkxVUkI7IGRvCisJCWdyZXAgLXEgIioqKiAkVE9LRU4gSEVSRSAqKioiICIkQ0wiCisJCWlmIFsgJD8gLWVxIDAgXTsgdGhlbgorCQkJZWNobyAiRVJST1I6IFBsZWFzZSBlZGl0ICRDTCBhbmQgdHJ5IGFnYWluIChMb29rIGZvciAnKioqICRUT0tFTiBIRVJFICoqKicpLiIKKwkJCWV4aXQgMQorCQlmaQorCWRvbmUKK2Vsc2UKKwllY2hvICJXQVJOSU5HOiBObyBjb3ZlciBsZXR0ZXIgd2lsbCBiZSBzZW50LiIKK2ZpCisKKyMgSGFydmVzdCBlbWFpbHMgZnJvbSB0aGUgZ2VuZXJhdGVkIHBhdGNoZXMgYW5kIHBvcHVsYXRlIEFVVE9fQ0MuCitpZiBbICRBVVRPX0NMIC1lcSAxIF07IHRoZW4KKwlmb3IgUEFUQ0ggaW4gJFBESVIvKi5wYXRjaDsgZG8KKwkJaGFydmVzdF9yZWNpcGllbnRzICRQQVRDSAorCWRvbmUKK2ZpCisKK0FVVE9fVE89IiQoZ2l0IGNvbmZpZyBzZW5kZW1haWwudG8pIgoraWYgWyAtbiAiJEFVVE9fVE8iIF07IHRoZW4KKwlpZiBbIC1uICIkVE8iIF07IHRoZW4KKwkJVE89IiRUTywkQVVUT19UTyIKKwllbHNlCisJCVRPPSIkQVVUT19UTyIKKwlmaQorZmkKKworaWYgWyAteiAiJFRPIiBdICYmIFsgLXogIiRBVVRPX0NDIiBdOyB0aGVuCisJZWNobyAiRVJST1I6IHlvdSBoYXZlIG5vdCBzcGVjaWZpZWQgYW55IHJlY2lwaWVudHMuIgorCXVzYWdlCisJZXhpdCAxCitmaQorCisKKyMgQ29udmVydCB0aGUgY29sbGVjdGVkIGFkZHJlc3NlcyBpbnRvIGdpdC1zZW5kLWVtYWlsIGFyZ3VtZW50IHN0cmluZ3MKK2V4cG9ydCBJRlM9JCcsJworR0lUX1RPPSQoZm9yIFIgaW4gJFRPOyBkbyBlY2hvIC1uICItLXRvPSckUicgIjsgZG9uZSkKK0dJVF9DQz0kKGZvciBSIGluICRBVVRPX0NDOyBkbyBlY2hvIC1uICItLWNjPSckUicgIjsgZG9uZSkKK0dJVF9FWFRSQV9DQz0kKGZvciBSIGluICRFWFRSQV9DQzsgZG8gZWNobyAtbiAiLS1jYz0nJFInICI7IGRvbmUpCit1bnNldCBJRlMKKworIyBIYW5kb2ZmIHRvIGdpdC1zZW5kLWVtYWlsLiBJdCB3aWxsIHBlcmZvcm0gdGhlIHNlbmQgY29uZmlybWF0aW9uLgorUEFUQ0hFUz0kKGVjaG8gJFBESVIvKi5wYXRjaCkKK2lmIFsgJEFVVE9fQ0wgLWVxIDEgXTsgdGhlbgorCSMgU2VuZCB0aGUgY292ZXIgbGV0dGVyIHRvIGV2ZXJ5IHJlY2lwaWVudCwgYm90aCBzcGVjaWZpZWQgYXMgd2VsbCBhcworCSMgaGFydmVzdGVkLiBUaGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBwYXRjaGVzIGxpc3QuCisJZXZhbCAiZ2l0IHNlbmQtZW1haWwgJEdJVF9UTyAkR0lUX0NDICRHSVRfRVhUUkFfQ0MgLS1jb25maXJtPWFsd2F5cyAtLW5vLWNoYWluLXJlcGx5LXRvIC0tc3VwcHJlc3MtY2M9YWxsICRDTCIKKwlpZiBbICQ/IC1lcSAxIF07IHRoZW4KKwkJZWNobyAiRVJST1I6IGZhaWxlZCB0byBzZW5kIGNvdmVyLWxldHRlciB3aXRoIGF1dG9tYXRpYyByZWNpcGllbnRzLiIKKwkJZXhpdCAxCisJZmkKKwlQQVRDSEVTPSR7UEFUQ0hFUy8iJENMIi99CitmaQorCisjIFNlbmQgdGhlIHBhdGNoIHRvIHRoZSBzcGVjaWZpZWQgcmVjaXBpZW50cyBhbmQsIGlmIC1jIHdhcyBzcGVjaWZpZWQsIHRob3NlIGdpdAorIyBmaW5kcyBpbiB0aGlzIHNwZWNpZmljIHBhdGNoLgorZXZhbCAiZ2l0IHNlbmQtZW1haWwgJEdJVF9UTyAkR0lUX0VYVFJBX0NDIC0tY29uZmlybT1hbHdheXMgLS1uby1jaGFpbi1yZXBseS10byAkR0lUU09CQ0MgJFBBVENIRVMiCitpZiBbICQ/IC1lcSAxIF07IHRoZW4KKwllY2hvICJFUlJPUjogZmFpbGVkIHRvIHNlbmQgcGF0Y2hlcy4iCisJZXhpdCAxCitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3NzdGF0ZS1jYWNoZS1tYW5hZ2VtZW50LnNoIGIveW9jdG8tcG9reS9zY3JpcHRzL3NzdGF0ZS1jYWNoZS1tYW5hZ2VtZW50LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIyODY3NjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvc3N0YXRlLWNhY2hlLW1hbmFnZW1lbnQuc2gKQEAgLTAsMCArMSw0NjkgQEAKKyMhL2Jpbi9iYXNoCisKKyMgIENvcHlyaWdodCAoYykgMjAxMiBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworIyBHbG9iYWwgdmFycworY2FjaGVfZGlyPQorY29uZmlybT0KK2ZzeW09Cit0b3RhbF9kZWxldGVkPTAKK3ZlcmJvc2U9CitkZWJ1Zz0wCisKK3VzYWdlICgpIHsKKyAgY2F0IDw8IEVPRgorV2VsY29tZSB0byBzc3RhdGUgY2FjaGUgbWFuYWdlbWVudCB1dGlsaXRpZXMuCitzc3RhdGUtY2FjaGUtbWFuYWdlbWVudC5zaCA8T1BUSU9OPgorCitPcHRpb25zOgorICAtaCwgLS1oZWxwCisgICAgICAgIERpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0LgorCisgIC0tY2FjaGUtZGlyPTxzc3RhdGUgY2FjaGUgZGlyPgorICAgICAgICBTcGVjaWZ5IHNzdGF0ZSBjYWNoZSBkaXJlY3RvcnksIHdpbGwgdXNlIHRoZSBlbnZpcm9ubWVudAorICAgICAgICB2YXJpYWJsZSBTU1RBVEVfQ0FDSEVfRElSIGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQuCisKKyAgLS1leHRyYS1hcmNocz08YXJjaDE+LDxhcmNoMj4uLi48YXJjaG4+CisgICAgICAgIFNwZWNpZnkgbGlzdCBvZiBhcmNoaXRlY3R1cmVzIHdoaWNoIHNob3VsZCBiZSB0ZXN0ZWQsIHRoaXMgbGlzdAorICAgICAgICB3aWxsIGJlIGV4dGVuZGVkIHdpdGggbmF0aXZlIGFyY2gsIGFsbGFyY2ggYW5kIGVtcHR5IGFyY2guIFRoZQorICAgICAgICBzY3JpcHQgd29uJ3QgYmUgdHJ5aW5nIHRvIGdlbmVyYXRlIGxpc3Qgb2YgYXZhaWxhYmxlIGFyY2hzIGZyb20KKyAgICAgICAgQVZBSUxUVU5FUyBpbiB0dW5lIGZpbGVzLgorCisgIC0tZXh0cmEtbGF5ZXI9PGxheWVyMT4sPGxheWVyMj4uLi48bGF5ZXJuPgorICAgICAgICBTcGVjaWZ5IHRoZSBsYXllciB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIHNlYXJjaGluZyB0aGUgYXJjaHMsCisgICAgICAgIGl0IHdpbGwgc2VhcmNoIHRoZSBtZXRhIGFuZCBtZXRhLSogbGF5ZXJzIGluIHRoZSB0b3AgZGlyIGJ5CisgICAgICAgIGRlZmF1bHQsIGFuZCB3aWxsIHNlYXJjaCBtZXRhLCBtZXRhLSosIDxsYXllcjE+LCA8bGF5ZXIyPiwKKyAgICAgICAgLi4uPGxheWVybj4gd2hlbiBzcGVjaWZpZWQuIFVzZSAiLCIgYXMgdGhlIHNlcGFyYXRvci4KKworICAgICAgICBUaGlzIGlzIHVzZWxlc3MgZm9yIC0tc3RhbXBzLWRpciBvciB3aGVuIC0tZXh0cmEtYXJjaHMgaXMgdXNlZC4KKworICAtZCwgLS1yZW1vdmUtZHVwbGljYXRlZAorICAgICAgICBSZW1vdmUgdGhlIGR1cGxpY2F0ZWQgc3N0YXRlIGNhY2hlIGZpbGVzIG9mIG9uZSBwYWNrYWdlLCBvbmx5CisgICAgICAgIHRoZSBuZXdlc3Qgb25lIHdpbGwgYmUga2VwdC4gVGhlIGR1cGxpY2F0ZWQgc3N0YXRlIGNhY2hlIGZpbGVzCisgICAgICAgIG9mIG9uZSBwYWNrYWdlIG11c3QgaGF2ZSB0aGUgc2FtZSBhcmNoLCB3aGljaCBtZWFucyBzc3RhdGUgY2FjaGUKKyAgICAgICAgZmlsZXMgd2l0aCBtdWx0aXBsZSBhcmNocyBhcmUgbm90IGNvbnNpZGVyZWQgZHVwbGljYXRlLgorCisgICAgICAgIENvbmZsaWN0cyB3aXRoIC0tc3RhbXBzLWRpci4KKworICAtLXN0YW1wcy1kaXI9PGRpcjE+LDxkaXIyPi4uLjxkaXJuPgorICAgICAgICBTcGVjaWZ5IHRoZSBidWlsZCBkaXJlY3RvcnkncyBzdGFtcHMgZGlyZWN0b3JpZXMsIHRoZSBzc3RhdGUKKyAgICAgICAgY2FjaGUgZmlsZSB3aGljaCBJUyBVU0VEIGJ5IHRoZXNlIGJ1aWxkIGRpcmV0b3JpZXMgd2lsbCBiZSBLRVBULAorICAgICAgICBvdGhlciBzc3RhdGUgY2FjaGUgZmlsZXMgaW4gY2FjaGUtZGlyIHdpbGwgYmUgcmVtb3ZlZC4gVXNlICIsIgorICAgICAgICBhcyB0aGUgc2VwYXJhdG9yLiBGb3IgZXhhbXBsZToKKyAgICAgICAgLS1zdGFtcHMtZGlyPWJ1aWxkMS90bXAvc3RhbXBzLGJ1aWxkMi90bXAvc3RhbXBzCisKKyAgICAgICAgQ29uZmxpY3RzIHdpdGggLS1yZW1vdmUtZHVwbGljYXRlZC4KKworICAtTCwgLS1mb2xsb3ctc3ltbGluaworICAgICAgICBSZW1vdmUgYm90aCB0aGUgc3ltYm9sIGxpbmsgYW5kIHRoZSBkZXN0aW5hdGlvbiBmaWxlLCBkZWZhdWx0OiBuby4KKworICAteSwgLS15ZXMKKyAgICAgICAgQXV0b21hdGljIHllcyB0byBwcm9tcHRzOyBhc3N1bWUgInllcyIgYXMgYW5zd2VyIHRvIGFsbCBwcm9tcHRzCisgICAgICAgIGFuZCBydW4gbm9uLWludGVyYWN0aXZlbHkuCisKKyAgLXYsIC0tdmVyYm9zZQorICAgICAgICBFeHBsYWluIHdoYXQgaXMgYmVpbmcgZG9uZS4KKworICAtRCwgLS1kZWJ1ZworICAgICAgICBTaG93IGRlYnVnIGluZm8sIHJlcGVhdCBmb3IgbW9yZSBkZWJ1ZyBpbmZvLgorCitFT0YKK30KKworaWYgWyAkIyAtbHQgMSBdOyB0aGVuCisgIHVzYWdlCisgIGV4aXQgMAorZmkKKworIyBFY2hvIG5vIGZpbGVzIHRvIHJlbW92ZQorbm9fZmlsZXMgKCkgeworICAgIGVjaG8gTm8gZmlsZXMgdG8gcmVtb3ZlCit9CisKKyMgRWNobyBub3RoaW5nIHRvIGRvCitkb19ub3RoaW5nICgpIHsKKyAgIGVjaG8gTm90aGluZyB0byBkbworfQorCisjIFJlYWQgdGhlIGlucHV0ICJ5IgorcmVhZF9jb25maXJtICgpIHsKKyAgZWNobyAiJHRvdGFsX2RlbGV0ZWQgZnJvbSAkdG90YWxfZmlsZXMgZmlsZXMgd2lsbCBiZSByZW1vdmVkISAiCisgIGlmIFsgIiRjb25maXJtIiAhPSAieSIgXTsgdGhlbgorICAgICAgZWNobyAiRG8geW91IHdhbnQgdG8gY29udGludWUgKHkvbik/ICIKKyAgICAgIHdoaWxlIHJlYWQgY29uZmlybTsgZG8KKyAgICAgICAgICBbICIkY29uZmlybSIgPSAiWSIgLW8gIiRjb25maXJtIiA9ICJ5IiAtbyAiJGNvbmZpcm0iID0gIm4iIFwKKyAgICAgICAgICAgIC1vICIkY29uZmlybSIgPSAiTiIgXSAmJiBicmVhaworICAgICAgICAgIGVjaG8gIkludmFsaWQgaW5wdXQgXCIkY29uZmlybVwiLCBwbGVhc2UgaW5wdXQgJ3knIG9yICduJzogIgorICAgICAgZG9uZQorICBlbHNlCisgICAgICBlY2hvCisgIGZpCit9CisKKyMgUHJpbnQgZXJyb3IgaW5mb3JtYXRpb24gYW5kIGV4aXQuCitlY2hvX2Vycm9yICgpIHsKKyAgZWNobyAiRVJST1I6ICQxIiA+JjIKKyAgZXhpdCAxCit9CisKKyMgR2VuZXJhdGUgdGhlIHJlbW92ZSBsaXN0OgorIworIyAqIEFkZCAuZG9uZS8uc2lnaW5mbyB0byB0aGUgcmVtb3ZlIGxpc3QKKyMgKiBBZGQgZGVzdGluYXRpb24gb2Ygc3ltbGluayB0byB0aGUgcmVtb3ZlIGxpc3QKKyMKKyMgJDE6IG91dHB1dCBmaWxlLCBvdGhlcnM6IHNzdGF0ZSBjYWNoZSBmaWxlICgudGd6KQorZ2VuX3JtbGlzdCAoKXsKKyAgbG9jYWwgcm1saXN0X2ZpbGU9IiQxIgorICBzaGlmdAorICBsb2NhbCBmaWxlcz0iJEAiCisgIGZvciBpIGluICRmaWxlczsgZG8KKyAgICAgIGVjaG8gJGkgPj4gJHJtbGlzdF9maWxlCisgICAgICAjIEFkZCB0aGUgIi5zaWdpbmZvIgorICAgICAgaWYgWyAtZSAkaS5zaWdpbmZvIF07IHRoZW4KKyAgICAgICAgICBlY2hvICRpLnNpZ2luZm8gPj4gJHJtbGlzdF9maWxlCisgICAgICBmaQorICAgICAgIyBBZGQgdGhlIGRlc3RpbmF0aW9uIG9mIHN5bWxpbmsKKyAgICAgIGlmIFsgLUwgIiRpIiBdOyB0aGVuCisgICAgICAgICAgaWYgWyAiJGZzeW0iID0gInkiIF07IHRoZW4KKyAgICAgICAgICAgICAgZGVzdD0iYHJlYWRsaW5rIC1lICRpYCIKKyAgICAgICAgICAgICAgaWYgWyAtbiAiJGRlc3QiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgIGVjaG8gJGRlc3QgPj4gJHJtbGlzdF9maWxlCisgICAgICAgICAgICAgICAgICAjIFJlbW92ZSB0aGUgLnNpZ2luZm8gd2hlbiAudGd6IGlzIHJlbW92ZWQKKyAgICAgICAgICAgICAgICAgIGlmIFsgLWYgIiRkZXN0LnNpZ2luZm8iIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBlY2hvICRkZXN0LnNpZ2luZm8gPj4gJHJtbGlzdF9maWxlCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgICAgIyBBZGQgdGhlICIudGd6LmRvbmUiIGFuZCAiLnNpZ2luZm8uZG9uZSIgKG1heSBleGlzdCBpbiB0aGUgZnV0dXJlKQorICAgICAgICAgIGJhc2VfZm49IiR7aSMjLyovfSIKKyAgICAgICAgICB0X2ZuPSIkYmFzZV9mbi5kb25lIgorICAgICAgICAgIHNfZm49IiRiYXNlX2ZuLnNpZ2luZm8uZG9uZSIKKyAgICAgICAgICBmb3IgZCBpbiAkdF9mbiAkc19mbjsgZG8KKyAgICAgICAgICAgICAgaWYgWyAtZiAkY2FjaGVfZGlyLyRkIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgIGVjaG8gJGNhY2hlX2Rpci8kZCA+PiAkcm1saXN0X2ZpbGUKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICBkb25lCisgICAgICBmaQorICBkb25lCit9CisKKyMgUmVtb3ZlIHRoZSBkdXBsaWNhdGVkIGNhY2hlIGZpbGVzIGZvciB0aGUgcGtnLCBrZWVwIHRoZSBuZXdlc3Qgb25lCityZW1vdmVfZHVwbGljYXRlZCAoKSB7CisKKyAgbG9jYWwgdG9wZGlyCisgIGxvY2FsIG9lX2NvcmVfZGlyCisgIGxvY2FsIHR1bmVkaXJzCisgIGxvY2FsIGFsbF9hcmNocworICBsb2NhbCBhbGxfbWFjaGluZXMKKyAgbG9jYWwgYXZhX2FyY2hzCisgIGxvY2FsIGFyY2gKKyAgbG9jYWwgZmlsZV9uYW1lcworICBsb2NhbCBzc3RhdGVfZmlsZXNfbGlzdAorICBsb2NhbCBmbl90bXAKKyAgbG9jYWwgbGlzdF9zdWZmaXg9YG1rdGVtcGAgfHwgZXhpdCAxCisKKyAgaWYgWyAteiAiJGV4dHJhX2FyY2hzIiBdIDsgdGhlbgorICAgICMgRmluZCBvdXQgdGhlIGFyY2hzIGluIGFsbCB0aGUgbGF5ZXJzCisgICAgZWNobyAiRmlndXJpbmcgb3V0IHRoZSBhcmNocyBpbiB0aGUgbGF5ZXJzIC4uLiAiCisgICAgb2VfY29yZV9kaXI9JChkaXJuYW1lICQoZGlybmFtZSAkKHJlYWRsaW5rIC1lICQwKSkpCisgICAgdG9wZGlyPSQoZGlybmFtZSAkb2VfY29yZV9kaXIpCisgICAgdHVuZWRpcnM9ImBmaW5kICR0b3BkaXIvbWV0YSogJHtvZV9jb3JlX2Rpcn0vbWV0YSogJGxheWVycyAtcGF0aCAnKi9tZXRhKi9jb25mL21hY2hpbmUvaW5jbHVkZScgMj4vZGV2L251bGxgIgorICAgIFsgLW4gIiR0dW5lZGlycyIgXSB8fCBlY2hvX2Vycm9yICJDYW4ndCBmaW5kIHRoZSB0dW5lIGRpcmVjdG9yeSIKKyAgICBhbGxfbWFjaGluZXM9ImBmaW5kICR0b3BkaXIvbWV0YSogJHtvZV9jb3JlX2Rpcn0vbWV0YSogJGxheWVycyAtcGF0aCAnKi9tZXRhKi9jb25mL21hY2hpbmUvKicgLW5hbWUgJyouY29uZicgMj4vZGV2L251bGwgfCBzZWQgLWUgJ3MvLipcLy8vJyAtZSAncy8uY29uZiQvLydgIgorICAgIGFsbF9hcmNocz1gZ3JlcCAtciAtaCAiXkFWQUlMVFVORVMgLio9IiAkdHVuZWRpcnMgfCBzZWQgLWUgJ3MvLio9Ly8nIC1lICdzL1wiLy9nJ2AKKyAgZmkKKworICAjIFVzZSB0aGUgIl8iIHRvIHN1YnN0aXR1dGUgIi0iLCBlLmcuLCB4ODYtNjQgdG8geDg2XzY0LCBidXQgbm90IGZvciBleHRyYV9hcmNocyB3aGljaCBjYW4gYmUgc29tZXRoaW5nIGxpa2UgY29ydGV4YTl0Mi12ZnAtbmVvbgorICAjIFNvcnQgdG8gcmVtb3ZlIHRoZSBkdXBsaWNhdGVkIG9uZXMKKyAgIyBBZGQgYWxsYXJjaCBhbmQgYnVpbGRlciBhcmNoIChuYXRpdmUpCisgIGJ1aWxkZXJfYXJjaD0kKHVuYW1lIC1tKQorICBhbGxfYXJjaHM9IiQoZWNobyBhbGxhcmNoICRhbGxfYXJjaHMgJGFsbF9tYWNoaW5lcyAkYnVpbGRlcl9hcmNoIFwKKyAgICAgICAgICB8IHNlZCAtZSAncy8tL18vZycgLWUgJ3MvIC9cbi9nJyB8IHNvcnQgLXUpICRleHRyYV9hcmNocyIKKyAgZWNobyAiRG9uZSIKKworICAjIFRvdGFsIG51bWJlciBvZiBmaWxlcyBpbmNsdWRpbmcgc3N0YXRlLSwgLnNpZ2luZm8gYW5kIC5kb25lIGZpbGVzCisgIHRvdGFsX2ZpbGVzPWBmaW5kICRjYWNoZV9kaXIgLW5hbWUgJ3NzdGF0ZSonIHwgd2MgLWxgCisgICMgU2F2ZSBhbGwgdGhlIHNzdGF0ZSBmaWxlcyBpbiBhIGZpbGUKKyAgc3N0YXRlX2ZpbGVzX2xpc3Q9YG1rdGVtcGAgfHwgZXhpdCAxCisgIGZpbmQgJGNhY2hlX2RpciAtbmFtZSAnc3N0YXRlOio6KjoqOio6KjoqOioudGd6KicgPiRzc3RhdGVfZmlsZXNfbGlzdAorCisgIGVjaG8gIkZpZ3VyaW5nIG91dCB0aGUgc3VmZml4ZXMgaW4gdGhlIHNzdGF0ZSBjYWNoZSBkaXIgLi4uICIKKyAgc3N0YXRlX3N1ZmZpeGVzPSJgc2VkICdzJS4qL3NzdGF0ZTpbXjpdKjpbXjpdKjpbXjpdKjpbXjpdKjpbXjpdKjpbXjpdKjpbXl9dKl9cKFteOl0qXClcLnRnei4qJVwxJWcnICRzc3RhdGVfZmlsZXNfbGlzdCB8IHNvcnQgLXVgIgorICBlY2hvICJEb25lIgorICBlY2hvICJUaGUgZm9sbG93aW5nIHN1ZmZpeGVzIGhhdmUgYmVlbiBmb3VuZCBpbiB0aGUgY2FjaGUgZGlyOiIKKyAgZWNobyAkc3N0YXRlX3N1ZmZpeGVzCisKKyAgZWNobyAiRmlndXJpbmcgb3V0IHRoZSBhcmNocyBpbiB0aGUgc3N0YXRlIGNhY2hlIGRpciAuLi4gIgorICAjIFVzaW5nIHRoaXMgU1NUQVRFX1BLR1NQRUMgZGVmaW5pdGlvbiBpdCdzIDZ0aCBjb2xvbiBzZXBhcmF0ZWQgZmllbGQKKyAgIyBTU1RBVEVfUEtHU1BFQyAgICA9ICJzc3RhdGU6JHtQTn06JHtQQUNLQUdFX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU306JHtQVn06JHtQUn06JHtTU1RBVEVfUEtHQVJDSH06JHtTU1RBVEVfVkVSU0lPTn06IgorICBmb3IgYXJjaCBpbiAkYWxsX2FyY2hzOyBkbworICAgICAgZ3JlcCAtcSAiLiovc3N0YXRlOlteOl0qOlteOl0qOlteOl0qOlteOl0qOiRhcmNoOlteOl0qOlteOl0qXC50Z3okIiAkc3N0YXRlX2ZpbGVzX2xpc3QKKyAgICAgIFsgJD8gLWVxIDAgXSAmJiBhdmFfYXJjaHM9IiRhdmFfYXJjaHMgJGFyY2giCisgICAgICAjICR7YnVpbGRlcl9hcmNofV8kYXJjaCB1c2VkIGJ5IHRvb2xjaGFpbiBzc3RhdGUKKyAgICAgIGdyZXAgLXEgIi4qL3NzdGF0ZTpbXjpdKjpbXjpdKjpbXjpdKjpbXjpdKjoke2J1aWxkZXJfYXJjaH1fJGFyY2g6W146XSo6W146XSpcLnRneiQiICRzc3RhdGVfZmlsZXNfbGlzdAorICAgICAgWyAkPyAtZXEgMCBdICYmIGF2YV9hcmNocz0iJGF2YV9hcmNocyAke2J1aWxkZXJfYXJjaH1fJGFyY2giCisgIGRvbmUKKyAgZWNobyAiRG9uZSIKKyAgZWNobyAiVGhlIGZvbGxvd2luZyBhcmNocyBoYXZlIGJlZW4gZm91bmQgaW4gdGhlIGNhY2hlIGRpcjoiCisgIGVjaG8gJGF2YV9hcmNocworICBlY2hvICIiCisKKyAgIyBTYXZlIHRoZSBmaWxlIGxpc3Qgd2hpY2ggbmVlZHMgdG8gYmUgcmVtb3ZlZAorICBsb2NhbCByZW1vdmVfbGlzdGRpcj1gbWt0ZW1wIC1kYCB8fCBleGl0IDEKKyAgZm9yIHN1ZmZpeCBpbiAkc3N0YXRlX3N1ZmZpeGVzOyBkbworICAgICAgaWYgWyAiJHN1ZmZpeCIgPSAicG9wdWxhdGVfbGljIiBdIDsgdGhlbgorICAgICAgICAgIGVjaG8gIlNraXBwaW5nIHBvcHVsYXRlX2xpYywgYmVjYXVzZSByZW1vdmluZyBkdXBsaWNhdGVzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgZm9yIHRoZW0gKHVzZSAtLXN0YW1wcy1kaXIgaW5zdGVhZCkiCisgICAgICAgICAgY29udGludWUKKyAgICAgIGZpCisgICAgICAjIFRvdGFsIG51bWJlciBvZiBmaWxlcyBpbmNsdWRpbmcgLnNpZ2luZm8gYW5kIC5kb25lIGZpbGVzCisgICAgICB0b3RhbF9maWxlc19zdWZmaXg9YGdyZXAgIi4qL3NzdGF0ZTpbXjpdKjpbXjpdKjpbXjpdKjpbXjpdKjpbXjpdKjpbXjpdKjpbXjpfXSpfJHN1ZmZpeFwudGd6LioiICRzc3RhdGVfZmlsZXNfbGlzdCB8IHdjIC1sIDI+L2Rldi9udWxsYAorICAgICAgdG90YWxfdGd6X3N1ZmZpeD1gZ3JlcCAiLiovc3N0YXRlOlteOl0qOlteOl0qOlteOl0qOlteOl0qOlteOl0qOlteOl0qOlteOl9dKl8kc3VmZml4XC50Z3okIiAkc3N0YXRlX2ZpbGVzX2xpc3QgfCB3YyAtbCAyPi9kZXYvbnVsbGAKKyAgICAgICMgU2F2ZSB0aGUgZmlsZSBsaXN0IHRvIGEgZmlsZSwgc29tZSBzdWZmaXgncyBmaWxlIG1heSBub3QgZXhpc3QKKyAgICAgIGdyZXAgIi4qL3NzdGF0ZTpbXjpdKjpbXjpdKjpbXjpdKjpbXjpdKjpbXjpdKjpbXjpdKjpbXjpfXSpfJHN1ZmZpeFwudGd6LioiICRzc3RhdGVfZmlsZXNfbGlzdCA+JGxpc3Rfc3VmZml4IDI+L2Rldi9udWxsCisgICAgICBsb2NhbCBkZWxldGVkX3Rnej0wCisgICAgICBsb2NhbCBkZWxldGVkX2ZpbGVzPTAKKyAgICAgIGZvciBleHQgaW4gdGd6IHRnei5zaWdpbmZvIHRnei5kb25lOyBkbworICAgICAgICAgIGVjaG8gIkZpZ3VyaW5nIG91dCB0aGUgc3N0YXRlOnh4eF8kc3VmZml4LiRleHQgLi4uICIKKyAgICAgICAgICAjIFVuaXEgQlBOcworICAgICAgICAgIGZpbGVfbmFtZXM9YGZvciBhcmNoIGluICRhdmFfYXJjaHMgIiI7IGRvCisgICAgICAgICAgICAgIHNlZCAtbmUgInMlLiovc3N0YXRlOlwoW146XSpcKTpbXjpdKjpbXjpdKjpbXjpdKjokYXJjaDpbXjpdKjpbXjpdKlwuJHtleHR9JCVcMSVwIiAkbGlzdF9zdWZmaXgKKyAgICAgICAgICBkb25lIHwgc29ydCAtdWAKKworICAgICAgICAgIGZuX3RtcD1gbWt0ZW1wYCB8fCBleGl0IDEKKyAgICAgICAgICBybV9saXN0PSIkcmVtb3ZlX2xpc3RkaXIvc3N0YXRlOnh4eF8kc3VmZml4IgorICAgICAgICAgIGZvciBmbiBpbiAkZmlsZV9uYW1lczsgZG8KKyAgICAgICAgICAgICAgWyAteiAiJHZlcmJvc2UiIF0gfHwgZWNobyAiQW5hbHl6aW5nIHNzdGF0ZTokZm4teHh4XyRzdWZmaXguJHtleHR9IgorICAgICAgICAgICAgICBmb3IgYXJjaCBpbiAkYXZhX2FyY2hzICIiOyBkbworICAgICAgICAgICAgICAgICAgZ3JlcCAtaCAiLiovc3N0YXRlOiRmbjpbXjpdKjpbXjpdKjpbXjpdKjokYXJjaDpbXjpdKjpbXjpdKlwuJHtleHR9JCIgJGxpc3Rfc3VmZml4ID4kZm5fdG1wCisgICAgICAgICAgICAgICAgICBpZiBbIC1zICRmbl90bXAgXSA7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBbICRkZWJ1ZyAtZ3QgMSBdICYmIGVjaG8gIkF2YWlsYWJsZSBmaWxlcyBmb3IgJGZuLSRhcmNoLSB3aXRoIHN1ZmZpeCAkc3VmZml4LiR7ZXh0fToiICYmIGNhdCAkZm5fdG1wCisgICAgICAgICAgICAgICAgICAgICAgIyBVc2UgdGhlIG1vZGlmaWNhdGlvbiB0aW1lCisgICAgICAgICAgICAgICAgICAgICAgdG9fZGVsPSQobHMgLXQgJChjYXQgJGZuX3RtcCkgfCBzZWQgLW4gJzEhcCcpCisgICAgICAgICAgICAgICAgICAgICAgWyAkZGVidWcgLWd0IDIgXSAmJiBlY2hvICJDb25zaWRlcmluZyB0byBkZWxldGU6ICR0b19kZWwiCisgICAgICAgICAgICAgICAgICAgICAgIyBUaGUgc3N0YXRlIGZpbGUgd2hpY2ggaXMgZG93bmxvYWRlZCBmcm9tIHRoZSBTU1RBVEVfTUlSUk9SIGlzCisgICAgICAgICAgICAgICAgICAgICAgIyBwdXQgaW4gU1NUQVRFX0RJUiwgYW5kIHRoZXJlIGlzIGEgc3ltbGluayBpbiBTU1RBVEVfRElSLz8/LyB0bworICAgICAgICAgICAgICAgICAgICAgICMgaXQsIHNvIGZpbHRlciBpdCBvdXQgZnJvbSB0aGUgcmVtb3ZlIGxpc3QgaWYgaXQgc2hvdWxkIG5vdCBiZQorICAgICAgICAgICAgICAgICAgICAgICMgcmVtb3ZlZC4KKyAgICAgICAgICAgICAgICAgICAgICB0b19rZWVwPSQobHMgLXQgJChjYXQgJGZuX3RtcCkgfCBzZWQgLW4gJzFwJykKKyAgICAgICAgICAgICAgICAgICAgICBbICRkZWJ1ZyAtZ3QgMiBdICYmIGVjaG8gIkNvbnNpZGVyaW5nIHRvIGtlZXA6ICR0b19rZWVwIgorICAgICAgICAgICAgICAgICAgICAgIGZvciBrIGluICR0b19rZWVwOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBbIC1MICIkayIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGUgc3ltbGluaydzIGRlc3RpbmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrX2Rlc3Q9ImByZWFkbGluayAtZSAka2AiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE1heWJlIGl0IGlzIHRoZSBvbmUgaW4gY2FjaGVfZGlyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrX21heWJlPSIkY2FjaGVfZGlyLyR7ayMjLyovfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUmVtb3ZlIGl0IGZyb20gdGhlIHJlbW92ZSBsaXN0IGlmIHRoZXkgYXJlIHRoZSBzYW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgWyAiJGtfZGVzdCIgPSAiJGtfbWF5YmUiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b19kZWw9ImBlY2hvICR0b19kZWwgfCBzZWQgJ3MjJ1wiJGtfbWF5YmVcIicjI2cnYCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgIHJtIC1mICRmbl90bXAKKyAgICAgICAgICAgICAgICAgICAgICBbICRkZWJ1ZyAtZ3QgMiBdICYmIGVjaG8gIkRlY2lkZWQgdG8gZGVsZXRlOiAkdG9fZGVsIgorICAgICAgICAgICAgICAgICAgICAgIGdlbl9ybWxpc3QgJHJtX2xpc3QuJGV4dCAiJHRvX2RlbCIKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICBkb25lCisgICAgICBkb25lCisgICAgICBkZWxldGVkX3Rnej1gY2F0ICRybV9saXN0LiogMj4vZGV2L251bGwgfCBncmVwICIudGd6JCIgfCB3YyAtbGAKKyAgICAgIGRlbGV0ZWRfZmlsZXM9YGNhdCAkcm1fbGlzdC4qIDI+L2Rldi9udWxsIHwgd2MgLWxgCisgICAgICBbICIkZGVsZXRlZF9maWxlcyIgLWd0IDAgLWEgJGRlYnVnIC1ndCAwIF0gJiYgY2F0ICRybV9saXN0LioKKyAgICAgIGVjaG8gIigkZGVsZXRlZF90Z3ogZnJvbSAkdG90YWxfdGd6X3N1ZmZpeCAudGd6IGZpbGVzIGZvciAkc3VmZml4IHN1ZmZpeCB3aWxsIGJlIHJlbW92ZWQgb3IgJGRlbGV0ZWRfZmlsZXMgZnJvbSAkdG90YWxfZmlsZXNfc3VmZml4IHdoZW4gY291bnRpbmcgYWxzbyAuc2lnaW5mbyBhbmQgLmRvbmUgZmlsZXMpIgorICAgICAgbGV0IHRvdGFsX2RlbGV0ZWQ9JHRvdGFsX2RlbGV0ZWQrJGRlbGV0ZWRfZmlsZXMKKyAgZG9uZQorICBkZWxldGVkX3Rnej0wCisgIHJtX29sZF9saXN0PSRyZW1vdmVfbGlzdGRpci9zc3RhdGUtb2xkLWZpbGVuYW1lcworICBmaW5kICRjYWNoZV9kaXIgLW5hbWUgJ3NzdGF0ZS0qLnRneicgPiRybV9vbGRfbGlzdAorICBbIC1zICIkcm1fb2xkX2xpc3QiIF0gJiYgZGVsZXRlZF90Z3o9YGNhdCAkcm1fb2xkX2xpc3QgfCBncmVwICIudGd6JCIgfCB3YyAtbGAKKyAgWyAtcyAiJHJtX29sZF9saXN0IiBdICYmIGRlbGV0ZWRfZmlsZXM9YGNhdCAkcm1fb2xkX2xpc3QgfCB3YyAtbGAKKyAgWyAtcyAiJHJtX29sZF9saXN0IiAtYSAkZGVidWcgLWd0IDAgXSAmJiBjYXQgJHJtX29sZF9saXN0CisgIGVjaG8gIigkZGVsZXRlZF90Z3ogLnRneiBmaWxlcyB3aXRoIG9sZCBzc3RhdGUtKiBmaWxlbmFtZXMgd2lsbCBiZSByZW1vdmVkIG9yICRkZWxldGVkX2ZpbGVzIHdoZW4gY291bnRpbmcgYWxzbyAuc2lnaW5mbyBhbmQgLmRvbmUgZmlsZXMpIgorICBsZXQgdG90YWxfZGVsZXRlZD0kdG90YWxfZGVsZXRlZCskZGVsZXRlZF9maWxlcworCisgIHJtIC1mICRsaXN0X3N1ZmZpeAorICBybSAtZiAkc3N0YXRlX2ZpbGVzX2xpc3QKKyAgaWYgWyAkdG90YWxfZGVsZXRlZCAtZ3QgMCBdOyB0aGVuCisgICAgICByZWFkX2NvbmZpcm0KKyAgICAgIGlmIFsgIiRjb25maXJtIiA9ICJ5IiAtbyAiJGNvbmZpcm0iID0gIlkiIF07IHRoZW4KKyAgICAgICAgICBmb3IgbGlzdCBpbiBgbHMgJHJlbW92ZV9saXN0ZGlyL2A7IGRvCisgICAgICAgICAgICAgIGVjaG8gIlJlbW92aW5nICRsaXN0LnRneiAoYGNhdCAkcmVtb3ZlX2xpc3RkaXIvJGxpc3QgfCB3YyAtd2AgZmlsZXMpIC4uLiAiCisgICAgICAgICAgICAgICMgUmVtb3ZlIHRoZW0gb25lIGJ5IG9uZSB0byBhdm9pZCB0aGUgYXJndW1lbnQgbGlzdCB0b28gbG9uZyBlcnJvcgorICAgICAgICAgICAgICBmb3IgaSBpbiBgY2F0ICRyZW1vdmVfbGlzdGRpci8kbGlzdGA7IGRvCisgICAgICAgICAgICAgICAgICBybSAtZiAkdmVyYm9zZSAkaQorICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgIGVjaG8gIkRvbmUiCisgICAgICAgICAgZG9uZQorICAgICAgICAgIGVjaG8gIiR0b3RhbF9kZWxldGVkIGZpbGVzIGhhdmUgYmVlbiByZW1vdmVkISIKKyAgICAgIGVsc2UKKyAgICAgICAgICBkb19ub3RoaW5nCisgICAgICBmaQorICBlbHNlCisgICAgICAgbm9fZmlsZXMKKyAgZmkKKyAgWyAtZCAkcmVtb3ZlX2xpc3RkaXIgXSAmJiBybSAtZnIgJHJlbW92ZV9saXN0ZGlyCit9CisKKyMgUmVtb3ZlIHRoZSBzc3RhdGUgZmlsZSBieSBzdGFtcHMgZGlyLCB0aGUgZmlsZSBub3QgdXNlZCBieSB0aGUgc3RhbXBzIGRpcgorIyB3aWxsIGJlIHJlbW92ZWQuCitybV9ieV9zdGFtcHMgKCl7CisKKyAgbG9jYWwgY2FjaGVfbGlzdD1gbWt0ZW1wYCB8fCBleGl0IDEKKyAgbG9jYWwga2VlcF9saXN0PWBta3RlbXBgIHx8IGV4aXQgMQorICBsb2NhbCBybV9saXN0PWBta3RlbXBgIHx8IGV4aXQgMQorICBsb2NhbCBzdW1zCisgIGxvY2FsIGFsbF9zdW1zCisKKyAgIyBUb3RhbCBudW1iZXIgb2YgZmlsZXMgaW5jbHVkaW5nIHNzdGF0ZS0sIC5zaWdpbmZvIGFuZCAuZG9uZSBmaWxlcworICB0b3RhbF9maWxlcz1gZmluZCAkY2FjaGVfZGlyIC10eXBlIGYgLW5hbWUgJ3NzdGF0ZSonIHwgd2MgLWxgCisgICMgU2F2ZSBhbGwgdGhlIHN0YXRlIGZpbGUgbGlzdCB0byBhIGZpbGUKKyAgZmluZCAkY2FjaGVfZGlyIC10eXBlIGYgLW5hbWUgJ3NzdGF0ZSonIHwgc29ydCAtdSAtbyAkY2FjaGVfbGlzdAorCisgIGVjaG8gIkZpZ3VyaW5nIG91dCB0aGUgc3VmZml4ZXMgaW4gdGhlIHNzdGF0ZSBjYWNoZSBkaXIgLi4uICIKKyAgbG9jYWwgc3N0YXRlX3N1ZmZpeGVzPSJgc2VkICdzJS4qL3NzdGF0ZTpbXjpdKjpbXjpdKjpbXjpdKjpbXjpdKjpbXjpdKjpbXjpdKjpbXl9dKl9cKFteOl0qXClcLnRnei4qJVwxJWcnICRjYWNoZV9saXN0IHwgc29ydCAtdWAiCisgIGVjaG8gIkRvbmUiCisgIGVjaG8gIlRoZSBmb2xsb3dpbmcgc3VmZml4ZXMgaGF2ZSBiZWVuIGZvdW5kIGluIHRoZSBjYWNoZSBkaXI6IgorICBlY2hvICRzc3RhdGVfc3VmZml4ZXMKKworICAjIEZpZ3VyZSBvdXQgYWxsIHRoZSBtZDVzdW1zIGluIHRoZSBzdGFtcHMgZGlyLgorICBlY2hvICJGaWd1cmluZyBvdXQgYWxsIHRoZSBtZDVzdW1zIGluIHN0YW1wcyBkaXIgLi4uICIKKyAgZm9yIGkgaW4gJHNzdGF0ZV9zdWZmaXhlczsgZG8KKyAgICAgICMgVGhlcmUgaXMgbm8gIlwuc2lnZGF0YSIgYnV0ICJfc2V0Y2VuZSIgd2hlbiBpdCBpcyBtaXJyb3JlZAorICAgICAgIyBmcm9tIHRoZSBTU1RBVEVfTUlSUk9SUywgdXNlIHRoZW0gdG8gZmlndXJlIG91dCB0aGUgc3VtLgorICAgICAgc3Vtcz1gZmluZCAkc3RhbXBzIC1tYXhkZXB0aCAzIC1uYW1lICIqLmRvXyRpLioiIFwKKyAgICAgICAgLW8gLW5hbWUgIiouZG9fJHtpfV9zZXRzY2VuZS4qIiB8IFwKKyAgICAgICAgc2VkIC1uZSAncyMuKl9zZXRzY2VuZVwuIyNwJyAtZSAncyMuKlwuc2lnZGF0YVwuIyNwJyB8IFwKKyAgICAgICAgc2VkIC1lICdzI1wuLiojIycgfCBzb3J0IC11YAorICAgICAgYWxsX3N1bXM9IiRhbGxfc3VtcyAkc3VtcyIKKyAgZG9uZQorICBlY2hvICJEb25lIgorCisgIGVjaG8gIkZpZ3VyaW5nIG91dCB0aGUgZmlsZXMgd2hpY2ggd2lsbCBiZSByZW1vdmVkIC4uLiAiCisgIGZvciBpIGluICRhbGxfc3VtczsgZG8KKyAgICAgIGdyZXAgIi4qL3NzdGF0ZTpbXjpdKjpbXjpdKjpbXjpdKjpbXjpdKjpbXjpdKjpbXjpdKjoke2l9Xy4qIiAkY2FjaGVfbGlzdCA+PiRrZWVwX2xpc3QKKyAgZG9uZQorICBlY2hvICJEb25lIgorCisgIGlmIFsgLXMgJGtlZXBfbGlzdCBdOyB0aGVuCisgICAgICBzb3J0IC11ICRrZWVwX2xpc3QgLW8gJGtlZXBfbGlzdAorICAgICAgdG9fZGVsPWBjb21tIC0xIC0zICRrZWVwX2xpc3QgJGNhY2hlX2xpc3RgCisgICAgICBnZW5fcm1saXN0ICRybV9saXN0ICIkdG9fZGVsIgorICAgICAgbGV0IHRvdGFsX2RlbGV0ZWQ9YGNhdCAkcm1fbGlzdCB8IHNvcnQgLXUgfCB3YyAtd2AKKyAgICAgIGlmIFsgJHRvdGFsX2RlbGV0ZWQgLWd0IDAgXTsgdGhlbgorICAgICAgICAgIFsgJGRlYnVnIC1ndCAwIF0gJiYgY2F0ICRybV9saXN0IHwgc29ydCAtdQorICAgICAgICAgIHJlYWRfY29uZmlybQorICAgICAgICAgIGlmIFsgIiRjb25maXJtIiA9ICJ5IiAtbyAiJGNvbmZpcm0iID0gIlkiIF07IHRoZW4KKyAgICAgICAgICAgICAgZWNobyAiUmVtb3Zpbmcgc3N0YXRlIGNhY2hlIGZpbGVzIC4uLiAoJHRvdGFsX2RlbGV0ZWQgZmlsZXMpIgorICAgICAgICAgICAgICAjIFJlbW92ZSB0aGVtIG9uZSBieSBvbmUgdG8gYXZvaWQgdGhlIGFyZ3VtZW50IGxpc3QgdG9vIGxvbmcgZXJyb3IKKyAgICAgICAgICAgICAgZm9yIGkgaW4gYGNhdCAkcm1fbGlzdCB8IHNvcnQgLXVgOyBkbworICAgICAgICAgICAgICAgICAgcm0gLWYgJHZlcmJvc2UgJGkKKyAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICBlY2hvICIkdG90YWxfZGVsZXRlZCBmaWxlcyBoYXZlIGJlZW4gcmVtb3ZlZCIKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGRvX25vdGhpbmcKKyAgICAgICAgICBmaQorICAgICAgZWxzZQorICAgICAgICAgIG5vX2ZpbGVzCisgICAgICBmaQorICBlbHNlCisgICAgICBlY2hvX2Vycm9yICJBbGwgZmlsZXMgaW4gY2FjaGUgZGlyIHdpbGwgYmUgcmVtb3ZlZCEgQWJvcnQhIgorICBmaQorCisgIHJtIC1mICRjYWNoZV9saXN0CisgIHJtIC1mICRrZWVwX2xpc3QKKyAgcm0gLWYgJHJtX2xpc3QKK30KKworIyBQYXJzZSBhcmd1bWVudHMKK3doaWxlIFsgLW4gIiQxIiBdOyBkbworICBjYXNlICQxIGluCisgICAgLS1jYWNoZS1kaXI9KikKKyAgICAgIGNhY2hlX2Rpcj1gZWNobyAkMSB8IHNlZCAtZSAncyNeLS1jYWNoZS1kaXI9IyMnIHwgeGFyZ3MgcmVhZGxpbmsgLWVgCisgICAgICBbIC1kICIkY2FjaGVfZGlyIiBdIHx8IGVjaG9fZXJyb3IgIkludmFsaWQgYXJndW1lbnQgdG8gLS1jYWNoZS1kaXIiCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0tcmVtb3ZlLWR1cGxpY2F0ZWR8LWQpCisgICAgICBybV9kdXBsaWNhdGVkPSJ5IgorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLXllc3wteSkKKyAgICAgIGNvbmZpcm09InkiCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0tZm9sbG93LXN5bWxpbmt8LUwpCisgICAgICBmc3ltPSJ5IgorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLWV4dHJhLWFyY2hzPSopCisgICAgICBleHRyYV9hcmNocz1gZWNobyAkMSB8IHNlZCAtZSAncyNeLS1leHRyYS1hcmNocz0jIycgLWUgJ3MjLCMgI2cnYAorICAgICAgWyAtbiAiJGV4dHJhX2FyY2hzIiBdIHx8IGVjaG9fZXJyb3IgIkludmFsaWQgZXh0cmEgYXJjaCBwYXJhbWV0ZXIiCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0tZXh0cmEtbGF5ZXI9KikKKyAgICAgIGV4dHJhX2xheWVycz1gZWNobyAkMSB8IHNlZCAtZSAncyNeLS1leHRyYS1sYXllcj0jIycgLWUgJ3MjLCMgI2cnYAorICAgICAgWyAtbiAiJGV4dHJhX2xheWVycyIgXSB8fCBlY2hvX2Vycm9yICJJbnZhbGlkIGV4dHJhIGxheWVyIHBhcmFtZXRlciIKKyAgICAgIGZvciBpIGluICRleHRyYV9sYXllcnM7IGRvCisgICAgICAgICAgbD1gcmVhZGxpbmsgLWUgJGlgCisgICAgICAgICAgaWYgWyAtZCAiJGwiIF07IHRoZW4KKyAgICAgICAgICAgICAgbGF5ZXJzPSIkbGF5ZXJzICRsIgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZWNob19lcnJvciAiQ2FuJ3QgZmluZCBsYXllciAkaSIKKyAgICAgICAgICBmaQorICAgICAgZG9uZQorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLXN0YW1wcy1kaXI9KikKKyAgICAgIHN0YW1wcz1gZWNobyAkMSB8IHNlZCAtZSAncyNeLS1zdGFtcHMtZGlyPSMjJyAtZSAncyMsIyAjZydgCisgICAgICBbIC1uICIkc3RhbXBzIiBdIHx8IGVjaG9fZXJyb3IgIkludmFsaWQgc3RhbXBzIGRpciAkaSIKKyAgICAgIGZvciBpIGluICRzdGFtcHM7IGRvCisgICAgICAgICAgWyAtZCAiJGkiIF0gfHwgZWNob19lcnJvciAiSW52YWxpZCBzdGFtcHMgZGlyICRpIgorICAgICAgZG9uZQorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLXZlcmJvc2V8LXYpCisgICAgICB2ZXJib3NlPSItdiIKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS1kZWJ1Z3wtRCkKKyAgICAgIGRlYnVnPWBleHByICRkZWJ1ZyArIDFgCisgICAgICBlY2hvICJEZWJ1ZyBsZXZlbCAkZGVidWciCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0taGVscHwtaCkKKyAgICAgIHVzYWdlCisgICAgICBleGl0IDAKKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgZWNobyAiSW52YWxpZCBhcmd1bWVudHMgJCoiCisgICAgICBlY2hvX2Vycm9yICJUcnkgJ3NzdGF0ZS1jYWNoZS1tYW5hZ2VtZW50LnNoIC1oJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisgICAgICAgIDs7CisgIGVzYWMKK2RvbmUKKworIyBzc3RhdGUgY2FjaGUgZGlyZWN0b3J5LCB1c2UgZW52aXJvbm1lbnQgdmFyaWFibGUgU1NUQVRFX0NBQ0hFX0RJUgorIyBpZiBpdCB3YXMgbm90IHNwZWNpZmllZCwgb3RoZXJ3aXNlLCBlcnJvci4KK1sgLW4gIiRjYWNoZV9kaXIiIF0gfHwgY2FjaGVfZGlyPSRTU1RBVEVfQ0FDSEVfRElSCitbIC1uICIkY2FjaGVfZGlyIiBdIHx8IGVjaG9fZXJyb3IgIk5vIGNhY2hlIGRpciBmb3VuZCEiCitbIC1kICIkY2FjaGVfZGlyIiBdIHx8IGVjaG9fZXJyb3IgIkludmFsaWQgY2FjaGUgZGlyZWN0b3J5IFwiJGNhY2hlX2RpclwiIgorCitbIC1uICIkcm1fZHVwbGljYXRlZCIgLWEgLW4gIiRzdGFtcHMiIF0gJiYgXAorICAgIGVjaG9fZXJyb3IgIkNhbiBub3QgdXNlIGJvdGggLS1yZW1vdmUtZHVwbGljYXRlZCBhbmQgLS1zdGFtcHMtZGlyIgorCitbICIkcm1fZHVwbGljYXRlZCIgPSAieSIgXSAmJiByZW1vdmVfZHVwbGljYXRlZAorWyAtbiAiJHN0YW1wcyIgXSAmJiBybV9ieV9zdGFtcHMKK1sgLXogIiRybV9kdXBsaWNhdGVkIiAtYSAteiAiJHN0YW1wcyIgXSAmJiBcCisgICAgZWNobyAiV2hhdCBkbyB5b3Ugd2FudCB0byBkbz8iCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9zc3RhdGUtZGlmZi1tYWNoaW5lcy5zaCBiL3lvY3RvLXBva3kvc2NyaXB0cy9zc3RhdGUtZGlmZi1tYWNoaW5lcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNTZhYTBhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3NzdGF0ZS1kaWZmLW1hY2hpbmVzLnNoCkBAIC0wLDAgKzEsMTcyIEBACisjIS9iaW4vYmFzaAorCisjIFVzZWQgdG8gY29tcGFyZSBzc3RhdGUgY2hlY2tzdW1zIGJldHdlZW4gTUFDSElORVMuCisjIEV4ZWN1dGUgc2NyaXB0IGFuZCBjb21wYXJlIGdlbmVyYXRlZCBsaXN0Lk0gZmlsZXMuCisjIFVzaW5nIGJhc2ggdG8gaGF2ZSBQSVBFU1RBVFVTIHZhcmlhYmxlLgorCisjIEl0J3MgYWxzbyB1c2VmdWxsIHRvIGtlZXAgb2xkZXIgc3N0YXRlIGNoZWNrc3VtcworIyB0byBiZSBhYmxlIHRvIGZpbmQgb3V0IHdoeSBzb21ldGhpbmcgaXMgcmVidWlsZGluZworIyBhZnRlciB1cGRhdGluZyBtZXRhZGF0YQorCisjICQgZGlmZiBcCisjICAgICBzc3RhdGUtZGlmZi8xMzQ5MzQ4MzkyL2Zha2UtY29ydGV4YTgvbGlzdC5NIFwKKyMgICAgIHNzdGF0ZS1kaWZmLzEzNDkzNDgzOTIvZmFrZS1jb3J0ZXhhOS9saXN0Lk0gXAorIyAgICAgfCB3YyAtbAorIyA1MzgKKworIyBUaGVuIHRvIGNvbXBhcmUgc2lnZGF0YSB1c2Ugc29tZXRoaW5nIGxpa2U6CisjICQgbHMgc3N0YXRlLWRpZmYvMTM0OTM0ODM5Mi8qL2FybXY3YS12ZnAtbmVvbiovbGludXgtbGliYy1oZWFkZXJzLypkb19jb25maWd1cmUqc2lnZGF0YSoKKyMgICBzc3RhdGUtZGlmZi8xMzQ5MzQ4MzkyL2Zha2UtY29ydGV4YTgvYXJtdjdhLXZmcC1uZW9uLW9lLWxpbnV4LWdudWVhYmkvbGludXgtbGliYy1oZWFkZXJzLzMuNC4zLXIwLmRvX2NvbmZpZ3VyZS5zaWdkYXRhLmNiNzNiMzYzMGE3YjgxOTFlNzJmYzQ2OWM1MTM3MDI1CisjICAgc3N0YXRlLWRpZmYvMTM0OTM0ODM5Mi9mYWtlLWNvcnRleGE5L2FybXY3YS12ZnAtbmVvbi1vZS1saW51eC1nbnVlYWJpL2xpbnV4LWxpYmMtaGVhZGVycy8zLjQuMy1yMC5kb19jb25maWd1cmUuc2lnZGF0YS5mMzdhZGExNzdiZjk5Y2U4YWY4NTkxNGRmMjJiNWEwYgorIyAkIGJpdGJha2UtZGlmZnNpZ3Mgc3RhbXBzLjEzNDkzNDgzOTIvKi9hcm12N2EtdmZwLW5lb24qL2xpbnV4LWxpYmMtaGVhZGVycy8qZG9fY29uZmlndXJlKnNpZ2RhdGEqCisjICAgYmFzZWhhc2ggY2hhbmdlZCBmcm9tIDhkMGJkNjdiYjFkYTZmNjg3MTc3NjBmYzNlZjQzMTcxIHRvIGU4NjlmYTYxNDI2ZTg4ZTljMzA3MjZiYTg4YTEyMTZhCisjICAgVmFyaWFibGUgVFVORV9DQ0FSR1MgdmFsdWUgY2hhbmdlZCBmcm9tICAtbWFyY2g9YXJtdjctYSAgICAgLW10aHVtYi1pbnRlcndvcmsgLW1mbG9hdC1hYmk9c29mdGZwIC1tZnB1PW5lb24gLW10dW5lPWNvcnRleC1hOCB0byAgLW1hcmNoPWFybXY3LWEgICAgIC1tdGh1bWItaW50ZXJ3b3JrIC1tZmxvYXQtYWJpPXNvZnRmcCAtbWZwdT1uZW9uIC1tdHVuZT1jb3J0ZXgtYTkKKworIyBHbG9iYWwgdmFycwordG1wZGlyPQorbWFjaGluZXM9Cit0YXJnZXRzPQorZGVmYXVsdF9tYWNoaW5lcz0icWVtdWFybSBxZW11eDg2IHFlbXV4ODYtNjQiCitkZWZhdWx0X3RhcmdldHM9ImNvcmUtaW1hZ2UtYmFzZSIKK2FuYWx5emU9Ik4iCisKK3VzYWdlICgpIHsKKyAgY2F0IDw8IEVPRgorV2VsY29tZSB0byB1dGlsaXR5IHRvIGNvbXBhcmUgc3N0YXRlIGNoZWNrc3VtcyBiZXR3ZWVuIGRpZmZlcmVudCBNQUNISU5Fcy4KKyQwIDxPUFRJT04+CisKK09wdGlvbnM6CisgIC1oLCAtLWhlbHAKKyAgICAgICAgRGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQuCisKKyAgLS10bXBkaXI9PHRtcGRpcj4KKyAgICAgICAgU3BlY2lmeSB0bXBkaXIsIHdpbGwgdXNlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBUTVBESVIgaWYgaXQgaXMgbm90IHNwZWNpZmllZC4KKyAgICAgICAgU29tZXRoaW5nIGxpa2UgL09FL29lLWNvcmUvdG1wLWVnbGliYyAobm8gLyBhdCB0aGUgZW5kKS4KKworICAtLW1hY2hpbmVzPTxtYWNoaW5lcz4KKyAgICAgICAgTGlzdCBvZiBNQUNISU5FcyBzZXBhcmF0ZWQgYnkgc3BhY2UsIHdpbGwgdXNlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBNQUNISU5FUyBpZiBpdCBpcyBub3Qgc3BlY2lmaWVkLgorICAgICAgICBEZWZhdWx0IHZhbHVlIGlzICJxZW11YXJtIHFlbXV4ODYgcWVtdXg4Ni02NCIuCisKKyAgLS10YXJnZXRzPTx0YXJnZXRzPgorICAgICAgICBMaXN0IG9mIHRhcmdldHMgc2VwYXJhdGVkIGJ5IHNwYWNlLCB3aWxsIHVzZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgVEFSR0VUUyBpZiBpdCBpcyBub3Qgc3BlY2lmaWVkLgorICAgICAgICBEZWZhdWx0IHZhbHVlIGlzICJjb3JlLWltYWdlLWJhc2UiLgorCisgIC0tYW5hbHl6ZQorICAgICAgICBTaG93IHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIE1BQ0hJTkVzLiBJdCBhc3N1bWVzOgorICAgICAgICAqIEZpcnN0IDIgTUFDSElORXMgaW4gLS1tYWNoaW5lcyBwYXJhbWV0ZXIgaGF2ZSB0aGUgc2FtZSBUVU5FX1BLR0FSQ0gKKyAgICAgICAgKiBUaGlyZCBvcHRpb25hbCBNQUNISU5FIGhhcyBkaWZmZXJlbnQgVFVORV9QS0dBUkNIIC0gb25seSBuYXRpdmUgYW5kIGFsbGFyY2ggcmVjaXBlcyBhcmUgY29tcGFyZWQpLgorICAgICAgICAqIE5leHQgTUFDSElORXMgYXJlIGlnbm9yZWQKK0VPRgorfQorCisjIFByaW50IGVycm9yIGluZm9ybWF0aW9uIGFuZCBleGl0LgorZWNob19lcnJvciAoKSB7CisgIGVjaG8gIkVSUk9SOiAkMSIgPiYyCisgIGV4aXQgMQorfQorCit3aGlsZSBbIC1uICIkMSIgXTsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC0tdG1wZGlyPSopCisgICAgICB0bXBkaXI9YGVjaG8gJDEgfCBzZWQgLWUgJ3MjXi0tdG1wZGlyPSMjJyB8IHhhcmdzIHJlYWRsaW5rIC1lYAorICAgICAgWyAtZCAiJHRtcGRpciIgXSB8fCBlY2hvX2Vycm9yICJJbnZhbGlkIGFyZ3VtZW50IHRvIC0tdG1wZGlyIgorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLW1hY2hpbmVzPSopCisgICAgICBtYWNoaW5lcz1gZWNobyAkMSB8IHNlZCAtZSAncyNeLS1tYWNoaW5lcz0iKlwoW14iXSpcKSIqI1wxIydgCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0tdGFyZ2V0cz0qKQorICAgICAgdGFyZ2V0cz1gZWNobyAkMSB8IHNlZCAtZSAncyNeLS10YXJnZXRzPSIqXChbXiJdKlwpIiojXDEjJ2AKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS1hbmFseXplKQorICAgICAgYW5hbHl6ZT0iWSIKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS1oZWxwfC1oKQorICAgICAgdXNhZ2UKKyAgICAgIGV4aXQgMAorICAgICAgICA7OworICAgICopCisgICAgICBlY2hvICJJbnZhbGlkIGFyZ3VtZW50cyAkKiIKKyAgICAgIGVjaG9fZXJyb3IgIlRyeSAnJDAgLWgnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyAgICAgICAgOzsKKyAgZXNhYworZG9uZQorCisjIHRtcGRpciBkaXJlY3RvcnksIHVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBUTVBESVIKKyMgaWYgaXQgd2FzIG5vdCBzcGVjaWZpZWQsIG90aGVyd2lzZSwgZXJyb3IuCitbIC1uICIkdG1wZGlyIiBdIHx8IHRtcGRpcj0kVE1QRElSCitbIC1uICIkdG1wZGlyIiBdIHx8IGVjaG9fZXJyb3IgIk5vIHRtcGRpciBmb3VuZCEiCitbIC1kICIkdG1wZGlyIiBdIHx8IGVjaG9fZXJyb3IgIkludmFsaWQgdG1wZGlyIFwiJHRtcGRpclwiIgorWyAtbiAiJG1hY2hpbmVzIiBdIHx8IG1hY2hpbmVzPSRNQUNISU5FUworWyAtbiAiJG1hY2hpbmVzIiBdIHx8IG1hY2hpbmVzPSRkZWZhdWx0X21hY2hpbmVzCitbIC1uICIkdGFyZ2V0cyIgXSB8fCB0YXJnZXRzPSRUQVJHRVRTCitbIC1uICIkdGFyZ2V0cyIgXSB8fCB0YXJnZXRzPSRkZWZhdWx0X3RhcmdldHMKKworT1VUUFVUPSR7dG1wZGlyfS9zc3RhdGUtZGlmZi9gZGF0ZSAiKyVzImAKK2RlY2xhcmUgLWkgUkVTVUxUPTAKKworZm9yIE0gaW4gJHttYWNoaW5lc307IGRvCisgIFsgLWQgJHt0bXBkaXJ9L3N0YW1wcy8gXSAmJiBmaW5kICR7dG1wZGlyfS9zdGFtcHMvIC1uYW1lIFwqc2lnZGF0YVwqIHwgeGFyZ3Mgcm0gLWYKKyAgbWtkaXIgLXAgJHtPVVRQVVR9LyR7TX0KKyAgZXhwb3J0IE1BQ0hJTkU9JHtNfQorICBiaXRiYWtlIC1TIG5vbmUgJHt0YXJnZXRzfSAyPiYxIHwgdGVlIC1hICR7T1VUUFVUfS8ke019L2xvZzsKKyAgUkVTVUxUKz0ke1BJUEVTVEFUVVNbMF19CisgIGlmIGxzICR7dG1wZGlyfS9zdGFtcHMvKiA+L2Rldi9udWxsIDI+L2Rldi9udWxsIDsgdGhlbgorICAgIGNwIC1yYSAke3RtcGRpcn0vc3RhbXBzLyogJHtPVVRQVVR9LyR7TX0KKyAgICBmaW5kICR7T1VUUFVUfS8ke019IC1uYW1lIFwqc2lnZGF0YVwqIHwgc2VkICJzIyR7T1VUUFVUfS8ke019LyMjZyIgfCBzb3J0ID4gJHtPVVRQVVR9LyR7TX0vbGlzdAorICAgIE1fVU5ERVJTQ09SRT1gZWNobyAke019IHwgc2VkICdzLy0vXy9nJ2AKKyAgICBzZWQgInMvJHtNX1VOREVSU0NPUkV9L01BQ0hJTkUvZzsgcy8ke019L01BQ0hJTkUvZyIgJHtPVVRQVVR9LyR7TX0vbGlzdCB8IHNvcnQgPiAke09VVFBVVH0vJHtNfS9saXN0Lk0KKyAgICBmaW5kICR7dG1wZGlyfS9zdGFtcHMvIC1uYW1lIFwqc2lnZGF0YVwqIHwgeGFyZ3Mgcm0gLWYKKyAgZWxzZQorICAgIHByaW50ZiAiRVJST1I6IG5vIHNpZ2RhdGEgZmlsZXMgd2VyZSBnZW5lcmF0ZWQgZm9yIE1BQ0hJTkUgJE0gaW4gJHt0bXBkaXJ9L3N0YW1wc1xuIjsKKyAgZmkKK2RvbmUKKworZnVuY3Rpb24gY29tcGFyZVNpZ25hdHVyZXMoKSB7CisgIE1BQ0hJTkUxPSQxCisgIE1BQ0hJTkUyPSQyCisgIFBBVFRFUk49IiQzIgorICBQUkVfUEFUVEVSTj0iIgorICBbIC1uICIke1BBVFRFUk59IiBdIHx8IFBSRV9QQVRURVJOPSItdiIKKyAgWyAtbiAiJHtQQVRURVJOfSIgXSB8fCBQQVRURVJOPSJNQUNISU5FIgorICBmb3IgVEFTSyBpbiBkb19jb25maWd1cmUuc2lnZGF0YSBkb19wb3B1bGF0ZV9zeXNyb290LnNpZ2RhdGEgZG9fcGFja2FnZV93cml0ZV9pcGsuc2lnZGF0YTsgZG8KKyAgICBwcmludGYgIlxuXG4gPT09IENvbXBhcmluZyBzaWduYXR1cmVzIGZvciB0YXNrICR7VEFTS30gYmV0d2VlbiAke01BQ0hJTkUxfSBhbmQgJHtNQUNISU5FMn0gPT09XG4iIHwgdGVlIC1hICR7T1VUUFVUfS9zaWduYXR1cmVzLiR7TUFDSElORTJ9LiR7VEFTS30ubG9nCisgICAgZGlmZiAke09VVFBVVH0vJHtNQUNISU5FMX0vbGlzdC5NICR7T1VUUFVUfS8ke01BQ0hJTkUyfS9saXN0Lk0gfCBncmVwICR7UFJFX1BBVFRFUk59ICIke1BBVFRFUk59IiB8IGdyZXAgJHtUQVNLfSA+ICR7T1VUUFVUfS9zaWduYXR1cmVzLiR7TUFDSElORTJ9LiR7VEFTS30KKyAgICBmb3IgaSBpbiBgY2F0ICR7T1VUUFVUfS9zaWduYXR1cmVzLiR7TUFDSElORTJ9LiR7VEFTS30gfCBzZWQgJ3MjW14vXSovXChbXi9dKlwpLy4qI1wxI2cnIHwgc29ydCAtdSB8IHhhcmdzYDsgZG8KKyAgICAgIFsgLWUgJHtPVVRQVVR9LyR7TUFDSElORTF9LyovJGkvKiR7VEFTS30qIF0gfHwgZWNobyAiSU5GTzogJHtpfSB0YXNrICR7VEFTS30gZG9lc24ndCBleGlzdCBpbiAke01BQ0hJTkUxfSIgPiYyCisgICAgICBbIC1lICR7T1VUUFVUfS8ke01BQ0hJTkUxfS8qLyRpLyoke1RBU0t9KiBdIHx8IGNvbnRpbnVlCisgICAgICBbIC1lICR7T1VUUFVUfS8ke01BQ0hJTkUyfS8qLyRpLyoke1RBU0t9KiBdIHx8IGVjaG8gIklORk86ICR7aX0gdGFzayAke1RBU0t9IGRvZXNuJ3QgZXhpc3QgaW4gJHtNQUNISU5FMn0iID4mMgorICAgICAgWyAtZSAke09VVFBVVH0vJHtNQUNISU5FMn0vKi8kaS8qJHtUQVNLfSogXSB8fCBjb250aW51ZQorICAgICAgcHJpbnRmICJFUlJPUjogJGkgZGlmZmVyZW50IHNpZ25hdHVyZSBmb3IgdGFzayAke1RBU0t9IGJldHdlZW4gJHtNQUNISU5FMX0gYW5kICR7TUFDSElORTJ9XG4iOworICAgICAgYml0YmFrZS1kaWZmc2lncyAke09VVFBVVH0vJHtNQUNISU5FMX0vKi8kaS8qJHtUQVNLfSogJHtPVVRQVVR9LyR7TUFDSElORTJ9LyovJGkvKiR7VEFTS30qOworICAgICAgZWNobyAiJGkiID4+ICR7T1VUUFVUfS9mYWlsZWQtcmVjaXBlcy5sb2cKKyAgICAgIGVjaG8KKyAgICBkb25lIHwgdGVlIC1hICR7T1VUUFVUfS9zaWduYXR1cmVzLiR7TUFDSElORTJ9LiR7VEFTS30ubG9nCisgICAgIyBkb24ndCBjcmVhdGUgZW1wdHkgZmlsZXMKKyAgICBFUlJPUlM9YGdyZXAgIl5FUlJPUi4qIiAke09VVFBVVH0vc2lnbmF0dXJlcy4ke01BQ0hJTkUyfS4ke1RBU0t9LmxvZyB8IHdjIC1sYAorICAgIGlmIFsgIiR7RVJST1JTfSIgIT0gIjAiIF0gOyB0aGVuCisgICAgICBlY2hvICJFUlJPUjogJHtFUlJPUlN9IGVycm9ycyBmb3VuZCBpbiAke09VVFBVVH0vc2lnbmF0dXJlcy4ke01BQ0hJTkUyfS4ke1RBU0t9LmxvZyIKKyAgICAgIFJFU1VMVCs9JHtFUlJPUlN9CisgICAgZmkKKyAgZG9uZQorfQorCitmdW5jdGlvbiBjb21wYXJlTWFjaGluZXMoKSB7CisgIFsgIiQjIiAtZ2UgMiBdICYmIGNvbXBhcmVTaWduYXR1cmVzICQxICQyCisgIFsgIiQjIiAtZ2UgMyBdICYmIGNvbXBhcmVTaWduYXR1cmVzICQxICQzICJcKF48IGFsbFwpXHxcKF48IHg4Nl82NC1saW51eFwpXHxcKF48IGk1ODYtbGludXhcKSIKK30KKworaWYgWyAiJHthbmFseXplfSIgPSAiWSIgXSA7IHRoZW4KKyAgY29tcGFyZU1hY2hpbmVzICR7bWFjaGluZXN9CitmaQorCitpZiBbICIke1JFU1VMVH0iICE9ICIwIiAtYSAtZiAke09VVFBVVH0vZmFpbGVkLXJlY2lwZXMubG9nIF0gOyB0aGVuCisgIGNhdCAke09VVFBVVH0vZmFpbGVkLXJlY2lwZXMubG9nIHwgc29ydCAtdSA+JHtPVVRQVVR9L2ZhaWxlZC1yZWNpcGVzLmxvZy51ICYmIG12ICR7T1VUUFVUfS9mYWlsZWQtcmVjaXBlcy5sb2cudSAke09VVFBVVH0vZmFpbGVkLXJlY2lwZXMubG9nCisgIGVjaG8gIkVSUk9SOiAke1JFU1VMVH0gaXNzdWVzIHdlcmUgZm91bmQgaW4gdGhlc2UgcmVjaXBlczogYGNhdCAke09VVFBVVH0vZmFpbGVkLXJlY2lwZXMubG9nIHwgeGFyZ3NgIgorZmkKKworZWNobyAiSU5GTzogT3V0cHV0IHdyaXR0ZW4gaW46ICR7T1VUUFVUfSIKK2V4aXQgJHtSRVNVTFR9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvc3N0YXRlLXN5c3Jvb3QtY3J1ZnQuc2ggYi95b2N0by1wb2t5L3NjcmlwdHMvc3N0YXRlLXN5c3Jvb3QtY3J1ZnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjYyNDg1ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9zc3RhdGUtc3lzcm9vdC1jcnVmdC5zaApAQCAtMCwwICsxLDE1MiBAQAorIyEvYmluL3NoCisKKyMgVXNlZCB0byBmaW5kIGZpbGVzIGluc3RhbGxlZCBpbiBzeXNyb290IHdoaWNoIGFyZSBub3QgdHJhY2tlZCBieSBzc3RhdGUgbWFuaWZlc3QKKworIyBHbG9iYWwgdmFycwordG1wZGlyPQorCit1c2FnZSAoKSB7CisgIGNhdCA8PCBFT0YKK1dlbGNvbWUgdG8gc3lzcm9vdCBjcnVmdCBmaW5kaW5nIHV0aWxpdHkuCiskMCA8T1BUSU9OPgorCitPcHRpb25zOgorICAtaCwgLS1oZWxwCisgICAgICAgIERpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0LgorCisgIC0tdG1wZGlyPTx0bXBkaXI+CisgICAgICAgIFNwZWNpZnkgdG1wZGlyLCB3aWxsIHVzZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgVE1QRElSIGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQuCisJU29tZXRoaW5nIGxpa2UgL09FL29lLWNvcmUvdG1wLWVnbGliYyAobm8gLyBhdCB0aGUgZW5kKS4KKworICAtLXdoaXRlbGlzdD08d2hpdGVsaXN0LWZpbGU+CisgICAgICAgIFRleHQgZmlsZSwgZWFjaCBsaW5lIGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgcGF0aHMgd2Ugd2FudCB0byBpZ25vcmUgaW4gcmVzdWx0aW5nIGRpZmYuCisgICAgICAgIFlvdSBjYW4gdXNlIGRpZmYgZmlsZSBmcm9tIHRoZSBzY3JpcHQgb3V0cHV0LCBpZiBpdCBjb250YWlucyBvbmx5IGV4cGVjdGVkIGV4Y2VwdGlvbnMuCisgICAgICAgICcjJyBpcyB1c2VkIGFzIHJlZ2V4cCBkZWxpbWl0ZXIsIHNvIHlvdSBkb24ndCBuZWVkIHRvIHByZWZpeCBmb3J3YXJkIHNsYXNoZXMgaW4gcGF0aHMuCisgICAgICAgIF4gYW5kICQgaXMgYXV0b21hdGljYWxseSBhZGRlZCwgc28gcHJvdmlkZSBvbmx5IHRoZSBtaWRkbGUgcGFydC4KKyAgICAgICAgTGluZXMgc3RhcnRpbmcgd2l0aCAnIycgYXJlIGlnbm9yZWQgYXMgY29tbWVudHMuCisgICAgICAgIEFsbCBwYXRocyBhcmUgcmVsYXRpdmUgdG8gInN5c3Jvb3RzIiBkaXJlY3RvcnkuCisgICAgICAgIERpcmVjdG9yaWVzIGRvbid0IGVuZCB3aXRoIGZvcndhcmQgc2xhc2guCitFT0YKK30KKworIyBQcmludCBlcnJvciBpbmZvcm1hdGlvbiBhbmQgZXhpdC4KK2VjaG9fZXJyb3IgKCkgeworICBlY2hvICJFUlJPUjogJDEiID4mMgorICBleGl0IDEKK30KKword2hpbGUgWyAtbiAiJDEiIF07IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRtcGRpcj0qKQorICAgICAgdG1wZGlyPWBlY2hvICQxIHwgc2VkIC1lICdzI14tLXRtcGRpcj0jIycgfCB4YXJncyByZWFkbGluayAtZWAKKyAgICAgIFsgLWQgIiR0bXBkaXIiIF0gfHwgZWNob19lcnJvciAiSW52YWxpZCBhcmd1bWVudCB0byAtLXRtcGRpciIKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS13aGl0ZWxpc3Q9KikKKyAgICAgIGZ3aGl0ZWxpc3Q9YGVjaG8gJDEgfCBzZWQgLWUgJ3MjXi0td2hpdGVsaXN0PSMjJyB8IHhhcmdzIHJlYWRsaW5rIC1lYAorICAgICAgWyAtZiAiJGZ3aGl0ZWxpc3QiIF0gfHwgZWNob19lcnJvciAiSW52YWxpZCBhcmd1bWVudCB0byAtLXdoaXRlbGlzdCIKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS1oZWxwfC1oKQorICAgICAgdXNhZ2UKKyAgICAgIGV4aXQgMAorICAgICAgICA7OworICAgICopCisgICAgICBlY2hvICJJbnZhbGlkIGFyZ3VtZW50cyAkKiIKKyAgICAgIGVjaG9fZXJyb3IgIlRyeSAnJDAgLWgnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyAgICAgICAgOzsKKyAgZXNhYworZG9uZQorCisjIHNzdGF0ZSBjYWNoZSBkaXJlY3RvcnksIHVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBUTVBESVIKKyMgaWYgaXQgd2FzIG5vdCBzcGVjaWZpZWQsIG90aGVyd2lzZSwgZXJyb3IuCitbIC1uICIkdG1wZGlyIiBdIHx8IHRtcGRpcj0kVE1QRElSCitbIC1uICIkdG1wZGlyIiBdIHx8IGVjaG9fZXJyb3IgIk5vIHRtcGRpciBmb3VuZCEiCitbIC1kICIkdG1wZGlyIiBdIHx8IGVjaG9fZXJyb3IgIkludmFsaWQgdG1wZGlyIFwiJHRtcGRpclwiIgorCitPVVRQVVQ9JHt0bXBkaXJ9L3N5c3Jvb3QuY3J1ZnQuYGRhdGUgIislcyJgCisKKyMgdG9wIGxldmVsIGRpcmVjdG9yaWVzCitXSElURUxJU1Q9IlteL10qIgorCisjIGdlbmVyYXRlZCBieSBiYXNlLXBhc3N3ZCByZWNpcGUKK1dISVRFTElTVD0iJHtXSElURUxJU1R9IFwKKyAgLiovZXRjL2dyb3VwLVw/IFwKKyAgLiovZXRjL3Bhc3N3ZC1cPyBcCisiCisjIGdlbmVyYXRlZCBieSBwc2V1ZG8tbmF0aXZlCitXSElURUxJU1Q9IiR7V0hJVEVMSVNUfSBcCisgIC4qL3Zhci9wc2V1ZG8gXAorICAuKi92YXIvcHNldWRvL1teL10qIFwKKyIKKworIyBnZW5lcmF0ZWQgYnkgcGFja2FnZS5iYmNsYXNzOlNITElCU0RJUlMgPSAiJHtQS0dEQVRBX0RJUn0vJHtNTFBSRUZJWH1zaGxpYnMiCitXSElURUxJU1Q9IiR7V0hJVEVMSVNUfSBcCisgIC4qL3NobGlicyBcCisgIC4qL3BrZ2RhdGEgXAorIgorCisjIGdlbmVyYXRlZCBieSBweXRob24KK1dISVRFTElTVD0iJHtXSElURUxJU1R9IFwKKyAgLipcLnB5YyBcCisgIC4qXC5weW8gXAorIgorCisjIGdlbmVyYXRlZCBieSBzZ21sLWNvbW1vbi1uYXRpdmUKK1dISVRFTElTVD0iJHtXSElURUxJU1R9IFwKKyAgLiovZXRjL3NnbWwvc2dtbC1kb2Nib29rLmJhayBcCisiCisKKyMgZ2VuZXJhdGVkIGJ5IHRvb2xjaGFpbgorV0hJVEVMSVNUPSIke1dISVRFTElTVH0gXAorICBbXi9dKi10Y2Jvb3RzdHJhcC9saWIgXAorIgorCisjIGdlbmVyYXRlZCBieSB1c2VyYWRkLmJiY2xhc3MKK1dISVRFTElTVD0iJHtXSElURUxJU1R9IFwKKyAgW14vXSovaG9tZSBcCisgIFteL10qL2hvbWUveHVzZXIgXAorIgorCitTWVNST09UUz0iYHJlYWRsaW5rIC1mICR7dG1wZGlyfWAvc3lzcm9vdHMvIgorCitta2RpciAke09VVFBVVH0KK2ZpbmQgJHt0bXBkaXJ9L3NzdGF0ZS1jb250cm9sIC1uYW1lIFwqLnBvcHVsYXRlLXN5c3Jvb3RcKiAtbyAtbmFtZSBcKi5wb3B1bGF0ZV9zeXNyb290XCogLW8gLW5hbWUgXCoucGFja2FnZVwqIHwgeGFyZ3MgY2F0IHwgZ3JlcCBzeXNyb290cyB8IFwKKyAgc2VkICdzIy8kIyNnOyBzIy8vLyojLyNnJyB8IFwKKyAgIyB3b3JrIGFyb3VuZCBmb3IgcGF0aHMgZW5kaW5nIHdpdGggLyBmb3IgZGlyZWN0b3JpZXMgYW5kIG11bHRpcGxpZWQgLy8gKGUuZy4gcGF0aHMgdG8gbmF0aXZlIHN5c3Jvb3QpCisgIHNvcnQgfCBzZWQgInMjXiR7U1lTUk9PVFN9IyNnIiA+ICR7T1VUUFVUfS9tYXN0ZXIubGlzdC5hbGwudHh0Citzb3J0IC11ICR7T1VUUFVUfS9tYXN0ZXIubGlzdC5hbGwudHh0ID4gJHtPVVRQVVR9L21hc3Rlci5saXN0LnR4dCAjIC11IGJlY2F1c2Ugc29tZSBkaXJlY3RvcmllcyBhcmUgbGlzdGVkIGZvciBtb3JlIHJlY2lwZXMKK2ZpbmQgJHt0bXBkaXJ9L3N5c3Jvb3RzLyB8IFwKKyAgc29ydCB8IHNlZCAicyNeJHtTWVNST09UU30jI2ciID4gJHtPVVRQVVR9L3N5c3Jvb3QubGlzdC50eHQKKworZGlmZiAke09VVFBVVH0vbWFzdGVyLmxpc3QuYWxsLnR4dCAke09VVFBVVH0vbWFzdGVyLmxpc3QudHh0ID4gJHtPVVRQVVR9L2R1cGxpY2F0ZXMudHh0CitkaWZmICR7T1VUUFVUfS9tYXN0ZXIubGlzdC50eHQgJHtPVVRQVVR9L3N5c3Jvb3QubGlzdC50eHQgPiAke09VVFBVVH0vZGlmZi5hbGwudHh0CisKK2dyZXAgIl4+IC4iICR7T1VUUFVUfS9kaWZmLmFsbC50eHQgfCBzZWQgJ3MvXj4gLy9nJyA+ICR7T1VUUFVUfS9kaWZmLnR4dAorZm9yIGl0ZW0gaW4gJHtXSElURUxJU1R9OyBkbworICBzZWQgLWkgIlxcI14ke2l0ZW19XCQjZCIgJHtPVVRQVVR9L2RpZmYudHh0OworICBlY2hvICIke2l0ZW19IiA+PiAke09VVFBVVH0vdXNlZC53aGl0ZWxpc3QudHh0Citkb25lCisKK2lmIFsgLXMgIiRmd2hpdGVsaXN0IiBdIDsgdGhlbgorICBjYXQgJGZ3aGl0ZWxpc3QgPj4gJHtPVVRQVVR9L3VzZWQud2hpdGVsaXN0LnR4dAorICBjYXQgJGZ3aGl0ZWxpc3QgfCBncmVwIC12ICdeIycgfCB3aGlsZSByZWFkIGl0ZW07IGRvCisgICAgc2VkIC1pICJcXCNeJHtpdGVtfVwkI2QiICR7T1VUUFVUfS9kaWZmLnR4dDsKKyAgZG9uZQorZmkKKyMgdG9vIG1hbnkgZmFsc2UgcG9zaXRpdmVzIGZvciBkaXJlY3RvcmllcworIyBlY2hvICJGb2xsb3dpbmcgZmlsZXMgYXJlIGluc3RhbGxlZCBpbiBzeXNyb290IGF0IGxlYXN0IHR3aWNlIgorIyBjYXQgJHtPVVRQVVR9L2R1cGxpY2F0ZXMKKworUkVTVUxUPWBjYXQgJHtPVVRQVVR9L2RpZmYudHh0IHwgd2MgLWxgCisKK2lmIFsgIiR7UkVTVUxUfSIgIT0gIjAiIF0gOyB0aGVuCisgIGVjaG8gIkVSUk9SOiAke1JFU1VMVH0gaXNzdWVzIHdlcmUgZm91bmQuIgorICBlY2hvICJFUlJPUjogRm9sbG93aW5nIGZpbGVzIGFyZSBpbnN0YWxsZWQgaW4gc3lzcm9vdCwgYnV0IG5vdCB0cmFja2VkIGJ5IHNzdGF0ZToiCisgIGNhdCAke09VVFBVVH0vZGlmZi50eHQKK2Vsc2UKKyAgZWNobyAiSU5GTzogQWxsIGZpbGVzIGFyZSB0cmFja2VkIGJ5IHNzdGF0ZSBvciB3ZXJlIGV4cGxpY2l0bHkgaWdub3JlZCBieSB0aGlzIHNjcmlwdCIKK2ZpCisKK2VjaG8gIklORk86IE91dHB1dCB3cml0dGVuIGluOiAke09VVFBVVH0iCitleGl0ICR7UkVTVUxUfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3N3YWJiZXItc3RyYWNlLWF0dGFjaCBiL3lvY3RvLXBva3kvc2NyaXB0cy9zd2FiYmVyLXN0cmFjZS1hdHRhY2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmIwMzkxYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9zd2FiYmVyLXN0cmFjZS1hdHRhY2gKQEAgLTAsMCArMSwzMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzdWJwcm9jZXNzCisKKyMgRGV0YWNoIGZyb20gdGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFsIGFuZCBwYXJlbnQgcHJvY2VzcyBieSBmb3JraW5nIHR3aWNlIHRvIGRhZW1vbml6ZSBvdXJzZWx2ZXMsCisjIHRoZW4gcnVuIHRoZSBjb21tYW5kIHBhc3NlZCBhcyBhcmd2WzFdLiBTZW5kIGxvZyBkYXRhIHRvIGFyZ3ZbMl0uCisKK3BpZCA9IG9zLmZvcmsoKQoraWYgKHBpZCA9PSAwKToKKyAgICBvcy5zZXRzaWQoKQorICAgIHBpZCA9IG9zLmZvcmsoKQorICAgIGlmIChwaWQgIT0gMCk6CisgICAgICAgIG9zLl9leGl0KDApCitlbHNlOgorICAgIHN5cy5leGl0KCkKKworCitzaSA9IGZpbGUob3MuZGV2bnVsbCwgJ3InKQorc28gPSBmaWxlKHN5cy5hcmd2WzJdLCAndycpCitzZSA9IHNvCisKKyMgUmVwbGFjZSB0aG9zZSBmZHMgd2l0aCBvdXIgb3duCitvcy5kdXAyKHNpLmZpbGVubygpLCBzeXMuc3RkaW4uZmlsZW5vKCkpCitvcy5kdXAyKHNvLmZpbGVubygpLCBzeXMuc3Rkb3V0LmZpbGVubygpKQorb3MuZHVwMihzZS5maWxlbm8oKSwgc3lzLnN0ZGVyci5maWxlbm8oKSkKKworcmV0ID0gc3VicHJvY2Vzcy5jYWxsKHN5cy5hcmd2WzFdLCBzaGVsbD1UcnVlKQorCitvcy5fZXhpdChyZXQpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9zeXNyb290LXJlbGF0aXZlbGlua3MucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvc3lzcm9vdC1yZWxhdGl2ZWxpbmtzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFjMjYzNjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvc3lzcm9vdC1yZWxhdGl2ZWxpbmtzLnB5CkBAIC0wLDAgKzEsMzEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgoraW1wb3J0IHN5cworaW1wb3J0IG9zCisKKyMgVGFrZSBhIHN5c3Jvb3QgZGlyZWN0b3J5IGFuZCB0dXJuIGFsbCB0aGUgYWJvbHV0ZSBzeW1saW5rcyBhbmQgdHVybiB0aGVtIGludG8KKyMgcmVsYXRpdmUgb25lcyBzdWNoIHRoYXQgdGhlIHN5c3Jvb3QgaXMgdXNhYmxlIHdpdGhpbiBhbm90aGVyIHN5c3RlbS4KKworaWYgbGVuKHN5cy5hcmd2KSAhPSAyOgorICAgIHByaW50KCJVc2FnZSBpcyAiICsgc3lzLmFyZ3ZbMF0gKyAiPGRpcmVjdG9yeT4iKQorICAgIHN5cy5leGl0KDEpCisKK3RvcGRpciA9IHN5cy5hcmd2WzFdCit0b3BkaXIgPSBvcy5wYXRoLmFic3BhdGgodG9wZGlyKQorCitkZWYgaGFuZGxlbGluayhmaWxlcCwgc3ViZGlyKToKKyAgICBsaW5rID0gb3MucmVhZGxpbmsoZmlsZXApCisgICAgaWYgbGlua1swXSAhPSAiLyI6CisgICAgICAgIHJldHVybgorICAgIGlmIGxpbmsuc3RhcnRzd2l0aCh0b3BkaXIpOgorICAgICAgICByZXR1cm4KKyAgICAjcHJpbnQoIlJlcGxhY2luZyAlcyB3aXRoICVzIGZvciAlcyIgJSAobGluaywgdG9wZGlyK2xpbmssIGZpbGVwKSkKKyAgICBwcmludCgiUmVwbGFjaW5nICVzIHdpdGggJXMgZm9yICVzIiAlIChsaW5rLCBvcy5wYXRoLnJlbHBhdGgodG9wZGlyK2xpbmssIHN1YmRpciksIGZpbGVwKSkKKyAgICBvcy51bmxpbmsoZmlsZXApCisgICAgb3Muc3ltbGluayhvcy5wYXRoLnJlbHBhdGgodG9wZGlyK2xpbmssIHN1YmRpciksIGZpbGVwKQorCitmb3Igc3ViZGlyLCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHRvcGRpcik6CisgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgIGZpbGVwID0gb3MucGF0aC5qb2luKHN1YmRpciwgZikKKyAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoZmlsZXApOgorICAgICAgICAgICAgI3ByaW50KCJDb25zaWRlcmluZyAlcyIgJSBmaWxlcCkKKyAgICAgICAgICAgIGhhbmRsZWxpbmsoZmlsZXAsIHN1YmRpcikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy90ZXN0LWRlcGVuZGVuY2llcy5zaCBiL3lvY3RvLXBva3kvc2NyaXB0cy90ZXN0LWRlcGVuZGVuY2llcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMTcwOTQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3Rlc3QtZGVwZW5kZW5jaWVzLnNoCkBAIC0wLDAgKzEsMjg2IEBACisjIS9iaW4vYmFzaAorCisjIEF1dGhvcjogTWFydGluIEphbnNhIDxtYXJ0aW4uamFuc2FAZ21haWwuY29tPgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTMgTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCisjIFVzZWQgdG8gZGV0ZWN0IG1pc3NpbmcgZGVwZW5kZW5jaWVzIG9yIGF1dG9tYWdpY2FsbHkKKyMgZW5hYmxlZCBkZXBlbmRlbmNpZXMgd2hpY2ggYXJlbid0IGV4cGxpY2l0bHkgZW5hYmxlZAorIyBvciBkaXNhYmxlZC4gVXNpbmcgYmFzaCB0byBoYXZlIFBJUEVTVEFUVVMgdmFyaWFibGUuCisKKyMgSXQgZG9lcyAzIGJ1aWxkcyBvZiA8dGFyZ2V0PgorIyAxc3QgdG8gcG9wdWxhdGUgc3N0YXRlLWNhY2hlIGRpcmVjdG9yeSBhbmQgc3lzcm9vdAorIyAybmQgdG8gcmVidWlsZCBlYWNoIHJlY2lwZSB3aXRoIGV2ZXJ5IHBvc3NpYmxlCisjICAgICBkZXBlbmRlbmN5IGZvdW5kIGluIHN5c3Jvb3QgKHdoaWNoIHN0YXlzIHBvcHVsYXRlZAorIyAgICAgZnJvbSAxc3QgYnVpbGQKKyMgM3JkIHRvIHJlYnVpbGQgZWFjaCByZWNpcGUgb25seSB3aXRoIGRlcGVuZGVuY2llcyBkZWZpbmVkCisjICAgICBpbiBERVBFTkRTCisjIDR0aCAob3B0aW9uYWwpIHJlcGVhdCBidWlsZCBsaWtlIDNyZCB0byBtYWtlIHN1cmUgdGhhdAorIyAgICAgbWluaW1hbCB2ZXJzaW9ucyBvZiBkZXBlbmRlbmNpZXMgZGVmaW5lZCBpbiBERVBFTkRTCisjICAgICBpcyBhbHNvIGVub3VnaAorCisjIEdsb2JhbCB2YXJzCit0bXBkaXI9Cit0YXJnZXRzPQorcmVjaXBlcz0KK2J1aWxkaGlzdG9yeT0KK2J1aWxkdHlwZT0KK2RlZmF1bHRfdGFyZ2V0cz0id29ybGQiCitkZWZhdWx0X2J1aWxkaGlzdG9yeT0iYnVpbGRoaXN0b3J5IgorZGVmYXVsdF9idWlsZHR5cGU9IjEgMiAzIGMiCisKK3VzYWdlICgpIHsKKyAgY2F0IDw8IEVPRgorV2VsY29tZSB0byB1dGlsaXR5IHRvIGRldGVjdCBtaXNzaW5nIG9yIGF1dG9lbmFibGVkIGRlcGVuZGVuY2llcy4KK1dBUk5JTkc6IHRoaXMgdXRpbGl0eSB3aWxsIGNvbXBsZXRlbHkgcmVtb3ZlIHlvdXIgdG1wZGlyIChtYWtlIHN1cmUKKyAgICAgICAgIHlvdSBkb24ndCBoYXZlIGltcG9ydGFudCBidWlsZGhpc3Rvcnkgb3IgcGVyc2lzdGVudCBkaXIgdGhlcmUpLgorJDAgPE9QVElPTj4KKworT3B0aW9uczoKKyAgLWgsIC0taGVscAorICAgICAgICBEaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdC4KKworICAtLXRtcGRpcj08dG1wZGlyPgorICAgICAgICBTcGVjaWZ5IHRtcGRpciwgd2lsbCB1c2UgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFRNUERJUiBpZiBpdCBpcyBub3Qgc3BlY2lmaWVkLgorICAgICAgICBTb21ldGhpbmcgbGlrZSAvT0Uvb2UtY29yZS90bXAtZWdsaWJjIChubyAvIGF0IHRoZSBlbmQpLgorCisgIC0tdGFyZ2V0cz08dGFyZ2V0cz4KKyAgICAgICAgTGlzdCBvZiB0YXJnZXRzIHNlcGFyYXRlZCBieSBzcGFjZSwgd2lsbCB1c2UgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFRBUkdFVFMgaWYgaXQgaXMgbm90IHNwZWNpZmllZC4KKyAgICAgICAgSXQgd2lsbCBydW4gImJpdGJha2UgPHRhcmdldHM+IiB0byBwb3B1bGF0ZSBzeXNyb290cy4KKyAgICAgICAgRGVmYXVsdCB2YWx1ZSBpcyAid29ybGQiLgorCisgIC0tcmVjaXBlcz08cmVjaXBlcz4KKyAgICAgICAgRmlsZSB3aXRoIGxpc3Qgb2YgcmVjaXBlcyB3ZSB3YW50IHRvIHJlYnVpbGQgd2l0aCBtaW5pbWFsIGFuZCBtYXhpbWFsIHN5c3Jvb3QuCisgICAgICAgIFdpbGwgdXNlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBSRUNJUEVTIGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQuCisgICAgICAgIERlZmF1bHQgdmFsdWUgd2lsbCB1c2UgYWxsIHBhY2thZ2VzIGV2ZXIgcmVjb3JkZWQgaW4gYnVpbGRoaXN0b3J5IGRpcmVjdG9yeS4KKworICAtLWJ1aWxkaGlzdG9yeT08YnVpbGRoaXN0b3J5PgorICAgICAgICBQYXRoIHRvIGJ1aWxkaGlzdG9yeSBkaXJlY3RvcnksIGl0IG5lZWRzIHRvIGJlIGVuYWJsZWQgaW4geW91ciBjb25maWcsCisgICAgICAgIGJlY2F1c2UgaXQncyB1c2VkIHRvIGRldGVjdCBkaWZmZXJlbnQgZGVwZW5kZW5jaWVzIGFuZCB0byBjcmVhdGUgbGlzdAorICAgICAgICBvZiByZWNpcGVzIHRvIHJlYnVpbGQgd2hlbiBpdCdzIG5vdCBzcGVjaWZpZWQuCisgICAgICAgIFdpbGwgdXNlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBCVUlMREhJU1RPUlkgaWYgaXQgaXMgbm90IHNwZWNpZmllZC4KKyAgICAgICAgRGVmYXVsdCB2YWx1ZSBpcyAiYnVpbGRoaXN0b3J5IgorCisgIC0tYnVpbGR0eXBlPTxidWlsZHR5cGU+CisgICAgICAgIFRoZXJlIGFyZSA0IHR5cGVzIG9mIGJ1aWxkOgorICAgICAgICAgIDE6IGJ1aWxkIHRvIHBvcHVsYXRlIHNzdGF0ZS1jYWNoZSBkaXJlY3RvcnkgYW5kIHN5c3Jvb3QKKyAgICAgICAgICAyOiBidWlsZCB0byByZWJ1aWxkIGVhY2ggcmVjaXBlIHdpdGggZXZlcnkgcG9zc2libGUgZGVwCisgICAgICAgICAgMzogYnVpbGQgdG8gcmVidWlsZCBlYWNoIHJlY2lwZSB3aXRoIG1pbmltYWwgZGVwZW5kZW5jaWVzCisgICAgICAgICAgNDogYnVpbGQgdG8gcmVidWlsZCBlYWNoIHJlY2lwZSBhZ2FpbiB3aXRoIG1pbmltYWwgZGVwZW5kZW5jaWVzCisgICAgICAgICAgYzogY29tcGFyZSBidWlsZGhpc3RvcnkgZGlyZWN0b3JpZXMgZnJvbSBidWlsZCAyIGFuZCAzCisgICAgICAgIFdpbGwgdXNlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBCVUlMRFRZUEUgaWYgaXQgaXMgbm90IHNwZWNpZmllZC4KKyAgICAgICAgRGVmYXVsdCB2YWx1ZSBpcyAiMSAyIDMgYyIsIG9yZGVyIGlzIGltcG9ydGFudCwgdHlwZSA0IGlzIG9wdGlvbmFsLgorRU9GCit9CisKKyMgUHJpbnQgZXJyb3IgaW5mb3JtYXRpb24gYW5kIGV4aXQuCitlY2hvX2Vycm9yICgpIHsKKyAgZWNobyAiRVJST1I6ICQxIiA+JjIKKyAgZXhpdCAxCit9CisKK3doaWxlIFsgLW4gIiQxIiBdOyBkbworICBjYXNlICQxIGluCisgICAgLS10bXBkaXI9KikKKyAgICAgIHRtcGRpcj1gZWNobyAkMSB8IHNlZCAtZSAncyNeLS10bXBkaXI9IyMnIHwgeGFyZ3MgcmVhZGxpbmsgLWVgCisgICAgICBbIC1kICIkdG1wZGlyIiBdIHx8IGVjaG9fZXJyb3IgIkludmFsaWQgYXJndW1lbnQgdG8gLS10bXBkaXIiCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0tdGFyZ2V0cz0qKQorICAgICAgdGFyZ2V0cz1gZWNobyAkMSB8IHNlZCAtZSAncyNeLS10YXJnZXRzPSIqXChbXiJdKlwpIiojXDEjJ2AKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS1yZWNpcGVzPSopCisgICAgICByZWNpcGVzPWBlY2hvICQxIHwgc2VkIC1lICdzI14tLXJlY2lwZXM9IipcKFteIl0qXCkiKiNcMSMnYAorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLWJ1aWxkaGlzdG9yeT0qKQorICAgICAgYnVpbGRoaXN0b3J5PWBlY2hvICQxIHwgc2VkIC1lICdzI14tLWJ1aWxkaGlzdG9yeT0iKlwoW14iXSpcKSIqI1wxIydgCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0tYnVpbGR0eXBlPSopCisgICAgICBidWlsZHR5cGU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MjXi0tYnVpbGR0eXBlPSIqXChbXiJdKlwpIiojXDEjJ2AKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS1oZWxwfC1oKQorICAgICAgdXNhZ2UKKyAgICAgIGV4aXQgMAorICAgICAgICA7OworICAgICopCisgICAgICBlY2hvICJJbnZhbGlkIGFyZ3VtZW50cyAkKiIKKyAgICAgIGVjaG9fZXJyb3IgIlRyeSAnJDAgLWgnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyAgICAgICAgOzsKKyAgZXNhYworZG9uZQorCisjIHRtcGRpciBkaXJlY3RvcnksIHVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBUTVBESVIKKyMgaWYgaXQgd2FzIG5vdCBzcGVjaWZpZWQsIG90aGVyd2lzZSwgZXJyb3IuCitbIC1uICIkdG1wZGlyIiBdIHx8IHRtcGRpcj0kVE1QRElSCitbIC1uICIkdG1wZGlyIiBdIHx8IGVjaG9fZXJyb3IgIk5vIHRtcGRpciBmb3VuZCEiCitbIC1kICIkdG1wZGlyIiBdIHx8IGVjaG9fZXJyb3IgIkludmFsaWQgdG1wZGlyIFwiJHRtcGRpclwiIgorWyAtbiAiJHRhcmdldHMiIF0gfHwgdGFyZ2V0cz0kVEFSR0VUUworWyAtbiAiJHRhcmdldHMiIF0gfHwgdGFyZ2V0cz0kZGVmYXVsdF90YXJnZXRzCitbIC1uICIkcmVjaXBlcyIgXSB8fCByZWNpcGVzPSRSRUNJUEVTCitbIC1uICIkcmVjaXBlcyIgLWEgISAtZiAiJHJlY2lwZXMiIF0gJiYgZWNob19lcnJvciAiSW52YWxpZCBmaWxlIHdpdGggbGlzdCBvZiByZWNpcGVzIHRvIHJlYnVpbGQiCitbIC1uICIkcmVjaXBlcyIgXSB8fCBlY2hvICJBbGwgcGFja2FnZXMgZXZlciByZWNvcmRlZCBpbiBidWlsZGhpc3RvcnkgZGlyZWN0b3J5IHdpbGwgYmUgcmVidWlsdCIKK1sgLW4gIiRidWlsZGhpc3RvcnkiIF0gfHwgYnVpbGRoaXN0b3J5PSRCVUlMREhJU1RPUlkKK1sgLW4gIiRidWlsZGhpc3RvcnkiIF0gfHwgYnVpbGRoaXN0b3J5PSRkZWZhdWx0X2J1aWxkaGlzdG9yeQorWyAtZCAiJGJ1aWxkaGlzdG9yeSIgXSB8fCBlY2hvX2Vycm9yICJJbnZhbGlkIGJ1aWxkaGlzdG9yeSBkaXJlY3RvcnkgXCIkYnVpbGRoaXN0b3J5XCIiCitbIC1uICIkYnVpbGR0eXBlIiBdIHx8IGJ1aWxkdHlwZT0kQlVJTERUWVBFCitbIC1uICIkYnVpbGR0eXBlIiBdIHx8IGJ1aWxkdHlwZT0kZGVmYXVsdF9idWlsZHR5cGUKK2VjaG8gIiRidWlsZHR5cGUiIHwgZ3JlcCAtdiAnXlsxMjM0YyBdKiQnICYmIGVjaG9fZXJyb3IgIkludmFsaWQgYnVpbGR0eXBlIFwiJGJ1aWxkdHlwZVwiLCBvbmx5IHNvbWUgY29tYmluYXRpb24gb2YgMSwgMiwgMywgNCwgYyBzZXBhcmF0ZWQgYnkgc3BhY2UgaXMgYWxsb3dlZCIKKworT1VUUFVUX0JBU0U9dGVzdC1kZXBlbmRlbmNpZXMvYGRhdGUgIislcyJgCitkZWNsYXJlIC1pIFJFU1VMVD0wCisKK2J1aWxkX2FsbCgpIHsKKyAgZWNobyAiPT09PT0gMXN0IGJ1aWxkIHRvIHBvcHVsYXRlIHNzdGF0ZS1jYWNoZSBkaXJlY3RvcnkgYW5kIHN5c3Jvb3QgPT09PT0iCisgIE9VVFBVVDE9JHtPVVRQVVRfQkFTRX0vJHtUWVBFfV9hbGwKKyAgbWtkaXIgLXAgJHtPVVRQVVQxfQorICBlY2hvICJMb2dzIHdpbGwgYmUgc3RvcmVkIGluICR7T1VUUFVUMX0gZGlyZWN0b3J5IgorICBiaXRiYWtlIC1rICR0YXJnZXRzIDI+JjEgfCB0ZWUgLWEgJHtPVVRQVVQxfS9jb21wbGV0ZS5sb2cKKyAgUkVTVUxUKz0ke1BJUEVTVEFUVVNbMF19CisgIGdyZXAgIkVSUk9SOiBUYXNrLipmYWlsZWQiICR7T1VUUFVUMX0vY29tcGxldGUubG9nID4gJHtPVVRQVVQxfS9mYWlsZWQtdGFza3MubG9nCisgIGNhdCAke09VVFBVVDF9L2ZhaWxlZC10YXNrcy5sb2cgfCBzZWQgJ3NALiovQEBnOyBzQF8uKkBAZzsgc0BcLmJiLCAuKkBAZycgfCBzb3J0IC11ID4gJHtPVVRQVVQxfS9mYWlsZWQtcmVjaXBlcy5sb2cKK30KKworYnVpbGRfZXZlcnlfcmVjaXBlKCkgeworICBpZiBbICIke1RZUEV9IiA9ICIyIiBdIDsgdGhlbgorICAgIGVjaG8gIj09PT09IDJuZCBidWlsZCB0byByZWJ1aWxkIGVhY2ggcmVjaXBlIHdpdGggZXZlcnkgcG9zc2libGUgZGVwID09PT09IgorICAgIE9VVFBVVF9NQVg9JHtPVVRQVVRfQkFTRX0vJHtUWVBFfV9tYXgKKyAgICBPVVRQVVRCPSR7T1VUUFVUX01BWH0KKyAgZWxzZQorICAgIGVjaG8gIj09PT09IDNyZCBvciA0dGggYnVpbGQgdG8gcmVidWlsZCBlYWNoIHJlY2lwZSB3aXRoIG1pbmltYWwgZGVwZW5kZW5jaWVzID09PT09IgorICAgIE9VVFBVVF9NSU49JHtPVVRQVVRfQkFTRX0vJHtUWVBFfV9taW4KKyAgICBPVVRQVVRCPSR7T1VUUFVUX01JTn0KKyAgZmkKKworICBta2RpciAtcCAke09VVFBVVEJ9ICR7T1VUUFVUQn0vZmFpbGVkICR7T1VUUFVUQn0vb2sKKyAgZWNobyAiTG9ncyB3aWxsIGJlIHN0b3JlZCBpbiAke09VVFBVVEJ9IGRpcmVjdG9yeSIKKyAgaWYgWyAteiAiJHJlY2lwZXMiIF07IHRoZW4KKyAgICBscyAtZCAkYnVpbGRoaXN0b3J5L3BhY2thZ2VzLyovKiB8IHhhcmdzIC1uIDEgYmFzZW5hbWUgfCBzb3J0IC11ID4gJHtPVVRQVVRCfS9yZWNpcGUubGlzdAorICAgIHJlY2lwZXM9JHtPVVRQVVRCfS9yZWNpcGUubGlzdAorICBmaQorICBpZiBbICIke1RZUEV9IiAhPSAiMiIgXSA7IHRoZW4KKyAgICBlY2hvICIhISFSZW1vdmluZyB0bXBkaXIgXCIkdG1wZGlyXCIhISEiCisgICAgcm0gLXJmICR0bXBkaXIvZGVwbG95ICR0bXBkaXIvcGtnZGF0YSAkdG1wZGlyL3NzdGF0ZS1jb250cm9sICR0bXBkaXIvc3RhbXBzICR0bXBkaXIvc3lzcm9vdHMgJHRtcGRpci93b3JrICR0bXBkaXIvd29yay1zaGFyZWQgMj4vZGV2L251bGwKKyAgZmkKKyAgaT0xCisgIGNvdW50PWBjYXQgJHJlY2lwZXMgJHtPVVRQVVQxfS9mYWlsZWQtcmVjaXBlcy5sb2cgfCBzb3J0IC11IHwgd2MgLWxgCisgIGZvciByZWNpcGUgaW4gYGNhdCAkcmVjaXBlcyAke09VVFBVVDF9L2ZhaWxlZC1yZWNpcGVzLmxvZyB8IHNvcnQgLXVgOyBkbworICAgIGVjaG8gIkJ1aWxkaW5nIHJlY2lwZTogJHtyZWNpcGV9ICgkaS8kY291bnQpIgorICAgIGRlY2xhcmUgLWkgUkVDSVBFX1JFU1VMVD0wCisgICAgYml0YmFrZSAtYyBjbGVhbnNzdGF0ZSAke3JlY2lwZX0gPiAke09VVFBVVEJ9LyR7cmVjaXBlfS5sb2cgMj4mMTsKKyAgICBSRUNJUEVfUkVTVUxUKz0kPworICAgIGJpdGJha2UgJHtyZWNpcGV9ID4+ICR7T1VUUFVUQn0vJHtyZWNpcGV9LmxvZyAyPiYxOworICAgIFJFQ0lQRV9SRVNVTFQrPSQ/CisgICAgaWYgWyAiJHtSRUNJUEVfUkVTVUxUfSIgIT0gIjAiIF0gOyB0aGVuCisgICAgICBSRVNVTFQrPSR7UkVDSVBFX1JFU1VMVH0KKyAgICAgIG12ICR7T1VUUFVUQn0vJHtyZWNpcGV9LmxvZyAke09VVFBVVEJ9L2ZhaWxlZC8KKyAgICAgIGdyZXAgIkVSUk9SOiBUYXNrLipmYWlsZWQiICAke09VVFBVVEJ9L2ZhaWxlZC8ke3JlY2lwZX0ubG9nIHwgdGVlIC1hICR7T1VUUFVUQn0vZmFpbGVkLXRhc2tzLmxvZworICAgICAgZ3JlcCAiRVJST1I6IFRhc2suKmZhaWxlZCIgICR7T1VUUFVUQn0vZmFpbGVkLyR7cmVjaXBlfS5sb2cgfCBzZWQgJ3NALiovQEBnOyBzQF8uKkBAZzsgc0BcLmJiLCAuKkBAZycgPj4gJHtPVVRQVVRCfS9mYWlsZWQtcmVjaXBlcy5sb2cKKyAgICAgICMgYW5kIGFwcGVuZCBhbHNvICR7cmVjaXBlfSBpbiBjYXNlIHRoZSBmYWlsZWQgdGFzayB3YXMgZnJvbSBzb21lIGRlcGVuZGVuY3kKKyAgICAgIGVjaG8gJHtyZWNpcGV9ID4+ICR7T1VUUFVUQn0vZmFpbGVkLXJlY2lwZXMubG9nCisgICAgZWxzZQorICAgICAgbXYgJHtPVVRQVVRCfS8ke3JlY2lwZX0ubG9nICR7T1VUUFVUQn0vb2svCisgICAgZmkKKyAgICBpZiBbICIke1RZUEV9IiAhPSAiMiIgXSA7IHRoZW4KKyAgICAgIHJtIC1yZiAkdG1wZGlyL2RlcGxveSAkdG1wZGlyL3BrZ2RhdGEgJHRtcGRpci9zc3RhdGUtY29udHJvbCAkdG1wZGlyL3N0YW1wcyAkdG1wZGlyL3N5c3Jvb3RzICR0bXBkaXIvd29yayAkdG1wZGlyL3dvcmstc2hhcmVkIDI+L2Rldi9udWxsCisgICAgZmkKKyAgICBpPWBleHByICRpICsgMWAKKyAgZG9uZQorICBlY2hvICJDb3B5aW5nIGJ1aWxkaGlzdG9yeS9wYWNrYWdlcyB0byAke09VVFBVVEJ9IgorICBjcCAtcmEgJGJ1aWxkaGlzdG9yeS9wYWNrYWdlcyAke09VVFBVVEJ9CisgICMgVGhpcyB3aWxsIGJlIHVzZWZ1bGwgdG8gc2VlIHdoaWNoIGxpYnJhcnkgaXMgcHVsbGluZyBuZXcgZGVwZW5kZW5jeQorICBlY2hvICJDb3B5aW5nIGRvX3BhY2thZ2UgbG9ncyB0byAke09VVFBVVEJ9L2RvX3BhY2thZ2UvIgorICBta2RpciAke09VVFBVVEJ9L2RvX3BhY2thZ2UKKyAgZmluZCAkdG1wZGlyL3dvcmsvIC1uYW1lIGxvZy5kb19wYWNrYWdlIDI+L2Rldi9udWxsfCB3aGlsZSByZWFkIGY7IGRvCisgICAgIyBwbiBpcyAzIGxldmVscyBiYWNrLCBidXQgd2UgZG9uJ3Qga25vdyBpZiB0aGVyZSBpcyBqdXN0IG9uZSBsb2cgcGVyIHBuIChvbmx5IG9uZSBhcmNoIGFuZCB2ZXJzaW9uKQorICAgICMgZGVzdD1gZWNobyAkZiB8IHNlZCAncyNeLiovXChbXi9dKlwpL1woW14vXSpcKS9cKFteL10qXCkvbG9nLmRvX3BhY2thZ2UjXDEjZydgCisgICAgZGVzdD1gZWNobyAkZiB8IHNlZCAicyMkdG1wZGlyL3dvcmsvIyNnOyBzIy8jXyNnImAKKyAgICBjcCAkZiAke09VVFBVVEJ9L2RvX3BhY2thZ2UvJGRlc3QKKyAgZG9uZQorfQorCitjb21wYXJlX2RlcHMoKSB7CisgICMgeW91IGNhbiBydW4ganVzdCBjb21wYXJlIHRhc2sgd2l0aCBjb21tYW5kIGxpa2UgdGhpcworICAjIE9VVFBVVF9CQVNFPXRlc3QtZGVwZW5kZW5jaWVzLzEzNzMxNDAxNzIgXAorICAjIE9VVFBVVF9NQVg9JHtPVVRQVVRfQkFTRX0vMl9tYXggXAorICAjIE9VVFBVVF9NSU49JHtPVVRQVVRfQkFTRX0vM19taW4gXAorICAjIG9wZW5lbWJlZGRlZC1jb3JlL3NjcmlwdHMvdGVzdC1kZXBlbmRlbmNpZXMuc2ggLS10bXBkaXI9dG1wLWVnbGliYyAtLXRhcmdldHM9Z2xpYi0yLjAgLS1yZWNpcGVzPXJlY2lwZV9saXN0IC0tYnVpbGR0eXBlPWMKKyAgZWNobyAiPT09PT0gQ29tcGFyZSBkZXBlbmRlbmNpZXMgcmVjb3JkZWQgaW4gXCIke09VVFBVVF9NQVh9XCIgYW5kIFwiJHtPVVRQVVRfTUlOfVwiID09PT09IgorICBbIC1uICIke09VVFBVVEN9IiBdIHx8IE9VVFBVVEM9JHtPVVRQVVRfQkFTRX0vY29tcAorICBta2RpciAtcCAke09VVFBVVEN9CisgIE9VVFBVVF9GSUxFPSR7T1VUUFVUQ30vZGVwZW5kZW5jeS1jaGFuZ2VzCisgIGVjaG8gIkRpZmZlcmVuY2VzIHdpbGwgYmUgc3RvcmVkIGluICR7T1VUUFVUX0ZJTEV9LCBkb3QgaXMgc2hvd24gZm9yIGV2ZXJ5IDEwMCBvZiBjaGVja2VkIHBhY2thZ2VzIgorICBlY2hvID4gJHtPVVRQVVRfRklMRX0KKworICBbIC1kICR7T1VUUFVUX01BWH0gXSB8fCBlY2hvX2Vycm9yICJEaXJlY3Rvcnkgd2l0aCBvdXRwdXQgZnJvbSBidWlsZCAyIFwiJHtPVVRQVVRfTUFYfVwiIGRvZXMgbm90IGV4aXN0IgorICBbIC1kICR7T1VUUFVUX01JTn0gXSB8fCBlY2hvX2Vycm9yICJEaXJlY3Rvcnkgd2l0aCBvdXRwdXQgZnJvbSBidWlsZCAzIFwiJHtPVVRQVVRfTUlOfVwiIGRvZXMgbm90IGV4aXN0IgorICBbIC1kICR7T1VUUFVUX01BWH0vcGFja2FnZXMvIF0gfHwgZWNob19lcnJvciAiRGlyZWN0b3J5IHdpdGggcGFja2FnZXMgZnJvbSBidWlsZCAyIFwiJHtPVVRQVVRfTUFYfS9wYWNrYWdlcy9cIiBkb2VzIG5vdCBleGlzdCIKKyAgWyAtZCAke09VVFBVVF9NSU59L3BhY2thZ2VzLyBdIHx8IGVjaG9fZXJyb3IgIkRpcmVjdG9yeSB3aXRoIHBhY2thZ2VzIGZyb20gYnVpbGQgMyBcIiR7T1VUUFVUX01JTn0vcGFja2FnZXMvXCIgZG9lcyBub3QgZXhpc3QiCisgIGk9MAorICBmaW5kICR7T1VUUFVUX01BWH0vcGFja2FnZXMvIC1uYW1lIGxhdGVzdCB8IHNlZCAicyMke09VVFBVVF9NQVh9LyMjZyIgfCB3aGlsZSByZWFkIHBrZzsgZG8KKyAgICBtYXhfcGtnPSR7T1VUUFVUX01BWH0vJHtwa2d9CisgICAgbWluX3BrZz0ke09VVFBVVF9NSU59LyR7cGtnfQorICAgICMgcGtnPXBhY2thZ2VzL2FybXY1dGUtb2UtbGludXgtZ251ZWFiaS9saWJ1bmdpZi9saWJ1bmdpZi9sYXRlc3QKKyAgICByZWNpcGU9YGVjaG8gIiR7cGtnfSIgfCBzZWQgJ3MjcGFja2FnZXMvW14vXSovXChbXi9dKlwpL1woW14vXSpcKS9sYXRlc3QjXDEjZydgCisgICAgcGFja2FnZT1gZWNobyAiJHtwa2d9IiB8IHNlZCAncyNwYWNrYWdlcy9bXi9dKi9cKFteL10qXCkvXChbXi9dKlwpL2xhdGVzdCNcMiNnJ2AKKyAgICBpZiBbICEgLWYgIiR7bWluX3BrZ30iIF0gOyB0aGVuCisgICAgICBlY2hvICJFUlJPUjogJHtyZWNpcGV9OiAke3BhY2thZ2V9IHBhY2thZ2UgaXNuJ3QgY3JlYXRlZCB3aGVuIGJ1aWxkaW5nIHdpdGggbWluaW1hbCBkZXBlbmRlbmNpZXM/IiB8IHRlZSAtYSAke09VVFBVVF9GSUxFfQorICAgICAgZWNobyAke3JlY2lwZX0gPj4gJHtPVVRQVVRDfS9mYWlsZWQtcmVjaXBlcy5sb2cKKyAgICAgIGNvbnRpbnVlCisgICAgZmkKKyAgICAjIHN0cmlwIHZlcnNpb24gaW5mb3JtYXRpb24gaW4gcGFyZW50aGVzaXMKKyAgICBtYXhfZGVwcz1gZ3JlcCAiXlJERVBFTkRTID0gIiAke21heF9wa2d9IHwgc2VkICdzL15SREVQRU5EUyA9IC8gL2c7IHMvJC8gL2c7IHMvKFteKF0qKS8vZydgCisgICAgbWluX2RlcHM9YGdyZXAgIl5SREVQRU5EUyA9ICIgJHttaW5fcGtnfSB8IHNlZCAncy9eUkRFUEVORFMgPSAvIC9nOyBzLyQvIC9nOyBzLyhbXihdKikvL2cnYAorICAgIGlmIFsgIiRpIiA9IDEwMCBdIDsgdGhlbgorICAgICAgZWNobyAtbiAiLiIgIyBjaGVhcCBwcm9ncmVzc2JhcgorICAgICAgaT0wCisgICAgZmkKKyAgICBpZiBbICIke21heF9kZXBzfSIgPSAiJHttaW5fZGVwc30iIF0gOyB0aGVuCisgICAgICAjIGl0J3MgYW5ub3lpbmcgbG9uZywgYnV0IGF0IGxlYXN0IGl0J3Mgc2hvd2luZyBzb21lIHByb2dyZXNzLCB3YXJuaW5ncyBhcmUgZ3JlcHBlZCBhdCB0aGUgZW5kCisgICAgICBlY2hvICJOT1RFOiAke3JlY2lwZX06ICR7cGFja2FnZX0gcmRlcGVuZHMgd2VyZW4ndCBjaGFuZ2VkIiA+PiAke09VVFBVVF9GSUxFfQorICAgIGVsc2UKKyAgICAgIG1pc3NpbmdfZGVwcz0KKyAgICAgIGZvciBkZXAgaW4gJHttYXhfZGVwc307IGRvCisgICAgICAgIGlmICEgZWNobyAiJHttaW5fZGVwc30iIHwgZ3JlcCAtcSAiICR7ZGVwfSAiIDsgdGhlbgorICAgICAgICAgIG1pc3NpbmdfZGVwcz0iJHttaXNzaW5nX2RlcHN9ICR7ZGVwfSIKKyAgICAgICAgICBlY2hvICMgdG8gZ2V0IHJpZCBvZiBkb3RzIG9uIGxhc3QgbGluZQorICAgICAgICAgIGVjaG8gIldBUk46ICR7cmVjaXBlfTogJHtwYWNrYWdlfSByZGVwZW5kcyBvbiAke2RlcH0sIGJ1dCBpdCBpc24ndCBhIGJ1aWxkIGRlcGVuZGVuY3k/IiB8IHRlZSAtYSAke09VVFBVVF9GSUxFfQorICAgICAgICBmaQorICAgICAgZG9uZQorICAgICAgaWYgWyAtbiAiJHttaXNzaW5nX2RlcHN9IiBdIDsgdGhlbgorICAgICAgICBlY2hvICR7cmVjaXBlfSA+PiAke09VVFBVVEN9L2ZhaWxlZC1yZWNpcGVzLmxvZworICAgICAgZmkKKyAgICBmaQorICAgIGk9YGV4cHIgJGkgKyAxYAorICBkb25lCisgIGVjaG8gIyB0byBnZXQgcmlkIG9mIGRvdHMgb24gbGFzdCBsaW5lCisgIGVjaG8gIkZvdW5kIGRpZmZlcmVuY2VzOiAiCisgIGdyZXAgIl5XQVJOOiAiICR7T1VUUFVUX0ZJTEV9IHwgdGVlICR7T1VUUFVUX0ZJTEV9Lndhcm4ubG9nCisgIGVjaG8gIkZvdW5kIGVycm9yczogIgorICBncmVwICJeRVJST1I6ICIgJHtPVVRQVVRfRklMRX0gfCB0ZWUgJHtPVVRQVVRfRklMRX0uZXJyb3IubG9nCisgIFJFU1VMVCs9YGNhdCAke09VVFBVVF9GSUxFfS53YXJuLmxvZyB8IHdjIC1sYAorICBSRVNVTFQrPWBjYXQgJHtPVVRQVVRfRklMRX0uZXJyb3IubG9nIHwgd2MgLWxgCit9CisKK2ZvciBUWVBFIGluICRidWlsZHR5cGU7IGRvCisgIGNhc2UgJHtUWVBFfSBpbgorICAgIDEpIGJ1aWxkX2FsbDs7CisgICAgMikgYnVpbGRfZXZlcnlfcmVjaXBlOzsKKyAgICAzKSBidWlsZF9ldmVyeV9yZWNpcGU7OworICAgIDQpIGJ1aWxkX2V2ZXJ5X3JlY2lwZTs7CisgICAgYykgY29tcGFyZV9kZXBzOzsKKyAgICAqKSBlY2hvX2Vycm9yICJJbnZhbGlkIGJ1aWxkdHlwZSBcIiRUWVBFXCIiCisgIGVzYWMKK2RvbmUKKworY2F0ICR7T1VUUFVUX0JBU0V9LyovZmFpbGVkLXJlY2lwZXMubG9nIHwgc29ydCAtdSA+PiAke09VVFBVVF9CQVNFfS9mYWlsZWQtcmVjaXBlcy5sb2cKKworaWYgWyAiJHtSRVNVTFR9IiAhPSAiMCIgXSA7IHRoZW4KKyAgZWNobyAiRVJST1I6ICR7UkVTVUxUfSBpc3N1ZXMgd2VyZSBmb3VuZCBpbiB0aGVzZSByZWNpcGVzOiBgY2F0ICR7T1VUUFVUX0JBU0V9L2ZhaWxlZC1yZWNpcGVzLmxvZyB8IHhhcmdzYCIKK2ZpCisKK2VjaG8gIklORk86IE91dHB1dCB3cml0dGVuIGluOiAke09VVFBVVF9CQVNFfSIKK2V4aXQgJHtSRVNVTFR9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvdGVzdC1yZWV4ZWMgYi95b2N0by1wb2t5L3NjcmlwdHMvdGVzdC1yZWV4ZWMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWVhYTk2ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy90ZXN0LXJlZXhlYwpAQCAtMCwwICsxLDEyMyBAQAorIyEvYmluL2Jhc2gKKworIyBUZXN0IFNjcmlwdCBmb3IgdGFzayByZS1leGVjdXRpb24KKyMgCisjIENvcHlyaWdodCAyMDEyIEludGVsIENvcnBvcmF0aW9uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBzY3JpcHQgaXMgaW50ZW5kZWQgdG8gYWRkcmVzcyBpc3N1ZXMgZm9yIHJlLWV4ZWN1dGlvbiBvZiAKKyMgdGFza3MuIFRoZSB0ZXN0IHJlc3VsdHMgYXJlIHNhdmVkIGluIC4vcmVleGVjbG9ncy4gRm9yY2UgYnVpbGQKKyMgbG9ncyBhcmUgc2F2ZWQgd2l0aCBwcmVmaXggImZvcmNlIi4gQnVpbGQgZmFpbHVyZSBsb2dzIGFyZSBzYXZlZCB3aXRoCisjIHByZWZpeCAiZmFpbGVkIi4gTG9nIGZpbGVzIHdpdGggcHJlZml4ICJpbml0aWFsIiBhcmUgdXNlZCB0byBzYXZlCisjIGluaXRpYWwgYnVpbGQgbG9ncyBmb3IgZWFjaCByZWNpcGUuIExvZyBmaWxlcyB3aXRoIHByZWZpeCAiY2xlYW4iIGFyZQorIyB1c2VkIHRvIHNhdmUgbG9ncyBvZiBjbGVhbiB0YXNrIGFmdGVyIHRlc3RpbmcgZm9yIGEgcmVjaXBlIGlzIGZpbmlzaGVkLgorIworCit0YXJnZXRzPWBiaXRiYWtlIC1zIHwgY3V0IC1kICIgIiAtZiAxYAorCitMT0dTPS4vcmVleGVjbG9ncworCitta2RpciAtcCAkTE9HUworCisjIENsZWFyIHNzdGF0ZSBmaWxlcyBmb3Igc3BlY2lmaWVkIHJlY2lwZQorZnVuY3Rpb24gY2xlYXJzc3RhdGUgeworCXRhcmdldD0kMQorCisJc3N0YXRlX2Rpcj1gYml0YmFrZSAkdGFyZ2V0IC1lIHwgZ3JlcCAiXlNTVEFURV9ESVIiIHwgY3V0IC1kICJcIiIgLWYgMmAKKwlzc3RhdGVfcGtnc3BlYz1gYml0YmFrZSAkdGFyZ2V0IC1lIHwgZ3JlcCAiXlNTVEFURV9QS0dTUEVDIiB8IGN1dCAtZCAiXCIiIC1mIDJgCisJc3N0YXNrcz1gYml0YmFrZSAkdGFyZ2V0IC1lIHwgZ3JlcCAiXlNTVEFURVRBU0tTIiB8IGN1dCAtZCAiXCIiIC1mIDJgCisKKwlmb3Igc3N0YXNrIGluICRzc3Rhc2tzCisJZG8KKwkJc3N0YXNrPSR7c3N0YXNrOjN9CisJCWNhc2UgJHNzdGFzayBpbgorCQkJcG9wdWxhdGVfc3lzcm9vdCkgc3N0YXNrPSJwb3B1bGF0ZS1zeXNyb290IgorCQkJOzsKKwkJCXBvcHVsYXRlX2xpYykgc3N0YXNrPSJwb3B1bGF0ZS1saWMiCisJCQk7OworCQkJcGFja2FnZV93cml0ZV9pcGspIHNzdGFzaz0iZGVwbG95LWlwayIKKwkJCTs7CisJCQlwYWNrYWdlX3dyaXRlX2RlYikgc3N0YXNrPSJkZXBsb3ktZGViIgorCQkJOzsKKwkJCXBhY2thZ2Vfd3JpdGVfcnBtKSBzc3Rhc2s9ImRlcGxveS1ycG0iCisJCQk7OworCQkJcGFja2FnZSkgc3N0YXNrPSJwYWNrYWdlIgorCQkJOzsKKwkJCWRlcGxveSkgc3N0YXNrPSJkZXBsb3kiCisJCQk7OworCQkJKikKKwkJCTs7CisJCWVzYWMKKworCQllY2hvICJSZW1vdmluZyAke3NzdGF0ZV9kaXJ9LyR7c3N0YXRlX3BrZ3NwZWN9Kl8ke3NzdGFza30udGd6KiBmb3IgJHRhcmdldCIKKwkJcm0gLXJmICR7c3N0YXRlX2Rpcn0vJHtzc3RhdGVfcGtnc3BlY30qXyR7c3N0YXNrfS50Z3oqCisJZG9uZQorfQorCisjIEZ1bmN0aW9uIHRvIHJlLWV4ZWN1dGUgc3BlY2lmaWVkIHRhc2sgb2YgcmVjaXBlCitmdW5jdGlvbiB0ZXN0aXQgeworCXRhcmdldD0kMQorCXRhc2s9JDIKKworCXRhc2s9YGVjaG8gJHRhc2sgfCBzZWQgJ3MvX3NldHNjZW5lLy8nYAorCisJaWYgWyAtZiAkTE9HUy9mb3JjZS4kdGFyZ2V0LiR0YXNrIF07IHRoZW4KKwkJcmV0dXJuCisJZmkKKworCWNhc2UgJHRhc2sgaW4KKwkJY2xlYW58YnVpbGR8Y2xlYW5zc3RhdGV8Y2xlYW5hbGx8cGFja2FnZXxjbGVhbnNzdGF0ZTJ8cGFja2FnZV93cml0ZXxwYWNrYWdlX3dyaXRlX2lwa3xwYWNrYWdlX3dyaXRlX3JwbXxwYWNrYWdlX3dyaXRlX2RlYnxmZXRjaHxwb3B1bGF0ZV9saWMpIHJldHVybjs7CisJCWZldGNoYWxsfGRldnNoZWxsfGJ1aWxkYWxsfGxpc3R0YXNrc3xjaGVja3VyaXxjaGVja3VyaWFsbCkgcmV0dXJuOzsKKwllc2FjCisKKwllY2hvICJBdHRlbXB0aW5nIHRhcmdldCAkdGFyZ2V0LCB0YXNrICR0YXNrIgorCWVjaG8gIkluaXRpYWwgYnVpbGQiCisJYml0YmFrZSAkdGFyZ2V0IC1jIGNsZWFuc3N0YXRlID4gJExPR1MvaW5pdGlhbC4kdGFyZ2V0LiR0YXNrCisJYml0YmFrZSAkdGFyZ2V0ID4+ICRMT0dTL2luaXRpYWwuJHRhcmdldC4kdGFzaworCWNsZWFyc3N0YXRlICR0YXJnZXQgPj4gJExPR1MvaW5pdGlhbC4kdGFyZ2V0LiR0YXNrCisJZWNobyAiUmUtZXhlY3V0aW9uIGJ1aWxkIgorCWJpdGJha2UgJHRhcmdldCAtYyAkdGFzayAtZiAgPiAkTE9HUy9mb3JjZS4kdGFyZ2V0LiR0YXNrCisJaWYgWyAiJD8iICE9IDAgXTsgdGhlbgorCQllY2hvICJGQUlMVVJFIGZvciAkdGFyZ2V0ICR0YXNrIgorCQljcCAkTE9HUy9mb3JjZS4kdGFyZ2V0LiR0YXNrICRMT0dTL2ZhaWxlZC4kdGFyZ2V0LiR0YXNrCisJCWJpdGJha2UgJHRhcmdldCAtYyBjbGVhbiA+ICRMT0dTL2NsZWFuLiR0YXJnZXQuJHRhc2sKKwllbHNlCisJCWJpdGJha2UgJHRhcmdldCA+PiAkTE9HUy9mb3JjZS4kdGFyZ2V0LiR0YXNrCisJCWlmIFsgIiQ/IiAhPSAwIF07IHRoZW4KKwkJCWVjaG8gIkZBSUxVUkUyIGZvciAkdGFyZ2V0ICR0YXNrIgorCQkJY3AgJExPR1MvZm9yY2UuJHRhcmdldC4kdGFzayAkTE9HUy9mYWlsZWQuJHRhcmdldC4kdGFzaworCQkJYml0YmFrZSAkdGFyZ2V0IC1jIGNsZWFuID4gJExPR1MvY2xlYW4uJHRhcmdldC4kdGFzaworCQlmaQorCWZpCisJZWNobyAiRG9uZSIKK30KKworIyBHbyB0aHJvdWdoIHRoZSByZWNpcGUgbGlzdCBhbmQgdGhlc2UgcmVjaXBlcycgdGFzayBsaXN0CisjIFRoZW4gcmUtZXhlY3V0ZSB0aGVtCitmb3IgdGFyZ2V0IGluICR0YXJnZXRzOyBkbworCSMgUmVtb3ZlIGxvZyBtZXNzYWdlcyBmcm9tIGJpdGJha2Ugb3V0cHV0CisJY2FzZSAkdGFyZ2V0IGluCisJCVN1bW1hcnkqfFdBUk5JTkcqfExvYWRpbmcqfExvYWRlZCp8UGFja2FnZSp8PT09PT0qKSBjb250aW51ZTs7CisJZXNhYworCXRhc2tzPWBiaXRiYWtlICR0YXJnZXQgLWMgbGlzdHRhc2tzIHwgZ3JlcCBeZG9fIHwgc2VkIHMvZG9fLy9gCisJZm9yIHRhc2sgaW4gJHRhc2tzOyBkbworCQl0ZXN0aXQgJHRhcmdldCAkdGFzaworCWRvbmUKK2RvbmUKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvdGVzdC1yZW1vdGUtaW1hZ2UgYi95b2N0by1wb2t5L3NjcmlwdHMvdGVzdC1yZW1vdGUtaW1hZ2UKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjNhNDRlYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy90ZXN0LXJlbW90ZS1pbWFnZQpAQCAtMCwwICsxLDM2MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisjIERFU0NSSVBUSU9OCisjIFRoaXMgc2NyaXB0IGlzIHVzZWQgdG8gdGVzdCBwdWJsaWMgYXV0b2J1aWxkZXIgaW1hZ2VzIG9uIHJlbW90ZSBoYXJkd2FyZS4KKyMgVGhlIHNjcmlwdCBpcyBjYWxsZWQgZnJvbSBhIG1hY2hpbmUgdGhhdCBpcyBhYmxlIGRvd25sb2FkIHRoZSBpbWFnZXMgZnJvbSB0aGUgcmVtb3RlIGltYWdlcyByZXBvc2l0b3J5IGFuZCB0byBjb25uZWN0IHRvIHRoZSB0ZXN0IGhhcmR3YXJlLgorIworIyB0ZXN0LXJlbW90ZS1pbWFnZSAtLWltYWdlLXR5cGUgY29yZS1pbWFnZS1zYXRvIC0tcmVwby1saW5rIGh0dHA6Ly8xOTIuMTY4LjEwLjIvaW1hZ2VzIC0tcmVxdWlyZWQtcGFja2FnZXMgcnBtIHBzcGxhc2gKKyMKKyMgVHJhbnNsYXRpb246IEJ1aWxkIHRoZSAncnBtJyBhbmQgJ3BzbGFzaCcgcGFja2FnZXMgYW5kIHRlc3QgYSByZW1vdGUgY29yZS1pbWFnZS1zYXRvIGltYWdlIHVzaW5nIHRoZSBodHRwOi8vMTkyLjE2OC4xMC4yL2ltYWdlcyByZXBvc2l0b3J5LgorIworIyBZb3UgY2FuIGFsc28gdXNlIHRoZSAnLWgnIG9wdGlvbiB0byBzZWUgc29tZSBoZWxwIGluZm9ybWF0aW9uLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzaHV0aWwKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAorCisjIEFkZCBwYXRoIHRvIHNjcmlwdHMvbGliIGluIHN5cy5wYXRoOworc2NyaXB0c19wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc3lzLmFyZ3ZbMF0pKSkKK2xpYl9wYXRoID0gc2NyaXB0c19wYXRoICsgJy9saWInCitzeXMucGF0aCA9IHN5cy5wYXRoICsgW2xpYl9wYXRoXQorCitpbXBvcnQgc2NyaXB0cGF0aAorCisjIEFkZCBtZXRhL2xpYiB0byBzeXMucGF0aAorc2NyaXB0cGF0aC5hZGRfb2VfbGliX3BhdGgoKQorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhcgorCisjIEFkZCBhbGwgbGliIHBhdGhzIHJlbGF0aXZlIHRvIEJCUEFUSCB0byBzeXMucGF0aDsgdGhpcyBpcyB1c2VkIHRvIGZpbmQgYW5kIGltcG9ydCB0aGUgdGFyZ2V0IGNvbnRyb2xsZXJzLgorZm9yIHBhdGggaW4gZ2V0X2JiX3ZhcignQkJQQVRIJykuc3BsaXQoIjoiKToKKyAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwYXRoLCAnbGliJykpKQorCisjIEluIG9yZGVyIHRvIGltcG9ydCBtb2R1bGVzIHRoYXQgY29udGFpbiB0YXJnZXQgY29udHJvbGxlcnMsIHdlIG5lZWQgdGhlIGJpdGJha2UgbGlicmFyaWVzIGluIHN5cy5wYXRoIC4KK2JpdGJha2VwYXRoID0gc2NyaXB0cGF0aC5hZGRfYml0YmFrZV9saWJfcGF0aCgpCitpZiBub3QgYml0YmFrZXBhdGg6CisgICAgc3lzLnN0ZGVyci53cml0ZSgiVW5hYmxlIHRvIGZpbmQgYml0YmFrZSBieSBzZWFyY2hpbmcgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGlzIHNjcmlwdCBvciBQQVRIXG4iKQorICAgIHN5cy5leGl0KDEpCisKKyMgY3JlYXRlIGEgbG9nZ2VyCitkZWYgbG9nZ2VyX2NyZWF0ZSgpOgorICAgIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdod2F1dG8nKQorICAgIGxvZy5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorCisgICAgZmggPSBsb2dnaW5nLkZpbGVIYW5kbGVyKGZpbGVuYW1lPSdod2F1dG8ubG9nJywgbW9kZT0ndycpCisgICAgZmguc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKworICAgIGNoID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN5cy5zdGRvdXQpCisgICAgY2guc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorCisgICAgZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoJyUoYXNjdGltZSlzIC0gJShuYW1lKXMgLSAlKGxldmVsbmFtZSlzIC0gJShtZXNzYWdlKXMnKQorICAgIGZoLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCisgICAgY2guc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKworICAgIGxvZy5hZGRIYW5kbGVyKGZoKQorICAgIGxvZy5hZGRIYW5kbGVyKGNoKQorCisgICAgcmV0dXJuIGxvZworCisjIGluc3RhbnRpYXRlIHRoZSBsb2dnZXIKK2xvZyA9IGxvZ2dlcl9jcmVhdGUoKQorCisKKyMgRGVmaW5lIGFuZCByZXR1cm4gdGhlIGFyZ3VtZW50cyBwYXJzZXIgZm9yIHRoZSBzY3JpcHQKK2RlZiBnZXRfYXJnc19wYXJzZXIoKToKKyAgICBkZXNjcmlwdGlvbiA9ICJUaGlzIHNjcmlwdCBpcyB1c2VkIHRvIHJ1biBhdXRvbWF0ZWQgcnVudGltZSB0ZXN0cyB1c2luZyByZW1vdGVseSBwdWJsaXNoZWQgaW1hZ2UgZmlsZXMuIFlvdSBzaG91bGQgcHJlcGFyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQganVzdCBsaWtlIGJ1aWxkaW5nIGxvY2FsIGltYWdlcyBhbmQgcnVubmluZyB0aGUgdGVzdHMuIgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPWRlc2NyaXB0aW9uKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0taW1hZ2UtdHlwZXMnLCByZXF1aXJlZD1UcnVlLCBhY3Rpb249InN0b3JlIiwgbmFyZ3M9JyonLCBkZXN0PSJpbWFnZV90eXBlcyIsIGRlZmF1bHQ9Tm9uZSwgaGVscD0nVGhlIGltYWdlIHR5cGVzIHRvIHRlc3QoZXg6IGNvcmUtaW1hZ2UtbWluaW1hbCkuJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXJlcG8tbGluaycsIHJlcXVpcmVkPVRydWUsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPXN0ciwgZGVzdD0icmVwb19saW5rIiwgZGVmYXVsdD1Ob25lLCBoZWxwPSdUaGUgbGluayB0byB0aGUgcmVtb3RlIGltYWdlcyByZXBvc2l0b3J5LicpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1yZXF1aXJlZC1wYWNrYWdlcycsIHJlcXVpcmVkPUZhbHNlLCBhY3Rpb249InN0b3JlIiwgbmFyZ3M9JyonLCBkZXN0PSJyZXF1aXJlZF9wYWNrYWdlcyIsIGRlZmF1bHQ9Tm9uZSwgaGVscD0nUmVxdWlyZWQgcGFja2FnZXMgZm9yIHRoZSB0ZXN0cy4gVGhleSB3aWxsIGJlIGJ1aWx0IGJlZm9yZSB0aGUgdGVzdGluZyBiZWdpbnMuJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXRhcmdldHByb2ZpbGUnLCByZXF1aXJlZD1GYWxzZSwgYWN0aW9uPSJzdG9yZSIsIG5hcmdzPTEsIGRlc3Q9InRhcmdldHByb2ZpbGUiLCBkZWZhdWx0PSdBdXRvVGFyZ2V0UHJvZmlsZScsIGhlbHA9J1RoZSB0YXJnZXQgcHJvZmlsZSB0byBiZSB1c2VkLicpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1yZXBvcHJvZmlsZScsIHJlcXVpcmVkPUZhbHNlLCBhY3Rpb249InN0b3JlIiwgbmFyZ3M9MSwgZGVzdD0icmVwb3Byb2ZpbGUiLCBkZWZhdWx0PSdQdWJsaWNBQicsIGhlbHA9J1RoZSByZXBvIHByb2ZpbGUgdG8gYmUgdXNlZC4nKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc2tpcC1kb3dubG9hZCcsIHJlcXVpcmVkPUZhbHNlLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJza2lwX2Rvd25sb2FkIiwgZGVmYXVsdD1GYWxzZSwgaGVscD0nU2tpcCBkb3dubG9hZGluZyB0aGUgaW1hZ2VzIGNvbXBsZXRlbHkuIFRoaXMgbmVlZHMgdGhlIGNvcnJlY3QgZmlsZXMgdG8gYmUgcHJlc2VudCBpbiB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZCBieSB0aGUgdGFyZ2V0IHByb2ZpbGUuJykKKyAgICByZXR1cm4gcGFyc2VyCisKK2NsYXNzIEJhc2VUYXJnZXRQcm9maWxlKG9iamVjdCk6CisgICAgIiIiCisgICAgVGhpcyBjbGFzcyBkZWZpbmVzIHRoZSBtZXRhIHByb2ZpbGUgZm9yIGEgc3BlY2lmaWMgdGFyZ2V0IChNQUNISU5FIHR5cGUgKyBpbWFnZSB0eXBlKS4KKyAgICAiIiIKKworICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW1hZ2VfdHlwZSk6CisgICAgICAgIHNlbGYuaW1hZ2VfdHlwZSA9IGltYWdlX3R5cGUKKworICAgICAgICBzZWxmLmtlcm5lbF9maWxlID0gTm9uZQorICAgICAgICBzZWxmLnJvb3Rmc19maWxlID0gTm9uZQorICAgICAgICBzZWxmLm1hbmlmZXN0X2ZpbGUgPSBOb25lCisgICAgICAgIHNlbGYuZXh0cmFfZG93bmxvYWRfZmlsZXMgPSBbXSAgICAgICAgICAjIEV4dHJhIGZpbGVzIChmdWxsIG5hbWUpIHRvIGJlIGRvd25sb2FkZWQuIFRoZXkgc2hvdWxkIGJlIHNpdHVhdGVkIGluIHJlcG9fbGluaworCisgICAgIyBUaGlzIG1ldGhvZCBpcyB1c2VkIGFzIHRoZSBzdGFuZGFyZCBpbnRlcmZhY2Ugd2l0aCB0aGUgdGFyZ2V0IHByb2ZpbGUgY2xhc3Nlcy4KKyAgICAjIEl0IHJldHVybnMgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgYSBsaXN0IG9mIGZpbGVzIGFuZCB0aGVpciBtZWFuaW5nL2Rlc2NyaXB0aW9uLgorICAgIGRlZiBnZXRfZmlsZXNfZGljdChzZWxmKToKKyAgICAgICAgZmlsZXNfZGljdCA9IHt9CisKKyAgICAgICAgaWYgc2VsZi5rZXJuZWxfZmlsZToKKyAgICAgICAgICAgIGZpbGVzX2RpY3RbJ2tlcm5lbF9maWxlJ10gPSBzZWxmLmtlcm5lbF9maWxlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2cuZXJyb3IoJ1RoZSB0YXJnZXQgcHJvZmlsZSBkaWQgbm90IHNldCBhIGtlcm5lbCBmaWxlLicpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIGlmIHNlbGYucm9vdGZzX2ZpbGU6CisgICAgICAgICAgICBmaWxlc19kaWN0Wydyb290ZnNfZmlsZSddID0gc2VsZi5yb290ZnNfZmlsZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nLmVycm9yKCdUaGUgdGFyZ2V0IHByb2ZpbGUgZGlkIG5vdCBzZXQgYSByb290ZnMgZmlsZS4nKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICBpZiBzZWxmLm1hbmlmZXN0X2ZpbGU6CisgICAgICAgICAgICBmaWxlc19kaWN0WydtYW5pZmVzdF9maWxlJ10gPSBzZWxmLm1hbmlmZXN0X2ZpbGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZy5lcnJvcignVGhlIHRhcmdldCBwcm9maWxlIGRpZCBub3Qgc2V0IGEgbWFuaWZlc3QgZmlsZS4nKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICBmb3IgaWR4LCBmIGluIGVudW1lcmF0ZShzZWxmLmV4dHJhX2Rvd25sb2FkX2ZpbGVzKToKKyAgICAgICAgICAgIGZpbGVzX2RpY3RbJ2V4dHJhX2Rvd25sb2FkX2ZpbGUnICsgc3RyKGlkeCldID0gZgorCisgICAgICAgIHJldHVybiBmaWxlc19kaWN0CisKK2NsYXNzIEF1dG9UYXJnZXRQcm9maWxlKEJhc2VUYXJnZXRQcm9maWxlKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbWFnZV90eXBlKToKKyAgICAgICAgc3VwZXIoQXV0b1RhcmdldFByb2ZpbGUsIHNlbGYpLl9faW5pdF9fKGltYWdlX3R5cGUpCisgICAgICAgIHNlbGYuaW1hZ2VfbmFtZSA9IGdldF9iYl92YXIoJ0lNQUdFX0xJTktfTkFNRScsIHRhcmdldD1pbWFnZV90eXBlKQorICAgICAgICBzZWxmLmtlcm5lbF90eXBlID0gZ2V0X2JiX3ZhcignS0VSTkVMX0lNQUdFVFlQRScsIHRhcmdldD1pbWFnZV90eXBlKQorICAgICAgICBzZWxmLmNvbnRyb2xsZXIgPSBzZWxmLmdldF9jb250cm9sbGVyKCkKKworICAgICAgICBzZWxmLnNldF9rZXJuZWxfZmlsZSgpCisgICAgICAgIHNlbGYuc2V0X3Jvb3Rmc19maWxlKCkKKyAgICAgICAgc2VsZi5zZXRfbWFuaWZlc3RfZmlsZSgpCisgICAgICAgIHNlbGYuc2V0X2V4dHJhX2Rvd25sb2FkX2ZpbGVzKCkKKworICAgICMgR2V0IHRoZSBjb250cm9sbGVyIG9iamVjdCB0aGF0IHdpbGwgYmUgdXNlZCBieSBiaXRiYWtlLgorICAgIGRlZiBnZXRfY29udHJvbGxlcihzZWxmKToKKyAgICAgICAgZnJvbSBvZXFhLmNvbnRyb2xsZXJzLnRlc3R0YXJnZXRsb2FkZXIgaW1wb3J0IFRlc3RUYXJnZXRMb2FkZXIKKworICAgICAgICB0YXJnZXRfY29udHJvbGxlciA9IGdldF9iYl92YXIoJ1RFU1RfVEFSR0VUJykKKyAgICAgICAgYmJwYXRoID0gZ2V0X2JiX3ZhcignQkJQQVRIJykuc3BsaXQoJzonKQorCisgICAgICAgIGlmIHRhcmdldF9jb250cm9sbGVyID09ICJxZW11IjoKKyAgICAgICAgICAgIGZyb20gb2VxYS50YXJnZXRjb250cm9sIGltcG9ydCBRZW11VGFyZ2V0CisgICAgICAgICAgICBjb250cm9sbGVyID0gUWVtdVRhcmdldAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGVzdHRhcmdldGxvYWRlciA9IFRlc3RUYXJnZXRMb2FkZXIoKQorICAgICAgICAgICAgY29udHJvbGxlciA9IHRlc3R0YXJnZXRsb2FkZXIuZ2V0X2NvbnRyb2xsZXJfbW9kdWxlKHRhcmdldF9jb250cm9sbGVyLCBiYnBhdGgpCisgICAgICAgIHJldHVybiBjb250cm9sbGVyCisKKyAgICBkZWYgc2V0X2tlcm5lbF9maWxlKHNlbGYpOgorICAgICAgICBwb3N0Y29uZmlnID0gIlFBX0dFVF9NQUNISU5FID0gXCIke01BQ0hJTkV9XCIiCisgICAgICAgIG1hY2hpbmUgPSBnZXRfYmJfdmFyKCdRQV9HRVRfTUFDSElORScsIHBvc3Rjb25maWc9cG9zdGNvbmZpZykKKyAgICAgICAgc2VsZi5rZXJuZWxfZmlsZSA9IHNlbGYua2VybmVsX3R5cGUgKyAnLScgKyBtYWNoaW5lICsgJy5iaW4nCisKKyAgICBkZWYgc2V0X3Jvb3Rmc19maWxlKHNlbGYpOgorICAgICAgICBpbWFnZV9mc3R5cGVzID0gZ2V0X2JiX3ZhcignSU1BR0VfRlNUWVBFUycpLnNwbGl0KCcgJykKKyAgICAgICAgIyBHZXQgYSBtYXRjaGluZyB2YWx1ZSBiZXR3ZWVuIHRhcmdldCdzIElNQUdFX0ZTVFlQRVMgYW5kIHRoZSBpbWFnZSBmc3R5cGVzIHN1cHBvZXJ0ZWQgYnkgdGhlIHRhcmdldCBjb250cm9sbGVyLgorICAgICAgICBmc3R5cGUgPSBzZWxmLmNvbnRyb2xsZXIubWF0Y2hfaW1hZ2VfZnN0eXBlKGQ9Tm9uZSwgaW1hZ2VfZnN0eXBlcz1pbWFnZV9mc3R5cGVzKQorICAgICAgICBpZiBmc3R5cGU6CisgICAgICAgICAgICBzZWxmLnJvb3Rmc19maWxlID0gc2VsZi5pbWFnZV9uYW1lICsgJy4nICsgZnN0eXBlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2cuZXJyb3IoIkNvdWxkIG5vdCBnZXQgYSBjb21wYXRpYmxlIGltYWdlIGZzdHlwZS4gQ2hlY2sgdGhhdCBJTUFHRV9GU1RZUEVTIGFuZCB0aGUgdGFyZ2V0IGNvbnRyb2xsZXIncyBzdXBwb3J0ZWRfaW1hZ2VfZnN0eXBlcyBmaWxlZHMgaGF2ZSBjb21tb24gdmFsdWVzLiIpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZGVmIHNldF9tYW5pZmVzdF9maWxlKHNlbGYpOgorICAgICAgICBzZWxmLm1hbmlmZXN0X2ZpbGUgPSBzZWxmLmltYWdlX25hbWUgKyAiLm1hbmlmZXN0IgorCisgICAgZGVmIHNldF9leHRyYV9kb3dubG9hZF9maWxlcyhzZWxmKToKKyAgICAgICAgc2VsZi5leHRyYV9kb3dubG9hZF9maWxlcyA9IHNlbGYuZ2V0X2NvbnRyb2xsZXJfZXh0cmFfZmlsZXMoKQorICAgICAgICBpZiBub3Qgc2VsZi5leHRyYV9kb3dubG9hZF9maWxlczoKKyAgICAgICAgICAgIHNlbGYuZXh0cmFfZG93bmxvYWRfZmlsZXMgPSBbXQorCisgICAgZGVmIGdldF9jb250cm9sbGVyX2V4dHJhX2ZpbGVzKHNlbGYpOgorICAgICAgICBjb250cm9sbGVyID0gc2VsZi5nZXRfY29udHJvbGxlcigpCisgICAgICAgIHJldHVybiBjb250cm9sbGVyLmdldF9leHRyYV9maWxlcygpCisKKworY2xhc3MgQmFzZVJlcG9Qcm9maWxlKG9iamVjdCk6CisgICAgIiIiCisgICAgVGhpcyBjbGFzcyBkZWZpbmVzIHRoZSBtZXRhIHByb2ZpbGUgZm9yIGFuIGltYWdlcyByZXBvc2l0b3J5LgorICAgICIiIgorCisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXBvbGluaywgbG9jYWxkaXIpOgorICAgICAgICBzZWxmLmxvY2FsZGlyID0gbG9jYWxkaXIKKyAgICAgICAgc2VsZi5yZXBvbGluayA9IHJlcG9saW5rCisKKyAgICAjIFRoZSBmb2xsb3dpbmcgYWJzdHJhY3QgbWV0aG9kcyBhcmUgdGhlIGludGVyZmFjZXMgdG8gdGhlIHJlcG9zaXRvcnkgcHJvZmlsZSBjbGFzc2VzIGRlcml2ZWQgZnJvbSB0aGlzIGFic3RyYWN0IGNsYXNzLgorCisgICAgIyBUaGlzIG1ldGhvZCBzaG91bGQgY2hlY2sgdGhlIGZpbGUgbmFtZWQgJ2ZpbGVfbmFtZScgaWYgaXQgaXMgZGlmZmVyZW50IHRoYW4gdGhlIHVwc3RyZWFtIG9uZS4KKyAgICAjIFNob3VsZCByZXR1cm4gRmFsc2UgaWYgdGhlIGltYWdlIGlzIHRoZSBzYW1lIGFzIHRoZSB1cHN0cmVhbSBhbmQgVHJ1ZSBpZiBpdCBkaWZmZXJzLgorICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBjaGVja19vbGRfZmlsZShzZWxmLCBmaWxlX25hbWUpOgorICAgICAgICBwYXNzCisKKyAgICAjIFRoaXMgbWV0aG9kIHNob3VsZCBmZXRjaCBmaWxlX25hbWUgYW5kIGNyZWF0ZSBhIHN5bWxpbmsgdG8gbG9jYWxuYW1lIGlmIHNldC4KKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgZmV0Y2goc2VsZiwgZmlsZV9uYW1lLCBsb2NhbG5hbWU9Tm9uZSk6CisgICAgICAgIHBhc3MKKworY2xhc3MgUHVibGljQUIoQmFzZVJlcG9Qcm9maWxlKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXBvbGluaywgbG9jYWxkaXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKFB1YmxpY0FCLCBzZWxmKS5fX2luaXRfXyhyZXBvbGluaywgbG9jYWxkaXIpCisgICAgICAgIGlmIGxvY2FsZGlyIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmxvY2FsZGlyID0gb3MucGF0aC5qb2luKG9zLmVudmlyb25bJ0JVSUxERElSJ10sICdQdWJsaWNBQk1pcnJvcicpCisKKyAgICAjIE5vdCB5ZXQgaW1wbGVtZW50ZWQuIEFsd2F5cyByZXR1cm5pbmcgVHJ1ZS4KKyAgICBkZWYgY2hlY2tfb2xkX2ZpbGUoc2VsZiwgZmlsZV9uYW1lKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBnZXRfcmVwb19wYXRoKHNlbGYpOgorICAgICAgICBwYXRoID0gJy9tYWNoaW5lcy8nCisKKyAgICAgICAgcG9zdGNvbmZpZyA9ICJRQV9HRVRfTUFDSElORSA9IFwiJHtNQUNISU5FfVwiIgorICAgICAgICBtYWNoaW5lID0gZ2V0X2JiX3ZhcignUUFfR0VUX01BQ0hJTkUnLCBwb3N0Y29uZmlnPXBvc3Rjb25maWcpCisgICAgICAgIGlmICdxZW11JyBpbiBtYWNoaW5lOgorICAgICAgICAgICAgcGF0aCArPSAncWVtdS8nCisKKyAgICAgICAgcG9zdGNvbmZpZyA9ICJRQV9HRVRfRElTVFJPID0gXCIke0RJU1RST31cIiIKKyAgICAgICAgZGlzdHJvID0gZ2V0X2JiX3ZhcignUUFfR0VUX0RJU1RSTycsIHBvc3Rjb25maWc9cG9zdGNvbmZpZykKKyAgICAgICAgcGF0aCArPSBkaXN0cm8ucmVwbGFjZSgncG9reScsIG1hY2hpbmUpICsgJy8nCisgICAgICAgIHJldHVybiBwYXRoCisKKworICAgIGRlZiBmZXRjaChzZWxmLCBmaWxlX25hbWUsIGxvY2FsbmFtZT1Ob25lKToKKyAgICAgICAgcmVwb19wYXRoID0gc2VsZi5nZXRfcmVwb19wYXRoKCkKKyAgICAgICAgbGluayA9IHNlbGYucmVwb2xpbmsgKyByZXBvX3BhdGggKyBmaWxlX25hbWUKKworICAgICAgICBzZWxmLndnZXQobGluaywgc2VsZi5sb2NhbGRpciwgbG9jYWxuYW1lKQorCisgICAgZGVmIHdnZXQoc2VsZiwgbGluaywgbG9jYWxkaXIsIGxvY2FsbmFtZT1Ob25lLCBleHRyYWFyZ3M9Tm9uZSk6CisgICAgICAgIHdnZXRfY21kID0gJy91c3IvYmluL2VudiB3Z2V0IC10IDIgLVQgMzAgLW52IC0tcGFzc2l2ZS1mdHAgLS1uby1jaGVjay1jZXJ0aWZpY2F0ZSAnCisKKyAgICAgICAgaWYgbG9jYWxuYW1lOgorICAgICAgICAgICAgd2dldF9jbWQgKz0gJyAtTyAnICsgbG9jYWxuYW1lICsgJyAnCisKKyAgICAgICAgaWYgZXh0cmFhcmdzOgorICAgICAgICAgICAgd2dldF9jbWQgKz0gJyAnICsgZXh0cmFhcmdzICsgJyAnCisKKyAgICAgICAgd2dldF9jbWQgKz0gIiAtUCAlcyAnJXMnIiAlIChsb2NhbGRpciwgbGluaykKKyAgICAgICAgcnVuQ21kKHdnZXRfY21kKQorCitjbGFzcyBId0F1dG8oKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbWFnZV90eXBlcywgcmVwb2xpbmssIHJlcXVpcmVkX3BhY2thZ2VzLCB0YXJnZXRwcm9maWxlLCByZXBvcHJvZmlsZSwgc2tpcF9kb3dubG9hZCk6CisgICAgICAgIGxvZy5pbmZvKCdJbml0aWFsaXppbmcuLicpCisgICAgICAgIHNlbGYuaW1hZ2VfdHlwZXMgPSBpbWFnZV90eXBlcworICAgICAgICBzZWxmLnJlcG9saW5rID0gcmVwb2xpbmsKKyAgICAgICAgc2VsZi5yZXF1aXJlZF9wYWNrYWdlcyA9IHJlcXVpcmVkX3BhY2thZ2VzCisgICAgICAgIHNlbGYudGFyZ2V0cHJvZmlsZSA9IHRhcmdldHByb2ZpbGUKKyAgICAgICAgc2VsZi5yZXBvcHJvZmlsZSA9IHJlcG9wcm9maWxlCisgICAgICAgIHNlbGYuc2tpcF9kb3dubG9hZCA9IHNraXBfZG93bmxvYWQKKyAgICAgICAgc2VsZi5yZXBvID0gc2VsZi5nZXRfcmVwb19wcm9maWxlKHNlbGYucmVwb2xpbmspCisKKyAgICAjIEdldCB0aGUgcmVwb3NpdG9yeSBwcm9maWxlOyBmb3Igbm93IHdlIG9ubHkgbG9vayBpbnNpZGUgdGhpcyBtb2R1bGUuCisgICAgZGVmIGdldF9yZXBvX3Byb2ZpbGUoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcmVwbyA9IGdldGF0dHIoc3lzLm1vZHVsZXNbX19uYW1lX19dLCBzZWxmLnJlcG9wcm9maWxlKSgqYXJncywgKiprd2FyZ3MpCisgICAgICAgIGxvZy5pbmZvKCJVc2luZyByZXBvIHByb2ZpbGU6ICVzIiAlIHJlcG8uX19jbGFzc19fLl9fbmFtZV9fKQorICAgICAgICByZXR1cm4gcmVwbworCisgICAgIyBHZXQgdGhlIHRhcmdldCBwcm9maWxlOyBmb3Igbm93IHdlIG9ubHkgbG9vayBpbnNpZGUgdGhpcyBtb2R1bGUuCisgICAgZGVmIGdldF90YXJnZXRfcHJvZmlsZShzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICB0YXJnZXQgPSBnZXRhdHRyKHN5cy5tb2R1bGVzW19fbmFtZV9fXSwgc2VsZi50YXJnZXRwcm9maWxlKSgqYXJncywgKiprd2FyZ3MpCisgICAgICAgIGxvZy5pbmZvKCJVc2luZyB0YXJnZXQgcHJvZmlsZTogJXMiICUgdGFyZ2V0Ll9fY2xhc3NfXy5fX25hbWVfXykKKyAgICAgICAgcmV0dXJuIHRhcmdldAorCisgICAgIyBSdW4gdGhlIHRlc3RpbWFnZSB0YXNrIG9uIGEgYnVpbGQgd2hpbGUgcmVkaXJlY3RpbmcgREVQTE9ZX0RJUl9JTUFHRSB0byByZXBvLmxvY2FsZGlyLCB3aGVyZSB0aGUgaW1hZ2VzIGFyZSBkb3dubG9hZGVkLgorICAgIGRlZiBydW5UZXN0aW1hZ2VCdWlsZChzZWxmLCBpbWFnZV90eXBlKToKKyAgICAgICAgbG9nLmluZm8oIlJ1bm5pbmcgdGhlIHJ1bnRpbWUgdGVzdHMgZm9yICVzLi4iICUgaW1hZ2VfdHlwZSkKKyAgICAgICAgcG9zdGNvbmZpZyA9ICJERVBMT1lfRElSX0lNQUdFID0gXCIlc1wiIiAlIHNlbGYucmVwby5sb2NhbGRpcgorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCIlcyAtYyB0ZXN0aW1hZ2UiICUgaW1hZ2VfdHlwZSwgaWdub3JlX3N0YXR1cz1UcnVlLCBwb3N0Y29uZmlnPXBvc3Rjb25maWcpCisgICAgICAgIHRlc3RpbWFnZV9yZXN1bHRzID0gZnRvb2xzLnJlYWRfZmlsZShvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcigiVCIsIGltYWdlX3R5cGUpLCAibG9nLmRvX3Rlc3RpbWFnZSIpKQorICAgICAgICBsb2cuaW5mbygnUnVudGltZSB0ZXN0cyByZXN1bHRzIGZvciAlczonICUgaW1hZ2VfdHlwZSkKKyAgICAgICAgcHJpbnQgdGVzdGltYWdlX3Jlc3VsdHMKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgIyBTdGFydCB0aGUgcHJvY2VkdXJlIQorICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIGlmIHNlbGYucmVxdWlyZWRfcGFja2FnZXM6CisgICAgICAgICAgICAjIEJ1aWxkIHRoZSByZXF1aXJlZCBwYWNrYWdlcyBmb3IgdGhlIHRlc3RzCisgICAgICAgICAgICBsb2cuaW5mbygiQnVpbGRpbmcgdGhlIHJlcXVpcmVkIHBhY2thZ2VzOiAlcyAuIiAlICcsICcuam9pbihtYXAoc3RyLCBzZWxmLnJlcXVpcmVkX3BhY2thZ2VzKSkpCisgICAgICAgICAgICByZXN1bHQgPSBiaXRiYWtlKHNlbGYucmVxdWlyZWRfcGFja2FnZXMsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgICAgIGlmIHJlc3VsdC5zdGF0dXMgIT0gMDoKKyAgICAgICAgICAgICAgICBsb2cuZXJyb3IoIkNvdWxkIG5vdCBidWlsZCByZXF1aXJlZCBwYWNrYWdlczogJXMuIE91dHB1dDogJXMiICUgKHNlbGYucmVxdWlyZWRfcGFja2FnZXMsIHJlc3VsdC5vdXRwdXQpKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgICAgICMgQnVpbGQgdGhlIHBhY2thZ2UgcmVwb3NpdG9yeSBtZXRhIGRhdGEuCisgICAgICAgICAgICBsb2cuaW5mbygiQnVpbGRpbmcgdGhlIHBhY2thZ2UgaW5kZXguIikKKyAgICAgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoInBhY2thZ2UtaW5kZXgiLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgICAgICBpZiByZXN1bHQuc3RhdHVzICE9IDA6CisgICAgICAgICAgICAgICAgbG9nLmVycm9yKCJDb3VsZCBub3QgYnVpbGQgJ3BhY2thZ2UtaW5kZXgnLiBPdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICAjIENyZWF0ZSB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgdGhlIGltYWdlcyB0byBiZSBkb3dubG9hZGVkCisgICAgICAgIGxvZy5pbmZvKCJDcmVhdGluZyBkaXJlY3Rvcnkgc3RydWN0dXJlICVzIiAlIHNlbGYucmVwby5sb2NhbGRpcikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYucmVwby5sb2NhbGRpcik6CisgICAgICAgICAgICBvcy5tYWtlZGlycyhzZWxmLnJlcG8ubG9jYWxkaXIpCisKKyAgICAgICAgIyBGb3IgZWFjaCBpbWFnZSB0eXBlLCBkb3dubG9hZCB0aGUgbmVlZGVkIGZpbGVzIGFuZCBydW4gdGhlIHRlc3RzLgorICAgICAgICBub2lzc3Vlc2ZvdW5kID0gVHJ1ZQorICAgICAgICBmb3IgaW1hZ2VfdHlwZSBpbiBzZWxmLmltYWdlX3R5cGVzOgorICAgICAgICAgICAgaWYgc2VsZi5za2lwX2Rvd25sb2FkOgorICAgICAgICAgICAgICAgIGxvZy5pbmZvKCJTa2lwcGluZyBkb3dubG9hZGluZyB0aGUgaW1hZ2VzLi4iKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSBzZWxmLmdldF90YXJnZXRfcHJvZmlsZShpbWFnZV90eXBlKQorICAgICAgICAgICAgICAgIGZpbGVzX2RpY3QgPSB0YXJnZXQuZ2V0X2ZpbGVzX2RpY3QoKQorICAgICAgICAgICAgICAgIGxvZy5pbmZvKCJEb3dubG9hZGluZyBmaWxlcyBmb3IgJXMiICUgaW1hZ2VfdHlwZSkKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBmaWxlc19kaWN0OgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnJlcG8uY2hlY2tfb2xkX2ZpbGUoZmlsZXNfZGljdFtmXSk6CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnJlcG8ubG9jYWxkaXIsIGZpbGVzX2RpY3RbZl0pCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmaWxlcGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGZpbGVwYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXBvLmZldGNoKGZpbGVzX2RpY3RbZl0pCisKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYucnVuVGVzdGltYWdlQnVpbGQoaW1hZ2VfdHlwZSkKKyAgICAgICAgICAgIGlmIHJlc3VsdC5zdGF0dXMgIT0gMDoKKyAgICAgICAgICAgICAgICBub2lzc3Vlc2ZvdW5kID0gRmFsc2UKKworICAgICAgICBpZiBub2lzc3Vlc2ZvdW5kOgorICAgICAgICAgICAgbG9nLmluZm8oJ0ZpbmlzaGVkLiBObyBpc3N1ZXMgZm91bmQuJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZy5lcnJvcignRmluaXNoZWQuIFNvbWUgcnVudGltZSB0ZXN0cyBoYXZlIGZhaWxlZC4gUmV0dXJuaW5nIG5vbi0wIHN0YXR1cyBjb2RlLicpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisKKworZGVmIG1haW4oKToKKworICAgIHBhcnNlciA9IGdldF9hcmdzX3BhcnNlcigpCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIGh3YXV0byA9IEh3QXV0byhpbWFnZV90eXBlcz1hcmdzLmltYWdlX3R5cGVzLCByZXBvbGluaz1hcmdzLnJlcG9fbGluaywgcmVxdWlyZWRfcGFja2FnZXM9YXJncy5yZXF1aXJlZF9wYWNrYWdlcywgdGFyZ2V0cHJvZmlsZT1hcmdzLnRhcmdldHByb2ZpbGUsIHJlcG9wcm9maWxlPWFyZ3MucmVwb3Byb2ZpbGUsIHNraXBfZG93bmxvYWQ9YXJncy5za2lwX2Rvd25sb2FkKQorCisgICAgaHdhdXRvLnJ1bigpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdHJ5OgorICAgICAgICByZXQgPSBtYWluKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICByZXQgPSAxCisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Yyg1KQorICAgIHN5cy5leGl0KHJldCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy90aW55L2RpcnNpemUucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvdGlueS9kaXJzaXplLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQwZmY0YWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvdGlueS9kaXJzaXplLnB5CkBAIC0wLDAgKzEsOTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTEsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorIworIworIyBEaXNwbGF5IGRldGFpbHMgb2YgdGhlIHJvb3QgZmlsZXN5c3RlbSBzaXplLCBicm9rZW4gdXAgYnkgZGlyZWN0b3J5LgorIyBBbGxvd3MgZm9yIGxpbWl0aW5nIGJ5IHNpemUgdG8gZm9jdXMgb24gdGhlIGxhcmdlciBmaWxlcy4KKyMKKyMgQXV0aG9yOiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKyMKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgc3RhdAorCitjbGFzcyBSZWNvcmQ6CisgICAgZGVmIGNyZWF0ZShwYXRoKToKKyAgICAgICAgciA9IFJlY29yZChwYXRoKQorCisgICAgICAgIHMgPSBvcy5sc3RhdChwYXRoKQorICAgICAgICBpZiBzdGF0LlNfSVNESVIocy5zdF9tb2RlKToKKyAgICAgICAgICAgIGZvciBwIGluIG9zLmxpc3RkaXIocGF0aCk6CisgICAgICAgICAgICAgICAgcGF0aG5hbWUgPSBwYXRoICsgIi8iICsgcAorICAgICAgICAgICAgICAgIHNzID0gb3MubHN0YXQocGF0aG5hbWUpCisgICAgICAgICAgICAgICAgaWYgbm90IHN0YXQuU19JU0xOSyhzcy5zdF9tb2RlKToKKyAgICAgICAgICAgICAgICAgICAgci5yZWNvcmRzLmFwcGVuZChSZWNvcmQuY3JlYXRlKHBhdGhuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgci5zaXplICs9IHIucmVjb3Jkc1stMV0uc2l6ZQorICAgICAgICAgICAgci5yZWNvcmRzLnNvcnQocmV2ZXJzZT1UcnVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgci5zaXplID0gb3MubHN0YXQocGF0aCkuc3Rfc2l6ZQorCisgICAgICAgIHJldHVybiByCisgICAgY3JlYXRlID0gc3RhdGljbWV0aG9kKGNyZWF0ZSkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorICAgICAgICBzZWxmLnNpemUgPSAwCisgICAgICAgIHNlbGYucmVjb3JkcyA9IFtdCisKKyAgICBkZWYgX19jbXBfXyh0aGlzLCB0aGF0KToKKyAgICAgICAgaWYgdGhhdCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodGhhdCwgUmVjb3JkKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgorICAgICAgICBpZiBsZW4odGhpcy5yZWNvcmRzKSA+IDAgYW5kIGxlbih0aGF0LnJlY29yZHMpID09IDA6CisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgaWYgbGVuKHRoaXMucmVjb3JkcykgPT0gMCBhbmQgbGVuKHRoYXQucmVjb3JkcykgPiAwOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgaWYgdGhpcy5zaXplIDwgdGhhdC5zaXplOgorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIGlmIHRoaXMuc2l6ZSA+IHRoYXQuc2l6ZToKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIHJldHVybiAwCisKKyAgICBkZWYgc2hvdyhzZWxmLCBtaW5zaXplKToKKyAgICAgICAgdG90YWwgPSAwCisgICAgICAgIGlmIHNlbGYuc2l6ZSA8PSBtaW5zaXplOgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgcHJpbnQgIiUxMGQgJXMiICUgKHNlbGYuc2l6ZSwgc2VsZi5wYXRoKQorICAgICAgICBmb3IgciBpbiBzZWxmLnJlY29yZHM6CisgICAgICAgICAgICB0b3RhbCArPSByLnNob3cobWluc2l6ZSkKKyAgICAgICAgaWYgbGVuKHNlbGYucmVjb3JkcykgPT0gMDoKKyAgICAgICAgICAgIHRvdGFsID0gc2VsZi5zaXplCisgICAgICAgIHJldHVybiB0b3RhbAorCisKK2RlZiBtYWluKCk6CisgICAgbWluc2l6ZSA9IDAKKyAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDI6CisgICAgICAgIG1pbnNpemUgPSBpbnQoc3lzLmFyZ3ZbMV0pCisgICAgcm9vdGZzID0gUmVjb3JkLmNyZWF0ZSgiLiIpCisgICAgdG90YWwgPSByb290ZnMuc2hvdyhtaW5zaXplKQorICAgIHByaW50ICJEaXNwbGF5ZWQgJWQvJWQgYnl0ZXMgKCUuMmYlJSkiICUgXAorICAgICAgICAgICh0b3RhbCwgcm9vdGZzLnNpemUsIDEwMCAqIGZsb2F0KHRvdGFsKSAvIHJvb3Rmcy5zaXplKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvdGlueS9rc2l6ZS5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy90aW55L2tzaXplLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQwMDZmMmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvdGlueS9rc2l6ZS5weQpAQCAtMCwwICsxLDE2NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisjCisjCisjIERpc3BsYXkgZGV0YWlscyBvZiB0aGUga2VybmVsIGJ1aWxkIHNpemUsIGJyb2tlbiB1cCBieSBidWlsdC1pbi5vLiBTb3J0CisjIHRoZSBvYmplY3RzIGJ5IHNpemUuIFJ1biBmcm9tIHRoZSB0b3AgbGV2ZWwga2VybmVsIGJ1aWxkIGRpcmVjdG9yeS4KKyMKKyMgQXV0aG9yOiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKyMKKworaW1wb3J0IHN5cworaW1wb3J0IGdldG9wdAoraW1wb3J0IG9zCitmcm9tIHN1YnByb2Nlc3MgaW1wb3J0ICoKK2Zyb20gc3RyaW5nIGltcG9ydCBqb2luCisKKworZGVmIHVzYWdlKCk6CisgICAgcHJvZyA9IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pCisgICAgcHJpbnQgJ1VzYWdlOiAlcyBbT1BUSU9OXS4uLicgJSAocHJvZykKKyAgICBwcmludCAnICAtZCwgICAgICAgICAgICAgICAgIGRpc3BsYXkgYW4gYWRkaXRpb25hbCBsZXZlbCBvZiBkcml2ZXJzIGRldGFpbCcKKyAgICBwcmludCAnICAtaCwgLS1oZWxwICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0JworICAgIHByaW50ICcnCisgICAgcHJpbnQgJ1J1biAlcyBmcm9tIHRoZSB0b3AtbGV2ZWwgTGludXgga2VybmVsIGJ1aWxkIGRpcmVjdG9yeS4nICUgKHByb2cpCisKKworY2xhc3MgU2l6ZXM6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGdsb2IpOgorICAgICAgICBzZWxmLnRpdGxlID0gZ2xvYgorICAgICAgICBwID0gUG9wZW4oInNpemUgLXQgIiArIGdsb2IsIHNoZWxsPVRydWUsIHN0ZG91dD1QSVBFLCBzdGRlcnI9UElQRSkKKyAgICAgICAgb3V0cHV0ID0gcC5jb21tdW5pY2F0ZSgpWzBdLnNwbGl0bGluZXMoKQorICAgICAgICBpZiBsZW4ob3V0cHV0KSA+IDI6CisgICAgICAgICAgICBzaXplcyA9IG91dHB1dFstMV0uc3BsaXQoKVswOjRdCisgICAgICAgICAgICBzZWxmLnRleHQgPSBpbnQoc2l6ZXNbMF0pCisgICAgICAgICAgICBzZWxmLmRhdGEgPSBpbnQoc2l6ZXNbMV0pCisgICAgICAgICAgICBzZWxmLmJzcyA9IGludChzaXplc1syXSkKKyAgICAgICAgICAgIHNlbGYudG90YWwgPSBpbnQoc2l6ZXNbM10pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnRleHQgPSBzZWxmLmRhdGEgPSBzZWxmLmJzcyA9IHNlbGYudG90YWwgPSAwCisKKyAgICBkZWYgc2hvdyhzZWxmLCBpbmRlbnQ9IiIpOgorICAgICAgICBwcmludCAiJS0zMnMgJTEwZCB8ICUxMGQgJTEwZCAlMTBkIiAlIFwKKyAgICAgICAgICAgICAgKGluZGVudCtzZWxmLnRpdGxlLCBzZWxmLnRvdGFsLCBzZWxmLnRleHQsIHNlbGYuZGF0YSwgc2VsZi5ic3MpCisKKworY2xhc3MgUmVwb3J0OgorICAgIGRlZiBjcmVhdGUoZmlsZW5hbWUsIHRpdGxlLCBzdWJnbG9iPU5vbmUpOgorICAgICAgICByID0gUmVwb3J0KGZpbGVuYW1lLCB0aXRsZSkKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguZGlybmFtZShmaWxlbmFtZSkKKworICAgICAgICBwID0gUG9wZW4oImxzICIgKyBwYXRoICsgIi8qLm8gfCBncmVwIC12IGJ1aWx0LWluLm8iLAorICAgICAgICAgICAgICAgICAgc2hlbGw9VHJ1ZSwgc3Rkb3V0PVBJUEUsIHN0ZGVycj1QSVBFKQorICAgICAgICBnbG9iID0gam9pbihwLmNvbW11bmljYXRlKClbMF0uc3BsaXRsaW5lcygpKQorICAgICAgICBvcmVwb3J0ID0gUmVwb3J0KGdsb2IsIHBhdGggKyAiLyoubyIpCisgICAgICAgIG9yZXBvcnQuc2l6ZXMudGl0bGUgPSBwYXRoICsgIi8qLm8iCisgICAgICAgIHIucGFydHMuYXBwZW5kKG9yZXBvcnQpCisKKyAgICAgICAgaWYgc3ViZ2xvYjoKKyAgICAgICAgICAgIHAgPSBQb3BlbigibHMgIiArIHN1Ymdsb2IsIHNoZWxsPVRydWUsIHN0ZG91dD1QSVBFLCBzdGRlcnI9UElQRSkKKyAgICAgICAgICAgIGZvciBmIGluIHAuY29tbXVuaWNhdGUoKVswXS5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguZGlybmFtZShmKQorICAgICAgICAgICAgICAgIHIucGFydHMuYXBwZW5kKFJlcG9ydC5jcmVhdGUoZiwgcGF0aCwgcGF0aCArICIvKi9idWlsdC1pbi5vIikpCisgICAgICAgICAgICByLnBhcnRzLnNvcnQocmV2ZXJzZT1UcnVlKQorCisgICAgICAgIGZvciBiIGluIHIucGFydHM6CisgICAgICAgICAgICByLnRvdGFsc1sidG90YWwiXSArPSBiLnNpemVzLnRvdGFsCisgICAgICAgICAgICByLnRvdGFsc1sidGV4dCJdICs9IGIuc2l6ZXMudGV4dAorICAgICAgICAgICAgci50b3RhbHNbImRhdGEiXSArPSBiLnNpemVzLmRhdGEKKyAgICAgICAgICAgIHIudG90YWxzWyJic3MiXSArPSBiLnNpemVzLmJzcworCisgICAgICAgIHIuZGVsdGFzWyJ0b3RhbCJdID0gci5zaXplcy50b3RhbCAtIHIudG90YWxzWyJ0b3RhbCJdCisgICAgICAgIHIuZGVsdGFzWyJ0ZXh0Il0gPSByLnNpemVzLnRleHQgLSByLnRvdGFsc1sidGV4dCJdCisgICAgICAgIHIuZGVsdGFzWyJkYXRhIl0gPSByLnNpemVzLmRhdGEgLSByLnRvdGFsc1siZGF0YSJdCisgICAgICAgIHIuZGVsdGFzWyJic3MiXSA9IHIuc2l6ZXMuYnNzIC0gci50b3RhbHNbImJzcyJdCisgICAgICAgIHJldHVybiByCisgICAgY3JlYXRlID0gc3RhdGljbWV0aG9kKGNyZWF0ZSkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBnbG9iLCB0aXRsZSk6CisgICAgICAgIHNlbGYuZ2xvYiA9IGdsb2IKKyAgICAgICAgc2VsZi50aXRsZSA9IHRpdGxlCisgICAgICAgIHNlbGYuc2l6ZXMgPSBTaXplcyhnbG9iKQorICAgICAgICBzZWxmLnBhcnRzID0gW10KKyAgICAgICAgc2VsZi50b3RhbHMgPSB7InRvdGFsIjowLCAidGV4dCI6MCwgImRhdGEiOjAsICJic3MiOjB9CisgICAgICAgIHNlbGYuZGVsdGFzID0geyJ0b3RhbCI6MCwgInRleHQiOjAsICJkYXRhIjowLCAiYnNzIjowfQorCisgICAgZGVmIHNob3coc2VsZiwgaW5kZW50PSIiKToKKyAgICAgICAgcnVsZSA9IHN0ci5sanVzdChpbmRlbnQsIDgwLCAnLScpCisgICAgICAgIHByaW50ICIlLTMycyAlMTBzIHwgJTEwcyAlMTBzICUxMHMiICUgXAorICAgICAgICAgICAgICAoaW5kZW50K3NlbGYudGl0bGUsICJ0b3RhbCIsICJ0ZXh0IiwgImRhdGEiLCAiYnNzIikKKyAgICAgICAgcHJpbnQgcnVsZQorICAgICAgICBzZWxmLnNpemVzLnNob3coaW5kZW50KQorICAgICAgICBwcmludCBydWxlCisgICAgICAgIGZvciBwIGluIHNlbGYucGFydHM6CisgICAgICAgICAgICBpZiBwLnNpemVzLnRvdGFsID4gMDoKKyAgICAgICAgICAgICAgICBwLnNpemVzLnNob3coaW5kZW50KQorICAgICAgICBwcmludCBydWxlCisgICAgICAgIHByaW50ICIlLTMycyAlMTBkIHwgJTEwZCAlMTBkICUxMGQiICUgXAorICAgICAgICAgICAgICAoaW5kZW50KyJzdW0iLCBzZWxmLnRvdGFsc1sidG90YWwiXSwgc2VsZi50b3RhbHNbInRleHQiXSwKKyAgICAgICAgICAgICAgIHNlbGYudG90YWxzWyJkYXRhIl0sIHNlbGYudG90YWxzWyJic3MiXSkKKyAgICAgICAgcHJpbnQgIiUtMzJzICUxMGQgfCAlMTBkICUxMGQgJTEwZCIgJSBcCisgICAgICAgICAgICAgIChpbmRlbnQrImRlbHRhIiwgc2VsZi5kZWx0YXNbInRvdGFsIl0sIHNlbGYuZGVsdGFzWyJ0ZXh0Il0sCisgICAgICAgICAgICAgICBzZWxmLmRlbHRhc1siZGF0YSJdLCBzZWxmLmRlbHRhc1siYnNzIl0pCisgICAgICAgIHByaW50ICJcbiIKKworICAgIGRlZiBfX2NtcF9fKHRoaXMsIHRoYXQpOgorICAgICAgICBpZiB0aGF0IGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh0aGF0LCBSZXBvcnQpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yCisgICAgICAgIGlmIHRoaXMuc2l6ZXMudG90YWwgPCB0aGF0LnNpemVzLnRvdGFsOgorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIGlmIHRoaXMuc2l6ZXMudG90YWwgPiB0aGF0LnNpemVzLnRvdGFsOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgcmV0dXJuIDAKKworCitkZWYgbWFpbigpOgorICAgIHRyeToKKyAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAiZGgiLCBbImhlbHAiXSkKKyAgICBleGNlcHQgZ2V0b3B0LkdldG9wdEVycm9yLCBlcnI6CisgICAgICAgIHByaW50ICclcycgJSBzdHIoZXJyKQorICAgICAgICB1c2FnZSgpCisgICAgICAgIHN5cy5leGl0KDIpCisKKyAgICBkcml2ZXJfZGV0YWlsID0gRmFsc2UKKyAgICBmb3IgbywgYSBpbiBvcHRzOgorICAgICAgICBpZiBvID09ICctZCc6CisgICAgICAgICAgICBkcml2ZXJfZGV0YWlsID0gVHJ1ZQorICAgICAgICBlbGlmIG8gaW4gKCctaCcsICctLWhlbHAnKToKKyAgICAgICAgICAgIHVzYWdlKCkKKyAgICAgICAgICAgIHN5cy5leGl0KDApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICJ1bmhhbmRsZWQgb3B0aW9uIgorCisgICAgZ2xvYiA9ICJhcmNoLyovYnVpbHQtaW4ubyAqL2J1aWx0LWluLm8iCisgICAgdm1saW51eCA9IFJlcG9ydC5jcmVhdGUoInZtbGludXgiLCAgIkxpbnV4IEtlcm5lbCIsIGdsb2IpCisKKyAgICB2bWxpbnV4LnNob3coKQorICAgIGZvciBiIGluIHZtbGludXgucGFydHM6CisgICAgICAgIGlmIGIudG90YWxzWyJ0b3RhbCJdID4gMCBhbmQgbGVuKGIucGFydHMpID4gMToKKyAgICAgICAgICAgIGIuc2hvdygpCisgICAgICAgIGlmIGIudGl0bGUgPT0gImRyaXZlcnMiIGFuZCBkcml2ZXJfZGV0YWlsOgorICAgICAgICAgICAgZm9yIGQgaW4gYi5wYXJ0czoKKyAgICAgICAgICAgICAgICBpZiBkLnRvdGFsc1sidG90YWwiXSA+IDAgYW5kIGxlbihkLnBhcnRzKSA+IDE6CisgICAgICAgICAgICAgICAgICAgIGQuc2hvdygiICAgICIpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy93aWMgYi95b2N0by1wb2t5L3NjcmlwdHMvd2ljCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdhZDJiMTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvd2ljCkBAIC0wLDAgKzEsMzIzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxMywgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBERVNDUklQVElPTiAnd2ljJyBpcyB0aGUgT3BlbkVtYmVkZGVkIEltYWdlIENyZWF0b3IgdGhhdCB1c2VycyBjYW4KKyMgdXNlIHRvIGdlbmVyYXRlIGJvb3RhYmxlIGltYWdlcy4gIEludm9raW5nIGl0IHdpdGhvdXQgYW55IGFyZ3VtZW50cworIyB3aWxsIGRpc3BsYXkgaGVscCBzY3JlZW5zIGZvciB0aGUgJ3dpYycgY29tbWFuZCBhbmQgbGlzdCB0aGUKKyMgYXZhaWxhYmxlICd3aWMnIHN1YmNvbW1hbmRzLiAgSW52b2tpbmcgYSBzdWJjb21tYW5kIHdpdGhvdXQgYW55CisjIGFyZ3VtZW50cyB3aWxsIGxpa2V3aXNlIGRpc3BsYXkgaGVscCBzY3JlZW5zIGZvciB0aGUgc3BlY2lmaWVkCisjIHN1YmNvbW1hbmQuICBQbGVhc2UgdXNlIHRoYXQgaW50ZXJmYWNlIGZvciBkZXRhaWxlZCBoZWxwLgorIworIyBBVVRIT1JTCisjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGxpbnV4LmludGVsLmNvbT4KKyMKKworX192ZXJzaW9uX18gPSAiMC4yLjAiCisKKyMgUHl0aG9uIFN0YW5kYXJkIExpYnJhcnkgbW9kdWxlcworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBsb2dnaW5nCitmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3Bhd24KKworIyBFeHRlcm5hbCBtb2R1bGVzCitzY3JpcHRzX3BhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKK2xpYl9wYXRoID0gc2NyaXB0c19wYXRoICsgJy9saWInCitzeXMucGF0aC5hcHBlbmQobGliX3BhdGgpCisKK2JpdGJha2VfZXhlID0gc3Bhd24uZmluZF9leGVjdXRhYmxlKCdiaXRiYWtlJykKK2lmIGJpdGJha2VfZXhlOgorICAgIGJpdGJha2VfcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoYml0YmFrZV9leGUpLCAnLi4vbGliJykKKyAgICBzeXMucGF0aC5hcHBlbmQoYml0YmFrZV9wYXRoKQorICAgIGZyb20gYmIgaW1wb3J0IGNvb2tlcmRhdGEKKyAgICBmcm9tIGJiLm1haW4gaW1wb3J0IGJpdGJha2VfbWFpbiwgQml0QmFrZUNvbmZpZ1BhcmFtZXRlcnMKK2Vsc2U6CisgICAgYml0YmFrZV9tYWluID0gTm9uZQorCitmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBnZXRfYml0YmFrZV92YXIsIEJCX1ZBUlMKK2Zyb20gd2ljLnV0aWxzLmVycm9ycyBpbXBvcnQgV2ljRXJyb3IKK2Zyb20gd2ljIGltcG9ydCBlbmdpbmUKK2Zyb20gd2ljIGltcG9ydCBoZWxwIGFzIGhscAorCitkZWYgcm9vdGZzX2Rpcl90b19hcmdzKGtyb290ZnNfZGlyKToKKyAgICAiIiIKKyAgICBHZXQgYSByb290ZnNfZGlyIGRpY3QgYW5kIHNlcmlhbGl6ZSB0byBzdHJpbmcKKyAgICAiIiIKKyAgICByb290ZnNfZGlyID0gJycKKyAgICBmb3Iga2V5LCB2YWwgaW4ga3Jvb3Rmc19kaXIuaXRlbXMoKToKKyAgICAgICAgcm9vdGZzX2RpciArPSAnICcKKyAgICAgICAgcm9vdGZzX2RpciArPSAnPScuam9pbihba2V5LCB2YWxdKQorICAgIHJldHVybiByb290ZnNfZGlyLnN0cmlwKCkKKworZGVmIGNhbGxiYWNrX3Jvb3Rmc19kaXIob3B0aW9uLCBvcHQsIHZhbHVlLCBwYXJzZXIpOgorICAgICIiIgorICAgIEJ1aWxkIGEgZGljdCB1c2luZyAtLXJvb3Rmc19kaXIgY29ubmVjdGlvbj1kaXIKKyAgICAiIiIKKyAgICBpZiBub3QgdHlwZShwYXJzZXIudmFsdWVzLnJvb3Rmc19kaXIpIGlzIGRpY3Q6CisgICAgICAgIHBhcnNlci52YWx1ZXMucm9vdGZzX2RpciA9IGRpY3QoKQorCisgICAgaWYgJz0nIGluIHZhbHVlOgorICAgICAgICAoa2V5LCByb290ZnNfZGlyKSA9IHZhbHVlLnNwbGl0KCc9JykKKyAgICBlbHNlOgorICAgICAgICBrZXkgPSAnUk9PVEZTX0RJUicKKyAgICAgICAgcm9vdGZzX2RpciA9IHZhbHVlCisKKyAgICBwYXJzZXIudmFsdWVzLnJvb3Rmc19kaXJba2V5XSA9IHJvb3Rmc19kaXIKKworZGVmIHdpY19jcmVhdGVfc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorICAgICIiIgorICAgIENvbW1hbmQtbGluZSBoYW5kbGluZyBmb3IgaW1hZ2UgY3JlYXRpb24uICBUaGUgcmVhbCB3b3JrIGlzIGRvbmUKKyAgICBieSBpbWFnZS5lbmdpbmUud2ljX2NyZWF0ZSgpCisgICAgIiIiCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlPXVzYWdlX3N0cikKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbyIsICItLW91dGRpciIsIGRlc3Q9Im91dGRpciIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0ibmFtZSBvZiBkaXJlY3RvcnkgdG8gY3JlYXRlIGltYWdlIGluIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWUiLCAiLS1pbWFnZS1uYW1lIiwgZGVzdD0iaW1hZ2VfbmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0ibmFtZSBvZiB0aGUgaW1hZ2UgdG8gdXNlIHRoZSBhcnRpZmFjdHMgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZS5nLiBjb3JlLWltYWdlLXNhdG8iKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItciIsICItLXJvb3Rmcy1kaXIiLCBkZXN0PSJyb290ZnNfZGlyIiwgdHlwZT0ic3RyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249ImNhbGxiYWNrIiwgY2FsbGJhY2s9Y2FsbGJhY2tfcm9vdGZzX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJwYXRoIHRvIHRoZSAvcm9vdGZzIGRpciB0byB1c2UgYXMgdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIud2tzIHJvb3RmcyBzb3VyY2UiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYiIsICItLWJvb3RpbWctZGlyIiwgZGVzdD0iYm9vdGltZ19kaXIiLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InBhdGggdG8gdGhlIGRpciBjb250YWluaW5nIHRoZSBib290IGFydGlmYWN0cyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGUuZy4gL0VGSSBvciAvc3lzbGludXggZGlycykgdG8gdXNlIGFzIHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiLndrcyBib290aW1nIHNvdXJjZSIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1rIiwgIi0ta2VybmVsLWRpciIsIGRlc3Q9Imtlcm5lbF9kaXIiLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InBhdGggdG8gdGhlIGRpciBjb250YWluaW5nIHRoZSBrZXJuZWwgdG8gdXNlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiB0aGUgLndrcyBib290aW1nIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLW4iLCAiLS1uYXRpdmUtc3lzcm9vdCIsIGRlc3Q9Im5hdGl2ZV9zeXNyb290IiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJwYXRoIHRvIHRoZSBuYXRpdmUgc3lzcm9vdCBjb250YWluaW5nIHRoZSB0b29scyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAidG8gdXNlIHRvIGJ1aWxkIHRoZSBpbWFnZSIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1wIiwgIi0tc2tpcC1idWlsZC1jaGVjayIsIGRlc3Q9ImJ1aWxkX2NoZWNrIiwKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVmYXVsdD1UcnVlLCBoZWxwPSJza2lwIHRoZSBidWlsZCBjaGVjayIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1mIiwgIi0tYnVpbGQtcm9vdGZzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iYnVpbGQgcm9vdGZzIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWMiLCAiLS1jb21wcmVzcy13aXRoIiwgY2hvaWNlcz0oImd6aXAiLCAiYnppcDIiLCAieHoiKSwKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdjb21wcmVzc29yJywKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJjb21wcmVzcyBpbWFnZSB3aXRoIHNwZWNpZmllZCBjb21wcmVzc29yIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXYiLCAiLS12YXJzIiwgZGVzdD0ndmFyc19kaXInLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9ImRpcmVjdG9yeSB3aXRoIDxpbWFnZT4uZW52IGZpbGVzIHRoYXQgc3RvcmUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgImJpdGJha2UgdmFyaWFibGVzIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLUQiLCAiLS1kZWJ1ZyIsIGRlc3Q9ImRlYnVnIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLCBoZWxwPSJvdXRwdXQgZGVidWcgaW5mb3JtYXRpb24iKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIGxlbihhcmdzKSAhPSAxOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBleGl0aW5nXG4iKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBvcHRpb25zLmJ1aWxkX3Jvb3RmcyBhbmQgbm90IGJpdGJha2VfbWFpbjoKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiQ2FuJ3QgYnVpbGQgcm9vZnMgYXMgYml0YmFrZSBpcyBub3QgaW4gdGhlICRQQVRIIikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGlmIG5vdCBvcHRpb25zLmltYWdlX25hbWU6CisgICAgICAgIG1pc3NlZCA9IFtdCisgICAgICAgIGZvciB2YWwsIG9wdCBpbiBbKG9wdGlvbnMucm9vdGZzX2RpciwgJ3Jvb3Rmcy1kaXInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAob3B0aW9ucy5ib290aW1nX2RpciwgJ2Jvb3RpbWctZGlyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbnMua2VybmVsX2RpciwgJ2tlcm5lbC1kaXInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAob3B0aW9ucy5uYXRpdmVfc3lzcm9vdCwgJ25hdGl2ZS1zeXNyb290JyldOgorICAgICAgICAgICAgaWYgbm90IHZhbDoKKyAgICAgICAgICAgICAgICBtaXNzZWQuYXBwZW5kKG9wdCkKKyAgICAgICAgaWYgbWlzc2VkOgorICAgICAgICAgICAgcHJpbnQgIlRoZSBmb2xsb3dpbmcgYnVpbGQgYXJ0aWZhY3RzIGFyZSBub3Qgc3BlY2lmaWVkOiIKKyAgICAgICAgICAgIHByaW50ICIgICIgKyAiLCAiLmpvaW4obWlzc2VkKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGlmIG9wdGlvbnMuaW1hZ2VfbmFtZToKKyAgICAgICAgQkJfVkFSUy5kZWZhdWx0X2ltYWdlID0gb3B0aW9ucy5pbWFnZV9uYW1lCisgICAgZWxzZToKKyAgICAgICAgb3B0aW9ucy5idWlsZF9jaGVjayA9IEZhbHNlCisKKyAgICBpZiBvcHRpb25zLnZhcnNfZGlyOgorICAgICAgICBCQl9WQVJTLnZhcnNfZGlyID0gb3B0aW9ucy52YXJzX2RpcgorCisgICAgaWYgb3B0aW9ucy5idWlsZF9jaGVjazoKKyAgICAgICAgcHJpbnQgIkNoZWNraW5nIGJhc2ljIGJ1aWxkIGVudmlyb25tZW50Li4uIgorICAgICAgICBpZiBub3QgZW5naW5lLnZlcmlmeV9idWlsZF9lbnYoKToKKyAgICAgICAgICAgIHByaW50ICJDb3VsZG4ndCB2ZXJpZnkgYnVpbGQgZW52aXJvbm1lbnQsIGV4aXRpbmdcbiIKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCAiRG9uZS5cbiIKKworICAgIGJvb3RpbWdfZGlyID0gIiIKKworICAgIGlmIG9wdGlvbnMuaW1hZ2VfbmFtZToKKyAgICAgICAgaWYgb3B0aW9ucy5idWlsZF9yb290ZnM6CisgICAgICAgICAgICBhcmd2ID0gWyJiaXRiYWtlIiwgb3B0aW9ucy5pbWFnZV9uYW1lXQorICAgICAgICAgICAgaWYgb3B0aW9ucy5kZWJ1ZzoKKyAgICAgICAgICAgICAgICBhcmd2LmFwcGVuZCgiLS1kZWJ1ZyIpCisKKyAgICAgICAgICAgIHByaW50ICJCdWlsZGluZyByb290ZnMuLi5cbiIKKyAgICAgICAgICAgIGlmIGJpdGJha2VfbWFpbihCaXRCYWtlQ29uZmlnUGFyYW1ldGVycyhhcmd2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZXJkYXRhLkNvb2tlckNvbmZpZ3VyYXRpb24oKSk6CisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICByb290ZnNfZGlyID0gZ2V0X2JpdGJha2VfdmFyKCJJTUFHRV9ST09URlMiLCBvcHRpb25zLmltYWdlX25hbWUpCisgICAgICAgIGtlcm5lbF9kaXIgPSBnZXRfYml0YmFrZV92YXIoIkRFUExPWV9ESVJfSU1BR0UiLCBvcHRpb25zLmltYWdlX25hbWUpCisgICAgICAgIG5hdGl2ZV9zeXNyb290ID0gZ2V0X2JpdGJha2VfdmFyKCJTVEFHSU5HX0RJUl9OQVRJVkUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmltYWdlX25hbWUpCisgICAgZWxzZToKKyAgICAgICAgaWYgb3B0aW9ucy5idWlsZF9yb290ZnM6CisgICAgICAgICAgICBwcmludCAiSW1hZ2UgbmFtZSBpcyBub3Qgc3BlY2lmaWVkLCBleGl0aW5nLiAoVXNlIC1lLy0taW1hZ2UtbmFtZSB0byBzcGVjaWZ5IGl0KVxuIgorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHdrc19maWxlID0gYXJnc1swXQorCisgICAgaWYgbm90IHdrc19maWxlLmVuZHN3aXRoKCIud2tzIik6CisgICAgICAgIHdrc19maWxlID0gZW5naW5lLmZpbmRfY2FubmVkX2ltYWdlKHNjcmlwdHNfcGF0aCwgd2tzX2ZpbGUpCisgICAgICAgIGlmIG5vdCB3a3NfZmlsZToKKyAgICAgICAgICAgIHByaW50ICJObyBpbWFnZSBuYW1lZCAlcyBmb3VuZCwgZXhpdGluZy4gIChVc2UgJ3dpYyBsaXN0IGltYWdlcycgIlwKKyAgICAgICAgICAgICAgICAgICJ0byBsaXN0IGF2YWlsYWJsZSBpbWFnZXMsIG9yIHNwZWNpZnkgYSBmdWxseS1xdWFsaWZpZWQgT0UgIlwKKyAgICAgICAgICAgICAgICAgICJraWNrc3RhcnQgKC53a3MpIGZpbGVuYW1lKVxuIiAlIGFyZ3NbMF0KKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpbWFnZV9vdXRwdXRfZGlyID0gIiIKKyAgICBpZiBvcHRpb25zLm91dGRpcjoKKyAgICAgICAgaW1hZ2Vfb3V0cHV0X2RpciA9IG9wdGlvbnMub3V0ZGlyCisKKyAgICBpZiBub3Qgb3B0aW9ucy5pbWFnZV9uYW1lOgorICAgICAgICByb290ZnNfZGlyID0gJycKKyAgICAgICAgaWYgJ1JPT1RGU19ESVInIGluIG9wdGlvbnMucm9vdGZzX2RpcjoKKyAgICAgICAgICAgIHJvb3Rmc19kaXIgPSBvcHRpb25zLnJvb3Rmc19kaXJbJ1JPT1RGU19ESVInXQorICAgICAgICBib290aW1nX2RpciA9IG9wdGlvbnMuYm9vdGltZ19kaXIKKyAgICAgICAga2VybmVsX2RpciA9IG9wdGlvbnMua2VybmVsX2RpcgorICAgICAgICBuYXRpdmVfc3lzcm9vdCA9IG9wdGlvbnMubmF0aXZlX3N5c3Jvb3QKKyAgICAgICAgaWYgcm9vdGZzX2RpciBhbmQgbm90IG9zLnBhdGguaXNkaXIocm9vdGZzX2Rpcik6CisgICAgICAgICAgICBwcmludCAiLS1yb29mcy1kaXIgKC1yKSBub3QgZm91bmQsIGV4aXRpbmdcbiIKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGJvb3RpbWdfZGlyKToKKyAgICAgICAgICAgIHByaW50ICItLWJvb3RpbWctZGlyICgtYikgbm90IGZvdW5kLCBleGl0aW5nXG4iCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihrZXJuZWxfZGlyKToKKyAgICAgICAgICAgIHByaW50ICItLWtlcm5lbC1kaXIgKC1rKSBub3QgZm91bmQsIGV4aXRpbmdcbiIKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgICAgIHByaW50ICItLW5hdGl2ZS1zeXNyb290ICgtbikgbm90IGZvdW5kLCBleGl0aW5nXG4iCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgIGVsc2U6CisgICAgICAgIG5vdF9mb3VuZCA9IG5vdF9mb3VuZF9kaXIgPSAiIgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihyb290ZnNfZGlyKToKKyAgICAgICAgICAgIChub3RfZm91bmQsIG5vdF9mb3VuZF9kaXIpID0gKCJyb290ZnMtZGlyIiwgcm9vdGZzX2RpcikKKyAgICAgICAgZWxpZiBub3Qgb3MucGF0aC5pc2RpcihrZXJuZWxfZGlyKToKKyAgICAgICAgICAgIChub3RfZm91bmQsIG5vdF9mb3VuZF9kaXIpID0gKCJrZXJuZWwtZGlyIiwga2VybmVsX2RpcikKKyAgICAgICAgZWxpZiBub3Qgb3MucGF0aC5pc2RpcihuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICAgICAobm90X2ZvdW5kLCBub3RfZm91bmRfZGlyKSA9ICgibmF0aXZlLXN5c3Jvb3QiLCBuYXRpdmVfc3lzcm9vdCkKKyAgICAgICAgaWYgbm90X2ZvdW5kOgorICAgICAgICAgICAgaWYgbm90IG5vdF9mb3VuZF9kaXI6CisgICAgICAgICAgICAgICAgbm90X2ZvdW5kX2RpciA9ICJDb21wbGV0ZWx5IG1pc3NpbmcgYXJ0aWZhY3QgLSB3cm9uZyBpbWFnZSAoLndrcykgdXNlZD8iCisgICAgICAgICAgICBwcmludCAiQnVpbGQgYXJ0aWZhY3RzIG5vdCBmb3VuZCwgZXhpdGluZy4iCisgICAgICAgICAgICBwcmludCAiICAoUGxlYXNlIGNoZWNrIHRoYXQgdGhlIGJ1aWxkIGFydGlmYWN0cyBmb3IgdGhlIG1hY2hpbmUiCisgICAgICAgICAgICBwcmludCAiICAgc2VsZWN0ZWQgaW4gbG9jYWwuY29uZiBhY3R1YWxseSBleGlzdCBhbmQgdGhhdCB0aGV5IgorICAgICAgICAgICAgcHJpbnQgIiAgIGFyZSB0aGUgY29ycmVjdCBhcnRpZmFjdHMgZm9yIHRoZSBpbWFnZSAoLndrcyBmaWxlKSkuXG4iCisgICAgICAgICAgICBwcmludCAiVGhlIGFydGlmYWN0IHRoYXQgY291bGRuJ3QgYmUgZm91bmQgd2FzICVzOlxuICAlcyIgJSBcCisgICAgICAgICAgICAgICAgKG5vdF9mb3VuZCwgbm90X2ZvdW5kX2RpcikKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBrcm9vdGZzX2RpciA9IG9wdGlvbnMucm9vdGZzX2RpcgorICAgIGlmIGtyb290ZnNfZGlyIGlzIE5vbmU6CisgICAgICAgIGtyb290ZnNfZGlyID0ge30KKyAgICAgICAga3Jvb3Rmc19kaXJbJ1JPT1RGU19ESVInXSA9IHJvb3Rmc19kaXIKKworICAgIHJvb3Rmc19kaXIgPSByb290ZnNfZGlyX3RvX2FyZ3Moa3Jvb3Rmc19kaXIpCisKKyAgICBwcmludCAiQ3JlYXRpbmcgaW1hZ2UocykuLi5cbiIKKyAgICBlbmdpbmUud2ljX2NyZWF0ZSh3a3NfZmlsZSwgcm9vdGZzX2RpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QsIHNjcmlwdHNfcGF0aCwgaW1hZ2Vfb3V0cHV0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNvbXByZXNzb3IsIG9wdGlvbnMuZGVidWcpCisKKworZGVmIHdpY19saXN0X3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIGxpc3RpbmcgYXZhaWxhYmxlIGltYWdlcy4KKyAgICBUaGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkgaW1hZ2UuZW5naW5lLndpY19saXN0KCkKKyAgICAiIiIKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2U9dXNhZ2Vfc3RyKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKVsxXQorCisgICAgaWYgbm90IGVuZ2luZS53aWNfbGlzdChhcmdzLCBzY3JpcHRzX3BhdGgpOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJCYWQgbGlzdCBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworCitkZWYgd2ljX2hlbHBfdG9waWNfc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorICAgICIiIgorICAgIENvbW1hbmQtbGluZSBoYW5kbGluZyBmb3IgaGVscC1vbmx5ICdzdWJjb21tYW5kcycuICBUaGlzIGlzCisgICAgZXNzZW50aWFsbHkgYSBkdW1teSBjb21tYW5kIHRoYXQgZG9lc24gbm90aGluZyBidXQgYWxsb3cgdXNlcnMgdG8KKyAgICB1c2UgdGhlIGV4aXN0aW5nIHN1YmNvbW1hbmQgaW5mcmFzdHJ1Y3R1cmUgdG8gZGlzcGxheSBoZWxwIG9uIGEKKyAgICBwYXJ0aWN1bGFyIHRvcGljIG5vdCBhdHRhY2hlZCB0byBhbnkgcGFydGljdWxhciBzdWJjb21tYW5kLgorICAgICIiIgorICAgIHBhc3MKKworCit3aWNfaGVscF90b3BpY191c2FnZSA9ICIiIgorIiIiCisKK3N1YmNvbW1hbmRzID0geworICAgICJjcmVhdGUiOiAgICBbd2ljX2NyZWF0ZV9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICAgaGxwLndpY19jcmVhdGVfdXNhZ2UsCisgICAgICAgICAgICAgICAgICBobHAud2ljX2NyZWF0ZV9oZWxwXSwKKyAgICAibGlzdCI6ICAgICAgW3dpY19saXN0X3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgICBobHAud2ljX2xpc3RfdXNhZ2UsCisgICAgICAgICAgICAgICAgICBobHAud2ljX2xpc3RfaGVscF0sCisgICAgInBsdWdpbnMiOiAgIFt3aWNfaGVscF90b3BpY19zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICAgd2ljX2hlbHBfdG9waWNfdXNhZ2UsCisgICAgICAgICAgICAgICAgICBobHAuZ2V0X3dpY19wbHVnaW5zX2hlbHBdLAorICAgICJvdmVydmlldyI6ICBbd2ljX2hlbHBfdG9waWNfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgIHdpY19oZWxwX3RvcGljX3VzYWdlLAorICAgICAgICAgICAgICAgICAgaGxwLndpY19vdmVydmlld19oZWxwXSwKKyAgICAia2lja3N0YXJ0IjogW3dpY19oZWxwX3RvcGljX3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgICB3aWNfaGVscF90b3BpY191c2FnZSwKKyAgICAgICAgICAgICAgICAgIGhscC53aWNfa2lja3N0YXJ0X2hlbHBdLAorfQorCisKK2RlZiBzdGFydF9sb2dnaW5nKGxvZ2xldmVsKToKKyAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGZpbG5hbWU9J3dpYy5sb2cnLCBmaWxlbW9kZT0ndycsIGxldmVsPWxvZ2xldmVsKQorCisKK2RlZiBtYWluKGFyZ3YpOgorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih2ZXJzaW9uPSJ3aWMgdmVyc2lvbiAlcyIgJSBfX3ZlcnNpb25fXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2U9aGxwLndpY191c2FnZSkKKworICAgIHBhcnNlci5kaXNhYmxlX2ludGVyc3BlcnNlZF9hcmdzKCkKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhhcmd2KVsxXQorCisgICAgaWYgbGVuKGFyZ3MpOgorICAgICAgICBpZiBhcmdzWzBdID09ICJoZWxwIjoKKyAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAxOgorICAgICAgICAgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgcmV0dXJuIGhscC5pbnZva2Vfc3ViY29tbWFuZChhcmdzLCBwYXJzZXIsIGhscC53aWNfaGVscF91c2FnZSwgc3ViY29tbWFuZHMpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0cnk6CisgICAgICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3ZbMTpdKSkKKyAgICBleGNlcHQgV2ljRXJyb3IgYXMgZXJyOgorICAgICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAiRVJST1I6IiwgZXJyCisgICAgICAgIHN5cy5leGl0KDEpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy93aXBlLXN5c3Jvb3QgYi95b2N0by1wb2t5L3NjcmlwdHMvd2lwZS1zeXNyb290Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMyMmQzOWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvd2lwZS1zeXNyb290CkBAIC0wLDAgKzEsNTQgQEAKKyMhIC9iaW4vc2gKKworIyBXaXBlIG91dCBhbGwgb2YgdGhlIHN5c3Jvb3RzIGFuZCBhbGwgb2YgdGhlIHN0YW1wcyB0aGF0IHBvcHVsYXRlZCBpdC4KKyMgQXV0aG9yOiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworc2V0IC1lCisKK2lmIFsgJCMgLWd0IDAgXTsgdGhlbgorICAgIGVjaG8gIldpcGUgYWxsIHN5c3Jvb3RzIGFuZCBzeXNyb290LXJlbGF0ZWQgc3RhbXBzIGZvciB0aGUgY3VycmVudCBidWlsZCBkaXJlY3RvcnkuIiA+JjIKKyAgICBlY2hvICJVc2FnZTogJDAiID4mMgorICAgIGV4aXQgMQorZmkKKworRU5WUz1gbWt0ZW1wIC0tc3VmZml4IC13aXBlLXN5c3Jvb3QtZW52c2AKK2JpdGJha2UgLXAgLWUgPiAkRU5WUworCitldmFsIGBncmVwIC1GIFNTVEFURV9NQU5JRkVTVFM9ICRFTlZTYAorZXZhbCBgZ3JlcCAtRiBTVEFHSU5HX0RJUj0gJEVOVlNgCitldmFsIGBncmVwIC1GIFNUQU1QU19ESVI9ICRFTlZTYAorcm0gLWYgJEVOVlMKKworaWYgWyAteiAiJFNTVEFURV9NQU5JRkVTVFMiIC1vIC16ICIkU1RBR0lOR19ESVIiIC1vIC16ICIkU1RBTVBTX0RJUiIgXTsgdGhlbgorICAgIGVjaG8gIkNvdWxkIG5vdCBkZXRlcm1pbmUgU1NUQVRFX01BTklGRVNUUy9TVEFHSU5HX0RJUi9TVEFNUFNfRElSIGZyb20gYml0YmFrZSwgY2hlY2sgYWJvdmUgZm9yIGVycm9ycyIKKyAgICBleGl0IDEKK2ZpCisKK2VjaG8gIkRlbGV0aW5nIHRoZSBzeXNyb290cyBpbiAkU1RBR0lOR19ESVIsIGFuZCBzZWxlY3RlZCBzdGFtcHMgaW4gJFNTVEFURV9NQU5JRkVTVFMgYW5kICRTVEFNUFNfRElSLiIKKworIyBUaGUgc3lzcm9vdHMgdGhlbXNlbHZlcworcm0gLXJmICRTVEFHSU5HX0RJUgorCisjIFRoZSBzdGFtcHMgdGhhdCBzYWlkIHRoZSBzeXNyb290IHdhcyBwb3B1bGF0ZWQKK3JtIC1yZiAkU1RBTVBTX0RJUi8qLyovKi5kb19wb3B1bGF0ZV9zeXNyb290LioKK3JtIC1yZiAkU1RBTVBTX0RJUi8qLyovKi5kb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lLioKK3JtIC1yZiAkU1RBTVBTX0RJUi8qLyovKi5kb19wYWNrYWdlZGF0YS4qCitybSAtcmYgJFNUQU1QU19ESVIvKi8qLyouZG9fcGFja2FnZWRhdGFfc2V0c2NlbmUuKgorCisjIFRoZSBzc3RhdGUgbWFuaWZlc3RzCitybSAtcmYgJFNTVEFURV9NQU5JRkVTVFMvbWFuaWZlc3QtKi5wb3B1bGF0ZS1zeXNyb290CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMveW9jdG8tYnNwIGIveW9jdG8tcG9reS9zY3JpcHRzL3lvY3RvLWJzcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMjY5ODYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3lvY3RvLWJzcApAQCAtMCwwICsxLDE1NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgJ3lvY3RvLWJzcCcgaXMgdGhlIFlvY3RvIEJTUCBUb29sIHRoYXQgaGVscHMgdXNlcnMgY3JlYXRlIGEgbmV3CisjIFlvY3RvIEJTUC4gIEludm9raW5nIGl0IHdpdGhvdXQgYW55IGFyZ3VtZW50cyB3aWxsIGRpc3BsYXkgaGVscAorIyBzY3JlZW5zIGZvciB0aGUgJ3lvY3RvLWJzcCcgY29tbWFuZCBhbmQgbGlzdCB0aGUgYXZhaWxhYmxlCisjICd5b2N0by1ic3AnIHN1YmNvbW1hbmRzLiAgSW52b2tpbmcgYSBzdWJjb21tYW5kIHdpdGhvdXQgYW55CisjIGFyZ3VtZW50cyB3aWxsIGxpa2V3aXNlIGRpc3BsYXkgaGVscCBzY3JlZW5zIGZvciB0aGUgc3BlY2lmaWVkCisjIHN1YmNvbW1hbmQuICBQbGVhc2UgdXNlIHRoYXQgaW50ZXJmYWNlIGZvciBkZXRhaWxlZCBoZWxwLgorIworIyBBVVRIT1JTCisjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGludGVsLmNvbT4KKyMKKworX192ZXJzaW9uX18gPSAiMC4xLjAiCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgbG9nZ2luZworCitzY3JpcHRzX3BhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlswXSkpKQorbGliX3BhdGggPSBzY3JpcHRzX3BhdGggKyAnL2xpYicKK3N5cy5wYXRoID0gc3lzLnBhdGggKyBbbGliX3BhdGhdCisKK2Zyb20gYnNwLmhlbHAgaW1wb3J0ICoKK2Zyb20gYnNwLmVuZ2luZSBpbXBvcnQgKgorCisKK2RlZiB5b2N0b19ic3BfY3JlYXRlX3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIEJTUCBjcmVhdGlvbi4gIFRoZSByZWFsIHdvcmsgaXMgZG9uZSBieQorICAgIGJzcC5lbmdpbmUueW9jdG9fYnNwX2NyZWF0ZSgpCisgICAgIiIiCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlID0gdXNhZ2Vfc3RyKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1vIiwgIi0tb3V0ZGlyIiwgZGVzdCA9ICJvdXRkaXIiLCBhY3Rpb24gPSAic3RvcmUiLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHAgPSAibmFtZSBvZiBCU1AgZGlyIHRvIGNyZWF0ZSIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1pIiwgIi0taW5maWxlIiwgZGVzdCA9ICJwcm9wZXJ0aWVzX2ZpbGUiLCBhY3Rpb24gPSAic3RvcmUiLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHAgPSAibmFtZSBvZiBmaWxlIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyBmb3IgQlNQIHByb3BlcnRpZXMgYXMgYSBKU09OIGZpbGUiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYyIsICItLWNvZGVkdW1wIiwgZGVzdCA9ICJjb2RlZHVtcCIsIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ID0gRmFsc2UsIGhlbHAgPSAiZHVtcCB0aGUgZ2VuZXJhdGVkIGNvZGUgdG8gYnNwZ2VuLm91dCIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1zIiwgIi0tc2tpcC1naXQtY2hlY2siLCBkZXN0ID0gImdpdF9jaGVjayIsIGFjdGlvbiA9ICJzdG9yZV9mYWxzZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA9IFRydWUsIGhlbHAgPSAic2tpcCB0aGUgZ2l0IGNvbm5lY3Rpdml0eSBjaGVjayIpCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIGxlbihhcmdzKSAhPSAyOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBleGl0aW5nXG4iKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBtYWNoaW5lID0gYXJnc1swXQorICAgIGthcmNoID0gYXJnc1sxXQorCisgICAgaWYgb3B0aW9ucy5vdXRkaXI6CisgICAgICAgIGJzcF9vdXRwdXRfZGlyID0gb3B0aW9ucy5vdXRkaXIKKyAgICBlbHNlOgorICAgICAgICBic3Bfb3V0cHV0X2RpciA9ICJtZXRhLSIgKyBtYWNoaW5lCisKKyAgICBpZiBvcHRpb25zLmdpdF9jaGVjayBhbmQgbm90IG9wdGlvbnMucHJvcGVydGllc19maWxlOgorICAgICAgICBwcmludCAiQ2hlY2tpbmcgYmFzaWMgZ2l0IGNvbm5lY3Rpdml0eS4uLiIKKyAgICAgICAgaWYgbm90IHZlcmlmeV9naXRfcmVwbyhHSVRfQ0hFQ0tfVVJJKToKKyAgICAgICAgICAgIHByaW50ICJDb3VsZG4ndCB2ZXJpZnkgZ2l0IGNvbm5lY3Rpdml0eSwgZXhpdGluZ1xuIgorICAgICAgICAgICAgcHJpbnQgIkRldGFpbHM6IGNvdWxkbid0IGFjY2VzcyAlcyIgJSBHSVRfQ0hFQ0tfVVJJCisgICAgICAgICAgICBwcmludCAiICAgICAgICAgKHRoaXMgbW9zdCBsaWtlbHkgaW5kaWNhdGVzIGEgbmV0d29yayBjb25uZWN0aXZpdHkgcHJvYmxlbSBvciIKKyAgICAgICAgICAgIHByaW50ICIgICAgICAgICBhIG1pc2NvbmZpZ3VyZWQgZ2l0IGludGFsbGF0aW9uKSIKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCAiRG9uZS5cbiIKKworICAgIHlvY3RvX2JzcF9jcmVhdGUobWFjaGluZSwga2FyY2gsIHNjcmlwdHNfcGF0aCwgYnNwX291dHB1dF9kaXIsIG9wdGlvbnMuY29kZWR1bXAsIG9wdGlvbnMucHJvcGVydGllc19maWxlKQorCisKK2RlZiB5b2N0b19ic3BfbGlzdF9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBsaXN0aW5nIGF2YWlsYWJsZSBCU1AgcHJvcGVydGllcyBhbmQKKyAgICB2YWx1ZXMuICBUaGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkgYnNwLmVuZ2luZS55b2N0b19ic3BfbGlzdCgpCisgICAgIiIiCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlID0gdXNhZ2Vfc3RyKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1vIiwgIi0tb3V0ZmlsZSIsIGFjdGlvbiA9ICJzdG9yZSIsIGRlc3QgPSAicHJvcGVydGllc19maWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwID0gImR1bXAgdGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgQlNQIHByb3BlcnRpZXMgdG8gYSBKU09OIGZpbGUiKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIG5vdCB5b2N0b19ic3BfbGlzdChhcmdzLCBzY3JpcHRzX3BhdGgsIG9wdGlvbnMucHJvcGVydGllc19maWxlKToKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiQmFkIGxpc3QgYXJndW1lbnRzLCBleGl0aW5nXG4iKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKworc3ViY29tbWFuZHMgPSB7CisgICAgImNyZWF0ZSI6IFt5b2N0b19ic3BfY3JlYXRlX3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICB5b2N0b19ic3BfY3JlYXRlX3VzYWdlLAorICAgICAgICAgICAgICAgeW9jdG9fYnNwX2NyZWF0ZV9oZWxwXSwKKyAgICAibGlzdCI6ICAgW3lvY3RvX2JzcF9saXN0X3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICB5b2N0b19ic3BfbGlzdF91c2FnZSwKKyAgICAgICAgICAgICAgIHlvY3RvX2JzcF9saXN0X2hlbHBdLAorfQorCisKK2RlZiBzdGFydF9sb2dnaW5nKGxvZ2xldmVsKToKKyAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGZpbG5hbWUgPSAneW9jdG8tYnNwLmxvZycsIGZpbGVtb2RlID0gJ3cnLCBsZXZlbD1sb2dsZXZlbCkKKworCitkZWYgbWFpbigpOgorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih2ZXJzaW9uID0gInlvY3RvLWJzcCB2ZXJzaW9uICVzIiAlIF9fdmVyc2lvbl9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2FnZSA9IHlvY3RvX2JzcF91c2FnZSkKKworICAgIHBhcnNlci5kaXNhYmxlX2ludGVyc3BlcnNlZF9hcmdzKCkKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLUQiLCAiLS1kZWJ1ZyIsIGRlc3QgPSAiZGVidWciLCBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA9IEZhbHNlLCBoZWxwID0gIm91dHB1dCBkZWJ1ZyBpbmZvcm1hdGlvbiIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBsb2dsZXZlbCA9IGxvZ2dpbmcuSU5GTworICAgIGlmIG9wdGlvbnMuZGVidWc6CisgICAgICAgIGxvZ2xldmVsID0gbG9nZ2luZy5ERUJVRworICAgIHN0YXJ0X2xvZ2dpbmcobG9nbGV2ZWwpCisKKyAgICBpZiBsZW4oYXJncyk6CisgICAgICAgIGlmIGFyZ3NbMF0gPT0gImhlbHAiOgorICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDE6CisgICAgICAgICAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpbnZva2Vfc3ViY29tbWFuZChhcmdzLCBwYXJzZXIsIHlvY3RvX2JzcF9oZWxwX3VzYWdlLCBzdWJjb21tYW5kcykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRyeToKKyAgICAgICAgcmV0ID0gbWFpbigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmV0ID0gMQorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoNSkKKyAgICBzeXMuZXhpdChyZXQpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy95b2N0by1rZXJuZWwgYi95b2N0by1wb2t5L3NjcmlwdHMveW9jdG8ta2VybmVsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM5YjI4MjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMveW9jdG8ta2VybmVsCkBAIC0wLDAgKzEsMzk5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBERVNDUklQVElPTgorIyAneW9jdG8ta2VybmVsJyBpcyB0aGUgWW9jdG8gQlNQIFRvb2wgdGhhdCBoZWxwcyB1c2VycyBtYW5hZ2Uga2VybmVsCisjIGNvbmZpZyBvcHRpb25zIGFuZCBwYXRjaGVzIGZvciBhIFlvY3RvIEJTUC4gIEludm9raW5nIGl0IHdpdGhvdXQgYW55CisjIGFyZ3VtZW50cyB3aWxsIGRpc3BsYXkgaGVscCBzY3JlZW5zIGZvciB0aGUgJ3lvY3RvLWtlcm5lbCcgY29tbWFuZAorIyBhbmQgbGlzdCB0aGUgYXZhaWxhYmxlICd5b2N0by1rZXJuZWwnIHN1YmNvbW1hbmRzLiAgSW52b2tpbmcgYQorIyBzdWJjb21tYW5kIHdpdGhvdXQgYW55IGFyZ3VtZW50cyB3aWxsIGxpa2V3aXNlIGRpc3BsYXkgaGVscCBzY3JlZW5zCisjIGZvciB0aGUgc3BlY2lmaWVkIHN1YmNvbW1hbmQuICBQbGVhc2UgdXNlIHRoYXQgaW50ZXJmYWNlIGZvcgorIyBkZXRhaWxlZCBoZWxwLgorIworIyBBVVRIT1JTCisjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGludGVsLmNvbT4KKyMKKworX192ZXJzaW9uX18gPSAiMC4xLjAiCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgbG9nZ2luZworCitzY3JpcHRzX3BhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlswXSkpKQorbGliX3BhdGggPSBzY3JpcHRzX3BhdGggKyAnL2xpYicKK3N5cy5wYXRoID0gc3lzLnBhdGggKyBbbGliX3BhdGhdCisKK2Zyb20gYnNwLmhlbHAgaW1wb3J0ICoKK2Zyb20gYnNwLmtlcm5lbCBpbXBvcnQgKgorCisKK2RlZiB5b2N0b19rZXJuZWxfY29uZmlnX2xpc3Rfc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorICAgICIiIgorICAgIENvbW1hbmQtbGluZSBoYW5kbGluZyBmb3IgbGlzdGluZyBCU1AgY29uZmlnIG9wdGlvbnMuICBUaGUKKyAgICByZWFsIHdvcmsgaXMgZG9uZSBieSBic3Aua2VybmVsLnlvY3RvX2tlcm5lbF9jb25maWdfbGlzdCgpLgorICAgICIiIgorICAgIGxvZ2dpbmcuZGVidWcoInlvY3RvX2tlcm5lbF9jb25maWdfbGlzdF9zdWJjb21tYW5kIikKKworICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSA9IHVzYWdlX3N0cikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICBpZiBsZW4oYXJncykgIT0gMToKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhpdGluZ1xuIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgeW9jdG9fa2VybmVsX2NvbmZpZ19saXN0KHNjcmlwdHNfcGF0aCwgYXJnc1swXSkKKworCitkZWYgeW9jdG9fa2VybmVsX2NvbmZpZ19hZGRfc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorICAgICIiIgorICAgIENvbW1hbmQtbGluZSBoYW5kbGluZyBmb3IgYWRkaW5nIEJTUCBjb25maWcgaXRlbXMuICBUaGUgcmVhbCB3b3JrCisgICAgaXMgZG9uZSBieSBic3Aua2VybmVsLnlvY3RvX2tlcm5lbF9jb25maWdfYWRkKCkuCisgICAgIiIiCisgICAgbG9nZ2luZy5kZWJ1ZygieW9jdG9fa2VybmVsX2NvbmZpZ19hZGRfc3ViY29tbWFuZCIpCisKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UgPSB1c2FnZV9zdHIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgbGVuKGFyZ3MpIDwgMjoKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhpdGluZ1xuIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgbWFjaGluZSA9IGFyZ3MucG9wKDApCisgICAgeW9jdG9fa2VybmVsX2NvbmZpZ19hZGQoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBhcmdzKQorCisKK2RlZiB5b2N0b19rZXJuZWxfY29uZmlnX3JtX3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIHJlbW92aW5nIEJTUCBjb25maWcgaXRlbXMuICBUaGUgcmVhbAorICAgIHdvcmsgaXMgZG9uZSBieSBic3Aua2VybmVsLnlvY3RvX2tlcm5lbF9jb25maWdfcm0oKS4KKyAgICAiIiIKKyAgICBsb2dnaW5nLmRlYnVnKCJ5b2N0b19rZXJuZWxfY29uZmlnX3JtX3N1YmNvbW1hbmQiKQorCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlID0gdXNhZ2Vfc3RyKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIGxlbihhcmdzKSAhPSAxOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBleGl0aW5nXG4iKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICB5b2N0b19rZXJuZWxfY29uZmlnX3JtKHNjcmlwdHNfcGF0aCwgYXJnc1swXSkKKworCitkZWYgeW9jdG9fa2VybmVsX3BhdGNoX2xpc3Rfc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorICAgICIiIgorICAgIENvbW1hbmQtbGluZSBoYW5kbGluZyBmb3IgbGlzdGluZyBCU1AgKFNSQ19VUkkgcGF0Y2hlcy4gIFRoZSByZWFsCisgICAgd29yayBpcyBkb25lIGJ5IGJzcC5rZXJuZWwueW9jdG9fa2VybmVsX3BhdGNoX2xpc3QoKS4KKyAgICAiIiIKKyAgICBsb2dnaW5nLmRlYnVnKCJ5b2N0b19rZXJuZWxfcGF0Y2hfbGlzdF9zdWJjb21tYW5kIikKKworICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSA9IHVzYWdlX3N0cikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICBpZiBsZW4oYXJncykgIT0gMToKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhpdGluZ1xuIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgeW9jdG9fa2VybmVsX3BhdGNoX2xpc3Qoc2NyaXB0c19wYXRoLCBhcmdzWzBdKQorCisKK2RlZiB5b2N0b19rZXJuZWxfcGF0Y2hfYWRkX3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIGFkZGluZyBCU1AgcGF0Y2hlcy4gIFRoZSByZWFsIHdvcmsgaXMKKyAgICBkb25lIGJ5IGJzcC5rZXJuZWwueW9jdG9fa2VybmVsX3BhdGNoX2FkZCgpLgorICAgICIiIgorICAgIGxvZ2dpbmcuZGVidWcoInlvY3RvX2tlcm5lbF9wYXRjaF9hZGRfc3ViY29tbWFuZCIpCisKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UgPSB1c2FnZV9zdHIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgbGVuKGFyZ3MpIDwgMjoKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhpdGluZ1xuIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgbWFjaGluZSA9IGFyZ3MucG9wKDApCisgICAgeW9jdG9fa2VybmVsX3BhdGNoX2FkZChzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGFyZ3MpCisKKworZGVmIHlvY3RvX2tlcm5lbF9wYXRjaF9ybV9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciByZW1vdmluZyBCU1AgcGF0Y2hlcy4gIFRoZSByZWFsIHdvcmsgaXMKKyAgICBkb25lIGJ5IGJzcC5rZXJuZWwueW9jdG9fa2VybmVsX3BhdGNoX3JtKCkuCisgICAgIiIiCisgICAgbG9nZ2luZy5kZWJ1ZygieW9jdG9fa2VybmVsX3BhdGNoX3JtX3N1YmNvbW1hbmQiKQorCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlID0gdXNhZ2Vfc3RyKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIGxlbihhcmdzKSAhPSAxOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBleGl0aW5nXG4iKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICB5b2N0b19rZXJuZWxfcGF0Y2hfcm0oc2NyaXB0c19wYXRoLCBhcmdzWzBdKQorCisKK2RlZiB5b2N0b19rZXJuZWxfZmVhdHVyZV9saXN0X3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIGxpc3RpbmcgdGhlIEJTUCBmZWF0dXJlcyB0aGF0IGFyZSBiZWluZworICAgIHVzZWQgYnkgdGhlIEJTUC4gIFRoZSByZWFsIHdvcmsgaXMgZG9uZSBieQorICAgIGJzcC5rZXJuZWwueW9jdG9fa2VybmVsX2ZlYXR1cmVfbGlzdCgpLgorICAgICIiIgorICAgIGxvZ2dpbmcuZGVidWcoInlvY3RvX2tlcm5lbF9mZWF0dXJlX2xpc3Rfc3ViY29tbWFuZCIpCisKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UgPSB1c2FnZV9zdHIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgbGVuKGFyZ3MpICE9IDE6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2xpc3Qoc2NyaXB0c19wYXRoLCBhcmdzWzBdKQorCisKK2RlZiB5b2N0b19rZXJuZWxfZmVhdHVyZV9hZGRfc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorICAgICIiIgorICAgIENvbW1hbmQtbGluZSBoYW5kbGluZyBmb3IgYWRkaW5nIHRoZSB1c2Ugb2Yga2VybmVsIGZlYXR1cmVzIHRvIGEKKyAgICBCU1AuICBUaGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkgYnNwLmtlcm5lbC55b2N0b19rZXJuZWxfZmVhdHVyZV9hZGQoKS4KKyAgICAiIiIKKyAgICBsb2dnaW5nLmRlYnVnKCJ5b2N0b19rZXJuZWxfZmVhdHVyZV9hZGRfc3ViY29tbWFuZCIpCisKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UgPSB1c2FnZV9zdHIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgbGVuKGFyZ3MpIDwgMjoKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhpdGluZ1xuIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgbWFjaGluZSA9IGFyZ3MucG9wKDApCisgICAgeW9jdG9fa2VybmVsX2ZlYXR1cmVfYWRkKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgYXJncykKKworCitkZWYgeW9jdG9fa2VybmVsX2ZlYXR1cmVfcm1fc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorICAgICIiIgorICAgIENvbW1hbmQtbGluZSBoYW5kbGluZyBmb3IgcmVtb3ZpbmcgdGhlIHVzZSBvZiBrZXJuZWwgZmVhdHVyZXMgZnJvbQorICAgIGEgQlNQLiAgVGhlIHJlYWwgd29yayBpcyBkb25lIGJ5IGJzcC5rZXJuZWwueW9jdG9fa2VybmVsX2ZlYXR1cmVfcm0oKS4KKyAgICAiIiIKKyAgICBsb2dnaW5nLmRlYnVnKCJ5b2N0b19rZXJuZWxfZmVhdHVyZV9ybV9zdWJjb21tYW5kIikKKworICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSA9IHVzYWdlX3N0cikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICBpZiBsZW4oYXJncykgIT0gMToKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhpdGluZ1xuIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgeW9jdG9fa2VybmVsX2ZlYXR1cmVfcm0oc2NyaXB0c19wYXRoLCBhcmdzWzBdKQorCisKK2RlZiB5b2N0b19rZXJuZWxfYXZhaWxhYmxlX2ZlYXR1cmVzX2xpc3Rfc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorICAgICIiIgorICAgIENvbW1hbmQtbGluZSBoYW5kbGluZyBmb3IgbGlzdGluZyBhbGwgdGhlIGtlcm5lbCBmZWF0dXJlcworICAgIGF2YWlsYWJsZSBmb3IgdXNlIGluIGEgQlNQLiAgVGhpcyBpbmNsdWRlcyB0aGUgZmVhdHVyZXMgcHJlc2VudCBpbgorICAgIHRoZSBtZXRhIGJyYW5jaChlcykgb2YgdGhlIHBvaW50ZWQtdG8gcmVwbyhzKSBhcyB3ZWxsIGFzIHRoZSBsb2NhbAorICAgIGZlYXR1cmVzIGFkZGVkIGluIHJlY2lwZS1zcGFjZSB0byB0aGUgY3VycmVudCBCU1AgYXMgd2VsbC4gIFRoZQorICAgIHJlYWwgd29yayBpcyBkb25lIGJ5IGJzcC5rZXJuZWwueW9jdG9fa2VybmVsX2F2YWlsYWJsZV9mZWF0dXJlc19saXN0KCkuCisgICAgIiIiCisgICAgbG9nZ2luZy5kZWJ1ZygieW9jdG9fa2VybmVsX2ZlYXR1cmVfYXZhaWxhYmxlX2ZlYXR1cmVzX2xpc3Rfc3ViY29tbWFuZCIpCisKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UgPSB1c2FnZV9zdHIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgbGVuKGFyZ3MpICE9IDE6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHlvY3RvX2tlcm5lbF9hdmFpbGFibGVfZmVhdHVyZXNfbGlzdChzY3JpcHRzX3BhdGgsIGFyZ3NbMF0pCisKKworZGVmIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2Rlc2NyaWJlX3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIGxpc3RpbmcgdGhlIGRlc2NyaXB0aW9uIG9mIGEgc3BlY2lmaWMKKyAgICBrZXJuZWwgZmVhdHVyZSBhdmFpbGFibGUgZm9yIHVzZSBpbiBhIEJTUC4gIFRoaXMgaW5jbHVkZXMgdGhlCisgICAgZmVhdHVyZXMgcHJlc2VudCBpbiB0aGUgbWV0YSBicmFuY2goZXMpIG9mIHRoZSBwb2ludGVkLXRvIHJlcG8ocykKKyAgICBhcyB3ZWxsIGFzIHRoZSBsb2NhbCBmZWF0dXJlcyBhZGRlZCBpbiByZWNpcGUtc3BhY2UgdG8gdGhlIGN1cnJlbnQKKyAgICBCU1AgYXMgd2VsbC4gIFRoZSByZWFsIHdvcmsgaXMgZG9uZSBieQorICAgIGJzcC5rZXJuZWwueW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzY3JpYmUoKS4KKyAgICAiIiIKKyAgICBsb2dnaW5nLmRlYnVnKCJ5b2N0b19rZXJuZWxfZmVhdHVyZV9kZXNjcmliZV9zdWJjb21tYW5kIikKKworICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSA9IHVzYWdlX3N0cikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICBpZiBsZW4oYXJncykgIT0gMjoKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhpdGluZ1xuIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgeW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzY3JpYmUoc2NyaXB0c19wYXRoLCBhcmdzWzBdLCBhcmdzWzFdKQorCisKK2RlZiB5b2N0b19rZXJuZWxfZmVhdHVyZV9jcmVhdGVfc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorICAgICIiIgorICAgIENvbW1hbmQtbGluZSBoYW5kbGluZyBmb3IgY3JlYXRpbmcgYSByZWNpcGUtc3BhY2Uga2VybmVsIGZlYXR1cmUKKyAgICBpbiBhIEJTUC4gIFRoZSByZWFsIHdvcmsgaXMgZG9uZSBieQorICAgIGJzcC5rZXJuZWwueW9jdG9fa2VybmVsX2ZlYXR1cmVfY3JlYXRlKCkuCisgICAgIiIiCisgICAgbG9nZ2luZy5kZWJ1ZygieW9jdG9fa2VybmVsX2ZlYXR1cmVfY3JlYXRlX3N1YmNvbW1hbmQiKQorCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlID0gdXNhZ2Vfc3RyKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIGxlbihhcmdzKSA8IDQ6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIG1hY2hpbmUgPSBhcmdzLnBvcCgwKQorICAgIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2NyZWF0ZShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGFyZ3MpCisKKworZGVmIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2Rlc3Ryb3lfc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorICAgICIiIgorICAgIENvbW1hbmQtbGluZSBoYW5kbGluZyBmb3IgcmVtb3ZpbmcgYSByZWNpcGUtc3BhY2Uga2VybmVsIGZlYXR1cmUKKyAgICBmcm9tIGEgQlNQLiAgVGhlIHJlYWwgd29yayBpcyBkb25lIGJ5CisgICAgYnNwLmtlcm5lbC55b2N0b19rZXJuZWxfZmVhdHVyZV9kZXN0cm95KCkuCisgICAgIiIiCisgICAgbG9nZ2luZy5kZWJ1ZygieW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzdHJveV9zdWJjb21tYW5kIikKKworICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSA9IHVzYWdlX3N0cikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICBpZiBsZW4oYXJncykgIT0gMjoKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhpdGluZ1xuIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgeW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzdHJveShzY3JpcHRzX3BhdGgsIGFyZ3NbMF0sIGFyZ3NbMV0pCisKKworc3ViY29tbWFuZHMgPSB7CisgICAgImNvbmZpZy1saXN0IjogW3lvY3RvX2tlcm5lbF9jb25maWdfbGlzdF9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfY29uZmlnX2xpc3RfdXNhZ2UsCisgICAgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9jb25maWdfbGlzdF9oZWxwXSwKKyAgICAiY29uZmlnLWFkZCI6IFt5b2N0b19rZXJuZWxfY29uZmlnX2FkZF9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9jb25maWdfYWRkX3VzYWdlLAorICAgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9jb25maWdfYWRkX2hlbHBdLAorICAgICJjb25maWctcm0iOiBbeW9jdG9fa2VybmVsX2NvbmZpZ19ybV9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2NvbmZpZ19ybV91c2FnZSwKKyAgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9jb25maWdfcm1faGVscF0sCisgICAgInBhdGNoLWxpc3QiOiBbeW9jdG9fa2VybmVsX3BhdGNoX2xpc3Rfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfcGF0Y2hfbGlzdF91c2FnZSwKKyAgICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfcGF0Y2hfbGlzdF9oZWxwXSwKKyAgICAicGF0Y2gtYWRkIjogW3lvY3RvX2tlcm5lbF9wYXRjaF9hZGRfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9wYXRjaF9hZGRfdXNhZ2UsCisgICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfcGF0Y2hfYWRkX2hlbHBdLAorICAgICJwYXRjaC1ybSI6IFt5b2N0b19rZXJuZWxfcGF0Y2hfcm1fc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX3BhdGNoX3JtX3VzYWdlLAorICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfcGF0Y2hfcm1faGVscF0sCisgICAgImZlYXR1cmUtbGlzdCI6IFt5b2N0b19rZXJuZWxfZmVhdHVyZV9saXN0X3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2ZlYXR1cmVfbGlzdF91c2FnZSwKKyAgICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfZmVhdHVyZV9saXN0X2hlbHBdLAorICAgICJmZWF0dXJlLWFkZCI6IFt5b2N0b19rZXJuZWxfZmVhdHVyZV9hZGRfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2FkZF91c2FnZSwKKyAgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2FkZF9oZWxwXSwKKyAgICAiZmVhdHVyZS1ybSI6IFt5b2N0b19rZXJuZWxfZmVhdHVyZV9ybV9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfZmVhdHVyZV9ybV91c2FnZSwKKyAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2ZlYXR1cmVfcm1faGVscF0sCisgICAgImZlYXR1cmVzLWxpc3QiOiBbeW9jdG9fa2VybmVsX2F2YWlsYWJsZV9mZWF0dXJlc19saXN0X3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9hdmFpbGFibGVfZmVhdHVyZXNfbGlzdF91c2FnZSwKKyAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2F2YWlsYWJsZV9mZWF0dXJlc19saXN0X2hlbHBdLAorICAgICJmZWF0dXJlLWRlc2NyaWJlIjogW3lvY3RvX2tlcm5lbF9mZWF0dXJlX2Rlc2NyaWJlX3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2Rlc2NyaWJlX3VzYWdlLAorICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfZmVhdHVyZV9kZXNjcmliZV9oZWxwXSwKKyAgICAiZmVhdHVyZS1jcmVhdGUiOiBbeW9jdG9fa2VybmVsX2ZlYXR1cmVfY3JlYXRlX3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2NyZWF0ZV91c2FnZSwKKyAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2ZlYXR1cmVfY3JlYXRlX2hlbHBdLAorICAgICJmZWF0dXJlLWRlc3Ryb3kiOiBbeW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzdHJveV9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfZmVhdHVyZV9kZXN0cm95X3VzYWdlLAorICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfZmVhdHVyZV9kZXN0cm95X2hlbHBdLAorfQorCisKK2RlZiBzdGFydF9sb2dnaW5nKGxvZ2xldmVsKToKKyAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGZpbG5hbWUgPSAneW9jdG8ta2VybmVsLmxvZycsIGZpbGVtb2RlID0gJ3cnLCBsZXZlbD1sb2dsZXZlbCkKKworCitkZWYgbWFpbigpOgorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih2ZXJzaW9uID0gInlvY3RvLWtlcm5lbCB2ZXJzaW9uICVzIiAlIF9fdmVyc2lvbl9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2FnZSA9IHlvY3RvX2tlcm5lbF91c2FnZSkKKworICAgIHBhcnNlci5kaXNhYmxlX2ludGVyc3BlcnNlZF9hcmdzKCkKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLUQiLCAiLS1kZWJ1ZyIsIGRlc3QgPSAiZGVidWciLCBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA9IEZhbHNlLCBoZWxwID0gIm91dHB1dCBkZWJ1ZyBpbmZvcm1hdGlvbiIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBsb2dsZXZlbCA9IGxvZ2dpbmcuSU5GTworICAgIGlmIG9wdGlvbnMuZGVidWc6CisgICAgICAgIGxvZ2xldmVsID0gbG9nZ2luZy5ERUJVRworICAgIHN0YXJ0X2xvZ2dpbmcobG9nbGV2ZWwpCisKKyAgICBpZiBsZW4oYXJncyk6CisgICAgICAgIGlmIGFyZ3NbMF0gPT0gImhlbHAiOgorICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDE6CisgICAgICAgICAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgICAgICBzYyA9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNjID0gMAorCisgICAgICAgIGlmIGFyZ3Nbc2NdID09ICJjb25maWciIG9yIGFyZ3Nbc2NdID09ICJwYXRjaCIgb3IgXAorICAgICAgICAgICAgICAgIGFyZ3Nbc2NdID09ICJmZWF0dXJlIiBvciBhcmdzW3NjXSA9PSAiZmVhdHVyZXMiOgorICAgICAgICAgICAgaWYgbGVuKGFyZ3MpIDwgMiArIHNjOgorICAgICAgICAgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICAgICAgYXJnc1tzY10gKz0gIi0iICsgYXJnc1tzYyArIDFdCisgICAgICAgICAgICBhcmdzLnBvcChzYyArIDEpCisKKyAgICBpbnZva2Vfc3ViY29tbWFuZChhcmdzLCBwYXJzZXIsIHlvY3RvX2tlcm5lbF9oZWxwX3VzYWdlLCBzdWJjb21tYW5kcykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRyeToKKyAgICAgICAgcmV0ID0gbWFpbigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmV0ID0gMQorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoNSkKKyAgICBzeXMuZXhpdChyZXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMveW9jdG8tbGF5ZXIgYi95b2N0by1wb2t5L3NjcmlwdHMveW9jdG8tbGF5ZXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTNkMmFhYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy95b2N0by1sYXllcgpAQCAtMCwwICsxLDE0NyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgJ3lvY3RvLWxheWVyJyBpcyB0aGUgWW9jdG8gVG9vbCB0aGF0IGhlbHBzIHVzZXJzIGNyZWF0ZSBhIG5ldyBZb2N0bworIyBsYXllci4gIEludm9raW5nIGl0IHdpdGhvdXQgYW55IGFyZ3VtZW50cyB3aWxsIGRpc3BsYXkgaGVscCBzY3JlZW5zCisjIGZvciB0aGUgJ3lvY3RvLWxheWVyJyBjb21tYW5kIGFuZCBsaXN0IHRoZSBhdmFpbGFibGUgJ3lvY3RvLWxheWVyJworIyBzdWJjb21tYW5kcy4gIEludm9raW5nIGEgc3ViY29tbWFuZCB3aXRob3V0IGFueSBhcmd1bWVudHMgd2lsbAorIyBsaWtld2lzZSBkaXNwbGF5IGhlbHAgc2NyZWVucyBmb3IgdGhlIHNwZWNpZmllZCBzdWJjb21tYW5kLiAgUGxlYXNlCisjIHVzZSB0aGF0IGludGVyZmFjZSBmb3IgZGV0YWlsZWQgaGVscC4KKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBpbnRlbC5jb20+CisjCisKK19fdmVyc2lvbl9fID0gIjAuMS4wIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IGxvZ2dpbmcKKworc2NyaXB0c19wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc3lzLmFyZ3ZbMF0pKSkKK2xpYl9wYXRoID0gc2NyaXB0c19wYXRoICsgJy9saWInCitzeXMucGF0aCA9IHN5cy5wYXRoICsgW2xpYl9wYXRoXQorCitmcm9tIGJzcC5oZWxwIGltcG9ydCAqCitmcm9tIGJzcC5lbmdpbmUgaW1wb3J0ICoKKworCitkZWYgeW9jdG9fbGF5ZXJfY3JlYXRlX3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIGxheWVyIGNyZWF0aW9uLiAgVGhlIHJlYWwgd29yayBpcyBkb25lIGJ5CisgICAgYnNwLmVuZ2luZS55b2N0b19sYXllcl9jcmVhdGUoKQorICAgICIiIgorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSA9IHVzYWdlX3N0cikKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbyIsICItLW91dGRpciIsIGRlc3QgPSAib3V0ZGlyIiwgYWN0aW9uID0gInN0b3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwID0gIm5hbWUgb2YgbGF5ZXIgZGlyIHRvIGNyZWF0ZSIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1pIiwgIi0taW5maWxlIiwgZGVzdCA9ICJwcm9wZXJ0aWVzX2ZpbGUiLCBhY3Rpb24gPSAic3RvcmUiLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHAgPSAibmFtZSBvZiBmaWxlIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyBmb3IgbGF5ZXIgaW5wdXQgcHJvcGVydGllcyBhcyBhIEpTT04gZmlsZSIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1jIiwgIi0tY29kZWR1bXAiLCBkZXN0ID0gImNvZGVkdW1wIiwgYWN0aW9uID0gInN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgPSBGYWxzZSwgaGVscCA9ICJkdW1wIHRoZSBnZW5lcmF0ZWQgY29kZSB0byBsYXllcmdlbi5vdXQiKQorICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICBpZiBsZW4oYXJncykgPCAxIG9yIGxlbihhcmdzKSA+IDI6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGxheWVyX25hbWUgPSBhcmdzWzBdCisgICAgcHJvcGVydGllcyA9ICIiCisKKyAgICBpZiBsZW4oYXJncykgPT0gMjoKKyAgICAgICAgbGF5ZXJfcHJpb3JpdHkgPSBhcmdzWzFdCisgICAgICAgIHByb3BlcnRpZXMgPSAneyJsYXllcl9wcmlvcml0eSI6IicgKyBsYXllcl9wcmlvcml0eSArICcifScKKworICAgIGlmIG9wdGlvbnMub3V0ZGlyOgorICAgICAgICBsYXllcl9vdXRwdXRfZGlyID0gb3B0aW9ucy5vdXRkaXIKKyAgICBlbHNlOgorICAgICAgICBsYXllcl9vdXRwdXRfZGlyID0gIm1ldGEtIiArIGxheWVyX25hbWUKKworICAgIHlvY3RvX2xheWVyX2NyZWF0ZShsYXllcl9uYW1lLCBzY3JpcHRzX3BhdGgsIGxheWVyX291dHB1dF9kaXIsIG9wdGlvbnMuY29kZWR1bXAsIG9wdGlvbnMucHJvcGVydGllc19maWxlLCBwcm9wZXJ0aWVzKQorCisKK2RlZiB5b2N0b19sYXllcl9saXN0X3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIGxpc3RpbmcgYXZhaWxhYmxlIGxheWVyIHByb3BlcnRpZXMgYW5kCisgICAgdmFsdWVzLiAgVGhlIHJlYWwgd29yayBpcyBkb25lIGJ5IGJzcC5lbmdpbmUueW9jdG9fbGF5ZXJfbGlzdCgpCisgICAgIiIiCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlID0gdXNhZ2Vfc3RyKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1vIiwgIi0tb3V0ZmlsZSIsIGFjdGlvbiA9ICJzdG9yZSIsIGRlc3QgPSAicHJvcGVydGllc19maWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwID0gImR1bXAgdGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgbGF5ZXIgcHJvcGVydGllcyB0byBhIEpTT04gZmlsZSIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgbm90IHlvY3RvX2xheWVyX2xpc3QoYXJncywgc2NyaXB0c19wYXRoLCBvcHRpb25zLnByb3BlcnRpZXNfZmlsZSk6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIkJhZCBsaXN0IGFyZ3VtZW50cywgZXhpdGluZ1xuIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisKK3N1YmNvbW1hbmRzID0geworICAgICJjcmVhdGUiOiBbeW9jdG9fbGF5ZXJfY3JlYXRlX3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICB5b2N0b19sYXllcl9jcmVhdGVfdXNhZ2UsCisgICAgICAgICAgICAgICB5b2N0b19sYXllcl9jcmVhdGVfaGVscF0sCisgICAgImxpc3QiOiAgIFt5b2N0b19sYXllcl9saXN0X3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICB5b2N0b19sYXllcl9saXN0X3VzYWdlLAorICAgICAgICAgICAgICAgeW9jdG9fbGF5ZXJfbGlzdF9oZWxwXSwKK30KKworCitkZWYgc3RhcnRfbG9nZ2luZyhsb2dsZXZlbCk6CisgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxuYW1lID0gJ3lvY3RvLWxheWVyLmxvZycsIGZpbGVtb2RlID0gJ3cnLCBsZXZlbD1sb2dsZXZlbCkKKworCitkZWYgbWFpbigpOgorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih2ZXJzaW9uID0gInlvY3RvLWxheWVyIHZlcnNpb24gJXMiICUgX192ZXJzaW9uX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlID0geW9jdG9fbGF5ZXJfdXNhZ2UpCisKKyAgICBwYXJzZXIuZGlzYWJsZV9pbnRlcnNwZXJzZWRfYXJncygpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1EIiwgIi0tZGVidWciLCBkZXN0ID0gImRlYnVnIiwgYWN0aW9uID0gInN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgPSBGYWxzZSwgaGVscCA9ICJvdXRwdXQgZGVidWcgaW5mb3JtYXRpb24iKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgbG9nbGV2ZWwgPSBsb2dnaW5nLklORk8KKyAgICBpZiBvcHRpb25zLmRlYnVnOgorICAgICAgICBsb2dsZXZlbCA9IGxvZ2dpbmcuREVCVUcKKyAgICBzdGFydF9sb2dnaW5nKGxvZ2xldmVsKQorCisgICAgaWYgbGVuKGFyZ3MpOgorICAgICAgICBpZiBhcmdzWzBdID09ICJoZWxwIjoKKyAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAxOgorICAgICAgICAgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaW52b2tlX3N1YmNvbW1hbmQoYXJncywgcGFyc2VyLCB5b2N0b19sYXllcl9oZWxwX3VzYWdlLCBzdWJjb21tYW5kcykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRyeToKKyAgICAgICAgcmV0ID0gbWFpbigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmV0ID0gMQorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoNSkKKyAgICBzeXMuZXhpdChyZXQpCisK